ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDVlMDczNjcuLmU4YjdkMzY2IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTM3MzgsNyArMzczOCw3IEBACiBTOiBHZXJtYW55CiAKIE46IEdlcnRqYW4gdmFuIFdpbmdlcmRlCi1FOiBnd2luZ2VyZGVAaG9tZS5ubAorRTogZ3dpbmdlcmRlQGdtYWlsLmNvbQogRDogUmFsaW5rIHJ0MngwMCBXTEFOIGRyaXZlcgogRDogTWluaXggVjIgZmlsZS1zeXN0ZW0KIEQ6IE1pc2MgZml4ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM0ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0wLDAgKzEsNjEgQEAKK1doYXQ6CQlzZWN1cml0eS9pbWEvcG9saWN5CitEYXRlOgkJTWF5IDIwMDgKK0NvbnRhY3Q6CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkJTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJCXZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcworCQlsb2FkZWQgaW50byB0aGUgcnVuLXRpbWUgb2YgdGhpcyBzeXN0ZW0uICBBdCBydW50aW1lLAorCQl0aGUgcG9saWN5IGNhbiBiZSBjb25zdHJhaW5lZCBiYXNlZCBvbiBMU00gc3BlY2lmaWMgZGF0YS4KKwkJUG9saWNpZXMgYXJlIGxvYWRlZCBpbnRvIHRoZSBzZWN1cml0eWZzIGZpbGUgaW1hL3BvbGljeQorCQlieSBvcGVuaW5nIHRoZSBmaWxlLCB3cml0aW5nIHRoZSBydWxlcyBvbmUgYXQgYSB0aW1lIGFuZAorCQl0aGVuIGNsb3NpbmcgdGhlIGZpbGUuICBUaGUgbmV3IHBvbGljeSB0YWtlcyBlZmZlY3QgYWZ0ZXIKKwkJdGhlIGZpbGUgaW1hL3BvbGljeSBpcyBjbG9zZWQuCisKKwkJcnVsZSBmb3JtYXQ6IGFjdGlvbiBbY29uZGl0aW9uIC4uLl0KKworCQlhY3Rpb246IG1lYXN1cmUgfCBkb250X21lYXN1cmUKKwkJY29uZGl0aW9uOj0gYmFzZSB8IGxzbQorCQkJYmFzZToJW1tmdW5jPV0gW21hc2s9XSBbZnNtYWdpYz1dIFt1aWQ9XV0KKwkJCWxzbToJW1tzdWJqX3VzZXI9XSBbc3Vial9yb2xlPV0gW3N1YmpfdHlwZT1dCisJCQkJIFtvYmpfdXNlcj1dIFtvYmpfcm9sZT1dIFtvYmpfdHlwZT1dXQorCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bSU5PREVfUEVSTUlTU0lPTl0KKwkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCisJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCisJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCisJCWxzbTogIAlhcmUgTFNNIHNwZWNpZmljCisKKwkJZGVmYXVsdCBwb2xpY3k6CisJCQkjIFBST0NfU1VQRVJfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4OWZhMAorCQkJIyBTWVNGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHg2MjY1NjU3MgorCQkJIyBERUJVR0ZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDY0NjI2NzIwCisJCQkjIFRNUEZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDAxMDIxOTk0CisJCQkjIFNFQ1VSSVRZRlNfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4NzM2MzY2NzMKKworCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKKwkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQworCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCisJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKKwkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKKwkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisKKwkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgorCisJCVNFTGludXg6CisJCQkjIFNFTElOVVhfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4Rjk3Q0ZGOEMKKworCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPXZhcl9sb2dfdAorCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPWF1ZGl0ZF9sb2dfdAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1JTk9ERV9QRVJNIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisKKwkJU21hY2s6CisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMTQ2MmVkOC4uYTNhODNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKIAkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbCByYXBpZGlvLnhtbCBcCiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCi0JICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sCisJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKKwkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCmluZGV4IDlkNjQ0ZjcuLjAyMzBhOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IkFMU0EtRHJpdmVyLUFQSSI+CiAgIDxib29raW5mbz4KICAgICA8dGl0bGU+VGhlIEFMU0EgRHJpdmVyIEFQSTwvdGl0bGU+CiAKQEAgLTM1LDYgKzM1LDggQEAKIAogICA8L2Jvb2tpbmZvPgogCis8dG9jPjwvdG9jPgorCiAgIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnZW1lbnQ8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2luaXQuYwpAQCAtNzEsNiArNzMsMTAgQEAKICFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCiAhRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKICAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5WaXJ0dWFsIE1hc3RlciBDb250cm9sIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvdm1hc3Rlci5jCishSWluY2x1ZGUvc291bmQvY29udHJvbC5oCisgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KICAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgpAQCAtODksNiArOTUsOSBAQAogICAgICA8c2VjdDE+PHRpdGxlPkhhcmR3YXJlLURlcGVuZGVudCBEZXZpY2VzIEFQSTwvdGl0bGU+CiAhRXNvdW5kL2NvcmUvaHdkZXAuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkphY2sgQWJzdHJhY3Rpb24gTGF5ZXIgQVBJPC90aXRsZT4KKyFFc291bmQvY29yZS9qYWNrLmMKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5JU0EgRE1BIEhlbHBlcnM8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2lzYWRtYS5jCiAgICAgIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbAppbmRleCAzYTg4MmQ5Li5jNjcxYTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKQEAgLTQ0MCw2ICs0NDAsNyBAQAogICAgICB1c2VkIGluIHRoZSBnZW5lcmljIElSUSBsYXllci4KICAgICAgPC9wYXJhPgogIUlpbmNsdWRlL2xpbnV4L2lycS5oCishSWluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hYzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAppbmRleCA3N2MzYzIwLi5mYmVhZmZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbApAQCAtMTcsOCArMTcsNyBAQAogICAgIDwvYXV0aG9yZ3JvdXA+CiAKICAgICA8Y29weXJpZ2h0PgotICAgICAgPHllYXI+MjAwNzwveWVhcj4KLSAgICAgIDx5ZWFyPjIwMDg8L3llYXI+CisgICAgICA8eWVhcj4yMDA3LTIwMDk8L3llYXI+CiAgICAgICA8aG9sZGVyPkpvaGFubmVzIEJlcmc8L2hvbGRlcj4KICAgICA8L2NvcHlyaWdodD4KIApAQCAtMTY1LDggKzE2NCw4IEBACiAhUGluY2x1ZGUvbmV0L21hYzgwMjExLmggRnJhbWUgZm9ybWF0CiAgICAgICA8L3NlY3QxPgogICAgICAgPHNlY3QxPgotICAgICAgICA8dGl0bGU+QWxpZ25tZW50IGlzc3VlczwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICAgICAgPHRpdGxlPlBhY2tldCBhbGlnbm1lbnQ8L3RpdGxlPgorIVBuZXQvbWFjODAyMTEvcnguYyBQYWNrZXQgYWxpZ25tZW50CiAgICAgICA8L3NlY3QxPgogICAgICAgPHNlY3QxPgogICAgICAgICA8dGl0bGU+Q2FsbGluZyBpbnRvIG1hYzgwMjExIGZyb20gaW50ZXJydXB0czwvdGl0bGU+CkBAIC0yMjMsNiArMjIyLDE3IEBACiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2tleV9mbGFncwogICAgIDwvY2hhcHRlcj4KIAorICAgIDxjaGFwdGVyIGlkPSJwb3dlcnNhdmUiPgorICAgICAgPHRpdGxlPlBvd2Vyc2F2ZSBzdXBwb3J0PC90aXRsZT4KKyFQaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBQb3dlcnNhdmUgc3VwcG9ydAorICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyIGlkPSJiZWFjb24tZmlsdGVyIj4KKyAgICAgIDx0aXRsZT5CZWFjb24gZmlsdGVyIHN1cHBvcnQ8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIEJlYWNvbiBmaWx0ZXIgc3VwcG9ydAorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9iZWFjb25fbG9zcworICAgIDwvY2hhcHRlcj4KKwogICAgIDxjaGFwdGVyIGlkPSJxb3MiPgogICAgICAgPHRpdGxlPk11bHRpcGxlIHF1ZXVlcyBhbmQgUW9TIHN1cHBvcnQ8L3RpdGxlPgogICAgICAgPHBhcmE+VEJEPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCmluZGV4IDUyZTFiNzkuLjhmNmUzYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKQEAgLTQyLDYgKzQyLDEzIEBACiAKIDxyZXZoaXN0b3J5PgogCTxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuODwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDgtMTItMjQ8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmhqazwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBuYW1lIGF0dHJpYnV0ZXMgaW4gbWVtIGFuZCBwb3J0aW8gc3lzZnMgZGlyZWN0b3JpZXMuCisJCTwvcmV2cmVtYXJrPgorCTwvcmV2aXNpb24+CisJPHJldmlzaW9uPgogCTxyZXZudW1iZXI+MC43PC9yZXZudW1iZXI+CiAJPGRhdGU+MjAwOC0xMi0yMzwvZGF0ZT4KIAk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KQEAgLTMwMywxMiArMzEwLDE5IEBACiAJYXBwZWFyIGlmIHRoZSBzaXplIG9mIHRoZSBtYXBwaW5nIGlzIG5vdCAwLgogPC9wYXJhPgogPHBhcmE+Ci0JRWFjaCA8ZmlsZW5hbWU+bWFwWC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgdHdvIHJlYWQtb25seSBmaWxlcwotCXRoYXQgc2hvdyBzdGFydCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBtZW1vcnk6CisJRWFjaCA8ZmlsZW5hbWU+bWFwWC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgZm91ciByZWFkLW9ubHkgZmlsZXMKKwl0aGF0IHNob3cgYXR0cmlidXRlcyBvZiB0aGUgbWVtb3J5OgogPC9wYXJhPgogPGl0ZW1pemVkbGlzdD4KIDxsaXN0aXRlbT4KIAk8cGFyYT4KKwk8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+OiBBIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIG1hcHBpbmcuIFRoaXMKKwlpcyBvcHRpb25hbCwgdGhlIHN0cmluZyBjYW4gYmUgZW1wdHkuIERyaXZlcnMgY2FuIHNldCB0aGlzIHRvIG1ha2UgaXQKKwllYXNpZXIgZm9yIHVzZXJzcGFjZSB0byBmaW5kIHRoZSBjb3JyZWN0IG1hcHBpbmcuCisJPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKwk8cGFyYT4KIAk8ZmlsZW5hbWU+YWRkcjwvZmlsZW5hbWU+OiBUaGUgYWRkcmVzcyBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgbWFwcGVkLgogCTwvcGFyYT4KIDwvbGlzdGl0ZW0+CkBAIC0zNjYsMTIgKzM4MCwxOSBAQAogCTxmaWxlbmFtZT4vc3lzL2NsYXNzL3Vpby91aW9YL3BvcnRpby88L2ZpbGVuYW1lPi4KIDwvcGFyYT4KIDxwYXJhPgotCUVhY2ggPGZpbGVuYW1lPnBvcnRYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aHJlZSByZWFkLW9ubHkKLQlmaWxlcyB0aGF0IHNob3cgc3RhcnQsIHNpemUsIGFuZCB0eXBlIG9mIHRoZSBwb3J0IHJlZ2lvbjoKKwlFYWNoIDxmaWxlbmFtZT5wb3J0WC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgZm91ciByZWFkLW9ubHkKKwlmaWxlcyB0aGF0IHNob3cgbmFtZSwgc3RhcnQsIHNpemUsIGFuZCB0eXBlIG9mIHRoZSBwb3J0IHJlZ2lvbjoKIDwvcGFyYT4KIDxpdGVtaXplZGxpc3Q+CiA8bGlzdGl0ZW0+CiAJPHBhcmE+CisJPGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPjogQSBzdHJpbmcgaWRlbnRpZmllciBmb3IgdGhpcyBwb3J0IHJlZ2lvbi4KKwlUaGUgc3RyaW5nIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgZW1wdHkuIERyaXZlcnMgY2FuIHNldCBpdCB0byBtYWtlIGl0CisJZWFzaWVyIGZvciB1c2Vyc3BhY2UgdG8gZmluZCBhIGNlcnRhaW4gcG9ydCByZWdpb24uCisJPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKwk8cGFyYT4KIAk8ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPjogVGhlIGZpcnN0IHBvcnQgb2YgdGhpcyByZWdpb24uCiAJPC9wYXJhPgogPC9saXN0aXRlbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCmluZGV4IDg3YTdjMDdhLi40NmIwOGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IldyaXRpbmctYW4tQUxTQS1Ecml2ZXIiPgogICA8Ym9va2luZm8+CiAgICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgogICAgIDxhdXRob3I+CkBAIC00OTIsOSArNDkyLDkgQEAKICAgICAgICAgICB9CiAKICAgICAgICAgICAvKiAoMikgKi8KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLSAgICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgICAgLyogKDMpICovCiAgICAgICAgICAgZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CkBAIC01OTAsOCArNTkwLDkgQEAKICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgIGludCBlcnI7CiAgIC4uLi4KLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogXV0+CiAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgpAQCAtODA5LDI2ICs4MTAsMjggQEAKIAogICAgICAgPHBhcmE+CiAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdG8gY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSwgY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi4KIAogICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgogICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpOworICBpbnQgZXJyOworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUsICZjYXJkKTsKIF1dPgogICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgYXJndW1lbnRzLCB0aGUgY2FyZC1pbmRleCBudW1iZXIsIHRoZQorICAgICAgICBUaGUgZnVuY3Rpb24gdGFrZXMgZml2ZSBhcmd1bWVudHMsIHRoZSBjYXJkLWluZGV4IG51bWJlciwgdGhlCiAgICAgICAgIGlkIHN0cmluZywgdGhlIG1vZHVsZSBwb2ludGVyICh1c3VhbGx5CiAgICAgICAgIDxjb25zdGFudD5USElTX01PRFVMRTwvY29uc3RhbnQ+KSwKLSAgICAgICAgYW5kIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UuICBUaGUgbGFzdCBhcmd1bWVudCBpcyB1c2VkIHRvCisgICAgICAgIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UsIGFuZCB0aGUgcG9pbnRlciB0byByZXR1cm4gdGhlCisgICAgICAgIGNhcmQgaW5zdGFuY2UuICBUaGUgZXh0cmFfc2l6ZSBhcmd1bWVudCBpcyB1c2VkIHRvCiAgICAgICAgIGFsbG9jYXRlIGNhcmQtJmd0O3ByaXZhdGVfZGF0YSBmb3IgdGhlCiAgICAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gIE5vdGUgdGhhdCB0aGVzZSBkYXRhCi0gICAgICAgIGFyZSBhbGxvY2F0ZWQgYnkgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICAgIGFyZSBhbGxvY2F0ZWQgYnkgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4uCiAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC05MTUsMTUgKzkxOCwxNiBAQAogICAgICAgPC9wYXJhPgogCiAgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KLSAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDx0aXRsZT4xLiBBbGxvY2F0aW5nIHZpYSA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi48L3RpdGxlPgogICAgICAgICA8cGFyYT4KICAgICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHlvdSBjYW4gcGFzcyB0aGUgZXh0cmEtZGF0YS1sZW5ndGgKLQkgIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4sIGkuZS4KKwkgIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4sIGkuZS4KIAogICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CiAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiA8IVtDREFUQVsKLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBteWNoaXApKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApLCAmY2FyZCk7CiBdXT4KICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CkBAIC05NTIsOCArOTU2LDggQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAotICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAogICAgICAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPi4gCiAKICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgpAQCAtOTYxLDcgKzk2NSw3IEBACiA8IVtDREFUQVsKICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwogICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAgIC4uLi4uCiAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogXV0+CkBAIC01NzUwLDggKzU3NTQsOSBAQAogICAgICAgICAgIC4uLi4KICAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKICAgICAgICAgICAuLi4uCiAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgLi4uLgpAQCAtNTc2Myw3ICs1NzY4LDcgQEAKICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgogCiAJV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKLQk8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQorCTxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LCBpdCdzIGFueXdheSBhY2Nlc3NpYmxlCiAJdmlhIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2RhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZC4KIAogICAgICAgPGluZm9ybWFsZXhhbXBsZT4KQEAgLTU3NzUsOSArNTc4MCwxMCBAQAogICAgICAgICAgIC4uLi4KICAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApKTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSwgJmNhcmQpOwogICAgICAgICAgIC4uLi4KICAgICAgICAgICBjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogICAgICAgICAgIC4uLi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dAppbmRleCA2MzRjOTUyLi5kNWFmM2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CkBAIC0zNSw5ICszNSwzIEBACiAjIGVjaG8gYW50aWNpcGF0b3J5ID4gL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCiAjIGNhdCAvc3lzL2Jsb2NrL2hkYS9xdWV1ZS9zY2hlZHVsZXIKIG5vb3AgW2FudGljaXBhdG9yeV0gZGVhZGxpbmUgY2ZxCi0KLUVhY2ggaW8gcXVldWUgaGFzIGEgc2V0IG9mIGlvIHNjaGVkdWxlciB0dW5hYmxlcyBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZXNlCi10dW5hYmxlcyBjb250cm9sIGhvdyB0aGUgaW8gc2NoZWR1bGVyIHdvcmtzLiBZb3UgY2FuIGZpbmQgdGhlc2UgZW50cmllcwotaW46Ci0KLS9zeXMvYmxvY2svPGRldmljZT4vcXVldWUvaW9zY2hlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CmluZGV4IDViMGNmYTYuLmNlNzNmM2ViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CkBAIC0xMTcsMTAgKzExNywyOCBAQAogc2FtcGxpbmdfcmF0ZTogbWVhc3VyZWQgaW4gdVMgKDEwXi02IHNlY29uZHMpLCB0aGlzIGlzIGhvdyBvZnRlbiB5b3UKIHdhbnQgdGhlIGtlcm5lbCB0byBsb29rIGF0IHRoZSBDUFUgdXNhZ2UgYW5kIHRvIG1ha2UgZGVjaXNpb25zIG9uCiB3aGF0IHRvIGRvIGFib3V0IHRoZSBmcmVxdWVuY3kuICBUeXBpY2FsbHkgdGhpcyBpcyBzZXQgdG8gdmFsdWVzIG9mCi1hcm91bmQgJzEwMDAwJyBvciBtb3JlLgorYXJvdW5kICcxMDAwMCcgb3IgbW9yZS4gSXQncyBkZWZhdWx0IHZhbHVlIGlzIChjbXAuIHdpdGggdXNlcnMtZ3VpZGUudHh0KToKK3RyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDAKK1RoZSBsb3dlc3QgdmFsdWUgeW91IGNhbiBzZXQgaXM6Cit0cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAgb3IgaXQgbWF5IGdldCByZXN0cmljdGVkIHRvIGEgdmFsdWUgd2hlcmUgaXQKK21ha2VzIG5vdCBzZW5zZSBmb3IgdGhlIGtlcm5lbCBhbnltb3JlIHRvIHBvbGwgdGhhdCBvZnRlbiB3aGljaCBkZXBlbmRzCitvbiB5b3VyIEhaIGNvbmZpZyB2YXJpYWJsZSAoSFo9MTAwMDogbWF4PTIwMDAwdXMsIEhaPTI1MDogbWF4PTUwMDApLgorQmUgYXdhcmUgdGhhdCB0cmFuc2l0aW9uIGxhdGVuY3kgaXMgaW4gbnMgYW5kIHNhbXBsaW5nX3JhdGUgaXMgaW4gdXMsIHNvIHlvdQorZ2V0IHRoZSBzYW1lIHN5c2ZzIHZhbHVlIGJ5IGRlZmF1bHQuCitTYW1wbGluZyByYXRlIHNob3VsZCBhbHdheXMgZ2V0IGFkanVzdGVkIGNvbnNpZGVyaW5nIHRoZSB0cmFuc2l0aW9uIGxhdGVuY3kKK1RvIHNldCB0aGUgc2FtcGxpbmcgcmF0ZSA3NTAgdGltZXMgYXMgaGlnaCBhcyB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5CitpbiB0aGUgYmFzaCAoYXMgc2FpZCwgMTAwMCBpcyBkZWZhdWx0KSwgZG86CitlY2hvIGAkKCgkKGNhdCBjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSkgKiA3NTAgLyAxMDAwKSkgXAorICAgID5vbmRlbWFuZC9zYW1wbGluZ19yYXRlCiAKLXNob3dfc2FtcGxpbmdfcmF0ZV8obWlufG1heCk6IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNhbXBsaW5nIHJhdGVzCi1hdmFpbGFibGUgdGhhdCB5b3UgbWF5IHNldCAnc2FtcGxpbmdfcmF0ZScgdG8uCitzaG93X3NhbXBsaW5nX3JhdGVfKG1pbnxtYXgpOiBUSElTIElOVEVSRkFDRSBJUyBERVBSRUNBVEVELCBET04nVCBVU0UgSVQuCitZb3UgY2FuIHVzZSB3aWRlciByYW5nZXMgbm93IGFuZCB0aGUgZ2VuZXJhbAorY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kgdmFyaWFibGUgKGNtcC4gd2l0aCB1c2VyLWd1aWRlLnR4dCkgY2FuIGJlCit1c2VkIHRvIG9idGFpbiBleGFjdGx5IHRoZSBzYW1lIGluZm86CitzaG93X3NhbXBsaW5nX3JhdGVfbWluID0gdHJhbnN0aXRpb25fbGF0ZW5jeSAqIDUwMCAgICAvIDEwMDAKK3Nob3dfc2FtcGxpbmdfcmF0ZV9tYXggPSB0cmFuc3RpdGlvbl9sYXRlbmN5ICogNTAwMDAwIC8gMTAwMAorKGRpdmlkZWQgYnkgMTAwMCBpcyB0byBpbGx1c3RyYXRlIHRoYXQgc2FtcGxpbmcgcmF0ZSBpcyBpbiB1cyBhbmQKK3RyYW5zaXRpb24gbGF0ZW5jeSBpcyBleHBvcnRlZCBucykuCiAKIHVwX3RocmVzaG9sZDogZGVmaW5lcyB3aGF0IHRoZSBhdmVyYWdlIENQVSB1c2FnZSBiZXR3ZWVuIHRoZSBzYW1wbGluZ3MKIG9mICdzYW1wbGluZ19yYXRlJyBuZWVkcyB0byBiZSBmb3IgdGhlIGtlcm5lbCB0byBtYWtlIGEgZGVjaXNpb24gb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CmluZGV4IDkxNzkxOGYuLjc1ZjQxMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dApAQCAtMTUyLDYgKzE1MiwxOCBAQAogCQkJCWZyZXF1ZW5jeSB0aGUgcHJvY2Vzc29yIGNhbiBydW4gYXQoaW4ga0h6KSAKIGNwdWluZm9fbWF4X2ZyZXEgOgkJdGhpcyBmaWxlIHNob3dzIHRoZSBtYXhpbXVtIG9wZXJhdGluZwogCQkJCWZyZXF1ZW5jeSB0aGUgcHJvY2Vzc29yIGNhbiBydW4gYXQoaW4ga0h6KSAKK2NwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5CVRoZSB0aW1lIGl0IHRha2VzIG9uIHRoaXMgQ1BVIHRvCisJCQkJc3dpdGNoIGJldHdlZW4gdHdvIGZyZXF1ZW5jaWVzIGluIG5hbm8KKwkJCQlzZWNvbmRzLiBJZiB1bmtub3duIG9yIGtub3duIHRvIGJlCisJCQkJdGhhdCBoaWdoIHRoYXQgdGhlIGRyaXZlciBkb2VzIG5vdAorCQkJCXdvcmsgd2l0aCB0aGUgb25kZW1hbmQgZ292ZXJub3IsIC0xCisJCQkJKENQVUZSRVFfRVRFUk5BTCkgd2lsbCBiZSByZXR1cm5lZC4KKwkJCQlVc2luZyB0aGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWwKKwkJCQl0byBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgcG9sbGluZworCQkJCWZyZXF1ZW5jeSBmb3IgYSBrZXJuZWwgZ292ZXJub3Igb3IKKwkJCQl1c2Vyc3BhY2UgZGFlbW9uLiBNYWtlIHN1cmUgdG8gbm90CisJCQkJc3dpdGNoIHRoZSBmcmVxdWVuY3kgdG9vIG9mdGVuCisJCQkJcmVzdWx0aW5nIGluIHBlcmZvcm1hbmNlIGxvc3MuCiBzY2FsaW5nX2RyaXZlciA6CQl0aGlzIGZpbGUgc2hvd3Mgd2hhdCBjcHVmcmVxIGRyaXZlciBpcwogCQkJCXVzZWQgdG8gc2V0IHRoZSBmcmVxdWVuY3kgb24gdGhpcyBDUFUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAppbmRleCA0NTkzMmVjLi5iNDFmM2U1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dApAQCAtMTgsMTEgKzE4LDExIEBACiB0aGVzZSBtYWNyb3MgaW4gaW5jbHVkZS9hc20tWFhYL3RvcG9sb2d5Lmg6CiAjZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQogI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkKLSNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkKLSNkZWZpbmUgdG9wb2xvZ3lfY29yZV9zaWJsaW5ncyhjcHUpCisjZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSkKKyNkZWZpbmUgdG9wb2xvZ3lfY29yZV9jcHVtYXNrKGNwdSkKIAogVGhlIHR5cGUgb2YgKipfaWQgaXMgaW50LgotVGhlIHR5cGUgb2Ygc2libGluZ3MgaXMgY3B1bWFza190LgorVGhlIHR5cGUgb2Ygc2libGluZ3MgaXMgKGNvbnN0KSBzdHJ1Y3QgY3B1bWFzayAqLgogCiBUbyBiZSBjb25zaXN0ZW50IG9uIGFsbCBhcmNoaXRlY3R1cmVzLCBpbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKIHByb3ZpZGVzIGRlZmF1bHQgZGVmaW5pdGlvbnMgZm9yIGFueSBvZiB0aGUgYWJvdmUgbWFjcm9zIHRoYXQgYXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCAyYmUwODI0Li42MjI1NGQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTMxNDUsNiArMzE0NSwxMiBAQAogCQkgIDEgPSAvZGV2L2Jsb2Nrcm9tMQlTZWNvbmQgUk9NIGNhcmQncyB0cmFuc2xhdGlvbiBsYXllciBpbnRlcmZhY2UKIAkJICAuLi4KIAorMjYwIGNoYXIJT1NEIChPYmplY3QtYmFzZWQtZGV2aWNlKSBTQ1NJIERldmljZQorCQkgIDAgPSAvZGV2L29zZDAJCUZpcnN0IE9TRCBEZXZpY2UKKwkJICAxID0gL2Rldi9vc2QxCQlTZWNvbmQgT1NEIERldmljZQorCQkgIC4uLgorCQkgIDI1NSA9IC9kZXYvb3NkMjU1CTI1NnRoIE9TRCBEZXZpY2UKKwogICoqKioJQURESVRJT05BTCAvZGV2IERJUkVDVE9SWSBFTlRSSUVTCiAKIFRoaXMgc2VjdGlvbiBkZXRhaWxzIGFkZGl0aW9uYWwgZW50cmllcyB0aGF0IHNob3VsZCBvciBtYXkgZXhpc3QgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IDFlODlhNTEuLjg4NTE5ZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtNjIsNyArNjIsNiBAQAogYWljNypzZXEuaCoKIGFpY2FzbQogYWljZGIuaCoKLWFzbQogYXNtLW9mZnNldHMuaAogYXNtX29mZnNldHMuaAogYXV0b2NvbmYuaCoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGM1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0CkBAIC0wLDAgKzEsMjQwIEBACisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhlIGR5bmFtaWMgZGVidWcgKGRkZWJ1ZykgZmVhdHVyZS4KKworRHluYW1pYyBkZWJ1ZyBpcyBkZXNpZ25lZCB0byBhbGxvdyB5b3UgdG8gZHluYW1pY2FsbHkgZW5hYmxlL2Rpc2FibGUga2VybmVsCitjb2RlIHRvIG9idGFpbiBhZGRpdGlvbmFsIGtlcm5lbCBpbmZvcm1hdGlvbi4gQ3VycmVudGx5LCBpZgorQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgc2V0LCB0aGVuIGFsbCBwcl9kZWJ1ZygpL2Rldl9kZWJ1ZygpIGNhbGxzIGNhbiBiZQorZHluYW1pY2FsbHkgZW5hYmxlZCBwZXItY2FsbHNpdGUuCisKK0R5bmFtaWMgZGVidWcgaGFzIGV2ZW4gbW9yZSB1c2VmdWwgZmVhdHVyZXM6CisKKyAqIFNpbXBsZSBxdWVyeSBsYW5ndWFnZSBhbGxvd3MgdHVybmluZyBvbiBhbmQgb2ZmIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGJ5CisgICBtYXRjaGluZyBhbnkgY29tYmluYXRpb24gb2Y6CisKKyAgIC0gc291cmNlIGZpbGVuYW1lCisgICAtIGZ1bmN0aW9uIG5hbWUKKyAgIC0gbGluZSBudW1iZXIgKGluY2x1ZGluZyByYW5nZXMgb2YgbGluZSBudW1iZXJzKQorICAgLSBtb2R1bGUgbmFtZQorICAgLSBmb3JtYXQgc3RyaW5nCisKKyAqIFByb3ZpZGVzIGEgZGVidWdmcyBjb250cm9sIGZpbGU6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgd2hpY2ggY2FuIGJlCisgICByZWFkIHRvIGRpc3BsYXkgdGhlIGNvbXBsZXRlIGxpc3Qgb2Yga25vd24gZGVidWcgc3RhdGVtZW50cywgdG8gaGVscCBndWlkZSB5b3UKKworQ29udHJvbGxpbmcgZHluYW1pYyBkZWJ1ZyBCZWhhdmlvdXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGJlaGF2aW91ciBvZiBwcl9kZWJ1ZygpL2Rldl9kZWJ1ZygpcyBhcmUgY29udHJvbGxlZCB2aWEgd3JpdGluZyB0byBhCitjb250cm9sIGZpbGUgaW4gdGhlICdkZWJ1Z2ZzJyBmaWxlc3lzdGVtLiBUaHVzLCB5b3UgbXVzdCBmaXJzdCBtb3VudCB0aGUgZGVidWdmcworZmlsZXN5c3RlbSwgaW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgdGhpcyBmZWF0dXJlLiBTdWJzZXF1ZW50bHksIHdlIHJlZmVyIHRvIHRoZQorY29udHJvbCBmaWxlIGFzOiA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8KK2VuYWJsZSBwcmludGluZyBmcm9tIHNvdXJjZSBmaWxlICdzdmNzb2NrLmMnLCBsaW5lIDE2MDMgeW91IHNpbXBseSBkbzoKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKK0lmIHlvdSBtYWtlIGEgbWlzdGFrZSB3aXRoIHRoZSBzeW50YXgsIHRoZSB3cml0ZSB3aWxsIGZhaWwgdGh1czoKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyB3dGYgMSArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKy1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogSW52YWxpZCBhcmd1bWVudAorCitWaWV3aW5nIER5bmFtaWMgRGVidWcgQmVoYXZpb3VyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IGNhbiB2aWV3IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBiZWhhdmlvdXIgb2YgYWxsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzCit2aWE6CisKK251bGxhcmJvcjp+ICMgY2F0IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKyMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjMyMyBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2NsZWFudXAgLSAiU1ZDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozNDEgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFtYXhfaW5saW5lICAgICAgIDogJWRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozNDAgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFzcV9kZXB0aCAgICAgICAgIDogJWRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozMzggW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFtYXhfcmVxdWVzdHMgICAgIDogJWRcMDEyIgorLi4uCisKKworWW91IGNhbiBhbHNvIGFwcGx5IHN0YW5kYXJkIFVuaXggdGV4dCBtYW5pcHVsYXRpb24gZmlsdGVycyB0byB0aGlzCitkYXRhLCBlLmcuCisKK251bGxhcmJvcjp+ICMgZ3JlcCAtaSByZG1hIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgIHwgd2MgLWwKKzYyCisKK251bGxhcmJvcjp+ICMgZ3JlcCAtaSB0Y3AgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCB8IHdjIC1sCis0MgorCitOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCB0aGUgdGhpcmQgY29sdW1uIHNob3dzIHRoZSBlbmFibGVkIGJlaGF2aW91cgorZmxhZ3MgZm9yIGVhY2ggZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlIChzZWUgYmVsb3cgZm9yIGRlZmluaXRpb25zIG9mIHRoZQorZmxhZ3MpLiAgVGhlIGRlZmF1bHQgdmFsdWUsIG5vIGV4dHJhIGJlaGF2aW91ciBlbmFibGVkLCBpcyAiLSIuICBTbworeW91IGNhbiB2aWV3IGFsbCB0aGUgZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlcyB3aXRoIGFueSBub24tZGVmYXVsdCBmbGFnczoKKworbnVsbGFyYm9yOn4gIyBhd2sgJyQzICE9ICItIicgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y3NvY2suYzoxNjAzIFtzdW5ycGNdc3ZjX3NlbmQgcCAic3ZjX3Byb2Nlc3M6IHN0X3NlbmR0byByZXR1cm5lZCAlZFwwMTIiCisKKworQ29tbWFuZCBMYW5ndWFnZSBSZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0F0IHRoZSBsZXhpY2FsIGxldmVsLCBhIGNvbW1hbmQgY29tcHJpc2VzIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc2VwYXJhdGVkCitieSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgbmV3bGluZXMgYXJlIHRyZWF0ZWQgYXMgd29yZAorc2VwYXJhdG9ycyBhbmQgZG8gKm5vdCogZW5kIGEgY29tbWFuZCBvciBhbGxvdyBtdWx0aXBsZSBjb21tYW5kcyB0bworYmUgZG9uZSB0b2dldGhlci4gIFNvIHRoZXNlIGFyZSBhbGwgZXF1aXZhbGVudDoKKworbnVsbGFyYm9yOn4gIyBlY2hvIC1jICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJyAgZmlsZSAgIHN2Y3NvY2suYyAgICAgbGluZSAgMTYwMyArcCAgJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1jICdmaWxlIHN2Y3NvY2suY1xubGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKK0NvbW1hbmRzIGFyZSBib3VuZGVkIGJ5IGEgd3JpdGUoKSBzeXN0ZW0gY2FsbC4gIElmIHlvdSB3YW50IHRvIGRvCittdWx0aXBsZSBjb21tYW5kcyB5b3UgbmVlZCB0byBkbyBhIHNlcGFyYXRlICJlY2hvIiBmb3IgZWFjaCwgbGlrZToKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4gL3Byb2MvZHByaW50ayA7XAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE1NjMgK3AnID4gL3Byb2MvZHByaW50aworCitvciBldmVuIGxpa2U6CisKK251bGxhcmJvcjp+ICMgKAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnIDtcCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTU2MyArcCcgO1wKKz4gKSA+IC9wcm9jL2RwcmludGsKKworQXQgdGhlIHN5bnRhY3RpY2FsIGxldmVsLCBhIGNvbW1hbmQgY29tcHJpc2VzIGEgc2VxdWVuY2Ugb2YgbWF0Y2gKK3NwZWNpZmljYXRpb25zLCBmb2xsb3dlZCBieSBhIGZsYWdzIGNoYW5nZSBzcGVjaWZpY2F0aW9uLgorCitjb21tYW5kIDo6PSBtYXRjaC1zcGVjKiBmbGFncy1zcGVjCisKK1RoZSBtYXRjaC1zcGVjJ3MgYXJlIHVzZWQgdG8gY2hvb3NlIGEgc3Vic2V0IG9mIHRoZSBrbm93biBkcHJpbnRrKCkKK2NhbGxzaXRlcyB0byB3aGljaCB0byBhcHBseSB0aGUgZmxhZ3Mtc3BlYy4gIFRoaW5rIG9mIHRoZW0gYXMgYSBxdWVyeQord2l0aCBpbXBsaWNpdCBBTkRzIGJldHdlZW4gZWFjaCBwYWlyLiAgTm90ZSB0aGF0IGFuIGVtcHR5IGxpc3Qgb2YKK21hdGNoLXNwZWNzIGlzIHBvc3NpYmxlLCBidXQgaXMgbm90IHZlcnkgdXNlZnVsIGJlY2F1c2UgaXQgd2lsbCBub3QKK21hdGNoIGFueSBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGVzLgorCitBIG1hdGNoIHNwZWNpZmljYXRpb24gY29tcHJpc2VzIGEga2V5d29yZCwgd2hpY2ggY29udHJvbHMgdGhlIGF0dHJpYnV0ZQorb2YgdGhlIGNhbGxzaXRlIHRvIGJlIGNvbXBhcmVkLCBhbmQgYSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuICBQb3NzaWJsZQora2V5d29yZHMgYXJlOgorCittYXRjaC1zcGVjIDo6PSAnZnVuYycgc3RyaW5nIHwKKwkgICAgICAgJ2ZpbGUnIHN0cmluZyB8CisJICAgICAgICdtb2R1bGUnIHN0cmluZyB8CisJICAgICAgICdmb3JtYXQnIHN0cmluZyB8CisJICAgICAgICdsaW5lJyBsaW5lLXJhbmdlCisKK2xpbmUtcmFuZ2UgOjo9IGxpbmVubyB8CisJICAgICAgICctJ2xpbmVubyB8CisJICAgICAgIGxpbmVubyctJyB8CisJICAgICAgIGxpbmVubyctJ2xpbmVubworLy8gTm90ZTogbGluZS1yYW5nZSBjYW5ub3QgY29udGFpbiBzcGFjZSwgZS5nLgorLy8gIjEtMzAiIGlzIHZhbGlkIHJhbmdlIGJ1dCAiMSAtIDMwIiBpcyBub3QuCisKK2xpbmVubyA6Oj0gdW5zaWduZWQtaW50CisKK1RoZSBtZWFuaW5ncyBvZiBlYWNoIGtleXdvcmQgYXJlOgorCitmdW5jCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBmdW5jdGlvbiBuYW1lCisgICAgb2YgZWFjaCBjYWxsc2l0ZS4gIEV4YW1wbGU6CisKKyAgICBmdW5jIHN2Y190Y3BfYWNjZXB0CisKK2ZpbGUKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgZWl0aGVyIHRoZSBmdWxsCisgICAgcGF0aG5hbWUgb3IgdGhlIGJhc2VuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiBlYWNoCisgICAgY2FsbHNpdGUuICBFeGFtcGxlczoKKworICAgIGZpbGUgc3Zjc29jay5jCisgICAgZmlsZSAvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKworbW9kdWxlCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBtb2R1bGUgbmFtZQorICAgIG9mIGVhY2ggY2FsbHNpdGUuICBUaGUgbW9kdWxlIG5hbWUgaXMgdGhlIHN0cmluZyBhcworICAgIHNlZW4gaW4gImxzbW9kIiwgaS5lLiB3aXRob3V0IHRoZSBkaXJlY3Rvcnkgb3IgdGhlIC5rbworICAgIHN1ZmZpeCBhbmQgd2l0aCAnLScgY2hhbmdlZCB0byAnXycuICBFeGFtcGxlczoKKworICAgIG1vZHVsZSBzdW5ycGMKKyAgICBtb2R1bGUgbmZzZAorCitmb3JtYXQKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgZHluYW1pYyBkZWJ1ZyBmb3JtYXQKKyAgICBzdHJpbmcuICBOb3RlIHRoYXQgdGhlIHN0cmluZyBkb2VzIG5vdCBuZWVkIHRvIG1hdGNoIHRoZQorICAgIGVudGlyZSBmb3JtYXQsIG9ubHkgc29tZSBwYXJ0LiAgV2hpdGVzcGFjZSBhbmQgb3RoZXIKKyAgICBzcGVjaWFsIGNoYXJhY3RlcnMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgQyBvY3RhbCBjaGFyYWN0ZXIKKyAgICBlc2NhcGUgXG9vbyBub3RhdGlvbiwgZS5nLiB0aGUgc3BhY2UgY2hhcmFjdGVyIGlzIFwwNDAuCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIHN0cmluZyBjYW4gYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlCisgICAgY2hhcmFjdGVycyAoIikgb3Igc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKCcpLgorICAgIEV4YW1wbGVzOgorCisgICAgZm9ybWF0IHN2Y3JkbWE6CSAgICAvLyBtYW55IG9mIHRoZSBORlMvUkRNQSBzZXJ2ZXIgZHByaW50a3MKKyAgICBmb3JtYXQgcmVhZGFoZWFkCSAgICAvLyBzb21lIGRwcmludGtzIGluIHRoZSByZWFkYWhlYWQgY2FjaGUKKyAgICBmb3JtYXQgbmZzZDpcMDQwU0VUQVRUUiAvLyBvbmUgd2F5IHRvIG1hdGNoIGEgZm9ybWF0IHdpdGggd2hpdGVzcGFjZQorICAgIGZvcm1hdCAibmZzZDogU0VUQVRUUiIgIC8vIGEgbmVhdGVyIHdheSB0byBtYXRjaCBhIGZvcm1hdCB3aXRoIHdoaXRlc3BhY2UKKyAgICBmb3JtYXQgJ25mc2Q6IFNFVEFUVFInICAvLyB5ZXQgYW5vdGhlciB3YXkgdG8gbWF0Y2ggYSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlCisKK2xpbmUKKyAgICBUaGUgZ2l2ZW4gbGluZSBudW1iZXIgb3IgcmFuZ2Ugb2YgbGluZSBudW1iZXJzIGlzIGNvbXBhcmVkCisgICAgYWdhaW5zdCB0aGUgbGluZSBudW1iZXIgb2YgZWFjaCBkcHJpbnRrKCkgY2FsbHNpdGUuICBBIHNpbmdsZQorICAgIGxpbmUgbnVtYmVyIG1hdGNoZXMgdGhlIGNhbGxzaXRlIGxpbmUgbnVtYmVyIGV4YWN0bHkuICBBCisgICAgcmFuZ2Ugb2YgbGluZSBudW1iZXJzIG1hdGNoZXMgYW55IGNhbGxzaXRlIGJldHdlZW4gdGhlIGZpcnN0CisgICAgYW5kIGxhc3QgbGluZSBudW1iZXIgaW5jbHVzaXZlLiAgQW4gZW1wdHkgZmlyc3QgbnVtYmVyIG1lYW5zCisgICAgdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGZpbGUsIGFuIGVtcHR5IGxpbmUgbnVtYmVyIG1lYW5zIHRoZQorICAgIGxhc3QgbnVtYmVyIGluIHRoZSBmaWxlLiAgRXhhbXBsZXM6CisKKyAgICBsaW5lIDE2MDMJICAgIC8vIGV4YWN0bHkgbGluZSAxNjAzCisgICAgbGluZSAxNjAwLTE2MDUgIC8vIHRoZSBzaXggbGluZXMgZnJvbSBsaW5lIDE2MDAgdG8gbGluZSAxNjA1CisgICAgbGluZSAtMTYwNQkgICAgLy8gdGhlIDE2MDUgbGluZXMgZnJvbSBsaW5lIDEgdG8gbGluZSAxNjA1CisgICAgbGluZSAxNjAwLQkgICAgLy8gYWxsIGxpbmVzIGZyb20gbGluZSAxNjAwIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUKKworVGhlIGZsYWdzIHNwZWNpZmljYXRpb24gY29tcHJpc2VzIGEgY2hhbmdlIG9wZXJhdGlvbiBmb2xsb3dlZAorYnkgb25lIG9yIG1vcmUgZmxhZyBjaGFyYWN0ZXJzLiAgVGhlIGNoYW5nZSBvcGVyYXRpb24gaXMgb25lCitvZiB0aGUgY2hhcmFjdGVyczoKKworLQorICAgIHJlbW92ZSB0aGUgZ2l2ZW4gZmxhZ3MKKworKworICAgIGFkZCB0aGUgZ2l2ZW4gZmxhZ3MKKworPQorICAgIHNldCB0aGUgZmxhZ3MgdG8gdGhlIGdpdmVuIGZsYWdzCisKK1RoZSBmbGFncyBhcmU6CisKK3AKKyAgICBDYXVzZXMgYSBwcmludGsoKSBtZXNzYWdlIHRvIGJlIGVtaXR0ZWQgdG8gZG1lc2cKKworTm90ZSB0aGUgcmVnZXhwIF5bLSs9XVtzY3BdKyQgbWF0Y2hlcyBhIGZsYWdzIHNwZWNpZmljYXRpb24uCitOb3RlIGFsc28gdGhhdCB0aGVyZSBpcyBubyBjb252ZW5pZW50IHN5bnRheCB0byByZW1vdmUgYWxsCit0aGUgZmxhZ3MgYXQgb25jZSwgeW91IG5lZWQgdG8gdXNlICItcHNjIi4KKworRXhhbXBsZXMKKz09PT09PT09CisKKy8vIGVuYWJsZSB0aGUgbWVzc2FnZSBhdCBsaW5lIDE2MDMgb2YgZmlsZSBzdmNzb2NrLmMKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiBmaWxlIHN2Y3NvY2suYworbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gdGhlIE5GUyBzZXJ2ZXIgbW9kdWxlCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGRpc2FibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgLXAnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBtZXNzYWdlcyBmb3IgTkZTIGNhbGxzIFJFQUQsIFJFQURMSU5LLCBSRUFERElSIGFuZCBSRUFERElSKy4KK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZm9ybWF0ICJuZnNkOiBSRUFEIiArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAyMGQzYjk0Li4wMmVhMzc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02LDIwICs2LDQ3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglvbGQgc3RhdGljIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gYW5kIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlcgotV2hlbjoJMi42LjI5CitXaGF0OglUaGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyCitXaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCisKK1doeToJVGhpcyB3YXMgaW5oZXJpdGVkIGJ5IHRoZSBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgY29kZSwKKwlhbmQgY3VycmVudGx5IHNlcnZlcyBhcyBhbiBvcHRpb24gZm9yIHVzZXJzIHRvIGRlZmluZSBhbgorCUlTTyAvIElFQyAzMTY2IGFscGhhMiBjb2RlIGZvciB0aGUgY291bnRyeSB0aGV5IGFyZSBjdXJyZW50bHkKKwlwcmVzZW50IGluLiBBbHRob3VnaCB0aGVyZSBhcmUgdXNlcnNwYWNlIEFQSSByZXBsYWNlbWVudHMgZm9yIHRoaXMKKwl0aHJvdWdoIG5sODAyMTEgZGlzdHJpYnV0aW9ucyBoYXZlbid0IHlldCBjYXVnaHQgdXAgd2l0aCBpbXBsZW1lbnRpbmcKKwlkZWNlbnQgYWx0ZXJuYXRpdmVzIHRocm91Z2ggc3RhbmRhcmQgR1VJcy4gQWx0aG91Z2ggYXZhaWxhYmxlIGFzIGFuCisJb3B0aW9uIHRocm91Z2ggaXcgb3Igd3BhX3N1cHBsaWNhbnQgaXRzIGp1c3QgYSBtYXR0ZXIgb2YgdGltZSBiZWZvcmUKKwlkaXN0cmlidXRpb25zIHBpY2sgdXAgZ29vZCBHVUkgb3B0aW9ucyBmb3IgdGhpcy4gVGhlIGlkZWFsIHNvbHV0aW9uCisJd291bGQgYWN0dWFsbHkgY29uc2lzdCBvZiBpbnRlbGxpZ2VudCBkZXNpZ25zIHdoaWNoIHdvdWxkIGRvIHRoaXMgZm9yCisJdGhlIHVzZXIgYXV0b21hdGljYWxseSBldmVuIHdoZW4gdHJhdmVsbGluZyB0aHJvdWdoIGRpZmZlcmVudCBjb3VudHJpZXMuCisJVW50aWwgdGhlbiB3ZSBsZWF2ZSB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIgYXMgYSBjb21wcm9taXNlLgorCisJV2hlbiB1c2Vyc3BhY2UgaW1wcm92ZXMgd2l0aCByZWFzb25hYmxlIHdpZGVseS1hdmFpbGFibGUgYWx0ZXJuYXRpdmVzIGZvcgorCXRoaXMgd2Ugd2lsbCBubyBsb25nZXIgbmVlZCB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgZW50cnkgaG9wZXMgdGhhdAorCWJ5IHRoZSBzdXBlci1mdXR1cmlzdGljYWxseSBsb29raW5nIGRhdGUgb2YgIk1hcmNoIDIwMTAiIHdlIHdpbGwgaGF2ZQorCXN1Y2ggcmVwbGFjZW1lbnRzIHdpZGVseSBhdmFpbGFibGUuCisKK1dobzoJTHVpcyBSLiBSb2RyaWd1ZXogPGxyb2RyaWd1ZXpAYXRoZXJvcy5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgLSBvbGQgc3RhdGljIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24KK1doZW46CU1hcmNoIDIwMTAgLyBkZXNrdG9wIGNhdGNodXAKKwogV2h5OglUaGUgb2xkIHJlZ3VsYXRvcnkgaW5mcmFzdHJ1Y3R1cmUgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG5ldyBvbmUKIAl3aGljaCBkb2VzIG5vdCByZXF1aXJlIHN0YXRpY2FsbHkgZGVmaW5lZCByZWd1bGF0b3J5IGRvbWFpbnMuIFdlIGRvCiAJbm90IHdhbnQgdG8ga2VlcCBzdGF0aWMgcmVndWxhdG9yeSBkb21haW5zIGluIHRoZSBrZXJuZWwgZHVlIHRvIHRoZQogCXRoZSBkeW5hbWljIG5hdHVyZSBvZiByZWd1bGF0b3J5IGxhdyBhbmQgbG9jYWxpemF0aW9uLiBXZSBrZXB0IGFyb3VuZAogCXRoZSBvbGQgc3RhdGljIGRlZmluaXRpb25zIGZvciB0aGUgcmVndWxhdG9yeSBkb21haW5zIG9mOgorCiAJCSogVVMKIAkJKiBKUAogCQkqIEVVCisKIAlhbmQgdXNlZCBieSBkZWZhdWx0IHRoZSBVUyB3aGVuIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSB3YXMKLQlzZXQuIFdlIGFsc28ga2VwdCBhcm91bmQgdGhlIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlciBpbiBjYXNlCi0Jc29tZSBhcHBsaWNhdGlvbnMgd2VyZSByZWx5aW5nIG9uIGl0LiBDaGFuZ2luZyByZWd1bGF0b3J5IGRvbWFpbnMKLQljYW4gbm93IGJlIGRvbmUgaW5zdGVhZCBieSB1c2luZyBubDgwMjExLCBhcyBpcyBkb25lIHdpdGggaXcuCisJc2V0LiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbiBvbmNlIHRoZSBzdGFuZGFyZCBMaW51eCBkZXNrdG9wIGNhdGNoZXMKKwl1cCB3aXRoIHRoZSBuZXcgdXNlcnNwYWNlIEFQSXMgd2UgaGF2ZSBpbXBsZW1lbnRlZC4KKwogV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMjksNyArMjU2LDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGF0OgliNDMgc3VwcG9ydCBmb3IgZmlybXdhcmUgcmV2aXNpb24gPCA0MTAKLVdoZW46CUp1bHkgMjAwOAorV2hlbjoJVGhlIHNjaGVkdWxlIHdhcyBKdWx5IDIwMDgsIGJ1dCBpdCB3YXMgZGVjaWRlZCB0aGF0IHdlIGFyZSBnb2luZyB0byBrZWVwIHRoZQorICAgICAgICBjb2RlIGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIG1ham9yIG1haW50YW5hbmNlIGhlYWRhY2hlcy4KKwlTbyBpdCBfY291bGRfIGJlIHJlbW92ZWQgX2FueV8gdGltZSBub3csIGlmIGl0IGNvbmZsaWN0cyB3aXRoIHNvbWV0aGluZyBuZXcuCiBXaHk6CVRoZSBzdXBwb3J0IGNvZGUgZm9yIHRoZSBvbGQgZmlybXdhcmUgaHVydHMgY29kZSByZWFkYWJpbGl0eS9tYWludGFpbmFiaWxpdHkKIAlhbmQgc2xpZ2h0bHkgaHVydHMgcnVudGltZSBwZXJmb3JtYW5jZS4gQnVnZml4ZXMgZm9yIHRoZSBvbGQgZmlybXdhcmUKIAlhcmUgbm90IHByb3ZpZGVkIGJ5IEJyb2FkY29tIGFueW1vcmUuCkBAIC0zNDQsMyArMzczLDIwIEBACiAJUmVtb3ZhbCBpcyBzdWJqZWN0IHRvIGZpeGluZyBhbnkgcmVtYWluaW5nIGJ1Z3MgaW4gQUNQSSB3aGljaCBtYXkKIAljYXVzZSB0aGUgdGhlcm1hbCB0aHJvdHRsaW5nIG5vdCB0byBoYXBwZW4gYXQgdGhlIHJpZ2h0IHRpbWUuCiBXaG86CURhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglfX2RvX0lSUSBhbGwgaW4gb25lIGZpdHMgbm90aGluZyBpbnRlcnJ1cHQgaGFuZGxlcgorV2hlbjoJMi42LjMyCitXaHk6CV9fZG9fSVJRIHdhcyBrZXB0IGZvciBlYXN5IG1pZ3JhdGlvbiB0byB0aGUgdHlwZSBmbG93IGhhbmRsZXJzLgorCU1vcmUgdGhhbiB0d28geWVhcnMgb2YgbWlncmF0aW9uIHRpbWUgaXMgZW5vdWdoLgorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJb2Jzb2xldGUgZ2VuZXJpYyBpcnEgZGVmaW5lcyBhbmQgdHlwZWRlZnMKK1doZW46CTIuNi4zMAorV2h5OglUaGUgZGVmaW5lcyBhbmQgdHlwZWRlZnMgKGh3X2ludGVycnVwdF90eXBlLCBub19pcnFfdHlwZSwgaXJxX2Rlc2NfdCkKKwloYXZlIGJlZW4ga2VwdCBhcm91bmQgZm9yIG1pZ3JhdGlvbiByZWFzb25zLiBBZnRlciBtb3JlIHRoYW4gdHdvIHllYXJzCisJaXQncyB0aW1lIHRvIHJlbW92ZSB0aGVtIGZpbmFsbHkKK1dobzoJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggZWM2YTkzOS4uNGU3OGNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtNDM3LDggKzQzNywxMSBAQAogY2FuIGFuZCBzaG91bGQgYmUgZG9uZSB1c2luZyB0aGUgaW50ZXJuYWwgbG9ja2luZyB3aXRoIHNtYWxsZXIgY3JpdGljYWwgYXJlYXMpLgogQ3VycmVudCB3b3JzdCBvZmZlbmRlciBpcyBleHQyX2dldF9ibG9jaygpLi4uCiAKLS0+ZmFzeW5jKCkgaXMgYSBtZXNzLiBUaGlzIGFyZWEgbmVlZHMgYSBiaWcgY2xlYW51cCBhbmQgdGhhdCB3aWxsIHByb2JhYmx5Ci1hZmZlY3QgbG9ja2luZy4KKy0+ZmFzeW5jKCkgaXMgY2FsbGVkIHdpdGhvdXQgQktMIHByb3RlY3Rpb24sIGFuZCBpcyByZXNwb25zaWJsZSBmb3IKK21haW50YWluaW5nIHRoZSBGQVNZTkMgYml0IGluIGZpbHAtPmZfZmxhZ3MuICBNb3N0IGluc3RhbmNlcyBjYWxsCitmYXN5bmNfaGVscGVyKCksIHdoaWNoIGRvZXMgdGhhdCBtYWludGVuYW5jZSwgc28gaXQncyBub3Qgbm9ybWFsbHkKK3NvbWV0aGluZyBvbmUgbmVlZHMgdG8gd29ycnkgYWJvdXQuICBSZXR1cm4gdmFsdWVzID4gMCB3aWxsIGJlIG1hcHBlZCB0bworemVybyBpbiB0aGUgVkZTIGxheWVyLgogCiAtPnJlYWRkaXIoKSBhbmQgLT5pb2N0bCgpIG9uIGRpcmVjdG9yaWVzIG11c3QgYmUgY2hhbmdlZC4gSWRlYWxseSB3ZSB3b3VsZAogbW92ZSAtPnJlYWRkaXIoKSB0byBpbm9kZV9vcGVyYXRpb25zIGFuZCB1c2UgYSBzZXBhcmF0ZSBtZXRob2QgZm9yIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQKaW5kZXggNDMzM2U4My4uZTA1NWFjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CkBAIC0zNzMsMTAgKzM3MywxMSBAQAogQ29tcHJlc3Npb24gKCopCQlodHRwOi8vZTJjb21wci5zb3VyY2Vmb3JnZS5uZXQvCiAKIEltcGxlbWVudGF0aW9ucyBmb3I6Ci1XaW5kb3dzIDk1Lzk4L05ULzIwMDAJaHR0cDovL3VyYW51cy5pdC5zd2luLmVkdS5hdS9+am4vbGludXgvRXhwbG9yZTJmcy5odG0KLVdpbmRvd3MgOTUgKCopCQlodHRwOi8vd3d3LnlpcHRvbi5kZW1vbi5jby51ay9jb250ZW50Lmh0bWwjRlNERVhUMgorV2luZG93cyA5NS85OC9OVC8yMDAwCWh0dHA6Ly93d3cuY2hyeXNvY29tZS5uZXQvZXhwbG9yZTJmcworV2luZG93cyA5NSAoKikJCWh0dHA6Ly93d3cueWlwdG9uLm5ldC9jb250ZW50Lmh0bWwjRlNERVhUMgogRE9TIGNsaWVudCAoKikJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCi1PUy8yCQkJaHR0cDovL3BlcnNvLndhbmFkb28uZnIvbWF0dGhpZXUud2lsbG0vZXh0Mi1vczIvCi1SSVNDIE9TIGNsaWVudAkJZnRwOi8vZnRwLmJhcm5ldC5hYy51ay9wdWIvYWNvcm4vYXJtbGludXgvaXNjYWZzLworT1MvMiAoKykJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCitSSVNDIE9TIGNsaWVudAkJaHR0cDovL3d3dy5lc3ctaGVpbS50dS1jbGF1c3RoYWwuZGUvfm1hcmNvL3Ntb3Jicm9kL0lzY2FGUy8KIAogKCopIG5vIGxvbmdlciBhY3RpdmVseSBkZXZlbG9wZWQvc3VwcG9ydGVkIChhcyBvZiBBcHIgMjAwMSkKKygrKSBubyBsb25nZXIgYWN0aXZlbHkgZGV2ZWxvcGVkL3N1cHBvcnRlZCAoYXMgb2YgTWFyIDIwMDkpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAppbmRleCA5ZGQyYTNiYi4uZTVmMzgzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CkBAIC0xOTgsNSArMTk4LDUgQEAKIHByb2dyYW1zOiAJaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCiAJCWh0dHA6Ly9leHQycmVzaXplLnNvdXJjZWZvcmdlLm5ldAogCi11c2VmdWwgbGlua3M6CWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KLQkJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM4LwordXNlZnVsIGxpbmtzOglodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGlicmFyeS9sLWZzNy5odG1sCisJCWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saWJyYXJ5L2wtZnM4Lmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGE4N2JlNDIuLjgzMGJhZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTQ3OCw2ICsxNDc4LDEzIEBACiB0aGlzIHNob3VsZCBiZSBlbmFibGVkLCBidXQgaWYgdGhlIHByb2JsZW0gcGVyc2lzdHMgdGhlIG1lc3NhZ2VzIGNhbiBiZQogZGlzYWJsZWQuCiAKK25ldGRldl9idWRnZXQKKy0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0YWtlbiBmcm9tIGFsbCBpbnRlcmZhY2VzIGluIG9uZSBwb2xsaW5nIGN5Y2xlIChOQVBJCitwb2xsKS4gSW4gb25lIHBvbGxpbmcgY3ljbGUgaW50ZXJmYWNlcyB3aGljaCBhcmUgcmVnaXN0ZXJlZCB0byBwb2xsaW5nIGFyZQorcHJvYmVkIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBUaGUgbGltaXQgb2YgcGFja2V0cyBpbiBvbmUgc3VjaCBwcm9iZSBjYW4gYmUKK3NldCBwZXItZGV2aWNlIHZpYSBzeXNmcyBjbGFzcy9uZXQvPGRldmljZT4vd2VpZ2h0IC4KIAogbmV0ZGV2X21heF9iYWNrbG9nCiAtLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAppbmRleCAwZTg0MTE3Li45M2Q4ZTNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCkBAIC00Miw2ICs0MiwxMSBAQAogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0ZQogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCiAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzQ5NworICAqIE1heGltIE1BWDY2NDgKKyAgICBQcmVmaXg6ICdtYXg2NjQ2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YworICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzUwMAogICAqIE1heGltIE1BWDY2NDkKICAgICBQcmVmaXg6ICdtYXg2NjQ2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwpAQCAtNzQsNiArNzksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGMsIDB4NGQgYW5kIDB4NGUKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzMzNzAKKyAgKiBNYXhpbSBNQVg2NjkyCisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM1MDAKIAogCiBBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA1NGYyMWE1Li42Yjk3OWQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDQsNiArNDQsNyBAQAogCUZCCVRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGVuYWJsZWQuCiAJSFcJQXBwcm9wcmlhdGUgaGFyZHdhcmUgaXMgZW5hYmxlZC4KIAlJQS02NAlJQS02NCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlJTUEgICAgIEludGVncml0eSBtZWFzdXJlbWVudCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlJT1NDSEVECU1vcmUgdGhhbiBvbmUgSS9PIHNjaGVkdWxlciBpcyBlbmFibGVkLgogCUlQX1BOUAlJUCBESENQLCBCT09UUCwgb3IgUkFSUCBpcyBlbmFibGVkLgogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KQEAgLTQ5MiwxMCArNDkzLDEyIEBACiAJCQlEZWZhdWx0OiA2NAogCiAJaHBldD0JCVtYODYtMzIsSFBFVF0gb3B0aW9uIHRvIGNvbnRyb2wgSFBFVCB1c2FnZQotCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfQorCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfAorCQkJCXZlcmJvc2UgfQogCQkJZGlzYWJsZTogZGlzYWJsZSBIUEVUIGFuZCB1c2UgUElUIGluc3RlYWQKIAkJCWZvcmNlOiBhbGxvdyBmb3JjZSBlbmFibGVkIG9mIHVuZG9jdW1lbnRlZCBjaGlwcyAoSUNINCwKIAkJCVZJQSwgblZpZGlhKQorCQkJdmVyYm9zZTogc2hvdyBjb250ZW50cyBvZiBIUEVUIHJlZ2lzdGVycyBkdXJpbmcgc2V0dXAKIAogCWNvbTIwMDIwPQlbSFcsTkVUXSBBUkNuZXQgLSBDT00yMDAyMCBjaGlwc2V0CiAJCQlGb3JtYXQ6CkBAIC04MjksNiArODMyLDkgQEAKIAogCWh2Y19pdWN2PQlbUzM5MF0gTnVtYmVyIG9mIHovVk0gSVVDViBoeXBlcnZpc29yIGNvbnNvbGUgKEhWQykKIAkJCSAgICAgICB0ZXJtaW5hbCBkZXZpY2VzLiBWYWxpZCB2YWx1ZXM6IDAuLjgKKwlodmNfaXVjdl9hbGxvdz0JW1MzOTBdIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMuCisJCQkgICAgICAgSWYgc3BlY2lmaWVkLCB6L1ZNIElVQ1YgSFZDIGFjY2VwdHMgY29ubmVjdGlvbnMKKwkJCSAgICAgICBmcm9tIGxpc3RlZCB6L1ZNIHVzZXIgSURzIG9ubHkuCiAKIAlpODA0Mi5kZWJ1ZwlbSFddIFRvZ2dsZSBpODA0MiBkZWJ1ZyBtb2RlCiAJaTgwNDIuZGlyZWN0CVtIV10gUHV0IGtleWJvYXJkIHBvcnQgaW50byBub24tdHJhbnNsYXRlZCBtb2RlCkBAIC05MDIsNiArOTA4LDE1IEBACiAJaWhhc2hfZW50cmllcz0JW0tOTF0KIAkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBpbm9kZSBjYWNoZS4KIAorCWltYV9hdWRpdD0JW0lNQV0KKwkJCUZvcm1hdDogeyAiMCIgfCAiMSIgfQorCQkJMCAtLSBpbnRlZ3JpdHkgYXVkaXRpbmcgbWVzc2FnZXMuIChEZWZhdWx0KQorCQkJMSAtLSBlbmFibGUgaW5mb3JtYXRpb25hbCBpbnRlZ3JpdHkgYXVkaXRpbmcgbWVzc2FnZXMuCisKKwlpbWFfaGFzaD0JW0lNQV0KKwkJCUZvcm10OiB7ICJzaGExIiB8ICJtZDUiIH0KKwkJCWRlZmF1bHQ6ICJzaGExIgorCiAJaW4yMDAwPQkJW0hXLFNDU0ldCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9pbjIwMDAuYy4KIApAQCAtMTMxMCw4ICsxMzI1LDEzIEBACiAKIAltZW10ZXN0PQlbS05MLFg4Nl0gRW5hYmxlIG1lbXRlc3QKIAkJCUZvcm1hdDogPGludGVnZXI+Ci0JCQlyYW5nZTogMCw0IDogcGF0dGVybiBudW1iZXIKIAkJCWRlZmF1bHQgOiAwIDxkaXNhYmxlPgorCQkJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbWVtdGVzdCBwYXNzZXMgdG8gYmUKKwkJCXBlcmZvcm1lZC4gRWFjaCBwYXNzIHNlbGVjdHMgYW5vdGhlciB0ZXN0CisJCQlwYXR0ZXJuIGZyb20gYSBnaXZlbiBzZXQgb2YgcGF0dGVybnMuIE1lbXRlc3QKKwkJCWZpbGxzIHRoZSBtZW1vcnkgd2l0aCB0aGlzIHBhdHRlcm4sIHZhbGlkYXRlcworCQkJbWVtb3J5IGNvbnRlbnRzIGFuZCByZXNlcnZlcyBiYWQgbWVtb3J5CisJCQlyZWdpb25zIHRoYXQgYXJlIGRldGVjdGVkLgogCiAJbWV5ZS4qPQkJW0hXXSBTZXQgTW90aW9uRXllIENhbWVyYSBwYXJhbWV0ZXJzCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tZXllLnR4dC4KQEAgLTE4MTYsMTEgKzE4MzYsNiBAQAogCQkJYXV0b2NvbmZpZ3VyYXRpb24uCiAJCQlSYW5nZXMgYXJlIGluIHBhaXJzIChtZW1vcnkgYmFzZSBhbmQgc2l6ZSkuCiAKLQlkeW5hbWljX3ByaW50awlFbmFibGVzIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIGlmCi0JCQlDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaGFzIGJlZW4gZW5hYmxlZC4KLQkJCVRoZXNlIGNhbiBhbHNvIGJlIHN3aXRjaGVkIG9uL29mZiB2aWEKLQkJCTxkZWJ1Z2ZzPi9keW5hbWljX3ByaW50ay9tb2R1bGVzCi0KIAlwcmludC1mYXRhbC1zaWduYWxzPQogCQkJW0tOTF0gZGVidWc6IHByaW50IGZhdGFsIHNpZ25hbHMKIAkJCXByaW50LWZhdGFsLXNpZ25hbHM9MTogcHJpbnQgc2VnZmF1bHQgaW5mbyB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sb2dvLmdpZiBiL0RvY3VtZW50YXRpb24vbG9nby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYWU3NWYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9sb2dvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9nby5zdmcgYi9Eb2N1bWVudGF0aW9uL2xvZ28uc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWU0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvZ28uc3ZnCkBAIC0wLDAgKzEsMjkxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKKyAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCisgICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCisgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCisgICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKKyAgIHdpZHRoPSIxNzcxLjY1MzQiCisgICBoZWlnaHQ9IjE0MTcuMzIyOCIKKyAgIGlkPSJzdmcyIgorICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKKyAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYiCisgICBzb2RpcG9kaTpkb2NuYW1lPSJ0dXouc3ZnIgorICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiCisgICB2ZXJzaW9uPSIxLjAiCisgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9jaGVlc2VuZXNzL0RvY3VtZW50cy9MQ0EwOS9tYXNjb3QvdHV6X2ZpbmFsLnBuZyIKKyAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxMDAuMDM1ODgiCisgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTAwLjAzNTg4Ij4KKyAgPHNvZGlwb2RpOm5hbWVkdmlldworICAgICBpZD0iYmFzZSIKKyAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgorICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKKyAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgorICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKKyAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgorICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgorICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgorICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgorICAgICBpbmtzY2FwZTp6b29tPSIwLjI1IgorICAgICBpbmtzY2FwZTpjeD0iLTE3NC43OTMxIgorICAgICBpbmtzY2FwZTpjeT0iNzg0LjI2MzI1IgorICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCisgICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzIiCisgICAgIHNob3dncmlkPSJmYWxzZSIKKyAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjgwIgorICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MjMiCisgICAgIGlua3NjYXBlOndpbmRvdy14PSItNCIKKyAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI1IgorICAgICBzaG93Z3VpZGVzPSJ0cnVlIgorICAgICBpbmtzY2FwZTpndWlkZS1iYm94PSJ0cnVlIgorICAgICB1bml0cz0ibW0iIC8+CisgIDxkZWZzCisgICAgIGlkPSJkZWZzNCI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4PSItMC4wODQ2NTQ5OTQiCisgICAgICAgd2lkdGg9IjEuMTY5MzEiCisgICAgICAgeT0iLTAuMzY1OTI0NjkiCisgICAgICAgaGVpZ2h0PSIxLjczMTg0OTQiCisgICAgICAgaWQ9ImZpbHRlcjExMzYxIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSI0LjU3NDA1ODYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIxMTM2MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgorICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1NjQuMDk3NiA6IDEiCisgICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgorICAgICAgIGlua3NjYXBlOnZwX3o9IjE0NDUuODU5MSA6IDU2NC4wOTc2IDogMSIKKyAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzIyLjkyOTU3IDogMzc2LjA2NTA2IDogMSIKKyAgICAgICBpZD0icGVyc3BlY3RpdmU4MTQ1IiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDc2MjIiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A3NjI0IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A3NjI2IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDExMyI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDQxMTUiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQxMTciIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY2MCI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDM2NjIiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDM2NjQiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjI3Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzYyOSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wMzYzMSIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI4NDMiPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMjg0NSIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwLjAyMTg4Nzg0IgorICAgICAgICAgaWQ9InN0b3AyODQ3IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwLjc1ODY2MjIyIgorICAgICAgICAgaWQ9InN0b3AyODQ5IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMjg1MSIKKyAgICAgICAgIG9mZnNldD0iMC44ODUwODk4MSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyMzIzMjM7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMjg1MyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1OTU5NTk7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDg5NjQiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxYTFhMWE7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A4OTY2IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxYTFhMWE7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A4OTY4IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk1MiI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzBhMGMwYztzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDg5NTQiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFmMjcyNztzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDg5NTYiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ4NDMwIj4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMWUyMzIzO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wODQzMiIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDg0MzgiCisgICAgICAgICBvZmZzZXQ9IjAuNTU5OTIzODkiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxZDFkO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wODQzNCIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDgzOTgiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyODMxMzE7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A4NDAwIiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wODQwMiIKKyAgICAgICAgIG9mZnNldD0iMC41MTI1NTg3IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFlMjQyNDtzdG9wLW9wYWNpdHk6MDsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDg0MDQiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDg3MCI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3YmQ4MDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDQ4NzIiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3YmQ4MDtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQ4NzQiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDg2MiI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UyZTJlMjtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDQ4NjQiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UyZTJlMjtzdG9wLW9wYWNpdHk6MDsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQ4NjYiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDc4Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjllZWQzO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wNDQ4MCIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wNDQ4MiIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMDYiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkOWUwMDI7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A0MTA4IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wNDExNCIKKyAgICAgICAgIG9mZnNldD0iMC41IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2E5YWUwMTtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcxNzUwMTtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDQxMTAiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDg0Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojN2Q3ZDAwO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wNDA4NiIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDQwODgiCisgICAgICAgICBvZmZzZXQ9IjAuMzYzNjYwMSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNmM3MDA7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmNmY4MDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A0MDkwIiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDA0MSI+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3A0MDQzIgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmYwMDtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3A0MDQ1IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmYwMDtzdG9wLW9wYWNpdHk6MDsiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDI1Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wNDAyNyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wNDAzMSIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwMTMiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3A0MDE1IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMmIyMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3A0MDE3IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk4NSI+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDM5ODciIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFkMWQxZDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDM5ODkiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTYxIj4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjgzMTMxO3N0b3Atb3BhY2l0eTowOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzk2MyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDM5NjUiCisgICAgICAgICBvZmZzZXQ9IjAuNSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxZTI0MjQ7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3AzOTY3IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk1MSI+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzOTUzIgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzM0NDA0MDtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzIyMjkyOTtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAuNSIKKyAgICAgICAgIGlkPSJzdG9wMzk1NSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDM5NTciCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MDkiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyODMxMzE7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3AzOTExIiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMzkxNyIKKyAgICAgICAgIG9mZnNldD0iMC41IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzFlMjQyNDtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBpZD0ic3RvcDM5MTMiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTM3Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWRhNDY5O3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzUzOSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDM1NDUiCisgICAgICAgICBvZmZzZXQ9IjAuODExMzIwNzgiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWRhNDY5O3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wMzU0MSIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzMTciPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjZmM2OTA7c3RvcC1vcGFjaXR5OjEiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBpZD0ic3RvcDMzMTkiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzMzIxIgorICAgICAgICAgb2Zmc2V0PSIwLjIxMTYxODY1IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmYTc3NTtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzMzIzIgorICAgICAgICAgb2Zmc2V0PSIwLjUzNDA4NTE1IgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzYxNWMzYTtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCisgICAgICAgICBvZmZzZXQ9IjAuNzY1MDQwOTMiCisgICAgICAgICBpZD0ic3RvcDMzMjUiIC8+CisgICAgICA8c3RvcAorICAgICAgICAgaWQ9InN0b3AzMzI3IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQwMzUxODtzdG9wLW9wYWNpdHk6MTsiIC8+CisgICAgPC9saW5lYXJHcmFkaWVudD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMjM5Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDMyNTEiCisgICAgICAgICBvZmZzZXQ9IjAiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2ZjNjkwO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWZhNzc1O3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMC4yMTE2MTg2NSIKKyAgICAgICAgIGlkPSJzdG9wMzI2NyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjE1YzNhO3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMC41MzQwODUxNSIKKyAgICAgICAgIGlkPSJzdG9wMzI2MSIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDMyNjUiCisgICAgICAgICBvZmZzZXQ9IjAuNzY1MDQwOTMiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNDAzNTE4O3N0b3Atb3BhY2l0eToxOyIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIGlkPSJzdG9wMzI0MyIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMjM5IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDMyODEiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU0ODA0MjMsMS43NDE0MzA0LC0xLjk2ODM1MTUsMS43NDk3NjM4LC0xMTMwLjU1ODYsLTE4NzIuNTEyMSkiCisgICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiCisgICAgICAgY3g9IjgwNi41MjU4MiIKKyAgICAgICBjeT0iMjEyLjY4MTE3IgorICAgICAgIGZ4PSI4MDYuNTI1ODIiCisgICAgICAgZnk9IjIxMi42ODExNyIKKyAgICAgICByPSI0OC4zNjMyMTYiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzMTciCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzMxNSIKKyAgICAgICBjeD0iNTQzLjY2OTgiCisgICAgICAgY3k9IjE0Ny4zMTMxIgorICAgICAgIGZ4PSI1NDMuNjY5OCIKKyAgICAgICBmeT0iMTQ3LjMxMzEiCisgICAgICAgcj0iNDcuODYzMjE2IgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xMzgyMjU2LDAsMCwyLjMzODI4ODQsLTc3LjAzODQ3LC0xMDEuNjg3MDQpIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNTM3IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM1NDMiCisgICAgICAgY3g9IjM4NSIKKyAgICAgICBjeT0iMjM3LjAwNTA0IgorICAgICAgIGZ4PSIzODUiCisgICAgICAgZnk9IjIzNy4wMDUwNCIKKyAgICAgICByPSI4Ni45Mjg1NzQiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjg1NjIwMzgsMCwzNC4wODA0MjcpIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTA5IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM5MTUiCisgICAgICAgY3g9IjQxOC4zMDM2NSIKKyAgICAgICBjeT0iMzQyLjQ3Nzk0IgorICAgICAgIGZ4PSI0MTguMzAzNjUiCisgICAgICAgZnk9IjM0Mi40Nzc5NCIKKyAgICAgICByPSIxMzEuNDUwOSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzk1NzM0NywwLjYyMTEwNTYsLTAuNDI0NDA2NywwLjk1MzcxNzQsLTE1LjA2MTkxMywtMjI3Ljk2NzExKSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzk1MSIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTMzIgorICAgICAgIGN4PSIzOTcuMTYzODgiCisgICAgICAgY3k9IjMzNi45NTI0NSIKKyAgICAgICBmeD0iMzk3LjE2Mzg4IgorICAgICAgIGZ5PSIzMzYuOTUyNDUiCisgICAgICAgcj0iMzYuNzUiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjk0NDk5NzIsMi40ODk0ODM3ZS03LC0yLjQ4OTQ4MzNlLTcsMS45NDQ5OTY5LC0zNzUuMzE4NjgsLTMxOC40MTkxMikiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5NjEiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk1OSIKKyAgICAgICB4MT0iMzk4LjIxNDI5IgorICAgICAgIHkxPSIzNDMuNTIyODkiCisgICAgICAgeDI9IjM3OS4yODU3MSIKKyAgICAgICB5Mj0iMjY1LjMwODYyIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzk4MSIKKyAgICAgICB4PSItMC4zMDAwMDAwMSIKKyAgICAgICB3aWR0aD0iMS42IgorICAgICAgIHk9Ii0wLjMwMDAwMDAxIgorICAgICAgIGhlaWdodD0iMS42Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzk4MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzk4NSIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTkxIgorICAgICAgIGN4PSI0MDIuNDg4OTgiCisgICAgICAgY3k9IjMxNy4yMzU3OCIKKyAgICAgICBmeD0iNDAyLjQ4ODk4IgorICAgICAgIGZ5PSIzMTcuMjM1NzgiCisgICAgICAgcj0iMjMuNzE0Mjg1IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC4zNzc2NjE2LDAsMCw0LjM3NzY2MTYsLTEzNTguMzAyNSwtMTA3MC43MzU3KSIgLz4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzOTk5Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2Y1ZmYwNDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSIKKyAgICAgICAgIGQ9Ik0gMTc5LjY0Mjg2LDI2Ny4zNjIxOCBDIDE1Ny4yMzI0MiwzMDcuMDY1MSAxMTkuMDI2NzYsMzgzLjE0MjQ3IDExMC4zNTcxNSw0MTcuMDA1MDQgQyAxMDEuNzA5OTQsNDUwLjc4MDE0IDEwMS41ODUxNiw0ODMuNDIxNTggMTEwLDUwMy40MzM2MiBDIDExOC4zNjAyLDUyMy4zMTU3NSAxMzYuMTYzOTgsNTM5LjA2NjQyIDE1MC43MTQyOCw1NDQuODYyMTggQyAxNTAuMTE3OSw1MzAuNDg2MzEgMTY1LjA4NzIzLDUwMS41NzYzNSAyMjMuNTcxNDMsNDcyLjM2MjE4IEMgMjgyLjE5NzcsNDQzLjA3NzA0IDMwMS45NTMwNiw0NDUuMjMxMzIgMzI3LjE0Mjg1LDQyNS4yMTkzMiBDIDM1Mi43NzI5MSw0MDQuODU3NTYgMzM5Ljc1MzE2LDM1OC4xNzQ2OSAzMzAuMzU3MTQsMzMxLjI5MDc1IEMgMzIwLjkyMjksMzA0LjI5NzQ3IDI5NS4zODk3MywyNzIuMTY2MjcgMjYzLjkyODU3LDI2MS42NDc5IEMgMjMyLjg5NTMsMjUxLjI3MjU4IDE5OC45MTA4MSwyNTYuNzk5NTMgMTc5LjY0Mjg2LDI2Ny4zNjIxOCB6IgorICAgICAgICAgaWQ9InBhdGg0MDAxIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenpjenp6emMiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDAxMyIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDU2IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xMzIzMjM5LDAuNzY1OTQ4OCwtMS40NTUwMjg2LDIuMTUxMDA5OCw1ODguNzUzNzYsLTcxMS43OTcxNikiCisgICAgICAgY3g9IjIyOC44MTM1NSIKKyAgICAgICBjeT0iNDQwLjI2OTcxIgorICAgICAgIGZ4PSIyMjguODEzNTUiCisgICAgICAgZnk9IjQ0MC4yNjk3MSIKKyAgICAgICByPSIxMTkuMTc1MDkiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwNDEiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA2MCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuOTExMjA2ZS0yLDIuNjg2OTg1NSwtMC43MjM0MjY4LDEuNTkxNDk0N2UtMiw0MDguNzI3NzksLTQyNC41NjQ1MikiCisgICAgICAgY3g9IjI3NS40NDIyIgorICAgICAgIGN5PSIzMzUuMzQ4NjYiCisgICAgICAgZng9IjI3NS40NDIyIgorICAgICAgIGZ5PSIzMzUuMzQ4NjYiCisgICAgICAgcj0iMzYuNzUiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwMjUiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA2MiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuOTExMjA2ZS0yLDIuNjg2OTg1NSwtMC43MjM0MjY4LDEuNTkxNDk0N2UtMiw0MDguNzI3NzksLTQyNC41NjQ1MikiCisgICAgICAgY3g9IjI3NS40NDIyIgorICAgICAgIGN5PSIzMzUuMzQ4NjYiCisgICAgICAgZng9IjI3NS40NDIyIgorICAgICAgIGZ5PSIzMzUuMzQ4NjYiCisgICAgICAgcj0iMzYuNzUiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwODQiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDA4MiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICB4MT0iMTgyLjM1MDQ2IgorICAgICAgIHkxPSIyNTYuMTExMzYiCisgICAgICAgeDI9IjE0NS41MzM0OCIKKyAgICAgICB5Mj0iNTQyLjIwNTAyIiAvPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDQxMDAiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTAwMDc1NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCisgICAgICAgICBkPSJNIDI2NS45MzU0MSwxMjYuNjgzOTMgTCAyNDcuMTY4MiwyOTUuNTQ3MDEgTCA0MjEuMjczNjMsMjIyLjQyNjMzIEwgNDgzLjIyODAzLDMxMS4wODUxNiBMIDU0MS4xMTI0MywyNzkuMDk0ODYgTCA1MDMuNTc4MDEsOTkuMDM1MTgzIEwgMjY1LjkzNTQxLDEyNi42ODM5MyB6IgorICAgICAgICAgaWQ9InBhdGg0MTAyIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQxMDYiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDExMiIKKyAgICAgICBjeD0iMjUwLjIyNjc4IgorICAgICAgIGN5PSI0NzUuMDk3NjMiCisgICAgICAgZng9IjI1MC4yMjY3OCIKKyAgICAgICBmeT0iNDc1LjA5NzYzIgorICAgICAgIHI9Ijk1Ljk4ODc3IgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMjU5MDA0LC0wLjcwNzc3MzksMC4xNDEzOTg5LDAuMjQ0OTEwMiwzMjIuMjIzMjYsNjA4LjkxODE1KSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDQ3OCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDg0IgorICAgICAgIHgxPSI0MTIuMDg5MjYiCisgICAgICAgeTE9IjQwNC45MTU3NCIKKyAgICAgICB4Mj0iNDE3LjM3NSIKKyAgICAgICB5Mj0iNDAxLjgyNjQ4IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NDc4IgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ0ODYiCisgICAgICAgeDE9IjQxMS45MTA3MSIKKyAgICAgICB5MT0iNDA0LjkxNTc3IgorICAgICAgIHgyPSI0MTcuMzc1IgorICAgICAgIHkyPSI0MDEuODI2NDgiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ0NzgiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDQ4OCIKKyAgICAgICB4MT0iNDExLjkxMDcxIgorICAgICAgIHkxPSI0MDUuNTQwNzciCisgICAgICAgeDI9IjQxNy4zNzUiCisgICAgICAgeTI9IjQwMS44MjY0OCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDQ3OCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDkwIgorICAgICAgIHgxPSI0MTIuMDg5MjYiCisgICAgICAgeTE9IjQwNS41NDA3NyIKKyAgICAgICB4Mj0iNDE3LjM3NSIKKyAgICAgICB5Mj0iNDAxLjgyNjQ4IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NDc4IgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ0OTIiCisgICAgICAgeDE9IjQxMS43MzIxMiIKKyAgICAgICB5MT0iNDA1LjU0MDc3IgorICAgICAgIHgyPSI0MTcuMzc1IgorICAgICAgIHkyPSI0MDEuODI2NDgiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ4NjIiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDg2OCIKKyAgICAgICBjeD0iNDI5LjU2NzM4IgorICAgICAgIGN5PSIzNzcuNDI4NzciCisgICAgICAgZng9IjQyOS41NjczOCIKKyAgICAgICBmeT0iMzc3LjQyODc3IgorICAgICAgIHI9IjcyLjA3OTczNSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDAuNjE4MDM0LDAsMTQ0LjE2NDk2KSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDg3MCIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0ODc2IgorICAgICAgIGN4PSI0MzcuNjk5MSIKKyAgICAgICBjeT0iMzkxLjIxNzM1IgorICAgICAgIGZ4PSI0MzcuNjk5MSIKKyAgICAgICBmeT0iMzkxLjIxNzM1IgorICAgICAgIHI9IjM2LjYxMTkzMSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDAuNjE4MDM0LDAsMTQ5LjQzMTc0KSIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDAxMyIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzNTg1IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xMzIzMjM5LDAuNzY1OTQ4OCwtMS40NTUwMjg2LDIuMTUxMDA5OCw1ODguNzUzNzYsLTcxMS43OTcxNikiCisgICAgICAgY3g9IjIyOC44MTM1NSIKKyAgICAgICBjeT0iNDQwLjI2OTcxIgorICAgICAgIGZ4PSIyMjguODEzNTUiCisgICAgICAgZnk9IjQ0MC4yNjk3MSIKKyAgICAgICByPSIxMTkuMTc1MDkiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwODQiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzU4NyIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICB4MT0iMTgyLjM1MDQ2IgorICAgICAgIHkxPSIyNTYuMTExMzYiCisgICAgICAgeDI9IjE0NS41MzM0OCIKKyAgICAgICB5Mj0iNTQyLjIwNTAyIiAvPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzE3IgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDg0MTAiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMzY0NzgsLTEuMDM0NTQ5MmUtNywxLjcxMjQ2MjhlLTcsMS42NjEzMTI1LC03NTMuOTk2MzIsLTMwMi43Njk3MikiCisgICAgICAgY3g9IjMxNy43ODc1NCIKKyAgICAgICBjeT0iMTI5LjY1Mzc4IgorICAgICAgIGZ4PSIzMTcuNzg3NTQiCisgICAgICAgZnk9IjEyOS42NTM3OCIKKyAgICAgICByPSI0Ny44NjMyMTYiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDgzOTgiCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50ODQxMiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDc0NzY2MSwtMC4xNTc3OTU3LDAuMjM4MjQyNSwzLjEzMjUxODMsLTExNDQuMjM1OCwtMjcyLjI5MzI1KSIKKyAgICAgICBjeD0iMzI1LjMwODQ3IgorICAgICAgIGN5PSI4MC45MDk1NTQiCisgICAgICAgZng9IjMyNS4zMDg0NyIKKyAgICAgICBmeT0iODAuOTA5NTU0IgorICAgICAgIHI9IjI2LjkzNzk4OCIgLz4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NTE0Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzI2MmYyZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDM1Mi4yNDU1MywyMTEuOTkxODUgQyAzNDguNDQxMSwxODYuNzI3NjIgMzM1LjQzNTgxLDE2MS4zNTM4MyAzMzUuMDg4NzMsMTM2LjQ2NjYyIEMgMzM0LjkwMjQ3LDEyMy4xMTExIDMzOC4zNjE1OCwxMDkuODk1NzEgMzQ4Ljg0NDI2LDk2LjkxMjU3NCBDIDM4NS4xOTEyOCwzMS42MTY3MzkgNDY1Ljc4NTE3LDEyLjIxNzg4OSA1MzQuNzc4OTIsNS40NDcxNDcgQyA2MjEuNzAxMzEsLTUuNTY5NjU0IDcxOS42OTE1OSwyMy4zODcyMTkgNzY4LjE1MDI2LDEwMC44NDg0MyBDIDgyMi4yNzQyOCwxNzYuNTgxNzMgODI0LjgyNTAyLDI3My4zODc1NSA4NDguNzYyMywzNjAuMzc2MzggQyA4NzguMjAwMDksNDg3LjUwMzk4IDkwMy41NDE0NCw2MTYuNTkwNTIgOTA5LjE1NDU0LDc0Ny4yMjY3MyBDIDkwNi4wOTEwNiw4MjUuNDA4NTggOTAwLjcyODIsOTEyLjQxMDg4IDg0OC42NTEzMyw5NzUuMzYwODYgQyA4MDAuNjI0NzksMTAyNS43MTgzIDcyNS44NjQ4NiwxMDI1LjQxMzkgNjYxLjU4MTQ1LDEwMzQuMzYzMiBDIDU3MS4wMjYwNiwxMDM5LjAxODIgNDc3LjIyOTkyLDEwMTguMjE3NCAzOTkuNzk3NTUsOTcwLjE2NDk2IEMgMzM1LjAyMTkxLDkzMi4yMjQ5NSAzMDQuMDY3MzYsODU2LjY4NjMzIDMwMi41MTgxNSw3ODQuMTQ1MzggQyAyOTQuMTI4OTgsNzA0LjI3MDIyIDMyOC45MDk2Nyw2MzAuMzM2ODcgMzU0LjEzODU1LDU1Ni45ODU3NyBDIDM2MS42MDkxNiw0NzQuMjI0NyAzNjMuNTUxNDEsMzkwLjczODAyIDM2My43OTE4OSwzMDcuNjAwOTMgQyAzNjIuOTU1MDcsMjc1LjQwNTQ5IDM1Ni43MDIzNiwyNDMuNzgzNiAzNTIuMjQ1NTMsMjExLjk5MTg1IHoiCisgICAgICAgICBpZD0icGF0aDg1MTYiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2NjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODYwNCI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMyNjJmMmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgZD0iTSAzNTIuMjQ1NTMsMjExLjk5MTg1IEMgMzQ4LjQ0MTEsMTg2LjcyNzYyIDMzNS40MzU4MSwxNjEuMzUzODMgMzM1LjA4ODczLDEzNi40NjY2MiBDIDMzNC45MDI0NywxMjMuMTExMSAzMzguMzYxNTgsMTA5Ljg5NTcxIDM0OC44NDQyNiw5Ni45MTI1NzQgQyAzODUuMTkxMjgsMzEuNjE2NzM5IDQ2NS43ODUxNywxMi4yMTc4ODkgNTM0Ljc3ODkyLDUuNDQ3MTQ3IEMgNjIxLjcwMTMxLC01LjU2OTY1NCA3MTkuNjkxNTksMjMuMzg3MjE5IDc2OC4xNTAyNiwxMDAuODQ4NDMgQyA4MjIuMjc0MjgsMTc2LjU4MTczIDgyNC44MjUwMiwyNzMuMzg3NTUgODQ4Ljc2MjMsMzYwLjM3NjM4IEMgODc4LjIwMDA5LDQ4Ny41MDM5OCA5MDMuNTQxNDQsNjE2LjU5MDUyIDkwOS4xNTQ1NCw3NDcuMjI2NzMgQyA5MDYuMDkxMDYsODI1LjQwODU4IDkwMC43MjgyLDkxMi40MTA4OCA4NDguNjUxMzMsOTc1LjM2MDg2IEMgODAwLjYyNDc5LDEwMjUuNzE4MyA3MjUuODY0ODYsMTAyNS40MTM5IDY2MS41ODE0NSwxMDM0LjM2MzIgQyA1NzEuMDI2MDYsMTAzOS4wMTgyIDQ3Ny4yMjk5MiwxMDE4LjIxNzQgMzk5Ljc5NzU1LDk3MC4xNjQ5NiBDIDMzNS4wMjE5MSw5MzIuMjI0OTUgMzA0LjA2NzM2LDg1Ni42ODYzMyAzMDIuNTE4MTUsNzg0LjE0NTM4IEMgMjk0LjEyODk4LDcwNC4yNzAyMiAzMjguOTA5NjcsNjMwLjMzNjg3IDM1NC4xMzg1NSw1NTYuOTg1NzcgQyAzNjEuNjA5MTYsNDc0LjIyNDcgMzYzLjU1MTQxLDM5MC43MzgwMiAzNjMuNzkxODksMzA3LjYwMDkzIEMgMzYyLjk1NTA3LDI3NS40MDU0OSAzNTYuNzAyMzYsMjQzLjc4MzYgMzUyLjI0NTUzLDIxMS45OTE4NSB6IgorICAgICAgICAgaWQ9InBhdGg4NjA2IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDg2MTAiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMjYyZjJmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIGQ9Ik0gMzUyLjI0NTUzLDIxMS45OTE4NSBDIDM0OC40NDExLDE4Ni43Mjc2MiAzMzUuNDM1ODEsMTYxLjM1MzgzIDMzNS4wODg3MywxMzYuNDY2NjIgQyAzMzQuOTAyNDcsMTIzLjExMTEgMzM4LjM2MTU4LDEwOS44OTU3MSAzNDguODQ0MjYsOTYuOTEyNTc0IEMgMzg1LjE5MTI4LDMxLjYxNjczOSA0NjUuNzg1MTcsMTIuMjE3ODg5IDUzNC43Nzg5Miw1LjQ0NzE0NyBDIDYyMS43MDEzMSwtNS41Njk2NTQgNzE5LjY5MTU5LDIzLjM4NzIxOSA3NjguMTUwMjYsMTAwLjg0ODQzIEMgODIyLjI3NDI4LDE3Ni41ODE3MyA4MjQuODI1MDIsMjczLjM4NzU1IDg0OC43NjIzLDM2MC4zNzYzOCBDIDg3OC4yMDAwOSw0ODcuNTAzOTggOTAzLjU0MTQ0LDYxNi41OTA1MiA5MDkuMTU0NTQsNzQ3LjIyNjczIEMgOTA2LjA5MTA2LDgyNS40MDg1OCA5MDAuNzI4Miw5MTIuNDEwODggODQ4LjY1MTMzLDk3NS4zNjA4NiBDIDgwMC42MjQ3OSwxMDI1LjcxODMgNzI1Ljg2NDg2LDEwMjUuNDEzOSA2NjEuNTgxNDUsMTAzNC4zNjMyIEMgNTcxLjAyNjA2LDEwMzkuMDE4MiA0NzcuMjI5OTIsMTAxOC4yMTc0IDM5OS43OTc1NSw5NzAuMTY0OTYgQyAzMzUuMDIxOTEsOTMyLjIyNDk1IDMwNC4wNjczNiw4NTYuNjg2MzMgMzAyLjUxODE1LDc4NC4xNDUzOCBDIDI5NC4xMjg5OCw3MDQuMjcwMjIgMzI4LjkwOTY3LDYzMC4zMzY4NyAzNTQuMTM4NTUsNTU2Ljk4NTc3IEMgMzYxLjYwOTE2LDQ3NC4yMjQ3IDM2My41NTE0MSwzOTAuNzM4MDIgMzYzLjc5MTg5LDMwNy42MDA5MyBDIDM2Mi45NTUwNywyNzUuNDA1NDkgMzU2LjcwMjM2LDI0My43ODM2IDM1Mi4yNDU1MywyMTEuOTkxODUgeiIKKyAgICAgICAgIGlkPSJwYXRoODYxMiIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY2NjY2NjY2NjY2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NjE2Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzI2MmYyZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDM1Mi4yNDU1MywyMTEuOTkxODUgQyAzNDguNDQxMSwxODYuNzI3NjIgMzM1LjQzNTgxLDE2MS4zNTM4MyAzMzUuMDg4NzMsMTM2LjQ2NjYyIEMgMzM0LjkwMjQ3LDEyMy4xMTExIDMzOC4zNjE1OCwxMDkuODk1NzEgMzQ4Ljg0NDI2LDk2LjkxMjU3NCBDIDM4NS4xOTEyOCwzMS42MTY3MzkgNDY1Ljc4NTE3LDEyLjIxNzg4OSA1MzQuNzc4OTIsNS40NDcxNDcgQyA2MjEuNzAxMzEsLTUuNTY5NjU0IDcxOS42OTE1OSwyMy4zODcyMTkgNzY4LjE1MDI2LDEwMC44NDg0MyBDIDgyMi4yNzQyOCwxNzYuNTgxNzMgODI0LjgyNTAyLDI3My4zODc1NSA4NDguNzYyMywzNjAuMzc2MzggQyA4NzguMjAwMDksNDg3LjUwMzk4IDkwMy41NDE0NCw2MTYuNTkwNTIgOTA5LjE1NDU0LDc0Ny4yMjY3MyBDIDkwNi4wOTEwNiw4MjUuNDA4NTggOTAwLjcyODIsOTEyLjQxMDg4IDg0OC42NTEzMyw5NzUuMzYwODYgQyA4MDAuNjI0NzksMTAyNS43MTgzIDcyNS44NjQ4NiwxMDI1LjQxMzkgNjYxLjU4MTQ1LDEwMzQuMzYzMiBDIDU3MS4wMjYwNiwxMDM5LjAxODIgNDc3LjIyOTkyLDEwMTguMjE3NCAzOTkuNzk3NTUsOTcwLjE2NDk2IEMgMzM1LjAyMTkxLDkzMi4yMjQ5NSAzMDQuMDY3MzYsODU2LjY4NjMzIDMwMi41MTgxNSw3ODQuMTQ1MzggQyAyOTQuMTI4OTgsNzA0LjI3MDIyIDMyOC45MDk2Nyw2MzAuMzM2ODcgMzU0LjEzODU1LDU1Ni45ODU3NyBDIDM2MS42MDkxNiw0NzQuMjI0NyAzNjMuNTUxNDEsMzkwLjczODAyIDM2My43OTE4OSwzMDcuNjAwOTMgQyAzNjIuOTU1MDcsMjc1LjQwNTQ5IDM1Ni43MDIzNiwyNDMuNzgzNiAzNTIuMjQ1NTMsMjExLjk5MTg1IHoiCisgICAgICAgICBpZD0icGF0aDg2MTgiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2NjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODYyMiI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMyMDIwMjA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgIGQ9Ik0gODIxLjY0MzI5LDQ3Ny44ODk5NyBDIDgyMS42NDMyOSw0NzcuODg5OTcgODQ0LjI2Mjc2LDQ3MS4zODMxNiA4NTcuMzg2MDQsNDcyLjAxNzI0IEMgODcwLjUwOTMyLDQ3Mi42NTEzMyA4ODguMDI3NjIsNDczLjk1NTg2IDkwMS4wOTQ4OSw0ODQuMjAzNDMgQyA5MTQuMTYyMTYsNDk0LjQ1MDk5IDkyNi4xNjI2Myw1MTEuMzQzNSA5MzUuMjA3MjgsNTQyLjU3MzA4IEMgOTQ0LjI1MTkzLDU3My44MDI2NiA5MzYuOTA1Niw2NDEuODI1MDkgOTI5LjAzMTI1LDY4NS45MjA0MyBDIDkyMS4xNTY5LDczMC4wMTU3NyA5MDAuNzY2MTUsNzkyLjAzMzQxIDg4NC4wMzEyNSw4MjUuOTIwNDMgQyA4NjcuMjk2MzUsODU5LjgwNzQ1IDgzNC4yMzM1NCw5MDMuNDE1NjMgODIzLjQ2MTgyLDkxNS43OTY1OSBDIDgxMi4wOTc2LDkyOC44NTg1NiA3NjcuMjU1OTMsOTUyLjIyMjc2IDc0NC4wMzEyNSw5NTguMDYzMjYgQyA3NDkuMzM0NTUsOTQ3LjQ1NjY2IDc5Mi45MzEwMSw5MDcuNDc0NDIgNzc5LjAzMTI1LDg5Ny4zNDkgQyA3NjUuMDEyMjgsODg3LjEzNjc0IDczMy4yNzExNiw5NDMuMzMxMzYgNjk0LjczODEsOTI2LjM4MjE3IEMgNzE2LjEyMDQxLDkxMy4yNTAwNSA3MzYuNTE3NSw4NzUuMTk2MTEgNzI4Ljc3ODcxLDg1OS43ODc3MiBDIDcyMC45Mzg0Niw4NDQuMTc3MzMgNjk4LjA3Mzc4LDkwOC41NDUyOSA2MzUuMjQzMTcsODk2LjgwMDYgQyA2NjUuMjk1MjEsODY5LjI3Mzk0IDY5MC42NTAyMyw4MjUuODk2NTkgNjc2LjUwNTg3LDgxMy44MjA5IEMgNjYyLjA5MDcxLDgwMS41MTQwMyA2MTYuMDQ0MTIsODY4LjExNDA1IDYxNi4wNDQxMiw4NjguMTE0MDUgQyA2MTYuMDQ0MTIsODY4LjExNDA1IDYxMy4yMjIyMiw4MjYuNDEyODcgNjI5LjgxNzMyLDc5OS41MDY3MyBDIDY0Ni40NTY2Nyw3NzIuNTI4ODYgNzA5LjQ3MDI5LDcxNy44OTE0NiA3MjkuMzcwNDUsNjg3LjgwMzMxIEMgNzQ5LjI3MDYsNjU3LjcxNTE3IDc2Mi45ODMwMSw2MjEuNzk0MjkgNzcxLjUwNTg3LDU5NS4yODUzNyBDIDc4MC4wMjg3Myw1NjguNzc2NDUgNzg3LjMwNjgxLDUxOC4xODU4MyA3ODcuMzA2ODEsNTE4LjE4NTgzIgorICAgICAgICAgaWQ9InBhdGg4NjI0IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y3pjemN6Y3p6emMiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NjQyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzBmMGYwZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDM2Ni44ODgzOSw1MDQuMTM0NzEgQyAzNjYuODg4MzksNTA0LjEzNDcxIDMzNy4zMzQzMyw1NDQuNzA3NzYgMzE5LjAzMTI1LDU3OC40MjA0MiBDIDMwMC43MjgxNiw2MTIuMTMzMDkgMjYwLjQxMDE2LDcwNC43NzczNiAyNDguNjc0MTEsNzQ5LjQ5MTg1IEMgMjM2LjkxNDcxLDc5NC4yOTUyOSAxODYuMTc0MTEsODczLjA2MzI5IDE4Ni4xNzQxMSw4NzMuMDYzMjkgTCAyNjIuMjQ1NTQsODkxLjI3NzU3IEMgMjYyLjI0NTU0LDg5MS4yNzc1NyAyNzQuMDUyNjYsODc4LjQ1NDIyIDI5My4zMTY5Niw4NDUuMjA2MTQgQyAzMTIuNTgxMjYsODExLjk1ODA2IDM1My42NzQxMSw3MDYuNjM0NzEgMzUzLjY3NDExLDcwNi42MzQ3MSBMIDM2Ni44ODgzOSw1MDQuMTM0NzEgeiIKKyAgICAgICAgIGlkPSJwYXRoODY0NCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y2N6Y2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NjU4Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzBiMGIwYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDU2OS4wMzEyNSwxMDE4Ljc3NzYgQyA1NjQuNzQ1NTQsMTAxOS40OTE5IDU0MS40MDMxLDEwMjIuMzk1NyA1MTEuMTc0MTEsMTAyOC43Nzc2IEMgNDgwLjk0NTEyLDEwMzUuMTU5NSA0MTEuMzk5MTgsMTA1NC43Mzk1IDM2OC4zMTY5NiwxMDY0LjQ5MTkgQyAzMjUuMjM0NzQsMTA3NC4yNDQzIDI1MS4wNTI1MywxMDk5LjMwNzkgMjExLjQwNDM0LDEwOTEuNzU3MyBDIDE3MS43NTYxNiwxMDg0LjIwNjcgMTIxLjg4ODM5LDEwMjcuMzQ5IDEyMS44ODgzOSwxMDI3LjM0OSBMIDEyNi4xNzQxMSw5MzMuMDYzMjkgQyAxMjYuMTc0MTEsOTMzLjA2MzI5IDIxMi4wNTk2Miw5MTYuODYyMzUgMjM4LjMxNjk2LDg5OS40OTE4NiBDIDI2NC41NzQzMSw4ODIuMTIxMzcgMjgzLjg5OTM0LDg0OS44MjU4OCAyOTcuNjAyNjgsODI4LjA2MzI5IEMgMzExLjMwNjAyLDgwNi4zMDA3IDMzMC40NTk4Miw3NTYuNjM0NzEgMzMwLjQ1OTgyLDc1Ni42MzQ3MSBMIDU2OS4wMzEyNSwxMDE4Ljc3NzYgeiIKKyAgICAgICAgIGlkPSJwYXRoODY2MCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emNjenpjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg4MDIiCisgICAgICAgeD0iLTAuMzUzMTE3NTkiCisgICAgICAgd2lkdGg9IjEuNzA2MjM1MiIKKyAgICAgICB5PSItMC4xODE3NzE0IgorICAgICAgIGhlaWdodD0iMS4zNjM1NDI4Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSI0OC4wMzg0OTEiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4ODA0IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg4MDYiCisgICAgICAgeD0iLTAuNjExNDI4NjIiCisgICAgICAgd2lkdGg9IjIuMjIyODU3MiIKKyAgICAgICB5PSItMC4xNDkzMDIzMiIKKyAgICAgICBoZWlnaHQ9IjEuMjk4NjA0NiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMzcuODMwMjEzIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgwOCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODEwIgorICAgICAgIHg9Ii0wLjIzNTE5NDA2IgorICAgICAgIHdpZHRoPSIxLjQ3MDM4ODEiCisgICAgICAgeT0iLTAuMjQ1MDA2NDYiCisgICAgICAgaGVpZ2h0PSIxLjQ5MDAxMjkiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjU4LjMyODA0MSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4MTIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODgxNCIKKyAgICAgICB4PSItMC4yMDQ2NjY5NCIKKyAgICAgICB3aWR0aD0iMS40MDkzMzM5IgorICAgICAgIHk9Ii0wLjI5MDA3ODE5IgorICAgICAgIGhlaWdodD0iMS41ODAxNTY0Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIyMi4zMDAxNjkiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4ODE2IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg4MTgiCisgICAgICAgeD0iLTAuMzQzODEyMzIiCisgICAgICAgd2lkdGg9IjEuNjg3NjI0NiIKKyAgICAgICB5PSItMC4xODQzMzk2MSIKKyAgICAgICBoZWlnaHQ9IjEuMzY4Njc5MiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMzQuNTQyMTY3IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgyMCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODIyIgorICAgICAgIHg9Ii0wLjI3NDI4NTciCisgICAgICAgd2lkdGg9IjEuNTQ4NTcxMyIKKyAgICAgICB5PSItMC4yMTMzMzMzNCIKKyAgICAgICBoZWlnaHQ9IjEuNDI2NjY2NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTEuMzEzNzA4IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgyNCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODI2IgorICAgICAgIHg9Ii0wLjI1ODk0MDg4IgorICAgICAgIHdpZHRoPSIxLjUxNzg4MTgiCisgICAgICAgeT0iLTAuMjIzNjQxMiIKKyAgICAgICBoZWlnaHQ9IjEuNDQ3MjgyNCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTkuNjMxNTQ0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODgyOCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODU2IgorICAgICAgIHg9Ii0wLjMyNTMyMzEiCisgICAgICAgd2lkdGg9IjEuNjUwNjQ2MiIKKyAgICAgICB5PSItMC4xOTAxMzMzNiIKKyAgICAgICBoZWlnaHQ9IjEuMzgwMjY2NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMjguNzEyNTkxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODg1OCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4ODYwIgorICAgICAgIHg9Ii0wLjM4MDkzMDI0IgorICAgICAgIHdpZHRoPSIxLjc2MTg2MDUiCisgICAgICAgeT0iLTAuMTc1MTg3MTYiCisgICAgICAgaGVpZ2h0PSIxLjM1MDM3NDMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjE5LjMwNDAxNSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4NjIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODg4OCIKKyAgICAgICB4PSItMC4yMTEyMTg4IgorICAgICAgIHdpZHRoPSIxLjQyMjQzNzUiCisgICAgICAgeT0iLTAuMTY4MDg2MDUiCisgICAgICAgaGVpZ2h0PSIxLjMzNjE3MjEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjguMzY5MzU4MyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4OTAiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODg5MiIKKyAgICAgICB4PSItMC4xODY5Mjc5NCIKKyAgICAgICB3aWR0aD0iMS4zNzM4NTU5IgorICAgICAgIHk9Ii0wLjIzNjQ2ODczIgorICAgICAgIGhlaWdodD0iMS40NzI5Mzc1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIzMS4yMTIyOCIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg4OTQiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODkwNiI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMyNjJmMmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgZD0iTSAzNTIuMjQ1NTMsMjExLjk5MTg1IEMgMzQ4LjQ0MTEsMTg2LjcyNzYyIDMzNS40MzU4MSwxNjEuMzUzODMgMzM1LjA4ODczLDEzNi40NjY2MiBDIDMzNC45MDI0NywxMjMuMTExMSAzMzguMzYxNTgsMTA5Ljg5NTcxIDM0OC44NDQyNiw5Ni45MTI1NzQgQyAzODUuMTkxMjgsMzEuNjE2NzM5IDQ2NS43ODUxNywxMi4yMTc4ODkgNTM0Ljc3ODkyLDUuNDQ3MTQ3IEMgNjIxLjcwMTMxLC01LjU2OTY1NCA3MTkuNjkxNTksMjMuMzg3MjE5IDc2OC4xNTAyNiwxMDAuODQ4NDMgQyA4MjIuMjc0MjgsMTc2LjU4MTczIDgyNC44MjUwMiwyNzMuMzg3NTUgODQ4Ljc2MjMsMzYwLjM3NjM4IEMgODc4LjIwMDA5LDQ4Ny41MDM5OCA5MDMuNTQxNDQsNjE2LjU5MDUyIDkwOS4xNTQ1NCw3NDcuMjI2NzMgQyA5MDYuMDkxMDYsODI1LjQwODU4IDkwMC43MjgyLDkxMi40MTA4OCA4NDguNjUxMzMsOTc1LjM2MDg2IEMgODAwLjYyNDc5LDEwMjUuNzE4MyA3MjUuODY0ODYsMTAyNS40MTM5IDY2MS41ODE0NSwxMDM0LjM2MzIgQyA1NzEuMDI2MDYsMTAzOS4wMTgyIDQ3Ny4yMjk5MiwxMDE4LjIxNzQgMzk5Ljc5NzU1LDk3MC4xNjQ5NiBDIDMzNS4wMjE5MSw5MzIuMjI0OTUgMzA0LjA2NzM2LDg1Ni42ODYzMyAzMDIuNTE4MTUsNzg0LjE0NTM4IEMgMjk0LjEyODk4LDcwNC4yNzAyMiAzMjguOTA5NjcsNjMwLjMzNjg3IDM1NC4xMzg1NSw1NTYuOTg1NzcgQyAzNjEuNjA5MTYsNDc0LjIyNDcgMzYzLjU1MTQxLDM5MC43MzgwMiAzNjMuNzkxODksMzA3LjYwMDkzIEMgMzYyLjk1NTA3LDI3NS40MDU0OSAzNTYuNzAyMzYsMjQzLjc4MzYgMzUyLjI0NTUzLDIxMS45OTE4NSB6IgorICAgICAgICAgaWQ9InBhdGg4OTA4IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg5NDAiCisgICAgICAgeD0iLTAuMjUxNTI5NzgiCisgICAgICAgd2lkdGg9IjEuNTAzMDU5NiIKKyAgICAgICB5PSItMC4wNTMwMzUyNjciCisgICAgICAgaGVpZ2h0PSIxLjEwNjA3MDUiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEzLjAyNDYwMyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjg5NDIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDg5NTIiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk1OCIKKyAgICAgICB4MT0iNjA5LjMxMjQ0IgorICAgICAgIHkxPSIyMzkuNDY4NjYiCisgICAgICAgeDI9IjU2MC44MzE0MiIKKyAgICAgICB5Mj0iMjYyLjg2MjA2IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDg5NjQiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk3MCIKKyAgICAgICB4MT0iNjAzLjg0MDY0IgorICAgICAgIHkxPSI2MjcuODUzMDMiCisgICAgICAgeDI9IjYxNi4yNDM5NiIKKyAgICAgICB5Mj0iNTg1LjQyNjY0IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyOTAyMCIKKyAgICAgICB4PSItMC4zMjg2MTExNCIKKyAgICAgICB3aWR0aD0iMS42NTcyMjIzIgorICAgICAgIHk9Ii0wLjE4MiIKKyAgICAgICBoZWlnaHQ9IjEuMzY0Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIyMC45MTI2ODQiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI5MDIyIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjkwMjQiCisgICAgICAgeD0iLTAuNTU0NTMxMzQiCisgICAgICAgd2lkdGg9IjIuMTA5MDYyNyIKKyAgICAgICB5PSItMC41MTQzNDc3OSIKKyAgICAgICBoZWlnaHQ9IjIuMDI4Njk1NiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMjAuOTEyNjg0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyOTAyNiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI5MDQ0IgorICAgICAgIHg9Ii0wLjMyNjMxNTc5IgorICAgICAgIHdpZHRoPSIxLjY1MjYzMTYiCisgICAgICAgeT0iLTAuODQ1NDU0NjMiCisgICAgICAgaGVpZ2h0PSIyLjY5MDkwOTQiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjIxLjkyMDMxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyOTA0NiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI5MDQ4IgorICAgICAgIHg9Ii0wLjQwODc5MTIxIgorICAgICAgIHdpZHRoPSIxLjgxNzU4MjQiCisgICAgICAgeT0iLTAuNzE1Mzg0NjYiCisgICAgICAgaGVpZ2h0PSIyLjQzMDc2OTIiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjIxLjkyMDMxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyOTA1MCIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXIzNTg3IgorICAgICAgIHg9Ii0wLjEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjguODgxNDMyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzU4OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjAyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjemN6Y3pjenp6YyIKKyAgICAgICAgIGlkPSJwYXRoMzYwNCIKKyAgICAgICAgIGQ9Ik0gNjQ3LjYxMjA0LDU0MC4wNDYwMSBDIDY0Ny42MTIwNCw1NDAuMDQ2MDEgNjcwLjIzMTUxLDUzMy41MzkyIDY4My4zNTQ3OSw1MzQuMTczMjggQyA2OTYuNDc4MDcsNTM0LjgwNzM3IDcxMy45OTYzNyw1MzYuMTExOSA3MjcuMDYzNjQsNTQ2LjM1OTQ3IEMgNzQwLjEzMDkxLDU1Ni42MDcwMyA3NTIuMTMxMzgsNTczLjQ5OTU0IDc2MS4xNzYwMyw2MDQuNzI5MTIgQyA3NzAuMjIwNjgsNjM1Ljk1ODcgNzYyLjg3NDM1LDcwMy45ODExMyA3NTUsNzQ4LjA3NjQ3IEMgNzQ3LjEyNTY1LDc5Mi4xNzE4MSA3MjYuNzM0OSw4NTQuMTg5NDUgNzEwLDg4OC4wNzY0NyBDIDY5My4yNjUxLDkyMS45NjM0OSA2NjAuMjAyMjksOTY1LjU3MTY3IDY0OS40MzA1Nyw5NzcuOTUyNjMgQyA2MzguMDY2MzUsOTkxLjAxNDYgNTkzLjIyNDY4LDEwMTQuMzc4OCA1NzAsMTAyMC4yMTkzIEMgNTc1LjMwMzMsMTAwOS42MTI3IDYxOC44OTk3Niw5NjkuNjMwNDYgNjA1LDk1OS41MDUwNCBDIDU5MC45ODEwMyw5NDkuMjkyNzggNTU5LjIzOTkxLDEwMDUuNDg3NCA1MjAuNzA2ODUsOTg4LjUzODIxIEMgNTQyLjA4OTE2LDk3NS40MDYwOSA1NjIuNDg2MjUsOTM3LjM1MjE1IDU1NC43NDc0Niw5MjEuOTQzNzYgQyA1NDYuOTA3MjEsOTA2LjMzMzM3IDUyNC4wNDI1Myw5NzAuNzAxMzMgNDYxLjIxMTkyLDk1OC45NTY2NCBDIDQ5MS4yNjM5Niw5MzEuNDI5OTggNTE2LjYxODk4LDg4OC4wNTI2MyA1MDIuNDc0NjIsODc1Ljk3Njk0IEMgNDg4LjA1OTQ2LDg2My42NzAwNyA0NDIuMDEyODcsOTMwLjI3MDA5IDQ0Mi4wMTI4Nyw5MzAuMjcwMDkgQyA0NDIuMDEyODcsOTMwLjI3MDA5IDQzOS4xOTA5Nyw4ODguNTY4OTEgNDU1Ljc4NjA3LDg2MS42NjI3NyBDIDQ3Mi40MjU0Miw4MzQuNjg0OSA1MzUuNDM5MDQsNzgwLjA0NzUgNTU1LjMzOTIsNzQ5Ljk1OTM1IEMgNTc1LjIzOTM1LDcxOS44NzEyMSA1ODguOTUxNzYsNjgzLjk1MDMzIDU5Ny40NzQ2Miw2NTcuNDQxNDEgQyA2MDUuOTk3NDgsNjMwLjkzMjQ5IDYxMy4yNzU1Niw1ODAuMzQxODcgNjEzLjI3NTU2LDU4MC4zNDE4NyIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMjAyMDIwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MTIwIgorICAgICAgIHg9Ii0wLjI3NzA4MjIiCisgICAgICAgd2lkdGg9IjEuNTU0MTY0NCIKKyAgICAgICB5PSItMC4zMjQ4MjA0MyIKKyAgICAgICBoZWlnaHQ9IjEuNjQ5NjQwOSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTkuOTU2Mjg5IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDEyMiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjMxIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSA3NjAuMTYzOTYsOTM1LjgzMzc3IEMgNzY2Ljk1ODA2LDk1NC43MzY1NiA3NzAuNjU3NjUsOTY5LjEzMzQ2IDc3Mi4wNTQyNiw5ODcuMDQ1NjYgQyA3NzMuNDUwODgsMTAwNC45NTggNzY4LjI3MTU4LDEwMzguODQ2NSA3NjkuMTUzOCwxMDU3LjcwMTggQyA3NzAuMDM1NTUsMTA3Ni41NDcgNzc3LjI4NzQ5LDEwOTcuODAwOCA3OTYuNDk4NDMsMTEwNi42NzA3IEMgODE1LjkxNzMsMTExNS42MzY1IDg0NS44MTc2NywxMTE2Ljg4MiA4NzAuNjE4MjcsMTEwMy41MjUxIEMgODk1LjQxODg3LDEwOTAuMTY4MSA5MjguMDE5MjksMTAzMy4xOTk2IDk0MS41OTI1MywxMDA2LjIxNjQgQyA5NTUuMjE2MzgsOTc5LjEzMjQ2IDk4MC4zNTM2LDg5MS43MTkwMyA5ODYuMjUzMzMsODU2LjQ0NzgxIEMgOTkyLjE1MzA2LDgyMS4xNzY2IDk4OC44MDM4Nyw4MTUuMTQ3MDQgOTgxLjYzNTg1LDgwNy4zOTIzMiBDIDk4NC4yNzYxNSw3NzkuNTUyMTcgOTgwLjEzNjEzLDc1Mi40NTY4OSA5OTQuNzQ1NTQsNzIwLjIwNjE0IEMgOTY0LjQ5NjUzLDczMi4wMzE4NCA5NTcuMzYzMjUsNzYwLjM2Njg0IDk0Ni40MjY2NSw3ODUuNzExMjIgQyA5MzguNDI1NzQsNzM0Ljc3ODI5IDk0Ni42MzU4MSw3MTQuNDM4MDMgOTQ5Ljc0NTU0LDY4NC40OTE4NiBDIDkyMC42ODA3OCw2OTkuMjY5NzcgOTA2Ljg4NDAzLDczMS42MDU4OCA5MDQuNzQ1NTQsNzc3LjM0OSBDIDg5My44MjE1OSw3NzYuMDQ0OCA4ODMuMzU0MSw3NzIuOTE0NzcgODcxLjE3NDExLDc3Ni42MzQ3MSBDIDg3MC45MTAwNyw3MzAuNjExMzcgODY5LjcxMDU1LDY5OS43NDUzIDg4MC4wODQ3NCw2NjIuNDI4MjIgQyA4MjYuODI5MjcsNjgzLjQ1NTA4IDgxNy4xMzc0Niw3NjkuMDIyMzIgODI0LjAzMTI1LDc3NS4yMDYxNCBDIDgxMy4xNDg0Myw3NzUuNzQxMTQgODAyLjY2MDE3LDc3My45MDg4NCA3OTEuMTc0MTEsNzc4LjA2MzI5IEMgNzkxLjgxMzAzLDczNS40OTE5NCA3OTAuOTEzNjUsNjkzLjE1NDY4IDc2MS4xNzQxMSw2NTUuMjA2MTQgQyA3NjEuMTc0MTEsNjU1LjIwNjE0IDczMC4yMTYwNSw3MzYuMTI4NDggNzI5Ljc0NTU0LDc1OC43Nzc1NyBDIDcyOS4yNzUwMyw3ODEuNDI2NjYgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzkuMTk3MTMsNzk4Ljk0MzQ1IEMgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzAuNjI5MDYsODM1LjY4Mzk2IDczMi44OTg1NCw4NTcuMTc1NjggQyA3MzUuMTk0MzksODc4LjkxNzE0IDc1My4zNDE0NCw5MTYuODUxODUgNzYwLjE2Mzk2LDkzNS44MzM3NyB6IgorICAgICAgICAgaWQ9InBhdGgzNjMzIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjY1Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6emNjemNjIgorICAgICAgICAgaWQ9InBhdGgzNjY3IgorICAgICAgICAgZD0iTSAzNjYuODg4MzksNTA0LjEzNDcxIEMgMzY2Ljg4ODM5LDUwNC4xMzQ3MSAzMzcuMzM0MzMsNTQ0LjcwNzc2IDMxOS4wMzEyNSw1NzguNDIwNDIgQyAzMDAuNzI4MTYsNjEyLjEzMzA5IDI2MC40MTAxNiw3MDQuNzc3MzYgMjQ4LjY3NDExLDc0OS40OTE4NSBDIDIzNi45MTQ3MSw3OTQuMjk1MjkgMTg2LjE3NDExLDg3My4wNjMyOSAxODYuMTc0MTEsODczLjA2MzI5IEwgMjYyLjI0NTU0LDg5MS4yNzc1NyBDIDI2Mi4yNDU1NCw4OTEuMjc3NTcgMjc0LjA1MjY2LDg3OC40NTQyMiAyOTMuMzE2OTYsODQ1LjIwNjE0IEMgMzEyLjU4MTI2LDgxMS45NTgwNiAzNTMuNjc0MTEsNzA2LjYzNDcxIDM1My42NzQxMSw3MDYuNjM0NzEgTCAzNjYuODg4MzksNTA0LjEzNDcxIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzBmMGYwZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjc3Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSA1ODYuMTMyNzEsOTk3Ljk4OTgxIEMgNTkyLjkyNjgxLDEwMTYuODkyNiA1OTYuNjI2NCwxMDMxLjI4OTUgNTk4LjAyMzAxLDEwNDkuMjAxNyBDIDU5OS40MTk2MywxMDY3LjExNCA1OTQuMjQwMzMsMTEwMS4wMDI1IDU5NS4xMjI1NSwxMTE5Ljg1NzggQyA1OTYuMDA0MywxMTM4LjcwMyA2MDMuMjU2MjQsMTE1OS45NTY4IDYyMi40NjcxOCwxMTY4LjgyNjcgQyA2NDEuODg2MDUsMTE3Ny43OTI1IDY3MS43ODY0MiwxMTc5LjAzOCA2OTYuNTg3MDIsMTE2NS42ODExIEMgNzIxLjM4NzYyLDExNTIuMzI0MSA3NTMuOTg4MDQsMTA5NS4zNTU2IDc2Ny41NjEyOCwxMDY4LjM3MjQgQyA3ODEuMTg1MTMsMTA0MS4yODg1IDgwNi4zMjIzNSw5NTMuODc1MDcgODEyLjIyMjA4LDkxOC42MDM4NSBDIDgxOC4xMjE4MSw4ODMuMzMyNjQgODE0Ljc3MjYyLDg3Ny4zMDMwOCA4MDcuNjA0Niw4NjkuNTQ4MzYgQyA4MTAuMjQ0OSw4NDEuNzA4MjEgODA2LjEwNDg4LDgxNC42MTI5MyA4MjAuNzE0MjksNzgyLjM2MjE4IEMgNzkwLjQ2NTI4LDc5NC4xODc4OCA3ODMuMzMyLDgyMi41MjI4OCA3NzIuMzk1NCw4NDcuODY3MjYgQyA3NjQuMzk0NDksNzk2LjkzNDMzIDc3Mi42MDQ1Niw3NzYuNTk0MDcgNzc1LjcxNDI5LDc0Ni42NDc5IEMgNzQ2LjY0OTUzLDc2MS40MjU4MSA3MzIuODUyNzgsNzkzLjc2MTkyIDczMC43MTQyOSw4MzkuNTA1MDQgQyA3MTkuNzkwMzQsODM4LjIwMDg0IDcwOS4zMjI4NSw4MzUuMDcwODEgNjk3LjE0Mjg2LDgzOC43OTA3NSBDIDY5Ni44Nzg4Miw3OTIuNzY3NDEgNjk1LjY3OTMsNzYxLjkwMTM0IDcwNi4wNTM0OSw3MjQuNTg0MjYgQyA2NTIuNzk4MDIsNzQ1LjYxMTEyIDY0My4xMDYyMSw4MzEuMTc4MzYgNjUwLDgzNy4zNjIxOCBDIDYzOS4xMTcxOCw4MzcuODk3MTggNjI4LjYyODkyLDgzNi4wNjQ4OCA2MTcuMTQyODYsODQwLjIxOTMzIEMgNjE3Ljc4MTc4LDc5Ny42NDc5OCA2MTYuODgyNCw3NTUuMzEwNzIgNTg3LjE0Mjg2LDcxNy4zNjIxOCBDIDU4Ny4xNDI4Niw3MTcuMzYyMTggNTU2LjE4NDgsNzk4LjI4NDUyIDU1NS43MTQyOSw4MjAuOTMzNjEgQyA1NTUuMjQzNzgsODQzLjU4MjcgNTY1LjE2NTg4LDg2MS4wOTk0OSA1NjUuMTY1ODgsODYxLjA5OTQ5IEMgNTY1LjE2NTg4LDg2MS4wOTk0OSA1NTYuNTk3ODEsODk3Ljg0IDU1OC44NjcyOSw5MTkuMzMxNzIgQyA1NjEuMTYzMTQsOTQxLjA3MzE4IDU3OS4zMTAxOSw5NzkuMDA3ODkgNTg2LjEzMjcxLDk5Ny45ODk4MSB6IgorICAgICAgICAgaWQ9InBhdGgzNjc5IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXIzODk4Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxMC44OTI5ODUiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIzOTAwIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjQxMzAiCisgICAgICAgeD0iLTAuNDk1MDk2ODYiCisgICAgICAgd2lkdGg9IjEuOTkwMTkzNyIKKyAgICAgICB5PSItMC4yNjcwODgxNyIKKyAgICAgICBoZWlnaHQ9IjEuNTM0MTc2MyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTAuNzMwNjIyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDEzMiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MTQxIgorICAgICAgIHg9Ii0wLjQwNjExMDMyIgorICAgICAgIHdpZHRoPSIxLjgxMjIyMDYiCisgICAgICAgeT0iLTAuMzAyNjA1OTYiCisgICAgICAgaGVpZ2h0PSIxLjYwNTIxMTkiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjkuODU4NjA4NiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQxNDMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoNDE3NyI+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiCisgICAgICAgICBpZD0icGF0aDQxNzkiCisgICAgICAgICBkPSJNIDU4Ni4xMzI3MSw5OTcuOTg5ODEgQyA1OTIuOTI2ODEsMTAxNi44OTI2IDU5Ni42MjY0LDEwMzEuMjg5NSA1OTguMDIzMDEsMTA0OS4yMDE3IEMgNTk5LjQxOTYzLDEwNjcuMTE0IDU5NC4yNDAzMywxMTAxLjAwMjUgNTk1LjEyMjU1LDExMTkuODU3OCBDIDU5Ni4wMDQzLDExMzguNzAzIDYwMy4yNTYyNCwxMTU5Ljk1NjggNjIyLjQ2NzE4LDExNjguODI2NyBDIDY0MS44ODYwNSwxMTc3Ljc5MjUgNjcxLjc4NjQyLDExNzkuMDM4IDY5Ni41ODcwMiwxMTY1LjY4MTEgQyA3MjEuMzg3NjIsMTE1Mi4zMjQxIDc1My45ODgwNCwxMDk1LjM1NTYgNzY3LjU2MTI4LDEwNjguMzcyNCBDIDc4MS4xODUxMywxMDQxLjI4ODUgODA2LjMyMjM1LDk1My44NzUwNyA4MTIuMjIyMDgsOTE4LjYwMzg1IEMgODE4LjEyMTgxLDg4My4zMzI2NCA4MTQuNzcyNjIsODc3LjMwMzA4IDgwNy42MDQ2LDg2OS41NDgzNiBDIDgxMC4yNDQ5LDg0MS43MDgyMSA4MDYuMTA0ODgsODE0LjYxMjkzIDgyMC43MTQyOSw3ODIuMzYyMTggQyA3OTAuNDY1MjgsNzk0LjE4Nzg4IDc4My4zMzIsODIyLjUyMjg4IDc3Mi4zOTU0LDg0Ny44NjcyNiBDIDc2NC4zOTQ0OSw3OTYuOTM0MzMgNzcyLjYwNDU2LDc3Ni41OTQwNyA3NzUuNzE0MjksNzQ2LjY0NzkgQyA3NDYuNjQ5NTMsNzYxLjQyNTgxIDczMi44NTI3OCw3OTMuNzYxOTIgNzMwLjcxNDI5LDgzOS41MDUwNCBDIDcxOS43OTAzNCw4MzguMjAwODQgNzA5LjMyMjg1LDgzNS4wNzA4MSA2OTcuMTQyODYsODM4Ljc5MDc1IEMgNjk2Ljg3ODgyLDc5Mi43Njc0MSA2OTUuNjc5Myw3NjEuOTAxMzQgNzA2LjA1MzQ5LDcyNC41ODQyNiBDIDY1Mi43OTgwMiw3NDUuNjExMTIgNjQzLjEwNjIxLDgzMS4xNzgzNiA2NTAsODM3LjM2MjE4IEMgNjM5LjExNzE4LDgzNy44OTcxOCA2MjguNjI4OTIsODM2LjA2NDg4IDYxNy4xNDI4Niw4NDAuMjE5MzMgQyA2MTcuNzgxNzgsNzk3LjY0Nzk4IDYxNi44ODI0LDc1NS4zMTA3MiA1ODcuMTQyODYsNzE3LjM2MjE4IEMgNTg3LjE0Mjg2LDcxNy4zNjIxOCA1NTYuMTg0OCw3OTguMjg0NTIgNTU1LjcxNDI5LDgyMC45MzM2MSBDIDU1NS4yNDM3OCw4NDMuNTgyNyA1NjUuMTY1ODgsODYxLjA5OTQ5IDU2NS4xNjU4OCw4NjEuMDk5NDkgQyA1NjUuMTY1ODgsODYxLjA5OTQ5IDU1Ni41OTc4MSw4OTcuODQgNTU4Ljg2NzI5LDkxOS4zMzE3MiBDIDU2MS4xNjMxNCw5NDEuMDczMTggNTc5LjMxMDE5LDk3OS4wMDc4OSA1ODYuMTMyNzEsOTk3Ljk4OTgxIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNDE4NSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMy42MTY0NzA5IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDE4NyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MTA1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIzLjg2NDA5NjYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MTA3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDI4MzMiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMjkyOTI5O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIGQ9Ik0gNTY5LjAzMTI1LDEwMTguNzc3NiBDIDU2NC43NDU1NCwxMDE5LjQ5MTkgNTQxLjQwMzEsMTAyMi4zOTU3IDUxMS4xNzQxMSwxMDI4Ljc3NzYgQyA0ODAuOTQ1MTIsMTAzNS4xNTk1IDQ1My44NjAxNiwxMDMzLjc0MzcgMzc1LjM4ODAzLDEwNDYuMTA3MiBDIDI5NS41MzYyNSwxMDU4LjY4OCAyODEuMzIzNjcsMTA4OC42NDk1IDI2Ny4yNjU3OCwxMDkzLjE3MTUgQyAyNTIuNTY1NjQsMTA5Ny45MDAxIDEyMS44ODgzOSwxMDI3LjM0OSAxMjEuODg4MzksMTAyNy4zNDkgTCAxMjYuMTc0MTEsOTMzLjA2MzI5IEMgMTI2LjE3NDExLDkzMy4wNjMyOSAyMTIuMDU5NjIsOTE2Ljg2MjM1IDIzOC4zMTY5Niw4OTkuNDkxODYgQyAyNjQuNTc0MzEsODgyLjEyMTM3IDI4My44OTkzNCw4NDkuODI1ODggMjk3LjYwMjY4LDgyOC4wNjMyOSBDIDMxMS4zMDYwMiw4MDYuMzAwNyAzMzAuNDU5ODIsNzU2LjYzNDcxIDMzMC40NTk4Miw3NTYuNjM0NzEgTCA1NjkuMDMxMjUsMTAxOC43Nzc2IHoiCisgICAgICAgICBpZD0icGF0aDI4MzUiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjY3p6Y2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mjg0MyIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODQxIgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIHgxPSIzNDcuODk2NTUiCisgICAgICAgeTE9IjEwNzAuMjEyNCIKKyAgICAgICB4Mj0iMjc1LjU4MTkxIgorICAgICAgIHkyPSI4NjcuOTc5OTIiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2MjciCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICB4MT0iNjk5LjMyODY3IgorICAgICAgIHkxPSIyNjkuNzY3NTUiCisgICAgICAgeDI9IjY5OC45NzUwNCIKKyAgICAgICB5Mj0iMzQ2LjEzNTEiIC8+CisgICAgPG1hc2sKKyAgICAgICBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJtYXNrMzY4NCI+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNjg4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC40MzcyNDkxOHB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBpZD0icGF0aDM2ODYiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNTc5LjQ3NCIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSIyNjAuNTc1MTYiCisgICAgICAgICBzb2RpcG9kaTpyeD0iMTkyLjY4NjYiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMTY0LjA0ODc3IgorICAgICAgICAgZD0iTSA3NzIuMTYwNiwyNjAuNTc1MTYgQSAxOTIuNjg2NiwxNjQuMDQ4NzcgMCAxIDEgMzg2Ljc4NzQsMjYwLjU3NTE2IEEgMTkyLjY4NjYsMTY0LjA0ODc3IDAgMSAxIDc3Mi4xNjA2LDI2MC41NzUxNiB6IgorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE3NC4wMzEyNSw2Mi4xNTYwMzYpIiAvPgorICAgIDwvbWFzaz4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjIyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSAyNjYuMjcxODMsOTI0LjU3MTg2IEMgMjY0Ljg2NDU2LDk0My4zNzMwNyAyNjUuMTI2OTMsOTU3LjMyMjg5IDI2OC4zNTM1Nyw5NzMuODc1MTQgQyAyNzEuNTgwMjIsOTkwLjQyNzQ4IDI4NC43NTk2NSwxMDE5Ljc4MjUgMjg4LjY4Nzk3LDEwMzcuMDU4OSBDIDI5Mi42MTQxOSwxMDU0LjMyNiAyOTEuMzgyMSwxMDc1LjM2ODUgMjc2LjIyODUzLDEwODguMjA3MSBDIDI2MC45MTA5MiwxMTAxLjE4NDUgMjM0LjE3NzI2LDExMDkuODA2IDIwOC4zOTYyMywxMTAzLjk0MDkgQyAxODIuNjE1MTcsMTA5OC4wNzU2IDEzOC44NDcxNiwxMDU0LjcxNzUgMTE5LjgwNjA0LDEwMzMuNzEyNiBDIDEwMC42OTM5LDEwMTIuNjI5MyA1Ni4wNDUxODMsOTM5Ljg2MTk0IDQxLjg2NzUwOCw5MDkuNDM2ODEgQyAyNy42ODk4MzYsODc5LjAxMTY5IDI5LjIwNzkwMyw4NzIuNzE4MjQgMzMuNzQ3NzkzLDg2My45MDcwOCBDIDI0LjM4MTA3MSw4MzkuMzg2NTggMjEuMzM0MDgxLDgxMy44NDAyNyAwLjAzNTMzNTUxOCw3ODguMzMwNDQgQyAzMC4zNjA4MTUsNzkxLjQ0NDg4IDQzLjkxNTYyNSw4MTUuMjg2NzcgNjAuMTYxMDI1LDgzNS40NzAxOSBDIDU0LjYzMTEyOSw3ODcuMzk0MTYgNDIuMTA2MzEsNzcxLjA1MzY5IDMxLjc4NzA3Myw3NDQuNzQ1ODkgQyA2MS43ODEzNjgsNzUwLjgyNzU1IDgyLjM2NjQzMyw3NzYuNjE4MjkgOTUuNzY2ODU2LDgxNy40NTgzOSBDIDEwNS4zMjEwMSw4MTMuNTQwNDggMTE0LjAwNDYyLDgwOC4wODU0NSAxMjUuOTU0MjcsODA4LjM5NzE5IEMgMTE0LjY1Njc3LDc2Ni43MDEzOSAxMDguMDA0ODEsNzM4LjQ4MTM1IDg5LjI2NzAxNSw3MDcuMzI3MjUgQyAxNDIuNzA4OTgsNzEyLjk5NzU4IDE3Mi45MjQwNCw3ODcuOTY2NTcgMTY4LjIzODQ0LDc5NS4yODgwNSBDIDE3OC4yMTY0MSw3OTMuMDQ0MDYgMTg3LjI0NDA5LDc4OC43NTc2NyAxOTguNjc0OTcsNzg5LjYzNjM4IEMgMTg3LjQyNjAxLDc1MS4yODkzNiAxNzcuNjI3MTYsNzEyLjc2ODQ4IDE5NS4wMTUyNiw2NzAuOTg4MiBDIDE5NS4wMTUyNiw2NzAuOTg4MiAyNDMuMzAyMDQsNzM2LjQyNTA3IDI0OS40MDQ5Miw3NTYuNzkzOTcgQyAyNTUuNTA3NzksNzc3LjE2Mjg4IDI1MC45MjM3Myw3OTUuNDk0NDkgMjUwLjkyMzczLDc5NS40OTQ0OSBDIDI1MC45MjM3Myw3OTUuNDk0NDkgMjY3Ljg4MzMsODI2LjU3OTc4IDI3MS4yMTc2NSw4NDYuNTg4NjIgQyAyNzQuNTkwNzUsODY2LjgyOTk3IDI2Ny42ODQ5Niw5MDUuNjkxOTQgMjY2LjI3MTgzLDkyNC41NzE4NiB6IgorICAgICAgICAgaWQ9InBhdGgzNjI0IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNjM2Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgZD0iTSA3NjAuMTYzOTYsOTM1LjgzMzc3IEMgNzY2Ljk1ODA2LDk1NC43MzY1NiA3NzAuNjU3NjUsOTY5LjEzMzQ2IDc3Mi4wNTQyNiw5ODcuMDQ1NjYgQyA3NzMuNDUwODgsMTAwNC45NTggNzY4LjI3MTU4LDEwMzguODQ2NSA3NjkuMTUzOCwxMDU3LjcwMTggQyA3NzAuMDM1NTUsMTA3Ni41NDcgNzc3LjI4NzQ5LDEwOTcuODAwOCA3OTYuNDk4NDMsMTEwNi42NzA3IEMgODE1LjkxNzMsMTExNS42MzY1IDg0NS44MTc2NywxMTE2Ljg4MiA4NzAuNjE4MjcsMTEwMy41MjUxIEMgODk1LjQxODg3LDEwOTAuMTY4MSA5MjguMDE5MjksMTAzMy4xOTk2IDk0MS41OTI1MywxMDA2LjIxNjQgQyA5NTUuMjE2MzgsOTc5LjEzMjQ2IDk4MC4zNTM2LDg5MS43MTkwMyA5ODYuMjUzMzMsODU2LjQ0NzgxIEMgOTkyLjE1MzA2LDgyMS4xNzY2IDk4OC44MDM4Nyw4MTUuMTQ3MDQgOTgxLjYzNTg1LDgwNy4zOTIzMiBDIDk4NC4yNzYxNSw3NzkuNTUyMTcgOTgwLjEzNjEzLDc1Mi40NTY4OSA5OTQuNzQ1NTQsNzIwLjIwNjE0IEMgOTY0LjQ5NjUzLDczMi4wMzE4NCA5NTcuMzYzMjUsNzYwLjM2Njg0IDk0Ni40MjY2NSw3ODUuNzExMjIgQyA5MzguNDI1NzQsNzM0Ljc3ODI5IDk0Ni42MzU4MSw3MTQuNDM4MDMgOTQ5Ljc0NTU0LDY4NC40OTE4NiBDIDkyMC42ODA3OCw2OTkuMjY5NzcgOTA2Ljg4NDAzLDczMS42MDU4OCA5MDQuNzQ1NTQsNzc3LjM0OSBDIDg5My44MjE1OSw3NzYuMDQ0OCA4ODMuMzU0MSw3NzIuOTE0NzcgODcxLjE3NDExLDc3Ni42MzQ3MSBDIDg3MC45MTAwNyw3MzAuNjExMzcgODY5LjcxMDU1LDY5OS43NDUzIDg4MC4wODQ3NCw2NjIuNDI4MjIgQyA4MjYuODI5MjcsNjgzLjQ1NTA4IDgxNy4xMzc0Niw3NjkuMDIyMzIgODI0LjAzMTI1LDc3NS4yMDYxNCBDIDgxMy4xNDg0Myw3NzUuNzQxMTQgODAyLjY2MDE3LDc3My45MDg4NCA3OTEuMTc0MTEsNzc4LjA2MzI5IEMgNzkxLjgxMzAzLDczNS40OTE5NCA3OTAuOTEzNjUsNjkzLjE1NDY4IDc2MS4xNzQxMSw2NTUuMjA2MTQgQyA3NjEuMTc0MTEsNjU1LjIwNjE0IDczMC4yMTYwNSw3MzYuMTI4NDggNzI5Ljc0NTU0LDc1OC43Nzc1NyBDIDcyOS4yNzUwMyw3ODEuNDI2NjYgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzkuMTk3MTMsNzk4Ljk0MzQ1IEMgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzAuNjI5MDYsODM1LjY4Mzk2IDczMi44OTg1NCw4NTcuMTc1NjggQyA3MzUuMTk0MzksODc4LjkxNzE0IDc1My4zNDE0NCw5MTYuODUxODUgNzYwLjE2Mzk2LDkzNS44MzM3NyB6IgorICAgICAgICAgaWQ9InBhdGgzNjM4IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY2MCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjY2IgorICAgICAgIHgxPSIxMjU1LjczODYiCisgICAgICAgeTE9IjY2Ny4wOTIxNiIKKyAgICAgICB4Mj0iODkzLjY5OTk1IgorICAgICAgIHkyPSI4NTguMDEwOTkiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzc3OSIKKyAgICAgICB4PSItMC4wODc5ODA4MjIiCisgICAgICAgd2lkdGg9IjEuMTc1OTYxNiIKKyAgICAgICB5PSItMC4xNzcyODMzMiIKKyAgICAgICBoZWlnaHQ9IjEuMzU0NTY2NiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMTYuMzQwMzQ0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzc4MSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaWQ9ImZpbHRlcjM3ODUiCisgICAgICAgaW5rc2NhcGU6bGFiZWw9IldoaXRlIEZ1ciI+CisgICAgICA8ZmVUdXJidWxlbmNlCisgICAgICAgICBpZD0iZmVUdXJidWxlbmNlMzc4NyIKKyAgICAgICAgIGluPSJTb3VyY2VBbHBoYSIKKyAgICAgICAgIHR5cGU9ImZyYWN0YWxOb2lzZSIKKyAgICAgICAgIGJhc2VGcmVxdWVuY3k9IjAuMjQwNDQ5NDM4MjAyMjQ3MjEiCisgICAgICAgICBudW1PY3RhdmVzPSIxMCIKKyAgICAgICAgIHNlZWQ9IjY1NSIKKyAgICAgICAgIHJlc3VsdD0icmVzdWx0MCIgLz4KKyAgICAgIDxmZURpc3BsYWNlbWVudE1hcAorICAgICAgICAgaWQ9ImZlRGlzcGxhY2VtZW50TWFwMzc4OSIKKyAgICAgICAgIGluPSJTb3VyY2VHcmFwaGljIgorICAgICAgICAgaW4yPSJyZXN1bHQwIgorICAgICAgICAgc2NhbGU9IjYyIgorICAgICAgICAgeENoYW5uZWxTZWxlY3Rvcj0iQiIKKyAgICAgICAgIHlDaGFubmVsU2VsZWN0b3I9IkciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzY3NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMi4wMzk3NTE4IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzY3OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzNzIyIj4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzEyMTIxMjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDcwOS4yODU3Miw4NDQuNTA1MDQgQyA3NjMuNTcxNDMsODQzLjA3NjQ3IDgzNS4zMjA3Miw4MjkuNDUzMDUgODc5LjI4NTcyLDgxNy43MTkzMiBDIDkyMy4zMzg0Myw4MDUuOTYyMTggMTAwNS4xNzIsNzgxLjM3MjA4IDEwNTQuNjQyOCw3NTkuODYyMTggQyAxMTAzLjk4MjEsNzM4LjQwOTQ2IDExNjguMjQ2NSw3MDAuNTgwNTggMTIwOC45Mjg2LDY2Ny43MTkzMyBDIDEyNDkuNDM2Nyw2MzQuOTk4NjQgMTI2MS4zMTg1LDYxMS44OTk1MiAxMjY5LjY0MjksNjM0LjE0NzkgQyAxMjc4LjAxMiw2NTYuNTE1NjkgMTI1My4yMzU5LDY5MC40NzM1MiAxMjMxLjc4NTcsNzE1LjIxOTMzIEMgMTIxMC4xODE2LDc0MC4xNDI3MyAxMTc5LjA1NDQsNzY3LjkyNDY2IDExMzIuODU3MSw4MDQuNTA1MDQgQyAxMDg2LjY1OTgsODQxLjA4NTQyIDk3Ni43NzQ1OCw5MDYuMDg5NjcgOTIwLDkzMy4wNzY0NyBDIDg2Mi45MzM5NCw5NjAuMjAxODMgNzkxLjc5NjY2LDk5MS4zMTQ4OSA3NDcuODU3MTQsMTAwNS41NzY1IEMgNzAzLjkxNzYyLDEwMTkuODM4MSA2MTYuNDI4NTcsMTAzNi42NDc5IDYxNi40Mjg1NywxMDM2LjY0NzkgTCA3MDkuMjg1NzIsODQ0LjUwNTA0IHoiCisgICAgICAgICBpZD0icGF0aDM3MjQiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enp6emNjIiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoMzk4NiI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMxMjEyMTI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgZD0iTSA3MDkuMjg1NzIsODQ0LjUwNTA0IEMgNzYzLjU3MTQzLDg0My4wNzY0NyA4MzUuMzIwNzIsODI5LjQ1MzA1IDg3OS4yODU3Miw4MTcuNzE5MzIgQyA5MjMuMzM4NDMsODA1Ljk2MjE4IDEwMDUuMTcyLDc4MS4zNzIwOCAxMDU0LjY0MjgsNzU5Ljg2MjE4IEMgMTEwMy45ODIxLDczOC40MDk0NiAxMTY4LjI0NjUsNzAwLjU4MDU4IDEyMDguOTI4Niw2NjcuNzE5MzMgQyAxMjQ5LjQzNjcsNjM0Ljk5ODY0IDEyNjEuMzE4NSw2MTEuODk5NTIgMTI2OS42NDI5LDYzNC4xNDc5IEMgMTI3OC4wMTIsNjU2LjUxNTY5IDEyNTMuMjM1OSw2OTAuNDczNTIgMTIzMS43ODU3LDcxNS4yMTkzMyBDIDEyMTAuMTgxNiw3NDAuMTQyNzMgMTE3OS4wNTQ0LDc2Ny45MjQ2NiAxMTMyLjg1NzEsODA0LjUwNTA0IEMgMTA4Ni42NTk4LDg0MS4wODU0MiA5NzYuNzc0NTgsOTA2LjA4OTY3IDkyMCw5MzMuMDc2NDcgQyA4NjIuOTMzOTQsOTYwLjIwMTgzIDc5MS43OTY2Niw5OTEuMzE0ODkgNzQ3Ljg1NzE0LDEwMDUuNTc2NSBDIDcwMy45MTc2MiwxMDE5LjgzODEgNjE2LjQyODU3LDEwMzYuNjQ3OSA2MTYuNDI4NTcsMTAzNi42NDc5IEwgNzA5LjI4NTcyLDg0NC41MDUwNCB6IgorICAgICAgICAgaWQ9InBhdGgzOTg4IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6enpjYyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDM5OTIiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMTIxMjEyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIGQ9Ik0gNzA5LjI4NTcyLDg0NC41MDUwNCBDIDc2My41NzE0Myw4NDMuMDc2NDcgODM1LjMyMDcyLDgyOS40NTMwNSA4NzkuMjg1NzIsODE3LjcxOTMyIEMgOTIzLjMzODQzLDgwNS45NjIxOCAxMDA1LjE3Miw3ODEuMzcyMDggMTA1NC42NDI4LDc1OS44NjIxOCBDIDExMDMuOTgyMSw3MzguNDA5NDYgMTE2OC4yNDY1LDcwMC41ODA1OCAxMjA4LjkyODYsNjY3LjcxOTMzIEMgMTI0OS40MzY3LDYzNC45OTg2NCAxMjYxLjMxODUsNjExLjg5OTUyIDEyNjkuNjQyOSw2MzQuMTQ3OSBDIDEyNzguMDEyLDY1Ni41MTU2OSAxMjUzLjIzNTksNjkwLjQ3MzUyIDEyMzEuNzg1Nyw3MTUuMjE5MzMgQyAxMjEwLjE4MTYsNzQwLjE0MjczIDExNzkuMDU0NCw3NjcuOTI0NjYgMTEzMi44NTcxLDgwNC41MDUwNCBDIDEwODYuNjU5OCw4NDEuMDg1NDIgOTc2Ljc3NDU4LDkwNi4wODk2NyA5MjAsOTMzLjA3NjQ3IEMgODYyLjkzMzk0LDk2MC4yMDE4MyA3OTEuNzk2NjYsOTkxLjMxNDg5IDc0Ny44NTcxNCwxMDA1LjU3NjUgQyA3MDMuOTE3NjIsMTAxOS44MzgxIDYxNi40Mjg1NywxMDM2LjY0NzkgNjE2LjQyODU3LDEwMzYuNjQ3OSBMIDcwOS4yODU3Miw4NDQuNTA1MDQgeiIKKyAgICAgICAgIGlkPSJwYXRoMzk5NCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6Y2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGgzOTk4Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzI2MmYyZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBkPSJNIDE3OC4yMTQyOCwyNzQuMTQ3ODkgQyAxNzQuNDA5ODUsMjQ4Ljg4MzY2IDE2MS40MDQ1NiwyMjMuNTA5ODcgMTYxLjA1NzQ4LDE5OC42MjI2NiBDIDE2MC44NzEyMiwxODUuMjY3MTQgMTY0LjMzMDMzLDE3Mi4wNTE3NSAxNzQuODEzMDEsMTU5LjA2ODYxIEMgMjExLjE2MDAzLDkzLjc3Mjc3NSAyOTEuNzUzOTIsNzQuMzczOTI1IDM2MC43NDc2Nyw2Ny42MDMxODMgQyA0NDcuNjcwMDYsNTYuNTg2MzgyIDU0NS42NjAzNCw4NS41NDMyNTUgNTk0LjExOTAxLDE2My4wMDQ0NyBDIDY0OC4yNDMwMywyMzguNzM3NzcgNjUwLjc5Mzc3LDMzNS41NDM1OSA2NzQuNzMxMDUsNDIyLjUzMjQyIEMgNzA0LjE2ODg0LDU0OS42NjAwMiA3MjkuNTEwMTksNjc4Ljc0NjU2IDczNS4xMjMyOSw4MDkuMzgyNzcgQyA3MzIuMDU5ODEsODg3LjU2NDYyIDcyNi42OTY5NSw5NzQuNTY2OTIgNjc0LjYyMDA4LDEwMzcuNTE2OSBDIDYyNi41OTM1NCwxMDg3Ljg3NDMgNTUxLjgzMzYxLDEwODcuNTY5OSA0ODcuNTUwMiwxMDk2LjUxOTIgQyAzOTYuOTk0ODEsMTEwMS4xNzQyIDMwMy4xOTg2NywxMDgwLjM3MzQgMjI1Ljc2NjMsMTAzMi4zMjEgQyAxNjAuOTkwNjYsOTk0LjM4MDk5IDEzMC4wMzYxMSw5MTguODQyMzcgMTI4LjQ4NjksODQ2LjMwMTQyIEMgMTIwLjA5NzczLDc2Ni40MjYyNiAxNTQuODc4NDIsNjkyLjQ5MjkxIDE4MC4xMDczLDYxOS4xNDE4MSBDIDE4Ny41Nzc5MSw1MzYuMzgwNzQgMTg5LjUyMDE2LDQ1Mi44OTQwNiAxODkuNzYwNjQsMzY5Ljc1Njk3IEMgMTg4LjkyMzgyLDMzNy41NjE1MyAxODIuNjcxMTEsMzA1LjkzOTY0IDE3OC4yMTQyOCwyNzQuMTQ3ODkgeiIKKyAgICAgICAgIGlkPSJwYXRoNDAwMCIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY2NjY2NjY2NjY2MiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MDAyIgorICAgICAgIHg9Ii0wLjI0MzM0MjM4IgorICAgICAgIHdpZHRoPSIxLjQ4NjY4NDgiCisgICAgICAgeT0iLTAuMzkxMDQ4MDciCisgICAgICAgaGVpZ2h0PSIxLjc4MjA5NjEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjE0LjU4OTUxOCIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQwMDQiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNDAxMCIKKyAgICAgICB4PSItMC4xNDU3NzI2MSIKKyAgICAgICB3aWR0aD0iMS4yOTE1NDUyIgorICAgICAgIHk9Ii0wLjIzNTIzMjU5IgorICAgICAgIGhlaWdodD0iMS40NzA0NjUyIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSI0LjQ0NDI5MDciCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MDEyIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjQwNTMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjAuNjA2Mjk0NyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQwNTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNDA3OSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNi41ODg3NjI0IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDA4MSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI0MDgzIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjUwNTIwNjYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MDg1IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0MTEzIgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDQxMTkiCisgICAgICAgY3g9IjI5Ni4zMzc4MyIKKyAgICAgICBjeT0iNDI3LjE3NzQ5IgorICAgICAgIGZ4PSIyOTYuMzM3ODMiCisgICAgICAgZnk9IjQyNy4xNzc0OSIKKyAgICAgICByPSIxOS43MDQxMzIiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjk3OTcxMjUsMCwwLDIuOTc5NzEyNSwtNTk5LjI4NzI3LC04MjcuMDg1NSkiIC8+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk0OSIKKyAgICAgICB4PSItMC4xMDI5NDg5NSIKKyAgICAgICB3aWR0aD0iMS4yMDU4OTc5IgorICAgICAgIHk9Ii0wLjM0MjI0Njk1IgorICAgICAgIGhlaWdodD0iMS42ODQ0OTM5Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTUxIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjY5NTMiCisgICAgICAgeD0iLTAuMDk4MzIwOTQ2IgorICAgICAgIHdpZHRoPSIxLjE5NjY0MTkiCisgICAgICAgeT0iLTAuMTk3NTA4MTYiCisgICAgICAgaGVpZ2h0PSIxLjM5NTAxNjMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5NTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk1NyIKKyAgICAgICB4PSItMC4wOTgyMTM0MjciCisgICAgICAgd2lkdGg9IjEuMTk2NDI2NyIKKyAgICAgICB5PSItMC4xOTgzODIwOCIKKyAgICAgICBoZWlnaHQ9IjEuMzk2NzY0MiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk1OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTYxIgorICAgICAgIHg9Ii0wLjA5OTE5MTA0IgorICAgICAgIHdpZHRoPSIxLjE5ODM4MjEiCisgICAgICAgeT0iLTAuMjI2NDM2MTEiCisgICAgICAgaGVpZ2h0PSIxLjQ1Mjg3MjIiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5NjMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk2NSIKKyAgICAgICB4PSItMC4wOTkwODE0MzQiCisgICAgICAgd2lkdGg9IjEuMTk4MTYyOSIKKyAgICAgICB5PSItMC4yMjUyOTgyNCIKKyAgICAgICBoZWlnaHQ9IjEuNDUwNTk2NSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk2NyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTY5IgorICAgICAgIHg9Ii0wLjEwNDUwODk3IgorICAgICAgIHdpZHRoPSIxLjIwOTAxNzkiCisgICAgICAgeT0iLTAuNDA0Njg4ODYiCisgICAgICAgaGVpZ2h0PSIxLjgwOTM3NzciPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5NzEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk3MyIKKyAgICAgICB4PSItMC4xMDMzMDQ5NSIKKyAgICAgICB3aWR0aD0iMS4yMDY2MDk4IgorICAgICAgIHk9Ii0wLjM2NDM5NzE3IgorICAgICAgIGhlaWdodD0iMS43Mjg3OTQ1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTc1IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjY5NzciCisgICAgICAgeD0iLTAuMTAyMjQ0ODEiCisgICAgICAgd2lkdGg9IjEuMjA0NDg5NiIKKyAgICAgICB5PSItMC4zMjM3MTM3MiIKKyAgICAgICBoZWlnaHQ9IjEuNjQ3NDI3NCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk3OSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTgxIgorICAgICAgIHg9Ii0wLjEwMDUyNTQ1IgorICAgICAgIHdpZHRoPSIxLjIwMTA1MDkiCisgICAgICAgeT0iLTAuMjc0MjE2MiIKKyAgICAgICBoZWlnaHQ9IjEuNTQ4NDMyNCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk4MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTg1IgorICAgICAgIHg9Ii0wLjA5ODQyODg2OCIKKyAgICAgICB3aWR0aD0iMS4xOTY4NTc3IgorICAgICAgIHk9Ii0wLjIwODUzMTg2IgorICAgICAgIGhlaWdodD0iMS40MTcwNjM3Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTg3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjY5ODkiCisgICAgICAgeD0iLTAuMDk4NDI4ODY4IgorICAgICAgIHdpZHRoPSIxLjE5Njg1NzciCisgICAgICAgeT0iLTAuMjAyODcwMzUiCisgICAgICAgaGVpZ2h0PSIxLjQwNTc0MDciPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjY5OTEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNjk5MyIKKyAgICAgICB4PSItMC4wOTgyMTMyNTUiCisgICAgICAgd2lkdGg9IjEuMTk2NDI2NSIKKyAgICAgICB5PSItMC4xOTgzODIwOCIKKyAgICAgICBoZWlnaHQ9IjEuMzk2NzY0MiI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4xNjc1NjEyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNjk5NSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI2OTk3Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjE2NzU2MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2OTk5IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjcwMDEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMTY3NTYxMiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcwMDMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI4NSIKKyAgICAgICB4PSItMC4wMzA4ODQ2ODUiCisgICAgICAgd2lkdGg9IjEuMDYxNzY5NCIKKyAgICAgICB5PSItMC4xMDI2NzQwOCIKKyAgICAgICBoZWlnaHQ9IjEuMjA1MzQ4MyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyODciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI4OSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyOTEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI5MyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyOTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzI5NyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjcyOTkiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMwMSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMDMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMwNSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMDciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMwOSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMTEiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMxMyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMTUiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMxNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMTkiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMyMSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMjMiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMyNSIKKyAgICAgICB4PSItMC4wMzEzNTI2OTEiCisgICAgICAgd2lkdGg9IjEuMDYyNzA1NCIKKyAgICAgICB5PSItMC4xMjE0MDY2NiIKKyAgICAgICBoZWlnaHQ9IjEuMjQyODEzMyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zNTAyNjgzNiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjczMjciIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzMyOSIKKyAgICAgICB4PSItMC4wMzA5OTE0ODUiCisgICAgICAgd2lkdGg9IjEuMDYxOTgzIgorICAgICAgIHk9Ii0wLjEwOTMxOTE2IgorICAgICAgIGhlaWdodD0iMS4yMTg2MzgzIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjM1MDI2ODM2IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNzMzMSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI3MzMzIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjM1MDI2ODM2IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNzMzNSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI3MzM3Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjM1MDI2ODM2IgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNzMzOSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI3MzQ1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjcyMzM4MzkiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI3MzQ3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDc0MjEiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOm9mZnNldCIKKyAgICAgICAgIGlua3NjYXBlOnJhZGl1cz0iMCIKKyAgICAgICAgIGlua3NjYXBlOm9yaWdpbmFsPSJNIDExMTEuNDA2MiAtMjg1LjkzNzUgTCAxMTA3LjQ2ODggLTI4NC4wNjI1IEMgMTEwNy40MjgzIC0yODQuMDUyMjggMTEwNy4zNjkyIC0yODQuMDQyMDEgMTEwNy4zNDM4IC0yODQuMDMxMjUgQyAxMTA2LjkyNSAtMjgzLjgxODQgMTEwNy4xNzkxIC0yODMuOTMwNjcgMTEwNi42ODc1IC0yODMuNzE4NzUgQyAxMTA2LjIwMTQgLTI4My41MDkxOSAxMTA0Ljk0OTkgLTI4My4xMzQ1NiAxMTAyLjU5MzggLTI4Mi4yNSBDIDEwOTkuMjYyNiAtMjgwLjk5OTQyIDEwOTYuNzg5NSAtMjgwLjEwMDE2IDEwOTUuNTkzOCAtMjc5LjE4NzUgQyAxMDk0LjA1NzYgLTI3OS4xNjYyMyAxMDkxLjg3MzMgLTI3OC45NTQxOSAxMDg5LjkzNzUgLTI3OC40Njg3NSBDIDEwODYuOTU2IC0yNzcuNzIxMDggMTA4NS4wODIzIC0yNzcuMjk0NzQgMTA4My4xODc1IC0yNzYuODc1IEMgMTA4MS4yOTI3IC0yNzYuNDU1MjcgMTA4MS41MTIgLTI3Ni4yMzI4MSAxMDgwLjMxMjUgLTI3NiBDIDEwNzkuMDE1OSAtMjc1Ljc0ODMzIDEwNzguNTkxMSAtMjc2LjAwODk5IDEwNzQuODc1IC0yNzUuMjE4NzUgQyAxMDcxLjM4NTEgLTI3NC40NzY2IDEwNjUuOTgwMiAtMjczLjI4NzY4IDEwNjQuNzE4OCAtMjcyLjUzMTI1IEMgMTA2My4xMzQ4IC0yNzIuNzEyMDMgMTA2MC44NTEzIC0yNzIuODUzMDMgMTA1OC44NzUgLTI3Mi41NjI1IEMgMTA1NS44MzQ2IC0yNzIuMTE1NTQgMTA1My45NTg4IC0yNzEuODg5NzQgMTA1Mi4wMzEyIC0yNzEuNjU2MjUgQyAxMDUxLjM3NTggLTI3MS41NzY4NyAxMDUwLjk5MDIgLTI3MS40NTU0NyAxMDUwLjY4NzUgLTI3MS4zNzUgQyAxMDUwLjI2MTMgLTI3MS4yNDMzNCAxMDUwLjAwMTcgLTI3MS4xMTQ5OCAxMDQ5LjMxMjUgLTI3MS4wMzEyNSBDIDEwNDguMDAwOSAtMjcwLjg3MTg4IDEwNDcuNTUwMyAtMjcxLjE4ODA4IDEwNDMuNzgxMiAtMjcwLjc1IEMgMTA0MC4yMjczIC0yNzAuMzM2OTEgMTAzNC43NzU4IC0yNjkuNDc3MTggMTAzMy41MzEyIC0yNjguODEyNSBDIDEwMzEuOTMyMiAtMjY5LjEwOTc5IDEwMjkuNjczNSAtMjY5LjM0NjY5IDEwMjcuNjg3NSAtMjY5LjE1NjI1IEMgMTAyNC42Mjg3IC0yNjguODYyOTMgMTAyMi43MTU1IC0yNjguNjcyMjYgMTAyMC43ODEyIC0yNjguNSBDIDEwMTguODQ3IC0yNjguMzI3NzMgMTAxOS4wOTI2IC0yNjguMDc3NjMgMTAxNy44NzUgLTI2Ny45Njg3NSBDIDEwMTYuNTU4OCAtMjY3Ljg1MTA1IDEwMTYuMTE1MiAtMjY4LjEzMjM4IDEwMTIuMzQzOCAtMjY3LjcxODc1IEMgMTAwOC44MDE3IC0yNjcuMzMwMyAxMDAzLjMzNTkgLTI2Ni41MDk0OCAxMDAyLjA2MjUgLTI2NS44NDM3NSBDIDEwMDAuNDYzNiAtMjY2LjEzODQ0IDk5OC4xNzUzIC0yNjYuMzUwNzYgOTk2LjE4NzUgLTI2Ni4xNTYyNSBDIDk5My4xMjkyMSAtMjY1Ljg1NyA5OTEuMjQ2MyAtMjY1LjY3NjAxIDk4OS4zMTI1IC0yNjUuNSBDIDk4OC42NTUwMSAtMjY1LjQ0MDE1IDk4OC4yNzI0NSAtMjY1LjMyMTQ0IDk4Ny45Njg3NSAtMjY1LjI1IEMgOTg3LjU0MTA1IC0yNjUuMTMxMDQgOTg3LjI4NTI1IC0yNjUuMDMxOTMgOTg2LjU5Mzc1IC0yNjQuOTY4NzUgQyA5ODUuMjc3NzUgLTI2NC44NDg0OSA5ODQuODM0IC0yNjUuMTYzNjMgOTgxLjA2MjUgLTI2NC43NSBDIDk3Ny41MDYzMSAtMjY0LjM1OTk4IDk3Mi4wNTY5IC0yNjMuNTEwODQgOTcwLjgxMjUgLTI2Mi44NDM3NSBDIDk2OS4yMTM4MSAtMjYzLjEzNzkzIDk2Ni45NTI2NSAtMjYzLjM2NzQ3IDk2NC45Njg3NSAtMjYzLjE1NjI1IEMgOTYxLjkxMzA1IC0yNjIuODMwOTIgOTU5Ljk5NDcgLTI2Mi42MzAwMSA5NTguMDYyNSAtMjYyLjQzNzUgQyA5NTYuMTMwMzEgLTI2Mi4yNDQ5OSA5NTYuMzcyNzUgLTI2MS45OTY2MiA5NTUuMTU2MjUgLTI2MS44NzUgQyA5NTMuODQxMzcgLTI2MS43NDM1MyA5NTMuMzkzMiAtMjYyLjAzOTU0IDk0OS42MjUgLTI2MS41OTM3NSBDIDk0Ni4wODYxMSAtMjYxLjE3NTA5IDk0MC42NDczIC0yNjAuMzAxNTggOTM5LjM3NSAtMjU5LjYyNSBDIDkzNy43Nzc0MSAtMjU5LjkwNjA0IDkzNS41MTUwNSAtMjYwLjA0NTQzIDkzMy41MzEyNSAtMjU5LjgxMjUgQyA5MzAuNDc5MjcgLTI1OS40NTQxMyA5MjguNTg2MjUgLTI1OS4yNDQ2NCA5MjYuNjU2MjUgLTI1OS4wMzEyNSBDIDkyNi4wMDAwNyAtMjU4Ljk1ODY5IDkyNS42MTU2IC0yNTguODU4NTYgOTI1LjMxMjUgLTI1OC43ODEyNSBDIDkyNC44ODU3MSAtMjU4LjY1NDAyIDkyNC42Mjc2IC0yNTguNTE0MDUgOTIzLjkzNzUgLTI1OC40Mzc1IEMgOTIyLjYyNDExIC0yNTguMjkxODEgOTIyLjE3MDE1IC0yNTguNjExNTIgOTE4LjQwNjI1IC0yNTguMTI1IEMgOTE0Ljg1NzM3IC0yNTcuNjY2MjQgOTA5LjQyNzYgLTI1Ni43MDU5OCA5MDguMTg3NSAtMjU2IEMgOTA2LjU5NDQxIC0yNTYuMjQ0MjQgOTA0LjM1MzcgLTI1Ni4zODEzNSA5MDIuMzc1IC0yNTYuMTI1IEMgODk5LjMyNzQxIC0yNTUuNzMwMTggODk3LjQyNDMgLTI1NS40NzY1NSA4OTUuNSAtMjU1LjIxODc1IEMgODkzLjU3NTcxIC0yNTQuOTYwOTYgODkzLjc3MzkgLTI1NC43MjUyMiA4OTIuNTYyNSAtMjU0LjU2MjUgQyA4OTEuMjUzMDEgLTI1NC4zODY2IDg5MC44MTUzIC0yNTQuNjY2ODggODg3LjA2MjUgLTI1NC4wOTM3NSBDIDg4My41MzgyMSAtMjUzLjU1NTUxIDg3OC4xMzkzIC0yNTIuMzk0NTggODc2Ljg3NSAtMjUxLjY1NjI1IEMgODc1LjI4NzUxIC0yNTEuODU5NzkgODczLjAyOTUgLTI1MS45MTA5OCA4NzEuMDYyNSAtMjUxLjU2MjUgQyA4NjguMDM2MzEgLTI1MS4wMjYzOCA4NjYuMTYzNiAtMjUwLjcwMDgxIDg2NC4yNSAtMjUwLjM3NSBDIDg2My41OTk0MSAtMjUwLjI2NDIzIDg2My4yMzYzIC0yNTAuMTA0MDYgODYyLjkzNzUgLTI1MCBDIDg2Mi41MTY4MSAtMjQ5LjgzNTEyIDg2Mi4yNzQwNSAtMjQ5LjY2ODcgODYxLjU5Mzc1IC0yNDkuNTMxMjUgQyA4NjAuMjk5MDUgLTI0OS4yNjk2NiA4NTkuODY2NjUgLTI0OS41Mzc0NSA4NTYuMTU2MjUgLTI0OC43MTg3NSBDIDg1Mi42NTc3NyAtMjQ3Ljk0NjggODQ3LjMxMDM1IC0yNDYuMzM1ODIgODQ2LjA5Mzc1IC0yNDUuNSBDIDg0NC41MzA4NSAtMjQ1LjU3NzQ1IDg0Mi4zMzYyNSAtMjQ1LjQxNDcyIDg0MC40MDYyNSAtMjQ0LjkwNjI1IEMgODM3LjQzMzg3IC0yNDQuMTIzMTIgODM1LjU4ODU1IC0yNDMuNjc0MTYgODMzLjcxODc1IC0yNDMuMTU2MjUgQyA4MzEuODQ4NzUgLTI0Mi42MzgzNSA4MzIuMDUyMSAtMjQyLjM4ODk3IDgzMC44NzUgLTI0Mi4wNjI1IEMgODI5LjYwMjUxIC0yNDEuNzA5NiA4MjkuMTc3OTUgLTI0MS45NTU0MSA4MjUuNTMxMjUgLTI0MC44NzUgQyA4MjIuMTA2NTcgLTIzOS44NjAzNyA4MTYuODgxODUgLTIzNy45NDE4MyA4MTUuNjU2MjUgLTIzNy4wMzEyNSBDIDgxNC4xMTc0NyAtMjM3LjAxODUxIDgxMS45MzY0NSAtMjM2Ljc1OTAzIDgxMC4wMzEyNSAtMjM2LjE1NjI1IEMgODA3LjEwMDI3IC0yMzUuMjI4OTEgODA1LjI4MDkgLTIzNC42OTc4MyA4MDMuNDM3NSAtMjM0LjA5Mzc1IEMgODAyLjgxMDcxIC0yMzMuODg4MzcgODAyLjQ0NTg1IC0yMzMuNzAxMTcgODAyLjE1NjI1IC0yMzMuNTYyNSBDIDgwMS43NDg2NyAtMjMzLjM0ODg5IDgwMS41MDI5NSAtMjMzLjE1Mzc1IDgwMC44NDM3NSAtMjMyLjkzNzUgQyA3OTkuNTg5MjUgLTIzMi41MjU5NiA3OTkuMTU3NiAtMjMyLjc0ODQ2IDc5NS41NjI1IC0yMzEuNSBDIDc5Mi4xNzI2MSAtMjMwLjMyMjgzIDc4Ni45Njc1NSAtMjI4LjI4NjMgNzg1Ljc4MTI1IC0yMjcuMzQzNzUgQyA3ODQuMjU3MzcgLTIyNy4yODQwOCA3ODIuMTMxMiAtMjI2Ljk0ODg4IDc4MC4yNSAtMjI2LjI4MTI1IEMgNzc3LjM1MjYxIC0yMjUuMjUyOTYgNzc1LjU1MDk1IC0yMjQuNjA1NzcgNzczLjcxODc1IC0yMjMuOTY4NzUgQyA3NzEuODg2NTUgLTIyMy4zMzE3NCA3NzIuMDkwOSAtMjIzLjEyMDIxIDc3MC45Mzc1IC0yMjIuNzE4NzUgQyA3NjkuNjkwNzEgLTIyMi4yODQ3OSA3NjkuMjczOTUgLTIyMi41MTkwMyA3NjUuNzE4NzUgLTIyMS4xNTYyNSBDIDc2Mi4zODAwNSAtMjE5Ljg3NjQ1IDc1Ny4yMzE2NSAtMjE3LjY3MzcgNzU2LjAzMTI1IC0yMTYuNjg3NSBDIDc1NC41MjQwNyAtMjE2LjU3OTgxIDc1Mi4zOTU1NSAtMjE2LjE4ODcgNzUwLjUzMTI1IC0yMTUuNDY4NzUgQyA3NDcuNjYzMDcgLTIxNC4zNjExNSA3NDUuOTA3MzUgLTIxMy42ODcxOSA3NDQuMDkzNzUgLTIxMyBDIDc0My40NzcwNSAtMjEyLjc2NjM3IDc0My4wOTczIC0yMTIuNTU3OTcgNzQyLjgxMjUgLTIxMi40MDYyNSBDIDc0Mi44MTI1MSAtMjEyLjQwNjI1IDc0Mi44MTI1IC0yMTIuMzc2NzMgNzQyLjgxMjUgLTIxMi4zNzUgTCA3MzQuODEyNSAtMjA5LjE4NzUgTCA3MzYuNjI1IC0xOTQuNDY4NzUgQyA3MzYuMzY3MDEgLTE5NC41Mjk1NiA3NDIuODEyNSAtMTkxLjE1NjI1IDc0Mi44MTI1IC0xOTEuMTU2MjUgQyA3NDMuMDM4OTEgLTE5MS4zMDA5MyA3NDMuMjYxNDUgLTE5MS40Mjg4NiA3NDMuNTMxMjUgLTE5MS41MzEyNSBDIDc0NC42MTE3NyAtMTkxLjk0MTIzIDc0NS43MDI4NSAtMTkxLjc0NzAyIDc0OS41MzEyNSAtMTkzLjIxODc1IEMgNzUzLjM1OTc3IC0xOTQuNjkwNDkgNzU0Ljc1NTMgLTE5NS4yMjM3MyA3NTUuNDM3NSAtMTk1LjYyNSBDIDc1Ni4xMTcxMSAtMTk2LjAyNDc4IDc1Ny4wNDkyNSAtMTk2LjUwNDM3IDc1Ny42NTYyNSAtMTk3LjE1NjI1IEMgNzU5LjQ4MzE3IC0xOTcuMjk0IDc2MS4yMjcwNSAtMTk3LjY0OTQ4IDc2Mi41OTM3NSAtMTk4LjE1NjI1IEMgNzY1LjU2MTc1IC0xOTkuMjU2NzcgNzY3LjQ2OTEgLTE5OS45NjI0NCA3NjkuMzc1IC0yMDAuNjI1IEMgNzcxLjI4MDgxIC0yMDEuMjg3NTQgNzcxLjcyOTE1IC0yMDIuMDM5ODcgNzcyLjc4MTI1IC0yMDIuNDA2MjUgQyA3NzMuODcyODcgLTIwMi43ODYzNiA3NzQuOTc2MzUgLTIwMi41NzE2MyA3NzguODQzNzUgLTIwMy45Mzc1IEMgNzgyLjcxMTE1IC0yMDUuMzAzMzYgNzg0LjEyNjkgLTIwNS43NjQ1OCA3ODQuODEyNSAtMjA2LjE1NjI1IEMgNzg1LjUxMzYxIC0yMDYuNTU2NzcgNzg2LjUxMzMgLTIwNy4wODkyMyA3ODcuMTI1IC0yMDcuNzUgQyA3ODkuMDk1ODEgLTIwNy44MDQ2NiA3OTAuOTQxOTUgLTIwOC4xMzQ2MyA3OTIuNDA2MjUgLTIwOC42MjUgQyA3OTUuNDA3NzcgLTIwOS42MzAwOCA3OTcuMzMyNCAtMjEwLjI0NjcxIDc5OS4yNSAtMjEwLjg3NSBDIDgwMC43ODg2MSAtMjExLjM3OTEgODAxLjQyNDE1IC0yMTEuOTIxNzcgODAyLjE1NjI1IC0yMTIuMzEyNSBDIDgwMi4zODY0NyAtMjEyLjQ0NjgxIDgwMi42MzIxNSAtMjEyLjU2NjIzIDgwMi45MDYyNSAtMjEyLjY1NjI1IEMgODA0LjAwNDU3IC0yMTMuMDE2NzMgODA1LjA4NzcgLTIxMi43Mzc2MiA4MDkgLTIxMy45Njg3NSBDIDgxMi45MTIzMSAtMjE1LjE5OTg4IDgxNC4zNjYgLTIxNS42NDE3IDgxNS4wNjI1IC0yMTYgQyA4MTUuNzU2NDEgLTIxNi4zNTY5NyA4MTYuNjkyNiAtMjE2Ljc5MjYxIDgxNy4zMTI1IC0yMTcuNDA2MjUgQyA4MTkuMTc3NzEgLTIxNy40Mjg5MSA4MjAuOTQ4MzUgLTIxNy42NzMwOCA4MjIuMzQzNzUgLTIxOC4wOTM3NSBDIDgyNS4zNzQxNSAtMjE5LjAwNzI5IDgyNy4zMzYxNSAtMjE5LjUyMzg1IDgyOS4yODEyNSAtMjIwLjA2MjUgQyA4MzEuMjI2MzcgLTIyMC42MDExNCA4MzEuNzA3NDUgLTIyMS4zMjcwMiA4MzIuNzgxMjUgLTIyMS42MjUgQyA4MzMuODk1MjcgLTIyMS45MzQxNSA4MzUuMDAxMjUgLTIyMS42MTc2MSA4MzguOTY4NzUgLTIyMi42NTYyNSBDIDg0Mi45MzYyNSAtMjIzLjY5NDg4IDg0NC4zODYyNSAtMjI0LjA4ODk4IDg0NS4wOTM3NSAtMjI0LjQwNjI1IEMgODQ1LjgyODU1IC0yMjQuNzM1ODQgODQ2LjkwNzY1IC0yMjUuMTU5OTcgODQ3LjUzMTI1IC0yMjUuNzgxMjUgQyA4NDkuNTI5MDcgLTIyNS42NjUyNSA4NTEuMzg4NyAtMjI1LjgwMTM0IDg1Mi44NzUgLTIyNi4xNTYyNSBDIDg1NS45NTMxMSAtMjI2Ljg5MTI1IDg1Ny45NTg0IC0yMjcuMjU3MTkgODU5LjkzNzUgLTIyNy42NTYyNSBDIDg2MS41MjU0MSAtMjI3Ljk3NjQzIDg2Mi4xODE4IC0yMjguNDQ2OCA4NjIuOTM3NSAtMjI4Ljc1IEMgODYzLjE3NTAxIC0yMjguODU2OCA4NjMuNDA0NCAtMjI4Ljk0Mjc2IDg2My42ODc1IC0yMjkgQyA4NjQuODIwOTEgLTIyOS4yMjkxOSA4NjUuOTkyMTUgLTIyOC43OTEwNyA4NzAuMDMxMjUgLTIyOS41IEMgODc0LjA3MDY3IC0yMzAuMjA4OTMgODc1LjUzMTUgLTIzMC40MjcwOSA4NzYuMjUgLTIzMC42ODc1IEMgODc2Ljk2NTgxIC0yMzAuOTQ2OTQgODc3Ljk1NDM1IC0yMzEuMjU0NzQgODc4LjU5Mzc1IC0yMzEuNzgxMjUgQyA4ODAuNTE3OTUgLTIzMS41NDE3NiA4ODIuMzQxNjUgLTIzMS41NTY3MiA4ODMuNzgxMjUgLTIzMS43ODEyNSBDIDg4Ni45MDc2NyAtMjMyLjI2ODg3IDg4OC45MzU4IC0yMzIuNDgxOTIgODkwLjkzNzUgLTIzMi43NSBDIDg5Mi45MzkyMSAtMjMzLjAxODA3IDg5My40MjYyNSAtMjMzLjY5NTE0IDg5NC41MzEyNSAtMjMzLjg0Mzc1IEMgODk1LjY3NzY3IC0yMzMuOTk3OTMgODk2LjgwNzEgLTIzMy41NDIxOCA5MDAuODc1IC0yMzQuMDYyNSBDIDkwNC45NDI4MSAtMjM0LjU4MjgyIDkwNi40MzUyNSAtMjM0Ljc1ODIzIDkwNy4xNTYyNSAtMjM1IEMgOTA3Ljg5MzM3IC0yMzUuMjQ3MTQgOTA4Ljk1NDM1IC0yMzUuNTg2MjMgOTA5LjU5Mzc1IC0yMzYuMTI1IEMgOTExLjY0Mzc1IC0yMzUuNzg5NDcgOTEzLjU2NzQ1IC0yMzUuNzI3MDQgOTE1LjA5Mzc1IC0yMzUuOTA2MjUgQyA5MTguMjM1OTUgLTIzNi4yNzUyMSA5MjAuMjczNzUgLTIzNi40NjU2MSA5MjIuMjgxMjUgLTIzNi42ODc1IEMgOTIzLjg5MjA3IC0yMzYuODY1NTIgOTI0LjU0NTkgLTIzNy4yOTU3IDkyNS4zMTI1IC0yMzcuNTMxMjUgQyA5MjUuNTUzNDEgLTIzNy42MTY3NyA5MjUuODA2NTUgLTIzNy42ODY4NSA5MjYuMDkzNzUgLTIzNy43MTg3NSBDIDkyNy4yNDM0NSAtMjM3Ljg0NjQ3IDkyOC4zOTUwNSAtMjM3LjM3MjEgOTMyLjQ2ODc1IC0yMzcuODQzNzUgQyA5MzYuNTQyNDUgLTIzOC4zMTU0IDkzOC4wMjc4IC0yMzguNDU0MzUgOTM4Ljc1IC0yMzguNjg3NSBDIDkzOS40Njk0MSAtMjM4LjkxOTc3IDk0MC40NTAyNSAtMjM5LjE2MDk2IDk0MS4wOTM3NSAtMjM5LjY1NjI1IEMgOTQzLjAzMDA1IC0yMzkuMzIyNzkgOTQ0Ljg2MzggLTIzOS4yNTIwMSA5NDYuMzEyNSAtMjM5LjQwNjI1IEMgOTQ5LjQ1ODUxIC0yMzkuNzQxMiA5NTEuNDkgLTIzOS45MjQ4NCA5NTMuNSAtMjQwLjEyNSBDIDk1NS41MDk5MSAtMjQwLjMyNTE0IDk1NS45ODQxNSAtMjQwLjk1MTM5IDk1Ny4wOTM3NSAtMjQxLjA2MjUgQyA5NTguMjQ0ODUgLTI0MS4xNzc3OCA5NTkuMzkwMjUgLTI0MC42OTc0NCA5NjMuNDY4NzUgLTI0MS4xMjUgQyA5NjcuNTQ3MjUgLTI0MS41NTI1NiA5NjkuMDU3NjUgLTI0MS42ODcwOSA5NjkuNzgxMjUgLTI0MS45MDYyNSBDIDk3MC41MjA0NyAtMjQyLjEzMDExIDk3MS41NzY4NSAtMjQyLjQxOTUgOTcyLjIxODc1IC0yNDIuOTM3NSBDIDk3NC4yNzU3NSAtMjQyLjUzODgzIDk3Ni4yMjA2IC0yNDIuNDQ0MSA5NzcuNzUgLTI0Mi41OTM3NSBDIDk4MC44OTg3MSAtMjQyLjkwMTg1IDk4Mi45MjU4IC0yNDMuMDY3IDk4NC45Mzc1IC0yNDMuMjUgQyA5ODYuNTUxNTEgLTI0My4zOTY4MiA5ODcuMjAwNTUgLTI0My44MTA1NSA5ODcuOTY4NzUgLTI0NC4wMzEyNSBDIDk4OC4yMTAwNSAtMjQ0LjExMjExIDk4OC40NjIzIC0yNDQuMTYxMTYgOTg4Ljc1IC0yNDQuMTg3NSBDIDk4OS45MDIxMSAtMjQ0LjI5Mjk1IDk5MS4wNDI5IC0yNDMuNzk0NzUgOTk1LjEyNSAtMjQ0LjE4NzUgQyA5OTkuMjA3MTEgLTI0NC41ODAyNSAxMDAwLjcxMzkgLTI0NC43MTgzNCAxMDAxLjQzNzUgLTI0NC45Mzc1IEMgMTAwMi4xNTg0IC0yNDUuMTU1ODMgMTAwMy4xMzcxIC0yNDUuMzg1MiAxMDAzLjc4MTIgLTI0NS44NzUgQyAxMDA1LjcxOTMgLTI0NS41MjUwMSAxMDA3LjU1MDEgLTI0NS40MjA2MiAxMDA5IC0yNDUuNTYyNSBDIDEwMTIuMTQ4NyAtMjQ1Ljg3MDYgMTAxNC4xNzU4IC0yNDYuMDM1NzUgMTAxNi4xODc1IC0yNDYuMjE4NzUgQyAxMDE4LjE5OTEgLTI0Ni40MDE3NCAxMDE4LjcwMTcgLTI0Ny4wNTY3NyAxMDE5LjgxMjUgLTI0Ny4xNTYyNSBDIDEwMjAuOTY0OCAtMjQ3LjI1OTQ4IDEwMjIuMTA0NyAtMjQ2Ljc3MTQyIDEwMjYuMTg3NSAtMjQ3LjE1NjI1IEMgMTAzMC4yNzA0IC0yNDcuNTQxMDcgMTAzMS43NzYyIC0yNDcuNjU3MjUgMTAzMi41IC0yNDcuODc1IEMgMTAzMy4yMzkzIC0yNDguMDk3NDMgMTAzNC4yOTU2IC0yNDguMzg5NDkgMTAzNC45Mzc1IC0yNDguOTA2MjUgQyAxMDM2Ljk5NDkgLTI0OC41MDQ0OCAxMDM4Ljk0MDQgLTI0OC40MDI5MiAxMDQwLjQ2ODggLTI0OC41NjI1IEMgMTA0My42MTUzIC0yNDguODkxMDIgMTA0NS42NDU4IC0yNDkuMDg1MiAxMDQ3LjY1NjIgLTI0OS4yODEyNSBDIDEwNDkuMjY5MiAtMjQ5LjQzODU0IDEwNDkuOTIxOSAtMjQ5LjkxMjczIDEwNTAuNjg3NSAtMjUwLjE1NjI1IEMgMTA1MC45MjgyIC0yNTAuMjQ0MjkgMTA1MS4xNTA3IC0yNTAuMjc3NjIgMTA1MS40Mzc1IC0yNTAuMzEyNSBDIDEwNTIuNTg1OCAtMjUwLjQ1MjIgMTA1My43NTQyIC0yNDkuOTcyNTkgMTA1Ny44MTI1IC0yNTAuNTYyNSBDIDEwNjEuODcwOCAtMjUxLjE1MjQyIDEwNjMuMzc0MyAtMjUxLjMzOTY0IDEwNjQuMDkzOCAtMjUxLjU5Mzc1IEMgMTA2NC44MTA0IC0yNTEuODQ2OTEgMTA2NS43Njg0IC0yNTIuMTUxODIgMTA2Ni40MDYyIC0yNTIuNjg3NSBDIDEwNjguMzI1OSAtMjUyLjQ3NTU2IDEwNzAuMTI2MiAtMjUyLjUzNjA5IDEwNzEuNTYyNSAtMjUyLjc4MTI1IEMgMTA3NC42ODE2IC0yNTMuMzEzNjUgMTA3Ni42NzQxIC0yNTMuNzA5ODYgMTA3OC42NTYyIC0yNTQuMDkzNzUgQyAxMDgwLjYzODMgLTI1NC40Nzc2MiAxMDgxLjEzMDUgLTI1NS4xMzM0IDEwODIuMjE4OCAtMjU1LjM3NSBDIDEwODMuMzQ3NSAtMjU1LjYyNTY2IDEwODQuNDg5IC0yNTUuMjU4NzEgMTA4OC40Njg4IC0yNTYuMjUgQyAxMDkyLjQ0ODMgLTI1Ny4yNDEyNyAxMDkzLjg5ODMgLTI1Ny42NjkzIDEwOTQuNTkzOCAtMjU4LjAzMTI1IEMgMTA5NS4zMTYgLTI1OC40MDcyNSAxMDk2LjM1NTUgLTI1OC45MDE4MyAxMDk2Ljk2ODggLTI1OS41NjI1IEMgMTA5OC45MzE3IC0yNTkuNTc0NTQgMTEwMC43NjI1IC0yNTkuODUzNTUgMTEwMi4xODc1IC0yNjAuNDA2MjUgQyAxMTA1LjEzODcgLTI2MS41NTA4NSAxMTA3LjA2MDcgLTI2Mi4yNzU2NyAxMTA4Ljg3NSAtMjYzLjE1NjI1IEMgMTExMC4zMzA3IC0yNjMuODYyNzcgMTExMS4xOTQxIC0yNjQuODU4MjggMTExMS40MDYyIC0yNjUuMTU2MjUgQyAxMTExLjYxODUgLTI2NS40NTQyIDExMTEuNTA1MSAtMjY1Ljg4NDggMTExMS41MzEyIC0yNjUuOTA2MjUgQyAxMTExLjU3NDIgLTI2NS45NDE0OCAxMTExLjg3MTYgLTI2Ni4wMDAyOCAxMTEyLjAzMTIgLTI2Ni4zNDM3NSBDIDExMTIuODkwMiAtMjY4LjE5MDgyIDExMTQuMzU0NCAtMjcxLjk3MTM5IDExMTQuNDY4OCAtMjcyLjY1NjI1IEMgMTExNC41ODI1IC0yNzMuMzM4MzkgMTExNC42MzY4IC0yNzQuMDA5MDIgMTExNC42ODc1IC0yNzQuNDA2MjUgQyAxMTE0LjcxNjkgLTI3NC42MzU3NSAxMTE0LjU0MDQgLTI3NS4yODUxNSAxMTE0LjU2MjUgLTI3NS4zNDM3NSBDIDExMTQuNTkzNCAtMjc1LjQyNTc5IDExMTQuODUwOCAtMjc1LjU5NDMyIDExMTQuOTA2MiAtMjc1Ljg0Mzc1IEMgMTExNS4xNzI1IC0yNzcuMDQyMDYgMTExNC45OTUzIC0yNzguMDUxMTEgMTExNC43ODEyIC0yNzkuNDY4NzUgQyAxMTE0LjU2NzMgLTI4MC44ODYzOCAxMTEzLjgwOTYgLTI4NC4wODMzOCAxMTEzLjE1NjIgLTI4NC45Mzc1IEMgMTExMi40OTczIC0yODUuNzk5MjIgMTExMS45MzE0IC0yODUuOTQ4MDEgMTExMS40MDYyIC0yODUuOTM3NSB6ICIKKyAgICAgICAgIHN0eWxlPSJmaWxsOiNiY2I3ODY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgIGlkPSJwYXRoNzQyMyIKKyAgICAgICAgIGQ9Ik0gMTExMS40MDYyLC0yODUuOTM3NSBMIDExMDcuNDY4OCwtMjg0LjA2MjUgQyAxMTA3LjQyODMsLTI4NC4wNTIyOCAxMTA3LjM2OTIsLTI4NC4wNDIwMSAxMTA3LjM0MzgsLTI4NC4wMzEyNSBDIDExMDYuOTI1LC0yODMuODE4NCAxMTA3LjE3OTEsLTI4My45MzA2NyAxMTA2LjY4NzUsLTI4My43MTg3NSBDIDExMDYuMjAxNCwtMjgzLjUwOTE5IDExMDQuOTQ5OSwtMjgzLjEzNDU2IDExMDIuNTkzOCwtMjgyLjI1IEMgMTA5OS4yNjI2LC0yODAuOTk5NDIgMTA5Ni43ODk1LC0yODAuMTAwMTYgMTA5NS41OTM4LC0yNzkuMTg3NSBDIDEwOTQuMDU3NiwtMjc5LjE2NjIzIDEwOTEuODczMywtMjc4Ljk1NDE5IDEwODkuOTM3NSwtMjc4LjQ2ODc1IEMgMTA4Ni45NTYsLTI3Ny43MjEwOCAxMDg1LjA4MjMsLTI3Ny4yOTQ3NCAxMDgzLjE4NzUsLTI3Ni44NzUgQyAxMDgxLjI5MjcsLTI3Ni40NTUyNyAxMDgxLjUxMiwtMjc2LjIzMjgxIDEwODAuMzEyNSwtMjc2IEMgMTA3OS4wMTU5LC0yNzUuNzQ4MzMgMTA3OC41OTExLC0yNzYuMDA4OTkgMTA3NC44NzUsLTI3NS4yMTg3NSBDIDEwNzEuMzg1MSwtMjc0LjQ3NjYgMTA2NS45ODAyLC0yNzMuMjg3NjggMTA2NC43MTg4LC0yNzIuNTMxMjUgQyAxMDYzLjEzNDgsLTI3Mi43MTIwMyAxMDYwLjg1MTMsLTI3Mi44NTMwMyAxMDU4Ljg3NSwtMjcyLjU2MjUgQyAxMDU1LjgzNDYsLTI3Mi4xMTU1NCAxMDUzLjk1ODgsLTI3MS44ODk3NCAxMDUyLjAzMTIsLTI3MS42NTYyNSBDIDEwNTEuMzc1OCwtMjcxLjU3Njg3IDEwNTAuOTkwMiwtMjcxLjQ1NTQ3IDEwNTAuNjg3NSwtMjcxLjM3NSBDIDEwNTAuMjYxMywtMjcxLjI0MzM0IDEwNTAuMDAxNywtMjcxLjExNDk4IDEwNDkuMzEyNSwtMjcxLjAzMTI1IEMgMTA0OC4wMDA5LC0yNzAuODcxODggMTA0Ny41NTAzLC0yNzEuMTg4MDggMTA0My43ODEyLC0yNzAuNzUgQyAxMDQwLjIyNzMsLTI3MC4zMzY5MSAxMDM0Ljc3NTgsLTI2OS40NzcxOCAxMDMzLjUzMTIsLTI2OC44MTI1IEMgMTAzMS45MzIyLC0yNjkuMTA5NzkgMTAyOS42NzM1LC0yNjkuMzQ2NjkgMTAyNy42ODc1LC0yNjkuMTU2MjUgQyAxMDI0LjYyODcsLTI2OC44NjI5MyAxMDIyLjcxNTUsLTI2OC42NzIyNiAxMDIwLjc4MTIsLTI2OC41IEMgMTAxOC44NDcsLTI2OC4zMjc3MyAxMDE5LjA5MjYsLTI2OC4wNzc2MyAxMDE3Ljg3NSwtMjY3Ljk2ODc1IEMgMTAxNi41NTg4LC0yNjcuODUxMDUgMTAxNi4xMTUyLC0yNjguMTMyMzggMTAxMi4zNDM4LC0yNjcuNzE4NzUgQyAxMDA4LjgwMTcsLTI2Ny4zMzAzIDEwMDMuMzM1OSwtMjY2LjUwOTQ4IDEwMDIuMDYyNSwtMjY1Ljg0Mzc1IEMgMTAwMC40NjM2LC0yNjYuMTM4NDQgOTk4LjE3NTMsLTI2Ni4zNTA3NiA5OTYuMTg3NSwtMjY2LjE1NjI1IEMgOTkzLjEyOTIxLC0yNjUuODU3IDk5MS4yNDYzLC0yNjUuNjc2MDEgOTg5LjMxMjUsLTI2NS41IEMgOTg4LjY1NTAxLC0yNjUuNDQwMTUgOTg4LjI3MjQ1LC0yNjUuMzIxNDQgOTg3Ljk2ODc1LC0yNjUuMjUgQyA5ODcuNTQxMDUsLTI2NS4xMzEwNCA5ODcuMjg1MjUsLTI2NS4wMzE5MyA5ODYuNTkzNzUsLTI2NC45Njg3NSBDIDk4NS4yNzc3NSwtMjY0Ljg0ODQ5IDk4NC44MzQsLTI2NS4xNjM2MyA5ODEuMDYyNSwtMjY0Ljc1IEMgOTc3LjUwNjMxLC0yNjQuMzU5OTggOTcyLjA1NjksLTI2My41MTA4NCA5NzAuODEyNSwtMjYyLjg0Mzc1IEMgOTY5LjIxMzgxLC0yNjMuMTM3OTMgOTY2Ljk1MjY1LC0yNjMuMzY3NDcgOTY0Ljk2ODc1LC0yNjMuMTU2MjUgQyA5NjEuOTEzMDUsLTI2Mi44MzA5MiA5NTkuOTk0NywtMjYyLjYzMDAxIDk1OC4wNjI1LC0yNjIuNDM3NSBDIDk1Ni4xMzAzMSwtMjYyLjI0NDk5IDk1Ni4zNzI3NSwtMjYxLjk5NjYyIDk1NS4xNTYyNSwtMjYxLjg3NSBDIDk1My44NDEzNywtMjYxLjc0MzUzIDk1My4zOTMyLC0yNjIuMDM5NTQgOTQ5LjYyNSwtMjYxLjU5Mzc1IEMgOTQ2LjA4NjExLC0yNjEuMTc1MDkgOTQwLjY0NzMsLTI2MC4zMDE1OCA5MzkuMzc1LC0yNTkuNjI1IEMgOTM3Ljc3NzQxLC0yNTkuOTA2MDQgOTM1LjUxNTA1LC0yNjAuMDQ1NDMgOTMzLjUzMTI1LC0yNTkuODEyNSBDIDkzMC40NzkyNywtMjU5LjQ1NDEzIDkyOC41ODYyNSwtMjU5LjI0NDY0IDkyNi42NTYyNSwtMjU5LjAzMTI1IEMgOTI2LjAwMDA3LC0yNTguOTU4NjkgOTI1LjYxNTYsLTI1OC44NTg1NiA5MjUuMzEyNSwtMjU4Ljc4MTI1IEMgOTI0Ljg4NTcxLC0yNTguNjU0MDIgOTI0LjYyNzYsLTI1OC41MTQwNSA5MjMuOTM3NSwtMjU4LjQzNzUgQyA5MjIuNjI0MTEsLTI1OC4yOTE4MSA5MjIuMTcwMTUsLTI1OC42MTE1MiA5MTguNDA2MjUsLTI1OC4xMjUgQyA5MTQuODU3MzcsLTI1Ny42NjYyNCA5MDkuNDI3NiwtMjU2LjcwNTk4IDkwOC4xODc1LC0yNTYgQyA5MDYuNTk0NDEsLTI1Ni4yNDQyNCA5MDQuMzUzNywtMjU2LjM4MTM1IDkwMi4zNzUsLTI1Ni4xMjUgQyA4OTkuMzI3NDEsLTI1NS43MzAxOCA4OTcuNDI0MywtMjU1LjQ3NjU1IDg5NS41LC0yNTUuMjE4NzUgQyA4OTMuNTc1NzEsLTI1NC45NjA5NiA4OTMuNzczOSwtMjU0LjcyNTIyIDg5Mi41NjI1LC0yNTQuNTYyNSBDIDg5MS4yNTMwMSwtMjU0LjM4NjYgODkwLjgxNTMsLTI1NC42NjY4OCA4ODcuMDYyNSwtMjU0LjA5Mzc1IEMgODgzLjUzODIxLC0yNTMuNTU1NTEgODc4LjEzOTMsLTI1Mi4zOTQ1OCA4NzYuODc1LC0yNTEuNjU2MjUgQyA4NzUuMjg3NTEsLTI1MS44NTk3OSA4NzMuMDI5NSwtMjUxLjkxMDk4IDg3MS4wNjI1LC0yNTEuNTYyNSBDIDg2OC4wMzYzMSwtMjUxLjAyNjM4IDg2Ni4xNjM2LC0yNTAuNzAwODEgODY0LjI1LC0yNTAuMzc1IEMgODYzLjU5OTQxLC0yNTAuMjY0MjMgODYzLjIzNjMsLTI1MC4xMDQwNiA4NjIuOTM3NSwtMjUwIEMgODYyLjUxNjgxLC0yNDkuODM1MTIgODYyLjI3NDA1LC0yNDkuNjY4NyA4NjEuNTkzNzUsLTI0OS41MzEyNSBDIDg2MC4yOTkwNSwtMjQ5LjI2OTY2IDg1OS44NjY2NSwtMjQ5LjUzNzQ1IDg1Ni4xNTYyNSwtMjQ4LjcxODc1IEMgODUyLjY1Nzc3LC0yNDcuOTQ2OCA4NDcuMzEwMzUsLTI0Ni4zMzU4MiA4NDYuMDkzNzUsLTI0NS41IEMgODQ0LjUzMDg1LC0yNDUuNTc3NDUgODQyLjMzNjI1LC0yNDUuNDE0NzIgODQwLjQwNjI1LC0yNDQuOTA2MjUgQyA4MzcuNDMzODcsLTI0NC4xMjMxMiA4MzUuNTg4NTUsLTI0My42NzQxNiA4MzMuNzE4NzUsLTI0My4xNTYyNSBDIDgzMS44NDg3NSwtMjQyLjYzODM1IDgzMi4wNTIxLC0yNDIuMzg4OTcgODMwLjg3NSwtMjQyLjA2MjUgQyA4MjkuNjAyNTEsLTI0MS43MDk2IDgyOS4xNzc5NSwtMjQxLjk1NTQxIDgyNS41MzEyNSwtMjQwLjg3NSBDIDgyMi4xMDY1NywtMjM5Ljg2MDM3IDgxNi44ODE4NSwtMjM3Ljk0MTgzIDgxNS42NTYyNSwtMjM3LjAzMTI1IEMgODE0LjExNzQ3LC0yMzcuMDE4NTEgODExLjkzNjQ1LC0yMzYuNzU5MDMgODEwLjAzMTI1LC0yMzYuMTU2MjUgQyA4MDcuMTAwMjcsLTIzNS4yMjg5MSA4MDUuMjgwOSwtMjM0LjY5NzgzIDgwMy40Mzc1LC0yMzQuMDkzNzUgQyA4MDIuODEwNzEsLTIzMy44ODgzNyA4MDIuNDQ1ODUsLTIzMy43MDExNyA4MDIuMTU2MjUsLTIzMy41NjI1IEMgODAxLjc0ODY3LC0yMzMuMzQ4ODkgODAxLjUwMjk1LC0yMzMuMTUzNzUgODAwLjg0Mzc1LC0yMzIuOTM3NSBDIDc5OS41ODkyNSwtMjMyLjUyNTk2IDc5OS4xNTc2LC0yMzIuNzQ4NDYgNzk1LjU2MjUsLTIzMS41IEMgNzkyLjE3MjYxLC0yMzAuMzIyODMgNzg2Ljk2NzU1LC0yMjguMjg2MyA3ODUuNzgxMjUsLTIyNy4zNDM3NSBDIDc4NC4yNTczNywtMjI3LjI4NDA4IDc4Mi4xMzEyLC0yMjYuOTQ4ODggNzgwLjI1LC0yMjYuMjgxMjUgQyA3NzcuMzUyNjEsLTIyNS4yNTI5NiA3NzUuNTUwOTUsLTIyNC42MDU3NyA3NzMuNzE4NzUsLTIyMy45Njg3NSBDIDc3MS44ODY1NSwtMjIzLjMzMTc0IDc3Mi4wOTA5LC0yMjMuMTIwMjEgNzcwLjkzNzUsLTIyMi43MTg3NSBDIDc2OS42OTA3MSwtMjIyLjI4NDc5IDc2OS4yNzM5NSwtMjIyLjUxOTAzIDc2NS43MTg3NSwtMjIxLjE1NjI1IEMgNzYyLjM4MDA1LC0yMTkuODc2NDUgNzU3LjIzMTY1LC0yMTcuNjczNyA3NTYuMDMxMjUsLTIxNi42ODc1IEMgNzU0LjUyNDA3LC0yMTYuNTc5ODEgNzUyLjM5NTU1LC0yMTYuMTg4NyA3NTAuNTMxMjUsLTIxNS40Njg3NSBDIDc0Ny42NjMwNywtMjE0LjM2MTE1IDc0NS45MDczNSwtMjEzLjY4NzE5IDc0NC4wOTM3NSwtMjEzIEMgNzQzLjQ3NzA1LC0yMTIuNzY2MzcgNzQzLjA5NzMsLTIxMi41NTc5NyA3NDIuODEyNSwtMjEyLjQwNjI1IEMgNzQyLjgxMjUxLC0yMTIuNDA2MjUgNzQyLjgxMjUsLTIxMi4zNzY3MyA3NDIuODEyNSwtMjEyLjM3NSBMIDczNC44MTI1LC0yMDkuMTg3NSBMIDczNi42MjUsLTE5NC40Njg3NSBDIDczNi4zNjcwMSwtMTk0LjUyOTU2IDc0Mi44MTI1LC0xOTEuMTU2MjUgNzQyLjgxMjUsLTE5MS4xNTYyNSBDIDc0My4wMzg5MSwtMTkxLjMwMDkzIDc0My4yNjE0NSwtMTkxLjQyODg2IDc0My41MzEyNSwtMTkxLjUzMTI1IEMgNzQ0LjYxMTc3LC0xOTEuOTQxMjMgNzQ1LjcwMjg1LC0xOTEuNzQ3MDIgNzQ5LjUzMTI1LC0xOTMuMjE4NzUgQyA3NTMuMzU5NzcsLTE5NC42OTA0OSA3NTQuNzU1MywtMTk1LjIyMzczIDc1NS40Mzc1LC0xOTUuNjI1IEMgNzU2LjExNzExLC0xOTYuMDI0NzggNzU3LjA0OTI1LC0xOTYuNTA0MzcgNzU3LjY1NjI1LC0xOTcuMTU2MjUgQyA3NTkuNDgzMTcsLTE5Ny4yOTQgNzYxLjIyNzA1LC0xOTcuNjQ5NDggNzYyLjU5Mzc1LC0xOTguMTU2MjUgQyA3NjUuNTYxNzUsLTE5OS4yNTY3NyA3NjcuNDY5MSwtMTk5Ljk2MjQ0IDc2OS4zNzUsLTIwMC42MjUgQyA3NzEuMjgwODEsLTIwMS4yODc1NCA3NzEuNzI5MTUsLTIwMi4wMzk4NyA3NzIuNzgxMjUsLTIwMi40MDYyNSBDIDc3My44NzI4NywtMjAyLjc4NjM2IDc3NC45NzYzNSwtMjAyLjU3MTYzIDc3OC44NDM3NSwtMjAzLjkzNzUgQyA3ODIuNzExMTUsLTIwNS4zMDMzNiA3ODQuMTI2OSwtMjA1Ljc2NDU4IDc4NC44MTI1LC0yMDYuMTU2MjUgQyA3ODUuNTEzNjEsLTIwNi41NTY3NyA3ODYuNTEzMywtMjA3LjA4OTIzIDc4Ny4xMjUsLTIwNy43NSBDIDc4OS4wOTU4MSwtMjA3LjgwNDY2IDc5MC45NDE5NSwtMjA4LjEzNDYzIDc5Mi40MDYyNSwtMjA4LjYyNSBDIDc5NS40MDc3NywtMjA5LjYzMDA4IDc5Ny4zMzI0LC0yMTAuMjQ2NzEgNzk5LjI1LC0yMTAuODc1IEMgODAwLjc4ODYxLC0yMTEuMzc5MSA4MDEuNDI0MTUsLTIxMS45MjE3NyA4MDIuMTU2MjUsLTIxMi4zMTI1IEMgODAyLjM4NjQ3LC0yMTIuNDQ2ODEgODAyLjYzMjE1LC0yMTIuNTY2MjMgODAyLjkwNjI1LC0yMTIuNjU2MjUgQyA4MDQuMDA0NTcsLTIxMy4wMTY3MyA4MDUuMDg3NywtMjEyLjczNzYyIDgwOSwtMjEzLjk2ODc1IEMgODEyLjkxMjMxLC0yMTUuMTk5ODggODE0LjM2NiwtMjE1LjY0MTcgODE1LjA2MjUsLTIxNiBDIDgxNS43NTY0MSwtMjE2LjM1Njk3IDgxNi42OTI2LC0yMTYuNzkyNjEgODE3LjMxMjUsLTIxNy40MDYyNSBDIDgxOS4xNzc3MSwtMjE3LjQyODkxIDgyMC45NDgzNSwtMjE3LjY3MzA4IDgyMi4zNDM3NSwtMjE4LjA5Mzc1IEMgODI1LjM3NDE1LC0yMTkuMDA3MjkgODI3LjMzNjE1LC0yMTkuNTIzODUgODI5LjI4MTI1LC0yMjAuMDYyNSBDIDgzMS4yMjYzNywtMjIwLjYwMTE0IDgzMS43MDc0NSwtMjIxLjMyNzAyIDgzMi43ODEyNSwtMjIxLjYyNSBDIDgzMy44OTUyNywtMjIxLjkzNDE1IDgzNS4wMDEyNSwtMjIxLjYxNzYxIDgzOC45Njg3NSwtMjIyLjY1NjI1IEMgODQyLjkzNjI1LC0yMjMuNjk0ODggODQ0LjM4NjI1LC0yMjQuMDg4OTggODQ1LjA5Mzc1LC0yMjQuNDA2MjUgQyA4NDUuODI4NTUsLTIyNC43MzU4NCA4NDYuOTA3NjUsLTIyNS4xNTk5NyA4NDcuNTMxMjUsLTIyNS43ODEyNSBDIDg0OS41MjkwNywtMjI1LjY2NTI1IDg1MS4zODg3LC0yMjUuODAxMzQgODUyLjg3NSwtMjI2LjE1NjI1IEMgODU1Ljk1MzExLC0yMjYuODkxMjUgODU3Ljk1ODQsLTIyNy4yNTcxOSA4NTkuOTM3NSwtMjI3LjY1NjI1IEMgODYxLjUyNTQxLC0yMjcuOTc2NDMgODYyLjE4MTgsLTIyOC40NDY4IDg2Mi45Mzc1LC0yMjguNzUgQyA4NjMuMTc1MDEsLTIyOC44NTY4IDg2My40MDQ0LC0yMjguOTQyNzYgODYzLjY4NzUsLTIyOSBDIDg2NC44MjA5MSwtMjI5LjIyOTE5IDg2NS45OTIxNSwtMjI4Ljc5MTA3IDg3MC4wMzEyNSwtMjI5LjUgQyA4NzQuMDcwNjcsLTIzMC4yMDg5MyA4NzUuNTMxNSwtMjMwLjQyNzA5IDg3Ni4yNSwtMjMwLjY4NzUgQyA4NzYuOTY1ODEsLTIzMC45NDY5NCA4NzcuOTU0MzUsLTIzMS4yNTQ3NCA4NzguNTkzNzUsLTIzMS43ODEyNSBDIDg4MC41MTc5NSwtMjMxLjU0MTc2IDg4Mi4zNDE2NSwtMjMxLjU1NjcyIDg4My43ODEyNSwtMjMxLjc4MTI1IEMgODg2LjkwNzY3LC0yMzIuMjY4ODcgODg4LjkzNTgsLTIzMi40ODE5MiA4OTAuOTM3NSwtMjMyLjc1IEMgODkyLjkzOTIxLC0yMzMuMDE4MDcgODkzLjQyNjI1LC0yMzMuNjk1MTQgODk0LjUzMTI1LC0yMzMuODQzNzUgQyA4OTUuNjc3NjcsLTIzMy45OTc5MyA4OTYuODA3MSwtMjMzLjU0MjE4IDkwMC44NzUsLTIzNC4wNjI1IEMgOTA0Ljk0MjgxLC0yMzQuNTgyODIgOTA2LjQzNTI1LC0yMzQuNzU4MjMgOTA3LjE1NjI1LC0yMzUgQyA5MDcuODkzMzcsLTIzNS4yNDcxNCA5MDguOTU0MzUsLTIzNS41ODYyMyA5MDkuNTkzNzUsLTIzNi4xMjUgQyA5MTEuNjQzNzUsLTIzNS43ODk0NyA5MTMuNTY3NDUsLTIzNS43MjcwNCA5MTUuMDkzNzUsLTIzNS45MDYyNSBDIDkxOC4yMzU5NSwtMjM2LjI3NTIxIDkyMC4yNzM3NSwtMjM2LjQ2NTYxIDkyMi4yODEyNSwtMjM2LjY4NzUgQyA5MjMuODkyMDcsLTIzNi44NjU1MiA5MjQuNTQ1OSwtMjM3LjI5NTcgOTI1LjMxMjUsLTIzNy41MzEyNSBDIDkyNS41NTM0MSwtMjM3LjYxNjc3IDkyNS44MDY1NSwtMjM3LjY4Njg1IDkyNi4wOTM3NSwtMjM3LjcxODc1IEMgOTI3LjI0MzQ1LC0yMzcuODQ2NDcgOTI4LjM5NTA1LC0yMzcuMzcyMSA5MzIuNDY4NzUsLTIzNy44NDM3NSBDIDkzNi41NDI0NSwtMjM4LjMxNTQgOTM4LjAyNzgsLTIzOC40NTQzNSA5MzguNzUsLTIzOC42ODc1IEMgOTM5LjQ2OTQxLC0yMzguOTE5NzcgOTQwLjQ1MDI1LC0yMzkuMTYwOTYgOTQxLjA5Mzc1LC0yMzkuNjU2MjUgQyA5NDMuMDMwMDUsLTIzOS4zMjI3OSA5NDQuODYzOCwtMjM5LjI1MjAxIDk0Ni4zMTI1LC0yMzkuNDA2MjUgQyA5NDkuNDU4NTEsLTIzOS43NDEyIDk1MS40OSwtMjM5LjkyNDg0IDk1My41LC0yNDAuMTI1IEMgOTU1LjUwOTkxLC0yNDAuMzI1MTQgOTU1Ljk4NDE1LC0yNDAuOTUxMzkgOTU3LjA5Mzc1LC0yNDEuMDYyNSBDIDk1OC4yNDQ4NSwtMjQxLjE3Nzc4IDk1OS4zOTAyNSwtMjQwLjY5NzQ0IDk2My40Njg3NSwtMjQxLjEyNSBDIDk2Ny41NDcyNSwtMjQxLjU1MjU2IDk2OS4wNTc2NSwtMjQxLjY4NzA5IDk2OS43ODEyNSwtMjQxLjkwNjI1IEMgOTcwLjUyMDQ3LC0yNDIuMTMwMTEgOTcxLjU3Njg1LC0yNDIuNDE5NSA5NzIuMjE4NzUsLTI0Mi45Mzc1IEMgOTc0LjI3NTc1LC0yNDIuNTM4ODMgOTc2LjIyMDYsLTI0Mi40NDQxIDk3Ny43NSwtMjQyLjU5Mzc1IEMgOTgwLjg5ODcxLC0yNDIuOTAxODUgOTgyLjkyNTgsLTI0My4wNjcgOTg0LjkzNzUsLTI0My4yNSBDIDk4Ni41NTE1MSwtMjQzLjM5NjgyIDk4Ny4yMDA1NSwtMjQzLjgxMDU1IDk4Ny45Njg3NSwtMjQ0LjAzMTI1IEMgOTg4LjIxMDA1LC0yNDQuMTEyMTEgOTg4LjQ2MjMsLTI0NC4xNjExNiA5ODguNzUsLTI0NC4xODc1IEMgOTg5LjkwMjExLC0yNDQuMjkyOTUgOTkxLjA0MjksLTI0My43OTQ3NSA5OTUuMTI1LC0yNDQuMTg3NSBDIDk5OS4yMDcxMSwtMjQ0LjU4MDI1IDEwMDAuNzEzOSwtMjQ0LjcxODM0IDEwMDEuNDM3NSwtMjQ0LjkzNzUgQyAxMDAyLjE1ODQsLTI0NS4xNTU4MyAxMDAzLjEzNzEsLTI0NS4zODUyIDEwMDMuNzgxMiwtMjQ1Ljg3NSBDIDEwMDUuNzE5MywtMjQ1LjUyNTAxIDEwMDcuNTUwMSwtMjQ1LjQyMDYyIDEwMDksLTI0NS41NjI1IEMgMTAxMi4xNDg3LC0yNDUuODcwNiAxMDE0LjE3NTgsLTI0Ni4wMzU3NSAxMDE2LjE4NzUsLTI0Ni4yMTg3NSBDIDEwMTguMTk5MSwtMjQ2LjQwMTc0IDEwMTguNzAxNywtMjQ3LjA1Njc3IDEwMTkuODEyNSwtMjQ3LjE1NjI1IEMgMTAyMC45NjQ4LC0yNDcuMjU5NDggMTAyMi4xMDQ3LC0yNDYuNzcxNDIgMTAyNi4xODc1LC0yNDcuMTU2MjUgQyAxMDMwLjI3MDQsLTI0Ny41NDEwNyAxMDMxLjc3NjIsLTI0Ny42NTcyNSAxMDMyLjUsLTI0Ny44NzUgQyAxMDMzLjIzOTMsLTI0OC4wOTc0MyAxMDM0LjI5NTYsLTI0OC4zODk0OSAxMDM0LjkzNzUsLTI0OC45MDYyNSBDIDEwMzYuOTk0OSwtMjQ4LjUwNDQ4IDEwMzguOTQwNCwtMjQ4LjQwMjkyIDEwNDAuNDY4OCwtMjQ4LjU2MjUgQyAxMDQzLjYxNTMsLTI0OC44OTEwMiAxMDQ1LjY0NTgsLTI0OS4wODUyIDEwNDcuNjU2MiwtMjQ5LjI4MTI1IEMgMTA0OS4yNjkyLC0yNDkuNDM4NTQgMTA0OS45MjE5LC0yNDkuOTEyNzMgMTA1MC42ODc1LC0yNTAuMTU2MjUgQyAxMDUwLjkyODIsLTI1MC4yNDQyOSAxMDUxLjE1MDcsLTI1MC4yNzc2MiAxMDUxLjQzNzUsLTI1MC4zMTI1IEMgMTA1Mi41ODU4LC0yNTAuNDUyMiAxMDUzLjc1NDIsLTI0OS45NzI1OSAxMDU3LjgxMjUsLTI1MC41NjI1IEMgMTA2MS44NzA4LC0yNTEuMTUyNDIgMTA2My4zNzQzLC0yNTEuMzM5NjQgMTA2NC4wOTM4LC0yNTEuNTkzNzUgQyAxMDY0LjgxMDQsLTI1MS44NDY5MSAxMDY1Ljc2ODQsLTI1Mi4xNTE4MiAxMDY2LjQwNjIsLTI1Mi42ODc1IEMgMTA2OC4zMjU5LC0yNTIuNDc1NTYgMTA3MC4xMjYyLC0yNTIuNTM2MDkgMTA3MS41NjI1LC0yNTIuNzgxMjUgQyAxMDc0LjY4MTYsLTI1My4zMTM2NSAxMDc2LjY3NDEsLTI1My43MDk4NiAxMDc4LjY1NjIsLTI1NC4wOTM3NSBDIDEwODAuNjM4MywtMjU0LjQ3NzYyIDEwODEuMTMwNSwtMjU1LjEzMzQgMTA4Mi4yMTg4LC0yNTUuMzc1IEMgMTA4My4zNDc1LC0yNTUuNjI1NjYgMTA4NC40ODksLTI1NS4yNTg3MSAxMDg4LjQ2ODgsLTI1Ni4yNSBDIDEwOTIuNDQ4MywtMjU3LjI0MTI3IDEwOTMuODk4MywtMjU3LjY2OTMgMTA5NC41OTM4LC0yNTguMDMxMjUgQyAxMDk1LjMxNiwtMjU4LjQwNzI1IDEwOTYuMzU1NSwtMjU4LjkwMTgzIDEwOTYuOTY4OCwtMjU5LjU2MjUgQyAxMDk4LjkzMTcsLTI1OS41NzQ1NCAxMTAwLjc2MjUsLTI1OS44NTM1NSAxMTAyLjE4NzUsLTI2MC40MDYyNSBDIDExMDUuMTM4NywtMjYxLjU1MDg1IDExMDcuMDYwNywtMjYyLjI3NTY3IDExMDguODc1LC0yNjMuMTU2MjUgQyAxMTEwLjMzMDcsLTI2My44NjI3NyAxMTExLjE5NDEsLTI2NC44NTgyOCAxMTExLjQwNjIsLTI2NS4xNTYyNSBDIDExMTEuNjE4NSwtMjY1LjQ1NDIgMTExMS41MDUxLC0yNjUuODg0OCAxMTExLjUzMTIsLTI2NS45MDYyNSBDIDExMTEuNTc0MiwtMjY1Ljk0MTQ4IDExMTEuODcxNiwtMjY2LjAwMDI4IDExMTIuMDMxMiwtMjY2LjM0Mzc1IEMgMTExMi44OTAyLC0yNjguMTkwODIgMTExNC4zNTQ0LC0yNzEuOTcxMzkgMTExNC40Njg4LC0yNzIuNjU2MjUgQyAxMTE0LjU4MjUsLTI3My4zMzgzOSAxMTE0LjYzNjgsLTI3NC4wMDkwMiAxMTE0LjY4NzUsLTI3NC40MDYyNSBDIDExMTQuNzE2OSwtMjc0LjYzNTc1IDExMTQuNTQwNCwtMjc1LjI4NTE1IDExMTQuNTYyNSwtMjc1LjM0Mzc1IEMgMTExNC41OTM0LC0yNzUuNDI1NzkgMTExNC44NTA4LC0yNzUuNTk0MzIgMTExNC45MDYyLC0yNzUuODQzNzUgQyAxMTE1LjE3MjUsLTI3Ny4wNDIwNiAxMTE0Ljk5NTMsLTI3OC4wNTExMSAxMTE0Ljc4MTIsLTI3OS40Njg3NSBDIDExMTQuNTY3MywtMjgwLjg4NjM4IDExMTMuODA5NiwtMjg0LjA4MzM4IDExMTMuMTU2MiwtMjg0LjkzNzUgQyAxMTEyLjQ5NzMsLTI4NS43OTkyMiAxMTExLjkzMTQsLTI4NS45NDgwMSAxMTExLjQwNjIsLTI4NS45Mzc1IHoiCisgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjAwNDU3MTRlLTIsLTMuMTI1ZS0yKSIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjc1NzgiCisgICAgICAgeD0iLTAuMDgxNjA4NzIiCisgICAgICAgd2lkdGg9IjEuMTYzMjE3NCIKKyAgICAgICB5PSItMC4yMjY1OTk0NCIKKyAgICAgICBoZWlnaHQ9IjEuNDUzMTk4OSI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMi40MzczOTkiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI3NTgwIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjc1OTQiCisgICAgICAgeD0iLTAuMDQwODA0MzU2IgorICAgICAgIHdpZHRoPSIxLjA4MTYwODciCisgICAgICAgeT0iLTAuMTEzMjk5NzIiCisgICAgICAgaGVpZ2h0PSIxLjIyNjU5OTUiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjEuMjE4Njk5NSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjc1OTYiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoNzYwNiI+CisgICAgICA8cGF0aAorICAgICAgICAgaWQ9InBhdGg3NjA4IgorICAgICAgICAgZD0iTSAxMDQ5LjIwNSwtMjgyLjI2NjcyIEwgMTA0OS4xMTUyLC0yODIuMjU4OTEgQyAxMDQ3LjcyNzgsLTI4MS4zNzQ0NiAxMDQyLjUxMTksLTI4MC42NTE3MSAxMDQyLjQ4NjIsLTI3Mi43MzU0NyBDIDEwNDIuNDYyLC0yNjUuMzEwMjIgMTA1Ny40OTkxLC0yNTUuNjQ0MDEgMTA1OS42NDI1LC0yNTQuNjQxNzIgQyAxMDYxLjM3MjcsLTI1My44MzI2MyAxMDYzLjIzNDEsLTI1My4yMzI5NiAxMDY1LjA0ODgsLTI1Mi45MjI5NyBMIDEwNjYuNDg2MiwtMjUyLjcwNDIyIEMgMTA2OC40MDU5LC0yNTIuNDkyMjggMTA3MC4yMDYyLC0yNTIuNTUyODEgMTA3MS42NDI1LC0yNTIuNzk3OTcgQyAxMDc0Ljc2MTYsLTI1My4zMzAzNyAxMDc2Ljc1NDEsLTI1My43MjY1OCAxMDc4LjczNjIsLTI1NC4xMTA0NyBDIDEwODAuNzE4MywtMjU0LjQ5NDM0IDEwODEuMjEwNSwtMjU1LjE1MDEyIDEwODIuMjk4OCwtMjU1LjM5MTcyIEMgMTA4My40Mjc1LC0yNTUuNjQyMzggMTA4NC41NjksLTI1NS4yNzU0MyAxMDg4LjU0ODgsLTI1Ni4yNjY3MiBDIDEwOTIuNTI4MywtMjU3LjI1OCAxMDkzLjk3ODIsLTI1Ny42ODYwMiAxMDk0LjY3MzgsLTI1OC4wNDc5NyBDIDEwOTUuMzk2LC0yNTguNDIzOTggMTA5Ni40MzU1LC0yNTguOTE4NTUgMTA5Ny4wNDg4LC0yNTkuNTc5MjIgQyAxMDk5LjAxMTcsLTI1OS41OTEyNyAxMTAwLjg0MjUsLTI1OS44NzAyNyAxMTAyLjI2NzUsLTI2MC40MjI5NyBDIDExMDUuMjE4NywtMjYxLjU2NzU4IDExMDcuMTQwNywtMjYyLjI5MjM5IDExMDguOTU1LC0yNjMuMTcyOTcgQyAxMTEwLjQxMDcsLTI2My44Nzk1IDExMTEuMjc0MSwtMjY0Ljg3NSAxMTExLjQ4NjIsLTI2NS4xNzI5NyBDIDExMTEuNjk4NSwtMjY1LjQ3MDkzIDExMTEuNTg1MiwtMjY1LjkwMTUyIDExMTEuNjExMiwtMjY1LjkyMjk3IEMgMTExMS42NTQyLC0yNjUuOTU4MjEgMTExMS45NTE3LC0yNjYuMDE3IDExMTIuMTExMiwtMjY2LjM2MDQ3IEMgMTExMi45NzAyLC0yNjguMjA3NTUgMTExNC40MzQ0LC0yNzEuOTg4MTEgMTExNC41NDg4LC0yNzIuNjcyOTcgQyAxMTE0LjY2MjUsLTI3My4zNTUxMiAxMTE0LjcxNjgsLTI3NC4wMjU3NCAxMTE0Ljc2NzUsLTI3NC40MjI5NyBDIDExMTQuNzk2OSwtMjc0LjY1MjQ4IDExMTQuNjIwNCwtMjc1LjMwMTg3IDExMTQuNjQyNSwtMjc1LjM2MDQ3IEMgMTExNC42NzM0LC0yNzUuNDQyNTIgMTExNC45MzA4LC0yNzUuNjExMDQgMTExNC45ODYyLC0yNzUuODYwNDcgQyAxMTE1LjI1MjUsLTI3Ny4wNTg3OSAxMTE1LjA3NTQsLTI3OC4wNjc4MyAxMTE0Ljg2MTIsLTI3OS40ODU0NyBDIDExMTQuNjQ3MywtMjgwLjkwMzExIDExMTMuODg5NiwtMjg0LjEwMDEgMTExMy4yMzYyLC0yODQuOTU0MjIgQyAxMTEyLjgxNjgsLTI4NS41MDI3OSAxMTEyLjQzNjksLTI4NS43NDY3MiAxMTEyLjA4LC0yODUuODYwNDcgQyAxMTEyLjAxMjksLTI4NS44Nzc3NiAxMTExLjk1NjEsLTI4NS45MDcyMSAxMTExLjg5MjUsLTI4NS45MjI5NyBDIDExMTEuODcxNSwtMjg1LjkyNjk1IDExMTEuODUwOCwtMjg1LjkxOTgzIDExMTEuODMsLTI4NS45MjI5NyBDIDExMTEuNTE4NCwtMjg1Ljk5ODQ3IDExMTEuMjIxNSwtMjg2LjA4MTY0IDExMTAuNjczOCwtMjg2LjE0MTcyIEMgMTEwOS42ODgzLC0yODYuMjQ5ODQgMTEwOC4yNDkxLC0yODYuNDAxMTIgMTEwNi43MDUsLTI4Ni4zOTE3MiBDIDExMDYuMTkwMywtMjg2LjM4ODU5IDExMDUuNjY3OSwtMjg2LjM0NDA4IDExMDUuMTQyNSwtMjg2LjI5Nzk3IEMgMTEwMS41ODM2LC0yODUuOTg1NjkgMTA5Ni4xMzI3LC0yODUuMzA2ODkgMTA5NC45MjM4LC0yODQuNjcyOTcgQyAxMDkzLjI5MDcsLTI4NS4wMDY5OSAxMDkwLjk3NTYsLTI4NS4yODUyIDEwODguOTg2MiwtMjg1LjE0MTcyIEMgMTA4NS45MjIyLC0yODQuOTIwNzUgMTA4NC4wMTg1LC0yODQuNzk5NTMgMTA4Mi4wOCwtMjg0LjY3Mjk3IEMgMTA4MC4xNDE2LC0yODQuNTQ2NDIgMTA4MC4zOTM5LC0yODQuMjg0MzMgMTA3OS4xNzM4LC0yODQuMjA0MjIgQyAxMDc3Ljg1NDcsLTI4NC4xMTc2MiAxMDc3LjM4NjksLTI4NC40Mjc0NyAxMDczLjYxMTIsLTI4NC4xMTA0NyBDIDEwNzAuMDY1NSwtMjgzLjgxMjc1IDEwNjQuNjMwNiwtMjgzLjExNzMgMTA2My4zOTI1LC0yODIuNDg1NDcgQyAxMDYxLjc1OTEsLTI4Mi44MTk5OCAxMDU5LjQ0NjYsLTI4My4wOTc4NiAxMDU3LjQ1NSwtMjgyLjk1NDIyIEMgMTA1NC4zOTA4LC0yODIuNzMzMjQgMTA1Mi40ODcyLC0yODIuNTgwNzggMTA1MC41NDg4LC0yODIuNDU0MjIgQyAxMDQ5Ljg4OTYsLTI4Mi40MTExOSAxMDQ5LjUwNjQsLTI4Mi4zMzAyOSAxMDQ5LjIwNSwtMjgyLjI2NjcyIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjgyNDQ4OTc2O2ZpbGw6I2JjYjc4NjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyNzYxMCIKKyAgICAgICB4PSItMC4wMjE5NDI5NzkiCisgICAgICAgd2lkdGg9IjEuMDQzODg1OSIKKyAgICAgICB5PSItMC4xMDAxNzEzNyIKKyAgICAgICBoZWlnaHQ9IjEuMjAwMzQyNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC41NzUzMDIxMyIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjc2MTIiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoNzYxNiI+CisgICAgICA8cGF0aAorICAgICAgICAgaWQ9InBhdGg3NjE4IgorICAgICAgICAgZD0iTSAyMDUuNDcwMTYsLTQwOC45NzMxOCBMIDIwNS4zODAwMywtNDA4Ljk3MTY0IEMgMjAzLjkzNDQsLTQwOC4xODU5OCAxOTguNjgwODIsLTQwNy44MjgyOSAxOTguMTAzNzgsLTM5OS45MzMwNyBDIDE5Ny41NjI0NCwtMzkyLjUyNzU0IDIxMS44ODk3MywtMzgxLjgzNzQxIDIxMy45NTgxMSwtMzgwLjY4ODI2IEMgMjE1LjYyNzc1LC0zNzkuNzYwNjIgMjE3LjQ0Mjg2LC0zNzkuMDMyNzUgMjE5LjIzMTU2LC0zNzguNTk3MTEgTCAyMjAuNjUwMjMsLTM3OC4yNzg3NyBDIDIyMi41NTA1LC0zNzcuOTMzNjMgMjI0LjM1MDY1LC0zNzcuODY4NjIgMjI1LjgwMDU0LC0zNzguMDEzMTQgQyAyMjguOTQ5MTQsLTM3OC4zMjY5OCAyMzAuOTY0NCwtMzc4LjU4MzQ1IDIzMi45Njg0MywtMzc4LjgyODM0IEMgMjM0Ljk3MjQ1LC0zNzkuMDczMjIgMjM1LjUwOTEzLC0zNzkuNjkzMTIgMjM2LjYxMTYyLC0zNzkuODU4MzMgQyAyMzcuNzU1MDQsLTM4MC4wMjk3NiAyMzguODY4MjEsLTM3OS41ODQxOSAyNDIuOTA3MzksLTM4MC4yOTU4NiBDIDI0Ni45NDYyNywtMzgxLjAwNzU1IDI0OC40MjI0NiwtMzgxLjMzMzU0IDI0OS4xNDE1OCwtMzgxLjY0NjE2IEMgMjQ5Ljg4ODIyLC0zODEuOTcwOTUgMjUwLjk1OTY0LC0zODIuMzkxOTEgMjUxLjYxNzQ3LC0zODMuMDA4MjYgQyAyNTMuNTc2NDQsLTM4Mi44ODM1NSAyNTUuNDIyMjMsLTM4My4wMzQzNSAyNTYuODgyMjcsLTM4My40ODY0NSBDIDI1OS45MDYwMywtMzg0LjQyMjcyIDI2MS44NzM4NCwtMzg1LjAxMTg5IDI2My43NDUwNywtMzg1Ljc2Mzk2IEMgMjY1LjI0NjQ1LC0zODYuMzY3MzggMjY2LjE3NzA5LC0zODcuMzAwMzIgMjY2LjQwOTQzLC0zODcuNTgyNzkgQyAyNjYuNjQxOTcsLTM4Ny44NjUyNCAyNjYuNTU4OTQsLTM4OC4zMDI2OCAyNjYuNTg2MzcsLTM4OC4zMjIyNyBDIDI2Ni42MzE3MiwtMzg4LjM1NDQzIDI2Ni45MzI1OSwtMzg4LjM5MjM1IDI2Ny4xMTU2MywtMzg4LjcyMzg4IEMgMjY4LjEwMTIsLTM5MC41MDY2NCAyNjkuODI1MTgsLTM5NC4xNzYwMyAyNjkuOTg3LC0zOTQuODUxMjYgQyAyNzAuMTQ3OTQsLTM5NS41MjM4MyAyNzAuMjQ4ODIsLTM5Ni4xODkwNCAyNzAuMzI3MDcsLTM5Ni41ODE3NyBDIDI3MC4zNzIzOCwtMzk2LjgwODY4IDI3MC4yNDE1NCwtMzk3LjQ2ODc4IDI3MC4yNjc2NywtMzk3LjUyNTcgQyAyNzAuMzA0MjEsLTM5Ny42MDU0IDI3MC41NzI3MiwtMzk3Ljc1NTU4IDI3MC42NDUzNiwtMzk4LjAwMDU1IEMgMjcwLjk5NDQ5LC0zOTkuMTc3NDEgMjcwLjg4ODEsLTQwMC4xOTYzMyAyNzAuNzczMTYsLTQwMS42MjU0NSBDIDI3MC42NTg1MywtNDAzLjA1NDU0IDI3MC4xMjUzNSwtNDA2LjI5NjU1IDI2OS41MzMwMywtNDA3LjE5NDEgQyAyNjkuMTUyODYsLTQwNy43NzA1NiAyNjguNzkwODgsLTQwOC4wNDAzNSAyNjguNDQyNzcsLTQwOC4xNzg2OSBDIDI2OC4zNzcwMywtNDA4LjIwMDYxIDI2OC4zMjI0MiwtNDA4LjIzMzk0IDI2OC4yNjAwNywtNDA4LjI1NDEgQyAyNjguMjM5NCwtNDA4LjI1OTUzIDI2OC4yMTgyNiwtNDA4LjI1Mzg3IDI2OC4xOTc3MywtNDA4LjI1ODQ1IEMgMjY3Ljg5MjE0LC00MDguMzU1NDcgMjY3LjYwMTc2LC00MDguNDU5MTIgMjY3LjA1OTU3LC00MDguNTU3MiBDIDI2Ni4wODQsLTQwOC43MzM3IDI2NC42NTg4MywtNDA4Ljk4NDg2IDI2My4xMTc4MiwtNDA5LjA4MzA0IEMgMjYyLjYwNDE2LC00MDkuMTE1NzcgMjYyLjA3OTkyLC00MDkuMTA3NzUgMjYxLjU1MjU5LC00MDkuMDk4MzUgQyAyNTcuOTgwNTgsLTQwOS4wMzQ3MiAyNTIuNDk1NjQsLTQwOC43MzcyNSAyNTEuMjQ1NTIsLTQwOC4xODkwNyBDIDI0OS42Mzk2NSwtNDA4LjYzNjA0IDI0Ny4zNDk1NSwtNDA5LjA3NDgzIDI0NS4zNTQ5OSwtNDA5LjA3MDI3IEMgMjQyLjI4MzA0LC00MDkuMDYzMjUgMjQwLjM3NTUyLC00MDkuMDc0OTMgMjM4LjQzMjkyLC00MDkuMDgzNyBDIDIzNi40OTA0MSwtNDA5LjA5MjQ4IDIzNi43MjM4NCwtNDA4LjgxMzQ1IDIzNS41MDExMiwtNDA4LjgxODUyIEMgMjM0LjE3OTIsLTQwOC44MjQwMSAyMzMuNzM0MTEsLTQwOS4xNjU2OSAyMjkuOTQ1NSwtNDA5LjExMjQ1IEMgMjI2LjM4NzY4LC00MDkuMDYyNDMgMjIwLjkxNzU0LC00MDguNzQ3MjMgMjE5LjYzODQ0LC00MDguMjAzMTggQyAyMTguMDMyMywtNDA4LjY1MDY1IDIxNS43NDQ3NywtNDA5LjA4ODkzIDIxMy43NDgwMSwtNDA5LjA4NDM2IEMgMjEwLjY3NTg2LC00MDkuMDc3MzUgMjA4Ljc2NjI2LC00MDkuMDU3ODYgMjA2LjgyMzc1LC00MDkuMDY2NjIgQyAyMDYuMTYzMTYsLTQwOS4wNjk2MSAyMDUuNzc1MjUsLTQwOS4wMTU2IDIwNS40NzAxNiwtNDA4Ljk3MzE4IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjgyNDQ4OTc2O2ZpbGw6I2JjYjc4NjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc2MjIiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzcwOCIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xOS4wOTE4ODMsNC4yNDI2NDA3KSIKKyAgICAgICB4MT0iNzc0Ljk3NjY4IgorICAgICAgIHkxPSItMjExLjg3MTA1IgorICAgICAgIHgyPSI3NTUuMTE1ODQiCisgICAgICAgeTI9Ii0yMDIuNjc4NjUiIC8+CisgICAgPG1hc2sKKyAgICAgICBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJtYXNrNzcwNCI+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDc3MDgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKKyAgICAgICAgIGQ9Ik0gNzE4LjQwODEyLC0yMjQuMzEyMTcgTCA3NTEuNjU4MTIsLTE2OC4zMTIxNyBMIDEwMjcuNjU4MSwtMTkyLjMxMjE3IEwgMTE4Ny4xNTgxLC0yNDAuNTYyMTcgTCAxMTIwLjY1ODEsLTMyMy4zMTIxNyBMIDcxOC40MDgxMiwtMjI0LjMxMjE3IHoiCisgICAgICAgICBpZD0icGF0aDc3MDYiIC8+CisgICAgPC9tYXNrPgorICAgIDxyYWRpYWxHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ4NDMwIgorICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDc5MDQiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMzI0ODMyLDAuOTAyMjI4OCwtMC45NTgyNDA3LC0wLjM1MzEyNDIsMzA1LjI5MjI3LDE5LjkwOTQ5NykiCisgICAgICAgY3g9IjE0Mi45NTgzMyIKKyAgICAgICBjeT0iMTA3LjA5MjM0IgorICAgICAgIGZ4PSIxNDIuOTU4MzMiCisgICAgICAgZnk9IjEwNy4wOTIzNCIKKyAgICAgICByPSI2Ni45ODE3NjYiIC8+CisgICAgPHJhZGlhbEdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzMTciCisgICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzkwNiIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDAzNjQ3OCwtMS4wMzQ1NDkyZS03LDEuNzEyNDYyOGUtNywxLjY2MTMxMjUsLTE2MC41MzQ4NywtOTYuMjA1MzY5KSIKKyAgICAgICBjeD0iMzE3Ljc4NzU0IgorICAgICAgIGN5PSIxMjkuNjUzNzgiCisgICAgICAgZng9IjMxNy43ODc1NCIKKyAgICAgICBmeT0iMTI5LjY1Mzc4IgorICAgICAgIHI9IjQ3Ljg2MzIxNiIgLz4KKyAgICA8cmFkaWFsR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50ODM5OCIKKyAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ3OTA4IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wNzQ3NjYxLC0wLjE1Nzc5NTcsMC4yMzgyNDI1LDMuMTMyNTE4MywtNTUwLjc3NDMyLC02NS43Mjg5MDkpIgorICAgICAgIGN4PSIzMjUuMzA4NDciCisgICAgICAgY3k9IjgwLjkwOTU1NCIKKyAgICAgICBmeD0iMzI1LjMwODQ3IgorICAgICAgIGZ5PSI4MC45MDk1NTQiCisgICAgICAgcj0iMjYuOTM3OTg4IiAvPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDgyMDkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjYyIKKyAgICAgICAgIGlkPSJwYXRoODIxMSIKKyAgICAgICAgIGQ9Ik0gNzM0LjAzMTI1LDUxOS40OTE4NiBDIDczNC4wMzEyNSw1MTkuNDkxODYgNzUwLjc4NjM4LDU1Ni41MDk5MiA3NjIuNzMyNjYsNTczLjQ0NTgxIEMgNzc0LjY3ODk1LDU5MC4zODE3IDgxNS40NTk4Miw2MjkuNDkxODYgODE1LjQ1OTgyLDYyOS40OTE4NiBMIDgxNi4wNTY5OSw0OTAuOTAyMTEiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzFhMWExYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4MjI1Ij4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIxMC42NjE5MTIiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4MjI3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjgzMzMiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjcuMTgiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4MzM1IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDgzMzgiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6emNjY2NjY2NjY2N6Y3p6IgorICAgICAgICAgaWQ9InBhdGg4MzQwIgorICAgICAgICAgZD0iTSAyNjYuMjcxODMsOTI0LjU3MTg1IEMgMjY0Ljg2NDU2LDk0My4zNzMwNyAyNjUuMTI2OTMsOTU3LjMyMjg5IDI2OC4zNTM1Nyw5NzMuODc1MTMgQyAyNzEuNTgwMjMsOTkwLjQyNzUxIDI4NC43NTk2NiwxMDE5Ljc4MjUgMjg4LjY4Nzk4LDEwMzcuMDU4OSBDIDI5Mi42MTQxOSwxMDU0LjMyNiAyOTEuMzgyMTEsMTA3NS4zNjg2IDI3Ni4yMjg1NCwxMDg4LjIwNzEgQyAyNjAuOTEwOTMsMTEwMS4xODQ2IDIzNC4xNzcyNywxMTA5LjgwNjEgMjA4LjM5NjI0LDExMDMuOTQwOSBDIDE4Mi42MTUxOCwxMDk4LjA3NTYgMTM4Ljg0NzE2LDEwNTQuNzE3NSAxMTkuODA2MDUsMTAzMy43MTI2IEMgMTAwLjY5MzksMTAxMi42MjkzIDU2LjA0NTE4Miw5MzkuODYxOTMgNDEuODY3NTA3LDkwOS40MzY4IEMgMjcuNjg5ODM1LDg3OS4wMTE2OCAyOS4yMDc5MDIsODcyLjcxODIzIDMzLjc0Nzc5Miw4NjMuOTA3MDggQyAyNC4zODEwNyw4MzkuMzg2NTggMjEuMzM0MDgsODEzLjg0MDI2IDAuMDM1MzM0NDc5LDc4OC4zMzA0NCBDIDMwLjM2MDgxNCw3OTEuNDQ0ODcgNDMuOTE1NjI0LDgxNS4yODY3NiA2MC4xNjEwMjQsODM1LjQ3MDE5IEMgNTQuNjMxMTI4LDc4Ny4zOTQxNiA0Mi4xMDYzMDksNzcxLjA1MzY4IDMxLjc4NzA3Miw3NDQuNzQ1ODkgQyA2MS43ODEzNjcsNzUwLjgyNzU0IDgyLjM2NjQzMiw3NzYuNjE4MjggOTUuNzY2ODU1LDgxNy40NTgzOSBDIDEwNS4zMjEwMSw4MTMuNTQwNDcgMTE0LjAwNDYyLDgwOC4wODU0NSAxMjUuOTU0MjcsODA4LjM5NzE5IEMgMTE0LjY1Njc3LDc2Ni43MDEzOSAxMDguMDA0OCw3MzguNDgxMzQgODkuMjY3MDE0LDcwNy4zMjcyNSBDIDE0Mi43MDg5OCw3MTIuOTk3NTcgMTcyLjkyNDA0LDc4Ny45NjY1NyAxNjguMjM4NDQsNzk1LjI4ODA1IEMgMTc4LjIxNjQxLDc5My4wNDQwNiAxODcuMjQ0MDksNzg4Ljc1NzY3IDE5OC42NzQ5Nyw3ODkuNjM2MzggQyAxODcuNDI2LDc1MS4yODkzNSAxNzcuNjI3MTUsNzEyLjc2ODQ4IDE5NS4wMTUyNiw2NzAuOTg4MTkgQyAxOTUuMDE1MjYsNjcwLjk4ODE5IDI0My4zMDIwNCw3MzYuNDI1MDcgMjQ5LjQwNDkxLDc1Ni43OTM5NyBDIDI1NS41MDc3OSw3NzcuMTYyODcgMjUwLjkyMzczLDc5NS40OTQ0OCAyNTAuOTIzNzMsNzk1LjQ5NDQ4IEMgMjUwLjkyMzczLDc5NS40OTQ0OCAyNjcuODgzMyw4MjYuNTc5NzggMjcxLjIxNzY1LDg0Ni41ODg2MiBDIDI3NC41OTA3NSw4NjYuODI5OTYgMjY3LjY4NDk2LDkwNS42OTE5MyAyNjYuMjcxODMsOTI0LjU3MTg1IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2FkYTQ2OTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvY2xpcFBhdGg+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyODM1NCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNi44MiIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjgzNTYiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGNsaXBQYXRoCisgICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgaWQ9ImNsaXBQYXRoODM1OSI+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6Y2NjY2NjY2NjY3pjenoiCisgICAgICAgICBpZD0icGF0aDgzNjEiCisgICAgICAgICBkPSJNIDI2Ni4yNzE4Myw5MjQuNTcxODUgQyAyNjQuODY0NTYsOTQzLjM3MzA3IDI2NS4xMjY5Myw5NTcuMzIyODkgMjY4LjM1MzU3LDk3My44NzUxMyBDIDI3MS41ODAyMyw5OTAuNDI3NTEgMjg0Ljc1OTY2LDEwMTkuNzgyNSAyODguNjg3OTgsMTAzNy4wNTg5IEMgMjkyLjYxNDE5LDEwNTQuMzI2IDI5MS4zODIxMSwxMDc1LjM2ODYgMjc2LjIyODU0LDEwODguMjA3MSBDIDI2MC45MTA5MywxMTAxLjE4NDYgMjM0LjE3NzI3LDExMDkuODA2MSAyMDguMzk2MjQsMTEwMy45NDA5IEMgMTgyLjYxNTE4LDEwOTguMDc1NiAxMzguODQ3MTYsMTA1NC43MTc1IDExOS44MDYwNSwxMDMzLjcxMjYgQyAxMDAuNjkzOSwxMDEyLjYyOTMgNTYuMDQ1MTgyLDkzOS44NjE5MyA0MS44Njc1MDcsOTA5LjQzNjggQyAyNy42ODk4MzUsODc5LjAxMTY4IDI5LjIwNzkwMiw4NzIuNzE4MjMgMzMuNzQ3NzkyLDg2My45MDcwOCBDIDI0LjM4MTA3LDgzOS4zODY1OCAyMS4zMzQwOCw4MTMuODQwMjYgMC4wMzUzMzQ0NzksNzg4LjMzMDQ0IEMgMzAuMzYwODE0LDc5MS40NDQ4NyA0My45MTU2MjQsODE1LjI4Njc2IDYwLjE2MTAyNCw4MzUuNDcwMTkgQyA1NC42MzExMjgsNzg3LjM5NDE2IDQyLjEwNjMwOSw3NzEuMDUzNjggMzEuNzg3MDcyLDc0NC43NDU4OSBDIDYxLjc4MTM2Nyw3NTAuODI3NTQgODIuMzY2NDMyLDc3Ni42MTgyOCA5NS43NjY4NTUsODE3LjQ1ODM5IEMgMTA1LjMyMTAxLDgxMy41NDA0NyAxMTQuMDA0NjIsODA4LjA4NTQ1IDEyNS45NTQyNyw4MDguMzk3MTkgQyAxMTQuNjU2NzcsNzY2LjcwMTM5IDEwOC4wMDQ4LDczOC40ODEzNCA4OS4yNjcwMTQsNzA3LjMyNzI1IEMgMTQyLjcwODk4LDcxMi45OTc1NyAxNzIuOTI0MDQsNzg3Ljk2NjU3IDE2OC4yMzg0NCw3OTUuMjg4MDUgQyAxNzguMjE2NDEsNzkzLjA0NDA2IDE4Ny4yNDQwOSw3ODguNzU3NjcgMTk4LjY3NDk3LDc4OS42MzYzOCBDIDE4Ny40MjYsNzUxLjI4OTM1IDE3Ny42MjcxNSw3MTIuNzY4NDggMTk1LjAxNTI2LDY3MC45ODgxOSBDIDE5NS4wMTUyNiw2NzAuOTg4MTkgMjQzLjMwMjA0LDczNi40MjUwNyAyNDkuNDA0OTEsNzU2Ljc5Mzk3IEMgMjU1LjUwNzc5LDc3Ny4xNjI4NyAyNTAuOTIzNzMsNzk1LjQ5NDQ4IDI1MC45MjM3Myw3OTUuNDk0NDggQyAyNTAuOTIzNzMsNzk1LjQ5NDQ4IDI2Ny44ODMzLDgyNi41Nzk3OCAyNzEuMjE3NjUsODQ2LjU4ODYyIEMgMjc0LjU5MDc1LDg2Ni44Mjk5NiAyNjcuNjg0OTYsOTA1LjY5MTkzIDI2Ni4yNzE4Myw5MjQuNTcxODUgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojYWRhNDY5O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXI4Mzc5IgorICAgICAgIHg9Ii0wLjE0NDEzNzkzIgorICAgICAgIHdpZHRoPSIxLjI4ODI3NiIKKyAgICAgICB5PSItMC4xMDI3ODY4OSIKKyAgICAgICBoZWlnaHQ9IjEuMjA1NTczOCI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNy4zODkyNjYiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI4MzgxIiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxjbGlwUGF0aAorICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgICAgIGlkPSJjbGlwUGF0aDgzOTIiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6emNjY2NjY2NjY2N6Y3p6IgorICAgICAgICAgaWQ9InBhdGg4Mzk0IgorICAgICAgICAgZD0iTSA3NjAuMTYzOTYsOTM1LjgzMzc3IEMgNzY2Ljk1ODA2LDk1NC43MzY1NiA3NzAuNjU3NjUsOTY5LjEzMzQ2IDc3Mi4wNTQyNiw5ODcuMDQ1NjYgQyA3NzMuNDUwODgsMTAwNC45NTggNzY4LjI3MTU4LDEwMzguODQ2NSA3NjkuMTUzOCwxMDU3LjcwMTggQyA3NzAuMDM1NTUsMTA3Ni41NDcgNzc3LjI4NzQ5LDEwOTcuODAwOCA3OTYuNDk4NDMsMTEwNi42NzA3IEMgODE1LjkxNzMsMTExNS42MzY1IDg0NS44MTc2NywxMTE2Ljg4MiA4NzAuNjE4MjcsMTEwMy41MjUxIEMgODk1LjQxODg3LDEwOTAuMTY4MSA5MjguMDE5MjksMTAzMy4xOTk2IDk0MS41OTI1MywxMDA2LjIxNjQgQyA5NTUuMjE2MzgsOTc5LjEzMjQ2IDk4MC4zNTM2LDg5MS43MTkwMyA5ODYuMjUzMzMsODU2LjQ0NzgxIEMgOTkyLjE1MzA2LDgyMS4xNzY2IDk4OC44MDM4Nyw4MTUuMTQ3MDQgOTgxLjYzNTg1LDgwNy4zOTIzMiBDIDk4NC4yNzYxNSw3NzkuNTUyMTcgOTgwLjEzNjEzLDc1Mi40NTY4OSA5OTQuNzQ1NTQsNzIwLjIwNjE0IEMgOTY0LjQ5NjUzLDczMi4wMzE4NCA5NTcuMzYzMjUsNzYwLjM2Njg0IDk0Ni40MjY2NSw3ODUuNzExMjIgQyA5MzguNDI1NzQsNzM0Ljc3ODI5IDk0Ni42MzU4MSw3MTQuNDM4MDMgOTQ5Ljc0NTU0LDY4NC40OTE4NiBDIDkyMC42ODA3OCw2OTkuMjY5NzcgOTA2Ljg4NDAzLDczMS42MDU4OCA5MDQuNzQ1NTQsNzc3LjM0OSBDIDg5My44MjE1OSw3NzYuMDQ0OCA4ODMuMzU0MSw3NzIuOTE0NzcgODcxLjE3NDExLDc3Ni42MzQ3MSBDIDg3MC45MTAwNyw3MzAuNjExMzcgODY5LjcxMDU1LDY5OS43NDUzIDg4MC4wODQ3NCw2NjIuNDI4MjIgQyA4MjYuODI5MjcsNjgzLjQ1NTA4IDgxNy4xMzc0Niw3NjkuMDIyMzIgODI0LjAzMTI1LDc3NS4yMDYxNCBDIDgxMy4xNDg0Myw3NzUuNzQxMTQgODAyLjY2MDE3LDc3My45MDg4NCA3OTEuMTc0MTEsNzc4LjA2MzI5IEMgNzkxLjgxMzAzLDczNS40OTE5NCA3OTAuOTEzNjUsNjkzLjE1NDY4IDc2MS4xNzQxMSw2NTUuMjA2MTQgQyA3NjEuMTc0MTEsNjU1LjIwNjE0IDczMC4yMTYwNSw3MzYuMTI4NDggNzI5Ljc0NTU0LDc1OC43Nzc1NyBDIDcyOS4yNzUwMyw3ODEuNDI2NjYgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzkuMTk3MTMsNzk4Ljk0MzQ1IEMgNzM5LjE5NzEzLDc5OC45NDM0NSA3MzAuNjI5MDYsODM1LjY4Mzk2IDczMi44OTg1NCw4NTcuMTc1NjggQyA3MzUuMTk0MzksODc4LjkxNzE0IDc1My4zNDE0NCw5MTYuODUxODUgNzYwLjE2Mzk2LDkzNS44MzM3NyB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhZGE0Njk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICA8L2NsaXBQYXRoPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjg0MDQiCisgICAgICAgeD0iLTAuMDkwMjY4NjU3IgorICAgICAgIHdpZHRoPSIxLjE4MDUzNzMiCisgICAgICAgeT0iLTAuMTAyNTA4NDgiCisgICAgICAgaGVpZ2h0PSIxLjIwNTAxNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iNS4zNDU3MjcyIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyODQwNiIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8Y2xpcFBhdGgKKyAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICBpZD0iY2xpcFBhdGg4NDE3Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjY2NjY2NjY2NjemN6eiIKKyAgICAgICAgIGlkPSJwYXRoODQxOSIKKyAgICAgICAgIGQ9Ik0gNzYwLjE2Mzk2LDkzNS44MzM3NyBDIDc2Ni45NTgwNiw5NTQuNzM2NTYgNzcwLjY1NzY1LDk2OS4xMzM0NiA3NzIuMDU0MjYsOTg3LjA0NTY2IEMgNzczLjQ1MDg4LDEwMDQuOTU4IDc2OC4yNzE1OCwxMDM4Ljg0NjUgNzY5LjE1MzgsMTA1Ny43MDE4IEMgNzcwLjAzNTU1LDEwNzYuNTQ3IDc3Ny4yODc0OSwxMDk3LjgwMDggNzk2LjQ5ODQzLDExMDYuNjcwNyBDIDgxNS45MTczLDExMTUuNjM2NSA4NDUuODE3NjcsMTExNi44ODIgODcwLjYxODI3LDExMDMuNTI1MSBDIDg5NS40MTg4NywxMDkwLjE2ODEgOTI4LjAxOTI5LDEwMzMuMTk5NiA5NDEuNTkyNTMsMTAwNi4yMTY0IEMgOTU1LjIxNjM4LDk3OS4xMzI0NiA5ODAuMzUzNiw4OTEuNzE5MDMgOTg2LjI1MzMzLDg1Ni40NDc4MSBDIDk5Mi4xNTMwNiw4MjEuMTc2NiA5ODguODAzODcsODE1LjE0NzA0IDk4MS42MzU4NSw4MDcuMzkyMzIgQyA5ODQuMjc2MTUsNzc5LjU1MjE3IDk4MC4xMzYxMyw3NTIuNDU2ODkgOTk0Ljc0NTU0LDcyMC4yMDYxNCBDIDk2NC40OTY1Myw3MzIuMDMxODQgOTU3LjM2MzI1LDc2MC4zNjY4NCA5NDYuNDI2NjUsNzg1LjcxMTIyIEMgOTM4LjQyNTc0LDczNC43NzgyOSA5NDYuNjM1ODEsNzE0LjQzODAzIDk0OS43NDU1NCw2ODQuNDkxODYgQyA5MjAuNjgwNzgsNjk5LjI2OTc3IDkwNi44ODQwMyw3MzEuNjA1ODggOTA0Ljc0NTU0LDc3Ny4zNDkgQyA4OTMuODIxNTksNzc2LjA0NDggODgzLjM1NDEsNzcyLjkxNDc3IDg3MS4xNzQxMSw3NzYuNjM0NzEgQyA4NzAuOTEwMDcsNzMwLjYxMTM3IDg2OS43MTA1NSw2OTkuNzQ1MyA4ODAuMDg0NzQsNjYyLjQyODIyIEMgODI2LjgyOTI3LDY4My40NTUwOCA4MTcuMTM3NDYsNzY5LjAyMjMyIDgyNC4wMzEyNSw3NzUuMjA2MTQgQyA4MTMuMTQ4NDMsNzc1Ljc0MTE0IDgwMi42NjAxNyw3NzMuOTA4ODQgNzkxLjE3NDExLDc3OC4wNjMyOSBDIDc5MS44MTMwMyw3MzUuNDkxOTQgNzkwLjkxMzY1LDY5My4xNTQ2OCA3NjEuMTc0MTEsNjU1LjIwNjE0IEMgNzYxLjE3NDExLDY1NS4yMDYxNCA3MzAuMjE2MDUsNzM2LjEyODQ4IDcyOS43NDU1NCw3NTguNzc3NTcgQyA3MjkuMjc1MDMsNzgxLjQyNjY2IDczOS4xOTcxMyw3OTguOTQzNDUgNzM5LjE5NzEzLDc5OC45NDM0NSBDIDczOS4xOTcxMyw3OTguOTQzNDUgNzMwLjYyOTA2LDgzNS42ODM5NiA3MzIuODk4NTQsODU3LjE3NTY4IEMgNzM1LjE5NDM5LDg3OC45MTcxNCA3NTMuMzQxNDQsOTE2Ljg1MTg1IDc2MC4xNjM5Niw5MzUuODMzNzcgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojYWRhNDY5O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9jbGlwUGF0aD4KKyAgPC9kZWZzPgorICA8bWV0YWRhdGEKKyAgICAgaWQ9Im1ldGFkYXRhNyI+CisgICAgPHJkZjpSREY+CisgICAgICA8Y2M6V29yaworICAgICAgICAgcmRmOmFib3V0PSIiPgorICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KKyAgICAgICAgPGRjOnR5cGUKKyAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KKyAgICAgIDwvY2M6V29yaz4KKyAgICA8L3JkZjpSREY+CisgIDwvbWV0YWRhdGE+CisgIDxnCisgICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICAgIGlkPSJsYXllcjEiCisgICAgIGlua3NjYXBlOmxhYmVsPSJTaGFkb3ciPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyMTEzNjEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDMwNC42NDI4NSw1MjYuNjQ3OSBDIDI5NC42NDI4NSw1MjcuMDA1MDUgMjg2LjQyODU3LDUyOS41MDUwNCAyODYuNDI4NTcsNTI5LjUwNTA0IEwgMjkzLjkyODU3LDUzNS41NzY0NyBMIDMwNC4yODU3MSw1MzkuMTQ3OSBMIDMyMC4zNTcxNCw1MzkuNTA1MDQgTCAzNDIuODU3MTQsNTM0LjE0NzkgTCAzNTAuNzE0MjgsNTM1LjIxOTMzIEwgMzcxLjA3MTQzLDUzMy4wNzY0NyBMIDM2MC43MTQyOCw1MzkuODYyMTkgQyAzNjYuMTczNTEsNTM4LjgzODU4IDM3OC4xMDc1Nyw1NDMuNDMxMyAzNzAuMzU3MTQsNTQ1LjIxOTMzIEMgMzY4LjYxNzE0LDU0NS42MjA3NSAzODQuMjg1NzEsNTQwLjU3NjQ4IDM4NC4yODU3MSw1NDAuNTc2NDggTCAzODYuNzg1NzEsNTM1LjkzMzYxIEwgMzkwLjM1NzE0LDUyNi42NDc5IEwgNDAxLjc4NTcxLDUyNi42NDc5IEwgNDE5Ljk5OTk5LDUyMi4wMDUwNCBMIDQyMy41NzE0Myw1MTcuMDA1MDUgTCA0MDcuNDk5OTksNTE4LjA3NjQ3IEwgMzk1LjM1NzE0LDUyMC4yMTkzMyBMIDM4MC43MTQyOCw1MTUuMjE5MzMgTCAzMTAuMDIyMTgsNTMxLjkyNzA3IEwgMzA0LjY0Mjg1LDUyNi42NDc5IHoiCisgICAgICAgaWQ9InBhdGgxMDMyNiIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY3NjY2NjY2NjY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxMC43MjY3NTMsMCwwLDEwLjcyNjc1MywtMjg4Mi4xMjM1LC00NTY1LjQ1ODMpIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvY2hlZXNlbmVzcy9Eb2N1bWVudHMvTENBMDkvbWFzY290L3R1el9uZXcucG5nIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxNDIuMTA1MjciCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjE0Mi4xMDUyNyIgLz4KKyAgPC9nPgorICA8ZworICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIyMCIKKyAgICAgaW5rc2NhcGU6bGFiZWw9Ik5ldyBFYXIiPgorICAgIDxnCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgaWQ9Imc3ODgyIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzEwODQsLTAuMTkzNzQzMywwLjI2Mjk2MywwLjk2NDgwNTgsNTAzLjY4MDI3LDEzNi40ODM5OSkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enpjYyIKKyAgICAgICAgIGlkPSJwYXRoNzg3NiIKKyAgICAgICAgIGQ9Ik0gMjQ1LjEyMjU1LDEwMC4wNTM0NCBDIDI0NS4xMjI1NSwxMDAuMDUzNDQgMTk3Ljk5NDQ0LDY4LjQwNjUxOSAxNzcuOTA3OSw2NC4yNTI1MDEgQyAxNTcuODY5OTgsNjAuMTA4NTM4IDEzOS40MzUsNjAuOTM0OTIzIDEyNS45NzQyNiw3Ny44NTk4MjQgQyAxMTIuNTEzNTIsOTQuNzg0NzI1IDExMy44OTY4NywxMzkuMTI1MDIgMTEyLjQzODcyLDE2NC44MjkzNyBDIDExMC45ODA1NywxOTAuNTMzNzIgMTE0Ljk4ODE3LDIzNS4wMDYzOCAxMzAuMDQzMzIsMjUzLjQ5NDg5IEMgMTQ1LjA5ODQ4LDI3MS45ODMzOSAxNzUuOTI5NjYsMjY3LjA3OTkxIDE3OS45NzAyNywyNzQuOTA4NTkgQyAxODIuMTgzMSwyNzkuMTk1OTUgMjQ1LjEyMjU1LDEwMC4wNTM0NCAyNDUuMTIyNTUsMTAwLjA1MzQ0IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDc5MDQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6emMiCisgICAgICAgICBpZD0icGF0aDc4NzgiCisgICAgICAgICBkPSJNIDEzNS4zNzkzNSw4Mi4wMTc4MDcgQyAxMzUuMzc5MzUsODIuMDE3ODA3IDE2MS43MjI5LDgzLjk1NjU5IDE3My4wMTI0Miw5NS45MjA5OTUgQyAxODQuNDI3MzYsMTA4LjAxODMzIDE4Ni43NDY5OSwxMTcuMjUyNTEgMTg4LjMwODI4LDEzMy42NTU1OCBDIDE4OS44NzE2NSwxNTAuMDgwNTcgMTg3LjQ1ODcxLDE2Mi4wNzM3IDE4MC40OTQ0NiwxNjkuNjkyOTIgQyAxNzMuNTMwMjEsMTc3LjMxMjE0IDE3OS40OTAxNywxODkuMjc2MjQgMTU0LjU3ODQxLDE4MS43NjM5OSBDIDEyOS42NjY2NSwxNzQuMjUxNzQgMTI3LjU0NjE3LDE1My45ODEwMSAxMjguMDYzMTgsMTM1LjQ1OTI0IEMgMTI4LjU4MDM5LDExNi45MzAyNiAxMzUuMzc5MzUsODIuMDE3ODA3IDEzNS4zNzkzNSw4Mi4wMTc4MDcgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NzkwNik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjY3NzYyIKKyAgICAgICAgIGlkPSJwYXRoNzg4MCIKKyAgICAgICAgIGQ9Ik0gMTM1LjY0OCw4MS45MjcyMTEgQyAxMzUuNjQ4LDgxLjkyNzIxMSAxMzEuMDAzMzUsOTguMjkyMjg2IDEzNi4yMzYyNSwxMTAuNDkwMzEgQyAxNDEuNzI0MTksMTIzLjI4Mjg1IDE2My40NjA1LDE1NC43NTAzOCAxNjMuNDYwNSwxNjUuMTQ1OTYgTCAxODYuMTE2NzUsMTYwLjE0NTk2IEMgMTg4LjY1ODkzLDE1My4xNzk1MiAxODkuMzI3MjcsMTQ0LjM5MzkgMTg4LjMwNDI1LDEzMy42NDU5NiBDIDE4Ni43NDI5NiwxMTcuMjQyODkgMTg0LjQzNzk1LDEwOC4wMjQ1NSAxNzMuMDIzLDk1LjkyNzIxMSBDIDE2My4zNjgxMiw4NS42OTUxNjQgMTQxLjQyOTg5LDgyLjU1MjM1NCAxMzUuNjQ4LDgxLjkyNzIxMSB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ3OTA4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgIDwvZz4KKyAgPC9nPgorICA8ZworICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIyMSIKKyAgICAgaW5rc2NhcGU6bGFiZWw9IlJlbmRlcmVkMiIKKyAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDg0NS4wMzEyNSwxMTU0Ljc3NzYgQyA4NDAuNzQ1NTQsMTE1NS40OTE5IDgxNy40MDMxLDExNTguMzk1NyA3ODcuMTc0MTEsMTE2NC43Nzc2IEMgNzU2Ljk0NTEyLDExNzEuMTU5NSA3MjkuODYwMTYsMTE2OS43NDM3IDY1MS4zODgwMywxMTgyLjEwNzIgQyA1NzEuNTM2MjUsMTE5NC42ODggNTU3LjMyMzY3LDEyMjQuNjQ5NSA1NDMuMjY1NzgsMTIyOS4xNzE1IEMgNTI4LjU2NTY0LDEyMzMuOTAwMSAzOTcuODg4MzksMTE2My4zNDkgMzk3Ljg4ODM5LDExNjMuMzQ5IEwgNDAyLjE3NDExLDEwNjkuMDYzMyBDIDQwMi4xNzQxMSwxMDY5LjA2MzMgNDg4LjA1OTYyLDEwNTIuODYyNCA1MTQuMzE2OTYsMTAzNS40OTE5IEMgNTQwLjU3NDMxLDEwMTguMTIxNCA1NTkuODk5MzQsOTg1LjgyNTg4IDU3My42MDI2OCw5NjQuMDYzMjkgQyA1ODcuMzA2MDIsOTQyLjMwMDcgNjA2LjQ1OTgyLDg5Mi42MzQ3MSA2MDYuNDU5ODIsODkyLjYzNDcxIEwgODQ1LjAzMTI1LDExNTQuNzc3NiB6IgorICAgICAgIGlkPSJwYXRoNzkxNyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjY3p6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODg4OCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDMzMi4zNDAxOSw4OTguMzg1NDkgTCAyOTkuNjA4MzgsODM3LjA4NTkzIEwgMjYxLjk5MTA0LDg4Mi4xOTIzOSBDIDI2NC4xNjc3OSw4ODMuNTA5NSAyNjcuNzY1MjksODYxLjMzNjM2IDMwNy41OTE0NCw4MTcuNzc1MzEgTCAzMzIuMzQwMTksODk4LjM4NTQ5IHoiCisgICAgICAgaWQ9InBhdGg3OTE5IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2NTgpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI4NDEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODg5Mik7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDIwMC44MTgzMyw4NjMuMDMwMTUgTCAzNDcuMTg5NDMsODExLjQxMTM2IEwgNTkxLjE0MTI3LDEwMzcuNjg1NSBMIDM0OS4zMTA3NSwxMTc3LjY5MjcgTCAxNjguMjkxNDEsMTA5MC4wMTE0IEwgMjAwLjgxODMzLDg2My4wMzAxNSB6IgorICAgICAgIGlkPSJwYXRoNzkyMyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyODMzKSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMGYwZjBmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDY0Mi44ODgzOSw2NDAuMTM0NzEgQyA2NDIuODg4MzksNjQwLjEzNDcxIDYxMy4zMzQzMyw2ODAuNzA3NzYgNTk1LjAzMTI1LDcxNC40MjA0MiBDIDU3Ni43MjgxNiw3NDguMTMzMDkgNTM2LjQxMDE2LDg0MC43NzczNiA1MjQuNjc0MTEsODg1LjQ5MTg1IEMgNTEyLjkxNDcxLDkzMC4yOTUyOSA0NjIuMTc0MTEsMTAwOS4wNjMzIDQ2Mi4xNzQxMSwxMDA5LjA2MzMgTCA1MzguMjQ1NTQsMTAyNy4yNzc2IEMgNTM4LjI0NTU0LDEwMjcuMjc3NiA1NTAuMDUyNjYsMTAxNC40NTQyIDU2OS4zMTY5Niw5ODEuMjA2MTQgQyA1ODguNTgxMjYsOTQ3Ljk1ODA2IDYyOS42NzQxMSw4NDIuNjM0NzEgNjI5LjY3NDExLDg0Mi42MzQ3MSBMIDY0Mi44ODgzOSw2NDAuMTM0NzEgeiIKKyAgICAgICBpZD0icGF0aDc5MjEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenpjY3pjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI4ODU2KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNDMwLjI4MTMxLDM4MS45NDEyMiBDIDQyMy4yMTAyNSwzODQuNzY5NjUgMTk0LjEwMDA3LDQxNC4wOTMwMyAxOTQuMTAwMDcsNDE0LjA5MzAzIEwgMTU0LjQ2MDQ2LDc3My45MjYwNyBMIDI0NC42NTg5NSw4NjYuNTY1NjggTCAyOTYuOTg0ODUsNzUyLjAxNDM4IEwgMzk3LjQ1Mjg5LDU2NS42MjI0NiBMIDQzMC4yODEzMSwzODEuOTQxMjIgeiIKKyAgICAgICBpZD0icGF0aDc5MjUiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2NjUpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gOTY5LjY3MDUxLDExNjQuMDM0NiBDIDk2OS42NzA1MSwxMTY0LjAzNDYgOTkyLjkyNjc5LDExNzUuNDI4MyAxMDA1LjczODMsMTE4NC41MTA3IEMgMTAxOC40MzU3LDExOTMuNTEyMiAxMDM1LjIxMDcsMTIwOS4xNTk4IDEwNDcuNDMwNywxMjIxLjg3MTIgQyAxMDU5LjczNjIsMTIzNC42NzE0IDEwNjcuNTQzNCwxMjQ0LjQ2OTkgMTA4OC45NjM0LDEyNDYuMDMyIEMgMTExMC4zOTU2LDEyNDcuNTk0OSAxMTQyLjI0NTgsMTIzNy4yNDQ0IDExNjIuMjU5NCwxMjIxLjM2NzggQyAxMTgyLjI3MjksMTIwNS40OTEyIDEyMDcuOTA2MywxMTUyLjEzNSAxMjA3LjkwNjMsMTE1Mi4xMzUgTCAxMDgwLjc0NTUsMTAwOS4wNjMzIgorICAgICAgIGlkPSJwYXRoNzkyNyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4NjApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAzMzEuMzQwMTksNjQxLjUwNDcxIEwgMjE2LjE3MzY3LDgzNS4zNjQ2NyBMIDI2MC4yMTUzLDkyNS45NjI2NSBMIDM1Ny43OTYwMyw3MzIuMjE1MzkgTCAzMzEuMzQwMTksNjQxLjUwNDcxIHoiCisgICAgICAgaWQ9InBhdGg3OTI5IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2NDIpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPGcKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBpZD0iZzc5MzEiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTM0NDg2LDAuMTE0MjgwMiwtMC4xMTQyODAyLDAuOTkzNDQ4NiwtOS4yNDMyNCw1ODguMDkwNTQpIgorICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTM0Ny44OTA2MyIKKyAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0yOC4yNTU3NzkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojYmNiNzg2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBkPSJNIDEwNDkuMjA1LC0yODIuMjY2NzIgTCAxMDQ5LjExNTIsLTI4Mi4yNTg5MSBDIDEwNDcuNzI3OCwtMjgxLjM3NDQ2IDEwNDIuNTExOSwtMjgwLjY1MTcxIDEwNDIuNDg2MiwtMjcyLjczNTQ3IEMgMTA0Mi40NjIsLTI2NS4zMTAyMiAxMDU3LjQ5OTEsLTI1NS42NDQwMSAxMDU5LjY0MjUsLTI1NC42NDE3MiBDIDEwNjEuMzcyNywtMjUzLjgzMjYzIDEwNjMuMjM0MSwtMjUzLjIzMjk2IDEwNjUuMDQ4OCwtMjUyLjkyMjk3IEwgMTA2Ni40ODYyLC0yNTIuNzA0MjIgQyAxMDY4LjQwNTksLTI1Mi40OTIyOCAxMDcwLjIwNjIsLTI1Mi41NTI4MSAxMDcxLjY0MjUsLTI1Mi43OTc5NyBDIDEwNzQuNzYxNiwtMjUzLjMzMDM3IDEwNzYuNzU0MSwtMjUzLjcyNjU4IDEwNzguNzM2MiwtMjU0LjExMDQ3IEMgMTA4MC43MTgzLC0yNTQuNDk0MzQgMTA4MS4yMTA1LC0yNTUuMTUwMTIgMTA4Mi4yOTg4LC0yNTUuMzkxNzIgQyAxMDgzLjQyNzUsLTI1NS42NDIzOCAxMDg0LjU2OSwtMjU1LjI3NTQzIDEwODguNTQ4OCwtMjU2LjI2NjcyIEMgMTA5Mi41MjgzLC0yNTcuMjU4IDEwOTMuOTc4MiwtMjU3LjY4NjAyIDEwOTQuNjczOCwtMjU4LjA0Nzk3IEMgMTA5NS4zOTYsLTI1OC40MjM5OCAxMDk2LjQzNTUsLTI1OC45MTg1NSAxMDk3LjA0ODgsLTI1OS41NzkyMiBDIDEwOTkuMDExNywtMjU5LjU5MTI3IDExMDAuODQyNSwtMjU5Ljg3MDI3IDExMDIuMjY3NSwtMjYwLjQyMjk3IEMgMTEwNS4yMTg3LC0yNjEuNTY3NTggMTEwNy4xNDA3LC0yNjIuMjkyMzkgMTEwOC45NTUsLTI2My4xNzI5NyBDIDExMTAuNDEwNywtMjYzLjg3OTUgMTExMS4yNzQxLC0yNjQuODc1IDExMTEuNDg2MiwtMjY1LjE3Mjk3IEMgMTExMS42OTg1LC0yNjUuNDcwOTMgMTExMS41ODUyLC0yNjUuOTAxNTIgMTExMS42MTEyLC0yNjUuOTIyOTcgQyAxMTExLjY1NDIsLTI2NS45NTgyMSAxMTExLjk1MTcsLTI2Ni4wMTcgMTExMi4xMTEyLC0yNjYuMzYwNDcgQyAxMTEyLjk3MDIsLTI2OC4yMDc1NSAxMTE0LjQzNDQsLTI3MS45ODgxMSAxMTE0LjU0ODgsLTI3Mi42NzI5NyBDIDExMTQuNjYyNSwtMjczLjM1NTEyIDExMTQuNzE2OCwtMjc0LjAyNTc0IDExMTQuNzY3NSwtMjc0LjQyMjk3IEMgMTExNC43OTY5LC0yNzQuNjUyNDggMTExNC42MjA0LC0yNzUuMzAxODcgMTExNC42NDI1LC0yNzUuMzYwNDcgQyAxMTE0LjY3MzQsLTI3NS40NDI1MiAxMTE0LjkzMDgsLTI3NS42MTEwNCAxMTE0Ljk4NjIsLTI3NS44NjA0NyBDIDExMTUuMjUyNSwtMjc3LjA1ODc5IDExMTUuMDc1NCwtMjc4LjA2NzgzIDExMTQuODYxMiwtMjc5LjQ4NTQ3IEMgMTExNC42NDczLC0yODAuOTAzMTEgMTExMy44ODk2LC0yODQuMTAwMSAxMTEzLjIzNjIsLTI4NC45NTQyMiBDIDExMTIuODE2OCwtMjg1LjUwMjc5IDExMTIuNDM2OSwtMjg1Ljc0NjcyIDExMTIuMDgsLTI4NS44NjA0NyBDIDExMTIuMDEyOSwtMjg1Ljg3Nzc2IDExMTEuOTU2MSwtMjg1LjkwNzIxIDExMTEuODkyNSwtMjg1LjkyMjk3IEMgMTExMS44NzE1LC0yODUuOTI2OTUgMTExMS44NTA4LC0yODUuOTE5ODMgMTExMS44MywtMjg1LjkyMjk3IEMgMTExMS41MTg0LC0yODUuOTk4NDcgMTExMS4yMjE1LC0yODYuMDgxNjQgMTExMC42NzM4LC0yODYuMTQxNzIgQyAxMTA5LjY4ODMsLTI4Ni4yNDk4NCAxMTA4LjI0OTEsLTI4Ni40MDExMiAxMTA2LjcwNSwtMjg2LjM5MTcyIEMgMTEwNi4xOTAzLC0yODYuMzg4NTkgMTEwNS42Njc5LC0yODYuMzQ0MDggMTEwNS4xNDI1LC0yODYuMjk3OTcgQyAxMTAxLjU4MzYsLTI4NS45ODU2OSAxMDk2LjEzMjcsLTI4NS4zMDY4OSAxMDk0LjkyMzgsLTI4NC42NzI5NyBDIDEwOTMuMjkwNywtMjg1LjAwNjk5IDEwOTAuOTc1NiwtMjg1LjI4NTIgMTA4OC45ODYyLC0yODUuMTQxNzIgQyAxMDg1LjkyMjIsLTI4NC45MjA3NSAxMDg0LjAxODUsLTI4NC43OTk1MyAxMDgyLjA4LC0yODQuNjcyOTcgQyAxMDgwLjE0MTYsLTI4NC41NDY0MiAxMDgwLjM5MzksLTI4NC4yODQzMyAxMDc5LjE3MzgsLTI4NC4yMDQyMiBDIDEwNzcuODU0NywtMjg0LjExNzYyIDEwNzcuMzg2OSwtMjg0LjQyNzQ3IDEwNzMuNjExMiwtMjg0LjExMDQ3IEMgMTA3MC4wNjU1LC0yODMuODEyNzUgMTA2NC42MzA2LC0yODMuMTE3MyAxMDYzLjM5MjUsLTI4Mi40ODU0NyBDIDEwNjEuNzU5MSwtMjgyLjgxOTk4IDEwNTkuNDQ2NiwtMjgzLjA5Nzg2IDEwNTcuNDU1LC0yODIuOTU0MjIgQyAxMDU0LjM5MDgsLTI4Mi43MzMyNCAxMDUyLjQ4NzIsLTI4Mi41ODA3OCAxMDUwLjU0ODgsLTI4Mi40NTQyMiBDIDEwNDkuODg5NiwtMjgyLjQxMTE5IDEwNDkuNTA2NCwtMjgyLjMzMDI5IDEwNDkuMjA1LC0yODIuMjY2NzIgeiIKKyAgICAgICAgIGlkPSJwYXRoNzkzMyIgLz4KKyAgICAgIDxnCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NjE2KSIKKyAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3NjEwKTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBpZD0iZzc5MzUiCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NzU3MTIsLTYuOTY1NDI3N2UtMiw2Ljk2NTQyNzdlLTIsMC45OTc1NzEyLDg3Mi43MjA2MiwxNDAuMDI1MDIpIj4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3NzY3Njc3Njc3NzY2NzY3NzY2Nzc2Nzc3NjYyIKKyAgICAgICAgICAgaWQ9InBhdGg3OTM3IgorICAgICAgICAgICBkPSJNIDIyOS45NDI2MiwtNDA5LjEyMjY4IEMgMjI2LjM4NDgxLC00MDkuMDcyNjcgMjIwLjkxODQyLC00MDguNzYyNTkgMjE5LjYzOTI4LC00MDguMjE4NTQgQyAyMTguMDMzMTksLTQwOC42NjYwMSAyMTUuNzM2MTIsLTQwOS4wOTk4NSAyMTMuNzM5MzMsLTQwOS4wOTUyOCBDIDIxMC42NjczNCwtNDA5LjA4ODI2IDIwOC43NzQ2NCwtNDA5LjA4NjUxIDIwNi44MzIwNiwtNDA5LjA5NTI4IEMgMjA2LjE3MTU5LC00MDkuMDk4MjcgMjA1Ljc4NDQ3LC00MDkuMDI4MTEgMjA1LjQ3OTM5LC00MDguOTg1NjkgQyAyMDUuNDc5MzksLTQwOC45ODU2OSAyMDUuNDc5MzksLTQwNy44ODk3NiAyMDUuNDc5MzksLTQwNy44ODk3NiBDIDIwNS41OTkxMSwtNDA4LjA2OTIzIDIwNS44NzE5MSwtNDA4LjU4MDIyIDIwNi40MjkxNCwtNDA4LjY1NjkxIEMgMjA3LjE3NjcyLC00MDguNzU5OCAyMTEuNTk4NDIsLTQwOC44MDgxNCAyMTMuNzM5MzMsLTQwOC43NjY1MSBDIDIxNS41MTM5MywtNDA4LjczMTk4IDIxOC4xOTQ1NiwtNDA4LjQ5MjI0IDIyMC4xMjg1NCwtNDA3LjgwNzU2IEMgMjIwLjQ0OTk0LC00MDcuNjkzNzggMjIwLjc0Nzc5LC00MDcuNTMzNzggMjIxLjAyMDczLC00MDcuMzk2NTkgQyAyMjIuOTg0MTUsLTQwNi40MDk2NiAyMjguOTY0MDksLTQwMy4wOTUwNSAyMjguOTY0MDksLTQwMy4wOTUwNSBDIDIyOC45NjQwOSwtNDAzLjA5NTA1IDIyMi4zMzEzNCwtNDA3LjA0MjczIDIyMS40ODEyMiwtNDA3LjUzMzU4IEMgMjIxLjI3NzkxLC00MDcuNjUwOTcgMjIwLjkwNjU4LC00MDcuNzkxMjcgMjIwLjQ0NTEzLC00MDcuOTQ0NTYgQyAyMjEuNjY1NzYsLTQwOC4zOTIzNSAyMjUuNTIxMSwtNDA4LjU2NDI3IDIyOC4yNzMzNiwtNDA4LjY1NjkxIEMgMjMxLjI5Nzg2LC00MDguNzU4NzMgMjMxLjYyMTEyLC00MDguNzQ2NSAyMzMuNjg0MDUsLTQwOC40NjUxMiBDIDIzNS44MTMzNiwtNDA4LjE3NDY5IDIzNy4wMjI1NiwtNDA3Ljg2MjM2IDIzNy4wMjI1NiwtNDA3Ljg2MjM2IEMgMjM3LjAyMjU1LC00MDcuODYyMzYgMjM2Ljk0NDIsLTQwOC41MDM1NCAyMzguMDU4NjUsLTQwOC42NTY5MSBDIDIzOC44MDYyMiwtNDA4Ljc1OTggMjQzLjIyNzk0LC00MDguODA4MTQgMjQ1LjM2ODg0LC00MDguNzY2NTEgQyAyNDcuNDM4MzQsLTQwOC43MjYyNSAyNTAuNzM0ODksLTQwOC4zNTkzNSAyNTIuNjUwMjQsLTQwNy4zOTY1OSBDIDI1My42NTM1NiwtNDA2Ljg5MjI2IDI1NS42ODU4OCwtNDA1LjgyNzk2IDI1Ny40NDU1OSwtNDA0Ljg2MDg4IEwgMjU3LjU0MTIsLTQwNC44ODAzMSBDIDI1Ny41NDEyLC00MDQuODgwMzEgMjUzLjk2MDg2LC00MDcuMDQyNzMgMjUzLjExMDczLC00MDcuNTMzNTggQyAyNTIuOTA3NDIsLTQwNy42NTA5NyAyNTIuNTM2MSwtNDA3Ljc5MTI3IDI1Mi4wNzQ2NCwtNDA3Ljk0NDU2IEMgMjUzLjI5NTI2LC00MDguMzkyMzUgMjU3LjEyMTgzLC00MDguNTY0MjcgMjU5Ljg3NDA5LC00MDguNjU2OTEgQyAyNjIuODk4NTksLTQwOC43NTg3MyAyNjMuMjIxODQsLTQwOC43NDY1IDI2NS4yODQ3OCwtNDA4LjQ2NTEyIEMgMjY3LjIzNzk0LC00MDguMTk4NzIgMjY4LjI5NzcsLTQwNy45MzUwNiAyNjguNDc5MzksLTQwNy44ODk3NiBDIDI2OC40NzkzOSwtNDA3Ljg4OTc2IDI2OC40NTIzLC00MDguMjAxMjIgMjY4LjQ1MjMsLTQwOC4yMDEyMiBDIDI2OC4wNDMyNywtNDA4LjMzNzY3IDI2Ny43MzgwNiwtNDA4LjQzNDU3IDI2Ny4wNTE5MiwtNDA4LjU1ODcgQyAyNjUuNzUxMTEsLTQwOC43OTQwMyAyNjMuNjUyOCwtNDA5LjE2MDI2IDI2MS41NDMzNSwtNDA5LjEyMjY4IEMgMjU3Ljk3MTQsLTQwOS4wNTkwNCAyNTIuNDkwMDcsLTQwOC43NjY3MiAyNTEuMjQwMDEsLTQwOC4yMTg1NCBDIDI0OS42MzQxOCwtNDA4LjY2NTQ5IDI0Ny4zNjMzOSwtNDA5LjA5OTg0IDI0NS4zNjg4NCwtNDA5LjA5NTI4IEMgMjQyLjI5Njg1LC00MDkuMDg4MjYgMjQwLjM3NTM2LC00MDkuMDg2NTEgMjM4LjQzMjc5LC00MDkuMDk1MjggQyAyMzYuNDkwMjMsLTQwOS4xMDQwNiAyMzYuNzIwMTEsLTQwOC44MTYyMSAyMzUuNDk3MjEsLTQwOC44MjEzIEMgMjM0LjE3NTMsLTQwOC44MjY4IDIzMy43MzEwOSwtNDA5LjE3NTkzIDIyOS45NDI2MiwtNDA5LjEyMjY4IEMgMjI5Ljk0MjYyLC00MDkuMTIyNjggMjI5Ljk0MjYyLC00MDkuMTIyNjggMjI5Ljk0MjYyLC00MDkuMTIyNjgiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg3OTM5IgorICAgICAgICAgICBkPSJNIDIwNi4xOTg5LC00MDcuNDc4NzggQyAyMDguMTE5MTEsLTQwNi42NjE3MiAyMTAuNzc2MDUsLTQwNS4yODU5NSAyMTIuMzU3ODcsLTQwNC4wODEzOSBDIDIxMy45Mzk3MSwtNDAyLjg3NjgzIDIxNS4yNjU0NCwtNDAyLjMwNzcxIDIxNy45MTI0NiwtNDAwLjE2MzQ0IEMgMjE4Ljc5ODAzLC0zOTkuNDQ2MDYgMjE5LjY2MTExLC0zOTguODEzNTkgMjIwLjUwNDM5LC0zOTguMjQxNyBMIDIyMS4wNDQ5NiwtMzk4LjQzMTgxIEMgMjIwLjMzMTczLC0zOTguOTE1MiAyMTkuNTc3MiwtMzk5LjQ1MjEyIDIxOC43NzU4NywtNDAwLjA1Mzg0IEMgMjE1Ljk1MzY0LC00MDIuMTczMDUgMjE1LjE0OTMyLC00MDIuODYzNTcgMjEyLjc2MDgsLTQwNC4zMjc5OCBDIDIxMC4zNzIyNiwtNDA1Ljc5MjM4IDIwOC42NjEzMiwtNDA2LjY5Mzc0IDIwNi4xOTg5LC00MDcuNDc4NzggQyAyMDYuMTk4OSwtNDA3LjQ3ODc4IDIwNi4xOTg5LC00MDcuNDc4NzggMjA2LjE5ODksLTQwNy40Nzg3OCIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc2Njc3NjYyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg3OTQxIgorICAgICAgICAgICBkPSJNIDIzNy43OTk2MywtNDA3LjQ3ODc4IEMgMjM5LjcxOTg0LC00MDYuNjYxNzIgMjQyLjQwNTU3LC00MDUuMjg1OTUgMjQzLjk4NzM4LC00MDQuMDgxMzkgQyAyNDQuODAwNDUsLTQwMy40NjIyMyAyNDUuNTQ1ODcsLTQwMy4wMTA5NyAyNDYuNDM3ODQsLTQwMi40MjczOCBMIDI0Ny4wODY4NCwtNDAyLjU0NDA0IEMgMjQ2LjI4ODUzLC00MDMuMTIwNDEgMjQ1LjUxNTA3LC00MDMuNjM4MzkgMjQ0LjM5MDMxLC00MDQuMzI3OTggQyAyNDIuMDAxNzcsLTQwNS43OTIzOCAyNDAuMjYyMDUsLTQwNi42OTM3NCAyMzcuNzk5NjMsLTQwNy40Nzg3OCBDIDIzNy43OTk2MywtNDA3LjQ3ODc4IDIzNy43OTk2MywtNDA3LjQ3ODc4IDIzNy43OTk2MywtNDA3LjQ3ODc4IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY3NjYyIgLz4KKyAgICAgIDwvZz4KKyAgICAgIDxnCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NjA2KSIKKyAgICAgICAgIGlkPSJnNzk0MyI+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNzU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3NTc4KTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICAgIGQ9Ik0gMTA1Ni4yNSwtMjc4LjgwNDgxIEMgMTA2MC4zOTQ2LC0yODAuMjgzNTggMTA2Ni4yNSwtMjc1LjY3OTgxIDEwNjYuMjUsLTI3NS42Nzk4MSBDIDEwNjcuMTQ5LC0yNzUuMzk4ODkgMTA2OC45NzUxLC0yNzYuNTc0MjggMTA2OC44NzQzLC0yNzcuMzY1OTUgQyAxMDY4Ljg3NDMsLTI3Ny4zNjU5NSAxMDY3LjMyNCwtMjc5LjIyNjU3IDEwNjguNSwtMjgwLjMwNDgxIEMgMTA2OS42NzYsLTI4MS4zODMwNSAxMDczLjc5NiwtMjc4Ljc5NzQzIDEwNzYsLTI3OC42Nzk4MSBDIDEwNzguMjA0LC0yNzguNTYyMTkgMTA4MS41NjIxLC0yNzguOTA5MjIgMTA4MywtMjc5LjQyOTgxIEMgMTA4NC40Mzc5LC0yNzkuOTUwNCAxMDg0LjExMjksLTI4MC44NTQ0IDEwODUuNjI1LC0yODEuMTc5ODEgQyAxMDg3LjEzNzEsLTI4MS41MDUyMiAxMDkwLjc0MzksLTI4MC4xNDIyNyAxMDkyLjY4NTUsLTI4MC4wMTA5OCBDIDEwOTQuNjI3MSwtMjc5Ljg3OTY5IDEwOTcuMzMzNiwtMjc5LjY3NjcxIDEwOTguNSwtMjgwLjE3OTgxIEMgMTA5OS42NjY0LC0yODAuNjgyOTEgMTA5OC42NzgyLC0yODEuMzM5MDIgMTEwMC4zNzUsLTI4Mi4wNTQ4MSBDIDExMDIuMDcxOCwtMjgyLjc3MDYgMTEwOC4xMzUyLC0yODMuMDExNDMgMTExMCwtMjgyLjE3OTgxIEMgMTExMS44NjQ4LC0yODEuMzQ4MTkgMTExMS44MDk5LC0yODEuNjYwNjEgMTExMi42MjUsLTI3OS4xNzk4MSBDIDExMTMuNDQwMSwtMjc2LjY5OTAxIDExMjAuMDY0OCwtMjc0LjAxNjk2IDExMTEuNSwtMjY1LjgwNDgxIEMgMTEwMi45MzUyLC0yNTcuNTkyNjYgMTA1Mi4xMjIxLC0yNTIuMDE4ODcgMTA0NS44NzUsLTI2My4wNTQ4MSBDIDEwMzkuNjI3OSwtMjc0LjA5MDc1IDEwNTIuMTA1NCwtMjc3LjMyNjA0IDEwNTYuMjUsLTI3OC44MDQ4MSB6IgorICAgICAgICAgICBpZD0icGF0aDc5NDUiCisgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6enp6enp6IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzU5NCk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICBkPSJNIDEwNTguNSwtMjc1LjQyOTgxIEMgMTA2Mi42NDQ2LC0yNzYuOTA4NTggMTA2OC41LC0yNzIuMzA0ODEgMTA2OC41LC0yNzIuMzA0ODEgQyAxMDY5LjM5OSwtMjcyLjAyMzg5IDEwNzEuMjI1MSwtMjczLjE5OTI4IDEwNzEuMTI0MywtMjczLjk5MDk1IEMgMTA3MS4xMjQzLC0yNzMuOTkwOTUgMTA2OS41NzQsLTI3NS44NTE1NyAxMDcwLjc1LC0yNzYuOTI5ODEgQyAxMDcxLjkyNiwtMjc4LjAwODA1IDEwNzYuMDQ2LC0yNzUuNDIyNDMgMTA3OC4yNSwtMjc1LjMwNDgxIEMgMTA4MC40NTQsLTI3NS4xODcxOSAxMDgzLjgxMjEsLTI3NS41MzQyMiAxMDg1LjI1LC0yNzYuMDU0ODEgQyAxMDg2LjY4NzksLTI3Ni41NzU0IDEwODYuMzYyOSwtMjc3LjQ3OTQgMTA4Ny44NzUsLTI3Ny44MDQ4MSBDIDEwODkuMzg3MSwtMjc4LjEzMDIyIDEwOTIuOTkzOSwtMjc2Ljc2NzI3IDEwOTQuOTM1NSwtMjc2LjYzNTk4IEMgMTA5Ni44NzcxLC0yNzYuNTA0NjkgMTA5OS41ODM2LC0yNzYuMzAxNzEgMTEwMC43NSwtMjc2LjgwNDgxIEMgMTEwMS45MTY0LC0yNzcuMzA3OTEgMTEwMC45MjgyLC0yNzcuOTY0MDIgMTEwMi42MjUsLTI3OC42Nzk4MSBDIDExMDQuMzIxOCwtMjc5LjM5NTYgMTExMC4zODUyLC0yNzkuNjM2NDMgMTExMi4yNSwtMjc4LjgwNDgxIEMgMTExNC4xMTQ4LC0yNzcuOTczMTkgMTExNC4wNTk5LC0yNzguMjg1NjEgMTExNC44NzUsLTI3NS44MDQ4MSBDIDExMTUuNjkwMSwtMjczLjMyNDAxIDExMjIuMzE0OCwtMjcwLjY0MTk2IDExMTMuNzUsLTI2Mi40Mjk4MSBDIDExMDUuMTg1MiwtMjU0LjIxNzY2IDEwNTQuMzcyMSwtMjQ4LjY0Mzg3IDEwNDguMTI1LC0yNTkuNjc5ODEgQyAxMDQxLjg3NzksLTI3MC43MTU3NSAxMDU0LjM1NTQsLTI3My45NTEwNCAxMDU4LjUsLTI3NS40Mjk4MSB6IgorICAgICAgICAgICBpZD0icGF0aDc5NDciCisgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6enp6enp6IiAvPgorICAgICAgPC9nPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMTAxNDE0O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDYyOC4yNDU1MywzNDcuOTkxODUgQyA2MjQuNDQxMSwzMjIuNzI3NjIgNjExLjQzNTgxLDI5Ny4zNTM4MyA2MTEuMDg4NzMsMjcyLjQ2NjYyIEMgNjEwLjkwMjQ3LDI1OS4xMTExIDYxNC4zNjE1OCwyNDUuODk1NzEgNjI0Ljg0NDI2LDIzMi45MTI1NyBDIDY2MS4xOTEyOCwxNjcuNjE2NzQgNzQxLjc4NTE3LDE0OC4yMTc4OSA4MTAuNzc4OTIsMTQxLjQ0NzE1IEMgODk3LjcwMTMxLDEzMC40MzAzNSA5OTUuNjkxNTksMTU5LjM4NzIyIDEwNDQuMTUwMywyMzYuODQ4NDMgQyAxMDk4LjI3NDMsMzEyLjU4MTczIDExMDAuODI1LDQwOS4zODc1NSAxMTI0Ljc2MjMsNDk2LjM3NjM4IEMgMTE1NC4yMDAxLDYyMy41MDM5OCAxMTc5LjU0MTQsNzUyLjU5MDUyIDExODUuMTU0NSw4ODMuMjI2NzMgQyAxMTgyLjA5MTEsOTYxLjQwODU4IDExNzYuNzI4MiwxMDQ4LjQxMDkgMTEyNC42NTEzLDExMTEuMzYwOSBDIDEwNzYuNjI0OCwxMTYxLjcxODMgMTAwMS44NjQ5LDExNjEuNDEzOSA5MzcuNTgxNDUsMTE3MC4zNjMyIEMgODQ3LjAyNjA2LDExNzUuMDE4MiA3NTMuMjI5OTIsMTE1NC4yMTc0IDY3NS43OTc1NSwxMTA2LjE2NSBDIDYxMS4wMjE5MSwxMDY4LjIyNSA1ODAuMDY3MzYsOTkyLjY4NjMzIDU3OC41MTgxNSw5MjAuMTQ1MzggQyA1NzAuMTI4OTgsODQwLjI3MDIyIDYwNC45MDk2Nyw3NjYuMzM2ODcgNjMwLjEzODU1LDY5Mi45ODU3NyBDIDYzNy42MDkxNiw2MTAuMjI0NyA2MzkuNTUxNDEsNTI2LjczODAyIDYzOS43OTE4OSw0NDMuNjAwOTMgQyA2MzguOTU1MDcsNDExLjQwNTQ5IDYzMi43MDIzNiwzNzkuNzgzNiA2MjguMjQ1NTMsMzQ3Ljk5MTg1IHoiCisgICAgICAgaWQ9InBhdGg3OTQ5IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjY2NjY2NjY2NjY2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg5NDApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAzMTEuODM0MDksNDE1LjQzMTU1IEwgMzIxLjczMzU5LDUzNy4wNTM5MiBMIDI2MS42Mjk1MSw2NzMuNTI1NTMgTCAyNzcuMTg1ODYsODQ4LjE4MDkgQyAyOTIuNzk5MTIsOTEwLjA2MDEgMzA5LjM3MTMxLDk0Ni44NDk5NSAzNTEuNTYyMDEsOTY1LjIzNDczIEMgMzU1Ljg4MTEyLDkyOC45OTQ3NSAzMTIuOTUwNDksODIyLjI3NDg1IDMxMi4zMTkzNyw3NzYuMTE0ODkgQyAzMTEuNjg3OTIsNzI5LjkzMDQ0IDMyMy4xNDk3MSw2NjcuNTA3MDMgMzQyLjk5NzA0LDYxNy44MTg0MiBDIDM2My4wNDUzOSw1NjcuNjI2NTQgMzc5Ljg5Mzc4LDU3Mi45NzIgMzg1LjEyMTkzLDUyNS4yMjU0OSBDIDM5MC4zNTAwOCw0NzcuNDc4OTggMzY3LjY5NTUzLDM3NS44MzM1NyAzNjcuNjk1NTMsMzc1LjgzMzU3IEwgMzExLjgzNDA5LDQxNS40MzE1NSB6IgorICAgICAgIGlkPSJwYXRoNzk1MSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2Njenp6Y2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODYxNikiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDg5NzApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDEwMTAuMDMxMiw2NTUuNDkxODYgQyAxMDEwLjAzMTIsNjU1LjQ5MTg2IDEwMjYuNzg2NCw2OTIuNTA5OTIgMTAzOC43MzI3LDcwOS40NDU4MSBDIDEwNTAuNjc4OSw3MjYuMzgxNyAxMDkxLjQ1OTgsNzY1LjQ5MTg2IDEwOTEuNDU5OCw3NjUuNDkxODYgTCAxMTQ0LjA1Nyw2MzcuOTAyMTEiCisgICAgICAgaWQ9InBhdGg3OTUzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMDc5OTk5OTg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODgyMik7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDczMC4zMTk5OCw1MzYuNTY4NjQgQyA3MzAuMzE5OTgsNTQ1LjA1MzkyIDc3Mi44Njc3Miw1OTUuMDM2NjcgNzcyLjg2NzcyLDU5NS4wMzY2NyBMIDc4NS40NzQzMSw1NjYuMjY3MTMgTCA3MzAuMzE5OTgsNTM2LjU2ODY0IHoiCisgICAgICAgaWQ9InBhdGg3OTU1IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MjA5KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8ZworICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MC4wMzEyNSw3My44NDM5NjQpIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGlkPSJnNzk1NyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOTk4KSI+CisgICAgICA8ZworICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE3NC4wMzEyNSw2Mi4xNTYwMzYpIgorICAgICAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjM2NzcpIgorICAgICAgICAgaWQ9Imc3OTU5Ij4KKyAgICAgICAgPGcKKyAgICAgICAgICAgaWQ9Imc3OTYxIgorICAgICAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyMzc4NSkiPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6enp6eiIKKyAgICAgICAgICAgICBpZD0icGF0aDc5NjMiCisgICAgICAgICAgICAgZD0iTSA0MjUuODgyNDQsNDc2Ljk5MTg2IEMgNDM2LjY4Nzg3LDQ3NS41MTMyIDQ1MC42MjY0NSw0ODAuMzQ2MzcgNDcwLjUyNTMsNDgwLjIwNjE0IEMgNDkwLjQyNDE1LDQ4MC4wNjU5MSA1MjcuOTc4NTIsNDYzLjI5NDkyIDU1Mi42NjgxNSw0NjMuMDYzMjggQyA1NzcuMzU3NzgsNDYyLjgzMTY0IDYxNS40MTk4NSw0NzUuMzQ3MzQgNjMxLjk1Mzg3LDQ3OC4wNjMyOCBDIDY0OC40ODc4OSw0ODAuNzc5MjIgNjU0LjgwMjE5LDQ3Ny45MDQ3NiA2NTkuNDUzODYsNDg1LjkyMDQzIEMgNjY0LjEwNTUzLDQ5My45MzYxIDY2MS4zODA1Nyw0OTYuNjY3NjcgNjQ5LjA5NjcyLDUwNi42MzQ3MiBDIDYzNi44MTI4Nyw1MTYuNjAxNzcgNjA4LjMwNzA0LDUxOS4yNzEwNCA1ODMuMDI1MjksNTE5LjQ5MTg2IEMgNTU3Ljc0Mjk1LDUxOS43MTI2OCA1MTIuNjQ0LDUyNi41NzAzOCA0ODcuNjY4MTUsNTIzLjQyMDQyIEMgNDYyLjY5MjMsNTIwLjI3MDQ2IDQzMC43MzA1OSw1MTUuNTk3NzUgNDE4LjczOTU4LDUwNS41NjMyOCBDIDQwNi43NDg1Nyw0OTUuNTI4ODEgMzk4Ljg4ODc0LDQ4OC44MzE0NiA0MDEuMjM5NTgsNDgxLjYzNDcxIEMgNDAzLjU5MDQyLDQ3NC40Mzc5NiA0MTUuMDc3MDEsNDc4LjQ3MDUyIDQyNS44ODI0NCw0NzYuOTkxODYgeiIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxyZWN0CisgICAgICAgICAgICAgeT0iNDEyLjYwMzEyIgorICAgICAgICAgICAgIHg9IjM0My42NTM5IgorICAgICAgICAgICAgIGhlaWdodD0iMTgxLjAxOTM1IgorICAgICAgICAgICAgIHdpZHRoPSIzODEuODM3NjUiCisgICAgICAgICAgICAgaWQ9InJlY3Q3OTY1IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgICAgPC9nPgorICAgICAgICA8ZworICAgICAgICAgICBpZD0iZzc5NjciCisgICAgICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXIzNzg1KSI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjYyIKKyAgICAgICAgICAgICBpZD0icGF0aDc5NjkiCisgICAgICAgICAgICAgZD0iTSA2ODcuMTQyODYsNDUyLjM2MjE4IEMgNjc2LjY4MTE3LDQ2Mi4wNzY2MSA2MDAuMTYzMjYsNDcxLjM2NzMyIDU4Ni40Mjg1Nyw0ODEuNjQ3OSBDIDU3Mi42OTM4OCw0OTEuOTI4NDggNTcxLjY3NjA1LDQ5NC41MzYxNiA1NzQuMjg1NzEsNTAxLjY0NzkgQyA1NzYuODk1MzcsNTA4Ljc1OTY0IDU4MC44MzA5OCw1MTEuMDUzNjIgNjAwLDUxMC4yMTkzMiBDIDYxOS4xNjkwMiw1MDkuMzg1MDIgNjk4LjU3MTQzLDQ4Mi41OTc2IDY5OC41NzE0Myw0ODguNzkwNzUgTCA2ODcuMTQyODYsNDUyLjM2MjE4IHoiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzQuMDMxMjUsLTYyLjE1NjAzNikiIC8+CisgICAgICAgICAgPHJlY3QKKyAgICAgICAgICAgICB5PSIzNDQuODIxMzgiCisgICAgICAgICAgICAgeD0iNzAyLjg2NDE0IgorICAgICAgICAgICAgIGhlaWdodD0iMTYyLjYzNDU1IgorICAgICAgICAgICAgIHdpZHRoPSIyMDcuODg5NCIKKyAgICAgICAgICAgICBpZD0icmVjdDc5NzEiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgICA8L2c+CisgICAgICA8L2c+CisgICAgICA8ZworICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE3NC4wMzEyNSw2Mi4xNTYwMzYpIgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4xODAwMDAwNDtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBpZD0iZzc5NzMiPgorICAgICAgICA8ZworICAgICAgICAgICBpZD0iZzc5NzUiCisgICAgICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXIzNzg1KSI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enp6enp6IgorICAgICAgICAgICAgIGlkPSJwYXRoNzk3NyIKKyAgICAgICAgICAgICBkPSJNIDQyNS44ODI0NCw0NzYuOTkxODYgQyA0MzYuNjg3ODcsNDc1LjUxMzIgNDUwLjYyNjQ1LDQ4MC4zNDYzNyA0NzAuNTI1Myw0ODAuMjA2MTQgQyA0OTAuNDI0MTUsNDgwLjA2NTkxIDUyNy45Nzg1Miw0NjMuMjk0OTIgNTUyLjY2ODE1LDQ2My4wNjMyOCBDIDU3Ny4zNTc3OCw0NjIuODMxNjQgNjE1LjQxOTg1LDQ3NS4zNDczNCA2MzEuOTUzODcsNDc4LjA2MzI4IEMgNjQ4LjQ4Nzg5LDQ4MC43NzkyMiA2NTQuODAyMTksNDc3LjkwNDc2IDY1OS40NTM4Niw0ODUuOTIwNDMgQyA2NjQuMTA1NTMsNDkzLjkzNjEgNjYxLjM4MDU3LDQ5Ni42Njc2NyA2NDkuMDk2NzIsNTA2LjYzNDcyIEMgNjM2LjgxMjg3LDUxNi42MDE3NyA2MDguMzA3MDQsNTE5LjI3MTA0IDU4My4wMjUyOSw1MTkuNDkxODYgQyA1NTcuNzQyOTUsNTE5LjcxMjY4IDUxMi42NDQsNTI2LjU3MDM4IDQ4Ny42NjgxNSw1MjMuNDIwNDIgQyA0NjIuNjkyMyw1MjAuMjcwNDYgNDMwLjczMDU5LDUxNS41OTc3NSA0MTguNzM5NTgsNTA1LjU2MzI4IEMgNDA2Ljc0ODU3LDQ5NS41Mjg4MSAzOTguODg4NzQsNDg4LjgzMTQ2IDQwMS4yMzk1OCw0ODEuNjM0NzEgQyA0MDMuNTkwNDIsNDc0LjQzNzk2IDQxNS4wNzcwMSw0NzguNDcwNTIgNDI1Ljg4MjQ0LDQ3Ni45OTE4NiB6IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHJlY3QKKyAgICAgICAgICAgICB5PSI0MTIuNjAzMTIiCisgICAgICAgICAgICAgeD0iMzQzLjY1MzkiCisgICAgICAgICAgICAgaGVpZ2h0PSIxODEuMDE5MzUiCisgICAgICAgICAgICAgd2lkdGg9IjM4MS44Mzc2NSIKKyAgICAgICAgICAgICBpZD0icmVjdDc5NzkiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgICA8L2c+CisgICAgICAgIDxnCisgICAgICAgICAgIGlkPSJnNzk4MSIKKyAgICAgICAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjM3ODUpIj4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emNjIgorICAgICAgICAgICAgIGlkPSJwYXRoNzk4MyIKKyAgICAgICAgICAgICBkPSJNIDY4Ny4xNDI4Niw0NTIuMzYyMTggQyA2NzYuNjgxMTcsNDYyLjA3NjYxIDYwMC4xNjMyNiw0NzEuMzY3MzIgNTg2LjQyODU3LDQ4MS42NDc5IEMgNTcyLjY5Mzg4LDQ5MS45Mjg0OCA1NzEuNjc2MDUsNDk0LjUzNjE2IDU3NC4yODU3MSw1MDEuNjQ3OSBDIDU3Ni44OTUzNyw1MDguNzU5NjQgNTgwLjgzMDk4LDUxMS4wNTM2MiA2MDAsNTEwLjIxOTMyIEMgNjE5LjE2OTAyLDUwOS4zODUwMiA2OTguNTcxNDMsNDgyLjU5NzYgNjk4LjU3MTQzLDQ4OC43OTA3NSBMIDY4Ny4xNDI4Niw0NTIuMzYyMTggeiIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3NC4wMzEyNSwtNjIuMTU2MDM2KSIgLz4KKyAgICAgICAgICA8cmVjdAorICAgICAgICAgICAgIHk9IjM0NC44MjEzOCIKKyAgICAgICAgICAgICB4PSI3MDIuODY0MTQiCisgICAgICAgICAgICAgaGVpZ2h0PSIxNjIuNjM0NTUiCisgICAgICAgICAgICAgd2lkdGg9IjIwNy44ODk0IgorICAgICAgICAgICAgIGlkPSJyZWN0Nzk4NSIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICAgIDwvZz4KKyAgICAgIDwvZz4KKyAgICA8L2c+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MDIpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA1ODIuNjU1OTksLTcuNDE4MzAxMSBMIDY5NS43OTMwNyw3OC44NDg3MjYgTCA4MDQuNjg3NTIsMzM3LjY0OTgxIEwgODQyLjg3MTI4LDU0NS41MzkyIEwgOTYzLjA3OTQ0LDYzNy40NjMwOCBDIDk2My4wNzk0NCw2MzcuNDYzMDggOTUwLjM1MTUxLDM1MC4zNzc3MyA5NDMuMjgwNDQsMzIzLjUwNzY3IEMgOTM2LjIwOTM4LDI5Ni42Mzc2MSA3OTMuMzczODEsLTY5LjY0MzY5OCA3OTMuMzczODEsLTY5LjY0MzY5OCBMIDU4Mi42NTU5OSwtNy40MTgzMDExIHoiCisgICAgICAgaWQ9InBhdGg3OTg3IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2MDQpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NzY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDg5NTgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDk2NC4xMzgzOSwyMzkuNTk5IEMgOTY0LjEzODM5LDIzOS41OTkgOTcyLjgxNTcxLDI1MC40OTU2MiA5ODguMjQ1NTQsMjUxLjU2MzI4IEMgMTAwMy42NzU0LDI1Mi42MzA5NCAxMDM3Ljk2NzIsMjExLjYxMDYxIDEwNTguNDI0MSwxOTkuNDIwNDMgQyAxMDc4LjkwMzQsMTg3LjIxNjkgMTEwNS40NzA1LDE3Mi44MTgxOCAxMTIyLjM1MjcsMTc5LjA2MzI5IEMgMTEzOS4yMzQ4LDE4NS4zMDgzOSAxMTQ0LjUxMDUsMjA1LjQ5OTM4IDExNTAuMjA5OCwyMjcuMDk5IEMgMTE1NS45MDkyLDI0OC42OTg2MSAxMTU2LjkyODQsMjg4LjkxMjg5IDExNDcuNTMxMywzMTkuOTU2MTUgQyAxMTM4LjEzNDEsMzUwLjk5OTQgMTA5Ny4wMjgsMzkzLjA1OTkgMTA4Mi4xNzQxLDQyMy4zNDkgQyAxMDY3LjMyMDIsNDUzLjYzODEgMTA3MC41NjcsNDYzLjE3MDQzIDEwNzAuNTY3LDQ2My4xNzA0MyIKKyAgICAgICBpZD0icGF0aDc5ODkiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6enp6YyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzMxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDExMjQuNDk1NSwyMDcuNjM0NzEgQyAxMTA4LjYwMjcsMjA2Ljc0MTg1IDEwNzQuNzc2NywyMTkuNzQwNTQgMTA1OC40MjQxLDIzMS45MjA0MyBDIDEwNDEuOTg1NSwyNDQuMTY0MzMgMTAyOS4yMDMyLDI1Ni4wMzQ4MyAxMDI5LjEzODQsMjg0LjA2MzI4IEMgMTAyOS4wNzMyLDMxMi4yNjkzMiAxMDQyLjI1NzUsMzIzLjEzOTY5IDEwNTguMjQ1NSwzMzEuMDI3NTcgQyAxMDc0LjIzMzUsMzM4LjkxNTQ2IDEwOTEuOTMxNywzMzguMTQ2ODUgMTExMC4yMDk4LDMxOS4yNDE4NiBDIDExMjguNDg4LDMwMC4zMzY4NiAxMTI0LjQ5NTUsMjA3LjYzNDcxIDExMjQuNDk1NSwyMDcuNjM0NzEgeiIKKyAgICAgICBpZD0icGF0aDc5OTEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6emMiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC43NTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzNTQzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxMjApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg3OTkzIgorICAgICAgIHNvZGlwb2RpOmN4PSIzODUiCisgICAgICAgc29kaXBvZGk6Y3k9IjIzNy4wMDUwNCIKKyAgICAgICBzb2RpcG9kaTpyeD0iODYuNDI4NTc0IgorICAgICAgIHNvZGlwb2RpOnJ5PSI3My45Mjg1NzQiCisgICAgICAgZD0iTSA0NzEuNDI4NTcsMjM3LjAwNTA0IEEgODYuNDI4NTc0LDczLjkyODU3NCAwIDEgMSAyOTguNTcxNDMsMjM3LjAwNTA0IEEgODYuNDI4NTc0LDczLjkyODU3NCAwIDEgMSA0NzEuNDI4NTcsMjM3LjAwNTA0IHoiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NDM0NzQ5LC0wLjEyMzk5NDMsMC4xNDQwMDg5LDEuMDk1NzY2OSw0NTEuOTQ4MjcsMTM0LjU5ODgpIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQxMDApIiAvPgorICAgIDxwYXRoCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTE1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA1MjcuNjA1ODgsNDA3LjQ0ODg0IEMgNTI3LjYwNTg4LDQwNy40NDg4NCA0MDUuNTY0NDQsNDQ1Ljg1MjMyIDM0MC4wOTE1NCw0MTcuMDgwNjUgQyAyNzQuNjE4NjUsMzg4LjMwODk5IDI2NS43MTQyOSwyOTIuMzYyMTggMjY1LjcxNDI5LDI5Mi4zNjIxOCBDIDI2NS43MTQyOSwyOTIuMzYyMTggMzM5LjA5NTg3LDIxMS44NTgyNSAzOTUuNjM1MDcsMjA4Ljc0NzQyIEMgNDUxLjQ2MjEyLDIwNS42NzU3OCA0ODYuMjA4OTMsMjI4Ljg5MDc0IDUxMC41MDUwOCwyNzQuNTk5MTMgQyA1MzQuODU3MDgsMzIwLjQxMjYxIDUyNy42MDU4OCw0MDcuNDQ4ODQgNTI3LjYwNTg4LDQwNy40NDg4NCB6IgorICAgICAgIGlkPSJwYXRoNzk5NSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY3p6YyIKKyAgICAgICBtYXNrPSJ1cmwoI21hc2szNjg0KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzk1OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNzcyLjE3NDExLDM5My4zNDkgQyA3NzIuMTc0MTEsMzkzLjM0OSA4MDguMzkxNjUsMzY1Ljk2NjUzIDgyMy43ODEyNSwzNTcuNDU2MTQgQyA4MzguOTU4NTksMzQ5LjA2MzEzIDg0OS40OTU1MywzNDUuODQ5IDg1OS42NzQxLDM0NS44NDkgTCA4NDQuMTM4MzksNDEyLjgxMzI4IgorICAgICAgIGlkPSJwYXRoNzk5NyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTMzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg3OTk5IgorICAgICAgIHNvZGlwb2RpOmN4PSI0MDkuMjg1NzEiCisgICAgICAgc29kaXBvZGk6Y3k9IjMwNi42NDc4OSIKKyAgICAgICBzb2RpcG9kaTpyeD0iMzYuMjUiCisgICAgICAgc29kaXBvZGk6cnk9IjM2LjI1IgorICAgICAgIGQ9Ik0gNDQ1LjUzNTcxLDMwNi42NDc4OSBBIDM2LjI1LDM2LjI1IDAgMSAxIDM3My4wMzU3MSwzMDYuNjQ3ODkgQSAzNi4yNSwzNi4yNSAwIDEgMSA0NDUuNTM1NzEsMzA2LjY0Nzg5IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQ5LjQ5NTU0LDc0LjkxNTM5MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODgwNik7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDMxMS44MzQwOSw0MTUuNDMxNTUgTCAzMjEuNzMzNTksNTM3LjA1MzkyIEwgMjYxLjYyOTUxLDY3My41MjU1MyBMIDI3Ny4xODU4Niw4NDguMTgwOSBDIDI5Mi43OTkxMiw5MTAuMDYwMSAzMDkuMzcxMzEsOTQ2Ljg0OTk1IDM1MS41NjIwMSw5NjUuMjM0NzMgQyAzNTUuODgxMTIsOTI4Ljk5NDc1IDM2MC4yNDM2Miw4OTIuODY3MDkgMzIwLjMxOTM3LDc0Mi4xMTQ4OSBMIDMzNy45OTcwNCw2NzIuODE4NDIgTCA0MTAuMTIxOTMsNTM0LjIyNTQ5IEwgMzY3LjY5NTUzLDM3NS44MzM1NyBMIDMxMS44MzQwOSw0MTUuNDMxNTUgeiIKKyAgICAgICBpZD0icGF0aDgwMDEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2MTYpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MjYpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA2MzUuMjEwMjUsNTgxLjEzMDA0IEMgNjIxLjA2ODExLDU5My44NTc5NiA2NzQuNDQzNzIsNjE1LjcxMDE5IDcxMS41Nzc3OCw2MDUuMTcxNjcgQyA3NDguNzExODQsNTk0LjYzMzE1IDgxNi4yMjI2NSw1NjkuNjA3MyA4MTQuODE1MzcsNTI1Ljk3NTcxIEMgODEzLjQwODA5LDQ4Mi4zNDQxMyA3MzguNDQ3ODQsMzk3LjI4MjI4IDczOC40NDc4NCwzOTcuMjgyMjggTCA2MzUuMjEwMjUsNTgxLjEzMDA0IHoiCisgICAgICAgaWQ9InBhdGg4MDAzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTkxKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDA1IgorICAgICAgIHNvZGlwb2RpOmN4PSI0MTAiCisgICAgICAgc29kaXBvZGk6Y3k9IjMwNi42NDc4OSIKKyAgICAgICBzb2RpcG9kaTpyeD0iMjMuMjE0Mjg1IgorICAgICAgIHNvZGlwb2RpOnJ5PSIyMy4yMTQyODUiCisgICAgICAgZD0iTSA0MzMuMjE0MjgsMzA2LjY0Nzg5IEEgMjMuMjE0Mjg1LDIzLjIxNDI4NSAwIDEgMSAzODYuNzg1NzIsMzA2LjY0Nzg5IEEgMjMuMjE0Mjg1LDIzLjIxNDI4NSAwIDEgMSA0MzMuMjE0MjgsMzA2LjY0Nzg5IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQ5LjY3NDExLDc0LjkxNTM5MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzOTgxKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGlkPSJwYXRoODAwNyIKKyAgICAgICBzb2RpcG9kaTpjeD0iNDE0LjI4NTcxIgorICAgICAgIHNvZGlwb2RpOmN5PSIzMDMuMDc2NDgiCisgICAgICAgc29kaXBvZGk6cng9IjcuNSIKKyAgICAgICBzb2RpcG9kaTpyeT0iNy41IgorICAgICAgIGQ9Ik0gNDIxLjc4NTcxLDMwMy4wNzY0OCBBIDcuNSw3LjUgMCAxIDEgNDA2Ljc4NTcxLDMwMy4wNzY0OCBBIDcuNSw3LjUgMCAxIDEgNDIxLjc4NTcxLDMwMy4wNzY0OCB6IgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MS45OTU1NCw3My40ODY4MjEpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MTEyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA3ODkuMzE2OTYsNDc4LjM0OSBDIDc4OS4zMTY5Niw0NzguMzQ5IDc5Ni4zMzk3Nyw0OTcuOTE3NTkgNzg4LjI0NTUzLDUxMy4zNDkgQyA3ODAuMTUxMjksNTI4Ljc4MDQxIDc0NS45MjIzNiw1NTIuMzM3MjIgNzIwLjc0NTU0LDU2My4zNDkgQyA2OTUuNDM1ODIsNTc0LjQxODkxIDYzNS4yNzI1NCw1OTYuMzEyOTMgNjE4Ljk1OTgyLDYwNS4zMTMyOCBDIDYwMi40OTgzNCw2MTQuMzk1NzEgNjAwLjc0NTU0LDYxNy45OTE4NSA2MDAuNzQ1NTQsNjE3Ljk5MTg1IEMgNjAwLjc0NTU0LDYxNy45OTE4NSA1OTMuNTk4NjEsNTk4LjkyNzQ0IDYyOS40OTU1Myw1NjYuMjA2MTUgQyA2NjUuNjY3NjQsNTMzLjIzNDAxIDc3MS41MjI2NSw1MTguMTU2NjUgNzg5LjMxNjk2LDQ3OC4zNDkgeiIKKyAgICAgICBpZD0icGF0aDgwMDkiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3pjIiAvPgorICAgIDxnCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgaWQ9Imc4MDExIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc4MC43NDU1Myw3NC41NTgyNSkiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMjkuODE0ODEsMCkiCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOTk5KSIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y3p6enN6YyIKKyAgICAgICAgIGlkPSJwYXRoODAxMyIKKyAgICAgICAgIGQ9Ik0gMTc5LjY0Mjg2LDI2Ny4zNjIxOCBDIDE1Ny4yMzI0MiwzMDcuMDY1MSAxMTkuMDI2NzYsMzgzLjE0MjQ3IDExMC4zNTcxNSw0MTcuMDA1MDQgQyAxMDEuNzA5OTQsNDUwLjc4MDE0IDEwMS41ODUxNiw0ODMuNDIxNTggMTEwLDUwMy40MzM2MiBDIDExOC4zNjAyLDUyMy4zMTU3NSAxMzYuMTYzOTgsNTM5LjA2NjQyIDE1MC43MTQyOCw1NDQuODYyMTggQyAxNTAuMTE3OSw1MzAuNDg2MzEgMTY1LjA4NzIzLDUwMS41NzYzNSAyMjMuNTcxNDMsNDcyLjM2MjE4IEMgMjgyLjE5NzcsNDQzLjA3NzA0IDMwMS45NTMwNiw0NDUuMjMxMzIgMzI3LjE0Mjg1LDQyNS4yMTkzMiBDIDM1Mi43NzI5MSw0MDQuODU3NTYgMzM1LjM0ODcyLDM0NS41NzI2OCAzMzAuMzU3MTQsMzMxLjI5MDc1IEMgMzI1LjM2NTU2LDMxNy4wMDg4MiAzMjkuMTIwNTEsMzI3LjkxMTAxIDMyOC40MTExMiwzMjYuMTk3NzQgQyAzMTcuNzIxODQsMzAwLjM4MTgyIDI5NC4xOTY4LDI3MS43Njc0NCAyNjMuOTI4NTcsMjYxLjY0NzkgQyAyMzMuNjYwMzQsMjUxLjUyODM2IDE5OC45MTA4MSwyNTYuNzk5NTMgMTc5LjY0Mjg2LDI2Ny4zNjIxOCB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzNTg1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg4MjM4NzQsMC40NzA1MjM2LC0wLjQ3MDUyMzYsMC44ODIzODc0LC0xNjYuNjIyNDUsMi4zODczNjIpIgorICAgICAgICAgZD0iTSAyNDguMjg3MzEsMzM4LjA3NjQ4IEEgNjQuNzE1ODgxLDEzNC4wMDYwNyAwIDEgMSAxMTguODU1NTUsMzM4LjA3NjQ4IEEgNjQuNzE1ODgxLDEzNC4wMDYwNyAwIDEgMSAyNDguMjg3MzEsMzM4LjA3NjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMTM0LjAwNjA3IgorICAgICAgICAgc29kaXBvZGk6cng9IjY0LjcxNTg4MSIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSIzMzguMDc2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iMTgzLjU3MTQzIgorICAgICAgICAgaWQ9InBhdGg4MDE1IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDYwKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46YmV2ZWw7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg4MjM4NzQsMC40NzA1MjM2LC0wLjQ3MDUyMzYsMC44ODIzODc0LC0xNjIuMTkzODgsLTE4Ljc1NTQ5NSkiCisgICAgICAgICBkPSJNIDI0OC4yODczMSwzMzguMDc2NDggQSA2NC43MTU4ODEsMTM0LjAwNjA3IDAgMSAxIDExOC44NTU1NSwzMzguMDc2NDggQSA2NC43MTU4ODEsMTM0LjAwNjA3IDAgMSAxIDI0OC4yODczMSwzMzguMDc2NDggeiIKKyAgICAgICAgIHNvZGlwb2RpOnJ5PSIxMzQuMDA2MDciCisgICAgICAgICBzb2RpcG9kaTpyeD0iNjQuNzE1ODgxIgorICAgICAgICAgc29kaXBvZGk6Y3k9IjMzOC4wNzY0OCIKKyAgICAgICAgIHNvZGlwb2RpOmN4PSIxODMuNTcxNDMiCisgICAgICAgICBpZD0icGF0aDgwMTciCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwNjIpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyMC43OTk5OTkyNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMjkuODE0ODEsM2UtNykiCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzOTk5KSIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6Y3p6enN6YyIKKyAgICAgICAgIGlkPSJwYXRoODAxOSIKKyAgICAgICAgIGQ9Ik0gMTc5LjY0Mjg2LDI2Ny4zNjIxOCBDIDE1Ny4yMzI0MiwzMDcuMDY1MSAxMTkuMDI2NzYsMzgzLjE0MjQ3IDExMC4zNTcxNSw0MTcuMDA1MDQgQyAxMDEuNzA5OTQsNDUwLjc4MDE0IDEwMS41ODUxNiw0ODMuNDIxNTggMTEwLDUwMy40MzM2MiBDIDExOC4zNjAyLDUyMy4zMTU3NSAxMzYuMTYzOTgsNTM5LjA2NjQyIDE1MC43MTQyOCw1NDQuODYyMTggQyAxNTAuMTE3OSw1MzAuNDg2MzEgMTY1LjA4NzIzLDUwMS41NzYzNSAyMjMuNTcxNDMsNDcyLjM2MjE4IEMgMjgyLjE5NzcsNDQzLjA3NzA0IDMwMS45NTMwNiw0NDUuMjMxMzIgMzI3LjE0Mjg1LDQyNS4yMTkzMiBDIDM1Mi43NzI5MSw0MDQuODU3NTYgMzM1LjM0ODcyLDM0NS41NzI2OCAzMzAuMzU3MTQsMzMxLjI5MDc1IEMgMzI1LjM2NTU2LDMxNy4wMDg4MiAzMjkuMTIwNTEsMzI3LjkxMTAxIDMyOC40MTExMiwzMjYuMTk3NzQgQyAzMTcuNzIxODQsMzAwLjM4MTgyIDI5NC4xOTY4LDI3MS43Njc0NCAyNjMuOTI4NTcsMjYxLjY0NzkgQyAyMzMuNjYwMzQsMjUxLjUyODM2IDE5OC45MTA4MSwyNTYuNzk5NTMgMTc5LjY0Mjg2LDI2Ny4zNjIxOCB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzNTg3KTtzdHJva2Utd2lkdGg6MjAuNzk5OTk5MjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI0MDc5KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgPC9nPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46YmV2ZWw7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBpZD0icGF0aDgwMjEiCisgICAgICAgc29kaXBvZGk6Y3g9IjMxMC43MTQyOSIKKyAgICAgICBzb2RpcG9kaTpjeT0iMzk4LjA3NjQ4IgorICAgICAgIHNvZGlwb2RpOnJ4PSIxOS43MDQxMzIiCisgICAgICAgc29kaXBvZGk6cnk9IjE5LjcwNDEzMiIKKyAgICAgICBkPSJNIDMzMC40MTg0MywzOTguMDc2NDggQSAxOS43MDQxMzIsMTkuNzA0MTMyIDAgMSAxIDI5MS4wMTAxNiwzOTguMDc2NDggQSAxOS43MDQxMzIsMTkuNzA0MTMyIDAgMSAxIDMzMC40MTg0MywzOTguMDc2NDggeiIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NTIuNTU2NjMsNzIuNTgxMjczKSIgLz4KKyAgICA8cGF0aAorICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwNTYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NDA4Mik7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQwODMpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDIzIgorICAgICAgIHNvZGlwb2RpOmN4PSIzMTAuNzE0MjkiCisgICAgICAgc29kaXBvZGk6Y3k9IjM5OC4wNzY0OCIKKyAgICAgICBzb2RpcG9kaTpyeD0iMTkuNzA0MTMyIgorICAgICAgIHNvZGlwb2RpOnJ5PSIxOS43MDQxMzIiCisgICAgICAgZD0iTSAzMzAuNDE4NDMsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAyOTEuMDEwMTYsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAzMzAuNDE4NDMsMzk4LjA3NjQ4IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjU1NjYzLDcyLjU4MTI3MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MTE5KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDI1IgorICAgICAgIHNvZGlwb2RpOmN4PSIzMTAuNzE0MjkiCisgICAgICAgc29kaXBvZGk6Y3k9IjM5OC4wNzY0OCIKKyAgICAgICBzb2RpcG9kaTpyeD0iMTkuNzA0MTMyIgorICAgICAgIHNvZGlwb2RpOnJ5PSIxOS43MDQxMzIiCisgICAgICAgZD0iTSAzMzAuNDE4NDMsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAyOTEuMDEwMTYsMzk4LjA3NjQ4IEEgMTkuNzA0MTMyLDE5LjcwNDEzMiAwIDEgMSAzMzAuNDE4NDMsMzk4LjA3NjQ4IHoiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjU1NjYzLDcyLjU4MTI3MykiIC8+CisgICAgPHBhdGgKKyAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0ODY4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NHB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQwMDIpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgaWQ9InBhdGg4MDI3IgorICAgICAgIHNvZGlwb2RpOmN4PSI0MjkuNTY3MzgiCisgICAgICAgc29kaXBvZGk6Y3k9IjM3Ny40Mjg3NyIKKyAgICAgICBzb2RpcG9kaTpyeD0iNzIuMDc5NzM1IgorICAgICAgIHNvZGlwb2RpOnJ5PSI0NC41NDc3MjYiCisgICAgICAgZD0iTSA1MDEuNjQ3MTIsMzc3LjQyODc3IEEgNzIuMDc5NzM1LDQ0LjU0NzcyNiAwIDEgMSAzNTcuNDg3NjUsMzc3LjQyODc3IEEgNzIuMDc5NzM1LDQ0LjU0NzcyNiAwIDEgMSA1MDEuNjQ3MTIsMzc3LjQyODc3IHoiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTY5NTY0LC03Ljc5NjE2NzVlLTIsNy43OTYxNjc1ZS0yLDAuOTk2OTU2NCw0MzYuNjE4NzcsMTI1LjI5NTA5KSIKKyAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9Ii00Ny4yMzE5NzYiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItMy42OTM1MDc5IiAvPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NDg3Nik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5OTRweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpiZXZlbDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI0MDEwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGlkPSJwYXRoODAyOSIKKyAgICAgICBzb2RpcG9kaTpjeD0iNDM3LjY5OTEiCisgICAgICAgc29kaXBvZGk6Y3k9IjM5MS4yMTczNSIKKyAgICAgICBzb2RpcG9kaTpyeD0iMzYuNjExOTMxIgorICAgICAgIHNvZGlwb2RpOnJ5PSIyMi42Mjc0MTciCisgICAgICAgZD0iTSA0NzQuMzExMDMsMzkxLjIxNzM1IEEgMzYuNjExOTMxLDIyLjYyNzQxNyAwIDEgMSA0MDEuMDg3MTcsMzkxLjIxNzM1IEEgMzYuNjExOTMxLDIyLjYyNzQxNyAwIDEgMSA0NzQuMzExMDMsMzkxLjIxNzM1IHoiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS40MzU3OTUxLC02Ljk5OTEwMzdlLTIsNi45OTkxMDM3ZS0yLDEuNDM1Nzk1MSwyMzUuMTgwNjUsLTYzLjg2NTQ2KSIKKyAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9Ii0yMC45NTU5MDIiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItMTMuMDU2NjI1IiAvPgorICAgIDxnCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgaWQ9Imc4MDMxIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDA1Myk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBkPSJNIDQxNi44NzQ5OSw0MDEuODI2NDggQSAzLjIxNDI4NTYsMy4yMTQyODU2IDAgMSAxIDQxMC40NDY0Miw0MDEuODI2NDggQSAzLjIxNDI4NTYsMy4yMTQyODU2IDAgMSAxIDQxNi44NzQ5OSw0MDEuODI2NDggeiIKKyAgICAgICAgIHNvZGlwb2RpOnJ5PSIzLjIxNDI4NTYiCisgICAgICAgICBzb2RpcG9kaTpyeD0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6Y3k9IjQwMS44MjY0OCIKKyAgICAgICAgIHNvZGlwb2RpOmN4PSI0MTMuNjYwNzEiCisgICAgICAgICBpZD0icGF0aDgwMzMiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDQ0ODQpO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy4xMjUwMDksOC4xMjQ5OTEzKSIKKyAgICAgICAgIGQ9Ik0gNDE2Ljg3NDk5LDQwMS44MjY0OCBBIDMuMjE0Mjg1NiwzLjIxNDI4NTYgMCAxIDEgNDEwLjQ0NjQyLDQwMS44MjY0OCBBIDMuMjE0Mjg1NiwzLjIxNDI4NTYgMCAxIDEgNDE2Ljg3NDk5LDQwMS44MjY0OCB6IgorICAgICAgICAgc29kaXBvZGk6cnk9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOnJ4PSIzLjIxNDI4NTYiCisgICAgICAgICBzb2RpcG9kaTpjeT0iNDAxLjgyNjQ4IgorICAgICAgICAgc29kaXBvZGk6Y3g9IjQxMy42NjA3MSIKKyAgICAgICAgIGlkPSJwYXRoODAzNSIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NDQ4Nik7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjk0NjQzNyw3LjQ5OTk5MTMpIgorICAgICAgICAgZD0iTSA0MTYuODc0OTksNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTAuNDQ2NDIsNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTYuODc0OTksNDAxLjgyNjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6cng9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSI0MDEuODI2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNDEzLjY2MDcxIgorICAgICAgICAgaWQ9InBhdGg4MDM3IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0NDg4KTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQuOTEwNzIzLC0xMC4yNjc4NjYpIgorICAgICAgICAgZD0iTSA0MTYuODc0OTksNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTAuNDQ2NDIsNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTYuODc0OTksNDAxLjgyNjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6cng9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSI0MDEuODI2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNDEzLjY2MDcxIgorICAgICAgICAgaWQ9InBhdGg4MDM5IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0NDkwKTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDcuNTg5Mjk0LC0wLjYyNTAwODcpIgorICAgICAgICAgZD0iTSA0MTYuODc0OTksNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTAuNDQ2NDIsNDAxLjgyNjQ4IEEgMy4yMTQyODU2LDMuMjE0Mjg1NiAwIDEgMSA0MTYuODc0OTksNDAxLjgyNjQ4IHoiCisgICAgICAgICBzb2RpcG9kaTpyeT0iMy4yMTQyODU2IgorICAgICAgICAgc29kaXBvZGk6cng9IjMuMjE0Mjg1NiIKKyAgICAgICAgIHNvZGlwb2RpOmN5PSI0MDEuODI2NDgiCisgICAgICAgICBzb2RpcG9kaTpjeD0iNDEzLjY2MDcxIgorICAgICAgICAgaWQ9InBhdGg4MDQxIgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0NDkyKTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CisgICAgPC9nPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDg5Ni4yMDMwMSw0ODIuOTI4MzcgQyA4OTcuMTg4MSw0ODcuMjc4NDUgOTAwLjc0MDA4LDQ4OS4xMDc4NSA5MDMuNTg5NzQsNDkwLjgyMDE5IEMgOTA4LjA1MDQyLDQ5My4zMzMxMSA5MTAuMTA5OSw0OTIuMzQyMyA5MTIuNzQ0MjUsNDkwLjA2MjU4IEMgOTE0LjM0NjIsNDg4LjE0MTQxIDkyMy40MjczNiw0ODUuMzYzOTMgOTI4LjMzODQ4LDQ4Mi45OTE1MSBDIDkzMi42NjgwOSw0ODEuNTMyNiA5MzcuMjQxNzgsNDc3LjYzMjc4IDk0MS43MjMsNDc0LjY1Nzc1IEMgOTQ1LjExODE0LDQ3My4wMzA1MSA5NDcuMDY5NjQsNDc1LjAxMjM5IDk0OS41NTE2OCw0NzUuNjY3OSBDIDk1Mi40OTU4LDQ3Ni4zODQ1MSA5NTMuOTYyODUsNDc3LjgzOTY1IDk1NS42MTI2LDQ3OS4yMDM0NCBDIDk1OC4wMDg3Niw0ODAuMzc4NjMgOTU0LjY4NDcsNDgyLjM0NjU3IDk1OC44OTU2LDQ4My40OTY1OCBDIDk2MC4wODY1MSw0ODMuNzE0NTIgOTYxLjMxMjU1LDQ4NC4wNzMwMyA5NjIuMTc4NTksNDgyLjk5MTUxIgorICAgICAgIGlkPSJwYXRoODA0MyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA5MTAuODUwMjEsNDc1LjM1MjIzIEMgOTEzLjE2NTE1LDQ3NS4zMjAyNSA5MTQuMDI3OTksNDc1Ljk5NDc2IDkxNi4zNDI5Miw0NzQuNTMxNDggQyA5MTkuNzk4NTYsNDcxLjQ1MDM1IDkyMS43NDU0Niw0NzEuMzg2NzEgOTI0LjI5Nzg3LDQ3MC4xMTIwNiBDIDkyNy4zMjQ0NCw0NjguNzk2ODMgOTMwLjgzMzU3LDQ3OC4yNjM3NSA5MzQuMzk5NCw0NzkuOTYxMDUgQyA5MzYuNzk0NDksNDc5LjEzOTYzIDkzNS42ODg1NCw0ODEuNzU0ODQgOTM1Ljg1MTQ5LDQ4Mi42MTI3IEMgOTM1LjkwODYyLDQ4NS4yNTk1NCA5MzguNjU4NDMsNDg2LjI5MDc2IDk0MC4yMDc3Nyw0ODguMDQyMjcgQyA5NDMuNTIzODEsNDkwLjI5Nzc2IDk0Ny41ODMsNDk0LjMzNzczIDk1MS4zMTk0NSw0OTMuMzQ1NTcgQyA5NTcuNzY0Nyw0OTAuNDE0NSA5NjEuNTk4NjcsNDkyLjA2NDExIDk2Ny42MDgxNiw0ODUuOTU4ODMgQyA5NjguMzEyMjEsNDg0Ljc3NzQ5IDk2Ny4wMjM5MSw0NzkuMDY0MjMgOTcwLjcwMTc1LDQ3OC43NjE0OSBDIDk3My4yMjU3NCw0NzkuMDE0ODcgOTc0Ljg2ODQyLDQ3OC44MTE2NCA5NzYuNzYyNjcsNDc5LjMyOTcxIEMgOTgyLjIwMzY3LDQ4MS40NDY5IDk4NC41MDA0NSw0ODUuNzc5NzEgOTkxLjQ3MzAxLDQ4Ny4yODQ2NiBDIDk5Ny42NTU5MSw0ODguMjUxMDUgOTk5LjA4NTY1LDQ5MS4wNzg5MiAxMDA1LjM2MjYsNDkyLjMzNTQyIgorICAgICAgIGlkPSJwYXRoODA0NSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA4NzYuOTgxMzMsNDgzLjUyMTk3IEMgODc5LjM3OTkxLDQ4Mi43MjgxNyA4ODMuMDg3NDYsNDg3LjcxNDA3IDg4NS4xNTQ0Niw0OTAuNTY3NjUgQyA4ODUuNzQ3MjcsNDkzLjI0NzE3IDg4Ni4zMDgyMyw0OTYuMDU0MSA4ODUuOTEyMDcsNTAyLjY4OTQ4IEMgODg2LjY5NzIsNTA1LjEwNzAyIDg4OC41OTI1Niw1MDUuNzIwNDMgODkwLjcxMDMsNTA1Ljk3MjQ4IEMgODkzLjgyNzc1LDUwNS40MzU3IDg5Ni41ODY5OSw1MDQuNjQ4MTggODk4LjAzMzksNTAyLjk0MjAyIEMgODk5LjkwNTUsNTAxLjAwMDM1IDkwMy4zNDY0Myw1MDUuMzM1OTYgOTA2LjExNTEyLDUwNi45ODI2MyBDIDkwOS43MjUyMSw1MDguODk0NzIgOTEzLjg4ODksNTA4Ljk2MTQ5IDkxNy45ODQ0Miw1MDkuMjU1NDcgQyA5MTkuNjg4LDUwOS4wMjQ4MyA5MjAuMzU0ODIsNTEzLjc3MDYyIDkyMS4yNjc0MSw1MTcuMzM2NyBDIDkyMS42NTE1NSw1MjEuNzE0NzYgOTIwLjM4MTk3LDUyNC4yMzIzOSA5MTkuNDk5NjUsNTI3LjE4NTY4IEMgOTE5LjIwNTM1LDUyOS42ODIyMyA5MjIuNDg4MTUsNTMwLjcxNTQyIDkyNS44MTMxLDUzMS43MzEzNyBDIDkyOC45OTU1NCw1MzIuNDcyNjEgOTMyLjM1NzM0LDUzMy4zOTMyMSA5MzQuOTA0NDcsNTMzLjQ5OTE0IEMgOTQwLjA0NjMzLDUzNC4zNzQwNSA5NDIuOTkzMjEsNTM2LjE4OTY2IDk0Ny4wMjYzLDUzNy41Mzk3NSBDIDk0OS4yNjU0NCw1MzguMzU2MyA5NTAuMjg2NDksNTM5Ljc4MTkxIDk1MS41NzE5OSw1NDEuMDc1MjgiCisgICAgICAgaWQ9InBhdGg4MDQ3IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI4ODE0KTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSAzMzIsMTg3LjY5NTE5IEMgMzMyLDE4Ny42OTUxOSAzODkuNSwxNjIuMTk1MTkgMzg5LjUsMTU5LjY5NTE5IEMgMzg5LjUsMTU3LjE5NTE5IDM5NSwxMDcuNjk1MTkgMzk1LDEwNy42OTUxOSBDIDM5NSwxMDcuNjk1MTkgNDg2LDU5LjE5NTE4OSA0ODYuNSw1Ny4xOTUxODkgQyA0ODcsNTUuMTk1MTg5IDU3Mi41LC00LjgwNDgxMTQgNTcyLjUsLTQuODA0ODExNCBMIDM4Ni41LDE3LjE5NTE4OSBMIDMxMSwxMjMuMTk1MTkgTCAzMzIsMTg3LjY5NTE5IHoiCisgICAgICAgaWQ9InBhdGg4MDQ5IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg1MTQpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gMTY5Ny4yODQ2LDcyMi41NTE0IEMgMTY5Ny4yODQ2LDcyMi41NTE0IDE1ODEuMzE5MSw3OTYuMDkwNSAxNTc0LjI0ODEsODAwLjMzMzE0IEMgMTU2Ny4xNzcsODA0LjU3NTc4IDEzNDMuNzMxMiw5MzcuNTExODYgMTM0My43MzEyLDkzNy41MTE4NiBMIDEzNDcuOTczOSw5NzcuMTA5ODQgTCAxNTY0LjM0ODYsODc2LjcwMDY3IEwgMTY4MS43MjgzLDc3NC44NzczIEwgMTY5Ny4yODQ2LDcyMi41NTE0IHoiCisgICAgICAgaWQ9InBhdGg4MDUxIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MTApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA1MjguOTE1ODcsNTU2Ljg1MjkxIEMgNTIzLjI1OTAyLDU1NS40Mzg3IDM0Ny44OTY1NCw2MzEuODA2MjMgMzQ3Ljg5NjU0LDYzMS44MDYyMyBMIDMxMy45NTU0MSw4MTIuODI1NTcgTCAzNjUuMDUwODcsMTAwNi43NzM4IEwgNjIyLjI1Mzk3LDEwNzQuNDU1MSBDIDYyMi4yNTM5NywxMDc0LjQ1NTEgODI4LjcyOTE1LDEyMjcuMTkwMSA4MzQuMzg2LDEyMjIuOTQ3NSBDIDg0MC4wNDI4NiwxMjE4LjcwNDkgMTAwMi42Nzc0LDEwMjkuMjAwMiAxMDAyLjY3NzQsMTAyOS4yMDAyIEwgODQyLjg3MTI4LDg0NS4zNTI0OCBMIDc5Ni4yMDIyNCw2NjcuMTYxNTcgTCA1MjguOTE1ODcsNTU2Ljg1MjkxIHoiCisgICAgICAgaWQ9InBhdGg4MDUzIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDg2MTApIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NzY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMGMwYzBjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSAxMDk3LjY0MzMsNjEzLjg4OTk3IEMgMTA5Ny42NDMzLDYxMy44ODk5NyAxMTIwLjI2MjgsNjA3LjM4MzE2IDExMzMuMzg2LDYwOC4wMTcyNCBDIDExNDYuNTA5Myw2MDguNjUxMzMgMTE2NC4wMjc2LDYwOS45NTU4NiAxMTc3LjA5NDksNjIwLjIwMzQzIEMgMTE5MC4xNjIyLDYzMC40NTA5OSAxMjAyLjE2MjYsNjQ3LjM0MzUgMTIxMS4yMDczLDY3OC41NzMwOCBDIDEyMjAuMjUxOSw3MDkuODAyNjYgMTIxMi45MDU2LDc3Ny44MjUwOSAxMjA1LjAzMTIsODIxLjkyMDQzIEMgMTE5Ny4xNTY5LDg2Ni4wMTU3NyAxMTc2Ljc2NjEsOTI4LjAzMzQxIDExNjAuMDMxMiw5NjEuOTIwNDMgQyAxMTQzLjI5NjQsOTk1LjgwNzQ1IDExMTAuMjMzNSwxMDM5LjQxNTYgMTA5OS40NjE4LDEwNTEuNzk2NiBDIDEwODguMDk3NiwxMDY0Ljg1ODYgMTA0My4yNTU5LDEwODguMjIyOCAxMDIwLjAzMTIsMTA5NC4wNjMzIEMgMTAyNS4zMzQ2LDEwODMuNDU2NyAxMDY4LjkzMSwxMDQzLjQ3NDQgMTA1NS4wMzEyLDEwMzMuMzQ5IEMgMTA0MS4wMTIzLDEwMjMuMTM2NyAxMDA5LjI3MTIsMTA3OS4zMzE0IDk3MC43MzgxLDEwNjIuMzgyMiBDIDk5Mi4xMjA0MSwxMDQ5LjI1MDEgMTAxMi41MTc1LDEwMTEuMTk2MSAxMDA0Ljc3ODcsOTk1Ljc4NzcyIEMgOTk2LjkzODQ2LDk4MC4xNzczMyA5NzQuMDczNzgsMTA0NC41NDUzIDkxMS4yNDMxNywxMDMyLjgwMDYgQyA5NDEuMjk1MjEsMTAwNS4yNzM5IDk2Ni42NTAyMyw5NjEuODk2NTkgOTUyLjUwNTg3LDk0OS44MjA5IEMgOTM4LjA5MDcxLDkzNy41MTQwMyA4OTIuMDQ0MTIsMTAwNC4xMTQxIDg5Mi4wNDQxMiwxMDA0LjExNDEgQyA4OTIuMDQ0MTIsMTAwNC4xMTQxIDg4OS4yMjIyMiw5NjIuNDEyODcgOTA1LjgxNzMyLDkzNS41MDY3MyBDIDkyMi40NTY2Nyw5MDguNTI4ODYgOTg1LjQ3MDI5LDg1My44OTE0NiAxMDA1LjM3MDQsODIzLjgwMzMxIEMgMTAyNS4yNzA2LDc5My43MTUxNyAxMDM4Ljk4Myw3NTcuNzk0MjkgMTA0Ny41MDU5LDczMS4yODUzNyBDIDEwNTYuMDI4Nyw3MDQuNzc2NDUgMTA2My4zMDY4LDY1NC4xODU4MyAxMDYzLjMwNjgsNjU0LjE4NTgzIgorICAgICAgIGlkPSJwYXRoODA1NSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjemN6Y3pjenp6YyIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyODgxOCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDc3MC43NDYzOSw2MDkuMTc4ODEgTCA3MTkuODM0Nyw3MDYuNzU5NTUgTCA2MzkuOTMxNjMsODE3Ljc3NTMxIEwgNjc0LjU3OTg3LDg4OS4xOTMwOSBMIDcxNy4wMDYyOCw5NjguMzg5MDYgTCA3ODkuMTMxMTcsOTIzLjEzNDIyIEwgODAzLjI3MzMxLDczMC44MDExNyBMIDgyNC40ODY1MSw1OTIuMjA4MjUgTCA4MTAuMzQ0MzcsNTAyLjA1MjEzIEwgNzcwLjc0NjM5LDYwOS4xNzg4MSB6IgorICAgICAgIGlkPSJwYXRoODA1NyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4NjIyKSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2MiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjg4MTApO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAyOTUsODQ2LjE5NTE5IEwgMzAxLjY0NDg4LDc3Ny4yNzIzNCBDIDMwMS42NDQ4OCw3NzcuMjcyMzQgMzkxLjk2NDM5LDg2Ni4yNzY5MSA0NjQsOTAwLjE5NTE5IEMgNTM2LjAzNTYxLDkzNC4xMTM0NyA3NzIsOTYyLjE5NTE5IDc3Miw5NjIuMTk1MTkgTCA5MjYsOTM2LjE5NTE5IEwgODkwLDEwOTguMTk1MiBMIDYwNCwxMTI0LjE5NTIgTCAzMDYsMTAzNS4xOTUyIEwgMjk1LDg0Ni4xOTUxOSB6IgorICAgICAgIGlkPSJwYXRoODA1OSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4OTA2KSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjemNjY2NjYyIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MC4wMzEyNSw3My44NDM5NjQpIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzNTg3KTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA0MDUuNzk2MjksODQ1Ljk5MDIzIEwgNDgwLjc0OTYxLDkxMS4wNDQwNiBMIDQ4My4yNDkyNCw5MjcuOTI0NDYgTCA1MDIuNjUyNiw5MzguMDgzMzcgTCA1MDkuMTQ0NjQsOTYxLjEzNDQ2IEwgNTQwLjg1MzY5LDk1Mi43NjMzNiBMIDU1NS43MDI5MywxMDAwLjg0NjYgQyA1NjcuOTU5NDUsMTAxMy41NzQ1IDY0NS40OTYzNyw4ODcuNzM2OSA2MTEuNTY0MzYsMTAzOS4wMzA0IEwgNTUwLjc1MzE4LDEwNTUuMjkzOSBMIDQ2MS41NTAyNiw5NjAuNjAxMDQgTCAzOTguNzI1MjMsOTA2LjgwMTQxIEwgNDA1Ljc5NjI5LDg0NS45OTAyMyB6IgorICAgICAgIGlkPSJwYXRoODA2MSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjYyIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjAyKSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMTIxMjEyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDExNTkuMzE3LDkxOC4zNDkgQyAxMjEzLjYwMjcsOTE2LjkyMDQzIDEyODUuMzUyLDkwMy4yOTcwMSAxMzI5LjMxNyw4OTEuNTYzMjggQyAxMzczLjM2OTcsODc5LjgwNjE0IDE0NTUuMjAzMyw4NTUuMjE2MDQgMTUwNC42NzQsODMzLjcwNjE0IEMgMTU1NC4wMTMzLDgxMi4yNTM0MiAxNjE4LjI3NzgsNzc0LjQyNDU0IDE2NTguOTU5OSw3NDEuNTYzMjkgQyAxNjk5LjQ2OCw3MDguODQyNiAxNzExLjM0OTgsNjg1Ljc0MzQ4IDE3MTkuNjc0MSw3MDcuOTkxODYgQyAxNzI4LjA0MzIsNzMwLjM1OTY1IDE3MDMuMjY3Miw3NjQuMzE3NDggMTY4MS44MTcsNzg5LjA2MzI5IEMgMTY2MC4yMTI4LDgxMy45ODY2OSAxNjI5LjA4NTYsODQxLjc2ODYyIDE1ODIuODg4Myw4NzguMzQ5IEMgMTUzNi42OTEsOTE0LjkyOTM4IDE0MjYuODA1OCw5NzkuOTMzNjMgMTM3MC4wMzEyLDEwMDYuOTIwNCBDIDEzMTIuOTY1MiwxMDM0LjA0NTggMTI0MS44Mjc5LDEwNjUuMTU4OSAxMTk3Ljg4ODQsMTA3OS40MjA1IEMgMTE1My45NDg5LDEwOTMuNjgyMSAxMDY2LjQ1OTgsMTExMC40OTE5IDEwNjYuNDU5OCwxMTEwLjQ5MTkgTCAxMTU5LjMxNyw5MTguMzQ5IHoiCisgICAgICAgaWQ9InBhdGg4MDYzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6enp6Y2MiIC8+CisgICAgPHBhdGgKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NTAuMDMxMjUsNzMuODQzOTY0KSIKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjU7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzY2Nik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzNzc5KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gMTI0MS41OTY1LDY1Mi45NTAwNyBDIDEyNDEuNTk2NSw2NTIuOTUwMDcgMTE3Ni44NzUsNzA3LjI4NzEzIDEwOTUuOTMyNiw3NTEuOTQ1MDEgQyAxMDEzLjkwODIsNzk3LjE5OTg1IDgxMS42NzU1Niw4NDUuMjgzMTEgODExLjY3NTU2LDg0NS4yODMxMSBDIDgxMS42NzU1Niw4NDUuMjgzMTEgNzk2LjU3NDE5LDg2Ni4zMzUwNyA4NTYuOTMwNDUsODczLjU2NzM5IEMgOTE3LjI4NjcxLDg4MC43OTk3MSAxMDgxLjAxMjQsODIwLjI2NjcgMTEzNS41MzA2LDc3Ny40MDA4NSBDIDExOTAuMDQ4OCw3MzQuNTM1IDEyNTUuNzM4Nyw2NjUuNjc3OTkgMTI1NS43Mzg3LDY2NS42Nzc5OSBMIDEyNDEuNTk2NSw2NTIuOTUwMDcgeiIKKyAgICAgICBpZD0icGF0aDgwNjUiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjemN6emNjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM5OTIpIiAvPgorICAgIDxnCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgaWQ9Imc4MDY3IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM5ODYpIj4KKyAgICAgIDxnCisgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTc0LjAzMTI1LDYyLjE1NjAzNikiCisgICAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyMzY3NykiCisgICAgICAgICBpZD0iZzgwNjkiPgorICAgICAgICA8ZworICAgICAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyMzc4NSkiCisgICAgICAgICAgIGlkPSJnODA3MSI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6emNjY2NjIgorICAgICAgICAgICAgIGlkPSJwYXRoODA3MyIKKyAgICAgICAgICAgICBkPSJNIDEwOTQuMjg1Nyw3MjUuOTMzNjEgQyAxMDk0LjI4NTcsNzI1LjkzMzYxIDEwOTMuOTg5Niw3NTIuMDk0NTIgMTA5OC45Mjg1LDc2My43OTA3NiBDIDExMDMuODY3NCw3NzUuNDg3IDExMTguOTY2Niw3OTAuMjc3NDEgMTEyNy41LDc5NS4yMTkzMyBDIDExMzYuMDMzNCw4MDAuMTYxMjUgMTE0Ni40Mjg2LDgwMy43OTA3NSAxMTQ2LjQyODYsODAzLjc5MDc1IEwgMTI2NC4yODU3LDY4OC43OTA3NSBMIDEyODIuMTQyOSw2MTMuMDc2NDcgTCAxMTg1LjcxNDMsNjUxLjY0NzkgTCAxMDk0LjI4NTcsNzI1LjkzMzYxIHoiCisgICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzQuMDMxMjUsLTYyLjE1NjAzNikiIC8+CisgICAgICAgICAgPHJlY3QKKyAgICAgICAgICAgICB5PSI0ODYuMTQyMjQiCisgICAgICAgICAgICAgeD0iMTE5Ny44Mzg5IgorICAgICAgICAgICAgIGhlaWdodD0iMzA5LjcxMjc3IgorICAgICAgICAgICAgIHdpZHRoPSIzMzMuNzU0MTIiCisgICAgICAgICAgICAgaWQ9InJlY3Q4MDc1IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgICAgPC9nPgorICAgICAgPC9nPgorICAgICAgPGcKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNzQuMDMxMjUsNjIuMTU2MDM2KSIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMTgwMDAwMDQ7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgaWQ9Imc4MDc3Ij4KKyAgICAgICAgPGcKKyAgICAgICAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjM3ODUpIgorICAgICAgICAgICBpZD0iZzgwNzkiPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenpjY2NjYyIKKyAgICAgICAgICAgICBpZD0icGF0aDgwODEiCisgICAgICAgICAgICAgZD0iTSAxMDk0LjI4NTcsNzI1LjkzMzYxIEMgMTA5NC4yODU3LDcyNS45MzM2MSAxMDkzLjk4OTYsNzUyLjA5NDUyIDEwOTguOTI4NSw3NjMuNzkwNzYgQyAxMTAzLjg2NzQsNzc1LjQ4NyAxMTE4Ljk2NjYsNzkwLjI3NzQxIDExMjcuNSw3OTUuMjE5MzMgQyAxMTM2LjAzMzQsODAwLjE2MTI1IDExNDYuNDI4Niw4MDMuNzkwNzUgMTE0Ni40Mjg2LDgwMy43OTA3NSBMIDEyNjQuMjg1Nyw2ODguNzkwNzUgTCAxMjgyLjE0MjksNjEzLjA3NjQ3IEwgMTE4NS43MTQzLDY1MS42NDc5IEwgMTA5NC4yODU3LDcyNS45MzM2MSB6IgorICAgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTc0LjAzMTI1LC02Mi4xNTYwMzYpIiAvPgorICAgICAgICAgIDxyZWN0CisgICAgICAgICAgICAgeT0iNDg2LjE0MjI0IgorICAgICAgICAgICAgIHg9IjExOTcuODM4OSIKKyAgICAgICAgICAgICBoZWlnaHQ9IjMwOS43MTI3NyIKKyAgICAgICAgICAgICB3aWR0aD0iMzMzLjc1NDEyIgorICAgICAgICAgICAgIGlkPSJyZWN0ODA4MyIKKyAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICAgIDwvZz4KKyAgICAgIDwvZz4KKyAgICA8L2c+CisgICAgPHBhdGgKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NTAuMDMxMjUsNzMuODQzOTY0KSIKKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjgzMzAwMDAzO2ZpbGw6IzA1MDUwNTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjgyMjUpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSAxMjY0LjE4NzUsNjA1IEMgMTI1OS42OTY0LDYwNS43MzI2OCAxMjU2LjAzMDUsNjA4LjQ1NTA5IDEyNTIuMjUsNjExLjQwNjI1IEMgMTI0Mi4xNjg3LDYxOS4yNzYwMSAxMjI0LjA4MDUsNjQ1LjgzMTQ5IDEyMDQuMjE4OCw2NjEuODc1IEMgMTE2NC4zNTE0LDY5NC4wNzgxNiAxMTAwLjIyMjgsNzMxLjg1MjAxIDEwNTEuNjU2Miw3NTIuOTY4NzUgQyAxMDAzLjA0MjIsNzc0LjEwNjEzIDkyMS4xMTQ5OCw3OTguNzg2NzYgODc3LjM0Mzc1LDgxMC40Njg3NSBDIDgzMy45NDU1NCw4MjIuMDUxMjEgNzYyLjI5OTcyLDgzNS41OTk4MiA3MDkuMDkzNzUsODM3IEwgNzA0LjUzMTI1LDgzNy4xMjUgTCA3MDIuNTMxMjUsODQxLjI1IEwgNjA5LjY4NzUsMTAzMy4zNzUgTCA2MDMuMTg3NSwxMDQ2Ljg0MzggTCA2MTcuODQzNzUsMTA0NCBDIDYxNy44NDM3NSwxMDQ0IDcwNS4xMTM0MywxMDI3LjM0ODYgNzUwLjE4NzUsMTAxMi43MTg4IEMgNzk0LjkxMjcsOTk4LjIwMjEzIDg2NS45NzgzNiw5NjcuMDUxOTcgOTIzLjIxODc1LDkzOS44NDM3NSBDIDk4MC44MjE5OSw5MTIuNDYzMDYgMTA5MC4xNTUxLDg0Ny44NjQxMiAxMTM3LjUsODEwLjM3NSBDIDExODMuODYwOCw3NzMuNjY1MTggMTIxNS4zMDQ5LDc0NS42NTgxOCAxMjM3LjQzNzUsNzIwLjEyNSBDIDEyNDguMzM4Niw3MDcuNTQ5IDEyNjAuMTgyMyw2OTIuNTkzNTYgMTI2OC40Njg4LDY3Ny4zNzUgQyAxMjc2Ljc1NTIsNjYyLjE1NjQ0IDEyODcuNjI4NSw2MzMuMTU2OTIgMTI4Mi4xNTYyLDYxOC41MzEyNSBDIDEyODAuOTM4NSw2MTUuMjc2NTEgMTI3OS42MDQ4LDYxMi40Njk5NSAxMjc3LjU2MjUsNjEwLjAzMTI1IEMgMTI3NS41MjAyLDYwNy41OTI1NSAxMjY5LjA4NzgsNjA4LjQ1OTI2IDEyNjksNjA1IEMgMTI2OC43OTAyLDU5Ni43MzUxOCAxMjY1LjY4NDUsNjA0Ljc1NTc3IDEyNjQuMTg3NSw2MDUgeiBNIDEyNjYuMzQzOCw2MjAuMjE4NzUgQyAxMjY2Ljc1ODYsNjIwLjgwNDQ5IDEyNjcuMzc0OSw2MjEuNzc2NDEgMTI2OC4xMjUsNjIzLjc4MTI1IEMgMTI3MS4wMjE4LDYzMS41MjMzOCAxMjY2LjY4NDMsNjU1LjY4IDEyNTkuMzEyNSw2NjkuMjE4NzUgQyAxMjUxLjk0MDcsNjgyLjc1NzUgMTIzNi42NzQxLDY5OC4xNDI2OSAxMjI2LjEyNSw3MTAuMzEyNSBDIDEyMDUuMDQ5Niw3MzQuNjI2MDYgMTE3NC4yMjEzLDc2Mi4xNzQwNiAxMTI4LjE4NzUsNzk4LjYyNSBDIDEwODMuMTM3OSw4MzQuMjk2NTkgOTcyLjcyNzE3LDg5OS43MTk1OSA5MTYuNzgxMjUsOTI2LjMxMjUgQyA4NTkuODg5NTIsOTUzLjM1NDk5IDc4OC42ODUwOSw5ODQuNDMwOSA3NDUuNTMxMjUsOTk4LjQzNzUgQyA3MDkuMTY2MzQsMTAxMC4yNDA2IDY0OS42ODY1NCwxMDIyLjI3MTMgNjI5LjgxMjUsMTAyNi4yMTg4IEwgNzE0LjA5Mzc1LDg1MS43NSBDIDc2OC44MDA2Niw4NDkuNzAwNyA4MzcuODg2MzQsODM2LjUzMzY1IDg4MS4yMTg3NSw4MjQuOTY4NzUgQyA5MjUuNTUyOTcsODEzLjEzNjUgMTAwNy4yOTc0LDc4OC42MzI0MiAxMDU3LjYyNSw3NjYuNzUgQyAxMTA3LjczNyw3NDQuOTYxMjkgMTE3MC4xNTk0LDcwNS41ODE4NCAxMjExLjY1NjIsNjcyLjA2MjUgQyAxMjMyLjMwMjYsNjU1LjM4NTI5IDEyNTMuNDAxMSw2MjkuNTE2NjIgMTI2MS40Njg4LDYyMy4yMTg3NSBDIDEyNjMuOTA1OCw2MjEuMzE2MzMgMTI2NS41NDk0LDYyMC41ODI5NSAxMjY2LjM0MzgsNjIwLjIxODc1IHoiCisgICAgICAgaWQ9InBhdGg4MDg1IgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM3MjIpIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3NjY2NjY2Nzc3Nzc3Nzc2Njc3Nzc3NzY2Nzc3NzYyIgLz4KKyAgICA8ZworICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGlkPSJnODA4NyIKKyAgICAgICBtYXNrPSJ1cmwoI21hc2s3NzA0KSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5MzQ0ODYsMC4xMTQyODAyLC0wLjExNDI4MDIsMC45OTM0NDg2LC05LjI0MzI0LDU4OC4wOTA1NCkiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTg1LjA5NjAzIgorICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTEyLjg1OTY1NCI+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOC4wMDQ1NzE0ZS0yLC0zLjEyNWUtMikiCisgICAgICAgICBzdHlsZT0iZmlsbDojYmNiNzg2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgICBkPSJNIDExMTEuNDA2MiwtMjg1LjkzNzUgTCAxMTA3LjQ2ODgsLTI4NC4wNjI1IEMgMTEwNy40MjgzLC0yODQuMDUyMjggMTEwNy4zNjkyLC0yODQuMDQyMDEgMTEwNy4zNDM4LC0yODQuMDMxMjUgQyAxMTA2LjkyNSwtMjgzLjgxODQgMTEwNy4xNzkxLC0yODMuOTMwNjcgMTEwNi42ODc1LC0yODMuNzE4NzUgQyAxMTA2LjIwMTQsLTI4My41MDkxOSAxMTA0Ljk0OTksLTI4My4xMzQ1NiAxMTAyLjU5MzgsLTI4Mi4yNSBDIDEwOTkuMjYyNiwtMjgwLjk5OTQyIDEwOTYuNzg5NSwtMjgwLjEwMDE2IDEwOTUuNTkzOCwtMjc5LjE4NzUgQyAxMDk0LjA1NzYsLTI3OS4xNjYyMyAxMDkxLjg3MzMsLTI3OC45NTQxOSAxMDg5LjkzNzUsLTI3OC40Njg3NSBDIDEwODYuOTU2LC0yNzcuNzIxMDggMTA4NS4wODIzLC0yNzcuMjk0NzQgMTA4My4xODc1LC0yNzYuODc1IEMgMTA4MS4yOTI3LC0yNzYuNDU1MjcgMTA4MS41MTIsLTI3Ni4yMzI4MSAxMDgwLjMxMjUsLTI3NiBDIDEwNzkuMDE1OSwtMjc1Ljc0ODMzIDEwNzguNTkxMSwtMjc2LjAwODk5IDEwNzQuODc1LC0yNzUuMjE4NzUgQyAxMDcxLjM4NTEsLTI3NC40NzY2IDEwNjUuOTgwMiwtMjczLjI4NzY4IDEwNjQuNzE4OCwtMjcyLjUzMTI1IEMgMTA2My4xMzQ4LC0yNzIuNzEyMDMgMTA2MC44NTEzLC0yNzIuODUzMDMgMTA1OC44NzUsLTI3Mi41NjI1IEMgMTA1NS44MzQ2LC0yNzIuMTE1NTQgMTA1My45NTg4LC0yNzEuODg5NzQgMTA1Mi4wMzEyLC0yNzEuNjU2MjUgQyAxMDUxLjM3NTgsLTI3MS41NzY4NyAxMDUwLjk5MDIsLTI3MS40NTU0NyAxMDUwLjY4NzUsLTI3MS4zNzUgQyAxMDUwLjI2MTMsLTI3MS4yNDMzNCAxMDUwLjAwMTcsLTI3MS4xMTQ5OCAxMDQ5LjMxMjUsLTI3MS4wMzEyNSBDIDEwNDguMDAwOSwtMjcwLjg3MTg4IDEwNDcuNTUwMywtMjcxLjE4ODA4IDEwNDMuNzgxMiwtMjcwLjc1IEMgMTA0MC4yMjczLC0yNzAuMzM2OTEgMTAzNC43NzU4LC0yNjkuNDc3MTggMTAzMy41MzEyLC0yNjguODEyNSBDIDEwMzEuOTMyMiwtMjY5LjEwOTc5IDEwMjkuNjczNSwtMjY5LjM0NjY5IDEwMjcuNjg3NSwtMjY5LjE1NjI1IEMgMTAyNC42Mjg3LC0yNjguODYyOTMgMTAyMi43MTU1LC0yNjguNjcyMjYgMTAyMC43ODEyLC0yNjguNSBDIDEwMTguODQ3LC0yNjguMzI3NzMgMTAxOS4wOTI2LC0yNjguMDc3NjMgMTAxNy44NzUsLTI2Ny45Njg3NSBDIDEwMTYuNTU4OCwtMjY3Ljg1MTA1IDEwMTYuMTE1MiwtMjY4LjEzMjM4IDEwMTIuMzQzOCwtMjY3LjcxODc1IEMgMTAwOC44MDE3LC0yNjcuMzMwMyAxMDAzLjMzNTksLTI2Ni41MDk0OCAxMDAyLjA2MjUsLTI2NS44NDM3NSBDIDEwMDAuNDYzNiwtMjY2LjEzODQ0IDk5OC4xNzUzLC0yNjYuMzUwNzYgOTk2LjE4NzUsLTI2Ni4xNTYyNSBDIDk5My4xMjkyMSwtMjY1Ljg1NyA5OTEuMjQ2MywtMjY1LjY3NjAxIDk4OS4zMTI1LC0yNjUuNSBDIDk4OC42NTUwMSwtMjY1LjQ0MDE1IDk4OC4yNzI0NSwtMjY1LjMyMTQ0IDk4Ny45Njg3NSwtMjY1LjI1IEMgOTg3LjU0MTA1LC0yNjUuMTMxMDQgOTg3LjI4NTI1LC0yNjUuMDMxOTMgOTg2LjU5Mzc1LC0yNjQuOTY4NzUgQyA5ODUuMjc3NzUsLTI2NC44NDg0OSA5ODQuODM0LC0yNjUuMTYzNjMgOTgxLjA2MjUsLTI2NC43NSBDIDk3Ny41MDYzMSwtMjY0LjM1OTk4IDk3Mi4wNTY5LC0yNjMuNTEwODQgOTcwLjgxMjUsLTI2Mi44NDM3NSBDIDk2OS4yMTM4MSwtMjYzLjEzNzkzIDk2Ni45NTI2NSwtMjYzLjM2NzQ3IDk2NC45Njg3NSwtMjYzLjE1NjI1IEMgOTYxLjkxMzA1LC0yNjIuODMwOTIgOTU5Ljk5NDcsLTI2Mi42MzAwMSA5NTguMDYyNSwtMjYyLjQzNzUgQyA5NTYuMTMwMzEsLTI2Mi4yNDQ5OSA5NTYuMzcyNzUsLTI2MS45OTY2MiA5NTUuMTU2MjUsLTI2MS44NzUgQyA5NTMuODQxMzcsLTI2MS43NDM1MyA5NTMuMzkzMiwtMjYyLjAzOTU0IDk0OS42MjUsLTI2MS41OTM3NSBDIDk0Ni4wODYxMSwtMjYxLjE3NTA5IDk0MC42NDczLC0yNjAuMzAxNTggOTM5LjM3NSwtMjU5LjYyNSBDIDkzNy43Nzc0MSwtMjU5LjkwNjA0IDkzNS41MTUwNSwtMjYwLjA0NTQzIDkzMy41MzEyNSwtMjU5LjgxMjUgQyA5MzAuNDc5MjcsLTI1OS40NTQxMyA5MjguNTg2MjUsLTI1OS4yNDQ2NCA5MjYuNjU2MjUsLTI1OS4wMzEyNSBDIDkyNi4wMDAwNywtMjU4Ljk1ODY5IDkyNS42MTU2LC0yNTguODU4NTYgOTI1LjMxMjUsLTI1OC43ODEyNSBDIDkyNC44ODU3MSwtMjU4LjY1NDAyIDkyNC42Mjc2LC0yNTguNTE0MDUgOTIzLjkzNzUsLTI1OC40Mzc1IEMgOTIyLjYyNDExLC0yNTguMjkxODEgOTIyLjE3MDE1LC0yNTguNjExNTIgOTE4LjQwNjI1LC0yNTguMTI1IEMgOTE0Ljg1NzM3LC0yNTcuNjY2MjQgOTA5LjQyNzYsLTI1Ni43MDU5OCA5MDguMTg3NSwtMjU2IEMgOTA2LjU5NDQxLC0yNTYuMjQ0MjQgOTA0LjM1MzcsLTI1Ni4zODEzNSA5MDIuMzc1LC0yNTYuMTI1IEMgODk5LjMyNzQxLC0yNTUuNzMwMTggODk3LjQyNDMsLTI1NS40NzY1NSA4OTUuNSwtMjU1LjIxODc1IEMgODkzLjU3NTcxLC0yNTQuOTYwOTYgODkzLjc3MzksLTI1NC43MjUyMiA4OTIuNTYyNSwtMjU0LjU2MjUgQyA4OTEuMjUzMDEsLTI1NC4zODY2IDg5MC44MTUzLC0yNTQuNjY2ODggODg3LjA2MjUsLTI1NC4wOTM3NSBDIDg4My41MzgyMSwtMjUzLjU1NTUxIDg3OC4xMzkzLC0yNTIuMzk0NTggODc2Ljg3NSwtMjUxLjY1NjI1IEMgODc1LjI4NzUxLC0yNTEuODU5NzkgODczLjAyOTUsLTI1MS45MTA5OCA4NzEuMDYyNSwtMjUxLjU2MjUgQyA4NjguMDM2MzEsLTI1MS4wMjYzOCA4NjYuMTYzNiwtMjUwLjcwMDgxIDg2NC4yNSwtMjUwLjM3NSBDIDg2My41OTk0MSwtMjUwLjI2NDIzIDg2My4yMzYzLC0yNTAuMTA0MDYgODYyLjkzNzUsLTI1MCBDIDg2Mi41MTY4MSwtMjQ5LjgzNTEyIDg2Mi4yNzQwNSwtMjQ5LjY2ODcgODYxLjU5Mzc1LC0yNDkuNTMxMjUgQyA4NjAuMjk5MDUsLTI0OS4yNjk2NiA4NTkuODY2NjUsLTI0OS41Mzc0NSA4NTYuMTU2MjUsLTI0OC43MTg3NSBDIDg1Mi42NTc3NywtMjQ3Ljk0NjggODQ3LjMxMDM1LC0yNDYuMzM1ODIgODQ2LjA5Mzc1LC0yNDUuNSBDIDg0NC41MzA4NSwtMjQ1LjU3NzQ1IDg0Mi4zMzYyNSwtMjQ1LjQxNDcyIDg0MC40MDYyNSwtMjQ0LjkwNjI1IEMgODM3LjQzMzg3LC0yNDQuMTIzMTIgODM1LjU4ODU1LC0yNDMuNjc0MTYgODMzLjcxODc1LC0yNDMuMTU2MjUgQyA4MzEuODQ4NzUsLTI0Mi42MzgzNSA4MzIuMDUyMSwtMjQyLjM4ODk3IDgzMC44NzUsLTI0Mi4wNjI1IEMgODI5LjYwMjUxLC0yNDEuNzA5NiA4MjkuMTc3OTUsLTI0MS45NTU0MSA4MjUuNTMxMjUsLTI0MC44NzUgQyA4MjIuMTA2NTcsLTIzOS44NjAzNyA4MTYuODgxODUsLTIzNy45NDE4MyA4MTUuNjU2MjUsLTIzNy4wMzEyNSBDIDgxNC4xMTc0NywtMjM3LjAxODUxIDgxMS45MzY0NSwtMjM2Ljc1OTAzIDgxMC4wMzEyNSwtMjM2LjE1NjI1IEMgODA3LjEwMDI3LC0yMzUuMjI4OTEgODA1LjI4MDksLTIzNC42OTc4MyA4MDMuNDM3NSwtMjM0LjA5Mzc1IEMgODAyLjgxMDcxLC0yMzMuODg4MzcgODAyLjQ0NTg1LC0yMzMuNzAxMTcgODAyLjE1NjI1LC0yMzMuNTYyNSBDIDgwMS43NDg2NywtMjMzLjM0ODg5IDgwMS41MDI5NSwtMjMzLjE1Mzc1IDgwMC44NDM3NSwtMjMyLjkzNzUgQyA3OTkuNTg5MjUsLTIzMi41MjU5NiA3OTkuMTU3NiwtMjMyLjc0ODQ2IDc5NS41NjI1LC0yMzEuNSBDIDc5Mi4xNzI2MSwtMjMwLjMyMjgzIDc4Ni45Njc1NSwtMjI4LjI4NjMgNzg1Ljc4MTI1LC0yMjcuMzQzNzUgQyA3ODQuMjU3MzcsLTIyNy4yODQwOCA3ODIuMTMxMiwtMjI2Ljk0ODg4IDc4MC4yNSwtMjI2LjI4MTI1IEMgNzc3LjM1MjYxLC0yMjUuMjUyOTYgNzc1LjU1MDk1LC0yMjQuNjA1NzcgNzczLjcxODc1LC0yMjMuOTY4NzUgQyA3NzEuODg2NTUsLTIyMy4zMzE3NCA3NzIuMDkwOSwtMjIzLjEyMDIxIDc3MC45Mzc1LC0yMjIuNzE4NzUgQyA3NjkuNjkwNzEsLTIyMi4yODQ3OSA3NjkuMjczOTUsLTIyMi41MTkwMyA3NjUuNzE4NzUsLTIyMS4xNTYyNSBDIDc2Mi4zODAwNSwtMjE5Ljg3NjQ1IDc1Ny4yMzE2NSwtMjE3LjY3MzcgNzU2LjAzMTI1LC0yMTYuNjg3NSBDIDc1NC41MjQwNywtMjE2LjU3OTgxIDc1Mi4zOTU1NSwtMjE2LjE4ODcgNzUwLjUzMTI1LC0yMTUuNDY4NzUgQyA3NDcuNjYzMDcsLTIxNC4zNjExNSA3NDUuOTA3MzUsLTIxMy42ODcxOSA3NDQuMDkzNzUsLTIxMyBDIDc0My40NzcwNSwtMjEyLjc2NjM3IDc0My4wOTczLC0yMTIuNTU3OTcgNzQyLjgxMjUsLTIxMi40MDYyNSBDIDc0Mi44MTI1MSwtMjEyLjQwNjI1IDc0Mi44MTI1LC0yMTIuMzc2NzMgNzQyLjgxMjUsLTIxMi4zNzUgTCA3MzQuODEyNSwtMjA5LjE4NzUgTCA3MjIuMzM2NiwtMjA1LjY5NTYxIEwgNzMwLjI2NjI2LC0xODYuNDE3ODkgQyA3MjkuNjc0NjMsLTE4NC40NDQzMiA3NDIuODEyNSwtMTkxLjE1NjI1IDc0Mi44MTI1LC0xOTEuMTU2MjUgQyA3NDMuMDM4OTEsLTE5MS4zMDA5MyA3NDMuMjYxNDUsLTE5MS40Mjg4NiA3NDMuNTMxMjUsLTE5MS41MzEyNSBDIDc0NC42MTE3NywtMTkxLjk0MTIzIDc0NS43MDI4NSwtMTkxLjc0NzAyIDc0OS41MzEyNSwtMTkzLjIxODc1IEMgNzUzLjM1OTc3LC0xOTQuNjkwNDkgNzU0Ljc1NTMsLTE5NS4yMjM3MyA3NTUuNDM3NSwtMTk1LjYyNSBDIDc1Ni4xMTcxMSwtMTk2LjAyNDc4IDc1Ny4wNDkyNSwtMTk2LjUwNDM3IDc1Ny42NTYyNSwtMTk3LjE1NjI1IEMgNzU5LjQ4MzE3LC0xOTcuMjk0IDc2MS4yMjcwNSwtMTk3LjY0OTQ4IDc2Mi41OTM3NSwtMTk4LjE1NjI1IEMgNzY1LjU2MTc1LC0xOTkuMjU2NzcgNzY3LjQ2OTEsLTE5OS45NjI0NCA3NjkuMzc1LC0yMDAuNjI1IEMgNzcxLjI4MDgxLC0yMDEuMjg3NTQgNzcxLjcyOTE1LC0yMDIuMDM5ODcgNzcyLjc4MTI1LC0yMDIuNDA2MjUgQyA3NzMuODcyODcsLTIwMi43ODYzNiA3NzQuOTc2MzUsLTIwMi41NzE2MyA3NzguODQzNzUsLTIwMy45Mzc1IEMgNzgyLjcxMTE1LC0yMDUuMzAzMzYgNzg0LjEyNjksLTIwNS43NjQ1OCA3ODQuODEyNSwtMjA2LjE1NjI1IEMgNzg1LjUxMzYxLC0yMDYuNTU2NzcgNzg2LjUxMzMsLTIwNy4wODkyMyA3ODcuMTI1LC0yMDcuNzUgQyA3ODkuMDk1ODEsLTIwNy44MDQ2NiA3OTAuOTQxOTUsLTIwOC4xMzQ2MyA3OTIuNDA2MjUsLTIwOC42MjUgQyA3OTUuNDA3NzcsLTIwOS42MzAwOCA3OTcuMzMyNCwtMjEwLjI0NjcxIDc5OS4yNSwtMjEwLjg3NSBDIDgwMC43ODg2MSwtMjExLjM3OTEgODAxLjQyNDE1LC0yMTEuOTIxNzcgODAyLjE1NjI1LC0yMTIuMzEyNSBDIDgwMi4zODY0NywtMjEyLjQ0NjgxIDgwMi42MzIxNSwtMjEyLjU2NjIzIDgwMi45MDYyNSwtMjEyLjY1NjI1IEMgODA0LjAwNDU3LC0yMTMuMDE2NzMgODA1LjA4NzcsLTIxMi43Mzc2MiA4MDksLTIxMy45Njg3NSBDIDgxMi45MTIzMSwtMjE1LjE5OTg4IDgxNC4zNjYsLTIxNS42NDE3IDgxNS4wNjI1LC0yMTYgQyA4MTUuNzU2NDEsLTIxNi4zNTY5NyA4MTYuNjkyNiwtMjE2Ljc5MjYxIDgxNy4zMTI1LC0yMTcuNDA2MjUgQyA4MTkuMTc3NzEsLTIxNy40Mjg5MSA4MjAuOTQ4MzUsLTIxNy42NzMwOCA4MjIuMzQzNzUsLTIxOC4wOTM3NSBDIDgyNS4zNzQxNSwtMjE5LjAwNzI5IDgyNy4zMzYxNSwtMjE5LjUyMzg1IDgyOS4yODEyNSwtMjIwLjA2MjUgQyA4MzEuMjI2MzcsLTIyMC42MDExNCA4MzEuNzA3NDUsLTIyMS4zMjcwMiA4MzIuNzgxMjUsLTIyMS42MjUgQyA4MzMuODk1MjcsLTIyMS45MzQxNSA4MzUuMDAxMjUsLTIyMS42MTc2MSA4MzguOTY4NzUsLTIyMi42NTYyNSBDIDg0Mi45MzYyNSwtMjIzLjY5NDg4IDg0NC4zODYyNSwtMjI0LjA4ODk4IDg0NS4wOTM3NSwtMjI0LjQwNjI1IEMgODQ1LjgyODU1LC0yMjQuNzM1ODQgODQ2LjkwNzY1LC0yMjUuMTU5OTcgODQ3LjUzMTI1LC0yMjUuNzgxMjUgQyA4NDkuNTI5MDcsLTIyNS42NjUyNSA4NTEuMzg4NywtMjI1LjgwMTM0IDg1Mi44NzUsLTIyNi4xNTYyNSBDIDg1NS45NTMxMSwtMjI2Ljg5MTI1IDg1Ny45NTg0LC0yMjcuMjU3MTkgODU5LjkzNzUsLTIyNy42NTYyNSBDIDg2MS41MjU0MSwtMjI3Ljk3NjQzIDg2Mi4xODE4LC0yMjguNDQ2OCA4NjIuOTM3NSwtMjI4Ljc1IEMgODYzLjE3NTAxLC0yMjguODU2OCA4NjMuNDA0NCwtMjI4Ljk0Mjc2IDg2My42ODc1LC0yMjkgQyA4NjQuODIwOTEsLTIyOS4yMjkxOSA4NjUuOTkyMTUsLTIyOC43OTEwNyA4NzAuMDMxMjUsLTIyOS41IEMgODc0LjA3MDY3LC0yMzAuMjA4OTMgODc1LjUzMTUsLTIzMC40MjcwOSA4NzYuMjUsLTIzMC42ODc1IEMgODc2Ljk2NTgxLC0yMzAuOTQ2OTQgODc3Ljk1NDM1LC0yMzEuMjU0NzQgODc4LjU5Mzc1LC0yMzEuNzgxMjUgQyA4ODAuNTE3OTUsLTIzMS41NDE3NiA4ODIuMzQxNjUsLTIzMS41NTY3MiA4ODMuNzgxMjUsLTIzMS43ODEyNSBDIDg4Ni45MDc2NywtMjMyLjI2ODg3IDg4OC45MzU4LC0yMzIuNDgxOTIgODkwLjkzNzUsLTIzMi43NSBDIDg5Mi45MzkyMSwtMjMzLjAxODA3IDg5My40MjYyNSwtMjMzLjY5NTE0IDg5NC41MzEyNSwtMjMzLjg0Mzc1IEMgODk1LjY3NzY3LC0yMzMuOTk3OTMgODk2LjgwNzEsLTIzMy41NDIxOCA5MDAuODc1LC0yMzQuMDYyNSBDIDkwNC45NDI4MSwtMjM0LjU4MjgyIDkwNi40MzUyNSwtMjM0Ljc1ODIzIDkwNy4xNTYyNSwtMjM1IEMgOTA3Ljg5MzM3LC0yMzUuMjQ3MTQgOTA4Ljk1NDM1LC0yMzUuNTg2MjMgOTA5LjU5Mzc1LC0yMzYuMTI1IEMgOTExLjY0Mzc1LC0yMzUuNzg5NDcgOTEzLjU2NzQ1LC0yMzUuNzI3MDQgOTE1LjA5Mzc1LC0yMzUuOTA2MjUgQyA5MTguMjM1OTUsLTIzNi4yNzUyMSA5MjAuMjczNzUsLTIzNi40NjU2MSA5MjIuMjgxMjUsLTIzNi42ODc1IEMgOTIzLjg5MjA3LC0yMzYuODY1NTIgOTI0LjU0NTksLTIzNy4yOTU3IDkyNS4zMTI1LC0yMzcuNTMxMjUgQyA5MjUuNTUzNDEsLTIzNy42MTY3NyA5MjUuODA2NTUsLTIzNy42ODY4NSA5MjYuMDkzNzUsLTIzNy43MTg3NSBDIDkyNy4yNDM0NSwtMjM3Ljg0NjQ3IDkyOC4zOTUwNSwtMjM3LjM3MjEgOTMyLjQ2ODc1LC0yMzcuODQzNzUgQyA5MzYuNTQyNDUsLTIzOC4zMTU0IDkzOC4wMjc4LC0yMzguNDU0MzUgOTM4Ljc1LC0yMzguNjg3NSBDIDkzOS40Njk0MSwtMjM4LjkxOTc3IDk0MC40NTAyNSwtMjM5LjE2MDk2IDk0MS4wOTM3NSwtMjM5LjY1NjI1IEMgOTQzLjAzMDA1LC0yMzkuMzIyNzkgOTQ0Ljg2MzgsLTIzOS4yNTIwMSA5NDYuMzEyNSwtMjM5LjQwNjI1IEMgOTQ5LjQ1ODUxLC0yMzkuNzQxMiA5NTEuNDksLTIzOS45MjQ4NCA5NTMuNSwtMjQwLjEyNSBDIDk1NS41MDk5MSwtMjQwLjMyNTE0IDk1NS45ODQxNSwtMjQwLjk1MTM5IDk1Ny4wOTM3NSwtMjQxLjA2MjUgQyA5NTguMjQ0ODUsLTI0MS4xNzc3OCA5NTkuMzkwMjUsLTI0MC42OTc0NCA5NjMuNDY4NzUsLTI0MS4xMjUgQyA5NjcuNTQ3MjUsLTI0MS41NTI1NiA5NjkuMDU3NjUsLTI0MS42ODcwOSA5NjkuNzgxMjUsLTI0MS45MDYyNSBDIDk3MC41MjA0NywtMjQyLjEzMDExIDk3MS41NzY4NSwtMjQyLjQxOTUgOTcyLjIxODc1LC0yNDIuOTM3NSBDIDk3NC4yNzU3NSwtMjQyLjUzODgzIDk3Ni4yMjA2LC0yNDIuNDQ0MSA5NzcuNzUsLTI0Mi41OTM3NSBDIDk4MC44OTg3MSwtMjQyLjkwMTg1IDk4Mi45MjU4LC0yNDMuMDY3IDk4NC45Mzc1LC0yNDMuMjUgQyA5ODYuNTUxNTEsLTI0My4zOTY4MiA5ODcuMjAwNTUsLTI0My44MTA1NSA5ODcuOTY4NzUsLTI0NC4wMzEyNSBDIDk4OC4yMTAwNSwtMjQ0LjExMjExIDk4OC40NjIzLC0yNDQuMTYxMTYgOTg4Ljc1LC0yNDQuMTg3NSBDIDk4OS45MDIxMSwtMjQ0LjI5Mjk1IDk5MS4wNDI5LC0yNDMuNzk0NzUgOTk1LjEyNSwtMjQ0LjE4NzUgQyA5OTkuMjA3MTEsLTI0NC41ODAyNSAxMDAwLjcxMzksLTI0NC43MTgzNCAxMDAxLjQzNzUsLTI0NC45Mzc1IEMgMTAwMi4xNTg0LC0yNDUuMTU1ODMgMTAwMy4xMzcxLC0yNDUuMzg1MiAxMDAzLjc4MTIsLTI0NS44NzUgQyAxMDA1LjcxOTMsLTI0NS41MjUwMSAxMDA3LjU1MDEsLTI0NS40MjA2MiAxMDA5LC0yNDUuNTYyNSBDIDEwMTIuMTQ4NywtMjQ1Ljg3MDYgMTAxNC4xNzU4LC0yNDYuMDM1NzUgMTAxNi4xODc1LC0yNDYuMjE4NzUgQyAxMDE4LjE5OTEsLTI0Ni40MDE3NCAxMDE4LjcwMTcsLTI0Ny4wNTY3NyAxMDE5LjgxMjUsLTI0Ny4xNTYyNSBDIDEwMjAuOTY0OCwtMjQ3LjI1OTQ4IDEwMjIuMTA0NywtMjQ2Ljc3MTQyIDEwMjYuMTg3NSwtMjQ3LjE1NjI1IEMgMTAzMC4yNzA0LC0yNDcuNTQxMDcgMTAzMS43NzYyLC0yNDcuNjU3MjUgMTAzMi41LC0yNDcuODc1IEMgMTAzMy4yMzkzLC0yNDguMDk3NDMgMTAzNC4yOTU2LC0yNDguMzg5NDkgMTAzNC45Mzc1LC0yNDguOTA2MjUgQyAxMDM2Ljk5NDksLTI0OC41MDQ0OCAxMDM4Ljk0MDQsLTI0OC40MDI5MiAxMDQwLjQ2ODgsLTI0OC41NjI1IEMgMTA0My42MTUzLC0yNDguODkxMDIgMTA0NS42NDU4LC0yNDkuMDg1MiAxMDQ3LjY1NjIsLTI0OS4yODEyNSBDIDEwNDkuMjY5MiwtMjQ5LjQzODU0IDEwNDkuOTIxOSwtMjQ5LjkxMjczIDEwNTAuNjg3NSwtMjUwLjE1NjI1IEMgMTA1MC45MjgyLC0yNTAuMjQ0MjkgMTA1MS4xNTA3LC0yNTAuMjc3NjIgMTA1MS40Mzc1LC0yNTAuMzEyNSBDIDEwNTIuNTg1OCwtMjUwLjQ1MjIgMTA1My43NTQyLC0yNDkuOTcyNTkgMTA1Ny44MTI1LC0yNTAuNTYyNSBDIDEwNjEuODcwOCwtMjUxLjE1MjQyIDEwNjMuMzc0MywtMjUxLjMzOTY0IDEwNjQuMDkzOCwtMjUxLjU5Mzc1IEMgMTA2NC44MTA0LC0yNTEuODQ2OTEgMTA2NS43Njg0LC0yNTIuMTUxODIgMTA2Ni40MDYyLC0yNTIuNjg3NSBDIDEwNjguMzI1OSwtMjUyLjQ3NTU2IDEwNzAuMTI2MiwtMjUyLjUzNjA5IDEwNzEuNTYyNSwtMjUyLjc4MTI1IEMgMTA3NC42ODE2LC0yNTMuMzEzNjUgMTA3Ni42NzQxLC0yNTMuNzA5ODYgMTA3OC42NTYyLC0yNTQuMDkzNzUgQyAxMDgwLjYzODMsLTI1NC40Nzc2MiAxMDgxLjEzMDUsLTI1NS4xMzM0IDEwODIuMjE4OCwtMjU1LjM3NSBDIDEwODMuMzQ3NSwtMjU1LjYyNTY2IDEwODQuNDg5LC0yNTUuMjU4NzEgMTA4OC40Njg4LC0yNTYuMjUgQyAxMDkyLjQ0ODMsLTI1Ny4yNDEyNyAxMDkzLjg5ODMsLTI1Ny42NjkzIDEwOTQuNTkzOCwtMjU4LjAzMTI1IEMgMTA5NS4zMTYsLTI1OC40MDcyNSAxMDk2LjM1NTUsLTI1OC45MDE4MyAxMDk2Ljk2ODgsLTI1OS41NjI1IEMgMTA5OC45MzE3LC0yNTkuNTc0NTQgMTEwMC43NjI1LC0yNTkuODUzNTUgMTEwMi4xODc1LC0yNjAuNDA2MjUgQyAxMTA1LjEzODcsLTI2MS41NTA4NSAxMTA3LjA2MDcsLTI2Mi4yNzU2NyAxMTA4Ljg3NSwtMjYzLjE1NjI1IEMgMTExMC4zMzA3LC0yNjMuODYyNzcgMTExMS4xOTQxLC0yNjQuODU4MjggMTExMS40MDYyLC0yNjUuMTU2MjUgQyAxMTExLjYxODUsLTI2NS40NTQyIDExMTEuNTA1MSwtMjY1Ljg4NDggMTExMS41MzEyLC0yNjUuOTA2MjUgQyAxMTExLjU3NDIsLTI2NS45NDE0OCAxMTExLjg3MTYsLTI2Ni4wMDAyOCAxMTEyLjAzMTIsLTI2Ni4zNDM3NSBDIDExMTIuODkwMiwtMjY4LjE5MDgyIDExMTQuMzU0NCwtMjcxLjk3MTM5IDExMTQuNDY4OCwtMjcyLjY1NjI1IEMgMTExNC41ODI1LC0yNzMuMzM4MzkgMTExNC42MzY4LC0yNzQuMDA5MDIgMTExNC42ODc1LC0yNzQuNDA2MjUgQyAxMTE0LjcxNjksLTI3NC42MzU3NSAxMTE0LjU0MDQsLTI3NS4yODUxNSAxMTE0LjU2MjUsLTI3NS4zNDM3NSBDIDExMTQuNTkzNCwtMjc1LjQyNTc5IDExMTQuODUwOCwtMjc1LjU5NDMyIDExMTQuOTA2MiwtMjc1Ljg0Mzc1IEMgMTExNS4xNzI1LC0yNzcuMDQyMDYgMTExNC45OTUzLC0yNzguMDUxMTEgMTExNC43ODEyLC0yNzkuNDY4NzUgQyAxMTE0LjU2NzMsLTI4MC44ODYzOCAxMTEzLjgwOTYsLTI4NC4wODMzOCAxMTEzLjE1NjIsLTI4NC45Mzc1IEMgMTExMi40OTczLC0yODUuNzk5MjIgMTExMS45MzE0LC0yODUuOTQ4MDEgMTExMS40MDYyLC0yODUuOTM3NSB6IgorICAgICAgICAgaWQ9InBhdGg4MDg5IgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3NjY2NjY3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc3Nzc3NzYyIgLz4KKyAgICAgIDxnCisgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg3NDIxKSIKKyAgICAgICAgIGlkPSJnODA5MSI+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODA5MyIKKyAgICAgICAgICAgZD0iTSAxMTA3LjQwOSwtMjg0LjA0OTYxIEMgMTEwNi45OTAzLC0yODMuODM2NzggMTEwNy4yNTM0LC0yODMuOTU1NzIgMTEwNi43NjE4LC0yODMuNzQzOCBDIDExMDYuMjc1NywtMjgzLjUzNDI2IDExMDUuMDM4NCwtMjgzLjE2OTQxIDExMDIuNjgyMiwtMjgyLjI4NDg1IEMgMTA5OS4zNTExLC0yODEuMDM0MjggMTA5Ni44NTIsLTI4MC4xMzE0MSAxMDk1LjY1NjMsLTI3OS4yMTg3NSBDIDEwOTQuMTIwMiwtMjc5LjE5NzQ5IDEwOTEuOTM1OCwtMjc4Ljk4NTQ0IDEwOTAsLTI3OC41IEMgMTA4Ny4wMTg1LC0yNzcuNzUyMzQgMTA4NS4xNDQ4LC0yNzcuMzI1OTkgMTA4My4yNSwtMjc2LjkwNjI1IEMgMTA4MS4zNTUyLC0yNzYuNDg2NTMgMTA4MS41NzQ1LC0yNzYuMjY0MDYgMTA4MC4zNzUsLTI3Ni4wMzEyNSBDIDEwNzkuMDc4NCwtMjc1Ljc3OTU5IDEwNzguNjUzNiwtMjc2LjA0MDI0IDEwNzQuOTM3NSwtMjc1LjI1IEMgMTA3MS40NDc2LC0yNzQuNTA3ODYgMTA2Ni4wNDI3LC0yNzMuMzE4OTMgMTA2NC43ODEzLC0yNzIuNTYyNSBDIDEwNjMuMTk3NCwtMjcyLjc0MzI5IDEwNjAuOTEzOCwtMjcyLjg4NDI4IDEwNTguOTM3NSwtMjcyLjU5Mzc1IEMgMTA1NS44OTcxLC0yNzIuMTQ2OCAxMDU0LjAyMTMsLTI3MS45MjA5OSAxMDUyLjA5MzgsLTI3MS42ODc1IEMgMTA1MS40Mzg0LC0yNzEuNjA4MTMgMTA1MS4wNTI3LC0yNzEuNDg2NzIgMTA1MC43NSwtMjcxLjQwNjI1IEMgMTA1MC4zMjM4LC0yNzEuMjc0NiAxMDUwLjA2NDIsLTI3MS4xNDYyMyAxMDQ5LjM3NSwtMjcxLjA2MjUgQyAxMDQ4LjA2MzQsLTI3MC45MDMxNCAxMDQ3LjYxMjgsLTI3MS4yMTkzMyAxMDQzLjg0MzgsLTI3MC43ODEyNSBDIDEwNDAuMjg5OSwtMjcwLjM2ODE3IDEwMzQuODM4NCwtMjY5LjUwODQzIDEwMzMuNTkzOCwtMjY4Ljg0Mzc1IEMgMTAzMS45OTQ4LC0yNjkuMTQxMDUgMTAyOS43MzYsLTI2OS4zNzc5NCAxMDI3Ljc1LC0yNjkuMTg3NSBDIDEwMjQuNjkxMiwtMjY4Ljg5NDE5IDEwMjIuNzc4LC0yNjguNzAzNTEgMTAyMC44NDM4LC0yNjguNTMxMjUgQyAxMDE4LjkwOTUsLTI2OC4zNTg5OSAxMDE5LjE1NTEsLTI2OC4xMDg4OCAxMDE3LjkzNzUsLTI2OCBDIDEwMTYuNjIxMywtMjY3Ljg4MjMxIDEwMTYuMTc3NywtMjY4LjE2MzYzIDEwMTIuNDA2MywtMjY3Ljc1IEMgMTAwOC44NjQ0LC0yNjcuMzYxNTYgMTAwMy4zOTg0LC0yNjYuNTQwNzMgMTAwMi4xMjUsLTI2NS44NzUgQyAxMDAwLjUyNjEsLTI2Ni4xNjk3IDk5OC4yMzc4MywtMjY2LjM4MjAxIDk5Ni4yNSwtMjY2LjE4NzUgQyA5OTMuMTkxNzYsLTI2NS44ODgyNiA5OTEuMzA4ODcsLTI2NS43MDcyNiA5ODkuMzc1LC0yNjUuNTMxMjUgQyA5ODguNzE3NTEsLTI2NS40NzE0MSA5ODguMzM0OTYsLTI2NS4zNTI2OSA5ODguMDMxMjUsLTI2NS4yODEyNSBDIDk4Ny42MDM2LC0yNjUuMTYyMyA5ODcuMzQ3NzQsLTI2NS4wNjMxOCA5ODYuNjU2MjUsLTI2NSBDIDk4NS4zNDAyOSwtMjY0Ljg3OTc1IDk4NC44OTY0OSwtMjY1LjE5NDg4IDk4MS4xMjUsLTI2NC43ODEyNSBDIDk3Ny41Njg4NiwtMjY0LjM5MTI0IDk3Mi4xMTk0NiwtMjYzLjU0MjA5IDk3MC44NzUsLTI2Mi44NzUgQyA5NjkuMjc2MzcsLTI2My4xNjkxOSA5NjcuMDE1MTYsLTI2My4zOTg3MiA5NjUuMDMxMjUsLTI2My4xODc1IEMgOTYxLjk3NTY1LC0yNjIuODYyMTggOTYwLjA1NzIxLC0yNjIuNjYxMjYgOTU4LjEyNSwtMjYyLjQ2ODc1IEMgOTU2LjE5Mjc5LC0yNjIuMjc2MjUgOTU2LjQzNTEzLC0yNjIuMDI3ODcgOTU1LjIxODc1LC0yNjEuOTA2MjUgQyA5NTMuOTAzODcsLTI2MS43NzQ3OSA5NTMuNDU1NzcsLTI2Mi4wNzA3OSA5NDkuNjg3NSwtMjYxLjYyNSBDIDk0Ni4xNDg2MywtMjYxLjIwNjM1IDk0MC43MDk4MiwtMjYwLjMzMjgzIDkzOS40Mzc1LC0yNTkuNjU2MjUgQyA5MzcuODM5OTUsLTI1OS45MzczIDkzNS41Nzc1NCwtMjYwLjA3NjY4IDkzMy41OTM3NSwtMjU5Ljg0Mzc1IEMgOTMwLjU0MTc3LC0yNTkuNDg1MzkgOTI4LjY0ODY3LC0yNTkuMjc1ODkgOTI2LjcxODc1LC0yNTkuMDYyNSBDIDkyNi4wNjI1NSwtMjU4Ljk4OTk1IDkyNS42NzgwOSwtMjU4Ljg4OTgxIDkyNS4zNzUsLTI1OC44MTI1IEMgOTI0Ljk0ODIzLC0yNTguNjg1MjggOTI0LjY5MDA5LC0yNTguNTQ1MyA5MjQsLTI1OC40Njg3NSBDIDkyMi42ODY2NywtMjU4LjMyMzA3IDkyMi4yMzI1NCwtMjU4LjY0Mjc3IDkxOC40Njg3NSwtMjU4LjE1NjI1IEMgOTE0LjkxOTg2LC0yNTcuNjk3NSA5MDkuNDkwMTIsLTI1Ni43MzcyMyA5MDguMjUsLTI1Ni4wMzEyNSBDIDkwNi42NTY5NSwtMjU2LjI3NTQ5IDkwNC40MTYxOSwtMjU2LjQxMjYgOTAyLjQzNzUsLTI1Ni4xNTYyNSBDIDg5OS4zODk5MSwtMjU1Ljc2MTQ0IDg5Ny40ODY3OSwtMjU1LjUwNzggODk1LjU2MjUsLTI1NS4yNSBDIDg5My42MzgyMiwtMjU0Ljk5MjIxIDg5My44MzYzOSwtMjU0Ljc1NjQ3IDg5Mi42MjUsLTI1NC41OTM3NSBDIDg5MS4zMTU1NCwtMjU0LjQxNzg1IDg5MC44Nzc4MSwtMjU0LjY5ODEzIDg4Ny4xMjUsLTI1NC4xMjUgQyA4ODMuNjAwNzEsLTI1My41ODY3NiA4NzguMjAxODUsLTI1Mi40MjU4MyA4NzYuOTM3NSwtMjUxLjY4NzUgQyA4NzUuMzUsLTI1MS44OTEwNCA4NzMuMDkyLC0yNTEuOTQyMjMgODcxLjEyNSwtMjUxLjU5Mzc1IEMgODY4LjA5ODgzLC0yNTEuMDU3NjMgODY2LjIyNjExLC0yNTAuNzMyMDYgODY0LjMxMjUsLTI1MC40MDYyNSBDIDg2My42NjE4OSwtMjUwLjI5NTQ4IDg2My4yOTg3OSwtMjUwLjEzNTMxIDg2MywtMjUwLjAzMTI1IEMgODYyLjU3OTMzLC0yNDkuODY2MzcgODYyLjMzNjU1LC0yNDkuNjk5OTUgODYxLjY1NjI1LC0yNDkuNTYyNSBDIDg2MC4zNjE2LC0yNDkuMzAwOTEgODU5LjkyOTEzLC0yNDkuNTY4NyA4NTYuMjE4NzUsLTI0OC43NSBDIDg1Mi43MjAyMiwtMjQ3Ljk3ODA1IDg0Ny4zNzI4LC0yNDYuMzY3MDcgODQ2LjE1NjI1LC0yNDUuNTMxMjUgQyA4NDQuNTkzNDcsLTI0NS42MDg3IDg0Mi4zOTg2NywtMjQ1LjQ0NTk3IDg0MC40Njg3NSwtMjQ0LjkzNzUgQyA4MzcuNDk2MzEsLTI0NC4xNTQzNyA4MzUuNjUxMTQsLTI0My43MDU0MSA4MzMuNzgxMjUsLTI0My4xODc1IEMgODMxLjkxMTM3LC0yNDIuNjY5NiA4MzIuMTE0NjUsLTI0Mi40MjAyMiA4MzAuOTM3NSwtMjQyLjA5Mzc1IEMgODI5LjY2NTA0LC0yNDEuNzQwODUgODI5LjI0MDQ3LC0yNDEuOTg2NjYgODI1LjU5Mzc1LC0yNDAuOTA2MjUgQyA4MjIuMTY5MDUsLTIzOS44OTE2MiA4MTYuOTQ0MzEsLTIzNy45NzMwOCA4MTUuNzE4NzUsLTIzNy4wNjI1IEMgODE0LjE3OTkyLC0yMzcuMDQ5NzYgODExLjk5ODkyLC0yMzYuNzkwMjggODEwLjA5Mzc1LC0yMzYuMTg3NSBDIDgwNy4xNjI2OSwtMjM1LjI2MDE2IDgwNS4zNDM0NCwtMjM0LjcyOTA4IDgwMy41LC0yMzQuMTI1IEMgODAyLjg3MzI0LC0yMzMuOTE5NjIgODAyLjUwODI3LC0yMzMuNzMyNDIgODAyLjIxODc1LC0yMzMuNTkzNzUgQyA4MDEuODExMTIsLTIzMy4zODAxNCA4MDEuNTY1NDEsLTIzMy4xODUgODAwLjkwNjI1LC0yMzIuOTY4NzUgQyA3OTkuNjUxNzksLTIzMi41NTcyMSA3OTkuMjIwMTQsLTIzMi43Nzk3MSA3OTUuNjI1LC0yMzEuNTMxMjUgQyA3OTIuMjM1MTUsLTIzMC4zNTQwOCA3ODcuMDMwMDIsLTIyOC4zMTc1NSA3ODUuODQzNzUsLTIyNy4zNzUgQyA3ODQuMzE5ODYsLTIyNy4zMTUzMyA3ODIuMTkzNywtMjI2Ljk4MDEzIDc4MC4zMTI1LC0yMjYuMzEyNSBDIDc3Ny40MTUxMSwtMjI1LjI4NDIxIDc3NS42MTM0MiwtMjI0LjYzNzAyIDc3My43ODEyNSwtMjI0IEMgNzcxLjk0OTA4LC0yMjMuMzYyOTkgNzcyLjE1MzQsLTIyMy4xNTE0NiA3NzEsLTIyMi43NSBDIDc2OS43NTMyMiwtMjIyLjMxNjA0IDc2OS4zMzYzOSwtMjIyLjU1MDI4IDc2NS43ODEyNSwtMjIxLjE4NzUgQyA3NjIuNDQyNTgsLTIxOS45MDc3IDc1Ny4yOTQxLC0yMTcuNzA0OTUgNzU2LjA5Mzc1LC0yMTYuNzE4NzUgQyA3NTQuNTg2NTcsLTIxNi42MTEwNiA3NTIuNDU4MDYsLTIxNi4yMTk5NSA3NTAuNTkzNzUsLTIxNS41IEMgNzQ3LjcyNTU3LC0yMTQuMzkyNCA3NDUuOTY5OTUsLTIxMy43MTg0NCA3NDQuMTU2MjUsLTIxMy4wMzEyNSBDIDc0My41Mzk1OSwtMjEyLjc5NzYyIDc0My4xNTk4NCwtMjEyLjU4OTIyIDc0Mi44NzUsLTIxMi40Mzc1IEMgNzQyLjg3NSwtMjEyLjQzNzUgNzQyLjg3NSwtMjExLjM0Mzc1IDc0Mi44NzUsLTIxMS4zNDM3NSBDIDc0Mi45ODY3OCwtMjExLjU2NjExIDc0My4yNjA5OSwtMjEyLjE2MTE4IDc0My43ODEyNSwtMjEyLjQzNzUgQyA3NDQuNDc5MjIsLTIxMi44MDgyMiA3NDguNTk0ODgsLTIxNC40MzA4NyA3NTAuNTkzNzUsLTIxNS4xNTYyNSBDIDc1Mi4yNTA2MSwtMjE1Ljc1NzUgNzU0Ljc0NzY0LC0yMTYuNDg0OTMgNzU2LjU2MjUsLTIxNi40Njg3NSBDIDc1Ni44NjQxMiwtMjE2LjQ2NjA2IDc1Ny4xNTAxMiwtMjE2LjQxNzg1IDc1Ny40MDYyNSwtMjE2LjM3NSBDIDc1OS4yNDg3NCwtMjE2LjA2Njc1IDc2NC44NzUsLTIxNC44MTI1IDc2NC44NzUsLTIxNC44MTI1IEMgNzY0Ljg3NDk5LC0yMTQuODEyNSA3NTguNjQxNTEsLTIxNi40NTkyNSA3NTcuODQzNzUsLTIxNi42NTYyNSBDIDc1Ny42NTI5NiwtMjE2LjcwMzM2IDc1Ny4zMDgwMywtMjE2LjcyNDk3IDc1Ni44NzUsLTIxNi43MTg3NSBDIDc1OC4wMjA0NiwtMjE3LjU4ODQ2IDc2MS42MzYsLTIxOS4xMTIyNiA3NjQuMjE4NzUsLTIyMC4xNTYyNSBDIDc2Ny4wNTY5NywtMjIxLjMwMzUyIDc2Ny4zMzU1NiwtMjIxLjQwODA3IDc2OS4yODEyNSwtMjIxLjgxMjUgQyA3NzEuMjg5NTUsLTIyMi4yMjk5NCA3NzIuNDM3NSwtMjIyLjMxMjUgNzcyLjQzNzUsLTIyMi4zMTI1IEMgNzcyLjQzNzUsLTIyMi4zMTI0OSA3NzIuMzU1MTQsLTIyMi45MTM2NCA3NzMuNDA2MjUsLTIyMy40Mzc1IEMgNzc0LjExMTM1LC0yMjMuNzg4OTEgNzc4LjI5MzI3LC0yMjUuMzI5OSA3ODAuMzEyNSwtMjI2IEMgNzgyLjI2NDQsLTIyNi42NDc3MyA3ODUuMzY5OSwtMjI3LjM1ODUgNzg3LjE4NzUsLTIyNyBDIDc4OS4wNTA3MywtMjI2LjYzMjUgNzk0LjcxODc1LC0yMjUuMTg3NSA3OTQuNzE4NzUsLTIyNS4xODc1IEMgNzk0LjcxODc2LC0yMjUuMTg3NSA3ODguNDMxNzUsLTIyNy4wNTg2MSA3ODcuNjI1LC0yMjcuMjgxMjUgQyA3ODcuNDMyMDgsLTIyNy4zMzQ1IDc4Ny4wOTQxNiwtMjI3LjM2NzI5IDc4Ni42NTYyNSwtMjI3LjM3NSBDIDc4Ny44MTQ1OSwtMjI4LjIwNzg4IDc5MS40NTA2OSwtMjI5LjU3MDMyIDc5NC4wNjI1LC0yMzAuNTMxMjUgQyA3OTYuOTMyNjYsLTIzMS41ODcyNiA3OTcuMjI5ODQsLTIzMS42OTMwNSA3OTkuMTg3NSwtMjMyLjA2MjUgQyA4MDEuMDQwOTksLTIzMi40MTIyOSA4MDIuMDQ2MzQsLTIzMi40ODc5OCA4MDIuMjE4NzUsLTIzMi41IEMgODAyLjMzMjM1LC0yMzIuNzE3MjQgODAyLjU5NjIsLTIzMy4zMTAwMiA4MDMuMTI1LC0yMzMuNTYyNSBDIDgwMy44MzQ0NCwtMjMzLjkwMTI0IDgwOC4wNTEwNywtMjM1LjI3NTI1IDgxMC4wOTM3NSwtMjM1Ljg3NSBDIDgxMS43ODY5MiwtMjM2LjM3MjExIDgxNC4zMzQ1MiwtMjM2LjkxMTc3IDgxNi4xODc1LC0yMzYuNzgxMjUgQyA4MTYuNDk1NDUsLTIzNi43NTk1NyA4MTYuODAwOTksLTIzNi42ODM5OSA4MTcuMDYyNSwtMjM2LjYyNSBDIDgxOC45NDM2OCwtMjM2LjIwMDY4IDgyNC42NTYyNSwtMjM0LjU5Mzc1IDgyNC42NTYyNSwtMjM0LjU5Mzc1IEMgODI0LjY1NjI2LC0yMzQuNTkzNzUgODE4LjMxNDUxLC0yMzYuNjU5IDgxNy41LC0yMzYuOTA2MjUgQyA4MTcuMzA1MjEsLTIzNi45NjUzOSA4MTYuOTQyMTIsLTIzNy4wMTAxOSA4MTYuNSwtMjM3LjAzMTI1IEMgODE3LjY2OTQ5LC0yMzcuODI4OCA4MjEuMzYzMDIsLTIzOS4wODc0NyA4MjQsLTIzOS45Njg3NSBDIDgyNi44OTc4MSwtMjQwLjkzNzIyIDgyNy4yMzMwMSwtMjQwLjk3MjA3IDgyOS4yMTg3NSwtMjQxLjI1IEMgODMxLjI2ODQsLTI0MS41MzY4OSA4MzIuNDA2MjUsLTI0MS41NjI1IDgzMi40MDYyNSwtMjQxLjU2MjUgQyA4MzIuNDA2MjMsLTI0MS41NjI1IDgzMi4zMzM1LC0yNDIuMTY5NDcgODMzLjQwNjI1LC0yNDIuNjI1IEMgODM0LjEyNTg1LC0yNDIuOTMwNTcgODM4LjM5NzIzLC0yNDQuMTI1NzUgODQwLjQ2ODc1LC0yNDQuNjI1IEMgODQyLjQ3MTE5LC0yNDUuMTA3NTggODQ1LjY2NzI0LC0yNDUuNTUzMjkgODQ3LjUzMTI1LC0yNDUuMDMxMjUgQyA4NDkuNDQyMDMsLTI0NC40OTYxIDg1NS4yNSwtMjQyLjUzMTI1IDg1NS4yNSwtMjQyLjUzMTI1IEMgODU1LjI1LC0yNDIuNTMxMjUgODQ4LjgyNzM0LC0yNDQuOTU0NzYgODQ4LC0yNDUuMjUgQyA4NDcuODAyMTYsLTI0NS4zMjA2MSA4NDcuNDE3ODQsLTI0NS4zOTAzOSA4NDYuOTY4NzUsLTI0NS40Mzc1IEMgODQ4LjE1NjY1LC0yNDYuMTY2MTUgODUxLjg4NDAyLC0yNDcuMjExNTggODU0LjU2MjUsLTI0Ny45Mzc1IEMgODU3LjUwNTkyLC0yNDguNzM1MjUgODU3Ljg1NDU4LC0yNDguNzA4MzMgODU5Ljg3NSwtMjQ4Ljg0Mzc1IEMgODYxLjc4Nzg5LC0yNDguOTcxOTggODYyLjgyMjA1LC0yNDguOTE0ODQgODYzLC0yNDguOTA2MjUgQyA4NjMuMTE3MjgsLTI0OS4xMDk5MSA4NjMuMzkxNzYsLTI0OS42ODU3MyA4NjMuOTM3NSwtMjQ5Ljg3NSBDIDg2NC42Njk2OSwtMjUwLjEyODk0IDg2OS4wMTYwMiwtMjUwLjkyMjg5IDg3MS4xMjUsLTI1MS4yNSBDIDg3Mi44NzMxMywtMjUxLjUyMTExIDg3NS41MjU4OCwtMjUxLjczNDcgODc3LjQzNzUsLTI1MS4zNDM3NSBDIDg3Ny43NTUxNiwtMjUxLjI3ODc5IDg3OC4wNDI3MiwtMjUxLjE1ODI0IDg3OC4zMTI1LC0yNTEuMDYyNSBDIDg4MC4yNTMyNCwtMjUwLjM3Mzc3IDg4Ni4xNTYyNSwtMjQ3Ljk2ODc1IDg4Ni4xNTYyNSwtMjQ3Ljk2ODc1IEMgODg2LjE1NjI2LC0yNDcuOTY4NzUgODc5LjYyMTU0LC0yNTAuOTE5NTIgODc4Ljc4MTI1LC0yNTEuMjgxMjUgQyA4NzguNTgwMjgsLTI1MS4zNjc3NiA4NzguMjA2MTIsLTI1MS40NDgwNCA4NzcuNzUsLTI1MS41MzEyNSBDIDg3OC45NTY1LC0yNTIuMTY0NDMgODgyLjc3OTU2LC0yNTIuOTI2ODUgODg1LjUsLTI1My40Mzc1IEMgODg4LjQ4OTUzLC0yNTMuOTk4NjkgODg4LjgwMDIzLC0yNTMuOTY3MDQgODkwLjg0Mzc1LC0yNTMuOTY4NzUgQyA4OTIuOTUzMDEsLTI1My45NzA1MiA4OTQuMTU2MjUsLTI1My44NDM3NSA4OTQuMTU2MjUsLTI1My44NDM3NSBDIDg5NC4xNTYyNSwtMjUzLjg0Mzc0IDg5NC4wODM1NCwtMjU0LjQ3NDk0IDg5NS4xODc1LC0yNTQuNzgxMjUgQyA4OTUuOTI4MDIsLTI1NC45ODY3MiA5MDAuMzEzNjIsLTI1NS42MTUxMiA5MDIuNDM3NSwtMjU1Ljg0Mzc1IEMgOTA0LjQ5MDUyLC0yNTYuMDY0NzQgOTA3Ljc1NjEzLC0yNTYuMDk1OTcgOTA5LjY1NjI1LC0yNTUuMzc1IEMgOTExLjYwNDA0LC0yNTQuNjM1OTMgOTE3LjUsLTI1MiA5MTcuNSwtMjUyIEMgOTE3LjUwMDAyLC0yNTIgOTEwLjkzNzEyLC0yNTUuMTc4OTcgOTEwLjA5Mzc1LC0yNTUuNTYyNSBDIDkwOS44OTIwNywtMjU1LjY1NDIzIDkwOS41NTE1NCwtMjU1Ljc0ODcxIDkwOS4wOTM3NSwtMjU1Ljg0Mzc1IEMgOTEwLjMwNDY3LC0yNTYuNDQ1NjMgOTE0LjA3ODE3LC0yNTcuMDkyNTkgOTE2LjgxMjUsLTI1Ny41IEMgOTE5LjgxNzMsLTI1Ny45NDc3MiA5MjAuMTM4MDEsLTI1Ny45NTE3IDkyMi4xODc1LC0yNTcuOTA2MjUgQyA5MjQuMTI3OTUsLTI1Ny44NjMyMyA5MjUuMTk0NDksLTI1Ny43MTIwMiA5MjUuMzc1LC0yNTcuNjg3NSBDIDkyNS40OTM5MiwtMjU3Ljg4MDY2IDkyNS43NTg5LC0yNTguNDUzMzMgOTI2LjMxMjUsLTI1OC41OTM3NSBDIDkyNy4wNTUyMSwtMjU4Ljc4MjEzIDkzMS40NjY3OSwtMjU5LjMyODAzIDkzMy41OTM3NSwtMjU5LjUzMTI1IEMgOTM1LjM1Njc4LC0yNTkuNjk5NjcgOTM4LjAxMzg0LC0yNTkuNzY1NTQgOTM5LjkzNzUsLTI1OS4yODEyNSBDIDk0MC4yNTcxOCwtMjU5LjIwMDc3IDk0MC41NDEwMSwtMjU5LjA3NzY2IDk0MC44MTI1LC0yNTguOTY4NzUgQyA5NDIuNzY1NDMsLTI1OC4xODUyNiA5NDguNzE4NzUsLTI1NS41IDk0OC43MTg3NSwtMjU1LjUgQyA5NDguNzE4NzMsLTI1NS41IDk0Mi4xMjY4NCwtMjU4Ljc1MzQ4IDk0MS4yODEyNSwtMjU5LjE1NjI1IEMgOTQxLjA3OTAzLC0yNTkuMjUyNTcgOTQwLjcwODk5LC0yNTkuMzYzMjggOTQwLjI1LC0yNTkuNDY4NzUgQyA5NDEuNDY0MTQsLTI2MC4wNDMwMiA5NDUuMjkzNjYsLTI2MC41OTA5NCA5NDguMDMxMjUsLTI2MC45Njg3NSBDIDk1MS4wMzk2MywtMjYxLjM4Mzk1IDk1MS4zNTQzMiwtMjYxLjQxMTM4IDk1My40MDYyNSwtMjYxLjM0Mzc1IEMgOTU1LjUyNDIzLC0yNjEuMjczOTQgOTU2LjcxODc1LC0yNjEuMDkzNzUgOTU2LjcxODc1LC0yNjEuMDkzNzUgQyA5NTYuNzE4NzMsLTI2MS4wOTM3NSA5NTYuNjQxNSwtMjYxLjczMTE2IDk1Ny43NSwtMjYyIEMgOTU4LjQ5MzYyLC0yNjIuMTgwMzUgOTYyLjkwMTc2LC0yNjIuNjYzNTUgOTY1LjAzMTI1LC0yNjIuODQzNzUgQyA5NjcuMDg5NzIsLTI2My4wMTc5MiA5NzAuMzc0NDksLTI2Mi45NjgwNyA5NzIuMjgxMjUsLTI2Mi4xODc1IEMgOTc0LjIzNTg0LC0yNjEuMzg3MzQgOTgwLjE1NjI1LC0yNTguNjU2MjUgOTgwLjE1NjI1LC0yNTguNjU2MjUgQyA5ODAuMTU2MjMsLTI1OC42NTYyNSA5NzMuNTk2MzIsLTI2MS45NjUwMSA5NzIuNzUsLTI2Mi4zNzUgQyA5NzIuNTQ3NjMsLTI2Mi40NzMwNSA5NzIuMTc4MTQsLTI2Mi41NzgxIDk3MS43MTg3NSwtMjYyLjY4NzUgQyA5NzIuOTMzOTIsLTI2My4yNTE0IDk3Ni43Mjg4MywtMjYzLjgwMTggOTc5LjQ2ODc1LC0yNjQuMTU2MjUgQyA5ODIuNDc5NjYsLTI2NC41NDU3NyA5ODIuNzkwMDYsLTI2NC41NTM5IDk4NC44NDM3NSwtMjY0LjQ2ODc1IEMgOTg2Ljc4ODE0LC0yNjQuMzg4MTUgOTg3Ljg1MDM4LC0yNjQuMjE1NTEgOTg4LjAzMTI1LC0yNjQuMTg3NSBDIDk4OC4xNTA0MSwtMjY0LjM3ODM2IDk4OC40MTQwMiwtMjY0LjkzMjgxIDk4OC45Njg3NSwtMjY1LjA2MjUgQyA5ODkuNzEzMDEsLTI2NS4yMzY1IDk5NC4xMTg2OCwtMjY1LjcxMjk3IDk5Ni4yNSwtMjY1Ljg3NSBDIDk5OC4wMTY2MiwtMjY2LjAwOTI3IDEwMDAuNjk5NywtMjY2LjAwMDcxIDEwMDIuNjI1LC0yNjUuNSBDIDEwMDIuOTQ1LC0yNjUuNDE2NzkgMTAwMy4yMjgzLC0yNjUuMjk4NzMgMTAwMy41LC0yNjUuMTg3NSBDIDEwMDUuNDU0NiwtMjY0LjM4NzM0IDEwMTEuNDA2MywtMjYxLjYyNSAxMDExLjQwNjMsLTI2MS42MjUgQyAxMDExLjQwNjIsLTI2MS42MjUgMTAwNC44MTUxLC0yNjQuOTY1MDEgMTAwMy45Njg4LC0yNjUuMzc1IEMgMTAwMy43NjY0LC0yNjUuNDczMDUgMTAwMy4zOTY5LC0yNjUuNTc4MTEgMTAwMi45Mzc1LC0yNjUuNjg3NSBDIDEwMDQuMTUyNiwtMjY2LjI1MTQgMTAwNy45Nzg4LC0yNjYuNzcwNTYgMTAxMC43MTg4LC0yNjcuMTI1IEMgMTAxMy43Mjk3LC0yNjcuNTE0NTMgMTAxNC4wNzEzLC0yNjcuNTUzOSAxMDE2LjEyNSwtMjY3LjQ2ODc1IEMgMTAxOC4yNDQ3LC0yNjcuMzgwODcgMTAxOS40Mzc1LC0yNjcuMTU2MjUgMTAxOS40Mzc1LC0yNjcuMTU2MjUgQyAxMDE5LjQzNzUsLTI2Ny4xNTYyNSAxMDE5LjM1OTEsLTI2Ny44MDUyNyAxMDIwLjQ2ODgsLTI2OC4wNjI1IEMgMTAyMS4yMTMxLC0yNjguMjM1MDYgMTAyNS42MTgzLC0yNjguNjg1ODYgMTAyNy43NSwtMjY4Ljg0Mzc1IEMgMTAyOS44MTA2LC0yNjguOTk2MzUgMTAzMy4wOTI5LC0yNjguOTQwNTIgMTAzNSwtMjY4LjE1NjI1IEMgMTAzNi45NTUsLTI2Ny4zNTIzIDEwNDIuODc1LC0yNjQuNjU2MjUgMTA0Mi44NzUsLTI2NC42NTYyNSBDIDEwNDIuODc1LC0yNjQuNjU2MjUgMTAzNi4zMTUyLC0yNjcuOTMyMTIgMTAzNS40Njg4LC0yNjguMzQzNzUgQyAxMDM1LjI2NjMsLTI2OC40NDIxOSAxMDM0Ljg5NywtMjY4LjU0NTk3IDEwMzQuNDM3NSwtMjY4LjY1NjI1IEMgMTAzNS42NTI5LC0yNjkuMjE3NzkgMTAzOS40NDk0LC0yNjkuNzg0MDMgMTA0Mi4xODc1LC0yNzAuMTU2MjUgQyAxMDQ1LjE5NjUsLTI3MC41NjUzIDEwNDUuNTEwMiwtMjcwLjU3MTgzIDEwNDcuNTYyNSwtMjcwLjUgQyAxMDQ5LjUwNTYsLTI3MC40MzIwMSAxMDUwLjU2OTcsLTI3MC4zMzUxNSAxMDUwLjc1LC0yNzAuMzEyNSBDIDEwNTAuODY4OCwtMjcwLjUwNjkgMTA1MS4xMzQ2LC0yNzEuMDQxMzEgMTA1MS42ODc1LC0yNzEuMTg3NSBDIDEwNTIuNDI5MywtMjcxLjM4MzYyIDEwNTYuODE4NiwtMjcyLjAxNjI4IDEwNTguOTM3NSwtMjcyLjI4MTI1IEMgMTA2MC42OTM5LC0yNzIuNTAwODYgMTA2My4zNDI4LC0yNzIuNjEzNTYgMTA2NS4yNSwtMjcyLjI1IEMgMTA2NS41NjY5LC0yNzIuMTg5NTkgMTA2NS44NTU4LC0yNzIuMDYwNjIgMTA2Ni4xMjUsLTI3MS45Njg3NSBDIDEwNjguMDYxMiwtMjcxLjMwNzgzIDEwNzMuOTY4OCwtMjY5LjAzMTI1IDEwNzMuOTY4OCwtMjY5LjAzMTI1IEMgMTA3My45Njg3LC0yNjkuMDMxMjUgMTA2Ny40MzIxLC0yNzEuODM3OCAxMDY2LjU5MzgsLTI3Mi4xODc1IEMgMTA2Ni4zOTMzLC0yNzIuMjcxMTMgMTA2Ni4wMTc2LC0yNzIuMzYwODMgMTA2NS41NjI1LC0yNzIuNDM3NSBDIDEwNjYuNzY2MiwtMjczLjA4Nzk2IDEwNzAuNTgxNiwtMjczLjgwOTQ1IDEwNzMuMjgxMywtMjc0LjQzNzUgQyAxMDc2LjI0OCwtMjc1LjEyNzcgMTA3Ni41NzAyLC0yNzUuMTkyNTcgMTA3OC41OTM4LC0yNzUuMzEyNSBDIDEwODAuNjgyNCwtMjc1LjQzNjMgMTA4MS44NzUsLTI3NS4zNDM3NSAxMDgxLjg3NSwtMjc1LjM0Mzc1IEMgMTA4MS44NzUsLTI3NS4zNDM3NCAxMDgxLjc4OCwtMjc1Ljk3NTggMTA4Mi44NzUsLTI3Ni4zNzUgQyAxMDgzLjYwNDIsLTI3Ni42NDI4IDEwODcuOTIyMiwtMjc3LjcxMjk3IDEwOTAsLTI3OC4xODc1IEMgMTA5Mi4wMDg1LC0yNzguNjQ2MTkgMTA5NS4xNjc5LC0yNzkuMjE2OCAxMDk3LC0yNzguODEyNSBDIDEwOTguODc4MSwtMjc4LjM5ODA0IDExMTAuNTc4MiwtMjc1Ljc5Njg3IDExMTAuNTc4MiwtMjc1Ljc5Njg3IEMgMTExMC41NzgyLC0yNzUuNzk2ODcgMTA5OC4yNTA3LC0yNzguODE5NTMgMTA5Ny40Mzc1LC0yNzkuMDYyNSBDIDEwOTcuMjQzLC0yNzkuMTIwNjIgMTA5Ni44Nzg5LC0yNzkuMTY4NzYgMTA5Ni40Mzc1LC0yNzkuMTg3NSBDIDEwOTcuNjA1MSwtMjc5Ljk5MTE5IDEwOTkuOTUxNywtMjgwLjg3NDggMTEwMi41NDY5LC0yODEuODkwNjIgQyAxMTA0LjIyODMsLTI4Mi41NDg4IDExMDMuNDcwNiwtMjgyLjI2NzIxIDExMDUuMzIyOCwtMjgyLjg5NDIyIEMgMTEwNy4wNzY0LC0yODMuNDg3ODggMTEwNy44MDgyLC0yODMuOTA0OTMgMTEwNy45NTMyLC0yODQuMDA3MjEgQyAxMTA4LjI5OTMsLTI4NC4yMTM3MiAxMTA3LjU5NzIsLTI4NC4xMjkwOSAxMTA3LjQwOSwtMjg0LjA0OTYxIHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjcwMDEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenNjc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3NjY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY2MiIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODA5NSIKKyAgICAgICAgICAgZD0iTSAxMDgyLjYyNSwtMjc1LjEyNSBDIDEwODQuNDk4LC0yNzQuNzMxNTIgMTA4Ny4xMjExLC0yNzMuOTc5NDUgMTA4OC42NTYzLC0yNzMuMTU2MjUgQyAxMDkwLjE5MTUsLTI3Mi4zMzMwNiAxMDkxLjQ3ODUsLTI3Mi4xMDAyNSAxMDk0LjAzMTMsLTI3MC42NTYyNSBDIDEwOTYuNTU3OSwtMjY5LjIyNjk5IDEwOTguODI3MSwtMjY4LjY0OTI5IDExMDEsLTI2OC4xMjUgQyAxMTAzLjM0NzYsLTI2Ny41NTg1OCAxMTA2LjQzNTQsLTI2Ny40MDk3NyAxMTA5Ljg0MzgsLTI2Ni45Mzc1IEMgMTEwOC43NTQ5LC0yNjcuNzc3MjUgMTEwMy4yMzY0LC0yNjguMTA5OTUgMTEwMS40Mzc1LC0yNjguNSBDIDEwOTkuNjM4NiwtMjY4Ljg5MDA2IDEwOTcuNTQzNCwtMjY5LjUxNjE2IDEwOTQuODQzOCwtMjcwLjgxMjUgQyAxMDkyLjE0NDEsLTI3Mi4xMDg4NCAxMDkxLjM0OTQsLTI3Mi42MTE0NiAxMDg5LjAzMTMsLTI3My41IEMgMTA4Ni43MTMxLC0yNzQuMzg4NTQgMTA4NS4wMjY5LC0yNzQuODgzMTQgMTA4Mi42MjUsLTI3NS4xMjUgeiIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNjk0OSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgwOTciCisgICAgICAgICAgIGQ9Ik0gMTA1MS40Njg4LC0yNzAgQyAxMDUzLjM3NDEsLTI2OS40MjI0MSAxMDU1Ljk5NjksLTI2OC4zODQyOCAxMDU3LjU2MjUsLTI2Ny40MDYyNSBDIDEwNTkuMTI4MSwtMjY2LjQyODIzIDEwNjAuNDQyNywtMjY2LjA0NjQ0IDEwNjMuMDYyNSwtMjY0LjI4MTI1IEMgMTA2NS42NTU1LC0yNjIuNTM0MDkgMTA2OC4wNDg0LC0yNjEuNTcxOTggMTA3MC4zMTI1LC0yNjAuNjg3NSBDIDEwNzIuNzU4NiwtMjU5LjczMTkzIDEwNzUuOTk1MSwtMjU5LjAzMDM3IDEwNzkuNzE4OCwtMjU3LjYyNSBDIDEwNzguNTI5MiwtMjU4Ljc2Mjg0IDEwNzIuNjU1NywtMjYwLjMxMTc1IDEwNzAuNzgxMywtMjYxIEMgMTA2OC45MDY4LC0yNjEuNjg4MjUgMTA2Ni42OTk1LC0yNjIuNTY2MiAxMDYzLjkwNjMsLTI2NC4yODEyNSBDIDEwNjEuMTEzLC0yNjUuOTk2MjkgMTA2MC4zMzI3LC0yNjYuNTY1MTUgMTA1Ny45Njg4LC0yNjcuNjg3NSBDIDEwNTUuNjA0NywtMjY4LjgwOTg0IDEwNTMuOTEyMSwtMjY5LjUyMjA1IDEwNTEuNDY4OCwtMjcwIHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5NjEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MDk5IgorICAgICAgICAgICBkPSJNIDEwMjAuMjE4OCwtMjY2Ljg0Mzc1IEMgMTAyMi4xMzA3LC0yNjYuMjA1NjQgMTAyNC44LC0yNjUuMDg4MzkgMTAyNi4zNzUsLTI2NC4wMzEyNSBDIDEwMjcuOTUwMSwtMjYyLjk3NDEgMTAyOS4yNzA2LC0yNjIuNTIyNTggMTAzMS45MDYzLC0yNjAuNjI1IEMgMTAzNC41MTQ5LC0yNTguNzQ2NzkgMTAzNi45MzQ3LC0yNTcuNTk0OTcgMTAzOS4yMTg4LC0yNTYuNTYyNSBDIDEwNDEuNjg2NSwtMjU1LjQ0NzA1IDEwNDQuOTgzMywtMjU0LjM4OTIgMTA0OC43NSwtMjUyLjcxODc1IEMgMTA0Ny41NDY3LC0yNTMuOTQxMjggMTA0MS41NDcyLC0yNTYuMDMyOTggMTAzOS42NTYzLC0yNTYuODQzNzUgQyAxMDM3Ljc2NTMsLTI1Ny42NTQ1MiAxMDM1LjU5MTQsLTI1OC43Mzc1NCAxMDMyLjc4MTMsLTI2MC41OTM3NSBDIDEwMjkuOTcxMSwtMjYyLjQ0OTk1IDEwMjkuMTU5NSwtMjYzLjA3MDY4IDEwMjYuNzgxMywtMjY0LjMxMjUgQyAxMDI0LjQwMywtMjY1LjU1NDMgMTAyMi42NzA2LC0yNjYuMjg4MTkgMTAyMC4yMTg4LC0yNjYuODQzNzUgeiIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNjk1Nyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxMDEiCisgICAgICAgICAgIGQ9Ik0gMTExMC4xNzE5LC0yNjYuODkwNjMgQyAxMTEwLjMyMjcsLTI2Ni44NDIwNyAxMTEwLjg1OTksLTI2Ni4yNTk2MyAxMTEwLjI4MTMsLTI2NS40MDYyNSBDIDExMDkuNDcxMiwtMjY0LjIxMTY2IDExMDQuNTc2NCwtMjYyLjA4MTk2IDExMDEuNzE4OCwtMjYxLjI4MTI1IEMgMTA5OC44NzM5LC0yNjAuNDg0MTMgMTA5NS40Mjg3LC0yNjAuMzAzNTEgMTA5MS4xNTYzLC0yNjEuNjU2MjUgQyAxMDg2Ljg1NDcsLTI2My4wMTgyIDEwODUuNjg2NiwtMjY0LjEyNDk3IDEwODAuNSwtMjY1Ljk2ODc1IEMgMTA4NS4xNjQsLTI2My44NTM1OCAxMDg2LjY5NTMsLTI2Mi4wMTY0MiAxMDkwLjYyNSwtMjYwLjYyNSBDIDEwOTIuMjQ1NywtMjYwLjA1MTEzIDEwOTMuOTkyMSwtMjU5LjY4NTQgMTA5NS42ODc1LC0yNTkuNTkzNzUgQyAxMDk1LjI0MjQsLTI1OS4yNjgxMiAxMDk0LjE1NzIsLTI1OC42MTA0NSAxMDkyLjEyNSwtMjU4IEMgMTA4OS4zMjk1LC0yNTcuMTYwMzEgMTA4NS40NzU5LC0yNTYuNDY2MjIgMTA4My44NzUsLTI1Ni4zNzUgQyAxMDgyLjM2MDQsLTI1Ni4yODg2OCAxMDgwLjczMywtMjU2Ljg4NzQ5IDEwODAuNDM3NSwtMjU3IEMgMTA4MC42MDQyLC0yNTYuODk2OTIgMTA4MC44MTA3LC0yNTYuNjIyNjYgMTA4MC4xODc1LC0yNTUuOTY4NzUgQyAxMDc5LjI4ODIsLTI1NS4wMjUxMiAxMDc0LjA0MDEsLTI1NC4wNDU3NSAxMDcxLjA2MjUsLTI1My43MTg3NSBDIDEwNjguMDk4MiwtMjUzLjM5MzIgMTA2NC41NDA5LC0yNTMuNzM0NzEgMTA2MC4xNTYzLC0yNTUuNjI1IEMgMTA1Ni4xNzgzLC0yNTcuMzM5OTcgMTA1NC44MTczLC0yNTguNTQwMzYgMTA1MC43NSwtMjYwLjM3NSBDIDEwNTAuNzUsLTI2MC4zNzUgMTA1MC43NSwtMjYwLjIxODc1IDEwNTAuNzUsLTI2MC4yMTg3NSBDIDEwNTQuMzkzMSwtMjU4LjEyMzQ2IDEwNTYuMDM0LC0yNTYuMzM1NDggMTA1OS42MjUsLTI1NC42NTYyNSBDIDEwNjEuMzU1MiwtMjUzLjg0NzE2IDEwNjMuMjE2NywtMjUzLjI0NzQ5IDEwNjUuMDMxMywtMjUyLjkzNzUgQyAxMDY0LjQ5NjQsLTI1Mi42NTA3NCAxMDYzLjQ3MzUsLTI1Mi4yMjU5OSAxMDYxLjU5MzgsLTI1MS45MDYyNSBDIDEwNTguNzI0OCwtMjUxLjQxODI5IDEwNTQuNzg0OCwtMjUxLjA5MDExIDEwNTMuMTU2MywtMjUxLjE1NjI1IEMgMTA1Mi4zMDU2LC0yNTEuMTkwNzkgMTA1MS40Mjc3LC0yNTEuMzQwNjIgMTA1MC43NSwtMjUxLjU2MjUgQyAxMDUwLjA2NTIsLTI1MS43NzczOCAxMDQ5LjU2MDMsLTI1Mi4wMDcxNyAxMDQ5LjQzNzUsLTI1Mi4wNjI1IEMgMTA0OS42MDY5LC0yNTEuOTU1MjkgMTA0OS44Njg2LC0yNTEuNjU5NjIgMTA0OS4yMTg4LC0yNTEuMDMxMjUgQyAxMDQ4LjMwOTEsLTI1MC4xNTE2MyAxMDQyLjk3MjcsLTI0OS42OTQ4NyAxMDM5Ljk2ODgsLTI0OS41NjI1IEMgMTAzNi45NzgzLC0yNDkuNDMwNzEgMTAzMy4zNzk5LC0yNTAuMDEzMTMgMTAyOC45Njg4LC0yNTIuMTI1IEMgMTAyNC41Mjc2LC0yNTQuMjUxMjYgMTAyMy4zMjczLC0yNTUuNTI2NiAxMDE4LjA2MjUsLTI1Ny45MDYyNSBDIDEwMjIuNzk2OCwtMjU1LjMwOTIxIDEwMjQuMzQ5LC0yNTMuMjc3MTUgMTAyOC40MDYzLC0yNTEuMTg3NSBDIDEwMzAuMDc5NiwtMjUwLjMyNTY1IDEwMzEuODkxNSwtMjQ5LjY5MzI1IDEwMzMuNjU2MywtMjQ5LjI1IEMgMTAzMy4xOTMsLTI0OS4wMTY2OCAxMDMyLjA2NjksLTI0OC41NjE4NiAxMDI5Ljk2ODgsLTI0OC4zMTI1IEMgMTAyNy4wODI1LC0yNDcuOTY5NTIgMTAyMy4xMzQyLC0yNDcuODE5NjIgMTAyMS41LC0yNDcuOTM3NSBDIDEwMTkuOTUzOCwtMjQ4LjA0OSAxMDE4LjI2ODgsLTI0OC43OTQ0NiAxMDE3Ljk2ODgsLTI0OC45Mzc1IEMgMTAxOC4xMzc5LC0yNDguODE3MjEgMTAxOC4zODI2LC0yNDguNTI3MDIgMTAxNy43NSwtMjQ3LjkzNzUgQyAxMDE2LjgzNzIsLTI0Ny4wODY3NyAxMDExLjUwNTksLTI0Ni42NzUzOCAxMDA4LjUsLTI0Ni41NjI1IEMgMTAwNS41MDc1LC0yNDYuNDUwMTMgMTAwMS45MTAzLC0yNDcuMDUyOTMgOTk3LjUsLTI0OS4xNTYyNSBDIDk5My40OTg3NSwtMjUxLjA2NDQ4IDk5Mi4xMTE5NywtMjUyLjI5NDA4IDk4OC4wMzEyNSwtMjU0LjI1IEMgOTg4LjAzMTIyLC0yNTQuMjUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgQyA5OTEuNjg2MzEsLTI1MS44ODk4MyA5OTMuMzI1NDYsLTI1MC4wNDEyIDk5Ni45Mzc1LC0yNDguMTg3NSBDIDk5OC42Nzc3OSwtMjQ3LjI5NDM1IDEwMDAuNTc0NSwtMjQ2LjY1OTIzIDEwMDIuNDA2MywtMjQ2LjIxODc1IEMgMTAwMS44NjYzLC0yNDUuOTcwNDUgMTAwMC44MjgyLC0yNDUuNjAzNDIgOTk4LjkzNzUsLTI0NS4zNzUgQyA5OTYuMDUxODIsLTI0NS4wMjY0MiA5OTIuMDcxNDUsLTI0NC44NTQwNSA5OTAuNDM3NSwtMjQ0Ljk2ODc1IEMgOTg5LjU4NDA1LC0yNDUuMDI4NjUgOTg4LjcxMTE5LC0yNDUuMjI2NjYgOTg4LjAzMTI1LC0yNDUuNDY4NzUgQyA5ODcuMzQ0MTUsLTI0NS43MDQwNSA5ODYuODQxOSwtMjQ1Ljk0MTAxIDk4Ni43MTg3NSwtMjQ2IEMgOTg2Ljg4ODczLC0yNDUuODg3NzMgOTg3LjE4MzIzLC0yNDUuNTc3NzUgOTg2LjUzMTI1LC0yNDQuOTY4NzUgQyA5ODUuNjE4NiwtMjQ0LjExNjI1IDk4MC4yNTU5MiwtMjQzLjY3NTM4IDk3Ny4yNSwtMjQzLjU2MjUgQyA5NzQuMjU3NTQsLTI0My40NTAxMyA5NzAuNjU2NTQsLTI0NC4wOTA1NSA5NjYuMjUsLTI0Ni4xNTYyNSBDIDk2MS44MTM0NywtMjQ4LjIzNjAzIDk2MC42MDMxMiwtMjQ5LjQ4Nzk2IDk1NS4zNDM3NSwtMjUxLjgxMjUgQyA5NjAuMDczMTMsLTI0OS4yNjUwMSA5NjEuNjM0NDksLTI0Ny4yMzQ3IDk2NS42ODc1LC0yNDUuMTg3NSBDIDk2Ny4zNTkwNSwtMjQ0LjM0MzE3IDk2OS4xNzMwNCwtMjQzLjcyMTA3IDk3MC45Mzc1LC0yNDMuMjgxMjUgQyA5NzAuNDc0MjcsLTI0My4wNDcwMyA5NjkuMzQ3OCwtMjQyLjU5NzE4IDk2Ny4yNSwtMjQyLjM0Mzc1IEMgOTY0LjM2NDMxLC0yNDEuOTk1MTcgOTYwLjQxMzgsLTI0MS43NzQyMyA5NTguNzgxMjUsLTI0MS44NzUgQyA5NTcuMjM2NjksLTI0MS45NzAzMiA5NTUuNTgwOTQsLTI0Mi43MDM4NSA5NTUuMjgxMjUsLTI0Mi44NDM3NSBDIDk1NS40NTAyNCwtMjQyLjcyNTIyIDk1NS42NjMxNywtMjQyLjQzOTkgOTU1LjAzMTI1LC0yNDEuODQzNzUgQyA5NTQuMTE5MzksLTI0MC45ODM0NyA5NDguNzg0NiwtMjQwLjUxMzUgOTQ1Ljc4MTI1LC0yNDAuMzc1IEMgOTQyLjc5MTMsLTI0MC4yMzcxIDkzOS4yMTM4LC0yNDAuODI1NjggOTM0LjgxMjUsLTI0Mi44NDM3NSBDIDkzMC44MTk0MiwtMjQ0LjY3NDY0IDkyOS40NDczOSwtMjQ1Ljg3Mjk1IDkyNS4zNzUsLTI0Ny43NSBDIDkyNS4zNzQ5OCwtMjQ3Ljc1IDkyNS4zNzUsLTI0Ny41OTM3NSA5MjUuMzc1LC0yNDcuNTkzNzUgQyA5MjkuMDIyNjEsLTI0NS40NjA0OCA5MzAuNjQ1MzMsLTI0My42NTg4OCA5MzQuMjUsLTI0MS44NzUgQyA5MzUuOTg2NzUsLTI0MS4wMTU0OSA5MzcuODU3MjcsLTI0MC40MjQ4NiA5MzkuNjg3NSwtMjQwIEMgOTM5LjE0ODAzLC0yMzkuNzQ3MSA5MzguMTM2ODcsLTIzOS4zNTg3MSA5MzYuMjUsLTIzOS4wOTM3NSBDIDkzMy4zNzAyMiwtMjM4LjY4OTM5IDkyOS40MTE4NywtMjM4LjQ0ODEzIDkyNy43ODEyNSwtMjM4LjUzMTI1IEMgOTI2LjkyOTUzLC0yMzguNTc0NjYgOTI2LjA1MzU1LC0yMzguNzM5OCA5MjUuMzc1LC0yMzguOTY4NzUgQyA5MjQuNjg5MzEsLTIzOS4xOTA3NiA5MjQuMTg1NCwtMjM5LjQxMjE0IDkyNC4wNjI1LC0yMzkuNDY4NzUgQyA5MjQuMjMyMDksLTIzOS4zNTk3NiA5MjQuNDk0NCwtMjM5LjA1OTEgOTIzLjg0Mzc1LC0yMzguNDM3NSBDIDkyMi45MzI5NiwtMjM3LjU2NzM2IDkxNy41OTM1NCwtMjM3LjA0NTk4IDkxNC41OTM3NSwtMjM2Ljg3NSBDIDkxMS42MDc0MiwtMjM2LjcwNDc5IDkwOC4wMTk5NCwtMjM3LjE5MDc3IDkwMy42MjUsLTIzOS4xNTYyNSBDIDg5OS4yMDAxMSwtMjQxLjEzNTEzIDg5OC4wMTkwNCwtMjQyLjM4NDQ0IDg5Mi43ODEyNSwtMjQ0LjUzMTI1IEMgODk3LjQ5MTIyLC0yNDIuMTQzNTggODk5LjA1MTQyLC0yNDAuMTQyNTIgOTAzLjA5Mzc1LC0yMzguMTg3NSBDIDkwNC43NjA5LC0yMzcuMzgxMTkgOTA2LjU1NDE4LC0yMzYuNzkwOTIgOTA4LjMxMjUsLTIzNi40MDYyNSBDIDkwNy44NTA4NywtMjM2LjE1NzU1IDkwNi43MTU1LC0yMzUuNjk0IDkwNC42MjUsLTIzNS4zNzUgQyA5MDEuNzQ5NCwtMjM0LjkzNjI0IDg5Ny44NDQ2LC0yMzQuNjQxOSA4OTYuMjE4NzUsLTIzNC42ODc1IEMgODk0LjY4MDUyLC0yMzQuNzMwNjIgODkyLjk4NTk1LC0yMzUuNDMyNzIgODkyLjY4NzUsLTIzNS41NjI1IEMgODkyLjg1NTgzLC0yMzUuNDQ5NjggODkzLjA5ODA3LC0yMzUuMTQ4NzUgODkyLjQ2ODc1LC0yMzQuNTMxMjUgQyA4OTEuNTYwNjMsLTIzMy42NDAxNSA4ODYuMjY1OCwtMjMzLjAwMyA4ODMuMjgxMjUsLTIzMi43MTg3NSBDIDg4MC4zMTAwNywtMjMyLjQzNTc3IDg3Ni43MDc4MywtMjMyLjg5NDU1IDg3Mi4zNDM3NSwtMjM0LjY1NjI1IEMgODY4LjM4NDQxLC0yMzYuMjU0NTYgODY3LjAxNDYsLTIzNy40NTExMiA4NjMsLTIzOC45Njg3NSBDIDg2My4wMDAwMywtMjM4Ljk2ODc1IDg2MywtMjM4LjgxMjUgODYzLC0yMzguODEyNSBDIDg2Ni41OTU5LC0yMzcuMDAxMTUgODY4LjIzODMxLC0yMzUuMjMwMTcgODcxLjgxMjUsLTIzMy42NTYyNSBDIDg3My41MzQ1NywtMjMyLjg5NzkgODc1LjM5OTk4LC0yMzIuMzY3MyA4NzcuMjE4NzUsLTIzMi4wMzEyNSBDIDg3Ni42ODI2NiwtMjMxLjc1MjE3IDg3NS42NTIxNywtMjMxLjM0MzYyIDg3My43ODEyNSwtMjMwLjk2ODc1IEMgODcwLjkyNTg2LC0yMzAuMzk2NjUgODY2Ljk5MTgzLC0yMjkuOTQ5MzYgODY1LjM3NSwtMjI5LjkzNzUgQyA4NjQuNTMwNDksLTIyOS45MzEyOSA4NjMuNjY4OTIsLTIzMC4wMTg0NCA4NjMsLTIzMC4xODc1IEMgODYyLjMyNDA5LC0yMzAuMzQ5MDEgODYxLjgzOTkxLC0yMzAuNTE2NzMgODYxLjcxODc1LC0yMzAuNTYyNSBDIDg2MS44ODU5NywtMjMwLjQ2ODQ4IDg2Mi4xNDE0MiwtMjMwLjE3OTAyIDg2MS41LC0yMjkuNSBDIDg2MC42MDIxMywtMjI4LjU0OTQ4IDg1NS4zMTM1MiwtMjI3LjU4MjkyIDg1Mi4zNzUsLTIyNy4wNjI1IEMgODQ5LjQ0OTY2LC0yMjYuNTQ0NDEgODQ1Ljk0Mjg1LC0yMjYuNjg4MjYgODQxLjY1NjI1LC0yMjguMDkzNzUgQyA4MzcuMzQwNDUsLTIyOS41MDg4MiA4MzYuMTgzNDgsLTIzMC42MjM2OSA4MzEuMDkzNzUsLTIzMi4wNjI1IEMgODM1LjY3MDYsLTIzMC4zMTE0OSA4MzcuMTgyMywtMjI4LjUwMjQ0IDg0MS4xMjUsLTIyNy4wNjI1IEMgODQyLjc1MTA4LC0yMjYuNDY4NjEgODQ0LjQ5Mzg1LC0yMjYuMTA2ODUgODQ2LjIxODc1LC0yMjUuOTA2MjUgQyA4NDUuNzY1OSwtMjI1LjYwOTIzIDg0NC42NjM5NywtMjI1LjAyMjg2IDg0Mi42MjUsLTIyNC40Mzc1IEMgODM5LjgyMDI4LC0yMjMuNjMyMzMgODM1Ljk4NjE0LC0yMjIuODYxNjcgODM0LjQwNjI1LC0yMjIuNjg3NSBDIDgzMi45MTE1LC0yMjIuNTIyNyA4MzEuMjkwMDIsLTIyMy4wMDQzMSA4MzEsLTIyMy4wOTM3NSBDIDgzMS4xNjM1NiwtMjIzLjAwMzY4IDgzMS4zOTI3OCwtMjIyLjczMzgyIDgzMC43ODEyNSwtMjIyLjAzMTI1IEMgODI5Ljg5ODc4LC0yMjEuMDE3NCA4MjQuNzM2NzMsLTIxOS42NTk2IDgyMS44NDM3NSwtMjE4Ljk2ODc1IEMgODE4Ljk2MzczLC0yMTguMjgwOTcgODE1LjUwODE1LC0yMTguMjA4NzMgODExLjI4MTI1LC0yMTkuNDA2MjUgQyA4MDcuNDQ2NCwtMjIwLjQ5MjcgODA2LjEwODY3LC0yMjEuNDc4NjIgODAyLjIxODc1LC0yMjIuNTMxMjUgQyA4MDIuMjE4NzQsLTIyMi41MzEyNSA4MDIuMjE4NzUsLTIyMi4zNzUgODAyLjIxODc1LC0yMjIuMzc1IEMgODA1LjcwMjkzLC0yMjAuOTgwMTUgODA3LjI4ODE2LC0yMTkuNDU1NiA4MTAuNzUsLTIxOC4zNDM3NSBDIDgxMi40MTc5MywtMjE3LjgwODAzIDgxNC4yMDU3OCwtMjE3LjU1NzAxIDgxNS45Njg3NSwtMjE3LjQ2ODc1IEMgODE1LjQ0OTExLC0yMTcuMTE2NjMgODE0LjQ2ODM2LC0yMTYuNTU0MjMgODEyLjY1NjI1LC0yMTUuOTM3NSBDIDgwOS44OTA1OSwtMjE0Ljk5NjI1IDgwNi4wNjYwMSwtMjE0LjAwMjEzIDgwNC41LC0yMTMuNzgxMjUgQyA4MDMuNjgyMDYsLTIxMy42NjU4NiA4MDIuODY2OSwtMjEzLjY1ODQyIDgwMi4yMTg3NSwtMjEzLjc1IEMgODAxLjU2Mzc5LC0yMTMuODMzMjEgODAxLjA4NjE1LC0yMTMuOTY4MjcgODAwLjk2ODc1LC0yMTQgQyA4MDEuMTMwNzksLTIxMy45MjUzNiA4MDEuNDAyNzQsLTIxMy42NTk1NiA4MDAuNzgxMjUsLTIxMi45MDYyNSBDIDc5OS45MTEyNSwtMjExLjg1MTcyIDc5NC43NzE2MiwtMjEwLjI0NyA3OTEuOTA2MjUsLTIwOS40Njg3NSBDIDc4OS4wNTM3MiwtMjA4LjY5Mzk5IDc4NS42NDcxMywtMjA4LjUxMDU1IDc4MS40Njg3NSwtMjA5LjU2MjUgQyA3NzcuMjYxOTIsLTIxMC42MjE2MyA3NzYuMTEyMDYsLTIxMS42MDQxNiA3NzEuMTI1LC0yMTIuNzE4NzUgQyA3NzUuNjA5NTQsLTIxMS4yNTkyOSA3NzcuMDk0MzUsLTIwOS41ODM1MiA3ODAuOTM3NSwtMjA4LjQ2ODc1IEMgNzgyLjUyMjU0LC0yMDguMDA4OTggNzg0LjIyNDI5LC0yMDcuODMwNSA3ODUuOTA2MjUsLTIwNy43ODEyNSBDIDc4NS40NjQ2OCwtMjA3LjQ0NDQ5IDc4NC4zOTM3NCwtMjA2Ljc1MzUyIDc4Mi40MDYyNSwtMjA2IEMgNzc5LjY3MjMyLC0yMDQuOTYzNTEgNzc1Ljk1NDI3LC0yMDMuODM3MzEgNzc0LjQwNjI1LC0yMDMuNTYyNSBDIDc3Mi45NDE2MywtMjAzLjMwMjQ4IDc3MS4zNDY2NywtMjAzLjY3OTA0IDc3MS4wNjI1LC0yMDMuNzUgQyA3NzEuMjIyNzUsLTIwMy42NzAzNSA3NzEuNDQyOTQsLTIwMy40MjkwMiA3NzAuODQzNzUsLTIwMi42ODc1IEMgNzY5Ljk3OTA5LC0yMDEuNjE3NDQgNzY0LjkyNzIzLC0xOTkuODY5MzUgNzYyLjA5Mzc1LC0xOTkgQyA3NTkuMjcyOTUsLTE5OC4xMzQ1MyA3NTUuODg2MjUsLTE5Ny44NDM2OSA3NTEuNzUsLTE5OC43ODEyNSBDIDc0Ny45OTc0MSwtMTk5LjYzMTg2IDc0Ni43MDIxNSwtMjAwLjQ5NzcyIDc0Mi44NzUsLTIwMS4zNzUgQyA3NDIuODc1LC0yMDEuMzc1IDc0Mi44NzUsLTIwMS4yMTg3NSA3NDIuODc1LC0yMDEuMjE4NzUgQyA3NDYuMzAyOTYsLTE5OS45ODA5NiA3NDcuODYyNDEsLTE5OC41ODY0NSA3NTEuMjUsLTE5Ny42ODc1IEMgNzUyLjg4MjE2LC0xOTcuMjU0MzYgNzU0LjYxNzA0LC0xOTcuMTA0NDkgNzU2LjM0Mzc1LC0xOTcuMTI1IEMgNzU1LjgzNDgyLC0xOTYuNzQwODMgNzU0Ljg2NywtMTk2LjEwMzE4IDc1My4wOTM3NSwtMTk1LjM3NSBDIDc1MC4zODc0MSwtMTk0LjI2MzY2IDc0Ni42NTc0MiwtMTkzLjA2NzE5IDc0NS4xMjUsLTE5Mi43NSBDIDc0NC4zMjQ2LC0xOTIuNTg0MzEgNzQzLjUxMjY5LC0xOTIuNTMxMzggNzQyLjg3NSwtMTkyLjU5Mzc1IEMgNzQyLjg3NSwtMTkyLjU5Mzc1IDc0Mi44NzUsLTE5Mi4wNzgyMyA3NDIuODc1LC0xOTEuNjcxNDYgQyA3NDIuODc1LC0xOTEuNDA2MzkgNzQyLjg3NSwtMTkxLjE4NzUgNzQyLjg3NSwtMTkxLjE4NzUgQyA3NDMuMTAxNDUsLTE5MS4zMzIxOCA3NDMuMzIzOTEsLTE5MS40NjAxMSA3NDMuNTkzNzUsLTE5MS41NjI1IEMgNzQ0LjY3NDI3LC0xOTEuOTcyNDggNzQ1Ljc2NTM2LC0xOTEuNzc4MjcgNzQ5LjU5Mzc1LC0xOTMuMjUgQyA3NTMuNDIyMTgsLTE5NC43MjE3NCA3NTQuODE3ODcsLTE5NS4yNTQ5OCA3NTUuNSwtMTk1LjY1NjI1IEMgNzU2LjE3OTYsLTE5Ni4wNTYwMyA3NTcuMTExNjUsLTE5Ni41MzU2MiA3NTcuNzE4NzUsLTE5Ny4xODc1IEMgNzU5LjU0NTYsLTE5Ny4zMjUyNSA3NjEuMjg5NSwtMTk3LjY4MDczIDc2Mi42NTYyNSwtMTk4LjE4NzUgQyA3NjUuNjI0MzcsLTE5OS4yODgwMiA3NjcuNTMxNjIsLTE5OS45OTM2OSA3NjkuNDM3NSwtMjAwLjY1NjI1IEMgNzcxLjM0MzM2LC0yMDEuMzE4NzkgNzcxLjc5MTU5LC0yMDIuMDcxMTIgNzcyLjg0Mzc1LC0yMDIuNDM3NSBDIDc3My45MzUzLC0yMDIuODE3NjEgNzc1LjAzODg2LC0yMDIuNjAyODggNzc4LjkwNjI1LC0yMDMuOTY4NzUgQyA3ODIuNzczNywtMjA1LjMzNDYxIDc4NC4xODk0MSwtMjA1Ljc5NTgzIDc4NC44NzUsLTIwNi4xODc1IEMgNzg1LjU3NjA5LC0yMDYuNTg4MDIgNzg2LjU3NTgxLC0yMDcuMTIwNDggNzg3LjE4NzUsLTIwNy43ODEyNSBDIDc4OS4xNTgzLC0yMDcuODM1OTEgNzkxLjAwNDM1LC0yMDguMTY1ODggNzkyLjQ2ODc1LC0yMDguNjU2MjUgQyA3OTUuNDcwMjMsLTIwOS42NjEzMyA3OTcuMzk0OSwtMjEwLjI3Nzk2IDc5OS4zMTI1LC0yMTAuOTA2MjUgQyA4MDAuODUxMSwtMjExLjQxMDM1IDgwMS40ODY1MiwtMjExLjk1MzAyIDgwMi4yMTg3NSwtMjEyLjM0Mzc1IEMgODAyLjQ0ODkxLC0yMTIuNDc4MDYgODAyLjY5NDQ5LC0yMTIuNTk3NDggODAyLjk2ODc1LC0yMTIuNjg3NSBDIDgwNC4wNjY5OCwtMjEzLjA0Nzk4IDgwNS4xNTAyLC0yMTIuNzY4ODcgODA5LjA2MjUsLTIxNCBDIDgxMi45NzQ4MywtMjE1LjIzMTEzIDgxNC40Mjg1NSwtMjE1LjY3Mjk1IDgxNS4xMjUsLTIxNi4wMzEyNSBDIDgxNS44MTg4OCwtMjE2LjM4ODIyIDgxNi43NTUxNSwtMjE2LjgyMzg2IDgxNy4zNzUsLTIxNy40Mzc1IEMgODE5LjI0MDIxLC0yMTcuNDYwMTYgODIxLjAxMDgxLC0yMTcuNzA0MzMgODIyLjQwNjI1LC0yMTguMTI1IEMgODI1LjQzNjY4LC0yMTkuMDM4NTQgODI3LjM5ODYzLC0yMTkuNTU1MSA4MjkuMzQzNzUsLTIyMC4wOTM3NSBDIDgzMS4yODg4NiwtMjIwLjYzMjM5IDgzMS43Njk5MywtMjIxLjM1ODI3IDgzMi44NDM3NSwtMjIxLjY1NjI1IEMgODMzLjk1Nzc2LC0yMjEuOTY1NCA4MzUuMDYzNjksLTIyMS42NDg4NiA4MzkuMDMxMjUsLTIyMi42ODc1IEMgODQyLjk5ODg2LC0yMjMuNzI2MTMgODQ0LjQ0ODgzLC0yMjQuMTIwMjMgODQ1LjE1NjI1LC0yMjQuNDM3NSBDIDg0NS44OTExMiwtMjI0Ljc2NzA5IDg0Ni45NzAwOCwtMjI1LjE5MTIyIDg0Ny41OTM3NSwtMjI1LjgxMjUgQyA4NDkuNTkxNDksLTIyNS42OTY1IDg1MS40NTExOCwtMjI1LjgzMjU5IDg1Mi45Mzc1LC0yMjYuMTg3NSBDIDg1Ni4wMTU2MSwtMjI2LjkyMjUgODU4LjAyMDk0LC0yMjcuMjg4NDQgODYwLC0yMjcuNjg3NSBDIDg2MS41ODc5MiwtMjI4LjAwNzY4IDg2Mi4yNDQyOSwtMjI4LjQ3ODA1IDg2MywtMjI4Ljc4MTI1IEMgODYzLjIzNzU3LC0yMjguODg4MDUgODYzLjQ2Njk1LC0yMjguOTc0MDEgODYzLjc1LC0yMjkuMDMxMjUgQyA4NjQuODgzNDcsLTIyOS4yNjA0NCA4NjYuMDU0NDgsLTIyOC44MjIzMiA4NzAuMDkzNzUsLTIyOS41MzEyNSBDIDg3NC4xMzMwOCwtMjMwLjI0MDE4IDg3NS41OTQsLTIzMC40NTgzNCA4NzYuMzEyNSwtMjMwLjcxODc1IEMgODc3LjAyODM2LC0yMzAuOTc4MTkgODc4LjAxNjc4LC0yMzEuMjg1OTkgODc4LjY1NjI1LC0yMzEuODEyNSBDIDg4MC41ODA1MiwtMjMxLjU3MzAxIDg4Mi40MDQxMywtMjMxLjU4Nzk3IDg4My44NDM3NSwtMjMxLjgxMjUgQyA4ODYuOTcwMDgsLTIzMi4zMDAxMiA4ODguOTk4MywtMjMyLjUxMzE3IDg5MSwtMjMyLjc4MTI1IEMgODkzLjAwMTcxLC0yMzMuMDQ5MzIgODkzLjQ4ODY5LC0yMzMuNzI2MzkgODk0LjU5Mzc1LC0yMzMuODc1IEMgODk1Ljc0MDE0LC0yMzQuMDI5MTggODk2Ljg2OTY3LC0yMzMuNTczNDMgOTAwLjkzNzUsLTIzNC4wOTM3NSBDIDkwNS4wMDUzNCwtMjM0LjYxNDA3IDkwNi40OTc2MywtMjM0Ljc4OTQ4IDkwNy4yMTg3NSwtMjM1LjAzMTI1IEMgOTA3Ljk1NTg1LC0yMzUuMjc4MzkgOTA5LjAxNjg0LC0yMzUuNjE3NDggOTA5LjY1NjI1LC0yMzYuMTU2MjUgQyA5MTEuNzA2MzIsLTIzNS44MjA3MiA5MTMuNjMwMDMsLTIzNS43NTgyOSA5MTUuMTU2MjUsLTIzNS45Mzc1IEMgOTE4LjI5ODU2LC0yMzYuMzA2NDYgOTIwLjMzNjE5LC0yMzYuNDk2ODYgOTIyLjM0Mzc1LC0yMzYuNzE4NzUgQyA5MjMuOTU0NTEsLTIzNi44OTY3NyA5MjQuNjA4NDIsLTIzNy4zMjY5NSA5MjUuMzc1LC0yMzcuNTYyNSBDIDkyNS42MTU5NCwtMjM3LjY0ODAyIDkyNS44NjkxMiwtMjM3LjcxODEgOTI2LjE1NjI1LC0yMzcuNzUgQyA5MjcuMzA2MDMsLTIzNy44Nzc3MiA5MjguNDU3NTQsLTIzNy40MDMzNSA5MzIuNTMxMjUsLTIzNy44NzUgQyA5MzYuNjA0OTksLTIzOC4zNDY2NSA5MzguMDkwMzQsLTIzOC40ODU2IDkzOC44MTI1LC0yMzguNzE4NzUgQyA5MzkuNTMxOTYsLTIzOC45NTEwMiA5NDAuNTEyNzQsLTIzOS4xOTIyMSA5NDEuMTU2MjUsLTIzOS42ODc1IEMgOTQzLjA5MjYyLC0yMzkuMzU0MDQgOTQ0LjkyNjMxLC0yMzkuMjgzMjYgOTQ2LjM3NSwtMjM5LjQzNzUgQyA5NDkuNTIxMDIsLTIzOS43NzI0NSA5NTEuNTUyNTYsLTIzOS45NTYwOSA5NTMuNTYyNSwtMjQwLjE1NjI1IEMgOTU1LjU3MjQ2LC0yNDAuMzU2MzkgOTU2LjA0NjY0LC0yNDAuOTgyNjQgOTU3LjE1NjI1LC0yNDEuMDkzNzUgQyA5NTguMzA3MzksLTI0MS4yMDkwMyA5NTkuNDUyNjgsLTI0MC43Mjg2OSA5NjMuNTMxMjUsLTI0MS4xNTYyNSBDIDk2Ny42MDk4NiwtMjQxLjU4MzgxIDk2OS4xMjAxMSwtMjQxLjcxODM0IDk2OS44NDM3NSwtMjQxLjkzNzUgQyA5NzAuNTgyOSwtMjQyLjE2MTM2IDk3MS42Mzk0NywtMjQyLjQ1MDc1IDk3Mi4yODEyNSwtMjQyLjk2ODc1IEMgOTc0LjMzODM1LC0yNDIuNTcwMDggOTc2LjI4MzEyLC0yNDIuNDc1MzUgOTc3LjgxMjUsLTI0Mi42MjUgQyA5ODAuOTYxMjMsLTI0Mi45MzMxIDk4Mi45ODgzNCwtMjQzLjA5ODI1IDk4NSwtMjQzLjI4MTI1IEMgOTg2LjYxNDA3LC0yNDMuNDI4MDcgOTg3LjI2MzEsLTI0My44NDE4IDk4OC4wMzEyNSwtMjQ0LjA2MjUgQyA5ODguMjcyNjcsLTI0NC4xNDMzNiA5ODguNTI0NzgsLTI0NC4xOTI0MSA5ODguODEyNSwtMjQ0LjIxODc1IEMgOTg5Ljk2NDYxLC0yNDQuMzI0MiA5OTEuMTA1NDYsLTI0My44MjYgOTk1LjE4NzUsLTI0NC4yMTg3NSBDIDk5OS4yNjk1OCwtMjQ0LjYxMTUgMTAwMC43NzY0LC0yNDQuNzQ5NTkgMTAwMS41LC0yNDQuOTY4NzUgQyAxMDAyLjIyMDksLTI0NS4xODcwOCAxMDAzLjE5OTcsLTI0NS40MTY0NSAxMDAzLjg0MzgsLTI0NS45MDYyNSBDIDEwMDUuNzgxOCwtMjQ1LjU1NjI2IDEwMDcuNjEyNiwtMjQ1LjQ1MTg3IDEwMDkuMDYyNSwtMjQ1LjU5Mzc1IEMgMTAxMi4yMTEyLC0yNDUuOTAxODUgMTAxNC4yMzgzLC0yNDYuMDY3IDEwMTYuMjUsLTI0Ni4yNSBDIDEwMTguMjYxNiwtMjQ2LjQzMjk5IDEwMTguNzY0MiwtMjQ3LjA4ODAyIDEwMTkuODc1LC0yNDcuMTg3NSBDIDEwMjEuMDI3MywtMjQ3LjI5MDczIDEwMjIuMTY3MiwtMjQ2LjgwMjY3IDEwMjYuMjUsLTI0Ny4xODc1IEMgMTAzMC4zMzI5LC0yNDcuNTcyMzIgMTAzMS44Mzg3LC0yNDcuNjg4NSAxMDMyLjU2MjUsLTI0Ny45MDYyNSBDIDEwMzMuMzAxOCwtMjQ4LjEyODY4IDEwMzQuMzU4MSwtMjQ4LjQyMDc0IDEwMzUsLTI0OC45Mzc1IEMgMTAzNy4wNTc0LC0yNDguNTM1NzMgMTAzOS4wMDI5LC0yNDguNDM0MTcgMTA0MC41MzEzLC0yNDguNTkzNzUgQyAxMDQzLjY3NzksLTI0OC45MjIyNyAxMDQ1LjcwODQsLTI0OS4xMTY0NSAxMDQ3LjcxODgsLTI0OS4zMTI1IEMgMTA0OS4zMzE4LC0yNDkuNDY5NzkgMTA0OS45ODQ0LC0yNDkuOTQzOTggMTA1MC43NSwtMjUwLjE4NzUgQyAxMDUwLjk5MDcsLTI1MC4yNzU1NCAxMDUxLjIxMzIsLTI1MC4zMDg4NyAxMDUxLjUsLTI1MC4zNDM3NSBDIDEwNTIuNjQ4MywtMjUwLjQ4MzQ1IDEwNTMuODE2NywtMjUwLjAwMzg0IDEwNTcuODc1LC0yNTAuNTkzNzUgQyAxMDYxLjkzMzMsLTI1MS4xODM2NyAxMDYzLjQzNjgsLTI1MS4zNzA4OSAxMDY0LjE1NjMsLTI1MS42MjUgQyAxMDY0Ljg3MywtMjUxLjg3ODE2IDEwNjUuODMwOCwtMjUyLjE4MzA3IDEwNjYuNDY4OCwtMjUyLjcxODc1IEMgMTA2OC4zODg1LC0yNTIuNTA2ODEgMTA3MC4xODg3LC0yNTIuNTY3MzQgMTA3MS42MjUsLTI1Mi44MTI1IEMgMTA3NC43NDQxLC0yNTMuMzQ0OSAxMDc2LjczNjYsLTI1My43NDExMSAxMDc4LjcxODgsLTI1NC4xMjUgQyAxMDgwLjcwMDksLTI1NC41MDg4NyAxMDgxLjE5MzEsLTI1NS4xNjQ2NSAxMDgyLjI4MTMsLTI1NS40MDYyNSBDIDEwODMuNDEwMSwtMjU1LjY1NjkxIDEwODQuNTUxNiwtMjU1LjI4OTk2IDEwODguNTMxMywtMjU2LjI4MTI1IEMgMTA5Mi41MTA5LC0yNTcuMjcyNTMgMTA5My45NjA5LC0yNTcuNzAwNTUgMTA5NC42NTYzLC0yNTguMDYyNSBDIDEwOTUuMzc4NiwtMjU4LjQzODUxIDEwOTYuNDE4MiwtMjU4LjkzMzA4IDEwOTcuMDMxMywtMjU5LjU5Mzc1IEMgMTA5OC45OTQzLC0yNTkuNjA1OCAxMTAwLjgyNSwtMjU5Ljg4NDggMTEwMi4yNSwtMjYwLjQzNzUgQyAxMTA1LjIwMTIsLTI2MS41ODIxMSAxMTA3LjEyMzIsLTI2Mi4zMDY5MiAxMTA4LjkzNzUsLTI2My4xODc1IEMgMTExMC4zOTMyLC0yNjMuODk0MDMgMTExMS4yNzIzLC0yNjQuODczOTEgMTExMS40ODQ0LC0yNjUuMTcxODggQyAxMTExLjY5NjYsLTI2NS40Njk4NCAxMTExLjU5NjIsLTI2NS45MTcxOCAxMTExLjYyMjMsLTI2NS45Mzg2MyBDIDExMTEuNjY1MiwtMjY1Ljk3Mzg3IDExMTEuOTQxNiwtMjY2LjAyMzYgMTExMi4xMDEzLC0yNjYuMzY3MDcgQyAxMTEyLjk2MDIsLTI2OC4yMTQxNSAxMTE0LjQyMjMsLTI3Mi4wMTE2NiAxMTE0LjUzNjUsLTI3Mi42OTY1MiBDIDExMTQuNjUwMiwtMjczLjM3ODY4IDExMTQuNzAwMywtMjc0LjA0NDI2IDExMTQuNzUxLC0yNzQuNDQxNDkgQyAxMTE0Ljc4MDQsLTI3NC42NzEwMSAxMTE0LjYwNDMsLTI3NS4zMDY5MyAxMTE0LjYyNjQsLTI3NS4zNjU1MyBDIDExMTQuNjU3MywtMjc1LjQ0NzU5IDExMTQuOTMwOSwtMjc1LjYzMDgxIDExMTQuOTg2MywtMjc1Ljg4MDI0IEMgMTExNS4yNTI2LC0yNzcuMDc4NTcgMTExNS4wNzUyLC0yNzguMDcxNTMgMTExNC44NjEyLC0yNzkuNDg5MTcgQyAxMTE0LjY0NzIsLTI4MC45MDY4MSAxMTEzLjg3NzUsLTI4NC4xMTEzMSAxMTEzLjIyNDMsLTI4NC45NjU0MyBDIDExMTIuNTY1NCwtMjg1LjgyNzE1IDExMTIuMDAxNCwtMjg1Ljk3NjYgMTExMS40NzY0LC0yODUuOTY2MDkgQyAxMTExLjI2NzgsLTI4NS42OTYzMyAxMTExLjYxMzIsLTI4NS43MDMgMTExMS42MzksLTI4NS42NTM0OCBDIDExMTIuMzE5NiwtMjg1LjYwMjY5IDExMTIuNTczLC0yODUuMjg0ODQgMTExMy4wNTgyLC0yODQuNzU2ODYgQyAxMTEzLjU0MzQsLTI4NC4yMjg4OCAxMTE0LjUwMSwtMjgwLjgxNzMgMTExNC42Mzc2LC0yNzkuMzY2OTEgQyAxMTE0Ljc3NDIsLTI3Ny45MTY1MiAxMTE0LjgyNzYsLTI3Ni41MDY3MSAxMTE0LjU0OTYsLTI3NS44OTgyNyBDIDExMTQuMjcxNSwtMjc1LjI4OTgyIDExMTMuNjA1NCwtMjc1LjQ2OTYzIDExMTMuMzEzLC0yNzUuNDAzNzUgQyAxMTEzLjg0NCwtMjc1LjIxNzg2IDExMTQuMjAzOCwtMjc1LjE5MDUzIDExMTQuMjY1NCwtMjc0LjM0NjA3IEMgMTExNC4zMjQ3LC0yNzMuNTMyNjkgMTExNC4xMzIyLC0yNzIuNzA2MzggMTExMy43NDU2LC0yNzEuNTQwNDUgQyAxMTEzLjM1NDQsLTI3MC4zNjA0NCAxMTExLjkwMDQsLTI2Ny4xOTA0NyAxMTExLjQ1OTksLTI2Ni45NDE2OCBDIDExMTEuMDA3NiwtMjY2LjY4NjE3IDExMTAuNTA3NSwtMjY2Ljc1OTY5IDExMTAuMTcxOSwtMjY2Ljg5MDYzIHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5OTcpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3NzY3Njc3Njc3NzY2NzY3Nzc3Nzc3Njc2Nzc2Nzc3NzY3Njc3Nzc3Nzc2NzY3NzY3Nzc3Njc2Nzc3Nzc3NzY3Njc3Njc3Nzc2NzY3Nzc3Nzc3Njc2Nzc2Nzc3NzY3Njc3Nzc3Nzc2NzY3NzY3Nzc2Njc2Nzc2NzY3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3NzenNzenNzc3p6Y2N6enpjenp6YyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTAzIgorICAgICAgICAgICBkPSJNIDk4OC43NSwtMjYzLjg0Mzc1IEMgOTkwLjY2MTYxLC0yNjMuMjA5MzUgOTkzLjMwMDI3LC0yNjIuMDg1MzQgOTk0Ljg3NSwtMjYxLjAzMTI1IEMgOTk2LjQ0OTc3LC0yNTkuOTc3MTYgOTk3Ljc3MTEsLTI1OS41NDg3MyAxMDAwLjQwNjMsLTI1Ny42NTYyNSBDIDEwMDMuMDE0NSwtMjU1Ljc4MzExIDEwMDUuNDMzMiwtMjU0LjY0MTAzIDEwMDcuNzE4OCwtMjUzLjU5Mzc1IEMgMTAxMC4xODgxLC0yNTIuNDYyMjggMTAxMy40NzA5LC0yNTEuNDM5MDEgMTAxNy4yNSwtMjQ5LjY1NjI1IEMgMTAxNi4wNDI4LC0yNTAuOTE0NjUgMTAxMC4xMTEsLTI1My4wMjA3IDEwMDguMjE4OCwtMjUzLjg0Mzc1IEMgMTAwNi4zMjY2LC0yNTQuNjY2NzkgMTAwNC4wOTA4LC0yNTUuNzc0MjQgMTAwMS4yODEzLC0yNTcuNjI1IEMgOTk4LjQ3MTY5LC0yNTkuNDc1NzUgOTk3LjY1OTA2LC0yNjAuMTA2NTQgOTk1LjI4MTI1LC0yNjEuMzQzNzUgQyA5OTIuOTAzNDMsLTI2Mi41ODA5NCA5OTEuMjAxMzcsLTI2My4yOTI5NSA5ODguNzUsLTI2My44NDM3NSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTUzKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODEwNSIKKyAgICAgICAgICAgZD0iTSA5NTcuNSwtMjYwLjc4MTI1IEMgOTU5LjQxLC0yNjAuMTYzMTUgOTYyLjA4Mjg4LC0yNTkuMDcxOTEgOTYzLjY1NjI1LC0yNTguMDMxMjUgQyA5NjUuMjI5NjQsLTI1Ni45OTA1OSA5NjYuNTUyMzMsLTI1Ni41NDg3MyA5NjkuMTg3NSwtMjU0LjY1NjI1IEMgOTcxLjc5NTczLC0yNTIuNzgzMSA5NzQuMjE0NDIsLTI1MS42NDEwNCA5NzYuNSwtMjUwLjU5Mzc1IEMgOTc4Ljk2OTMxLC0yNDkuNDYyMjggOTgyLjI1MjEzLC0yNDguNDM5IDk4Ni4wMzEyNSwtMjQ2LjY1NjI1IEMgOTg0LjgyMzk3LC0yNDcuOTE0NjUgOTc4LjgyOTcxLC0yNTAuMDUxOTUgOTc2LjkzNzUsLTI1MC44NzUgQyA5NzUuMDQ1MzMsLTI1MS42OTgwNCA5NzIuODQwODQsLTI1Mi44MDU1IDk3MC4wMzEyNSwtMjU0LjY1NjI1IEMgOTY3LjIyMTY3LC0yNTYuNTA3IDk2Ni40MzgzLC0yNTcuMDk1NTcgOTY0LjA2MjUsLTI1OC4zMTI1IEMgOTYxLjY4NjcyLC0yNTkuNTI5NDEgOTU5Ljk0OTI5LC0yNjAuMjUxMzUgOTU3LjUsLTI2MC43ODEyNSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTkzKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODEwNyIKKyAgICAgICAgICAgZD0iTSA5MjYuMDkzNzUsLTI1Ny4zNzUgQyA5MjguMDAxNDcsLTI1Ni43Nzc1NSA5MzAuNjQ3MjMsLTI1NS43MTExNiA5MzIuMjE4NzUsLTI1NC42ODc1IEMgOTMzLjc5MDI1LC0yNTMuNjYzODUgOTM1LjA4ODk3LC0yNTMuMjQ3NzkgOTM3LjcxODc1LC0yNTEuNDA2MjUgQyA5NDAuMzIxNjYsLTI0OS41ODM1MiA5NDIuNzQ3NjIsLTI0OC40MzQwNSA5NDUuMDMxMjUsLTI0Ny40MDYyNSBDIDk0Ny40OTg0NSwtMjQ2LjI5NTg0IDk1MC43ODY2LC0yNDUuMzEzMDIgOTU0LjU2MjUsLTI0My41NjI1IEMgOTUzLjM1NjI3LC0yNDQuODEwNiA5NDcuMzkwNiwtMjQ2Ljg4MDU5IDk0NS41LC0yNDcuNjg3NSBDIDk0My42MDk0MiwtMjQ4LjQ5NDQgOTQxLjM5NzU4LC0yNDkuNTc4NTQgOTM4LjU5Mzc1LC0yNTEuMzc1IEMgOTM1Ljc4OTksLTI1My4xNzE0NCA5MzQuOTY2NzEsLTI1My43Nzc1MSA5MzIuNTkzNzUsLTI1NC45Njg3NSBDIDkzMC4yMjA3OCwtMjU2LjE1OTk5IDkyOC41NDAxMywtMjU2Ljg3MTU4IDkyNi4wOTM3NSwtMjU3LjM3NSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTg5KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODEwOSIKKyAgICAgICAgICAgZD0iTSA4OTQuOTA2MjUsLTI1My41NjI1IEMgODk2LjgwODM4LC0yNTMuMDA4OTUgODk5LjQ5MzI2LC0yNTEuOTczNjMgOTAxLjA2MjUsLTI1MC45Njg3NSBDIDkwMi42MzE3MywtMjQ5Ljk2Mzg4IDkwMy45MzY1MSwtMjQ5LjU2MDExIDkwNi41NjI1LC0yNDcuNzUgQyA5MDkuMTYxNjIsLTI0NS45NTgzNiA5MTEuNTYyODQsLTI0NC44NzgxMSA5MTMuODQzNzUsLTI0My44NzUgQyA5MTYuMzA4MDMsLTI0Mi43OTEyNiA5MTkuNjAzNTksLTI0MS44MzQ3MSA5MjMuMzc1LC0yNDAuMTI1IEMgOTIyLjE3MDIsLTI0MS4zNjAwNyA5MTYuMjAwODQsLTI0My4zNjk3OCA5MTQuMzEyNSwtMjQ0LjE1NjI1IEMgOTEyLjQyNDE4LC0yNDQuOTQyNzIgOTEwLjIzNzMsLTI0NS45ODcwNSA5MDcuNDM3NSwtMjQ3Ljc1IEMgOTA0LjYzNzczLC0yNDkuNTEyOTQgOTAzLjgzODMxLC0yNTAuMTE4MzYgOTAxLjQ2ODc1LC0yNTEuMjgxMjUgQyA4OTkuMDk5MTgsLTI1Mi40NDQxMyA4OTcuMzQ1NSwtMjUzLjExNTM3IDg5NC45MDYyNSwtMjUzLjU2MjUgeiIKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNjk4NSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxMTEiCisgICAgICAgICAgIGQ9Ik0gODYzLjcxODc1LC0yNDguNjU2MjUgQyA4NjUuNTk5MzcsLTI0OC4yMjcxNiA4NjguMjIzMDIsLTI0Ny4yNzU4NyA4NjkuNzgxMjUsLTI0Ni4zNDM3NSBDIDg3MS4zMzk0OCwtMjQ1LjQxMTY0IDg3Mi42MzM1OCwtMjQ1LjA4NTk5IDg3NS4yNSwtMjQzLjM0Mzc1IEMgODc3LjgzOTcxLC0yNDEuNjE5MzEgODgwLjIzMDY3LC0yNDAuNjM1NzMgODgyLjUsLTIzOS43MTg3NSBDIDg4NC45NTE3NiwtMjM4LjcyODA2IDg4OC4yMzk1OSwtMjM3Ljg0MTY4IDg5MiwtMjM2LjIxODc1IEMgODkwLjc5ODY5LC0yMzcuNDI2MDkgODg0Ljg0NzUxLC0yMzkuMjg0ODQgODgyLjk2ODc1LC0yNDAgQyA4ODEuMDksLTI0MC43MTUxNyA4NzguODgzMzUsLTI0MS42ODQ0MiA4NzYuMDkzNzUsLTI0My4zNzUgQyA4NzMuMzA0MTIsLTI0NS4wNjU1NyA4NzIuNTA5MTQsLTI0NS42MDMyMiA4NzAuMTU2MjUsLTI0Ni42NTYyNSBDIDg2Ny44MDMzMywtMjQ3LjcwOTI2IDg2Ni4xMzA0MSwtMjQ4LjM2ODczIDg2My43MTg3NSwtMjQ4LjY1NjI1IHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5NjUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTEzIgorICAgICAgICAgICBkPSJNIDgzMy4xNTYyNSwtMjQxLjM3NSBDIDgzNS4wMDQ2MSwtMjQxLjA3ODU2IDgzNy42MjU3LC0yNDAuMzk4NjggODM5LjE1NjI1LC0yMzkuNTkzNzUgQyA4NDAuNjg2ODMsLTIzOC43ODg4MiA4NDEuOTY5OTksLTIzOC41MzgwMiA4NDQuNTMxMjUsLTIzNy4wNjI1IEMgODQ3LjA2NjI5LC0yMzUuNjAyMDQgODQ5LjQyMTkzLC0yMzQuNzM3NDEgODUxLjY1NjI1LC0yMzQgQyA4NTQuMDcwMjQsLTIzMy4yMDMzMiA4NTcuMzEzMzYsLTIzMi41MzMxMSA4NjEuMDMxMjUsLTIzMS4xNTYyNSBDIDg1OS44NDM1NCwtMjMyLjI4NDk4IDg1My45NDM1MywtMjMzLjc0NiA4NTIuMDkzNzUsLTIzNC4zMTI1IEMgODUwLjI0Mzk4LC0yMzQuODc5IDg0OC4wOTAzMywtMjM1LjY4NjQyIDg0NS4zNDM3NSwtMjM3LjE1NjI1IEMgODQyLjU5NzE4LC0yMzguNjI2MDggODQxLjg0MjM5LC0yMzkuMDc2NTMgODM5LjUzMTI1LC0yMzkuOTM3NSBDIDgzNy4yMjAxLC0yNDAuNzk4NDUgODM1LjUyNjU0LC0yNDEuMjU3NTkgODMzLjE1NjI1LC0yNDEuMzc1IHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5ODEpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTE1IgorICAgICAgICAgICBkPSJNIDgwMi45MDYyNSwtMjMyLjMxMjUgQyA4MDQuNzI4NDUsLTIzMi4xMDEyMyA4MDcuMjcyMDEsLTIzMS41MTE5MyA4MDguNzgxMjUsLTIzMC43ODEyNSBDIDgxMC4yOTA1LC0yMzAuMDUwNTkgODExLjUzNjkzLC0yMjkuODUxMjcgODE0LjA2MjUsLTIyOC41IEMgODE2LjU2MjI2LC0yMjcuMTYyNTQgODE4Ljg5NDA0LC0yMjYuNDUxNTcgODIxLjA5Mzc1LC0yMjUuODQzNzUgQyA4MjMuNDcwMjgsLTIyNS4xODcwOCA4MjYuNjU4MzksLTIyNC43NzA4NyA4MzAuMzEyNSwtMjIzLjY1NjI1IEMgODI5LjE0NTE1LC0yMjQuNzAxMjEgODIzLjM4MzYyLC0yMjUuNzU5NTQgODIxLjU2MjUsLTIyNi4yMTg3NSBDIDgxOS43NDEzOSwtMjI2LjY3Nzk2IDgxNy42MTAyNSwtMjI3LjM0NTcxIDgxNC45MDYyNSwtMjI4LjY1NjI1IEMgODEyLjIwMjIyLC0yMjkuOTY2NzcgODExLjQzNTE5LC0yMzAuMzc2MTUgODA5LjE1NjI1LC0yMzEuMTI1IEMgODA2Ljg3NzMsLTIzMS44NzM4MyA4MDUuMjQzLC0yMzIuMzA0MzEgODAyLjkwNjI1LC0yMzIuMzEyNSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTc3KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODExNyIKKyAgICAgICAgICAgZD0iTSA3NzMuMTg3NSwtMjIyLjE4NzUgQyA3NzQuOTk4NTksLTIyMi4wMDg4IDc3Ny41MDgwOSwtMjIxLjUyMjQ0IDc3OSwtMjIwLjg0Mzc1IEMgNzgwLjQ5MTk0LC0yMjAuMTY1MDYgNzgxLjc1MzQsLTIyMC4wNDU1MyA3ODQuMjUsLTIxOC43ODEyNSBDIDc4Ni43MjEwNywtMjE3LjUyOTg3IDc4OS4wNDAwNSwtMjE2Ljg4NTExIDc5MS4yMTg3NSwtMjE2LjM0Mzc1IEMgNzkzLjU3MjYyLC0yMTUuNzU4ODcgNzk2LjcxMDA5LC0yMTUuNDQ2MjMgODAwLjMxMjUsLTIxNC41IEMgNzk5LjE2MTY2LC0yMTUuNDkxMTYgNzkzLjQ1OTk5LC0yMTYuMjgzMyA3OTEuNjU2MjUsLTIxNi42ODc1IEMgNzg5Ljg1MjUzLC0yMTcuMDkxNyA3ODcuNzQwNzIsLTIxNy43MDg2NiA3ODUuMDYyNSwtMjE4LjkzNzUgQyA3ODIuMzg0MzIsLTIyMC4xNjYzNCA3ODEuNjU5MDUsLTIyMC41NDgzOSA3NzkuNDA2MjUsLTIyMS4yMTg3NSBDIDc3Ny4xNTM0NiwtMjIxLjg4OTA5IDc3NS41MDk5OCwtMjIyLjIyMTA3IDc3My4xODc1LC0yMjIuMTg3NSB6IgorICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI2OTczKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODExOSIKKyAgICAgICAgICAgZD0iTSA3NDMuNTYyNSwtMjExLjE4NzUgQyA3NDUuMzU1MzEsLTIxMS4wNTgzOSA3NDcuODM1NjMsLTIxMC42Mzc4NSA3NDkuMzEyNSwtMjEwIEMgNzUwLjc4OTQsLTIwOS4zNjIxNSA3NTIuMDI4NiwtMjA5LjI1ODQ0IDc1NC41LC0yMDguMDYyNSBDIDc1Ni45NDYxOCwtMjA2Ljg3ODc4IDc1OS4yMjA1NCwtMjA2LjMxNTg0IDc2MS4zNzUsLTIwNS44NDM3NSBDIDc2My43MDI2NywtMjA1LjMzMzcyIDc2Ni43OTQ2LC0yMDUuMTYzMTEgNzcwLjM3NSwtMjA0LjI4MTI1IEMgNzY5LjIzMTIxLC0yMDUuMjUxODUgNzYzLjYyNzQxLC0yMDUuODcxOSA3NjEuODQzNzUsLTIwNi4yMTg3NSBDIDc2MC4wNjAwOCwtMjA2LjU2NTU5IDc1Ny45NjA5LC0yMDcuMTA2MzEgNzU1LjMxMjUsLTIwOC4yNSBDIDc1Mi42NjQwOSwtMjA5LjM5MzY4IDc1MS45MTc1NSwtMjA5Ljc2NjMxIDc0OS42ODc1LC0yMTAuMzc1IEMgNzQ3LjQ1NzQyLC0yMTAuOTgzNjggNzQ1Ljg2MTU2LC0yMTEuMjg0NjYgNzQzLjU2MjUsLTIxMS4xODc1IHoiCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjY5NjkpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPGcKKyAgICAgICAgICAgaWQ9Imc4MTIxIgorICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjczNDUpIj4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTIzIgorICAgICAgICAgICAgIGQ9Ik0gNzQ0LjkzNzUsLTIxMi4xMTczMSBDIDc0NC45Mzc1LC0yMTIuMTE3MzEgNzUyLjE1OTc5LC0yMTUuMzQwNDkgNzU0LC0yMTUuNjE3MzEgQyA3NTUuODQwMjEsLTIxNS44OTQxMyA3NTcuMzUyMjUsLTIxNS42MjA1NCA3NjAsLTIxNS4wNTQ4MSBDIDc2Mi42NDc3NSwtMjE0LjQ4OTA4IDc2OC43MzU3LC0yMTIuODM5NjMgNzcxLjE4NzUsLTIxMS42Nzk4MSBDIDc3My42MzkzLC0yMTAuNTE5OTkgNzc2LjUsLTIwOC4xMTczMSA3NzYuNSwtMjA4LjExNzMxIEMgNzc2LjUsLTIwOC4xMTczMSA3NjkuMzUzNTYsLTIxMC44OTc1IDc2Ni4zMTI1LC0yMTEuNjc5ODEgQyA3NjMuMjcxNDQsLTIxMi40NjIxMiA3NTguNjY3ODksLTIxMy43NjM1NSA3NTUuOTM3NSwtMjEzLjk5MjMxIEMgNzUzLjIwNzExLC0yMTQuMjIxMDcgNzQ0LjkzNzUsLTIxMi4xMTczMSA3NDQuOTM3NSwtMjEyLjExNzMxIHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODEyNSIKKyAgICAgICAgICAgICBkPSJNIDczNS40Njg3NSwtMjA2Ljk1NDE2IEMgNzM1LjQ2ODc1LC0yMDYuOTU0MTYgNzM5LjEyODU0LC0yMDkuMTc3MzQgNzQwLjk2ODc1LC0yMDkuNDU0MTYgQyA3NDIuODA4OTYsLTIwOS43MzA5OCA3NDQuNjMzNSwtMjA5LjIwNzM5IDc0Ny4yODEyNSwtMjA4LjY0MTY2IEMgNzQ5LjkyOSwtMjA4LjA3NTkzIDc1Ni4wMTY5NSwtMjA2LjQyNjQ4IDc1OC40Njg3NSwtMjA1LjI2NjY2IEMgNzYwLjkyMDU1LC0yMDQuMTA2ODQgNzY1LjAzMTI1LC0yMDMuMTQxNjYgNzY1LjAzMTI1LC0yMDMuMTQxNjYgQyA3NjUuMDMxMjUsLTIwMy4xNDE2NiA3NTYuNjM0ODEsLTIwNC40ODQzNSA3NTMuNTkzNzUsLTIwNS4yNjY2NiBDIDc1MC41NTI2OSwtMjA2LjA0ODk3IDc0NS42MzY2NCwtMjA3LjYwMDQgNzQyLjkwNjI1LC0yMDcuODI5MTYgQyA3NDAuMTc1ODYsLTIwOC4wNTc5MiA3MzUuNDY4NzUsLTIwNi45NTQxNiA3MzUuNDY4NzUsLTIwNi45NTQxNiB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTI3IgorICAgICAgICAgICAgIGQ9Ik0gNzU5Ljg1MDQyLC0yMTcuNjExMTYgQyA3NTkuODUwNDIsLTIxNy42MTExNiA3NjguMzk0MTIsLTIyMC45MDk3MyA3NzAuMjQ4MiwtMjIxLjA2OTAyIEMgNzcyLjEwMjI5LC0yMjEuMjI4MzIgNzczLjg4OTg2LC0yMjAuNTg5ODIgNzc2LjQ5NjMsLTIxOS44NTY5NCBDIDc3OS4xMDI3NCwtMjE5LjEyNDA2IDc4NS4wNzM1NCwtMjE3LjA5MSA3ODcuNDQ2NjYsLTIxNS43Nzc2OSBDIDc4OS44MTk3OCwtMjE0LjQ2NDM4IDc5My44NjA4MywtMjEzLjIzOTg3IDc5My44NjA4MywtMjEzLjIzOTg3IEMgNzkzLjg2MDgzLC0yMTMuMjM5ODcgNzg1LjU2NjcsLTIxNS4xMTM1MiA3ODIuNTgxNTIsLTIxNi4wODc1NCBDIDc3OS41OTYzMywtMjE3LjA2MTU2IDc3NC43ODg4MywtMjE4LjkyMjMyIDc3Mi4wNzg1LC0yMTkuMzI0MTYgQyA3NjkuMzY4MTcsLTIxOS43MjYgNzU5Ljg1MDQyLC0yMTcuNjExMTYgNzU5Ljg1MDQyLC0yMTcuNjExMTYgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODEyOSIKKyAgICAgICAgICAgICBkPSJNIDc3NS4xOTgxMywtMjIzLjIyNjYgQyA3NzUuMTk4MTMsLTIyMy4yMjY2IDc4Mi45Njk0NiwtMjI2LjAwOTA0IDc4NC44MjY0NCwtMjI2LjEzMDA5IEMgNzg2LjY4MzQxLC0yMjYuMjUxMTMgNzg4LjQ1NzQ0LC0yMjUuNTc1OTIgNzkxLjA0ODIyLC0yMjQuNzg5NDcgQyA3OTMuNjM4OTksLTIyNC4wMDMwMiA3OTkuNTY2NjIsLTIyMS44NDczIDgwMS45MTIxNiwtMjIwLjQ4NTM1IEMgODA0LjI1NzcxLC0yMTkuMTIzNCA4MDguMjcyNjUsLTIxNy44MTU4NSA4MDguMjcyNjUsLTIxNy44MTU4NSBDIDgwOC4yNzI2NSwtMjE3LjgxNTg1IDgwMC4wMTg5MiwtMjE5Ljg2MDA4IDc5Ny4wNTQ0NCwtMjIwLjg5NTQzIEMgNzk0LjA4OTk3LC0yMjEuOTMwNzggNzg5LjMyMTg1LC0yMjMuODkwMjQgNzg2LjYyMDM4LC0yMjQuMzQ3ODYgQyA3ODMuOTE4OTEsLTIyNC44MDU0OSA3NzUuMTk4MTMsLTIyMy4yMjY2IDc3NS4xOTgxMywtMjIzLjIyNjYgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii00LjMxOTA5MDYiCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSIxMy44NTIxNDUiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxMzEiCisgICAgICAgICAgICAgZD0iTSA3ODkuNjQyOTgsLTIyNy45NTQxNyBDIDc4OS42NDI5OCwtMjI3Ljk1NDE3IDc5OC4zMjU1NCwtMjMxLjQ3NDQ4IDgwMC4xODQ1MiwtMjMxLjU1OTUyIEMgODAyLjA0MzQ5LC0yMzEuNjQ0NTUgODAzLjgwNDEsLTIzMC45MzUxIDgwNi4zNzkxNSwtMjMwLjA5ODU5IEMgODA4Ljk1NDIsLTIyOS4yNjIxIDgxNC44Mzg5NCwtMjI2Ljk5MTkzIDgxNy4xNTc2NiwtMjI1LjU4NDc5IEMgODE5LjQ3NjM4LC0yMjQuMTc3NjQgODIzLjQ2NTIzLC0yMjIuNzkyNTUgODIzLjQ2NTIzLC0yMjIuNzkyNTUgQyA4MjMuNDY1MjMsLTIyMi43OTI1NSA4MTUuMjUyNjYsLTIyNC45OTYzMiA4MTIuMzA4OCwtMjI2LjA4ODkxIEMgODA5LjM2NDk0LC0yMjcuMTgxNSA4MDQuNjM1NjgsLTIyOS4yMzI5OSA4MDEuOTQzNTgsLTIyOS43NDI4OCBDIDc5OS4yNTE0OSwtMjMwLjI1Mjc2IDc4OS42NDI5OCwtMjI3Ljk1NDE3IDc4OS42NDI5OCwtMjI3Ljk1NDE3IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC4zMTkwOTA2IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuODUyMTQ1IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTMzIgorICAgICAgICAgICAgIGQ9Ik0gODA0LjQ5NTEzLC0yMzMuMzI5NDggQyA4MDQuNDk1MTMsLTIzMy4zMjk0OCA4MTIuMzAyNjksLTIzNS45MTIyOSA4MTQuMTYxNjcsLTIzNS45OTczMyBDIDgxNi4wMjA2NCwtMjM2LjA4MjM2IDgxNy43ODEyNSwtMjM1LjM3MjkxIDgyMC4zNTYzLC0yMzQuNTM2NCBDIDgyMi45MzEzNSwtMjMzLjY5OTkxIDgyOC44MTYwOSwtMjMxLjQyOTc0IDgzMS4xMzQ4MSwtMjMwLjAyMjYgQyA4MzMuNDUzNTMsLTIyOC42MTU0NSA4MzcuNDQyMzgsLTIyNy4yMzAzNiA4MzcuNDQyMzgsLTIyNy4yMzAzNiBDIDgzNy40NDIzOCwtMjI3LjIzMDM2IDgyOS4yMjk4MSwtMjI5LjQzNDEzIDgyNi4yODU5NSwtMjMwLjUyNjcyIEMgODIzLjM0MjA5LC0yMzEuNjE5MzEgODE4LjYxMjgzLC0yMzMuNjcwOCA4MTUuOTIwNzMsLTIzNC4xODA2OSBDIDgxMy4yMjg2NCwtMjM0LjY5MDU3IDgwNC40OTUxMywtMjMzLjMyOTQ4IDgwNC40OTUxMywtMjMzLjMyOTQ4IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC4zMTkwOTA2IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuODUyMTQ1IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTM1IgorICAgICAgICAgICAgIGQ9Ik0gODE5LjU1NzYzLC0yMzcuNTc5NDggQyA4MTkuNTU3NjMsLTIzNy41Nzk0OCA4MjguMTE1MTksLTI0MC4xNjIyOSA4MjkuOTc0MTcsLTI0MC4yNDczMyBDIDgzMS44MzMxNCwtMjQwLjMzMjM2IDgzMy41OTM3NSwtMjM5LjYyMjkxIDgzNi4xNjg4LC0yMzguNzg2NCBDIDgzOC43NDM4NSwtMjM3Ljk0OTkxIDg0NC42Mjg1OSwtMjM1LjY3OTc0IDg0Ni45NDczMSwtMjM0LjI3MjYgQyA4NDkuMjY2MDMsLTIzMi44NjU0NSA4NTMuMjU0ODgsLTIzMS40ODAzNiA4NTMuMjU0ODgsLTIzMS40ODAzNiBDIDg1My4yNTQ4OCwtMjMxLjQ4MDM2IDg0NS4wNDIzMSwtMjMzLjY4NDEzIDg0Mi4wOTg0NSwtMjM0Ljc3NjcyIEMgODM5LjE1NDU5LC0yMzUuODY5MzEgODM0LjQyNTMzLC0yMzcuOTIwOCA4MzEuNzMzMjMsLTIzOC40MzA2OSBDIDgyOS4wNDExNCwtMjM4Ljk0MDU3IDgxOS41NTc2MywtMjM3LjU3OTQ4IDgxOS41NTc2MywtMjM3LjU3OTQ4IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC45MjY5MDQyIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuNjQxNDEiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxMzciCisgICAgICAgICAgICAgZD0iTSA4MzYuMjMzOTUsLTI0Mi42MDEyNSBDIDgzNi4yMzM5NSwtMjQyLjYwMTI1IDg0My4yMDA5NywtMjQ0LjU4ODQ4IDg0NS4wNjE3OSwtMjQ0LjU2ODgyIEMgODQ2LjkyMjYsLTI0NC41NDkxNSA4NDguNjQwNTIsLTI0My43NDE4IDg1MS4xNjQ0NCwtMjQyLjc2MTc3IEMgODUzLjY4ODM3LC0yNDEuNzgxNzcgODU5LjQzNjEsLTIzOS4xODQxOSA4NjEuNjcyLC0yMzcuNjQ4ODYgQyA4NjMuOTA3OSwtMjM2LjExMzUxIDg2Ny44MTI1MywtMjM0LjUwNjI1IDg2Ny44MTI1MywtMjM0LjUwNjI1IEMgODY3LjgxMjUzLC0yMzQuNTA2MjUgODU5LjczNjkyLC0yMzcuMTY4NDcgODU2Ljg1OTE3LC0yMzguNDI0OTEgQyA4NTMuOTgxNDMsLTIzOS42ODEzNiA4NDkuMzc1MDUsLTI0MS45OTU2MSA4NDYuNzE1ODksLTI0Mi42NTYxMiBDIDg0NC4wNTY3NCwtMjQzLjMxNjYxIDgzNi4yMzM5NSwtMjQyLjYwMTI1IDgzNi4yMzM5NSwtMjQyLjYwMTI1IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS4xNTQyMTE5IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuNTUwNjgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxMzkiCisgICAgICAgICAgICAgZD0iTSA4NTAuNzMwMjgsLTI0Ni4wMDQ2MSBDIDg1MC43MzAyOCwtMjQ2LjAwNDYxIDg1OC40MTgxMiwtMjQ4LjAzMjI5IDg2MC4yNzgxLC0yNDcuOTczMTUgQyA4NjIuMTM4MDcsLTI0Ny45MTQgODYzLjgzODQ4LC0yNDcuMDcwMzYgODY2LjM0MTAzLC0yNDYuMDM2OTkgQyA4NjguODQzNTgsLTI0NS4wMDM2NSA4NzQuNTM0OSwtMjQyLjI4NDY3IDg3Ni43Mzc3MSwtMjQwLjcwMjI0IEMgODc4Ljk0MDUzLC0yMzkuMTE5NzkgODgyLjgxMDE2LC0yMzcuNDMwMDQgODgyLjgxMDE2LC0yMzcuNDMwMDQgQyA4ODIuODEwMTYsLTIzNy40MzAwNCA4NzQuNzkyODcsLTI0MC4yNjMwMiA4NzEuOTQyNDQsLTI0MS41ODAyNiBDIDg2OS4wOTIwMSwtMjQyLjg5NzQ5IDg2NC41MzU3OCwtMjQ1LjMwODk4IDg2MS44OTEyNCwtMjQ2LjAyNTc2IEMgODU5LjI0NjcsLTI0Ni43NDI1NCA4NTAuNzMwMjgsLTI0Ni4wMDQ2MSA4NTAuNzMwMjgsLTI0Ni4wMDQ2MSB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNDc0MDg4NyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjQxMTUxIgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTQxIgorICAgICAgICAgICAgIGQ9Ik0gODY0LjgyNDk2LC0yNDkuMjEwODEgQyA4NjQuODI0OTYsLTI0OS4yMTA4MSA4NzIuOTk0NDgsLTI1MS4xNzk4NyA4NzQuODUxODQsLTI1MS4wNjQ3NyBDIDg3Ni43MDkxOSwtMjUwLjk0OTY1IDg3OC4zODM0MiwtMjUwLjA1NTIxIDg4MC44NTM3NCwtMjQ4Ljk0Njk4IEMgODgzLjMyNDA1LC0yNDcuODM4NzcgODg4LjkzMDk0LC0yNDQuOTQ5NzEgODkxLjA4NTEyLC0yNDMuMzAxNjcgQyA4OTMuMjM5MywtMjQxLjY1MzYzIDg5Ny4wNTYzMiwtMjM5Ljg0ODE1IDg5Ny4wNTYzMiwtMjM5Ljg0ODE1IEMgODk3LjA1NjMyLC0yMzkuODQ4MTUgODg5LjEyNzkzLC0yNDIuOTIxMjEgODg2LjMxODQ1LC0yNDQuMzIzNjUgQyA4ODMuNTA4OTYsLTI0NS43MjYwOSA4NzkuMDI3MzksLTI0OC4yNzM2NCA4NzYuNDA1NjIsLTI0OS4wNjk3MSBDIDg3My43ODM4NiwtMjQ5Ljg2NTc3IDg2NC44MjQ5NiwtMjQ5LjIxMDgxIDg2NC44MjQ5NiwtMjQ5LjIxMDgxIHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43OTM3NiIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI1ODgwNSIKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODE0MyIKKyAgICAgICAgICAgICBkPSJNIDg4MS4zODQ4NSwtMjUxLjYwMjgyIEMgODgxLjM4NDg1LC0yNTEuNjAyODIgODg5LjQ3MDIxLC0yNTMuNTEwOTEgODkxLjMyMzIyLC0yNTMuMzM5NDYgQyA4OTMuMTc2MjIsLTI1My4xNjc5OSA4OTQuODIyNTIsLTI1Mi4yMjMxMyA4OTcuMjU4MDQsLTI1MS4wNDAzOCBDIDg5OS42OTM1NywtMjQ5Ljg1NzY3IDkwNS4yMTAxMywtMjQ2Ljc5OTY4IDkwNy4zMTMyNywtMjQ1LjA4Njk5IEMgOTA5LjQxNjQxLC0yNDMuMzc0MjkgOTEzLjE3Njg0LC0yNDEuNDUzNzMgOTEzLjE3Njg0LC0yNDEuNDUzNzMgQyA5MTMuMTc2ODQsLTI0MS40NTM3MyA5MDUuMzQ1NDQsLTI0NC43NjYxMyA5MDIuNTc5ODQsLTI0Ni4yNTMyMyBDIDg5OS44MTQyMywtMjQ3Ljc0MDM1IDg5NS40MTIwOSwtMjUwLjQyMjgyIDg5Mi44MTU3LC0yNTEuMjk4MTQgQyA4OTAuMjE5MzMsLTI1Mi4xNzM0NSA4ODEuMzg0ODUsLTI1MS42MDI4MiA4ODEuMzg0ODUsLTI1MS42MDI4MiB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTQ1IgorICAgICAgICAgICAgIGQ9Ik0gODk2LjU4NDE1LC0yNTQuMzQ3MjQgQyA4OTYuNTg0MTUsLTI1NC4zNDcyNCA5MDQuMjI1ODEsLTI1NS43NzQ5NCA5MDYuMDc5NjIsLTI1NS42MTIzOSBDIDkwNy45MzM0MiwtMjU1LjQ0OTgzIDkwOS41ODQyNCwtMjU0LjUxMjg5IDkxMi4wMjU0MSwtMjUzLjM0MTg2IEMgOTE0LjQ2NjU5LC0yNTIuMTcwODYgOTE5Ljk5Nzc5LC0yNDkuMTM5NCA5MjIuMTA5MTMsLTI0Ny40MzY4NCBDIDkyNC4yMjA0NywtMjQ1LjczNDI2IDkyNy45OTAwOSwtMjQzLjgzMTc5IDkyNy45OTAwOSwtMjQzLjgzMTc5IEMgOTI3Ljk5MDA5LC0yNDMuODMxNzkgOTIwLjE0Mjg2LC0yNDcuMTA2NTMgOTE3LjM3MDE0LC0yNDguNTgwMzQgQyA5MTQuNTk3NDMsLTI1MC4wNTQxNCA5MTAuMTgyNDUsLTI1Mi43MTU0MyA5MDcuNTgxODksLTI1My41NzgyNyBDIDkwNC45ODEzNCwtMjU0LjQ0MTA5IDg5Ni41ODQxNSwtMjU0LjM0NzI0IDg5Ni41ODQxNSwtMjU0LjM0NzI0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43NDMzODkzIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuMjgzNzgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNDciCisgICAgICAgICAgICAgZD0iTSA5MTEuNDUzMjgsLTI1NS45ODU0NCBDIDkxMS40NTMyOCwtMjU1Ljk4NTQ0IDkyMC4wOTQ5NCwtMjU3LjUzODE0IDkyMS45NDg3NSwtMjU3LjM3NTU5IEMgOTIzLjgwMjU1LC0yNTcuMjEzMDMgOTI1LjQ1MzM3LC0yNTYuMjc2MDkgOTI3Ljg5NDU0LC0yNTUuMTA1MDYgQyA5MzAuMzM1NzIsLTI1My45MzQwNiA5MzUuODY2OTIsLTI1MC45MDI2IDkzNy45NzgyNiwtMjQ5LjIwMDA0IEMgOTQwLjA4OTYsLTI0Ny40OTc0NiA5NDMuODU5MjIsLTI0NS41OTQ5OSA5NDMuODU5MjIsLTI0NS41OTQ5OSBDIDk0My44NTkyMiwtMjQ1LjU5NDk5IDkzNi4wMTE5OSwtMjQ4Ljg2OTczIDkzMy4yMzkyNywtMjUwLjM0MzU0IEMgOTMwLjQ2NjU2LC0yNTEuODE3MzQgOTI2LjA1MTU4LC0yNTQuNDc4NjMgOTIzLjQ1MTAyLC0yNTUuMzQxNDcgQyA5MjAuODUwNDcsLTI1Ni4yMDQyOSA5MTEuNDUzMjgsLTI1NS45ODU0NCA5MTEuNDUzMjgsLTI1NS45ODU0NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTQ5IgorICAgICAgICAgICAgIGQ9Ik0gOTI3LjcwMzI4LC0yNTguMjk3OTQgQyA5MjcuNzAzMjgsLTI1OC4yOTc5NCA5MzUuMzQ0OTQsLTI1OS4xNjMxNCA5MzcuMTk4NzUsLTI1OS4wMDA1OSBDIDkzOS4wNTI1NSwtMjU4LjgzODAzIDk0MC43MDMzNywtMjU3LjkwMTA5IDk0My4xNDQ1NCwtMjU2LjczMDA2IEMgOTQ1LjU4NTcyLC0yNTUuNTU5MDYgOTUxLjExNjkyLC0yNTIuNTI3NiA5NTMuMjI4MjYsLTI1MC44MjUwNCBDIDk1NS4zMzk2LC0yNDkuMTIyNDYgOTU5LjEwOTIyLC0yNDcuMjE5OTkgOTU5LjEwOTIyLC0yNDcuMjE5OTkgQyA5NTkuMTA5MjIsLTI0Ny4yMTk5OSA5NTEuMjYxOTksLTI1MC40OTQ3MyA5NDguNDg5MjcsLTI1MS45Njg1NCBDIDk0NS43MTY1NiwtMjUzLjQ0MjM0IDk0MS4zMDE1OCwtMjU2LjEwMzYzIDkzOC43MDEwMiwtMjU2Ljk2NjQ3IEMgOTM2LjEwMDQ3LC0yNTcuODI5MjkgOTI3LjcwMzI4LC0yNTguMjk3OTQgOTI3LjcwMzI4LC0yNTguMjk3OTQgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii01Ljc0MzM4OTMiCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSIxMy4yODM3OCIKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODE1MSIKKyAgICAgICAgICAgICBkPSJNIDk0Mi44MjgyOCwtMjU5LjQ4NTQ0IEMgOTQyLjgyODI4LC0yNTkuNDg1NDQgOTUxLjQwNzQ0LC0yNjAuOTc1NjQgOTUzLjI2MTI1LC0yNjAuODEzMDkgQyA5NTUuMTE1MDUsLTI2MC42NTA1MyA5NTYuNzY1ODcsLTI1OS43MTM1OSA5NTkuMjA3MDQsLTI1OC41NDI1NiBDIDk2MS42NDgyMiwtMjU3LjM3MTU2IDk2Ny4xNzk0MiwtMjU0LjM0MDEgOTY5LjI5MDc2LC0yNTIuNjM3NTQgQyA5NzEuNDAyMSwtMjUwLjkzNDk2IDk3NS4xNzE3MiwtMjQ5LjAzMjQ5IDk3NS4xNzE3MiwtMjQ5LjAzMjQ5IEMgOTc1LjE3MTcyLC0yNDkuMDMyNDkgOTY3LjMyNDQ5LC0yNTIuMzA3MjMgOTY0LjU1MTc3LC0yNTMuNzgxMDQgQyA5NjEuNzc5MDYsLTI1NS4yNTQ4NCA5NTcuMzY0MDgsLTI1Ny45MTYxMyA5NTQuNzYzNTIsLTI1OC43Nzg5NyBDIDk1Mi4xNjI5NywtMjU5LjY0MTc5IDk0Mi44MjgyOCwtMjU5LjQ4NTQ0IDk0Mi44MjgyOCwtMjU5LjQ4NTQ0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43NDMzODkzIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuMjgzNzgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNTMiCisgICAgICAgICAgICAgZD0iTSA5NTkuMDc4MjgsLTI2MS41NDc5NCBDIDk1OS4wNzgyOCwtMjYxLjU0Nzk0IDk2Ni45MDc0NCwtMjYyLjM1MDY0IDk2OC43NjEyNSwtMjYyLjE4ODA5IEMgOTcwLjYxNTA1LC0yNjIuMDI1NTMgOTcyLjI2NTg3LC0yNjEuMDg4NTkgOTc0LjcwNzA0LC0yNTkuOTE3NTYgQyA5NzcuMTQ4MjIsLTI1OC43NDY1NiA5ODIuNjc5NDIsLTI1NS43MTUxIDk4NC43OTA3NiwtMjU0LjAxMjU0IEMgOTg2LjkwMjEsLTI1Mi4zMDk5NiA5OTAuNjcxNzIsLTI1MC40MDc0OSA5OTAuNjcxNzIsLTI1MC40MDc0OSBDIDk5MC42NzE3MiwtMjUwLjQwNzQ5IDk4Mi44MjQ0OSwtMjUzLjY4MjIzIDk4MC4wNTE3NywtMjU1LjE1NjA0IEMgOTc3LjI3OTA2LC0yNTYuNjI5ODQgOTcyLjg2NDA4LC0yNTkuMjkxMTMgOTcwLjI2MzUyLC0yNjAuMTUzOTcgQyA5NjcuNjYyOTcsLTI2MS4wMTY3OSA5NTkuMDc4MjgsLTI2MS41NDc5NCA5NTkuMDc4MjgsLTI2MS41NDc5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTU1IgorICAgICAgICAgICAgIGQ9Ik0gOTc0LjQ1MzI4LC0yNjIuNzk3OTQgQyA5NzQuNDUzMjgsLTI2Mi43OTc5NCA5ODIuODQ0OTQsLTI2My45NzU2NCA5ODQuNjk4NzUsLTI2My44MTMwOSBDIDk4Ni41NTI1NSwtMjYzLjY1MDUzIDk4OC4yMDMzNywtMjYyLjcxMzU5IDk5MC42NDQ1NCwtMjYxLjU0MjU2IEMgOTkzLjA4NTcyLC0yNjAuMzcxNTYgOTk4LjYxNjkyLC0yNTcuMzQwMSAxMDAwLjcyODMsLTI1NS42Mzc1NCBDIDEwMDIuODM5NiwtMjUzLjkzNDk2IDEwMDYuNjA5MiwtMjUyLjAzMjQ5IDEwMDYuNjA5MiwtMjUyLjAzMjQ5IEMgMTAwNi42MDkyLC0yNTIuMDMyNDkgOTk4Ljc2MTk5LC0yNTUuMzA3MjMgOTk1Ljk4OTI3LC0yNTYuNzgxMDQgQyA5OTMuMjE2NTYsLTI1OC4yNTQ4NCA5ODguODAxNTgsLTI2MC45MTYxMyA5ODYuMjAxMDIsLTI2MS43Nzg5NyBDIDk4My42MDA0NywtMjYyLjY0MTc5IDk3NC40NTMyOCwtMjYyLjc5Nzk0IDk3NC40NTMyOCwtMjYyLjc5Nzk0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNS43NDMzODkzIgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuMjgzNzgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNTciCisgICAgICAgICAgICAgZD0iTSA5OTAuNjQwNzgsLTI2NC44NjA0NCBDIDk5MC42NDA3OCwtMjY0Ljg2MDQ0IDk5Ny41MzI0NCwtMjY1Ljg1MDY0IDk5OS4zODYyNSwtMjY1LjY4ODA5IEMgMTAwMS4yNDAxLC0yNjUuNTI1NTMgMTAwMi44OTA5LC0yNjQuNTg4NTkgMTAwNS4zMzIsLTI2My40MTc1NiBDIDEwMDcuNzczMiwtMjYyLjI0NjU2IDEwMTMuMzA0NCwtMjU5LjIxNTEgMTAxNS40MTU4LC0yNTcuNTEyNTQgQyAxMDE3LjUyNzEsLTI1NS44MDk5NiAxMDIxLjI5NjcsLTI1My45MDc0OSAxMDIxLjI5NjcsLTI1My45MDc0OSBDIDEwMjEuMjk2NywtMjUzLjkwNzQ5IDEwMTMuNDQ5NSwtMjU3LjE4MjIzIDEwMTAuNjc2OCwtMjU4LjY1NjA0IEMgMTAwNy45MDQxLC0yNjAuMTI5ODQgMTAwMy40ODkxLC0yNjIuNzkxMTMgMTAwMC44ODg1LC0yNjMuNjUzOTcgQyA5OTguMjg3OTcsLTI2NC41MTY3OSA5OTAuNjQwNzgsLTI2NC44NjA0NCA5OTAuNjQwNzgsLTI2NC44NjA0NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTU5IgorICAgICAgICAgICAgIGQ9Ik0gMTAwNy43NjU4LC0yNjUuNzk3OTQgQyAxMDA3Ljc2NTgsLTI2NS43OTc5NCAxMDE0LjU5NDksLTI2Ni45NzU2NCAxMDE2LjQ0ODgsLTI2Ni44MTMwOSBDIDEwMTguMzAyNiwtMjY2LjY1MDUzIDEwMTkuOTUzNCwtMjY1LjcxMzU5IDEwMjIuMzk0NSwtMjY0LjU0MjU2IEMgMTAyNC44MzU3LC0yNjMuMzcxNTYgMTAzMC4zNjY5LC0yNjAuMzQwMSAxMDMyLjQ3ODMsLTI1OC42Mzc1NCBDIDEwMzQuNTg5NiwtMjU2LjkzNDk2IDEwMzguMzU5MiwtMjU1LjAzMjQ5IDEwMzguMzU5MiwtMjU1LjAzMjQ5IEMgMTAzOC4zNTkyLC0yNTUuMDMyNDkgMTAzMC41MTIsLTI1OC4zMDcyMyAxMDI3LjczOTMsLTI1OS43ODEwNCBDIDEwMjQuOTY2NiwtMjYxLjI1NDg0IDEwMjAuNTUxNiwtMjYzLjkxNjEzIDEwMTcuOTUxLC0yNjQuNzc4OTcgQyAxMDE1LjM1MDUsLTI2NS42NDE3OSAxMDA3Ljc2NTgsLTI2NS43OTc5NCAxMDA3Ljc2NTgsLTI2NS43OTc5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTYxIgorICAgICAgICAgICAgIGQ9Ik0gMTAyMy44OTA4LC0yNjcuNzk3OTQgQyAxMDIzLjg5MDgsLTI2Ny43OTc5NCAxMDI5Ljk2OTksLTI2OC4yMjU2NCAxMDMxLjgyMzgsLTI2OC4wNjMwOSBDIDEwMzMuNjc3NiwtMjY3LjkwMDUzIDEwMzUuMzI4NCwtMjY2Ljk2MzU5IDEwMzcuNzY5NSwtMjY1Ljc5MjU2IEMgMTA0MC4yMTA3LC0yNjQuNjIxNTYgMTA0NS43NDE5LC0yNjEuNTkwMSAxMDQ3Ljg1MzMsLTI1OS44ODc1NCBDIDEwNDkuOTY0NiwtMjU4LjE4NDk2IDEwNTMuNzM0MiwtMjU2LjI4MjQ5IDEwNTMuNzM0MiwtMjU2LjI4MjQ5IEMgMTA1My43MzQyLC0yNTYuMjgyNDkgMTA0NS44ODcsLTI1OS41NTcyMyAxMDQzLjExNDMsLTI2MS4wMzEwNCBDIDEwNDAuMzQxNiwtMjYyLjUwNDg0IDEwMzUuOTI2NiwtMjY1LjE2NjEzIDEwMzMuMzI2LC0yNjYuMDI4OTcgQyAxMDMwLjcyNTUsLTI2Ni44OTE3OSAxMDIzLjg5MDgsLTI2Ny43OTc5NCAxMDIzLjg5MDgsLTI2Ny43OTc5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuNzQzMzg5MyIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjI4Mzc4IgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTYzIgorICAgICAgICAgICAgIGQ9Ik0gMTAzOS43MDMzLC0yNjkuMTcyOTQgQyAxMDM5LjcwMzMsLTI2OS4xNzI5NCAxMDQ2LjE1NzQsLTI2OS44NTA2NCAxMDQ4LjAxMTMsLTI2OS42ODgwOSBDIDEwNDkuODY1MSwtMjY5LjUyNTUzIDEwNTEuNTE1OSwtMjY4LjU4ODU5IDEwNTMuOTU3LC0yNjcuNDE3NTYgQyAxMDU2LjM5ODIsLTI2Ni4yNDY1NiAxMDYxLjkyOTQsLTI2My4yMTUxIDEwNjQuMDQwOCwtMjYxLjUxMjU0IEMgMTA2Ni4xNTIxLC0yNTkuODA5OTYgMTA2OS45MjE3LC0yNTcuOTA3NDkgMTA2OS45MjE3LC0yNTcuOTA3NDkgQyAxMDY5LjkyMTcsLTI1Ny45MDc0OSAxMDYyLjA3NDUsLTI2MS4xODIyMyAxMDU5LjMwMTgsLTI2Mi42NTYwNCBDIDEwNTYuNTI5MSwtMjY0LjEyOTg0IDEwNTIuMTE0MSwtMjY2Ljc5MTEzIDEwNDkuNTEzNSwtMjY3LjY1Mzk3IEMgMTA0Ni45MTMsLTI2OC41MTY3OSAxMDM5LjcwMzMsLTI2OS4xNzI5NCAxMDM5LjcwMzMsLTI2OS4xNzI5NCB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iLTUuMTM2MDcyNCIKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEzLjU1ODEzIgorICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6emN6emMiCisgICAgICAgICAgICAgaWQ9InBhdGg4MTY1IgorICAgICAgICAgICAgIGQ9Ik0gMTA1NS4yNzE4LC0yNzEuMDMzMTkgQyAxMDU1LjI3MTgsLTI3MS4wMzMxOSAxMDYwLjc2OTQsLTI3MS45NDI2NCAxMDYyLjYyOTYsLTI3MS44ODY2NyBDIDEwNjQuNDg5NywtMjcxLjgzMDY3IDEwNjYuMTkxNSwtMjcwLjk4OTkzIDEwNjguNjk1NywtMjY5Ljk2MDgxIEMgMTA3MS4yMDAxLC0yNjguOTMxNzEgMTA3Ni44OTYsLTI2Ni4yMjI0MSAxMDc5LjEwMTUsLTI2NC42NDM3MiBDIDEwODEuMzA3LC0yNjMuMDY1MDEgMTA4NS4xNzk1LC0yNjEuMzgxODIgMTA4NS4xNzk1LC0yNjEuMzgxODIgQyAxMDg1LjE3OTUsLTI2MS4zODE4MiAxMDc3LjE1NzUsLTI2NC4yMDEyMSAxMDc0LjMwNDcsLTI2NS41MTM2IEMgMTA3MS40NTIxLC0yNjYuODI1OTggMTA2Ni44OTE4LC0yNjkuMjI5NzMgMTA2NC4yNDYsLTI2OS45NDIwMyBDIDEwNjEuNjAwMywtMjcwLjY1NDMxIDEwNTUuMjcxOCwtMjcxLjAzMzE5IDEwNTUuMjcxOCwtMjcxLjAzMzE5IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSItNC42MzcwMTQ3IgorICAgICAgICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iMTMuNzQ3NTgiCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6Y3p6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNjciCisgICAgICAgICAgICAgZD0iTSAxMDcyLjcwMDcsLTI3My40ODUzNyBDIDEwNzIuNzAwNywtMjczLjQ4NTM3IDEwNzcuMjQ3OSwtMjc0LjY0MTE4IDEwNzkuMTA4NywtMjc0LjY3MTU4IEMgMTA4MC45Njk0LC0yNzQuNzAxOTYgMTA4Mi43MDgzLC0yNzMuOTQxMDkgMTA4NS4yNTc2LC0yNzMuMDI5MjcgQyAxMDg3LjgwNywtMjcyLjExNzUgMTA5My42MjI1LC0yNjkuNjc1NDEgMTA5NS44OTksLTI2OC4yMDA3NyBDIDEwOTguMTc1MywtMjY2LjcyNjA5IDExMDIuMTIxNywtMjY1LjIyNDQxIDExMDIuMTIxNywtMjY1LjIyNDQxIEMgMTEwMi4xMjE3LC0yNjUuMjI0NDEgMTA5My45Nzc1LC0yNjcuNjY4NTIgMTA5MS4wNjcsLTI2OC44NDcxMyBDIDEwODguMTU2NSwtMjcwLjAyNTczIDEwODMuNDg5NiwtMjcyLjIxNTI4IDEwODAuODEzNiwtMjcyLjgwNDA0IEMgMTA3OC4xMzc3LC0yNzMuMzkyNzkgMTA3Mi43MDA3LC0yNzMuNDg1MzcgMTA3Mi43MDA3LC0yNzMuNDg1MzcgeiIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii00LjQ4NDIzOTIiCisgICAgICAgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSIxMy43OTkzMyIKKyAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enpjenpjIgorICAgICAgICAgICAgIGlkPSJwYXRoODE2OSIKKyAgICAgICAgICAgICBkPSJNIDEwODcuMTU4NSwtMjc2LjUyNDQgQyAxMDg3LjE1ODUsLTI3Ni41MjQ0IDEwOTMuMTE4NSwtMjc4LjI5Nzk1IDEwOTQuOTc4NywtMjc4LjM1NDY0IEMgMTA5Ni44Mzg3LC0yNzguNDExMzEgMTA5OC41ODgzLC0yNzcuNjc1MDkgMTEwMS4xNTAyLC0yNzYuNzk5MzkgQyAxMTAzLjcxMjIsLTI3NS45MjM3MyAxMTAzLjY3MjgsLTI3NS45NDIyNiAxMTA2LjQ4MzcsLTI3NS4zMDkyNCBDIDExMDkuMjgwNiwtMjc0LjY3OTM4IDExMTMuNTYwNCwtMjczLjc5NjExIDExMTMuNTYwNCwtMjczLjc5NjExIEMgMTExMy41NjA0LC0yNzMuNzk2MTEgMTEwOS45NDQ5LC0yNzMuODEyMzkgMTEwNi43NjgxLC0yNzQuMjYyMjUgQyAxMTAzLjY1MjYsLTI3NC43MDM0NCAxMDk5LjM5MzgsLTI3NS45NjA1IDEwOTYuNzA5NywtMjc2LjUxMTM4IEMgMTA5NC4wMjU4LC0yNzcuMDYyMjYgMTA4Ny4xNTg1LC0yNzYuNTI0NCAxMDg3LjE1ODUsLTI3Ni41MjQ0IHoiCisgICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICAgIDxwYXRoCisgICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjemN6YyIKKyAgICAgICAgICAgICBpZD0icGF0aDgxNzEiCisgICAgICAgICAgICAgZD0iTSAxMDk5LjI1LC0yNzkuOTI5ODEgQyAxMDk5LjQxMTIsLTI3OS42NjExOSAxMTEwLjQ1ODEsLTI4NC41MzAyNyAxMTExLjQzNzUsLTI4NC42MTczMSBDIDExMTIuNDE2OSwtMjg0LjcwNDM1IDExMTMuNDM3NSwtMjgxLjQ5MjMxIDExMTMuNDM3NSwtMjgxLjQ5MjMxIEMgMTExMy40Mzc1LC0yODEuNDkyMzEgMTExMi42NjI0LC0yODIuOTk2NjUgMTExMC41NjI1LC0yODIuNTU0ODEgQyAxMTA4LjQ2MjYsLTI4Mi4xMTI5NyAxMDk5LjI2MTYsLTI3OS44ODM0IDEwOTkuMjUsLTI3OS45Mjk4MSB6IgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgorICAgICAgICA8L2c+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE3MyIKKyAgICAgICAgICAgZD0iTSAxMTA3LjQ1MzIsLTI4NC4wOTM4IEMgMTEwNy4wMzQ1LC0yODMuODgwOTcgMTEwNy4yOTc2LC0yODMuOTk5OTEgMTEwNi44MDYsLTI4My43ODc5OSBDIDExMDYuMzE5OSwtMjgzLjU3ODQ1IDExMDUuMDgyNiwtMjgzLjIxMzYgMTEwMi43MjY0LC0yODIuMzI5MDQgQyAxMDk5LjM5NTMsLTI4MS4wNzg0NyAxMDk2Ljg5NjIsLTI4MC4xNzU2IDEwOTUuNzAwNSwtMjc5LjI2Mjk0IEMgMTA5NC4xNjQ0LC0yNzkuMjQxNjggMTA5MS45OCwtMjc5LjAyOTYzIDEwOTAuMDQ0MiwtMjc4LjU0NDE5IEMgMTA4Ny4wNjI3LC0yNzcuNzk2NTMgMTA4NS4xODksLTI3Ny4zNzAxOCAxMDgzLjI5NDIsLTI3Ni45NTA0NCBDIDEwODEuMzk5NCwtMjc2LjUzMDcyIDEwODEuNjE4NywtMjc2LjMwODI1IDEwODAuNDE5MiwtMjc2LjA3NTQ0IEMgMTA3OS4xMjI2LC0yNzUuODIzNzggMTA3OC42OTc4LC0yNzYuMDg0NDMgMTA3NC45ODE3LC0yNzUuMjk0MTkgQyAxMDcxLjQ5MTgsLTI3NC41NTIwNSAxMDY2LjA4NjksLTI3My4zNjMxMiAxMDY0LjgyNTUsLTI3Mi42MDY2OSBDIDEwNjMuMjQxNiwtMjcyLjc4NzQ4IDEwNjAuOTU4LC0yNzIuOTI4NDcgMTA1OC45ODE3LC0yNzIuNjM3OTQgQyAxMDU1Ljk0MTMsLTI3Mi4xOTA5OSAxMDU0LjA2NTUsLTI3MS45NjUxOCAxMDUyLjEzOCwtMjcxLjczMTY5IEMgMTA1MS40ODI2LC0yNzEuNjUyMzIgMTA1MS4wOTY5LC0yNzEuNTMwOTEgMTA1MC43OTQyLC0yNzEuNDUwNDQgQyAxMDUwLjM2OCwtMjcxLjMxODc5IDEwNTAuMTA4NCwtMjcxLjE5MDQyIDEwNDkuNDE5MiwtMjcxLjEwNjY5IEMgMTA0OC4xMDc2LC0yNzAuOTQ3MzMgMTA0Ny42NTcsLTI3MS4yNjM1MiAxMDQzLjg4OCwtMjcwLjgyNTQ0IEMgMTA0MC4zMzQxLC0yNzAuNDEyMzYgMTAzNC44ODI2LC0yNjkuNTUyNjIgMTAzMy42MzgsLTI2OC44ODc5NCBDIDEwMzIuMDM5LC0yNjkuMTg1MjQgMTAyOS43ODAyLC0yNjkuNDIyMTMgMTAyNy43OTQyLC0yNjkuMjMxNjkgQyAxMDI0LjczNTQsLTI2OC45MzgzOCAxMDIyLjgyMjIsLTI2OC43NDc3IDEwMjAuODg4LC0yNjguNTc1NDQgQyAxMDE4Ljk1MzcsLTI2OC40MDMxOCAxMDE5LjE5OTMsLTI2OC4xNTMwNyAxMDE3Ljk4MTcsLTI2OC4wNDQxOSBDIDEwMTYuNjY1NSwtMjY3LjkyNjUgMTAxNi4yMjE5LC0yNjguMjA3ODIgMTAxMi40NTA1LC0yNjcuNzk0MTkgQyAxMDA4LjkwODYsLTI2Ny40MDU3NSAxMDAzLjQ0MjYsLTI2Ni41ODQ5MiAxMDAyLjE2OTIsLTI2NS45MTkxOSBDIDEwMDAuNTcwMywtMjY2LjIxMzg5IDk5OC4yODIwMiwtMjY2LjQyNjIgOTk2LjI5NDE5LC0yNjYuMjMxNjkgQyA5OTMuMjM1OTUsLTI2NS45MzI0NSA5OTEuMzUzMDYsLTI2NS43NTE0NSA5ODkuNDE5MTksLTI2NS41NzU0NCBDIDk4OC43NjE3LC0yNjUuNTE1NiA5ODguMzc5MTUsLTI2NS4zOTY4OCA5ODguMDc1NDQsLTI2NS4zMjU0NCBDIDk4Ny42NDc3OSwtMjY1LjIwNjQ5IDk4Ny4zOTE5MywtMjY1LjEwNzM3IDk4Ni43MDA0NCwtMjY1LjA0NDE5IEMgOTg1LjM4NDQ4LC0yNjQuOTIzOTQgOTg0Ljk0MDY4LC0yNjUuMjM5MDcgOTgxLjE2OTE5LC0yNjQuODI1NDQgQyA5NzcuNjEzMDUsLTI2NC40MzU0MyA5NzIuMTYzNjUsLTI2My41ODYyOCA5NzAuOTE5MTksLTI2Mi45MTkxOSBDIDk2OS4zMjA1NiwtMjYzLjIxMzM4IDk2Ny4wNTkzNSwtMjYzLjQ0MjkxIDk2NS4wNzU0NCwtMjYzLjIzMTY5IEMgOTYyLjAxOTg0LC0yNjIuOTA2MzcgOTYwLjEwMTQsLTI2Mi43MDU0NSA5NTguMTY5MTksLTI2Mi41MTI5NCBDIDk1Ni4yMzY5OCwtMjYyLjMyMDQ0IDk1Ni40NzkzMiwtMjYyLjA3MjA2IDk1NS4yNjI5NCwtMjYxLjk1MDQ0IEMgOTUzLjk0ODA2LC0yNjEuODE4OTggOTUzLjQ5OTk2LC0yNjIuMTE0OTggOTQ5LjczMTY5LC0yNjEuNjY5MTkgQyA5NDYuMTkyODIsLTI2MS4yNTA1NCA5NDAuNzU0MDEsLTI2MC4zNzcwMiA5MzkuNDgxNjksLTI1OS43MDA0NCBDIDkzNy44ODQxNCwtMjU5Ljk4MTQ5IDkzNS42MjE3MywtMjYwLjEyMDg3IDkzMy42Mzc5NCwtMjU5Ljg4Nzk0IEMgOTMwLjU4NTk2LC0yNTkuNTI5NTggOTI4LjY5Mjg2LC0yNTkuMzIwMDggOTI2Ljc2Mjk0LC0yNTkuMTA2NjkgQyA5MjYuMTA2NzQsLTI1OS4wMzQxNCA5MjUuNzIyMjgsLTI1OC45MzQgOTI1LjQxOTE5LC0yNTguODU2NjkgQyA5MjQuOTkyNDIsLTI1OC43Mjk0NyA5MjQuNzM0MjgsLTI1OC41ODk0OSA5MjQuMDQ0MTksLTI1OC41MTI5NCBDIDkyMi43MzA4NiwtMjU4LjM2NzI2IDkyMi4yNzY3MywtMjU4LjY4Njk2IDkxOC41MTI5NCwtMjU4LjIwMDQ0IEMgOTE0Ljk2NDA1LC0yNTcuNzQxNjkgOTA5LjUzNDMxLC0yNTYuNzgxNDIgOTA4LjI5NDE5LC0yNTYuMDc1NDQgQyA5MDYuNzAxMTQsLTI1Ni4zMTk2OCA5MDQuNDYwMzgsLTI1Ni40NTY3OSA5MDIuNDgxNjksLTI1Ni4yMDA0NCBDIDg5OS40MzQxLC0yNTUuODA1NjMgODk3LjUzMDk4LC0yNTUuNTUxOTkgODk1LjYwNjY5LC0yNTUuMjk0MTkgQyA4OTMuNjgyNDEsLTI1NS4wMzY0IDg5My44ODA1OCwtMjU0LjgwMDY2IDg5Mi42NjkxOSwtMjU0LjYzNzk0IEMgODkxLjM1OTczLC0yNTQuNDYyMDQgODkwLjkyMiwtMjU0Ljc0MjMyIDg4Ny4xNjkxOSwtMjU0LjE2OTE5IEMgODgzLjY0NDksLTI1My42MzA5NSA4NzguMjQ2MDQsLTI1Mi40NzAwMiA4NzYuOTgxNjksLTI1MS43MzE2OSBDIDg3NS4zOTQxOSwtMjUxLjkzNTIzIDg3My4xMzYxOSwtMjUxLjk4NjQyIDg3MS4xNjkxOSwtMjUxLjYzNzk0IEMgODY4LjE0MzAyLC0yNTEuMTAxODIgODY2LjI3MDMsLTI1MC43NzYyNSA4NjQuMzU2NjksLTI1MC40NTA0NCBDIDg2My43MDYwOCwtMjUwLjMzOTY3IDg2My4zNDI5OCwtMjUwLjE3OTUgODYzLjA0NDE5LC0yNTAuMDc1NDQgQyA4NjIuNjIzNTIsLTI0OS45MTA1NiA4NjIuMzgwNzQsLTI0OS43NDQxNCA4NjEuNzAwNDQsLTI0OS42MDY2OSBDIDg2MC40MDU3OSwtMjQ5LjM0NTEgODU5Ljk3MzMyLC0yNDkuNjEyODkgODU2LjI2Mjk0LC0yNDguNzk0MTkgQyA4NTIuNzY0NDEsLTI0OC4wMjIyNCA4NDcuNDE2OTksLTI0Ni40MTEyNiA4NDYuMjAwNDQsLTI0NS41NzU0NCBDIDg0NC42Mzc2NiwtMjQ1LjY1Mjg5IDg0Mi40NDI4NiwtMjQ1LjQ5MDE2IDg0MC41MTI5NCwtMjQ0Ljk4MTY5IEMgODM3LjU0MDUsLTI0NC4xOTg1NiA4MzUuNjk1MzMsLTI0My43NDk2IDgzMy44MjU0NCwtMjQzLjIzMTY5IEMgODMxLjk1NTU2LC0yNDIuNzEzNzkgODMyLjE1ODg0LC0yNDIuNDY0NDEgODMwLjk4MTY5LC0yNDIuMTM3OTQgQyA4MjkuNzA5MjMsLTI0MS43ODUwNCA4MjkuMjg0NjYsLTI0Mi4wMzA4NSA4MjUuNjM3OTQsLTI0MC45NTA0NCBDIDgyMi4yMTMyNCwtMjM5LjkzNTgxIDgxNi45ODg1LC0yMzguMDE3MjcgODE1Ljc2Mjk0LC0yMzcuMTA2NjkgQyA4MTQuMjI0MTEsLTIzNy4wOTM5NSA4MTIuMDQzMTEsLTIzNi44MzQ0NyA4MTAuMTM3OTQsLTIzNi4yMzE2OSBDIDgwNy4yMDY4OCwtMjM1LjMwNDM1IDgwNS4zODc2MywtMjM0Ljc3MzI3IDgwMy41NDQxOSwtMjM0LjE2OTE5IEMgODAyLjkxNzQzLC0yMzMuOTYzODEgODAyLjU1MjQ2LC0yMzMuNzc2NjEgODAyLjI2Mjk0LC0yMzMuNjM3OTQgQyA4MDEuODU1MzEsLTIzMy40MjQzMyA4MDEuNjA5NiwtMjMzLjIyOTE5IDgwMC45NTA0NCwtMjMzLjAxMjk0IEMgNzk5LjY5NTk4LC0yMzIuNjAxNCA3OTkuMjY0MzMsLTIzMi44MjM5IDc5NS42NjkxOSwtMjMxLjU3NTQ0IEMgNzkyLjI3OTM0LC0yMzAuMzk4MjcgNzg3LjA3NDIxLC0yMjguMzYxNzQgNzg1Ljg4Nzk0LC0yMjcuNDE5MTkgQyA3ODQuMzY0MDUsLTIyNy4zNTk1MiA3ODIuMjM3ODksLTIyNy4wMjQzMiA3ODAuMzU2NjksLTIyNi4zNTY2OSBDIDc3Ny40NTkzLC0yMjUuMzI4NCA3NzUuNjU3NjEsLTIyNC42ODEyMSA3NzMuODI1NDQsLTIyNC4wNDQxOSBDIDc3MS45OTMyNywtMjIzLjQwNzE4IDc3Mi4xOTc1OSwtMjIzLjE5NTY1IDc3MS4wNDQxOSwtMjIyLjc5NDE5IEMgNzY5Ljc5NzQxLC0yMjIuMzYwMjMgNzY5LjM4MDU4LC0yMjIuNTk0NDcgNzY1LjgyNTQ0LC0yMjEuMjMxNjkgQyA3NjIuNDg2NzcsLTIxOS45NTE4OSA3NTcuMzM4MjksLTIxNy43NDkxNCA3NTYuMTM3OTQsLTIxNi43NjI5NCBDIDc1NC42MzA3NiwtMjE2LjY1NTI1IDc1Mi41MDIyNSwtMjE2LjI2NDE0IDc1MC42Mzc5NCwtMjE1LjU0NDE5IEMgNzQ3Ljc2OTc2LC0yMTQuNDM2NTkgNzQ2LjAxNDE0LC0yMTMuNzYyNjMgNzQ0LjIwMDQ0LC0yMTMuMDc1NDQgQyA3NDMuNTgzNzgsLTIxMi44NDE4MSA3NDMuMjA0MDMsLTIxMi42MzM0MSA3NDIuOTE5MTksLTIxMi40ODE2OSBDIDc0Mi45MTkxOSwtMjEyLjQ4MTY5IDc0Mi45MTkxOSwtMjExLjM4Nzk0IDc0Mi45MTkxOSwtMjExLjM4Nzk0IEMgNzQzLjAzMDk3LC0yMTEuNjEwMyA3NDMuMzA1MTgsLTIxMi4yMDUzNyA3NDMuODI1NDQsLTIxMi40ODE2OSBDIDc0NC41MjM0MSwtMjEyLjg1MjQxIDc0OC42MzkwNywtMjE0LjQ3NTA2IDc1MC42Mzc5NCwtMjE1LjIwMDQ0IEMgNzUyLjI5NDgsLTIxNS44MDE2OSA3NTQuNzkxODMsLTIxNi41MjkxMiA3NTYuNjA2NjksLTIxNi41MTI5NCBDIDc1Ni45MDgzMSwtMjE2LjUxMDI1IDc1Ny4xOTQzMSwtMjE2LjQ2MjA0IDc1Ny40NTA0NCwtMjE2LjQxOTE5IEMgNzU5LjI5MjkzLC0yMTYuMTEwOTQgNzY0LjkxOTE5LC0yMTQuODU2NjkgNzY0LjkxOTE5LC0yMTQuODU2NjkgQyA3NjQuOTE5MTgsLTIxNC44NTY2OSA3NTguNjg1NywtMjE2LjUwMzQ0IDc1Ny44ODc5NCwtMjE2LjcwMDQ0IEMgNzU3LjY5NzE1LC0yMTYuNzQ3NTUgNzU3LjM1MjIyLC0yMTYuNzY5MTYgNzU2LjkxOTE5LC0yMTYuNzYyOTQgQyA3NTguMDY0NjUsLTIxNy42MzI2NSA3NjEuNjgwMTksLTIxOS4xNTY0NSA3NjQuMjYyOTQsLTIyMC4yMDA0NCBDIDc2Ny4xMDExNiwtMjIxLjM0NzcxIDc2Ny4zNzk3NSwtMjIxLjQ1MjI2IDc2OS4zMjU0NCwtMjIxLjg1NjY5IEMgNzcxLjMzMzc0LC0yMjIuMjc0MTMgNzcyLjQ4MTY5LC0yMjIuMzU2NjkgNzcyLjQ4MTY5LC0yMjIuMzU2NjkgQyA3NzIuNDgxNjksLTIyMi4zNTY2OCA3NzIuMzk5MzMsLTIyMi45NTc4MyA3NzMuNDUwNDQsLTIyMy40ODE2OSBDIDc3NC4xNTU1NCwtMjIzLjgzMzEgNzc4LjMzNzQ2LC0yMjUuMzc0MDkgNzgwLjM1NjY5LC0yMjYuMDQ0MTkgQyA3ODIuMzA4NTksLTIyNi42OTE5MiA3ODUuNDE0MDksLTIyNy40MDI2OSA3ODcuMjMxNjksLTIyNy4wNDQxOSBDIDc4OS4wOTQ5MiwtMjI2LjY3NjY5IDc5NC43NjI5NCwtMjI1LjIzMTY5IDc5NC43NjI5NCwtMjI1LjIzMTY5IEMgNzk0Ljc2Mjk1LC0yMjUuMjMxNjkgNzg4LjQ3NTk0LC0yMjcuMTAyOCA3ODcuNjY5MTksLTIyNy4zMjU0NCBDIDc4Ny40NzYyNywtMjI3LjM3ODY5IDc4Ny4xMzgzNSwtMjI3LjQxMTQ4IDc4Ni43MDA0NCwtMjI3LjQxOTE5IEMgNzg3Ljg1ODc4LC0yMjguMjUyMDcgNzkxLjQ5NDg4LC0yMjkuNjE0NTEgNzk0LjEwNjY5LC0yMzAuNTc1NDQgQyA3OTYuOTc2ODUsLTIzMS42MzE0NSA3OTcuMjc0MDMsLTIzMS43MzcyNCA3OTkuMjMxNjksLTIzMi4xMDY2OSBDIDgwMS4wODUxOCwtMjMyLjQ1NjQ4IDgwMi4wOTA1MywtMjMyLjUzMjE3IDgwMi4yNjI5NCwtMjMyLjU0NDE5IEMgODAyLjM3NjU0LC0yMzIuNzYxNDMgODAyLjY0MDM5LC0yMzMuMzU0MjEgODAzLjE2OTE5LC0yMzMuNjA2NjkgQyA4MDMuODc4NjMsLTIzMy45NDU0MyA4MDguMDk1MjYsLTIzNS4zMTk0NCA4MTAuMTM3OTQsLTIzNS45MTkxOSBDIDgxMS44MzExMSwtMjM2LjQxNjMgODE0LjM3ODcxLC0yMzYuOTU1OTYgODE2LjIzMTY5LC0yMzYuODI1NDQgQyA4MTYuNTM5NjQsLTIzNi44MDM3NiA4MTYuODQ1MTgsLTIzNi43MjgxOCA4MTcuMTA2NjksLTIzNi42NjkxOSBDIDgxOC45ODc4NywtMjM2LjI0NDg3IDgyNC43MDA0NCwtMjM0LjYzNzk0IDgyNC43MDA0NCwtMjM0LjYzNzk0IEMgODI0LjcwMDQ1LC0yMzQuNjM3OTQgODE4LjM1ODcsLTIzNi43MDMxOSA4MTcuNTQ0MTksLTIzNi45NTA0NCBDIDgxNy4zNDk0LC0yMzcuMDA5NTggODE2Ljk4NjMxLC0yMzcuMDU0MzggODE2LjU0NDE5LC0yMzcuMDc1NDQgQyA4MTcuNzEzNjgsLTIzNy44NzI5OSA4MjEuNDA3MjEsLTIzOS4xMzE2NiA4MjQuMDQ0MTksLTI0MC4wMTI5NCBDIDgyNi45NDIsLTI0MC45ODE0MSA4MjcuMjc3MiwtMjQxLjAxNjI2IDgyOS4yNjI5NCwtMjQxLjI5NDE5IEMgODMxLjMxMjU5LC0yNDEuNTgxMDggODMyLjQ1MDQ0LC0yNDEuNjA2NjkgODMyLjQ1MDQ0LC0yNDEuNjA2NjkgQyA4MzIuNDUwNDIsLTI0MS42MDY2OSA4MzIuMzc3NjksLTI0Mi4yMTM2NiA4MzMuNDUwNDQsLTI0Mi42NjkxOSBDIDgzNC4xNzAwNCwtMjQyLjk3NDc2IDgzOC40NDE0MiwtMjQ0LjE2OTk0IDg0MC41MTI5NCwtMjQ0LjY2OTE5IEMgODQyLjUxNTM4LC0yNDUuMTUxNzcgODQ1LjcxMTQzLC0yNDUuNTk3NDggODQ3LjU3NTQ0LC0yNDUuMDc1NDQgQyA4NDkuNDg2MjIsLTI0NC41NDAyOSA4NTUuMjk0MTksLTI0Mi41NzU0NCA4NTUuMjk0MTksLTI0Mi41NzU0NCBDIDg1NS4yOTQxOSwtMjQyLjU3NTQ0IDg0OC44NzE1MywtMjQ0Ljk5ODk1IDg0OC4wNDQxOSwtMjQ1LjI5NDE5IEMgODQ3Ljg0NjM1LC0yNDUuMzY0OCA4NDcuNDYyMDMsLTI0NS40MzQ1OCA4NDcuMDEyOTQsLTI0NS40ODE2OSBDIDg0OC4yMDA4NCwtMjQ2LjIxMDM0IDg1MS45MjgyMSwtMjQ3LjI1NTc3IDg1NC42MDY2OSwtMjQ3Ljk4MTY5IEMgODU3LjU1MDExLC0yNDguNzc5NDQgODU3Ljg5ODc3LC0yNDguNzUyNTIgODU5LjkxOTE5LC0yNDguODg3OTQgQyA4NjEuODMyMDgsLTI0OS4wMTYxNyA4NjIuODY2MjQsLTI0OC45NTkwMyA4NjMuMDQ0MTksLTI0OC45NTA0NCBDIDg2My4xNjE0NywtMjQ5LjE1NDEgODYzLjQzNTk1LC0yNDkuNzI5OTIgODYzLjk4MTY5LC0yNDkuOTE5MTkgQyA4NjQuNzEzODgsLTI1MC4xNzMxMyA4NjkuMDYwMjEsLTI1MC45NjcwOCA4NzEuMTY5MTksLTI1MS4yOTQxOSBDIDg3Mi45MTczMiwtMjUxLjU2NTMgODc1LjU3MDA3LC0yNTEuNzc4ODkgODc3LjQ4MTY5LC0yNTEuMzg3OTQgQyA4NzcuNzk5MzUsLTI1MS4zMjI5OCA4NzguMDg2OTEsLTI1MS4yMDI0MyA4NzguMzU2NjksLTI1MS4xMDY2OSBDIDg4MC4yOTc0MywtMjUwLjQxNzk2IDg4Ni4yMDA0NCwtMjQ4LjAxMjk0IDg4Ni4yMDA0NCwtMjQ4LjAxMjk0IEMgODg2LjIwMDQ1LC0yNDguMDEyOTQgODc5LjY2NTczLC0yNTAuOTYzNzEgODc4LjgyNTQ0LC0yNTEuMzI1NDQgQyA4NzguNjI0NDcsLTI1MS40MTE5NSA4NzguMjUwMzEsLTI1MS40OTIyMyA4NzcuNzk0MTksLTI1MS41NzU0NCBDIDg3OS4wMDA2OSwtMjUyLjIwODYyIDg4Mi44MjM3NSwtMjUyLjk3MTA0IDg4NS41NDQxOSwtMjUzLjQ4MTY5IEMgODg4LjUzMzcyLC0yNTQuMDQyODggODg4Ljg0NDQyLC0yNTQuMDExMjMgODkwLjg4Nzk0LC0yNTQuMDEyOTQgQyA4OTIuOTk3MiwtMjU0LjAxNDcxIDg5NC4yMDA0NCwtMjUzLjg4Nzk0IDg5NC4yMDA0NCwtMjUzLjg4Nzk0IEMgODk0LjIwMDQ0LC0yNTMuODg3OTMgODk0LjEyNzczLC0yNTQuNTE5MTMgODk1LjIzMTY5LC0yNTQuODI1NDQgQyA4OTUuOTcyMjEsLTI1NS4wMzA5MSA5MDAuMzU3ODEsLTI1NS42NTkzMSA5MDIuNDgxNjksLTI1NS44ODc5NCBDIDkwNC41MzQ3MSwtMjU2LjEwODkzIDkwNy44MDAzMiwtMjU2LjE0MDE2IDkwOS43MDA0NCwtMjU1LjQxOTE5IEMgOTExLjY0ODIzLC0yNTQuNjgwMTIgOTE3LjU0NDE5LC0yNTIuMDQ0MTkgOTE3LjU0NDE5LC0yNTIuMDQ0MTkgQyA5MTcuNTQ0MjEsLTI1Mi4wNDQxOSA5MTAuOTgxMzEsLTI1NS4yMjMxNiA5MTAuMTM3OTQsLTI1NS42MDY2OSBDIDkwOS45MzYyNiwtMjU1LjY5ODQyIDkwOS41OTU3MywtMjU1Ljc5MjkgOTA5LjEzNzk0LC0yNTUuODg3OTQgQyA5MTAuMzQ4ODYsLTI1Ni40ODk4MiA5MTQuMTIyMzYsLTI1Ny4xMzY3OCA5MTYuODU2NjksLTI1Ny41NDQxOSBDIDkxOS44NjE0OSwtMjU3Ljk5MTkxIDkyMC4xODIyLC0yNTcuOTk1ODkgOTIyLjIzMTY5LC0yNTcuOTUwNDQgQyA5MjQuMTcyMTQsLTI1Ny45MDc0MiA5MjUuMjM4NjgsLTI1Ny43NTYyMSA5MjUuNDE5MTksLTI1Ny43MzE2OSBDIDkyNS41MzgxMSwtMjU3LjkyNDg1IDkyNS44MDMwOSwtMjU4LjQ5NzUyIDkyNi4zNTY2OSwtMjU4LjYzNzk0IEMgOTI3LjA5OTQsLTI1OC44MjYzMiA5MzEuNTEwOTgsLTI1OS4zNzIyMiA5MzMuNjM3OTQsLTI1OS41NzU0NCBDIDkzNS40MDA5NywtMjU5Ljc0Mzg2IDkzOC4wNTgwMywtMjU5LjgwOTczIDkzOS45ODE2OSwtMjU5LjMyNTQ0IEMgOTQwLjMwMTM3LC0yNTkuMjQ0OTYgOTQwLjU4NTIsLTI1OS4xMjE4NSA5NDAuODU2NjksLTI1OS4wMTI5NCBDIDk0Mi44MDk2MiwtMjU4LjIyOTQ1IDk0OC43NjI5NCwtMjU1LjU0NDE5IDk0OC43NjI5NCwtMjU1LjU0NDE5IEMgOTQ4Ljc2MjkyLC0yNTUuNTQ0MTkgOTQyLjE3MTAzLC0yNTguNzk3NjcgOTQxLjMyNTQ0LC0yNTkuMjAwNDQgQyA5NDEuMTIzMjIsLTI1OS4yOTY3NiA5NDAuNzUzMTgsLTI1OS40MDc0NyA5NDAuMjk0MTksLTI1OS41MTI5NCBDIDk0MS41MDgzMywtMjYwLjA4NzIxIDk0NS4zMzc4NSwtMjYwLjYzNTEzIDk0OC4wNzU0NCwtMjYxLjAxMjk0IEMgOTUxLjA4MzgyLC0yNjEuNDI4MTQgOTUxLjM5ODUxLC0yNjEuNDU1NTcgOTUzLjQ1MDQ0LC0yNjEuMzg3OTQgQyA5NTUuNTY4NDIsLTI2MS4zMTgxMyA5NTYuNzYyOTQsLTI2MS4xMzc5NCA5NTYuNzYyOTQsLTI2MS4xMzc5NCBDIDk1Ni43NjI5MiwtMjYxLjEzNzk0IDk1Ni42ODU2OSwtMjYxLjc3NTM1IDk1Ny43OTQxOSwtMjYyLjA0NDE5IEMgOTU4LjUzNzgxLC0yNjIuMjI0NTQgOTYyLjk0NTk1LC0yNjIuNzA3NzQgOTY1LjA3NTQ0LC0yNjIuODg3OTQgQyA5NjcuMTMzOTEsLTI2My4wNjIxMSA5NzAuNDE4NjgsLTI2My4wMTIyNiA5NzIuMzI1NDQsLTI2Mi4yMzE2OSBDIDk3NC4yODAwMywtMjYxLjQzMTUzIDk4MC4yMDA0NCwtMjU4LjcwMDQ0IDk4MC4yMDA0NCwtMjU4LjcwMDQ0IEMgOTgwLjIwMDQyLC0yNTguNzAwNDQgOTczLjY0MDUxLC0yNjIuMDA5MiA5NzIuNzk0MTksLTI2Mi40MTkxOSBDIDk3Mi41OTE4MiwtMjYyLjUxNzI0IDk3Mi4yMjIzMywtMjYyLjYyMjI5IDk3MS43NjI5NCwtMjYyLjczMTY5IEMgOTcyLjk3ODExLC0yNjMuMjk1NTkgOTc2Ljc3MzAyLC0yNjMuODQ1OTkgOTc5LjUxMjk0LC0yNjQuMjAwNDQgQyA5ODIuNTIzODUsLTI2NC41ODk5NiA5ODIuODM0MjUsLTI2NC41OTgwOSA5ODQuODg3OTQsLTI2NC41MTI5NCBDIDk4Ni44MzIzMywtMjY0LjQzMjM0IDk4Ny44OTQ1NywtMjY0LjI1OTcgOTg4LjA3NTQ0LC0yNjQuMjMxNjkgQyA5ODguMTk0NiwtMjY0LjQyMjU1IDk4OC40NTgyMSwtMjY0Ljk3NyA5ODkuMDEyOTQsLTI2NS4xMDY2OSBDIDk4OS43NTcyLC0yNjUuMjgwNjkgOTk0LjE2Mjg3LC0yNjUuNzU3MTYgOTk2LjI5NDE5LC0yNjUuOTE5MTkgQyA5OTguMDYwODEsLTI2Ni4wNTM0NiAxMDAwLjc0MzksLTI2Ni4wNDQ5IDEwMDIuNjY5MiwtMjY1LjU0NDE5IEMgMTAwMi45ODkyLC0yNjUuNDYwOTggMTAwMy4yNzI1LC0yNjUuMzQyOTIgMTAwMy41NDQyLC0yNjUuMjMxNjkgQyAxMDA1LjQ5ODgsLTI2NC40MzE1MyAxMDExLjQ1MDUsLTI2MS42NjkxOSAxMDExLjQ1MDUsLTI2MS42NjkxOSBDIDEwMTEuNDUwNCwtMjYxLjY2OTE5IDEwMDQuODU5MywtMjY1LjAwOTIgMTAwNC4wMTMsLTI2NS40MTkxOSBDIDEwMDMuODEwNiwtMjY1LjUxNzI0IDEwMDMuNDQxMSwtMjY1LjYyMjMgMTAwMi45ODE3LC0yNjUuNzMxNjkgQyAxMDA0LjE5NjgsLTI2Ni4yOTU1OSAxMDA4LjAyMywtMjY2LjgxNDc1IDEwMTAuNzYzLC0yNjcuMTY5MTkgQyAxMDEzLjc3MzksLTI2Ny41NTg3MiAxMDE0LjExNTUsLTI2Ny41OTgwOSAxMDE2LjE2OTIsLTI2Ny41MTI5NCBDIDEwMTguMjg4OSwtMjY3LjQyNTA2IDEwMTkuNDgxNywtMjY3LjIwMDQ0IDEwMTkuNDgxNywtMjY3LjIwMDQ0IEMgMTAxOS40ODE3LC0yNjcuMjAwNDQgMTAxOS40MDMzLC0yNjcuODQ5NDYgMTAyMC41MTMsLTI2OC4xMDY2OSBDIDEwMjEuMjU3MywtMjY4LjI3OTI1IDEwMjUuNjYyNSwtMjY4LjczMDA1IDEwMjcuNzk0MiwtMjY4Ljg4Nzk0IEMgMTAyOS44NTQ4LC0yNjkuMDQwNTQgMTAzMy4xMzcxLC0yNjguOTg0NzEgMTAzNS4wNDQyLC0yNjguMjAwNDQgQyAxMDM2Ljk5OTIsLTI2Ny4zOTY0OSAxMDQyLjkxOTIsLTI2NC43MDA0NCAxMDQyLjkxOTIsLTI2NC43MDA0NCBDIDEwNDIuOTE5MiwtMjY0LjcwMDQ0IDEwMzYuMzU5NCwtMjY3Ljk3NjMxIDEwMzUuNTEzLC0yNjguMzg3OTQgQyAxMDM1LjMxMDUsLTI2OC40ODYzOCAxMDM0Ljk0MTIsLTI2OC41OTAxNiAxMDM0LjQ4MTcsLTI2OC43MDA0NCBDIDEwMzUuNjk3MSwtMjY5LjI2MTk4IDEwMzkuNDkzNiwtMjY5LjgyODIyIDEwNDIuMjMxNywtMjcwLjIwMDQ0IEMgMTA0NS4yNDA3LC0yNzAuNjA5NDkgMTA0NS41NTQ0LC0yNzAuNjE2MDIgMTA0Ny42MDY3LC0yNzAuNTQ0MTkgQyAxMDQ5LjU0OTgsLTI3MC40NzYyIDEwNTAuNjEzOSwtMjcwLjM3OTM0IDEwNTAuNzk0MiwtMjcwLjM1NjY5IEMgMTA1MC45MTMsLTI3MC41NTEwOSAxMDUxLjE3ODgsLTI3MS4wODU1IDEwNTEuNzMxNywtMjcxLjIzMTY5IEMgMTA1Mi40NzM1LC0yNzEuNDI3ODEgMTA1Ni44NjI4LC0yNzIuMDYwNDcgMTA1OC45ODE3LC0yNzIuMzI1NDQgQyAxMDYwLjczODEsLTI3Mi41NDUwNSAxMDYzLjM4NywtMjcyLjY1Nzc1IDEwNjUuMjk0MiwtMjcyLjI5NDE5IEMgMTA2NS42MTExLC0yNzIuMjMzNzggMTA2NS45LC0yNzIuMTA0ODEgMTA2Ni4xNjkyLC0yNzIuMDEyOTQgQyAxMDY4LjEwNTQsLTI3MS4zNTIwMiAxMDc0LjAxMywtMjY5LjA3NTQ0IDEwNzQuMDEzLC0yNjkuMDc1NDQgQyAxMDc0LjAxMjksLTI2OS4wNzU0NCAxMDY3LjQ3NjMsLTI3MS44ODE5OSAxMDY2LjYzOCwtMjcyLjIzMTY5IEMgMTA2Ni40Mzc1LC0yNzIuMzE1MzIgMTA2Ni4wNjE4LC0yNzIuNDA1MDIgMTA2NS42MDY3LC0yNzIuNDgxNjkgQyAxMDY2LjgxMDQsLTI3My4xMzIxNSAxMDcwLjYyNTgsLTI3My44NTM2NCAxMDczLjMyNTUsLTI3NC40ODE2OSBDIDEwNzYuMjkyMiwtMjc1LjE3MTg5IDEwNzYuNjE0NCwtMjc1LjIzNjc2IDEwNzguNjM4LC0yNzUuMzU2NjkgQyAxMDgwLjcyNjYsLTI3NS40ODA0OSAxMDgxLjkxOTIsLTI3NS4zODc5NCAxMDgxLjkxOTIsLTI3NS4zODc5NCBDIDEwODEuOTE5MiwtMjc1LjM4NzkzIDEwODEuODMyMiwtMjc2LjAxOTk5IDEwODIuOTE5MiwtMjc2LjQxOTE5IEMgMTA4My42NDg0LC0yNzYuNjg2OTkgMTA4Ny45NjY0LC0yNzcuNzU3MTYgMTA5MC4wNDQyLC0yNzguMjMxNjkgQyAxMDkyLjA1MjcsLTI3OC42OTAzOCAxMDk1LjIxMjEsLTI3OS4yNjA5OSAxMDk3LjA0NDIsLTI3OC44NTY2OSBDIDEwOTguOTIyMywtMjc4LjQ0MjIzIDExMTAuNjIyNCwtMjc1Ljg0MTA2IDExMTAuNjIyNCwtMjc1Ljg0MTA2IEMgMTExMC42MjI0LC0yNzUuODQxMDYgMTA5OC4yOTQ5LC0yNzguODYzNzIgMTA5Ny40ODE3LC0yNzkuMTA2NjkgQyAxMDk3LjI4NzIsLTI3OS4xNjQ4MSAxMDk2LjkyMzEsLTI3OS4yMTI5NSAxMDk2LjQ4MTcsLTI3OS4yMzE2OSBDIDEwOTcuNjQ5MywtMjgwLjAzNTM4IDEwOTkuOTk1OSwtMjgwLjkxODk5IDExMDIuNTkxMSwtMjgxLjkzNDgxIEMgMTEwNC4yNzI1LC0yODIuNTkyOTkgMTEwMy41MTQ4LC0yODIuMzExNCAxMTA1LjM2NywtMjgyLjkzODQxIEMgMTEwNy4xMjA2LC0yODMuNTMyMDcgMTEwNy44NTI0LC0yODMuOTQ5MTIgMTEwNy45OTc0LC0yODQuMDUxNCBDIDExMDguMzQzNSwtMjg0LjI1NzkxIDExMDcuNjQxNCwtMjg0LjE3MzI4IDExMDcuNDUzMiwtMjg0LjA5MzggeiIKKyAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjczMzMpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenNjc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3Nzc3Njc3Nzc2Nzc3Nzc2Nzc3NzY3Nzc3NzY3Nzc3Njc3NjY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY3Nzc3Njc2Nzc2Nzc3Njc2Nzc2Nzc3NzY3Njc3Njc3NzY3Njc3Njc3Nzc2NzY3NzY3Nzc2NzY3NzY2MiIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE3NSIKKyAgICAgICAgICAgZD0iTSAxMDgyLjYyNSwtMjc1LjEyNSBDIDEwODQuNDk4LC0yNzQuNzMxNTIgMTA4Ny4xMjExLC0yNzMuOTc5NDUgMTA4OC42NTYzLC0yNzMuMTU2MjUgQyAxMDkwLjE5MTUsLTI3Mi4zMzMwNiAxMDkxLjQ3ODUsLTI3Mi4xMDAyNSAxMDk0LjAzMTMsLTI3MC42NTYyNSBDIDEwOTYuNTU3OSwtMjY5LjIyNjk5IDEwOTguODI3MSwtMjY4LjY0OTI5IDExMDEsLTI2OC4xMjUgQyAxMTAzLjM0NzYsLTI2Ny41NTg1OCAxMTA2LjQzNTQsLTI2Ny40MDk3NyAxMTA5Ljg0MzgsLTI2Ni45Mzc1IEMgMTEwOC43NTQ5LC0yNjcuNzc3MjUgMTEwMy4yMzY0LC0yNjguMTA5OTUgMTEwMS40Mzc1LC0yNjguNSBDIDEwOTkuNjM4NiwtMjY4Ljg5MDA2IDEwOTcuNTQzNCwtMjY5LjUxNjE2IDEwOTQuODQzOCwtMjcwLjgxMjUgQyAxMDkyLjE0NDEsLTI3Mi4xMDg4NCAxMDkxLjM0OTQsLTI3Mi42MTE0NiAxMDg5LjAzMTMsLTI3My41IEMgMTA4Ni43MTMxLC0yNzQuMzg4NTQgMTA4NS4wMjY5LC0yNzQuODgzMTQgMTA4Mi42MjUsLTI3NS4xMjUgeiIKKyAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjcyODUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTc3IgorICAgICAgICAgICBkPSJNIDEwNTEuNDY4OCwtMjcwIEMgMTA1My4zNzQxLC0yNjkuNDIyNDEgMTA1NS45OTY5LC0yNjguMzg0MjggMTA1Ny41NjI1LC0yNjcuNDA2MjUgQyAxMDU5LjEyODEsLTI2Ni40MjgyMyAxMDYwLjQ0MjcsLTI2Ni4wNDY0NCAxMDYzLjA2MjUsLTI2NC4yODEyNSBDIDEwNjUuNjU1NSwtMjYyLjUzNDA5IDEwNjguMDQ4NCwtMjYxLjU3MTk4IDEwNzAuMzEyNSwtMjYwLjY4NzUgQyAxMDcyLjc1ODYsLTI1OS43MzE5MyAxMDc1Ljk5NTEsLTI1OS4wMzAzNyAxMDc5LjcxODgsLTI1Ny42MjUgQyAxMDc4LjUyOTIsLTI1OC43NjI4NCAxMDcyLjY1NTcsLTI2MC4zMTE3NSAxMDcwLjc4MTMsLTI2MSBDIDEwNjguOTA2OCwtMjYxLjY4ODI1IDEwNjYuNjk5NSwtMjYyLjU2NjIgMTA2My45MDYzLC0yNjQuMjgxMjUgQyAxMDYxLjExMywtMjY1Ljk5NjI5IDEwNjAuMzMyNywtMjY2LjU2NTE1IDEwNTcuOTY4OCwtMjY3LjY4NzUgQyAxMDU1LjYwNDcsLTI2OC44MDk4NCAxMDUzLjkxMjEsLTI2OS41MjIwNSAxMDUxLjQ2ODgsLTI3MCB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzI4OSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxNzkiCisgICAgICAgICAgIGQ9Ik0gMTAyMC4yMTg4LC0yNjYuODQzNzUgQyAxMDIyLjEzMDcsLTI2Ni4yMDU2NCAxMDI0LjgsLTI2NS4wODgzOSAxMDI2LjM3NSwtMjY0LjAzMTI1IEMgMTAyNy45NTAxLC0yNjIuOTc0MSAxMDI5LjI3MDYsLTI2Mi41MjI1OCAxMDMxLjkwNjMsLTI2MC42MjUgQyAxMDM0LjUxNDksLTI1OC43NDY3OSAxMDM2LjkzNDcsLTI1Ny41OTQ5NyAxMDM5LjIxODgsLTI1Ni41NjI1IEMgMTA0MS42ODY1LC0yNTUuNDQ3MDUgMTA0NC45ODMzLC0yNTQuMzg5MiAxMDQ4Ljc1LC0yNTIuNzE4NzUgQyAxMDQ3LjU0NjcsLTI1My45NDEyOCAxMDQxLjU0NzIsLTI1Ni4wMzI5OCAxMDM5LjY1NjMsLTI1Ni44NDM3NSBDIDEwMzcuNzY1MywtMjU3LjY1NDUyIDEwMzUuNTkxNCwtMjU4LjczNzU0IDEwMzIuNzgxMywtMjYwLjU5Mzc1IEMgMTAyOS45NzExLC0yNjIuNDQ5OTUgMTAyOS4xNTk1LC0yNjMuMDcwNjggMTAyNi43ODEzLC0yNjQuMzEyNSBDIDEwMjQuNDAzLC0yNjUuNTU0MyAxMDIyLjY3MDYsLTI2Ni4yODgxOSAxMDIwLjIxODgsLTI2Ni44NDM3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzI5Myk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxODEiCisgICAgICAgICAgIGQ9Ik0gMTExMC4xNzE5LC0yNjYuODkwNjMgQyAxMTEwLjMyMjcsLTI2Ni44NDIwNyAxMTEwLjg1OTksLTI2Ni4yNTk2MyAxMTEwLjI4MTMsLTI2NS40MDYyNSBDIDExMDkuNDcxMiwtMjY0LjIxMTY2IDExMDQuNTc2NCwtMjYyLjA4MTk2IDExMDEuNzE4OCwtMjYxLjI4MTI1IEMgMTA5OC44NzM5LC0yNjAuNDg0MTMgMTA5NS40Mjg3LC0yNjAuMzAzNTEgMTA5MS4xNTYzLC0yNjEuNjU2MjUgQyAxMDg2Ljg1NDcsLTI2My4wMTgyIDEwODUuNjg2NiwtMjY0LjEyNDk3IDEwODAuNSwtMjY1Ljk2ODc1IEMgMTA4NS4xNjQsLTI2My44NTM1OCAxMDg2LjY5NTMsLTI2Mi4wMTY0MiAxMDkwLjYyNSwtMjYwLjYyNSBDIDEwOTIuMjQ1NywtMjYwLjA1MTEzIDEwOTMuOTkyMSwtMjU5LjY4NTQgMTA5NS42ODc1LC0yNTkuNTkzNzUgQyAxMDk1LjI0MjQsLTI1OS4yNjgxMiAxMDk0LjE1NzIsLTI1OC42MTA0NSAxMDkyLjEyNSwtMjU4IEMgMTA4OS4zMjk1LC0yNTcuMTYwMzEgMTA4NS40NzU5LC0yNTYuNDY2MjIgMTA4My44NzUsLTI1Ni4zNzUgQyAxMDgyLjM2MDQsLTI1Ni4yODg2OCAxMDgwLjczMywtMjU2Ljg4NzQ5IDEwODAuNDM3NSwtMjU3IEMgMTA4MC42MDQyLC0yNTYuODk2OTIgMTA4MC44MTA3LC0yNTYuNjIyNjYgMTA4MC4xODc1LC0yNTUuOTY4NzUgQyAxMDc5LjI4ODIsLTI1NS4wMjUxMiAxMDc0LjA0MDEsLTI1NC4wNDU3NSAxMDcxLjA2MjUsLTI1My43MTg3NSBDIDEwNjguMDk4MiwtMjUzLjM5MzIgMTA2NC41NDA5LC0yNTMuNzM0NzEgMTA2MC4xNTYzLC0yNTUuNjI1IEMgMTA1Ni4xNzgzLC0yNTcuMzM5OTcgMTA1NC44MTczLC0yNTguNTQwMzYgMTA1MC43NSwtMjYwLjM3NSBDIDEwNTAuNzUsLTI2MC4zNzUgMTA1MC43NSwtMjYwLjIxODc1IDEwNTAuNzUsLTI2MC4yMTg3NSBDIDEwNTQuMzkzMSwtMjU4LjEyMzQ2IDEwNTYuMDM0LC0yNTYuMzM1NDggMTA1OS42MjUsLTI1NC42NTYyNSBDIDEwNjEuMzU1MiwtMjUzLjg0NzE2IDEwNjMuMjE2NywtMjUzLjI0NzQ5IDEwNjUuMDMxMywtMjUyLjkzNzUgQyAxMDY0LjQ5NjQsLTI1Mi42NTA3NCAxMDYzLjQ3MzUsLTI1Mi4yMjU5OSAxMDYxLjU5MzgsLTI1MS45MDYyNSBDIDEwNTguNzI0OCwtMjUxLjQxODI5IDEwNTQuNzg0OCwtMjUxLjA5MDExIDEwNTMuMTU2MywtMjUxLjE1NjI1IEMgMTA1Mi4zMDU2LC0yNTEuMTkwNzkgMTA1MS40Mjc3LC0yNTEuMzQwNjIgMTA1MC43NSwtMjUxLjU2MjUgQyAxMDUwLjA2NTIsLTI1MS43NzczOCAxMDQ5LjU2MDMsLTI1Mi4wMDcxNyAxMDQ5LjQzNzUsLTI1Mi4wNjI1IEMgMTA0OS42MDY5LC0yNTEuOTU1MjkgMTA0OS44Njg2LC0yNTEuNjU5NjIgMTA0OS4yMTg4LC0yNTEuMDMxMjUgQyAxMDQ4LjMwOTEsLTI1MC4xNTE2MyAxMDQyLjk3MjcsLTI0OS42OTQ4NyAxMDM5Ljk2ODgsLTI0OS41NjI1IEMgMTAzNi45NzgzLC0yNDkuNDMwNzEgMTAzMy4zNzk5LC0yNTAuMDEzMTMgMTAyOC45Njg4LC0yNTIuMTI1IEMgMTAyNC41Mjc2LC0yNTQuMjUxMjYgMTAyMy4zMjczLC0yNTUuNTI2NiAxMDE4LjA2MjUsLTI1Ny45MDYyNSBDIDEwMjIuNzk2OCwtMjU1LjMwOTIxIDEwMjQuMzQ5LC0yNTMuMjc3MTUgMTAyOC40MDYzLC0yNTEuMTg3NSBDIDEwMzAuMDc5NiwtMjUwLjMyNTY1IDEwMzEuODkxNSwtMjQ5LjY5MzI1IDEwMzMuNjU2MywtMjQ5LjI1IEMgMTAzMy4xOTMsLTI0OS4wMTY2OCAxMDMyLjA2NjksLTI0OC41NjE4NiAxMDI5Ljk2ODgsLTI0OC4zMTI1IEMgMTAyNy4wODI1LC0yNDcuOTY5NTIgMTAyMy4xMzQyLC0yNDcuODE5NjIgMTAyMS41LC0yNDcuOTM3NSBDIDEwMTkuOTUzOCwtMjQ4LjA0OSAxMDE4LjI2ODgsLTI0OC43OTQ0NiAxMDE3Ljk2ODgsLTI0OC45Mzc1IEMgMTAxOC4xMzc5LC0yNDguODE3MjEgMTAxOC4zODI2LC0yNDguNTI3MDIgMTAxNy43NSwtMjQ3LjkzNzUgQyAxMDE2LjgzNzIsLTI0Ny4wODY3NyAxMDExLjUwNTksLTI0Ni42NzUzOCAxMDA4LjUsLTI0Ni41NjI1IEMgMTAwNS41MDc1LC0yNDYuNDUwMTMgMTAwMS45MTAzLC0yNDcuMDUyOTMgOTk3LjUsLTI0OS4xNTYyNSBDIDk5My40OTg3NSwtMjUxLjA2NDQ4IDk5Mi4xMTE5NywtMjUyLjI5NDA4IDk4OC4wMzEyNSwtMjU0LjI1IEMgOTg4LjAzMTIyLC0yNTQuMjUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgOTg4LjAzMTI1LC0yNTQuMDkzNzUgQyA5OTEuNjg2MzEsLTI1MS44ODk4MyA5OTMuMzI1NDYsLTI1MC4wNDEyIDk5Ni45Mzc1LC0yNDguMTg3NSBDIDk5OC42Nzc3OSwtMjQ3LjI5NDM1IDEwMDAuNTc0NSwtMjQ2LjY1OTIzIDEwMDIuNDA2MywtMjQ2LjIxODc1IEMgMTAwMS44NjYzLC0yNDUuOTcwNDUgMTAwMC44MjgyLC0yNDUuNjAzNDIgOTk4LjkzNzUsLTI0NS4zNzUgQyA5OTYuMDUxODIsLTI0NS4wMjY0MiA5OTIuMDcxNDUsLTI0NC44NTQwNSA5OTAuNDM3NSwtMjQ0Ljk2ODc1IEMgOTg5LjU4NDA1LC0yNDUuMDI4NjUgOTg4LjcxMTE5LC0yNDUuMjI2NjYgOTg4LjAzMTI1LC0yNDUuNDY4NzUgQyA5ODcuMzQ0MTUsLTI0NS43MDQwNSA5ODYuODQxOSwtMjQ1Ljk0MTAxIDk4Ni43MTg3NSwtMjQ2IEMgOTg2Ljg4ODczLC0yNDUuODg3NzMgOTg3LjE4MzIzLC0yNDUuNTc3NzUgOTg2LjUzMTI1LC0yNDQuOTY4NzUgQyA5ODUuNjE4NiwtMjQ0LjExNjI1IDk4MC4yNTU5MiwtMjQzLjY3NTM4IDk3Ny4yNSwtMjQzLjU2MjUgQyA5NzQuMjU3NTQsLTI0My40NTAxMyA5NzAuNjU2NTQsLTI0NC4wOTA1NSA5NjYuMjUsLTI0Ni4xNTYyNSBDIDk2MS44MTM0NywtMjQ4LjIzNjAzIDk2MC42MDMxMiwtMjQ5LjQ4Nzk2IDk1NS4zNDM3NSwtMjUxLjgxMjUgQyA5NjAuMDczMTMsLTI0OS4yNjUwMSA5NjEuNjM0NDksLTI0Ny4yMzQ3IDk2NS42ODc1LC0yNDUuMTg3NSBDIDk2Ny4zNTkwNSwtMjQ0LjM0MzE3IDk2OS4xNzMwNCwtMjQzLjcyMTA3IDk3MC45Mzc1LC0yNDMuMjgxMjUgQyA5NzAuNDc0MjcsLTI0My4wNDcwMyA5NjkuMzQ3OCwtMjQyLjU5NzE4IDk2Ny4yNSwtMjQyLjM0Mzc1IEMgOTY0LjM2NDMxLC0yNDEuOTk1MTcgOTYwLjQxMzgsLTI0MS43NzQyMyA5NTguNzgxMjUsLTI0MS44NzUgQyA5NTcuMjM2NjksLTI0MS45NzAzMiA5NTUuNTgwOTQsLTI0Mi43MDM4NSA5NTUuMjgxMjUsLTI0Mi44NDM3NSBDIDk1NS40NTAyNCwtMjQyLjcyNTIyIDk1NS42NjMxNywtMjQyLjQzOTkgOTU1LjAzMTI1LC0yNDEuODQzNzUgQyA5NTQuMTE5MzksLTI0MC45ODM0NyA5NDguNzg0NiwtMjQwLjUxMzUgOTQ1Ljc4MTI1LC0yNDAuMzc1IEMgOTQyLjc5MTMsLTI0MC4yMzcxIDkzOS4yMTM4LC0yNDAuODI1NjggOTM0LjgxMjUsLTI0Mi44NDM3NSBDIDkzMC44MTk0MiwtMjQ0LjY3NDY0IDkyOS40NDczOSwtMjQ1Ljg3Mjk1IDkyNS4zNzUsLTI0Ny43NSBDIDkyNS4zNzQ5OCwtMjQ3Ljc1IDkyNS4zNzUsLTI0Ny41OTM3NSA5MjUuMzc1LC0yNDcuNTkzNzUgQyA5MjkuMDIyNjEsLTI0NS40NjA0OCA5MzAuNjQ1MzMsLTI0My42NTg4OCA5MzQuMjUsLTI0MS44NzUgQyA5MzUuOTg2NzUsLTI0MS4wMTU0OSA5MzcuODU3MjcsLTI0MC40MjQ4NiA5MzkuNjg3NSwtMjQwIEMgOTM5LjE0ODAzLC0yMzkuNzQ3MSA5MzguMTM2ODcsLTIzOS4zNTg3MSA5MzYuMjUsLTIzOS4wOTM3NSBDIDkzMy4zNzAyMiwtMjM4LjY4OTM5IDkyOS40MTE4NywtMjM4LjQ0ODEzIDkyNy43ODEyNSwtMjM4LjUzMTI1IEMgOTI2LjkyOTUzLC0yMzguNTc0NjYgOTI2LjA1MzU1LC0yMzguNzM5OCA5MjUuMzc1LC0yMzguOTY4NzUgQyA5MjQuNjg5MzEsLTIzOS4xOTA3NiA5MjQuMTg1NCwtMjM5LjQxMjE0IDkyNC4wNjI1LC0yMzkuNDY4NzUgQyA5MjQuMjMyMDksLTIzOS4zNTk3NiA5MjQuNDk0NCwtMjM5LjA1OTEgOTIzLjg0Mzc1LC0yMzguNDM3NSBDIDkyMi45MzI5NiwtMjM3LjU2NzM2IDkxNy41OTM1NCwtMjM3LjA0NTk4IDkxNC41OTM3NSwtMjM2Ljg3NSBDIDkxMS42MDc0MiwtMjM2LjcwNDc5IDkwOC4wMTk5NCwtMjM3LjE5MDc3IDkwMy42MjUsLTIzOS4xNTYyNSBDIDg5OS4yMDAxMSwtMjQxLjEzNTEzIDg5OC4wMTkwNCwtMjQyLjM4NDQ0IDg5Mi43ODEyNSwtMjQ0LjUzMTI1IEMgODk3LjQ5MTIyLC0yNDIuMTQzNTggODk5LjA1MTQyLC0yNDAuMTQyNTIgOTAzLjA5Mzc1LC0yMzguMTg3NSBDIDkwNC43NjA5LC0yMzcuMzgxMTkgOTA2LjU1NDE4LC0yMzYuNzkwOTIgOTA4LjMxMjUsLTIzNi40MDYyNSBDIDkwNy44NTA4NywtMjM2LjE1NzU1IDkwNi43MTU1LC0yMzUuNjk0IDkwNC42MjUsLTIzNS4zNzUgQyA5MDEuNzQ5NCwtMjM0LjkzNjI0IDg5Ny44NDQ2LC0yMzQuNjQxOSA4OTYuMjE4NzUsLTIzNC42ODc1IEMgODk0LjY4MDUyLC0yMzQuNzMwNjIgODkyLjk4NTk1LC0yMzUuNDMyNzIgODkyLjY4NzUsLTIzNS41NjI1IEMgODkyLjg1NTgzLC0yMzUuNDQ5NjggODkzLjA5ODA3LC0yMzUuMTQ4NzUgODkyLjQ2ODc1LC0yMzQuNTMxMjUgQyA4OTEuNTYwNjMsLTIzMy42NDAxNSA4ODYuMjY1OCwtMjMzLjAwMyA4ODMuMjgxMjUsLTIzMi43MTg3NSBDIDg4MC4zMTAwNywtMjMyLjQzNTc3IDg3Ni43MDc4MywtMjMyLjg5NDU1IDg3Mi4zNDM3NSwtMjM0LjY1NjI1IEMgODY4LjM4NDQxLC0yMzYuMjU0NTYgODY3LjAxNDYsLTIzNy40NTExMiA4NjMsLTIzOC45Njg3NSBDIDg2My4wMDAwMywtMjM4Ljk2ODc1IDg2MywtMjM4LjgxMjUgODYzLC0yMzguODEyNSBDIDg2Ni41OTU5LC0yMzcuMDAxMTUgODY4LjIzODMxLC0yMzUuMjMwMTcgODcxLjgxMjUsLTIzMy42NTYyNSBDIDg3My41MzQ1NywtMjMyLjg5NzkgODc1LjM5OTk4LC0yMzIuMzY3MyA4NzcuMjE4NzUsLTIzMi4wMzEyNSBDIDg3Ni42ODI2NiwtMjMxLjc1MjE3IDg3NS42NTIxNywtMjMxLjM0MzYyIDg3My43ODEyNSwtMjMwLjk2ODc1IEMgODcwLjkyNTg2LC0yMzAuMzk2NjUgODY2Ljk5MTgzLC0yMjkuOTQ5MzYgODY1LjM3NSwtMjI5LjkzNzUgQyA4NjQuNTMwNDksLTIyOS45MzEyOSA4NjMuNjY4OTIsLTIzMC4wMTg0NCA4NjMsLTIzMC4xODc1IEMgODYyLjMyNDA5LC0yMzAuMzQ5MDEgODYxLjgzOTkxLC0yMzAuNTE2NzMgODYxLjcxODc1LC0yMzAuNTYyNSBDIDg2MS44ODU5NywtMjMwLjQ2ODQ4IDg2Mi4xNDE0MiwtMjMwLjE3OTAyIDg2MS41LC0yMjkuNSBDIDg2MC42MDIxMywtMjI4LjU0OTQ4IDg1NS4zMTM1MiwtMjI3LjU4MjkyIDg1Mi4zNzUsLTIyNy4wNjI1IEMgODQ5LjQ0OTY2LC0yMjYuNTQ0NDEgODQ1Ljk0Mjg1LC0yMjYuNjg4MjYgODQxLjY1NjI1LC0yMjguMDkzNzUgQyA4MzcuMzQwNDUsLTIyOS41MDg4MiA4MzYuMTgzNDgsLTIzMC42MjM2OSA4MzEuMDkzNzUsLTIzMi4wNjI1IEMgODM1LjY3MDYsLTIzMC4zMTE0OSA4MzcuMTgyMywtMjI4LjUwMjQ0IDg0MS4xMjUsLTIyNy4wNjI1IEMgODQyLjc1MTA4LC0yMjYuNDY4NjEgODQ0LjQ5Mzg1LC0yMjYuMTA2ODUgODQ2LjIxODc1LC0yMjUuOTA2MjUgQyA4NDUuNzY1OSwtMjI1LjYwOTIzIDg0NC42NjM5NywtMjI1LjAyMjg2IDg0Mi42MjUsLTIyNC40Mzc1IEMgODM5LjgyMDI4LC0yMjMuNjMyMzMgODM1Ljk4NjE0LC0yMjIuODYxNjcgODM0LjQwNjI1LC0yMjIuNjg3NSBDIDgzMi45MTE1LC0yMjIuNTIyNyA4MzEuMjkwMDIsLTIyMy4wMDQzMSA4MzEsLTIyMy4wOTM3NSBDIDgzMS4xNjM1NiwtMjIzLjAwMzY4IDgzMS4zOTI3OCwtMjIyLjczMzgyIDgzMC43ODEyNSwtMjIyLjAzMTI1IEMgODI5Ljg5ODc4LC0yMjEuMDE3NCA4MjQuNzM2NzMsLTIxOS42NTk2IDgyMS44NDM3NSwtMjE4Ljk2ODc1IEMgODE4Ljk2MzczLC0yMTguMjgwOTcgODE1LjUwODE1LC0yMTguMjA4NzMgODExLjI4MTI1LC0yMTkuNDA2MjUgQyA4MDcuNDQ2NCwtMjIwLjQ5MjcgODA2LjEwODY3LC0yMjEuNDc4NjIgODAyLjIxODc1LC0yMjIuNTMxMjUgQyA4MDIuMjE4NzQsLTIyMi41MzEyNSA4MDIuMjE4NzUsLTIyMi4zNzUgODAyLjIxODc1LC0yMjIuMzc1IEMgODA1LjcwMjkzLC0yMjAuOTgwMTUgODA3LjI4ODE2LC0yMTkuNDU1NiA4MTAuNzUsLTIxOC4zNDM3NSBDIDgxMi40MTc5MywtMjE3LjgwODAzIDgxNC4yMDU3OCwtMjE3LjU1NzAxIDgxNS45Njg3NSwtMjE3LjQ2ODc1IEMgODE1LjQ0OTExLC0yMTcuMTE2NjMgODE0LjQ2ODM2LC0yMTYuNTU0MjMgODEyLjY1NjI1LC0yMTUuOTM3NSBDIDgwOS44OTA1OSwtMjE0Ljk5NjI1IDgwNi4wNjYwMSwtMjE0LjAwMjEzIDgwNC41LC0yMTMuNzgxMjUgQyA4MDMuNjgyMDYsLTIxMy42NjU4NiA4MDIuODY2OSwtMjEzLjY1ODQyIDgwMi4yMTg3NSwtMjEzLjc1IEMgODAxLjU2Mzc5LC0yMTMuODMzMjEgODAxLjA4NjE1LC0yMTMuOTY4MjcgODAwLjk2ODc1LC0yMTQgQyA4MDEuMTMwNzksLTIxMy45MjUzNiA4MDEuNDAyNzQsLTIxMy42NTk1NiA4MDAuNzgxMjUsLTIxMi45MDYyNSBDIDc5OS45MTEyNSwtMjExLjg1MTcyIDc5NC43NzE2MiwtMjEwLjI0NyA3OTEuOTA2MjUsLTIwOS40Njg3NSBDIDc4OS4wNTM3MiwtMjA4LjY5Mzk5IDc4NS42NDcxMywtMjA4LjUxMDU1IDc4MS40Njg3NSwtMjA5LjU2MjUgQyA3NzcuMjYxOTIsLTIxMC42MjE2MyA3NzYuMTEyMDYsLTIxMS42MDQxNiA3NzEuMTI1LC0yMTIuNzE4NzUgQyA3NzUuNjA5NTQsLTIxMS4yNTkyOSA3NzcuMDk0MzUsLTIwOS41ODM1MiA3ODAuOTM3NSwtMjA4LjQ2ODc1IEMgNzgyLjUyMjU0LC0yMDguMDA4OTggNzg0LjIyNDI5LC0yMDcuODMwNSA3ODUuOTA2MjUsLTIwNy43ODEyNSBDIDc4NS40NjQ2OCwtMjA3LjQ0NDQ5IDc4NC4zOTM3NCwtMjA2Ljc1MzUyIDc4Mi40MDYyNSwtMjA2IEMgNzc5LjY3MjMyLC0yMDQuOTYzNTEgNzc1Ljk1NDI3LC0yMDMuODM3MzEgNzc0LjQwNjI1LC0yMDMuNTYyNSBDIDc3Mi45NDE2MywtMjAzLjMwMjQ4IDc3MS4zNDY2NywtMjAzLjY3OTA0IDc3MS4wNjI1LC0yMDMuNzUgQyA3NzEuMjIyNzUsLTIwMy42NzAzNSA3NzEuNDQyOTQsLTIwMy40MjkwMiA3NzAuODQzNzUsLTIwMi42ODc1IEMgNzY5Ljk3OTA5LC0yMDEuNjE3NDQgNzY0LjkyNzIzLC0xOTkuODY5MzUgNzYyLjA5Mzc1LC0xOTkgQyA3NTkuMjcyOTUsLTE5OC4xMzQ1MyA3NTUuODg2MjUsLTE5Ny44NDM2OSA3NTEuNzUsLTE5OC43ODEyNSBDIDc0Ny45OTc0MSwtMTk5LjYzMTg2IDc0Ni43MDIxNSwtMjAwLjQ5NzcyIDc0Mi44NzUsLTIwMS4zNzUgQyA3NDIuODc1LC0yMDEuMzc1IDc0Mi44NzUsLTIwMS4yMTg3NSA3NDIuODc1LC0yMDEuMjE4NzUgQyA3NDYuMzAyOTYsLTE5OS45ODA5NiA3NDcuODYyNDEsLTE5OC41ODY0NSA3NTEuMjUsLTE5Ny42ODc1IEMgNzUyLjg4MjE2LC0xOTcuMjU0MzYgNzU0LjYxNzA0LC0xOTcuMTA0NDkgNzU2LjM0Mzc1LC0xOTcuMTI1IEMgNzU1LjgzNDgyLC0xOTYuNzQwODMgNzU0Ljg2NywtMTk2LjEwMzE4IDc1My4wOTM3NSwtMTk1LjM3NSBDIDc1MC4zODc0MSwtMTk0LjI2MzY2IDc0Ni42NTc0MiwtMTkzLjA2NzE5IDc0NS4xMjUsLTE5Mi43NSBDIDc0NC4zMjQ2LC0xOTIuNTg0MzEgNzQzLjUxMjY5LC0xOTIuNTMxMzggNzQyLjg3NSwtMTkyLjU5Mzc1IEMgNzQyLjg3NSwtMTkyLjU5Mzc1IDc0Mi44NzUsLTE5Mi4wNzgyMyA3NDIuODc1LC0xOTEuNjcxNDYgQyA3NDIuODc1LC0xOTEuNDA2MzkgNzQyLjg3NSwtMTkxLjE4NzUgNzQyLjg3NSwtMTkxLjE4NzUgQyA3NDMuMTAxNDUsLTE5MS4zMzIxOCA3NDMuMzIzOTEsLTE5MS40NjAxMSA3NDMuNTkzNzUsLTE5MS41NjI1IEMgNzQ0LjY3NDI3LC0xOTEuOTcyNDggNzQ1Ljc2NTM2LC0xOTEuNzc4MjcgNzQ5LjU5Mzc1LC0xOTMuMjUgQyA3NTMuNDIyMTgsLTE5NC43MjE3NCA3NTQuODE3ODcsLTE5NS4yNTQ5OCA3NTUuNSwtMTk1LjY1NjI1IEMgNzU2LjE3OTYsLTE5Ni4wNTYwMyA3NTcuMTExNjUsLTE5Ni41MzU2MiA3NTcuNzE4NzUsLTE5Ny4xODc1IEMgNzU5LjU0NTYsLTE5Ny4zMjUyNSA3NjEuMjg5NSwtMTk3LjY4MDczIDc2Mi42NTYyNSwtMTk4LjE4NzUgQyA3NjUuNjI0MzcsLTE5OS4yODgwMiA3NjcuNTMxNjIsLTE5OS45OTM2OSA3NjkuNDM3NSwtMjAwLjY1NjI1IEMgNzcxLjM0MzM2LC0yMDEuMzE4NzkgNzcxLjc5MTU5LC0yMDIuMDcxMTIgNzcyLjg0Mzc1LC0yMDIuNDM3NSBDIDc3My45MzUzLC0yMDIuODE3NjEgNzc1LjAzODg2LC0yMDIuNjAyODggNzc4LjkwNjI1LC0yMDMuOTY4NzUgQyA3ODIuNzczNywtMjA1LjMzNDYxIDc4NC4xODk0MSwtMjA1Ljc5NTgzIDc4NC44NzUsLTIwNi4xODc1IEMgNzg1LjU3NjA5LC0yMDYuNTg4MDIgNzg2LjU3NTgxLC0yMDcuMTIwNDggNzg3LjE4NzUsLTIwNy43ODEyNSBDIDc4OS4xNTgzLC0yMDcuODM1OTEgNzkxLjAwNDM1LC0yMDguMTY1ODggNzkyLjQ2ODc1LC0yMDguNjU2MjUgQyA3OTUuNDcwMjMsLTIwOS42NjEzMyA3OTcuMzk0OSwtMjEwLjI3Nzk2IDc5OS4zMTI1LC0yMTAuOTA2MjUgQyA4MDAuODUxMSwtMjExLjQxMDM1IDgwMS40ODY1MiwtMjExLjk1MzAyIDgwMi4yMTg3NSwtMjEyLjM0Mzc1IEMgODAyLjQ0ODkxLC0yMTIuNDc4MDYgODAyLjY5NDQ5LC0yMTIuNTk3NDggODAyLjk2ODc1LC0yMTIuNjg3NSBDIDgwNC4wNjY5OCwtMjEzLjA0Nzk4IDgwNS4xNTAyLC0yMTIuNzY4ODcgODA5LjA2MjUsLTIxNCBDIDgxMi45NzQ4MywtMjE1LjIzMTEzIDgxNC40Mjg1NSwtMjE1LjY3Mjk1IDgxNS4xMjUsLTIxNi4wMzEyNSBDIDgxNS44MTg4OCwtMjE2LjM4ODIyIDgxNi43NTUxNSwtMjE2LjgyMzg2IDgxNy4zNzUsLTIxNy40Mzc1IEMgODE5LjI0MDIxLC0yMTcuNDYwMTYgODIxLjAxMDgxLC0yMTcuNzA0MzMgODIyLjQwNjI1LC0yMTguMTI1IEMgODI1LjQzNjY4LC0yMTkuMDM4NTQgODI3LjM5ODYzLC0yMTkuNTU1MSA4MjkuMzQzNzUsLTIyMC4wOTM3NSBDIDgzMS4yODg4NiwtMjIwLjYzMjM5IDgzMS43Njk5MywtMjIxLjM1ODI3IDgzMi44NDM3NSwtMjIxLjY1NjI1IEMgODMzLjk1Nzc2LC0yMjEuOTY1NCA4MzUuMDYzNjksLTIyMS42NDg4NiA4MzkuMDMxMjUsLTIyMi42ODc1IEMgODQyLjk5ODg2LC0yMjMuNzI2MTMgODQ0LjQ0ODgzLC0yMjQuMTIwMjMgODQ1LjE1NjI1LC0yMjQuNDM3NSBDIDg0NS44OTExMiwtMjI0Ljc2NzA5IDg0Ni45NzAwOCwtMjI1LjE5MTIyIDg0Ny41OTM3NSwtMjI1LjgxMjUgQyA4NDkuNTkxNDksLTIyNS42OTY1IDg1MS40NTExOCwtMjI1LjgzMjU5IDg1Mi45Mzc1LC0yMjYuMTg3NSBDIDg1Ni4wMTU2MSwtMjI2LjkyMjUgODU4LjAyMDk0LC0yMjcuMjg4NDQgODYwLC0yMjcuNjg3NSBDIDg2MS41ODc5MiwtMjI4LjAwNzY4IDg2Mi4yNDQyOSwtMjI4LjQ3ODA1IDg2MywtMjI4Ljc4MTI1IEMgODYzLjIzNzU3LC0yMjguODg4MDUgODYzLjQ2Njk1LC0yMjguOTc0MDEgODYzLjc1LC0yMjkuMDMxMjUgQyA4NjQuODgzNDcsLTIyOS4yNjA0NCA4NjYuMDU0NDgsLTIyOC44MjIzMiA4NzAuMDkzNzUsLTIyOS41MzEyNSBDIDg3NC4xMzMwOCwtMjMwLjI0MDE4IDg3NS41OTQsLTIzMC40NTgzNCA4NzYuMzEyNSwtMjMwLjcxODc1IEMgODc3LjAyODM2LC0yMzAuOTc4MTkgODc4LjAxNjc4LC0yMzEuMjg1OTkgODc4LjY1NjI1LC0yMzEuODEyNSBDIDg4MC41ODA1MiwtMjMxLjU3MzAxIDg4Mi40MDQxMywtMjMxLjU4Nzk3IDg4My44NDM3NSwtMjMxLjgxMjUgQyA4ODYuOTcwMDgsLTIzMi4zMDAxMiA4ODguOTk4MywtMjMyLjUxMzE3IDg5MSwtMjMyLjc4MTI1IEMgODkzLjAwMTcxLC0yMzMuMDQ5MzIgODkzLjQ4ODY5LC0yMzMuNzI2MzkgODk0LjU5Mzc1LC0yMzMuODc1IEMgODk1Ljc0MDE0LC0yMzQuMDI5MTggODk2Ljg2OTY3LC0yMzMuNTczNDMgOTAwLjkzNzUsLTIzNC4wOTM3NSBDIDkwNS4wMDUzNCwtMjM0LjYxNDA3IDkwNi40OTc2MywtMjM0Ljc4OTQ4IDkwNy4yMTg3NSwtMjM1LjAzMTI1IEMgOTA3Ljk1NTg1LC0yMzUuMjc4MzkgOTA5LjAxNjg0LC0yMzUuNjE3NDggOTA5LjY1NjI1LC0yMzYuMTU2MjUgQyA5MTEuNzA2MzIsLTIzNS44MjA3MiA5MTMuNjMwMDMsLTIzNS43NTgyOSA5MTUuMTU2MjUsLTIzNS45Mzc1IEMgOTE4LjI5ODU2LC0yMzYuMzA2NDYgOTIwLjMzNjE5LC0yMzYuNDk2ODYgOTIyLjM0Mzc1LC0yMzYuNzE4NzUgQyA5MjMuOTU0NTEsLTIzNi44OTY3NyA5MjQuNjA4NDIsLTIzNy4zMjY5NSA5MjUuMzc1LC0yMzcuNTYyNSBDIDkyNS42MTU5NCwtMjM3LjY0ODAyIDkyNS44NjkxMiwtMjM3LjcxODEgOTI2LjE1NjI1LC0yMzcuNzUgQyA5MjcuMzA2MDMsLTIzNy44Nzc3MiA5MjguNDU3NTQsLTIzNy40MDMzNSA5MzIuNTMxMjUsLTIzNy44NzUgQyA5MzYuNjA0OTksLTIzOC4zNDY2NSA5MzguMDkwMzQsLTIzOC40ODU2IDkzOC44MTI1LC0yMzguNzE4NzUgQyA5MzkuNTMxOTYsLTIzOC45NTEwMiA5NDAuNTEyNzQsLTIzOS4xOTIyMSA5NDEuMTU2MjUsLTIzOS42ODc1IEMgOTQzLjA5MjYyLC0yMzkuMzU0MDQgOTQ0LjkyNjMxLC0yMzkuMjgzMjYgOTQ2LjM3NSwtMjM5LjQzNzUgQyA5NDkuNTIxMDIsLTIzOS43NzI0NSA5NTEuNTUyNTYsLTIzOS45NTYwOSA5NTMuNTYyNSwtMjQwLjE1NjI1IEMgOTU1LjU3MjQ2LC0yNDAuMzU2MzkgOTU2LjA0NjY0LC0yNDAuOTgyNjQgOTU3LjE1NjI1LC0yNDEuMDkzNzUgQyA5NTguMzA3MzksLTI0MS4yMDkwMyA5NTkuNDUyNjgsLTI0MC43Mjg2OSA5NjMuNTMxMjUsLTI0MS4xNTYyNSBDIDk2Ny42MDk4NiwtMjQxLjU4MzgxIDk2OS4xMjAxMSwtMjQxLjcxODM0IDk2OS44NDM3NSwtMjQxLjkzNzUgQyA5NzAuNTgyOSwtMjQyLjE2MTM2IDk3MS42Mzk0NywtMjQyLjQ1MDc1IDk3Mi4yODEyNSwtMjQyLjk2ODc1IEMgOTc0LjMzODM1LC0yNDIuNTcwMDggOTc2LjI4MzEyLC0yNDIuNDc1MzUgOTc3LjgxMjUsLTI0Mi42MjUgQyA5ODAuOTYxMjMsLTI0Mi45MzMxIDk4Mi45ODgzNCwtMjQzLjA5ODI1IDk4NSwtMjQzLjI4MTI1IEMgOTg2LjYxNDA3LC0yNDMuNDI4MDcgOTg3LjI2MzEsLTI0My44NDE4IDk4OC4wMzEyNSwtMjQ0LjA2MjUgQyA5ODguMjcyNjcsLTI0NC4xNDMzNiA5ODguNTI0NzgsLTI0NC4xOTI0MSA5ODguODEyNSwtMjQ0LjIxODc1IEMgOTg5Ljk2NDYxLC0yNDQuMzI0MiA5OTEuMTA1NDYsLTI0My44MjYgOTk1LjE4NzUsLTI0NC4yMTg3NSBDIDk5OS4yNjk1OCwtMjQ0LjYxMTUgMTAwMC43NzY0LC0yNDQuNzQ5NTkgMTAwMS41LC0yNDQuOTY4NzUgQyAxMDAyLjIyMDksLTI0NS4xODcwOCAxMDAzLjE5OTcsLTI0NS40MTY0NSAxMDAzLjg0MzgsLTI0NS45MDYyNSBDIDEwMDUuNzgxOCwtMjQ1LjU1NjI2IDEwMDcuNjEyNiwtMjQ1LjQ1MTg3IDEwMDkuMDYyNSwtMjQ1LjU5Mzc1IEMgMTAxMi4yMTEyLC0yNDUuOTAxODUgMTAxNC4yMzgzLC0yNDYuMDY3IDEwMTYuMjUsLTI0Ni4yNSBDIDEwMTguMjYxNiwtMjQ2LjQzMjk5IDEwMTguNzY0MiwtMjQ3LjA4ODAyIDEwMTkuODc1LC0yNDcuMTg3NSBDIDEwMjEuMDI3MywtMjQ3LjI5MDczIDEwMjIuMTY3MiwtMjQ2LjgwMjY3IDEwMjYuMjUsLTI0Ny4xODc1IEMgMTAzMC4zMzI5LC0yNDcuNTcyMzIgMTAzMS44Mzg3LC0yNDcuNjg4NSAxMDMyLjU2MjUsLTI0Ny45MDYyNSBDIDEwMzMuMzAxOCwtMjQ4LjEyODY4IDEwMzQuMzU4MSwtMjQ4LjQyMDc0IDEwMzUsLTI0OC45Mzc1IEMgMTAzNy4wNTc0LC0yNDguNTM1NzMgMTAzOS4wMDI5LC0yNDguNDM0MTcgMTA0MC41MzEzLC0yNDguNTkzNzUgQyAxMDQzLjY3NzksLTI0OC45MjIyNyAxMDQ1LjcwODQsLTI0OS4xMTY0NSAxMDQ3LjcxODgsLTI0OS4zMTI1IEMgMTA0OS4zMzE4LC0yNDkuNDY5NzkgMTA0OS45ODQ0LC0yNDkuOTQzOTggMTA1MC43NSwtMjUwLjE4NzUgQyAxMDUwLjk5MDcsLTI1MC4yNzU1NCAxMDUxLjIxMzIsLTI1MC4zMDg4NyAxMDUxLjUsLTI1MC4zNDM3NSBDIDEwNTIuNjQ4MywtMjUwLjQ4MzQ1IDEwNTMuODE2NywtMjUwLjAwMzg0IDEwNTcuODc1LC0yNTAuNTkzNzUgQyAxMDYxLjkzMzMsLTI1MS4xODM2NyAxMDYzLjQzNjgsLTI1MS4zNzA4OSAxMDY0LjE1NjMsLTI1MS42MjUgQyAxMDY0Ljg3MywtMjUxLjg3ODE2IDEwNjUuODMwOCwtMjUyLjE4MzA3IDEwNjYuNDY4OCwtMjUyLjcxODc1IEMgMTA2OC4zODg1LC0yNTIuNTA2ODEgMTA3MC4xODg3LC0yNTIuNTY3MzQgMTA3MS42MjUsLTI1Mi44MTI1IEMgMTA3NC43NDQxLC0yNTMuMzQ0OSAxMDc2LjczNjYsLTI1My43NDExMSAxMDc4LjcxODgsLTI1NC4xMjUgQyAxMDgwLjcwMDksLTI1NC41MDg4NyAxMDgxLjE5MzEsLTI1NS4xNjQ2NSAxMDgyLjI4MTMsLTI1NS40MDYyNSBDIDEwODMuNDEwMSwtMjU1LjY1NjkxIDEwODQuNTUxNiwtMjU1LjI4OTk2IDEwODguNTMxMywtMjU2LjI4MTI1IEMgMTA5Mi41MTA5LC0yNTcuMjcyNTMgMTA5My45NjA5LC0yNTcuNzAwNTUgMTA5NC42NTYzLC0yNTguMDYyNSBDIDEwOTUuMzc4NiwtMjU4LjQzODUxIDEwOTYuNDE4MiwtMjU4LjkzMzA4IDEwOTcuMDMxMywtMjU5LjU5Mzc1IEMgMTA5OC45OTQzLC0yNTkuNjA1OCAxMTAwLjgyNSwtMjU5Ljg4NDggMTEwMi4yNSwtMjYwLjQzNzUgQyAxMTA1LjIwMTIsLTI2MS41ODIxMSAxMTA3LjEyMzIsLTI2Mi4zMDY5MiAxMTA4LjkzNzUsLTI2My4xODc1IEMgMTExMC4zOTMyLC0yNjMuODk0MDMgMTExMS4yNzIzLC0yNjQuODczOTEgMTExMS40ODQ0LC0yNjUuMTcxODggQyAxMTExLjY5NjYsLTI2NS40Njk4NCAxMTExLjU5NjIsLTI2NS45MTcxOCAxMTExLjYyMjMsLTI2NS45Mzg2MyBDIDExMTEuNjY1MiwtMjY1Ljk3Mzg3IDExMTEuOTQxNiwtMjY2LjAyMzYgMTExMi4xMDEzLC0yNjYuMzY3MDcgQyAxMTEyLjk2MDIsLTI2OC4yMTQxNSAxMTE0LjQyMjMsLTI3Mi4wMTE2NiAxMTE0LjUzNjUsLTI3Mi42OTY1MiBDIDExMTQuNjUwMiwtMjczLjM3ODY4IDExMTQuNzAwMywtMjc0LjA0NDI2IDExMTQuNzUxLC0yNzQuNDQxNDkgQyAxMTE0Ljc4MDQsLTI3NC42NzEwMSAxMTE0LjYwNDMsLTI3NS4zMDY5MyAxMTE0LjYyNjQsLTI3NS4zNjU1MyBDIDExMTQuNjU3MywtMjc1LjQ0NzU5IDExMTQuOTMwOSwtMjc1LjYzMDgxIDExMTQuOTg2MywtMjc1Ljg4MDI0IEMgMTExNS4yNTI2LC0yNzcuMDc4NTcgMTExNS4wNzUyLC0yNzguMDcxNTMgMTExNC44NjEyLC0yNzkuNDg5MTcgQyAxMTE0LjY0NzIsLTI4MC45MDY4MSAxMTEzLjg3NzUsLTI4NC4xMTEzMSAxMTEzLjIyNDMsLTI4NC45NjU0MyBDIDExMTIuNTY1NCwtMjg1LjgyNzE1IDExMTIuMDAxNCwtMjg1Ljk3NjYgMTExMS40NzY0LC0yODUuOTY2MDkgQyAxMTExLjI2NzgsLTI4NS42OTYzMyAxMTExLjYxMzIsLTI4NS43MDMgMTExMS42MzksLTI4NS42NTM0OCBDIDExMTIuMzE5NiwtMjg1LjYwMjY5IDExMTIuNTczLC0yODUuMjg0ODQgMTExMy4wNTgyLC0yODQuNzU2ODYgQyAxMTEzLjU0MzQsLTI4NC4yMjg4OCAxMTE0LjI4LC0yODAuOTA1NjkgMTExNC40MTY2LC0yNzkuNDU1MyBDIDExMTQuNTUzMiwtMjc4LjAwNDkxIDExMTQuNjA2NiwtMjc2LjU5NTEgMTExNC4zMjg2LC0yNzUuOTg2NjYgQyAxMTE0LjA1MDUsLTI3NS4zNzgyMSAxMTEzLjYwNTQsLTI3NS40Njk2MyAxMTEzLjMxMywtMjc1LjQwMzc1IEMgMTExMy44NDQsLTI3NS4yMTc4NiAxMTEzLjk4MjgsLTI3NS4yNzg5MiAxMTE0LjA0NDQsLTI3NC40MzQ0NiBDIDExMTQuMTAzNywtMjczLjYyMTA4IDExMTMuOTExMiwtMjcyLjc5NDc3IDExMTMuNTI0NiwtMjcxLjYyODg0IEMgMTExMy4xMzM0LC0yNzAuNDQ4ODMgMTExMS42Nzk0LC0yNjcuMjc4ODYgMTExMS4yMzg5LC0yNjcuMDMwMDcgQyAxMTEwLjc4NjYsLTI2Ni43NzQ1NiAxMTEwLjUwNzUsLTI2Ni43NTk2OSAxMTEwLjE3MTksLTI2Ni44OTA2MyB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMzNyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Njc2Nzc2Nzc3NjY3Njc3Nzc3Nzc2NzY3NzY3Nzc3Njc2Nzc3Nzc3NzY3Njc3Njc3Nzc2NzY3Nzc3Nzc3Njc2Nzc2Nzc3NzY3Njc3Nzc3Nzc2NzY3NzY3Nzc3Njc2Nzc3Nzc3NzY3Njc3Njc3NzY2NzY3NzY3Njc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3Nzc3NzY3Nzc3NzY3Nzc3Nzc2Nzc3Nzc2Nzc3Nzc3Njc3Nzc3Njc3N6c3N6c3NzenpjY3p6emN6enpjIiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxODMiCisgICAgICAgICAgIGQ9Ik0gOTg4Ljc1LC0yNjMuODQzNzUgQyA5OTAuNjYxNjEsLTI2My4yMDkzNSA5OTMuMzAwMjcsLTI2Mi4wODUzNCA5OTQuODc1LC0yNjEuMDMxMjUgQyA5OTYuNDQ5NzcsLTI1OS45NzcxNiA5OTcuNzcxMSwtMjU5LjU0ODczIDEwMDAuNDA2MywtMjU3LjY1NjI1IEMgMTAwMy4wMTQ1LC0yNTUuNzgzMTEgMTAwNS40MzMyLC0yNTQuNjQxMDMgMTAwNy43MTg4LC0yNTMuNTkzNzUgQyAxMDEwLjE4ODEsLTI1Mi40NjIyOCAxMDEzLjQ3MDksLTI1MS40MzkwMSAxMDE3LjI1LC0yNDkuNjU2MjUgQyAxMDE2LjA0MjgsLTI1MC45MTQ2NSAxMDEwLjExMSwtMjUzLjAyMDcgMTAwOC4yMTg4LC0yNTMuODQzNzUgQyAxMDA2LjMyNjYsLTI1NC42NjY3OSAxMDA0LjA5MDgsLTI1NS43NzQyNCAxMDAxLjI4MTMsLTI1Ny42MjUgQyA5OTguNDcxNjksLTI1OS40NzU3NSA5OTcuNjU5MDYsLTI2MC4xMDY1NCA5OTUuMjgxMjUsLTI2MS4zNDM3NSBDIDk5Mi45MDM0MywtMjYyLjU4MDk0IDk5MS4yMDEzNywtMjYzLjI5Mjk1IDk4OC43NSwtMjYzLjg0Mzc1IHoiCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3Mjk3KTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE4NSIKKyAgICAgICAgICAgZD0iTSA5NTcuNSwtMjYwLjc4MTI1IEMgOTU5LjQxLC0yNjAuMTYzMTUgOTYyLjA4Mjg4LC0yNTkuMDcxOTEgOTYzLjY1NjI1LC0yNTguMDMxMjUgQyA5NjUuMjI5NjQsLTI1Ni45OTA1OSA5NjYuNTUyMzMsLTI1Ni41NDg3MyA5NjkuMTg3NSwtMjU0LjY1NjI1IEMgOTcxLjc5NTczLC0yNTIuNzgzMSA5NzQuMjE0NDIsLTI1MS42NDEwNCA5NzYuNSwtMjUwLjU5Mzc1IEMgOTc4Ljk2OTMxLC0yNDkuNDYyMjggOTgyLjI1MjEzLC0yNDguNDM5IDk4Ni4wMzEyNSwtMjQ2LjY1NjI1IEMgOTg0LjgyMzk3LC0yNDcuOTE0NjUgOTc4LjgyOTcxLC0yNTAuMDUxOTUgOTc2LjkzNzUsLTI1MC44NzUgQyA5NzUuMDQ1MzMsLTI1MS42OTgwNCA5NzIuODQwODQsLTI1Mi44MDU1IDk3MC4wMzEyNSwtMjU0LjY1NjI1IEMgOTY3LjIyMTY3LC0yNTYuNTA3IDk2Ni40MzgzLC0yNTcuMDk1NTcgOTY0LjA2MjUsLTI1OC4zMTI1IEMgOTYxLjY4NjcyLC0yNTkuNTI5NDEgOTU5Ljk0OTI5LC0yNjAuMjUxMzUgOTU3LjUsLTI2MC43ODEyNSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMwMSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxODciCisgICAgICAgICAgIGQ9Ik0gOTI2LjA5Mzc1LC0yNTcuMzc1IEMgOTI4LjAwMTQ3LC0yNTYuNzc3NTUgOTMwLjY0NzIzLC0yNTUuNzExMTYgOTMyLjIxODc1LC0yNTQuNjg3NSBDIDkzMy43OTAyNSwtMjUzLjY2Mzg1IDkzNS4wODg5NywtMjUzLjI0Nzc5IDkzNy43MTg3NSwtMjUxLjQwNjI1IEMgOTQwLjMyMTY2LC0yNDkuNTgzNTIgOTQyLjc0NzYyLC0yNDguNDM0MDUgOTQ1LjAzMTI1LC0yNDcuNDA2MjUgQyA5NDcuNDk4NDUsLTI0Ni4yOTU4NCA5NTAuNzg2NiwtMjQ1LjMxMzAyIDk1NC41NjI1LC0yNDMuNTYyNSBDIDk1My4zNTYyNywtMjQ0LjgxMDYgOTQ3LjM5MDYsLTI0Ni44ODA1OSA5NDUuNSwtMjQ3LjY4NzUgQyA5NDMuNjA5NDIsLTI0OC40OTQ0IDk0MS4zOTc1OCwtMjQ5LjU3ODU0IDkzOC41OTM3NSwtMjUxLjM3NSBDIDkzNS43ODk5LC0yNTMuMTcxNDQgOTM0Ljk2NjcxLC0yNTMuNzc3NTEgOTMyLjU5Mzc1LC0yNTQuOTY4NzUgQyA5MzAuMjIwNzgsLTI1Ni4xNTk5OSA5MjguNTQwMTMsLTI1Ni44NzE1OCA5MjYuMDkzNzUsLTI1Ny4zNzUgeiIKKyAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjczMDUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgaWQ9InBhdGg4MTg5IgorICAgICAgICAgICBkPSJNIDg5NC45MDYyNSwtMjUzLjU2MjUgQyA4OTYuODA4MzgsLTI1My4wMDg5NSA4OTkuNDkzMjYsLTI1MS45NzM2MyA5MDEuMDYyNSwtMjUwLjk2ODc1IEMgOTAyLjYzMTczLC0yNDkuOTYzODggOTAzLjkzNjUxLC0yNDkuNTYwMTEgOTA2LjU2MjUsLTI0Ny43NSBDIDkwOS4xNjE2MiwtMjQ1Ljk1ODM2IDkxMS41NjI4NCwtMjQ0Ljg3ODExIDkxMy44NDM3NSwtMjQzLjg3NSBDIDkxNi4zMDgwMywtMjQyLjc5MTI2IDkxOS42MDM1OSwtMjQxLjgzNDcxIDkyMy4zNzUsLTI0MC4xMjUgQyA5MjIuMTcwMiwtMjQxLjM2MDA3IDkxNi4yMDA4NCwtMjQzLjM2OTc4IDkxNC4zMTI1LC0yNDQuMTU2MjUgQyA5MTIuNDI0MTgsLTI0NC45NDI3MiA5MTAuMjM3MywtMjQ1Ljk4NzA1IDkwNy40Mzc1LC0yNDcuNzUgQyA5MDQuNjM3NzMsLTI0OS41MTI5NCA5MDMuODM4MzEsLTI1MC4xMTgzNiA5MDEuNDY4NzUsLTI1MS4yODEyNSBDIDg5OS4wOTkxOCwtMjUyLjQ0NDEzIDg5Ny4zNDU1LC0yNTMuMTE1MzcgODk0LjkwNjI1LC0yNTMuNTYyNSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMwOSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxOTEiCisgICAgICAgICAgIGQ9Ik0gODYzLjcxODc1LC0yNDguNjU2MjUgQyA4NjUuNTk5MzcsLTI0OC4yMjcxNiA4NjguMjIzMDIsLTI0Ny4yNzU4NyA4NjkuNzgxMjUsLTI0Ni4zNDM3NSBDIDg3MS4zMzk0OCwtMjQ1LjQxMTY0IDg3Mi42MzM1OCwtMjQ1LjA4NTk5IDg3NS4yNSwtMjQzLjM0Mzc1IEMgODc3LjgzOTcxLC0yNDEuNjE5MzEgODgwLjIzMDY3LC0yNDAuNjM1NzMgODgyLjUsLTIzOS43MTg3NSBDIDg4NC45NTE3NiwtMjM4LjcyODA2IDg4OC4yMzk1OSwtMjM3Ljg0MTY4IDg5MiwtMjM2LjIxODc1IEMgODkwLjc5ODY5LC0yMzcuNDI2MDkgODg0Ljg0NzUxLC0yMzkuMjg0ODQgODgyLjk2ODc1LC0yNDAgQyA4ODEuMDksLTI0MC43MTUxNyA4NzguODgzMzUsLTI0MS42ODQ0MiA4NzYuMDkzNzUsLTI0My4zNzUgQyA4NzMuMzA0MTIsLTI0NS4wNjU1NyA4NzIuNTA5MTQsLTI0NS42MDMyMiA4NzAuMTU2MjUsLTI0Ni42NTYyNSBDIDg2Ny44MDMzMywtMjQ3LjcwOTI2IDg2Ni4xMzA0MSwtMjQ4LjM2ODczIDg2My43MTg3NSwtMjQ4LjY1NjI1IHoiCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3MzEzKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE5MyIKKyAgICAgICAgICAgZD0iTSA4MzMuMTU2MjUsLTI0MS4zNzUgQyA4MzUuMDA0NjEsLTI0MS4wNzg1NiA4MzcuNjI1NywtMjQwLjM5ODY4IDgzOS4xNTYyNSwtMjM5LjU5Mzc1IEMgODQwLjY4NjgzLC0yMzguNzg4ODIgODQxLjk2OTk5LC0yMzguNTM4MDIgODQ0LjUzMTI1LC0yMzcuMDYyNSBDIDg0Ny4wNjYyOSwtMjM1LjYwMjA0IDg0OS40MjE5MywtMjM0LjczNzQxIDg1MS42NTYyNSwtMjM0IEMgODU0LjA3MDI0LC0yMzMuMjAzMzIgODU3LjMxMzM2LC0yMzIuNTMzMTEgODYxLjAzMTI1LC0yMzEuMTU2MjUgQyA4NTkuODQzNTQsLTIzMi4yODQ5OCA4NTMuOTQzNTMsLTIzMy43NDYgODUyLjA5Mzc1LC0yMzQuMzEyNSBDIDg1MC4yNDM5OCwtMjM0Ljg3OSA4NDguMDkwMzMsLTIzNS42ODY0MiA4NDUuMzQzNzUsLTIzNy4xNTYyNSBDIDg0Mi41OTcxOCwtMjM4LjYyNjA4IDg0MS44NDIzOSwtMjM5LjA3NjUzIDgzOS41MzEyNSwtMjM5LjkzNzUgQyA4MzcuMjIwMSwtMjQwLjc5ODQ1IDgzNS41MjY1NCwtMjQxLjI1NzU5IDgzMy4xNTYyNSwtMjQxLjM3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMxNyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxOTUiCisgICAgICAgICAgIGQ9Ik0gODAyLjkwNjI1LC0yMzIuMzEyNSBDIDgwNC43Mjg0NSwtMjMyLjEwMTIzIDgwNy4yNzIwMSwtMjMxLjUxMTkzIDgwOC43ODEyNSwtMjMwLjc4MTI1IEMgODEwLjI5MDUsLTIzMC4wNTA1OSA4MTEuNTM2OTMsLTIyOS44NTEyNyA4MTQuMDYyNSwtMjI4LjUgQyA4MTYuNTYyMjYsLTIyNy4xNjI1NCA4MTguODk0MDQsLTIyNi40NTE1NyA4MjEuMDkzNzUsLTIyNS44NDM3NSBDIDgyMy40NzAyOCwtMjI1LjE4NzA4IDgyNi42NTgzOSwtMjI0Ljc3MDg3IDgzMC4zMTI1LC0yMjMuNjU2MjUgQyA4MjkuMTQ1MTUsLTIyNC43MDEyMSA4MjMuMzgzNjIsLTIyNS43NTk1NCA4MjEuNTYyNSwtMjI2LjIxODc1IEMgODE5Ljc0MTM5LC0yMjYuNjc3OTYgODE3LjYxMDI1LC0yMjcuMzQ1NzEgODE0LjkwNjI1LC0yMjguNjU2MjUgQyA4MTIuMjAyMjIsLTIyOS45NjY3NyA4MTEuNDM1MTksLTIzMC4zNzYxNSA4MDkuMTU2MjUsLTIzMS4xMjUgQyA4MDYuODc3MywtMjMxLjg3MzgzIDgwNS4yNDMsLTIzMi4zMDQzMSA4MDIuOTA2MjUsLTIzMi4zMTI1IHoiCisgICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtmaWx0ZXI6dXJsKCNmaWx0ZXI3MzIxKTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CisgICAgICAgIDxwYXRoCisgICAgICAgICAgIGlkPSJwYXRoODE5NyIKKyAgICAgICAgICAgZD0iTSA3NzMuMTg3NSwtMjIyLjE4NzUgQyA3NzQuOTk4NTksLTIyMi4wMDg4IDc3Ny41MDgwOSwtMjIxLjUyMjQ0IDc3OSwtMjIwLjg0Mzc1IEMgNzgwLjQ5MTk0LC0yMjAuMTY1MDYgNzgxLjc1MzQsLTIyMC4wNDU1MyA3ODQuMjUsLTIxOC43ODEyNSBDIDc4Ni43MjEwNywtMjE3LjUyOTg3IDc4OS4wNDAwNSwtMjE2Ljg4NTExIDc5MS4yMTg3NSwtMjE2LjM0Mzc1IEMgNzkzLjU3MjYyLC0yMTUuNzU4ODcgNzk2LjcxMDA5LC0yMTUuNDQ2MjMgODAwLjMxMjUsLTIxNC41IEMgNzk5LjE2MTY2LC0yMTUuNDkxMTYgNzkzLjQ1OTk5LC0yMTYuMjgzMyA3OTEuNjU2MjUsLTIxNi42ODc1IEMgNzg5Ljg1MjUzLC0yMTcuMDkxNyA3ODcuNzQwNzIsLTIxNy43MDg2NiA3ODUuMDYyNSwtMjE4LjkzNzUgQyA3ODIuMzg0MzIsLTIyMC4xNjYzNCA3ODEuNjU5MDUsLTIyMC41NDgzOSA3NzkuNDA2MjUsLTIyMS4yMTg3NSBDIDc3Ny4xNTM0NiwtMjIxLjg4OTA5IDc3NS41MDk5OCwtMjIyLjIyMTA3IDc3My4xODc1LC0yMjIuMTg3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMyOSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBpZD0icGF0aDgxOTkiCisgICAgICAgICAgIGQ9Ik0gNzQzLjU2MjUsLTIxMS4xODc1IEMgNzQ1LjM1NTMxLC0yMTEuMDU4MzkgNzQ3LjgzNTYzLC0yMTAuNjM3ODUgNzQ5LjMxMjUsLTIxMCBDIDc1MC43ODk0LC0yMDkuMzYyMTUgNzUyLjAyODYsLTIwOS4yNTg0NCA3NTQuNSwtMjA4LjA2MjUgQyA3NTYuOTQ2MTgsLTIwNi44Nzg3OCA3NTkuMjIwNTQsLTIwNi4zMTU4NCA3NjEuMzc1LC0yMDUuODQzNzUgQyA3NjMuNzAyNjcsLTIwNS4zMzM3MiA3NjYuNzk0NiwtMjA1LjE2MzExIDc3MC4zNzUsLTIwNC4yODEyNSBDIDc2OS4yMzEyMSwtMjA1LjI1MTg1IDc2My42Mjc0MSwtMjA1Ljg3MTkgNzYxLjg0Mzc1LC0yMDYuMjE4NzUgQyA3NjAuMDYwMDgsLTIwNi41NjU1OSA3NTcuOTYwOSwtMjA3LjEwNjMxIDc1NS4zMTI1LC0yMDguMjUgQyA3NTIuNjY0MDksLTIwOS4zOTM2OCA3NTEuOTE3NTUsLTIwOS43NjYzMSA3NDkuNjg3NSwtMjEwLjM3NSBDIDc0Ny40NTc0MiwtMjEwLjk4MzY4IDc0NS44NjE1NiwtMjExLjI4NDY2IDc0My41NjI1LC0yMTEuMTg3NSB6IgorICAgICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNzMyNSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgorICAgICAgPC9nPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciCisgICAgICAgZD0iTSA4NjMuODc4MTIsNDc1LjY2NzkgQyA4NjUuNTIwMjQsNDcyLjQ0OTkgODY3LjM5NTkzLDQ2OS45MzI2MSA4NjguNzM5NDgsNDY1LjgxODkyIEMgODY5LjUzODIsNDYyLjE2MTAzIDg3Mi4wNTE1Miw0NjMuNzg4MTkgODc1Ljk5OTk1LDQ1Ny40MjIwMiBDIDg3Ny40MDE4OCw0NTUuMTgyNTIgODgxLjQ3NjQ4LDQ1Ny44MTMzOCA4ODQuOTY1MDUsNDU1LjAyMjkxIEMgODg2LjIzNTc3LDQ1NC4yMTk3MiA4ODcuODQ5OTMsNDU0LjYxODYgODg5LjQ0NzYxLDQ1NC45NTk3OCBDIDg5My4yMTMsNDU2LjI3ODc0IDg5NS4yNzMzNyw0NTguNjYzMzMgODk3Ljc4MTM3LDQ2MC43NjgxNSBDIDkwMy45MjA0Myw0NjYuNzM4MzggOTE4LjMxNTUxLDQ2OC43MTE0MiA5MjEuMjY3NDEsNDY3LjA4MTYxIEMgOTIyLjcwMTQ2LDQ2NC4xNzY4NyA5MjkuMTQ4NjksNDYxLjY3MjczIDkzMy42NDE3OCw0NTUuOTY5OTMgQyA5MzQuMzg5ODksNDU0Ljg0NzI2IDk0NS4zNzExNCw0NDcuMjI1NDcgOTQ4LjI4ODk5LDQ0OS40MDM5NCIKKyAgICAgICBpZD0icGF0aDgyMDEiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gODg4LjUwMDU5LDQ2NS4yNTA3MSBDIDg5NS44NjQsNDYyLjAxNzc0IDkwMi4zMTE0OSw0NTYuMzQyMzEgOTA5LjIwODcyLDQ1MS44NjYxOSBDIDkxMi41MTkyOSw0NDkuODk2NjUgOTE2LjA3ODU1LDQ1NS4wODIyIDkyMC4wMDQ3Miw0NTUuNDY0ODUgQyA5MjIuMzAyNDUsNDU1LjI0NjcyIDkyMy43MTc2Miw0NTYuNjY3NDQgOTI1LjY4NjgzLDQ1Ny4xMDYzNSBDIDkzMC44NDMxOSw0NTguNDI0MTQgOTI4LjA4NDc2LDQ2MC45NzEyMyA5MzUuNjYyMDksNDYzLjU0NjA3IEMgOTQxLjgxNzcsNDY1LjI2NjQ3IDk0NC41Njk0OSw0NTYuNzQ3NiA5NTAuNTYxODQsNDU2LjIyMjQ3IEMgOTU1LjQzOTIzLDQ1NS43MTk0OCA5NTguNjYwNzYsNDU1LjkwNjQ0IDk2Mi4xNzg1OSw0NTUuOTY5OTMgQyA5NjYuMTA1NTUsNDU2LjEwODgyIDk2Ni4yNTcxNCw0NTIuNDcyMzMgOTY4LjIzOTUxLDQ1MC42NjY2MyBDIDk3MS4yMjAwNyw0NDcuODYxNDEgOTc1LjM5NTEyLDQ0OC44MTY5MSA5NzguMzg0MzYsNDQ1LjkyNTczIEMgOTc5LjQwMTksNDQ0LjU0MTA1IDk4MC4zMzg5NCw0NDIuOTE0ODggOTgxLjExODk1LDQ0MC44MTc2NCBDIDk4Mi4wMDA5Niw0MzguODE3MyA5ODQuMTU5MDEsNDQxLjEyMzYyIDk4NS45MTcxOCw0NDIuMDgwMzMiCisgICAgICAgaWQ9InBhdGg4MjAzIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2MiIC8+CisgIDwvZz4KKyAgPGcKKyAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKKyAgICAgaWQ9ImxheWVyMTUiCisgICAgIGlua3NjYXBlOmxhYmVsPSJGZWV0IgorICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI5MDQ4KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNDAzLjI3OTIyLDEwNTYuMzA1OCBMIDQ1OS44NDc3NiwxMDEzLjg3OTQgTCA1MzEuOTcyNjUsMTAyOC4wMjE1IEwgNDg1LjMwMzYxLDEwODAuMzQ3NCBMIDQzMS41NjM0OSwxMDg3LjQxODUgTCA0MDMuMjc5MjIsMTA1Ni4zMDU4IHoiCisgICAgICAgaWQ9InBhdGg4OTk0IiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhZGE0Njk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDU0Mi4yNzE4MywxMDYwLjU3MTkgQyA1NDAuODY0NTYsMTA3OS4zNzMxIDU0MS4xMjY5MywxMDkzLjMyMjkgNTQ0LjM1MzU3LDExMDkuODc1MiBDIDU0Ny41ODAyMywxMTI2LjQyNzUgNTYwLjc1OTY2LDExNTUuNzgyNSA1NjQuNjg3OTgsMTE3My4wNTg5IEMgNTY4LjYxNDE5LDExOTAuMzI2IDU2Ny4zODIxMSwxMjExLjM2ODYgNTUyLjIyODU0LDEyMjQuMjA3MiBDIDUzNi45MTA5MywxMjM3LjE4NDYgNTEwLjE3NzI2LDEyNDUuODA2MSA0ODQuMzk2MjMsMTIzOS45NDA5IEMgNDU4LjYxNTE4LDEyMzQuMDc1NyA0MTQuODQ3MTYsMTE5MC43MTc1IDM5NS44MDYwNCwxMTY5LjcxMjYgQyAzNzYuNjkzOSwxMTQ4LjYyOTMgMzMyLjA0NTE4LDEwNzUuODYyIDMxNy44Njc1MSwxMDQ1LjQzNjggQyAzMDMuNjg5ODQsMTAxNS4wMTE3IDMwNS4yMDc5LDEwMDguNzE4MiAzMDkuNzQ3NzksOTk5LjkwNzA4IEMgMzAwLjM4MTA3LDk3NS4zODY1OCAyOTcuMzM0MDgsOTQ5Ljg0MDI3IDI3Ni4wMzUzNCw5MjQuMzMwNDQgQyAzMDYuMzYwODEsOTI3LjQ0NDg4IDMxOS45MTU2Miw5NTEuMjg2NzcgMzM2LjE2MTAyLDk3MS40NzAxOSBDIDMzMC42MzExMyw5MjMuMzk0MTYgMzE4LjEwNjMxLDkwNy4wNTM2OSAzMDcuNzg3MDcsODgwLjc0NTg5IEMgMzM3Ljc4MTM3LDg4Ni44Mjc1NCAzNTguMzY2NDMsOTEyLjYxODI4IDM3MS43NjY4Niw5NTMuNDU4MzkgQyAzODEuMzIxMDEsOTQ5LjU0MDQ4IDM5MC4wMDQ2Miw5NDQuMDg1NDUgNDAxLjk1NDI3LDk0NC4zOTcxOSBDIDM5MC42NTY3Nyw5MDIuNzAxMzkgMzg0LjAwNDgxLDg3NC40ODEzNSAzNjUuMjY3MDIsODQzLjMyNzI1IEMgNDE4LjcwODk4LDg0OC45OTc1OCA0NDguOTI0MDQsOTIzLjk2NjU3IDQ0NC4yMzg0NCw5MzEuMjg4MDUgQyA0NTQuMjE2NDEsOTI5LjA0NDA2IDQ2My4yNDQwOSw5MjQuNzU3NjcgNDc0LjY3NDk3LDkyNS42MzYzOCBDIDQ2My40MjYsODg3LjI4OTM2IDQ1My42MjcxNiw4NDguNzY4NDggNDcxLjAxNTI2LDgwNi45ODgxOSBDIDQ3MS4wMTUyNiw4MDYuOTg4MTkgNTE5LjMwMjA0LDg3Mi40MjUwNyA1MjUuNDA0OTIsODkyLjc5Mzk3IEMgNTMxLjUwNzc5LDkxMy4xNjI4NyA1MjYuOTIzNzMsOTMxLjQ5NDQ4IDUyNi45MjM3Myw5MzEuNDk0NDggQyA1MjYuOTIzNzMsOTMxLjQ5NDQ4IDU0My44ODMzLDk2Mi41Nzk3OCA1NDcuMjE3NjUsOTgyLjU4ODYyIEMgNTUwLjU5MDc1LDEwMDIuODMgNTQzLjY4NDk2LDEwNDEuNjkxOSA1NDIuMjcxODMsMTA2MC41NzE5IHoiCisgICAgICAgaWQ9InBhdGg0MTg5IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3p6enp6emNjY2NjY2NjY2N6Y3p6IiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXIzNTg3KTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNzE5LjUsNzM4LjY5NTE5IEwgNzM3LjgxMTc3LDc1NC4xMjcxNSBMIDc4Mi4yMjI4LDczOC43Mzg5NCBMIDgwNS41LDcxMy4xOTUxOSBMIDgxNi45NjM5Nyw3MzIuNDE1ODQgTCA4NDcuNjM1NTgsNzQ1LjE5OTM4IEwgODcyLjczMjk1LDc1MC45Mjc3NSBMIDg5Miw3MjMuMTk1MTkgTCA5MDguMDIzMDksNzQ3LjAyMTI2IEwgOTQ3LDc1Mi4xOTUxOSBMIDk1Ny4yNDU0MSw3NDUuOTk2NjcgTCA5NjQuMDAwMTIsNzU0LjY5NDg3IEwgOTg5LjUsNzY1LjY5NTE5IEwgOTkxLjUsNzI1LjE5NTE5IEwgOTU1Ljk0ODY2LDcxMC42NTc2IEwgOTIzLjQ1NTkxLDY4OS4xMzA1IEwgODgzLjAwMzgsNjc3LjY2NDkyIEwgODYxLjY5NjY4LDY2Mi4xMzE0OCBMIDg0MCw2ODUuMTk1MTkgTCA3NTUuMDI4NzgsNjM4LjYxMjA4IEwgNzIyLDY3Ni42OTUxOSBMIDcxOS41LDczOC42OTUxOSB6IgorICAgICAgIGlkPSJwYXRoNDE5MSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjY2NjY2NjY2NjY2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzMSkiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw5OTUuMjg2NDYsMjMuNTM0OTMpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41ODc3NTUwOTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyMzg5OCk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gNTg0LDY5Ni41IEwgNTc3LjQzNzUsNzEzLjY1NjI1IEMgNTc3LjQzNzUsNzEzLjY1NjI1IDU2OS42MjU5OCw3MzQuMDIxMTMgNTYxLjc1LDc1Ny4zMTI1IEMgNTU3LjgxMjAxLDc2OC45NTgxOCA1NTMuODY2OTgsNzgxLjM1Mzk1IDU1MC44MTI1LDc5Mi40Mzc1IEMgNTQ3Ljc1ODAyLDgwMy41MjEwNSA1NDUuNDc2NjQsODEyLjgxNzM2IDU0NS4zMTI1LDgyMC43MTg3NSBDIDU0NC45MTQ0Myw4MzkuODgwNzEgNTUxLjA1OTAzLDg1NS42MDcwNSA1NTQuMjUsODYyLjQ2ODc1IEMgNTUzLjQ3ODQ3LDg2Ni4wMjM5OCA1NTIuMjU4NjMsODcxLjkyMzA3IDU1MC45MDYyNSw4ODAuNTYyNSBDIDU0OC45ODU4Myw4OTIuODMwNzEgNTQ3LjE4Nzk4LDkwNy43MTY5MSA1NDguNTMxMjUsOTIwLjQzNzUgQyA1NDkuOTEzMzQsOTMzLjUyNTg1IDU1NS4zNDM0Nyw5NDguNjI1MTUgNTYxLjEyNSw5NjMuNDY4NzUgQyA1NjYuOTA2NTMsOTc4LjMxMjM1IDU3My4xNzkzNSw5OTIuNjk1ODYgNTc2LjM0Mzc1LDEwMDEuNSBDIDU4Mi45NzU4MSwxMDE5Ljk1MTkgNTg2LjMzNjcxLDEwMzMuMDc2MyA1ODcuNjU2MjUsMTA1MCBDIDU4OC4yMzc2LDEwNTcuNDU2MSA1ODcuNDEzOTgsMTA3MC4zMzYgNTg2LjQwNjI1LDEwODMuMzc1IEMgNTg1LjM5ODUyLDEwOTYuNDE0IDU4NC4yMTk2NCwxMTA5LjY3NjQgNTg0LjcxODc1LDExMjAuMzQzOCBDIDU4NS43MDc4NiwxMTQxLjQ4MzYgNTk0LjA0NjczLDExNjcuMTc4NSA2MTguMDkzNzUsMTE3OC4yODEyIEMgNjQwLjg2ODU4LDExODguNzk2NiA2NzMuNDIwNTcsMTE4OS45ODM0IDcwMS41MzEyNSwxMTc0Ljg0MzggQyA3MTcuNjkxMTcsMTE2Ni4xNDA0IDczMS42MDc1OSwxMTQ3Ljc0NjIgNzQ0LjkwNjI1LDExMjcuOTM3NSBDIDc1OC4yMDQ5MSwxMTA4LjEyODggNzY5Ljg3NTQyLDEwODYuODg0MSA3NzYuODQzNzUsMTA3My4wMzEyIEMgNzkyLjE5NjY3LDEwNDIuNTEgODE2LjIzNzI4LDk1Ny41NjcwMiA4MjIuNDY4NzUsOTIwLjMxMjUgQyA4MjUuNDg3MzQsOTAyLjI2NTk3IDgyNi4zOTA0MSw4OTEuMjQ2OTUgODI1LjA5Mzc1LDg4Mi4yODEyNSBDIDgyNC4xMTUyMiw4NzUuNTE1MjEgODIxLjI2NTU2LDg3MC4xMzM4NSA4MTguMjE4NzUsODY2LjA2MjUgQyA4MjAuMjYxNDksODM4LjU1NDU5IDgxNy40ODY2OCw4MTQuNjkzNzIgODMwLjE4NzUsNzg2LjY1NjI1IEwgODQwLjc1LDc2My4zNzUgTCA4MTYuOTM3NSw3NzIuNjg3NSBDIDc5OS40NDc3NSw3NzkuNTI1MDMgNzg4LjAzNTg2LDc5MS43MzI4NiA3ODAuMzQzNzUsODA0Ljc1IEMgNzgwLjAyMTI0LDgwNS4yOTU3NyA3NzkuNzgwNjEsODA1Ljg1Nzc2IDc3OS40Njg3NSw4MDYuNDA2MjUgQyA3NzkuNjkwNzgsNzgzLjg5MTA0IDc4My44NzY1OSw3NjguNzY4NjYgNzg2LjA2MjUsNzQ3LjcxODc1IEwgNzg4LjAzMTI1LDcyOC43MTg3NSBMIDc3MSw3MzcuMzc1IEMgNzQwLjQwNTUxLDc1Mi45MzA3MSA3MjUuMzA1MTEsNzg1LjU2ODIxIDcyMS4yODEyNSw4MjcuNTkzNzUgQyA3MTcuMDM1OTMsODI2Ljk2ODI4IDcxMi40NDk4NSw4MjYuNTc0MSA3MDcuNDY4NzUsODI2Ljc1IEMgNzA3LjE3NzI2LDc4Ny41Njk2NCA3MDcuMDcyNDYsNzU5LjcxMzE1IDcxNi4wNjI1LDcyNy4zNzUgTCA3MjEuNjU2MjUsNzA3LjI1IEwgNzAyLjIxODc1LDcxNC45MDYyNSBDIDY3MS4zMDkzOCw3MjcuMTEwMTkgNjU0LjM1OTIxLDc1Ni44MzY5OCA2NDUuNTkzNzUsNzgzLjI4MTI1IEMgNjQxLjIxMTAyLDc5Ni41MDMzOSA2MzguODQ3OTMsODA5LjA4MjQ2IDYzOCw4MTkuMjE4NzUgQyA2MzcuNzY3OTcsODIxLjk5MjQ4IDYzNy42ODg5NCw4MjQuNTMwMDcgNjM3LjY4NzUsODI2LjkzNzUgQyA2MzQuNDQ1NjMsODI2LjkwMTA5IDYzMS4yNjY5OCw4MjcuMDczMzkgNjI3LjYyNSw4MjcuNDM3NSBDIDYyNy42NjY2Miw3ODguNDMyNzcgNjI0LjE0MDc2LDc0Ny42ODMzNSA1OTUuMzQzNzUsNzEwLjkzNzUgTCA1ODQsNjk2LjUgeiBNIDU4OS44MTI1LDc0MC4zMTI1IEMgNjA2LjYxOTQxLDc3MC45NTYzMyA2MDcuMjg3MDEsODA0LjI3OTc4IDYwNi43NSw4NDAuMDYyNSBMIDYwNi41MzEyNSw4NTUuMTI1IEwgNjE4LjU2NjE4LDg0OC41ODU3OSBDIDYyNy4yMjgyMyw4NDUuNDUyNzcgNjM4LjEyNjc2LDg0OC4zNTgyNyA2NTAuNSw4NDcuNzUgTCA2NjUuMTc0NjUsODU3LjEwNjYgTCA2NTguODQzNzUsODMxLjMxMjUgQyA2NTguNzU0MSw4MzEuMDgyNTMgNjU4LjYyMzI5LDgzMC44OTU4MSA2NTguNTkzNzUsODMwLjU5Mzc1IEMgNjU4LjM5NDI0LDgyOC41NTM4OSA2NTguMzcxNDMsODI1LjEyMDY4IDY1OC43MTg3NSw4MjAuOTY4NzUgQyA2NTkuNDEzMzksODEyLjY2NDg5IDY2MS41MDgzMiw4MDEuMzgzNTEgNjY1LjM0Mzc1LDc4OS44MTI1IEMgNjcwLjQ5OTA3LDc3NC4yNTk1NiA2NzguODMxNzYsNzU4LjYyMDAyIDY5MC40Njg3NSw3NDcuMjgxMjUgQyA2ODUuNzg0OTQsNzc1LjkxOTIzIDY4Ny4yNTMxNiw4MDcuNTQwNTkgNjg3LjQ1NzExLDg0My4wODYzOSBMIDY4NC42OTExOCw4NTYuMzQ4MDMgTCA3MDAuMTg3NSw4NDguNzUgQyA3MDkuMjE2OSw4NDUuOTkyMjkgNzE3LjM3NjQ3LDg0OC40MDAwNCA3MjkuNDY4NzUsODQ5Ljg0Mzc1IEwgNzQyLjcxNTA3LDg1OS4yODc5OCBMIDc0MS4wOTM3NSw4NDAgQyA3NDIuNTQxNjgsODA5LjAyODIzIDc0OS4zMTUyNCw3ODYuMzIxOTIgNzYxLjgxMjUsNzcxLjEyNSBDIDc1OC44MjU2Miw3OTAuOTAzODQgNzU2LjM4MjA3LDgxMi45MDk4IDc2Mi4xMjUsODQ5LjQ2ODc1IEwgNzYzLjE5MDUyLDg1NS44NDE5MyBMIDc2MC4yNTIzNyw4NjcuMzU4NzggTCA3NzAuODY5NDgsODU5LjE5MDYgTCA3ODAuMDU5MjEsODY5LjQxMjU4IEwgNzc4LjUxMDkzLDg1OC45NDg5OCBMIDc4MS45Mzc1LDg1MiBDIDc4Ny42Mzg1Miw4MzguNzg4NTEgNzkyLjExMDMyLDgyNS43ODY2MyA3OTguMjgxMjUsODE1LjM0Mzc1IEMgNzk5LjI0MTExLDgxMy43MTk0MSA4MDAuMzEyNzgsODEyLjI3OTM5IDgwMS4zNDM3NSw4MTAuNzgxMjUgQyA3OTcuNjYzMDksODMxLjkzNjYgNzk4LjkxNjU5LDg1MC45ODk0IDc5Ny4yNSw4NjguNTYyNSBMIDc5Mi41Njk4Niw4NzYuMzY5NDggTCA3OTkuOTY4NzUsODc2LjU5Mzc1IEMgODAzLjE4ODgsODgwLjA3NzM2IDgwMy44MzYyNSw4ODAuNDQ0NDMgODA0LjUzMTI1LDg4NS4yNSBDIDgwNS4yMjYyNSw4OTAuMDU1NTcgODA0Ljg0OTg3LDg5OS42NTAzNSA4MDEuOTY4NzUsOTE2Ljg3NSBDIDc5Ni40MDA3Niw5NTAuMTYyOTIgNzcwLjEyMzEzLDk5NC43MTQ4MSA3NTguMjI4MzUsMTAxOC4zNjE0IEMgNzUxLjYyMzQ0LDEwMzEuNDkxOCA3MzkuNzAwMDIsMTA3NS44NDczIDcyNy4xMDUsMTA5NC42MDc5IEMgNzE0LjUwOTk4LDExMTMuMzY4NCA2OTguNTczNjMsMTEzNC4zNzUyIDY4OS45MzI5NiwxMTM5LjAyODggQyA2NjguNDQyNDQsMTE1MC42MDMgNjQ1LjM3NzAyLDExNjQuNTM0NyA2MjkuMzE0MDcsMTE1Ny4xMTgzIEMgNjE0LjkzOTIxLDExNTAuNDgxMyA2MDYuMjc0MzgsMTEzNS45MjU2IDYwNS41LDExMTkuMzc1IEMgNjA1LjExNjg5LDExMTEuMTg3IDYwNi4xMTI3OSwxMDk4LjA2NTggNjA3LjEyNSwxMDg0Ljk2ODggQyA2MDguMTM3MjEsMTA3MS44NzE3IDYxOC40MTM5MSwxMDYyLjM5OCA2MjIuNTQ4MzksMTA0OC40MDYyIEMgNjI3LjkyMDY4LDEwMzAuMjI1NCA2MjEuMTAxNTIsMTAxMS44MTE4IDYxMC4wNDgzOSw5OTQuNDY4NzUgQyA2MDMuNTYxODQsOTg0LjI5MDk3IDU4Ni4wNzE1OSw5NzAuMjEwODUgNTgwLjUsOTU1LjkwNjI1IEMgNTc0LjkyODQxLDk0MS42MDE2NSA1NzAuMTMyNDksOTI2LjkwMzEgNTY5LjIxODc1LDkxOC4yNSBDIDU2OC4yOTI1NCw5MDkuNDc4ODcgNTY5LjY0MTI1LDg5NS4yMjQ5OCA1NzEuNDM3NSw4ODMuNzUgQyA1NzMuMjMzNzUsODcyLjI3NTAzIDU3NS4yODEyNSw4NjMuNDY4NzUgNTc1LjI4MTI1LDg2My40Njg3NSBMIDU4NC43MDQwMyw4NTkuODUzNTUgTCA1NzQuMjE4NzUsODU1Ljk2ODc1IEMgNTc0LjIxODc1LDg1NS45Njg3NSA1NjUuNzE5ODYsODQwLjY1ODY1IDU2Ni4xMjUsODIxLjE1NjI1IEMgNTY2LjE5NjExLDgxNy43MzMwOSA1NjcuOTYxMjYsODA4LjQyODIgNTcwLjg0Mzc1LDc5Ny45Njg3NSBDIDU3My43MjYyNCw3ODcuNTA5MyA1NzcuNjA4NDEsNzc1LjQxNjA0IDU4MS40Njg3NSw3NjQgQyA1ODQuNTEzMTQsNzU0Ljk5NjkyIDU4Ny4yNDkzOCw3NDcuMzk2NTUgNTg5LjgxMjUsNzQwLjMxMjUgeiIKKyAgICAgICBpZD0icGF0aDQxOTMiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY3NykiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3Nzc3Nzc3Nzc3NzY2NjY3NjY2NjY2NjY2Nzc2NjY2NjY2NjY2Njc3NzY2NjY2NjY2NjY2NjY2Njc2NjY2Nzc3Nzc3Nzc3Nzc3NzY2Njc3NzYyIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45MDQ1MzI3LDAuMjUwNjYyNiwwLjI1MDY2MjYsMC45MDQ1MzI3LDgyMi4yODkzMSwxMC45MzU4OSkiIC8+CisgICAgPGcKKyAgICAgICBpZD0iZzM2MTciCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYyMikiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiPgorICAgICAgPHBhdGgKKyAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjkwNDUzMjcsMC4yNTA2NjI2LDAuMjUwNjYyNiwwLjkwNDUzMjcsLTUyLjIwMDQ5OCw3NC4wOTcwNykiCisgICAgICAgICBpZD0icGF0aDQxOTUiCisgICAgICAgICBkPSJNIC0xNS42Njc1MSw4NDMuNDg4NTIgTCAtNjUuMTY0OTksODI3LjkzMjE3IEwgLTkyLjAzNTA0LDg4MC4yNTgwNyBMIC01MS4wMjI4NSw5MjUuNTEyOTEgTCAtMS41MjUzOCw4ODcuMzI5MTQgTCAtMTUuNjY3NTEsODQzLjQ4ODUyIHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjkwMjQpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjIgorICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNywtNDYuOTI4NDIsNzUuNTExMjg0KSIKKyAgICAgICAgIGlkPSJwYXRoNDE5NyIKKyAgICAgICAgIGQ9Ik0gMTE4LjcwNjQ4LDg1OS45MzA0OCBMIDYzLjU1MjE1Miw4MTMuMjYxNDQgTCAxOS43MTE1MzIsODUwLjAzMDk5IEwgNTMuNjUyNjYyLDkwMy43NzExIEwgNDAuMDU1ODQ4LDk4OS4yMzMxMyBMIDAuNjEwNDgyMjEsMTAxNy41MjUzIEwgLTQwLjQwMTcxOCwxMDI4LjgzOSBMIC00My4yMzAxMzgsMTA3NS41MDggTCAxMy4zMzg0MDIsMTEwMC45NjM5IEwgMzIuMjgyMzg5LDEwMzEuMzEzOSBMIDU1LjczODkzOSw5NzIuNDU3MjcgTCAxMDIuMDg2NDgsODk5Ljg0MjM2IEwgMTE4LjcwNjQ4LDg1OS45MzA0OCB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI5MDIwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyOTA0NCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIC03MC44MjE4NCw5MzIuNTgzOTcgTCAtMTAuMDEwNjYsOTA1LjcxMzkyIEwgOTAuMzk4NSw5MzYuODI2NjIgTCAyNi43NTg4OSw5NjcuOTM5MzEgTCAtNTUuMjY1NDksOTUwLjk2ODc1IEwgLTcwLjgyMTg0LDkzMi41ODM5NyB6IgorICAgICAgIGlkPSJwYXRoNDE5OSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45MDQ1MzI3LDAuMjUwNjYyNiwwLjI1MDY2MjYsMC45MDQ1MzI3LDIyOS4wNzE1OCwyMTEuNTExMjgpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41ODc3NTUwOTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDEwNSk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gNTgzLjA2MjUsNzE1Ljc1IEMgNTcwLjk1NjQxLDc1MC4xOTk3NCA1NTYuMzQ4LDc4NC4yODMzMyA1NTEuMzEyNSw4MjAuNTkzNzUgQyA1NTAuNDgwNDIsODM1LjUyMjQyIDU1NS45MDE2NSw4NDkuNzUzMTggNTYwLjE1NjI1LDg2My42NTYyNSBDIDU1NC4yNDAwMSw4OTAuODU3NTEgNTUwLjAxOTQ0LDkyMC41NTYyIDU2MS4zMTI1LDk0Ni43ODEyNSBDIDU3NC44Mjk2Nyw5ODQuOTQyMSA1OTYuMzEzOTcsMTAyMi40NjM0IDU5My43MzUyOSwxMDY0LjI0OTUgQyA1OTIuNzg2OTksMTA5My41NDM3IDU4NC43MjA4NSwxMTI1LjI0MzYgNTk5LjEyNSwxMTUyLjUzMTIgQyA2MDkuMzIzNjQsMTE3MS44NjYgNjMyLjI2NDU2LDExNzkuODQyOSA2NTMuMDkyODUsMTE4MC4xOTg4IEMgNjgwLjk1NTA0LDExODEuMzcyOSA3MDkuNTU1NDYsMTE2OC41NzcyIDcyNS4wOTM3NSwxMTQ0LjkzNzUgQyA3NDcuNjg5MjQsMTExNS41NjU4IDc2Ni44OTQyNiwxMDgzLjQ0MDIgNzgwLjMzMjQsMTA0OC44Nzc3IEMgNzk3LjIyMjkzLDEwMDMuMzcxNyA4MTAuMDA0Miw5NTYuMzE2OTggODE4LjI2NjQyLDkwOC40Nzg4IEMgODIwLjA5MDgyLDg5NS41Mzc3NCA4MjEuMzY3NSw4ODEuMDA4OTUgODEzLjY4NzUsODY5LjY1NjI1IEMgODEwLjI1NjM1LDg2Mi4zMTk5MyA4MTMuNzI5NTcsODU0LjA5NjExIDgxMy4wMDI5Myw4NDYuMzQ2NDggQyA4MTMuNjc2OTMsODIxLjM1MTgyIDgxNy4wMTUyNSw3OTUuNjgyNzIgODI5LjY1NjI1LDc3My43NSBDIDgxMS45MjMxMiw3ODAuMTk0NiA3OTQuNTgzNTcsNzkwLjMwOTcxIDc4NS42NTMxOCw4MDcuNjE0MjUgQyA3ODEuNzE4MSw4MTQuMzIzOCA3NzguMDQ4MzYsODIxLjE4ODM4IDc3NC4yODEyNSw4MjggQyA3NzAuNzMxMjYsNzk3Ljk4NTkyIDc3OC4wMDA4OCw3NjguMzUxNzIgNzgxLjA2MjUsNzM4LjcxODc1IEMgNzYwLjg5NjQ2LDc0Ny43NzMzOCA3NDQuMTg1NzgsNzY0LjM3Mzk3IDczNi44ODc1NSw3ODUuNDAwNzUgQyA3MzAuNTgyOTIsODAwLjk4MDc4IDcyOC4wODUzMyw4MTcuNzE3OTMgNzI2LjYyNSw4MzQuNDM3NSBDIDcxOC4zNzE2Niw4MzIuOTE4MjUgNzA5Ljk0MDUzLDgzMi4zMzU5NSA3MDEuNTYyNSw4MzIuOTM3NSBDIDcwMC41OTk0Miw3OTQuMjM5NjMgNzAxLjA5NTU0LDc1My41MzAzNSA3MTIuNTMxMjUsNzE3LjAzMTI1IEMgNjkzLjg1MDEyLDcyMy4yNDkwMSA2NzcuMzY1MDQsNzM1Ljc2Njc2IDY2Ni45MDMyMiw3NTIuNDE4NDggQyA2NTMuMDUwNjgsNzczLjI5ODI3IDY0NS42NDE4Miw3OTguMTcyNDMgNjQzLjg0Mzc1LDgyMy4wMzEyNSBDIDY0NC40MjkwOSw4MjcuMzU1NzkgNjQzLjc4MjQ5LDgzNC44NzEzNCA2MzcuNSw4MzIuOTA2MjUgQyA2MzIuMTY4ODIsODMyLjkyMzggNjI2Ljg3MDkyLDgzMy41ODUwOCA2MjEuNTYyNSw4MzQgQyA2MjIuNzEwMzQsNzk0LjYxODUyIDYxOC4yMjEwNiw3NTIuMzcxOCA1OTQuNSw3MTkuNzgxMjUgQyA1OTEuNDM5MjksNzE2LjE0NDA4IDU4OC44NjMxNSw3MTIuMDk2ODcgNTg1Ljg3NSw3MDguNDM3NSBDIDU4NC45Mzc1LDcxMC44NzUgNTg0LDcxMy4zMTI1IDU4My4wNjI1LDcxNS43NSB6IE0gNTkwLjgxMjUsNzI5LjU5Mzc1IEMgNjA5LjM3Nzc3LDc1OC44OTAwNCA2MTMuMjk1LDc5NC40MTM4NyA2MTIuOTM3NSw4MjguNDY4NzUgQyA2MTMuMTQxNTksODMzLjY0NDAxIDYxMi40MjA5NCw4NDAuMjk3OTUgNjEzLjA2MjUsODQ0LjUzMTI1IEMgNjI1LjM4MTA2LDgzOC40Mjg1IDYzOS44MDE2Miw4NDIuMDkxMzUgNjUyLjg0Mzc1LDg0Mi4zNDM3NSBDIDY1NS4xNjA4Nyw4NDMuNTY3IDY1Ni4wMzU4NSw4NDMuOTk2MTggNjU0Ljc1LDg0MC45Mzc1IEMgNjUwLjU4NTQ1LDgyNi45ODQ2NSA2NTIuOTAxNzIsODEyLjMyNDUgNjU2LjU1NTA0LDc5OC41Mjk4NiBDIDY2Mi45MjE5MSw3NzIuMjM5MjIgNjc3LjE4MzMyLDc0Ny40NDE4OCA2OTkuMzc1LDczMS41IEMgNjkwLjc1NzkxLDc2OC43MzcwNiA2OTMuNjU4NDIsODA4LjA2MTYxIDY5My4yODEyNSw4NDUuNDY4NzUgQyA3MDUuNTM0NjksODM4LjU1ODg1IDcyMC41NjAwNCw4NDIuMDIyNjIgNzMzLjMxMjUsODQ1LjIxODc1IEMgNzM2LjcwNDcyLDg0OC43NTM1NSA3MzUuNjAxODUsODQ0LjQ4OTI3IDczNS41LDg0MS40MDYyNSBDIDczNS4wMTY5MSw4MjAuMDM1NjcgNzM5LjYzMTMzLDc5OC4zMzY2MiA3NDkuMTg3NSw3NzkuMjUgQyA3NTUuMTUwMTYsNzY4LjU2MjczIDc2My40MzA4OCw3NTkuNDQ2MjEgNzcxLjYyNSw3NTAuMzc1IEMgNzYzLjc1MzQ0LDc4NC4yMTMxIDc2Mi40MjIxLDgxOS43MTA5MyA3NjguOTA2MjUsODUzLjg3NSBDIDc3MC42MzExLDg1Mi40NjM4MiA3NzMuNTEzMDYsODUzLjQyMDg2IDc3NC41NjI1LDg1My41IEMgNzg0LjI0NjE5LDgzMi4yNjMxOCA3OTAuOTEzNjIsODA4LjExOTM4IDgwOS40NTI2Niw3OTIuNzU4MTUgQyA4MTEuMzI1OTUsNzkyLjM4NjkzIDgwOC4wMDQ0OCw4MDEuMjgzMSA4MDcuOTY4NzUsODA0LjY1NjI1IEMgODA0LjQzMzg3LDgyNi41MDIwNiA4MDAuNzkzNTksODQ4Ljc5ODU5IDc5OS4xODQ1NCw4NzAuODc1MzYgQyA3OTAuNDAwNzUsODczLjIxNzA3IDgwMi4wMzI4OSw4NzMuMTk4OSA4MDIuNjUzMjksODc0LjkzNzg2IEMgODEwLjU3NjQsODg1LjUwMzY2IDgwNy4zMTYyOCw4OTkuMzQyNTggODA2LjI4NDk0LDkxMS4yOTEyIEMgNzk5LjIyMDg5LDk1Ni4zMjQ3NSA3ODQuMTQyNjMsOTk4LjY1MzE0IDc3MC4zMzEzOSwxMDQxLjk3MSBDIDc1OC4yNTY2MywxMDc0LjkyMDMgNzQyLjk1NzE5LDExMDAuODIzNSA3MjIuNDQzMzEsMTEyOS4xNzI1IEMgNzExLjQ5MDc0LDExNDIuNzIzOSA2OTkuMTk4NTksMTE1Ny4wMjM4IDY4MS41OTk1NiwxMTYxLjY3MjUgQyA2NjEuNDQzNTUsMTE2Ny45MTM4IDYzNy4zOTI4LDExNzIuNTQ5NCA2MTksMTE2MS43MTg4IEMgNjAxLjcxMDM0LDExNDkuMzc3NCA1OTcuOTc2MDcsMTEyNi4wMDk5IDU5OS43Mzc3NCwxMTA2LjAzMjQgQyA1OTkuNzg2NTMsMTA5MC4yMDYyIDYwNC42NzY2LDEwNzcuNTIwMyA2MDQuMTQ4MzQsMTA2Mi41NDA2IEMgNjAzLjYxMDEsMTA0Ny4yNzc3IDYwMS44NTY5OSwxMDMxLjk3NTkgNTk3LjYwNTczLDEwMTUuNjc0MyBDIDU5My4zNTQ0Nyw5OTkuMzcyNjggNTg4LjU2MjQ4LDk5MC43NTYzNiA1ODEuNDg2NjcsOTc0LjEwMDkyIEMgNTc0LjI0NTU2LDk1Ny4wNTYzNiA1NjYuNDE2NTIsOTM3LjM1MjI5IDU2My4yODEyNSw5MTcuODEyNSBDIDU2MS41MzE3Nyw4OTkuMTg1MzYgNTY2LjE3Mjk2LDg4MC42ODk4OCA1NjkuMDYyNSw4NjIuNTYyNSBDIDU3Mi4zNTg3Myw4NTkuNzI1NTQgNTY3LjQ2NDUxLDg1Ny4zNjU5MSA1NjYuNzUsODU0LjM3NSBDIDU1OS4xNDg4Nyw4MzcuMzU5OTIgNTU4LjM0MjUzLDgxNy42MDAxIDU2NC4wMDc2Niw3OTkuODE1MDIgQyA1NzEuMTM3ODYsNzc0Ljc0MjcyIDU3OS43Njg1Myw3NTAuMTgyNjEgNTg4LjY4NzUsNzI1LjY4NzUgQyA1ODkuMzk1ODMsNzI2Ljk4OTU4IDU5MC4xMDQxNyw3MjguMjkxNjcgNTkwLjgxMjUsNzI5LjU5Mzc1IHoiCisgICAgICAgaWQ9InBhdGg0MjAxIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Njenp6Y2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQxNzcpIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjkwNDUzMjcsMC4yNTA2NjI2LDAuMjUwNjYyNiwwLjkwNDUzMjcsODIyLjI4OTMxLDEwLjkzNTg5KSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyNDEzMCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDczNS4wNTYzNSw3MzMuMDM4MzQgTCA3MzcuODExNzcsNzU0LjEyNzE1IEwgNzgyLjIyMjgsNzM4LjczODk0IEwgNzg3LjA3MzQzLDcxNi4zNDkxOSBMIDc4My4xMzcyNiw2OTQuMjk2OTcgTCA3NjAuNjg1NjMsNjU3LjcwMzk2IEwgNzUyLjQwNTU5LDY4OC4wMDg5IEwgNzM1LjA1NjM1LDczMy4wMzgzNCB6IgorICAgICAgIGlkPSJwYXRoNDIwMyIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MzEpIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjkwNDUzMjcsMC4yNTA2NjI2LDAuMjUwNjYyNiwwLjkwNDUzMjcsOTk1LjI4NjQ2LDIzLjUzNDkzKSIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyNDE0MSk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDgzMS44MTMyMSw3MzAuMjk0NTIgTCA4NDcuNjM1NTgsNzQ1LjE5OTM4IEwgODY4LjQ5MDMxLDc0OC4wOTkzMiBMIDg2Ni45MDAwMiw3MDguMTczMzQgTCA4NzUuMjI1NjMsNjc3LjY2NDkyIEwgODY4LjA2MDY0LDY3MS4zMjM4NiBMIDg0Ni4zNjM5NSw2OTIuMjY2MjYgTCA4MzEuODEzMjEsNzMwLjI5NDUyIHoiCisgICAgICAgaWQ9InBhdGg0MjA1IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzMSkiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw5OTUuMjg2NDYsMjMuNTM0OTMpIiAvPgorICAgIDxnCisgICAgICAgaWQ9Imc4MzE3IgorICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI4MzMzKSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MzM4KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw3MTkuMjg2NDYsLTExMi40NjUwNykiCisgICAgICAgICBjbGlwLXBhdGg9Im5vbmUiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgorICAgICAgICAgaWQ9InBhdGg0MjA5IgorICAgICAgICAgZD0iTSA5NjQuMDAwMTIsNzU0LjY5NDg3IEwgOTgyLjQyODkzLDc2Mi4xNTk2NiBMIDk5MS41LDcyNS4xOTUxOSBMIDk3Ni42Mjk2OSw3MzAuMDM0MDUgTCA5NjQuMDAwMTIsNzU0LjY5NDg3IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICA8cmVjdAorICAgICAgICAgeT0iNzU3LjE5NTE5IgorICAgICAgICAgeD0iLTU1IgorICAgICAgICAgaGVpZ2h0PSIxNzciCisgICAgICAgICB3aWR0aD0iMTgyIgorICAgICAgICAgaWQ9InJlY3Q4MzE1IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9nPgorICAgIDxnCisgICAgICAgaWQ9Imc4MzQ2IgorICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI4MzU0KSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MzU5KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTA0NTMyNywwLjI1MDY2MjYsMC4yNTA2NjI2LDAuOTA0NTMyNyw3MTkuMjg2NDYsLTExMi40NjUwNykiCisgICAgICAgICBjbGlwLXBhdGg9Im5vbmUiCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiCisgICAgICAgICBpZD0icGF0aDQyMDciCisgICAgICAgICBkPSJNIDkxMC4xNDQ0MSw3NDYuMzE0MTUgTCA5NDIuNzU3MzYsNzUxLjQ4ODA4IEwgOTQyLjM5NjE3LDcyNy42MTE4OSBMIDk0OS41ODQ3LDY5Ny45Mjk2OCBMIDk0MS4xMzM1OCw2OTIuNjY2MDMgTCA5MTkuMzExNjQsNzE5LjE3NjggTCA5MTAuMTQ0NDEsNzQ2LjMxNDE1IHoiCisgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgICA8cmVjdAorICAgICAgICAgeT0iNjk2LjE5NTE5IgorICAgICAgICAgeD0iLTIyIgorICAgICAgICAgaGVpZ2h0PSIxNzYiCisgICAgICAgICB3aWR0aD0iMTY1IgorICAgICAgICAgaWQ9InJlY3Q4MzQ0IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI1O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CisgICAgPC9nPgorICA8L2c+CisgIDxnCisgICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICAgIGlkPSJsYXllcjE2IgorICAgICBpbmtzY2FwZTpsYWJlbD0iTGVmdCBGb290IgorICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhZGE0Njk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDEwMzYuMTY0LDEwNzEuODMzOCBDIDEwNDIuOTU4MSwxMDkwLjczNjYgMTA0Ni42NTc3LDExMDUuMTMzNSAxMDQ4LjA1NDMsMTEyMy4wNDU3IEMgMTA0OS40NTA5LDExNDAuOTU4IDEwNDQuMjcxNiwxMTc0Ljg0NjUgMTA0NS4xNTM4LDExOTMuNzAxOCBDIDEwNDYuMDM1NiwxMjEyLjU0NyAxMDUzLjI4NzUsMTIzMy44MDA4IDEwNzIuNDk4NCwxMjQyLjY3MDcgQyAxMDkxLjkxNzMsMTI1MS42MzY1IDExMjEuODE3NywxMjUyLjg4MiAxMTQ2LjYxODMsMTIzOS41MjUxIEMgMTE3MS40MTg5LDEyMjYuMTY4MSAxMjA0LjAxOTMsMTE2OS4xOTk2IDEyMTcuNTkyNSwxMTQyLjIxNjQgQyAxMjMxLjIxNjQsMTExNS4xMzI1IDEyNTYuMzUzNiwxMDI3LjcxOSAxMjYyLjI1MzMsOTkyLjQ0NzgxIEMgMTI2OC4xNTMxLDk1Ny4xNzY2IDEyNjQuODAzOSw5NTEuMTQ3MDQgMTI1Ny42MzU5LDk0My4zOTIzMiBDIDEyNjAuMjc2Miw5MTUuNTUyMTcgMTI1Ni4xMzYxLDg4OC40NTY4OSAxMjcwLjc0NTUsODU2LjIwNjE0IEMgMTI0MC40OTY1LDg2OC4wMzE4NCAxMjMzLjM2MzIsODk2LjM2Njg0IDEyMjIuNDI2Niw5MjEuNzExMjIgQyAxMjE0LjQyNTcsODcwLjc3ODI5IDEyMjIuNjM1OCw4NTAuNDM4MDMgMTIyNS43NDU1LDgyMC40OTE4NiBDIDExOTYuNjgwOCw4MzUuMjY5NzcgMTE4Mi44ODQsODY3LjYwNTg4IDExODAuNzQ1NSw5MTMuMzQ5IEMgMTE2OS44MjE2LDkxMi4wNDQ4IDExNTkuMzU0MSw5MDguOTE0NzcgMTE0Ny4xNzQxLDkxMi42MzQ3MSBDIDExNDYuOTEwMSw4NjYuNjExMzcgMTE0NS43MTA2LDgzNS43NDUzIDExNTYuMDg0Nyw3OTguNDI4MjIgQyAxMTAyLjgyOTMsODE5LjQ1NTA4IDEwOTMuMTM3NSw5MDUuMDIyMzIgMTEwMC4wMzEyLDkxMS4yMDYxNCBDIDEwODkuMTQ4NCw5MTEuNzQxMTQgMTA3OC42NjAyLDkwOS45MDg4NCAxMDY3LjE3NDEsOTE0LjA2MzI5IEMgMTA2Ny44MTMsODcxLjQ5MTk0IDEwNjYuOTEzNiw4MjkuMTU0NjggMTAzNy4xNzQxLDc5MS4yMDYxNCBDIDEwMzcuMTc0MSw3OTEuMjA2MTQgMTAwNi4yMTYxLDg3Mi4xMjg0OCAxMDA1Ljc0NTUsODk0Ljc3NzU3IEMgMTAwNS4yNzUsOTE3LjQyNjY2IDEwMTUuMTk3MSw5MzQuOTQzNDUgMTAxNS4xOTcxLDkzNC45NDM0NSBDIDEwMTUuMTk3MSw5MzQuOTQzNDUgMTAwNi42MjkxLDk3MS42ODM5NiAxMDA4Ljg5ODUsOTkzLjE3NTY4IEMgMTAxMS4xOTQ0LDEwMTQuOTE3MSAxMDI5LjM0MTQsMTA1Mi44NTE5IDEwMzYuMTY0LDEwNzEuODMzOCB6IgorICAgICAgIGlkPSJwYXRoODg0OCIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enpjY2NjY2NjY2NjemN6eiIgLz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyMzU4Nyk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDcxOS41LDczOC42OTUxOSBMIDczNy44MTE3Nyw3NTQuMTI3MTUgTCA3ODIuMjIyOCw3MzguNzM4OTQgTCA4MDUuNSw3MTMuMTk1MTkgTCA4MTYuOTYzOTcsNzMyLjQxNTg0IEwgODQ3LjYzNTU4LDc0NS4xOTkzOCBMIDg3Mi43MzI5NSw3NTAuOTI3NzUgTCA4OTIsNzIzLjE5NTE5IEwgOTA4LjAyMzA5LDc0Ny4wMjEyNiBMIDk0Nyw3NTIuMTk1MTkgTCA5NTcuMjQ1NDEsNzQ1Ljk5NjY3IEwgOTY0LjAwMDEyLDc1NC42OTQ4NyBMIDk4OS41LDc2NS42OTUxOSBMIDk5MS41LDcyNS4xOTUxOSBMIDk1NS45NDg2Niw3MTAuNjU3NiBMIDkyMy40NTU5MSw2ODkuMTMwNSBMIDg4My4wMDM4LDY3Ny42NjQ5MiBMIDg2MS42OTY2OCw2NjIuMTMxNDggTCA4NDAsNjg1LjE5NTE5IEwgNzU1LjAyODc4LDYzOC42MTIwOCBMIDcyMiw2NzYuNjk1MTkgTCA3MTkuNSw3MzguNjk1MTkgeiIKKyAgICAgICBpZD0icGF0aDM2MzUiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MzEpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxwYXRoCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDUwLjAzMTI1LDczLjg0Mzk2NCkiCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41ODc3NTUwOTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIwLjc5OTk5OTI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmU7ZmlsdGVyOnVybCgjZmlsdGVyMzg5OCk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgorICAgICAgIGQ9Ik0gNTg0LDY5Ni41IEwgNTc3LjQzNzUsNzEzLjY1NjI1IEMgNTc3LjQzNzUsNzEzLjY1NjI1IDU2OS42MjU5OCw3MzQuMDIxMTMgNTYxLjc1LDc1Ny4zMTI1IEMgNTU3LjgxMjAxLDc2OC45NTgxOCA1NTMuODY2OTgsNzgxLjM1Mzk1IDU1MC44MTI1LDc5Mi40Mzc1IEMgNTQ3Ljc1ODAyLDgwMy41MjEwNSA1NDUuNDc2NjQsODEyLjgxNzM2IDU0NS4zMTI1LDgyMC43MTg3NSBDIDU0NC45MTQ0Myw4MzkuODgwNzEgNTUxLjA1OTAzLDg1NS42MDcwNSA1NTQuMjUsODYyLjQ2ODc1IEMgNTUzLjQ3ODQ3LDg2Ni4wMjM5OCA1NTIuMjU4NjMsODcxLjkyMzA3IDU1MC45MDYyNSw4ODAuNTYyNSBDIDU0OC45ODU4Myw4OTIuODMwNzEgNTQ3LjE4Nzk4LDkwNy43MTY5MSA1NDguNTMxMjUsOTIwLjQzNzUgQyA1NDkuOTEzMzQsOTMzLjUyNTg1IDU1NS4zNDM0Nyw5NDguNjI1MTUgNTYxLjEyNSw5NjMuNDY4NzUgQyA1NjYuOTA2NTMsOTc4LjMxMjM1IDU3My4xNzkzNSw5OTIuNjk1ODYgNTc2LjM0Mzc1LDEwMDEuNSBDIDU4Mi45NzU4MSwxMDE5Ljk1MTkgNTg2LjMzNjcxLDEwMzMuMDc2MyA1ODcuNjU2MjUsMTA1MCBDIDU4OC4yMzc2LDEwNTcuNDU2MSA1ODcuNDEzOTgsMTA3MC4zMzYgNTg2LjQwNjI1LDEwODMuMzc1IEMgNTg1LjM5ODUyLDEwOTYuNDE0IDU4NC4yMTk2NCwxMTA5LjY3NjQgNTg0LjcxODc1LDExMjAuMzQzOCBDIDU4NS43MDc4NiwxMTQxLjQ4MzYgNTk0LjA0NjczLDExNjcuMTc4NSA2MTguMDkzNzUsMTE3OC4yODEyIEMgNjQwLjg2ODU4LDExODguNzk2NiA2NzMuNDIwNTcsMTE4OS45ODM0IDcwMS41MzEyNSwxMTc0Ljg0MzggQyA3MTcuNjkxMTcsMTE2Ni4xNDA0IDczMS42MDc1OSwxMTQ3Ljc0NjIgNzQ0LjkwNjI1LDExMjcuOTM3NSBDIDc1OC4yMDQ5MSwxMTA4LjEyODggNzY5Ljg3NTQyLDEwODYuODg0MSA3NzYuODQzNzUsMTA3My4wMzEyIEMgNzkyLjE5NjY3LDEwNDIuNTEgODE2LjIzNzI4LDk1Ny41NjcwMiA4MjIuNDY4NzUsOTIwLjMxMjUgQyA4MjUuNDg3MzQsOTAyLjI2NTk3IDgyNi4zOTA0MSw4OTEuMjQ2OTUgODI1LjA5Mzc1LDg4Mi4yODEyNSBDIDgyNC4xMTUyMiw4NzUuNTE1MjEgODIxLjI2NTU2LDg3MC4xMzM4NSA4MTguMjE4NzUsODY2LjA2MjUgQyA4MjAuMjYxNDksODM4LjU1NDU5IDgxNy40ODY2OCw4MTQuNjkzNzIgODMwLjE4NzUsNzg2LjY1NjI1IEwgODQwLjc1LDc2My4zNzUgTCA4MTYuOTM3NSw3NzIuNjg3NSBDIDc5OS40NDc3NSw3NzkuNTI1MDMgNzg4LjAzNTg2LDc5MS43MzI4NiA3ODAuMzQzNzUsODA0Ljc1IEMgNzgwLjAyMTI0LDgwNS4yOTU3NyA3NzkuNzgwNjEsODA1Ljg1Nzc2IDc3OS40Njg3NSw4MDYuNDA2MjUgQyA3NzkuNjkwNzgsNzgzLjg5MTA0IDc4My44NzY1OSw3NjguNzY4NjYgNzg2LjA2MjUsNzQ3LjcxODc1IEwgNzg4LjAzMTI1LDcyOC43MTg3NSBMIDc3MSw3MzcuMzc1IEMgNzQwLjQwNTUxLDc1Mi45MzA3MSA3MjUuMzA1MTEsNzg1LjU2ODIxIDcyMS4yODEyNSw4MjcuNTkzNzUgQyA3MTcuMDM1OTMsODI2Ljk2ODI4IDcxMi40NDk4NSw4MjYuNTc0MSA3MDcuNDY4NzUsODI2Ljc1IEMgNzA3LjE3NzI2LDc4Ny41Njk2NCA3MDcuMDcyNDYsNzU5LjcxMzE1IDcxNi4wNjI1LDcyNy4zNzUgTCA3MjEuNjU2MjUsNzA3LjI1IEwgNzAyLjIxODc1LDcxNC45MDYyNSBDIDY3MS4zMDkzOCw3MjcuMTEwMTkgNjU0LjM1OTIxLDc1Ni44MzY5OCA2NDUuNTkzNzUsNzgzLjI4MTI1IEMgNjQxLjIxMTAyLDc5Ni41MDMzOSA2MzguODQ3OTMsODA5LjA4MjQ2IDYzOCw4MTkuMjE4NzUgQyA2MzcuNzY3OTcsODIxLjk5MjQ4IDYzNy42ODg5NCw4MjQuNTMwMDcgNjM3LjY4NzUsODI2LjkzNzUgQyA2MzQuNDQ1NjMsODI2LjkwMTA5IDYzMS4yNjY5OCw4MjcuMDczMzkgNjI3LjYyNSw4MjcuNDM3NSBDIDYyNy42NjY2Miw3ODguNDMyNzcgNjI0LjE0MDc2LDc0Ny42ODMzNSA1OTUuMzQzNzUsNzEwLjkzNzUgTCA1ODQsNjk2LjUgeiBNIDU4OS44MTI1LDc0MC4zMTI1IEMgNjA2LjYxOTQxLDc3MC45NTYzMyA2MDcuMjg3MDEsODA0LjI3OTc4IDYwNi43NSw4NDAuMDYyNSBMIDYwNi41MzEyNSw4NTUuMTI1IEwgNjE4LjU2NjE4LDg0OC41ODU3OSBDIDYyNy4yMjgyMyw4NDUuNDUyNzcgNjM4LjEyNjc2LDg0OC4zNTgyNyA2NTAuNSw4NDcuNzUgTCA2NjUuMTc0NjUsODU3LjEwNjYgTCA2NTguODQzNzUsODMxLjMxMjUgQyA2NTguNzU0MSw4MzEuMDgyNTMgNjU4LjYyMzI5LDgzMC44OTU4MSA2NTguNTkzNzUsODMwLjU5Mzc1IEMgNjU4LjM5NDI0LDgyOC41NTM4OSA2NTguMzcxNDMsODI1LjEyMDY4IDY1OC43MTg3NSw4MjAuOTY4NzUgQyA2NTkuNDEzMzksODEyLjY2NDg5IDY2MS41MDgzMiw4MDEuMzgzNTEgNjY1LjM0Mzc1LDc4OS44MTI1IEMgNjcwLjQ5OTA3LDc3NC4yNTk1NiA2NzguODMxNzYsNzU4LjYyMDAyIDY5MC40Njg3NSw3NDcuMjgxMjUgQyA2ODUuNzg0OTQsNzc1LjkxOTIzIDY4Ny4yNTMxNiw4MDcuNTQwNTkgNjg3LjQ1NzExLDg0My4wODYzOSBMIDY4NC42OTExOCw4NTYuMzQ4MDMgTCA3MDAuMTg3NSw4NDguNzUgQyA3MDkuMjE2OSw4NDUuOTkyMjkgNzE3LjM3NjQ3LDg0OC40MDAwNCA3MjkuNDY4NzUsODQ5Ljg0Mzc1IEwgNzQyLjcxNTA3LDg1OS4yODc5OCBMIDc0MS4wOTM3NSw4NDAgQyA3NDIuNTQxNjgsODA5LjAyODIzIDc0OS4zMTUyNCw3ODYuMzIxOTIgNzYxLjgxMjUsNzcxLjEyNSBDIDc1OC44MjU2Miw3OTAuOTAzODQgNzU2LjM4MjA3LDgxMi45MDk4IDc2Mi4xMjUsODQ5LjQ2ODc1IEwgNzYzLjE5MDUyLDg1NS44NDE5MyBMIDc2MC4yNTIzNyw4NjcuMzU4NzggTCA3NzAuODY5NDgsODU5LjE5MDYgTCA3ODAuMDU5MjEsODY5LjQxMjU4IEwgNzc4LjUxMDkzLDg1OC45NDg5OCBMIDc4MS45Mzc1LDg1MiBDIDc4Ny42Mzg1Miw4MzguNzg4NTEgNzkyLjExMDMyLDgyNS43ODY2MyA3OTguMjgxMjUsODE1LjM0Mzc1IEMgNzk5LjI0MTExLDgxMy43MTk0MSA4MDAuMzEyNzgsODEyLjI3OTM5IDgwMS4zNDM3NSw4MTAuNzgxMjUgQyA3OTcuNjYzMDksODMxLjkzNjYgNzk4LjkxNjU5LDg1MC45ODk0IDc5Ny4yNSw4NjguNTYyNSBMIDc5Mi41Njk4Niw4NzYuMzY5NDggTCA3OTkuOTY4NzUsODc2LjU5Mzc1IEMgODAzLjE4ODgsODgwLjA3NzM2IDgwMy44MzYyNSw4ODAuNDQ0NDMgODA0LjUzMTI1LDg4NS4yNSBDIDgwNS4yMjYyNSw4OTAuMDU1NTcgODA0Ljg0OTg3LDg5OS42NTAzNSA4MDEuOTY4NzUsOTE2Ljg3NSBDIDc5Ni40MDA3Niw5NTAuMTYyOTIgNzcwLjE3NjAzLDEwNDAuMDQwOSA3NTguMjgxMjUsMTA2My42ODc1IEMgNzUxLjY3NjM0LDEwNzYuODE3OSA3NDAuMjUxMjcsMTA5Ny41ODMyIDcyNy42NTYyNSwxMTE2LjM0MzggQyA3MTUuMDYxMjMsMTEzNS4xMDQzIDcwMC4yOTY5MiwxMTUxLjg3NzYgNjkxLjY1NjI1LDExNTYuNTMxMiBDIDY3MC4xNjU3MywxMTY4LjEwNTQgNjQyLjg3NTQ1LDExNjYuNzkxNCA2MjYuODEyNSwxMTU5LjM3NSBDIDYxMi40Mzc2NCwxMTUyLjczOCA2MDYuMjc0MzgsMTEzNS45MjU2IDYwNS41LDExMTkuMzc1IEMgNjA1LjExNjg5LDExMTEuMTg3IDYwNi4xMTI3OSwxMDk4LjA2NTggNjA3LjEyNSwxMDg0Ljk2ODggQyA2MDguMTM3MjEsMTA3MS44NzE3IDYxOC40MTM5MSwxMDYyLjM5OCA2MjIuNTQ4MzksMTA0OC40MDYyIEMgNjI3LjkyMDY4LDEwMzAuMjI1NCA2MjEuMTAxNTIsMTAxMS44MTE4IDYxMC4wNDgzOSw5OTQuNDY4NzUgQyA2MDMuNTYxODQsOTg0LjI5MDk3IDU4Ni4wNzE1OSw5NzAuMjEwODUgNTgwLjUsOTU1LjkwNjI1IEMgNTc0LjkyODQxLDk0MS42MDE2NSA1NzAuMTMyNDksOTI2LjkwMzEgNTY5LjIxODc1LDkxOC4yNSBDIDU2OC4yOTI1NCw5MDkuNDc4ODcgNTY5LjY0MTI1LDg5NS4yMjQ5OCA1NzEuNDM3NSw4ODMuNzUgQyA1NzMuMjMzNzUsODcyLjI3NTAzIDU3NS4yODEyNSw4NjMuNDY4NzUgNTc1LjI4MTI1LDg2My40Njg3NSBMIDU4NC43MDQwMyw4NTkuODUzNTUgTCA1NzQuMjE4NzUsODU1Ljk2ODc1IEMgNTc0LjIxODc1LDg1NS45Njg3NSA1NjUuNzE5ODYsODQwLjY1ODY1IDU2Ni4xMjUsODIxLjE1NjI1IEMgNTY2LjE5NjExLDgxNy43MzMwOSA1NjcuOTYxMjYsODA4LjQyODIgNTcwLjg0Mzc1LDc5Ny45Njg3NSBDIDU3My43MjYyNCw3ODcuNTA5MyA1NzcuNjA4NDEsNzc1LjQxNjA0IDU4MS40Njg3NSw3NjQgQyA1ODQuNTEzMTQsNzU0Ljk5NjkyIDU4Ny4yNDkzOCw3NDcuMzk2NTUgNTg5LjgxMjUsNzQwLjMxMjUgeiIKKyAgICAgICBpZD0icGF0aDM2NjkiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY3NykiCisgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3Nzc2Nzc3Nzc3Nzc3Nzc3NzY2NjY3NjY2NjY2NjY2Nzc2NjY2NjY2NjY2Njc3NzY2NjY2NjY2NjY2NjY2Njc2NjY2Nzc3Nzc3Nzc3Nzc3NzY2Njc3NzYyIgLz4KKyAgICA8ZworICAgICAgIGlkPSJnMzYyOCIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjM2KSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgaWQ9InBhdGg4OTg4IgorICAgICAgICAgZD0iTSA4MjQuNDg2NTEsODE4LjQ4MjQyIEwgNzc0Ljk4OTAzLDgwMi45MjYwNyBMIDc0OC4xMTg5OCw4NTUuMjUxOTcgTCA3ODkuMTMxMTcsOTAwLjUwNjgxIEwgODM4LjYyODY0LDg2Mi4zMjMwNCBMIDgyNC40ODY1MSw4MTguNDgyNDIgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyOTAyNCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBpZD0icGF0aDg5OTAiCisgICAgICAgICBkPSJNIDk2NC40OTM2NSw4NTUuMjUxOTcgTCA5MDkuMzM5MzIsODA4LjU4MjkzIEwgODY1LjQ5ODcsODQ1LjM1MjQ4IEwgODk5LjQzOTgzLDg5OS4wOTI1OSBMIDkwNi41MTA4OSw5NjUuNTYwNjMgTCA4NTUuNTk5MjEsMTAwMC45MTYgTCA4MTQuNTg3MDEsMTAxMi4yMjk3IEwgODExLjc1ODU5LDEwNTguODk4NyBMIDg2OC4zMjcxMywxMDg0LjM1NDYgTCA5MzEuOTY2NzQsMTAwNy45ODcgTCA5NTYuMDA4MzcsOTEzLjIzNDczIEwgOTY0LjQ5MzY1LDg1NS4yNTE5NyB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI5MDIwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgICA8cGF0aAorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZmlsdGVyOnVybCgjZmlsdGVyOTA0NCk7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKKyAgICAgICBkPSJNIDEwNDUuMzMyMiwxMDQzLjU3NzkgTCAxMTA2LjE0MzQsMTAxNi43MDc4IEwgMTIwNi41NTI1LDEwNDcuODIwNSBMIDExNDIuOTEyOSwxMDc4LjkzMzIgTCAxMDYwLjg4ODUsMTA2MS45NjI2IEwgMTA0NS4zMzIyLDEwNDMuNTc3OSB6IgorICAgICAgIGlkPSJwYXRoODk5MiIgLz4KKyAgICA8cGF0aAorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1MC4wMzEyNSw3My44NDM5NjQpIgorICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNTg3NzU1MDk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyMC43OTk5OTkyNDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxODUpO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIKKyAgICAgICBkPSJNIDU4My4wNjI1LDcxNS43NSBDIDU3MC45NTY0MSw3NTAuMTk5NzQgNTU2LjM0OCw3ODQuMjgzMzMgNTUxLjMxMjUsODIwLjU5Mzc1IEMgNTUwLjQ4MDQyLDgzNS41MjI0MiA1NTUuOTAxNjUsODQ5Ljc1MzE4IDU2MC4xNTYyNSw4NjMuNjU2MjUgQyA1NTQuMjQwMDEsODkwLjg1NzUxIDU1MC4wMTk0NCw5MjAuNTU2MiA1NjEuMzEyNSw5NDYuNzgxMjUgQyA1NzQuODI5NjcsOTg0Ljk0MjEgNTk2LjMxMzk3LDEwMjIuNDYzNCA1OTMuNzM1MjksMTA2NC4yNDk1IEMgNTkyLjc4Njk5LDEwOTMuNTQzNyA1ODQuNzIwODUsMTEyNS4yNDM2IDU5OS4xMjUsMTE1Mi41MzEyIEMgNjA5LjMyMzY0LDExNzEuODY2IDYzMi4yNjQ1NiwxMTc5Ljg0MjkgNjUzLjA5Mjg1LDExODAuMTk4OCBDIDY4MC45NTUwNCwxMTgxLjM3MjkgNzA5LjU1NTQ2LDExNjguNTc3MiA3MjUuMDkzNzUsMTE0NC45Mzc1IEMgNzQ3LjY4OTI0LDExMTUuNTY1OCA3NjYuODk0MjYsMTA4My40NDAyIDc4MC4zMzI0LDEwNDguODc3NyBDIDc5Ny4yMjI5MywxMDAzLjM3MTcgODEwLjAwNDIsOTU2LjMxNjk4IDgxOC4yNjY0Miw5MDguNDc4OCBDIDgyMC4wOTA4Miw4OTUuNTM3NzQgODIxLjM2NzUsODgxLjAwODk1IDgxMy42ODc1LDg2OS42NTYyNSBDIDgxMC4yNTYzNSw4NjIuMzE5OTMgODEzLjcyOTU3LDg1NC4wOTYxMSA4MTMuMDAyOTMsODQ2LjM0NjQ4IEMgODEzLjY3NjkzLDgyMS4zNTE4MiA4MTcuMDE1MjUsNzk1LjY4MjcyIDgyOS42NTYyNSw3NzMuNzUgQyA4MTEuOTIzMTIsNzgwLjE5NDYgNzk0LjU4MzU3LDc5MC4zMDk3MSA3ODUuNjUzMTgsODA3LjYxNDI1IEMgNzgxLjcxODEsODE0LjMyMzggNzc4LjA0ODM2LDgyMS4xODgzOCA3NzQuMjgxMjUsODI4IEMgNzcwLjczMTI2LDc5Ny45ODU5MiA3NzguMDAwODgsNzY4LjM1MTcyIDc4MS4wNjI1LDczOC43MTg3NSBDIDc2MC44OTY0Niw3NDcuNzczMzggNzQ0LjE4NTc4LDc2NC4zNzM5NyA3MzYuODg3NTUsNzg1LjQwMDc1IEMgNzMwLjU4MjkyLDgwMC45ODA3OCA3MjguMDg1MzMsODE3LjcxNzkzIDcyNi42MjUsODM0LjQzNzUgQyA3MTguMzcxNjYsODMyLjkxODI1IDcwOS45NDA1Myw4MzIuMzM1OTUgNzAxLjU2MjUsODMyLjkzNzUgQyA3MDAuNTk5NDIsNzk0LjIzOTYzIDcwMS4wOTU1NCw3NTMuNTMwMzUgNzEyLjUzMTI1LDcxNy4wMzEyNSBDIDY5My44NTAxMiw3MjMuMjQ5MDEgNjc3LjM2NTA0LDczNS43NjY3NiA2NjYuOTAzMjIsNzUyLjQxODQ4IEMgNjUzLjA1MDY4LDc3My4yOTgyNyA2NDUuNjQxODIsNzk4LjE3MjQzIDY0My44NDM3NSw4MjMuMDMxMjUgQyA2NDQuNDI5MDksODI3LjM1NTc5IDY0My43ODI0OSw4MzQuODcxMzQgNjM3LjUsODMyLjkwNjI1IEMgNjMyLjE2ODgyLDgzMi45MjM4IDYyNi44NzA5Miw4MzMuNTg1MDggNjIxLjU2MjUsODM0IEMgNjIyLjcxMDM0LDc5NC42MTg1MiA2MTguMjIxMDYsNzUyLjM3MTggNTk0LjUsNzE5Ljc4MTI1IEMgNTkxLjQzOTI5LDcxNi4xNDQwOCA1ODguODYzMTUsNzEyLjA5Njg3IDU4NS44NzUsNzA4LjQzNzUgQyA1ODQuOTM3NSw3MTAuODc1IDU4NCw3MTMuMzEyNSA1ODMuMDYyNSw3MTUuNzUgeiBNIDU5MC44MTI1LDcyOS41OTM3NSBDIDYwOS4zNzc3Nyw3NTguODkwMDQgNjEzLjI5NSw3OTQuNDEzODcgNjEyLjkzNzUsODI4LjQ2ODc1IEMgNjEzLjE0MTU5LDgzMy42NDQwMSA2MTIuNDIwOTQsODQwLjI5Nzk1IDYxMy4wNjI1LDg0NC41MzEyNSBDIDYyNS4zODEwNiw4MzguNDI4NSA2MzkuODAxNjIsODQyLjA5MTM1IDY1Mi44NDM3NSw4NDIuMzQzNzUgQyA2NTUuMTYwODcsODQzLjU2NyA2NTYuMDM1ODUsODQzLjk5NjE4IDY1NC43NSw4NDAuOTM3NSBDIDY1MC41ODU0NSw4MjYuOTg0NjUgNjUyLjkwMTcyLDgxMi4zMjQ1IDY1Ni41NTUwNCw3OTguNTI5ODYgQyA2NjIuOTIxOTEsNzcyLjIzOTIyIDY3Ny4xODMzMiw3NDcuNDQxODggNjk5LjM3NSw3MzEuNSBDIDY5MC43NTc5MSw3NjguNzM3MDYgNjkzLjY1ODQyLDgwOC4wNjE2MSA2OTMuMjgxMjUsODQ1LjQ2ODc1IEMgNzA1LjUzNDY5LDgzOC41NTg4NSA3MjAuNTYwMDQsODQyLjAyMjYyIDczMy4zMTI1LDg0NS4yMTg3NSBDIDczNi43MDQ3Miw4NDguNzUzNTUgNzM1LjYwMTg1LDg0NC40ODkyNyA3MzUuNSw4NDEuNDA2MjUgQyA3MzUuMDE2OTEsODIwLjAzNTY3IDczOS42MzEzMyw3OTguMzM2NjIgNzQ5LjE4NzUsNzc5LjI1IEMgNzU1LjE1MDE2LDc2OC41NjI3MyA3NjMuNDMwODgsNzU5LjQ0NjIxIDc3MS42MjUsNzUwLjM3NSBDIDc2My43NTM0NCw3ODQuMjEzMSA3NjIuNDIyMSw4MTkuNzEwOTMgNzY4LjkwNjI1LDg1My44NzUgQyA3NzAuNjMxMSw4NTIuNDYzODIgNzczLjUxMzA2LDg1My40MjA4NiA3NzQuNTYyNSw4NTMuNSBDIDc4NC4yNDYxOSw4MzIuMjYzMTggNzkwLjkxMzYyLDgwOC4xMTkzOCA4MDkuNDUyNjYsNzkyLjc1ODE1IEMgODExLjMyNTk1LDc5Mi4zODY5MyA4MDguMDA0NDgsODAxLjI4MzEgODA3Ljk2ODc1LDgwNC42NTYyNSBDIDgwNC40MzM4Nyw4MjYuNTAyMDYgODA0LjY3MTU1LDg0OC44Mjk0OCA4MDMuMDYyNSw4NzAuOTA2MjUgQyA4MDEuNzUwMTIsODcyLjI4MzA0IDgwNS45MTA4NSw4NzMuMjI5NzkgODA2LjUzMTI1LDg3NC45Njg3NSBDIDgxNC40NTQzNiw4ODUuNTM0NTUgODA5LjY1NDE5LDg5OS44MDAyNCA4MDguNjIyODUsOTExLjc0ODg2IEMgODAxLjU1ODgsOTU2Ljc4MjQxIDc4Ni44NTczMiwxMDAwLjEyODIgNzczLjA0NjA4LDEwNDMuNDQ2IEMgNzYwLjk3MTMyLDEwNzYuMzk1MyA3NDIuMzI2MzgsMTEwNi41MjYgNzIxLjgxMjUsMTEzNC44NzUgQyA3MTAuODU5OTMsMTE0OC40MjY0IDY5OC41Njc3OCwxMTYyLjcyNjMgNjgwLjk2ODc1LDExNjcuMzc1IEMgNjYwLjgxMjc0LDExNzMuNjE2MyA2MzcuMzkyOCwxMTcyLjU0OTQgNjE5LDExNjEuNzE4OCBDIDYwMS43MTAzNCwxMTQ5LjM3NzQgNTk3Ljk3NjA3LDExMjYuMDA5OSA1OTkuNzM3NzQsMTEwNi4wMzI0IEMgNTk5Ljc4NjUzLDEwOTAuMjA2MiA2MDIuMTA5ODUsMTA3OC4yMzE2IDYwNy42NTUyMSwxMDYzLjIyNzEgQyA2MTMuMjAwNTYsMTA0OC4yMjI2IDYxMC4xMjYyNiwxMDMxLjg5NTQgNjA1Ljg3NSwxMDE1LjU5MzggQyA2MDEuNjIzNzQsOTk5LjI5MjIgNTkzLjY5NTk3LDk4OS4zMzM3OCA1ODQuMDUzNDIsOTczLjM4OTYzIEMgNTc0LjQxMDg3LDk1Ny40NDU0OCA1NjYuNDE2NTIsOTM3LjM1MjI5IDU2My4yODEyNSw5MTcuODEyNSBDIDU2MS41MzE3Nyw4OTkuMTg1MzYgNTY2LjE3Mjk2LDg4MC42ODk4OCA1NjkuMDYyNSw4NjIuNTYyNSBDIDU3Mi4zNTg3Myw4NTkuNzI1NTQgNTY3LjQ2NDUxLDg1Ny4zNjU5MSA1NjYuNzUsODU0LjM3NSBDIDU1OS4xNDg4Nyw4MzcuMzU5OTIgNTU4LjM0MjUzLDgxNy42MDAxIDU2NC4wMDc2Niw3OTkuODE1MDIgQyA1NzEuMTM3ODYsNzc0Ljc0MjcyIDU3OS43Njg1Myw3NTAuMTgyNjEgNTg4LjY4NzUsNzI1LjY4NzUgQyA1ODkuMzk1ODMsNzI2Ljk4OTU4IDU5MC4xMDQxNyw3MjguMjkxNjcgNTkwLjgxMjUsNzI5LjU5Mzc1IHoiCisgICAgICAgaWQ9InBhdGg0MTQ5IgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Njenp6Y2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQxNzcpIiAvPgorICAgIDxwYXRoCisgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtmaWx0ZXI6dXJsKCNmaWx0ZXI0MTMwKTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgorICAgICAgIGQ9Ik0gNzM1LjA1NjM1LDczMy4wMzgzNCBMIDczNy44MTE3Nyw3NTQuMTI3MTUgTCA3ODIuMjIyOCw3MzguNzM4OTQgTCA3ODcuMDczNDMsNzE2LjM0OTE5IEwgNzgzLjEzNzI2LDY5NC4yOTY5NyBMIDc2MC42ODU2Myw2NTcuNzAzOTYgTCA3NTIuNDA1NTksNjg4LjAwODkgTCA3MzUuMDU2MzUsNzMzLjAzODM0IHoiCisgICAgICAgaWQ9InBhdGgzOTAyIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2MiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzMSkiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiIC8+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxNDEpO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCisgICAgICAgZD0iTSA4MzEuODEzMjEsNzMwLjI5NDUyIEwgODQ3LjYzNTU4LDc0NS4xOTkzOCBMIDg2OC40OTAzMSw3NDguMDk5MzIgTCA4NjYuOTAwMDIsNzA4LjE3MzM0IEwgODc1LjIyNTYzLDY3Ny42NjQ5MiBMIDg2OC4wNjA2NCw2NzEuMzIzODYgTCA4NDYuMzYzOTUsNjkyLjI2NjI2IEwgODMxLjgxMzIxLDczMC4yOTQ1MiB6IgorICAgICAgIGlkPSJwYXRoNDEzNSIKKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIgorICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MzEpIgorICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NiwxMzYpIiAvPgorICAgIDxnCisgICAgICAgaWQ9Imc4MzY3IgorICAgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI4Mzc5KSIKKyAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGg4MzkyKSIKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYsMTM2KSI+CisgICAgICA8cGF0aAorICAgICAgICAgY2xpcC1wYXRoPSJub25lIgorICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgorICAgICAgICAgaWQ9InBhdGg0MTQ1IgorICAgICAgICAgZD0iTSA5MTAuMTQ0NDEsNzQ2LjMxNDE1IEwgOTQyLjc1NzM2LDc1MS40ODgwOCBMIDk0Mi4zOTYxNyw3MjcuNjExODkgTCA5NDkuNTg0Nyw2OTcuOTI5NjggTCA5NDEuMTMzNTgsNjkyLjY2NjAzIEwgOTE5LjMxMTY0LDcxOS4xNzY4IEwgOTEwLjE0NDQxLDc0Ni4zMTQxNSB6IgorICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgICAgPHJlY3QKKyAgICAgICAgIHk9IjY1MC4xOTA5OCIKKyAgICAgICAgIHg9Ijg3Ny41MTk1MyIKKyAgICAgICAgIGhlaWdodD0iMTcyLjUzNDA2IgorICAgICAgICAgd2lkdGg9IjEyMy4wMzY1OCIKKyAgICAgICAgIGlkPSJyZWN0ODM2NSIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgICA8ZworICAgICAgIGlkPSJnODQwMCIKKyAgICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyODQwNCkiCisgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODQxNykiCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc2LDEzNikiPgorICAgICAgPHBhdGgKKyAgICAgICAgIGNsaXAtcGF0aD0ibm9uZSIKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCisgICAgICAgICBpZD0icGF0aDQxNDciCisgICAgICAgICBkPSJNIDk2NC4wMDAxMiw3NTQuNjk0ODcgTCA5ODIuNDI4OTMsNzYyLjE1OTY2IEwgOTkxLjUsNzI1LjE5NTE5IEwgOTc2LjYyOTY5LDczMC4wMzQwNSBMIDk2NC4wMDAxMiw3NTQuNjk0ODcgeiIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KKyAgICAgIDxyZWN0CisgICAgICAgICB5PSI2NzcuMDYxMDQiCisgICAgICAgICB4PSI5MjQuODk1NjkiCisgICAgICAgICBoZWlnaHQ9IjEyNS4xNTc5IgorICAgICAgICAgd2lkdGg9IjE0Mi4xMjg0NiIKKyAgICAgICAgIGlkPSJyZWN0ODM5OCIKKyAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgorICAgIDwvZz4KKyAgPC9nPgorPC9zdmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvZ28udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2dvLnR4dAppbmRleCAyOTZmMGY3Li5hMmU2MjQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xvZ28udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbG9nby50eHQKQEAgLTEsMTMgKzEsNCBAQAotVGhpcyBpcyB0aGUgZnVsbC1jb2xvdXIgdmVyc2lvbiBvZiB0aGUgY3VycmVudGx5IHVub2ZmaWNpYWwgTGludXggbG9nbwotKCJjdXJyZW50bHkgdW5vZmZpY2lhbCIganVzdCBtZWFucyB0aGF0IHRoZXJlIGhhcyBiZWVuIG5vIHBhcGVyd29yayBhbmQKLXRoYXQgSSBoYXZlIG5vdCByZWFsbHkgYW5ub3VuY2VkIGl0IHlldCkuICBJdCB3YXMgY3JlYXRlZCBieSBMYXJyeSBFd2luZywKLWFuZCBpcyBmcmVlbHkgdXNhYmxlIGFzIGxvbmcgYXMgeW91IGFja25vd2xlZGdlIExhcnJ5IGFzIHRoZSBvcmlnaW5hbAotYXJ0aXN0LiAKK1R1eCBpcyB0YWtpbmcgYSB0aHJlZSBtb250aCBzYWJiYXRpY2FsIHRvIHdvcmsgYXMgYSBiYXJiZXIsIHNvIFR1eiBpcworc3RhbmRpbmcgaW4uICBIZSdzIHRha2VuIHBhaW5zIHRvIGVuc3VyZSB5b3UnbGwgaGFyZGx5IG5vdGljZS4KIAotTm90ZSB0aGF0IHRoZXJlIGFyZSBibGFjay1hbmQtd2hpdGUgdmVyc2lvbnMgb2YgdGhpcyBhdmFpbGFibGUgdGhhdAotc2NhbGUgZG93biB0byBzbWFsbGVyIHNpemVzIGFuZCBhcmUgYmV0dGVyIGZvciBsZXR0ZXJoZWFkcyBvciB3aGF0ZXZlcgoteW91IHdhbnQgdG8gdXNlIGl0IGZvcjogZm9yIHRoZSBmdWxsIHJhbmdlIG9mIGxvZ29zIHRha2UgYSBsb29rIGF0Ci1MYXJyeSdzIHdlYi1wYWdlOgotCi0JaHR0cDovL3d3dy5pc2MudGFtdS5lZHUvfmxld2luZy9saW51eC8KLQorSW1hZ2UgYnkgQW5kcmV3IE1jR293biBhbmQgSm9zaCBCdXNoLiAgSW1hZ2UgaXMgbGljZW5zZWQgQ0MgQlktU0EuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKaW5kZXggN2EzYmIxYS4uYjEzMmU0YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKQEAgLTE0MSw3ICsxNDEsOCBAQAogCURlZmF1bHQgQ0NJRCBmb3IgdGhlIHJlY2VpdmVyLXNlbmRlciBoYWxmLWNvbm5lY3Rpb247IHNlZSB0eF9jY2lkLgogCiBzZXFfd2luZG93ID0gMTAwCi0JVGhlIGluaXRpYWwgc2VxdWVuY2Ugd2luZG93IChzZWMuIDcuNS4yKS4KKwlUaGUgaW5pdGlhbCBzZXF1ZW5jZSB3aW5kb3cgKHNlYy4gNy41LjIpIG9mIHRoZSBzZW5kZXIuIFRoaXMgaW5mbHVlbmNlcworCXRoZSBsb2NhbCBhY2tubyB2YWxpZGl0eSBhbmQgdGhlIHJlbW90ZSBzZXFubyB2YWxpZGl0eSB3aW5kb3dzICg3LjUuMSkuCiAKIHR4X3FsZW4gPSA1CiAJVGhlIHNpemUgb2YgdGhlIHRyYW5zbWl0IGJ1ZmZlciBpbiBwYWNrZXRzLiBBIHZhbHVlIG9mIDAgY29ycmVzcG9uZHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggYzc3MTI3OC4uZWM1ZGUwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTIsNyArMiw3IEBACiAKIGlwX2ZvcndhcmQgLSBCT09MRUFOCiAJMCAtIGRpc2FibGVkIChkZWZhdWx0KQotCW5vdCAwIC0gZW5hYmxlZCAKKwlub3QgMCAtIGVuYWJsZWQKIAogCUZvcndhcmQgUGFja2V0cyBiZXR3ZWVuIGludGVyZmFjZXMuCiAKQEAgLTM2LDQ5ICszNiw0OSBAQAogSVAgRnJhZ21lbnRhdGlvbjoKIAogaXBmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgotCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4gCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbgogCWlwZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCiAJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXBmcmFnX2xvd190aHJlc2gKIAlpcyByZWFjaGVkLgotCQorCiBpcGZyYWdfbG93X3RocmVzaCAtIElOVEVHRVIKLQlTZWUgaXBmcmFnX2hpZ2hfdGhyZXNoCQorCVNlZSBpcGZyYWdfaGlnaF90aHJlc2gKIAogaXBmcmFnX3RpbWUgLSBJTlRFR0VSCi0JVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgkKKwlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCiAKIGlwZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCi0JUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZQogCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUCBmcmFnbWVudHMuCiAJRGVmYXVsdDogNjAwCiAKIGlwZnJhZ19tYXhfZGlzdCAtIElOVEVHRVIKLQlpcGZyYWdfbWF4X2Rpc3QgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aGljaCBkZWZpbmVzIHRoZSAKLQltYXhpbXVtICJkaXNvcmRlciIgd2hpY2ggaXMgYWxsb3dlZCBhbW9uZyBmcmFnbWVudHMgd2hpY2ggc2hhcmUgYSAKLQljb21tb24gSVAgc291cmNlIGFkZHJlc3MuIE5vdGUgdGhhdCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaXMgCi0Jbm90IHVudXN1YWwsIGJ1dCBpZiBhIGxhcmdlIG51bWJlciBvZiBmcmFnbWVudHMgYXJyaXZlIGZyb20gYSBzb3VyY2UgCi0JSVAgYWRkcmVzcyB3aGlsZSBhIHBhcnRpY3VsYXIgZnJhZ21lbnQgcXVldWUgcmVtYWlucyBpbmNvbXBsZXRlLCBpdCAKLQlwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgYmVsb25naW5nIHRvIHRoYXQgcXVldWUgCi0JaGF2ZSBiZWVuIGxvc3QuIFdoZW4gaXBmcmFnX21heF9kaXN0IGlzIHBvc2l0aXZlLCBhbiBhZGRpdGlvbmFsIGNoZWNrIAotCWlzIGRvbmUgb24gZnJhZ21lbnRzIGJlZm9yZSB0aGV5IGFyZSBhZGRlZCB0byBhIHJlYXNzZW1ibHkgcXVldWUgLSBpZiAKLQlpcGZyYWdfbWF4X2Rpc3QgKG9yIG1vcmUpIGZyYWdtZW50cyBoYXZlIGFycml2ZWQgZnJvbSBhIHBhcnRpY3VsYXIgSVAgCi0JYWRkcmVzcyBiZXR3ZWVuIGFkZGl0aW9ucyB0byBhbnkgSVAgZnJhZ21lbnQgcXVldWUgdXNpbmcgdGhhdCBzb3VyY2UgCi0JYWRkcmVzcywgaXQncyBwcmVzdW1lZCB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBpbiB0aGUgcXVldWUgYXJlIAotCWxvc3QuIFRoZSBleGlzdGluZyBmcmFnbWVudCBxdWV1ZSB3aWxsIGJlIGRyb3BwZWQsIGFuZCBhIG5ldyBvbmUgCisJaXBmcmFnX21heF9kaXN0IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2hpY2ggZGVmaW5lcyB0aGUKKwltYXhpbXVtICJkaXNvcmRlciIgd2hpY2ggaXMgYWxsb3dlZCBhbW9uZyBmcmFnbWVudHMgd2hpY2ggc2hhcmUgYQorCWNvbW1vbiBJUCBzb3VyY2UgYWRkcmVzcy4gTm90ZSB0aGF0IHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpcworCW5vdCB1bnVzdWFsLCBidXQgaWYgYSBsYXJnZSBudW1iZXIgb2YgZnJhZ21lbnRzIGFycml2ZSBmcm9tIGEgc291cmNlCisJSVAgYWRkcmVzcyB3aGlsZSBhIHBhcnRpY3VsYXIgZnJhZ21lbnQgcXVldWUgcmVtYWlucyBpbmNvbXBsZXRlLCBpdAorCXByb2JhYmx5IGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBiZWxvbmdpbmcgdG8gdGhhdCBxdWV1ZQorCWhhdmUgYmVlbiBsb3N0LiBXaGVuIGlwZnJhZ19tYXhfZGlzdCBpcyBwb3NpdGl2ZSwgYW4gYWRkaXRpb25hbCBjaGVjaworCWlzIGRvbmUgb24gZnJhZ21lbnRzIGJlZm9yZSB0aGV5IGFyZSBhZGRlZCB0byBhIHJlYXNzZW1ibHkgcXVldWUgLSBpZgorCWlwZnJhZ19tYXhfZGlzdCAob3IgbW9yZSkgZnJhZ21lbnRzIGhhdmUgYXJyaXZlZCBmcm9tIGEgcGFydGljdWxhciBJUAorCWFkZHJlc3MgYmV0d2VlbiBhZGRpdGlvbnMgdG8gYW55IElQIGZyYWdtZW50IHF1ZXVlIHVzaW5nIHRoYXQgc291cmNlCisJYWRkcmVzcywgaXQncyBwcmVzdW1lZCB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBpbiB0aGUgcXVldWUgYXJlCisJbG9zdC4gVGhlIGV4aXN0aW5nIGZyYWdtZW50IHF1ZXVlIHdpbGwgYmUgZHJvcHBlZCwgYW5kIGEgbmV3IG9uZQogCXN0YXJ0ZWQuIEFuIGlwZnJhZ19tYXhfZGlzdCB2YWx1ZSBvZiB6ZXJvIGRpc2FibGVzIHRoaXMgY2hlY2suCiAKIAlVc2luZyBhIHZlcnkgc21hbGwgdmFsdWUsIGUuZy4gMSBvciAyLCBmb3IgaXBmcmFnX21heF9kaXN0IGNhbgogCXJlc3VsdCBpbiB1bm5lY2Vzc2FyaWx5IGRyb3BwaW5nIGZyYWdtZW50IHF1ZXVlcyB3aGVuIG5vcm1hbAotCXJlb3JkZXJpbmcgb2YgcGFja2V0cyBvY2N1cnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcG9vciBhcHBsaWNhdGlvbiAKLQlwZXJmb3JtYW5jZS4gVXNpbmcgYSB2ZXJ5IGxhcmdlIHZhbHVlLCBlLmcuIDUwMDAwLCBpbmNyZWFzZXMgdGhlIAotCWxpa2VsaWhvb2Qgb2YgaW5jb3JyZWN0bHkgcmVhc3NlbWJsaW5nIElQIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZSAKKwlyZW9yZGVyaW5nIG9mIHBhY2tldHMgb2NjdXJzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvb3IgYXBwbGljYXRpb24KKwlwZXJmb3JtYW5jZS4gVXNpbmcgYSB2ZXJ5IGxhcmdlIHZhbHVlLCBlLmcuIDUwMDAwLCBpbmNyZWFzZXMgdGhlCisJbGlrZWxpaG9vZCBvZiBpbmNvcnJlY3RseSByZWFzc2VtYmxpbmcgSVAgZnJhZ21lbnRzIHRoYXQgb3JpZ2luYXRlCiAJZnJvbSBkaWZmZXJlbnQgSVAgZGF0YWdyYW1zLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uLgogCURlZmF1bHQ6IDY0CiAKIElORVQgcGVlciBzdG9yYWdlOgogCiBpbmV0X3BlZXJfdGhyZXNob2xkIC0gSU5URUdFUgotCVRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIHRoZSBzdG9yYWdlLiAgU3RhcnRpbmcgZnJvbSB0aGlzIHRocmVzaG9sZAkKKwlUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gIFN0YXJ0aW5nIGZyb20gdGhpcyB0aHJlc2hvbGQKIAllbnRyaWVzIHdpbGwgYmUgdGhyb3duIGFnZ3Jlc3NpdmVseS4gIFRoaXMgdGhyZXNob2xkIGFsc28gZGV0ZXJtaW5lcwogCWVudHJpZXMnIHRpbWUtdG8tbGl2ZSBhbmQgdGltZSBpbnRlcnZhbHMgYmV0d2VlbiBnYXJiYWdlIGNvbGxlY3Rpb24KIAlwYXNzZXMuICBNb3JlIGVudHJpZXMsIGxlc3MgdGltZS10by1saXZlLCBsZXNzIEdDIGludGVydmFsLgpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaW4gZWZmZWN0IHVuZGVyIGxvdyAob3IgYWJzZW50KSBtZW1vcnkgcHJlc3N1cmUgb24gdGhlIHBvb2wuCiAJTWVhc3VyZWQgaW4gc2Vjb25kcy4KIAotVENQIHZhcmlhYmxlczogCitUQ1AgdmFyaWFibGVzOgogCiBzb21heGNvbm4gLSBJTlRFR0VSCiAJTGltaXQgb2Ygc29ja2V0IGxpc3RlbigpIGJhY2tsb2csIGtub3duIGluIHVzZXJzcGFjZSBhcyBTT01BWENPTk4uCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogdGNwX3Jlb3JkZXJpbmcgLSBJTlRFR0VSCiAJTWF4aW1hbCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaW4gYSBUQ1Agc3RyZWFtLgotCURlZmF1bHQ6IDMJCisJRGVmYXVsdDogMwogCiB0Y3BfcmV0cmFuc19jb2xsYXBzZSAtIEJPT0xFQU4KIAlCdWctdG8tYnVnIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGJyb2tlbiBwcmludGVycy4KQEAgLTUyMSw3ICs1MjEsNyBAQAogCiBpcF9sb2NhbF9wb3J0X3JhbmdlIC0gMiBJTlRFR0VSUwogCURlZmluZXMgdGhlIGxvY2FsIHBvcnQgcmFuZ2UgdGhhdCBpcyB1c2VkIGJ5IFRDUCBhbmQgVURQIHRvCi0JY2hvb3NlIHRoZSBsb2NhbCBwb3J0LiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBmaXJzdCwgdGhlIAorCWNob29zZSB0aGUgbG9jYWwgcG9ydC4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgZmlyc3QsIHRoZQogCXNlY29uZCB0aGUgbGFzdCBsb2NhbCBwb3J0IG51bWJlci4gRGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uCiAJYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbToKIAk+IDEyOE1iIDMyNzY4LTYxMDAwCkBAIC01OTQsMTIgKzU5NCwxMiBAQAogCiAJSWYgemVybywgaWNtcCBlcnJvciBtZXNzYWdlcyBhcmUgc2VudCB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YKIAl0aGUgZXhpdGluZyBpbnRlcmZhY2UuCi0gCisKIAlJZiBub24temVybywgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBzZW50IHdpdGggdGhlIHByaW1hcnkgYWRkcmVzcyBvZgogCXRoZSBpbnRlcmZhY2UgdGhhdCByZWNlaXZlZCB0aGUgcGFja2V0IHRoYXQgY2F1c2VkIHRoZSBpY21wIGVycm9yLgogCVRoaXMgaXMgdGhlIGJlaGF2aW91ciBuZXR3b3JrIG1hbnkgYWRtaW5pc3RyYXRvcnMgd2lsbCBleHBlY3QgZnJvbQogCWEgcm91dGVyLiBBbmQgaXQgY2FuIG1ha2UgZGVidWdnaW5nIGNvbXBsaWNhdGVkIG5ldHdvcmsgbGF5b3V0cwotCW11Y2ggZWFzaWVyLiAKKwltdWNoIGVhc2llci4KIAogCU5vdGUgdGhhdCBpZiBubyBwcmltYXJ5IGFkZHJlc3MgZXhpc3RzIGZvciB0aGUgaW50ZXJmYWNlIHNlbGVjdGVkLAogCXRoZW4gdGhlIHByaW1hcnkgYWRkcmVzcyBvZiB0aGUgZmlyc3Qgbm9uLWxvb3BiYWNrIGludGVyZmFjZSB0aGF0CkBAIC02MTEsNyArNjExLDcgQEAKIAlDaGFuZ2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBncm91cHMgd2UgY2FuIHN1YnNjcmliZSB0by4KIAlEZWZhdWx0OiAyMAogCi1jb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUgImludGVyZmFjZSIgaXMgCitjb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUgImludGVyZmFjZSIgaXMKIAkJICB0aGUgbmFtZSBvZiB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlKQogY29uZi9hbGwvKgkgIGlzIHNwZWNpYWwsIGNoYW5nZXMgdGhlIHNldHRpbmdzIGZvciBhbGwgaW50ZXJmYWNlcwogCkBAIC02MjUsMTEgKzYyNSwxMSBAQAogYWNjZXB0X3JlZGlyZWN0cyAtIEJPT0xFQU4KIAlBY2NlcHQgSUNNUCByZWRpcmVjdCBtZXNzYWdlcy4KIAlhY2NlcHRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZjoKLQktIGJvdGggY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBhcmUgVFJVRSBpbiB0aGUgY2FzZSBmb3J3YXJkaW5nCi0JICBmb3IgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkCisJLSBib3RoIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgYXJlIFRSVUUgaW4gdGhlIGNhc2UKKwkgIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAogCW9yCi0JLSBhdCBsZWFzdCBvbmUgb2YgY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIGluIHRoZSBjYXNlCi0JICBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkCisJLSBhdCBsZWFzdCBvbmUgb2YgY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIGluIHRoZQorCSAgY2FzZSBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkCiAJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQogCWRlZmF1bHQgVFJVRSAoaG9zdCkKIAkJRkFMU0UgKHJvdXRlcikKQEAgLTY0MCw4ICs2NDAsOCBAQAogbWNfZm9yd2FyZGluZyAtIEJPT0xFQU4KIAlEbyBtdWx0aWNhc3Qgcm91dGluZy4gVGhlIGtlcm5lbCBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIENPTkZJR19NUk9VVEUKIAlhbmQgYSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24gaXMgcmVxdWlyZWQuCi0JY29uZi9hbGwvbWNfZm9yd2FyZGluZyBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIG11bHRpY2FzdCByb3V0aW5nCi0JZm9yIHRoZSBpbnRlcmZhY2UKKwljb25mL2FsbC9tY19mb3J3YXJkaW5nIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgbXVsdGljYXN0CisJcm91dGluZwlmb3IgdGhlIGludGVyZmFjZQogCiBtZWRpdW1faWQgLSBJTlRFR0VSCiAJSW50ZWdlciB2YWx1ZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdGhlIGRldmljZXMgYnkgdGhlIG1lZGl1bSB0aGV5CkBAIC02NDksNyArNjQ5LDcgQEAKIAl0aGUgYnJvYWRjYXN0IHBhY2tldHMgYXJlIHJlY2VpdmVkIG9ubHkgb24gb25lIG9mIHRoZW0uCiAJVGhlIGRlZmF1bHQgdmFsdWUgMCBtZWFucyB0aGF0IHRoZSBkZXZpY2UgaXMgdGhlIG9ubHkgaW50ZXJmYWNlCiAJdG8gaXRzIG1lZGl1bSwgdmFsdWUgb2YgLTEgbWVhbnMgdGhhdCBtZWRpdW0gaXMgbm90IGtub3duLgotCQorCiAJQ3VycmVudGx5LCBpdCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgcHJveHlfYXJwIGJlaGF2aW9yOgogCXRoZSBwcm94eV9hcnAgZmVhdHVyZSBpcyBlbmFibGVkIGZvciBwYWNrZXRzIGZvcndhcmRlZCBiZXR3ZWVuCiAJdHdvIGRldmljZXMgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG1lZGlhLgpAQCAtNjk5LDE2ICs2OTksMjIgQEAKIAlkZWZhdWx0IFRSVUUgKHJvdXRlcikKIAkJRkFMU0UgKGhvc3QpCiAKLXJwX2ZpbHRlciAtIEJPT0xFQU4KLQkxIC0gZG8gc291cmNlIHZhbGlkYXRpb24gYnkgcmV2ZXJzZWQgcGF0aCwgYXMgc3BlY2lmaWVkIGluIFJGQzE4MTIKLQkgICAgUmVjb21tZW5kZWQgb3B0aW9uIGZvciBzaW5nbGUgaG9tZWQgaG9zdHMgYW5kIHN0dWIgbmV0d29yawotCSAgICByb3V0ZXJzLiBDb3VsZCBjYXVzZSB0cm91YmxlcyBmb3IgY29tcGxpY2F0ZWQgKG5vdCBsb29wIGZyZWUpCi0JICAgIG5ldHdvcmtzIHJ1bm5pbmcgYSBzbG93IHVucmVsaWFibGUgcHJvdG9jb2wgKHNvcnQgb2YgUklQKSwKLQkgICAgb3IgdXNpbmcgc3RhdGljIHJvdXRlcy4KLQorcnBfZmlsdGVyIC0gSU5URUdFUgogCTAgLSBObyBzb3VyY2UgdmFsaWRhdGlvbi4KKwkxIC0gU3RyaWN0IG1vZGUgYXMgZGVmaW5lZCBpbiBSRkMzNzA0IFN0cmljdCBSZXZlcnNlIFBhdGgKKwkgICAgRWFjaCBpbmNvbWluZyBwYWNrZXQgaXMgdGVzdGVkIGFnYWluc3QgdGhlIEZJQiBhbmQgaWYgdGhlIGludGVyZmFjZQorCSAgICBpcyBub3QgdGhlIGJlc3QgcmV2ZXJzZSBwYXRoIHRoZSBwYWNrZXQgY2hlY2sgd2lsbCBmYWlsLgorCSAgICBCeSBkZWZhdWx0IGZhaWxlZCBwYWNrZXRzIGFyZSBkaXNjYXJkZWQuCisJMiAtIExvb3NlIG1vZGUgYXMgZGVmaW5lZCBpbiBSRkMzNzA0IExvb3NlIFJldmVyc2UgUGF0aAorCSAgICBFYWNoIGluY29taW5nIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIGlzIGFsc28gdGVzdGVkIGFnYWluc3QgdGhlIEZJQgorCSAgICBhbmQgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCByZWFjaGFibGUgdmlhIGFueSBpbnRlcmZhY2UKKwkgICAgdGhlIHBhY2tldCBjaGVjayB3aWxsIGZhaWwuCiAKLQljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGRvIHNvdXJjZSB2YWxpZGF0aW9uCisJQ3VycmVudCByZWNvbW1lbmRlZCBwcmFjdGljZSBpbiBSRkMzNzA0IGlzIHRvIGVuYWJsZSBzdHJpY3QgbW9kZQorCXRvIHByZXZlbnQgSVAgc3Bvb2ZpbmcgZnJvbSBERG9zIGF0dGFja3MuIElmIHVzaW5nIGFzeW1tZXRyaWMgcm91dGluZworCW9yIG90aGVyIGNvbXBsaWNhdGVkIHJvdXRpbmcsIHRoZW4gbG9vc2UgbW9kZSBpcyByZWNvbW1lbmRlZC4KKworCWNvbmYvYWxsL3JwX2ZpbHRlciBtdXN0IGFsc28gYmUgc2V0IHRvIG5vbi16ZXJvIHRvIGRvIHNvdXJjZSB2YWxpZGF0aW9uCiAJb24gdGhlIGludGVyZmFjZQogCiAJRGVmYXVsdCB2YWx1ZSBpcyAwLiBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdApAQCAtNzgyLDYgKzc4OCwxMiBAQAogCVRoZSBtYXggdmFsdWUgZnJvbSBjb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfaWdub3JlIGlzIHVzZWQKIAl3aGVuIEFSUCByZXF1ZXN0IGlzIHJlY2VpdmVkIG9uIHRoZSB7aW50ZXJmYWNlfQogCithcnBfbm90aWZ5IC0gQk9PTEVBTgorCURlZmluZSBtb2RlIGZvciBub3RpZmljYXRpb24gb2YgYWRkcmVzcyBhbmQgZGV2aWNlIGNoYW5nZXMuCisJMCAtIChkZWZhdWx0KTogZG8gbm90aGluZworCTEgLSBHZW5lcmF0ZSBncmF0dWl0b3VzIGFycCByZXBsaWVzIHdoZW4gZGV2aWNlIGlzIGJyb3VnaHQgdXAKKwkgICAgb3IgaGFyZHdhcmUgYWRkcmVzcyBjaGFuZ2VzLgorCiBhcnBfYWNjZXB0IC0gQk9PTEVBTgogCURlZmluZSBiZWhhdmlvciB3aGVuIGdyYXR1aXRvdXMgYXJwIHJlcGxpZXMgYXJlIHJlY2VpdmVkOgogCTAgLSBkcm9wIGdyYXR1aXRvdXMgYXJwIGZyYW1lcwpAQCAtODIzLDcgKzgzNSw3IEBACiAKIGJpbmR2Nm9ubHkgLSBCT09MRUFOCiAJRGVmYXVsdCB2YWx1ZSBmb3IgSVBWNl9WNk9OTFkgc29ja2V0IG9wdGlvbiwKLQl3aGljaCByZXN0cmljdHMgdXNlIG9mIHRoZSBJUHY2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb24gCisJd2hpY2ggcmVzdHJpY3RzIHVzZSBvZiB0aGUgSVB2NiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9uCiAJb25seS4KIAkJVFJVRTogZGlzYWJsZSBJUHY0LW1hcHBlZCBhZGRyZXNzIGZlYXR1cmUKIAkJRkFMU0U6IGVuYWJsZSBJUHY0LW1hcHBlZCBhZGRyZXNzIGZlYXR1cmUKQEAgLTgzMywxOSArODQ1LDE5IEBACiBJUHY2IEZyYWdtZW50YXRpb246CiAKIGlwNmZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCi0JTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQdjYgZnJhZ21lbnRzLiBXaGVuIAorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUHY2IGZyYWdtZW50cy4gV2hlbgogCWlwNmZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAogCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwNmZyYWdfbG93X3RocmVzaAogCWlzIHJlYWNoZWQuCi0JCisKIGlwNmZyYWdfbG93X3RocmVzaCAtIElOVEVHRVIKLQlTZWUgaXA2ZnJhZ19oaWdoX3RocmVzaAkKKwlTZWUgaXA2ZnJhZ19oaWdoX3RocmVzaAogCiBpcDZmcmFnX3RpbWUgLSBJTlRFR0VSCiAJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVB2NiBmcmFnbWVudCBpbiBtZW1vcnkuCiAKIGlwNmZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgotCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUKIAlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVB2NiBmcmFnbWVudHMuCiAJRGVmYXVsdDogNjAwCiAKQEAgLTg1NCwxNyArODY2LDE3IEBACiAKIAogY29uZi9hbGwvKjoKLQlDaGFuZ2UgYWxsIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgc2V0dGluZ3MuICAKKwlDaGFuZ2UgYWxsIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgc2V0dGluZ3MuCiAKIAlbWFhYOiAgT3RoZXIgc3BlY2lhbCBmZWF0dXJlcyB0aGFuIGZvcndhcmRpbmc/XQogCiBjb25mL2FsbC9mb3J3YXJkaW5nIC0gQk9PTEVBTgotCUVuYWJsZSBnbG9iYWwgSVB2NiBmb3J3YXJkaW5nIGJldHdlZW4gYWxsIGludGVyZmFjZXMuICAKKwlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLgogCi0JSVB2NCBhbmQgSVB2NiB3b3JrIGRpZmZlcmVudGx5IGhlcmU7IGUuZy4gbmV0ZmlsdGVyIG11c3QgYmUgdXNlZCAKKwlJUHY0IGFuZCBJUHY2IHdvcmsgZGlmZmVyZW50bHkgaGVyZTsgZS5nLiBuZXRmaWx0ZXIgbXVzdCBiZSB1c2VkCiAJdG8gY29udHJvbCB3aGljaCBpbnRlcmZhY2VzIG1heSBmb3J3YXJkIHBhY2tldHMgYW5kIHdoaWNoIG5vdC4KIAotCVRoaXMgYWxzbyBzZXRzIGFsbCBpbnRlcmZhY2VzJyBIb3N0L1JvdXRlciBzZXR0aW5nIAorCVRoaXMgYWxzbyBzZXRzIGFsbCBpbnRlcmZhY2VzJyBIb3N0L1JvdXRlciBzZXR0aW5nCiAJJ2ZvcndhcmRpbmcnIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCiAKIAlUaGlzIHJlZmVycmVkIHRvIGFzIGdsb2JhbCBmb3J3YXJkaW5nLgpAQCAtODc1LDEyICs4ODcsMTIgQEAKIGNvbmYvaW50ZXJmYWNlLyo6CiAJQ2hhbmdlIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZS4KIAotCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQgCisJVGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3VyIGZvciBjZXJ0YWluIHNldHRpbmdzIGlzIGRpZmZlcmVudAogCWRlcGVuZGluZyBvbiB3aGV0aGVyIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvciBub3QuCiAKIGFjY2VwdF9yYSAtIEJPT0xFQU4KIAlBY2NlcHQgUm91dGVyIEFkdmVydGlzZW1lbnRzOyBhdXRvY29uZmlndXJlIHVzaW5nIHRoZW0uCi0JCisKIAlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZC4KIAkJCSAgICBkaXNhYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQuCiAKQEAgLTkyNiw3ICs5MzgsNyBAQAogCURlZmF1bHQ6IDAKIAogYXV0b2NvbmYgLSBCT09MRUFOCi0JQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlciAKKwlBdXRvY29uZmlndXJlIGFkZHJlc3NlcyB1c2luZyBQcmVmaXggSW5mb3JtYXRpb24gaW4gUm91dGVyCiAJQWR2ZXJ0aXNlbWVudHMuCiAKIAlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgYWNjZXB0X3JhX3BpbmZvIGlzIGVuYWJsZWQuCkBAIC05MzUsMTEgKzk0NywxMSBAQAogZGFkX3RyYW5zbWl0cyAtIElOVEVHRVIKIAlUaGUgYW1vdW50IG9mIER1cGxpY2F0ZSBBZGRyZXNzIERldGVjdGlvbiBwcm9iZXMgdG8gc2VuZC4KIAlEZWZhdWx0OiAxCi0JCi1mb3J3YXJkaW5nIC0gQk9PTEVBTgotCUNvbmZpZ3VyZSBpbnRlcmZhY2Utc3BlY2lmaWMgSG9zdC9Sb3V0ZXIgYmVoYXZpb3VyLiAgCiAKLQlOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNldHRpbmcgb24gYWxsIAorZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4KKworCU5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGhhdmUgdGhlIHNhbWUgc2V0dGluZyBvbiBhbGwKIAlpbnRlcmZhY2VzOyBtaXhlZCByb3V0ZXIvaG9zdCBzY2VuYXJpb3MgYXJlIHJhdGhlciB1bmNvbW1vbi4KIAogCUZBTFNFOgpAQCAtOTQ4LDEzICs5NjAsMTMgQEAKIAogCTEuIElzUm91dGVyIGZsYWcgaXMgbm90IHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCiAJMi4gUm91dGVyIFNvbGljaXRhdGlvbnMgYXJlIGJlaW5nIHNlbnQgd2hlbiBuZWNlc3NhcnkuCi0JMy4gSWYgYWNjZXB0X3JhIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUm91dGVyIAorCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlcgogCSAgIEFkdmVydGlzZW1lbnRzIChhbmQgZG8gYXV0b2NvbmZpZ3VyYXRpb24pLgogCTQuIElmIGFjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSZWRpcmVjdHMuCiAKIAlUUlVFOgogCi0JSWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLCBSb3V0ZXIgYmVoYXZpb3VyIGlzIGFzc3VtZWQuIAorCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLgogCVRoaXMgbWVhbnMgZXhhY3RseSB0aGUgcmV2ZXJzZSBmcm9tIHRoZSBhYm92ZToKIAogCTEuIElzUm91dGVyIGZsYWcgaXMgc2V0IGluIE5laWdoYm91ciBBZHZlcnRpc2VtZW50cy4KQEAgLTk4OSw3ICsxMDAxLDcgQEAKIAlEZWZhdWx0OiA0CiAKIHJvdXRlcl9zb2xpY2l0YXRpb25zIC0gSU5URUdFUgotCU51bWJlciBvZiBSb3V0ZXIgU29saWNpdGF0aW9ucyB0byBzZW5kIHVudGlsIGFzc3VtaW5nIG5vIAorCU51bWJlciBvZiBSb3V0ZXIgU29saWNpdGF0aW9ucyB0byBzZW5kIHVudGlsIGFzc3VtaW5nIG5vCiAJcm91dGVycyBhcmUgcHJlc2VudC4KIAlEZWZhdWx0OiAzCiAKQEAgLTEwMTMsMTEgKzEwMjUsMTEgQEAKIAogbWF4X2Rlc3luY19mYWN0b3IgLSBJTlRFR0VSCiAJTWF4aW11bSB2YWx1ZSBmb3IgREVTWU5DX0ZBQ1RPUiwgd2hpY2ggaXMgYSByYW5kb20gdmFsdWUKLQl0aGF0IGVuc3VyZXMgdGhhdCBjbGllbnRzIGRvbid0IHN5bmNocm9uaXplIHdpdGggZWFjaCAKKwl0aGF0IGVuc3VyZXMgdGhhdCBjbGllbnRzIGRvbid0IHN5bmNocm9uaXplIHdpdGggZWFjaAogCW90aGVyIGFuZCBnZW5lcmF0ZSBuZXcgYWRkcmVzc2VzIGF0IGV4YWN0bHkgdGhlIHNhbWUgdGltZS4KIAl2YWx1ZSBpcyBpbiBzZWNvbmRzLgogCURlZmF1bHQ6IDYwMAotCQorCiByZWdlbl9tYXhfcmV0cnkgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZlIHVwIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUKIAl2YWxpZCB0ZW1wb3JhcnkgYWRkcmVzc2VzLgpAQCAtMTAyNSwxMyArMTAzNywxNSBAQAogCiBtYXhfYWRkcmVzc2VzIC0gSU5URUdFUgogCU51bWJlciBvZiBtYXhpbXVtIGFkZHJlc3NlcyBwZXIgaW50ZXJmYWNlLiAgMCBkaXNhYmxlcyBsaW1pdGF0aW9uLgotCUl0IGlzIHJlY29tbWVuZGVkIG5vdCBzZXQgdG9vIGxhcmdlIHZhbHVlIChvciAwKSBiZWNhdXNlIGl0IHdvdWxkIAotCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mIAorCUl0IGlzIHJlY29tbWVuZGVkIG5vdCBzZXQgdG9vIGxhcmdlIHZhbHVlIChvciAwKSBiZWNhdXNlIGl0IHdvdWxkCisJYmUgdG9vIGVhc3kgd2F5IHRvIGNyYXNoIGtlcm5lbCB0byBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YKIAlhdXRvY29uZmlndXJlZCBhZGRyZXNzZXMuCiAJRGVmYXVsdDogMTYKIAogZGlzYWJsZV9pcHY2IC0gQk9PTEVBTgotCURpc2FibGUgSVB2NiBvcGVyYXRpb24uCisJRGlzYWJsZSBJUHY2IG9wZXJhdGlvbi4gIElmIGFjY2VwdF9kYWQgaXMgc2V0IHRvIDIsIHRoaXMgdmFsdWUKKwl3aWxsIGJlIGR5bmFtaWNhbGx5IHNldCB0byBUUlVFIGlmIERBRCBmYWlscyBmb3IgdGhlIGxpbmstbG9jYWwKKwlhZGRyZXNzLgogCURlZmF1bHQ6IEZBTFNFIChlbmFibGUgSVB2NiBvcGVyYXRpb24pCiAKIGFjY2VwdF9kYWQgLSBJTlRFR0VSCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI2ODY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dApAQCAtMCwwICsxLDE5OSBAQAorTGludXggQmFzZSBEcml2ZXIgZm9yIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWFyY2ggMTAsIDIwMDkKKworCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIEJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KKy0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworLSBTdXBwb3J0CisKKworCitJbiBUaGlzIFJlbGVhc2UKKz09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpeGdiZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIDEwIEdpZ2FiaXQgUENJCitFeHByZXNzIEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbi4gIFRoaXMgZHJpdmVyIGluY2x1ZGVzIHN1cHBvcnQgZm9yCitJdGFuaXVtKFIpMi1iYXNlZCBzeXN0ZW1zLgorCitGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbgorc3VwcGxpZWQgd2l0aCB5b3VyIDEwIEdpZ2FiaXQgYWRhcHRlci4gIEFsbCBoYXJkd2FyZSByZXF1aXJlbWVudHMgbGlzdGVkIGFwcGx5Cit0byB1c2Ugd2l0aCBMaW51eC4KKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoaXMga2VybmVsOgorIC0gTmF0aXZlIFZMQU5zCisgLSBDaGFubmVsIEJvbmRpbmcgKHRlYW1pbmcpCisgLSBTTk1QCisgLSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZAorIC0gRGF0YSBDZW50ZXIgQnJpZGdpbmcKKworQ2hhbm5lbCBCb25kaW5nIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlOgorL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorCitFdGh0b29sLCBsc3BjaSwgYW5kIGlmY29uZmlnIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgZGV2aWNlIGFuZCBkcml2ZXIKK3NwZWNpZmljIGluZm9ybWF0aW9uLgorCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGRldmljZXMgYmFzZWQgb24gdGhlIDgyNTk4IGNvbnRyb2xsZXIgYW5kIHRoZSA4MjU5OQorY29udHJvbGxlci4KKworRm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGlkZW50aWZ5aW5nIHdoaWNoIGFkYXB0ZXIgeW91IGhhdmUsIHBsZWFzZSB2aXNpdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDA4NDQxLmh0bQorCisKK0J1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2VsZWN0IG0gZm9yICJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0IiBsb2NhdGVkIGF0OgorICAgICAgTG9jYXRpb246CisgICAgICAgIC0+IERldmljZSBEcml2ZXJzCisgICAgICAgICAgLT4gTmV0d29yayBkZXZpY2Ugc3VwcG9ydCAoTkVUREVWSUNFUyBbPXldKQorICAgICAgICAgICAgLT4gRXRoZXJuZXQgKDEwMDAwIE1iaXQpIChORVRERVZfMTAwMDAgWz15XSkKKworMS4gbWFrZSBtb2R1bGVzICYgbWFrZSBtb2R1bGVzX2luc3RhbGwKKworMi4gTG9hZCB0aGUgbW9kdWxlOgorCisjIG1vZHByb2JlIGl4Z2JlCisKKyAgIFRoZSBpbnNtb2QgY29tbWFuZCBjYW4gYmUgdXNlZCBpZiB0aGUgZnVsbAorICAgcGF0aCB0byB0aGUgZHJpdmVyIG1vZHVsZSBpcyBzcGVjaWZpZWQuICBGb3IgZXhhbXBsZToKKworICAgICBpbnNtb2QgL2xpYi9tb2R1bGVzLzxLRVJORUwgVkVSU0lPTj4va2VybmVsL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmtvCisKKyAgIFdpdGggMi42IGJhc2VkIGtlcm5lbHMgYWxzbyBtYWtlIHN1cmUgdGhhdCBvbGRlciBpeGdiZSBkcml2ZXJzIGFyZQorICAgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwsIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgbW9kdWxlOgorCisgICAgIHJtbW9kIGl4Z2JlOyBtb2Rwcm9iZSBpeGdiZQorCiszLiBBc3NpZ24gYW4gSVAgYWRkcmVzcyB0byB0aGUgaW50ZXJmYWNlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcsIHdoZXJlCisgICB4IGlzIHRoZSBpbnRlcmZhY2UgbnVtYmVyOgorCisgICAgIGlmY29uZmlnIGV0aHggPElQX2FkZHJlc3M+CisKKzQuIFZlcmlmeSB0aGF0IHRoZSBpbnRlcmZhY2Ugd29ya3MuIEVudGVyIHRoZSBmb2xsb3dpbmcsIHdoZXJlIDxJUF9hZGRyZXNzPgorICAgaXMgdGhlIElQIGFkZHJlc3MgZm9yIGFub3RoZXIgbWFjaGluZSBvbiB0aGUgc2FtZSBzdWJuZXQgYXMgdGhlIGludGVyZmFjZQorICAgdGhhdCBpcyBiZWluZyB0ZXN0ZWQ6CisKKyAgICAgcGluZyAgPElQX2FkZHJlc3M+CisKKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFZpZXdpbmcgTGluayBNZXNzYWdlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcworICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzIG9uCisgIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBkbWVzZyAtbiA4CisKKyAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KKworCisgIEp1bWJvIEZyYW1lcworICAtLS0tLS0tLS0tLS0KKyAgVGhlIGRyaXZlciBzdXBwb3J0cyBKdW1ibyBGcmFtZXMgZm9yIGFsbCBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMKKyAgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4KKyAgVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBNVFUgaXMgMTYxMTAuICBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8KKyAgaW5jcmVhc2UgdGhlIE1UVSBzaXplLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgaWZjb25maWcgZXRoeCBtdHUgOTAwMCB1cAorCisgIFRoZSBtYXhpbXVtIE1UVSBzZXR0aW5nIGZvciBKdW1ibyBGcmFtZXMgaXMgMTYxMTAuICBUaGlzIHZhbHVlIGNvaW5jaWRlcworICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgorCisgIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkLCBha2EgR1JPCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGluLWtlcm5lbCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBHUk8uICBHUk8gaGFzCisgIHNob3duIHRoYXQgYnkgY29hbGVzY2luZyBSeCB0cmFmZmljIGludG8gbGFyZ2VyIGNodW5rcyBvZiBkYXRhLCBDUFUKKyAgdXRpbGl6YXRpb24gY2FuIGJlIHNpZ25pZmljYW50bHkgcmVkdWNlZCB3aGVuIHVuZGVyIGxhcmdlIFJ4IGxvYWQuICBHUk8gaXMgYW4KKyAgZXZvbHV0aW9uIG9mIHRoZSBwcmV2aW91c2x5LXVzZWQgTFJPIGludGVyZmFjZS4gIEdSTyBpcyBhYmxlIHRvIGNvYWxlc2NlCisgIG90aGVyIHByb3RvY29scyBiZXNpZGVzIFRDUC4gIEl0J3MgYWxzbyBzYWZlIHRvIHVzZSB3aXRoIGNvbmZpZ3VyYXRpb25zIHRoYXQKKyAgYXJlIHByb2JsZW1hdGljIGZvciBMUk8sIG5hbWVseSBicmlkZ2luZyBhbmQgaVNDU0kuCisKKyAgR1JPIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgZHJpdmVyLiAgRnV0dXJlIHZlcnNpb25zIG9mIGV0aHRvb2wgd2lsbAorICBzdXBwb3J0IGRpc2FibGluZyBhbmQgcmUtZW5hYmxpbmcgR1JPIG9uIHRoZSBmbHkuCisKKworICBEYXRhIENlbnRlciBCcmlkZ2luZywgYWthIERDQgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIERDQiBpcyBhIGNvbmZpZ3VyYXRpb24gUXVhbGl0eSBvZiBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIGluIGhhcmR3YXJlLgorICBJdCB1c2VzIHRoZSBWTEFOIHByaW9yaXR5IHRhZyAoODAyLjFwKSB0byBmaWx0ZXIgdHJhZmZpYy4gIFRoYXQgbWVhbnMKKyAgdGhhdCB0aGVyZSBhcmUgOCBkaWZmZXJlbnQgcHJpb3JpdGllcyB0aGF0IHRyYWZmaWMgY2FuIGJlIGZpbHRlcmVkIGludG8uCisgIEl0IGFsc28gZW5hYmxlcyBwcmlvcml0eSBmbG93IGNvbnRyb2wgd2hpY2ggY2FuIGxpbWl0IG9yIGVsaW1pbmF0ZSB0aGUKKyAgbnVtYmVyIG9mIGRyb3BwZWQgcGFja2V0cyBkdXJpbmcgbmV0d29yayBzdHJlc3MuICBCYW5kd2lkdGggY2FuIGJlCisgIGFsbG9jYXRlZCB0byBlYWNoIG9mIHRoZXNlIHByaW9yaXRpZXMsIHdoaWNoIGlzIGVuZm9yY2VkIGF0IHRoZSBoYXJkd2FyZQorICBsZXZlbC4KKworICBUbyBlbmFibGUgRENCIHN1cHBvcnQgaW4gaXhnYmUsIHlvdSBtdXN0IGVuYWJsZSB0aGUgRENCIG5ldGxpbmsgbGF5ZXIgdG8KKyAgYWxsb3cgdGhlIHVzZXJzcGFjZSB0b29scyAoc2VlIGJlbG93KSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkcml2ZXIuCisgIFRoaXMgY2FuIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBoZXJlOgorCisgICAgICAgIC0+IE5ldHdvcmtpbmcgc3VwcG9ydAorICAgICAgICAgIC0+IE5ldHdvcmtpbmcgb3B0aW9ucworICAgICAgICAgICAgLT4gRGF0YSBDZW50ZXIgQnJpZGdpbmcgc3VwcG9ydAorCisgIE9uY2UgdGhpcyBpcyBzZWxlY3RlZCwgRENCIHN1cHBvcnQgbXVzdCBiZSBzZWxlY3RlZCBmb3IgaXhnYmUuICBUaGlzIGNhbgorICBiZSBmb3VuZCBoZXJlOgorCisgICAgICAgIC0+IERldmljZSBEcml2ZXJzCisgICAgICAgICAgLT4gTmV0d29yayBkZXZpY2Ugc3VwcG9ydCAoTkVUREVWSUNFUyBbPXldKQorICAgICAgICAgICAgLT4gRXRoZXJuZXQgKDEwMDAwIE1iaXQpIChORVRERVZfMTAwMDAgWz15XSkKKyAgICAgICAgICAgICAgLT4gSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydAorICAgICAgICAgICAgICAgIC0+IERhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnQKKworICBBZnRlciB0aGVzZSBvcHRpb25zIGFyZSBzZWxlY3RlZCwgeW91IG11c3QgcmVidWlsZCB5b3VyIGtlcm5lbCBhbmQgeW91cgorICBtb2R1bGVzLgorCisgIEluIG9yZGVyIHRvIHVzZSBEQ0IsIHVzZXJzcGFjZSB0b29scyBtdXN0IGJlIGRvd25sb2FkZWQgYW5kIGluc3RhbGxlZC4KKyAgVGhlIGRjYmQgdG9vbHMgY2FuIGJlIGZvdW5kIGF0OgorCisgICAgICAgIGh0dHA6Ly9lMTAwMC5zZi5uZXQKKworCisgIEV0aHRvb2wKKyAgLS0tLS0tLQorICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIHZlcnNpb24gMy4wIG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKKyAgVGhlIGxhdGVzdCByZWxlYXNlIG9mIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGZyb20KKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLgorCisKKyAgTkFQSQorICAtLS0tCisKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGl4Z2JlIGRyaXZlci4gIE5BUEkgaXMgZW5hYmxlZAorICBieSBkZWZhdWx0IGluIHRoZSBkcml2ZXIuCisKKyAgU2VlIHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3ogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFQSS4KKworCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK29yIHRoZSBJbnRlbCBXaXJlZCBOZXR3b3JraW5nIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZWZvcmdlIGF0OgorCisgICAgaHR0cDovL2UxMDAwLnNvdXJjZWZvcmdlLm5ldAorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCit0byB0aGUgaXNzdWUgdG8gZTEwMDAtZGV2ZWxAbGlzdHMuc2YubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmRzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzA3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmRzLnR4dApAQCAtMCwwICsxLDM1NiBAQAorCitPdmVydmlldworPT09PT09PT0KKworVGhpcyByZWFkbWUgdHJpZXMgdG8gcHJvdmlkZSBzb21lIGJhY2tncm91bmQgb24gdGhlIGhvd3MgYW5kIHdoeXMgb2YgUkRTLAorYW5kIHdpbGwgaG9wZWZ1bGx5IGhlbHAgeW91IGZpbmQgeW91ciB3YXkgYXJvdW5kIHRoZSBjb2RlLgorCitJbiBhZGRpdGlvbiwgcGxlYXNlIHNlZSB0aGlzIGVtYWlsIGFib3V0IFJEUyBvcmlnaW5zOgoraHR0cDovL29zcy5vcmFjbGUuY29tL3BpcGVybWFpbC9yZHMtZGV2ZWwvMjAwNy1Ob3ZlbWJlci8wMDAyMjguaHRtbAorCitSRFMgQXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09CisKK1JEUyBwcm92aWRlcyByZWxpYWJsZSwgb3JkZXJlZCBkYXRhZ3JhbSBkZWxpdmVyeSBieSB1c2luZyBhIHNpbmdsZQorcmVsaWFibGUgY29ubmVjdGlvbiBiZXR3ZWVuIGFueSB0d28gbm9kZXMgaW4gdGhlIGNsdXN0ZXIuIFRoaXMgYWxsb3dzCithcHBsaWNhdGlvbnMgdG8gdXNlIGEgc2luZ2xlIHNvY2tldCB0byB0YWxrIHRvIGFueSBvdGhlciBwcm9jZXNzIGluIHRoZQorY2x1c3RlciAtIHNvIGluIGEgY2x1c3RlciB3aXRoIE4gcHJvY2Vzc2VzIHlvdSBuZWVkIE4gc29ja2V0cywgaW4gY29udHJhc3QKK3RvIE4qTiBpZiB5b3UgdXNlIGEgY29ubmVjdGlvbi1vcmllbnRlZCBzb2NrZXQgdHJhbnNwb3J0IGxpa2UgVENQLgorCitSRFMgaXMgbm90IEluZmluaWJhbmQtc3BlY2lmaWM7IGl0IHdhcyBkZXNpZ25lZCB0byBzdXBwb3J0IGRpZmZlcmVudAordHJhbnNwb3J0cy4gIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHVzZWQgdG8gc3VwcG9ydCBSRFMgb3ZlciBUQ1AgYXMgd2VsbAorYXMgSUIuIFdvcmsgaXMgaW4gcHJvZ3Jlc3MgdG8gc3VwcG9ydCBSRFMgb3ZlciBpV0FSUCwgYW5kIHVzaW5nIERDRSB0bworZ3VhcmFudGVlIG5vIGRyb3BwZWQgcGFja2V0cyBvbiBFdGhlcm5ldCwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHVzZSBSRFMgb3ZlcgorVURQIGluIHRoZSBmdXR1cmUuCisKK1RoZSBoaWdoLWxldmVsIHNlbWFudGljcyBvZiBSRFMgZnJvbSB0aGUgYXBwbGljYXRpb24ncyBwb2ludCBvZiB2aWV3IGFyZQorCisgKglBZGRyZXNzaW5nCisgICAgICAgIFJEUyB1c2VzIElQdjQgYWRkcmVzc2VzIGFuZCAxNmJpdCBwb3J0IG51bWJlcnMgdG8gaWRlbnRpZnkKKyAgICAgICAgdGhlIGVuZCBwb2ludCBvZiBhIGNvbm5lY3Rpb24uIEFsbCBzb2NrZXQgb3BlcmF0aW9ucyB0aGF0IGludm9sdmUKKyAgICAgICAgcGFzc2luZyBhZGRyZXNzZXMgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UgZ2VuZXJhbGx5CisgICAgICAgIHVzZSBhIHN0cnVjdCBzb2NrYWRkcl9pbi4KKworICAgICAgICBUaGUgZmFjdCB0aGF0IElQdjQgYWRkcmVzc2VzIGFyZSB1c2VkIGRvZXMgbm90IG1lYW4gdGhlIHVuZGVybHlpbmcKKyAgICAgICAgdHJhbnNwb3J0IGhhcyB0byBiZSBJUC1iYXNlZC4gSW4gZmFjdCwgUkRTIG92ZXIgSUIgdXNlcyBhCisgICAgICAgIHJlbGlhYmxlIElCIGNvbm5lY3Rpb247IHRoZSBJUCBhZGRyZXNzIGlzIHVzZWQgZXhjbHVzaXZlbHkgdG8KKyAgICAgICAgbG9jYXRlIHRoZSByZW1vdGUgbm9kZSdzIEdJRCAoYnkgQVJQaW5nIGZvciB0aGUgZ2l2ZW4gSVApLgorCisgICAgICAgIFRoZSBwb3J0IHNwYWNlIGlzIGVudGlyZWx5IGluZGVwZW5kZW50IG9mIFVEUCwgVENQIG9yIGFueSBvdGhlcgorICAgICAgICBwcm90b2NvbC4KKworICoJU29ja2V0IGludGVyZmFjZQorICAgICAgICBSRFMgc29ja2V0cyB3b3JrICptb3N0bHkqIGFzIHlvdSB3b3VsZCBleHBlY3QgZnJvbSBhIEJTRAorICAgICAgICBzb2NrZXQuIFRoZSBuZXh0IHNlY3Rpb24gd2lsbCBjb3ZlciB0aGUgZGV0YWlscy4gQXQgYW55IHJhdGUsCisgICAgICAgIGFsbCBJL08gaXMgcGVyZm9ybWVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIEJTRCBzb2NrZXQgQVBJLgorICAgICAgICBTb21lIGFkZGl0aW9ucyBsaWtlIHplcm9jb3B5IHN1cHBvcnQgYXJlIGltcGxlbWVudGVkIHRocm91Z2gKKyAgICAgICAgY29udHJvbCBtZXNzYWdlcywgd2hpbGUgb3RoZXIgZXh0ZW5zaW9ucyB1c2UgdGhlIGdldHNvY2tvcHQvCisgICAgICAgIHNldHNvY2tvcHQgY2FsbHMuCisKKyAgICAgICAgU29ja2V0cyBtdXN0IGJlIGJvdW5kIGJlZm9yZSB5b3UgY2FuIHNlbmQgb3IgcmVjZWl2ZSBkYXRhLgorICAgICAgICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGJpbmRpbmcgYWxzbyBzZWxlY3RzIGEgdHJhbnNwb3J0IGFuZAorICAgICAgICBhdHRhY2hlcyBpdCB0byB0aGUgc29ja2V0LiBPbmNlIGJvdW5kLCB0aGUgdHJhbnNwb3J0IGFzc2lnbm1lbnQKKyAgICAgICAgZG9lcyBub3QgY2hhbmdlLiBSRFMgd2lsbCB0b2xlcmF0ZSBJUHMgbW92aW5nIGFyb3VuZCAoZWcgaW4KKyAgICAgICAgYSBhY3RpdmUtYWN0aXZlIEhBIHNjZW5hcmlvKSwgYnV0IG9ubHkgYXMgbG9uZyBhcyB0aGUgYWRkcmVzcworICAgICAgICBkb2Vzbid0IG1vdmUgdG8gYSBkaWZmZXJlbnQgdHJhbnNwb3J0LgorCisgKglzeXNjdGxzCisgICAgICAgIFJEUyBzdXBwb3J0cyBhIG51bWJlciBvZiBzeXNjdGxzIGluIC9wcm9jL3N5cy9uZXQvcmRzCisKKworU29ja2V0IEludGVyZmFjZQorPT09PT09PT09PT09PT09PQorCisgIEFGX1JEUywgUEZfUkRTLCBTT0xfUkRTCisgICAgICAgIFRoZXNlIGNvbnN0YW50cyBoYXZlbid0IGJlZW4gYXNzaWduZWQgeWV0LCBiZWNhdXNlIFJEUyBpc24ndCBpbgorICAgICAgICBtYWlubGluZSB5ZXQuIEN1cnJlbnRseSwgdGhlIGtlcm5lbCBtb2R1bGUgYXNzaWducyBzb21lIGNvbnN0YW50CisgICAgICAgIGFuZCBwdWJsaXNoZXMgaXQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIHR3byBzeXNjdGwgZmlsZXMKKyAgICAgICAgICAgICAgICAvcHJvYy9zeXMvbmV0L3Jkcy9wZl9yZHMKKyAgICAgICAgICAgICAgICAvcHJvYy9zeXMvbmV0L3Jkcy9zb2xfcmRzCisKKyAgZmQgPSBzb2NrZXQoUEZfUkRTLCBTT0NLX1NFUVBBQ0tFVCwgMCk7CisgICAgICAgIFRoaXMgY3JlYXRlcyBhIG5ldywgdW5ib3VuZCBSRFMgc29ja2V0LgorCisgIHNldHNvY2tvcHQoU09MX1NPQ0tFVCk6IHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHNpemUKKyAgICAgICAgUkRTIGhvbm9ycyB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZSBzb2NrZXQgb3B0aW9ucy4KKyAgICAgICAgWW91IGFyZSBub3QgYWxsb3dlZCB0byBxdWV1ZSBtb3JlIHRoYW4gU09fU05EU0laRSBieXRlcyB0bworICAgICAgICBhIHNvY2tldC4gQSBtZXNzYWdlIGlzIHF1ZXVlZCB3aGVuIHNlbmRtc2cgaXMgY2FsbGVkLCBhbmQKKyAgICAgICAgaXQgbGVhdmVzIHRoZSBxdWV1ZSB3aGVuIHRoZSByZW1vdGUgc3lzdGVtIGFja25vd2xlZGdlcworICAgICAgICBpdHMgYXJyaXZhbC4KKworICAgICAgICBUaGUgU09fUkNWU0laRSBvcHRpb24gY29udHJvbHMgdGhlIG1heGltdW0gcmVjZWl2ZSBxdWV1ZSBsZW5ndGguCisgICAgICAgIFRoaXMgaXMgYSBzb2Z0IGxpbWl0IHJhdGhlciB0aGFuIGEgaGFyZCBsaW1pdCAtIFJEUyB3aWxsCisgICAgICAgIGNvbnRpbnVlIHRvIGFjY2VwdCBhbmQgcXVldWUgaW5jb21pbmcgbWVzc2FnZXMsIGV2ZW4gaWYgdGhhdAorICAgICAgICB0YWtlcyB0aGUgcXVldWUgbGVuZ3RoIG92ZXIgdGhlIGxpbWl0LiBIb3dldmVyLCBpdCB3aWxsIGFsc28KKyAgICAgICAgbWFyayB0aGUgcG9ydCBhcyAiY29uZ2VzdGVkIiBhbmQgc2VuZCBhIGNvbmdlc3Rpb24gdXBkYXRlIHRvCisgICAgICAgIHRoZSBzb3VyY2Ugbm9kZS4gVGhlIHNvdXJjZSBub2RlIGlzIHN1cHBvc2VkIHRvIHRocm90dGxlIGFueQorICAgICAgICBwcm9jZXNzZXMgc2VuZGluZyB0byB0aGlzIGNvbmdlc3RlZCBwb3J0LgorCisgIGJpbmQoZmQsICZzb2NrYWRkcl9pbiwgLi4uKQorICAgICAgICBUaGlzIGJpbmRzIHRoZSBzb2NrZXQgdG8gYSBsb2NhbCBJUCBhZGRyZXNzIGFuZCBwb3J0LCBhbmQgYQorICAgICAgICB0cmFuc3BvcnQuCisKKyAgc2VuZG1zZyhmZCwgLi4uKQorICAgICAgICBTZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGluZGljYXRlZCByZWNpcGllbnQuIFRoZSBrZXJuZWwgd2lsbAorICAgICAgICB0cmFuc3BhcmVudGx5IGVzdGFibGlzaCB0aGUgdW5kZXJseWluZyByZWxpYWJsZSBjb25uZWN0aW9uCisgICAgICAgIGlmIGl0IGlzbid0IHVwIHlldC4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRoYXQgZXhjZWVkcyBTT19TTkRTSVpFIHdpbGwKKyAgICAgICAgcmV0dXJuIHdpdGggLUVNU0dTSVpFCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0aGF0IHdvdWxkIHRha2UgdGhlIHRvdGFsIG51bWJlcgorICAgICAgICBvZiBxdWV1ZWQgYnl0ZXMgb3ZlciB0aGUgU09fU05EU0laRSB0aHJlc2hvbGQgd2lsbCByZXR1cm4KKyAgICAgICAgRUFHQUlOLgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gYSBkZXN0aW5hdGlvbiB0aGF0IGlzIG1hcmtlZAorICAgICAgICBhcyAiY29uZ2VzdGVkIiB3aWxsIHJldHVybiBFTk9CVUZTLgorCisgIHJlY3Ztc2coZmQsIC4uLikKKyAgICAgICAgUmVjZWl2ZXMgYSBtZXNzYWdlIHRoYXQgd2FzIHF1ZXVlZCB0byB0aGlzIHNvY2tldC4gVGhlIHNvY2tldHMKKyAgICAgICAgcmVjdiBxdWV1ZSBhY2NvdW50aW5nIGlzIGFkanVzdGVkLCBhbmQgaWYgdGhlIHF1ZXVlIGxlbmd0aAorICAgICAgICBkcm9wcyBiZWxvdyBTT19TTkRTSVpFLCB0aGUgcG9ydCBpcyBtYXJrZWQgdW5jb25nZXN0ZWQsIGFuZAorICAgICAgICBhIGNvbmdlc3Rpb24gdXBkYXRlIGlzIHNlbnQgdG8gYWxsIHBlZXJzLgorCisgICAgICAgIEFwcGxpY2F0aW9ucyBjYW4gYXNrIHRoZSBSRFMga2VybmVsIG1vZHVsZSB0byByZWNlaXZlCisgICAgICAgIG5vdGlmaWNhdGlvbnMgdmlhIGNvbnRyb2wgbWVzc2FnZXMgKGZvciBpbnN0YW5jZSwgdGhlcmUgaXMgYQorICAgICAgICBub3RpZmljYXRpb24gd2hlbiBhIGNvbmdlc3Rpb24gdXBkYXRlIGFycml2ZWQsIG9yIHdoZW4gYSBSRE1BCisgICAgICAgIG9wZXJhdGlvbiBjb21wbGV0ZXMpLiBUaGVzZSBub3RpZmljYXRpb25zIGFyZSByZWNlaXZlZCB0aHJvdWdoCisgICAgICAgIHRoZSBtc2cubXNnX2NvbnRyb2wgYnVmZmVyIG9mIHN0cnVjdCBtc2doZHIuIFRoZSBmb3JtYXQgb2YgdGhlCisgICAgICAgIG1lc3NhZ2VzIGlzIGRlc2NyaWJlZCBpbiBtYW5wYWdlcy4KKworICBwb2xsKGZkKQorICAgICAgICBSRFMgc3VwcG9ydHMgdGhlIHBvbGwgaW50ZXJmYWNlIHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbgorICAgICAgICB0byBpbXBsZW1lbnQgYXN5bmMgSS9PLgorCisgICAgICAgIFBPTExJTiBoYW5kbGluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBXaGVuIHRoZXJlJ3MgYW4KKyAgICAgICAgaW5jb21pbmcgbWVzc2FnZSBxdWV1ZWQgdG8gdGhlIHNvY2tldCwgb3IgYSBwZW5kaW5nIG5vdGlmaWNhdGlvbiwKKyAgICAgICAgd2Ugc2lnbmFsIFBPTExJTi4KKworICAgICAgICBQT0xMT1VUIGlzIGEgbGl0dGxlIGhhcmRlci4gU2luY2UgeW91IGNhbiBlc3NlbnRpYWxseSBzZW5kCisgICAgICAgIHRvIGFueSBkZXN0aW5hdGlvbiwgUkRTIHdpbGwgYWx3YXlzIHNpZ25hbCBQT0xMT1VUIGFzIGxvbmcgYXMKKyAgICAgICAgdGhlcmUncyByb29tIG9uIHRoZSBzZW5kIHF1ZXVlIChpZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZAorICAgICAgICBpcyBsZXNzIHRoYW4gdGhlIHNlbmRidWYgc2l6ZSkuCisKKyAgICAgICAgSG93ZXZlciwgdGhlIGtlcm5lbCB3aWxsIHJlZnVzZSB0byBhY2NlcHQgbWVzc2FnZXMgdG8KKyAgICAgICAgYSBkZXN0aW5hdGlvbiBtYXJrZWQgY29uZ2VzdGVkIC0gaW4gdGhpcyBjYXNlIHlvdSB3aWxsIGxvb3AKKyAgICAgICAgZm9yZXZlciBpZiB5b3UgcmVseSBvbiBwb2xsIHRvIHRlbGwgeW91IHdoYXQgdG8gZG8uCisgICAgICAgIFRoaXMgaXNuJ3QgYSB0cml2aWFsIHByb2JsZW0sIGJ1dCBhcHBsaWNhdGlvbnMgY2FuIGRlYWwgd2l0aAorICAgICAgICB0aGlzIC0gYnkgdXNpbmcgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zLCBhbmQgYnkgY2hlY2tpbmcgZm9yCisgICAgICAgIEVOT0JVRlMgZXJyb3JzIHJldHVybmVkIGJ5IHNlbmRtc2cuCisKKyAgc2V0c29ja29wdChTT0xfUkRTLCBSRFNfQ0FOQ0VMX1NFTlRfVE8sICZzb2NrYWRkcl9pbikKKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGRpc2NhcmQgYWxsIG1lc3NhZ2VzIHF1ZXVlZCB0byBhCisgICAgICAgIHNwZWNpZmljIGRlc3RpbmF0aW9uIG9uIHRoaXMgcGFydGljdWxhciBzb2NrZXQuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGNhbmNlbCBvdXRzdGFuZGluZyBtZXNzYWdlcyBpZgorICAgICAgICBpdCBkZXRlY3RzIGEgdGltZW91dC4gRm9yIGluc3RhbmNlLCBpZiBpdCB0cmllZCB0byBzZW5kIGEgbWVzc2FnZSwKKyAgICAgICAgYW5kIHRoZSByZW1vdGUgaG9zdCBpcyB1bnJlYWNoYWJsZSwgUkRTIHdpbGwga2VlcCB0cnlpbmcgZm9yZXZlci4KKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIG1heSBkZWNpZGUgaXQncyBub3Qgd29ydGggaXQsIGFuZCBjYW5jZWwgdGhlCisgICAgICAgIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCBpdCB3b3VsZCB1c2UgUkRTX0NBTkNFTF9TRU5UX1RPIHRvCisgICAgICAgIG51a2UgYW55IHBlbmRpbmcgbWVzc2FnZXMuCisKKworUkRNQSBmb3IgUkRTCis9PT09PT09PT09PT0KKworICBzZWUgcmRzLXJkbWEoNykgbWFucGFnZSAoYXZhaWxhYmxlIGluIHJkcy10b29scykKKworCitDb25nZXN0aW9uIE5vdGlmaWNhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgIHNlZSByZHMoNykgbWFucGFnZQorCisKK1JEUyBQcm90b2NvbAorPT09PT09PT09PT09CisKKyAgTWVzc2FnZSBoZWFkZXIKKworICAgIFRoZSBtZXNzYWdlIGhlYWRlciBpcyBhICdzdHJ1Y3QgcmRzX2hlYWRlcicgKHNlZSByZHMuaCk6CisgICAgRmllbGRzOgorICAgICAgaF9zZXF1ZW5jZToKKyAgICAgICAgICBwZXItcGFja2V0IHNlcXVlbmNlIG51bWJlcgorICAgICAgaF9hY2s6CisgICAgICAgICAgcGlnZ3liYWNrZWQgYWNrbm93bGVkZ21lbnQgb2YgbGFzdCBwYWNrZXQgcmVjZWl2ZWQKKyAgICAgIGhfbGVuOgorICAgICAgICAgIGxlbmd0aCBvZiBkYXRhLCBub3QgaW5jbHVkaW5nIGhlYWRlcgorICAgICAgaF9zcG9ydDoKKyAgICAgICAgICBzb3VyY2UgcG9ydAorICAgICAgaF9kcG9ydDoKKyAgICAgICAgICBkZXN0aW5hdGlvbiBwb3J0CisgICAgICBoX2ZsYWdzOgorICAgICAgICAgIENPTkdfQklUTUFQIC0gdGhpcyBpcyBhIGNvbmdlc3Rpb24gdXBkYXRlIGJpdG1hcAorICAgICAgICAgIEFDS19SRVFVSVJFRCAtIHJlY2VpdmVyIG11c3QgYWNrIHRoaXMgcGFja2V0CisgICAgICAgICAgUkVUUkFOU01JVFRFRCAtIHBhY2tldCBoYXMgcHJldmlvdXNseSBiZWVuIHNlbnQKKyAgICAgIGhfY3JlZGl0OgorICAgICAgICAgIGluZGljYXRlIHRvIG90aGVyIGVuZCBvZiBjb25uZWN0aW9uIHRoYXQKKyAgICAgICAgICBpdCBoYXMgbW9yZSBjcmVkaXRzIGF2YWlsYWJsZSAoaS5lLiB0aGVyZSBpcworICAgICAgICAgIG1vcmUgc2VuZCByb29tKQorICAgICAgaF9wYWRkaW5nWzRdOgorICAgICAgICAgIHVudXNlZCwgZm9yIGZ1dHVyZSB1c2UKKyAgICAgIGhfY3N1bToKKyAgICAgICAgICBoZWFkZXIgY2hlY2tzdW0KKyAgICAgIGhfZXh0aGRyOgorICAgICAgICAgIG9wdGlvbmFsIGRhdGEgY2FuIGJlIHBhc3NlZCBoZXJlLiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGZvcgorICAgICAgICAgIHBhc3NpbmcgUkRNQS1yZWxhdGVkIGluZm9ybWF0aW9uLgorCisgIEFDSyBhbmQgcmV0cmFuc21pdCBoYW5kbGluZworCisgICAgICBPbmUgbWlnaHQgdGhpbmsgdGhhdCB3aXRoIHJlbGlhYmxlIElCIGNvbm5lY3Rpb25zIHlvdSB3b3VsZG4ndCBuZWVkCisgICAgICB0byBhY2sgbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IElCCisgICAgICBoYXJkd2FyZSBnZW5lcmF0ZXMgYW4gYWNrIG1lc3NhZ2UgYmVmb3JlIGl0IGhhcyBETUFlZCB0aGUgbWVzc2FnZQorICAgICAgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYSBwb3RlbnRpYWwgbWVzc2FnZSBsb3NzIGlmIHRoZSBIQ0EgaXMKKyAgICAgIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdCBzZW5kcyB0aGUgYWNrIGFuZCBiZWZvcmUKKyAgICAgIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYSBwb3RlbnRpYWwgaXNzdWUKKyAgICAgIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorCisgICAgICBTZW5kaW5nIGFuIGFjayBpbW1lZGlhdGVseSB3b3VsZCBhbGxvdyB0aGUgc2VuZGVyIHRvIGZyZWUgdGhlIHNlbnQKKyAgICAgIG1lc3NhZ2UgZnJvbSB0aGVpciBzZW5kIHF1ZXVlIHF1aWNrbHksIGJ1dCBjb3VsZCBjYXVzZSBleGNlc3NpdmUKKyAgICAgIHRyYWZmaWMgdG8gYmUgdXNlZCBmb3IgYWNrcy4gUkRTIHBpZ2d5YmFja3MgYWNrcyBvbiBzZW50IGRhdGEKKyAgICAgIHBhY2tldHMuICBBY2stb25seSBwYWNrZXRzIGFyZSByZWR1Y2VkIGJ5IG9ubHkgYWxsb3dpbmcgb25lIHRvIGJlCisgICAgICBpbiBmbGlnaHQgYXQgYSB0aW1lLCBhbmQgYnkgdGhlIHNlbmRlciBvbmx5IGFza2luZyBmb3IgYWNrcyB3aGVuCisgICAgICBpdHMgc2VuZCBidWZmZXJzIHN0YXJ0IHRvIGZpbGwgdXAuIEFsbCByZXRyYW5zbWlzc2lvbnMgYXJlIGFsc28KKyAgICAgIGFja2VkLgorCisgIEZsb3cgQ29udHJvbAorCisgICAgICBSRFMncyBJQiB0cmFuc3BvcnQgdXNlcyBhIGNyZWRpdC1iYXNlZCBtZWNoYW5pc20gdG8gdmVyaWZ5IHRoYXQKKyAgICAgIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBwZWVyJ3MgcmVjZWl2ZSBidWZmZXJzIGZvciBtb3JlIGRhdGEuIFRoaXMKKyAgICAgIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGhhcmR3YXJlIHJldHJpZXMgb24gdGhlIGNvbm5lY3Rpb24uCisKKyAgQ29uZ2VzdGlvbgorCisgICAgICBNZXNzYWdlcyB3YWl0aW5nIGluIHRoZSByZWNlaXZlIHF1ZXVlIG9uIHRoZSByZWNlaXZpbmcgc29ja2V0CisgICAgICBhcmUgYWNjb3VudGVkIGFnYWluc3QgdGhlIHNvY2tldHMgU09fUkNWQlVGIG9wdGlvbiB2YWx1ZS4gIE9ubHkKKyAgICAgIHRoZSBwYXlsb2FkIGJ5dGVzIGluIHRoZSBtZXNzYWdlIGFyZSBhY2NvdW50ZWQgZm9yLiAgSWYgdGhlCisgICAgICBudW1iZXIgb2YgYnl0ZXMgcXVldWVkIGVxdWFscyBvciBleGNlZWRzIHJjdmJ1ZiB0aGVuIHRoZSBzb2NrZXQKKyAgICAgIGlzIGNvbmdlc3RlZC4gIEFsbCBzZW5kcyBhdHRlbXB0ZWQgdG8gdGhpcyBzb2NrZXQncyBhZGRyZXNzCisgICAgICBzaG91bGQgcmV0dXJuIGJsb2NrIG9yIHJldHVybiAtRVdPVUxEQkxPQ0suCisKKyAgICAgIEFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVhc29uYWJseSB0dW5lZCBzdWNoIHRoYXQgdGhpcworICAgICAgc2l0dWF0aW9uIHZlcnkgcmFyZWx5IG9jY3Vycy4gIEFuIGFwcGxpY2F0aW9uIGVuY291bnRlcmluZyB0aGlzCisgICAgICAiYmFjay1wcmVzc3VyZSIgaXMgY29uc2lkZXJlZCBhIGJ1Zy4KKworICAgICAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgZWFjaCBub2RlIG1haW50YWluIGJpdG1hcHMgd2hpY2gKKyAgICAgIGluZGljYXRlIHdoaWNoIHBvcnRzIG9uIGJvdW5kIGFkZHJlc3NlcyBhcmUgY29uZ2VzdGVkLiAgQXMgdGhlCisgICAgICBiaXRtYXAgY2hhbmdlcyBpdCBpcyBzZW50IHRocm91Z2ggYWxsIHRoZSBjb25uZWN0aW9ucyB3aGljaAorICAgICAgdGVybWluYXRlIGluIHRoZSBsb2NhbCBhZGRyZXNzIG9mIHRoZSBiaXRtYXAgd2hpY2ggY2hhbmdlZC4KKworICAgICAgVGhlIGJpdG1hcHMgYXJlIGFsbG9jYXRlZCBhcyBjb25uZWN0aW9ucyBhcmUgYnJvdWdodCB1cC4gIFRoaXMKKyAgICAgIGF2b2lkcyBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aCB3aGljaCBxdWV1ZXMKKyAgICAgIHNhZ2VzIG9uIHNvY2tldHMuICBUaGUgZGVuc2UgYml0bWFwcyBsZXQgdHJhbnNwb3J0cyBzZW5kIHRoZQorICAgICAgZW50aXJlIGJpdG1hcCBvbiBhbnkgYml0bWFwIGNoYW5nZSByZWFzb25hYmx5IGVmZmljaWVudGx5LiAgVGhpcworICAgICAgaXMgbXVjaCBlYXNpZXIgdG8gaW1wbGVtZW50IHRoYW4gc29tZSBmaW5lci1ncmFpbmVkCisgICAgICBjb21tdW5pY2F0aW9uIG9mIHBlci1wb3J0IGNvbmdlc3Rpb24uICBUaGUgc2VuZGVyIGRvZXMgYSB2ZXJ5CisgICAgICBpbmV4cGVuc2l2ZSBiaXQgdGVzdCB0byB0ZXN0IGlmIHRoZSBwb3J0IGl0J3MgYWJvdXQgdG8gc2VuZCB0bworICAgICAgaXMgY29uZ2VzdGVkIG9yIG5vdC4KKworCitSRFMgVHJhbnNwb3J0IExheWVyCis9PT09PT09PT09PT09PT09PT0KKworICBBcyBtZW50aW9uZWQgYWJvdmUsIFJEUyBpcyBub3QgSUItc3BlY2lmaWMuIEl0cyBjb2RlIGlzIGRpdmlkZWQKKyAgaW50byBhIGdlbmVyYWwgUkRTIGxheWVyIGFuZCBhIHRyYW5zcG9ydCBsYXllci4KKworICBUaGUgZ2VuZXJhbCBsYXllciBoYW5kbGVzIHRoZSBzb2NrZXQgQVBJLCBjb25nZXN0aW9uIGhhbmRsaW5nLAorICBsb29wYmFjaywgc3RhdHMsIHVzZXJtZW0gcGlubmluZywgYW5kIHRoZSBjb25uZWN0aW9uIHN0YXRlIG1hY2hpbmUuCisKKyAgVGhlIHRyYW5zcG9ydCBsYXllciBoYW5kbGVzIHRoZSBkZXRhaWxzIG9mIHRoZSB0cmFuc3BvcnQuIFRoZSBJQgorICB0cmFuc3BvcnQsIGZvciBleGFtcGxlLCBoYW5kbGVzIGFsbCB0aGUgcXVldWUgcGFpcnMsIHdvcmsgcmVxdWVzdHMsCisgIENNIGV2ZW50IGhhbmRsZXJzLCBhbmQgb3RoZXIgSW5maW5pYmFuZCBkZXRhaWxzLgorCisKK1JEUyBLZXJuZWwgU3RydWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09CisKKyAgc3RydWN0IHJkc19tZXNzYWdlCisgICAgYWthIHBvc3NpYmx5ICJyZHNfb3V0Z29pbmciLCB0aGUgZ2VuZXJpYyBSRFMgbGF5ZXIgY29waWVzIGRhdGEgdG8KKyAgICBiZSBzZW50IGFuZCBzZXRzIGhlYWRlciBmaWVsZHMgYXMgbmVlZGVkLCBiYXNlZCBvbiB0aGUgc29ja2V0IEFQSS4KKyAgICBUaGlzIGlzIHRoZW4gcXVldWVkIGZvciB0aGUgaW5kaXZpZHVhbCBjb25uZWN0aW9uIGFuZCBzZW50IGJ5IHRoZQorICAgIGNvbm5lY3Rpb24ncyB0cmFuc3BvcnQuCisgIHN0cnVjdCByZHNfaW5jb21pbmcKKyAgICBhIGdlbmVyaWMgc3RydWN0IHJlZmVycmluZyB0byBpbmNvbWluZyBkYXRhIHRoYXQgY2FuIGJlIGhhbmRlZCBmcm9tCisgICAgdGhlIHRyYW5zcG9ydCB0byB0aGUgZ2VuZXJhbCBjb2RlIGFuZCBxdWV1ZWQgYnkgdGhlIGdlbmVyYWwgY29kZQorICAgIHdoaWxlIHRoZSBzb2NrZXQgaXMgYXdva2VuLiBJdCBpcyB0aGVuIHBhc3NlZCBiYWNrIHRvIHRoZSB0cmFuc3BvcnQKKyAgICBjb2RlIHRvIGhhbmRsZSB0aGUgYWN0dWFsIGNvcHktdG8tdXNlci4KKyAgc3RydWN0IHJkc19zb2NrZXQKKyAgICBwZXItc29ja2V0IGluZm9ybWF0aW9uCisgIHN0cnVjdCByZHNfY29ubmVjdGlvbgorICAgIHBlci1jb25uZWN0aW9uIGluZm9ybWF0aW9uCisgIHN0cnVjdCByZHNfdHJhbnNwb3J0CisgICAgcG9pbnRlcnMgdG8gdHJhbnNwb3J0LXNwZWNpZmljIGZ1bmN0aW9ucworICBzdHJ1Y3QgcmRzX3N0YXRpc3RpY3MKKyAgICBub24tdHJhbnNwb3J0LXNwZWNpZmljIHN0YXRpc3RpY3MKKyAgc3RydWN0IHJkc19jb25nX21hcAorICAgIHdyYXBzIHRoZSByYXcgY29uZ2VzdGlvbiBiaXRtYXAsIGNvbnRhaW5zIHJibm9kZSwgd2FpdHEsIGV0Yy4KKworQ29ubmVjdGlvbiBtYW5hZ2VtZW50Cis9PT09PT09PT09PT09PT09PT09PT0KKworICBDb25uZWN0aW9ucyBtYXkgYmUgaW4gVVAsIERPV04sIENPTk5FQ1RJTkcsIERJU0NPTk5FQ1RJTkcsIGFuZAorICBFUlJPUiBzdGF0ZXMuCisKKyAgVGhlIGZpcnN0IHRpbWUgYW4gYXR0ZW1wdCBpcyBtYWRlIGJ5IGFuIFJEUyBzb2NrZXQgdG8gc2VuZCBkYXRhIHRvCisgIGEgbm9kZSwgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZCBhbmQgY29ubmVjdGVkLiBUaGF0IGNvbm5lY3Rpb24gaXMKKyAgdGhlbiBtYWludGFpbmVkIGZvcmV2ZXIgLS0gaWYgdGhlcmUgYXJlIHRyYW5zcG9ydCBlcnJvcnMsIHRoZQorICBjb25uZWN0aW9uIHdpbGwgYmUgZHJvcHBlZCBhbmQgcmUtZXN0YWJsaXNoZWQuCisKKyAgRHJvcHBpbmcgYSBjb25uZWN0aW9uIHdoaWxlIHBhY2tldHMgYXJlIHF1ZXVlZCB3aWxsIGNhdXNlIHF1ZXVlZCBvcgorICBwYXJ0aWFsbHktc2VudCBkYXRhZ3JhbXMgdG8gYmUgcmV0cmFuc21pdHRlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzCisgIHJlLWVzdGFibGlzaGVkLgorCisKK1RoZSBzZW5kIHBhdGgKKz09PT09PT09PT09PT0KKworICByZHNfc2VuZG1zZygpCisgICAgc3RydWN0IHJkc19tZXNzYWdlIGJ1aWx0IGZyb20gaW5jb21pbmcgZGF0YQorICAgIENNU0dzIHBhcnNlZCAoZS5nLiBSRE1BIG9wcykKKyAgICB0cmFuc3BvcnQgY29ubmVjdGlvbiBhbGxvY2VkIGFuZCBjb25uZWN0ZWQgaWYgbm90IGFscmVhZHkKKyAgICByZHNfbWVzc2FnZSBwbGFjZWQgb24gc2VuZCBxdWV1ZQorICAgIHNlbmQgd29ya2VyIGF3b2tlbgorICByZHNfc2VuZF93b3JrZXIoKQorICAgIGNhbGxzIHJkc19zZW5kX3htaXQoKSB1bnRpbCBxdWV1ZSBpcyBlbXB0eQorICByZHNfc2VuZF94bWl0KCkKKyAgICB0cmFuc21pdHMgY29uZ2VzdGlvbiBtYXAgaWYgb25lIGlzIHBlbmRpbmcKKyAgICBtYXkgc2V0IEFDS19SRVFVSVJFRAorICAgIGNhbGxzIHRyYW5zcG9ydCB0byBzZW5kIGVpdGhlciBub24tUkRNQSBvciBSRE1BIG1lc3NhZ2UKKyAgICAoUkRNQSBvcHMgbmV2ZXIgcmV0cmFuc21pdHRlZCkKKyAgcmRzX2liX3htaXQoKQorICAgIGFsbG9jcyB3b3JrIHJlcXVlc3RzIGZyb20gc2VuZCByaW5nCisgICAgYWRkcyBhbnkgbmV3IHNlbmQgY3JlZGl0cyBhdmFpbGFibGUgdG8gcGVlciAoaF9jcmVkaXRzKQorICAgIG1hcHMgdGhlIHJkc19tZXNzYWdlJ3Mgc2cgbGlzdAorICAgIHBpZ2d5YmFja3MgYWNrCisgICAgcG9wdWxhdGVzIHdvcmsgcmVxdWVzdHMKKyAgICBwb3N0IHNlbmQgdG8gY29ubmVjdGlvbidzIHF1ZXVlIHBhaXIKKworVGhlIHJlY3YgcGF0aAorPT09PT09PT09PT09PQorCisgIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlcigpCisgICAgbG9va3MgYXQgd3JpdGUgY29tcGxldGlvbnMKKyAgICB1bm1hcHMgcmVjdiBidWZmZXIgZnJvbSBkZXZpY2UKKyAgICBubyBlcnJvcnMsIGNhbGwgcmRzX2liX3Byb2Nlc3NfcmVjdigpCisgICAgcmVmaWxsIHJlY3YgcmluZworICByZHNfaWJfcHJvY2Vzc19yZWN2KCkKKyAgICB2YWxpZGF0ZSBoZWFkZXIgY2hlY2tzdW0KKyAgICBjb3B5IGhlYWRlciB0byByZHNfaWJfaW5jb21pbmcgc3RydWN0IGlmIHN0YXJ0IG9mIGEgbmV3IGRhdGFncmFtCisgICAgYWRkIHRvIGliaW5jJ3MgZnJhZ2xpc3QKKyAgICBpZiBjb21wZXRlZCBkYXRhZ3JhbToKKyAgICAgIHVwZGF0ZSBjb25nIG1hcCBpZiBkYXRhZ3JhbSB3YXMgY29uZyB1cGRhdGUKKyAgICAgIGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKSBvdGhlcndpc2UKKyAgICAgIG5vdGUgaWYgYWNrIGlzIHJlcXVpcmVkCisgIHJkc19yZWN2X2luY29taW5nKCkKKyAgICBkcm9wIGR1cGxpY2F0ZSBwYWNrZXRzCisgICAgcmVzcG9uZCB0byBwaW5ncworICAgIGZpbmQgdGhlIHNvY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0YWdyYW0KKyAgICBhZGQgdG8gc29jayBxdWV1ZQorICAgIHdha2UgdXAgc29jaworICAgIGRvIHNvbWUgY29uZ2VzdGlvbiBjYWxjdWxhdGlvbnMKKyAgcmRzX3JlY3Ztc2cKKyAgICBjb3B5IGRhdGEgaW50byB1c2VyIGlvdmVjCisgICAgaGFuZGxlIENNU0dzCisgICAgcmV0dXJuIHRvIGFwcGxpY2F0aW9uCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU4YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQKQEAgLTAsMCArMSwxODAgQEAKK1RoZSBleGlzdGluZyBpbnRlcmZhY2VzIGZvciBnZXR0aW5nIG5ldHdvcmsgcGFja2FnZXMgdGltZSBzdGFtcGVkIGFyZToKKworKiBTT19USU1FU1RBTVAKKyAgR2VuZXJhdGUgdGltZSBzdGFtcCBmb3IgZWFjaCBpbmNvbWluZyBwYWNrZXQgdXNpbmcgdGhlIChub3QgbmVjZXNzYXJpbHkKKyAgbW9ub3Rvbm91cyEpIHN5c3RlbSB0aW1lLiBSZXN1bHQgaXMgcmV0dXJuZWQgdmlhIHJlY3ZfbXNnKCkgaW4gYQorICBjb250cm9sIG1lc3NhZ2UgYXMgdGltZXZhbCAodXNlYyByZXNvbHV0aW9uKS4KKworKiBTT19USU1FU1RBTVBOUworICBTYW1lIHRpbWUgc3RhbXBpbmcgbWVjaGFuaXNtIGFzIFNPX1RJTUVTVEFNUCwgYnV0IHJldHVybnMgcmVzdWx0IGFzCisgIHRpbWVzcGVjIChuc2VjIHJlc29sdXRpb24pLgorCisqIElQX01VTFRJQ0FTVF9MT09QICsgU09fVElNRVNUQU1QW05TXQorICBPbmx5IGZvciBtdWx0aWNhc3RzOiBhcHByb3hpbWF0ZSBzZW5kIHRpbWUgc3RhbXAgYnkgcmVjZWl2aW5nIHRoZSBsb29wZWQKKyAgcGFja2V0IGFuZCB1c2luZyBpdHMgcmVjZWl2ZSB0aW1lIHN0YW1wLgorCitUaGUgZm9sbG93aW5nIGludGVyZmFjZSBjb21wbGVtZW50cyB0aGUgZXhpc3Rpbmcgb25lczogcmVjZWl2ZSB0aW1lCitzdGFtcHMgY2FuIGJlIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWQgZm9yIGFyYml0cmFyeSBwYWNrZXRzIGFuZCBtdWNoCitjbG9zZXIgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBwYWNrZXQgaXMgcmVhbGx5IHNlbnQuIFRpbWUgc3RhbXBzIGNhbgorYmUgZ2VuZXJhdGVkIGluIHNvZnR3YXJlIChhcyBiZWZvcmUpIG9yIGluIGhhcmR3YXJlIChpZiB0aGUgaGFyZHdhcmUKK2hhcyBzdWNoIGEgZmVhdHVyZSkuCisKK1NPX1RJTUVTVEFNUElORzoKKworSW5zdHJ1Y3RzIHRoZSBzb2NrZXQgbGF5ZXIgd2hpY2gga2luZCBvZiBpbmZvcm1hdGlvbiBpcyB3YW50ZWQuIFRoZQorcGFyYW1ldGVyIGlzIGFuIGludGVnZXIgd2l0aCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgYml0cyBzZXQuIFNldHRpbmcKK290aGVyIGJpdHMgaXMgYW4gZXJyb3IgYW5kIGRvZXNuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHN0YXRlLgorCitTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFOiAgdHJ5IHRvIG9idGFpbiBzZW5kIHRpbWUgc3RhbXAgaW4gaGFyZHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU6ICBpZiBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIGlzIG9mZiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxzLCB0aGVuIGRvIGl0IGluIHNvZnR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFOiAgcmV0dXJuIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCB0aW1lIHN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBoYXJkd2FyZQorU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRTogIGlmIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgaXMgb2ZmIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHMsIHRoZW4gZG8gaXQgaW4gc29mdHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOiByZXR1cm4gb3JpZ2luYWwgcmF3IGhhcmR3YXJlIHRpbWUgc3RhbXAKK1NPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFOiByZXR1cm4gaGFyZHdhcmUgdGltZSBzdGFtcCB0cmFuc2Zvcm1lZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeXN0ZW0gdGltZSBiYXNlCitTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOiAgICAgcmV0dXJuIHN5c3RlbSB0aW1lIHN0YW1wIGdlbmVyYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlCisKK1NPRl9USU1FU1RBTVBJTkdfVFgvUlggZGV0ZXJtaW5lIGhvdyB0aW1lIHN0YW1wcyBhcmUgZ2VuZXJhdGVkLgorU09GX1RJTUVTVEFNUElOR19SQVcvU1lTIGRldGVybWluZSBob3cgdGhleSBhcmUgcmVwb3J0ZWQgaW4gdGhlCitmb2xsb3dpbmcgY29udHJvbCBtZXNzYWdlOgorICAgIHN0cnVjdCBzY21fdGltZXN0YW1waW5nIHsKKyAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHN5c3RpbWU7CisgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBod3RpbWV0cmFuczsKKyAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGh3dGltZXJhdzsKKyAgICB9OworCityZWN2bXNnKCkgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoaXMgY29udHJvbCBtZXNzYWdlIGZvciByZWd1bGFyIGluY29taW5nCitwYWNrZXRzLiBGb3Igc2VuZCB0aW1lIHN0YW1wcyB0aGUgb3V0Z29pbmcgcGFja2V0IGlzIGxvb3BlZCBiYWNrIHRvCit0aGUgc29ja2V0J3MgZXJyb3IgcXVldWUgd2l0aCB0aGUgc2VuZCB0aW1lIHN0YW1wKHMpIGF0dGFjaGVkLiBJdCBjYW4KK2JlIHJlY2VpdmVkIHdpdGggcmVjdm1zZyhmbGFncz1NU0dfRVJSUVVFVUUpLiBUaGUgY2FsbCByZXR1cm5zIHRoZQorb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0IGRhdGEgaW5jbHVkaW5nIGFsbCBoZWFkZXJzIHByZXByZW5kZWQgZG93biB0bworYW5kIGluY2x1ZGluZyB0aGUgbGluayBsYXllciwgdGhlIHNjbV90aW1lc3RhbXBpbmcgY29udHJvbCBtZXNzYWdlIGFuZAorYSBzb2NrX2V4dGVuZGVkX2VyciBjb250cm9sIG1lc3NhZ2Ugd2l0aCBlZV9lcnJubz09RU5PTVNHIGFuZAorZWVfb3JpZ2luPT1TT19FRV9PUklHSU5fVElNRVNUQU1QSU5HLiBBIHNvY2tldCB3aXRoIHN1Y2ggYSBwZW5kaW5nCitib3VuY2VkIHBhY2tldCBpcyByZWFkeSBmb3IgcmVhZGluZyBhcyBmYXIgYXMgc2VsZWN0KCkgaXMgY29uY2VybmVkLgorSWYgdGhlIG91dGdvaW5nIHBhY2tldCBoYXMgdG8gYmUgZnJhZ21lbnRlZCwgdGhlbiBvbmx5IHRoZSBmaXJzdAorZnJhZ21lbnQgaXMgdGltZSBzdGFtcGVkIGFuZCByZXR1cm5lZCB0byB0aGUgc2VuZGluZyBzb2NrZXQuCisKK0FsbCB0aHJlZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBldmVudCBpbiB0aW1lLCBidXQgd2VyZQorZ2VuZXJhdGVkIGluIGRpZmZlcmVudCB3YXlzLiBFYWNoIG9mIHRoZXNlIHZhbHVlcyBtYXkgYmUgZW1wdHkgKD0gYWxsCit6ZXJvKSwgaW4gd2hpY2ggY2FzZSBubyBzdWNoIHZhbHVlIHdhcyBhdmFpbGFibGUuIElmIHRoZSBhcHBsaWNhdGlvbgoraXMgbm90IGludGVyZXN0ZWQgaW4gc29tZSBvZiB0aGVzZSB2YWx1ZXMsIHRoZXkgY2FuIGJlIGxlZnQgYmxhbmsgdG8KK2F2b2lkIHRoZSBwb3RlbnRpYWwgb3ZlcmhlYWQgb2YgY2FsY3VsYXRpbmcgdGhlbS4KKworc3lzdGltZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSB0aW1lIGF0IHRoYXQgbW9tZW50LiBUaGlzCitjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgYWxzbyByZXR1cm5lZCB2aWEgU09fVElNRVNUQU1QW05TXS4gSWYgdGhlCit0aW1lIHN0YW1wIHdhcyBnZW5lcmF0ZWQgYnkgaGFyZHdhcmUsIHRoZW4gdGhpcyBmaWVsZCBpcworZW1wdHkuIE90aGVyd2lzZSBpdCBpcyBmaWxsZWQgaW4gaWYgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSBpcworc2V0LgorCitod3RpbWVyYXcgaXMgdGhlIG9yaWdpbmFsIGhhcmR3YXJlIHRpbWUgc3RhbXAuIEZpbGxlZCBpbiBpZgorU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgaXMgc2V0LiBObyBhc3N1bXB0aW9ucyBhYm91dCBpdHMKK3JlbGF0aW9uIHRvIHN5c3RlbSB0aW1lIHNob3VsZCBiZSBtYWRlLgorCitod3RpbWV0cmFucyBpcyB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCB0cmFuc2Zvcm1lZCBzbyB0aGF0IGl0Citjb3JyZXNwb25kcyBhcyBnb29kIGFzIHBvc3NpYmxlIHRvIHN5c3RlbSB0aW1lLiBUaGlzIGNvcnJlbGF0aW9uIGlzCitub3QgcGVyZmVjdDsgYXMgYSBjb25zZXF1ZW5jZSwgc29ydGluZyBwYWNrZXRzIHJlY2VpdmVkIHZpYSBkaWZmZXJlbnQKK05JQ3MgYnkgdGhlaXIgaHd0aW1ldHJhbnMgbWF5IGRpZmZlciBmcm9tIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUKK3JlY2VpdmVkLiBod3RpbWV0cmFucyBtYXkgYmUgbm9uLW1vbm90b25pYyBldmVuIGZvciB0aGUgc2FtZSBOSUMuCitGaWxsZWQgaW4gaWYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgaXMgc2V0LiBSZXF1aXJlcyBzdXBwb3J0CitieSB0aGUgbmV0d29yayBkZXZpY2UgYW5kIHdpbGwgYmUgZW1wdHkgd2l0aG91dCB0aGF0IHN1cHBvcnQuCisKKworU0lPQ1NIV1RTVEFNUDoKKworSGFyZHdhcmUgdGltZSBzdGFtcGluZyBtdXN0IGFsc28gYmUgaW5pdGlhbGl6ZWQgZm9yIGVhY2ggZGV2aWNlIGRyaXZlcgordGhhdCBpcyBleHBlY3RlZCB0byBkbyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nLiBUaGUgcGFyYW1ldGVyIGlzOgorCitzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHsKKyAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAvKiBubyBmbGFncyBkZWZpbmVkIHJpZ2h0IG5vdywgbXVzdCBiZSB6ZXJvICovCisgICAgaW50IHR4X3R5cGU7ICAgICAgICAgLyogSFdUU1RBTVBfVFhfKiAqLworICAgIGludCByeF9maWx0ZXI7ICAgICAgIC8qIEhXVFNUQU1QX0ZJTFRFUl8qICovCit9OworCitEZXNpcmVkIGJlaGF2aW9yIGlzIHBhc3NlZCBpbnRvIHRoZSBrZXJuZWwgYW5kIHRvIGEgc3BlY2lmaWMgZGV2aWNlIGJ5CitjYWxsaW5nIGlvY3RsKFNJT0NTSFdUU1RBTVApIHdpdGggYSBwb2ludGVyIHRvIGEgc3RydWN0IGlmcmVxIHdob3NlCitpZnJfZGF0YSBwb2ludHMgdG8gYSBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnLiBUaGUgdHhfdHlwZSBhbmQKK3J4X2ZpbHRlciBhcmUgaGludHMgdG8gdGhlIGRyaXZlciB3aGF0IGl0IGlzIGV4cGVjdGVkIHRvIGRvLiBJZgordGhlIHJlcXVlc3RlZCBmaW5lLWdyYWluZWQgZmlsdGVyaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzIGlzIG5vdAorc3VwcG9ydGVkLCB0aGUgZHJpdmVyIG1heSB0aW1lIHN0YW1wIG1vcmUgdGhhbiBqdXN0IHRoZSByZXF1ZXN0ZWQgdHlwZXMKK29mIHBhY2tldHMuCisKK0EgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgc2hhbGwgdXBkYXRlIHRoZSBzdHJ1Y3QKK3dpdGggdGhlIGFjdHVhbCwgcG9zc2libHkgbW9yZSBwZXJtaXNzaXZlIGNvbmZpZ3VyYXRpb24uIElmIHRoZQorcmVxdWVzdGVkIHBhY2tldHMgY2Fubm90IGJlIHRpbWUgc3RhbXBlZCwgdGhlbiBub3RoaW5nIHNob3VsZCBiZQorY2hhbmdlZCBhbmQgRVJBTkdFIHNoYWxsIGJlIHJldHVybmVkIChpbiBjb250cmFzdCB0byBFSU5WQUwsIHdoaWNoCitpbmRpY2F0ZXMgdGhhdCBTSU9DU0hXVFNUQU1QIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsKS4KKworT25seSBhIHByb2Nlc3NlcyB3aXRoIGFkbWluIHJpZ2h0cyBtYXkgY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uLiBVc2VyCitzcGFjZSBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgZG9uJ3QgaW50ZXJmZXJlCit3aXRoIGVhY2ggb3RoZXIgYW5kIHRoYXQgdGhlIHNldHRpbmdzIGFyZSByZXNldC4KKworLyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctPnR4X3R5cGUgKi8KK2VudW0geworCS8qCisJICogbm8gb3V0Z29pbmcgcGFja2V0IHdpbGwgbmVlZCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nOworCSAqIHNob3VsZCBhIHBhY2tldCBhcnJpdmUgd2hpY2ggYXNrcyBmb3IgaXQsIG5vIGhhcmR3YXJlCisJICogdGltZSBzdGFtcGluZyB3aWxsIGJlIGRvbmUKKwkgKi8KKwlIV1RTVEFNUF9UWF9PRkYsCisKKwkvKgorCSAqIGVuYWJsZXMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBmb3Igb3V0Z29pbmcgcGFja2V0czsKKwkgKiB0aGUgc2VuZGVyIG9mIHRoZSBwYWNrZXQgZGVjaWRlcyB3aGljaCBhcmUgdG8gYmUKKwkgKiB0aW1lIHN0YW1wZWQgYnkgc2V0dGluZyBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFCisJICogYmVmb3JlIHNlbmRpbmcgdGhlIHBhY2tldAorCSAqLworCUhXVFNUQU1QX1RYX09OLAorfTsKKworLyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctPnJ4X2ZpbHRlciAqLworZW51bSB7CisJLyogdGltZSBzdGFtcCBubyBpbmNvbWluZyBwYWNrZXQgYXQgYWxsICovCisJSFdUU1RBTVBfRklMVEVSX05PTkUsCisKKwkvKiB0aW1lIHN0YW1wIGFueSBpbmNvbWluZyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfQUxMLAorCisgICAgICAgIC8qIHJldHVybiB2YWx1ZTogdGltZSBzdGFtcCBhbGwgcGFja2V0cyByZXF1ZXN0ZWQgcGx1cyBzb21lIG90aGVycyAqLworICAgICAgICBIV1RTVEFNUF9GSUxURVJfU09NRSwKKworCS8qIFBUUCB2MSwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5ULAorCisgICAgICAgIC4uLgorfTsKKworCitERVZJQ0UgSU1QTEVNRU5UQVRJT04KKworQSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBtdXN0IHN1cHBvcnQgdGhlCitTSU9DU0hXVFNUQU1QIGlvY3RsLiBUaW1lIHN0YW1wcyBmb3IgcmVjZWl2ZWQgcGFja2V0cyBtdXN0IGJlIHN0b3JlZAoraW4gdGhlIHNrYiB3aXRoIHNrYl9od3RzdGFtcF9zZXQoKS4KKworVGltZSBzdGFtcHMgZm9yIG91dGdvaW5nIHBhY2tldHMgYXJlIHRvIGJlIGdlbmVyYXRlZCBhcyBmb2xsb3dzOgorLSBJbiBoYXJkX3N0YXJ0X3htaXQoKSwgY2hlY2sgaWYgc2tiX2h3dHN0YW1wX2NoZWNrX3R4X2hhcmR3YXJlKCkKKyAgcmV0dXJucyBub24temVyby4gSWYgeWVzLCB0aGVuIHRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQKKyAgdG8gZG8gaGFyZHdhcmUgdGltZSBzdGFtcGluZy4KKy0gSWYgdGhpcyBpcyBwb3NzaWJsZSBmb3IgdGhlIHNrYiBhbmQgcmVxdWVzdGVkLCB0aGVuIGRlY2xhcmUKKyAgdGhhdCB0aGUgZHJpdmVyIGlzIGRvaW5nIHRoZSB0aW1lIHN0YW1waW5nIGJ5IGNhbGxpbmcKKyAgc2tiX2h3dHN0YW1wX3R4X2luX3Byb2dyZXNzKCkuIEEgZHJpdmVyIG5vdCBzdXBwb3J0aW5nCisgIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgZG9lc24ndCBkbyB0aGF0LiBBIGRyaXZlciBtdXN0IG5ldmVyCisgIHRvdWNoIHNrX2J1ZmY6OnRzdGFtcCEgSXQgaXMgdXNlZCB0byBzdG9yZSBob3cgdGltZSBzdGFtcGluZworICBmb3IgYW4gb3V0Z29pbmcgcGFja2V0cyBpcyB0byBiZSBkb25lLgorLSBBcyBzb29uIGFzIHRoZSBkcml2ZXIgaGFzIHNlbnQgdGhlIHBhY2tldCBhbmQvb3Igb2J0YWluZWQgYQorICBoYXJkd2FyZSB0aW1lIHN0YW1wIGZvciBpdCwgaXQgcGFzc2VzIHRoZSB0aW1lIHN0YW1wIGJhY2sgYnkKKyAgY2FsbGluZyBza2JfaHd0c3RhbXBfdHgoKSB3aXRoIHRoZSBvcmlnaW5hbCBza2IsIHRoZSByYXcKKyAgaGFyZHdhcmUgdGltZSBzdGFtcCBhbmQgYSBoYW5kbGUgdG8gdGhlIGRldmljZSAobmVjZXNzYXJ5CisgIHRvIGNvbnZlcnQgdGhlIGhhcmR3YXJlIHRpbWUgc3RhbXAgdG8gc3lzdGVtIHRpbWUpLiBJZiBvYnRhaW5pbmcKKyAgdGhlIGhhcmR3YXJlIHRpbWUgc3RhbXAgc29tZWhvdyBmYWlscywgdGhlbiB0aGUgZHJpdmVyIHNob3VsZAorICBub3QgZmFsbCBiYWNrIHRvIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcuIFRoZSByYXRpb25hbGUgaXMgdGhhdAorICB0aGlzIHdvdWxkIG9jY3VyIGF0IGEgbGF0ZXIgdGltZSBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZQorICB0aGFuIG90aGVyIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcgYW5kIHRoZXJlZm9yZSBjb3VsZCBsZWFkCisgIHRvIHVuZXhwZWN0ZWQgZGVsdGFzIGJldHdlZW4gdGltZSBzdGFtcHMuCistIElmIHRoZSBkcml2ZXIgZGlkIG5vdCBjYWxsIHNrYl9od3RzdGFtcF90eF9pbl9wcm9ncmVzcygpLCB0aGVuCisgIGRldl9oYXJkX3N0YXJ0X3htaXQoKSBjaGVja3Mgd2hldGhlciBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nCisgIGlzIHdhbnRlZCBhcyBmYWxsYmFjayBhbmQgcG90ZW50aWFsbHkgZ2VuZXJhdGVzIHRoZSB0aW1lIHN0YW1wLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTgxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAordGltZXN0YW1waW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE0ODlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK0NQUEZMQUdTID0gLUkuLi8uLi8uLi9pbmNsdWRlCisKK3RpbWVzdGFtcGluZzogdGltZXN0YW1waW5nLmMKKworY2xlYW46CisJcm0gLWYgdGltZXN0YW1waW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2QxNDMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBkZW1vbnN0cmF0ZXMgaG93IHRoZSB2YXJpb3VzIHRpbWUgc3RhbXBpbmcgZmVhdHVyZXMgaW4KKyAqIHRoZSBMaW51eCBrZXJuZWwgd29yay4gSXQgZW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIGEgUFRQCisgKiBpbXBsZW1lbnRhdGlvbiBpbiBzdGFuZC1hbG9uZSBtYXN0ZXIgbW9kZSBieSBzZW5kaW5nIFBUUHYxIFN5bmMKKyAqIG11bHRpY2FzdHMgb25jZSBldmVyeSBzZWNvbmQuIEl0IGxvb2tzIGZvciBzaW1pbGFyIHBhY2tldHMsIGJ1dAorICogYmV5b25kIHRoYXQgZG9lc24ndCBhY3R1YWxseSBpbXBsZW1lbnQgUFRQLgorICoKKyAqIE91dGdvaW5nIHBhY2tldHMgYXJlIHRpbWUgc3RhbXBlZCB3aXRoIFNPX1RJTUVTVEFNUElORyB3aXRoIG9yCisgKiB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQuCisgKgorICogSW5jb21pbmcgcGFja2V0cyBhcmUgdGltZSBzdGFtcGVkIHdpdGggU09fVElNRVNUQU1QSU5HIHdpdGggb3IKKyAqIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydCwgU0lPQ0dTVEFNUFtOU10gKHBlci1zb2NrZXQgdGltZSBzdGFtcCkgYW5kCisgKiBTT19USU1FU1RBTVBbTlNdLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisKKyNpbmNsdWRlICJhc20vdHlwZXMuaCIKKyNpbmNsdWRlICJsaW51eC9uZXRfdHN0YW1wLmgiCisjaW5jbHVkZSAibGludXgvZXJycXVldWUuaCIKKworI2lmbmRlZiBTT19USU1FU1RBTVBJTkcKKyMgZGVmaW5lIFNPX1RJTUVTVEFNUElORyAgICAgICAgIDM3CisjIGRlZmluZSBTQ01fVElNRVNUQU1QSU5HICAgICAgICBTT19USU1FU1RBTVBJTkcKKyNlbmRpZgorCisjaWZuZGVmIFNPX1RJTUVTVEFNUE5TCisjIGRlZmluZSBTT19USU1FU1RBTVBOUyAzNQorI2VuZGlmCisKKyNpZm5kZWYgU0lPQ0dTVEFNUE5TCisjIGRlZmluZSBTSU9DR1NUQU1QTlMgMHg4OTA3CisjZW5kaWYKKworI2lmbmRlZiBTSU9DU0hXVFNUQU1QCisjIGRlZmluZSBTSU9DU0hXVFNUQU1QIDB4ODliMAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycm9yKQoreworCWlmIChlcnJvcikKKwkJcHJpbnRmKCJpbnZhbGlkIG9wdGlvbjogJXNcbiIsIGVycm9yKTsKKwlwcmludGYoInRpbWVzdGFtcGluZyBpbnRlcmZhY2Ugb3B0aW9uKlxuXG4iCisJICAgICAgICJPcHRpb25zOlxuIgorCSAgICAgICAiICBJUF9NVUxUSUNBU1RfTE9PUCAtIGxvb3Bpbmcgb3V0Z29pbmcgbXVsdGljYXN0c1xuIgorCSAgICAgICAiICBTT19USU1FU1RBTVAgLSBub3JtYWwgc29mdHdhcmUgdGltZSBzdGFtcGluZywgbXMgcmVzb2x1dGlvblxuIgorCSAgICAgICAiICBTT19USU1FU1RBTVBOUyAtIG1vcmUgYWNjdXJhdGUgc29mdHdhcmUgdGltZSBzdGFtcGluZ1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIC0gaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBvdXRnb2luZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgLSBzb2Z0d2FyZSBmYWxsYmFjayBmb3Igb3V0Z29pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIC0gaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBpbmNvbWluZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgLSBzb2Z0d2FyZSBmYWxsYmFjayBmb3IgaW5jb21pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIC0gcmVxdWVzdCByZXBvcnRpbmcgb2Ygc29mdHdhcmUgdGltZSBzdGFtcHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgLSByZXF1ZXN0IHJlcG9ydGluZyBvZiB0cmFuc2Zvcm1lZCBIVyB0aW1lIHN0YW1wc1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSAtIHJlcXVlc3QgcmVwb3J0aW5nIG9mIHJhdyBIVyB0aW1lIHN0YW1wc1xuIgorCSAgICAgICAiICBTSU9DR1NUQU1QIC0gY2hlY2sgbGFzdCBzb2NrZXQgdGltZSBzdGFtcFxuIgorCSAgICAgICAiICBTSU9DR1NUQU1QTlMgLSBtb3JlIGFjY3VyYXRlIHNvY2tldCB0aW1lIHN0YW1wXG4iKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBiYWlsKGNvbnN0IGNoYXIgKmVycm9yKQoreworCXByaW50ZigiJXM6ICVzXG4iLCBlcnJvciwgc3RyZXJyb3IoZXJybm8pKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzeW5jW10gPSB7CisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwKKwkweDVmLCAweDQ0LCAweDQ2LCAweDRjLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDEsCisKKwkvKiBmYWtlIHV1aWQgKi8KKwkweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisKKwkweDAwLCAweDAxLCAweDAwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDA1LCAweGNkLCAweDAxLAorCTB4MjksIDB4YjEsIDB4OGQsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAxLAorCisJLyogZmFrZSB1dWlkICovCisJMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDA0LCAweDA1LAorCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LAorCTB4NDQsIDB4NDYsIDB4NGMsIDB4NTQsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHg2MCwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHg2MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0NCwgMHg0NiwgMHg0YywgMHg1NCwKKwkweDAwLCAweDAxLAorCisJLyogZmFrZSB1dWlkICovCisJMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDA0LCAweDA1LAorCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIHZvaWQgc2VuZHBhY2tldChpbnQgc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcl9sZW4pCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCByZXM7CisKKwlyZXMgPSBzZW5kdG8oc29jaywgc3luYywgc2l6ZW9mKHN5bmMpLCAwLAorCQlhZGRyLCBhZGRyX2xlbik7CisJZ2V0dGltZW9mZGF5KCZub3csIDApOworCWlmIChyZXMgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgInNlbmQiLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpbnRmKCIlbGQuJTA2bGQ6IHNlbnQgJWQgYnl0ZXNcbiIsCisJCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkJICAgICAgIHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50cGFja2V0KHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJlcywKKwkJCWNoYXIgKmRhdGEsCisJCQlpbnQgc29jaywgaW50IHJlY3Ztc2dfZmxhZ3MsCisJCQlpbnQgc2lvY2dzdGFtcCwgaW50IHNpb2Nnc3RhbXBucykKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmZyb21fYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCXN0cnVjdCBjbXNnaGRyICpjbXNnOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisKKwlwcmludGYoIiVsZC4lMDZsZDogcmVjZWl2ZWQgJXMgZGF0YSwgJWQgYnl0ZXMgZnJvbSAlcywgJWQgYnl0ZXMgY29udHJvbCBtZXNzYWdlc1xuIiwKKwkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJICAgICAgIChyZWN2bXNnX2ZsYWdzICYgTVNHX0VSUlFVRVVFKSA/ICJlcnJvciIgOiAicmVndWxhciIsCisJICAgICAgIHJlcywKKwkgICAgICAgaW5ldF9udG9hKGZyb21fYWRkci0+c2luX2FkZHIpLAorCSAgICAgICBtc2ctPm1zZ19jb250cm9sbGVuKTsKKwlmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKG1zZyk7CisJICAgICBjbXNnOworCSAgICAgY21zZyA9IENNU0dfTlhUSERSKG1zZywgY21zZykpIHsKKwkJcHJpbnRmKCIgICBjbXNnIGxlbiAlZDogIiwgY21zZy0+Y21zZ19sZW4pOworCQlzd2l0Y2ggKGNtc2ctPmNtc2dfbGV2ZWwpIHsKKwkJY2FzZSBTT0xfU09DS0VUOgorCQkJcHJpbnRmKCJTT0xfU09DS0VUICIpOworCQkJc3dpdGNoIChjbXNnLT5jbXNnX3R5cGUpIHsKKwkJCWNhc2UgU09fVElNRVNUQU1QOiB7CisJCQkJc3RydWN0IHRpbWV2YWwgKnN0YW1wID0KKwkJCQkJKHN0cnVjdCB0aW1ldmFsICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiU09fVElNRVNUQU1QICVsZC4lMDZsZCIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl91c2VjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgU09fVElNRVNUQU1QTlM6IHsKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnN0YW1wID0KKwkJCQkJKHN0cnVjdCB0aW1lc3BlYyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIlNPX1RJTUVTVEFNUE5TICVsZC4lMDlsZCIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgU09fVElNRVNUQU1QSU5HOiB7CisJCQkJc3RydWN0IHRpbWVzcGVjICpzdGFtcCA9CisJCQkJCShzdHJ1Y3QgdGltZXNwZWMgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJTT19USU1FU1RBTVBJTkcgIik7CisJCQkJcHJpbnRmKCJTVyAlbGQuJTA5bGQgIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCXN0YW1wKys7CisJCQkJcHJpbnRmKCJIVyB0cmFuc2Zvcm1lZCAlbGQuJTA5bGQgIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCXN0YW1wKys7CisJCQkJcHJpbnRmKCJIVyByYXcgJWxkLiUwOWxkIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZGVmYXVsdDoKKwkJCQlwcmludGYoInR5cGUgJWQiLCBjbXNnLT5jbXNnX3R5cGUpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSVBQUk9UT19JUDoKKwkJCXByaW50ZigiSVBQUk9UT19JUCAiKTsKKwkJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCQljYXNlIElQX1JFQ1ZFUlI6IHsKKwkJCQlzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVyciA9CisJCQkJCShzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJJUF9SRUNWRVJSIGVlX2Vycm5vICclcycgZWVfb3JpZ2luICVkID0+ICVzIiwKKwkJCQkJc3RyZXJyb3IoZXJyLT5lZV9lcnJubyksCisJCQkJCWVyci0+ZWVfb3JpZ2luLAorI2lmZGVmIFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcKKwkJCQkJZXJyLT5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyA/CisJCQkJCSJib3VuY2VkIHBhY2tldCIgOiAidW5leHBlY3RlZCBvcmlnaW4iCisjZWxzZQorCQkJCQkicHJvYmFibHkgU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyIKKyNlbmRpZgorCQkJCQkpOworCQkJCWlmIChyZXMgPCBzaXplb2Yoc3luYykpCisJCQkJCXByaW50ZigiID0+IHRydW5jYXRlZCBkYXRhPyEiKTsKKwkJCQllbHNlIGlmICghbWVtY21wKHN5bmMsIGRhdGEgKyByZXMgLSBzaXplb2Yoc3luYyksCisJCQkJCQkJc2l6ZW9mKHN5bmMpKSkKKwkJCQkJcHJpbnRmKCIgPT4gR09UIE9VUiBEQVRBIEJBQ0sgKEhVUlJBWSEpIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIElQX1BLVElORk86IHsKKwkJCQlzdHJ1Y3QgaW5fcGt0aW5mbyAqcGt0aW5mbyA9CisJCQkJCShzdHJ1Y3QgaW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIklQX1BLVElORk8gaW50ZXJmYWNlIGluZGV4ICV1IiwKKwkJCQkJcGt0aW5mby0+aXBpX2lmaW5kZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJZGVmYXVsdDoKKwkJCQlwcmludGYoInR5cGUgJWQiLCBjbXNnLT5jbXNnX3R5cGUpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGYoImxldmVsICVkIHR5cGUgJWQiLAorCQkJCWNtc2ctPmNtc2dfbGV2ZWwsCisJCQkJY21zZy0+Y21zZ190eXBlKTsKKwkJCWJyZWFrOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlpZiAoc2lvY2dzdGFtcCkgeworCQlpZiAoaW9jdGwoc29jaywgU0lPQ0dTVEFNUCwgJnR2KSkKKwkJCXByaW50ZigiICAgJXM6ICVzXG4iLCAiU0lPQ0dTVEFNUCIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXByaW50ZigiU0lPQ0dTVEFNUCAlbGQuJTA2bGRcbiIsCisJCQkgICAgICAgKGxvbmcpdHYudHZfc2VjLAorCQkJICAgICAgIChsb25nKXR2LnR2X3VzZWMpOworCX0KKwlpZiAoc2lvY2dzdGFtcG5zKSB7CisJCWlmIChpb2N0bChzb2NrLCBTSU9DR1NUQU1QTlMsICZ0cykpCisJCQlwcmludGYoIiAgICVzOiAlc1xuIiwgIlNJT0NHU1RBTVBOUyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXByaW50ZigiU0lPQ0dTVEFNUE5TICVsZC4lMDlsZFxuIiwKKwkJCSAgICAgICAobG9uZyl0cy50dl9zZWMsCisJCQkgICAgICAgKGxvbmcpdHMudHZfbnNlYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWN2cGFja2V0KGludCBzb2NrLCBpbnQgcmVjdm1zZ19mbGFncywKKwkJICAgICAgIGludCBzaW9jZ3N0YW1wLCBpbnQgc2lvY2dzdGFtcG5zKQoreworCWNoYXIgZGF0YVsyNTZdOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBpb3ZlYyBlbnRyeTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gZnJvbV9hZGRyOworCXN0cnVjdCB7CisJCXN0cnVjdCBjbXNnaGRyIGNtOworCQljaGFyIGNvbnRyb2xbNTEyXTsKKwl9IGNvbnRyb2w7CisJaW50IHJlczsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJbXNnLm1zZ19pb3YgPSAmZW50cnk7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCWVudHJ5Lmlvdl9iYXNlID0gZGF0YTsKKwllbnRyeS5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpOworCW1zZy5tc2dfbmFtZSA9IChjYWRkcl90KSZmcm9tX2FkZHI7CisJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGZyb21fYWRkcik7CisJbXNnLm1zZ19jb250cm9sID0gJmNvbnRyb2w7CisJbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOworCisJcmVzID0gcmVjdm1zZyhzb2NrLCAmbXNnLCByZWN2bXNnX2ZsYWdzfE1TR19ET05UV0FJVCk7CisJaWYgKHJlcyA8IDApIHsKKwkJcHJpbnRmKCIlcyAlczogJXNcbiIsCisJCSAgICAgICAicmVjdm1zZyIsCisJCSAgICAgICAocmVjdm1zZ19mbGFncyAmIE1TR19FUlJRVUVVRSkgPyAiZXJyb3IiIDogInJlZ3VsYXIiLAorCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgeworCQlwcmludHBhY2tldCgmbXNnLCByZXMsIGRhdGEsCisJCQkgICAgc29jaywgcmVjdm1zZ19mbGFncywKKwkJCSAgICBzaW9jZ3N0YW1wLCBzaW9jZ3N0YW1wbnMpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBzb190aW1lc3RhbXBpbmdfZmxhZ3MgPSAwOworCWludCBzb190aW1lc3RhbXAgPSAwOworCWludCBzb190aW1lc3RhbXBucyA9IDA7CisJaW50IHNpb2Nnc3RhbXAgPSAwOworCWludCBzaW9jZ3N0YW1wbnMgPSAwOworCWludCBpcF9tdWx0aWNhc3RfbG9vcCA9IDA7CisJY2hhciAqaW50ZXJmYWNlOworCWludCBpOworCWludCBlbmFibGVkID0gMTsKKwlpbnQgc29jazsKKwlzdHJ1Y3QgaWZyZXEgZGV2aWNlOworCXN0cnVjdCBpZnJlcSBod3RzdGFtcDsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGh3Y29uZmlnLCBod2NvbmZpZ19yZXF1ZXN0ZWQ7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJc3RydWN0IGlwX21yZXEgaW1yOworCXN0cnVjdCBpbl9hZGRyIGlhZGRyOworCWludCB2YWw7CisJc29ja2xlbl90IGxlbjsKKwlzdHJ1Y3QgdGltZXZhbCBuZXh0OworCisJaWYgKGFyZ2MgPCAyKQorCQl1c2FnZSgwKTsKKwlpbnRlcmZhY2UgPSBhcmd2WzFdOworCisJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPX1RJTUVTVEFNUCIpKQorCQkJc29fdGltZXN0YW1wID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPX1RJTUVTVEFNUE5TIikpCisJCQlzb190aW1lc3RhbXBucyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTSU9DR1NUQU1QIikpCisJCQlzaW9jZ3N0YW1wID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNJT0NHU1RBTVBOUyIpKQorCQkJc2lvY2dzdGFtcG5zID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIklQX01VTFRJQ0FTVF9MT09QIikpCisJCQlpcF9tdWx0aWNhc3RfbG9vcCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7CisJCWVsc2UKKwkJCXVzYWdlKGFyZ3ZbaV0pOworCX0KKworCXNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworCWlmIChzb2NrZXQgPCAwKQorCQliYWlsKCJzb2NrZXQiKTsKKworCW1lbXNldCgmZGV2aWNlLCAwLCBzaXplb2YoZGV2aWNlKSk7CisJc3RybmNweShkZXZpY2UuaWZyX25hbWUsIGludGVyZmFjZSwgc2l6ZW9mKGRldmljZS5pZnJfbmFtZSkpOworCWlmIChpb2N0bChzb2NrLCBTSU9DR0lGQUREUiwgJmRldmljZSkgPCAwKQorCQliYWlsKCJnZXR0aW5nIGludGVyZmFjZSBJUCBhZGRyZXNzIik7CisKKwltZW1zZXQoJmh3dHN0YW1wLCAwLCBzaXplb2YoaHd0c3RhbXApKTsKKwlzdHJuY3B5KGh3dHN0YW1wLmlmcl9uYW1lLCBpbnRlcmZhY2UsIHNpemVvZihod3RzdGFtcC5pZnJfbmFtZSkpOworCWh3dHN0YW1wLmlmcl9kYXRhID0gKHZvaWQgKikmaHdjb25maWc7CisJbWVtc2V0KCZod2NvbmZpZywgMCwgc2l6ZW9mKCZod2NvbmZpZykpOworCWh3Y29uZmlnLnR4X3R5cGUgPQorCQkoc29fdGltZXN0YW1waW5nX2ZsYWdzICYgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSkgPworCQlIV1RTVEFNUF9UWF9PTiA6IEhXVFNUQU1QX1RYX09GRjsKKwlod2NvbmZpZy5yeF9maWx0ZXIgPQorCQkoc29fdGltZXN0YW1waW5nX2ZsYWdzICYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSkgPworCQlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkMgOiBIV1RTVEFNUF9GSUxURVJfTk9ORTsKKwlod2NvbmZpZ19yZXF1ZXN0ZWQgPSBod2NvbmZpZzsKKwlpZiAoaW9jdGwoc29jaywgU0lPQ1NIV1RTVEFNUCwgJmh3dHN0YW1wKSA8IDApIHsKKwkJaWYgKChlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFNVUCkgJiYKKwkJICAgIGh3Y29uZmlnX3JlcXVlc3RlZC50eF90eXBlID09IEhXVFNUQU1QX1RYX09GRiAmJgorCQkgICAgaHdjb25maWdfcmVxdWVzdGVkLnJ4X2ZpbHRlciA9PSBIV1RTVEFNUF9GSUxURVJfTk9ORSkKKwkJCXByaW50ZigiU0lPQ1NIV1RTVEFNUDogZGlzYWJsaW5nIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgbm90IHBvc3NpYmxlXG4iKTsKKwkJZWxzZQorCQkJYmFpbCgiU0lPQ1NIV1RTVEFNUCIpOworCX0KKwlwcmludGYoIlNJT0NTSFdUU1RBTVA6IHR4X3R5cGUgJWQgcmVxdWVzdGVkLCBnb3QgJWQ7IHJ4X2ZpbHRlciAlZCByZXF1ZXN0ZWQsIGdvdCAlZFxuIiwKKwkgICAgICAgaHdjb25maWdfcmVxdWVzdGVkLnR4X3R5cGUsIGh3Y29uZmlnLnR4X3R5cGUsCisJICAgICAgIGh3Y29uZmlnX3JlcXVlc3RlZC5yeF9maWx0ZXIsIGh3Y29uZmlnLnJ4X2ZpbHRlcik7CisKKwkvKiBiaW5kIHRvIFBUUCBwb3J0ICovCisJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworCWFkZHIuc2luX3BvcnQgPSBodG9ucygzMTkgLyogUFRQIGV2ZW50IHBvcnQgKi8pOworCWlmIChiaW5kKHNvY2ssCisJCSAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCisJCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKQorCQliYWlsKCJiaW5kIik7CisKKwkvKiBzZXQgbXVsdGljYXN0IGdyb3VwIGZvciBvdXRnb2luZyBwYWNrZXRzICovCisJaW5ldF9hdG9uKCIyMjQuMC4xLjEzMCIsICZpYWRkcik7IC8qIGFsdGVybmF0ZSBQVFAgZG9tYWluIDEgKi8KKwlhZGRyLnNpbl9hZGRyID0gaWFkZHI7CisJaW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gaWFkZHIuc19hZGRyOworCWltci5pbXJfaW50ZXJmYWNlLnNfYWRkciA9CisJCSgoc3RydWN0IHNvY2thZGRyX2luICopJmRldmljZS5pZnJfYWRkciktPnNpbl9hZGRyLnNfYWRkcjsKKwlpZiAoc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfSUYsCisJCSAgICAgICAmaW1yLmltcl9pbnRlcmZhY2Uuc19hZGRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSA8IDApCisJCWJhaWwoInNldCBtdWx0aWNhc3QiKTsKKworCS8qIGpvaW4gbXVsdGljYXN0IGdyb3VwLCBsb29wIG91ciBvd24gcGFja2V0ICovCisJaWYgKHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfQUREX01FTUJFUlNISVAsCisJCSAgICAgICAmaW1yLCBzaXplb2Yoc3RydWN0IGlwX21yZXEpKSA8IDApCisJCWJhaWwoImpvaW4gbXVsdGljYXN0IGdyb3VwIik7CisKKwlpZiAoc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfTE9PUCwKKwkJICAgICAgICZpcF9tdWx0aWNhc3RfbG9vcCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApIHsKKwkJYmFpbCgibG9vcCBtdWx0aWNhc3QiKTsKKwl9CisKKwkvKiBzZXQgc29ja2V0IG9wdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcgKi8KKwlpZiAoc29fdGltZXN0YW1wICYmCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QLAorCQkJICAgJmVuYWJsZWQsIHNpemVvZihlbmFibGVkKSkgPCAwKQorCQliYWlsKCJzZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUCIpOworCisJaWYgKHNvX3RpbWVzdGFtcG5zICYmCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QTlMsCisJCQkgICAmZW5hYmxlZCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApCisJCWJhaWwoInNldHNvY2tvcHQgU09fVElNRVNUQU1QTlMiKTsKKworCWlmIChzb190aW1lc3RhbXBpbmdfZmxhZ3MgJiYKKwkJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsCisJCQkgICAmc29fdGltZXN0YW1waW5nX2ZsYWdzLAorCQkJICAgc2l6ZW9mKHNvX3RpbWVzdGFtcGluZ19mbGFncykpIDwgMCkKKwkJYmFpbCgic2V0c29ja29wdCBTT19USU1FU1RBTVBJTkciKTsKKworCS8qIHJlcXVlc3QgSVBfUEtUSU5GTyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCisJaWYgKHNldHNvY2tvcHQoc29jaywgU09MX0lQLCBJUF9QS1RJTkZPLAorCQkgICAgICAgJmVuYWJsZWQsIHNpemVvZihlbmFibGVkKSkgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgInNldHNvY2tvcHQgSVBfUEtUSU5GTyIsIHN0cmVycm9yKGVycm5vKSk7CisKKwkvKiB2ZXJpZnkgc29ja2V0IG9wdGlvbnMgKi8KKwlsZW4gPSBzaXplb2YodmFsKTsKKwlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVAsICZ2YWwsICZsZW4pIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJnZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUCIsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQlwcmludGYoIlNPX1RJTUVTVEFNUCAlZFxuIiwgdmFsKTsKKworCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUE5TLCAmdmFsLCAmbGVuKSA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAiZ2V0c29ja29wdCBTT19USU1FU1RBTVBOUyIsCisJCSAgICAgICBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpbnRmKCJTT19USU1FU1RBTVBOUyAlZFxuIiwgdmFsKTsKKworCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUElORywgJnZhbCwgJmxlbikgPCAwKSB7CisJCXByaW50ZigiJXM6ICVzXG4iLCAiZ2V0c29ja29wdCBTT19USU1FU1RBTVBJTkciLAorCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlNPX1RJTUVTVEFNUElORyAlZFxuIiwgdmFsKTsKKwkJaWYgKHZhbCAhPSBzb190aW1lc3RhbXBpbmdfZmxhZ3MpCisJCQlwcmludGYoIiAgIG5vdCB0aGUgZXhwZWN0ZWQgdmFsdWUgJWRcbiIsCisJCQkgICAgICAgc29fdGltZXN0YW1waW5nX2ZsYWdzKTsKKwl9CisKKwkvKiBzZW5kIHBhY2tldHMgZm9yZXZlciBldmVyeSBmaXZlIHNlY29uZHMgKi8KKwlnZXR0aW1lb2ZkYXkoJm5leHQsIDApOworCW5leHQudHZfc2VjID0gKG5leHQudHZfc2VjICsgMSkgLyA1ICogNTsKKwluZXh0LnR2X3VzZWMgPSAwOworCXdoaWxlICgxKSB7CisJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJc3RydWN0IHRpbWV2YWwgZGVsdGE7CisJCWxvbmcgZGVsdGFfdXM7CisJCWludCByZXM7CisJCWZkX3NldCByZWFkZnMsIGVycm9yZnM7CisKKwkJZ2V0dGltZW9mZGF5KCZub3csIDApOworCQlkZWx0YV91cyA9IChsb25nKShuZXh0LnR2X3NlYyAtIG5vdy50dl9zZWMpICogMTAwMDAwMCArCisJCQkobG9uZykobmV4dC50dl91c2VjIC0gbm93LnR2X3VzZWMpOworCQlpZiAoZGVsdGFfdXMgPiAwKSB7CisJCQkvKiBjb250aW51ZSB3YWl0aW5nIGZvciB0aW1lb3V0IG9yIGRhdGEgKi8KKwkJCWRlbHRhLnR2X3NlYyA9IGRlbHRhX3VzIC8gMTAwMDAwMDsKKwkJCWRlbHRhLnR2X3VzZWMgPSBkZWx0YV91cyAlIDEwMDAwMDA7CisKKwkJCUZEX1pFUk8oJnJlYWRmcyk7CisJCQlGRF9aRVJPKCZlcnJvcmZzKTsKKwkJCUZEX1NFVChzb2NrLCAmcmVhZGZzKTsKKwkJCUZEX1NFVChzb2NrLCAmZXJyb3Jmcyk7CisJCQlwcmludGYoIiVsZC4lMDZsZDogc2VsZWN0ICVsZHVzXG4iLAorCQkJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCQkJICAgICAgIGRlbHRhX3VzKTsKKwkJCXJlcyA9IHNlbGVjdChzb2NrICsgMSwgJnJlYWRmcywgMCwgJmVycm9yZnMsICZkZWx0YSk7CisJCQlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisJCQlwcmludGYoIiVsZC4lMDZsZDogc2VsZWN0IHJldHVybmVkOiAlZCwgJXNcbiIsCisJCQkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJCQkgICAgICAgcmVzLAorCQkJICAgICAgIHJlcyA8IDAgPyBzdHJlcnJvcihlcnJubykgOiAic3VjY2VzcyIpOworCQkJaWYgKHJlcyA+IDApIHsKKwkJCQlpZiAoRkRfSVNTRVQoc29jaywgJnJlYWRmcykpCisJCQkJCXByaW50ZigicmVhZHkgZm9yIHJlYWRpbmdcbiIpOworCQkJCWlmIChGRF9JU1NFVChzb2NrLCAmZXJyb3JmcykpCisJCQkJCXByaW50ZigiaGFzIGVycm9yXG4iKTsKKwkJCQlyZWN2cGFja2V0KHNvY2ssIDAsCisJCQkJCSAgIHNpb2Nnc3RhbXAsCisJCQkJCSAgIHNpb2Nnc3RhbXBucyk7CisJCQkJcmVjdnBhY2tldChzb2NrLCBNU0dfRVJSUVVFVUUsCisJCQkJCSAgIHNpb2Nnc3RhbXAsCisJCQkJCSAgIHNpb2Nnc3RhbXBucyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSBvbmUgcGFja2V0ICovCisJCQlzZW5kcGFja2V0KHNvY2ssCisJCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkJCSAgIHNpemVvZihhZGRyKSk7CisJCQluZXh0LnR2X3NlYyArPSA1OworCQkJY29udGludWU7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKaW5kZXggN2ZhNGIyNy4uZWRiN2FlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKQEAgLTU2LDYgKzU2LDEyIEBACiAgICAgaGFyZHdhcmUuCiAgIC0gZnNsLG1hZ2ljLXBhY2tldCA6IElmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cwogICAgIHdha2luZyB1cCB2aWEgbWFnaWMgcGFja2V0LgorICAtIGJkLXN0YXNoIDogSWYgcHJlc2VudCwgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIHN0YXNoaW5nCisgICAgYnVmZmVyIGRlc2NyaXB0b3JzIGluIHRoZSBMMi4KKyAgLSByeC1zdGFzaC1sZW4gOiBEZW5vdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgYSByZWNlaXZlZCBidWZmZXIgdG8gc3Rhc2gKKyAgICBpbiB0aGUgTDIuCisgIC0gcngtc3Rhc2gtaWR4IDogRGVub3RlcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgZnJvbSB0aGUgcmVjZWl2ZWQKKyAgICBidWZmZXIgdG8gc3Rhc2ggaW4gdGhlIEwyLgogCiBFeGFtcGxlOgogCWV0aGVybmV0QDI0MDAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKaW5kZXggYWFiY2MzYS4uM2MwMGM5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKQEAgLTIsOCArMiw2IEBACiAJLSB0aGlzIGZpbGUuCiBzY2hlZC1hcmNoLnR4dAogCS0gQ1BVIFNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbiBoaW50cyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUuCi1zY2hlZC1jb2RpbmcudHh0Ci0JLSByZWZlcmVuY2UgZm9yIHZhcmlvdXMgc2NoZWR1bGVyLXJlbGF0ZWQgbWV0aG9kcyBpbiB0aGUgTygxKSBzY2hlZHVsZXIuCiBzY2hlZC1kZXNpZ24tQ0ZTLnR4dAogCS0gZ29hbHMsIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIENvbXBsZXRlIEZhaXIgU2NoZWR1bGVyLgogc2NoZWQtZG9tYWlucy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWNvZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQ4ZGI3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWNvZGluZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotICAgICBSZWZlcmVuY2UgZm9yIHZhcmlvdXMgc2NoZWR1bGVyLXJlbGF0ZWQgbWV0aG9kcyBpbiB0aGUgTygxKSBzY2hlZHVsZXIKLQkJUm9iZXJ0IExvdmUgPHJtbEB0ZWNoOS5uZXQ+LCBNb250YVZpc3RhIFNvZnR3YXJlCi0KLQotTm90ZSBtb3N0IG9mIHRoZXNlIG1ldGhvZHMgYXJlIGxvY2FsIHRvIGtlcm5lbC9zY2hlZC5jIC0gdGhpcyBpcyBieSBkZXNpZ24uCi1UaGUgc2NoZWR1bGVyIGlzIG1lYW50IHRvIGJlIHNlbGYtY29udGFpbmVkIGFuZCBhYnN0cmFjdGVkIGF3YXkuICBUaGlzIGRvY3VtZW50Ci1pcyBwcmltYXJpbHkgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxlciwgbm90IGludGVyZmFjaW5nIHRvIGl0LiAgU29tZSBvZgotdGhlIGRpc2N1c3NlZCBpbnRlcmZhY2VzLCBob3dldmVyLCBhcmUgZ2VuZXJhbCBwcm9jZXNzL3NjaGVkdWxpbmcgbWV0aG9kcy4KLVRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaC4KLQotCi1NYWluIFNjaGVkdWxpbmcgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBsb2FkX2JhbGFuY2UocnVucXVldWVfdCAqdGhpc19ycSwgaW50IGlkbGUpCi0JQXR0ZW1wdHMgdG8gcHVsbCB0YXNrcyBmcm9tIG9uZSBjcHUgdG8gYW5vdGhlciB0byBiYWxhbmNlIGNwdSB1c2FnZSwKLQlpZiBuZWVkZWQuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZXhwbGljaXRseSBpZiB0aGUgcnVucXVldWVzIGFyZQotCWltYmFsYW5jZWQgb3IgcGVyaW9kaWNhbGx5IGJ5IHRoZSB0aW1lciB0aWNrLiAgUHJpb3IgdG8gY2FsbGluZywKLQl0aGUgY3VycmVudCBydW5xdWV1ZSBtdXN0IGJlIGxvY2tlZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KLQotdm9pZCBzY2hlZHVsZSgpCi0JVGhlIG1haW4gc2NoZWR1bGluZyBmdW5jdGlvbi4gIFVwb24gcmV0dXJuLCB0aGUgaGlnaGVzdCBwcmlvcml0eQotCXByb2Nlc3Mgd2lsbCBiZSBhY3RpdmUuCi0KLQotTG9ja2luZwotLS0tLS0tLQotCi1FYWNoIHJ1bnF1ZXVlIGhhcyBpdHMgb3duIGxvY2ssIHJxLT5sb2NrLiAgV2hlbiBtdWx0aXBsZSBydW5xdWV1ZXMgbmVlZAotdG8gYmUgbG9ja2VkLCBsb2NrIGFjcXVpcmVzIG11c3QgYmUgb3JkZXJlZCBieSBhc2NlbmRpbmcgJnJ1bnF1ZXVlIHZhbHVlLgotCi1BIHNwZWNpZmljIHJ1bnF1ZXVlIGlzIGxvY2tlZCB2aWEKLQotCXRhc2tfcnFfbG9jayh0YXNrX3QgcGlkLCB1bnNpZ25lZCBsb25nICpmbGFncykKLQotd2hpY2ggZGlzYWJsZXMgcHJlZW1wdGlvbiwgZGlzYWJsZXMgaW50ZXJydXB0cywgYW5kIGxvY2tzIHRoZSBydW5xdWV1ZSBwaWQgaXMKLXJ1bm5pbmcgb24uICBMaWtld2lzZSwKLQotCXRhc2tfcnFfdW5sb2NrKHRhc2tfdCBwaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotCi11bmxvY2tzIHRoZSBydW5xdWV1ZSBwaWQgaXMgcnVubmluZyBvbiwgcmVzdG9yZXMgaW50ZXJydXB0cyB0byB0aGVpciBwcmV2aW91cwotc3RhdGUsIGFuZCByZWVuYWJsZXMgcHJlZW1wdGlvbi4KLQotVGhlIHJvdXRpbmVzCi0KLQlkb3VibGVfcnFfbG9jayhydW5xdWV1ZV90ICpycTEsIHJ1bnF1ZXVlX3QgKnJxMikKLQotYW5kCi0KLQlkb3VibGVfcnFfdW5sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQotCi1zYWZlbHkgbG9jayBhbmQgdW5sb2NrLCByZXNwZWN0aXZlbHksIHRoZSB0d28gc3BlY2lmaWVkIHJ1bnF1ZXVlcy4gIFRoZXkgZG8KLW5vdCwgaG93ZXZlciwgZGlzYWJsZSBhbmQgcmVzdG9yZSBpbnRlcnJ1cHRzLiAgVXNlcnMgYXJlIHJlcXVpcmVkIHRvIGRvIHNvCi1tYW51YWxseSBiZWZvcmUgYW5kIGFmdGVyIGNhbGxzLgotCi0KLVZhbHVlcwotLS0tLS0tCi0KLU1BWF9QUklPCi0JVGhlIG1heGltdW0gcHJpb3JpdHkgb2YgdGhlIHN5c3RlbSwgc3RvcmVkIGluIHRoZSB0YXNrIGFzIHRhc2stPnByaW8uCi0JTG93ZXIgcHJpb3JpdGllcyBhcmUgaGlnaGVyLiAgTm9ybWFsIChub24tUlQpIHByaW9yaXRpZXMgcmFuZ2UgZnJvbQotCU1BWF9SVF9QUklPIHRvIChNQVhfUFJJTyAtIDEpLgotTUFYX1JUX1BSSU8KLQlUaGUgbWF4aW11bSByZWFsLXRpbWUgcHJpb3JpdHkgb2YgdGhlIHN5c3RlbS4gIFZhbGlkIFJUIHByaW9yaXRpZXMKLQlyYW5nZSBmcm9tIDAgdG8gKE1BWF9SVF9QUklPIC0gMSkuCi1NQVhfVVNFUl9SVF9QUklPCi0JVGhlIG1heGltdW0gcmVhbC10aW1lIHByaW9yaXR5IHRoYXQgaXMgZXhwb3J0ZWQgdG8gdXNlci1zcGFjZS4gIFNob3VsZAotCWFsd2F5cyBiZSBlcXVhbCB0byBvciBsZXNzIHRoYW4gTUFYX1JUX1BSSU8uICBTZXR0aW5nIGl0IGxlc3MgYWxsb3dzCi0Ja2VybmVsIHRocmVhZHMgdG8gaGF2ZSBoaWdoZXIgcHJpb3JpdGllcyB0aGFuIGFueSB1c2VyLXNwYWNlIHRhc2suCi1NSU5fVElNRVNMSUNFCi1NQVhfVElNRVNMSUNFCi0JUmVzcGVjdGl2ZWx5LCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB0aW1lc2xpY2VzIChxdWFudGEpIG9mIGEgcHJvY2Vzcy4KLQotRGF0YQotLS0tLQotCi1zdHJ1Y3QgcnVucXVldWUKLQlUaGUgbWFpbiBwZXItQ1BVIHJ1bnF1ZXVlIGRhdGEgc3RydWN0dXJlLgotc3RydWN0IHRhc2tfc3RydWN0Ci0JVGhlIG1haW4gcGVyLXByb2Nlc3MgZGF0YSBzdHJ1Y3R1cmUuCi0KLQotR2VuZXJhbCBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0KLQotY3B1X3JxKGNwdSkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSBvZiB0aGUgc3BlY2lmaWVkIGNwdS4KLXRoaXNfcnEoKQotCVJldHVybnMgdGhlIHJ1bnF1ZXVlIG9mIHRoZSBjdXJyZW50IGNwdS4KLXRhc2tfcnEocGlkKQotCVJldHVybnMgdGhlIHJ1bnF1ZXVlIHdoaWNoIGhvbGRzIHRoZSBzcGVjaWZpZWQgcGlkLgotY3B1X2N1cnIoY3B1KQotCVJldHVybnMgdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGdpdmVuIGNwdS4KLXJ0X3Rhc2socGlkKQotCVJldHVybnMgdHJ1ZSBpZiBwaWQgaXMgcmVhbC10aW1lLCBmYWxzZSBpZiBub3QuCi0KLQotUHJvY2VzcyBDb250cm9sIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgc2V0X3VzZXJfbmljZSh0YXNrX3QgKnAsIGxvbmcgbmljZSkKLQlTZXRzIHRoZSAibmljZSIgdmFsdWUgb2YgdGFzayBwIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLWludCBzZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQotCVNldHMgdGhlIHNjaGVkdWxpbmcgcG9saWN5IGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gcGlkLgotaW50IHNldF9jcHVzX2FsbG93ZWQodGFza190ICpwLCB1bnNpZ25lZCBsb25nIG5ld19tYXNrKQotCVNldHMgYSBnaXZlbiB0YXNrJ3MgQ1BVIGFmZmluaXR5IGFuZCBtaWdyYXRlcyBpdCB0byBhIHByb3BlciBjcHUuCi0JQ2FsbGVycyBtdXN0IGhhdmUgYSB2YWxpZCByZWZlcmVuY2UgdG8gdGhlIHRhc2sgYW5kIGFzc3VyZSB0aGUKLQl0YXNrIG5vdCBleGl0IHByZW1hdHVyZWx5LiAgTm8gbG9ja3MgY2FuIGJlIGhlbGQgZHVyaW5nIHRoZSBjYWxsLgotc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkKLQlTZXRzIHRoZSBnaXZlbiB0YXNrJ3Mgc3RhdGUgdG8gdGhlIGdpdmVuIHZhbHVlLgotc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCi0JU2V0cyB0aGUgY3VycmVudCB0YXNrJ3Mgc3RhdGUgdG8gdGhlIGdpdmVuIHZhbHVlLgotdm9pZCBzZXRfdHNrX25lZWRfcmVzY2hlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLQlTZXRzIG5lZWRfcmVzY2hlZCBpbiB0aGUgZ2l2ZW4gdGFzay4KLXZvaWQgY2xlYXJfdHNrX25lZWRfcmVzY2hlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLQlDbGVhcnMgbmVlZF9yZXNjaGVkIGluIHRoZSBnaXZlbiB0YXNrLgotdm9pZCBzZXRfbmVlZF9yZXNjaGVkKCkKLQlTZXRzIG5lZWRfcmVzY2hlZCBpbiB0aGUgY3VycmVudCB0YXNrLgotdm9pZCBjbGVhcl9uZWVkX3Jlc2NoZWQoKQotCUNsZWFycyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGN1cnJlbnQgdGFzay4KLWludCBuZWVkX3Jlc2NoZWQoKQotCVJldHVybnMgdHJ1ZSBpZiBuZWVkX3Jlc2NoZWQgaXMgc2V0IGluIHRoZSBjdXJyZW50IHRhc2ssIGZhbHNlCi0Jb3RoZXJ3aXNlLgoteWllbGQoKQotCVBsYWNlIHRoZSBjdXJyZW50IHByb2Nlc3MgYXQgdGhlIGVuZCBvZiB0aGUgcnVucXVldWUgYW5kIGNhbGwgc2NoZWR1bGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvb3NkLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9vc2QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMTYyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvb3NkLnR4dApAQCAtMCwwICsxLDE5OCBAQAorVGhlIE9TRCBTdGFuZGFyZAorPT09PT09PT09PT09PT09PQorT1NEIChPYmplY3QtQmFzZWQgU3RvcmFnZSBEZXZpY2UpIGlzIGEgVDEwIFNDU0kgY29tbWFuZCBzZXQgdGhhdCBpcyBkZXNpZ25lZAordG8gcHJvdmlkZSBlZmZpY2llbnQgb3BlcmF0aW9uIG9mIGlucHV0L291dHB1dCBsb2dpY2FsIHVuaXRzIHRoYXQgbWFuYWdlIHRoZQorYWxsb2NhdGlvbiwgcGxhY2VtZW50LCBhbmQgYWNjZXNzaW5nIG9mIHZhcmlhYmxlLXNpemUgZGF0YS1zdG9yYWdlIGNvbnRhaW5lcnMsCitjYWxsZWQgb2JqZWN0cy4gT2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gY29udGFpbiBvcGVyYXRpbmcgc3lzdGVtIGFuZCBhcHBsaWNhdGlvbgorY29uc3RydWN0cy4gRWFjaCBvYmplY3QgaGFzIGFzc29jaWF0ZWQgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBpdCwgd2hpY2ggYXJlCitpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBvYmplY3QgYW5kIHByb3ZpZGUgbWV0YWRhdGEgYWJvdXQgdGhlIG9iamVjdC4gVGhlIHN0YW5kYXJkCitkZWZpbmVzIHNvbWUgY29tbW9uIG9ibGlnYXRvcnkgYXR0cmlidXRlcywgYnV0IHVzZXIgYXR0cmlidXRlcyBjYW4gYmUgYWRkZWQgYXMKK25lZWRlZC4KKworU2VlOiBodHRwOi8vd3d3LnQxMC5vcmcvZnRwL3QxMC9kcmFmdHMvb3NkMi8gZm9yIHRoZSBsYXRlc3QgZHJhZnQgZm9yIE9TRCAyCitvciBzZWFyY2ggdGhlIHdlYiBmb3IgIk9TRCBTQ1NJIgorCitPU0QgaW4gdGhlIExpbnV4IEtlcm5lbAorPT09PT09PT09PT09PT09PT09PT09PT0KK29zZC1pbml0aWF0b3I6CisgIFRoZSBtYWluIGNvbXBvbmVudCBvZiBPU0QgaW4gS2VybmVsIGlzIHRoZSBvc2QtaW5pdGlhdG9yIGxpYnJhcnkuIEl0cyBtYWluCit1c2VyIGlzIGludGVuZGVkIHRvIGJlIHRoZSBwTkZTLW92ZXItb2JqZWN0cyBsYXlvdXQgZHJpdmVyLCB3aGljaCB1c2VzIG9iamVjdHMKK2FzIGl0cyBiYWNrLWVuZCBkYXRhIHN0b3JhZ2UuIE90aGVyIGNsaWVudHMgYXJlIHRoZSBvdGhlciBvc2QgcGFydHMgbGlzdGVkIGJlbG93LgorCitvc2QtdWxkOgorICBUaGlzIGlzIGEgU0NTSSBVTEQgdGhhdCByZWdpc3RlcnMgZm9yIE9TRCB0eXBlIGRldmljZXMgYW5kIHByb3ZpZGVzIGEgdGVzdGluZworcGxhdGZvcm0sIGJvdGggZm9yIHRoZSBpbi1rZXJuZWwgaW5pdGlhdG9yIGFzIHdlbGwgYXMgY29ubmVjdGVkIHRhcmdldHMuIEl0CitjdXJyZW50bHkgaGFzIG5vIHVzZWZ1bCB1c2VyLW1vZGUgQVBJLCB0aG91Z2ggaXQgY291bGQgaGF2ZSBpZiBuZWVkIGJlLgorCitleG9mczoKKyAgSXMgYW4gT1NEIGJhc2VkIExpbnV4IGZpbGUgc3lzdGVtLiBJdCB1c2VzIHRoZSBvc2QtaW5pdGlhdG9yIGFuZCBvc2QtdWxkLAordG8gZXhwb3J0IGEgdXNhYmxlIGZpbGUgc3lzdGVtIGZvciB1c2Vycy4KK1NlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4b2ZzLnR4dCBmb3IgbW9yZSBkZXRhaWxzCisKK29zZCB0YXJnZXQ6CisgIFRoZXJlIGFyZSBubyBjdXJyZW50IHBsYW5zIGZvciBhbiBPU0QgdGFyZ2V0IGltcGxlbWVudGF0aW9uIGluIGtlcm5lbC4gRm9yIGFsbAorbmVlZHMsIGEgdXNlci1tb2RlIHRhcmdldCB0aGF0IGlzIGJhc2VkIG9uIHRoZSBzY3NpIHRndCB0YXJnZXQgZnJhbWV3b3JrIGlzCithdmFpbGFibGUgZnJvbSBPaGlvIFN1cGVyY29tcHV0ZXIgQ2VudGVyIChPU0MpIGF0OgoraHR0cDovL3d3dy5vcGVuLW9zZC5vcmcvYmluL3ZpZXcvTWFpbi9Pc2NPc2RQcm9qZWN0CitUaGVyZSBhcmUgc2V2ZXJhbCBvdGhlciB0YXJnZXQgaW1wbGVtZW50YXRpb25zLiBTZWUgaHR0cDovL29wZW4tb3NkLm9yZyBmb3IgbW9yZQorbGlua3MuCisKK0ZpbGVzIGFuZCBGb2xkZXJzCis9PT09PT09PT09PT09PT09PQorVGhpcyBpcyB0aGUgY29tcGxldGUgbGlzdCBvZiBmaWxlcyBpbmNsdWRlZCBpbiB0aGlzIHdvcms6CitpbmNsdWRlL3Njc2kvCisJb3NkX2luaXRpYXRvci5oICAgTWFpbiBBUEkgZm9yIHRoZSBpbml0aWF0b3IgbGlicmFyeQorCW9zZF90eXBlcy5oCSAgQ29tbW9uIE9TRCB0eXBlcworCW9zZF9zZWMuaAkgIFNlY3VyaXR5IE1hbmFnZXIgQVBJCisJb3NkX3Byb3RvY29sLmgJICBXaXJlIGRlZmluaXRpb25zIG9mIHRoZSBPU0Qgc3RhbmRhcmQgcHJvdG9jb2wKKwlvc2RfYXR0cmlidXRlcy5oICBXaXJlIGRlZmluaXRpb25zIG9mIE9TRCBhdHRyaWJ1dGVzCisKK2RyaXZlcnMvc2NzaS9vc2QvCisJb3NkX2luaXRpYXRvci5jICAgT1NELUluaXRpYXRvciBsaWJyYXJ5IGltcGxlbWVudGF0aW9uCisJb3NkX3VsZC5jCSAgVGhlIE9TRCBzY3NpIFVMRAorCW9zZF9rdGVzdC57aCxjfQkgIEluLWtlcm5lbCB0ZXN0IHN1aXRlIChjYWxsZWQgYnkgb3NkX3VsZCkKKwlvc2RfZGVidWcuaAkgIFNvbWUgcHJpbnRrIG1hY3JvcworCU1ha2VmaWxlCSAgRm9yIGJvdGggaW4tdHJlZSBhbmQgb3V0LW9mLXRyZWUgY29tcGlsYXRpb24KKwlLY29uZmlnCQkgIEVuYWJsZXMgaW5jbHVzaW9uIG9mIHRoZSBkaWZmZXJlbnQgcGllY2VzCisJb3NkX3Rlc3QuYwkgIFVzZXItbW9kZSBhcHBsaWNhdGlvbiB0byBjYWxsIHRoZSBrZXJuZWwgdGVzdHMKKworVGhlIE9TRC1Jbml0aWF0b3IgTGlicmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PQorb3NkX2luaXRpYXRvciBpcyBhIGxvdyBsZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhbiBvc2QgaW5pdGlhdG9yIGVuY29kZXIuCitCdXQgZXZlbiB0aG91Z2gsIGl0IHNob3VsZCBiZSBpbnR1aXRpdmUgYW5kIGVhc3kgdG8gdXNlLiBQZXJoYXBzIG92ZXIgdGltZSBhbgoraGlnaGVyIGxldmVyIHdpbGwgZm9ybSB0aGF0IGF1dG9tYXRlcyBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiByZWNpcGVzLgorCitpbml0L2Zpbmk6CistIG9zZF9kZXZfaW5pdCgpIGFzc29jaWF0ZXMgYSBzY3NpX2RldmljZSB3aXRoIGFuIG9zZF9kZXYgc3RydWN0dXJlCisgIGFuZCBpbml0aWFsaXplcyBzb21lIGdsb2JhbCBwb29scy4gVGhpcyBzaG91bGQgYmUgZG9uZSBvbmNlIHBlciBzY3NpX2RldmljZQorICAoT1NEIExVTikuIFRoZSBvc2RfZGV2IHN0cnVjdHVyZSBpcyBuZWVkZWQgZm9yIGNhbGxpbmcgb3NkX3N0YXJ0X3JlcXVlc3QoKS4KKworLSBvc2RfZGV2X2ZpbmkoKSBjbGVhbnMgdXAgYmVmb3JlIGEgb3NkX2Rldi9zY3NpX2RldmljZSBkZXN0cnVjdGlvbi4KKworT1NEIGNvbW1hbmRzIGVuY29kaW5nLCBleGVjdXRpb24sIGFuZCBkZWNvZGluZyBvZiByZXN1bHRzOgorCitzdHJ1Y3Qgb3NkX3JlcXVlc3QncyBpcyB1c2VkIHRvIGl0ZXJhdGl2ZWx5IGVuY29kZSBhbiBPU0QgY29tbWFuZCBhbmQgY2FycnkKK2l0cyBzdGF0ZSB0aHJvdWdob3V0IGV4ZWN1dGlvbi4gRWFjaCByZXF1ZXN0IGdvZXMgdGhyb3VnaCB0aGVzZSBzdGFnZXM6CisKK2EuIG9zZF9zdGFydF9yZXF1ZXN0KCkgYWxsb2NhdGVzIHRoZSByZXF1ZXN0LgorCitiLiBBbnkgb2YgdGhlIG9zZF9yZXFfKiBtZXRob2RzIGlzIHVzZWQgdG8gZW5jb2RlIGEgcmVxdWVzdCBvZiB0aGUgc3BlY2lmaWVkCisgICB0eXBlLgorCitjLiBvc2RfcmVxX2FkZF97Z2V0LHNldH1fYXR0cl8qIG1heSBiZSBjYWxsZWQgdG8gYWRkIGdldC9zZXQgYXR0cmlidXRlcyB0byB0aGUKKyAgIENEQi4gIkxpc3QiIG9yICJQYWdlIiBtb2RlIGNhbiBiZSB1c2VkIGV4Y2x1c2l2ZWx5LiBUaGUgYXR0cmlidXRlLWxpc3QgQVBJCisgICBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIHJlcXVlc3QuIEhvd2V2ZXIsIG9ubHkgb25lCisgICBhdHRyaWJ1dGUtcGFnZSBjYW4gYmUgcmVhZCwgYXMgbWFuZGF0ZWQgYnkgdGhlIE9TRCBzdGFuZGFyZC4KKworZC4gb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSBjb21wdXRlcyBvZmZzZXRzIGludG8gdGhlIGRhdGEtaW4gYW5kIGRhdGEtb3V0IGJ1ZmZlcnMKKyAgIGFuZCBzaWducyB0aGUgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0eSBrZXkgYW5kIGludGVncml0eS0KKyAgIGNoZWNrIHBhcmFtZXRlcnMuCisKK2UuIG9zZF9leGVjdXRlX3JlcXVlc3QoKSBtYXkgYmUgY2FsbGVkIHRvIGV4ZWN1dGUgdGhlIHJlcXVlc3QgdmlhIHRoZSBibG9jaworICAgbGF5ZXIgYW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uLiAgVGhlIHJlcXVlc3QgY2FuIGJlIGV4ZWN1dGVkCisgICBhc3luY2hyb25vdXNseSBieSBjYWxsaW5nIHRoZSBibG9jayBsYXllciBBUEkgZGlyZWN0bHkuCisKK2YuIEFmdGVyIGV4ZWN1dGlvbiwgb3NkX3JlcV9kZWNvZGVfc2Vuc2UoKSBjYW4gYmUgY2FsbGVkIHRvIGRlY29kZSB0aGUgcmVxdWVzdCdzCisgICBzZW5zZSBpbmZvcm1hdGlvbi4KKworZy4gb3NkX3JlcV9kZWNvZGVfZ2V0X2F0dHIoKSBtYXkgYmUgY2FsbGVkIHRvIHJldHJpZXZlIG9zZF9hZGRfZ2V0X2F0dHJfbGlzdCgpCisgICB2YWx1ZXMuCisKK2guIG9zZF9lbmRfcmVxdWVzdCgpIG11c3QgYmUgY2FsbGVkIHRvIGRlYWxsb2NhdGUgdGhlIHJlcXVlc3QgYW5kIGFueSByZXNvdXJjZQorICAgYXNzb2NpYXRlZCB3aXRoIGl0LiBOb3RlIHRoYXQgb3NkX2VuZF9yZXF1ZXN0IGNsZWFucyB1cCB0aGUgcmVxdWVzdCBhdCBhbnkKKyAgIHN0YWdlIGFuZCBpdCBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9zZF9zdGFydF9yZXF1ZXN0KCkuCisKK29zZF9yZXF1ZXN0J3Mgc3RydWN0dXJlOgorCitUaGUgT1NEIHN0YW5kYXJkIGRlZmluZXMgYSBjb21wbGV4IHN0cnVjdHVyZSBvZiBJTyBzZWdtZW50cyBwb2ludGVkIHRvIGJ5CittZW1iZXJzIGluIHRoZSBDREIuIFVwIHRvIDMgc2VnbWVudHMgY2FuIGJlIGRlcGxveWVkIGluIHRoZSBJTi1CdWZmZXIgYW5kIHVwIHRvCis0IGluIHRoZSBPVVQtQnVmZmVyLiBUaGUgQVNDSUkgaWxsdXN0cmF0aW9uIGJlbG93IGRlcGljdHMgYSBzZWN1cmUtcmVhZCB3aXRoCithc3NvY2lhdGVkIGdldCtzZXQgb2YgYXR0cmlidXRlcy1saXN0cy4gT3RoZXIgY29tYmluYXRpb25zIHZlcnkgb24gdGhlIHNhbWUKK2Jhc2ljIHRoZW1lLiBGcm9tIG5vLXNlZ21lbnRzLXVzZWQgdXAgdG8gYWxsLXNlZ21lbnRzLXVzZWQuCisKK3xfX19fX19fX09TRC1DREJfX19fX19fX19ffAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8cmVhZF9sZW4gKG9mZnNldD0wKSAgICAgLXwtLS0tLS0tLS1cCit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8Cit8Z2V0X2F0dHJzX2xpc3RfbGVuZ3RoICAgIHwgICAgICAgICB8Cit8Z2V0X2F0dHJzX2xpc3Rfb2Zmc2V0ICAgLXwtLS0tXCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICB8Cit8cmV0cmlldmVkX2F0dHJzX2FsbG9jX2xlbnwgICAgfCAgICB8Cit8cmV0cmlldmVkX2F0dHJzX29mZnNldCAgLXwtLS0tfC0tLS18LVwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgIHwgfAorfHNldF9hdHRyc19saXN0X2xlbmd0aCAgICB8ICAgIHwgICAgfCB8Cit8c2V0X2F0dHJzX2xpc3Rfb2Zmc2V0ICAgLXwtXCAgfCAgICB8IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8ICAgIHwgfAorfGluX2RhdGFfaW50ZWdfb2Zmc2V0ICAgIC18LXwtLXwtLS0tfC18LVwKK3xvdXRfZGF0YV9pbnRlZ19vZmZzZXQgICAtfC18LS18LS1cIHwgfCB8CitcX19fX19fX19fX19fX19fX19fX19fX19fXy8gfCAgfCAgfCB8IHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgfCB8IHwKK3xfX19fX19fT1VULUJVRkZFUl9fX19fX19ffCB8ICB8ICB8IHwgfCB8Cit8ICAgICAgU2V0IGF0dHIgbGlzdCAgICAgIHw8LyAgfCAgfCB8IHwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgIHwgfCB8IHwKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICB8ICB8IHwgfCB8Cit8ICAgR2V0IGF0dHIgZGVzY3JpcHRvcnMgIHw8LS0tLyAgfCB8IHwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgfCB8IHwKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICB8IHwgfCB8Cit8ICAgIE91dC1kYXRhIGludGVncml0eSAgIHw8LS0tLS0tLyB8IHwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCB8IHwKK1xfX19fX19fX19fX19fX19fX19fX19fX19fLyAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfAorfF9fX19fX19fSU4tQlVGRkVSX19fX19fX198ICAgICAgICAgfCB8IHwKK3wgICAgICBJbi1EYXRhIHJlYWQgICAgICAgfDwtLS0tLS0tLS8gfCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICB8IHwKK3wgICAgICBHZXQgYXR0ciBsaXN0ICAgICAgfDwtLS0tLS0tLS0tLyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgSW4tZGF0YSBpbnRlZ3JpdHkgICAgfDwtLS0tLS0tLS0tLS0vCit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1xfX19fX19fX19fX19fX19fX19fX19fX19fLworCitBIGJsb2NrIGRldmljZSByZXF1ZXN0IGNhbiBjYXJyeSBiaWRpcmVjdGlvbmFsIHBheWxvYWQgYnkgbWVhbnMgb2YgYXNzb2NpYXRpbmcKK2EgYmlkaV9yZWFkIHJlcXVlc3Qgd2l0aCBhIG1haW4gd3JpdGUtcmVxdWVzdC4gRWFjaCBpbi9vdXQgcmVxdWVzdCBpcyBkZXNjcmliZWQKK2J5IGEgY2hhaW4gb2YgQklPcyBhc3NvY2lhdGVkIHdpdGggZWFjaCByZXF1ZXN0LgorVGhlIENEQiBpcyBvZiBhIFNDU0kgVkFSTEVOIENEQiBmb3JtYXQsIGFzIGRlc2NyaWJlZCBieSBPU0Qgc3RhbmRhcmQuCitUaGUgT1NEIHN0YW5kYXJkIGFsc28gbWFuZGF0ZXMgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBhdCBzdGFydCBvZiBlYWNoIHNlZ21lbnQuCisKK0luIHRoZSBjb2RlLCBpbiBzdHJ1Y3Qgb3NkX3JlcXVlc3QsIHRoZXJlIGFyZSB0d28gX29zZF9pb19pbmZvIHN0cnVjdHVyZXMgdG8KK2Rlc2NyaWJlIHRoZSBJTi9PVVQgYnVmZmVycyBhYm92ZSwgdHdvIEJJT3MgZm9yIHRoZSBkYXRhIHBheWxvYWQgYW5kIHVwIHRvIGZpdmUKK19vc2RfcmVxX2RhdGFfc2VnbWVudCBzdHJ1Y3R1cmVzIHRvIGhvbGQgdGhlIGRpZmZlcmVudCBzZWdtZW50cyBhbGxvY2F0aW9uIGFuZAoraW5mb3JtYXRpb24uCisKK0ltcG9ydGFudDogV2UgaGF2ZSBjaG9zZW4gdG8gZGlzcmVnYXJkIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBCSU8tY2hhaW4gKGFuZAordGhlIHJlc3VsdGluZyBzZy1saXN0KSBkZXNjcmliZXMgYSBsaW5lYXIgbWVtb3J5IGJ1ZmZlci4gTWVhbmluZyBvbmx5IGZpcnN0IGFuZAorbGFzdCBzY2F0dGVyIGNoYWluIGNhbiBiZSBpbmNvbXBsZXRlIGFuZCBhbGwgdGhlIG1pZGRsZSBjaGFpbnMgYXJlIG9mIFBBR0VfU0laRS4KK0ZvciB1cywgYSBzY2F0dGVyLWdhdGhlci1saXN0LCBhcyBpdHMgbmFtZSBpbXBsaWVzIGFuZCBhcyB1c2VkIGJ5IHRoZSBOZXR3b3JraW5nCitsYXllciwgaXMgdG8gZGVzY3JpYmUgYSB2ZWN0b3Igb2YgYnVmZmVycyB0aGF0IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8vZnJvbSB0aGUKK3dpcmUuIEl0IHdvcmtzIHZlcnkgd2VsbCB3aXRoIGN1cnJlbnQgaVNDU0kgdHJhbnNwb3J0LiBpU0NTSSBpcyBjdXJyZW50bHkgdGhlCitvbmx5IGRlcGxveWVkIE9TRCB0cmFuc3BvcnQuIEluIHRoZSBmdXR1cmUgd2UgYW50aWNpcGF0ZSBTQVMgYW5kIEZDIGF0dGFjaGVkIE9TRAorZGV2aWNlcyBhcyB3ZWxsLgorCitUaGUgT1NEIFRlc3RpbmcgVUxECis9PT09PT09PT09PT09PT09PT09CitUT0RPOiBNb3JlIHVzZXItbW9kZSBjb250cm9sIG9uIHRlc3RzLgorCitBdXRob3JzLCBNYWlsaW5nIGxpc3QKKz09PT09PT09PT09PT09PT09PT09PQorUGxlYXNlIGNvbW11bmljYXRlIHdpdGggdXMgb24gYW55IGRlcGxveW1lbnQgb2Ygb3NkLCB3aGV0aGVyIHVzaW5nIHRoaXMgY29kZQorb3Igbm90LgorCitBbnkgcHJvYmxlbXMsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIGxvbmVseSBPU0QgbmlnaHRzLCBwbGVhc2UgZW1haWw6CisgICBPU0QgRGV2IExpc3QgPG9zZC1kZXZAb3Blbi1vc2Qub3JnPgorCitNb3JlIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIG9uOgoraHR0cDovL29wZW4tb3NkLm9yZworCitCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorCitSZWZlcmVuY2VzCis9PT09PT09PT09CitXZWJlciwgUi4sICJTQ1NJIE9iamVjdC1CYXNlZCBTdG9yYWdlIERldmljZSBDb21tYW5kcyIsCitUMTAvMTM1NS1EIEFOU0kvSU5DSVRTIDQwMC0yMDA0LAoraHR0cDovL3d3dy50MTAub3JnL2Z0cC90MTAvZHJhZnRzL29zZC9vc2QtcjEwLnBkZgorCitXZWJlciwgUi4sICJTQ1NJIE9iamVjdC1CYXNlZCBTdG9yYWdlIERldmljZSBDb21tYW5kcyAtMiAoT1NELTIpIgorVDEwLzE3MjktRCwgV29ya2luZyBEcmFmdCwgcmV2LiAzCitodHRwOi8vd3d3LnQxMC5vcmcvZnRwL3QxMC9kcmFmdHMvb3NkMi9vc2QycjAzLnBkZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCA4NDFhOTM2Li4wMTI4NThkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMzQ2LDYgKzM0Niw5IEBACiAgICAgc2JpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQogICAgIHNiZG1hOAktIDhiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTE2CS0gMTZiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBmbXBvcnQJLSAob3B0aW9uYWwpIE9QTDMgSS9PIHBvcnQKKyAgICBtcHVwb3J0CS0gKG9wdGlvbmFsKSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVpcnEJLSAob3B0aW9uYWwpIE1QVTQwMSBpcnEgIwogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgYW5kIGF1dG9wcm9iZS4KIApAQCAtMzg4LDM0ICszOTEsMTEgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KICAgICAKLSAgTW9kdWxlIHNuZC1jczQyMzIKLSAgLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEgSVNBIGNoaXBzLgotCi0gICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKLQotICAgIHdpdGggaXNhcG5wPTAsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgotCi0gICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQotICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKLSAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQotICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQotICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMyIGNoaXAgKDUsNyw5LDExLDEyLDE1KQotICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQotICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMyIGNoaXAgKDAsMSwzKQotICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBDUzQyMzIgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKLSAgICAKLSAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4gVGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJvYmUKLSAgICAoaWYgSVNBIFBuUCBpcyBub3QgdXNlZCkgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlCi0gICAgb3B0aW9uYWwuCi0KLSAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCi0gICAgCiAgIE1vZHVsZSBzbmQtY3M0MjM2CiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEsCisgICAgCSAgICAgICAJICAgICAJICAgCSAgIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUzQyMzhCL0NTNDIzOSBJU0EgY2hpcHMuCiAKICAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQpAQCAtNDM3LDYgKzQxNyw5IEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgICBUaGlzIG1vZHVsZSBpcyBhbGlhc2VkIGFzIHNuZC1jczQyMzIgc2luY2UgaXQgcHJvdmlkZXMgdGhlIG9sZAorICAgIHNuZC1jczQyMzIgZnVuY3Rpb25hbGl0eSwgdG9vLgorCiAgIE1vZHVsZSBzbmQtY3M0MjgxCiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTYwNiw2ICs1ODksNyBAQAogICAgIE1vZHVsZSBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMtMTY4OCBhbmQgRVMtNjg4IHNvdW5kIGNhcmRzLgogCiAgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBPUEwzIChvcHRpb247IHNoYXJlIHRoZSBzYW1lIHBvcnQgYXMgZGVmYXVsdCkKICAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKICAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCiAgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQpAQCAtNzU3LDYgKzc0MSw5IEBACiAgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQogICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSB1c2UgTFBJQiwgMiA9IFBPU0JVRikKICAgICBwcm9iZV9tYXNrICAtIEJpdG1hc2sgdG8gcHJvYmUgY29kZWNzIChkZWZhdWx0ID0gLTEsIG1lYW5pbmcgYWxsIHNsb3RzKQorICAgIAkJICBXaGVuIHRoZSBiaXQgOCAoMHgxMDApIGlzIHNldCwgdGhlIGxvd2VyIDggYml0cyBhcmUgdXNlZAorCQkgIGFzIHRoZSAiZml4ZWQiIGNvZGVjIHNsb3RzOyBpLmUuIHRoZSBkcml2ZXIgcHJvYmVzIHRoZQorCQkgIHNsb3RzIHJlZ2FyZGxlc3Mgd2hhdCBoYXJkd2FyZSByZXBvcnRzIGJhY2sKICAgICBwcm9iZV9vbmx5CS0gT25seSBwcm9iaW5nIGFuZCBubyBjb2RlYyBpbml0aWFsaXphdGlvbiAoZGVmYXVsdD1vZmYpOwogCQkgIFVzZWZ1bCB0byBjaGVjayB0aGUgaW5pdGlhbCBjb2RlYyBzdGF0dXMgZm9yIGRlYnVnZ2luZwogICAgIGJkbF9wb3NfYWRqCS0gU3BlY2lmaWVzIHRoZSBETUEgSVJRIHRpbWluZyBkZWxheSBpbiBzYW1wbGVzLgpAQCAtMTE4NSw2ICsxMTcyLDU0IEBACiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzIGFuZCBQblAuCiAgICAgCisgIE1vZHVsZSBzbmQtbXNuZC1jbGFzc2ljCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSBvciBNb250ZXJleQorICAgIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIG1zbmQtY2xhc3NpYyBjYXJkCisgICAgaXJxCQktIElSUSAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgZGlnaXRhbAktIERpZ2l0YWwgZGF1Z2h0ZXJib2FyZCBwcmVzZW50IChkZWZhdWx0ID0gMCkKKyAgICBjZmcJCS0gQ29uZmlnIHBvcnQgKDB4MjUwLCAweDI2MCBvciAweDI3MCkgZGVmYXVsdCA9IFBuUAorICAgIHJlc2V0CS0gUmVzZXQgYWxsIGRldmljZXMKKyAgICBtcHVfaW8JLSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVfaXJxCS0gTVBVNDAxIGlycSMKKyAgICBpZGVfaW8wCS0gSURFIHBvcnQgIzAKKyAgICBpZGVfaW8xCS0gSURFIHBvcnQgIzEKKyAgICBpZGVfaXJxCS0gSURFIGlycSMKKyAgICBqb3lzdGlja19pbwktIEpveXN0aWNrIEkvTyBwb3J0CisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9tc25kaW5pdC5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCisgICAgU2VlIERvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbgorICAgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZSAKKyAgICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCisgICAgYXQKKwlodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwCisKKyAgTW9kdWxlIHNuZC1tc25kLXBpbm5hY2xlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS9GaWppIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIHBpbm5hY2xlL2ZpamkgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgcGlubmFsY2UvZmlqaSBjYXJkCisgICAgbWVtCQktIE1lbW9yeSBhZGRyZXNzICgweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLAorCQkgIDB4ZTAwMDAgb3IgMHhlODAwMCkKKyAgICB3cml0ZV9uZGVsYXkgLSBlbmFibGUgd3JpdGUgbmRlbGF5IChkZWZhdWx0ID0gMSkKKyAgICBjYWxpYnJhdGVfc2lnbmFsIC0gY2FsaWJyYXRlIHNpZ25hbCAoZGVmYXVsdCA9IDApCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgZmlsZXMgInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIgYW5kCisgICAgInR1cnRsZWJlYWNoL3BuZHNwZXJtLmJpbiIgaW4gdGhlIHByb3BlciBmaXJtd2FyZSBkaXJlY3RvcnkuCisKICAgTW9kdWxlIHNuZC1tdHBhdgogICAtLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4MjQsNyArMTg1OSw3IEBACiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsCi0gICAgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYIGFuZCBIREFWMS4zIChEZWx1eGUpLgorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgYW5kIEVzc2VuY2UgU1RYLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjYXJkcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCAwZjVkMjZiLi44ZWVjMDViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtNTYsNiArNTYsNyBAQAogICBzb255LWFzc2FtZAlTb255IEFTU0FNRAogICB0b3NoaWJhLXMwNglUb3NoaWJhIFMwNgogICB0b3NoaWJhLXJ4MQlUb3NoaWJhIFJYMQorICB0eWFuCQlUeWFuIFRodW5kZXIgbjY2NTBXIChTMjkxNS1FKQogICB1bHRyYQkJU2Ftc3VuZyBRMSBVbHRyYSBWaXN0YSBtb2RlbAogICBsZW5vdm8tMzAwMAlMZW5vdm8gMzAwMCB5NDEwCiAgIG5lYwkJTkVDIFZlcnNhIFM5MTAwCkBAIC0yNjEsNiArMjYyLDggQEAKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGhwCQlIUCBTcGFydGFuIGxhcHRvcAorICBocC1kdjY3MzYJSFAgZHY2NzM2CisgIGxlbm92by14MjAwCUxlbm92byBYMjAwIGxhcHRvcAogCiBTVEFDOTIwMAogPT09PT09PT0KQEAgLTI3OCw2ICsyODEsNyBAQAogICBnYXRld2F5LW00CUdhdGV3YXkgbGFwdG9wcyB3aXRoIEVBUEQgY29udHJvbAogICBnYXRld2F5LW00LTIJR2F0ZXdheSBsYXB0b3BzIHdpdGggRUFQRCBjb250cm9sCiAgIHBhbmFzb25pYwlQYW5hc29uaWMgQ0YtNzQKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMDUvOTI1NAogPT09PT09PT09PT09PQpAQCAtMjg1LDYgKzI4OSw4IEBACiAgIGRlbGwtbTQyCURlbGwgKHVua25vd24pCiAgIGRlbGwtbTQzCURlbGwgUHJlY2lzaW9uCiAgIGRlbGwtbTQ0CURlbGwgSW5zcGlyb24KKyAgZWFwZAkJS2VlcCBFQVBEIG9uIChlLmcuIEdhdGV3YXkgVDE2MTYpCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjIwLzkyMjEKID09PT09PT09PT09PT0KQEAgLTMwOCw2ICszMTQsNyBAQAogICBkZWxsLWQ4MglEZWxsICh1bmtub3duKQogICBkZWxsLW04MQlEZWxsICh1bmtub3duKQogICBkZWxsLW04MglEZWxsIFhQUyBNMTIxMAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIwMi85MjUwLzkyNTEKID09PT09PT09PT09PT09PT09PQpAQCAtMzE5LDYgKzMyNiw3IEBACiAgIG0zCQlTb21lIEdhdGV3YXkgTVggc2VyaWVzIGxhcHRvcHMKICAgbTUJCVNvbWUgR2F0ZXdheSBNWCBzZXJpZXMgbGFwdG9wcyAoTVA2OTU0KQogICBtNgkJU29tZSBHYXRld2F5IE5YIHNlcmllcyBsYXB0b3BzCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjI3LzkyMjgvOTIyOS85Mjd4CiA9PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzI4LDYgKzMzNiw3IEBACiAgIDVzdGFjawlEOTY1IDVzdGFjayArIFNQRElGCiAgIGRlbGwtM3N0YWNrCURlbGwgRGltZW5zaW9uIEU1MjAKICAgZGVsbC1iaW9zCUZpeGVzIHdpdGggRGVsbCBCSU9TIHNldHVwCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgogPT09PT09PT09PT09CkBAIC0zMzUsNyArMzQ0LDEwIEBACiAgIGRlbGwtbTQtMQlEZWxsIGRlc2t0b3BzCiAgIGRlbGwtbTQtMglEZWxsIGRlc2t0b3BzCiAgIGRlbGwtbTQtMwlEZWxsIGRlc2t0b3BzCi0gIGhwLW00CQlIUCBkdiBsYXB0b3BzCisgIGhwLW00CQlIUCBtaW5pIDEwMDAKKyAgaHAtZHY1CUhQIGR2IHNlcmllcworICBocC1oZHgJSFAgSERYIHNlcmllcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDczKgogPT09PT09PT09PT0KQEAgLTM0NSwxMyArMzU3LDE2IEBACiAgIGRlbGwtbTYtZG1pYwlEZWxsIGRlc2t0b3BzL2xhcHRvcHMgd2l0aCBkaWdpdGFsIG1pY3MKICAgZGVsbC1tNglEZWxsIGRlc2t0b3BzL2xhcHRvcHMgd2l0aCBib3RoIHR5cGUgb2YgbWljcwogICBkZWxsLWVxCURlbGwgZGVza3RvcHMvbGFwdG9wcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDgzKgogPT09PT09PT09PT0KICAgcmVmCQlSZWZlcmVuY2UgYm9hcmQKICAgbWljLXJlZglSZWZlcmVuY2UgYm9hcmQgd2l0aCBwb3dlciBtYW5hZ21lbnQgZm9yIHBvcnRzCisgIGRlbGwtczE0CURlbGwgbGFwdG9wCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5ODcyCiA9PT09PT09PQotICB2YWlvCQlTZXR1cCBmb3IgVkFJTyBGRTU1MEcvU1oxMTAKLSAgdmFpby1hciBTZXR1cCBmb3IgVkFJTyBBUgorICB2YWlvCQlWQUlPIGxhcHRvcCB3aXRob3V0IFNQRElGCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAppbmRleCA4ZDY4ZmZmLi5jNTk0OGYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKQEAgLTEwOSw2ICsxMDksMTMgQEAKIFNpbmNlIDIuNi4yOSBrZXJuZWwsIHRoZSBkcml2ZXIgaGFzIGEgbW9yZSByb2J1c3QgcHJvYmluZyBtZXRob2QsIHNvCiB0aGlzIGVycm9yIG1pZ2h0IGhhcHBlbiByYXJlbHksIHRob3VnaC4KIAorT24gYSBtYWNoaW5lIHdpdGggYSBicm9rZW4gQklPUywgc29tZXRpbWVzIHlvdSBuZWVkIHRvIGZvcmNlIHRoZQorZHJpdmVyIHRvIHByb2JlIHRoZSBjb2RlYyBzbG90cyB0aGUgaGFyZHdhcmUgZG9lc24ndCByZXBvcnQgZm9yIHVzZS4KK0luIHN1Y2ggYSBjYXNlLCB0dXJuIHRoZSBiaXQgOCAoMHgxMDApIG9mIGBwcm9iZV9tYXNrYCBvcHRpb24gb24uCitUaGVuIHRoZSByZXN0IDggYml0cyBhcmUgcGFzc2VkIGFzIHRoZSBjb2RlYyBzbG90cyB0byBwcm9iZQordW5jb25kaXRpb25hbGx5LiAgRm9yIGV4YW1wbGUsIGBwcm9iZV9tYXNrPTB4MTAzYCB3aWxsIGZvcmNlIHRvIHByb2JlCit0aGUgY29kZWMgc2xvdHMgMCBhbmQgMSBubyBtYXR0ZXIgd2hhdCB0aGUgaGFyZHdhcmUgcmVwb3J0cy4KKwogCiBJbnRlcnJ1cHQgSGFuZGxpbmcKIH5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMzU4LDEwICszNjUsMjYgQEAKICAgdG8gdGhpcyBmaWxlLgogaW5pdF92ZXJiczo6CiAgIFRoZSBleHRyYSB2ZXJicyB0byBleGVjdXRlIGF0IGluaXRpYWxpemF0aW9uLiAgWW91IGNhbiBhZGQgYSB2ZXJiIGJ5Ci0gIHdyaXRpbmcgdG8gdGhpcyBmaWxlLiAgUGFzcyB0cmVlIG51bWJlcnMsIG5pZCwgdmVyYiBhbmQgcGFyYW1ldGVyLgorICB3cml0aW5nIHRvIHRoaXMgZmlsZS4gIFBhc3MgdGhyZWUgbnVtYmVyczogbmlkLCB2ZXJiIGFuZCBwYXJhbWV0ZXIKKyAgKHNlcGFyYXRlZCB3aXRoIGEgc3BhY2UpLgogaGludHM6OgotICBTaG93cyBoaW50IHN0cmluZ3MgZm9yIGNvZGVjIHBhcnNlcnMgZm9yIGFueSB1c2UuICBSaWdodCBub3cgaXQncwotICBub3QgdXNlZC4KKyAgU2hvd3MgLyBzdG9yZXMgaGludCBzdHJpbmdzIGZvciBjb2RlYyBwYXJzZXJzIGZvciBhbnkgdXNlLgorICBJdHMgZm9ybWF0IGlzIGBrZXkgPSB2YWx1ZWAuICBGb3IgZXhhbXBsZSwgcGFzc2luZyBgaHBfZGV0ZWN0ID0geWVzYAorICB0byBJRFQvU1RBQyBjb2RlYyBwYXJzZXIgd2lsbCByZXN1bHQgaW4gdGhlIGRpc2FibGVtZW50IG9mIHRoZQorICBoZWFkcGhvbmUgZGV0ZWN0aW9uLgoraW5pdF9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBpbml0aWFsIHBpbiBkZWZhdWx0IGNvbmZpZyB2YWx1ZXMgc2V0IGJ5IEJJT1MuCitkcml2ZXJfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgcGluIGRlZmF1bHQgdmFsdWVzIHNldCBieSB0aGUgY29kZWMgcGFyc2VyIGV4cGxpY2l0bHkuCisgIFRoaXMgZG9lc24ndCBzaG93IGFsbCBwaW4gdmFsdWVzIGJ1dCBvbmx5IHRoZSBjaGFuZ2VkIHZhbHVlcyBieQorICB0aGUgcGFyc2VyLiAgVGhhdCBpcywgaWYgdGhlIHBhcnNlciBkb2Vzbid0IGNoYW5nZSB0aGUgcGluIGRlZmF1bHQKKyAgY29uZmlnIHZhbHVlcyBieSBpdHNlbGYsIHRoaXMgd2lsbCBjb250YWluIG5vdGhpbmcuCit1c2VyX3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIHBpbiBkZWZhdWx0IGNvbmZpZyB2YWx1ZXMgdG8gb3ZlcnJpZGUgdGhlIEJJT1Mgc2V0dXAuCisgIFdyaXRpbmcgdGhpcyAod2l0aCB0d28gbnVtYmVycywgTklEIGFuZCB2YWx1ZSkgYXBwZW5kcyB0aGUgbmV3CisgIHZhbHVlLiAgVGhlIGdpdmVuIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbml0aWFsIEJJT1MgdmFsdWUgYXQKKyAgdGhlIG5leHQgcmVjb25maWd1cmF0aW9uIHRpbWUuICBOb3RlIHRoYXQgdGhpcyBjb25maWcgd2lsbCBvdmVycmlkZQorICBldmVuIHRoZSBkcml2ZXIgcGluIGNvbmZpZ3MsIHRvby4KIHJlY29uZmlnOjoKICAgVHJpZ2dlcnMgdGhlIGNvZGVjIHJlLWNvbmZpZ3VyYXRpb24uICBXaGVuIGFueSB2YWx1ZSBpcyB3cml0dGVuIHRvCiAgIHRoaXMgZmlsZSwgdGhlIGRyaXZlciByZS1pbml0aWFsaXplIGFuZCBwYXJzZXMgdGhlIGNvZGVjIHRyZWUKQEAgLTM3MSw2ICszOTQsMTQgQEAKICAgUmVzZXRzIHRoZSBjb2RlYywgcmVtb3ZlcyB0aGUgbWl4ZXIgZWxlbWVudHMgYW5kIFBDTSBzdHVmZiBvZiB0aGUKICAgc3BlY2lmaWVkIGNvZGVjLCBhbmQgY2xlYXIgYWxsIGluaXQgdmVyYnMgYW5kIGhpbnRzLgogCitGb3IgZXhhbXBsZSwgd2hlbiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KK3ZhbHVlIG9mIHRoZSBwaW4gd2lkZ2V0IDB4MTQgdG8gMHg5OTkzMDEzZiwgYW5kIGxldCB0aGUgZHJpdmVyCityZS1jb25maWd1cmUgYmFzZWQgb24gdGhhdCBzdGF0ZSwgcnVuIGxpa2UgYmVsb3c6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBlY2hvIDB4MTQgMHg5OTkzMDEzZiA+IC9zeXMvY2xhc3Mvc291bmQvaHdDMEQwL3VzZXJfcGluX2NvbmZpZ3MKKyAgIyBlY2hvIDEgPiAvc3lzL2NsYXNzL3NvdW5kL2h3QzBEMC9yZWNvbmZpZyAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogCiBQb3dlci1TYXZpbmcKIH5+fn5+fn5+fn5+fgpAQCAtNDYxLDYgKzQ5MiwxNiBAQAogVGhlcmUgYXJlIHNvbWUgb3RoZXIgdXNlZnVsIG9wdGlvbnMuICBTZWUgYC0taGVscGAgb3B0aW9uIG91dHB1dCBmb3IKIGRldGFpbHMuCiAKK1doZW4gYSBwcm9iZSBlcnJvciBvY2N1cnMgb3Igd2hlbiB0aGUgZHJpdmVyIG9idmlvdXNseSBhc3NpZ25zIGEKK21pc21hdGNoZWQgbW9kZWwsIGl0J2QgYmUgaGVscGZ1bCB0byBsb2FkIHRoZSBkcml2ZXIgd2l0aAorYHByb2JlX29ubHk9MWAgb3B0aW9uIChhdCBiZXN0IGFmdGVyIHRoZSBjb2xkIHJlYm9vdCkgYW5kIHJ1bgorYWxzYS1pbmZvIGF0IHRoaXMgc3RhdGUuICBXaXRoIHRoaXMgb3B0aW9uLCB0aGUgZHJpdmVyIHdvbid0IGNvbmZpZ3VyZQordGhlIG1peGVyIGFuZCBQQ00gYnV0IGp1c3QgdHJpZXMgdG8gcHJvYmUgdGhlIGNvZGVjIHNsb3QuICBBZnRlcgorcHJvYmluZywgdGhlIHByb2MgZmlsZSBpcyBhdmFpbGFibGUsIHNvIHlvdSBjYW4gZ2V0IHRoZSByYXcgY29kZWMKK2luZm9ybWF0aW9uIGJlZm9yZSBtb2RpZmllZCBieSB0aGUgZHJpdmVyLiAgT2YgY291cnNlLCB0aGUgZHJpdmVyCitpc24ndCB1c2FibGUgd2l0aCBgcHJvYmVfb25seT0xYC4gIEJ1dCB5b3UgY2FuIGNvbnRpbnVlIHRoZQorY29uZmlndXJhdGlvbiB2aWEgaHdkZXAgc3lzZnMgZmlsZSBpZiBoZGEtcmVjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuCisKIAogaGRhLXZlcmIKIH5+fn5+fn5+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dAppbmRleCA0NmY5Njg0Li45ZTY3NjMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKQEAgLTExNiw2ICsxMTYsOSBAQAogU05EX1NPQ19EQVBNX01JWEVSKCJPdXRwdXQgTWl4ZXIiLCBXTTg3MzFfUFdSLCA0LCAxLCB3bTg3MzFfb3V0cHV0X21peGVyX2NvbnRyb2xzLAogCUFSUkFZX1NJWkUod204NzMxX291dHB1dF9taXhlcl9jb250cm9scykpLAogCitJZiB5b3UgZG9udCB3YW50IHRoZSBtaXhlciBlbGVtZW50cyBwcmVmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtaXhlciB3aWRnZXQsCit5b3UgY2FuIHVzZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMIGluc3RlYWQuIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZQorYXMgZm9yIFNORF9TT0NfREFQTV9NSVhFUi4KIAogMi4zIFBsYXRmb3JtL01hY2hpbmUgZG9tYWluIFdpZGdldHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNmFmN2EuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotVG8gY29uZmlndXJlIHRoZSBDcnlzdGFsIENTNDIzeCBzb3VuZCBjaGlwIGFuZCBhY3RpdmF0ZSBpdHMgRFNQIGZ1bmN0aW9ucywKLW1vZHVsZXMgbWF5IGJlIGxvYWRlZCBpbiB0aGlzIG9yZGVyOgotICAKLQltb2Rwcm9iZSBzb3VuZAotCWluc21vZCBhZDE4NDgKLQlpbnNtb2QgdWFydDQwMQotCWluc21vZCBjczQyMzIgaW89KiBpcnE9KiBkbWE9KiBkbWEyPSoKLSAgCi1UaGlzIGlzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXJhbWV0ZXJzOgotICAKLQlpby0tSS9PIGFkZHJlc3Mgb2YgdGhlIFdpbmRvd3MgU291bmQgU3lzdGVtIChub3JtYWxseSAweDUzNCkKLQlpcnEtLUlSUSBvZiB0aGlzIGRldmljZQotCWRtYSBhbmQgZG1hMi0tRE1BIGNoYW5uZWxzIChETUEyIG1heSBiZSAwKQotICAKLU9uIHNvbWUgY2FyZHMsIHRoZSBib2FyZCBhdHRlbXB0cyB0byBkbyBub24tUG5QIHNldHVwLCBhbmQgZmFpbHMuICBJZiB5b3UKLWhhdmUgcHJvYmxlbXMsIHVzZSBMaW51eCcgUG5QIGZhY2lsaXRpZXMuIAotICAKLVRvIGdldCBNSURJIGZhY2lsaXRpZXMgYWRkCi0gIAotCWluc21vZCBvcGwzIGlvPSoKLSAgCi13aGVyZSAiaW8iIGlzIHRoZSBJL08gYWRkcmVzcyBvZiB0aGUgT1BMMyBzeW50aGVzaXplci4gVGhpcyB3aWxsIGJlIHNob3duCi1pbiAvcHJvYy9zeXMvcG5wIGFuZCBpcyBub3JtYWxseSAweDM4OC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgppbmRleCBmMDRiYTZiLi43NWQ5NjdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCkBAIC04MCw3ICs4MCw3IEBACiAgICAgYWRkaXRpb25hbCBmZWF0dXJlcy4KIAogMi4gIFRoZSBjb21tZXJjaWFsIE9TUyBkcml2ZXIgbWF5IGJlIG9idGFpbmVkIGZyb20gdGhlIHNpdGU6Ci0gICAgaHR0cDovL3d3dy9vcGVuc291bmQuY29tLiAgVGhpcyBtYXkgYmUgdXNlZCBmb3IgY2FyZHMgdGhhdAorICAgIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS4gIFRoaXMgbWF5IGJlIHVzZWQgZm9yIGNhcmRzIHRoYXQKICAgICBhcmUgdW5zdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIsIG9yIG1heSBiZSB1c2VkCiAgICAgYnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuICAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKaW5kZXggMjcwNDgxOS4uNmMzYzYyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CkBAIC0yMjksMTYgKzIyOSwyNiBAQAogCWludCBzdGF0dXM7CQkvKiAyODogKi8KIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOwkvKiAzMjogTGVuZ3RoIG9mIGRhdGEgKHN1Ym1pdHRlZCBvciBhY3R1YWwpICovCiAJdW5zaWduZWQgaW50IGxlbl9jYXA7CS8qIDM2OiBEZWxpdmVyZWQgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciBzZXR1cFs4XTsJLyogNDA6IE9ubHkgZm9yIENvbnRyb2wgJ1MnICovCi19OwkJCQkvKiA0OCBieXRlcyB0b3RhbCAqLworCXVuaW9uIHsJCQkvKiA0MDogKi8KKwkJdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCQlzdHJ1Y3QgaXNvX3JlYyB7CQkvKiBPbmx5IGZvciBJU08gKi8KKwkJCWludCBlcnJvcl9jb3VudDsKKwkJCWludCBudW1kZXNjOworCQl9IGlzbzsKKwl9IHM7CisJaW50IGludGVydmFsOwkJLyogNDg6IE9ubHkgZm9yIEludGVycnVwdCBhbmQgSVNPICovCisJaW50IHN0YXJ0X2ZyYW1lOwkvKiA1MjogRm9yIElTTyAqLworCXVuc2lnbmVkIGludCB4ZmVyX2ZsYWdzOyAvKiA1NjogY29weSBvZiBVUkIncyB0cmFuc2Zlcl9mbGFncyAqLworCXVuc2lnbmVkIGludCBuZGVzYzsJLyogNjA6IEFjdHVhbCBudW1iZXIgb2YgSVNPIGRlc2NyaXB0b3JzICovCit9OwkJCQkvKiA2NCB0b3RhbCBsZW5ndGggKi8KIAogVGhlc2UgZXZlbnRzIGNhbiBiZSByZWNlaXZlZCBmcm9tIGEgY2hhcmFjdGVyIGRldmljZSBieSByZWFkaW5nIHdpdGggcmVhZCgyKSwKLXdpdGggYW4gaW9jdGwoMiksIG9yIGJ5IGFjY2Vzc2luZyB0aGUgYnVmZmVyIHdpdGggbW1hcC4KK3dpdGggYW4gaW9jdGwoMiksIG9yIGJ5IGFjY2Vzc2luZyB0aGUgYnVmZmVyIHdpdGggbW1hcC4gSG93ZXZlciwgcmVhZCgyKQorb25seSByZXR1cm5zIGZpcnN0IDQ4IGJ5dGVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAKIFRoZSBjaGFyYWN0ZXIgZGV2aWNlIGlzIHVzdWFsbHkgY2FsbGVkIC9kZXYvdXNibW9uTiwgd2hlcmUgTiBpcyB0aGUgVVNCIGJ1cwogbnVtYmVyLiBOdW1iZXIgemVybyAoL2Rldi91c2Jtb24wKSBpcyBzcGVjaWFsIGFuZCBtZWFucyAiYWxsIGJ1c2VzIi4KLUhvd2V2ZXIsIHRoaXMgZmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiBOb3RlIHRoYXQgc3BlY2lmaWMgbmFtaW5nCi1wb2xpY3kgaXMgc2V0IGJ5IHlvdXIgTGludXggZGlzdHJpYnV0aW9uLgorTm90ZSB0aGF0IHNwZWNpZmljIG5hbWluZyBwb2xpY3kgaXMgc2V0IGJ5IHlvdXIgTGludXggZGlzdHJpYnV0aW9uLgogCiBJZiB5b3UgY3JlYXRlIC9kZXYvdXNibW9uMCBieSBoYW5kLCBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvd25lZCBieSByb290CiBhbmQgaGFzIG1vZGUgMDYwMC4gT3RoZXJ3aXNlLCB1bnByaXZpbGVkZ2VkIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBzbm9vcApAQCAtMjc5LDkgKzI4OSwxMCBAQAogVGhpcyBjYWxsIHJldHVybnMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgogCiAgTU9OX0lPQ1hfR0VULCBkZWZpbmVkIGFzIF9JT1coTU9OX0lPQ19NQUdJQywgNiwgc3RydWN0IG1vbl9nZXRfYXJnKQorIE1PTl9JT0NYX0dFVFgsIGRlZmluZWQgYXMgX0lPVyhNT05fSU9DX01BR0lDLCAxMCwgc3RydWN0IG1vbl9nZXRfYXJnKQogCi1UaGlzIGNhbGwgd2FpdHMgZm9yIGV2ZW50cyB0byBhcnJpdmUgaWYgbm9uZSB3ZXJlIGluIHRoZSBrZXJuZWwgYnVmZmVyLAotdGhlbiByZXR1cm5zIHRoZSBmaXJzdCBldmVudC4gSXRzIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgZm9sbG93aW5nCitUaGVzZSBjYWxscyB3YWl0IGZvciBldmVudHMgdG8gYXJyaXZlIGlmIG5vbmUgd2VyZSBpbiB0aGUga2VybmVsIGJ1ZmZlciwKK3RoZW4gcmV0dXJuIHRoZSBmaXJzdCBldmVudC4gVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgZm9sbG93aW5nCiBzdHJ1Y3R1cmU6CiAKIHN0cnVjdCBtb25fZ2V0X2FyZyB7CkBAIC0yOTQsNiArMzA1LDggQEAKIHBvaW50ZWQgYnkgaGRyIGNvbnRhaW5zIHRoZSBuZXh0IGV2ZW50IHN0cnVjdHVyZSwgYW5kIHRoZSBkYXRhIGJ1ZmZlciBjb250YWlucwogdGhlIGRhdGEsIGlmIGFueS4gVGhlIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGJ1ZmZlci4KIAorVGhlIE1PTl9JT0NYX0dFVCBjb3BpZXMgNDggYnl0ZXMsIE1PTl9JT0NYX0dFVFggY29waWVzIDY0IGJ5dGVzLgorCiAgTU9OX0lPQ1hfTUZFVENILCBkZWZpbmVkIGFzIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fbWZldGNoX2FyZykKIAogVGhpcyBpb2N0bCBpcyBwcmltYXJpbHkgdXNlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBhY2Nlc3NlcyB0aGUgYnVmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni9ib290LnR4dCBiL0RvY3VtZW50YXRpb24veDg2L2Jvb3QudHh0CmluZGV4IDdiNDU5NmEuLmUwMjAzNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2L2Jvb3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24veDg2L2Jvb3QudHh0CkBAIC0xNTgsNyArMTU4LDcgQEAKIDAyMDIvNAkyLjAwKwloZWFkZXIJCU1hZ2ljIHNpZ25hdHVyZSAiSGRyUyIKIDAyMDYvMgkyLjAwKwl2ZXJzaW9uCQlCb290IHByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkCiAwMjA4LzQJMi4wMCsJcmVhbG1vZGVfc3d0Y2gJQm9vdCBsb2FkZXIgaG9vayAoc2VlIGJlbG93KQotMDIwQy8yCTIuMDArCXN0YXJ0X3N5cwlUaGUgbG9hZC1sb3cgc2VnbWVudCAoMHgxMDAwKSAob2Jzb2xldGUpCiswMjBDLzIJMi4wMCsJc3RhcnRfc3lzX3NlZwlUaGUgbG9hZC1sb3cgc2VnbWVudCAoMHgxMDAwKSAob2Jzb2xldGUpCiAwMjBFLzIJMi4wMCsJa2VybmVsX3ZlcnNpb24JUG9pbnRlciB0byBrZXJuZWwgdmVyc2lvbiBzdHJpbmcKIDAyMTAvMQkyLjAwKwl0eXBlX29mX2xvYWRlcglCb290IGxvYWRlciBpZGVudGlmaWVyCiAwMjExLzEJMi4wMCsJbG9hZGZsYWdzCUJvb3QgcHJvdG9jb2wgb3B0aW9uIGZsYWdzCkBAIC0xNzAsMTAgKzE3MCwxMSBAQAogMDIyNC8yCTIuMDErCWhlYXBfZW5kX3B0cglGcmVlIG1lbW9yeSBhZnRlciBzZXR1cCBlbmQKIDAyMjYvMglOL0EJcGFkMQkJVW51c2VkCiAwMjI4LzQJMi4wMisJY21kX2xpbmVfcHRyCTMyLWJpdCBwb2ludGVyIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCi0wMjJDLzQJMi4wMysJaW5pdHJkX2FkZHJfbWF4CUhpZ2hlc3QgbGVnYWwgaW5pdHJkIGFkZHJlc3MKKzAyMkMvNAkyLjAzKwlyYW1kaXNrX21heAlIaWdoZXN0IGxlZ2FsIGluaXRyZCBhZGRyZXNzCiAwMjMwLzQJMi4wNSsJa2VybmVsX2FsaWdubWVudCBQaHlzaWNhbCBhZGRyIGFsaWdubWVudCByZXF1aXJlZCBmb3Iga2VybmVsCiAwMjM0LzEJMi4wNSsJcmVsb2NhdGFibGVfa2VybmVsIFdoZXRoZXIga2VybmVsIGlzIHJlbG9jYXRhYmxlIG9yIG5vdAotMDIzNS8zCU4vQQlwYWQyCQlVbnVzZWQKKzAyMzUvMQlOL0EJcGFkMgkJVW51c2VkCiswMjM2LzIJTi9BCXBhZDMJCVVudXNlZAogMDIzOC80CTIuMDYrCWNtZGxpbmVfc2l6ZQlNYXhpbXVtIHNpemUgb2YgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKIDAyM0MvNAkyLjA3KwloYXJkd2FyZV9zdWJhcmNoIEhhcmR3YXJlIHN1YmFyY2hpdGVjdHVyZQogMDI0MC84CTIuMDcrCWhhcmR3YXJlX3N1YmFyY2hfZGF0YSBTdWJhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGF0YQpAQCAtMjk5LDE0ICszMDAsMTQgQEAKICAgZS5nLiAweDAyMDQgZm9yIHZlcnNpb24gMi4wNCwgYW5kIDB4MGExMSBmb3IgYSBoeXBvdGhldGljYWwgdmVyc2lvbgogICAxMC4xNy4KIAotRmllbGQgbmFtZToJcmVhZG1vZGVfc3d0Y2gKK0ZpZWxkIG5hbWU6CXJlYWxtb2RlX3N3dGNoCiBUeXBlOgkJbW9kaWZ5IChvcHRpb25hbCkKIE9mZnNldC9zaXplOgkweDIwOC80CiBQcm90b2NvbDoJMi4wMCsKIAogICBCb290IGxvYWRlciBob29rIChzZWUgQURWQU5DRUQgQk9PVCBMT0FERVIgSE9PS1MgYmVsb3cuKQogCi1GaWVsZCBuYW1lOglzdGFydF9zeXMKK0ZpZWxkIG5hbWU6CXN0YXJ0X3N5c19zZWcKIFR5cGU6CQlyZWFkCiBPZmZzZXQvc2l6ZToJMHgyMGMvMgogUHJvdG9jb2w6CTIuMDArCkBAIC00NjgsNyArNDY5LDcgQEAKICAgemVybywgdGhlIGtlcm5lbCB3aWxsIGFzc3VtZSB0aGF0IHlvdXIgYm9vdCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydAogICB0aGUgMi4wMisgcHJvdG9jb2wuCiAKLUZpZWxkIG5hbWU6CWluaXRyZF9hZGRyX21heAorRmllbGQgbmFtZToJcmFtZGlza19tYXgKIFR5cGU6CQlyZWFkCiBPZmZzZXQvc2l6ZToJMHgyMmMvNAogUHJvdG9jb2w6CTIuMDMrCkBAIC01NDIsNyArNTQzLDEwIEBACiAKICAgVGhlIHBheWxvYWQgbWF5IGJlIGNvbXByZXNzZWQuIFRoZSBmb3JtYXQgb2YgYm90aCB0aGUgY29tcHJlc3NlZCBhbmQKICAgdW5jb21wcmVzc2VkIGRhdGEgc2hvdWxkIGJlIGRldGVybWluZWQgdXNpbmcgdGhlIHN0YW5kYXJkIG1hZ2ljCi0gIG51bWJlcnMuIEN1cnJlbnRseSBvbmx5IGd6aXAgY29tcHJlc3NlZCBFTEYgaXMgdXNlZC4KKyAgbnVtYmVycy4gIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGNvbXByZXNzaW9uIGZvcm1hdHMgYXJlIGd6aXAKKyAgKG1hZ2ljIG51bWJlcnMgMUYgOEIgb3IgMUYgOUUpLCBiemlwMiAobWFnaWMgbnVtYmVyIDQyIDVBKSBhbmQgTFpNQQorICAobWFnaWMgbnVtYmVyIDVEIDAwKS4gIFRoZSB1bmNvbXByZXNzZWQgcGF5bG9hZCBpcyBjdXJyZW50bHkgYWx3YXlzIEVMRgorICAobWFnaWMgbnVtYmVyIDdGIDQ1IDRDIDQ2KS4KICAgCiBGaWVsZCBuYW1lOglwYXlsb2FkX2xlbmd0aAogVHlwZToJCXJlYWQKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMWMyY2ExZC4uZDhhNGM4ZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTc2NSw2ICs3NjUsMTQgQEAKIEw6CWF0aDlrLWRldmVsQGxpc3RzLmF0aDlrLm9yZwogUzoJU3VwcG9ydGVkCiAKK0FUSEVST1MgQVI5MTcwIFdJUkVMRVNTIERSSVZFUgorUDoJQ2hyaXN0aWFuIExhbXBhcnRlcgorTToJY2h1bmtlZXlAd2ViLmRlCitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXI5MTcwCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvCisKIEFUSV9SRU1PVEUyIERSSVZFUgogUDoJVmlsbGUgU3lyamFsYQogTToJc3lyamFsYUBzY2kuZmkKQEAgLTEwMTEsNiArMTAxOSw4IEBACiBTOglTdXBwb3J0ZWQKIAogQlJPQURDT00gVEczIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitQOglNYXR0IENhcmxzb24KK006CW1jYXJsc29uQGJyb2FkY29tLmNvbQogUDoJTWljaGFlbCBDaGFuCiBNOgltY2hhbkBicm9hZGNvbS5jb20KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTEyNjksNiArMTI3OSwxMiBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9oZXJiZXJ0L2NyeXB0by0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKK0NSWVBUT0dSQVBISUMgUkFORE9NIE5VTUJFUiBHRU5FUkFUT1IKK1A6CU5laWwgSG9ybWFuCitNOgluaG9ybWFuQHR1eGRyaXZlci5jb20KK0w6CWxpbnV4LWNyeXB0b0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogQ1M1NTM1IEF1ZGlvIEFMU0EgZHJpdmVyCiBQOglKYXlhIEt1bWFyCiBNOglqYXlha3VtYXIuYWxzYUBnbWFpbC5jb20KQEAgLTE0NjksOCArMTQ4NSw2IEBACiBTOglTdXBwb3J0ZWQKIAogRE9DVU1FTlRBVElPTiAoL0RvY3VtZW50YXRpb24gZGlyZWN0b3J5KQotUDoJTWljaGFlbCBLZXJyaXNrCi1NOgltdGsubWFucGFnZXNAZ21haWwuY29tCiBQOglSYW5keSBEdW5sYXAKIE06CXJkdW5sYXBAeGVub3RpbWUubmV0CiBMOglsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnCkBAIC0yMjE4LDYgKzIyMzIsMTEgQEAKIEw6CWxpbnV4MTM5NC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIAorSU5URUdSSVRZIE1FQVNVUkVNRU5UIEFSQ0hJVEVDVFVSRSAoSU1BKQorUDoJTWltaSBab2hhcgorTToJem9oYXJAdXMuaWJtLmNvbQorUzoJU3VwcG9ydGVkCisKIElNUyBUV0lOVFVSQk8gRlJBTUVCVUZGRVIgRFJJVkVSCiBMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJT3JwaGFuCkBAIC0yODM0LDcgKzI4NTMsNyBAQAogTToJemlwcGVsQGxpbnV4LW02OGsub3JnCiBMOglsaW51eC1tNjhrQGxpc3RzLmxpbnV4LW02OGsub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW02OGsub3JnLwotVzoJaHR0cDovL2xpbnV4LW02OGstY3ZzLnViYi5jYS8KK1Q6CWdpdCBnaXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ2VlcnQvbGludXgtbTY4ay5naXQKIFM6CU1haW50YWluZWQKIAogTTY4SyBPTiBBUFBMRSBNQUNJTlRPU0gKQEAgLTI4NzksNyArMjg5OCw3IEBACiBNOgltdGsubWFucGFnZXNAZ21haWwuY29tCiBXOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL21hbi1wYWdlcwogTDoJbGludXgtbWFuQHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIE1BUlZFTEwgTElCRVJUQVMgV0lSRUxFU1MgRFJJVkVSCiBQOglEYW4gV2lsbGlhbXMKQEAgLTMyOTEsNiArMzMxMCwxNiBAQAogVzoJaHR0cDovL3d3dy5ub25nbnUub3JnL29yaW5vY28vCiBTOglNYWludGFpbmVkCiAKK09TRCBMSUJSQVJZCitQOglCb2F6IEhhcnJvc2gKK006CWJoYXJyb3NoQHBhbmFzYXMuY29tCitQOglCZW5ueSBIYWxldnkKK006CWJoYWxldnlAcGFuYXNhcy5jb20KK0w6CW9zZC1kZXZAb3Blbi1vc2Qub3JnCitXOglodHRwOi8vb3Blbi1vc2Qub3JnCitUOglnaXQ6Ly9naXQub3Blbi1vc2Qub3JnL29wZW4tb3NkLmdpdAorUzoJTWFpbnRhaW5lZAorCiBQNTQgV0lSRUxFU1MgRFJJVkVSCiBQOglNaWNoYWVsIFd1CiBNOglmbGFtaW5naWNlQHNvdXJtaWxrLm5ldApAQCAtMzM1MiwxMCArMzM4MSw4IEBACiBQQVJJU0MgQVJDSElURUNUVVJFCiBQOglLeWxlIE1jTWFydGluCiBNOglreWxlQG1jbWFydGluLmNhCi1QOglNYXR0aGV3IFdpbGNveAotTToJbWF0dGhld0B3aWwuY3gKLVA6CUdyYW50IEdydW5kbGVyCi1NOglncnVuZGxlckBwYXJpc2MtbGludXgub3JnCitQOglIZWxnZSBEZWxsZXIKK006CWRlbGxlckBnbXguZGUKIEw6CWxpbnV4LXBhcmlzY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8KIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva3lsZS9wYXJpc2MtMi42LmdpdApAQCAtMzU5Myw3ICszNjIwLDcgQEAKIFJBTElOSyBSVDJYMDAgV0lSRUxFU1MgTEFOIERSSVZFUgogUDoJcnQyeDAwIHByb2plY3QKIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotTDoJcnQyNDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJdXNlcnNAcnQyeDAwLnNlcmlhbG1vbmtleS5jb20KIFc6CWh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbS8KIFM6CU1haW50YWluZWQKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaXZkL3J0MngwMC5naXQKQEAgLTM2MzksNiArMzY2NiwxMiBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCitSRFMgLSBSRUxJQUJMRSBEQVRBR1JBTSBTT0NLRVRTCitQOglBbmR5IEdyb3ZlcgorTToJYW5keS5ncm92ZXJAb3JhY2xlLmNvbQorTDoJcmRzLWRldmVsQG9zcy5vcmFjbGUuY29tCitTOglTdXBwb3J0ZWQKKwogUkVBRC1DT1BZIFVQREFURSAoUkNVKQogUDoJRGlwYW5rYXIgU2FybWEKIE06CWRpcGFua2FyQGluLmlibS5jb20KQEAgLTM3MzAsNiArMzc2MywxNSBAQAogVzoJaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpbnV4MzkwLwogUzoJU3VwcG9ydGVkCiAKK1MzOTAgWkNSWVBUIERSSVZFUgorUDoJRmVsaXggQmVjaworTToJZmVsaXguYmVja0BkZS5pYm0uY29tCitQOglSYWxwaCBXdWVydGhuZXIKK006CXJhbHBoLnd1ZXJ0aG5lckBkZS5pYm0uY29tCitNOglsaW51eDM5MEBkZS5pYm0uY29tCitMOglsaW51eC1zMzkwQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCisKIFMzOTAgWkZDUCBEUklWRVIKIFA6CUNocmlzdG9mIFNjaG1pdHQKIE06CWNocmlzdG9mLnNjaG1pdHRAZGUuaWJtLmNvbQpAQCAtMzg0OCw2ICszODkwLDcgQEAKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcgKHN1Z2dlc3RlZCBDYzopCiBUOglnaXQga2VybmVsLm9yZzpwdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKK1c6CWh0dHA6Ly9zZWN1cml0eS53aWtpLmtlcm5lbC5vcmcvCiBTOglTdXBwb3J0ZWQKIAogU0VDVVJJVFkgQ09OVEFDVApAQCAtMzg4MCw2ICszOTIzLDE1IEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2pnYXJ6aWsvbGliYXRhLWRldi5naXQKIFM6CVN1cHBvcnRlZAogCitTRVJWRVIgRU5HSU5FUyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKK1A6CVNhdGh5YSBQZXJsYQorTToJc2F0aHlhcEBzZXJ2ZXJlbmdpbmVzLmNvbQorUDogICAgICBTdWJidSBTZWV0aGFyYW1hbgorTTogICAgICBzdWJidXNAc2VydmVyZW5naW5lcy5jb20KK0w6ICAgICAgbmV0ZGV2QHZnZXIua2VybmVsLm9yZworVzogICAgICBodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitTOiAgICAgIFN1cHBvcnRlZAorCiBTRkMgTkVUV09SSyBEUklWRVIKIFA6CVN0ZXZlIEhvZGdzb24KIFA6CUJlbiBIdXRjaGluZ3MKQEAgLTQyODAsNiArNDMzMiwxOSBAQAogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90bGFuLwogUzoJTWFpbnRhaW5lZAogCitUT01PWU8gU0VDVVJJVFkgTU9EVUxFCitQOglLZW50YXJvIFRha2VkYQorTToJdGFrZWRha25AbnR0ZGF0YS5jby5qcAorUDoJVGV0c3VvIEhhbmRhCitNOglwZW5ndWluLWtlcm5lbEBJLWxvdmUuU0FLVVJBLm5lLmpwCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIChrZXJuZWwgaXNzdWVzKQorTDoJdG9tb3lvLXVzZXJzLWVuQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBhbmQgdXNlcnMgaW4gRW5nbGlzaCkKK0w6CXRvbW95by1kZXZAbGlzdHMuc291cmNlZm9yZ2UuanAgKHN1YnNjcmliZXJzLW9ubHksIGZvciBkZXZlbG9wZXJzIGluIEphcGFuZXNlKQorTDoJdG9tb3lvLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgdXNlcnMgaW4gSmFwYW5lc2UpCitXOglodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLworVDoJcXVpbHQgaHR0cDovL3N2bi5zb3VyY2Vmb3JnZS5qcC9zdm5yb290L3RvbW95by90cnVuay8yLjIueC90b21veW8tbHNtL3BhdGNoZXMvCitTOglNYWludGFpbmVkCisKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCiBQOglKb2huIEJlbG1vbnRlCiBNOgl0b3NoaWJhX2FjcGlAbWVtZWJlYW0ub3JnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGQwNGVlMGEuLmM2MzA3YjYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDI5Ci1FWFRSQVZFUlNJT04gPSAtcmM3Ci1OQU1FID0gRXJvdGljIFBpY2tsZWQgSGVycmluZworRVhUUkFWRVJTSU9OID0KK05BTUUgPSBUZW1wb3JhcnkgVGFzbWFuaWFuIERldmlsCiAKICMgKkRPQ1VNRU5UQVRJT04qCiAjIFRvIHNlZSBhIGxpc3Qgb2YgdHlwaWNhbCB0YXJnZXRzIGV4ZWN1dGUgIm1ha2UgaGVscCIKQEAgLTUzMyw4ICs1MzMsOSBAQAogZW5kaWYKIAogIyBGb3JjZSBnY2MgdG8gYmVoYXZlIGNvcnJlY3QgZXZlbiBmb3IgYnVnZ3kgZGlzdHJpYnV0aW9ucwotIyBBcmNoIE1ha2VmaWxlcyBtYXkgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nCitpZm5kZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tc3RhY2stcHJvdGVjdG9yKQorZW5kaWYKIAogaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIEtCVUlMRF9DRkxBR1MJKz0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1vcHRpbWl6ZS1zaWJsaW5nLWNhbGxzCkBAIC01NjYsNiArNTY3LDEyIEBACiAjIGRpc2FibGUgcG9pbnRlciBzaWduZWQgLyB1bnNpZ25lZCB3YXJuaW5ncyBpbiBnY2MgNC4wCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLVduby1wb2ludGVyLXNpZ24sKQogCisjIGRpc2FibGUgaW52YWxpZCAiY2FuJ3Qgd3JhcCIgb3B0aW16YXRpb25zIGZvciBzaWduZWQgLyBwb2ludGVycworS0JVSUxEX0NGTEFHUwkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1md3JhcHYpCisKKyMgcmV2ZXJ0IHRvIHByZS1nY2MtNC40IGJlaGF2aW91ciBvZiAuZWhfZnJhbWUKK0tCVUlMRF9DRkxBR1MJKz0gJChjYWxsIGNjLW9wdGlvbiwtZm5vLWR3YXJmMi1jZmktYXNtKQorCiAjIEFkZCB1c2VyIHN1cHBsaWVkIENQUEZMQUdTLCBBRkxBR1MgYW5kIENGTEFHUyBhcyB0aGUgbGFzdCBhc3NpZ25tZW50cwogIyBCdXQgd2FybiB1c2VyIHdoZW4gd2UgZG8gc28KIHdhcm4tYXNzaWduID0gXApAQCAtOTA0LDEyICs5MTEsMTggQEAKICMgYW5kIGlmIHRoZSBTQ00gaXMga25vdyBhIHRhZyBmcm9tIHRoZSBTQ00gaXMgYXBwZW5kZWQuCiAjIFRoZSBhcHBlbmRlZCB0YWcgaXMgZGV0ZXJtaW5lZCBieSB0aGUgU0NNIHVzZWQuCiAjCi0jIEN1cnJlbnRseSwgb25seSBnaXQgaXMgc3VwcG9ydGVkLgotIyBPdGhlciBTQ01zIGNhbiBlZGl0IHNjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uIGFuZCBhZGQgdGhlIGFwcHJvcHJpYXRlCi0jIGNoZWNrcyBhcyBuZWVkZWQuCisjIC5zY212ZXJzaW9uIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHJwbSBwYWNrYWdlcyBzbyB3ZSBkbyBub3QgbG9vc2UKKyMgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgU0NNIHdoZW4gd2UgZG8gdGhlIGJ1aWxkIG9mIHRoZSBrZXJuZWwKKyMgZnJvbSB0aGUgY29waWVkIHNvdXJjZQogaWZkZWYgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPCi0JX2xvY2FsdmVyLWF1dG8gPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSBcCi0JICAgICAgICAgICAgICAgICAgJChzcmN0cmVlKS9zY3JpcHRzL3NldGxvY2FsdmVyc2lvbiAkKHNyY3RyZWUpKQorCitpZmVxICgkKHdpbGRjYXJkIC5zY212ZXJzaW9uKSwpCisgICAgICAgIF9sb2NhbHZlci1hdXRvID0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoc3JjdHJlZSkvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24gJChzcmN0cmVlKSkKK2Vsc2UKKyAgICAgICAgX2xvY2FsdmVyLWF1dG8gPSAkKHNoZWxsIGNhdCAuc2NtdmVyc2lvbiAyPiAvZGV2L251bGwpCitlbmRpZgorCiAJbG9jYWx2ZXItYXV0byAgPSAkKExPQ0FMVkVSU0lPTikkKF9sb2NhbHZlci1hdXRvKQogZW5kaWYKIApAQCAtMTUzNyw3ICsxNTUwLDcgQEAKICAgICAgIGNtZF9kZXBtb2QgPSBcCiAJaWYgWyAtciBTeXN0ZW0ubWFwIC1hIC14ICQoREVQTU9EKSBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkkKERFUE1PRCkgLWFlIC1GIFN5c3RlbS5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkkKGlmICQoc3RyaXAgJChJTlNUQUxMX01PRF9QQVRIKSksIC1iICQoSU5TVEFMTF9NT0RfUEFUSCkgLXIpICAgXAorCQkkKGlmICQoc3RyaXAgJChJTlNUQUxMX01PRF9QQVRIKSksIC1iICQoSU5TVEFMTF9NT0RfUEFUSCkgKSAgICAgXAogCQkkKEtFUk5FTFJFTEVBU0UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWZpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGExMDU3YzIuLjM2NDFlYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNiArNjIsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogT19OT05CTE9DSyBjbGFzaGVzIHdpdGggdGhlIGJpdHMgdXNlZCBmb3Igc29ja2V0IHR5cGVzLiAgVGhlcmVmb3JlIHdlCiAgKiBoYXZlIHRvIGRlZmluZSBTT0NLX05PTkJMT0NLIHRvIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCmluZGV4IGRlMzVjZDQuLmNjZDJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FMUEhBX1NUQVRGU19ICiAjZGVmaW5lIF9BTFBIQV9TVEFURlNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQWxwaGEgaXMgdGhlIG9ubHkgNjQtYml0IHBsYXRmb3JtIHdpdGggMzItYml0IHN0YXRmcy4gQW5kIGRvZXNuJ3QKICAgIGV2ZW4gc2VlbSB0byBpbXBsZW1lbnQgc3RhdGZzNjQgKi8KICNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2OGU3MDg5Li40ZDY4MmIxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FMUEhBX1NXQUJfSAogI2RlZmluZSBfQUxQSEFfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCmluZGV4IGU0YTU0YjYxNS4uYjQ1ZDkxMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCkBAIC05MDMsOCArOTAzLDkgQEAKIAlzdHEJJDI2LCAwKCRzcCkKIAkucHJvbG9ndWUgMAogCisJbW92CSQzMSwgJDE3CiAJbGRhCSQxNiwgOCgkc3ApCi0JanNyCSQyNiwgZG9fcGlwZQorCWpzcgkkMjYsIGRvX3BpcGVfZmxhZ3MKIAogCWxkcQkkMjYsIDAoJHNwKQogCWJuZQkkMCwgMWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKaW5kZXggNzAzNzMxYS4uY2M3ODM0NiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkJY3B1ID0gKGNwdSA8IChOUl9DUFVTLTEpID8gY3B1ICsgMSA6IDApOwogCWxhc3RfY3B1ID0gY3B1OwogCi0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBjcHVtYXNrX29mKGNwdSkpOwogCXJldHVybiAwOwogfQpAQCAtOTAsNyArOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaXJxKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2lycV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpcnEsIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2lycV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVjJXMiLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCBlMTZhZWI2Li42N2MxOWY4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtNjQsNyArNjQsNyBAQAogCQlzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdChyZWdzKTsKIAkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlpZiAoY3B1ICE9IGJvb3RfY3B1aWQpIHsKLQkJICAgICAgICBrc3RhdF9jcHUoY3B1KS5pcnFzW1JUQ19JUlFdKys7CisJCSAgICAgICAga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KFJUQ19JUlEsIGlycV90b19kZXNjKFJUQ19JUlEpKTsKIAkJfSBlbHNlIHsKIAkJCWhhbmRsZV9pcnEoUlRDX0lSUSk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwppbmRleCBhZTQxZjA5Li40MmVlMDU5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2h3cnBiLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi1leHRlcm4gaW50IGRvX3BpcGUoaW50ICopOwotCiAvKgogICogQnJrIG5lZWRzIHRvIHJldHVybiBhbiBlcnJvci4gIFN0aWxsIHN1cHBvcnQgTGludXgncyBicmsoMCkgcXVlcnkgaWRpb20sCiAgKiB3aGljaCBPU0YgcHJvZ3JhbXMganVzdCBzaG91bGRuJ3QgYmUgZG9pbmcuICBXZSdyZSBzdGlsbCBub3QgcXVpdGUKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vaW5pdC5jIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKaW5kZXggNWQ3YTE2ZS4uYWY3MWQzOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9pbml0LmMKKysrIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKQEAgLTE4OSw5ICsxODksMjEgQEAKIAogCWlmIChhbHBoYV91c2luZ19zcm0pIHsKIAkJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgY29uc29sZV9yZW1hcF92bTsKLQkJdW5zaWduZWQgbG9uZyB2YWRkciA9IFZNQUxMT0NfU1RBUlQ7CisJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAwOworCQl1bnNpZ25lZCBsb25nIHZhZGRyOwogCQl1bnNpZ25lZCBsb25nIGksIGo7CiAKKwkJLyogY2FsY3VsYXRlIG5lZWRlZCBzaXplICovCisJCWZvciAoaSA9IDA7IGkgPCBjcmItPm1hcF9lbnRyaWVzOyArK2kpCisJCQlucl9wYWdlcyArPSBjcmItPm1hcFtpXS5jb3VudDsKKworCQkvKiByZWdpc3RlciB0aGUgdm0gYXJlYSAqLworCQljb25zb2xlX3JlbWFwX3ZtLmZsYWdzID0gVk1fQUxMT0M7CisJCWNvbnNvbGVfcmVtYXBfdm0uc2l6ZSA9IG5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7CisJCXZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoJmNvbnNvbGVfcmVtYXBfdm0sIFBBR0VfU0laRSk7CisKKwkJdmFkZHIgPSAodW5zaWduZWQgbG9uZyljb25zb2xlX3JlbWFwX3ZtLmFkZHI7CisKIAkJLyogU2V0IHVwIHRoZSB0aGlyZCBsZXZlbCBQVEVzIGFuZCB1cGRhdGUgdGhlIHZpcnR1YWwKIAkJICAgYWRkcmVzc2VzIG9mIHRoZSBDUkIgZW50cmllcy4gICovCiAJCWZvciAoaSA9IDA7IGkgPCBjcmItPm1hcF9lbnRyaWVzOyArK2kpIHsKQEAgLTIxMywxMiArMjI1LDYgQEAKIAkJCQl2YWRkciArPSBQQUdFX1NJWkU7CiAJCQl9CiAJCX0KLQotCQkvKiBMZXQgdm1hbGxvYyBrbm93IHRoYXQgd2UndmUgYWxsb2NhdGVkIHNvbWUgc3BhY2UuICAqLwotCQljb25zb2xlX3JlbWFwX3ZtLmZsYWdzID0gVk1fQUxMT0M7Ci0JCWNvbnNvbGVfcmVtYXBfdm0uYWRkciA9ICh2b2lkICopIFZNQUxMT0NfU1RBUlQ7Ci0JCWNvbnNvbGVfcmVtYXBfdm0uc2l6ZSA9IHZhZGRyIC0gVk1BTExPQ19TVEFSVDsKLQkJdm1saXN0ID0gJmNvbnNvbGVfcmVtYXBfdm07CiAJfQogCiAJY2FsbGJhY2tfaW5pdF9kb25lID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCmluZGV4IDc5NDg5ZmQuLjA4Mzg5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19BUk1fQV9PVVRfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHN0cnVjdCBleGVjCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBmMmNkMThhLi5lZTEzMDRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpZm5kZWYgX19BU01BUk1fU0VUVVBfSAogI2RlZmluZSBfX0FTTUFSTV9TRVRVUF9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDEwMjQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2ODE3YmU5Li41MzdkZTRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCAyN2E2ODliLi5jYTJiZjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIF9fQVNNX0FSTV9TV0FCX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA0OWE2YmE5Li4xNTlkMDQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMTEsNiArMTExLDcgQEAKIAkuZ2xvYmwgbWNvdW50X2NhbGwKIG1jb3VudF9jYWxsOgogCWJsIGZ0cmFjZV9zdHViCisJbGRyIGxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKIAlsZG1pYSBzcCEsIHtyMC1yMywgcGN9CiAKIEVOVFJZKGZ0cmFjZV9jYWxsZXIpCkBAIC0xMjIsNiArMTIzLDcgQEAKIAkuZ2xvYmwgZnRyYWNlX2NhbGwKIGZ0cmFjZV9jYWxsOgogCWJsIGZ0cmFjZV9zdHViCisJbGRyIGxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKIAlsZG1pYSBzcCEsIHtyMC1yMywgcGN9CiAKICNlbHNlCkBAIC0xMzMsNiArMTM1LDcgQEAKIAlhZHIgcjAsIGZ0cmFjZV9zdHViCiAJY21wIHIwLCByMgogCWJuZSB0cmFjZQorCWxkciBsciwgW2ZwLCAjLTRdCQkJQCByZXN0b3JlIGxyCiAJbGRtaWEgc3AhLCB7cjAtcjMsIHBjfQogCiB0cmFjZToKQEAgLTE0MSw2ICsxNDQsNyBAQAogCXN1YiByMCwgcjAsICNNQ09VTlRfSU5TTl9TSVpFCiAJbW92IGxyLCBwYwogCW1vdiBwYywgcjIKKwltb3YgbHIsIHIxCQkJCUAgcmVzdG9yZSBscgogCWxkbWlhIHNwISwge3IwLXIzLCBwY30KIAogI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2ZpcS5jIGIvYXJjaC9hcm0va2VybmVsL2ZpcS5jCmluZGV4IDM2ZjgxZDkuLjZmZjc5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9maXEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZmlxLmMKQEAgLTg4LDcgKzg4LDcgQEAKICAqIGRpc2FibGUgaXJxcyBmb3IgdGhlIGR1cmF0aW9uLiAgTm90ZSAtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxtb3N0CiAgKiBlbnRpcmVseSBjb2RlZCBpbiBhc3NlbWJseS4KICAqLwotdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpIHNldF9maXFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgX19uYWtlZCBzZXRfZmlxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0bXA7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTEwNiw3ICsxMDYsNyBAQAogCTogInIiICgmcmVncy0+QVJNX3I4KSwgIkkiIChQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBGSVFfTU9ERSkpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkgZ2V0X2ZpcV9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBfX25ha2VkIGdldF9maXFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtcDsKIAlhc20gdm9sYXRpbGUgKApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDM2M2RiMTguLjY4NzRjN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpAQCAtMTA0LDYgKzEwNCwxMSBAQAogCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoYmFkX2lycV9kZXNjLmxvY2spLAogfTsKIAorI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCisvKiBXZSBhcmUgbm90IGFsbG9jYXRpbmcgYmFkX2lycV9kZXNjLmFmZmluaXR5IG9yIC5wZW5kaW5nX21hc2sgKi8KKyNlcnJvciAiQVJNIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19DUFVNQVNLX09GRlNUQUNLLiIKKyNlbmRpZgorCiAvKgogICogZG9fSVJRIGhhbmRsZXMgYWxsIGhhcmR3YXJlIElSUSdzLiAgRGVjb2RlZCBJUlFzIHNob3VsZCBub3QKICAqIGNvbWUgdmlhIHRoaXMgZnVuY3Rpb24uICBJbnN0ZWFkLCB0aGV5IHNob3VsZCBwcm92aWRlIHRoZWlyCkBAIC0xNjEsNyArMTY2LDcgQEAKIAkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVCB8IElSUV9OT1BST0JFOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWJhZF9pcnFfZGVzYy5hZmZpbml0eSA9IENQVV9NQVNLX0FMTDsKKwljcHVtYXNrX3NldGFsbChiYWRfaXJxX2Rlc2MuYWZmaW5pdHkpOwogCWJhZF9pcnFfZGVzYy5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAjZW5kaWYKIAlpbml0X2FyY2hfaXJxKCk7CkBAIC0xOTEsMTUgKzE5NiwxNiBAQAogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7CiAKIAkJaWYgKGRlc2MtPmNwdSA9PSBjcHUpIHsKLQkJCXVuc2lnbmVkIGludCBuZXdjcHUgPSBhbnlfb25saW5lX2NwdShkZXNjLT5hZmZpbml0eSk7Ci0KLQkJCWlmIChuZXdjcHUgPT0gTlJfQ1BVUykgeworCQkJdW5zaWduZWQgaW50IG5ld2NwdSA9IGNwdW1hc2tfYW55X2FuZChkZXNjLT5hZmZpbml0eSwKKwkJCQkJCQkgICAgICBjcHVfb25saW5lX21hc2spOworCQkJaWYgKG5ld2NwdSA+PSBucl9jcHVfaWRzKSB7CiAJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiSVJRJXUgbm8gbG9uZ2VyIGFmZmluZSB0byBDUFUldVxuIiwKIAkJCQkJICAgICAgIGksIGNwdSk7CiAKLQkJCQljcHVzX3NldGFsbChkZXNjLT5hZmZpbml0eSk7Ci0JCQkJbmV3Y3B1ID0gYW55X29ubGluZV9jcHUoZGVzYy0+YWZmaW5pdHkpOworCQkJCWNwdW1hc2tfc2V0YWxsKGRlc2MtPmFmZmluaXR5KTsKKwkJCQluZXdjcHUgPSBjcHVtYXNrX2FueV9hbmQoZGVzYy0+YWZmaW5pdHksCisJCQkJCQkJIGNwdV9vbmxpbmVfbWFzayk7CiAJCQl9CiAKIAkJCXJvdXRlX2lycShkZXNjLCBpLCBuZXdjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAwMDIxNjA3Li4xNjAyMzczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjQsNyArNjQsOSBAQAogCQlfX2luaXRyYW1mc19lbmQgPSAuOwogI2VuZGlmCiAJCS4gPSBBTElHTig0MDk2KTsKKwkJX19wZXJfY3B1X2xvYWQgPSAuOwogCQlfX3Blcl9jcHVfc3RhcnQgPSAuOworCQkJKiguZGF0YS5wZXJjcHUucGFnZV9hbGlnbmVkKQogCQkJKiguZGF0YS5wZXJjcHUpCiAJCQkqKC5kYXRhLnBlcmNwdS5zaGFyZWRfYWxpZ25lZCkKIAkJX19wZXJfY3B1X2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCmluZGV4IDg4ZjdlODguLjA1ZjBmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCkBAIC00LDYgKzQsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CisKIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEKIHsKIAl1bnNpZ25lZCBjaGFyCWRldl9hZGRyWzZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKaW5kZXggYjM0MDRiNy4uMGQyMDc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCkBAIC0yMzEsMTQgKzIzMSwxNyBAQAogCiB2b2lkIF9faW5pdCBraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSkKIHsKKwlpbnQgaTsKKwogCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwogCX0KIAotCWQtPm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZraXJrd29vZF9nZTAwLmRldjsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnJfY2hpcHM7IGkrKykKKwkJZC0+Y2hpcFtpXS5taWlfYnVzID0gJmtpcmt3b29kX2dlMDBfc2hhcmVkLmRldjsKIAlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2Rfc3dpdGNoX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwppbmRleCA5YTBlOTA1Li5lMWMwNTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC04Myw2ICs4MywxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9nZTAxX2RhdGEgPSB7CiAJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoMTEpLAogfTsKQEAgLTEwNSwxMiArMTEwLDEyIEBACiAJa2lya3dvb2RfZ2UwMF9pbml0KCZyZDg4ZjYyODFfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOwogCWlmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMCkgewotCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEuc3dfYWRkciA9IDEwOworCQlyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YS5zd19hZGRyID0gMTA7CiAJCWtpcmt3b29kX2dlMDFfaW5pdCgmcmQ4OGY2MjgxX2dlMDFfZGF0YSk7CiAJfSBlbHNlIHsKLQkJcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLnBvcnRfbmFtZXNbNF0gPSAid2FuIjsKKwkJcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOwogCX0KLQlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJa2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MjgxX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAKIAlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MjgxX3NhdGFfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKaW5kZXggNjg2ZDhkMi4uYTk1NjQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X2NzaV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKaW5kZXggMmU0YjE4NS4uMzIwMGNmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYwppbmRleCAyMmUwZWI2Li5mZWIwZTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYwpAQCAtNjMsNyArNjMsNiBAQAogI2Vsc2UKIHN0YXRpYyB2b2lkIGhhbmRsZV9wcmlvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIApAQCAtNzIsNyArNzEsNyBAQAogCUJVR19PTihkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUyk7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCWlmICh1bmxpa2VseSghYWN0aW9uIHx8IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwppbmRleCAzOGM4OGZiLi5lMzljZDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCkBAIC0xNzgsNyArMTc4LDkgQEAKICNpZmRlZiBDT05GSUdfSTJDMl9PTUFQX0JFQUdMRQogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCA0MDAsIE5VTEwsIDApOwogI2VuZGlmCi0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJLyogQnVzIDMgaXMgYXR0YWNoZWQgdG8gdGhlIERWSSBwb3J0IHdoZXJlIGRldmljZXMgbGlrZSB0aGUgcGljbyBETFAKKwkgKiBwcm9qZWN0b3IgZG9uJ3Qgd29yayByZWxpYWJseSB3aXRoIDQwMGtIeiAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCAxMDAsIE5VTEwsIDApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKaW5kZXggMGE2MjMzNy4uNjhjYzNlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHBsYXQvZWhjaS1vcmlvbi5oPgogI2luY2x1ZGUgPHBsYXQvbXZfeG9yLmg+CiAjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbjV4X3dkdC5oPgogI2luY2x1ZGUgPHBsYXQvdGltZS5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC0yMTksMTQgKzIyMCwxNyBAQAogCiB2b2lkIF9faW5pdCBvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdChzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKmQsIGludCBpcnEpCiB7CisJaW50IGk7CisKIAlpZiAoaXJxICE9IE5PX0lSUSkgewogCQlvcmlvbjV4X3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CiAJCW9yaW9uNXhfc3dpdGNoX3Jlc291cmNlc1swXS5lbmQgPSBpcnE7CiAJCW9yaW9uNXhfc3dpdGNoX2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKIAl9CiAKLQlkLT5taWlfYnVzID0gJm9yaW9uNXhfZXRoX3NoYXJlZC5kZXY7CiAJZC0+bmV0ZGV2ID0gJm9yaW9uNXhfZXRoLmRldjsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnJfY2hpcHM7IGkrKykKKwkJZC0+Y2hpcFtpXS5taWlfYnVzID0gJm9yaW9uNXhfZXRoX3NoYXJlZC5kZXY7CiAJb3Jpb241eF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF9zd2l0Y2hfZGV2aWNlKTsKQEAgLTQzMSw2ICs0MzUsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogWE9SIGVuZ2luZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgbXZfeG9yX3BsYXRmb3JtX3NoYXJlZF9kYXRhIG9yaW9uNXhfeG9yX3NoYXJlZF9kYXRhID0geworCS5kcmFtCQk9ICZvcmlvbjV4X21idXNfZHJhbV9pbmZvLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvcmlvbjV4X3hvcl9zaGFyZWRfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZQk9ICJ4b3IgbG93IiwKQEAgLTQ0OCw2ICs0NTYsOSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Jpb241eF94b3Jfc2hhcmVkID0gewogCS5uYW1lCQk9IE1WX1hPUl9TSEFSRURfTkFNRSwKIAkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmb3Jpb241eF94b3Jfc2hhcmVkX2RhdGEsCisJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3Jpb241eF94b3Jfc2hhcmVkX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gb3Jpb241eF94b3Jfc2hhcmVkX3Jlc291cmNlcywKIH07CkBAIC01MjYsNiArNTM3LDI5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXYXRjaGRvZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgb3Jpb241eF93ZHRfZGF0YSA9IHsKKwkudGNsawkJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAib3Jpb241eF93ZHQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmb3Jpb241eF93ZHRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3sKKwlvcmlvbjV4X3dkdF9kYXRhLnRjbGsgPSBvcmlvbjV4X3RjbGs7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kZXZpY2UpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGltZSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgb3Jpb241eF90Y2xrOwpAQCAtNjI0LDYgKzY1OCwxMSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJPcmlvbjogQXBwbHlpbmcgNTI4MSBEMCBXRkkgd29ya2Fyb3VuZC5cbiIpOwogCQlkaXNhYmxlX2hsdCgpOwogCX0KKworCS8qCisJICogUmVnaXN0ZXIgd2F0Y2hkb2cgZHJpdmVyCisJICovCisJb3Jpb241eF93ZHRfaW5pdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwppbmRleCAxNWY1MzIzLi45YzFjYTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwpAQCAtOTQsNyArOTQsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTEwMyw2ICsxMDMsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW4zIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4MWxfZnhvX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTE3LDcgKzEyMiw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9meG9fZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFJEODhGNTE4MUxfRlhPX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCA4YWQzOTM0Li5lZTEzOTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTA0LDYgKzEwNCwxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHJkODhmNTE4MWxfZ2VfaTJjX3J0YyA9IHsKIAlJMkNfQk9BUkRfSU5GTygiZHMxMzM4IiwgMHg2OCksCiB9OwpAQCAtMTIyLDcgKzEyNyw4IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDgpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfcGxhdF9kYXRhLAorCQkJCWdwaW9fdG9faXJxKDgpKTsKIAlvcmlvbjV4X2kyY19pbml0KCk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjYxODNhcC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKaW5kZXggMjYyZTI1ZS4uNzczN2NmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzJdCT0gImxhbjMiLApAQCAtNDQsNiArNDQsMTEgQEAKIAkucG9ydF9uYW1lc1s1XQk9ICJjcHUiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcmQ4OGY2MTgzYXBfZ2VfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJPSAia2VybmVsIiwKQEAgLTg5LDcgKzk0LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjYxODNhcF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhLCBncGlvX3RvX2lycSgzKSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoMykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJkODhmNjE4M2FwX2dlX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8pKTsKIAlvcmlvbjV4X3NwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwppbmRleCBjYzhmODkyLi4xYjRhZDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzJdCT0gIndhbiIsCkBAIC0xMTUsNiArMTE1LDExIEBACiAJLnBvcnRfbmFtZXNbN10JPSAibGFuNCIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZ3cnQzNTBuX3YyX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgd3J0MzUwbl92Ml9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTEyOSw3ICsxMzQsNyBAQAogCSAqLwogCW9yaW9uNXhfZWhjaTBfaW5pdCgpOwogCW9yaW9uNXhfZXRoX2luaXQoJndydDM1MG5fdjJfZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZ3cnQzNTBuX3YyX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZ3cnQzNTBuX3YyX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKIAlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihXUlQzNTBOX1YyX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKaW5kZXggNmQ0OGUwMC4uYTZmZmY3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPMTZfR1BJTywgIC8qIEFDOTcgY29kZWMgQVZERDIgc3VwcGx5IChhbmFsb2d1ZSBwb3dlcikgKi8KKwlHUElPNDBfR1BJTywgIC8qIE1pYyBhbXAgcG93ZXIgKi8KKwlHUElPNDFfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKaW5kZXggYmUxYWI4ZS4uNjY1MDY2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwpAQCAtMTMzLDYgKzEzMywxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPNF9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCUdQSU83X0dQSU8sICAvKiBTcGVha2VyIGFtcCBwb3dlciAqLworCUdQSU8zN19HUElPLCAvKiBIZWFkcGhvbmUgZGV0ZWN0ICovCisKIAkvKiBQQyBDYXJkICovCiAJR1BJTzhfR1BJTywgICAvKiBDRDAgKi8KIAlHUElPNDRfR1BJTywgIC8qIENEMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKaW5kZXggZGE2ZTQ0Mi4uMjk1ZWM0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCkBAIC0xNTMsNiArMTUzLDEzIEBACiAJR1BJTzIzX1NTUDFfU0NMSywKIAlHUElPMjVfU1NQMV9UWEQsCiAJR1BJTzI2X1NTUDFfUlhELAorCisJLyogSTJTICovCisJR1BJTzI4X0kyU19CSVRDTEtfT1VULAorCUdQSU8yOV9JMlNfU0RBVEFfSU4sCisJR1BJTzMwX0kyU19TREFUQV9PVVQsCisJR1BJTzMxX0kyU19TWU5DLAorCUdQSU8zMl9JMlNfU1lTQ0xLLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaAppbmRleCBlZmJkMmFhLi5mM2U1NTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCkBAIC00NSw2ICs0NSwyMSBAQAogLyogZTd4eCBJckRBIHBvd2VyIGNvbnRyb2wgKi8KICNkZWZpbmUgR1BJT19FN1hYX0lSX09GRiAgICAgICAgIDM4CiAKKy8qIGU3NDAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U3NDBfV005NzA1X25BVkREMiAgMTYKKyNkZWZpbmUgR1BJT19FNzQwX01JQ19PTiAgICAgICAgIDQwCisjZGVmaW5lIEdQSU9fRTc0MF9BTVBfT04gICAgICAgICA0MQorCisvKiBlNzUwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FNzUwX0hQX0FNUF9PRkYgICAgICA0CisjZGVmaW5lIEdQSU9fRTc1MF9TUEtfQU1QX09GRiAgICAgNworI2RlZmluZSBHUElPX0U3NTBfSFBfREVURUNUICAgICAgMzcKKworLyogZTgwMCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTgwMF9IUF9ERVRFQ1QgICAgICA4MQorI2RlZmluZSBHUElPX0U4MDBfSFBfQU1QX09GRiAgICAgODIKKyNkZWZpbmUgR1BJT19FODAwX1NQS19BTVBfT04gICAgIDgzCisKIC8qIEFTSUMgcmVsYXRlZCBHUElPcyAqLwogI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19JUlEgICAgICAgIDUKICNkZWZpbmUgR1BJT19FU0VSSUVTX1RNSU9fUENMUiAgICAgIDE5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCmluZGV4IGNmMzE5ODYuLjAxOGY2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwogI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCi0jZGVmaW5lIFNTQ1IwX0FEQwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCiAjZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCiAjZW5kaWYKIApAQCAtMTA5LDYgKzEwOSwxMSBAQAogI2RlZmluZSBTU1NSX1RJTlQJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgU1NTUl9QSU5UCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVycnVwdCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KQorI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9FRE1ZU1RSVCh4KQkoKHgpIDw8IDI2KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RhcnQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFNTUFNQX0ZTUlQJCSgxIDw8IDI1KQkvKiBGcmFtZSBTeW5jIFJlbGF0aXZlIFRpbWluZyAqLwogI2RlZmluZSBTU1BTUF9ETVlTVE9QKHgpCSgoeCkgPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KICNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCA2ZDQ0N2M5Li4wZDYyZDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTEwNSw2ICsxMDUsMTIgQEAKIAlHUElPNTdfbklPSVMxNiwKIAlHUElPMTA0X1BTS1RTRUwsCiAKKwkvKiBJMlMgKi8KKwlHUElPMjhfSTJTX0JJVENMS19PVVQsCisJR1BJTzI5X0kyU19TREFUQV9JTiwKKwlHUElPMzBfSTJTX1NEQVRBX09VVCwKKwlHUElPMzFfSTJTX1NZTkMsCisKIAkvKiBNTUMgKi8KIAlHUElPMzJfTU1DX0NMSywKIAlHUElPMTEyX01NQ19DTUQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggNTUyYjRjNy4uNDQwYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2MDc4ZjA5Li44MzMxZThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9iYXN0LW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvYmFzdC1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCmluZGV4IDkxOTg1NmMuLjllMzQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKaW5kZXggNWI1ZWUwYi4uNjliNmNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0NDBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggMmE1OGE0ZC4uODQzMGU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAjZGVmaW5lIE1BUCh4KSB7IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCmluZGV4IDNjNGQ0NzEuLjI1Zjc5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAogfTsKIAotc3RydWN0IG1hcF9kZXNjIHNtZGs2NDEwX2lvZGVzY1tdID0ge307CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGs2NDEwX2lvZGVzY1tdID0ge307CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrNjQxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKICNpZmRlZiBDT05GSUdfU01ESzY0MTBfU0RfQ0gwCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2czBbXSBfX2luaXRkYXRhID0gewogCXsgSTJDX0JPQVJEX0lORk8oIjI0YzA4IiwgMHg1MCksIH0sCi0JeyBJMkNfQk9BUkRfSU5GTygiV004NTgwIiwgMFgxYiksIH0sCisJeyBJMkNfQk9BUkRfSU5GTygid204NTgwIiwgMHgxYiksIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19kZXZzMVtdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYwppbmRleCBjM2JhNmE5Li43MDk5N2Q1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZlcm9jZW9uLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitzdGF0aWMgdm9pZCBfX25ha2VkCiBmZXJvY2Vvbl9jb3B5X3VzZXJfcGFnZSh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tKQogewogCWFzbSgiXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMKaW5kZXggNzBlZDk2Yy4uZGU5YzA2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogRklYTUU6IGRvIHdlIG5lZWQgdG8gaGFuZGxlIGNhY2hlIHN0dWZmLi4uCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIHYzX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCiB7CiAJYXNtKCJcblwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYwppbmRleCAxNjAxNjk4Li43MzcwYTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCkBAIC00NCw3ICs0NCw3IEBACiAgKiBpbnN0cnVjdGlvbi4gIElmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBseSB0aGlzLCB5b3UgaGF2ZSB0byB3cml0ZSB5b3VyCiAgKiBvd24gY29weV91c2VyX2hpZ2hwYWdlIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIG1jX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmZyb20sIHZvaWQgKnRvKQogewogCWFzbSB2b2xhdGlsZSgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYwppbmRleCAzZWM5M2RhLi45YWIwOTg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBpbnN0cnVjdGlvbi4gIElmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBseSB0aGlzLCB5b3UgaGF2ZSB0byB3cml0ZSB5b3VyCiAgKiBvd24gY29weV91c2VyX2hpZ2hwYWdlIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIHY0d2JfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKIHsKIAlhc20oIlwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYwppbmRleCAwZjExODhlLi4zMDBlZmFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBkaXJ0eSBkYXRhIGluIHRoZSBjYWNoZS4gIEhvd2V2ZXIsIHdlIGRvIGhhdmUgdG8gZW5zdXJlIHRoYXQKICAqIHN1YnNlcXVlbnQgcmVhZHMgYXJlIHVwIHRvIGRhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3N0YXRpYyB2b2lkIF9fbmFrZWQKIHY0d3RfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKIHsKIAlhc20oIlwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYwppbmRleCAzOWE5OTQ1Li5iYzQ1MjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgKiBpZiB3ZSBldmVudHVhbGx5IGVuZCB1cCB1c2luZyBvdXIgY29waWVkIHBhZ2UuCiAgKgogICovCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitzdGF0aWMgdm9pZCBfX25ha2VkCiB4c2MzX21jX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCiB7CiAJYXNtKCJcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCmluZGV4IGQxOGYyMzkuLjc2ODI0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCkBAIC00Miw3ICs0Miw3IEBACiAgKiBEY2FjaGUgYWxpYXNpbmcgaXNzdWUuICBUaGUgd3JpdGVzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSB3cml0ZSBidWZmZXIsCiAgKiBhbmQgbWVyZ2VkIGFzIGFwcHJvcHJpYXRlLgogICovCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitzdGF0aWMgdm9pZCBfX25ha2VkCiBtY19jb3B5X3VzZXJfcGFnZSh2b2lkICpmcm9tLCB2b2lkICp0bykKIHsKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggMzEwZTQ3OS4uZjFlZjU2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC00OTAsMjYgKzQ5MCwzMCBAQAogICovCiB2b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7Ci0JY29uc3Qgdm9pZCAqZW5kID0gc3RhcnQgKyBzaXplOworCXZvaWQgKCppbm5lcl9vcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCXZvaWQgKCpvdXRlcl9vcCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKLQlCVUdfT04oIXZpcnRfYWRkcl92YWxpZChzdGFydCkgfHwgIXZpcnRfYWRkcl92YWxpZChlbmQgLSAxKSk7CisJQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQgKyBzaXplIC0gMSkpOwogCiAJc3dpdGNoIChkaXJlY3Rpb24pIHsKIAljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwotCQlkbWFjX2ludl9yYW5nZShzdGFydCwgZW5kKTsKLQkJb3V0ZXJfaW52X3JhbmdlKF9fcGEoc3RhcnQpLCBfX3BhKGVuZCkpOworCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOworCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KLQkJZG1hY19jbGVhbl9yYW5nZShzdGFydCwgZW5kKTsKLQkJb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYShzdGFydCksIF9fcGEoZW5kKSk7CisJCWlubmVyX29wID0gZG1hY19jbGVhbl9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9jbGVhbl9yYW5nZTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfQklESVJFQ1RJT05BTDoJCS8qIHdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSAqLwotCQlkbWFjX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpOwotCQlvdXRlcl9mbHVzaF9yYW5nZShfX3BhKHN0YXJ0KSwgX19wYShlbmQpKTsKKwkJaW5uZXJfb3AgPSBkbWFjX2ZsdXNoX3JhbmdlOworCQlvdXRlcl9vcCA9IG91dGVyX2ZsdXNoX3JhbmdlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CisKKwlpbm5lcl9vcChzdGFydCwgc3RhcnQgKyBzaXplKTsKKwlvdXRlcl9vcChfX3BhKHN0YXJ0KSwgX19wYShzdGFydCkgKyBzaXplKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2NhY2hlX21haW50KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDM0ZGY0ZDkuLjgwZmQzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCWZvcl9lYWNoX25vZGUobm9kZSkKIAkJYm9vdG1lbV9mcmVlX25vZGUobm9kZSwgbWkpOwogCi0JaGlnaF9tZW1vcnkgPSBfX3ZhKG1lbWVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CisJaGlnaF9tZW1vcnkgPSBfX3ZhKChtZW1lbmRfcGZuIDw8IFBBR0VfU0hJRlQpIC0gMSkgKyAxOwogCiAJLyoKIAkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSB1c2VkIGJ5IHRoZSBMaW51eCBtZW1vcnkgbWFuYWdlciBhbnkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCA1MzU4ZmNjLi5mNzQ1N2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIHsKIAlpZiAoYWRkciA8IFBIWVNfT0ZGU0VUKQogCQlyZXR1cm4gMDsKLQlpZiAoYWRkciArIHNpemUgPiBfX3BhKGhpZ2hfbWVtb3J5KSkKKwlpZiAoYWRkciArIHNpemUgPj0gX19wYShoaWdoX21lbW9yeSAtIDEpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYwppbmRleCA2ZDZiZDU4Li44NTNkNDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mKGNwdSk7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKLQlkZXNjLT5hZmZpbml0eSA9ICptYXNrOworCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiAJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQppbmRleCBkZWFmZjU4Li4wNGExMDBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw4IEBACiBvYmotJChDT05GSUdfT01BUF9ETV9USU1FUikgKz0gZG10aW1lci5vCiBvYmotJChDT05GSUdfT01BUF9ERUJVR19ERVZJQ0VTKSArPSBkZWJ1Zy1kZXZpY2VzLm8KIG9iai0kKENPTkZJR19PTUFQX0RFQlVHX0xFRFMpICs9IGRlYnVnLWxlZHMubwotb2JqLSQoQ09ORklHX0kyQ19PTUFQKSArPSBpMmMubworaTJjLW9tYXAtJChDT05GSUdfSTJDX09NQVApIDo9IGkyYy5vCitvYmoteSArPSAkKGkyYy1vbWFwLW0pICQoaTJjLW9tYXAteSkKIAogIyBPTUFQIG1haWxib3ggZnJhbWV3b3JrCiBvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykgKz0gbWFpbGJveC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggMDg0M2I4OC4uNjgyNWZiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMjAwLDIwICsyMDAsMTYgQEAKIH07CiAKIC8qCi0gKiBSb3VuZHMgZG93biB0byBuZWFyZXN0IG5zZWMuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBvbWFwXzMya190aWNrc190b19uc2Vjcyh1bnNpZ25lZCBsb25nIHRpY2tzXzMyaykKLXsKLQlyZXR1cm4gY3ljMm5zKCZjbG9ja3NvdXJjZV8zMmssIHRpY2tzXzMyayk7Ci19Ci0KLS8qCiAgKiBSZXR1cm5zIGN1cnJlbnQgdGltZSBmcm9tIGJvb3QgaW4gbnNlY3MuIEl0J3MgT0sgZm9yIHRoaXMgdG8gd3JhcAogICogYXJvdW5kIGZvciBub3csIGFzIGl0J3MganVzdCBhIHJlbGF0aXZlIHRpbWUgc3RhbXAuCiAgKi8KIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQogewotCXJldHVybiBvbWFwXzMya190aWNrc190b19uc2VjcyhvbWFwXzMya19yZWFkKCkpOworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQ7CisKKwlyZXQgPSAodW5zaWduZWQgbG9uZyBsb25nKW9tYXBfMzJrX3JlYWQoKTsKKwlyZXQgPSAocmV0ICogY2xvY2tzb3VyY2VfMzJrLm11bHRfb3JpZykgPj4gY2xvY2tzb3VyY2VfMzJrLnNoaWZ0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IGVmNzBlMmIuLmU3NDZlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtMzUsNyArMzUsNyBAQAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKIGV4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9lbmFibGVfY2xvY2tzKGludCBlbmFibGUpOwotI2lmZGVmIENPTkZJR19JMkNfT01BUAorI2lmIGRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCiBleHRlcm4gaW50IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKIAkJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAogCQkJCSB1bnNpZ25lZCBsZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IDJhOWMyN2EuLjM3ZTJmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSAmJiBcCiAJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKLSNlcnJvciAiUG93ZXIgbWFuYWdlbWVudCBmb3IgdGhpcyBwcm9jZXNzb3Igbm90IGltcGxlbWVudGVkIHlldCIKKyN3YXJuaW5nICJQb3dlciBtYW5hZ2VtZW50IGZvciB0aGlzIHByb2Nlc3NvciBub3QgaW1wbGVtZW50ZWQgeWV0IgogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5Y2Y2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fUExBVF9PUklPTjVYX1dEVF9ICisjZGVmaW5lIF9fUExBVF9PUklPTjVYX1dEVF9ICisKK3N0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhIHsKKwl1MzIJdGNsazsJCS8qIG5vIDxsaW51eC9jbGsuaD4gc3VwcG9ydCB5ZXQgKi8KK307CisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvYXVkaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2F1ZGlvLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKaW5kZXggMjVkNDA1OC4uMGZhZDc1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaApAQCAtMzMsNiArMzMsOSBAQAogI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUJKDEgPDwgMSkKICNkZWZpbmUgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRQkoMSA8PCAwKQogCisjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0lNU19QQ0xLCQkoMCA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWAkoMSA8PCAxMCkKKwogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUwJKDAgPDwgMTApCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9FWFRFUk5BTAkoMSA8PCAxMCkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0xBVkUJCSgyIDw8IDEwKQpAQCAtNDQsOCArNDcsOCBAQAogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9MUl9MTE9XCQkoMCA8PCA3KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9MUl9STE9XCQkoMSA8PCA3KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfSUlTCQkoMCA8PCA1KQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTVNCCQkoMCA8PCA1KQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTFNCCQkoMCA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTVNCCQkoMSA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTFNCCQkoMiA8PCA1KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTUFTSwkJKDMgPDwgNSkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS18yNTZGUwkoMCA8PCAzKQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzUxMkZTCSgxIDw8IDMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCmluZGV4IGNkOTFkMTUuLjgyMmM4N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaApAQCAtMSw5ICsxLDkgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaAorLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogUzNDMjQxMCAtIHVzYiBwb3J0IGluZm9ybWF0aW9uCisgKiBTM0MgLSBVU0IgaG9zdCBwb3J0IGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMSw3ICsxMSw3IEBACiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgiCisjZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICiAKICNkZWZpbmUgUzNDX0hDREZMR19VU0VECSgxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtaWlzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLWlpcy5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCmluZGV4IDEzNmM5ODIuLmFkMWI5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkmY2xrXzQ4bSwKIH07CiAKLXZvaWQgczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3ZvaWQgX19pbml0IHMzYzY0eHhfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2dwaW9saWIuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9ncGlvbGliLmMKaW5kZXggY2M2Mjk0MS4uZWU5MTg4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2dwaW9saWIuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCkBAIC00MTcsNCArNDE3LDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotYXJjaF9pbml0Y2FsbChzM2M2NHh4X2dwaW9saWJfaW5pdCk7Citjb3JlX2luaXRjYWxsKHMzYzY0eHhfZ3Bpb2xpYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKaW5kZXggMjg0NmY1NS4uZjg2NWJmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogI2RlZmluZSBJUlFfT05FTkFORDEJCVMzQzY0WFhfSVJRX1ZJQzEoMTIpCiAjZGVmaW5lIElSUV9ORkMJCQlTM0M2NFhYX0lSUV9WSUMxKDEzKQogI2RlZmluZSBJUlFfQ0ZDT04JCVMzQzY0WFhfSVJRX1ZJQzEoMTQpCi0jZGVmaW5lIElSUV9VSE9TVAkJUzNDNjRYWF9JUlFfVklDMSgxNSkKKyNkZWZpbmUgSVJRX1VTQkgJCVMzQzY0WFhfSVJRX1ZJQzEoMTUpCiAjZGVmaW5lIElSUV9TUEkwCQlTM0M2NFhYX0lSUV9WSUMxKDE2KQogI2RlZmluZSBJUlFfU1BJMQkJUzNDNjRYWF9JUlFfVklDMSgxNykKICNkZWZpbmUgSVJRX0lJQwkJCVMzQzY0WFhfSVJRX1ZJQzEoMTgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLWVpbnQuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jCmluZGV4IGViYjMwNWMuLmNmNTI0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jCkBAIC0xNCwxMiArMTQsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLWlycXR5cGUuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KQEAgLTc0LDYgKzc3LDcgQEAKIHN0YXRpYyBpbnQgczNjX2lycV9laW50X3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQogewogCWludCBvZmZzID0gZWludF9vZmZzZXQoaXJxKTsKKwlpbnQgcGluOwogCWludCBzaGlmdDsKIAl1MzIgY3RybCwgbWFzazsKIAl1MzIgbmV3dmFsdWUgPSAwOwpAQCAtMTI1LDYgKzEyOSwxNSBAQAogCWN0cmwgfD0gbmV3dmFsdWUgPDwgc2hpZnQ7CiAJX19yYXdfd3JpdGVsKGN0cmwsIHJlZyk7CiAKKwkvKiBzZXQgdGhlIEdQSU8gcGluIGFwcHJvcHJpYXRlbHkgKi8KKworCWlmIChvZmZzIDwgMjMpCisJCXBpbiA9IFMzQzY0WFhfR1BOKG9mZnMpOworCWVsc2UKKwkJcGluID0gUzNDNjRYWF9HUE0ob2ZmcyAtIDIzKTsKKworCXMzY19ncGlvX2NmZ3BpbihwaW4sIFMzQ19HUElPX1NGTigyKSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxLDcgKzE5NCw3IEBACiAJczNjX2lycV9kZW11eF9laW50KDIwLCAyNyk7CiB9CiAKLWludCBfX2luaXQgczNjNjR4eF9pbml0X2lycV9laW50KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2luaXRfaXJxX2VpbnQodm9pZCkKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKaW5kZXggYTk0ZjFkNS4uZjIyZWRmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzM2M2NHh4X3VhcnRfaXJxKHN0cnVjdCB1YXJ0X2lycSAqdWlycSkKIHsKLQl2b2lkICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgb2ZmczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKaW5kZXggOGQ5YTBjYS4uMDViMTc1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCkBAIC0zNiw3ICszNiw3IEBACiAgKiBleHRfeHRhbF9tdXggZm9yIHdhbnQgb2YgYW4gYWN0dWFsIG5hbWUgZnJvbSB0aGUgbWFudWFsLgogKi8KIAotc3RydWN0IGNsayBjbGtfZXh0X3h0YWxfbXV4ID0geworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2V4dF94dGFsX211eCA9IHsKIAkubmFtZQkJPSAiZXh0X3h0YWwiLAogCS5pZAkJPSAtMSwKIH07CkBAIC02Myw3ICs2Myw3IEBACiAJdm9pZCBfX2lvbWVtCQkqcmVnX2RpdmlkZXI7CiB9OwogCi1zdHJ1Y3QgY2xrIGNsa19mb3V0X2FwbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsayBjbGtfZm91dF9hcGxsID0gewogCS5uYW1lCQk9ICJmb3V0X2FwbGwiLAogCS5pZAkJPSAtMSwKIH07CkBAIC03OCw3ICs3OCw3IEBACiAJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfYXBsbF9saXN0KSwKIH07CiAKLXN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2FwbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfYXBsbCA9IHsKIAkuY2xrCT0gewogCQkubmFtZQkJPSAibW91dF9hcGxsIiwKIAkJLmlkCQk9IC0xLApAQCAtODgsNyArODgsNyBAQAogCS5zb3VyY2VzCT0gJmNsa19zcmNfYXBsbCwKIH07CiAKLXN0cnVjdCBjbGsgY2xrX2ZvdXRfZXBsbCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mb3V0X2VwbGwgPSB7CiAJLm5hbWUJCT0gImZvdXRfZXBsbCIsCiAJLmlkCQk9IC0xLAogfTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2VwbGxfbGlzdCksCiB9OwogCi1zdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9lcGxsID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2VwbGwgPSB7CiAJLmNsawk9IHsKIAkJLm5hbWUJCT0gIm1vdXRfZXBsbCIsCiAJCS5pZAkJPSAtMSwKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX21wbGxfbGlzdCksCiB9OwogCi1zdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9tcGxsID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X21wbGwgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gIm1vdXRfbXBsbCIsCiAJCS5pZAkJPSAtMSwKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiByYXRlOwogfQogCi1zdHJ1Y3QgY2xrIGNsa19kb3V0X21wbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsayBjbGtfZG91dF9tcGxsID0gewogCS5uYW1lCQk9ICJkb3V0X21wbGwiLAogCS5pZAkJPSAtMSwKIAkucGFyZW50CQk9ICZjbGtfbW91dF9tcGxsLmNsaywKQEAgLTE4OSwxMCArMTg5LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3Vob3N0X2xpc3RbXSA9IHsKKwkmY2xrXzQ4bSwKIAkmY2xrX21vdXRfZXBsbC5jbGssCiAJJmNsa19kb3V0X21wbGwsCiAJJmNsa19maW5fZXBsbCwKLQkmY2xrXzQ4bSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X3Vob3N0ID0gewpAQCAtMjM5LDEwICsyMzksMTIgQEAKIAogCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShjbGssIHJhdGUpOwogCWRpdiA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyByYXRlOworCWlmIChkaXYgPiAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCXZhbCAmPSB+c2Nsay0+bWFzazsKLQl2YWwgfD0gKHJhdGUgLSAxKSA8PCBzY2xrLT5zaGlmdDsKKwl2YWwgJj0gfigweGYgPDwgc2Nsay0+c2hpZnQpOworCXZhbCB8PSAoZGl2IC0gMSkgPDwgc2Nsay0+c2hpZnQ7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKIAogCXJldHVybiAwOwpAQCAtMzUxLDcgKzM1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfdXNiaG9zdCA9IHsKIAkuY2xrCT0gewotCQkubmFtZQkJPSAidXNiLWhvc3QtYnVzIiwKKwkJLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCiAJCS5pZAkJPSAtMSwKIAkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX1VIT1NULAogCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggZmQyM2MwZS4uYjQyMTFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogU3VuIE5vdiAzMCAxNjozOTozNiAyMDA4CisjIExhc3QgdXBkYXRlOiBUaHUgTWFyIDEyIDE4OjAxOjQ1IDIwMDkKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTgxMSw3ICsxODExLDcgQEAKIGphZGUJCQlNQUNIX0pBREUJCUpBREUJCQkxODIxCiBrczg2OTVfc29mdHBsYwkJTUFDSF9LUzg2OTVfU09GVFBMQwlLUzg2OTVfU09GVFBMQwkJMTgyMgogZ3ByaXNjMwkJCU1BQ0hfR1BSSVNDMwkJR1BSSVNDMwkJCTE4MjMKLXN0YW1wOTI2MAkJTUFDSF9TVEFNUDkyNjAJCVNUQU1QOTI2MAkJMTgyNAorc3RhbXA5ZzIwCQlNQUNIX1NUQU1QOUcyMAkJU1RBTVA5RzIwCQkxODI0CiBzbWRrNjQzMAkJTUFDSF9TTURLNjQzMAkJU01ESzY0MzAJCTE4MjUKIHNtZGtjMTAwCQlNQUNIX1NNREtDMTAwCQlTTURLQzEwMAkJMTgyNgogdGF2b3JldmIJCU1BQ0hfVEFWT1JFVkIJCVRBVk9SRVZCCQkxODI3CkBAIC0xOTkzLDQgKzE5OTMsMTM0IEBACiBiZW56aW5hCQkJTUFDSF9CRU5aSU5BCQlCRU5aSU5BCQkJMjAwMwogYmxhemUJCQlNQUNIX0JMQVpFCQlCTEFaRQkJCTIwMDQKIGxpbmtzdGF0aW9uX2xzX2hnbAlNQUNIX0xJTktTVEFUSU9OX0xTX0hHTAlMSU5LU1RBVElPTl9MU19IR0wJMjAwNQotaHRjdmVudXMJCU1BQ0hfSFRDVkVOVVMJCUhUQ1ZFTlVTCQkyMDA2CitodGNrb3Zza3kJCU1BQ0hfSFRDVkVOVVMJCUhUQ1ZFTlVTCQkyMDA2Citzb255X3ByczUwNQkJTUFDSF9TT05ZX1BSUzUwNQlTT05ZX1BSUzUwNQkJMjAwNworaGFubGluX3YzCQlNQUNIX0hBTkxJTl9WMwkJSEFOTElOX1YzCQkyMDA4CitzYXBwaGlyYQkJTUFDSF9TQVBQSElSQQkJU0FQUEhJUkEJCTIwMDkKK2RhY2tfc2RhXzAxCQlNQUNIX0RBQ0tfU0RBXzAxCURBQ0tfU0RBXzAxCQkyMDEwCithcm1ib3gJCQlNQUNIX0FSTUJPWAkJQVJNQk9YCQkJMjAxMQoraGFycmlzX3J2cAkJTUFDSF9IQVJSSVNfUlZQCQlIQVJSSVNfUlZQCQkyMDEyCityaWJhbGRvCQkJTUFDSF9SSUJBTERPCQlSSUJBTERPCQkJMjAxMworYWdvcmEJCQlNQUNIX0FHT1JBCQlBR09SQQkJCTIwMTQKK29tYXAzX21pbmkJCU1BQ0hfT01BUDNfTUlOSQkJT01BUDNfTUlOSQkJMjAxNQorYTlzYW02NDMyX2IJCU1BQ0hfQTlTQU02NDMyX0IJQTlTQU02NDMyX0IJCTIwMTYKK3VzZzI0MTAJCQlNQUNIX1VTRzI0MTAJCVVTRzI0MTAJCQkyMDE3CitwYzcyMDUyX2kxMF9yZXZiCU1BQ0hfUEM3MjA1Ml9JMTBfUkVWQglQQzcyMDUyX0kxMF9SRVZCCTIwMTgKK214MzVfZXhtMzIJCU1BQ0hfTVgzNV9FWE0zMgkJTVgzNV9FWE0zMgkJMjAxOQordG9wYXM5MTAJCU1BQ0hfVE9QQVM5MTAJCVRPUEFTOTEwCQkyMDIwCitoeWVuYQkJCU1BQ0hfSFlFTkEJCUhZRU5BCQkJMjAyMQorcG9zcGF4CQkJTUFDSF9QT1NQQVgJCVBPU1BBWAkJCTIwMjIKK2hkbF9neAkJCU1BQ0hfSERMX0dYCQlIRExfR1gJCQkyMDIzCitjdGVyYV80YmF5CQlNQUNIX0NURVJBXzRCQVkJCUNURVJBXzRCQVkJCTIwMjQKK2N0ZXJhX3BsdWdfYwkJTUFDSF9DVEVSQV9QTFVHX0MJQ1RFUkFfUExVR19DCQkyMDI1CitjcndlYV9wbHVnX2kJCU1BQ0hfQ1JXRUFfUExVR19JCUNSV0VBX1BMVUdfSQkJMjAyNgorZWdhdWdlMgkJCU1BQ0hfRUdBVUdFMgkJRUdBVUdFMgkJCTIwMjcKK2RpZGoJCQlNQUNIX0RJREoJCURJREoJCQkyMDI4CittX3MzYzI0NDMJCU1BQ0hfTUVJU1RFUgkJTUVJU1RFUgkJCTIwMjkKK2h0Y2JsYWNrc3RvbmUJCU1BQ0hfSFRDQkxBQ0tTVE9ORQlIVENCTEFDS1NUT05FCQkyMDMwCitjcHVhdDlnMjAJCU1BQ0hfQ1BVQVQ5RzIwCQlDUFVBVDlHMjAJCTIwMzEKK3NtZGs2NDQwCQlNQUNIX1NNREs2NDQwCQlTTURLNjQ0MAkJMjAzMgorb21hcF8zNXh4X212cAkJTUFDSF9PTUFQXzM1WFhfTVZQCU9NQVBfMzVYWF9NVlAJCTIwMzMKK2N0ZXJhX3BsdWdfaQkJTUFDSF9DVEVSQV9QTFVHX0kJQ1RFUkFfUExVR19JCQkyMDM0Citwdmc2MTBfMTAwCQlNQUNIX1BWRzYxMAkJUFZHNjEwCQkJMjAzNQoraHBydzY4MTUJCU1BQ0hfSFBSVzY4MTUJCUhQUlc2ODE1CQkyMDM2CitvbWFwM19vc3dhbGQJCU1BQ0hfT01BUDNfT1NXQUxECU9NQVAzX09TV0FMRAkJMjAzNworbmFzNDIyMGIJCU1BQ0hfTkFTNDIyMEIJCU5BUzQyMjBCCQkyMDM4CitodGNyYXBoYWVsX2NkbWEJCU1BQ0hfSFRDUkFQSEFFTF9DRE1BCUhUQ1JBUEhBRUxfQ0RNQQkJMjAzOQoraHRjZGlhbW9uZF9jZG1hCQlNQUNIX0hUQ0RJQU1PTkRfQ0RNQQlIVENESUFNT05EX0NETUEJCTIwNDAKK3NjYWxlcgkJCU1BQ0hfU0NBTEVSCQlTQ0FMRVIJCQkyMDQxCit6eWxvbml0ZTIJCU1BQ0hfWllMT05JVEUyCQlaWUxPTklURTIJCTIwNDIKK2FzcGVuaXRlCQlNQUNIX0FTUEVOSVRFCQlBU1BFTklURQkJMjA0MwordGV0b24JCQlNQUNIX1RFVE9OCQlURVRPTgkJCTIwNDQKK3R0Y19ka2IJCQlNQUNIX1RUQ19ES0IJCVRUQ19ES0IJCQkyMDQ1CitiaXNob3AyCQkJTUFDSF9CSVNIT1AyCQlCSVNIT1AyCQkJMjA0NgoraXBwdjUJCQlNQUNIX0lQUFY1CQlJUFBWNQkJCTIwNDcKK2Zhcm05MjYJCQlNQUNIX0ZBUk05MjYJCUZBUk05MjYJCQkyMDQ4CittbWNjcHUJCQlNQUNIX01NQ0NQVQkJTU1DQ1BVCQkJMjA0OQorc2dtc2ZsCQkJTUFDSF9TR01TRkwJCVNHTVNGTAkJCTIwNTAKK3R0ODAwMAkJCU1BQ0hfVFQ4MDAwCQlUVDgwMDAJCQkyMDUxCit6cm40MzAwbHAJCU1BQ0hfWlJONDMwMExQCQlaUk40MzAwTFAJCTIwNTIKK21wdGMJCQlNQUNIX01QVEMJCU1QVEMJCQkyMDUzCitoNjA1MQkJCU1BQ0hfSDYwNTEJCUg2MDUxCQkJMjA1NAorcHZnNjEwXzEwMQkJTUFDSF9QVkc2MTBfMTAxCQlQVkc2MTBfMTAxCQkyMDU1CitzdGFtcDkyNjFfcGNfZXZiCU1BQ0hfU1RBTVA5MjYxX1BDX0VWQglTVEFNUDkyNjFfUENfRVZCCTIwNTYKK3BlbGNvX29keXNzZXVzCQlNQUNIX1BFTENPX09EWVNTRVVTCVBFTENPX09EWVNTRVVTCQkyMDU3Cit0bnlfYTkyNjAJCU1BQ0hfVE5ZX0E5MjYwCQlUTllfQTkyNjAJCTIwNTgKK3RueV9hOWcyMAkJTUFDSF9UTllfQTlHMjAJCVROWV9BOUcyMAkJMjA1OQorYWVzb3BfbXAyNTMwZgkJTUFDSF9BRVNPUF9NUDI1MzBGCUFFU09QX01QMjUzMEYJCTIwNjAKK2R4OTAwCQkJTUFDSF9EWDkwMAkJRFg5MDAJCQkyMDYxCitjcG9kYzIJCQlNQUNIX0NQT0RDMgkJQ1BPREMyCQkJMjA2MgordGlsdF84OTI1CQlNQUNIX1RJTFRfODkyNQkJVElMVF84OTI1CQkyMDYzCitkYXZpbmNpX2RtMzU3X2V2bQlNQUNIX0RBVklOQ0lfRE0zNTdfRVZNCURBVklOQ0lfRE0zNTdfRVZNCTIwNjQKK3N3b3JkZmlzaAkJTUFDSF9TV09SREZJU0gJCVNXT1JERklTSAkJMjA2NQorY29ydnVzCQkJTUFDSF9DT1JWVVMJCUNPUlZVUwkJCTIwNjYKK3RhdXJ1cwkJCU1BQ0hfVEFVUlVTCQlUQVVSVVMJCQkyMDY3CitheG0JCQlNQUNIX0FYTQkJQVhNCQkJMjA2OAorYXhjCQkJTUFDSF9BWEMJCUFYQwkJCTIwNjkKK2JhYnkJCQlNQUNIX0JBQlkJCUJBQlkJCQkyMDcwCittcDIwMAkJCU1BQ0hfTVAyMDAJCU1QMjAwCQkJMjA3MQorcGNtMDQzCQkJTUFDSF9QQ00wNDMJCVBDTTA0MwkJCTIwNzIKK2hhbmxpbl92M2MJCU1BQ0hfSEFOTElOX1YzQwkJSEFOTElOX1YzQwkJMjA3Mwora2JrOWcyMAkJCU1BQ0hfS0JLOUcyMAkJS0JLOUcyMAkJCTIwNzQKK2Fkc3R1cmJvZzUJCU1BQ0hfQURTVFVSQk9HNQkJQURTVFVSQk9HNQkJMjA3NQorYXZlbmdlcl9saXRlMQkJTUFDSF9BVkVOR0VSX0xJVEUxCUFWRU5HRVJfTElURTEJCTIwNzYKK3N1YzgyeAkJCU1BQ0hfU1VDCQlTVUMJCQkyMDc3CithdDkxc2FtN3MyNTYJCU1BQ0hfQVQ5MVNBTTdTMjU2CUFUOTFTQU03UzI1NgkJMjA3OAorbWVuZG96YQkJCU1BQ0hfTUVORE9aQQkJTUVORE9aQQkJCTIwNzkKK2tpcmEJCQlNQUNIX0tJUkEJCUtJUkEJCQkyMDgwCitteDFoYm0JCQlNQUNIX01YMUhCTQkJTVgxSEJNCQkJMjA4MQorcXVhdHJvNDN4eAkJTUFDSF9RVUFUUk80M1hYCQlRVUFUUk80M1hYCQkyMDgyCitxdWF0cm80MjMwCQlNQUNIX1FVQVRSTzQyMzAJCVFVQVRSTzQyMzAJCTIwODMKK25zYjQwMAkJCU1BQ0hfTlNCNDAwCQlOU0I0MDAJCQkyMDg0CitkcnAyNTUJCQlNQUNIX0RSUDI1NQkJRFJQMjU1CQkJMjA4NQordGhvdGgJCQlNQUNIX1RIT1RICQlUSE9USAkJCTIwODYKK2ZpcmVzdG9uZQkJTUFDSF9GSVJFU1RPTkUJCUZJUkVTVE9ORQkJMjA4NworYXN1c3A3NTAJCU1BQ0hfQVNVU1A3NTAJCUFTVVNQNzUwCQkyMDg4CitjdGVyYV9kbAkJTUFDSF9DVEVSQV9ETAkJQ1RFUkFfREwJCTIwODkKK3NvY3IJCQlNQUNIX1NPQ1IJCVNPQ1IJCQkyMDkwCitodGNveHlnZW4JCU1BQ0hfSFRDT1hZR0VOCQlIVENPWFlHRU4JCTIwOTEKK2hlcm9jCQkJTUFDSF9IRVJPQwkJSEVST0MJCQkyMDkyCit6ZW5vNjgwMAkJTUFDSF9aRU5PNjgwMAkJWkVOTzY4MDAJCTIwOTMKK3NjMm1jcwkJCU1BQ0hfU0MyTUNTCQlTQzJNQ1MJCQkyMDk0CitnZW5lMTAwCQkJTUFDSF9HRU5FMTAwCQlHRU5FMTAwCQkJMjA5NQorYXMzNTN4CQkJTUFDSF9BUzM1M1gJCUFTMzUzWAkJCTIwOTYKK3NoZWV2YXBsdWcJCU1BQ0hfU0hFRVZBUExVRwkJU0hFRVZBUExVRwkJMjA5NworYXQ5MXNhbTlnMjAJCU1BQ0hfQVQ5MVNBTTlHMjAJQVQ5MVNBTTlHMjAJCTIwOTgKK212ODhmNjE5Mmd0d19mZQkJTUFDSF9NVjg4RjYxOTJHVFdfRkUJTVY4OEY2MTkyR1RXX0ZFCQkyMDk5CitjYzkyMDAJCQlNQUNIX0NDOTIwMAkJQ0M5MjAwCQkJMjEwMAorc205MjAwCQkJTUFDSF9TTTkyMDAJCVNNOTIwMAkJCTIxMDEKK3RwOTIwMAkJCU1BQ0hfVFA5MjAwCQlUUDkyMDAJCQkyMTAyCitzbmFwcGVyZHYJCU1BQ0hfU05BUFBFUkRWCQlTTkFQUEVSRFYJCTIxMDMKK2F2ZW5nZXJzX2xpdGUJCU1BQ0hfQVZFTkdFUlNfTElURQlBVkVOR0VSU19MSVRFCQkyMTA0CithdmVuZ2Vyc19saXRlMQkJTUFDSF9BVkVOR0VSU19MSVRFMQlBVkVOR0VSU19MSVRFMQkJMjEwNQorb21hcDNheG9uCQlNQUNIX09NQVAzQVhPTgkJT01BUDNBWE9OCQkyMTA2CittYTh4eAkJCU1BQ0hfTUE4WFgJCU1BOFhYCQkJMjEwNworbXAyMDFlawkJCU1BQ0hfTVAyMDFFSwkJTVAyMDFFSwkJCTIxMDgKK2RhdmluY2lfdHV4CQlNQUNIX0RBVklOQ0lfVFVYCURBVklOQ0lfVFVYCQkyMTA5CittcGExNjAwCQkJTUFDSF9NUEExNjAwCQlNUEExNjAwCQkJMjExMAorcGVsY29fdHJveQkJTUFDSF9QRUxDT19UUk9ZCQlQRUxDT19UUk9ZCQkyMTExCituc2I2NjcJCQlNQUNIX05TQjY2NwkJTlNCNjY3CQkJMjExMgorcm92ZXJzNV80bXBpeAkJTUFDSF9ST1ZFUlM1XzRNUElYCVJPVkVSUzVfNE1QSVgJCTIxMTMKK3R3b2NvbQkJCU1BQ0hfVFdPQ09NCQlUV09DT00JCQkyMTE0Cit1YmlzeXNfcDlfcmN1M3IyCU1BQ0hfVUJJU1lTX1A5X1JDVTNSMglVQklTWVNfUDlfUkNVM1IyCTIxMTUKK2hlcm9fZXNwcmVzc28JCU1BQ0hfSEVST19FU1BSRVNTTwlIRVJPX0VTUFJFU1NPCQkyMTE2CithZmV1c2IJCQlNQUNIX0FGRVVTQgkJQUZFVVNCCQkJMjExNwordDgzMAkJCU1BQ0hfVDgzMAkJVDgzMAkJCTIxMTgKK3NwZDgwMjBfY2MJCU1BQ0hfU1BEODAyMF9DQwkJU1BEODAyMF9DQwkJMjExOQorb21fM2Q3awkJCU1BQ0hfT01fM0Q3SwkJT01fM0Q3SwkJCTIxMjAKK3BpY29jb20yCQlNQUNIX1BJQ09DT00yCQlQSUNPQ09NMgkJMjEyMQordXdnNG14MjcJCU1BQ0hfVVdHNE1YMjcJCVVXRzRNWDI3CQkyMTIyCit1d2c0bXgzMQkJTUFDSF9VV0c0TVgzMQkJVVdHNE1YMzEJCTIxMjMKK2NoZXJyeQkJCU1BQ0hfQ0hFUlJZCQlDSEVSUlkJCQkyMTI0CitteDUxX2JhYmJhZ2UJCU1BQ0hfTVg1MV9CQUJCQUdFCU1YNTFfQkFCQkFHRQkJMjEyNQorczNjMjQ0MHR1cmtpeWUJCU1BQ0hfUzNDMjQ0MFRVUktJWUUJUzNDMjQ0MFRVUktJWUUJCTIxMjYKK3R4MzcJCQlNQUNIX1RYMzcJCVRYMzcJCQkyMTI3CitzYmMyODAwXzlnMjAJCU1BQ0hfU0JDMjgwMF85RzIwCVNCQzI4MDBfOUcyMAkJMjEyOAorYmVuemdsYgkJCU1BQ0hfQkVOWkdMQgkJQkVOWkdMQgkJCTIxMjkKK2Jlbnp0ZAkJCU1BQ0hfQkVOWlRECQlCRU5aVEQJCQkyMTMwCitjYXJ0ZXNpb19wbHVzCQlNQUNIX0NBUlRFU0lPX1BMVVMJQ0FSVEVTSU9fUExVUwkJMjEzMQorc29scmFkX2cyMAkJTUFDSF9TT0xSQURfRzIwCQlTT0xSQURfRzIwCQkyMTMyCitteDI3d2FsbGFjZQkJTUFDSF9NWDI3V0FMTEFDRQlNWDI3V0FMTEFDRQkJMjEzMworZm16d2VibW9kdWwJCU1BQ0hfRk1aV0VCTU9EVUwJRk1aV0VCTU9EVUwJCTIxMzQKK3JkNzh4MDBfbWFzYQkJTUFDSF9SRDc4WDAwX01BU0EJUkQ3OFgwMF9NQVNBCQkyMTM1CitzbWFsbG9nZ2VyCQlNQUNIX1NNQUxMT0dHRVIJCVNNQUxMT0dHRVIJCTIxMzYKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCBiMTg5NjgwLi4wNWZlMzA1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC0xODEsNyArMTgxLDcgQEAKIGNvbmZpZyBRVUlDS0xJU1QKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBIQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCitjb25maWcgSEFWRV9BUkNIX0JPT1RNRU0KIAlkZWZfYm9vbCBuCiAKIGNvbmZpZyBBUkNIX0hBVkVfTUVNT1JZX1BSRVNFTlQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYwppbmRleCBhOThjNmRkLi41NTliYmNiMCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lzcDExNnguaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL3BvcnRtdXguaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDM1ODYzZjIuLjA0Yzg2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGExNGFhNWIuLjE0Y2M3MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC00LDcgKzQsNyBAQAogI2lmbmRlZiBfX0FTTV9BVlIzMl9TV0FCX0gKICNkZWZpbmUgX19BU01fQVZSMzJfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBlZDA5MjM5Li4yNDViMmVlMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTIzMCwxMCArMjMwLDEwIEBACiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCiAJCSIxOglsZC4iIHN1ZmZpeCAiCSUxLCAlMwkJCVxuIglcCiAJCSIyOgkJCQkJCVxuIglcCi0JCSIJLnNlY3Rpb24gLmZpeHVwLCBcImF4XCIJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDEJCQkJXG4iCVwKIAkJIjM6CW1vdgklMCwgJTQJCQkJXG4iCVwKIAkJIglyam1wCTJiCQkJCVxuIglcCi0JCSIJLnByZXZpb3VzCQkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMAkJCQlcbiIJXAogCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsIFwiYVwiCQlcbiIJXAogCQkiCS5sb25nCTFiLCAzYgkJCQlcbiIJXAogCQkiCS5wcmV2aW91cwkJCQlcbiIJXApAQCAtMjk1LDEwICsyOTUsMTAgQEAKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKIAkJIjE6CXN0LiIgc3VmZml4ICIJJTEsICUzCQkJXG4iCVwKIAkJIjI6CQkJCQkJXG4iCVwKLQkJIgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMQkJCQlcbiIJXAogCQkiMzoJbW92CSUwLCAlNAkJCQlcbiIJXAogCQkiCXJqbXAJMmIJCQkJXG4iCVwKLQkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAwCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIJCVxuIglcCiAJCSIJLmxvbmcJMWIsIDNiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCmluZGV4IDMzZDQ5MzcuLjAwOWE4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCkBAIC0xNTAsMTAgKzE1MCwxMCBAQAogCXRsYm1pc3NfcmVzdG9yZQogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX3BhZ2VfZmF1bHQKKwljYWxsCWRvX3BhZ2VfZmF1bHQKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTIKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAJLmdsb2JhbCByZXRfZnJvbV9mb3JrCiByZXRfZnJvbV9mb3JrOgotCXJjYWxsICAgc2NoZWR1bGVfdGFpbAorCWNhbGwgICBzY2hlZHVsZV90YWlsCiAKIAkvKiBjaGVjayBmb3Igc3lzY2FsbCB0cmFjaW5nICovCiAJZ2V0X3RocmVhZF9pbmZvIHIwCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogc3lzY2FsbF90cmFjZV9lbnRlcjoKIAlwdXNobQlyOC1yMTIKLQlyY2FsbAlzeXNjYWxsX3RyYWNlCisJY2FsbAlzeXNjYWxsX3RyYWNlCiAJcG9wbQlyOC1yMTIKIAlyam1wCXN5c2NhbGxfdHJhY2VfY29udAogCkBAIC0yNjksMTQgKzI2OSwxNCBAQAogCWJsZAlyMSwgVElGX1NZU0NBTExfVFJBQ0UKIAlicmNjCTFmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzeXNjYWxsX3RyYWNlCisJY2FsbAlzeXNjYWxsX3RyYWNlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAKIDE6CWJsZAlyMSwgVElGX05FRURfUkVTQ0hFRAogCWJyY2MJMmYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXNjaGVkdWxlCisJY2FsbAlzY2hlZHVsZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJMWIKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgc3AKIAltb3YJcjExLCByMAotCXJjYWxsCWRvX25vdGlmeV9yZXN1bWUKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCTFiCkBAIC0zOTQsNyArMzk0LDcgQEAKIAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19jcml0aWNhbF9leGNlcHRpb24KKwljYWxsCWRvX2NyaXRpY2FsX2V4Y2VwdGlvbgogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCiBiYWRfcmV0dXJuOgpAQCAtNDA3LDE4ICs0MDcsMTggQEAKIGRvX2J1c19lcnJvcl93cml0ZToKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1vdglyMTEsIDEKIAlyam1wCTFmCiAKIGRvX2J1c19lcnJvcl9yZWFkOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbW92CXIxMSwgMAogMToJbWZzcglyMTIsIFNZU1JFR19CRUFSCiAJbW92CXIxMCwgc3AKLQlyY2FsbAlkb19idXNfZXJyb3IKKwljYWxsCWRvX2J1c19lcnJvcgogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMQpAQCAtNDMzLDcgKzQzMyw3IEBACiAxOglwdXNobQlyOCwgcjkJLyogUEMgYW5kIFNSICovCiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX25taQorCWNhbGwJZG9fbm1pCiAJcG9wbQlyOC1yOQogCW10c3IJU1lTUkVHX1JBUl9OTUksIHI4CiAJdHN0CXIwLCByMApAQCAtNDU3LDI5ICs0NTcsMjkgQEAKIGhhbmRsZV9hZGRyZXNzX2ZhdWx0OgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2FkZHJlc3NfZXhjZXB0aW9uCisJY2FsbAlkb19hZGRyZXNzX2V4Y2VwdGlvbgogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGhhbmRsZV9wcm90ZWN0aW9uX2ZhdWx0OgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX3BhZ2VfZmF1bHQKKwljYWxsCWRvX3BhZ2VfZmF1bHQKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTEKIGRvX2lsbGVnYWxfb3Bjb2RlX2xsOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2lsbGVnYWxfb3Bjb2RlCisJY2FsbAlkb19pbGxlZ2FsX29wY29kZQogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGRvX2R0bGJfbW9kaWZpZWQ6CkBAIC01MTMsMTEgKzUxMywxMSBAQAogZG9fZnBlX2xsOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCAyNgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fZnBlCisJY2FsbAlkb19mcGUKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiByZXRfZnJvbV9leGNlcHRpb246CkBAIC01NTMsNyArNTUzLDcgQEAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJsZAlyNCwgU1lTUkVHX0dNX09GRlNFVAogCWJyY3MJMWYKLQlyY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQorCWNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKIDE6CiAjZW5kaWYKIApAQCAtNTgyLDcgKzU4Miw3IEBACiAJYmxkCXIxLCBUSUZfTkVFRF9SRVNDSEVECiAJYnJjYwkxZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc2NoZWR1bGUKKwljYWxsCXNjaGVkdWxlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAlmYXVsdF9leGl0X3dvcmsKQEAgLTU5Myw3ICs1OTMsNyBAQAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgc3AKIAltb3YJcjExLCByMAotCXJjYWxsCWRvX25vdGlmeV9yZXN1bWUKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCWZhdWx0X2V4aXRfd29yawpAQCAtNjE2LDEwICs2MTYsMTAgQEAKIAogLkxkZWJ1Z19maXh1cF9jb250OgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCXJjYWxsCXRyYWNlX2hhcmRpcnFzX29mZgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCiAjZW5kaWYKIAltb3YJcjEyLCBzcAotCXJjYWxsCWRvX2RlYnVnCisJY2FsbAlkb19kZWJ1ZwogCW1vdglzcCwgcjEyCiAKIAlsZGRzcAlyMiwgc3BbUkVHX1NSXQpAQCAtNjQzLDcgKzY0Myw3IEBACiAJbXRzcglTWVNSRUdfUlNSX0RCRywgcjExCiAJbXRzcglTWVNSRUdfUkFSX0RCRywgcjEwCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAxOgogI2VuZGlmCiAJbGRtdHMJc3ArKywgcjAtbHIKQEAgLTY3Niw3ICs2NzYsNyBAQAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCWJsZAlyMTEsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNjCTFmCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAxOgogI2VuZGlmCiAJbWZzcglyMiwgU1lTUkVHX1NSCkBAIC03NDcsNyArNzQ3LDcgQEAKIAltb3YJcjExLCBzcAogCW1vdglyMTIsIFxsZXZlbAogCi0JcmNhbGwJZG9fSVJRCisJY2FsbAlkb19JUlEKIAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmZleHR1CXI0LCByNCwgU1lTUkVHX00wX09GRlNFVCwgMwpAQCAtNzY3LDcgKzc2Nyw3IEBACiAKIDE6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAjZW5kaWYKIAlwb3BtCXI4LXI5CiAJbXRzcglyYXJfaW50XGxldmVsLCByOApAQCAtODA3LDcgKzgwNyw3IEBACiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAlibGQJcjQsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNzCTFiCi0JcmNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKKwljYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCiAjZW5kaWYKIAlyam1wCTFiCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2lycS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKaW5kZXggYThlNzY3ZC4uOWY1NzIyMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSA/IDogIi0iKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUwppbmRleCA2NzMxNzhlLi5mNzI0NGNkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCkBAIC02MSw3ICs2MSw3IEBACiBfX3N5c19tbWFwMjoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19tbWFwMgorCWNhbGwJc3lzX21tYXAyCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtNzAsNyArNzAsNyBAQAogX19zeXNfc2VuZHRvOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3NlbmR0bworCWNhbGwJc3lzX3NlbmR0bwogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTc5LDcgKzc5LDcgQEAKIF9fc3lzX3JlY3Zmcm9tOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3JlY3Zmcm9tCisJY2FsbAlzeXNfcmVjdmZyb20KIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC04OCw3ICs4OCw3IEBACiBfX3N5c19wc2VsZWN0NjoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19wc2VsZWN0NgorCWNhbGwJc3lzX3BzZWxlY3Q2CiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtOTcsNyArOTcsNyBAQAogX19zeXNfc3BsaWNlOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3NwbGljZQorCWNhbGwJc3lzX3NwbGljZQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogX19zeXNfZXBvbGxfcHdhaXQ6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfZXBvbGxfcHdhaXQKKwljYWxsCXN5c19lcG9sbF9wd2FpdAogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTExNSw2ICsxMTUsNiBAQAogX19zeXNfc3luY19maWxlX3JhbmdlOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3N5bmNfZmlsZV9yYW5nZQorCWNhbGwJc3lzX3N5bmNfZmlsZV9yYW5nZQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUyBiL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCmluZGV4IDY1Y2UxMWEuLmU0NmY0NzI0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUworKysgYi9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUwpAQCAtNDgsNyArNDgsNyBAQAogCWxkZHBjCWxyLCBfdGFza19zaXplCiAJc3ViCXIxMSwgbHIsIHIxMgogCW1vdglyOSwgcjExCi0JcmNhbGwJX19zdHJubGVuX3VzZXIKKwljYWxsCV9fc3Rybmxlbl91c2VyCiAJY3AudwlyMTIsIHI5CiAJYnJndAkxZgogCXBvcG0JcGMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDc5N2MwYzEuLmM5NGM3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMywxNCArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0jZGVmaW5lIFBFUkNQVV9NT0RVTEVfUkVTRVJWRSA4MTkyCi0jZWxzZQotI2RlZmluZSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgMAotI2VuZGlmCi0KLSNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NIFwKLQkoQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgU01QX0NBQ0hFX0JZVEVTKSArIFwKLQkgUEVSQ1BVX01PRFVMRV9SRVNFUlZFKQotCiAjZW5kaWYJLyogX19BUkNIX0JMQUNLRklOX1BFUkNQVV9fICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAyY2E3MDJlLi5mYWM3ZmU5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTUzLDQgKzUzLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZgkJCQkvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDY5YTA1MWIuLjY0MDNhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQkxBQ0tGSU5fU1dBQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCmluZGV4IDdmZDEyNjUuLjQwMWJkMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKQEAgLTcwLDYgKzcwLDExIEBACiAjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworLyogV2UgYXJlIG5vdCBhbGxvY2F0aW5nIGEgdmFyaWFibGUtc2l6ZWQgYmFkX2lycV9kZXNjLmFmZmluaXR5ICovCisjZXJyb3IgIkJsYWNrZmluIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19DUFVNQVNLX09GRlNUQUNLLiIKKyNlbmRpZgorCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKIAlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CkBAIC04Myw3ICs4OCw3IEBACiAJCQlnb3RvIHNraXA7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA5ZGYwY2E4Li5kNWNmNzQwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Niw2ICs1Niw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDJkZmFjOGMuLjdmNjQyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKaW5kZXggNzNhYmFlNy4uYWYzZTgyNCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYwpAQCAtNzQsNyArNzQsNyBAQAogCQlpZiAoYWN0aW9uKSB7CiAJCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJCXNlcV9wcmludGYocCwgIiAlMTBzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSA/IDogIi0iKTsKIAkJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkYTI1MjBkLi42MDI1MThhNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBjMTA4ZjM5Li4zOWFiYmY1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0g4MzAwX1NXQUJfSAogI2RlZmluZSBfSDgzMDBfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwppbmRleCBlZjRmMDA0Li43NGY4ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKKwlpbnQgaSA9ICoobG9mZl90ICopIHY7CiAJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKaW5kZXggYTQ2ZjgzOS4uYWY5NDA1YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJZGF0YTggc3lzX25pX3N5c2NhbGwKIAlkYXRhOCBzeXNfdW1hc2sJCSAgLyogNjAgKi8KIAlkYXRhOCBzeXNfY2hyb290Ci0JZGF0YTggc3lzX3VzdGF0CisJZGF0YTggY29tcGF0X3N5c191c3RhdAogCWRhdGE4IHN5c19kdXAyCiAJZGF0YTggc3lzX2dldHBwaWQKIAlkYXRhOCBzeXNfZ2V0cGdycAkgIC8qIDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggMzg1OTU1OC4uMGMyNjE1NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtNiw4ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KIC8qIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlcjogKi8KICNkZWZpbmUgRlBTUl9UUkFQX1ZECSgxIDw8IDApCS8qIGludmFsaWQgb3AgdHJhcCBkaXNhYmxlZCAqLwogI2RlZmluZSBGUFNSX1RSQVBfREQJKDEgPDwgMSkJLyogZGVub3JtYWwgdHJhcCBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmgKaW5kZXggMGY1YjU1OS4uYzJjNWZkOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMgU3VyZXNoIFNpZGRoYSA8c3VyZXNoLmIuc2lkZGhhQGludGVsLmNvbT4KICAqLwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKiBkZWZpbmUgdGhpcyBtYWNybyB0byBnZXQgc29tZSBhc20gc3RtdHMgaW5jbHVkZWQgaW4gJ2MnIGZpbGVzICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAppbmRleCBhM2U0NGE1Li5jNDc4MzBlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKiBpbmNsdWRlIGNvbXBpbGVyIHNwZWNpZmljIGludHJpbnNpY3MgKi8KICNpbmNsdWRlIDxhc20vaWE2NHJlZ3MuaD4KICNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggYmZhODZiNi4uMThhN2U0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMjEsOCArMjEsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qIFNlbGVjdCB4ODYgc3BlY2lmaWMgZmVhdHVyZXMgaW4gPGxpbnV4L2t2bS5oPiAqLwpAQCAtMTY2LDcgKzE2NSw0MCBAQAogCXVuc2lnbmVkIGxvbmcgIHZjcHVpZFs1XTsKIAl1bnNpZ25lZCBsb25nICB2cHNyOwogCXVuc2lnbmVkIGxvbmcgIHZwcjsKLQl1bnNpZ25lZCBsb25nICB2Y3JbMTI4XTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgIHZjclsxMjhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBkY3I7CisJCQl1bnNpZ25lZCBsb25nIGl0bTsKKwkJCXVuc2lnbmVkIGxvbmcgaXZhOworCQkJdW5zaWduZWQgbG9uZyByc3YxWzVdOworCQkJdW5zaWduZWQgbG9uZyBwdGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjJbN107CisJCQl1bnNpZ25lZCBsb25nIGlwc3I7CisJCQl1bnNpZ25lZCBsb25nIGlzcjsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MzsKKwkJCXVuc2lnbmVkIGxvbmcgaWlwOworCQkJdW5zaWduZWQgbG9uZyBpZmE7CisJCQl1bnNpZ25lZCBsb25nIGl0aXI7CisJCQl1bnNpZ25lZCBsb25nIGlpcGE7CisJCQl1bnNpZ25lZCBsb25nIGlmczsKKwkJCXVuc2lnbmVkIGxvbmcgaWltOworCQkJdW5zaWduZWQgbG9uZyBpaGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjRbMzhdOworCQkJdW5zaWduZWQgbG9uZyBsaWQ7CisJCQl1bnNpZ25lZCBsb25nIGl2cjsKKwkJCXVuc2lnbmVkIGxvbmcgdHByOworCQkJdW5zaWduZWQgbG9uZyBlb2k7CisJCQl1bnNpZ25lZCBsb25nIGlycls0XTsKKwkJCXVuc2lnbmVkIGxvbmcgaXR2OworCQkJdW5zaWduZWQgbG9uZyBwbXY7CisJCQl1bnNpZ25lZCBsb25nIGNtY3Y7CisJCQl1bnNpZ25lZCBsb25nIHJzdjVbNV07CisJCQl1bnNpZ25lZCBsb25nIGxycjA7CisJCQl1bnNpZ25lZCBsb25nIGxycjE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjZbNDZdOworCQl9OworCX07CiB9OwogCiBzdHJ1Y3Qga3ZtX3JlZ3MgewpAQCAtMjE0LDQgKzI0NiwxOCBAQAogc3RydWN0IGt2bV9mcHUgewogfTsKIAorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NISUZUCTE2CisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRQkoMVVMIDw8IEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0hJRlQpCisKK3N0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIHsKKwl1bnNpZ25lZCBjaGFyIHN0YWNrW0tWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCB7Cit9OworCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzNDg2NjM2Ni4uNDU0MjY1MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTExMiw3ICsxMTIsMTEgQEAKICNkZWZpbmUgVkNQVV9TVFJVQ1RfU0hJRlQJMTYKICNkZWZpbmUgVkNQVV9TVFJVQ1RfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IFZDUFVfU1RSVUNUX1NISUZUKQogCi0jZGVmaW5lIEtWTV9TVEtfT0ZGU0VUCQlWQ1BVX1NUUlVDVF9TSVpFCisvKgorICogVGhpcyBtdXN0IG1hdGNoIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfe1NISUZULFNJWkV9IGFyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaAorICovCisjZGVmaW5lIEtWTV9TVEtfU0hJRlQJCTE2CisjZGVmaW5lIEtWTV9TVEtfT0ZGU0VUCQkoX19JQTY0X1VMX0NPTlNUKDEpPDwgS1ZNX1NUS19TSElGVCkKIAogI2RlZmluZSBLVk1fVk1fU1RSVUNUX1NISUZUCTE5CiAjZGVmaW5lIEtWTV9WTV9TVFJVQ1RfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IEtWTV9WTV9TVFJVQ1RfU0hJRlQpCkBAIC0xNTMsMTAgKzE1NywxMCBAQAogCXN0cnVjdCBrdm1fdmNwdV9kYXRhIHZjcHVfZGF0YVtLVk1fTUFYX1ZDUFVTXTsKIH07CiAKLSNkZWZpbmUgVkNQVV9CQVNFKG4pCUtWTV9WTV9EQVRBX0JBU0UgKyBcCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCB2Y3B1X2RhdGFbbl0pCi0jZGVmaW5lIFZNX0JBU0UJCUtWTV9WTV9EQVRBX0JBU0UgKyBcCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fdm1fc3RydWN0KQorI2RlZmluZSBWQ1BVX0JBU0UobikJKEtWTV9WTV9EQVRBX0JBU0UgKyBcCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCB2Y3B1X2RhdGFbbl0pKQorI2RlZmluZSBLVk1fVk1fQkFTRQkoS1ZNX1ZNX0RBVEFfQkFTRSArIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV92bV9zdHJ1Y3QpKQogI2RlZmluZSBLVk1fTUVNX0RJUlRZX0xPR19CQVNFCUtWTV9WTV9EQVRBX0JBU0UgKyBcCiAJCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fbWVtX2RpcnR5X2xvZykKIApAQCAtMjM1LDggKzIzOSw2IEBACiAKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7Ci1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnewotfTsKIAogc3RydWN0IGt2bV9tbWlvX3JlcSB7CiAJdWludDY0X3QgYWRkcjsgICAgICAgICAgLyogIHBoeXNpY2FsIGFkZHJlc3MJCSovCkBAIC00NjIsNiArNDY0LDggQEAKIAl1bnNpZ25lZCBsb25nCW1ldGFwaHlzaWNhbF9ycjQ7CiAJdW5zaWduZWQgbG9uZwl2bW1faW5pdF9ycjsKIAorCWludAkJb25saW5lX3ZjcHVzOworCiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV92bV9zdGF0IHN0YXQ7CiAJc3RydWN0IGt2bV9zYWxfZGF0YSByZHZfc2FsX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYzEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9JQTY0X01TSV9ERUZfSAorI2RlZmluZSBfSUE2NF9NU0lfREVGX0gKKworLyoKKyAqIFNoaWZ0cyBmb3IgQVBJQy1iYXNlZCBkYXRhCisgKi8KKworI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX1NISUZUCTAKKyNkZWZpbmUJICAgIE1TSV9EQVRBX1ZFQ1RPUih2KQkJKCgodTgpdikgPDwgTVNJX0RBVEFfVkVDVE9SX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX01BU0sJMHhmZmZmZmYwMAorCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUCTgKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkJKDEgPDwgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCkKKworI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfU0hJRlQJMTQKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0xFVkVMX0RFQVNTRVJUCSgwIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfQVNTRVJUCSgxIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX1NISUZUCTE1CisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX0VER0UJKDAgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwJKDEgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKworLyoKKyAqIFNoaWZ0L21hc2sgZmllbGRzIGZvciBBUElDLWJhc2VkIGJ1cyBhZGRyZXNzCisgKi8KKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9TSElGVAk0CisjZGVmaW5lICAgICBNU0lfQUREUl9IRUFERVIJCTB4ZmVlMDAwMDAKKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9NQVNLCTB4ZmZmMDAwMGYKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdSkJKChjcHUpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVAkyCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX01PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCisjZGVmaW5lCSAgICBNU0lfQUREUl9ERVNUX01PREVfTE9HSUMJKDEgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVAkzCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9DUFUJKDAgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkJKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisKKyNlbmRpZi8qIF9JQTY0X01TSV9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDc3ZjMwYjYuLjMwY2Y0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTI3LDEyICsyNywxMiBAQAogCiAjZWxzZSAvKiAhIFNNUCAqLwogCi0jZGVmaW5lIFBFUl9DUFVfQVRUUklCVVRFUwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGVyY3B1IikpKQotCiAjZGVmaW5lIHBlcl9jcHVfaW5pdCgpCQkJCShfX3BoeXNfcGVyX2NwdV9zdGFydCkKIAogI2VuZGlmCS8qIFNNUCAqLwogCisjZGVmaW5lIFBFUl9DUFVfQkFTRV9TRUNUSU9OICIuZGF0YS5wZXJjcHUiCisKIC8qCiAgKiBCZSBleHRyZW1lbHkgY2FyZWZ1bCB3aGVuIHRha2luZyB0aGUgYWRkcmVzcyBvZiB0aGlzIHZhcmlhYmxlISAgRHVlIHRvIHZpcnR1YWwKICAqIHJlbWFwcGluZywgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNhbm9uaWNhbCBhZGRyZXNzIHJldHVybmVkIGJ5IF9fZ2V0X2NwdV92YXIodmFyKSEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkNWVmMGFhLi43NDU0MjEyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02Myw0ICs2Myw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2YWE1OGI2Li5jODlhOGNiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTYsNyArNiw3IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDMyZjNhZjEuLjMxOTNmNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC04NCw3ICs4NCw3IEBACiAJLmNoaWxkCQkJPSBOVUxMLAkJCVwKIAkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKIAkubWluX2ludGVydmFsCQk9IDgsCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gOCoobWluKG51bV9vbmxpbmVfY3B1cygpLCAzMikpLCBcCisJLm1heF9pbnRlcnZhbAkJPSA4KihtaW4obnVtX29ubGluZV9jcHVzKCksIDMyVSkpLCBcCiAJLmJ1c3lfZmFjdG9yCQk9IDY0LAkJCVwKIAkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAogCS5jYWNoZV9uaWNlX3RyaWVzCT0gMiwJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjViZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXYuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9BU01fSUE2NF9VVl9VVl9ICisjZGVmaW5lIF9BU01fSUE2NF9VVl9VVl9ICisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NpbXVsYXRvci5oPgorCitzdGF0aWMgaW5saW5lIGludCBpc191dl9zeXN0ZW0odm9pZCkKK3sKKwkvKiB0ZW1wb3Jhcnkgc3VwcG9ydCBmb3IgcnVubmluZyBvbiBoYXJkd2FyZSBzaW11bGF0b3IgKi8KKwlyZXR1cm4gSVNfTUVEVVNBKCkgfHwgaWE2NF9wbGF0Zm9ybV9pcygidXYiKTsKK30KKworI2VuZGlmCS8qIF9BU01fSUE2NF9VVl9VVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IGQ1NDE2NzEuLmJkZWYyY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC0xOTksNiArMTk5LDEwIEBACiAJcmV0dXJuIF9fdmEocGh5c19hZGRyKTsKIH0KIAordm9pZCBfX2luaXQgX19hY3BpX3VubWFwX3RhYmxlKGNoYXIgKm1hcCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3QtdGltZSBUYWJsZSBQYXJzaW5nCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwppbmRleCBlMTMxMjUwLi4xNjZlMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJaWYgKGlvc2FwaWNfaW50cl9pbmZvW2lycV0uY291bnQgPT0gMCkgewogI2lmZGVmIENPTkZJR19TTVAKIAkJLyogQ2xlYXIgYWZmaW5pdHkgKi8KLQkJY3B1c19zZXRhbGwoaWRlc2MtPmFmZmluaXR5KTsKKwkJY3B1bWFza19zZXRhbGwoaWRlc2MtPmFmZmluaXR5KTsKICNlbmRpZgogCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uICovCiAJCWlvc2FwaWNfaW50cl9pbmZvW2lycV0uZGVzdCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwppbmRleCBhNThmNjRjLi43NDI5NzUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikgewotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKIAkJfQogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CkBAIC0xMDMsNyArMTAzLDcgQEAKIHZvaWQgc2V0X2lycV9hZmZpbml0eV9pbmZvICh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgaHdpZCwgaW50IHJlZGlyKQogewogCWlmIChpcnEgPCBOUl9JUlFTKSB7Ci0JCWNwdW1hc2tfY29weSgmaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwKKwkJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksCiAJCQkgICAgIGNwdW1hc2tfb2YoY3B1X2xvZ2ljYWxfaWQoaHdpZCkpKTsKIAkJaXJxX3JlZGlyW2lycV0gPSAoY2hhcikgKHJlZGlyICYgMHhmZik7CiAJfQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCWlmIChkZXNjLT5zdGF0dXMgPT0gSVJRX1BFUl9DUFUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoY3B1bWFza19hbnlfYW5kKCZpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVfb25saW5lX21hc2spCisJCWlmIChjcHVtYXNrX2FueV9hbmQoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKQogCQkgICAgPj0gbnJfY3B1X2lkcykgewogCQkJLyoKIAkJCSAqIFNhdmUgaXQgZm9yIHBoYXNlIDIgcHJvY2Vzc2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCmluZGV4IDI4ZDNkNDguLmFjYzRkMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKQEAgLTQ5MywxNCArNDkzLDE1IEBACiAJc2F2ZWRfdHByID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX1RQUik7CiAJaWE2NF9zcmx6X2QoKTsKIAl3aGlsZSAodmVjdG9yICE9IElBNjRfU1BVUklPVVNfSU5UX1ZFQ1RPUikgeworCQlpbnQgaXJxID0gbG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCiAJCWlmICh1bmxpa2VseShJU19MT0NBTF9UTEJfRkxVU0godmVjdG9yKSkpIHsKIAkJCXNtcF9sb2NhbF9mbHVzaF90bGIoKTsKLQkJCWtzdGF0X3RoaXNfY3B1LmlycXNbdmVjdG9yXSsrOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KElTX1JFU0NIRURVTEUodmVjdG9yKSkpCi0JCQlrc3RhdF90aGlzX2NwdS5pcnFzW3ZlY3Rvcl0rKzsKLQkJZWxzZSB7Ci0JCQlpbnQgaXJxID0gbG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpOwotCisJCQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKKwkJfSBlbHNlIGlmICh1bmxpa2VseShJU19SRVNDSEVEVUxFKHZlY3RvcikpKSB7CisJCQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKKwkJfSBlbHNlIHsKIAkJCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9UUFIsIHZlY3Rvcik7CiAJCQlpYTY0X3NybHpfZCgpOwogCkBAIC01NDMsMjIgKzU0NCwyNCBAQAogCiAJdmVjdG9yID0gaWE2NF9nZXRfaXZyKCk7CiAKLQkgaXJxX2VudGVyKCk7Ci0JIHNhdmVkX3RwciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9UUFIpOwotCSBpYTY0X3NybHpfZCgpOworCWlycV9lbnRlcigpOworCXNhdmVkX3RwciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9UUFIpOworCWlhNjRfc3Jsel9kKCk7CiAKIAkgLyoKIAkgICogUGVyZm9ybSBub3JtYWwgaW50ZXJydXB0IHN0eWxlIHByb2Nlc3NpbmcKIAkgICovCiAJd2hpbGUgKHZlY3RvciAhPSBJQTY0X1NQVVJJT1VTX0lOVF9WRUNUT1IpIHsKKwkJaW50IGlycSA9IGxvY2FsX3ZlY3Rvcl90b19pcnEodmVjdG9yKTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwogCQlpZiAodW5saWtlbHkoSVNfTE9DQUxfVExCX0ZMVVNIKHZlY3RvcikpKSB7CiAJCQlzbXBfbG9jYWxfZmx1c2hfdGxiKCk7Ci0JCQlrc3RhdF90aGlzX2NwdS5pcnFzW3ZlY3Rvcl0rKzsKLQkJfSBlbHNlIGlmICh1bmxpa2VseShJU19SRVNDSEVEVUxFKHZlY3RvcikpKQotCQkJa3N0YXRfdGhpc19jcHUuaXJxc1t2ZWN0b3JdKys7Ci0JCWVsc2UgeworCQkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CisJCX0gZWxzZSBpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkgeworCQkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CisJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MoTlVMTCk7Ci0JCQlpbnQgaXJxID0gbG9jYWxfdmVjdG9yX3RvX2lycSh2ZWN0b3IpOwogCiAJCQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfVFBSLCB2ZWN0b3IpOwogCQkJaWE2NF9zcmx6X2QoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwppbmRleCA4OTAzMzkzLi4yYjE1ZTIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCkBAIC03LDQ0ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0vKgotICogU2hpZnRzIGZvciBBUElDLWJhc2VkIGRhdGEKLSAqLwotCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9TSElGVAkJMAotI2RlZmluZQkgICAgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh1OCl2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLCQkweGZmZmZmZjAwCi0KLSNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQJCTgKLSNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJCSgxIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotCi0jZGVmaW5lIE1TSV9EQVRBX0xFVkVMX1NISUZUCQkxNAotI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfREVBU1NFUlQJKDAgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9BU1NFUlQJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfVFJJR0dFUl9TSElGVAkJMTUKLSNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkoMCA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9MRVZFTAkoMSA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotCi0vKgotICogU2hpZnQvbWFzayBmaWVsZHMgZm9yIEFQSUMtYmFzZWQgYnVzIGFkZHJlc3MKLSAqLwotCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQk0Ci0jZGVmaW5lIE1TSV9BRERSX0hFQURFUgkJCTB4ZmVlMDAwMDAKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUSURfTUFTSwkJMHhmZmYwMDAwZgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVElEX0NQVShjcHUpCSgoY3B1KSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCkKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUTU9ERV9TSElGVAkJMgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVE1PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUTU9ERV9TSElGVCkKLSNkZWZpbmUJICAgIE1TSV9BRERSX0RFU1RNT0RFX0xPR0lDCSgxIDw8IE1TSV9BRERSX0RFU1RNT0RFX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSQkoMSA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAJaWE2NF9tc2lfY2hpcDsKIApAQCAtNjUsOCArMjgsOCBAQAogCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJYWRkciA9IG1zZy5hZGRyZXNzX2xvOwotCWFkZHIgJj0gTVNJX0FERFJfREVTVElEX01BU0s7Ci0JYWRkciB8PSBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKKwlhZGRyICY9IE1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwlhZGRyIHw9IE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKIAltc2cuYWRkcmVzc19sbyA9IGFkZHI7CiAKIAlkYXRhID0gbXNnLmRhdGE7CkBAIC03NSw3ICszOCw3IEBACiAJbXNnLmRhdGEgPSBkYXRhOwogCiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCWNwdW1hc2tfY29weShpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApAQCAtOTgsOSArNjEsOSBAQAogCW1zZy5hZGRyZXNzX2hpID0gMDsKIAltc2cuYWRkcmVzc19sbyA9CiAJCU1TSV9BRERSX0hFQURFUiB8Ci0JCU1TSV9BRERSX0RFU1RNT0RFX1BIWVMgfAorCQlNU0lfQUREUl9ERVNUX01PREVfUEhZUyB8CiAJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVSB8Ci0JCU1TSV9BRERSX0RFU1RJRF9DUFUoZGVzdF9waHlzX2lkKTsKKwkJTVNJX0FERFJfREVTVF9JRF9DUFUoZGVzdF9waHlzX2lkKTsKIAogCW1zZy5kYXRhID0KIAkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKQEAgLTE4MywxMSArMTQ2LDExIEBACiAKIAltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7CiAJbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVElEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVElEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CiAKIAlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqbWFzazsKKwljcHVtYXNrX2NvcHkoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFzayk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCkBAIC0yMTUsOSArMTc4LDkgQEAKIAltc2ctPmFkZHJlc3NfaGkgPSAwOwogCW1zZy0+YWRkcmVzc19sbyA9CiAJCU1TSV9BRERSX0hFQURFUiB8Ci0JCU1TSV9BRERSX0RFU1RNT0RFX1BIWVMgfAorCQlNU0lfQUREUl9ERVNUX01PREVfUEhZUyB8CiAJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVSB8Ci0JCU1TSV9BRERSX0RFU1RJRF9DUFUoZGVzdCk7CisJCU1TSV9BRERSX0RFU1RfSURfQ1BVKGRlc3QpOwogCiAJbXNnLT5kYXRhID0KIAkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKaW5kZXggMGU0OTk3NS4uNWMwZjQwOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKQEAgLTIxOTYsNyArMjE5Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGZtZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBmbWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHBmbWZzX2RlbGV0ZV9kZW50cnksCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTBhN2Q0N2UuLjM3NjVlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIxMywxNiArMjEzLDkgQEAKICAgICAgICAgeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CiAKICAgLyogUGVyLWNwdSBkYXRhOiAqLwotICBwZXJjcHUgOiB7IH0gOnBlcmNwdQogICAuID0gQUxJR04oUEVSQ1BVX1BBR0VfU0laRSk7Ci0gIF9fcGh5c19wZXJfY3B1X3N0YXJ0ID0gLjsKLSAgLmRhdGEucGVyY3B1IFBFUkNQVV9BRERSIDogQVQoX19waHlzX3Blcl9jcHVfc3RhcnQgLSBMT0FEX09GRlNFVCkKLQl7Ci0JCV9fcGVyX2NwdV9zdGFydCA9IC47Ci0JCSooLmRhdGEucGVyY3B1KQotCQkqKC5kYXRhLnBlcmNwdS5zaGFyZWRfYWxpZ25lZCkKLQkJX19wZXJfY3B1X2VuZCA9IC47Ci0JfQorICBQRVJDUFVfVkFERFIoUEVSQ1BVX0FERFIsIDpwZXJjcHUpCisgIF9fcGh5c19wZXJfY3B1X3N0YXJ0ID0gX19wZXJfY3B1X2xvYWQ7CiAgIC4gPSBfX3BoeXNfcGVyX2NwdV9zdGFydCArIFBFUkNQVV9QQUdFX1NJWkU7CS8qIGVuc3VyZSBwZXJjcHUgZGF0YSBmaXRzCiAgIAkJCQkJCSAqIGludG8gcGVyY3B1IHBhZ2Ugc2l6ZQogCQkJCQkJICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL0tjb25maWcgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKaW5kZXggZjgzM2EwYi4uMGEyZDZiOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwpAQCAtNCw2ICs0LDEwIEBACiBjb25maWcgSEFWRV9LVk0KIAlib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgeQorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVwZW5kcyBvbiBIQVZFX0tWTSB8fCBJQTY0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2lycS5oIGIvYXJjaC9pYTY0L2t2bS9pcnEuaAppbmRleCBjNjc4NmU4Li5jMDc4NWE3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2lycS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKQEAgLTIzLDYgKzIzLDggQEAKICNpZm5kZWYgX19JUlFfSAogI2RlZmluZSBfX0lSUV9ICiAKKyNpbmNsdWRlICJsYXBpYy5oIgorCiBzdGF0aWMgaW5saW5lIGludCBpcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggMjhmOTgyMC4uMDc2YjAwZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJc3dpdGNoIChleHQpIHsKIAljYXNlIEtWTV9DQVBfSVJRQ0hJUDoKIAljYXNlIEtWTV9DQVBfTVBfU1RBVEU6Ci0KKwljYXNlIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC0zMTQsNyArMzE0LDcgQEAKIAl1bmlvbiBpYTY0X2xpZCBsaWQ7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoa3ZtLT52Y3B1c1tpXSkgewogCQkJbGlkLnZhbCA9IFZDUFVfTElEKGt2bS0+dmNwdXNbaV0pOwogCQkJaWYgKGxpZC5pZCA9PSBpZCAmJiBsaWQuZWlkID09IGVpZCkKQEAgLTM4OCw3ICszODgsNyBAQAogCiAJY2FsbF9kYXRhLnB0Y19nX2RhdGEgPSBwLT51LnB0Y19nX2RhdGE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0gfHwga3ZtLT52Y3B1c1tpXS0+YXJjaC5tcF9zdGF0ZSA9PQogCQkJCQkJS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQgfHwKIAkJCQkJdmNwdSA9PSBrdm0tPnZjcHVzW2ldKQpAQCAtNzg4LDYgKzc4OCw4IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWt2bV9pbml0X3ZtKGt2bSk7CiAKKwlrdm0tPmFyY2gub25saW5lX3ZjcHVzID0gMDsKKwogCXJldHVybiBrdm07CiAKIH0KQEAgLTkxOSw3ICs5MjEsMTMgQEAKIAkJciA9IGt2bV9pb2FwaWNfaW5pdChrdm0pOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoa3ZtKTsKKwkJaWYgKHIpIHsKKwkJCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWJyZWFrOworCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewogCQlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnFfZXZlbnQ7CiAKQEAgLTkyNywxMCArOTM1LDE3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxX2V2ZW50LCBhcmdwLCBzaXplb2YgaXJxX2V2ZW50KSkKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQkJX19zMzIgc3RhdHVzOwogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAorCQkJc3RhdHVzID0ga3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCiAJCQkJICAgIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCQlpZiAoaW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUykgeworCQkJCWlycV9ldmVudC5zdGF0dXMgPSBzdGF0dXM7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaXJxX2V2ZW50LAorCQkJCQkJCXNpemVvZiBpcnFfZXZlbnQpKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCXIgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMTE0OSw3ICsxMTY0LDcgQEAKIAogCQkvKkluaXRpYWxpemUgaXRjIG9mZnNldCBmb3IgdmNwdXMqLwogCQlpdGNfb2Zmc2V0ID0gMFVMIC0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJdi0+YXJjaC5pdGNfb2Zmc2V0ID0gaXRjX29mZnNldDsKQEAgLTEyODMsNiArMTI5OCw4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlrdm0tPmFyY2gub25saW5lX3ZjcHVzKys7CisKIAlyZXR1cm4gdmNwdTsKIGZhaWw6CiAJcmV0dXJuIEVSUl9QVFIocik7CkBAIC0xMzAzLDggKzEzMjAsOCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE0MjEsNiArMTQzOCwyMyBAQAogCXJldHVybiAwOwogfQogCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrKQoreworCW1lbWNweShzdGFjaywgdmNwdSwgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICBzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2spCit7CisJbWVtY3B5KHZjcHUgKyAxLCAmc3RhY2stPnN0YWNrWzBdICsgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksCisJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykgLSBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7CisKKwl2Y3B1LT5hcmNoLmV4aXRfZGF0YSA9ICgoc3RydWN0IGt2bV92Y3B1ICopc3RhY2spLT5hcmNoLmV4aXRfZGF0YTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAKQEAgLTE0MzAsOSArMTQ2NCw3OCBAQAogCiAKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2sgPSBOVUxMOworCWxvbmcgcjsKKworCXN3aXRjaCAoaW9jdGwpIHsKKwljYXNlIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiB7CisJCXN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIF9fdXNlciAqdXNlcl9zdGFjazsKKwkgICAgICAgIHZvaWQgX191c2VyICpmaXJzdF9wID0gYXJncDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3N0YWNrLCBmaXJzdF9wLCBzaXplb2Yodm9pZCAqKSkpCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfc3RhY2ssCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIktWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiAiCisJCQkgICAgICAgIklsbGVnYWwgdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBzdGFja1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdGFjayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhY2spIHsKKwkJCXIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2sodmNwdSwgc3RhY2spOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9zdGFjaywgc3RhY2ssCisJCQkJIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKQorCQkJZ290byBvdXQ7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0s6IHsKKwkJc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgX191c2VyICp1c2VyX3N0YWNrOworCSAgICAgICAgdm9pZCBfX3VzZXIgKmZpcnN0X3AgPSBhcmdwOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJfc3RhY2ssIGZpcnN0X3AsIHNpemVvZih2b2lkICopKSkKKwkJCWdvdG8gb3V0OworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX3N0YWNrLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSzogIgorCQkJICAgICAgICJJbGxlZ2FsIHVzZXIgYWRkcmVzcyBmb3Igc3RhY2tcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YWNrKSB7CisJCQlyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihzdGFjaywgdXNlcl9zdGFjaywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkKKwkJCWdvdG8gb3V0OworCisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayh2Y3B1LCBzdGFjayk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXIgPSAtRUlOVkFMOworCX0KKworb3V0OgorCWtmcmVlKHN0YWNrKTsKKwlyZXR1cm4gcjsKIH0KIAogaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTE0NzIsNyArMTU3NSw3IEBACiB9CiAKIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAotCQl1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE3MzcsNyArMTg0MCw3IEBACiAJc3RydWN0IGt2bV92Y3B1ICpsdmNwdSA9IGt2bS0+dmNwdXNbMF07CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0pCiAJCQljb250aW51ZTsKIAkJaWYgKGx2Y3B1LT5hcmNoLnh0cCA+IGt2bS0+dmNwdXNbaV0tPmFyY2gueHRwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYyBiL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKaW5kZXggY2I3NjAwYi4uYThhZTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCkBAIC0yMjcsNiArMjI3LDE4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3JlZ2lzdGVyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3JlZ2lzdGVyX2luZm8oaW4xLCAmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9jYWNoZV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIApAQCAtMjY4LDggKzI4MCwxMiBAQAogc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3ZtX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgaW4wLCBpbjEsIGluMiwgaW4zOwogCi0JSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisKKwlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfdm1faW5mbyhpbjEsIGluMiwKKwkJCShwYWxfdGNfaW5mb191X3QgKikmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yOTIsNiArMzA4LDEwOCBAQAogCXZjcHUtPmFyY2gudGltZXJfZmlyZWQgPSAwOwogfQogCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfcGVyZl9tb25faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjMsIHI5OworCXVuc2lnbmVkIGxvbmcgcG1fYnVmZmVyWzE2XTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlzdGF0dXMgPSBpYTY0X3BhbF9wZXJmX21vbl9pbmZvKHBtX2J1ZmZlciwKKwkJCQkocGFsX3BlcmZfbW9uX2luZm9fdV90ICopICZyOSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIlBBTF9QRVJGX01PTl9JTkZPIGZhaWxzIHJldD0lbGRcbiIsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKGluMSkKKwkJCW1lbWNweSgodm9pZCAqKWluMSwgcG1fYnVmZmVyLCBzaXplb2YocG1fYnVmZmVyKSk7CisJCWVsc2UgeworCQkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIkludmFsaWQgcGFyYW1ldGVycyAiCisJCQkJCQkiZm9yIFBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwkJfQorCX0KKwlyZXR1cm4gKHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwpe3N0YXR1cywgcjksIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfaGFsdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHJlcyA9IDEwMDBVTCB8ICgxMDAwVUwgPDwgMTYpIHwgKDEwVUwgPDwgMzIpCisJCQkJCXwgKDFVTCA8PCA2MSkgfCAoMVVMIDw8IDYwKTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlpZiAoaW4xKSB7CisJCW1lbWNweSgodm9pZCAqKWluMSwgJnJlcywgc2l6ZW9mKHJlcykpOworCQlzdGF0dXMgPSAwOworCX0gZWxzZXsKKwkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkciSW52YWxpZCBwYXJhbWV0ZXJzICIKKwkJCQkJImZvciBQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJfQorCisJcmV0dXJuIChzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsKXtzdGF0dXMsIDAsIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfbWVtX2F0dHJpYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyByOTsKKwlsb25nIHN0YXR1czsKKworCXN0YXR1cyA9IGlhNjRfcGFsX21lbV9hdHRyaWIoJnI5KTsKKworCXJldHVybiAoc3RydWN0IGlhNjRfcGFsX3JldHZhbCl7c3RhdHVzLCByOSwgMCwgMH07Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZV9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2b2lkICp2KQoreworCXM2NCB0cmFuc190eXBlID0gKHM2NCl2OworCWlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodHJhbnNfdHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9wcmVmZXRjaF92aXNpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoaW4xKTsKKwlpZiAocmVzdWx0LnN0YXR1cyA9PSAwKSB7CisJCS8qIE11c3QgYmUgcGVyZm9ybWVkIG9uIGFsbCByZW1vdGUgcHJvY2Vzc29ycworCQlpbiB0aGUgY29oZXJlbmNlIGRvbWFpbi4gKi8KKwkJc21wX2NhbGxfZnVuY3Rpb24ocmVtb3RlX3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5LAorCQkJCQkodm9pZCAqKWluMSwgMSk7CisJCS8qIFVubmVjZXNzYXJ5IG9uIHJlbW90ZSBwcm9jZXNzb3IgZm9yIG90aGVyIHZjcHVzISovCisJCXJlc3VsdC5zdGF0dXMgPSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfcGFsX21jX2RyYWluKHZvaWQgKnYpCit7CisJaWE2NF9wYWxfbWNfZHJhaW4oKTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX2dldF9icmFuZF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKworCWlmIChpbjEgPT0gMCAmJiBpbjIpIHsKKwkJY2hhciBicmFuZF9pbmZvWzEyOF07CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9nZXRfYnJhbmRfaW5mbyhicmFuZF9pbmZvKTsKKwkJaWYgKHJlc3VsdC5zdGF0dXMgPT0gUEFMX1NUQVRVU19TVUNDRVNTKQorCQkJbWVtY3B5KCh2b2lkICopaW4yLCBicmFuZF9pbmZvLCAxMjgpOworCX0gZWxzZSB7CisJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1JFUVVJUkVTX01FTU9SWTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyJJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICIKKwkJCQkJIlBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBpbnQga3ZtX3BhbF9lbXVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bikKIHsKIApAQCAtMzAwLDE0ICs0MTgsMjIgQEAKIAlpbnQgcmV0ID0gMTsKIAogCWdyMjggPSBrdm1fZ2V0X3BhbF9jYWxsX2luZGV4KHZjcHUpOwotCS8qcHJpbnRrKCJwYWxfY2FsbCBpbmRleDolbHhcbiIsZ3IyOCk7Ki8KIAlzd2l0Y2ggKGdyMjgpIHsKIAljYXNlIFBBTF9DQUNIRV9GTFVTSDoKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX2ZsdXNoKHZjcHUpOwogCQlicmVhazsKKwljYXNlIFBBTF9NRU1fQVRUUklCOgorCQlyZXN1bHQgPSBwYWxfbWVtX2F0dHJpYih2Y3B1KTsKKwkJYnJlYWs7CiAJY2FzZSBQQUxfQ0FDSEVfU1VNTUFSWToKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX3N1bW1hcnkodmNwdSk7CiAJCWJyZWFrOworCWNhc2UgUEFMX1BFUkZfTU9OX0lORk86CisJCXJlc3VsdCA9IHBhbF9wZXJmX21vbl9pbmZvKHZjcHUpOworCQlicmVhazsKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXJlc3VsdCA9IHBhbF9oYWx0X2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX0hBTFRfTElHSFQ6CiAJewogCQlJTklUX1BBTF9TVEFUVVNfU1VDQ0VTUyhyZXN1bHQpOwpAQCAtMzE3LDYgKzQ0MywxNiBAQAogCX0KIAkJYnJlYWs7CiAKKwljYXNlIFBBTF9QUkVGRVRDSF9WSVNJQklMSVRZOgorCQlyZXN1bHQgPSBwYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfTUNfRFJBSU46CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9tY19kcmFpbigpOworCQkvKiBGSVhNRTogQWxsIHZjcHVzIGxpa2VseSBjYWxsIFBBTF9NQ19EUkFJTi4KKwkJICAgVGhhdCBjYXVzZXMgdGhlIGNvbmdlc3Rpb24uICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlbW90ZV9wYWxfbWNfZHJhaW4sIE5VTEwsIDEpOworCQlicmVhazsKKwogCWNhc2UgUEFMX0ZSRVFfUkFUSU9TOgogCQlyZXN1bHQgPSBwYWxfZnJlcV9yYXRpb3ModmNwdSk7CiAJCWJyZWFrOwpAQCAtMzQ2LDYgKzQ4Miw5IEBACiAJCUlOSVRfUEFMX1NUQVRVU19TVUNDRVNTKHJlc3VsdCk7CiAJCXJlc3VsdC52MSA9ICgxTCA8PCAzMikgfCAxTDsKIAkJYnJlYWs7CisJY2FzZSBQQUxfUkVHSVNURVJfSU5GTzoKKwkJcmVzdWx0ID0gcGFsX3JlZ2lzdGVyX2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX1ZNX1BBR0VfU0laRToKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZtX3BhZ2Vfc2l6ZSgmcmVzdWx0LnYwLAogCQkJCQkJCSZyZXN1bHQudjEpOwpAQCAtMzY1LDEyICs1MDQsMTggQEAKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZlcnNpb24oCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjAsCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjEpOwotCiAJCWJyZWFrOwogCWNhc2UgUEFMX0ZJWEVEX0FERFI6CiAJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1NVQ0NFU1M7CiAJCXJlc3VsdC52MCA9IHZjcHUtPnZjcHVfaWQ7CiAJCWJyZWFrOworCWNhc2UgUEFMX0JSQU5EX0lORk86CisJCXJlc3VsdCA9IHBhbF9nZXRfYnJhbmRfaW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfR0VUX1BTVEFURToKKwljYXNlIFBBTF9DQUNIRV9TSEFSRURfSU5GTzoKKwkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyJrdm06IFVuc3VwcG9ydGVkIHBhbCBjYWxsLCIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggMjMwZWFlNC4uYjFkYzgwOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTE2Nyw3ICsxNjcsNiBAQAogCXJldHVybiAocnIxLnZhbCk7CiB9CiAKLQogLyoKICAqIFNldCB2SUZBICYgdklUSVIgJiB2SUhBLCB3aGVuIHZQU1IuaWMgPTEKICAqIFBhcmFtZXRlcjoKQEAgLTIyMiw4ICsyMjEsNiBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgSUE2NF9JTlNUX1RMQl9WRUNUT1IpOwogfQogCi0KLQogLyoKICAqIERhdGEgTmVzdGVkIFRMQiBGYXVsdAogICogIEAgRGF0YSBOZXN0ZWQgVExCIFZlY3RvcgpAQCAtMjQ1LDcgKzI0Miw2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X0FMVF9EQVRBX1RMQl9WRUNUT1IpOwogfQogCi0KIC8qCiAgKiBEYXRhIFRMQiBGYXVsdAogICogIEAgRGF0YSBUTEIgdmVjdG9yCkBAIC0yNjUsOCArMjYxLDYgQEAKIAkvKiBJZiB2UFNSLmljLCBJRkEsIElUSVIsIElIQSovCiAJc2V0X2lmYV9pdGlyX2loYSh2Y3B1LCB2YWRyLCAxLCAxLCAxKTsKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfVkhQVF9UUkFOU19WRUNUT1IpOwotCi0KIH0KIAogLyoKQEAgLTI3OSw3ICsyNzMsNiBAQAogCV92aHB0X2ZhdWx0KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qCiAgKiBWSFBUIERhdGEgRmF1bHQKICAqICBAIFZIUFQgVHJhbnNsYXRpb24gdmVjdG9yCkBAIC0yOTAsOCArMjgzLDYgQEAKIAlfdmhwdF9mYXVsdCh2Y3B1LCB2YWRyKTsKIH0KIAotCi0KIC8qCiAgKiBEZWFsIHdpdGg6CiAgKiAgR2VuZXJhbCBFeGNlcHRpb24gdmVjdG9yCkBAIC0zMDEsNyArMjkyLDYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfR0VORVhfVkVDVE9SKTsKIH0KIAotCiAvKgogICogSWxsZWdhbCBPcGVyYXRpb24gRmF1bHQKICAqICBAIEdlbmVyYWwgRXhjZXB0aW9uIFZlY3RvcgpAQCAtNDE5LDE5ICs0MDksMTYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfUEFHRV9OT1RfUFJFU0VOVF9WRUNUT1IpOwogfQogCi0KIHZvaWQgZGF0YV9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIHZvaWQgaW5zdF9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qIERlYWwgd2l0aAogICogIERhdGEgYWNjZXNzIHJpZ2h0cyB2ZWN0b3IKICAqLwpAQCAtNTYzLDIyICs1NTAsNjQgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIHZlY3Rvcik7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV90cmFuc19wYWxfY2FsbF9hcmdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0aGFzaF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZ3BhLCBwb2ZmOworCisJaWYgKCFpc19waHlzaWNhbF9tb2RlKHZjcHUpKSB7CisJCS8qIERlcGVuZHMgb24gY2FsbGVyIHRvIHByb3ZpZGUgdGhlIERUUiBvciBEVEMgbWFwcGluZy4qLworCQlkYXRhID0gdnRsYl9sb29rdXAodmNwdSwgYXJnLCBEX1RMQik7CisJCWlmIChkYXRhKQorCQkJZ3BhID0gZGF0YS0+cGFnZV9mbGFncyAmIF9QQUdFX1BQTl9NQVNLOworCQllbHNlIHsKKwkJCWRhdGEgPSB2aHB0X2xvb2t1cChhcmcpOworCQkJaWYgKCFkYXRhKQorCQkJCXJldHVybiAwOworCQkJZ3BhID0gZGF0YS0+Z3BhZGRyICYgX1BBR0VfUFBOX01BU0s7CisJCX0KKworCQlwb2ZmID0gYXJnICYgKFBTSVpFKGRhdGEtPnBzKSAtIDEpOworCQlhcmcgPSBQQUdFQUxJR04oZ3BhLCBkYXRhLT5wcykgfCBwb2ZmOworCX0KKwlhcmcgPSBrdm1fZ3BhX3RvX21wYShhcmcgPDwgMSA+PiAxKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKGFyZyk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9wYWxfY2FsbF9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGdyMjggPSB2Y3B1X2dldF9ncih2Y3B1LCAyOCk7CisJdW5zaWduZWQgbG9uZyBncjI5ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjkpOworCXVuc2lnbmVkIGxvbmcgZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKIAogCS8qRklYTUU6Rm9yIHN0YXRpYyBhbmQgc3RhY2tlZCBjb252ZW50aW9uLCBmaXJtd2FyZQogCSAqIGhhcyBwdXQgdGhlIHBhcmFtZXRlcnMgaW4gZ3IyOC1ncjMxIGJlZm9yZQogCSAqIGJyZWFrIHRvIHZtbSAgISEqLwogCi0JcC0+dS5wYWxfZGF0YS5ncjI4ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjgpOwotCXAtPnUucGFsX2RhdGEuZ3IyOSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI5KTsKLQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJc3dpdGNoIChncjI4KSB7CisJY2FzZSBQQUxfUEVSRl9NT05fSU5GTzoKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9ICBrdm1fdHJhbnNfcGFsX2NhbGxfYXJncyh2Y3B1LCBncjI5KTsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCQlicmVhazsKKwljYXNlIFBBTF9CUkFORF9JTkZPOgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSBncjI5OzsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0ga3ZtX3RyYW5zX3BhbF9jYWxsX2FyZ3ModmNwdSwgZ3IzMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9IGdyMjk7OworCQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJfQorCXAtPnUucGFsX2RhdGEuZ3IyOCA9IGdyMjg7CiAJcC0+dS5wYWxfZGF0YS5ncjMxID0gdmNwdV9nZXRfZ3IodmNwdSwgMzEpOworCiAJcC0+ZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9QQUxfQ0FMTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3BhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBnZXRfcGFsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKIApAQCAtNjA2LDcgKzYzNSw3IEBACiAJcC0+ZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9TQUxfQ0FMTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3NhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBnZXRfc2FsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKIApAQCAtNjI5LDEzICs2NTgsMTMgQEAKIAkJaWYgKGlpbSA9PSBET01OX1BBTF9SRVFVRVNUKSB7CiAJCQlzZXRfcGFsX2NhbGxfZGF0YSh2KTsKIAkJCXZtbV90cmFuc2l0aW9uKHYpOwotCQkJc2V0X3BhbF9jYWxsX3Jlc3VsdCh2KTsKKwkJCWdldF9wYWxfY2FsbF9yZXN1bHQodik7CiAJCQl2Y3B1X2luY3JlbWVudF9paXAodik7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoaWltID09IERPTU5fU0FMX1JFUVVFU1QpIHsKIAkJCXNldF9zYWxfY2FsbF9kYXRhKHYpOwogCQkJdm1tX3RyYW5zaXRpb24odik7Ci0JCQlzZXRfc2FsX2NhbGxfcmVzdWx0KHYpOworCQkJZ2V0X3NhbF9jYWxsX3Jlc3VsdCh2KTsKIAkJCXZjcHVfaW5jcmVtZW50X2lpcCh2KTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzAzLDcgKzczMiw2IEBACiAJfQogfQogCi0KIHZvaWQgbGVhdmVfaHlwZXJ2aXNvcl90YWlsKHZvaWQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2ID0gY3VycmVudF92Y3B1OwpAQCAtNzM3LDcgKzc2NSw2IEBACiAJfQogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfbGRzKHN0cnVjdCBrdm1fcHRfcmVncyAqcmVncykKIHsKIAlyZWdzLT5jcl9pcHNyIHw9IElBNjRfUFNSX0VEOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwppbmRleCBlY2Q1MjZiLi5kNGQyODA1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYworKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAJcmV0dXJuOwogfQogCi0KIHZvaWQgc3dpdGNoX3RvX3ZpcnR1YWxfcmlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIHBzcjsKQEAgLTE2Niw4ICsxNjUsNiBAQAogCXJldHVybjsKIH0KIAotCi0KIC8qCiAgKiBJbiBwaHlzaWNhbCBtb2RlLCBpbnNlcnQgdGMvdHIgZm9yIHJlZ2lvbiAwIGFuZCA0IHVzZXMKICAqIFJJRFswXSBhbmQgUklEWzRdIHdoaWNoIGlzIGZvciBwaHlzaWNhbCBtb2RlIGVtdWxhdGlvbi4KQEAgLTI2OSw3ICsyNjYsNiBAQAogCXJldHVybiByb3RhdGVfcmVnKDk2LCBycmJfZnIsIChyZWdudW0gLSBJQTY0X0ZJUlNUX1JPVEFUSU5HX0ZSKSk7CiB9CiAKLQogLyoKICAqIFRoZSBpbnZlcnNlIG9mIHRoZSBhYm92ZTogZ2l2ZW4gYnNwc3RvcmUgYW5kIHRoZSBudW1iZXIgb2YKICAqIHJlZ2lzdGVycywgY2FsY3VsYXRlIGFyLmJzcC4KQEAgLTgxMSwxMiArODA3LDE1IEBACiBzdGF0aWMgdm9pZCB2Y3B1X3NldF9pdGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdjsKKwlzdHJ1Y3Qga3ZtICprdm07CiAJaW50IGk7CiAJbG9uZyBpdGNfb2Zmc2V0ID0gdmFsIC0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CiAJdW5zaWduZWQgbG9uZyB2aXR2ID0gVkNQVSh2Y3B1LCBpdHYpOwogCisJa3ZtID0gKHN0cnVjdCBrdm0gKilLVk1fVk1fQkFTRTsKKwogCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CiAJCQl2ID0gKHN0cnVjdCBrdm1fdmNwdSAqKSgoY2hhciAqKXZjcHUgKwogCQkJCQlzaXplb2Yoc3RydWN0IGt2bV92Y3B1X2RhdGEpICogaSk7CiAJCQlWTVgodiwgaXRjX29mZnNldCkgPSBpdGNfb2Zmc2V0OwpAQCAtMTAzOSw4ICsxMDM4LDYgQEAKIAlyZXR1cm4ga2V5OwogfQogCi0KLQogdm9pZCBrdm1fdGhhc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRoYXNoLCB2YWRyOwpAQCAtMTA1MCw3ICsxMDQ3LDYgQEAKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk00Ni5yMSwgdGhhc2gsIDApOwogfQogCi0KIHZvaWQga3ZtX3R0YWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRhZywgdmFkcjsKQEAgLTExMzEsNyArMTEyNyw2IEBACiAJcmV0dXJuIElBNjRfTk9fRkFVTFQ7CiB9CiAKLQogaW50IGt2bV90cGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIxLCByMzsKQEAgLTExNTQsNyArMTE0OSw2IEBACiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NNDYucjEsIHIxLCAwKTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbnNlcnQvUHVyZ2UgdHJhbnNsYXRpb24gcmVnaXN0ZXIvY2FjaGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzg1LDcgKzEzNzksNiBAQAogCXZjcHVfc2V0X2l0Yyh2Y3B1LCByMik7CiB9CiAKLQogdm9pZCBrdm1fbW92X2Zyb21fYXJfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMTsKQEAgLTEzOTMsOCArMTM4Niw5IEBACiAJcjEgPSB2Y3B1X2dldF9pdGModmNwdSk7CiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NMzEucjEsIHIxLCAwKTsKIH0KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIHN0cnVjdCBrdm1fdmNwdSpwcm90ZWN0aW9uIGtleSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMKKyAgc3RydWN0IGt2bV92Y3B1IHByb3RlY3Rpb24ga2V5IHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X3BrcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmVnKQpAQCAtMTQwNywyMCArMTQwMSw2IEBACiAJaWE2NF9zZXRfcGtyKHJlZywgdmFsKTsKIH0KIAotCi11bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2l0aXJfb25fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGlmYSkKLXsKLQl1bmlvbiBpYTY0X3JyIHJyLCBycjE7Ci0KLQlyci52YWwgPSB2Y3B1X2dldF9ycih2Y3B1LCBpZmEpOwotCXJyMS52YWwgPSAwOwotCXJyMS5wcyA9IHJyLnBzOwotCXJyMS5yaWQgPSByci5yaWQ7Ci0JcmV0dXJuIChycjEudmFsKTsKLX0KLQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTW92ZXMgdG8gcHJpdmlsZWdlZCByZWdpc3RlcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0NjQsOCArMTQ0NCw2IEBACiAJcmV0dXJuIChJQTY0X05PX0ZBVUxUKTsKIH0KIAotCi0KIHZvaWQga3ZtX21vdl90b19ycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjMsIHIyOwpAQCAtMTUxMCw4ICsxNDg4LDYgQEAKIAl2Y3B1X3NldF9wa3IodmNwdSwgcjMsIHIyKTsKIH0KIAotCi0KIHZvaWQga3ZtX21vdl9mcm9tX3JyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMywgcjE7CkBAIC0xNTU3LDcgKzE1MzMsNiBAQAogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTQzLnIxLCByMSwgMCk7CiB9CiAKLQogdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmVnKQogewogCS8qIEZJWE1FOiBUaGlzIGNvdWxkIGdldCBjYWxsZWQgYXMgYSByZXN1bHQgb2YgYSByc3ZkLXJlZyBmYXVsdCAqLwpAQCAtMTYwOSw3ICsxNTg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiB1bnNpZ25lZCBsb25nIGt2bV9tb3ZfZnJvbV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgdGd0ID0gaW5zdC5NMzMucjE7CkBAIC0xNjMzLDggKzE2MDcsNiBAQAogCXJldHVybiAwOwogfQogCi0KLQogdm9pZCB2Y3B1X3NldF9wc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIApAQCAtMTc3Niw5ICsxNzQ4LDYgQEAKIAl9CiB9CiAKLQotCi0KIHZvaWQgdmNwdV9yZmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaWZzLCBwc3I7CkBAIC0xNzk2LDcgKzE3NjUsNiBAQAogCXJlZ3MtPmNyX2lpcCA9IFZDUFUodmNwdSwgaWlwKTsKIH0KIAotCiAvKgogICAgVlBTUiBjYW4ndCBrZWVwIHRyYWNrIG9mIGJlbG93IGJpdHMgb2YgZ3Vlc3QgUFNSCiAgICBUaGlzIGZ1bmN0aW9uIGdldHMgZ3Vlc3QgUFNSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaCBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCmluZGV4IGIyZjEyYTUuLjA0MmFmOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCkBAIC03MDMsNyArNzAzLDcgQEAKIGV4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2VudHJpZXMoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIHU2NCBwcyk7CiBleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9lbnRyaWVzX3JlbW90ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgdTY0IHBzKTsKIGV4dGVybiB1NjQgdHJhbnNsYXRlX3BoeV9wdGUodTY0ICpwdGUsIHU2NCBpdGlyLCB1NjQgdmEpOwotZXh0ZXJuIGludCB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwKK2V4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLAogCQl1NjQgaXRpciwgdTY0IGlmYSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdik7CiBleHRlcm4gc3RydWN0IHRoYXNoX2RhdGEgKnZ0bGJfbG9va3VwKHN0cnVjdCBrdm1fdmNwdSAqdiwKQEAgLTczOCw3ICs3MzgsNyBAQAogdm9pZCB0aGFzaF9pbml0KHN0cnVjdCB0aGFzaF9jYiAqaGNiLCB1NjQgc3opOwogCiB2b2lkIHBhbmljX3ZtKHN0cnVjdCBrdm1fdmNwdSAqdiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotCit1NjQga3ZtX2dwYV90b19tcGEodTY0IGdwYSk7CiBleHRlcm4gdTY0IGlhNjRfY2FsbF92c2EodTY0IHByb2MsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMsCiAJCXU2NCBhcmc0LCB1NjQgYXJnNSwgdTY0IGFyZzYsIHU2NCBhcmc3KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92dGxiLmMgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwppbmRleCA2YjYzMDdhLi4zODIzMmIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYworKysgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwpAQCAtMTY0LDExICsxNjQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHBzLCBncGFkZHI7CiAKIAlwcyA9IGl0aXJfcHMoaXRpcik7Ci0KLQlncGFkZHIgPSAoKGdwdGUgJiBfUEFHRV9QUE5fTUFTSykgPj4gcHMgPDwgcHMpIHwKLQkJKGlmYSAmICgoMVVMIDw8IHBzKSAtIDEpKTsKLQogCXJyLnZhbCA9IGlhNjRfZ2V0X3JyKGlmYSk7CisKKwkgZ3BhZGRyID0gKChncHRlICYgX1BBR0VfUFBOX01BU0spID4+IHBzIDw8IHBzKSB8CisJCQkJCShpZmEgJiAoKDFVTCA8PCBwcykgLSAxKSk7CisKIAloZWFkID0gKHN0cnVjdCB0aGFzaF9kYXRhICopaWE2NF90aGFzaChpZmEpOwogCWhlYWQtPmV0YWcgPSBJTlZBTElEX1RJX1RBRzsKIAlpYTY0X21mKCk7CkBAIC00MTIsMTYgKzQxMiwxNCBAQAogCiAvKgogICogUHVyZ2Ugb3ZlcmxhcCBUQ3MgYW5kIHRoZW4gaW5zZXJ0IHRoZSBuZXcgZW50cnkgdG8gZW11bGF0ZSBpdGMgb3BzLgotICogICAgTm90ZXM6IE9ubHkgVEMgZW50cnkgY2FuIHB1cmdlIGFuZCBpbnNlcnQuCi0gKiAgICAxIGluZGljYXRlcyB0aGlzIGlzIE1NSU8KKyAqIE5vdGVzOiBPbmx5IFRDIGVudHJ5IGNhbiBwdXJnZSBhbmQgaW5zZXJ0LgogICovCi1pbnQgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsIHU2NCBpdGlyLAordm9pZCAgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsIHU2NCBpdGlyLAogCQkJCQkJdTY0IGlmYSwgaW50IHR5cGUpCiB7CiAJdTY0IHBzOwogCXU2NCBwaHlfcHRlLCBpb19tYXNrLCBpbmRleDsKIAl1bmlvbiBpYTY0X3JyIHZyciwgbXJyOwotCWludCByZXQgPSAwOwogCiAJcHMgPSBpdGlyX3BzKGl0aXIpOwogCXZyci52YWwgPSB2Y3B1X2dldF9ycih2LCBpZmEpOwpAQCAtNDQxLDI1ICs0MzksMTkgQEAKIAkJcGh5X3B0ZSAmPSB+X1BBR0VfTUFfTUFTSzsKIAl9CiAKLQlpZiAocHRlICYgVlRMQl9QVEVfSU8pCi0JCXJldCA9IDE7Ci0KIAl2dGxiX3B1cmdlKHYsIGlmYSwgcHMpOwogCXZocHRfcHVyZ2UodiwgaWZhLCBwcyk7CiAKLQlpZiAocHMgPT0gbXJyLnBzKSB7Ci0JCWlmICghKHB0ZSZWVExCX1BURV9JTykpIHsKLQkJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKLQkJfSBlbHNlIHsKLQkJCXZ0bGJfaW5zZXJ0KHYsIHB0ZSwgaXRpciwgaWZhKTsKLQkJCXZjcHVfcXVpY2tfcmVnaW9uX3NldChWTVgodiwgdGNfcmVnaW9ucyksIGlmYSk7Ci0JCX0KLQl9IGVsc2UgaWYgKHBzID4gbXJyLnBzKSB7CisJaWYgKChwcyAhPSBtcnIucHMpIHx8IChwdGUgJiBWVExCX1BURV9JTykpIHsKIAkJdnRsYl9pbnNlcnQodiwgcHRlLCBpdGlyLCBpZmEpOwogCQl2Y3B1X3F1aWNrX3JlZ2lvbl9zZXQoVk1YKHYsIHRjX3JlZ2lvbnMpLCBpZmEpOwotCQlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQotCQkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOwotCX0gZWxzZSB7CisJfQorCWlmIChwdGUgJiBWVExCX1BURV9JTykKKwkJcmV0dXJuOworCisJaWYgKHBzID49IG1yci5wcykKKwkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOworCWVsc2UgewogCQl1NjQgcHNyOwogCQlwaHlfcHRlICAmPSB+UEFHRV9GTEFHU19SVl9NQVNLOwogCQlwc3IgPSBpYTY0X2NsZWFyX2ljKCk7CkBAIC00NjksNyArNDYxLDYgQEAKIAlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQogCQltYXJrX3BhZ2VzX2RpcnR5KHYsIHB0ZSwgcHMpOwogCi0JcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTUwOSw3ICs1MDAsNiBAQAogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAotCiAvKgogICogTG9va3VwIHRoZSBoYXNoIHRhYmxlIGFuZCBpdHMgY29sbGlzaW9uIGNoYWluIHRvIGZpbmQgYW4gZW50cnkKICAqIGNvdmVyaW5nIHRoaXMgYWRkcmVzcyByaWQ6dmEgb3IgdGhlIGVudHJ5LgpAQCAtNTE3LDcgKzUwNyw2IEBACiAgKiBJTlBVVDoKICAqICBpbjogVExCIGZvcm1hdCBmb3IgYm90aCBWSFBUICYgVExCLgogICovCi0KIHN0cnVjdCB0aGFzaF9kYXRhICp2dGxiX2xvb2t1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgaW50IGlzX2RhdGEpCiB7CiAJc3RydWN0IHRoYXNoX2RhdGEgICpjY2g7CkBAIC01NDcsNyArNTM2LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotCiAvKgogICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBjb250cm9sIGRhdGEgYmVmb3JlIHNlcnZpY2UuCiAgKi8KQEAgLTU3Myw2ICs1NjEsMTAgQEAKIHU2NCBrdm1fZ2V0X21wdF9lbnRyeSh1NjQgZ3BmbikKIHsKIAl1NjQgKmJhc2UgPSAodTY0ICopIEtWTV9QMk1fQkFTRTsKKworCWlmIChncGZuID49IChLVk1fUDJNX1NJWkUgPj4gMykpCisJCXBhbmljX3ZtKGN1cnJlbnRfdmNwdSwgIkludmFsaWQgZ3BmbiA9JWx4XG4iLCBncGZuKTsKKwogCXJldHVybiAqKGJhc2UgKyBncGZuKTsKIH0KIApAQCAtNTg5LDcgKzU4MSw2IEBACiAJcmV0dXJuIChwdGUgPj4gUEFHRV9TSElGVCA8PCBQQUdFX1NISUZUKSB8IChncGEgJiB+UEFHRV9NQVNLKTsKIH0KIAotCiAvKgogICogRmV0Y2ggZ3Vlc3QgYnVuZGxlIGNvZGUuCiAgKiBJTlBVVDoKQEAgLTYzMSw3ICs2MjIsNiBAQAogCXJldHVybiBJQTY0X05PX0ZBVUxUOwogfQogCi0KIHZvaWQga3ZtX2luaXRfdmhwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiB7CiAJdi0+YXJjaC52aHB0Lm51bSA9IFZIUFRfTlVNX0VOVFJJRVM7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYwppbmRleCBjYTU1M2IwLi44MWU0Mjg5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCW1zZy5hZGRyZXNzX2xvID0gKHUzMikoYnVzX2FkZHIgJiAweDAwMDAwMDAwZmZmZmZmZmYpOwogCiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqY3B1X21hc2s7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdV9tYXNrKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCmluZGV4IDJhZWFlNDYuLjhkZmQzMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwpAQCAtNDksNyArNDksNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvTWFrZWZpbGUgYi9hcmNoL202OGsvTWFrZWZpbGUKaW5kZXggODEzM2RiYy4uNTcwZDg1YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9NYWtlZmlsZQpAQCAtMTE3LDMgKzExNyw2IEBACiAKIGFyY2hjbGVhbjoKIAlybSAtZiB2bWxpbnV4Lmd6IHZtbGludXguYnoyCisKK2luc3RhbGw6CisJc2ggJChzcmN0cmVlKS9hcmNoL202OGsvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpIHZtbGludXguZ3ogU3lzdGVtLm1hcCAiJChJTlNUQUxMX1BBVEgpIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oCmluZGV4IDIyNmJmYzAuLjBjYWI0MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CiAKIC8qCkBAIC04MCw3ICs4MSw3IEBACiAgKiBpbnRlcnJ1cHQgc291cmNlIChpZiBpdCBzdXBwb3J0cyBjaGFpbmluZykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGlycV9ub2RlIHsKLQlpbnQJCSgqaGFuZGxlcikoaW50LCB2b2lkICopOworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICopOwogCXZvaWQJCSpkZXZfaWQ7CiAJc3RydWN0IGlycV9ub2RlICpuZXh0OwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKaW5kZXggMDUzMDlmNy4uNTBkYjM1OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaApAQCAtMzQsNiArMzQsNyBAQAogCWNoYXIgc2NjX3R5cGU7CiAJY2hhciBldGhlcl90eXBlOwogCWNoYXIgbnVidXNfdHlwZTsKKwljaGFyIGZsb3BweV90eXBlOwogfTsKIAogI2RlZmluZSBNQUNfQURCX05PTkUJCTAKQEAgLTcxLDYgKzcyLDEyIEBACiAjZGVmaW5lIE1BQ19OT19OVUJVUwkJMAogI2RlZmluZSBNQUNfTlVCVVMJCTEKIAorI2RlZmluZSBNQUNfRkxPUFBZX0lXTQkJMAorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fQUREUjEJMQorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fQUREUjIJMgorI2RlZmluZSBNQUNfRkxPUFBZX1NXSU1fSU9QCTMKKyNkZWZpbmUgTUFDX0ZMT1BQWV9BVgkJNAorCiAvKgogICoJR2VzdGFsdCBudW1iZXJzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggNDBkMTExMi4uODVjNDFiNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTEsNSArMSwyNiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGFyYW1fbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAicGFyYW1fbW0uaCIKKyNpZm5kZWYgX002OEtfUEFSQU1fSAorI2RlZmluZSBfTTY4S19QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLworIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwogI2VuZGlmCisKKyNpZm5kZWYgSFoKKyNkZWZpbmUgSFogMTAwCisjZW5kaWYKKworI2lmZGVmIF9fdUNsaW51eF9fCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgorI2Vsc2UKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyCisjZW5kaWYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAJCSgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKworI2VuZGlmIC8qIF9NNjhLX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNmEyNzguLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1BBUkFNX0gKLSNkZWZpbmUgX002OEtfUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyCi0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZiAvKiBfTTY4S19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW1fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ0Mzk3YS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW1fbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9QQVJBTV9ICi0jZGVmaW5lIF9NNjhLTk9NTVVfUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBIWiBDT05GSUdfSFoKLSNkZWZpbmUJVVNFUl9IWgkJSFoKLSNkZWZpbmUJQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCi0jZW5kaWYKLQotI2lmbmRlZiBIWgotI2RlZmluZSBIWgkxMDAKLSNlbmRpZgotCi0jZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgotCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLwotCi0jZW5kaWYgLyogX002OEtOT01NVV9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZTgzY2QyZi4uOGM5MTk0YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMSw1ICsxLDg3IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJwdHJhY2Vfbm8uaCIKKyNpZm5kZWYgX002OEtfUFRSQUNFX0gKKyNkZWZpbmUgX002OEtfUFRSQUNFX0gKKworI2RlZmluZSBQVF9EMQkgICAwCisjZGVmaW5lIFBUX0QyCSAgIDEKKyNkZWZpbmUgUFRfRDMJICAgMgorI2RlZmluZSBQVF9ENAkgICAzCisjZGVmaW5lIFBUX0Q1CSAgIDQKKyNkZWZpbmUgUFRfRDYJICAgNQorI2RlZmluZSBQVF9ENwkgICA2CisjZGVmaW5lIFBUX0EwCSAgIDcKKyNkZWZpbmUgUFRfQTEJICAgOAorI2RlZmluZSBQVF9BMgkgICA5CisjZGVmaW5lIFBUX0EzCSAgIDEwCisjZGVmaW5lIFBUX0E0CSAgIDExCisjZGVmaW5lIFBUX0E1CSAgIDEyCisjZGVmaW5lIFBUX0E2CSAgIDEzCisjZGVmaW5lIFBUX0QwCSAgIDE0CisjZGVmaW5lIFBUX1VTUAkgICAxNQorI2RlZmluZSBQVF9PUklHX0QwIDE2CisjZGVmaW5lIFBUX1NSCSAgIDE3CisjZGVmaW5lIFBUX1BDCSAgIDE4CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KKworc3RydWN0IHB0X3JlZ3MgeworICBsb25nICAgICBkMTsKKyAgbG9uZyAgICAgZDI7CisgIGxvbmcgICAgIGQzOworICBsb25nICAgICBkNDsKKyAgbG9uZyAgICAgZDU7CisgIGxvbmcgICAgIGEwOworICBsb25nICAgICBhMTsKKyAgbG9uZyAgICAgYTI7CisgIGxvbmcgICAgIGQwOworICBsb25nICAgICBvcmlnX2QwOworICBsb25nICAgICBzdGthZGo7CisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisgIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCisgIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCisgIHVuc2lnbmVkIHNob3J0IHNyOworICB1bnNpZ25lZCBsb25nICBwYzsKICNlbHNlCi0jaW5jbHVkZSAicHRyYWNlX21tLmgiCisgIHVuc2lnbmVkIHNob3J0IHNyOworICB1bnNpZ25lZCBsb25nICBwYzsKKyAgdW5zaWduZWQgZm9ybWF0IDogIDQ7IC8qIGZyYW1lIGZvcm1hdCBzcGVjaWZpZXIgKi8KKyAgdW5zaWduZWQgdmVjdG9yIDogMTI7IC8qIHZlY3RvciBvZmZzZXQgKi8KICNlbmRpZgorfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGV4dGVuZGVkIHN0YWNrIHVzZWQgYnkgc2lnbmFsIGhhbmRsZXJzIGFuZCB0aGUgY29udGV4dAorICogc3dpdGNoZXI6IGl0J3MgcHVzaGVkIGFmdGVyIHRoZSBub3JtYWwgInN0cnVjdCBwdF9yZWdzIi4KKyAqLworc3RydWN0IHN3aXRjaF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyAgZDY7CisJdW5zaWduZWQgbG9uZyAgZDc7CisJdW5zaWduZWQgbG9uZyAgYTM7CisJdW5zaWduZWQgbG9uZyAgYTQ7CisJdW5zaWduZWQgbG9uZyAgYTU7CisJdW5zaWduZWQgbG9uZyAgYTY7CisJdW5zaWduZWQgbG9uZyAgcmV0cGM7Cit9OworCisvKiBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIHNhbWUgcHRyYWNlIG51bWJlcnMgYXMgdXNlZCBieSB0aGUgU3BhcmMgY29kZS4gKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIFBTX1MKKyNkZWZpbmUgUFNfUyAgKDB4MjAwMCkKKyNkZWZpbmUgUFNfTSAgKDB4MTAwMCkKKyNlbmRpZgorCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnNyICYgUFNfUykpCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfTTY4S19QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U3NjNkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2VfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNpZm5kZWYgX002OEtfUFRSQUNFX0gKLSNkZWZpbmUgX002OEtfUFRSQUNFX0gKLQotI2RlZmluZSBQVF9EMQkgICAwCi0jZGVmaW5lIFBUX0QyCSAgIDEKLSNkZWZpbmUgUFRfRDMJICAgMgotI2RlZmluZSBQVF9ENAkgICAzCi0jZGVmaW5lIFBUX0Q1CSAgIDQKLSNkZWZpbmUgUFRfRDYJICAgNQotI2RlZmluZSBQVF9ENwkgICA2Ci0jZGVmaW5lIFBUX0EwCSAgIDcKLSNkZWZpbmUgUFRfQTEJICAgOAotI2RlZmluZSBQVF9BMgkgICA5Ci0jZGVmaW5lIFBUX0EzCSAgIDEwCi0jZGVmaW5lIFBUX0E0CSAgIDExCi0jZGVmaW5lIFBUX0E1CSAgIDEyCi0jZGVmaW5lIFBUX0E2CSAgIDEzCi0jZGVmaW5lIFBUX0QwCSAgIDE0Ci0jZGVmaW5lIFBUX1VTUAkgICAxNQotI2RlZmluZSBQVF9PUklHX0QwIDE2Ci0jZGVmaW5lIFBUX1NSCSAgIDE3Ci0jZGVmaW5lIFBUX1BDCSAgIDE4Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qIHRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCi0gICBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4gKi8KLQotc3RydWN0IHB0X3JlZ3MgewotICBsb25nICAgICBkMTsKLSAgbG9uZyAgICAgZDI7Ci0gIGxvbmcgICAgIGQzOwotICBsb25nICAgICBkNDsKLSAgbG9uZyAgICAgZDU7Ci0gIGxvbmcgICAgIGEwOwotICBsb25nICAgICBhMTsKLSAgbG9uZyAgICAgYTI7Ci0gIGxvbmcgICAgIGQwOwotICBsb25nICAgICBvcmlnX2QwOwotICBsb25nICAgICBzdGthZGo7Ci0gIHVuc2lnbmVkIHNob3J0IHNyOwotICB1bnNpZ25lZCBsb25nICBwYzsKLSAgdW5zaWduZWQgZm9ybWF0IDogIDQ7IC8qIGZyYW1lIGZvcm1hdCBzcGVjaWZpZXIgKi8KLSAgdW5zaWduZWQgdmVjdG9yIDogMTI7IC8qIHZlY3RvciBvZmZzZXQgKi8KLX07Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBleHRlbmRlZCBzdGFjayB1c2VkIGJ5IHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIGNvbnRleHQKLSAqIHN3aXRjaGVyOiBpdCdzIHB1c2hlZCBhZnRlciB0aGUgbm9ybWFsICJzdHJ1Y3QgcHRfcmVncyIuCi0gKi8KLXN0cnVjdCBzd2l0Y2hfc3RhY2sgewotCXVuc2lnbmVkIGxvbmcgIGQ2OwotCXVuc2lnbmVkIGxvbmcgIGQ3OwotCXVuc2lnbmVkIGxvbmcgIGEzOwotCXVuc2lnbmVkIGxvbmcgIGE0OwotCXVuc2lnbmVkIGxvbmcgIGE1OwotCXVuc2lnbmVkIGxvbmcgIGE2OwotCXVuc2lnbmVkIGxvbmcgIHJldHBjOwotfTsKLQotLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCi0jZGVmaW5lIFBUUkFDRV9HRVRSRUdTICAgICAgICAgICAgMTIKLSNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgICAgICAgICAgICAxMwotI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0Ci0jZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2lmbmRlZiBQU19TCi0jZGVmaW5lIFBTX1MgICgweDIwMDApCi0jZGVmaW5lIFBTX00gICgweDEwMDApCi0jZW5kaWYKLQotI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5zciAmIFBTX1MpKQotI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQotI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKLWV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogX002OEtfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2Vfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2Vfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5MTk0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1BUUkFDRV9ICi0jZGVmaW5lIF9NNjhLX1BUUkFDRV9ICi0KLSNkZWZpbmUgUFRfRDEJICAgMAotI2RlZmluZSBQVF9EMgkgICAxCi0jZGVmaW5lIFBUX0QzCSAgIDIKLSNkZWZpbmUgUFRfRDQJICAgMwotI2RlZmluZSBQVF9ENQkgICA0Ci0jZGVmaW5lIFBUX0Q2CSAgIDUKLSNkZWZpbmUgUFRfRDcJICAgNgotI2RlZmluZSBQVF9BMAkgICA3Ci0jZGVmaW5lIFBUX0ExCSAgIDgKLSNkZWZpbmUgUFRfQTIJICAgOQotI2RlZmluZSBQVF9BMwkgICAxMAotI2RlZmluZSBQVF9BNAkgICAxMQotI2RlZmluZSBQVF9BNQkgICAxMgotI2RlZmluZSBQVF9BNgkgICAxMwotI2RlZmluZSBQVF9EMAkgICAxNAotI2RlZmluZSBQVF9VU1AJICAgMTUKLSNkZWZpbmUgUFRfT1JJR19EMCAxNgotI2RlZmluZSBQVF9TUgkgICAxNwotI2RlZmluZSBQVF9QQwkgICAxOAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQotICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCi0KLXN0cnVjdCBwdF9yZWdzIHsKLSAgbG9uZyAgICAgZDE7Ci0gIGxvbmcgICAgIGQyOwotICBsb25nICAgICBkMzsKLSAgbG9uZyAgICAgZDQ7Ci0gIGxvbmcgICAgIGQ1OwotICBsb25nICAgICBhMDsKLSAgbG9uZyAgICAgYTE7Ci0gIGxvbmcgICAgIGEyOwotICBsb25nICAgICBkMDsKLSAgbG9uZyAgICAgb3JpZ19kMDsKLSAgbG9uZyAgICAgc3RrYWRqOwotI2lmZGVmIENPTkZJR19DT0xERklSRQotICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLwotICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLwotICB1bnNpZ25lZCBzaG9ydCBzcjsKLSAgdW5zaWduZWQgbG9uZyAgcGM7Ci0jZWxzZQotICB1bnNpZ25lZCBzaG9ydCBzcjsKLSAgdW5zaWduZWQgbG9uZyAgcGM7Ci0gIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCi0gIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCi0jZW5kaWYKLX07Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBleHRlbmRlZCBzdGFjayB1c2VkIGJ5IHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIGNvbnRleHQKLSAqIHN3aXRjaGVyOiBpdCdzIHB1c2hlZCBhZnRlciB0aGUgbm9ybWFsICJzdHJ1Y3QgcHRfcmVncyIuCi0gKi8KLXN0cnVjdCBzd2l0Y2hfc3RhY2sgewotCXVuc2lnbmVkIGxvbmcgIGQ2OwotCXVuc2lnbmVkIGxvbmcgIGQ3OwotCXVuc2lnbmVkIGxvbmcgIGEzOwotCXVuc2lnbmVkIGxvbmcgIGE0OwotCXVuc2lnbmVkIGxvbmcgIGE1OwotCXVuc2lnbmVkIGxvbmcgIGE2OwotCXVuc2lnbmVkIGxvbmcgIHJldHBjOwotfTsKLQotLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCi0jZGVmaW5lIFBUUkFDRV9HRVRSRUdTICAgICAgICAgICAgMTIKLSNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgICAgICAgICAgICAxMwotI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0Ci0jZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2lmbmRlZiBQU19TCi0jZGVmaW5lIFBTX1MgICgweDIwMDApCi0jZGVmaW5lIFBTX00gICgweDEwMDApCi0jZW5kaWYKLQotI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5zciAmIFBTX1MpKQotI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQotI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKLWV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogX002OEtfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggODQyZjg2Zi4uNGRmYjM5NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsNSArMSwzNzYgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInNldHVwX25vLmgiCisvKgorKiogYXNtL3NldHVwLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBzZXR1cCBpbmZvcm1hdGlvbgorKioKKyoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAorKioKKyoqIDUvMi85NCBSb21hbiBIb2RlazoKKyoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKKyoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KKyoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgorKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQorKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgorKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46CisqKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgbW92ZWQgYm9vdCBpbmZvcm1hdGlvbgorKiogICBzdHJ1Y3R1cmUgdG8gYm9vdGluZm8uaAorKi8KKworI2lmbmRlZiBfTTY4S19TRVRVUF9ICisjZGVmaW5lIF9NNjhLX1NFVFVQX0gKKworCisKKyAgICAvKgorICAgICAqICBMaW51eC9tNjhrIEFyY2hpdGVjdHVyZXMKKyAgICAgKi8KKworI2RlZmluZSBNQUNIX0FNSUdBICAgIDEKKyNkZWZpbmUgTUFDSF9BVEFSSSAgICAyCisjZGVmaW5lIE1BQ0hfTUFDICAgICAgMworI2RlZmluZSBNQUNIX0FQT0xMTyAgIDQKKyNkZWZpbmUgTUFDSF9TVU4zICAgICA1CisjZGVmaW5lIE1BQ0hfTVZNRTE0NyAgNgorI2RlZmluZSBNQUNIX01WTUUxNnggIDcKKyNkZWZpbmUgTUFDSF9CVk1FNjAwMCA4CisjZGVmaW5lIE1BQ0hfSFAzMDAgICAgOQorI2RlZmluZSBNQUNIX1E0MCAgICAgMTAKKyNkZWZpbmUgTUFDSF9TVU4zWCAgIDExCisKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjU2CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQ0xfU0laRSBDT01NQU5EX0xJTkVfU0laRQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19tYWNodHlwZTsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfQU1JR0EpCisjICBkZWZpbmUgTUFDSF9JU19BTUlHQSAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19BTUlHQSAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FNSUdBKQogI2Vsc2UKLSNpbmNsdWRlICJzZXR1cF9tbS5oIgorIyAgZGVmaW5lIE1BQ0hfQU1JR0FfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FNSUdBKQogI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfQVRBUkkpCisjICBkZWZpbmUgTUFDSF9JU19BVEFSSSAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19BVEFSSSAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FUQVJJKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0FUQVJJX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0FUQVJJICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BVEFSSSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX01BQykKKyMgIGRlZmluZSBNQUNIX0lTX01BQyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19NQUMgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NQUMpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfTUFDX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX01BQyAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTUFDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQorI2RlZmluZSBNQUNIX0lTX1NVTjMgKDEpCisjZGVmaW5lIE1BQ0hfU1VOM19PTkxZICgxKQorI2RlZmluZSBNQUNIX1RZUEUgKE1BQ0hfU1VOMykKKyNlbHNlCisjZGVmaW5lIE1BQ0hfSVNfU1VOMyAoMCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19BUE9MTE8pCisjICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQVBPTExPKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0FQT0xMT19PTkxZCisjICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FQT0xMTykKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3IChtNjhrX21hY2h0eXBlID09IE1BQ0hfTVZNRTE0NykKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9NVk1FMTQ3X09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01WTUUxNDcpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfTVZNRTE2eCkKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAobTY4a19tYWNodHlwZSA9PSBNQUNIX01WTUUxNngpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfTVZNRTE2eF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4ICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NVk1FMTZ4KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX0JWTUU2MDAwKQorIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9CVk1FNjAwMCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9CVk1FNjAwMF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQlZNRTYwMDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfSFAzMDApCisjICBkZWZpbmUgTUFDSF9JU19IUDMwMCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSBcCisJfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9IUDMwMCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9IUDMwMF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19IUDMwMCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfSFAzMDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfUTQwKQorIyAgZGVmaW5lIE1BQ0hfSVNfUTQwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfSFAzMDApICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX1E0MCAobTY4a19tYWNodHlwZSA9PSBNQUNIX1E0MCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9RNDBfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfUTQwICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9RNDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfU1VOM1gpCisjICBkZWZpbmUgTUFDSF9JU19TVU4zWCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfUTQwKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9TVU4zWCkKKyNlbHNlCisjICBkZWZpbmUgQ09ORklHX1NVTjNYX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX1NVTjNYICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9TVU4zWCkKKyNlbmRpZgorCisjaWZuZGVmIE1BQ0hfVFlQRQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAobTY4a19tYWNodHlwZSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKyAgICAvKgorICAgICAqICBDUFUsIEZQVSBhbmQgTU1VIHR5cGVzCisgICAgICoKKyAgICAgKiAgTm90ZTogd2UgbWF5IHJlbHkgb24gdGhlIGZvbGxvd2luZyBlcXVhbGl0aWVzOgorICAgICAqCisgICAgICogICAgICBDUFVfNjgwMjAgPT0gTU1VXzY4ODUxCisgICAgICogICAgICBDUFVfNjgwMzAgPT0gTU1VXzY4MDMwCisgICAgICogICAgICBDUFVfNjgwNDAgPT0gRlBVXzY4MDQwID09IE1NVV82ODA0MAorICAgICAqICAgICAgQ1BVXzY4MDYwID09IEZQVV82ODA2MCA9PSBNTVVfNjgwNjAKKyAgICAgKi8KKworI2RlZmluZSBDUFVCXzY4MDIwICAgICAwCisjZGVmaW5lIENQVUJfNjgwMzAgICAgIDEKKyNkZWZpbmUgQ1BVQl82ODA0MCAgICAgMgorI2RlZmluZSBDUFVCXzY4MDYwICAgICAzCisKKyNkZWZpbmUgQ1BVXzY4MDIwICAgICAgKDE8PENQVUJfNjgwMjApCisjZGVmaW5lIENQVV82ODAzMCAgICAgICgxPDxDUFVCXzY4MDMwKQorI2RlZmluZSBDUFVfNjgwNDAgICAgICAoMTw8Q1BVQl82ODA0MCkKKyNkZWZpbmUgQ1BVXzY4MDYwICAgICAgKDE8PENQVUJfNjgwNjApCisKKyNkZWZpbmUgRlBVQl82ODg4MSAgICAgMAorI2RlZmluZSBGUFVCXzY4ODgyICAgICAxCisjZGVmaW5lIEZQVUJfNjgwNDAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIEZQVSAqLworI2RlZmluZSBGUFVCXzY4MDYwICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBGUFUgKi8KKyNkZWZpbmUgRlBVQl9TVU5GUEEgICAgNCAgICAgICAgICAgICAgICAgICAgICAgLyogU3VuLTMgRlBBICovCisKKyNkZWZpbmUgRlBVXzY4ODgxICAgICAgKDE8PEZQVUJfNjg4ODEpCisjZGVmaW5lIEZQVV82ODg4MiAgICAgICgxPDxGUFVCXzY4ODgyKQorI2RlZmluZSBGUFVfNjgwNDAgICAgICAoMTw8RlBVQl82ODA0MCkKKyNkZWZpbmUgRlBVXzY4MDYwICAgICAgKDE8PEZQVUJfNjgwNjApCisjZGVmaW5lIEZQVV9TVU5GUEEgICAgICgxPDxGUFVCX1NVTkZQQSkKKworI2RlZmluZSBNTVVCXzY4ODUxICAgICAwCisjZGVmaW5lIE1NVUJfNjgwMzAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLworI2RlZmluZSBNTVVCXzY4MDQwICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KKyNkZWZpbmUgTU1VQl82ODA2MCAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCisjZGVmaW5lIE1NVUJfQVBPTExPICAgIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1c3RvbSBBcG9sbG8gKi8KKyNkZWZpbmUgTU1VQl9TVU4zICAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VzdG9tIFN1bi0zICovCisKKyNkZWZpbmUgTU1VXzY4ODUxICAgICAgKDE8PE1NVUJfNjg4NTEpCisjZGVmaW5lIE1NVV82ODAzMCAgICAgICgxPDxNTVVCXzY4MDMwKQorI2RlZmluZSBNTVVfNjgwNDAgICAgICAoMTw8TU1VQl82ODA0MCkKKyNkZWZpbmUgTU1VXzY4MDYwICAgICAgKDE8PE1NVUJfNjgwNjApCisjZGVmaW5lIE1NVV9TVU4zICAgICAgICgxPDxNTVVCX1NVTjMpCisjZGVmaW5lIE1NVV9BUE9MTE8gICAgICgxPDxNTVVCX0FQT0xMTykKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfY3B1dHlwZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfZnB1dHlwZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbW11dHlwZTsKKyNpZmRlZiBDT05GSUdfVk1FCitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWVfYnJkdHlwZTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgbTY4a19pczA0MG9yMDYwIGlzICE9IDAgZm9yIGEgJzA0MCBvciBoaWdoZXI7CisgICAgICogIHVzZWQgbnVtYmVycyBhcmUgNCBmb3IgNjgwNDAgYW5kIDYgZm9yIDY4MDYwLgorICAgICAqLworCitleHRlcm4gaW50IG02OGtfaXMwNDBvcjA2MDsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDIwKQorIyAgZGVmaW5lIENQVV9JU18wMjAgKDApCisjICBkZWZpbmUgTU1VX0lTXzg1MSAoMCkKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzAyMCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDIwKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKG02OGtfbW11dHlwZSAmIE1NVV82ODg1MSkKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkJLyogU3VuMyBub3Qgc3VwcG9ydGVkIHdpdGggb3RoZXIgQ1BVIGVuYWJsZWQgKi8KKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODAyMF9PTkxZCisjICBkZWZpbmUgQ1BVX0lTXzAyMCAoMSkKKyNpZmRlZiBNQUNIX1NVTjNfT05MWQorIyAgZGVmaW5lIE1NVV9JU19TVU4zICgxKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKDApCisjZWxzZQorIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKDEpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODAzMCkKKyMgIGRlZmluZSBDUFVfSVNfMDMwICgwKQorIyAgZGVmaW5lIE1NVV9JU18wMzAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wMzAgKG02OGtfY3B1dHlwZSAmIENQVV82ODAzMCkKKyMgIGRlZmluZSBNTVVfSVNfMDMwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwMzApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwMzBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wMzAgKDEpCisjICBkZWZpbmUgTU1VX0lTXzAzMCAoMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODA0MCkKKyMgIGRlZmluZSBDUFVfSVNfMDQwICgwKQorIyAgZGVmaW5lIE1NVV9JU18wNDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wNDAgKG02OGtfY3B1dHlwZSAmIENQVV82ODA0MCkKKyMgIGRlZmluZSBNTVVfSVNfMDQwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNDApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwNDBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wNDAgKDEpCisjICBkZWZpbmUgTU1VX0lTXzA0MCAoMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDYwICgwKQorIyAgZGVmaW5lIE1NVV9JU18wNjAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKQorIyAgZGVmaW5lIENQVV9JU18wNjAgKG02OGtfY3B1dHlwZSAmIENQVV82ODA2MCkKKyMgIGRlZmluZSBNTVVfSVNfMDYwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNjApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwNjBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wNjAgKDEpCisjICBkZWZpbmUgTU1VX0lTXzA2MCAoMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODAyMCkgJiYgIWRlZmluZWQoQ09ORklHX002ODAzMCkKKyMgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoMCkKKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODAyMF9PUl9NNjgwMzAKKyMgIGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKCFtNjhrX2lzMDQwb3IwNjApCisjICBlbHNlCisjICAgIGRlZmluZSBDUFVfTTY4MDIwX09SX002ODAzMF9PTkxZCisjICAgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoMSkKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNDApICYmICFkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKDApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwNDBfT1JfTTY4MDYwCisjICBpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKKyMgICAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwIChtNjhrX2lzMDQwb3IwNjApCisjICBlbHNlCisjICAgIGRlZmluZSBDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZCisjICAgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAoMSkKKyMgIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBDUFVfVFlQRSAobTY4a19jcHV0eXBlKQorCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisjICBpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWQorIyAgICBkZWZpbmUgRlBVX0lTX0VNVSAoMSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEZQVV9JU19FTVUgKCFtNjhrX2ZwdXR5cGUpCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBGUFVfSVNfRU1VICgwKQorI2VuZGlmCisKKworICAgIC8qCisgICAgICogIE1pc2NlbGxhbmVvdXMKKyAgICAgKi8KKworI2RlZmluZSBOVU1fTUVNSU5GTwk0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgbWVtX2luZm8geworCXVuc2lnbmVkIGxvbmcgYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IGNodW5rICovCisJdW5zaWduZWQgbG9uZyBzaXplOwkJLyogbGVuZ3RoIG9mIG1lbW9yeSBjaHVuayAoaW4gYnl0ZXMpICovCit9OworCitleHRlcm4gaW50IG02OGtfbnVtX21lbW9yeTsJCS8qICMgb2YgbWVtb3J5IGJsb2NrcyBmb3VuZCAoYW5kIHVzZWQpICovCitleHRlcm4gaW50IG02OGtfcmVhbG51bV9tZW1vcnk7CQkvKiByZWFsICMgb2YgbWVtb3J5IGJsb2NrcyBmb3VuZCAqLworZXh0ZXJuIHN0cnVjdCBtZW1faW5mbyBtNjhrX21lbW9yeVtOVU1fTUVNSU5GT107LyogbWVtb3J5IGRlc2NyaXB0aW9uICovCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9NNjhLX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZmIzOTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoKLSoqIGFzbS9zZXR1cC5oIC0tIERlZmluaXRpb24gb2YgdGhlIExpbnV4L202OGsgc2V0dXAgaW5mb3JtYXRpb24KLSoqCi0qKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKLSoqCi0qKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSoqIGZvciBtb3JlIGRldGFpbHMuCi0qKgotKiogQ3JlYXRlZCAwOS8yOS85MiBieSBHcmVnIEhhcnAKLSoqCi0qKiA1LzIvOTQgUm9tYW4gSG9kZWs6Ci0qKiAgIEFkZGVkIGJpX2F0YXJpIHBhcnQgb2YgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHVuaW9uIGJpX3VuOyBmb3Igbm93IGl0Ci0qKiAgIGNvbnRhaW5zIGp1c3QgYSBtb2RlbCBmaWVsZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFRUIGFuZCBGYWxjb24uCi0qKiAyNi83Lzk2IFJvbWFuIFppcHBlbDoKLSoqICAgUmVuYW1lZCB0byBzZXR1cC5oOyBhZGRlZCBzb21lIHVzZWZ1bCBtYWNyb3MgdG8gYWxsb3cgZ2NjIHNvbWUKLSoqICAgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KLSoqIDUvMTAvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgotKiogICBSZWRlc2lnbiBvZiB0aGUgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IG1vdmVkIGJvb3QgaW5mb3JtYXRpb24KLSoqICAgc3RydWN0dXJlIHRvIGJvb3RpbmZvLmgKLSovCi0KLSNpZm5kZWYgX002OEtfU0VUVVBfSAotI2RlZmluZSBfTTY4S19TRVRVUF9ICi0KLQotCi0gICAgLyoKLSAgICAgKiAgTGludXgvbTY4ayBBcmNoaXRlY3R1cmVzCi0gICAgICovCi0KLSNkZWZpbmUgTUFDSF9BTUlHQSAgICAxCi0jZGVmaW5lIE1BQ0hfQVRBUkkgICAgMgotI2RlZmluZSBNQUNIX01BQyAgICAgIDMKLSNkZWZpbmUgTUFDSF9BUE9MTE8gICA0Ci0jZGVmaW5lIE1BQ0hfU1VOMyAgICAgNQotI2RlZmluZSBNQUNIX01WTUUxNDcgIDYKLSNkZWZpbmUgTUFDSF9NVk1FMTZ4ICA3Ci0jZGVmaW5lIE1BQ0hfQlZNRTYwMDAgOAotI2RlZmluZSBNQUNIX0hQMzAwICAgIDkKLSNkZWZpbmUgTUFDSF9RNDAgICAgIDEwCi0jZGVmaW5lIE1BQ0hfU1VOM1ggICAxMQotCi0jZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jZGVmaW5lIENMX1NJWkUgQ09NTUFORF9MSU5FX1NJWkUKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbWFjaHR5cGU7Ci0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jaWYgIWRlZmluZWQoQ09ORklHX0FNSUdBKQotIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKLQl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BTUlHQSkKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9BTUlHQV9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19BTUlHQSAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQU1JR0EpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19BVEFSSSkKLSMgIGRlZmluZSBNQUNIX0lTX0FUQVJJICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX0FUQVJJIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQVRBUkkpCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfQVRBUklfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FUQVJJKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTUFDKQotIyAgZGVmaW5lIE1BQ0hfSVNfTUFDICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKLQl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX01BQyAobTY4a19tYWNodHlwZSA9PSBNQUNIX01BQykKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9NQUNfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfTUFDICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NQUMpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NVTjMpCi0jZGVmaW5lIE1BQ0hfSVNfU1VOMyAoMSkKLSNkZWZpbmUgTUFDSF9TVU4zX09OTFkgKDEpCi0jZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9TVU4zKQotI2Vsc2UKLSNkZWZpbmUgTUFDSF9JU19TVU4zICgwKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX0FQT0xMTykKLSMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BUE9MTE8pCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfQVBPTExPX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQVBPTExPKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3ICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkKLSMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NVk1FMTQ3KQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX01WTUUxNDdfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTVZNRTE0NykKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19NVk1FMTZ4KQotIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4IChtNjhrX21hY2h0eXBlID09IE1BQ0hfTVZNRTE2eCkKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9NVk1FMTZ4X09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01WTUUxNngpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfQlZNRTYwMDApCi0jICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAobTY4a19tYWNodHlwZSA9PSBNQUNIX0JWTUU2MDAwKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX0JWTUU2MDAwX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9CVk1FNjAwMCkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19IUDMwMCkKLSMgIGRlZmluZSBNQUNIX0lTX0hQMzAwICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19IUDMwMCAobTY4a19tYWNodHlwZSA9PSBNQUNIX0hQMzAwKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX0hQMzAwX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX0hQMzAwICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9IUDMwMCkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19RNDApCi0jICBkZWZpbmUgTUFDSF9JU19RNDAgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfUTQwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfUTQwKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX1E0MF9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19RNDAgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1E0MCkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19TVU4zWCkKLSMgIGRlZmluZSBNQUNIX0lTX1NVTjNYICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfSFAzMDApICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19RNDApIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19TVU4zWCAobTY4a19tYWNodHlwZSA9PSBNQUNIX1NVTjNYKQotI2Vsc2UKLSMgIGRlZmluZSBDT05GSUdfU1VOM1hfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1NVTjNYKQotI2VuZGlmCi0KLSNpZm5kZWYgTUFDSF9UWVBFCi0jICBkZWZpbmUgTUFDSF9UWVBFIChtNjhrX21hY2h0eXBlKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLQotICAgIC8qCi0gICAgICogIENQVSwgRlBVIGFuZCBNTVUgdHlwZXMKLSAgICAgKgotICAgICAqICBOb3RlOiB3ZSBtYXkgcmVseSBvbiB0aGUgZm9sbG93aW5nIGVxdWFsaXRpZXM6Ci0gICAgICoKLSAgICAgKiAgICAgIENQVV82ODAyMCA9PSBNTVVfNjg4NTEKLSAgICAgKiAgICAgIENQVV82ODAzMCA9PSBNTVVfNjgwMzAKLSAgICAgKiAgICAgIENQVV82ODA0MCA9PSBGUFVfNjgwNDAgPT0gTU1VXzY4MDQwCi0gICAgICogICAgICBDUFVfNjgwNjAgPT0gRlBVXzY4MDYwID09IE1NVV82ODA2MAotICAgICAqLwotCi0jZGVmaW5lIENQVUJfNjgwMjAgICAgIDAKLSNkZWZpbmUgQ1BVQl82ODAzMCAgICAgMQotI2RlZmluZSBDUFVCXzY4MDQwICAgICAyCi0jZGVmaW5lIENQVUJfNjgwNjAgICAgIDMKLQotI2RlZmluZSBDUFVfNjgwMjAgICAgICAoMTw8Q1BVQl82ODAyMCkKLSNkZWZpbmUgQ1BVXzY4MDMwICAgICAgKDE8PENQVUJfNjgwMzApCi0jZGVmaW5lIENQVV82ODA0MCAgICAgICgxPDxDUFVCXzY4MDQwKQotI2RlZmluZSBDUFVfNjgwNjAgICAgICAoMTw8Q1BVQl82ODA2MCkKLQotI2RlZmluZSBGUFVCXzY4ODgxICAgICAwCi0jZGVmaW5lIEZQVUJfNjg4ODIgICAgIDEKLSNkZWZpbmUgRlBVQl82ODA0MCAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgRlBVICovCi0jZGVmaW5lIEZQVUJfNjgwNjAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIEZQVSAqLwotI2RlZmluZSBGUFVCX1NVTkZQQSAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdW4tMyBGUEEgKi8KLQotI2RlZmluZSBGUFVfNjg4ODEgICAgICAoMTw8RlBVQl82ODg4MSkKLSNkZWZpbmUgRlBVXzY4ODgyICAgICAgKDE8PEZQVUJfNjg4ODIpCi0jZGVmaW5lIEZQVV82ODA0MCAgICAgICgxPDxGUFVCXzY4MDQwKQotI2RlZmluZSBGUFVfNjgwNjAgICAgICAoMTw8RlBVQl82ODA2MCkKLSNkZWZpbmUgRlBVX1NVTkZQQSAgICAgKDE8PEZQVUJfU1VORlBBKQotCi0jZGVmaW5lIE1NVUJfNjg4NTEgICAgIDAKLSNkZWZpbmUgTU1VQl82ODAzMCAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCi0jZGVmaW5lIE1NVUJfNjgwNDAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLwotI2RlZmluZSBNTVVCXzY4MDYwICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KLSNkZWZpbmUgTU1VQl9BUE9MTE8gICAgNCAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VzdG9tIEFwb2xsbyAqLwotI2RlZmluZSBNTVVCX1NVTjMgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXN0b20gU3VuLTMgKi8KLQotI2RlZmluZSBNTVVfNjg4NTEgICAgICAoMTw8TU1VQl82ODg1MSkKLSNkZWZpbmUgTU1VXzY4MDMwICAgICAgKDE8PE1NVUJfNjgwMzApCi0jZGVmaW5lIE1NVV82ODA0MCAgICAgICgxPDxNTVVCXzY4MDQwKQotI2RlZmluZSBNTVVfNjgwNjAgICAgICAoMTw8TU1VQl82ODA2MCkKLSNkZWZpbmUgTU1VX1NVTjMgICAgICAgKDE8PE1NVUJfU1VOMykKLSNkZWZpbmUgTU1VX0FQT0xMTyAgICAgKDE8PE1NVUJfQVBPTExPKQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19jcHV0eXBlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19mcHV0eXBlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19tbXV0eXBlOwotI2lmZGVmIENPTkZJR19WTUUKLWV4dGVybiB1bnNpZ25lZCBsb25nIHZtZV9icmR0eXBlOwotI2VuZGlmCi0KLSAgICAvKgotICAgICAqICBtNjhrX2lzMDQwb3IwNjAgaXMgIT0gMCBmb3IgYSAnMDQwIG9yIGhpZ2hlcjsKLSAgICAgKiAgdXNlZCBudW1iZXJzIGFyZSA0IGZvciA2ODA0MCBhbmQgNiBmb3IgNjgwNjAuCi0gICAgICovCi0KLWV4dGVybiBpbnQgbTY4a19pczA0MG9yMDYwOwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMjApCi0jICBkZWZpbmUgQ1BVX0lTXzAyMCAoMCkKLSMgIGRlZmluZSBNTVVfSVNfODUxICgwKQotIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDMwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKLSMgIGRlZmluZSBDUFVfSVNfMDIwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwMjApCi0jICBkZWZpbmUgTU1VX0lTXzg1MSAobTY4a19tbXV0eXBlICYgTU1VXzY4ODUxKQotIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQkvKiBTdW4zIG5vdCBzdXBwb3J0ZWQgd2l0aCBvdGhlciBDUFUgZW5hYmxlZCAqLwotI2Vsc2UKLSMgIGRlZmluZSBDUFVfTTY4MDIwX09OTFkKLSMgIGRlZmluZSBDUFVfSVNfMDIwICgxKQotI2lmZGVmIE1BQ0hfU1VOM19PTkxZCi0jICBkZWZpbmUgTU1VX0lTX1NVTjMgKDEpCi0jICBkZWZpbmUgTU1VX0lTXzg1MSAoMCkKLSNlbHNlCi0jICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCi0jICBkZWZpbmUgTU1VX0lTXzg1MSAoMSkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDMwKQotIyAgZGVmaW5lIENQVV9JU18wMzAgKDApCi0jICBkZWZpbmUgTU1VX0lTXzAzMCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCi0jICBkZWZpbmUgQ1BVX0lTXzAzMCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDMwKQotIyAgZGVmaW5lIE1NVV9JU18wMzAgKG02OGtfbW11dHlwZSAmIE1NVV82ODAzMCkKLSNlbHNlCi0jICBkZWZpbmUgQ1BVX002ODAzMF9PTkxZCi0jICBkZWZpbmUgQ1BVX0lTXzAzMCAoMSkKLSMgIGRlZmluZSBNTVVfSVNfMDMwICgxKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDQwKQotIyAgZGVmaW5lIENQVV9JU18wNDAgKDApCi0jICBkZWZpbmUgTU1VX0lTXzA0MCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCi0jICBkZWZpbmUgQ1BVX0lTXzA0MCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDQwKQotIyAgZGVmaW5lIE1NVV9JU18wNDAgKG02OGtfbW11dHlwZSAmIE1NVV82ODA0MCkKLSNlbHNlCi0jICBkZWZpbmUgQ1BVX002ODA0MF9PTkxZCi0jICBkZWZpbmUgQ1BVX0lTXzA0MCAoMSkKLSMgIGRlZmluZSBNTVVfSVNfMDQwICgxKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDYwKQotIyAgZGVmaW5lIENQVV9JU18wNjAgKDApCi0jICBkZWZpbmUgTU1VX0lTXzA2MCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApCi0jICBkZWZpbmUgQ1BVX0lTXzA2MCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDYwKQotIyAgZGVmaW5lIE1NVV9JU18wNjAgKG02OGtfbW11dHlwZSAmIE1NVV82ODA2MCkKLSNlbHNlCi0jICBkZWZpbmUgQ1BVX002ODA2MF9PTkxZCi0jICBkZWZpbmUgQ1BVX0lTXzA2MCAoMSkKLSMgIGRlZmluZSBNTVVfSVNfMDYwICgxKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDIwKSAmJiAhZGVmaW5lZChDT05GSUdfTTY4MDMwKQotIyAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICgwKQotI2Vsc2UKLSMgIGRlZmluZSBDUFVfTTY4MDIwX09SX002ODAzMAotIyAgaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCi0jICAgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoIW02OGtfaXMwNDBvcjA2MCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIENQVV9NNjgwMjBfT1JfTTY4MDMwX09OTFkKLSMgICAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICgxKQotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX002ODA0MCkgJiYgIWRlZmluZWQoQ09ORklHX002ODA2MCkKLSMgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAoMCkKLSNlbHNlCi0jICBkZWZpbmUgQ1BVX002ODA0MF9PUl9NNjgwNjAKLSMgIGlmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQotIyAgICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKG02OGtfaXMwNDBvcjA2MCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIENQVV9NNjgwNDBfT1JfTTY4MDYwX09OTFkKLSMgICAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwICgxKQotIyAgZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIENQVV9UWVBFIChtNjhrX2NwdXR5cGUpCi0KLSNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKLSMgIGlmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZCi0jICAgIGRlZmluZSBGUFVfSVNfRU1VICgxKQotIyAgZWxzZQotIyAgICBkZWZpbmUgRlBVX0lTX0VNVSAoIW02OGtfZnB1dHlwZSkKLSMgIGVuZGlmCi0jZWxzZQotIyAgZGVmaW5lIEZQVV9JU19FTVUgKDApCi0jZW5kaWYKLQotCi0gICAgLyoKLSAgICAgKiAgTWlzY2VsbGFuZW91cwotICAgICAqLwotCi0jZGVmaW5lIE5VTV9NRU1JTkZPCTQKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0cnVjdCBtZW1faW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgY2h1bmsgKi8KLQl1bnNpZ25lZCBsb25nIHNpemU7CQkvKiBsZW5ndGggb2YgbWVtb3J5IGNodW5rIChpbiBieXRlcykgKi8KLX07Ci0KLWV4dGVybiBpbnQgbTY4a19udW1fbWVtb3J5OwkJLyogIyBvZiBtZW1vcnkgYmxvY2tzIGZvdW5kIChhbmQgdXNlZCkgKi8KLWV4dGVybiBpbnQgbTY4a19yZWFsbnVtX21lbW9yeTsJCS8qIHJlYWwgIyBvZiBtZW1vcnkgYmxvY2tzIGZvdW5kICovCi1leHRlcm4gc3RydWN0IG1lbV9pbmZvIG02OGtfbWVtb3J5W05VTV9NRU1JTkZPXTsvKiBtZW1vcnkgZGVzY3JpcHRpb24gKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX002OEtfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXBfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVkMjg2Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXBfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vc2V0dXBfbW0uaD4KLQotLyogV2UgaGF2ZSBhIGJpZ2dlciBjb21tYW5kIGxpbmUgYnVmZmVyLiAqLwotI3VuZGVmIENPTU1BTkRfTElORV9TSVpFCi0KLSNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCi0KLSNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNTEyCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAppbmRleCBiZmY2ZDQwLi41MjNkYjJhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKQEAgLTEsNSArMSwyNCBAQAorI2lmbmRlZiBfQVNNX002OGtfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTTY4a19TSUdDT05URVhUX0gKKworc3RydWN0IHNpZ2NvbnRleHQgeworCXVuc2lnbmVkIGxvbmcgIHNjX21hc2s7CQkvKiBvbGQgc2lnbWFzayAqLworCXVuc2lnbmVkIGxvbmcgIHNjX3VzcDsJCS8qIG9sZCB1c2VyIHN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBzY19kMDsKKwl1bnNpZ25lZCBsb25nICBzY19kMTsKKwl1bnNpZ25lZCBsb25nICBzY19hMDsKKwl1bnNpZ25lZCBsb25nICBzY19hMTsKICNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInNpZ2NvbnRleHRfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAic2lnY29udGV4dF9tbS5oIgorCXVuc2lnbmVkIGxvbmcgIHNjX2E1OworI2VuZGlmCisJdW5zaWduZWQgc2hvcnQgc2Nfc3I7CisJdW5zaWduZWQgbG9uZyAgc2NfcGM7CisJdW5zaWduZWQgc2hvcnQgc2NfZm9ybWF0dmVjOworI2lmbmRlZiBfX3VDbGludXhfXworCXVuc2lnbmVkIGxvbmcgIHNjX2ZwcmVnc1syKjNdOyAgLyogcm9vbSBmb3IgdHdvIGZwIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgIHNjX2ZwY250bFszXTsKKwl1bnNpZ25lZCBjaGFyICBzY19mcHN0YXRlWzIxNl07CisjZW5kaWYKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZmJlMzQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhrX1NJR0NPTlRFWFRfSAotI2RlZmluZSBfQVNNX002OGtfU0lHQ09OVEVYVF9ICi0KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nICBzY19tYXNrOwkJLyogb2xkIHNpZ21hc2sgKi8KLQl1bnNpZ25lZCBsb25nICBzY191c3A7CQkvKiBvbGQgdXNlciBzdGFjayBwb2ludGVyICovCi0JdW5zaWduZWQgbG9uZyAgc2NfZDA7Ci0JdW5zaWduZWQgbG9uZyAgc2NfZDE7Ci0JdW5zaWduZWQgbG9uZyAgc2NfYTA7Ci0JdW5zaWduZWQgbG9uZyAgc2NfYTE7Ci0JdW5zaWduZWQgc2hvcnQgc2Nfc3I7Ci0JdW5zaWduZWQgbG9uZyAgc2NfcGM7Ci0JdW5zaWduZWQgc2hvcnQgc2NfZm9ybWF0dmVjOwotCXVuc2lnbmVkIGxvbmcgIHNjX2ZwcmVnc1syKjNdOyAgLyogcm9vbSBmb3IgdHdvIGZwIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIGxvbmcgIHNjX2ZwY250bFszXTsKLQl1bnNpZ25lZCBjaGFyICBzY19mcHN0YXRlWzIxNl07Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmMyOTNmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S05PTU1VX1NJR0NPTlRFWFRfSAotI2RlZmluZSBfQVNNX002OEtOT01NVV9TSUdDT05URVhUX0gKLQotc3RydWN0IHNpZ2NvbnRleHQgewotCXVuc2lnbmVkIGxvbmcgIHNjX21hc2s7IAkvKiBvbGQgc2lnbWFzayAqLwotCXVuc2lnbmVkIGxvbmcgIHNjX3VzcDsJCS8qIG9sZCB1c2VyIHN0YWNrIHBvaW50ZXIgKi8KLQl1bnNpZ25lZCBsb25nICBzY19kMDsKLQl1bnNpZ25lZCBsb25nICBzY19kMTsKLQl1bnNpZ25lZCBsb25nICBzY19hMDsKLQl1bnNpZ25lZCBsb25nICBzY19hMTsKLQl1bnNpZ25lZCBsb25nICBzY19hNTsKLQl1bnNpZ25lZCBzaG9ydCBzY19zcjsKLQl1bnNpZ25lZCBsb25nICBzY19wYzsKLQl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCmluZGV4IDYxMjE5ZDcuLmNhN2RkZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApAQCAtMSw1ICsxLDk3IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJzaWdpbmZvX25vLmgiCisjaWZuZGVmIF9NNjhLX1NJR0lORk9fSAorI2RlZmluZSBfTTY4S19TSUdJTkZPX0gKKworI2lmbmRlZiBfX3VDbGludXhfXworI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCisjZGVmaW5lIEhBVkVfQVJDSF9DT1BZX1NJR0lORk8KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjaWZuZGVmIF9fdUNsaW51eF9fCisKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfZXJybm87CisJaW50IHNpX2NvZGU7CisKKwl1bmlvbiB7CisJCWludCBfcGFkW1NJX1BBRF9TSVpFXTsKKworCQkvKiBraWxsKCkgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KKwkJfSBfa2lsbDsKKworCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KKwkJc3RydWN0IHsKKwkJCXRpbWVyX3QgX3RpZDsJCS8qIHRpbWVyIGlkICovCisJCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCisJCQljaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOworCQkJc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLworCQkJaW50IF9zeXNfcHJpdmF0ZTsgICAgICAgLyogbm90IHRvIGJlIHBhc3NlZCB0byB1c2VyICovCisJCX0gX3RpbWVyOworCisJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCXNpZ3ZhbF90IF9zaWd2YWw7CisJCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX3J0OworCisJCS8qIFNJR0NITEQgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KKwkJCWNsb2NrX3QgX3V0aW1lOworCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX3NpZ2NobGQ7CisKKwkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLworCQlzdHJ1Y3QgeworCQkJdm9pZCAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKwkJfSBfc2lnZmF1bHQ7CisKKwkJLyogU0lHUE9MTCAqLworCQlzdHJ1Y3QgeworCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KKwkJCWludCBfZmQ7CisJCX0gX3NpZ3BvbGw7CisJfSBfc2lmaWVsZHM7Cit9IHNpZ2luZm9fdDsKKworI2RlZmluZSBVSUQxNl9TSUdJTkZPX0NPTVBBVF9ORUVERUQKKworLyoKKyAqIEhvdyB0aGVzZSBmaWVsZHMgYXJlIHRvIGJlIGFjY2Vzc2VkLgorICovCisjdW5kZWYgc2lfdWlkCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkMzIKKyNkZWZpbmUgc2lfdWlkMTYJX3NpZmllbGRzLl9raWxsLl91aWQKICNlbHNlCi0jaW5jbHVkZSAic2lnaW5mb19tbS5oIgorI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9zaWdpbmZvKHN0cnVjdCBzaWdpbmZvICp0bywgc3RydWN0IHNpZ2luZm8gKmZyb20pCit7CisJaWYgKGZyb20tPnNpX2NvZGUgPCAwKQorCQltZW1jcHkodG8sIGZyb20sIHNpemVvZigqdG8pKTsKKwllbHNlCisJCS8qIF9zaWdjaGxkIGlzIGN1cnJlbnRseSB0aGUgbGFyZ2VzdCBrbm93IHVuaW9uIG1lbWJlciAqLworCQltZW1jcHkodG8sIGZyb20sIDMqc2l6ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSk7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIV9fdUNsaW51eF9fICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm9fbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YThkNmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm9fbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSNpZm5kZWYgX002OEtfU0lHSU5GT19ICi0jZGVmaW5lIF9NNjhLX1NJR0lORk9fSAotCi0jZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKLSNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgotCi10eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKLQlpbnQgc2lfc2lnbm87Ci0JaW50IHNpX2Vycm5vOwotCWludCBzaV9jb2RlOwotCi0JdW5pb24gewotCQlpbnQgX3BhZFtTSV9QQURfU0laRV07Ci0KLQkJLyoga2lsbCgpICovCi0JCXN0cnVjdCB7Ci0JCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX2tpbGw7Ci0KLQkJLyogUE9TSVguMWIgdGltZXJzICovCi0JCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLwotCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwotCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKLQkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KLQkJCWludCBfc3lzX3ByaXZhdGU7ICAgICAgIC8qIG5vdCB0byBiZSBwYXNzZWQgdG8gdXNlciAqLwotCQl9IF90aW1lcjsKLQotCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCi0JCXN0cnVjdCB7Ci0JCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlzaWd2YWxfdCBfc2lndmFsOwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9ydDsKLQotCQkvKiBTSUdDSExEICovCi0JCXN0cnVjdCB7Ci0JCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwotCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCi0JCQljbG9ja190IF91dGltZTsKLQkJCWNsb2NrX3QgX3N0aW1lOwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9zaWdjaGxkOwotCi0JCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KLQkJc3RydWN0IHsKLQkJCXZvaWQgKl9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCi0JCX0gX3NpZ2ZhdWx0OwotCi0JCS8qIFNJR1BPTEwgKi8KLQkJc3RydWN0IHsKLQkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCi0JCQlpbnQgX2ZkOwotCQl9IF9zaWdwb2xsOwotCX0gX3NpZmllbGRzOwotfSBzaWdpbmZvX3Q7Ci0KLSNkZWZpbmUgVUlEMTZfU0lHSU5GT19DT01QQVRfTkVFREVECi0KLS8qCi0gKiBIb3cgdGhlc2UgZmllbGRzIGFyZSB0byBiZSBhY2Nlc3NlZC4KLSAqLwotI3VuZGVmIHNpX3VpZAotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZDMyCi0jZGVmaW5lIHNpX3VpZDE2CV9zaWZpZWxkcy5fa2lsbC5fdWlkCi0jZWxzZQotI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkCi0jZW5kaWYKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9zaWdpbmZvKHN0cnVjdCBzaWdpbmZvICp0bywgc3RydWN0IHNpZ2luZm8gKmZyb20pCi17Ci0JaWYgKGZyb20tPnNpX2NvZGUgPCAwKQotCQltZW1jcHkodG8sIGZyb20sIHNpemVvZigqdG8pKTsKLQllbHNlCi0JCS8qIF9zaWdjaGxkIGlzIGN1cnJlbnRseSB0aGUgbGFyZ2VzdCBrbm93IHVuaW9uIG1lbWJlciAqLwotCQltZW1jcHkodG8sIGZyb20sIDMqc2l6ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSk7Ci19Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm9fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxOGU1ZjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm9fbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1NJR0lORk9fSAotI2RlZmluZSBfTTY4S05PTU1VX1NJR0lORk9fSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWwuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWwuaAppbmRleCAzYzE5OTg4Li4wODc4OGZkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbC5oCkBAIC0xLDUgKzEsMjEzIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJzaWduYWxfbm8uaCIKKyNpZm5kZWYgX002OEtfU0lHTkFMX0gKKyNkZWZpbmUgX002OEtfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCitzdHJ1Y3Qgc2lnaW5mbzsKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCisgICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLworCisjZGVmaW5lIF9OU0lHCQk2NAorI2RlZmluZSBfTlNJR19CUFcJMzIKKyNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOworfSBzaWdzZXRfdDsKKwogI2Vsc2UKLSNpbmNsdWRlICJzaWduYWxfbW0uaCIKLSNlbmRpZgorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKKyNkZWZpbmUgTlNJRwkJMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgorICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCisgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KKyAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KKyAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgorICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCisgKgorICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQorICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAorI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAorI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCisjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECisKKy8qCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgorCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IG9sZF9zaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJb2xkX3NpZ3NldF90IHNhX21hc2s7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKK307CisKK3N0cnVjdCBzaWdhY3Rpb24geworCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKwlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKKwlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cit9OworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCBfX3VzZXIgKnNzX3NwOworCWludCBzc19mbGFnczsKKwlzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorCisjaWZuZGVmIF9fdUNsaW51eF9fCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKworc3RhdGljIGlubGluZSB2b2lkIHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlhc20gKCJiZnNldCAlMHslMSwjMX0iCisJCTogIitvZCIgKCpzZXQpCisJCTogImlkIiAoKF9zaWcgLSAxKSBeIDMxKQorCQk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCWFzbSAoImJmY2xyICUweyUxLCMxfSIKKwkJOiAiK29kIiAoKnNldCkKKwkJOiAiaWQiICgoX3NpZyAtIDEpIF4gMzEpCisJCTogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKKwlyZXR1cm4gMSAmIChzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddID4+IChzaWcgJSBfTlNJR19CUFcpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19nZW5fc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJaW50IHJldDsKKwlhc20gKCJiZmV4dHUgJTF7JTIsIzF9LCUwIgorCQk6ICI9ZCIgKHJldCkKKwkJOiAib2QiICgqc2V0KSwgImlkIiAoKF9zaWctMSkgXiAzMSkKKwkJOiAiY2MiKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIHNpZ2lzbWVtYmVyKHNldCxzaWcpCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpID8JCVwKKwkgX19jb25zdF9zaWdpc21lbWJlcihzZXQsc2lnKSA6CQlcCisJIF9fZ2VuX3NpZ2lzbWVtYmVyKHNldCxzaWcpKQorCitzdGF0aWMgaW5saW5lIGludCBzaWdmaW5kaW53b3JkKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlhc20gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCisJCTogIj1kIiAod29yZCkKKwkJOiAiZCIgKHdvcmQgJiAtd29yZCkKKwkJOiAiY2MiKTsKKwlyZXR1cm4gd29yZCBeIDMxOworfQorCitzdHJ1Y3QgcHRfcmVnczsKK2V4dGVybiB2b2lkIHB0cmFjZV9zaWduYWxfZGVsaXZlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqY29va2llKTsKKworI2Vsc2UKKworI3VuZGVmIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKKyNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX191Q2xpbnV4X18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGI4YTgxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWxfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NJR05BTF9ICi0jZGVmaW5lIF9NNjhLX1NJR05BTF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLwotc3RydWN0IHNpZ2luZm87Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQotICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KLQotI2RlZmluZSBfTlNJRwkJNjQKLSNkZWZpbmUgX05TSUdfQlBXCTMyCi0jZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKLX0gc2lnc2V0X3Q7Ci0KLSNlbHNlCi0vKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KLQotI2RlZmluZSBOU0lHCQkzMgotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZGVmaW5lIFNJR0hVUAkJIDEKLSNkZWZpbmUgU0lHSU5UCQkgMgotI2RlZmluZSBTSUdRVUlUCQkgMwotI2RlZmluZSBTSUdJTEwJCSA0Ci0jZGVmaW5lIFNJR1RSQVAJCSA1Ci0jZGVmaW5lIFNJR0FCUlQJCSA2Ci0jZGVmaW5lIFNJR0lPVAkJIDYKLSNkZWZpbmUgU0lHQlVTCQkgNwotI2RlZmluZSBTSUdGUEUJCSA4Ci0jZGVmaW5lIFNJR0tJTEwJCSA5Ci0jZGVmaW5lIFNJR1VTUjEJCTEwCi0jZGVmaW5lIFNJR1NFR1YJCTExCi0jZGVmaW5lIFNJR1VTUjIJCTEyCi0jZGVmaW5lIFNJR1BJUEUJCTEzCi0jZGVmaW5lIFNJR0FMUk0JCTE0Ci0jZGVmaW5lIFNJR1RFUk0JCTE1Ci0jZGVmaW5lIFNJR1NUS0ZMVAkxNgotI2RlZmluZSBTSUdDSExECQkxNwotI2RlZmluZSBTSUdDT05UCQkxOAotI2RlZmluZSBTSUdTVE9QCQkxOQotI2RlZmluZSBTSUdUU1RQCQkyMAotI2RlZmluZSBTSUdUVElOCQkyMQotI2RlZmluZSBTSUdUVE9VCQkyMgotI2RlZmluZSBTSUdVUkcJCTIzCi0jZGVmaW5lIFNJR1hDUFUJCTI0Ci0jZGVmaW5lIFNJR1hGU1oJCTI1Ci0jZGVmaW5lIFNJR1ZUQUxSTQkyNgotI2RlZmluZSBTSUdQUk9GCQkyNwotI2RlZmluZSBTSUdXSU5DSAkyOAotI2RlZmluZSBTSUdJTwkJMjkKLSNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KLS8qCi0jZGVmaW5lIFNJR0xPU1QJCTI5Ci0qLwotI2RlZmluZSBTSUdQV1IJCTMwCi0jZGVmaW5lIFNJR1NZUwkJMzEKLSNkZWZpbmUJU0lHVU5VU0VECTMxCi0KLS8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCi0jZGVmaW5lIFNJR1JUTUlOCTMyCi0jZGVmaW5lIFNJR1JUTUFYCV9OU0lHCi0KLS8qCi0gKiBTQV9GTEFHUyB2YWx1ZXM6Ci0gKgotICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKLSAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgotICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgotICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCi0gKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KLSAqCi0gKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCi0gKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCi0gKi8KLSNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKLSNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIKLSNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0Ci0jZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAotI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKLSNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCi0jZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCi0KLSNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKLSNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLQotLyoKLSAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCi0gKi8KLSNkZWZpbmUgU1NfT05TVEFDSwkxCi0jZGVmaW5lIFNTX0RJU0FCTEUJMgotCi0jZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKLSNkZWZpbmUgU0lHU1RLU1oJODE5MgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi1zdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwotfTsKLQotc3RydWN0IHNpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwotCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLXN0cnVjdCBrX3NpZ2FjdGlvbiB7Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYTsKLX07Ci0jZWxzZQotLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCi0KLXN0cnVjdCBzaWdhY3Rpb24gewotCXVuaW9uIHsKLQkgIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOwotCSAgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKLQl9IF91OwotCXNpZ3NldF90IHNhX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwotfTsKLQotI2RlZmluZSBzYV9oYW5kbGVyCV91Ll9zYV9oYW5kbGVyCi0jZGVmaW5lIHNhX3NpZ2FjdGlvbglfdS5fc2Ffc2lnYWN0aW9uCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLXR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKLQl2b2lkIF9fdXNlciAqc3Nfc3A7Ci0JaW50IHNzX2ZsYWdzOwotCXNpemVfdCBzc19zaXplOwotfSBzdGFja190OwotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+Ci0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQotewotCWFzbSAoImJmc2V0ICUweyUxLCMxfSIKLQkJOiAiK29kIiAoKnNldCkKLQkJOiAiaWQiICgoX3NpZyAtIDEpIF4gMzEpCi0JCTogImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JYXNtICgiYmZjbHIgJTB7JTEsIzF9IgotCQk6ICIrb2QiICgqc2V0KQotCQk6ICJpZCIgKChfc2lnIC0gMSkgXiAzMSkKLQkJOiAiY2MiKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19jb25zdF9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKLXsKLQl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwotCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gPj4gKHNpZyAlIF9OU0lHX0JQVykpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2dlbl9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKLXsKLQlpbnQgcmV0OwotCWFzbSAoImJmZXh0dSAlMXslMiwjMX0sJTAiCi0JCTogIj1kIiAocmV0KQotCQk6ICJvZCIgKCpzZXQpLCAiaWQiICgoX3NpZy0xKSBeIDMxKQotCQk6ICJjYyIpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgc2lnaXNtZW1iZXIoc2V0LHNpZykJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpZykgPwkJXAotCSBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNldCxzaWcpIDoJCVwKLQkgX19nZW5fc2lnaXNtZW1iZXIoc2V0LHNpZykpCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQotewotCWFzbSAoImJmZmZvICUxeyMwLCMwfSwlMCIKLQkJOiAiPWQiICh3b3JkKQotCQk6ICJkIiAod29yZCAmIC13b3JkKQotCQk6ICJjYyIpOwotCXJldHVybiB3b3JkIF4gMzE7Ci19Ci0KLXN0cnVjdCBwdF9yZWdzOwotZXh0ZXJuIHZvaWQgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpjb29raWUpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX002OEtfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWxfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWxfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2YzA4Yi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1NJR05BTF9ICi0jZGVmaW5lIF9NNjhLTk9NTVVfU0lHTkFMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCi1zdHJ1Y3Qgc2lnaW5mbzsKLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qIE1vc3QgdGhpbmdzIHNob3VsZCBiZSBjbGVhbiBlbm91Z2ggdG8gcmVkZWZpbmUgdGhpcyBhdCB3aWxsLCBpZiBjYXJlCi0gICBpcyB0YWtlbiB0byBtYWtlIGxpYmMgbWF0Y2guICAqLwotCi0jZGVmaW5lIF9OU0lHCQk2NAotI2RlZmluZSBfTlNJR19CUFcJMzIKLSNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOwotfSBzaWdzZXRfdDsKLQotI2Vsc2UKLS8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLwotCi0jZGVmaW5lIE5TSUcJCTMyCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNkZWZpbmUgU0lHSFVQCQkgMQotI2RlZmluZSBTSUdJTlQJCSAyCi0jZGVmaW5lIFNJR1FVSVQJCSAzCi0jZGVmaW5lIFNJR0lMTAkJIDQKLSNkZWZpbmUgU0lHVFJBUAkJIDUKLSNkZWZpbmUgU0lHQUJSVAkJIDYKLSNkZWZpbmUgU0lHSU9UCQkgNgotI2RlZmluZSBTSUdCVVMJCSA3Ci0jZGVmaW5lIFNJR0ZQRQkJIDgKLSNkZWZpbmUgU0lHS0lMTAkJIDkKLSNkZWZpbmUgU0lHVVNSMQkJMTAKLSNkZWZpbmUgU0lHU0VHVgkJMTEKLSNkZWZpbmUgU0lHVVNSMgkJMTIKLSNkZWZpbmUgU0lHUElQRQkJMTMKLSNkZWZpbmUgU0lHQUxSTQkJMTQKLSNkZWZpbmUgU0lHVEVSTQkJMTUKLSNkZWZpbmUgU0lHU1RLRkxUCTE2Ci0jZGVmaW5lIFNJR0NITEQJCTE3Ci0jZGVmaW5lIFNJR0NPTlQJCTE4Ci0jZGVmaW5lIFNJR1NUT1AJCTE5Ci0jZGVmaW5lIFNJR1RTVFAJCTIwCi0jZGVmaW5lIFNJR1RUSU4JCTIxCi0jZGVmaW5lIFNJR1RUT1UJCTIyCi0jZGVmaW5lIFNJR1VSRwkJMjMKLSNkZWZpbmUgU0lHWENQVQkJMjQKLSNkZWZpbmUgU0lHWEZTWgkJMjUKLSNkZWZpbmUgU0lHVlRBTFJNCTI2Ci0jZGVmaW5lIFNJR1BST0YJCTI3Ci0jZGVmaW5lIFNJR1dJTkNICTI4Ci0jZGVmaW5lIFNJR0lPCQkyOQotI2RlZmluZSBTSUdQT0xMCQlTSUdJTwotLyoKLSNkZWZpbmUgU0lHTE9TVAkJMjkKLSovCi0jZGVmaW5lIFNJR1BXUgkJMzAKLSNkZWZpbmUgU0lHU1lTCQkzMQotI2RlZmluZQlTSUdVTlVTRUQJMzEKLQotLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KLSNkZWZpbmUgU0lHUlRNSU4JMzIKLSNkZWZpbmUgU0lHUlRNQVgJX05TSUcKLQotLyoKLSAqIFNBX0ZMQUdTIHZhbHVlczoKLSAqCi0gKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQotICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCi0gKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCi0gKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KLSAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgotICoKLSAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKLSAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KLSAqLwotI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgotI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKLSNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCi0jZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKLSNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKLQotI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgotI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotCi0vKiAKLSAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCi0gKi8KLSNkZWZpbmUgU1NfT05TVEFDSwkxCi0jZGVmaW5lIFNTX0RJU0FCTEUJMgotCi0jZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKLSNkZWZpbmUgU0lHU1RLU1oJODE5MgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi1zdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Ci19OwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0Jdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKLQlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi1zdHJ1Y3Qga19zaWdhY3Rpb24gewotCXN0cnVjdCBzaWdhY3Rpb24gc2E7Ci19OwotI2Vsc2UKLS8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQl1bmlvbiB7Ci0JICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKLQkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7Ci0JfSBfdTsKLQlzaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0Jdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKLX07Ci0KLSNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgotI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi10eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7Ci0Jdm9pZCAqc3Nfc3A7Ci0JaW50IHNzX2ZsYWdzOwotCXNpemVfdCBzc19zaXplOwotfSBzdGFja190OwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLSN1bmRlZiBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCi0KLSNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX002OEtOT01NVV9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGRiYzY0ZTkuLmNhODdmOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA3ZDdkZGUxLi45ZTMwNTRlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNSArMSwyNyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic3dhYl9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJzd2FiX21tLmgiCisjaWZuZGVmIF9NNjhLX1NXQUJfSAorI2RlZmluZSBfTTY4S19TV0FCX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworCisjaWYgZGVmaW5lZCAoX19tY2Zpc2FhcGx1c19fKSB8fCBkZWZpbmVkIChfX21jZmlzYWNfXykKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlfX2FzbV9fKCJieXRlcmV2ICUwIiA6ICI9ZCIgKHZhbCkgOiAiMCIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCisjZWxpZiAhZGVmaW5lZChfX3VDbGludXhfXykKKworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fYXJjaF9zd2FiMzIoX191MzIgdmFsKQoreworCV9fYXNtX18oInJvbHcgIzgsJTA7IHN3YXAgJTA7IHJvbHcgIzgsJTAiIDogIj1kIiAodmFsKSA6ICIwIiAodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCiAjZW5kaWYKKworI2VuZGlmIC8qIF9NNjhLX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjFlMzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpZm5kZWYgX002OEtfU1dBQl9ICi0jZGVmaW5lIF9NNjhLX1NXQUJfSAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKLXsKLQlfX2FzbV9fKCJyb2x3ICM4LCUwOyBzd2FwICUwOyByb2x3ICM4LCUwIiA6ICI9ZCIgKHZhbCkgOiAiMCIgKHZhbCkpOwotCXJldHVybiB2YWw7Ci19Ci0jZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgotCi0jZW5kaWYgLyogX002OEtfU1dBQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYl9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4MjI1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYl9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1NXQUJfSAotI2RlZmluZSBfTTY4S05PTU1VX1NXQUJfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQotIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19tY2Zpc2FhcGx1c19fKSB8fCBkZWZpbmVkIChfX21jZmlzYWNfXykKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKLXsKLQlhc20oCi0JCQkiYnl0ZXJldiAlMCIKLQkJCTogIj1kIiAodmFsKQotCQkJOiAiMCIgKHZhbCkKLQkgICApOwotCXJldHVybiB2YWw7Ci19Ci0KLSNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfU1dBQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggZGYxZDlkNC4uM2MxOTAyNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMSw1ICsxLDM3MiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAidW5pc3RkX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInVuaXN0ZF9tbS5oIgotI2VuZGlmCisjaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCisjZGVmaW5lIF9fTlJfZXhpdAkJICAxCisjZGVmaW5lIF9fTlJfZm9yawkJICAyCisjZGVmaW5lIF9fTlJfcmVhZAkJICAzCisjZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAorI2RlZmluZSBfX05SX29wZW4JCSAgNQorI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKKyNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKKyNkZWZpbmUgX19OUl9jcmVhdAkJICA4CisjZGVmaW5lIF9fTlJfbGluawkJICA5CisjZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKKyNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQorI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKKyNkZWZpbmUgX19OUl90aW1lCQkgMTMKKyNkZWZpbmUgX19OUl9ta25vZAkJIDE0CisjZGVmaW5lIF9fTlJfY2htb2QJCSAxNQorI2RlZmluZSBfX05SX2Nob3duCQkgMTYKKyNkZWZpbmUgX19OUl9icmVhawkJIDE3CisjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CisjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQorI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCisjZGVmaW5lIF9fTlJfbW91bnQJCSAyMQorI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKKyNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAorI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgorI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKKyNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CisjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQorI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKKyNkZWZpbmUgX19OUl9zdHR5CQkgMzEKKyNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKyNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMworI2RlZmluZSBfX05SX25pY2UJCSAzNAorI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKKyNkZWZpbmUgX19OUl9zeW5jCQkgMzYKKyNkZWZpbmUgX19OUl9raWxsCQkgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAorI2RlZmluZSBfX05SX21rZGlyCQkgMzkKKyNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCisjZGVmaW5lIF9fTlJfZHVwCQkgNDEKKyNkZWZpbmUgX19OUl9waXBlCQkgNDIKKyNkZWZpbmUgX19OUl90aW1lcwkJIDQzCisjZGVmaW5lIF9fTlJfcHJvZgkJIDQ0CisjZGVmaW5lIF9fTlJfYnJrCQkgNDUKKyNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgorI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CisjZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9hY2N0CQkgNTEKKyNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKKyNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKyNkZWZpbmUgX19OUl9pb2N0bAkJIDU0CisjZGVmaW5lIF9fTlJfZmNudGwJCSA1NQorI2RlZmluZSBfX05SX21weAkJIDU2CisjZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3CisjZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKKyNkZWZpbmUgX19OUl91bWFzawkJIDYwCisjZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKKyNkZWZpbmUgX19OUl91c3RhdAkJIDYyCisjZGVmaW5lIF9fTlJfZHVwMgkJIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0CisjZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1CisjZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NworI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKKyNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAorI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKKyNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MworI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKKyNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKKyNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NworI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5CisjZGVmaW5lIF9fTlJfbW1hcAkJIDkwCisjZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKKyNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3CisjZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQorI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAorI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCisjZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAorI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1CisjZGVmaW5lIF9fTlJfc3RhdAkJMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQJCTEwNworI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKKyNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5CisjZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKKyNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKKyNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKKyNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKKyNkZWZpbmUgX19OUl9pcGMJCTExNworI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQorI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQorI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgorI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3CisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4CisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKKyNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQorI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgorI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCisjZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0CisjZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKKyNkZWZpbmUgX19OUl9mbG9jawkJMTQzCisjZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAorI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKKyNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgorI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKKyNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKKyNkZWZpbmUgX19OUl9tbG9jawkJMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCisjZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgorI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQorI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAorI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1CisjZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2CisjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NworI2RlZmluZSBfX05SX3BvbGwJCTE2OAorI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKKyNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKKyNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCisjZGVmaW5lIF9fTlJfbGNob3duCQkxODIKKyNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MworI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKKyNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3CisjZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl92Zm9yawkJMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCisjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAorI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1CisjZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3CisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4CisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQorI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQorI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1CisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2CisjZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNworI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQorI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQorI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAorI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCisjZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgorI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAorI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1CisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgorI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3CisjZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQorI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0CisjZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgorI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNworI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAorI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQorI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQorI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKKyNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgorI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgorI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAorI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1CisjZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3CisjZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKKyNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0CisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgorI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3CisjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4CisjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5CisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCisjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODIKKyNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODMKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjg0CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjg1CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyODYKKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTI4NworI2RlZmluZSBfX05SX29wZW5hdAkJMjg4CisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg5CisjZGVmaW5lIF9fTlJfbWtub2RhdAkJMjkwCisjZGVmaW5lIF9fTlJfZmNob3duYXQJCTI5MQorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkyCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJMjk0CisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5NQorI2RlZmluZSBfX05SX2xpbmthdAkJMjk2CisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTcKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTgKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk5CisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDAKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzAxCisjZGVmaW5lIF9fTlJfcHBvbGwJCTMwMgorI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMwMworI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDQKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzA1CisjZGVmaW5lIF9fTlJfc3BsaWNlCQkzMDYKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzA3CisjZGVmaW5lIF9fTlJfdGVlCQkzMDgKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJMzA5CisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzEwCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMzExCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMzEyCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzEzCisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTQKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKKyNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMjMKKyNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzI0CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMjUKKyNkZWZpbmUgX19OUl9kdXAzCQkzMjYKKyNkZWZpbmUgX19OUl9waXBlMgkJMzI3CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjgKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBOUl9zeXNjYWxscwkJMzI5CisKKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgorCisvKgorICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscworICoKKyAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCisgKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKKyAqLworI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzE5MDI3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXwotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgotICovCi0KLSNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCi0jZGVmaW5lIF9fTlJfZXhpdAkJICAxCi0jZGVmaW5lIF9fTlJfZm9yawkJICAyCi0jZGVmaW5lIF9fTlJfcmVhZAkJICAzCi0jZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAotI2RlZmluZSBfX05SX29wZW4JCSAgNQotI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKLSNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKLSNkZWZpbmUgX19OUl9jcmVhdAkJICA4Ci0jZGVmaW5lIF9fTlJfbGluawkJICA5Ci0jZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKLSNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQotI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKLSNkZWZpbmUgX19OUl90aW1lCQkgMTMKLSNkZWZpbmUgX19OUl9ta25vZAkJIDE0Ci0jZGVmaW5lIF9fTlJfY2htb2QJCSAxNQotI2RlZmluZSBfX05SX2Nob3duCQkgMTYKLSNkZWZpbmUgX19OUl9icmVhawkJIDE3Ci0jZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4Ci0jZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQotI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCi0jZGVmaW5lIF9fTlJfbW91bnQJCSAyMQotI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCi0jZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKLSNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAotI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKLSNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgotI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKLSNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4Ci0jZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQotI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKLSNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMwotI2RlZmluZSBfX05SX25pY2UJCSAzNAotI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKLSNkZWZpbmUgX19OUl9zeW5jCQkgMzYKLSNkZWZpbmUgX19OUl9raWxsCQkgMzcKLSNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAotI2RlZmluZSBfX05SX21rZGlyCQkgMzkKLSNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCi0jZGVmaW5lIF9fTlJfZHVwCQkgNDEKLSNkZWZpbmUgX19OUl9waXBlCQkgNDIKLSNkZWZpbmUgX19OUl90aW1lcwkJIDQzCi0jZGVmaW5lIF9fTlJfcHJvZgkJIDQ0Ci0jZGVmaW5lIF9fTlJfYnJrCQkgNDUKLSNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgotI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3Ci0jZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKLSNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKLSNkZWZpbmUgX19OUl9hY2N0CQkgNTEKLSNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKLSNkZWZpbmUgX19OUl9pb2N0bAkJIDU0Ci0jZGVmaW5lIF9fTlJfZmNudGwJCSA1NQotI2RlZmluZSBfX05SX21weAkJIDU2Ci0jZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3Ci0jZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKLSNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKLSNkZWZpbmUgX19OUl91bWFzawkJIDYwCi0jZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKLSNkZWZpbmUgX19OUl91c3RhdAkJIDYyCi0jZGVmaW5lIF9fTlJfZHVwMgkJIDYzCi0jZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0Ci0jZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1Ci0jZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NwotI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKLSNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5Ci0jZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAotI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKLSNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKLSNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQotI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2Ci0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4Ci0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKLSNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgotI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MwotI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKLSNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1Ci0jZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKLSNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NwotI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4Ci0jZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5Ci0jZGVmaW5lIF9fTlJfbW1hcAkJIDkwCi0jZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKLSNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKLSNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAotI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1Ci0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2Ci0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3Ci0jZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKLSNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQotI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAotI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCi0jZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCi0jZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKLSNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAotI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1Ci0jZGVmaW5lIF9fTlJfc3RhdAkJMTA2Ci0jZGVmaW5lIF9fTlJfbHN0YXQJCTEwNwotI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKLSNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ci0jZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKLSNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAotI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKLSNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKLSNkZWZpbmUgX19OUl9pcGMJCTExNwotI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQotI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKLSNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQotI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKLSNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKLSNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0Ci0jZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQotI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3Ci0jZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4Ci0jZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCi0jZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQotI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgotI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCi0jZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0Ci0jZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQotI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgotI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4Ci0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQotI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAotI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKLSNkZWZpbmUgX19OUl9mbG9jawkJMTQzCi0jZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAotI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKLSNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgotI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3Ci0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKLSNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKLSNkZWZpbmUgX19OUl9tbG9jawkJMTUwCi0jZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCi0jZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgotI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MwotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1Ci0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NwotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQotI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCi0jZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAotI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1Ci0jZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2Ci0jZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NwotI2RlZmluZSBfX05SX3BvbGwJCTE2OAotI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQotI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKLSNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MwotI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKLSNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKLSNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgotI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKLSNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4Ci0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKLSNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKLSNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCi0jZGVmaW5lIF9fTlJfbGNob3duCQkxODIKLSNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MwotI2RlZmluZSBfX05SX2NhcGdldAkJMTg0Ci0jZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKLSNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3Ci0jZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLwotI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl92Zm9yawkJMTkwCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCi0jZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAotI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1Ci0jZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2Ci0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3Ci0jZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4Ci0jZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQotI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKLSNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQotI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0Ci0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1Ci0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2Ci0jZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNwotI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAotI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQotI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAotI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQotI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKLSNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAotI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQotI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgotI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNwotI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAotI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCi0jZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgotI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAotI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1Ci0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgotI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3Ci0jZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKLSNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAotI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQotI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKLSNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0Ci0jZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQotI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgotI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNwotI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAotI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQotI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQotI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKLSNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAotI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1Ci0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgotI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0Ci0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3Ci0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5Ci0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgotI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAotI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1Ci0jZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3Ci0jZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAotI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5Ci0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKLSNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0Ci0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKLSNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgotI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3Ci0jZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4Ci0jZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5Ci0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCi0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODIKLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODMKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjg0Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjg1Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyODYKLSNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTI4NwotI2RlZmluZSBfX05SX29wZW5hdAkJMjg4Ci0jZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg5Ci0jZGVmaW5lIF9fTlJfbWtub2RhdAkJMjkwCi0jZGVmaW5lIF9fTlJfZmNob3duYXQJCTI5MQotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkyCi0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKLSNkZWZpbmUgX19OUl91bmxpbmthdAkJMjk0Ci0jZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5NQotI2RlZmluZSBfX05SX2xpbmthdAkJMjk2Ci0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTcKLSNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTgKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk5Ci0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDAKLSNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzAxCi0jZGVmaW5lIF9fTlJfcHBvbGwJCTMwMgotI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMwMwotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDQKLSNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzA1Ci0jZGVmaW5lIF9fTlJfc3BsaWNlCQkzMDYKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzA3Ci0jZGVmaW5lIF9fTlJfdGVlCQkzMDgKLSNkZWZpbmUgX19OUl92bXNwbGljZQkJMzA5Ci0jZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzEwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMzExCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMzEyCi0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzEzCi0jZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTQKLSNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKLSNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgotI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKLSNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKLSNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKLSNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAotI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKLSNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMjMKLSNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzI0Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMjUKLSNkZWZpbmUgX19OUl9kdXAzCQkzMjYKLSNkZWZpbmUgX19OUl9waXBlMgkJMzI3Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjgKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBOUl9zeXNjYWxscwkJMzI5Ci0KLSNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM0YTJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXwotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgotICovCi0KLSNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgICAgICAwCi0jZGVmaW5lIF9fTlJfZXhpdAkJICAxCi0jZGVmaW5lIF9fTlJfZm9yawkJICAyCi0jZGVmaW5lIF9fTlJfcmVhZAkJICAzCi0jZGVmaW5lIF9fTlJfd3JpdGUJCSAgNAotI2RlZmluZSBfX05SX29wZW4JCSAgNQotI2RlZmluZSBfX05SX2Nsb3NlCQkgIDYKLSNkZWZpbmUgX19OUl93YWl0cGlkCQkgIDcKLSNkZWZpbmUgX19OUl9jcmVhdAkJICA4Ci0jZGVmaW5lIF9fTlJfbGluawkJICA5Ci0jZGVmaW5lIF9fTlJfdW5saW5rCQkgMTAKLSNkZWZpbmUgX19OUl9leGVjdmUJCSAxMQotI2RlZmluZSBfX05SX2NoZGlyCQkgMTIKLSNkZWZpbmUgX19OUl90aW1lCQkgMTMKLSNkZWZpbmUgX19OUl9ta25vZAkJIDE0Ci0jZGVmaW5lIF9fTlJfY2htb2QJCSAxNQotI2RlZmluZSBfX05SX2Nob3duCQkgMTYKLSNkZWZpbmUgX19OUl9icmVhawkJIDE3Ci0jZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4Ci0jZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQotI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCi0jZGVmaW5lIF9fTlJfbW91bnQJCSAyMQotI2RlZmluZSBfX05SX3Vtb3VudAkJIDIyCi0jZGVmaW5lIF9fTlJfc2V0dWlkCQkgMjMKLSNkZWZpbmUgX19OUl9nZXR1aWQJCSAyNAotI2RlZmluZSBfX05SX3N0aW1lCQkgMjUKLSNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgotI2RlZmluZSBfX05SX2FsYXJtCQkgMjcKLSNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4Ci0jZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQotI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKLSNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMwotI2RlZmluZSBfX05SX25pY2UJCSAzNAotI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKLSNkZWZpbmUgX19OUl9zeW5jCQkgMzYKLSNkZWZpbmUgX19OUl9raWxsCQkgMzcKLSNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAotI2RlZmluZSBfX05SX21rZGlyCQkgMzkKLSNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCi0jZGVmaW5lIF9fTlJfZHVwCQkgNDEKLSNkZWZpbmUgX19OUl9waXBlCQkgNDIKLSNkZWZpbmUgX19OUl90aW1lcwkJIDQzCi0jZGVmaW5lIF9fTlJfcHJvZgkJIDQ0Ci0jZGVmaW5lIF9fTlJfYnJrCQkgNDUKLSNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgotI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3Ci0jZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKLSNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKLSNkZWZpbmUgX19OUl9hY2N0CQkgNTEKLSNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKLSNkZWZpbmUgX19OUl9pb2N0bAkJIDU0Ci0jZGVmaW5lIF9fTlJfZmNudGwJCSA1NQotI2RlZmluZSBfX05SX21weAkJIDU2Ci0jZGVmaW5lIF9fTlJfc2V0cGdpZAkJIDU3Ci0jZGVmaW5lIF9fTlJfdWxpbWl0CQkgNTgKLSNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkKLSNkZWZpbmUgX19OUl91bWFzawkJIDYwCi0jZGVmaW5lIF9fTlJfY2hyb290CQkgNjEKLSNkZWZpbmUgX19OUl91c3RhdAkJIDYyCi0jZGVmaW5lIF9fTlJfZHVwMgkJIDYzCi0jZGVmaW5lIF9fTlJfZ2V0cHBpZAkJIDY0Ci0jZGVmaW5lIF9fTlJfZ2V0cGdycAkJIDY1Ci0jZGVmaW5lIF9fTlJfc2V0c2lkCQkgNjYKLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24JCSA2NwotI2RlZmluZSBfX05SX3NnZXRtYXNrCQkgNjgKLSNkZWZpbmUgX19OUl9zc2V0bWFzawkJIDY5Ci0jZGVmaW5lIF9fTlJfc2V0cmV1aWQJCSA3MAotI2RlZmluZSBfX05SX3NldHJlZ2lkCQkgNzEKLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kCQkgNzIKLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKLSNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKLSNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQotI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2Ci0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4Ci0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKLSNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgotI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MwotI2RlZmluZSBfX05SX29sZGxzdGF0CQkgODQKLSNkZWZpbmUgX19OUl9yZWFkbGluawkJIDg1Ci0jZGVmaW5lIF9fTlJfdXNlbGliCQkgODYKLSNkZWZpbmUgX19OUl9zd2Fwb24JCSA4NwotI2RlZmluZSBfX05SX3JlYm9vdAkJIDg4Ci0jZGVmaW5lIF9fTlJfcmVhZGRpcgkJIDg5Ci0jZGVmaW5lIF9fTlJfbW1hcAkJIDkwCi0jZGVmaW5lIF9fTlJfbXVubWFwCQkgOTEKLSNkZWZpbmUgX19OUl90cnVuY2F0ZQkJIDkyCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlCQkgOTMKLSNkZWZpbmUgX19OUl9mY2htb2QJCSA5NAotI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1Ci0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkJIDk2Ci0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkJIDk3Ci0jZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgKLSNkZWZpbmUgX19OUl9zdGF0ZnMJCSA5OQotI2RlZmluZSBfX05SX2ZzdGF0ZnMJCTEwMAotI2RlZmluZSBfX05SX2lvcGVybQkJMTAxCi0jZGVmaW5lIF9fTlJfc29ja2V0Y2FsbAkJMTAyCi0jZGVmaW5lIF9fTlJfc3lzbG9nCQkxMDMKLSNkZWZpbmUgX19OUl9zZXRpdGltZXIJCTEwNAotI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1Ci0jZGVmaW5lIF9fTlJfc3RhdAkJMTA2Ci0jZGVmaW5lIF9fTlJfbHN0YXQJCTEwNwotI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKLSNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ci0jZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKLSNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAotI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKLSNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKLSNkZWZpbmUgX19OUl9pcGMJCTExNwotI2RlZmluZSBfX05SX2ZzeW5jCQkxMTgKLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4JCTExOQotI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKLSNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQotI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKLSNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKLSNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0Ci0jZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQotI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3Ci0jZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUJMTI4Ci0jZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZQkxMjkKLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMJMTMwCi0jZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQotI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgotI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCi0jZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0Ci0jZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQotI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgotI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsCTEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4Ci0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQotI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAotI2RlZmluZSBfX05SX2dldGRlbnRzCQkxNDEKLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0CQkxNDIKLSNkZWZpbmUgX19OUl9mbG9jawkJMTQzCi0jZGVmaW5lIF9fTlJfbXN5bmMJCTE0NAotI2RlZmluZSBfX05SX3JlYWR2CQkxNDUKLSNkZWZpbmUgX19OUl93cml0ZXYJCTE0NgotI2RlZmluZSBfX05SX2dldHNpZAkJMTQ3Ci0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNDgKLSNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNDkKLSNkZWZpbmUgX19OUl9tbG9jawkJMTUwCi0jZGVmaW5lIF9fTlJfbXVubG9jawkJMTUxCi0jZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1MgotI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1MwotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTQKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU1Ci0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNTYKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE1NwotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNTgKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE1OQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTYwCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2MQotI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTYyCi0jZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAotI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1Ci0jZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2Ci0jZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NwotI2RlZmluZSBfX05SX3BvbGwJCTE2OAotI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQotI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkCQkxNzEKLSNkZWZpbmUgX19OUl9wcmN0bAkJMTcyCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuCTE3MwotI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbgkxNzQKLSNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzawkxNzUKLSNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nCTE3NgotI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdAkxNzcKLSNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8JMTc4Ci0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKLSNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKLSNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCi0jZGVmaW5lIF9fTlJfbGNob3duCQkxODIKLSNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MwotI2RlZmluZSBfX05SX2NhcGdldAkJMTg0Ci0jZGVmaW5lIF9fTlJfY2Fwc2V0CQkxODUKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkxODYKLSNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMTg3Ci0jZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLwotI2RlZmluZSBfX05SX3B1dHBtc2cJCTE4OQkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl92Zm9yawkJMTkwCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCi0jZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAotI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1Ci0jZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2Ci0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3Ci0jZGVmaW5lIF9fTlJfY2hvd24zMgkJMTk4Ci0jZGVmaW5lIF9fTlJfZ2V0dWlkMzIJCTE5OQotI2RlZmluZSBfX05SX2dldGdpZDMyCQkyMDAKLSNkZWZpbmUgX19OUl9nZXRldWlkMzIJCTIwMQotI2RlZmluZSBfX05SX2dldGVnaWQzMgkJMjAyCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQzMgkJMjAzCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQzMgkJMjA0Ci0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIJMjA1Ci0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIJMjA2Ci0jZGVmaW5lIF9fTlJfZmNob3duMzIJCTIwNwotI2RlZmluZSBfX05SX3NldHJlc3VpZDMyCTIwOAotI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQotI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAotI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQotI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKLSNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAotI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQotI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgotI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNwotI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAotI2RlZmluZSBfX05SX2dldHRpZAkJMjIxCi0jZGVmaW5lIF9fTlJfdGtpbGwJCTIyMgotI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjMKLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIJCTIyNAotI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjI1Ci0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTIyNgotI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjI3Ci0jZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyMjgKLSNkZWZpbmUgX19OUl9saXN0eGF0dHIJCTIyOQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIJCTIzMAotI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIJCTIzMQotI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyCTIzMgotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0cgkyMzMKLSNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIJMjM0Ci0jZGVmaW5lIF9fTlJfZnV0ZXgJCTIzNQotI2RlZmluZSBfX05SX3NlbmRmaWxlNjQJCTIzNgotI2RlZmluZSBfX05SX21pbmNvcmUJCTIzNwotI2RlZmluZSBfX05SX21hZHZpc2UJCTIzOAotI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIzOQotI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjQwCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQotI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNDMKLSNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAotI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1Ci0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNDYKLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNDcKLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNDgKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUJMjQ5Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkyNTAKLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0CQkyNTEKLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzCTI1MgotI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTMKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjU0Ci0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3Ci0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5Ci0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgotI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjMKLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NAotI2RlZmluZSBfX05SX3Rna2lsbAkJMjY1Ci0jZGVmaW5lIF9fTlJfdXRpbWVzCQkyNjYKLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY3Ci0jZGVmaW5lIF9fTlJfbWJpbmQJCTI2OAotI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMjY5Ci0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkyNzAKLSNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzEKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3MgotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzMKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc0Ci0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzUKLSNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3NgotI2RlZmluZSBfX05SX3dhaXRpZAkJMjc3Ci0jZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4Ci0jZGVmaW5lIF9fTlJfYWRkX2tleQkJMjc5Ci0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCi0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODIKLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODMKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjg0Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjg1Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyODYKLSNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTI4NwotI2RlZmluZSBfX05SX29wZW5hdAkJMjg4Ci0jZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg5Ci0jZGVmaW5lIF9fTlJfbWtub2RhdAkJMjkwCi0jZGVmaW5lIF9fTlJfZmNob3duYXQJCTI5MQotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjkyCi0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKLSNkZWZpbmUgX19OUl91bmxpbmthdAkJMjk0Ci0jZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5NQotI2RlZmluZSBfX05SX2xpbmthdAkJMjk2Ci0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTcKLSNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTgKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk5Ci0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDAKLSNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzAxCi0jZGVmaW5lIF9fTlJfcHBvbGwJCTMwMgotI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMwMwotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDQKLSNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzA1Ci0jZGVmaW5lIF9fTlJfc3BsaWNlCQkzMDYKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzA3Ci0jZGVmaW5lIF9fTlJfdGVlCQkzMDgKLSNkZWZpbmUgX19OUl92bXNwbGljZQkJMzA5Ci0jZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzEwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMzExCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMzEyCi0jZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzEzCi0jZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTQKLSNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKLSNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgotI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKLSNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKLSNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKLSNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAotI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKLSNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMjMKLSNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzI0Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMjUKLSNkZWZpbmUgX19OUl9kdXAzCQkzMjYKLSNkZWZpbmUgX19OUl9waXBlMgkJMzI3Ci0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjgKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBOUl9zeXNjYWxscwkJMzI5Ci0KLSNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luc3RhbGwuc2ggYi9hcmNoL202OGsvaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzZiYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2luc3RhbGwuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1IGJ5IExpbnVzIFRvcnZhbGRzCisjCisjIEFkYXB0ZWQgZnJvbSBjb2RlIGluIGFyY2gvaTM4Ni9ib290L01ha2VmaWxlIGJ5IEguIFBldGVyIEFudmluCisjCisjICJtYWtlIGluc3RhbGwiIHNjcmlwdCBmb3IgbTY4ayBhcmNoaXRlY3R1cmUKKyMKKyMgQXJndW1lbnRzOgorIyAgICQxIC0ga2VybmVsIHZlcnNpb24KKyMgICAkMiAtIGtlcm5lbCBpbWFnZSBmaWxlCisjICAgJDMgLSBrZXJuZWwgbWFwIGZpbGUKKyMgICAkNCAtIGRlZmF1bHQgaW5zdGFsbCBwYXRoIChibGFuayBpZiByb290IGRpcmVjdG9yeSkKKyMKKwordmVyaWZ5ICgpIHsKKwlpZiBbICEgLWYgIiQxIiBdOyB0aGVuCisJCWVjaG8gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWVjaG8gIiAqKiogTWlzc2luZyBmaWxlOiAkMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWVjaG8gJyAqKiogWW91IG5lZWQgdG8gcnVuICJtYWtlIiBiZWZvcmUgIm1ha2UgaW5zdGFsbCIuJyAxPiYyCisJCWVjaG8gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPiYyCisJCWV4aXQgMQorCWZpCit9CisKKyMgTWFrZSBzdXJlIHRoZSBmaWxlcyBhY3R1YWxseSBleGlzdAordmVyaWZ5ICIkMiIKK3ZlcmlmeSAiJDMiCisKKyMgVXNlciBtYXkgaGF2ZSBhIGN1c3RvbSBpbnN0YWxsIHNjcmlwdAorCitpZiBbIC14IH4vYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsIF07IHRoZW4gZXhlYyB+L2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCAiJEAiOyBmaQoraWYgWyAteCAvc2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCBdOyB0aGVuIGV4ZWMgL3NiaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgIiRAIjsgZmkKKworIyBEZWZhdWx0IGluc3RhbGwgLSBzYW1lIGFzIG1ha2UgemxpbG8KKworaWYgWyAtZiAkNC92bWxpbnV6IF07IHRoZW4KKwltdiAkNC92bWxpbnV6ICQ0L3ZtbGludXoub2xkCitmaQorCitpZiBbIC1mICQ0L1N5c3RlbS5tYXAgXTsgdGhlbgorCW12ICQ0L1N5c3RlbS5tYXAgJDQvU3lzdGVtLm9sZAorZmkKKworY2F0ICQyID4gJDQvdm1saW51egorY3AgJDMgJDQvU3lzdGVtLm1hcAorCitzeW5jCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCA5OGI2YmNmLi5iZTAxNzk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTIyLDYgKzIyLDcgQEAKIC8qIGtleWIgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQzLDYgKzQ0LDEwIEBACiAjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgogCisvKiBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLworCisjZGVmaW5lIFNXSU1fSU9fU0laRSAweDIwMDAJLyogU1dJTSBJTyByZXNvdXJjZSBzaXplICovCisKIC8qIE1hYyBib290aW5mbyBzdHJ1Y3QgKi8KIAogc3RydWN0IG1hY19ib290ZXJfZGF0YSBtYWNfYmlfZGF0YTsKQEAgLTIyNCw3ICsyMjksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KIAl9LAogCiAJLyoKQEAgLTIzOSw3ICsyNDUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlYLAogCQkubmFtZQkJPSAiSUl4IiwKQEAgLTI0Nyw3ICsyNTQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJQ1gsCiAJCS5uYW1lCQk9ICJJSWN4IiwKQEAgLTI1NSw3ICsyNjMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1NFMzAsCiAJCS5uYW1lCQk9ICJTRS8zMCIsCkBAIC0yNjMsNyArMjcyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtMjgwLDcgKzI5MCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUZYLAogCQkubmFtZQkJPSAiSUlmeCIsCkBAIC0yODgsNyArMjk5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlTSSwKIAkJLm5hbWUJCT0gIklJc2kiLApAQCAtMjk2LDcgKzMwOCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZJLAogCQkubmFtZQkJPSAiSUl2aSIsCkBAIC0zMDQsNyArMzE3LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVlgsCiAJCS5uYW1lCQk9ICJJSXZ4IiwKQEAgLTMxMiw3ICszMjYsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTMyNiw3ICszNDEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0NMLAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCkBAIC0zMzQsNyArMzUwLDkgQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVU30sCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwl9LAogCiAJLyoKIAkgKglTb21lIE1hYyBMQyBtYWNoaW5lcy4gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBJSWNpLCBBREIgbGlrZSBJSXNpCkBAIC0zNDcsNyArMzY1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUksCiAJCS5uYW1lCQk9ICJMQyBJSSIsCkBAIC0zNTUsNyArMzc0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUlJLAogCQkubmFtZQkJPSAiTEMgSUlJIiwKQEAgLTM2Myw3ICszODMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTM4Myw3ICs0MDQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYwNV9BQ0MsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjA1IiwKQEAgLTM5MSw3ICs0MTMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYxMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MTAiLApAQCAtNDAwLDcgKzQyMyw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjMwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYzMCIsCkBAIC00MTAsNyArNDM0LDggQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDY1MCIsCkBAIC00MTksNyArNDQ0LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwKIAkvKglUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLwogCXsKQEAgLTQzMCw3ICs0NTYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODAwIiwKQEAgLTQzOSw3ICs0NjYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTg0MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4NDBBViIsCkBAIC00NDgsNyArNDc2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDkwMCIsCkBAIC00NTcsNyArNDg2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTk1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5NTAiLApAQCAtNDY2LDcgKzQ5Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwKIAogCS8qCkBAIC00ODAsNyArNTExLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzUsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKQEAgLTQ4OCw3ICs1MjAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1RiwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLApAQCAtNDk2LDcgKzUyOSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1MjAsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTIwIiwKQEAgLTUwNCw3ICs1MzgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU1MCwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA1NTAiLApAQCAtNTEyLDcgKzU0Nyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAJLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBTT05JQyBldGhlcm5ldCAqLwogCXsKQEAgLTUyMyw3ICs1NTksOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTg4LAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTg4IiwKQEAgLTUzMyw3ICs1NzAsOCBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfVFYsCiAJCS5uYW1lCQk9ICJUViIsCkBAIC01NDEsNyArNTc5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDYwMCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDYwMCIsCkBAIC01NDksNyArNTg4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC01NjUsNyArNjA1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY1MCIsCkBAIC01NzQsNyArNjE1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NjAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY2MEFWIiwKQEAgLTU4Myw3ICs2MjUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCiAJfSwKIAogCS8qCkBAIC01OTksNyArNjQyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTQ1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE0NSIsCkBAIC02MDcsNyArNjUxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE1MCIsCkBAIC02MTYsNyArNjYxLDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9QQiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTYwIiwKQEAgLTYyNCw3ICs2NzAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1IiwKQEAgLTYzMiw3ICs2NzksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjVDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NWMiLApAQCAtNjQwLDcgKzY4OCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE3MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNzAiLApAQCAtNjQ4LDcgKzY5Nyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODAiLApAQCAtNjU2LDcgKzcwNiw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwYyIsCkBAIC02NjQsNyArNzE1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTkwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE5MCIsCkBAIC02NzMsNyArNzI1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9CQUJPT04sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCNTIwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCkBAIC02ODIsNyArNzM1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC03MDIsNyArNzU2LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjIzMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjMwIiwKQEAgLTcxMCw3ICs3NjUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNTAiLApAQCAtNzE4LDcgKzc3NCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNzBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNzBjIiwKQEAgLTcyNiw3ICs3ODMsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODAiLApAQCAtNzM0LDcgKzc5Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODBjIiwKQEAgLTc0Miw3ICs4MDEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC04MTUsMyArODc1LDQyIEBACiAJc3RyY3B5KHN0ciwgIk1hY2ludG9zaCAiKTsKIAlzdHJjYXQoc3RyLCBtYWNpbnRvc2hfY29uZmlnLT5uYW1lKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzd2ltX3Jlc291cmNlc1sxXTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3dpbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInN3aW0iLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3dpbV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHN3aW1fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc3dpbV9kZXZpY2UKK307CisKK2ludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwl1OCAqc3dpbV9iYXNlOworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5mbG9wcHlfdHlwZSkgeworCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIxOgorCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxRTAwMCk7CisJCWJyZWFrOworCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIyOgorCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxNjAwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXN3aW1fcmVzb3VyY2VzWzBdLm5hbWUgPSAic3dpbS1yZWdzIjsKKwlzd2ltX3Jlc291cmNlc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3Qpc3dpbV9iYXNlOworCXN3aW1fcmVzb3VyY2VzWzBdLmVuZCA9IChyZXNvdXJjZV9zaXplX3QpKHN3aW1fYmFzZSArIFNXSU1fSU9fU0laRSk7CisJc3dpbV9yZXNvdXJjZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtYWNfcGxhdGZvcm1fZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShtYWNfcGxhdGZvcm1fZGV2aWNlcykpOworfQorCithcmNoX2luaXRjYWxsKG1hY19wbGF0Zm9ybV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvdmlhLmMgYi9hcmNoL202OGsvbWFjL3ZpYS5jCmluZGV4IDdkOTdiYTUuLjExYmNlM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvdmlhLmMKKysrIGIvYXJjaC9tNjhrL21hYy92aWEuYwpAQCAtNjQ1LDMgKzY0NSwxMiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKwordm9pZCB2aWExX3NldF9oZWFkKGludCBoZWFkKQoreworCWlmIChoZWFkID09IDApCisJCXZpYTFbdkJ1ZkFdICY9IH5WSUExQV92SGVhZFNlbDsKKwllbHNlCisJCXZpYTFbdkJ1ZkFdIHw9IFZJQTFBX3ZIZWFkU2VsOworfQorRVhQT1JUX1NZTUJPTCh2aWExX3NldF9oZWFkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCmluZGV4IDA2ZDg4N2MuLjg1NWZjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYwpAQCAtNDksOCArNDksMzkgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTIweF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTIweF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDMwMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgzMDAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDM2LAorCQkuZW5kCQk9IDY0ICsgMzYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDAsCisJCS5lbmQJCT0gNjQgKyA0MCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MiwKKwkJLmVuZAkJPSA2NCArIDQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjB4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyMHhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjB4X2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyMHhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjB4X3VhcnQsCisJJm01MjB4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDMsNiArMTM0LDMwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTIweF9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisJdTggdjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDQsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAzNik7CisJd3JpdGViKDB4NCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDQwKTsKKwl3cml0ZWIoMHg0LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgNDIpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weDAwMDFGRkYwOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSAqLworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQyk7CisJd3JpdGViKHYgfCAweGYwLCBNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQyk7CisKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpOworCXdyaXRlYih2IHwgMHgwZiwgTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgogICogIFByb2dyYW0gdGhlIHZlY3RvciB0byBiZSBhbiBhdXRvLXZlY3RvcmVkLgogICovCkBAIC0xMTgsNiArMTczLDcgQEAKIHsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CiAJbTUyMHhfdWFydHNfaW5pdCgpOworCW01MjB4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYwppbmRleCAxM2YwMjYxLi43NDEzM2YyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKQEAgLTUwLDggKzUwLDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyM3hfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyM3hfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyM3hfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTIzeF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyM3hfZmVjX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTIzeF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyM3hfdWFydCwKKwkmbTUyM3hfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgzLDYgKzExNCwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyM3hfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4MjgsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTAzLDYgKzE1Myw3IEBACiAJbWNmX2Rpc2FibGVhbGwoKTsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CiAJbTUyM3hfdWFydHNfaW5pdCgpOworCW01MjN4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYwppbmRleCAyMzBiYWU2Li5lMDQ5MjQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKQEAgLTU1LDggKzU1LDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyNzJfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyNzJfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHg4NDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDg0MCArIDB4MWNmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA4NiwKKwkJLmVuZAkJPSA4NiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gODcsCisJCS5lbmQJCT0gODcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDg4LAorCQkuZW5kCQk9IDg4LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjcyX2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyNzJfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjcyX2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyNzJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjcyX3VhcnQsCisJJm01MjcyX2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05MSw2ICsxMjIsMjIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01MjcyX2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWltciA9IHJlYWRsKE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOworCWltciA9IChpbXIgJiB+MHgwMDAwMGZmZikgfCAweDAwMDAwZGRkOworCXdyaXRlbChpbXIsIE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOworCisJaW1yID0gcmVhZGwoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7CisJaW1yID0gKGltciAmIH4weDBmMDAwMDAwKSB8IDB4MGQwMDAwMDA7CisJd3JpdGVsKGltciwgTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nCSppY3JwOwpAQCAtMTU1LDYgKzIwMiw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01MjcyX3VhcnRzX2luaXQoKTsKKwltNTI3Ml9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01MjcyX2RldmljZXMsIEFSUkFZX1NJWkUobTUyNzJfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKaW5kZXggNzNjZDFhZS4uNDkzNDNmYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCkBAIC01MCw4ICs1MCw3MyBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01Mjd4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjd4X2ZlYzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDEwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDEwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyMywKKwkJLmVuZAkJPSA2NCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI3LAorCQkuZW5kCQk9IDY0ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjksCisJCS5lbmQJCT0gNjQgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjd4X2ZlYzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDE4MDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDE4MDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMTI4ICsgMjMsCisJCS5lbmQJCT0gMTI4ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDEyOCArIDI3LAorCQkuZW5kCQk9IDEyOCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSAxMjggKyAyOSwKKwkJLmVuZAkJPSAxMjggKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI3eF9mZWNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJmZWMiLAorCQkuaWQJCT0gMCwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG01Mjd4X2ZlYzBfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlCT0gbTUyN3hfZmVjMF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJmZWMiLAorCQkuaWQJCT0gMSwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG01Mjd4X2ZlYzFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlCT0gbTUyN3hfZmVjMV9yZXNvdXJjZXMsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTI3eF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyN3hfdWFydCwKKwkmbTUyN3hfZmVjWzBdLAorI2lmZGVmIENPTkZJR19GRUMyCisJJm01Mjd4X2ZlY1sxXSwKKyNlbmRpZgogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk3LDYgKzE2Miw1MSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfZmVjX2lycV9pbml0KGludCBucikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdTMyIGltcjsKKworCWJhc2UgPSBNQ0ZfSVBTQkFSICsgKG5yID8gTUNGSUNNX0lOVEMxIDogTUNGSUNNX0lOVEMwKTsKKworCXdyaXRlYigweDI4LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBiYXNlICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoYmFzZSArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgYmFzZSArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoYmFzZSArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIGJhc2UgKyBNQ0ZJTlRDX0lNUkwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyN3hfZmVjX2luaXQodm9pZCkKK3sKKwl1MTYgcGFyOworCXU4IHY7CisKKwltNTI3eF9mZWNfaXJxX2luaXQoMCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJcGFyID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl3cml0ZXcocGFyIHwgMHhmMDAsIE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyAweDEwMDA3OCk7CisJd3JpdGViKHYgfCAweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNzgpOworCisjaWZkZWYgQ09ORklHX0ZFQzIKKwltNTI3eF9mZWNfaXJxX2luaXQoMSk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMxICovCisJcGFyID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl3cml0ZXcocGFyIHwgMHhhMCwgTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIDB4MTAwMDc5KTsKKwl3cml0ZWIodiB8IDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogdm9pZCBtY2ZfZGlzYWJsZWFsbCh2b2lkKQogewogCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpKSA9IDB4ZmZmZmZmZmY7CkBAIC0xMTYsMTMgKzIyNiwxNCBAQAogewogCW1jZl9kaXNhYmxlYWxsKCk7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OworCW01Mjd4X3VhcnRzX2luaXQoKTsKKwltNTI3eF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewotCW01Mjd4X3VhcnRzX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI3eF9kZXZpY2VzLCBBUlJBWV9TSVpFKG01Mjd4X2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCmluZGV4IDQ0YmFlYjIuLmJlZTUyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYwpAQCAtNTcsOCArNTcsNDAgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTI4eF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI4eF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDEwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDEwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyMywKKwkJLmVuZAkJPSA2NCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI3LAorCQkuZW5kCQk9IDY0ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjksCisJCS5lbmQJCT0gNjQgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI4eF9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01Mjh4X2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTI4eF9mZWNfcmVzb3VyY2VzLAorfTsKKworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyOHhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01Mjh4X3VhcnQsCisJJm01Mjh4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05OSw2ICsxMzEsMzEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01Mjh4X2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKwl1MTYgdjE2OworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4MjgsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJdjE2ID0gcmVhZHcoTUNGX0lQU0JBUiArIDB4MTAwMDU2KTsKKwl3cml0ZXcodjE2IHwgMHhmMDAsIE1DRl9JUFNCQVIgKyAweDEwMDA1Nik7CisJd3JpdGViKDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA1OCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTU4LDYgKzIxNSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01Mjh4X3VhcnRzX2luaXQoKTsKKwltNTI4eF9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01Mjh4X2RldmljZXMsIEFSUkFZX1NJWkUobTUyOHhfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMKaW5kZXggYTM0NzYyMy4uNTkxZjJmOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jCkBAIC02MSw4ICs2MSwzOCBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MzJ4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MzJ4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAweGZjMDMwMDAwLAorCQkuZW5kCQk9IDB4ZmMwMzA3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMzYsCisJCS5lbmQJCT0gNjQgKyAzNiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MCwKKwkJLmVuZAkJPSA2NCArIDQwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQyLAorCQkuZW5kCQk9IDY0ICsgNDIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUzMnhfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTMyeF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUzMnhfZmVjX3Jlc291cmNlcywKK307CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUzMnhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MzJ4X3VhcnQsCisJJm01MzJ4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Myw2ICsxMjMsMjQgQEAKIAlmb3IgKGxpbmUgPSAwOyAobGluZSA8IG5ybGluZXMpOyBsaW5lKyspCiAJCW01MzJ4X3VhcnRfaW5pdF9saW5lKGxpbmUsIG01MzJ4X3VhcnRfcGxhdGZvcm1bbGluZV0uaXJxKTsKIH0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTMyeF9mZWNfaW5pdCh2b2lkKQoreworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCU1DRl9JTlRDMF9JQ1IzNiA9IDB4MjsKKwlNQ0ZfSU5UQzBfSUNSNDAgPSAweDI7CisJTUNGX0lOVEMwX0lDUjQyID0gMHgyOworCisJTUNGX0lOVEMwX0lNUkggJj0gfihNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzYgfAorCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDAgfCBNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDIpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCU1DRl9HUElPX1BBUl9GRUNJMkMgfD0gKE1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01EQ19FTURDIHwKKwkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURJT19FTURJTyk7CisJTUNGX0dQSU9fUEFSX0ZFQyA9IChNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfN1dfRkVDIHwKKwkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDX01JSV9GRUMpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xNTAsNiArMTk4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfQlNQKHZvaWQpCiB7CiAJbTUzMnhfdWFydHNfaW5pdCgpOworCW01MzJ4X2ZlY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUzMnhfZGV2aWNlcywgQVJSQVlfU0laRShtNTMyeF9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGU2MTQ2NWEuLjIwNmNiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0yMzgsOCArMjM4LDEyIEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIE1JUFMgVGVjaG5vbG9naWVzIE1JUFNzaW0gc29mdHdhcmUKIAkgIGVtdWxhdG9yLgogCi1jb25maWcgTUFDSF9FTU1BCi0JYm9vbCAiTkVDIEVNTUEgc2VyaWVzIGJhc2VkIG1hY2hpbmVzIgorY29uZmlnIE5FQ19NQVJLRUlOUworCWJvb2wgIk5FQyBFTU1BMlJIIE1hcmstZWlucyBib2FyZCIKKwlzZWxlY3QgU09DX0VNTUEyUkgKKwlzZWxlY3QgSFdfSEFTX1BDSQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTkVDIEVsZWN0cm9uaWNzIE1hcmstZWlucyBib2FyZHMuCiAKIGNvbmZpZyBNQUNIX1ZSNDFYWAogCWJvb2wgIk5FQyBWUjQxMDAgc2VyaWVzIGJhc2VkIG1hY2hpbmVzIgpAQCAtNjM3LDcgKzY0MSw2IEBACiAKIHNvdXJjZSAiYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvS2NvbmZpZyIKLXNvdXJjZSAiYXJjaC9taXBzL2VtbWEvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2phenovS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2xhc2F0L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9wbWMtc2llcnJhL0tjb25maWciCkBAIC04OTUsNiArODk4LDE4IEBACiAJYm9vbAogCXNlbGVjdCBTRVJJQUxfUk05MDAwCiAKK2NvbmZpZyBTT0NfRU1NQTJSSAorCWJvb2wKKwlzZWxlY3QgQ0VWVF9SNEsKKwlzZWxlY3QgQ1NSQ19SNEsKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1dBUF9JT19TUEFDRQorCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTUwMAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwogY29uZmlnIFNPQ19QTlg4MzNYCiAJYm9vbAogCXNlbGVjdCBDRVZUX1I0SwpAQCAtOTMwLDExICs5NDUsNiBAQAogY29uZmlnIFNXQVBfSU9fU1BBQ0UKIAlib29sCiAKLWNvbmZpZyBFTU1BMlJICi0JYm9vbAotCWRlcGVuZHMgb24gTUFSS0VJTlMKLQlkZWZhdWx0IHkKLQogY29uZmlnIFNFUklBTF9STTkwMDAKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCAyMWIwMGU5Li4yMmRhYjJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC00MTYsNyArNDE2LDcgQEAKICMKICMgQ29tbW9uIE5FQyBFTU1BWFhYCiAjCi1jb3JlLSQoQ09ORklHX1NPQ19FTU1BKQkJKz0gYXJjaC9taXBzL2VtbWEvY29tbW9uLworY29yZS0kKENPTkZJR19TT0NfRU1NQTJSSCkJKz0gYXJjaC9taXBzL2VtbWEvY29tbW9uLwogY2ZsYWdzLSQoQ09ORklHX1NPQ19FTU1BMlJIKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZW1tYTJyaAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCmluZGV4IGExZTM1MjYuLmRmYmZkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCkBAIC0zMyw4ICszMyw4IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqaW9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogc3RhdGljIGludCBpb2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgc3NpemVfdCBpb2Rldl9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCBzLCBsb2ZmX3QgKik7CkBAIC02NSwxMyArNjUsMTMgQEAKIAkuZm9wcwkJPSAmZm9wcwogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlvZGV2X2RyaXZlciA9Ci17Ci0JLm5hbWUJCT0gKGNoYXIgKikgaW9kZXZfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb2Rldl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gaW9kZXZfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGlvZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AoaW9kZXZfcmVtb3ZlKQorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaW9kZXZfcmVtb3ZlKSwKIH07CiAKIApAQCAtODksMTEgKzg5LDEwIEBACiAKIAogLyogTm8gaG90cGx1Z2dpbmcgb24gdGhlIHBsYXRmb3JtIGJ1cyAtIHVzZSBfX2luaXQgKi8KLXN0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGR2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcmkgPQotCQlpb2Rldl9nZXRfcmVzb3VyY2UocGR2LCBJT0RFVl9SRVNPVVJDRV9JUlEsIElPUkVTT1VSQ0VfSVJRKTsKKwkJaW9kZXZfZ2V0X3Jlc291cmNlKGRldiwgSU9ERVZfUkVTT1VSQ0VfSVJRLCBJT1JFU09VUkNFX0lSUSk7CiAKIAlpZiAodW5saWtlbHkoIXJpKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTEwNCw3ICsxMDMsNyBAQAogCiAKIAotc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIG1pc2NfZGVyZWdpc3RlcigmbWlzY2Rldik7CiB9CkBAIC0xNjAsMTQgKzE1OSwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9pbml0X21vZHVsZSh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKIH0KIAogCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpb2Rldl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpb2Rldl9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IGYyYmFlYTMuLjAyMDg3MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC01MTIsNyArNTEyLDcgQEAKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCi1DT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwppbmRleCA5ZDViZDJhLi41MzgwZjFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzkKLSMgRnJpIEp1bCAxMSAyMzowMTozNiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3CisjIFdlZCBNYXIgIDQgMjM6MDc6MTYgMjAwOQogIwogQ09ORklHX01JUFM9eQogCkBAIC0xOCw4ICsxOCwxMCBAQAogIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1NQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CkBAIC0zOSw3ICs0MSwxMSBAQAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1RYMzlYWD15CiAjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1RYWDk9eQogQ09ORklHX1RPU0hJQkFfSk1SMzkyNz15CiBDT05GSUdfU09DX1RYMzkyNz15CiAjIENPTkZJR19UT1NISUJBX0ZQQ0lCMCBpcyBub3Qgc2V0CkBAIC01NCwxMiArNjAsMTQgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0NFVlRfVFhYOT15CiBDT05GSUdfR1BJT19UWFg5PXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0dQSU89eQpAQCAtODcsNiArOTUsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTQsNiArMTAzLDcgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9UWDM5WFg9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQpAQCAtMTE3LDE0ICsxMjcsMTIgQEAKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMTU5LDYgKzE2NywxNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CkBAIC0xNzEsNyArMTg4LDYgQEAKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0xODgsMjYgKzIwNCwyMyBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjIxLDcgKzIzNCw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCkBAIC0yMzEsMTIgKzI0NCwxNSBAQAogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKQEAgLTI0NSwxNSArMjYxLDEyIEBACiAjCiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yOTMsNiArMzA2LDcgQEAKICMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTMwMiwxNCArMzE2LDkgQEAKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwpAQCAtMzIzLDcgKzMzMiw4OSBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CisjIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKQEAgLTMzNiw2ICs0MjcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zNjEsNyArNDUzLDYgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldApAQCAtMzgzLDYgKzQ3NCw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTM5Miw2ICs0ODYsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0OTQsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTQwNiw3ICs1MDQsNiBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfVEMzNTgxNT15Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTQxNSw5ICs1MTIsMTEgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTQyOCw2ICs1MjcsMTAgQEAKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC00NDAsMjcgKzU0Myw3IEBACiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC01MTcsMTAgKzYwMCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HUElPX0xJQj15CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQogCiAjCi0jIEdQSU8gU3VwcG9ydAorIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgogIwogCiAjCkBAIC01MjgsNiArNjEyLDExIEBACiAjCiAKICMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisKKyMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNTQyLDYgKzYzMSw3IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CiBDT05GSUdfVFhYOV9XRFQ9eQogCiAjCkBAIC01NDksMTggKzYzOSwyMSBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTU5MSwxNiArNjg0LDI2IEBACiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCitDT05GSUdfTEVEU19HUElPPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CkBAIC02MjYsMjcgKzcyOSwzNCBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTc0Mj15CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKQEAgLTY3NiwyOCArNzg2LDE3IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKQEAgLTcyNiw3ICs4MjUsMTYgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfQ01ETElORT0iIgogCiAjCkBAIC03MzQsMTUgKzg0MiwxOCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9taXBzL2NvbmZpZ3MvbWFya2VpbnNfZGVmY29uZmlnCmluZGV4IGZlYTliYzkuLmJhZDg5MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2VtbWEycmhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZwpAQCAtMzUsNyArMzUsNyBAQAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19NQVJLRUlOUz15CitDT05GSUdfTkVDX01BUktFSU5TPXkKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKQEAgLTY4LDcgKzY4LDcgQEAKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfU1dBUF9JT19TUEFDRT15Ci1DT05GSUdfRU1NQTJSSD15CitDT05GSUdfU09DX0VNTUEyUkg9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCkBAIC01NzQsOSArNTc0LDkgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgxZTAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAyMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCmluZGV4IDgzZDVjNTguLjFlZmU5NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmM5Ci0jIEZyaSBKdWwgMTEgMjM6MDM6MjEgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNworIyBXZWQgTWFyICA0IDIzOjA4OjA2IDIwMDkKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTgsOCArMTgsMTAgQEAKICMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNTUEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldApAQCAtMzksMjAgKzQxLDI4IEBACiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAogQ09ORklHX01BQ0hfVFg0OVhYPXkKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVFhYOT15CiBDT05GSUdfVE9TSElCQV9SQlRYNDkyNz15CiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOD15CitDT05GSUdfVE9TSElCQV9SQlRYNDkzOT15CiBDT05GSUdfU09DX1RYNDkyNz15CiBDT05GSUdfU09DX1RYNDkzOD15CitDT05GSUdfU09DX1RYNDkzOT15CitDT05GSUdfVFhYOV83U0VHTEVEPXkKICMgQ09ORklHX1RPU0hJQkFfRlBDSUIwIGlzIG5vdCBzZXQKIENPTkZJR19QSUNNR19QQ0lfQkFDS1BMQU5FX0RFRkFVTFQ9eQogCiAjCiAjIE11bHRpcGxleCBQaW4gU2VsZWN0CiAjCi1DT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9QSU81OF82MT15CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX1BJTzU4XzYxIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzhfTVBMRVhfTkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9LRUVQPXkKIENPTkZJR19QQ0lfVFg0OTI3PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CkBAIC02NCwxNCArNzQsMTggQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CiBDT05GSUdfQ0VWVF9SNEs9eQogQ09ORklHX0NFVlRfVFhYOT15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19DU1JDX1I0Sz15CiBDT05GSUdfR1BJT19UWFg5PXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0dQSU89eQpAQCAtMTAwLDYgKzExNCw3IEBACiBDT05GSUdfQ1BVX1RYNDlYWD15CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtMTA3LDYgKzEyMiw3IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfVFg0OVhYPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKQEAgLTEzNCwxMyArMTUwLDEyIEBACiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQEAgLTE3Niw2ICsxOTEsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xOTAsNyArMjE0LDYgQEAKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0yMDcsMzAgKzIzMCwyNiBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0NCw3ICsyNjMsOCBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKQEAgLTI1NCwxMiArMjc0LDE1IEBACiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCkBAIC0yNjgsMTUgKzI5MSwxMiBAQAogIwogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzE4LDYgKzMzOCw3IEBACiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zMjcsMTQgKzM0OCw5IEBACiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKICMKQEAgLTM0OCw3ICszNjQsOTAgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldApAQCAtMzY1LDkgKzQ2NCw2MCBAQAogIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1RJTUlOR1M9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVfVFg0OTM4PXkKK0NPTkZJR19CTEtfREVWX0lERV9UWDQ5Mzk9eQorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC0zOTAsNyArNTQwLDYgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldApAQCAtNDEyLDE1ICs1NjEsMTkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CkBAIC00MjksNiArNTgyLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC00MzYsNyArNTkyLDYgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX1RDMzU4MTU9eQotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC00NDUsOSArNjAwLDExIEBACiAjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CkBAIC00NTgsNiArNjE1LDEwIEBACiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldApAQCAtNTAyLDYgKzY2Myw3IEBACiBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKQEAgLTUxNywxNyArNjc5LDE5IEBACiAjCiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1RYWDk9eQogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi1DT05GSUdfRUVQUk9NX0FUMjU9eQogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotQ09ORklHX0hBVkVfR1BJT19MSUI9eQorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKIAogIwotIyBHUElPIFN1cHBvcnQKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKIAogIwpAQCAtNTM1LDggKzY5OSwxNCBAQAogIwogCiAjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CkBAIC01NTAsNiArNzIwLDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKIENPTkZJR19UWFg5X1dEVD1tCiAKICMKQEAgLTU1NywxOCArNzI4LDIxIEBACiAjCiAjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNTk5LDE1ICs3NzMsMjcgQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0dQSU89eQorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQpAQCAtNjI4LDM1ICs4MTQsNDcgQEAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTc0Mj15CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfVFg0OTM5PXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02ODcsMzAgKzg4NSwxOSBAQAogQ09ORklHX1BST0NfRlM9eQogIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQpAQCAtNzQwLDcgKzkyNywxNiBAQAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfQ01ETElORT0iIgogCiAjCkBAIC03NDgsMTUgKzk0NCwxOCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYS9LY29uZmlnIGIvYXJjaC9taXBzL2VtbWEvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY2OWM3Mi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZW1tYS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotY2hvaWNlCi0JcHJvbXB0ICJNYWNoaW5lIHR5cGUiCi0JZGVwZW5kcyBvbiBNQUNIX0VNTUEKLQlkZWZhdWx0IE5FQ19NQVJLRUlOUwotCi1jb25maWcgTkVDX01BUktFSU5TCi0JYm9vbCAiTkVDIEVNTUEyUkggTWFyay1laW5zIGJvYXJkIgotCXNlbGVjdCBTT0NfRU1NQTJSSAotCXNlbGVjdCBIV19IQVNfUENJCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgTWFyay1laW5zIGJvYXJkcy4KLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBTT0NfRU1NQTJSSAotCWJvb2wKLQlzZWxlY3QgU09DX0VNTUEKLQlzZWxlY3QgU1lTX0hBU19DUFVfUjU1MDAKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCi0KLWNvbmZpZyBTT0NfRU1NQQotCWJvb2wKLQlzZWxlY3QgQ0VWVF9SNEsKLQlzZWxlY3QgQ1NSQ19SNEsKLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgU1dBUF9JT19TUEFDRQotCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMKaW5kZXggODhlODdmNi4uZDVmNDdlNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jCkBAIC0xNDEsMTMgKzE0MSw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gPSB7Ci0JJmkyY19lbW1hX2RldmljZXNbMF0sCi0JJmkyY19lbW1hX2RldmljZXNbMV0sCi0JJmkyY19lbW1hX2RldmljZXNbMl0sCi0JJnNlcmlhbF9lbW1hLAotfTsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG1hcmtlaW5zX3BhcnRzW10gPSB7CiAJWzBdID0gewogCQkubmFtZSA9ICJSb290RlMiLApAQCAtMTgxLDExICsxNzQsMzkgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWFya2VpbnNfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG1hcmtlaW5zX3BhcnRzKSwKKwkucGFydHMJCT0gbWFya2VpbnNfcGFydHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWFya2VpbnNfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4MWUwMDAwMDAsCisJLmVuZAkJPSAweDAyMDAwMDAwLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWFya2VpbnNfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKyAgICAgICAgCS5wbGF0Zm9ybV9kYXRhICA9ICZtYXJrZWluc19mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYXJrZWluc19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gPSB7CisJaTJjX2VtbWFfZGV2aWNlcywKKwlpMmNfZW1tYV9kZXZpY2VzICsgMSwKKwlpMmNfZW1tYV9kZXZpY2VzICsgMiwKKwkmc2VyaWFsX2VtbWEsCisJJm1hcmtlaW5zX2ZsYXNoX2RldmljZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBsYXRmb3JtX2RldmljZXNfc2V0dXAodm9pZCkKIHsKLQlwaHlzbWFwX3NldF9wYXJ0aXRpb25zKG1hcmtlaW5zX3BhcnRzLCBBUlJBWV9TSVpFKG1hcmtlaW5zX3BhcnRzKSk7CiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCiBhcmNoX2luaXRjYWxsKHBsYXRmb3JtX2RldmljZXNfc2V0dXApOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaAppbmRleCA0M2JhZWQxLi4xMzRlMWZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKQEAgLTEzOCw3ICsxMzgsOCBAQAogCQlfX2luc3RydWN0aW9uX2hhemFyZCgpOwkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IxMDAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1I1NTAwKQogCiAvKgogICogUjEwMDAwIHJvY2tzIC0gYWxsIGhhemFyZHMgaGFuZGxlZCBpbiBoYXJkd2FyZSwgc28gdGhpcyBiZWNvbWVzIGEgbm9icmFpbmVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IGFiYzYyYWEuLjMyMTRhZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTY2LDcgKzY2LDcgQEAKICAqLwogI2RlZmluZSBJUlFfQUZGSU5JVFlfSE9PSyhpcnEpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGlycV9kZXNjW2lycV0uYWZmaW5pdHkpKSB7CVwKKyAgICBpZiAoIWNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5KSkge1wKIAlzbXRjX2ZvcndhcmRfaXJxKGlycSk7CQkJCQkJXAogCWlycV9leGl0KCk7CQkJCQkJCVwKIAlyZXR1cm47CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCmluZGV4IDA0MTc1MTYuLjUyNmYzMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCkBAIC0xMzkxLDExICsxMzkxLDExIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAogc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXAogewkJCQkJCQkJXAotCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IHJlcywgbmV3OwkJCQkJXAogCQkJCQkJCQlcCiAJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKLQlyZXMgfD0gc2V0OwkJCQkJCVwKLQl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwluZXcgPSByZXMgfCBzZXQ7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKG5ldyk7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gcmVzOwkJCQkJCVwKIH0JCQkJCQkJCVwKQEAgLTE0MDMsMjQgKzE0MDMsMjQgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCiBjbGVhcl9jMF8jI25hbWUodW5zaWduZWQgaW50IGNsZWFyKQkJCQlcCiB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzLCBuZXc7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAotCXJlcyAmPSB+Y2xlYXI7CQkJCQkJXAotCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCW5ldyA9IHJlcyAmIH5jbGVhcjsJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUobmV3KTsJCQkJCVwKIAkJCQkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJXAogfQkJCQkJCQkJXAogCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAotY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQkJXAorY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgdmFsKQkJXAogewkJCQkJCQkJXAotCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IHJlcywgbmV3OwkJCQkJXAogCQkJCQkJCQlcCiAJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKLQlyZXMgJj0gfmNoYW5nZTsJCQkJCQlcCi0JcmVzIHw9IChuZXcgJiBjaGFuZ2UpOwkJCQkJXAotCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCW5ldyA9IHJlcyAmIH5jaGFuZ2U7CQkJCQlcCisJbmV3IHw9ICh2YWwgJiBjaGFuZ2UpOwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShuZXcpOwkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJlZmV0Y2guaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCmluZGV4IDE3ODUwODMuLmE1NjU5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBQcmVmX1dyaXRlQmFja0ludmFsaWRhdGUgaXMgYSBub3AgYW5kIFByZWZfUHJlcGFyZUZvclN0b3JlIGlzIGJyb2tlbiBpbgogICogY3VycmVudCB2ZXJzaW9ucyBkdWUgdG8gZXJyYXR1bSBHMTA1LgogICoKLSAqIFZSNzcwMSBvbmx5IGltcGxlbWVudHMgdGhlIExvYWQgcHJlZmV0Y2guCisgKiBWUjU1MDAgKGluY2x1ZGluZyBWUjU3MDEgYW5kIFZSNzcwMSkgb25seSBpbXBsZW1lbnQgbG9hZCBwcmVmZXRjaC4KICAqCiAgKiBGaW5hbGx5IE1JUFMzMiBhbmQgTUlQUzY0IGltcGxlbWVudCBhbGwgb2YgdGhlIGZvbGxvd2luZyBoaW50cy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlY2NvbXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZWNjb21wLmgKaW5kZXggYTY3NzJlOS4uYWU2MzA2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlY2NvbXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2VjY29tcC5oCkBAIC0xNSw4ICsxNSw2IEBACiAgKi8KICNpZmRlZiBDT05GSUdfTUlQUzMyX08zMgogCi0jZGVmaW5lIFRJRl8zMkJJVCBUSUZfMzJCSVRfUkVHUwotCiAjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyCQk0MDAzCiAjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMgkJNDAwNAogI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdF8zMgkJNDAwMQpAQCAtMjQsOCArMjIsNiBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTMzJfTjMyKQogCi0jZGVmaW5lIFRJRl8zMkJJVCBfVElGXzMyQklUX0FERFIKLQogI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZF8zMgkJNjAwMAogI2RlZmluZSBfX05SX3NlY2NvbXBfd3JpdGVfMzIJCTYwMDEKICNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCTYwNTgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDljZTA2MDcuLjllODljZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtOSw2ICs5LDcgQEAKICNpZm5kZWYgX0FTTV9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9TSUdDT05URVhUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmYWNjMmQ3Li4yYWJjYTE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC03NSw2ICs3NSw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjaWZkZWYgX19LRVJORUxfXwogCiAvKiogc29ja190eXBlIC0gU29ja2V0IHR5cGVzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA4OGYxZjdkLi45OTk5M2MwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIF9BU01fU1dBQl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDNmNzZkZTcuLjY3NmFhMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMjcsNiArMTI3LDEyIEBACiAjZGVmaW5lIFRJRl9MT0FEX1dBVENICQkyNQkvKiBJZiBzZXQsIGxvYWQgd2F0Y2ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTMxCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCiAKKyNpZmRlZiBDT05GSUdfTUlQUzMyX08zMgorI2RlZmluZSBUSUZfMzJCSVQgVElGXzMyQklUX1JFR1MKKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFMzMl9OMzIpCisjZGVmaW5lIFRJRl8zMkJJVCBfVElGXzMyQklUX0FERFIKKyNlbmRpZiAvKiBDT05GSUdfTUlQUzMyX08zMiAqLworCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IGE3MTYyYTQuLjFiZGJjYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJY2FzZSBDUFVfUjQ2NTA6CiAJY2FzZSBDUFVfUjQ3MDA6CiAJY2FzZSBDUFVfUjUwMDA6CisJY2FzZSBDUFVfUjU1MDA6CiAJY2FzZSBDUFVfTkVWQURBOgogCWNhc2UgQ1BVXzRLQzoKIAljYXNlIENQVV80S0VDOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ2ljLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYwppbmRleCA0OTRhNDlhLi44N2RlYjhmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCXNldF9iaXQoaXJxLCBwY3B1X21hc2tzW2ZpcnN0X2NwdSh0bXApXS5wY3B1X21hc2spOwogCiAJfQotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqY3B1bWFzazsKKwljcHVtYXNrX2NvcHkoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgY3B1bWFzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX2xvY2ssIGZsYWdzKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKaW5kZXggNGI0MDA3Yi4uN2I4NDViYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDJmODQ1MmIuLjJhNDcyNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pcGMuaD4KQEAgLTIzNSw3ICsyMzQsNyBAQAogI2Vsc2UKIAogU1lTQ0FMTF9ERUZJTkU2KDMyX2lwYywgdTMyLCBjYWxsLCBpbnQsIGZpcnN0LCBpbnQsIHNlY29uZCwgaW50LCB0aGlyZCwKLQl1MzIsIHB0ciwgdTMyIGZpZnRoKQorCXUzMiwgcHRyLCB1MzIsIGZpZnRoKQogewogCXJldHVybiAtRU5PU1lTOwogfQpAQCAtMzU2LDQwICszNTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIHVzdGF0IGNvbXBhdGliaWxpdHkgKi8KLXN0cnVjdCB1c3RhdDMyIHsKLQljb21wYXRfZGFkZHJfdAlmX3RmcmVlOwotCWNvbXBhdF9pbm9fdAlmX3Rpbm9kZTsKLQljaGFyCQlmX2ZuYW1lWzZdOwotCWNoYXIJCWZfZnBhY2tbNl07Ci19OwotCi1leHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c191c3RhdChkZXZfdCBkZXYsIHN0cnVjdCB1c3RhdCBfX3VzZXIgKiB1YnVmKTsKLQotU1lTQ0FMTF9ERUZJTkUyKDMyX3VzdGF0LCBkZXZfdCwgZGV2LCBzdHJ1Y3QgdXN0YXQzMiBfX3VzZXIgKiwgdWJ1ZjMyKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHVzdGF0IHRtcDsKLQlzdHJ1Y3QgdXN0YXQzMiB0bXAzMjsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQllcnIgPSBzeXNfdXN0YXQoZGV2LCAoc3RydWN0IHVzdGF0IF9fdXNlciAqKSZ0bXApOwotCXNldF9mcyhvbGRfZnMpOwotCi0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQltZW1zZXQoJnRtcDMyLCAwLCBzaXplb2Yoc3RydWN0IHVzdGF0MzIpKTsKLQl0bXAzMi5mX3RmcmVlID0gdG1wLmZfdGZyZWU7Ci0JdG1wMzIuZl90aW5vZGUgPSB0bXAuZl90aW5vZGU7Ci0KLQllcnIgPSBjb3B5X3RvX3VzZXIodWJ1ZjMyLCAmdG1wMzIsIHNpemVvZihzdHJ1Y3QgdXN0YXQzMikpID8gLUVGQVVMVCA6IDA7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCiBTWVNDQUxMX0RFRklORTQoMzJfc2VuZGZpbGUsIGxvbmcsIG91dF9mZCwgbG9uZywgaW5fZmQsCiAJY29tcGF0X29mZl90IF9fdXNlciAqLCBvZmZzZXQsIHMzMiwgY291bnQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggNzQzOGU5Mi4uZjYxZDZiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJUFRSCWNvbXBhdF9zeXNfdXRpbWUJCS8qIDYxMzAgKi8KIAlQVFIJc3lzX21rbm9kCiAJUFRSCXN5c18zMl9wZXJzb25hbGl0eQotCVBUUglzeXNfMzJfdXN0YXQKKwlQVFIJY29tcGF0X3N5c191c3RhdAogCVBUUgljb21wYXRfc3lzX3N0YXRmcwogCVBUUgljb21wYXRfc3lzX2ZzdGF0ZnMJCS8qIDYxMzUgKi8KIAlQVFIJc3lzX3N5c2ZzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggYjBmZWY0Zi4uNjA5OTdmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJUFRSCXN5c19vbGR1bmFtZQogCVBUUglzeXNfdW1hc2sJCQkvKiA0MDYwICovCiAJUFRSCXN5c19jaHJvb3QKLQlQVFIJc3lzXzMyX3VzdGF0CisJUFRSCWNvbXBhdF9zeXNfdXN0YXQKIAlQVFIJc3lzX2R1cDIKIAlQVFIJc3lzX2dldHBwaWQKIAlQVFIJc3lzX2dldHBncnAJCQkvKiA0MDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IGI2Y2NhMDEuLjVmNWFmN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC02ODYsNyArNjg2LDcgQEAKIAkgKiBhbmQgZWZmaWNpZW5jeSwgd2UganVzdCBwaWNrIHRoZSBlYXNpZXN0IG9uZSB0byBmaW5kLgogCSAqLwogCi0JdGFyZ2V0ID0gZmlyc3RfY3B1KGlycV9kZXNjW2lycV0uYWZmaW5pdHkpOworCXRhcmdldCA9IGNwdW1hc2tfZmlyc3QoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CiAKIAkvKgogCSAqIFdlIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gY29kZSB0byBoYXZlIGNvcnJlY3RseSBwcm9jZXNzZWQKQEAgLTkyMSwxMSArOTIxLDEzIEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7CiAJdm9pZCAqYXJnX2NvcHkgPSBwaXBpLT5hcmc7CiAJaW50IHR5cGVfY29weSA9IHBpcGktPnR5cGU7CisJaW50IGlycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgMTsKKwogCXNtdGNfaXBpX25xKCZmcmVlSVBJcSwgcGlwaSk7CiAJc3dpdGNoICh0eXBlX2NvcHkpIHsKIAljYXNlIFNNVENfQ0xPQ0tfVElDSzoKIAkJaXJxX2VudGVyKCk7Ci0JCWtzdGF0X3RoaXNfY3B1LmlycXNbTUlQU19DUFVfSVJRX0JBU0UgKyAxXSsrOworCQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAkJY2QgPSAmcGVyX2NwdShtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOwogCQljZC0+ZXZlbnRfaGFuZGxlcihjZCk7CiAJCWlycV9leGl0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggYjJkNzA0MS4uMjlmYWRhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTUyMCw3ICsxNTIwLDkgQEAKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgeworCQl1bnNpZ25lZCBsb25nIHNyID0gc2V0X2MwX3N0YXR1cyhTVDBfQkVWKTsKIAkJd3JpdGVfYzBfZWJhc2UoZWJhc2UpOworCQl3cml0ZV9jMF9zdGF0dXMoc3IpOwogCQkvKiBTZXR0aW5nIHZlY3RvciBzcGFjaW5nIGVuYWJsZXMgRUkvVkkgbW9kZSAgKi8KIAkJY2hhbmdlX2MwX2ludGN0bCgweDNlMCwgVkVDVE9SU1BBQ0lORyk7CiAJfQpAQCAtMTYwMiw4ICsxNjA0LDYgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl1bnNpZ25lZCBsb25nIHVuY2FjaGVkX2ViYXNlID0gVE9fVU5DQUMoZWJhc2UpOwogI2VuZGlmCi0JaWYgKGNwdV9oYXNfbWlwc19yMikKLQkJdW5jYWNoZWRfZWJhc2UgKz0gKHJlYWRfYzBfZWJhc2UoKSAmIDB4M2ZmZmYwMDApOwogCiAJaWYgKCFhZGRyKQogCQlwYW5pYyhwYW5pY19udWxsX2NlcnIpOwpAQCAtMTYzNSw5ICsxNjM1LDExIEBACiAJCXJldHVybjsJLyogQWxyZWFkeSBkb25lICovCiAjZW5kaWYKIAotCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KQotCQllYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX2xvd19wYWdlcygweDIwMCArIFZFQ1RPUlNQQUNJTkcqNjQpOwotCWVsc2UgeworCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDB4MjAwICsgVkVDVE9SU1BBQ0lORyo2NDsKKwkJZWJhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJCV9fYWxsb2NfYm9vdG1lbShzaXplLCAxIDw8IGZscyhzaXplKSwgMCk7CisJfSBlbHNlIHsKIAkJZWJhc2UgPSBDQUNfQkFTRTsKIAkJaWYgKGNwdV9oYXNfbWlwc19yMikKIAkJCWViYXNlICs9IChyZWFkX2MwX2ViYXNlKCkgJiAweDNmZmZmMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggYzQzZjRiMi4uODcxZTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQljLT5kY2FjaGUud2F5cyA9IDI7CiAJCWMtPmRjYWNoZS53YXliaXQgPSAwOwogCi0JCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QOworCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUCB8IE1JUFNfQ1BVX1BSRUZFVENIOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX1RYNDlYWDoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKaW5kZXggNTQ2ZTY5Ny4uYmVkNTZmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWlmICghcGxhdF9kZXZpY2VfaXNfY29oZXJlbnQoZGV2KSAmJiBkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkgewogCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAKLQkJYWRkciA9IHBsYXRfZG1hX2FkZHJfdG9fcGh5cyhkbWFfYWRkcmVzcyk7CisJCWFkZHIgPSBkbWFfYWRkcl90b192aXJ0KGRtYV9hZGRyZXNzKTsKIAkJZG1hX2NhY2hlX3diYWNrX2ludihhZGRyLCBzaXplKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wYWdlLmMgYi9hcmNoL21pcHMvbW0vcGFnZS5jCmluZGV4IDE0MTdjNjQuLjQ4MDYwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wYWdlLmMKKysrIGIvYXJjaC9taXBzL21tL3BhZ2UuYwpAQCAtMTcyLDggKzE3Miw5IEBACiAJCSAqLwogCQljYWNoZV9saW5lX3NpemUgPSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpOwogCQlzd2l0Y2ggKGN1cnJlbnRfY3B1X3R5cGUoKSkgeworCQljYXNlIENQVV9SNTUwMDoKIAkJY2FzZSBDUFVfVFg0OVhYOgotCQkJLyogVFg0OSBzdXBwb3J0cyBvbmx5IFByZWZfTG9hZCAqLworCQkJLyogVGhlc2UgcHJvY2Vzc29ycyBvbmx5IHN1cHBvcnQgdGhlIFByZWZfTG9hZC4gKi8KIAkJCXByZWZfYmlhc19jb3B5X2xvYWQgPSAyNTY7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCA0Mjk0MjAzLi5mMzM1Y2Y2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiZXguYworKysgYi9hcmNoL21pcHMvbW0vdGxiZXguYwpAQCAtMzE4LDYgKzMxOCw3IEBACiAJY2FzZSBDUFVfQkNNNDcxMDoKIAljYXNlIENQVV9MT09OR1NPTjI6CiAJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTjoKKwljYXNlIENQVV9SNTUwMDoKIAkJaWYgKG00a2NfdGxicF93YXIoKSkKIAkJCXVhc21faV9ub3AocCk7CiAJCXRsYncocCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXNtdGMuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtc210Yy5jCmluZGV4IGFhYmQ3MjcuLjViYTMxODggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtc210Yy5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtc210Yy5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogdm9pZCBwbGF0X3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQogewotCWNwdW1hc2tfdCB0bWFzayA9ICphZmZpbml0eTsKKwljcHVtYXNrX3QgdG1hc2s7CiAJaW50IGNwdSA9IDA7CiAJdm9pZCBzbXRjX3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGFmZik7CiAKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAJICogYmUgbWFkZSB0byBmb3J3YXJkIHRvIGFuIG9mZmxpbmUgIkNQVSIuCiAJICovCiAKKwljcHVtYXNrX2NvcHkoJnRtYXNrLCBhZmZpbml0eSk7CiAJZm9yX2VhY2hfY3B1KGNwdSwgYWZmaW5pdHkpIHsKIAkJaWYgKChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSAwKSB8fCAhY3B1X29ubGluZShjcHUpKQogCQkJY3B1X2NsZWFyKGNwdSwgdG1hc2spOwogCX0KLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gdG1hc2s7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksICZ0bWFzayk7CiAKIAlpZiAoY3B1c19lbXB0eSh0bWFzaykpCiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCmluZGV4IGY4YjE4YWYuLjBlY2Q1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAlpbnQgaXJxID0gU0dJX0JVU0VSUl9JUlE7CiAKIAlpcnFfZW50ZXIoKTsKLQlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAlpcDIyX2JlX2ludGVycnVwdChpcnEpOwogCWlycV9leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKaW5kZXggM2RjYjI3ZS4uYzhmN2QyMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJY2hhciBjOwogCiAJaXJxX2VudGVyKCk7Ci0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAJcHJpbnRrKEtFUk5fQUxFUlQgIk9vcHMsIGdvdCA4MjU0IGludGVycnVwdC5cbiIpOwogCUFyY1JlYWQoMCwgJmMsIDEsICZjbnQpOwogCUFyY0VudGVySW50ZXJhY3RpdmVNb2RlKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvc21wLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvc21wLmMKaW5kZXggZGRkZmRhOC4uMzE0NjkxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYwpAQCAtMTc4LDkgKzE3OCwxMCBAQAogdm9pZCBiY20xNDgwX21haWxib3hfaW50ZXJydXB0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaXJxID0gS19CQ00xNDgwX0lOVF9NQk9YXzBfMDsKIAl1bnNpZ25lZCBpbnQgYWN0aW9uOwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1tLX0JDTTE0ODBfSU5UX01CT1hfMF8wXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGlycV90b19kZXNjKGlycSkpOwogCS8qIExvYWQgdGhlIG1haWxib3ggcmVnaXN0ZXIgdG8gZmlndXJlIG91dCB3aGF0IHdlJ3JlIHN1cHBvc2VkIHRvIGRvICovCiAJYWN0aW9uID0gKF9fcmF3X3JlYWRxKG1haWxib3hfMF9yZWdzW2NwdV0pID4+IDQ4KSAmIDB4ZmZmZjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYwppbmRleCA1OTUwYTI4OC4uY2FkMTQwMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMKQEAgLTE2Niw5ICsxNjYsMTAgQEAKIHZvaWQgc2IxMjUwX21haWxib3hfaW50ZXJydXB0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaXJxID0gS19JTlRfTUJPWF8wOwogCXVuc2lnbmVkIGludCBhY3Rpb247CiAKLQlrc3RhdF90aGlzX2NwdS5pcnFzW0tfSU5UX01CT1hfMF0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAkvKiBMb2FkIHRoZSBtYWlsYm94IHJlZ2lzdGVyIHRvIGZpZ3VyZSBvdXQgd2hhdCB3ZSdyZSBzdXBwb3NlZCB0byBkbyAqLwogCWFjdGlvbiA9IChfX19fcmF3X3JlYWRxKG1haWxib3hfcmVnc1tjcHVdKSA+PiA0OCkgJiAweGZmZmY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCmluZGV4IDU2YzY0Y2MuLjUwZmRiNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWlmIChhY3Rpb24pIHsKIAkJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQkJc2VxX3ByaW50ZihwLCAiICUxNHMuJXUiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lLAogCQkJCSAgIChHeElDUihpKSAmIEd4SUNSX0xFVkVMKSA+PgogCQkJCSAgIEd4SUNSX0xFVkVMX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvbW4xMDMwMC13YXRjaGRvZy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXdhdGNoZG9nLmMKaW5kZXggMTA4MTFlOS4uMmUzNzBkOCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXdhdGNoZG9nLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXdhdGNoZG9nLmMKQEAgLTEzMCw2ICsxMzAsNyBAQAogCSAqIHRoZSBzdGFjayBOTUktYXRvbWljYWxseSwgaXQncyBzYWZlIHRvIHVzZSBzbXBfcHJvY2Vzc29yX2lkKCkuCiAJICovCiAJaW50IHN1bSwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpcnEgPSBOTUlJUlE7CiAJdTggd2R0LCB0bXA7CiAKIAl3ZHQgPSBXRENUUiAmIH5XRENUUl9XRENORTsKQEAgLTEzOCw3ICsxMzksNyBAQAogCU5NSUNSID0gTk1JQ1JfV0RJRjsKIAogCW5taV9jb3VudChjcHUpKys7Ci0Ja3N0YXRfdGhpc19jcHUuaXJxc1tOTUlJUlFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAJc3VtID0gaXJxX3N0YXRbY3B1XS5fX2lycV9jb3VudDsKIAogCWlmIChsYXN0X2lycV9zdW1zW2NwdV0gPT0gc3VtKSB7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9jb25maWdzLzcxMl9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzLzcxMl9kZWZjb25maWcKaW5kZXggOWZjOTZlNy4uYmYzNGEyOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy83MTJfZGVmY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvNzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMwotIyBGcmkgT2N0IDEyIDIxOjAwOjA3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAwMTozMjo1NSAyMDA5CiAjCiBDT05GSUdfUEFSSVNDPXkKIENPTkZJR19NTVU9eQpAQCAtMzMsMTcgKzMzLDM1IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC01NSwyOSArNzMsMzggQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKK0NPTkZJR19JTklUX0FMTF9QT1NTSUJMRT15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MSw2ICsxMTgsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwpAQCAtMTE0LDE3ICsxNDIsMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19IUFVYIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM4LDEwICsxNjgsNiBAQAogIyBDT05GSUdfRUlTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NiwxNiArMTgyLDE1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMTczLDYgKzE5OCw3IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0yMDMsMjUgKzIyOSwyNSBAQAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CkBAIC0yMzAsNiArMjU2LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQpAQCAtMjQwLDI4ICsyNjcsMjYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiBDT05GSUdfTkVUX1BLVEdFTj1tCiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTI3Niw2ICszMDEsOCBAQAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldApAQCAtMjk4LDExICszMjUsMTkgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTYxNDQKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIwogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC0zNDIsMTQgKzM3NywxNyBAQAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xBU0k3MDA9eQogQ09ORklHXzUzQzcwMF9MRV9PTl9CRT15CiAjIENPTkZJR19TQ1NJX1pBTE9OIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD1tCkBAIC0zNjIsNyArNDAwLDYgQEAKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC0zNzcsNiArNDE0LDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKQEAgLTM4Nyw2ICs0MjcsMTEgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQpAQCAtNDAxLDcgKzQ0Niw2IEBACiAjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC00MjMsNyArNDY3LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC00NDYsOCArNDg5LDggQEAKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9TRVJJQUw9bQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC00NzQsOSArNTE3LDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01MDEsNzIgKzU0Niw3NiBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAogQ09ORklHX1BSSU5URVI9bQogIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBERVY9bQotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci1DT05GSUdfR0VOX1JUQ19YPXkKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9MjU2CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTU3OSw2ICs2MjgsMTQgQEAKIENPTkZJR19GQl9TVEk9eQogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC02MDYsMTUgKzY2Myw4IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19QQVJJU0NfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTYzMCwxMCArNjgwLDcgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CkBAIC02NDEsNjMgKzY4OCw4MiBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUE9SVE1BTjJYNCBpcyBub3Qgc2V0Ci0KLSMKLSMgR1NDIGRldmljZXMKLSMKK0NPTkZJR19TTkRfR1NDPXkKIENPTkZJR19TTkRfSEFSTU9OWT15Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIwogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiBDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFJUQyBpbnRlcmZhY2VzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIERNQSBEZXZpY2VzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfUEFSSVNDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNzA3LDcgKzc3Myw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC03MTcsMTkgKzc4MywxOCBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC03NTksMTYgKzgyNCwxMyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKQEAgLTc3OCwzNSArODQwLDM0IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KIENPTkZJR19TTUJfRlM9bQpAQCAtODE1LDYgKzg3Niw3IEBACiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfVVBDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldApAQCAtODI3LDEwICs4ODksNiBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpAQCAtODcxLDMzICs5MjksMjggQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCi0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT1tCi0KLSMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC05MDksMTAgKzk2MiwzMiBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1JPREFUQT15CiAKICMKQEAgLTkyMSw1NyArOTk2LDExMyBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTlVMTD1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIwogQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19URVNUPW0KLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD1tCiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYTUwMF9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzL2E1MDBfZGVmY29uZmlnCmluZGV4IGRkYWNjNzIuLmYxMmU0YjggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvY29uZmlncy9hNTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMwotIyBGcmkgT2N0IDEyIDIxOjEyOjQ0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAwMTozMjo1NiAyMDA5CiAjCiBDT05GSUdfUEFSSVNDPXkKIENPTkZJR19NTVU9eQpAQCAtMzQsMTggKzM0LDMwIEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTcsMjggKzY5LDQwIEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQorQ09ORklHX0lOSVRfQUxMX1BPU1NJQkxFPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CiAKICMKQEAgLTkzLDYgKzExNyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwpAQCAtMTE4LDEyICsxNDMsMTIgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9CS0w9eQogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKQEAgLTEzMSwxMSArMTU2LDEyIEBACiBDT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX05SX0NQVVM9OAogCkBAIC0xNDUsMTQgKzE3MSwxMyBAQAogIyBDT05GSUdfR1NDIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEJBPXkKIENPTkZJR19JT1NBUElDPXkKIENPTkZJR19JT01NVV9TQkE9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1BDQ0FSRD1tCiAjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQT1tCkBAIC0xODcsMTYgKzIxMiwxNSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjA0LDYgKzIyOCw4IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCiBDT05GSUdfTkVUX0tFWT1tCiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMjM0LDcgKzI2MCw2IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CkBAIC0yNTAsNjYgKzI3NSw3MiBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiAjIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtMzE4LDMzICszNDksMzAgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09QVFM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotIyBDT05GSUdfSVA2X05GX01BVENIX09XTkVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiAjIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCBpcyBub3Qgc2V0Ci1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX1JBVz1tCiBDT05GSUdfSVBfRENDUD1tCiBDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQotQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKIAogIwogIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKLUNPTkZJR19JUF9EQ0NQX0NDSUQyPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUF9DQ0lEMyBpcyBub3Qgc2V0CiAKQEAgLTM1Niw2ICszODQsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogQ09ORklHX0xMQz1tCkBAIC0zNjYsMjggKzM5NSwyNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDAyLDYgKzQyOSw4IEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC00MjEsMTQgKzQ1MCwyMyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjE0NAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NjgsOCArNTA2LDEwIEBACiBDT05GSUdfU0NTSV9GQ19BVFRSUz1tCiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDc4LDE2ICs1MTgsMjEgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0xCkBAIC01MDMsOSArNTQ4LDExIEBACiBDT05GSUdfU0NTSV9ERUJVRz1tCiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKQEAgLTUxNCwxMCArNTYxLDYgQEAKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0ZVU0lPTj15CiBDT05GSUdfRlVTSU9OX1NQST1tCiBDT05GSUdfRlVTSU9OX0ZDPW0KQEAgLTUyOSwyMCArNTcyLDQwIEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPW0KIENPTkZJR19CT05ESU5HPW0KICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPW0KKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPW0KICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CkBAIC01NjcsMzMgKzYzMCwzOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj1tCi0jIENPTkZJR19QQ05FVDMyX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPW0KICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD1tCi1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTYwMSwyMyArNjY5LDMxIEBACiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9bQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI1LDYgKzcwMSwxMSBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogQ09ORklHX05FVF9QQ01DSUE9eQogQ09ORklHX1BDTUNJQV8zQzU4OT1tCiBDT05GSUdfUENNQ0lBXzNDNTc0PW0KQEAgLTY1MCw3ICs3MzEsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY2OSw3ICs3NDksNiBAQAogIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNjkzLDEwICs3NzIsMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC03MjEsMTcgKzgwMywxMiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19HRU5fUlRDX1g9eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotQ09ORklHX0FHUD15Ci1DT05GSUdfQUdQX1BBUklTQz15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNzM5LDUxICs4MTYsNjYgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CiBDT05GSUdfTUFYX1JBV19ERVZTPTI1NgogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19BR1A9eQorQ09ORklHX0FHUF9QQVJJU0M9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTc5Miw1MCArODg0LDgzIEBACiBDT05GSUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TPTE2MAogQ09ORklHX0RVTU1ZX0NPTlNPTEVfUk9XUz02NAogIyBDT05GSUdfU1RJX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBSVEMgaW50ZXJmYWNlcwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBETUEgRGV2aWNlcworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBVc2Vyc3BhY2UgSS9PCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfUEFSSVNDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtODQ1LDcgKzk3MCw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC04NTUsMTkgKzk4MCwxOSBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC04OTcsMTYgKzEwMjIsMTMgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CkBAIC05MTYsMzQgKzEwMzgsMzMgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU19ESVJFQ1RJTz15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCiBDT05GSUdfU1VOUlBDX0dTUz1tCi0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KIENPTkZJR19TTUJfRlM9bQpAQCAtOTUyLDYgKzEwNzMsNyBAQAogQ09ORklHX0NJRlM9bQogIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1VQQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKQEAgLTk2NCwxMCArMTA4Niw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCkBAIC0xMDA4LDMzICsxMTI2LDI4IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLQotIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMDQ2LDEwICsxMTU5LDMzIEBACiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JPREFUQSBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTgsNTYgKzExOTQsMTEyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX05VTEw9bQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKICMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvY29uZmlncy9iMTgwX2RlZmNvbmZpZyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYjE4MF9kZWZjb25maWcKaW5kZXggMWJmMjJjOS4uOThiYjA1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy9iMTgwX2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9jb25maWdzL2IxODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIEZyaSBPY3QgMTIgMjE6MTY6NDYgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjOAorIyBGcmkgTWFyIDEzIDAxOjMyOjU3IDIwMDkKICMKIENPTkZJR19QQVJJU0M9eQogQ09ORklHX01NVT15CkBAIC0zMywxMyArMzMsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTEsMjcgKzY3LDM0IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVF9BTExfUE9TU0lCTEU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODUsNiArMTA4LDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCkBAIC0xMDgsMTMgKzEzMiwxNSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19IUFVYIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMwLDE0ICsxNTYsMTQgQEAKIENPTkZJR19JU0E9eQogQ09ORklHX1BDST15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogQ09ORklHX0dTQ19ESU5PPXkKICMgQ09ORklHX1BDSV9MQkEgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBQQS1SSVNDIHNwZWNpZmljIGRyaXZlcnMKQEAgLTE1MSwxNiArMTc3LDE1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yMDUsMzYgKzIzMCwzNyBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCiAjCkBAIC0yNDcsNyArMjczLDkgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTI3NSwxMCArMzAzLDE4IEBACiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKIENPTkZJR19BVEFfT1ZFUl9FVEg9eQorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTMxNyw4ICszNTMsMTAgQEAKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtMzMwLDEyICszNjgsMTUgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldApAQCAtMzQ2LDYgKzM4Nyw3IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTEFTSTcwMD15CiBDT05GSUdfNTNDNzAwX0xFX09OX0JFPXkKQEAgLTM2MCw3ICs0MDIsNiBAQAogQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTPTMyCiBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQz00MAogIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldApAQCAtMzczLDkgKzQxNCwxMSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQpAQCAtMzgzLDI2ICs0MjYsMTggQEAKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKIAogIwotIyBBbiBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQorIyBBIG5ldyBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQogIwogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CkBAIC00MzQsMzYgKzQ2OSw0OSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC00NzEsNiArNTE5LDExIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKQEAgLTUwMyw3ICs1NTYsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC01MjYsMTEgKzU3OCwxMiBAQAogQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKQEAgLTU2NCw5ICs2MTcsMTEgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU5OCw3NSArNjUzLDc5IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19QUklOVEVSPXkKICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIwogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC02OTEsNiArNzUwLDcgQEAKICMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzU4LDE2IEBACiAjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTcxOCwxNSArNzg3LDggQEAKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX0xPR09fUEFSSVNDX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC03NDIsMTAgKzgwNCw3IEBACiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9EUklWRVJTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldApAQCAtNzUzLDEwICs4MTIsNyBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUE9SVE1BTjJYNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENJPXkKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CkBAIC03NjUsOSArODIxLDExIEBACiAjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldApAQCAtNzkyLDYgKzg1MCw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC04MDksMzAgKzg2OCwyMyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLQotIwotIyBHU0MgZGV2aWNlcwotIworQ09ORklHX1NORF9HU0M9eQogQ09ORklHX1NORF9IQVJNT05ZPXkKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKIENPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtODQwLDM2ICs4OTIsNjMgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOwogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgUlRDIGludGVyZmFjZXMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgRE1BIERldmljZXMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9QQVJJU0M9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC04NzksMTkgKzk1OCwxOCBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC05MTcsMzUgKzk5NSwzMiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQpAQCAtOTYyLDEwICsxMDM3LDYgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KQEAgLTEwMTEsNyArMTA4Miw5IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMTksOSArMTA5MiwxMiBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMDMzLDEwICsxMTA5LDI5IEBACiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlVJTERfRE9DU1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUk9EQVRBIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0NCw1MiArMTEzOSwxMDggQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIwogIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYzMwMDBfZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcKaW5kZXggYzZkZWYzYy4uMGFhODAxNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMKLSMgRnJpIE9jdCAxMiAyMToyNDowMCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM4CisjIEZyaSBNYXIgMTMgMDE6MzI6NTggMjAwOQogIwogQ09ORklHX1BBUklTQz15CiBDT05GSUdfTU1VPXkKQEAgLTMzLDE2ICszMywyOSBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC01NCwyOSArNjcsMzkgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKK0NPTkZJR19JTklUX0FMTF9QT1NTSUJMRT15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05MCw2ICsxMTMsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwpAQCAtMTE1LDE3ICsxMzksMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAjIENPTkZJR19IUFVYIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM0LDE0ICsxNjAsMTMgQEAKICMgQ09ORklHX0dTQyBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xCQT15CiBDT05GSUdfSU9TQVBJQz15CiBDT05GSUdfSU9NTVVfU0JBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCitDT05GSUdfSU9NTVVfSEVMUEVSPXkKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTE1OCwxNiArMTgzLDE1IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0xNzUsNiArMTk5LDggQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0yMDQsNyArMjMwLDYgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTIyMCwyOSArMjQ1LDM0IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogQ09ORklHX05FVEZJTFRFUl9ERUJVRz15CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTI1MSw2ICsyODEsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0yNjAsMjggKzI5MSwyNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMjk2LDYgKzMyNSw4IEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zMTYsNTkgKzM0Nyw2MiBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIEVFUFJPTSBzdXBwb3J0CiAjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPW0KLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFRE1BX09OTFlESVNLPXkKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTlM4NzQxNT15CkBAIC0zODAsMTAgKzQxNCw3IEBACiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydApAQCAtNDIyLDggKzQ1MywxMCBAQAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDMzLDE2ICs0NjYsMjAgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MApAQCAtNDU4LDkgKzQ5NSwxMSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9ERUJVRz1tCiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKQEAgLTQ3NSwxMyArNTE0LDggQEAKIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RNX01VTFRJUEFUSD1tCi0jIENPTkZJR19ETV9NVUxUSVBBVEhfRU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX01VTFRJUEFUSF9SREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAogQ09ORklHX0ZVU0lPTj15CiBDT05GSUdfRlVTSU9OX1NQST1tCiAjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldApAQCAtNDkzLDIwICs1MjcsNDAgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9bQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKQEAgLTUyOCwzMyArNTgyLDM4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPW0KICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz1tCiAjIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPW0KLSMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NjIsMjMgKzYyMSwzMSBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPW0KICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTU4Niw2ICs2NTMsMTEgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNTk0LDcgKzY2Niw2IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldApAQCAtNjEyLDcgKzY4Myw2IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjM0LDcgKzcwNCw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTYwMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTEyMDAKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY1Miw2ICs3MjEsNyBAQAogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNjcyLDEwICs3NDIsMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC02OTksNzIgKzc3Miw3NyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19HRU5fUlRDX1g9eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CiBDT05GSUdfTUFYX1JBV19ERVZTPTI1NgogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTc5MCw2ICs4NjgsNyBAQAogIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKQEAgLTc5OCw3ICs4NzcsMTYgQEAKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtODE4LDE1ICs5MDYsOCBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAogQ09ORklHX0xPR09fUEFSSVNDX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC04NDIsMjAgKzkyMywxNiBAQAogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKK0NPTkZJR19TTkRfVk1BU1RFUj15CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9EUklWRVJTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQogQ09ORklHX1NORF9BRDE4ODk9eQogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CkBAIC04NjQsMTAgKzk0MSwxMiBAQAogIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKQEAgLTg5Miw2ICs5NzEsNyBAQAogIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldApAQCAtOTA5LDQ3ICs5ODksNTkgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9VU0I9eQogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtOTU4LDEyICsxMDUwLDIwIEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTk3MSwzMiArMTA3MSwzNyBAQAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9bQorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQogQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNCwxNSArMTEwOSwxMCBAQAogIwogQ09ORklHX1VTQl9NREM4MDA9bQogQ09ORklHX1VTQl9NSUNST1RFSz1tCi0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjEsNyArMTEyMSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogQ09ORklHX1VTQl9MRUdPVE9XRVI9bQogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMDM3LDM3ICsxMTM3LDU5IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgUlRDIGludGVyZmFjZXMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgRE1BIERldmljZXMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgVXNlcnNwYWNlIEkvTworIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX1BBUklTQz15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwNzcsMjUgKzExOTksMjQgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xMTI0LDE2ICsxMjQ1LDEzIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTE0MiwzMiArMTI2MCwzMSBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE4MSwxMCArMTI5OCw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCkBAIC0xMjI1LDMzICsxMzM4LDI4IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLQotIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMjYzLDEwICsxMzcxLDMzIEBACiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19ST0RBVEE9eQogCiAjCkBAIC0xMjc0LDU0ICsxNDA1LDExMCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTlVMTD1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PW0KKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz1tCi0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz1tCi0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCiAjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZwppbmRleCA0NDhhNzU3Li4yODNhOTZjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL2NvbmZpZ3MvZGVmYXVsdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMKLSMgRnJpIE9jdCAxMiAyMDo1NDo1NyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM4CisjIEZyaSBNYXIgMTMgMDE6MzI6NTkgMjAwOQogIwogQ09ORklHX1BBUklTQz15CiBDT05GSUdfTU1VPXkKQEAgLTMzLDE3ICszMywzNSBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTUsMjkgKzczLDM5IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CitDT05GSUdfSU5JVF9BTExfUE9TU0lCTEU9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtOTEsNiArMTE5LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTExNCwxNyArMTQzLDE5IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogIyBDT05GSUdfSFBVWCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0MCwxNSArMTcxLDE0IEBACiAjIENPTkZJR19JU0EgaXMgbm90IHNldAogQ09ORklHX1BDST15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogQ09ORklHX0dTQ19ESU5PPXkKIENPTkZJR19QQ0lfTEJBPXkKIENPTkZJR19JT1NBUElDPXkKIENPTkZJR19JT01NVV9TQkE9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1BDQ0FSRD15CiAjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQT15CkBAIC0xODMsMTYgKzIxMywxNSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz1tCi0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTIwMCw2ICsyMjksOCBAQAogQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9eQogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTI0NSw4ICsyNzYsMTAgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC0yNTQsNiArMjg3LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQpAQCAtMjY0LDI4ICsyOTgsMjYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMzAwLDYgKzMzMiw4IEBACiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zMzAsNjMgKzM2NCw2OCBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjE0NAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgRUVQUk9NIHN1cHBvcnQKICMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz15CiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotQ09ORklHX0lERURNQV9PTkxZRElTSz15CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05TODc0MTU9eQpAQCAtMzk4LDEwICs0MzcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTQ0MCw4ICs0NzYsMTAgQEAKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDUyLDExICs0OTAsMTQgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC00NjQsNiArNTA1LDcgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xBU0k3MDA9eQogQ09ORklHXzUzQzcwMF9MRV9PTl9CRT15CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldApAQCAtNDg3LDkgKzUyOSwxMSBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKQEAgLTUwNSwzMiArNTQ5LDQ3IEBACiAjIENPTkZJR19ETV9aRVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQogQ09ORklHX0xBU0lfODI1OTY9eQpAQCAtNTUwLDEzICs2MDksMTUgQEAKICMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1hJUlRVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC01NjQsNyArNjI1LDcgQEAKICMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0xORTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldApAQCAtNTc0LDE5ICs2MzUsMjQgQEAKICMgQ09ORklHX0VTMzIxMCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz15CiAjIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01OTQsMjMgKzY2MCwzMSBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOCw2ICs2OTIsMTEgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNjI2LDcgKzcwNSw2IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKQEAgLTY1NCw3ICs3MzIsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY3Niw3ICs3NTMsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY5OSwxMSArNzc1LDEyIEBACiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQogQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPXkKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9ISUw9eQogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldApAQCAtNzI5LDEwICs4MDYsMTMgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC03NTksMjEgKzgzOSwxNiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKIENPTkZJR19QUklOVEVSPW0KICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1BQREVWPW0KLSMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX0dFTl9SVENfWD15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKQEAgLTc4MSw2MCArODU2LDcwIEBACiAjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtODYwLDYgKzk0NSw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtODY4LDcgKzk1NCwxNiBAQAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC04OTYsMTUgKzk5MSw4IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19QQVJJU0NfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTkyMCwxMSArMTAwOCw5IEBACiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9WTUFTVEVSPXkKIENPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CkBAIC05MzIsMTAgKzEwMTgsOCBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUE9SVE1BTjJYNCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQogQ09ORklHX1NORF9BRDE4ODk9eQogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CkBAIC05NDQsMTAgKzEwMjgsMTIgQEAKICMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CkBAIC05NzIsNiArMTA1OCw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC05ODksNTggKzEwNzYsNjcgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9VU0I9eQogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgZGV2aWNlcwotIworQ09ORklHX1NORF9QQ01DSUE9eQogIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotCi0jCi0jIEdTQyBkZXZpY2VzCi0jCitDT05GSUdfU05EX0dTQz15CiBDT05GSUdfU05EX0hBUk1PTlk9eQotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKIENPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTEwNDksMTIgKzExNDUsMTggQEAKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTA2MiwxOSArMTE2NCwyMyBAQAogQ09ORklHX1VTQl9VSENJX0hDRD15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKQEAgLTEwODQsMTYgKzExOTAsMTEgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwMiw3ICsxMjAzLDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTExOCwzOCArMTIxOSw2MCBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIworIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFJUQyBpbnRlcmZhY2VzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIERNQSBEZXZpY2VzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfUEFSSVNDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTE1OSwyMSArMTI4MiwyMCBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMDIsMTYgKzEzMjQsMTMgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CkBAIC0xMjIxLDMzICsxMzQwLDMyIEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiBDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCiBDT05GSUdfU01CX0ZTPW0KQEAgLTEyNTYsNiArMTM3NCw3IEBACiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfVVBDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldApAQCAtMTI2OCwxMCArMTM4Nyw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CkBAIC0xMzEyLDMzICsxNDI3LDI4IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9eQotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9bQotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiBDT05GSUdfSEVBREVSU19DSEVDSz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTEzNTAsMTAgKzE0NjAsMzMgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19UUkFDSU5HPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9ET0NTUkMgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ST0RBVEEgaXMgbm90IHNldAogCiAjCkBAIC0xMzYyLDU2ICsxNDk1LDExMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19OVUxMPW0KKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKIENPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fVEVTVD1tCi0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2hwdXgvZnMuYyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwppbmRleCBiZDlhNGRiMy4uNWNiZTlmOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaHB1eC9mcy5jCisrKyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwpAQCAtMTM3LDcgKzEzNyw2IEBACiAJCQllcnJvciA9IGNvdW50IC0gYnVmLmNvdW50OwogCX0KIAotb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc3NlbWJseS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXNzZW1ibHkuaAppbmRleCBmZmIyMDg4Li44OWZiNDAwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc3NlbWJseS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Fzc2VtYmx5LmgKQEAgLTc5LDYgKzc5LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtcmVncy5oPgogCkBAIC0xMjksMjcgKzEzMCwyNyBAQAogCiAJLyogU2hpZnQgTGVmdCAtIG5vdGUgdGhlIHIgYW5kIHQgY2FuIE5PVCBiZSB0aGUgc2FtZSEgKi8KIAkubWFjcm8gc2hsIHIsIHNhLCB0Ci0JZGVwLHoJXHIsIDMxLVxzYSwgMzItXHNhLCBcdAorCWRlcCx6CVxyLCAzMS0oXHNhKSwgMzItKFxzYSksIFx0CiAJLmVuZG0KIAogCS8qIFRoZSBQQSAyLjAgc2hpZnQgbGVmdCAqLwogCS5tYWNybyBzaGx3IHIsIHNhLCB0Ci0JZGVwdyx6CVxyLCAzMS1cc2EsIDMyLVxzYSwgXHQKKwlkZXB3LHoJXHIsIDMxLShcc2EpLCAzMi0oXHNhKSwgXHQKIAkuZW5kbQogCiAJLyogQW5kIHRoZSBQQSAyLjBXIHNoaWZ0IGxlZnQgKi8KIAkubWFjcm8gc2hsZCByLCBzYSwgdAotCWRlcGQseglcciwgNjMtXHNhLCA2NC1cc2EsIFx0CisJZGVwZCx6CVxyLCA2My0oXHNhKSwgNjQtKFxzYSksIFx0CiAJLmVuZG0KIAogCS8qIFNoaWZ0IFJpZ2h0IC0gbm90ZSB0aGUgciBhbmQgdCBjYW4gTk9UIGJlIHRoZSBzYW1lISAqLwogCS5tYWNybyBzaHIgciwgc2EsIHQKLQlleHRydSBcciwgMzEtXHNhLCAzMi1cc2EsIFx0CisJZXh0cnUgXHIsIDMxLShcc2EpLCAzMi0oXHNhKSwgXHQKIAkuZW5kbQogCiAJLyogcGEyMHcgdmVyc2lvbiBvZiBzaGlmdCByaWdodCAqLwogCS5tYWNybyBzaHJkIHIsIHNhLCB0Ci0JZXh0cmQsdSBcciwgNjMtXHNhLCA2NC1cc2EsIFx0CisJZXh0cmQsdSBcciwgNjMtKFxzYSksIDY0LShcc2EpLCBcdAogCS5lbmRtCiAKIAkvKiBsb2FkIDMyLWJpdCAndmFsdWUnIGludG8gJ3JlZycgY29tcGVuc2F0aW5nIGZvciB0aGUgbGRpbApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDMwMzFkMS4uMWY2ZDJhZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0xNzQsMTUgKzE3NCw0OCBAQAogCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIF9fZm9yY2UgKikgYWRkciA9IGI7CiB9CiAKLS8qIHJlYWRiIGNhbiBuZXZlciBiZSBjb25zdCwgc28gdXNlIF9fZnN3YWIgaW5zdGVhZCBvZiBsZSpfdG9fY3B1ICovCi0jZGVmaW5lIHJlYWRiKGFkZHIpIF9fcmF3X3JlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3KGFkZHIpIGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKQotI2RlZmluZSByZWFkbChhZGRyKSBsZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSkKLSNkZWZpbmUgcmVhZHEoYWRkcikgbGU2NF90b19jcHUoX19yYXdfcmVhZHEoYWRkcikpCi0jZGVmaW5lIHdyaXRlYihiLCBhZGRyKSBfX3Jhd193cml0ZWIoYiwgYWRkcikKLSNkZWZpbmUgd3JpdGV3KGIsIGFkZHIpIF9fcmF3X3dyaXRldyhjcHVfdG9fbGUxNihiKSwgYWRkcikKLSNkZWZpbmUgd3JpdGVsKGIsIGFkZHIpIF9fcmF3X3dyaXRlbChjcHVfdG9fbGUzMihiKSwgYWRkcikKLSNkZWZpbmUgd3JpdGVxKGIsIGFkZHIpIF9fcmF3X3dyaXRlcShjcHVfdG9fbGU2NChiKSwgYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciByZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKGFkZHIpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gbGUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBsZTY0X3RvX2NwdShfX3Jhd19yZWFkcShhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWIodW5zaWduZWQgY2hhciBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGViKGIsIGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRldyh1bnNpZ25lZCBzaG9ydCB3LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHcpLCBhZGRyKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwodW5zaWduZWQgaW50IGwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWwoY3B1X3RvX2xlMzIobCksIGFkZHIpOworfQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcSh1bnNpZ25lZCBsb25nIGxvbmcgcSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlcShjcHVfdG9fbGU2NChxKSwgYWRkcik7Cit9CisKKyNkZWZpbmUJcmVhZGIJcmVhZGIKKyNkZWZpbmUJcmVhZHcJcmVhZHcKKyNkZWZpbmUJcmVhZGwJcmVhZGwKKyNkZWZpbmUgcmVhZHEJcmVhZHEKKyNkZWZpbmUgd3JpdGViCXdyaXRlYgorI2RlZmluZSB3cml0ZXcJd3JpdGV3CisjZGVmaW5lIHdyaXRlbAl3cml0ZWwKKyNkZWZpbmUgd3JpdGVxCXdyaXRlcQogCiAjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKICNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCAzOTljODE5Li5kZmEyNmI2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtNDksNyArNDksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHhuX2FmZmluaXR5X2FkZHIodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CiAKIGV4dGVybiBpbnQgY3B1X2NsYWltX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKiwgdm9pZCAqKTsKLWV4dGVybiBpbnQgY3B1X2NoZWNrX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCAqZGVzdCk7CitleHRlcm4gaW50IGNwdV9jaGVja19hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCk7CiAKIC8qIHNvZnQgcG93ZXIgc3dpdGNoIHN1cHBvcnQgKHBvd2VyLmMpICovCiBleHRlcm4gc3RydWN0IHRhc2tsZXRfc3RydWN0IHBvd2VyX3Rhc2tsZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCmluZGV4IGM1ODRiMDAuLjQzMGYxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCkBAIC0zMzYsMTAgKzMzNiwxMSBAQAogI2RlZmluZSBOVU1fUERDX1JFU1VMVAkzMgogCiAjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIGV4dGVybiBpbnQgcGRjX3R5cGU7CiAKIC8qIFZhbHVlcyBmb3IgcGRjX3R5cGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZmJhNDAyYzkuLjg4NTQ3MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw2ICs1NCw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTB4NDAxZgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMHg0MDIwCisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKIC8qIE9fTk9OQkxPQ0sgY2xhc2hlcyB3aXRoIHRoZSBiaXRzIHVzZWQgZm9yIHNvY2tldCB0eXBlcy4gIFRoZXJlZm9yZSB3ZQogICogaGF2ZSB0byBkZWZpbmUgU09DS19OT05CTE9DSyB0byBhIGRpZmZlcmVudCB2YWx1ZSBoZXJlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggM2ZmMTZjNS4uZTc4NDAzYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX1BBUklTQ19TV0FCX0gKICNkZWZpbmUgX1BBUklTQ19TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggMWM2ZGJiNi4uY2Q0YzBiMiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMjQxLDYgKzI0MSw3IEBACiAjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCiAjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgogCitzdHJ1Y3QgcHRfcmVnczsKIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiAjZW5kaWYgLyogX19QQVJJU0NfVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCmluZGV4IDUyNTlkOGMuLjgzNzUzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCkBAIC01NTEsMTAgKzU1MSw3IEBACiB7CiAJaW50IHNyMzsKIAotCWlmICghdm1hLT52bV9tbS0+Y29udGV4dCkgewotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KKwlCVUdfT04oIXZtYS0+dm1fbW0tPmNvbnRleHQpOwogCiAJc3IzID0gbWZzcCgzKTsKIAlpZiAodm1hLT52bV9tbS0+Y29udGV4dCA9PSBzcjMpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggZDFmYTRlZC4uMGRiOWZkYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTM2OCw3ICszNjgsNyBAQAogCSAqIGFic3RyYWN0aW9ucyBmb3IgdGhlIG1hY3JvcyAqLwogCS5tYWNybwkJRVhUUglyZWcxLHN0YXJ0LGxlbmd0aCxyZWcyCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JZXh0cmQsdQkJXHJlZzEsMzIrXHN0YXJ0LFxsZW5ndGgsXHJlZzIKKwlleHRyZCx1CQlccmVnMSwzMisoXHN0YXJ0KSxcbGVuZ3RoLFxyZWcyCiAjZWxzZQogCWV4dHJ3LHUJCVxyZWcxLFxzdGFydCxcbGVuZ3RoLFxyZWcyCiAjZW5kaWYKQEAgLTM3Niw3ICszNzYsNyBAQAogCiAJLm1hY3JvCQlERVAJcmVnMSxzdGFydCxsZW5ndGgscmVnMgogI2lmZGVmIENPTkZJR182NEJJVAotCWRlcGQJCVxyZWcxLDMyK1xzdGFydCxcbGVuZ3RoLFxyZWcyCisJZGVwZAkJXHJlZzEsMzIrKFxzdGFydCksXGxlbmd0aCxccmVnMgogI2Vsc2UKIAlkZXB3CQlccmVnMSxcc3RhcnQsXGxlbmd0aCxccmVnMgogI2VuZGlmCkBAIC0zODQsNyArMzg0LDcgQEAKIAogCS5tYWNybwkJREVQSQl2YWwsc3RhcnQsbGVuZ3RoLHJlZwogI2lmZGVmIENPTkZJR182NEJJVAotCWRlcGRpCQlcdmFsLDMyK1xzdGFydCxcbGVuZ3RoLFxyZWcKKwlkZXBkaQkJXHZhbCwzMisoXHN0YXJ0KSxcbGVuZ3RoLFxyZWcKICNlbHNlCiAJZGVwd2kJCVx2YWwsXHN0YXJ0LFxsZW5ndGgsXHJlZwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IDAzZjI2YmQuLmY2ZDI0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR182NEJJVAotdm9pZCBfX2luaXQgc2V0X2Zpcm13YXJlX3dpZHRoX3VubG9ja2VkKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xNjgsNyArMTY4LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwZGNfKiBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlCiAgKiBjb252ZXJ0X3RvX3dpZGUgZnVuY3Rpb24uCiAgKi8KLXZvaWQgX19pbml0IHNldF9maXJtd2FyZV93aWR0aCh2b2lkKQordm9pZCBfX2NwdWluaXQgc2V0X2Zpcm13YXJlX3dpZHRoKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRjX2xvY2ssIGZsYWdzKTsKQEAgLTE3NiwxMSArMTc2LDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRjX2xvY2ssIGZsYWdzKTsKIH0KICNlbHNlCi12b2lkIF9faW5pdCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCkgewordm9pZCBfX2NwdWluaXQgc2V0X2Zpcm13YXJlX3dpZHRoX3VubG9ja2VkKHZvaWQpIHsKIAlyZXR1cm47CiB9CiAKLXZvaWQgX19pbml0IHNldF9maXJtd2FyZV93aWR0aCh2b2lkKSB7Cit2b2lkIF9fY3B1aW5pdCBzZXRfZmlybXdhcmVfd2lkdGgodm9pZCkgewogCXJldHVybjsKIH0KICNlbmRpZiAvKkNPTkZJR182NEJJVCovCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgX19pbml0IHBkY19jb3Byb2NfY2ZnX3VubG9ja2VkKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKQoraW50IF9fY3B1aW5pdCBwZGNfY29wcm9jX2NmZ191bmxvY2tlZChzdHJ1Y3QgcGRjX2NvcHJvY19jZmcgKnBkY19jb3Byb2NfaW5mbykKIHsKIAlpbnQgcmV0OwogCkBAIC0zMjMsNyArMzIzLDcgQEAKICAqIFRoaXMgUERDIGNhbGwgcmV0dXJucyB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBhbGwgdGhlIGNvcHJvY2Vzc29ycwogICogYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3Nvci4KICAqLwotaW50IF9faW5pdCBwZGNfY29wcm9jX2NmZyhzdHJ1Y3QgcGRjX2NvcHJvY19jZmcgKnBkY19jb3Byb2NfaW5mbykKK2ludCBfX2NwdWluaXQgcGRjX2NvcHJvY19jZmcoc3RydWN0IHBkY19jb3Byb2NfY2ZnICpwZGNfY29wcm9jX2luZm8pCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IGFjMmM4MjIuLjFjNzQwZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotaW50IGNwdV9jaGVja19hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgKmRlc3QpCitpbnQgY3B1X2NoZWNrX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHVfZGVzdDsKIApAQCAtMTIwLDIzICsxMjAsMjUgQEAKIAlpZiAoQ0hFQ0tfSVJRX1BFUl9DUFUoaXJxKSkgewogCQkvKiBCYWQgbGludXggZGVzaWduIGRlY2lzaW9uLiAgVGhlIG1hc2sgaGFzIGFscmVhZHkKIAkJICogYmVlbiBzZXQ7IHdlIG11c3QgcmVzZXQgaXQgKi8KLQkJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IENQVV9NQVNLX0FMTDsKKwkJY3B1bWFza19zZXRhbGwoJmlycV9kZXNjW2lycV0uYWZmaW5pdHkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiB3aGF0ZXZlciBtYXNrIHRoZXkgc2V0LCB3ZSBqdXN0IGFsbG93IG9uZSBDUFUgKi8KIAljcHVfZGVzdCA9IGZpcnN0X2NwdSgqZGVzdCk7Ci0JKmRlc3QgPSBjcHVtYXNrX29mX2NwdShjcHVfZGVzdCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY3B1X2Rlc3Q7CiB9CiAKIHN0YXRpYyB2b2lkIGNwdV9zZXRfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewotCWlmIChjcHVfY2hlY2tfYWZmaW5pdHkoaXJxLCBkZXN0KSkKKwlpbnQgY3B1X2Rlc3Q7CisKKwljcHVfZGVzdCA9IGNwdV9jaGVja19hZmZpbml0eShpcnEsIGRlc3QpOworCWlmIChjcHVfZGVzdCA8IDApCiAJCXJldHVybjsKIAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqZGVzdDsKKwljcHVtYXNrX2NvcHkoJmlycV9kZXNjW2lycV0uYWZmaW5pdHksIGRlc3QpOwogfQogI2VuZGlmCiAKQEAgLTE4Myw3ICsxODUsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbHNlCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYKQEAgLTI5NSw3ICsyOTcsNyBAQAogdW5zaWduZWQgbG9uZyB0eG5fYWZmaW5pdHlfYWRkcih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogI2lmZGVmIENPTkZJR19TTVAKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwljcHVtYXNrX2NvcHkoJmlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAjZW5kaWYKIAogCXJldHVybiBwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLnR4bl9hZGRyOwpAQCAtMzUyLDcgKzM1NCw3IEBACiAJaXJxID0gZWlycl90b19pcnEoZWlycl92YWwpOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWRlc3QgPSBpcnFfZGVzY1tpcnFdLmFmZmluaXR5OworCWNwdW1hc2tfY29weSgmZGVzdCwgJmlycV9kZXNjW2lycV0uYWZmaW5pdHkpOwogCWlmIChDSEVDS19JUlFfUEVSX0NQVShpcnFfZGVzY1tpcnFdLnN0YXR1cykgJiYKIAkgICAgIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGRlc3QpKSB7CiAJCWludCBjcHUgPSBmaXJzdF9jcHUoZGVzdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS1kbWEuYwppbmRleCBkZjQ3ODk1Li43ZDkyN2VhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2ktZG1hLmMKQEAgLTQ0NywxMCArNDQ3LDcgQEAKIAogc3RhdGljIGRtYV9hZGRyX3QgcGExMV9kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgInBhMTFfZG1hX21hcF9zaW5nbGUoUENJX0RNQV9OT05FKSBjYWxsZWQgYnkgJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JCUJVRygpOwotCX0KKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKIAogCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpIGFkZHIsIHNpemUpOwogCXJldHVybiB2aXJ0X3RvX3BoeXMoYWRkcik7CkBAIC00NTgsMTAgKzQ1NSw3IEBACiAKIHN0YXRpYyB2b2lkIHBhMTFfZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGExMV9kbWFfdW5tYXBfc2luZ2xlKFBDSV9ETUFfTk9ORSkgY2FsbGVkIGJ5ICVwXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCQlCVUcoKTsKLQl9CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCiAJICAgIHJldHVybjsKQEAgLTQ4MCw4ICs0NzQsNyBAQAogewogCWludCBpOwogCi0JaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkKLQkgICAgQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2dsaXN0KysgKSB7CiAJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBzZ192aXJ0X2FkZHIoc2dsaXN0KTsKQEAgLTQ5Niw4ICs0ODksNyBAQAogewogCWludCBpOwogCi0JaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkKLQkgICAgQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCiAJICAgIHJldHVybjsKQEAgLTUxMSwxNiArNTAzLDE0IEBACiAKIHN0YXRpYyB2b2lkIHBhMTFfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCWlmIChkaXJlY3Rpb24gPT0gRE1BX05PTkUpCi0JICAgIEJVRygpOworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwogCiAJZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgcGh5c190b192aXJ0KGRtYV9oYW5kbGUpICsgb2Zmc2V0LCBzaXplKTsKIH0KIAogc3RhdGljIHZvaWQgcGExMV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkKLQkgICAgQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSkgKyBvZmZzZXQsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggMzAzZDJiNi4uMDNiOWEwMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlFTlRSWV9PVVJTKG5ld3VuYW1lKQogCUVOVFJZX1NBTUUodW1hc2spCQkvKiA2MCAqLwogCUVOVFJZX1NBTUUoY2hyb290KQotCUVOVFJZX1NBTUUodXN0YXQpCisJRU5UUllfQ09NUCh1c3RhdCkKIAlFTlRSWV9TQU1FKGR1cDIpCiAJRU5UUllfU0FNRShnZXRwcGlkKQogCUVOVFJZX1NBTUUoZ2V0cGdycCkJCS8qIDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggN2MxNTVjMi4uOWQ3MDRkOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtMzA0LDEwICszMDQsOCBAQAogCSAqLwogCW1heF9sb3dfcGZuID0gbWF4X3BmbjsKIAotCWlmICgoYm9vdG1hcF9wZm4gLSBib290bWFwX3N0YXJ0X3BmbikgIT0gYm9vdG1hcF9wYWdlcykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HISBib290bWFwIHNpemluZyBpcyBtZXNzZWQgdXAhXG4iKTsKLQkJQlVHKCk7Ci0JfQorCS8qIGJvb3RtYXAgc2l6aW5nIG1lc3NlZCB1cD8gKi8KKwlCVUdfT04oKGJvb3RtYXBfcGZuIC0gYm9vdG1hcF9zdGFydF9wZm4pICE9IGJvb3RtYXBfcGFnZXMpOwogCiAJLyogcmVzZXJ2ZSBQQUdFMCBwZGMgbWVtb3J5LCBrZXJuZWwgdGV4dC9kYXRhL2JzcyAmIGJvb3RtYXAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKaW5kZXggOGI1YmE4Mi4uNDQ0N2RlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0AxODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQ2MGV4LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDQgMHgwMDE4MDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4ND47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZXgiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwppbmRleCAyODA0NDQ0Li41ZTZiMDhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCkBAIC05Nyw2ICs5NywxMyBAQAogCQkJCSAgICAgIDB4NiAweDQ+OwkvKiBFQ0MgU0VDIEVycm9yICovIAogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQGVmNzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1jYyxwcGM0MDVleC1jcnlwdG8iLCAiYW1jYyxwcGM0eHgtY3J5cHRvIjsKKwkJCXJlZyA9IDwweGVmNzAwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MTcgMHgyPjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00MDVleCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKaW5kZXggYjZlZWU3Yy4uYWMxNGY1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjMwotIyBXZWQgQXVnIDIwIDA4OjE2OjUzIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAwOToyODo0NSAyMDA5CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0xNiwxMyArMTYsMTQgQEAKIENPTkZJR19BTFRJVkVDPXkKICMgQ09ORklHX1ZTWCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzY0PXkKIENPTkZJR19QUENfTU1fU0xJQ0VTPXkKIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgogQ09ORklHXzY0QklUPXkKIENPTkZJR19XT1JEX1NJWkU9NjQKLUNPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKQEAgLTQ2LDcgKzQ3LDcgQEAKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUFBDX09GPXkKIENPTkZJR19PRj15CkBAIC03NCwxMCArNzUsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC04NiwxMSArOTYsMTMgQEAKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CkBAIC05OSwzNyArMTExLDM2IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTM3LDcgKzE0OCw2IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKQEAgLTE1Nyw3ICsxNjcsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xODMsMTggKzE5MywyMCBAQAogQ09ORklHX1BTM19ESVNLPXkKIENPTkZJR19QUzNfUk9NPXkKIENPTkZJR19QUzNfRkxBU0g9eQotQ09ORklHX09QUk9GSUxFX1BTMz15CitDT05GSUdfUFMzX1ZSQU09bQogQ09ORklHX1BTM19MUE09bQogQ09ORklHX1BQQ19DRUxMPXkKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9RUEFDRSBpcyBub3Qgc2V0CiAKICMKICMgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMKICMKIENPTkZJR19TUFVfRlM9eQogQ09ORklHX1NQVV9GU182NEtfTFM9eQorIyBDT05GSUdfU1BVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19TUFVfQkFTRT15CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjIyLDcgQEAKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0yMjksNiArMjQyLDggQEAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKICMgQ09ORklHX0lPTU1VX1ZNRVJHRSBpcyBub3Qgc2V0CkBAIC0yNTEsNyArMjY2LDYgQEAKIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiAjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCBpcyBub3Qgc2V0CkBAIC0yNjEsMTEgKzI3NSwxNCBAQAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFPXkKIENPTkZJR19QUENfSEFTX0hBU0hfNjRLPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfU0NIRURfU01UPXkKQEAgLTI5OSw2ICszMTYsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzYxLDYgKzM3OSw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM3MSw2ICszOTAsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zOTIsMzkgKzQxMiwzNyBAQAogIwogIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19CVF9IQ0lVU0I9bQotQ09ORklHX0JUX0hDSVVTQl9TQ089eQorQ09ORklHX0JUX0hDSUJUVVNCPW0KICMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTkw4MDIxMT15CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9bQogCiAjCiAjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCiAjCiBDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCiAjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ1MCw2ICs0NjgsNyBAQAogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDk0LDcgKzUxMyw2IEBACiAjCiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUFMzVlJBTT15CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCkBAIC01MDgsNiArNTI2LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUyOCw4ICs1NTEsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU3NSw3ICs2MDMsMTcgQEAKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX01EPXkKKyMgQ09ORklHX0JMS19ERVZfTUQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjI5LDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfR0VMSUNfTkVUPXkKQEAgLTYwNCw2ICs2NDUsNyBAQAogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15CiAjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKQEAgLTYxNSwxMyArNjU3LDExIEBACiAjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAogQ09ORklHX1pEMTIxMVJXPW0KICMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19SVDJYMDA9bQotQ09ORklHX1JUMlgwMF9MSUI9bQotQ09ORklHX1JUMlgwMF9MSUJfVVNCPW0KLUNPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFPXkKLSMgQ09ORklHX1JUMjUwMFVTQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlQ3M1VTQj1tCi0jIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTYzNCw2ICs2NzQsNyBAQAogQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCiAjIENPTkZJR19VU0JfTkVUX0NEQ0VUSEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldApAQCAtNjY0LDcgKzcwNSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwpAQCAtNzM1LDggKzc3NiwxMCBAQAogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldApAQCAtNzUzLDExICs3OTYsMTEgQEAKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY3LDYgKzgxMCw3IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNzkyLDYgKzgzNiw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKQEAgLTgxNyw2ICs4NjIsOCBAQAogQ09ORklHX0ZCX1BTMz15CiBDT05GSUdfRkJfUFMzX0RFRkFVTFRfU0laRV9NPTkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtODQxLDYgKzg4OCw3IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC04NDksNiArODk3LDcgQEAKICMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CkBAIC04NzMsMTUgKzkyMiw0MCBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9bQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwogIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04OTgsNyArOTcyLDExIEBACiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVNQRU5EPXkKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPW0KKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtOTA5LDYgKzk4Nyw3IEBACiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQpAQCAtOTE4LDYgKzk5Nyw3IEBACiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCkBAIC05MjksMjAgKzEwMDksMjAgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTk1MCw3ICsxMDMwLDYgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCkBAIC05NzEsNiArMTA1MCw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC05ODgsNyArMTA2OCwxMiBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMDE0LDEyICsxMDk5LDE1IEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyOCw2ICsxMTE2LDcgQEAKIENPTkZJR19SVENfRFJWX1BQQz1tCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEwMzUsMjYgKzExMjQsMzUgQEAKIENPTkZJR19FWFQyX0ZTPW0KICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlM9bQogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQorQ09ORklHX0VYVDRfRlM9eQorIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPW0KICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CiAjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT15CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKIENPTkZJR19RVU9UQUNUTD15CkBAIC0xMDg3LDE2ICsxMTg1LDE0IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTA2LDYgKzEyMDIsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTEyNiw2ICsxMjIzLDcgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE5MCw5ICsxMjg4LDkgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19DUkNfSVRVX1Q9bQogQ09ORklHX0NSQzMyPXkKQEAgLTEyNTAsMjcgKzEzNDgsNDQgQEAKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiBDT05GSUdfREVCVUdfTElTVD15CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJRU1RBQ0tTPXkKICMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldApAQCAtMTI4MiwxNiArMTM5NywyNiBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTEzNjMsNiArMTQ4OCwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vdHguaAppbmRleCA1N2I4MmUzLi42MGEzYzllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vdHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vdHguaApAQCAtOSw3ICs5LDcgQEAKICNpZm5kZWYgX19BU01fQk9PVFhfSF9fCiAjZGVmaW5lIF9fQVNNX0JPT1RYX0hfXwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmZGVmIG1hY2ludG9zaAogI2luY2x1ZGUgPFR5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDQ5MTExMDQuLjIxMTcyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0yNDEsOSArMjQxLDExIEBACiAvKiBXZSBuZWVkIHRvIG1hcmsgYWxsIHBhZ2VzIGFzIGJlaW5nIGNvaGVyZW50IGlmIHdlJ3JlIFNNUCBvciB3ZSBoYXZlIGEKICAqIDc0WzQ1XXggYW5kIGFuIE1QQzEwNyBob3N0IGJyaWRnZS4gQWxzbyA4M3h4IGFuZCBQb3dlclFVSUNDIElJCiAgKiByZXF1aXJlIGl0IGZvciBQQ0kgInN0cmVhbWluZy9wcmVmZXRjaCIgdG8gd29yayBwcm9wZXJseS4KKyAqIFRoaXMgaXMgYWxzbyByZXF1aXJlZCBieSA1Mnh4IGZhbWlseS4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfTVBDMTBYX0JSSURHRSkgXAotCXx8IGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKQorCXx8IGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKSBcCisJfHwgZGVmaW5lZChDT05GSUdfUFBDX01QQzUyeHgpCiAjZGVmaW5lIENQVV9GVFJfQ09NTU9OICAgICAgICAgICAgICAgICAgQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UCiAjZWxzZQogI2RlZmluZSBDUFVfRlRSX0NPTU1PTiAgICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjZDQ2ZjAyLi5iNTYwMGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGY5OTNlNDEuLmJiMmRlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgX19MSU5VWF9LVk1fUE9XRVJQQ19ICiAjZGVmaW5lIF9fTElOVVhfS1ZNX1BPV0VSUENfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGt2bV9yZWdzIHsKIAlfX3U2NCBwYzsKQEAgLTUyLDQgKzUyLDExIEBACiAJX191NjQgZnByWzMyXTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX1BPV0VSUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKaW5kZXggZjQ5MDMxYi4uZDIyZDM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCkBAIC0yOCw2ICsyOCwxMyBAQAogICogbmVlZCB0byBmaW5kIHNvbWUgd2F5IG9mIGFkdmVydGlzaW5nIGl0LiAqLwogI2RlZmluZSBLVk00NHhfR1VFU1RfVExCX1NJWkUgNjQKIAorc3RydWN0IGt2bXBwY180NHhfdGxiZSB7CisJdTMyIHRpZDsgLyogT25seSB0aGUgbG93IDggYml0cyBhcmUgdXNlZC4gKi8KKwl1MzIgd29yZDA7CisJdTMyIHdvcmQxOworCXUzMiB3b3JkMjsKK307CisKIHN0cnVjdCBrdm1wcGNfNDR4X3NoYWRvd19yZWYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBndGxiX2luZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKaW5kZXggMjE5Nzc2NC4uNTZiZmFlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCkBAIC00Miw3ICs0MiwxMiBAQAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTIDEzCiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MgMTQKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0RFQlVHIDE1Ci0jZGVmaW5lIEJPT0tFX01BWF9JTlRFUlJVUFQgMTUKKworLyogRTUwMCAqLworI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUwgMzIKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBIDMzCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQgMzQKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1BFUkZPUk1BTkNFX01PTklUT1IgMzUKIAogI2RlZmluZSBSRVNVTUVfRkxBR19OViAgICAgICAgICAoMTw8MCkgIC8qIFJlbG9hZCBndWVzdCBub252b2xhdGlsZSBzdGF0ZT8gKi8KICNkZWZpbmUgUkVTVU1FX0ZMQUdfSE9TVCAgICAgICAgKDE8PDEpICAvKiBSZXN1bWUgaG9zdD8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0OTdjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9LVk1fRTUwMF9IX18KKyNkZWZpbmUgX19BU01fS1ZNX0U1MDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TSVpFIDM2CisKKyNkZWZpbmUgRTUwMF9QSURfTlVNICAgMworI2RlZmluZSBFNTAwX1RMQl9OVU0gICAyCisKK3N0cnVjdCB0bGJleworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM3OworfTsKKworc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgeworCS8qIFVubW9kaWZpZWQgY29weSBvZiB0aGUgZ3Vlc3QncyBUTEIuICovCisJc3RydWN0IHRsYmUgKmd1ZXN0X3RsYltFNTAwX1RMQl9OVU1dOworCS8qIFRMQiB0aGF0J3MgYWN0dWFsbHkgdXNlZCB3aGVuIHRoZSBndWVzdCBpcyBydW5uaW5nLiAqLworCXN0cnVjdCB0bGJlICpzaGFkb3dfdGxiW0U1MDBfVExCX05VTV07CisJLyogUGFnZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgaW4gdGhlIHNoYWRvdyBUTEIuICovCisJc3RydWN0IHBhZ2UgKipzaGFkb3dfcGFnZXNbRTUwMF9UTEJfTlVNXTsKKworCXVuc2lnbmVkIGludCBndWVzdF90bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBzaGFkb3dfdGxiX3NpemVbRTUwMF9UTEJfTlVNXTsKKwl1bnNpZ25lZCBpbnQgZ3Vlc3RfdGxiX252W0U1MDBfVExCX05VTV07CisKKwl1MzIgaG9zdF9waWRbRTUwMF9QSURfTlVNXTsKKwl1MzIgcGlkW0U1MDBfUElEX05VTV07CisKKwl1MzIgbWFzMDsKKwl1MzIgbWFzMTsKKwl1MzIgbWFzMjsKKwl1MzIgbWFzMzsKKwl1MzIgbWFzNDsKKwl1MzIgbWFzNTsKKwl1MzIgbWFzNjsKKwl1MzIgbWFzNzsKKwl1MzIgbDFjc3IxOworCXUzMiBoaWQwOworCXUzMiBoaWQxOworCisJc3RydWN0IGt2bV92Y3B1IHZjcHU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp0b19lNTAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwLCB2Y3B1KTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0tWTV9FNTAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBjMWU0MzZmLi5kZmRmMTNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNjQsMTMgKzY0LDYgQEAKIAl1MzIgaGFsdF93YWtldXA7CiB9OwogCi1zdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKLQl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLwotCXUzMiB3b3JkMDsKLQl1MzIgd29yZDE7Ci0JdTMyIHdvcmQyOwotfTsKLQogZW51bSBrdm1fZXhpdF90eXBlcyB7CiAJTU1JT19FWElUUywKIAlEQ1JfRVhJVFMsCkBAIC0xMTgsMTEgKzExMSw2IEBACiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJdTMyIGhvc3Rfc3RhY2s7CiAJdTMyIGhvc3RfcGlkOwotCXUzMiBob3N0X2RiY3IwOwotCXUzMiBob3N0X2RiY3IxOwotCXUzMiBob3N0X2RiY3IyOwotCXUzMiBob3N0X2lhY1s0XTsKLQl1MzIgaG9zdF9tc3I7CiAKIAl1NjQgZnByWzMyXTsKIAl1bG9uZyBncHJbMzJdOwpAQCAtMTU3LDcgKzE0NSw3IEBACiAJdTMyIHRidTsKIAl1MzIgdGNyOwogCXUzMiB0c3I7Ci0JdTMyIGl2b3JbMTZdOworCXUzMiBpdm9yWzY0XTsKIAl1bG9uZyBpdnByOwogCXUzMiBwaXI7CiAKQEAgLTE3MCw2ICsxNTgsNyBAQAogCXUzMiBjY3IxOwogCXUzMiBkYmNyMDsKIAl1MzIgZGJjcjE7CisJdTMyIGRic3I7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HCiAJc3RydWN0IGt2bXBwY19leGl0X3RpbWluZyB0aW1pbmdfZXhpdDsKQEAgLTIwMCwxMCArMTg5LDQgQEAKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmdfZXhjZXB0aW9uczsKIH07CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgYnBbNF07Ci0JaW50IHNpbmdsZXN0ZXA7Ci19OwotCiAjZW5kaWYgLyogX19QT1dFUlBDX0tWTV9IT1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggMzZkMmE1MC4uMmM2ZWUzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtNTIsMTMgKzUyLDE5IEBACiBleHRlcm4gaW50IGt2bXBwY19lbXVsYXRlX21taW8oc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19lbXVsYXRlX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCisvKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCisKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGFzaWQsIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBndGxiX2lkeCk7CiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfc3dpdGNoX3BpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwaWQpOwotCi0vKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiBpbnQga3ZtcHBjX21tdV9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gZ3BhX3Qga3ZtcHBjX21tdV94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBndGxiX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfaXRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGV4dGVybiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCk7CkBAIC03MSw5ICs3Nyw2IEBACiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWV4dGVybiB2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gaW50IGt2bXBwY19jb3JlX3BlbmRpbmdfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAppbmRleCAzZjk0MWMwLi40Mjg1YjY0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCkBAIC03NSw2ICs3NSw4IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4OworCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50CWlkOwogCXVuc2lnbmVkIGludAlhY3RpdmU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCmluZGV4IDNmMTIxZmUuLmU3MjMzYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaWZuZGVmIF9BU01fUE9XRVJQQ19QUzNGQl9IXwogI2RlZmluZSBfQVNNX1BPV0VSUENfUFMzRkJfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KIAogLyogaW9jdGwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmNWE0ZTE2OC4uMWU1Y2ZhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjEsNCArNjEsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X2luZm8uaAppbmRleCAzNTQ1ZWZiLi4xMjg2YzgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X2luZm8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X2luZm8uaApAQCAtMjMsOSArMjMsMTAgQEAKICNpZm5kZWYgX1NQVV9JTkZPX0gKICNkZWZpbmUgX1NQVV9JTkZPX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjZWxzZQogc3RydWN0IG1mY19jcV9zciB7CiAJX191NjQgbWZjX2NxX2RhdGEwX1JXOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggZWY4MjRhZS4uYzU4MWUzZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC04LDcgKzgsNyBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjaWZkZWYgX19HTlVDX18KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCA3MjM1M2Y2Li5mZTE2NjQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC02NSw3ICs2NSw3IEBACiBTWVNYKHN5c19uaV9zeXNjYWxsLHN5c19vbGR1bmFtZSwgc3lzX29sZHVuYW1lKQogQ09NUEFUX1NZU19TUFUodW1hc2spCiBTWVNDQUxMX1NQVShjaHJvb3QpCi1TWVNDQUxMKHVzdGF0KQorQ09NUEFUX1NZUyh1c3RhdCkKIFNZU0NBTExfU1BVKGR1cDIpCiBTWVNDQUxMX1NQVShnZXRwcGlkKQogU1lTQ0FMTF9TUFUoZ2V0cGdycCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAxOWVlNDkxLi40MmZlNGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvYWxwYWNhLmg+CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfS1ZNCi0jaW5jbHVkZSA8YXNtL2t2bV80NHguaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQpAQCAtMzYxLDggKzM2MSw2IEBACiAJREVGSU5FKFBURV9TSVpFLCBzaXplb2YocHRlX3QpKTsKIAogI2lmZGVmIENPTkZJR19LVk0KLQlERUZJTkUoVExCRV9CWVRFUywgc2l6ZW9mKHN0cnVjdCBrdm1wcGNfNDR4X3RsYmUpKTsKLQogCURFRklORShWQ1BVX0hPU1RfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3N0YWNrKSk7CiAJREVGSU5FKFZDUFVfSE9TVF9QSUQsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3BpZCkpOwogCURFRklORShWQ1BVX0dQUlMsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ncHIpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggYTFjNGNmZC4uZDc5NGE2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTUxMSw4ICs1MTEsMTEgQEAKIAlhbmQJcjEscjEscjIJCS8qIHdyaXRhYmxlIGlmIF9SVyBhbmQgX0RJUlRZICovCiAJcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KIAlybHdpbWkJcjMscjMsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLwotCW9yaQlyMSxyMSwweGUxNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgYW5kIE0gKi8KKwlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCiAJYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCitCRUdJTl9GVFJfU0VDVElPTgorCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLworRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQogCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAl0bGJsaQlyMwpAQCAtNTg1LDggKzU4OCwxMSBAQAogCWFuZAlyMSxyMSxyMgkJLyogd3JpdGFibGUgaWYgX1JXIGFuZCBfRElSVFkgKi8KIAlybHdpbWkJcjMscjMsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwogCXJsd2ltaQlyMyxyMywzMi0xLDMxLDMxCS8qIF9QQUdFX1VTRVIgLT4gUFAgbHNiICovCi0Jb3JpCXIxLHIxLDB4ZTE0CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyBhbmQgTSAqLworCW9yaQlyMSxyMSwweGUwNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgKi8KIAlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KK0JFR0lOX0ZUUl9TRUNUSU9OCisJcmx3aW5tCXIxLHIxLDAsfl9QQUdFX0NPSEVSRU5UCS8qIGNsZWFyIE0gKGNvaGVyZW5jZSBub3QgcmVxdWlyZWQpICovCitFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQogCW10c3ByCVNQUk5fUlBBLHIxCiAJbWZzcHIJcjMsU1BSTl9ETUlTUwogCXRsYmxkCXIzCkBAIC02NTMsOCArNjU5LDExIEBACiAJc3R3CXIzLDAocjIpCQkvKiB1cGRhdGUgUFRFIChhY2Nlc3NlZC9kaXJ0eSBiaXRzKSAqLwogCS8qIENvbnZlcnQgbGludXgtc3R5bGUgUFRFIHRvIGxvdyB3b3JkIG9mIFBQQy1zdHlsZSBQVEUgKi8KIAlybHdpbWkJcjMscjMsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwotCWxpCXIxLDB4ZTE1CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyBhbmQgTSAqLworCWxpCXIxLDB4ZTA1CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyAmIFBQIGxzYiAqLwogCWFuZGMJcjEscjMscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLworQkVHSU5fRlRSX1NFQ1RJT04KKwlybHdpbm0JcjEscjEsMCx+X1BBR0VfQ09IRVJFTlQJLyogY2xlYXIgTSAoY29oZXJlbmNlIG5vdCByZXF1aXJlZCkgKi8KK0VORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05FRURfQ09IRVJFTlQpCiAJbXRzcHIJU1BSTl9SUEEscjEKIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJdGxibGQJcjMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IDIzYjhiNWUuLjFiNTVmZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2Vsc2UKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC0yMzEsNyArMjMxLDcgQEAKIAkJaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1BFUl9DUFUpCiAJCQljb250aW51ZTsKIAotCQljcHVzX2FuZChtYXNrLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBtYXApOworCQljcHVtYXNrX2FuZCgmbWFzaywgaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgJm1hcCk7CiAJCWlmIChhbnlfb25saW5lX2NwdShtYXNrKSA9PSBOUl9DUFVTKSB7CiAJCQlwcmludGsoIkJyZWFraW5nIGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CiAJCQltYXNrID0gbWFwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDE2MWI5YjkuLjY3ZjA3ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE4MSwxMyArMTgxLDcgQEAKIAkJX19pbml0cmFtZnNfZW5kID0gLjsKIAl9CiAjZW5kaWYKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wZXJjcHUgIDogQVQoQUREUiguZGF0YS5wZXJjcHUpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19wZXJfY3B1X3N0YXJ0ID0gLjsKLQkJKiguZGF0YS5wZXJjcHUpCi0JCSooLmRhdGEucGVyY3B1LnNoYXJlZF9hbGlnbmVkKQotCQlfX3Blcl9jcHVfZW5kID0gLjsKLQl9CisJUEVSQ1BVKFBBR0VfU0laRSkKIAogCS4gPSBBTElHTig4KTsKIAkubWFjaGluZS5kZXNjIDogQVQoQUREUigubWFjaGluZS5kZXNjKSAtIExPQURfT0ZGU0VUKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHguYwppbmRleCBhNjZiZWM1Li4wY2VmODA5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKQEAgLTI4LDcyICsyOCw2IEBACiAKICNpbmNsdWRlICI0NHhfdGxiLmgiCiAKLS8qIE5vdGU6IGNsZWFyaW5nIE1TUltERV0ganVzdCBtZWFucyB0aGF0IHRoZSBkZWJ1ZyBpbnRlcnJ1cHQgd2lsbCBub3QgYmUKLSAqIGRlbGl2ZXJlZCAqaW1tZWRpYXRlbHkqLiBJbnN0ZWFkLCBpdCBzaW1wbHkgc2V0cyB0aGUgYXBwcm9wcmlhdGUgREJTUiBiaXRzLgotICogSWYgdGhvc2UgREJTUiBiaXRzIGFyZSBzdGlsbCBzZXQgd2hlbiBNU1JbREVdIGlzIHJlLWVuYWJsZWQsIHRoZSBpbnRlcnJ1cHQKLSAqIHdpbGwgYmUgZGVsaXZlcmVkIGFzIGFuICJpbXByZWNpc2UgZGVidWcgZXZlbnQiICh3aGljaCBpcyBpbmRpY2F0ZWQgYnkKLSAqIERCU1JbSURFXS4KLSAqLwotc3RhdGljIHZvaWQga3ZtNDR4X2Rpc2FibGVfZGVidWdfaW50ZXJydXB0cyh2b2lkKQotewotCW10bXNyKG1mbXNyKCkgJiB+TVNSX0RFKTsKLX0KLQotdm9pZCBrdm1wcGNfY29yZV9sb2FkX2hvc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Ja3ZtNDR4X2Rpc2FibGVfZGVidWdfaW50ZXJydXB0cygpOwotCi0JbXRzcHIoU1BSTl9JQUMxLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzBdKTsKLQltdHNwcihTUFJOX0lBQzIsIHZjcHUtPmFyY2guaG9zdF9pYWNbMV0pOwotCW10c3ByKFNQUk5fSUFDMywgdmNwdS0+YXJjaC5ob3N0X2lhY1syXSk7Ci0JbXRzcHIoU1BSTl9JQUM0LCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzNdKTsKLQltdHNwcihTUFJOX0RCQ1IxLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjEpOwotCW10c3ByKFNQUk5fREJDUjIsIHZjcHUtPmFyY2guaG9zdF9kYmNyMik7Ci0JbXRzcHIoU1BSTl9EQkNSMCwgdmNwdS0+YXJjaC5ob3N0X2RiY3IwKTsKLQltdG1zcih2Y3B1LT5hcmNoLmhvc3RfbXNyKTsKLX0KLQotdm9pZCBrdm1wcGNfY29yZV9sb2FkX2d1ZXN0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyA9ICZ2Y3B1LT5ndWVzdF9kZWJ1ZzsKLQl1MzIgZGJjcjAgPSAwOwotCi0JdmNwdS0+YXJjaC5ob3N0X21zciA9IG1mbXNyKCk7Ci0Ja3ZtNDR4X2Rpc2FibGVfZGVidWdfaW50ZXJydXB0cygpOwotCi0JLyogU2F2ZSBob3N0IGRlYnVnIHJlZ2lzdGVyIHN0YXRlLiAqLwotCXZjcHUtPmFyY2guaG9zdF9pYWNbMF0gPSBtZnNwcihTUFJOX0lBQzEpOwotCXZjcHUtPmFyY2guaG9zdF9pYWNbMV0gPSBtZnNwcihTUFJOX0lBQzIpOwotCXZjcHUtPmFyY2guaG9zdF9pYWNbMl0gPSBtZnNwcihTUFJOX0lBQzMpOwotCXZjcHUtPmFyY2guaG9zdF9pYWNbM10gPSBtZnNwcihTUFJOX0lBQzQpOwotCXZjcHUtPmFyY2guaG9zdF9kYmNyMCA9IG1mc3ByKFNQUk5fREJDUjApOwotCXZjcHUtPmFyY2guaG9zdF9kYmNyMSA9IG1mc3ByKFNQUk5fREJDUjEpOwotCXZjcHUtPmFyY2guaG9zdF9kYmNyMiA9IG1mc3ByKFNQUk5fREJDUjIpOwotCi0JLyogc2V0IHJlZ2lzdGVycyB1cCBmb3IgZ3Vlc3QgKi8KLQotCWlmIChkYmctPmJwWzBdKSB7Ci0JCW10c3ByKFNQUk5fSUFDMSwgZGJnLT5icFswXSk7Ci0JCWRiY3IwIHw9IERCQ1IwX0lBQzEgfCBEQkNSMF9JRE07Ci0JfQotCWlmIChkYmctPmJwWzFdKSB7Ci0JCW10c3ByKFNQUk5fSUFDMiwgZGJnLT5icFsxXSk7Ci0JCWRiY3IwIHw9IERCQ1IwX0lBQzIgfCBEQkNSMF9JRE07Ci0JfQotCWlmIChkYmctPmJwWzJdKSB7Ci0JCW10c3ByKFNQUk5fSUFDMywgZGJnLT5icFsyXSk7Ci0JCWRiY3IwIHw9IERCQ1IwX0lBQzMgfCBEQkNSMF9JRE07Ci0JfQotCWlmIChkYmctPmJwWzNdKSB7Ci0JCW10c3ByKFNQUk5fSUFDNCwgZGJnLT5icFszXSk7Ci0JCWRiY3IwIHw9IERCQ1IwX0lBQzQgfCBEQkNSMF9JRE07Ci0JfQotCi0JbXRzcHIoU1BSTl9EQkNSMCwgZGJjcjApOwotCW10c3ByKFNQUk5fREJDUjEsIDApOwotCW10c3ByKFNQUk5fREJDUjIsIDApOwotfQotCiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CiAJa3ZtcHBjXzQ0eF90bGJfbG9hZCh2Y3B1KTsKQEAgLTE0OSw4ICs4Myw2IEBACiBpbnQga3ZtcHBjX2NvcmVfdmNwdV90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRyKQogewotCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOwotCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlOwogCWludCBpbmRleDsKIAlndmFfdCBlYWRkcjsKIAl1OCBwaWQ7CkBAIC0xNjYsOSArOTgsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2luZGV4XTsKLQotCXRyLT5waHlzaWNhbF9hZGRyZXNzID0gdGxiX3hsYXRlKGd0bGJlLCBlYWRkcik7CisJdHItPnBoeXNpY2FsX2FkZHJlc3MgPSBrdm1wcGNfbW11X3hsYXRlKHZjcHUsIGluZGV4LCBlYWRkcik7CiAJLyogWFhYIHdoYXQgZG9lcyAid3JpdGVhYmxlIiBhbmQgInVzZXJtb2RlIiBldmVuIG1lYW4/ICovCiAJdHItPnZhbGlkID0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCmluZGV4IDgyNDg5YTcuLjYxYWY1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKQEAgLTI3LDI1ICsyNywxMiBAQAogI2luY2x1ZGUgImJvb2tlLmgiCiAjaW5jbHVkZSAiNDR4X3RsYi5oIgogCi0jZGVmaW5lIE9QX1JGSSAgICAgIDE5Ci0KLSNkZWZpbmUgWE9QX1JGSSAgICAgNTAKLSNkZWZpbmUgWE9QX01GTVNSICAgODMKLSNkZWZpbmUgWE9QX1dSVEVFICAgMTMxCi0jZGVmaW5lIFhPUF9NVE1TUiAgIDE0NgotI2RlZmluZSBYT1BfV1JURUVJICAxNjMKICNkZWZpbmUgWE9QX01GRENSICAgMzIzCiAjZGVmaW5lIFhPUF9NVERDUiAgIDQ1MQogI2RlZmluZSBYT1BfVExCU1ggICA5MTQKICNkZWZpbmUgWE9QX0lDQ0NJICAgOTY2CiAjZGVmaW5lIFhPUF9UTEJXRSAgIDk3OAogCi1zdGF0aWMgdm9pZCBrdm1wcGNfZW11bF9yZmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXZjcHUtPmFyY2gucGMgPSB2Y3B1LT5hcmNoLnNycjA7Ci0Ja3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5zcnIxKTsKLX0KLQogaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKIHsKQEAgLTU5LDQ4ICs0Niw5IEBACiAJaW50IHdzOwogCiAJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKLQljYXNlIE9QX1JGSToKLQkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7Ci0JCWNhc2UgWE9QX1JGSToKLQkJCWt2bXBwY19lbXVsX3JmaSh2Y3B1KTsKLQkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1JGSV9FWElUUyk7Ci0JCQkqYWR2YW5jZSA9IDA7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQogCWNhc2UgMzE6CiAJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgewogCi0JCWNhc2UgWE9QX01GTVNSOgotCQkJcnQgPSBnZXRfcnQoaW5zdCk7Ci0JCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLm1zcjsKLQkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01GTVNSX0VYSVRTKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWE9QX01UTVNSOgotCQkJcnMgPSBnZXRfcnMoaW5zdCk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NVE1TUl9FWElUUyk7Ci0JCQlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBYT1BfV1JURUU6Ci0JCQlycyA9IGdldF9ycyhpbnN0KTsKLQkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKLQkJCQkJCQkgfCAodmNwdS0+YXJjaC5ncHJbcnNdICYgTVNSX0VFKTsKLQkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1dSVEVFX0VYSVRTKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWE9QX1dSVEVFSToKLQkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKLQkJCQkJCQkgfCAoaW5zdCAmIE1TUl9FRSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7Ci0JCQlicmVhazsKLQogCQljYXNlIFhPUF9NRkRDUjoKIAkJCWRjcm4gPSBnZXRfZGNybihpbnN0KTsKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwpAQCAtMTg2LDE4NiArMTM0LDUxIEBACiAJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOwogCX0KIAorCWlmIChlbXVsYXRlZCA9PSBFTVVMQVRFX0ZBSUwpCisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3AocnVuLCB2Y3B1LCBpbnN0LCBhZHZhbmNlKTsKKwogCXJldHVybiBlbXVsYXRlZDsKIH0KIAogaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKQogeworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKwogCXN3aXRjaCAoc3BybikgewotCWNhc2UgU1BSTl9NTVVDUjoKLQkJdmNwdS0+YXJjaC5tbXVjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX1BJRDoKIAkJa3ZtcHBjX3NldF9waWQodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsgYnJlYWs7CisJY2FzZSBTUFJOX01NVUNSOgorCQl2Y3B1LT5hcmNoLm1tdWNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAljYXNlIFNQUk5fQ0NSMDoKIAkJdmNwdS0+YXJjaC5jY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAljYXNlIFNQUk5fQ0NSMToKIAkJdmNwdS0+YXJjaC5jY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fREVBUjoKLQkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fRVNSOgotCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IwOgotCQl2Y3B1LT5hcmNoLmRiY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fREJDUjE6Ci0JCXZjcHUtPmFyY2guZGJjcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9UU1I6Ci0JCXZjcHUtPmFyY2gudHNyICY9IH52Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9UQ1I6Ci0JCXZjcHUtPmFyY2gudGNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlrdm1wcGNfZW11bGF0ZV9kZWModmNwdSk7Ci0JCWJyZWFrOwotCi0JLyogTm90ZTogU1BSRzQtNyBhcmUgdXNlci1yZWFkYWJsZS4gVGhlc2UgdmFsdWVzIGFyZQotCSAqIGxvYWRlZCBpbnRvIHRoZSByZWFsIFNQUkdzIHdoZW4gcmVzdW1pbmcgdGhlCi0JICogZ3Vlc3QuICovCi0JY2FzZSBTUFJOX1NQUkc0OgotCQl2Y3B1LT5hcmNoLnNwcmc0ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fU1BSRzU6Ci0JCXZjcHUtPmFyY2guc3ByZzUgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9TUFJHNjoKLQkJdmNwdS0+YXJjaC5zcHJnNiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1NQUkc3OgotCQl2Y3B1LT5hcmNoLnNwcmc3ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQotCWNhc2UgU1BSTl9JVlBSOgotCQl2Y3B1LT5hcmNoLml2cHIgPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjI6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMzoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I0OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I2OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I3OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I4OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I5OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjExOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEyOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTM6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTQ6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTU6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgotCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHZjcHUsIHNwcm4sIHJzKTsKIAl9CiAKIAlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NVFNQUl9FWElUUyk7Ci0JcmV0dXJuIEVNVUxBVEVfRE9ORTsKKwlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCkKIHsKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKIAlzd2l0Y2ggKHNwcm4pIHsKLQkvKiA0NDAgKi8KKwljYXNlIFNQUk5fUElEOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnBpZDsgYnJlYWs7CiAJY2FzZSBTUFJOX01NVUNSOgogCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLm1tdWNyOyBicmVhazsKIAljYXNlIFNQUk5fQ0NSMDoKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5jY3IwOyBicmVhazsKIAljYXNlIFNQUk5fQ0NSMToKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5jY3IxOyBicmVhazsKLQotCS8qIEJvb2sgRSAqLwotCWNhc2UgU1BSTl9QSUQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gucGlkOyBicmVhazsKLQljYXNlIFNQUk5fSVZQUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdnByOyBicmVhazsKLQljYXNlIFNQUk5fREVBUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kZWFyOyBicmVhazsKLQljYXNlIFNQUk5fRVNSOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmVzcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IwOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IwOyBicmVhazsKLQljYXNlIFNQUk5fREJDUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJjcjE7IGJyZWFrOwotCi0JY2FzZSBTUFJOX0lWT1IwOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IzOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I1OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjY6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjc6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjg6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjk6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEwOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxNDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxNToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddOwotCQlicmVhazsKLQogCWRlZmF1bHQ6Ci0JCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbWZzcHIodmNwdSwgc3BybiwgcnQpOwogCX0KIAogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01GU1BSX0VYSVRTKTsKLQlyZXR1cm4gRU1VTEFURV9ET05FOworCXJldHVybiBlbXVsYXRlZDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYwppbmRleCA5YTM0YjhlLi40YTE2ZjQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYwpAQCAtMjA4LDIwICsyMDgsMzggQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBrdm1wcGNfNDR4X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK2dwYV90IGt2bXBwY19tbXVfeGxhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZ3RsYl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWFkZHIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7CisJc3RydWN0IGt2bXBwY180NHhfdGxiZSAqZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltndGxiX2luZGV4XTsKKwl1bnNpZ25lZCBpbnQgcGdtYXNrID0gZ2V0X3RsYl9ieXRlcyhndGxiZSkgLSAxOworCisJcmV0dXJuIGdldF90bGJfcmFkZHIoZ3RsYmUpIHwgKGVhZGRyICYgcGdtYXNrKTsKK30KKworaW50IGt2bXBwY19tbXVfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKQogewogCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0lTKTsKIAogCXJldHVybiBrdm1wcGNfNDR4X3RsYl9pbmRleCh2Y3B1LCBlYWRkciwgdmNwdS0+YXJjaC5waWQsIGFzKTsKIH0KIAotaW50IGt2bXBwY180NHhfZHRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKQoraW50IGt2bXBwY19tbXVfZHRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKQogewogCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0RTKTsKIAogCXJldHVybiBrdm1wcGNfNDR4X3RsYl9pbmRleCh2Y3B1LCBlYWRkciwgdmNwdS0+YXJjaC5waWQsIGFzKTsKIH0KIAordm9pZCBrdm1wcGNfbW11X2l0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCiBzdGF0aWMgdm9pZCBrdm1wcGNfNDR4X3NoYWRvd19yZWxlYXNlKHN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RsYl9pbmRleCkKIHsKQEAgLTI0OCw3ICsyNjYsNyBAQAogCUtWTVRSQUNFXzFEKFNUTEJfSU5WQUwsICZ2Y3B1XzQ0eC0+dmNwdSwgc3RsYl9pbmRleCwgaGFuZGxlcik7CiB9CiAKLXZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQordm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOwogCWludCBpOwpAQCAtMjY5LDE1ICsyODcsMTkgQEAKICAqIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgZ3Vlc3QgVExCIGVudHJ5IGlzIHNhZmUgdG8gaW5zZXJ0IGludG8KICAqIHRoZSBzaGFkb3cgVExCLgogICovCi12b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLCB1NjQgYXNpZCwKLSAgICAgICAgICAgICAgICAgICAgdTMyIGZsYWdzLCB1MzIgbWF4X2J5dGVzLCB1bnNpZ25lZCBpbnQgZ3RsYl9pbmRleCkKK3ZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhZGRyLCBncGFfdCBncGFkZHIsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBndGxiX2luZGV4KQogewogCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgc3RsYmU7CiAJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7CisJc3RydWN0IGt2bXBwY180NHhfdGxiZSAqZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltndGxiX2luZGV4XTsKIAlzdHJ1Y3Qga3ZtcHBjXzQ0eF9zaGFkb3dfcmVmICpyZWY7CiAJc3RydWN0IHBhZ2UgKm5ld19wYWdlOwogCWhwYV90IGhwYWRkcjsKIAlnZm5fdCBnZm47CisJdTMyIGFzaWQgPSBndGxiZS0+dGlkOworCXUzMiBmbGFncyA9IGd0bGJlLT53b3JkMjsKKwl1MzIgbWF4X2J5dGVzID0gZ2V0X3RsYl9ieXRlcyhndGxiZSk7CiAJdW5zaWduZWQgaW50IHZpY3RpbTsKIAogCS8qIFNlbGVjdCBUTEIgZW50cnkgdG8gY2xvYmJlci4gSW5kaXJlY3RseSBndWFyZCBhZ2FpbnN0IHJhY2VzIHdpdGggdGhlIFRMQgpAQCAtNDQ4LDEwICs0NzAsOCBAQAogCX0KIAogCWlmICh0bGJlX2lzX2hvc3Rfc2FmZSh2Y3B1LCB0bGJlKSkgewotCQl1NjQgYXNpZDsKIAkJZ3ZhX3QgZWFkZHI7CiAJCWdwYV90IGdwYWRkcjsKLQkJdTMyIGZsYWdzOwogCQl1MzIgYnl0ZXM7CiAKIAkJZWFkZHIgPSBnZXRfdGxiX2VhZGRyKHRsYmUpOwpAQCAtNDYyLDEwICs0ODIsNyBAQAogCQllYWRkciAmPSB+KGJ5dGVzIC0gMSk7CiAJCWdwYWRkciAmPSB+KGJ5dGVzIC0gMSk7CiAKLQkJYXNpZCA9ICh0bGJlLT53b3JkMCAmIFBQQzQ0eF9UTEJfVFMpIHwgdGxiZS0+dGlkOwotCQlmbGFncyA9IHRsYmUtPndvcmQyICYgMHhmZmZmOwotCi0JCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGFzaWQsIGZsYWdzLCBieXRlcywgZ3RsYl9pbmRleCk7CisJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJfaW5kZXgpOwogCX0KIAogCUtWTVRSQUNFXzVEKEdUTEJfV1JJVEUsIHZjcHUsIGd0bGJfaW5kZXgsIHRsYmUtPnRpZCwgdGxiZS0+d29yZDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaCBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5oCmluZGV4IDc3MjE5MWYuLmE5ZmY4MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5oCkBAIC0yNSw4ICsyNSw2IEBACiAKIGV4dGVybiBpbnQga3ZtcHBjXzQ0eF90bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBpZCwgdW5zaWduZWQgaW50IGFzKTsKLWV4dGVybiBpbnQga3ZtcHBjXzQ0eF9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOwotZXh0ZXJuIGludCBrdm1wcGNfNDR4X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CiAKIGV4dGVybiBpbnQga3ZtcHBjXzQ0eF9lbXVsX3RsYnN4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggcnQsIHU4IHJhLCB1OCByYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHJjKTsKQEAgLTg1LDExICs4Myw0IEBACiAJcmV0dXJuICh2Y3B1LT5hcmNoLm1tdWNyID4+IDE2KSAmIDB4MTsKIH0KIAotc3RhdGljIGlubGluZSBncGFfdCB0bGJfeGxhdGUoc3RydWN0IGt2bXBwY180NHhfdGxiZSAqdGxiZSwgZ3ZhX3QgZWFkZHIpCi17Ci0JdW5zaWduZWQgaW50IHBnbWFzayA9IGdldF90bGJfYnl0ZXModGxiZSkgLSAxOwotCi0JcmV0dXJuIGdldF90bGJfcmFkZHIodGxiZSkgfCAoZWFkZHIgJiBwZ21hc2spOwotfQotCiAjZW5kaWYgLyogX19LVk1fUE9XRVJQQ19UTEJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKaW5kZXggNmRiZGM0OC4uNWExNTJhNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwpAQCAtMiw2ICsyLDkgQEAKICMgS1ZNIGNvbmZpZ3VyYXRpb24KICMKIAorY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKKyAgICAgICBib29sCisKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKIAktLS1oZWxwLS0tCkBAIC00Myw2ICs0NiwxOSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgS1ZNX0U1MDAKKwlib29sICJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwIHByb2Nlc3NvcnMiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgRTUwMAorCXNlbGVjdCBLVk0KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IHJ1bm5pbmcgdW5tb2RpZmllZCBFNTAwIGd1ZXN0IGtlcm5lbHMgaW4gdmlydHVhbCBtYWNoaW5lcyBvbgorCSAgRTUwMCBob3N0IHByb2Nlc3NvcnMuCisKKwkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2gKKwkgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgS1ZNX1RSQUNFCiAJYm9vbCAiS1ZNIHRyYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBLVk0gJiYgTUFSS0VSUyAmJiBTWVNGUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKaW5kZXggZGY3YmE1OS4uNGIyZGY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCkBAIC0xNiw4ICsxNiwxOCBAQAogCiBrdm0tNDQwLW9ianMgOj0gXAogCWJvb2tlLm8gXAorCWJvb2tlX2VtdWxhdGUubyBcCiAJYm9va2VfaW50ZXJydXB0cy5vIFwKIAk0NHgubyBcCiAJNDR4X3RsYi5vIFwKIAk0NHhfZW11bGF0ZS5vCiBvYmotJChDT05GSUdfS1ZNXzQ0MCkgKz0ga3ZtLTQ0MC5vCisKK2t2bS1lNTAwLW9ianMgOj0gXAorCWJvb2tlLm8gXAorCWJvb2tlX2VtdWxhdGUubyBcCisJYm9va2VfaW50ZXJydXB0cy5vIFwKKwllNTAwLm8gXAorCWU1MDBfdGxiLm8gXAorCWU1MDBfZW11bGF0ZS5vCitvYmotJChDT05GSUdfS1ZNX0U1MDApICs9IGt2bS1lNTAwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwppbmRleCAzNTQ4NWRkLi42NDJlNDIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCkBAIC0zMCwxMCArMzAsOCBAQAogI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CiAjaW5jbHVkZSAidGltaW5nLmgiCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20va3ZtXzQ0eC5oPgogCiAjaW5jbHVkZSAiYm9va2UuaCIKLSNpbmNsdWRlICI0NHhfdGxiLmgiCiAKIHVuc2lnbmVkIGxvbmcga3ZtcHBjX2Jvb2tlX2hhbmRsZXJzOwogCkBAIC0xMjAsNiArMTE4LDkgQEAKIAljYXNlIEJPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFOgogCWNhc2UgQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0U6CiAJY2FzZSBCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUw6CisJY2FzZSBCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMOgorCWNhc2UgQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQToKKwljYXNlIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EOgogCWNhc2UgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMOgogCWNhc2UgQk9PS0VfSVJRUFJJT19BTElHTk1FTlQ6CiAJCWFsbG93ZWQgPSAxOwpAQCAtMTY1LDcgKzE2Niw3IEBACiAJdW5zaWduZWQgaW50IHByaW9yaXR5OwogCiAJcHJpb3JpdHkgPSBfX2ZmcygqcGVuZGluZyk7Ci0Jd2hpbGUgKHByaW9yaXR5IDw9IEJPT0tFX01BWF9JTlRFUlJVUFQpIHsKKwl3aGlsZSAocHJpb3JpdHkgPD0gQk9PS0VfSVJRUFJJT19NQVgpIHsKIAkJaWYgKGt2bXBwY19ib29rZV9pcnFwcmlvX2RlbGl2ZXIodmNwdSwgcHJpb3JpdHkpKQogCQkJYnJlYWs7CiAKQEAgLTI2Myw2ICsyNjQsMjEgQEAKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAkJYnJlYWs7CiAKKwljYXNlIEJPT0tFX0lOVEVSUlVQVF9TUEVfVU5BVkFJTDoKKwkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTCk7CisJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCWJyZWFrOworCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX0RBVEE6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEEpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKworCWNhc2UgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9ST1VORDoKKwkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19TUEVfRlBfUk9VTkQpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKwogCWNhc2UgQk9PS0VfSU5URVJSVVBUX0RBVEFfU1RPUkFHRToKIAkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZmF1bHRfZXNyOwpAQCAtMjg0LDI5ICszMDAsMjcgQEAKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAkJYnJlYWs7CiAKLQkvKiBYWFggbW92ZSB0byBhIDQ0MC1zcGVjaWZpYyBmaWxlLiAqLwogCWNhc2UgQk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUzogewotCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKLQkJc3RydWN0IGt2bXBwY180NHhfdGxiZSAqZ3RsYmU7CiAJCXVuc2lnbmVkIGxvbmcgZWFkZHIgPSB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7CiAJCWludCBndGxiX2luZGV4OworCQlncGFfdCBncGFkZHI7CiAJCWdmbl90IGdmbjsKIAogCQkvKiBDaGVjayB0aGUgZ3Vlc3QgVExCLiAqLwotCQlndGxiX2luZGV4ID0ga3ZtcHBjXzQ0eF9kdGxiX2luZGV4KHZjcHUsIGVhZGRyKTsKKwkJZ3RsYl9pbmRleCA9IGt2bXBwY19tbXVfZHRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CiAJCWlmIChndGxiX2luZGV4IDwgMCkgewogCQkJLyogVGhlIGd1ZXN0IGRpZG4ndCBoYXZlIGEgbWFwcGluZyBmb3IgaXQuICovCiAJCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX0RUTEJfTUlTUyk7CiAJCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7CiAJCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZmF1bHRfZXNyOworCQkJa3ZtcHBjX21tdV9kdGxiX21pc3ModmNwdSk7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIERUTEJfUkVBTF9NSVNTX0VYSVRTKTsKIAkJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCQlicmVhazsKIAkJfQogCi0JCWd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07Ci0JCXZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQgPSB0bGJfeGxhdGUoZ3RsYmUsIGVhZGRyKTsKLQkJZ2ZuID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCA+PiBQQUdFX1NISUZUOworCQlncGFkZHIgPSBrdm1wcGNfbW11X3hsYXRlKHZjcHUsIGd0bGJfaW5kZXgsIGVhZGRyKTsKKwkJZ2ZuID0gZ3BhZGRyID4+IFBBR0VfU0hJRlQ7CiAKIAkJaWYgKGt2bV9pc192aXNpYmxlX2dmbih2Y3B1LT5rdm0sIGdmbikpIHsKIAkJCS8qIFRoZSBndWVzdCBUTEIgaGFkIGEgbWFwcGluZywgYnV0IHRoZSBzaGFkb3cgVExCCkBAIC0zMTUsMTMgKzMyOSwxMyBAQAogCQkJICogYikgdGhlIGd1ZXN0IHVzZWQgYSBsYXJnZSBtYXBwaW5nIHdoaWNoIHdlJ3JlIGZha2luZwogCQkJICogRWl0aGVyIHdheSwgd2UgbmVlZCB0byBzYXRpc2Z5IHRoZSBmYXVsdCB3aXRob3V0CiAJCQkgKiBpbnZva2luZyB0aGUgZ3Vlc3QuICovCi0JCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCwgZ3RsYmUtPnRpZCwKLQkJCSAgICAgICAgICAgICAgIGd0bGJlLT53b3JkMiwgZ2V0X3RsYl9ieXRlcyhndGxiZSksIGd0bGJfaW5kZXgpOworCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYl9pbmRleCk7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIERUTEJfVklSVF9NSVNTX0VYSVRTKTsKIAkJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCX0gZWxzZSB7CiAJCQkvKiBHdWVzdCBoYXMgbWFwcGVkIGFuZCBhY2Nlc3NlZCBhIHBhZ2Ugd2hpY2ggaXMgbm90CiAJCQkgKiBhY3R1YWxseSBSQU0uICovCisJCQl2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkID0gZ3BhZGRyOwogCQkJciA9IGt2bXBwY19lbXVsYXRlX21taW8ocnVuLCB2Y3B1KTsKIAkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgTU1JT19FWElUUyk7CiAJCX0KQEAgLTMyOSwxMCArMzQzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogWFhYIG1vdmUgdG8gYSA0NDAtc3BlY2lmaWMgZmlsZS4gKi8KIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1M6IHsKLQkJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7Ci0JCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlOwogCQl1bnNpZ25lZCBsb25nIGVhZGRyID0gdmNwdS0+YXJjaC5wYzsKIAkJZ3BhX3QgZ3BhZGRyOwogCQlnZm5fdCBnZm47CkBAIC0zNDEsMTggKzM1MiwxOCBAQAogCQlyID0gUkVTVU1FX0dVRVNUOwogCiAJCS8qIENoZWNrIHRoZSBndWVzdCBUTEIuICovCi0JCWd0bGJfaW5kZXggPSBrdm1wcGNfNDR4X2l0bGJfaW5kZXgodmNwdSwgZWFkZHIpOworCQlndGxiX2luZGV4ID0ga3ZtcHBjX21tdV9pdGxiX2luZGV4KHZjcHUsIGVhZGRyKTsKIAkJaWYgKGd0bGJfaW5kZXggPCAwKSB7CiAJCQkvKiBUaGUgZ3Vlc3QgZGlkbid0IGhhdmUgYSBtYXBwaW5nIGZvciBpdC4gKi8KIAkJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fSVRMQl9NSVNTKTsKKwkJCWt2bXBwY19tbXVfaXRsYl9taXNzKHZjcHUpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBJVExCX1JFQUxfTUlTU19FWElUUyk7CiAJCQlicmVhazsKIAkJfQogCiAJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgSVRMQl9WSVJUX01JU1NfRVhJVFMpOwogCi0JCWd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07Ci0JCWdwYWRkciA9IHRsYl94bGF0ZShndGxiZSwgZWFkZHIpOworCQlncGFkZHIgPSBrdm1wcGNfbW11X3hsYXRlKHZjcHUsIGd0bGJfaW5kZXgsIGVhZGRyKTsKIAkJZ2ZuID0gZ3BhZGRyID4+IFBBR0VfU0hJRlQ7CiAKIAkJaWYgKGt2bV9pc192aXNpYmxlX2dmbih2Y3B1LT5rdm0sIGdmbikpIHsKQEAgLTM2Miw4ICszNzMsNyBAQAogCQkJICogYikgdGhlIGd1ZXN0IHVzZWQgYSBsYXJnZSBtYXBwaW5nIHdoaWNoIHdlJ3JlIGZha2luZwogCQkJICogRWl0aGVyIHdheSwgd2UgbmVlZCB0byBzYXRpc2Z5IHRoZSBmYXVsdCB3aXRob3V0CiAJCQkgKiBpbnZva2luZyB0aGUgZ3Vlc3QuICovCi0JCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiZS0+dGlkLAotCQkJICAgICAgICAgICAgICAgZ3RsYmUtPndvcmQyLCBnZXRfdGxiX2J5dGVzKGd0bGJlKSwgZ3RsYl9pbmRleCk7CisJCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiX2luZGV4KTsKIAkJfSBlbHNlIHsKIAkJCS8qIEd1ZXN0IG1hcHBlZCBhbmQgbGVhcGVkIGF0IG5vbi1SQU0hICovCiAJCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5oCmluZGV4IGNmN2M5NGMuLmQ1OWJjY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogCiAvKiBpbnRlcnJ1cHQgcHJpb3J0aXR5IG9yZGVyaW5nICovCkBAIC0zMCwxNyArMzEsMjQgQEAKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19BTElHTk1FTlQgMgogI2RlZmluZSBCT09LRV9JUlFQUklPX1BST0dSQU0gMwogI2RlZmluZSBCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUwgNAotI2RlZmluZSBCT09LRV9JUlFQUklPX1NZU0NBTEwgNQotI2RlZmluZSBCT09LRV9JUlFQUklPX0FQX1VOQVZBSUwgNgotI2RlZmluZSBCT09LRV9JUlFQUklPX0RUTEJfTUlTUyA3Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fSVRMQl9NSVNTIDgKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLIDkKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUJVRyAxMAotI2RlZmluZSBCT09LRV9JUlFQUklPX0NSSVRJQ0FMIDExCi0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fV0FUQ0hET0cgMTIKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19FWFRFUk5BTCAxMwotI2RlZmluZSBCT09LRV9JUlFQUklPX0ZJVCAxNAotI2RlZmluZSBCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSIDE1CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUwgNQorI2RlZmluZSBCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBIDYKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TUEVfRlBfUk9VTkQgNworI2RlZmluZSBCT09LRV9JUlFQUklPX1NZU0NBTEwgOAorI2RlZmluZSBCT09LRV9JUlFQUklPX0FQX1VOQVZBSUwgOQorI2RlZmluZSBCT09LRV9JUlFQUklPX0RUTEJfTUlTUyAxMAorI2RlZmluZSBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyAxMQorI2RlZmluZSBCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0sgMTIKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUJVRyAxMworI2RlZmluZSBCT09LRV9JUlFQUklPX0NSSVRJQ0FMIDE0CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fV0FUQ0hET0cgMTUKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19FWFRFUk5BTCAxNgorI2RlZmluZSBCT09LRV9JUlFQUklPX0ZJVCAxNworI2RlZmluZSBCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSIDE4CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUiAxOQorI2RlZmluZSBCT09LRV9JUlFQUklPX01BWCAxOQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBrdm1wcGNfYm9va2VfaGFuZGxlcnM7CiAKIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgImZ1bGwiIE1TUiB3cml0ZXMuIE5vIG5lZWQgdG8gY2FsbCB0aGlzIGlmIG9ubHkgRUUgaXMKICAqIGNoYW5naW5nLiAqLwpAQCAtNTcsNCArNjUsOSBAQAogCX07CiB9CiAKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9vcChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSk7CitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbWZzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJ0KTsKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnMpOworCiAjZW5kaWYgLyogX19LVk1fQk9PS0VfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZW11bGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYmM2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2VtdWxhdGUuYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICoKKyAqIEF1dGhvcnM6IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KKworI2luY2x1ZGUgImJvb2tlLmgiCisKKyNkZWZpbmUgT1BfMTlfWE9QX1JGSSAgICAgNTAKKworI2RlZmluZSBPUF8zMV9YT1BfTUZNU1IgICA4MworI2RlZmluZSBPUF8zMV9YT1BfV1JURUUgICAxMzEKKyNkZWZpbmUgT1BfMzFfWE9QX01UTVNSICAgMTQ2CisjZGVmaW5lIE9QXzMxX1hPUF9XUlRFRUkgIDE2MworCitzdGF0aWMgdm9pZCBrdm1wcGNfZW11bF9yZmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2gucGMgPSB2Y3B1LT5hcmNoLnNycjA7CisJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5zcnIxKTsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5zdCwgaW50ICphZHZhbmNlKQoreworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKwlpbnQgcnM7CisJaW50IHJ0OworCisJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKKwljYXNlIDE5OgorCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKKwkJY2FzZSBPUF8xOV9YT1BfUkZJOgorCQkJa3ZtcHBjX2VtdWxfcmZpKHZjcHUpOworCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfUkZJX0VYSVRTKTsKKwkJCSphZHZhbmNlID0gMDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSAzMToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisKKwkJY2FzZSBPUF8zMV9YT1BfTUZNU1I6CisJCQlydCA9IGdldF9ydChpbnN0KTsKKwkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gubXNyOworCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTUZNU1JfRVhJVFMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF8zMV9YT1BfTVRNU1I6CisJCQlycyA9IGdldF9ycyhpbnN0KTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01UTVNSX0VYSVRTKTsKKwkJCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7CisJCQlicmVhazsKKworCQljYXNlIE9QXzMxX1hPUF9XUlRFRToKKwkJCXJzID0gZ2V0X3JzKGluc3QpOworCQkJdmNwdS0+YXJjaC5tc3IgPSAodmNwdS0+YXJjaC5tc3IgJiB+TVNSX0VFKQorCQkJCQkJCSB8ICh2Y3B1LT5hcmNoLmdwcltyc10gJiBNU1JfRUUpOworCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF8zMV9YT1BfV1JURUVJOgorCQkJdmNwdS0+YXJjaC5tc3IgPSAodmNwdS0+YXJjaC5tc3IgJiB+TVNSX0VFKQorCQkJCQkJCSB8IChpbnN0ICYgTVNSX0VFKTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1dSVEVFX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKQoreworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKworCXN3aXRjaCAoc3BybikgeworCWNhc2UgU1BSTl9ERUFSOgorCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9FU1I6CisJCXZjcHUtPmFyY2guZXNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjA6CisJCXZjcHUtPmFyY2guZGJjcjAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9EQkNSMToKKwkJdmNwdS0+YXJjaC5kYmNyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0RCU1I6CisJCXZjcHUtPmFyY2guZGJzciAmPSB+dmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fVFNSOgorCQl2Y3B1LT5hcmNoLnRzciAmPSB+dmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fVENSOgorCQl2Y3B1LT5hcmNoLnRjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJa3ZtcHBjX2VtdWxhdGVfZGVjKHZjcHUpOworCQlicmVhazsKKworCS8qIE5vdGU6IFNQUkc0LTcgYXJlIHVzZXItcmVhZGFibGUuIFRoZXNlIHZhbHVlcyBhcmUKKwkgKiBsb2FkZWQgaW50byB0aGUgcmVhbCBTUFJHcyB3aGVuIHJlc3VtaW5nIHRoZQorCSAqIGd1ZXN0LiAqLworCWNhc2UgU1BSTl9TUFJHNDoKKwkJdmNwdS0+YXJjaC5zcHJnNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1NQUkc1OgorCQl2Y3B1LT5hcmNoLnNwcmc1ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fU1BSRzY6CisJCXZjcHUtPmFyY2guc3ByZzYgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9TUFJHNzoKKwkJdmNwdS0+YXJjaC5zcHJnNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisKKwljYXNlIFNQUk5fSVZQUjoKKwkJdmNwdS0+YXJjaC5pdnByID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjA6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IyOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjM6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRV0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjU6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNjoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNzoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SODoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SOToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTA6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRklUXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMjoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEzOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjE0OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjE1OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbWZzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJ0KQoreworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKworCXN3aXRjaCAoc3BybikgeworCWNhc2UgU1BSTl9JVlBSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2cHI7IGJyZWFrOworCWNhc2UgU1BSTl9ERUFSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRlYXI7IGJyZWFrOworCWNhc2UgU1BSTl9FU1I6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZXNyOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJjcjA7IGJyZWFrOworCWNhc2UgU1BSTl9EQkNSMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMTsgYnJlYWs7CisJY2FzZSBTUFJOX0RCU1I6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJzcjsgYnJlYWs7CisKKwljYXNlIFNQUk5fSVZPUjA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjM6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRV07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjU6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SNzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SODoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SOToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRklUXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEzOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjE0OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjE1OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR107CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUwppbmRleCAwODRlYmNkLi5kMGM2Zjg0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUwpAQCAtODYsNiArODYsOSBAQAogS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUwogS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX0lUTEJfTUlTUwogS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX0RFQlVHCitLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUwKK0tWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfREFUQQorS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9ST1VORAogCiBfR0xPQkFMKGt2bXBwY19oYW5kbGVyX2xlbikKIAkubG9uZyBrdm1wcGNfaGFuZGxlcl8xIC0ga3ZtcHBjX2hhbmRsZXJfMApAQCAtMzQ3LDcgKzM1MCw5IEBACiAJbHd6CXIzLCBWQ1BVX1NIQURPV19QSUQocjQpCiAJbXRzcHIJU1BSTl9QSUQsIHIzCiAKKyNpZmRlZiBDT05GSUdfNDR4CiAJaWNjY2kJMCwgMCAvKiBYWFggaGFjayAqLworI2VuZGlmCiAKIAkvKiBMb2FkIHNvbWUgZ3Vlc3Qgdm9sYXRpbGVzLiAqLwogCWx3eglyMCwgVkNQVV9HUFIocjApKHI0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA2N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMva3ZtLzQ0eC5jLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lNTAwLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKworI2luY2x1ZGUgImJvb2tlLmgiCisjaW5jbHVkZSAiZTUwMF90bGIuaCIKKwordm9pZCBrdm1wcGNfY29yZV9sb2FkX2hvc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQoreworCWt2bXBwY19lNTAwX3RsYl9sb2FkKHZjcHUsIGNwdSk7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bXBwY19lNTAwX3RsYl9wdXQodmNwdSk7Cit9CisKK2ludCBrdm1wcGNfY29yZV9jaGVja19wcm9jZXNzb3JfY29tcGF0KHZvaWQpCit7CisJaW50IHI7CisKKwlpZiAoc3RyY21wKGN1cl9jcHVfc3BlYy0+Y3B1X25hbWUsICJlNTAwdjIiKSA9PSAwKQorCQlyID0gMDsKKwllbHNlCisJCXIgPSAtRU5PVFNVUFA7CisKKwlyZXR1cm4gcjsKK30KKworaW50IGt2bXBwY19jb3JlX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCisJa3ZtcHBjX2U1MDBfdGxiX3NldHVwKHZjcHVfZTUwMCk7CisKKwkvKiBVc2UgdGhlIHNhbWUgY29yZSB2ZXJ0aW9uIGFzIGhvc3QncyAqLworCXZjcHUtPmFyY2gucHZyID0gbWZzcHIoU1BSTl9QVlIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qICdsaW5lYXJfYWRkcmVzcycgaXMgYWN0dWFsbHkgYW4gZW5jb2Rpbmcgb2YgQVN8UElEfEVBRERSIC4gKi8KK2ludCBrdm1wcGNfY29yZV92Y3B1X3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpCit7CisJaW50IGluZGV4OworCWd2YV90IGVhZGRyOworCXU4IHBpZDsKKwl1OCBhczsKKworCWVhZGRyID0gdHItPmxpbmVhcl9hZGRyZXNzOworCXBpZCA9ICh0ci0+bGluZWFyX2FkZHJlc3MgPj4gMzIpICYgMHhmZjsKKwlhcyA9ICh0ci0+bGluZWFyX2FkZHJlc3MgPj4gNDApICYgMHgxOworCisJaW5kZXggPSBrdm1wcGNfZTUwMF90bGJfc2VhcmNoKHZjcHUsIGVhZGRyLCBwaWQsIGFzKTsKKwlpZiAoaW5kZXggPCAwKSB7CisJCXRyLT52YWxpZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCXRyLT5waHlzaWNhbF9hZGRyZXNzID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBpbmRleCwgZWFkZHIpOworCS8qIFhYWCB3aGF0IGRvZXMgIndyaXRlYWJsZSIgYW5kICJ1c2VybW9kZSIgZXZlbiBtZWFuPyAqLworCXRyLT52YWxpZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGt2bV92Y3B1ICprdm1wcGNfY29yZV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgZXJyOworCisJdmNwdV9lNTAwID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghdmNwdV9lNTAwKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXZjcHUgPSAmdmNwdV9lNTAwLT52Y3B1OworCWVyciA9IGt2bV92Y3B1X2luaXQodmNwdSwga3ZtLCBpZCk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3ZjcHU7CisKKwllcnIgPSBrdm1wcGNfZTUwMF90bGJfaW5pdCh2Y3B1X2U1MDApOworCWlmIChlcnIpCisJCWdvdG8gdW5pbml0X3ZjcHU7CisKKwlyZXR1cm4gdmNwdTsKKwordW5pbml0X3ZjcHU6CisJa3ZtX3ZjcHVfdW5pbml0KHZjcHUpOworZnJlZV92Y3B1OgorCWttZW1fY2FjaGVfZnJlZShrdm1fdmNwdV9jYWNoZSwgdmNwdV9lNTAwKTsKK291dDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCit2b2lkIGt2bXBwY19jb3JlX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisKKwlrdm1wcGNfZTUwMF90bGJfdW5pbml0KHZjcHVfZTUwMCk7CisJa3ZtX3ZjcHVfdW5pbml0KHZjcHUpOworCWttZW1fY2FjaGVfZnJlZShrdm1fdmNwdV9jYWNoZSwgdmNwdV9lNTAwKTsKK30KKworc3RhdGljIGludCBrdm1wcGNfZTUwMF9pbml0KHZvaWQpCit7CisJaW50IHIsIGk7CisJdW5zaWduZWQgbG9uZyBpdm9yWzNdOworCXVuc2lnbmVkIGxvbmcgbWF4X2l2b3IgPSAwOworCisJciA9IGt2bXBwY19ib29rZV9pbml0KCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogY29weSBleHRyYSBFNTAwIGV4Y2VwdGlvbiBoYW5kbGVycyAqLworCWl2b3JbMF0gPSBtZnNwcihTUFJOX0lWT1IzMik7CisJaXZvclsxXSA9IG1mc3ByKFNQUk5fSVZPUjMzKTsKKwlpdm9yWzJdID0gbWZzcHIoU1BSTl9JVk9SMzQpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKGl2b3JbaV0gPiBtYXhfaXZvcikKKwkJCW1heF9pdm9yID0gaXZvcltpXTsKKworCQltZW1jcHkoKHZvaWQgKilrdm1wcGNfYm9va2VfaGFuZGxlcnMgKyBpdm9yW2ldLAorCQkgICAgICAga3ZtcHBjX2hhbmRsZXJzX3N0YXJ0ICsgKGkgKyAxNikgKiBrdm1wcGNfaGFuZGxlcl9sZW4sCisJCSAgICAgICBrdm1wcGNfaGFuZGxlcl9sZW4pOworCX0KKwlmbHVzaF9pY2FjaGVfcmFuZ2Uoa3ZtcHBjX2Jvb2tlX2hhbmRsZXJzLAorCQkJa3ZtcHBjX2Jvb2tlX2hhbmRsZXJzICsgbWF4X2l2b3IgKyBrdm1wcGNfaGFuZGxlcl9sZW4pOworCisJcmV0dXJuIGt2bV9pbml0KE5VTEwsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCksIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfZXhpdCh2b2lkKQoreworCWt2bXBwY19ib29rZV9leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KGt2bXBwY19lNTAwX2luaXQpOworbW9kdWxlX2V4aXQoa3ZtcHBjX2U1MDBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjc2MDQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogWXUgTGl1LCA8eXUubGl1QGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIGFyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgorI2luY2x1ZGUgPGFzbS9kaXNhc3NlbWJsZS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgorCisjaW5jbHVkZSAiYm9va2UuaCIKKyNpbmNsdWRlICJlNTAwX3RsYi5oIgorCisjZGVmaW5lIFhPUF9UTEJJVkFYIDc4NgorI2RlZmluZSBYT1BfVExCU1ggICA5MTQKKyNkZWZpbmUgWE9QX1RMQlJFICAgOTQ2CisjZGVmaW5lIFhPUF9UTEJXRSAgIDk3OAorCitpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9vcChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5zdCwgaW50ICphZHZhbmNlKQoreworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKwlpbnQgcmE7CisJaW50IHJiOworCisJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKKwljYXNlIDMxOgorCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKKworCQljYXNlIFhPUF9UTEJSRToKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJyZSh2Y3B1KTsKKwkJCWJyZWFrOworCisJCWNhc2UgWE9QX1RMQldFOgorCQkJZW11bGF0ZWQgPSBrdm1wcGNfZTUwMF9lbXVsX3RsYndlKHZjcHUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBYT1BfVExCU1g6CisJCQlyYiA9IGdldF9yYihpbnN0KTsKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJzeCh2Y3B1LHJiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgWE9QX1RMQklWQVg6CisJCQlyYSA9IGdldF9yYShpbnN0KTsKKwkJCXJiID0gZ2V0X3JiKGluc3QpOworCQkJZW11bGF0ZWQgPSBrdm1wcGNfZTUwMF9lbXVsX3RsYml2YXgodmNwdSwgcmEsIHJiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJfQorCisJaWYgKGVtdWxhdGVkID09IEVNVUxBVEVfRkFJTCkKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9vcChydW4sIHZjcHUsIGluc3QsIGFkdmFuY2UpOworCisJcmV0dXJuIGVtdWxhdGVkOworfQorCitpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tdHNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChzcHJuKSB7CisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdV9lNTAwLT5waWRbMF0gPSB2Y3B1LT5hcmNoLnNoYWRvd19waWQgPQorCQkJdmNwdS0+YXJjaC5waWQgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9QSUQxOgorCQl2Y3B1X2U1MDAtPnBpZFsxXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1BJRDI6CisJCXZjcHVfZTUwMC0+cGlkWzJdID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMDoKKwkJdmNwdV9lNTAwLT5tYXMwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMToKKwkJdmNwdV9lNTAwLT5tYXMxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMjoKKwkJdmNwdV9lNTAwLT5tYXMyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMzoKKwkJdmNwdV9lNTAwLT5tYXMzID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTNDoKKwkJdmNwdV9lNTAwLT5tYXM0ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTNjoKKwkJdmNwdV9lNTAwLT5tYXM2ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTNzoKKwkJdmNwdV9lNTAwLT5tYXM3ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fTDFDU1IxOgorCQl2Y3B1X2U1MDAtPmwxY3NyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0hJRDA6CisJCXZjcHVfZTUwMC0+aGlkMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0hJRDE6CisJCXZjcHVfZTUwMC0+aGlkMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisKKwljYXNlIFNQUk5fTU1VQ1NSMDoKKwkJZW11bGF0ZWQgPSBrdm1wcGNfZTUwMF9lbXVsX210X21tdWNzcjAodmNwdV9lNTAwLAorCQkJCXZjcHUtPmFyY2guZ3ByW3JzXSk7CisJCWJyZWFrOworCisJLyogZXh0cmEgZXhjZXB0aW9ucyAqLworCWNhc2UgU1BSTl9JVk9SMzI6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzMzoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEFdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjM0OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfRlBfUk9VTkRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjM1OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHZjcHUsIHNwcm4sIHJzKTsKKwl9CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CisKK2ludCBrdm1wcGNfY29yZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fUElEOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFswXTsgYnJlYWs7CisJY2FzZSBTUFJOX1BJRDE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+cGlkWzFdOyBicmVhazsKKwljYXNlIFNQUk5fUElEMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5waWRbMl07IGJyZWFrOworCWNhc2UgU1BSTl9NQVMwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczA7IGJyZWFrOworCWNhc2UgU1BSTl9NQVMxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczE7IGJyZWFrOworCWNhc2UgU1BSTl9NQVMyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczI7IGJyZWFrOworCWNhc2UgU1BSTl9NQVMzOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczM7IGJyZWFrOworCWNhc2UgU1BSTl9NQVM0OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczQ7IGJyZWFrOworCWNhc2UgU1BSTl9NQVM2OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczY7IGJyZWFrOworCWNhc2UgU1BSTl9NQVM3OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczc7IGJyZWFrOworCisJY2FzZSBTUFJOX1RMQjBDRkc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IG1mc3ByKFNQUk5fVExCMENGRyk7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSAmPSB+MHhmZmZVTDsKKwkJdmNwdS0+YXJjaC5ncHJbcnRdIHw9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMF07CisJCWJyZWFrOworCisJY2FzZSBTUFJOX1RMQjFDRkc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IG1mc3ByKFNQUk5fVExCMUNGRyk7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSAmPSB+MHhmZmZVTDsKKwkJdmNwdS0+YXJjaC5ncHJbcnRdIHw9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07CisJCWJyZWFrOworCisJY2FzZSBTUFJOX0wxQ1NSMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5sMWNzcjE7IGJyZWFrOworCWNhc2UgU1BSTl9ISUQwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPmhpZDA7IGJyZWFrOworCWNhc2UgU1BSTl9ISUQxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPmhpZDE7IGJyZWFrOworCisJY2FzZSBTUFJOX01NVUNTUjA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IDA7IGJyZWFrOworCisJLyogZXh0cmEgZXhjZXB0aW9ucyAqLworCWNhc2UgU1BSTl9JVk9SMzI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEFdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjM0OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfRlBfUk9VTkRdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjM1OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tZnNwcih2Y3B1LCBzcHJuLCBydCk7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3NzNmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogWXUgTGl1LCB5dS5saXVAZnJlZXNjYWxlLmNvbQorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGFyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva3ZtLmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2luY2x1ZGUgIi4uL21tL21tdV9kZWNsLmgiCisjaW5jbHVkZSAiZTUwMF90bGIuaCIKKworI2RlZmluZSB0b19odGxiMV9lc2VsKGVzZWwpICh0bGIxX2VudHJ5X251bSAtIChlc2VsKSAtIDEpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGxiMV9lbnRyeV9udW07CisKK3ZvaWQga3ZtcHBjX2R1bXBfdGxicyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJc3RydWN0IHRsYmUgKnRsYmU7CisJaW50IGksIHRsYnNlbDsKKworCXByaW50aygifCAlOHMgfCAlOHMgfCAlOHMgfCAlOHMgfCAlOHMgfFxuIiwKKwkJCSJuciIsICJtYXMxIiwgIm1hczIiLCAibWFzMyIsICJtYXM3Iik7CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKSB7CisJCXByaW50aygiR3Vlc3QgVExCJWQ6XG4iLCB0bGJzZWwpOworCQlmb3IgKGkgPSAwOyBpIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVt0bGJzZWxdOyBpKyspIHsKKwkJCXRsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtpXTsKKwkJCWlmICh0bGJlLT5tYXMxICYgTUFTMV9WQUxJRCkKKwkJCQlwcmludGsoIiBHWyVkXVslM2RdIHwgICUwOFggfCAlMDhYIHwgJTA4WCB8ICUwOFggfFxuIiwKKwkJCQkJdGxic2VsLCBpLCB0bGJlLT5tYXMxLCB0bGJlLT5tYXMyLAorCQkJCQl0bGJlLT5tYXMzLCB0bGJlLT5tYXM3KTsKKwkJfQorCX0KKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJcHJpbnRrKCJTaGFkb3cgVExCJWQ6XG4iLCB0bGJzZWwpOworCQlmb3IgKGkgPSAwOyBpIDwgdmNwdV9lNTAwLT5zaGFkb3dfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCQl0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2ldOworCQkJaWYgKHRsYmUtPm1hczEgJiBNQVMxX1ZBTElEKQorCQkJCXByaW50aygiIFNbJWRdWyUzZF0gfCAgJTA4WCB8ICUwOFggfCAlMDhYIHwgJTA4WCB8XG4iLAorCQkJCQl0bGJzZWwsIGksIHRsYmUtPm1hczEsIHRsYmUtPm1hczIsCisJCQkJCXRsYmUtPm1hczMsIHRsYmUtPm1hczcpOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0bGIwX2dldF9uZXh0X3ZpY3RpbSgKKwkJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwl1bnNpZ25lZCBpbnQgdmljdGltOworCisJdmljdGltID0gdmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbMF0rKzsKKwlpZiAodW5saWtlbHkodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbMF0gPj0gS1ZNX0U1MDBfVExCMF9XQVlfTlVNKSkKKwkJdmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbMF0gPSAwOworCisJcmV0dXJuIHZpY3RpbTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGxiMV9tYXhfc2hhZG93X3NpemUodm9pZCkKK3sKKwlyZXR1cm4gdGxiMV9lbnRyeV9udW0gLSB0bGJjYW1faW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRsYmVfaXNfd3JpdGFibGUoc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuIHRsYmUtPm1hczMgJiAoTUFTM19TV3xNQVMzX1VXKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZTUwMF9zaGFkb3dfbWFzM19hdHRyaWIodTMyIG1hczMsIGludCB1c2VybW9kZSkKK3sKKwkvKiBNYXNrIG9mZiByZXNlcnZlZCBiaXRzLiAqLworCW1hczMgJj0gTUFTM19BVFRSSUJfTUFTSzsKKworCWlmICghdXNlcm1vZGUpIHsKKwkJLyogR3Vlc3QgaXMgaW4gc3VwZXJ2aXNvciBtb2RlLAorCQkgKiBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSBndWVzdAorCQkgKiBzdXBlcnZpc29yIHBlcm1pc3Npb25zIGludG8gdXNlciBwZXJtaXNzaW9ucy4gKi8KKwkJbWFzMyAmPSB+RTUwMF9UTEJfVVNFUl9QRVJNX01BU0s7CisJCW1hczMgfD0gKG1hczMgJiBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0spIDw8IDE7CisJfQorCisJcmV0dXJuIG1hczMgfCBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGU1MDBfc2hhZG93X21hczJfYXR0cmliKHUzMiBtYXMyLCBpbnQgdXNlcm1vZGUpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiAobWFzMiAmIE1BUzJfQVRUUklCX01BU0spIHwgTUFTMl9NOworI2Vsc2UKKwlyZXR1cm4gbWFzMiAmIE1BUzJfQVRUUklCX01BU0s7CisjZW5kaWYKK30KKworLyoKKyAqIHdyaXRpbmcgc2hhZG93IHRsYiBlbnRyeSB0byBob3N0IFRMQgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV9ob3N0X3RsYmUoc3RydWN0IHRsYmUgKnN0bGJlKQoreworCW10c3ByKFNQUk5fTUFTMSwgc3RsYmUtPm1hczEpOworCW10c3ByKFNQUk5fTUFTMiwgc3RsYmUtPm1hczIpOworCW10c3ByKFNQUk5fTUFTMywgc3RsYmUtPm1hczMpOworCW10c3ByKFNQUk5fTUFTNywgc3RsYmUtPm1hczcpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgidGxid2VcbiIgOiA6ICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9ob3N0X3RsYmUoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlpZiAodGxic2VsID09IDApIHsKKwkJX193cml0ZV9ob3N0X3RsYmUoc3RsYmUpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIHJlZ2lzdGVyIG1hczA7CisKKwkJbWFzMCA9IG1mc3ByKFNQUk5fTUFTMCk7CisKKwkJbXRzcHIoU1BSTl9NQVMwLCBNQVMwX1RMQlNFTCgxKSB8IE1BUzBfRVNFTCh0b19odGxiMV9lc2VsKGVzZWwpKSk7CisJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKworCQltdHNwcihTUFJOX01BUzAsIG1hczApOworCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3ZvaWQga3ZtcHBjX2U1MDBfdGxiX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBpOworCXVuc2lnbmVkIHJlZ2lzdGVyIG1hczA7CisKKwkvKiBMb2FkIGFsbCB2YWxpZCBUTEIxIGVudHJpZXMgdG8gcmVkdWNlIGd1ZXN0IHRsYiBtaXNzIGZhdWx0ICovCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwltYXMwID0gbWZzcHIoU1BSTl9NQVMwKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGxiMV9tYXhfc2hhZG93X3NpemUoKTsgaSsrKSB7CisJCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbMV1baV07CisKKwkJaWYgKGdldF90bGJfdihzdGxiZSkpIHsKKwkJCW10c3ByKFNQUk5fTUFTMCwgTUFTMF9UTEJTRUwoMSkKKwkJCQkJfCBNQVMwX0VTRUwodG9faHRsYjFfZXNlbChpKSkpOworCQkJX193cml0ZV9ob3N0X3RsYmUoc3RsYmUpOworCQl9CisJfQorCW10c3ByKFNQUk5fTUFTMCwgbWFzMCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCV90bGJpbF9hbGwoKTsKK30KKworLyogU2VhcmNoIHRoZSBndWVzdCBUTEIgZm9yIGEgbWF0Y2hpbmcgZW50cnkuICovCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX3RsYl9pbmRleChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlndmFfdCBlYWRkciwgaW50IHRsYnNlbCwgdW5zaWduZWQgaW50IHBpZCwgaW50IGFzKQoreworCWludCBpOworCisJLyogWFhYIFJlcGxhY2UgbG9vcCB3aXRoIGZhbmN5IGRhdGEgc3RydWN0dXJlcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVt0bGJzZWxdOyBpKyspIHsKKwkJc3RydWN0IHRsYmUgKnRsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtpXTsKKwkJdW5zaWduZWQgaW50IHRpZDsKKworCQlpZiAoZWFkZHIgPCBnZXRfdGxiX2VhZGRyKHRsYmUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGVhZGRyID4gZ2V0X3RsYl9lbmQodGxiZSkpCisJCQljb250aW51ZTsKKworCQl0aWQgPSBnZXRfdGxiX3RpZCh0bGJlKTsKKwkJaWYgKHRpZCAmJiAodGlkICE9IHBpZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWdldF90bGJfdih0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChnZXRfdGxiX3RzKHRsYmUpICE9IGFzICYmIGFzICE9IC0xKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9zaGFkb3dfcmVsZWFzZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiW3RsYnNlbF1bZXNlbF07CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1t0bGJzZWxdW2VzZWxdOworCisJaWYgKHBhZ2UpIHsKKwkJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXSA9IE5VTEw7CisKKwkJaWYgKGdldF90bGJfdihzdGxiZSkpIHsKKwkJCWlmICh0bGJlX2lzX3dyaXRhYmxlKHN0bGJlKSkKKwkJCQlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBhZ2UpOworCQkJZWxzZQorCQkJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX3N0bGJlX2ludmFsaWRhdGUoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCisJa3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2UodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCXN0bGJlLT5tYXMxID0gMDsKKwlLVk1UUkFDRV81RChTVExCX0lOVkFMLCAmdmNwdV9lNTAwLT52Y3B1LCBpbmRleF9vZih0bGJzZWwsIGVzZWwpLAorCQkJc3RsYmUtPm1hczEsIHN0bGJlLT5tYXMyLCBzdGxiZS0+bWFzMywgc3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWd2YV90IGVhZGRyLCBndmFfdCBlZW5kLCB1MzIgdGlkKQoreworCXVuc2lnbmVkIGludCBwaWQgPSB0aWQgJiAweGZmOworCXVuc2lnbmVkIGludCBpOworCisJLyogWFhYIFJlcGxhY2UgbG9vcCB3aXRoIGZhbmN5IGRhdGEgc3RydWN0dXJlcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVsxXTsgaSsrKSB7CisJCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbMV1baV07CisJCXVuc2lnbmVkIGludCB0aWQ7CisKKwkJaWYgKCFnZXRfdGxiX3Yoc3RsYmUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGVlbmQgPCBnZXRfdGxiX2VhZGRyKHN0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlYWRkciA+IGdldF90bGJfZW5kKHN0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCXRpZCA9IGdldF90bGJfdGlkKHN0bGJlKTsKKwkJaWYgKHRpZCAmJiAodGlkICE9IHBpZCkpCisJCQljb250aW51ZTsKKworCQlrdm1wcGNfZTUwMF9zdGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgMSwgaSk7CisJCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIDEsIGkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19lNTAwX2RlbGl2ZXJfdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQl1bnNpZ25lZCBpbnQgZWFkZHIsIGludCBhcykKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwl1bnNpZ25lZCBpbnQgdmljdGltLCBwaWRzZWwsIHRzaXplZDsKKwlpbnQgdGxic2VsOworCisJLyogc2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLiAqLworCXRsYnNlbCA9ICh2Y3B1X2U1MDAtPm1hczQgPj4gMjgpICYgMHgxOworCXZpY3RpbSA9ICh0bGJzZWwgPT0gMCkgPyB0bGIwX2dldF9uZXh0X3ZpY3RpbSh2Y3B1X2U1MDApIDogMDsKKwlwaWRzZWwgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDE2KSAmIDB4ZjsKKwl0c2l6ZWQgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDgpICYgMHhmOworCisJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTCh2aWN0aW0pCisJCXwgTUFTMF9OVih2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlt0bGJzZWxdKTsKKwl2Y3B1X2U1MDAtPm1hczEgPSBNQVMxX1ZBTElEIHwgKGFzID8gTUFTMV9UUyA6IDApCisJCXwgTUFTMV9USUQodmNwdV9lNTAwLT5waWRbcGlkc2VsXSkKKwkJfCBNQVMxX1RTSVpFKHRzaXplZCk7CisJdmNwdV9lNTAwLT5tYXMyID0gKGVhZGRyICYgTUFTMl9FUE4pCisJCXwgKHZjcHVfZTUwMC0+bWFzNCAmIE1BUzJfQVRUUklCX01BU0spOworCXZjcHVfZTUwMC0+bWFzMyAmPSBNQVMzX1UwIHwgTUFTM19VMSB8IE1BUzNfVTIgfCBNQVMzX1UzOworCXZjcHVfZTUwMC0+bWFzNiA9ICh2Y3B1X2U1MDAtPm1hczYgJiBNQVM2X1NQSUQxKQorCQl8IChnZXRfY3VyX3BpZCh2Y3B1KSA8PCAxNikKKwkJfCAoYXMgPyBNQVM2X1NBUyA6IDApOworCXZjcHVfZTUwMC0+bWFzNyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJdTY0IGd2YWRkciwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3QgdGxiZSAqZ3RsYmUsIGludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCBwYWdlICpuZXdfcGFnZTsKKwlzdHJ1Y3QgdGxiZSAqc3RsYmU7CisJaHBhX3QgaHBhZGRyOworCisJc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiW3RsYnNlbF1bZXNlbF07CisKKwkvKiBHZXQgcmVmZXJlbmNlIHRvIG5ldyBwYWdlLiAqLworCW5ld19wYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdV9lNTAwLT52Y3B1Lmt2bSwgZ2ZuKTsKKwlpZiAoaXNfZXJyb3JfcGFnZShuZXdfcGFnZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBnZXQgZ3Vlc3QgcGFnZSBmb3IgZ2ZuICVseCFcbiIsIGdmbik7CisJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4obmV3X3BhZ2UpOworCQlyZXR1cm47CisJfQorCWhwYWRkciA9IHBhZ2VfdG9fcGh5cyhuZXdfcGFnZSk7CisKKwkvKiBEcm9wIHJlZmVyZW5jZSB0byBvbGQgcGFnZS4gKi8KKwlrdm1wcGNfZTUwMF9zaGFkb3dfcmVsZWFzZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1t0bGJzZWxdW2VzZWxdID0gbmV3X3BhZ2U7CisKKwkvKiBGb3JjZSBUUz0xIElQUk9UPTAgVFNJWkU9NEtCIGZvciBhbGwgZ3Vlc3QgbWFwcGluZ3MuICovCisJc3RsYmUtPm1hczEgPSBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80SykKKwkJfCBNQVMxX1RJRChnZXRfdGxiX3RpZChndGxiZSkpIHwgTUFTMV9UUyB8IE1BUzFfVkFMSUQ7CisJc3RsYmUtPm1hczIgPSAoZ3ZhZGRyICYgTUFTMl9FUE4pCisJCXwgZTUwMF9zaGFkb3dfbWFzMl9hdHRyaWIoZ3RsYmUtPm1hczIsCisJCQkJdmNwdV9lNTAwLT52Y3B1LmFyY2gubXNyICYgTVNSX1BSKTsKKwlzdGxiZS0+bWFzMyA9IChocGFkZHIgJiBNQVMzX1JQTikKKwkJfCBlNTAwX3NoYWRvd19tYXMzX2F0dHJpYihndGxiZS0+bWFzMywKKwkJCQl2Y3B1X2U1MDAtPnZjcHUuYXJjaC5tc3IgJiBNU1JfUFIpOworCXN0bGJlLT5tYXM3ID0gKGhwYWRkciA+PiAzMikgJiBNQVM3X1JQTjsKKworCUtWTVRSQUNFXzVEKFNUTEJfV1JJVEUsICZ2Y3B1X2U1MDAtPnZjcHUsIGluZGV4X29mKHRsYnNlbCwgZXNlbCksCisJCQlzdGxiZS0+bWFzMSwgc3RsYmUtPm1hczIsIHN0bGJlLT5tYXMzLCBzdGxiZS0+bWFzNywKKwkJCWhhbmRsZXIpOworfQorCisvKiBYWFggb25seSBtYXAgdGhlIG9uZS1vbmUgY2FzZSwgZm9yIG5vdyB1c2UgVExCMCAqLworc3RhdGljIGludCBrdm1wcGNfZTUwMF9zdGxiZV9tYXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKmd0bGJlOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKworCWt2bXBwY19lNTAwX3NoYWRvd19tYXAodmNwdV9lNTAwLCBnZXRfdGxiX2VhZGRyKGd0bGJlKSwKKwkJCWdldF90bGJfcmFkZHIoZ3RsYmUpID4+IFBBR0VfU0hJRlQsCisJCQlndGxiZSwgdGxic2VsLCBlc2VsKTsKKworCXJldHVybiBlc2VsOworfQorCisvKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGd1ZXN0IFRMQiBlbnRyeSBpcyBzYWZlIHRvIGluc2VydCBpbnRvCisgKiB0aGUgc2hhZG93IFRMQi4gKi8KKy8qIFhYWCBmb3IgYm90aCBvbmUtb25lIGFuZCBvbmUtdG8tbWFueSAsIGZvciBub3cgdXNlIFRMQjEgKi8KK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfdGxiMV9tYXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJdTY0IGd2YWRkciwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3QgdGxiZSAqZ3RsYmUpCit7CisJdW5zaWduZWQgaW50IHZpY3RpbTsKKworCXZpY3RpbSA9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzFdKys7CisKKwlpZiAodW5saWtlbHkodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbMV0gPj0gdGxiMV9tYXhfc2hhZG93X3NpemUoKSkpCisJCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzFdID0gMDsKKworCWt2bXBwY19lNTAwX3NoYWRvd19tYXAodmNwdV9lNTAwLCBndmFkZHIsIGdmbiwgZ3RsYmUsIDEsIHZpY3RpbSk7CisKKwlyZXR1cm4gdmljdGltOworfQorCisvKiBJbnZhbGlkYXRlIGFsbCBndWVzdCBrZXJuZWwgbWFwcGluZ3Mgd2hlbiBlbnRlciB1c2VybW9kZSwKKyAqIHNvIHRoYXQgd2hlbiB0aGV5IGZhdWx0IGJhY2sgaW4gdGhleSB3aWxsIGdldCB0aGUKKyAqIHByb3BlciBwZXJtaXNzaW9uIGJpdHMuICovCit2b2lkIGt2bXBwY19tbXVfcHJpdl9zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdXNlcm1vZGUpCit7CisJaWYgKHVzZXJtb2RlKSB7CisJCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCQlpbnQgaTsKKworCQkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgdGxiMV9tYXhfc2hhZG93X3NpemUoKTsgaSsrKQorCQkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIDEsIGkpOworCisJCV90bGJpbF9hbGwoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfZ3RsYmVfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKworCWlmICh1bmxpa2VseShnZXRfdGxiX2lwcm90KGd0bGJlKSkpCisJCXJldHVybiAtMTsKKworCWlmICh0bGJzZWwgPT0gMSkgeworCQlrdm1wcGNfZTUwMF90bGIxX2ludmFsaWRhdGUodmNwdV9lNTAwLCBnZXRfdGxiX2VhZGRyKGd0bGJlKSwKKwkJCQlnZXRfdGxiX2VuZChndGxiZSksCisJCQkJZ2V0X3RsYl90aWQoZ3RsYmUpKTsKKwl9IGVsc2UgeworCQlrdm1wcGNfZTUwMF9zdGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwl9CisKKwlndGxiZS0+bWFzMSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfbXRfbW11Y3NyMChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLCB1bG9uZyB2YWx1ZSkKK3sKKwlpbnQgZXNlbDsKKworCWlmICh2YWx1ZSAmIE1NVUNTUjBfVExCMEZJKQorCQlmb3IgKGVzZWwgPSAwOyBlc2VsIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVswXTsgZXNlbCsrKQorCQkJa3ZtcHBjX2U1MDBfZ3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIDAsIGVzZWwpOworCWlmICh2YWx1ZSAmIE1NVUNTUjBfVExCMUZJKQorCQlmb3IgKGVzZWwgPSAwOyBlc2VsIDwgdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVsxXTsgZXNlbCsrKQorCQkJa3ZtcHBjX2U1MDBfZ3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIDEsIGVzZWwpOworCisJX3RsYmlsX2FsbCgpOworCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxiaXZheChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByYSwgaW50IHJiKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXVuc2lnbmVkIGludCBpYTsKKwlpbnQgZXNlbCwgdGxic2VsOworCWd2YV90IGVhOworCisJZWEgPSAoKHJhKSA/IHZjcHUtPmFyY2guZ3ByW3JhXSA6IDApICsgdmNwdS0+YXJjaC5ncHJbcmJdOworCisJaWEgPSAoZWEgPj4gMikgJiAweDE7CisKKwkvKiBzaW5jZSB3ZSBvbmx5IGhhdmUgdHdvIFRMQnMsIG9ubHkgbG93ZXIgYml0IGlzIHVzZWQuICovCisJdGxic2VsID0gKGVhID4+IDMpICYgMHgxOworCisJaWYgKGlhKSB7CisJCS8qIGludmFsaWRhdGUgYWxsIGVudHJpZXMgKi8KKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgZXNlbCsrKQorCQkJa3ZtcHBjX2U1MDBfZ3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisJfSBlbHNlIHsKKwkJZWEgJj0gMHhmZmZmZjAwMDsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhLCB0bGJzZWwsCisJCQkJZ2V0X2N1cl9waWQodmNwdSksIC0xKTsKKwkJaWYgKGVzZWwgPj0gMCkKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCX0KKworCV90bGJpbF9hbGwoKTsKKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX3RsYnJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgdGxic2VsLCBlc2VsOworCXN0cnVjdCB0bGJlICpndGxiZTsKKworCXRsYnNlbCA9IGdldF90bGJfdGxic2VsKHZjcHVfZTUwMCk7CisJZXNlbCA9IGdldF90bGJfZXNlbCh2Y3B1X2U1MDAsIHRsYnNlbCk7CisKKwlndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCXZjcHVfZTUwMC0+bWFzMCAmPSB+TUFTMF9OVih+MCk7CisJdmNwdV9lNTAwLT5tYXMwIHw9IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJdmNwdV9lNTAwLT5tYXMxID0gZ3RsYmUtPm1hczE7CisJdmNwdV9lNTAwLT5tYXMyID0gZ3RsYmUtPm1hczI7CisJdmNwdV9lNTAwLT5tYXMzID0gZ3RsYmUtPm1hczM7CisJdmNwdV9lNTAwLT5tYXM3ID0gZ3RsYmUtPm1hczc7CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJzeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByYikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgYXMgPSAhIWdldF9jdXJfc2FzKHZjcHVfZTUwMCk7CisJdW5zaWduZWQgaW50IHBpZCA9IGdldF9jdXJfc3BpZCh2Y3B1X2U1MDApOworCWludCBlc2VsLCB0bGJzZWw7CisJc3RydWN0IHRsYmUgKmd0bGJlID0gTlVMTDsKKwlndmFfdCBlYTsKKworCWVhID0gdmNwdS0+YXJjaC5ncHJbcmJdOworCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgeworCQllc2VsID0ga3ZtcHBjX2U1MDBfdGxiX2luZGV4KHZjcHVfZTUwMCwgZWEsIHRsYnNlbCwgcGlkLCBhcyk7CisJCWlmIChlc2VsID49IDApIHsKKwkJCWd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChndGxiZSkgeworCQl2Y3B1X2U1MDAtPm1hczAgPSBNQVMwX1RMQlNFTCh0bGJzZWwpIHwgTUFTMF9FU0VMKGVzZWwpCisJCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJCXZjcHVfZTUwMC0+bWFzMSA9IGd0bGJlLT5tYXMxOworCQl2Y3B1X2U1MDAtPm1hczIgPSBndGxiZS0+bWFzMjsKKwkJdmNwdV9lNTAwLT5tYXMzID0gZ3RsYmUtPm1hczM7CisJCXZjcHVfZTUwMC0+bWFzNyA9IGd0bGJlLT5tYXM3OworCX0gZWxzZSB7CisJCWludCB2aWN0aW07CisKKwkJLyogc2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLiAqLworCQl0bGJzZWwgPSB2Y3B1X2U1MDAtPm1hczQgPj4gMjggJiAweDE7CisJCXZpY3RpbSA9ICh0bGJzZWwgPT0gMCkgPyB0bGIwX2dldF9uZXh0X3ZpY3RpbSh2Y3B1X2U1MDApIDogMDsKKworCQl2Y3B1X2U1MDAtPm1hczAgPSBNQVMwX1RMQlNFTCh0bGJzZWwpIHwgTUFTMF9FU0VMKHZpY3RpbSkKKwkJCXwgTUFTMF9OVih2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlt0bGJzZWxdKTsKKwkJdmNwdV9lNTAwLT5tYXMxID0gKHZjcHVfZTUwMC0+bWFzNiAmIE1BUzZfU1BJRDApCisJCQl8ICh2Y3B1X2U1MDAtPm1hczYgJiAoTUFTNl9TQVMgPyBNQVMxX1RTIDogMCkpCisJCQl8ICh2Y3B1X2U1MDAtPm1hczQgJiBNQVM0X1RTSVpFRCh+MCkpOworCQl2Y3B1X2U1MDAtPm1hczIgJj0gTUFTMl9FUE47CisJCXZjcHVfZTUwMC0+bWFzMiB8PSB2Y3B1X2U1MDAtPm1hczQgJiBNQVMyX0FUVFJJQl9NQVNLOworCQl2Y3B1X2U1MDAtPm1hczMgJj0gTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMzsKKwkJdmNwdV9lNTAwLT5tYXM3ID0gMDsKKwl9CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJ3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJdTY0IGVhZGRyOworCXU2NCByYWRkcjsKKwl1MzIgdGlkOworCXN0cnVjdCB0bGJlICpndGxiZTsKKwlpbnQgdGxic2VsLCBlc2VsLCBzdGxic2VsLCBzZXNlbDsKKworCXRsYnNlbCA9IGdldF90bGJfdGxic2VsKHZjcHVfZTUwMCk7CisJZXNlbCA9IGdldF90bGJfZXNlbCh2Y3B1X2U1MDAsIHRsYnNlbCk7CisKKwlndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCisJaWYgKGdldF90bGJfdihndGxiZSkgJiYgdGxic2VsID09IDEpIHsKKwkJZWFkZHIgPSBnZXRfdGxiX2VhZGRyKGd0bGJlKTsKKwkJdGlkID0gZ2V0X3RsYl90aWQoZ3RsYmUpOworCQlrdm1wcGNfZTUwMF90bGIxX2ludmFsaWRhdGUodmNwdV9lNTAwLCBlYWRkciwKKwkJCQlnZXRfdGxiX2VuZChndGxiZSksIHRpZCk7CisJfQorCisJZ3RsYmUtPm1hczEgPSB2Y3B1X2U1MDAtPm1hczE7CisJZ3RsYmUtPm1hczIgPSB2Y3B1X2U1MDAtPm1hczI7CisJZ3RsYmUtPm1hczMgPSB2Y3B1X2U1MDAtPm1hczM7CisJZ3RsYmUtPm1hczcgPSB2Y3B1X2U1MDAtPm1hczc7CisKKwlLVk1UUkFDRV81RChHVExCX1dSSVRFLCB2Y3B1LCB2Y3B1X2U1MDAtPm1hczAsCisJCQlndGxiZS0+bWFzMSwgZ3RsYmUtPm1hczIsIGd0bGJlLT5tYXMzLCBndGxiZS0+bWFzNywKKwkJCWhhbmRsZXIpOworCisJLyogSW52YWxpZGF0ZSBzaGFkb3cgbWFwcGluZ3MgZm9yIHRoZSBhYm91dC10by1iZS1jbG9iYmVyZWQgVExCRS4gKi8KKwlpZiAodGxiZV9pc19ob3N0X3NhZmUodmNwdSwgZ3RsYmUpKSB7CisJCXN3aXRjaCAodGxic2VsKSB7CisJCWNhc2UgMDoKKwkJCS8qIFRMQjAgKi8KKwkJCWd0bGJlLT5tYXMxICY9IH5NQVMxX1RTSVpFKH4wKTsKKwkJCWd0bGJlLT5tYXMxIHw9IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKTsKKworCQkJc3RsYnNlbCA9IDA7CisJCQlzZXNlbCA9IGt2bXBwY19lNTAwX3N0bGJlX21hcCh2Y3B1X2U1MDAsIDAsIGVzZWwpOworCisJCQlicmVhazsKKworCQljYXNlIDE6CisJCQkvKiBUTEIxICovCisJCQllYWRkciA9IGdldF90bGJfZWFkZHIoZ3RsYmUpOworCQkJcmFkZHIgPSBnZXRfdGxiX3JhZGRyKGd0bGJlKTsKKworCQkJLyogQ3JlYXRlIGEgNEtCIG1hcHBpbmcgb24gdGhlIGhvc3QuCisJCQkgKiBJZiB0aGUgZ3Vlc3Qgd2FudGVkIGEgbGFyZ2UgcGFnZSwKKwkJCSAqIG9ubHkgdGhlIGZpcnN0IDRLQiBpcyBtYXBwZWQgaGVyZSBhbmQgdGhlIHJlc3QKKwkJCSAqIGFyZSBtYXBwZWQgb24gdGhlIGZseS4gKi8KKwkJCXN0bGJzZWwgPSAxOworCQkJc2VzZWwgPSBrdm1wcGNfZTUwMF90bGIxX21hcCh2Y3B1X2U1MDAsIGVhZGRyLAorCQkJCQlyYWRkciA+PiBQQUdFX1NISUZULCBndGxiZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwkJd3JpdGVfaG9zdF90bGJlKHZjcHVfZTUwMCwgc3RsYnNlbCwgc2VzZWwpOworCX0KKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUyk7CisKKwlyZXR1cm4ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgZ2V0X2N1cl9waWQodmNwdSksIGFzKTsKK30KKworaW50IGt2bXBwY19tbXVfZHRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKQoreworCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0RTKTsKKworCXJldHVybiBrdm1wcGNfZTUwMF90bGJfc2VhcmNoKHZjcHUsIGVhZGRyLCBnZXRfY3VyX3BpZCh2Y3B1KSwgYXMpOworfQorCit2b2lkIGt2bXBwY19tbXVfaXRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUyk7CisKKwlrdm1wcGNfZTUwMF9kZWxpdmVyX3RsYl9taXNzKHZjcHUsIHZjcHUtPmFyY2gucGMsIGFzKTsKK30KKwordm9pZCBrdm1wcGNfbW11X2R0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfRFMpOworCisJa3ZtcHBjX2U1MDBfZGVsaXZlcl90bGJfbWlzcyh2Y3B1LCB2Y3B1LT5hcmNoLmZhdWx0X2RlYXIsIGFzKTsKK30KKworZ3BhX3Qga3ZtcHBjX21tdV94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpbmRleCwKKwkJCWd2YV90IGVhZGRyKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXN0cnVjdCB0bGJlICpndGxiZSA9CisJCSZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxfb2YoaW5kZXgpXVtlc2VsX29mKGluZGV4KV07CisJdTY0IHBnbWFzayA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpIC0gMTsKKworCXJldHVybiBnZXRfdGxiX3JhZGRyKGd0bGJlKSB8IChlYWRkciAmIHBnbWFzayk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgdGxic2VsLCBpOworCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKQorCQkJa3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2UodmNwdV9lNTAwLCB0bGJzZWwsIGkpOworCisJLyogZGlzY2FyZCBhbGwgZ3Vlc3QgbWFwcGluZyAqLworCV90bGJpbF9hbGwoKTsKK30KKwordm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlYWRkciwgZ3BhX3QgZ3BhZGRyLAorCQkJdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCB0bGJzZWwgPSB0bGJzZWxfb2YoaW5kZXgpOworCWludCBlc2VsID0gZXNlbF9vZihpbmRleCk7CisJaW50IHN0bGJzZWwsIHNlc2VsOworCisJc3dpdGNoICh0bGJzZWwpIHsKKwljYXNlIDA6CisJCXN0bGJzZWwgPSAwOworCQlzZXNlbCA9IGVzZWw7CisJCWJyZWFrOworCisJY2FzZSAxOiB7CisJCWdmbl90IGdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOworCQlzdHJ1Y3QgdGxiZSAqZ3RsYmUKKwkJCT0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwkJc3RsYnNlbCA9IDE7CisJCXNlc2VsID0ga3ZtcHBjX2U1MDBfdGxiMV9tYXAodmNwdV9lNTAwLCBlYWRkciwgZ2ZuLCBndGxiZSk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJd3JpdGVfaG9zdF90bGJlKHZjcHVfZTUwMCwgc3RsYnNlbCwgc2VzZWwpOworfQorCitpbnQga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJZ3ZhX3QgZWFkZHIsIHVuc2lnbmVkIGludCBwaWQsIGludCBhcykKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgZXNlbCwgdGxic2VsOworCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgeworCQllc2VsID0ga3ZtcHBjX2U1MDBfdGxiX2luZGV4KHZjcHVfZTUwMCwgZWFkZHIsIHRsYnNlbCwgcGlkLCBhcyk7CisJCWlmIChlc2VsID49IDApCisJCQlyZXR1cm4gaW5kZXhfb2YodGxic2VsLCBlc2VsKTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQga3ZtcHBjX2U1MDBfdGxiX3NldHVwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJc3RydWN0IHRsYmUgKnRsYmU7CisKKwkvKiBJbnNlcnQgbGFyZ2UgaW5pdGlhbCBtYXBwaW5nIGZvciBndWVzdC4gKi8KKwl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdWzBdOworCXRsYmUtPm1hczEgPSBNQVMxX1ZBTElEIHwgTUFTMV9UU0laRShCT09LRV9QQUdFU1pfMjU2TSk7CisJdGxiZS0+bWFzMiA9IDA7CisJdGxiZS0+bWFzMyA9IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKKwl0bGJlLT5tYXM3ID0gMDsKKworCS8qIDRLIG1hcCBmb3Igc2VyaWFsIG91dHB1dC4gVXNlZCBieSBrZXJuZWwgd3JhcHBlci4gKi8KKwl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdWzFdOworCXRsYmUtPm1hczEgPSBNQVMxX1ZBTElEIHwgTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspOworCXRsYmUtPm1hczIgPSAoMHhlMDAwNDUwMCAmIDB4RkZGRkYwMDApIHwgTUFTMl9JIHwgTUFTMl9HOworCXRsYmUtPm1hczMgPSAoMHhlMDAwNDUwMCAmIDB4RkZGRkYwMDApIHwgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLOworCXRsYmUtPm1hczcgPSAwOworfQorCitpbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwl0bGIxX2VudHJ5X251bSA9IG1mc3ByKFNQUk5fVExCMUNGRykgJiAweEZGRjsKKworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMF0gPSBLVk1fRTUwMF9UTEIwX1NJWkU7CisJdmNwdV9lNTAwLT5ndWVzdF90bGJbMF0gPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdGxiZSkgKiBLVk1fRTUwMF9UTEIwX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlswXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXQ7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd190bGJfc2l6ZVswXSA9IEtWTV9FNTAwX1RMQjBfU0laRTsKKwl2Y3B1X2U1MDAtPnNoYWRvd190bGJbMF0gPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdGxiZSkgKiBLVk1fRTUwMF9UTEIwX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPnNoYWRvd190bGJbMF0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X2d1ZXN0MDsKKworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV0gPSBLVk1fRTUwMF9UTEIxX1NJWkU7CisJdmNwdV9lNTAwLT5ndWVzdF90bGJbMV0gPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdGxiZSkgKiBLVk1fRTUwMF9UTEIxX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfc2hhZG93MDsKKworCXZjcHVfZTUwMC0+c2hhZG93X3RsYl9zaXplWzFdID0gdGxiMV9lbnRyeV9udW07CisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogdGxiMV9lbnRyeV9udW0sIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPnNoYWRvd190bGJbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X2d1ZXN0MTsKKworCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzBdID0gKHN0cnVjdCBwYWdlICoqKQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIEtWTV9FNTAwX1RMQjBfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzBdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9zaGFkb3cxOworCisJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMV0gPSAoc3RydWN0IHBhZ2UgKiopCisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogdGxiMV9lbnRyeV9udW0sIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1sxXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfcGFnZTA7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wYWdlMDoKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSk7CitlcnJfb3V0X3NoYWRvdzE6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdKTsKK2Vycl9vdXRfZ3Vlc3QxOgorCWtmcmVlKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdKTsKK2Vycl9vdXRfc2hhZG93MDoKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd190bGJbMF0pOworZXJyX291dF9ndWVzdDA6CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0pOworZXJyX291dDoKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQga3ZtcHBjX2U1MDBfdGxiX3VuaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzFdKTsKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdKTsKKwlrZnJlZSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdKTsKKwlrZnJlZSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlswXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmggYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViMDY0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuaApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogWXUgTGl1LCB5dS5saXVAZnJlZXNjYWxlLmNvbQorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGFyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5oLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0tWTV9FNTAwX1RMQl9IX18KKyNkZWZpbmUgX19LVk1fRTUwMF9UTEJfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGFzbS9tbXUtZnNsLWJvb2tlLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgorCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkVfQklUCTcJLyogRml4ZWQgKi8KKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfU0laRQkJKDFVTCA8PCBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX0JJVCkKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfU0laRV9NQVNLCShLVk1fRTUwMF9UTEIwX1dBWV9TSVpFIC0gMSkKKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fQklUCTEJLyogTm8gZ3JlYXRlciB0aGFuIDcgKi8KKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfTlVNCQkoMVVMIDw8IEtWTV9FNTAwX1RMQjBfV0FZX05VTV9CSVQpCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX05VTV9NQVNLCShLVk1fRTUwMF9UTEIwX1dBWV9OVU0gLSAxKQorCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfU0laRSAgKEtWTV9FNTAwX1RMQjBfV0FZX1NJWkUgKiBLVk1fRTUwMF9UTEIwX1dBWV9OVU0pCisjZGVmaW5lIEtWTV9FNTAwX1RMQjFfU0laRSAgMTYKKworI2RlZmluZSBpbmRleF9vZih0bGJzZWwsIGVzZWwpCSgoKHRsYnNlbCkgPDwgMTYpIHwgKChlc2VsKSAmIDB4RkZGRikpCisjZGVmaW5lIHRsYnNlbF9vZihpbmRleCkJKChpbmRleCkgPj4gMTYpCisjZGVmaW5lIGVzZWxfb2YoaW5kZXgpCQkoKGluZGV4KSAmIDB4RkZGRikKKworI2RlZmluZSBFNTAwX1RMQl9VU0VSX1BFUk1fTUFTSyAoTUFTM19VWHxNQVMzX1VSfE1BUzNfVVcpCisjZGVmaW5lIEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSyAoTUFTM19TWHxNQVMzX1NSfE1BUzNfU1cpCisjZGVmaW5lIE1BUzJfQVRUUklCX01BU0sgXAorCSAgKE1BUzJfWDAgfCBNQVMyX1gxKQorI2RlZmluZSBNQVMzX0FUVFJJQl9NQVNLIFwKKwkgIChNQVMzX1UwIHwgTUFTM19VMSB8IE1BUzNfVTIgfCBNQVMzX1UzIFwKKwkgICB8IEU1MDBfVExCX1VTRVJfUEVSTV9NQVNLIHwgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLKQorCitleHRlcm4gdm9pZCBrdm1wcGNfZHVtcF90bGJzKHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF9tdF9tbXVjc3IwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICosIHVsb25nKTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJ3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKik7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxicmUoc3RydWN0IGt2bV92Y3B1ICopOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX3RsYml2YXgoc3RydWN0IGt2bV92Y3B1ICosIGludCwgaW50KTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJzeChzdHJ1Y3Qga3ZtX3ZjcHUgKiwgaW50KTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaChzdHJ1Y3Qga3ZtX3ZjcHUgKiwgZ3ZhX3QsIHVuc2lnbmVkIGludCwgaW50KTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl9wdXQoc3RydWN0IGt2bV92Y3B1ICopOworZXh0ZXJuIHZvaWQga3ZtcHBjX2U1MDBfdGxiX2xvYWQoc3RydWN0IGt2bV92Y3B1ICosIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICopOworZXh0ZXJuIHZvaWQga3ZtcHBjX2U1MDBfdGxiX3VuaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl9zZXR1cChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqKTsKKworLyogVExCIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfc2l6ZShjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gOCkgJiAweGY7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ3ZhX3QgZ2V0X3RsYl9lYWRkcihjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gdGxiZS0+bWFzMiAmIDB4ZmZmZmYwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGdldF90bGJfYnl0ZXMoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJdW5zaWduZWQgaW50IHBnc2l6ZSA9IGdldF90bGJfc2l6ZSh0bGJlKTsKKwlyZXR1cm4gMVVMTCA8PCAxMCA8PCAocGdzaXplIDw8IDEpOworfQorCitzdGF0aWMgaW5saW5lIGd2YV90IGdldF90bGJfZW5kKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXU2NCBieXRlcyA9IGdldF90bGJfYnl0ZXModGxiZSk7CisJcmV0dXJuIGdldF90bGJfZWFkZHIodGxiZSkgKyBieXRlcyAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGdldF90bGJfcmFkZHIoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJdTY0IHJwbiA9IHRsYmUtPm1hczc7CisJcmV0dXJuIChycG4gPDwgMzIpIHwgKHRsYmUtPm1hczMgJiAweGZmZmZmMDAwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl90aWQoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDE2KSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdHMoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDEyKSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl92KGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAzMSkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfaXByb3QoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDMwKSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2N1cl9waWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLnBpZCAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jdXJfc3BpZCgKKwkJY29uc3Qgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlyZXR1cm4gKHZjcHVfZTUwMC0+bWFzNiA+PiAxNikgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3VyX3NhcygKKwkJY29uc3Qgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlyZXR1cm4gdmNwdV9lNTAwLT5tYXM2ICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3RsYnNlbCgKKwkJY29uc3Qgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwkvKgorCSAqIE1hbnVhbCBzYXlzIHRoYXQgdGxic2VsIGhhcyAyIGJpdHMgd2lkZS4KKwkgKiBTaW5jZSB3ZSBvbmx5IGhhdmUgdHdvIFRMQnMsIG9ubHkgbG93ZXIgYml0IGlzIHVzZWQuCisJICovCisJcmV0dXJuICh2Y3B1X2U1MDAtPm1hczAgPj4gMjgpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX252X2JpdCgKKwkJY29uc3Qgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlyZXR1cm4gdmNwdV9lNTAwLT5tYXMwICYgMHhmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfZXNlbF9iaXQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuICh2Y3B1X2U1MDAtPm1hczAgPj4gMTYpICYgMHhmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfZXNlbCgKKwkJY29uc3Qgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCkKK3sKKwl1bnNpZ25lZCBpbnQgZXNlbCA9IGdldF90bGJfZXNlbF9iaXQodmNwdV9lNTAwKTsKKworCWlmICh0bGJzZWwgPT0gMCkgeworCQllc2VsICY9IEtWTV9FNTAwX1RMQjBfV0FZX05VTV9NQVNLOworCQllc2VsIHw9ICgodmNwdV9lNTAwLT5tYXMyID4+IDEyKSAmIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkVfTUFTSykKKwkJCQk8PCBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fQklUOworCX0gZWxzZSB7CisJCWVzZWwgJj0gS1ZNX0U1MDBfVExCMV9TSVpFIC0gMTsKKwl9CisKKwlyZXR1cm4gZXNlbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGxiZV9pc19ob3N0X3NhZmUoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJZ3BhX3QgZ3BhOworCisJaWYgKCFnZXRfdGxiX3YodGxiZSkpCisJCXJldHVybiAwOworCisJLyogRG9lcyBpdCBtYXRjaCBjdXJyZW50IGd1ZXN0IEFTPyAqLworCS8qIFhYWCB3aGF0IGFib3V0IElTICE9IERTPyAqLworCWlmIChnZXRfdGxiX3RzKHRsYmUpICE9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0lTKSkKKwkJcmV0dXJuIDA7CisKKwlncGEgPSBnZXRfdGxiX3JhZGRyKHRsYmUpOworCWlmICghZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCkpCisJCS8qIE1hcHBpbmcgaXMgbm90IGZvciBSQU0uICovCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBfX0tWTV9FNTAwX1RMQl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMKaW5kZXggZDFkMzhkYS4uYTU2MWQ2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMKQEAgLTMwLDYgKzMwLDM5IEBACiAjaW5jbHVkZSA8YXNtL2Rpc2Fzc2VtYmxlLmg+CiAjaW5jbHVkZSAidGltaW5nLmgiCiAKKyNkZWZpbmUgT1BfVFJBUCAzCisKKyNkZWZpbmUgT1BfMzFfWE9QX0xXWlggICAgICAyMworI2RlZmluZSBPUF8zMV9YT1BfTEJaWCAgICAgIDg3CisjZGVmaW5lIE9QXzMxX1hPUF9TVFdYICAgICAgMTUxCisjZGVmaW5lIE9QXzMxX1hPUF9TVEJYICAgICAgMjE1CisjZGVmaW5lIE9QXzMxX1hPUF9TVEJVWCAgICAgMjQ3CisjZGVmaW5lIE9QXzMxX1hPUF9MSFpYICAgICAgMjc5CisjZGVmaW5lIE9QXzMxX1hPUF9MSFpVWCAgICAgMzExCisjZGVmaW5lIE9QXzMxX1hPUF9NRlNQUiAgICAgMzM5CisjZGVmaW5lIE9QXzMxX1hPUF9TVEhYICAgICAgNDA3CisjZGVmaW5lIE9QXzMxX1hPUF9TVEhVWCAgICAgNDM5CisjZGVmaW5lIE9QXzMxX1hPUF9NVFNQUiAgICAgNDY3CisjZGVmaW5lIE9QXzMxX1hPUF9EQ0JJICAgICAgNDcwCisjZGVmaW5lIE9QXzMxX1hPUF9MV0JSWCAgICAgNTM0CisjZGVmaW5lIE9QXzMxX1hPUF9UTEJTWU5DICAgNTY2CisjZGVmaW5lIE9QXzMxX1hPUF9TVFdCUlggICAgNjYyCisjZGVmaW5lIE9QXzMxX1hPUF9MSEJSWCAgICAgNzkwCisjZGVmaW5lIE9QXzMxX1hPUF9TVEhCUlggICAgOTE4CisKKyNkZWZpbmUgT1BfTFdaICAzMgorI2RlZmluZSBPUF9MV1pVIDMzCisjZGVmaW5lIE9QX0xCWiAgMzQKKyNkZWZpbmUgT1BfTEJaVSAzNQorI2RlZmluZSBPUF9TVFcgIDM2CisjZGVmaW5lIE9QX1NUV1UgMzcKKyNkZWZpbmUgT1BfU1RCICAzOAorI2RlZmluZSBPUF9TVEJVIDM5CisjZGVmaW5lIE9QX0xIWiAgNDAKKyNkZWZpbmUgT1BfTEhaVSA0MQorI2RlZmluZSBPUF9TVEggIDQ0CisjZGVmaW5lIE9QX1NUSFUgNDUKKwogdm9pZCBrdm1wcGNfZW11bGF0ZV9kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWlmICh2Y3B1LT5hcmNoLnRjciAmIFRDUl9ESUUpIHsKQEAgLTc4LDcgKzExMSw3IEBACiAJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfSU5TVF9FWElUUyk7CiAKIAlzd2l0Y2ggKGdldF9vcChpbnN0KSkgewotCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmFwICovCisJY2FzZSBPUF9UUkFQOgogCQl2Y3B1LT5hcmNoLmVzciB8PSBFU1JfUFRSOwogCQlrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHZjcHUpOwogCQlhZHZhbmNlID0gMDsKQEAgLTg3LDMxICsxMjAsMzEgQEAKIAljYXNlIDMxOgogCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKIAotCQljYXNlIDIzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsd3p4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xXWlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDQsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA4NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGJ6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MQlpYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAxLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0d3ggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RXWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDIxNTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUQlg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyNDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RidXggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RCVVg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0xMjYsMTIgKzE1OSwxMiBAQAogCQkJdmNwdS0+YXJjaC5ncHJbcnNdID0gZWE7CiAJCQlicmVhazsKIAotCQljYXNlIDI3OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaHp4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xIWlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAzMTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGh6dXggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEhaVVg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0xNDQsNyArMTc3LDcgQEAKIAkJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IGVhOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAzMzk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWZzcHIgKi8KKwkJY2FzZSBPUF8zMV9YT1BfTUZTUFI6CiAJCQlzcHJuID0gZ2V0X3Nwcm4oaW5zdCk7CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIApAQCAtMTg1LDcgKzIxOCw3IEBACiAJCQl9CiAJCQlicmVhazsKIAotCQljYXNlIDQwNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGh4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUSFg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0xOTUsNyArMjI4LDcgQEAKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgNDM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aHV4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUSFVYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMjEwLDcgKzI0Myw3IEBACiAJCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSBlYTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgNDY3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG10c3ByICovCisJCWNhc2UgT1BfMzFfWE9QX01UU1BSOgogCQkJc3BybiA9IGdldF9zcHJuKGluc3QpOwogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlzd2l0Y2ggKHNwcm4pIHsKQEAgLTI0Niw3ICsyNzksNyBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSA0NzA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGNiaSAqLworCQljYXNlIE9QXzMxX1hPUF9EQ0JJOgogCQkJLyogRG8gbm90aGluZy4gVGhlIGd1ZXN0IGlzIHBlcmZvcm1pbmcgZGNiaSBiZWNhdXNlCiAJCQkgKiBoYXJkd2FyZSBETUEgaXMgbm90IHNub29wZWQgYnkgdGhlIGRjYWNoZSwgYnV0CiAJCQkgKiBlbXVsYXRlZCBETUEgZWl0aGVyIGdvZXMgdGhyb3VnaCB0aGUgZGNhY2hlIGFzCkBAIC0yNTQsMTUgKzI4NywxNSBAQAogCQkJICogY29oZXJlbmNlLiAqLwogCQkJYnJlYWs7CiAKLQkJY2FzZSA1MzQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHdicnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTFdCUlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDQsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA1NjY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGxic3luYyAqLworCQljYXNlIE9QXzMxX1hPUF9UTEJTWU5DOgogCQkJYnJlYWs7CiAKLQkJY2FzZSA2NjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3R3YnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUV0JSWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTI3MiwxMiArMzA1LDEyIEBACiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMCk7CiAJCQlicmVhazsKIAotCQljYXNlIDc5MDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaGJyeCAqLworCQljYXNlIE9QXzMxX1hPUF9MSEJSWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMCk7CiAJCQlicmVhazsKIAotCQljYXNlIDkxODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGhicnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfU1RIQlJYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMjkzLDM3ICszMjYsMzcgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgMzI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHd6ICovCisJY2FzZSBPUF9MV1o6CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDMzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3enUgKi8KKwljYXNlIE9QX0xXWlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgNCwgMSk7CiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsYnogKi8KKwljYXNlIE9QX0xCWjoKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDEsIDEpOwogCQlicmVhazsKIAotCWNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGJ6dSAqLworCWNhc2UgT1BfTEJaVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAxLCAxKTsKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDM2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0dyAqLworCWNhc2UgT1BfU1RXOgogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHd1ICovCisJY2FzZSBPUF9TVFdVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKQEAgLTMzMSwxMyArMzY0LDEzIEBACiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGIgKi8KKwljYXNlIE9QX1NUQjoKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEpOwogCQlicmVhazsKIAotCWNhc2UgMzk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RidSAqLworCWNhc2UgT1BfU1RCVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCkBAIC0zNDUsMjUgKzM3OCwyNSBAQAogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgNDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGh6ICovCisJY2FzZSBPUF9MSFo6CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoenUgKi8KKwljYXNlIE9QX0xIWlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMSk7CiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSA0NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGggKi8KKwljYXNlIE9QX1NUSDoKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIDEpOwogCQlicmVhazsKIAotCWNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RodSAqLworCWNhc2UgT1BfU1RIVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDVmODEyNTYuLjkwNTczMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC0yMTYsNDYgKzIxNiwyMyBAQAogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfdW5pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlrdm1wcGNfY29yZV9kZXN0cm95X21tdSh2Y3B1KTsKKwlrdm1wcGNfbW11X2Rlc3Ryb3kodmNwdSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJa3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHZjcHUpOwotCiAJa3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHZjcHUsIGNwdSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQlrdm1wcGNfY29yZV9sb2FkX2hvc3RfZGVidWdzdGF0ZSh2Y3B1KTsKLQotCS8qIERvbid0IGxlYXZlIGd1ZXN0IFRMQiBlbnRyaWVzIHJlc2lkZW50IHdoZW4gYmVpbmcgZGUtc2NoZWR1bGVkLiAqLwotCS8qIFhYWCBJdCB3b3VsZCBiZSBuaWNlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBoZWF2eXdlaWdodCBleGl0IGFuZAotCSAqIHNjaGVkX291dCBoZXJlLCBzaW5jZSB3ZSBjb3VsZCBhdm9pZCB0aGUgVExCIGZsdXNoIGZvciBoZWF2eXdlaWdodAotCSAqIGV4aXRzLiAqLwotCV90bGJpbF9hbGwoKTsKIAlrdm1wcGNfY29yZV92Y3B1X3B1dCh2Y3B1KTsKIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7Ci0JaW50IGk7Ci0KLQl2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkID0gZGJnLT5lbmFibGVkOwotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKSB7Ci0JCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRSh2Y3B1LT5ndWVzdF9kZWJ1Zy5icCk7IGkrKykgewotCQkJaWYgKGRiZy0+YnJlYWtwb2ludHNbaV0uZW5hYmxlZCkKLQkJCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5icFtpXSA9IGRiZy0+YnJlYWtwb2ludHNbaV0uYWRkcmVzczsKLQkJCWVsc2UKLQkJCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5icFtpXSA9IDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHZvaWQga3ZtcHBjX2NvbXBsZXRlX2Rjcl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCAyOGMwNGRhLi44ODJlNDcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC0yMzcsOCArMjM3LDYgQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX2lpY19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KIAlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKQEAgLTI1NCw3ICsyNTIsNyBAQAogCQlnb3RvIG91dF9lb2k7CiAJfQogCi0Ja3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAkvKiBNYXJrIHRoZSBJUlEgY3VycmVudGx5IGluIHByb2dyZXNzLiovCiAJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCA2YTBhZDE5Li5mMDg1MzY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtNTA4LDcgKzUwOCw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmN0eC0+cnEsICZzcHVfcHJpby0+cnVucVtjdHgtPnByaW9dKTsKIAkJc2V0X2JpdChjdHgtPnByaW8sIHNwdV9wcmlvLT5iaXRtYXApOwogCQlpZiAoIXNwdV9wcmlvLT5ucl93YWl0aW5nKyspCi0JCQlfX21vZF90aW1lcigmc3B1c2NoZWRfdGltZXIsIGppZmZpZXMgKyBTUFVTQ0hFRF9USUNLKTsKKwkJCW1vZF90aW1lcigmc3B1c2NoZWRfdGltZXIsIGppZmZpZXMgKyBTUFVTQ0hFRF9USUNLKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCmluZGV4IDkyMGNmN2EuLjc0MGVmNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZwpAQCAtMTI4LDYgKzEyOCwxMyBAQAogCSAgYmUgZGlzYWJsZWQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdXNpbmcgInBzM2ZsYXNoPW9mZiIsIHRvCiAJICBub3QgYWxsb2NhdGUgdGhpcyBmaXhlZCBidWZmZXIuCiAKK2NvbmZpZyBQUzNfVlJBTQorCXRyaXN0YXRlICJQUzMgVmlkZW8gUkFNIFN0b3JhZ2UgRHJpdmVyIgorCWRlcGVuZHMgb24gRkJfUFMzPXkgJiYgQkxPQ0sgJiYgbQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGFsbG93cyB5b3UgdG8gdXNlIGV4Y2VzcyBQUzMgdmlkZW8gUkFNIGFzIHZvbGF0aWxlCisJICBzdG9yYWdlIG9yIHN5c3RlbSBzd2FwLgorCiBjb25maWcgUFMzX0xQTQogCXRyaXN0YXRlICJQUzMgTG9naWNhbCBQZXJmb3JtYW5jZSBNb25pdG9yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUENfUFMzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggNTgzMTFhOC4uYTcwNWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RyaXZlciAqZHJ2OwogCiAJQlVHX09OKCFkZXYpOwotCXByX2RlYnVnKCIgLT4gJXM6JWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIF9kZXYtPmJ1c19pZCk7CisJZGV2X2RiZyhfZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlkcnYgPSBwczNfc3lzdGVtX2J1c19kZXZfdG9fc3lzdGVtX2J1c19kcnYoZGV2KTsKIAlCVUdfT04oIWRydik7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyICpkcnY7CiAKIAlCVUdfT04oIWRldik7Ci0JcHJfZGVidWcoIiAtPiAlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgX2Rldi0+YnVzX2lkKTsKKwlkZXZfZGJnKF9kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWRydiA9IHBzM19zeXN0ZW1fYnVzX2Rldl90b19zeXN0ZW1fYnVzX2RydihkZXYpOwogCUJVR19PTighZHJ2KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IDg0ZTA1OGYuLjgwYjUxMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtMTUzLDkgKzE1MywxMCBAQAogewogCWludCBzZXJ2ZXI7CiAJLyogRm9yIHRoZSBtb21lbnQgb25seSBpbXBsZW1lbnQgZGVsaXZlcnkgdG8gYWxsIGNwdXMgb3Igb25lIGNwdSAqLwotCWNwdW1hc2tfdCBjcHVtYXNrID0gaXJxX2Rlc2NbdmlycV0uYWZmaW5pdHk7CisJY3B1bWFza190IGNwdW1hc2s7CiAJY3B1bWFza190IHRtcCA9IENQVV9NQVNLX05PTkU7CiAKKwljcHVtYXNrX2NvcHkoJmNwdW1hc2ssIGlycV9kZXNjW3ZpcnFdLmFmZmluaXR5KTsKIAlpZiAoIWRpc3RyaWJ1dGVfaXJxcykKIAkJcmV0dXJuIGRlZmF1bHRfc2VydmVyOwogCkBAIC04NjksNyArODcwLDcgQEAKIAkJICAgICAgIHZpcnEsIGNwdSk7CiAKIAkJLyogUmVzZXQgYWZmaW5pdHkgdG8gYWxsIGNwdXMgKi8KLQkJaXJxX2Rlc2NbdmlycV0uYWZmaW5pdHkgPSBDUFVfTUFTS19BTEw7CisJCWNwdW1hc2tfc2V0YWxsKGlycV9kZXNjW3ZpcnFdLmFmZmluaXR5KTsKIAkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KHZpcnEsIGNwdV9hbGxfbWFzayk7CiB1bmxvY2s6CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggYTM1Mjk3ZC4uNTMyZTIwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTU2Niw5ICs1NjYsMTAgQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKIHsKLQljcHVtYXNrX3QgbWFzayA9IGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eTsKKwljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1aWQ7CiAKKwljcHVtYXNrX2NvcHkoJm1hc2ssIGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eSk7CiAJaWYgKGNwdXNfZXF1YWwobWFzaywgQ1BVX01BU0tfQUxMKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDZiMGEzNTMuLjJhOGFmNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0zNDMsMTMgKzM0Myw2IEBACiAKIGNvbW1lbnQgIkkvTyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiIKIAotY29uZmlnIE1BQ0hDSEtfV0FSTklORwotCWJvb2wgIlByb2Nlc3Mgd2FybmluZyBtYWNoaW5lIGNoZWNrcyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciBvbiBJQk0gUy8zOTAgb3IKLQkgIHpTZXJpZXMgdG8gcHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIChlLmcuIG9uIHBvd2VyIGZhaWx1cmVzKS4KLQkgIElmIHVuc3VyZSwgc2F5ICJZIi4KLQogY29uZmlnIFFESU8KIAl0cmlzdGF0ZSAiUURJTyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTUyMSw3ICs1MTQsNyBAQAogCiBjb25maWcgQVBQTERBVEFfTkVUX1NVTQogCXRyaXN0YXRlICJNb25pdG9yIG92ZXJhbGwgbmV0d29yayBzdGF0aXN0aWNzIgotCWRlcGVuZHMgb24gQVBQTERBVEFfQkFTRQorCWRlcGVuZHMgb24gQVBQTERBVEFfQkFTRSAmJiBORVQKIAloZWxwCiAJICBUaGlzIHByb3ZpZGVzIG5ldHdvcmsgcmVsYXRlZCBkYXRhIHRvIHRoZSBMaW51eCAtIFZNIE1vbml0b3IgU3RyZWFtLAogCSAgY3VycmVudGx5IHRoZXJlIGlzIG9ubHkgYSB0b3RhbCBzdW0gb2YgbmV0d29yayBJL08gc3RhdGlzdGljcywgbm8KQEAgLTU1Miw3ICs1NDUsNyBAQAogCSAgYnV0IGlzIGluZGVwZW5kZW50IG9mIGhhcmR3YXJlL21pY3JvY29kZSBzdXBwb3J0LgogCiBjb25maWcgWkZDUERVTVAKLQl0cmlzdGF0ZSAiemZjcGR1bXAgc3VwcG9ydCIKKwlib29sICJ6ZmNwZHVtcCBzdXBwb3J0IgogCXNlbGVjdCBTTVAKIAlkZWZhdWx0IG4KIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IGVjYTcyNGQuLmI0OWMwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC0yMDEsOCArMjAxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcm5nX2V4aXQodm9pZCkKIHsKIAkvKiB3aXBlIG1lICovCi0JbWVtc2V0KHAtPmJ1ZiwgMCwgcHJuZ19jaHVua19zaXplKTsKLQlrZnJlZShwLT5idWYpOworCWt6ZnJlZShwLT5idWYpOwogCWtmcmVlKHApOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZwcm5nX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaAppbmRleCAxY2VhZmE1Li5mNGU5ZGM3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKQEAgLTI5LDcgKzI5LDkgQEAKIAlpbnQgZnVuYzsJCS8qIEtJTUQgZnVuY3Rpb24gdG8gdXNlICovCiB9OwogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Ci12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpOworc3RydWN0IHNoYXNoX2Rlc2M7CisKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBzMzkwX3NoYV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKm91dCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKaW5kZXggYjNjYjVhOC4uZTg1YmEzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCkBAIC0yMywxNyArMjMsMTcgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KIAogI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKICNpbmNsdWRlICJzaGEuaCIKIAotc3RhdGljIHZvaWQgc2hhMV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTFfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTFfSDA7CiAJc2N0eC0+c3RhdGVbMV0gPSBTSEExX0gxOwpAQCAtNDIsMzQgKzQyLDM2IEBACiAJc2N0eC0+c3RhdGVbNF0gPSBTSEExX0g0OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGExIiwKLQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGExX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGExX2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGExIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTEtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaGExX3MzOTBfaW5pdCh2b2lkKQogewogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8xKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGExX3MzOTBfZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoc2hhMV9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCmluZGV4IDE5YzAzZmIuLmY5ZmVmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKQEAgLTE2LDE3ICsxNiwxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGEyNTZfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGEyNTZfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTI1Nl9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTI1Nl9IMTsKQEAgLTM4LDIyICszOCwyNCBAQAogCXNjdHgtPnN0YXRlWzddID0gU0hBMjU2X0g3OwogCXNjdHgtPmNvdW50ID0gMDsKIAlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMjU2OworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTI1NiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEyNTYtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEyNTZfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTI1Nl9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGFsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTI1Nl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGEyNTZfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTI1NiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyNTYtczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgc2hhMjU2X3MzOTBfaW5pdCh2b2lkKQpAQCAtNjEsMTIgKzYzLDEyIEBACiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzI1NikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGEyNTZfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGEyNTZfczM5MF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwppbmRleCAyM2M3ODYxLi44MzE5MmJmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCkBAIC0xMiwxNiArMTIsMTYgQEAKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi1zdGF0aWMgdm9pZCBzaGE1MTJfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGludCBzaGE1MTJfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzBdID0gMHg2YTA5ZTY2N2YzYmNjOTA4VUxMOwogCSooX191NjQgKikmY3R4LT5zdGF0ZVsyXSA9IDB4YmI2N2FlODU4NGNhYTczYlVMTDsKQEAgLTMzLDI5ICszMywzMSBAQAogCSooX191NjQgKikmY3R4LT5zdGF0ZVsxNF0gPSAweDViZTBjZDE5MTM3ZTIxNzlVTEw7CiAJY3R4LT5jb3VudCA9IDA7CiAJY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGE1MTJfYWxnID0gewotCS5jcmFfbmFtZQk9CSJzaGE1MTIiLAotCS5jcmFfZHJpdmVyX25hbWUgPQkic2hhNTEyLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAotCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CT0JTElTVF9IRUFEX0lOSVQoc2hhNTEyX2FsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEE1MTJfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhNTEyX2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgc2hhNTEyX2FsZyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlzaGE1MTJfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTUxMiIsCisJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGE1MTItczM5MCIsCisJCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTUxMl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhNTEyIik7CiAKLXN0YXRpYyB2b2lkIHNoYTM4NF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTM4NF9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweGNiYmI5ZDVkYzEwNTllZDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHg2MjlhMjkyYTM2N2NkNTA3VUxMOwpAQCAtNjcsMjIgKzY5LDI1IEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NDdiNTQ4MWRiZWZhNGZhNFVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTM4NF9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTM4NCIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGEzODQtczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGEzODRfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTM4NF9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGEzODRfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEzODRfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTM4NF9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMzg0IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTM4NC1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMzg0X0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKKwl9CiB9OwogCiBNT0RVTEVfQUxJQVMoInNoYTM4NCIpOwpAQCAtOTMsMTggKzk4LDE4IEBACiAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfNTEyKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZykpIDwgMCkKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZykpIDwgMCkKIAkJZ290byBvdXQ7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKSkgPCAwKQotCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOworCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKSkgPCAwKQorCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMzg0X2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTUxMl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEzODRfYWxnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IDlkNmViOGMuLjc5MDNlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0xMywxNCArMTMsMTQgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSAic2hhLmgiCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogCi12b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK2ludCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXVuc2lnbmVkIGludCBpbmRleDsKIAlpbnQgcmV0OwogCkBAIC01MSwxMyArNTEsMTUgQEAKIHN0b3JlOgogCWlmIChsZW4pCiAJCW1lbWNweShjdHgtPmJ1ZiArIGluZGV4ICwgZGF0YSwgbGVuKTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9zaGFfdXBkYXRlKTsKIAotdm9pZCBzMzkwX3NoYV9maW5hbChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0KQoraW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IGJzaXplID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOwogCXU2NCBiaXRzOwogCXVuc2lnbmVkIGludCBpbmRleCwgZW5kLCBwbGVuOwogCWludCByZXQ7CkBAIC04Nyw5ICs4OSwxMSBAQAogCUJVR19PTihyZXQgIT0gZW5kKTsKIAogCS8qIGNvcHkgZGlnZXN0IHRvIG91dCAqLwotCW1lbWNweShvdXQsIGN0eC0+c3RhdGUsIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoY3J5cHRvX2hhc2hfY2FzdCh0Zm0pKSk7CisJbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUoZGVzYy0+dGZtKSk7CiAJLyogd2lwZSBjb250ZXh0ICovCiAJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mICpjdHgpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV9maW5hbCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA4ZTkyNDNhLi5iMzA2MDZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiB3aXRoIG9wZXJhdGlvbiBvZiB0aGUgZm9ybSAic2V0X2JpdChiaXRuciwgZmxhZ3MpIi4KICAqLwogCi0vKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9TMzkwL2tlcm5lbC9iaXRtYXAuUyAqLworLyogYml0bWFwIHRhYmxlcyBmcm9tIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMgKi8KIGV4dGVybiBjb25zdCBjaGFyIF9vaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF9uaV9iaXRtYXBbXTsKIGV4dGVybiBjb25zdCBjaGFyIF96Yl9maW5kbWFwW107CkBAIC01MjUsMTYgKzUyNSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZ6X3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAweGZmZmZmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDB4ZmZmZikgewogCQl3b3JkID4+PSAxNjsKIAkJbnIgKz0gMTY7CiAJfQotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmKSA9PSAweGZmKSkgeworCWlmICgod29yZCAmIDB4ZmYpID09IDB4ZmYpIHsKIAkJd29yZCA+Pj0gODsKIAkJbnIgKz0gODsKIAl9CkBAIC01NDksMTYgKzU0OSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzX3dvcmQodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyB3b3JkKQogewogI2lmZGVmIF9fczM5MHhfXwotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmZmZmZmKSA9PSAwKSkgeworCWlmICgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMzI7CiAJCW5yICs9IDMyOwogCX0KICNlbmRpZgotCWlmIChsaWtlbHkoKHdvcmQgJiAweGZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMCkgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg1YTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgIERhdGEgZGVmaW5pdGlvbnMgZm9yIGNoYW5uZWwgcmVwb3J0IHByb2Nlc3NpbmcKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaWZuZGVmIF9BU01fUzM5MF9DUldfSAorI2RlZmluZSBfQVNNX1MzOTBfQ1JXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBDaGFubmVsIFJlcG9ydCBXb3JkCisgKi8KK3N0cnVjdCBjcncgeworCV9fdTMyIHJlczEgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCisJX191MzIgc2xjdCA6ICAxOyAgIC8qIHNvbGljaXRlZCAqLworCV9fdTMyIG9mbHcgOiAgMTsgICAvKiBvdmVyZmxvdyAqLworCV9fdTMyIGNobiAgOiAgMTsgICAvKiBjaGFpbmVkICovCisJX191MzIgcnNjICA6ICA0OyAgIC8qIHJlcG9ydGluZyBzb3VyY2UgY29kZSAqLworCV9fdTMyIGFuYyAgOiAgMTsgICAvKiBhbmNpbGxhcnkgcmVwb3J0ICovCisJX191MzIgcmVzMiA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBlcmMgIDogIDY7ICAgLyogZXJyb3ItcmVjb3ZlcnkgY29kZSAqLworCV9fdTMyIHJzaWQgOiAxNjsgICAvKiByZXBvcnRpbmctc291cmNlIElEICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordHlwZWRlZiB2b2lkICgqY3J3X2hhbmRsZXJfdCkoc3RydWN0IGNydyAqLCBzdHJ1Y3QgY3J3ICosIGludCk7CisKK2V4dGVybiBpbnQgY3J3X3JlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKTsKK2V4dGVybiB2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYyk7CitleHRlcm4gdm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpOworCisjZGVmaW5lIE5SX1JTQ1MgMTYKKworI2RlZmluZSBDUldfUlNDX01PTklUT1IgIDB4MiAgLyogbW9uaXRvcmluZyBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX1NDSAkgMHgzICAvKiBzdWJjaGFubmVsICovCisjZGVmaW5lIENSV19SU0NfQ1BBVEgJIDB4NCAgLyogY2hhbm5lbCBwYXRoICovCisjZGVmaW5lIENSV19SU0NfQ09ORklHCSAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DU1MJIDB4QiAgLyogY2hhbm5lbCBzdWJzeXN0ZW0gKi8KKworI2RlZmluZSBDUldfRVJDX0VWRU5UCSAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KKyNkZWZpbmUgQ1JXX0VSQ19BVkFJTAkgMHgwMSAvKiBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ1JXX0VSQ19JTklUCSAweDAyIC8qIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSUk9SCSAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLworI2RlZmluZSBDUldfRVJDX0lQQVJNCSAweDA0IC8qIGluc3RhbGxlZCBwYXJtIGluaXRpYWxpemVkICovCisjZGVmaW5lIENSV19FUkNfVEVSTQkgMHgwNSAvKiB0ZXJtaW5hbCAqLworI2RlZmluZSBDUldfRVJDX1BFUlJOCSAweDA2IC8qIHBlcm0uIGVycm9yLCBmYWMuIG5vdCBpbml0ICovCisjZGVmaW5lIENSV19FUkNfUEVSUkkJIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QTU9ECSAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncpCit7CisJaW50IGNjb2RlOworCisJYXNtIHZvbGF0aWxlKAorCQkiCXN0Y3J3CTAoJTIpXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKKwkJOiAiYSIgKHBjcncpCisJCTogImNjIiApOworCXJldHVybiBjY29kZTsKK30KKworI2VuZGlmIC8qIF9BU01fUzM5MF9DUldfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKaW5kZXggZTJkYjZmMS4uMjE4YmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCkBAIC0xNjIsMTUgKzE2MiwxNSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgZGFzZF9pb19ucl9yZXFbMzJdOyAvKiBoaXN0b2dyYW0gb2YgIyBvZiByZXF1ZXN0cyBpbiBjaGFucSAqLwogfSBkYXNkX3Byb2ZpbGVfaW5mb190OwogCi0vKiAKKy8qCiAgKiBzdHJ1Y3QgZm9ybWF0X2RhdGFfdAogICogcmVwcmVzZW50cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gZm9ybWF0IGEgZGFzZAogICovCiB0eXBlZGVmIHN0cnVjdCBmb3JtYXRfZGF0YV90IHsKLQlpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLwotCWludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLwotCWludCBibGtzaXplOyAgICAvKiBzZWN0b3JzaXplICovCi0gICAgICAgIGludCBpbnRlbnNpdHk7ICAKKwl1bnNpZ25lZCBpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLworCXVuc2lnbmVkIGludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLworCXVuc2lnbmVkIGludCBibGtzaXplOwkgLyogc2VjdG9yc2l6ZSAqLworCXVuc2lnbmVkIGludCBpbnRlbnNpdHk7CiB9IGZvcm1hdF9kYXRhX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCmluZGV4IGU4MmMxMGUuLmFhZTI3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oCkBAIC00NCwyNCArNDQsMTggQEAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpZGFsIHdvcmRzIG5lZWRlZCBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpZGFsX25yX3dvcmRzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotI2lmZGVmIF9fczM5MHhfXwotCWlmIChpZGFsX2lzX25lZWRlZCh2YWRkciwgbGVuZ3RoKSkKLQkJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsgCi0JCQkoSURBX0JMT0NLX1NJWkUtMSkpID4+IElEQV9TSVpFX0xPRzsKLSNlbmRpZgotCXJldHVybiAwOworCXJldHVybiAoKF9fcGEodmFkZHIpICYgKElEQV9CTE9DS19TSVpFLTEpKSArIGxlbmd0aCArCisJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwogfQogCiAvKgogICogQ3JlYXRlIHRoZSBsaXN0IG9mIGlkYWwgd29yZHMgZm9yIGFuIGFkZHJlc3MvbGVuZ3RoIHBhaXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqCi1pZGFsX2NyZWF0ZV93b3Jkcyh1bnNpZ25lZCBsb25nICppZGF3cywgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLAorCQkJCQkgICAgICAgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAl1bnNpZ25lZCBpbnQgY2lkYXc7CiAKQEAgLTc0LDcgKzY4LDYgQEAKIAkJcGFkZHIgKz0gSURBX0JMT0NLX1NJWkU7CiAJCSppZGF3cysrID0gcGFkZHI7CiAJfQotI2VuZGlmCiAJcmV0dXJuIGlkYXdzOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZTFmNTQ2NS4uMGIyZjgyOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtNDIsNCArNDIsMTEgQEAKIAlfX3U2NCBmcHJzWzE2XTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDNjNTVlNDEuLmM2ZTY3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMSw5ICsyMSw2IEBACiAvKiBtZW1vcnkgc2xvdHMgdGhhdCBkb2VzIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fUFJJVkFURV9NRU1fU0xPVFMgNAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLX07Ci0KIHN0cnVjdCBzY2FfZW50cnkgewogCWF0b21pY190IHNjbjsKIAlfX3U2NAlyZXNlcnZlZDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCmluZGV4IGYzNzIwZGUuLmIzNDlmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaApAQCAtMTEsMTI5ICsxMSwxMTggQEAKICNpZm5kZWYgX0FTTV9TMzkwX0xPV0NPUkVfSAogI2RlZmluZSBfQVNNX1MzOTBfTE9XQ09SRV9ICiAKLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIF9fTENfRVhUX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAyMAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDI4Ci0jZGVmaW5lIF9fTENfTUNLX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAzOAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDU4Ci0jZGVmaW5lIF9fTENfU1ZDX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2OAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDcwCi0jZGVmaW5lIF9fTENfSU9fTkVXX1BTVyAgICAgICAgICAgICAgICAgMHgwNzgKLSNlbHNlIC8qICFfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNDAKLSNkZWZpbmUgX19MQ19QR01fT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNTAKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXICAgICAgICAgICAgICAgICAweDAxNzAKLSNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxYzAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZDAKLSNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVyAgICAgICAgICAgICAgICAweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDAxZjAKLSNlbmRpZiAvKiAhX19zMzkweF9fICovCisjZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDAxNAorI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMJCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfQUREUkVTUwkJMHgwMDg0CisjZGVmaW5lIF9fTENfRVhUX0lOVF9DT0RFCQkweDAwODYKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAxNAotI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMgICAgICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwODQKLSNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4NgorI2RlZmluZSBfX0xDX1NWQ19JTEMJCQkweDAwODgKKyNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUJCTB4MDA4YQorI2RlZmluZSBfX0xDX1BHTV9JTEMJCQkweDAwOGMKKyNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUJCTB4MDA4ZQogCi0jZGVmaW5lIF9fTENfU1ZDX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwODgKLSNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUgICAgICAgICAgICAgICAweDA4QQotI2RlZmluZSBfX0xDX1BHTV9JTEMgICAgICAgICAgICAgICAgICAgIDB4MDhDCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFICAgICAgICAgICAgICAgMHgwOEUKKyNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDAwOTYKKyNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwMDk4CisjZGVmaW5lIF9fTENfUEVSX0FDQ0VTU19JRAkJMHgwMGExCisjZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MDBhMwogCi0jZGVmaW5lIF9fTENfUEVSX0FUTUlECQkJMHgwOTYKLSNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDBBMQotI2RlZmluZSBfX0xDX0FSX01PREVfSUQJCQkweDBBMworI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQJCTB4MDBiOAorI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIJCTB4MDBiYQorI2RlZmluZSBfX0xDX0lPX0lOVF9QQVJNCQkweDAwYmMKKyNkZWZpbmUgX19MQ19JT19JTlRfV09SRAkJMHgwMGMwCisjZGVmaW5lIF9fTENfTUNDS19DT0RFCQkJMHgwMGU4CiAKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lEICAgICAgICAgICAgICAweDBCOAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIgICAgICAgICAgICAgIDB4MEJBCi0jZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0gICAgICAgICAgICAgICAgMHgwQkMKLSNkZWZpbmUgX19MQ19JT19JTlRfV09SRCAgICAgICAgICAgICAgICAweDBDMAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERSAgICAgICAgICAgICAgICAgIDB4MEU4Ci0KLSNkZWZpbmUgX19MQ19MQVNUX0JSRUFLIAkJMHgxMTAKLQotI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cgICAgICAgICAgICAgICAgIDB4MjAwCi0KLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEgICAgICAgICAgICAgICAgICAweEMwMAorI2RlZmluZSBfX0xDX0RVTVBfUkVJUEwJCQkweDBlMDAKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIwOAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjQ4Ci0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjU4Ci0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI2OAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4Mjg4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhDNDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhDNDQKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEM0OAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEM0QwotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4QzUwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhDNTQKLSNkZWZpbmUgX19MQ19DUFVJRCAgICAgICAgICAgICAgICAgICAgICAweEM2MAotI2RlZmluZSBfX0xDX0NQVUFERFIgICAgICAgICAgICAgICAgICAgIDB4QzY4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhDN0MKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhDOTAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweEM5OAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4CisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4CisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzMDAKKyNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgwMDgwCisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDAwZDgKKyNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDAwZTAKKyNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDAxMDAKKyNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDAxMDgKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MDEyMAorI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MDE2MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MDE4MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgwMWMwCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19JUkIJCQkweDIxMAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MjUwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MjYwCi0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDI4MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDI4OAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVyAgICAgICAgICAgIDB4MjkwCi0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLICAgICAgICAgICAgICAgMHhENDAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHhENDgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ1MAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEQ1OAotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4RDYwCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhENjgKLSNkZWZpbmUgX19MQ19DUFVJRAkJCTB4RDgwCi0jZGVmaW5lIF9fTENfQ1BVQUREUgkJCTB4RDg4Ci0jZGVmaW5lIF9fTENfSVBMREVWICAgICAgICAgICAgICAgICAgICAgMHhEQjgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHhERDgKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweERFOAotI2RlZmluZSBfX0xDX1ZEU09fUEVSX0NQVQkJMHhFMzgKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQotI2RlZmluZSBfX0xDX1BBU1RFCQkJMHhFNDAKLQotI2RlZmluZSBfX0xDX1BBTklDX01BR0lDCQkweEUwMAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTSAgICAgICAgICAgICAweDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MEQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwRTAKLSNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEwMAotI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDE2MAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTgwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxQzAKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsJCQkweDAxMTAKKyNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVwkJMHgwMTMwCisjZGVmaW5lIF9fTENfU1ZDX09MRF9QU1cJCTB4MDE0MAorI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXCQkweDAxNTAKKyNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVwkJMHgwMTYwCisjZGVmaW5lIF9fTENfSU9fT0xEX1BTVwkJCTB4MDE3MAorI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKKyNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCisjZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAorI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKKyNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCisjZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCisjZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAorI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCisjZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCisjZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAorI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKKyNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4CisjZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKKyNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4CisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKKyNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCisjZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAorI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCisjZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAorI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKKyNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4CisjZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCisjZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAorI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCisjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCisjZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKKyNkZWZpbmUgX19MQ19JUkIJCQkweDAzODAKKyNkZWZpbmUgX19MQ19QQVNURQkJCTB4MDNjMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDExYjgKICNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDEyMDAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBICAgICAgICAgICAweDEyODAKKyNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDEyODAKICNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEzMDAKICNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDEzMTgKLSNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFDCisjZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwogI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MTMyOAorI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4CiAjZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzQwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMzgwCisjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKKyNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMTk4LDIyMiArMTg3LDI0MCBAQAogc3RydWN0IF9sb3djb3JlCiB7CiAjaWZuZGVmIF9fczM5MHhfXwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgwMTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDAyMCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MDI4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgwMzAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDAzOCAqLwotCV9fdTggICAgICAgICBwYWQxWzB4NTgtMHg0MF07ICAgICAgICAgIC8qIDB4MDQwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX25ld19wc3c7ICAgICAgICAgLyogMHgwNTggKi8KLQlwc3dfdCAgICAgICAgc3ZjX25ld19wc3c7ICAgICAgICAgICAgICAvKiAweDA2MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX25ld19wc3c7ICAgICAgICAgIC8qIDB4MDY4ICovCi0JcHN3X3QgICAgICAgIG1jY2tfbmV3X3BzdzsgICAgICAgICAgICAgLyogMHgwNzAgKi8KLQlwc3dfdCAgICAgICAgaW9fbmV3X3BzdzsgICAgICAgICAgICAgICAvKiAweDA3OCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCV9fdTMyICAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191MzIgICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3U4ICAgICAgICAgZXhjX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMCAqLwotCV9fdTggICAgICAgICBwZXJfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGExICovCi0JX191OCAgICAgICAgIHBhZDJbMHhCOC0weEEyXTsgICAgICAgICAgLyogMHgwYTIgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTgJICAgICBwYWQzWzB4YzgtMHhjNF07CSAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyCSAgICAgc3RmbF9mYWNfbGlzdDsJICAgICAgIC8qIDB4MGM4ICovCi0JX191OAkgICAgIHBhZDRbMHhkNC0weGNjXTsJICAgICAgIC8qIDB4MGNjICovCi0JX191MzIgICAgICAgIGV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOyAgLyogMHgwZDQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAvKiAweDBkOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgIC8qIDB4MGUwICovCi0JX191MzIgICAgICAgIG1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07IC8qIDB4MGU4ICovCi0JX191OAkgICAgIHBhZDVbMHhmNC0weGYwXTsJICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlfX3UzMiAgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTgJICAgICBwYWQ2WzB4MTAwLTB4ZmNdOwkgICAgICAgLyogMHgwZmMgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsvKiAweDEwMCAqLwotCV9fdTgJICAgICBwYWQ3WzB4MTIwLTB4MTEwXTsgICAgICAgIC8qIDB4MTEwICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07LyogMHgxMjAgKi8KLQlfX3UzMiAgICAgICAgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOyAvKiAweDE2MCAqLwotCV9fdTMyICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgIC8qIDB4MTgwICovCi0JX191MzIgICAgICAgIGNyZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxYzAgKi8JCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLworCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJZXh0ZXJuYWxfb2xkX3BzdzsJCS8qIDB4MDAxOCAqLworCXBzd190CXN2Y19vbGRfcHN3OwkJCS8qIDB4MDAyMCAqLworCXBzd190CXByb2dyYW1fb2xkX3BzdzsJCS8qIDB4MDAyOCAqLworCXBzd190CW1jY2tfb2xkX3BzdzsJCQkvKiAweDAwMzAgKi8KKwlwc3dfdAlpb19vbGRfcHN3OwkJCS8qIDB4MDAzOCAqLworCV9fdTgJcGFkXzB4MDA0MFsweDAwNTgtMHgwMDQwXTsJLyogMHgwMDQwICovCisJcHN3X3QJZXh0ZXJuYWxfbmV3X3BzdzsJCS8qIDB4MDA1OCAqLworCXBzd190CXN2Y19uZXdfcHN3OwkJCS8qIDB4MDA2MCAqLworCXBzd190CXByb2dyYW1fbmV3X3BzdzsJCS8qIDB4MDA2OCAqLworCXBzd190CW1jY2tfbmV3X3BzdzsJCQkvKiAweDAwNzAgKi8KKwlwc3dfdAlpb19uZXdfcHN3OwkJCS8qIDB4MDA3OCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMgl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwOTAgKi8KKwlfX3UxNgltb25fY2xhc3NfbnVtOwkJCS8qIDB4MDA5NCAqLworCV9fdTE2CXBlcl9wZXJjX2F0bWlkOwkJCS8qIDB4MDA5NiAqLworCV9fdTMyCXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTMyCW1vbml0b3JfY29kZTsJCQkvKiAweDAwOWMgKi8KKwlfX3U4CWV4Y19hY2Nlc3NfaWQ7CQkJLyogMHgwMGEwICovCisJX191OAlwZXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMSAqLworCV9fdTgJcGFkXzB4MDBhMlsweDAwYjgtMHgwMGEyXTsJLyogMHgwMGEyICovCisJX191MTYJc3ViY2hhbm5lbF9pZDsJCQkvKiAweDAwYjggKi8KKwlfX3UxNglzdWJjaGFubmVsX25yOwkJCS8qIDB4MDBiYSAqLworCV9fdTMyCWlvX2ludF9wYXJtOwkJCS8qIDB4MDBiYyAqLworCV9fdTMyCWlvX2ludF93b3JkOwkJCS8qIDB4MDBjMCAqLworCV9fdTgJcGFkXzB4MDBjNFsweDAwYzgtMHgwMGM0XTsJLyogMHgwMGM0ICovCisJX191MzIJc3RmbF9mYWNfbGlzdDsJCQkvKiAweDAwYzggKi8KKwlfX3U4CXBhZF8weDAwY2NbMHgwMGQ0LTB4MDBjY107CS8qIDB4MDBjYyAqLworCV9fdTMyCWV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwkvKiAweDAwZDQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgwMGQ4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MDBlMCAqLworCV9fdTMyCW1jY2tfaW50ZXJydXB0aW9uX2NvZGVbMl07CS8qIDB4MDBlOCAqLworCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCisJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KKwlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KKwlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KKwlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLwogCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMDggKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNjggKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyODggKi8KLQlfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDI5MF07ICAgICAgICAvKiAweDI5MCAqLworCS8qIENQVSByZWdpc3RlciBzYXZlIGFyZWE6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgwMTIwICovCisJX191MzIJZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzhdOwkvKiAweDAxNjAgKi8KKwlfX3UzMglncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDE4MCAqLworCV9fdTMyCWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDAxYzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191MzIgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLQlfX3UzMiAgICAgICAga2VybmVsX3N0YWNrOyAgICAgICAgICAgICAvKiAweGM0MCAqLwotCV9fdTMyICAgICAgICB0aHJlYWRfaW5mbzsgICAgICAgICAgICAgIC8qIDB4YzQ0ICovCi0JX191MzIgICAgICAgIGFzeW5jX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNDggKi8KLQlfX3UzMiAgICAgICAga2VybmVsX2FzY2U7ICAgICAgICAgICAgICAvKiAweGM0YyAqLwotCV9fdTMyICAgICAgICB1c2VyX2FzY2U7ICAgICAgICAgICAgICAgIC8qIDB4YzUwICovCi0JX191MzIgICAgICAgIHBhbmljX3N0YWNrOyAgICAgICAgICAgICAgLyogMHhjNTQgKi8KLQlfX3UzMgkgICAgIHVzZXJfZXhlY19hc2NlOwkgICAgICAgLyogMHhjNTggKi8KLQlfX3U4CSAgICAgcGFkMTBbMHhjNjAtMHhjNWNdOyAgICAgICAvKiAweGM1YyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgc3RhcnQgKi8KLQlzdHJ1Y3QgICAgICAgY3B1aW5mb19TMzkwIGNwdV9kYXRhOyAgICAvKiAweGM2MCAqLwotCV9fdTMyICAgICAgICBpcGxfZGV2aWNlOyAgICAgICAgICAgICAgIC8qIDB4YzdjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiBSZXR1cm4gcHN3cy4gKi8KKwlfX3UzMglzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjQwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjQ4ICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGM4MCAqLwotCV9fdTMyICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4Yzg4ICovCi0JX191MzIgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhjOGMgKi8KLQlfX3UzMiAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhjOTAgKi8KLQlfX3UzMiAgICAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhjOTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGM5OCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTFbMHhlMDAtMHhjYTBdOyAgICAgICAvKiAweGNhMCAqLworCS8qIENQVSB0aW1lIGFjY291bnRpbmcgdmFsdWVzICovCisJX191NjQJc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDI1MCAqLworCV9fdTY0CWFzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjU4ICovCisJX191NjQJZXhpdF90aW1lcjsJCQkvKiAweDAyNjAgKi8KKwlfX3U2NAl1c2VyX3RpbWVyOwkJCS8qIDB4MDI2OCAqLworCV9fdTY0CXN5c3RlbV90aW1lcjsJCQkvKiAweDAyNzAgKi8KKwlfX3U2NAlzdGVhbF90aW1lcjsJCQkvKiAweDAyNzggKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV90aW1lcjsJCS8qIDB4MDI4MCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX2Nsb2NrOwkJLyogMHgwMjg4ICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3UzMgljdXJyZW50X3Rhc2s7CQkJLyogMHgwMjkwICovCisJX191MzIJdGhyZWFkX2luZm87CQkJLyogMHgwMjk0ICovCisJX191MzIJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDI5OCAqLwogCi0gICAgICAgIC8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KLQlfX3U4ICAgICAgICAgcGFkMTJbMHgxMDAwLTB4ZTA0XTsgICAgICAvKiAweGUwNCAqLworCS8qIEludGVycnVwdCBhbmQgcGFuaWMgc3RhY2suICovCisJX191MzIJYXN5bmNfc3RhY2s7CQkJLyogMHgwMjljICovCisJX191MzIJcGFuaWNfc3RhY2s7CQkJLyogMHgwMmEwICovCisKKwkvKiBBZGRyZXNzIHNwYWNlIHBvaW50ZXIuICovCisJX191MzIJa2VybmVsX2FzY2U7CQkJLyogMHgwMmE0ICovCisJX191MzIJdXNlcl9hc2NlOwkJCS8qIDB4MDJhOCAqLworCV9fdTMyCXVzZXJfZXhlY19hc2NlOwkJCS8qIDB4MDJhYyAqLworCisJLyogU01QIGluZm8gYXJlYSAqLworCWNwdWlkX3QJY3B1X2lkOwkJCQkvKiAweDAyYjAgKi8KKwlfX3UzMgljcHVfbnI7CQkJCS8qIDB4MDJiOCAqLworCV9fdTMyCXNvZnRpcnFfcGVuZGluZzsJCS8qIDB4MDJiYyAqLworCV9fdTMyCXBlcmNwdV9vZmZzZXQ7CQkJLyogMHgwMmMwICovCisJX191MzIJZXh0X2NhbGxfZmFzdDsJCQkvKiAweDAyYzQgKi8KKwlfX3U2NAlpbnRfY2xvY2s7CQkJLyogMHgwMmM4ICovCisJX191NjQJY2xvY2tfY29tcGFyYXRvcjsJCS8qIDB4MDJkMCAqLworCV9fdTgJcGFkXzB4MDJkOFsweDAzMDAtMHgwMmQ4XTsJLyogMHgwMmQ4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgKi8KKwlfX3U4CWlyYls2NF07CQkJLyogMHgwMzAwICovCisKKwlfX3U4CXBhZF8weDA0MDBbMHgwZTAwLTB4MDQwMF07CS8qIDB4MDQwMCAqLworCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191MzIJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDQgKi8KKworCS8qIEFsaWduIHRvIHRoZSB0b3AgMWsgb2YgcHJlZml4IGFyZWEgKi8KKwlfX3U4CXBhZF8weDBlMDhbMHgxMDAwLTB4MGUwOF07CS8qIDB4MGUwOCAqLwogI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotICAgICAgICAvKiBwcmVmaXggYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KLQlfX3UzMiAgICAgICAgY2N3MVsyXTsgICAgICAgICAgICAgICAgICAvKiAweDAwMCAqLwotCV9fdTMyICAgICAgICBjY3cyWzRdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDA4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg4MC0weDE4XTsgICAgICAgICAgLyogMHgwMTggKi8KLQlfX3UzMiAgICAgICAgZXh0X3BhcmFtczsgICAgICAgICAgICAgICAvKiAweDA4MCAqLwotCV9fdTE2ICAgICAgICBjcHVfYWRkcjsgICAgICAgICAgICAgICAgIC8qIDB4MDg0ICovCi0JX191MTYgICAgICAgIGV4dF9pbnRfY29kZTsgICAgICAgICAgICAgLyogMHgwODYgKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwODggKi8KLSAgICAgICAgX191MTYgICAgICAgIHN2Y19jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGEgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9pbGM7ICAgICAgICAgICAgICAgICAgLyogMHgwOGMgKi8KLSAgICAgICAgX191MTYgICAgICAgIHBnbV9jb2RlOyAgICAgICAgICAgICAgICAgLyogMHgwOGUgKi8KLQlfX3UzMiAgICAgICAgZGF0YV9leGNfY29kZTsgICAgICAgICAgICAvKiAweDA5MCAqLwotCV9fdTE2ICAgICAgICBtb25fY2xhc3NfbnVtOyAgICAgICAgICAgIC8qIDB4MDk0ICovCi0JX191MTYgICAgICAgIHBlcl9wZXJjX2F0bWlkOyAgICAgICAgICAgLyogMHgwOTYgKi8KLQlhZGRyX3QgICAgICAgcGVyX2FkZHJlc3M7ICAgICAgICAgICAgICAvKiAweDA5OCAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgb3BfYWNjZXNzX2lkOyAgICAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTggICAgICAgICBhcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEzICovCi0JX191OCAgICAgICAgIHBhZDJbMHhBOC0weEE0XTsgICAgICAgICAgLyogMHgwYTQgKi8KLQlhZGRyX3QgICAgICAgdHJhbnNfZXhjX2NvZGU7ICAgICAgICAgICAvKiAweDBBMCAqLwotCWFkZHJfdCAgICAgICBtb25pdG9yX2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDljICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfaWQ7ICAgICAgICAgICAgLyogMHgwYjggKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9ucjsgICAgICAgICAgICAvKiAweDBiYSAqLwotCV9fdTMyICAgICAgICBpb19pbnRfcGFybTsgICAgICAgICAgICAgIC8qIDB4MGJjICovCi0JX191MzIgICAgICAgIGlvX2ludF93b3JkOyAgICAgICAgICAgICAgLyogMHgwYzAgKi8KLQlfX3U4ICAgICAgICAgcGFkM1sweGM4LTB4YzRdOyAgICAgICAgICAvKiAweDBjNCAqLwotCV9fdTMyICAgICAgICBzdGZsX2ZhY19saXN0OyAgICAgICAgICAgIC8qIDB4MGM4ICovCi0JX191OCAgICAgICAgIHBhZDRbMHhlOC0weGNjXTsgICAgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4ICAgICAgICAgcGFkNVsweGY0LTB4ZjBdOyAgICAgICAgICAvKiAweDBmMCAqLwotCV9fdTMyICAgICAgICBleHRlcm5hbF9kYW1hZ2VfY29kZTsgICAgIC8qIDB4MGY0ICovCi0JYWRkcl90ICAgICAgIGZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOyAgLyogMHgwZjggKi8KLQlfX3U4ICAgICAgICAgcGFkNlsweDEyMC0weDEwMF07ICAgICAgICAvKiAweDEwMCAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTIwICovCi0JcHN3X3QgICAgICAgIGV4dGVybmFsX29sZF9wc3c7ICAgICAgICAgLyogMHgxMzAgKi8KLQlwc3dfdCAgICAgICAgc3ZjX29sZF9wc3c7ICAgICAgICAgICAgICAvKiAweDE0MCAqLwotCXBzd190ICAgICAgICBwcm9ncmFtX29sZF9wc3c7ICAgICAgICAgIC8qIDB4MTUwICovCi0JcHN3X3QgICAgICAgIG1jY2tfb2xkX3BzdzsgICAgICAgICAgICAgLyogMHgxNjAgKi8KLQlwc3dfdCAgICAgICAgaW9fb2xkX3BzdzsgICAgICAgICAgICAgICAvKiAweDE3MCAqLwotCV9fdTggICAgICAgICBwYWQ3WzB4MWEwLTB4MTgwXTsgICAgICAgIC8qIDB4MTgwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfcHN3OyAgICAgICAgICAgICAgLyogMHgxYTAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDFiMCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MWMwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgxZDAgKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDFlMCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MWYwICovCi0gICAgICAgIHBzd190ICAgICAgICByZXR1cm5fcHN3OyAgICAgICAgICAgICAgIC8qIDB4MjAwICovCi0JX191OAkgICAgIGlyYls2NF07CQkgICAgICAgLyogMHgyMTAgKi8KLQlfX3U2NCAgICAgICAgc3luY19lbnRlcl90aW1lcjsgICAgICAgICAvKiAweDI1MCAqLwotCV9fdTY0ICAgICAgICBhc3luY19lbnRlcl90aW1lcjsgICAgICAgIC8qIDB4MjU4ICovCi0JX191NjQgICAgICAgIGV4aXRfdGltZXI7ICAgICAgICAgICAgICAgLyogMHgyNjAgKi8KLQlfX3U2NAkgICAgIHVzZXJfdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3lzdGVtX3RpbWVyOwkgICAgICAgLyogMHgyNzAgKi8KLQlfX3U2NAkgICAgIHN0ZWFsX3RpbWVyOwkgICAgICAgLyogMHgyNzggKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX3RpbWVyOyAgICAgICAgLyogMHgyODAgKi8KLQlfX3U2NAkgICAgIGxhc3RfdXBkYXRlX2Nsb2NrOyAgICAgICAgLyogMHgyODggKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9tY2NrX3BzdzsgICAgICAgICAgLyogMHgyOTAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDhbMHhjMDAtMHgyYTBdOyAgICAgICAgLyogMHgyYTAgKi8KLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLwotCV9fdTY0ICAgICAgICBzYXZlX2FyZWFbMTZdOyAgICAgICAgICAgIC8qIDB4YzAwICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQ5WzB4ZDQwLTB4YzgwXTsgICAgICAgIC8qIDB4YzgwICovCi0gCV9fdTY0ICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4ZDQwICovCi0JX191NjQgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhkNDggKi8KLQlfX3U2NCAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ1MCAqLwotCV9fdTY0ICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4ZDU4ICovCi0JX191NjQgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhkNjAgKi8KLQlfX3U2NCAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGQ2OCAqLwotCV9fdTY0CSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGQ3MCAqLwotCV9fdTgJICAgICBwYWQxMFsweGQ4MC0weGQ3OF07ICAgICAgIC8qIDB4ZDc4ICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4ZDgwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhkYjggKi8KLQlfX3UzMiAgICAgICAgcGFkMTE7ICAgICAgICAgICAgICAgICAgICAvKiAweGRiYyAqLwotCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgZW5kICovCisJLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlfX3U4CXBhZF8weDAwMThbMHgwMDgwLTB4MDAxOF07CS8qIDB4MDAxOCAqLworCV9fdTMyCWV4dF9wYXJhbXM7CQkJLyogMHgwMDgwICovCisJX191MTYJY3B1X2FkZHI7CQkJLyogMHgwMDg0ICovCisJX191MTYJZXh0X2ludF9jb2RlOwkJCS8qIDB4MDA4NiAqLworCV9fdTE2CXN2Y19pbGM7CQkJLyogMHgwMDg4ICovCisJX191MTYJc3ZjX2NvZGU7CQkJLyogMHgwMDhhICovCisJX191MTYJcGdtX2lsYzsJCQkvKiAweDAwOGMgKi8KKwlfX3UxNglwZ21fY29kZTsJCQkvKiAweDAwOGUgKi8KKwlfX3UzMglkYXRhX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJYWRkcl90CXBlcl9hZGRyZXNzOwkJCS8qIDB4MDA5OCAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlvcF9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEyICovCisJX191OAlhcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEzICovCisJX191OAlwYWRfMHgwMGE0WzB4MDBhOC0weDAwYTRdOwkvKiAweDAwYTQgKi8KKwlhZGRyX3QJdHJhbnNfZXhjX2NvZGU7CQkJLyogMHgwMGE4ICovCisJYWRkcl90CW1vbml0b3JfY29kZTsJCQkvKiAweDAwYjAgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZTgtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCWFkZHJfdAlmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCisJX191OAlwYWRfMHgwMTAwWzB4MDEyMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMTUwICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDE2MCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMTcwICovCisJX191OAlwYWRfMHgwMTgwWzB4MDFhMC0weDAxODBdOwkvKiAweDAxODAgKi8KKwlwc3dfdAlyZXN0YXJ0X3BzdzsJCQkvKiAweDAxYTAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMWIwICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMWMwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMWQwICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDFlMCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMWYwICovCiAKLSAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLQlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGRjMCAqLwotCV9fdTY0ICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4ZGM4ICovCi0JX191NjQgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhkZDAgKi8KLQlfX3U2NCAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhkZDggKi8KLQlfX3UzMgkgICAgIHNvZnRpcnFfcGVuZGluZzsJICAgICAgIC8qIDB4ZGUwICovCi0JX191MzIJICAgICBwYWRfMHgwZGU0OwkgICAgICAgLyogMHhkZTQgKi8KLQlfX3U2NCAgICAgICAgaW50X2Nsb2NrOyAgICAgICAgICAgICAgICAvKiAweGRlOCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkMTJbMHhlMDAtMHhkZjBdOyAgICAgICAvKiAweGRmMCAqLworCS8qIEVudHJ5L2V4aXQgc2F2ZSBhcmVhICYgcmV0dXJuIHBzd3MuICovCisJX191NjQJc2F2ZV9hcmVhWzE2XTsJCQkvKiAweDAyMDAgKi8KKwlwc3dfdAlyZXR1cm5fcHN3OwkJCS8qIDB4MDI4MCAqLworCXBzd190CXJldHVybl9tY2NrX3BzdzsJCS8qIDB4MDI5MCAqLwogCi0gICAgICAgIC8qIDB4ZTAwIGlzIHVzZWQgYXMgaW5kaWNhdG9yIGZvciBkdW1wIHRvb2xzICovCi0gICAgICAgIC8qIHdoZXRoZXIgdGhlIGtlcm5lbCBkaWVkIHdpdGggcGFuaWMoKSBvciBub3QgKi8KLSAgICAgICAgX191MzIgICAgICAgIHBhbmljX21hZ2ljOyAgICAgICAgICAgICAgLyogMHhlMDAgKi8KKwkvKiBDUFUgYWNjb3VudGluZyBhbmQgdGltaW5nIHZhbHVlcy4gKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMmEwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDJiMCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMmI4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDJjMCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDJjOCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMmQwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyZDggKi8KKworCS8qIEN1cnJlbnQgcHJvY2Vzcy4gKi8KKwlfX3U2NAljdXJyZW50X3Rhc2s7CQkJLyogMHgwMmUwICovCisJX191NjQJdGhyZWFkX2luZm87CQkJLyogMHgwMmU4ICovCisJX191NjQJa2VybmVsX3N0YWNrOwkJCS8qIDB4MDJmMCAqLworCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3U2NAlhc3luY19zdGFjazsJCQkvKiAweDAyZjggKi8KKwlfX3U2NAlwYW5pY19zdGFjazsJCQkvKiAweDAzMDAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3U2NAlrZXJuZWxfYXNjZTsJCQkvKiAweDAzMDggKi8KKwlfX3U2NAl1c2VyX2FzY2U7CQkJLyogMHgwMzEwICovCisJX191NjQJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMzE4ICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDMyMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMzI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMzJjICovCisJX191NjQJcGVyY3B1X29mZnNldDsJCQkvKiAweDAzMzAgKi8KKwlfX3U2NAlleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDMzOCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAzNDAgKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMzQ4ICovCisJX191NjQJdmRzb19wZXJfY3B1X2RhdGE7CQkvKiAweDAzNTAgKi8KKwlfX3U4CXBhZF8weDAzNThbMHgwMzgwLTB4MDM1OF07CS8qIDB4MDM1OCAqLworCisJLyogSW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrLiAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzODAgKi8KIAogCS8qIFBlciBjcHUgcHJpbWFyeSBzcGFjZSBhY2Nlc3MgbGlzdCAqLwotCV9fdTgJICAgICBwYWRfMHhlMDRbMHhlMzgtMHhlMDRdOyAgIC8qIDB4ZTA0ICovCi0JX191NjQJICAgICB2ZHNvX3Blcl9jcHVfZGF0YTsJICAgICAgIC8qIDB4ZTM4ICovCi0JX191MzIJICAgICBwYXN0ZVsxNl07CQkgICAgICAgLyogMHhlNDAgKi8KKwlfX3UzMglwYXN0ZVsxNl07CQkJLyogMHgwM2MwICovCiAKLQlfX3U4CSAgICAgcGFkMTNbMHgxMWI4LTB4ZTgwXTsgICAgICAvKiAweGU4MCAqLworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCiAKLQkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0LCBkaWFnIDI1MCBldGMgICovCi0JX191NjQgICAgICAgIGV4dF9wYXJhbXMyOyAgICAgICAgICAgICAgIC8qIDB4MTFCOCAqLworCS8qCisJICogMHhlMDAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIElQTCBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KKwkgKiBibG9jay4gRHVtcCB0b29scyBuZWVkIElQSUIgZm9yIElQTCBhZnRlciBkdW1wLgorCSAqIE5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIGFueSBmaWVsZHMgaW4gMHgwZTAwLTB4MGYwMAorCSAqLworCV9fdTY0CWlwaWI7CQkJCS8qIDB4MGUwMCAqLworCV9fdTMyCWlwaWJfY2hlY2tzdW07CQkJLyogMHgwZTA4ICovCisJX191OAlwYWRfMHgwZTBjWzB4MTFiOC0weDBlMGNdOwkvKiAweDBlMGMgKi8KIAotCV9fdTggICAgICAgICBwYWQxNFsweDEyMDAtMHgxMUMwXTsgICAgICAvKiAweDExQzAgKi8KKwkvKiA2NCBiaXQgZXh0cGFyYW0gdXNlZCBmb3IgcGZhdWx0L2RpYWcgMjUwOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWV4dF9wYXJhbXMyOwkJCS8qIDB4MTFCOCAqLworCV9fdTgJcGFkXzB4MTFjMFsweDEyMDAtMHgxMUMwXTsJLyogMHgxMUMwICovCiAKLSAgICAgICAgLyogU3lzdGVtIGluZm8gYXJlYSAqLyAKLQotCV9fdTY0ICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOyAvKiAweDEyMDAgKi8KLQlfX3U2NCAgICAgICAgZ3ByZWdzX3NhdmVfYXJlYVsxNl07ICAgICAgLyogMHgxMjgwICovCi0JX191MzIgICAgICAgIHN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07IC8qIDB4MTMwMCAqLwotCV9fdTggICAgICAgICBwYWQxNVsweDEzMTgtMHgxMzEwXTsgICAgICAvKiAweDEzMTAgKi8KLQlfX3UzMiAgICAgICAgcHJlZml4cmVnX3NhdmVfYXJlYTsgICAgICAgLyogMHgxMzE4ICovCi0JX191MzIgICAgICAgIGZwdF9jcmVnX3NhdmVfYXJlYTsgICAgICAgIC8qIDB4MTMxYyAqLwotCV9fdTggICAgICAgICBwYWQxNlsweDEzMjQtMHgxMzIwXTsgICAgICAvKiAweDEzMjAgKi8KLQlfX3UzMiAgICAgICAgdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOyAgICAgLyogMHgxMzI0ICovCi0JX191MzIgICAgICAgIGNwdV90aW1lcl9zYXZlX2FyZWFbMl07ICAgIC8qIDB4MTMyOCAqLwotCV9fdTMyICAgICAgICBjbG9ja19jb21wX3NhdmVfYXJlYVsyXTsgICAvKiAweDEzMzAgKi8KLQlfX3U4ICAgICAgICAgcGFkMTdbMHgxMzQwLTB4MTMzOF07ICAgICAgLyogMHgxMzM4ICovCi0JX191MzIgICAgICAgIGFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07IC8qIDB4MTM0MCAqLyAKLQlfX3U2NCAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAgLyogMHgxMzgwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3U2NAlmbG9hdGluZ19wdF9zYXZlX2FyZWFbMTZdOwkvKiAweDEyMDAgKi8KKwlfX3U2NAlncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTI4MCAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MTMwMCAqLworCV9fdTgJcGFkXzB4MTMxMFsweDEzMTgtMHgxMzEwXTsJLyogMHgxMzEwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxOCAqLworCV9fdTMyCWZwdF9jcmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxYyAqLworCV9fdTgJcGFkXzB4MTMyMFsweDEzMjQtMHgxMzIwXTsJLyogMHgxMzIwICovCisJX191MzIJdG9kX3Byb2dyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzI0ICovCisJX191MzIJY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsJCS8qIDB4MTMyOCAqLworCV9fdTMyCWNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOwkvKiAweDEzMzAgKi8KKwlfX3U4CXBhZF8weDEzMzhbMHgxMzQwLTB4MTMzOF07CS8qIDB4MTMzOCAqLworCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MTM0MCAqLworCV9fdTY0CWNyZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDEzODAgKi8KIAogCS8qIGFsaWduIHRvIHRoZSB0b3Agb2YgdGhlIHByZWZpeCBhcmVhICovCi0KLQlfX3U4ICAgICAgICAgcGFkMThbMHgyMDAwLTB4MTQwMF07ICAgICAgLyogMHgxNDAwICovCisJX191OAlwYWRfMHgxNDAwWzB4MjAwMC0weDE0MDBdOwkvKiAweDE0MDAgKi8KICNlbmRpZiAvKiAhX19zMzkweF9fICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvKiBFbmQgc3RydWN0dXJlKi8KIApAQCAtNDMzLDggKzQ0MCw2IEBACiAJcmV0dXJuIGFkZHJlc3M7CiB9CiAKLSNkZWZpbmUgX19QQU5JQ19NQUdJQyAgICAgICAgICAgMHhERUFEQzBERQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA3ODM5NzY3Li5kYTAxNDMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTIyLDQgKzIyLDkgQEAKICNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwogI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwogCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmIGRlZmluZWQoQ09ORklHXzY0QklUKQoraW50IHMzOTBfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKKyNkZWZpbmUgYXJjaF9tbWFwX2NoZWNrKGFkZHIsbGVuLGZsYWdzKQlzMzkwX21tYXBfY2hlY2soYWRkcixsZW4pCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fUzM5MF9NTUFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAyOGVjODcwLi5mYzdlZGQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtNzQsNyArNzQsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAogCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbmV4dC0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobmV4dCkpOwogCXVwZGF0ZV9tbShuZXh0LCB0c2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiNjA0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ubWkuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogICBNYWNoaW5lIGNoZWNrIGhhbmRsZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfTk1JX0gKKyNkZWZpbmUgX0FTTV9TMzkwX05NSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbWNpIHsKKwlfX3UzMiBzZCA6ICAxOyAvKiAwMCBzeXN0ZW0gZGFtYWdlICovCisJX191MzIgcGQgOiAgMTsgLyogMDEgaW5zdHJ1Y3Rpb24tcHJvY2Vzc2luZyBkYW1hZ2UgKi8KKwlfX3UzMiBzciA6ICAxOyAvKiAwMiBzeXN0ZW0gcmVjb3ZlcnkgKi8KKwlfX3UzMgkgOiAgMTsgLyogMDMgKi8KKwlfX3UzMiBjZCA6ICAxOyAvKiAwNCB0aW1pbmctZmFjaWxpdHkgZGFtYWdlICovCisJX191MzIgZWQgOiAgMTsgLyogMDUgZXh0ZXJuYWwgZGFtYWdlICovCisJX191MzIJIDogIDE7IC8qIDA2ICovCisJX191MzIgZGcgOiAgMTsgLyogMDcgZGVncmFkYXRpb24gKi8KKwlfX3UzMiB3ICA6ICAxOyAvKiAwOCB3YXJuaW5nIHBlbmRpbmcgKi8KKwlfX3UzMiBjcCA6ICAxOyAvKiAwOSBjaGFubmVsLXJlcG9ydCBwZW5kaW5nICovCisJX191MzIgc3AgOiAgMTsgLyogMTAgc2VydmljZS1wcm9jZXNzb3IgZGFtYWdlICovCisJX191MzIgY2sgOiAgMTsgLyogMTEgY2hhbm5lbC1zdWJzeXN0ZW0gZGFtYWdlICovCisJX191MzIJIDogIDI7IC8qIDEyLTEzICovCisJX191MzIgYiAgOiAgMTsgLyogMTQgYmFja2VkIHVwICovCisJX191MzIJIDogIDE7IC8qIDE1ICovCisJX191MzIgc2UgOiAgMTsgLyogMTYgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAqLworCV9fdTMyIHNjIDogIDE7IC8qIDE3IHN0b3JhZ2UgZXJyb3IgY29ycmVjdGVkICovCisJX191MzIga2UgOiAgMTsgLyogMTggc3RvcmFnZS1rZXkgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwlfX3UzMiBkcyA6ICAxOyAvKiAxOSBzdG9yYWdlIGRlZ3JhZGF0aW9uICovCisJX191MzIgd3AgOiAgMTsgLyogMjAgcHN3IG13cCB2YWxpZGl0eSAqLworCV9fdTMyIG1zIDogIDE7IC8qIDIxIHBzdyBtYXNrIGFuZCBrZXkgdmFsaWRpdHkgKi8KKwlfX3UzMiBwbSA6ICAxOyAvKiAyMiBwc3cgcHJvZ3JhbSBtYXNrIGFuZCBjYyB2YWxpZGl0eSAqLworCV9fdTMyIGlhIDogIDE7IC8qIDIzIHBzdyBpbnN0cnVjdGlvbiBhZGRyZXNzIHZhbGlkaXR5ICovCisJX191MzIgZmEgOiAgMTsgLyogMjQgZmFpbGluZyBzdG9yYWdlIGFkZHJlc3MgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAgMTsgLyogMjUgKi8KKwlfX3UzMiBlYyA6ICAxOyAvKiAyNiBleHRlcm5hbCBkYW1hZ2UgY29kZSB2YWxpZGl0eSAqLworCV9fdTMyIGZwIDogIDE7IC8qIDI3IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgZ3IgOiAgMTsgLyogMjggZ2VuZXJhbCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGNyIDogIDE7IC8qIDI5IGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAgMTsgLyogMzAgKi8KKwlfX3UzMiBzdCA6ICAxOyAvKiAzMSBzdG9yYWdlIGxvZ2ljYWwgdmFsaWRpdHkgKi8KKwlfX3UzMiBpZSA6ICAxOyAvKiAzMiBpbmRpcmVjdCBzdG9yYWdlIGVycm9yICovCisJX191MzIgYXIgOiAgMTsgLyogMzMgYWNjZXNzIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgZGEgOiAgMTsgLyogMzQgZGVsYXllZCBhY2Nlc3MgZXhjZXB0aW9uICovCisJX191MzIJIDogIDc7IC8qIDM1LTQxICovCisJX191MzIgcHIgOiAgMTsgLyogNDIgdG9kIHByb2dyYW1tYWJsZSByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGZjIDogIDE7IC8qIDQzIGZwIGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBhcCA6ICAxOyAvKiA0NCBhbmNpbGxhcnkgcmVwb3J0ICovCisJX191MzIJIDogIDE7IC8qIDQ1ICovCisJX191MzIgY3QgOiAgMTsgLyogNDYgY3B1IHRpbWVyIHZhbGlkaXR5ICovCisJX191MzIgY2MgOiAgMTsgLyogNDcgY2xvY2sgY29tcGFyYXRvciB2YWxpZGl0eSAqLworCV9fdTMyCSA6IDE2OyAvKiA0Ny02MyAqLworfTsKKworc3RydWN0IHB0X3JlZ3M7CisKK2V4dGVybiB2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7CitleHRlcm4gdm9pZCBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX0FTTV9TMzkwX05NSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMDY2Yjk5NS4uNjE4NjJiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtNDIsMjYgKzQyLDEyIEBACiAJYXNtIHZvbGF0aWxlKCJzdGlkcCAwKCUxKSIgOiAiPW0iICgqcHRyKSA6ICJhIiAocHRyKSk7CiB9CiAKLXN0cnVjdCBjcHVpbmZvX1MzOTAKLXsKLSAgICAgICAgY3B1aWRfdCAgY3B1X2lkOwotICAgICAgICBfX3UxNiAgICBjcHVfYWRkcjsKLSAgICAgICAgX191MTYgICAgY3B1X25yOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwotI2lmZGVmIF9fczM5MHhfXwotICAgICAgICB1bnNpZ25lZCBsb25nICpwbWRfcXVpY2s7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnB0ZV9xdWljazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OwotfTsKLQogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqKTsKIAogLyoKLSAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IgZm9yIDMxIGJpdCwgNFRCIGZvciA2NCBiaXQuCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMkdCIGZvciAzMSBiaXQsIDRUQiBvciA4UFQgZm9yIDY0IGJpdC4KICAqLwogI2lmbmRlZiBfX3MzOTB4X18KIApAQCAtNzAsOCArNTYsNyBAQAogCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAotI2RlZmluZSBUQVNLX1NJWkVfT0YodHNrKQkodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLFRJRl8zMUJJVCkgPyBcCi0JCQkJCSgxVUwgPDwgMzEpIDogKDFVTCA8PCA1MykpCisjZGVmaW5lIFRBU0tfU0laRV9PRih0c2spCSgodHNrKS0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCkKICNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCkgPyBcCiAJCQkJCSgxVUwgPDwgMzApIDogKDFVTCA8PCA0MSkpCiAjZGVmaW5lIFRBU0tfU0laRQkJVEFTS19TSVpFX09GKGN1cnJlbnQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggODkyMDAyNS4uZjFiMDUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTcyLDYgKzE3Miw4IEBACiAjZGVmaW5lIE5VTV9DUlMJCTE2CiAjZGVmaW5lIE5VTV9BQ1JTCTE2CiAKKyNkZWZpbmUgTlVNX0NSX1dPUkRTCTMKKwogI2RlZmluZSBGUFJfU0laRQk4CiAjZGVmaW5lIEZQQ19TSVpFCTQKICNkZWZpbmUgRlBDX1BBRF9TSVpFCTQgLyogZ2NjIGluc2lzdHMgb24gYWxpZ25pbmcgdGhlIGZwcmVncyAqLwpAQCAtMzM0LDcgKzMzNiw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0JdW5zaWduZWQgbG9uZyBjclszXTsKKwl1bnNpZ25lZCBsb25nIGNyW05VTV9DUl9XT1JEU107CiB9IHBlcl9jcl93b3JkczsKIAogI2RlZmluZSBQRVJfRU1fTUFTSyAweEU4MDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDI3ZmMxNzQuLjQwMmQ2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMzE0LDYgKzMxNCw3IEBACiAJCQkgICAgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBxZGlvIGVycm9ycyByZXBvcnRlZCB0byB0aGUgdXBwZXItbGF5ZXIgcHJvZ3JhbSAqLworI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfVEFSR0VUCQkJMHgwMgogI2RlZmluZSBRRElPX0VSUk9SX1NJR0FfQUNDRVNTX0VYQ0VQVElPTgkweDEwCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9CVVNZCQkJMHgyMAogI2RlZmluZSBRRElPX0VSUk9SX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTgkweDQwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMDI0YjkxZS4uMjAwOTE1OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNTAsMTIgKzUwLDcgQEAKICAKICNkZWZpbmUgUFJPQ19DSEFOR0VfUEVOQUxUWQkyMAkJLyogU2NoZWR1bGUgcGVuYWx0eSAqLwogCi0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfbnIpCi0KLXN0YXRpYyBpbmxpbmUgX191MTYgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JcmV0dXJuIHN0YXAoKTsKLX0KKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9ucikKIAogLyoKICAqIHJldHVybnMgMSBpZiBjcHUgaXMgaW4gc3RvcHBlZC9jaGVjayBzdG9wcGVkIHN0YXRlIG9yIG5vdCBvcGVyYXRpb25hbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGM3ODZhYjYuLjAyMzMwYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYyLDQgKzYyLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggZDA3NDY3My4uY2QwMjQxZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IDA7CiAJY2hhciAqcmV0ID0gZHN0OwogCkBAIC0xMDksMTAgKzExMCwxNCBAQAogCQk6ICIrJmEiIChkc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRzdCwgc3JjKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHIwIGFzbSgiMCIpID0gMDsKIAljb25zdCBjaGFyICp0bXAgPSBzOwogCkBAIC0xMjEsNiArMTI2LDkgQEAKIAkJIglqbwkwYiIKIAkJOiAiK2QiIChyMCksICIrYSIgKHRtcCkgOiAgOiAiY2MiKTsKIAlyZXR1cm4gcjAgLSAodW5zaWduZWQgbG9uZykgczsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJsZW4ocyk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pCkBAIC0xMzUsNyArMTQzLDEzIEBACiAJCTogIithIiAoZW5kKSwgIithIiAodG1wKSA6ICJkIiAocjApICA6ICJjYyIpOwogCXJldHVybiBlbmQgLSBzOwogfQotCisjZWxzZSAvKiBJTl9BUkNIX1NUUklOR19DICovCit2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqIHMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1zY2FuKHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CitjaGFyICpzdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworY2hhciAqc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcyk7CitzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IG4pOwogI2VuZGlmIC8qICFJTl9BUkNIX1NUUklOR19DICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaAppbmRleCBhZDkzMjEyLi45ZDcwMDU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQljaGFyIHJlc2VydmVkXzFbMjRdOwogCiAJfSB2bVs4XTsKKwljaGFyIHJlc2VydmVkXzU0NFszNTUyXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGQ2MDM5NGIuLjMwNGNmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC01MSw3ICs1MSw3IEBACiAJICogSWYgdGhlIHByb2Nlc3Mgb25seSByYW4gb24gdGhlIGxvY2FsIGNwdSwgZG8gYSBsb2NhbCBmbHVzaC4KIAkgKi8KIAlsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKQorCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCAmbG9jYWxfY3B1bWFzaykpCiAJCV9fdGxiX2ZsdXNoX2xvY2FsKCk7CiAJZWxzZQogCQlfX3RsYl9mbHVzaF9nbG9iYWwoKTsKQEAgLTczLDcgKzczLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2ZsdXNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKIHsKLQlpZiAodW5saWtlbHkoY3B1c19lbXB0eShtbS0+Y3B1X3ZtX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShtbV9jcHVtYXNrKG1tKSkpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBJZiB0aGUgbWFjaGluZSBoYXMgSURURSB3ZSBwcmVmZXIgdG8gZG8gYSBwZXIgbW0gZmx1c2gKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYzkzZWI1MC4uNWUwYWQ2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTUsNyArNSw2IEBACiAKICNkZWZpbmUgbWNfY2FwYWJsZSgpCSgxKQogCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAodW5zaWduZWQgaW50IGNwdSk7CiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKHVuc2lnbmVkIGludCBjcHUpOwogCiBleHRlcm4gY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKQEAgLTMwLDYgKzI5LDggQEAKIH07CiAjZW5kaWYKIAorI2RlZmluZSBTRF9NQ19JTklUIFNEX0NQVV9JTklUCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCiAjZW5kaWYgLyogX0FTTV9TMzkwX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCmluZGV4IDNhNTI2N2QuLjg0MDZhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaApAQCAtMzksNyArMzksNyBAQAogCV9fdTE2IGRheTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwKIHsKIAljaGFyIHZvbGtleVs0XTsJCS8qIHZvbHVtZSBrZXkgPSB2b2x1bWUgbGFiZWwgKi8KIAljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLwpAQCAtNTYsNiArNTYsMTQgQEAKIAljaGFyIHJlczNbMjldOwkJLyogcmVzZXJ2ZWQgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIHsKKwljaGFyIHZvbGxibFs0XTsJCS8qIHZvbHVtZSBsYWJlbCAqLworCWNoYXIgdm9saWRbNl07CQkvKiB2b2x1bWUgaWRlbnRpZmllciAqLworCWNoYXIgcmVzM1s2OV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgbGRsX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyLCB2YWxpZCBmb3IgbGRsIGZvcm1hdCAqLworCV9fdTY0IGZvcm1hdHRlZF9ibG9ja3M7IC8qIHZhbGlkIHdoZW4gbGRsX3ZlcnNpb24gPj0gZjIgICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHZ0b2NfZXh0ZW50CiB7CiAJX191OCB0eXBlaW5kOwkJCS8qIGV4dGVudCB0eXBlIGluZGljYXRvciAqLwpAQCAtMTQwLDcgKzE0OCwxMSBAQAogCWNoYXIgcmVzMlsxMF07CQkvKiByZXNlcnZlZCAqLwogCV9fdTggRFM0RUZMVkw7CQkvKiBleHRlbmRlZCBmcmVlLXNwYWNlIG1hbmFnZW1lbnQgbGV2ZWwgKi8KIAlzdHJ1Y3QgdnRvY19jY2hoYiBEUzRFRlBUUjsgLyogcG9pbnRlciB0byBleHRlbmRlZCBmcmVlLXNwYWNlIGluZm8gKi8KLQljaGFyIHJlczNbOV07CQkvKiByZXNlcnZlZCAqLworCWNoYXIgcmVzMzsJCS8qIHJlc2VydmVkICovCisJX191MzIgRFM0RENZTDsJCS8qIG51bWJlciBvZiBsb2dpY2FsIGN5bHMgKi8KKwljaGFyIHJlczRbMl07CQkvKiByZXNlcnZlZCAqLworCV9fdTggRFM0REVWRjI7CQkvKiBkZXZpY2UgZmxhZ3MgKi8KKwljaGFyIHJlczU7CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB2dG9jX2RzNWV4dApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggM2VkYzZjNi4uMjI4ZTMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCkBAIC0xNywxMCArMTcsMTIgQEAKICMKIENGTEFHU19wdHJhY2UubwkJKz0gLURVVFNfTUFDSElORT0nIiQoVVRTX01BQ0hJTkUpIicKIAorQ0ZMQUdTX3N5c2luZm8ubyArPSAtSWluY2x1ZGUvbWF0aC1lbXUgLUlhcmNoL3MzOTAvbWF0aC1lbXUgLXcKKwogb2JqLXkJOj0gIGJpdG1hcC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBiYXNlLm8gZWFybHkubyBzZXR1cC5vIFwKIAkgICAgcHJvY2Vzc29yLm8gc3lzX3MzOTAubyBwdHJhY2UubyBzaWduYWwubyBjcGNtZC5vIGViY2RpYy5vIFwKIAkgICAgczM5MF9leHQubyBkZWJ1Zy5vIGlycS5vIGlwbC5vIGRpcy5vIGRpYWcubyBtZW1fZGV0ZWN0Lm8gXAotCSAgICB2ZHNvLm8gdnRpbWUubworCSAgICB2ZHNvLm8gdnRpbWUubyBzeXNpbmZvLm8gbm1pLm8KIAogb2JqLXkJKz0gJChpZiAkKENPTkZJR182NEJJVCksZW50cnk2NC5vLGVudHJ5Lm8pCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMgYi9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmI0MWY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKLSAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCi0gKiAgICBTZWUgaW5jbHVkZS9hc20tczM5MC97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICovCi0KLSAgICAgICAgIC5nbG9ibCBfb2lfYml0bWFwCi1fb2lfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MAotCi0gICAgICAgICAuZ2xvYmwgX25pX2JpdG1hcAotX25pX2JpdG1hcDoKLSAgICAgICAgIC5ieXRlICAweEZFLDB4RkQsMHhGQiwweEY3LDB4RUYsMHhERiwweEJGLDB4N0YKLQotICAgICAgICAgLmdsb2JsIF96Yl9maW5kbWFwCi1femJfZmluZG1hcDoKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQgCi0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDcKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOAotCi0gICAgICAgICAuZ2xvYmwgX3NiX2ZpbmRtYXAKLV9zYl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDgsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNDc1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICAgIEJpdG1hcHMgZm9yIHNldF9iaXQsIGNsZWFyX2JpdCwgdGVzdF9hbmRfc2V0X2JpdCwgLi4uCisgKiAgICBTZWUgaW5jbHVkZS9hc20ve2JpdG9wcy5ofHBvc2l4X3R5cGVzLmh9IGZvciBkZXRhaWxzCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2NvbnN0IGNoYXIgX29pX2JpdG1hcFtdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwIH07CitFWFBPUlRfU1lNQk9MKF9vaV9iaXRtYXApOworCitjb25zdCBjaGFyIF9uaV9iaXRtYXBbXSA9IHsgMHhmZSwgMHhmZCwgMHhmYiwgMHhmNywgMHhlZiwgMHhkZiwgMHhiZiwgMHg3ZiB9OworRVhQT1JUX1NZTUJPTChfbmlfYml0bWFwKTsKKworY29uc3QgY2hhciBfemJfZmluZG1hcFtdID0geworCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDggfTsKK0VYUE9SVF9TWU1CT0woX3piX2ZpbmRtYXApOworCitjb25zdCBjaGFyIF9zYl9maW5kbWFwW10gPSB7CisJOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTcsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCB9OworRVhQT1JUX1NZTUJPTChfc2JfZmluZG1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCmluZGV4IGEyYmUzYTkuLjEyM2RkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oCkBAIC0xLDEwICsxLDExIEBACiAjaWZuZGVmIF9QVFJBQ0UzMl9ICiAjZGVmaW5lIF9QVFJBQ0UzMl9ICiAKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+ICAgIC8qIG5lZWRlZCBmb3IgTlVNX0NSX1dPUkRTICovCiAjaW5jbHVkZSAiY29tcGF0X2xpbnV4LmgiICAvKiBuZWVkZWQgZm9yIHBzd19jb21wYXRfdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JX191MzIgY3JbM107CisJX191MzIgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzMzI7CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA2MmM3MDZlLi44N2NmNWE3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC0yNTIsNyArMjUyLDcgQEAKIHN5czMyX3VzdGF0X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgZGV2X3QKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgdXN0YXQgKgotCWpnCXN5c191c3RhdAorCWpnCWNvbXBhdF9zeXNfdXN0YXQKIAogCS5nbG9ibAlzeXMzMl9kdXAyX3dyYXBwZXIKIHN5czMyX2R1cDJfd3JhcHBlcjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwppbmRleCBiYTAzZmMwLi5iZThiY2VhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCkBAIC02MDMsNyArNjAzLDcgQEAKIHN0YXRpYyBpbnQKIGRlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGkgPSAwLCByYyA9IDA7CisJaW50IGksIHJjID0gMDsKIAlmaWxlX3ByaXZhdGVfaW5mb190ICpwX2luZm87CiAJZGVidWdfaW5mb190ICpkZWJ1Z19pbmZvLCAqZGVidWdfaW5mb19zbmFwc2hvdDsKIApAQCAtNjQyLDggKzY0Miw3IEBACiAJcF9pbmZvID0ga21hbGxvYyhzaXplb2YoZmlsZV9wcml2YXRlX2luZm9fdCksCiAJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZighcF9pbmZvKXsKLQkJaWYoZGVidWdfaW5mb19zbmFwc2hvdCkKLQkJCWRlYnVnX2luZm9fZnJlZShkZWJ1Z19pbmZvX3NuYXBzaG90KTsKKwkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY5OCw4ICs2OTcsNyBAQAogCWlmICgodWlkICE9IDApIHx8IChnaWQgIT0gMCkpCiAJCXByX3dhcm5pbmcoIlJvb3QgYmVjb21lcyB0aGUgb3duZXIgb2YgYWxsIHMzOTBkYmYgZmlsZXMgIgogCQkJICAgImluIHN5c2ZzXG4iKTsKLQlpZiAoIWluaXRpYWxpemVkKQotCQlCVUcoKTsKKwlCVUdfT04oIWluaXRpYWxpemVkKTsKIAltdXRleF9sb2NrKCZkZWJ1Z19tdXRleCk7CiAKICAgICAgICAgLyogY3JlYXRlIG5ldyBkZWJ1Z19pbmZvICovCkBAIC0xMTU2LDcgKzExNTQsNiBAQAogCWVsc2UgewogCQlkZWJ1Z2ZzX3JlbW92ZShpZC0+ZGVidWdmc19lbnRyaWVzW2ldKTsKIAkJaWQtPnZpZXdzW2ldID0gTlVMTDsKLQkJcmMgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZC0+bG9jaywgZmxhZ3MpOwogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IDJhMmNhMjYuLjRkMjIxYzggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTYsNiArNiw3IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKQEAgLTE3MywxOSArMTc1LDIxIEBACiAJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfREVGQVVMVF9LRVkpOwogfQogCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB2bW1zIF9fYWxpZ25lZChQQUdFX1NJWkUpOworCiBzdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8gPSAmUzM5MF9sb3djb3JlLmNwdV9kYXRhOworCS8qIE5vIFZNIGluZm9ybWF0aW9uPyBMb29rcyBsaWtlIExQQVIgKi8KKwlpZiAoc3RzaSgmdm1tcywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkJcmV0dXJuOworCWlmICghdm1tcy5jb3VudCkKKwkJcmV0dXJuOwogCi0JZ2V0X2NwdV9pZCgmUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCk7Ci0KLQkvKiBSdW5uaW5nIHVuZGVyIHovVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZmKQotCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNID8gKi8KLQlpZiAoY3B1aW5mby0+Y3B1X2lkLnZlcnNpb24gPT0gMHhmZSkKKwkvKiBSdW5uaW5nIHVuZGVyIEtWTT8gSWYgbm90IHdlIGFzc3VtZSB6L1ZNICovCisJaWYgKCFtZW1jbXAodm1tcy52bVswXS5jcGksICJceGQyXHhlNVx4ZDQiLCAzKSkKIAkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfS1ZNOworCWVsc2UKKwkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfVk07CiB9CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wZ21fY2hlY2tfaGFuZGxlcih2b2lkKQpAQCAtMzQ4LDcgKzM1Miw2IEBACiAKIAkvKiBjb3B5IGFyY2ggY29tbWFuZCBsaW5lICovCiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKLQlib290X2NvbW1hbmRfbGluZVtBUkNIX0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAwOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggZWM3ZTM1Zi4uMTA0NmMyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQ2OSw2ICs0NjksOCBAQAogCS5vcmcJMHgxMDAwMAogc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcwOgorCXhjCTB4MjAwKDI1NiksMHgyMDAJIyBwYXJ0aWFsbHkgY2xlYXIgbG93Y29yZQorCXhjCTB4MzAwKDI1NiksMHgzMDAKIAogI2lmbmRlZiBDT05GSUdfTUFSQ0hfRzUKIAkjIGNoZWNrIHByb2Nlc3NvciB2ZXJzaW9uIGFnYWluc3QgTUFSQ0hfe0c1LFo5MDAsWjk5MCxaOV8xMDksWjEwfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggZGI0NzZkMS4uMmNlZDg0NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0yMCw3ICsyMCw2IEBACiAJbGN0bAklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKSAjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSAjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFLVBBUk1BUkVBKCVyMTIpCiAjCiAjIFNldHVwIHN0YWNrCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCBmOWY3MGFhLi42NTY2N2IyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKQEAgLTg2LDcgKzg2LDYgQEAKIAlsY3RsZwklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKQkjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsZwklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykJIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCiAJCQkJCSMgbW92ZSBJUEwgZGV2aWNlIHRvIGxvd2NvcmUKLQltdmMJX19MQ19JUExERVYoNCksSVBMX0RFVklDRSs0LVBBUk1BUkVBKCVyMTIpCiAJbGdoaQklcjAsX19MQ19QQVNURQogCXN0ZwklcjAsX19MQ19WRFNPX1BFUl9DUFUKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDJkY2Y1OTBmLi42ZjM3MTFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL3Jlc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KIAogI2RlZmluZSBJUExfUEFSTV9CTE9DS19WRVJTSU9OIDAKIApAQCAtNTYsMTMgKzU2LDE0IEBACiB9OwogCiAvKgotICogRml2ZSBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKKyAqIFRoZSBmb2xsb3dpbmcgc2h1dGRvd24gYWN0aW9uIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgKi8KICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0lQTF9TVFIJCSJpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9SRUlQTF9TVFIJInJlaXBsIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fRFVNUF9TVFIJImR1bXAiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9WTUNNRF9TVFIJInZtY21kIgogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fU1RPUF9TVFIJInN0b3AiCisjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUgkiZHVtcF9yZWlwbCIKIAogc3RydWN0IHNodXRkb3duX2FjdGlvbiB7CiAJY2hhciAqbmFtZTsKQEAgLTE0Niw2ICsxNDcsNyBAQAogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19mY3A7CiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2NjdzsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfbnNzOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19hY3R1YWw7CiAKIHN0YXRpYyBpbnQgZHVtcF9jYXBhYmlsaXRpZXMgPSBEVU1QX1RZUEVfTk9ORTsKIHN0YXRpYyBlbnVtIGR1bXBfdHlwZSBkdW1wX3R5cGUgPSBEVU1QX1RZUEVfTk9ORTsKQEAgLTgzNSw2ICs4MzcsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0NDV19DSU87CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2NjdzsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1A6CiAJCWlmIChkaWFnMzA4X3NldF93b3JrcykKQEAgLTg0Myw2ICs4NDYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19WTTsKIAkJZWxzZQogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9ST19ESUFHOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19mY3A7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfRkNQX0RVTVA6CiAJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9GQ1BfRFVNUDsKQEAgLTg1Miw2ICs4NTYsNyBAQAogCQkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX05TU19ESUFHOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTOworCQlyZWlwbF9ibG9ja19hY3R1YWwgPSByZWlwbF9ibG9ja19uc3M7CiAJCWJyZWFrOwogCWNhc2UgSVBMX1RZUEVfVU5LTk9XTjoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0RFRkFVTFQ7CkBAIC05NjAsNyArOTY1LDYgQEAKIAkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgUkVJUExfTUVUSE9EX0ZDUF9EVU1QOgotCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwpAQCAtMTA2OSwxMCArMTA3MywxMiBAQAogewogCWludCByYzsKIAotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9GQ1ApKQotCQlyZXR1cm4gMDsKLQlpZiAoKCFkaWFnMzA4X3NldF93b3JrcykgJiYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKSkKLQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpIHsKKwkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKQorCQkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlyZWlwbF9ibG9ja19mY3AgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWlwbF9ibG9ja19mY3ApCkBAIC0xMjUzLDcgKzEyNTksNiBAQAogCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgRFVNUF9NRVRIT0RfTk9ORToKLQlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQogCXByaW50ayhLRVJOX0VNRVJHICJEdW1wIGZhaWxlZCFcbiIpOwpAQCAtMTMzMiw2ICsxMzM3LDQ5IEBACiAJLmluaXQJPSBkdW1wX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCBkdW1wX3JlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKgorCSAqIEJ5cGFzcyBkeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gKERBVCkgd2hlbiBzdG9yaW5nIElQTCBwYXJhbWV0ZXIKKwkgKiBpbmZvcm1hdGlvbiBibG9jayBhZGRyZXNzIGFuZCBjaGVja3N1bSBpbnRvIHRoZSBwcmVmaXggYXJlYQorCSAqIChjb3JyZXNwb25kaW5nIHRvIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEpLgorCSAqIFdoZW4gZW5oYW5jZWQgREFUIGFwcGxpZXMgYW5kIHRoZSBTVEUgZm9ybWF0IGNvbnRyb2wgaW4gb25lLAorCSAqIHRoZSBhYnNvbHV0ZSBhZGRyZXNzIGlzIGZvcm1lZCB3aXRob3V0IHByZWZpeGluZy4gSW4gdGhpcyBjYXNlIGEKKwkgKiBub3JtYWwgc3RvcmUgKHN0Zy9zdCkgaW50byB0aGUgcHJlZml4IGFyZWEgd291bGQgbm8gbW9yZSBtYXRjaCB0bworCSAqIGFic29sdXRlIGFkZHJlc3NlcyAwLTgxOTEuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJYXNtIHZvbGF0aWxlKCJzdHVyZyAlMCwlMSIKKwkJOjogImEiICgodW5zaWduZWQgbG9uZykgcmVpcGxfYmxvY2tfYWN0dWFsKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYikpOworI2Vsc2UKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZW5kaWYKKwlhc20gdm9sYXRpbGUoInN0dXJhICUwLCUxIgorCQk6OiAiYSIgKGNzdW1fcGFydGlhbChyZWlwbF9ibG9ja19hY3R1YWwsCisJCQkJICAgICByZWlwbF9ibG9ja19hY3R1YWwtPmhkci5sZW4sIDApKSwKKwkJImEiICgmbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXS0+aXBpYl9jaGVja3N1bSkpOworCXByZWVtcHRfZW5hYmxlKCk7CisJZHVtcF9ydW4odHJpZ2dlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR1bXBfcmVpcGxfaW5pdCh2b2lkKQoreworCWlmICghZGlhZzMwOF9zZXRfd29ya3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiBfX3JlZmRhdGEgZHVtcF9yZWlwbF9hY3Rpb24gPSB7CisJLm5hbWUJPSBTSFVURE9XTl9BQ1RJT05fRFVNUF9SRUlQTF9TVFIsCisJLmZuCT0gZHVtcF9yZWlwbF9ydW4sCisJLmluaXQJPSBkdW1wX3JlaXBsX2luaXQsCit9OworCiAvKgogICogdm1jbWQgc2h1dGRvd24gYWN0aW9uOiBUcmlnZ2VyIHZtIGNvbW1hbmQgb24gc2h1dGRvd24uCiAgKi8KQEAgLTE0MjEsNyArMTQ2OSw4IEBACiAvKiBhY3Rpb24gbGlzdCAqLwogCiBzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiAqc2h1dGRvd25fYWN0aW9uc19saXN0W10gPSB7Ci0JJmlwbF9hY3Rpb24sICZyZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwgJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKKwkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfcmVpcGxfYWN0aW9uLCAmZHVtcF9hY3Rpb24sCisJJnZtY21kX2FjdGlvbiwgJnN0b3BfYWN0aW9ufTsKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OU19DT1VOVCAoc2l6ZW9mKHNodXRkb3duX2FjdGlvbnNfbGlzdCkgLyBzaXplb2Yodm9pZCAqKSkKIAogLyoKQEAgLTE0MzQsMTEgKzE0ODMsMTEgQEAKIAkJICAgICAgIHNpemVfdCBsZW4pCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgU0hVVERPV05fQUNUSU9OU19DT1VOVDsgaSsrKSB7CiAJCWlmICghc2h1dGRvd25fYWN0aW9uc19saXN0W2ldKQogCQkJY29udGludWU7Ci0JCWlmIChzdHJuY21wKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lLAotCQkJICAgIHN0cmxlbihzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUpKSA9PSAwKSB7CisJCWlmIChzeXNmc19zdHJlcShidWYsIHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpIHsKIAkJCXRyaWdnZXItPmFjdGlvbiA9IHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXTsKIAkJCXJldHVybiBsZW47CiAJCX0KQEAgLTE2NzIsNyArMTcyMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb25fcGFuaWNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBvbl9wYW5pY19ub3RpZnksCi0JLnByaW9yaXR5ID0gMCwKKwkucHJpb3JpdHkgPSBJTlRfTUlOLAogfTsKIAogdm9pZCBfX2luaXQgc2V0dXBfaXBsKHZvaWQpCkBAIC0xNjk2LDcgKzE3NDUsNiBAQAogCQkJc2l6ZW9mKGlwbF9pbmZvLmRhdGEubnNzLm5hbWUpKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgotCWRlZmF1bHQ6CiAJCS8qIFdlIGhhdmUgbm8gaW5mbyB0byBjb3B5ICovCiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCmluZGV4IDM5N2QxMzEuLjgwNjQxMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUwpAQCAtNSw2ICs1LDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCiAjaWZuZGVmIENPTkZJR182NEJJVAogLmdsb2JsIF9tY291bnQKIF9tY291bnQ6CkBAIC0xNCw3ICsxNiw3IEBACiAJYWhpCSVyMTUsLTk2CiAJbAklcjMsMTAwKCVyMTUpCiAJbGEJJXIyLDAoJXIxNCkKLQlzdAklcjEsMCglcjE1KQorCXN0CSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQogCWxhCSVyMywwKCVyMykKIAlicmFzCSVyMTQsMGYKIAkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KQEAgLTM4LDcgKzQwLDcgQEAKIAlzdGcJJXIxNCwxMTIoJXIxNSkKIAlsZ3IJJXIxLCVyMTUKIAlhZ2hpCSVyMTUsLTE2MAotCXN0ZwklcjEsMCglcjE1KQorCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAlsZ3IJJXIyLCVyMTQKIAlsZwklcjMsMTY4KCVyMTUpCiAJbGFybAklcjE0LGZ0cmFjZV90cmFjZV9mdW5jdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNTliNGU3OS4uZWVkNGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC0zMTAsMTUgKzMxMCwyMCBAQAogCQkJaW5mby0+cGx0X2luaXRpYWxpemVkID0gMTsKIAkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2IHx8Ci0JCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGMzIKLQkJICAgIHx8IHJfdHlwZSA9PSBSXzM5MF9QTFRPRkY2NAotCQkJKQorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyIHx8CisJCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQpCiAJCQl2YWwgPSBtZS0+YXJjaC5wbHRfb2Zmc2V0IC0gbWUtPmFyY2guZ290X29mZnNldCArCiAJCQkJaW5mby0+cGx0X29mZnNldCArIHJlbGEtPnJfYWRkZW5kOwotCQllbHNlCi0JCQl2YWwgPSAgKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKwotCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKyBpbmZvLT5wbHRfb2Zmc2V0ICsgCi0JCQkJcmVsYS0+cl9hZGRlbmQgLSBsb2M7CisJCWVsc2UgeworCQkJaWYgKCEoKHJfdHlwZSA9PSBSXzM5MF9QTFQxNkRCTCAmJgorCQkJICAgICAgIHZhbCAtIGxvYyArIDB4ZmZmZlVMIDwgMHgxZmZmZmVVTCkgfHwKKwkJCSAgICAgIChyX3R5cGUgPT0gUl8zOTBfUExUMzJEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZmZmZmVUxMIDwgMHgxZmZmZmZmZmVVTEwpKSkKKwkJCQl2YWwgPSAoRWxmX0FkZHIpIG1lLT5tb2R1bGVfY29yZSArCisJCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKworCQkJCQlpbmZvLT5wbHRfb2Zmc2V0OworCQkJdmFsICs9IHJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQl9CiAJCWlmIChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwpCiAJCQkqKHVuc2lnbmVkIHNob3J0ICopIGxvYyA9IHZhbCA+PiAxOwogCQllbHNlIGlmIChyX3R5cGUgPT0gUl8zOTBfUExUT0ZGMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKcmVuYW1lIHRvIGFyY2gvczM5MC9rZXJuZWwvbm1pLmMKaW5kZXggOTJiMDQxNy4uNGJmZGM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwpAQCAtMSwxMzcgKzEsMjMgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKLSAqICAgUy8zOTAgbWFjaGluZSBjaGVjayBoYW5kbGVyCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlcgogICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA4Ci0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqCQkgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQotICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxhc20vZXRyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vY2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9ldHIuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSAiczM5MG1hY2guaCIKLQotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbV9zZW07Ci0KLXN0YXRpYyBOT1JFVF9UWVBFIHZvaWQKLXMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNtcF9zZW5kX3N0b3AoKTsKLSNlbmRpZgotCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZm9yKDs7KTsKLX0KLQotc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOwotCi0vKioKLSAqIHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCi0gKgotICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotaW50IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjbXB4Y2hnKCZjcndfaGFuZGxlcnNbcnNjXSwgTlVMTCwgaGFuZGxlcikpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLS8qKgotICogczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSB1bnJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKi8KLXZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpCi17Ci0JaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQotCQlyZXR1cm47Ci0JeGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwpOwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci19Ci0KLS8qCi0gKiBSZXRyaWV2ZSBDUldzIGFuZCBjYWxsIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudC4KLSAqLwotc3RhdGljIGludCBzMzkwX2NvbGxlY3RfY3J3X2luZm8odm9pZCAqcGFyYW0pCi17Ci0Jc3RydWN0IGNydyBjcndbMl07Ci0JaW50IGNjb2RlOwotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKLQl1bnNpZ25lZCBpbnQgY2hhaW47Ci0JaW50IGlnbm9yZTsKLQotCXNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopcGFyYW07Ci1yZXBlYXQ6Ci0JaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JY2hhaW4gPSAwOwotCXdoaWxlICgxKSB7Ci0JCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7Ci0JCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKLQkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKLQkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKLQkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAotCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCi0JCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCi0JCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOwotCQkJaWYgKGNjb2RlICE9IDApCi0JCQkJYnJlYWs7Ci0JCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOwotCQlpZiAoY2NvZGUgIT0gMCkKLQkJCWJyZWFrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCi0JCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAotCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7Ci0JCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCi0JCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKLQkJCWludCBpOwotCi0JCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKLQkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQotCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7Ci0JCQl9Ci0JCQljaGFpbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKLQkJCWNoYWluKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3X2hhbmRsZXJzW2Nyd1tjaGFpbl0ucnNjXSkKLQkJCWNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10oJmNyd1swXSwKLQkJCQkJCSAgICAgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwKLQkJCQkJCSAgICAgMCk7Ci0JCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KLQkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7Ci0JfQotCWdvdG8gcmVwZWF0OwotCXJldHVybiAwOwotfQorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKIHN0cnVjdCBtY2NrX3N0cnVjdCB7CiAJaW50IGtpbGxfdGFzazsKQEAgLTE0MiwxMiArMjgsMTggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2NrX3N0cnVjdCwgY3B1X21jY2spOwogCitzdGF0aWMgTk9SRVRfVFlQRSB2b2lkIHMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCit7CisJc21wX3NlbmRfc3RvcCgpOworCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJd2hpbGUgKDEpOworfQorCiAvKgogICogTWFpbiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCiAgKiBvciBkaXNhYmxlZCBhbmQgbWFjaGluZSBjaGVja3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAqLwotdm9pZAotczM5MF9oYW5kbGVfbWNjayh2b2lkKQordm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWNja19zdHJ1Y3QgbWNjazsKQEAgLTE2NiwyOSArNTgsMjQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAobWNjay5jaGFubmVsX3JlcG9ydCkKLQkJdXAoJm1fc2VtKTsKLQotI2lmZGVmIENPTkZJR19NQUNIQ0hLX1dBUk5JTkcKLS8qCi0gKiBUaGUgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KLSAqIChhY3R1YWxseSB0aWxsIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQgb2ZmLCBvciB1bnRpbCB0aGUgcHJvYmxlbSBpcyBnb25lKQotICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBwcmV2ZW50IGNvbnRpbnVvdXNseQotICogYmVpbmcgaW50ZXJydXB0ZWQuICBPbmUgY2F2ZWF0IGlzIGhvd2V2ZXIsIHRoYXQgd2UgbXVzdCBkbyB0aGlzIHBlcgotICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCi0gKiBPbiBWTSB3ZSBvbmx5IGdldCBvbmUgaW50ZXJydXB0IHBlciB2aXJ0YWxseSBwcmVzZW50ZWQgbWFjaGluZWNoZWNrLgotICogVGhvdWdoIG9uZSBzdWZmaWNlcywgd2UgbWF5IGdldCBvbmUgaW50ZXJydXB0IHBlciAodmlydHVhbCkgcHJvY2Vzc29yLgotICovCisJCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwkvKgorCSAqIEEgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KKwkgKiAoYWN0dWFsbHkgdW50aWwgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBvZmYsIG9yIHRoZSBwcm9ibGVtIGlzIGdvbmUpCisJICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBhdm9pZCBjb250aW51b3VzbHkKKwkgKiBiZWluZyBpbnRlcnJ1cHRlZC4gIE9uZSBjYXZlYXQgaXMgaG93ZXZlciwgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgcGVyCisJICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCisJICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KKwkgKiBUaG91Z2ggb25lIHN1ZmZpY2VzLCB3ZSBtYXkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyICh2aXJ0dWFsKSBjcHUuCisJICovCiAJaWYgKG1jY2sud2FybmluZykgewkvKiBXQVJOSU5HIHBlbmRpbmcgPyAqLwogCQlzdGF0aWMgaW50IG1jaGNoa193bmdfcG9zdGVkID0gMDsKLQkJLyoKLQkJICogVXNlIHNpbmdsZSBtYWNoaW5lIGNsZWFyLCBhcyB3ZSBjYW5ub3QgaGFuZGxlIHNtcCByaWdodCBub3cKLQkJICovCisKKwkJLyogVXNlIHNpbmdsZSBjcHUgY2xlYXIsIGFzIHdlIGNhbm5vdCBoYW5kbGUgc21wIGhlcmUuICovCiAJCV9fY3RsX2NsZWFyX2JpdCgxNCwgMjQpOwkvKiBEaXNhYmxlIFdBUk5JTkcgTUNIICovCiAJCWlmICh4Y2hnKCZtY2hjaGtfd25nX3Bvc3RlZCwgMSkgPT0gMCkKIAkJCWtpbGxfY2FkX3BpZChTSUdQV1IsIDEpOwogCX0KLSNlbmRpZgotCiAJaWYgKG1jY2sua2lsbF90YXNrKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IFRlcm1pbmF0aW5nIHRhc2sgYmVjYXVzZSBvZiBtYWNoaW5lICIKQEAgLTIwNCw4ICs5MSw3IEBACiAgKiByZXR1cm5zIDAgaWYgYWxsIHJlZ2lzdGVycyBjb3VsZCBiZSB2YWxpZGF0ZWQKICAqIHJldHVybnMgMSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludAotczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCitzdGF0aWMgaW50IG5vdHJhY2UgczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCiB7CiAJaW50IGtpbGxfdGFzazsKIAl1NjQgdG1wY2xvY2s7CkBAIC0yMTQsMjIgKzEwMCwyMSBAQAogCiAJa2lsbF90YXNrID0gMDsKIAl6ZXJvID0gMDsKLQkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmdyKQorCisJaWYgKCFtY2ktPmdyKSB7CiAJCS8qCiAJCSAqIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgY291bGRuJ3QgYmUgcmVzdG9yZWQgYW5kIGhhdmUKIAkJICogdW5rbm93biBjb250ZW50cy4gUHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgogCQkgKi8KIAkJa2lsbF90YXNrID0gMTsKLQotCS8qIFJldmFsaWRhdGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmZwKQorCX0KKwlpZiAoIW1jaS0+ZnApIHsKIAkJLyoKIAkJICogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGNhbid0IGJlIHJlc3RvcmVkIGFuZAogCQkgKiB0aGVyZWZvcmUgdGhlIHByb2Nlc3MgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KIAkJICovCiAJCWtpbGxfdGFzayA9IDE7Ci0KKwl9CiAjaWZuZGVmIENPTkZJR182NEJJVAogCWFzbSB2b2xhdGlsZSgKIAkJIglsZAkwLDAoJTApXG4iCkBAIC0yNDUsOSArMTMwLDggQEAKIAkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mcHRfY3JlZ19zYXZlX2FyZWE7CiAjZWxzZQogCQlmcHRfc2F2ZV9hcmVhID0gKHZvaWQgKikgUzM5MF9sb3djb3JlLmV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwotCQlmcHRfY3JlZ19zYXZlX2FyZWEgPSBmcHRfc2F2ZV9hcmVhKzEyODsKKwkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSArIDEyODsKICNlbmRpZgotCQkvKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyICovCiAJCWlmICghbWNpLT5mYykgewogCQkJLyoKIAkJCSAqIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgY2FuJ3QgYmUgcmVzdG9yZWQuCkBAIC0yNzgsMjYgKzE2MiwyNSBAQAogCQkJIglsZAkxNSwxMjAoJTApXG4iCiAJCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CiAJfQotCiAJLyogUmV2YWxpZGF0ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJYXNtIHZvbGF0aWxlKAogCQkiCWxhbQkwLDE1LDAoJTApIgogCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOwotCWlmICghbWNpLT5hcikKKwlpZiAoIW1jaS0+YXIpIHsKIAkJLyoKIAkJICogQWNjZXNzIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCiAJCSAqIFRlcm1pbmF0aW5nIHRhc2suCiAJCSAqLwogCQlraWxsX3Rhc2sgPSAxOwotCisJfQogCS8qIFJldmFsaWRhdGUgY29udHJvbCByZWdpc3RlcnMgKi8KLQlpZiAoIW1jaS0+Y3IpCisJaWYgKCFtY2ktPmNyKSB7CiAJCS8qCiAJCSAqIENvbnRyb2wgcmVnaXN0ZXJzIGhhdmUgdW5rbm93biBjb250ZW50cy4KIAkJICogQ2FuJ3QgcmVjb3ZlciBhbmQgdGhlcmVmb3JlIHN0b3BwaW5nIG1hY2hpbmUuCiAJCSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoImludmFsaWQgY29udHJvbCByZWdpc3RlcnMuIik7Ci0JZWxzZQorCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHXzY0QklUCiAJCWFzbSB2b2xhdGlsZSgKIAkJCSIJbGN0bGcJMCwxNSwwKCUwKSIKQEAgLTMwNywxMiArMTkwLDExIEBACiAJCQkiCWxjdGwJMCwxNSwwKCUwKSIKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CiAjZW5kaWYKLQorCX0KIAkvKgogCSAqIFdlIGRvbid0IGV2ZW4gdHJ5IHRvIHJldmFsaWRhdGUgdGhlIFRPRCByZWdpc3Rlciwgc2luY2Ugd2Ugc2ltcGx5CiAJICogY2FuJ3Qgd3JpdGUgc29tZXRoaW5nIHNlbnNpYmxlIGludG8gdGhhdCByZWdpc3Rlci4KIAkgKi8KLQogI2lmZGVmIENPTkZJR182NEJJVAogCS8qCiAJICogU2VlIGlmIHdlIGNhbiByZXZhbGlkYXRlIHRoZSBUT0QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHdpdGggaXRzCkBAIC0zMzAsNyArMjEyLDYgQEAKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUudG9kX3Byb2dyZWdfc2F2ZV9hcmVhKQogCQkJOiAiMCIsICJjYyIpOwogI2VuZGlmCi0KIAkvKiBSZXZhbGlkYXRlIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJc3RjawkwKCUxKVxuIgpAQCAtMzU0LDMyICsyMzUsMzUgQEAKICNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQogI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCiAKKyNkZWZpbmUgRURfU1RQX0lTTEFORAk2CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgaXNsYW5kIGNoZWNrICovCisjZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCisjZGVmaW5lIEVEX0VUUl9TWU5DCTEyCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1dJVENICTEzCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3dpdGNoIHRvIGxvY2FsICovCisKIC8qCiAgKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCiAgKi8KLXZvaWQKLXMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90cmFjZSBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RhdGljIGludCBpcGRfY291bnQ7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhpcGRfbG9jayk7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2lwZDsKLQlzdGF0aWMgaW50IGlwZF9jb3VudDsKKwlzdHJ1Y3QgbWNja19zdHJ1Y3QgKm1jY2s7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAlzdHJ1Y3QgbWNpICptY2k7Ci0Jc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOwogCWludCB1bW9kZTsKIAogCWxvY2tkZXBfb2ZmKCk7Ci0KIAlzMzkwX2lkbGVfY2hlY2soKTsKIAogCW1jaSA9IChzdHJ1Y3QgbWNpICopICZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKIAltY2NrID0gJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spOwogCXVtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKG1jaS0+c2QpCisJaWYgKG1jaS0+c2QpIHsKIAkJLyogU3lzdGVtIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3lzdGVtIGRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOwotCisJfQogCWlmIChtY2ktPnBkKSB7CiAJCWlmIChtY2ktPmIpIHsKIAkJCS8qIFByb2Nlc3NpbmcgYmFja3VwIC0+IHZlcmlmeSBpZiB3ZSBjYW4gc3Vydml2ZSB0aGlzICovCkBAIC00MDksMjQgKzI5MywxNyBAQAogCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0CiAJCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgogCQkJICovCi0KIAkJCXNwaW5fbG9jaygmaXBkX2xvY2spOwotCiAJCQl0bXAgPSBnZXRfY2xvY2soKTsKLQogCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKIAkJCQlpcGRfY291bnQrKzsKIAkJCWVsc2UKIAkJCQlpcGRfY291bnQgPSAxOwotCiAJCQlsYXN0X2lwZCA9IHRtcDsKLQogCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQogCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7Ci0KIAkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIGluc3RydWN0aW9uIHByb2Nlc3NpbmcgIgogCQkJCQkgICAiZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7CkBAIC00NDEsMjAgKzMxOCwxOCBAQAogCQkJbWNjay0+a2lsbF90YXNrID0gMTsKIAkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKIAkJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KIAkJCSAqIGtlcm5lbCBtb2RlIC0+IHN0b3BwaW5nIG1hY2hpbmUuCiAJCQkgKi8KIAkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidW5hYmxlIHRvIHJldmFsaWRhdGUgcmVnaXN0ZXJzLiIpOworCQl9CiAJfQotCiAJaWYgKG1jaS0+Y2QpIHsKIAkJLyogVGltaW5nIGZhY2lsaXR5IGRhbWFnZSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoIlRPRCBjbG9jayBkYW1hZ2VkIik7CiAJfQotCiAJaWYgKG1jaS0+ZWQgJiYgbWNpLT5lYykgewogCQkvKiBFeHRlcm5hbCBkYW1hZ2UgKi8KIAkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9FVFJfU1lOQykpCkBAIC00NjYsMjggKzM0MSwyMyBAQAogCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX1NUUF9JU0xBTkQpKQogCQkJc3RwX2lzbGFuZF9jaGVjaygpOwogCX0KLQogCWlmIChtY2ktPnNlKQogCQkvKiBTdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5rZSkKIAkJLyogU3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgKi8KIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGtleS1lcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5kcyAmJiBtY2ktPmZhKQogCQkvKiBTdG9yYWdlIGRlZ3JhZGF0aW9uICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBkZWdyYWRhdGlvbiBtYWNoaW5lICIKIAkJCQkgICAiY2hlY2suIik7Ci0KIAlpZiAobWNpLT5jcCkgewogCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KIAkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOwogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CiAJfQotCiAJaWYgKG1jaS0+dykgewogCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KIAkJbWNjay0+d2FybmluZyA9IDE7CkBAIC00OTYsNDMgKzM2NiwxMSBAQAogCWxvY2tkZXBfb24oKTsKIH0KIAotLyoKLSAqIHMzOTBfaW5pdF9tYWNoaW5lX2NoZWNrCi0gKgotICogaW5pdGlhbGl6ZSBtYWNoaW5lIGNoZWNrIGhhbmRsaW5nCi0gKi8KLXN0YXRpYyBpbnQKLW1hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWFjaGluZV9jaGVja19pbml0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJm1fc2VtKTsKIAljdGxfc2V0X2JpdCgxNCwgMjUpOwkvKiBlbmFibGUgZXh0ZXJuYWwgZGFtYWdlIE1DSCAqLwotCWN0bF9zZXRfYml0KDE0LCAyNyk7ICAgIC8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCi0jaWZkZWYgQ09ORklHX01BQ0hDSEtfV0FSTklORworCWN0bF9zZXRfYml0KDE0LCAyNyk7CS8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCiAJY3RsX3NldF9iaXQoMTQsIDI0KTsJLyogZW5hYmxlIHdhcm5pbmcgTUNIICovCi0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciByZWFsbHkgZWFybHkgdG8gYmUgYWJsZSB0bwotICogY2F0Y2ggYWxsIG1hY2hpbmUgY2hlY2tzIHRoYXQgaGFwcGVuIGR1cmluZyBib290Ci0gKi8KIGFyY2hfaW5pdGNhbGwobWFjaGluZV9jaGVja19pbml0KTsKLQotLyoKLSAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCi0gKiBhZnRlciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQKLSAqLwotc3RhdGljIGludCBfX2luaXQKLW1hY2hpbmVfY2hlY2tfY3J3X2luaXQgKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCi0JdGFzayA9IGt0aHJlYWRfcnVuKHMzOTBfY29sbGVjdF9jcndfaW5mbywgJm1fc2VtLCAia21jaGVjayIpOwotCWlmIChJU19FUlIodGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHRhc2spOwotCWN0bF9zZXRfYml0KDE0LCAyOCk7CS8qIGVuYWJsZSBjaGFubmVsIHJlcG9ydCBNQ0ggKi8KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsIChtYWNoaW5lX2NoZWNrX2Nyd19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWNkMzhhOS4uYjQ4ZTk2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsMTggKzEsMTAgQEAKIC8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuCiAgKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAotICoKLSAqICBEZXJpdmVkIGZyb20gImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgotICogICAgQ29weXJpZ2h0IChDKSAxOTk1LCBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDA5CisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTQ3LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBhc20gKCJyZXRfZnJvbV9mb3JrIik7CkBAIC03Niw3ICs2OSw2IEBACiAJcmV0dXJuIHNmLT5ncHJzWzhdOwogfQogCi1leHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwogLyoKICAqIFRoZSBpZGxlIGxvb3Agb24gYSBTMzkwLi4uCiAgKi8KQEAgLTE0OSw2ICsxNDEsNyBAQAogCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwKIAkJICAgICAgIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKIC8qCiAgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgpAQCAtMTY4LDM0ICsxNjEsMzUgQEAKIH0KIAogaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAotCXVuc2lnbmVkIGxvbmcgdW51c2VkLAotICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCisJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAorCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAgICAgICBzdHJ1Y3QgZmFrZV9mcmFtZQotICAgICAgICAgIHsKLQkgICAgc3RydWN0IHN0YWNrX2ZyYW1lIHNmOwotICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOwotICAgICAgICAgIH0gKmZyYW1lOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJc3RydWN0IGZha2VfZnJhbWUKKwl7CisJCXN0cnVjdCBzdGFja19mcmFtZSBzZjsKKwkJc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOworCX0gKmZyYW1lOwogCi0gICAgICAgIGZyYW1lID0gY29udGFpbmVyX29mKHRhc2tfcHRfcmVncyhwKSwgc3RydWN0IGZha2VfZnJhbWUsIGNoaWxkcmVncyk7Ci0gICAgICAgIHAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJZnJhbWUgPSBjb250YWluZXJfb2YodGFza19wdF9yZWdzKHApLCBzdHJ1Y3QgZmFrZV9mcmFtZSwgY2hpbGRyZWdzKTsKKwlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCS8qIFN0b3JlIGFjY2VzcyByZWdpc3RlcnMgdG8ga2VybmVsIHN0YWNrIG9mIG5ldyBwcm9jZXNzLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzID0gKnJlZ3M7CisJZnJhbWUtPmNoaWxkcmVncyA9ICpyZWdzOwogCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1syXSA9IDA7CS8qIGNoaWxkIHJldHVybnMgMCBvbiBmb3JrLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMTVdID0gbmV3X3N0YWNrcDsKLSAgICAgICAgZnJhbWUtPnNmLmJhY2tfY2hhaW4gPSAwOworCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1sxNV0gPSBuZXdfc3RhY2twOworCWZyYW1lLT5zZi5iYWNrX2NoYWluID0gMDsKIAotICAgICAgICAvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KLSAgICAgICAgZnJhbWUtPnNmLmdwcnNbOF0gPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKKwkvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KKwlmcmFtZS0+c2YuZ3Byc1s4XSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0gICAgICAgIC8qIGZha2UgcmV0dXJuIHN0YWNrIGZvciByZXN1bWUoKSwgZG9uJ3QgZ28gYmFjayB0byBzY2hlZHVsZSAqLwotICAgICAgICBmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKKwkvKiBmYWtlIHJldHVybiBzdGFjayBmb3IgcmVzdW1lKCksIGRvbid0IGdvIGJhY2sgdG8gc2NoZWR1bGUgKi8KKwlmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAogCS8qIFNhdmUgYWNjZXNzIHJlZ2lzdGVycyB0byBuZXcgdGhyZWFkIHN0cnVjdHVyZS4gKi8KIAlzYXZlX2FjY2Vzc19yZWdzKCZwLT50aHJlYWQuYWNyc1swXSk7CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGNoaWxkLgogCSAqLwpAQCAtMjIwLDEwICsyMTQsMTMgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAkvKiBzdGFydCBuZXcgcHJvY2VzcyB3aXRoIGFyNCBwb2ludGluZyB0byB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlICovCiAJcC0+dGhyZWFkLm1tX3NlZ21lbnQgPSBnZXRfZnMoKTsKLSAgICAgICAgLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KLSAgICAgICAgbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sMCxzaXplb2YocC0+dGhyZWFkLnBlcl9pbmZvKSk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisJLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KKwltZW1zZXQoJnAtPnRocmVhZC5wZXJfaW5mbywgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfaW5mbykpOworCS8qIEluaXRpYWxpemUgcGVyIHRocmVhZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXIgdmFsdWVzICovCisJdGkgPSB0YXNrX3RocmVhZF9pbmZvKHApOworCXRpLT51c2VyX3RpbWVyID0gMDsKKwl0aS0+c3lzdGVtX3RpbWVyID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogU1lTQ0FMTF9ERUZJTkUwKGZvcmspCkBAIC0zMTEsNyArMzA4LDcgQEAKIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGR1bXAuCiAJICovCkBAIC0zMjIsNiArMzE5LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC0zNDYsNCArMzQ0LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgyYzE4NzIuLjgwMmM4YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMTgsMTAgKzE4LDExIEBACiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIAotdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbykKK3ZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHZvaWQpCiB7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0YXJ0ZWQsIGFkZHJlc3MgJWQsIGlkZW50aWZpY2F0aW9uICUwNlhcbiIsCi0JCWNwdWluZm8tPmNwdV9uciwgY3B1aW5mby0+Y3B1X2FkZHIsIGNwdWluZm8tPmNwdV9pZC5pZGVudCk7CisJCVMzOTBfbG93Y29yZS5jcHVfbnIsIFMzOTBfbG93Y29yZS5jcHVfYWRkciwKKwkJUzM5MF9sb3djb3JlLmNwdV9pZC5pZGVudCk7CiB9CiAKIC8qCkBAIC0zMCw0OCArMzEsNDYgQEAKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOF0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IgorCQkiZWRhdCIsICJldGYzZWgiCiAJfTsKLSAgICAgICBzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKLSAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjOworCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKKwlpbnQgaTsKIAotICAgICAgIHMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKLSAgICAgICBwcmVlbXB0X2Rpc2FibGUoKTsKLSAgICAgICBpZiAoIW4pIHsKLQkgICAgICAgc2VxX3ByaW50ZihtLCAidmVuZG9yX2lkICAgICAgIDogSUJNL1MzOTBcbiIKLQkJCSAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCi0JCQkgICJib2dvbWlwcyBwZXIgY3B1OiAlbHUuJTAybHVcbiIsCi0JCQkgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCi0JCQkgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOwotCSAgICAgICBzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7Ci0JICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCSAgICAgICBpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKLQkJCSAgICAgICBzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwotCSAgICAgICBzZXFfcHV0cyhtLCAiXG4iKTsKLSAgICAgICB9CisJczM5MF9hZGp1c3RfamlmZmllcygpOworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICghbikgeworCQlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JfaWQgICAgICAgOiBJQk0vUzM5MFxuIgorCQkJICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCisJCQkgICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLAorCQkJICAgbnVtX29ubGluZV9jcHVzKCksIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJCSAgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOworCQlzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKKwkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOworCQlzZXFfcHV0cyhtLCAiXG4iKTsKKwl9CiAKLSAgICAgICBpZiAoY3B1X29ubGluZShuKSkgeworCWlmIChjcHVfb25saW5lKG4pKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCSAgICAgICBpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IG4pCi0JCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKLQkgICAgICAgZWxzZQotCQkgICAgICAgY3B1aW5mbyA9ICZsb3djb3JlX3B0cltuXS0+Y3B1X2RhdGE7CisJCWxjID0gKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBuKSA/CisJCQkmUzM5MF9sb3djb3JlIDogbG93Y29yZV9wdHJbbl07CiAjZWxzZQotCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKKwkJbGMgPSAmUzM5MF9sb3djb3JlOwogI2VuZGlmCi0JICAgICAgIHNlcV9wcmludGYobSwgInByb2Nlc3NvciAlbGk6ICIKLQkJCSAgInZlcnNpb24gPSAlMDJYLCAgIgotCQkJICAiaWRlbnRpZmljYXRpb24gPSAlMDZYLCAgIgotCQkJICAibWFjaGluZSA9ICUwNFhcbiIsCi0JCQkgIG4sIGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uLAotCQkJICBjcHVpbmZvLT5jcHVfaWQuaWRlbnQsCi0JCQkgIGNwdWluZm8tPmNwdV9pZC5tYWNoaW5lKTsKLSAgICAgICB9Ci0gICAgICAgcHJlZW1wdF9lbmFibGUoKTsKLSAgICAgICByZXR1cm4gMDsKKwkJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yICVsaTogIgorCQkJICAgInZlcnNpb24gPSAlMDJYLCAgIgorCQkJICAgImlkZW50aWZpY2F0aW9uID0gJTA2WCwgICIKKwkJCSAgICJtYWNoaW5lID0gJTA0WFxuIiwKKwkJCSAgIG4sIGxjLT5jcHVfaWQudmVyc2lvbiwKKwkJCSAgIGxjLT5jcHVfaWQuaWRlbnQsCisJCQkgICBsYy0+Y3B1X2lkLm1hY2hpbmUpOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwppbmRleCBjNDE5MzA0Li43NzQxNDc4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwpAQCAtMSwxMCArMSw3IEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSkKLQkJIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycCAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KQEAgLTMwLDcgKzI3LDcgQEAKIAkJbXZjCV9fTENfUFJFRklYX1NBVkVfQVJFQS0weDEwMDAoNCwlcjEpLDAoJXIxMCkKIAkJc3RmcGMJX19MQ19GUF9DUkVHX1NBVkVfQVJFQS0weDEwMDAoJXIxKQogCQlzdGNrYwkuTGNsa2NtcC0uTHBnMCglcjEzKQotCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoOCwlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCisJCW12YwlfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLTB4MTAwMCg3LCVyMSksLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJc3RwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3RnCSVyMTMsIF9fTENfUFNXX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKaW5kZXggNDZiOTBjYi4uNjU2ZmNiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKQEAgLTEsNDkgKzEsNSBAQAotLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8YXNtL2NwY21kLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+Ci0jaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAotI2luY2x1ZGUgPG5ldC9hcnAuaD4KLSNlbmRpZgotCi0vKgotICogbWVtb3J5IG1hbmFnZW1lbnQKLSAqLwotRVhQT1JUX1NZTUJPTChfb2lfYml0bWFwKTsKLUVYUE9SVF9TWU1CT0woX25pX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF96Yl9maW5kbWFwKTsKLUVYUE9SVF9TWU1CT0woX3NiX2ZpbmRtYXApOwotCi0vKgotICogYmluZm10X2VsZiBsb2FkZXIgCi0gKi8KLWV4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgczM5MF9mcF9yZWdzICpmcHJlZ3MpOwotRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7Ci1FWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7Ci0KLS8qCi0gKiBtaXNjLgotICovCi1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfZmxhZ3MpOwotRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwotRVhQT1JUX1NZTUJPTChjc3VtX2ZvbGQpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9pcnEpOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCBjNWNmYjYxLi4wNjIwMWI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03NCw5ICs3NCwxNyBAQAogICogTWFjaGluZSBzZXR1cC4uCiAgKi8KIHVuc2lnbmVkIGludCBjb25zb2xlX21vZGUgPSAwOworRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOworCiB1bnNpZ25lZCBpbnQgY29uc29sZV9kZXZubyA9IC0xOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKKwogdW5zaWduZWQgaW50IGNvbnNvbGVfaXJxID0gLTE7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfaXJxKTsKKwogdW5zaWduZWQgbG9uZyBtYWNoaW5lX2ZsYWdzOworRVhQT1JUX1NZTUJPTChtYWNoaW5lX2ZsYWdzKTsKKwogdW5zaWduZWQgbG9uZyBlbGZfaHdjYXAgPSAwOwogY2hhciBlbGZfcGxhdGZvcm1bRUxGX1BMQVRGT1JNX1NJWkVdOwogCkBAIC04Niw2ICs5NCwxMCBAQAogaW50IF9faW5pdGRhdGEgbWVtb3J5X2VuZF9zZXQ7CiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKIAorLyogQW4gYXJyYXkgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGxvd2NvcmUgb2YgZXZlcnkgQ1BVLiAqLworc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOworCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKiBmb3IgUzM5MCBuZWVkIHRvIGZpbmQgb3V0LCB3aGF0IHdlIGhhdmUgdG8gc2V0dXAKQEAgLTEwOSwxMyArMTIxLDEwIEBACiAgKi8KIHZvaWQgX19jcHVpbml0IGNwdV9pbml0KHZvaWQpCiB7Ci0gICAgICAgIGludCBhZGRyID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KICAgICAgICAgLyoKICAgICAgICAgICogU3RvcmUgcHJvY2Vzc29yIGlkIGluIGxvd2NvcmUgKHVzZWQgZS5nLiBpbiB0aW1lcl9pbnRlcnJ1cHQpCiAgICAgICAgICAqLwotCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfaWQpOwotICAgICAgICBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHIgPSBhZGRyOworCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfaWQpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZvcmNlIEZQVSBpbml0aWFsaXphdGlvbjoKQEAgLTEyNSw4ICsxMzQsNyBAQAogCiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0gICAgICAgIGlmIChjdXJyZW50LT5tbSkKLSAgICAgICAgICAgICAgICBCVUcoKTsKKwlCVUdfT04oY3VycmVudC0+bW0pOwogICAgICAgICBlbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3VycmVudCk7CiB9CiAKQEAgLTIxNyw3ICsyMjUsNyBAQAogCX0KIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfemZjcGR1bXAodW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8pCiB7CiAJc3RhdGljIGNoYXIgc3RyWzQxXTsKQEAgLTI4OSwxMSArMjk3LDcgQEAKIGVhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9wYXJzZV9tZW0pOwogCiAjaWZkZWYgQ09ORklHX1MzOTBfU1dJVENIX0FNT0RFCi0jaWZkZWYgQ09ORklHX1BHU1RFCi11bnNpZ25lZCBpbnQgc3dpdGNoX2Ftb2RlID0gMTsKLSNlbHNlCiB1bnNpZ25lZCBpbnQgc3dpdGNoX2Ftb2RlID0gMDsKLSNlbmRpZgogRVhQT1JUX1NZTUJPTF9HUEwoc3dpdGNoX2Ftb2RlKTsKIAogc3RhdGljIGludCBzZXRfYW1vZGVfYW5kX3VhY2Nlc3ModW5zaWduZWQgbG9uZyB1c2VyX2Ftb2RlLApAQCAtNDE0LDcgKzQxOCw2IEBACiAJCVBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIG1jY2tfaW50X2hhbmRsZXI7CiAJbGMtPmlvX25ld19wc3cubWFzayA9IHBzd19rZXJuZWxfYml0czsKIAlsYy0+aW9fbmV3X3Bzdy5hZGRyID0gUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgaW9faW50X2hhbmRsZXI7Ci0JbGMtPmlwbF9kZXZpY2UgPSBTMzkwX2xvd2NvcmUuaXBsX2RldmljZTsKIAlsYy0+Y2xvY2tfY29tcGFyYXRvciA9IC0xVUxMOwogCWxjLT5rZXJuZWxfc3RhY2sgPSAoKHVuc2lnbmVkIGxvbmcpICZpbml0X3RocmVhZF91bmlvbikgKyBUSFJFQURfU0laRTsKIAlsYy0+YXN5bmNfc3RhY2sgPSAodW5zaWduZWQgbG9uZykKQEAgLTQzNCw2ICs0MzcsNyBAQAogCWxjLT52ZHNvX3Blcl9jcHVfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmbGMtPnBhc3RlWzBdOwogI2VuZGlmCiAJc2V0X3ByZWZpeCgodTMyKSh1bnNpZ25lZCBsb25nKSBsYyk7CisJbG93Y29yZV9wdHJbMF0gPSBsYzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CkBAIC01MTAsNyArNTE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9tZW07CiAJaW50IGk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUF9EVU1QKSB7CiAJCW1lbW9yeV9lbmQgPSBaRkNQRFVNUF9IU0FfU0laRTsKIAkJbWVtb3J5X2VuZF9zZXQgPSAxOwpAQCAtNjc3LDcgKzY4MSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaHdjYXBzKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IGludCBzdGZsX2JpdHNbNl0gPSB7IDAsIDIsIDcsIDE3LCAxOSwgMjEgfTsKLQlzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfbGlzdF9leHRlbmRlZDsKIAl1bnNpZ25lZCBpbnQgZmFjaWxpdHlfbGlzdDsKIAlpbnQgaTsKQEAgLTY5MywxNSArNjk2LDIyIEBACiAJICogICBCaXQgMTc6IHRoZSBtZXNzYWdlLXNlY3VyaXR5IGFzc2lzdCBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCAxOTogdGhlIGxvbmctZGlzcGxhY2VtZW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqICAgQml0IDIxOiB0aGUgZXh0ZW5kZWQtaW1tZWRpYXRlIGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDIyOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGlzIGluc3RhbGxlZAorCSAqICAgQml0IDMwOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGVuaGFuY2VtZW50IGZhY2lsaXR5CiAJICogVGhlc2UgZ2V0IHRyYW5zbGF0ZWQgdG86CiAJICogICBIV0NBUF9TMzkwX0VTQU4zIGJpdCAwLCBIV0NBUF9TMzkwX1pBUkNIIGJpdCAxLAogCSAqICAgSFdDQVBfUzM5MF9TVEZMRSBiaXQgMiwgSFdDQVBfUzM5MF9NU0EgYml0IDMsCi0JICogICBIV0NBUF9TMzkwX0xESVNQIGJpdCA0LCBhbmQgSFdDQVBfUzM5MF9FSU1NIGJpdCA1LgorCSAqICAgSFdDQVBfUzM5MF9MRElTUCBiaXQgNCwgSFdDQVBfUzM5MF9FSU1NIGJpdCA1IGFuZAorCSAqICAgSFdDQVBfUzM5MF9FVEYzRUggYml0IDggKDIyICYmIDMwKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlpZiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gc3RmbF9iaXRzW2ldKSkpCiAJCQllbGZfaHdjYXAgfD0gMVVMIDw8IGk7CiAKKwlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCisJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKKwkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCiAJLyoKIAkgKiBDaGVjayBmb3IgYWRkaXRpb25hbCBmYWNpbGl0aWVzIHdpdGggc3RvcmUtZmFjaWxpdHktbGlzdC1leHRlbmRlZC4KIAkgKiBzdGZsZSBzdG9yZXMgZG91Ymxld29yZHMgKDggYnl0ZSkgd2l0aCBiaXQgMVVMTDw8NjMgYXMgYml0IDAKQEAgLTcxMCwyMCArNzIwLDIyIEBACiAJICogSG93IG1hbnkgZmFjaWxpdHkgd29yZHMgYXJlIHN0b3JlZCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKIAkgKiBkb3VibGV3b3JkcyBwYXNzZWQgdG8gdGhlIGluc3RydWN0aW9uLiBUaGUgYWRkaXRpb25hbCBmYWNpbGl0ZXMKIAkgKiBhcmU6Ci0JICogICBCaXQgNDM6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDI6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDQ6IHBlcmZvcm0gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqIHRyYW5zbGF0ZWQgdG86Ci0JICogICBIV0NBUF9TMzkwX0RGUCBiaXQgNi4KKwkgKiAgIEhXQ0FQX1MzOTBfREZQIGJpdCA2ICg0MiAmJiA0NCkuCiAJICovCiAJaWYgKChlbGZfaHdjYXAgJiAoMVVMIDw8IDIpKSAmJgogCSAgICBfX3N0ZmxlKCZmYWNpbGl0eV9saXN0X2V4dGVuZGVkLCAxKSA+IDApIHsKLQkJaWYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjQgLSA0MykpKQorCQlpZiAoKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0MikpKQorCQkgICAgJiYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0NCkpKSkKIAkJCWVsZl9od2NhcCB8PSAxVUwgPDwgNjsKIAl9CiAKIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCiAJCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKIAotCXN3aXRjaCAoY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpIHsKKwlzd2l0Y2ggKFMzOTBfbG93Y29yZS5jcHVfaWQubWFjaGluZSkgewogCWNhc2UgMHg5NjcyOgogI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkKIAlkZWZhdWx0OgkvKiBVc2UgImc1IiBhcyBkZWZhdWx0IGZvciAzMSBiaXQga2VybmVscy4gKi8KQEAgLTgxNiw3ICs4MjgsNyBAQAogCXNldHVwX2xvd2NvcmUoKTsKIAogICAgICAgICBjcHVfaW5pdCgpOwotICAgICAgICBfX2NwdV9sb2dpY2FsX21hcFswXSA9IFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfYWRkcjsKKwlfX2NwdV9sb2dpY2FsX21hcFswXSA9IHN0YXAoKTsKIAlzMzkwX2luaXRfY3B1X3RvcG9sb2d5KCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMmQzMzdjYi4uMDA2ZWQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC01MCwxMiArNTEsNiBAQAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKIAotLyoKLSAqIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4KLSAqLwotc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKLUVYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOwotCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAogc3RhdGljIHU4IHNtcF9jcHVfdHlwZTsKQEAgLTgxLDkgKzc2LDcgQEAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KIAlfX2xvYWRfcHN3X21hc2socHN3X2tlcm5lbF9iaXRzICYgflBTV19NQVNLX01DSEVDSyk7Ci0KLQkvKiB3cml0ZSBtYWdpYyBudW1iZXIgdG8gemVybyBwYWdlIChhYnNvbHV0ZSAwKSAqLwotCWxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPnBhbmljX21hZ2ljID0gX19QQU5JQ19NQUdJQzsKKwl0cmFjZV9oYXJkaXJxc19vZmYoKTsKIAogCS8qIHN0b3AgYWxsIHByb2Nlc3NvcnMgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewpAQCAtMjMzLDcgKzIyNiw3IEBACiAgKi8KICNkZWZpbmUgQ1BVX0lOSVRfTk8JMQogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAogLyoKICAqIHpmY3BkdW1wX3ByZWZpeF9hcnJheSBob2xkcyBwcmVmaXggcmVnaXN0ZXJzIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgpAQCAtMjc0LDcgKzI2Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfZ2V0X3NhdmVfYXJlYSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcGh5X2NwdSkgeyB9CiAKLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgfHwgQ09ORklHX1pGQ1BEVU1QX01PRFVMRSAqLworI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwogCiBzdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCiB7CkBAIC0zMDQsOCArMjk3LDggQEAKIHsKIAlpbnQgY3B1X2lkLCBsb2dpY2FsX2NwdTsKIAotCWxvZ2ljYWxfY3B1ID0gZmlyc3RfY3B1KGF2YWlsKTsKLQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfZmlyc3QoJmF2YWlsKTsKKwlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIDA7CiAJZm9yIChjcHVfaWQgPSAwOyBjcHVfaWQgPD0gNjU1MzU7IGNwdV9pZCsrKSB7CiAJCWlmIChjcHVfa25vd24oY3B1X2lkKSkKQEAgLTMxNiw4ICszMDksOCBAQAogCQkJY29udGludWU7CiAJCWNwdV9zZXQobG9naWNhbF9jcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMyOSw4ICszMjIsOCBAQAogCWludCBjcHVfaWQsIGxvZ2ljYWxfY3B1LCBjcHU7CiAJaW50IHJjOwogCi0JbG9naWNhbF9jcHUgPSBmaXJzdF9jcHUoYXZhaWwpOwotCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19maXJzdCgmYXZhaWwpOworCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm4gMDsKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCkBAIC0zNTEsOCArMzQ0LDggQEAKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX1NUQU5EQlk7CiAJCWVsc2UKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIG91dDoKQEAgLTM3OSw3ICszNzIsNyBAQAogCiAJY19jcHVzID0gMTsKIAlzX2NwdXMgPSAwOwotCWJvb3RfY3B1X2FkZHIgPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CisJYm9vdF9jcHVfYWRkciA9IF9fY3B1X2xvZ2ljYWxfbWFwWzBdOwogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcGFuaWMoInNtcF9kZXRlY3RfY3B1cyBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTQ1Myw3ICs0NDYsNyBAQAogCS8qIFN3aXRjaCBvbiBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCS8qIFByaW50IGluZm8gYWJvdXQgdGhpcyBwcm9jZXNzb3IgKi8KLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCS8qIGNwdV9pZGxlIHdpbGwgY2FsbCBzY2hlZHVsZSBmb3IgdXMgKi8KIAljcHVfaWRsZSgpOwogCXJldHVybiAwOwpAQCAtNTE1LDcgKzUwOCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyB2b2lkIHNtcF9mcmVlX2xvd2NvcmUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmU7CkBAIC01MzQsNyArNTI2LDYgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CiAJbG93Y29yZV9wdHJbY3B1XSA9IE5VTEw7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIC8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovCiBpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCkBAIC01NDMsMTYgKzUzNCwyMyBAQAogCXN0cnVjdCBfbG93Y29yZSAqY3B1X2xvd2NvcmU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKIAlzaWdwX2Njb2RlIGNjb2RlOworCXUzMiBsb3djb3JlOwogCiAJaWYgKHNtcF9jcHVfc3RhdGVbY3B1XSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHNtcF9hbGxvY19sb3djb3JlKGNwdSkpCiAJCXJldHVybiAtRU5PTUVNOworCWRvIHsKKwkJY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9pbml0aWFsX2NwdV9yZXNldCk7CisJCWlmIChjY29kZSA9PSBzaWdwX2J1c3kpCisJCQl1ZGVsYXkoMTApOworCQlpZiAoY2NvZGUgPT0gc2lncF9ub3Rfb3BlcmF0aW9uYWwpCisJCQlnb3RvIGVycl9vdXQ7CisJfSB3aGlsZSAoY2NvZGUgPT0gc2lncF9idXN5KTsKIAotCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3Nvcl9wKChfX3UzMikodW5zaWduZWQgbG9uZykobG93Y29yZV9wdHJbY3B1XSksCi0JCQkJICAgY3B1LCBzaWdwX3NldF9wcmVmaXgpOwotCWlmIChjY29kZSkKLQkJcmV0dXJuIC1FSU87CisJbG93Y29yZSA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpbG93Y29yZV9wdHJbY3B1XTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJCXVkZWxheSgxMCk7CiAKIAlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKIAljcHVfbG93Y29yZSA9IGxvd2NvcmVfcHRyW2NwdV07CkBAIC01NzEsOSArNTY5LDggQEAKIAkJOiA6ICJhIiAoJmNwdV9sb3djb3JlLT5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpIDogIm1lbW9yeSIpOwogCWNwdV9sb3djb3JlLT5wZXJjcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogCWNwdV9sb3djb3JlLT5jdXJyZW50X3Rhc2sgPSAodW5zaWduZWQgbG9uZykgaWRsZTsKLQljcHVfbG93Y29yZS0+Y3B1X2RhdGEuY3B1X25yID0gY3B1OworCWNwdV9sb3djb3JlLT5jcHVfbnIgPSBjcHU7CiAJY3B1X2xvd2NvcmUtPmtlcm5lbF9hc2NlID0gUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOwotCWNwdV9sb3djb3JlLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJZWllaW8oKTsKIAogCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCkBAIC01ODIsNiArNTc5LDEwIEBACiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCWNwdV9yZWxheCgpOwogCXJldHVybiAwOworCitlcnJfb3V0OgorCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcG9zc2libGVfY3B1cyhjaGFyICpzKQpAQCAtNTg5LDkgKzU5MCw4IEBACiAJaW50IHBjcHVzLCBjcHU7CiAKIAlwY3B1cyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCWNwdV9wb3NzaWJsZV9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQlmb3IgKGNwdSA9IDE7IGNwdSA8IHBjcHVzICYmIGNwdSA8IE5SX0NQVVM7IGNwdSsrKQotCQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBwY3B1cyAmJiBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKKwkJc2V0X2NwdV9wb3NzaWJsZShjcHUsIHRydWUpOwogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oInBvc3NpYmxlX2NwdXMiLCBzZXR1cF9wb3NzaWJsZV9jcHVzKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCS8qIHJlcXVlc3QgdGhlIDB4MTIwMSBlbWVyZ2VuY3kgc2lnbmFsIGV4dGVybmFsIGludGVycnVwdCAqLwogCWlmIChyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxMjAxLCBkb19leHRfY2FsbF9pbnRlcnJ1cHQpICE9IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZXF1ZXN0IGV4dGVybmFsIGludGVycnVwdCAweDEyMDEiKTsKLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCiAJLyogUmVhbGxvY2F0ZSBjdXJyZW50IGxvd2NvcmUsIGJ1dCBrZWVwIGl0cyBjb250ZW50cy4gKi8KIAlsY19vcmRlciA9IHNpemVvZihsb25nKSA9PSA4ID8gMSA6IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc3lzaW5mby5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3N5c2luZm8uYwpyZW5hbWUgdG8gYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKaW5kZXggMGVlYTkwNy4uYjVlNzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3N5c2luZm8uYwotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDgKLSAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIChVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tKQotICoJICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDkKKyAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIDxVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tPiwKKyAqCSAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0LDcgKzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaV8wKHZvaWQpCiB7Ci0JaW50IHJjID0gc3RzaSAoTlVMTCwgMCwgMCwgMCk7CisJaW50IHJjID0gc3RzaShOVUxMLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmMgPT0gLUVOT1NZUyA/IHJjIDogKCgodW5zaWduZWQgaW50KSByYykgPj4gMjgpOwogfQogCkBAIC03OCwyMyArNzYsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8xXzJfMShzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAxLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIENQVTogICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKQEAgLTE0NSwzMyArMTI2LDE1IEBACiAJaWYgKGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5ICE9IDApCiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZWNvbmRhcnkgQ2FwYWJpbGl0eTogJWRcbiIsCiAJCQkgICAgICAgaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkpOwotCiAJcmV0dXJuIGxlbjsKIH0KIAotI2lmIDAgLyogQ3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIGludCBzdHNpXzJfMl8xKHN0cnVjdCBzeXNpbmZvXzJfMl8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDIsIDIsIDEpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKLQlFQkNBU0MgKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MgKGluZm8tPnBsYW50LCBzaXplb2YoaW5mby0+cGxhbnQpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VxdWVuY2UgQ29kZSBvZiBsb2dpY2FsIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIGxvZ2ljYWwgQ1BVOiAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8yXzJfMihzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlpZiAoc3RzaShpbmZvLCAyLCAyLCAyKSA9PSAtRU5PU1lTKQogCQlyZXR1cm4gbGVuOwogCi0JRUJDQVNDIChpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOworCUVCQ0FTQyhpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOwogCiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTnVtYmVyOiAgICAgICAgICAlZFxuIiwKQEAgLTIxNCw4ICsxNzcsOCBAQAogCWlmIChzdHNpKGluZm8sIDMsIDIsIDIpID09IC1FTk9TWVMpCiAJCXJldHVybiBsZW47CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPmNvdW50OyBpKyspIHsKLQkJRUJDQVNDIChpbmZvLT52bVtpXS5uYW1lLCBzaXplb2YoaW5mby0+dm1baV0ubmFtZSkpOwotCQlFQkNBU0MgKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOworCQlFQkNBU0MoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKKwkJRUJDQVNDKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKIAkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5uYW1lKTsKQEAgLTIzNywxNCArMjAwLDEzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotCiBzdGF0aWMgaW50IHByb2NfcmVhZF9zeXNpbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlIChHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBsb25nIGluZm8gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaW50IGxldmVsLCBsZW47Ci0JCisKIAlpZiAoIWluZm8pCiAJCXJldHVybiAwOwogCkBAIC0yNjIsOCArMjI0LDggQEAKIAlpZiAobGV2ZWwgPj0gMykKIAkJbGVuID0gc3RzaV8zXzJfMigoc3RydWN0IHN5c2luZm9fM18yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKIAotCWZyZWVfcGFnZSAoaW5mbyk7Ci0gICAgICAgIHJldHVybiBsZW47CisJZnJlZV9wYWdlKGluZm8pOworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3N5c2luZm8odm9pZCkKQEAgLTI3Miw4ICsyMzQsNyBAQAogCQkJICAgICAgIHByb2NfcmVhZF9zeXNpbmZvLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KLQotX19pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKK2RldmljZV9pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKIAogLyoKICAqIFNlcnZpY2UgbGV2ZWxzIGludGVyZmFjZS4KQEAgLTM4NywxMyArMzQ4LDExIEBACiAJCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJnNlcnZpY2VfbGV2ZWxfdm0pOwogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCk7CiAKIC8qCiAgKiBCb2dvbWlwcyBjYWxjdWxhdGlvbiBiYXNlZCBvbiBjcHUgY2FwYWJpbGl0eS4KICAqLwotCiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqY2FwYWJpbGl0eSkKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZmM0NjhjYS4uZjcyZDQxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogfQogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGNsb2NrX3N5bmNfd29yZCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2NrX3N5bmNfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xvY2tfc3luY19mbGFnczsKIAogI2RlZmluZSBDTE9DS19TWU5DX0hBU19FVFIJMApAQCAtMzk0LDYgKzM5NSwyMCBAQAogCWF0b21pY19zZXRfbWFzaygweDgwMDAwMDAwLCBzd19wdHIpOwogfQogCisvKgorICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGlzIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N5bmNfY2xvY2sodm9pZCkKK3sKKwlhdG9taWNfdCAqc3dfcHRyOworCWludCByYzsKKworCXN3X3B0ciA9ICZnZXRfY3B1X3ZhcihjbG9ja19zeW5jX3dvcmQpOworCXJjID0gKGF0b21pY19yZWFkKHN3X3B0cikgJiAweDgwMDAwMDAwVSkgIT0gMDsKKwlwdXRfY3B1X3ZhcihjbG9ja19zeW5jX3N5bmMpOworCXJldHVybiByYzsKK30KKwogLyogU2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSB1c2VkIGZvciBldHIgYW5kIHN0cCBzeW5jIGV2ZW50cyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0aW1lX3N5bmNfd3E7CiAKQEAgLTQ4NSw2ICs1MDAsOCBAQAogCWlmIChldHJfc2V0cigmZXRyX2VhY3IpID09IDApIHsKIAkJZXRyX3RvbGVjID0gZ2V0X2Nsb2NrKCk7CiAJCXNldF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfSBlbHNlIGlmIChldHJfcG9ydDBfb25saW5lIHx8IGV0cl9wb3J0MV9vbmxpbmUpIHsKIAkJcHJfd2FybmluZygiVGhlIHJlYWwgb3IgdmlydHVhbCBoYXJkd2FyZSBzeXN0ZW0gZG9lcyAiCiAJCQkgICAibm90IHByb3ZpZGUgYW4gRVRSIGludGVyZmFjZVxuIik7CkBAIC01MzMsOCArNTUwLDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLnNsKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1dJVENIX0xPQ0FMLCAmZXRyX2V2ZW50cyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiB9CkBAIC01NDksOCArNTY1LDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLmVzKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1lOQ19DSEVDSywgJmV0cl9ldmVudHMpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogfQpAQCAtOTE0LDcgKzkyOSw3IEBACiAJICogRG8gbm90IHRyeSB0byBnZXQgdGhlIGFsdGVybmF0ZSBwb3J0IGFpYiBpZiB0aGUgY2xvY2sKIAkgKiBpcyBub3QgaW4gc3luYyB5ZXQuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpICYmICFlYWNyLmVzKQorCWlmICghY2hlY2tfc3luY19jbG9jaygpKQogCQlyZXR1cm4gZWFjcjsKIAogCS8qCkBAIC05OTcsNyArMTAxMiw2IEBACiAJCW9uX2VhY2hfY3B1KGRpc2FibGVfc3luY19jbG9jaywgTlVMTCwgMSk7CiAJCWRlbF90aW1lcl9zeW5jKCZldHJfdGltZXIpOwogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC0xMDcxLDE4ICsxMDg1LDEzIEBACiAJCS8qIEJvdGggcG9ydHMgbm90IHVzYWJsZS4gKi8KIAkJZWFjci5lcyA9IGVhY3Iuc2wgPSAwOwogCQlzeW5jX3BvcnQgPSAtMTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQllYWNyLmVzID0gMDsKLQogCS8qCiAJICogSWYgdGhlIGNsb2NrIGlzIGluIHN5bmMganVzdCB1cGRhdGUgdGhlIGVhY3IgYW5kIHJldHVybi4KIAkgKiBJZiB0aGVyZSBpcyBubyB2YWxpZCBzeW5jIHBvcnQgd2FpdCBmb3IgYSBwb3J0IHVwZGF0ZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSB8fAotCSAgICBlYWNyLmVzIHx8IHN5bmNfcG9ydCA8IDApIHsKKwlpZiAoY2hlY2tfc3luY19jbG9jaygpIHx8IHN5bmNfcG9ydCA8IDApIHsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwogCQlldHJfc2V0X3RvbGVjX3RpbWVvdXQobm93KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTEwMywxMyArMTExMiwxMSBAQAogCSAqIGFuZCBzZXQgdXAgYSB0aW1lciB0byB0cnkgYWdhaW4gYWZ0ZXIgMC41IHNlY29uZHMKIAkgKi8KIAlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0Jc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCWlmIChub3cgPCBldHJfdG9sZWMgKyAoMTYwMDAwMCA8PCAxMikgfHwKIAkgICAgZXRyX3N5bmNfY2xvY2tfc3RvcCgmYWliLCBzeW5jX3BvcnQpICE9IDApIHsKIAkJLyogU3luYyBmYWlsZWQuIFRyeSBhZ2FpbiBpbiAxLzIgc2Vjb25kLiAqLwogCQllYWNyLmVzID0gMDsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJZXRyX3NldF9zeW5jX3RpbWVvdXQoKTsKIAl9IGVsc2UKIAkJZXRyX3NldF90b2xlY190aW1lb3V0KG5vdyk7CkBAIC0xMTkxLDE5ICsxMTk4LDMwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwltdXRleF9sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlpZiAoZGV2ID09ICZldHJfcG9ydDBfZGV2KSB7CiAJCWlmIChldHJfcG9ydDBfb25saW5lID09IHZhbHVlKQotCQkJcmV0dXJuIGNvdW50OwkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZ290byBvdXQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCiAJCWV0cl9wb3J0MF9vbmxpbmUgPSB2YWx1ZTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCXNldF9iaXQoRVRSX0VWRU5UX1BPUlQwX0NIQU5HRSwgJmV0cl9ldmVudHMpOwogCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9IGVsc2UgewogCQlpZiAoZXRyX3BvcnQxX29ubGluZSA9PSB2YWx1ZSkKLQkJCXJldHVybiBjb3VudDsJLyogTm90aGluZyB0byBkby4gKi8KKwkJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIGRvLiAqLwogCQlldHJfcG9ydDFfb25saW5lID0gdmFsdWU7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlzZXRfYml0KEVUUl9FVkVOVF9QT1JUMV9DSEFOR0UsICZldHJfZXZlbnRzKTsKIAkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDcxLDggKzE0ODksNiBAQAogICovCiB2b2lkIHN0cF9zeW5jX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTQ4NSw4ICsxNTAxLDYgQEAKICAqLwogdm9pZCBzdHBfaXNsYW5kX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTUxMywxMCArMTUyNyw2IEBACiAKIAllbmFibGVfc3luY19jbG9jaygpOwogCi0Jc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7Ci0KIAlyYyA9IDA7CiAJaWYgKHN0cF9pbmZvLnRvZG9mZlswXSB8fCBzdHBfaW5mby50b2RvZmZbMV0gfHwKIAkgICAgc3RwX2luZm8udG9kb2ZmWzJdIHx8IHN0cF9pbmZvLnRvZG9mZlszXSB8fApAQCAtMTUzNSw5ICsxNTQ1LDYgQEAKIAlpZiAocmMpIHsKIAkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCQlzdHBfc3luYy0+aW5fc3luYyA9IC1FQUdBSU47Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCQlpZiAoZXRyX3BvcnQwX29ubGluZSB8fCBldHJfcG9ydDFfb25saW5lKQotCQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfSBlbHNlCiAJCXN0cF9zeW5jLT5pbl9zeW5jID0gMTsKIAl4Y2hnKCZmaXJzdCwgMCk7CkBAIC0xNTY5LDYgKzE1NzYsMTAgQEAKIAlpZiAocmMgfHwgc3RwX2luZm8uYyA9PSAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwkvKiBTa2lwIHN5bmNocm9uaXphdGlvbiBpZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBpbiBzeW5jLiAqLworCWlmIChjaGVja19zeW5jX2Nsb2NrKCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCW1lbXNldCgmc3RwX3N5bmMsIDAsIHNpemVvZihzdHBfc3luYykpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCWF0b21pY19zZXQoJnN0cF9zeW5jLmNwdXMsIG51bV9vbmxpbmVfY3B1cygpIC0gMSk7CkBAIC0xNjg0LDggKzE2OTUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0hBU19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW11dGV4X2xvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXN0cF9vbmxpbmUgPSB2YWx1ZTsKKwlpZiAoc3RwX29ubGluZSkKKwkJc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCBjYzM2MmM5Li4zYzcyYzljIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjb3JlX2luZm8gKmNvcmUgPSAmY29yZV9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNDU4NGQ4MS4uYzJlNDJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtNjEsOSArNjEsMTEgQEAKICNkZWZpbmUgc3RhY2tfcG9pbnRlciAoeyB2b2lkICoqc3A7IGFzbSgibGEgJTAsMCgxNSkiIDogIj0mZCIgKHNwKSk7IHNwOyB9KQogCiAjaWZuZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBMT05HICIlMDhseCAiCiAjZGVmaW5lIEZPVVJMT05HICIlMDhseCAlMDhseCAlMDhseCAlMDhseFxuIgogc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSAxMjsKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLworI2RlZmluZSBMT05HICIlMDE2bHggIgogI2RlZmluZSBGT1VSTE9ORyAiJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XG4iCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDIwOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAJCQlicmVhazsKIAkJaWYgKGkgJiYgKChpICogc2l6ZW9mIChsb25nKSAlIDMyKSA9PSAwKSkKIAkJCXByaW50aygiXG4gICAgICAgIik7Ci0JCXByaW50aygiJXAgIiwgKHZvaWQgKikqc3RhY2srKyk7CisJCXByaW50ayhMT05HLCAqc3RhY2srKyk7CiAJfQogCXByaW50aygiXG4iKTsKIAlzaG93X3RyYWNlKHRhc2ssIHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNjkwZTE3OC4uODliMmU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIHZkc29fZnJlZV9wZXJfY3B1KGludCBjcHUsIHN0cnVjdCBfbG93Y29yZSAqbG93Y29yZSkKIHsKIAl1bnNpZ25lZCBsb25nIHNlZ21lbnRfdGFibGUsIHBhZ2VfdGFibGUsIHBhZ2VfZnJhbWU7CkBAIC0xNjMsNyArMTYyLDYgQEAKIAlmcmVlX3BhZ2UocGFnZV90YWJsZSk7CiAJZnJlZV9wYWdlcyhzZWdtZW50X3RhYmxlLCBTRUdNRU5UX09SREVSKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIHZvaWQgX192ZHNvX2luaXRfY3I1KHZvaWQgKmR1bW15KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQ3OTZkMDUuLjdhMjA2M2ViIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJRVhJVF9URVhUCiAJfQogCisJLyogZWFybHkuYyB1c2VzIHN0c2ksIHdoaWNoIHJlcXVpcmVzIHBhZ2UgYWxpZ25lZCBkYXRhLiAqLworCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5pbml0LmRhdGEgOiB7CiAJCUlOSVRfREFUQQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwppbmRleCBlMDUxY2FkLi4zZTI2MGI3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCkBAIC00LDYgKzQsOSBAQAogY29uZmlnIEhBVkVfS1ZNCiAgICAgICAgYm9vbAogCitjb25maWcgSEFWRV9LVk1fSVJRQ0hJUAorICAgICAgIGJvb2wKKwogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggNjEyMzYxMC4uOWQxOTgwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIHN0YXRpYyBpbnRlcmNlcHRfaGFuZGxlcl90IGluc3RydWN0aW9uX2hhbmRsZXJzWzI1Nl0gPSB7CiAJWzB4ODNdID0ga3ZtX3MzOTBfaGFuZGxlX2RpYWcsCiAJWzB4YWVdID0ga3ZtX3MzOTBfaGFuZGxlX3NpZ3AsCi0JWzB4YjJdID0ga3ZtX3MzOTBfaGFuZGxlX3ByaXYsCisJWzB4YjJdID0ga3ZtX3MzOTBfaGFuZGxlX2IyLAogCVsweGI3XSA9IGhhbmRsZV9sY3RsLAogCVsweGViXSA9IGhhbmRsZV9sY3RsZywKIH07CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCBmNGZlMjhhLi4wMTg5MzU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTU1NSw5ICs1NTUsMTQgQEAKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiBwcm9ncmFtIGNoZWNrICVkIChmcm9tIHVzZXIpIiwKIAkJCSAgIHMzOTBpbnQtPnBhcm0pOwogCQlicmVhazsKKwljYXNlIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWDoKKwkJaW50aS0+cHJlZml4LmFkZHJlc3MgPSBzMzkwaW50LT5wYXJtOworCQlpbnRpLT50eXBlID0gczM5MGludC0+dHlwZTsKKwkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiBzZXQgcHJlZml4IHRvICV4IChmcm9tIHVzZXIpIiwKKwkJCSAgIHMzOTBpbnQtPnBhcm0pOworCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX1NJR1BfU1RPUDoKIAljYXNlIEtWTV9TMzkwX1JFU1RBUlQ6Ci0JY2FzZSBLVk1fUzM5MF9TSUdQX1NFVF9QUkVGSVg6CiAJY2FzZSBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZOgogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHR5cGUgJXgiLCBzMzkwaW50LT50eXBlKTsKIAkJaW50aS0+dHlwZSA9IHMzOTBpbnQtPnR5cGU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggMGQzMzg5My4uZjRkNTZlOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotCisjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgImt2bS1zMzkwLmgiCiAjaW5jbHVkZSAiZ2FjY2Vzcy5oIgogCkBAIC0yODYsNyArMjg2LDcgQEAKIAlzZXR1cF90aW1lcigmdmNwdS0+YXJjaC5ja2NfdGltZXIsIGt2bV9zMzkwX2lkbGVfd2FrZXVwLAogCQkgKHVuc2lnbmVkIGxvbmcpIHZjcHUpOwogCWdldF9jcHVfaWQoJnZjcHUtPmFyY2guY3B1X2lkKTsKLQl2Y3B1LT5hcmNoLmNwdV9pZC52ZXJzaW9uID0gMHhmZTsKKwl2Y3B1LT5hcmNoLmNwdV9pZC52ZXJzaW9uID0gMHhmZjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDIyLDggKzQyMiw4IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KQEAgLTQ0MCw4ICs0NDAsNiBAQAogCXJldHVybiAtRUlOVkFMOyAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiB9CiAKLWV4dGVybiB2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCW1lbWNweSgmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdnMTQsICZ2Y3B1LT5hcmNoLmd1ZXN0X2dwcnNbMTRdLCAxNik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKaW5kZXggMzg5M2NmMS4uMDBiYmU2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaApAQCAtNTAsNyArNTAsNyBAQAogaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKTsKIAogLyogaW1wbGVtZW50ZWQgaW4gcHJpdi5jICovCi1pbnQga3ZtX3MzOTBfaGFuZGxlX3ByaXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogLyogaW1wbGVtZW50ZWQgaW4gc2lncC5jICovCiBpbnQga3ZtX3MzOTBfaGFuZGxlX3NpZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggMzYwNWRmNDUuLjRiODg4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0zMDQsMTIgKzMwNCwyNCBAQAogCVsweGIxXSA9IGhhbmRsZV9zdGZsLAogfTsKIAotaW50IGt2bV9zMzkwX2hhbmRsZV9wcml2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2ludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludGVyY2VwdF9oYW5kbGVyX3QgaGFuZGxlcjsKIAorCS8qCisJICogYSBsb3Qgb2YgQjIgaW5zdHJ1Y3Rpb25zIGFyZSBwcml2aWxlZGdlZC4gV2UgZmlyc3QgY2hlY2sgZm9yCisJICogdGhlIHByaXZpbGVkZ2VzIG9uZXMsIHRoYXQgd2UgY2FuIGhhbmRsZSBpbiB0aGUga2VybmVsLiBJZiB0aGUKKwkgKiBrZXJuZWwgY2FuIGhhbmRsZSB0aGlzIGluc3RydWN0aW9uLCB3ZSBjaGVjayBmb3IgdGhlIHByb2JsZW0KKwkgKiBzdGF0ZSBiaXQgYW5kIChhKSBoYW5kbGUgdGhlIGluc3RydWN0aW9uIG9yIChiKSBzZW5kIGEgY29kZSAyCisJICogcHJvZ3JhbSBjaGVjay4KKwkgKiBBbnl0aGluZyBlbHNlIGdvZXMgdG8gdXNlcnNwYWNlLiovCiAJaGFuZGxlciA9IHByaXZfaGFuZGxlcnNbdmNwdS0+YXJjaC5zaWVfYmxvY2stPmlwYSAmIDB4MDBmZl07Ci0JaWYgKGhhbmRsZXIpCi0JCXJldHVybiBoYW5kbGVyKHZjcHUpOworCWlmIChoYW5kbGVyKSB7CisJCWlmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z3Bzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQorCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LAorCQkJCQkJICAgUEdNX1BSSVZJTEVHRURfT1BFUkFUSU9OKTsKKwkJZWxzZQorCQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CisJfQogCXJldHVybiAtRU5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCmluZGV4IDJhMDFiOWUuLmYyN2RiZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vc2lncC5jCisrKyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCkBAIC0xNTMsOCArMTUzLDYgQEAKIAogCXN3aXRjaCAocGFyYW1ldGVyICYgMHhmZikgewogCWNhc2UgMDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAia3ZtOiByZXF1ZXN0IHRvIHN3aXRjaCB0byBFU0EvMzkwIG1vZGUiCi0JCQkJCQkJIiBub3Qgc3VwcG9ydGVkIik7CiAJCXJjID0gMzsgLyogbm90IG9wZXJhdGlvbmFsICovCiAJCWJyZWFrOwogCWNhc2UgMToKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvZGVsYXkuYyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwppbmRleCA2Y2NiOWZhLi4zZjVmNjgwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTkyLDYgKzkzLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOwogCiAvKgogICogU2ltcGxlIHVkZWxheSB2YXJpYW50LiBUbyBiZSB1c2VkIG9uIHN0YXJ0dXAgYW5kIHJlYm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kaXY2NC5jIGIvYXJjaC9zMzkwL2xpYi9kaXY2NC5jCmluZGV4IGE1ZjgzMDAuLmQ5ZTYyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGl2NjQuYworKysgYi9hcmNoL3MzOTAvbGliL2RpdjY0LmMKQEAgLTYxLDcgKzYxLDcgQEAKIAkJIgljbHIJJTAsJTNcbiIKIAkJIglqbAkwZlxuIgogCQkiCXNscgklMCwlM1xuIgotCQkiCWFscgklMSwlMlxuIgorCQkiCWFoaQklMSwxXG4iCiAJCSIwOlxuIgogCQk6ICIrZCIgKHJlZzIpLCAiK2QiIChyZWczKSwgIj1kIiAodG1wKQogCQk6ICJkIiAoYmFzZSksICIyIiAoMVVMKSA6ICJjYyIgKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMgYi9hcmNoL3MzOTAvbGliL3N0cmluZy5jCmluZGV4IGFlNWNmNWQuLjQxNDNiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKKysrIGIvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYwpAQCAtNDQsNyArNDQsMTEgQEAKICAqLwogc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJldHVybiBfX3N0cmVuZChzKSAtIHM7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RybGVuKHMpOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiAKQEAgLTcwLDYgKzc0LDcgQEAKICAqLwogY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciBpbnQgcjAgYXNtKCIwIikgPSAwOwogCWNoYXIgKnJldCA9IGRlc3Q7CiAKQEAgLTc4LDYgKzgzLDkgQEAKIAkJICAgICAgOiAiKyZhIiAoZGVzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJICAgICAgOiAiY2MiLCAibWVtb3J5IiApOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRlc3QsIHNyYyk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc3RyY3B5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwppbmRleCBkNjYyMTViLi5iMGI4NGMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwpAQCAtMTE5LDggKzExOSw2IEBACiAJCQlnb3RvIGZhdWx0OwogCiAJCXBmbiA9IHB0ZV9wZm4oKnB0ZSk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbikpCi0JCQlnb3RvIG91dDsKIAogCQlvZmZzZXQgPSB1YWRkciAmIChQQUdFX1NJWkUgLSAxKTsKIAkJc2l6ZSA9IG1pbihuIC0gZG9uZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKQEAgLTEzNSw3ICsxMzMsNiBAQAogCQlkb25lICs9IHNpemU7CiAJCXVhZGRyICs9IHNpemU7CiAJfSB3aGlsZSAoZG9uZSA8IG4pOwotb3V0OgogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAlyZXR1cm4gbiAtIGRvbmU7CiBmYXVsdDoKQEAgLTE2Myw5ICsxNjAsNiBAQAogCQlnb3RvIGZhdWx0OwogCiAJcGZuID0gcHRlX3BmbigqcHRlKTsKLQlpZiAoIXBmbl92YWxpZChwZm4pKQotCQlnb3RvIG91dDsKLQogCXJldCA9IChwZm4gPDwgUEFHRV9TSElGVCkgKyAodWFkZHIgJiAoUEFHRV9TSVpFIC0gMSkpOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC0yNDQsMTEgKzIzOCw2IEBACiAJCQlnb3RvIGZhdWx0OwogCiAJCXBmbiA9IHB0ZV9wZm4oKnB0ZSk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbikpIHsKLQkJCWRvbmUgPSAtMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KIAkJb2Zmc2V0ID0gdWFkZHIgJiAoUEFHRV9TSVpFLTEpOwogCQlhZGRyID0gKGNoYXIgKikocGZuIDw8IFBBR0VfU0hJRlQpICsgb2Zmc2V0OwogCQlsZW4gPSBtaW4oY291bnQgLSBkb25lLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwpAQCAtMjU2LDcgKzI0NSw2IEBACiAJCWRvbmUgKz0gbGVuX3N0cjsKIAkJdWFkZHIgKz0gbGVuX3N0cjsKIAl9IHdoaWxlICgobGVuX3N0ciA9PSBsZW4pICYmIChkb25lIDwgY291bnQpKTsKLW91dDoKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJcmV0dXJuIGRvbmUgKyAxOwogZmF1bHQ6CkBAIC0zMjUsMTIgKzMxMyw3IEBACiAJCX0KIAogCQlwZm5fZnJvbSA9IHB0ZV9wZm4oKnB0ZV9mcm9tKTsKLQkJaWYgKCFwZm5fdmFsaWQocGZuX2Zyb20pKQotCQkJZ290byBvdXQ7CiAJCXBmbl90byA9IHB0ZV9wZm4oKnB0ZV90byk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbl90bykpCi0JCQlnb3RvIG91dDsKLQogCQlvZmZzZXRfZnJvbSA9IHVhZGRyX2Zyb20gJiAoUEFHRV9TSVpFLTEpOwogCQlvZmZzZXRfdG8gPSB1YWRkcl9mcm9tICYgKFBBR0VfU0laRS0xKTsKIAkJb2Zmc2V0X21heCA9IG1heChvZmZzZXRfZnJvbSwgb2Zmc2V0X3RvKTsKQEAgLTM0Miw3ICszMjUsNiBAQAogCQl1YWRkcl9mcm9tICs9IHNpemU7CiAJCXVhZGRyX3RvICs9IHNpemU7CiAJfSB3aGlsZSAoZG9uZSA8IG4pOwotb3V0OgogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAlyZXR1cm4gbiAtIGRvbmU7CiBmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggNGQ1MzcyMC4uODMzZTgzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTIwMCwyOSArMjAwLDYgQEAKIAlkb19ub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIDApOwogfQogCi0vKgotICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCi0gKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0gKi8KLXN0YXRpYyBpbnQgZG9fb3V0X29mX21lbW9yeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwotCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkgewotCQl5aWVsZCgpOwotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldHVybiAxOwotCX0KLQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQotCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCWRvX25vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0zNjcsNyArMzQ0LDYgQEAKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCi1zdXJ2aXZlOgogCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKIAkJYWRkcmVzcyAmPSBIUEFHRV9NQVNLOwogCS8qCkBAIC0zNzgsOCArMzU0LDggQEAKIAlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCB3cml0ZSk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQkJaWYgKGRvX291dF9vZl9tZW1vcnkocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcykpCi0JCQkJZ290byBzdXJ2aXZlOworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGYwMjU4Y2EuLmM2MzRkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtNDAsNyArNDAsOSBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhQQUdFX1NJWkUpKSk7CisKIGNoYXIgIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKK0VYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKIAogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9tbWFwLmMgYi9hcmNoL3MzOTAvbW0vbW1hcC5jCmluZGV4IDU5MzJhODIuLmUwMDhkMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9tbWFwLmMKKysrIGIvYXJjaC9zMzkwL21tL21tYXAuYwpAQCAtMzUsNyArMzUsNyBAQAogICogTGVhdmUgYW4gYXQgbGVhc3QgfjEyOCBNQiBob2xlLgogICovCiAjZGVmaW5lIE1JTl9HQVAgKDEyOCoxMDI0KjEwMjQpCi0jZGVmaW5lIE1BWF9HQVAgKFRBU0tfU0laRS82KjUpCisjZGVmaW5lIE1BWF9HQVAgKFNUQUNLX1RPUC82KjUpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2Uodm9pZCkKIHsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAllbHNlIGlmIChnYXAgPiBNQVhfR0FQKQogCQlnYXAgPSBNQVhfR0FQOwogCi0JcmV0dXJuIFRBU0tfU0laRSAtIChnYXAgJiBQQUdFX01BU0spOworCXJldHVybiBTVEFDS19UT1AgLSAoZ2FwICYgUEFHRV9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbW1hcF9pc19sZWdhY3kodm9pZCkKQEAgLTg5LDQyICs4OSw1OCBAQAogCiAjZWxzZQogCitpbnQgczM5MF9tbWFwX2NoZWNrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCkgJiYKKwkgICAgbGVuID49IFRBU0tfU0laRSAmJiBUQVNLX1NJWkUgPCAoMVVMIDw8IDUzKSkKKwkJcmV0dXJuIGNyc3RfdGFibGVfdXBncmFkZShjdXJyZW50LT5tbSwgMVVMIDw8IDUzKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcKIHMzOTBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIGFyZWE7CiAJaW50IHJjOwogCi0JYWRkciA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOwotCWlmIChhZGRyICYgflBBR0VfTUFTSykKLQkJcmV0dXJuIGFkZHI7Ci0JaWYgKHVubGlrZWx5KG1tLT5jb250ZXh0LmFzY2VfbGltaXQgPCBhZGRyICsgbGVuKSkgewotCQlyYyA9IGNyc3RfdGFibGVfdXBncmFkZShtbSwgYWRkciArIGxlbik7CisJYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOworCWlmICghKGFyZWEgJiB+UEFHRV9NQVNLKSkKKwkJcmV0dXJuIGFyZWE7CisJaWYgKGFyZWEgPT0gLUVOT01FTSAmJgorCSAgICAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzFCSVQpICYmIFRBU0tfU0laRSA8ICgxVUwgPDwgNTMpKSB7CisJCS8qIFVwZ3JhZGUgdGhlIHBhZ2UgdGFibGUgdG8gNCBsZXZlbHMgYW5kIHJldHJ5LiAqLworCQlyYyA9IGNyc3RfdGFibGVfdXBncmFkZShtbSwgMVVMIDw8IDUzKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByYzsKKwkJYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOwogCX0KLQlyZXR1cm4gYWRkcjsKKwlyZXR1cm4gYXJlYTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKLXMzOTBfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyMCwKK3MzOTBfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICBjb25zdCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgdW5zaWduZWQgbG9uZyBwZ29mZiwKIAkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwOworCXVuc2lnbmVkIGxvbmcgYXJlYTsKIAlpbnQgcmM7CiAKLQlhZGRyID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTsKLQlpZiAoYWRkciAmIH5QQUdFX01BU0spCi0JCXJldHVybiBhZGRyOwotCWlmICh1bmxpa2VseShtbS0+Y29udGV4dC5hc2NlX2xpbWl0IDwgYWRkciArIGxlbikpIHsKLQkJcmMgPSBjcnN0X3RhYmxlX3VwZ3JhZGUobW0sIGFkZHIgKyBsZW4pOworCWFyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOworCWlmICghKGFyZWEgJiB+UEFHRV9NQVNLKSkKKwkJcmV0dXJuIGFyZWE7CisJaWYgKGFyZWEgPT0gLUVOT01FTSAmJgorCSAgICAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzFCSVQpICYmIFRBU0tfU0laRSA8ICgxVUwgPDwgNTMpKSB7CisJCS8qIFVwZ3JhZGUgdGhlIHBhZ2UgdGFibGUgdG8gNCBsZXZlbHMgYW5kIHJldHJ5LiAqLworCQlyYyA9IGNyc3RfdGFibGVfdXBncmFkZShtbSwgMVVMIDw8IDUzKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByYzsKKwkJYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sCisJCQkJCQkgICAgICBwZ29mZiwgZmxhZ3MpOwogCX0KLQlyZXR1cm4gYWRkcjsKKwlyZXR1cm4gYXJlYTsKIH0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uLCBjYWxsZWQgdmVyeSBlYXJseSBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGEgbmV3CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCAwNzY3ODI3NS4uYmU2YzFjZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0xMTcsNiArMTE3LDcgQEAKIAkJY3JzdF90YWJsZV9pbml0KHRhYmxlLCBlbnRyeSk7CiAJCXBnZF9wb3B1bGF0ZShtbSwgKHBnZF90ICopIHRhYmxlLCAocHVkX3QgKikgcGdkKTsKIAkJbW0tPnBnZCA9IChwZ2RfdCAqKSB0YWJsZTsKKwkJbW0tPnRhc2tfc2l6ZSA9IG1tLT5jb250ZXh0LmFzY2VfbGltaXQ7CiAJCXRhYmxlID0gTlVMTDsKIAl9CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwpAQCAtMTU0LDYgKzE1NSw3IEBACiAJCQlCVUcoKTsKIAkJfQogCQltbS0+cGdkID0gKHBnZF90ICopIChwZ2RfdmFsKCpwZ2QpICYgX1JFR0lPTl9FTlRSWV9PUklHSU4pOworCQltbS0+dGFza19zaXplID0gbW0tPmNvbnRleHQuYXNjZV9saW1pdDsKIAkJY3JzdF90YWJsZV9mcmVlKG1tLCAodW5zaWduZWQgbG9uZyAqKSBwZ2QpOwogCX0KIAl1cGRhdGVfbW0obW0sIGN1cnJlbnQpOwpAQCAtMjU2LDYgKzI1OCwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKm9sZF9tbTsKIAorCS8qIERvIHdlIGhhdmUgc3dpdGNoZWQgYW1vZGU/IElmIG5vLCB3ZSBjYW5ub3QgZG8gc2llICovCisJaWYgKCFzd2l0Y2hfYW1vZGUpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogRG8gd2UgaGF2ZSBwZ3N0ZXM/IGlmIHllcywgd2UgYXJlIGRvbmUgKi8KIAlpZiAodHNrLT5tbS0+Y29udGV4dC5oYXNfcGdzdGUpCiAJCXJldHVybiAwOwpAQCAtMjkwLDcgKzI5Niw3IEBACiAJdHNrLT5tbSA9IHRzay0+YWN0aXZlX21tID0gbW07CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJdXBkYXRlX21tKG1tLCB0c2spOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXRhc2tfdW5sb2NrKHRzayk7CiAJbW1wdXQob2xkX21tKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBlYmFiZTUxLi44ZDUwZDUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xMDcsNiArMTA3LDkgQEAKIGNvbmZpZyBTWVNfU1VQUE9SVFNfUENJCiAJYm9vbAogCitjb25maWcgU1lTX1NVUFBPUlRTX0NNVAorCWJvb2wKKwogY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAogCWRlZl9ib29sIHkKIApAQCAtMTc2LDYgKzE3OSwxMCBAQAogY29uZmlnIENQVV9TSFgzCiAJYm9vbAogCitjb25maWcgQVJDSF9TSE1PQklMRQorCWJvb2wKKwlzZWxlY3QgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCisKIGNob2ljZQogCXByb21wdCAiUHJvY2Vzc29yIHN1Yi10eXBlIHNlbGVjdGlvbiIKIApAQCAtMTg4LDYgKzE5NSw3IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJYm9vbCAiU3VwcG9ydCBTSDc2MTkgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogIyBTSC0yQSBQcm9jZXNzb3IgU3VwcG9ydAogCkBAIC0yMDAsMTUgKzIwOCwxOCBAQAogCWJvb2wgIlN1cHBvcnQgU0g3MjAzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKIAlzZWxlY3QgQ1BVX0hBU19GUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MjA2CiAJYm9vbCAiU3VwcG9ydCBTSDcyMDYgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDcyNjMKIAlib29sICJTdXBwb3J0IFNINzI2MyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCiAJc2VsZWN0IENQVV9IQVNfRlBVCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX01YRwogCWJvb2wgIlN1cHBvcnQgTVgtRyBwcm9jZXNzb3IiCkBAIC0zMjMsNyArMzM0LDkgQEAKIAlib29sICJTdXBwb3J0IFNINzcyMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAloZWxwCiAJICBTZWxlY3QgU0g3NzIzIGlmIHlvdSBoYXZlIGFuIFNILU1vYmlsZVIyIENQVS4KIApAQCAtMzQ4LDYgKzM2MSwxNCBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAorY29uZmlnIENQVV9TVUJUWVBFX1NINzc4NgorCWJvb2wgIlN1cHBvcnQgU0g3Nzg2IHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NINEEKKwlzZWxlY3QgQ1BVX1NIWDMKKwlzZWxlY3QgQ1BVX0hBU19QVEVBRVgKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSFgzCiAJYm9vbCAiU3VwcG9ydCBTSC1YMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCkBAIC0zNjIsMjAgKzM4MywyNiBAQAogY29uZmlnIENQVV9TVUJUWVBFX1NINzM0MwogCWJvb2wgIlN1cHBvcnQgU0g3MzQzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAorCXNlbGVjdCBBUkNIX1NITU9CSUxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzcyMgogCWJvb2wgIlN1cHBvcnQgU0g3NzIyIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDczNjYKIAlib29sICJTdXBwb3J0IFNINzM2NiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBTF9EU1AKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiAjIFNILTUgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtMzk4LDI1ICs0MjUsMzQgQEAKIG1lbnUgIlRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uIgogCiBjb25maWcgU0hfVE1VCi0JZGVmX2Jvb2wgeQotCXByb21wdCAiVE1VIHRpbWVyIHN1cHBvcnQiCisJYm9vbCAiVE1VIHRpbWVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU0gzIHx8IENQVV9TSDQKKwlkZWZhdWx0IHkKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgVE1VIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKIGNvbmZpZyBTSF9DTVQKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJDTVQgdGltZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9TSDIgJiYgIUNQVV9TVUJUWVBFX01YRworCWJvb2wgIkNNVCB0aW1lciBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX0NNVCAmJiBDUFVfU0gyCisJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIENNVCBhcyB0aGUgc3lzdGVtIHRpbWVyLgogCisjCisjIFN1cHBvcnQgZm9yIHRoZSBuZXctc3R5bGUgQ01UIGRyaXZlci4gVGhpcyB3aWxsIHJlcGxhY2UgU0hfQ01UCisjIG9uY2UgaXRzIG90aGVyIGRlcGVuZGVuY2llcyBhcmUgbWVyZ2VkLgorIworY29uZmlnIFNIX1RJTUVSX0NNVAorCWJvb2wgIkNNVCBjbG9ja2V2ZW50cyBkcml2ZXIiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfQ01UICYmICFTSF9DTVQKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCiBjb25maWcgU0hfTVRVMgotCWRlZl9ib29sIG4KLQlwcm9tcHQgIk1UVTIgdGltZXIgc3VwcG9ydCIKKwlib29sICJNVFUyIHRpbWVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU0gyQQorCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBNVFUyIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKQEAgLTQyNiw3ICs0NjIsOCBAQAogCQkJQ1BVX1NVQlRZUEVfU0g3NzYzCiAJZGVmYXVsdCAiODYiIGlmIENQVV9TVUJUWVBFX1NINzYxOQogCWRlZmF1bHQgIjE0MCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjA2Ci0JZGVmYXVsdCAiMTQyIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMKKwlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMyAmJiBTSF9DTVQKKwlkZWZhdWx0ICIxNTMiIGlmIENQVV9TVUJUWVBFX1NINzIwMyAmJiBTSF9NVFUyCiAJZGVmYXVsdCAiMjM4IiBpZiBDUFVfU1VCVFlQRV9NWEcKIAlkZWZhdWx0ICIxNiIKIApAQCAtNDM4LDcgKzQ3NSw4IEBACiAJZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzc3MCB8fCBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwIHx8IENQVV9TVUJUWVBFX1NINzcwNSB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDMgfHwgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcgICAgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKQEAgLTUyMSw2ICs1NTksMTMgQEAKIAogCSAgRm9yIG1vcmUgZGV0YWlscyBzZWUgRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKIAorY29uZmlnIEtFWEVDX0pVTVAKKwlib29sICJrZXhlYyBqdW1wIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gU1VQRVJIMzIgJiYgS0VYRUMgJiYgSElCRVJOQVRJT04gJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSnVtcCBiZXR3ZWVuIG9yaWdpbmFsIGtlcm5lbCBhbmQga2V4ZWNlZCBrZXJuZWwgYW5kIGludm9rZQorCSAgY29kZSB2aWEgS0VYRUMKKwogY29uZmlnIFNFQ0NPTVAKIAlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuY3B1IGIvYXJjaC9zaC9LY29uZmlnLmNwdQppbmRleCAwZTI3ZmUzLi5jN2Q3MDQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcuY3B1CisrKyBiL2FyY2gvc2gvS2NvbmZpZy5jcHUKQEAgLTEwNCw2ICsxMDQsOSBAQAogY29uZmlnIENQVV9IQVNfUFRFQQogCWJvb2wKIAorY29uZmlnIENQVV9IQVNfUFRFQUVYCisJYm9vbAorCiBjb25maWcgQ1BVX0hBU19EU1AKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDQwNjdiMGQuLmJlY2UxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtODAsNiArODAsNyBAQAogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NVUEVSSDMyKQkJCTo9IHpJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1NINzc4NUxDUikJCTo9IHVJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1JTSykJCQk6PSB1SW1hZ2UKK2RlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9VUlFVRUxMKQkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwppbmRleCA4NjE5MTQ3Li5kY2MxYWY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKQEAgLTE1NSwxNyArMTU1LDIyIEBACiAKIGNvbmZpZyBTSF9TSDc3ODVMQ1JfMjlCSVRfUEhZU01BUFMKIAlib29sICJTSDc3ODVMQ1IgMjliaXQgcGh5c21hcHMiCi0JZGVwZW5kcyBvbiBTSF9TSDc3ODVMQ1IKKwlkZXBlbmRzIG9uIFNIX1NINzc4NUxDUiAmJiAyOUJJVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgYm9hcmQgaGFzIDIgcGh5c2ljYWwgbWVtb3J5IG1hcHMuIEl0IGNhbiBiZSBjaGFuZ2VkIHdpdGgKIAkgIERJUCBzd2l0Y2goUzItNSkuIElmIHlvdSBzZXQgdGhlIERJUCBzd2l0Y2ggZm9yIFMyLTUgPSBPTiwKIAkgIHlvdSBjYW4gYWNjZXNzIGFsbCBvbi1ib2FyZCBkZXZpY2UgaW4gMjliaXQgYWRkcmVzcyBtb2RlLgogCitjb25maWcgU0hfVVJRVUVMTAorCWJvb2wgIlVycXVlbGwiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODYKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNzMsNyArMTc4LDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMwotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODUsNiArMTkwLDEzIEBACiAJICBTZWxlY3QgU0g3NzYzUkRQIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU0g3NzYzCiAJICBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgU0hfRVNQVAorCWJvb2wgIkVTUFQiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjMKKwloZWxwCisJICBTZWxlY3QgRVNQVCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc2MworCSAgd2l0aCBnaWdhYml0IGV0aGVyIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9FRE9TSzc3MDUKIAlib29sICJFRE9TSzc3MDUiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDUKQEAgLTI0MCw3ICsyNTIsNyBAQAogY29uZmlnIFNIX01BR0lDX1BBTkVMX1IyCiAJYm9vbCAiTWFnaWMgUGFuZWwgUjIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjAKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IE1hZ2ljIFBhbmVsIFIyIGlmIGNvbmZpZ3VyaW5nIGZvciBNYWdpYyBQYW5lbCBSMi4KIApAQCAtMjQ5LDYgKzI2MSwxMyBAQAogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g1XzEwMSB8fCBDUFVfU1VCVFlQRV9TSDVfMTAzCiAJc2VsZWN0IFNZU19TVVBQT1JUU19QQ0kKIAorY29uZmlnIFNIX1BPTEFSSVMKKwlib29sICJTTVNDIFBvbGFyaXMiCisJc2VsZWN0IENQVV9IQVNfSVBSX0lSUQorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA5CisJaGVscAorCSAgU2VsZWN0IGlmIGNvbmZpZ3VyaW5nIGZvciBhbiBTTVNDIFBvbGFyaXMgZGV2ZWxvcG1lbnQgYm9hcmQKKwogZW5kbWVudQogCiBzb3VyY2UgImFyY2gvc2gvYm9hcmRzL21hY2gtcjJkL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDI2OWFlMmIuLjdiYWEyMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC00LDUgKzQsOCBAQAogb2JqLSQoQ09ORklHX1NIX0FQMzI1UlhBKQkrPSBib2FyZC1hcDMyNXJ4YS5vCiBvYmotJChDT05GSUdfU0hfTUFHSUNfUEFORUxfUjIpCSs9IGJvYXJkLW1hZ2ljcGFuZWxyMi5vCiBvYmotJChDT05GSUdfU0hfU0g3Nzg1TENSKQkrPSBib2FyZC1zaDc3ODVsY3Iubworb2JqLSQoQ09ORklHX1NIX1VSUVVFTEwpCSs9IGJvYXJkLXVycXVlbGwubwogb2JqLSQoQ09ORklHX1NIX1NITUlOKQkJKz0gYm9hcmQtc2htaW4ubwogb2JqLSQoQ09ORklHX1NIX0VET1NLNzc2MCkJKz0gYm9hcmQtZWRvc2s3NzYwLm8KK29iai0kKENPTkZJR19TSF9FU1BUKQkJKz0gYm9hcmQtZXNwdC5vCitvYmotJChDT05GSUdfU0hfUE9MQVJJUykJKz0gYm9hcmQtcG9sYXJpcy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCAxNWI2ZDQ1Li5hNjRlMzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE2Niw2ICsxNjYsMTYgQEAKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAorc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwkvKiBiYWNrbGlnaHQgKi8KKwljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CisKKwkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT0ZGICovCisJY3RybF9vdXR3KDAsIEZQR0FfTENEUkVHKTsKK30KKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfRVhURVJOQUwsCiAJLmNoWzBdID0gewpAQCAtMTkxLDYgKzIwMSw3IEBACiAJCX0sCiAJCS5ib2FyZF9jZmcgPSB7CiAJCQkuZGlzcGxheV9vbiA9IGFwMzIwX3d2Z2FfcG93ZXJfb24sCisJCQkuZGlzcGxheV9vZmYgPSBhcDMyMF93dmdhX3Bvd2VyX29mZiwKIAkJfSwKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2U1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBEYXRhIFRlY2hub2xvZ3kgSW5jLiBFU1BULUdJR0EgYm9hcmQgc3Vwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KKworLyogTk9SIEZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiVS1Cb290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDIgKiBTWl8xMjhLKSwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gIkxpbnV4LUtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gKDIwICogU1pfMTI4SyksCisJfSwgeworCQkubmFtZSA9ICJSb290IEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVzcHRfbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKKwkucGFydHMgPSBlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAiTk9SIEZsYXNoIiwKKwkJLnN0YXJ0ID0gMCwKKwkJLmVuZCA9IFNaXzhNIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcHRfbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkucmVzb3VyY2UgPSBlc3B0X25vcl9mbGFzaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXNwdF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogU0gtRXRoZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICA9IDB4RkVFMDA4MDAsICAgLyogdXNlIGV0aDEgKi8KKwkJLmVuZCAgICA9IDB4RkVFMDBGN0MgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgID0gNTcsICAgLyogaXJxIG51bWJlciAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSBzaDc3NjNfZXRoX3BkYXRhID0geworCS5waHkgPSAwLAorCS5lZG1hY19lbmRpYW4gPSBFRE1BQ19MSVRUTEVfRU5ESUFOLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwdF9ldGhfZGV2aWNlID0geworCS5uYW1lICAgICAgID0gInNoLWV0aCIsCisJLnJlc291cmNlICAgPSBzaF9ldGhfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hfZXRoX3Jlc291cmNlcyksCisJLmRldiAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNoNzc2M19ldGhfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplc3B0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlc3B0X25vcl9mbGFzaF9kZXZpY2UsCisJJmVzcHRfZXRoX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVzcHRfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlc3B0X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoZXNwdF9kZXZpY2VzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoZXNwdF9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9lc3B0IF9faW5pdG12ID0geworCS5tdl9uYW1lID0gIkVTUFQtR0lHQSIsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjA3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBKdW5lIDIwMDYgc3RldmUuZ2xlbmRpbm5pbmdAc21zYy5jb20KKyAqCisgKiBQb2xhcmlzLXNwZWNpZmljIHJlc291cmNlIGRlY2xhcmF0aW9uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxjcHUvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gtc2UvbWFjaC9zZS5oPgorCisjZGVmaW5lIEJDUjIJCSgweEZGRkZGRjYyKQorI2RlZmluZSBXQ1IyCQkoMHhGRkZGRkY2NikKKyNkZWZpbmUgQVJFQTVfV0FJVF9DVFJMCSgweDFDMDApCisjZGVmaW5lIFdBSVRfU1RBVEVTXzEwCSgweDcpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtbWVtb3J5IiwKKwkJLnN0YXJ0CQk9IFBBX0VYVDUsCisJCS5lbmQJCT0gUEFfRVhUNSArIDB4MWZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtaXJxIiwKKwkJLnN0YXJ0CQk9IElSUTBfSVJRLAorCQkuZW5kCQk9IElSUTBfSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYXJ0YmVhdF9iaXRfcG9zW10gPSB7IDAsIDEsIDIsIDMgfTsKKworc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKKwkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAorCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCisJLnJlZ3NpemUJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQT1JUX1BDRFIsCisJCS5lbmQJPSBQT1JUX1BDRFIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvbGFyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtc2M5MTF4X2RldmljZSwKKwkmaGVhcnRiZWF0X2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBvbGFyaXNfaW5pdGlhbGlzZSh2b2lkKQoreworCXUxNiB3Y3IsIGJjcl9tYXNrOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ29uZmlndXJpbmcgUG9sYXJpcyBleHRlcm5hbCBidXNcbiIpOworCisJLyogQ29uZmlndXJlIGFyZWEgNSB3aXRoIDIgd2FpdCBzdGF0ZXMgKi8KKwl3Y3IgPSBjdHJsX2ludyhXQ1IyKTsKKwl3Y3IgJj0gKH5BUkVBNV9XQUlUX0NUUkwpOworCXdjciB8PSAoV0FJVF9TVEFURVNfMTAgPDwgMTApOworCWN0cmxfb3V0dyh3Y3IsIFdDUjIpOworCisJLyogQ29uZmlndXJlIGFyZWEgNSBmb3IgMzItYml0IGFjY2VzcyAqLworCWJjcl9tYXNrID0gY3RybF9pbncoQkNSMik7CisJYmNyX21hc2sgfD0gMSA8PCAxMDsKKwljdHJsX291dHcoYmNyX21hc2ssIEJDUjIpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHBvbGFyaXNfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShwb2xhcmlzX2RldmljZXMpKTsKK30KK2FyY2hfaW5pdGNhbGwocG9sYXJpc19pbml0aWFsaXNlKTsKKworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBpcHJfaXJxX3RhYmxlW10gPSB7CisJLyogRXh0ZXJuYWwgSVJRcyAqLworCXsgSVJRMF9JUlEsIDAsICAwLCAgMSwgfSwJLyogSVJRMCAqLworCXsgSVJRMV9JUlEsIDAsICA0LCAgMSwgfSwJLyogSVJRMSAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXByX29mZnNldHNbXSA9IHsKKwlJTlRDX0lQUkMKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXByX2Rlc2MgaXByX2lycV9kZXNjID0geworCS5pcHJfb2Zmc2V0cwk9IGlwcl9vZmZzZXRzLAorCS5ucl9vZmZzZXRzCT0gQVJSQVlfU0laRShpcHJfb2Zmc2V0cyksCisKKwkuaXByX2RhdGEJPSBpcHJfaXJxX3RhYmxlLAorCS5ucl9pcnFzCT0gQVJSQVlfU0laRShpcHJfaXJxX3RhYmxlKSwKKwkuY2hpcCA9IHsKKwkJLm5hbWUJPSAic2g3NzA5LWV4dCIsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3BvbGFyaXNfaXJxKHZvaWQpCit7CisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkEpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkIpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkMpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkQpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkUpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkYpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkcpOworCisJcmVnaXN0ZXJfaXByX2NvbnRyb2xsZXIoJmlwcl9pcnFfZGVzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfcG9sYXJpcyBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiUG9sYXJpcyIsCisJLm12X25yX2lycXMJCT0gNjEsCisJLm12X2luaXRfaXJxCQk9IGluaXRfcG9sYXJpc19pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCAzOGE2NDk2Li45NGMwMjk2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjc1LDcgKzI3NSwxOCBAQAogCiBzdGF0aWMgdm9pZCBzaDc3ODVsY3JfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JY3RybF9vdXRiKDB4MDEsIFAyU0VHQUREUihQTERfUE9GQ1IpKTsKKwl1bnNpZ25lZCBjaGFyICpwOworCisJcCA9IGlvcmVtYXAoUExEX1BPRkNSLCBQTERfUE9GQ1IgKyAxKTsKKwlpZiAoIXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBlcnJvci5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwkqcCA9IDB4MDE7CisJaW91bm1hcChwKTsKKwlzZXRfYmxfYml0KCk7CisJd2hpbGUgKDEpCisJCWNwdV9yZWxheCgpOwogfQogCiAvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gU0g3Nzg2IFVycXVlbGwgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC91cnF1ZWxsLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4Ni5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBCT0FSRFJFRyhTTEVEUiksCisJCS5lbmQJPSBCT0FSRFJFRyhTTEVEUiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0geworCS5yZWdzaXplID0gMTYsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7CisJLmZsYWdzID0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9ldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSAgID0gIlNNQzkxQzExMSIgLAorCQkuc3RhcnQgID0gMHgwNTgwMDMwMCwKKwkJLmVuZCAgICA9IDB4MDU4MDAzMGYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDExLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9ldGhfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzbWM5MXgiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc21jOTF4X2V0aF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNtYzkxeF9ldGhfcmVzb3VyY2VzLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtYzkxeF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJib290ZW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNE0sCisJfSwKKwl7CisJCS5uYW1lCQk9ICJkYXRhIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBub3JfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gTk9SX0ZMQVNIX0FERFIsCisJCS5lbmQJPSBOT1JfRkxBU0hfQUREUiArIE5PUl9GTEFTSF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG5vcl9mbGFzaF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXJxdWVsbF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21jOTF4X2V0aF9kZXZpY2UsCisJJm5vcl9mbGFzaF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1cnF1ZWxsX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwkvKiBVU0IgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9VU0JfT1ZDMCwgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1VTQl9QRU5DMCwgTlVMTCk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXModXJxdWVsbF9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHVycXVlbGxfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKHVycXVlbGxfZGV2aWNlc19zZXR1cCk7CisKK3N0YXRpYyB2b2lkIHVycXVlbGxfcG93ZXJfb2ZmKHZvaWQpCit7CisJX19yYXdfd3JpdGV3KDB4YTVhNSwgVUJPQVJEUkVHKFNSU1RSKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1cnF1ZWxsX2luaXRfaXJxKHZvaWQpCit7CisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwX01BU0spOworfQorCisvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLworc3RhdGljIHZvaWQgX19pbml0IHVycXVlbGxfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gVXJxdWVsbCBzdXBwb3J0LlxuIik7CisKKwlwbV9wb3dlcl9vZmYgPSB1cnF1ZWxsX3Bvd2VyX29mZjsKK30KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3VycXVlbGwgX19pbml0bXYgPSB7CisJLm12X25hbWUJPSAiVXJxdWVsbCIsCisJLm12X3NldHVwCT0gdXJxdWVsbF9zZXR1cCwKKwkubXZfaW5pdF9pcnEJPSB1cnF1ZWxsX2luaXRfaXJxLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKaW5kZXggMDgwNTdmNi4uZGVmNDljYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKQEAgLTE4LDcgKzE4LDcgQEAKIGNvbmZpZyBTSF9SNzc4NVJQCiAJYm9vbCAiUjc3ODVSUCBib2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3Nzg1Ci0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCiBlbmRjaG9pY2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMKaW5kZXggNDRiNjQ4Yy4uNGYxOGQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TCkBAIC0xMCw0NyArMTAsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8Y3B1L21tdV9jb250ZXh0Lmg+CiAKLSNkZWZpbmUgazAJcjAKLSNkZWZpbmUgazEJcjEKLSNkZWZpbmUgazIJcjIKLSNkZWZpbmUgazMJcjMKLSNkZWZpbmUgazQJcjQKLQogLyoKICAqIEtlcm5lbCBtb2RlIHJlZ2lzdGVyIHVzYWdlOgogICoJazAJc2NyYXRjaAogICoJazEJc2NyYXRjaAotICoJazIJc2NyYXRjaCAoRXhjZXB0aW9uIGNvZGUpCi0gKglrMwlzY3JhdGNoIChSZXR1cm4gYWRkcmVzcykKLSAqCWs0CXNjcmF0Y2gKLSAqCWs1CXJlc2VydmVkCi0gKglrNglHbG9iYWwgSW50ZXJydXB0IE1hc2sgKDAtLTE1IDw8IDQpCi0gKglrNwlDVVJSRU5UX1RIUkVBRF9JTkZPIChwb2ludGVyIHRvIGN1cnJlbnQgdGhyZWFkIGluZm8pCisgKiBGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgZW50cnkuUwogICovCiAKKyNkZWZpbmUgazAJcjAKKyNkZWZpbmUgazEJcjEKKwogRU5UUlkod2FrZXVwX3N0YXJ0KQogISBjbGVhciBTVEJZIGJpdAotCW1vdgkjLTEyNiwgazIKKwltb3YJIy0xMjYsIGsxCiAgICAJYW5kCSMxMjcsIGswCi0JbW92LmIJazAsIEBrMgorCW1vdi5iCWswLCBAazEKICEgZW5hYmxlIHJlZnJlc2gKIAltb3YubAk1ZiwgazEKIAltb3Yudwk2ZiwgazAKICAgCW1vdi53CWswLCBAazEKICEganVtcCB0byBoYW5kbGVyCi0JbW92LmwJMmYsIGsyCi0JbW92LmwJM2YsIGszCi0JbW92LmwJQGsyLCBrMgotCiAJbW92LmwJNGYsIGsxCiAJam1wCUBrMQotCW5vcAorCSBub3AKIAogCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTI6CS5sb25nCUlOVEVWVAotMzoJLmxvbmcJcmV0X2Zyb21faXJxCi00OgkubG9uZwloYW5kbGVfZXhjZXB0aW9uCis0OgkubG9uZwloYW5kbGVfaW50ZXJydXB0CiA1OgkubG9uZwkweGZmZmZmZjY4CiA2Ogkud29yZAkweDA1MjQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IDc0Njc0MmJkLi44ZjMwNWIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIAkubXZfc2V0dXAgPSBocDZ4eF9zZXR1cCwKIAkvKiBJUlEncyA6IENQVSg2NCkgKyBDQ0hJUCgxNikgKyBGUkVFX1RPX1VTRSg2KSAqLwogCS5tdl9ucl9pcnFzID0gSEQ2NDQ2MV9JUlFCQVNFICsgSEQ2NDQ2MV9JUlFfTlVNICsgNiwKLQkubXZfaXJxX2RlbXV4ID0gaGQ2NDQ2MV9pcnFfZGVtdXgsCiAJLyogRW5hYmxlIElSUTAgLT4gSVJRMyBpbiBJUlFfTU9ERSAqLwogCS5tdl9pbml0X2lycSA9IGhwNnh4X2luaXRfaXJxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCAyOGU1NmM1Li5iYzM1YjRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC00NTAsNiArNDUwLDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1pZ29yX2RldmljZXNfc2V0dXAodm9pZCkKIHsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIExldCBEMTEgTEVEIHNob3cgU1RBVFVTMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NUQVRVUzAsIE5VTEwpOworCisJLyogTGl0IEQxMiBMRUQgc2hvdyBQRFNUQVRVUyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKKyNlbHNlCiAJLyogTGl0IEQxMSBMRUQgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVEo3LCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo3LCAxKTsKQEAgLTQ1OSw2ICs0NjcsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX1BUSjUsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjUsIDEpOwogCWdwaW9fZXhwb3J0KEdQSU9fUFRKNSwgMCk7CisjZW5kaWYKIAogCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcKaW5kZXggYmZmMDk1ZC4uYWVmZjNiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCA2ZjkyNmZkLi4zOTA1MzRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTYzLDE1ICs2MywxOSBAQAogCX0sCiB9OwogCi0vKiBTSC1FdGhlciAqLworLyoKKyAqIFNILUV0aGVyCisgKgorICogU0ggRXRoZXIgb2YgU0g3NzYzIGhhcyBtdWx0aSBJUlEgaGFuZGxpbmcuCisgKiAoNTcsNTgsNTkgLT4gNTcpCisgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ICA9IDB4RkVFMDA4MDAsICAgLyogdXNlIGV0aDEgKi8KIAkJLmVuZCAgICA9IDB4RkVFMDBGN0MgLSAxLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgID0gNTgsICAgLyogaXJxIG51bWJlciAqLwotCQkuZW5kICAgID0gNTgsCisJCS5zdGFydCAgPSA1NywgICAvKiBpcnEgbnVtYmVyICovCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBjMTZjY2Q0Li45NTQ4M2QxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0zMywyMCArMzMsMjQgQEAKICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXg6IEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL2NvbXByZXNzZWQgJEAKIAotaWZlcSAoJChDT05GSUdfMzJCSVQpLHkpCi1LRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKLQkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKLWVsc2UKLUtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAotCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKK0tFUk5FTF9NRU1PUlkgOj0gMHgwMDAwMDAwMAoraWZlcSAoJChDT05GSUdfUE1CX0ZJWEVEKSx5KQorS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpICYgMHgxZmZmZmZmZl0nKQogZW5kaWYKK2lmZXEgKCQoQ09ORklHXzI5QklUKSx5KQorS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpXScpCitlbmRpZgorCitLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAorCQkJJChLRVJORUxfTUVNT1JZKSArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCiAKIEtFUk5FTF9FTlRSWQk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKKwkJCSQoS0VSTkVMX01FTU9SWSkgKyBcCiAJCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKSArICQoQ09ORklHX0VOVFJZX09GRlNFVCldJykKIAogcXVpZXRfY21kX3VpbWFnZSA9IFVJTUFHRSAgJEAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKaW5kZXggMjdjZWViOS4uMjVlZjkxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKQEAgLTUzLDIxICs1MywyMiBAQAogCS51bm1hc2sJCT0gaGQ2NDQ2MV91bm1hc2tfaXJxLAogfTsKIAotaW50IGhkNjQ0NjFfaXJxX2RlbXV4KGludCBpcnEpCitzdGF0aWMgdm9pZCBoZDY0NDYxX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JaWYgKGlycSA9PSBDT05GSUdfSEQ2NDQ2MV9JUlEpIHsKLQkJdW5zaWduZWQgc2hvcnQgYml0OwotCQl1bnNpZ25lZCBzaG9ydCBuaXJyID0gaW53KEhENjQ0NjFfTklSUik7Ci0JCXVuc2lnbmVkIHNob3J0IG5pbXIgPSBpbncoSEQ2NDQ2MV9OSU1SKTsKLQkJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KEhENjQ0NjFfTklSUik7CisJc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKKwl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IEhENjQ0NjFfSVJRQkFTRTsKIAotCQluaXJyICY9IH5uaW1yOwotCQlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgMTY7IGJpdCA8PD0gMSwgaSsrKQotCQkJaWYgKG5pcnIgJiBiaXQpCi0JCQkJYnJlYWs7Ci0JCWlycSA9IEhENjQ0NjFfSVJRQkFTRSArIGk7CisJaW50diAmPSAoMSA8PCBIRDY0NDYxX0lSUV9OVU0pIC0gMTsKKworCXdoaWxlIChpbnR2KSB7CisJCWlmIChpbnR2ICYgMSkgeworCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7CisJCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKKwkJfQorCQlpbnR2ID4+PSAxOworCQlleHRfaXJxKys7CiAJfQotCXJldHVybiBpcnE7CiB9CiAKIGludCBfX2luaXQgc2V0dXBfaGQ2NDQ2MSh2b2lkKQpAQCAtOTMsNiArOTQsOSBAQAogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmhkNjQ0NjFfaXJxX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAorCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKENPTkZJR19IRDY0NDYxX0lSUSwgaGQ2NDQ2MV9pcnFfZGVtdXgpOworCXNldF9pcnFfdHlwZShDT05GSUdfSEQ2NDQ2MV9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CisKICNpZmRlZiBDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSCiAJcHJpbnRrKEtFUk5fSU5GTyAiSEQ2NDQ2MTogZW5hYmxpbmcgUENNQ0lBIGRldmljZXNcbiIpOwogCV9fcmF3X3dyaXRlYigweDRjLCBIRDY0NDYxX1BDQzFDU0NJRVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2VjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTkwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3CisjIFR1ZSBNYXIgMTcgMTM6MjU6NTggMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfVVRTX05TPXkKK0NPTkZJR19JUENfTlM9eQorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX1NINzc2M1JEUCBpcyBub3Qgc2V0CitDT05GSUdfU0hfRVNQVD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0yOAorQ09ORklHX1NIX1BDTEtfRlJFUT02NjY2NjY2NgorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NIX0VUSD15CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GT1JFSUdOX0VORElBTj15CitDT05GSUdfRkJfQk9USF9FTkRJQU49eQorIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0g3NzYwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfTE9HT19TVVBFUkhfTU9OTz15CitDT05GSUdfTE9HT19TVVBFUkhfVkdBMTY9eQorQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0FVVE9GU19GUz15CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT15CitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj15CitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND15CitDT05GSUdfTkxTX0lTTzg4NTlfOD15CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9eQorQ09ORklHX05MU19JU084ODU5XzM9eQorQ09ORklHX05MU19JU084ODU5XzQ9eQorQ09ORklHX05MU19JU084ODU5XzU9eQorQ09ORklHX05MU19JU084ODU5XzY9eQorQ09ORklHX05MU19JU084ODU5Xzc9eQorQ09ORklHX05MU19JU084ODU5Xzk9eQorQ09ORklHX05MU19JU084ODU5XzEzPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xND15CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQorQ09ORklHX05MU19LT0k4X1I9eQorQ09ORklHX05MU19LT0k4X1U9eQorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjBkZWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTY5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0CisjIFdlZCBGZWIgMTEgMTg6NDE6NTkgMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MEMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVX0VNVT15CitDT05GSUdfU0hfQURDPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19JUFJfSVJRPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAorQ09ORklHX1NIX1BPTEFSSVM9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMwMDAwMDAKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCitDT05GSUdfU0hfRE1BX0FQST15CitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIG1lbT02M00gbXRkcGFydHM9cGh5c21hcC1mbGFzaC4wOjB4MDAxMDAwMDAoYm9vdGxvYWRlcilybywweDAwNTAwMDAwKEtlcm5lbClybywweDAwQTAwMDAwKEZpbGVzeXN0ZW0pIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9DT01QQVQ9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMTAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0g9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CitDT05GSUdfREVCVUdfUElfTElTVD15CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVA9eQorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tERVAgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0c9eQorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weDAwMDAwMDAwCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9HRU5FUklDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTFkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE1NTMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgRnJpIEZlYiAyMCAxODoyNToyOSAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4NDAwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDIwMDAwMDAwCisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQl9FTkFCTEU9eQorIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKK0NPTkZJR19QTUJfRklYRUQ9eQorIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTIKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKK0NPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9TSDc3ODVMQ1I9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MjgKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX1BDSV9BVVRPPXkKK0NPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUw9eQorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorQ09ORklHX1I4MTY5PXkKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPUENBPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GSUxMUkVDVD1tCitDT05GSUdfRkJfU1lTX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9TWVNfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRk9QUz1tCitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD1tCisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1RFU1Q9bQorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlM1QzM3Mj15CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTcyNmM3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzMzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgVGh1IE1hciAgNSAxNzoyODoxMyAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODY9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAorQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKK0NPTkZJR19WU1lTQ0FMTD15CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9VUlFVRUxMPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CitDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsIDM4NDAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpcD1vbiBpZ25vcmVfbG9nbGV2ZWwgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbWNodW5rLnZwdT00bSIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9NgorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09QQ0E9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfTUZEX1NNNTAxX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCitDT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZPUFM9bQorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0hfTU9CSUxFX0xDREM9bQorQ09ORklHX0ZCX1NNNTAxPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19USFJVU1RNQVNURVJfRkY9bQorQ09ORklHX1pFUk9QTFVTX0ZGPW0KK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9eQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19SVz15CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggMDE5MzYzNi4uZjEzYTA1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtOSwxMyArOSwyMSBAQAogCXNlbGVjdCBTSF9ETUFfQVBJCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBTSF9ETUFfSVJRX01VTFRJCisJYm9vbAorCWRlcGVuZHMgb24gU0hfRE1BCisJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc1MCB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgXAorCQlDUFVfU1VCVFlQRV9TSDc3NTBTIHx8IENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBcCisJCUNQVV9TVUJUWVBFX1NINzA5MSB8fCBDUFVfU1VCVFlQRV9TSDc3NjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzY0IHx8IFwKKwkJQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQorCiBjb25maWcgTlJfT05DSElQX0RNQV9DSEFOTkVMUwogCWludAogCWRlcGVuZHMgb24gU0hfRE1BCi0JZGVmYXVsdCAiNiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIwIHx8IENQVV9TVUJUWVBFX1NINzcyMQotCWRlZmF1bHQgIjgiIGlmIENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgotCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3ODAKLQlkZWZhdWx0ICI0IgorCWRlZmF1bHQgIjQiIGlmIENQVV9TVUJUWVBFX1NINzc1MCB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUwUworCWRlZmF1bHQgIjgiIGlmIENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBDUFVfU1VCVFlQRV9TSDc3NjAKKwlkZWZhdWx0ICIxMiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIzIHx8IENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKKwlkZWZhdWx0ICI2IgogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhhdCB0aGUgb24tY2hpcAogCSAgRE1BQyBzdXBwb3J0cy4gVGhpcyB3aWxsIGJlIDQgZm9yIFNINzc1MC9TSDc3NTEgYW5kIDggZm9yIHRoZQpAQCAtNDYsNCArNTQsMjggQEAKIAkgIG9mIHRoZSBTSDc3NjAuCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgQXVkaW8vVVNCIERNQSBvbiB5b3VyIFNINzc2MCBib2FyZC4KIAorY29uZmlnIFBWUjJfRE1BCisJdHJpc3RhdGUgIlBvd2VyVlIgMiBETUFDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QgJiYgU0hfRE1BCisJaGVscAorCSAgU2VsZWN0aW5nIHRoaXMgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFBWUjIgRE1BIGNvbnRyb2xsZXIuCisJICBBcyB0aGlzIGNoYWlucyBvZmYgb2YgdGhlIG9uLWNoaXAgRE1BQywgdGhhdCBtdXN0IGFsc28gYmUKKwkgIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworCSAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZCBieSB0aGUgcHZyMmZiIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IKKwkgIGNlcnRhaW4gb3B0aW1pemF0aW9ucywgYnV0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGZ1bmN0aW9uYWxpdHkuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKworY29uZmlnIEcyX0RNQQorCXRyaXN0YXRlICJHMiBCdXMgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QKKwlzZWxlY3QgU0hfRE1BX0FQSQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRE1BIGNvbnRyb2xsZXIgZm9yIHRoZSBEcmVhbWNhc3QncworCSAgRzIgYnVzLiBEcml2ZXJzIHRoYXQgd2FudCB0aGlzIHdpbGwgZ2VuZXJhbGx5IGVuYWJsZSB0aGlzIG9uCisJICB0aGVpciBvd24uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggYWI5NTZhZC4uYzYwNjgxMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCkBAIC00LDUgKzQsNiBAQAogCiBvYmotJChDT05GSUdfU0hfRE1BX0FQSSkJKz0gZG1hLWFwaS5vIGRtYS1zeXNmcy5vCiBvYmotJChDT05GSUdfU0hfRE1BKQkJKz0gZG1hLXNoLm8KLW9iai0kKENPTkZJR19TSF9EUkVBTUNBU1QpCSs9IGRtYS1wdnIyLm8gZG1hLWcyLm8KK29iai0kKENPTkZJR19QVlIyX0RNQSkJCSs9IGRtYS1wdnIyLm8KK29iai0kKENPTkZJR19HMl9ETUEpCQkrPSBkbWEtZzIubwogb2JqLSQoQ09ORklHX1NIX0RNQUJSRykJCSs9IGRtYWJyZy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwppbmRleCA1MDg4N2E1Li4zN2ZiNWI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKQEAgLTE3LDI4ICsxNywxNiBAQAogI2luY2x1ZGUgPG1hY2gtZHJlYW1jYXN0L21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgImRtYS1zaC5oIgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KIAotc3RhdGljIGludCBkbXRlX2lycV9tYXBbXSA9IHsKLQlETVRFMF9JUlEsCi0JRE1URTFfSVJRLAotCURNVEUyX0lSUSwKLQlETVRFM19JUlEsCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKSB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi0JRE1URTRfSVJRLAotCURNVEU1X0lSUSwKKyNpZiBkZWZpbmVkKERNQUUxX0lSUSkKKyNkZWZpbmUgTlJfRE1BRQkJMgorI2Vsc2UKKyNkZWZpbmUgTlJfRE1BRQkJMQogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi0JRE1URTZfSVJRLAotCURNVEU3X0lSUSwKLSNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqZG1hZV9uYW1lW10gPSB7CisJIkRNQUMgQWRkcmVzcyBFcnJvcjAiLCAiRE1BQyBBZGRyZXNzIEVycm9yMSIKIH07CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9kbXRlX2lycSh1bnNpZ25lZCBpbnQgY2hhbikKQEAgLTQ2LDcgKzM0LDE0IEBACiAJdW5zaWduZWQgaW50IGlycSA9IDA7CiAJaWYgKGNoYW4gPCBBUlJBWV9TSVpFKGRtdGVfaXJxX21hcCkpCiAJCWlycSA9IGRtdGVfaXJxX21hcFtjaGFuXTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJaWYgKGlycSA+IERNVEU2X0lSUSkKKwkJcmV0dXJuIERNVEU2X0lSUTsKKwlyZXR1cm4gRE1URTBfSVJROworI2Vsc2UKIAlyZXR1cm4gaXJxOworI2VuZGlmCiB9CiAKIC8qCkBAIC01OSw3ICs1NCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JdTMyIGNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwl1MzIgY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAogCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSyk+PkNIQ1JfVFNfU0hJRlRdOwogfQpAQCAtNzUsMTMgKzcwLDEzIEBACiAJc3RydWN0IGRtYV9jaGFubmVsICpjaGFuID0gZGV2X2lkOwogCXUzMiBjaGNyOwogCi0JY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAKIAlpZiAoIShjaGNyICYgQ0hDUl9URSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWNoY3IgJj0gfihDSENSX0lFIHwgQ0hDUl9ERSk7Ci0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCXdha2VfdXAoJmNoYW4tPndhaXRfcXVldWUpOwogCkBAIC05NCw3ICs4OSwxMiBAQAogCQlyZXR1cm4gMDsKIAogCXJldHVybiByZXF1ZXN0X2lycShnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbiksIGRtYV90ZWksCi0JCQkgICBJUlFGX0RJU0FCTEVELCBjaGFuLT5kZXZfaWQsIGNoYW4pOworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJCQkJSVJRRl9TSEFSRUQsCisjZWxzZQorCQkJCUlSUUZfRElTQUJMRUQsCisjZW5kaWYKKwkJCQljaGFuLT5kZXZfaWQsIGNoYW4pOwogfQogCiBzdGF0aWMgdm9pZCBzaF9kbWFjX2ZyZWVfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKQEAgLTExNSw3ICsxMTUsNyBAQAogCQljaGFuLT5mbGFncyAmPSB+RE1BX1RFSV9DQVBBQkxFOwogCX0KIAotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAljaGFuLT5mbGFncyB8PSBETUFfQ09ORklHVVJFRDsKIAlyZXR1cm4gMDsKQEAgLTEyNiwxMyArMTI2LDEzIEBACiAJaW50IGlycTsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgfD0gQ0hDUl9ERTsKIAogCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkKIAkJY2hjciB8PSBDSENSX0lFOwogCi0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkgewogCQlpcnEgPSBnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbik7CkBAIC0xNTAsOSArMTUwLDkgQEAKIAkJZGlzYWJsZV9pcnEoaXJxKTsKIAl9CiAKLQljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyICY9IH4oQ0hDUl9ERSB8IENIQ1JfVEUgfCBDSENSX0lFKTsKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogfQogCiBzdGF0aWMgaW50IHNoX2RtYWNfeGZlcl9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTgzLDEyICsxODMsMTMgQEAKIAkgKi8KIAlpZiAoY2hhbi0+c2FyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+c2FyLCBTQVJbY2hhbi0+Y2hhbl0pOworCQljdHJsX291dGwoY2hhbi0+c2FyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXStTQVIpKTsKIAlpZiAoY2hhbi0+ZGFyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+ZGFyLCBEQVJbY2hhbi0+Y2hhbl0pOworCQljdHJsX291dGwoY2hhbi0+ZGFyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIERBUikpOwogCi0JY3RybF9vdXRsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwgRE1BVENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLAorCQkoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikpOwogCiAJc2hfZG1hY19lbmFibGVfZG1hKGNoYW4pOwogCkBAIC0xOTcsMzYgKzE5OCwyNiBAQAogCiBzdGF0aWMgaW50IHNoX2RtYWNfZ2V0X2RtYV9yZXNpZHVlKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQlpZiAoIShjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKSAmIENIQ1JfREUpKQorCWlmICghKGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSAmIENIQ1JfREUpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBjdHJsX2lubChETUFUQ1JbY2hhbi0+Y2hhbl0pIDw8IGNhbGNfeG1pdF9zaGlmdChjaGFuKTsKKwlyZXR1cm4gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikKKwkJIDw8IGNhbGNfeG1pdF9zaGlmdChjaGFuKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcoKQljdHJsX2ludyhETUFPUikKLSNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKGRhdGEpCWN0cmxfb3V0dyhkYXRhLCBETUFPUikKLSNlbHNlCi0jZGVmaW5lIGRtYW9yX3JlYWRfcmVnKCkJY3RybF9pbmwoRE1BT1IpCi0jZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhkYXRhKQljdHJsX291dGwoZGF0YSwgRE1BT1IpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgZG1hb3JfcmVzZXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IGRtYW9yX3Jlc2V0KGludCBubykKIHsKLQl1bnNpZ25lZCBsb25nIGRtYW9yID0gZG1hb3JfcmVhZF9yZWcoKTsKKwl1bnNpZ25lZCBsb25nIGRtYW9yID0gZG1hb3JfcmVhZF9yZWcobm8pOwogCiAJLyogVHJ5IHRvIGNsZWFyIHRoZSBlcnJvciBmbGFncyBmaXJzdCwgaW5jYXNlIHRoZXkgYXJlIHNldCAqLwogCWRtYW9yICY9IH4oRE1BT1JfTk1JRiB8IERNQU9SX0FFKTsKLQlkbWFvcl93cml0ZV9yZWcoZG1hb3IpOworCWRtYW9yX3dyaXRlX3JlZyhubywgZG1hb3IpOwogCiAJZG1hb3IgfD0gRE1BT1JfSU5JVDsKLQlkbWFvcl93cml0ZV9yZWcoZG1hb3IpOworCWRtYW9yX3dyaXRlX3JlZyhubywgZG1hb3IpOwogCiAJLyogU2VlIGlmIHdlIGdvdCBhbiBlcnJvciBhZ2FpbiAqLwotCWlmICgoZG1hb3JfcmVhZF9yZWcoKSAmIChETUFPUl9BRSB8IERNQU9SX05NSUYpKSkgeworCWlmICgoZG1hb3JfcmVhZF9yZWcobm8pICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZG1hLXNoOiBDYW4ndCBpbml0aWFsaXplIERNQU9SLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIzNywxMCArMjI4LDMzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfZXJyKGludCBpcnEsIHZvaWQgKmR1bW15KQogewotCWRtYW9yX3Jlc2V0KCk7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwlpbnQgY250ID0gMDsKKwlzd2l0Y2ggKGlycSkgeworI2lmIGRlZmluZWQoRE1URTZfSVJRKSAmJiBkZWZpbmVkKERNQUUxX0lSUSkKKwljYXNlIERNVEU2X0lSUToKKwkJY250Kys7CisjZW5kaWYKKwljYXNlIERNVEUwX0lSUToKKwkJaWYgKGRtYW9yX3JlYWRfcmVnKGNudCkgJiAoRE1BT1JfTk1JRiB8IERNQU9SX0FFKSkgeworCQkJZGlzYWJsZV9pcnEoaXJxKTsKKwkJCS8qIERNQSBtdWx0aSBhbmQgZXJyb3IgSVJRICovCisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gSVJRX05PTkU7CisJfQorI2Vsc2UKKwlkbWFvcl9yZXNldCgwKTsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKwlkbWFvcl9yZXNldCgxKTsKKyNlbmRpZgogCWRpc2FibGVfaXJxKGlycSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0yNTksMjQgKzI3Myw1OSBAQAogCS5mbGFncwkJPSBETUFDX0NIQU5ORUxTX1RFSV9DQVBBQkxFLAogfTsKIAorI2lmZGVmIENPTkZJR19DUFVfU0g0CitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kbWFfZXJyb3JfaXJxKGludCBuKQoreworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJcmV0dXJuIChuID09IDApID8gZ2V0X2RtdGVfaXJxKDApIDogZ2V0X2RtdGVfaXJxKDYpOworI2Vsc2UKKwlyZXR1cm4gKG4gPT0gMCkgPyBETUFFMF9JUlEgOgorI2lmIGRlZmluZWQoRE1BRTFfSVJRKQorCQkJCURNQUUxX0lSUTsKKyNlbHNlCisJCQkJLTE7CisjZW5kaWYKKyNlbmRpZgorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHNoX2RtYWNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkbWFfaW5mbyAqaW5mbyA9ICZzaF9kbWFjX2luZm87CiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINAotCWkgPSByZXF1ZXN0X2lycShETUFFX0lSUSwgZG1hX2VyciwgSVJRRl9ESVNBQkxFRCwgIkRNQUMgQWRkcmVzcyBFcnJvciIsIDApOwotCWlmICh1bmxpa2VseShpIDwgMCkpCi0JCXJldHVybiBpOworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IE5SX0RNQUU7IG4rKykgeworCQlpID0gcmVxdWVzdF9pcnEoZ2V0X2RtYV9lcnJvcl9pcnEobiksIGRtYV9lcnIsCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwkJCQlJUlFGX1NIQVJFRCwKKyNlbHNlCisJCQkJSVJRRl9ESVNBQkxFRCwKICNlbmRpZgorCQkJCWRtYWVfbmFtZVtuXSwgKHZvaWQgKilkbWFlX25hbWVbbl0pOworCQlpZiAodW5saWtlbHkoaSA8IDApKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzIHJlcXVlc3RfaXJxIGZhaWxcbiIsIGRtYWVfbmFtZVtuXSk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINCAqLwogCiAJLyoKIAkgKiBJbml0aWFsaXplIERNQU9SLCBhbmQgY2xlYW4gdXAgYW55IGVycm9yIGZsYWdzIHRoYXQgbWF5IGhhdmUKIAkgKiBiZWVuIHNldC4KIAkgKi8KLQlpID0gZG1hb3JfcmVzZXQoKTsKKwlpID0gZG1hb3JfcmVzZXQoMCk7CiAJaWYgKHVubGlrZWx5KGkgIT0gMCkpCiAJCXJldHVybiBpOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorCWkgPSBkbWFvcl9yZXNldCgxKTsKKwlpZiAodW5saWtlbHkoaSAhPSAwKSkKKwkJcmV0dXJuIGk7CisjZW5kaWYKIAogCXJldHVybiByZWdpc3Rlcl9kbWFjKGluZm8pOwogfQpAQCAtMjg0LDggKzMzMywxMiBAQAogc3RhdGljIHZvaWQgX19leGl0IHNoX2RtYWNfZXhpdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19DUFVfU0g0Ci0JZnJlZV9pcnEoRE1BRV9JUlEsIDApOwotI2VuZGlmCisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgTlJfRE1BRTsgbisrKSB7CisJCWZyZWVfaXJxKGdldF9kbWFfZXJyb3JfaXJxKG4pLCAodm9pZCAqKWRtYWVfbmFtZVtuXSk7CisJfQorI2VuZGlmIC8qIENPTkZJR19DUFVfU0g0ICovCiAJdW5yZWdpc3Rlcl9kbWFjKCZzaF9kbWFjX2luZm8pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmZWNkNS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFRha2FzaGkgWU9TSElJCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfX0RNQV9TSF9ICi0jZGVmaW5lIF9fRE1BX1NIX0gKLQotI2luY2x1ZGUgPGNwdS9kbWEuaD4KLQotLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwotI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCi0jZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKLSNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKLSNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAotI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCi0jZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAotI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAotI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAotI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAotI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAotI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCi0jZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCi0jZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCi0jZGVmaW5lIENIQ1JfREUgMHgwMDAwMDAwMQotI2RlZmluZSBDSENSX1RFIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0hDUl9JRSAweDAwMDAwMDA0Ci0KLS8qIERNQU9SIGRlZmluaXRpb25zICovCi0jZGVmaW5lIERNQU9SX0FFCTB4MDAwMDAwMDQKLSNkZWZpbmUgRE1BT1JfTk1JRgkweDAwMDAwMDAyCi0jZGVmaW5lIERNQU9SX0RNRQkweDAwMDAwMDAxCi0KLS8qCi0gKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCi0gKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KLSAqLwotI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQotCi0jZGVmaW5lIE1BWF9ETUFDX0NIQU5ORUxTCShDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKLQotLyoKLSAqIFN1YnR5cGVzIHRoYXQgaGF2ZSBmZXdlciBjaGFubmVscyB0aGFuIHRoaXMgc2ltcGx5IG5lZWQgdG8gY2hhbmdlCi0gKiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUy4gTGlrZXdpc2UsIHN1YnR5cGVzIHdpdGggYSBsYXJnZXIgbnVtYmVyCi0gKiBvZiBjaGFubmVscyBzaG91bGQgZXhwYW5kIG9uIHRoaXMuCi0gKgotICogRm9yIG1vc3Qgc3VidHlwZXMgd2UgY2FuIGVhc2lseSBmaWd1cmUgdGhlc2UgdmFsdWVzIG91dCB3aXRoIHNvbWUKLSAqIGJhc2ljIGNhbGN1bGF0aW9uLCB1bmZvcnR1bmF0ZWx5IG9uIG90aGVyIHN1YnR5cGVzIHRoZXNlIGFyZSBtb3JlCi0gKiBzY2F0dGVyZWQsIHNvIHdlIGp1c3QgbGVhdmUgaXQgdW5yb2xsZWQgZm9yIHNpbXBsaWNpdHkuCi0gKi8KLSNkZWZpbmUgU0FSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDAwLCBTSF9ETUFDX0JBU0UgKyAweDEwLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyMCwgU0hfRE1BQ19CQVNFICsgMHgzMCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTAsIFNIX0RNQUNfQkFTRSArIDB4NjB9KQotI2RlZmluZSBEQVIJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDQsIFNIX0RNQUNfQkFTRSArIDB4MTQsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDI0LCBTSF9ETUFDX0JBU0UgKyAweDM0LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1NCwgU0hfRE1BQ19CQVNFICsgMHg2NH0pCi0jZGVmaW5lIERNQVRDUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwOCwgU0hfRE1BQ19CQVNFICsgMHgxOCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjgsIFNIX0RNQUNfQkFTRSArIDB4MzgsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDU4LCBTSF9ETUFDX0JBU0UgKyAweDY4fSkKLSNkZWZpbmUgQ0hDUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwYywgU0hfRE1BQ19CQVNFICsgMHgxYywgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MmMsIFNIX0RNQUNfQkFTRSArIDB4M2MsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDVjLCBTSF9ETUFDX0JBU0UgKyAweDZjfSkKLQotI2RlZmluZSBETUFPUgkoU0hfRE1BQ19CQVNFICsgMHg0MCkKLQotI2VuZGlmIC8qIF9fRE1BX1NIX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYwppbmRleCAwNzhkYzQ0Li43NzNkNTc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYwpAQCAtMTI3LDggKzEyNyw4IEBACiAJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTFNSMCk7CiAJcGNpX3dyaXRlX3JlZygweDAwMDAwMDAxLCBTSDRfUENJTFNSMSk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDAgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQl3b3JkID0gKENPTkZJR19NRU1PUllfU0laRSA+IDB4MDgwMDAwMDApID8gMHgxMDAwMDAwMCA6IDB4MDgwMDAwMDA7Ci0JcGNpX3dyaXRlX3JlZyh3b3JkIHwgMHhhMDAwMDAwMCwgU0g0X1BDSUxBUjApOworCXdvcmQgPSBDT05GSUdfTUVNT1JZX1NUQVJUIHwgKENPTkZJR19NRU1PUllfU0laRSAtIDB4MDEwMDAwMDApOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSUxBUjApOwogCXBjaV93cml0ZV9yZWcod29yZCwgU0g3NzgwX1BDSU1CQVIwKTsKIAkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMSBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwogCXBjaV93cml0ZV9yZWcoMHgwMDAwMDAwMCwgU0g0X1BDSUxBUjEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKaW5kZXggMzY3MzZjNy4uODBkNDA4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCkBAIC0zMSw3ICszMSw3IEBACiAvKiBSZXR1cm5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgUG5TRUcgKG49MSwyKSBhZGRyZXNzICAgKi8KICNkZWZpbmUgUEhZU0FERFIoYSkJKCgodW5zaWduZWQgbG9uZykoYSkpICYgMHgxZmZmZmZmZikKIAotI2lmZGVmIENPTkZJR18yOUJJVAorI2lmIGRlZmluZWQoQ09ORklHXzI5QklUKSB8fCBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAvKgogICogTWFwIGFuIGFkZHJlc3MgdG8gYSBjZXJ0YWluIHByaXZpbGVnZWQgc2VnbWVudAogICovCkBAIC00Myw3ICs0Myw3IEBACiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQM1NFRykpCiAjZGVmaW5lIFA0U0VHQUREUihhKQlcCiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQNFNFRykpCi0jZW5kaWYgLyogMjlCSVQgKi8KKyNlbmRpZiAvKiAyOUJJVCB8fCBQTUJfRklYRUQgKi8KICNlbmRpZiAvKiBQMVNFRyAqLwogCiAvKiBDaGVjayBpZiBhbiBhZGRyZXNzIGNhbiBiZSByZWFjaGVkIGluIDI5IGJpdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmgKaW5kZXggNzRmNzk0My4uYTBiMzQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmgKQEAgLTExLDcgKzExLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgKz0gaTsKKwl2LT5jb3VudGVyICs9IGk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yMCw3ICsyMCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2IC09IGk7CisJdi0+Y291bnRlciAtPSBpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjksOSArMjksOSBAQAogCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCA9IHYtPmNvdW50ZXI7CiAJdGVtcCArPSBpOwotCSoobG9uZyAqKXYgPSB0ZW1wOworCXYtPmNvdW50ZXIgPSB0ZW1wOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB0ZW1wOwpAQCAtNDIsOSArNDIsOSBAQAogCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCA9IHYtPmNvdW50ZXI7CiAJdGVtcCAtPSBpOwotCSoobG9uZyAqKXYgPSB0ZW1wOworCXYtPmNvdW50ZXIgPSB0ZW1wOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB0ZW1wOwpAQCAtNTUsNyArNTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiAmPSB+bWFzazsKKwl2LT5jb3VudGVyICY9IH5tYXNrOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtNjQsNyArNjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiB8PSBtYXNrOworCXYtPmNvdW50ZXIgfD0gbWFzazsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaAppbmRleCAxZDJmYzBiLi5kODMyOGJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICiAjZGVmaW5lIF9fQVNNX1NIX0JJVE9QU19MTFNDX0gKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAlpbnQJbWFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtMTMsMTYgKzEzLDE2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgogCQkibW92bGkubAlAJTEsICUwCSEgc2V0X2JpdAkJXG5cdCIKLQkJIm9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm9yCQklMiwgJTAJCQkJXG5cdCIKIAkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICI9JnoiICh0bXApCisJCTogInIiIChhKSwgInIiIChtYXNrKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAlpbnQJbWFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtMzQsMTYgKzM0LDE2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgogCQkibW92bGkubAlAJTEsICUwCSEgY2xlYXJfYml0CQlcblx0IgotCQkiYW5kCQklMywgJTAJCQkJXG5cdCIKKwkJImFuZAkJJTIsICUwCQkJCVxuXHQiCiAJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQotCQk6ICIxIiAoYSksICJyIiAofm1hc2spCisJCTogIj0meiIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKH5tYXNrKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC01NSw4NiArNTUsODYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCiAJCSJtb3ZsaS5sCUAlMSwgJTAJISBjaGFuZ2VfYml0CQlcblx0IgorCQkieG9yCQklMiwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHRlc3RfYW5kX3NldF9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCisJCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklMywgJTEJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgdGVzdF9hbmRfY2xlYXJfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgorCQkiYW5kCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSUzLCAlMQkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAoYSksICJyIiAobWFzayksICJyIiAofm1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCiAJCSJ4b3IJCSUzLCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKLQkJOiAidCIsICJtZW1vcnkiCi0JKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQotewotCWludAltYXNrLCByZXR2YWw7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWEgKz0gbnIgPj4gNTsKLQltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX3NldF9iaXQJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJvcgkJJTQsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKLQkJImJmCQkxYgkJCQlcblx0IgotCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQotCQk6ICJ0IiwgIm1lbW9yeSIKLQkpOwotCi0JcmV0dXJuIHJldHZhbCAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLQlpbnQJbWFzaywgcmV0dmFsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlhICs9IG5yID4+IDU7Ci0JbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9jbGVhcl9iaXQJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJhbmQJCSU1LCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCi0JCSJiZgkJMWIJCQkJXG5cdCIKLQkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJhbmQJCSUzLCAlMQkJCQlcblx0IgogCQkic3luY28JCQkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spLCAiciIgKH5tYXNrKQotCQk6ICJ0IiwgIm1lbW9yeSIKLQkpOwotCi0JcmV0dXJuIHJldHZhbCAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0JaW50CW1hc2ssIHJldHZhbDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYSArPSBuciA+PiA1OwotCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfY2hhbmdlX2JpdAlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJInhvcgkJJTQsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKLQkJImJmCQkxYgkJCQlcblx0IgotCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKLQkJInN5bmNvCQkJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCmluZGV4IGY5Yzg4NTguLjJmNmM5NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGNsayAqY2xrKTsKIAl2b2lkICgqcmVjYWxjKShzdHJ1Y3QgY2xrICpjbGspOwogCWludCAoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50IGFsZ29faWQpOworCWludCAoKnNldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KTsKIAlsb25nICgqcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKaW5kZXggYWVlM2JmMi4uMGZhYzNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oCkBAIC04LDE0ICs4LDE0IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHhjaGdfdTMyCVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCVxuXHQiCi0JCSJtb3YJCSU0LCAlMAkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgeGNoZ191MzIJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJXG5cdCIKKwkJIm1vdgkJJTMsICUwCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCVxuXHQiCiAJCSJiZgkJMWIJCQlcblx0IgogCQkic3luY28JCQkJCVxuXHQiCi0JCTogIj0meiIodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChtKSwgInIiICh2YWwpCisJCTogIj0meiIodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKG0pLCAiciIgKHZhbCkKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApAQCAtMjksMTQgKzI5LDE0IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHhjaGdfdTgJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJXG5cdCIKLQkJIm1vdgkJJTQsICUwCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB4Y2hnX3U4CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCVxuXHQiCisJCSJtb3YJCSUzLCAlMAkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQlcblx0IgogCQkiYmYJCTFiCQkJXG5cdCIKIAkJInN5bmNvCQkJCQlcblx0IgotCQk6ICI9JnoiKHRtcCksICI9ciIgKG0pLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAobSksICJyIiAodmFsICYgMHhmZikKKwkJOiAiPSZ6Iih0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAobSksICJyIiAodmFsICYgMHhmZikKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApAQCAtNTEsMTcgKzUxLDE3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJImNtcC9lcQkJJTIsICU0CQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKKwkJImNtcC9lcQkJJTEsICUzCQkJCVxuXHQiCiAJCSJiZgkJMmYJCQkJXG5cdCIKLQkJIm1vdgkJJTUsICUwCQkJCVxuXHQiCisJCSJtb3YJCSUzLCAlMAkJCQlcblx0IgogCQkiMjoJCQkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgogCQkic3luY28JCQkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAobSksICJyIiAob2xkKSwgInIiIChuZXcpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCmluZGV4IDg2MzA4YWEuLjY5NGFiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaApAQCAtMjEsNSArMjEsNiBAQAogI2RlZmluZSBDUFVfSEFTX0xMU0MJCTB4MDA0MAkvKiBtb3ZsaS5sL21vdmNvLmwgKi8KICNkZWZpbmUgQ1BVX0hBU19MMl9DQUNIRQkweDAwODAJLyogU2Vjb25kYXJ5IGNhY2hlIC8gVVJBTSAqLwogI2RlZmluZSBDUFVfSEFTX09QMzIJCTB4MDEwMAkvKiAzMi1iaXQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCAqLworI2RlZmluZSBDUFVfSEFTX1BURUFFWAkJMHgwMjAwCS8qIFBURSBBU0lEIEV4dGVuc2lvbiBzdXBwb3J0ICovCiAKICNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ZjhlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBhcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwICBUYWthc2hpIFlPU0hJSQorICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19ETUFfU0hfSAorI2RlZmluZSBfX0RNQV9TSF9ICisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8Y3B1L2RtYS5oPgorCisvKiBETUFPUiBjb250b3JsOiBUaGUgRE1BT1IgYWNjZXNzIHNpemUgaXMgZGlmZmVyZW50IGJ5IENQVS4qLworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgXAorICAgIChuID8gY3RybF9pbncoU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCisJOiBjdHJsX2ludyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgXAorICAgIChuID8gY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorICAgIDogY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCisjZWxzZSAvKiBPdGhlciBDUFUgKi8KKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNlbmRpZgorCitzdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdIF9fbWF5YmVfdW51c2VkID0geworI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDQpCisgICAgRE1URTBfSVJRLAorICAgIERNVEUwX0lSUSArIDEsCisgICAgRE1URTBfSVJRICsgMiwKKyAgICBETVRFMF9JUlEgKyAzLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNikKKyAgICBETVRFNF9JUlEsCisgICAgRE1URTRfSVJRICsgMSwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDgpCisgICAgRE1URTZfSVJRLAorICAgIERNVEU2X0lSUSArIDEsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSAxMikKKyAgICBETVRFOF9JUlEsCisgICAgRE1URTlfSVJRLAorICAgIERNVEUxMF9JUlEsCisgICAgRE1URTExX0lSUSwKKyNlbmRpZgorfTsKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLworI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCisjZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKKyNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKKyNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAorI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCisjZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAorI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAorI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAorI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCisjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCisjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCisjZGVmaW5lIENIQ1JfREUgMHgwMDAwMDAwMQorI2RlZmluZSBDSENSX1RFIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0hDUl9JRSAweDAwMDAwMDA0CisKKy8qIERNQU9SIGRlZmluaXRpb25zICovCisjZGVmaW5lIERNQU9SX0FFCTB4MDAwMDAwMDQKKyNkZWZpbmUgRE1BT1JfTk1JRgkweDAwMDAwMDAyCisjZGVmaW5lIERNQU9SX0RNRQkweDAwMDAwMDAxCisKKy8qCisgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCisgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KKyAqLworI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQorCisvKiBETUEgYmFzZSBhZGRyZXNzICovCitzdGF0aWMgdTMyIGRtYV9iYXNlX2FkZHJbXSBfX21heWJlX3VudXNlZCA9IHsKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA0KQorCVNIX0RNQUNfQkFTRTAgKyAweDAwLAkvKiBjaGFubmVsIDAgKi8KKwlTSF9ETUFDX0JBU0UwICsgMHgxMCwKKwlTSF9ETUFDX0JBU0UwICsgMHgyMCwKKwlTSF9ETUFDX0JBU0UwICsgMHgzMCwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDYpCisJU0hfRE1BQ19CQVNFMCArIDB4NTAsCisJU0hfRE1BQ19CQVNFMCArIDB4NjAsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA4KQorCVNIX0RNQUNfQkFTRTEgKyAweDAwLAorCVNIX0RNQUNfQkFTRTEgKyAweDEwLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gMTIpCisJU0hfRE1BQ19CQVNFMSArIDB4MjAsCisJU0hfRE1BQ19CQVNFMSArIDB4MzAsCisJU0hfRE1BQ19CQVNFMSArIDB4NTAsCisJU0hfRE1BQ19CQVNFMSArIDB4NjAsIC8qIGNoYW5uZWwgMTEgKi8KKyNlbmRpZgorfTsKKworLyogRE1BIHJlZ2lzdGVyICovCisjZGVmaW5lIFNBUiAgICAgMHgwMAorI2RlZmluZSBEQVIgICAgIDB4MDQKKyNkZWZpbmUgVENSICAgICAweDA4CisjZGVmaW5lIENIQ1IgICAgMHgwQworI2RlZmluZSBETUFPUgkweDQwCisKKyNlbmRpZiAvKiBfX0RNQV9TSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCBiZWNhNzEyLi42YmQxNzg0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKQEAgLTI1LDkgKzI1LDkgQEAKICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQrMHgxMDAwMDAwMCkKIAogI2lmZGVmIENPTkZJR19OUl9ETUFfQ0hBTk5FTFMKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCShDT05GSUdfTlJfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKICNlbHNlCi0jICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAgIChDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMKaW5kZXggMmRhYjBiOC4uM2E0NzUyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUworKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TCkBAIC0zMSwzICszMSw4IEBACiAjZW5kaWYJCiAJLmVuZG0KIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDJBKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorIyBkZWZpbmUgUFJFRih4KQlwcmVmCUB4CisjZWxzZQorIyBkZWZpbmUgUFJFRih4KQlub3AKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCA5MDY3MzY1Li42MWY5M2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMTksOCArMTksNDIgQEAKICNpbmNsdWRlIDxjcHUvZ3Bpby5oPgogI2VuZGlmCiAKKyNkZWZpbmUgQVJDSF9OUl9HUElPUyA1MTIKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19jYW5zbGVlcChncGlvKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwlXQVJOX09OKDEpOworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCVdBUk5fT04oMSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfR1BJT0xJQiAqLworCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpbm11eF9lbnVtX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgcGlubXV4X2ZsYWdfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGlubXV4X2ZsYWdfdDsKIAogI2RlZmluZSBQSU5NVVhfVFlQRV9OT05FICAgICAgICAgICAgMAogI2RlZmluZSBQSU5NVVhfVFlQRV9GVU5DVElPTiAgICAgICAgMQpAQCAtMzQsNiArNjgsMTEgQEAKICNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMVVAgICAgICgxIDw8IDMpCiAjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTERPV04gICAoMSA8PCA0KQogCisjZGVmaW5lIFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQgICAgICA1CisjZGVmaW5lIFBJTk1VWF9GTEFHX0RCSVQgICAgICAgICAgICAoMHgxZiA8PCBQSU5NVVhfRkxBR19EQklUX1NISUZUKQorI2RlZmluZSBQSU5NVVhfRkxBR19EUkVHX1NISUZUICAgICAgMTAKKyNkZWZpbmUgUElOTVVYX0ZMQUdfRFJFRyAgICAgICAgICAgICgweDNmIDw8IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQpCisKIHN0cnVjdCBwaW5tdXhfZ3BpbyB7CiAJcGlubXV4X2VudW1fdCBlbnVtX2lkOwogCXBpbm11eF9mbGFnX3QgZmxhZ3M7CkBAIC01NCw3ICs5Myw3IEBACiAJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgWyhyX3dpZHRoIC8gZl93aWR0aCkgKiAoMSA8PCBmX3dpZHRoKV0pIFwKIAogc3RydWN0IHBpbm11eF9kYXRhX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aDsKKwl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoLCByZWdfc2hhZG93OwogCXBpbm11eF9lbnVtX3QgKmVudW1faWRzOwogfTsKIApAQCAtODksMzQgKzEyOCw5IEBACiAJdW5zaWduZWQgaW50IGdwaW9fZGF0YV9zaXplOwogCiAJdW5zaWduZWQgbG9uZyAqZ3Bpb19pbl91c2U7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOwogfTsKIAogaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCk7CiAKLWludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKTsKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlyZXR1cm4gX19ncGlvX3JlcXVlc3QoZ3Bpbyk7Ci19Ci12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLWludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKLXZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLQotLyogSVJRIG1vZGVzIGFyZSB1bnNwcG9ydGVkICovCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCVdBUk5fT04oMSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlXQVJOX09OKDEpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgotCiAjZW5kaWYgLyogX19BU01fU0hfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oCmluZGV4IDhjMTM1M2IuLjUyYjRiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oCkBAIC0yNDIsNyArMjQyLDYgQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogCiAvKiBhcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEvc2V0dXAuYyAqLwotaW50IGhkNjQ0NjFfaXJxX2RlbXV4KGludCBpcnEpOwogdm9pZCBoZDY0NDYxX3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAogCQkJCWludCAoKmRlbXV4KSAoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKIHZvaWQgaGQ2NDQ2MV91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCA2MWY2ZGFlLi4wNDU0ZjhkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMzgsNyArMjM4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKIF9faW9yZW1hcF9tb2RlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCisjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHIgPSBvZmZzZXQgKyBzaXplIC0gMTsKICNlbmRpZgogCXZvaWQgX19pb21lbSAqcmV0OwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDMyKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogCS8qCiAJICogRm9yIFAxIGFuZCBQMiBzcGFjZSB0aGlzIGlzIHRyaXZpYWwsIGFzIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeQogCSAqIG1hcHBlZC4gVW5jYWNoZWQgYWNjZXNzIGZvciBQMSBhZGRyZXNzZXMgYXJlIGRvbmUgdGhyb3VnaCBQMi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKaW5kZXggNjA3OGQ4ZS4uNjEzNjQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAk/IChNQVhfU1RBQ0tfU0laRSkgXAogCTogKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKQogCi0jZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpCQkoKHJlZ3MpLT5yZWdzWzBdKQorI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShfcmVncykJCSgoX3JlZ3MpLT5yZWdzWzBdKQogI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUga3JldHByb2JlX2JsYWNrbGlzdF9zaXplCTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDVkOTE1N2IuLjJhOWM1NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTE5LDEzICsxOSwxOCBAQAogICogICAgKGEpIFRMQiBjYWNoZSB2ZXJzaW9uIChvciByb3VuZCwgY3ljbGUgd2hhdGV2ZXIgZXhwcmVzc2lvbiB5b3UgbGlrZSkKICAqICAgIChiKSBBU0lEIChBZGRyZXNzIFNwYWNlIElEZW50aWZpZXIpCiAgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKKyNkZWZpbmUgTU1VX0NPTlRFWFRfQVNJRF9NQVNLCQkweDAwMDBmZmZmCisjZWxzZQogI2RlZmluZSBNTVVfQ09OVEVYVF9BU0lEX01BU0sJCTB4MDAwMDAwZmYKLSNkZWZpbmUgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLCTB4ZmZmZmZmMDAKLSNkZWZpbmUgTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTgkweDAwMDAwMTAwCi0jZGVmaW5lIE5PX0NPTlRFWFQJCQkwVUwKKyNlbmRpZgogCi0vKiBBU0lEIGlzIDgtYml0IHZhbHVlLCBzbyBpdCBjYW4ndCBiZSAweDEwMCAqLwotI2RlZmluZSBNTVVfTk9fQVNJRAkJCTB4MTAwCisjZGVmaW5lIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSwkofjBVTCAmIH5NTVVfQ09OVEVYVF9BU0lEX01BU0spCisjZGVmaW5lIE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04JKE1NVV9DT05URVhUX0FTSURfTUFTSyArIDEpCisKKy8qIEltcG9zc2libGUgQVNJRCB2YWx1ZSwgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIE5PX0NPTlRFWFQuICovCisjZGVmaW5lIE1NVV9OT19BU0lECQkJTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTgorI2RlZmluZSBOT19DT05URVhUCQkJMFVMCiAKICNkZWZpbmUgYXNpZF9jYWNoZShjcHUpCQkoY3B1X2RhdGFbY3B1XS5hc2lkX2NhY2hlKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKaW5kZXggZjRmOWFlYi4uOGVmODAwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaApAQCAtMTAsNiArMTAsMTcgQEAKIAkvKiBEbyBub3RoaW5nICovCiB9CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCit7CisJX19yYXdfd3JpdGVsKGFzaWQsIE1NVV9QVEVBRVgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2FzaWQodm9pZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoTU1VX1BURUFFWCkgJiBNTVVfQ09OVEVYVF9BU0lEX01BU0s7Cit9CisjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNldF9hc2lkKHVuc2lnbmVkIGxvbmcgYXNpZCkKIHsKIAl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CkBAIC0zMyw2ICs0NCw3IEBACiAJYXNpZCAmPSBNTVVfQ09OVEVYVF9BU0lEX01BU0s7CiAJcmV0dXJuIGFzaWQ7CiB9CisjZW5kaWYgLyogQ09ORklHX0NQVV9IQVNfUFRFQUVYICovCiAKIC8qIE1NVV9UVEIgaXMgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X1RUQihwZ2RfdCAqcGdkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA1ODcxZDc4Li45YzZkMjFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTI5LDcgKzEyOSwxMiBAQAogICogaXMgbm90IHZpc2libGUgKGl0IGlzIHBhcnQgb2YgdGhlIFBNQiBtYXBwaW5nKSBhbmQgc28gbmVlZHMgdG8gYmUKICAqIGFkZGVkIG9yIHN1YnRyYWN0ZWQgYXMgcmVxdWlyZWQuCiAgKi8KLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZiBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCisvKiBwaHlzID0gdmlydCAtIFBBR0VfT0ZGU0VUIC0gKF9fTUVNT1JZX1NUQVJUICYgMHhlMDAwMDAwMCkgKi8KKyNkZWZpbmUgUE1CX09GRlNFVAkoUEFHRV9PRkZTRVQgLSBQWFNFRyhfX01FTU9SWV9TVEFSVCkpCisjZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBNQl9PRkZTRVQpCisjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIFBNQl9PRkZTRVQpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCiAjZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCtfX01FTU9SWV9TVEFSVCkKICNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VULV9fTUVNT1JZX1NUQVJUKSkKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAxZWY0YjI0Li4xZmQ1OGI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAlDUFVfU0g3NzYwLCBDUFVfU0g0XzIwMiwgQ1BVX1NINF81MDEsCiAKIAkvKiBTSC00QSB0eXBlcyAqLwotCUNQVV9TSDc3NjMsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsIENQVV9TSDc3ODUsCisJQ1BVX1NINzc2MywgQ1BVX1NINzc3MCwgQ1BVX1NINzc4MCwgQ1BVX1NINzc4MSwgQ1BVX1NINzc4NSwgQ1BVX1NINzc4NiwKIAlDUFVfU0g3NzIzLCBDUFVfU0hYMywKIAogCS8qIFNINEFMLURTUCB0eXBlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggZDc5MDYzYy4uZWZkZDc4YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogLyoKICAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KICAqLwotI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X3BjLCBuZXdfc3ApCSBcCisjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgbmV3X3BjLCBuZXdfc3ApCSBcCiAJc2V0X2ZzKFVTRVJfRFMpOwkJCSBcCi0JcmVncy0+cHIgPSAwOwkJCQkgXAotCXJlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAotCXJlZ3MtPnBjID0gbmV3X3BjOwkJCSBcCi0JcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKKwlfcmVncy0+cHIgPSAwOwkJCQkgXAorCV9yZWdzLT5zciA9IFNSX0ZEOwkvKiBVc2VyIG1vZGUuICovIFwKKwlfcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKKwlfcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsKQEAgLTE4OSwxMCArMTg5LDkgQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzE1XSkKIAotI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihfcmVncykJKChfcmVncyktPnJlZ3NbMTVdKQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDJBKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQogI2RlZmluZSBQUkVGRVRDSF9TVFJJREUJCUwxX0NBQ0hFX0JZVEVTCiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKaW5kZXggODAzMTc3Zi4uNTcyN2QzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogICovCiAjZGVmaW5lIFNSX1VTRVIgKFNSX01NVSB8IFNSX0ZEKQogCi0jZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkJCQlcCisjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgbmV3X3BjLCBuZXdfc3ApCQkJXAogCXNldF9mcyhVU0VSX0RTKTsJCQkJCVwKLQlyZWdzLT5zciA9IFNSX1VTRVI7CS8qIFVzZXIgbW9kZS4gKi8JCVwKLQlyZWdzLT5wYyA9IG5ld19wYyAtIDQ7CS8qIENvbXBlbnNhdGUgc3lzY2FsbCBleGl0ICovCVwKLQlyZWdzLT5wYyB8PSAxOwkJLyogU2V0IFNIbWVkaWEgISAqLwkJXAotCXJlZ3MtPnJlZ3NbMThdID0gMDsJCQkJCVwKLQlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcAorCV9yZWdzLT5zciA9IFNSX1VTRVI7CS8qIFVzZXIgbW9kZS4gKi8JCVwKKwlfcmVncy0+cGMgPSBuZXdfcGMgLSA0OwkvKiBDb21wZW5zYXRlIHN5c2NhbGwgZXhpdCAqLwlcCisJX3JlZ3MtPnBjIHw9IDE7CQkvKiBTZXQgU0htZWRpYSAhICovCQlcCisJX3JlZ3MtPnJlZ3NbMThdID0gMDsJCQkJCVwKKwlfcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsKQEAgLTIyNiw3ICsyMjYsNyBAQAogI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKCh0c2spLT50aHJlYWQuc3ApCiAKLSNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIoX3JlZ3MpCSgoX3JlZ3MpLT5yZWdzWzE1XSkKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1BST0NFU1NPUl82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAxMjkxMmFiLi44MWM2NTY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEyMiwxNCArMTIyLDEyIEBACiAjaWZkZWYgQ09ORklHX1NIX0RTUAogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAogCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorCQkgLSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKSAtIDEpCiAjZGVmaW5lIHRhc2tfcHRfZHNwcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSkgLSAxKQogI2Vsc2UKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKLQkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggOGY4ZjRhZC4uMDFhNDA3NmEzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAKK2V4dGVybiB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CiBleHRlcm4gbG9uZyBfX21hY2h2ZWNfc3RhcnQsIF9fbWFjaHZlY19lbmQ7CiBleHRlcm4gY2hhciBfX3VuY2FjaGVkX3N0YXJ0LCBfX3VuY2FjaGVkX2VuZDsKIGV4dGVybiBjaGFyIF9lYnNzW107CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2ZDRiZjY1Li4zNDU2NTNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfX0FTTV9TSF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI5OTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQVNNX1NIX1NVU1BFTkRfSAorI2RlZmluZSBfQVNNX1NIX1NVU1BFTkRfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkgeyByZXR1cm4gMDsgfQorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3Qgc3dzdXNwX2FyY2hfcmVncyB7CisJc3RydWN0IHB0X3JlZ3MgdXNlcl9yZWdzOworCXVuc2lnbmVkIGxvbmcgYmFuazFfcmVnc1s4XTsKK307CisjZW5kaWYKKworLyogZmxhZ3MgcGFzc2VkIHRvIGFzc2VtYmx5IHN1c3BlbmQgY29kZSAqLworI2RlZmluZSBTVVNQX1NIX1NMRUVQCQkoMSA8PCAwKSAvKiBSZWd1bGFyIHNsZWVwIG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TVEFOREJZCQkoMSA8PCAxKSAvKiBTSC1Nb2JpbGUgU29mdHdhcmUgc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfUlNUQU5EQlkJKDEgPDwgMikgLyogU0gtTW9iaWxlIFItc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfVVNUQU5EQlkJKDEgPDwgMykgLyogU0gtTW9iaWxlIFUtc3RhbmRieSBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU0YJCSgxIDw8IDQpIC8qIEVuYWJsZSBzZWxmLXJlZnJlc2ggKi8KKworI2VuZGlmIC8qIF9BU01fU0hfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggYTdjYTNhMS4uNGMzYjY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTksNyArOSw2IEBACiAJaW50ICgqaW5pdCkodm9pZCk7CiAJaW50ICgqc3RhcnQpKHZvaWQpOwogCWludCAoKnN0b3ApKHZvaWQpOwotCWN5Y2xlX3QgKCpyZWFkKSh2b2lkKTsKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQogCXVuc2lnbmVkIGxvbmcgKCpnZXRfb2Zmc2V0KSh2b2lkKTsKICNlbmRpZgpAQCAtMzksNiArMzgsNyBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC90aW1lLmMgKi8KIHZvaWQgaGFuZGxlX3RpbWVyX3RpY2sodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5OworCitleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoOwogCiAjZW5kaWYgLyogX19BU01fU0hfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggODhmZjFhZS4uOWMxNmY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC02LDIyICs2LDEwNiBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCi0jZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpIFwKLQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKQotCi0jZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQlcCi0JZmx1c2hfdGxiX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpCi0KLSNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorI2lmZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgotICogRmx1c2ggd2hvbGUgVExCcyBmb3IgTU0KKyAqIFRMQiBoYW5kbGluZy4gIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBwYWdlcyBmcm9tIHRoZSBwYWdlCisgKiB0YWJsZXMsIGFuZCBlZmZpY2llbnRseSBoYW5kbGUgdGhlIFRMQiBpc3N1ZXMuCiAgKi8KLSNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQkJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKK3N0cnVjdCBtbXVfZ2F0aGVyIHsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbTsKKwl1bnNpZ25lZCBpbnQJCWZ1bGxtbTsKKwl1bnNpZ25lZCBsb25nCQlzdGFydCwgZW5kOworfTsKIAotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF90bGJfZ2F0aGVyKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCit7CisJdGxiLT5zdGFydCA9IFRBU0tfU0laRTsKKwl0bGItPmVuZCA9IDA7CisKKwlpZiAodGxiLT5mdWxsbW0pIHsKKwkJdGxiLT5zdGFydCA9IDA7CisJCXRsYi0+ZW5kID0gVEFTS19TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW11X2dhdGhlciAqCit0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCit7CisJc3RydWN0IG1tdV9nYXRoZXIgKnRsYiA9ICZnZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CisKKwl0bGItPm1tID0gbW07CisJdGxiLT5mdWxsbW0gPSBmdWxsX21tX2ZsdXNoOworCisJaW5pdF90bGJfZ2F0aGVyKHRsYik7CisKKwlyZXR1cm4gdGxiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICh0bGItPmZ1bGxtbSkKKwkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCisJLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCisJY2hlY2tfcGd0X2NhY2hlKCk7CisKKwlwdXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3JlbW92ZV90bGJfZW50cnkoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlpZiAodGxiLT5zdGFydCA+IGFkZHJlc3MpCisJCXRsYi0+c3RhcnQgPSBhZGRyZXNzOworCWlmICh0bGItPmVuZCA8IGFkZHJlc3MgKyBQQUdFX1NJWkUpCisJCXRsYi0+ZW5kID0gYWRkcmVzcyArIFBBR0VfU0laRTsKK30KKworLyoKKyAqIEluIHRoZSBjYXNlIG9mIHRsYiB2bWEgaGFuZGxpbmcsIHdlIGNhbiBvcHRpbWlzZSB0aGVzZSBhd2F5IGluIHRoZQorICogY2FzZSB3aGVyZSB3ZSdyZSBkb2luZyBhIGZ1bGwgTU0gZmx1c2guICBXaGVuIHdlJ3JlIGRvaW5nIGEgbXVubWFwLAorICogdGhlIHZtYXMgYXJlIGFkanVzdGVkIHRvIG9ubHkgY292ZXIgdGhlIHJlZ2lvbiB0byBiZSB0b3JuIGRvd24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX3N0YXJ0X3ZtYShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfZW5kX3ZtYShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tICYmIHRsYi0+ZW5kKSB7CisJCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+c3RhcnQsIHRsYi0+ZW5kKTsKKwkJaW5pdF90bGJfZ2F0aGVyKHRsYik7CisJfQorfQorCisjZGVmaW5lIHRsYl9yZW1vdmVfcGFnZSh0bGIscGFnZSkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpCisjZGVmaW5lIHB0ZV9mcmVlX3RsYih0bGIsIHB0ZXApCQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCisjZGVmaW5lIHBtZF9mcmVlX3RsYih0bGIsIHBtZHApCQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCisjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHB1ZHApCQlwdWRfZnJlZSgodGxiKS0+bW0sIHB1ZHApCisKKyNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQorCisjZWxzZSAvKiBDT05GSUdfTU1VICovCisKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQkJCQlkbyB7IH0gd2hpbGUgKDApCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KIAorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCmluZGV4IDY4MTNjMzIuLjBlYTE1ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKQEAgLTEsMjIgKzEsMTcgQEAKICNpZm5kZWYgX19BU01fQ1BVX1NIM19ETUFfSAogI2RlZmluZSBfX0FTTV9DUFVfU0gzX0RNQV9ICiAKLQogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4YTQwMTAwMjAKLSNlbHNlCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGE0MDAwMDIwCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4YTQwMTAwMjAKKyNlbHNlIC8qIFNINzcwNS8wNi8wNy8wOSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4YTQwMDAwMjAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAotI2RlZmluZSBETVRFMV9JUlEJNDkKLSNkZWZpbmUgRE1URTJfSVJRCTUwCi0jZGVmaW5lIERNVEUzX0lSUQk1MQogI2RlZmluZSBETVRFNF9JUlEJNzYKLSNkZWZpbmUgRE1URTVfSVJRCTc3Ci0jZW5kaWYKIAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwogI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDIwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDUxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICisjZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MzApCisjZGVmaW5lIERNVEUwX0lSUQk0OAorI2RlZmluZSBETVRFNF9JUlEJNzYKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZFMDA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRjYwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkY2MDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCisjZGVmaW5lIERNVEU0X0lSUQk0MAkvKiBETUFDMEIgKi8KKyNkZWZpbmUgRE1URTZfSVJRCTQyCisjZGVmaW5lIERNVEU4X0lSUQk3NgkvKiBETUFDMUEgKi8KKyNkZWZpbmUgRE1URTlfSVJRCTc3CisjZGVmaW5lIERNVEUxMF9JUlEJNzIJLyogRE1BQzFCICovCisjZGVmaW5lIERNVEUxMV9JUlEJNzMKKyNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBETUFFMV9JUlEJNzQJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZEQzA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1URTZfSVJRCTQ2CisjZGVmaW5lIERNVEU4X0lSUQk5MgorI2RlZmluZSBETVRFOV9JUlEJOTMKKyNkZWZpbmUgRE1URTEwX0lSUQk5NAorI2RlZmluZSBETVRFMTFfSVJRCTk1CisjZGVmaW5lIERNQUUwX0lSUQkzOAkvKiBETUEgRXJyb3IgSVJRICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkM4MTgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZWxzZSAvKiBTSDc3ODUgKi8KKyNkZWZpbmUgRE1URTBfSVJRCTMzCisjZGVmaW5lIERNVEU0X0lSUQkzNworI2RlZmluZSBETVRFNl9JUlEJNTIKKyNkZWZpbmUgRE1URThfSVJRCTU0CisjZGVmaW5lIERNVEU5X0lSUQk1NQorI2RlZmluZSBETVRFMTBfSVJRCTU2CisjZGVmaW5lIERNVEUxMV9JUlEJNTcKKyNkZWZpbmUgRE1BRTBfSVJRCTM5CS8qIERNQSBFcnJvciBJUlEwICovCisjZGVmaW5lIERNQUUxX0lSUQk1OAkvKiBETUEgRXJyb3IgSVJRMSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2VuZGlmCisKKyNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKKyNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAorI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKKyNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCisjZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKKyNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAorI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4CisjZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKKworLyoKKyAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCisgKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KKyAqCisgKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgorICovCitlbnVtIHsKKwlYTUlUX1NaXzhCSVQsCisJWE1JVF9TWl8xNkJJVCwKKwlYTUlUX1NaXzMyQklULAorCVhNSVRfU1pfMTI4QklULAorCVhNSVRfU1pfMjU2QklULAorfTsKKworLyoKKyAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7CisJW1hNSVRfU1pfOEJJVF0JCT0gMCwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjQyNmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKLSNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKLQotI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAotI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCi0jZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAotI2RlZmluZSBUU184CTB4MDAwMDAwMDAKLSNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAotI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCi0jZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKLSNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAotCi0vKgotICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKLSAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgotICoKLSAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCi0gKi8KLWVudW0gewotCVhNSVRfU1pfOEJJVCwKLQlYTUlUX1NaXzE2QklULAotCVhNSVRfU1pfMzJCSVQsCi0JWE1JVF9TWl8xMjhCSVQsCi0JWE1JVF9TWl8yNTZCSVQsCi19OwotCi0vKgotICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAotfTsKLQotI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKaW5kZXggMjM1YjdjZC4uYmNiMzAyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaApAQCAtMSwzMSArMSwyOSBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDRfRE1BX0gKIAotI2RlZmluZSBETUFPUl9JTklUCSggMHg4MDAwIHwgRE1BT1JfRE1FICkKLQogLyogU0g3NzUxLzc3NjAvNzc4MCBETUEgSVJRIHNvdXJjZXMgKi8KLSNkZWZpbmUgRE1URTBfSVJRCTM0Ci0jZGVmaW5lIERNVEUxX0lSUQkzNQotI2RlZmluZSBETVRFMl9JUlEJMzYKLSNkZWZpbmUgRE1URTNfSVJRCTM3Ci0jZGVmaW5lIERNVEU0X0lSUQk0NAotI2RlZmluZSBETVRFNV9JUlEJNDUKLSNkZWZpbmUgRE1URTZfSVJRCTQ2Ci0jZGVmaW5lIERNVEU3X0lSUQk0NwotI2RlZmluZSBETUFFX0lSUQkzOAogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGZjODA4MDIwCiAKKyNkZWZpbmUgRE1BT1JfSU5JVAkoRE1BT1JfRE1FKQogI2RlZmluZSBDSENSX1RTX01BU0sJMHgxOAogI2RlZmluZSBDSENSX1RTX1NISUZUCTMKIAotI2luY2x1ZGUgPGNwdS9kbWEtc2g3NzgwLmg+Ci0jZWxzZQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmZmEwMDAwMAorI2luY2x1ZGUgPGNwdS9kbWEtc2g0YS5oPgorI2Vsc2UgLyogQ09ORklHX0NQVV9TSDRBICovCisvKgorICogU0g3NzUwL1NINzc1MS9TSDc3NjAKKyAqLworI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNVEU2X0lSUQk0NgorI2RlZmluZSBETUFFMF9JUlEJMzgKIAorI2RlZmluZSBETUFPUl9JTklUCSgweDgwMDB8RE1BT1JfRE1FKQorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4ZmZhMDAwMDAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweGZmYTAwMDcwCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCi0jZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDA4MAorI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDgwCiAjZGVmaW5lIFRTXzgJCTB4MDAwMDAwMTAKICNkZWZpbmUgVFNfMTYJCTB4MDAwMDAwMjAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMzAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCmluZGV4IGMyM2FmODEuLjc0OWQxYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaApAQCAtMjksNiArMjksMTAgQEAKICNkZWZpbmUgRlJRQ1IwCQkJMHhmZmM4MDAwMAogI2RlZmluZSBGUlFDUjEJCQkweGZmYzgwMDA0CiAjZGVmaW5lIEZSUU1SMQkJCTB4ZmZjODAwMTQKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKKyNkZWZpbmUgRlJRQ1IwCQkJMHhmZmM0MDAwMAorI2RlZmluZSBGUlFDUjEJCQkweGZmYzQwMDA0CisjZGVmaW5lIEZSUU1SMQkJCTB4ZmZjNDAwMTQKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiAjZGVmaW5lIEZSUUNSCQkJMHhmZmMwMDAxNAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKaW5kZXggOWVhOGViMi4uM2NlN2VmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKQEAgLTE0LDI4ICsxNCwzNSBAQAogI2RlZmluZSBNTVVfUFRFTAkweEZGMDAwMDA0CS8qIFBhZ2UgdGFibGUgZW50cnkgcmVnaXN0ZXIgTE9XICovCiAjZGVmaW5lIE1NVV9UVEIJCTB4RkYwMDAwMDgJLyogVHJhbnNsYXRpb24gdGFibGUgYmFzZSByZWdpc3RlciAqLwogI2RlZmluZSBNTVVfVEVBCQkweEZGMDAwMDBDCS8qIFRMQiBFeGNlcHRpb24gQWRkcmVzcyAqLwotI2RlZmluZSBNTVVfUFRFQQkweEZGMDAwMDM0CS8qIFBhZ2UgdGFibGUgZW50cnkgYXNzaXN0YW5jZSByZWdpc3RlciAqLworI2RlZmluZSBNTVVfUFRFQQkweEZGMDAwMDM0CS8qIFBURSBhc3Npc3RhbmNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9QVEVBRVgJMHhGRjAwMDA3QwkvKiBQVEUgQVNJRCBleHRlbnNpb24gcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBNTVVDUgkJMHhGRjAwMDAxMAkvKiBNTVUgQ29udHJvbCBSZWdpc3RlciAqLwogCi0jZGVmaW5lIE1NVV9JVExCX0FERFJFU1NfQVJSQVkJMHhGMjAwMDAwMAogI2RlZmluZSBNTVVfVVRMQl9BRERSRVNTX0FSUkFZCTB4RjYwMDAwMDAKKyNkZWZpbmUgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIJMHhGNjgwMDAwMAogI2RlZmluZSBNTVVfUEFHRV9BU1NPQ19CSVQJMHg4MAogCiAjZGVmaW5lIE1NVUNSX1RJCQkoMTw8MikKIAotI2lmZGVmIENPTkZJR19YMlRMQgotI2RlZmluZSBNTVVDUl9NRQkJKDEgPDwgNykKLSNlbHNlCi0jZGVmaW5lIE1NVUNSX01FCQkoMCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCiAjZGVmaW5lIE1NVUNSX1NFCQkoMSA8PCA0KQogI2Vsc2UKICNkZWZpbmUgTU1VQ1JfU0UJCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBRVgKKyNkZWZpbmUgTU1VQ1JfQUVYCQkoMSA8PCA2KQorI2Vsc2UKKyNkZWZpbmUgTU1VQ1JfQUVYCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1gyVExCCisjZGVmaW5lIE1NVUNSX01FCQkoMSA8PCA3KQorI2Vsc2UKKyNkZWZpbmUgTU1VQ1JfTUUJCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCiAjZGVmaW5lIE1NVUNSX1NRTUQJCSgxIDw8IDkpCiAjZWxzZQpAQCAtNDMsMTcgKzUwLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIE1NVV9OVExCX0VOVFJJRVMJNjQKLSNkZWZpbmUgTU1VX0NPTlRST0xfSU5JVAkoMHgwNXxNTVVDUl9TUU1EfE1NVUNSX01FfE1NVUNSX1NFKQotCi0jZGVmaW5lIE1NVV9JVExCX0RBVEFfQVJSQVkJMHhGMzAwMDAwMAotI2RlZmluZSBNTVVfVVRMQl9EQVRBX0FSUkFZCTB4RjcwMDAwMDAKLQotI2RlZmluZSBNTVVfVVRMQl9FTlRSSUVTCSAgIDY0Ci0jZGVmaW5lIE1NVV9VX0VOVFJZX1NISUZUCSAgICA4Ci0jZGVmaW5lIE1NVV9VVExCX1ZBTElECQkweDEwMAotI2RlZmluZSBNTVVfSVRMQl9FTlRSSUVTCSAgICA0Ci0jZGVmaW5lIE1NVV9JX0VOVFJZX1NISUZUCSAgICA4Ci0jZGVmaW5lIE1NVV9JVExCX1ZBTElECQkweDEwMAorI2RlZmluZSBNTVVfQ09OVFJPTF9JTklUCSgweDA1fE1NVUNSX1NRTUR8TU1VQ1JfTUV8TU1VQ1JfU0V8TU1VQ1JfQUVYKQogCiAjZGVmaW5lIFRSQQkweGZmMDAwMDIwCiAjZGVmaW5lIEVYUEVWVAkweGZmMDAwMDI0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ODhhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIFNINzc4NiBQaW5tdXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIEJhc2VkIG9uIHNoNzc4NS5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0NQVV9TSDc3ODZfSF9fCisjZGVmaW5lIF9fQ1BVX1NINzc4Nl9IX18KKworZW51bSB7CisJLyogUEEgKi8KKwlHUElPX1BBNywgR1BJT19QQTYsIEdQSU9fUEE1LCBHUElPX1BBNCwKKwlHUElPX1BBMywgR1BJT19QQTIsIEdQSU9fUEExLCBHUElPX1BBMCwKKworCS8qIFBCICovCisJR1BJT19QQjcsIEdQSU9fUEI2LCBHUElPX1BCNSwgR1BJT19QQjQsCisJR1BJT19QQjMsIEdQSU9fUEIyLCBHUElPX1BCMSwgR1BJT19QQjAsCisKKwkvKiBQQyAqLworCUdQSU9fUEM3LCBHUElPX1BDNiwgR1BJT19QQzUsIEdQSU9fUEM0LAorCUdQSU9fUEMzLCBHUElPX1BDMiwgR1BJT19QQzEsIEdQSU9fUEMwLAorCisJLyogUEQgKi8KKwlHUElPX1BENywgR1BJT19QRDYsIEdQSU9fUEQ1LCBHUElPX1BENCwKKwlHUElPX1BEMywgR1BJT19QRDIsIEdQSU9fUEQxLCBHUElPX1BEMCwKKworCS8qIFBFICovCisJR1BJT19QRTUsIEdQSU9fUEU0LCBHUElPX1BFMywgR1BJT19QRTIsCisJR1BJT19QRTEsIEdQSU9fUEUwLAorCisJLyogUEYgKi8KKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIFBHICovCisJR1BJT19QRzcsIEdQSU9fUEc2LCBHUElPX1BHNSwgR1BJT19QRzQsCisJR1BJT19QRzMsIEdQSU9fUEcyLCBHUElPX1BHMSwgR1BJT19QRzAsCisKKwkvKiBQSCAqLworCUdQSU9fUEg3LCBHUElPX1BINiwgR1BJT19QSDUsIEdQSU9fUEg0LAorCUdQSU9fUEgzLCBHUElPX1BIMiwgR1BJT19QSDEsIEdQSU9fUEgwLAorCisJLyogUEogKi8KKwlHUElPX1BKNywgR1BJT19QSjYsIEdQSU9fUEo1LCBHUElPX1BKNCwKKwlHUElPX1BKMywgR1BJT19QSjIsIEdQSU9fUEoxLCBHUElPX1BKMCwKKworCUdQSU9fRk5fQ0RFLAorCUdQSU9fRk5fRVRIX01BR0lDLAorCUdQSU9fRk5fRElTUCwKKwlHUElPX0ZOX0VUSF9MSU5LLAorCUdQSU9fRk5fRFI1LAorCUdQSU9fRk5fRVRIX1RYX0VSLAorCUdQSU9fRk5fRFI0LAorCUdQSU9fRk5fRVRIX1RYX0VOLAorCUdQSU9fRk5fRFIzLAorCUdQSU9fRk5fRVRIX1RYRDMsCisJR1BJT19GTl9EUjIsCisJR1BJT19GTl9FVEhfVFhEMiwKKwlHUElPX0ZOX0RSMSwKKwlHUElPX0ZOX0VUSF9UWEQxLAorCUdQSU9fRk5fRFIwLAorCUdQSU9fRk5fRVRIX1RYRDAsCisJR1BJT19GTl9WU1lOQywKKwlHUElPX0ZOX0hTUElfQ0xLLAorCUdQSU9fRk5fT0RERiwKKwlHUElPX0ZOX0hTUElfQ1MsCisJR1BJT19GTl9ERzUsCisJR1BJT19GTl9FVEhfTURJTywKKwlHUElPX0ZOX0RHNCwKKwlHUElPX0ZOX0VUSF9SWF9DTEssCisJR1BJT19GTl9ERzMsCisJR1BJT19GTl9FVEhfTURDLAorCUdQSU9fRk5fREcyLAorCUdQSU9fRk5fRVRIX0NPTCwKKwlHUElPX0ZOX0RHMSwKKwlHUElPX0ZOX0VUSF9UWF9DTEssCisJR1BJT19GTl9ERzAsCisJR1BJT19GTl9FVEhfQ1JTLAorCUdQSU9fRk5fRENMS0lOLAorCUdQSU9fRk5fSFNQSV9SWCwKKwlHUElPX0ZOX0hTWU5DLAorCUdQSU9fRk5fSFNQSV9UWCwKKwlHUElPX0ZOX0RCNSwKKwlHUElPX0ZOX0VUSF9SWEQzLAorCUdQSU9fRk5fREI0LAorCUdQSU9fRk5fRVRIX1JYRDIsCisJR1BJT19GTl9EQjMsCisJR1BJT19GTl9FVEhfUlhEMSwKKwlHUElPX0ZOX0RCMiwKKwlHUElPX0ZOX0VUSF9SWEQwLAorCUdQSU9fRk5fREIxLAorCUdQSU9fRk5fRVRIX1JYX0RWLAorCUdQSU9fRk5fREIwLAorCUdQSU9fRk5fRVRIX1JYX0VSLAorCUdQSU9fRk5fRENMS09VVCwKKwlHUElPX0ZOX1NDSUYxX1NMSywKKwlHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1RYRCwKKwlHUElPX0ZOX0RBQ0sxLAorCUdQSU9fRk5fQkFDSywKKwlHUElPX0ZOX0ZBTEUsCisJR1BJT19GTl9EQUNLMCwKKwlHUElPX0ZOX0ZDTEUsCisJR1BJT19GTl9EUkVRMSwKKwlHUElPX0ZOX0JSRVEsCisJR1BJT19GTl9VU0JfT1ZDMSwKKwlHUElPX0ZOX0RSRVEwLAorCUdQSU9fRk5fVVNCX09WQzAsCisJR1BJT19GTl9VU0JfUEVOQzEsCisJR1BJT19GTl9VU0JfUEVOQzAsCisJR1BJT19GTl9IQUMxX1NET1VULAorCUdQSU9fRk5fU1NJMV9TREFUQSwKKwlHUElPX0ZOX1NESUYxQ01ELAorCUdQSU9fRk5fSEFDMV9TRElOLAorCUdQSU9fRk5fU1NJMV9TQ0ssCisJR1BJT19GTl9TRElGMUNELAorCUdQSU9fRk5fSEFDMV9TWU5DLAorCUdQSU9fRk5fU1NJMV9XUywKKwlHUElPX0ZOX1NESUYxV1AsCisJR1BJT19GTl9IQUMxX0JJVENMSywKKwlHUElPX0ZOX1NTSTFfQ0xLLAorCUdQSU9fRk5fU0RJRjFDTEssCisJR1BJT19GTl9IQUMwX1NET1VULAorCUdQSU9fRk5fU1NJMF9TREFUQSwKKwlHUElPX0ZOX1NESUYxRDMsCisJR1BJT19GTl9IQUMwX1NESU4sCisJR1BJT19GTl9TU0kwX1NDSywKKwlHUElPX0ZOX1NESUYxRDIsCisJR1BJT19GTl9IQUMwX1NZTkMsCisJR1BJT19GTl9TU0kwX1dTLAorCUdQSU9fRk5fU0RJRjFEMSwKKwlHUElPX0ZOX0hBQzBfQklUQ0xLLAorCUdQSU9fRk5fU1NJMF9DTEssCisJR1BJT19GTl9TRElGMUQwLAorCUdQSU9fRk5fU0NJRjNfU0NLLAorCUdQSU9fRk5fU1NJMl9TREFUQSwKKwlHUElPX0ZOX1NDSUYzX1JYRCwKKwlHUElPX0ZOX1RDTEssCisJR1BJT19GTl9TU0kyX1NDSywKKwlHUElPX0ZOX1NDSUYzX1RYRCwKKwlHUElPX0ZOX0hBQ19SRVMsCisJR1BJT19GTl9TU0kyX1dTLAorCUdQSU9fRk5fREFDSzMsCisJR1BJT19GTl9TRElGMENNRCwKKwlHUElPX0ZOX0RBQ0syLAorCUdQSU9fRk5fU0RJRjBDRCwKKwlHUElPX0ZOX0RSRVEzLAorCUdQSU9fRk5fU0RJRjBXUCwKKwlHUElPX0ZOX1NDSUYwX0NUUywKKwlHUElPX0ZOX0RSRVEyLAorCUdQSU9fRk5fU0RJRjBDTEssCisJR1BJT19GTl9TQ0lGMF9SVFMsCisJR1BJT19GTl9JUkw3LAorCUdQSU9fRk5fU0RJRjBEMywKKwlHUElPX0ZOX1NDSUYwX1NDSywKKwlHUElPX0ZOX0lSTDYsCisJR1BJT19GTl9TRElGMEQyLAorCUdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fSVJMNSwKKwlHUElPX0ZOX1NESUYwRDEsCisJR1BJT19GTl9TQ0lGMF9UWEQsCisJR1BJT19GTl9JUkw0LAorCUdQSU9fRk5fU0RJRjBEMCwKKwlHUElPX0ZOX1NDSUY1X1NDSywKKwlHUElPX0ZOX0ZSQiwKKwlHUElPX0ZOX1NDSUY1X1JYRCwKKwlHUElPX0ZOX0lPSVMxNiwKKwlHUElPX0ZOX1NDSUY1X1RYRCwKKwlHUElPX0ZOX0NFMkIsCisJR1BJT19GTl9EUkFLMywKKwlHUElPX0ZOX0NFMkEsCisJR1BJT19GTl9TQ0lGNF9TQ0ssCisJR1BJT19GTl9EUkFLMiwKKwlHUElPX0ZOX1NTSTNfV1MsCisJR1BJT19GTl9TQ0lGNF9SWEQsCisJR1BJT19GTl9EUkFLMSwKKwlHUElPX0ZOX1NTSTNfU0RBVEEsCisJR1BJT19GTl9GU1RBVFVTLAorCUdQSU9fRk5fU0NJRjRfVFhELAorCUdQSU9fRk5fRFJBSzAsCisJR1BJT19GTl9TU0kzX1NDSywKKwlHUElPX0ZOX0ZTRSwKK307CisKKyNlbmRpZiAvKiBfX0NQVV9TSDc3ODZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiM2UxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIF9fTUFDSF9VUlFVRUxMX0gKKyNkZWZpbmUgX19NQUNIX1VSUVVFTExfSAorCisvKgorICogLS0tLS0tIDB4MDAwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MwIHwgKFNXMSxTVzQ3KSAgICBFRVBST00sIFNSQU0sIE5PUiBGTEFTSAorICogLS0tLS0rIDB4MDQwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MxIHwgKFNXNDcpICAgICAgICBTUkFNLCBTUkFNLUxBTi1QQ01DSUEsIE5PUiBGTEFTSAorICogLS0tLS0rIDB4MDgwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1MyIHwgICAgICAgICAgICAgICBERFIzCisgKiAgQ1MzIHwKKyAqIC0tLS0tKyAweDEwMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNCB8ICAgICAgICAgICAgICAgUENJZQorICogLS0tLS0rIDB4MTQwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M1IHwgKFNXNDcpICAgICAgICBMUkFNL1VSQU0sIFNSQU0tTEFOLVBDTUNJQQorICogLS0tLS0rIDB4MTgwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M2IHwgICAgICAgICAgICAgICBBVEEsIE5BTkQgRkxBU0gKKyAqIC0tLS0tKyAweDFjMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNyB8ICAgICAgICAgICAgICAgU0g3Nzg2IHJlZ2lzdGVyCisgKiAtLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIE5PUl9GTEFTSF9BRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgTk9SX0ZMQVNIX1NJWkUJMHgwNDAwMDAwMAorCisjZGVmaW5lIENTMV9CQVNFCTB4MDUwMDAwMDAKKyNkZWZpbmUgQ1M1X0JBU0UJMHgxNTAwMDAwMAorI2RlZmluZSBGUEdBX0JBU0UJQ1MxX0JBU0UKKworI2RlZmluZSBCT0FSRFJFRyhvZnMpCShGUEdBX0JBU0UgKyBvZnMjI19PRlMpCisjZGVmaW5lIFVCT0FSRFJFRyhvZnMpCSgweGEwMDAwMDAwICsgRlBHQV9CQVNFICsgb2ZzIyNfT0ZTKQorCisjZGVmaW5lIFNSU1RSX09GUwkweDAwMDAgLyogU3lzdGVtIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIEJETVJfT0ZTCTB4MDAxMCAvKiBCb2FyZCBvcGVyYXRpbmcgbW9kZSByZXNpc3RlciAqLworI2RlZmluZSBJUkwwU1JfT0ZTCTB4MDAyMCAvKiBJUkwwIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwwTVNLUl9PRlMJMHgwMDMwIC8qIElSTDAgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwxU1JfT0ZTCTB4MDA0MCAvKiBJUkwxIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwxTVNLUl9PRlMJMHgwMDUwIC8qIElSTDEgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwyU1JfT0ZTCTB4MDA2MCAvKiBJUkwyIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwyTVNLUl9PRlMJMHgwMDcwIC8qIElSTDIgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBJUkwzU1JfT0ZTCTB4MDA4MCAvKiBJUkwzIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJUkwzTVNLUl9PRlMJMHgwMDkwIC8qIElSTDMgTWFzayByZWdpc3RlciAqLworI2RlZmluZSBTT0ZUSU5UUl9PRlMJMHgwMTIwIC8qIFNvZnR3ZWFyIEludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBTTEVEUl9PRlMJMHgwMTMwIC8qIExFRCBjb250cm9sIHJlc2lzdGVyICovCisjZGVmaW5lIE1BUFNDSUZTV1JfT0ZTCTB4MDE0MCAvKiBNYXAvU0NJRiBTd2l0Y2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBWRVJSX09GUwkweDAxNTAgLyogRlBHQSBWZXJzaW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQREFURVJfT0ZTCTB4MDE2MCAvKiBGUEdBIERhdGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBZRUFSUl9PRlMJMHgwMTcwIC8qIEZQR0EgWWVhciByZWdpc3RlciAqLworI2RlZmluZSBUQ0xLQ1JfT0ZTCTB4MDE4MCAvKiBUQ0xLIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElQU1dNUl9PRlMJMHgxMDAwIC8qIERJUFNXIG1vbml0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBPRFJfT0ZTCTB4MTAxMCAvKiBPdXRwdXQgcG9ydCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIEFUQUNOUl9PRlMJMHgxMDIwIC8qIEFUQS1DTiBDb250cm9sL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBGUElORFJfT0ZTCTB4MTAzMCAvKiBJbnB1dCBwb3J0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURTV01SX09GUwkweDEwNDAgLyogTU9ERSBTVyBtb25pdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEREUjNCVVBDUl9PRlMJMHgxMDUwIC8qIEREUjMgQmFja3VwIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NJQ09ERUNDUl9PRlMJMHgxMDYwIC8qIFNTSS1DT0RFQyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVTTE9UU1JfT0ZTCTB4MTA3MCAvKiBQQ0lleHByZXNzIFNsb3Qgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSEVSUE9SVFNSX09GUwkweDEwODAgLyogRXRoZXJQaHkgUG9ydCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0hDUl9PRlMJMHgzMDAwIC8qIExhdGNoIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ1VBUl9PRlMJMHgzMDEwIC8qIExhdGNoIHVwcGVyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xBUl9PRlMJMHgzMDEyIC8qIExhdGNoIGxvd2VyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xVRFJfT0ZTCTB4MzAyNCAvKiBMYXRjaCBEMzEtMTYgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFUQ0xMRFJfT0ZTCTB4MzAyNiAvKiBMYXRjaCBEMTUtMCByZWdpc3RlciAqLworCisjZGVmaW5lIENIQVJMRURfT0ZTCTB4MjAwMCAvKiBDaGFyYWN0ZXIgTEVEICovCisKKyNlbmRpZiAgLyogX19NQUNIX1VSUVVFTExfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMiBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCmluZGV4IDJlMWI4NmUuLjgyYTNhMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCkBAIC0zMCw1ICszMCw2IEBACiBvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19EVU1QX0NPREUpCQkrPSBkaXNhc3NlbWJsZS5vCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1N2NmMGUwLi45OWFjZWIyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMiw4ICsxMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiBpbnQgbWFpbih2b2lkKQogewpAQCAtMjUsNSArMjcsMTEgQEAKIAlERUZJTkUoVElfUFJFX0NPVU5ULAlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKIAlERUZJTkUoVElfUkVTVEFSVF9CTE9DSyxvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHJlc3RhcnRfYmxvY2spKTsKIAorI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorCURFRklORShQQkVfQUREUkVTUywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgYWRkcmVzcykpOworCURFRklORShQQkVfT1JJR19BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBvcmlnX2FkZHJlc3MpKTsKKwlERUZJTkUoUEJFX05FWFQsIG9mZnNldG9mKHN0cnVjdCBwYmUsIG5leHQpKTsKKwlERUZJTkUoU1dTVVNQX0FSQ0hfUkVHU19TSVpFLCBzaXplb2Yoc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3MpKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGY0NzFkMjQuLjI2MDA2NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAKICMgU3BlY2lhbCBjYXNlcyBmb3IgZmFtaWx5IGFuY2VzdHJ5LgogCiBvYmotJChDT05GSUdfQ1BVX1NINEEpCQkrPSBzaDRhLworb2JqLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCSs9IHNobW9iaWxlLwogCiAjIENvbW1vbiBpbnRlcmZhY2VzLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IDdiMTcxMzcuLjFkYzg5NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjM5LDYgKzI0MSwzNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2xrX3JlY2FsY19yYXRlKTsKIAoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBjbGsgKm9sZDsKKworCWlmICghcGFyZW50IHx8ICFjbGspCisJCXJldHVybiByZXQ7CisKKwlvbGQgPSBjbGstPnBhcmVudDsKKwlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcGFyZW50KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPm9wcy0+c2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJY2xrLT5wYXJlbnQgPSAocmV0ID8gb2xkIDogcGFyZW50KTsKKwl9CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENMS19SQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfc2V0X3BhcmVudCk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0X3BhcmVudCk7CisKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+cm91bmRfcmF0ZSkpIHsKQEAgLTMyOSw2ICszNjAsNzAgQEAKIAlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBjbGtzX3N5c2Rldl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdGF0aWMgcG1fbWVzc2FnZV90IHByZXZfc3RhdGU7CisJc3RydWN0IGNsayAqY2xrcDsKKworCXN3aXRjaCAoc3RhdGUuZXZlbnQpIHsKKwljYXNlIFBNX0VWRU5UX09OOgorCQkvKiBSZXN1bWVpbmcgZnJvbSBoaWJlcm5hdGlvbiAqLworCQlpZiAocHJldl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJmNsb2NrX2xpc3QsIG5vZGUpCisJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMpKSB7CisJCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa3AtPnJhdGU7CisKKwkJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMtPnNldF9wYXJlbnQpKQorCQkJCQkJY2xrcC0+b3BzLT5zZXRfcGFyZW50KGNsa3AsCisJCQkJCQkJY2xrcC0+cGFyZW50KTsKKwkJCQkJaWYgKGxpa2VseShjbGtwLT5vcHMtPnNldF9yYXRlKSkKKwkJCQkJCWNsa3AtPm9wcy0+c2V0X3JhdGUoY2xrcCwKKwkJCQkJCQlyYXRlLCBOT19DSEFOR0UpOworCQkJCQllbHNlIGlmIChsaWtlbHkoY2xrcC0+b3BzLT5yZWNhbGMpKQorCQkJCQkJY2xrcC0+b3BzLT5yZWNhbGMoY2xrcCk7CisJCQkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX0ZSRUVaRToKKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCQlicmVhazsKKwl9CisKKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xrc19zeXNkZXZfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNsa3Nfc3lzZGV2X3N1c3BlbmQoZGV2LCBQTVNHX09OKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgY2xrc19zeXNkZXZfY2xhc3MgPSB7CisJLm5hbWUgPSAiY2xrcyIsCit9OworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgY2xrc19zeXNkZXZfZHJpdmVyID0geworCS5zdXNwZW5kID0gY2xrc19zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gY2xrc19zeXNkZXZfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGNsa3Nfc3lzZGV2X2RldiA9IHsKKwkuY2xzID0gJmNsa3Nfc3lzZGV2X2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX3N5c2Rldl9pbml0KHZvaWQpCit7CisJc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9jbGFzcyk7CisJc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY2xrc19zeXNkZXZfY2xhc3MsICZjbGtzX3N5c2Rldl9kcml2ZXIpOworCXN5c2Rldl9yZWdpc3RlcigmY2xrc19zeXNkZXZfZGV2KTsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGNsa19zeXNkZXZfaW5pdCk7CisjZW5kaWYKKwogaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQogewogCWludCBpLCByZXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKaW5kZXggNTZlNTg3OC4uMGUzMmQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3NjE5IFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgWW9zaGlub3JpIFNhdG8KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsMTUgKzE5LDEwIEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVdEVCwgRURNQUMsIENNVDAsIENNVDEsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwKIAlISUZfSElGSSwgSElGX0hJRkJJLAogCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLAogCVNJT0YsCi0KLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JU0NJRjAsIFNDSUYxLCBTQ0lGMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMzYsMjQgKzMyLDE4IEBACiAJSU5UQ19JUlEoSVJRNiwgODIpLCBJTlRDX0lSUShJUlE3LCA4MyksCiAJSU5UQ19JUlEoV0RULCA4NCksIElOVENfSVJRKEVETUFDLCA4NSksCiAJSU5UQ19JUlEoQ01UMCwgODYpLCBJTlRDX0lSUShDTVQxLCA4NyksCi0JSU5UQ19JUlEoU0NJRjBfRVJJLCA4OCksIElOVENfSVJRKFNDSUYwX1JYSSwgODkpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgOTApLCBJTlRDX0lSUShTQ0lGMF9UWEksIDkxKSwKLQlJTlRDX0lSUShTQ0lGMV9FUkksIDkyKSwgSU5UQ19JUlEoU0NJRjFfUlhJLCA5MyksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCA5NCksIElOVENfSVJRKFNDSUYxX1RYSSwgOTUpLAotCUlOVENfSVJRKFNDSUYyX0VSSSwgOTYpLCBJTlRDX0lSUShTQ0lGMl9SWEksIDk3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDk4KSwgSU5UQ19JUlEoU0NJRjJfVFhJLCA5OSksCisJSU5UQ19JUlEoU0NJRjAsIDg4KSwgSU5UQ19JUlEoU0NJRjAsIDg5KSwKKwlJTlRDX0lSUShTQ0lGMCwgOTApLCBJTlRDX0lSUShTQ0lGMCwgOTEpLAorCUlOVENfSVJRKFNDSUYxLCA5MiksIElOVENfSVJRKFNDSUYxLCA5MyksCisJSU5UQ19JUlEoU0NJRjEsIDk0KSwgSU5UQ19JUlEoU0NJRjEsIDk1KSwKKwlJTlRDX0lSUShTQ0lGMiwgOTYpLCBJTlRDX0lSUShTQ0lGMiwgOTcpLAorCUlOVENfSVJRKFNDSUYyLCA5OCksIElOVENfSVJRKFNDSUYyLCA5OSksCiAJSU5UQ19JUlEoSElGX0hJRkksIDEwMCksIElOVENfSVJRKEhJRl9ISUZCSSwgMTAxKSwKIAlJTlRDX0lSUShETUFDMCwgMTA0KSwgSU5UQ19JUlEoRE1BQzEsIDEwNSksCiAJSU5UQ19JUlEoRE1BQzIsIDEwNiksIElOVENfSVJRKERNQUMzLCAxMDcpLAogCUlOVENfSVJRKFNJT0YsIDEwOCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGY4MTQwMDA2LCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IElSUTAsIElSUTEsIElSUTIsIElSUTMgfSB9LAogCXsgMHhmODE0MDAwOCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKQEAgLTY0LDcgKzU0LDcgQEAKIAl7IDB4ZjgwODAwMDgsIDAsIDE2LCA0LCAvKiBJUFJHICovIHsgU0lPRiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NjE5IiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzYxOSIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKQEAgLTcyLDE3ICs2MiwxNyBAQAogCQkubWFwYmFzZQk9IDB4Zjg0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA4OCwgODksIDkxLCA5MH0sCisJCS5pcnFzCQk9IHsgODgsIDg4LCA4OCwgODggfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmODQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDkyLCA5MywgOTUsIDk0fSwKKwkJLmlycXMJCT0geyA5MiwgOTIsIDkyLCA5MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGY4NDIwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgOTYsIDk3LCA5OSwgOTh9LAorCQkuaXJxcwkJPSB7IDk2LCA5NiwgOTYsIDk2IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMKaW5kZXggZTYxMWQ3OS4uODQ0MjkzNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJlbmVzYXMgTVgtRyAoUjhBMDMwMjJCRykgU2V0dXAKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTIwLDIzICsyMCwxNSBAQAogCUlSUTgsIElSUTksIElSUTEwLCBJUlExMSwgSVJRMTIsIElSUTEzLCBJUlExNCwgSVJRMTUsCiAKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCi0KIAlTSU5UOCwgU0lOVDcsIFNJTlQ2LCBTSU5UNSwgU0lOVDQsIFNJTlQzLCBTSU5UMiwgU0lOVDEsCiAKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAorCVNDSUYwLCBTQ0lGMSwKIAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCisJTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1CisJTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBTQ0lGMCwgU0NJRjEsCi0JTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1CisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTksNDcgKzUxLDM2IEBACiAJSU5UQ19JUlEoU0lOVDQsIDk4KSwgSU5UQ19JUlEoU0lOVDMsIDk5KSwKIAlJTlRDX0lSUShTSU5UMiwgMTAwKSwgSU5UQ19JUlEoU0lOVDEsIDEwMSksCiAKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDIyMCksIElOVENfSVJRKFNDSUYwX1RYSSwgMjIxKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDIyMiksIElOVENfSVJRKFNDSUYwX0VSSSwgMjIzKSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDIyNCksIElOVENfSVJRKFNDSUYxX1RYSSwgMjI1KSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDIyNiksIElOVENfSVJRKFNDSUYxX0VSSSwgMjI3KSwKKwlJTlRDX0lSUShTQ0lGMCwgMjIwKSwgSU5UQ19JUlEoU0NJRjAsIDIyMSksCisJSU5UQ19JUlEoU0NJRjAsIDIyMiksIElOVENfSVJRKFNDSUYwLCAyMjMpLAorCUlOVENfSVJRKFNDSUYxLCAyMjQpLCBJTlRDX0lSUShTQ0lGMSwgMjI1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMjI2KSwgSU5UQ19JUlEoU0NJRjEsIDIyNyksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAyMjgpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAyMjkpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDIzMCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDIzMSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMjMyKSwgSU5UQ19JUlEoTVRVMl9UR0kwRSwgMjMzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjI4KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIyOSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMCksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzEpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzIpLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMzKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEYsIDIzNCksIElOVENfSVJRKE1UVTJfVEdJMUEsIDIzNSksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQiwgMjM2KSwgSU5UQ19JUlEoTVRVMl9UQ0kxViwgMjM3KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFVLCAyMzgpLCBJTlRDX0lSUShNVFUyX1RHSTJBLCAyMzkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzQpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM1KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM2KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzOCksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzkpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kyQiwgMjQwKSwgSU5UQ19JUlEoTVRVMl9UQ0kyViwgMjQxKSwKLQlJTlRDX0lSUShNVFUyX1RDSTJVLCAyNDIpLCBJTlRDX0lSUShNVFUyX1RHSTNBLCAyNDMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDApLCBJTlRDX0lSUShNVFUyX0dST1VQMywgMjQxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMywgMjQyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MyksCiAKIAlJTlRDX0lSUShNVFUyX1RHSTNCLCAyNDQpLAogCUlOVENfSVJRKE1UVTJfVEdJM0MsIDI0NSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTNELCAyNDYpLCBJTlRDX0lSUShNVFUyX1RDSTNWLCAyNDcpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDI0OCksIElOVENfSVJRKE1UVTJfVEdJNEIsIDI0OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMjUwKSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMjUxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ2KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0NyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0OCksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNTApLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjUxKSwKIAotCUlOVENfSVJRKE1UVTJfVENJNFYsIDI1MiksIElOVENfSVJRKE1UVTJfVEdJNVUsIDI1MyksCi0JSU5UQ19JUlEoTVRVMl9UR0k1ViwgMjU0KSwgSU5UQ19JUlEoTVRVMl9UR0k1VywgMjU1KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNSwgMjUyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1MyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1NCksIElOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDEsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JCSAgIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDIsIE1UVTJfVEdJMEYsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsCi0JCSAgIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsIE1UVTJfVEdJMkEpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDMsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JCSAgIE1UVTJfVEdJM0EpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDQsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsIE1UVTJfVEdJNEEsCi0JCSAgIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDUsIE1UVTJfVENJNFYsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzcsNyArMTE4LDcgQEAKIAkJLm1hcGJhc2UJPSAweGZmODA0MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMjMsIDIyMCwgMjIxLCAyMjIgfSwKKwkJLmlycXMJCT0geyAyMjAsIDIyMCwgMjIwLCAyMjAgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwppbmRleCAwNjMxZTQyLi4wMGY0MmY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwpAQCAtMiw2ICsyLDcgQEAKICAqICBTSDcyMDEgc2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQZXRlciBHcmlmZmluIHBncmlmZmluQG1wYy1kYXRhLmNvLnVrCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDU3ICsxOSwzMiBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCisKIAlBRENfQURJLAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCi0JUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCwKLQlXRFQsCi0JSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksIElJQzMwX1RFSSwKLQlJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwgSUlDMzFfVEVJLAotCUlJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLCBJSUMzMl9URUksCisKKwlNVFUyMF9BQkNELCBNVFUyMF9WRUYsIE1UVTIxX0FCLCBNVFUyMV9WVSwgTVRVMjJfQUIsIE1UVTIyX1ZVLAorCU1UVTIzX0FCQ0QsIE1UVTI0X0FCQ0QsIE1UVTI1X1VWVywgTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwKKworCVJUQywgV0RULAorCisJSUlDMzAsIElJQzMxLCBJSUMzMiwKIAogCURNQUMwX0RNSU5UMCwgRE1BQzFfRE1JTlQxLAogCURNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLAogCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKLQlTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJLAotCVNDSUY0X0JSSSwgU0NJRjRfRVJJLCBTQ0lGNF9SWEksIFNDSUY0X1RYSSwKLQlTQ0lGNV9CUkksIFNDSUY1X0VSSSwgU0NJRjVfUlhJLCBTQ0lGNV9UWEksCi0JU0NJRjZfQlJJLCBTQ0lGNl9FUkksIFNDSUY2X1JYSSwgU0NJRjZfVFhJLAotCVNDSUY3X0JSSSwgU0NJRjdfRVJJLCBTQ0lGN19SWEksIFNDSUY3X1RYSSwKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LCBTQ0lGNiwgU0NJRjcsCiAKIAlETUFDMF9ETUlOVEEsIERNQUM0X0RNSU5UNCwgRE1BQzVfRE1JTlQ1LCBETUFDNl9ETUlOVDYsCiAJRE1BQzdfRE1JTlQ3LAogCi0JUkNBTjBfRVJTLCBSQ0FOMF9PVlIsCi0JUkNBTjBfU0xFLAotCVJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCi0JUkNBTjFfRVJTLCBSQ0FOMV9PVlIsCi0JUkNBTjFfU0xFLAotCVJDQU4xX1JNMCwgUkNBTjFfUk0xLAorCVJDQU4wLCBSQ0FOMSwKIAogCVNTSTBfU1NJSSwgU1NJMV9TU0lJLAogCi0JVE1SMF9DTUlBMCwgVE1SMF9DTUlCMCwgVE1SMF9PVkkwLAotCVRNUjFfQ01JQTEsIFRNUjFfQ01JQjEsIFRNUjFfT1ZJMSwKKwlUTVIwLCBUTVIxLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCi0JSVJRLCBQSU5ULCBBREMsCi0JTVRVMjBfQUJDRCwgTVRVMjBfVkVGLCBNVFUyMV9BQiwgTVRVMjFfVlUsIE1UVTIyX0FCLCBNVFUyMl9WVSwKLQlNVFUyM19BQkNELCBNVFUyNF9BQkNELCBNVFUyNV9VVlcsCi0JUlRDLCBJSUMzMCwgSUlDMzEsIElJQzMyLAotCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsIFNDSUY2LCBTQ0lGNywKLQlSQ0FOMCwgUkNBTjEsIFRNUjAsIFRNUjEKLQorCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTc2LDYgKzUyLDcgQEAKIAlJTlRDX0lSUShJUlEyLCA2NiksIElOVENfSVJRKElSUTMsIDY3KSwKIAlJTlRDX0lSUShJUlE0LCA2OCksIElOVENfSVJRKElSUTUsIDY5KSwKIAlJTlRDX0lSUShJUlE2LCA3MCksIElOVENfSVJRKElSUTcsIDcxKSwKKwogCUlOVENfSVJRKFBJTlQwLCA4MCksIElOVENfSVJRKFBJTlQxLCA4MSksCiAJSU5UQ19JUlEoUElOVDIsIDgyKSwgSU5UQ19JUlEoUElOVDMsIDgzKSwKIAlJTlRDX0lSUShQSU5UNCwgODQpLCBJTlRDX0lSUShQSU5UNSwgODUpLApAQCAtODMsMTIzICs2MCw5MiBAQAogCiAJSU5UQ19JUlEoQURDX0FESSwgOTIpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTA4KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTA5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxMTApLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxMTEpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDExMiksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTEzKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTE0KSwKKwlJTlRDX0lSUShNVFUyMF9BQkNELCAxMDgpLCBJTlRDX0lSUShNVFUyMF9BQkNELCAxMDkpLAorCUlOVENfSVJRKE1UVTIwX0FCQ0QsIDExMCksIElOVENfSVJRKE1UVTIwX0FCQ0QsIDExMSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxMTYpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxMTcpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDEyMCksIElOVENfSVJRKE1UVTJfVENJMVUsIDEyMSksCisJSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTIpLCBJTlRDX0lSUShNVFUyMF9WRUYsIDExMyksCisJSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTQpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTI0KSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTI1KSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxMjgpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxMjkpLAorCUlOVENfSVJRKE1UVTIxX0FCLCAxMTYpLCBJTlRDX0lSUShNVFUyMV9BQiwgMTE3KSwKKwlJTlRDX0lSUShNVFUyMV9WVSwgMTIwKSwgSU5UQ19JUlEoTVRVMjFfVlUsIDEyMSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxMzIpLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxMzMpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDEzNCksIElOVENfSVJRKE1UVTJfVEdJM0QsIDEzNSksCisJSU5UQ19JUlEoTVRVMjJfQUIsIDEyNCksIElOVENfSVJRKE1UVTIyX0FCLCAxMjUpLAorCUlOVENfSVJRKE1UVTIyX1ZVLCAxMjgpLCBJTlRDX0lSUShNVFUyMl9WVSwgMTI5KSwKKworCUlOVENfSVJRKE1UVTIzX0FCQ0QsIDEzMiksIElOVENfSVJRKE1UVTIzX0FCQ0QsIDEzMyksCisJSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTM0KSwgSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTM1KSwKKwogCUlOVENfSVJRKE1UVTJfVENJM1YsIDEzNiksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxNDApLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxNDEpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE0MiksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE0MyksCisJSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQwKSwgSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQxKSwKKwlJTlRDX0lSUShNVFUyNF9BQkNELCAxNDIpLCBJTlRDX0lSUShNVFUyNF9BQkNELCAxNDMpLAorCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTQ0KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJNVUsIDE0OCksIElOVENfSVJRKE1UVTJfVEdJNVYsIDE0OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VywgMTUwKSwKKwlJTlRDX0lSUShNVFUyNV9VVlcsIDE0OCksIElOVENfSVJRKE1UVTI1X1VWVywgMTQ5KSwKKwlJTlRDX0lSUShNVFUyNV9VVlcsIDE1MCksCiAKLQlJTlRDX0lSUShSVENfQVJNLCAxNTIpLCBJTlRDX0lSUShSVENfUFJELCAxNTMpLAotCUlOVENfSVJRKFJUQ19DVVAsIDE1NCksIElOVENfSVJRKFdEVCwgMTU2KSwKKwlJTlRDX0lSUShSVEMsIDE1MiksIElOVENfSVJRKFJUQywgMTUzKSwKKwlJTlRDX0lSUShSVEMsIDE1NCksCiAKLQlJTlRDX0lSUShJSUMzMF9TVFBJLCAxNTcpLCBJTlRDX0lSUShJSUMzMF9OQUtJLCAxNTgpLAotCUlOVENfSVJRKElJQzMwX1JYSSwgMTU5KSwgSU5UQ19JUlEoSUlDMzBfVFhJLCAxNjApLAotCUlOVENfSVJRKElJQzMwX1RFSSwgMTYxKSwKKwlJTlRDX0lSUShXRFQsIDE1NiksCiAKLQlJTlRDX0lSUShJSUMzMV9TVFBJLCAxNjQpLCBJTlRDX0lSUShJSUMzMV9OQUtJLCAxNjUpLAotCUlOVENfSVJRKElJQzMxX1JYSSwgMTY2KSwgSU5UQ19JUlEoSUlDMzFfVFhJLCAxNjcpLAotCUlOVENfSVJRKElJQzMxX1RFSSwgMTY4KSwKKwlJTlRDX0lSUShJSUMzMCwgMTU3KSwgSU5UQ19JUlEoSUlDMzAsIDE1OCksCisJSU5UQ19JUlEoSUlDMzAsIDE1OSksIElOVENfSVJRKElJQzMwLCAxNjApLAorCUlOVENfSVJRKElJQzMwLCAxNjEpLAogCi0JSU5UQ19JUlEoSUlDMzJfU1RQSSwgMTcwKSwgSU5UQ19JUlEoSUlDMzJfTkFLSSwgMTcxKSwKLQlJTlRDX0lSUShJSUMzMl9SWEksIDE3MiksIElOVENfSVJRKElJQzMyX1RYSSwgMTczKSwKLQlJTlRDX0lSUShJSUMzMl9URUksIDE3NCksCisJSU5UQ19JUlEoSUlDMzEsIDE2NCksIElOVENfSVJRKElJQzMxLCAxNjUpLAorCUlOVENfSVJRKElJQzMxLCAxNjYpLCBJTlRDX0lSUShJSUMzMSwgMTY3KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY4KSwKKworCUlOVENfSVJRKElJQzMyLCAxNzApLCBJTlRDX0lSUShJSUMzMiwgMTcxKSwKKwlJTlRDX0lSUShJSUMzMiwgMTcyKSwgSU5UQ19JUlEoSUlDMzIsIDE3MyksCisJSU5UQ19JUlEoSUlDMzIsIDE3NCksCiAKIAlJTlRDX0lSUShETUFDMF9ETUlOVDAsIDE3NiksIElOVENfSVJRKERNQUMxX0RNSU5UMSwgMTc3KSwKIAlJTlRDX0lSUShETUFDMl9ETUlOVDIsIDE3OCksIElOVENfSVJRKERNQUMzX0RNSU5UMywgMTc5KSwKIAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMTgwKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAxODEpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMTgyKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAxODMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMTg0KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAxODUpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMTg2KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAxODcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMTg4KSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAxODkpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMTkwKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAxOTEpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMTkyKSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAxOTMpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMTk0KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAxOTUpLAotCUlOVENfSVJRKFNDSUY0X0JSSSwgMTk2KSwgSU5UQ19JUlEoU0NJRjRfRVJJLCAxOTcpLAotCUlOVENfSVJRKFNDSUY0X1JYSSwgMTk4KSwgSU5UQ19JUlEoU0NJRjRfVFhJLCAxOTkpLAotCUlOVENfSVJRKFNDSUY1X0JSSSwgMjAwKSwgSU5UQ19JUlEoU0NJRjVfRVJJLCAyMDEpLAotCUlOVENfSVJRKFNDSUY1X1JYSSwgMjAyKSwgSU5UQ19JUlEoU0NJRjVfVFhJLCAyMDMpLAotCUlOVENfSVJRKFNDSUY2X0JSSSwgMjA0KSwgSU5UQ19JUlEoU0NJRjZfRVJJLCAyMDUpLAotCUlOVENfSVJRKFNDSUY2X1JYSSwgMjA2KSwgSU5UQ19JUlEoU0NJRjZfVFhJLCAyMDcpLAotCUlOVENfSVJRKFNDSUY3X0JSSSwgMjA4KSwgSU5UQ19JUlEoU0NJRjdfRVJJLCAyMDkpLAotCUlOVENfSVJRKFNDSUY3X1JYSSwgMjEwKSwgSU5UQ19JUlEoU0NJRjdfVFhJLCAyMTEpLAorCUlOVENfSVJRKFNDSUYwLCAxODApLCBJTlRDX0lSUShTQ0lGMCwgMTgxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTgyKSwgSU5UQ19JUlEoU0NJRjAsIDE4MyksCisJSU5UQ19JUlEoU0NJRjEsIDE4NCksIElOVENfSVJRKFNDSUYxLCAxODUpLAorCUlOVENfSVJRKFNDSUYxLCAxODYpLCBJTlRDX0lSUShTQ0lGMSwgMTg3KSwKKwlJTlRDX0lSUShTQ0lGMiwgMTg4KSwgSU5UQ19JUlEoU0NJRjIsIDE4OSksCisJSU5UQ19JUlEoU0NJRjIsIDE5MCksIElOVENfSVJRKFNDSUYyLCAxOTEpLAorCUlOVENfSVJRKFNDSUYzLCAxOTIpLCBJTlRDX0lSUShTQ0lGMywgMTkzKSwKKwlJTlRDX0lSUShTQ0lGMywgMTk0KSwgSU5UQ19JUlEoU0NJRjMsIDE5NSksCisJSU5UQ19JUlEoU0NJRjQsIDE5NiksIElOVENfSVJRKFNDSUY0LCAxOTcpLAorCUlOVENfSVJRKFNDSUY0LCAxOTgpLCBJTlRDX0lSUShTQ0lGNCwgMTk5KSwKKwlJTlRDX0lSUShTQ0lGNSwgMjAwKSwgSU5UQ19JUlEoU0NJRjUsIDIwMSksCisJSU5UQ19JUlEoU0NJRjUsIDIwMiksIElOVENfSVJRKFNDSUY1LCAyMDMpLAorCUlOVENfSVJRKFNDSUY2LCAyMDQpLCBJTlRDX0lSUShTQ0lGNiwgMjA1KSwKKwlJTlRDX0lSUShTQ0lGNiwgMjA2KSwgSU5UQ19JUlEoU0NJRjYsIDIwNyksCisJSU5UQ19JUlEoU0NJRjcsIDIwOCksIElOVENfSVJRKFNDSUY3LCAyMDkpLAorCUlOVENfSVJRKFNDSUY3LCAyMTApLCBJTlRDX0lSUShTQ0lGNywgMjExKSwKIAogCUlOVENfSVJRKERNQUMwX0RNSU5UQSwgMjEyKSwgSU5UQ19JUlEoRE1BQzRfRE1JTlQ0LCAyMTYpLAogCUlOVENfSVJRKERNQUM1X0RNSU5UNSwgMjE3KSwgSU5UQ19JUlEoRE1BQzZfRE1JTlQ2LCAyMTgpLAogCUlOVENfSVJRKERNQUM3X0RNSU5UNywgMjE5KSwKIAotCUlOVENfSVJRKFJDQU4wX0VSUywgMjI4KSwgSU5UQ19JUlEoUkNBTjBfT1ZSLCAyMjkpLAotCUlOVENfSVJRKFJDQU4wX1NMRSwgMjMwKSwKLQlJTlRDX0lSUShSQ0FOMF9STTAsIDIzMSksIElOVENfSVJRKFJDQU4wX1JNMSwgMjMyKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjI4KSwgSU5UQ19JUlEoUkNBTjAsIDIyOSksCisJSU5UQ19JUlEoUkNBTjAsIDIzMCksCisJSU5UQ19JUlEoUkNBTjAsIDIzMSksIElOVENfSVJRKFJDQU4wLCAyMzIpLAogCi0JSU5UQ19JUlEoUkNBTjFfRVJTLCAyMzQpLCBJTlRDX0lSUShSQ0FOMV9PVlIsIDIzNSksCi0JSU5UQ19JUlEoUkNBTjFfU0xFLCAyMzYpLAotCUlOVENfSVJRKFJDQU4xX1JNMCwgMjM3KSwgSU5UQ19JUlEoUkNBTjFfUk0xLCAyMzgpLAorCUlOVENfSVJRKFJDQU4xLCAyMzQpLCBJTlRDX0lSUShSQ0FOMSwgMjM1KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM2KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM3KSwgSU5UQ19JUlEoUkNBTjEsIDIzOCksCiAKIAlJTlRDX0lSUShTU0kwX1NTSUksIDI0NCksIElOVENfSVJRKFNTSTFfU1NJSSwgMjQ1KSwKIAotCUlOVENfSVJRKFRNUjBfQ01JQTAsIDI0NiksIElOVENfSVJRKFRNUjBfQ01JQjAsIDI0NyksCi0JSU5UQ19JUlEoVE1SMF9PVkkwLCAyNDgpLAorCUlOVENfSVJRKFRNUjAsIDI0NiksIElOVENfSVJRKFRNUjAsIDI0NyksCisJSU5UQ19JUlEoVE1SMCwgMjQ4KSwKIAotCUlOVENfSVJRKFRNUjFfQ01JQTEsIDI1MiksIElOVENfSVJRKFRNUjFfQ01JQjEsIDI1MyksCi0JSU5UQ19JUlEoVE1SMV9PVkkxLCAyNTQpLAotCisJSU5UQ19JUlEoVE1SMSwgMjUyKSwgSU5UQ19JUlEoVE1SMSwgMjUzKSwKKwlJTlRDX0lSUShUTVIxLCAyNTQpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoTVRVMjBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUyMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCi0JSU5UQ19HUk9VUChNVFUyMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUyMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUyM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTI0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVMjVfVVZXLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCApLAotCi0JSU5UQ19HUk9VUChJSUMzMCwgSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksCi0JCSAgIElJQzMwX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMSwgSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksCi0JCSAgIElJQzMxX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMiwgSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksCi0JCSAgIElJQzMyX1RFSSksCi0KLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYzLCBTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEkpLAotCUlOVENfR1JPVVAoU0NJRjQsIFNDSUY0X0JSSSwgU0NJRjRfRVJJLCBTQ0lGNF9SWEksIFNDSUY0X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNSwgU0NJRjVfQlJJLCBTQ0lGNV9FUkksIFNDSUY1X1JYSSwgU0NJRjVfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY2LCBTQ0lGNl9CUkksIFNDSUY2X0VSSSwgU0NJRjZfUlhJLCBTQ0lGNl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjcsIFNDSUY3X0JSSSwgU0NJRjdfRVJJLCBTQ0lGN19SWEksIFNDSUY3X1RYSSksCi0KLQlJTlRDX0dST1VQKFJDQU4wLCBSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0JCSAgIFJDQU4wX1NMRSksCi0JSU5UQ19HUk9VUChSQ0FOMSwgUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLAotCQkgICBSQ0FOMV9TTEUpLAotCi0JSU5UQ19HUk9VUChUTVIwLCBUTVIwX0NNSUEwLCBUTVIwX0NNSUIwLCBUTVIwX09WSTApLAotCUlOVENfR1JPVVAoVE1SMSwgVE1SMV9DTUlBMSwgVE1SMV9DTUlCMSwgVE1SMV9PVkkxKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yMTIsNyArMTU4LDcgQEAKIAogCXsgMHhmZmZlOTgwNiwgMCwgMTYsIDQsIC8qIElQUjA5ICovIHsgUlRDLCBXRFQsIElJQzMwLCAwIH0gfSwKIAl7IDB4ZmZmZTk4MDgsIDAsIDE2LCA0LCAvKiBJUFIxMCAqLyB7IElJQzMxLCBJSUMzMiwgRE1BQzBfRE1JTlQwLCBETUFDMV9ETUlOVDEgfSB9LAotCXsgMHhmZmZlOTgwYSwgMCwgMTYsIDQsIC8qIElQUjExICovIHsgRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsIFNDSUYwICwgU0NJRjEgfSB9LAorCXsgMHhmZmZlOTgwYSwgMCwgMTYsIDQsIC8qIElQUjExICovIHsgRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsIFNDSUYwLCBTQ0lGMSB9IH0sCiAJeyAweGZmZmU5ODBjLCAwLCAxNiwgNCwgLyogSVBSMTIgKi8geyBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSB9IH0sCiAJeyAweGZmZmU5ODBlLCAwLCAxNiwgNCwgLyogSVBSMTMgKi8geyBTQ0lGNiwgU0NJRjcsIERNQUMwX0RNSU5UQSwgRE1BQzRfRE1JTlQ0ICB9IH0sCiAJeyAweGZmZmU5ODEwLCAwLCAxNiwgNCwgLyogSVBSMTQgKi8geyBETUFDNV9ETUlOVDUsIERNQUM2X0RNSU5UNiwgRE1BQzdfRE1JTlQ3LCAwIH0gfSwKQEAgLTIzNCw0MiArMTgwLDQyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTgxLCAxODIsIDE4MywgMTgwfQorCQkuaXJxcwkJPSB7IDE4MCwgMTgwLCAxODAsIDE4MCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4NSwgMTg2LCAxODcsIDE4NH0KKwkJLmlycXMJCT0geyAxODQsIDE4NCwgMTg0LCAxODQgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODksIDE4NiwgMTg3LCAxODh9CisJCS5pcnFzCQk9IHsgMTg4LCAxODgsIDE4OCwgMTg4IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTkzLCAxOTQsIDE5NSwgMTkyfQorCQkuaXJxcwkJPSB7IDE5MiwgMTkyLCAxOTIsIDE5MiB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWEwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE5NiwgMTk4LCAxOTksIDE5Nn0KKwkJLmlycXMJCT0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmVhODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDEsIDIwMiwgMjAzLCAyMDB9CisJCS5pcnFzCQk9IHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYjAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjA1LCAyMDYsIDIwNywgMjA0fQorCQkuaXJxcwkJPSB7IDIwNCwgMjA0LCAyMDQsIDIwNCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWI4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwOSwgMjEwLCAyMTEsIDIwOH0KKwkJLmlycXMJCT0geyAyMDgsIDIwOCwgMjA4LCAyMDggfQogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0yOTAsMTcgKzIzNiw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMTUzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDE1NCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAxNTIsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCmluZGV4IGU5OGRjNDQuLjgyMGRmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNINzIwMyBhbmQgU0g3MjYzIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsNTAgKzE4LDI3IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKLQlETUFDMF9ERUksIERNQUMwX0hFSSwgRE1BQzFfREVJLCBETUFDMV9IRUksCi0JRE1BQzJfREVJLCBETUFDMl9IRUksIERNQUMzX0RFSSwgRE1BQzNfSEVJLAotCURNQUM0X0RFSSwgRE1BQzRfSEVJLCBETUFDNV9ERUksIERNQUM1X0hFSSwKLQlETUFDNl9ERUksIERNQUM2X0hFSSwgRE1BQzdfREVJLCBETUFDN19IRUksCisJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAogCVVTQiwgTENEQywgQ01UMCwgQ01UMSwgQlNDLCBXRFQsCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCisKKwlNVFUwX0FCQ0QsIE1UVTBfVkVGLCBNVFUxX0FCLCBNVFUxX1ZVLCBNVFUyX0FCLCBNVFUyX1ZVLAorCU1UVTNfQUJDRCwgTVRVNF9BQkNELCBNVFUyX1RDSTNWLCBNVFUyX1RDSTRWLAorCiAJQURDX0FESSwKLQlJSUMzMF9TVFBJLCBJSUMzMF9OQUtJLCBJSUMzMF9SWEksIElJQzMwX1RYSSwgSUlDMzBfVEVJLAotCUlJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLCBJSUMzMV9URUksCi0JSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksIElJQzMyX1RFSSwKLQlJSUMzM19TVFBJLCBJSUMzM19OQUtJLCBJSUMzM19SWEksIElJQzMzX1RYSSwgSUlDMzNfVEVJLAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKLQlTU1UwX1NTRVJJLCBTU1UwX1NTUlhJLCBTU1UwX1NTVFhJLAotCVNTVTFfU1NFUkksIFNTVTFfU1NSWEksIFNTVTFfU1NUWEksCisKKwlJSUMzMCwgSUlDMzEsIElJQzMyLCBJSUMzMywKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywKKworCVNTVTAsIFNTVTEsCisKIAlTU0kwX1NTSUksIFNTSTFfU1NJSSwgU1NJMl9TU0lJLCBTU0kzX1NTSUksCiAKIAkvKiBST00tREVDLCBTREhJLCBTUkMsIGFuZCBJRUIgYXJlIFNINzI2MyBzcGVjaWZpYyAqLwotCVJPTURFQ19JU1ksIFJPTURFQ19JRVJSLCBST01ERUNfSUFSRywgUk9NREVDX0lTRUMsIFJPTURFQ19JQlVGLAotCVJPTURFQ19JUkVBRFksCi0KLQlGTENUTF9GTFNURUksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKLQotCVNESEkzLCBTREhJMCwgU0RISTEsCi0KLQlSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQLAotCVJDQU4wX0VSUywgUkNBTjBfT1ZSLCBSQ0FOMF9STTAsIFJDQU4wX1JNMSwgUkNBTjBfU0xFLAotCVJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwgUkNBTjFfU0xFLAotCi0JU1JDX09WRiwgU1JDX09ERkksIFNSQ19JREVJLCBJRUJJLAorCVJPTURFQywgRkxDVEwsIFNESEksIFJUQywgUkNBTjAsIFJDQU4xLAorCVNSQywgSUVCSSwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCi0JTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKLQlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwKLQlJSUMzMCwgSUlDMzEsIElJQzMyLCBJSUMzMywgU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCi0JU1NVMCwgU1NVMSwgUk9NREVDLCBTREhJLCBGTENUTCwgUlRDLCBSQ0FOMCwgUkNBTjEsIFNSQworCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTczLDc5ICs1MCw4MCBAQAogCUlOVENfSVJRKFBJTlQyLCA4MiksIElOVENfSVJRKFBJTlQzLCA4MyksCiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKIAlJTlRDX0lSUShQSU5UNiwgODYpLCBJTlRDX0lSUShQSU5UNywgODcpLAotCUlOVENfSVJRKERNQUMwX0RFSSwgMTA4KSwgSU5UQ19JUlEoRE1BQzBfSEVJLCAxMDkpLAotCUlOVENfSVJRKERNQUMxX0RFSSwgMTEyKSwgSU5UQ19JUlEoRE1BQzFfSEVJLCAxMTMpLAotCUlOVENfSVJRKERNQUMyX0RFSSwgMTE2KSwgSU5UQ19JUlEoRE1BQzJfSEVJLCAxMTcpLAotCUlOVENfSVJRKERNQUMzX0RFSSwgMTIwKSwgSU5UQ19JUlEoRE1BQzNfSEVJLCAxMjEpLAotCUlOVENfSVJRKERNQUM0X0RFSSwgMTI0KSwgSU5UQ19JUlEoRE1BQzRfSEVJLCAxMjUpLAotCUlOVENfSVJRKERNQUM1X0RFSSwgMTI4KSwgSU5UQ19JUlEoRE1BQzVfSEVJLCAxMjkpLAotCUlOVENfSVJRKERNQUM2X0RFSSwgMTMyKSwgSU5UQ19JUlEoRE1BQzZfSEVJLCAxMzMpLAotCUlOVENfSVJRKERNQUM3X0RFSSwgMTM2KSwgSU5UQ19JUlEoRE1BQzdfSEVJLCAxMzcpLAorCUlOVENfSVJRKERNQUMwLCAxMDgpLCBJTlRDX0lSUShETUFDMCwgMTA5KSwKKwlJTlRDX0lSUShETUFDMSwgMTEyKSwgSU5UQ19JUlEoRE1BQzEsIDExMyksCisJSU5UQ19JUlEoRE1BQzIsIDExNiksIElOVENfSVJRKERNQUMyLCAxMTcpLAorCUlOVENfSVJRKERNQUMzLCAxMjApLCBJTlRDX0lSUShETUFDMywgMTIxKSwKKwlJTlRDX0lSUShETUFDNCwgMTI0KSwgSU5UQ19JUlEoRE1BQzQsIDEyNSksCisJSU5UQ19JUlEoRE1BQzUsIDEyOCksIElOVENfSVJRKERNQUM1LCAxMjkpLAorCUlOVENfSVJRKERNQUM2LCAxMzIpLCBJTlRDX0lSUShETUFDNiwgMTMzKSwKKwlJTlRDX0lSUShETUFDNywgMTM2KSwgSU5UQ19JUlEoRE1BQzcsIDEzNyksCiAJSU5UQ19JUlEoVVNCLCAxNDApLCBJTlRDX0lSUShMQ0RDLCAxNDEpLAogCUlOVENfSVJRKENNVDAsIDE0MiksIElOVENfSVJRKENNVDEsIDE0MyksCiAJSU5UQ19JUlEoQlNDLCAxNDQpLCBJTlRDX0lSUShXRFQsIDE0NSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTQ2KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTQ3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxNDgpLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxNDkpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDE1MCksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTUxKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTUyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxNTMpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxNTQpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDE1NSksIElOVENfSVJRKE1UVTJfVENJMVUsIDE1NiksCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTU3KSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTU4KSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxNTkpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxNjApLAotCUlOVENfSVJRKE1UVTJfVEdJM0EsIDE2MSksIElOVENfSVJRKE1UVTJfVEdJM0IsIDE2MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQywgMTYzKSwgSU5UQ19JUlEoTVRVMl9UR0kzRCwgMTY0KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE0NiksIElOVENfSVJRKE1UVTBfQUJDRCwgMTQ3KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE0OCksIElOVENfSVJRKE1UVTBfQUJDRCwgMTQ5KSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTUwKSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTUxKSwgSU5UQ19JUlEoTVRVMF9WRUYsIDE1MiksCisJSU5UQ19JUlEoTVRVMV9BQiwgMTUzKSwgSU5UQ19JUlEoTVRVMV9BQiwgMTU0KSwKKwlJTlRDX0lSUShNVFUxX1ZVLCAxNTUpLCBJTlRDX0lSUShNVFUxX1ZVLCAxNTYpLAorCUlOVENfSVJRKE1UVTJfQUIsIDE1NyksIElOVENfSVJRKE1UVTJfQUIsIDE1OCksCisJSU5UQ19JUlEoTVRVMl9WVSwgMTU5KSwgSU5UQ19JUlEoTVRVMl9WVSwgMTYwKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MSksIElOVENfSVJRKE1UVTNfQUJDRCwgMTYyKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MyksIElOVENfSVJRKE1UVTNfQUJDRCwgMTY0KSwKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxNjUpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDE2NiksIElOVENfSVJRKE1UVTJfVEdJNEIsIDE2NyksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMTY4KSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMTY5KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE2NiksIElOVENfSVJRKE1UVTRfQUJDRCwgMTY3KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE2OCksIElOVENfSVJRKE1UVTRfQUJDRCwgMTY5KSwKIAlJTlRDX0lSUShNVFUyX1RDSTRWLCAxNzApLAogCUlOVENfSVJRKEFEQ19BREksIDE3MSksCi0JSU5UQ19JUlEoSUlDMzBfU1RQSSwgMTcyKSwgSU5UQ19JUlEoSUlDMzBfTkFLSSwgMTczKSwKLQlJTlRDX0lSUShJSUMzMF9SWEksIDE3NCksIElOVENfSVJRKElJQzMwX1RYSSwgMTc1KSwKLQlJTlRDX0lSUShJSUMzMF9URUksIDE3NiksCi0JSU5UQ19JUlEoSUlDMzFfU1RQSSwgMTc3KSwgSU5UQ19JUlEoSUlDMzFfTkFLSSwgMTc4KSwKLQlJTlRDX0lSUShJSUMzMV9SWEksIDE3OSksIElOVENfSVJRKElJQzMxX1RYSSwgMTgwKSwKLQlJTlRDX0lSUShJSUMzMV9URUksIDE4MSksCi0JSU5UQ19JUlEoSUlDMzJfU1RQSSwgMTgyKSwgSU5UQ19JUlEoSUlDMzJfTkFLSSwgMTgzKSwKLQlJTlRDX0lSUShJSUMzMl9SWEksIDE4NCksIElOVENfSVJRKElJQzMyX1RYSSwgMTg1KSwKLQlJTlRDX0lSUShJSUMzMl9URUksIDE4NiksCi0JSU5UQ19JUlEoSUlDMzNfU1RQSSwgMTg3KSwgSU5UQ19JUlEoSUlDMzNfTkFLSSwgMTg4KSwKLQlJTlRDX0lSUShJSUMzM19SWEksIDE4OSksIElOVENfSVJRKElJQzMzX1RYSSwgMTkwKSwKLQlJTlRDX0lSUShJSUMzM19URUksIDE5MSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAxOTIpLCBJTlRDX0lSUShTQ0lGMF9FUkksIDE5MyksCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAxOTQpLCBJTlRDX0lSUShTQ0lGMF9UWEksIDE5NSksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAxOTYpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDE5NyksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAxOTgpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDE5OSksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCAyMDApLCBJTlRDX0lSUShTQ0lGMl9FUkksIDIwMSksCi0JSU5UQ19JUlEoU0NJRjJfUlhJLCAyMDIpLCBJTlRDX0lSUShTQ0lGMl9UWEksIDIwMyksCi0JSU5UQ19JUlEoU0NJRjNfQlJJLCAyMDQpLCBJTlRDX0lSUShTQ0lGM19FUkksIDIwNSksCi0JSU5UQ19JUlEoU0NJRjNfUlhJLCAyMDYpLCBJTlRDX0lSUShTQ0lGM19UWEksIDIwNyksCi0JSU5UQ19JUlEoU1NVMF9TU0VSSSwgMjA4KSwgSU5UQ19JUlEoU1NVMF9TU1JYSSwgMjA5KSwKLQlJTlRDX0lSUShTU1UwX1NTVFhJLCAyMTApLAotCUlOVENfSVJRKFNTVTFfU1NFUkksIDIxMSksIElOVENfSVJRKFNTVTFfU1NSWEksIDIxMiksCi0JSU5UQ19JUlEoU1NVMV9TU1RYSSwgMjEzKSwKKwlJTlRDX0lSUShJSUMzMCwgMTcyKSwgSU5UQ19JUlEoSUlDMzAsIDE3MyksCisJSU5UQ19JUlEoSUlDMzAsIDE3NCksIElOVENfSVJRKElJQzMwLCAxNzUpLAorCUlOVENfSVJRKElJQzMwLCAxNzYpLAorCUlOVENfSVJRKElJQzMxLCAxNzcpLCBJTlRDX0lSUShJSUMzMSwgMTc4KSwKKwlJTlRDX0lSUShJSUMzMSwgMTc5KSwgSU5UQ19JUlEoSUlDMzEsIDE4MCksCisJSU5UQ19JUlEoSUlDMzEsIDE4MSksCisJSU5UQ19JUlEoSUlDMzIsIDE4MiksIElOVENfSVJRKElJQzMyLCAxODMpLAorCUlOVENfSVJRKElJQzMyLCAxODQpLCBJTlRDX0lSUShJSUMzMiwgMTg1KSwKKwlJTlRDX0lSUShJSUMzMiwgMTg2KSwKKwlJTlRDX0lSUShJSUMzMywgMTg3KSwgSU5UQ19JUlEoSUlDMzMsIDE4OCksCisJSU5UQ19JUlEoSUlDMzMsIDE4OSksIElOVENfSVJRKElJQzMzLCAxOTApLAorCUlOVENfSVJRKElJQzMzLCAxOTEpLAorCUlOVENfSVJRKFNDSUYwLCAxOTIpLCBJTlRDX0lSUShTQ0lGMCwgMTkzKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTk0KSwgSU5UQ19JUlEoU0NJRjAsIDE5NSksCisJSU5UQ19JUlEoU0NJRjEsIDE5NiksIElOVENfSVJRKFNDSUYxLCAxOTcpLAorCUlOVENfSVJRKFNDSUYxLCAxOTgpLCBJTlRDX0lSUShTQ0lGMSwgMTk5KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjAwKSwgSU5UQ19JUlEoU0NJRjIsIDIwMSksCisJSU5UQ19JUlEoU0NJRjIsIDIwMiksIElOVENfSVJRKFNDSUYyLCAyMDMpLAorCUlOVENfSVJRKFNDSUYzLCAyMDQpLCBJTlRDX0lSUShTQ0lGMywgMjA1KSwKKwlJTlRDX0lSUShTQ0lGMywgMjA2KSwgSU5UQ19JUlEoU0NJRjMsIDIwNyksCisJSU5UQ19JUlEoU1NVMCwgMjA4KSwgSU5UQ19JUlEoU1NVMCwgMjA5KSwKKwlJTlRDX0lSUShTU1UwLCAyMTApLAorCUlOVENfSVJRKFNTVTEsIDIxMSksIElOVENfSVJRKFNTVTEsIDIxMiksCisJSU5UQ19JUlEoU1NVMSwgMjEzKSwKIAlJTlRDX0lSUShTU0kwX1NTSUksIDIxNCksIElOVENfSVJRKFNTSTFfU1NJSSwgMjE1KSwKIAlJTlRDX0lSUShTU0kyX1NTSUksIDIxNiksIElOVENfSVJRKFNTSTNfU1NJSSwgMjE3KSwKLQlJTlRDX0lSUShGTENUTF9GTFNURUksIDIyNCksIElOVENfSVJRKEZMQ1RMX0ZMVEVOREksIDIyNSksCi0JSU5UQ19JUlEoRkxDVExfRkxUUkVRMEksIDIyNiksIElOVENfSVJRKEZMQ1RMX0ZMVFJFUTFJLCAyMjcpLAotCUlOVENfSVJRKFJUQ19BUk0sIDIzMSksIElOVENfSVJRKFJUQ19QUkQsIDIzMiksCi0JSU5UQ19JUlEoUlRDX0NVUCwgMjMzKSwKLQlJTlRDX0lSUShSQ0FOMF9FUlMsIDIzNCksIElOVENfSVJRKFJDQU4wX09WUiwgMjM1KSwKLQlJTlRDX0lSUShSQ0FOMF9STTAsIDIzNiksIElOVENfSVJRKFJDQU4wX1JNMSwgMjM3KSwKLQlJTlRDX0lSUShSQ0FOMF9TTEUsIDIzOCksCi0JSU5UQ19JUlEoUkNBTjFfRVJTLCAyMzkpLCBJTlRDX0lSUShSQ0FOMV9PVlIsIDI0MCksCi0JSU5UQ19JUlEoUkNBTjFfUk0wLCAyNDEpLCBJTlRDX0lSUShSQ0FOMV9STTEsIDI0MiksCi0JSU5UQ19JUlEoUkNBTjFfU0xFLCAyNDMpLAorCUlOVENfSVJRKEZMQ1RMLCAyMjQpLCBJTlRDX0lSUShGTENUTCwgMjI1KSwKKwlJTlRDX0lSUShGTENUTCwgMjI2KSwgSU5UQ19JUlEoRkxDVEwsIDIyNyksCisJSU5UQ19JUlEoUlRDLCAyMzEpLCBJTlRDX0lSUShSVEMsIDIzMiksCisJSU5UQ19JUlEoUlRDLCAyMzMpLAorCUlOVENfSVJRKFJDQU4wLCAyMzQpLCBJTlRDX0lSUShSQ0FOMCwgMjM1KSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM2KSwgSU5UQ19JUlEoUkNBTjAsIDIzNyksCisJSU5UQ19JUlEoUkNBTjAsIDIzOCksCisJSU5UQ19JUlEoUkNBTjEsIDIzOSksIElOVENfSVJRKFJDQU4xLCAyNDApLAorCUlOVENfSVJRKFJDQU4xLCAyNDEpLCBJTlRDX0lSUShSQ0FOMSwgMjQyKSwKKwlJTlRDX0lSUShSQ0FOMSwgMjQzKSwKIAogCS8qIFNINzI2My1zcGVjaWZpYyB0cmFzaCAqLwogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMKLQlJTlRDX0lSUShST01ERUNfSVNZLCAyMTgpLCBJTlRDX0lSUShST01ERUNfSUVSUiwgMjE5KSwKLQlJTlRDX0lSUShST01ERUNfSUFSRywgMjIwKSwgSU5UQ19JUlEoUk9NREVDX0lTRUMsIDIyMSksCi0JSU5UQ19JUlEoUk9NREVDX0lCVUYsIDIyMiksIElOVENfSVJRKFJPTURFQ19JUkVBRFksIDIyMyksCisJSU5UQ19JUlEoUk9NREVDLCAyMTgpLCBJTlRDX0lSUShST01ERUMsIDIxOSksCisJSU5UQ19JUlEoUk9NREVDLCAyMjApLCBJTlRDX0lSUShST01ERUMsIDIyMSksCisJSU5UQ19JUlEoUk9NREVDLCAyMjIpLCBJTlRDX0lSUShST01ERUMsIDIyMyksCiAKLQlJTlRDX0lSUShTREhJMywgMjI4KSwgSU5UQ19JUlEoU0RISTAsIDIyOSksIElOVENfSVJRKFNESEkxLCAyMzApLAorCUlOVENfSVJRKFNESEksIDIyOCksIElOVENfSVJRKFNESEksIDIyOSksCisJSU5UQ19JUlEoU0RISSwgMjMwKSwKIAotCUlOVENfSVJRKFNSQ19PVkYsIDI0NCksIElOVENfSVJRKFNSQ19PREZJLCAyNDUpLAotCUlOVENfSVJRKFNSQ19JREVJLCAyNDYpLAorCUlOVENfSVJRKFNSQywgMjQ0KSwgSU5UQ19JUlEoU1JDLCAyNDUpLAorCUlOVENfSVJRKFNSQywgMjQ2KSwKIAogCUlOVENfSVJRKElFQkksIDI0NyksCiAjZW5kaWYKQEAgLTE1NCw1MCArMTMyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ERUksIERNQUMwX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJLCBETUFDMV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSSwgRE1BQzJfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMzLCBETUFDM19ERUksIERNQUMzX0hFSSksCi0JSU5UQ19HUk9VUChETUFDNCwgRE1BQzRfREVJLCBETUFDNF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzUsIERNQUM1X0RFSSwgRE1BQzVfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM2LCBETUFDNl9ERUksIERNQUM2X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNywgRE1BQzdfREVJLCBETUFDN19IRUkpLAotCUlOVENfR1JPVVAoTVRVMF9BQkNELCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBEKSwKLQlJTlRDX0dST1VQKE1UVTBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQlJTlRDX0dST1VQKE1UVTFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyX0FCLCBNVFUyX1RHSTJBLCBNVFUyX1RHSTJCKSwKLQlJTlRDX0dST1VQKE1UVTJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTRfQUJDRCwgTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCksCi0JSU5UQ19HUk9VUChJSUMzMCwgSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksCi0JCSAgIElJQzMwX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMSwgSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksCi0JCSAgIElJQzMxX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMiwgSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksCi0JCSAgIElJQzMyX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMywgSUlDMzNfU1RQSSwgSUlDMzNfTkFLSSwgSUlDMzNfUlhJLCBJSUMzM19UWEksCi0JCSAgIElJQzMzX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKLQlJTlRDX0dST1VQKFNTVTAsIFNTVTBfU1NFUkksIFNTVTBfU1NSWEksIFNTVTBfU1NUWEkpLAotCUlOVENfR1JPVVAoU1NVMSwgU1NVMV9TU0VSSSwgU1NVMV9TU1JYSSwgU1NVMV9TU1RYSSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwKLQkJICAgRkxDVExfRkxUUkVRMUkpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQKSwKLQlJTlRDX0dST1VQKFJDQU4wLCBSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0JCSAgIFJDQU4wX1NMRSksCi0JSU5UQ19HUk9VUChSQ0FOMSwgUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLAotCQkgICBSQ0FOMV9TTEUpLAotCi0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MwotCUlOVENfR1JPVVAoUk9NREVDLCBST01ERUNfSVNZLCBST01ERUNfSUVSUiwgUk9NREVDX0lBUkcsCi0JCSAgIFJPTURFQ19JU0VDLCBST01ERUNfSUJVRiwgUk9NREVDX0lSRUFEWSksCi0JSU5UQ19HUk9VUChTREhJLCBTREhJMywgU0RISTAsIFNESEkxKSwKLQlJTlRDX0dST1VQKFNSQywgU1JDX09WRiwgU1JDX09ERkksIFNSQ19JREVJKSwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTI0MiwyMiArMTc2LDIyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5MywgMTk0LCAxOTUsIDE5MiB9LAorCQkuaXJxcwkJPSAgeyAxOTIsIDE5MiwgMTkyLCAxOTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5NywgMTk4LCAxOTksIDE5NiB9LAorCQkuaXJxcwkJPSAgeyAxOTYsIDE5NiwgMTk2LCAxOTYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwMSwgMjAyLCAyMDMsIDIwMCB9LAorCQkuaXJxcwkJPSAgeyAyMDAsIDIwMCwgMjAwLCAyMDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwNSwgMjA2LCAyMDcsIDIwNCB9LAorCQkuaXJxcwkJPSAgeyAyMDQsIDIwNCwgMjA0LCAyMDQgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMjc4LDE3ICsyMTIsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIzMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMzMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjMxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwppbmRleCBlNmQ0ZWM0Li5jNDZhODM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNINzIwNiBTZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvc2hpbm9yaSBTYXRvCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE5LDM0ICsyMCwyMyBAQAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAogCUFEQ19BREkwLCBBRENfQURJMSwKLQlETUFDMF9ERUksIERNQUMwX0hFSSwgRE1BQzFfREVJLCBETUFDMV9IRUksCi0JRE1BQzJfREVJLCBETUFDMl9IRUksIERNQUMzX0RFSSwgRE1BQzNfSEVJLAotCURNQUM0X0RFSSwgRE1BQzRfSEVJLCBETUFDNV9ERUksIERNQUM1X0hFSSwKLQlETUFDNl9ERUksIERNQUM2X0hFSSwgRE1BQzdfREVJLCBETUFDN19IRUksCi0JQ01UMCwgQ01UMSwgQlNDLCBXRFQsCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCi0JTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VywKLQlQT0UyX09FSTEsIFBPRTJfT0VJMiwKLQlNVFUyU19UR0kzQSwgTVRVMlNfVEdJM0IsIE1UVTJTX1RHSTNDLCBNVFUyU19UR0kzRCwgTVRVMlNfVENJM1YsCi0JTVRVMlNfVEdJNEEsIE1UVTJTX1RHSTRCLCBNVFUyU19UR0k0QywgTVRVMlNfVEdJNEQsIE1UVTJTX1RDSTRWLAotCU1UVTJTX1RHSTVVLCBNVFUyU19UR0k1ViwgTVRVMlNfVEdJNVcsCi0JUE9FMl9PRUkzLAotCUlJQzNfU1RQSSwgSUlDM19OQUtJLCBJSUMzX1JYSSwgSUlDM19UWEksIElJQzNfVEVJLAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCisJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAorCiAJTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKIAlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwgTVRVNSwgUE9FMl8xMiwgTVRVM1NfQUJDRCwgTVRVNFNfQUJDRCwgTVRVNVMsCi0JSUlDMywgU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisJSUlDMywKKworCUNNVDAsIENNVDEsIEJTQywgV0RULAorCisJTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwgTVRVMlNfVENJM1YsIE1UVTJTX1RDSTRWLAorCisJUE9FMl9PRUkzLAorCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisKKwkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTksODYgKzQ5LDU4IEBACiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKIAlJTlRDX0lSUShQSU5UNiwgODYpLCBJTlRDX0lSUShQSU5UNywgODcpLAogCUlOVENfSVJRKEFEQ19BREkwLCA5MiksIElOVENfSVJRKEFEQ19BREkxLCA5NiksCi0JSU5UQ19JUlEoRE1BQzBfREVJLCAxMDgpLCBJTlRDX0lSUShETUFDMF9IRUksIDEwOSksCi0JSU5UQ19JUlEoRE1BQzFfREVJLCAxMTIpLCBJTlRDX0lSUShETUFDMV9IRUksIDExMyksCi0JSU5UQ19JUlEoRE1BQzJfREVJLCAxMTYpLCBJTlRDX0lSUShETUFDMl9IRUksIDExNyksCi0JSU5UQ19JUlEoRE1BQzNfREVJLCAxMjApLCBJTlRDX0lSUShETUFDM19IRUksIDEyMSksCi0JSU5UQ19JUlEoRE1BQzRfREVJLCAxMjQpLCBJTlRDX0lSUShETUFDNF9IRUksIDEyNSksCi0JSU5UQ19JUlEoRE1BQzVfREVJLCAxMjgpLCBJTlRDX0lSUShETUFDNV9IRUksIDEyOSksCi0JSU5UQ19JUlEoRE1BQzZfREVJLCAxMzIpLCBJTlRDX0lSUShETUFDNl9IRUksIDEzMyksCi0JSU5UQ19JUlEoRE1BQzdfREVJLCAxMzYpLCBJTlRDX0lSUShETUFDN19IRUksIDEzNyksCisJSU5UQ19JUlEoRE1BQzAsIDEwOCksIElOVENfSVJRKERNQUMwLCAxMDkpLAorCUlOVENfSVJRKERNQUMxLCAxMTIpLCBJTlRDX0lSUShETUFDMSwgMTEzKSwKKwlJTlRDX0lSUShETUFDMiwgMTE2KSwgSU5UQ19JUlEoRE1BQzIsIDExNyksCisJSU5UQ19JUlEoRE1BQzMsIDEyMCksIElOVENfSVJRKERNQUMzLCAxMjEpLAorCUlOVENfSVJRKERNQUM0LCAxMjQpLCBJTlRDX0lSUShETUFDNCwgMTI1KSwKKwlJTlRDX0lSUShETUFDNSwgMTI4KSwgSU5UQ19JUlEoRE1BQzUsIDEyOSksCisJSU5UQ19JUlEoRE1BQzYsIDEzMiksIElOVENfSVJRKERNQUM2LCAxMzMpLAorCUlOVENfSVJRKERNQUM3LCAxMzYpLCBJTlRDX0lSUShETUFDNywgMTM3KSwKIAlJTlRDX0lSUShDTVQwLCAxNDApLCBJTlRDX0lSUShDTVQxLCAxNDQpLAogCUlOVENfSVJRKEJTQywgMTQ4KSwgSU5UQ19JUlEoV0RULCAxNTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDE1NiksIElOVENfSVJRKE1UVTJfVEdJMEIsIDE1NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTU4KSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTU5KSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxNjApLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDE2MSksIElOVENfSVJRKE1UVTJfVEdJMEYsIDE2MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTY0KSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTY1KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxNjgpLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxNjkpLAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDE3MiksIElOVENfSVJRKE1UVTJfVEdJMkIsIDE3MyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTc2KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTc3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxODApLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxODEpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDE4MiksIElOVENfSVJRKE1UVTJfVEdJM0QsIDE4MyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNTYpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE1NyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNTgpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE1OSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE2MCksIElOVENfSVJRKE1UVTBfVkVGLCAxNjEpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNjIpLAorCUlOVENfSVJRKE1UVTFfQUIsIDE2NCksIElOVENfSVJRKE1UVTFfQUIsIDE2NSksCisJSU5UQ19JUlEoTVRVMV9WVSwgMTY4KSwgSU5UQ19JUlEoTVRVMV9WVSwgMTY5KSwKKwlJTlRDX0lSUShNVFUyX0FCLCAxNzIpLCBJTlRDX0lSUShNVFUyX0FCLCAxNzMpLAorCUlOVENfSVJRKE1UVTJfVlUsIDE3NiksIElOVENfSVJRKE1UVTJfVlUsIDE3NyksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxODApLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MSksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxODIpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MyksCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTg0KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxODgpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxODkpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE5MCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE5MSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxODgpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE4OSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxOTApLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE5MSksCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTkyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTVVLCAxOTYpLCBJTlRDX0lSUShNVFUyX1RHSTVWLCAxOTcpLAotCUlOVENfSVJRKE1UVTJfVEdJNVcsIDE5OCksCi0JSU5UQ19JUlEoUE9FMl9PRUkxLCAyMDApLCBJTlRDX0lSUShQT0UyX09FSTIsIDIwMSksCi0JSU5UQ19JUlEoTVRVMlNfVEdJM0EsIDIwNCksIElOVENfSVJRKE1UVTJTX1RHSTNCLCAyMDUpLAotCUlOVENfSVJRKE1UVTJTX1RHSTNDLCAyMDYpLCBJTlRDX0lSUShNVFUyU19UR0kzRCwgMjA3KSwKKwlJTlRDX0lSUShNVFU1LCAxOTYpLCBJTlRDX0lSUShNVFU1LCAxOTcpLAorCUlOVENfSVJRKE1UVTUsIDE5OCksCisJSU5UQ19JUlEoUE9FMl8xMiwgMjAwKSwgSU5UQ19JUlEoUE9FMl8xMiwgMjAxKSwKKwlJTlRDX0lSUShNVFUzU19BQkNELCAyMDQpLCBJTlRDX0lSUShNVFUzU19BQkNELCAyMDUpLAorCUlOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNiksIElOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNyksCiAJSU5UQ19JUlEoTVRVMlNfVENJM1YsIDIwOCksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNEEsIDIxMiksIElOVENfSVJRKE1UVTJTX1RHSTRCLCAyMTMpLAotCUlOVENfSVJRKE1UVTJTX1RHSTRDLCAyMTQpLCBJTlRDX0lSUShNVFUyU19UR0k0RCwgMjE1KSwKKwlJTlRDX0lSUShNVFU0U19BQkNELCAyMTIpLCBJTlRDX0lSUShNVFU0U19BQkNELCAyMTMpLAorCUlOVENfSVJRKE1UVTRTX0FCQ0QsIDIxNCksIElOVENfSVJRKE1UVTRTX0FCQ0QsIDIxNSksCiAJSU5UQ19JUlEoTVRVMlNfVENJNFYsIDIxNiksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNVUsIDIyMCksIElOVENfSVJRKE1UVTJTX1RHSTVWLCAyMjEpLAotCUlOVENfSVJRKE1UVTJTX1RHSTVXLCAyMjIpLAorCUlOVENfSVJRKE1UVTVTLCAyMjApLCBJTlRDX0lSUShNVFU1UywgMjIxKSwKKwlJTlRDX0lSUShNVFU1UywgMjIyKSwKIAlJTlRDX0lSUShQT0UyX09FSTMsIDIyNCksCi0JSU5UQ19JUlEoSUlDM19TVFBJLCAyMjgpLCBJTlRDX0lSUShJSUMzX05BS0ksIDIyOSksCi0JSU5UQ19JUlEoSUlDM19SWEksIDIzMCksIElOVENfSVJRKElJQzNfVFhJLCAyMzEpLAotCUlOVENfSVJRKElJQzNfVEVJLCAyMzIpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMjQwKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAyNDEpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMjQyKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAyNDMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMjQ0KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAyNDUpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMjQ2KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAyNDcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMjQ4KSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAyNDkpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMjUwKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAyNTEpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMjUyKSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAyNTMpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMjU0KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAyNTUpLAorCUlOVENfSVJRKElJQzMsIDIyOCksIElOVENfSVJRKElJQzMsIDIyOSksCisJSU5UQ19JUlEoSUlDMywgMjMwKSwgSU5UQ19JUlEoSUlDMywgMjMxKSwKKwlJTlRDX0lSUShJSUMzLCAyMzIpLAorCUlOVENfSVJRKFNDSUYwLCAyNDApLCBJTlRDX0lSUShTQ0lGMCwgMjQxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjQyKSwgSU5UQ19JUlEoU0NJRjAsIDI0MyksCisJSU5UQ19JUlEoU0NJRjEsIDI0NCksIElOVENfSVJRKFNDSUYxLCAyNDUpLAorCUlOVENfSVJRKFNDSUYxLCAyNDYpLCBJTlRDX0lSUShTQ0lGMSwgMjQ3KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjQ4KSwgSU5UQ19JUlEoU0NJRjIsIDI0OSksCisJSU5UQ19JUlEoU0NJRjIsIDI1MCksIElOVENfSVJRKFNDSUYyLCAyNTEpLAorCUlOVENfSVJRKFNDSUYzLCAyNTIpLCBJTlRDX0lSUShTQ0lGMywgMjUzKSwKKwlJTlRDX0lSUShTQ0lGMywgMjU0KSwgSU5UQ19JUlEoU0NJRjMsIDI1NSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfREVJLCBETUFDMF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSSwgRE1BQzFfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUksIERNQUMyX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMywgRE1BQzNfREVJLCBETUFDM19IRUkpLAotCUlOVENfR1JPVVAoRE1BQzQsIERNQUM0X0RFSSwgRE1BQzRfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM1LCBETUFDNV9ERUksIERNQUM1X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNiwgRE1BQzZfREVJLCBETUFDNl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzcsIERNQUM3X0RFSSwgRE1BQzdfSEVJKSwKLQlJTlRDX0dST1VQKE1UVTBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0JSU5UQ19HUk9VUChNVFUxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVNSwgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChQT0UyXzEyLCBQT0UyX09FSTEsIFBPRTJfT0VJMiksCi0JSU5UQ19HUk9VUChNVFUzU19BQkNELCBNVFUyU19UR0kzQSwgTVRVMlNfVEdJM0IsCi0JCSAgIE1UVTJTX1RHSTNDLCBNVFUyU19UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0U19BQkNELCBNVFUyU19UR0k0QSwgTVRVMlNfVEdJNEIsCi0JCSAgIE1UVTJTX1RHSTRDLCBNVFUyU19UR0k0RCksCi0JSU5UQ19HUk9VUChNVFU1UywgTVRVMlNfVEdJNVUsIE1UVTJTX1RHSTVWLCBNVFUyU19UR0k1VyksCi0JSU5UQ19HUk9VUChJSUMzLCBJSUMzX1NUUEksIElJQzNfTkFLSSwgSUlDM19SWEksIElJQzNfVFhJLCBJSUMzX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xNzQsMjIgKzEzNiwyMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDEsIDI0MiwgMjQzLCAyNDAgfSwKKwkJLmlycXMJCT0geyAyNDAsIDI0MCwgMjQwLCAyNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0NSwgMjQ2LCAyNDcsIDI0NCB9LAorCQkuaXJxcwkJPSB7IDI0NCwgMjQ0LCAyNDQsIDI0NCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQ5LCAyNTAsIDI1MSwgMjQ4IH0sCisJCS5pcnFzCQk9IHsgMjQ4LCAyNDgsIDI0OCwgMjQ4IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNTMsIDI1NCwgMjU1LCAyNTIgfSwKKwkJLmlycXMJCT0geyAyNTIsIDI1MiwgMjUyLCAyNTIgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKaW5kZXggZTA3YzY5ZS4uZWNhYjI3NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCkBAIC00LDYgKzQsOCBAQAogCiBvYmoteQk6PSBleC5vIHByb2JlLm8gZW50cnkubyBzZXR1cC1zaDMubwogCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSBzd3N1c3AubworCiAjIENQVSBzdWJ0eXBlIHNldHVwCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQkrPSBzZXR1cC1zaDc3MDUubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikJKz0gc2V0dXAtc2g3NzB4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwppbmRleCBiNDEwNmQwLi41NWRhMGZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGNwdS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKICEgTk9URToKICEgR05VIGFzIChhcyBvZiAyLjkuMSkgY2hhbmdlcyBiZi9zIGludG8gYnQvcyBhbmQgYnJhLCB3aGVuIHRoZSBhZGRyZXNzCkBAIC0xODcsNDQgKzE4OCwzNSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCiAJLyogVW53aW5kIHRoZSBzdGFjayBhbmQgam1wIHRvIHRoZSBkZWJ1ZyBlbnRyeSAqLwogRU5UUlkoc2hfYmlvc19oYW5kbGVyKQotCW1vdi5sCUByMTUrLCByMAotCW1vdi5sCUByMTUrLCByMQotCW1vdi5sCUByMTUrLCByMgotCW1vdi5sCUByMTUrLCByMwotCW1vdi5sCUByMTUrLCByNAotCW1vdi5sCUByMTUrLCByNQotCW1vdi5sCUByMTUrLCByNgotCW1vdi5sCUByMTUrLCByNwotCXN0YwlzciwgcjgKLQltb3YubAkxZiwgcjkJCQkhIEJMID0xLCBSQj0xLCBJTUFTSz0weDBGCi0Jb3IJcjksIHI4Ci0JbGRjCXI4LCBzcgkJCSEgaGVyZSwgY2hhbmdlIHRoZSByZWdpc3RlciBiYW5rCi0JbW92LmwJQHIxNSssIHI4Ci0JbW92LmwJQHIxNSssIHI5Ci0JbW92LmwJQHIxNSssIHIxMAotCW1vdi5sCUByMTUrLCByMTEKLQltb3YubAlAcjE1KywgcjEyCi0JbW92LmwJQHIxNSssIHIxMwotCW1vdi5sCUByMTUrLCByMTQKLQltb3YubAlAcjE1KywgazAKLQlsZGMubAlAcjE1Kywgc3BjCi0JbGRzLmwJQHIxNSssIHByCi0JbW92LmwJQHIxNSssIGsxCi0JbGRjLmwJQHIxNSssIGdicgotCWxkcy5sCUByMTUrLCBtYWNoCi0JbGRzLmwJQHIxNSssIG1hY2wKLQltb3YJazAsIHIxNQorCW1vdi5sCTFmLCByOAorCWJzcglyZXN0b3JlX3JlZ3MKKwkgbm9wCisKKwlsZHMJazIsIHByCQkJISByZXN0b3JlIHByCisJbW92CWs0LCByMTUKIAkhCiAJbW92LmwJMmYsIGswCiAJbW92LmwJQGswLCBrMAogCWptcAlAazAKLQkgbGRjCWsxLCBzc3IKKwkgbGRjCWszLCBzc3IKIAkuYWxpZ24JMgogMToJLmxvbmcJMHgzMDAwMDBmMAogMjoJLmxvbmcJZ2RiX3Zicl92ZWN0b3IKICNlbmRpZiAvKiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyAqLwogCi1yZXN0b3JlX2FsbDoKKyEgcmVzdG9yZV9yZWdzKCkKKyEgLSByZXN0b3JlIHIwLCByMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByNyBmcm9tIHRoZSBzdGFjaworISAtIHN3aXRjaCBiYW5rCishIC0gcmVzdG9yZSByOCwgcjksIHIxMCwgcjExLCByMTIsIHIxMywgcjE0LCByMTUgZnJvbSB0aGUgc3RhY2sKKyEgLSByZXN0b3JlIHNwYywgcHIqLCBzc3IsIGdiciwgbWFjaCwgbWFjbCwgc2tpcCBkZWZhdWx0IHRyYQorISBrMiByZXR1cm5zIG9yaWdpbmFsIHByCishIGszIHJldHVybnMgb3JpZ2luYWwgc3IKKyEgazQgcmV0dXJucyBvcmlnaW5hbCBzdGFjayBwb2ludGVyCishIHI4IHBhc3NlcyBTUiBiaXRtYXNrLCBvdmVyd3JpdHRlbiB3aXRoIHJlc3RvcmVkIGRhdGEgb24gcmV0dXJuCishIHI5IHRyYXNoZWQKKyEgQkw9MCBvbiBlbnRyeSwgb24gZXhpdCBCTD0xIChkZXBlbmRpbmcgb24gcjgpLgorCitFTlRSWShyZXN0b3JlX3JlZ3MpCiAJbW92LmwJQHIxNSssIHIwCiAJbW92LmwJQHIxNSssIHIxCiAJbW92LmwJQHIxNSssIHIyCkBAIC0yMzQsMTAgKzIyNiw5IEBACiAJbW92LmwJQHIxNSssIHI2CiAJbW92LmwJQHIxNSssIHI3CiAJIQotCXN0YwlzciwgcjgKLQltb3YubAk3ZiwgcjkKLQlvcglyOSwgcjgJCQkhIEJMID0xLCBSQj0xCi0JbGRjCXI4LCBzcgkJCSEgaGVyZSwgY2hhbmdlIHRoZSByZWdpc3RlciBiYW5rCisJc3RjCXNyLCByOQorCW9yCXI4LCByOQorCWxkYwlyOSwgc3IKIAkhCiAJbW92LmwJQHIxNSssIHI4CiAJbW92LmwJQHIxNSssIHI5CkBAIC0yNDgsMTIgKzIzOSwyMCBAQAogCW1vdi5sCUByMTUrLCByMTQKIAltb3YubAlAcjE1KywgazQJCSEgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgogCWxkYy5sCUByMTUrLCBzcGMKLQlsZHMubAlAcjE1KywgcHIKKwltb3YubAlAcjE1KywgazIJCSEgb3JpZ2luYWwgUFIKIAltb3YubAlAcjE1KywgazMJCSEgb3JpZ2luYWwgU1IKIAlsZGMubAlAcjE1KywgZ2JyCiAJbGRzLmwJQHIxNSssIG1hY2gKIAlsZHMubAlAcjE1KywgbWFjbAotCWFkZAkjNCwgcjE1CQkJISBTa2lwIHN5c2NhbGwgbnVtYmVyCisJcnRzCisJIGFkZAkjNCwgcjE1CQkJISBTa2lwIHN5c2NhbGwgbnVtYmVyCisKK3Jlc3RvcmVfYWxsOgorCW1vdi5sCTdmLCByOAorCWJzcglyZXN0b3JlX3JlZ3MKKwkgbm9wCisKKwlsZHMJazIsIHByCQkJISByZXN0b3JlIHByCiAJIQogI2lmZGVmIENPTkZJR19TSF9EU1AKIAltb3YubAlAcjE1KywgazAJCSEgRFNQIG1vZGUgbWFya2VyCkBAIC0yOTQsNyArMjkzLDcgQEAKIAltb3YJIzB4ZjAsIGsxCiAJZXh0dS5iCWsxLCBrMQogCW5vdAlrMSwgazEKLQlhbmQJazEsIGsyCQkJISBNYXNrIG9yaWduYWwgU1IgdmFsdWUKKwlhbmQJazEsIGsyCQkJISBNYXNrIG9yaWdpbmFsIFNSIHZhbHVlCiAJIQogCW1vdglrMywgazAJCQkhIENhbGN1bGF0ZSBJTUFTSy1iaXRzCiAJc2hscjIJazAKQEAgLTMxMyw3ICszMTIsNiBAQAogCW1vdgkjMCwgazEKIAltb3YuYglrMSwgQGswCiAjZW5kaWYKLQltb3YubAlAcjE1KywgazIJCSEgcmVzdG9yZSBFWFBFVlQKIAltb3YJazQsIHIxNQogCXJ0ZQogCSBub3AKQEAgLTMzNiw4MSArMzM0LDU1IEBACiBFTlRSWSh2YnJfYmFzZSkKIAkubG9uZwkwCiAhCishIDB4MTAwOiBHZW5lcmFsIGV4Y2VwdGlvbiB2ZWN0b3IKKyEKIAkuYmFsaWduIAkyNTYsMCwyNTYKIGdlbmVyYWxfZXhjZXB0aW9uOgotCW1vdi5sCTFmLCBrMgotCW1vdi5sCTJmLCBrMwotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzCi0JbW92LmwJQGsyLCBrMgorI2lmbmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMworCWJyYQloYW5kbGVfZXhjZXB0aW9uCisJIHN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworI2Vsc2UKKwltb3YubAkxZiwgazQKKwltb3YubAlAazQsIGs0CiAKIAkhIElzIEVYUEVWVCBsYXJnZXIgdGhhbiAweDgwMD8KIAltb3YJIzB4OCwgazAKIAlzaGxsOAlrMAotCWNtcC9ocwlrMCwgazIKKwljbXAvaHMJazAsIGs0CiAJYmYJMGYKIAogCSEgdGhlbiBhZGQgMHg1ODAgKGsyIGlzIDB4ZDgwIG9yIDB4ZGEwKQogCW1vdgkjMHg1OCwgazAKIAlzaGxsMglrMAogCXNobGwyCWswCi0JYWRkCWswLCBrMgorCWFkZAlrMCwgazQKIDA6Ci0JYnJhCWhhbmRsZV9leGNlcHRpb24KKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCiAJIG5vcAotI2Vsc2UKLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YubAlAazIsIGsyCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdgkJazQsIGsyCQkhIGtlZXAgdmVjdG9yIGluIGsyCisJbW92LmwJMWYsIGs0CQkhIFNSIGJpdHMgdG8gY2xlYXIgaW4gazQKKwlic3IJc2F2ZV9yZWdzCSEgbmVlZHMgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKwkgbm9wCisKKwlicmEJaGFuZGxlX2V4Y2VwdGlvbl9zcGVjaWFsCisJIG5vcAorCisJLmFsaWduCTIKKzE6CS5sb25nCUVYUEVWVAogI2VuZGlmCi0JLmFsaWduCTIKLTE6CS5sb25nCUVYUEVWVAotMjoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCi0hCi0hCiAKLQkuYmFsaWduIAkxMDI0LDAsMTAyNAotdGxiX21pc3M6Ci0JbW92LmwJMWYsIGsyCi0JbW92LmwJNGYsIGszCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92LmwJQGsyLCBrMgotIQotCS5iYWxpZ24gCTUxMiwwLDUxMgotaW50ZXJydXB0OgotCW1vdi5sCTNmLCBrMwotI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCi0JbW92LmwJMmYsIGsyCi0JISBEZWJvdW5jZSAoZmlsdGVyIG5lc3RlZCBOTUkpCi0JbW92LmwJQGsyLCBrMAotCW1vdi5sCTVmLCBrMQotCWNtcC9lcQlrMSwgazAKLQliZgkwZgotCW1vdi5sCTZmLCBrMQotCXRhcy5iCUBrMQotCWJ0CTBmCi0JcnRlCi0JIG5vcAotCS5hbGlnbgkyCi0yOgkubG9uZwlJTlRFVlQKLTU6CS5sb25nCU5NSV9WRUMKLTY6CS5sb25nCWluX25taQotMDoKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19LR0RCKSAqLwotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdgkjLTEsIGsyCQkhIGludGVycnVwdCBleGNlcHRpb24gbWFya2VyCishIHByZXBhcmVfc3RhY2tfc2F2ZV9kc3AoKQorISAtIHJvbGwgYmFjayBnUkIKKyEgLSBzd2l0Y2ggdG8ga2VybmVsIHN0YWNrCishIC0gc2F2ZSBEU1AKKyEgazAgcmV0dXJucyBvcmlnaW5hbCBzcCAoYWZ0ZXIgcm9sbCBiYWNrKQorISBrMSB0cmFzaGVkCishIGsyIHRyYXNoZWQKIAotCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTM6CS5sb25nCXJldF9mcm9tX2lycQotNDoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCi0KLSEKLSEKLQkuYWxpZ24JMgotRU5UUlkoaGFuZGxlX2V4Y2VwdGlvbikKLQkhIFVzaW5nIGswLCBrMSBmb3Igc2NyYXRjaCByZWdpc3RlcnMgKHIwX2JhbmsxLCByMV9iYW5rKSwKLQkhIHNhdmUgYWxsIHJlZ2lzdGVycyBvbnRvIHN0YWNrLgotCSEKLQorcHJlcGFyZV9zdGFja19zYXZlX2RzcDoKICNpZmRlZiBDT05GSUdfR1VTQQogCSEgQ2hlY2sgZm9yIHJvbGwgYmFjayBnUkIgKFVzZXIgYW5kIEtlcm5lbCkKIAltb3YJcjE1LCBrMApAQCAtNDMwLDcgKzQwMiw3IEBACiAyOgltb3YJazEsIHIxNQkJISBTUCA9IHIxCiAxOgogI2VuZGlmCi0KKwkhIFN3aXRjaCB0byBrZXJuZWwgc3RhY2sgaWYgbmVlZGVkCiAJc3RjCXNzciwgazAJCSEgSXMgaXQgZnJvbSBrZXJuZWwgc3BhY2U/CiAJc2hsbAlrMAkJISBDaGVjayBNRCBiaXQgKGJpdDMwKSBieSBzaGlmdGluZyBpdCBpbnRvLi4uCiAJc2hsbAlrMAkJISAgICAgICAuLi50aGUgVCBiaXQKQEAgLTQ0MywxOCArNDE1LDE3IEBACiAJYWRkCWN1cnJlbnQsIGsxCiAJbW92CWsxLCByMTUJCSEgY2hhbmdlIHRvIGtlcm5lbCBzdGFjawogCSEKLTE6CW1vdi5sCTJmLCBrMQotCSEKKzE6CiAjaWZkZWYgQ09ORklHX1NIX0RTUAotCW1vdi5sCXIyLCBALXIxNQkJISBTYXZlIHIyLCB3ZSBuZWVkIGFub3RoZXIgcmVnCi0Jc3RjCXNyLCBrNAotCW1vdi5sCTFmLCByMgotCXRzdAlyMiwgazQJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlCi0JbW92LmwJQHIxNSssIHIyCQkhIFJlc3RvcmUgcjIgbm93CisJISBTYXZlIERTUCBjb250ZXh0IGlmIG5lZWRlZAorCXN0YwlzciwgazEKKwltb3YJIzB4MTAsIGsyCisJc2hsbDggICBrMgkJCSEgRFNQPTEgKDB4MDAwMDEwMDApCisJdHN0CWsyLCBrMQkJCSEgQ2hlY2sgaWYgaW4gRFNQIG1vZGUgKHBhc3NlZCBpbiBrMikKIAlidC9zCXNraXBfc2F2ZQotCSBtb3YJIzAsIGs0CQkJISBTZXQgbWFya2VyIGZvciBubyBzdGFjayBmcmFtZQorCSBtb3YJIzAsIGsxCQkJISBTZXQgbWFya2VyIGZvciBubyBzdGFjayBmcmFtZQogCi0JbW92CXIyLCBrNAkJCSEgQmFja3VwIHIyIChpbiBrNCkgZm9yIGxhdGVyCisJbW92CWsyLCBrMQkJCSEgU2F2ZSBoYXMtZnJhbWUgbWFya2VyCiAKIAkhIFNhdmUgRFNQIHJlZ2lzdGVycyBvbiBzdGFjawogCXN0Yy5sCW1vZCwgQC1yMTUKQEAgLTQ3MywzNSArNDQ0LDc0IEBACiAJISBhcyB3ZSdyZSBub3QgYXQgYWxsIGludGVyZXN0ZWQgaW4gc3VwcG9ydGluZyBhbmNpZW50IHRvb2xjaGFpbnMgYXQKIAkhIHRoaXMgcG9pbnQuIC0tIFBGTS4KIAotCW1vdglyMTUsIHIyCisJbW92CXIxNSwgazIKIAkud29yZAkweGY2NTMJCQkhIG1vdnMubAlhMSwgQC1yMgogCS53b3JkCTB4ZjZmMwkJCSEgbW92cy5sCWEwZywgQC1yMgogCS53b3JkCTB4ZjZkMwkJCSEgbW92cy5sCWExZywgQC1yMgogCS53b3JkCTB4ZjZjMwkJCSEgbW92cy5sCW0wLCBALXIyCiAJLndvcmQJMHhmNmUzCQkJISBtb3ZzLmwJbTEsIEAtcjIKLQltb3YJcjIsIHIxNQorCW1vdglrMiwgcjE1CiAKLQltb3YJazQsIHIyCQkJISBSZXN0b3JlIHIyCi0JbW92LmwJMWYsIGs0CQkJISBGb3JjZSBEU1Agc3RhY2sgZnJhbWUKIHNraXBfc2F2ZToKLQltb3YubAlrNCwgQC1yMTUJCSEgUHVzaCBEU1AgbW9kZSBtYXJrZXIgb250byBzdGFjaworCW1vdi5sCWsxLCBALXIxNQkJISBQdXNoIERTUCBtb2RlIG1hcmtlciBvbnRvIHN0YWNrCiAjZW5kaWYKLQkhIFNhdmUgdGhlIHVzZXIgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4KLQltb3YubAlrMiwgQC1yMTUJISBFWFBFVlQKKwlydHMKKwkgbm9wCishCishIDB4NDAwOiBJbnN0cnVjdGlvbiBhbmQgRGF0YSBUTEIgbWlzcyBleGNlcHRpb24gdmVjdG9yCishCisJLmJhbGlnbiAJMTAyNCwwLDEwMjQKK3RsYl9taXNzOgorCXN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMwogCi0JbW92CSMtMSwgazQKLQltb3YubAlrNCwgQC1yMTUJISBzZXQgVFJBIChkZWZhdWx0OiAtMSkKLQkhCitoYW5kbGVfZXhjZXB0aW9uOgorCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCisKKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJIFBSRUYoazApCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdi5sCTVmLCBrMgkJISB2ZWN0b3IgcmVnaXN0ZXIgYWRkcmVzcworCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG1vdi5sCUBrMiwgazIJCSEgcmVhZCBvdXQgdmVjdG9yIGFuZCBrZWVwIGluIGsyCisKK2hhbmRsZV9leGNlcHRpb25fc3BlY2lhbDoKKwkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGV4Y2VwdGlvbiBoYW5kbGVyCisJbW92LmwJN2YsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCisJc3RjCXIyX2JhbmssIHIwCSEgazIgKHZlY3RvcikKKwltb3YubAk2ZiwgcjEwCisJc2hscjIJcjAKKwlzaGxyCXIwCisJbW92LmwJQChyMCwgcjEwKSwgcjEwCisJam1wCUByMTAKKwkgbGRzCXI5LCBwcgkJISBwdXQgcmV0dXJuIGFkZHJlc3MgaW4gcHIKKworCS5hbGlnbglMMV9DQUNIRV9TSElGVAorCishIHNhdmVfcmVncygpCishIC0gc2F2ZSBkZWZhdWx0IHRyYSwgbWFjbCwgbWFjaCwgZ2JyLCBzc3IsIHByKiBhbmQgc3BjIG9uIHRoZSBzdGFjaworISAtIHNhdmUgcjE1KiwgcjE0LCByMTMsIHIxMiwgcjExLCByMTAsIHI5LCByOCBvbiB0aGUgc3RhY2sKKyEgLSBzd2l0Y2ggYmFuaworISAtIHNhdmUgcjcsIHI2LCByNSwgcjQsIHIzLCByMiwgcjEsIHIwIG9uIHRoZSBzdGFjaworISBrMCBjb250YWlucyBvcmlnaW5hbCBzdGFjayBwb2ludGVyKgorISBrMSB0cmFzaGVkCishIGszIHBhc3NlcyBvcmlnaW5hbCBwcioKKyEgazQgcGFzc2VzIFNSIGJpdG1hc2sKKyEgQkw9MSBvbiBlbnRyeSwgb24gZXhpdCBCTD0wLgorCitFTlRSWShzYXZlX3JlZ3MpCisJbW92CSMtMSwgcjEKKwltb3YubAlrMSwgQC1yMTUJISBzZXQgVFJBIChkZWZhdWx0OiAtMSkKIAlzdHMubAltYWNsLCBALXIxNQogCXN0cy5sCW1hY2gsIEAtcjE1CiAJc3RjLmwJZ2JyLCBALXIxNQogCXN0Yy5sCXNzciwgQC1yMTUKLQlzdHMubAlwciwgQC1yMTUKKwltb3YubAlrMywgQC1yMTUJISBvcmlnaW5hbCBwciBpbiBrMwogCXN0Yy5sCXNwYywgQC1yMTUKLQkhCi0JbGRzCWszLCBwcgkJISBTZXQgdGhlIHJldHVybiBhZGRyZXNzIHRvIHByCi0JIQotCW1vdi5sCWswLCBALXIxNQkhIHNhdmUgb3JpZ25hbCBzdGFjaworCisJbW92LmwJazAsIEAtcjE1CSEgb3JpZ2luYWwgc3RhY2sgcG9pbnRlciBpbiBrMAogCW1vdi5sCXIxNCwgQC1yMTUKIAltb3YubAlyMTMsIEAtcjE1CiAJbW92LmwJcjEyLCBALXIxNQpAQCAtNTA5LDEzICs1MTksMjMgQEAKIAltb3YubAlyMTAsIEAtcjE1CiAJbW92LmwJcjksIEAtcjE1CiAJbW92LmwJcjgsIEAtcjE1Ci0JIQotCXN0YwlzciwgcjgJCSEgQmFjayB0byBub3JtYWwgcmVnaXN0ZXIgYmFuaywgYW5kCi0Jb3IJazEsIHI4CQkhIEJsb2NrIGFsbCBpbnRlcnJ1cHRzCi0JbW92LmwJM2YsIGsxCi0JYW5kCWsxLCByOAkJISAuLi4KLQlsZGMJcjgsIHNyCQkhIC4uLmNoYW5nZWQgaGVyZS4KLQkhCisKKwltb3YubAkwZiwgazMJCSEgU1IgYml0cyB0byBzZXQgaW4gazMKKworCSEgZmFsbC10aHJvdWdoCisKKyEgc2F2ZV9sb3dfcmVncygpCishIC0gbW9kaWZ5IFNSIGZvciBiYW5rIHN3aXRjaAorISAtIHNhdmUgcjcsIHI2LCByNSwgcjQsIHIzLCByMiwgcjEsIHIwIG9uIHRoZSBzdGFjaworISBrMyBwYXNzZXMgYml0cyB0byBzZXQgaW4gU1IKKyEgazQgcGFzc2VzIGJpdHMgdG8gY2xlYXIgaW4gU1IKKworRU5UUlkoc2F2ZV9sb3dfcmVncykKKwlzdGMJc3IsIHI4CisJb3IJazMsIHI4CisJYW5kCWs0LCByOAorCWxkYwlyOCwgc3IKKwogCW1vdi5sCXI3LCBALXIxNQogCW1vdi5sCXI2LCBALXIxNQogCW1vdi5sCXI1LCBALXIxNQpAQCAtNTIzLDUyICs1NDMsNjMgQEAKIAltb3YubAlyMywgQC1yMTUKIAltb3YubAlyMiwgQC1yMTUKIAltb3YubAlyMSwgQC1yMTUKLQltb3YubAlyMCwgQC1yMTUKLQotCS8qCi0JICogVGhpcyBnZXRzIGEgYml0IHRyaWNreS4uIGluIHRoZSBJTlRFVlQgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHVzZQotCSAqIHRoZSBWQlIgb2Zmc2V0IGFzIGEgZGVzdGluYXRpb24gaW4gdGhlIGp1bXAgY2FsbCB0YWJsZSwgc2luY2UgYWxsCi0JICogb2YgdGhlIGRlc3RpbmF0aW9ucyBhcmUgdGhlIHNhbWUuIEluIHRoaXMgY2FzZSwgKGludGVycnVwdCkgc2V0cwotCSAqIGEgbWFya2VyIGluIHIyIChub3cgcjJfYmFuayBzaW5jZSBTUi5SQiBjaGFuZ2VkKSwgd2hpY2ggd2UgY2hlY2sKLQkgKiB0byBkZXRlcm1pbmUgdGhlIGV4Y2VwdGlvbiB0eXBlLiBGb3IgYWxsIG90aGVyIGV4Y2VwdGlvbnMsIHdlCi0JICogZm9yY2libHkgcmVhZCBFWFBFVlQgZnJvbSBtZW1vcnkgYW5kIGZpeCB1cCB0aGUganVtcCBhZGRyZXNzLCBpbgotCSAqIHRoZSBpbnRlcnJ1cHQgZXhjZXB0aW9uIGNhc2Ugd2UganVtcCB0byBkb19JUlEoKSBhbmQgZGVmZXIgdGhlCi0JICogSU5URVZUIHJlYWQgdW50aWwgdGhlcmUuIEFzIGEgYm9udXMsIHdlIGNhbiBhbHNvIGNsZWFuIHVwIHRoZSBTUi5SQgotCSAqIGNoZWNrcyB0aGF0IGRvX0lSUSgpIHdhcyBkb2luZy4uCi0JICovCi0Jc3RjCXIyX2JhbmssIHI4Ci0JY21wL3B6CXI4Ci0JYmYJaW50ZXJydXB0X2V4Y2VwdGlvbgotCXNobHIyCXI4Ci0Jc2hscglyOAotCW1vdi5sCTRmLCByOQotCWFkZAlyOCwgcjkKLQltb3YubAlAcjksIHI5Ci0Jam1wCUByOQotCSBub3AKIAlydHMKKwkgbW92LmwJcjAsIEAtcjE1CisKKyEKKyEgMHg2MDA6IEludGVycnVwdCAvIE5NSSB2ZWN0b3IKKyEKKwkuYmFsaWduIAk1MTIsMCw1MTIKK0VOVFJZKGhhbmRsZV9pbnRlcnJ1cHQpCisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikKKwltb3YubAkyZiwgazIKKwkhIERlYm91bmNlIChmaWx0ZXIgbmVzdGVkIE5NSSkKKwltb3YubAlAazIsIGswCisJbW92LmwJOWYsIGsxCisJY21wL2VxCWsxLCBrMAorCWJmCTExZgorCW1vdi5sCTEwZiwgazEKKwl0YXMuYglAazEKKwlidAkxMWYKKwlydGUKIAkgbm9wCi0KIAkuYWxpZ24JMgotMToJLmxvbmcJMHgwMDAwMTAwMAkhIERTUD0xCi0yOgkubG9uZwkweDAwMDA4MGYwCSEgRkQ9MSwgSU1BU0s9MTUKLTM6CS5sb25nCTB4Y2ZmZmZmZmYJISBSQj0wLCBCTD0wCi00OgkubG9uZwlleGNlcHRpb25faGFuZGxpbmdfdGFibGUKKzk6CS5sb25nCU5NSV9WRUMKKzEwOgkubG9uZwlpbl9ubWkKKzExOgorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0tHREIpICovCisJc3RzCXByLCBrMwkJISBzYXZlIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJbW92YQlleGNlcHRpb25fZGF0YSwgazAKIAotaW50ZXJydXB0X2V4Y2VwdGlvbjoKLQltb3YubAkxZiwgcjkKKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJIFBSRUYoazApCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG1vdgkjLTEsIGsyCQkhIGRlZmF1bHQgdmVjdG9yIGtlcHQgaW4gazIKKworCSEgU2V0dXAgcmV0dXJuIGFkZHJlc3MgYW5kIGp1bXAgdG8gZG9fSVJRCisJbW92LmwJNGYsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCisJbGRzCXI5LCBwcgkJISBwdXQgcmV0dXJuIGFkZHJlc3MgaW4gcHIKIAltb3YubAkyZiwgcjQKLQltb3YubAlAcjQsIHI0CisJbW92LmwJM2YsIHI5CisJbW92LmwJQHI0LCByNAkJISBwYXNzIElOVEVWVCB2ZWN0b3IgYXMgYXJnMAogCWptcAlAcjkKLQkgbW92CXIxNSwgcjUKLQlydHMKLQkgbm9wCisJIG1vdglyMTUsIHI1CQkhIHBhc3Mgc2F2ZWQgcmVnaXN0ZXJzIGFzIGFyZzEKIAotCS5hbGlnbiAyCi0xOgkubG9uZwlkb19JUlEKLTI6CS5sb25nCUlOVEVWVAotCi0JLmFsaWduCTIKIEVOVFJZKGV4Y2VwdGlvbl9ub25lKQogCXJ0cwogCSBub3AKKworCS5hbGlnbglMMV9DQUNIRV9TSElGVAorZXhjZXB0aW9uX2RhdGE6CiswOgkubG9uZwkweDAwMDA4MGYwCSEgRkQ9MSwgSU1BU0s9MTUKKzE6CS5sb25nCTB4Y2ZmZmZmZmYJISBSQj0wLCBCTD0wCisyOgkubG9uZwlJTlRFVlQKKzM6CS5sb25nCWRvX0lSUQorNDoJLmxvbmcJcmV0X2Zyb21faXJxCis1OgkubG9uZwlFWFBFVlQKKzY6CS5sb25nCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZQorNzoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYwppbmRleCA2NDY4YWU4Li42M2I2N2JhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0g3NzA1IFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDUxICsyMSwzNiBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKIAlQSU5UMDcsIFBJTlQ4MTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlBRENfQURJLAotCVVTQl9VU0kwLCBVU0JfVVNJMSwKLQlUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLAotCVRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUZfUkNNSSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIFRNVTIsIERNQUMsIFVTQiwgU0NJRjIsIFNDSUYwLAorCURNQUMsIFNDSUYwLCBTQ0lGMiwgQURDX0FESSwgVVNCLAorCisJVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywKKwlUTVUwLCBUTVUxLCBUTVUyLAorCisJUlRDLCBXRFQsIFJFRl9SQ01JLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwogCUlOVENfVkVDVChQSU5UMDcsIDB4NzAwKSwgSU5UQ19WRUNUKFBJTlQ4MTUsIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkwLCAweDgwMCksIElOVENfVkVDVChETUFDX0RFSTEsIDB4ODIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkyLCAweDg0MCksIElOVENfVkVDVChETUFDX0RFSTMsIDB4ODYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDg4MCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4OGEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHg5NjApLAorCUlOVENfVkVDVChETUFDLCAweDgwMCksIElOVENfVkVDVChETUFDLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDkwMCksIElOVENfVkVDVChTQ0lGMiwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5NjApLAogCUlOVENfVkVDVChBRENfQURJLCAweDk4MCksCi0JSU5UQ19WRUNUKFVTQl9VU0kwLCAweGEyMCksIElOVENfVkVDVChVU0JfVVNJMSwgMHhhNDApLAorCUlOVENfVkVDVChVU0IsIDB4YTIwKSwgSU5UQ19WRUNUKFVTQiwgMHhhNDApLAogCUlOVENfVkVDVChUUFUwLCAweGMwMCksIElOVENfVkVDVChUUFUxLCAweGMyMCksCiAJSU5UQ19WRUNUKFRQVTIsIDB4YzgwKSwgSU5UQ19WRUNUKFRQVTMsIDB4Y2EwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChVU0IsIFVTQl9VU0kwLCBVU0JfVVNJMSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRl9SQ01JLCAwLCAwIH0gfSwKQEAgLTc4LDcgKzYzLDcgQEAKIAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcwNSIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CkBAIC04NiwxMiArNzEsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTcsIDU5IH0sCisJCS5pcnFzCQk9IHsgNTYsIDU2LCA1NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1MiwgNTMsIDU1IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0xMTUsMTQgKzEwMCw2IEBACiAJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9ydGNfcGxhdGZvcm1faW5mbyBydGNfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCmluZGV4IDkzYzU1ZTIuLmE3NGY5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNIMyBTZXR1cCBjb2RlIGZvciBTSDc3MDYsIFNINzcwNywgU0g3NzA4LCBTSDc3MDkKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBNYWdudXMgRGFtbQorICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIEJhc2VkIG9uIHNldHVwLXNoNzcwOS5jCiAgKgpAQCAtMjQsNDYgKzI1LDM3IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAogCVBJTlQwNywgUElOVDgxNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSwKLQlTQ0lfRVJJLCBTQ0lfUlhJLCBTQ0lfVFhJLCBTQ0lfVEVJLAotCUFEQ19BREksCisJRE1BQywgU0NJRjAsIFNDSUYyLCBTQ0ksIEFEQ19BREksCiAJTENEQywgUENDMCwgUENDMSwKLQlUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGX1JDTUksIFJFRl9ST1ZJLAotCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgUkVGLCBUTVUyLCBETUFDLCBTQ0ksIFNDSUYyLCBTQ0lGMCwKKwlUTVUwLCBUTVUxLCBUTVUyLAorCVJUQywgV0RULCBSRUYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNDSV9FUkksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0NJX1RYSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJX1RFSSwgMHg1NDApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTQ0ksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSSwgMHg1MDApLAorCUlOVENfVkVDVChTQ0ksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSSwgMHg1NDApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JPVkksIDB4NWEwKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksCisJSU5UQ19WRUNUKFJFRiwgMHg1YTApLAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4NjApLAogCUlOVENfVkVDVChBRENfQURJLCAweDk4MCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYyX0JSSSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweDk2MCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDkwMCksIElOVENfVkVDVChTQ0lGMiwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTYwKSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIAlJTlRDX1ZFQ1QoUElOVDA3LCAweDcwMCksIElOVENfVkVDVChQSU5UODE1LCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykKIAlJTlRDX1ZFQ1QoTENEQywgMHg5YTApLApAQCAtNzEsMTYgKzYzLDYgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKFJFRiwgUkVGX1JDTUksIFJFRl9ST1ZJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChTQ0ksIFNDSV9FUkksIFNDSV9SWEksIFNDSV9UWEksIFNDSV9URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGLCBTQ0ksIDAgfSB9LApAQCAtMTAxLDcgKzgzLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcweCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MHgiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC0xMTEsMTQgKzkzLDYgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPQl7Ci0JCS5zdGFydCAgPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtMTM2LDcgKzExMCw3IEBACiAJCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJCS5pcnFzCQk9IHsgMjMsIDIzLCAyMywgMCB9LAogCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCkBAIC0xNDUsNyArMTE5LDcgQEAKIAkJLm1hcGJhc2UJPSAweGE0MDAwMTUwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTcsIDU5LCA1OCB9LAorCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYsIDU2IH0sCiAJfSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXApAQCAtMTU0LDcgKzEyOCw3IEBACiAJCS5tYXBiYXNlCT0gMHhhNDAwMDE0MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX0lSREEsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogCX0sCiAjZW5kaWYKIAl7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYwppbmRleCA3N2VlZTQ4Li4zMzUwOThiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gzIFNldHVwIGNvZGUgZm9yIFNINzcxMCwgU0g3NzEyCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMCw0MCBAQAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCURNQUNfREVJNCwgRE1BQ19ERUk1LAotCUlQU0VDLAorCURNQUMxLCBTQ0lGMCwgU0NJRjEsIERNQUMyLCBJUFNFQywKIAlFRE1BQzAsIEVETUFDMSwgRURNQUMyLAotCVNJT0YwX0VSSSwgU0lPRjBfVFhJLCBTSU9GMF9SWEksIFNJT0YwX0NDSSwKLQlTSU9GMV9FUkksIFNJT0YxX1RYSSwgU0lPRjFfUlhJLCBTSU9GMV9DQ0ksCi0JVE1VMCwgVE1VMSwgVE1VMiwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUYsCisJU0lPRjAsIFNJT0YxLAogCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgRE1BQzEsIFNDSUYwLCBTQ0lGMSwgRE1BQzIsIFNJT0YwLCBTSU9GMSwKKwlUTVUwLCBUTVUxLCBUTVUyLAorCVJUQywgV0RULCBSRUYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweDk2MCksCi0JSU5UQ19WRUNUKERNQUNfREVJNCwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQ19ERUk1LCAweGJhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDgwMCksIElOVENfVkVDVChETUFDMSwgMHg4MjApLAorCUlOVENfVkVDVChETUFDMSwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhjMCksIElOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDk2MCksCisJSU5UQ19WRUNUKERNQUMyLCAweGI4MCksIElOVENfVkVDVChETUFDMiwgMHhiYTApLAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAKIAlJTlRDX1ZFQ1QoSVBTRUMsIDB4YmUwKSwKICNlbmRpZgogCUlOVENfVkVDVChFRE1BQzAsIDB4YzAwKSwgSU5UQ19WRUNUKEVETUFDMSwgMHhjMjApLAogCUlOVENfVkVDVChFRE1BQzIsIDB4YzQwKSwKLQlJTlRDX1ZFQ1QoU0lPRjBfRVJJLCAweGUwMCksIElOVENfVkVDVChTSU9GMF9UWEksIDB4ZTIwKSwKLQlJTlRDX1ZFQ1QoU0lPRjBfUlhJLCAweGU0MCksIElOVENfVkVDVChTSU9GMF9DQ0ksIDB4ZTYwKSwKLQlJTlRDX1ZFQ1QoU0lPRjFfRVJJLCAweGU4MCksIElOVENfVkVDVChTSU9GMV9UWEksIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoU0lPRjFfUlhJLCAweGVjMCksIElOVENfVkVDVChTSU9GMV9DQ0ksIDB4ZWUwKSwKKwlJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTAwKSwgSU5UQ19WRUNUKFNJT0YwLCAweGUyMCksCisJSU5UQ19WRUNUKFNJT0YwLCAweGU0MCksIElOVENfVkVDVChTSU9GMCwgMHhlNjApLAorCUlOVENfVkVDVChTSU9GMSwgMHhlODApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWMwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGVlMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChSRUYsIDB4NTgwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDX0RFSTQsIERNQUNfREVJNSksCi0JSU5UQ19HUk9VUChTSU9GMCwgU0lPRjBfRVJJLCBTSU9GMF9UWEksIFNJT0YwX1JYSSwgU0lPRjBfQ0NJKSwKLQlJTlRDX0dST1VQKFNJT0YxLCBTSU9GMV9FUkksIFNJT0YxX1RYSSwgU0lPRjFfUlhJLCBTSU9GMV9DQ0kpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUYsIDAsIDAgfSB9LApAQCAtODUsNyArNjYsNyBAQAogCXsgMHhhNDA4MDAwNiwgMCwgMTYsIDQsIC8qIElQUkkgKi8geyAwLCAwLCBTSU9GMSB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzEwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcxMCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTk4LDE0ICs3OSw2IEBACiAJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9ydGNfcGxhdGZvcm1faW5mbyBydGNfaW5mbyA9IHsKQEAgLTEyNywxMiArMTAwLDEyIEBACiAJCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTcsIDU5LCA1OCB9LAorCQkuaXJxcyAgICAgICAgICAgPSB7IDU2LCA1NiwgNTYsIDU2IH0sCiAJfSwgewogCiAJCS5mbGFncyA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwppbmRleCBmODA3YTIxLi4wMDM4NzRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDc3MjAgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqICBCYXNlZCBvbiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jOgogICoKQEAgLTI2LDE3ICsyNyw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC0xNTAsNjIgKzE0MSw0OSBAQAogCVVOVVNFRCA9IDAsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwotCVRNVTAsIFRNVTEsIFRNVTIsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULCBSRUZfUkNNSSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQsCisJVE1VMCwgVE1VMSwgVE1VMiwgUlRDLAorCVdEVCwgUkVGX1JDTUksIFNJTSwKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAogCVVTQkZfU1BELCBUTVVfU1VOSSwgSVJRNSwgSVJRNCwKLQlETUFDMV9ERUkwLCBETUFDMV9ERUkxLCBETUFDMV9ERUkyLCBETUFDMV9ERUkzLCBMQ0RDLCBTU0wsCi0JQURDLCBETUFDMl9ERUk0LCBETUFDMl9ERUk1LCBVU0JGSTAsIFVTQkZJMSwgQ01ULAorCURNQUMxLCBMQ0RDLCBTU0wsCisJQURDLCBETUFDMiwgVVNCRkksIENNVCwKIAlTQ0lGMCwgU0NJRjEsCi0JUElOVDA3LCBQSU5UODE1LCBUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLCBJSUMsCi0JU0lPRjAsIFNJT0YxLCBNTUNJMCwgTU1DSTEsIE1NQ0kyLCBNTUNJMywgUENDLAorCVBJTlQwNywgUElOVDgxNSwgVFBVLCBJSUMsCisJU0lPRjAsIFNJT0YxLCBNTUMsIFBDQywKIAlVU0JISSwgQUZFSUYsCiAJSF9VREksCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVRNVSwgUlRDLCBTSU0sIERNQUMxLCBVU0JGSSwgRE1BQzIsIFVTQiwgVFBVLCBNTUMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgICAgICAgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCAgICAgICBJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLAotCUlOVENfVkVDVChSVENfUFJJLCAweDRhMCksICAgIElOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNJTV9FUkksIDB4NGUwKSwgICAgSU5UQ19WRUNUKFNJTV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0lNX1RYSSwgMHg1MjApLCAgICBJTlRDX1ZFQ1QoU0lNX1RFTkQsIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCAgICAgICBJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksCisJSU5UQ19WRUNUKFJUQywgMHg0YTApLAkgICAgICBJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNJTSwgMHg0ZTApLAkgICAgICBJTlRDX1ZFQ1QoU0lNLCAweDUwMCksCisJSU5UQ19WRUNUKFNJTSwgMHg1MjApLAkgICAgICBJTlRDX1ZFQ1QoU0lNLCAweDU0MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLCAgICAgICAgSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCiAJLyogSF9VREkgY2Fubm90IGJlIG1hc2tlZCAqLyAgSU5UQ19WRUNUKFRNVV9TVU5JLCAweDZjMCksCi0JSU5UQ19WRUNUKFVTQkZfU1BELCAweDZlMCksICAgSU5UQ19WRUNUKERNQUMxX0RFSTAsIDB4ODAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfREVJMSwgMHg4MjApLCBJTlRDX1ZFQ1QoRE1BQzFfREVJMiwgMHg4NDApLAotCUlOVENfVkVDVChETUFDMV9ERUkzLCAweDg2MCksIElOVENfVkVDVChMQ0RDLCAweDkwMCksCisJSU5UQ19WRUNUKFVTQkZfU1BELCAweDZlMCksICAgSU5UQ19WRUNUKERNQUMxLCAweDgwMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDgyMCksICAgICAgSU5UQ19WRUNUKERNQUMxLCAweDg0MCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg2MCksICAgICAgSU5UQ19WRUNUKExDREMsIDB4OTAwKSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApCiAJSU5UQ19WRUNUKFNTTCwgMHg5ODApLAogI2VuZGlmCi0JSU5UQ19WRUNUKFVTQkZJMCwgMHhhMjApLCAgICAgSU5UQ19WRUNUKFVTQkZJMSwgMHhhNDApLAorCUlOVENfVkVDVChVU0JGSSwgMHhhMjApLCAgICAgIElOVENfVkVDVChVU0JGSSwgMHhhNDApLAogCUlOVENfVkVDVChVU0JISSwgMHhhNjApLAotCUlOVENfVkVDVChETUFDMl9ERUk0LCAweGI4MCksIElOVENfVkVDVChETUFDMl9ERUk1LCAweGJhMCksCisJSU5UQ19WRUNUKERNQUMyLCAweGI4MCksICAgICAgSU5UQ19WRUNUKERNQUMyLCAweGJhMCksCiAJSU5UQ19WRUNUKEFEQywgMHhiZTApLCAgICAgICAgSU5UQ19WRUNUKFNDSUYwLCAweGMwMCksCiAJSU5UQ19WRUNUKFNDSUYxLCAweGMyMCksICAgICAgSU5UQ19WRUNUKFBJTlQwNywgMHhjODApLAogCUlOVENfVkVDVChQSU5UODE1LCAweGNhMCksICAgIElOVENfVkVDVChTSU9GMCwgMHhkMDApLAotCUlOVENfVkVDVChTSU9GMSwgMHhkMjApLCAgICAgIElOVENfVkVDVChUUFUwLCAweGQ4MCksCi0JSU5UQ19WRUNUKFRQVTEsIDB4ZGEwKSwgICAgICAgSU5UQ19WRUNUKFRQVTIsIDB4ZGMwKSwKLQlJTlRDX1ZFQ1QoVFBVMywgMHhkZTApLCAgICAgICBJTlRDX1ZFQ1QoSUlDLCAweGUwMCksCi0JSU5UQ19WRUNUKE1NQ0kwLCAweGU4MCksICAgICAgSU5UQ19WRUNUKE1NQ0kxLCAweGVhMCksCi0JSU5UQ19WRUNUKE1NQ0kyLCAweGVjMCksICAgICAgSU5UQ19WRUNUKE1NQ0kzLCAweGVlMCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGQyMCksICAgICAgSU5UQ19WRUNUKFRQVSwgMHhkODApLAorCUlOVENfVkVDVChUUFUsIDB4ZGEwKSwgICAgICAgIElOVENfVkVDVChUUFUsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoVFBVLCAweGRlMCksICAgICAgICBJTlRDX1ZFQ1QoSUlDLCAweGUwMCksCisJSU5UQ19WRUNUKE1NQywgMHhlODApLCAgICAgICAgSU5UQ19WRUNUKE1NQywgMHhlYTApLAorCUlOVENfVkVDVChNTUMsIDB4ZWMwKSwgICAgICAgIElOVENfVkVDVChNTUMsIDB4ZWUwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweGYwMCksICAgICAgICBJTlRDX1ZFQ1QoUENDLCAweGY2MCksCiAJSU5UQ19WRUNUKEFGRUlGLCAweGZlMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFRNVSwgVE1VMCwgVE1VMSwgVE1VMiksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoU0lNLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJMCwgRE1BQzFfREVJMSwgRE1BQzFfREVJMiwgRE1BQzFfREVJMyksCi0JSU5UQ19HUk9VUChVU0JGSSwgVVNCRkkwLCBVU0JGSTEpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSTQsIERNQUMyX0RFSTUpLAotCUlOVENfR1JPVVAoVFBVLCBUUFUwLCBUUFUxLCBUUFUyLCBUUFUzKSwKLQlJTlRDX0dST1VQKE1NQywgTU1DSTAsIE1NQ0kxLCBNTUNJMiwgTU1DSTMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4QTQxNEZFRTJVTCwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhBNDE0RkVFNFVMLCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGX1JDTUksIFNJTSwgMCB9IH0sCkBAIC0yMTksNyArMTk3LDcgQEAKIAl7IDB4QTQwODAwMDhVTCwgMCwgMTYsIDQsIC8qIElQUkogKi8geyAwLCBVU0JISSwgMCwgQUZFSUYgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcyMCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MjAiLCB2ZWN0b3JzLCBOVUxMLAogCQlOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0NTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgazAJcjAKKyNkZWZpbmUgazEJcjEKKyNkZWZpbmUgazIJcjIKKyNkZWZpbmUgazMJcjMKKyNkZWZpbmUgazQJcjQKKworISBzd3N1c3BfYXJjaF9yZXN1bWUoKQorISAtIGNvcHkgcmVzdG9yZV9wYmxpc3QgcGFnZXMKKyEgLSByZXN0b3JlIHJlZ2lzdGVycyBmcm9tIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorCitFTlRSWShzd3N1c3BfYXJjaF9yZXN1bWUpCisJbW92LmwJMWYsIHIxNQorCW1vdi5sCTJmLCByNAorCW1vdi5sCUByNCwgcjQKKworc3dzdXNwX2NvcHlfbG9vcDoKKwltb3YJcjQsIHIwCisJY21wL2VxCSMwLCByMAorCWJ0CXN3c3VzcF9yZXN0b3JlX3JlZ3MKKworCW1vdi5sCUAoUEJFX0FERFJFU1MsIHI0KSwgcjIKKwltb3YubAlAKFBCRV9PUklHX0FERFJFU1MsIHI0KSwgcjUKKworCW1vdgkjKFBBR0VfU0laRSA+PiAxMCksIHIzCisJc2hsbDgJcjMKKwlzaGxyMglyMyAvKiBQQUdFX1NJWkUgLyAxNiAqLworc3dzdXNwX2NvcHlfcGFnZToKKwlkdAlyMworCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzAgKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxCSAgLyogIDE2bis0ICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rOCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzEyICovCisJbW92LmwJcjEsQHI1CisJYmYvcwlzd3N1c3BfY29weV9wYWdlCisJIGFkZAkjNCxyNQorCisJYnJhCXN3c3VzcF9jb3B5X2xvb3AKKwkgbW92LmwJQChQQkVfTkVYVCwgcjQpLCByNAorCitzd3N1c3BfcmVzdG9yZV9yZWdzOgorCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92LmwJM2YsIHI4CisJbW92LmwJNGYsIHI1CisJanNyCUByNQorCSBub3AKKworCSEgQkw9MTogUjctPlIwIGlzIGJhbmsxCisJbGRzCWsyLCBwcgorCWxkYwlrMywgc3NyCisKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCXJ0ZQorCSBub3AKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCisJLmFsaWduCTIKKzE6CS5sb25nCXN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorMjoJLmxvbmcJcmVzdG9yZV9wYmxpc3QKKzM6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCis0OgkubG9uZwlyZXN0b3JlX3JlZ3MKKworISBzd3N1c3BfYXJjaF9zdXNwZW5kKCkKKyEgLSBwcmVwYXJlIHBjIGZvciByZXN1bWUsIHJldHVybiBmcm9tIGZ1bmN0aW9uIHdpdGhvdXQgc3dzdXNwX3NhdmUgb24gcmVzdW1lCishIC0gc2F2ZSByZWdpc3RlcnMgaW4gc3dzdXNwX2FyY2hfcmVnc19jcHUwCishIC0gY2FsbCBzd3N1c3Bfc2F2ZSB3cml0ZSBzdXNwZW5kIGltYWdlCisKK0VOVFJZKHN3c3VzcF9hcmNoX3N1c3BlbmQpCisJc3RzCXByLCByMAkJISBzYXZlIHByIGluIHIwCisJbW92CXIxNSwgcjIJCSEgc2F2ZSBzcCBpbiByMgorCW1vdglyOCwgcjUJCSEgc2F2ZSByOCBpbiByNQorCXN0YwlzciwgcjEKKwlsZGMJcjEsIHNzcgkJISBzYXZlIHNyIGluIHNzcgorCW1vdi5sCTFmLCByMQorCWxkYwlyMSwgc3BjCQkhIHNldHVwIHBjIHZhbHVlIGZvciByZXN1bWluZworCW1vdi5sCTVmLCByMTUJCSEgdXNlIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MCBhcyBzdGFjaworCW1vdi5sCTZmLCByMworCWFkZAlyMywgcjE1CQkhIHNhdmUgZnJvbSB0b3Agb2Ygc3RydWN0dXJlCisKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdi5sCTJmLCByMwkJISBnZXQgbmV3IFNSIHZhbHVlIGZvciBiYW5rMQorCW1vdgkjMCwgcjQKKwltb3YubAk3ZiwgcjEKKwlqc3IJQHIxCQkhIHN3aXRjaCB0byBiYW5rMSBhbmQgc2F2ZSBiYW5rMSByNy0+cjAKKwkgbm90CXI0LCByNAorCisJISBCTD0xOiBSNy0+UjAgaXMgYmFuazEKKwlzdGMJcjJfYmFuaywgazAJISBmZXRjaCBvbGQgc3AgZnJvbSByMl9iYW5rMAorCW1vdi5sCTNmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJbW92LmwJOGYsIGsxCisJanNyCUBrMQkJISBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgYWxsIHJlZ3MKKwkgc3RjCXIwX2JhbmssIGszCSEgZmV0Y2ggb2xkIHByIGZyb20gcjBfYmFuazAKKworCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92CXIyLCByMTUJCSEgcmVzdG9yZSBvbGQgc3AKKwltb3YJcjUsIHI4CQkhIHJlc3RvcmUgb2xkIHI4CisJc3RjCXNzciwgcjEKKwlsZGMJcjEsIHNyCQkhIHJlc3RvcmUgb2xkIHNyCisJbGRzCXIwLCBwcgkJISByZXN0b3JlIG9sZCBwcgorCW1vdi5sCTRmLCByMAorCWptcAlAcjAKKwkgbm9wCisKK3N3c3VzcF9jYWxsX3NhdmU6CisJbW92CXIyLCByMTUJCSEgcmVzdG9yZSBvbGQgc3AKKwltb3YJcjUsIHI4CQkhIHJlc3RvcmUgb2xkIHI4CisJbGRzCXIwLCBwcgkJISByZXN0b3JlIG9sZCBwcgorCXJ0cworCSBtb3YJIzAsIHIwCisKKwkuYWxpZ24JMgorMToJLmxvbmcJc3dzdXNwX2NhbGxfc2F2ZQorMjoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKzM6CS5sb25nCTB4ZGZmZmZmZmYgISBSQj0wCis0OgkubG9uZwlzd3N1c3Bfc2F2ZQorNToJLmxvbmcJc3dzdXNwX2FyY2hfcmVnc19jcHUwCis2OgkubG9uZwlTV1NVU1BfQVJDSF9SRUdTX1NJWkUKKzc6CS5sb25nCXNhdmVfbG93X3JlZ3MKKzg6CS5sb25nCXNhdmVfcmVncwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKaW5kZXggZDYwODU1Ny4uMjAzYjE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLXkJOj0gcHJvYmUubyBjb21tb24ubwogY29tbW9uLXkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgZW50cnkubyBleC5vKQogCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSAkKGFkZHByZWZpeCAuLi9zaDMvLCBzd3N1c3AubykKIG9iai0kKENPTkZJR19TSF9GUFUpCQkJKz0gZnB1Lm8gc29mdGZsb2F0Lm8KIG9iai0kKENPTkZJR19TSF9TVE9SRV9RVUVVRVMpCQkrPSBzcS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCAyZTQyNTcyLi4zZDNhM2M0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0xMjksNiArMTI5LDEzIEBACiAJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CiAJCQkJCSAgQ1BVX0hBU19MTFNDOwogCQlicmVhazsKKwljYXNlIDB4NDAwNDoKKwkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc4NjsKKwkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CisJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OworCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QRVJGX0NPVU5URVIgfAorCQkJQ1BVX0hBU19MTFNDIHwgQ1BVX0hBU19QVEVBRVg7CisJCWJyZWFrOwogCWNhc2UgMHgzMDA4OgogCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gNDsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBlYzg4NDAzLi5hMWM4MGQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTIxLDE3ICsyMSw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC01MCwxMyArNDAsMTMgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSB7IDIzLCAyNCwgMjUsIDAgfSwKKwkJLmlycXMJCT0geyAyMywgMjMsIDIzLCAwIH0sCiAJfSwgewogI2VuZGlmCiAJCS5tYXBiYXNlCT0gMHhmZmU4MDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC04Nyw0MyArNzcsMjcgQEAKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJMMCwgSVJMMSwgSVJMMiwgSVJMMywgLyogb25seSBJUkxNIG1vZGUgc3VwcG9ydGVkICovCi0JSFVESSwgR1BJT0ksCi0JRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwgRE1BQ19ETVRFMywKLQlETUFDX0RNVEU0LCBETUFDX0RNVEU1LCBETUFDX0RNVEU2LCBETUFDX0RNVEU3LAotCURNQUNfRE1BRSwKKwlIVURJLCBHUElPSSwgRE1BQywKIAlQQ0lDMF9QQ0lTRVJSLCBQQ0lDMV9QQ0lFUlIsIFBDSUMxX1BDSVBXRFdOLCBQQ0lDMV9QQ0lQV09OLAogCVBDSUMxX1BDSURNQTAsIFBDSUMxX1BDSURNQTEsIFBDSUMxX1BDSURNQTIsIFBDSUMxX1BDSURNQTMsCi0JVE1VMywgVE1VNCwgVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JU0NJMV9FUkksIFNDSTFfUlhJLCBTQ0kxX1RYSSwgU0NJMV9URUksCi0JU0NJRl9FUkksIFNDSUZfUlhJLCBTQ0lGX0JSSSwgU0NJRl9UWEksCi0JV0RULAotCVJFRl9SQ01JLCBSRUZfUk9WSSwKKwlUTVUzLCBUTVU0LCBUTVUwLCBUTVUxLCBUTVUyLCBSVEMsIFNDSTEsIFNDSUYsIFdEVCwgUkVGLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCURNQUMsIFBDSUMxLCBUTVUyLCBSVEMsIFNDSTEsIFNDSUYsIFJFRiwKKwlQQ0lDMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCUlOVENfVkVDVChIVURJLCAweDYwMCksIElOVENfVkVDVChHUElPSSwgMHg2MjApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTJfVFVOSSwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg0NjApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKLQlJTlRDX1ZFQ1QoU0NJMV9FUkksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSTFfUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNDSTFfVFhJLCAweDUyMCksIElOVENfVkVDVChTQ0kxX1RFSSwgMHg1NDApLAotCUlOVENfVkVDVChTQ0lGX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRl9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRl9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUZfVFhJLCAweDc2MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNDSTEsIDB4NGUwKSwgSU5UQ19WRUNUKFNDSTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0NJMSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJMSwgMHg1NDApLAorCUlOVENfVkVDVChTQ0lGLCAweDcwMCksIElOVENfVkVDVChTQ0lGLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYsIDB4NzYwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCi0JSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksIElOVENfVkVDVChSRUZfUk9WSSwgMHg1YTApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChUTVUyLCBUTVUyX1RVTkksIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFNDSTEsIFNDSTFfRVJJLCBTQ0kxX1JYSSwgU0NJMV9UWEksIFNDSTFfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYsIFNDSUZfRVJJLCBTQ0lGX1JYSSwgU0NJRl9CUkksIFNDSUZfVFhJKSwKLQlJTlRDX0dST1VQKFJFRiwgUkVGX1JDTUksIFJFRl9ST1ZJKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksIElOVENfVkVDVChSRUYsIDB4NWEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNyArMTEwLDcgQEAKIAkJCQkJCSBQQ0lDMSwgUENJQzBfUENJU0VSUiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzUwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc1MCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiAvKiBTSDc3NTAsIFNINzc1MFMsIFNINzc1MSBhbmQgU0g3MDkxIGFsbCBoYXZlIDQtY2hhbm5lbCBETUEgY29udHJvbGxlcnMgKi8KQEAgLTE0NSwzOSArMTE5LDI4IEBACiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxKQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19kbWE0W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDX0RNVEUyLCAweDY4MCksIElOVENfVkVDVChETUFDX0RNVEUzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1BRSwgMHg2YzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc19kbWE0W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsCi0JCSAgIERNQUNfRE1URTMsIERNQUNfRE1BRSksCisJSU5UQ19WRUNUKERNQUMsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMsIDB4NjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2YTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCiB9OwogCiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2RtYTQsICJzaDc3NTBfZG1hNCIsCi0JCQkgdmVjdG9yc19kbWE0LCBncm91cHNfZG1hNCwKKwkJCSB2ZWN0b3JzX2RtYTQsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogI2VuZGlmCiAKIC8qIFNINzc1MFIgYW5kIFNINzc1MVIgYm90aCBoYXZlIDgtY2hhbm5lbCBETUEgY29udHJvbGxlcnMgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19kbWE4W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDX0RNVEUyLCAweDY4MCksIElOVENfVkVDVChETUFDX0RNVEUzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUNfRE1URTUsIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFNiwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFNywgMHg3ZTApLAotCUlOVENfVkVDVChETUFDX0RNQUUsIDB4NmMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNfZG1hOFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLAotCQkgICBETUFDX0RNVEUzLCBETUFDX0RNVEU0LCBETUFDX0RNVEU1LAotCQkgICBETUFDX0RNVEU2LCBETUFDX0RNVEU3LCBETUFDX0RNQUUpLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3YTApLAorCUlOVENfVkVDVChETUFDLCAweDdjMCksIElOVENfVkVDVChETUFDLCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKIH07CiAKIHN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfZG1hOCwgInNoNzc1MF9kbWE4IiwKLQkJCSB2ZWN0b3JzX2RtYTgsIGdyb3Vwc19kbWE4LAorCQkJIHZlY3RvcnNfZG1hOCwgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQppbmRleCA4ZTM0NGVjLi4xYTkyMzYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCSs9IHNldHVwLXNoNzc3MC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBzZXR1cC1zaDc3ODAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJKz0gc2V0dXAtc2g3Nzg1Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IHNldHVwLXNoNzc4Ni5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQkrPSBzZXR1cC1zaDczNDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJKz0gc2V0dXAtc2g3NzIyLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCSs9IHNldHVwLXNoNzcyMy5vCkBAIC0yMSw2ICsyMiw3IEBACiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCTo9IGNsb2NrLXNoNzc3MC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCTo9IGNsb2NrLXNoNzc4MC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCTo9IGNsb2NrLXNoNzc4NS5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCTo9IGNsb2NrLXNoNzc4Ni5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCTo9IGNsb2NrLXNoNzcyMi5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCTo9IGNsb2NrLXNoNzcyMi5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IGNsb2NrLXNoNzcyMi5vCkBAIC0zMSw2ICszMyw3IEBACiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubwogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBwaW5tdXgtc2g3Nzg2Lm8KIAogb2JqLXkJCQkrPSAkKGNsb2NrLXkpCiBvYmotJChDT05GSUdfU01QKQkrPSAkKHNtcC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRhOWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYworICoKKyAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIFNINzc4NQorICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaWZjX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDEgfTsKK3N0YXRpYyBpbnQgc2ZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKK3N0YXRpYyBpbnQgYmZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEyLCAxNiwgMSwKKwkJCSAgICAgMjQsIDMyLCAxLCAxLCAxLCAxLCAxLCAxIH07CitzdGF0aWMgaW50IG1mY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07CitzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxLCAxNiwgMSwKKwkJCSAgICAgIDI0LCAzMiwgMSwgNDgsIDEsIDEsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUU1SMSkgJiAweDAwMGZdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUU1SMSkgJiAweDAwMGYpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjgpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2NwdV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzc4Nl9jbGtfb3BzW10gPSB7CisJJnNoNzc4Nl9tYXN0ZXJfY2xrX29wcywKKwkmc2g3Nzg2X21vZHVsZV9jbGtfb3BzLAorCSZzaDc3ODZfYnVzX2Nsa19vcHMsCisJJnNoNzc4Nl9jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzc4Nl9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzc4Nl9jbGtfb3BzW2lkeF07Cit9CisKK3N0YXRpYyB2b2lkIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDIwKSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7CisJLm5hbWUJCT0gInNoeXdheV9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAorfTsKKworc3RhdGljIHZvaWQgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG1mY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2Rkcl9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gZGRyX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaDc3ODZfZGRyX2NsayA9IHsKKwkubmFtZQkJPSAiZGRyX2NsayIsCisJLmZsYWdzCQk9IENMS19BTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZzaDc3ODZfZGRyX2Nsa19vcHMsCit9OworCisvKgorICogQWRkaXRpb25hbCBTSDc3ODYtc3BlY2lmaWMgb24tY2hpcCBjbG9ja3MgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICogY2xvY2sgZnJhbWV3b3JrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICpzaDc3ODZfb25jaGlwX2Nsb2Nrc1tdID0geworCSZzaDc3ODZfc2h5d2F5X2NsaywKKwkmc2g3Nzg2X2Rkcl9jbGssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODZfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5VTEwsICJtYXN0ZXJfY2xrIik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaDc3ODZfb25jaGlwX2Nsb2Nrcyk7IGkrKykgeworCQlzdHJ1Y3QgY2xrICpjbGtwID0gc2g3Nzg2X29uY2hpcF9jbG9ja3NbaV07CisKKwkJY2xrcC0+cGFyZW50ID0gY2xrOworCQljbGtfcmVnaXN0ZXIoY2xrcCk7CisJCWNsa19lbmFibGUoY2xrcCk7CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZXN0IG9mIHRoZSBjbG9ja3MgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0bworCSAqIGZvcmNlIHRoZSBwYXJlbnQgY2xvY2sgdG8gcHJvcGFnYXRlIHNvIHRoYXQgdGhlc2UgY2xvY2tzIHdpbGwKKwkgKiBhdXRvbWF0aWNhbGx5IGZpZ3VyZSBvdXQgdGhlaXIgcmF0ZS4gV2UgY2hlYXQgYnkgaGFuZGluZyB0aGUKKwkgKiBwYXJlbnQgY2xvY2sgaXRzIGN1cnJlbnQgcmF0ZSBhbmQgZm9yY2luZyBjaGlsZCBwcm9wYWdhdGlvbi4KKwkgKi8KKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfZ2V0X3JhdGUoY2xrKSk7CisKKwljbGtfcHV0KGNsayk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoc2g3Nzg2X2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzNiMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jCkBAIC0wLDAgKzEsOTUwIEBACisvKgorICogU0g3Nzg2IFBpbm11eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gU0g3Nzg1IHBpbm11eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4Ni5oPgorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEsCisJUEI3X0RBVEEsIFBCNl9EQVRBLCBQQjVfREFUQSwgUEI0X0RBVEEsCisJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEsCisJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEsCisJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEsCisJUEU3X0RBVEEsIFBFNl9EQVRBLAorCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBLAorCVBHN19EQVRBLCBQRzZfREFUQSwgUEc1X0RBVEEsCisJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJUEgzX0RBVEEsIFBIMl9EQVRBLCBQSDFfREFUQSwgUEgwX0RBVEEsCisJUEo3X0RBVEEsIFBKNl9EQVRBLCBQSjVfREFUQSwgUEo0X0RBVEEsCisJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUEE3X0lOLCBQQTZfSU4sIFBBNV9JTiwgUEE0X0lOLAorCVBBM19JTiwgUEEyX0lOLCBQQTFfSU4sIFBBMF9JTiwKKwlQQjdfSU4sIFBCNl9JTiwgUEI1X0lOLCBQQjRfSU4sCisJUEIzX0lOLCBQQjJfSU4sIFBCMV9JTiwgUEIwX0lOLAorCVBDN19JTiwgUEM2X0lOLCBQQzVfSU4sIFBDNF9JTiwKKwlQQzNfSU4sIFBDMl9JTiwgUEMxX0lOLCBQQzBfSU4sCisJUEQ3X0lOLCBQRDZfSU4sIFBENV9JTiwgUEQ0X0lOLAorCVBEM19JTiwgUEQyX0lOLCBQRDFfSU4sIFBEMF9JTiwKKwlQRTdfSU4sIFBFNl9JTiwKKwlQRjdfSU4sIFBGNl9JTiwgUEY1X0lOLCBQRjRfSU4sCisJUEYzX0lOLCBQRjJfSU4sIFBGMV9JTiwgUEYwX0lOLAorCVBHN19JTiwgUEc2X0lOLCBQRzVfSU4sCisJUEg3X0lOLCBQSDZfSU4sIFBINV9JTiwgUEg0X0lOLAorCVBIM19JTiwgUEgyX0lOLCBQSDFfSU4sIFBIMF9JTiwKKwlQSjdfSU4sIFBKNl9JTiwgUEo1X0lOLCBQSjRfSU4sCisJUEozX0lOLCBQSjJfSU4sIFBKMV9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQQTdfSU5fUFUsIFBBNl9JTl9QVSwgUEE1X0lOX1BVLCBQQTRfSU5fUFUsCisJUEEzX0lOX1BVLCBQQTJfSU5fUFUsIFBBMV9JTl9QVSwgUEEwX0lOX1BVLAorCVBCN19JTl9QVSwgUEI2X0lOX1BVLCBQQjVfSU5fUFUsIFBCNF9JTl9QVSwKKwlQQjNfSU5fUFUsIFBCMl9JTl9QVSwgUEIxX0lOX1BVLCBQQjBfSU5fUFUsCisJUEM3X0lOX1BVLCBQQzZfSU5fUFUsIFBDNV9JTl9QVSwgUEM0X0lOX1BVLAorCVBDM19JTl9QVSwgUEMyX0lOX1BVLCBQQzFfSU5fUFUsIFBDMF9JTl9QVSwKKwlQRDdfSU5fUFUsIFBENl9JTl9QVSwgUEQ1X0lOX1BVLCBQRDRfSU5fUFUsCisJUEQzX0lOX1BVLCBQRDJfSU5fUFUsIFBEMV9JTl9QVSwgUEQwX0lOX1BVLAorCVBFN19JTl9QVSwgUEU2X0lOX1BVLAorCVBGN19JTl9QVSwgUEY2X0lOX1BVLCBQRjVfSU5fUFUsIFBGNF9JTl9QVSwKKwlQRjNfSU5fUFUsIFBGMl9JTl9QVSwgUEYxX0lOX1BVLCBQRjBfSU5fUFUsCisJUEc3X0lOX1BVLCBQRzZfSU5fUFUsIFBHNV9JTl9QVSwKKwlQSDdfSU5fUFUsIFBINl9JTl9QVSwgUEg1X0lOX1BVLCBQSDRfSU5fUFUsCisJUEgzX0lOX1BVLCBQSDJfSU5fUFUsIFBIMV9JTl9QVSwgUEgwX0lOX1BVLAorCVBKN19JTl9QVSwgUEo2X0lOX1BVLCBQSjVfSU5fUFUsIFBKNF9JTl9QVSwKKwlQSjNfSU5fUFUsIFBKMl9JTl9QVSwgUEoxX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQQTdfT1VULCBQQTZfT1VULCBQQTVfT1VULCBQQTRfT1VULAorCVBBM19PVVQsIFBBMl9PVVQsIFBBMV9PVVQsIFBBMF9PVVQsCisJUEI3X09VVCwgUEI2X09VVCwgUEI1X09VVCwgUEI0X09VVCwKKwlQQjNfT1VULCBQQjJfT1VULCBQQjFfT1VULCBQQjBfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDdfT1VULCBQRDZfT1VULCBQRDVfT1VULCBQRDRfT1VULAorCVBEM19PVVQsIFBEMl9PVVQsIFBEMV9PVVQsIFBEMF9PVVQsCisJUEU3X09VVCwgUEU2X09VVCwKKwlQRjdfT1VULCBQRjZfT1VULCBQRjVfT1VULCBQRjRfT1VULAorCVBGM19PVVQsIFBGMl9PVVQsIFBGMV9PVVQsIFBGMF9PVVQsCisJUEc3X09VVCwgUEc2X09VVCwgUEc1X09VVCwKKwlQSDdfT1VULCBQSDZfT1VULCBQSDVfT1VULCBQSDRfT1VULAorCVBIM19PVVQsIFBIMl9PVVQsIFBIMV9PVVQsIFBIMF9PVVQsCisJUEo3X09VVCwgUEo2X09VVCwgUEo1X09VVCwgUEo0X09VVCwKKwlQSjNfT1VULCBQSjJfT1VULCBQSjFfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBBN19GTiwgUEE2X0ZOLCBQQTVfRk4sIFBBNF9GTiwKKwlQQTNfRk4sIFBBMl9GTiwgUEExX0ZOLCBQQTBfRk4sCisJUEI3X0ZOLCBQQjZfRk4sIFBCNV9GTiwgUEI0X0ZOLAorCVBCM19GTiwgUEIyX0ZOLCBQQjFfRk4sIFBCMF9GTiwKKwlQQzdfRk4sIFBDNl9GTiwgUEM1X0ZOLCBQQzRfRk4sCisJUEMzX0ZOLCBQQzJfRk4sIFBDMV9GTiwgUEMwX0ZOLAorCVBEN19GTiwgUEQ2X0ZOLCBQRDVfRk4sIFBENF9GTiwKKwlQRDNfRk4sIFBEMl9GTiwgUEQxX0ZOLCBQRDBfRk4sCisJUEU3X0ZOLCBQRTZfRk4sCisJUEY3X0ZOLCBQRjZfRk4sIFBGNV9GTiwgUEY0X0ZOLAorCVBGM19GTiwgUEYyX0ZOLCBQRjFfRk4sIFBGMF9GTiwKKwlQRzdfRk4sIFBHNl9GTiwgUEc1X0ZOLAorCVBIN19GTiwgUEg2X0ZOLCBQSDVfRk4sIFBINF9GTiwKKwlQSDNfRk4sIFBIMl9GTiwgUEgxX0ZOLCBQSDBfRk4sCisJUEo3X0ZOLCBQSjZfRk4sIFBKNV9GTiwgUEo0X0ZOLAorCVBKM19GTiwgUEoyX0ZOLCBQSjFfRk4sCisJUDFNU0VMMTRfMCwgUDFNU0VMMTRfMSwKKwlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCVAxTVNFTDEyXzAsIFAxTVNFTDEyXzEsCisJUDFNU0VMMTFfMCwgUDFNU0VMMTFfMSwKKwlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCVAxTVNFTDlfMCwgUDFNU0VMOV8xLAorCVAxTVNFTDhfMCwgUDFNU0VMOF8xLAorCVAxTVNFTDdfMCwgUDFNU0VMN18xLAorCVAxTVNFTDZfMCwgUDFNU0VMNl8xLAorCVAxTVNFTDVfMCwgUDFNU0VMNV8xLAorCVAxTVNFTDRfMCwgUDFNU0VMNF8xLAorCVAxTVNFTDNfMCwgUDFNU0VMM18xLAorCVAxTVNFTDJfMCwgUDFNU0VMMl8xLAorCVAxTVNFTDFfMCwgUDFNU0VMMV8xLAorCVAxTVNFTDBfMCwgUDFNU0VMMF8xLAorCisJUDJNU0VMMTVfMCwgUDJNU0VMMTVfMSwKKwlQMk1TRUwxNF8wLCBQMk1TRUwxNF8xLAorCVAyTVNFTDEzXzAsIFAyTVNFTDEzXzEsCisJUDJNU0VMMTJfMCwgUDJNU0VMMTJfMSwKKwlQMk1TRUwxMV8wLCBQMk1TRUwxMV8xLAorCVAyTVNFTDEwXzAsIFAyTVNFTDEwXzEsCisJUDJNU0VMOV8wLCBQMk1TRUw5XzEsCisJUDJNU0VMOF8wLCBQMk1TRUw4XzEsCisJUDJNU0VMN18wLCBQMk1TRUw3XzEsCisJUDJNU0VMNl8wLCBQMk1TRUw2XzEsCisJUDJNU0VMNV8wLCBQMk1TRUw1XzEsCisJUDJNU0VMNF8wLCBQMk1TRUw0XzEsCisJUDJNU0VMM18wLCBQMk1TRUwzXzEsCisJUDJNU0VMMl8wLCBQMk1TRUwyXzEsCisJUDJNU0VMMV8wLCBQMk1TRUwxXzEsCisJUDJNU0VMMF8wLCBQMk1TRUwwXzEsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCUNERV9NQVJLLAorCUVUSF9NQUdJQ19NQVJLLAorCURJU1BfTUFSSywKKwlFVEhfTElOS19NQVJLLAorCURSNV9NQVJLLAorCUVUSF9UWF9FUl9NQVJLLAorCURSNF9NQVJLLAorCUVUSF9UWF9FTl9NQVJLLAorCURSM19NQVJLLAorCUVUSF9UWEQzX01BUkssCisJRFIyX01BUkssCisJRVRIX1RYRDJfTUFSSywKKwlEUjFfTUFSSywKKwlFVEhfVFhEMV9NQVJLLAorCURSMF9NQVJLLAorCUVUSF9UWEQwX01BUkssCisKKwlWU1lOQ19NQVJLLAorCUhTUElfQ0xLX01BUkssCisJT0RERl9NQVJLLAorCUhTUElfQ1NfTUFSSywKKwlERzVfTUFSSywKKwlFVEhfTURJT19NQVJLLAorCURHNF9NQVJLLAorCUVUSF9SWF9DTEtfTUFSSywKKwlERzNfTUFSSywKKwlFVEhfTURDX01BUkssCisJREcyX01BUkssCisJRVRIX0NPTF9NQVJLLAorCURHMV9NQVJLLAorCUVUSF9UWF9DTEtfTUFSSywKKwlERzBfTUFSSywKKwlFVEhfQ1JTX01BUkssCisKKwlEQ0xLSU5fTUFSSywKKwlIU1BJX1JYX01BUkssCisJSFNZTkNfTUFSSywKKwlIU1BJX1RYX01BUkssCisJREI1X01BUkssCisJRVRIX1JYRDNfTUFSSywKKwlEQjRfTUFSSywKKwlFVEhfUlhEMl9NQVJLLAorCURCM19NQVJLLAorCUVUSF9SWEQxX01BUkssCisJREIyX01BUkssCisJRVRIX1JYRDBfTUFSSywKKwlEQjFfTUFSSywKKwlFVEhfUlhfRFZfTUFSSywKKwlEQjBfTUFSSywKKwlFVEhfUlhfRVJfTUFSSywKKworCURDTEtPVVRfTUFSSywKKwlTQ0lGMV9TTEtfTUFSSywKKwlTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9UWERfTUFSSywKKwlEQUNLMV9NQVJLLAorCUJBQ0tfTUFSSywKKwlGQUxFX01BUkssCisJREFDSzBfTUFSSywKKwlGQ0xFX01BUkssCisJRFJFUTFfTUFSSywKKwlCUkVRX01BUkssCisJVVNCX09WQzFfTUFSSywKKwlEUkVRMF9NQVJLLAorCVVTQl9PVkMwX01BUkssCisKKwlVU0JfUEVOQzFfTUFSSywKKwlVU0JfUEVOQzBfTUFSSywKKworCUhBQzFfU0RPVVRfTUFSSywKKwlTU0kxX1NEQVRBX01BUkssCisJU0RJRjFDTURfTUFSSywKKwlIQUMxX1NESU5fTUFSSywKKwlTU0kxX1NDS19NQVJLLAorCVNESUYxQ0RfTUFSSywKKwlIQUMxX1NZTkNfTUFSSywKKwlTU0kxX1dTX01BUkssCisJU0RJRjFXUF9NQVJLLAorCUhBQzFfQklUQ0xLX01BUkssCisJU1NJMV9DTEtfTUFSSywKKwlTRElGMUNMS19NQVJLLAorCUhBQzBfU0RPVVRfTUFSSywKKwlTU0kwX1NEQVRBX01BUkssCisJU0RJRjFEM19NQVJLLAorCUhBQzBfU0RJTl9NQVJLLAorCVNTSTBfU0NLX01BUkssCisJU0RJRjFEMl9NQVJLLAorCUhBQzBfU1lOQ19NQVJLLAorCVNTSTBfV1NfTUFSSywKKwlTRElGMUQxX01BUkssCisJSEFDMF9CSVRDTEtfTUFSSywKKwlTU0kwX0NMS19NQVJLLAorCVNESUYxRDBfTUFSSywKKworCVNDSUYzX1NDS19NQVJLLAorCVNTSTJfU0RBVEFfTUFSSywKKwlTQ0lGM19SWERfTUFSSywKKwlUQ0xLX01BUkssCisJU1NJMl9TQ0tfTUFSSywKKwlTQ0lGM19UWERfTUFSSywKKwlIQUNfUkVTX01BUkssCisJU1NJMl9XU19NQVJLLAorCisJREFDSzNfTUFSSywKKwlTRElGMENNRF9NQVJLLAorCURBQ0syX01BUkssCisJU0RJRjBDRF9NQVJLLAorCURSRVEzX01BUkssCisJU0RJRjBXUF9NQVJLLAorCVNDSUYwX0NUU19NQVJLLAorCURSRVEyX01BUkssCisJU0RJRjBDTEtfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywKKwlJUkw3X01BUkssCisJU0RJRjBEM19NQVJLLAorCVNDSUYwX1NDS19NQVJLLAorCUlSTDZfTUFSSywKKwlTRElGMEQyX01BUkssCisJU0NJRjBfUlhEX01BUkssCisJSVJMNV9NQVJLLAorCVNESUYwRDFfTUFSSywKKwlTQ0lGMF9UWERfTUFSSywKKwlJUkw0X01BUkssCisJU0RJRjBEMF9NQVJLLAorCisJU0NJRjVfU0NLX01BUkssCisJRlJCX01BUkssCisJU0NJRjVfUlhEX01BUkssCisJSU9JUzE2X01BUkssCisJU0NJRjVfVFhEX01BUkssCisJQ0UyQl9NQVJLLAorCURSQUszX01BUkssCisJQ0UyQV9NQVJLLAorCVNDSUY0X1NDS19NQVJLLAorCURSQUsyX01BUkssCisJU1NJM19XU19NQVJLLAorCVNDSUY0X1JYRF9NQVJLLAorCURSQUsxX01BUkssCisJU1NJM19TREFUQV9NQVJLLAorCUZTVEFUVVNfTUFSSywKKwlTQ0lGNF9UWERfTUFSSywKKwlEUkFLMF9NQVJLLAorCVNTSTNfU0NLX01BUkssCisJRlNFX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKworCS8qIFBBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQTdfREFUQSwgUEE3X0lOLCBQQTdfT1VULCBQQTdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4sIFBBNl9PVVQsIFBBNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE1X0RBVEEsIFBBNV9JTiwgUEE1X09VVCwgUEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTRfREFUQSwgUEE0X0lOLCBQQTRfT1VULCBQQTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4sIFBBM19PVVQsIFBBM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEEyX0RBVEEsIFBBMl9JTiwgUEEyX09VVCwgUEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTFfREFUQSwgUEExX0lOLCBQQTFfT1VULCBQQTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4sIFBBMF9PVVQsIFBBMF9JTl9QVSksCisKKwkvKiBQQiBHUElPICovCisJUElOTVVYX0RBVEEoUEI3X0RBVEEsIFBCN19JTiwgUEI3X09VVCwgUEI3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjZfREFUQSwgUEI2X0lOLCBQQjZfT1VULCBQQjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNV9EQVRBLCBQQjVfSU4sIFBCNV9PVVQsIFBCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEI0X0RBVEEsIFBCNF9JTiwgUEI0X09VVCwgUEI0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjNfREFUQSwgUEIzX0lOLCBQQjNfT1VULCBQQjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMl9EQVRBLCBQQjJfSU4sIFBCMl9PVVQsIFBCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIxX0RBVEEsIFBCMV9JTiwgUEIxX09VVCwgUEIxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjBfREFUQSwgUEIwX0lOLCBQQjBfT1VULCBQQjBfSU5fUFUpLAorCisJLyogUEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBDN19EQVRBLCBQQzdfSU4sIFBDN19PVVQsIFBDN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEM2X0RBVEEsIFBDNl9JTiwgUEM2X09VVCwgUEM2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzVfREFUQSwgUEM1X0lOLCBQQzVfT1VULCBQQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNF9EQVRBLCBQQzRfSU4sIFBDNF9PVVQsIFBDNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMzX0RBVEEsIFBDM19JTiwgUEMzX09VVCwgUEMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzJfREFUQSwgUEMyX0lOLCBQQzJfT1VULCBQQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMV9EQVRBLCBQQzFfSU4sIFBDMV9PVVQsIFBDMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMwX0RBVEEsIFBDMF9JTiwgUEMwX09VVCwgUEMwX0lOX1BVKSwKKworCS8qIFBEIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRDdfREFUQSwgUEQ3X0lOLCBQRDdfT1VULCBQRDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENl9EQVRBLCBQRDZfSU4sIFBENl9PVVQsIFBENl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ1X0RBVEEsIFBENV9JTiwgUEQ1X09VVCwgUEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDRfREFUQSwgUEQ0X0lOLCBQRDRfT1VULCBQRDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEM19EQVRBLCBQRDNfSU4sIFBEM19PVVQsIFBEM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEQyX0RBVEEsIFBEMl9JTiwgUEQyX09VVCwgUEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDFfREFUQSwgUEQxX0lOLCBQRDFfT1VULCBQRDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMF9EQVRBLCBQRDBfSU4sIFBEMF9PVVQsIFBEMF9JTl9QVSksCisKKwkvKiBQRSBHUElPICovCisJUElOTVVYX0RBVEEoUEU3X0RBVEEsIFBFN19JTiwgUEU3X09VVCwgUEU3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRTZfREFUQSwgUEU2X0lOLCBQRTZfT1VULCBQRTZfSU5fUFUpLAorCisJLyogUEYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBGN19EQVRBLCBQRjdfSU4sIFBGN19PVVQsIFBGN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNl9JTiwgUEY2X09VVCwgUEY2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjVfREFUQSwgUEY1X0lOLCBQRjVfT1VULCBQRjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNF9EQVRBLCBQRjRfSU4sIFBGNF9PVVQsIFBGNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYzX0RBVEEsIFBGM19JTiwgUEYzX09VVCwgUEYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyX0lOLCBQRjJfT1VULCBQRjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMV9EQVRBLCBQRjFfSU4sIFBGMV9PVVQsIFBGMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYwX0RBVEEsIFBGMF9JTiwgUEYwX09VVCwgUEYwX0lOX1BVKSwKKworCS8qIFBHIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRzdfREFUQSwgUEc3X0lOLCBQRzdfT1VULCBQRzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNl9EQVRBLCBQRzZfSU4sIFBHNl9PVVQsIFBHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEc1X0RBVEEsIFBHNV9JTiwgUEc1X09VVCwgUEc1X0lOX1BVKSwKKworCS8qIFBIIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQSDdfREFUQSwgUEg3X0lOLCBQSDdfT1VULCBQSDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINl9EQVRBLCBQSDZfSU4sIFBINl9PVVQsIFBINl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg1X0RBVEEsIFBINV9JTiwgUEg1X09VVCwgUEg1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDRfREFUQSwgUEg0X0lOLCBQSDRfT1VULCBQSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIM19EQVRBLCBQSDNfSU4sIFBIM19PVVQsIFBIM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEgyX0RBVEEsIFBIMl9JTiwgUEgyX09VVCwgUEgyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDFfREFUQSwgUEgxX0lOLCBQSDFfT1VULCBQSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMF9EQVRBLCBQSDBfSU4sIFBIMF9PVVQsIFBIMF9JTl9QVSksCisKKwkvKiBQSiBHUElPICovCisJUElOTVVYX0RBVEEoUEo3X0RBVEEsIFBKN19JTiwgUEo3X09VVCwgUEo3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjZfREFUQSwgUEo2X0lOLCBQSjZfT1VULCBQSjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNV9EQVRBLCBQSjVfSU4sIFBKNV9PVVQsIFBKNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEo0X0RBVEEsIFBKNF9JTiwgUEo0X09VVCwgUEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjNfREFUQSwgUEozX0lOLCBQSjNfT1VULCBQSjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMl9EQVRBLCBQSjJfSU4sIFBKMl9PVVQsIFBKMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEoxX0RBVEEsIFBKMV9JTiwgUEoxX09VVCwgUEoxX0lOX1BVKSwKKworCS8qIFBBIEZOICovCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOTVVYX0RBVEEoQ0RFX01BUkssCQlQMU1TRUwyXzAsIFBBN19GTiksCisJUElOTVVYX0RBVEEoRElTUF9NQVJLLAkJUDFNU0VMMl8wLCBQQTZfRk4pLAorCVBJTk1VWF9EQVRBKERSNV9NQVJLLAkJUDFNU0VMMl8wLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKERSNF9NQVJLLAkJUDFNU0VMMl8wLCBQQTRfRk4pLAorCVBJTk1VWF9EQVRBKERSM19NQVJLLAkJUDFNU0VMMl8wLCBQQTNfRk4pLAorCVBJTk1VWF9EQVRBKERSMl9NQVJLLAkJUDFNU0VMMl8wLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKERSMV9NQVJLLAkJUDFNU0VMMl8wLCBQQTFfRk4pLAorCVBJTk1VWF9EQVRBKERSMF9NQVJLLAkJUDFNU0VMMl8wLCBQQTBfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NQUdJQ19NQVJLLAlQMU1TRUwyXzEsIFBBN19GTiksCisJUElOTVVYX0RBVEEoRVRIX0xJTktfTUFSSywJUDFNU0VMMl8xLCBQQTZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9FUl9NQVJLLAlQMU1TRUwyXzEsIFBBNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0VOX01BUkssCVAxTVNFTDJfMSwgUEE0X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEM19NQVJLLAlQMU1TRUwyXzEsIFBBM19GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDJfTUFSSywJUDFNU0VMMl8xLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQxX01BUkssCVAxTVNFTDJfMSwgUEExX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMF9NQVJLLAlQMU1TRUwyXzEsIFBBMF9GTiksCisKKwkvKiBQQiBGTiAqLworCVBJTk1VWF9EQVRBKFZTWU5DX01BUkssCQlQMU1TRUwzXzAsIFBCN19GTiksCisJUElOTVVYX0RBVEEoT0RERl9NQVJLLAkJUDFNU0VMM18wLCBQQjZfRk4pLAorCVBJTk1VWF9EQVRBKERHNV9NQVJLLAkJUDFNU0VMMl8wLCBQQjVfRk4pLAorCVBJTk1VWF9EQVRBKERHNF9NQVJLLAkJUDFNU0VMMl8wLCBQQjRfRk4pLAorCVBJTk1VWF9EQVRBKERHM19NQVJLLAkJUDFNU0VMMl8wLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKERHMl9NQVJLLAkJUDFNU0VMMl8wLCBQQjJfRk4pLAorCVBJTk1VWF9EQVRBKERHMV9NQVJLLAkJUDFNU0VMMl8wLCBQQjFfRk4pLAorCVBJTk1VWF9EQVRBKERHMF9NQVJLLAkJUDFNU0VMMl8wLCBQQjBfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfQ0xLX01BUkssCVAxTVNFTDNfMSwgUEI3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NTX01BUkssCVAxTVNFTDNfMSwgUEI2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTURJT19NQVJLLAlQMU1TRUwyXzEsIFBCNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0NMS19NQVJLLAlQMU1TRUwyXzEsIFBCNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX01EQ19NQVJLLAlQMU1TRUwyXzEsIFBCM19GTiksCisJUElOTVVYX0RBVEEoRVRIX0NPTF9NQVJLLAlQMU1TRUwyXzEsIFBCMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0NMS19NQVJLLAlQMU1TRUwyXzEsIFBCMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX0NSU19NQVJLLAlQMU1TRUwyXzEsIFBCMF9GTiksCisKKwkvKiBQQyBGTiAqLworCVBJTk1VWF9EQVRBKERDTEtJTl9NQVJLLAlQMU1TRUwzXzAsIFBDN19GTiksCisJUElOTVVYX0RBVEEoSFNZTkNfTUFSSywJCVAxTVNFTDNfMCwgUEM2X0ZOKSwKKwlQSU5NVVhfREFUQShEQjVfTUFSSywJCVAxTVNFTDJfMCwgUEM1X0ZOKSwKKwlQSU5NVVhfREFUQShEQjRfTUFSSywJCVAxTVNFTDJfMCwgUEM0X0ZOKSwKKwlQSU5NVVhfREFUQShEQjNfTUFSSywJCVAxTVNFTDJfMCwgUEMzX0ZOKSwKKwlQSU5NVVhfREFUQShEQjJfTUFSSywJCVAxTVNFTDJfMCwgUEMyX0ZOKSwKKwlQSU5NVVhfREFUQShEQjFfTUFSSywJCVAxTVNFTDJfMCwgUEMxX0ZOKSwKKwlQSU5NVVhfREFUQShEQjBfTUFSSywJCVAxTVNFTDJfMCwgUEMwX0ZOKSwKKworCVBJTk1VWF9EQVRBKEhTUElfUlhfTUFSSywJUDFNU0VMM18xLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfVFhfTUFSSywJUDFNU0VMM18xLCBQQzZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQzX01BUkssCVAxTVNFTDJfMSwgUEM1X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMl9NQVJLLAlQMU1TRUwyXzEsIFBDNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDFfTUFSSywJUDFNU0VMMl8xLCBQQzNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQwX01BUkssCVAxTVNFTDJfMSwgUEMyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfRFZfTUFSSywJUDFNU0VMMl8xLCBQQzFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9FUl9NQVJLLAlQMU1TRUwyXzEsIFBDMF9GTiksCisKKwkvKiBQRCBGTiAqLworCVBJTk1VWF9EQVRBKERDTEtPVVRfTUFSSywJUEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9TTEtfTUFSSywJUEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SWERfTUFSSywJUEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywJUEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMV9NQVJLLAkJUDFNU0VMMTNfMSwgUDFNU0VMMTJfMCwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShCQUNLX01BUkssCQlQMU1TRUwxM18wLCBQMU1TRUwxMl8xLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKEZBTEVfTUFSSywJCVAxTVNFTDEzXzAsIFAxTVNFTDEyXzAsIFBEM19GTiksCisJUElOTVVYX0RBVEEoREFDSzBfTUFSSywJCVAxTVNFTDE0XzEsIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRkNMRV9NQVJLLAkJUDFNU0VMMTRfMCwgUEQyX0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMV9NQVJLLAkJUDFNU0VMMTBfMCwgUDFNU0VMOV8xLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKEJSRVFfTUFSSywJCVAxTVNFTDEwXzEsIFAxTVNFTDlfMCwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShVU0JfT1ZDMV9NQVJLLAlQMU1TRUwxMF8wLCBQMU1TRUw5XzAsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoRFJFUTBfTUFSSywJCVAxTVNFTDExXzEsIFBEMF9GTiksCisJUElOTVVYX0RBVEEoVVNCX09WQzBfTUFSSywJUDFNU0VMMTFfMCwgUEQwX0ZOKSwKKworCS8qIFBFIEZOICovCisJUElOTVVYX0RBVEEoVVNCX1BFTkMxX01BUkssCVBFN19GTiksCisJUElOTVVYX0RBVEEoVVNCX1BFTkMwX01BUkssCVBFNl9GTiksCisKKwkvKiBQRiBGTiAqLworCVBJTk1VWF9EQVRBKEhBQzFfU0RPVVRfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NESU5fTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NZTkNfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX0JJVENMS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8wLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfU0RPVVRfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NESU5fTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NZTkNfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX0JJVENMS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8wLCBQRjBfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfU0RBVEFfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1NDS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfV1NfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX0NMS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfU0RBVEFfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NDS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfV1NfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX0NMS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjBfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ01EX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGN19GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDRF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxV1BfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNMS19NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDNfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQyX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMV9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjFfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDBfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYwX0ZOKSwKKworCS8qIFBHIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjNfU0NLX01BUkssCVAxTVNFTDhfMCwgUEc3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1NEQVRBX01BUkssCVAxTVNFTDhfMSwgUEc3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19SWERfTUFSSywJUDFNU0VMN18wLCBQMU1TRUw2XzAsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoU1NJMl9TQ0tfTUFSSywJUDFNU0VMN18xLCBQMU1TRUw2XzAsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoVENMS19NQVJLLAkJUDFNU0VMN18wLCBQMU1TRUw2XzEsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfVFhEX01BUkssCVAxTVNFTDVfMCwgUDFNU0VMNF8wLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfV1NfTUFSSywJUDFNU0VMNV8xLCBQMU1TRUw0XzAsIFBHNV9GTiksCisJUElOTVVYX0RBVEEoSEFDX1JFU19NQVJLLAlQMU1TRUw1XzAsIFAxTVNFTDRfMSwgUEc1X0ZOKSwKKworCS8qIFBIIEZOICovCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywJCVAyTVNFTDRfMCwgUEg3X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENNRF9NQVJLLAlQMk1TRUw0XzEsIFBIN19GTiksCisJUElOTVVYX0RBVEEoREFDSzJfTUFSSywJCVAyTVNFTDRfMCwgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENEX01BUkssCVAyTVNFTDRfMSwgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRM19NQVJLLAkJUDJNU0VMNF8wLCBQSDVfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwV1BfTUFSSywJUDJNU0VMNF8xLCBQSDVfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEyX01BUkssCQlQMk1TRUwzXzAsIFAyTVNFTDJfMSwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENMS19NQVJLLAlQMk1TRUwzXzEsIFAyTVNFTDJfMCwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9DVFNfTUFSSywJUDJNU0VMM18wLCBQMk1TRUwyXzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEM19NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIM19GTiksCisJUElOTVVYX0RBVEEoSVJMN19NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIM19GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMl9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9TQ0tfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoSVJMNl9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMV9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoSVJMNV9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMF9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9UWERfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMF9GTiksCisJUElOTVVYX0RBVEEoSVJMNF9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMF9GTiksCisKKwkvKiBQSiBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUY1X1NDS19NQVJLLAlQMk1TRUwxMV8xLCBQSjdfRk4pLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLAkJUDJNU0VMMTFfMCwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9SWERfTUFSSywJUDJNU0VMMTBfMCwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShJT0lTMTZfTUFSSywJUDJNU0VMMTBfMSwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9UWERfTUFSSywJUDJNU0VMMTBfMCwgUEo1X0ZOKSwKKwlQSU5NVVhfREFUQShDRTJCX01BUkssCQlQMk1TRUwxMF8xLCBQSjVfRk4pLAorCVBJTk1VWF9EQVRBKERSQUszX01BUkssCQlQMk1TRUw3XzAsIFBKNF9GTiksCisJUElOTVVYX0RBVEEoQ0UyQV9NQVJLLAkJUDJNU0VMN18xLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1NDS19NQVJLLAlQMk1TRUw5XzAsIFAyTVNFTDhfMCwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMl9NQVJLLAkJUDJNU0VMOV8wLCBQMk1TRUw4XzEsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU1NJM19XU19NQVJLLAlQMk1TRUw5XzEsIFAyTVNFTDhfMCwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9SWERfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzAsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoRFJBSzFfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8xLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKEZTVEFUVVNfTUFSSywJUDJNU0VMNl8wLCBQMk1TRUw1XzAsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoU1NJM19TREFUQV9NQVJLLAlQMk1TRUw2XzEsIFAyTVNFTDVfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9UWERfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoRFJBSzBfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8xLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKEZTRV9NQVJLLAkJUDJNU0VMNl8wLCBQMk1TRUw1XzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoU1NJM19TQ0tfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzEsIFBKMV9GTiksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCS8qIFBBICovCisJUElOTVVYX0dQSU8oR1BJT19QQTcsIFBBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNiwgUEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE1LCBQQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTQsIFBBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMywgUEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEyLCBQQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTEsIFBBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMCwgUEEwX0RBVEEpLAorCisJLyogUEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BCNywgUEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI2LCBQQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjUsIFBCNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNCwgUEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIzLCBQQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjIsIFBCMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMSwgUEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIwLCBQQjBfREFUQSksCisKKwkvKiBQQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEM3LCBQQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzYsIFBDNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNSwgUEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM0LCBQQzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzMsIFBDM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMiwgUEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxLCBQQzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzAsIFBDMF9EQVRBKSwKKworCS8qIFBEICovCisJUElOTVVYX0dQSU8oR1BJT19QRDcsIFBEN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENiwgUEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ1LCBQRDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDQsIFBENF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMywgUEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQyLCBQRDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEsIFBEMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMCwgUEQwX0RBVEEpLAorCisJLyogUEUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BFNSwgUEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU0LCBQRTZfREFUQSksCisKKwkvKiBQRiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEY3LCBQRjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjYsIFBGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNSwgUEY1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY0LCBQRjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjMsIFBGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMiwgUEYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxLCBQRjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjAsIFBGMF9EQVRBKSwKKworCS8qIFBHICovCisJUElOTVVYX0dQSU8oR1BJT19QRzcsIFBHN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNiwgUEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEc1LCBQRzVfREFUQSksCisKKwkvKiBQSCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEg3LCBQSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDYsIFBINl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINSwgUEg1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg0LCBQSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDMsIFBIM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMiwgUEgyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgxLCBQSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDAsIFBIMF9EQVRBKSwKKworCS8qIFBKICovCisJUElOTVVYX0dQSU8oR1BJT19QSjcsIFBKN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNiwgUEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo1LCBQSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjQsIFBKNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMywgUEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEoyLCBQSjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjEsIFBKMV9EQVRBKSwKKworCS8qIEZOICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9DREUsCQlDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTUFHSUMsCQlFVEhfTUFHSUNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ESVNQLAkJRElTUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9MSU5LLAkJRVRIX0xJTktfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjUsCQlEUjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfRVIsCQlFVEhfVFhfRVJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjQsCQlEUjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfRU4sCQlFVEhfVFhfRU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjMsCQlEUjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMywJCUVUSF9UWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIyLAkJRFIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDIsCQlFVEhfVFhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMSwJCURSMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQxLAkJRVRIX1RYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjAsCQlEUjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMCwJCUVUSF9UWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVlNZTkMsCQlWU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ0xLLAkJSFNQSV9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9PRERGLAkJT0RERl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ1MsCQlIU1BJX0NTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREc1LAkJREc1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01ESU8sCQlFVEhfTURJT19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHNCwJCURHNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9DTEssCQlFVEhfUlhfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREczLAkJREczX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01EQywJCUVUSF9NRENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzIsCQlERzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfQ09MLAkJRVRIX0NPTF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMSwJCURHMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWF9DTEssCQlFVEhfVFhfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcwLAkJREcwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0NSUywJCUVUSF9DUlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQ0xLSU4sCQlEQ0xLSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1JYLAkJSFNQSV9SWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTWU5DLAkJSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1RYLAkJSFNQSV9UWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCNSwJCURCNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQzLAkJRVRIX1JYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjQsCQlEQjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMiwJCUVUSF9SWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIzLAkJREIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDEsCQlFVEhfUlhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMiwJCURCMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQwLAkJRVRIX1JYRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjEsCQlEQjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfRFYsCQlFVEhfUlhfRFZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjAsCQlEQjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfRVIsCQlFVEhfUlhfRVJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQ0xLT1VULAkJRENMS09VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NMSywJCVNDSUYxX1NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwJCVNDSUYxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1RYRCwJCVNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxLAkJREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CQUNLLAkJQkFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZBTEUsCQlGQUxFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzAsCQlEQUNLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDTEUsCQlGQ0xFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTEsCQlEUkVRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVEsCQlCUkVRX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX09WQzEsCQlVU0JfT1ZDMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwLAkJRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0JfT1ZDMCwJCVVTQl9PVkMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX1BFTkMxLAkJVVNCX1BFTkMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX1BFTkMwLAkJVVNCX1BFTkMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRE9VVCwJCUhBQzFfU0RPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1NEQVRBLAkJU1NJMV9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ01ELAkJU0RJRjFDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NESU4sCQlIQUMxX1NESU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1NDSywJCVNTSTFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFDRCwJCVNESUYxQ0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NZTkMsCQlIQUMxX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1dTLAkJU1NJMV9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxV1AsCQlTRElGMVdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9CSVRDTEssCUhBQzFfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9DTEssCQlTU0kxX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ0xLLAkJU0RJRjFDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NET1VULAkJSEFDMF9TRE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfU0RBVEEsCQlTU0kwX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMywJCVNESUYxRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NESU4sCQlIQUMwX1NESU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1NDSywJCVNTSTBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMiwJCVNESUYxRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NZTkMsCQlIQUMwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1dTLAkJU1NJMF9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDEsCQlTRElGMUQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9CSVRDTEssCUhBQzBfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9DTEssCQlTU0kwX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDAsCQlTRElGMUQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfU0NLLAkJU0NJRjNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMl9TREFUQSwJCVNTSTJfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19SWEQsCQlTQ0lGM19SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLLAkJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfU0NLLAkJU1NJMl9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19UWEQsCQlTQ0lGM19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUNfUkVTLAkJSEFDX1JFU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfV1MsCQlTU0kyX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzMsCQlEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ01ELAkJU0RJRjBDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMiwJCURBQ0syX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDRCwJCVNESUYwQ0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMywJCURSRVEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBXUCwJCVNESUYwV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9DVFMsCQlTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMiwJCURSRVEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDTEssCQlTRElGMENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywJCVNDSUYwX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDcsCQlJUkw3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMywJCVNESUYwRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssCQlTQ0lGMF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw2LAkJSVJMNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDIsCQlTRElGMEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELAkJU0NJRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNSwJCUlSTDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQxLAkJU0RJRjBEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1RYRCwJCVNDSUYwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDQsCQlJUkw0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMCwJCVNESUYwRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9TQ0ssCQlTQ0lGNV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsCQlGUkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9SWEQsCQlTQ0lGNV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsCQlJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9UWEQsCQlTQ0lGNV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJCLAkJQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUszLAkJRFJBSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJBLAkJQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1NDSywJCVNDSUY0X1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsyLAkJRFJBSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1dTLAkJU1NJM19XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1JYRCwJCVNDSUY0X1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsxLAkJRFJBSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1NEQVRBLAkJU1NJM19TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZTVEFUVVMsCQlGU1RBVFVTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfVFhELAkJU0NJRjRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzAsCQlEUkFLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTNfU0NLLAkJU1NJM19TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU0UsCQlGU0VfTUFSSyksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGZmY2MwMDAwLCAxNiwgMikgeworCQlQQTdfRk4sIFBBN19PVVQsIFBBN19JTiwgUEE3X0lOX1BVLAorCQlQQTZfRk4sIFBBNl9PVVQsIFBBNl9JTiwgUEE2X0lOX1BVLAorCQlQQTVfRk4sIFBBNV9PVVQsIFBBNV9JTiwgUEE1X0lOX1BVLAorCQlQQTRfRk4sIFBBNF9PVVQsIFBBNF9JTiwgUEE0X0lOX1BVLAorCQlQQTNfRk4sIFBBM19PVVQsIFBBM19JTiwgUEEzX0lOX1BVLAorCQlQQTJfRk4sIFBBMl9PVVQsIFBBMl9JTiwgUEEyX0lOX1BVLAorCQlQQTFfRk4sIFBBMV9PVVQsIFBBMV9JTiwgUEExX0lOX1BVLAorCQlQQTBfRk4sIFBBMF9PVVQsIFBBMF9JTiwgUEEwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGZmY2MwMDAyLCAxNiwgMikgeworCQlQQjdfRk4sIFBCN19PVVQsIFBCN19JTiwgUEI3X0lOX1BVLAorCQlQQjZfRk4sIFBCNl9PVVQsIFBCNl9JTiwgUEI2X0lOX1BVLAorCQlQQjVfRk4sIFBCNV9PVVQsIFBCNV9JTiwgUEI1X0lOX1BVLAorCQlQQjRfRk4sIFBCNF9PVVQsIFBCNF9JTiwgUEI0X0lOX1BVLAorCQlQQjNfRk4sIFBCM19PVVQsIFBCM19JTiwgUEIzX0lOX1BVLAorCQlQQjJfRk4sIFBCMl9PVVQsIFBCMl9JTiwgUEIyX0lOX1BVLAorCQlQQjFfRk4sIFBCMV9PVVQsIFBCMV9JTiwgUEIxX0lOX1BVLAorCQlQQjBfRk4sIFBCMF9PVVQsIFBCMF9JTiwgUEIwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1IiLCAweGZmY2MwMDA0LCAxNiwgMikgeworCQlQQzdfRk4sIFBDN19PVVQsIFBDN19JTiwgUEM3X0lOX1BVLAorCQlQQzZfRk4sIFBDNl9PVVQsIFBDNl9JTiwgUEM2X0lOX1BVLAorCQlQQzVfRk4sIFBDNV9PVVQsIFBDNV9JTiwgUEM1X0lOX1BVLAorCQlQQzRfRk4sIFBDNF9PVVQsIFBDNF9JTiwgUEM0X0lOX1BVLAorCQlQQzNfRk4sIFBDM19PVVQsIFBDM19JTiwgUEMzX0lOX1BVLAorCQlQQzJfRk4sIFBDMl9PVVQsIFBDMl9JTiwgUEMyX0lOX1BVLAorCQlQQzFfRk4sIFBDMV9PVVQsIFBDMV9JTiwgUEMxX0lOX1BVLAorCQlQQzBfRk4sIFBDMF9PVVQsIFBDMF9JTiwgUEMwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGZmY2MwMDA2LCAxNiwgMikgeworCQlQRDdfRk4sIFBEN19PVVQsIFBEN19JTiwgUEQ3X0lOX1BVLAorCQlQRDZfRk4sIFBENl9PVVQsIFBENl9JTiwgUEQ2X0lOX1BVLAorCQlQRDVfRk4sIFBENV9PVVQsIFBENV9JTiwgUEQ1X0lOX1BVLAorCQlQRDRfRk4sIFBENF9PVVQsIFBENF9JTiwgUEQ0X0lOX1BVLAorCQlQRDNfRk4sIFBEM19PVVQsIFBEM19JTiwgUEQzX0lOX1BVLAorCQlQRDJfRk4sIFBEMl9PVVQsIFBEMl9JTiwgUEQyX0lOX1BVLAorCQlQRDFfRk4sIFBEMV9PVVQsIFBEMV9JTiwgUEQxX0lOX1BVLAorCQlQRDBfRk4sIFBEMF9PVVQsIFBEMF9JTiwgUEQwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGZmY2MwMDA4LCAxNiwgMikgeworCQlQRTdfRk4sIFBFN19PVVQsIFBFN19JTiwgUEU3X0lOX1BVLAorCQlQRTZfRk4sIFBFNl9PVVQsIFBFNl9JTiwgUEU2X0lOX1BVLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSIiwgMHhmZmNjMDAwYSwgMTYsIDIpIHsKKwkJUEY3X0ZOLCBQRjdfT1VULCBQRjdfSU4sIFBGN19JTl9QVSwKKwkJUEY2X0ZOLCBQRjZfT1VULCBQRjZfSU4sIFBGNl9JTl9QVSwKKwkJUEY1X0ZOLCBQRjVfT1VULCBQRjVfSU4sIFBGNV9JTl9QVSwKKwkJUEY0X0ZOLCBQRjRfT1VULCBQRjRfSU4sIFBGNF9JTl9QVSwKKwkJUEYzX0ZOLCBQRjNfT1VULCBQRjNfSU4sIFBGM19JTl9QVSwKKwkJUEYyX0ZOLCBQRjJfT1VULCBQRjJfSU4sIFBGMl9JTl9QVSwKKwkJUEYxX0ZOLCBQRjFfT1VULCBQRjFfSU4sIFBGMV9JTl9QVSwKKwkJUEYwX0ZOLCBQRjBfT1VULCBQRjBfSU4sIFBGMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhmZmNjMDAwYywgMTYsIDIpIHsKKwkJUEc3X0ZOLCBQRzdfT1VULCBQRzdfSU4sIFBHN19JTl9QVSwKKwkJUEc2X0ZOLCBQRzZfT1VULCBQRzZfSU4sIFBHNl9JTl9QVSwKKwkJUEc1X0ZOLCBQRzVfT1VULCBQRzVfSU4sIFBHNV9JTl9QVSwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4ZmZjYzAwMGUsIDE2LCAyKSB7CisJCVBIN19GTiwgUEg3X09VVCwgUEg3X0lOLCBQSDdfSU5fUFUsCisJCVBINl9GTiwgUEg2X09VVCwgUEg2X0lOLCBQSDZfSU5fUFUsCisJCVBINV9GTiwgUEg1X09VVCwgUEg1X0lOLCBQSDVfSU5fUFUsCisJCVBINF9GTiwgUEg0X09VVCwgUEg0X0lOLCBQSDRfSU5fUFUsCisJCVBIM19GTiwgUEgzX09VVCwgUEgzX0lOLCBQSDNfSU5fUFUsCisJCVBIMl9GTiwgUEgyX09VVCwgUEgyX0lOLCBQSDJfSU5fUFUsCisJCVBIMV9GTiwgUEgxX09VVCwgUEgxX0lOLCBQSDFfSU5fUFUsCisJCVBIMF9GTiwgUEgwX09VVCwgUEgwX0lOLCBQSDBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEpDUiIsIDB4ZmZjYzAwMTAsIDE2LCAyKSB7CisJCVBKN19GTiwgUEo3X09VVCwgUEo3X0lOLCBQSjdfSU5fUFUsCisJCVBKNl9GTiwgUEo2X09VVCwgUEo2X0lOLCBQSjZfSU5fUFUsCisJCVBKNV9GTiwgUEo1X09VVCwgUEo1X0lOLCBQSjVfSU5fUFUsCisJCVBKNF9GTiwgUEo0X09VVCwgUEo0X0lOLCBQSjRfSU5fUFUsCisJCVBKM19GTiwgUEozX09VVCwgUEozX0lOLCBQSjNfSU5fUFUsCisJCVBKMl9GTiwgUEoyX09VVCwgUEoyX0lOLCBQSjJfSU5fUFUsCisJCVBKMV9GTiwgUEoxX09VVCwgUEoxX0lOLCBQSjFfSU5fUFUsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAxTVNFTFIiLCAweGZmY2MwMDgwLCAxNiwgMSkgeworCQkwLCAwLAorCQlQMU1TRUwxNF8wLCBQMU1TRUwxNF8xLAorCQlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCQlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCQlQMU1TRUwxMV8wLCBQMU1TRUwxMV8xLAorCQlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCQlQMU1TRUw5XzAsICBQMU1TRUw5XzEsCisJCVAxTVNFTDhfMCwgIFAxTVNFTDhfMSwKKwkJUDFNU0VMN18wLCAgUDFNU0VMN18xLAorCQlQMU1TRUw2XzAsICBQMU1TRUw2XzEsCisJCVAxTVNFTDVfMCwgIFAxTVNFTDVfMSwKKwkJUDFNU0VMNF8wLCAgUDFNU0VMNF8xLAorCQlQMU1TRUwzXzAsICBQMU1TRUwzXzEsCisJCVAxTVNFTDJfMCwgIFAxTVNFTDJfMSwKKwkJUDFNU0VMMV8wLCAgUDFNU0VMMV8xLAorCQlQMU1TRUwwXzAsICBQMU1TRUwwXzEgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUDJNU0VMUiIsIDB4ZmZjYzAwODIsIDE2LCAxKSB7CisJCVAyTVNFTDE1XzAsIFAyTVNFTDE1XzEsCisJCVAyTVNFTDE0XzAsIFAyTVNFTDE0XzEsCisJCVAyTVNFTDEzXzAsIFAyTVNFTDEzXzEsCisJCVAyTVNFTDEyXzAsIFAyTVNFTDEyXzEsCisJCVAyTVNFTDExXzAsIFAyTVNFTDExXzEsCisJCVAyTVNFTDEwXzAsIFAyTVNFTDEwXzEsCisJCVAyTVNFTDlfMCwgIFAyTVNFTDlfMSwKKwkJUDJNU0VMOF8wLCAgUDJNU0VMOF8xLAorCQlQMk1TRUw3XzAsICBQMk1TRUw3XzEsCisJCVAyTVNFTDZfMCwgIFAyTVNFTDZfMSwKKwkJUDJNU0VMNV8wLCAgUDJNU0VMNV8xLAorCQlQMk1TRUw0XzAsICBQMk1TRUw0XzEsCisJCVAyTVNFTDNfMCwgIFAyTVNFTDNfMSwKKwkJUDJNU0VMMl8wLCAgUDJNU0VMMl8xLAorCQlQMk1TRUwxXzAsICBQMk1TRUwxXzEsCisJCVAyTVNFTDBfMCwgIFAyTVNFTDBfMSB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhmZmNjMDAyMCwgOCkgeworCQlQQTdfREFUQSwgUEE2X0RBVEEsIFBBNV9EQVRBLCBQQTRfREFUQSwKKwkJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBCRFIiLCAweGZmY2MwMDIyLCA4KSB7CisJCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCQlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUiIsIDB4ZmZjYzAwMjQsIDgpIHsKKwkJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJCVBDM19EQVRBLCBQQzJfREFUQSwgUEMxX0RBVEEsIFBDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhmZmNjMDAyNiwgOCkgeworCQlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwkJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGZmY2MwMDI4LCA4KSB7CisJCVBFN19EQVRBLCBQRTZfREFUQSwKKwkJMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUiIsIDB4ZmZjYzAwMmEsIDgpIHsKKwkJUEY3X0RBVEEsIFBGNl9EQVRBLCBQRjVfREFUQSwgUEY0X0RBVEEsCisJCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQR0RSIiwgMHhmZmNjMDAyYywgOCkgeworCQlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLCAwLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSERSIiwgMHhmZmNjMDAyZSwgOCkgeworCQlQSDdfREFUQSwgUEg2X0RBVEEsIFBINV9EQVRBLCBQSDRfREFUQSwKKwkJUEgzX0RBVEEsIFBIMl9EQVRBLCBQSDFfREFUQSwgUEgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBKRFIiLCAweGZmY2MwMDMwLCA4KSB7CisJCVBKN19EQVRBLCBQSjZfREFUQSwgUEo1X0RBVEEsIFBKNF9EQVRBLAorCQlQSjNfREFUQSwgUEoyX0RBVEEsIFBKMV9EQVRBLCAwIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3Nzg2X3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzc4Nl9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9GU0UsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDc3ODZfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKaW5kZXggNGZmNGRjNi4uYzE1NDkzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpYzBfcmVzb3VyY2VzW10gPSB7CkBAIC0xNDAsNiArMTQxLDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGpwdV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMTc1LDYgKzIwOCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzQzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZpaWMwX2RldmljZSwKIAkmaWljMV9kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCmluZGV4IDgzOWFlOTcuLjkzZWNmOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpaWNfcmVzb3VyY2VzW10gPSB7CkBAIC0xNDcsNiArMTQ4LDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZldTFfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTE2Nyw2ICsyMDAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM2Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmaWljX2RldmljZSwKIAkmc2NpX2RldmljZSwKIAkmdXNiX2hvc3RfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCA1MTQ2YWZjLi4wZTVkMjA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKQEAgLTE3Niw2ICsxNzcsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoanB1X3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0yMDksNiArMjQyLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnVzYmZfZGV2aWNlLAogCSZpaWNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCA4NDk3NzBkLi41MzM4ZGFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKQEAgLTEwMCw2ICsxMDEsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmV1MV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKQEAgLTIyMSw2ICsyNTQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyM19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKaW5kZXggM2M1YjYyOS4uYmRmMGY2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAogICogIENvcHlyaWdodCAoQykgMjAwNyAgWW9zaGloaXJvIFNoaW1vZGEKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE5vYnVoaXJvIEl3YW1hdHN1CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yMiwxOCArMjIsOCBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCi0JCS5zdGFydAk9IDIwLAorCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLworCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNTAsMTcgKzQwLDE3IEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTA4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDEwNCwgMTA1LCAxMDcsIDEwNiB9LAorCQkuaXJxcwkJPSB7IDEwNCwgMTA0LCAxMDQsIDEwNCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0xNDgsOTMgKzEzOCw2NSBAQAogCUlSTF9ISExMLCBJUkxfSEhMSCwgSVJMX0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksIExDREMsCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwKLQlJSUMwLCBJSUMxLAotCUNNVCwKLQlHRUlOVDAsIEdFSU5UMSwgR0VJTlQyLAotCUhBQywKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTVElGMCwgU1RJRjEsCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCVNJT0YwLCBTSU9GMSwgU0lPRjIsCi0JVVNCSCwgVVNCRkkwLCBVU0JGSTEsCi0JVFBVLCBQQ0MsCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCwKKwlSVEMsIFdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKKwlIVURJLCBMQ0RDLCBETUFDLCBTQ0lGMCwgSUlDMCwgSUlDMSwgQ01ULCBHRVRIRVIsIEhBQywKKwlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELCBQQ0lDNSwKKwlTVElGMCwgU1RJRjEsIFNDSUYxLCBTSU9GMCwgU0lPRjEsIFNJT0YyLAorCVVTQkgsIFVTQkYsIFRQVSwgUENDLCBNTUNJRiwgU0lNLAogCVRNVTMsIFRNVTQsIFRNVTUsIEFEQywgU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCi0JR1BJT19DSDAsIEdQSU9fQ0gxLCBHUElPX0NIMiwgR1BJT19DSDMsCisJU0NJRjIsIEdQSU8sCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCiAKLQlUTVUwMTIsIFRNVTM0NSwgUlRDLCBETUFDLCBTQ0lGMCwgR0VUSEVSLCBQQ0lDNSwKLQlTQ0lGMSwgVVNCRiwgTU1DSUYsIFNJTSwgU0NJRjIsIEdQSU8sCisJVE1VMDEyLCBUTVUzNDUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwgSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwKIAlJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLAogCUlOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksIElOVENfVkVDVChIVURJLCAweDYwMCksCiAJSU5UQ19WRUNUKExDREMsIDB4NjIwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDY0MCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NmEwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2YzApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg3YTApLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2EwKSwKIAlJTlRDX1ZFQ1QoSUlDMCwgMHg4QTApLCBJTlRDX1ZFQ1QoSUlDMSwgMHg4QzApLAotCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEdFSU5UMCwgMHg5MjApLAotCUlOVENfVkVDVChHRUlOVDEsIDB4OTQwKSwgSU5UQ19WRUNUKEdFSU5UMiwgMHg5NjApLAorCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEdFVEhFUiwgMHg5MjApLAorCUlOVENfVkVDVChHRVRIRVIsIDB4OTQwKSwgSU5UQ19WRUNUKEdFVEhFUiwgMHg5NjApLAogCUlOVENfVkVDVChIQUMsIDB4OTgwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAogCUlOVENfVkVDVChTVElGMCwgMHhiNDApLCBJTlRDX1ZFQ1QoU1RJRjEsIDB4YjYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweGI4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4YmEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweGJjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4YmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGJjMCksIElOVENfVkVDVChTQ0lGMSwgMHhiZTApLAogCUlOVENfVkVDVChTSU9GMCwgMHhjMDApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4YzIwKSwKLQlJTlRDX1ZFQ1QoVVNCSCwgMHhjNjApLCBJTlRDX1ZFQ1QoVVNCRkkwLCAweGM4MCksCi0JSU5UQ19WRUNUKFVTQkZJMSwgMHhjYTApLAorCUlOVENfVkVDVChVU0JILCAweGM2MCksIElOVENfVkVDVChVU0JGLCAweGM4MCksCisJSU5UQ19WRUNUKFVTQkYsIDB4Y2EwKSwKIAlJTlRDX1ZFQ1QoVFBVLCAweGNjMCksIElOVENfVkVDVChQQ0MsIDB4Y2UwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCi0JSU5UQ19WRUNUKFNJTV9FUkksIDB4ZDgwKSwgSU5UQ19WRUNUKFNJTV9SWEksIDB4ZGEwKSwKLQlJTlRDX1ZFQ1QoU0lNX1RYSSwgMHhkYzApLCBJTlRDX1ZFQ1QoU0lNX1RFTkQsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAorCUlOVENfVkVDVChTSU0sIDB4ZDgwKSwgSU5UQ19WRUNUKFNJTSwgMHhkYTApLAorCUlOVENfVkVDVChTSU0sIDB4ZGMwKSwgSU5UQ19WRUNUKFNJTSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwgSU5UQ19WRUNUKEFEQywgMHhlNjApLAogCUlOVENfVkVDVChTU0kwLCAweGU4MCksIElOVENfVkVDVChTU0kxLCAweGVhMCksCiAJSU5UQ19WRUNUKFNTSTIsIDB4ZWMwKSwgSU5UQ19WRUNUKFNTSTMsIDB4ZWUwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfRVJJLCAweGYwMCksIElOVENfVkVDVChTQ0lGMl9SWEksIDB4ZjIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfQlJJLCAweGY0MCksIElOVENfVkVDVChTQ0lGMl9UWEksIDB4ZjYwKSwKLQlJTlRDX1ZFQ1QoR1BJT19DSDAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9fQ0gxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9fQ0gyLCAweGZjMCksIElOVENfVkVDVChHUElPX0NIMywgMHhmZTApLAorCUlOVENfVkVDVChTQ0lGMiwgMHhmMDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjQwKSwgSU5UQ19WRUNUKFNDSUYyLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoR0VUSEVSLCBHRUlOVDAsIEdFSU5UMSwgR0VJTlQyKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChVU0JGLCBVU0JGSTAsIFVTQkZJMSksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCi0JSU5UQ19HUk9VUChTSU0sIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5EKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT19DSDAsIEdQSU9fQ0gxLCBHUElPX0NIMiwgR1BJT19DSDMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggZmI4MjAwYy4uNmY3MjI3YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTIwLDE3ICsyMCw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC00OCwxMiArMzgsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDc2LCA3NywgNzksIDc4IH0sCisJCS5pcnFzCQk9IHsgNzYsIDc2LCA3NiwgNzYgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtOTAsODIgKzgwLDU1IEBACiAJSVJMX0hITEwsIElSTF9ISExILCBJUkxfSEhITCwKIAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LAotCUNNVCwgSEFDLAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTSU9GLCBIU1BJLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JRE1BQzFfRE1JTlQ4LCBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsCi0JVE1VMywgVE1VNCwgVE1VNSwKLQlTU0ksCi0JRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELCBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSwKLQlHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMsCisJUlRDLCBXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgRE1BQzAsIFNDSUYwLCBETUFDMSwgQ01ULCBIQUMsCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU0NJRjEsIFNJT0YsIEhTUEksIE1NQ0lGLCBUTVUzLCBUTVU0LCBUTVU1LCBTU0ksIEZMQ1RMLAlHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JUlRDLCBUTVUwMTIsIERNQUMwLCBTQ0lGMCwgRE1BQzQ1LCBETUFDMSwKLQlQQ0lDNSwgU0NJRjEsIE1NQ0lGLCBUTVUzNDUsIEZMQ1RMLCBHUElPLAorCVRNVTAxMiwJVE1VMzQ1LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLAogCUlOVENfVkVDVChIVURJLCAweDYwMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDc4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ2LCAweDdjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDcsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY4MCksIElOVENfVkVDVChETUFDMCwgMHg2YTApLAorCUlOVENfVkVDVChETUFDMCwgMHg2YzApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDc4MCksIElOVENfVkVDVChETUFDMCwgMHg3YTApLAorCUlOVENfVkVDVChETUFDMSwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4N2UwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChIQUMsIDB4OTgwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweGI4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4YmEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweGJjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4YmUwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YmMwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJlMCksCiAJSU5UQ19WRUNUKFNJT0YsIDB4YzAwKSwgSU5UQ19WRUNUKEhTUEksIDB4YzgwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UOCwgMHhkODApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ5LCAweGRhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UMTAsIDB4ZGMwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UMTEsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAorCUlOVENfVkVDVChETUFDMSwgMHhkODApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGMwKSwgSU5UQ19WRUNUKERNQUMxLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLAogCUlOVENfVkVDVChTU0ksIDB4ZTgwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxTVEUsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMRU5ELCAweGYyMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUlExLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9JMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT0kxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9JMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT0kzLCAweGZlMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGYwMCksIElOVENfVkVDVChGTENUTCwgMHhmMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwKLQkJICAgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCiAJSU5UQ19HUk9VUChUTVUzNDUsIFRNVTMsIFRNVTQsIFRNVTUpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwKLQkJICAgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDMwYmFhNjMuLmQ4MDgwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0yMCwxOCArMjAsMTMgQEAKIAkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQ0LCA0NSwgNDcsIDQ2IH0sCi0JfSwKLQotCS8qCi0JICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcwotCSAqLwotCXsKKwkJLmlycXMJCT0geyA0NCwgNDQsIDQ0LCA0NCB9LAorCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKQEAgLTkxLDMzICs4NiwxOSBAQAogCUlSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVdEVCwKLQlUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwgRE1BQzFfRE1JTlQ5LAotCURNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsIERNQUMxX0RNQUUsCi0JSFNQSSwKKwlXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgRE1BQzAsIFNDSUYwLCBTQ0lGMSwgRE1BQzEsIEhTUEksCiAJU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU0lPRiwKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCURVLAotCUdEVEFfR0FDTEksIEdEVEFfR0FNQ0ksIEdEVEFfR0FFUkksCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU0lPRiwgTU1DSUYsIERVLCBHRFRBLAogCVRNVTMsIFRNVTQsIFRNVTUsCiAJU1NJMCwgU1NJMSwKIAlIQUMwLCBIQUMxLAotCUZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEsCi0JR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzLAorCUZMQ1RMLCBHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JVE1VMDEyLCBETUFDMCwgU0NJRjAsIFNDSUYxLCBETUFDMSwKLQlQQ0lDNSwgTU1DSUYsIEdEVEEsIFRNVTM0NSwgRkxDVEwsIEdQSU8KKwlUTVUwMTIsCVRNVTM0NQogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMjUsNTcgKzEwNiw0NSBAQAogCUlOVENfVkVDVChUTVUwLCAweDU4MCksIElOVENfVkVDVChUTVUxLCAweDVhMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2ODApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NmEwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg2YzApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZlMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHg3ODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweDdhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHg3YzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweDdlMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UNiwgMHg4ODApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ3LCAweDhhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UOCwgMHg4YzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ5LCAweDhlMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UMTAsIDB4OTAwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UMTEsIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1BRSwgMHg5NDApLAorCUlOVENfVkVDVChETUFDMCwgMHg2MjApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NjQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY4MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDZhMCksIElOVENfVkVDVChETUFDMCwgMHg2YzApLAorCUlOVENfVkVDVChETUFDMCwgMHg2ZTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDc4MCksIElOVENfVkVDVChTQ0lGMSwgMHg3YTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3YzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODgwKSwgSU5UQ19WRUNUKERNQUMxLCAweDhhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDhjMCksIElOVENfVkVDVChETUFDMSwgMHg4ZTApLAorCUlOVENfVkVDVChETUFDMSwgMHg5MDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OTQwKSwKIAlJTlRDX1ZFQ1QoSFNQSSwgMHg5NjApLAogCUlOVENfVkVDVChTQ0lGMiwgMHg5ODApLCBJTlRDX1ZFQ1QoU0NJRjMsIDB4OWEwKSwKIAlJTlRDX1ZFQ1QoU0NJRjQsIDB4OWMwKSwgSU5UQ19WRUNUKFNDSUY1LCAweDllMCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKIAlJTlRDX1ZFQ1QoU0lPRiwgMHhjMDApLAotCUlOVENfVkVDVChNTUNJRl9GU1RBVCwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUZfVFJBTiwgMHhkMjApLAotCUlOVENfVkVDVChNTUNJRl9FUlIsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGX0ZSRFksIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAogCUlOVENfVkVDVChEVSwgMHhkODApLAotCUlOVENfVkVDVChHRFRBX0dBQ0xJLCAweGRhMCksIElOVENfVkVDVChHRFRBX0dBTUNJLCAweGRjMCksCi0JSU5UQ19WRUNUKEdEVEFfR0FFUkksIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoR0RUQSwgMHhkYTApLCBJTlRDX1ZFQ1QoR0RUQSwgMHhkYzApLAorCUlOVENfVkVDVChHRFRBLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLAogCUlOVENfVkVDVChTU0kwLCAweGU4MCksIElOVENfVkVDVChTU0kxLCAweGVhMCksCiAJSU5UQ19WRUNUKEhBQzAsIDB4ZWMwKSwgSU5UQ19WRUNUKEhBQzEsIDB4ZWUwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxTVEUsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMRU5ELCAweGYyMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUlExLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9JMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT0kxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9JMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT0kzLCAweGZlMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGYwMCksIElOVENfVkVDVChGTENUTCwgMHhmMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFRNVTAxMiwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsCi0JCSAgIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSwgRE1BQzFfRE1BRSksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKE1NQ0lGLCBNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZKSwKLQlJTlRDX0dST1VQKEdEVEEsIEdEVEFfR0FDTEksIEdEVEFfR0FNQ0ksIEdEVEFfR0FFUkkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsCi0JCSAgIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQ3ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKQEAgLTAsMCArMSw0OTAgQEAKKy8qCisgKiBTSDc3ODYgU2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogQmFzZWQgb24gU0g3Nzg1IFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCX0sCisJLyoKKwkgKiBUaGUgcmVzdCBvZiB0aGVzZSBhbGwgaGF2ZSBtdWx0aXBsZXhlZCBJUlFzCisJICovCisJeworCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlYzAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUwLCA1MCwgNTAsIDUwIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZDAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUxLCA1MSwgNTEsIDUxIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZTAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZjAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUzLCA1MywgNTMsIDUzIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9vaGNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmU3MDQwMCwKKwkJLmVuZAk9IDB4ZmZlNzA0ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSA3NywKKwkJLmVuZAk9IDc3LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCB1c2Jfb2hjaV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2Jfb2hjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX29oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJnVzYl9vaGNpX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9vaGNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdXNiX29oY2lfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKKwkmdXNiX29oY2lfZGV2aWNlLAorfTsKKworCisvKgorICogUGxlYXNlIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3VyIHBsYXRmb3JtIGJvYXJkCisgKiB1c2UgZXh0ZXJuYWwgY2xvY2sgZm9yIFVTQgorICogKi8KKyNkZWZpbmUgVVNCQ1RMMAkJMHhmZmU3MDg1OAorI2RlZmluZSBDTE9DS19NT0RFX01BU0sgMHhmZmZmZmY3ZgorI2RlZmluZSBFWFRfQ0xPQ0tfTU9ERSAgMHgwMDAwMDA4MAordm9pZCBfX2luaXQgc2g3Nzg2X3VzYl91c2VfZXhjbG9jayh2b2lkKQoreworCXUzMiB2YWwgPSBfX3Jhd19yZWFkbChVU0JDVEwwKSAmIENMT0NLX01PREVfTUFTSzsKKwlfX3Jhd193cml0ZWwodmFsIHwgRVhUX0NMT0NLX01PREUsIFVTQkNUTDApOworfQorCisjZGVmaW5lIFVTQklOSVRSRUcxCTB4ZmZlNzAwOTQKKyNkZWZpbmUgVVNCSU5JVFJFRzIJMHhmZmU3MDA5YworI2RlZmluZSBVU0JJTklUVkFMMQkweDAwZmYwMDQwCisjZGVmaW5lIFVTQklOSVRWQUwyCTB4MDAwMDAwMDEKKworI2RlZmluZSBVU0JQQ1RMMQkweGZmZTcwODA0CisjZGVmaW5lIFVTQlNUCQkweGZmZTcwODA4CisjZGVmaW5lIFBIWV9FTkIJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUExMX0VOQgkJMHgwMDAwMDAwMgorI2RlZmluZSBQSFlfUlNUCQkweDAwMDAwMDA0CisjZGVmaW5lIEFDVF9QTExfU1RBVFVTCTB4YzAwMDAwMDAKK3N0YXRpYyB2b2lkIF9faW5pdCBzaDc3ODZfdXNiX3NldHVwKHZvaWQpCit7CisJaW50IGkgPSAxMDAwMDAwOworCisJLyoKKwkgKiBVU0IgaW5pdGlhbCBzZXR0aW5ncworCSAqCisJICogVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5CisJICogZm9yIHVzaW5nIHRoZSBVU0IgbW9kdWxlcy4KKwkgKgorCSAqIHNlZSAiVVNCIEluaXRhbCBTZXR0aW5ncyIgZm9yIGRldGFpbAorCSAqLworCV9fcmF3X3dyaXRlbChVU0JJTklUVkFMMSwgVVNCSU5JVFJFRzEpOworCV9fcmF3X3dyaXRlbChVU0JJTklUVkFMMiwgVVNCSU5JVFJFRzIpOworCisJLyoKKwkgKiBTZXQgdGhlIFBIWSBhbmQgUExMIGVuYWJsZSBiaXQKKwkgKi8KKwlfX3Jhd193cml0ZWwoUEhZX0VOQiB8IFBMTF9FTkIsIFVTQlBDVEwxKTsKKwl3aGlsZSAoaS0tICYmCisJICAgICAgICgoX19yYXdfcmVhZGwoVVNCU1QpICYgQUNUX1BMTF9TVEFUVVMpICE9IEFDVF9QTExfU1RBVFVTKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoaSkgeworCQkvKiBTZXQgdGhlIFBIWSBSU1QgYml0ICovCisJCV9fcmF3X3dyaXRlbChQSFlfRU5CIHwgUExMX0VOQiB8IFBIWV9SU1QsIFVTQlBDVEwxKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2g3Nzg2IHVzYiBzZXR1cCBkb25lXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4Nl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJc2g3Nzg2X3VzYl9zZXR1cCgpOworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3ODZfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDc3ODZfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKHNoNzc4Nl9kZXZpY2VzX3NldHVwKTsKKworZW51bSB7CisJVU5VU0VEID0gMCwKKworCS8qIGludGVycnVwdCBzb3VyY2VzICovCisKKwlJUkwwX0xMTEwsIElSTDBfTExMSCwgSVJMMF9MTEhMLCBJUkwwX0xMSEgsCisJSVJMMF9MSExMLCBJUkwwX0xITEgsIElSTDBfTEhITCwgSVJMMF9MSEhILAorCUlSTDBfSExMTCwgSVJMMF9ITExILCBJUkwwX0hMSEwsIElSTDBfSExISCwKKwlJUkwwX0hITEwsIElSTDBfSEhMSCwgSVJMMF9ISEhMLAorCisJSVJMNF9MTExMLCBJUkw0X0xMTEgsIElSTDRfTExITCwgSVJMNF9MTEhILAorCUlSTDRfTEhMTCwgSVJMNF9MSExILCBJUkw0X0xISEwsIElSTDRfTEhISCwKKwlJUkw0X0hMTEwsIElSTDRfSExMSCwgSVJMNF9ITEhMLCBJUkw0X0hMSEgsCisJSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwKKworCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCisJV0RULAorCVRNVTBfMCwgVE1VMF8xLCBUTVUwXzIsIFRNVTBfMywKKwlUTVUxXzAsIFRNVTFfMSwgVE1VMV8yLAorCURNQUMwXzAsIERNQUMwXzEsIERNQUMwXzIsIERNQUMwXzMsIERNQUMwXzQsIERNQUMwXzUsIERNQUMwXzYsCisJSFVESTEsIEhVREkwLAorCURNQUMxXzAsIERNQUMxXzEsIERNQUMxXzIsIERNQUMxXzMsCisJSFBCXzAsIEhQQl8xLCBIUEJfMiwKKwlTQ0lGMF8wLCBTQ0lGMF8xLCBTQ0lGMF8yLCBTQ0lGMF8zLAorCVNDSUYxLAorCVRNVTIsIFRNVTMsCisJU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCisJRXRoXzAsIEV0aF8xLAorCVBDSWVDMF8wLCBQQ0llQzBfMSwgUENJZUMwXzIsCisJUENJZUMxXzAsIFBDSWVDMV8xLCBQQ0llQzFfMiwKKwlVU0IsCisJSTJDMCwgSTJDMSwKKwlEVSwKKwlTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAorCVBDSWVDMl8wLCBQQ0llQzJfMSwgUENJZUMyXzIsCisJSEFDMCwgSEFDMSwKKwlGTENUTCwKKwlIU1BJLAorCUdQSU8wLCBHUElPMSwKKwlUaGVybWFsLAorCUlOVEMwLCBJTlRDMSwgSU5UQzIsIElOVEMzLCBJTlRDNCwgSU5UQzUsIElOVEM2LCBJTlRDNywKKworCS8qIGludGVycnVwdCBncm91cHMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChXRFQsIDB4M2UwKSwKKwlJTlRDX1ZFQ1QoVE1VMF8wLCAweDQwMCksIElOVENfVkVDVChUTVUwXzEsIDB4NDIwKSwKKwlJTlRDX1ZFQ1QoVE1VMF8yLCAweDQ0MCksIElOVENfVkVDVChUTVUwXzMsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoVE1VMV8wLCAweDQ4MCksIElOVENfVkVDVChUTVUxXzEsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoVE1VMV8yLCAweDRjMCksCisJSU5UQ19WRUNUKERNQUMwXzAsIDB4NTAwKSwgSU5UQ19WRUNUKERNQUMwXzEsIDB4NTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfMiwgMHg1NDApLCBJTlRDX1ZFQ1QoRE1BQzBfMywgMHg1NjApLAorCUlOVENfVkVDVChETUFDMF80LCAweDU4MCksIElOVENfVkVDVChETUFDMF81LCAweDVhMCksCisJSU5UQ19WRUNUKERNQUMwXzYsIDB4NWMwKSwKKwlJTlRDX1ZFQ1QoSFVESTEsIDB4NWUwKSwgSU5UQ19WRUNUKEhVREkwLCAweDYwMCksCisJSU5UQ19WRUNUKERNQUMxXzAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMxXzEsIDB4NjQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFfMiwgMHg2NjApLCBJTlRDX1ZFQ1QoRE1BQzFfMywgMHg2ODApLAorCUlOVENfVkVDVChIUEJfMCwgMHg2YTApLCBJTlRDX1ZFQ1QoSFBCXzEsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoSFBCXzIsIDB4NmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjBfMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfMSwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGMF8yLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF8zLCAweDc2MCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDc4MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4N2EwKSwgSU5UQ19WRUNUKFRNVTMsIDB4N2MwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ODQwKSwgSU5UQ19WRUNUKFNDSUYzLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUY0LCAweDg4MCksIElOVENfVkVDVChTQ0lGNSwgMHg4YTApLAorCUlOVENfVkVDVChFdGhfMCwgMHg4YzApLCBJTlRDX1ZFQ1QoRXRoXzEsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoUENJZUMwXzAsIDB4YWUwKSwgSU5UQ19WRUNUKFBDSWVDMF8xLCAweGIwMCksCisJSU5UQ19WRUNUKFBDSWVDMF8yLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSWVDMV8wLCAweGI0MCksIElOVENfVkVDVChQQ0llQzFfMSwgMHhiNjApLAorCUlOVENfVkVDVChQQ0llQzFfMiwgMHhiODApLAorCUlOVENfVkVDVChVU0IsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoSTJDMCwgMHhjYzApLCBJTlRDX1ZFQ1QoSTJDMSwgMHhjZTApLAorCUlOVENfVkVDVChEVSwgMHhkMDApLAorCUlOVENfVkVDVChTU0kwLCAweGQyMCksIElOVENfVkVDVChTU0kxLCAweGQ0MCksCisJSU5UQ19WRUNUKFNTSTIsIDB4ZDYwKSwgSU5UQ19WRUNUKFNTSTMsIDB4ZDgwKSwKKwlJTlRDX1ZFQ1QoUENJZUMyXzAsIDB4ZGEwKSwgSU5UQ19WRUNUKFBDSWVDMl8xLCAweGRjMCksCisJSU5UQ19WRUNUKFBDSWVDMl8yLCAweGRlMCksCisJSU5UQ19WRUNUKEhBQzAsIDB4ZTAwKSwgSU5UQ19WRUNUKEhBQzEsIDB4ZTIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZTQwKSwKKwlJTlRDX1ZFQ1QoSFNQSSwgMHhlODApLAorCUlOVENfVkVDVChHUElPMCwgMHhlYTApLCBJTlRDX1ZFQ1QoR1BJTzEsIDB4ZWMwKSwKKwlJTlRDX1ZFQ1QoVGhlcm1hbCwgMHhlZTApLAorfTsKKworLyogRklYTUU6IE1haW4gQ1BVIHN1cHBvcnQgb25seSBub3cgKi8KKyNpZiAxIC8qIE1haW4gQ1BVICovCisjZGVmaW5lIENuSU5UTVNLMAkweGZlNDEwMDMwCisjZGVmaW5lIENuSU5UTVNLMQkweGZlNDEwMDQwCisjZGVmaW5lIENuSU5UTVNLQ0xSMAkweGZlNDEwMDUwCisjZGVmaW5lIENuSU5UTVNLQ0xSMQkweGZlNDEwMDYwCisjZGVmaW5lIENuSU5UMk1TS1IwCTB4ZmU0MTBhMjAKKyNkZWZpbmUgQ25JTlQyTVNLUjEJMHhmZTQxMGEyNAorI2RlZmluZSBDbklOVDJNU0tSMgkweGZlNDEwYTI4CisjZGVmaW5lIENuSU5UMk1TS1IzCTB4ZmU0MTBhMmMKKyNkZWZpbmUgQ25JTlQyTVNLQ1IwCTB4ZmU0MTBhMzAKKyNkZWZpbmUgQ25JTlQyTVNLQ1IxCTB4ZmU0MTBhMzQKKyNkZWZpbmUgQ25JTlQyTVNLQ1IyCTB4ZmU0MTBhMzgKKyNkZWZpbmUgQ25JTlQyTVNLQ1IzCTB4ZmU0MTBhM2MKKyNlbHNlIC8qIFN1YiBDUFUgKi8KKyNkZWZpbmUgQ25JTlRNU0swCTB4ZmU0MTAwMzQKKyNkZWZpbmUgQ25JTlRNU0sxCTB4ZmU0MTAwNDQKKyNkZWZpbmUgQ25JTlRNU0tDTFIwCTB4ZmU0MTAwNTQKKyNkZWZpbmUgQ25JTlRNU0tDTFIxCTB4ZmU0MTAwNjQKKyNkZWZpbmUgQ25JTlQyTVNLUjAJMHhmZTQxMGIyMAorI2RlZmluZSBDbklOVDJNU0tSMQkweGZlNDEwYjI0CisjZGVmaW5lIENuSU5UMk1TS1IyCTB4ZmU0MTBiMjgKKyNkZWZpbmUgQ25JTlQyTVNLUjMJMHhmZTQxMGIyYworI2RlZmluZSBDbklOVDJNU0tDUjAJMHhmZTQxMGIzMAorI2RlZmluZSBDbklOVDJNU0tDUjEJMHhmZTQxMGIzNAorI2RlZmluZSBDbklOVDJNU0tDUjIJMHhmZTQxMGIzOAorI2RlZmluZSBDbklOVDJNU0tDUjMJMHhmZTQxMGIzYworI2VuZGlmCisKKyNkZWZpbmUgSU5UTVNLMgkJMHhmZTQxMDA2OAorI2RlZmluZSBJTlRNU0tDTFIyCTB4ZmU0MTAwNmMKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IENuSU5UTVNLMCwgQ25JTlRNU0tDTFIwLCAzMiwKKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCisJeyBJTlRNU0syLCBJTlRNU0tDTFIyLCAzMiwKKwkgIHsgSVJMMF9MTExMLCBJUkwwX0xMTEgsIElSTDBfTExITCwgSVJMMF9MTEhILAorCSAgICBJUkwwX0xITEwsIElSTDBfTEhMSCwgSVJMMF9MSEhMLCBJUkwwX0xISEgsCisJICAgIElSTDBfSExMTCwgSVJMMF9ITExILCBJUkwwX0hMSEwsIElSTDBfSExISCwKKwkgICAgSVJMMF9ISExMLCBJUkwwX0hITEgsIElSTDBfSEhITCwgMCwKKwkgICAgSVJMNF9MTExMLCBJUkw0X0xMTEgsIElSTDRfTExITCwgSVJMNF9MTEhILAorCSAgICBJUkw0X0xITEwsIElSTDRfTEhMSCwgSVJMNF9MSEhMLCBJUkw0X0xISEgsCisJICAgIElSTDRfSExMTCwgSVJMNF9ITExILCBJUkw0X0hMSEwsIElSTDRfSExISCwKKwkgICAgSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwgMCwgfSB9LAorCXsgQ25JTlQyTVNLUjAsIENuSU5UMk1TS0NSMCAsIDMyLAorCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBXRFQgfSB9LAorCXsgQ25JTlQyTVNLUjEsIENuSU5UMk1TS0NSMSwgMzIsCisJICB7IFRNVTBfMCwgVE1VMF8xLCBUTVUwXzIsIFRNVTBfMywgVE1VMV8wLCBUTVUxXzEsIFRNVTFfMiwgMCwKKwkgICAgRE1BQzBfMCwgRE1BQzBfMSwgRE1BQzBfMiwgRE1BQzBfMywgRE1BQzBfNCwgRE1BQzBfNSwgRE1BQzBfNiwKKwkgICAgSFVESTEsIEhVREkwLAorCSAgICBETUFDMV8wLCBETUFDMV8xLCBETUFDMV8yLCBETUFDMV8zLAorCSAgICBIUEJfMCwgSFBCXzEsIEhQQl8yLAorCSAgICBTQ0lGMF8wLCBTQ0lGMF8xLCBTQ0lGMF8yLCBTQ0lGMF8zLAorCSAgICBTQ0lGMSwKKwkgICAgVE1VMiwgVE1VMywgMCwgfSB9LAorCXsgQ25JTlQyTVNLUjIsIENuSU5UMk1TS0NSMiwgMzIsCisJICB7IDAsIDAsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAorCSAgICBFdGhfMCwgRXRoXzEsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIFBDSWVDMF8wLCBQQ0llQzBfMSwgUENJZUMwXzIsCisJICAgIFBDSWVDMV8wLCBQQ0llQzFfMSwgUENJZUMxXzIsCisJICAgIFVTQiwgMCwgMCB9IH0sCisJeyBDbklOVDJNU0tSMywgQ25JTlQyTVNLQ1IzLCAzMiwKKwkgIHsgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgSTJDMCwgSTJDMSwKKwkgICAgRFUsIFNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCisJICAgIFBDSWVDMl8wLCBQQ0llQzJfMSwgUENJZUMyXzIsCisJICAgIEhBQzAsIEhBQzEsCisJICAgIEZMQ1RMLCAwLAorCSAgICBIU1BJLCBHUElPMCwgR1BJTzEsIFRoZXJtYWwsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMTAsIDAsIDMyLCA0LCAvKiBJTlRQUkkgKi8gICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsCisJCQkJCQkgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCisJeyAweGZlNDEwODAwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTAgKi8geyAwLCAwLCAwLCBXRFQgfSB9LAorCXsgMHhmZTQxMDgwNCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxICovIHsgVE1VMF8wLCBUTVUwXzEsCisJCQkJCQkgVE1VMF8yLCBUTVUwXzMgfSB9LAorCXsgMHhmZTQxMDgwOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyICovIHsgVE1VMV8wLCBUTVUxXzEsCisJCQkJCQkgVE1VMV8yLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MGMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMyAqLyB7IERNQUMwXzAsIERNQUMwXzEsCisJCQkJCQkgRE1BQzBfMiwgRE1BQzBfMyB9IH0sCisJeyAweGZlNDEwODEwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTQgKi8geyBETUFDMF80LCBETUFDMF81LAorCQkJCQkJIERNQUMwXzYsIEhVREkxIH0gfSwKKwl7IDB4ZmU0MTA4MTQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNSAqLyB7IEhVREkwLCBETUFDMV8wLAorCQkJCQkJIERNQUMxXzEsIERNQUMxXzIgfSB9LAorCXsgMHhmZTQxMDgxOCwgMCwgMzIsIDgsIC8qIElOVDJQUkk2ICovIHsgRE1BQzFfMywgSFBCXzAsCisJCQkJCQkgSFBCXzEsIEhQQl8yIH0gfSwKKwl7IDB4ZmU0MTA4MWMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNyAqLyB7IFNDSUYwXzAsIFNDSUYwXzEsCisJCQkJCQkgU0NJRjBfMiwgU0NJRjBfMyB9IH0sCisJeyAweGZlNDEwODIwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTggKi8geyBTQ0lGMSwgVE1VMiwgVE1VMywgMCB9IH0sCisJeyAweGZlNDEwODI0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTkgKi8geyAwLCAwLCBTQ0lGMiwgU0NJRjMgfSB9LAorCXsgMHhmZTQxMDgyOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxMCAqLyB7IFNDSUY0LCBTQ0lGNSwKKwkJCQkJCSAgRXRoXzAsIEV0aF8xIH0gfSwKKwl7IDB4ZmU0MTA4MmMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTEgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTIgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTMgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTQgKi8geyAwLCAwLCAwLCBQQ0llQzBfMCB9IH0sCisJeyAweGZlNDEwODNjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTE1ICovIHsgUENJZUMwXzEsIFBDSWVDMF8yLAorCQkJCQkJICBQQ0llQzFfMCwgUENJZUMxXzEgfSB9LAorCXsgMHhmZTQxMDg0MCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNiAqLyB7IFBDSWVDMV8yLCBVU0IsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg0NCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNyAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg0OCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxOCAqLyB7IDAsIDAsIEkyQzAsIEkyQzEgfSB9LAorCXsgMHhmZTQxMDg0YywgMCwgMzIsIDgsIC8qIElOVDJQUkkxOSAqLyB7IERVLCBTU0kwLCBTU0kxLCBTU0kyIH0gfSwKKwl7IDB4ZmU0MTA4NTAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjAgKi8geyBTU0kzLCBQQ0llQzJfMCwKKwkJCQkJCSAgUENJZUMyXzEsIFBDSWVDMl8yIH0gfSwKKwl7IDB4ZmU0MTA4NTQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjEgKi8geyBIQUMwLCBIQUMxLCBGTENUTCwgMCB9IH0sCisJeyAweGZlNDEwODU4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIyICovIHsgSFNQSSwgR1BJTzAsCisJCQkJCQkgIEdQSU8xLCBUaGVybWFsIH0gfSwKKwl7IDB4ZmU0MTA4NWMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjMgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NjAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjQgKi8geyAwLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3ODYiLCB2ZWN0b3JzLCBOVUxMLAorCQkJIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CisKKy8qIFN1cHBvcnQgZm9yIGV4dGVybmFsIGludGVycnVwdCBwaW5zIGluIElSUSBtb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJxMDEyM1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTAsIDB4MjAwKSwgSU5UQ19WRUNUKElSUTEsIDB4MjQwKSwKKwlJTlRDX1ZFQ1QoSVJRMiwgMHgyODApLCBJTlRDX1ZFQ1QoSVJRMywgMHgyYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcnE0NTY3W10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJRNCwgMHgzMDApLCBJTlRDX1ZFQ1QoSVJRNSwgMHgzNDApLAorCUlOVENfVkVDVChJUlE2LCAweDM4MCksIElOVENfVkVDVChJUlE3LCAweDNjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfc2Vuc2VfcmVnIHNlbnNlX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDFjLCAzMiwgMiwgLyogSUNSMSAqLyAgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKKwkJCQkJICAgIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGFja19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAyNCwgMCwgMzIsIC8qIElOVFJFUSAqLworCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjX2lycTAxMjMsICJzaDc3ODYtaXJxMDEyMyIsCisJCQkgICAgIHZlY3RvcnNfaXJxMDEyMywgTlVMTCwgbWFza19yZWdpc3RlcnMsCisJCQkgICAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpOworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzY19pcnE0NTY3LCAic2g3Nzg2LWlycTQ1NjciLAorCQkJICAgICB2ZWN0b3JzX2lycTQ1NjcsIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKTsKKworLyogRXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMgaW4gSVJMIG1vZGUgKi8KKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcmwwMTIzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJMMF9MTExMLCAweDIwMCksIElOVENfVkVDVChJUkwwX0xMTEgsIDB4MjIwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MTEhMLCAweDI0MCksIElOVENfVkVDVChJUkwwX0xMSEgsIDB4MjYwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MSExMLCAweDI4MCksIElOVENfVkVDVChJUkwwX0xITEgsIDB4MmEwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MSEhMLCAweDJjMCksIElOVENfVkVDVChJUkwwX0xISEgsIDB4MmUwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ITExMLCAweDMwMCksIElOVENfVkVDVChJUkwwX0hMTEgsIDB4MzIwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ITEhMLCAweDM0MCksIElOVENfVkVDVChJUkwwX0hMSEgsIDB4MzYwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ISExMLCAweDM4MCksIElOVENfVkVDVChJUkwwX0hITEgsIDB4M2EwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ISEhMLCAweDNjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lybDQ1NjdbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUkw0X0xMTEwsIDB4OTAwKSwgSU5UQ19WRUNUKElSTDRfTExMSCwgMHg5MjApLAorCUlOVENfVkVDVChJUkw0X0xMSEwsIDB4OTQwKSwgSU5UQ19WRUNUKElSTDRfTExISCwgMHg5NjApLAorCUlOVENfVkVDVChJUkw0X0xITEwsIDB4OTgwKSwgSU5UQ19WRUNUKElSTDRfTEhMSCwgMHg5YTApLAorCUlOVENfVkVDVChJUkw0X0xISEwsIDB4OWMwKSwgSU5UQ19WRUNUKElSTDRfTEhISCwgMHg5ZTApLAorCUlOVENfVkVDVChJUkw0X0hMTEwsIDB4YTAwKSwgSU5UQ19WRUNUKElSTDRfSExMSCwgMHhhMjApLAorCUlOVENfVkVDVChJUkw0X0hMSEwsIDB4YTQwKSwgSU5UQ19WRUNUKElSTDRfSExISCwgMHhhNjApLAorCUlOVENfVkVDVChJUkw0X0hITEwsIDB4YTgwKSwgSU5UQ19WRUNUKElSTDRfSEhMSCwgMHhhYTApLAorCUlOVENfVkVDVChJUkw0X0hISEwsIDB4YWMwKSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfaXJsMDEyMywgInNoNzc4Ni1pcmwwMTIzIiwgdmVjdG9yc19pcmwwMTIzLAorCQkJIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLCBOVUxMLCBOVUxMKTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19pcmw0NTY3LCAic2g3Nzg2LWlybDQ1NjciLCB2ZWN0b3JzX2lybDQ1NjcsCisJCQkgTlVMTCwgbWFza19yZWdpc3RlcnMsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIElOVENfSUNSMAkweGZlNDEwMDAwCisjZGVmaW5lIElOVENfSU5UTVNLMAlDbklOVE1TSzAKKyNkZWZpbmUgSU5UQ19JTlRNU0sxCUNuSU5UTVNLMQorI2RlZmluZSBJTlRDX0lOVE1TSzIJSU5UTVNLMgorI2RlZmluZSBJTlRDX0lOVE1TS0NMUjEJQ25JTlRNU0tDTFIxCisjZGVmaW5lIElOVENfSU5UTVNLQ0xSMglJTlRNU0tDTFIyCisKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCit7CisJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KKwljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKworCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCisJY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisKKwkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLworCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisKKwlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgorCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLworCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTQ1NjcpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSUTMyMTA6CisJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICovCisJCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKKwkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLworCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKKwkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLworCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgorCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KKwkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKKwkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCisJCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmZhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIFNILU1vYmlsZSBiYWNrZW5kcy4KKyMKKworIyBQb3dlciBNYW5hZ2VtZW50ICYgU2xlZXAgbW9kZQorb2JqLSQoQ09ORklHX1BNKQkrPSBwbS5vIHNsZWVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNjdhZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcG0tc2hfbW9iaWxlLmMKKyAqCisgKiBQb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgY29kZSBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBTbGVlcCBtb2RlcyBhdmFpbGFibGUgb24gU3VwZXJIIE1vYmlsZToKKyAqCisgKiBTbGVlcCBtb2RlIGlzIGp1c3QgcGxhaW4gInNsZWVwIiBpbnN0cnVjdGlvbgorICogU2xlZXAgU2VsZi1SZWZyZXNoIG1vZGUgaXMgYWJvdmUgcGx1cyBSQU0gcHV0IGluIFNlbGYtUmVmcmVzaAorICogU3RhbmRieSBTZWxmLVJlZnJlc2ggbW9kZSBpcyBhYm92ZSBwbHVzIHN0b3BwZWQgY2xvY2tzCisgKi8KKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBub3QgdGhlcmUgeWV0OgorICoKKyAqIFItc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkLCBidXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisgKiBVLXN0YW5kYnkgbW9kZSBpcyBsb3cgcHJpb3JpdHkgc2luY2UgaXQgbmVlZHMgYm9vdGxvYWRlciBoYWNrcworICoKKyAqIEFsbCBtb2RlcyBzaG91bGQgYmUgdGllZCBpbiB3aXRoIGNwdWlkbGUuIEJ1dCBiZWZvcmUgdGhhdCBjYW4KKyAqIGhhcHBlbiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgZW5hYmxlZCBoYXJkd2FyZSBibG9ja3Mgc28gd2UKKyAqIGNhbiBhdm9pZCBlbnRlcmluZyBzbGVlcCBtb2RlcyB0aGF0IHN0b3AgY2xvY2tzIHRvIGhhcmR3YXJlCisgKiBibG9ja3MgdGhhdCBhcmUgaW4gdXNlIGV2ZW4gdGhvdWdoIHRoZSBjcHUgY29yZSBpcyBpZGxlLgorICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHNoX21vYmlsZV9zdGFuZGJ5W107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHNoX21vYmlsZV9zdGFuZGJ5X3NpemU7CisKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jYWxsX3N0YW5kYnkodW5zaWduZWQgbG9uZyBtb2RlKQoreworCWV4dGVybiB2b2lkICp2YnJfYmFzZTsKKwl2b2lkICpvbmNoaXBfbWVtID0gKHZvaWQgKikweGU1MjAwMDAwOyAvKiBJTFJBTSAqLworCXZvaWQgKCpzdGFuZGJ5X29uY2hpcF9tZW0pKHVuc2lnbmVkIGxvbmcpID0gb25jaGlwX21lbTsKKworCS8qIE5vdGU6IFdha2UgdXAgZnJvbSBzbGVlcCBtYXkgZ2VuZXJhdGUgZXhjZXB0aW9ucyEKKwkgKiBTZXR1cCBWQlIgdG8gcG9pbnQgdG8gb24tY2hpcCByYW0gaWYgc2VsZi1yZWZyZXNoIGlzCisJICogZ29pbmcgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKG9uY2hpcF9tZW0pIDogIm1lbW9yeSIpOworCisJLyogQ29weSB0aGUgYXNzZW1ibHkgc25pcHBldCB0byB0aGUgb3RoZXJ3aXNlIHVudW5zZWQgSUxSQU0gKi8KKwltZW1jcHkob25jaGlwX21lbSwgc2hfbW9iaWxlX3N0YW5kYnksIHNoX21vYmlsZV9zdGFuZGJ5X3NpemUpOworCXdtYigpOworCWN0cmxfYmFycmllcigpOworCisJLyogTGV0IGFzc2VtYmx5IHNuaXBwZXQgaW4gb24tY2hpcCBtZW1vcnkgaGFuZGxlIHRoZSByZXN0ICovCisJc3RhbmRieV9vbmNoaXBfbWVtKG1vZGUpOworCisJLyogUHV0IFZCUiBiYWNrIGluIFN5c3RlbSBSQU0gYWdhaW4gKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbnQgc2hfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc2V0X2JsX2JpdCgpOworCXNoX21vYmlsZV9jYWxsX3N0YW5kYnkoU1VTUF9NT0RFX1NUQU5EQllfU0YpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJY2xlYXJfYmxfYml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgc2hfcG1fb3BzID0geworCS5lbnRlciAgICAgICAgICA9IHNoX3BtX2VudGVyLAorCS52YWxpZCAgICAgICAgICA9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9wbV9pbml0KHZvaWQpCit7CisJc3VzcGVuZF9zZXRfb3BzKCZzaF9wbV9vcHMpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHNoX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg4OGVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbGVlcC1zaF9tb2JpbGUuUworICoKKyAqIFNsZWVwIG1vZGUgYW5kIFN0YW5kYnkgbW9kZXMgc3VwcG9ydCBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKworLyogbWFuYWdlIHNlbGYtcmVmcmVzaCBhbmQgZW50ZXIgc3RhbmRieSBtb2RlLgorICogdGhpcyBjb2RlIHdpbGwgYmUgY29waWVkIHRvIG9uLWNoaXAgbWVtb3J5IGFuZCBleGVjdXRlZCBmcm9tIHRoZXJlLgorICovCisKKwkuYmFsaWduIAk0MDk2LDAsNDA5NgorRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnkpCisJbW92CXI0LCByMAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfc2V0X3NmCisKKwkvKiBTRFJBTTogZGlzYWJsZSBwb3dlciBkb3duIGFuZCBwdXQgaW4gc2VsZi1yZWZyZXNoIG1vZGUgKi8KKwltb3YubAkxZiwgcjQKKwltb3YubAkyZiwgcjEKKwltb3YubAlAcjQsIHIyCisJb3IJcjEsIHIyCisJbW92LmwgICAzZiwgcjMKKwlhbmQJcjMsIHIyCisJbW92LmwJcjIsIEByNAorCitza2lwX3NldF9zZjoKKwl0c3QJI1NVU1BfU0hfU0xFRVAsIHIwCisJYnQJdGVzdF9zdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAic2xlZXAgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDAwLCByMQorCit0ZXN0X3N0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1NUQU5EQlksIHIwCisJYnQJdGVzdF9yc3RhbmRieQorCisJLyogc2V0IG1vZGUgdG8gInNvZnR3YXJlIHN0YW5kYnkgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDgwLCByMQorCit0ZXN0X3JzdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwlidAl0ZXN0X3VzdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAici1zdGFuZGJ5IG1vZGUiICovCisJYnJhCWRvX3NsZWVwCisJIG1vdgkjMHgyMCwgcjEKKwordGVzdF91c3RhbmRieToKKwl0c3QJI1NVU1BfU0hfVVNUQU5EQlksIHIwCisJYnQJZG9uZV9zbGVlcAorCisJLyogc2V0IG1vZGUgdG8gInUtc3RhbmRieSBtb2RlIiAqLworCW1vdgkjMHgxMCwgcjEKKworCS8qIGZhbGwtdGhyb3VnaCAqLworCitkb19zbGVlcDoKKwkvKiBzZXR1cCBhbmQgZW50ZXIgc2VsZWN0ZWQgc3RhbmRieSBtb2RlICovCisJbW92LmwJNWYsIHI0CisJbW92LmwJcjEsIEByNAorCXNsZWVwCisKK2RvbmVfc2xlZXA6CisJLyogcmVzZXQgc3RhbmRieSBtb2RlIHRvIHNsZWVwIG1vZGUgKi8KKwltb3YubAk1ZiwgcjQKKwltb3YJIzB4MDAsIHIxCisJbW92LmwJcjEsIEByNAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfcmVzdG9yZV9zZgorCisJLyogU0RSQU06IHNldCBhdXRvLXJlZnJlc2ggbW9kZSAqLworCW1vdi5sCTFmLCByNAorCW1vdi5sCUByNCwgcjIKKwltb3YubCAgIDRmLCByMworCWFuZAlyMywgcjIKKwltb3YubAlyMiwgQHI0CisJbW92LmwJNmYsIHI0CisJbW92LmwJN2YsIHIxCisJbW92LmwJOGYsIHIyCisJbW92LmwJQHI0LCByMworCW1vdgkjLTEsIHI0CisJYWRkCXI0LCByMworCW9yCXIyLCByMworCW1vdi5sCXIzLCBAcjEKK3NraXBfcmVzdG9yZV9zZjoKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKKzE6CS5sb25nCTB4ZmU0MDAwMDggLyogU0RDUjAgKi8KKzI6CS5sb25nCTB4MDAwMDA0MDAKKzM6CS5sb25nCTB4ZmZmZjdmZmYKKzQ6CS5sb25nCTB4ZmZmZmZiZmYKKzU6CS5sb25nCTB4YTQxNTAwMjAgLyogU1RCQ1IgKi8KKzY6CS5sb25nICAgMHhmZTQwMDAxYyAvKiBSVENPUiAqLworNzoJLmxvbmcgICAweGZlNDAwMDE4IC8qIFJUQ05UICovCis4OgkubG9uZyAgIDB4YTU1YTAwMDAKKworLyogaW50ZXJydXB0IHZlY3RvciBAIDB4NjAwICovCisJLmJhbGlnbiAJMHg0MDAsMCwweDQwMAorCS5sb25nCTB4ZGVhZGJlZWYKKwkuYmFsaWduIAkweDIwMCwwLDB4MjAwCisJLyogc2g3NzIyIHdpbGwgZW5kIHVwIGhlcmUgaW4gc2xlZXAgbW9kZSAqLworCXJ0ZQorCSBub3AKK3NoX21vYmlsZV9zdGFuZGJ5X2VuZDoKKworRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZSkKKwkubG9uZyBzaF9tb2JpbGVfc3RhbmRieV9lbmQgLSBzaF9tb2JpbGVfc3RhbmRieQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCmluZGV4IGQzNzE2NTMuLmQyMmU1YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2dwaW8uYworKysgYi9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKQEAgLTE5LDIyICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi1zdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87Ci0KLXN0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQotewotCWlmICghcmVnaXN0ZXJlZF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKLX0KLQogc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKIHsKIAlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQpAQCAtNDYsOSArMzAsNjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCByZWFkX3dyaXRlX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAotCQkJICB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZG9fd3JpdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3JlYWRfcmF3X3JlZyh1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgpCit7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCXJldHVybiBjdHJsX2luYihyZWcpOworCWNhc2UgMTY6CisJCXJldHVybiBjdHJsX2ludyhyZWcpOworCWNhc2UgMzI6CisJCXJldHVybiBjdHJsX2lubChyZWcpOworCX0KKworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX3Jhd19yZWcodW5zaWduZWQgbG9uZyByZWcsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQljdHJsX291dGIoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCWNhc2UgMTY6CisJCWN0cmxfb3V0dyhkYXRhLCByZWcpOworCQlyZXR1cm47CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwl9CisKKwlCVUcoKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9iaXQoc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGluX3BvcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBvczsKKworCXBvcyA9IGRyLT5yZWdfd2lkdGggLSAoaW5fcG9zICsgMSk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX2JpdCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkXG4iLAorCQlkci0+cmVnLCAhIXZhbHVlLCBwb3MsIGRyLT5yZWdfd2lkdGgpOworI2VuZGlmCisKKwlpZiAodmFsdWUpCisJCXNldF9iaXQocG9zLCAmZHItPnJlZ19zaGFkb3cpOworCWVsc2UKKwkJY2xlYXJfYml0KHBvcywgJmRyLT5yZWdfc2hhZG93KTsKKworCWdwaW9fd3JpdGVfcmF3X3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLCBkci0+cmVnX3NoYWRvdyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZWFkX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhLCBtYXNrLCBwb3M7CiAKQEAgLTU3LDUyICs5Niw1MyBAQAogCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CiAKICNpZmRlZiBERUJVRwotCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJcHJfaW5mbygicmVhZF9yZWc6IGFkZHIgPSAlbHgsIHBvcyA9ICVsZCwgIgogCQkicl93aWR0aCA9ICVsZCwgZl93aWR0aCA9ICVsZFxuIiwKLQkJZG9fd3JpdGUgPyAid3JpdGUiIDogInJlYWQiLCByZWcsIHZhbHVlLCBwb3MsCi0JCXJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworCQlyZWcsIHBvcywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CiAjZW5kaWYKIAotCXN3aXRjaCAocmVnX3dpZHRoKSB7Ci0JY2FzZSA4OgotCQlkYXRhID0gY3RybF9pbmIocmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZGF0YSA9IGN0cmxfaW53KHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWRhdGEgPSBjdHJsX2lubChyZWcpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoIWRvX3dyaXRlKQotCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7Ci0KLQlkYXRhICY9IH4obWFzayA8PCBwb3MpOwotCWRhdGEgfD0gdmFsdWUgPDwgcG9zOwotCi0Jc3dpdGNoIChyZWdfd2lkdGgpIHsKLQljYXNlIDg6Ci0JCWN0cmxfb3V0YihkYXRhLCByZWcpOwotCQlicmVhazsKLQljYXNlIDE2OgotCQljdHJsX291dHcoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJY3RybF9vdXRsKGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKKwlkYXRhID0gZ3Bpb19yZWFkX3Jhd19yZWcocmVnLCByZWdfd2lkdGgpOworCXJldHVybiAoZGF0YSA+PiBwb3MpICYgbWFzazsKIH0KIAotc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKLQkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAorCQkJICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHBvczsKKworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX3JlZyBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlyZWcsIHZhbHVlLCBwb3MsIHJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworI2VuZGlmCisKKwltYXNrID0gfihtYXNrIDw8IHBvcyk7CisJdmFsdWUgPSB2YWx1ZSA8PCBwb3M7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJY3RybF9vdXRiKChjdHJsX2luYihyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY3RybF9vdXR3KChjdHJsX2ludyhyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKChjdHJsX2lubChyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNldHVwX2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvcCA9ICZncGlvYy0+Z3Bpb3NbZ3Bpb107CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWc7CiAJaW50IGssIG47CiAKLQlpZiAoIWVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKKwlpZiAoIWVudW1faW5fcmFuZ2UoZ3Bpb3AtPmVudW1faWQsICZncGlvYy0+ZGF0YSkpCiAJCXJldHVybiAtMTsKIAogCWsgPSAwOwpAQCAtMTEzLDE5ICsxNTMsNTggQEAKIAkJCWJyZWFrOwogCiAJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKLQkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgewotCQkJCSpkcnAgPSBkYXRhX3JlZzsKLQkJCQkqYml0cCA9IG47CisJCQlpZiAoZGF0YV9yZWctPmVudW1faWRzW25dID09IGdwaW9wLT5lbnVtX2lkKSB7CisJCQkJZ3Bpb3AtPmZsYWdzICY9IH5QSU5NVVhfRkxBR19EUkVHOworCQkJCWdwaW9wLT5mbGFncyB8PSAoayA8PCBQSU5NVVhfRkxBR19EUkVHX1NISUZUKTsKKwkJCQlncGlvcC0+ZmxhZ3MgJj0gflBJTk1VWF9GTEFHX0RCSVQ7CisJCQkJZ3Bpb3AtPmZsYWdzIHw9IChuIDw8IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQpOwogCQkJCXJldHVybiAwOwotCiAJCQl9CiAJCX0KIAkJaysrOwogCX0KIAorCUJVRygpOworCiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9kYXRhX3JlZ3Moc3RydWN0IHBpbm11eF9pbmZvICpncGlvYykKK3sKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkcnA7CisJaW50IGs7CisKKwlmb3IgKGsgPSBncGlvYy0+Zmlyc3RfZ3BpbzsgayA8PSBncGlvYy0+bGFzdF9ncGlvOyBrKyspCisJCXNldHVwX2RhdGFfcmVnKGdwaW9jLCBrKTsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWRycCA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZHJwLT5yZWdfd2lkdGgpCisJCQlicmVhazsKKworCQlkcnAtPnJlZ19zaGFkb3cgPSBncGlvX3JlYWRfcmF3X3JlZyhkcnAtPnJlZywgZHJwLT5yZWdfd2lkdGgpOworCQlrKys7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqKmRycCwgaW50ICpiaXRwKQoreworCXN0cnVjdCBwaW5tdXhfZ3BpbyAqZ3Bpb3AgPSAmZ3Bpb2MtPmdwaW9zW2dwaW9dOworCWludCBrLCBuOworCisJaWYgKCFlbnVtX2luX3JhbmdlKGdwaW9wLT5lbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gKGdwaW9wLT5mbGFncyAmIFBJTk1VWF9GTEFHX0RSRUcpID4+IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQ7CisJbiA9IChncGlvcC0+ZmxhZ3MgJiBQSU5NVVhfRkxBR19EQklUKSA+PiBQSU5NVVhfRkxBR19EQklUX1NISUZUOworCSpkcnAgPSBncGlvYy0+ZGF0YV9yZWdzICsgazsKKwkqYml0cCA9IG47CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgcGlubXV4X2VudW1fdCBlbnVtX2lkLAogCQkJICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKipjcnAsIGludCAqaW5kZXhwLAogCQkJICB1bnNpZ25lZCBsb25nICoqY250cCkKQEAgLTE4Nyw5ICsyNjYsOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCi0JCQkgICAgc3RydWN0IHBpbm11eF9jZmdfcmVnICpjcnAsCi0JCQkgICAgaW50IGluZGV4KQorc3RhdGljIHZvaWQgd3JpdGVfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICAgaW50IGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgbmNvbWIsIHBvcywgdmFsdWU7CiAKQEAgLTE5Nyw4ICsyNzYsNyBAQAogCXBvcyA9IGluZGV4IC8gbmNvbWI7CiAJdmFsdWUgPSBpbmRleCAlIG5jb21iOwogCi0JcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKLQkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworCWdwaW9fd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwgY3JwLT5maWVsZF93aWR0aCwgcG9zLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLApAQCAtMjExLDggKzI4OSw4IEBACiAJcG9zID0gaW5kZXggLyBuY29tYjsKIAl2YWx1ZSA9IGluZGV4ICUgbmNvbWI7CiAKLQlpZiAocmVhZF93cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAotCQkJICAgY3JwLT5maWVsZF93aWR0aCwgcG9zLCAwLCAwKSA9PSB2YWx1ZSkKKwlpZiAoZ3Bpb19yZWFkX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCisJCQkgIGNycC0+ZmllbGRfd2lkdGgsIHBvcykgPT0gdmFsdWUpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC0xOwpAQCAtMjIwLDggKzI5OCw4IEBACiAKIGVudW0geyBHUElPX0NGR19EUllSVU4sIEdQSU9fQ0ZHX1JFUSwgR1BJT19DRkdfRlJFRSB9OwogCi1pbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCi0JCSAgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKK3N0YXRpYyBpbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKIHsKIAlzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNyID0gTlVMTDsKIAlwaW5tdXhfZW51bV90IGVudW1faWQ7CkBAIC0yODcsOCArMzY1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgR1BJT19DRkdfUkVROgotCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKLQkJCQlnb3RvIG91dF9lcnI7CisJCQl3cml0ZV9jb25maWdfcmVnKGdwaW9jLCBjciwgaW5kZXgpOwogCQkJKmNudHAgPSAqY250cCArIDE7CiAJCQlicmVhazsKIApAQCAtMzA1LDkgKzM4MiwxNCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CiAKLWludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKQorc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqY2hpcF90b19waW5tdXgoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBpbm11eF9pbmZvLCBjaGlwKTsKK30KKworc3RhdGljIGludCBzaF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCByZXQsIHBpbm11eF90eXBlOwpAQCAtMzE5LDI5ICs0MDEsMzAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCWlmICgoZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKKwlpZiAoKGdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJLyogc2V0dXAgcGluIGZ1bmN0aW9uIGhlcmUgaWYgbm8gZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggcGluICovCiAKLQlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHVtbXksICZpKSAhPSAwKQorCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIG9mZnNldCwgJmR1bW15LCAmaSkgIT0gMCkKIAkJcGlubXV4X3R5cGUgPSBQSU5NVVhfVFlQRV9GVU5DVElPTjsKIAllbHNlCiAJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfR1BJTzsKIAogCWlmIChwaW5tdXhfdHlwZSA9PSBQSU5NVVhfVFlQRV9GVU5DVElPTikgewotCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsCiAJCQkJICAgICAgIHBpbm11eF90eXBlLAogCQkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCiAJCQlnb3RvIGVycl91bmxvY2s7CiAKLQkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LAogCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKIAkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQkJQlVHKCk7CiAJfQogCi0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gcGlubXV4X3R5cGU7CiAKIAlyZXQgPSAwOwogIGVycl91bmxvY2s6CkBAIC0zNDksMTEgKzQzMiwxMCBAQAogIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19ncGlvX3JlcXVlc3QpOwogCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIHZvaWQgc2hfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwaW5tdXhfdHlwZTsKIApAQCAtMzYyLDIwICs0NDQsMjMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKLQlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOworCXBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gUElOTVVYX1RZUEVfTk9ORTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOwogCiBzdGF0aWMgaW50IHBpbm11eF9kaXJlY3Rpb24oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKIAkJCSAgICB1bnNpZ25lZCBncGlvLCBpbnQgbmV3X3Bpbm11eF90eXBlKQogewotCWludCByZXQsIHBpbm11eF90eXBlOworCWludCBwaW5tdXhfdHlwZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCXJldCA9IC1FSU5WQUw7CisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCiAJcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOwogCiAJc3dpdGNoIChwaW5tdXhfdHlwZSkgewpAQCAtNDAxLDEwMiArNDg2LDk5IEBACiAJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQlCVUcoKTsKIAotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IG5ld19waW5tdXhfdHlwZTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzIHw9IG5ld19waW5tdXhfdHlwZTsKIAogCXJldCA9IDA7CiAgZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIWdwaW9jKQotCQlnb3RvIGVycl9vdXQ7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9JTlBVVCk7CisJcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgb2Zmc2V0LCBQSU5NVVhfVFlQRV9JTlBVVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0gZXJyX291dDoKKwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKIAotc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAotCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKLQkJCQlpbnQgZG9fd3JpdGUpCitzdGF0aWMgdm9pZCBzaF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOwogCWludCBiaXQgPSAwOwogCi0JaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCWlmICghZ3Bpb2MgfHwgZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApCiAJCUJVRygpOwogCWVsc2UKLQkJdmFsdWUgPSByZWFkX3dyaXRlX3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLAotCQkJCSAgICAgICAxLCBiaXQsICEhdmFsdWUsIGRvX3dyaXRlKTsKLQotCXJldHVybiB2YWx1ZTsKKwkJZ3Bpb193cml0ZV9iaXQoZHIsIGJpdCwgdmFsdWUpOwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJaW50IHJldDsKIAotCWlmICghZ3Bpb2MpCi0JCWdvdG8gZXJyX291dDsKLQorCXNoX2dwaW9fc2V0X3ZhbHVlKGdwaW9jLCBvZmZzZXQsIHZhbHVlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIG9mZnNldCwgUElOTVVYX1RZUEVfT1VUUFVUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLSBlcnJfb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKIAotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB2YWx1ZSA9IDA7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOwogCi0JaWYgKCFncGlvYykKKwlpZiAoIWdwaW9jIHx8IGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKSB7CiAJCUJVRygpOwotCWVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCXZhbHVlID0gX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIDAsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHZhbHVlOworCXJldHVybiBncGlvX3JlYWRfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsIDEsIGJpdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZ2V0X3ZhbHVlKTsKIAotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWdwaW9jKQotCQlCVUcoKTsKLQllbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQl9CisJcmV0dXJuIHNoX2dwaW9fZ2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX3NldF92YWx1ZSk7CisKK3N0YXRpYyB2b2lkIHNoX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXNoX2dwaW9fc2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQsIHZhbHVlKTsKK30KIAogaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCkKIHsKLQlyZWdpc3RlcmVkX2dwaW8gPSBwaXA7Ci0JcHJfaW5mbygicGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAorCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSAmcGlwLT5jaGlwOworCisJcHJfaW5mbygic2ggcGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAogCQlwaXAtPm5hbWUsIHBpcC0+Zmlyc3RfZ3BpbywgcGlwLT5sYXN0X2dwaW8pOwogCi0JcmV0dXJuIDA7CisJc2V0dXBfZGF0YV9yZWdzKHBpcCk7CisKKwljaGlwLT5yZXF1ZXN0ID0gc2hfZ3Bpb19yZXF1ZXN0OworCWNoaXAtPmZyZWUgPSBzaF9ncGlvX2ZyZWU7CisJY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJY2hpcC0+Z2V0ID0gc2hfZ3Bpb19nZXQ7CisJY2hpcC0+ZGlyZWN0aW9uX291dHB1dCA9IHNoX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwljaGlwLT5zZXQgPSBzaF9ncGlvX3NldDsKKworCVdBUk5fT04ocGlwLT5maXJzdF9ncGlvICE9IDApOyAvKiBuZWVkcyB0ZXN0aW5nICovCisKKwljaGlwLT5sYWJlbCA9IHBpcC0+bmFtZTsKKwljaGlwLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNoaXAtPmJhc2UgPSBwaXAtPmZpcnN0X2dwaW87CisJY2hpcC0+bmdwaW8gPSAocGlwLT5sYXN0X2dwaW8gLSBwaXAtPmZpcnN0X2dwaW8pICsgMTsKKworCXJldHVybiBncGlvY2hpcF9hZGQoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDY0Yjc2OTAuLjNmMTM3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC01MSw3ICs1MSw3IEBACiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCX0KICNlbmRpZgogCi0JaXJxID0gaXJxX2RlbXV4KGV2dDJpcnEoaXJxKSk7CisJaXJxID0gaXJxX2RlbXV4KGludGNfZXZ0MmlycShpcnEpKTsKIAogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIAljdXJjdHggPSAodW5pb24gaXJxX2N0eCAqKWN1cnJlbnRfdGhyZWFkX2luZm8oKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA5NGRmNTZiLi43ZWEyNzA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xNCwyMSArMTQsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXR5cGVkZWYgTk9SRVRfVFlQRSB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSgKLQkJCQl1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCi0JCQkJdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCi0JCQkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAotCQkJCXVuc2lnbmVkIGxvbmcgdmJyX3JlZykgQVRUUklCX05PUkVUOwordHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKTsKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CiBleHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CitleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKIHZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQogewpAQCAtNDUsNiArNDYsMTIgQEAKICAqLwogaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKKwkvKiBvbGRlciB2ZXJzaW9ucyBvZiBrZXhlYy10b29scyBhcmUgcGFzc2luZworCSAqIHRoZSB6SW1hZ2UgZW50cnkgcG9pbnQgYXMgYSB2aXJ0dWFsIGFkZHJlc3MuCisJICovCisJaWYgKGltYWdlLT5zdGFydCAhPSBQSFlTQUREUihpbWFnZS0+c3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogdXBncmFkZSB5b3VyIGtleGVjLXRvb2xzICovCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzMsMTcgKzgwLDMzIEBACiAgKi8KIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKLQogCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0OwogCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgdmJyX3JlZzsKIAlyZWxvY2F0ZV9uZXdfa2VybmVsX3Qgcm5rOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisJdW5zaWduZWQgbG9uZyAqcHRyOworCWludCBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLQl2YnJfcmVnID0gKCh1bnNpZ25lZCBsb25nIClnZGJfdmJyX3ZlY3RvcikgLSAweDEwMDsKLSNlbHNlCi0JdmJyX3JlZyA9IDB4ODAwMDAwMDA7ICAvLyBkdW1teQorCS8qCisJICogTmlja2VkIGZyb20gdGhlIG1pcHMgdmVyc2lvbiBvZiBtYWNoaW5lX2tleGVjKCk6CisJICogVGhlIGdlbmVyaWMga2V4ZWMgY29kZSBidWlsZHMgYSBwYWdlIGxpc3Qgd2l0aCBwaHlzaWNhbAorCSAqIGFkZHJlc3Nlcy4gVXNlIHBoeXNfdG9fdmlydCgpIHRvIGNvbnZlcnQgdGhlbSB0byB2aXJ0dWFsLgorCSAqLworCWZvciAocHRyID0gJmltYWdlLT5oZWFkOyAoZW50cnkgPSAqcHRyKSAmJiAhKGVudHJ5ICYgSU5EX0RPTkUpOworCSAgICAgcHRyID0gKGVudHJ5ICYgSU5EX0lORElSRUNUSU9OKSA/CisJICAgICAgIHBoeXNfdG9fdmlydChlbnRyeSAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9ICh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoKnB0cik7CisJfQorCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAjZW5kaWYKKworCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKKwogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApAQCAtOTcsMTIgKzEyMCwzNyBAQAogCW1lbWNweSgodm9pZCAqKXJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfbmV3X2tlcm5lbCwKIAkJCQkJCXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CiAKLSAgICAgICAga2V4ZWNfaW5mbyhpbWFnZSk7CisJa2V4ZWNfaW5mbyhpbWFnZSk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDoKKwkJICAgICA6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKKwkJICAgICA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCiAJLyogbm93IGNhbGwgaXQgKi8KIAlybmsgPSAocmVsb2NhdGVfbmV3X2tlcm5lbF90KSByZWJvb3RfY29kZV9idWZmZXI7Ci0JKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLCBQMlNFR0FERFIoaW1hZ2UtPnN0YXJ0KSwgdmJyX3JlZyk7CisJKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoaW1hZ2UtPnN0YXJ0KSk7CisKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7CisKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CisKKwkvKiBDb252ZXJ0IHBhZ2UgbGlzdCBiYWNrIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcywgd2hhdCBhIG1lc3MuICovCisJZm9yIChwdHIgPSAmaW1hZ2UtPmhlYWQ7IChlbnRyeSA9ICpwdHIpICYmICEoZW50cnkgJiBJTkRfRE9ORSk7CisJICAgICBwdHIgPSAoKnB0ciAmIElORF9JTkRJUkVDVElPTikgPworCSAgICAgICBwaHlzX3RvX3ZpcnQoKnB0ciAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9IHZpcnRfdG9fcGh5cygqcHRyKTsKKwl9CisjZW5kaWYKKworCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBjNjZjYjMyLi5mY2M5OTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtNCw2ICs0LDggQEAKICAqCiAgKiBMQU5ESVNLL3NoNCBpcyBzdXBwb3J0ZWQuIE1heWJlLCBTSCBhcmNodGVjdHVyZSB3b3JrcyB3ZWxsLgogICoKKyAqIDIwMDktMDMtMTggTWFnbnVzIERhbW0gLSBBZGRlZCBLZXhlYyBKdW1wIHN1cHBvcnQKKyAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKICAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KQEAgLTE2LDIzICsxOCwxNDEgQEAKIAkvKiByNCA9IGluZGlyZWN0aW9uX3BhZ2UgICAqLwogCS8qIHI1ID0gcmVib290X2NvZGVfYnVmZmVyICovCiAJLyogcjYgPSBzdGFydF9hZGRyZXNzICAgICAgKi8KLQkvKiByNyA9IHZicl9yZWcgICAgICAgICAgICAqLwogCi0JbW92LmwJMTBmLHI4CSAgLyogUEFHRV9TSVpFICovCi0JbW92LmwJMTFmLHI5ICAgIC8qIFAyU0VHICovCisJbW92LmwJMTBmLCByMAkJLyogUEFHRV9TSVpFICovCisJYWRkCXI1LCByMAkJLyogc2V0dXAgbmV3IHN0YWNrIGF0IGVuZCBvZiBjb250cm9sIHBhZ2UgKi8KIAotCS8qICBzdGFjayBzZXR0aW5nICovCi0JYWRkCXI4LHI1Ci0JbW92CXI1LHIxNQorCS8qIHNhdmUgcjE1LT5yOCB0byBuZXcgc3RhY2sgKi8KKwltb3YubAlyMTUsIEAtcjAKKwltb3YJcjAsIHIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CiAKKwkvKiBzYXZlIG90aGVyIHJhbmRvbSByZWdpc3RlcnMgKi8KKwlzdHMubAltYWNsLCBALXIxNQorCXN0cy5sCW1hY2gsIEAtcjE1CisJc3RjLmwJZ2JyLCBALXIxNQorCXN0Yy5sCXNzciwgQC1yMTUKKwlzdGMubAlzciwgQC1yMTUKKwlzdHMubAlwciwgQC1yMTUKKwlzdGMubAlzcGMsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCXN0YwlzciwgcjgKKwlvcglyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJcjcsIEAtcjE1CisJbW92LmwJcjYsIEAtcjE1CisJbW92LmwJcjUsIEAtcjE1CisJbW92LmwJcjQsIEAtcjE1CisJbW92LmwJcjMsIEAtcjE1CisJbW92LmwJcjIsIEAtcjE1CisJbW92LmwJcjEsIEAtcjE1CisJbW92LmwJcjAsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwltb3YubAlyMCwgQC1yMTUKKworCW1vdi5sCXI0LCBALXIxNQkvKiBzYXZlIGluZGlyZWN0aW9uIHBhZ2UgYWdhaW4gKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmVmb3JlIGp1bXBpbmcgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdmEJMTFmLCByMAorCW1vdi5sCXIxNSwgQHIwCS8qIHNhdmUgcG9pbnRlciB0byBzdGFjayAqLworCisJanNyCUByNgkJLyogaGFuZCBvdmVyIGNvbnRyb2wgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdi5sCTExZiwgcjE1CS8qIGdldCBwb2ludGVyIHRvIHN0YWNrICovCisJbW92LmwJQHIxNSssIHI0CS8qIHJlc3RvcmUgcjQgdG8gZ2V0IGluZGlyZWN0aW9uIHBhZ2UgKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmFjayB0byBwcmV2aW91cyBzdGF0ZSAqLworCSBub3AKKworCS8qIG1ha2Ugc3VyZSBiYW5rMCBpcyBhY3RpdmUgYW5kIHJlc3RvcmUgcjAtPnI3ICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCB0byBiYW5rMSBhbmQgcmVzdG9yZSByMC0+cjcgKi8KKwltb3YubAkxMmYsIHI5CisJc3RjCXNyLCByOAorCW9yCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCBiYWNrIHRvIGJhbmswICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKworCS8qIHJlc3RvcmUgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyAqLworCWxkYy5sCUByMTUrLCBzcGMKKwlsZHMubAlAcjE1KywgcHIKKwlsZGMubAlAcjE1Kywgc3IKKwlsZGMubAlAcjE1Kywgc3NyCisJbGRjLmwJQHIxNSssIGdicgorCWxkcy5sCUByMTUrLCBtYWNoCisJbGRzLmwJQHIxNSssIG1hY2wKKworCS8qIHJlc3RvcmUgcjgtPnIxNSAqLworCW1vdi5sCUByMTUrLCByOAorCW1vdi5sCUByMTUrLCByOQorCW1vdi5sCUByMTUrLCByMTAKKwltb3YubAlAcjE1KywgcjExCisJbW92LmwJQHIxNSssIHIxMgorCW1vdi5sCUByMTUrLCByMTMKKwltb3YubAlAcjE1KywgcjE0CisJbW92LmwJQHIxNSssIHIxNQorCXJ0cworCSBub3AKKworc3dhcF9wYWdlczoKIAlicmEJMWYKLQltb3YJcjQscjAJICAvKiBjbWQgPSBpbmRpcmVjdGlvbl9wYWdlICovCisJIG1vdglyNCxyMAkgIC8qIGNtZCA9IGluZGlyZWN0aW9uX3BhZ2UgKi8KIDA6CiAJbW92LmwJQHI0KyxyMAkgIC8qIGNtZCA9ICppbmQrKyAqLwogCi0xOgkvKiBhZGRyID0gKGNtZCB8IFAyU0VHKSAmIDB4ZmZmZmZmZjAgKi8KKzE6CS8qIGFkZHIgPSBjbWQgJiAweGZmZmZmZmYwICovCiAJbW92CXIwLHIyCi0Jb3IJcjkscjIKIAltb3YJIy0xNixyMQogCWFuZAlyMSxyMgogCkBAIC00MCw1NyArMTYwLDcwIEBACiAJdHN0CSMxLHIwCiAJYnQJMmYKIAlicmEJMGIKLQltb3YJcjIscjUKKwkgbW92CXIyLHI1CiAKIDI6CS8qIGVsc2UgaWYoY21kICYgSU5EX0lORElSRUNUSU9OKSBpbmQgPSBhZGRyICAqLwogCXRzdAkjMixyMAogCWJ0CTNmCiAJYnJhCTBiCi0JbW92CXIyLHI0CisJIG1vdglyMixyNAogCi0zOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSBnb3RvIDYgICovCiszOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSByZXR1cm4gKi8KIAl0c3QJIzQscjAKIAlidAk0ZgotCWJyYQk2ZgotCW5vcAorCXJ0cworCSBub3AKIAogNDoJLyogZWxzZSBpZihjbWQgJiBJTkRfU09VUkNFKSBtZW1jcHkoZHN0LGFkZHIsUEFHRV9TSVpFKSAqLwogCXRzdAkjOCxyMAogCWJ0CTBiCiAKLQltb3YJcjgscjMKKwltb3YubAkxMGYscjMJICAvKiBQQUdFX1NJWkUgKi8KIAlzaGxyMglyMwogCXNobHIyCXIzCiA1OgogCWR0CXIzCi0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEJICAvKiAgMTZuKzQgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxICAgLyogIDE2bis4ICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMTIgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKKworCS8qIHJlZ3VsYXIga2V4ZWMganVzdCBvdmVyd3JpdGVzIHRoZSBkZXN0aW5hdGlvbiBwYWdlCisJICogd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZSBwYWdlLgorCSAqIGZvciB0aGUga2V4ZWMganVtcCBjYXNlIHdlIG5lZWQgdG8gc3dhcCB0aGUgY29udGVudHMKKwkgKiBvZiB0aGUgcGFnZXMuCisJICogdG8ga2VlcCBpdCBzaW1wbGUgc3dhcCB0aGUgY29udGVudHMgZm9yIGJvdGggY2FzZXMuCisJICovCisJbW92LmwJQCgwLCByMiksIHI4CisJbW92LmwJQCgwLCByNSksIHIxCisJbW92LmwJcjgsIEAoMCwgcjUpCisJbW92LmwJcjEsIEAoMCwgcjIpCisKKwltb3YubAlAKDQsIHIyKSwgcjgKKwltb3YubAlAKDQsIHI1KSwgcjEKKwltb3YubAlyOCwgQCg0LCByNSkKKwltb3YubAlyMSwgQCg0LCByMikKKworCW1vdi5sCUAoOCwgcjIpLCByOAorCW1vdi5sCUAoOCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDgsIHI1KQorCW1vdi5sCXIxLCBAKDgsIHIyKQorCisJbW92LmwJQCgxMiwgcjIpLCByOAorCW1vdi5sCUAoMTIsIHI1KSwgcjEKKwltb3YubAlyOCwgQCgxMiwgcjUpCisJbW92LmwJcjEsIEAoMTIsIHIyKQorCisJYWRkCSMxNixyNQorCWFkZAkjMTYscjIKIAliZgk1YgogCiAJYnJhCTBiCi0Jbm9wCi02OgotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JbGRjICAgcjcsIHZicgotI2VuZGlmCi0Jam1wIEByNgotCW5vcAorCSBub3AKIAogCS5hbGlnbiAyCiAxMDoKIAkubG9uZwlQQUdFX1NJWkUKIDExOgotCS5sb25nCVAyU0VHCisJLmxvbmcJMAorMTI6CisJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKIAogcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM3MGQyY2YuLjI0YzYwMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDMyLDYgKzQzMiw3IEBACiAJW0NQVV9TSDc3NjNdCT0gIlNINzc2MyIsCVtDUFVfU0g3NzcwXQk9ICJTSDc3NzAiLAogCVtDUFVfU0g3NzgwXQk9ICJTSDc3ODAiLAlbQ1BVX1NINzc4MV0JPSAiU0g3NzgxIiwKIAlbQ1BVX1NINzM0M10JPSAiU0g3MzQzIiwJW0NQVV9TSDc3ODVdCT0gIlNINzc4NSIsCisJW0NQVV9TSDc3ODZdCT0gIlNINzc4NiIsCiAJW0NQVV9TSDc3MjJdCT0gIlNINzcyMiIsCVtDUFVfU0hYM10JPSAiU0gtWDMiLAogCVtDUFVfU0g1XzEwMV0JPSAiU0g1LTEwMSIsCVtDUFVfU0g1XzEwM10JPSAiU0g1LTEwMyIsCiAJW0NQVV9NWEddCT0gIk1YLUciLAlbQ1BVX1NINzcyM10JPSAiU0g3NzIzIiwKQEAgLTQ0OCw3ICs0NDksNyBAQAogLyogU3ltYm9saWMgQ1BVIGZsYWdzLCBrZWVwIGluIHN5bmMgd2l0aCBhc20vY3B1LWZlYXR1cmVzLmggKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjcHVfZmxhZ3NbXSA9IHsKIAkibm9uZSIsICJmcHUiLCAicDJmbHVzaCIsICJtbXVhc3NvYyIsICJkc3AiLCAicGVyZmN0ciIsCi0JInB0ZWEiLCAibGxzYyIsICJsMiIsICJvcDMyIiwgTlVMTAorCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsICJwdGVhZXgiLCBOVUxMCiB9OwogCiBzdGF0aWMgdm9pZCBzaG93X2NwdWZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNoX2NwdWluZm8gKmMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYyBiL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjY0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogc3dzdXNwLmMgLSBTdXBlckggaGliZXJuYXRpb24gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKK3N0cnVjdCBzd3N1c3BfYXJjaF9yZWdzIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MDsKKworaW50IHBmbl9pc19ub3NhdmUodW5zaWduZWQgbG9uZyBwZm4pCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbl9wZm4gPSBfX3BhKCZfX25vc2F2ZV9iZWdpbikgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQQUdFX0FMSUdOKF9fcGEoJl9fbm9zYXZlX2VuZCkpID4+IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gKHBmbiA+PSBiZWdpbl9wZm4pICYmIChwZm4gPCBlbmRfcGZuKTsKK30KKwordm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworCWluaXRfZnB1KGN1cnJlbnQpOworfQorCit2b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDg0NTdmODMuLmMzNGUxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKQEAgLTQxLDE0ICs0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBOdWxsIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGZ1bmN0aW9ucyBmb3Igc3lzdGVtcyBsYWNraW5nIG9uZS4KLSAqLwotc3RhdGljIGN5Y2xlX3QgbnVsbF9ocHRfcmVhZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKikgPSBudWxsX3J0Y19nZXRfdGltZTsKIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IG51bGxfcnRjX3NldF90aW1lOwogCkBAIC0xMTIsNyArMTA0LDYgQEAKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKICNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfVElNRSAqLwogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKiBsYXN0IHRpbWUgdGhlIFJUQyBjbG9jayBnb3QgdXBkYXRlZCAqLwogc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlOwogCkBAIC0xNTYsNyArMTQ3LDYgQEAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgogfQotI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgdGltZXJfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0xODksNyArMTc5LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRpbWVyX2luaXRfc3lzZnModm9pZCkKIHsKLQlpbnQgcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7CisJaW50IHJldDsKKworCWlmICghc3lzX3RpbWVyKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjAwLDQyICsxOTUsMjEgQEAKIAogdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiAKLS8qCi0gKiBTaGFtZWxlc3NseSBiYXNlZCBvbiB0aGUgTUlQUyBhbmQgU3BhcmM2NCB3b3JrLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCBfX3JlYWRfbW9zdGx5OwotdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5ID0gMDsKLQotI2RlZmluZSBOU0VDX1BFUl9DWUNfU0hJRlQJMTAKLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKK3N0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKIAkubmFtZQkJPSAiU3VwZXJIIiwKLQkucmF0aW5nCQk9IDIwMCwKLQkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkucmVhZAkJPSBudWxsX2hwdF9yZWFkLAotCS5zaGlmdAkJPSAxNiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zaF9jbG9ja3NvdXJjZSh2b2lkKQotewotCWlmICghc2hfaHB0X2ZyZXF1ZW5jeSB8fCBjbG9ja3NvdXJjZV9zaC5yZWFkID09IG51bGxfaHB0X3JlYWQpCi0JCXJldHVybjsKLQotCWNsb2Nrc291cmNlX3NoLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNoX2hwdF9mcmVxdWVuY3ksCi0JCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKLQotCXRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChzaF9ocHRfZnJlcXVlbmN5LCBOU0VDX1BFUl9DWUNfU0hJRlQpOwotCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NoKTsKLX0KLQogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrcyA9IGNsb2Nrc291cmNlX3NoLnJlYWQoKTsKLQlyZXR1cm4gKHRpY2tzICogdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQpID4+IE5TRUNfUEVSX0NZQ19TSElGVDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzOworCisJLyogamlmZmllcyBiYXNlZCBzY2hlZF9jbG9jayBpZiBubyBjbG9ja3NvdXJjZSBpcyBpbnN0YWxsZWQgKi8KKwlpZiAoIWNsb2Nrc291cmNlX3NoLnJhdGluZykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqIChOU0VDX1BFUl9TRUMgLyBIWik7CisKKwljeWNsZXMgPSBjbG9ja3NvdXJjZV9zaC5yZWFkKCk7CisJcmV0dXJuIGN5YzJucygmY2xvY2tzb3VyY2Vfc2gsIGN5Y2xlcyk7CiB9CiAjZW5kaWYKIApAQCAtMjU5LDE3ICsyMzMsOCBAQAogCSAqIGluaXRpYWxpemVkIGZvciB1cy4KIAkgKi8KIAlzeXNfdGltZXIgPSBnZXRfc3lzX3RpbWVyKCk7CisJaWYgKHVubGlrZWx5KCFzeXNfdGltZXIpKQorCQlwYW5pYygiU3lzdGVtIHRpbWVyIG1pc3NpbmcuXG4iKTsKKwogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIGZvciBzeXN0ZW0gdGltZXJcbiIsIHN5c190aW1lci0+bmFtZSk7Ci0KLQotCWlmIChzeXNfdGltZXItPm9wcy0+cmVhZCkKLQkJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHN5c190aW1lci0+b3BzLT5yZWFkOwotCi0JaW5pdF9zaF9jbG9ja3NvdXJjZSgpOwotCi0JaWYgKHNoX2hwdF9mcmVxdWVuY3kpCi0JCXByaW50aygiVXNpbmcgJWx1LiUwM2x1IE1IeiBoaWdoIHByZWNpc2lvbiB0aW1lci5cbiIsCi0JCSAgICAgICAoKHNoX2hwdF9mcmVxdWVuY3kgKyA1MDApIC8gMTAwMCkgLyAxMDAwLAotCQkgICAgICAgKChzaF9ocHRfZnJlcXVlbmN5ICsgNTAwKSAvIDEwMDApICUgMTAwMCk7Ci0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCmluZGV4IGMzZDIzN2UuLjlhNzdhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwpAQCAtMzUsNyArMzUsOCBAQAogI2RlZmluZSBNVFUyX1RTUl8xCTB4ZmZmZTQzODUKICNkZWZpbmUgTVRVMl9UQ05UXzEJMHhmZmZlNDM4NgkvKiAxNi1iaXQgY291bnRlciAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMykKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4OAogI2Vsc2UKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4YQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCmluZGV4IDBkYjNmOTUuLjEwYjVhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKQEAgLTE0Niw3ICsxNDYsMTQgQEAKIAlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKIAlfdG11X3NldF9pcnEoVE1VMCx0bXUwX2Nsb2NrZXZlbnQubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKIAotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCXN3aXRjaCAodG11MF9jbG9ja2V2ZW50Lm1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIzNyw2ICsyNDQsNyBAQAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIAljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOwogI2VuZGlmCkBAIC0yNTQsNyArMjYyLDE0IEBACiAKIAlfdG11X3N0YXJ0KFRNVTEpOwogCi0Jc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOworCWNsb2Nrc291cmNlX3NoLnJhdGluZyA9IDIwMDsKKwljbG9ja3NvdXJjZV9zaC5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMik7CisJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHRtdV90aW1lcl9yZWFkOworCWNsb2Nrc291cmNlX3NoLnNoaWZ0ID0gMTA7CisJY2xvY2tzb3VyY2Vfc2gubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY2xrX2dldF9yYXRlKCZ0bXUxX2NsayksCisJCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9zaC5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zaCk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhmcmVxdWVuY3ksIE5TRUNfUEVSX1NFQywKIAkJCQkgICAgICB0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOwpAQCAtMjY0LDYgKzI3OSw3IEBACiAJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZ0bXUwX2Nsb2NrZXZlbnQpOwogCiAJdG11MF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCXRtdTBfY2xvY2tldmVudC5yYXRpbmcgPSAxMDA7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnRtdTBfY2xvY2tldmVudCk7CiAKQEAgLTI3NCw3ICsyOTAsNiBAQAogCS5pbml0CQk9IHRtdV90aW1lcl9pbml0LAogCS5zdGFydAkJPSB0bXVfdGltZXJfc3RhcnQsCiAJLnN0b3AJCT0gdG11X3RpbWVyX3N0b3AsCi0JLnJlYWQJCT0gdG11X3RpbWVyX3JlYWQsCiB9OwogCiBzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCmluZGV4IDdiNGI4MmJkLi5kMGIyYTcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKQEAgLTE1LDcgKzE1LDEwIEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19QTUJfRklYRUQKKwkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgKENPTkZJR19NRU1PUllfU1RBUlQgJiAweDFmZmZmZmZmKSArCisJICAgIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOworI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCiAJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwogI2Vsc2UKIAkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDU1NWVjOTcuLjEwYzI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTU3LDcgKzU3LDcgQEAKIAlib29sCiAJZGVmYXVsdCB5IGlmIENQVV9TSDUKIAotY29uZmlnIFBNQgorY29uZmlnIFBNQl9FTkFCTEUKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgogCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKIAlzZWxlY3QgMzJCSVQKQEAgLTY3LDYgKzY3LDMzIEBACiAJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKIAkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KIAorY2hvaWNlCisJcHJvbXB0ICJQTUIgaGFuZGxpbmcgdHlwZSIKKwlkZXBlbmRzIG9uIFBNQl9FTkFCTEUKKwlkZWZhdWx0IFBNQl9GSVhFRAorCitjb25maWcgUE1CCisJYm9vbCAiUE1CIgorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCisJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKKwkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KKworY29uZmlnIFBNQl9GSVhFRAorCWJvb2wgImZpeGVkIFBNQiIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBcCisJCQkJCSAgIENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBmaXhlZCBQTUIgbWFwcGluZ3MgYXJlIGluaGVyaXRlZAorCSAgZnJvbSB0aGUgYm9vdCBsb2FkZXIsIGFuZCB0aGUga2VybmVsIGRvZXMgbm90IGF0dGVtcHQgZHluYW1pYworCSAgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgY2xvc2VzdCB0byBsZWdhY3kgMjktYml0IHBoeXNpY2FsIG1vZGUsCisJICBhbmQgYWxsb3dzIHN5c3RlbXMgdG8gc3VwcG9ydCB1cCB0byA1MTJNaUIgb2Ygc3lzdGVtIG1lbW9yeS4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBYMlRMQgogCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBUTEIgbW9kZSIKIAlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMiBiL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKaW5kZXggY2IyZjNmMi4uOTg2YTFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL21tL01ha2VmaWxlXzMyCkBAIC0yNSw4ICsyNSwxMCBAQAogZW5kaWYKIAogaWZkZWYgQ09ORklHX01NVQotb2JqLSQoQ09ORklHX0NQVV9TSDMpCSs9IHRsYi1zaDMubwotb2JqLSQoQ09ORklHX0NQVV9TSDQpCSs9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9TSDMpCQk6PSB0bGItc2gzLm8KK3RsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vCit0bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubworb2JqLXkJCQkJKz0gJCh0bGIteSkKIGlmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCiBvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHBnLXNoNC5vCiBvYmotJChDT05GSUdfU0g3NzA1X0NBQ0hFXzMyS0IpCSs9IHBnLXNoNzcwNS5vCkBAIC0zNSw2ICszNyw3IEBACiAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KIG9iai0kKENPTkZJR19QTUIpCQkrPSBwbWIubworb2JqLSQoQ09ORklHX1BNQl9GSVhFRCkJCSs9IHBtYi1maXhlZC5vCiBvYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWEubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYwppbmRleCA4ZTkxMmExLi5jZDhjM2JmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKQEAgLTM3LDEwICszNyw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocC0+bW0pCi0JCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAlMDJseFxuIiwgcGlkLAorCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogJTA0bHhcbiIsIHBpZCwKIAkJCQkgICBjcHVfYXNpZChzbXBfcHJvY2Vzc29yX2lkKCksIHAtPm1tKSk7Ci0JCWVsc2UKLQkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6IChub25lKVxuIiwgcGlkKTsKIAl9CiAKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IDMyOTQ2ZmIuLjYwY2M0ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC01OSwxMSArNTksMTMgQEAKIAlpZiAoaXNfcGNpX21lbWFkZHIocGh5c19hZGRyKSAmJiBpc19wY2lfbWVtYWRkcihsYXN0X2FkZHIpKQogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfYWRkcjsKIAorI2lmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJaWYgKHBoeXNfYWRkciA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpCiAJCXJldHVybiBOVUxMOworI2VuZGlmCiAKIAkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCkBAIC04MSw3ICs4Myw3IEBACiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCW9yaWdfYWRkciA9IGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWZkZWYgQ09ORklHX1BNQgogCS8qCiAJICogRmlyc3QgdHJ5IHRvIHJlbWFwIHRocm91Z2ggdGhlIFBNQiBvbmNlIGEgdmFsaWQgVk1BIGhhcyBiZWVuCiAJICogZXN0YWJsaXNoZWQuIFNtYWxsZXIgYWxsb2NhdGlvbnMgKG9yIHRoZSByZXN0IG9mIHRoZSBzaXplCkBAIC0xMTksMTAgKzEyMSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgc2VnID0gUFhTRUcodmFkZHIpOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoc2VnIDwgUDNTRUcgfHwgc2VnID49IFAzX0FERFJfTUFYIHx8IGlzX3BjaV9tZW1hZGRyKHZhZGRyKSkKKwlpZiAoc2VnIDwgUDNTRUcgfHwgdmFkZHIgPj0gUDNfQUREUl9NQVggfHwgaXNfcGNpX21lbWFkZHIodmFkZHIpKQogCQlyZXR1cm47CiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CCiAJLyoKIAkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCiAJICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLWZpeGVkLmMgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzhlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBhcmNoL3NoL21tL2ZpeGVkX3BtYi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKK3N0YXRpYyBpbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZml4ZWRfcG1iX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1CX0VOVFJZX01BWDsgaSsrKSB7CisJCWFkZHIgPSBQTUJfREFUQSArIChpIDw8IFBNQl9FX1NISUZUKTsKKwkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQlpZiAoIShkYXRhICYgUE1CX1YpKQorCQkJY29udGludWU7CisKKwkJaWYgKGRhdGEgJiBQTUJfQykgeworI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKKwkJCWRhdGEgfD0gUE1CX1dUOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCQkJZGF0YSAmPSB+UE1CX1dUOworI2Vsc2UKKwkJCWRhdGEgJj0gfihQTUJfQyB8IFBNQl9XVCk7CisjZW5kaWYKKwkJfQorCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJfQorCisJYmFja190b19jYWNoZWQoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChmaXhlZF9wbWJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCA4NDI0MTY3Li5iMWE3MTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC00MDIsMyArNDA0LDM5IEBACiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChwbWJfZGVidWdmc19pbml0KTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbWJfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0YXRpYyBwbV9tZXNzYWdlX3QgcHJldl9zdGF0ZTsKKworCS8qIFJlc3RvcmUgdGhlIFBNQiBhZnRlciBhIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uICovCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OICYmCisJICAgIHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJCXNwaW5fbG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCQlmb3IgKHBtYmUgPSBwbWJfbGlzdDsgcG1iZTsgcG1iZSA9IHBtYmUtPm5leHQpCisJCQlzZXRfcG1iX2VudHJ5KHBtYmUpOworCQlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCX0KKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1iX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcG1iX3N5c2Rldl9zdXNwZW5kKGRldiwgUE1TR19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBwbWJfc3lzZGV2X2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IHBtYl9zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gcG1iX3N5c2Rldl9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbWJfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJnBtYl9zeXNkZXZfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHBtYl9zeXNkZXZfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYjNlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBhcmNoL3NoL21tL3RsYi1wdGVhZXguYworICoKKyAqIFRMQiBvcGVyYXRpb25zIGZvciBTSC1YMyBDUFVzIGZlYXR1cmluZyBQVEUgQVNJRCBFeHRlbnNpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBwdGV2YWw7CisJdW5zaWduZWQgbG9uZyB2cG47CisKKwkvKiBQdHJhY2UgbWF5IGNhbGwgdGhpcyByb3V0aW5lLiAqLworCWlmICh2bWEgJiYgY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCisJCXJldHVybjsKKworI2lmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCisJeworCQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKworCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCQkJaWYgKCF0ZXN0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncykpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwdGVfdmFsKHB0ZSkgJiBQVEVfUEhZU19NQVNLOworCQkJCV9fZmx1c2hfd2JhY2tfcmVnaW9uKCh2b2lkICopUDFTRUdBRERSKHBoeXMpLAorCQkJCQkJICAgICBQQUdFX1NJWkUpOworCQkJCV9fc2V0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCisJdnBuID0gYWRkcmVzcyAmIE1NVV9WUE5fTUFTSzsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CisKKwkvKiBTZXQgUFRFQUVYICovCisJX19yYXdfd3JpdGVsKGdldF9hc2lkKCksIE1NVV9QVEVBRVgpOworCisJcHRldmFsID0gcHRlLnB0ZV9sb3c7CisKKwkvKiBTZXQgUFRFQSByZWdpc3RlciAqLworI2lmZGVmIENPTkZJR19YMlRMQgorCS8qCisJICogRm9yIHRoZSBleHRlbmRlZCBtb2RlIFRMQiB0aGlzIGlzIHRyaXZpYWwsIG9ubHkgdGhlIEVTWiBhbmQKKwkgKiBFUFIgYml0cyBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIFBURUEsIHdpdGggdGhlIHJlbWFpbmRlciBvZgorCSAqIHRoZSBwcm90ZWN0aW9uIGJpdHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgY29tcGF0LW1vZGUgU1oKKwkgKiBhbmQgUFIgYml0cywgd2hpY2ggYXJlIGNsZWFyZWQpIGJlaW5nIHdyaXR0ZW4gb3V0IGluIFBURUwuCisJICovCisJX19yYXdfd3JpdGVsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOworI2VuZGlmCisKKwkvKiBTZXQgUFRFTCByZWdpc3RlciAqLworCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCisjaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSAorCXB0ZXZhbCB8PSBfUEFHRV9XVDsKKyNlbmRpZgorCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOworCisJLyogTG9hZCB0aGUgVExCICovCisJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFdoaWxlIFNILVgyIGV4dGVuZGVkIFRMQiBtb2RlIHNwbGl0cyBvdXQgdGhlIG1lbW9yeS1tYXBwZWQgSS9VVExCCisgKiBkYXRhIGFycmF5cywgU0gtWDMgY29yZXMgd2l0aCBQVEVBRVggc3BsaXQgb3V0IHRoZSBtZW1vcnktbWFwcGVkCisgKiBhZGRyZXNzIGFycmF5cy4gSW4gY29tcGF0IG1vZGUgdGhlIHNlY29uZCBhcnJheSBpcyBpbmFjY2Vzc2libGUsIHdoaWxlCisgKiBpbiBleHRlbmRlZCBtb2RlLCB0aGUgbGVnYWN5IDgtYml0IEFTSUQgZmllbGQgaW4gYWRkcmVzcyBhcnJheSAxIGhhcworICogdW5kZWZpbmVkIGJlaGF2aW91ci4KKyAqLwordm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJanVtcF90b191bmNhY2hlZCgpOworCV9fcmF3X3dyaXRlbChwYWdlLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKKwlfX3Jhd193cml0ZWwoYXNpZCwgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIgfCBNTVVfUEFHRV9BU1NPQ19CSVQpOworCWJhY2tfdG9fY2FjaGVkKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYwppbmRleCAxZDk3ZDY0Li4xYjlkNDMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCWNhc2UgQ1BVX1NINzc4MDoKIAljYXNlIENQVV9TSDc3ODE6CiAJY2FzZSBDUFVfU0g3Nzg1OgorCWNhc2UgQ1BVX1NINzc4NjoKIAljYXNlIENQVV9TSDc3MjM6CiAJY2FzZSBDUFVfU0hYMzoKIAkJbG1vZGVsID0gJm9wX21vZGVsX3NoNGFfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDI4NGI3ZTguLjg0NzdiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTUyLDMgKzUyLDYgQEAKIEFQMzI1UlhBCQlTSF9BUDMyNVJYQQogU0g3NzYzUkRQCQlTSF9TSDc3NjNSRFAKIFNINzc4NUxDUgkJU0hfU0g3Nzg1TENSCitVUlFVRUxMCQkJU0hfVVJRVUVMTAorRVNQVAkJCVNIX0VTUFQKK1BPTEFSSVMJCQlTSF9QT0xBUklTCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9waWwuaAppbmRleCAzMmE3ZWZlLi4yNjY5MzcwMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9waWwuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFBJTF9ERVZJQ0VfSVJRCQk1CiAjZGVmaW5lIFBJTF9TTVBfQ0FMTF9GVU5DX1NOR0wJNgogI2RlZmluZSBQSUxfREVGRVJSRURfUENSX1dPUksJNworI2RlZmluZSBQSUxfS0dEQl9DQVBUVVJFCTgKICNkZWZpbmUgUElMX05PUk1BTF9NQVgJCTE0CiAjZGVmaW5lIFBJTF9OTUkJCQkxNQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBiZjUwZDBjLi45ODJhMTJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTUwLDYgKzUwLDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMHgwMDIyCiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkweDAwMjMKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KICNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTB4NTAwMQogI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkweDUwMDIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCmluZGV4IGVjODFjZGUuLmVlMzhlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaApAQCAtNTcsNiArNTcsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqbXApCiB7CisJaWYgKCFtcC0+ZnVsbG1tKQorCQlmbHVzaF90bGJfcGVuZGluZygpOwogCWlmIChtcC0+bmVlZF9mbHVzaCkgewogCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKG1wLT5wYWdlcywgbXAtPnBhZ2VzX25yKTsKIAkJbXAtPnBhZ2VzX25yID0gMDsKQEAgLTc4LDggKzgwLDYgQEAKIAogCWlmIChtcC0+ZnVsbG1tKQogCQltcC0+ZnVsbG1tID0gMDsKLQllbHNlCi0JCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiAKIAkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KIAljaGVja19wZ3RfY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKaW5kZXggZTI4OTM3Ni4uZDBkNmE1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTlzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKQEAgLTI1Miw5ICsyNTIsMTAgQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKIHsKLQljcHVtYXNrX3QgbWFzayA9IGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eTsKKwljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1aWQ7CiAKKwljcHVtYXNrX2NvcHkoJm1hc2ssIGlycV9kZXNjW3ZpcnRfaXJxXS5hZmZpbml0eSk7CiAJaWYgKGNwdXNfZXF1YWwobWFzaywgQ1BVX01BU0tfQUxMKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CkBAIC0zMjMsMTcgKzMyNCwyNSBAQAogCXN1bjR1X2lycV9lbmFibGUodmlydF9pcnEpOwogfQogCisvKiBEb24ndCBkbyBhbnl0aGluZy4gIFRoZSBkZXNjLT5zdGF0dXMgY2hlY2sgZm9yIElSUV9ESVNBQkxFRCBpbgorICogaGFuZGxlcl9pcnEoKSB3aWxsIHNraXAgdGhlIGhhbmRsZXIgY2FsbCBhbmQgdGhhdCB3aWxsIGxlYXZlIHRoZQorICogaW50ZXJydXB0IGluIHRoZSBzZW50IHN0YXRlLiAgVGhlIG5leHQgLT5lbmFibGUoKSBjYWxsIHdpbGwgaGl0IHRoZQorICogSUNMUiByZWdpc3RlciB0byByZXNldCB0aGUgc3RhdGUgbWFjaGluZS4KKyAqCisgKiBUaGlzIHNjaGVtZSBpcyBuZWNlc3NhcnksIGluc3RlYWQgb2YgY2xlYXJpbmcgdGhlIFZhbGlkIGJpdCBpbiB0aGUKKyAqIElNQVAgcmVnaXN0ZXIsIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiBJTUFQIHJlZ2lzdGVycyBiZWluZyBzaGFyZWQgYnkKKyAqIG11bHRpcGxlIElOT3MgKGFuZCB0aHVzIElDTFIgcmVnaXN0ZXJzKS4gIFNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudAorICogdmlydHVhbCBJUlEgZm9yIGVhY2ggc2hhcmVkIElNQVAgaW5zdGFuY2UsIHRoZSBnZW5lcmljIGNvZGUgdGhpbmtzCisgKiB0aGVyZSBpcyBvbmx5IG9uZSB1c2VyIHNvIGl0IHByZW1hdHVyZWx5IGNhbGxzIC0+ZGlzYWJsZSgpIG9uCisgKiBmcmVlX2lycSgpLgorICoKKyAqIFdlIGhhdmUgdG8gcHJvdmlkZSBhbiBleHBsaWNpdCAtPmRpc2FibGUoKSBtZXRob2QgaW5zdGVhZCBvZiB1c2luZworICogTlVMTCB0byBnZXQgdGhlIGRlZmF1bHQuICBUaGUgcmVhc29uIGlzIHRoYXQgaWYgdGhlIGdlbmVyaWMgY29kZQorICogc2VlcyB0aGF0LCBpdCBhbHNvIGhvb2tzIHVwIGEgZGVmYXVsdCAtPnNodXRkb3duIG1ldGhvZCB3aGljaAorICogaW52b2tlcyAtPm1hc2soKSB3aGljaCB3ZSBkbyBub3Qgd2FudC4gIFNlZSBpcnFfY2hpcF9zZXRfZGVmYXVsdHMoKS4KKyAqLwogc3RhdGljIHZvaWQgc3VuNHVfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IHZpcnRfaXJxKQogewotCXN0cnVjdCBpcnFfaGFuZGxlcl9kYXRhICpkYXRhID0gZ2V0X2lycV9jaGlwX2RhdGEodmlydF9pcnEpOwotCi0JaWYgKGxpa2VseShkYXRhKSkgewotCQl1bnNpZ25lZCBsb25nIGltYXAgPSBkYXRhLT5pbWFwOwotCQl1bnNpZ25lZCBsb25nIHRtcCA9IHVwYV9yZWFkcShpbWFwKTsKLQotCQl0bXAgJj0gfklNQVBfVkFMSUQ7Ci0JCXVwYV93cml0ZXEodG1wLCBpbWFwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHN1bjR1X2lycV9lb2kodW5zaWduZWQgaW50IHZpcnRfaXJxKQpAQCAtNzQ2LDcgKzc1NSw4IEBACiAKIAkJZGVzYyA9IGlycV9kZXNjICsgdmlydF9pcnE7CiAKLQkJZGVzYy0+aGFuZGxlX2lycSh2aXJ0X2lycSwgZGVzYyk7CisJCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCisJCQlkZXNjLT5oYW5kbGVfaXJxKHZpcnRfaXJxLCBkZXNjKTsKIAogCQlidWNrZXRfcGEgPSBuZXh0X3BhOwogCX0KQEAgLTc5Niw3ICs4MDYsNyBAQAogCQkgICAgIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9QRVJfQ1BVKSkgewogCQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KQogCQkJCWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KGlycSwKLQkJCQkJJmlycV9kZXNjW2lycV0uYWZmaW5pdHkpOworCQkJCQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpcnFdLmxvY2ssIGZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9rZ2RiXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9rZ2RiXzY0LmMKaW5kZXggZmVmYmU2ZC4uZjVhMGZkNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwva2dkYl82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2tnZGJfNjQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU01QCi12b2lkIHNtcF9rZ2RiX2NhcHR1cmVfY2xpZW50KHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBzbXBfa2dkYl9jYXB0dXJlX2NsaWVudChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKaW5kZXggNjRlNmVkZi4uYjc3NTY1OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJY29uc3QgdTMyICp2ZG1hID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+b3AtPm5vZGUsICJ2aXJ0dWFsLWRtYSIsIE5VTEwpOwogCiAJaWYgKHZkbWEpIHsKLQkJc3RydWN0IHJlc291cmNlICpycCA9IGttYWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpOworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJwID0ga3phbGxvYyhzaXplb2YoKnJwKSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFycCkgewogCQkJcHJvbV9wcmludGYoIkNhbm5vdCBhbGxvY2F0ZSBJT01NVSByZXNvdXJjZS5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCA2Y2QxYTViLi43OTQ1N2Y2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAKICAqICAgIElmIHRoZSBhZGRyZXNzIHNwYWNlIGlzIG5vbi1zaGFyZWQgKGllLiBtbS0+Y291bnQgPT0gMSkgd2UgYXZvaWQKICAqICAgIGNyb3NzIGNhbGxzIHdoZW4gd2Ugd2FudCB0byBmbHVzaCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcydzCiAgKiAgICB0bGIgc3RhdGUuICBUaGlzIGlzIGRvbmUgYnkgY2xlYXJpbmcgYWxsIGNwdSBiaXRzIGV4Y2VwdCB0aGUgY3VycmVudAotICogICAgcHJvY2Vzc29yJ3MgaW4gY3VycmVudC0+YWN0aXZlX21tLT5jcHVfdm1fbWFzayBhbmQgcGVyZm9ybWluZyB0aGUKKyAqICAgIHByb2Nlc3NvcidzIGluIGN1cnJlbnQtPm1tLT5jcHVfdm1fbWFzayBhbmQgcGVyZm9ybWluZyB0aGUKICAqICAgIGZsdXNoIGxvY2FsbHkgb25seS4gIFRoaXMgd2lsbCBmb3JjZSBhbnkgc3Vic2VxdWVudCBjcHVzIHdoaWNoIHJ1bgogICogICAgdGhpcyB0YXNrIHRvIGZsdXNoIHRoZSBjb250ZXh0IGZyb20gdGhlIGxvY2FsIHRsYiBpZiB0aGUgcHJvY2VzcwogICogICAgbWlncmF0ZXMgdG8gYW5vdGhlciBjcHUgKGFnYWluKS4KQEAgLTEwNzQsNyArMTA3NCw3IEBACiAJdTMyIGN0eCA9IENUWF9IV0JJVFMobW0tPmNvbnRleHQpOwogCWludCBjcHUgPSBnZXRfY3B1KCk7CiAKLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tICYmIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEpCisJaWYgKG1tID09IGN1cnJlbnQtPm1tICYmIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEpCiAJCW1tLT5jcHVfdm1fbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAJZWxzZQogCQlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoJnhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCmluZGV4IGY5M2M0MmEuLmE4MDAwYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKQEAgLTUxLDcgKzUxLDcgQEAKIC8qMTUwKi8JLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfaW5vdGlmeV9pbml0LCBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gsIHN5c19wb2xsLCBzeXNfZ2V0ZGVudHM2NAogCS53b3JkIGNvbXBhdF9zeXNfZmNudGw2NCwgc3lzX2lub3RpZnlfcm1fd2F0Y2gsIGNvbXBhdF9zeXNfc3RhdGZzLCBjb21wYXRfc3lzX2ZzdGF0ZnMsIHN5c19vbGR1bW91bnQKIC8qMTYwKi8JLndvcmQgY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0eSwgY29tcGF0X3N5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzMzJfZ2V0ZG9tYWlubmFtZSwgc3lzMzJfc2V0ZG9tYWlubmFtZSwgc3lzX25pc19zeXNjYWxsCi0JLndvcmQgc3lzX3F1b3RhY3RsLCBzeXNfc2V0X3RpZF9hZGRyZXNzLCBjb21wYXRfc3lzX21vdW50LCBzeXNfdXN0YXQsIHN5czMyX3NldHhhdHRyCisJLndvcmQgc3lzX3F1b3RhY3RsLCBzeXNfc2V0X3RpZF9hZGRyZXNzLCBjb21wYXRfc3lzX21vdW50LCBjb21wYXRfc3lzX3VzdGF0LCBzeXMzMl9zZXR4YXR0cgogLyoxNzAqLwkud29yZCBzeXMzMl9sc2V0eGF0dHIsIHN5czMyX2ZzZXR4YXR0ciwgc3lzX2dldHhhdHRyLCBzeXNfbGdldHhhdHRyLCBjb21wYXRfc3lzX2dldGRlbnRzCiAJLndvcmQgc3lzX3NldHNpZCwgc3lzX2ZjaGRpciwgc3lzMzJfZmdldHhhdHRyLCBzeXNfbGlzdHhhdHRyLCBzeXNfbGxpc3R4YXR0cgogLyoxODAqLwkud29yZCBzeXMzMl9mbGlzdHhhdHRyLCBzeXNfcmVtb3ZleGF0dHIsIHN5c19scmVtb3ZleGF0dHIsIGNvbXBhdF9zeXNfc2lncGVuZGluZywgc3lzX25pX3N5c2NhbGwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwppbmRleCAyZGIzYzIyLi5kYjMxMGFhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCkBAIC03MjksNyArNzI5LDcgQEAKIAogCWlycV9lbnRlcigpOwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1swXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdSgwLCBpcnFfdG9fZGVzYygwKSk7CiAKIAlpZiAodW5saWtlbHkoIWV2dC0+ZXZlbnRfaGFuZGxlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUwppbmRleCBkOWJkZmI5Li43NmQ4MzdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUwpAQCAtNjQsNyArNjQsMTIgQEAKIHRsMF9pcnE2OglCVFJBUCgweDQ2KQogI2VuZGlmCiB0bDBfaXJxNzoJVFJBUF9JUlEoZGVmZXJyZWRfcGNyX3dvcmtfaXJxLCA3KQotdGwwX2lycTg6CUJUUkFQKDB4NDgpIEJUUkFQKDB4NDkpCisjaWZkZWYgQ09ORklHX0tHREIKK3RsMF9pcnE4OglUUkFQX0lSUShzbXBfa2dkYl9jYXB0dXJlX2NsaWVudCwgOCkKKyNlbHNlCit0bDBfaXJxODoJQlRSQVAoMHg0OCkKKyNlbmRpZgordGwwX2lycTk6CUJUUkFQKDB4NDkpCiB0bDBfaXJxMTA6CUJUUkFQKDB4NGEpIEJUUkFQKDB4NGIpIEJUUkFQKDB4NGMpIEJUUkFQKDB4NGQpCiB0bDBfaXJxMTQ6CVRSQVBfSVJRKHRpbWVyX2ludGVycnVwdCwgMTQpCiB0bDBfaXJxMTU6CVRSQVBfTk1JX0lSUShwZXJmY3RyX2lycSwgMTUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3VsdHJhLlMgYi9hcmNoL3NwYXJjL21tL3VsdHJhLlMKaW5kZXggODBjNzg4ZS4uYjU3YTU5NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS91bHRyYS5TCisrKyBiL2FyY2gvc3BhcmMvbW0vdWx0cmEuUwpAQCAtNjc5LDI4ICs2NzksOCBAQAogI2lmZGVmIENPTkZJR19LR0RCCiAJLmdsb2JsCQl4Y2FsbF9rZ2RiX2NhcHR1cmUKIHhjYWxsX2tnZGJfY2FwdHVyZToKLTY2MToJcmRwcgkJJXBzdGF0ZSwgJWcyCi0Jd3JwcgkJJWcyLCBQU1RBVEVfSUcgfCBQU1RBVEVfQUcsICVwc3RhdGUKLQkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKLQkud29yZAkJNjYxYgotCW5vcAotCW5vcAotCS5wcmV2aW91cwotCi0JcmRwcgkJJXBpbCwgJWcyCi0Jd3JwcgkJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAotCXNldGhpCQklaGkoMTA5ZiksICVnNwotCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKLTEwOToJIG9yCQklZzcsICVsbygxMDliKSwgJWc3Ci0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JY2FsbAkJdHJhY2VfaGFyZGlycXNfb2ZmCi0JIG5vcAotI2VuZGlmCi0JY2FsbAkJc21wX2tnZGJfY2FwdHVyZV9jbGllbnQKLQkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAotCS8qIEhhcyB0byBiZSBhIG5vbi12OSBicmFuY2ggZHVlIHRvIHRoZSBsYXJnZSBkaXN0YW5jZS4gKi8KLQliYQkJcnRyYXBfeGNhbGwKLQkgbGR4CQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RTVEFURV0sICVsMQorCXdyCQklZzAsICgxIDw8IFBJTF9LR0RCX0NBUFRVUkUpLCAlc2V0X3NvZnRpbnQKKwlyZXRyeQogI2VuZGlmCiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCmluZGV4IGZkZTUxMGIuLjQzNDIyNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCkBAIC04Niw3ICs4Niw3IEBACiAJCWRyb3Bfc2tiLT5kZXYgPSBkZXY7CiAJCS8qIFJlYWQgYSBwYWNrZXQgaW50byBkcm9wX3NrYiBhbmQgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdC4gKi8KIAkJKCpscC0+cmVhZCkobHAtPmZkLCBkcm9wX3NrYiwgbHApOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05OSw4ICs5OSw4IEBACiAJCXNrYl90cmltKHNrYiwgcGt0X2xlbik7CiAJCXNrYi0+cHJvdG9jb2wgPSAoKmxwLT5wcm90b2NvbCkoc2tiKTsKIAotCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQluZXRpZl9yeChza2IpOwogCQlyZXR1cm4gcGt0X2xlbjsKIAl9CkBAIC0yMjQsOCArMjI0LDggQEAKIAlsZW4gPSAoKmxwLT53cml0ZSkobHAtPmZkLCBza2IsIGxwKTsKIAogCWlmIChsZW4gPT0gc2tiLT5sZW4pIHsKLQkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKQEAgLTIzNCw3ICsyMzQsNyBAQAogCX0KIAllbHNlIGlmIChsZW4gPT0gMCkgewogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAl9CiAJZWxzZSB7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CkBAIC0yNDgsMTIgKzI0OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdW1sX25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIHVtbF9uZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuOwpAQCAtMzc3LDYgKzM3MSwxOCBAQAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdW1sX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSB1bWxfbmV0X29wZW4sCisJLm5kb19zdG9wIAkJPSB1bWxfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSB1bWxfbmV0X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB1bWxfbmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gdW1sX25ldF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdW1sX25ldF9zZXRfbWFjLAorCS5uZG9fY2hhbmdlX210dSAJPSB1bWxfbmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEVuc3VyZXMgdGhhdCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgaXMgY2FsbGVkIG9ubHkgb25jZSBieQogICogZXRoX2NvbmZpZ3VyZS4gIFdpbGwgYmUgc2V0IGluIGFuIGluaXRjYWxsLgpAQCAtNDczLDE0ICs0NzksNyBAQAogCiAJc2V0X2V0aGVyX21hYyhkZXYsIGRldmljZS0+bWFjKTsKIAlkZXYtPm10dSA9IHRyYW5zcG9ydC0+dXNlci0+bXR1OwotCWRldi0+b3BlbiA9IHVtbF9uZXRfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHVtbF9uZXRfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSB1bWxfbmV0X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gdW1sX25ldF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB1bWxfbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB1bWxfbmV0X3R4X3RpbWVvdXQ7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB1bWxfbmV0X3NldF9tYWM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gdW1sX25ldF9jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZ1bWxfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnVtbF9uZXRfZXRodG9vbF9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IChIWiA+PiAxKTsKIAlkZXYtPmlycSA9IFVNX0VUSF9JUlE7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF9rZXJuLmgKaW5kZXggZDg0M2M3OS4uNWMzNjdmMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbmV0X2tlcm4uaApAQCAtMjYsNyArMjYsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCB0aW1lcl9saXN0IHRsOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJaW50IGZkOwogCXVuc2lnbmVkIGNoYXIgbWFjW0VUSF9BTEVOXTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2lycS5jIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKaW5kZXggM2Q3YWFkMC4uMzM2YjYxNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxNWU4YjdjLi44ZTNkNjllIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNjQsNiArNjQsMTEgQEAKIAkJcmV0ID0gcG9rZV91c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CiAKKwljYXNlIFBUUkFDRV9TWVNFTVU6CisJY2FzZSBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVA6CisJCXJldCA9IC1FSU87CisJCWJyZWFrOworCiAJLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9TWVNDQUxMOgogCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYyBiL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKaW5kZXggNzRmNDliYi4uODliNDhhMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjdW5kZWYgbWVtc2V0CiAKIGV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CiBleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOwogZXh0ZXJuIGludCBwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwpAQCAtMjQsNyArMjMsMTEgQEAKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKICNlbmRpZgogCisjaWZuZGVmIF9feDg2XzY0X18KK2V4dGVybiB2b2lkICptZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CisjZW5kaWYKKwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wocHJpbnRmKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJjMmZiYWQuLjA2YzAyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIGNvbmZpZyA2NEJJVAogCWJvb2wgIjY0LWJpdCBrZXJuZWwiIGlmIEFSQ0ggPSAieDg2IgogCWRlZmF1bHQgQVJDSCA9ICJ4ODZfNjQiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNheSB5ZXMgdG8gYnVpbGQgYSA2NC1iaXQga2VybmVsIC0gZm9ybWVybHkga25vd24gYXMgeDg2XzY0CiAJICBTYXkgbm8gdG8gYnVpbGQgYSAzMi1iaXQga2VybmVsIC0gZm9ybWVybHkga25vd24gYXMgaTM4NgogCkBAIC0zNCwxMiArMzQsMTUgQEAKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCXNlbGVjdCBIQVZFX0tWTSBpZiAoKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIgJiYgIVg4Nl9WSVNXUyAmJiAhWDg2X05VTUFRKSB8fCBYODZfNjQpCi0Jc2VsZWN0IEhBVkVfQVJDSF9LR0RCIGlmICFYODZfVk9ZQUdFUgorCXNlbGVjdCBIQVZFX0tWTQorCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaWYgWDg2XzMyCiAJc2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAlzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQKKwlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAorCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0cmluZwpAQCAtMTMzLDE4ICsxMzYsMTkgQEAKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQotCWRlZl9ib29sIFg4Nl82NF9TTVAgfHwgKFg4Nl9TTVAgJiYgIVg4Nl9WT1lBR0VSKQorCWRlZl9ib29sIHkKKworY29uZmlnIEhBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBIQVZFX0NQVU1BU0tfT0ZfQ1BVX01BUAogCWRlZl9ib29sIFg4Nl82NF9TTVAKIAogY29uZmlnIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAhU01QIHx8ICFYODZfVk9ZQUdFUgogCiBjb25maWcgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCiAKIGNvbmZpZyBaT05FX0RNQTMyCiAJYm9vbApAQCAtMTY1LDYgKzE2OSw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xNzQsMTEgKzE4MSw2IEBACiAJZGVwZW5kcyBvbiBHRU5FUklDX0hBUkRJUlFTICYmIFNNUAogCWRlZmF1bHQgeQogCi1jb25maWcgWDg2X1NNUAotCWJvb2wKLQlkZXBlbmRzIG9uIFNNUCAmJiAoKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIpIHx8IFg4Nl82NCkKLQlkZWZhdWx0IHkKLQogY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU01QCkBAIC0xOTQsMTkgKzE5NiwxNyBAQAogY29uZmlnIFg4Nl9IVAogCWJvb2wKIAlkZXBlbmRzIG9uIFNNUAotCWRlcGVuZHMgb24gKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIpIHx8IFg4Nl82NAotCWRlZmF1bHQgeQotCi1jb25maWcgWDg2X0JJT1NfUkVCT09UCi0JYm9vbAotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBYODZfVFJBTVBPTElORQogCWJvb2wKLQlkZXBlbmRzIG9uIFg4Nl9TTVAgfHwgKFg4Nl9WT1lBR0VSICYmIFNNUCkgfHwgKDY0QklUICYmIEFDUElfU0xFRVApCisJZGVwZW5kcyBvbiBTTVAgfHwgKDY0QklUICYmIEFDUElfU0xFRVApCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBYODZfMzJfTEFaWV9HUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhQ0NfU1RBQ0tQUk9URUNUT1IKKwogY29uZmlnIEtUSU1FX1NDQUxBUgogCWRlZl9ib29sIFg4Nl8zMgogc291cmNlICJpbml0L0tjb25maWciCkBAIC0yNDQsMTQgKzI0NCwyNCBAQAogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCi1jb25maWcgWDg2X0hBU19CT09UX0NQVV9JRAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl9WT1lBR0VSCitjb25maWcgWDg2X1gyQVBJQworCWJvb2wgIlN1cHBvcnQgeDJhcGljIgorCWRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUMgJiYgWDg2XzY0CisJLS0taGVscC0tLQorCSAgVGhpcyBlbmFibGVzIHgyYXBpYyBzdXBwb3J0IG9uIENQVXMgdGhhdCBoYXZlIHRoaXMgZmVhdHVyZS4KKworCSAgVGhpcyBhbGxvd3MgMzItYml0IGFwaWMgSURzIChzbyBpdCBjYW4gc3VwcG9ydCB2ZXJ5IGxhcmdlIHN5c3RlbXMpLAorCSAgYW5kIGFjY2Vzc2VzIHRoZSBsb2NhbCBhcGljIHZpYSBNU1JzIG5vdCB2aWEgbW1pby4KKworCSAgKCBPbiBjZXJ0YWluIENQVSBtb2RlbHMgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBJTlRSX1JFTUFQIHRvbywKKwkgICAgdG8gZ2V0IGZ1bmN0aW9uYWwgeDJhcGljIG1vZGUuICkKKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAogY29uZmlnIFNQQVJTRV9JUlEKIAlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgogCWRlcGVuZHMgb24gUENJX01TSSB8fCBIVF9JUlEKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHNwYXJzZSBpcnFzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzdHJvCiAJICBrZXJuZWxzIHRoYXQgd2FudCB0byBkZWZpbmUgYSBoaWdoIENPTkZJR19OUl9DUFVTIHZhbHVlIGJ1dCBzdGlsbAogCSAgd2FudCB0byBoYXZlIGxvdyBrZXJuZWwgbWVtb3J5IGZvb3RwcmludCBvbiBzbWFsbGVyIG1hY2hpbmVzLgpAQCAtMjY1LDExNCArMjc1LDE0MCBAQAogCWJvb2wgIk1vdmUgaXJxIGRlc2Mgd2hlbiBjaGFuZ2luZyBpcnEgc21wX2FmZmluaXR5IgogCWRlcGVuZHMgb24gU1BBUlNFX0lSUSAmJiBOVU1BCiAJZGVmYXVsdCBuCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBtb3ZpbmcgaXJxX2Rlc2MgdG8gY3B1L25vZGUgdGhhdCBpcnEgd2lsbCB1c2UgaGFuZGxlZC4KIAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAotY29uZmlnIFg4Nl9GSU5EX1NNUF9DT05GSUcKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfTVBQQVJTRSB8fCBYODZfVk9ZQUdFUgotCiBjb25maWcgWDg2X01QUEFSU0UKIAlib29sICJFbmFibGUgTVBTIHRhYmxlIiBpZiBBQ1BJCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBGb3Igb2xkIHNtcCBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyIGFjcGkgc3VwcG9ydC4gTmV3ZXIgc3lzdGVtcwogCSAgKGVzcCB3aXRoIDY0Yml0IGNwdXMpIHdpdGggYWNwaSBzdXBwb3J0LCBNQURUIGFuZCBEU0RUIHdpbGwgb3ZlcnJpZGUgaXQKIAotY2hvaWNlCi0JcHJvbXB0ICJTdWJhcmNoaXRlY3R1cmUgVHlwZSIKLQlkZWZhdWx0IFg4Nl9QQworY29uZmlnIFg4Nl9CSUdTTVAKKwlib29sICJTdXBwb3J0IGZvciBiaWcgU01QIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gOCBDUFVzIgorCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGlzIG5lZWRlZCBmb3IgdGhlIHN5c3RlbXMgdGhhdCBoYXZlIG1vcmUgdGhhbiA4IENQVXMKIAotY29uZmlnIFg4Nl9QQwotCWJvb2wgIlBDLWNvbXBhdGlibGUiCi0JaGVscAotCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdXIgY29tcHV0ZXIgaXMgYSBzdGFuZGFyZCBQQyBvciBjb21wYXRpYmxlLgoraWYgWDg2XzMyCitjb25maWcgWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJYm9vbCAiU3VwcG9ydCBmb3IgZXh0ZW5kZWQgKG5vbi1QQykgeDg2IHBsYXRmb3JtcyIKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBJZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbiB0aGVuIHRoZSBrZXJuZWwgd2lsbCBvbmx5IHN1cHBvcnQKKwkgIHN0YW5kYXJkIFBDIHBsYXRmb3Jtcy4gKHdoaWNoIGNvdmVycyB0aGUgdmFzdCBtYWpvcml0eSBvZgorCSAgc3lzdGVtcyBvdXQgdGhlcmUuKQorCisJICBJZiB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uIHRoZW4geW91J2xsIGJlIGFibGUgdG8gc2VsZWN0IHN1cHBvcnQKKwkgIGZvciB0aGUgZm9sbG93aW5nIChub24tUEMpIDMyIGJpdCB4ODYgcGxhdGZvcm1zOgorCQlBTUQgRWxhbgorCQlOVU1BUSAoSUJNL1NlcXVlbnQpCisJCVJEQyBSLTMyMXggU29DCisJCVNHSSAzMjAvNTQwIChWaXN1YWwgV29ya3N0YXRpb24pCisJCVN1bW1pdC9FWEEgKElCTSB4NDQwKQorCQlVbmlzeXMgRVM3MDAwIElBMzIgc2VyaWVzCisKKwkgIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBzeXN0ZW1zLCBvciBpZiB5b3Ugd2FudCB0byBidWlsZCBhCisJICBnZW5lcmljIGRpc3RyaWJ1dGlvbiBrZXJuZWwsIHNheSBZIGhlcmUgLSBvdGhlcndpc2Ugc2F5IE4uCitlbmRpZgorCitpZiBYODZfNjQKK2NvbmZpZyBYODZfRVhURU5ERURfUExBVEZPUk0KKwlib29sICJTdXBwb3J0IGZvciBleHRlbmRlZCAobm9uLVBDKSB4ODYgcGxhdGZvcm1zIgorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uIHRoZW4gdGhlIGtlcm5lbCB3aWxsIG9ubHkgc3VwcG9ydAorCSAgc3RhbmRhcmQgUEMgcGxhdGZvcm1zLiAod2hpY2ggY292ZXJzIHRoZSB2YXN0IG1ham9yaXR5IG9mCisJICBzeXN0ZW1zIG91dCB0aGVyZS4pCisKKwkgIElmIHlvdSBlbmFibGUgdGhpcyBvcHRpb24gdGhlbiB5b3UnbGwgYmUgYWJsZSB0byBzZWxlY3Qgc3VwcG9ydAorCSAgZm9yIHRoZSBmb2xsb3dpbmcgKG5vbi1QQykgNjQgYml0IHg4NiBwbGF0Zm9ybXM6CisJCVNjYWxlTVAgdlNNUAorCQlTR0kgVWx0cmF2aW9sZXQKKworCSAgSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIHN5c3RlbXMsIG9yIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEKKwkgIGdlbmVyaWMgZGlzdHJpYnV0aW9uIGtlcm5lbCwgc2F5IFkgaGVyZSAtIG90aGVyd2lzZSBzYXkgTi4KK2VuZGlmCisjIFRoaXMgaXMgYW4gYWxwaGFiZXRpY2FsbHkgc29ydGVkIGxpc3Qgb2YgNjQgYml0IGV4dGVuZGVkIHBsYXRmb3JtcworIyBQbGVhc2UgbWFpbnRhaW4gdGhlIGFscGhhYmV0aWMgb3JkZXIgaWYgYW5kIHdoZW4gdGhlcmUgYXJlIGFkZGl0aW9ucworCitjb25maWcgWDg2X1ZTTVAKKwlib29sICJTY2FsZU1QIHZTTVAiCisJc2VsZWN0IFBBUkFWSVJUCisJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJCisJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBTY2FsZU1QIHZTTVAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcworCSAgc3VwcG9zZWQgdG8gcnVuIG9uIHRoZXNlIEVNNjRULWJhc2VkIG1hY2hpbmVzLiAgT25seSBjaG9vc2UgdGhpcyBvcHRpb24KKwkgIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYWNoaW5lcy4KKworY29uZmlnIFg4Nl9VVgorCWJvb2wgIlNHSSBVbHRyYXZpb2xldCIKKwlkZXBlbmRzIG9uIFg4Nl82NAorCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJc2VsZWN0IFg4Nl9YMkFQSUMKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBTR0kgVWx0cmF2aW9sZXQgc3lzdGVtcy4KKwkgIElmIHlvdSBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSwgeW91IHNob3VsZCBzYXkgTiBoZXJlLgorCisjIEZvbGxvd2luZyBpcyBhbiBhbHBoYWJldGljYWxseSBzb3J0ZWQgbGlzdCBvZiAzMiBiaXQgZXh0ZW5kZWQgcGxhdGZvcm1zCisjIFBsZWFzZSBtYWludGFpbiB0aGUgYWxwaGFiZXRpYyBvcmRlciBpZiBhbmQgd2hlbiB0aGVyZSBhcmUgYWRkaXRpb25zCiAKIGNvbmZpZyBYODZfRUxBTgogCWJvb2wgIkFNRCBFbGFuIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGFuIEFNRCBFbGFuIHByb2Nlc3Nvci4KIAogCSAgRG8gbm90IHVzZSB0aGlzIG9wdGlvbiBmb3IgSzYvQXRobG9uL09wdGVyb24gcHJvY2Vzc29ycyEKIAogCSAgSWYgdW5zdXJlLCBjaG9vc2UgIlBDLWNvbXBhdGlibGUiIGluc3RlYWQuCiAKLWNvbmZpZyBYODZfVk9ZQUdFUgotCWJvb2wgIlZveWFnZXIgKE5DUikiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgKFNNUCB8fCBCUk9LRU4pICYmICFQQ0kKLQloZWxwCi0JICBWb3lhZ2VyIGlzIGFuIE1DQS1iYXNlZCAzMi13YXkgY2FwYWJsZSBTTVAgYXJjaGl0ZWN0dXJlIHByb3ByaWV0YXJ5Ci0JICB0byBOQ1IgQ29ycC4gIE1hY2hpbmUgY2xhc3NlcyAzNDV4LzM1eHgvNDEwMC81MXh4IGFyZSBWb3lhZ2VyLWJhc2VkLgotCi0JICAqKiogV0FSTklORyAqKioKLQotCSAgSWYgeW91IGRvIG5vdCBzcGVjaWZpY2FsbHkga25vdyB5b3UgaGF2ZSBhIFZveWFnZXIgYmFzZWQgbWFjaGluZSwKLQkgIHNheSBOIGhlcmUsIG90aGVyd2lzZSB0aGUga2VybmVsIHlvdSBidWlsZCB3aWxsIG5vdCBiZSBib290YWJsZS4KLQotY29uZmlnIFg4Nl9HRU5FUklDQVJDSAotICAgICAgIGJvb2wgIkdlbmVyaWMgYXJjaGl0ZWN0dXJlIgorY29uZmlnIFg4Nl9SREMzMjFYCisJYm9vbCAiUkRDIFItMzIxeCBTb0MiCiAJZGVwZW5kcyBvbiBYODZfMzIKLSAgICAgICBoZWxwCi0gICAgICAgICAgVGhpcyBvcHRpb24gY29tcGlsZXMgaW4gdGhlIE5VTUFRLCBTdW1taXQsIGJpZ3NtcCwgRVM3MDAwLCBkZWZhdWx0CisJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwlzZWxlY3QgTTQ4NgorCXNlbGVjdCBYODZfUkVCT09URklYVVBTCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaXMgbmVlZGVkIGZvciBSREMgUi0zMjF4IHN5c3RlbS1vbi1jaGlwLCBhbHNvIGtub3duCisJICBhcyBSLTg2MTAtKEcpLgorCSAgSWYgeW91IGRvbid0IGhhdmUgb25lIG9mIHRoZXNlIGNoaXBzLCB5b3Ugc2hvdWxkIHNheSBOIGhlcmUuCisKK2NvbmZpZyBYODZfMzJfTk9OX1NUQU5EQVJECisJYm9vbCAiU3VwcG9ydCBub24tc3RhbmRhcmQgMzItYml0IFNNUCBhcmNoaXRlY3R1cmVzIgorCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUAorCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gY29tcGlsZXMgaW4gdGhlIE5VTUFRLCBTdW1taXQsIGJpZ3NtcCwgRVM3MDAwLCBkZWZhdWx0CiAJICBzdWJhcmNoaXRlY3R1cmVzLiAgSXQgaXMgaW50ZW5kZWQgZm9yIGEgZ2VuZXJpYyBiaW5hcnkga2VybmVsLgogCSAgaWYgeW91IHNlbGVjdCB0aGVtIGFsbCwga2VybmVsIHdpbGwgcHJvYmUgaXQgb25lIGJ5IG9uZS4gYW5kIHdpbGwKIAkgIGZhbGxiYWNrIHRvIGRlZmF1bHQuCiAKLWlmIFg4Nl9HRU5FUklDQVJDSAorIyBBbHBoYWJldGljYWxseSBzb3J0ZWQgbGlzdCBvZiBOb24gc3RhbmRhcmQgMzIgYml0IHBsYXRmb3JtcwogCiBjb25maWcgWDg2X05VTUFRCiAJYm9vbCAiTlVNQVEgKElCTS9TZXF1ZW50KSIKLQlkZXBlbmRzIG9uIFNNUCAmJiBYODZfMzIgJiYgUENJICYmIFg4Nl9NUFBBUlNFCisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECiAJc2VsZWN0IE5VTUEKLQloZWxwCisJc2VsZWN0IFg4Nl9NUFBBUlNFCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgZ2V0dGluZyBMaW51eCB0byBydW4gb24gYSBOVU1BUSAoSUJNL1NlcXVlbnQpCiAJICBOVU1BIG11bHRpcXVhZCBib3guIFRoaXMgY2hhbmdlcyB0aGUgd2F5IHRoYXQgcHJvY2Vzc29ycyBhcmUKIAkgIGJvb3RzdHJhcHBlZCwgYW5kIHVzZXMgQ2x1c3RlcmVkIExvZ2ljYWwgQVBJQyBhZGRyZXNzaW5nIG1vZGUgaW5zdGVhZAogCSAgb2YgRmxhdCBMb2dpY2FsLiAgWW91IHdpbGwgbmVlZCBhIG5ldyBseW54ZXIuZWxmIGZpbGUgdG8gZmxhc2ggeW91cgogCSAgZmlybXdhcmUgd2l0aCAtIHNlbmQgZW1haWwgdG8gPE1hcnRpbi5CbGlnaEB1cy5pYm0uY29tPi4KIAotY29uZmlnIFg4Nl9TVU1NSVQKLQlib29sICJTdW1taXQvRVhBIChJQk0geDQ0MCkiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgU01QCi0JaGVscAotCSAgVGhpcyBvcHRpb24gaXMgbmVlZGVkIGZvciBJQk0gc3lzdGVtcyB0aGF0IHVzZSB0aGUgU3VtbWl0L0VYQSBjaGlwc2V0LgotCSAgSW4gcGFydGljdWxhciwgaXQgaXMgbmVlZGVkIGZvciB0aGUgeDQ0MC4KLQotY29uZmlnIFg4Nl9FUzcwMDAKLQlib29sICJTdXBwb3J0IGZvciBVbmlzeXMgRVM3MDAwIElBMzIgc2VyaWVzIgotCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFVuaXN5cyBFUzcwMDAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcwotCSAgc3VwcG9zZWQgdG8gcnVuIG9uIGFuIElBMzItYmFzZWQgVW5pc3lzIEVTNzAwMCBzeXN0ZW0uCi0KLWNvbmZpZyBYODZfQklHU01QCi0JYm9vbCAiU3VwcG9ydCBmb3IgYmlnIFNNUCBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDggQ1BVcyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBTTVAKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBpcyBuZWVkZWQgZm9yIHRoZSBzeXN0ZW1zIHRoYXQgaGF2ZSBtb3JlIHRoYW4gOCBDUFVzCi0JICBhbmQgaWYgdGhlIHN5c3RlbSBpcyBub3Qgb2YgYW55IHN1Yi1hcmNoIHR5cGUgYWJvdmUuCi0KLWVuZGlmCi0KLWNvbmZpZyBYODZfVlNNUAotCWJvb2wgIlN1cHBvcnQgZm9yIFNjYWxlTVAgdlNNUCIKLQlzZWxlY3QgUEFSQVZJUlQKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0kKLQloZWxwCi0JICBTdXBwb3J0IGZvciBTY2FsZU1QIHZTTVAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcwotCSAgc3VwcG9zZWQgdG8gcnVuIG9uIHRoZXNlIEVNNjRULWJhc2VkIG1hY2hpbmVzLiAgT25seSBjaG9vc2UgdGhpcyBvcHRpb24KLQkgIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYWNoaW5lcy4KLQotZW5kY2hvaWNlCi0KIGNvbmZpZyBYODZfVklTV1MKIAlib29sICJTR0kgMzIwLzU0MCAoVmlzdWFsIFdvcmtzdGF0aW9uKSIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgIVg4Nl9WT1lBR0VSICYmIFg4Nl9NUFBBUlNFICYmIFBDSV9HT0RJUkVDVAotCWhlbHAKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgWDg2X01QUEFSU0UgJiYgUENJX0dPRElSRUNUCisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECisJLS0taGVscC0tLQogCSAgVGhlIFNHSSBWaXN1YWwgV29ya3N0YXRpb24gc2VyaWVzIGlzIGFuIElBMzItYmFzZWQgd29ya3N0YXRpb24KIAkgIGJhc2VkIG9uIFNHSSBzeXN0ZW1zIGNoaXBzIHdpdGggc29tZSBsZWdhY3kgUEMgaGFyZHdhcmUgYXR0YWNoZWQuCiAKQEAgLTM4MSwyMSArNDE3LDI1IEBACiAJICBBIGtlcm5lbCBjb21waWxlZCBmb3IgdGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiB3aWxsIHJ1biBvbiBnZW5lcmFsCiAJICBQQ3MgYXMgd2VsbC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc2dpLXZpc3dzLnR4dD4gZm9yIGRldGFpbHMuCiAKLWNvbmZpZyBYODZfUkRDMzIxWAotCWJvb2wgIlJEQyBSLTMyMXggU29DIgotCWRlcGVuZHMgb24gWDg2XzMyCi0Jc2VsZWN0IE00ODYKLQlzZWxlY3QgWDg2X1JFQk9PVEZJWFVQUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGlzIG5lZWRlZCBmb3IgUkRDIFItMzIxeCBzeXN0ZW0tb24tY2hpcCwgYWxzbyBrbm93bgotCSAgYXMgUi04NjEwLShHKS4KLQkgIElmIHlvdSBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSBjaGlwcywgeW91IHNob3VsZCBzYXkgTiBoZXJlLgorY29uZmlnIFg4Nl9TVU1NSVQKKwlib29sICJTdW1taXQvRVhBIChJQk0geDQ0MCkiCisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaXMgbmVlZGVkIGZvciBJQk0gc3lzdGVtcyB0aGF0IHVzZSB0aGUgU3VtbWl0L0VYQSBjaGlwc2V0LgorCSAgSW4gcGFydGljdWxhciwgaXQgaXMgbmVlZGVkIGZvciB0aGUgeDQ0MC4KKworY29uZmlnIFg4Nl9FUzcwMDAKKwlib29sICJVbmlzeXMgRVM3MDAwIElBMzIgc2VyaWVzIgorCWRlcGVuZHMgb24gWDg2XzMyX05PTl9TVEFOREFSRCAmJiBYODZfQklHU01QCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgVW5pc3lzIEVTNzAwMCBzeXN0ZW1zLiAgU2F5ICdZJyBoZXJlIGlmIHRoaXMga2VybmVsIGlzCisJICBzdXBwb3NlZCB0byBydW4gb24gYW4gSUEzMi1iYXNlZCBVbmlzeXMgRVM3MDAwIHN5c3RlbS4KIAogY29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUgogCWRlZl9ib29sIHkKIAlwcm9tcHQgIlNpbmdsZS1kZXB0aCBXQ0hBTiBvdXRwdXQiCiAJZGVwZW5kcyBvbiBYODYKLQloZWxwCisJLS0taGVscC0tLQogCSAgQ2FsY3VsYXRlIHNpbXBsZXIgL3Byb2MvPFBJRD4vd2NoYW4gdmFsdWVzLiBJZiB0aGlzIG9wdGlvbgogCSAgaXMgZGlzYWJsZWQgdGhlbiB3Y2hhbiB2YWx1ZXMgd2lsbCByZWN1cnNlIGJhY2sgdG8gdGhlCiAJICBjYWxsZXIgZnVuY3Rpb24uIFRoaXMgcHJvdmlkZXMgbW9yZSBhY2N1cmF0ZSB3Y2hhbiB2YWx1ZXMsCkBAIC00MDUsNyArNDQ1LDcgQEAKIAogbWVudWNvbmZpZyBQQVJBVklSVF9HVUVTVAogCWJvb2wgIlBhcmF2aXJ0dWFsaXplZCBndWVzdCBzdXBwb3J0IgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyByZWxhdGVkIHRvIHJ1bm5pbmcgTGludXggdW5kZXIKIAkgIHZhcmlvdXMgaHlwZXJ2aXNvcnMuICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLgogCkBAIC00MTksOCArNDU5LDcgQEAKIAlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCIKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFZNSSBwcm92aWRlcyBhIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2UgdG8gdGhlIFZNd2FyZSBFU1ggc2VydmVyCiAJICAoaXQgY291bGQgYmUgdXNlZCBieSBvdGhlciBoeXBlcnZpc29ycyBpbiB0aGVvcnkgdG9vLCBidXQgaXMgbm90CiAJICBhdCB0aGUgbW9tZW50KSwgYnkgbGlua2luZyB0aGUga2VybmVsIHRvIGEgR1BMLWVkIFJPTSBtb2R1bGUKQEAgLTQzMCw4ICs0NjksNyBAQAogCWJvb2wgIktWTSBwYXJhdmlydHVhbGl6ZWQgY2xvY2siCiAJc2VsZWN0IFBBUkFWSVJUCiAJc2VsZWN0IFBBUkFWSVJUX0NMT0NLCi0JZGVwZW5kcyBvbiAhWDg2X1ZPWUFHRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVHVybmluZyBvbiB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IHlvdSB0byBydW4gYSBwYXJhdmlydHVhbGl6ZWQgY2xvY2sKIAkgIHdoZW4gcnVubmluZyBvdmVyIHRoZSBLVk0gaHlwZXJ2aXNvci4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgUElUCiAJICAob3IgcHJvYmFibHkgb3RoZXIpIGVtdWxhdGlvbiBieSB0aGUgdW5kZXJseWluZyBkZXZpY2UgbW9kZWwsIHRoZSBob3N0CkBAIC00NDEsMTcgKzQ3OSwxNSBAQAogY29uZmlnIEtWTV9HVUVTVAogCWJvb2wgIktWTSBHdWVzdCBzdXBwb3J0IgogCXNlbGVjdCBQQVJBVklSVAotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCi0JaGVscAotCSBUaGlzIG9wdGlvbiBlbmFibGVzIHZhcmlvdXMgb3B0aW1pemF0aW9ucyBmb3IgcnVubmluZyB1bmRlciB0aGUgS1ZNCi0JIGh5cGVydmlzb3IuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB2YXJpb3VzIG9wdGltaXphdGlvbnMgZm9yIHJ1bm5pbmcgdW5kZXIgdGhlIEtWTQorCSAgaHlwZXJ2aXNvci4KIAogc291cmNlICJhcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZyIKIAogY29uZmlnIFBBUkFWSVJUCiAJYm9vbCAiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlIgotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgY2hhbmdlcyB0aGUga2VybmVsIHNvIGl0IGNhbiBtb2RpZnkgaXRzZWxmIHdoZW4gaXQgaXMgcnVuCiAJICB1bmRlciBhIGh5cGVydmlzb3IsIHBvdGVudGlhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSBzaWduaWZpY2FudGx5CiAJICBvdmVyIGZ1bGwgdmlydHVhbGl6YXRpb24uICBIb3dldmVyLCB3aGVuIHJ1biB3aXRob3V0IGEgaHlwZXJ2aXNvcgpAQCAtNDY0LDUxICs1MDAsNTEgQEAKIGVuZGlmCiAKIGNvbmZpZyBQQVJBVklSVF9ERUJVRwotICAgICAgIGJvb2wgInBhcmF2aXJ0LW9wcyBkZWJ1Z2dpbmciCi0gICAgICAgZGVwZW5kcyBvbiBQQVJBVklSVCAmJiBERUJVR19LRVJORUwKLSAgICAgICBoZWxwCi0gICAgICAgICBFbmFibGUgdG8gZGVidWcgcGFyYXZpcnRfb3BzIGludGVybmFscy4gIFNwZWNpZmljYWxseSwgQlVHIGlmCi0JIGEgcGFyYXZpcnRfb3AgaXMgbWlzc2luZyB3aGVuIGl0IGlzIGNhbGxlZC4KKwlib29sICJwYXJhdmlydC1vcHMgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gUEFSQVZJUlQgJiYgREVCVUdfS0VSTkVMCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHRvIGRlYnVnIHBhcmF2aXJ0X29wcyBpbnRlcm5hbHMuICBTcGVjaWZpY2FsbHksIEJVRyBpZgorCSAgYSBwYXJhdmlydF9vcCBpcyBtaXNzaW5nIHdoZW4gaXQgaXMgY2FsbGVkLgogCiBjb25maWcgTUVNVEVTVAogCWJvb2wgIk1lbXRlc3QiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICdtZW10ZXN0Jywgd2hpY2ggYWxsb3dzIG1lbXRlc3QKIAkgIHRvIGJlIHNldC4KLQkJbWVtdGVzdD0wLCBtZWFuIGRpc2FibGVkOyAtLSBkZWZhdWx0Ci0JCW1lbXRlc3Q9MSwgbWVhbiBkbyAxIHRlc3QgcGF0dGVybjsKLQkJLi4uCi0JCW1lbXRlc3Q9NCwgbWVhbiBkbyA0IHRlc3QgcGF0dGVybnMuCisJICAgICAgICBtZW10ZXN0PTAsIG1lYW4gZGlzYWJsZWQ7IC0tIGRlZmF1bHQKKwkgICAgICAgIG1lbXRlc3Q9MSwgbWVhbiBkbyAxIHRlc3QgcGF0dGVybjsKKwkgICAgICAgIC4uLgorCSAgICAgICAgbWVtdGVzdD00LCBtZWFuIGRvIDQgdGVzdCBwYXR0ZXJucy4KIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKIGNvbmZpZyBYODZfU1VNTUlUX05VTUEKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfMzIgJiYgTlVNQSAmJiBYODZfR0VORVJJQ0FSQ0gKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBOVU1BICYmIFg4Nl8zMl9OT05fU1RBTkRBUkQKIAogY29uZmlnIFg4Nl9DWUNMT05FX1RJTUVSCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2X0dFTkVSSUNBUkNICisJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECiAKIHNvdXJjZSAiYXJjaC94ODYvS2NvbmZpZy5jcHUiCiAKIGNvbmZpZyBIUEVUX1RJTUVSCiAJZGVmX2Jvb2wgWDg2XzY0CiAJcHJvbXB0ICJIUEVUIFRpbWVyIFN1cHBvcnQiIGlmIFg4Nl8zMgotCWhlbHAKLSAgICAgICAgIFVzZSB0aGUgSUEtUEMgSFBFVCAoSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIpIHRvIG1hbmFnZQotICAgICAgICAgdGltZSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBQSVQgYW5kIFJUQywgaWYgYSBIUEVUIGlzCi0gICAgICAgICBwcmVzZW50LgotICAgICAgICAgSFBFVCBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIHRpbWVyIHJlcGxhY2luZyBsZWdhY3kgODI1NHMuCi0gICAgICAgICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QCi0gICAgICAgICBzeXN0ZW1zLCB1bmxpa2UgdGhlIFRTQywgYnV0IGl0IGlzIG1vcmUgZXhwZW5zaXZlIHRvIGFjY2VzcywKLSAgICAgICAgIGFzIGl0IGlzIG9mZi1jaGlwLiAgWW91IGNhbiBmaW5kIHRoZSBIUEVUIHNwZWMgYXQKLSAgICAgICAgIDxodHRwOi8vd3d3LmludGVsLmNvbS9oYXJkd2FyZWRlc2lnbi9ocGV0c3BlY18xLnBkZj4uCisJLS0taGVscC0tLQorCSAgVXNlIHRoZSBJQS1QQyBIUEVUIChIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lcikgdG8gbWFuYWdlCisJICB0aW1lIGluIHByZWZlcmVuY2UgdG8gdGhlIFBJVCBhbmQgUlRDLCBpZiBhIEhQRVQgaXMKKwkgIHByZXNlbnQuCisJICBIUEVUIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gdGltZXIgcmVwbGFjaW5nIGxlZ2FjeSA4MjU0cy4KKwkgIFRoZSBIUEVUIHByb3ZpZGVzIGEgc3RhYmxlIHRpbWUgYmFzZSBvbiBTTVAKKwkgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLAorCSAgYXMgaXQgaXMgb2ZmLWNoaXAuICBZb3UgY2FuIGZpbmQgdGhlIEhQRVQgc3BlYyBhdAorCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjXzEucGRmPi4KIAotICAgICAgICAgWW91IGNhbiBzYWZlbHkgY2hvb3NlIFkgaGVyZS4gIEhvd2V2ZXIsIEhQRVQgd2lsbCBvbmx5IGJlCi0gICAgICAgICBhY3RpdmF0ZWQgaWYgdGhlIHBsYXRmb3JtIGFuZCB0aGUgQklPUyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KLSAgICAgICAgIE90aGVyd2lzZSB0aGUgODI1NCB3aWxsIGJlIHVzZWQgZm9yIHRpbWluZyBzZXJ2aWNlcy4KKwkgIFlvdSBjYW4gc2FmZWx5IGNob29zZSBZIGhlcmUuICBIb3dldmVyLCBIUEVUIHdpbGwgb25seSBiZQorCSAgYWN0aXZhdGVkIGlmIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIEJJT1Mgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisJICBPdGhlcndpc2UgdGhlIDgyNTQgd2lsbCBiZSB1c2VkIGZvciB0aW1pbmcgc2VydmljZXMuCiAKLSAgICAgICAgIENob29zZSBOIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBsZWdhY3kgODI1NCB0aW1lci4KKwkgIENob29zZSBOIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBsZWdhY3kgODI1NCB0aW1lci4KIAogY29uZmlnIEhQRVRfRU1VTEFURV9SVEMKIAlkZWZfYm9vbCB5CkBAIC01MTksNyArNTU1LDcgQEAKIGNvbmZpZyBETUkKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgRE1JIHNjYW5uaW5nIiBpZiBFTUJFRERFRAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGVkIHNjYW5uaW5nIG9mIERNSSB0byBpZGVudGlmeSBtYWNoaW5lIHF1aXJrcy4gU2F5IFkKIAkgIGhlcmUgdW5sZXNzIHlvdSBoYXZlIHZlcmlmaWVkIHRoYXQgeW91ciBzZXR1cCBpcyBub3QKIAkgIGFmZmVjdGVkIGJ5IGVudHJpZXMgaW4gdGhlIERNSSBibGFja2xpc3QuIFJlcXVpcmVkIGJ5IFBOUApAQCAtNTMxLDcgKzU2Nyw3IEBACiAJc2VsZWN0IFNXSU9UTEIKIAlzZWxlY3QgQUdQCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIGZ1bGwgRE1BIGFjY2VzcyBvZiBkZXZpY2VzIHdpdGggMzJiaXQgbWVtb3J5IGFjY2VzcyBvbmx5CiAJICBvbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDNHQi4gVGhpcyBpcyB1c3VhbGx5IG5lZWRlZCBmb3IgVVNCLAogCSAgc291bmQsIG1hbnkgSURFL1NBVEEgY2hpcHNldHMgYW5kIHNvbWUgb3RoZXIgZGV2aWNlcy4KQEAgLTU0Niw3ICs1ODIsNyBAQAogCWJvb2wgIklCTSBDYWxnYXJ5IElPTU1VIHN1cHBvcnQiCiAJc2VsZWN0IFNXSU9UTEIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIGhhcmR3YXJlIElPTU1VcyBpbiBJQk0ncyB4U2VyaWVzIHgzNjYgYW5kIHg0NjAKIAkgIHN5c3RlbXMuIE5lZWRlZCB0byBydW4gc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiAzR0Igb2YgbWVtb3J5CiAJICBwcm9wZXJseSB3aXRoIDMyLWJpdCBQQ0kgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IERBQwpAQCAtNTY0LDcgKzYwMCw3IEBACiAJZGVmX2Jvb2wgeQogCXByb21wdCAiU2hvdWxkIENhbGdhcnkgYmUgZW5hYmxlZCBieSBkZWZhdWx0PyIKIAlkZXBlbmRzIG9uIENBTEdBUllfSU9NTVUKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2hvdWxkIENhbGdhcnkgYmUgZW5hYmxlZCBieSBkZWZhdWx0PyBpZiB5b3UgY2hvb3NlICd5JywgQ2FsZ2FyeQogCSAgd2lsbCBiZSB1c2VkIChpZiBpdCBleGlzdHMpLiBJZiB5b3UgY2hvb3NlICduJywgQ2FsZ2FyeSB3aWxsIG5vdCBiZQogCSAgdXNlZCBldmVuIGlmIGl0IGV4aXN0cy4gSWYgeW91IGNob29zZSAnbicgYW5kIHdvdWxkIGxpa2UgdG8gdXNlCkBAIC01NzYsNyArNjEyLDcgQEAKIAlzZWxlY3QgU1dJT1RMQgogCXNlbGVjdCBQQ0lfTVNJCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJICYmIEFDUEkKLQloZWxwCisJLS0taGVscC0tLQogCSAgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIGVuYWJsZSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgaGFyZHdhcmUgaW4KIAkgIHlvdXIgc3lzdGVtLiBBbiBJT01NVSBpcyBhIGhhcmR3YXJlIGNvbXBvbmVudCB3aGljaCBwcm92aWRlcwogCSAgcmVtYXBwaW5nIG9mIERNQSBtZW1vcnkgYWNjZXNzZXMgZnJvbSBkZXZpY2VzLiBXaXRoIGFuIEFNRCBJT01NVSB5b3UKQEAgLTU5MSw3ICs2MjcsNyBAQAogCWJvb2wgIkV4cG9ydCBBTUQgSU9NTVUgc3RhdGlzdGljcyB0byBkZWJ1Z2ZzIgogCWRlcGVuZHMgb24gQU1EX0lPTU1VCiAJc2VsZWN0IERFQlVHX0ZTCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY29kZSBpbiB0aGUgQU1EIElPTU1VIGRyaXZlciB0byBjb2xsZWN0IHZhcmlvdXMKIAkgIHN0YXRpc3RpY3MgYWJvdXQgd2hhdHMgaGFwcGVuaW5nIGluIHRoZSBkcml2ZXIgYW5kIGV4cG9ydHMgdGhhdAogCSAgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzLgpAQCAtNjAwLDcgKzYzNiw3IEBACiAjIG5lZWQgdGhpcyBhbHdheXMgc2VsZWN0ZWQgYnkgSU9NTVUgZm9yIHRoZSBWSUEgd29ya2Fyb3VuZAogY29uZmlnIFNXSU9UTEIKIAlkZWZfYm9vbCB5IGlmIFg4Nl82NAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBzb2Z0d2FyZSBib3VuY2UgYnVmZmVycyB1c2VkIG9uIHg4Ni02NCBzeXN0ZW1zCiAJICB3aGljaCBkb24ndCBoYXZlIGEgaGFyZHdhcmUgSU9NTVUgKGUuZy4gdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbgogCSAgb2YgSW50ZWwncyB4ODYtNjQgQ1BVcykuIFVzaW5nIHRoaXMgUENJIGRldmljZXMgd2hpY2ggY2FuIG9ubHkKQEAgLTYxOCw3ICs2NTQsNyBAQAogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFNNUCAmJiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IENQVU1BU0tfT0ZGU1RBQ0sKIAlkZWZhdWx0IG4KLQloZWxwCisJLS0taGVscC0tLQogCSAgQ29uZmlndXJlIG1heGltdW0gbnVtYmVyIG9mIENQVVMgYW5kIE5VTUEgTm9kZXMgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNjI5LDcgKzY2NSw3IEBACiAJZGVmYXVsdCAiNDA5NiIgaWYgTUFYU01QCiAJZGVmYXVsdCAiMzIiIGlmIFNNUCAmJiAoWDg2X05VTUFRIHx8IFg4Nl9TVU1NSVQgfHwgWDg2X0JJR1NNUCB8fCBYODZfRVM3MDAwKQogCWRlZmF1bHQgIjgiIGlmIFNNUAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyB3aGljaCB0aGlzCiAJICBrZXJuZWwgd2lsbCBzdXBwb3J0LiAgVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIDUxMiBhbmQgdGhlCiAJICBtaW5pbXVtIHZhbHVlIHdoaWNoIG1ha2VzIHNlbnNlIGlzIDIuCkBAIC02NDAsNyArNjc2LDcgQEAKIGNvbmZpZyBTQ0hFRF9TTVQKIAlib29sICJTTVQgKEh5cGVydGhyZWFkaW5nKSBzY2hlZHVsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl9IVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTTVQgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbiBtYWtpbmcKIAkgIHdoZW4gZGVhbGluZyB3aXRoIEludGVsIFBlbnRpdW0gNCBjaGlwcyB3aXRoIEh5cGVyVGhyZWFkaW5nIGF0IGEKIAkgIGNvc3Qgb2Ygc2xpZ2h0bHkgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5CkBAIC02NTAsNyArNjg2LDcgQEAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJNdWx0aS1jb3JlIHNjaGVkdWxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gWDg2X0hUCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIE11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbgogCSAgbWFraW5nIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWNvcmUgQ1BVIGNoaXBzIGF0IGEgY29zdCBvZiBzbGlnaHRseQogCSAgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KQEAgLTY1OSw4ICs2OTUsOCBAQAogCiBjb25maWcgWDg2X1VQX0FQSUMKIAlib29sICJMb2NhbCBBUElDIHN1cHBvcnQgb24gdW5pcHJvY2Vzc29ycyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhU01QICYmICEoWDg2X1ZPWUFHRVIgfHwgWDg2X0dFTkVSSUNBUkNIKQotCWhlbHAKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhU01QICYmICFYODZfMzJfTk9OX1NUQU5EQVJECisJLS0taGVscC0tLQogCSAgQSBsb2NhbCBBUElDIChBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIpIGlzIGFuCiAJICBpbnRlZ3JhdGVkIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSBDUFUuIElmIHlvdSBoYXZlIGEgc2luZ2xlLUNQVQogCSAgc3lzdGVtIHdoaWNoIGhhcyBhIHByb2Nlc3NvciB3aXRoIGEgbG9jYWwgQVBJQywgeW91IGNhbiBzYXkgWSBoZXJlIHRvCkBAIC02NzMsNyArNzA5LDcgQEAKIGNvbmZpZyBYODZfVVBfSU9BUElDCiAJYm9vbCAiSU8tQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMiCiAJZGVwZW5kcyBvbiBYODZfVVBfQVBJQwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBbiBJTy1BUElDIChJL08gQWR2YW5jZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyKSBpcyBhbgogCSAgU01QLWNhcGFibGUgcmVwbGFjZW1lbnQgZm9yIFBDLXN0eWxlIGludGVycnVwdCBjb250cm9sbGVycy4gTW9zdAogCSAgU01QIHN5c3RlbXMgYW5kIG1hbnkgcmVjZW50IHVuaXByb2Nlc3NvciBzeXN0ZW1zIGhhdmUgb25lLgpAQCAtNjg0LDExICs3MjAsMTEgQEAKIAogY29uZmlnIFg4Nl9MT0NBTF9BUElDCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2XzY0IHx8IChYODZfMzIgJiYgKFg4Nl9VUF9BUElDIHx8IChTTVAgJiYgIVg4Nl9WT1lBR0VSKSB8fCBYODZfR0VORVJJQ0FSQ0gpKQorCWRlcGVuZHMgb24gWDg2XzY0IHx8IFNNUCB8fCBYODZfMzJfTk9OX1NUQU5EQVJEIHx8IFg4Nl9VUF9BUElDCiAKIGNvbmZpZyBYODZfSU9fQVBJQwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIChYODZfVVBfSU9BUElDIHx8IChTTVAgJiYgIVg4Nl9WT1lBR0VSKSB8fCBYODZfR0VORVJJQ0FSQ0gpKQorCWRlcGVuZHMgb24gWDg2XzY0IHx8IFNNUCB8fCBYODZfMzJfTk9OX1NUQU5EQVJEIHx8IFg4Nl9VUF9BUElDCiAKIGNvbmZpZyBYODZfVklTV1NfQVBJQwogCWRlZl9ib29sIHkKQEAgLTY5OCw3ICs3MzQsNyBAQAogCWJvb2wgIlJlcm91dGUgZm9yIGJyb2tlbiBib290IElSUXMiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBYODZfSU9fQVBJQwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgd29ya2Fyb3VuZCB0aGF0IGZpeGVzIGEgc291cmNlIG9mCiAJICBzcHVyaW91cyBpbnRlcnJ1cHRzLiBUaGlzIGlzIHJlY29tbWVuZGVkIHdoZW4gdGhyZWFkZWQKIAkgIGludGVycnVwdCBoYW5kbGluZyBpcyB1c2VkIG9uIHN5c3RlbXMgd2hlcmUgdGhlIGdlbmVyYXRpb24gb2YKQEAgLTcyMCw3ICs3NTYsNiBAQAogCiBjb25maWcgWDg2X01DRQogCWJvb2wgIk1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIgotCWRlcGVuZHMgb24gIVg4Nl9WT1lBR0VSCiAJLS0taGVscC0tLQogCSAgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gc3VwcG9ydCBhbGxvd3MgdGhlIHByb2Nlc3NvciB0byBub3RpZnkgdGhlCiAJICBrZXJuZWwgaWYgaXQgZGV0ZWN0cyBhIHByb2JsZW0gKGUuZy4gb3ZlcmhlYXRpbmcsIGNvbXBvbmVudCBmYWlsdXJlKS4KQEAgLTczOSw3ICs3NzQsNyBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkludGVsIE1DRSBmZWF0dXJlcyIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBYODZfTUNFICYmIFg4Nl9MT0NBTF9BUElDCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgICBBZGRpdGlvbmFsIHN1cHBvcnQgZm9yIGludGVsIHNwZWNpZmljIE1DRSBmZWF0dXJlcyBzdWNoIGFzCiAJICAgdGhlIHRoZXJtYWwgbW9uaXRvci4KIApAQCAtNzQ3LDE0ICs3ODIsMTQgQEAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJBTUQgTUNFIGZlYXR1cmVzIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFg4Nl9NQ0UgJiYgWDg2X0xPQ0FMX0FQSUMKLQloZWxwCisJLS0taGVscC0tLQogCSAgIEFkZGl0aW9uYWwgc3VwcG9ydCBmb3IgQU1EIHNwZWNpZmljIE1DRSBmZWF0dXJlcyBzdWNoIGFzCiAJICAgdGhlIERSQU0gRXJyb3IgVGhyZXNob2xkLgogCiBjb25maWcgWDg2X01DRV9OT05GQVRBTAogCXRyaXN0YXRlICJDaGVjayBmb3Igbm9uLWZhdGFsIGVycm9ycyBvbiBBTUQgQXRobG9uL0R1cm9uIC8gSW50ZWwgUGVudGl1bSA0IgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFg4Nl9NQ0UKLQloZWxwCisJLS0taGVscC0tLQogCSAgRW5hYmxpbmcgdGhpcyBmZWF0dXJlIHN0YXJ0cyBhIHRpbWVyIHRoYXQgdHJpZ2dlcnMgZXZlcnkgNSBzZWNvbmRzIHdoaWNoCiAJICB3aWxsIGxvb2sgYXQgdGhlIG1hY2hpbmUgY2hlY2sgcmVnaXN0ZXJzIHRvIHNlZSBpZiBhbnl0aGluZyBoYXBwZW5lZC4KIAkgIE5vbi1mYXRhbCBwcm9ibGVtcyBhdXRvbWF0aWNhbGx5IGdldCBjb3JyZWN0ZWQgKGJ1dCBzdGlsbCBsb2dnZWQpLgpAQCAtNzY3LDcgKzgwMiw3IEBACiBjb25maWcgWDg2X01DRV9QNFRIRVJNQUwKIAlib29sICJjaGVjayBmb3IgUDQgdGhlcm1hbCB0aHJvdHRsaW5nIGludGVycnVwdC4iCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgWDg2X01DRSAmJiAoWDg2X1VQX0FQSUMgfHwgU01QKQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGluZyB0aGlzIGZlYXR1cmUgd2lsbCBjYXVzZSBhIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZCB3aGVuIHRoZSBQNAogCSAgZW50ZXJzIHRoZXJtYWwgdGhyb3R0bGluZy4KIApAQCAtNzc1LDExICs4MTAsMTEgQEAKIAlib29sICJFbmFibGUgVk04NiBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAotICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IHByb2dyYW1zIGxpa2UgRE9TRU1VIHRvIHJ1biAxNi1iaXQgbGVnYWN5CisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYnkgcHJvZ3JhbXMgbGlrZSBET1NFTVUgdG8gcnVuIDE2LWJpdCBsZWdhY3kKIAkgIGNvZGUgb24gWDg2IHByb2Nlc3NvcnMuIEl0IGFsc28gbWF5IGJlIG5lZWRlZCBieSBzb2Z0d2FyZSBsaWtlCi0gICAgICAgICAgWEZyZWU4NiB0byBpbml0aWFsaXplIHNvbWUgdmlkZW8gY2FyZHMgdmlhIEJJT1MuIERpc2FibGluZyB0aGlzCi0gICAgICAgICAgb3B0aW9uIHNhdmVzIGFib3V0IDZrLgorCSAgWEZyZWU4NiB0byBpbml0aWFsaXplIHNvbWUgdmlkZW8gY2FyZHMgdmlhIEJJT1MuIERpc2FibGluZyB0aGlzCisJICBvcHRpb24gc2F2ZXMgYWJvdXQgNmsuCiAKIGNvbmZpZyBUT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIHN1cHBvcnQiCkBAIC04NTMsMzMgKzg4OCwzMyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1pY3JvY29kZS4KIAogY29uZmlnIE1JQ1JPQ09ERV9JTlRFTAotICAgICAgIGJvb2wgIkludGVsIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQiCi0gICAgICAgZGVwZW5kcyBvbiBNSUNST0NPREUKLSAgICAgICBkZWZhdWx0IE1JQ1JPQ09ERQotICAgICAgIHNlbGVjdCBGV19MT0FERVIKLSAgICAgICAtLWhlbHAtLS0KLSAgICAgICAgIFRoaXMgb3B0aW9ucyBlbmFibGVzIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQgZm9yIEludGVsCi0gICAgICAgICBwcm9jZXNzb3JzLgorCWJvb2wgIkludGVsIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNSUNST0NPREUKKwlkZWZhdWx0IE1JQ1JPQ09ERQorCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbnMgZW5hYmxlcyBtaWNyb2NvZGUgcGF0Y2ggbG9hZGluZyBzdXBwb3J0IGZvciBJbnRlbAorCSAgcHJvY2Vzc29ycy4KIAotICAgICAgICAgRm9yIGxhdGVzdCBuZXdzIGFuZCBpbmZvcm1hdGlvbiBvbiBvYnRhaW5pbmcgYWxsIHRoZSByZXF1aXJlZAotICAgICAgICAgSW50ZWwgaW5ncmVkaWVudHMgZm9yIHRoaXMgZHJpdmVyLCBjaGVjazoKLSAgICAgICAgIDxodHRwOi8vd3d3LnVyYmFubXl0aC5vcmcvbWljcm9jb2RlLz4uCisJICBGb3IgbGF0ZXN0IG5ld3MgYW5kIGluZm9ybWF0aW9uIG9uIG9idGFpbmluZyBhbGwgdGhlIHJlcXVpcmVkCisJICBJbnRlbCBpbmdyZWRpZW50cyBmb3IgdGhpcyBkcml2ZXIsIGNoZWNrOgorCSAgPGh0dHA6Ly93d3cudXJiYW5teXRoLm9yZy9taWNyb2NvZGUvPi4KIAogY29uZmlnIE1JQ1JPQ09ERV9BTUQKLSAgICAgICBib29sICJBTUQgbWljcm9jb2RlIHBhdGNoIGxvYWRpbmcgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIE1JQ1JPQ09ERQotICAgICAgIHNlbGVjdCBGV19MT0FERVIKLSAgICAgICAtLWhlbHAtLS0KLSAgICAgICAgIElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24sIG1pY3JvY29kZSBwYXRjaCBsb2FkaW5nIHN1cHBvcnQgZm9yIEFNRAotCSBwcm9jZXNzb3JzIHdpbGwgYmUgZW5hYmxlZC4KKwlib29sICJBTUQgbWljcm9jb2RlIHBhdGNoIGxvYWRpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1JQ1JPQ09ERQorCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uLCBtaWNyb2NvZGUgcGF0Y2ggbG9hZGluZyBzdXBwb3J0IGZvciBBTUQKKwkgIHByb2Nlc3NvcnMgd2lsbCBiZSBlbmFibGVkLgogCi0gICBjb25maWcgTUlDUk9DT0RFX09MRF9JTlRFUkZBQ0UKK2NvbmZpZyBNSUNST0NPREVfT0xEX0lOVEVSRkFDRQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1JQ1JPQ09ERQogCiBjb25maWcgWDg2X01TUgogCXRyaXN0YXRlICIvZGV2L2NwdS8qL21zciAtIE1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyIHN1cHBvcnQiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgZGV2aWNlIGdpdmVzIHByaXZpbGVnZWQgcHJvY2Vzc2VzIGFjY2VzcyB0byB0aGUgeDg2CiAJICBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpLiAgSXQgaXMgYSBjaGFyYWN0ZXIgZGV2aWNlIHdpdGgKIAkgIG1ham9yIDIwMiBhbmQgbWlub3JzIDAgdG8gMzEgZm9yIC9kZXYvY3B1LzAvbXNyIHRvIC9kZXYvY3B1LzMxL21zci4KQEAgLTg4OCw3ICs5MjMsNyBAQAogCiBjb25maWcgWDg2X0NQVUlECiAJdHJpc3RhdGUgIi9kZXYvY3B1LyovY3B1aWQgLSBDUFUgaW5mb3JtYXRpb24gc3VwcG9ydCIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBkZXZpY2UgZ2l2ZXMgcHJvY2Vzc2VzIGFjY2VzcyB0byB0aGUgeDg2IENQVUlEIGluc3RydWN0aW9uIHRvCiAJICBiZSBleGVjdXRlZCBvbiBhIHNwZWNpZmljIHByb2Nlc3Nvci4gIEl0IGlzIGEgY2hhcmFjdGVyIGRldmljZQogCSAgd2l0aCBtYWpvciAyMDMgYW5kIG1pbm9ycyAwIHRvIDMxIGZvciAvZGV2L2NwdS8wL2NwdWlkIHRvCkBAIC05NDAsNyArOTc1LDcgQEAKIGNvbmZpZyBISUdITUVNNEcKIAlib29sICI0R0IiCiAJZGVwZW5kcyBvbiAhWDg2X05VTUFRCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBoYXZlIGEgMzItYml0IHByb2Nlc3NvciBhbmQgYmV0d2VlbiAxIGFuZCA0CiAJICBnaWdhYnl0ZXMgb2YgcGh5c2ljYWwgUkFNLgogCkBAIC05NDgsNyArOTgzLDcgQEAKIAlib29sICI2NEdCIgogCWRlcGVuZHMgb24gIU0zODYgJiYgIU00ODYKIAlzZWxlY3QgWDg2X1BBRQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBpZiB5b3UgaGF2ZSBhIDMyLWJpdCBwcm9jZXNzb3IgYW5kIG1vcmUgdGhhbiA0CiAJICBnaWdhYnl0ZXMgb2YgcGh5c2ljYWwgUkFNLgogCkBAIC05NTksNyArOTk0LDcgQEAKIAlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IFZNU1BMSVRfM0cKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhlIGRlc2lyZWQgc3BsaXQgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgbWVtb3J5LgogCiAJICBJZiB0aGUgYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbCBpcyBsZXNzIHRoYW4gdGhlCkBAIC0xMDA1LDIwICsxMDQwLDIwIEBACiBjb25maWcgWDg2X1BBRQogCWJvb2wgIlBBRSAoUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb24pIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgIUhJR0hNRU00RwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBQQUUgaXMgcmVxdWlyZWQgZm9yIE5YIHN1cHBvcnQsIGFuZCBmdXJ0aGVybW9yZSBlbmFibGVzCiAJICBsYXJnZXIgc3dhcHNwYWNlIHN1cHBvcnQgZm9yIG5vbi1vdmVyY29tbWl0IHB1cnBvc2VzLiBJdAogCSAgaGFzIHRoZSBjb3N0IG9mIG1vcmUgcGFnZXRhYmxlIGxvb2t1cCBvdmVyaGVhZCwgYW5kIGFsc28KIAkgIGNvbnN1bWVzIG1vcmUgcGFnZXRhYmxlIHNwYWNlIHBlciBwcm9jZXNzLgogCiBjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAotICAgICAgIGRlZl9ib29sIFg4Nl82NCB8fCBYODZfUEFFCisJZGVmX2Jvb2wgWDg2XzY0IHx8IFg4Nl9QQUUKIAogY29uZmlnIERJUkVDVF9HQlBBR0VTCiAJYm9vbCAiRW5hYmxlIDFHQiBwYWdlcyBmb3Iga2VybmVsIHBhZ2V0YWJsZXMiIGlmIEVNQkVEREVECiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYODZfNjQKLQloZWxwCisJLS0taGVscC0tLQogCSAgQWxsb3cgdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyB0byB1c2UgMUdCIHBhZ2VzIG9uIENQVXMgdGhhdAogCSAgc3VwcG9ydCBpdC4gVGhpcyBjYW4gaW1wcm92ZSB0aGUga2VybmVsJ3MgcGVyZm9ybWFuY2UgYSB0aW55IGJpdCBieQogCSAgcmVkdWNpbmcgVExCIHByZXNzdXJlLiBJZiBpbiBkb3VidCwgc2F5ICJZIi4KQEAgLTEwMjgsOSArMTA2Myw4IEBACiAJYm9vbCAiTnVtYSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTTVAKIAlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIEhJR0hNRU02NEcgJiYgKFg4Nl9OVU1BUSB8fCBYODZfQklHU01QIHx8IFg4Nl9TVU1NSVQgJiYgQUNQSSkgJiYgRVhQRVJJTUVOVEFMKQotCWRlZmF1bHQgbiBpZiBYODZfUEMKIAlkZWZhdWx0IHkgaWYgKFg4Nl9OVU1BUSB8fCBYODZfU1VNTUlUIHx8IFg4Nl9CSUdTTVApCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBOVU1BIChOb24gVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBzdXBwb3J0LgogCiAJICBUaGUga2VybmVsIHdpbGwgdHJ5IHRvIGFsbG9jYXRlIG1lbW9yeSB1c2VkIGJ5IGEgQ1BVIG9uIHRoZQpAQCAtMTA1MywxOSArMTA4NywxOSBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIk9sZCBzdHlsZSBBTUQgT3B0ZXJvbiBOVU1BIGRldGVjdGlvbiIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBOVU1BICYmIFBDSQotCWhlbHAKLQkgRW5hYmxlIEs4IE5VTUEgbm9kZSB0b3BvbG9neSBkZXRlY3Rpb24uICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYKLQkgeW91IGhhdmUgYSBtdWx0aSBwcm9jZXNzb3IgQU1EIEs4IHN5c3RlbS4gVGhpcyB1c2VzIGFuIG9sZAotCSBtZXRob2QgdG8gcmVhZCB0aGUgTlVNQSBjb25maWd1cmF0aW9uIGRpcmVjdGx5IGZyb20gdGhlIGJ1aWx0aW4KLQkgTm9ydGhicmlkZ2Ugb2YgT3B0ZXJvbi4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFg4Nl82NF9BQ1BJX05VTUEKLQkgaW5zdGVhZCwgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4KKwktLS1oZWxwLS0tCisJICBFbmFibGUgSzggTlVNQSBub2RlIHRvcG9sb2d5IGRldGVjdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZgorCSAgeW91IGhhdmUgYSBtdWx0aSBwcm9jZXNzb3IgQU1EIEs4IHN5c3RlbS4gVGhpcyB1c2VzIGFuIG9sZAorCSAgbWV0aG9kIHRvIHJlYWQgdGhlIE5VTUEgY29uZmlndXJhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBidWlsdGluCisJICBOb3J0aGJyaWRnZSBvZiBPcHRlcm9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWDg2XzY0X0FDUElfTlVNQQorCSAgaW5zdGVhZCwgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4KIAogY29uZmlnIFg4Nl82NF9BQ1BJX05VTUEKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJBQ1BJIE5VTUEgZGV0ZWN0aW9uIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIE5VTUEgJiYgQUNQSSAmJiBQQ0kKIAlzZWxlY3QgQUNQSV9OVU1BCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBBQ1BJIFNSQVQgYmFzZWQgbm9kZSB0b3BvbG9neSBkZXRlY3Rpb24uCiAKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KQEAgLTEwODAsNyArMTExNCw3IEBACiBjb25maWcgTlVNQV9FTVUKIAlib29sICJOVU1BIGVtdWxhdGlvbiIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBOVU1BCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBOVU1BIGVtdWxhdGlvbi4gQSBmbGF0IG1hY2hpbmUgd2lsbCBiZSBzcGxpdAogCSAgaW50byB2aXJ0dWFsIG5vZGVzIHdoZW4gYm9vdGVkIHdpdGggIm51bWE9ZmFrZT1OIiwgd2hlcmUgTiBpcyB0aGUKIAkgIG51bWJlciBvZiBub2Rlcy4gVGhpcyBpcyBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLgpAQCAtMTA5MywxMSArMTEyNywxMSBAQAogCWRlZmF1bHQgIjQiIGlmIFg4Nl9OVU1BUQogCWRlZmF1bHQgIjMiCiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIE5VTUEgTm9kZXMgYXZhaWxhYmxlIG9uIHRoZSB0YXJnZXQKIAkgIHN5c3RlbS4gIEluY3JlYXNlcyBtZW1vcnkgcmVzZXJ2ZWQgdG8gYWNjb21vZGF0ZSB2YXJpb3VzIHRhYmxlcy4KIAotY29uZmlnIEhBVkVfQVJDSF9CT09UTUVNX05PREUKK2NvbmZpZyBIQVZFX0FSQ0hfQk9PVE1FTQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBOVU1BCiAKQEAgLTExMzEsNyArMTE2NSw3IEBACiAKIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfNjQgfHwgTlVNQSB8fCAoRVhQRVJJTUVOVEFMICYmIFg4Nl9QQykgfHwgWDg2X0dFTkVSSUNBUkNICisJZGVwZW5kcyBvbiBYODZfNjQgfHwgTlVNQSB8fCAoRVhQRVJJTUVOVEFMICYmIFg4Nl8zMikgfHwgWDg2XzMyX05PTl9TVEFOREFSRAogCXNlbGVjdCBTUEFSU0VNRU1fU1RBVElDIGlmIFg4Nl8zMgogCXNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaWYgWDg2XzY0CiAKQEAgLTExNDgsNjEgKzExODIsNjEgQEAKIGNvbmZpZyBISUdIUFRFCiAJYm9vbCAiQWxsb2NhdGUgM3JkLWxldmVsIHBhZ2V0YWJsZXMgZnJvbSBoaWdobWVtIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIChISUdITUVNNEcgfHwgSElHSE1FTTY0RykKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhlIFZNIHVzZXMgb25lIHBhZ2UgdGFibGUgZW50cnkgZm9yIGVhY2ggcGFnZSBvZiBwaHlzaWNhbCBtZW1vcnkuCiAJICBGb3Igc3lzdGVtcyB3aXRoIGEgbG90IG9mIFJBTSwgdGhpcyBjYW4gYmUgd2FzdGVmdWwgb2YgcHJlY2lvdXMKIAkgIGxvdyBtZW1vcnkuICBTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGwgcHV0IHVzZXItc3BhY2UgcGFnZSB0YWJsZQogCSAgZW50cmllcyBpbiBoaWdoIG1lbW9yeS4KIAogY29uZmlnIFg4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04KLSAgICAgICAgYm9vbCAiQ2hlY2sgZm9yIGxvdyBtZW1vcnkgY29ycnVwdGlvbiIKLQloZWxwCi0JIFBlcmlvZGljYWxseSBjaGVjayBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gaW4gbG93IG1lbW9yeSwgd2hpY2gKLQkgaXMgc3VzcGVjdGVkIHRvIGJlIGNhdXNlZCBieSBCSU9TLiAgRXZlbiB3aGVuIGVuYWJsZWQgaW4gdGhlCi0JIGNvbmZpZ3VyYXRpb24sIGl0IGlzIGRpc2FibGVkIGF0IHJ1bnRpbWUuICBFbmFibGUgaXQgYnkKLQkgc2V0dGluZyAibWVtb3J5X2NvcnJ1cHRpb25fY2hlY2s9MSIgb24gdGhlIGtlcm5lbCBjb21tYW5kCi0JIGxpbmUuICBCeSBkZWZhdWx0IGl0IHNjYW5zIHRoZSBsb3cgNjRrIG9mIG1lbW9yeSBldmVyeSA2MAotCSBzZWNvbmRzOyBzZWUgdGhlIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrX3NpemUgYW5kCi0JIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrX3BlcmlvZCBwYXJhbWV0ZXJzIGluCi0JIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IHRvIGFkanVzdCB0aGlzLgorCWJvb2wgIkNoZWNrIGZvciBsb3cgbWVtb3J5IGNvcnJ1cHRpb24iCisJLS0taGVscC0tLQorCSAgUGVyaW9kaWNhbGx5IGNoZWNrIGZvciBtZW1vcnkgY29ycnVwdGlvbiBpbiBsb3cgbWVtb3J5LCB3aGljaAorCSAgaXMgc3VzcGVjdGVkIHRvIGJlIGNhdXNlZCBieSBCSU9TLiAgRXZlbiB3aGVuIGVuYWJsZWQgaW4gdGhlCisJICBjb25maWd1cmF0aW9uLCBpdCBpcyBkaXNhYmxlZCBhdCBydW50aW1lLiAgRW5hYmxlIGl0IGJ5CisJICBzZXR0aW5nICJtZW1vcnlfY29ycnVwdGlvbl9jaGVjaz0xIiBvbiB0aGUga2VybmVsIGNvbW1hbmQKKwkgIGxpbmUuICBCeSBkZWZhdWx0IGl0IHNjYW5zIHRoZSBsb3cgNjRrIG9mIG1lbW9yeSBldmVyeSA2MAorCSAgc2Vjb25kczsgc2VlIHRoZSBtZW1vcnlfY29ycnVwdGlvbl9jaGVja19zaXplIGFuZAorCSAgbWVtb3J5X2NvcnJ1cHRpb25fY2hlY2tfcGVyaW9kIHBhcmFtZXRlcnMgaW4KKwkgIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IHRvIGFkanVzdCB0aGlzLgogCi0JIFdoZW4gZW5hYmxlZCB3aXRoIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMsIHRoaXMgb3B0aW9uIGhhcwotCSBhbG1vc3Qgbm8gb3ZlcmhlYWQsIGFzIGl0IHJlc2VydmVzIGEgcmVsYXRpdmVseSBzbWFsbCBhbW91bnQKLQkgb2YgbWVtb3J5IGFuZCBzY2FucyBpdCBpbmZyZXF1ZW50bHkuICBJdCBib3RoIGRldGVjdHMgY29ycnVwdGlvbgotCSBhbmQgcHJldmVudHMgaXQgZnJvbSBhZmZlY3RpbmcgdGhlIHJ1bm5pbmcgc3lzdGVtLgorCSAgV2hlbiBlbmFibGVkIHdpdGggdGhlIGRlZmF1bHQgcGFyYW1ldGVycywgdGhpcyBvcHRpb24gaGFzCisJICBhbG1vc3Qgbm8gb3ZlcmhlYWQsIGFzIGl0IHJlc2VydmVzIGEgcmVsYXRpdmVseSBzbWFsbCBhbW91bnQKKwkgIG9mIG1lbW9yeSBhbmQgc2NhbnMgaXQgaW5mcmVxdWVudGx5LiAgSXQgYm90aCBkZXRlY3RzIGNvcnJ1cHRpb24KKwkgIGFuZCBwcmV2ZW50cyBpdCBmcm9tIGFmZmVjdGluZyB0aGUgcnVubmluZyBzeXN0ZW0uCiAKLQkgSXQgaXMsIGhvd2V2ZXIsIGludGVuZGVkIGFzIGEgZGlhZ25vc3RpYyB0b29sOyBpZiByZXBlYXRhYmxlCi0JIEJJT1Mtb3JpZ2luYXRlZCBjb3JydXB0aW9uIGFsd2F5cyBhZmZlY3RzIHRoZSBzYW1lIG1lbW9yeSwKLQkgeW91IGNhbiB1c2UgbWVtbWFwPSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSB1c2luZyB0aGF0Ci0JIG1lbW9yeS4KKwkgIEl0IGlzLCBob3dldmVyLCBpbnRlbmRlZCBhcyBhIGRpYWdub3N0aWMgdG9vbDsgaWYgcmVwZWF0YWJsZQorCSAgQklPUy1vcmlnaW5hdGVkIGNvcnJ1cHRpb24gYWx3YXlzIGFmZmVjdHMgdGhlIHNhbWUgbWVtb3J5LAorCSAgeW91IGNhbiB1c2UgbWVtbWFwPSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSB1c2luZyB0aGF0CisJICBtZW1vcnkuCiAKIGNvbmZpZyBYODZfQk9PVFBBUkFNX01FTU9SWV9DT1JSVVBUSU9OX0NIRUNLCi0gICAgICAgIGJvb2wgIlNldCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrIgorCWJvb2wgIlNldCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrIgogCWRlcGVuZHMgb24gWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTgogCWRlZmF1bHQgeQotCWhlbHAKLQkgU2V0IHdoZXRoZXIgdGhlIGRlZmF1bHQgc3RhdGUgb2YgbWVtb3J5X2NvcnJ1cHRpb25fY2hlY2sgaXMKLQkgb24gb3Igb2ZmLgorCS0tLWhlbHAtLS0KKwkgIFNldCB3aGV0aGVyIHRoZSBkZWZhdWx0IHN0YXRlIG9mIG1lbW9yeV9jb3JydXB0aW9uX2NoZWNrIGlzCisJICBvbiBvciBvZmYuCiAKIGNvbmZpZyBYODZfUkVTRVJWRV9MT1dfNjRLCi0gICAgICAgIGJvb2wgIlJlc2VydmUgbG93IDY0SyBvZiBSQU0gb24gQU1JL1Bob2VuaXggQklPU2VuIgorCWJvb2wgIlJlc2VydmUgbG93IDY0SyBvZiBSQU0gb24gQU1JL1Bob2VuaXggQklPU2VuIgogCWRlZmF1bHQgeQotCWhlbHAKLQkgUmVzZXJ2ZSB0aGUgZmlyc3QgNjRLIG9mIHBoeXNpY2FsIFJBTSBvbiBCSU9TZXMgdGhhdCBhcmUga25vd24KLQkgdG8gcG90ZW50aWFsbHkgY29ycnVwdCB0aGF0IG1lbW9yeSByYW5nZS4gQSBudW1iZXJzIG9mIEJJT1NlcyBhcmUKLQkga25vd24gdG8gdXRpbGl6ZSB0aGlzIGFyZWEgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLCBzbyBpdCBtdXN0IG5vdAotCSBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwuCisJLS0taGVscC0tLQorCSAgUmVzZXJ2ZSB0aGUgZmlyc3QgNjRLIG9mIHBoeXNpY2FsIFJBTSBvbiBCSU9TZXMgdGhhdCBhcmUga25vd24KKwkgIHRvIHBvdGVudGlhbGx5IGNvcnJ1cHQgdGhhdCBtZW1vcnkgcmFuZ2UuIEEgbnVtYmVycyBvZiBCSU9TZXMgYXJlCisJICBrbm93biB0byB1dGlsaXplIHRoaXMgYXJlYSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUsIHNvIGl0IG11c3Qgbm90CisJICBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwuCiAKLQkgU2V0IHRoaXMgdG8gTiBpZiB5b3UgYXJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHlvdSB0cnVzdCB0aGUgQklPUwotCSB0byBnZXQgYWxsIGl0cyBtZW1vcnkgcmVzZXJ2YXRpb25zIGFuZCB1c2FnZXMgcmlnaHQuCisJICBTZXQgdGhpcyB0byBOIGlmIHlvdSBhcmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgeW91IHRydXN0IHRoZSBCSU9TCisJICB0byBnZXQgYWxsIGl0cyBtZW1vcnkgcmVzZXJ2YXRpb25zIGFuZCB1c2FnZXMgcmlnaHQuCiAKLQkgSWYgeW91IGhhdmUgZG91YnRzIGFib3V0IHRoZSBCSU9TIChlLmcuIHN1c3BlbmQvcmVzdW1lIGRvZXMgbm90Ci0JIHdvcmsgb3IgdGhlcmUncyBrZXJuZWwgY3Jhc2hlcyBhZnRlciBjZXJ0YWluIGhhcmR3YXJlIGhvdHBsdWcKLQkgZXZlbnRzKSBhbmQgaXQncyBub3QgQU1JIG9yIFBob2VuaXgsIHRoZW4geW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlCi0JIFg4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT049eSB0byBhbGxvdyB0aGUga2VybmVsIHRvIGNoZWNrIHR5cGljYWwKLQkgY29ycnVwdGlvbiBwYXR0ZXJucy4KKwkgIElmIHlvdSBoYXZlIGRvdWJ0cyBhYm91dCB0aGUgQklPUyAoZS5nLiBzdXNwZW5kL3Jlc3VtZSBkb2VzIG5vdAorCSAgd29yayBvciB0aGVyZSdzIGtlcm5lbCBjcmFzaGVzIGFmdGVyIGNlcnRhaW4gaGFyZHdhcmUgaG90cGx1ZworCSAgZXZlbnRzKSBhbmQgaXQncyBub3QgQU1JIG9yIFBob2VuaXgsIHRoZW4geW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlCisJICBYODZfQ0hFQ0tfQklPU19DT1JSVVBUSU9OPXkgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBjaGVjayB0eXBpY2FsCisJICBjb3JydXB0aW9uIHBhdHRlcm5zLgogCi0JIFNheSBZIGlmIHVuc3VyZS4KKwkgIFNheSBZIGlmIHVuc3VyZS4KIAogY29uZmlnIE1BVEhfRU1VTEFUSU9OCiAJYm9vbApAQCAtMTI2OCw3ICsxMzAyLDcgQEAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJNVFJSIGNsZWFudXAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1UUlIKLQloZWxwCisJLS0taGVscC0tLQogCSAgQ29udmVydCBNVFJSIGxheW91dCBmcm9tIGNvbnRpbnVvdXMgdG8gZGlzY3JldGUsIHNvIFggZHJpdmVycyBjYW4KIAkgIGFkZCB3cml0ZWJhY2sgZW50cmllcy4KIApAQCAtMTI4Myw3ICsxMzE3LDcgQEAKIAlyYW5nZSAwIDEKIAlkZWZhdWx0ICIwIgogCWRlcGVuZHMgb24gTVRSUl9TQU5JVElaRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgRW5hYmxlIG10cnIgY2xlYW51cCBkZWZhdWx0IHZhbHVlCiAKIGNvbmZpZyBNVFJSX1NBTklUSVpFUl9TUEFSRV9SRUdfTlJfREVGQVVMVApAQCAtMTI5MSw3ICsxMzI1LDcgQEAKIAlyYW5nZSAwIDcKIAlkZWZhdWx0ICIxIgogCWRlcGVuZHMgb24gTVRSUl9TQU5JVElaRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgbXRyciBjbGVhbnVwIHNwYXJlIGVudHJpZXMgZGVmYXVsdCwgaXQgY2FuIGJlIGNoYW5nZWQgdmlhCiAJICBtdHJyX3NwYXJlX3JlZ19ucj1OIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgogCkBAIC0xMjk5LDcgKzEzMzMsNyBAQAogCWJvb2wKIAlwcm9tcHQgIng4NiBQQVQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1UUlIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVXNlIFBBVCBhdHRyaWJ1dGVzIHRvIHNldHVwIHBhZ2UgbGV2ZWwgY2FjaGUgY29udHJvbC4KIAogCSAgUEFUcyBhcmUgdGhlIG1vZGVybiBlcXVpdmFsZW50cyBvZiBNVFJScyBhbmQgYXJlIG11Y2ggbW9yZQpAQCAtMTMxNCwyMCArMTM0OCwyMCBAQAogCWJvb2wgIkVGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFDUEkKIAktLS1oZWxwLS0tCi0JVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8gdXNlIEVGSSBydW50aW1lIHNlcnZpY2VzIHRoYXQgYXJlCi0JYXZhaWxhYmxlIChzdWNoIGFzIHRoZSBFRkkgdmFyaWFibGUgc2VydmljZXMpLgorCSAgVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8gdXNlIEVGSSBydW50aW1lIHNlcnZpY2VzIHRoYXQgYXJlCisJICBhdmFpbGFibGUgKHN1Y2ggYXMgdGhlIEVGSSB2YXJpYWJsZSBzZXJ2aWNlcykuCiAKLQlUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBFRkkgZmlybXdhcmUuCi0gIAlJbiBhZGRpdGlvbiwgeW91IHNob3VsZCB1c2UgdGhlIGxhdGVzdCBFTElMTyBsb2FkZXIgYXZhaWxhYmxlCi0gIAlhdCA8aHR0cDovL2VsaWxvLnNvdXJjZWZvcmdlLm5ldD4gaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2UKLSAgCW9mIEVGSSBydW50aW1lIHNlcnZpY2VzLiBIb3dldmVyLCBldmVuIHdpdGggdGhpcyBvcHRpb24sIHRoZQotICAJcmVzdWx0YW50IGtlcm5lbCBzaG91bGQgY29udGludWUgdG8gYm9vdCBvbiBleGlzdGluZyBub24tRUZJCi0gIAlwbGF0Zm9ybXMuCisJICBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBFRkkgZmlybXdhcmUuCisJICBJbiBhZGRpdGlvbiwgeW91IHNob3VsZCB1c2UgdGhlIGxhdGVzdCBFTElMTyBsb2FkZXIgYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL2VsaWxvLnNvdXJjZWZvcmdlLm5ldD4gaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2UKKwkgIG9mIEVGSSBydW50aW1lIHNlcnZpY2VzLiBIb3dldmVyLCBldmVuIHdpdGggdGhpcyBvcHRpb24sIHRoZQorCSAgcmVzdWx0YW50IGtlcm5lbCBzaG91bGQgY29udGludWUgdG8gYm9vdCBvbiBleGlzdGluZyBub24tRUZJCisJICBwbGF0Zm9ybXMuCiAKIGNvbmZpZyBTRUNDT01QCiAJZGVmX2Jvb2wgeQogCXByb21wdCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKIAkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCiAJICBleGVjdXRpb24uIEJ5IHVzaW5nIHBpcGVzIG9yIG90aGVyIHRyYW5zcG9ydHMgbWFkZSBhdmFpbGFibGUgdG8KQEAgLTEzNDAsMTMgKzEzNzQsMTYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KIAorY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SX0FMTAorCWJvb2wKKwogY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SCiAJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBYODZfNjQgJiYgRVhQRVJJTUVOVEFMICYmIEJST0tFTgotCWhlbHAKLSAgICAgICAgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSAtZnN0YWNrLXByb3RlY3RvciBHQ0MgZmVhdHVyZS4gVGhpcwotCSAgZmVhdHVyZSBwdXRzLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucywgYSBjYW5hcnkKLQkgIHZhbHVlIG9uIHRoZSBzdGFjayBqdXN0IGJlZm9yZSB0aGUgcmV0dXJuIGFkZHJlc3MsIGFuZCB2YWxpZGF0ZXMKKwlzZWxlY3QgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIC1mc3RhY2stcHJvdGVjdG9yIEdDQyBmZWF0dXJlLiBUaGlzCisJICBmZWF0dXJlIHB1dHMsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZnVuY3Rpb25zLCBhIGNhbmFyeSB2YWx1ZSBvbgorCSAgdGhlIHN0YWNrIGp1c3QgYmVmb3JlIHRoZSByZXR1cm4gYWRkcmVzcywgYW5kIHZhbGlkYXRlcwogCSAgdGhlIHZhbHVlIGp1c3QgYmVmb3JlIGFjdHVhbGx5IHJldHVybmluZy4gIFN0YWNrIGJhc2VkIGJ1ZmZlcgogCSAgb3ZlcmZsb3dzICh0aGF0IG5lZWQgdG8gb3ZlcndyaXRlIHRoaXMgcmV0dXJuIGFkZHJlc3MpIG5vdyBhbHNvCiAJICBvdmVyd3JpdGUgdGhlIGNhbmFyeSwgd2hpY2ggZ2V0cyBkZXRlY3RlZCBhbmQgdGhlIGF0dGFjayBpcyB0aGVuCkBAIC0xMzU0LDIyICsxMzkxLDE0IEBACiAKIAkgIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBnY2MgdmVyc2lvbiA0LjIgb3IgYWJvdmUsIG9yIGEgZGlzdHJpYnV0aW9uCiAJICBnY2Mgd2l0aCB0aGUgZmVhdHVyZSBiYWNrcG9ydGVkLiBPbGRlciB2ZXJzaW9ucyBhcmUgYXV0b21hdGljYWxseQotCSAgZGV0ZWN0ZWQgYW5kIGZvciB0aG9zZSB2ZXJzaW9ucywgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpZ25vcmVkLgotCi1jb25maWcgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCi0JYm9vbCAiVXNlIHN0YWNrLXByb3RlY3RvciBmb3IgYWxsIGZ1bmN0aW9ucyIKLQlkZXBlbmRzIG9uIENDX1NUQUNLUFJPVEVDVE9SCi0JaGVscAotCSAgTm9ybWFsbHksIEdDQyBvbmx5IGluc2VydHMgdGhlIGNhbmFyeSB2YWx1ZSBwcm90ZWN0aW9uIGZvcgotCSAgZnVuY3Rpb25zIHRoYXQgdXNlIGxhcmdlLWlzaCBvbi1zdGFjayBidWZmZXJzLiBCeSBlbmFibGluZwotCSAgdGhpcyBvcHRpb24sIEdDQyB3aWxsIGJlIGFza2VkIHRvIGRvIHRoaXMgZm9yIEFMTCBmdW5jdGlvbnMuCisJICBkZXRlY3RlZCBhbmQgZm9yIHRob3NlIHZlcnNpb25zLCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzCisJICBpZ25vcmVkLiAoYW5kIGEgd2FybmluZyBpcyBwcmludGVkIGR1cmluZyBib290dXApCiAKIHNvdXJjZSBrZXJuZWwvS2NvbmZpZy5oegogCiBjb25maWcgS0VYRUMKIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCIKLQlkZXBlbmRzIG9uIFg4Nl9CSU9TX1JFQk9PVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCiAJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdAogCSAgYnV0IGl0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKQEAgLTEzODYsNyArMTQxNSw3IEBACiBjb25maWcgQ1JBU0hfRFVNUAogCWJvb2wgImtlcm5lbCBjcmFzaCBkdW1wcyIKIAlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIEhJR0hNRU0pCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEdlbmVyYXRlIGNyYXNoIGR1bXAgYWZ0ZXIgYmVpbmcgc3RhcnRlZCBieSBrZXhlYy4KIAkgIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzCiAJICB3aGljaCBhcmUgbG9hZGVkIGluIHRoZSBtYWluIGtlcm5lbCB3aXRoIGtleGVjLXRvb2xzIGludG8KQEAgLTE0MDEsNyArMTQzMCw3IEBACiAJYm9vbCAia2V4ZWMganVtcCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlcGVuZHMgb24gS0VYRUMgJiYgSElCRVJOQVRJT04gJiYgWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEp1bXAgYmV0d2VlbiBvcmlnaW5hbCBrZXJuZWwgYW5kIGtleGVjZWQga2VybmVsIGFuZCBpbnZva2UKIAkgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQwogCkBAIC0xNDEwLDcgKzE0MzksNyBAQAogCWRlZmF1bHQgIjB4MTAwMDAwMCIgaWYgWDg2X05VTUFRCiAJZGVmYXVsdCAiMHgyMDAwMDAiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjB4MTAwMDAwIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGdpdmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBrZXJuZWwgaXMgbG9hZGVkLgogCiAJICBJZiBrZXJuZWwgaXMgYSBub3QgcmVsb2NhdGFibGUgKENPTkZJR19SRUxPQ0FUQUJMRT1uKSB0aGVuCkBAIC0xNDUxLDcgKzE0ODAsNyBAQAogY29uZmlnIFJFTE9DQVRBQkxFCiAJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBidWlsZHMgYSBrZXJuZWwgaW1hZ2UgdGhhdCByZXRhaW5zIHJlbG9jYXRpb24gaW5mb3JtYXRpb24KIAkgIHNvIGl0IGNhbiBiZSBsb2FkZWQgc29tZXBsYWNlIGJlc2lkZXMgdGhlIGRlZmF1bHQgMU1CLgogCSAgVGhlIHJlbG9jYXRpb25zIHRlbmQgdG8gbWFrZSB0aGUga2VybmVsIGJpbmFyeSBhYm91dCAxMCUgbGFyZ2VyLApAQCAtMTQ3MSw3ICsxNTAwLDcgQEAKIAlkZWZhdWx0ICIweDEwMDAwMCIgaWYgWDg2XzMyCiAJZGVmYXVsdCAiMHgyMDAwMDAiIGlmIFg4Nl82NAogCXJhbmdlIDB4MjAwMCAweDQwMDAwMAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIHZhbHVlIHB1dHMgdGhlIGFsaWdubWVudCByZXN0cmljdGlvbnMgb24gcGh5c2ljYWwgYWRkcmVzcwogCSAgd2hlcmUga2VybmVsIGlzIGxvYWRlZCBhbmQgcnVuIGZyb20uIEtlcm5lbCBpcyBjb21waWxlZCBmb3IgYW4KIAkgIGFkZHJlc3Mgd2hpY2ggbWVldHMgYWJvdmUgYWxpZ25tZW50IHJlc3RyaWN0aW9uLgpAQCAtMTQ5Miw3ICsxNTIxLDcgQEAKIAogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIgotCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgIVg4Nl9WT1lBR0VSCisJZGVwZW5kcyBvbiBTTVAgJiYgSE9UUExVRwogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHVybmluZyBDUFVzIG9mZiBhbmQgb24uIENQVXMgY2FuIGJlCiAJICBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUuCkBAIC0xNTA0LDcgKzE1MzMsNyBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkNvbXBhdCBWRFNPIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYODZfMzIgfHwgSUEzMl9FTVVMQVRJT04KLQloZWxwCisJLS0taGVscC0tLQogCSAgTWFwIHRoZSAzMi1iaXQgVkRTTyB0byB0aGUgcHJlZGljdGFibGUgb2xkLXN0eWxlIGFkZHJlc3MgdG9vLgogCS0tLWhlbHAtLS0KIAkgIFNheSBOIGhlcmUgaWYgeW91IGFyZSBydW5uaW5nIGEgc3VmZmljaWVudGx5IHJlY2VudCBnbGliYwpAQCAtMTUxNiw3ICsxNTQ1LDcgQEAKIGNvbmZpZyBDTURMSU5FX0JPT0wKIAlib29sICJCdWlsdC1pbiBrZXJuZWwgY29tbWFuZCBsaW5lIgogCWRlZmF1bHQgbgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBbGxvdyBmb3Igc3BlY2lmeWluZyBib290IGFyZ3VtZW50cyB0byB0aGUga2VybmVsIGF0CiAJICBidWlsZCB0aW1lLiAgT24gc29tZSBzeXN0ZW1zIChlLmcuIGVtYmVkZGVkIG9uZXMpLCBpdCBpcwogCSAgbmVjZXNzYXJ5IG9yIGNvbnZlbmllbnQgdG8gcHJvdmlkZSBzb21lIG9yIGFsbCBvZiB0aGUKQEAgLTE1MzQsNyArMTU2Myw3IEBACiAJc3RyaW5nICJCdWlsdC1pbiBrZXJuZWwgY29tbWFuZCBzdHJpbmciCiAJZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKIAlkZWZhdWx0ICIiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVudGVyIGFyZ3VtZW50cyBoZXJlIHRoYXQgc2hvdWxkIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAogCSAgaW1hZ2UgYW5kIHVzZWQgYXQgYm9vdCB0aW1lLiAgSWYgdGhlIGJvb3QgbG9hZGVyIHByb3ZpZGVzIGEKIAkgIGNvbW1hbmQgbGluZSBhdCBib290IHRpbWUsIGl0IGlzIGFwcGVuZGVkIHRvIHRoaXMgc3RyaW5nIHRvCkBAIC0xNTUxLDcgKzE1ODAsNyBAQAogCWJvb2wgIkJ1aWx0LWluIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgYm9vdCBsb2FkZXIgYXJndW1lbnRzIgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gQ01ETElORV9CT09MCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNldCB0aGlzIG9wdGlvbiB0byAnWScgdG8gaGF2ZSB0aGUga2VybmVsIGlnbm9yZSB0aGUgYm9vdCBsb2FkZXIKIAkgIGNvbW1hbmQgbGluZSwgYW5kIHVzZSBPTkxZIHRoZSBidWlsdC1pbiBjb21tYW5kIGxpbmUuCiAKQEAgLTE1NzMsNyArMTYwMiw2IEBACiAJZGVwZW5kcyBvbiBOVU1BCiAKIG1lbnUgIlBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucyIKLQlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgogCiBjb25maWcgQVJDSF9ISUJFUk5BVElPTl9IRUFERVIKIAlkZWZfYm9vbCB5CkBAIC0xNjUxLDcgKzE2NzksNyBAQAogCiBjb25maWcgQVBNX0lHTk9SRV9VU0VSX1NVU1BFTkQKIAlib29sICJJZ25vcmUgVVNFUiBTVVNQRU5EIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGlnbm9yZSBVU0VSIFNVU1BFTkQgcmVxdWVzdHMuIE9uIG1hY2hpbmVzIHdpdGggYQogCSAgY29tcGxpYW50IEFQTSBCSU9TLCB5b3Ugd2FudCB0byBzYXkgTi4gSG93ZXZlciwgb24gdGhlIE5FQyBWZXJzYSBNCiAJICBzZXJpZXMgbm90ZWJvb2tzLCBpdCBpcyBuZWNlc3NhcnkgdG8gc2F5IFkgYmVjYXVzZSBvZiBhIEJJT1MgYnVnLgpAQCAtMTY3NSw3ICsxNzAzLDcgQEAKIAogY29uZmlnIEFQTV9DUFVfSURMRQogCWJvb2wgIk1ha2UgQ1BVIElkbGUgY2FsbHMgd2hlbiBpZGxlIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGUgY2FsbHMgdG8gQVBNIENQVSBJZGxlL0NQVSBCdXN5IGluc2lkZSB0aGUga2VybmVsJ3MgaWRsZSBsb29wLgogCSAgT24gc29tZSBtYWNoaW5lcywgdGhpcyBjYW4gYWN0aXZhdGUgaW1wcm92ZWQgcG93ZXIgc2F2aW5ncywgc3VjaCBhcwogCSAgYSBzbG93ZWQgQ1BVIGNsb2NrIHJhdGUsIHdoZW4gdGhlIG1hY2hpbmUgaXMgaWRsZS4gVGhlc2UgaWRsZSBjYWxscwpAQCAtMTY4Niw3ICsxNzE0LDcgQEAKIAogY29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LCiAJYm9vbCAiRW5hYmxlIGNvbnNvbGUgYmxhbmtpbmcgdXNpbmcgQVBNIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGUgY29uc29sZSBibGFua2luZyB1c2luZyB0aGUgQVBNLiBTb21lIGxhcHRvcHMgY2FuIHVzZSB0aGlzIHRvCiAJICB0dXJuIG9mZiB0aGUgTENEIGJhY2tsaWdodCB3aGVuIHRoZSBzY3JlZW4gYmxhbmtlciBvZiB0aGUgTGludXgKIAkgIHZpcnR1YWwgY29uc29sZSBibGFua3MgdGhlIHNjcmVlbi4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSB1c2VkIGJ5CkBAIC0xNjk5LDcgKzE3MjcsNyBAQAogCiBjb25maWcgQVBNX0FMTE9XX0lOVFMKIAlib29sICJBbGxvdyBpbnRlcnJ1cHRzIGR1cmluZyBBUE0gQklPUyBjYWxscyIKLQloZWxwCisJLS0taGVscC0tLQogCSAgTm9ybWFsbHkgd2UgZGlzYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHRzIHdoaWxlIHdlIGFyZSBtYWtpbmcgY2FsbHMgdG8KIAkgIHRoZSBBUE0gQklPUyBhcyBhIG1lYXN1cmUgdG8gbGVzc2VuIHRoZSBlZmZlY3RzIG9mIGEgYmFkbHkgYmVoYXZpbmcKIAkgIEJJT1MgaW1wbGVtZW50YXRpb24uICBUaGUgQklPUyBzaG91bGQgcmVlbmFibGUgaW50ZXJydXB0cyBpZiBpdApAQCAtMTcyNCw3ICsxNzUyLDcgQEAKIAlib29sICJQQ0kgc3VwcG9ydCIKIAlkZWZhdWx0IHkKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kgaWYgKFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDKQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQogCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQogCSAgeW91ciBib3guIE90aGVyIGJ1cyBzeXN0ZW1zIGFyZSBJU0EsIEVJU0EsIE1pY3JvQ2hhbm5lbCAoTUNBKSBvcgpAQCAtMTc5NSw3ICsxODIzLDcgQEAKIGNvbmZpZyBETUFSCiAJYm9vbCAiU3VwcG9ydCBmb3IgRE1BIFJlbWFwcGluZyBEZXZpY2VzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBDSV9NU0kgJiYgQUNQSSAmJiBFWFBFUklNRU5UQUwKLQloZWxwCisJLS0taGVscC0tLQogCSAgRE1BIHJlbWFwcGluZyAoRE1BUikgZGV2aWNlcyBzdXBwb3J0IGVuYWJsZXMgaW5kZXBlbmRlbnQgYWRkcmVzcwogCSAgdHJhbnNsYXRpb25zIGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBmcm9tIGRldmljZXMuCiAJICBUaGVzZSBETUEgcmVtYXBwaW5nIGRldmljZXMgYXJlIHJlcG9ydGVkIHZpYSBBQ1BJIHRhYmxlcwpAQCAtMTgxNywyOSArMTg0NSwzMCBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIlN1cHBvcnQgZm9yIEdyYXBoaWNzIHdvcmthcm91bmQiCiAJZGVwZW5kcyBvbiBETUFSCi0JaGVscAotCSBDdXJyZW50IEdyYXBoaWNzIGRyaXZlcnMgdGVuZCB0byB1c2UgcGh5c2ljYWwgYWRkcmVzcwotCSBmb3IgRE1BIGFuZCBhdm9pZCB1c2luZyBETUEgQVBJcy4gU2V0dGluZyB0aGlzIGNvbmZpZwotCSBvcHRpb24gcGVybWl0cyB0aGUgSU9NTVUgZHJpdmVyIHRvIHNldCBhIHVuaXR5IG1hcCBmb3IKLQkgYWxsIHRoZSBPUy12aXNpYmxlIG1lbW9yeS4gSGVuY2UgdGhlIGRyaXZlciBjYW4gY29udGludWUKLQkgdG8gdXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgRE1BLgorCS0tLWhlbHAtLS0KKwkgIEN1cnJlbnQgR3JhcGhpY3MgZHJpdmVycyB0ZW5kIHRvIHVzZSBwaHlzaWNhbCBhZGRyZXNzCisJICBmb3IgRE1BIGFuZCBhdm9pZCB1c2luZyBETUEgQVBJcy4gU2V0dGluZyB0aGlzIGNvbmZpZworCSAgb3B0aW9uIHBlcm1pdHMgdGhlIElPTU1VIGRyaXZlciB0byBzZXQgYSB1bml0eSBtYXAgZm9yCisJICBhbGwgdGhlIE9TLXZpc2libGUgbWVtb3J5LiBIZW5jZSB0aGUgZHJpdmVyIGNhbiBjb250aW51ZQorCSAgdG8gdXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgRE1BLgogCiBjb25maWcgRE1BUl9GTE9QUFlfV0EKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBETUFSCi0JaGVscAotCSBGbG9wcHkgZGlzayBkcml2ZXJzIGFyZSBrbm93IHRvIGJ5cGFzcyBETUEgQVBJIGNhbGxzCi0JIHRoZXJlYnkgZmFpbGluZyB0byB3b3JrIHdoZW4gSU9NTVUgaXMgZW5hYmxlZC4gVGhpcwotCSB3b3JrYXJvdW5kIHdpbGwgc2V0dXAgYSAxOjEgbWFwcGluZyBmb3IgdGhlIGZpcnN0Ci0JIDE2TSB0byBtYWtlIGZsb3BweSAoYW4gSVNBIGRldmljZSkgd29yay4KKwktLS1oZWxwLS0tCisJICBGbG9wcHkgZGlzayBkcml2ZXJzIGFyZSBrbm93IHRvIGJ5cGFzcyBETUEgQVBJIGNhbGxzCisJICB0aGVyZWJ5IGZhaWxpbmcgdG8gd29yayB3aGVuIElPTU1VIGlzIGVuYWJsZWQuIFRoaXMKKwkgIHdvcmthcm91bmQgd2lsbCBzZXR1cCBhIDE6MSBtYXBwaW5nIGZvciB0aGUgZmlyc3QKKwkgIDE2TSB0byBtYWtlIGZsb3BweSAoYW4gSVNBIGRldmljZSkgd29yay4KIAogY29uZmlnIElOVFJfUkVNQVAKIAlib29sICJTdXBwb3J0IGZvciBJbnRlcnJ1cHQgUmVtYXBwaW5nIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFg4Nl9JT19BUElDICYmIFBDSV9NU0kgJiYgQUNQSSAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JIFN1cHBvcnRzIEludGVycnVwdCByZW1hcHBpbmcgZm9yIElPLUFQSUMgYW5kIE1TSSBkZXZpY2VzLgotCSBUbyB1c2UgeDJhcGljIG1vZGUgaW4gdGhlIENQVSdzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvcgotCSB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSdzIGhhdmluZyA+IDggYml0IEFQSUMgSUQsIHNheSBZLgorCXNlbGVjdCBYODZfWDJBUElDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydHMgSW50ZXJydXB0IHJlbWFwcGluZyBmb3IgSU8tQVBJQyBhbmQgTVNJIGRldmljZXMuCisJICBUbyB1c2UgeDJhcGljIG1vZGUgaW4gdGhlIENQVSdzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvcgorCSAgdG8gc3VwcG9ydCBwbGF0Zm9ybXMgd2l0aCBDUFUncyBoYXZpbmcgPiA4IGJpdCBBUElDIElELCBzYXkgWS4KIAogc291cmNlICJkcml2ZXJzL3BjaS9wY2llL0tjb25maWciCiAKQEAgLTE4NTMsOCArMTg4Miw3IEBACiAKIGNvbmZpZyBJU0EKIAlib29sICJJU0Egc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIElTQSBzbG90cyBvbiB5b3VyIG1vdGhlcmJvYXJkLiAgSVNBIGlzIHRoZQogCSAgbmFtZSBvZiBhIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZgogCSAgaW5zaWRlIHlvdXIgYm94LiAgT3RoZXIgYnVzIHN5c3RlbXMgYXJlIFBDSSwgRUlTQSwgTWljcm9DaGFubmVsCkBAIC0xODgwLDkgKzE5MDgsOCBAQAogc291cmNlICJkcml2ZXJzL2Vpc2EvS2NvbmZpZyIKIAogY29uZmlnIE1DQQotCWJvb2wgIk1DQSBzdXBwb3J0IiBpZiAhWDg2X1ZPWUFHRVIKLQlkZWZhdWx0IHkgaWYgWDg2X1ZPWUFHRVIKLQloZWxwCisJYm9vbCAiTUNBIHN1cHBvcnQiCisJLS0taGVscC0tLQogCSAgTWljcm9DaGFubmVsIEFyY2hpdGVjdHVyZSBpcyBmb3VuZCBpbiBzb21lIElCTSBQUy8yIG1hY2hpbmVzIGFuZAogCSAgbGFwdG9wcy4gIEl0IGlzIGEgYnVzIHN5c3RlbSBzaW1pbGFyIHRvIFBDSSBvciBJU0EuIFNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tY2EudHh0PiAoYW5kIGVzcGVjaWFsbHkgdGhlIHdlYiBwYWdlIGdpdmVuCkBAIC0xODkyLDggKzE5MTksNyBAQAogCiBjb25maWcgU0N4MjAwCiAJdHJpc3RhdGUgIk5hdFNlbWkgU0N4MjAwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhWDg2X1ZPWUFHRVIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yJ3MKIAkgIChub3cgQU1EJ3MpIEdlb2RlIHByb2Nlc3NvcnMuICBUaGUgZHJpdmVyIHByb2JlcyBmb3IgdGhlCiAJICBQQ0ktSURzIG9mIHNldmVyYWwgb24tY2hpcCBkZXZpY2VzLCBzbyBpdHMgYSBnb29kIGRlcGVuZGVuY3kKQEAgLTE5MDUsNyArMTkzMSw3IEBACiAJdHJpc3RhdGUgIk5hdFNlbWkgU0N4MjAwIDI3TUh6IEhpZ2gtUmVzb2x1dGlvbiBUaW1lciBTdXBwb3J0IgogCWRlcGVuZHMgb24gU0N4MjAwICYmIEdFTkVSSUNfVElNRQogCWRlZmF1bHQgeQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2Nrc291cmNlIGJ1aWx0IHVwb24gdGhlIG9uLWNoaXAKIAkgIDI3TUh6IGhpZ2gtcmVzb2x1dGlvbiB0aW1lci4gIEl0cyBhbHNvIGEgd29ya2Fyb3VuZCBmb3IKIAkgIE5TQyBHZW9kZSBTQy0xMTAwJ3MgYnVnZ3kgVFNDLCB3aGljaCBsb3NlcyB0aW1lIHdoZW4gdGhlCkBAIC0xOTE2LDcgKzE5NDIsNyBAQAogCWRlZl9ib29sIHkKIAlwcm9tcHQgIkdlb2RlIE11bHRpLUZ1bmN0aW9uIEdlbmVyYWwgUHVycG9zZSBUaW1lciAoTUZHUFQpIGV2ZW50cyIKIAlkZXBlbmRzIG9uIE1HRU9ERV9MWCAmJiBHRU5FUklDX1RJTUUgJiYgR0VORVJJQ19DTE9DS0VWRU5UUwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2NrIGV2ZW50IHNvdXJjZSBiYXNlZCBvbiB0aGUgTUZHUFQKIAkgIHRpbWVyKHMpIGluIHRoZSBDUzU1MzUgYW5kIENTNTUzNiBjb21wYW5pb24gY2hpcCBmb3IgdGhlIGdlb2RlLgogCSAgTUZHUFRzIGhhdmUgYSBiZXR0ZXIgcmVzb2x1dGlvbiBhbmQgbWF4IGludGVydmFsIHRoYW4gdGhlCkBAIC0xOTI1LDcgKzE5NTEsNyBAQAogY29uZmlnIE9MUEMKIAlib29sICJPbmUgTGFwdG9wIFBlciBDaGlsZCBzdXBwb3J0IgogCWRlZmF1bHQgbgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBZGQgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIHRoZSB1bmlxdWUgZmVhdHVyZXMgb2YgdGhlIE9MUEMKIAkgIFhPIGhhcmR3YXJlLgogCkBAIC0xOTUwLDE2ICsxOTc2LDE2IEBACiAJYm9vbCAiSUEzMiBFbXVsYXRpb24iCiAJZGVwZW5kcyBvbiBYODZfNjQKIAlzZWxlY3QgQ09NUEFUX0JJTkZNVF9FTEYKLQloZWxwCisJLS0taGVscC0tLQogCSAgSW5jbHVkZSBjb2RlIHRvIHJ1biAzMi1iaXQgcHJvZ3JhbXMgdW5kZXIgYSA2NC1iaXQga2VybmVsLiBZb3Ugc2hvdWxkCiAJICBsaWtlbHkgdHVybiB0aGlzIG9uLCB1bmxlc3MgeW91J3JlIDEwMCUgc3VyZSB0aGF0IHlvdSBkb24ndCBoYXZlIGFueQogCSAgMzItYml0IHByb2dyYW1zIGxlZnQuCiAKIGNvbmZpZyBJQTMyX0FPVVQKLSAgICAgICB0cmlzdGF0ZSAiSUEzMiBhLm91dCBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gSUEzMl9FTVVMQVRJT04KLSAgICAgICBoZWxwCi0gICAgICAgICBTdXBwb3J0IG9sZCBhLm91dCBiaW5hcmllcyBpbiB0aGUgMzJiaXQgZW11bGF0aW9uLgorCXRyaXN0YXRlICJJQTMyIGEub3V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTgorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgb2xkIGEub3V0IGJpbmFyaWVzIGluIHRoZSAzMmJpdCBlbXVsYXRpb24uCiAKIGNvbmZpZyBDT01QQVQKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGM5OGQ1MmU4Li5hOTVlYWYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNTAsNyArNTAsNyBAQAogY29uZmlnIE00ODYKIAlib29sICI0ODYiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgNDg2IHNlcmllcyBwcm9jZXNzb3IsIGVpdGhlciBJbnRlbCBvciBvbmUgb2YgdGhlCiAJICBjb21wYXRpYmxlIHByb2Nlc3NvcnMgZnJvbSBBTUQsIEN5cml4LCBJQk0sIG9yIEludGVsLiAgSW5jbHVkZXMgRFgsCiAJICBEWDIsIGFuZCBEWDQgdmFyaWFudHM7IGFsc28gU0wvU0xDL1NMQzIvU0xDMy9TWC9TWDIgYW5kIFVNQyBVNUQgb3IKQEAgLTU5LDcgKzU5LDcgQEAKIGNvbmZpZyBNNTg2CiAJYm9vbCAiNTg2L0s1LzV4ODYvNng4Ni82eDg2TVgiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGFuIDU4NiBvciA2ODYgc2VyaWVzIHByb2Nlc3NvciBzdWNoIGFzIHRoZSBBTUQgSzUsCiAJICB0aGUgQ3lyaXggNXg4NiwgNng4NiBhbmQgNng4Nk1YLiAgVGhpcyBjaG9pY2UgZG9lcyBub3QKIAkgIGFzc3VtZSB0aGUgUkRUU0MgKFJlYWQgVGltZSBTdGFtcCBDb3VudGVyKSBpbnN0cnVjdGlvbi4KQEAgLTY3LDIxICs2NywyMSBAQAogY29uZmlnIE01ODZUU0MKIAlib29sICJQZW50aXVtLUNsYXNzaWMiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgUGVudGl1bSBDbGFzc2ljIHByb2Nlc3NvciB3aXRoIHRoZSBSRFRTQyAoUmVhZAogCSAgVGltZSBTdGFtcCBDb3VudGVyKSBpbnN0cnVjdGlvbiBmb3IgYmVuY2htYXJraW5nLgogCiBjb25maWcgTTU4Nk1NWAogCWJvb2wgIlBlbnRpdW0tTU1YIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhIFBlbnRpdW0gd2l0aCB0aGUgTU1YIGdyYXBoaWNzL211bHRpbWVkaWEKIAkgIGV4dGVuZGVkIGluc3RydWN0aW9ucy4KIAogY29uZmlnIE02ODYKIAlib29sICJQZW50aXVtLVBybyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgSW50ZWwgUGVudGl1bSBQcm8gY2hpcHMuICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZgogCSAgUGVudGl1bSBQcm8gZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zLCBhbmQgZGlzYWJsZXMgdGhlIGluaXQtdGltZSBndWFyZAogCSAgYWdhaW5zdCB0aGUgZjAwZiBidWcgZm91bmQgaW4gZWFybGllciBQZW50aXVtcy4KQEAgLTg5LDcgKzg5LDcgQEAKIGNvbmZpZyBNUEVOVElVTUlJCiAJYm9vbCAiUGVudGl1bS1JSS9DZWxlcm9uKHByZS1Db3BwZXJtaW5lKSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgSW50ZWwgY2hpcHMgYmFzZWQgb24gdGhlIFBlbnRpdW0tSUkgYW5kCiAJICBwcmUtQ29wcGVybWluZSBDZWxlcm9uIGNvcmUuICBUaGlzIG9wdGlvbiBlbmFibGVzIGFuIHVuYWxpZ25lZAogCSAgY29weSBvcHRpbWl6YXRpb24sIGNvbXBpbGVzIHRoZSBrZXJuZWwgd2l0aCBvcHRpbWl6YXRpb24gZmxhZ3MKQEAgLTk5LDcgKzk5LDcgQEAKIGNvbmZpZyBNUEVOVElVTUlJSQogCWJvb2wgIlBlbnRpdW0tSUlJL0NlbGVyb24oQ29wcGVybWluZSkvUGVudGl1bS1JSUkgWGVvbiIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgSW50ZWwgY2hpcHMgYmFzZWQgb24gdGhlIFBlbnRpdW0tSUlJIGFuZAogCSAgQ2VsZXJvbi1Db3BwZXJtaW5lIGNvcmUuICBUaGlzIG9wdGlvbiBlbmFibGVzIHVzZSBvZiBzb21lCiAJICBleHRlbmRlZCBwcmVmZXRjaCBpbnN0cnVjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlIFBlbnRpdW0gSUkKQEAgLTEwOCwxNCArMTA4LDE0IEBACiBjb25maWcgTVBFTlRJVU1NCiAJYm9vbCAiUGVudGl1bSBNIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBJbnRlbCBQZW50aXVtIE0gKG5vdCBQZW50aXVtLTQgTSkKIAkgIG5vdGVib29rIGNoaXBzLgogCiBjb25maWcgTVBFTlRJVU00CiAJYm9vbCAiUGVudGl1bS00L0NlbGVyb24oUDQtYmFzZWQpL1BlbnRpdW0tNCBNL29sZGVyIFhlb24iCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIEludGVsIFBlbnRpdW0gNCBjaGlwcy4gIFRoaXMgaW5jbHVkZXMgdGhlCiAJICBQZW50aXVtIDQsIFBlbnRpdW0gRCwgUDQtYmFzZWQgQ2VsZXJvbiBhbmQgWGVvbiwgYW5kCiAJICBQZW50aXVtLTQgTSAobm90IFBlbnRpdW0gTSkgY2hpcHMuICBUaGlzIG9wdGlvbiBlbmFibGVzIGNvbXBpbGUKQEAgLTE1MSw3ICsxNTEsNyBAQAogY29uZmlnIE1LNgogCWJvb2wgIks2L0s2LUlJL0s2LUlJSSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYW4gQU1EIEs2LWZhbWlseSBwcm9jZXNzb3IuICBFbmFibGVzIHVzZSBvZgogCSAgc29tZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMsIGFuZCBwYXNzZXMgYXBwcm9wcmlhdGUgb3B0aW1pemF0aW9uCiAJICBmbGFncyB0byBHQ0MuCkBAIC0xNTksMTQgKzE1OSwxNCBAQAogY29uZmlnIE1LNwogCWJvb2wgIkF0aGxvbi9EdXJvbi9LNyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYW4gQU1EIEF0aGxvbiBLNy1mYW1pbHkgcHJvY2Vzc29yLiAgRW5hYmxlcyB1c2Ugb2YKIAkgIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zLCBhbmQgcGFzc2VzIGFwcHJvcHJpYXRlIG9wdGltaXphdGlvbgogCSAgZmxhZ3MgdG8gR0NDLgogCiBjb25maWcgTUs4CiAJYm9vbCAiT3B0ZXJvbi9BdGhsb242NC9IYW1tZXIvSzgiCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhbiBBTUQgT3B0ZXJvbiBvciBBdGhsb242NCBIYW1tZXItZmFtaWx5IHByb2Nlc3Nvci4KIAkgIEVuYWJsZXMgdXNlIG9mIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zLCBhbmQgcGFzc2VzIGFwcHJvcHJpYXRlCiAJICBvcHRpbWl6YXRpb24gZmxhZ3MgdG8gR0NDLgpAQCAtMTc0LDcgKzE3NCw3IEBACiBjb25maWcgTUNSVVNPRQogCWJvb2wgIkNydXNvZSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYSBUcmFuc21ldGEgQ3J1c29lIHByb2Nlc3Nvci4gIFRyZWF0cyB0aGUgcHJvY2Vzc29yCiAJICBsaWtlIGEgNTg2IHdpdGggVFNDLCBhbmQgc2V0cyBzb21lIEdDQyBvcHRpbWl6YXRpb24gZmxhZ3MgKGxpa2UgYQogCSAgUGVudGl1bSBQcm8gd2l0aCBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzKS4KQEAgLTE4MiwxMyArMTgyLDEzIEBACiBjb25maWcgTUVGRklDRU9OCiAJYm9vbCAiRWZmaWNlb24iCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgVHJhbnNtZXRhIEVmZmljZW9uIHByb2Nlc3Nvci4KIAogY29uZmlnIE1XSU5DSElQQzYKIAlib29sICJXaW5jaGlwLUM2IgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhbiBJRFQgV2luY2hpcCBDNiBjaGlwLiAgTGludXggYW5kIEdDQwogCSAgdHJlYXQgdGhpcyBjaGlwIGFzIGEgNTg2VFNDIHdpdGggc29tZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMKIAkgIGFuZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgpAQCAtMTk2LDcgKzE5Niw3IEBACiBjb25maWcgTVdJTkNISVAzRAogCWJvb2wgIldpbmNoaXAtMi9XaW5jaGlwLTJBL1dpbmNoaXAtMyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYW4gSURUIFdpbmNoaXAtMiwgMkEgb3IgMy4gIExpbnV4IGFuZCBHQ0MKIAkgIHRyZWF0IHRoaXMgY2hpcCBhcyBhIDU4NlRTQyB3aXRoIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zCiAJICBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gIEFsc28gZW5hYmxlIG91dCBvZiBvcmRlciBtZW1vcnkKQEAgLTIwNiwxOSArMjA2LDE5IEBACiBjb25maWcgTUdFT0RFR1gxCiAJYm9vbCAiR2VvZGVHWDEiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIGEgR2VvZGUgR1gxIChDeXJpeCBNZWRpYUdYKSBjaGlwLgogCiBjb25maWcgTUdFT0RFX0xYCiAJYm9vbCAiR2VvZGUgR1gvTFgiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgZm9yIEFNRCBHZW9kZSBHWCBhbmQgTFggcHJvY2Vzc29ycy4KIAogY29uZmlnIE1DWVJJWElJSQogCWJvb2wgIkN5cml4SUlJL1ZJQS1DMyIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBmb3IgYSBDeXJpeCBJSUkgb3IgQzMgY2hpcC4gIFByZXNlbnRseSBMaW51eCBhbmQgR0NDCiAJICB0cmVhdCB0aGlzIGNoaXAgYXMgYSBnZW5lcmljIDU4Ni4gV2hpbHN0IHRoZSBDUFUgaXMgNjg2IGNsYXNzLAogCSAgaXQgbGFja3MgdGhlIGNtb3YgZXh0ZW5zaW9uIHdoaWNoIGdjYyBhc3N1bWVzIGlzIHByZXNlbnQgd2hlbgpAQCAtMjMwLDcgKzIzMCw3IEBACiBjb25maWcgTVZJQUMzXzIKIAlib29sICJWSUEgQzMtMiAoTmVoZW1pYWgpIgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhIFZJQSBDMyAiTmVoZW1pYWgiLiBTZWxlY3RpbmcgdGhpcyBlbmFibGVzIHVzYWdlCiAJICBvZiBTU0UgYW5kIHRlbGxzIGdjYyB0byB0cmVhdCB0aGUgQ1BVIGFzIGEgNjg2LgogCSAgTm90ZSwgdGhpcyBrZXJuZWwgd2lsbCBub3QgYm9vdCBvbiBvbGRlciAocHJlIG1vZGVsIDkpIEMzcy4KQEAgLTIzOCwxNCArMjM4LDE0IEBACiBjb25maWcgTVZJQUM3CiAJYm9vbCAiVklBIEM3IgogCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIGZvciBhIFZJQSBDNy4gIFNlbGVjdGluZyB0aGlzIHVzZXMgdGhlIGNvcnJlY3QgY2FjaGUKIAkgIHNoaWZ0IGFuZCB0ZWxscyBnY2MgdG8gdHJlYXQgdGhlIENQVSBhcyBhIDY4Ni4KIAogY29uZmlnIE1QU0MKIAlib29sICJJbnRlbCBQNCAvIG9sZGVyIE5ldGJ1cnN0IGJhc2VkIFhlb24iCiAJZGVwZW5kcyBvbiBYODZfNjQKLQloZWxwCisJLS0taGVscC0tLQogCSAgT3B0aW1pemUgZm9yIEludGVsIFBlbnRpdW0gNCwgUGVudGl1bSBEIGFuZCBvbGRlciBOb2NvbmEvRGVtcHNleQogCSAgWGVvbiBDUFVzIHdpdGggSW50ZWwgNjRiaXQgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIHg4Ni02NC4KIAkgIE5vdGUgdGhhdCB0aGUgbGF0ZXN0IFhlb25zIChYZW9uIDUxeHggYW5kIDUzeHgpIGFyZSBub3QgYmFzZWQgb24gdGhlCkBAIC0yNTUsNyArMjU1LDcgQEAKIAogY29uZmlnIE1DT1JFMgogCWJvb2wgIkNvcmUgMi9uZXdlciBYZW9uIgotCWhlbHAKKwktLS1oZWxwLS0tCiAKIAkgIFNlbGVjdCB0aGlzIGZvciBJbnRlbCBDb3JlIDIgYW5kIG5ld2VyIENvcmUgMiBYZW9ucyAoWGVvbiA1MXh4IGFuZAogCSAgNTN4eCkgQ1BVcy4gWW91IGNhbiBkaXN0aW5ndWlzaCBuZXdlciBmcm9tIG9sZGVyIFhlb25zIGJ5IHRoZSBDUFUKQEAgLTI2NSw3ICsyNjUsNyBAQAogY29uZmlnIEdFTkVSSUNfQ1BVCiAJYm9vbCAiR2VuZXJpYy14ODYtNjQiCiAJZGVwZW5kcyBvbiBYODZfNjQKLQloZWxwCisJLS0taGVscC0tLQogCSAgR2VuZXJpYyB4ODYtNjQgQ1BVLgogCSAgUnVuIGVxdWFsbHkgd2VsbCBvbiBhbGwgeDg2LTY0IENQVXMuCiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogY29uZmlnIFg4Nl9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyB4ODYgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl8zMgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBJbnN0ZWFkIG9mIGp1c3QgaW5jbHVkaW5nIG9wdGltaXphdGlvbnMgZm9yIHRoZSBzZWxlY3RlZAogCSAgeDg2IHZhcmlhbnQgKGUuZy4gUElJLCBDcnVzb2Ugb3IgQXRobG9uKSwgaW5jbHVkZSBzb21lIG1vcmUKIAkgIGdlbmVyaWMgb3B0aW1pemF0aW9ucyBhcyB3ZWxsLiBUaGlzIHdpbGwgbWFrZSB0aGUga2VybmVsCkBAIC0yOTQsMjUgKzI5NCwyMyBAQAogIyBEZWZpbmUgaW1wbGllZCBvcHRpb25zIGZyb20gdGhlIENQVSBzZWxlY3Rpb24gaGVyZQogY29uZmlnIFg4Nl9MMV9DQUNIRV9CWVRFUwogCWludAotCWRlZmF1bHQgIjEyOCIgaWYgR0VORVJJQ19DUFUgfHwgTVBTQwotCWRlZmF1bHQgIjY0IiBpZiBNSzggfHwgTUNPUkUyCi0JZGVwZW5kcyBvbiBYODZfNjQKKwlkZWZhdWx0ICIxMjgiIGlmIE1QU0MKKwlkZWZhdWx0ICI2NCIgaWYgR0VORVJJQ19DUFUgfHwgTUs4IHx8IE1DT1JFMiB8fCBYODZfMzIKIAogY29uZmlnIFg4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMKIAlpbnQKIAlkZWZhdWx0ICI0MDk2IiBpZiBYODZfVlNNUAogCWRlZmF1bHQgWDg2X0wxX0NBQ0hFX0JZVEVTIGlmICFYODZfVlNNUAotCWRlcGVuZHMgb24gWDg2XzY0CiAKIGNvbmZpZyBYODZfQ01QWENIRwogCWRlZl9ib29sIFg4Nl82NCB8fCAoWDg2XzMyICYmICFNMzg2KQogCiBjb25maWcgWDg2X0wxX0NBQ0hFX1NISUZUCiAJaW50Ci0JZGVmYXVsdCAiNyIgaWYgTVBFTlRJVU00IHx8IFg4Nl9HRU5FUklDIHx8IEdFTkVSSUNfQ1BVIHx8IE1QU0MKKwlkZWZhdWx0ICI3IiBpZiBNUEVOVElVTTQgfHwgTVBTQwogCWRlZmF1bHQgIjQiIGlmIFg4Nl9FTEFOIHx8IE00ODYgfHwgTTM4NiB8fCBNR0VPREVHWDEKIAlkZWZhdWx0ICI1IiBpZiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQQzYgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNiB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTVZJQUMzXzIgfHwgTUdFT0RFX0xYCi0JZGVmYXVsdCAiNiIgaWYgTUs3IHx8IE1LOCB8fCBNUEVOVElVTU0gfHwgTUNPUkUyIHx8IE1WSUFDNworCWRlZmF1bHQgIjYiIGlmIE1LNyB8fCBNSzggfHwgTVBFTlRJVU1NIHx8IE1DT1JFMiB8fCBNVklBQzcgfHwgWDg2X0dFTkVSSUMgfHwgR0VORVJJQ19DUFUKIAogY29uZmlnIFg4Nl9YQURECiAJZGVmX2Jvb2wgeQpAQCAtMzIxLDcgKzMxOSw3IEBACiBjb25maWcgWDg2X1BQUk9fRkVOQ0UKIAlib29sICJQZW50aXVtUHJvIG1lbW9yeSBvcmRlcmluZyBlcnJhdGEgd29ya2Fyb3VuZCIKIAlkZXBlbmRzIG9uIE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNMzg2IHx8IE1HRU9ERUdYMQotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBPbGQgUGVudGl1bVBybyBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zIGhhZCBlcnJhdGEgdGhhdCBjb3VsZCBjYXVzZQogCSAgbWVtb3J5IG9wZXJhdGlvbnMgdG8gdmlvbGF0ZSB0aGUgeDg2IG9yZGVyaW5nIHN0YW5kYXJkIGluIHJhcmUgY2FzZXMuCiAJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGF0dGVtcHQgdG8gd29yayBhcm91bmQgc29tZSAoYnV0IG5vdCBhbGwpCkBAIC00MTQsMTQgKzQxMiwxNCBAQAogCiBtZW51Y29uZmlnIFBST0NFU1NPUl9TRUxFQ1QKIAlib29sICJTdXBwb3J0ZWQgcHJvY2Vzc29yIHZlbmRvcnMiIGlmIEVNQkVEREVECi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgbGV0cyB5b3UgY2hvb3NlIHdoYXQgeDg2IHZlbmRvciBzdXBwb3J0IGNvZGUgeW91ciBrZXJuZWwKIAkgIHdpbGwgaW5jbHVkZS4KIAogY29uZmlnIENQVV9TVVBfSU5URUwKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IEludGVsIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBJbnRlbCBwcm9jZXNzb3JzCiAKIAkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYW4KQEAgLTQzNSw3ICs0MzMsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgQ3lyaXggcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAogCWRlcGVuZHMgb24gITY0QklUCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBkZXRlY3Rpb24sIHR1bmluZ3MgYW5kIHF1aXJrcyBmb3IgQ3lyaXggcHJvY2Vzc29ycwogCiAJICBZb3UgbmVlZCB0aGlzIGVuYWJsZWQgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIGEKQEAgLTQ0OCw3ICs0NDYsNyBAQAogY29uZmlnIENQVV9TVVBfQU1ECiAJZGVmYXVsdCB5CiAJYm9vbCAiU3VwcG9ydCBBTUQgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIEFNRCBwcm9jZXNzb3JzCiAKIAkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYW4KQEAgLTQ2Miw3ICs0NjAsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgQ2VudGF1ciBwcm9jZXNzb3JzIiBpZiBQUk9DRVNTT1JfU0VMRUNUCiAJZGVwZW5kcyBvbiAhNjRCSVQKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBDZW50YXVyIHByb2Nlc3NvcnMKIAogCSAgWW91IG5lZWQgdGhpcyBlbmFibGVkIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiBhCkBAIC00NzYsNyArNDc0LDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IENlbnRhdXIgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAogCWRlcGVuZHMgb24gNjRCSVQKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBDZW50YXVyIHByb2Nlc3NvcnMKIAogCSAgWW91IG5lZWQgdGhpcyBlbmFibGVkIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiBhCkBAIC00OTAsNyArNDg4LDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IFRyYW5zbWV0YSBwcm9jZXNzb3JzIiBpZiBQUk9DRVNTT1JfU0VMRUNUCiAJZGVwZW5kcyBvbiAhNjRCSVQKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBUcmFuc21ldGEgcHJvY2Vzc29ycwogCiAJICBZb3UgbmVlZCB0aGlzIGVuYWJsZWQgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIGEKQEAgLTUwNCw3ICs1MDIsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgVU1DIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKIAlkZXBlbmRzIG9uICE2NEJJVAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIFVNQyBwcm9jZXNzb3JzCiAKIAkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYQpAQCAtNTIzLDcgKzUyMSw3IEBACiAJYm9vbCAiQnJhbmNoIFRyYWNlIFN0b3JlIgogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWDg2X0RFQlVHQ1RMTVNSCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBhIHB0cmFjZSBpbnRlcmZhY2UgdG8gdGhlIGhhcmR3YXJlJ3MgYnJhbmNoIHRyYWNlIHN0b3JlLgogCiAJICBEZWJ1Z2dlcnMgbWF5IHVzZSBpdCB0byBjb2xsZWN0IGFuIGV4ZWN1dGlvbiB0cmFjZSBvZiB0aGUgZGVidWdnZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IGUxOTgzZmEuLmZkYjQ1ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtNyw3ICs3LDcgQEAKIAogY29uZmlnIFNUUklDVF9ERVZNRU0KIAlib29sICJGaWx0ZXIgYWNjZXNzIHRvIC9kZXYvbWVtIgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgeW91IGFsbG93IHVzZXJzcGFjZSAocm9vdCkgYWNjZXNzIHRvIGFsbAogCSAgb2YgbWVtb3J5LCBpbmNsdWRpbmcga2VybmVsIGFuZCB1c2Vyc3BhY2UgbWVtb3J5LiBBY2NpZGVudGFsCiAJICBhY2Nlc3MgdG8gdGhpcyBpcyBvYnZpb3VzbHkgZGlzYXN0cm91cywgYnV0IHNwZWNpZmljIGFjY2VzcyBjYW4KQEAgLTI1LDcgKzI1LDcgQEAKIGNvbmZpZyBYODZfVkVSQk9TRV9CT09UVVAKIAlib29sICJFbmFibGUgdmVyYm9zZSB4ODYgYm9vdHVwIGluZm8gbWVzc2FnZXMiCiAJZGVmYXVsdCB5Ci0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEVuYWJsZXMgdGhlIGluZm9ybWF0aW9uYWwgb3V0cHV0IGZyb20gdGhlIGRlY29tcHJlc3Npb24gc3RhZ2UKIAkgIChlLmcuIGJ6SW1hZ2UpIG9mIHRoZSBib290LiBJZiB5b3UgZGlzYWJsZSB0aGlzIHlvdSB3aWxsIHN0aWxsCiAJICBzZWUgZXJyb3JzLiBEaXNhYmxlIHRoaXMgaWYgeW91IHdhbnQgc2lsZW50IGJvb3R1cC4KQEAgLTMzLDcgKzMzLDcgQEAKIGNvbmZpZyBFQVJMWV9QUklOVEsKIAlib29sICJFYXJseSBwcmludGsiIGlmIEVNQkVEREVECiAJZGVmYXVsdCB5Ci0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFdyaXRlIGtlcm5lbCBsb2cgb3V0cHV0IGRpcmVjdGx5IGludG8gdGhlIFZHQSBidWZmZXIgb3IgdG8gYSBzZXJpYWwKIAkgIHBvcnQuCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlib29sICJFYXJseSBwcmludGsgdmlhIEVIQ0kgZGVidWcgcG9ydCIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIEVBUkxZX1BSSU5USyAmJiBQQ0kKLQloZWxwCisJLS0taGVscC0tLQogCSAgV3JpdGUga2VybmVsIGxvZyBvdXRwdXQgZGlyZWN0bHkgaW50byB0aGUgRUhDSSBkZWJ1ZyBwb3J0LgogCiAJICBUaGlzIGlzIHVzZWZ1bCBmb3Iga2VybmVsIGRlYnVnZ2luZyB3aGVuIHlvdXIgbWFjaGluZSBjcmFzaGVzIHZlcnkKQEAgLTU5LDE0ICs1OSwxNCBAQAogY29uZmlnIERFQlVHX1NUQUNLT1ZFUkZMT1cKIAlib29sICJDaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3dzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgbWVzc2FnZXMgdG8gYmUgcHJpbnRlZCBpZiBmcmVlIHN0YWNrIHNwYWNlCiAJICBkcm9wcyBiZWxvdyBhIGNlcnRhaW4gbGltaXQuCiAKIGNvbmZpZyBERUJVR19TVEFDS19VU0FHRQogCWJvb2wgIlN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBFbmFibGVzIHRoZSBkaXNwbGF5IG9mIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBmcmVlIHN0YWNrIHdoaWNoIGVhY2gKIAkgIHRhc2sgaGFzIGV2ZXIgaGFkIGF2YWlsYWJsZSBpbiB0aGUgc3lzcnEtVCBhbmQgc3lzcnEtUCBkZWJ1ZyBvdXRwdXQuCiAKQEAgLTc1LDcgKzc1LDcgQEAKIGNvbmZpZyBERUJVR19QQUdFQUxMT0MKIAlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgogCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKIAkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KQEAgLTgzLDkgKzgzLDkgQEAKIGNvbmZpZyBERUJVR19QRVJfQ1BVX01BUFMKIAlib29sICJEZWJ1ZyBhY2Nlc3MgdG8gcGVyX2NwdSBtYXBzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JZGVwZW5kcyBvbiBYODZfU01QCisJZGVwZW5kcyBvbiBTTVAKIAlkZWZhdWx0IG4KLQloZWxwCisJLS0taGVscC0tLQogCSAgU2F5IFkgdG8gdmVyaWZ5IHRoYXQgdGhlIHBlcl9jcHUgbWFwIGJlaW5nIGFjY2Vzc2VkIGhhcwogCSAgYmVlbiBzZXR1cC4gIEFkZHMgYSBmYWlyIGFtb3VudCBvZiBjb2RlIHRvIGtlcm5lbCBtZW1vcnkKIAkgIGFuZCBkZWNyZWFzZXMgcGVyZm9ybWFuY2UuCkBAIC05Niw3ICs5Niw3IEBACiAJYm9vbCAiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmcyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBERUJVR19GUwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IGluIGEKIAkgIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnMKIAkgIHdobyBhcmUgd29ya2luZyBpbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGtlcm5lbC4KQEAgLTEwOCw3ICsxMDgsNyBAQAogCWJvb2wgIldyaXRlIHByb3RlY3Qga2VybmVsIHJlYWQtb25seSBkYXRhIHN0cnVjdHVyZXMiCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQloZWxwCisJLS0taGVscC0tLQogCSAgTWFyayB0aGUga2VybmVsIHJlYWQtb25seSBkYXRhIGFzIHdyaXRlLXByb3RlY3RlZCBpbiB0aGUgcGFnZXRhYmxlcywKIAkgIGluIG9yZGVyIHRvIGNhdGNoIGFjY2lkZW50YWwgKGFuZCBpbmNvcnJlY3QpIHdyaXRlcyB0byBzdWNoIGNvbnN0CiAJICBkYXRhLiBUaGlzIGlzIHJlY29tbWVuZGVkIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGtlcm5lbCBidWdzIHNvb25lci4KQEAgLTExNyw3ICsxMTcsOCBAQAogY29uZmlnIERFQlVHX1JPREFUQV9URVNUCiAJYm9vbCAiVGVzdGNhc2UgZm9yIHRoZSBERUJVR19ST0RBVEEgZmVhdHVyZSIKIAlkZXBlbmRzIG9uIERFQlVHX1JPREFUQQotCWhlbHAKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgdGVzdGNhc2UgZm9yIHRoZSBERUJVR19ST0RBVEEKIAkgIGZlYXR1cmUgYXMgd2VsbCBhcyBmb3IgdGhlIGNoYW5nZV9wYWdlX2F0dHIoKSBpbmZyYXN0cnVjdHVyZS4KIAkgIElmIGluIGRvdWJ0LCBzYXkgIk4iCkBAIC0xMjUsNyArMTI2LDcgQEAKIGNvbmZpZyBERUJVR19OWF9URVNUCiAJdHJpc3RhdGUgIlRlc3RjYXNlIGZvciB0aGUgTlggbm9uLWV4ZWN1dGFibGUgc3RhY2sgZmVhdHVyZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBtCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSB0ZXN0Y2FzZSBmb3IgdGhlIENQVSBOWCBjYXBhYmlsaXR5CiAJICBhbmQgdGhlIHNvZnR3YXJlIHNldHVwIG9mIHRoaXMgZmVhdHVyZS4KIAkgIElmIGluIGRvdWJ0LCBzYXkgIk4iCkBAIC0xMzMsNyArMTM0LDcgQEAKIGNvbmZpZyA0S1NUQUNLUwogCWJvb2wgIlVzZSA0S2IgZm9yIGtlcm5lbCBzdGFja3MgaW5zdGVhZCBvZiA4S2IiCiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIGtlcm5lbCB3aWxsIHVzZSBhIDRLYiBzdGFja3NpemUgZm9yIHRoZQogCSAga2VybmVsIHN0YWNrIGF0dGFjaGVkIHRvIGVhY2ggcHJvY2Vzcy90aHJlYWQuIFRoaXMgZmFjaWxpdGF0ZXMKIAkgIHJ1bm5pbmcgbW9yZSB0aHJlYWRzIG9uIGEgc3lzdGVtIGFuZCBhbHNvIHJlZHVjZXMgdGhlIHByZXNzdXJlCkBAIC0xNDQsNyArMTQ1LDcgQEAKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgZG91YmxlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gYWxsb3dzIHRyYXBwaW5nIG9mIHJhcmUgZG91YmxlZmF1bHQgZXhjZXB0aW9ucyB0aGF0CiAJICB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYSBzeXN0ZW0gdG8gc2lsZW50bHkgcmVib290LiBEaXNhYmxpbmcgdGhpcwogCSAgb3B0aW9uIHNhdmVzIGFib3V0IDRrIGFuZCBtaWdodCBjYXVzZSB5b3UgbXVjaCBhZGRpdGlvbmFsIGdyZXkKQEAgLTE1NCw3ICsxNTUsNyBAQAogCWJvb2wgIkVuYWJsZSBJT01NVSBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBHQVJUX0lPTU1VICYmIERFQlVHX0tFUk5FTAogCWRlcGVuZHMgb24gWDg2XzY0Ci0JaGVscAorCS0tLWhlbHAtLS0KIAkgIEZvcmNlIHRoZSBJT01NVSB0byBvbiBldmVuIHdoZW4geW91IGhhdmUgbGVzcyB0aGFuIDRHQiBvZgogCSAgbWVtb3J5IGFuZCBhZGQgZGVidWdnaW5nIGNvZGUuIE9uIG92ZXJmbG93IGFsd2F5cyBwYW5pYy4gQW5kCiAJICBhbGxvdyB0byBlbmFibGUgSU9NTVUgbGVhayB0cmFjaW5nLiBDYW4gYmUgZGlzYWJsZWQgYXQgYm9vdApAQCAtMTcwLDcgKzE3MSw3IEBACiAJYm9vbCAiSU9NTVUgbGVhayB0cmFjaW5nIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVwZW5kcyBvbiBJT01NVV9ERUJVRwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBBZGQgYSBzaW1wbGUgbGVhayB0cmFjZXIgdG8gdGhlIElPTU1VIGNvZGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91CiAJICBhcmUgZGVidWdnaW5nIGEgYnVnZ3kgZGV2aWNlIGRyaXZlciB0aGF0IGxlYWtzIElPTU1VIG1hcHBpbmdzLgogCkBAIC0yMDMsMjUgKzIwNCwyNSBAQAogCiBjb25maWcgSU9fREVMQVlfMFg4MAogCWJvb2wgInBvcnQgMHg4MCBiYXNlZCBwb3J0LUlPIGRlbGF5IFtyZWNvbW1lbmRlZF0iCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIExpbnV4IElPIGRlbGF5IHVzZWQgZm9yIGluL291dF9wLgogCSAgSXQgaXMgdGhlIG1vc3QgdGVzdGVkIGhlbmNlIHNhZmVzdCBzZWxlY3Rpb24gaGVyZS4KIAogY29uZmlnIElPX0RFTEFZXzBYRUQKIAlib29sICJwb3J0IDB4ZWQgYmFzZWQgcG9ydC1JTyBkZWxheSIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVXNlIHBvcnQgMHhlZCBhcyB0aGUgSU8gZGVsYXkuIFRoaXMgZnJlZXMgdXAgcG9ydCAweDgwIHdoaWNoIGlzCiAJICBvZnRlbiB1c2VkIGFzIGEgaGFyZHdhcmUtZGVidWcgcG9ydC4KIAogY29uZmlnIElPX0RFTEFZX1VERUxBWQogCWJvb2wgInVkZWxheSBiYXNlZCBwb3J0LUlPIGRlbGF5IgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBVc2UgdWRlbGF5KDIpIGFzIHRoZSBJTyBkZWxheSBtZXRob2QuIFRoaXMgcHJvdmlkZXMgdGhlIGRlbGF5CiAJICB3aGlsZSBub3QgaGF2aW5nIGFueSBzaWRlLWVmZmVjdCBvbiB0aGUgSU8gcG9ydCBzcGFjZS4KIAogY29uZmlnIElPX0RFTEFZX05PTkUKIAlib29sICJubyBwb3J0LUlPIGRlbGF5IgotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBObyBwb3J0LUlPIGRlbGF5LiBXaWxsIGJyZWFrIG9uIG9sZCBib3hlcyB0aGF0IHJlcXVpcmUgcG9ydC1JTwogCSAgZGVsYXkgZm9yIGNlcnRhaW4gb3BlcmF0aW9ucy4gU2hvdWxkIHdvcmsgb24gbW9zdCBuZXcgbWFjaGluZXMuCiAKQEAgLTI1NSwxOCArMjU2LDE4IEBACiAJYm9vbCAiRGVidWcgYm9vdCBwYXJhbWV0ZXJzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVwZW5kcyBvbiBERUJVR19GUwotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0cnVjdCBib290X3BhcmFtcyB0byBiZSBleHBvcnRlZCB2aWEgZGVidWdmcy4KIAogY29uZmlnIENQQV9ERUJVRwogCWJvb2wgIkNQQSBzZWxmLXRlc3QgY29kZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKKwktLS1oZWxwLS0tCiAJICBEbyBjaGFuZ2VfcGFnZV9hdHRyKCkgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLgogCiBjb25maWcgT1BUSU1JWkVfSU5MSU5JTkcKIAlib29sICJBbGxvdyBnY2MgdG8gdW5pbmxpbmUgZnVuY3Rpb25zIG1hcmtlZCAnaW5saW5lJyIKLQloZWxwCisJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyBpZiB0aGUga2VybmVsIGZvcmNlcyBnY2MgdG8gaW5saW5lIHRoZSBmdW5jdGlvbnMKIAkgIGRldmVsb3BlcnMgaGF2ZSBtYXJrZWQgJ2lubGluZScuIERvaW5nIHNvIHRha2VzIGF3YXkgZnJlZWRvbSBmcm9tIGdjYyB0bwogCSAgZG8gd2hhdCBpdCB0aGlua3MgaXMgYmVzdCwgd2hpY2ggaXMgZGVzaXJhYmxlIGZvciB0aGUgZ2NjIDMueCBzZXJpZXMgb2YKQEAgLTI3OSw0ICsyODAsMyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogZW5kbWVudQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IGQxYTQ3YWQuLjE4MzYxOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC03MCwxNCArNzAsMTcgQEAKICAgICAgICAgIyB0aGlzIHdvcmtzIGFyb3VuZCBzb21lIGlzc3VlcyB3aXRoIGdlbmVyYXRpbmcgdW53aW5kIHRhYmxlcyBpbiBvbGRlciBnY2NzCiAgICAgICAgICMgbmV3ZXIgZ2NjcyBkbyBpdCBieSBkZWZhdWx0CiAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MKK2VuZGlmCiAKLSAgICAgICAgc3RhY2twIDo9ICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCi0gICAgICAgIHN0YWNrcC0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgOj0gJChzaGVsbCAkKHN0YWNrcCkgXAotICAgICAgICAgICAgICAgICIkKENDKSIgLWZzdGFjay1wcm90ZWN0b3IgKQotICAgICAgICBzdGFja3AtJChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfQUxMKSArPSAkKHNoZWxsICQoc3RhY2twKSBcCi0gICAgICAgICAgICAgICAgIiQoQ0MpIiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgKQotCi0gICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzdGFja3AteSkKK2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorCWNjX2hhc19zcCA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl8kKEJJVFMpLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKKyAgICAgICAgaWZlcSAoJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjY19oYXNfc3ApICQoQ0MpKSx5KQorICAgICAgICAgICAgICAgIHN0YWNrcC15IDo9IC1mc3RhY2stcHJvdGVjdG9yCisgICAgICAgICAgICAgICAgc3RhY2twLSQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX0FMTCkgKz0gLWZzdGFjay1wcm90ZWN0b3ItYWxsCisgICAgICAgICAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAkKHN0YWNrcC15KQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgJCh3YXJuaW5nIHN0YWNrIHByb3RlY3RvciBlbmFibGVkIGJ1dCBubyBjb21waWxlciBzdXBwb3J0KQorICAgICAgICBlbmRpZgogZW5kaWYKIAogIyBTdGFja3BvaW50ZXIgaXMgYWRkcmVzc2VkIGRpZmZlcmVudCBmb3IgMzIgYml0IGFuZCA2NCBiaXQgeDg2CkBAIC0xMDIsMjkgKzEwNSw2IEBACiAjIHByZXZlbnQgZ2NjIGZyb20gZ2VuZXJhdGluZyBhbnkgRlAgY29kZSBieSBtaXN0YWtlCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQogCi0jIyMKLSMgU3ViIGFyY2hpdGVjdHVyZSBzdXBwb3J0Ci0jIGZjb3JlLXkgaXMgbGlua2VkIGJlZm9yZSBtY29yZS15IGZpbGVzLgotCi0jIERlZmF1bHQgc3ViYXJjaCAuYyBmaWxlcwotbWNvcmUteSAgOj0gYXJjaC94ODYvbWFjaC1kZWZhdWx0LwotCi0jIFZveWFnZXIgc3ViYXJjaCBzdXBwb3J0Ci1tZmxhZ3MtJChDT05GSUdfWDg2X1ZPWUFHRVIpCTo9IC1JYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyCi1tY29yZS0kKENPTkZJR19YODZfVk9ZQUdFUikJOj0gYXJjaC94ODYvbWFjaC12b3lhZ2VyLwotCi0jIGdlbmVyaWMgc3ViYXJjaGl0ZWN0dXJlCi1tZmxhZ3MtJChDT05GSUdfWDg2X0dFTkVSSUNBUkNIKTo9IC1JYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljCi1mY29yZS0kKENPTkZJR19YODZfR0VORVJJQ0FSQ0gpCSs9IGFyY2gveDg2L21hY2gtZ2VuZXJpYy8KLW1jb3JlLSQoQ09ORklHX1g4Nl9HRU5FUklDQVJDSCkJOj0gYXJjaC94ODYvbWFjaC1kZWZhdWx0LwotCi0jIGRlZmF1bHQgc3ViYXJjaCAuaCBmaWxlcwotbWZsYWdzLXkgKz0gLUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQKLQotIyA2NCBiaXQgZG9lcyBub3Qgc3VwcG9ydCBzdWJhcmNoIHN1cHBvcnQgLSBjbGVhciBzdWIgYXJjaCB2YXJpYWJsZXMKLWZjb3JlLSQoQ09ORklHX1g4Nl82NCkgIDo9Ci1tY29yZS0kKENPTkZJR19YODZfNjQpICA6PQotCiBLQlVJTERfQ0ZMQUdTICs9ICQobWZsYWdzLXkpCiBLQlVJTERfQUZMQUdTICs9ICQobWZsYWdzLXkpCiAKQEAgLTE1MCw5ICsxMzAsNiBAQAogY29yZS15ICs9IGFyY2gveDg2L2tlcm5lbC8KIGNvcmUteSArPSBhcmNoL3g4Ni9tbS8KIAotIyBSZW1haW5pbmcgc3ViIGFyY2hpdGVjdHVyZSBmaWxlcwotY29yZS15ICs9ICQobWNvcmUteSkKLQogY29yZS15ICs9IGFyY2gveDg2L2NyeXB0by8KIGNvcmUteSArPSBhcmNoL3g4Ni92ZHNvLwogY29yZS0kKENPTkZJR19JQTMyX0VNVUxBVElPTikgKz0gYXJjaC94ODYvaWEzMi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IGNkNDhjNzIuLmM3MGVmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtMzIsNyArMzIsNiBAQAogc2V0dXAteQkJKz0gaGVhZGVyLm8gbWFpbi5vIG1jYS5vIG1lbW9yeS5vIHBtLm8gcG1qdW1wLm8KIHNldHVwLXkJCSs9IHByaW50Zi5vIHN0cmluZy5vIHR0eS5vIHZpZGVvLm8gdmlkZW8tbW9kZS5vIHZlcnNpb24ubwogc2V0dXAtJChDT05GSUdfWDg2X0FQTV9CT09UKSArPSBhcG0ubwotc2V0dXAtJChDT05GSUdfWDg2X1ZPWUFHRVIpICs9IHZveWFnZXIubwogCiAjIFRoZSBsaW5rIG9yZGVyIG9mIHRoZSB2aWRlby0qLm8gbW9kdWxlcyBjYW4gbWF0dGVyLiAgSW4gcGFydGljdWxhciwKICMgdmlkZW8tdmdhLm8gKm11c3QqIGJlIGxpc3RlZCBmaXJzdCwgZm9sbG93ZWQgYnkgdmlkZW8tdmVzYS5vLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9hMjAuYyBiL2FyY2gveDg2L2Jvb3QvYTIwLmMKaW5kZXggNDA2M2Q2My4uN2MxOWNlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9hMjAuYworKysgYi9hcmNoL3g4Ni9ib290L2EyMC5jCkBAIC0yLDYgKzIsNyBAQAogICoKICAqICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCiAgKiAgIENvcHlyaWdodCAyMDA3LTIwMDggclBhdGgsIEluYy4gLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgIENvcHlyaWdodCAyMDA5IEludGVsIENvcnBvcmF0aW9uCiAgKgogICogICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKICAqICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCkBAIC0xNSwxNiArMTYsMjMgQEAKICNpbmNsdWRlICJib290LmgiCiAKICNkZWZpbmUgTUFYXzgwNDJfTE9PUFMJMTAwMDAwCisjZGVmaW5lIE1BWF84MDQyX0ZGCTMyCiAKIHN0YXRpYyBpbnQgZW1wdHlfODA0Mih2b2lkKQogewogCXU4IHN0YXR1czsKIAlpbnQgbG9vcHMgPSBNQVhfODA0Ml9MT09QUzsKKwlpbnQgZmZzICAgPSBNQVhfODA0Ml9GRjsKIAogCXdoaWxlIChsb29wcy0tKSB7CiAJCWlvX2RlbGF5KCk7CiAKIAkJc3RhdHVzID0gaW5iKDB4NjQpOworCQlpZiAoc3RhdHVzID09IDB4ZmYpIHsKKwkJCS8qIEZGIGlzIGEgcGxhdXNpYmxlLCBidXQgdmVyeSB1bmxpa2VseSBzdGF0dXMgKi8KKwkJCWlmICghLS1mZnMpCisJCQkJcmV0dXJuIC0xOyAvKiBBc3N1bWUgbm8gS0JDIHByZXNlbnQgKi8KKwkJfQogCQlpZiAoc3RhdHVzICYgMSkgewogCQkJLyogUmVhZCBhbmQgZGlzY2FyZCBpbnB1dCBkYXRhICovCiAJCQlpb19kZWxheSgpOwpAQCAtMTE4LDQ0ICsxMjYsMzcgQEAKIAogaW50IGVuYWJsZV9hMjAodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfRUxBTikKLQkvKiBFbGFuIGNyb2FrcyBpZiB3ZSB0cnkgdG8gdG91Y2ggdGhlIEtCQyAqLwotCWVuYWJsZV9hMjBfZmFzdCgpOwotCXdoaWxlICghYTIwX3Rlc3RfbG9uZygpKQotCQk7Ci0JcmV0dXJuIDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19YODZfVk9ZQUdFUikKLQkvKiBPbiBWb3lhZ2VyLCBhMjBfdGVzdCgpIGlzIHVuc2FmZT8gKi8KLQllbmFibGVfYTIwX2tiYygpOwotCXJldHVybiAwOwotI2Vsc2UKICAgICAgICBpbnQgbG9vcHMgPSBBMjBfRU5BQkxFX0xPT1BTOwotCXdoaWxlIChsb29wcy0tKSB7Ci0JCS8qIEZpcnN0LCBjaGVjayB0byBzZWUgaWYgQTIwIGlzIGFscmVhZHkgZW5hYmxlZAotCQkgICAobGVnYWN5IGZyZWUsIGV0Yy4pICovCi0JCWlmIChhMjBfdGVzdF9zaG9ydCgpKQotCQkJcmV0dXJuIDA7CisgICAgICAgaW50IGtiY19lcnI7CiAKLQkJLyogTmV4dCwgdHJ5IHRoZSBCSU9TIChJTlQgMHgxNSwgQVg9MHgyNDAxKSAqLwotCQllbmFibGVfYTIwX2Jpb3MoKTsKLQkJaWYgKGEyMF90ZXN0X3Nob3J0KCkpCi0JCQlyZXR1cm4gMDsKKyAgICAgICB3aGlsZSAobG9vcHMtLSkgeworCSAgICAgICAvKiBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIEEyMCBpcyBhbHJlYWR5IGVuYWJsZWQKKwkJICAobGVnYWN5IGZyZWUsIGV0Yy4pICovCisJICAgICAgIGlmIChhMjBfdGVzdF9zaG9ydCgpKQorCQkgICAgICAgcmV0dXJuIDA7CisJICAgICAgIAorCSAgICAgICAvKiBOZXh0LCB0cnkgdGhlIEJJT1MgKElOVCAweDE1LCBBWD0weDI0MDEpICovCisJICAgICAgIGVuYWJsZV9hMjBfYmlvcygpOworCSAgICAgICBpZiAoYTIwX3Rlc3Rfc2hvcnQoKSkKKwkJICAgICAgIHJldHVybiAwOworCSAgICAgICAKKwkgICAgICAgLyogVHJ5IGVuYWJsaW5nIEEyMCB0aHJvdWdoIHRoZSBrZXlib2FyZCBjb250cm9sbGVyICovCisJICAgICAgIGtiY19lcnIgPSBlbXB0eV84MDQyKCk7CiAKLQkJLyogVHJ5IGVuYWJsaW5nIEEyMCB0aHJvdWdoIHRoZSBrZXlib2FyZCBjb250cm9sbGVyICovCi0JCWVtcHR5XzgwNDIoKTsKLQkJaWYgKGEyMF90ZXN0X3Nob3J0KCkpCi0JCQlyZXR1cm4gMDsgLyogQklPUyB3b3JrZWQsIGJ1dCB3aXRoIGRlbGF5ZWQgcmVhY3Rpb24gKi8KLQotCQllbmFibGVfYTIwX2tiYygpOwotCQlpZiAoYTIwX3Rlc3RfbG9uZygpKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogRmluYWxseSwgdHJ5IGVuYWJsaW5nIHRoZSAiZmFzdCBBMjAgZ2F0ZSIgKi8KLQkJZW5hYmxlX2EyMF9mYXN0KCk7Ci0JCWlmIChhMjBfdGVzdF9sb25nKCkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLTE7Ci0jZW5kaWYKKwkgICAgICAgaWYgKGEyMF90ZXN0X3Nob3J0KCkpCisJCSAgICAgICByZXR1cm4gMDsgLyogQklPUyB3b3JrZWQsIGJ1dCB3aXRoIGRlbGF5ZWQgcmVhY3Rpb24gKi8KKwkKKwkgICAgICAgaWYgKCFrYmNfZXJyKSB7CisJCSAgICAgICBlbmFibGVfYTIwX2tiYygpOworCQkgICAgICAgaWYgKGEyMF90ZXN0X2xvbmcoKSkKKwkJCSAgICAgICByZXR1cm4gMDsKKwkgICAgICAgfQorCSAgICAgICAKKwkgICAgICAgLyogRmluYWxseSwgdHJ5IGVuYWJsaW5nIHRoZSAiZmFzdCBBMjAgZ2F0ZSIgKi8KKwkgICAgICAgZW5hYmxlX2EyMF9mYXN0KCk7CisJICAgICAgIGlmIChhMjBfdGVzdF9sb25nKCkpCisJCSAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisgICAgICAgCisgICAgICAgcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9ib290LmggYi9hcmNoL3g4Ni9ib290L2Jvb3QuaAppbmRleCBjYzBlZjEzLi43YjI2OTJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2Jvb3QuaAorKysgYi9hcmNoL3g4Ni9ib290L2Jvb3QuaApAQCAtMzAyLDkgKzMwMiw2IEBACiAvKiB2aWRlby12ZXNhLmMgKi8KIHZvaWQgdmVzYV9zdG9yZV9lZGlkKHZvaWQpOwogCi0vKiB2b3lhZ2VyLmMgKi8KLWludCBxdWVyeV92b3lhZ2VyKHZvaWQpOwotCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBCT09UX0JPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDE3NzFjODAuLjNjYTRjMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMgOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiBoZWFkXyQoQklUUykubyBtaXNjLm8gcGlnZ3kubwordGFyZ2V0cyA6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIEtCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgogS0JVSUxEX0NGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZlBJQwpAQCAtNDcsMTggKzQ3LDM1IEBACiBpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKICQob2JqKS92bWxpbnV4LmJpbi5nejogJChvYmopL3ZtbGludXguYmluLmFsbCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4uYWxsIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiskKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluLmFsbCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiBlbHNlCiAkKG9iaikvdm1saW51eC5iaW4uZ3o6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKyQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogZW5kaWYKIExERkxBR1NfcGlnZ3kubyA6PSAtciAtLWZvcm1hdCBiaW5hcnkgLS1vZm9ybWF0IGVsZjMyLWkzODYgLVQKIAogZWxzZQorCiAkKG9iaikvdm1saW51eC5iaW4uZ3o6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKyQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogCiBMREZMQUdTX3BpZ2d5Lm8gOj0gLXIgLS1mb3JtYXQgYmluYXJ5IC0tb2Zvcm1hdCBlbGY2NC14ODYtNjQgLVQKIGVuZGlmCiAKLSQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLmd6IEZPUkNFCitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0daSVApICA9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKSA9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKSAgPSBsem1hCisKKyQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLiQoc3VmZml4X3kpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwppbmRleCAyOWM1ZmJmLi4zYThhODY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKQEAgLTI1LDE0ICsyNSwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKIC5zZWN0aW9uICIudGV4dC5oZWFkIiwiYXgiLEBwcm9nYml0cwotCS5nbG9ibCBzdGFydHVwXzMyCi0KLXN0YXJ0dXBfMzI6CitFTlRSWShzdGFydHVwXzMyKQogCWNsZAogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkgKiB1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCkBAIC0xMTMsNiArMTExLDggQEAKICAqLwogCWxlYWwgcmVsb2NhdGVkKCVlYngpLCAlZWF4CiAJam1wIColZWF4CitFTkRQUk9DKHN0YXJ0dXBfMzIpCisKIC5zZWN0aW9uICIudGV4dCIKIHJlbG9jYXRlZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggMWQ1ZGZmNC4uZWQ0YTgyOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KQEAgLTM1LDkgKzM1LDcgQEAKIAogLnNlY3Rpb24gIi50ZXh0LmhlYWQiCiAJLmNvZGUzMgotCS5nbG9ibCBzdGFydHVwXzMyCi0KLXN0YXJ0dXBfMzI6CitFTlRSWShzdGFydHVwXzMyKQogCWNsZAogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkgKiB1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCkBAIC0xNzYsNiArMTc0LDcgQEAKIAogCS8qIEp1bXAgZnJvbSAzMmJpdCBjb21wYXRpYmlsaXR5IG1vZGUgaW50byA2NGJpdCBtb2RlLiAqLwogCWxyZXQKK0VORFBST0Moc3RhcnR1cF8zMikKIAogbm9fbG9uZ21vZGU6CiAJLyogVGhpcyBpc24ndCBhbiB4ODYtNjQgQ1BVIHNvIGhhbmcgKi8KQEAgLTI5NSw3ICsyOTQsNiBAQAogCWNhbGwJZGVjb21wcmVzc19rZXJuZWwKIAlwb3BxCSVyc2kKIAotCiAvKgogICogSnVtcCB0byB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZGEwNjIyMS4uZTQ1YmU3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xMTYsNzEgKzExNiwxMyBAQAogLyoKICAqIGd6aXAgZGVjbGFyYXRpb25zCiAgKi8KLQotI2RlZmluZSBPRihhcmdzKQlhcmdzCiAjZGVmaW5lIFNUQVRJQwkJc3RhdGljCiAKICN1bmRlZiBtZW1zZXQKICN1bmRlZiBtZW1jcHkKICNkZWZpbmUgbWVtemVybyhzLCBuKQltZW1zZXQoKHMpLCAwLCAobikpCiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhcgl1Y2g7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CXVzaDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwl1bGc7CiAKLS8qCi0gKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgYW5kIGEgcG93ZXIgb2YgdHdvLgotICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIHdpbmRvdyBqdXN0IGEgaHVnZSBvdXRwdXQgYnVmZmVyLAotICogc28gd2UgcmVwb3J0IGEgMkcgd2luZG93IHNpemUsIGFzIHRoYXQgc2hvdWxkIGFsd2F5cyBiZQotICogbGFyZ2VyIHRoYW4gb3VyIG91dHB1dCBidWZmZXI6Ci0gKi8KLSNkZWZpbmUgV1NJWkUJCTB4ODAwMDAwMDAKLQotLyogSW5wdXQgYnVmZmVyOiAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIJKmluYnVmOwotCi0vKiBTbGlkaW5nIHdpbmRvdyBidWZmZXIgKGFuZCBmaW5hbCBvdXRwdXQgYnVmZmVyKTogKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyCSp3aW5kb3c7Ci0KLS8qIFZhbGlkIGJ5dGVzIGluIGluYnVmOiAqLwotc3RhdGljIHVuc2lnbmVkCQlpbnNpemU7Ci0KLS8qIEluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWY6ICovCi1zdGF0aWMgdW5zaWduZWQJCWlucHRyOwotCi0vKiBCeXRlcyBpbiBvdXRwdXQgYnVmZmVyOiAqLwotc3RhdGljIHVuc2lnbmVkCQlvdXRjbnQ7Ci0KLS8qIGd6aXAgZmxhZyBieXRlICovCi0jZGVmaW5lIEFTQ0lJX0ZMQUcJMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgQVNDSUkgdGV4dCAqLwotI2RlZmluZSBDT05USU5VQVRJT04JMHgwMiAvKiBiaXQgMSBzZXQ6IGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1wYXJ0IGd6IGZpbGUgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQJMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU0JMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQJCTB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLwotI2RlZmluZSBFTkNSWVBURUQJMHgyMCAvKiBiaXQgNSBzZXQ6IGZpbGUgaXMgZW5jcnlwdGVkICovCi0jZGVmaW5lIFJFU0VSVkVECTB4QzAgLyogYml0IDYsIDc6ICByZXNlcnZlZCAqLwotCi0jZGVmaW5lIGdldF9ieXRlKCkJKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiBmaWxsX2luYnVmKCkpCi0KLS8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKLSMgIGRlZmluZSBBc3NlcnQoY29uZCwgbXNnKSBkbyB7IGlmICghKGNvbmQpKSBlcnJvcihtc2cpOyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNlKHgpCWRvIHsgZnByaW50ZiB4OyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNldih4KQlkbyB7IGlmICh2ZXJib3NlKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNldnYoeCkJZG8geyBpZiAodmVyYm9zZSA+IDEpIGZwcmludGYgeCA7IH0gd2hpbGUgKDApCi0jICBkZWZpbmUgVHJhY2VjKGMsIHgpCWRvIHsgaWYgKHZlcmJvc2UgJiYgKGMpKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQotIyAgZGVmaW5lIFRyYWNlY3YoYywgeCkJZG8geyBpZiAodmVyYm9zZSA+IDEgJiYgKGMpKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQotI2Vsc2UKLSMgIGRlZmluZSBBc3NlcnQoY29uZCwgbXNnKQotIyAgZGVmaW5lIFRyYWNlKHgpCi0jICBkZWZpbmUgVHJhY2V2KHgpCi0jICBkZWZpbmUgVHJhY2V2dih4KQotIyAgZGVmaW5lIFRyYWNlYyhjLCB4KQotIyAgZGVmaW5lIFRyYWNlY3YoYywgeCkKLSNlbmRpZgotCi1zdGF0aWMgaW50ICBmaWxsX2luYnVmKHZvaWQpOwotc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpOwogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CiAKIC8qCkBAIC0xODksMTMgKzEzMSw4IEBACiBzdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCiBzdGF0aWMgaW50IHF1aWV0OwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBpbnB1dF9kYXRhW107Ci1leHRlcm4gaW50IGlucHV0X2xlbjsKLQotc3RhdGljIGxvbmcgYnl0ZXNfb3V0OwotCiBzdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCB1bnNpZ25lZCBuKTsKLXN0YXRpYyB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKTsKK3ZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pOwogCiBzdGF0aWMgdm9pZCBfX3B1dHN0cihpbnQsIGNvbnN0IGNoYXIgKik7CiAjZGVmaW5lIHB1dHN0cihfX3gpICBfX3B1dHN0cigwLCBfX3gpCkBAIC0yMTMsNyArMTUwLDE3IEBACiBzdGF0aWMgaW50IHZpZHBvcnQ7CiBzdGF0aWMgaW50IGxpbmVzLCBjb2xzOwogCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2luZmxhdGUuYyIKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHNjcm9sbCh2b2lkKQogewpAQCAtMjgyLDcgKzIyOSw3IEBACiAJcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKQordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbikKIHsKIAlpbnQgaTsKIAljb25zdCBjaGFyICpzID0gc3JjOwpAQCAtMjkzLDM4ICsyNDAsNiBAQAogCXJldHVybiBkZXN0OwogfQogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkKLSAqIGFuZCBhdCBsZWFzdCBvbmUgYnl0ZSBpcyByZWFsbHkgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IGZpbGxfaW5idWYodm9pZCkKLXsKLQllcnJvcigicmFuIG91dCBvZiBpbnB1dCBkYXRhIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgdGhlIG91dHB1dCB3aW5kb3cgd2luZG93WzAuLm91dGNudC0xXSBhbmQgdXBkYXRlIGNyYyBhbmQgYnl0ZXNfb3V0LgotICogKFVzZWQgZm9yIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvbmx5LikKLSAqLwotc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpCi17Ci0JLyogV2l0aCBteSB3aW5kb3cgZXF1YWwgdG8gbXkgb3V0cHV0IGJ1ZmZlcgotCSAqIEkgb25seSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNyYyBoZXJlLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLQl1bnNpZ25lZCBuOwotCXVuc2lnbmVkIGNoYXIgKmluLCBjaDsKLQotCWluID0gd2luZG93OwotCWZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCQljaCA9ICppbisrOwotCQljID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLQl9Ci0JY3JjID0gYzsKLQlieXRlc19vdXQgKz0gKHVuc2lnbmVkIGxvbmcpb3V0Y250OwotCW91dGNudCA9IDA7Ci19CiAKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKngpCiB7CkBAIC00MDcsMTIgKzMyMiw4IEBACiAJbGluZXMgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXM7CiAJY29scyA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19jb2xzOwogCi0Jd2luZG93ID0gb3V0cHV0OwkJLyogT3V0cHV0IGJ1ZmZlciAoTm9ybWFsbHkgYXQgMU0pICovCiAJZnJlZV9tZW1fcHRyICAgICA9IGhlYXA7CS8qIEhlYXAgKi8KIAlmcmVlX21lbV9lbmRfcHRyID0gaGVhcCArIEJPT1RfSEVBUF9TSVpFOwotCWluYnVmICA9IGlucHV0X2RhdGE7CQkvKiBJbnB1dCBidWZmZXIgKi8KLQlpbnNpemUgPSBpbnB1dF9sZW47Ci0JaW5wdHIgID0gMDsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoKHVuc2lnbmVkIGxvbmcpb3V0cHV0ICYgKF9fS0VSTkVMX0FMSUdOIC0gMSkpCkBAIC00MzAsMTAgKzM0MSw5IEBACiAjZW5kaWYKICNlbmRpZgogCi0JbWFrZWNyYygpOwogCWlmICghcXVpZXQpCiAJCXB1dHN0cigiXG5EZWNvbXByZXNzaW5nIExpbnV4Li4uICIpOwotCWd1bnppcCgpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXQsIE5VTEwsIGVycm9yKTsKIAlwYXJzZV9lbGYob3V0cHV0KTsKIAlpZiAoIXF1aWV0KQogCQlwdXRzdHIoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29weS5TIGIvYXJjaC94ODYvYm9vdC9jb3B5LlMKaW5kZXggZWY1MGM4NC4uMTFmMjcyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb3B5LlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb3B5LlMKQEAgLTgsNiArOCw4IEBACiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKwogLyoKICAqIE1lbW9yeSBjb3B5IHJvdXRpbmVzCiAgKi8KQEAgLTE1LDkgKzE3LDcgQEAKIAkuY29kZTE2Z2NjCiAJLnRleHQKIAotCS5nbG9ibAltZW1jcHkKLQkudHlwZQltZW1jcHksIEBmdW5jdGlvbgotbWVtY3B5OgorR0xPQkFMKG1lbWNweSkKIAlwdXNodwklc2kKIAlwdXNodwklZGkKIAltb3Z3CSVheCwgJWRpCkBAIC0zMSwxMSArMzEsOSBAQAogCXBvcHcJJWRpCiAJcG9wdwklc2kKIAlyZXQKLQkuc2l6ZQltZW1jcHksIC4tbWVtY3B5CitFTkRQUk9DKG1lbWNweSkKIAotCS5nbG9ibAltZW1zZXQKLQkudHlwZQltZW1zZXQsIEBmdW5jdGlvbgotbWVtc2V0OgorR0xPQkFMKG1lbXNldCkKIAlwdXNodwklZGkKIAltb3Z3CSVheCwgJWRpCiAJbW92emJsCSVkbCwgJWVheApAQCAtNDgsNTIgKzQ2LDQyIEBACiAJcmVwOyBzdG9zYgogCXBvcHcJJWRpCiAJcmV0Ci0JLnNpemUJbWVtc2V0LCAuLW1lbXNldAorRU5EUFJPQyhtZW1zZXQpCiAKLQkuZ2xvYmwJY29weV9mcm9tX2ZzCi0JLnR5cGUJY29weV9mcm9tX2ZzLCBAZnVuY3Rpb24KLWNvcHlfZnJvbV9mczoKK0dMT0JBTChjb3B5X2Zyb21fZnMpCiAJcHVzaHcJJWRzCiAJcHVzaHcJJWZzCiAJcG9wdwklZHMKIAljYWxsCW1lbWNweQogCXBvcHcJJWRzCiAJcmV0Ci0JLnNpemUJY29weV9mcm9tX2ZzLCAuLWNvcHlfZnJvbV9mcworRU5EUFJPQyhjb3B5X2Zyb21fZnMpCiAKLQkuZ2xvYmwJY29weV90b19mcwotCS50eXBlCWNvcHlfdG9fZnMsIEBmdW5jdGlvbgotY29weV90b19mczoKK0dMT0JBTChjb3B5X3RvX2ZzKQogCXB1c2h3CSVlcwogCXB1c2h3CSVmcwogCXBvcHcJJWVzCiAJY2FsbAltZW1jcHkKIAlwb3B3CSVlcwogCXJldAotCS5zaXplCWNvcHlfdG9fZnMsIC4tY29weV90b19mcworRU5EUFJPQyhjb3B5X3RvX2ZzKQogCiAjaWYgMCAvKiBOb3QgY3VycmVudGx5IHVzZWQsIGJ1dCBjYW4gYmUgZW5hYmxlZCBhcyBuZWVkZWQgKi8KLQotCS5nbG9ibAljb3B5X2Zyb21fZ3MKLQkudHlwZQljb3B5X2Zyb21fZ3MsIEBmdW5jdGlvbgotY29weV9mcm9tX2dzOgorR0xPQkFMKGNvcHlfZnJvbV9ncykKIAlwdXNodwklZHMKIAlwdXNodwklZ3MKIAlwb3B3CSVkcwogCWNhbGwJbWVtY3B5CiAJcG9wdwklZHMKIAlyZXQKLQkuc2l6ZQljb3B5X2Zyb21fZ3MsIC4tY29weV9mcm9tX2dzCi0JLmdsb2JsCWNvcHlfdG9fZ3MKK0VORFBST0MoY29weV9mcm9tX2dzKQogCi0JLnR5cGUJY29weV90b19ncywgQGZ1bmN0aW9uCi1jb3B5X3RvX2dzOgorR0xPQkFMKGNvcHlfdG9fZ3MpCiAJcHVzaHcJJWVzCiAJcHVzaHcJJWdzCiAJcG9wdwklZXMKIAljYWxsCW1lbWNweQogCXBvcHcJJWVzCiAJcmV0Ci0JLnNpemUJY29weV90b19ncywgLi1jb3B5X3RvX2dzCi0KK0VORFBST0MoY29weV90b19ncykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUyBiL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKaW5kZXggYjk5MzA2Mi4uN2NjZmY0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUworKysgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSAiYm9vdC5oIgogI2luY2x1ZGUgIm9mZnNldHMuaCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWFpbi5jIGIvYXJjaC94ODYvYm9vdC9tYWluLmMKaW5kZXggMTk3NDIxZC4uNThmMDQxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9tYWluLmMKKysrIGIvYXJjaC94ODYvYm9vdC9tYWluLmMKQEAgLTE0OSwxMSArMTQ5LDYgQEAKIAkvKiBRdWVyeSBNQ0EgaW5mb3JtYXRpb24gKi8KIAlxdWVyeV9tY2EoKTsKIAotCS8qIFZveWFnZXIgKi8KLSNpZmRlZiBDT05GSUdfWDg2X1ZPWUFHRVIKLQlxdWVyeV92b3lhZ2VyKCk7Ci0jZW5kaWYKLQogCS8qIFF1ZXJ5IEludGVsIFNwZWVkU3RlcCAoSVNUKSBpbmZvcm1hdGlvbiAqLwogCXF1ZXJ5X2lzdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3BtanVtcC5TIGIvYXJjaC94ODYvYm9vdC9wbWp1bXAuUwppbmRleCAxNDFiNmUyLi4wMTljMTdhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3BtanVtcC5TCisrKyBiL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKQEAgLTE1LDE4ICsxNSwxNSBAQAogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAJLnRleHQKLQotCS5nbG9ibAlwcm90ZWN0ZWRfbW9kZV9qdW1wCi0JLnR5cGUJcHJvdGVjdGVkX21vZGVfanVtcCwgQGZ1bmN0aW9uCi0KIAkuY29kZTE2CiAKIC8qCiAgKiB2b2lkIHByb3RlY3RlZF9tb2RlX2p1bXAodTMyIGVudHJ5cG9pbnQsIHUzMiBib290cGFyYW1zKTsKICAqLwotcHJvdGVjdGVkX21vZGVfanVtcDoKK0dMT0JBTChwcm90ZWN0ZWRfbW9kZV9qdW1wKQogCW1vdmwJJWVkeCwgJWVzaQkJIyBQb2ludGVyIHRvIGJvb3RfcGFyYW1zIHRhYmxlCiAKIAl4b3JsCSVlYngsICVlYngKQEAgLTQ3LDEyICs0NCwxMCBAQAogCS5ieXRlCTB4NjYsIDB4ZWEJCSMgbGptcGwgb3Bjb2RlCiAyOgkubG9uZwlpbl9wbTMyCQkJIyBvZmZzZXQKIAkud29yZAlfX0JPT1RfQ1MJCSMgc2VnbWVudAotCi0JLnNpemUJcHJvdGVjdGVkX21vZGVfanVtcCwgLi1wcm90ZWN0ZWRfbW9kZV9qdW1wCitFTkRQUk9DKHByb3RlY3RlZF9tb2RlX2p1bXApCiAKIAkuY29kZTMyCi0JLnR5cGUJaW5fcG0zMiwgQGZ1bmN0aW9uCi1pbl9wbTMyOgorR0xPQkFMKGluX3BtMzIpCiAJIyBTZXQgdXAgZGF0YSBzZWdtZW50cyBmb3IgZmxhdCAzMi1iaXQgbW9kZQogCW1vdmwJJWVjeCwgJWRzCiAJbW92bAklZWN4LCAlZXMKQEAgLTc4LDUgKzczLDQgQEAKIAlsbGR0CSVjeAogCiAJam1wbAkqJWVheAkJCSMgSnVtcCB0byB0aGUgMzItYml0IGVudHJ5cG9pbnQKLQotCS5zaXplCWluX3BtMzIsIC4taW5fcG0zMgorRU5EUFJPQyhpbl9wbTMyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92b3lhZ2VyLmMgYi9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzOTA5ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKLSAqCi0gKiAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcwotICogICBDb3B5cmlnaHQgMjAwNyByUGF0aCwgSW5jLiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSAqCi0gKiAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgotICogICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogR2V0IHRoZSBWb3lhZ2VyIGNvbmZpZyBpbmZvcm1hdGlvbgotICovCi0KLSNpbmNsdWRlICJib290LmgiCi0KLWludCBxdWVyeV92b3lhZ2VyKHZvaWQpCi17Ci0JdTggZXJyOwotCXUxNiBlcywgZGk7Ci0JLyogQWJ1c2UgdGhlIGFwbV9iaW9zX2luZm8gYXJlYSBmb3IgdGhpcyAqLwotCXU4ICpkYXRhX3B0ciA9ICh1OCAqKSZib290X3BhcmFtcy5hcG1fYmlvc19pbmZvOwotCi0JZGF0YV9wdHJbMF0gPSAweGZmOwkvKiBGbGFnIG9uIGNvbmZpZyBub3QgZm91bmQoPykgKi8KLQotCWFzbSgicHVzaHcgJSVlcyA7ICIKLQkgICAgImludCAkMHgxNSA7ICIKLQkgICAgInNldGMgJTAgOyAiCi0JICAgICJtb3Z3ICUlZXMsICUxIDsgIgotCSAgICAicG9wdyAlJWVzIgotCSAgICA6ICI9cSIgKGVyciksICI9ciIgKGVzKSwgIj1EIiAoZGkpCi0JICAgIDogImEiICgweGZmYzApKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiAtMTsJLyogTm90IFZveWFnZXIgKi8KLQotCXNldF9mcyhlcyk7Ci0JY29weV9mcm9tX2ZzKGRhdGFfcHRyLCBkaSwgNyk7CS8qIFRhYmxlIGlzIDcgYnl0ZXMgYXBwYXJlbnRseSAqLwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKaW5kZXggZWRiYTAwZC4uMjM1YjgxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZworKysgYi9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM1Ci0jIFdlZCBTZXAgIDMgMTc6MjM6MDkgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBUdWUgRmViIDI0IDE1OjUwOjU4IDIwMDkKICMKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19YODZfMzI9eQogIyBDT05GSUdfWDg2XzY0IGlzIG5vdCBzZXQKIENPTkZJR19YODY9eQogQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIgotIyBDT05GSUdfR0VORVJJQ19MT0NLQlJFQUsgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0c9eQpAQCAtMjQsMTYgKzIzLDE0IEBACiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKICMgQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9IQVNfQ1BVX1JFTEFYPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRT15CiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogIyBDT05GSUdfSEFWRV9DUFVNQVNLX09GX0NQVV9NQVAgaXMgbm90IHNldApAQCAtNDIsMTIgKzM5LDEyIEBACiAjIENPTkZJR19aT05FX0RNQTMyIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiAjIENPTkZJR19BVURJVF9BUkNIIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1JWkVEX0lOTElOSU5HPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15CiBDT05GSUdfWDg2X1NNUD15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX1g4Nl8zMl9TTVA9eQogQ09ORklHX1g4Nl9IVD15CiBDT05GSUdfWDg2X0JJT1NfUkVCT09UPXkKQEAgLTc2LDMwICs3Myw0NCBAQAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0FVRElUX1RSRUU9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLUNPTkZJR19DR1JPVVBTPXkKLSMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0dST1VQX05TPXkKLSMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0s9eQogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9TQ0hFRD15CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9OUz15CitDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eQorIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15CiBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlM9eQogIyBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQogQ09ORklHX1JFTEFZPXkKIENPTkZJR19OQU1FU1BBQ0VTPXkKIENPTkZJR19VVFNfTlM9eQogQ09ORklHX0lQQ19OUz15CiBDT05GSUdfVVNFUl9OUz15CiBDT05GSUdfUElEX05TPXkKK0NPTkZJR19ORVRfTlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtMTI0LDEyICsxMzUsMTUgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX01BUktFUlM9eQogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQpAQCAtMTM5LDE1ICsxNTMsMTAgQEAKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTE1NSwxMiArMTY0LDEwIEBACiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX1NUT1BfTUFDSElORT15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNyArMTgzLDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTE4NiwxNSArMTkzLDE0IEBACiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQorQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1g4Nl9GSU5EX1NNUF9DT05GSUc9eQogQ09ORklHX1g4Nl9NUFBBUlNFPXkKLUNPTkZJR19YODZfUEM9eQogIyBDT05GSUdfWDg2X0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfWDg2X1ZPWUFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWDg2X0dFTkVSSUNBUkNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9WU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9SREMzMjFYIGlzIG5vdCBzZXQKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19QQVJBVklSVF9HVUVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX00zODYgaXMgbm90IHNldApAQCAtMjM4LDEwICsyNDQsMTkgQEAKIENPTkZJR19YODZfQ01PVj15CiBDT05GSUdfWDg2X01JTklNVU1fQ1BVX0ZBTUlMWT00CiBDT05GSUdfWDg2X0RFQlVHQ1RMTVNSPXkKK0NPTkZJR19DUFVfU1VQX0lOVEVMPXkKK0NPTkZJR19DUFVfU1VQX0NZUklYXzMyPXkKK0NPTkZJR19DUFVfU1VQX0FNRD15CitDT05GSUdfQ1BVX1NVUF9DRU5UQVVSXzMyPXkKK0NPTkZJR19DUFVfU1VQX1RSQU5TTUVUQV8zMj15CitDT05GSUdfQ1BVX1NVUF9VTUNfMzI9eQorQ09ORklHX1g4Nl9EUz15CitDT05GSUdfWDg2X1BUUkFDRV9CVFM9eQogQ09ORklHX0hQRVRfVElNRVI9eQogQ09ORklHX0hQRVRfRU1VTEFURV9SVEM9eQogQ09ORklHX0RNST15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfQVBJIGlzIG5vdCBzZXQKIENPTkZJR19OUl9DUFVTPTY0CiBDT05GSUdfU0NIRURfU01UPXkKIENPTkZJR19TQ0hFRF9NQz15CkBAIC0yNTAsMTIgKzI2NSwxNyBAQAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfWDg2X0xPQ0FMX0FQSUM9eQogQ09ORklHX1g4Nl9JT19BUElDPXkKLSMgQ09ORklHX1g4Nl9NQ0UgaXMgbm90IHNldAorQ09ORklHX1g4Nl9SRVJPVVRFX0ZPUl9CUk9LRU5fQk9PVF9JUlFTPXkKK0NPTkZJR19YODZfTUNFPXkKK0NPTkZJR19YODZfTUNFX05PTkZBVEFMPXkKK0NPTkZJR19YODZfTUNFX1A0VEhFUk1BTD15CiBDT05GSUdfVk04Nj15CiAjIENPTkZJR19UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX0k4SyBpcyBub3Qgc2V0CiBDT05GSUdfWDg2X1JFQk9PVEZJWFVQUz15CiBDT05GSUdfTUlDUk9DT0RFPXkKK0NPTkZJR19NSUNST0NPREVfSU5URUw9eQorQ09ORklHX01JQ1JPQ09ERV9BTUQ9eQogQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFPXkKIENPTkZJR19YODZfTVNSPXkKIENPTkZJR19YODZfQ1BVSUQ9eQpAQCAtMjY0LDYgKzI4NCw3IEBACiAjIENPTkZJR19ISUdITUVNNjRHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiBDT05GSUdfSElHSE1FTT15CisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsMTQgKzI5NSwxNyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hJR0hQVEU9eQorQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT049eQorQ09ORklHX1g4Nl9CT09UUEFSQU1fTUVNT1JZX0NPUlJVUFRJT05fQ0hFQ0s9eQorQ09ORklHX1g4Nl9SRVNFUlZFX0xPV182NEs9eQogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX01UUlI9eQogIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldApAQCAtMzAyLDEwICszMjYsMTEgQEAKIENPTkZJR19QSFlTSUNBTF9BTElHTj0weDIwMDAwMAogQ09ORklHX0hPVFBMVUdfQ1BVPXkKICMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogCiAjCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIyBQb3dlciBtYW5hZ2VtZW50IGFuZCBBQ1BJIG9wdGlvbnMKICMKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQpAQCAtMzMxLDE5ICszNTYsMTMgQEAKIENPTkZJR19BQ1BJX0JVVFRPTj15CiBDT05GSUdfQUNQSV9GQU49eQogQ09ORklHX0FDUElfRE9DSz15Ci0jIENPTkZJR19BQ1BJX0JBWSBpcyBub3Qgc2V0CiBDT05GSUdfQUNQSV9QUk9DRVNTT1I9eQogQ09ORklHX0FDUElfSE9UUExVR19DUFU9eQogQ09ORklHX0FDUElfVEhFUk1BTD15Ci0jIENPTkZJR19BQ1BJX1dNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ1BJX0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfQUNQSV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFQgaXMgbm90IHNldAogQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAogIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9FQz15CiAjIENPTkZJR19BQ1BJX1BDSV9TTE9UIGlzIG5vdCBzZXQKLUNPTkZJR19BQ1BJX1BPV0VSPXkKIENPTkZJR19BQ1BJX1NZU1RFTT15CiBDT05GSUdfWDg2X1BNX1RJTUVSPXkKIENPTkZJR19BQ1BJX0NPTlRBSU5FUj15CkBAIC0zODgsNyArNDA3LDYgQEAKICMKICMgc2hhcmVkIG9wdGlvbnMKICMKLSMgQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVFfUFJPQ19JTlRGIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CkBAIC00MTUsNiArNDMzLDcgQEAKIENPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKIENPTkZJR19IVF9JUlE9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKICMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CkBAIC00NTIsMTMgKzQ3MSwxNyBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cyAvIEVtdWxhdGlvbnMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15CitDT05GSUdfSEFWRV9BVE9NSUNfSU9NQVA9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTUxOSw3ICs1NDIsNiBAQAogIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKIENPTkZJR19UQ1BfTUQ1U0lHPXkKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTU1NywxOSArNTc5LDIxIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD15CiBDT05GSUdfTkZfQ1RfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT15CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9eQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PXkKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKQEAgLTU5NSw4ICs2MTksOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PXkKIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9eQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPXkKLUNPTkZJR19JUDZfTkZfRklMVEVSPXkKIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz15CitDT05GSUdfSVA2X05GX0ZJTFRFUj15CiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9eQogQ09ORklHX0lQNl9ORl9NQU5HTEU9eQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC02MDQsNiArNjI4LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9eQpAQCAtNjIzLDYgKzY0OCw3IEBACiAjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CkBAIC02MzAsNiArNjU2LDcgQEAKICMgQ09ORklHX05FVF9TQ0hfR1JFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0RTTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX05FVEVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfSU5HUkVTUyBpcyBub3Qgc2V0CiAKICMKQEAgLTY0NCw2ICs2NzEsNyBAQAogIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9DTFNfUlNWUDYgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQ0dST1VQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRU1BVENIPXkKIENPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCiAjIENPTkZJR19ORVRfRU1BVENIX0NNUCBpcyBub3Qgc2V0CkBAIC02NTksNyArNjg3LDkgQEAKICMgQ09ORklHX05FVF9BQ1RfTkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9BQ1RfUEVESVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0FDVF9TSU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfU0tCRURJVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC02NzYsMjkgKzcwNiwzMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKK0NPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKIAogIwogIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgogIwotQ09ORklHX01BQzgwMjExX1JDX1BJRD15Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCiAjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKICMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTEw9eQorIyBDT05GSUdfUkZLSUxMX0lOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTExfTEVEUz15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC03MjIsNyArNzU2LDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19QTlA9eQotIyBDT05GSUdfUE5QX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTlBfREVCVUdfTUVTU0FHRVM9eQogCiAjCiAjIFByb3RvY29scwpAQCAtNzUwLDIwICs3ODQsMTkgQEAKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfSUJNX0FTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUNFUl9XTUkgaXMgbm90IHNldAotIyBDT05GSUdfQVNVU19MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfRlVKSVRTVV9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfVEMxMTAwX1dNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBTF9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU09OWV9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfVEhJTktQQURfQUNQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlRFTF9NRU5MT1cgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC04MDIsNyArODM1LDcgQEAKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKQEAgLTg3NSw2ICs5MDgsNyBAQAogQ09ORklHX1BBVEFfU0NIPXkKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiAjIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDAgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDEgaXMgbm90IHNldApAQCAtOTMwLDYgKzk2NCw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTk1Myw2ICs5OTAsOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTk2MCw3ICsxMDAwLDYgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VERVRIPXkKICMgQ09ORklHX0ZPUkNFREVUSF9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTk3NCwxNSArMTAxMywxNiBAQAogIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogQ09ORklHX0UxMDAwRT15CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKQEAgLTEwMDAsMTggKzEwNDAsMjMgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogQ09ORklHX1RSPXkKICMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKQEAgLTEwMjUsOSArMTA3MCw4IEBACiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOXzgwMjExPXkKICMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAogIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldApAQCAtMTA0NCw2ICsxMDg4LDggQEAKIENPTkZJR19BVEg1Sz15CiAjIENPTkZJR19BVEg1S19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAogIyBDT05GSUdfSVdMQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSVdMQUdOIGlzIG5vdCBzZXQKQEAgLTEwNTUsNiArMTEwMSwxMCBAQAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKIAogIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTEwNjIsNiArMTExMiw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAogQ09ORklHX05FVF9QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CkBAIC0xMTIzLDYgKzExNzQsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC0xMTYwLDE1ICsxMjEyLDE2IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CiAjIENPTkZJR19JTlBVVF9QQ1NQS1IgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQVBBTkVMIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTIzMiw3IEBACiAjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjQ1LDYgKzEyOTksNyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CkBAIC0xMjc5LDYgKzEzMzQsNyBAQAogQ09ORklHX0kyQ19CT0FSRElORk89eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydApAQCAtMTMzMSw4ICsxMzg3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldApAQCAtMTM1MSw4ICsxNDA1LDc4IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19LOFRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSE1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19DT1JFVEVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hEQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVBQTEVTTUMgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEzNzIsNiArMTQ5Niw3IEBACiAjIENPTkZJR19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVRDT19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVQ4NzEyRl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfSVQ4N19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSFBfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfU0MxMjAwX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQzg3NDEzX1dEVCBpcyBub3Qgc2V0CkBAIC0xMzc5LDkgKzE1MDQsMTEgQEAKICMgQ09ORklHX1NCQzgzNjBfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NCQzcyNDBfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVTVfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfU0NIMzExWF9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfU01TQzM3Qjc4N19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzNjI3SEZfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4MzY5N0hGX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19XODM2OTdVR19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzODc3Rl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzOTc3Rl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSFpfV0RUIGlzIG5vdCBzZXQKQEAgLTEzOTcsMTEgKzE1MjQsMTEgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCkBAIC0xNDEwLDcgKzE1MzcsMTMgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtMTQ1MCw2ICsxNTgzLDcgQEAKICMgQ09ORklHX0RSTV9JODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9JODMwIGlzIG5vdCBzZXQKIENPTkZJR19EUk1fSTkxNT15CisjIENPTkZJR19EUk1fSTkxNV9LTVMgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldApAQCAtMTQ1OSw2ICsxNTkzLDcgQEAKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtMTQ4Nyw3ICsxNjIyLDYgQEAKICMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZFU0EgaXMgbm90IHNldAogQ09ORklHX0ZCX0VGST15Ci0jIENPTkZJR19GQl9JTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX040MTEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSEdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKQEAgLTE1MDMsNiArMTYzNyw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtMTUxNSwxMiArMTY1MCwxNSBAQAogIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9HRU9ERSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKICMgQ09ORklHX0JBQ0tMSUdIVF9QUk9HRUFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9NQlBfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEgaXMgbm90IHNldAogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTE1NDAsMTAgKzE2NzgsMTIgQEAKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CiBDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfSkFDSz15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15CiBDT05GSUdfU05EX1NFUV9EVU1NWT15CiBDT05GSUdfU05EX09TU0VNVUw9eQpAQCAtMTU1MSw2ICsxNjkxLDggQEAKIENPTkZJR19TTkRfUENNX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorQ09ORklHX1NORF9IUlRJTUVSPXkKK0NPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CiBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQpAQCAtMTYwNSwxMSArMTc0NywxNiBAQAogIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfSERBX0lOVEVMPXkKIENPTkZJR19TTkRfSERBX0hXREVQPXkKKyMgQ09ORklHX1NORF9IREFfUkVDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfSERBX0NPREVDX1JFQUxURUs9eQogQ09ORklHX1NORF9IREFfQ09ERUNfQU5BTE9HPXkKIENPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMPXkKIENPTkZJR19TTkRfSERBX0NPREVDX1ZJQT15CiBDT05GSUdfU05EX0hEQV9DT0RFQ19BVElIRE1JPXkKK0NPTkZJR19TTkRfSERBX0NPREVDX05WSERNST15CitDT05GSUdfU05EX0hEQV9DT0RFQ19JTlRFTEhETUk9eQorQ09ORklHX1NORF9IREFfRUxEPXkKIENPTkZJR19TTkRfSERBX0NPREVDX0NPTkVYQU5UPXkKIENPTkZJR19TTkRfSERBX0NPREVDX0NNRURJQT15CiBDT05GSUdfU05EX0hEQV9DT0RFQ19TSTMwNTQ9eQpAQCAtMTY0Myw2ICsxNzkwLDcgQEAKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVMxMjJMIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfUENNQ0lBPXkKICMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKQEAgLTE2NTcsMTUgKzE4MDUsMzcgQEAKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLUNPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LPXkKLUNPTkZJR19ISURfRkY9eQogQ09ORklHX0hJRF9QSUQ9eQorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CiBDT05GSUdfTE9HSVRFQ0hfRkY9eQogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX1BBTlRIRVJMT1JEX0ZGPXkKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPXkKIENPTkZJR19aRVJPUExVU19GRj15Ci1DT05GSUdfVVNCX0hJRERFVj15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTE2ODMsNiArMTg1Myw4IEBACiBDT05GSUdfVVNCX1NVU1BFTkQ9eQogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKQEAgLTE2OTEsNiArMTg2Myw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKQEAgLTE3MDAsNiArMTg3Myw4IEBACiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTcwNywyMCArMTg4MiwyMCBAQAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9eQogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTE3MjgsNyArMTkwMyw2IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogQ09ORklHX1VTQl9MSUJVU1VBTD15CiAKQEAgLTE3NDksNiArMTkyMyw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xNzY2LDcgKzE5NDEsMTMgQEAKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CkBAIC0xNzc1LDYgKzE5NTYsNyBAQAogIwogIyBMRUQgZHJpdmVycwogIworIyBDT05GSUdfTEVEU19BTElYMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19DTEVWT19NQUlMIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CkBAIC0xNzg1LDYgKzE5NjcsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtMTgyNCw2ICsyMDA3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xODMzLDEyICsyMDE3LDE1IEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE4NTEsNiArMjAzOCwyMiBAQAogIwogIyBDT05GSUdfSU5URUxfSU9BVERNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CitDT05GSUdfWDg2X1BMQVRGT1JNX0RFVklDRVM9eQorIyBDT05GSUdfQUNFUl9XTUkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRlVKSVRTVV9MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfVEMxMTAwX1dNSSBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkFTT05JQ19MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFMX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TT05ZX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19USElOS1BBRF9BQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01FTkxPVyBpcyBub3Qgc2V0CitDT05GSUdfRUVFUENfTEFQVE9QPXkKKyMgQ09ORklHX0FDUElfV01JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1RPU0hJQkEgaXMgbm90IHNldAogCiAjCiAjIEZpcm13YXJlIERyaXZlcnMKQEAgLTE4NjEsOCArMjA2NCw3IEBACiAjIENPTkZJR19ERUxMX1JCVSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0RCQVMgaXMgbm90IHNldAogQ09ORklHX0RNSUlEPXkKLUNPTkZJR19JU0NTSV9JQkZUX0ZJTkQ9eQotQ09ORklHX0lTQ1NJX0lCRlQ9eQorIyBDT05GSUdfSVNDU0lfSUJGVF9GSU5EIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE4NzIsMjEgKzIwNzQsMjQgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQogQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKICMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAorQ09ORklHX1FVT1RBX1RSRUU9eQogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiBDT05GSUdfUUZNVF9WMj15CiBDT05GSUdfUVVPVEFDVEw9eQpAQCAtMTkyMCwxNiArMjEyNSwxNCBAQAogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfVk1DT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CkBAIC0xOTM5LDYgKzIxNDIsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE5NjAsNiArMjE2NCw3IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTIwMzYsNyArMjI0MSw3IEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKQEAgLTIwNjYsMzMgKzIyNzEsNTQgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfSFdfQlJBTkNIX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1BST0ZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQ9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVFJJQ1RfREVWTUVNIGlzIG5vdCBzZXQKIENPTkZJR19YODZfVkVSQk9TRV9CT09UVVA9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0yMTIzLDggKzIzNDksMTAgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVM9eQogIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj02NTUzNgpAQCAtMjEzNSw3ICsyMzYzLDYgQEAKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1A9eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0NIRUNLUkVRUFJPVF9WQUxVRT0xCi0jIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKQEAgLTIxNDMsMTEgKzIzNzAsMTggQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CkBAIC0yMTgyLDYgKzI0MTYsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQ19JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0yMjIyLDYgKzI0NTcsMTEgQEAKICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX1BBRExPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFVl9HRU9ERSBpcyBub3Qgc2V0CkBAIC0yMjM5LDYgKzI0NzksNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKaW5kZXggMzIyZGQyNy4uOWZlNWQyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNQotIyBXZWQgU2VwICAzIDE3OjEzOjM5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgVHVlIEZlYiAyNCAxNTo0NDoxNiAyMDA5CiAjCiBDT05GSUdfNjRCSVQ9eQogIyBDT05GSUdfWDg2XzMyIGlzIG5vdCBzZXQKIENPTkZJR19YODZfNjQ9eQogQ09ORklHX1g4Nj15CiBDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyIKLSMgQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HPXkKQEAgLTIzLDE3ICsyMiwxNiBAQAogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0hBU19DUFVfUkVMQVg9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFPXkKIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSEFWRV9DUFVNQVNLX09GX0NQVV9NQVA9eQpAQCAtNDIsMTIgKzQwLDEyIEBACiBDT05GSUdfWk9ORV9ETUEzMj15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19PUFRJTUlaRURfSU5MSU5JTkc9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKIENPTkZJR19YODZfU01QPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CiBDT05GSUdfWDg2XzY0X1NNUD15CiBDT05GSUdfWDg2X0hUPXkKIENPTkZJR19YODZfQklPU19SRUJPT1Q9eQpAQCAtNzYsMzAgKzc0LDQ0IEBACiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0FVRElUU1lTQ0FMTD15CiBDT05GSUdfQVVESVRfVFJFRT15CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOAotQ09ORklHX0NHUk9VUFM9eQotIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DR1JPVVBfTlM9eQotIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSz15CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX1NDSEVEPXkKK0NPTkZJR19DR1JPVVBTPXkKKyMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQX05TPXkKK0NPTkZJR19DR1JPVVBfRlJFRVpFUj15CisjIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQogQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CiAjIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotQ09ORklHX1BST0NfUElEX0NQVVNFVD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX05BTUVTUEFDRVM9eQogQ09ORklHX1VUU19OUz15CiBDT05GSUdfSVBDX05TPXkKIENPTkZJR19VU0VSX05TPXkKIENPTkZJR19QSURfTlM9eQorQ09ORklHX05FVF9OUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC0xMjQsMTIgKzEzNiwxNSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfTUFSS0VSUz15CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CkBAIC0xMzksMTUgKzE1NCwxMCBAQAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xNTUsNyArMTY1LDYgQEAKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15CiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CkBAIC0xNzUsNyArMTg0LDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTE4NSwxMyArMTk0LDE0IEBACiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorIyBDT05GSUdfTlVNQV9NSUdSQVRFX0lSUV9ERVNDIGlzIG5vdCBzZXQKIENPTkZJR19YODZfRklORF9TTVBfQ09ORklHPXkKIENPTkZJR19YODZfTVBQQVJTRT15Ci1DT05GSUdfWDg2X1BDPXkKICMgQ09ORklHX1g4Nl9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1g4Nl9WT1lBR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9HRU5FUklDQVJDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19YODZfVlNNUCBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1BBUkFWSVJUX0dVRVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTTM4NiBpcyBub3Qgc2V0CkBAIC0yMzAsNiArMjQwLDExIEBACiBDT05GSUdfWDg2X0NNT1Y9eQogQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NjQKIENPTkZJR19YODZfREVCVUdDVExNU1I9eQorQ09ORklHX0NQVV9TVVBfSU5URUw9eQorQ09ORklHX0NQVV9TVVBfQU1EPXkKK0NPTkZJR19DUFVfU1VQX0NFTlRBVVJfNjQ9eQorQ09ORklHX1g4Nl9EUz15CitDT05GSUdfWDg2X1BUUkFDRV9CVFM9eQogQ09ORklHX0hQRVRfVElNRVI9eQogQ09ORklHX0hQRVRfRU1VTEFURV9SVEM9eQogQ09ORklHX0RNST15CkBAIC0yMzcsOCArMjUyLDExIEBACiBDT05GSUdfQ0FMR0FSWV9JT01NVT15CiBDT05GSUdfQ0FMR0FSWV9JT01NVV9FTkFCTEVEX0JZX0RFRkFVTFQ9eQogQ09ORklHX0FNRF9JT01NVT15CitDT05GSUdfQU1EX0lPTU1VX1NUQVRTPXkKIENPTkZJR19TV0lPVExCPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQorQ09ORklHX0lPTU1VX0FQST15CisjIENPTkZJR19NQVhTTVAgaXMgbm90IHNldAogQ09ORklHX05SX0NQVVM9NjQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1NDSEVEX01DPXkKQEAgLTI0NywxMiArMjY1LDE5IEBACiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19YODZfTE9DQUxfQVBJQz15CiBDT05GSUdfWDg2X0lPX0FQSUM9eQotIyBDT05GSUdfWDg2X01DRSBpcyBub3Qgc2V0CitDT05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVM9eQorQ09ORklHX1g4Nl9NQ0U9eQorQ09ORklHX1g4Nl9NQ0VfSU5URUw9eQorQ09ORklHX1g4Nl9NQ0VfQU1EPXkKICMgQ09ORklHX0k4SyBpcyBub3Qgc2V0CiBDT05GSUdfTUlDUk9DT0RFPXkKK0NPTkZJR19NSUNST0NPREVfSU5URUw9eQorQ09ORklHX01JQ1JPQ09ERV9BTUQ9eQogQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFPXkKIENPTkZJR19YODZfTVNSPXkKIENPTkZJR19YODZfQ1BVSUQ9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX0RJUkVDVF9HQlBBR0VTPXkKIENPTkZJR19OVU1BPXkKIENPTkZJR19LOF9OVU1BPXkKIENPTkZJR19YODZfNjRfQUNQSV9OVU1BPXkKQEAgLTI2OSw3ICsyOTQsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CkBAIC0yODAsMTAgKzMwNCwxNCBAQAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19YODZfQ0hFQ0tfQklPU19DT1JSVVBUSU9OPXkKK0NPTkZJR19YODZfQk9PVFBBUkFNX01FTU9SWV9DT1JSVVBUSU9OX0NIRUNLPXkKK0NPTkZJR19YODZfUkVTRVJWRV9MT1dfNjRLPXkKIENPTkZJR19NVFJSPXkKICMgQ09ORklHX01UUlJfU0FOSVRJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19YODZfUEFUPXkKQEAgLTMwMiwxMSArMzMwLDEyIEBACiBDT05GSUdfUEhZU0lDQUxfQUxJR049MHgyMDAwMDAKIENPTkZJR19IT1RQTFVHX0NQVT15CiAjIENPTkZJR19DT01QQVRfVkRTTyBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRD15CiAKICMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwogIwogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fSEVBREVSPXkKIENPTkZJR19QTT15CkBAIC0zMzMsMjAgKzM2MiwxNCBAQAogQ09ORklHX0FDUElfQlVUVE9OPXkKIENPTkZJR19BQ1BJX0ZBTj15CiBDT05GSUdfQUNQSV9ET0NLPXkKLSMgQ09ORklHX0FDUElfQkFZIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX1BST0NFU1NPUj15CiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVT15CiBDT05GSUdfQUNQSV9USEVSTUFMPXkKIENPTkZJR19BQ1BJX05VTUE9eQotIyBDT05GSUdfQUNQSV9XTUkgaXMgbm90IHNldAotIyBDT05GSUdfQUNQSV9BU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDUElfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKICMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FDUElfRUM9eQogIyBDT05GSUdfQUNQSV9QQ0lfU0xPVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9QT1dFUj15CiBDT05GSUdfQUNQSV9TWVNURU09eQogQ09ORklHX1g4Nl9QTV9USU1FUj15CiBDT05GSUdfQUNQSV9DT05UQUlORVI9eQpAQCAtMzgxLDEzICs0MDQsMTcgQEAKICMKICMgc2hhcmVkIG9wdGlvbnMKICMKLSMgQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVFfUFJPQ19JTlRGIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQogCiAjCisjIE1lbW9yeSBwb3dlciBzYXZpbmdzCisjCisjIENPTkZJR19JNzMwMF9JRExFIGlzIG5vdCBzZXQKKworIwogIyBCdXMgb3B0aW9ucyAoUENJIGV0Yy4pCiAjCiBDT05GSUdfUENJPXkKQEAgLTM5NSw4ICs0MjIsMTAgQEAKIENPTkZJR19QQ0lfTU1DT05GSUc9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKIENPTkZJR19ETUFSPXkKKyMgQ09ORklHX0RNQVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiBDT05GSUdfRE1BUl9HRlhfV0E9eQogQ09ORklHX0RNQVJfRkxPUFBZX1dBPXkKKyMgQ09ORklHX0lOVFJfUkVNQVAgaXMgbm90IHNldAogQ09ORklHX1BDSUVQT1JUQlVTPXkKICMgQ09ORklHX0hPVFBMVUdfUENJX1BDSUUgaXMgbm90IHNldAogQ09ORklHX1BDSUVBRVI9eQpAQCAtNDA1LDYgKzQzNCw3IEBACiBDT05GSUdfUENJX01TST15CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiBDT05GSUdfSFRfSVJRPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiBDT05GSUdfSzhfTkI9eQpAQCAtNDM4LDYgKzQ2OCw4IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX0lBMzJfRU1VTEFUSU9OPXkKICMgQ09ORklHX0lBMzJfQU9VVCBpcyBub3Qgc2V0CkBAIC00NDksNiArNDgxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTUwOSw3ICs1NDIsNiBAQAogIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKIENPTkZJR19UQ1BfTUQ1U0lHPXkKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTU0NywxOSArNTc5LDIxIEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD15CiBDT05GSUdfTkZfQ1RfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz15CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz15CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9eQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT15CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9eQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PXkKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKQEAgLTU4NSw4ICs2MTksOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PXkKIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9eQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPXkKLUNPTkZJR19JUDZfTkZfRklMVEVSPXkKIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz15CitDT05GSUdfSVA2X05GX0ZJTFRFUj15CiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9eQogQ09ORklHX0lQNl9ORl9NQU5HTEU9eQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC01OTQsNiArNjI4LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9eQpAQCAtNjEzLDYgKzY0OCw3IEBACiAjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CkBAIC02MjAsNiArNjU2LDcgQEAKICMgQ09ORklHX05FVF9TQ0hfR1JFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0RTTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX05FVEVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfSU5HUkVTUyBpcyBub3Qgc2V0CiAKICMKQEAgLTYzNCw2ICs2NzEsNyBAQAogIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9DTFNfUlNWUDYgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQ0dST1VQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRU1BVENIPXkKIENPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCiAjIENPTkZJR19ORVRfRU1BVENIX0NNUCBpcyBub3Qgc2V0CkBAIC02NDksNyArNjg3LDkgQEAKICMgQ09ORklHX05FVF9BQ1RfTkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9BQ1RfUEVESVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0FDVF9TSU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfU0tCRURJVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC02NjYsMjkgKzcwNiwzMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKK0NPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKIAogIwogIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgogIwotQ09ORklHX01BQzgwMjExX1JDX1BJRD15Ci1DT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCiAjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKICMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTEw9eQorIyBDT05GSUdfUkZLSUxMX0lOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19SRktJTExfTEVEUz15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC03MTIsNyArNzU2LDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19QTlA9eQotIyBDT05GSUdfUE5QX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTlBfREVCVUdfTUVTU0FHRVM9eQogCiAjCiAjIFByb3RvY29scwpAQCAtNzQwLDIxICs3ODQsMjEgQEAKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfSUJNX0FTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUNFUl9XTUkgaXMgbm90IHNldAotIyBDT05GSUdfQVNVU19MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfRlVKSVRTVV9MQVBUT1AgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0xBUFRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT01QQUxfTEFQVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTllfTEFQVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RISU5LUEFEX0FDUEkgaXMgbm90IHNldAotIyBDT05GSUdfSU5URUxfTUVOTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9YUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0dSVSBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNzkzLDcgKzgzNyw3IEBACiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9JU0NTSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CkBAIC04NjQsNiArOTA4LDcgQEAKIENPTkZJR19QQVRBX1NDSD15CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogIyBDT05GSUdfTURfTElORUFSIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX1JBSUQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX1JBSUQxIGlzIG5vdCBzZXQKQEAgLTkxOSw2ICs5NjQsOSBAQAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC05NDIsNiArOTkwLDkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CkBAIC05NDksNyArMTAwMCw2IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFREVUSD15CiAjIENPTkZJR19GT1JDRURFVEhfTkFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC05NjMsMTUgKzEwMTMsMTYgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKQEAgLTk4OSwxOCArMTA0MCwyMyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiBDT05GSUdfVFI9eQogIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldApAQCAtMTAxMyw5ICsxMDY5LDggQEAKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CkBAIC0xMDMyLDYgKzEwODcsOCBAQAogQ09ORklHX0FUSDVLPXkKICMgQ09ORklHX0FUSDVLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUSDlLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xDT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xBR04gaXMgbm90IHNldApAQCAtMTA0Myw2ICsxMTAwLDEwIEBACiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtMTA1MCw2ICsxMTExLDcgQEAKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hTTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDTUNJQT15CiAjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKQEAgLTEwNTksNiArMTEyMSw3IEBACiAjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9JQk1UUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX0ZEREk9eQogIyBDT05GSUdfREVGWFggaXMgbm90IHNldApAQCAtMTExMCw2ICsxMTczLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtMTE0NywxNSArMTIxMSwxNiBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogIyBDT05GSUdfSU5QVVRfUENTUEtSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FQQU5FTCBpcyBub3Qgc2V0CkBAIC0xMTY1LDYgKzEyMzAsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIzMSw2ICsxMjk3LDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQpAQCAtMTI2MCw2ICsxMzI3LDcgQEAKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKQEAgLTEzMTEsOCArMTM3OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKQEAgLTEzMzEsOCArMTM5Nyw3OCBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSzhURU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQ09SRVRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19IREFQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNMVjAyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FQUExFU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMzUyLDE1ICsxNDg4LDE4IEBACiAjIENPTkZJR19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVRDT19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSVQ4NzEyRl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfSVQ4N19XRFQgaXMgbm90IHNldAogIyBDT05GSUdfSFBfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfU0MxMjAwX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQzg3NDEzX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR182MFhYX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQkM4MzYwX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFU1X1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1NDSDMxMVhfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0MzN0I3ODdfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4MzYyN0hGX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XODM2OTdIRl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfVzgzNjk3VUdfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4Mzg3N0ZfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1c4Mzk3N0ZfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0haX1dEVCBpcyBub3Qgc2V0CkBAIC0xMzc2LDExICsxNTE1LDExIEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM4OSw3ICsxNTI4LDEzIEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTE0MjMsNiArMTU2OCw3IEBACiAjIENPTkZJR19EUk1fSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fSTgzMCBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX0k5MTU9eQorQ09ORklHX0RSTV9JOTE1X0tNUz15CiAjIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CkBAIC0xNDMyLDYgKzE1NzgsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC0xNDYwLDcgKzE2MDcsNiBAQAogIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVkVTQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfRUZJPXkKLSMgQ09ORklHX0ZCX0lNQUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTjQxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9IR0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtMTQ3NSw2ICsxNjIxLDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC0xNDg2LDEyICsxNjMzLDE1IEBACiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0dFT0RFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQogIyBDT05GSUdfQkFDS0xJR0hUX1BST0dFQVIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX01CUF9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX1NBSEFSQSBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtMTUxMSwxMCArMTY2MSwxMiBAQAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKIENPTkZJR19TTkRfSFdERVA9eQorQ09ORklHX1NORF9KQUNLPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSPXkKIENPTkZJR19TTkRfU0VRX0RVTU1ZPXkKIENPTkZJR19TTkRfT1NTRU1VTD15CkBAIC0xNTIyLDYgKzE2NzQsOCBAQAogQ09ORklHX1NORF9QQ01fT1NTPXkKIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9eQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CkBAIC0xNTc1LDExICsxNzI5LDE2IEBACiAjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAogQ09ORklHX1NORF9IREFfSU5URUw9eQogQ09ORklHX1NORF9IREFfSFdERVA9eQorIyBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAgaXMgbm90IHNldAogQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSz15CiBDT05GSUdfU05EX0hEQV9DT0RFQ19BTkFMT0c9eQogQ09ORklHX1NORF9IREFfQ09ERUNfU0lHTUFURUw9eQogQ09ORklHX1NORF9IREFfQ09ERUNfVklBPXkKIENPTkZJR19TTkRfSERBX0NPREVDX0FUSUhETUk9eQorQ09ORklHX1NORF9IREFfQ09ERUNfTlZIRE1JPXkKK0NPTkZJR19TTkRfSERBX0NPREVDX0lOVEVMSERNST15CitDT05GSUdfU05EX0hEQV9FTEQ9eQogQ09ORklHX1NORF9IREFfQ09ERUNfQ09ORVhBTlQ9eQogQ09ORklHX1NORF9IREFfQ09ERUNfQ01FRElBPXkKIENPTkZJR19TTkRfSERBX0NPREVDX1NJMzA1ND15CkBAIC0xNjEyLDYgKzE3NzEsNyBAQAogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VUzEyMkwgaXMgbm90IHNldAogQ09ORklHX1NORF9QQ01DSUE9eQogIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldApAQCAtMTYyNiwxNSArMTc4NiwzNyBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0s9eQotQ09ORklHX0hJRF9GRj15CiBDT05GSUdfSElEX1BJRD15CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKIENPTkZJR19MT0dJVEVDSF9GRj15CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiBDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKIENPTkZJR19USFJVU1RNQVNURVJfRkY9eQogQ09ORklHX1pFUk9QTFVTX0ZGPXkKLUNPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTY1Miw2ICsxODM0LDggQEAKIENPTkZJR19VU0JfU1VTUEVORD15CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtMTY2MCw2ICsxODQ0LDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTY2OSw2ICsxODU0LDggQEAKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xNjc2LDIwICsxODYzLDIwIEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFJJTlRFUj15CiAjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTY5Nyw3ICsxODg0LDYgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKIApAQCAtMTcxOCw2ICsxOTA0LDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTE3MzUsNyArMTkyMiwxMyBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKQEAgLTE3NDQsNiArMTkzNyw3IEBACiAjCiAjIExFRCBkcml2ZXJzCiAjCisjIENPTkZJR19MRURTX0FMSVgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0NMRVZPX01BSUwgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKQEAgLTE3NTQsNiArMTk0OCw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSUz15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkBAIC0xNzkzLDYgKzE5ODgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE4MDIsMTIgKzE5OTgsMTUgQEAKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKIENPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTgyMCw2ICsyMDE5LDIxIEBACiAjCiAjIENPTkZJR19JTlRFTF9JT0FURE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19YODZfUExBVEZPUk1fREVWSUNFUz15CisjIENPTkZJR19BQ0VSX1dNSSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1VTX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19GVUpJVFNVX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkFTT05JQ19MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFMX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TT05ZX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19USElOS1BBRF9BQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01FTkxPVyBpcyBub3Qgc2V0CitDT05GSUdfRUVFUENfTEFQVE9QPXkKKyMgQ09ORklHX0FDUElfV01JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1RPU0hJQkEgaXMgbm90IHNldAogCiAjCiAjIEZpcm13YXJlIERyaXZlcnMKQEAgLTE4MzAsOCArMjA0NCw3IEBACiAjIENPTkZJR19ERUxMX1JCVSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0RCQVMgaXMgbm90IHNldAogQ09ORklHX0RNSUlEPXkKLUNPTkZJR19JU0NTSV9JQkZUX0ZJTkQ9eQotQ09ORklHX0lTQ1NJX0lCRlQ9eQorIyBDT05GSUdfSVNDU0lfSUJGVF9GSU5EIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE4NDEsMjIgKzIwNTQsMjUgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQogIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFfVFJFRT15CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKIENPTkZJR19RVU9UQUNUTD15CkBAIC0xODkwLDE2ICsyMTA2LDE0IEBACiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19WTUNPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKQEAgLTE5MDksNiArMjEyMyw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTkzMCw2ICsyMTQ1LDcgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMjAwNiw3ICsyMjIyLDcgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQpAQCAtMjAzNSw0MCArMjI1MSw2MCBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlM9eQogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9IV19CUkFOQ0hfVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTUFJPRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVD15CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUUklDVF9ERVZNRU0gaXMgbm90IHNldAogQ09ORklHX1g4Nl9WRVJCT1NFX0JPT1RVUD15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19FQVJMWV9QUklOVEtfREJHUD15CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19YODZfUFREVU1QIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19ST0RBVEE9eQotIyBDT05GSUdfRElSRUNUX0dCUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUk9EQVRBX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX05YX1RFU1Q9bQogIyBDT05GSUdfSU9NTVVfREVCVUcgaXMgbm90IHNldApAQCAtMjA5Miw4ICsyMzI4LDEwIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTPXkKICMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9NjU1MzYKQEAgLTIxMDQsNyArMjM0Miw2IEBACiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUUz15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9DSEVDS1JFUVBST1RfVkFMVUU9MQotIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9FTkFCTEVfU0VDTUFSS19ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfUE9MSUNZREJfVkVSU0lPTl9NQVggaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CkBAIC0yMTEyLDExICsyMzQ5LDE4IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApAQCAtMjE1MSw2ICsyMzk1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkNfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMjE5MSw2ICsyNDM2LDExIEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1ZNPXkKQEAgLTIyMDUsNiArMjQ1NSw3IEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVD15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZSBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQppbmRleCA5MDNkZTRhLi5lYmU3ZGVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19BRVNfWDg2XzY0KSArPSBhZXMteDg2XzY0Lm8KIG9iai0kKENPTkZJR19DUllQVE9fVFdPRklTSF9YODZfNjQpICs9IHR3b2Zpc2gteDg2XzY0Lm8KIG9iai0kKENPTkZJR19DUllQVE9fU0FMU0EyMF9YODZfNjQpICs9IHNhbHNhMjAteDg2XzY0Lm8KK29iai0kKENPTkZJR19DUllQVE9fQUVTX05JX0lOVEVMKSArPSBhZXNuaS1pbnRlbC5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJDX0lOVEVMKSArPSBjcmMzMmMtaW50ZWwubwogCkBAIC0xOSwzICsyMCw1IEBACiBhZXMteDg2XzY0LXkgOj0gYWVzLXg4Nl82NC1hc21fNjQubyBhZXNfZ2x1ZS5vCiB0d29maXNoLXg4Nl82NC15IDo9IHR3b2Zpc2gteDg2XzY0LWFzbV82NC5vIHR3b2Zpc2hfZ2x1ZS5vCiBzYWxzYTIwLXg4Nl82NC15IDo9IHNhbHNhMjAteDg2XzY0LWFzbV82NC5vIHNhbHNhMjBfZ2x1ZS5vCisKK2Flc25pLWludGVsLXkgOj0gYWVzbmktaW50ZWxfYXNtLm8gYWVzbmktaW50ZWxfZ2x1ZS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKaW5kZXggZTQxYjE0Ny4uYjk0OWVjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUwpAQCAtNDEsMTQgKzQxLDE0IEBACiAjZGVmaW5lIHRsZW4gMTAyNCAgIC8vIGxlbmd0aCBvZiBlYWNoIG9mIDQgJ3hvcicgYXJyYXlzICgyNTYgMzItYml0IHdvcmRzKQogCiAvKiBvZmZzZXRzIHRvIHBhcmFtZXRlcnMgd2l0aCBvbmUgcmVnaXN0ZXIgcHVzaGVkIG9udG8gc3RhY2sgKi8KLSNkZWZpbmUgdGZtIDgKKyNkZWZpbmUgY3R4IDgKICNkZWZpbmUgb3V0X2JsayAxMgogI2RlZmluZSBpbl9ibGsgMTYKIAotLyogb2Zmc2V0cyBpbiBjcnlwdG9fdGZtIHN0cnVjdHVyZSAqLwotI2RlZmluZSBrbGVuIChjcnlwdG9fdGZtX2N0eF9vZmZzZXQgKyAwKQotI2RlZmluZSBla2V5IChjcnlwdG9fdGZtX2N0eF9vZmZzZXQgKyA0KQotI2RlZmluZSBka2V5IChjcnlwdG9fdGZtX2N0eF9vZmZzZXQgKyAyNDQpCisvKiBvZmZzZXRzIGluIGNyeXB0b19hZXNfY3R4IHN0cnVjdHVyZSAqLworI2RlZmluZSBrbGVuICg0ODApCisjZGVmaW5lIGVrZXkgKDApCisjZGVmaW5lIGRrZXkgKDI0MCkKIAogLy8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgZW5jcnlwdCBhbmQgZGVjcnlwdCBzdWJyb3V0aW5lcwogCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlkb19jb2wgKHRhYmxlLCByNSxyMCxyMSxyNCwgcjIscjMpOwkJLyogaWR4PXI1ICovCiAKIC8vIEFFUyAoUmlqbmRhZWwpIEVuY3J5cHRpb24gU3Vicm91dGluZQotLyogdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KKy8qIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLwogCiAuZ2xvYmFsICBhZXNfZW5jX2JsawogCkBAIC0yMjgsNyArMjI4LDcgQEAKIAogYWVzX2VuY19ibGs6CiAJcHVzaCAgICAlZWJwCi0JbW92ICAgICB0Zm0oJWVzcCksJWVicAorCW1vdiAgICAgY3R4KCVlc3ApLCVlYnAKIAogLy8gQ0FVVElPTjogdGhlIG9yZGVyIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlc2UgYXNzaWducyAKIC8vIHJlbHkgb24gdGhlIHJlZ2lzdGVyIG1hcHBpbmdzCkBAIC0yOTIsNyArMjkyLDcgQEAKIAlyZXQKIAogLy8gQUVTIChSaWpuZGFlbCkgRGVjcnlwdGlvbiBTdWJyb3V0aW5lCi0vKiB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLworLyogdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCiAKIC5nbG9iYWwgIGFlc19kZWNfYmxrCiAKQEAgLTMwMyw3ICszMDMsNyBAQAogCiBhZXNfZGVjX2JsazoKIAlwdXNoICAgICVlYnAKLQltb3YgICAgIHRmbSglZXNwKSwlZWJwCisJbW92ICAgICBjdHgoJWVzcCksJWVicAogCiAvLyBDQVVUSU9OOiB0aGUgb3JkZXIgYW5kIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGVzZSBhc3NpZ25zIAogLy8gcmVseSBvbiB0aGUgcmVnaXN0ZXIgbWFwcGluZ3MKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TIGIvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMKaW5kZXggYTEyMGY1Mi4uNWI1NzdkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMKQEAgLTE3LDggKzE3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCi0jZGVmaW5lIEJBU0UgY3J5cHRvX3RmbV9jdHhfb2Zmc2V0Ci0KICNkZWZpbmUgUjEJJXJheAogI2RlZmluZSBSMUUJJWVheAogI2RlZmluZSBSMVgJJWF4CkBAIC01NiwxMyArNTQsMTMgQEAKIAkuYWxpZ24JODsJCQlcCiBGVU5DOgltb3ZxCXIxLHIyOwkJCVwKIAltb3ZxCXIzLHI0OwkJCVwKLQlsZWFxCUJBU0UrS0VZKzQ4KzQocjgpLHI5OwlcCisJbGVhcQlLRVkrNDgocjgpLHI5OwkJXAogCW1vdnEJcjEwLHIxMTsJCVwKIAltb3ZsCShyNykscjUgIyMgRTsJCVwKIAltb3ZsCTQocjcpLHIxICMjIEU7CQlcCiAJbW92bAk4KHI3KSxyNiAjIyBFOwkJXAogCW1vdmwJMTIocjcpLHI3ICMjIEU7CQlcCi0JbW92bAlCQVNFKzAocjgpLHIxMCAjIyBFOwlcCisJbW92bAk0ODAocjgpLHIxMCAjIyBFOwlcCiAJeG9ybAktNDgocjkpLHI1ICMjIEU7CVwKIAl4b3JsCS00NChyOSkscjEgIyMgRTsJXAogCXhvcmwJLTQwKHI5KSxyNiAjIyBFOwlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jCmluZGV4IDcxZjQ1NzguLjQ5YWU5ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jCkBAIC01LDE3ICs1LDI5IEBACiAKICNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CiAKLWFzbWxpbmthZ2Ugdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOwotYXNtbGlua2FnZSB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7CisKK3ZvaWQgY3J5cHRvX2Flc19lbmNyeXB0X3g4NihzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlhZXNfZW5jX2JsayhjdHgsIGRzdCwgc3JjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hZXNfZW5jcnlwdF94ODYpOworCit2b2lkIGNyeXB0b19hZXNfZGVjcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJYWVzX2RlY19ibGsoY3R4LCBkc3QsIHNyYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KTsKIAogc3RhdGljIHZvaWQgYWVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKLQlhZXNfZW5jX2Jsayh0Zm0sIGRzdCwgc3JjKTsKKwlhZXNfZW5jX2JsayhjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIHNyYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFlc19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0JYWVzX2RlY19ibGsodGZtLCBkc3QsIHNyYyk7CisJYWVzX2RlY19ibGsoY3J5cHRvX3RmbV9jdHgodGZtKSwgZHN0LCBzcmMpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJhOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TCkBAIC0wLDAgKzEsODk2IEBACisvKgorICogSW1wbGVtZW50IEFFUyBhbGdvcml0aG0gaW4gSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucy4KKyAqCisgKiBUaGUgd2hpdGUgcGFwZXIgb2YgQUVTLU5JIGluc3RydWN0aW9ucyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgorICogICBodHRwOi8vc29mdHdhcmVjb21tdW5pdHkuaW50ZWwuY29tL2lzbi9kb3dubG9hZHMvaW50ZWxhdngvQUVTLUluc3RydWN0aW9ucy1TZXRfV1AucGRmCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBJbnRlbCBDb3JwLgorICogICAgQXV0aG9yOiBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgVmlub2RoIEdvcGFsIDx2aW5vZGguZ29wYWxAaW50ZWwuY29tPgorICogICAgICAgICAgICBLYWhyYW1hbiBBa2RlbWlyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisudGV4dAorCisjZGVmaW5lIFNUQVRFMQkleG1tMAorI2RlZmluZSBTVEFURTIJJXhtbTQKKyNkZWZpbmUgU1RBVEUzCSV4bW01CisjZGVmaW5lIFNUQVRFNAkleG1tNgorI2RlZmluZSBTVEFURQlTVEFURTEKKyNkZWZpbmUgSU4xCSV4bW0xCisjZGVmaW5lIElOMgkleG1tNworI2RlZmluZSBJTjMJJXhtbTgKKyNkZWZpbmUgSU40CSV4bW05CisjZGVmaW5lIElOCUlOMQorI2RlZmluZSBLRVkJJXhtbTIKKyNkZWZpbmUgSVYJJXhtbTMKKworI2RlZmluZSBLRVlQCSVyZGkKKyNkZWZpbmUgT1VUUAklcnNpCisjZGVmaW5lIElOUAklcmR4CisjZGVmaW5lIExFTgklcmN4CisjZGVmaW5lIElWUAklcjgKKyNkZWZpbmUgS0xFTgklcjlkCisjZGVmaW5lIFQxCSVyMTAKKyNkZWZpbmUgVEtFWVAJVDEKKyNkZWZpbmUgVDIJJXIxMQorCitfa2V5X2V4cGFuc2lvbl8xMjg6Citfa2V5X2V4cGFuc2lvbl8yNTZhOgorCXBzaHVmZCAkMGIxMTExMTExMSwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlweG9yICV4bW0xLCAleG1tMAorCW1vdmFwcyAleG1tMCwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJcmV0CisKK19rZXlfZXhwYW5zaW9uXzE5MmE6CisJcHNodWZkICQwYjAxMDEwMTAxLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXB4b3IgJXhtbTEsICV4bW0wCisKKwltb3ZhcHMgJXhtbTIsICV4bW01CisJbW92YXBzICV4bW0yLCAleG1tNgorCXBzbGxkcSAkNCwgJXhtbTUKKwlwc2h1ZmQgJDBiMTExMTExMTEsICV4bW0wLCAleG1tMworCXB4b3IgJXhtbTMsICV4bW0yCisJcHhvciAleG1tNSwgJXhtbTIKKworCW1vdmFwcyAleG1tMCwgJXhtbTEKKwlzaHVmcHMgJDBiMDEwMDAxMDAsICV4bW0wLCAleG1tNgorCW1vdmFwcyAleG1tNiwgKCVyY3gpCisJc2h1ZnBzICQwYjAxMDAxMTEwLCAleG1tMiwgJXhtbTEKKwltb3ZhcHMgJXhtbTEsIDE2KCVyY3gpCisJYWRkICQweDIwLCAlcmN4CisJcmV0CisKK19rZXlfZXhwYW5zaW9uXzE5MmI6CisJcHNodWZkICQwYjAxMDEwMTAxLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXB4b3IgJXhtbTEsICV4bW0wCisKKwltb3ZhcHMgJXhtbTIsICV4bW01CisJcHNsbGRxICQ0LCAleG1tNQorCXBzaHVmZCAkMGIxMTExMTExMSwgJXhtbTAsICV4bW0zCisJcHhvciAleG1tMywgJXhtbTIKKwlweG9yICV4bW01LCAleG1tMgorCisJbW92YXBzICV4bW0wLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwlyZXQKKworX2tleV9leHBhbnNpb25fMjU2YjoKKwlwc2h1ZmQgJDBiMTAxMDEwMTAsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTIsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTIKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0yLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0yCisJcHhvciAleG1tMSwgJXhtbTIKKwltb3ZhcHMgJXhtbTIsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCXJldAorCisvKgorICogaW50IGFlc25pX3NldF9rZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisgKiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKKyAqLworRU5UUlkoYWVzbmlfc2V0X2tleSkKKwltb3Z1cHMgKCVyc2kpLCAleG1tMAkJIyB1c2VyIGtleSAoZmlyc3QgMTYgYnl0ZXMpCisJbW92YXBzICV4bW0wLCAoJXJkaSkKKwlsZWEgMHgxMCglcmRpKSwgJXJjeAkJIyBrZXkgYWRkcgorCW1vdmwgJWVkeCwgNDgwKCVyZGkpCisJcHhvciAleG1tNCwgJXhtbTQJCSMgeG1tNCBpcyBhc3N1bWVkIDAgaW4gX2tleV9leHBhbnNpb25feAorCWNtcCAkMjQsICVkbAorCWpiIC5MZW5jX2tleTEyOAorCWplIC5MZW5jX2tleTE5MgorCW1vdnVwcyAweDEwKCVyc2kpLCAleG1tMgkjIG90aGVyIHVzZXIga2V5CisJbW92YXBzICV4bW0yLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMiwgJXhtbTEJIyByb3VuZCAxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMiwgJXhtbTEJIyByb3VuZCAyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMiwgJXhtbTEJIyByb3VuZCAzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMiwgJXhtbTEJIyByb3VuZCA0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA2CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NDAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDcKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDQwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJam1wIC5MZGVjX2tleQorLkxlbmNfa2V5MTkyOgorCW1vdnEgMHgxMCglcnNpKSwgJXhtbTIJCSMgb3RoZXIgdXNlciBrZXkKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMiwgJXhtbTEJIyByb3VuZCAxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0yLCAleG1tMQkjIHJvdW5kIDIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTIsICV4bW0xCSMgcm91bmQgMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMiwgJXhtbTEJIyByb3VuZCA0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA1CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA2CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA3CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHg0MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA4CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHg4MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCWptcCAuTGRlY19rZXkKKy5MZW5jX2tleTEyODoKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMCwgJXhtbTEJIyByb3VuZCAxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTAsICV4bW0xCSMgcm91bmQgMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0wLCAleG1tMQkjIHJvdW5kIDMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMCwgJXhtbTEJIyByb3VuZCA0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA3CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHg0MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4ODAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDgKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDgwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxYiwgJXhtbTAsICV4bW0xCSMgcm91bmQgOQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MWIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDM2LCAleG1tMCwgJXhtbTEJIyByb3VuZCAxMAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MzYKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorLkxkZWNfa2V5OgorCXN1YiAkMHgxMCwgJXJjeAorCW1vdmFwcyAoJXJkaSksICV4bW0wCisJbW92YXBzICglcmN4KSwgJXhtbTEKKwltb3ZhcHMgJXhtbTAsIDI0MCglcmN4KQorCW1vdmFwcyAleG1tMSwgMjQwKCVyZGkpCisJYWRkICQweDEwLCAlcmRpCisJbGVhIDI0MC0xNiglcmN4KSwgJXJzaQorLmFsaWduIDQKKy5MZGVjX2tleV9sb29wOgorCW1vdmFwcyAoJXJkaSksICV4bW0wCisJIyBhZXNpbWMgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYiwgMHhjOAorCW1vdmFwcyAleG1tMSwgKCVyc2kpCisJYWRkICQweDEwLCAlcmRpCisJc3ViICQweDEwLCAlcnNpCisJY21wICVyY3gsICVyZGkKKwlqYiAuTGRlY19rZXlfbG9vcAorCXhvciAlcmF4LCAlcmF4CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKKyAqLworRU5UUlkoYWVzbmlfZW5jKQorCW1vdmwgNDgwKEtFWVApLCBLTEVOCQkjIGtleSBsZW5ndGgKKwltb3Z1cHMgKElOUCksIFNUQVRFCQkjIGlucHV0CisJY2FsbCBfYWVzbmlfZW5jMQorCW1vdnVwcyBTVEFURSwgKE9VVFApCQkjIG91dHB1dAorCXJldAorCisvKgorICogX2Flc25pX2VuYzE6CQlpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCXJvdW5kIGNvdW50CisgKglTVEFURToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICogb3V0cHV0OgorICoJU1RBVEU6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2VuYzE6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURQkJIyByb3VuZCAwCisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTGVuYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTGVuYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisuYWxpZ24gNAorLkxlbmMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorLmFsaWduIDQKKy5MZW5jMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzIKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9lbmM0OglpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCXJvdW5kIGNvdW50CisgKglTVEFURTE6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIG91dHB1dDoKKyAqCVNUQVRFMToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZW5jNDoKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFMQkJIyByb3VuZCAwCisJcHhvciBLRVksIFNUQVRFMgorCXB4b3IgS0VZLCBTVEFURTMKKwlweG9yIEtFWSwgU1RBVEU0CisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTDRlbmMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkw0ZW5jMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorIy5hbGlnbiA0CisuTDRlbmMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisjLmFsaWduIDQKKy5MNGVuYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTEJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhjMgorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZTIKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGVhCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhmMgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9kZWMgKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQorICovCitFTlRSWShhZXNuaV9kZWMpCisJbW92IDQ4MChLRVlQKSwgS0xFTgkJIyBrZXkgbGVuZ3RoCisJYWRkICQyNDAsIEtFWVAKKwltb3Z1cHMgKElOUCksIFNUQVRFCQkjIGlucHV0CisJY2FsbCBfYWVzbmlfZGVjMQorCW1vdnVwcyBTVEFURSwgKE9VVFApCQkjb3V0cHV0CisJcmV0CisKKy8qCisgKiBfYWVzbmlfZGVjMToJCWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJa2V5IGxlbmd0aAorICoJU1RBVEU6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqIG91dHB1dDoKKyAqCVNUQVRFOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9kZWMxOgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUJCSMgcm91bmQgMAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkxkZWMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkxkZWMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorLmFsaWduIDQKKy5MZGVjMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKy5hbGlnbiA0CisuTGRlYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURQkJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhjMgorCXJldAorCisvKgorICogX2Flc25pX2RlYzQ6CWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJa2V5IGxlbmd0aAorICoJU1RBVEUxOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBvdXRwdXQ6CisgKglTVEFURTE6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2RlYzQ6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURTEJCSMgcm91bmQgMAorCXB4b3IgS0VZLCBTVEFURTIKKwlweG9yIEtFWSwgU1RBVEUzCisJcHhvciBLRVksIFNUQVRFNAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkw0ZGVjMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MNGRlYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKy5hbGlnbiA0CisuTDRkZWMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisuYWxpZ24gNAorLkw0ZGVjMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFMQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGMyCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhlMgorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZWEKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGYyCisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2VjYl9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbikKKyAqLworRU5UUlkoYWVzbmlfZWNiX2VuYykKKwl0ZXN0IExFTiwgTEVOCQkjIGNoZWNrIGxlbmd0aAorCWp6IC5MZWNiX2VuY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZW5jX3JldAorCWNtcCAkNjQsIExFTgorCWpiIC5MZWNiX2VuY19sb29wMQorLmFsaWduIDQKKy5MZWNiX2VuY19sb29wNDoKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCW1vdnVwcyAweDEwKElOUCksIFNUQVRFMgorCW1vdnVwcyAweDIwKElOUCksIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIFNUQVRFNAorCWNhbGwgX2Flc25pX2VuYzQKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCisJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQorCW1vdnVwcyBTVEFURTQsIDB4MzAoT1VUUCkKKwlzdWIgJDY0LCBMRU4KKwlhZGQgJDY0LCBJTlAKKwlhZGQgJDY0LCBPVVRQCisJY21wICQ2NCwgTEVOCisJamdlIC5MZWNiX2VuY19sb29wNAorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2VuY19yZXQKKy5hbGlnbiA0CisuTGVjYl9lbmNfbG9vcDE6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwljYWxsIF9hZXNuaV9lbmMxCisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGVjYl9lbmNfbG9vcDEKKy5MZWNiX2VuY19yZXQ6CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2VjYl9kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbik7CisgKi8KK0VOVFJZKGFlc25pX2VjYl9kZWMpCisJdGVzdCBMRU4sIExFTgorCWp6IC5MZWNiX2RlY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJYWRkICQyNDAsIEtFWVAKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9kZWNfcmV0CisJY21wICQ2NCwgTEVOCisJamIgLkxlY2JfZGVjX2xvb3AxCisuYWxpZ24gNAorLkxlY2JfZGVjX2xvb3A0OgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJbW92dXBzIDB4MTAoSU5QKSwgU1RBVEUyCisJbW92dXBzIDB4MjAoSU5QKSwgU1RBVEUzCisJbW92dXBzIDB4MzAoSU5QKSwgU1RBVEU0CisJY2FsbCBfYWVzbmlfZGVjNAorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCW1vdnVwcyBTVEFURTIsIDB4MTAoT1VUUCkKKwltb3Z1cHMgU1RBVEUzLCAweDIwKE9VVFApCisJbW92dXBzIFNUQVRFNCwgMHgzMChPVVRQKQorCXN1YiAkNjQsIExFTgorCWFkZCAkNjQsIElOUAorCWFkZCAkNjQsIE9VVFAKKwljbXAgJDY0LCBMRU4KKwlqZ2UgLkxlY2JfZGVjX2xvb3A0CisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZGVjX3JldAorLmFsaWduIDQKKy5MZWNiX2RlY19sb29wMToKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCWNhbGwgX2Flc25pX2RlYzEKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MZWNiX2RlY19sb29wMQorLkxlY2JfZGVjX3JldDoKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfY2JjX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuLCB1OCAqaXYpCisgKi8KK0VOVFJZKGFlc25pX2NiY19lbmMpCisJY21wICQxNiwgTEVOCisJamIgLkxjYmNfZW5jX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwltb3Z1cHMgKElWUCksIFNUQVRFCSMgbG9hZCBpdiBhcyBpbml0aWFsIHN0YXRlCisuYWxpZ24gNAorLkxjYmNfZW5jX2xvb3A6CisJbW92dXBzIChJTlApLCBJTgkjIGxvYWQgaW5wdXQKKwlweG9yIElOLCBTVEFURQorCWNhbGwgX2Flc25pX2VuYzEKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQkjIHN0b3JlIG91dHB1dAorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxjYmNfZW5jX2xvb3AKKwltb3Z1cHMgU1RBVEUsIChJVlApCisuTGNiY19lbmNfcmV0OgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9jYmNfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4sIHU4ICppdikKKyAqLworRU5UUlkoYWVzbmlfY2JjX2RlYykKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGNiY19kZWNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCWFkZCAkMjQwLCBLRVlQCisJbW92dXBzIChJVlApLCBJVgorCWNtcCAkNjQsIExFTgorCWpiIC5MY2JjX2RlY19sb29wMQorLmFsaWduIDQKKy5MY2JjX2RlY19sb29wNDoKKwltb3Z1cHMgKElOUCksIElOMQorCW1vdmFwcyBJTjEsIFNUQVRFMQorCW1vdnVwcyAweDEwKElOUCksIElOMgorCW1vdmFwcyBJTjIsIFNUQVRFMgorCW1vdnVwcyAweDIwKElOUCksIElOMworCW1vdmFwcyBJTjMsIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIElONAorCW1vdmFwcyBJTjQsIFNUQVRFNAorCWNhbGwgX2Flc25pX2RlYzQKKwlweG9yIElWLCBTVEFURTEKKwlweG9yIElOMSwgU1RBVEUyCisJcHhvciBJTjIsIFNUQVRFMworCXB4b3IgSU4zLCBTVEFURTQKKwltb3ZhcHMgSU40LCBJVgorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCW1vdnVwcyBTVEFURTIsIDB4MTAoT1VUUCkKKwltb3Z1cHMgU1RBVEUzLCAweDIwKE9VVFApCisJbW92dXBzIFNUQVRFNCwgMHgzMChPVVRQKQorCXN1YiAkNjQsIExFTgorCWFkZCAkNjQsIElOUAorCWFkZCAkNjQsIE9VVFAKKwljbXAgJDY0LCBMRU4KKwlqZ2UgLkxjYmNfZGVjX2xvb3A0CisJY21wICQxNiwgTEVOCisJamIgLkxjYmNfZGVjX3JldAorLmFsaWduIDQKKy5MY2JjX2RlY19sb29wMToKKwltb3Z1cHMgKElOUCksIElOCisJbW92YXBzIElOLCBTVEFURQorCWNhbGwgX2Flc25pX2RlYzEKKwlweG9yIElWLCBTVEFURQorCW1vdnVwcyBTVEFURSwgKE9VVFApCisJbW92YXBzIElOLCBJVgorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxjYmNfZGVjX2xvb3AxCisJbW92dXBzIElWLCAoSVZQKQorLkxjYmNfZGVjX3JldDoKKwlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYWYwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC0wLDAgKzEsNDYxIEBACisvKgorICogU3VwcG9ydCBmb3IgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucy4gVGhpcyBmaWxlIGNvbnRhaW5zIGdsdWUKKyAqIGNvZGUsIHRoZSByZWFsIEFFUyBpbXBsZW1lbnRhdGlvbiBpcyBpbiBpbnRlbC1hZXNfYXNtLlMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBJbnRlbCBDb3JwLgorICogICAgQXV0aG9yOiBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdGQuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9hZXMuaD4KKworc3RydWN0IGFzeW5jX2Flc19jdHggeworCXN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbTsKK307CisKKyNkZWZpbmUgQUVTTklfQUxJR04JMTYKKyNkZWZpbmUgQUVTX0JMT0NLX01BU0sJKH4oQUVTX0JMT0NLX1NJWkUtMSkpCisKK2FzbWxpbmthZ2UgaW50IGFlc25pX3NldF9rZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisJCQkgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2VjYl9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2VjYl9kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfY2JjX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKKworc3RhdGljIGlubGluZSBpbnQga2VybmVsX2ZwdV91c2luZyh2b2lkKQoreworCWlmIChpbl9pbnRlcnJ1cHQoKSAmJiAhKHJlYWRfY3IwKCkgJiBYODZfQ1IwX1RTKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19hZXNfY3R4ICphZXNfY3R4KHZvaWQgKnJhd19jdHgpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmF3X2N0eDsKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gQUVTTklfQUxJR047CisKKwlpZiAoYWxpZ24gPD0gY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpCisJCWFsaWduID0gMTsKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqKUFMSUdOKGFkZHIsIGFsaWduKTsKK30KKworc3RhdGljIGludCBhZXNfc2V0X2tleV9jb21tb24oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdm9pZCAqcmF3X2N0eCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbl9rZXksIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChyYXdfY3R4KTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOworCWludCBlcnI7CisKKwlpZiAoa2V5X2xlbiAhPSBBRVNfS0VZU0laRV8xMjggJiYga2V5X2xlbiAhPSBBRVNfS0VZU0laRV8xOTIgJiYKKwkgICAga2V5X2xlbiAhPSBBRVNfS0VZU0laRV8yNTYpIHsKKwkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKQorCQllcnIgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWVyciA9IGFlc25pX3NldF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXJldHVybiBhZXNfc2V0X2tleV9jb21tb24odGZtLCBjcnlwdG9fdGZtX2N0eCh0Zm0pLCBpbl9rZXksIGtleV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJCWNyeXB0b19hZXNfZW5jcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CisJZWxzZSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJYWVzbmlfZW5jKGN0eCwgZHN0LCBzcmMpOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KK30KKworc3RhdGljIHZvaWQgYWVzX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKQorCQljcnlwdG9fYWVzX2RlY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWFlc25pX2RlYyhjdHgsIGRzdCwgc3JjKTsKKwkJa2VybmVsX2ZwdV9lbmQoKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNuaV9hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJhZXMiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDMwMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2Flc19jdHgpK0FFU05JX0FMSUdOLTEsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYWVzbmlfYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UJPSB7CisJCS5jaXBoZXIJPSB7CisJCQkuY2lhX21pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5jaWFfbWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLmNpYV9zZXRrZXkJCT0gYWVzX3NldF9rZXksCisJCQkuY2lhX2VuY3J5cHQJCT0gYWVzX2VuY3J5cHQsCisJCQkuY2lhX2RlY3J5cHQJCT0gYWVzX2RlY3J5cHQKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgZWNiX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2VjYl9lbmMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLKTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZWNiX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2VjYl9kZWMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLKTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBibGtfZWNiX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gIl9fZWNiLWFlcy1hZXNuaSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGNyeXB0b19hZXNfY3R4KStBRVNOSV9BTElHTi0xLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGJsa19lY2JfYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UgPSB7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGVjYl9lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBlY2JfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBjYmNfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfY2JjX2VuYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0ssIHdhbGsuaXYpOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYmNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfY2JjX2RlYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0ssIHdhbGsuaXYpOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGJsa19jYmNfYWxnID0geworCS5jcmFfbmFtZQkJPSAiX19jYmMtYWVzLWFlc25pIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gIl9fZHJpdmVyLWNiYy1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2Flc19jdHgpK0FFU05JX0FMSUdOLTEsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYmxrX2NiY19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdSA9IHsKKwkJLmJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBhZXNfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gY2JjX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGNiY19kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IGFibGtfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKwkJCXVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKworCXJldHVybiBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoJmN0eC0+Y3J5cHRkX3RmbS0+YmFzZSwga2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIGludCBhYmxrX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkgeworCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KKwkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oY3J5cHRkX3JlcSwgJmN0eC0+Y3J5cHRkX3RmbS0+YmFzZSk7CisJCXJldHVybiBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KGNyeXB0ZF9yZXEpOworCX0gZWxzZSB7CisJCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjOworCQlkZXNjLnRmbSA9IGNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisJCWRlc2MuaW5mbyA9IHJlcS0+aW5mbzsKKwkJZGVzYy5mbGFncyA9IDA7CisJCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLnRmbSktPmVuY3J5cHQoCisJCQkmZGVzYywgcmVxLT5kc3QsIHJlcS0+c3JjLCByZXEtPm5ieXRlcyk7CisJfQorfQorCitzdGF0aWMgaW50IGFibGtfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKSB7CisJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQorCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOworCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShjcnlwdGRfcmVxLCAmY3R4LT5jcnlwdGRfdGZtLT5iYXNlKTsKKwkJcmV0dXJuIGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQoY3J5cHRkX3JlcSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisJCWRlc2MudGZtID0gY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoY3R4LT5jcnlwdGRfdGZtKTsKKwkJZGVzYy5pbmZvID0gcmVxLT5pbmZvOworCQlkZXNjLmZsYWdzID0gMDsKKwkJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfY3J0KGRlc2MudGZtKS0+ZGVjcnlwdCgKKwkJCSZkZXNjLCByZXEtPmRzdCwgcmVxLT5zcmMsIHJlcS0+bmJ5dGVzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFibGtfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihjdHgtPmNyeXB0ZF90Zm0pOworfQorCitzdGF0aWMgdm9pZCBhYmxrX2luaXRfY29tbW9uKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkgICAgIHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbSkKK3sKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWN0eC0+Y3J5cHRkX3RmbSA9IGNyeXB0ZF90Zm07CisJdGZtLT5jcnRfYWJsa2NpcGhlci5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QpICsKKwkJY3J5cHRvX2FibGtjaXBoZXJfcmVxc2l6ZSgmY3J5cHRkX3RmbS0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgYWJsa19lY2JfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbTsKKworCWNyeXB0ZF90Zm0gPSBjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcigiX19kcml2ZXItZWNiLWFlcy1hZXNuaSIsIDAsIDApOworCWlmIChJU19FUlIoY3J5cHRkX3RmbSkpCisJCXJldHVybiBQVFJfRVJSKGNyeXB0ZF90Zm0pOworCWFibGtfaW5pdF9jb21tb24odGZtLCBjcnlwdGRfdGZtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFibGtfZWNiX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gImVjYihhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gImVjYi1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gNDAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVJ8Q1JZUFRPX0FMR19BU1lOQywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBhc3luY19hZXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYWJsa19lY2JfYWxnLmNyYV9saXN0KSwKKwkuY3JhX2luaXQJCT0gYWJsa19lY2JfaW5pdCwKKwkuY3JhX2V4aXQJCT0gYWJsa19leGl0LAorCS5jcmFfdSA9IHsKKwkJLmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWJsa19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBhYmxrX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGFibGtfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBhYmxrX2NiY19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOworCisJY3J5cHRkX3RmbSA9IGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKCJfX2RyaXZlci1jYmMtYWVzLWFlc25pIiwgMCwgMCk7CisJaWYgKElTX0VSUihjcnlwdGRfdGZtKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J5cHRkX3RmbSk7CisJYWJsa19pbml0X2NvbW1vbih0Zm0sIGNyeXB0ZF90Zm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWJsa19jYmNfYWxnID0geworCS5jcmFfbmFtZQkJPSAiY2JjKGFlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiY2JjLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSA0MDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUnxDUllQVE9fQUxHX0FTWU5DLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGFzeW5jX2Flc19jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChhYmxrX2NiY19hbGcuY3JhX2xpc3QpLAorCS5jcmFfaW5pdAkJPSBhYmxrX2NiY19pbml0LAorCS5jcmFfZXhpdAkJPSBhYmxrX2V4aXQsCisJLmNyYV91ID0geworCQkuYWJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWJsa19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBhYmxrX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGFibGtfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWVzbmlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlpZiAoIWNwdV9oYXNfYWVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBhcmUgbm90IGRldGVjdGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZykpKQorCQlnb3RvIGFlc19lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZykpKQorCQlnb3RvIGJsa19lY2JfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpKSkKKwkJZ290byBibGtfY2JjX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZykpKQorCQlnb3RvIGFibGtfZWNiX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfY2JjX2FsZykpKQorCQlnb3RvIGFibGtfY2JjX2VycjsKKworCXJldHVybiBlcnI7CisKK2FibGtfY2JjX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZyk7CithYmxrX2VjYl9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZyk7CitibGtfY2JjX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKTsKK2Jsa19lY2JfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKTsKK2Flc19lcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFlc25pX2V4aXQodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfY2JjX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKTsKK30KKworbW9kdWxlX2luaXQoYWVzbmlfaW5pdCk7Cittb2R1bGVfZXhpdChhZXNuaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWpuZGFlbCAoQUVTKSBDaXBoZXIgQWxnb3JpdGhtLCBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zIG9wdGltaXplZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJhZXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9zaWduYWwuYyBiL2FyY2gveDg2L2lhMzIvaWEzMl9zaWduYWwuYwppbmRleCA5ZGFiZDAwLi41ODhhN2FhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJfc2lnbmFsLmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX3NpZ25hbC5jCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSA8YXNtL3NpZ2ZyYW1lLmg+CiAjaW5jbHVkZSA8YXNtL3N5c19pYTMyLmg+CiAKLSNkZWZpbmUgREVCVUdfU0lHIDAKLQogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAogI2RlZmluZSBGSVhfRUZMQUdTCShYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19PRiB8IFwKQEAgLTQ2LDc4ICs0NCw4MyBAQAogCiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIzMihjb21wYXRfc2lnaW5mb190IF9fdXNlciAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgc2l6ZW9mKGNvbXBhdF9zaWdpbmZvX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdAotCSAgIHRoaXMgY29kZSBpcyBmaXhlZCBhY2NvcmRpbmdseS4KLQkgICBJdCBzaG91bGQgbmV2ZXIgY29weSBhbnkgcGFkIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlCi0JICAgdG8gYXZvaWQgc2VjdXJpdHkgbGVha3MsIGJ1dCBtdXN0IGNvcHkgdGhlIGdlbmVyaWMKLQkgICAzIGludHMgcGx1cyB0aGUgcmVsZXZhbnQgdW5pb24gbWVtYmVyLiAgKi8KLQllcnIgPSBfX3B1dF91c2VyKGZyb20tPnNpX3NpZ25vLCAmdG8tPnNpX3NpZ25vKTsKLQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9lcnJubywgJnRvLT5zaV9lcnJubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHNob3J0KWZyb20tPnNpX2NvZGUsICZ0by0+c2lfY29kZSk7CisJcHV0X3VzZXJfdHJ5IHsKKwkJLyogSWYgeW91IGNoYW5nZSBzaWdpbmZvX3Qgc3RydWN0dXJlLCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQKKwkJICAgdGhpcyBjb2RlIGlzIGZpeGVkIGFjY29yZGluZ2x5LgorCQkgICBJdCBzaG91bGQgbmV2ZXIgY29weSBhbnkgcGFkIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlCisJCSAgIHRvIGF2b2lkIHNlY3VyaXR5IGxlYWtzLCBidXQgbXVzdCBjb3B5IHRoZSBnZW5lcmljCisJCSAgIDMgaW50cyBwbHVzIHRoZSByZWxldmFudCB1bmlvbiBtZW1iZXIuICAqLworCQlwdXRfdXNlcl9leChmcm9tLT5zaV9zaWdubywgJnRvLT5zaV9zaWdubyk7CisJCXB1dF91c2VyX2V4KGZyb20tPnNpX2Vycm5vLCAmdG8tPnNpX2Vycm5vKTsKKwkJcHV0X3VzZXJfZXgoKHNob3J0KWZyb20tPnNpX2NvZGUsICZ0by0+c2lfY29kZSk7CiAKLQlpZiAoZnJvbS0+c2lfY29kZSA8IDApIHsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwotCQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KGZyb20tPnNpX3B0ciksICZ0by0+c2lfcHRyKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBGaXJzdCAzMmJpdHMgb2YgdW5pb25zIGFyZSBhbHdheXMgcHJlc2VudDoKLQkJICogc2lfcGlkID09PSBzaV9iYW5kID09PSBzaV90aWQgPT09IHNpX2FkZHIoTFMgaGFsZikKLQkJICovCi0JCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPl9zaWZpZWxkcy5fcGFkWzBdLAotCQkJCSAgJnRvLT5fc2lmaWVsZHMuX3BhZFswXSk7Ci0JCXN3aXRjaCAoZnJvbS0+c2lfY29kZSA+PiAxNikgewotCQljYXNlIF9fU0lfRkFVTFQgPj4gMTY6Ci0JCQlicmVhazsKLQkJY2FzZSBfX1NJX0NITEQgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91dGltZSwgJnRvLT5zaV91dGltZSk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9zdGltZSwgJnRvLT5zaV9zdGltZSk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9zdGF0dXMsICZ0by0+c2lfc3RhdHVzKTsKLQkJCS8qIEZBTEwgVEhST1VHSCAqLwotCQlkZWZhdWx0OgotCQljYXNlIF9fU0lfS0lMTCA+PiAxNjoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgX19TSV9QT0xMID4+IDE2OgotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfZmQsICZ0by0+c2lfZmQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgX19TSV9USU1FUiA+PiAxNjoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX292ZXJydW4sICZ0by0+c2lfb3ZlcnJ1bik7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KGZyb20tPnNpX3B0ciksCi0JCQkJCSAgJnRvLT5zaV9wdHIpOwotCQkJYnJlYWs7Ci0JCQkgLyogVGhpcyBpcyBub3QgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgYXMgb2Ygbm93LiAgKi8KLQkJY2FzZSBfX1NJX1JUID4+IDE2OgotCQljYXNlIF9fU0lfTUVTR1EgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91aWQsICZ0by0+c2lfdWlkKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2ludCwgJnRvLT5zaV9pbnQpOwotCQkJYnJlYWs7CisJCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkgeworCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7CisJCQlwdXRfdXNlcl9leChmcm9tLT5zaV91aWQsICZ0by0+c2lfdWlkKTsKKwkJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoZnJvbS0+c2lfcHRyKSwgJnRvLT5zaV9wdHIpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZpcnN0IDMyYml0cyBvZiB1bmlvbnMgYXJlIGFsd2F5cyBwcmVzZW50OgorCQkJICogc2lfcGlkID09PSBzaV9iYW5kID09PSBzaV90aWQgPT09IHNpX2FkZHIoTFMgaGFsZikKKwkJCSAqLworCQkJcHV0X3VzZXJfZXgoZnJvbS0+X3NpZmllbGRzLl9wYWRbMF0sCisJCQkJCSAgJnRvLT5fc2lmaWVsZHMuX3BhZFswXSk7CisJCQlzd2l0Y2ggKGZyb20tPnNpX2NvZGUgPj4gMTYpIHsKKwkJCWNhc2UgX19TSV9GQVVMVCA+PiAxNjoKKwkJCQlicmVhazsKKwkJCWNhc2UgX19TSV9DSExEID4+IDE2OgorCQkJCXB1dF91c2VyX2V4KGZyb20tPnNpX3V0aW1lLCAmdG8tPnNpX3V0aW1lKTsKKwkJCQlwdXRfdXNlcl9leChmcm9tLT5zaV9zdGltZSwgJnRvLT5zaV9zdGltZSk7CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfc3RhdHVzLCAmdG8tPnNpX3N0YXR1cyk7CisJCQkJLyogRkFMTCBUSFJPVUdIICovCisJCQlkZWZhdWx0OgorCQkJY2FzZSBfX1NJX0tJTEwgPj4gMTY6CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIF9fU0lfUE9MTCA+PiAxNjoKKwkJCQlwdXRfdXNlcl9leChmcm9tLT5zaV9mZCwgJnRvLT5zaV9mZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIF9fU0lfVElNRVIgPj4gMTY6CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfb3ZlcnJ1biwgJnRvLT5zaV9vdmVycnVuKTsKKwkJCQlwdXRfdXNlcl9leChwdHJfdG9fY29tcGF0KGZyb20tPnNpX3B0ciksCisJCQkJCSAgICAmdG8tPnNpX3B0cik7CisJCQkJYnJlYWs7CisJCQkJIC8qIFRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSB0aGUga2VybmVsIGFzIG9mIG5vdy4gICovCisJCQljYXNlIF9fU0lfUlQgPj4gMTY6CisJCQljYXNlIF9fU0lfTUVTR1EgPj4gMTY6CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CisJCQkJcHV0X3VzZXJfZXgoZnJvbS0+c2lfaW50LCAmdG8tPnNpX2ludCk7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KLQl9CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOworCiAJcmV0dXJuIGVycjsKIH0KIAogaW50IGNvcHlfc2lnaW5mb19mcm9tX3VzZXIzMihzaWdpbmZvX3QgKnRvLCBjb21wYXRfc2lnaW5mb190IF9fdXNlciAqZnJvbSkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXUzMiBwdHIzMjsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBzaXplb2YoY29tcGF0X3NpZ2luZm9fdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IF9fZ2V0X3VzZXIodG8tPnNpX3NpZ25vLCAmZnJvbS0+c2lfc2lnbm8pOwotCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9lcnJubywgJmZyb20tPnNpX2Vycm5vKTsKLQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfY29kZSwgJmZyb20tPnNpX2NvZGUpOworCWdldF91c2VyX3RyeSB7CisJCWdldF91c2VyX2V4KHRvLT5zaV9zaWdubywgJmZyb20tPnNpX3NpZ25vKTsKKwkJZ2V0X3VzZXJfZXgodG8tPnNpX2Vycm5vLCAmZnJvbS0+c2lfZXJybm8pOworCQlnZXRfdXNlcl9leCh0by0+c2lfY29kZSwgJmZyb20tPnNpX2NvZGUpOwogCi0JZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3BpZCwgJmZyb20tPnNpX3BpZCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3VpZCwgJmZyb20tPnNpX3VpZCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIocHRyMzIsICZmcm9tLT5zaV9wdHIpOwotCXRvLT5zaV9wdHIgPSBjb21wYXRfcHRyKHB0cjMyKTsKKwkJZ2V0X3VzZXJfZXgodG8tPnNpX3BpZCwgJmZyb20tPnNpX3BpZCk7CisJCWdldF91c2VyX2V4KHRvLT5zaV91aWQsICZmcm9tLT5zaV91aWQpOworCQlnZXRfdXNlcl9leChwdHIzMiwgJmZyb20tPnNpX3B0cik7CisJCXRvLT5zaV9wdHIgPSBjb21wYXRfcHRyKHB0cjMyKTsKKwl9IGdldF91c2VyX2NhdGNoKGVycik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTQyLDE3ICsxNDUsMjMgQEAKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YWNrX3QgdXNzLCB1b3NzOwotCWludCByZXQ7CisJaW50IHJldCwgZXJyID0gMDsKIAltbV9zZWdtZW50X3Qgc2VnOwogCiAJaWYgKHVzc19wdHIpIHsKIAkJdTMyIHB0cjsKIAogCQltZW1zZXQoJnVzcywgMCwgc2l6ZW9mKHN0YWNrX3QpKTsKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzc19wdHIsIHNpemVvZihzdGFja19pYTMyX3QpKSB8fAotCQkJICAgIF9fZ2V0X3VzZXIocHRyLCAmdXNzX3B0ci0+c3Nfc3ApIHx8Ci0JCQkgICAgX19nZXRfdXNlcih1c3Muc3NfZmxhZ3MsICZ1c3NfcHRyLT5zc19mbGFncykgfHwKLQkJCSAgICBfX2dldF91c2VyKHVzcy5zc19zaXplLCAmdXNzX3B0ci0+c3Nfc2l6ZSkpCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c3NfcHRyLCBzaXplb2Yoc3RhY2tfaWEzMl90KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlnZXRfdXNlcl90cnkgeworCQkJZ2V0X3VzZXJfZXgocHRyLCAmdXNzX3B0ci0+c3Nfc3ApOworCQkJZ2V0X3VzZXJfZXgodXNzLnNzX2ZsYWdzLCAmdXNzX3B0ci0+c3NfZmxhZ3MpOworCQkJZ2V0X3VzZXJfZXgodXNzLnNzX3NpemUsICZ1c3NfcHRyLT5zc19zaXplKTsKKwkJfSBnZXRfdXNlcl9jYXRjaChlcnIpOworCisJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJdXNzLnNzX3NwID0gY29tcGF0X3B0cihwdHIpOwogCX0KQEAgLTE2MSwxMCArMTcwLDE2IEBACiAJcmV0ID0gZG9fc2lnYWx0c3RhY2sodXNzX3B0ciA/ICZ1c3MgOiBOVUxMLCAmdW9zcywgcmVncy0+c3ApOwogCXNldF9mcyhzZWcpOwogCWlmIChyZXQgPj0gMCAmJiB1b3NzX3B0cikgIHsKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1b3NzX3B0ciwgc2l6ZW9mKHN0YWNrX2lhMzJfdCkpIHx8Ci0JCSAgICBfX3B1dF91c2VyKHB0cl90b19jb21wYXQodW9zcy5zc19zcCksICZ1b3NzX3B0ci0+c3Nfc3ApIHx8Ci0JCSAgICBfX3B1dF91c2VyKHVvc3Muc3NfZmxhZ3MsICZ1b3NzX3B0ci0+c3NfZmxhZ3MpIHx8Ci0JCSAgICBfX3B1dF91c2VyKHVvc3Muc3Nfc2l6ZSwgJnVvc3NfcHRyLT5zc19zaXplKSkKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1b3NzX3B0ciwgc2l6ZW9mKHN0YWNrX2lhMzJfdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcHV0X3VzZXJfdHJ5IHsKKwkJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQodW9zcy5zc19zcCksICZ1b3NzX3B0ci0+c3Nfc3ApOworCQkJcHV0X3VzZXJfZXgodW9zcy5zc19mbGFncywgJnVvc3NfcHRyLT5zc19mbGFncyk7CisJCQlwdXRfdXNlcl9leCh1b3NzLnNzX3NpemUsICZ1b3NzX3B0ci0+c3Nfc2l6ZSk7CisJCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKKworCQlpZiAoZXJyKQogCQkJcmV0ID0gLUVGQVVMVDsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE3Myw3NSArMTg4LDc4IEBACiAvKgogICogRG8gYSBzaWduYWwgcmV0dXJuOyB1bmRvIHRoZSBzaWduYWwgc3RhY2suCiAgKi8KKyNkZWZpbmUgbG9hZHNlZ21lbnRfZ3ModikJbG9hZF9nc19pbmRleCh2KQorI2RlZmluZSBsb2Fkc2VnbWVudF9mcyh2KQlsb2Fkc2VnbWVudChmcywgdikKKyNkZWZpbmUgbG9hZHNlZ21lbnRfZHModikJbG9hZHNlZ21lbnQoZHMsIHYpCisjZGVmaW5lIGxvYWRzZWdtZW50X2VzKHYpCWxvYWRzZWdtZW50KGVzLCB2KQorCisjZGVmaW5lIGdldF91c2VyX3NlZyhzZWcpCSh7IHVuc2lnbmVkIGludCB2OyBzYXZlc2VnbWVudChzZWcsIHYpOyB2OyB9KQorI2RlZmluZSBzZXRfdXNlcl9zZWcoc2VnLCB2KQlsb2Fkc2VnbWVudF8jI3NlZyh2KQorCiAjZGVmaW5lIENPUFkoeCkJCQl7CQlcCi0JZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+eCwgJnNjLT54KTsJXAorCWdldF91c2VyX2V4KHJlZ3MtPngsICZzYy0+eCk7CQlcCiB9CiAKLSNkZWZpbmUgQ09QWV9TRUdfQ1BMMyhzZWcpCXsJCQlcCi0JCXVuc2lnbmVkIHNob3J0IHRtcDsJCQlcCi0JCWVyciB8PSBfX2dldF91c2VyKHRtcCwgJnNjLT5zZWcpOwlcCi0JCXJlZ3MtPnNlZyA9IHRtcCB8IDM7CQkJXAotfQorI2RlZmluZSBHRVRfU0VHKHNlZykJCSh7CQkJXAorCXVuc2lnbmVkIHNob3J0IHRtcDsJCQkJXAorCWdldF91c2VyX2V4KHRtcCwgJnNjLT5zZWcpOwkJCVwKKwl0bXA7CQkJCQkJXAorfSkKKworI2RlZmluZSBDT1BZX1NFR19DUEwzKHNlZykJZG8gewkJCVwKKwlyZWdzLT5zZWcgPSBHRVRfU0VHKHNlZykgfCAzOwkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVMT0FEX1NFRyhzZWcpCQl7CQlcCi0JdW5zaWduZWQgaW50IGN1ciwgcHJlOwkJCVwKLQllcnIgfD0gX19nZXRfdXNlcihwcmUsICZzYy0+c2VnKTsJXAotCXNhdmVzZWdtZW50KHNlZywgY3VyKTsJCQlcCisJdW5zaWduZWQgaW50IHByZSA9IEdFVF9TRUcoc2VnKTsJXAorCXVuc2lnbmVkIGludCBjdXIgPSBnZXRfdXNlcl9zZWcoc2VnKTsJXAogCXByZSB8PSAzOwkJCQlcCiAJaWYgKHByZSAhPSBjdXIpCQkJCVwKLQkJbG9hZHNlZ21lbnQoc2VnLCBwcmUpOwkJXAorCQlzZXRfdXNlcl9zZWcoc2VnLCBwcmUpOwkJXAogfQogCiBzdGF0aWMgaW50IGlhMzJfcmVzdG9yZV9zaWdjb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCSAgIHN0cnVjdCBzaWdjb250ZXh0X2lhMzIgX191c2VyICpzYywKIAkJCQkgICB1bnNpZ25lZCBpbnQgKnBheCkKIHsKLQl1bnNpZ25lZCBpbnQgdG1wZmxhZ3MsIGdzLCBvbGRncywgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wZmxhZ3MsIGVyciA9IDA7CiAJdm9pZCBfX3VzZXIgKmJ1ZjsKIAl1MzIgdG1wOwogCiAJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCi0jaWYgREVCVUdfU0lHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlNJRyByZXN0b3JlX3NpZ2NvbnRleHQ6ICIKLQkgICAgICAgInNjPSVwIGVycigleCkgZWlwKCV4KSBjcygleCkgZmxnKCV4KVxuIiwKLQkgICAgICAgc2MsIHNjLT5lcnIsIHNjLT5pcCwgc2MtPmNzLCBzYy0+ZmxhZ3MpOwotI2VuZGlmCisJZ2V0X3VzZXJfdHJ5IHsKKwkJLyoKKwkJICogUmVsb2FkIGZzIGFuZCBncyBpZiB0aGV5IGhhdmUgY2hhbmdlZCBpbiB0aGUgc2lnbmFsCisJCSAqIGhhbmRsZXIuICBUaGlzIGRvZXMgbm90IGhhbmRsZSBsb25nIGZzL2dzIGJhc2UgY2hhbmdlcyBpbgorCQkgKiB0aGUgaGFuZGxlciwgYnV0IGRvZXMgbm90IGNsb2JiZXIgdGhlbSBhdCBsZWFzdCBpbiB0aGUKKwkJICogbm9ybWFsIGNhc2UuCisJCSAqLworCQlSRUxPQURfU0VHKGdzKTsKKwkJUkVMT0FEX1NFRyhmcyk7CisJCVJFTE9BRF9TRUcoZHMpOworCQlSRUxPQURfU0VHKGVzKTsKIAotCS8qCi0JICogUmVsb2FkIGZzIGFuZCBncyBpZiB0aGV5IGhhdmUgY2hhbmdlZCBpbiB0aGUgc2lnbmFsCi0JICogaGFuZGxlci4gIFRoaXMgZG9lcyBub3QgaGFuZGxlIGxvbmcgZnMvZ3MgYmFzZSBjaGFuZ2VzIGluCi0JICogdGhlIGhhbmRsZXIsIGJ1dCBkb2VzIG5vdCBjbG9iYmVyIHRoZW0gYXQgbGVhc3QgaW4gdGhlCi0JICogbm9ybWFsIGNhc2UuCi0JICovCi0JZXJyIHw9IF9fZ2V0X3VzZXIoZ3MsICZzYy0+Z3MpOwotCWdzIHw9IDM7Ci0Jc2F2ZXNlZ21lbnQoZ3MsIG9sZGdzKTsKLQlpZiAoZ3MgIT0gb2xkZ3MpCi0JCWxvYWRfZ3NfaW5kZXgoZ3MpOworCQlDT1BZKGRpKTsgQ09QWShzaSk7IENPUFkoYnApOyBDT1BZKHNwKTsgQ09QWShieCk7CisJCUNPUFkoZHgpOyBDT1BZKGN4KTsgQ09QWShpcCk7CisJCS8qIERvbid0IHRvdWNoIGV4dGVuZGVkIHJlZ2lzdGVycyAqLwogCi0JUkVMT0FEX1NFRyhmcyk7Ci0JUkVMT0FEX1NFRyhkcyk7Ci0JUkVMT0FEX1NFRyhlcyk7CisJCUNPUFlfU0VHX0NQTDMoY3MpOworCQlDT1BZX1NFR19DUEwzKHNzKTsKIAotCUNPUFkoZGkpOyBDT1BZKHNpKTsgQ09QWShicCk7IENPUFkoc3ApOyBDT1BZKGJ4KTsKLQlDT1BZKGR4KTsgQ09QWShjeCk7IENPUFkoaXApOwotCS8qIERvbid0IHRvdWNoIGV4dGVuZGVkIHJlZ2lzdGVycyAqLworCQlnZXRfdXNlcl9leCh0bXBmbGFncywgJnNjLT5mbGFncyk7CisJCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgfkZJWF9FRkxBR1MpIHwgKHRtcGZsYWdzICYgRklYX0VGTEFHUyk7CisJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KKwkJcmVncy0+b3JpZ19heCA9IC0xOwogCi0JQ09QWV9TRUdfQ1BMMyhjcyk7Ci0JQ09QWV9TRUdfQ1BMMyhzcyk7CisJCWdldF91c2VyX2V4KHRtcCwgJnNjLT5mcHN0YXRlKTsKKwkJYnVmID0gY29tcGF0X3B0cih0bXApOworCQllcnIgfD0gcmVzdG9yZV9pMzg3X3hzdGF0ZV9pYTMyKGJ1Zik7CiAKLQllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5mbGFncyk7Ci0JcmVncy0+ZmxhZ3MgPSAocmVncy0+ZmxhZ3MgJiB+RklYX0VGTEFHUykgfCAodG1wZmxhZ3MgJiBGSVhfRUZMQUdTKTsKLQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCi0JcmVncy0+b3JpZ19heCA9IC0xOworCQlnZXRfdXNlcl9leCgqcGF4LCAmc2MtPmF4KTsKKwl9IGdldF91c2VyX2NhdGNoKGVycik7CiAKLQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+ZnBzdGF0ZSk7Ci0JYnVmID0gY29tcGF0X3B0cih0bXApOwotCWVyciB8PSByZXN0b3JlX2kzODdfeHN0YXRlX2lhMzIoYnVmKTsKLQotCWVyciB8PSBfX2dldF91c2VyKCpwYXgsICZzYy0+YXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMxNywzOCArMzM1LDM2IEBACiAJCQkJIHZvaWQgX191c2VyICpmcHN0YXRlLAogCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG1hc2spCiB7Ci0JaW50IHRtcCwgZXJyID0gMDsKKwlpbnQgZXJyID0gMDsKIAotCXNhdmVzZWdtZW50KGdzLCB0bXApOwotCWVyciB8PSBfX3B1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKLQlzYXZlc2VnbWVudChmcywgdG1wKTsKLQllcnIgfD0gX19wdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5mcyk7Ci0Jc2F2ZXNlZ21lbnQoZHMsIHRtcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIodG1wLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOwotCXNhdmVzZWdtZW50KGVzLCB0bXApOwotCWVyciB8PSBfX3B1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmVzKTsKKwlwdXRfdXNlcl90cnkgeworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZ3MpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+Z3MpOworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZnMpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZnMpOworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZHMpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOworCQlwdXRfdXNlcl9leChnZXRfdXNlcl9zZWcoZXMpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZXMpOwogCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZGksICZzYy0+ZGkpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNpLCAmc2MtPnNpKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5icCwgJnNjLT5icCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c3AsICZzYy0+c3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmJ4LCAmc2MtPmJ4KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5keCwgJnNjLT5keCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+Y3gsICZzYy0+Y3gpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmF4LCAmc2MtPmF4KTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQudHJhcF9ubywgJnNjLT50cmFwbm8pOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5lcnJvcl9jb2RlLCAmc2MtPmVycik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+aXAsICZzYy0+aXApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+Y3MpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmZsYWdzLCAmc2MtPmZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zcCwgJnNjLT5zcF9hdF9zaWduYWwpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+c3MpOworCQlwdXRfdXNlcl9leChyZWdzLT5kaSwgJnNjLT5kaSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnNpLCAmc2MtPnNpKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+YnAsICZzYy0+YnApOworCQlwdXRfdXNlcl9leChyZWdzLT5zcCwgJnNjLT5zcCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmJ4LCAmc2MtPmJ4KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZHgsICZzYy0+ZHgpOworCQlwdXRfdXNlcl9leChyZWdzLT5jeCwgJnNjLT5jeCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmF4LCAmc2MtPmF4KTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sICZzYy0+dHJhcG5vKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLmVycm9yX2NvZGUsICZzYy0+ZXJyKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+aXAsICZzYy0+aXApOworCQlwdXRfdXNlcl9leChyZWdzLT5jcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmNzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZmxhZ3MsICZzYy0+ZmxhZ3MpOworCQlwdXRfdXNlcl9leChyZWdzLT5zcCwgJnNjLT5zcF9hdF9zaWduYWwpOworCQlwdXRfdXNlcl9leChyZWdzLT5zcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPnNzKTsKIAotCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoZnBzdGF0ZSksICZzYy0+ZnBzdGF0ZSk7CisJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoZnBzdGF0ZSksICZzYy0+ZnBzdGF0ZSk7CiAKLQkvKiBub24taUJDUzIgZXh0ZW5zaW9ucy4uICovCi0JZXJyIHw9IF9fcHV0X3VzZXIobWFzaywgJnNjLT5vbGRtYXNrKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuY3IyLCAmc2MtPmNyMik7CisJCS8qIG5vbi1pQkNTMiBleHRlbnNpb25zLi4gKi8KKwkJcHV0X3VzZXJfZXgobWFzaywgJnNjLT5vbGRtYXNrKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLmNyMiwgJnNjLT5jcjIpOworCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC00MzcsMTMgKzQ1MywxNyBAQAogCQllbHNlCiAJCQlyZXN0b3JlciA9ICZmcmFtZS0+cmV0Y29kZTsKIAl9Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdChyZXN0b3JlciksICZmcmFtZS0+cHJldGNvZGUpOwogCi0JLyoKLQkgKiBUaGVzZSBhcmUgYWN0dWFsbHkgbm90IHVzZWQgYW55bW9yZSwgYnV0IGxlZnQgYmVjYXVzZSBzb21lCi0JICogZ2RiIHZlcnNpb25zIGRlcGVuZCBvbiB0aGVtIGFzIGEgbWFya2VyLgotCSAqLwotCWVyciB8PSBfX3B1dF91c2VyKCooKHU2NCAqKSZjb2RlKSwgKHU2NCAqKWZyYW1lLT5yZXRjb2RlKTsKKwlwdXRfdXNlcl90cnkgeworCQlwdXRfdXNlcl9leChwdHJfdG9fY29tcGF0KHJlc3RvcmVyKSwgJmZyYW1lLT5wcmV0Y29kZSk7CisKKwkJLyoKKwkJICogVGhlc2UgYXJlIGFjdHVhbGx5IG5vdCB1c2VkIGFueW1vcmUsIGJ1dCBsZWZ0IGJlY2F1c2Ugc29tZQorCQkgKiBnZGIgdmVyc2lvbnMgZGVwZW5kIG9uIHRoZW0gYXMgYSBtYXJrZXIuCisJCSAqLworCQlwdXRfdXNlcl9leCgqKCh1NjQgKikmY29kZSksICh1NjQgKilmcmFtZS0+cmV0Y29kZSk7CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOworCiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTQ2MiwxMSArNDgyLDYgQEAKIAlyZWdzLT5jcyA9IF9fVVNFUjMyX0NTOwogCXJlZ3MtPnNzID0gX19VU0VSMzJfRFM7CiAKLSNpZiBERUJVR19TSUcKLQlwcmludGsoS0VSTl9ERUJVRyAiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JWx4IHJhPSV1XG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGZyYW1lLCByZWdzLT5pcCwgZnJhbWUtPnByZXRjb2RlKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Niw0MSArNTExLDQwIEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciB8PSBfX3B1dF91c2VyKHNpZywgJmZyYW1lLT5zaWcpOwotCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoJmZyYW1lLT5pbmZvKSwgJmZyYW1lLT5waW5mbyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdCgmZnJhbWUtPnVjKSwgJmZyYW1lLT5wdWMpOwotCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKCZmcmFtZS0+aW5mbywgaW5mbyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FRkFVTFQ7CisJcHV0X3VzZXJfdHJ5IHsKKwkJcHV0X3VzZXJfZXgoc2lnLCAmZnJhbWUtPnNpZyk7CisJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoJmZyYW1lLT5pbmZvKSwgJmZyYW1lLT5waW5mbyk7CisJCXB1dF91c2VyX2V4KHB0cl90b19jb21wYXQoJmZyYW1lLT51YyksICZmcmFtZS0+cHVjKTsKKwkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyMzIoJmZyYW1lLT5pbmZvLCBpbmZvKTsKIAotCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwotCWlmIChjcHVfaGFzX3hzYXZlKQotCQllcnIgfD0gX19wdXRfdXNlcihVQ19GUF9YU1RBVEUsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVsc2UKLQkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5zcCksCi0JCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwotCWVyciB8PSBpYTMyX3NldHVwX3NpZ2NvbnRleHQoJmZyYW1lLT51Yy51Y19tY29udGV4dCwgZnBzdGF0ZSwKLQkJCQkgICAgIHJlZ3MsIHNldC0+c2lnWzBdKTsKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLworCQlpZiAoY3B1X2hhc194c2F2ZSkKKwkJCXB1dF91c2VyX2V4KFVDX0ZQX1hTVEFURSwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJCWVsc2UKKwkJCXB1dF91c2VyX2V4KDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCQlwdXRfdXNlcl9leCgwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCQlwdXRfdXNlcl9leChjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOworCQlwdXRfdXNlcl9leChzYXNfc3NfZmxhZ3MocmVncy0+c3ApLAorCQkJICAgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOworCQlwdXRfdXNlcl9leChjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zaXplKTsKKwkJZXJyIHw9IGlhMzJfc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnVjLnVjX21jb250ZXh0LCBmcHN0YXRlLAorCQkJCQkgICAgIHJlZ3MsIHNldC0+c2lnWzBdKTsKKwkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwogCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKQotCQlyZXN0b3JlciA9IGthLT5zYS5zYV9yZXN0b3JlcjsKLQllbHNlCi0JCXJlc3RvcmVyID0gVkRTTzMyX1NZTUJPTChjdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvLAotCQkJCQkgcnRfc2lncmV0dXJuKTsKLQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KHJlc3RvcmVyKSwgJmZyYW1lLT5wcmV0Y29kZSk7CisJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKKwkJCXJlc3RvcmVyID0ga2EtPnNhLnNhX3Jlc3RvcmVyOworCQllbHNlCisJCQlyZXN0b3JlciA9IFZEU08zMl9TWU1CT0woY3VycmVudC0+bW0tPmNvbnRleHQudmRzbywKKwkJCQkJCSBydF9zaWdyZXR1cm4pOworCQlwdXRfdXNlcl9leChwdHJfdG9fY29tcGF0KHJlc3RvcmVyKSwgJmZyYW1lLT5wcmV0Y29kZSk7CiAKLQkvKgotCSAqIE5vdCBhY3R1YWxseSB1c2VkIGFueW1vcmUsIGJ1dCBsZWZ0IGJlY2F1c2Ugc29tZSBnZGIKLQkgKiB2ZXJzaW9ucyBuZWVkIGl0LgotCSAqLwotCWVyciB8PSBfX3B1dF91c2VyKCooKHU2NCAqKSZjb2RlKSwgKHU2NCAqKWZyYW1lLT5yZXRjb2RlKTsKKwkJLyoKKwkJICogTm90IGFjdHVhbGx5IHVzZWQgYW55bW9yZSwgYnV0IGxlZnQgYmVjYXVzZSBzb21lIGdkYgorCQkgKiB2ZXJzaW9ucyBuZWVkIGl0LgorCQkgKi8KKwkJcHV0X3VzZXJfZXgoKigodTY0ICopJmNvZGUpLCAodTY0ICopZnJhbWUtPnJldGNvZGUpOworCX0gcHV0X3VzZXJfY2F0Y2goZXJyKTsKKwogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC01NDksMTAgKzU2Myw1IEBACiAJcmVncy0+Y3MgPSBfX1VTRVIzMl9DUzsKIAlyZWdzLT5zcyA9IF9fVVNFUjMyX0RTOwogCi0jaWYgREVCVUdfU0lHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVseCByYT0ldVxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+aXAsIGZyYW1lLT5wcmV0Y29kZSk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggNWEwZDc2ZC4uZGIwYzgwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC0xMTIsOCArMTEyLDggQEAKIAlDRklfREVGX0NGQQlyc3AsMAogCUNGSV9SRUdJU1RFUglyc3AscmJwCiAJU1dBUEdTX1VOU0FGRV9TVEFDSwotCW1vdnEJJWdzOnBkYV9rZXJuZWxzdGFjaywgJXJzcAotCWFkZHEJJChQREFfU1RBQ0tPRkZTRVQpLCVyc3AJCisJbW92cQlQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCAlcnNwCisJYWRkcQkkKEtFUk5FTF9TVEFDS19PRkZTRVQpLCVyc3AKIAkvKgogCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvbi9vZmYgc2VjdGlvbjogdGhlIHN5c2NhbGwKIAkgKiBkaXNhYmxlZCBpcnFzLCBoZXJlIHdlIGVuYWJsZSBpdCBzdHJhaWdodCBhZnRlciBlbnRyeToKQEAgLTI3MywxMyArMjczLDEzIEBACiBFTlRSWShpYTMyX2NzdGFyX3RhcmdldCkKIAlDRklfU1RBUlRQUk9DMzIJc2ltcGxlCiAJQ0ZJX1NJR05BTF9GUkFNRQotCUNGSV9ERUZfQ0ZBCXJzcCxQREFfU1RBQ0tPRkZTRVQKKwlDRklfREVGX0NGQQlyc3AsS0VSTkVMX1NUQUNLX09GRlNFVAogCUNGSV9SRUdJU1RFUglyaXAscmN4CiAJLypDRklfUkVHSVNURVIJcmZsYWdzLHIxMSovCiAJU1dBUEdTX1VOU0FGRV9TVEFDSwogCW1vdmwJJWVzcCwlcjhkCiAJQ0ZJX1JFR0lTVEVSCXJzcCxyOAotCW1vdnEJJWdzOnBkYV9rZXJuZWxzdGFjaywlcnNwCisJbW92cQlQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCVyc3AKIAkvKgogCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvbi9vZmYgc2VjdGlvbjogdGhlIHN5c2NhbGwKIAkgKiBkaXNhYmxlZCBpcnFzIGFuZCBoZXJlIHdlIGVuYWJsZSBpdCBzdHJhaWdodCBhZnRlciBlbnRyeToKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCS5xdWFkIHN5czMyX29sZHVuYW1lCiAJLnF1YWQgc3lzX3VtYXNrCQkvKiA2MCAqLwogCS5xdWFkIHN5c19jaHJvb3QKLQkucXVhZCBzeXMzMl91c3RhdAorCS5xdWFkIGNvbXBhdF9zeXNfdXN0YXQKIAkucXVhZCBzeXNfZHVwMgogCS5xdWFkIHN5c19nZXRwcGlkCiAJLnF1YWQgc3lzX2dldHBncnAJCS8qIDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKaW5kZXggNmMwZDdmNi4uZWZhYzkyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwpAQCAtNjM4LDI4ICs2MzgsNiBAQAogCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KIAotbG9uZyBzeXMzMl91c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCB1c3RhdDMyIF9fdXNlciAqdTMycCkKLXsKLQlzdHJ1Y3QgdXN0YXQgdTsKLQltbV9zZWdtZW50X3Qgc2VnOwotCWludCByZXQ7Ci0KLQlzZWcgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfdXN0YXQoZGV2LCAoc3RydWN0IHVzdGF0IF9fdXNlciAqKSZ1KTsKLQlzZXRfZnMoc2VnKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdTMycCwgc2l6ZW9mKHN0cnVjdCB1c3RhdDMyKSkgfHwKLQkgICAgX19wdXRfdXNlcigoX191MzIpIHUuZl90ZnJlZSwgJnUzMnAtPmZfdGZyZWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoKF9fdTMyKSB1LmZfdGlub2RlLCAmdTMycC0+Zl90ZnJlZSkgfHwKLQkgICAgX19jb3B5X3RvX3VzZXIoJnUzMnAtPmZfZm5hbWUsIHUuZl9mbmFtZSwgc2l6ZW9mKHUuZl9mbmFtZSkpIHx8Ci0JICAgIF9fY29weV90b191c2VyKCZ1MzJwLT5mX2ZwYWNrLCB1LmZfZnBhY2ssIHNpemVvZih1LmZfZnBhY2spKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQlyZXR1cm4gcmV0OwotfQotCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfZXhlY3ZlKGNoYXIgX191c2VyICpuYW1lLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKIAkJCSAgICAgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYS5vdXQtY29yZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYS5vdXQtY29yZS5oCmluZGV4IDNjNjAxZjguLmJiNzBlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LWNvcmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAlkdW1wLT5yZWdzLmRzID0gKHUxNilyZWdzLT5kczsKIAlkdW1wLT5yZWdzLmVzID0gKHUxNilyZWdzLT5lczsKIAlkdW1wLT5yZWdzLmZzID0gKHUxNilyZWdzLT5mczsKLQlzYXZlc2VnbWVudChncywgZHVtcC0+cmVncy5ncyk7CisJZHVtcC0+cmVncy5ncyA9IGdldF91c2VyX2dzKHJlZ3MpOwogCWR1bXAtPnJlZ3Mub3JpZ19heCA9IHJlZ3MtPm9yaWdfYXg7CiAJZHVtcC0+cmVncy5pcCA9IHJlZ3MtPmlwOwogCWR1bXAtPnJlZ3MuY3MgPSAodTE2KXJlZ3MtPmNzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDk4MzA2ODEuLjQ1MThkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTEwMiw5ICsxMDIsNiBAQAogCWFjcGlfbm9pcnEgPSAxOwogfQogCi0vKiBGaXhtYXAgcGFnZXMgdG8gcmVzZXJ2ZSBmb3IgQUNQSSBib290LXRpbWUgdGFibGVzIChzZWUgZml4bWFwLmgpICovCi0jZGVmaW5lIEZJWF9BQ1BJX1BBR0VTIDQKLQogZXh0ZXJuIGludCBhY3BpX2dzaV90b19pcnEodTMyIGdzaSwgdW5zaWduZWQgaW50ICppcnEpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyBhY3BpX25vaXJxID0gMTsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU0NWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBBU01fWDg2X0FFU19ICisjZGVmaW5lIEFTTV9YODZfQUVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKwordm9pZCBjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LAorCQkJICAgIGNvbnN0IHU4ICpzcmMpOwordm9pZCBjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LAorCQkJICAgIGNvbnN0IHU4ICpzcmMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggYWIxZDUxYS4uNGVmOTQ5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMSwxNSArMSwxOCBAQAogI2lmbmRlZiBfQVNNX1g4Nl9BUElDX0gKICNkZWZpbmUgX0FTTV9YODZfQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2RlZmluZSBBUkNIX0FQSUNUSU1FUl9TVE9QU19PTl9DMwkxCkBAIC0zMyw3ICszNiwxMyBAQAogCX0gd2hpbGUgKDApCiAKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCiBleHRlcm4gdm9pZCBnZW5lcmljX2FwaWNfcHJvYmUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfYXBpY19wcm9iZSh2b2lkKQoreworfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIApAQCAtNDEsNiArNTAsMjEgQEAKIGV4dGVybiBpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKIAogZXh0ZXJuIGludCBkaXNhYmxlX2FwaWM7CisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBfX2lucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCk7CisjZWxzZSAvKiBDT05GSUdfU01QICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVmYXVsdF9pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCit7CisJaWYgKGFwaWNfdmVyYm9zaXR5ID49IEFQSUNfREVCVUcpCisJCV9faW5xdWlyZV9yZW1vdGVfYXBpYyhhcGljaWQpOworfQorCiAvKgogICogQmFzaWMgZnVuY3Rpb25zIGFjY2Vzc2luZyBBUElDcy4KICAqLwpAQCAtNTEsNyArNzUsMTQgQEAKICNkZWZpbmUgc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19YODZfVlNNUAogZXh0ZXJuIGludCBpc192c21wX2JveCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpc192c21wX2JveCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiBleHRlcm4gdm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpOwogZXh0ZXJuIHUzMiBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCB4YXBpY19pY3Jfd3JpdGUodTMyLCB1MzIpOwpAQCAtNzEsNiArMTAyLDEyIEBACiAJcmV0dXJuICooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpKTsKIH0KIAorZXh0ZXJuIHZvaWQgbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKTsKK2V4dGVybiB1MzIgbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgbmF0aXZlX2FwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCk7CitleHRlcm4gdTY0IG5hdGl2ZV9hcGljX2ljcl9yZWFkKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfYXBpY19tc3Jfd3JpdGUodTMyIHJlZywgdTMyIHYpCiB7CiAJaWYgKHJlZyA9PSBBUElDX0RGUiB8fCByZWcgPT0gQVBJQ19JRCB8fCByZWcgPT0gQVBJQ19MRFIgfHwKQEAgLTkxLDggKzEyOCwzMiBAQAogCXJldHVybiBsb3c7CiB9CiAKLSNpZm5kZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIGludCB4MmFwaWM7CitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3gyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG5hdGl2ZV9zYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV94MmFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKK3sKKwl3cm1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgKChfX3U2NCkgaWQpIDw8IDMyIHwgbG93KTsKK30KKworc3RhdGljIGlubGluZSB1NjQgbmF0aXZlX3gyYXBpY19pY3JfcmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJcmRtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworZXh0ZXJuIGludCB4MmFwaWMsIHgyYXBpY19waHlzOwogZXh0ZXJuIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCk7CkBAIC0xMTAsMzAgKzE3MSwyNCBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLSNkZWZpbmUgeDJhcGljX2VuYWJsZWQoKQkwCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHgyYXBpY19lbmFibGVkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAotc3RydWN0IGFwaWNfb3BzIHsKLQl1MzIgKCpyZWFkKSh1MzIgcmVnKTsKLQl2b2lkICgqd3JpdGUpKHUzMiByZWcsIHUzMiB2KTsKLQl1NjQgKCppY3JfcmVhZCkodm9pZCk7Ci0Jdm9pZCAoKmljcl93cml0ZSkodTMyIGxvdywgdTMyIGhpZ2gpOwotCXZvaWQgKCp3YWl0X2ljcl9pZGxlKSh2b2lkKTsKLQl1MzIgKCpzYWZlX3dhaXRfaWNyX2lkbGUpKHZvaWQpOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBhcGljX29wcyAqYXBpY19vcHM7Ci0KLSNkZWZpbmUgYXBpY19yZWFkIChhcGljX29wcy0+cmVhZCkKLSNkZWZpbmUgYXBpY193cml0ZSAoYXBpY19vcHMtPndyaXRlKQotI2RlZmluZSBhcGljX2ljcl9yZWFkIChhcGljX29wcy0+aWNyX3JlYWQpCi0jZGVmaW5lIGFwaWNfaWNyX3dyaXRlIChhcGljX29wcy0+aWNyX3dyaXRlKQotI2RlZmluZSBhcGljX3dhaXRfaWNyX2lkbGUgKGFwaWNfb3BzLT53YWl0X2ljcl9pZGxlKQotI2RlZmluZSBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSAoYXBpY19vcHMtPnNhZmVfd2FpdF9pY3JfaWRsZSkKLQogZXh0ZXJuIGludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAorI2lmZGVmIENPTkZJR19YODZfWDJBUElDCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNrX3gyQVBJQ19pcnEodm9pZCkKIHsKIAkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KQEAgLTE0MSwxOCArMTk2LDYgQEAKIH0KICNlbmRpZgogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfQVBJQ19pcnEodm9pZCkKLXsKLQkvKgotCSAqIGFja19BUElDX2lycSgpIGFjdHVhbGx5IGdldHMgY29tcGlsZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24KLQkgKiAuLi4geXVtbWllLgotCSAqLwotCi0JLyogRG9jcyBzYXkgdXNlIDAgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCi0JYXBpY193cml0ZShBUElDX0VPSSwgMCk7Ci19Ci0KIGV4dGVybiBpbnQgbGFwaWNfZ2V0X21heGx2dCh2b2lkKTsKIGV4dGVybiB2b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBjb25uZWN0X2JzcF9BUElDKHZvaWQpOwpAQCAtMTk2LDQgKzIzOSwzMjcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KIAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUJU0VUX0FQSUNfSUQoeCkJCShhcGljLT5zZXRfYXBpY19pZCh4KSkKKyNlbHNlCisKKyNlbmRpZgorCisvKgorICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEdlbmVyaWMgQVBJQyBzdWItYXJjaCBkYXRhIHN0cnVjdC4KKyAqCisgKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5CisgKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAorICogSmFtZXMgQ2xldmVyZG9uLgorICovCitzdHJ1Y3QgYXBpYyB7CisJY2hhciAqbmFtZTsKKworCWludCAoKnByb2JlKSh2b2lkKTsKKwlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7CisJaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKKworCXUzMiBpcnFfZGVsaXZlcnlfbW9kZTsKKwl1MzIgaXJxX2Rlc3RfbW9kZTsKKworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICooKnRhcmdldF9jcHVzKSh2b2lkKTsKKworCWludCBkaXNhYmxlX2VzcjsKKworCWludCBkZXN0X2xvZ2ljYWw7CisJdW5zaWduZWQgbG9uZyAoKmNoZWNrX2FwaWNpZF91c2VkKShwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCk7CisJdW5zaWduZWQgbG9uZyAoKmNoZWNrX2FwaWNpZF9wcmVzZW50KShpbnQgYXBpY2lkKTsKKworCXZvaWQgKCp2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKTsKKwl2b2lkICgqaW5pdF9hcGljX2xkcikodm9pZCk7CisKKwlwaHlzaWRfbWFza190ICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190IG1hcCk7CisKKwl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKKwlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOworCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOworCWludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7CisJaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7CisJcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKKwl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKKwlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7CisJaW50ICgqcGh5c19wa2dfaWQpKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKKworCS8qCisJICogV2hlbiBvbmUgb2YgdGhlIG5leHQgdHdvIGhvb2tzIHJldHVybnMgMSB0aGUgYXBpYworCSAqIGlzIHN3aXRjaGVkIHRvIHRoaXMuIEVzc2VudGlhbGx5IHRoZXkgYXJlIGFkZGl0aW9uYWwKKwkgKiBwcm9iZSBmdW5jdGlvbnM6CisJICovCisJaW50ICgqbXBzX29lbV9jaGVjaykoc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCk7CisKKwl1bnNpZ25lZCBpbnQgKCpnZXRfYXBpY19pZCkodW5zaWduZWQgbG9uZyB4KTsKKwl1bnNpZ25lZCBsb25nICgqc2V0X2FwaWNfaWQpKHVuc2lnbmVkIGludCBpZCk7CisJdW5zaWduZWQgbG9uZyBhcGljX2lkX21hc2s7CisKKwl1bnNpZ25lZCBpbnQgKCpjcHVfbWFza190b19hcGljaWQpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKTsKKwl1bnNpZ25lZCBpbnQgKCpjcHVfbWFza190b19hcGljaWRfYW5kKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKTsKKworCS8qIGlwaSAqLworCXZvaWQgKCpzZW5kX0lQSV9tYXNrKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZikoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCSBpbnQgdmVjdG9yKTsKKwl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7CisJdm9pZCAoKnNlbmRfSVBJX3NlbGYpKGludCB2ZWN0b3IpOworCisJLyogd2FrZXVwX3NlY29uZGFyeV9jcHUgKi8KKwlpbnQgKCp3YWtldXBfc2Vjb25kYXJ5X2NwdSkoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOworCisJaW50IHRyYW1wb2xpbmVfcGh5c19sb3c7CisJaW50IHRyYW1wb2xpbmVfcGh5c19oaWdoOworCisJdm9pZCAoKndhaXRfZm9yX2luaXRfZGVhc3NlcnQpKGF0b21pY190ICpkZWFzc2VydCk7CisJdm9pZCAoKnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYykodm9pZCk7CisJdm9pZCAoKmlucXVpcmVfcmVtb3RlX2FwaWMpKGludCBhcGljaWQpOworCisJLyogYXBpYyBvcHMgKi8KKwl1MzIgKCpyZWFkKSh1MzIgcmVnKTsKKwl2b2lkICgqd3JpdGUpKHUzMiByZWcsIHUzMiB2KTsKKwl1NjQgKCppY3JfcmVhZCkodm9pZCk7CisJdm9pZCAoKmljcl93cml0ZSkodTMyIGxvdywgdTMyIGhpZ2gpOworCXZvaWQgKCp3YWl0X2ljcl9pZGxlKSh2b2lkKTsKKwl1MzIgKCpzYWZlX3dhaXRfaWNyX2lkbGUpKHZvaWQpOworfTsKKworLyoKKyAqIFBvaW50ZXIgdG8gdGhlIGxvY2FsIEFQSUMgZHJpdmVyIGluIHVzZSBvbiB0aGlzIHN5c3RlbSAodGhlcmUncworICogYWx3YXlzIGp1c3Qgb25lIHN1Y2ggZHJpdmVyIGluIHVzZSAtIHRoZSBrZXJuZWwgZGVjaWRlcyB2aWEgYW4KKyAqIGVhcmx5IHByb2JpbmcgcHJvY2VzcyB3aGljaCBvbmUgaXQgcGlja3MgLSBhbmQgdGhlbiBzdGlja3MgdG8gaXQpOgorICovCitleHRlcm4gc3RydWN0IGFwaWMgKmFwaWM7CisKKy8qCisgKiBBUElDIGZ1bmN0aW9uYWxpdHkgdG8gYm9vdCBvdGhlciBDUFVzIC0gb25seSB1c2VkIG9uIFNNUDoKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQ7CitleHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9ubWkoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFwaWNfcmVhZCh1MzIgcmVnKQoreworCXJldHVybiBhcGljLT5yZWFkKHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX3dyaXRlKHUzMiByZWcsIHUzMiB2YWwpCit7CisJYXBpYy0+d3JpdGUocmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhcGljX2ljcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuIGFwaWMtPmljcl9yZWFkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlhcGljLT5pY3Jfd3JpdGUobG93LCBoaWdoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCWFwaWMtPndhaXRfaWNyX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwlyZXR1cm4gYXBpYy0+c2FmZV93YWl0X2ljcl9pZGxlKCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGFja19BUElDX2lycSh2b2lkKQoreworCS8qCisJICogYWNrX0FQSUNfaXJxKCkgYWN0dWFsbHkgZ2V0cyBjb21waWxlZCBhcyBhIHNpbmdsZSBpbnN0cnVjdGlvbgorCSAqIC4uLiB5dW1taWUuCisJICovCisKKwkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KKwlhcGljX3dyaXRlKEFQSUNfRU9JLCAwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBkZWZhdWx0X2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBpbnQgdmVyID0gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKKworCWlmIChBUElDX1hBUElDKHZlcikpCisJCXJldHVybiAoeCA+PiAyNCkgJiAweEZGOworCWVsc2UKKwkJcmV0dXJuICh4ID4+IDI0KSAmIDB4MEY7Cit9CisKKy8qCisgKiBXYXJtIHJlc2V0IHZlY3RvciBkZWZhdWx0IHBvc2l0aW9uOgorICovCisjZGVmaW5lIERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVwkJMHg0NjcKKyNkZWZpbmUgREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSAkJMHg0NjkKKworI2lmZGVmIENPTkZJR19YODZfNjQKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX2ZsYXQ7CitleHRlcm4gc3RydWN0IGFwaWMgYXBpY19waHlzZmxhdDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX3gyYXBpY19jbHVzdGVyOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfeDJhcGljX3BoeXM7CitleHRlcm4gaW50IGRlZmF1bHRfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7CisKK2V4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKKworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfeDJhcGljX3V2X3g7CitERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CisKK2V4dGVybiBpbnQgZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpOworZXh0ZXJuIGludCBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGRlZmF1bHRfd2FpdF9mb3JfaW5pdF9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnQpCit7CisJd2hpbGUgKCFhdG9taWNfcmVhZChkZWFzc2VydCkpCisJCWNwdV9yZWxheCgpOworCXJldHVybjsKK30KKworZXh0ZXJuIHZvaWQgZ2VuZXJpY19iaWdzbXBfcHJvYmUodm9pZCk7CisKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9GTEFUKQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZWZhdWx0X3RhcmdldF9jcHVzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBjcHVfb25saW5lX21hc2s7CisjZWxzZQorCXJldHVybiBjcHVtYXNrX29mKDApOworI2VuZGlmCit9CisKK0RFQ0xBUkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfYXBpY19pZCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBhcGljX3JlYWQoQVBJQ19JRCk7CisKKwlyZXR1cm4gYXBpYy0+Z2V0X2FwaWNfaWQocmVnKTsKK30KKworZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgorICoKKyAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCisgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAorICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KKyAqLworZXh0ZXJuIHZvaWQgZGVmYXVsdF9pbml0X2FwaWNfbGRyKHZvaWQpOworCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF9hcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2RlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitkZWZhdWx0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBtYXNrMSA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKKwl1bnNpZ25lZCBsb25nIG1hc2syID0gY3B1bWFza19iaXRzKGFuZG1hc2spWzBdOworCXVuc2lnbmVkIGxvbmcgbWFzazMgPSBjcHVtYXNrX2JpdHMoY3B1X29ubGluZV9tYXNrKVswXTsKKworCXJldHVybiAodW5zaWduZWQgaW50KShtYXNrMSAmIG1hc2syICYgbWFzazMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworZXh0ZXJuIGludCBkZWZhdWx0X2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCk7CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRlZmF1bHRfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgZGVmYXVsdF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwlyZXR1cm4gcGh5c19tYXA7Cit9CisKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X2NwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworCXJldHVybiAxIDw8IGNwdTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlpZiAobXBzX2NwdSA8IG5yX2NwdV9pZHMgJiYgY3B1X3ByZXNlbnQobXBzX2NwdSkpCisJCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChib290X2NwdV9waHlzaWNhbF9hcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBpbmxpbmUgaW50IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCXJldHVybiBfX2RlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKG1wc19jcHUpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIF9fZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Cit9CisjZWxzZQorZXh0ZXJuIGludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSk7CitleHRlcm4gaW50IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgZGVmYXVsdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQoreworCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c19hcGljaWQpOworfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitleHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbTlJfQ1BVU107CisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fWDg2X0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY251bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY251bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjYxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljbnVtLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BUElDTlVNX0gKKyNkZWZpbmUgX0FTTV9YODZfQVBJQ05VTV9ICisKKy8qIGRlZmluZSBNQVhfSU9fQVBJQ1MgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBNQVhfSU9fQVBJQ1MgNjQKKyNlbHNlCisjIGRlZmluZSBNQVhfSU9fQVBJQ1MgMTI4CisjIGRlZmluZSBNQVhfTE9DQUxfQVBJQyAzMjc2OAorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BUElDTlVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9hcG0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvYXBtLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2FwbS5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcmNoX2hvb2tzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZDQ5NTcuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXJjaF9ob29rcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9BUkNIX0hPT0tTX0gKLSNkZWZpbmUgX0FTTV9YODZfQVJDSF9IT09LU19ICi0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotLyoKLSAqCWxpbnV4L2luY2x1ZGUvYXNtL2FyY2hfaG9va3MuaAotICoKLSAqCWRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGhvb2tzCi0gKi8KLQotLyogdGhlc2UgYXJlbid0IGFyY2ggaG9va3MsIHRoZXkgYXJlIGdlbmVyaWMgcm91dGluZXMKLSAqIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGhvb2tzICovCi1leHRlcm4gdm9pZCBpbml0X0lTQV9pcnFzKHZvaWQpOwotZXh0ZXJuIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotCi0vKiB0aGVzZSBhcmUgdGhlIGRlZmluZWQgaG9va3MgKi8KLWV4dGVybiB2b2lkIGludHJfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJlX2ludHJfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJlX3NldHVwX2FyY2hfaG9vayh2b2lkKTsKLWV4dGVybiB2b2lkIHRyYXBfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJlX3RpbWVfaW5pdF9ob29rKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGltZV9pbml0X2hvb2sodm9pZCk7Ci1leHRlcm4gdm9pZCBtY2Ffbm1pX2hvb2sodm9pZCk7Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BUkNIX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGRkOWY1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NQUNIX0FQSUNfSAotI2RlZmluZSBfX0FTTV9NQUNIX0FQSUNfSAotCi0jZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIChwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkpCi0jZGVmaW5lIGVzcl9kaXNhYmxlICgxKQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JcmV0dXJuICZjcHVfb25saW5lX21hcDsKLSNlbHNlCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKLSNlbmRpZgotfQotCi0jdW5kZWYgQVBJQ19ERVNUX0xPR0lDQUwKLSNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwJMAotI2RlZmluZSBBUElDX0RGUl9WQUxVRQkJKEFQSUNfREZSX0ZMQVQpCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFCShkZXN0X0ZpeGVkKQotI2RlZmluZSBJTlRfREVTVF9NT0RFCQkoMCkgICAgLyogcGh5cyBkZWxpdmVyeSB0byB0YXJnZXQgcHJvYyAqLwotI2RlZmluZSBOT19CQUxBTkNFX0lSUQkJKDApCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2xkcihpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBpZDsKLQl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7Ci0JaWQgPSB4YXBpY19waHlzX3RvX2xvZ19hcGljaWQoY3B1KTsKLQl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KLSAqCi0gKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKLSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKLQl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCSJQaHlzZmxhdCIsIG5yX2lvYXBpY3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuIGFwaWNpZF8yX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCi17Ci0JaWYgKG1wc19jcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gKGludCkgcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKLX0KLQotZXh0ZXJuIHU4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW107Ci0vKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCi17Ci0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQlyZXR1cm4gY3B1X3BoeXNpY2FsX2lkKGNwdSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKLXsKLQkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KLQlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4RkZMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuICgxKTsKLX0KLQotLyogQXMgd2UgYXJlIHVzaW5nIHNpbmdsZSBDUFUgYXMgZGVzdGluYXRpb24sIHBpY2sgb25seSBvbmUgQ1BVIGhlcmUgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCi17Ci0JaW50IGNwdTsKLQlpbnQgYXBpY2lkOwkKLQotCWNwdSA9IGZpcnN0X2NwdSgqY3B1bWFzayk7Ci0JYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGNwdTsKLQotCS8qCi0JICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KLQkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCi0JICovCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdW1hc2ssIGFuZG1hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCWJyZWFrOwotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTJjM2Y1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ0RFRl9ICi0KLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4RkY8PDI0KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlyZXR1cm4gKCgoeCk+PjI0KSYweEZGKTsKLX0KLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaWdzbXAvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZmNkMDFiLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpZ3NtcC9pcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgX19BU01fTUFDSF9JUElfSAotI2RlZmluZSBfX0FTTV9NQUNIX0lQSV9ICi0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKaW5kZXggZGQ2MTYxNi4uNjUyNmNmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaApAQCAtMTAsMTcgKzEwLDMxIEBACiAjZGVmaW5lIEVYVEVOREVEX1ZHQQkweGZmZmUJCS8qIDgweDUwIG1vZGUgKi8KICNkZWZpbmUgQVNLX1ZHQQkJMHhmZmZkCQkvKiBhc2sgZm9yIGl0IGF0IGJvb3R1cCAqLwogCisjaWZkZWYgX19LRVJORUxfXworCiAvKiBQaHlzaWNhbCBhZGRyZXNzIHdoZXJlIGtlcm5lbCBzaG91bGQgYmUgbG9hZGVkLiAqLwogI2RlZmluZSBMT0FEX1BIWVNJQ0FMX0FERFIgKChDT05GSUdfUEhZU0lDQUxfU1RBUlQgXAogCQkJCSsgKENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKSBcCiAJCQkJJiB+KENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKQogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDQwMDAwMAorI2Vsc2UgLyogIUNPTkZJR19LRVJORUxfQlpJUDIgKi8KKwogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgQk9PVF9IRUFQX1NJWkUJMHg3MDAwCi0jZGVmaW5lIEJPT1RfU1RBQ0tfU0laRQkweDQwMDAKICNlbHNlCiAjZGVmaW5lIEJPT1RfSEVBUF9TSVpFCTB4NDAwMAorI2VuZGlmCisKKyNlbmRpZiAvKiAhQ09ORklHX0tFUk5FTF9CWklQMiAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBCT09UX1NUQUNLX1NJWkUJMHg0MDAwCisjZWxzZQogI2RlZmluZSBCT09UX1NUQUNLX1NJWkUJMHgxMDAwCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X0JPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDJmODQ2NjUuLjViMzAxYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTUsMjQgKzUsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIGludGVsLiAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBnKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBnLCBhZHIsIGxlbikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfZHVwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZtYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsZW4pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3ZtYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3Z1bm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KIAotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQlcCi0JbWVtY3B5KChkc3QpLCAoc3JjKSwgKGxlbikpCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJXAotCW1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJICAgICB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCW1lbWNweShkc3QsIHNyYywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCSAgICAgICB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworfQogCiAjZGVmaW5lIFBHX25vbl9XQgkJCQlQR19hcmNoXzEKIFBBR0VGTEFHKE5vbldCLCBub25fV0IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxsaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxsaW5nLmgKaW5kZXggMmJjMTYyZS4uMGU2M2M5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FsbGluZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGxpbmcuaApAQCAtMSw1ICsxLDU1IEBACiAvKgotICogU29tZSBtYWNyb3MgdG8gaGFuZGxlIHN0YWNrIGZyYW1lcyBpbiBhc3NlbWJseS4KKworIHg4NiBmdW5jdGlvbiBjYWxsIGNvbnZlbnRpb24sIDY0LWJpdDoKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGFyZ3VtZW50cyAgICAgICAgICAgfCAgY2FsbGVlLXNhdmVkICAgICAgfCBleHRyYSBjYWxsZXItc2F2ZWQgfCByZXR1cm4KKyBbY2FsbGVlLWNsb2JiZXJlZF0gICB8ICAgICAgICAgICAgICAgICAgICB8IFtjYWxsZWUtY2xvYmJlcmVkXSB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmRpIHJzaSByZHggcmN4IHI4LTkgfCByYnggcmJwIFsqXSByMTItMTUgfCByMTAtMTEgICAgICAgICAgICAgfCByYXgsIHJkeCBbKipdCisKKyAoIHJzcCBpcyBvYnZpb3VzbHkgaW52YXJpYW50IGFjcm9zcyBub3JtYWwgZnVuY3Rpb24gY2FsbHMuIChnY2MgY2FuICdtZXJnZScKKyAgIGZ1bmN0aW9ucyB3aGVuIGl0IHNlZXMgdGFpbC1jYWxsIG9wdGltaXphdGlvbiBwb3NzaWJpbGl0aWVzKSByZmxhZ3MgaXMKKyAgIGNsb2JiZXJlZC4gTGVmdG92ZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgb3ZlciB0aGUgc3RhY2sgZnJhbWUuKQorCisgWypdICBJbiB0aGUgZnJhbWUtcG9pbnRlcnMgY2FzZSByYnAgaXMgZml4ZWQgdG8gdGhlIHN0YWNrIGZyYW1lLgorCisgWyoqXSBmb3Igc3RydWN0IHJldHVybiB2YWx1ZXMgd2lkZXIgdGhhbiA2NCBiaXRzIHRoZSByZXR1cm4gY29udmVudGlvbiBpcyBhCisgICAgICBiaXQgbW9yZSBjb21wbGV4OiB1cCB0byAxMjggYml0cyB3aWR0aCB3ZSByZXR1cm4gc21hbGwgc3RydWN0dXJlcworICAgICAgc3RyYWlnaHQgaW4gcmF4LCByZHguIEZvciBzdHJ1Y3R1cmVzIGxhcmdlciB0aGFuIHRoYXQgKDMgd29yZHMgb3IKKyAgICAgIGxhcmdlcikgdGhlIGNhbGxlciBwdXRzIGEgcG9pbnRlciB0byBhbiBvbi1zdGFjayByZXR1cm4gc3RydWN0CisgICAgICBbYWxsb2NhdGVkIGluIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZV0gaW50byB0aGUgZmlyc3QgYXJndW1lbnQgLSBpLmUuCisgICAgICBpbnRvIHJkaS4gQWxsIG90aGVyIGFyZ3VtZW50cyBzaGlmdCB1cCBieSBvbmUgaW4gdGhpcyBjYXNlLgorICAgICAgRm9ydHVuYXRlbHkgdGhpcyBjYXNlIGlzIHJhcmUgaW4gdGhlIGtlcm5lbC4KKworRm9yIDMyLWJpdCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgLSBrZXJuZWwgaXMgYnVpbHQgd2l0aAorLW1yZWdwYXJtPTMgYW5kIC1mcmVnLXN0cnVjdC1yZXR1cm46CisKKyB4ODYgZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9uLCAzMi1iaXQ6CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBhcmd1bWVudHMgICAgICAgICB8IGNhbGxlZS1zYXZlZCAgICAgICAgfCBleHRyYSBjYWxsZXItc2F2ZWQgfCByZXR1cm4KKyBbY2FsbGVlLWNsb2JiZXJlZF0gfCAgICAgICAgICAgICAgICAgICAgIHwgW2NhbGxlZS1jbG9iYmVyZWRdIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZWF4IGVkeCBlY3ggICAgICAgIHwgZWJ4IGVkaSBlc2kgZWJwIFsqXSB8IDxub25lPiAgICAgICAgICAgICB8IGVheCwgZWR4IFsqKl0KKworICggaGVyZSB0b28gZXNwIGlzIG9idmlvdXNseSBpbnZhcmlhbnQgYWNyb3NzIG5vcm1hbCBmdW5jdGlvbiBjYWxscy4gZWZsYWdzCisgICBpcyBjbG9iYmVyZWQuIExlZnRvdmVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG92ZXIgdGhlIHN0YWNrIGZyYW1lLiApCisKKyBbKl0gIEluIHRoZSBmcmFtZS1wb2ludGVycyBjYXNlIGVicCBpcyBmaXhlZCB0byB0aGUgc3RhY2sgZnJhbWUuCisKKyBbKipdIFdlIGJ1aWxkIHdpdGggLWZyZWctc3RydWN0LXJldHVybiwgd2hpY2ggb24gMzItYml0IG1lYW5zIHNpbWlsYXIKKyAgICAgIHNlbWFudGljcyBhcyBvbiA2NC1iaXQ6IGVkeCBjYW4gYmUgdXNlZCBmb3IgYSBzZWNvbmQgcmV0dXJuIHZhbHVlCisgICAgICAoaS5lLiBjb3ZlcmluZyBpbnRlZ2VyIGFuZCBzdHJ1Y3R1cmUgc2l6ZXMgdXAgdG8gNjQgYml0cykgLSBhZnRlciB0aGF0CisgICAgICBpdCBnZXRzIG1vcmUgY29tcGxleCBhbmQgbW9yZSBleHBlbnNpdmU6IDMtd29yZCBvciBsYXJnZXIgc3RydWN0IHJldHVybnMKKyAgICAgIGdldCBkb25lIGluIHRoZSBjYWxsZXIncyBmcmFtZSBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIHJldHVybiBzdHJ1Y3QgZ29lcworICAgICAgaW50byByZWdwYXJtMCwgaS5lLiBlYXggLSB0aGUgb3RoZXIgYXJndW1lbnRzIHNoaWZ0IHVwIGFuZCB0aGUKKyAgICAgIGZ1bmN0aW9uJ3MgcmVnaXN0ZXIgcGFyYW1ldGVycyBkZWdlbmVyYXRlIHRvIHJlZ3Bhcm09MiBpbiBlc3NlbmNlLgorCisqLworCisKKy8qCisgKiA2NC1iaXQgc3lzdGVtIGNhbGwgc3RhY2sgZnJhbWUgbGF5b3V0IGRlZmluZXMgYW5kIGhlbHBlcnMsCisgKiBmb3IgYXNzZW1ibHkgY29kZToKICAqLwogCiAjZGVmaW5lIFIxNQkJICAwCkBAIC05LDcgKzU5LDcgQEAKICNkZWZpbmUgUkJQCQkgMzIKICNkZWZpbmUgUkJYCQkgNDAKIAotLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLworLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cCB0byBoZXJlOiAqLwogI2RlZmluZSBSMTEJCSA0OAogI2RlZmluZSBSMTAJCSA1NgogI2RlZmluZSBSOQkJIDY0CkBAIC0yMiw3ICs3Miw3IEBACiAjZGVmaW5lIE9SSUdfUkFYCTEyMCAgICAgICAvKiArIGVycm9yX2NvZGUgKi8KIC8qIGVuZCBvZiBhcmd1bWVudHMgKi8KIAotLyogY3B1IGV4Y2VwdGlvbiBmcmFtZSBvciB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYXN0IHN5c2NhbGwuICovCisvKiBjcHUgZXhjZXB0aW9uIGZyYW1lIG9yIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhc3Qgc3lzY2FsbDogKi8KICNkZWZpbmUgUklQCQkxMjgKICNkZWZpbmUgQ1MJCTEzNgogI2RlZmluZSBFRkxBR1MJCTE0NApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBiYWU0ODJkLi5iMTg1MDkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaApAQCAtNyw2ICs3LDIwIEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAorI2lmZGVmIENPTkZJR19TTVAKKworZXh0ZXJuIHZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCk7CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpIHt9CisKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQKKyNkZWZpbmUgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkJCQkwCisjZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCiBzdHJ1Y3QgeDg2X2NwdSB7CiAJc3RydWN0IGNwdSBjcHU7CiB9OwpAQCAtMTcsNCArMzEsNyBAQAogI2VuZGlmCiAKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQ7CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDczMDFlNjAuLjBiZWJhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTIxMyw2ICsyMTMsNyBAQAogI2RlZmluZSBjcHVfaGFzX3htbQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTSkKICNkZWZpbmUgY3B1X2hhc194bW0yCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMikKICNkZWZpbmUgY3B1X2hhc194bW0zCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKKyNkZWZpbmUgY3B1X2hhc19hZXMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BRVMpCiAjZGVmaW5lIGNwdV9oYXNfaHQJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVCkKICNkZWZpbmUgY3B1X2hhc19tcAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01QKQogI2RlZmluZSBjcHVfaGFzX254CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmM2M3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdW1hc2suaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9BU01fWDg2X0NQVU1BU0tfSAorI2RlZmluZSBfQVNNX1g4Nl9DUFVNQVNLX0gKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCitleHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbGluX21hc2s7CitleHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOworZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7CitleHRlcm4gY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOworCitleHRlcm4gdm9pZCBzZXR1cF9jcHVfbG9jYWxfbWFza3Modm9pZCk7CisKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQ7CitleHRlcm4gY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKKworI2RlZmluZSBjcHVfY2FsbGluX21hc2sJCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxpbl9tYXApCisjZGVmaW5lIGNwdV9jYWxsb3V0X21hc2sJKChzdHJ1Y3QgY3B1bWFzayAqKSZjcHVfY2FsbG91dF9tYXApCisjZGVmaW5lIGNwdV9pbml0aWFsaXplZF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2luaXRpYWxpemVkKQorI2RlZmluZSBjcHVfc2libGluZ19zZXR1cF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X3NpYmxpbmdfc2V0dXBfbWFwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX0FTTV9YODZfQ1BVTUFTS19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmgKaW5kZXggMDkzMGI0Zi4uYzY4YzM2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaApAQCAtMSwzOSArMSwyMSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9DVVJSRU5UX0gKICNkZWZpbmUgX0FTTV9YODZfQ1VSUkVOVF9ICiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3VycmVudF90YXNrKTsKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQotewotCXJldHVybiB4ODZfcmVhZF9wZXJjcHUoY3VycmVudF90YXNrKTsKLX0KLQotI2Vsc2UgLyogWDg2XzMyICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQogewotCXJldHVybiByZWFkX3BkYShwY3VycmVudCk7CisJcmV0dXJuIHBlcmNwdV9yZWFkKGN1cnJlbnRfdGFzayk7CiB9CiAKLSNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jZGVmaW5lIEdFVF9DVVJSRU5UKHJlZykgbW92cSAlZ3M6KHBkYV9wY3VycmVudCkscmVnCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIFg4Nl8zMiAqLwotCiAjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9kb190aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG9fdGltZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2RvX3RpbWVyLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZjUxYTNkZC4uODNjMWJjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTExMiw3ICsxMTIsNyBAQAogICogbm93IHN0cnVjdF91c2VyX3JlZ3MsIHRoZXkgYXJlIGRpZmZlcmVudCkKICAqLwogCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCVwKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTX0NPTU1PTihwcl9yZWcsIHJlZ3MpCVwKIGRvIHsJCQkJCQlcCiAJcHJfcmVnWzBdID0gcmVncy0+Yng7CQkJXAogCXByX3JlZ1sxXSA9IHJlZ3MtPmN4OwkJCVwKQEAgLTEyNCw3ICsxMjQsNiBAQAogCXByX3JlZ1s3XSA9IHJlZ3MtPmRzICYgMHhmZmZmOwkJXAogCXByX3JlZ1s4XSA9IHJlZ3MtPmVzICYgMHhmZmZmOwkJXAogCXByX3JlZ1s5XSA9IHJlZ3MtPmZzICYgMHhmZmZmOwkJXAotCXNhdmVzZWdtZW50KGdzLCBwcl9yZWdbMTBdKTsJCVwKIAlwcl9yZWdbMTFdID0gcmVncy0+b3JpZ19heDsJCVwKIAlwcl9yZWdbMTJdID0gcmVncy0+aXA7CQkJXAogCXByX3JlZ1sxM10gPSByZWdzLT5jcyAmIDB4ZmZmZjsJCVwKQEAgLTEzMyw2ICsxMzIsMTggQEAKIAlwcl9yZWdbMTZdID0gcmVncy0+c3MgJiAweGZmZmY7CQlcCiB9IHdoaWxlICgwKTsKIAorI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQlcCitkbyB7CQkJCQkJXAorCUVMRl9DT1JFX0NPUFlfUkVHU19DT01NT04ocHJfcmVnLCByZWdzKTtcCisJcHJfcmVnWzEwXSA9IGdldF91c2VyX2dzKHJlZ3MpOwkJXAorfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9LRVJORUxfUkVHUyhwcl9yZWcsIHJlZ3MpCVwKK2RvIHsJCQkJCQlcCisJRUxGX0NPUkVfQ09QWV9SRUdTX0NPTU1PTihwcl9yZWcsIHJlZ3MpO1wKKwlzYXZlc2VnbWVudChncywgcHJfcmVnWzEwXSk7CQlcCit9IHdoaWxlICgwKTsKKwogI2RlZmluZSBFTEZfUExBVEZPUk0JKHV0c25hbWUoKS0+bWFjaGluZSkKICNkZWZpbmUgc2V0X3BlcnNvbmFsaXR5XzY0Yml0KCkJZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0ZDUzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaApAQCAtMCwwICsxLDU3IEBACisvKgorICogVGhpcyBmaWxlIGlzIGRlc2lnbmVkIHRvIGNvbnRhaW4gdGhlIEJVSUxEX0lOVEVSUlVQVCBzcGVjaWZpY2F0aW9ucyBmb3IKKyAqIGFsbCBvZiB0aGUgZXh0cmEgbmFtZWQgaW50ZXJydXB0IHZlY3RvcnMgdXNlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLgorICogVXN1YWxseSB0aGlzIGlzIHRoZSBJbnRlciBQcm9jZXNzIEludGVycnVwdHMgKElQSXMpCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgcGFydCBvZiB0aGUgTGludXggYXJjaGl0ZWN0dXJlLCB0aGVyZQorICogaXMgbm8gaGFyZHdhcmUgSVJRIHBpbiBlcXVpdmFsZW50IGZvciB0aGVtLCB0aGV5IGFyZSB0cmlnZ2VyZWQKKyAqIHRocm91Z2ggdGhlIElDQyBieSB1cyAoSVBJcykKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK0JVSUxEX0lOVEVSUlVQVChyZXNjaGVkdWxlX2ludGVycnVwdCxSRVNDSEVEVUxFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX2ludGVycnVwdCxDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChjYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SKQorQlVJTERfSU5URVJSVVBUKGlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0LElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKQorCitCVUlMRF9JTlRFUlJVUFQzKGludmFsaWRhdGVfaW50ZXJydXB0MCxJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMCwKKwkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKK0JVSUxEX0lOVEVSUlVQVDMoaW52YWxpZGF0ZV9pbnRlcnJ1cHQxLElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCsxLAorCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQorQlVJTERfSU5URVJSVVBUMyhpbnZhbGlkYXRlX2ludGVycnVwdDIsSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzIsCisJCSBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQpCitCVUlMRF9JTlRFUlJVUFQzKGludmFsaWRhdGVfaW50ZXJydXB0MyxJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMywKKwkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKK0JVSUxEX0lOVEVSUlVQVDMoaW52YWxpZGF0ZV9pbnRlcnJ1cHQ0LElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCs0LAorCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQorQlVJTERfSU5URVJSVVBUMyhpbnZhbGlkYXRlX2ludGVycnVwdDUsSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzUsCisJCSBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQpCitCVUlMRF9JTlRFUlJVUFQzKGludmFsaWRhdGVfaW50ZXJydXB0NixJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrNiwKKwkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKK0JVSUxEX0lOVEVSUlVQVDMoaW52YWxpZGF0ZV9pbnRlcnJ1cHQ3LElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCs3LAorCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQorI2VuZGlmCisKKy8qCisgKiBldmVyeSBwZW50aXVtIGxvY2FsIEFQSUMgaGFzIHR3byAnbG9jYWwgaW50ZXJydXB0cycsIHdpdGggYQorICogc29mdC1kZWZpbmFibGUgdmVjdG9yIGF0dGFjaGVkIHRvIGJvdGggaW50ZXJydXB0cywgb25lIG9mCisgKiB3aGljaCBpcyBhIHRpbWVyIGludGVycnVwdCwgdGhlIG90aGVyIG9uZSBpcyBlcnJvciBjb3VudGVyCisgKiBvdmVyZmxvdy4gTGludXggdXNlcyB0aGUgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQgdG8gZ2V0CisgKiBhIG11Y2ggc2ltcGxlciBTTVAgdGltZSBhcmNoaXRlY3R1cmU6CisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKworQlVJTERfSU5URVJSVVBUKGFwaWNfdGltZXJfaW50ZXJydXB0LExPQ0FMX1RJTUVSX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChlcnJvcl9pbnRlcnJ1cHQsRVJST1JfQVBJQ19WRUNUT1IpCitCVUlMRF9JTlRFUlJVUFQoc3B1cmlvdXNfaW50ZXJydXB0LFNQVVJJT1VTX0FQSUNfVkVDVE9SKQorCisjaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKK0JVSUxEX0lOVEVSUlVQVChwZXJmX2NvdW50ZXJfaW50ZXJydXB0LCBMT0NBTF9QRVJGX1ZFQ1RPUikKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMCitCVUlMRF9JTlRFUlJVUFQodGhlcm1hbF9pbnRlcnJ1cHQsVEhFUk1BTF9BUElDX1ZFQ1RPUikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNThiOWNjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9FUzcwMDBfQVBJQ19ICi0jZGVmaW5lIF9fQVNNX0VTNzAwMF9BUElDX0gKLQotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotCi0jZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKLQotc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JICAgICAgICByZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXNfY2x1c3Rlcih2b2lkKQotewotCXJldHVybiAmQ1BVX01BU0tfQUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci19Ci0KLSNkZWZpbmUgQVBJQ19ERlJfVkFMVUVfQ0xVU1RFUgkJKEFQSUNfREZSX0NMVVNURVIpCi0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFX0NMVVNURVIJKGRlc3RfTG93ZXN0UHJpbykKLSNkZWZpbmUgSU5UX0RFU1RfTU9ERV9DTFVTVEVSCQkoMSkgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCi0jZGVmaW5lIE5PX0JBTEFOQ0VfSVJRX0NMVVNURVIJCSgxKQotCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfRkxBVCkKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfRml4ZWQpCi0jZGVmaW5lIElOVF9ERVNUX01PREUJCSgwKSAgICAvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBwcm9jcyAqLwotI2RlZmluZSBOT19CQUxBTkNFX0lSUQkJKDApCi0jdW5kZWYgIEFQSUNfREVTVF9MT0dJQ0FMCi0jZGVmaW5lIEFQSUNfREVTVF9MT0dJQ0FMCTB4MAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCi0jZGVmaW5lIGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgKGFwaWNpZCAmIDB4RjApCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbGRyKGludCBjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyBpZDsKLQlpZCA9IHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpOwotCXJldHVybiAoU0VUX0FQSUNfTE9HSUNBTF9JRChpZCkpOwotfQotCi0vKgotICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgotICoKLSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTGRSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCi0gKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAotICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHJfY2x1c3Rlcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRV9DTFVTVEVSKTsKLQl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JYXBpY193cml0ZShBUElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOwotCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKLQlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOwotfQotCi1leHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKLXsKLQlpbnQgYXBpYyA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiBVc2luZyAlZCBJL08gQVBJQ3MsIHRhcmdldCBjcHVzICVseFxuIiwKLQkJKGFwaWNfdmVyc2lvblthcGljXSA9PSAweDE0KSA/Ci0JCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwKLQkJCW5yX2lvYXBpY3MsIGNwdXNfYWRkcigqdGFyZ2V0X2NwdXMoKSlbMF0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQotewotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKLXsKLQlpZiAoIW1wc19jcHUpCi0JCXJldHVybiBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7Ci0JZWxzZSBpZiAobXBzX2NwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiAoaW50KSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOwotCWVsc2UKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQotewotCXN0YXRpYyBpbnQgaWQgPSAwOwotCXBoeXNpZF9tYXNrX3QgbWFzazsKLQltYXNrID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGlkKTsKLQkrK2lkOwotCXJldHVybiBtYXNrOwotfQotCi1leHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKLS8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQlyZXR1cm4gKGludCljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdOwotI2Vsc2UKLQlyZXR1cm4gbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQotewotCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhmZik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotfQotCi1leHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGNwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNwdV9tYXNrX3RvX2FwaWNpZF9jbHVzdGVyKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQotewotCWludCBudW1fYml0c19zZXQ7Ci0JaW50IGNwdXNfZm91bmQgPSAwOwotCWludCBjcHU7Ci0JaW50IGFwaWNpZDsKLQotCW51bV9iaXRzX3NldCA9IGNwdW1hc2tfd2VpZ2h0KGNwdW1hc2spOwotCS8qIFJldHVybiBpZCB0byBhbGwgKi8KLQlpZiAobnVtX2JpdHNfc2V0ID09IG5yX2NwdV9pZHMpCi0JCXJldHVybiAweEZGOwotCS8qCi0JICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4gIElmIGFyZSBub3QKLQkgKiBvbiB0aGUgc2FtZSBhcGljaWQgY2x1c3RlciByZXR1cm4gZGVmYXVsdCB2YWx1ZSBvZiBUQVJHRVRfQ1BVUy4KLQkgKi8KLQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOwotCWFwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCXdoaWxlIChjcHVzX2ZvdW5kIDwgbnVtX2JpdHNfc2V0KSB7Ci0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1bWFzaykpIHsKLQkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQotCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7Ci0JCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIDB4RkY7Ci0JCQl9Ci0JCQlhcGljaWQgPSBuZXdfYXBpY2lkOwotCQkJY3B1c19mb3VuZCsrOwotCQl9Ci0JCWNwdSsrOwotCX0KLQlyZXR1cm4gYXBpY2lkOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWQoY29uc3QgY3B1bWFza190ICpjcHVtYXNrKQotewotCWludCBudW1fYml0c19zZXQ7Ci0JaW50IGNwdXNfZm91bmQgPSAwOwotCWludCBjcHU7Ci0JaW50IGFwaWNpZDsKLQotCW51bV9iaXRzX3NldCA9IGNwdXNfd2VpZ2h0KCpjcHVtYXNrKTsKLQkvKiBSZXR1cm4gaWQgdG8gYWxsICovCi0JaWYgKG51bV9iaXRzX3NldCA9PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOwotCS8qCi0JICogVGhlIGNwdXMgaW4gdGhlIG1hc2sgbXVzdCBhbGwgYmUgb24gdGhlIGFwaWMgY2x1c3Rlci4gIElmIGFyZSBub3QKLQkgKiBvbiB0aGUgc2FtZSBhcGljaWQgY2x1c3RlciByZXR1cm4gZGVmYXVsdCB2YWx1ZSBvZiBUQVJHRVRfQ1BVUy4KLQkgKi8KLQljcHUgPSBmaXJzdF9jcHUoKmNwdW1hc2spOwotCWFwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCXdoaWxlIChjcHVzX2ZvdW5kIDwgbnVtX2JpdHNfc2V0KSB7Ci0JCWlmIChjcHVfaXNzZXQoY3B1LCAqY3B1bWFzaykpIHsKLQkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0JCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQotCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7Ci0JCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIGNwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKLQkJCX0KLQkJCWFwaWNpZCA9IG5ld19hcGljaWQ7Ci0JCQljcHVzX2ZvdW5kKys7Ci0JCX0KLQkJY3B1Kys7Ci0JfQotCXJldHVybiBhcGljaWQ7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqaW5tYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlpbnQgYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKDApOwotCWNwdW1hc2tfdmFyX3QgY3B1bWFzazsKLQotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmNwdW1hc2ssIEdGUF9BVE9NSUMpKQotCQlyZXR1cm4gYXBpY2lkOwotCi0JY3B1bWFza19hbmQoY3B1bWFzaywgaW5tYXNrLCBhbmRtYXNrKTsKLQljcHVtYXNrX2FuZChjcHVtYXNrLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwotCWFwaWNpZCA9IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrKTsKLQotCWZyZWVfY3B1bWFza192YXIoY3B1bWFzayk7Ci0JcmV0dXJuIGFwaWNpZDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi0jZW5kaWYgLyogX19BU01fRVM3MDAwX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9hcGljZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjM0YTMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2FwaWNkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNpZm5kZWYgX19BU01fRVM3MDAwX0FQSUNERUZfSAotI2RlZmluZSBfX0FTTV9FUzcwMDBfQVBJQ0RFRl9ICi0KLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4RkY8PDI0KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlyZXR1cm4gKCgoeCk+PjI0KSYweEZGKTsKLX0KLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOGVkMjQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZXM3MDAwL2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9FUzcwMDBfSVBJX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX0lQSV9ICi0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9FUzcwMDBfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvbXBwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTYyOWIwLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC9tcHBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0VTNzAwMF9NUFBBUlNFX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX01QUEFSU0VfSAotCi0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi1leHRlcm4gaW50IHBhcnNlX3VuaXN5c19vZW0gKGNoYXIgKm9lbXB0cik7Ci1leHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKTsKLWV4dGVybiB2b2lkIHVubWFwX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nIG9lbV9hZGRyKTsKLWV4dGVybiB2b2lkIHNldHVwX3VuaXN5cyh2b2lkKTsKLQotI2lmbmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICi1leHRlcm4gaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwotZXh0ZXJuIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQUNQSQotCi1zdGF0aWMgaW5saW5lIGludCBlczcwMDBfY2hlY2tfZHNkdCh2b2lkKQotewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7Ci0KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X3RhYmxlX2hlYWRlcihBQ1BJX1NJR19EU0RULCAwLCAmaGVhZGVyKSkgJiYKLQkgICAgIXN0cm5jbXAoaGVhZGVyLm9lbV9pZCwgIlVOSVNZUyIsIDYpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU01fTUFDSF9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lczcwMDAvd2FrZWNwdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGYwZGFhLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VzNzAwMC93YWtlY3B1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0VTNzAwMF9XQUtFQ1BVX0gKLSNkZWZpbmUgX19BU01fRVM3MDAwX1dBS0VDUFVfSAotCi0jZGVmaW5lIFRSQU1QT0xJTkVfUEhZU19MT1cJMHg0NjcKLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0hJR0gJMHg0NjkKLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2luaXRfZGVhc3NlcnQoYXRvbWljX3QgKmRlYXNzZXJ0KQotewotI2lmbmRlZiBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCi0Jd2hpbGUgKCFhdG9taWNfcmVhZChkZWFzc2VydCkpCi0JCWNwdV9yZWxheCgpOwotI2VuZGlmCi0JcmV0dXJuOwotfQotCi0vKiBOb3RoaW5nIHRvIGRvIGZvciBtb3N0IHBsYXRmb3Jtcywgc2luY2UgY2xlYXJlZCBieSB0aGUgSU5JVCBjeWNsZSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYyh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfTk1JX3ZlY3Rvcih1bnNpZ25lZCBzaG9ydCAqaGlnaCwgdW5zaWduZWQgc2hvcnQgKmxvdykKLXsKLX0KLQotZXh0ZXJuIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5xdWlyZV9yZW1vdGVfYXBpYyhpbnQgYXBpY2lkKQotewotCWlmIChhcGljX3ZlcmJvc2l0eSA+PSBBUElDX0RFQlVHKQotCQlfX2lucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfV0FLRUNQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDIzNjk2ZDQuLjYzYTc5YzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xLDEyICsxLDE0NiBAQAorLyoKKyAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgorICoKKyAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5CisgKiB4ODZfMzIgYW5kIHg4Nl82NCBpbnRlZ3JhdGlvbiBieSBHdXN0YXZvIEYuIFBhZG92YW4sIEZlYnJ1YXJ5IDIwMDkKKyAqLworCiAjaWZuZGVmIF9BU01fWDg2X0ZJWE1BUF9ICiAjZGVmaW5lIF9BU01fWDg2X0ZJWE1BUF9ICiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJmaXhtYXBfMzIuaCIKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KICNlbHNlCi0jIGluY2x1ZGUgImZpeG1hcF82NC5oIgorI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgogI2VuZGlmCiAKKy8qCisgKiBXZSBjYW4ndCBkZWNsYXJlIEZJWEFERFJfVE9QIGFzIHZhcmlhYmxlIGZvciB4ODZfNjQgYmVjYXVzZSB2c3lzY2FsbAorICogdXNlcyBmaXhtYXBzIHRoYXQgcmVsaWVzIG9uIEZJWEFERFJfVE9QIGZvciBwcm9wZXIgYWRkcmVzcyBjYWxjdWxhdGlvbi4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgRklYQUREUl9UT1AgeDg2IGludGVncmF0aW9uIHdhcyBsZWZ0IGFzIGxhdGVyIHdvcmsuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKiB1c2VkIGJ5IHZtYWxsb2MuYywgdnN5c2NhbGwubGRzLlMuCisgKgorICogTGVhdmUgb25lIGVtcHR5IHBhZ2UgYmV0d2VlbiB2bWFsbG9jJ2VkIGFyZWFzIGFuZAorICogdGhlIHN0YXJ0IG9mIHRoZSBmaXhtYXAuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fRklYQUREUl9UT1A7CisjZGVmaW5lIEZJWEFERFJfVE9QCSgodW5zaWduZWQgbG9uZylfX0ZJWEFERFJfVE9QKQorCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVCAgICAgX19maXhfdG9fdmlydChGSVhfVkRTTykKKyNkZWZpbmUgRklYQUREUl9VU0VSX0VORCAgICAgICBfX2ZpeF90b192aXJ0KEZJWF9WRFNPIC0gMSkKKyNlbHNlCisjZGVmaW5lIEZJWEFERFJfVE9QCShWU1lTQ0FMTF9FTkQtUEFHRV9TSVpFKQorCisvKiBPbmx5IGNvdmVycyAzMmJpdCB2c3lzY2FsbHMgY3VycmVudGx5LiBOZWVkIGFub3RoZXIgc2V0IGZvciA2NGJpdC4gKi8KKyNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUCSgodW5zaWduZWQgbG9uZylWU1lTQ0FMTDMyX1ZTWVNDQUxMKQorI2RlZmluZSBGSVhBRERSX1VTRVJfRU5ECShGSVhBRERSX1VTRVJfU1RBUlQgKyBQQUdFX1NJWkUpCisjZW5kaWYKKworCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4KKyAqIGZvciB4ODZfMzI6IFdlIGFsbG9jYXRlIHRoZXNlIHNwZWNpYWwgYWRkcmVzc2VzCisgKiBmcm9tIHRoZSBlbmQgb2YgdmlydHVhbCBtZW1vcnkgKDB4ZmZmZmYwMDApIGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogVGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcyAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKKyAqIGhpZ2hlciB0aGFuIDEpLiBVc2Ugc2V0X2ZpeG1hcChpZHgscGh5cykgdG8gYXNzb2NpYXRlCisgKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KKyAqCisgKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKKyAqIHRhc2sgc3dpdGNoZXMuCisgKi8KK2VudW0gZml4ZWRfYWRkcmVzc2VzIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJRklYX0hPTEUsCisJRklYX1ZEU08sCisjZWxzZQorCVZTWVNDQUxMX0xBU1RfUEFHRSwKKwlWU1lTQ0FMTF9GSVJTVF9QQUdFID0gVlNZU0NBTExfTEFTVF9QQUdFCisJCQkgICAgKyAoKFZTWVNDQUxMX0VORC1WU1lTQ0FMTF9TVEFSVCkgPj4gUEFHRV9TSElGVCkgLSAxLAorCVZTWVNDQUxMX0hQRVQsCisjZW5kaWYKKwlGSVhfREJHUF9CQVNFLAorCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJRklYX0lPX0FQSUNfQkFTRV8wLAorCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTIC0gMSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfVklTV1NfQVBJQworCUZJWF9DT19DUFUsCS8qIENvYmFsdCB0aW1lciAqLworCUZJWF9DT19BUElDLAkvKiBDb2JhbHQgQVBJQyBSZWRpcmVjdGlvbiBUYWJsZSAqLworCUZJWF9MSV9QQ0lBLAkvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQSAqLworCUZJWF9MSV9QQ0lCLAkvKiBMaXRoaXVtIFBDSSBCcmlkZ2UgQiAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9GMDBGX0JVRworCUZJWF9GMDBGX0lEVCwJLyogVmlydHVhbCBtYXBwaW5nIGZvciBJRFQgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfQ1lDTE9ORV9USU1FUgorCUZJWF9DWUNMT05FX1RJTUVSLCAvKmN5Y2xvbmUgdGltZXIgcmVnaXN0ZXIqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLworCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCisjaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRworCUZJWF9QQ0lFX01DRkcsCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQVJBVklSVAorCUZJWF9QQVJBVklSVF9CT09UTUFQLAorI2VuZGlmCisJX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKKyNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAorCUZJWF9PSENJMTM5NF9CQVNFLAorI2VuZGlmCisJLyoKKwkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCisJICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgorCSAqCisJICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKKwkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKKwkgKi8KKyNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKKyNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0CisJRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQorCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAorI2lmZGVmIENPTkZJR19YODZfMzIKKwlGSVhfV1BfVEVTVCwKKyNlbmRpZgorCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworfTsKKworCitleHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7CisKKyNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIEZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQorI2RlZmluZSBGSVhBRERSX0JPT1RfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9CT09UX1NJWkUpCisKIGV4dGVybiBpbnQgZml4bWFwc19zZXQ7CiAKIGV4dGVybiBwdGVfdCAqa21hcF9wdGU7CkBAIC02OSw0ICsyMDMsNSBAQAogCUJVR19PTih2YWRkciA+PSBGSVhBRERSX1RPUCB8fCB2YWRkciA8IEZJWEFERFJfU1RBUlQpOwogCXJldHVybiBfX3ZpcnRfdG9fZml4KHZhZGRyKTsKIH0KKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0FTTV9YODZfRklYTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MTE1YzEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgotICoKLSAqIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5Ci0gKi8KLQotI2lmbmRlZiBfQVNNX1g4Nl9GSVhNQVBfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9GSVhNQVBfMzJfSAotCi0KLS8qIHVzZWQgYnkgdm1hbGxvYy5jLCB2c3lzY2FsbC5sZHMuUy4KLSAqCi0gKiBMZWF2ZSBvbmUgZW1wdHkgcGFnZSBiZXR3ZWVuIHZtYWxsb2MnZWQgYXJlYXMgYW5kCi0gKiB0aGUgc3RhcnQgb2YgdGhlIGZpeG1hcC4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19GSVhBRERSX1RPUDsKLSNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUICAgICBfX2ZpeF90b192aXJ0KEZJWF9WRFNPKQotI2RlZmluZSBGSVhBRERSX1VTRVJfRU5EICAgICAgIF9fZml4X3RvX3ZpcnQoRklYX1ZEU08gLSAxKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKLSAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0Ci0gKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQotICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMKLSAqIGZyb20gdGhlIGVuZCBvZiB2aXJ0dWFsIG1lbW9yeSAoMHhmZmZmZjAwMCkgYmFja3dhcmRzLgotICogQWxzbyB0aGlzIGxldHMgdXMgZG8gZmFpbC1zYWZlIHZtYWxsb2MoKSwgd2UKLSAqIGNhbiBndWFyYW50ZWUgdGhhdCB0aGVzZSBzcGVjaWFsIGFkZHJlc3NlcyBhbmQKLSAqIHZtYWxsb2MoKS1lZCBhZGRyZXNzZXMgbmV2ZXIgb3ZlcmxhcC4KLSAqCi0gKiB0aGVzZSAnY29tcGlsZS10aW1lIGFsbG9jYXRlZCcgbWVtb3J5IGJ1ZmZlcnMgYXJlCi0gKiBmaXhlZC1zaXplIDRrIHBhZ2VzLiAob3IgbGFyZ2VyIGlmIHVzZWQgd2l0aCBhbiBpbmNyZW1lbnQKLSAqIGhpZ2hnZXIgdGhhbiAxKSB1c2UgZml4bWFwX3NldChpZHgscGh5cykgdG8gYXNzb2NpYXRlCi0gKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KLSAqCi0gKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKLSAqIHRhc2sgc3dpdGNoZXMuCi0gKi8KLWVudW0gZml4ZWRfYWRkcmVzc2VzIHsKLQlGSVhfSE9MRSwKLQlGSVhfVkRTTywKLQlGSVhfREJHUF9CQVNFLAotCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JRklYX0lPX0FQSUNfQkFTRV8wLAotCUZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgTUFYX0lPX0FQSUNTLTEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X1ZJU1dTX0FQSUMKLQlGSVhfQ09fQ1BVLAkvKiBDb2JhbHQgdGltZXIgKi8KLQlGSVhfQ09fQVBJQywJLyogQ29iYWx0IEFQSUMgUmVkaXJlY3Rpb24gVGFibGUgKi8KLQlGSVhfTElfUENJQSwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEEgKi8KLQlGSVhfTElfUENJQiwJLyogTGl0aGl1bSBQQ0kgQnJpZGdlIEIgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfRjAwRl9CVUcKLQlGSVhfRjAwRl9JRFQsCS8qIFZpcnR1YWwgbWFwcGluZyBmb3IgSURUICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIKLQlGSVhfQ1lDTE9ORV9USU1FUiwgLypjeWNsb25lIHRpbWVyIHJlZ2lzdGVyKi8KLSNlbmRpZgotCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwotCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCi0jaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRwotCUZJWF9QQ0lFX01DRkcsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLQlGSVhfUEFSQVZJUlRfQk9PVE1BUCwKLSNlbmRpZgotCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCi0JLyoKLQkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCi0JICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgotCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKLQkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKLQkgKi8KLSNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKLSNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0Ci0JRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQotCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAotCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAotCUZJWF9XUF9URVNULAotI2lmZGVmIENPTkZJR19BQ1BJCi0JRklYX0FDUElfQkVHSU4sCi0JRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyBGSVhfQUNQSV9QQUdFUyAtIDEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAotCUZJWF9PSENJMTM5NF9CQVNFLAotI2VuZGlmCi0JX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCi19OwotCi1leHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7Ci0KLQotI2RlZmluZSBGSVhBRERSX1RPUAkoKHVuc2lnbmVkIGxvbmcpX19GSVhBRERSX1RPUCkKLQotI2RlZmluZSBfX0ZJWEFERFJfU0laRQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQotI2RlZmluZSBfX0ZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gX19GSVhBRERSX1NJWkUpCi0jZGVmaW5lIEZJWEFERFJfQk9PVF9TVEFSVAkoRklYQUREUl9UT1AgLSBfX0ZJWEFERFJfQk9PVF9TSVpFKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9BU01fWDg2X0ZJWE1BUF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXBfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmU3NDA5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIGZpeG1hcC5oOiBjb21waWxlLXRpbWUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBJbmdvIE1vbG5hcgotICovCi0KLSNpZm5kZWYgX0FTTV9YODZfRklYTUFQXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfRklYTUFQXzY0X0gKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKLSAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0Ci0gKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQotICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4KLSAqCi0gKiBUaGVzZSAnY29tcGlsZS10aW1lIGFsbG9jYXRlZCcgbWVtb3J5IGJ1ZmZlcnMgYXJlCi0gKiBmaXhlZC1zaXplIDRrIHBhZ2VzIChvciBsYXJnZXIgaWYgdXNlZCB3aXRoIGFuIGluY3JlbWVudAotICogaGlnaGVyIHRoYW4gMSkuIFVzZSBzZXRfZml4bWFwKGlkeCxwaHlzKSB0byBhc3NvY2lhdGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB3aXRoIGZpeG1hcCBpbmRpY2VzLgotICoKLSAqIFRMQiBlbnRyaWVzIG9mIHN1Y2ggYnVmZmVycyB3aWxsIG5vdCBiZSBmbHVzaGVkIGFjcm9zcwotICogdGFzayBzd2l0Y2hlcy4KLSAqLwotCi1lbnVtIGZpeGVkX2FkZHJlc3NlcyB7Ci0JVlNZU0NBTExfTEFTVF9QQUdFLAotCVZTWVNDQUxMX0ZJUlNUX1BBR0UgPSBWU1lTQ0FMTF9MQVNUX1BBR0UKLQkJCSAgICArICgoVlNZU0NBTExfRU5ELVZTWVNDQUxMX1NUQVJUKSA+PiBQQUdFX1NISUZUKSAtIDEsCi0JVlNZU0NBTExfSFBFVCwKLQlGSVhfREJHUF9CQVNFLAotCUZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKLQlGSVhfQVBJQ19CQVNFLAkvKiBsb2NhbCAoQ1BVKSBBUElDKSAtLSByZXF1aXJlZCBmb3IgU01QIG9yIG5vdCAqLwotCUZJWF9JT19BUElDX0JBU0VfMCwKLQlGSVhfSU9fQVBJQ19CQVNFX0VORCA9IEZJWF9JT19BUElDX0JBU0VfMCArIE1BWF9JT19BUElDUyAtIDEsCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0JRklYX1BBUkFWSVJUX0JPT1RNQVAsCi0jZW5kaWYKLQlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAotI2lmZGVmIENPTkZJR19BQ1BJCi0JRklYX0FDUElfQkVHSU4sCi0JRklYX0FDUElfRU5EID0gRklYX0FDUElfQkVHSU4gKyBGSVhfQUNQSV9QQUdFUyAtIDEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAotCUZJWF9PSENJMTM5NF9CQVNFLAotI2VuZGlmCi0JLyoKLQkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCi0JICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgotCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKLQkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKLQkgKi8KLSNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKLSNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0Ci0JRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQotCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAotCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAotCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcwotfTsKLQotI2RlZmluZSBGSVhBRERSX1RPUAkoVlNZU0NBTExfRU5ELVBBR0VfU0laRSkKLSNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgRklYQUREUl9TVEFSVAkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NJWkUpCi0KLS8qIE9ubHkgY292ZXJzIDMyYml0IHZzeXNjYWxscyBjdXJyZW50bHkuIE5lZWQgYW5vdGhlciBzZXQgZm9yIDY0Yml0LiAqLwotI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQJKCh1bnNpZ25lZCBsb25nKVZTWVNDQUxMMzJfVlNZU0NBTEwpCi0jZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQJKEZJWEFERFJfVVNFUl9TVEFSVCArIFBBR0VfU0laRSkKLQotI2VuZGlmIC8qIF9BU01fWDg2X0ZJWE1BUF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljLmgKaW5kZXggZDQ4YmVlNi4uNGI4Yjk4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWMuaApAQCAtMSw1ICsxIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJnZW5hcGljXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJnZW5hcGljXzY0LmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA1YjczLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlbmFwaWNfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0dFTkFQSUNfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9HRU5BUElDXzMyX0gKLQotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLS8qCi0gKiBHZW5lcmljIEFQSUMgZHJpdmVyIGludGVyZmFjZS4KLSAqCi0gKiBBbiBzdHJhaWdodCBmb3J3YXJkIG1hcHBpbmcgb2YgdGhlIEFQSUMgcmVsYXRlZCBwYXJ0cyBvZiB0aGUKLSAqIHg4NiBzdWJhcmNoaXRlY3R1cmUgaW50ZXJmYWNlIHRvIGEgZHluYW1pYyBvYmplY3QuCi0gKgotICogVGhpcyBpcyB1c2VkIGJ5IHRoZSAiZ2VuZXJpYyIgeDg2IHN1YmFyY2hpdGVjdHVyZS4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCi0gKi8KLQotc3RydWN0IG1wY19idXM7Ci1zdHJ1Y3QgbXBjX3RhYmxlOwotc3RydWN0IG1wY19jcHU7Ci0KLXN0cnVjdCBnZW5hcGljIHsKLQljaGFyICpuYW1lOwotCWludCAoKnByb2JlKSh2b2lkKTsKLQotCWludCAoKmFwaWNfaWRfcmVnaXN0ZXJlZCkodm9pZCk7Ci0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKigqdGFyZ2V0X2NwdXMpKHZvaWQpOwotCWludCBpbnRfZGVsaXZlcnlfbW9kZTsKLQlpbnQgaW50X2Rlc3RfbW9kZTsKLQlpbnQgRVNSX0RJU0FCTEU7Ci0JaW50IGFwaWNfZGVzdGluYXRpb25fbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3VzZWQpKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKTsKLQl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3ByZXNlbnQpKGludCBhcGljaWQpOwotCWludCBub19iYWxhbmNlX2lycTsKLQlpbnQgbm9faW9hcGljX2NoZWNrOwotCXZvaWQgKCppbml0X2FwaWNfbGRyKSh2b2lkKTsKLQlwaHlzaWRfbWFza190ICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190IG1hcCk7Ci0KLQl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKLQlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOwotCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOwotCWludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7Ci0JaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7Ci0JcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKLQl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKLQlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7Ci0JdTMyICgqcGh5c19wa2dfaWQpKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKLQotCS8qIG1wcGFyc2UgKi8KLQkvKiBXaGVuIG9uZSBvZiB0aGUgbmV4dCB0d28gaG9va3MgcmV0dXJucyAxIHRoZSBnZW5hcGljCi0JICAgaXMgc3dpdGNoZWQgdG8gdGhpcy4gRXNzZW50aWFsbHkgdGhleSBhcmUgYWRkaXRpb25hbCBwcm9iZQotCSAgIGZ1bmN0aW9ucy4gKi8KLQlpbnQgKCptcHNfb2VtX2NoZWNrKShzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJCSAgICAgY2hhciAqcHJvZHVjdGlkKTsKLQlpbnQgKCphY3BpX21hZHRfb2VtX2NoZWNrKShjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCk7Ci0KLQl1bnNpZ25lZCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwotCXVuc2lnbmVkIGxvbmcgYXBpY19pZF9tYXNrOwotCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spOwotCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spOwotCXZvaWQgKCp2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBpcGkgKi8KLQl2b2lkICgqc2VuZF9JUElfbWFzaykoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpOwotCXZvaWQgKCpzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAotCQkJCQkgaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX2FsbGJ1dHNlbGYpKGludCB2ZWN0b3IpOwotCXZvaWQgKCpzZW5kX0lQSV9hbGwpKGludCB2ZWN0b3IpOwotI2VuZGlmCi0JaW50ICgqd2FrZXVwX2NwdSkoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOwotCWludCB0cmFtcG9saW5lX3BoeXNfbG93OwotCWludCB0cmFtcG9saW5lX3BoeXNfaGlnaDsKLQl2b2lkICgqd2FpdF9mb3JfaW5pdF9kZWFzc2VydCkoYXRvbWljX3QgKmRlYXNzZXJ0KTsKLQl2b2lkICgqc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKSh2b2lkKTsKLQl2b2lkICgqc3RvcmVfTk1JX3ZlY3RvcikodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpOwotCXZvaWQgKCpyZXN0b3JlX05NSV92ZWN0b3IpKHVuc2lnbmVkIHNob3J0ICpoaWdoLCB1bnNpZ25lZCBzaG9ydCAqbG93KTsKLQl2b2lkICgqaW5xdWlyZV9yZW1vdGVfYXBpYykoaW50IGFwaWNpZCk7Ci19OwotCi0jZGVmaW5lIEFQSUNGVU5DKHgpIC54ID0geCwKLQotLyogTW9yZSBmdW5jdGlvbnMgY291bGQgYmUgcHJvYmFibHkgbWFya2VkIElQSUZVTkMgYW5kIHNhdmUgc29tZSBzcGFjZQotICAgaW4gVVAgR0VORVJJQ0FSQ0gga2VybmVscywgYnV0IEkgZG9uJ3QgaGF2ZSB0aGUgbmVydmUgcmlnaHQgbm93Ci0gICB0byB1bnRhbmdsZSB0aGlzIG1lc3MuIC1BSyAgKi8KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElQSUZVTkMoeCkgQVBJQ0ZVTkMoeCkKLSNlbHNlCi0jZGVmaW5lIElQSUZVTkMoeCkKLSNlbmRpZgotCi0jZGVmaW5lIEFQSUNfSU5JVChhbmFtZSwgYXByb2JlKQkJCVwKLXsJCQkJCQkJXAotCS5uYW1lID0gYW5hbWUsCQkJCQlcCi0JLnByb2JlID0gYXByb2JlLAkJCQlcCi0JLmludF9kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREUsCQlcCi0JLmludF9kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFLAkJCVwKLQkubm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUSwJCVwKLQkuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwJCQlcCi0JLmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCA9IEFQSUNfREVTVF9MT0dJQ0FMLAlcCi0JQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKQkJCVwKLQlBUElDRlVOQyh0YXJnZXRfY3B1cykJCQkJXAotCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKQkJCVwKLQlBUElDRlVOQyhjaGVja19hcGljaWRfcHJlc2VudCkJCQlcCi0JQVBJQ0ZVTkMoaW5pdF9hcGljX2xkcikJCQkJXAotCUFQSUNGVU5DKGlvYXBpY19waHlzX2lkX21hcCkJCQlcCi0JQVBJQ0ZVTkMoc2V0dXBfYXBpY19yb3V0aW5nKQkJCVwKLQlBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykJCQlcCi0JQVBJQ0ZVTkMoYXBpY2lkX3RvX25vZGUpCQkJXAotCUFQSUNGVU5DKGNwdV90b19sb2dpY2FsX2FwaWNpZCkJCQlcCi0JQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKQkJCVwKLQlBUElDRlVOQyhhcGljaWRfdG9fY3B1X3ByZXNlbnQpCQkJXAotCUFQSUNGVU5DKHNldHVwX3BvcnRpb19yZW1hcCkJCQlcCi0JQVBJQ0ZVTkMoY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkJCVwKLQlBUElDRlVOQyhtcHNfb2VtX2NoZWNrKQkJCQlcCi0JQVBJQ0ZVTkMoZ2V0X2FwaWNfaWQpCQkJCVwKLQkuYXBpY19pZF9tYXNrID0gQVBJQ19JRF9NQVNLLAkJCVwKLQlBUElDRlVOQyhjcHVfbWFza190b19hcGljaWQpCQkJXAotCUFQSUNGVU5DKGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQpCQlcCi0JQVBJQ0ZVTkModmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQkJXAotCUFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spCQkJXAotCUlQSUZVTkMoc2VuZF9JUElfbWFzaykJCQkJXAotCUlQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikJCQlcCi0JSVBJRlVOQyhzZW5kX0lQSV9hbGwpCQkJCVwKLQlBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKQkJCVwKLQlBUElDRlVOQyhwaHlzX3BrZ19pZCkJCQkJXAotCS50cmFtcG9saW5lX3BoeXNfbG93ID0gVFJBTVBPTElORV9QSFlTX0xPVywJCVwKLQkudHJhbXBvbGluZV9waHlzX2hpZ2ggPSBUUkFNUE9MSU5FX1BIWVNfSElHSCwJCVwKLQlBUElDRlVOQyh3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KQkJXAotCUFQSUNGVU5DKHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYykJCVwKLQlBUElDRlVOQyhzdG9yZV9OTUlfdmVjdG9yKQkJCVwKLQlBUElDRlVOQyhyZXN0b3JlX05NSV92ZWN0b3IpCQkJXAotCUFQSUNGVU5DKGlucXVpcmVfcmVtb3RlX2FwaWMpCQkJXAotfQotCi1leHRlcm4gc3RydWN0IGdlbmFwaWMgKmdlbmFwaWM7Ci1leHRlcm4gdm9pZCBlczcwMDBfdXBkYXRlX2dlbmFwaWNfdG9fY2x1c3Rlcih2b2lkKTsKLQotZW51bSB1dl9zeXN0ZW1fdHlwZSB7VVZfTk9ORSwgVVZfTEVHQUNZX0FQSUMsIFVWX1gyQVBJQywgVVZfTk9OX1VOSVFVRV9BUElDfTsKLSNkZWZpbmUgZ2V0X3V2X3N5c3RlbV90eXBlKCkJCVVWX05PTkUKLSNkZWZpbmUgaXNfdXZfc3lzdGVtKCkJCQkwCi0jZGVmaW5lIHV2X3dha2V1cF9zZWNvbmRhcnkoYSwgYikJMQotI2RlZmluZSB1dl9zeXN0ZW1faW5pdCgpCQlkbyB7fSB3aGlsZSAoMCkKLQotCi0jZW5kaWYgLyogX0FTTV9YODZfR0VOQVBJQ18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW5hcGljXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZjMyZmIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VuYXBpY182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9HRU5BUElDXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfR0VOQVBJQ182NF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0KLS8qCi0gKiBDb3B5cmlnaHQgMjAwNCBKYW1lcyBDbGV2ZXJkb24sIElCTS4KLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCi0gKgotICogR2VuZXJpYyBBUElDIHN1Yi1hcmNoIGRhdGEgc3RydWN0LgotICoKLSAqIEhhY2tlZCBmb3IgeDg2LTY0IGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tIGkzODYgYXJjaGl0ZWN0dXJlIGNvZGUgYnkKLSAqIE1hcnRpbiBCbGlnaCwgQW5kaSBLbGVlbiwgSmFtZXMgQm90dG9tbGV5LCBKb2huIFN0dWx0eiwgYW5kCi0gKiBKYW1lcyBDbGV2ZXJkb24uCi0gKi8KLQotc3RydWN0IGdlbmFwaWMgewotCWNoYXIgKm5hbWU7Ci0JaW50ICgqYWNwaV9tYWR0X29lbV9jaGVjaykoY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwotCXUzMiBpbnRfZGVsaXZlcnlfbW9kZTsKLQl1MzIgaW50X2Rlc3RfbW9kZTsKLQlpbnQgKCphcGljX2lkX3JlZ2lzdGVyZWQpKHZvaWQpOwotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICooKnRhcmdldF9jcHVzKSh2b2lkKTsKLQl2b2lkICgqdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKShpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzayk7Ci0Jdm9pZCAoKmluaXRfYXBpY19sZHIpKHZvaWQpOwotCS8qIGlwaSAqLwotCXZvaWQgKCpzZW5kX0lQSV9tYXNrKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZikoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkJCSBpbnQgdmVjdG9yKTsKLQl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7Ci0Jdm9pZCAoKnNlbmRfSVBJX3NlbGYpKGludCB2ZWN0b3IpOwotCS8qICovCi0JdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzayk7Ci0JdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkX2FuZCkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzayk7Ci0JdW5zaWduZWQgaW50ICgqcGh5c19wa2dfaWQpKGludCBpbmRleF9tc2IpOwotCXVuc2lnbmVkIGludCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwotCXVuc2lnbmVkIGxvbmcgKCpzZXRfYXBpY19pZCkodW5zaWduZWQgaW50IGlkKTsKLQl1bnNpZ25lZCBsb25nIGFwaWNfaWRfbWFzazsKLQkvKiB3YWtldXBfc2Vjb25kYXJ5X2NwdSAqLwotCWludCAoKndha2V1cF9jcHUpKGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyAqZ2VuYXBpYzsKLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZmxhdDsKLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3BoeXNmbGF0OwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX2NsdXN0ZXI7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfcGh5czsKLWV4dGVybiBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICosIGNoYXIgKik7Ci0KLWV4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKLWVudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307Ci1leHRlcm4gZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCk7Ci1leHRlcm4gaW50IGlzX3V2X3N5c3RlbSh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3V2X3g7Ci1ERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7Ci1leHRlcm4gdm9pZCB1dl9jcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X0dFTkFQSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDAwMDc4N2QuLjE3NmYwNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMTEgKzEsNTIgQEAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgImhhcmRpcnFfMzIuaCIKLSNlbHNlCi0jIGluY2x1ZGUgImhhcmRpcnFfNjQuaCIKKyNpZm5kZWYgX0FTTV9YODZfSEFSRElSUV9ICisjZGVmaW5lIF9BU01fWDg2X0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGludCBfX25taV9jb3VudDsJLyogYXJjaCBkZXBlbmRlbnQgKi8KKwl1bnNpZ25lZCBpbnQgaXJxMF9pcnFzOworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXVuc2lnbmVkIGludCBhcGljX3RpbWVyX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCisJdW5zaWduZWQgaW50IGlycV9zcHVyaW91c19jb3VudDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7CisJdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OworCXVuc2lnbmVkIGludCBpcnFfdGxiX2NvdW50OworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKKwl1bnNpZ25lZCBpbnQgaXJxX3RoZXJtYWxfY291bnQ7CisjIGlmZGVmIENPTkZJR19YODZfNjQKKwl1bnNpZ25lZCBpbnQgaXJxX3RocmVzaG9sZF9jb3VudDsKKyMgZW5kaWYKKyNlbmRpZgorfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworREVDTEFSRV9QRVJfQ1BVKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKKworLyogV2UgY2FuIGhhdmUgYXQgbW9zdCBOUl9WRUNUT1JTIGlycXMgcm91dGVkIHRvIGEgY3B1IGF0IGEgdGltZSAqLworI2RlZmluZSBNQVhfSEFSRElSUVNfUEVSX0NQVSBOUl9WRUNUT1JTCisKKyNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCisKKyNkZWZpbmUgaW5jX2lycV9zdGF0KG1lbWJlcikJcGVyY3B1X2FkZChpcnFfc3RhdC5tZW1iZXIsIDEpCisKKyNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkJcGVyY3B1X3JlYWQoaXJxX3N0YXQuX19zb2Z0aXJxX3BlbmRpbmcpCisKKyNkZWZpbmUgX19BUkNIX1NFVF9TT0ZUSVJRX1BFTkRJTkcKKworI2RlZmluZSBzZXRfc29mdGlycV9wZW5kaW5nKHgpCXBlcmNwdV93cml0ZShpcnFfc3RhdC5fX3NvZnRpcnFfcGVuZGluZywgKHgpKQorI2RlZmluZSBvcl9zb2Z0aXJxX3BlbmRpbmcoeCkJcGVyY3B1X29yKGlycV9zdGF0Ll9fc29mdGlycV9wZW5kaW5nLCAoeCkpCisKK2V4dGVybiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCiBleHRlcm4gdTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpOwogI2RlZmluZSBhcmNoX2lycV9zdGF0X2NwdQlhcmNoX2lycV9zdGF0X2NwdQogCiBleHRlcm4gdTY0IGFyY2hfaXJxX3N0YXQodm9pZCk7CiAjZGVmaW5lIGFyY2hfaXJxX3N0YXQJCWFyY2hfaXJxX3N0YXQKKworI2VuZGlmIC8qIF9BU01fWDg2X0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjc5NTRkLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfSEFSRElSUV8zMl9ICi0jZGVmaW5lIF9BU01fWDg2X0hBUkRJUlFfMzJfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotCXVuc2lnbmVkIGxvbmcgaWRsZV90aW1lc3RhbXA7Ci0JdW5zaWduZWQgaW50IF9fbm1pX2NvdW50OwkvKiBhcmNoIGRlcGVuZGVudCAqLwotCXVuc2lnbmVkIGludCBhcGljX3RpbWVyX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCi0JdW5zaWduZWQgaW50IGlycTBfaXJxczsKLQl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7Ci0JdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OwotCXVuc2lnbmVkIGludCBpcnFfdGxiX2NvdW50OwotCXVuc2lnbmVkIGludCBpcnFfdGhlcm1hbF9jb3VudDsKLQl1bnNpZ25lZCBpbnQgaXJxX3NwdXJpb3VzX2NvdW50OwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotREVDTEFSRV9QRVJfQ1BVKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKLQotI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQKLSNkZWZpbmUgX19JUlFfU1RBVChjcHUsIG1lbWJlcikgKHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkubWVtYmVyKQotCi0jZGVmaW5lIGluY19pcnFfc3RhdChtZW1iZXIpCShfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5tZW1iZXIrKykKLQotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgotCi0jZW5kaWYgLyogX0FTTV9YODZfSEFSRElSUV8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YTZiNWQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9IQVJESVJRXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfSEFSRElSUV82NF9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3BkYS5oPgotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0KLS8qIFdlIGNhbiBoYXZlIGF0IG1vc3QgTlJfVkVDVE9SUyBpcnFzIHJvdXRlZCB0byBhIGNwdSBhdCBhIHRpbWUgKi8KLSNkZWZpbmUgTUFYX0hBUkRJUlFTX1BFUl9DUFUgTlJfVkVDVE9SUwotCi0jZGVmaW5lIF9fQVJDSF9JUlFfU1RBVCAxCi0KLSNkZWZpbmUgaW5jX2lycV9zdGF0KG1lbWJlcikJYWRkX3BkYShtZW1iZXIsIDEpCi0KLSNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkgcmVhZF9wZGEoX19zb2Z0aXJxX3BlbmRpbmcpCi0KLSNkZWZpbmUgX19BUkNIX1NFVF9TT0ZUSVJRX1BFTkRJTkcgMQotCi0jZGVmaW5lIHNldF9zb2Z0aXJxX3BlbmRpbmcoeCkgd3JpdGVfcGRhKF9fc29mdGlycV9wZW5kaW5nLCAoeCkpCi0jZGVmaW5lIG9yX3NvZnRpcnFfcGVuZGluZyh4KSAgb3JfcGRhKF9fc29mdGlycV9wZW5kaW5nLCAoeCkpCi0KLWV4dGVybiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotCi0jZW5kaWYgLyogX0FTTV9YODZfSEFSRElSUV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IDhkZTY0NGI2Li4zNzBlMWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMjUsOCArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAotI2RlZmluZSBwbGF0Zm9ybV9sZWdhY3lfaXJxKGlycSkJKChpcnEpIDwgMTYpCi0KIC8qIEludGVycnVwdCBoYW5kbGVycyByZWdpc3RlcmVkIGR1cmluZyBpbml0X0lSUSAqLwogZXh0ZXJuIHZvaWQgYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBlcnJvcl9pbnRlcnJ1cHQodm9pZCk7CkBAIC01OCw3ICs1Niw3IEBACiBleHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhZW9pKTsKIAogLyogSU9BUElDICovCi0jZGVmaW5lIElPX0FQSUNfSVJRKHgpICgoKHgpID49IDE2KSB8fCAoKDE8PCh4KSkgJiBpb19hcGljX2lycXMpKQorI2RlZmluZSBJT19BUElDX0lSUSh4KSAoKCh4KSA+PSBOUl9JUlFTX0xFR0FDWSkgfHwgKCgxPDwoeCkpICYgaW9fYXBpY19pcnFzKSkKIGV4dGVybiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKIAogZXh0ZXJuIHZvaWQgaW5pdF9WSVNXU19BUElDX2lycXModm9pZCk7CkBAIC02NywxNSArNjUsNyBAQAogZXh0ZXJuIGludCBJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3RvcihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZuKTsKIGV4dGVybiB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogZXh0ZXJuIHZvaWQgZW5hYmxlX0lPX0FQSUModm9pZCk7Ci0jZW5kaWYKLQotLyogSVBJIGZ1bmN0aW9ucyAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB2b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3Rvcik7Ci0jZW5kaWYKLWV4dGVybiB2b2lkIHNlbmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsKIAogLyogU3RhdGlzdGljcyAqLwogZXh0ZXJuIGF0b21pY190IGlycV9lcnJfY291bnQ7CkBAIC04NCwyMSArNzQsMTEgQEAKIC8qIEVJU0EgKi8KIGV4dGVybiB2b2lkIGVpc2Ffc2V0X2xldmVsX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAotLyogVm95YWdlciBmdW5jdGlvbnMgKi8KLWV4dGVybiBhc21saW5rYWdlIHZvaWQgdmljX2NwaV9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHZpY19zeXNfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB2aWNfY21uX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX2ludmFsaWRhdGVfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBxaWNfcmVzY2hlZHVsZV9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHFpY19lbmFibGVfaXJxX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgcWljX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpOwotCiAvKiBTTVAgKi8KIGV4dGVybiB2b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotI2lmZGVmIENPTkZJR19YODZfU01QCisjaWZkZWYgQ09ORklHX1NNUAogZXh0ZXJuIHZvaWQgc21wX3Jlc2NoZWR1bGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oCmluZGV4IDU4ZDcwOTEuLjFhOTllNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaApAQCAtNjAsNCArNjAsOCBAQAogZXh0ZXJuIHZvaWQgbWFza184MjU5QSh2b2lkKTsKIGV4dGVybiB2b2lkIHVubWFza184MjU5QSh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19YODZfMzIKK2V4dGVybiB2b2lkIGluaXRfSVNBX2lycXModm9pZCk7CisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fWDg2X0k4MjU5X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lhMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lhMzIuaAppbmRleCA1MGNhNDg2Li4xZjdlNjI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaWEzMi5oCkBAIC0xMjksMTMgKzEyOSw2IEBACiAJfSBfc2lmaWVsZHM7CiB9IGNvbXBhdF9zaWdpbmZvX3Q7CiAKLXN0cnVjdCB1c3RhdDMyIHsKLQlfX3UzMgkJCWZfdGZyZWU7Ci0JY29tcGF0X2lub190CQlmX3Rpbm9kZTsKLQljaGFyCQkJZl9mbmFtZVs2XTsKLQljaGFyCQkJZl9mcGFja1s2XTsKLX07Ci0KICNkZWZpbmUgSUEzMl9TVEFDS19UT1AgSUEzMl9QQUdFX09GRlNFVAogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMWRiYmRmNC4uZTUzODNlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNkZWZpbmUgYnVpbGRfbW1pb19yZWFkKG5hbWUsIHNpemUsIHR5cGUsIHJlZywgYmFycmllcikgXAogc3RhdGljIGlubGluZSB0eXBlIG5hbWUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKSBcCkBAIC04MCw2ICs4MSw5OCBAQAogI2RlZmluZSByZWFkcQkJCXJlYWRxCiAjZGVmaW5lIHdyaXRlcQkJCXdyaXRlcQogCisvKioKKyAqCXZpcnRfdG9fcGh5cwktCW1hcCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbAorICoJQGFkZHJlc3M6IGFkZHJlc3MgdG8gcmVtYXAKKyAqCisgKglUaGUgcmV0dXJuZWQgcGh5c2ljYWwgYWRkcmVzcyBpcyB0aGUgcGh5c2ljYWwgKENQVSkgbWFwcGluZyBmb3IKKyAqCXRoZSBtZW1vcnkgYWRkcmVzcyBnaXZlbi4gSXQgaXMgb25seSB2YWxpZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBvbgorICoJYWRkcmVzc2VzIGRpcmVjdGx5IG1hcHBlZCBvciBhbGxvY2F0ZWQgdmlhIGttYWxsb2MuCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBnaXZlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQoreworCXJldHVybiBfX3BhKGFkZHJlc3MpOworfQorCisvKioKKyAqCXBoeXNfdG9fdmlydAktCW1hcCBwaHlzaWNhbCBhZGRyZXNzIHRvIHZpcnR1YWwKKyAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCisgKgorICoJVGhlIHJldHVybmVkIHZpcnR1YWwgYWRkcmVzcyBpcyBhIGN1cnJlbnQgQ1BVIG1hcHBpbmcgZm9yCisgKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KKyAqCWFkZHJlc3NlcyB0aGF0IGhhdmUgYSBrZXJuZWwgbWFwcGluZworICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KKyAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKKyAqCXRoaXMgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydChwaHlzX2FkZHJfdCBhZGRyZXNzKQoreworCXJldHVybiBfX3ZhKGFkZHJlc3MpOworfQorCisvKgorICogQ2hhbmdlICJzdHJ1Y3QgcGFnZSIgdG8gcGh5c2ljYWwgYWRkcmVzcy4KKyAqLworI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgICAgKChkbWFfYWRkcl90KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisKKy8qCisgKiBJU0EgSS9PIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KKyAqIEhvd2V2ZXIsIHdlIHRydW5jYXRlIHRoZSBhZGRyZXNzIHRvIHVuc2lnbmVkIGludCB0byBhdm9pZCB1bmRlc2lyYWJsZQorICogcHJvbWl0aW9ucyBpbiBsZWdhY3kgZHJpdmVycy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNhX3ZpcnRfdG9fYnVzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCit7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpdmlydF90b19waHlzKGFkZHJlc3MpOworfQorI2RlZmluZSBpc2FfcGFnZV90b19idXMocGFnZSkJKCh1bnNpZ25lZCBpbnQpcGFnZV90b19waHlzKHBhZ2UpKQorI2RlZmluZSBpc2FfYnVzX3RvX3ZpcnQJCXBoeXNfdG9fdmlydAorCisvKgorICogSG93ZXZlciBQQ0kgb25lcyBhcmUgbm90IG5lY2Vzc2FyaWx5IDE6MSBhbmQgdGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMKKyAqIGFyZSBmb3JiaWRkZW4gaW4gcG9ydGFibGUgUENJIGRyaXZlcnMuCisgKgorICogQWxsb3cgdGhlbSBvbiB4ODYgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aG91Z2guCisgKi8KKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorCisvKioKKyAqIGlvcmVtYXAgICAgIC0gICBtYXAgYnVzIG1lbW9yeSBpbnRvIENQVSBzcGFjZQorICogQG9mZnNldDogICAgYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorICogQHNpemU6ICAgICAgc2l6ZSBvZiB0aGUgcmVzb3VyY2UgdG8gbWFwCisgKgorICogaW9yZW1hcCBwZXJmb3JtcyBhIHBsYXRmb3JtIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8KKyAqIG1ha2UgYnVzIG1lbW9yeSBDUFUgYWNjZXNzaWJsZSB2aWEgdGhlIHJlYWRiL3JlYWR3L3JlYWRsL3dyaXRlYi8KKyAqIHdyaXRldy93cml0ZWwgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgbW1pbyBoZWxwZXJzLiBUaGUgcmV0dXJuZWQKKyAqIGFkZHJlc3MgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdXNhYmxlIGRpcmVjdGx5IGFzIGEgdmlydHVhbAorICogYWRkcmVzcy4KKyAqCisgKiBJZiB0aGUgYXJlYSB5b3UgYXJlIHRyeWluZyB0byBtYXAgaXMgYSBQQ0kgQkFSIHlvdSBzaG91bGQgaGF2ZSBhCisgKiBsb29rIGF0IHBjaV9pb21hcCgpLgorICovCitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7CisKKy8qCisgKiBUaGUgZGVmYXVsdCBpb3JlbWFwKCkgYmVoYXZpb3IgaXMgbm9uLWNhY2hlZDoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KKworZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworCisKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGluY2x1ZGUgImlvXzMyLmgiCiAjZWxzZQpAQCAtOTEsNyArMTg0LDcgQEAKIAogZXh0ZXJuIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2ModW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3djKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIC8qCiAgKiBlYXJseV9pb3JlbWFwKCkgYW5kIGVhcmx5X2lvdW5tYXAoKSBhcmUgZm9yIHRlbXBvcmFyeSBlYXJseSBib290LXRpbWUKQEAgLTEwMyw3ICsxOTYsNyBAQAogZXh0ZXJuIHZvaWQgX19pb21lbSAqZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKmVhcmx5X21lbXJlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgZWFybHlfaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICpmaXhfaW9yZW1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cyk7CiAKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAppbmRleCBkOGUyNDJlLi5hMjk5OTAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb18zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKQEAgLTM3LDggKzM3LDYgQEAKICAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KICAgKi8KIAotI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKLQogI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCiAjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCiAKQEAgLTUzLDkyICs1MSw2IEBACiAgKi8KICNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKIAotLyoqCi0gKgl2aXJ0X3RvX3BoeXMJLQltYXAgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwKLSAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCi0gKgotICoJVGhlIHJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MgaXMgdGhlIHBoeXNpY2FsIChDUFUpIG1hcHBpbmcgZm9yCi0gKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KLSAqCWFkZHJlc3NlcyBkaXJlY3RseSBtYXBwZWQgb3IgYWxsb2NhdGVkIHZpYSBrbWFsbG9jLgotICoKLSAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZSBidXMgbWFwcGluZ3MgZm9yIERNQSB0cmFuc2ZlcnMuIEluCi0gKglhbG1vc3QgYWxsIGNvbmNlaXZhYmxlIGNhc2VzIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGJlIHVzaW5nCi0gKgl0aGlzIGZ1bmN0aW9uCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQotewotCXJldHVybiBfX3BhKGFkZHJlc3MpOwotfQotCi0vKioKLSAqCXBoeXNfdG9fdmlydAktCW1hcCBwaHlzaWNhbCBhZGRyZXNzIHRvIHZpcnR1YWwKLSAqCUBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWFwCi0gKgotICoJVGhlIHJldHVybmVkIHZpcnR1YWwgYWRkcmVzcyBpcyBhIGN1cnJlbnQgQ1BVIG1hcHBpbmcgZm9yCi0gKgl0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4uIEl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gb24KLSAqCWFkZHJlc3NlcyB0aGF0IGhhdmUgYSBrZXJuZWwgbWFwcGluZwotICoKLSAqCVRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGJ1cyBtYXBwaW5ncyBmb3IgRE1BIHRyYW5zZmVycy4gSW4KLSAqCWFsbW9zdCBhbGwgY29uY2VpdmFibGUgY2FzZXMgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYmUgdXNpbmcKLSAqCXRoaXMgZnVuY3Rpb24KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JcmV0dXJuIF9fdmEoYWRkcmVzcyk7Ci19Ci0KLS8qCi0gKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgotICovCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAoKGRtYV9hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKLQotLyoqCi0gKiBpb3JlbWFwICAgICAtICAgbWFwIGJ1cyBtZW1vcnkgaW50byBDUFUgc3BhY2UKLSAqIEBvZmZzZXQ6ICAgIGJ1cyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKLSAqIEBzaXplOiAgICAgIHNpemUgb2YgdGhlIHJlc291cmNlIHRvIG1hcAotICoKLSAqIGlvcmVtYXAgcGVyZm9ybXMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHRvCi0gKiBtYWtlIGJ1cyBtZW1vcnkgQ1BVIGFjY2Vzc2libGUgdmlhIHRoZSByZWFkYi9yZWFkdy9yZWFkbC93cml0ZWIvCi0gKiB3cml0ZXcvd3JpdGVsIGZ1bmN0aW9ucyBhbmQgdGhlIG90aGVyIG1taW8gaGVscGVycy4gVGhlIHJldHVybmVkCi0gKiBhZGRyZXNzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVzYWJsZSBkaXJlY3RseSBhcyBhIHZpcnR1YWwKLSAqIGFkZHJlc3MuCi0gKgotICogSWYgdGhlIGFyZWEgeW91IGFyZSB0cnlpbmcgdG8gbWFwIGlzIGEgUENJIEJBUiB5b3Ugc2hvdWxkIGhhdmUgYQotICogbG9vayBhdCBwY2lfaW9tYXAoKS4KLSAqLwotZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCXVuc2lnbmVkIGxvbmcgcHJvdF92YWwpOwotCi0vKgotICogVGhlIGRlZmF1bHQgaW9yZW1hcCgpIGJlaGF2aW9yIGlzIG5vbi1jYWNoZWQ6Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7Ci19Ci0KLWV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKLQotLyoKLSAqIElTQSBJL08gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgotICovCi0jZGVmaW5lIGlzYV92aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKLSNkZWZpbmUgaXNhX3BhZ2VfdG9fYnVzIHBhZ2VfdG9fcGh5cwotI2RlZmluZSBpc2FfYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0Ci0KLS8qCi0gKiBIb3dldmVyIFBDSSBvbmVzIGFyZSBub3QgbmVjZXNzYXJpbHkgMToxIGFuZCB0aGVyZWZvcmUgdGhlc2UgaW50ZXJmYWNlcwotICogYXJlIGZvcmJpZGRlbiBpbiBwb3J0YWJsZSBQQ0kgZHJpdmVycy4KLSAqCi0gKiBBbGxvdyB0aGVtIG9uIHg4NiBmb3IgbGVnYWN5IGRyaXZlcnMsIHRob3VnaC4KLSAqLwotI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKLSNkZWZpbmUgYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZAogbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb182NC5oCmluZGV4IDU2M2MxNjIuLjI0NDA2NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaApAQCAtMTM2LDczICsxMzYsMTIgQEAKIF9fT1VUUyh3KQogX19PVVRTKGwpCiAKLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCi0KICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoX194ODZfNjRfXykKIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAotI2lmbmRlZiBfX2kzODZfXwotLyoKLSAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgotICogVGhlc2UgYXJlIHByZXR0eSB0cml2aWFsCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKLXsKLQlyZXR1cm4gX19wYShhZGRyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXJldHVybiBfX3ZhKGFkZHJlc3MpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgotICovCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAoKGRtYV9hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+CiAKLS8qCi0gKiBUaGlzIG9uZSBtYXBzIGhpZ2ggYWRkcmVzcyBkZXZpY2UgbWVtb3J5IGFuZCB0dXJucyBvZmYgY2FjaGluZyBmb3IgdGhhdCBhcmVhLgotICogaXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZCB3cml0ZSBjb21iaW5pbmcKLSAqIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgotICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCk7Ci0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpb3JlbWFwKCkgYmVoYXZpb3IgaXMgbm9uLWNhY2hlZDoKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKLX0KLQotZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwotCi1leHRlcm4gdm9pZCBfX2lvbWVtICpmaXhfaW9yZW1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cyk7Ci0KLS8qCi0gKiBJU0EgSS9PIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KLSAqLwotI2RlZmluZSBpc2FfdmlydF90b19idXMgdmlydF90b19waHlzCi0jZGVmaW5lIGlzYV9wYWdlX3RvX2J1cyBwYWdlX3RvX3BoeXMKLSNkZWZpbmUgaXNhX2J1c190b192aXJ0IHBoeXNfdG9fdmlydAotCi0vKgotICogSG93ZXZlciBQQ0kgb25lcyBhcmUgbm90IG5lY2Vzc2FyaWx5IDE6MSBhbmQgdGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMKLSAqIGFyZSBmb3JiaWRkZW4gaW4gcG9ydGFibGUgUENJIGRyaXZlcnMuCi0gKgotICogQWxsb3cgdGhlbSBvbiB4ODYgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aG91Z2guCi0gKi8KLSNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCi0jZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAotCiB2b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKIHZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCmluZGV4IDdhMWY0NGEuLjU5Y2I0YTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTExNCwzOCArMTE0LDE2IEBACiBleHRlcm4gaW50IG5yX2lvYXBpY3M7CiBleHRlcm4gaW50IG5yX2lvYXBpY19yZWdpc3RlcnNbTUFYX0lPX0FQSUNTXTsKIAotLyoKLSAqIE1QLUJJT1MgaXJxIGNvbmZpZ3VyYXRpb24gdGFibGUgc3RydWN0dXJlczoKLSAqLwotCiAjZGVmaW5lIE1QX01BWF9JT0FQSUNfUElOIDEyNwogCi1zdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyB7Ci0JdW5zaWduZWQgbG9uZyBtcF9hcGljYWRkcjsKLQl1bnNpZ25lZCBpbnQgbXBfYXBpY2lkOwotCXVuc2lnbmVkIGNoYXIgbXBfdHlwZTsKLQl1bnNpZ25lZCBjaGFyIG1wX2FwaWN2ZXI7Ci0JdW5zaWduZWQgY2hhciBtcF9mbGFnczsKLX07Ci0KLXN0cnVjdCBtcF9jb25maWdfaW50c3JjIHsKLQl1bnNpZ25lZCBpbnQgbXBfZHN0YXBpYzsKLQl1bnNpZ25lZCBjaGFyIG1wX3R5cGU7Ci0JdW5zaWduZWQgY2hhciBtcF9pcnF0eXBlOwotCXVuc2lnbmVkIHNob3J0IG1wX2lycWZsYWc7Ci0JdW5zaWduZWQgY2hhciBtcF9zcmNidXM7Ci0JdW5zaWduZWQgY2hhciBtcF9zcmNidXNpcnE7Ci0JdW5zaWduZWQgY2hhciBtcF9kc3RpcnE7Ci19OwotCiAvKiBJL08gQVBJQyBlbnRyaWVzICovCi1leHRlcm4gc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOworZXh0ZXJuIHN0cnVjdCBtcGNfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKIAogLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KIGV4dGVybiBpbnQgbXBfaXJxX2VudHJpZXM7CiAKIC8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotZXh0ZXJuIHN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKK2V4dGVybiBzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CiAKIC8qIG5vbi0wIGlmIGRlZmF1bHQgKHRhYmxlLWxlc3MpIE1QIGNvbmZpZ3VyYXRpb24gKi8KIGV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKQEAgLTE2NSwxNSArMTQzLDYgQEAKIC8qIDEgaWYgdGhlIHRpbWVyIElSUSB1c2VzIHRoZSAnODI1OUEgVmlydHVhbCBXaXJlJyBtb2RlICovCiBleHRlcm4gaW50IHRpbWVyX3Rocm91Z2hfODI1OTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfaW9hcGljX3NldHVwKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCW5vaW9hcGljcXVpcmsgPSAxOwotCW5vaW9hcGljcmVyb3V0ZSA9IC0xOwotI2VuZGlmCi0Jc2tpcF9pb2FwaWNfc2V0dXAgPSAxOwotfQotCiAvKgogICogSWYgd2UgdXNlIHRoZSBJTy1BUElDIGZvciBJUlEgcm91dGluZywgZGlzYWJsZSBhdXRvbWF0aWMKICAqIGFzc2lnbm1lbnQgb2YgUENJIElSUSdzLgpAQCAtMjAwLDYgKzE2OSwxMiBAQAogCiBleHRlcm4gdm9pZCBwcm9iZV9ucl9pcnFzX2dzaSh2b2lkKTsKIAorZXh0ZXJuIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWMsIGludCBpcnEsCisJCQkgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAorCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKTsKK2V4dGVybiB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwKKwkJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKTsKICNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCiAjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIDAKIHN0YXRpYyBjb25zdCBpbnQgdGltZXJfdGhyb3VnaF84MjU5ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXBpLmgKaW5kZXggYzc0NWEzMC4uMGI3MjI4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXBpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXBpLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9BU01fWDg2X0lQSV9ICiAjZGVmaW5lIF9BU01fWDg2X0lQSV9ICiAKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwogLyoKICAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgogICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKQEAgLTU1LDggKzU3LDggQEAKIAkJY3B1X3JlbGF4KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NlbmRfSVBJX3Nob3J0Y3V0KHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvciwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fZGVmYXVsdF9zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGludCBkZXN0KQogewogCS8qCiAJICogU3VidGxlLiBJbiB0aGUgY2FzZSBvZiB0aGUgJ25ldmVyIGRvIGRvdWJsZSB3cml0ZXMnIHdvcmthcm91bmQKQEAgLTg3LDggKzg5LDggQEAKICAqIFRoaXMgaXMgdXNlZCB0byBzZW5kIGFuIElQSSB3aXRoIG5vIHNob3J0aGFuZCBub3RhdGlvbiAodGhlIGRlc3RpbmF0aW9uIGlzCiAgKiBzcGVjaWZpZWQgaW4gYml0cyA1NiB0byA2MyBvZiB0aGUgSUNSKS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fc2VuZF9JUElfZGVzdF9maWVsZCh1bnNpZ25lZCBpbnQgbWFzaywgaW50IHZlY3RvciwKLQkJCQkJIHVuc2lnbmVkIGludCBkZXN0KQorc3RhdGljIGlubGluZSB2b2lkCisgX19kZWZhdWx0X3NlbmRfSVBJX2Rlc3RfZmllbGQodW5zaWduZWQgaW50IG1hc2ssIGludCB2ZWN0b3IsIHVuc2lnbmVkIGludCBkZXN0KQogewogCXVuc2lnbmVkIGxvbmcgY2ZnOwogCkBAIC0xMTcsNDEgKzExOSw0NCBAQAogCW5hdGl2ZV9hcGljX21lbV93cml0ZShBUElDX0lDUiwgY2ZnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX21hc2tfc2VxdWVuY2UoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkJCSAgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX3NlcXVlbmNlX3BoeXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCQkgaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9waHlzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJCSBpbnQgdmVjdG9yKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9sb2dpY2FsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJCSBpbnQgdmVjdG9yKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX2xvZ2ljYWwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCQkJIGludCB2ZWN0b3IpOwogCi0JLyoKLQkgKiBIYWNrLiBUaGUgY2x1c3RlcmVkIEFQSUMgYWRkcmVzc2luZyBtb2RlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZAotCSAqIHRvIGFuIGFyYml0cmFyeSBtYXNrLCBzbyBJIGRvIGEgdW5pY2FzdCB0byBlYWNoIENQVSBpbnN0ZWFkLgotCSAqIC0gbWJsaWdoCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKLQkJX19zZW5kX0lQSV9kZXN0X2ZpZWxkKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCi0JCQkJICAgICAgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisvKiBBdm9pZCBpbmNsdWRlIGhlbGwgKi8KKyNkZWZpbmUgTk1JX1ZFQ1RPUiAweDAyCisKK2V4dGVybiBpbnQgbm9fYnJvYWRjYXN0OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWZhdWx0X2xvY2FsX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwlpZiAobm9fYnJvYWRjYXN0IHx8IHZlY3RvciA9PSBOTUlfVkVDVE9SKQorCQlhcGljLT5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworCWVsc2UKKwkJX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExCVVQsIHZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKLQkJCQkJICAgIGludCB2ZWN0b3IpCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWZhdWx0X2xvY2FsX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHF1ZXJ5X2NwdTsKLQl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBTZWUgSGFjayBjb21tZW50IGFib3ZlICovCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9fc2VuZF9JUElfZGVzdF9maWVsZCgKLQkJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJCXZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJaWYgKG5vX2Jyb2FkY2FzdCB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKKwkJYXBpYy0+c2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7CisJZWxzZQorCQlfX2RlZmF1bHRfc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTElOQywgdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2xvZ2ljYWwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCQkgaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBkZWZhdWx0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3Rvcik7CitleHRlcm4gdm9pZCBkZWZhdWx0X3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKTsKKyNlbmRpZgorCisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fWDg2X0lQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDU5MjY4OGUuLjEwN2ViMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCkBAIC0zNiw5ICszNiwxMSBAQAogZXh0ZXJuIHZvaWQgZml4dXBfaXJxcyh2b2lkKTsKICNlbmRpZgogCi1leHRlcm4gdW5zaWduZWQgaW50IGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBpbml0X0lSUSh2b2lkKTsKIGV4dGVybiB2b2lkIG5hdGl2ZV9pbml0X0lSUSh2b2lkKTsKK2V4dGVybiBib29sIGhhbmRsZV9pcnEodW5zaWduZWQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogLyogSW50ZXJydXB0IHZlY3RvciBtYW5hZ2VtZW50ICovCiBleHRlcm4gREVDTEFSRV9CSVRNQVAodXNlZF92ZWN0b3JzLCBOUl9WRUNUT1JTKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVncy5oCmluZGV4IDg5Yzg5OGEuLjc3ODQzMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApAQCAtMSw1ICsxLDMxIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJpcnFfcmVnc18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiaXJxX3JlZ3NfNjQuaCIKLSNlbmRpZgorLyoKKyAqIFBlci1jcHUgY3VycmVudCBmcmFtZSBwb2ludGVyIC0gdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbiBmcmFtZSBvbgorICogdGhlIHN0YWNrLCBzdG9yZWQgaW4gdGhlIHBlci1jcHUgYXJlYS4KKyAqCisgKiBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAZ29vcC5vcmc+CisgKi8KKyNpZm5kZWYgX0FTTV9YODZfSVJRX1JFR1NfSAorI2RlZmluZSBfQVNNX1g4Nl9JUlFfUkVHU19ICisKKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisKKyNkZWZpbmUgQVJDSF9IQVNfT1dOX0lSUV9SRUdTCisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcHRfcmVncyAqLCBpcnFfcmVncyk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0X3JlZ3MgKmdldF9pcnFfcmVncyh2b2lkKQoreworCXJldHVybiBwZXJjcHVfcmVhZChpcnFfcmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0X3JlZ3MgKnNldF9pcnFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3X3JlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOworCisJb2xkX3JlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKwlwZXJjcHVfd3JpdGUoaXJxX3JlZ3MsIG5ld19yZWdzKTsKKworCXJldHVybiBvbGRfcmVnczsKK30KKworI2VuZGlmIC8qIF9BU01fWDg2X0lSUV9SRUdTXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmFmZDc0Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZWdzXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogUGVyLWNwdSBjdXJyZW50IGZyYW1lIHBvaW50ZXIgLSB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3QgZXhjZXB0aW9uIGZyYW1lIG9uCi0gKiB0aGUgc3RhY2ssIHN0b3JlZCBpbiB0aGUgcGVyLWNwdSBhcmVhLgotICoKLSAqIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUBnb29wLm9yZz4KLSAqLwotI2lmbmRlZiBfQVNNX1g4Nl9JUlFfUkVHU18zMl9ICi0jZGVmaW5lIF9BU01fWDg2X0lSUV9SRUdTXzMyX0gKLQotI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KLQotI2RlZmluZSBBUkNIX0hBU19PV05fSVJRX1JFR1MKLQotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzICosIGlycV9yZWdzKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRfcmVncyAqZ2V0X2lycV9yZWdzKHZvaWQpCi17Ci0JcmV0dXJuIHg4Nl9yZWFkX3BlcmNwdShpcnFfcmVncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHB0X3JlZ3MgKnNldF9pcnFfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3X3JlZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOwotCi0Jb2xkX3JlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKLQl4ODZfd3JpdGVfcGVyY3B1KGlycV9yZWdzLCBuZXdfcmVncyk7Ci0KLQlyZXR1cm4gb2xkX3JlZ3M7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9JUlFfUkVHU18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlZ3NfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkOWMwYi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVnc182NC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lycV9yZWdzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAppbmRleCBmN2ZmNjUwLi44YTI4NWYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKQEAgLTEsNDcgKzEsNjkgQEAKICNpZm5kZWYgX0FTTV9YODZfSVJRX1ZFQ1RPUlNfSAogI2RlZmluZSBfQVNNX1g4Nl9JUlFfVkVDVE9SU19ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisvKgorICogTGludXggSVJRIHZlY3RvciBsYXlvdXQuCisgKgorICogVGhlcmUgYXJlIDI1NiBJRFQgZW50cmllcyAocGVyIENQVSAtIGVhY2ggZW50cnkgaXMgOCBieXRlcykgd2hpY2ggY2FuCisgKiBiZSBkZWZpbmVkIGJ5IExpbnV4LiBUaGV5IGFyZSB1c2VkIGFzIGEganVtcCB0YWJsZSBieSB0aGUgQ1BVIHdoZW4gYQorICogZ2l2ZW4gdmVjdG9yIGlzIHRyaWdnZXJlZCAtIGJ5IGEgQ1BVLWV4dGVybmFsLCBDUFUtaW50ZXJuYWwgb3IKKyAqIHNvZnR3YXJlLXRyaWdnZXJlZCBldmVudC4KKyAqCisgKiBMaW51eCBzZXRzIHRoZSBrZXJuZWwgY29kZSBhZGRyZXNzIGVhY2ggZW50cnkganVtcHMgdG8gZWFybHkgZHVyaW5nCisgKiBib290dXAsIGFuZCBuZXZlciBjaGFuZ2VzIHRoZW0uIFRoaXMgaXMgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZQorICogSURUIGVudHJpZXM6CisgKgorICogIFZlY3RvcnMgICAwIC4uLiAgMzEgOiBzeXN0ZW0gdHJhcHMgYW5kIGV4Y2VwdGlvbnMgLSBoYXJkY29kZWQgZXZlbnRzCisgKiAgVmVjdG9ycyAgMzIgLi4uIDEyNyA6IGRldmljZSBpbnRlcnJ1cHRzCisgKiAgVmVjdG9yICAxMjggICAgICAgICA6IGxlZ2FjeSBpbnQ4MCBzeXNjYWxsIGludGVyZmFjZQorICogIFZlY3RvcnMgMTI5IC4uLiAyMzcgOiBkZXZpY2UgaW50ZXJydXB0cworICogIFZlY3RvcnMgMjM4IC4uLiAyNTUgOiBzcGVjaWFsIGludGVycnVwdHMKKyAqCisgKiA2NC1iaXQgeDg2IGhhcyBwZXIgQ1BVIElEVCB0YWJsZXMsIDMyLWJpdCBoYXMgb25lIHNoYXJlZCBJRFQgdGFibGUuCisgKgorICogVGhpcyBmaWxlIGVudW1lcmF0ZXMgdGhlIGV4YWN0IGxheW91dCBvZiB0aGVtOgorICovCiAKLSNkZWZpbmUgTk1JX1ZFQ1RPUgkJMHgwMgorI2RlZmluZSBOTUlfVkVDVE9SCQkJMHgwMgogCiAvKgogICogSURUIHZlY3RvcnMgdXNhYmxlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBzdGFydAogICogYXQgMHgyMDoKICAqLwotI2RlZmluZSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IJMHgyMAorI2RlZmluZSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IJCTB4MjAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIFNZU0NBTExfVkVDVE9SCQkweDgwCisjIGRlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJCTB4ODAKICNlbHNlCi0jIGRlZmluZSBJQTMyX1NZU0NBTExfVkVDVE9SCTB4ODAKKyMgZGVmaW5lIElBMzJfU1lTQ0FMTF9WRUNUT1IJCTB4ODAKICNlbmRpZgogCiAvKgogICogUmVzZXJ2ZSB0aGUgbG93ZXN0IHVzYWJsZSBwcmlvcml0eSBsZXZlbCAweDIwIC0gMHgyZiBmb3IgdHJpZ2dlcmluZwogICogY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uLgogICovCi0jZGVmaW5lIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgorI2RlZmluZSBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUgkJRklSU1RfRVhURVJOQUxfVkVDVE9SCiAKIC8qCiAgKiBWZWN0b3JzIDB4MzAtMHgzZiBhcmUgdXNlZCBmb3IgSVNBIGludGVycnVwdHMuCiAgKi8KLSNkZWZpbmUgSVJRMF9WRUNUT1IJCShGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyAweDEwKQotI2RlZmluZSBJUlExX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMSkKLSNkZWZpbmUgSVJRMl9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDIpCi0jZGVmaW5lIElSUTNfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAzKQotI2RlZmluZSBJUlE0X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgNCkKLSNkZWZpbmUgSVJRNV9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDUpCi0jZGVmaW5lIElSUTZfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA2KQotI2RlZmluZSBJUlE3X1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgNykKLSNkZWZpbmUgSVJROF9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDgpCi0jZGVmaW5lIElSUTlfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyA5KQotI2RlZmluZSBJUlExMF9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDEwKQotI2RlZmluZSBJUlExMV9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDExKQotI2RlZmluZSBJUlExMl9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDEyKQotI2RlZmluZSBJUlExM19WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDEzKQotI2RlZmluZSBJUlExNF9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDE0KQotI2RlZmluZSBJUlExNV9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDE1KQorI2RlZmluZSBJUlEwX1ZFQ1RPUgkJCShGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyAweDEwKQorCisjZGVmaW5lIElSUTFfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDEpCisjZGVmaW5lIElSUTJfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDIpCisjZGVmaW5lIElSUTNfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDMpCisjZGVmaW5lIElSUTRfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDQpCisjZGVmaW5lIElSUTVfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDUpCisjZGVmaW5lIElSUTZfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDYpCisjZGVmaW5lIElSUTdfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDcpCisjZGVmaW5lIElSUThfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDgpCisjZGVmaW5lIElSUTlfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDkpCisjZGVmaW5lIElSUTEwX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArIDEwKQorI2RlZmluZSBJUlExMV9WRUNUT1IJCQkoSVJRMF9WRUNUT1IgKyAxMSkKKyNkZWZpbmUgSVJRMTJfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgMTIpCisjZGVmaW5lIElSUTEzX1ZFQ1RPUgkJCShJUlEwX1ZFQ1RPUiArIDEzKQorI2RlZmluZSBJUlExNF9WRUNUT1IJCQkoSVJRMF9WRUNUT1IgKyAxNCkKKyNkZWZpbmUgSVJRMTVfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgMTUpCiAKIC8qCiAgKiBTcGVjaWFsIElSUSB2ZWN0b3JzIHVzZWQgYnkgdGhlIFNNUCBhcmNoaXRlY3R1cmUsIDB4ZjAtMHhmZgpAQCAtNDksMTE5ICs3MSw5OCBAQAogICogIHNvbWUgb2YgdGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSAncmFyZScsIHRoZXkgYXJlIG1lcmdlZAogICogIGludG8gYSBzaW5nbGUgdmVjdG9yIChDQUxMX0ZVTkNUSU9OX1ZFQ1RPUikgdG8gc2F2ZSB2ZWN0b3Igc3BhY2UuCiAgKiAgVExCLCByZXNjaGVkdWxlIGFuZCBsb2NhbCBBUElDIHZlY3RvcnMgYXJlIHBlcmZvcm1hbmNlLWNyaXRpY2FsLgotICoKLSAqICBWZWN0b3JzIDB4ZjAtMHhmYSBhcmUgZnJlZSAocmVzZXJ2ZWQgZm9yIGZ1dHVyZSBMaW51eCB1c2UpLgogICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCi0jIGRlZmluZSBTUFVSSU9VU19BUElDX1ZFQ1RPUgkJMHhmZgotIyBkZWZpbmUgRVJST1JfQVBJQ19WRUNUT1IJCTB4ZmUKLSMgZGVmaW5lIElOVkFMSURBVEVfVExCX1ZFQ1RPUgkJMHhmZAotIyBkZWZpbmUgUkVTQ0hFRFVMRV9WRUNUT1IJCTB4ZmMKLSMgZGVmaW5lIENBTExfRlVOQ1RJT05fVkVDVE9SCQkweGZiCi0jIGRlZmluZSBDQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IJMHhmYQotIyBkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkJMHhmMAotCi0jZWxzZQogCiAjZGVmaW5lIFNQVVJJT1VTX0FQSUNfVkVDVE9SCQkweGZmCisvKgorICogU2FuaXR5IGNoZWNrCisgKi8KKyNpZiAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgwRikgIT0gMHgwRikKKyMgZXJyb3IgU1BVUklPVVNfQVBJQ19WRUNUT1IgZGVmaW5pdGlvbiBlcnJvcgorI2VuZGlmCisKICNkZWZpbmUgRVJST1JfQVBJQ19WRUNUT1IJCTB4ZmUKICNkZWZpbmUgUkVTQ0hFRFVMRV9WRUNUT1IJCTB4ZmQKICNkZWZpbmUgQ0FMTF9GVU5DVElPTl9WRUNUT1IJCTB4ZmMKICNkZWZpbmUgQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SCTB4ZmIKICNkZWZpbmUgVEhFUk1BTF9BUElDX1ZFQ1RPUgkJMHhmYQotI2RlZmluZSBUSFJFU0hPTERfQVBJQ19WRUNUT1IJCTB4ZjkKLSNkZWZpbmUgVVZfQkFVX01FU1NBR0UJCQkweGY4Ci0jZGVmaW5lIElOVkFMSURBVEVfVExCX1ZFQ1RPUl9FTkQJMHhmNwotI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQJMHhmMAkvKiBmMC1mNyB1c2VkIGZvciBUTEIgZmx1c2ggKi8KIAotI2RlZmluZSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUwk4Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKiAweGY4IC0gMHhmOSA6IGZyZWUgKi8KKyNlbHNlCisjIGRlZmluZSBUSFJFU0hPTERfQVBJQ19WRUNUT1IJCTB4ZjkKKyMgZGVmaW5lIFVWX0JBVV9NRVNTQUdFCQkJMHhmOAogI2VuZGlmCiAKKy8qIGYwLWY3IHVzZWQgZm9yIHNwcmVhZGluZyBvdXQgVExCIGZsdXNoZXM6ICovCisjZGVmaW5lIElOVkFMSURBVEVfVExCX1ZFQ1RPUl9FTkQJMHhmNworI2RlZmluZSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQJMHhmMAorI2RlZmluZSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUwkgICA4CisKIC8qCiAgKiBMb2NhbCBBUElDIHRpbWVyIElSUSB2ZWN0b3IgaXMgb24gYSBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWwsCiAgKiB0byB3b3JrIGFyb3VuZCB0aGUgJ2xvc3QgbG9jYWwgaW50ZXJydXB0IGlmIG1vcmUgdGhhbiAyIElSUQogICogc291cmNlcyBwZXIgbGV2ZWwnIGVycmF0YS4KICAqLwotI2RlZmluZSBMT0NBTF9USU1FUl9WRUNUT1IJMHhlZgorI2RlZmluZSBMT0NBTF9USU1FUl9WRUNUT1IJCTB4ZWYKKworLyoKKyAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0IHZlY3RvcjoKKyAqLworI2RlZmluZSBMT0NBTF9QRVJGX1ZFQ1RPUgkJMHhlZQogCiAvKgogICogRmlyc3QgQVBJQyB2ZWN0b3IgYXZhaWxhYmxlIHRvIGRyaXZlcnM6ICh2ZWN0b3JzIDB4MzAtMHhlZSkgd2UKICAqIHN0YXJ0IGF0IDB4MzEoMHg0MSkgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuIHByaW9yaXR5CiAgKiBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKICAqLwotI2RlZmluZSBGSVJTVF9ERVZJQ0VfVkVDVE9SCShJUlExNV9WRUNUT1IgKyAyKQorI2RlZmluZSBGSVJTVF9ERVZJQ0VfVkVDVE9SCQkoSVJRMTVfVkVDVE9SICsgMikKIAotI2RlZmluZSBOUl9WRUNUT1JTCQkyNTYKKyNkZWZpbmUgTlJfVkVDVE9SUwkJCSAyNTYKIAotI2RlZmluZSBGUFVfSVJRCQkJMTMKKyNkZWZpbmUgRlBVX0lSUQkJCQkgIDEzCiAKLSNkZWZpbmUJRklSU1RfVk04Nl9JUlEJCTMKLSNkZWZpbmUgTEFTVF9WTTg2X0lSUQkJMTUKLSNkZWZpbmUgaW52YWxpZF92bTg2X2lycShpcnEpCSgoaXJxKSA8IDMgfHwgKGlycSkgPiAxNSkKKyNkZWZpbmUJRklSU1RfVk04Nl9JUlEJCQkgICAzCisjZGVmaW5lIExBU1RfVk04Nl9JUlEJCQkgIDE1CiAKLSNkZWZpbmUgTlJfSVJRU19MRUdBQ1kJCTE2Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9WT1lBR0VSKQotCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCi0jIGlmIE5SX0NQVVMgPCBNQVhfSU9fQVBJQ1MKLSMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICogTlJfQ1BVUykpCi0jIGVsc2UKLSMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICogTUFYX0lPX0FQSUNTKSkKLSMgZW5kaWYKLSNlbHNlCi0jIGlmICg4ICogTlJfQ1BVUykgPiAoMzIgKiBNQVhfSU9fQVBJQ1MpCi0jICBkZWZpbmUgTlJfSVJRUyAoTlJfVkVDVE9SUyArICg4ICogTlJfQ1BVUykpCi0jIGVsc2UKLSMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICogTUFYX0lPX0FQSUNTKSkKLSMgZW5kaWYKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIGludCBpbnZhbGlkX3ZtODZfaXJxKGludCBpcnEpCit7CisJcmV0dXJuIGlycSA8IEZJUlNUX1ZNODZfSVJRIHx8IGlycSA+IExBU1RfVk04Nl9JUlE7Cit9CiAjZW5kaWYKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2X1ZPWUFHRVIpCisvKgorICogU2l6ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0cy4KKyAqCisgKiBJZiB0aGUgaXJxX2Rlc2NbXSBhcnJheSBoYXMgYSBzcGFyc2UgbGF5b3V0LCB3ZSBjYW4gc2l6ZSB0aGluZ3MKKyAqIGdlbmVyb3VzbHkgLSBpdCBzY2FsZXMgdXAgbGluZWFybHkgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcywKKyAqIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgSU8tQVBJQ3MsIHdoaWNoZXZlciBpcyBoaWdoZXIuCisgKgorICogSW4gb3RoZXIgY2FzZXMgd2Ugc2l6ZSBtb3JlIGNvbnNlcnZhdGl2ZWx5LCB0byBub3QgY3JlYXRlIHRvbyBsYXJnZQorICogc3RhdGljIGFycmF5cy4KKyAqLwogCi0jIGRlZmluZSBOUl9JUlFTCQkyMjQKKyNkZWZpbmUgTlJfSVJRU19MRUdBQ1kJCQkgIDE2CiAKLSNlbHNlIC8qIElPX0FQSUMgfHwgVk9ZQUdFUiAqLworI2RlZmluZSBDUFVfVkVDVE9SX0xJTUlUCQkoICA4ICogTlJfQ1BVUyAgICAgICkKKyNkZWZpbmUgSU9fQVBJQ19WRUNUT1JfTElNSVQJCSggMzIgKiBNQVhfSU9fQVBJQ1MgKQogCi0jIGRlZmluZSBOUl9JUlFTCQkxNgotCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisjIGlmZGVmIENPTkZJR19TUEFSU0VfSVJRCisjICBkZWZpbmUgTlJfSVJRUwkJCQkJXAorCShDUFVfVkVDVE9SX0xJTUlUID4gSU9fQVBJQ19WRUNUT1JfTElNSVQgPwlcCisJCShOUl9WRUNUT1JTICsgQ1BVX1ZFQ1RPUl9MSU1JVCkgIDoJXAorCQkoTlJfVkVDVE9SUyArIElPX0FQSUNfVkVDVE9SX0xJTUlUKSkKKyMgZWxzZQorIyAgaWYgTlJfQ1BVUyA8IE1BWF9JT19BUElDUworIyAgIGRlZmluZSBOUl9JUlFTIAkJCShOUl9WRUNUT1JTICsgNCpDUFVfVkVDVE9SX0xJTUlUKQorIyAgZWxzZQorIyAgIGRlZmluZSBOUl9JUlFTCQkJKE5SX1ZFQ1RPUlMgKyBJT19BUElDX1ZFQ1RPUl9MSU1JVCkKKyMgIGVuZGlmCisjIGVuZGlmCisjZWxzZSAvKiAhQ09ORklHX1g4Nl9JT19BUElDOiAqLworIyBkZWZpbmUgTlJfSVJRUwkJCU5SX0lSUVNfTEVHQUNZCiAjZW5kaWYKIAotLyogVm95YWdlciBzcGVjaWZpYyBkZWZpbmVzICovCi0vKiBUaGVzZSBkZWZpbmUgdGhlIENQSXMgd2UgdXNlIGluIGxpbnV4ICovCi0jZGVmaW5lIFZJQ19DUElfTEVWRUwwCQkJMAotI2RlZmluZSBWSUNfQ1BJX0xFVkVMMQkJCTEKLS8qIG5vdyB0aGUgZmFrZSBDUElzICovCi0jZGVmaW5lIFZJQ19USU1FUl9DUEkJCQkyCi0jZGVmaW5lIFZJQ19JTlZBTElEQVRFX0NQSQkJMwotI2RlZmluZSBWSUNfUkVTQ0hFRFVMRV9DUEkJCTQKLSNkZWZpbmUgVklDX0VOQUJMRV9JUlFfQ1BJCQk1Ci0jZGVmaW5lIFZJQ19DQUxMX0ZVTkNUSU9OX0NQSQkJNgotI2RlZmluZSBWSUNfQ0FMTF9GVU5DVElPTl9TSU5HTEVfQ1BJCTcKLQotLyogTm93IHRoZSBRSUMgQ1BJczogIFNpbmNlIHdlIGRvbid0IG5lZWQgdGhlIHR3byBpbml0aWFsIGxldmVscywKLSAqIHRoZXNlIGFyZSAyIGxlc3MgdGhhbiB0aGUgVklDIENQSXMgKi8KLSNkZWZpbmUgUUlDX0NQSV9PRkZTRVQJCQkxCi0jZGVmaW5lIFFJQ19USU1FUl9DUEkJCQkoVklDX1RJTUVSX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQotI2RlZmluZSBRSUNfSU5WQUxJREFURV9DUEkJCShWSUNfSU5WQUxJREFURV9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLSNkZWZpbmUgUUlDX1JFU0NIRURVTEVfQ1BJCQkoVklDX1JFU0NIRURVTEVfQ1BJIC0gUUlDX0NQSV9PRkZTRVQpCi0jZGVmaW5lIFFJQ19FTkFCTEVfSVJRX0NQSQkJKFZJQ19FTkFCTEVfSVJRX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQotI2RlZmluZSBRSUNfQ0FMTF9GVU5DVElPTl9DUEkJCShWSUNfQ0FMTF9GVU5DVElPTl9DUEkgLSBRSUNfQ1BJX09GRlNFVCkKLSNkZWZpbmUgUUlDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSQkoVklDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSSAtIFFJQ19DUElfT0ZGU0VUKQotCi0jZGVmaW5lIFZJQ19TVEFSVF9GQUtFX0NQSQkJVklDX1RJTUVSX0NQSQotI2RlZmluZSBWSUNfRU5EX0ZBS0VfQ1BJCQlWSUNfQ0FMTF9GVU5DVElPTl9TSU5HTEVfQ1BJCi0KLS8qIHRoaXMgaXMgdGhlIFNZU19JTlQgQ1BJLiAqLwotI2RlZmluZSBWSUNfU1lTX0lOVAkJCTgKLSNkZWZpbmUgVklDX0NNTl9JTlQJCQkxNQotCi0vKiBUaGlzIGlzIHRoZSBib290IENQSSBmb3IgYWx0ZXJuYXRlIHByb2Nlc3NvcnMuICBJdCBnZXRzIG92ZXJ3cml0dGVuCi0gKiBieSB0aGUgYWJvdmUgb25jZSB0aGUgc3lzdGVtIGhhcyBhY3RpdmF0ZWQgYWxsIGF2YWlsYWJsZSBwcm9jZXNzb3JzICovCi0jZGVmaW5lIFZJQ19DUFVfQk9PVF9DUEkJCVZJQ19DUElfTEVWRUwwCi0jZGVmaW5lIFZJQ19DUFVfQk9PVF9FUlJBVEFfQ1BJCQkoVklDX0NQSV9MRVZFTDAgKyA4KQotCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9JUlFfVkVDVE9SU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaAppbmRleCBjNjFkOGIyLi4wY2ViNmQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmgKQEAgLTksMjMgKzksOCBAQAogIyBkZWZpbmUgUEFHRVNfTlIJCTQKICNlbHNlCiAjIGRlZmluZSBQQV9DT05UUk9MX1BBR0UJMAotIyBkZWZpbmUgVkFfQ09OVFJPTF9QQUdFCTEKLSMgZGVmaW5lIFBBX1BHRAkJCTIKLSMgZGVmaW5lIFZBX1BHRAkJCTMKLSMgZGVmaW5lIFBBX1BVRF8wCQk0Ci0jIGRlZmluZSBWQV9QVURfMAkJNQotIyBkZWZpbmUgUEFfUE1EXzAJCTYKLSMgZGVmaW5lIFZBX1BNRF8wCQk3Ci0jIGRlZmluZSBQQV9QVEVfMAkJOAotIyBkZWZpbmUgVkFfUFRFXzAJCTkKLSMgZGVmaW5lIFBBX1BVRF8xCQkxMAotIyBkZWZpbmUgVkFfUFVEXzEJCTExCi0jIGRlZmluZSBQQV9QTURfMQkJMTIKLSMgZGVmaW5lIFZBX1BNRF8xCQkxMwotIyBkZWZpbmUgUEFfUFRFXzEJCTE0Ci0jIGRlZmluZSBWQV9QVEVfMQkJMTUKLSMgZGVmaW5lIFBBX1RBQkxFX1BBR0UJCTE2Ci0jIGRlZmluZSBQQUdFU19OUgkJMTcKKyMgZGVmaW5lIFBBX1RBQkxFX1BBR0UJCTEKKyMgZGVmaW5lIFBBR0VTX05SCQkyCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTE1Nyw5ICsxNDIsOSBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpIEFUVFJJQl9OT1JFVDsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBBUkNIX0hBU19LSU1BR0VfQVJDSAogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogc3RydWN0IGtpbWFnZV9hcmNoIHsKIAlwZ2RfdCAqcGdkOwogI2lmZGVmIENPTkZJR19YODZfUEFFCkBAIC0xNjksNiArMTU0LDEyIEBACiAJcHRlX3QgKnB0ZTA7CiAJcHRlX3QgKnB0ZTE7CiB9OworI2Vsc2UKK3N0cnVjdCBraW1hZ2VfYXJjaCB7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7Cit9OwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggODg2Yzk0MC4uZGMzZjZjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgX19LVk1fSEFWRV9ERVZJQ0VfQVNTSUdOTUVOVAogI2RlZmluZSBfX0tWTV9IQVZFX01TSQogI2RlZmluZSBfX0tWTV9IQVZFX1VTRVJfTk1JCisjZGVmaW5lIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKIAogLyogQXJjaGl0ZWN0dXJhbCBpbnRlcnJ1cHQgbGluZSBjb3VudC4gKi8KICNkZWZpbmUgS1ZNX05SX0lOVEVSUlVQVFMgMjU2CkBAIC0yMTIsNyArMjEzLDMwIEBACiAJX19zNjQgY291bnRfbG9hZF90aW1lOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworCV9fdTMyIGV4Y2VwdGlvbjsKKwlfX3UzMiBwYWQ7CisJX191NjQgcGM7CisJX191NjQgZHI2OworCV9fdTY0IGRyNzsKK307CisKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1VTRV9TV19CUAkJMHgwMDAxMDAwMAorI2RlZmluZSBLVk1fR1VFU1REQkdfVVNFX0hXX0JQCQkweDAwMDIwMDAwCisjZGVmaW5lIEtWTV9HVUVTVERCR19JTkpFQ1RfREIJCTB4MDAwNDAwMDAKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0lOSkVDVF9CUAkJMHgwMDA4MDAwMAorCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKKwlfX3U2NCBkZWJ1Z3JlZ1s4XTsKK307CisKIHN0cnVjdCBrdm1fcGl0X3N0YXRlIHsKIAlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOwogfTsKKworc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIHsKKwlfX3U4IHBpdF9yZWluamVjdDsKKwlfX3U4IHJlc2VydmVkWzMxXTsKK307CiAjZW5kaWYgLyogX0FTTV9YODZfS1ZNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDczMDg0M2QuLmYwZmFmNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wdmNsb2NrLWFiaS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CiAKICNkZWZpbmUgS1ZNX01BWF9WQ1BVUyAxNgogI2RlZmluZSBLVk1fTUVNT1JZX1NMT1RTIDMyCkBAIC0xMzQsMTEgKzEzNSwxOCBAQAogCiAjZGVmaW5lIEtWTV9OUl9NRU1fT0JKUyA0MAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLQlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nIGJwWzRdOwotCWludCBzaW5nbGVzdGVwOwotfTsKKyNkZWZpbmUgS1ZNX05SX0RCX1JFR1MJNAorCisjZGVmaW5lIERSNl9CRAkJKDEgPDwgMTMpCisjZGVmaW5lIERSNl9CUwkJKDEgPDwgMTQpCisjZGVmaW5lIERSNl9GSVhFRF8xCTB4ZmZmZjBmZjAKKyNkZWZpbmUgRFI2X1ZPTEFUSUxFCTB4MDAwMGUwMGYKKworI2RlZmluZSBEUjdfQlBfRU5fTUFTSwkweDAwMDAwMGZmCisjZGVmaW5lIERSN19HRQkJKDEgPDwgOSkKKyNkZWZpbmUgRFI3X0dECQkoMSA8PCAxMykKKyNkZWZpbmUgRFI3X0ZJWEVEXzEJMHgwMDAwMDQwMAorI2RlZmluZSBEUjdfVk9MQVRJTEUJMHhmZmZmMjNmZgogCiAvKgogICogV2UgZG9uJ3Qgd2FudCBhbGxvY2F0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbW11IGNvZGUsIHNvIHdlIHByZWFsbG9jYXRlCkBAIC0xNjIsNyArMTcwLDggQEAKICAqICAgYml0cyAwOjMgLSB0b3RhbCBndWVzdCBwYWdpbmcgbGV2ZWxzICgyLTQsIG9yIHplcm8gZm9yIHJlYWwgbW9kZSkKICAqICAgYml0cyA0OjcgLSBwYWdlIHRhYmxlIGxldmVsIGZvciB0aGlzIHNoYWRvdyAoMS00KQogICogICBiaXRzIDg6OSAtIHBhZ2UgdGFibGUgcXVhZHJhbnQgZm9yIDItbGV2ZWwgZ3Vlc3RzCi0gKiAgIGJpdCAgIDE2IC0gIm1ldGFwaHlzaWNhbCIgLSBnZm4gaXMgbm90IGEgcmVhbCBwYWdlIChodWdlIHBhZ2UvcmVhbCBtb2RlKQorICogICBiaXQgICAxNiAtIGRpcmVjdCBtYXBwaW5nIG9mIHZpcnR1YWwgdG8gcGh5c2ljYWwgbWFwcGluZyBhdCBnZm4KKyAqICAgICAgICAgICAgICB1c2VkIGZvciByZWFsIG1vZGUgYW5kIHR3by1kaW1lbnNpb25hbCBwYWdpbmcKICAqICAgYml0cyAxNzoxOSAtIGNvbW1vbiBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGFsbCBwdGVzIGluIHRoaXMgc2hhZG93IHBhZ2UKICAqLwogdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgewpAQCAtMTcyLDkgKzE4MSwxMCBAQAogCQl1bnNpZ25lZCBsZXZlbDo0OwogCQl1bnNpZ25lZCBxdWFkcmFudDoyOwogCQl1bnNpZ25lZCBwYWRfZm9yX25pY2VfaGV4X291dHB1dDo2OwotCQl1bnNpZ25lZCBtZXRhcGh5c2ljYWw6MTsKKwkJdW5zaWduZWQgZGlyZWN0OjE7CiAJCXVuc2lnbmVkIGFjY2VzczozOwogCQl1bnNpZ25lZCBpbnZhbGlkOjE7CisJCXVuc2lnbmVkIGNyNF9wZ2U6MTsKIAl9OwogfTsKIApAQCAtMjE4LDYgKzIyOCwxOCBAQAogCWNoYXIgYnVmWzUxMl0gX19hbGlnbmVkKHNpemVvZihsb25nKSk7CiB9OwogCitzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCWludCBjdXJfY291bnQ7CisJZ3ZhX3QgZ3Vlc3RfZ3ZhOworCWludCBpbjsKKwlpbnQgcG9ydDsKKwlpbnQgc2l6ZTsKKwlpbnQgc3RyaW5nOworCWludCBkb3duOworCWludCByZXA7Cit9OworCiAvKgogICogeDg2IHN1cHBvcnRzIDMgcGFnaW5nIG1vZGVzICg0LWxldmVsIDY0LWJpdCwgMy1sZXZlbCA2NC1iaXQsIGFuZCAyLWxldmVsCiAgKiAzMi1iaXQpLiAgVGhlIGt2bV9tbXUgc3RydWN0dXJlIGFic3RyYWN0cyB0aGUgZGV0YWlscyBvZiB0aGUgY3VycmVudCBtbXUKQEAgLTIzNiw2ICsyNTgsNyBAQAogCWhwYV90IHJvb3RfaHBhOwogCWludCByb290X2xldmVsOwogCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKKwl1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSBiYXNlX3JvbGU7CiAKIAl1NjQgKnBhZV9yb290OwogfTsKQEAgLTI1OCw2ICsyODEsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3IzOwogCXVuc2lnbmVkIGxvbmcgY3I0OwogCXVuc2lnbmVkIGxvbmcgY3I4OworCXUzMiBoZmxhZ3M7CiAJdTY0IHBkcHRyc1s0XTsgLyogcGFlICovCiAJdTY0IHNoYWRvd19lZmVyOwogCXU2NCBhcGljX2Jhc2U7CkBAIC0zMzgsNiArMzYyLDE1IEBACiAKIAlzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGU7CiAJdTMyIHBhdDsKKworCWludCBzd2l0Y2hfZGJfcmVnczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZGJbS1ZNX05SX0RCX1JFR1NdOworCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjY7CisJdW5zaWduZWQgbG9uZyBob3N0X2RyNzsKKwl1bnNpZ25lZCBsb25nIGRiW0tWTV9OUl9EQl9SRUdTXTsKKwl1bnNpZ25lZCBsb25nIGRyNjsKKwl1bnNpZ25lZCBsb25nIGRyNzsKKwl1bnNpZ25lZCBsb25nIGVmZl9kYltLVk1fTlJfREJfUkVHU107CiB9OwogCiBzdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7CkBAIC0zNzgsNiArNDExLDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgaXJxX3NvdXJjZXNfYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRlc1tLVk1fSU9BUElDX05VTV9QSU5TXTsKKwl1NjQgdm1faW5pdF90c2M7CiB9OwogCiBzdHJ1Y3Qga3ZtX3ZtX3N0YXQgewpAQCAtNDQ2LDggKzQ4MCw3IEBACiAJdm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJaW50ICgqc2V0X2d1ZXN0X2RlYnVnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKTsKLQl2b2lkICgqZ3Vlc3RfZGVidWdfcHJlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCQkJICAgICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7CiAJaW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKIAlpbnQgKCpzZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCBkYXRhKTsKIAl1NjQgKCpnZXRfc2VnbWVudF9iYXNlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpOwpAQCAtNTgzLDE2ICs2MTYsMTIgQEAKIHZvaWQga3ZtX2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjIsCiAJCQkgICB1MzIgZXJyb3JfY29kZSk7CiAKLXZvaWQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKK2ludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogCiB2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi1pbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICB2b2lkICp2YWwsCi0JCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgY29uc3Qgdm9pZCAqdmFsLAogCQkJICAgIHVuc2lnbmVkIGludCBieXRlcywKQEAgLTczNyw2ICs3NjYsMTAgQEAKIAlUQVNLX1NXSVRDSF9HQVRFID0gMywKIH07CiAKKyNkZWZpbmUgSEZfR0lGX01BU0sJCSgxIDw8IDApCisjZGVmaW5lIEhGX0hJRl9NQVNLCQkoMSA8PCAxKQorI2RlZmluZSBIRl9WSU5UUl9NQVNLCQkoMSA8PCAyKQorCiAvKgogICogSGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9uIGluc3RydWN0aW9ucyBtYXkgZmF1bHQgaWYgYQogICogcmVib290IHR1cm5zIG9mZiB2aXJ0dWFsaXphdGlvbiB3aGlsZSBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKaW5kZXggNWQ5OGQwYjYuLjkzMjBlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKQEAgLTUyLDcwICs1MiwxNCBAQAogCiAjZW5kaWYKIAorI2RlZmluZSBHTE9CQUwobmFtZSkJXAorCS5nbG9ibCBuYW1lOwlcCisJbmFtZToKKwogI2lmZGVmIENPTkZJR19YODZfQUxJR05NRU5UXzE2CiAjZGVmaW5lIF9fQUxJR04gLmFsaWduIDE2LDB4OTAKICNkZWZpbmUgX19BTElHTl9TVFIgIi5hbGlnbiAxNiwweDkwIgogI2VuZGlmCiAKLS8qCi0gKiB0byBjaGVjayBFTlRSWV9YODYvRU5EX1g4NiBhbmQKLSAqIEtQUk9CRV9FTlRSWV9YODYvS1BST0JFX0VORF9YODYKLSAqIHVuYmFsYW5jZWQtbWlzc2VkLW1peGVkIGFwcGVhcmFuY2UKLSAqLwotI2RlZmluZSBfX3NldF9lbnRyeV94ODYJCS5zZXQgRU5UUllfWDg2X0lOLCAwCi0jZGVmaW5lIF9fdW5zZXRfZW50cnlfeDg2CS5zZXQgRU5UUllfWDg2X0lOLCAxCi0jZGVmaW5lIF9fc2V0X2twcm9iZV94ODYJLnNldCBLUFJPQkVfWDg2X0lOLCAwCi0jZGVmaW5lIF9fdW5zZXRfa3Byb2JlX3g4Ngkuc2V0IEtQUk9CRV9YODZfSU4sIDEKLQotI2RlZmluZSBfX21hY3JvX2Vycl94ODYgLmVycm9yICJFTlRSWV9YODYvS1BST0JFX1g4NiB1bmJhbGFuY2VkLG1pc3NlZCxtaXhlZCIKLQotI2RlZmluZSBfX2NoZWNrX2VudHJ5X3g4NglcCi0JLmlmZGVmIEVOVFJZX1g4Nl9JTjsJXAotCS5pZmVxIEVOVFJZX1g4Nl9JTjsJXAotCV9fbWFjcm9fZXJyX3g4NjsJXAotCS5hYm9ydDsJCQlcCi0JLmVuZGlmOwkJCVwKLQkuZW5kaWYKLQotI2RlZmluZSBfX2NoZWNrX2twcm9iZV94ODYJXAotCS5pZmRlZiBLUFJPQkVfWDg2X0lOOwlcCi0JLmlmZXEgS1BST0JFX1g4Nl9JTjsJXAotCV9fbWFjcm9fZXJyX3g4NjsJXAotCS5hYm9ydDsJCQlcCi0JLmVuZGlmOwkJCVwKLQkuZW5kaWYKLQotI2RlZmluZSBfX2NoZWNrX2VudHJ5X2twcm9iZV94ODYJXAotCV9fY2hlY2tfZW50cnlfeDg2OwkJXAotCV9fY2hlY2tfa3Byb2JlX3g4NgotCi0jZGVmaW5lIEVOVFJZX0tQUk9CRV9GSU5BTF9YODYgX19jaGVja19lbnRyeV9rcHJvYmVfeDg2Ci0KLSNkZWZpbmUgRU5UUllfWDg2KG5hbWUpCQkJXAotCV9fY2hlY2tfZW50cnlfa3Byb2JlX3g4NjsJXAotCV9fc2V0X2VudHJ5X3g4NjsJCVwKLQkuZ2xvYmwgbmFtZTsJCQlcCi0JX19BTElHTjsJCQlcCi0JbmFtZToKLQotI2RlZmluZSBFTkRfWDg2KG5hbWUpCQkJXAotCV9fdW5zZXRfZW50cnlfeDg2OwkJXAotCV9fY2hlY2tfZW50cnlfa3Byb2JlX3g4NjsJXAotCS5zaXplIG5hbWUsIC4tbmFtZQotCi0jZGVmaW5lIEtQUk9CRV9FTlRSWV9YODYobmFtZSkJCVwKLQlfX2NoZWNrX2VudHJ5X2twcm9iZV94ODY7CVwKLQlfX3NldF9rcHJvYmVfeDg2OwkJXAotCS5wdXNoc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiOyBcCi0JLmdsb2JsIG5hbWU7CQkJXAotCV9fQUxJR047CQkJXAotCW5hbWU6Ci0KLSNkZWZpbmUgS1BST0JFX0VORF9YODYobmFtZSkJCVwKLQlfX3Vuc2V0X2twcm9iZV94ODY7CQlcCi0JX19jaGVja19lbnRyeV9rcHJvYmVfeDg2OwlcCi0JLnNpemUgbmFtZSwgLi1uYW1lOwkJXAotCS5wb3BzZWN0aW9uCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9MSU5LQUdFX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L2VudHJ5X2FyY2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMWFkZDguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L2VudHJ5X2FyY2guaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgZGVzaWduZWQgdG8gY29udGFpbiB0aGUgQlVJTERfSU5URVJSVVBUIHNwZWNpZmljYXRpb25zIGZvcgotICogYWxsIG9mIHRoZSBleHRyYSBuYW1lZCBpbnRlcnJ1cHQgdmVjdG9ycyB1c2VkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuCi0gKiBVc3VhbGx5IHRoaXMgaXMgdGhlIEludGVyIFByb2Nlc3MgSW50ZXJydXB0cyAoSVBJcykKLSAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSBwYXJ0IG9mIHRoZSBMaW51eCBhcmNoaXRlY3R1cmUsIHRoZXJlCi0gKiBpcyBubyBoYXJkd2FyZSBJUlEgcGluIGVxdWl2YWxlbnQgZm9yIHRoZW0sIHRoZXkgYXJlIHRyaWdnZXJlZAotICogdGhyb3VnaCB0aGUgSUNDIGJ5IHVzIChJUElzKQotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9TTVAKLUJVSUxEX0lOVEVSUlVQVChyZXNjaGVkdWxlX2ludGVycnVwdCxSRVNDSEVEVUxFX1ZFQ1RPUikKLUJVSUxEX0lOVEVSUlVQVChpbnZhbGlkYXRlX2ludGVycnVwdCxJTlZBTElEQVRFX1RMQl9WRUNUT1IpCi1CVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9WRUNUT1IpCi1CVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0LENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUikKLUJVSUxEX0lOVEVSUlVQVChpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCxJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUikKLSNlbmRpZgotCi0vKgotICogZXZlcnkgcGVudGl1bSBsb2NhbCBBUElDIGhhcyB0d28gJ2xvY2FsIGludGVycnVwdHMnLCB3aXRoIGEKLSAqIHNvZnQtZGVmaW5hYmxlIHZlY3RvciBhdHRhY2hlZCB0byBib3RoIGludGVycnVwdHMsIG9uZSBvZgotICogd2hpY2ggaXMgYSB0aW1lciBpbnRlcnJ1cHQsIHRoZSBvdGhlciBvbmUgaXMgZXJyb3IgY291bnRlcgotICogb3ZlcmZsb3cuIExpbnV4IHVzZXMgdGhlIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0IHRvIGdldAotICogYSBtdWNoIHNpbXBsZXIgU01QIHRpbWUgYXJjaGl0ZWN0dXJlOgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi1CVUlMRF9JTlRFUlJVUFQoYXBpY190aW1lcl9pbnRlcnJ1cHQsTE9DQUxfVElNRVJfVkVDVE9SKQotQlVJTERfSU5URVJSVVBUKGVycm9yX2ludGVycnVwdCxFUlJPUl9BUElDX1ZFQ1RPUikKLUJVSUxEX0lOVEVSUlVQVChzcHVyaW91c19pbnRlcnJ1cHQsU1BVUklPVVNfQVBJQ19WRUNUT1IpCi0KLSNpZmRlZiBDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwKLUJVSUxEX0lOVEVSUlVQVCh0aGVybWFsX2ludGVycnVwdCxUSEVSTUFMX0FQSUNfVkVDVE9SKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzA5Y2JiLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0FQSUNfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9BUElDX0gKLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9GTEFUKQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0YXJnZXRfY3B1cyh2b2lkKQoteyAKLSNpZmRlZiBDT05GSUdfU01QCi0JcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKLSNlbHNlCi0JcmV0dXJuIGNwdW1hc2tfb2YoMCk7Ci0jZW5kaWYKLX0gCi0KLSNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDApCi0jZGVmaW5lIGVzcl9kaXNhYmxlICgwKQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChnZW5hcGljLT5pbnRfZGVsaXZlcnlfbW9kZSkKLSNkZWZpbmUgSU5UX0RFU1RfTU9ERSAoZ2VuYXBpYy0+aW50X2Rlc3RfbW9kZSkKLSNkZWZpbmUgVEFSR0VUX0NQVVMJICAoZ2VuYXBpYy0+dGFyZ2V0X2NwdXMoKSkKLSNkZWZpbmUgYXBpY19pZF9yZWdpc3RlcmVkIChnZW5hcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQpCi0jZGVmaW5lIGluaXRfYXBpY19sZHIgKGdlbmFwaWMtPmluaXRfYXBpY19sZHIpCi0jZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZCAoZ2VuYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKQotI2RlZmluZSBjcHVfbWFza190b19hcGljaWRfYW5kIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKQotI2RlZmluZSBwaHlzX3BrZ19pZAkoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCi0jZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiAgICAoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQotI2RlZmluZSByZWFkX2FwaWNfaWQoKSAgKEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSkpCi0jZGVmaW5lIHNlbmRfSVBJX3NlbGYgKGdlbmFwaWMtPnNlbmRfSVBJX3NlbGYpCi0jZGVmaW5lIHdha2V1cF9zZWNvbmRhcnlfY3B1IChnZW5hcGljLT53YWtldXBfY3B1KQotZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpOwotI2Vsc2UKLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgZGVzdF9Mb3dlc3RQcmlvCi0jZGVmaW5lIElOVF9ERVNUX01PREUgMSAgICAgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCi0jZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQotI2RlZmluZSB3YWtldXBfc2Vjb25kYXJ5X2NwdSB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfaW5pdAotLyoKLSAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KLSAqCi0gKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKLSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9WQUxVRSk7Ci0JdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOwotCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKDFVTCA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF9hcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQotewotCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCQkgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazEgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07Ci0JdW5zaWduZWQgbG9uZyBtYXNrMiA9IGNwdW1hc2tfYml0cyhhbmRtYXNrKVswXTsKLQl1bnNpZ25lZCBsb25nIG1hc2szID0gY3B1bWFza19iaXRzKGNwdV9vbmxpbmVfbWFzaylbMF07Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCkobWFzazEgJiBtYXNrMiAmIG1hc2szKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JcHJpbnRrKCJFbmFibGluZyBBUElDIG1vZGU6ICAlcy4gIFVzaW5nICVkIEkvTyBBUElDc1xuIiwKLQkJCQkJIkZsYXQiLCBucl9pb2FwaWNzKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiBhcGljaWRfMl9ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKLXsKLSAgICAgICAgLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKLSAgICAgICAgICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKLSAgICAgICAgICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCi0gICAgICAgICAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQotICAgICAgICAgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgotICAgICAgICAgKi8KLQkqcmV0bWFzayA9IChjcHVtYXNrX3QpIHsgeyBbMF0gPSBBUElDX0FMTF9DUFVTIH0gfTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuIHBoeXNpZF9pc3NldChhcGljaWQsIGJpdG1hcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYml0LCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBpb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKLXsKLQlyZXR1cm4gcGh5c19tYXA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQotewotCXJldHVybiAwOwotfQotCi0vKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCi17Ci0JcmV0dXJuIDEgPDwgY3B1OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCi17Ci0JaWYgKG1wc19jcHUgPCBucl9jcHVfaWRzICYmIGNwdV9wcmVzZW50KG1wc19jcHUpKQotCQlyZXR1cm4gKGludClwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOwotCWVsc2UKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c19hcGljaWQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2FwaWNfbW9kZSh2b2lkKQotewotfQotI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzE3OTkzLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWNkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfQVBJQ0RFRl9ICi0jZGVmaW5lIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX0FQSUNERUZfSAotCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUJQVBJQ19JRF9NQVNLCQkoZ2VuYXBpYy0+YXBpY19pZF9tYXNrKQotI2RlZmluZSBHRVRfQVBJQ19JRCh4KQkJKGdlbmFwaWMtPmdldF9hcGljX2lkKHgpKQotI2RlZmluZQlTRVRfQVBJQ19JRCh4KQkJKGdlbmFwaWMtPnNldF9hcGljX2lkKHgpKQotI2Vsc2UKLSNkZWZpbmUJCUFQSUNfSURfTUFTSwkJKDB4Rjw8MjQpCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkgCi17Ci0JdW5zaWduZWQgaW50IHZlciA9IEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci0JaWYgKEFQSUNfWEFQSUModmVyKSkKLQkJcmV0dXJuICgoKHgpPj4yNCkmMHhGRik7Ci0JZWxzZQotCQlyZXR1cm4gKCgoeCk+PjI0KSYweEYpOwotfSAKLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfQVBJQ0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTEzMTJkLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9JUElfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9JUElfSAotCi0vKiBBdm9pZCBpbmNsdWRlIGhlbGwgKi8KLSNkZWZpbmUgTk1JX1ZFQ1RPUiAweDAyCi0KLXZvaWQgc2VuZF9JUElfbWFza19iaXRtYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKTsKLXZvaWQgc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKTsKLXZvaWQgX19zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IpOwotCi1leHRlcm4gaW50IG5vX2Jyb2FkY2FzdDsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2RlZmluZSBzZW5kX0lQSV9tYXNrIChnZW5hcGljLT5zZW5kX0lQSV9tYXNrKQotI2RlZmluZSBzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYgKGdlbmFwaWMtPnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZikKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2JpdG1hc2sobWFzaywgdmVjdG9yKTsKLX0KLXZvaWQgc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKTsKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19sb2NhbF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCi17Ci0JaWYgKG5vX2Jyb2FkY2FzdCB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKLQkJc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKLQllbHNlCi0JCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTEJVVCwgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fbG9jYWxfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0JaWYgKG5vX2Jyb2FkY2FzdCB8fCB2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKLQkJc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci0JZWxzZQotCQlfX3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExJTkMsIHZlY3Rvcik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIHNlbmRfSVBJX2FsbGJ1dHNlbGYgKGdlbmFwaWMtPnNlbmRfSVBJX2FsbGJ1dHNlbGYpCi0jZGVmaW5lIHNlbmRfSVBJX2FsbCAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCi17Ci0JLyoKLQkgKiBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgQ1BVcyBpbiB0aGUgc3lzdGVtIHRoZW4gd2UgZ2V0IGFuIEFQSUMgc2VuZCAKLQkgKiBlcnJvciBpZiB3ZSB0cnkgdG8gYnJvYWRjYXN0LCB0aHVzIGF2b2lkIHNlbmRpbmcgSVBJcyBpbiB0aGlzIGNhc2UuCi0JICovCi0JaWYgKCEobnVtX29ubGluZV9jcHVzKCkgPiAxKSkKLQkJcmV0dXJuOwotCi0JX19sb2NhbF9zZW5kX0lQSV9hbGxidXRzZWxmKHZlY3Rvcik7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0JX19sb2NhbF9zZW5kX0lQSV9hbGwodmVjdG9yKTsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX21wcGFyc2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX21wcGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcwYTI2My4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX01QUEFSU0VfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9NUFBBUlNFX0gKLQotc3RhdGljIGlubGluZSBpbnQKLW1wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogSG9vayBmcm9tIGdlbmVyaWMgQUNQSSB0YWJsZXMuYyAqLwotc3RhdGljIGlubGluZSBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBQQVJTRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX21wc3BlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODVlZGU2Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX21wc3BlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9NUFNQRUNfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9NUFNQRUNfSAotCi0jZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKLQotI2lmIENPTkZJR19CQVNFX1NNQUxMID09IDAKLSNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNTYKLSNlbHNlCi0jZGVmaW5lIE1BWF9NUF9CVVNTRVMgMzIKLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9ERUZBVUxUX01BQ0hfTVBTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4OTdhNi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX1dBS0VDUFVfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0RFRkFVTFRfTUFDSF9XQUtFQ1BVX0gKLQotI2RlZmluZSBUUkFNUE9MSU5FX1BIWVNfTE9XICgweDQ2NykKLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0hJR0ggKDB4NDY5KQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfaW5pdF9kZWFzc2VydChhdG9taWNfdCAqZGVhc3NlcnQpCi17Ci0Jd2hpbGUgKCFhdG9taWNfcmVhZChkZWFzc2VydCkpCi0JCWNwdV9yZWxheCgpOwotCXJldHVybjsKLX0KLQotLyogTm90aGluZyB0byBkbyBmb3IgbW9zdCBwbGF0Zm9ybXMsIHNpbmNlIGNsZWFyZWQgYnkgdGhlIElOSVQgY3ljbGUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWModm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCi17Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gdm9pZCBfX2lucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCk7Ci0jZWxzZSAvKiBDT05GSUdfU01QICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5xdWlyZV9yZW1vdGVfYXBpYyhpbnQgYXBpY2lkKQotewotCWlmIChhcGljX3ZlcmJvc2l0eSA+PSBBUElDX0RFQlVHKQotCQlfX2lucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKLX0KLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfREVGQVVMVF9NQUNIX1dBS0VDUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2dwaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NWM0NWUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2dwaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9HRU5FUklDX0dQSU9fSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfR1BJT19ICi0KLWludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwotdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1pbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKTsKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4gICAgICAgICAgIC8qIGNhbnNsZWVwIHdyYXBwZXJzICovCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTUzZTkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfQVBJQ19ICi0KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotCi0jZGVmaW5lIGVzcl9kaXNhYmxlIChnZW5hcGljLT5FU1JfRElTQUJMRSkKLSNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKGdlbmFwaWMtPm5vX2JhbGFuY2VfaXJxKQotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUpCi0jZGVmaW5lIElOVF9ERVNUX01PREUgKGdlbmFwaWMtPmludF9kZXN0X21vZGUpCi0jdW5kZWYgQVBJQ19ERVNUX0xPR0lDQUwKLSNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwgKGdlbmFwaWMtPmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCkKLSNkZWZpbmUgVEFSR0VUX0NQVVMJICAoZ2VuYXBpYy0+dGFyZ2V0X2NwdXMoKSkKLSNkZWZpbmUgYXBpY19pZF9yZWdpc3RlcmVkIChnZW5hcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQpCi0jZGVmaW5lIGluaXRfYXBpY19sZHIgKGdlbmFwaWMtPmluaXRfYXBpY19sZHIpCi0jZGVmaW5lIGlvYXBpY19waHlzX2lkX21hcCAoZ2VuYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKQotI2RlZmluZSBzZXR1cF9hcGljX3JvdXRpbmcgKGdlbmFwaWMtPnNldHVwX2FwaWNfcm91dGluZykKLSNkZWZpbmUgbXVsdGlfdGltZXJfY2hlY2sgKGdlbmFwaWMtPm11bHRpX3RpbWVyX2NoZWNrKQotI2RlZmluZSBhcGljaWRfdG9fbm9kZSAoZ2VuYXBpYy0+YXBpY2lkX3RvX25vZGUpCi0jZGVmaW5lIGNwdV90b19sb2dpY2FsX2FwaWNpZCAoZ2VuYXBpYy0+Y3B1X3RvX2xvZ2ljYWxfYXBpY2lkKSAKLSNkZWZpbmUgY3B1X3ByZXNlbnRfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfcHJlc2VudF90b19hcGljaWQpCi0jZGVmaW5lIGFwaWNpZF90b19jcHVfcHJlc2VudCAoZ2VuYXBpYy0+YXBpY2lkX3RvX2NwdV9wcmVzZW50KQotI2RlZmluZSBzZXR1cF9wb3J0aW9fcmVtYXAgKGdlbmFwaWMtPnNldHVwX3BvcnRpb19yZW1hcCkKLSNkZWZpbmUgY2hlY2tfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX2FwaWNpZF9wcmVzZW50KQotI2RlZmluZSBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50IChnZW5hcGljLT5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KQotI2RlZmluZSBjaGVja19hcGljaWRfdXNlZCAoZ2VuYXBpYy0+Y2hlY2tfYXBpY2lkX3VzZWQpCi0jZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZCAoZ2VuYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKQotI2RlZmluZSBjcHVfbWFza190b19hcGljaWRfYW5kIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKQotI2RlZmluZSB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gKGdlbmFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikKLSNkZWZpbmUgZW5hYmxlX2FwaWNfbW9kZSAoZ2VuYXBpYy0+ZW5hYmxlX2FwaWNfbW9kZSkKLSNkZWZpbmUgcGh5c19wa2dfaWQgKGdlbmFwaWMtPnBoeXNfcGtnX2lkKQotI2RlZmluZSB3YWtldXBfc2Vjb25kYXJ5X2NwdSAoZ2VuYXBpYy0+d2FrZXVwX2NwdSkKLQotZXh0ZXJuIHZvaWQgZ2VuZXJpY19iaWdzbXBfcHJvYmUodm9pZCk7Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX2FwaWNkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNDFmMy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNERUZfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDREVGX0gKLQotI2lmbmRlZiBBUElDX0RFRklOSVRJT04KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotCi0jZGVmaW5lIEdFVF9BUElDX0lEIChnZW5hcGljLT5nZXRfYXBpY19pZCkKLSNkZWZpbmUgQVBJQ19JRF9NQVNLIChnZW5hcGljLT5hcGljX2lkX21hc2spCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX0FQSUNERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkNjM3ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9pcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfSVBJX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfSVBJX0gKLQotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0KLSNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKLSNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKLSNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBwYXJzZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfbXBwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDQ0YWI4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX21wcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFBBUlNFX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfTVBQQVJTRV9ICi0KLQotZXh0ZXJuIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKiwgY2hhciAqLCBjaGFyICopOwotCi1leHRlcm4gaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqLCBjaGFyICopOwotCi0jZW5kaWYgLyogX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfTVBQQVJTRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF9tcHNwZWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX21wc3BlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmM0MDcyLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9tYWNoX21wc3BlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFNQRUNfSAotI2RlZmluZSBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9NUFNQRUNfSAotCi0jZGVmaW5lIE1BWF9JUlFfU09VUkNFUyAyNTYKLQotLyogU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzIG5lZWQgbG90cyBvZiBidXMgZW50cmllcy4gKi8KLS8qIE1heGltdW0gMjU2IFBDSSBidXNzZXMsIHBsdXMgMSBJU0EgYnVzIGluIGVhY2ggb2YgNCBjYWJpbmV0cy4gKi8KLSNkZWZpbmUgTUFYX01QX0JVU1NFUyAyNjAKLQotZXh0ZXJuIHZvaWQgbnVtYXFfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICosIGNoYXIgKiwgY2hhciAqKTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfR0VORVJJQ19NQUNIX01QU1BFQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF93YWtlY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvbWFjaF93YWtlY3B1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjE2YjEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL21hY2hfd2FrZWNwdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9XQUtFQ1BVX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9HRU5FUklDX01BQ0hfV0FLRUNQVV9ICi0KLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0xPVyAoZ2VuYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykKLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0hJR0ggKGdlbmFwaWMtPnRyYW1wb2xpbmVfcGh5c19oaWdoKQotI2RlZmluZSB3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0IChnZW5hcGljLT53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KQotI2RlZmluZSBzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMgKGdlbmFwaWMtPnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYykKLSNkZWZpbmUgc3RvcmVfTk1JX3ZlY3RvciAoZ2VuYXBpYy0+c3RvcmVfTk1JX3ZlY3RvcikKLSNkZWZpbmUgcmVzdG9yZV9OTUlfdmVjdG9yIChnZW5hcGljLT5yZXN0b3JlX05NSV92ZWN0b3IpCi0jZGVmaW5lIGlucXVpcmVfcmVtb3RlX2FwaWMgKGdlbmFwaWMtPmlucXVpcmVfcmVtb3RlX2FwaWMpCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NQUNIX0dFTkVSSUNfTUFDSF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtcmRjMzIxeC9ncGlvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXJkYzMyMXgvZ3Bpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjEwYWI1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtcmRjMzIxeC9ncGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01BQ0hfUkRDMzIxWF9HUElPX0gKLSNkZWZpbmUgX0FTTV9YODZfTUFDSF9SREMzMjFYX0dQSU9fSAotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLWV4dGVybiBpbnQgcmRjX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotZXh0ZXJuIHZvaWQgcmRjX2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IHJkY19ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiBpbnQgcmRjX2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotZXh0ZXJuIGludCByZGNfZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKLWV4dGVybiB2b2lkIHJkY19ncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcmRjMzIxeF9ncGlvX3NldHVwKHZvaWQpOwotCi0vKiBXcmFwcGVycyBmb3IgdGhlIGFyY2gtbmV1dHJhbCBHUElPIEFQSSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JcmV0dXJuIHJkY19ncGlvX3JlcXVlc3QoZ3BpbywgbGFiZWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQlyZGNfZ3Bpb19mcmVlKGdwaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiByZGNfZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JcmV0dXJuIHJkY19ncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiByZGNfZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JcmRjX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gZ3BpbzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCXJldHVybiBpcnE7Ci19Ci0KLS8qIEZvciBjYW5zbGVlcCAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KLQotI2VuZGlmIC8qIF9BU01fWDg2X01BQ0hfUkRDMzIxWF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9kb190aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNWE0NTlmLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9kb190aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogZGVmaW5lcyBmb3IgaW5saW5lIGFyY2ggc2V0dXAgZnVuY3Rpb25zICovCi0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotCi0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTMuaD4KLQotLyoqCi0gKiBkb190aW1lcl9pbnRlcnJ1cHRfaG9vayAtIGhvb2sgaW50byB0aW1lciB0aWNrCi0gKgotICogQ2FsbCB0aGUgcGl0IGNsb2NrIGV2ZW50IGhhbmRsZXIuIHNlZSBhc20vaTgyNTMuaAotICoqLwotc3RhdGljIGlubGluZSB2b2lkIGRvX3RpbWVyX2ludGVycnVwdF9ob29rKHZvaWQpCi17Ci0JZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyKGdsb2JhbF9jbG9ja19ldmVudCk7Ci0Jdm95YWdlcl90aW1lcl9pbnRlcnJ1cHQoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2VudHJ5X2FyY2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtdm95YWdlci9lbnRyeV9hcmNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNTI2MjQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL2VudHJ5X2FyY2guaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLQotLyogQ29weXJpZ2h0IChDKSAyMDAyCi0gKgotICogQXV0aG9yOiBKYW1lcy5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCi0gKgotICogbGludXgvYXJjaC9pMzg2L3ZveWFnZXIvZW50cnlfYXJjaC5oCi0gKgotICogVGhpcyBmaWxlIGJ1aWxkcyB0aGUgVklDIGFuZCBRSUMgQ1BJIGdhdGVzCi0gKi8KLQotLyogaW5pdGlhbGlzZSB0aGUgdm95YWdlciBpbnRlcnJ1cHQgZ2F0ZXMgCi0gKgotICogVGhpcyB1c2VzIHRoZSBtYWNyb3MgaW4gaXJxLmggdG8gc2V0IHVwIGFzc2VtYmx5IGp1bXAgZ2F0ZXMuICBUaGUKLSAqIGNhbGxzIGFyZSB0aGVuIHJlZGlyZWN0ZWQgdG8gdGhlIHNhbWUgcm91dGluZSB3aXRoIHNtcF8gcHJlZml4ZWQgKi8KLUJVSUxEX0lOVEVSUlVQVCh2aWNfc3lzX2ludGVycnVwdCwgVklDX1NZU19JTlQpCi1CVUlMRF9JTlRFUlJVUFQodmljX2Ntbl9pbnRlcnJ1cHQsIFZJQ19DTU5fSU5UKQotQlVJTERfSU5URVJSVVBUKHZpY19jcGlfaW50ZXJydXB0LCBWSUNfQ1BJX0xFVkVMMCk7Ci0KLS8qIGRvIGFsbCB0aGUgUUlDIGludGVycnVwdHMgKi8KLUJVSUxEX0lOVEVSUlVQVChxaWNfdGltZXJfaW50ZXJydXB0LCBRSUNfVElNRVJfQ1BJKTsKLUJVSUxEX0lOVEVSUlVQVChxaWNfaW52YWxpZGF0ZV9pbnRlcnJ1cHQsIFFJQ19JTlZBTElEQVRFX0NQSSk7Ci1CVUlMRF9JTlRFUlJVUFQocWljX3Jlc2NoZWR1bGVfaW50ZXJydXB0LCBRSUNfUkVTQ0hFRFVMRV9DUEkpOwotQlVJTERfSU5URVJSVVBUKHFpY19lbmFibGVfaXJxX2ludGVycnVwdCwgUUlDX0VOQUJMRV9JUlFfQ1BJKTsKLUJVSUxEX0lOVEVSUlVQVChxaWNfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsIFFJQ19DQUxMX0ZVTkNUSU9OX0NQSSk7Ci1CVUlMRF9JTlRFUlJVUFQocWljX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCwgUUlDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXZveWFnZXIvc2V0dXBfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC12b3lhZ2VyL3NldHVwX2FyY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3MjljYS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXZveWFnZXIvc2V0dXBfYXJjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS92b3lhZ2VyLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jZGVmaW5lIFZPWUFHRVJfQklPU19JTkZPICgoc3RydWN0IHZveWFnZXJfYmlvc19pbmZvICopIFwKLQkJCSgmYm9vdF9wYXJhbXMuYXBtX2Jpb3NfaW5mbykpCi0KLS8qIEhvb2sgdG8gY2FsbCBCSU9TIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uICovCi0KLS8qIGZvciB2b3lhZ2VyLCBwYXNzIHRoZSB2b3lhZ2VyIEJJT1MvU1VTIGluZm8gYXJlYSB0byB0aGUgZGV0ZWN0aW9uCi0gKiByb3V0aW5lcyAqLwotCi0jZGVmaW5lIEFSQ0hfU0VUVVAJdm95YWdlcl9kZXRlY3QoVk9ZQUdFUl9CSU9TX0lORk8pOwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaF90aW1lci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvbWFjaF90aW1lci5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoX3RpbWVyLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX3RyYXBzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoX3RyYXBzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtZGVmYXVsdC9tYWNoX3RyYXBzLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL21hY2hfdHJhcHMuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggOGFlZWIzZi4uZjkyMzIwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0yMSwxMSArMjEsNTQgQEAKIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgIm1tdV9jb250ZXh0XzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJtbXVfY29udGV4dF82NC5oIgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAocGVyY3B1X3JlYWQoY3B1X3RsYnN0YXRlLnN0YXRlKSA9PSBUTEJTVEFURV9PSykKKwkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5zdGF0ZSwgVExCU1RBVEVfTEFaWSk7CiAjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKKwkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KKwkJY3B1X2NsZWFyKGNwdSwgcHJldi0+Y3B1X3ZtX21hc2spOworI2lmZGVmIENPTkZJR19TTVAKKwkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5zdGF0ZSwgVExCU1RBVEVfT0spOworCQlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSwgbmV4dCk7CisjZW5kaWYKKwkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKKworCQkvKiBSZS1sb2FkIHBhZ2UgdGFibGVzICovCisJCWxvYWRfY3IzKG5leHQtPnBnZCk7CisKKwkJLyoKKwkJICogbG9hZCB0aGUgTERULCBpZiB0aGUgTERUIGlzIGRpZmZlcmVudDoKKwkJICovCisJCWlmICh1bmxpa2VseShwcmV2LT5jb250ZXh0LmxkdCAhPSBuZXh0LT5jb250ZXh0LmxkdCkpCisJCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOworCX0KKyNpZmRlZiBDT05GSUdfU01QCisJZWxzZSB7CisJCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX09LKTsKKwkJQlVHX09OKHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0pICE9IG5leHQpOworCisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKSkgeworCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFuZCBsZWF2ZV9tbSBkaXNhYmxlZAorCQkJICogdGxiIGZsdXNoIElQSSBkZWxpdmVyeS4gV2UgbXVzdCByZWxvYWQgQ1IzCisJCQkgKiB0byBtYWtlIHN1cmUgdG8gdXNlIG5vIGZyZWVkIHBhZ2UgdGFibGVzLgorCQkJICovCisJCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOworCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKKwkJfQorCX0KKyNlbmRpZgorfQogCiAjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsIG5leHQpCQkJXAogZG8gewkJCQkJCVwKQEAgLTMzLDUgKzc2LDE3IEBACiAJc3dpdGNoX21tKChwcmV2KSwgKG5leHQpLCBOVUxMKTsJXAogfSB3aGlsZSAoMCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCitkbyB7CQkJCQkJXAorCWxhenlfbG9hZF9ncygwKTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQkJCVwKK2RvIHsJCQkJCQlcCisJbG9hZF9nc19pbmRleCgwKTsJCQlcCisJbG9hZHNlZ21lbnQoZnMsIDApOwkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTk4Y2UxLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01NVV9DT05URVhUXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfTU1VX0NPTlRFWFRfMzJfSAotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoeDg2X3JlYWRfcGVyY3B1KGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfT0spCi0JCXg4Nl93cml0ZV9wZXJjcHUoY3B1X3RsYnN0YXRlLnN0YXRlLCBUTEJTVEFURV9MQVpZKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCi0JCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCi0JCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKLQkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KLQkJY3B1X2NsZWFyKGNwdSwgcHJldi0+Y3B1X3ZtX21hc2spOwotI2lmZGVmIENPTkZJR19TTVAKLQkJeDg2X3dyaXRlX3BlcmNwdShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX09LKTsKLQkJeDg2X3dyaXRlX3BlcmNwdShjcHVfdGxic3RhdGUuYWN0aXZlX21tLCBuZXh0KTsKLSNlbmRpZgotCQljcHVfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spOwotCi0JCS8qIFJlLWxvYWQgcGFnZSB0YWJsZXMgKi8KLQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKLQotCQkvKgotCQkgKiBsb2FkIHRoZSBMRFQsIGlmIHRoZSBMRFQgaXMgZGlmZmVyZW50OgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHByZXYtPmNvbnRleHQubGR0ICE9IG5leHQtPmNvbnRleHQubGR0KSkKLQkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7Ci0JfQotI2lmZGVmIENPTkZJR19TTVAKLQllbHNlIHsKLQkJeDg2X3dyaXRlX3BlcmNwdShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX09LKTsKLQkJQlVHX09OKHg4Nl9yZWFkX3BlcmNwdShjcHVfdGxic3RhdGUuYWN0aXZlX21tKSAhPSBuZXh0KTsKLQotCQlpZiAoIWNwdV90ZXN0X2FuZF9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzaykpIHsKLQkJCS8qIFdlIHdlcmUgaW4gbGF6eSB0bGIgbW9kZSBhbmQgbGVhdmVfbW0gZGlzYWJsZWQKLQkJCSAqIHRsYiBmbHVzaCBJUEkgZGVsaXZlcnkuIFdlIG11c3QgcmVsb2FkICVjcjMuCi0JCQkgKi8KLQkJCWxvYWRfY3IzKG5leHQtPnBnZCk7Ci0JCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQkJCVwKLQlhc20oIm1vdmwgJTAsJSVncyI6IDoiciIgKDApKTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X01NVV9DT05URVhUXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzdkMzZlLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X01NVV9DT05URVhUXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfTU1VX0NPTlRFWFRfNjRfSAotCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocmVhZF9wZGEobW11X3N0YXRlKSA9PSBUTEJTVEFURV9PSykKLQkJd3JpdGVfcGRhKG1tdV9zdGF0ZSwgVExCU1RBVEVfTEFaWSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAotCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7Ci0JCS8qIHN0b3AgZmx1c2ggaXBpcyBmb3IgdGhlIHByZXZpb3VzIG1tICovCi0JCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXdyaXRlX3BkYShtbXVfc3RhdGUsIFRMQlNUQVRFX09LKTsKLQkJd3JpdGVfcGRhKGFjdGl2ZV9tbSwgbmV4dCk7Ci0jZW5kaWYKLQkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKLQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKLQotCQlpZiAodW5saWtlbHkobmV4dC0+Y29udGV4dC5sZHQgIT0gcHJldi0+Y29udGV4dC5sZHQpKQotCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0KTsKLQl9Ci0jaWZkZWYgQ09ORklHX1NNUAotCWVsc2UgewotCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7Ci0JCWlmIChyZWFkX3BkYShhY3RpdmVfbW0pICE9IG5leHQpCi0JCQlCVUcoKTsKLQkJaWYgKCFjcHVfdGVzdF9hbmRfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spKSB7Ci0JCQkvKiBXZSB3ZXJlIGluIGxhenkgdGxiIG1vZGUgYW5kIGxlYXZlX21tIGRpc2FibGVkCi0JCQkgKiB0bGIgZmx1c2ggSVBJIGRlbGl2ZXJ5LiBXZSBtdXN0IHJlbG9hZCBDUjMKLQkJCSAqIHRvIG1ha2Ugc3VyZSB0byB1c2Ugbm8gZnJlZWQgcGFnZSB0YWJsZXMuCi0JCQkgKi8KLQkJCWxvYWRfY3IzKG5leHQtPnBnZCk7Ci0JCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQkJCVwKLWRvIHsJCQkJCQlcCi0JbG9hZF9nc19pbmRleCgwKTsJCQlcCi0JYXNtIHZvbGF0aWxlKCJtb3ZsICUwLCUlZnMiOjoiciIoMCkpOwlcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX0FTTV9YODZfTU1VX0NPTlRFWFRfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaAppbmRleCAxMDVmYjkwLi5lZGU2OTk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaApAQCAtOTEsNDYgKzkxLDkgQEAKICNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCiAKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotCi0vKgotICogRm9sbG93aW5nIGFyZSBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhpcyBudW1hIHBsYXRmb3JtLgotICovCi0jZGVmaW5lIHJlc2VydmVfYm9vdG1lbShhZGRyLCBzaXplLCBmbGFncykgXAotCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKGFkZHIpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW0oeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub3BhbmljKHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKE5PREVfREFUQSgwKSwgKHgpLCBTTVBfQ0FDSEVfQllURVMsIFwKLQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93KHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgU01QX0NBQ0hFX0JZVEVTLCAwKQotI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzKHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9wYW5pYyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLCBcCi0JCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKQotI2RlZmluZSBhbGxvY19ib290bWVtX2xvd19wYWdlcyh4KSBcCi0JX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgMCkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4KQkJCQkJXAotKHsJCQkJCQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKLQkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBTTVBfQ0FDSEVfQllURVMsCVwKLQkJCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CVwKLX0pCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShwZ2RhdCwgeCkJCQkJXAotKHsJCQkJCQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKLQkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAotCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsCQlcCi0JCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwlcCi19KQotI2RlZmluZSBhbGxvY19ib290bWVtX2xvd19wYWdlc19ub2RlKHBnZGF0LCB4KQkJCQlcCi0oewkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgIF9fbWF5YmVfdW51c2VkCQkJXAotCQkJCSpfX2FsbG9jX2Jvb3RtZW1fbm9kZV9fcGdkYXQgPSAocGdkYXQpOwlcCi0JX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwgMCk7CQlcCi19KQorLyogYWx3YXlzIHVzZSBub2RlIDAgZm9yIGJvb3RtZW0gb24gdGhpcyBudW1hIHBsYXRmb3JtICovCisjZGVmaW5lIGJvb3RtZW1fYXJjaF9wcmVmZXJyZWRfbm9kZShfX2JkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpCVwKKwkoTk9ERV9EQVRBKDApLT5iZGF0YSkKICNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLwogCiAjZW5kaWYgLyogX0FTTV9YODZfTU1aT05FXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKaW5kZXggYmQyMmYyYS4uNjQyZmM3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKQEAgLTksNyArOSwxOCBAQAogZXh0ZXJuIGludCBwaWNfbW9kZTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLSNpbmNsdWRlIDxtYWNoX21wc3BlYy5oPgorCisvKgorICogU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzIG5lZWQgbG90cyBvZiBidXMgZW50cmllcy4KKyAqIE1heGltdW0gMjU2IFBDSSBidXNzZXMsIHBsdXMgMSBJU0EgYnVzIGluIGVhY2ggb2YgNCBjYWJpbmV0cy4KKyAqLworI2lmIENPTkZJR19CQVNFX1NNQUxMID09IDAKKyMgZGVmaW5lIE1BWF9NUF9CVVNTRVMJCTI2MAorI2Vsc2UKKyMgZGVmaW5lIE1BWF9NUF9CVVNTRVMJCTMyCisjZW5kaWYKKworI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMJCTI1NgogCiBleHRlcm4gdW5zaWduZWQgaW50IGRlZl90b19iaWdzbXA7CiBleHRlcm4gdTggYXBpY2lkXzJfbm9kZVtdOwpAQCAtMjAsMTUgKzMxLDE1IEBACiBleHRlcm4gaW50IHF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkIFtOUl9DUFVTLzRdWzRdOwogI2VuZGlmCiAKLSNkZWZpbmUgTUFYX0FQSUNJRCAyNTYKKyNkZWZpbmUgTUFYX0FQSUNJRAkJMjU2CiAKLSNlbHNlCisjZWxzZSAvKiBDT05GSUdfWDg2XzY0OiAqLwogCi0jZGVmaW5lIE1BWF9NUF9CVVNTRVMgMjU2CisjZGVmaW5lIE1BWF9NUF9CVVNTRVMJCTI1NgogLyogRWFjaCBQQ0kgc2xvdCBtYXkgYmUgYSBjb21ibyBjYXJkIHdpdGggaXRzIG93biBidXMuICA0IElSUSBwaW5zIHBlciBzbG90LiAqLwotI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgKE1BWF9NUF9CVVNTRVMgKiA0KQorI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMJCShNQVhfTVBfQlVTU0VTICogNCkKIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiBleHRlcm4gdm9pZCBlYXJseV9maW5kX3NtcF9jb25maWcodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9nZXRfc21wX2NvbmZpZyh2b2lkKTsKQEAgLTQ1LDExICs1NiwxMyBAQAogZXh0ZXJuIGludCBtcGNfZGVmYXVsdF90eXBlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKIAotZXh0ZXJuIHZvaWQgZmluZF9zbXBfY29uZmlnKHZvaWQpOwogZXh0ZXJuIHZvaWQgZ2V0X3NtcF9jb25maWcodm9pZCk7CisKICNpZmRlZiBDT05GSUdfWDg2X01QUEFSU0UKK2V4dGVybiB2b2lkIGZpbmRfc21wX2NvbmZpZyh2b2lkKTsKIGV4dGVybiB2b2lkIGVhcmx5X3Jlc2VydmVfZTgyMF9tcGNfbmV3KHZvaWQpOwogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW5kX3NtcF9jb25maWcodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfcmVzZXJ2ZV9lODIwX21wY19uZXcodm9pZCkgeyB9CiAjZW5kaWYKIApAQCAtNjQsNiArNzcsOCBAQAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogZXh0ZXJuIGludCBtcF9jb25maWdfYWNwaV9nc2kodW5zaWduZWQgY2hhciBudW1iZXIsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggcGluLAogCQkJCXUzMiBnc2ksIGludCB0cmlnZ2VyaW5nLCBpbnQgcG9sYXJpdHkpOworZXh0ZXJuIGludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKTsKK2V4dGVybiBpbnQgbXBfZmluZF9pb2FwaWNfcGluKGludCBpb2FwaWMsIGludCBnc2kpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50CiBtcF9jb25maWdfYWNwaV9nc2kodW5zaWduZWQgY2hhciBudW1iZXIsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggcGluLApAQCAtMTQ4LDQgKzE2Myw4IEBACiAKIGV4dGVybiBwaHlzaWRfbWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwOwogCitleHRlcm4gaW50IGdlbmVyaWNfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICosIGNoYXIgKiwgY2hhciAqKTsKKworZXh0ZXJuIGludCBkZWZhdWx0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqLCBjaGFyICopOworCiAjZW5kaWYgLyogX0FTTV9YODZfTVBTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlY19kZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlY19kZWYuaAppbmRleCA1OTU2OGJjLi40YTdmOTZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWNfZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjX2RlZi5oCkBAIC0yNCwxNyArMjQsMTggQEAKICMgZW5kaWYKICNlbmRpZgogCi1zdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgewotCWNoYXIgbXBmX3NpZ25hdHVyZVs0XTsJCS8qICJfTVBfIgkJCSovCi0JdW5zaWduZWQgaW50IG1wZl9waHlzcHRyOwkvKiBDb25maWd1cmF0aW9uIHRhYmxlIGFkZHJlc3MJKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9sZW5ndGg7CS8qIE91ciBsZW5ndGggKHBhcmFncmFwaHMpCSovCi0JdW5zaWduZWQgY2hhciBtcGZfc3BlY2lmaWNhdGlvbjsvKiBTcGVjaWZpY2F0aW9uIHZlcnNpb24JKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9jaGVja3N1bTsJLyogQ2hlY2tzdW0gKG1ha2VzIHN1bSAwKQkqLwotCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmUxOwkvKiBTdGFuZGFyZCBvciBjb25maWd1cmF0aW9uID8JKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMjsJLyogQml0NyBzZXQgZm9yIElNQ1J8UElDCSovCi0JdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTM7CS8qIFVudXNlZCAoMCkJCQkqLwotCXVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmU0OwkvKiBVbnVzZWQgKDApCQkJKi8KLQl1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNTsJLyogVW51c2VkICgwKQkJCSovCisvKiBJbnRlbCBNUCBGbG9hdGluZyBQb2ludGVyIFN0cnVjdHVyZSAqLworc3RydWN0IG1wZl9pbnRlbCB7CisJY2hhciBzaWduYXR1cmVbNF07CQkvKiAiX01QXyIJCQkqLworCXVuc2lnbmVkIGludCBwaHlzcHRyOwkJLyogQ29uZmlndXJhdGlvbiB0YWJsZSBhZGRyZXNzCSovCisJdW5zaWduZWQgY2hhciBsZW5ndGg7CQkvKiBPdXIgbGVuZ3RoIChwYXJhZ3JhcGhzKQkqLworCXVuc2lnbmVkIGNoYXIgc3BlY2lmaWNhdGlvbjsJLyogU3BlY2lmaWNhdGlvbiB2ZXJzaW9uCSovCisJdW5zaWduZWQgY2hhciBjaGVja3N1bTsJCS8qIENoZWNrc3VtIChtYWtlcyBzdW0gMCkJKi8KKwl1bnNpZ25lZCBjaGFyIGZlYXR1cmUxOwkJLyogU3RhbmRhcmQgb3IgY29uZmlndXJhdGlvbiA/CSovCisJdW5zaWduZWQgY2hhciBmZWF0dXJlMjsJCS8qIEJpdDcgc2V0IGZvciBJTUNSfFBJQwkqLworCXVuc2lnbmVkIGNoYXIgZmVhdHVyZTM7CQkvKiBVbnVzZWQgKDApCQkJKi8KKwl1bnNpZ25lZCBjaGFyIGZlYXR1cmU0OwkJLyogVW51c2VkICgwKQkJCSovCisJdW5zaWduZWQgY2hhciBmZWF0dXJlNTsJCS8qIFVudXNlZCAoMCkJCQkqLwogfTsKIAogI2RlZmluZSBNUENfU0lHTkFUVVJFICJQQ01QIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAzNThhY2M1Li5mNGU1MDVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtMTgsMTEgKzE4LDE1IEBACiAjZGVmaW5lIF9FRkVSX0xNRQkJOCAgLyogTG9uZyBtb2RlIGVuYWJsZSAqLwogI2RlZmluZSBfRUZFUl9MTUEJCTEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8KICNkZWZpbmUgX0VGRVJfTlgJCTExIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCisjZGVmaW5lIF9FRkVSX1NWTUUJCTEyIC8qIEVuYWJsZSB2aXJ0dWFsaXphdGlvbiAqLworI2RlZmluZSBfRUZFUl9GRlhTUgkJMTQgLyogRW5hYmxlIEZhc3QgRlhTQVZFL0ZYUlNUT1IgKi8KIAogI2RlZmluZSBFRkVSX1NDRQkJKDE8PF9FRkVSX1NDRSkKICNkZWZpbmUgRUZFUl9MTUUJCSgxPDxfRUZFUl9MTUUpCiAjZGVmaW5lIEVGRVJfTE1BCQkoMTw8X0VGRVJfTE1BKQogI2RlZmluZSBFRkVSX05YCQkJKDE8PF9FRkVSX05YKQorI2RlZmluZSBFRkVSX1NWTUUJCSgxPDxfRUZFUl9TVk1FKQorI2RlZmluZSBFRkVSX0ZGWFNSCQkoMTw8X0VGRVJfRkZYU1IpCiAKIC8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BVcyAqLwogI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMAkJMHgwMDAwMDBjMQpAQCAtMzYwLDQgKzM2NCw5IEBACiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUzIgICAgMHgwMDAwMDQ4YgogI2RlZmluZSBNU1JfSUEzMl9WTVhfRVBUX1ZQSURfQ0FQICAgICAgIDB4MDAwMDA0OGMKIAorLyogQU1ELVYgTVNScyAqLworCisjZGVmaW5lIE1TUl9WTV9DUiAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAxMDExNAorI2RlZmluZSBNU1JfVk1fSFNBVkVfUEEgICAgICAgICAgICAgICAgIDB4YzAwMTAxMTcKKwogI2VuZGlmIC8qIF9BU01fWDg2X01TUl9JTkRFWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzMyLmgKaW5kZXggZTlmNWRiNy4uYTM3MjI5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaApAQCAtNCw4ICs0LDEyIEBACiBleHRlcm4gaW50IHB4bV90b19uaWQoaW50IHB4bSk7CiBleHRlcm4gdm9pZCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CiAKLSNpZmRlZiBDT05GSUdfTlVNQQorI2lmZGVmIENPTkZJR19ISUdITUVNCiBleHRlcm4gdm9pZCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCit7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X05VTUFfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKaW5kZXggMWU4YmQzMC4uOWYwYTVmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCkBAIC0zMSw2ICszMSw4IEBACiBleHRlcm4gaW50IGZvdW5kX251bWFxOwogZXh0ZXJuIGludCBnZXRfbWVtY2ZnX251bWFxKHZvaWQpOwogCitleHRlcm4gdm9pZCAqeHF1YWRfcG9ydGlvOworCiAvKgogICogU1lTX0NGR19EQVRBX1BSSVZfQUREUiwgc3RydWN0IGVhY2hxdWFkbWVtLCBhbmQgc3RydWN0IHN5c19jZmdfZGF0YSBhcmUgdGhlCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzN2JjNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9OVU1BUV9BUElDX0gKLSNkZWZpbmUgX19BU01fTlVNQVFfQVBJQ19ICi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotCi0jZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gJkNQVV9NQVNLX0FMTDsKLX0KLQotI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoMSkKLSNkZWZpbmUgZXNyX2Rpc2FibGUgKDEpCi0KLSNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgZGVzdF9Mb3dlc3RQcmlvCi0jZGVmaW5lIElOVF9ERVNUX01PREUgMCAgICAgLyogcGh5c2ljYWwgZGVsaXZlcnkgb24gTE9DQUwgcXVhZCAqLwotIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCi17Ci0JcmV0dXJuIHBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLX0KLSNkZWZpbmUgYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAoYXBpY2lkICYgMHhGMCkKLQotc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FwaWNfbGRyKHZvaWQpCi17Ci0JLyogQWxyZWFkeSBkb25lIGluIE5VTUEtUSBmaXJtd2FyZSAqLwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCi17Ci0JcHJpbnRrKCJFbmFibGluZyBBUElDIG1vZGU6ICAlcy4gIFVzaW5nICVkIEkvTyBBUElDc1xuIiwKLQkJIk5VTUEtUSIsIG5yX2lvYXBpY3MpOwotfQotCi0vKgotICogU2tpcCBhZGRpbmcgdGhlIHRpbWVyIGludCBvbiBzZWNvbmRhcnkgbm9kZXMsIHdoaWNoIGNhdXNlcwotICogYSBzbWFsbCBidXQgcGFpbmZ1bCByaWZ0IGluIHRoZSB0aW1lLXNwYWNlIGNvbnRpbnV1bS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbXVsdGlfdGltZXJfY2hlY2soaW50IGFwaWMsIGludCBpcnEpCi17Ci0JcmV0dXJuIGFwaWMgIT0gMCAmJiBpcnEgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQotewotCS8qIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KLQlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4RlVMKTsKLX0KLQotLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KLWV4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCi17Ci0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLQlyZXR1cm4gKGludCljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdOwotfQotCi0vKgotICogU3VwcG9ydGluZyBvdmVyIDYwIGNwdXMgb24gTlVNQS1RIHJlcXVpcmVzIGEgbG9jYWxpdHktZGVwZW5kZW50Ci0gKiBjcHUgdG8gQVBJQyBJRCByZWxhdGlvbiB0byBwcm9wZXJseSBpbnRlcmFjdCB3aXRoIHRoZSBpbnRlbGxpZ2VudAotICogbW9kZSBvZiB0aGUgY2x1c3RlciBjb250cm9sbGVyLgotICovCi1zdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCi17Ci0JaWYgKG1wc19jcHUgPCA2MCkKLQkJcmV0dXJuICgobXBzX2NwdSA+PiAyKSA8PCA0KSB8ICgxIDw8IChtcHNfY3B1ICYgMHgzKSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKSAKLXsKLQlyZXR1cm4gbG9naWNhbF9hcGljaWQgPj4gNDsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGFwaWNpZF90b19jcHVfcHJlc2VudChpbnQgbG9naWNhbF9hcGljaWQpCi17Ci0JaW50IG5vZGUgPSBhcGljaWRfdG9fbm9kZShsb2dpY2FsX2FwaWNpZCk7Ci0JaW50IGNwdSA9IF9fZmZzKGxvZ2ljYWxfYXBpY2lkICYgMHhmKTsKLQotCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQoY3B1ICsgNCpub2RlKTsKLX0KLQotZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsKLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQotewotCWludCBudW1fcXVhZHMgPSBudW1fb25saW5lX25vZGVzKCk7Ci0KLQlpZiAobnVtX3F1YWRzIDw9IDEpCi0gICAgICAgCQlyZXR1cm47Ci0KLQlwcmludGsoIlJlbWFwcGluZyBjcm9zcy1xdWFkIHBvcnQgSS9PIGZvciAlZCBxdWFkc1xuIiwgbnVtX3F1YWRzKTsKLQl4cXVhZF9wb3J0aW8gPSBpb3JlbWFwKFhRVUFEX1BPUlRJT19CQVNFLCBudW1fcXVhZHMqWFFVQURfUE9SVElPX1FVQUQpOwotCXByaW50aygieHF1YWRfcG9ydGlvIHZhZGRyIDB4JTA4bHgsIGxlbiAlMDhseFxuIiwKLQkJKHVfbG9uZykgeHF1YWRfcG9ydGlvLCAodV9sb25nKSBudW1fcXVhZHMqWFFVQURfUE9SVElPX1FVQUQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKLXsKLX0KLQotLyoKLSAqIFdlIHVzZSBwaHlzaWNhbCBhcGljaWRzIGhlcmUsIG5vdCBsb2dpY2FsLCBzbyBqdXN0IHJldHVybiB0aGUgZGVmYXVsdAotICogcGh5c2ljYWwgYnJvYWRjYXN0IHRvIHN0b3AgcGVvcGxlIGZyb20gYnJlYWtpbmcgdXMKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKLXsKLQlyZXR1cm4gKGludCkgMHhGOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlyZXR1cm4gKGludCkgMHhGOwotfQotCi0vKiBObyBOVU1BLVEgYm94IGhhcyBhIEhUIENQVSwgYnV0IGl0IGNhbid0IGh1cnQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvZGUuICovCi1zdGF0aWMgaW5saW5lIHUzMiBwaHlzX3BrZ19pZCh1MzIgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9OVU1BUV9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2FwaWNkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxMmE0Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX05VTUFRX0FQSUNERUZfSAotI2RlZmluZSBfX0FTTV9OVU1BUV9BUElDREVGX0gKLQotCi0jZGVmaW5lIEFQSUNfSURfTUFTSyAoMHhGPDwyNCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JICAgICAgICByZXR1cm4gKCgoeCk+PjI0KSYweDBGKTsKLX0KLQotI2RlZmluZSAgICAgICAgIEdFVF9BUElDX0lEKHgpICBnZXRfYXBpY19pZCh4KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL2lwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4Mzc0YzYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvaXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX05VTUFRX0lQSV9ICi0jZGVmaW5lIF9fQVNNX05VTUFRX0lQSV9ICi0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci12b2lkIHNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9OVU1BUV9JUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvbXBwYXJzZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEvbXBwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmVlZWZjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL21wcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9OVU1BUV9NUFBBUlNFX0gKLSNkZWZpbmUgX19BU01fTlVNQVFfTVBQQVJTRV9ICi0KLWV4dGVybiB2b2lkIG51bWFxX21wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqLCBjaGFyICosIGNoYXIgKik7Ci0KLSNlbmRpZiAvKiBfX0FTTV9OVU1BUV9NUFBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL3dha2VjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxL3dha2VjcHUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0OTlkZi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS93YWtlY3B1LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX05VTUFRX1dBS0VDUFVfSAotI2RlZmluZSBfX0FTTV9OVU1BUV9XQUtFQ1BVX0gKLQotLyogVGhpcyBmaWxlIGNvcGVzIHdpdGggbWFjaGluZXMgdGhhdCB3YWtldXAgc2Vjb25kYXJ5IENQVXMgYnkgTk1JcyAqLwotCi0jZGVmaW5lIFRSQU1QT0xJTkVfUEhZU19MT1cgKDB4OCkKLSNkZWZpbmUgVFJBTVBPTElORV9QSFlTX0hJR0ggKDB4YSkKLQotLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgaGVyZSBiZWNhdXNlIHdlIHVzZSBOTUkncyB0byBib290IGluc3RlYWQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KGF0b21pY190ICpkZWFzc2VydCkKLXsKLX0KLQotLyoKLSAqIEJlY2F1c2Ugd2UgdXNlIE5NSXMgcmF0aGVyIHRoYW4gdGhlIElOSVQtU1RBUlRVUCBzZXF1ZW5jZSB0bwotICogYm9vdHN0cmFwIHRoZSBDUFVzLCB0aGUgQVBJQyBtYXkgYmUgaW4gYSB3ZWlyZCBzdGF0ZS4gS2ljayBpdC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYyh2b2lkKQotewotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCi17Ci0JcHJpbnRrKCJTdG9yaW5nIE5NSSB2ZWN0b3JcbiIpOwotCSpoaWdoID0KLQkgICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19ISUdIKSk7Ci0JKmxvdyA9Ci0JICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChUUkFNUE9MSU5FX1BIWVNfTE9XKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX05NSV92ZWN0b3IodW5zaWduZWQgc2hvcnQgKmhpZ2gsIHVuc2lnbmVkIHNob3J0ICpsb3cpCi17Ci0JcHJpbnRrKCJSZXN0b3JpbmcgTk1JIHZlY3RvclxuIik7Ci0JKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoVFJBTVBPTElORV9QSFlTX0hJR0gpKSA9Ci0JCQkJCQkJCSAqaGlnaDsKLQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChUUkFNUE9MSU5FX1BIWVNfTE9XKSkgPQotCQkJCQkJCQkgKmxvdzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCkKLXsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX05VTUFRX1dBS0VDUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDc3NjU3OTEuLjg5ZWQ5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEsNDIgKzEsMTEgQEAKICNpZm5kZWYgX0FTTV9YODZfUEFHRV9ICiAjZGVmaW5lIF9BU01fWDg2X1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uc3QuaD4KLQotLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KLSNkZWZpbmUgUEFHRV9TSElGVAkxMgotI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLFVMKSA8PCBQQUdFX1NISUZUKQotI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLCQkoKHBoeXNfYWRkcl90KSgxVUxMIDw8IF9fUEhZU0lDQUxfTUFTS19TSElGVCkgLSAxKQotI2RlZmluZSBfX1ZJUlRVQUxfTUFTSwkJKCgxVUwgPDwgX19WSVJUVUFMX01BU0tfU0hJRlQpIC0gMSkKLQotLyogQ2FzdCBQQUdFX01BU0sgdG8gYSBzaWduZWQgdHlwZSBzbyB0aGF0IGl0IGlzIHNpZ24tZXh0ZW5kZWQgaWYKLSAgIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIGJ1dCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlIGxhcmdlcgotICAgKGllLCAzMi1iaXQgUEFFKS4gKi8KLSNkZWZpbmUgUEhZU0lDQUxfUEFHRV9NQVNLCSgoKHNpZ25lZCBsb25nKVBBR0VfTUFTSykgJiBfX1BIWVNJQ0FMX01BU0spCi0KLS8qIFBURV9QRk5fTUFTSyBleHRyYWN0cyB0aGUgUEZOIGZyb20gYSAocHRlfHBtZHxwdWR8cGdkKXZhbF90ICovCi0jZGVmaW5lIFBURV9QRk5fTUFTSwkJKChwdGV2YWxfdClQSFlTSUNBTF9QQUdFX01BU0spCi0KLS8qIFBURV9GTEFHU19NQVNLIGV4dHJhY3RzIHRoZSBmbGFncyBmcm9tIGEgKHB0ZXxwbWR8cHVkfHBnZCl2YWxfdCAqLwotI2RlZmluZSBQVEVfRkxBR1NfTUFTSwkJKH5QVEVfUEZOX01BU0spCi0KLSNkZWZpbmUgUE1EX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUE1EX1NISUZUKQotI2RlZmluZSBQTURfUEFHRV9NQVNLCQkofihQTURfUEFHRV9TSVpFLTEpKQotCi0jZGVmaW5lIEhQQUdFX1NISUZUCQlQTURfU0hJRlQKLSNkZWZpbmUgSFBBR0VfU0laRQkJKF9BQygxLFVMKSA8PCBIUEFHRV9TSElGVCkKLSNkZWZpbmUgSFBBR0VfTUFTSwkJKH4oSFBBR0VfU0laRSAtIDEpKQotI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCkKLQotI2RlZmluZSBIVUdFX01BWF9IU1RBVEUgMgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2luY2x1ZGUgPGFzbS9wYWdlXzY0Lmg+CkBAIC00NCwzOCArMTMsMTggQEAKICNpbmNsdWRlIDxhc20vcGFnZV8zMi5oPgogI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KIAotI2RlZmluZSBQQUdFX09GRlNFVAkJKCh1bnNpZ25lZCBsb25nKV9fUEFHRV9PRkZTRVQpCi0KLSNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKLQkoKChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFJFQURfSU1QTElFU19FWEVDKSA/IFZNX0VYRUMgOiAwICkgfCBcCi0JIFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCi0KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotdHlwZWRlZiBzdHJ1Y3QgeyBwZ2R2YWxfdCBwZ2Q7IH0gcGdkX3Q7Ci10eXBlZGVmIHN0cnVjdCB7IHBncHJvdHZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDsKLQotZXh0ZXJuIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2Vucik7Ci1leHRlcm4gaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKLWV4dGVybiB2b2lkIG1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJICAgICAgIHBncHJvdF90IHZtYV9wcm90KTsKLWV4dGVybiB2b2lkIHVubWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJIHBncHJvdF90IHZtYV9wcm90KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7Ci0KIHN0cnVjdCBwYWdlOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJc3RydWN0IHBhZ2UgKnBnKQorCQkJCSAgIHN0cnVjdCBwYWdlICpwZykKIHsKIAljbGVhcl9wYWdlKHBhZ2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJc3RydWN0IHBhZ2UgKnRvcGFnZSkKKwkJCQkgIHN0cnVjdCBwYWdlICp0b3BhZ2UpCiB7CiAJY29weV9wYWdlKHRvLCBmcm9tKTsKIH0KQEAgLTg0LDk5ICszMyw2IEBACiAJYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSIHwgX19HRlBfWkVSTyB8IG1vdmFibGVmbGFncywgdm1hLCB2YWRkcikKICNkZWZpbmUgX19IQVZFX0FSQ0hfQUxMT0NfWkVST0VEX1VTRVJfSElHSFBBR0UKIAotc3RhdGljIGlubGluZSBwZ2RfdCBuYXRpdmVfbWFrZV9wZ2QocGdkdmFsX3QgdmFsKQotewotCXJldHVybiAocGdkX3QpIHsgdmFsIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGdkdmFsX3QgbmF0aXZlX3BnZF92YWwocGdkX3QgcGdkKQotewotCXJldHVybiBwZ2QucGdkOwotfQotCi0jaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCi0jaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0Ci10eXBlZGVmIHN0cnVjdCB7IHB1ZHZhbF90IHB1ZDsgfSBwdWRfdDsKLQotc3RhdGljIGlubGluZSBwdWRfdCBuYXRpdmVfbWFrZV9wdWQocG1kdmFsX3QgdmFsKQotewotCXJldHVybiAocHVkX3QpIHsgdmFsIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHVkdmFsX3QgbmF0aXZlX3B1ZF92YWwocHVkX3QgcHVkKQotewotCXJldHVybiBwdWQucHVkOwotfQotI2Vsc2UJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSAzICovCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgotCi1zdGF0aWMgaW5saW5lIHB1ZHZhbF90IG5hdGl2ZV9wdWRfdmFsKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gbmF0aXZlX3BnZF92YWwocHVkLnBnZCk7Ci19Ci0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCi0KLXR5cGVkZWYgc3RydWN0IHsgcG1kdmFsX3QgcG1kOyB9IHBtZF90OwotCi1zdGF0aWMgaW5saW5lIHBtZF90IG5hdGl2ZV9tYWtlX3BtZChwbWR2YWxfdCB2YWwpCi17Ci0JcmV0dXJuIChwbWRfdCkgeyB2YWwgfTsKLX0KLQotc3RhdGljIGlubGluZSBwbWR2YWxfdCBuYXRpdmVfcG1kX3ZhbChwbWRfdCBwbWQpCi17Ci0JcmV0dXJuIHBtZC5wbWQ7Ci19Ci0jZWxzZSAgLyogUEFHRVRBQkxFX0xFVkVMUyA9PSAyICovCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgotCi1zdGF0aWMgaW5saW5lIHBtZHZhbF90IG5hdGl2ZV9wbWRfdmFsKHBtZF90IHBtZCkKLXsKLQlyZXR1cm4gbmF0aXZlX3BnZF92YWwocG1kLnB1ZC5wZ2QpOwotfQotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPj0gMyAqLwotCi1zdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9tYWtlX3B0ZShwdGV2YWxfdCB2YWwpCi17Ci0JcmV0dXJuIChwdGVfdCkgeyAucHRlID0gdmFsIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRldmFsX3QgbmF0aXZlX3B0ZV92YWwocHRlX3QgcHRlKQotewotCXJldHVybiBwdGUucHRlOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZXZhbF90IG5hdGl2ZV9wdGVfZmxhZ3MocHRlX3QgcHRlKQotewotCXJldHVybiBuYXRpdmVfcHRlX3ZhbChwdGUpICYgUFRFX0ZMQUdTX01BU0s7Ci19Ci0KLSNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKLSNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCi0KLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlICAvKiAhQ09ORklHX1BBUkFWSVJUICovCi0KLSNkZWZpbmUgcGdkX3ZhbCh4KQluYXRpdmVfcGdkX3ZhbCh4KQotI2RlZmluZSBfX3BnZCh4KQluYXRpdmVfbWFrZV9wZ2QoeCkKLQotI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECi0jZGVmaW5lIHB1ZF92YWwoeCkJbmF0aXZlX3B1ZF92YWwoeCkKLSNkZWZpbmUgX19wdWQoeCkJbmF0aXZlX21ha2VfcHVkKHgpCi0jZW5kaWYKLQotI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECi0jZGVmaW5lIHBtZF92YWwoeCkJbmF0aXZlX3BtZF92YWwoeCkKLSNkZWZpbmUgX19wbWQoeCkJbmF0aXZlX21ha2VfcG1kKHgpCi0jZW5kaWYKLQotI2RlZmluZSBwdGVfdmFsKHgpCW5hdGl2ZV9wdGVfdmFsKHgpCi0jZGVmaW5lIHB0ZV9mbGFncyh4KQluYXRpdmVfcHRlX2ZsYWdzKHgpCi0jZGVmaW5lIF9fcHRlKHgpCW5hdGl2ZV9tYWtlX3B0ZSh4KQotCi0jZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCi0KICNkZWZpbmUgX19wYSh4KQkJX19waHlzX2FkZHIoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBfX3BhX25vZGVidWcoeCkJX19waHlzX2FkZHJfbm9kZWJ1ZygodW5zaWduZWQgbG9uZykoeCkpCiAvKiBfX3BhX3N5bWJvbCBzaG91bGQgYmUgdXNlZCBmb3IgQyB2aXNpYmxlIHN5bWJvbHMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKaW5kZXggYmNkZTBkNy4uZGE0ZTc2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzIuaApAQCAtMSw4MiArMSwxNCBAQAogI2lmbmRlZiBfQVNNX1g4Nl9QQUdFXzMyX0gKICNkZWZpbmUgX0FTTV9YODZfUEFHRV8zMl9ICiAKLS8qCi0gKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuCi0gKgotICogQSBfX1BBR0VfT0ZGU0VUIG9mIDB4QzAwMDAwMDAgbWVhbnMgdGhhdCB0aGUga2VybmVsIGhhcwotICogYSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygb25lIGdpZ2FieXRlLCB3aGljaCBsaW1pdHMgdGhlCi0gKiBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IHlvdSBjYW4gdXNlIHRvIGFib3V0IDk1ME1CLgotICoKLSAqIElmIHlvdSB3YW50IG1vcmUgcGh5c2ljYWwgbWVtb3J5IHRoYW4gdGhpcyB0aGVuIHNlZSB0aGUgQ09ORklHX0hJR0hNRU00RwotICogYW5kIENPTkZJR19ISUdITUVNNjRHIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgotICovCi0jZGVmaW5lIF9fUEFHRV9PRkZTRVQJCV9BQyhDT05GSUdfUEFHRV9PRkZTRVQsIFVMKQotCi0jaWZkZWYgQ09ORklHXzRLU1RBQ0tTCi0jZGVmaW5lIFRIUkVBRF9PUkRFUgkwCi0jZWxzZQotI2RlZmluZSBUSFJFQURfT1JERVIJMQotI2VuZGlmCi0jZGVmaW5lIFRIUkVBRF9TSVpFIAkoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKLQotI2RlZmluZSBTVEFDS0ZBVUxUX1NUQUNLIDAKLSNkZWZpbmUgRE9VQkxFRkFVTFRfU1RBQ0sgMQotI2RlZmluZSBOTUlfU1RBQ0sgMAotI2RlZmluZSBERUJVR19TVEFDSyAwCi0jZGVmaW5lIE1DRV9TVEFDSyAwCi0jZGVmaW5lIE5fRVhDRVBUSU9OX1NUQUNLUyAxCi0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotLyogNDQ9MzIrMTIsIHRoZSBsaW1pdCB3ZSBjYW4gZml0IGludG8gYW4gdW5zaWduZWQgbG9uZyBwZm4gKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ0Ci0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCi0jZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMworI2luY2x1ZGUgPGFzbS9wYWdlXzMyX3R5cGVzLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi10eXBlZGVmIHU2NAlwdGV2YWxfdDsKLXR5cGVkZWYgdTY0CXBtZHZhbF90OwotdHlwZWRlZiB1NjQJcHVkdmFsX3Q7Ci10eXBlZGVmIHU2NAlwZ2R2YWxfdDsKLXR5cGVkZWYgdTY0CXBncHJvdHZhbF90OwotCi10eXBlZGVmIHVuaW9uIHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIHB0ZV9sb3csIHB0ZV9oaWdoOwotCX07Ci0JcHRldmFsX3QgcHRlOwotfSBwdGVfdDsKLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18KLSAqLwotI2Vsc2UgIC8qICFDT05GSUdfWDg2X1BBRSAqLwotI2RlZmluZSBfX1BIWVNJQ0FMX01BU0tfU0hJRlQJMzIKLSNkZWZpbmUgX19WSVJUVUFMX01BU0tfU0hJRlQJMzIKLSNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwkyCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7Ci0KLXR5cGVkZWYgdW5pb24gewotCXB0ZXZhbF90IHB0ZTsKLQlwdGV2YWxfdCBwdGVfbG93OwotfSBwdGVfdDsKLQotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi10eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKICNkZWZpbmUgSEFWRV9BUkNIX0hVR0VUTEJfVU5NQVBQRURfQVJFQQogI2VuZGlmCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIF9fcGh5c19hZGRyX25vZGVidWcoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUKQogI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKQEAgLTg5LDIzICsyMSw2IEBACiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYgLyogQ09ORklHX0ZMQVRNRU0gKi8KIAotZXh0ZXJuIGludCBueF9lbmFibGVkOwotCi0vKgotICogVGhpcyBtdWNoIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIHZtYWxsb2MoKSBhbmQgaW9tYXAoKQotICogYXMgd2VsbCBhcyBmaXhtYXAgbWFwcGluZ3MuCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgX19WTUFMTE9DX1JFU0VSVkU7Ci1leHRlcm4gaW50IHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OwotCi1leHRlcm4gdm9pZCBmaW5kX2xvd19wZm5fcmFuZ2Uodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGVuZCk7Ci1leHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7Ci1leHRlcm4gdm9pZCBzZXR1cF9ib290bWVtX2FsbG9jYXRvcih2b2lkKTsKLQotCiAjaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKICNpbmNsdWRlIDxhc20vbW14Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWU0YTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFHRV8zMl9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEFHRV8zMl9ERUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKKy8qCisgKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuCisgKgorICogQSBfX1BBR0VfT0ZGU0VUIG9mIDB4QzAwMDAwMDAgbWVhbnMgdGhhdCB0aGUga2VybmVsIGhhcworICogYSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygb25lIGdpZ2FieXRlLCB3aGljaCBsaW1pdHMgdGhlCisgKiBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IHlvdSBjYW4gdXNlIHRvIGFib3V0IDk1ME1CLgorICoKKyAqIElmIHlvdSB3YW50IG1vcmUgcGh5c2ljYWwgbWVtb3J5IHRoYW4gdGhpcyB0aGVuIHNlZSB0aGUgQ09ORklHX0hJR0hNRU00RworICogYW5kIENPTkZJR19ISUdITUVNNjRHIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICovCisjZGVmaW5lIF9fUEFHRV9PRkZTRVQJCV9BQyhDT05GSUdfUEFHRV9PRkZTRVQsIFVMKQorCisjaWZkZWYgQ09ORklHXzRLU1RBQ0tTCisjZGVmaW5lIFRIUkVBRF9PUkRFUgkwCisjZWxzZQorI2RlZmluZSBUSFJFQURfT1JERVIJMQorI2VuZGlmCisjZGVmaW5lIFRIUkVBRF9TSVpFIAkoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKKworI2RlZmluZSBTVEFDS0ZBVUxUX1NUQUNLIDAKKyNkZWZpbmUgRE9VQkxFRkFVTFRfU1RBQ0sgMQorI2RlZmluZSBOTUlfU1RBQ0sgMAorI2RlZmluZSBERUJVR19TVEFDSyAwCisjZGVmaW5lIE1DRV9TVEFDSyAwCisjZGVmaW5lIE5fRVhDRVBUSU9OX1NUQUNLUyAxCisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorLyogNDQ9MzIrMTIsIHRoZSBsaW1pdCB3ZSBjYW4gZml0IGludG8gYW4gdW5zaWduZWQgbG9uZyBwZm4gKi8KKyNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ0CisjZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCisKKyNlbHNlICAvKiAhQ09ORklHX1g4Nl9QQUUgKi8KKyNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTMyCisjZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCisjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFRoaXMgbXVjaCBhZGRyZXNzIHNwYWNlIGlzIHJlc2VydmVkIGZvciB2bWFsbG9jKCkgYW5kIGlvbWFwKCkKKyAqIGFzIHdlbGwgYXMgZml4bWFwIG1hcHBpbmdzLgorICovCitleHRlcm4gdW5zaWduZWQgaW50IF9fVk1BTExPQ19SRVNFUlZFOworZXh0ZXJuIGludCBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKKworZXh0ZXJuIHZvaWQgZmluZF9sb3dfcGZuX3JhbmdlKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgaW5pdG1lbV9pbml0KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdG1lbV9hbGxvY2F0b3Iodm9pZCk7CisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QQUdFXzMyX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCmluZGV4IDVlYmNhMjkuLjA3MjY5NGVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCkBAIC0xLDEwNSArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X1BBR0VfNjRfSAogI2RlZmluZSBfQVNNX1g4Nl9QQUdFXzY0X0gKIAotI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTQKLQotI2RlZmluZSBUSFJFQURfT1JERVIJMQotI2RlZmluZSBUSFJFQURfU0laRSAgKFBBR0VfU0laRSA8PCBUSFJFQURfT1JERVIpCi0jZGVmaW5lIENVUlJFTlRfTUFTSyAofihUSFJFQURfU0laRSAtIDEpKQotCi0jZGVmaW5lIEVYQ0VQVElPTl9TVEFDS19PUkRFUiAwCi0jZGVmaW5lIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFIDw8IEVYQ0VQVElPTl9TVEFDS19PUkRFUikKLQotI2RlZmluZSBERUJVR19TVEFDS19PUkRFUiAoRVhDRVBUSU9OX1NUQUNLX09SREVSICsgMSkKLSNkZWZpbmUgREVCVUdfU1RLU1ogKFBBR0VfU0laRSA8PCBERUJVR19TVEFDS19PUkRFUikKLQotI2RlZmluZSBJUlFTVEFDS19PUkRFUiAyCi0jZGVmaW5lIElSUVNUQUNLU0laRSAoUEFHRV9TSVpFIDw8IElSUVNUQUNLX09SREVSKQotCi0jZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQotI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCi0jZGVmaW5lIE5NSV9TVEFDSyAzCi0jZGVmaW5lIERFQlVHX1NUQUNLIDQKLSNkZWZpbmUgTUNFX1NUQUNLIDUKLSNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCi0KLSNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQotCi0vKgotICogU2V0IF9fUEFHRV9PRkZTRVQgdG8gdGhlIG1vc3QgbmVnYXRpdmUgcG9zc2libGUgYWRkcmVzcyArCi0gKiBQR0RJUl9TSVpFKjE2IChwZ2Qgc2xvdCAyNzIpLiAgVGhlIGdhcCBpcyB0byBhbGxvdyBhIHNwYWNlIGZvciBhCi0gKiBoeXBlcnZpc29yIHRvIGZpdC4gIENob29zaW5nIDE2IHNsb3RzIGhlcmUgaXMgYXJiaXRyYXJ5LCBidXQgaXQncwotICogd2hhdCBYZW4gcmVxdWlyZXMuCi0gKi8KLSNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgX0FDKDB4ZmZmZjg4MDAwMDAwMDAwMCwgVUwpCi0KLSNkZWZpbmUgX19QSFlTSUNBTF9TVEFSVAlDT05GSUdfUEhZU0lDQUxfU1RBUlQKLSNkZWZpbmUgX19LRVJORUxfQUxJR04JCTB4MjAwMDAwCi0KLS8qCi0gKiBNYWtlIHN1cmUga2VybmVsIGlzIGFsaWduZWQgdG8gMk1CIGFkZHJlc3MuIENhdGNoaW5nIGl0IGF0IGNvbXBpbGUKLSAqIHRpbWUgaXMgYmV0dGVyLiBDaGFuZ2UgeW91ciBjb25maWcgZmlsZSBhbmQgY29tcGlsZSB0aGUga2VybmVsCi0gKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCi0gKi8KLSNpZiAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUICUgX19LRVJORUxfQUxJR04pICE9IDAKLSNlcnJvciAiQ09ORklHX1BIWVNJQ0FMX1NUQVJUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyTUIiCi0jZW5kaWYKLQotI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJKF9fU1RBUlRfS0VSTkVMX21hcCArIF9fUEhZU0lDQUxfU1RBUlQpCi0jZGVmaW5lIF9fU1RBUlRfS0VSTkVMX21hcAlfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKLQotLyogU2VlIERvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5IG1hcC4gKi8KLSNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ2Ci0jZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTQ4Ci0KLS8qCi0gKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCi0gKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgotICovCi0jZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwotdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwotCi0vKiBkdXBsaWNhdGVkIHRvIHRoZSBvbmUgaW4gYm9vdG1lbS5oICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKLSNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJKHgpCi0KLS8qCi0gKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgotICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgeyBwdGV2YWxfdCBwdGU7IH0gcHRlX3Q7Ci0KLSNkZWZpbmUgdm1lbW1hcCAoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCkKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOwotCi1leHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7Ci1leHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7Ci0KLWV4dGVybiB2b2lkIGluaXRfZXh0cmFfbWFwcGluZ191Yyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi0jZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jaWZkZWYgQ09ORklHX0ZMQVRNRU0KLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgICAgICAgICAgKChwZm4pIDwgbWF4X3BmbikKLSNlbmRpZgotCisjaW5jbHVkZSA8YXNtL3BhZ2VfNjRfdHlwZXMuaD4KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBR0VfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGM5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0X3R5cGVzLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QQUdFXzY0X0RFRlNfSAorI2RlZmluZSBfQVNNX1g4Nl9QQUdFXzY0X0RFRlNfSAorCisjZGVmaW5lIFRIUkVBRF9PUkRFUgkxCisjZGVmaW5lIFRIUkVBRF9TSVpFICAoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKKyNkZWZpbmUgQ1VSUkVOVF9NQVNLICh+KFRIUkVBRF9TSVpFIC0gMSkpCisKKyNkZWZpbmUgRVhDRVBUSU9OX1NUQUNLX09SREVSIDAKKyNkZWZpbmUgRVhDRVBUSU9OX1NUS1NaIChQQUdFX1NJWkUgPDwgRVhDRVBUSU9OX1NUQUNLX09SREVSKQorCisjZGVmaW5lIERFQlVHX1NUQUNLX09SREVSIChFWENFUFRJT05fU1RBQ0tfT1JERVIgKyAxKQorI2RlZmluZSBERUJVR19TVEtTWiAoUEFHRV9TSVpFIDw8IERFQlVHX1NUQUNLX09SREVSKQorCisjZGVmaW5lIElSUV9TVEFDS19PUkRFUiAyCisjZGVmaW5lIElSUV9TVEFDS19TSVpFIChQQUdFX1NJWkUgPDwgSVJRX1NUQUNLX09SREVSKQorCisjZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQorI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCisjZGVmaW5lIE5NSV9TVEFDSyAzCisjZGVmaW5lIERFQlVHX1NUQUNLIDQKKyNkZWZpbmUgTUNFX1NUQUNLIDUKKyNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCisKKyNkZWZpbmUgUFVEX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQorI2RlZmluZSBQVURfUEFHRV9NQVNLCQkofihQVURfUEFHRV9TSVpFLTEpKQorCisvKgorICogU2V0IF9fUEFHRV9PRkZTRVQgdG8gdGhlIG1vc3QgbmVnYXRpdmUgcG9zc2libGUgYWRkcmVzcyArCisgKiBQR0RJUl9TSVpFKjE2IChwZ2Qgc2xvdCAyNzIpLiAgVGhlIGdhcCBpcyB0byBhbGxvdyBhIHNwYWNlIGZvciBhCisgKiBoeXBlcnZpc29yIHRvIGZpdC4gIENob29zaW5nIDE2IHNsb3RzIGhlcmUgaXMgYXJiaXRyYXJ5LCBidXQgaXQncworICogd2hhdCBYZW4gcmVxdWlyZXMuCisgKi8KKyNkZWZpbmUgX19QQUdFX09GRlNFVCAgICAgICAgICAgX0FDKDB4ZmZmZjg4MDAwMDAwMDAwMCwgVUwpCisKKyNkZWZpbmUgX19QSFlTSUNBTF9TVEFSVAlDT05GSUdfUEhZU0lDQUxfU1RBUlQKKyNkZWZpbmUgX19LRVJORUxfQUxJR04JCTB4MjAwMDAwCisKKy8qCisgKiBNYWtlIHN1cmUga2VybmVsIGlzIGFsaWduZWQgdG8gMk1CIGFkZHJlc3MuIENhdGNoaW5nIGl0IGF0IGNvbXBpbGUKKyAqIHRpbWUgaXMgYmV0dGVyLiBDaGFuZ2UgeW91ciBjb25maWcgZmlsZSBhbmQgY29tcGlsZSB0aGUga2VybmVsCisgKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCisgKi8KKyNpZiAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUICUgX19LRVJORUxfQUxJR04pICE9IDAKKyNlcnJvciAiQ09ORklHX1BIWVNJQ0FMX1NUQVJUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyTUIiCisjZW5kaWYKKworI2RlZmluZSBfX1NUQVJUX0tFUk5FTAkJKF9fU1RBUlRfS0VSTkVMX21hcCArIF9fUEhZU0lDQUxfU1RBUlQpCisjZGVmaW5lIF9fU1RBUlRfS0VSTkVMX21hcAlfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKKworLyogU2VlIERvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVtb3J5IG1hcC4gKi8KKyNkZWZpbmUgX19QSFlTSUNBTF9NQVNLX1NISUZUCTQ2CisjZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTQ4CisKKy8qCisgKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCisgKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgorICovCisjZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwordm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOworCisvKiBkdXBsaWNhdGVkIHRvIHRoZSBvbmUgaW4gYm9vdG1lbS5oICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKKyNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJKHgpCisKKyNkZWZpbmUgdm1lbW1hcCAoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQpOworCitleHRlcm4gdm9pZCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CisKK2V4dGVybiB2b2lkIGluaXRfZXh0cmFfbWFwcGluZ191Yyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBpbml0X2V4dHJhX21hcHBpbmdfd2IodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgICAgICAgICAgKChwZm4pIDwgbWF4X3BmbikKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfUEFHRV82NF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDYyNWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFHRV9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEFHRV9ERUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKKy8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCisjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKyNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSxVTCkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2RlZmluZSBfX1BIWVNJQ0FMX01BU0sJCSgocGh5c19hZGRyX3QpKDFVTEwgPDwgX19QSFlTSUNBTF9NQVNLX1NISUZUKSAtIDEpCisjZGVmaW5lIF9fVklSVFVBTF9NQVNLCQkoKDFVTCA8PCBfX1ZJUlRVQUxfTUFTS19TSElGVCkgLSAxKQorCisvKiBDYXN0IFBBR0VfTUFTSyB0byBhIHNpZ25lZCB0eXBlIHNvIHRoYXQgaXQgaXMgc2lnbi1leHRlbmRlZCBpZgorICAgdmlydHVhbCBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgYnV0IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgbGFyZ2VyCisgICAoaWUsIDMyLWJpdCBQQUUpLiAqLworI2RlZmluZSBQSFlTSUNBTF9QQUdFX01BU0sJKCgoc2lnbmVkIGxvbmcpUEFHRV9NQVNLKSAmIF9fUEhZU0lDQUxfTUFTSykKKworI2RlZmluZSBQTURfUEFHRV9TSVpFCQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9QQUdFX01BU0sJCSh+KFBNRF9QQUdFX1NJWkUtMSkpCisKKyNkZWZpbmUgSFBBR0VfU0hJRlQJCVBNRF9TSElGVAorI2RlZmluZSBIUEFHRV9TSVpFCQkoX0FDKDEsVUwpIDw8IEhQQUdFX1NISUZUKQorI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMSkpCisjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjZGVmaW5lIEhVR0VfTUFYX0hTVEFURSAyCisKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCSgodW5zaWduZWQgbG9uZylfX1BBR0VfT0ZGU0VUKQorCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUyBcCisJKCgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2luY2x1ZGUgPGFzbS9wYWdlXzY0X3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wYWdlXzMyX3R5cGVzLmg+CisjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcGdwcm90OworCitleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKK2V4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOworZXh0ZXJuIHZvaWQgbWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7CitleHRlcm4gdm9pZCB1bm1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkvKiBfQVNNX1g4Nl9QQUdFX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggZTI5OTI4Ny4uMDYxN2Q1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC00LDcgKzQsNyBAQAogICogcGFyYS12aXJ0dWFsaXphdGlvbjogdGhvc2UgaG9va3MgYXJlIGRlZmluZWQgaGVyZS4gKi8KIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAKIC8qIEJpdG1hc2sgb2Ygd2hhdCBjYW4gYmUgY2xvYmJlcmVkOiB1c3VhbGx5IGF0IGxlYXN0IGVheC4gKi8KQEAgLTEyLDIxICsxMiwzOCBAQAogI2RlZmluZSBDTEJSX0VBWCAgKDEgPDwgMCkKICNkZWZpbmUgQ0xCUl9FQ1ggICgxIDw8IDEpCiAjZGVmaW5lIENMQlJfRURYICAoMSA8PCAyKQorI2RlZmluZSBDTEJSX0VESSAgKDEgPDwgMykKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgQ0xCUl9SU0kgICgxIDw8IDMpCi0jZGVmaW5lIENMQlJfUkRJICAoMSA8PCA0KQorI2lmZGVmIENPTkZJR19YODZfMzIKKy8qIENMQlJfQU5ZIHNob3VsZCBtYXRjaCBhbGwgcmVncyBwbGF0Zm9ybSBoYXMuIEZvciBpMzg2LCB0aGF0J3MganVzdCBpdCAqLworI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDQpIC0gMSkKKworI2RlZmluZSBDTEJSX0FSR19SRUdTCShDTEJSX0VBWCB8IENMQlJfRURYIHwgQ0xCUl9FQ1gpCisjZGVmaW5lIENMQlJfUkVUX1JFRwkoQ0xCUl9FQVggfCBDTEJSX0VEWCkKKyNkZWZpbmUgQ0xCUl9TQ1JBVENICSgwKQorI2Vsc2UKKyNkZWZpbmUgQ0xCUl9SQVggIENMQlJfRUFYCisjZGVmaW5lIENMQlJfUkNYICBDTEJSX0VDWAorI2RlZmluZSBDTEJSX1JEWCAgQ0xCUl9FRFgKKyNkZWZpbmUgQ0xCUl9SREkgIENMQlJfRURJCisjZGVmaW5lIENMQlJfUlNJICAoMSA8PCA0KQogI2RlZmluZSBDTEJSX1I4ICAgKDEgPDwgNSkKICNkZWZpbmUgQ0xCUl9SOSAgICgxIDw8IDYpCiAjZGVmaW5lIENMQlJfUjEwICAoMSA8PCA3KQogI2RlZmluZSBDTEJSX1IxMSAgKDEgPDwgOCkKKwogI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDkpIC0gMSkKKworI2RlZmluZSBDTEJSX0FSR19SRUdTCShDTEJSX1JESSB8IENMQlJfUlNJIHwgQ0xCUl9SRFggfCBcCisJCQkgQ0xCUl9SQ1ggfCBDTEJSX1I4IHwgQ0xCUl9SOSkKKyNkZWZpbmUgQ0xCUl9SRVRfUkVHCShDTEJSX1JBWCkKKyNkZWZpbmUgQ0xCUl9TQ1JBVENICShDTEJSX1IxMCB8IENMQlJfUjExKQorCiAjaW5jbHVkZSA8YXNtL2Rlc2NfZGVmcy5oPgotI2Vsc2UKLS8qIENMQlJfQU5ZIHNob3VsZCBtYXRjaCBhbGwgcmVncyBwbGF0Zm9ybSBoYXMuIEZvciBpMzg2LCB0aGF0J3MganVzdCBpdCAqLwotI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDMpIC0gMSkKICNlbmRpZiAvKiBYODZfNjQgKi8KIAorI2RlZmluZSBDTEJSX0NBTExFRV9TQVZFICgoQ0xCUl9BUkdfUkVHUyB8IENMQlJfU0NSQVRDSCkgJiB+Q0xCUl9SRVRfUkVHKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgpAQCAtNDAsNiArNTcsMTQgQEAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiBzdHJ1Y3QgZGVzY19zdHJ1Y3Q7CiAKKy8qCisgKiBXcmFwcGVyIHR5cGUgZm9yIHBvaW50ZXJzIHRvIGNvZGUgd2hpY2ggdXNlcyB0aGUgbm9uLXN0YW5kYXJkCisgKiBjYWxsaW5nIGNvbnZlbnRpb24uICBTZWUgUFZfQ0FMTF9TQVZFX1JFR1NfVEhVTksgYmVsb3cuCisgKi8KK3N0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSB7CisJdm9pZCAqZnVuYzsKK307CisKIC8qIGdlbmVyYWwgaW5mbyAqLwogc3RydWN0IHB2X2luZm8gewogCXVuc2lnbmVkIGludCBrZXJuZWxfcnBsOwpAQCAtMTg5LDExICsyMTQsMTUgQEAKIAkgKiBleHBlY3RlZCB0byB1c2UgWDg2X0VGTEFHU19JRjsgYWxsIG90aGVyIGJpdHMKIAkgKiByZXR1cm5lZCBmcm9tIHNhdmVfZmwgYXJlIHVuZGVmaW5lZCwgYW5kIG1heSBiZSBpZ25vcmVkIGJ5CiAJICogcmVzdG9yZV9mbC4KKwkgKgorCSAqIE5PVEU6IFRoZXNlIGZ1bmN0aW9ucyBjYWxsZXJzIGV4cGVjdCB0aGUgY2FsbGVlIHRvIHByZXNlcnZlCisJICogbW9yZSByZWdpc3RlcnMgdGhhbiB0aGUgc3RhbmRhcmQgQyBjYWxsaW5nIGNvbnZlbnRpb24uCiAJICovCi0JdW5zaWduZWQgbG9uZyAoKnNhdmVfZmwpKHZvaWQpOwotCXZvaWQgKCpyZXN0b3JlX2ZsKSh1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqaXJxX2Rpc2FibGUpKHZvaWQpOwotCXZvaWQgKCppcnFfZW5hYmxlKSh2b2lkKTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgc2F2ZV9mbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcmVzdG9yZV9mbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgaXJxX2Rpc2FibGU7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIGlycV9lbmFibGU7CisKIAl2b2lkICgqc2FmZV9oYWx0KSh2b2lkKTsKIAl2b2lkICgqaGFsdCkodm9pZCk7CiAKQEAgLTI0NCw3ICsyNzMsOCBAQAogCXZvaWQgKCpmbHVzaF90bGJfdXNlcikodm9pZCk7CiAJdm9pZCAoKmZsdXNoX3RsYl9rZXJuZWwpKHZvaWQpOwogCXZvaWQgKCpmbHVzaF90bGJfc2luZ2xlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwotCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBjcHVtYXNrX3QgKmNwdXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJIHVuc2lnbmVkIGxvbmcgdmEpOwogCiAJLyogSG9va3MgZm9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwYWdldGFibGUgdG9wLWxldmVsICovCkBAIC0yNzgsMTIgKzMwOCwxMSBAQAogCXZvaWQgKCpwdGVwX21vZGlmeV9wcm90X2NvbW1pdCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CiAKLQlwdGV2YWxfdCAoKnB0ZV92YWwpKHB0ZV90KTsKLQlwdGV2YWxfdCAoKnB0ZV9mbGFncykocHRlX3QpOwotCXB0ZV90ICgqbWFrZV9wdGUpKHB0ZXZhbF90IHB0ZSk7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHB0ZV92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcHRlOwogCi0JcGdkdmFsX3QgKCpwZ2RfdmFsKShwZ2RfdCk7Ci0JcGdkX3QgKCptYWtlX3BnZCkocGdkdmFsX3QgcGdkKTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcGdkX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wZ2Q7CiAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQpAQCAtMjk4LDEyICszMjcsMTIgQEAKIAogCXZvaWQgKCpzZXRfcHVkKShwdWRfdCAqcHVkcCwgcHVkX3QgcHVkdmFsKTsKIAotCXBtZHZhbF90ICgqcG1kX3ZhbCkocG1kX3QpOwotCXBtZF90ICgqbWFrZV9wbWQpKHBtZHZhbF90IHBtZCk7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHBtZF92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcG1kOwogCiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0Ci0JcHVkdmFsX3QgKCpwdWRfdmFsKShwdWRfdCk7Ci0JcHVkX3QgKCptYWtlX3B1ZCkocHVkdmFsX3QgcHVkKTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcHVkX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wdWQ7CiAKIAl2b2lkICgqc2V0X3BnZCkocGdkX3QgKnB1ZHAsIHBnZF90IHBnZHZhbCk7CiAjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCkBAIC0zODgsNiArNDE3LDggQEAKIAlhc20oInN0YXJ0XyIgI29wcyAiXyIgI25hbWUgIjogIiBjb2RlICI7IGVuZF8iICNvcHMgIl8iICNuYW1lICI6IikKIAogdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfbm9wKHZvaWQpOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfMzIodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lkZW50XzY0KHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbik7CiB1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZ25vcmUodW5zaWduZWQgbGVuKTsKIHVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2NhbGwodm9pZCAqaW5zbmJ1ZiwKIAkJCSAgICAgY29uc3Qgdm9pZCAqdGFyZ2V0LCB1MTYgdGd0X2Nsb2JiZXJzLApAQCAtNDc5LDI1ICs1MTAsNDUgQEAKICAqIG1ha2VzIHN1cmUgdGhlIGluY29taW5nIGFuZCBvdXRnb2luZyB0eXBlcyBhcmUgYWx3YXlzIGNvcnJlY3QuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCXVuc2lnbmVkIGxvbmcgX19lYXgsIF9fZWR4LCBfX2VjeAorI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19lYXggPSBfX2VheCwgX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAogI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJCVBWT1BfVkNBTExfQVJHUworCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiYSIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJkIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImMiICgodW5zaWduZWQgbG9uZykoeCkpCisKICNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCksCVwKIAkJCQkJIj1jIiAoX19lY3gpCiAjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwkJUFZPUF9WQ0FMTF9DTE9CQkVSUworCisjZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCkKKyNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJCVBWT1BfVkNBTExFRV9DTE9CQkVSUworCiAjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCiAjZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwotI2Vsc2UKLSNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQl1bnNpZ25lZCBsb25nIF9fZWRpLCBfX2VzaSwgX19lZHgsIF9fZWN4CisjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLworI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZWRpID0gX19lZGksIF9fZXNpID0gX19lc2ksCVwKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAogI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTLCBfX2VheAorCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiRCIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJTIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImQiICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkc0KHgpCQkiYyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKwogI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCSI9RCIgKF9fZWRpKSwJCQkJXAogCQkJCSI9UyIgKF9fZXNpKSwgIj1kIiAoX19lZHgpLAkJXAogCQkJCSI9YyIgKF9fZWN4KQotCiAjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwlQVk9QX1ZDQUxMX0NMT0JCRVJTLCAiPWEiIChfX2VheCkKIAorI2RlZmluZSBQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMJIj1hIiAoX19lYXgpCisjZGVmaW5lIFBWT1BfQ0FMTEVFX0NMT0JCRVJTCVBWT1BfVkNBTExFRV9DTE9CQkVSUworCiAjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCSAsICJyOCIsICJyOSIsICJyMTAiLCAicjExIgogI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMJICwgInJheCIsICJyOCIsICJyOSIsICJyMTAiLCAicjExIgotI2VuZGlmCisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0RFQlVHCiAjZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQlCVUdfT04ob3AgPT0gTlVMTCkKQEAgLTUwNSwxMCArNTU2LDExIEBACiAjZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQkoKHZvaWQpb3ApCiAjZW5kaWYKIAotI2RlZmluZSBfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorI2RlZmluZSBfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBjbGJyLCBjYWxsX2NsYnIsIGV4dHJhX2NsYnIsCQlcCisJCSAgICAgIHByZSwgcG9zdCwgLi4uKQkJCQkJXAogCSh7CQkJCQkJCQlcCiAJCXJldHR5cGUgX19yZXQ7CQkJCQkJXAotCQlQVk9QX0NBTExfQVJHUzsJCQkJCVwKKwkJUFZPUF9DQUxMX0FSR1M7CQkJCQkJXAogCQlQVk9QX1RFU1RfTlVMTChvcCk7CQkJCQlcCiAJCS8qIFRoaXMgaXMgMzItYml0IHNwZWNpZmljLCBidXQgaXMgb2theSBpbiA2NC1iaXQgKi8JXAogCQkvKiBzaW5jZSB0aGlzIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGhvbGQgKi8JCVwKQEAgLTUxNiw3MCArNTY4LDExMyBAQAogCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCiAJCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAogCQkJCSAgICAgcG9zdAkJCQlcCi0JCQkJICAgICA6IFBWT1BfQ0FMTF9DTE9CQkVSUwkJXAorCQkJCSAgICAgOiBjYWxsX2NsYnIJCQlcCiAJCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAotCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfQU5ZKSwJXAorCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKGNsYnIpLAkJXAogCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAotCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBFWFRSQV9DTE9CQkVSUyk7CVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKIAkJCV9fcmV0ID0gKHJldHR5cGUpKCgoKHU2NClfX2VkeCkgPDwgMzIpIHwgX19lYXgpOyBcCiAJCX0gZWxzZSB7CQkJCQkJXAogCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCiAJCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAogCQkJCSAgICAgcG9zdAkJCQlcCi0JCQkJICAgICA6IFBWT1BfQ0FMTF9DTE9CQkVSUwkJXAorCQkJCSAgICAgOiBjYWxsX2NsYnIJCQlcCiAJCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAotCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfQU5ZKSwJXAorCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKGNsYnIpLAkJXAogCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAotCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBFWFRSQV9DTE9CQkVSUyk7CVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKIAkJCV9fcmV0ID0gKHJldHR5cGUpX19lYXg7CQkJCVwKIAkJfQkJCQkJCQlcCiAJCV9fcmV0OwkJCQkJCQlcCiAJfSkKLSNkZWZpbmUgX19QVk9QX1ZDQUxMKG9wLCBwcmUsIHBvc3QsIC4uLikJCQkJXAorCisjZGVmaW5lIF9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCisJX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgQ0xCUl9BTlksIFBWT1BfQ0FMTF9DTE9CQkVSUywJXAorCQkgICAgICBFWFRSQV9DTE9CQkVSUywgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIF9fUFZPUF9DQUxMRUVTQVZFKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCisJX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJXAorCQkgICAgICBQVk9QX0NBTExFRV9DTE9CQkVSUywgLAkJCQlcCisJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKKworCisjZGVmaW5lIF9fX19QVk9QX1ZDQUxMKG9wLCBjbGJyLCBjYWxsX2NsYnIsIGV4dHJhX2NsYnIsIHByZSwgcG9zdCwgLi4uKQlcCiAJKHsJCQkJCQkJCVwKIAkJUFZPUF9WQ0FMTF9BUkdTOwkJCQkJXAogCQlQVk9QX1RFU1RfTlVMTChvcCk7CQkJCQlcCiAJCWFzbSB2b2xhdGlsZShwcmUJCQkJCVwKIAkJCSAgICAgcGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCQlcCiAJCQkgICAgIHBvc3QJCQkJCVwKLQkJCSAgICAgOiBQVk9QX1ZDQUxMX0NMT0JCRVJTCQkJXAorCQkJICAgICA6IGNhbGxfY2xicgkJCQlcCiAJCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQkJXAotCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9BTlkpLAkJXAorCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoY2xiciksCQkJXAogCQkJICAgICAgICMjX19WQV9BUkdTX18JCQkJXAotCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFZFWFRSQV9DTE9CQkVSUyk7CQlcCisJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CQlcCiAJfSkKIAorI2RlZmluZSBfX1BWT1BfVkNBTEwob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AsIENMQlJfQU5ZLCBQVk9QX1ZDQUxMX0NMT0JCRVJTLAkJXAorCQkgICAgICAgVkVYVFJBX0NMT0JCRVJTLAkJCQkJXAorCQkgICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKKwkJICAgICAgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKKwkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisKKwogI2RlZmluZSBQVk9QX0NBTEwwKHJldHR5cGUsIG9wKQkJCQkJCVwKIAlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiKQogI2RlZmluZSBQVk9QX1ZDQUxMMChvcCkJCQkJCQkJXAogCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiKQogCisjZGVmaW5lIFBWT1BfQ0FMTEVFMChyZXR0eXBlLCBvcCkJCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiKQorI2RlZmluZSBQVk9QX1ZDQUxMRUUwKG9wKQkJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIikKKworCiAjZGVmaW5lIFBWT1BfQ0FMTDEocmV0dHlwZSwgb3AsIGFyZzEpCQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpKQorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQogI2RlZmluZSBQVk9QX1ZDQUxMMShvcCwgYXJnMSkJCQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSkKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisKKyNkZWZpbmUgUFZPUF9DQUxMRUUxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAorCV9fUFZPUF9DQUxMRUVTQVZFKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQorI2RlZmluZSBQVk9QX1ZDQUxMRUUxKG9wLCBhcmcxKQkJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisKIAogI2RlZmluZSBQVk9QX0NBTEwyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLCAJXAotCSIxIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSkKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpKQogI2RlZmluZSBQVk9QX1ZDQUxMMihvcCwgYXJnMSwgYXJnMikJCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLCAJCVwKLQkiMSIgKCh1bnNpZ25lZCBsb25nKShhcmcyKSkpCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJCVwKKwkJICAgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKworI2RlZmluZSBQVk9QX0NBTExFRTIocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIpCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJXAorCQkJICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFMihvcCwgYXJnMSwgYXJnMikJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQlcCisJCQkgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKwogCiAjZGVmaW5lIFBWT1BfQ0FMTDMocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSkKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKICNkZWZpbmUgUFZPUF9WQ0FMTDMob3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgIjAiICgodW5zaWduZWQgbG9uZykoYXJnMSkpLAkJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSkKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQkJXAorCQkgICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKIAogLyogVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGluIHg4Nl82NC4gV2UgY2FuIG1ha2UgaXQgbXVjaCBzaW1wbGVyICovCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKIAlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwJCQkJCVwKIAkJICAgICJwdXNoICVbX2FyZzRdOyIsICJsZWEgNCglJWVzcCksJSVlc3A7IiwJCVwKLQkJICAgICIwIiAoKHUzMikoYXJnMSkpLCAiMSIgKCh1MzIpKGFyZzIpKSwJCVwKLQkJICAgICIyIiAoKHUzMikoYXJnMykpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKKwkJICAgIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLCBQVk9QX0NBTExfQVJHMihhcmcyKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkczKGFyZzMpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKICNkZWZpbmUgUFZPUF9WQ0FMTDQob3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJCVwKIAlfX1BWT1BfVkNBTEwob3AsCQkJCQkJXAogCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXApAQCAtNTg3LDEzICs2ODIsMTMgQEAKIAkJICAgICIyIiAoKHUzMikoYXJnMykpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKICNlbHNlCiAjZGVmaW5lIFBWT1BfQ0FMTDQocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJXAotCSIxIigodW5zaWduZWQgbG9uZykoYXJnMikpLCAiMiIoKHVuc2lnbmVkIGxvbmcpKGFyZzMpKSwJCVwKLQkiMyIoKHVuc2lnbmVkIGxvbmcpKGFyZzQpKSkKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLAkJCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMShhcmcxKSwgUFZPUF9DQUxMX0FSRzIoYXJnMiksCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMyhhcmczKSwgUFZPUF9DQUxMX0FSRzQoYXJnNCkpCiAjZGVmaW5lIFBWT1BfVkNBTEw0KG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsICIwIiAoKHVuc2lnbmVkIGxvbmcpKGFyZzEpKSwJCVwKLQkiMSIoKHVuc2lnbmVkIGxvbmcpKGFyZzIpKSwgIjIiKCh1bnNpZ25lZCBsb25nKShhcmczKSksCQlcCi0JIjMiKCh1bnNpZ25lZCBsb25nKShhcmc0KSkpCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsCQkJCQlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFBWT1BfQ0FMTF9BUkc0KGFyZzQpKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X2VuYWJsZWQodm9pZCkKQEAgLTk4NCwxMCArMTA3OSwxMSBAQAogCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMuZmx1c2hfdGxiX3NpbmdsZSwgYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCBjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCSAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB2YSkKIHsKLQlQVk9QX1ZDQUxMMyhwdl9tbXVfb3BzLmZsdXNoX3RsYl9vdGhlcnMsICZjcHVtYXNrLCBtbSwgdmEpOworCVBWT1BfVkNBTEwzKHB2X21tdV9vcHMuZmx1c2hfdGxiX290aGVycywgY3B1bWFzaywgbW0sIHZhKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtMTA1OSwxMyArMTE1NSwxMyBAQAogCXB0ZXZhbF90IHJldDsKIAogCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LAotCQkJCSBwdl9tbXVfb3BzLm1ha2VfcHRlLAotCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUyKHB0ZXZhbF90LAorCQkJCSAgIHB2X21tdV9vcHMubWFrZV9wdGUsCisJCQkJICAgdmFsLCAodTY0KXZhbCA+PiAzMik7CiAJZWxzZQotCQlyZXQgPSBQVk9QX0NBTEwxKHB0ZXZhbF90LAotCQkJCSBwdl9tbXVfb3BzLm1ha2VfcHRlLAotCQkJCSB2YWwpOworCQlyZXQgPSBQVk9QX0NBTExFRTEocHRldmFsX3QsCisJCQkJICAgcHZfbW11X29wcy5tYWtlX3B0ZSwKKwkJCQkgICB2YWwpOwogCiAJcmV0dXJuIChwdGVfdCkgeyAucHRlID0gcmV0IH07CiB9CkBAIC0xMDc1LDQyICsxMTcxLDI1IEBACiAJcHRldmFsX3QgcmV0OwogCiAJaWYgKHNpemVvZihwdGV2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9IFBWT1BfQ0FMTDIocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX3ZhbCwKLQkJCQkgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUyKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV92YWwsCisJCQkJICAgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKIAllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX3ZhbCwKLQkJCQkgcHRlLnB0ZSk7CisJCXJldCA9IFBWT1BfQ0FMTEVFMShwdGV2YWxfdCwgcHZfbW11X29wcy5wdGVfdmFsLAorCQkJCSAgIHB0ZS5wdGUpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfZmxhZ3MocHRlX3QgcHRlKQotewotCXB0ZXZhbF90IHJldDsKLQotCWlmIChzaXplb2YocHRldmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHB0ZXZhbF90LCBwdl9tbXVfb3BzLnB0ZV9mbGFncywKLQkJCQkgcHRlLnB0ZSwgKHU2NClwdGUucHRlID4+IDMyKTsKLQllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHRldmFsX3QsIHB2X21tdV9vcHMucHRlX2ZsYWdzLAotCQkJCSBwdGUucHRlKTsKLQotI2lmZGVmIENPTkZJR19QQVJBVklSVF9ERUJVRwotCUJVR19PTihyZXQgJiBQVEVfUEZOX01BU0spOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSBwZ2RfdCBfX3BnZChwZ2R2YWxfdCB2YWwpCiB7CiAJcGdkdmFsX3QgcmV0OwogCiAJaWYgKHNpemVvZihwZ2R2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9IFBWT1BfQ0FMTDIocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCi0JCQkJIHZhbCwgKHU2NCl2YWwgPj4gMzIpOworCQlyZXQgPSBQVk9QX0NBTExFRTIocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCisJCQkJICAgdmFsLCAodTY0KXZhbCA+PiAzMik7CiAJZWxzZQotCQlyZXQgPSBQVk9QX0NBTEwxKHBnZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcGdkLAotCQkJCSB2YWwpOworCQlyZXQgPSBQVk9QX0NBTExFRTEocGdkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wZ2QsCisJCQkJICAgdmFsKTsKIAogCXJldHVybiAocGdkX3QpIHsgcmV0IH07CiB9CkBAIC0xMTIwLDExICsxMTk5LDExIEBACiAJcGdkdmFsX3QgcmV0OwogCiAJaWYgKHNpemVvZihwZ2R2YWxfdCkgPiBzaXplb2YobG9uZykpCi0JCXJldCA9ICBQVk9QX0NBTEwyKHBnZHZhbF90LCBwdl9tbXVfb3BzLnBnZF92YWwsCi0JCQkJICBwZ2QucGdkLCAodTY0KXBnZC5wZ2QgPj4gMzIpOworCQlyZXQgPSAgUFZPUF9DQUxMRUUyKHBnZHZhbF90LCBwdl9tbXVfb3BzLnBnZF92YWwsCisJCQkJICAgIHBnZC5wZ2QsICh1NjQpcGdkLnBnZCA+PiAzMik7CiAJZWxzZQotCQlyZXQgPSAgUFZPUF9DQUxMMShwZ2R2YWxfdCwgcHZfbW11X29wcy5wZ2RfdmFsLAotCQkJCSAgcGdkLnBnZCk7CisJCXJldCA9ICBQVk9QX0NBTExFRTEocGdkdmFsX3QsIHB2X21tdV9vcHMucGdkX3ZhbCwKKwkJCQkgICAgcGdkLnBnZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE4OCwxMSArMTI2NywxMSBAQAogCXBtZHZhbF90IHJldDsKIAogCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSBQVk9QX0NBTEwyKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAotCQkJCSB2YWwsICh1NjQpdmFsID4+IDMyKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUyKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAorCQkJCSAgIHZhbCwgKHU2NCl2YWwgPj4gMzIpOwogCWVsc2UKLQkJcmV0ID0gUFZPUF9DQUxMMShwbWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3BtZCwKLQkJCQkgdmFsKTsKKwkJcmV0ID0gUFZPUF9DQUxMRUUxKHBtZHZhbF90LCBwdl9tbXVfb3BzLm1ha2VfcG1kLAorCQkJCSAgIHZhbCk7CiAKIAlyZXR1cm4gKHBtZF90KSB7IHJldCB9OwogfQpAQCAtMTIwMiwxMSArMTI4MSwxMSBAQAogCXBtZHZhbF90IHJldDsKIAogCWlmIChzaXplb2YocG1kdmFsX3QpID4gc2l6ZW9mKGxvbmcpKQotCQlyZXQgPSAgUFZPUF9DQUxMMihwbWR2YWxfdCwgcHZfbW11X29wcy5wbWRfdmFsLAotCQkJCSAgcG1kLnBtZCwgKHU2NClwbWQucG1kID4+IDMyKTsKKwkJcmV0ID0gIFBWT1BfQ0FMTEVFMihwbWR2YWxfdCwgcHZfbW11X29wcy5wbWRfdmFsLAorCQkJCSAgICBwbWQucG1kLCAodTY0KXBtZC5wbWQgPj4gMzIpOwogCWVsc2UKLQkJcmV0ID0gIFBWT1BfQ0FMTDEocG1kdmFsX3QsIHB2X21tdV9vcHMucG1kX3ZhbCwKLQkJCQkgIHBtZC5wbWQpOworCQlyZXQgPSAgUFZPUF9DQUxMRUUxKHBtZHZhbF90LCBwdl9tbXVfb3BzLnBtZF92YWwsCisJCQkJICAgIHBtZC5wbWQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyMjgsMTEgKzEzMDcsMTEgQEAKIAlwdWR2YWxfdCByZXQ7CiAKIAlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKLQkJcmV0ID0gUFZPUF9DQUxMMihwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKLQkJCQkgdmFsLCAodTY0KXZhbCA+PiAzMik7CisJCXJldCA9IFBWT1BfQ0FMTEVFMihwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKKwkJCQkgICB2YWwsICh1NjQpdmFsID4+IDMyKTsKIAllbHNlCi0JCXJldCA9IFBWT1BfQ0FMTDEocHVkdmFsX3QsIHB2X21tdV9vcHMubWFrZV9wdWQsCi0JCQkJIHZhbCk7CisJCXJldCA9IFBWT1BfQ0FMTEVFMShwdWR2YWxfdCwgcHZfbW11X29wcy5tYWtlX3B1ZCwKKwkJCQkgICB2YWwpOwogCiAJcmV0dXJuIChwdWRfdCkgeyByZXQgfTsKIH0KQEAgLTEyNDIsMTEgKzEzMjEsMTEgQEAKIAlwdWR2YWxfdCByZXQ7CiAKIAlpZiAoc2l6ZW9mKHB1ZHZhbF90KSA+IHNpemVvZihsb25nKSkKLQkJcmV0ID0gIFBWT1BfQ0FMTDIocHVkdmFsX3QsIHB2X21tdV9vcHMucHVkX3ZhbCwKLQkJCQkgIHB1ZC5wdWQsICh1NjQpcHVkLnB1ZCA+PiAzMik7CisJCXJldCA9ICBQVk9QX0NBTExFRTIocHVkdmFsX3QsIHB2X21tdV9vcHMucHVkX3ZhbCwKKwkJCQkgICAgcHVkLnB1ZCwgKHU2NClwdWQucHVkID4+IDMyKTsKIAllbHNlCi0JCXJldCA9ICBQVk9QX0NBTEwxKHB1ZHZhbF90LCBwdl9tbXVfb3BzLnB1ZF92YWwsCi0JCQkJICBwdWQucHVkKTsKKwkJcmV0ID0gIFBWT1BfQ0FMTEVFMShwdWR2YWxfdCwgcHZfbW11X29wcy5wdWRfdmFsLAorCQkJCSAgICBwdWQucHVkKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzc0LDkgKzE0NTMsMTAgQEAKIH0KIAogdm9pZCBfcGFyYXZpcnRfbm9wKHZvaWQpOwotI2RlZmluZSBwYXJhdmlydF9ub3AJKCh2b2lkICopX3BhcmF2aXJ0X25vcCkKK3UzMiBfcGFyYXZpcnRfaWRlbnRfMzIodTMyKTsKK3U2NCBfcGFyYXZpcnRfaWRlbnRfNjQodTY0KTsKIAotdm9pZCBwYXJhdmlydF91c2VfYnl0ZWxvY2tzKHZvaWQpOworI2RlZmluZSBwYXJhdmlydF9ub3AJKCh2b2lkICopX3BhcmF2aXJ0X25vcCkKIAogI2lmZGVmIENPTkZJR19TTVAKIApAQCAtMTQyNiwxMiArMTUwNiwzNyBAQAogCV9fcGFyYWluc3RydWN0aW9uc19lbmRbXTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLSNkZWZpbmUgUFZfU0FWRV9SRUdTICJwdXNobCAlJWVjeDsgcHVzaGwgJSVlZHg7IgotI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgInBvcGwgJSVlZHg7IHBvcGwgJSVlY3giCisjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaGwgJWVjeDsgcHVzaGwgJWVkeDsiCisjZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyAicG9wbCAlZWR4OyBwb3BsICVlY3g7IgorCisvKiBzYXZlIGFuZCByZXN0b3JlIGFsbCBjYWxsZXItc2F2ZSByZWdpc3RlcnMsIGV4Y2VwdCByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgUFZfU0FWRV9BTExfQ0FMTEVSX1JFR1MJCSJwdXNobCAlZWN4OyIKKyNkZWZpbmUgUFZfUkVTVE9SRV9BTExfQ0FMTEVSX1JFR1MJInBvcGwgICVlY3g7IgorCiAjZGVmaW5lIFBWX0ZMQUdTX0FSRyAiMCIKICNkZWZpbmUgUFZfRVhUUkFfQ0xPQkJFUlMKICNkZWZpbmUgUFZfVkVYVFJBX0NMT0JCRVJTCiAjZWxzZQorLyogc2F2ZSBhbmQgcmVzdG9yZSBhbGwgY2FsbGVyLXNhdmUgcmVnaXN0ZXJzLCBleGNlcHQgcmV0dXJuIHZhbHVlICovCisjZGVmaW5lIFBWX1NBVkVfQUxMX0NBTExFUl9SRUdTCQkJCQkJXAorCSJwdXNoICVyY3g7IgkJCQkJCQlcCisJInB1c2ggJXJkeDsiCQkJCQkJCVwKKwkicHVzaCAlcnNpOyIJCQkJCQkJXAorCSJwdXNoICVyZGk7IgkJCQkJCQlcCisJInB1c2ggJXI4OyIJCQkJCQkJXAorCSJwdXNoICVyOTsiCQkJCQkJCVwKKwkicHVzaCAlcjEwOyIJCQkJCQkJXAorCSJwdXNoICVyMTE7IgorI2RlZmluZSBQVl9SRVNUT1JFX0FMTF9DQUxMRVJfUkVHUwkJCQkJXAorCSJwb3AgJXIxMTsiCQkJCQkJCVwKKwkicG9wICVyMTA7IgkJCQkJCQlcCisJInBvcCAlcjk7IgkJCQkJCQlcCisJInBvcCAlcjg7IgkJCQkJCQlcCisJInBvcCAlcmRpOyIJCQkJCQkJXAorCSJwb3AgJXJzaTsiCQkJCQkJCVwKKwkicG9wICVyZHg7IgkJCQkJCQlcCisJInBvcCAlcmN4OyIKKwogLyogV2Ugc2F2ZSBzb21lIHJlZ2lzdGVycywgYnV0IGFsbCBvZiB0aGVtLCB0aGF0J3MgdG9vIG11Y2guIFdlIGNsb2JiZXIgYWxsCiAgKiBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzIGJ1dCB0aGUgYXJndW1lbnQgcGFyYW1ldGVyICovCiAjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaHEgJSVyZGk7IgpAQCAtMTQ0MSw1MiArMTU0Niw3NiBAQAogI2RlZmluZSBQVl9GTEFHU19BUkcgIkQiCiAjZW5kaWYKIAorLyoKKyAqIEdlbmVyYXRlIGEgdGh1bmsgYXJvdW5kIGEgZnVuY3Rpb24gd2hpY2ggc2F2ZXMgYWxsIGNhbGxlci1zYXZlCisgKiByZWdpc3RlcnMgZXhjZXB0IGZvciB0aGUgcmV0dXJuIHZhbHVlLiAgVGhpcyBhbGxvd3MgQyBmdW5jdGlvbnMgdG8KKyAqIGJlIGNhbGxlZCBmcm9tIGFzc2VtYmxlciBjb2RlIHdoZXJlIGZld2VyIHRoYW4gbm9ybWFsIHJlZ2lzdGVycyBhcmUKKyAqIGF2YWlsYWJsZS4gIEl0IG1heSBhbHNvIGhlbHAgY29kZSBnZW5lcmF0aW9uIGFyb3VuZCBjYWxscyBmcm9tIEMKKyAqIGNvZGUgaWYgdGhlIGNvbW1vbiBjYXNlIGRvZXNuJ3QgdXNlIG1hbnkgcmVnaXN0ZXJzLgorICoKKyAqIFdoZW4gYSBjYWxsZWUgaXMgd3JhcHBlZCBpbiBhIHRodW5rLCB0aGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCBhbGwKKyAqIGFyZyByZWdzIGFuZCBhbGwgc2NyYXRjaCByZWdpc3RlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgdGhlCisgKiBjYWxsLiBUaGUgcmV0dXJuIHZhbHVlIGluIHJheC9lYXggd2lsbCBub3QgYmUgc2F2ZWQsIGV2ZW4gZm9yIHZvaWQKKyAqIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKGZ1bmMpCQkJCQlcCisJZXh0ZXJuIHR5cGVvZihmdW5jKSBfX3Jhd19jYWxsZWVfc2F2ZV8jI2Z1bmM7CQkJXAorCXN0YXRpYyB2b2lkICpfXyMjZnVuYyMjX18gX191c2VkID0gZnVuYzsJCQlcCisJCQkJCQkJCQlcCisJYXNtKCIucHVzaHNlY3Rpb24gLnRleHQ7IgkJCQkJXAorCSAgICAiX19yYXdfY2FsbGVlX3NhdmVfIiAjZnVuYyAiOiAiCQkJCVwKKwkgICAgUFZfU0FWRV9BTExfQ0FMTEVSX1JFR1MJCQkJCVwKKwkgICAgImNhbGwgIiAjZnVuYyAiOyIJCQkJCQlcCisJICAgIFBWX1JFU1RPUkVfQUxMX0NBTExFUl9SRUdTCQkJCQlcCisJICAgICJyZXQ7IgkJCQkJCQlcCisJICAgICIucG9wc2VjdGlvbiIpCisKKy8qIEdldCBhIHJlZmVyZW5jZSB0byBhIGNhbGxlZS1zYXZlIGZ1bmN0aW9uICovCisjZGVmaW5lIFBWX0NBTExFRV9TQVZFKGZ1bmMpCQkJCQkJXAorCSgoc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlKSB7IF9fcmF3X2NhbGxlZV9zYXZlXyMjZnVuYyB9KQorCisvKiBQcm9taXNlIHRoYXQgImZ1bmMiIGFscmVhZHkgdXNlcyB0aGUgcmlnaHQgY2FsbGluZyBjb252ZW50aW9uICovCisjZGVmaW5lIF9fUFZfSVNfQ0FMTEVFX1NBVkUoZnVuYykJCQlcCisJKChzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUpIHsgZnVuYyB9KQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZjsKIAotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDogIj1hIihmKQogCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnNhdmVfZmwpLAogCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFBWX1ZFWFRSQV9DTE9CQkVSUyk7CisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiAJcmV0dXJuIGY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDogIj1hIihmKQogCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAogCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAogCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIFBWX0VYVFJBX0NMT0JCRVJTKTsKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDoKIAkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZGlzYWJsZSksCiAJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiIFBWX0VYVFJBX0NMT0JCRVJTKTsKKwkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUFZfU0FWRV9SRUdTCi0JCQkJICBQQVJBVklSVF9DQUxMCi0JCQkJICBQVl9SRVNUT1JFX1JFR1MpCisJYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQogCQkgICAgIDoKIAkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZW5hYmxlKSwKIAkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIgUFZfRVhUUkFfQ0xPQkJFUlMpOworCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX2lycV9zYXZlKHZvaWQpCkBAIC0xNTI5LDMzICsxNjU4LDQ5IEBACiAJLnBvcHNlY3Rpb24KIAogCisjZGVmaW5lIENPTkRfUFVTSChzZXQsIG1hc2ssIHJlZykJCQlcCisJLmlmICgofihzZXQpKSAmIG1hc2spOyBwdXNoICVyZWc7IC5lbmRpZgorI2RlZmluZSBDT05EX1BPUChzZXQsIG1hc2ssIHJlZykJCQlcCisJLmlmICgofihzZXQpKSAmIG1hc2spOyBwb3AgJXJlZzsgLmVuZGlmCisKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFBWX1NBVkVfUkVHUwkJCQlcCi0JcHVzaCAlcmF4OwkJCQlcCi0JcHVzaCAlcmN4OwkJCQlcCi0JcHVzaCAlcmR4OwkJCQlcCi0JcHVzaCAlcnNpOwkJCQlcCi0JcHVzaCAlcmRpOwkJCQlcCi0JcHVzaCAlcjg7CQkJCVwKLQlwdXNoICVyOTsJCQkJXAotCXB1c2ggJXIxMDsJCQkJXAotCXB1c2ggJXIxMQotI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MJCQkJXAotCXBvcCAlcjExOwkJCQlcCi0JcG9wICVyMTA7CQkJCVwKLQlwb3AgJXI5OwkJCQlcCi0JcG9wICVyODsJCQkJXAotCXBvcCAlcmRpOwkJCQlcCi0JcG9wICVyc2k7CQkJCVwKLQlwb3AgJXJkeDsJCQkJXAotCXBvcCAlcmN4OwkJCQlcCi0JcG9wICVyYXgKKworI2RlZmluZSBQVl9TQVZFX1JFR1Moc2V0KQkJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JBWCwgcmF4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JDWCwgcmN4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JEWCwgcmR4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JTSSwgcnNpKTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1JESSwgcmRpKTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX1I4LCByOCk7CQlcCisJQ09ORF9QVVNIKHNldCwgQ0xCUl9SOSwgcjkpOwkJXAorCUNPTkRfUFVTSChzZXQsIENMQlJfUjEwLCByMTApOwkJXAorCUNPTkRfUFVTSChzZXQsIENMQlJfUjExLCByMTEpCisjZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyhzZXQpCQkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9SMTEsIHIxMSk7CQlcCisJQ09ORF9QT1Aoc2V0LCBDTEJSX1IxMCwgcjEwKTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUjksIHI5KTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUjgsIHI4KTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUkRJLCByZGkpOwkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9SU0ksIHJzaSk7CQlcCisJQ09ORF9QT1Aoc2V0LCBDTEJSX1JEWCwgcmR4KTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfUkNYLCByY3gpOwkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9SQVgsIHJheCkKKwogI2RlZmluZSBQQVJBX1BBVENIKHN0cnVjdCwgb2ZmKSAgICAgICAgKChQQVJBVklSVF9QQVRDSF8jI3N0cnVjdCArIChvZmYpKSAvIDgpCiAjZGVmaW5lIFBBUkFfU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcykgX1BWU0lURShwdHlwZSwgY2xvYmJlcnMsIG9wcywgLnF1YWQsIDgpCiAjZGVmaW5lIFBBUkFfSU5ESVJFQ1QoYWRkcikJKmFkZHIoJXJpcCkKICNlbHNlCi0jZGVmaW5lIFBWX1NBVkVfUkVHUyAgIHB1c2hsICVlYXg7IHB1c2hsICVlZGk7IHB1c2hsICVlY3g7IHB1c2hsICVlZHgKLSNkZWZpbmUgUFZfUkVTVE9SRV9SRUdTIHBvcGwgJWVkeDsgcG9wbCAlZWN4OyBwb3BsICVlZGk7IHBvcGwgJWVheAorI2RlZmluZSBQVl9TQVZFX1JFR1Moc2V0KQkJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VBWCwgZWF4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VESSwgZWRpKTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VDWCwgZWN4KTsJCVwKKwlDT05EX1BVU0goc2V0LCBDTEJSX0VEWCwgZWR4KQorI2RlZmluZSBQVl9SRVNUT1JFX1JFR1Moc2V0KQkJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfRURYLCBlZHgpOwkJXAorCUNPTkRfUE9QKHNldCwgQ0xCUl9FQ1gsIGVjeCk7CQlcCisJQ09ORF9QT1Aoc2V0LCBDTEJSX0VESSwgZWRpKTsJCVwKKwlDT05EX1BPUChzZXQsIENMQlJfRUFYLCBlYXgpCisKICNkZWZpbmUgUEFSQV9QQVRDSChzdHJ1Y3QsIG9mZikgICAgICAgICgoUEFSQVZJUlRfUEFUQ0hfIyNzdHJ1Y3QgKyAob2ZmKSkgLyA0KQogI2RlZmluZSBQQVJBX1NJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMpIF9QVlNJVEUocHR5cGUsIGNsb2JiZXJzLCBvcHMsIC5sb25nLCA0KQogI2RlZmluZSBQQVJBX0lORElSRUNUKGFkZHIpCSolY3M6YWRkcgpAQCAtMTU2NywxNSArMTcxMiwxNSBAQAogCiAjZGVmaW5lIERJU0FCTEVfSU5URVJSVVBUUyhjbG9iYmVycykJCQkJCVwKIAlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9pcnFfb3BzLCBQVl9JUlFfaXJxX2Rpc2FibGUpLCBjbG9iYmVycywgXAotCQkgIFBWX1NBVkVfUkVHUzsJCQkJCQlcCisJCSAgUFZfU0FWRV9SRUdTKGNsb2JiZXJzIHwgQ0xCUl9DQUxMRUVfU0FWRSk7CQlcCiAJCSAgY2FsbCBQQVJBX0lORElSRUNUKHB2X2lycV9vcHMrUFZfSVJRX2lycV9kaXNhYmxlKTsJXAotCQkgIFBWX1JFU1RPUkVfUkVHUzspCQkJXAorCQkgIFBWX1JFU1RPUkVfUkVHUyhjbG9iYmVycyB8IENMQlJfQ0FMTEVFX1NBVkUpOykKIAogI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUUyhjbG9iYmVycykJCQkJCVwKIAlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9pcnFfb3BzLCBQVl9JUlFfaXJxX2VuYWJsZSksIGNsb2JiZXJzLAlcCi0JCSAgUFZfU0FWRV9SRUdTOwkJCQkJCVwKKwkJICBQVl9TQVZFX1JFR1MoY2xvYmJlcnMgfCBDTEJSX0NBTExFRV9TQVZFKTsJCVwKIAkJICBjYWxsIFBBUkFfSU5ESVJFQ1QocHZfaXJxX29wcytQVl9JUlFfaXJxX2VuYWJsZSk7CVwKLQkJICBQVl9SRVNUT1JFX1JFR1M7KQorCQkgIFBWX1JFU1RPUkVfUkVHUyhjbG9iYmVycyB8IENMQlJfQ0FMTEVFX1NBVkUpOykKIAogI2RlZmluZSBVU0VSR1NfU1lTUkVUMzIJCQkJCQkJXAogCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV91c2VyZ3Nfc3lzcmV0MzIpLAlcCkBAIC0xNjA1LDExICsxNzUwLDE1IEBACiAJUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1X29wcywgUFZfQ1BVX3N3YXBncyksIENMQlJfTk9ORSwJXAogCQkgIHN3YXBncykKIAorLyoKKyAqIE5vdGU6IHN3YXBncyBpcyB2ZXJ5IHNwZWNpYWwsIGFuZCBpbiBwcmFjdGlzZSBpcyBlaXRoZXIgZ29pbmcgdG8gYmUKKyAqIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgInN3YXBncyIgaW5zdHJ1Y3Rpb24gb3Igc29tZXRoaW5nIHZlcnkKKyAqIHNwZWNpYWwuICBFaXRoZXIgd2F5LCB3ZSBkb24ndCBuZWVkIHRvIHNhdmUgYW55IHJlZ2lzdGVycyBmb3IKKyAqIGl0LgorICovCiAjZGVmaW5lIFNXQVBHUwkJCQkJCQkJXAogCVBBUkFfU0lURShQQVJBX1BBVENIKHB2X2NwdV9vcHMsIFBWX0NQVV9zd2FwZ3MpLCBDTEJSX05PTkUsCVwKLQkJICBQVl9TQVZFX1JFR1M7CQkJCQkJXAotCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9zd2FwZ3MpOwkJXAotCQkgIFBWX1JFU1RPUkVfUkVHUwkJCQkJXAorCQkgIGNhbGwgUEFSQV9JTkRJUkVDVChwdl9jcHVfb3BzK1BWX0NQVV9zd2FwZ3MpCQlcCiAJCSApCiAKICNkZWZpbmUgR0VUX0NSMl9JTlRPX1JDWAkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGI4NDkzYjMuLmIwZTcwMDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC01LDEwICs1LDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfUEFUCiBleHRlcm4gaW50IHBhdF9lbmFibGVkOwotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfcGF0X3N1cHBvcnQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKICNlbHNlCiBzdGF0aWMgY29uc3QgaW50IHBhdF9lbmFibGVkOwotc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX3BhdF9zdXBwb3J0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9CiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgcGF0X2luaXQodm9pZCk7CkBAIC0xNyw2ICsxNSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcmVxX3R5cGUsIHVuc2lnbmVkIGxvbmcgKnJldF90eXBlKTsKIGV4dGVybiBpbnQgZnJlZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCk7CiAKLWV4dGVybiB2b2lkIHBhdF9kaXNhYmxlKGNoYXIgKnJlYXNvbik7CitleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCXVuc2lnbmVkIGxvbmcgZmxhZyk7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS1mdW5jdGlvbnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3BjaS1mdW5jdGlvbnMuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLWZ1bmN0aW9ucy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BkYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmJmZmY4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BkYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfUERBX0gKLSNkZWZpbmUgX0FTTV9YODZfUERBX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotLyogUGVyIHByb2Nlc3NvciBkYXRhc3RydWN0dXJlLiAlZ3MgcG9pbnRzIHRvIGl0IHdoaWxlIHRoZSBrZXJuZWwgcnVucyAqLwotc3RydWN0IHg4NjY0X3BkYSB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwY3VycmVudDsJLyogMCAgQ3VycmVudCBwcm9jZXNzICovCi0JdW5zaWduZWQgbG9uZyBkYXRhX29mZnNldDsJLyogOCBQZXIgY3B1IGRhdGEgb2Zmc2V0IGZyb20gbGlua2VyCi0JCQkJCSAgIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIGtlcm5lbHN0YWNrOwkvKiAxNiB0b3Agb2Yga2VybmVsIHN0YWNrIGZvciBjdXJyZW50ICovCi0JdW5zaWduZWQgbG9uZyBvbGRyc3A7CQkvKiAyNCB1c2VyIHJzcCBmb3Igc3lzdGVtIGNhbGwgKi8KLQlpbnQgaXJxY291bnQ7CQkJLyogMzIgSXJxIG5lc3RpbmcgY291bnRlci4gU3RhcnRzIC0xICovCi0JdW5zaWduZWQgaW50IGNwdW51bWJlcjsJCS8qIDM2IExvZ2ljYWwgQ1BVIG51bWJlciAqLwotI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgotCXVuc2lnbmVkIGxvbmcgc3RhY2tfY2FuYXJ5OwkvKiA0MCBzdGFjayBjYW5hcnkgdmFsdWUgKi8KLQkJCQkJLyogZ2NjLUFCSTogdGhpcyBjYW5hcnkgTVVTVCBiZSBhdAotCQkJCQkgICBvZmZzZXQgNDAhISEgKi8KLSNlbmRpZgotCWNoYXIgKmlycXN0YWNrcHRyOwotCXNob3J0IG5vZGVudW1iZXI7CQkvKiBudW1iZXIgb2YgY3VycmVudCBub2RlICgzMmsgbWF4KSAqLwotCXNob3J0IGluX2Jvb3RtZW07CQkvKiBwZGEgbGl2ZXMgaW4gYm9vdG1lbSAqLwotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLQl1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CS8qIG51bWJlciBvZiBOTUkgb24gdGhpcyBDUFVzICovCi0Jc2hvcnQgbW11X3N0YXRlOwotCXNob3J0IGlzaWRsZTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07Ci0JdW5zaWduZWQgYXBpY190aW1lcl9pcnFzOwotCXVuc2lnbmVkIGlycTBfaXJxczsKLQl1bnNpZ25lZCBpcnFfcmVzY2hlZF9jb3VudDsKLQl1bnNpZ25lZCBpcnFfY2FsbF9jb3VudDsKLQl1bnNpZ25lZCBpcnFfdGxiX2NvdW50OwotCXVuc2lnbmVkIGlycV90aGVybWFsX2NvdW50OwotCXVuc2lnbmVkIGlycV90aHJlc2hvbGRfY291bnQ7Ci0JdW5zaWduZWQgaXJxX3NwdXJpb3VzX2NvdW50OwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCi1leHRlcm4gc3RydWN0IHg4NjY0X3BkYSAqKl9jcHVfcGRhOwotZXh0ZXJuIHZvaWQgcGRhX2luaXQoaW50KTsKLQotI2RlZmluZSBjcHVfcGRhKGkpIChfY3B1X3BkYVtpXSkKLQotLyoKLSAqIFRoZXJlIGlzIG5vIGZhc3Qgd2F5IHRvIGdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBQREEsIGFsbCB0aGUgYWNjZXNzZXMKLSAqIGhhdmUgdG8gbWVudGlvbiAlZnMvJWdzLiAgU28gaXQgbmVlZHMgdG8gYmUgZG9uZSB0aGlzIFRvcnZhbGRpYW4gd2F5LgotICovCi1leHRlcm4gdm9pZCBfX2JhZF9wZGFfZmllbGQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLQotLyoKLSAqIHByb3h5X3BkYSBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LCBidXQgdGVsbCBnY2MgaXQgaXMgYWNjZXNzZWQgZm9yCi0gKiBhbGwgUERBIGFjY2Vzc2VzIHNvIGl0IGdldHMgcmVhZC93cml0ZSBkZXBlbmRlbmNpZXMgcmlnaHQuCi0gKi8KLWV4dGVybiBzdHJ1Y3QgeDg2NjRfcGRhIF9wcm94eV9wZGE7Ci0KLSNkZWZpbmUgcGRhX29mZnNldChmaWVsZCkgb2Zmc2V0b2Yoc3RydWN0IHg4NjY0X3BkYSwgZmllbGQpCi0KLSNkZWZpbmUgcGRhX3RvX29wKG9wLCBmaWVsZCwgdmFsKQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl0eXBlZGVmIHR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSBUX187CQkJCVwKLQlpZiAoMCkgeyBUX18gdG1wX187IHRtcF9fID0gKHZhbCk7IH0JLyogdHlwZSBjaGVja2luZyAqLwlcCi0Jc3dpdGNoIChzaXplb2YoX3Byb3h5X3BkYS5maWVsZCkpIHsJCQkJXAotCWNhc2UgMjoJCQkJCQkJCVwKLQkJYXNtKG9wICJ3ICUxLCUlZ3M6JWMyIiA6CQkJCVwKLQkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAotCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAotCQkgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbShvcCAibCAlMSwlJWdzOiVjMiIgOgkJCQlcCi0JCSAgICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6CQkJCVwKLQkJICAgICJyaSIgKChUX18pdmFsKSwJCQkJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgODoJCQkJCQkJCVwKLQkJYXNtKG9wICJxICUxLCUlZ3M6JWMyIjoJCQkJCVwKLQkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAotCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAotCQkgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQlkZWZhdWx0OgkJCQkJCQlcCi0JCV9fYmFkX3BkYV9maWVsZCgpOwkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgcGRhX2Zyb21fb3Aob3AsIGZpZWxkKQkJCVwKLSh7CQkJCQkJXAotCXR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSByZXRfXzsJCVwKLQlzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgewlcCi0JY2FzZSAyOgkJCQkJXAotCQlhc20ob3AgIncgJSVnczolYzEsJTAiIDoJXAotCQkgICAgIj1yIiAocmV0X18pIDoJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCi0JCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQlicmVhazsJCQkJXAotCWNhc2UgNDoJCQkJCVwKLQkJYXNtKG9wICJsICUlZ3M6JWMxLCUwIjoJCVwKLQkJICAgICI9ciIgKHJldF9fKToJCVwKLQkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCi0JCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQlicmVhazsJCQkJXAotCWNhc2UgODoJCQkJCVwKLQkJYXNtKG9wICJxICUlZ3M6JWMxLCUwIjoJCVwKLQkJICAgICI9ciIgKHJldF9fKSA6CQlcCi0JCSAgICAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSwJXAotCQkgICAgIm0iIChfcHJveHlfcGRhLmZpZWxkKSk7CVwKLQkJYnJlYWs7CQkJCVwKLQlkZWZhdWx0OgkJCQlcCi0JCV9fYmFkX3BkYV9maWVsZCgpOwkJXAotCX0JCQkJCVwKLQlyZXRfXzsJCQkJCVwKLX0pCi0KLSNkZWZpbmUgcmVhZF9wZGEoZmllbGQpCQlwZGFfZnJvbV9vcCgibW92IiwgZmllbGQpCi0jZGVmaW5lIHdyaXRlX3BkYShmaWVsZCwgdmFsKQlwZGFfdG9fb3AoIm1vdiIsIGZpZWxkLCB2YWwpCi0jZGVmaW5lIGFkZF9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJhZGQiLCBmaWVsZCwgdmFsKQotI2RlZmluZSBzdWJfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgic3ViIiwgZmllbGQsIHZhbCkKLSNkZWZpbmUgb3JfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgib3IiLCBmaWVsZCwgdmFsKQotCi0vKiBUaGlzIGlzIG5vdCBhdG9taWMgYWdhaW5zdCBvdGhlciBDUFVzIC0tIENQVSBwcmVlbXB0aW9uIG5lZWRzIHRvIGJlIG9mZiAqLwotI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXRfcGRhKGJpdCwgZmllbGQpCQkJCVwKLSh7CQkJCQkJCQkJXAotCWludCBvbGRfXzsJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiYnRyICUyLCUlZ3M6JWMzXG5cdHNiYmwgJTAsJTAiCQkJXAotCQkgICAgIDogIj1yIiAob2xkX18pLCAiK20iIChfcHJveHlfcGRhLmZpZWxkKQkJXAotCQkgICAgIDogImRJciIgKGJpdCksICJpIiAocGRhX29mZnNldChmaWVsZCkpIDogIm1lbW9yeSIpO1wKLQlvbGRfXzsJCQkJCQkJCVwKLX0pCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBEQV9TVEFDS09GRlNFVCAoNSo4KQotCi0jZW5kaWYgLyogX0FTTV9YODZfUERBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggZWNlNzIwNS4uYWVlMTAzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTIsNTMgKzIsMTIgQEAKICNkZWZpbmUgX0FTTV9YODZfUEVSQ1BVX0gKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0vKiBTYW1lIGFzIGFzbS1nZW5lcmljL3BlcmNwdS5oLCBleGNlcHQgdGhhdCB3ZSBzdG9yZSB0aGUgcGVyIGNwdSBvZmZzZXQKLSAgIGluIHRoZSBQREEuIExvbmdlciB0ZXJtIHRoZSBQREEgYW5kIGV2ZXJ5IHBlciBjcHUgdmFyaWFibGUKLSAgIHNob3VsZCBiZSBqdXN0IHB1dCBpbnRvIGEgc2luZ2xlIHNlY3Rpb24gYW5kIHJlZmVyZW5jZWQgZGlyZWN0bHkKLSAgIGZyb20gJWdzICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgotCi0jZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAoY3B1X3BkYShjcHUpLT5kYXRhX29mZnNldCkKLSNkZWZpbmUgX19teV9jcHVfb2Zmc2V0IHJlYWRfcGRhKGRhdGFfb2Zmc2V0KQotCi0jZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQotCisjZGVmaW5lIF9fcGVyY3B1X3NlZwkJZ3MKKyNkZWZpbmUgX19wZXJjcHVfbW92X29wCQltb3ZxCisjZWxzZQorI2RlZmluZSBfX3BlcmNwdV9zZWcJCWZzCisjZGVmaW5lIF9fcGVyY3B1X21vdl9vcAkJbW92bAogI2VuZGlmCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+Ci0KLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeDg2NjRfcGRhLCBwZGEpOwotCi0vKgotICogVGhlc2UgYXJlIHN1cHBvc2VkIHRvIGJlIGltcGxlbWVudGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uIHdoaWNoCi0gKiBvcGVyYXRlcyBvbiB0aGUgcGVyLWNwdSBkYXRhIGJhc2Ugc2VnbWVudC4gIHg4Ni02NCBkb2Vzbid0IGhhdmUKLSAqIHRoYXQgeWV0LCBzbyB0aGlzIGlzIGEgZmFpcmx5IGluZWZmaWNpZW50IHdvcmthcm91bmQgZm9yIHRoZQotICogbWVhbnRpbWUuICBUaGUgc2luZ2xlIGluc3RydWN0aW9uIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KLSAqIHByZWVtcHRpb24gYW5kIGludGVycnVwdHMsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBkaXNhYmxlCi0gKiBpbnRlcnJ1cHRzIGhlcmUgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuICBIb3dldmVyLCBiZWNhdXNlIGl0Ci0gKiBjYW4gYmUgdXNlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQtZGlzYWJsZS9lbmFibGUsIHdlIGNhbid0IGFjdHVhbGx5Ci0gKiBkaXNhYmxlIGludGVycnVwdHM7IGRpc2FibGluZyBwcmVlbXB0aW9uIGlzIGVub3VnaC4KLSAqLwotI2RlZmluZSB4ODZfcmVhZF9wZXJjcHUodmFyKQkJCQkJCVwKLQkoewkJCQkJCQkJXAotCQl0eXBlb2YocGVyX2NwdV92YXIodmFyKSkgX190bXA7CQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCV9fdG1wID0gX19nZXRfY3B1X3Zhcih2YXIpOwkJCQlcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JCV9fdG1wOwkJCQkJCQlcCi0JfSkKLQotI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCV9fZ2V0X2NwdV92YXIodmFyKSA9ICh2YWwpOwkJCQlcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JfSB3aGlsZSgwKQotCi0jZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNjUsNDcgKzI0LDQ4IEBACiAgKiAgICBQRVJfQ1BVKGNwdV9nZHRfZGVzY3IsICVlYngpCiAgKi8KICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCVwKLQltb3ZsICVmczpwZXJfY3B1X18jI3RoaXNfY3B1X29mZiwgcmVnOwkJXAorI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCQkJCVwKKwlfX3BlcmNwdV9tb3Zfb3AgJV9fcGVyY3B1X3NlZzpwZXJfY3B1X190aGlzX2NwdV9vZmYsIHJlZzsJXAogCWxlYSBwZXJfY3B1X18jI3ZhcihyZWcpLCByZWcKLSNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQklZnM6cGVyX2NwdV9fIyN2YXIKKyNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQklX19wZXJjcHVfc2VnOnBlcl9jcHVfXyMjdmFyCiAjZWxzZSAvKiAhIFNNUCAqLwotI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCVwKLQltb3ZsICRwZXJfY3B1X18jI3ZhciwgcmVnCisjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCQkJXAorCV9fcGVyY3B1X21vdl9vcCAkcGVyX2NwdV9fIyN2YXIsIHJlZwogI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCXBlcl9jcHVfXyMjdmFyCiAjZW5kaWYJLyogU01QICovCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0X1NNUAorI2RlZmluZSBJTklUX1BFUl9DUFVfVkFSKHZhcikgIGluaXRfcGVyX2NwdV9fIyN2YXIKKyNlbHNlCisjZGVmaW5lIElOSVRfUEVSX0NQVV9WQVIodmFyKSAgcGVyX2NwdV9fIyN2YXIKKyNlbmRpZgorCiAjZWxzZSAvKiAuLi4hQVNTRU1CTFkgKi8KIAotLyoKLSAqIFBFUl9DUFUgZmluZHMgYW4gYWRkcmVzcyBvZiBhIHBlci1jcHUgdmFyaWFibGUuCi0gKgotICogQXJnczoKLSAqICAgIHZhciAtIHZhcmlhYmxlIG5hbWUKLSAqICAgIGNwdSAtIDMyYml0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgQ1BVIG51bWJlcgotICoKLSAqIFRoZSByZXN1bHRpbmcgYWRkcmVzcyBpcyBzdG9yZWQgaW4gdGhlICJjcHUiIGFyZ3VtZW50LgotICoKLSAqIEV4YW1wbGU6Ci0gKiAgICBQRVJfQ1BVKGNwdV9nZHRfZGVzY3IsICVlYngpCi0gKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKwogI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX19wZXJjcHVfYXJnKHgpCQkiJSUiX19zdHJpbmdpZnkoX19wZXJjcHVfc2VnKSI6JVAiICN4CisjZGVmaW5lIF9fbXlfY3B1X29mZnNldAkJcGVyY3B1X3JlYWQodGhpc19jcHVfb2ZmKQorI2Vsc2UKKyNkZWZpbmUgX19wZXJjcHVfYXJnKHgpCQkiJSIgI3gKKyNlbmRpZgogCi0jZGVmaW5lIF9fbXlfY3B1X29mZnNldCB4ODZfcmVhZF9wZXJjcHUodGhpc19jcHVfb2ZmKQorLyoKKyAqIEluaXRpYWxpemVkIHBvaW50ZXJzIHRvIHBlci1jcHUgdmFyaWFibGVzIG5lZWRlZCBmb3IgdGhlIGJvb3QKKyAqIHByb2Nlc3NvciBuZWVkIHRvIHVzZSB0aGVzZSBtYWNyb3MgdG8gZ2V0IHRoZSBwcm9wZXIgYWRkcmVzcworICogb2Zmc2V0IGZyb20gX19wZXJfY3B1X2xvYWQgb24gU01QLgorICoKKyAqIFRoZXJlIGFsc28gbXVzdCBiZSBhbiBlbnRyeSBpbiB2bWxpbnV4XzY0Lmxkcy5TCisgKi8KKyNkZWZpbmUgREVDTEFSRV9JTklUX1BFUl9DUFUodmFyKSBcCisgICAgICAgZXh0ZXJuIHR5cGVvZihwZXJfY3B1X3Zhcih2YXIpKSBpbml0X3Blcl9jcHVfdmFyKHZhcikKIAotLyogZnMgc2VnbWVudCBzdGFydHMgYXQgKHBvc2l0aXZlKSBvZmZzZXQgPT0gX19wZXJfY3B1X29mZnNldFtjcHVdICovCi0jZGVmaW5lIF9fcGVyY3B1X3NlZyAiJSVmczoiCi0KLSNlbHNlICAvKiAhU01QICovCi0KLSNkZWZpbmUgX19wZXJjcHVfc2VnICIiCi0KLSNlbmRpZgkvKiBTTVAgKi8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgotCi0vKiBXZSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yIGxvY2FsIENQVSAoZmFzdGVyKS4gKi8KLURFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOworI2lmZGVmIENPTkZJR19YODZfNjRfU01QCisjZGVmaW5lIGluaXRfcGVyX2NwdV92YXIodmFyKSAgaW5pdF9wZXJfY3B1X18jI3ZhcgorI2Vsc2UKKyNkZWZpbmUgaW5pdF9wZXJfY3B1X3Zhcih2YXIpICBwZXJfY3B1X3Zhcih2YXIpCisjZW5kaWYKIAogLyogRm9yIGFyY2gtc3BlY2lmaWMgY29kZSwgd2UgY2FuIHVzZSBkaXJlY3Qgc2luZ2xlLWluc24gb3BzICh0aGV5CiAgKiBkb24ndCBnaXZlIGFuIGx2YWx1ZSB0aG91Z2gpLiAqLwpAQCAtMTIwLDIwICs4MCwyNSBAQAogCX0JCQkJCQlcCiAJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCiAJY2FzZSAxOgkJCQkJCVwKLQkJYXNtKG9wICJiICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCisJCWFzbShvcCAiYiAlMSwiX19wZXJjcHVfYXJnKDApCQlcCiAJCSAgICA6ICIrbSIgKHZhcikJCQlcCiAJCSAgICA6ICJyaSIgKChUX18pdmFsKSk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDI6CQkJCQkJXAotCQlhc20ob3AgIncgJTEsIl9fcGVyY3B1X3NlZyIlMCIJCVwKKwkJYXNtKG9wICJ3ICUxLCJfX3BlcmNwdV9hcmcoMCkJCVwKIAkJICAgIDogIittIiAodmFyKQkJCVwKIAkJICAgIDogInJpIiAoKFRfXyl2YWwpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShvcCAibCAlMSwiX19wZXJjcHVfc2VnIiUwIgkJXAorCQlhc20ob3AgImwgJTEsIl9fcGVyY3B1X2FyZygwKQkJXAogCQkgICAgOiAiK20iICh2YXIpCQkJXAogCQkgICAgOiAicmkiICgoVF9fKXZhbCkpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCisJY2FzZSA4OgkJCQkJCVwKKwkJYXNtKG9wICJxICUxLCJfX3BlcmNwdV9hcmcoMCkJCVwKKwkJICAgIDogIittIiAodmFyKQkJCVwKKwkJICAgIDogInJlIiAoKFRfXyl2YWwpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAogCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAogCX0JCQkJCQlcCiB9IHdoaWxlICgwKQpAQCAtMTQzLDE3ICsxMDgsMjIgQEAKIAl0eXBlb2YodmFyKSByZXRfXzsJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAogCWNhc2UgMToJCQkJCQlcCi0JCWFzbShvcCAiYiAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKIAkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCi0JCWFzbShvcCAidyAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQlhc20ob3AgIncgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKIAkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShvcCAibCAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQlhc20ob3AgImwgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCisJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgODoJCQkJCQlcCisJCWFzbShvcCAicSAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocmV0X18pCQkJXAogCQkgICAgOiAibSIgKHZhcikpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCkBAIC0xNjIsMTMgKzEzMiwzMCBAQAogCXJldF9fOwkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgeDg2X3JlYWRfcGVyY3B1KHZhcikgcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyKQotI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9hZGRfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9zdWJfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoInN1YiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9vcl9wZXJjcHUodmFyLCB2YWwpIHBlcmNwdV90b19vcCgib3IiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfcmVhZCh2YXIpCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhcikKKyNkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV9hZGQodmFyLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKyNkZWZpbmUgcGVyY3B1X3N1Yih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfYW5kKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV9vcih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV94b3IodmFyLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKworLyogVGhpcyBpcyBub3QgYXRvbWljIGFnYWluc3Qgb3RoZXIgQ1BVcyAtLSBDUFUgcHJlZW1wdGlvbiBuZWVkcyB0byBiZSBvZmYgKi8KKyNkZWZpbmUgeDg2X3Rlc3RfYW5kX2NsZWFyX2JpdF9wZXJjcHUoYml0LCB2YXIpCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBvbGRfXzsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiYnRyICUyLCJfX3BlcmNwdV9hcmcoMSkiXG5cdHNiYmwgJTAsJTAiCQlcCisJCSAgICAgOiAiPXIiIChvbGRfXyksICIrbSIgKHBlcl9jcHVfXyMjdmFyKQkJXAorCQkgICAgIDogImRJciIgKGJpdCkpOwkJCQkJXAorCW9sZF9fOwkJCQkJCQkJXAorfSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisvKiBXZSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yIGxvY2FsIENQVSAoZmFzdGVyKS4gKi8KK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qICFDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBDT05GSUdfU01QCiAKQEAgLTE5NSw5ICsxODIsOSBAQAogI2RlZmluZQllYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgKF9uYW1lIyNfZWFybHlfcHRyKQogI2RlZmluZQllYXJseV9wZXJfY3B1X21hcChfbmFtZSwgX2lkeCkgKF9uYW1lIyNfZWFybHlfbWFwW19pZHhdKQogI2RlZmluZQllYXJseV9wZXJfY3B1KF9uYW1lLCBfY3B1KSAJCQkJXAotCShlYXJseV9wZXJfY3B1X3B0cihfbmFtZSkgPwkJCQlcCi0JCWVhcmx5X3Blcl9jcHVfcHRyKF9uYW1lKVtfY3B1XSA6CQlcCi0JCXBlcl9jcHUoX25hbWUsIF9jcHUpKQorCSooZWFybHlfcGVyX2NwdV9wdHIoX25hbWUpID8JCQkJXAorCQkmZWFybHlfcGVyX2NwdV9wdHIoX25hbWUpW19jcHVdIDoJCVwKKwkJJnBlcl9jcHUoX25hbWUsIF9jcHUpKQogCiAjZWxzZQkvKiAhQ09ORklHX1NNUCAqLwogI2RlZmluZQlERUZJTkVfRUFSTFlfUEVSX0NQVShfdHlwZSwgX25hbWUsIF9pbml0dmFsdWUpCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3N2RiODkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzJMRVZFTF9ERUZTX0gKLSNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICi0KLSNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMAotCi0vKgotICogdHJhZGl0aW9uYWwgaTM4NiB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZToKLSAqLwotCi0jZGVmaW5lIFBHRElSX1NISUZUCTIyCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkxMDI0Ci0KLS8qCi0gKiB0aGUgaTM4NiBpcyB0d28tbGV2ZWwsIHNvIHdlIGRvbid0IHJlYWxseSBoYXZlIGFueQotICogUE1EIGRpcmVjdG9yeSBwaHlzaWNhbGx5LgotICovCi0KLSNkZWZpbmUgUFRSU19QRVJfUFRFCTEwMjQKLQotI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfMkxFVkVMX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKaW5kZXggZTBkMTk5Zi4uYzE3NzRhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC01Myw4ICs1Myw2IEBACiAjZGVmaW5lIG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIoeHApCiAjZW5kaWYKIAotI2RlZmluZSBwdGVfbm9uZSh4KQkJKCEoeCkucHRlX2xvdykKLQogLyoKICAqIEJpdHMgX1BBR0VfQklUX1BSRVNFTlQsIF9QQUdFX0JJVF9GSUxFIGFuZCBfUEFHRV9CSVRfUFJPVE5PTkUgYXJlIHRha2VuLAogICogc3BsaXQgdXAgdGhlIDI5IGJpdHMgb2Ygb2Zmc2V0IGludG8gdGhpcyByYW5nZToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYWNjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbF90eXBlcy5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICisjZGVmaW5lIF9BU01fWDg2X1BHVEFCTEVfMkxFVkVMX0RFRlNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwdGV2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwbWR2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwdWR2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ2R2YWxfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ3Byb3R2YWxfdDsKKwordHlwZWRlZiB1bmlvbiB7CisJcHRldmFsX3QgcHRlOworCXB0ZXZhbF90IHB0ZV9sb3c7Cit9IHB0ZV90OworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBTSEFSRURfS0VSTkVMX1BNRAkwCisjZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMgorCisvKgorICogdHJhZGl0aW9uYWwgaTM4NiB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZToKKyAqLworCisjZGVmaW5lIFBHRElSX1NISUZUCTIyCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkxMDI0CisKKworLyoKKyAqIHRoZSBpMzg2IGlzIHR3by1sZXZlbCwgc28gd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYW55CisgKiBQTUQgZGlyZWN0b3J5IHBoeXNpY2FsbHkuCisgKi8KKworI2RlZmluZSBQVFJTX1BFUl9QVEUJMTAyNAorCisjZW5kaWYgLyogX0FTTV9YODZfUEdUQUJMRV8yTEVWRUxfREVGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCA0NDdkYTQzLi4zZjEzY2RmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKQEAgLTE4LDIxICsxOCw2IEBACiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlcCglMDE2THgpLlxuIiwJCQkJXAogCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHBnZF92YWwoZSkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9ub25lKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gcHVkX3ZhbChwdWQpID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKQotewotCXJldHVybiAocHVkX3ZhbChwdWQpICYgfihQVEVfUEZOX01BU0sgfCBfS0VSTlBHX1RBQkxFIHwgX1BBR0VfVVNFUikpICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9wcmVzZW50KHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gcHVkX3ZhbChwdWQpICYgX1BBR0VfUFJFU0VOVDsKLX0KLQogLyogUnVsZXMgZm9yIHVzaW5nIHNldF9wdGU6IHRoZSBwdGUgYmVpbmcgYXNzaWduZWQgKm11c3QqIGJlCiAgKiBlaXRoZXIgbm90IHByZXNlbnQgb3IgaW4gYSBzdGF0ZSB3aGVyZSB0aGUgaGFyZHdhcmUgd2lsbAogICogbm90IGF0dGVtcHQgdG8gdXBkYXRlIHRoZSBwdGUuICBJbiBwbGFjZXMgd2hlcmUgdGhpcyBpcwpAQCAtMTIwLDE1ICsxMDUsNiBAQAogCQl3cml0ZV9jcjMocGdkKTsKIH0KIAotI2RlZmluZSBwdWRfcGFnZShwdWQpIHBmbl90b19wYWdlKHB1ZF92YWwocHVkKSA+PiBQQUdFX1NISUZUKQotCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBURV9QRk5fTUFTSykpCi0KLQotLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLwotI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKXB1ZF9wYWdlX3ZhZGRyKCoocHVkKSkgKwlcCi0JCQkJICBwbWRfaW5kZXgoYWRkcmVzcykpCi0KICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlX3QgKnB0ZXApCiB7CkBAIC0xNDUsMTcgKzEyMSw2IEBACiAjZGVmaW5lIG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wdGVwX2dldF9hbmRfY2xlYXIoeHApCiAjZW5kaWYKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgYSwgcHRlX3QgYikKLXsKLQlyZXR1cm4gYS5wdGVfbG93ID09IGIucHRlX2xvdyAmJiBhLnB0ZV9oaWdoID09IGIucHRlX2hpZ2g7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gIXB0ZS5wdGVfbG93ICYmICFwdGUucHRlX2hpZ2g7Ci19Ci0KIC8qCiAgKiBCaXRzIDAsIDYgYW5kIDcgYXJlIHRha2VuIGluIHRoZSBsb3cgcGFydCBvZiB0aGUgcHRlLAogICogcHV0IHRoZSAzMiBiaXRzIG9mIG9mZnNldCBpbnRvIHRoZSBoaWdoIHBhcnQuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbF90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLWRlZnMuaApyZW5hbWUgdG8gYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWxfdHlwZXMuaAppbmRleCA2MjU2MTM2Li4xYmQ1ODc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC1kZWZzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWxfdHlwZXMuaApAQCAtMSwxMiArMSwzMSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzNMRVZFTF9ERUZTX0gKICNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8zTEVWRUxfREVGU19ICiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1NjQJcHRldmFsX3Q7Cit0eXBlZGVmIHU2NAlwbWR2YWxfdDsKK3R5cGVkZWYgdTY0CXB1ZHZhbF90OwordHlwZWRlZiB1NjQJcGdkdmFsX3Q7Cit0eXBlZGVmIHU2NAlwZ3Byb3R2YWxfdDsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsKKwl9OworCXB0ZXZhbF90IHB0ZTsKK30gcHRlX3Q7CisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECShwdl9pbmZvLnNoYXJlZF9rZXJuZWxfcG1kKQogI2Vsc2UKICNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMQogI2VuZGlmCiAKKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwkzCisKIC8qCiAgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCiAgKi8KQEAgLTI1LDQgKzQ0LDUgQEAKICAqLwogI2RlZmluZSBQVFJTX1BFUl9QVEUJNTEyCiAKKwogI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfM0xFVkVMX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDRmNWFmODQuLmQwODEyZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEsMTY0ICsxLDkgQEAKICNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV9ICiAjZGVmaW5lIF9BU01fWDg2X1BHVEFCTEVfSAogCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkwCS8qIGlzIHByZXNlbnQgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1JXCQkxCS8qIHdyaXRlYWJsZSAqLwotI2RlZmluZSBfUEFHRV9CSVRfVVNFUgkJMgkvKiB1c2Vyc3BhY2UgYWRkcmVzc2FibGUgKi8KLSNkZWZpbmUgX1BBR0VfQklUX1BXVAkJMwkvKiBwYWdlIHdyaXRlIHRocm91Z2ggKi8KLSNkZWZpbmUgX1BBR0VfQklUX1BDRAkJNAkvKiBwYWdlIGNhY2hlIGRpc2FibGVkICovCi0jZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAk1CS8qIHdhcyBhY2Nlc3NlZCAocmFpc2VkIGJ5IENQVSkgKi8KLSNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQk2CS8qIHdhcyB3cml0dGVuIHRvIChyYWlzZWQgYnkgQ1BVKSAqLwotI2RlZmluZSBfUEFHRV9CSVRfUFNFCQk3CS8qIDQgTUIgKG9yIDJNQikgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9CSVRfUEFUCQk3CS8qIG9uIDRLQiBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV9CSVRfR0xPQkFMCTgJLyogR2xvYmFsIFRMQiBlbnRyeSBQUHJvKyAqLwotI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMQk5CS8qIGF2YWlsYWJsZSBmb3IgcHJvZ3JhbW1lciAqLwotI2RlZmluZSBfUEFHRV9CSVRfSU9NQVAJCTEwCS8qIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSBJTyBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQzCTExCi0jZGVmaW5lIF9QQUdFX0JJVF9QQVRfTEFSR0UJMTIJLyogT24gMk1CIG9yIDFHQiBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV9CSVRfU1BFQ0lBTAlfUEFHRV9CSVRfVU5VU0VEMQotI2RlZmluZSBfUEFHRV9CSVRfQ1BBX1RFU1QJX1BBR0VfQklUX1VOVVNFRDEKLSNkZWZpbmUgX1BBR0VfQklUX05YICAgICAgICAgICA2MyAgICAgICAvKiBObyBleGVjdXRlOiBvbmx5IHZhbGlkIGFmdGVyIGNwdWlkIGNoZWNrICovCi0KLS8qIElmIF9QQUdFX0JJVF9QUkVTRU5UIGlzIGNsZWFyLCB3ZSB1c2UgdGhlc2U6ICovCi0vKiAtIGlmIHRoZSB1c2VyIG1hcHBlZCBpdCB3aXRoIFBST1RfTk9ORTsgcHRlX3ByZXNlbnQgZ2l2ZXMgdHJ1ZSAqLwotI2RlZmluZSBfUEFHRV9CSVRfUFJPVE5PTkUJX1BBR0VfQklUX0dMT0JBTAotLyogLSBzZXQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcsIHNhdmVkIFBURTsgdW5zZXQ6c3dhcCAqLwotI2RlZmluZSBfUEFHRV9CSVRfRklMRQkJX1BBR0VfQklUX0RJUlRZCi0KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFJFU0VOVCkKLSNkZWZpbmUgX1BBR0VfUlcJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1JXKQotI2RlZmluZSBfUEFHRV9VU0VSCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9VU0VSKQotI2RlZmluZSBfUEFHRV9QV1QJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BXVCkKLSNkZWZpbmUgX1BBR0VfUENECShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQ0QpCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9BQ0NFU1NFRCkKLSNkZWZpbmUgX1BBR0VfRElSVFkJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0RJUlRZKQotI2RlZmluZSBfUEFHRV9QU0UJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BTRSkKLSNkZWZpbmUgX1BBR0VfR0xPQkFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9HTE9CQUwpCi0jZGVmaW5lIF9QQUdFX1VOVVNFRDEJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VOVVNFRDEpCi0jZGVmaW5lIF9QQUdFX0lPTUFQCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9JT01BUCkKLSNkZWZpbmUgX1BBR0VfVU5VU0VEMwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVU5VU0VEMykKLSNkZWZpbmUgX1BBR0VfUEFUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQVQpCi0jZGVmaW5lIF9QQUdFX1BBVF9MQVJHRSAoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUEFUX0xBUkdFKQotI2RlZmluZSBfUEFHRV9TUEVDSUFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9TUEVDSUFMKQotI2RlZmluZSBfUEFHRV9DUEFfVEVTVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfQ1BBX1RFU1QpCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCi0jZGVmaW5lIF9QQUdFX05YCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9OWCkKLSNlbHNlCi0jZGVmaW5lIF9QQUdFX05YCShfQVQocHRldmFsX3QsIDApKQotI2VuZGlmCi0KLSNkZWZpbmUgX1BBR0VfRklMRQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfRklMRSkKLSNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BST1ROT05FKQotCi0jZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwJXAotCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCi0jZGVmaW5lIF9LRVJOUEdfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwJXAotCQkJIF9QQUdFX0RJUlRZKQotCi0vKiBTZXQgb2YgYml0cyBub3QgY2hhbmdlZCBpbiBwdGVfbW9kaWZ5ICovCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfUEZOX01BU0sgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QgfAkJXAotCQkJIF9QQUdFX1NQRUNJQUwgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQotCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX01BU0sJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfV0IJCSgwKQotI2RlZmluZSBfUEFHRV9DQUNIRV9XQwkJKF9QQUdFX1BXVCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfVUNfTUlOVVMJKF9QQUdFX1BDRCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfVUMJCShfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBcCi0JCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCi0KLSNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfAlcCi0JCQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCi0jZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCi0JCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQotI2RlZmluZSBQQUdFX0NPUFlfRVhFQwkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCi0JCQkJCSBfUEFHRV9BQ0NFU1NFRCkKLSNkZWZpbmUgUEFHRV9DT1BZCQlQQUdFX0NPUFlfTk9FWEVDCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAotCQkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKLSNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwJXAotCQkJCQkgX1BBR0VfQUNDRVNTRUQpCi0KLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDCQkJCQkJXAotCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfR0xPQkFMKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMCQkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfTlgpCi0KLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9STwkJKF9fUEFHRV9LRVJORUwgJiB+X1BBR0VfUlcpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfUlgJCShfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfV0MJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfV0MpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfVUNfTUlOVVMJCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfUENEKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMCQkoX19QQUdFX0tFUk5FTF9SWCB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QU0UpCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0NBQ0hFX1VDIHwgX1BBR0VfUFNFKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BTRSkKLQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX0lPTUFQKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfTk9DQUNIRSB8IF9QQUdFX0lPTUFQKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTCShfX1BBR0VfS0VSTkVMX1VDX01JTlVTIHwgX1BBR0VfSU9NQVApCi0jZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fV0MJCShfX1BBR0VfS0VSTkVMX1dDIHwgX1BBR0VfSU9NQVApCi0KLSNkZWZpbmUgUEFHRV9LRVJORUwJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMKQotI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfUk8pCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQykKLSNkZWZpbmUgUEFHRV9LRVJORUxfUlgJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JYKQotI2RlZmluZSBQQUdFX0tFUk5FTF9XQwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfV0MpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0UJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0UpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMKQotI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRSkKLQotI2RlZmluZSBQQUdFX0tFUk5FTF9JTwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU8pCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1dDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1dDKQotCi0vKiAgICAgICAgIHh3ciAqLwotI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9FWEVDCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX0VYRUMKLSNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9FWEVDCi0jZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfRVhFQwotCi0jZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9FWEVDCi0jZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0VYRUMKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0VYRUMKLSNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0VYRUMKLQotLyoKLSAqIGVhcmx5IGlkZW50aXR5IG1hcHBpbmcgIHB0ZSBhdHRyaWIgbWFjcm9zLgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lERU5UX0xBUkdFX0VYRUMJX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDCi0jZWxzZQotLyoKLSAqIEZvciBQREVfSURFTlRfQVRUUiBpbmNsdWRlIFVTRVIgYml0LiBBcyB0aGUgUERFIGFuZCBQVEUgcHJvdGVjdGlvbgotICogYml0cyBhcmUgY29tYmluZWQsIHRoaXMgd2lsbCBhbG93IHVzZXIgdG8gYWNjZXNzIHRoZSBoaWdoIGFkZHJlc3MgbWFwcGVkCi0gKiBWRFNPIGluIHRoZSBwcmVzZW5jZSBvZiBDT05GSUdfQ09NUEFUX1ZEU08KLSAqLwotI2RlZmluZSBQVEVfSURFTlRfQVRUUgkgMHgwMDMJCS8qIFBSRVNFTlQrUlcgKi8KLSNkZWZpbmUgUERFX0lERU5UX0FUVFIJIDB4MDY3CQkvKiBQUkVTRU5UK1JXK1VTRVIrRElSVFkrQUNDRVNTRUQgKi8KLSNkZWZpbmUgUEdEX0lERU5UX0FUVFIJIDB4MDAxCQkvKiBQUkVTRU5UIChubyBvdGhlciBhdHRyaWJ1dGVzKSAqLwotI2VuZGlmCisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KIAogLyoKICAqIE1hY3JvIHRvIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgVUMtCkBAIC0xNzAsOSArMTUsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUJcGdwcm90X3dyaXRlY29tYmluZQotZXh0ZXJuIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7Ci0KIC8qCiAgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAogICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgpAQCAtMTgzLDYgKzI1LDY2IEBACiBleHRlcm4gc3BpbmxvY2tfdCBwZ2RfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBnZF9saXN0OwogCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLworI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQluYXRpdmVfc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQorCisjZGVmaW5lIHNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQkJCQlcCisJbmF0aXZlX3NldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQorI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCQkJCQlcCisJbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkKKworI2RlZmluZSBzZXRfcG1kKHBtZHAsIHBtZCkJCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIHBtZCkKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECisjZGVmaW5lIHNldF9wZ2QocGdkcCwgcGdkKQkJbmF0aXZlX3NldF9wZ2QocGdkcCwgcGdkKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkKQkJCW5hdGl2ZV9wZ2RfY2xlYXIocGdkKQorI2VuZGlmCisKKyNpZm5kZWYgc2V0X3B1ZAorIyBkZWZpbmUgc2V0X3B1ZChwdWRwLCBwdWQpCQluYXRpdmVfc2V0X3B1ZChwdWRwLCBwdWQpCisjZW5kaWYKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisjZGVmaW5lIHB1ZF9jbGVhcihwdWQpCQkJbmF0aXZlX3B1ZF9jbGVhcihwdWQpCisjZW5kaWYKKworI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCW5hdGl2ZV9wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCisjZGVmaW5lIHBtZF9jbGVhcihwbWQpCQkJbmF0aXZlX3BtZF9jbGVhcihwbWQpCisKKyNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VwZGF0ZV9kZWZlcihtbSwgYWRkciwgcHRlcCkgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCit7CisJbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChiYXNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKK3sKKwluYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUoYmFzZSk7Cit9CisKKyNkZWZpbmUgcGdkX3ZhbCh4KQluYXRpdmVfcGdkX3ZhbCh4KQorI2RlZmluZSBfX3BnZCh4KQluYXRpdmVfbWFrZV9wZ2QoeCkKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECisjZGVmaW5lIHB1ZF92YWwoeCkJbmF0aXZlX3B1ZF92YWwoeCkKKyNkZWZpbmUgX19wdWQoeCkJbmF0aXZlX21ha2VfcHVkKHgpCisjZW5kaWYKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisjZGVmaW5lIHBtZF92YWwoeCkJbmF0aXZlX3BtZF92YWwoeCkKKyNkZWZpbmUgX19wbWQoeCkJbmF0aXZlX21ha2VfcG1kKHgpCisjZW5kaWYKKworI2RlZmluZSBwdGVfdmFsKHgpCW5hdGl2ZV9wdGVfdmFsKHgpCisjZGVmaW5lIF9fcHRlKHgpCW5hdGl2ZV9tYWtlX3B0ZSh4KQorCisjZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCisKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCiAgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCkBAIC0yMzYsNzIgKzEzOCw4NCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBwbWRfbGFyZ2UocG1kX3QgcHRlKQogewotCXJldHVybiAocG1kX3ZhbChwdGUpICYgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpKSA9PQorCXJldHVybiAocG1kX2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCkpID09CiAJCShfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKTsKIH0KIAorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc2V0X2ZsYWdzKHB0ZV90IHB0ZSwgcHRldmFsX3Qgc2V0KQoreworCXB0ZXZhbF90IHYgPSBuYXRpdmVfcHRlX3ZhbChwdGUpOworCisJcmV0dXJuIG5hdGl2ZV9tYWtlX3B0ZSh2IHwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfY2xlYXJfZmxhZ3MocHRlX3QgcHRlLCBwdGV2YWxfdCBjbGVhcikKK3sKKwlwdGV2YWxfdCB2ID0gbmF0aXZlX3B0ZV92YWwocHRlKTsKKworCXJldHVybiBuYXRpdmVfbWFrZV9wdGUodiAmIH5jbGVhcik7Cit9CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRElSVFkpOworCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9ESVJUWSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0FDQ0VTU0VEKTsKKwlyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfQUNDRVNTRUQpOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUlcpOworCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9SVyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9OWCk7CisJcmV0dXJuIHB0ZV9jbGVhcl9mbGFncyhwdGUsIF9QQUdFX05YKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0RJUlRZKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX0RJUlRZKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FDQ0VTU0VEKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX0FDQ0VTU0VEKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX1JXKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUFNFKTsKKwlyZXR1cm4gcHRlX3NldF9mbGFncyhwdGUsIF9QQUdFX1BTRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2Nscmh1Z2UocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUFNFKTsKKwlyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfUFNFKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtnbG9iYWwocHRlX3QgcHRlKQogewotCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9HTE9CQUwpOworCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BBR0VfR0xPQkFMKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfY2xyZ2xvYmFsKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0dMT0JBTCk7CisJcmV0dXJuIHB0ZV9jbGVhcl9mbGFncyhwdGUsIF9QQUdFX0dMT0JBTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1NQRUNJQUwpOworCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BBR0VfU1BFQ0lBTCk7CiB9CiAKLWV4dGVybiBwdGV2YWxfdCBfX3N1cHBvcnRlZF9wdGVfbWFzazsKLQogLyoKICAqIE1hc2sgb3V0IHVuc3VwcG9ydGVkIGJpdHMgaW4gYSBwcmVzZW50IHBncHJvdC4gIE5vbi1wcmVzZW50IHBncHJvdHMKICAqIGNhbiB1c2UgdGhvc2UgYml0cyBmb3Igb3RoZXIgcHVycG9zZXMsIHNvIGxlYXZlIHRoZW0gYmUuCkBAIC0zNzQsNzUgKzI4OCw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBJbmRpY2F0ZSB0aGF0IHg4NiBoYXMgaXRzIG93biB0cmFjayBhbmQgdW50cmFjayBwZm4gdm1hIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBfX0hBVkVfUEZOTUFQX1RSQUNLSU5HCi0KLSNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCi1zdHJ1Y3QgZmlsZTsKLXBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3Qgdm1hX3Byb3QpOwotaW50IHBoeXNfbWVtX2FjY2Vzc19wcm90X2FsbG93ZWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqdm1hX3Byb3QpOwotI2VuZGlmCi0KLS8qIEluc3RhbGwgYSBwdGUgZm9yIGEgcGFydGljdWxhciB2YWRkciBpbiBrZXJuZWwgc3BhY2UuICovCi12b2lkIHNldF9wdGVfdmFkZHIodW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgcHRlKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpOwotZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpIHt9Ci0jZW5kaWYKLQotc3RydWN0IHNlcV9maWxlOwotZXh0ZXJuIHZvaWQgYXJjaF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZSAgLyogIUNPTkZJR19QQVJBVklSVCAqLwotI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKLSNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQluYXRpdmVfc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQotCi0jZGVmaW5lIHNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQkJCQlcCi0JbmF0aXZlX3NldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQotI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCQkJCQlcCi0JbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkKLQotI2RlZmluZSBzZXRfcG1kKHBtZHAsIHBtZCkJCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIHBtZCkKLQotI2lmbmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECi0jZGVmaW5lIHNldF9wZ2QocGdkcCwgcGdkKQkJbmF0aXZlX3NldF9wZ2QocGdkcCwgcGdkKQotI2RlZmluZSBwZ2RfY2xlYXIocGdkKQkJCW5hdGl2ZV9wZ2RfY2xlYXIocGdkKQotI2VuZGlmCi0KLSNpZm5kZWYgc2V0X3B1ZAotIyBkZWZpbmUgc2V0X3B1ZChwdWRwLCBwdWQpCQluYXRpdmVfc2V0X3B1ZChwdWRwLCBwdWQpCi0jZW5kaWYKLQotI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECi0jZGVmaW5lIHB1ZF9jbGVhcihwdWQpCQkJbmF0aXZlX3B1ZF9jbGVhcihwdWQpCi0jZW5kaWYKLQotI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCW5hdGl2ZV9wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApCi0jZGVmaW5lIHBtZF9jbGVhcihwbWQpCQkJbmF0aXZlX3BtZF9jbGVhcihwbWQpCi0KLSNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkgICAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHRlX3VwZGF0ZV9kZWZlcihtbSwgYWRkciwgcHRlcCkgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCi17Ci0JbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChiYXNlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwYXJhdmlydF9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKLXsKLQluYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUoYmFzZSk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX1BBUkFWSVJUICovCi0KK3BtZF90ICpwb3B1bGF0ZV9leHRyYV9wbWQodW5zaWduZWQgbG9uZyB2YWRkcik7CitwdGVfdCAqcG9wdWxhdGVfZXh0cmFfcHRlKHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtNDUxLDYgKzI5OCwxODggQEAKICMgaW5jbHVkZSAicGd0YWJsZV82NC5oIgogI2VuZGlmCiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KKworc3RhdGljIGlubGluZSBpbnQgcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiAhcHRlLnB0ZTsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQorc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgYSwgcHRlX3QgYikKK3sKKwlyZXR1cm4gYS5wdGUgPT0gYi5wdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IGEpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhhKSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpCit7CisJcmV0dXJuIHBtZF9mbGFncyhwbWQpICYgX1BBR0VfUFJFU0VOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKQoreworCS8qIE9ubHkgY2hlY2sgbG93IHdvcmQgb24gMzItYml0IHBsYXRmb3Jtcywgc2luY2UgaXQgbWlnaHQgYmUKKwkgICBvdXQgb2Ygc3luYyB3aXRoIHVwcGVyIGhhbGYuICovCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKW5hdGl2ZV9wbWRfdmFsKHBtZCkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX192YShwbWRfdmFsKHBtZCkgJiBQVEVfUEZOX01BU0spOworfQorCisvKgorICogQ3VycmVudGx5IHN0dWNrIGFzIGEgbWFjcm8gZHVlIHRvIGluZGlyZWN0IGZvcndhcmQgcmVmZXJlbmNlIHRvCisgKiBsaW51eC9tbXpvbmUuaCdzIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoKSBkZWZpbml0aW9uOgorICovCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJcGZuX3RvX3BhZ2UocG1kX3ZhbChwbWQpID4+IFBBR0VfU0hJRlQpCisKKy8qCisgKiB0aGUgcG1kIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwbWRfdFtQVFJTX1BFUl9QTURdCisgKgorICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHBtZCBwYWdlIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwbWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAoYWRkcmVzcyA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpOworfQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKgorICogKEN1cnJlbnRseSBzdHVjayBhcyBhIG1hY3JvIGJlY2F1c2Ugb2YgaW5kaXJlY3QgZm9yd2FyZCByZWZlcmVuY2UKKyAqIHRvIGxpbnV4L21tLmg6cGFnZV90b19uaWQoKSkKKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSAgIHBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCisvKgorICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQorICoKKyAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHRlX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9vZmZzZXRfa2VybmVsKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB0ZV90ICopcG1kX3BhZ2VfdmFkZHIoKnBtZCkgKyBwdGVfaW5kZXgoYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX2ZsYWdzKHBtZCkgJiB+X1BBR0VfVVNFUikgIT0gX0tFUk5QR19UQUJMRTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX21iKHVuc2lnbmVkIGxvbmcgbnBnKQoreworCXJldHVybiBucGcgPj4gKDIwIC0gUEFHRV9TSElGVCk7Cit9CisKKyNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAorCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgorc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKQoreworCXJldHVybiBuYXRpdmVfcHVkX3ZhbChwdWQpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9wcmVzZW50KHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gcHVkX2ZsYWdzKHB1ZCkgJiBfUEFHRV9QUkVTRU5UOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX3BhZ2VfdmFkZHIocHVkX3QgcHVkKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKCh1bnNpZ25lZCBsb25nKXB1ZF92YWwocHVkKSAmIFBURV9QRk5fTUFTSyk7Cit9CisKKy8qCisgKiBDdXJyZW50bHkgc3R1Y2sgYXMgYSBtYWNybyBkdWUgdG8gaW5kaXJlY3QgZm9yd2FyZCByZWZlcmVuY2UgdG8KKyAqIGxpbnV4L21tem9uZS5oJ3MgX19zZWN0aW9uX21lbV9tYXBfYWRkcigpIGRlZmluaXRpb246CisgKi8KKyNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJcGZuX3RvX3BhZ2UocHVkX3ZhbChwdWQpID4+IFBBR0VfU0hJRlQpCisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wZm4ocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX3ZhbChwbWQpICYgUFRFX1BGTl9NQVNLKSA+PiBQQUdFX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHVkKQoreworCXJldHVybiAocHVkX3ZhbChwdWQpICYgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpKSA9PQorCQkoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKQoreworCXJldHVybiAocHVkX2ZsYWdzKHB1ZCkgJiB+KF9LRVJOUEdfVEFCTEUgfCBfUEFHRV9VU0VSKSkgIT0gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHVkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPiAyICovCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMworc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQoreworCXJldHVybiBwZ2RfZmxhZ3MocGdkKSAmIF9QQUdFX1BSRVNFTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZ2RfcGFnZV92YWRkcihwZ2RfdCBwZ2QpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKV9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbChwZ2QpICYgUFRFX1BGTl9NQVNLKTsKK30KKworLyoKKyAqIEN1cnJlbnRseSBzdHVjayBhcyBhIG1hY3JvIGR1ZSB0byBpbmRpcmVjdCBmb3J3YXJkIHJlZmVyZW5jZSB0bworICogbGludXgvbW16b25lLmgncyBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKCkgZGVmaW5pdGlvbjoKKyAqLworI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQlwZm5fdG9fcGFnZShwZ2RfdmFsKHBnZCkgPj4gUEFHRV9TSElGVCkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwdWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAoYWRkcmVzcyA+PiBQVURfU0hJRlQpICYgKFBUUlNfUEVSX1BVRCAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfb2Zmc2V0KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB1ZF90ICopcGdkX3BhZ2VfdmFkZHIoKnBnZCkgKyBwdWRfaW5kZXgoYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQoreworCXJldHVybiAocGdkX2ZsYWdzKHBnZCkgJiB+X1BBR0VfVVNFUikgIT0gX0tFUk5QR19UQUJMRTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQoreworCXJldHVybiAhbmF0aXZlX3BnZF92YWwocGdkKTsKK30KKyNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID4gMyAqLworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKIC8qCiAgKiB0aGUgcGdkIHBhZ2UgY2FuIGJlIHRob3VnaHQgb2YgYW4gYXJyYXkgbGlrZSB0aGlzOiBwZ2RfdFtQVFJTX1BFUl9QR0RdCiAgKgpAQCAtNDc2LDI4ICs1MDUsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1lbnVtIHsKLQlQR19MRVZFTF9OT05FLAotCVBHX0xFVkVMXzRLLAotCVBHX0xFVkVMXzJNLAotCVBHX0xFVkVMXzFHLAotCVBHX0xFVkVMX05VTQotfTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gdm9pZCB1cGRhdGVfcGFnZV9jb3VudChpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcGFnZXMpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcGFnZV9jb3VudChpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcGFnZXMpIHsgfQotI2VuZGlmCi0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBrZXJuZWwgcGFnZXRhYmxlIGVudHJ5IGNvbnRyb2xsaW5nCi0gKiB0aGUgdmlydHVhbCBhZGRyZXNzICdhZGRyZXNzJy4gTlVMTCBtZWFucyBubyBwYWdldGFibGUgZW50cnkgcHJlc2VudC4KLSAqIE5PVEU6IHRoZSByZXR1cm4gdHlwZSBpcyBwdGVfdCBidXQgaWYgdGhlIHBtZCBpcyBQU0UgdGhlbiB3ZSByZXR1cm4gaXQKLSAqIGFzIGEgcHRlIHRvby4KLSAqLwotZXh0ZXJuIHB0ZV90ICpsb29rdXBfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqbGV2ZWwpOwotCiAvKiBsb2NhbCBwdGUgdXBkYXRlcyBuZWVkIG5vdCB1c2UgeGNoZyBmb3IgbG9ja2luZyAqLwogc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyKHB0ZV90ICpwdGVwKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDcyYjAyMGQuLjk3NjEyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fWDg2X1BHVEFCTEVfMzJfSAogI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzMyX0gKIAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlXzMyX3R5cGVzLmg+CiAKIC8qCiAgKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCkBAIC0zMyw0NyArMzQsNiBAQAogCiBleHRlcm4gdm9pZCBzZXRfcG1kX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CiAKLS8qCi0gKiBUaGUgTGludXggeDg2IHBhZ2luZyBhcmNoaXRlY3R1cmUgaXMgJ2NvbXBpbGUtdGltZSBkdWFsLW1vZGUnLCBpdAotICogaW1wbGVtZW50cyBib3RoIHRoZSB0cmFkaXRpb25hbCAyLWxldmVsIHg4NiBwYWdlIHRhYmxlcyBhbmQgdGhlCi0gKiBuZXdlciAzLWxldmVsIFBBRS1tb2RlIHBhZ2UgdGFibGVzLgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLWRlZnMuaD4KLSMgZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQotIyBkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKLSNlbHNlCi0jIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRSAtIDEpKQotCi0vKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSg4ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSNkZWZpbmUgTEFTVF9QS01BUCA1MTIKLSNlbHNlCi0jZGVmaW5lIExBU1RfUEtNQVAgMTAyNAotI2VuZGlmCi0KLSNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfQk9PVF9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKLQkJICAgICYgUE1EX01BU0spCi0KLSNpZmRlZiBDT05GSUdfSElHSE1FTQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKFBLTUFQX0JBU0UgLSAyICogUEFHRV9TSVpFKQotI2Vsc2UKLSMgZGVmaW5lIFZNQUxMT0NfRU5ECShGSVhBRERSX1NUQVJUIC0gMiAqIFBBR0VfU0laRSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWE1FTQkoVk1BTExPQ19FTkQgLSBQQUdFX09GRlNFVCAtIF9fVk1BTExPQ19SRVNFUlZFKQogCiAvKgogICogRGVmaW5lIHRoaXMgaWYgdGhpbmdzIHdvcmsgZGlmZmVyZW50bHkgb24gYW4gaTM4NiBhbmQgYW4gaTQ4NjoKQEAgLTg1LDU1ICs0NSwxMiBAQAogLyogVGhlIGJvb3QgcGFnZSB0YWJsZXMgKGFsbCBjcmVhdGVkIGFzIGEgc2luZ2xlIGFycmF5KSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGcwW107CiAKLSNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKCh4KS5wdGVfbG93ICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCi0KLS8qIFRvIGF2b2lkIGhhcm1mdWwgcmFjZXMsIHBtZF9ub25lKHgpIHNob3VsZCBjaGVjayBvbmx5IHRoZSBsb3dlciB3aGVuIFBBRSAqLwotI2RlZmluZSBwbWRfbm9uZSh4KQkoISh1bnNpZ25lZCBsb25nKXBtZF92YWwoKHgpKSkKLSNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoKHgpKSAmIF9QQUdFX1BSRVNFTlQpCi0jZGVmaW5lIHBtZF9iYWQoeCkgKChwbWRfdmFsKHgpICYgKFBURV9GTEFHU19NQVNLICYgfl9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFKQotCi0jZGVmaW5lIHBhZ2VzX3RvX21iKHgpICgoeCkgPj4gKDIwLVBBR0VfU0hJRlQpKQotCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CiAjZWxzZQogIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KICNlbmRpZgogCi0vKgotICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKLSAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCi0gKi8KLSNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCi0KLQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB1ZCkgeyByZXR1cm4gMDsgfQotCi0vKgotICogdGhlIHBtZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcG1kX3RbUFRSU19QRVJfUE1EXQotICoKLSAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwbWQgcGFnZSB3aGljaCB3b3VsZAotICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCQkJCVwKLQkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKQotCi0vKgotICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQotICoKLSAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAotICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpCQkJCQlcCi0JKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykJCQkJXAotCSgocHRlX3QgKilwbWRfcGFnZV92YWRkcigqKGRpcikpICsgIHB0ZV9pbmRleCgoYWRkcmVzcykpKQotCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF92YWwoKHBtZCkpID4+IFBBR0VfU0hJRlQpKQotCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkJCQkJCVwKLQkoKHVuc2lnbmVkIGxvbmcpX192YShwbWRfdmFsKChwbWQpKSAmIFBURV9QRk5fTUFTSykpCi0KICNpZiBkZWZpbmVkKENPTkZJR19ISUdIUFRFKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCQkJCQlcCiAJKChwdGVfdCAqKWttYXBfYXRvbWljX3B0ZShwbWRfcGFnZSgqKGRpcikpLCBLTV9QVEUwKSArCQlcCkBAIC0xNzYsNyArOTMsNCBAQAogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoa2FkZHIpCSgwKQogI2VuZGlmCiAKLSNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhkZjNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV8zMl9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV8zMl9ERUZTX0gKKworLyoKKyAqIFRoZSBMaW51eCB4ODYgcGFnaW5nIGFyY2hpdGVjdHVyZSBpcyAnY29tcGlsZS10aW1lIGR1YWwtbW9kZScsIGl0CisgKiBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIDItbGV2ZWwgeDg2IHBhZ2UgdGFibGVzIGFuZCB0aGUKKyAqIG5ld2VyIDMtbGV2ZWwgUEFFLW1vZGUgcGFnZSB0YWJsZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWxfdHlwZXMuaD4KKyMgZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorIyBkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKKyNlbHNlCisjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbF90eXBlcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUgLSAxKSkKKworLyogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCisgKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKKyAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCisgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKKyAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKKyAqLworI2RlZmluZSBWTUFMTE9DX09GRlNFVAkoOCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCSgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKQorI2lmZGVmIENPTkZJR19YODZfUEFFCisjZGVmaW5lIExBU1RfUEtNQVAgNTEyCisjZWxzZQorI2RlZmluZSBMQVNUX1BLTUFQIDEwMjQKKyNlbmRpZgorCisjZGVmaW5lIFBLTUFQX0JBU0UgKChGSVhBRERSX0JPT1RfU1RBUlQgLSBQQUdFX1NJWkUgKiAoTEFTVF9QS01BUCArIDEpKQlcCisJCSAgICAmIFBNRF9NQVNLKQorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyMgZGVmaW5lIFZNQUxMT0NfRU5ECShQS01BUF9CQVNFIC0gMiAqIFBBR0VfU0laRSkKKyNlbHNlCisjIGRlZmluZSBWTUFMTE9DX0VORAkoRklYQUREUl9TVEFSVCAtIDIgKiBQQUdFX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBNQVhNRU0JKFZNQUxMT0NfRU5EIC0gUEFHRV9PRkZTRVQgLSBfX1ZNQUxMT0NfUkVTRVJWRSkKKworI2VuZGlmIC8qIF9BU01fWDg2X1BHVEFCTEVfMzJfREVGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggYmEwOTI4OS4uNmI4N2JjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtMiw2ICsyLDggQEAKICNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV82NF9ICiAKICNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlXzY0X3R5cGVzLmg+CisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCkBAIC0xMSw3ICsxMyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAKIGV4dGVybiBwdWRfdCBsZXZlbDNfa2VybmVsX3BndFs1MTJdOwogZXh0ZXJuIHB1ZF90IGxldmVsM19pZGVudF9wZ3RbNTEyXTsKQEAgLTI2LDMyICsyNyw2IEBACiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQJMAotCi0vKgotICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdG9wLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcAotICovCi0jZGVmaW5lIFBHRElSX1NISUZUCTM5Ci0jZGVmaW5lIFBUUlNfUEVSX1BHRAk1MTIKLQotLyoKLSAqIDNyZCBsZXZlbCBwYWdlCi0gKi8KLSNkZWZpbmUgUFVEX1NISUZUCTMwCi0jZGVmaW5lIFBUUlNfUEVSX1BVRAk1MTIKLQotLyoKLSAqIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgbWlkZGxlLWxldmVsCi0gKiBwYWdlIHRhYmxlIGNhbiBtYXAKLSAqLwotI2RlZmluZSBQTURfU0hJRlQJMjEKLSNkZWZpbmUgUFRSU19QRVJfUE1ECTUxMgotCi0vKgotICogZW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwKLSAqLwotI2RlZmluZSBQVFJTX1BFUl9QVEUJNTEyCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpCQkJCQlcCkBAIC02Nyw5ICs0Miw2IEBACiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlcCglMDE2bHgpLlxuIiwJCVwKIAkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQogCi0jZGVmaW5lIHBnZF9ub25lKHgpCSghcGdkX3ZhbCh4KSkKLSNkZWZpbmUgcHVkX25vbmUoeCkJKCFwdWRfdmFsKHgpKQotCiBzdHJ1Y3QgbW1fc3RydWN0OwogCiB2b2lkIHNldF9wdGVfdmFkZHJfcHVkKHB1ZF90ICpwdWRfcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgbmV3X3B0ZSk7CkBAIC0xMzQsNDggKzEwNiw2IEBACiAJbmF0aXZlX3NldF9wZ2QocGdkLCBuYXRpdmVfbWFrZV9wZ2QoMCkpOwogfQogCi0jZGVmaW5lIHB0ZV9zYW1lKGEsIGIpCQkoKGEpLnB0ZSA9PSAoYikucHRlKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFBNRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUgLSAxKSkKLSNkZWZpbmUgUFVEX1NJWkUJKF9BQygxLCBVTCkgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfTUFTSwkofihQVURfU0laRSAtIDEpKQotI2RlZmluZSBQR0RJUl9TSVpFCShfQUMoMSwgVUwpIDw8IFBHRElSX1NISUZUKQotI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUgLSAxKSkKLQotCi0jZGVmaW5lIE1BWE1FTQkJIF9BQyhfX0FDKDEsIFVMKSA8PCBNQVhfUEhZU01FTV9CSVRTLCBVTCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICBfQUMoMHhmZmZmYzIwMDAwMDAwMDAwLCBVTCkKLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICBfQUMoMHhmZmZmZTFmZmZmZmZmZmZmLCBVTCkKLSNkZWZpbmUgVk1FTU1BUF9TVEFSVAkgX0FDKDB4ZmZmZmUyMDAwMDAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfVkFERFIgICAgX0FDKDB4ZmZmZmZmZmZhMDAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfRU5EICAgICAgX0FDKDB4ZmZmZmZmZmZmZjAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfTEVOICAgKE1PRFVMRVNfRU5EIC0gTU9EVUxFU19WQUREUikKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCi17Ci0JcmV0dXJuIChwZ2RfdmFsKHBnZCkgJiB+KFBURV9QRk5fTUFTSyB8IF9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHVkKSAmIH4oUFRFX1BGTl9NQVNLIHwgX1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQotewotCXJldHVybiAocG1kX3ZhbChwbWQpICYgfihQVEVfUEZOX01BU0sgfCBfUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRTsKLX0KLQotI2RlZmluZSBwdGVfbm9uZSh4KQkoIXB0ZV92YWwoKHgpKSkKLSNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKHB0ZV92YWwoKHgpKSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQotCi0jZGVmaW5lIHBhZ2VzX3RvX21iKHgpCSgoeCkgPj4gKDIwIC0gUEFHRV9TSElGVCkpICAgLyogRklYTUU6IGlzIHRoaXMgcmlnaHQ/ICovCi0KIC8qCiAgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAogICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KQEAgLTE4NCw0MSArMTE0LDEyIEBACiAvKgogICogTGV2ZWwgNCBhY2Nlc3MuCiAgKi8KLSNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkJCQkJCVwKLQkoKHVuc2lnbmVkIGxvbmcpX192YSgodW5zaWduZWQgbG9uZylwZ2RfdmFsKChwZ2QpKSAmIFBURV9QRk5fTUFTSykpCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCShwZm5fdG9fcGFnZShwZ2RfdmFsKChwZ2QpKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKSAocGdkX3ZhbChwZ2QpICYgX1BBR0VfUFJFU0VOVCkKIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9sYXJnZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KICNkZWZpbmUgbWtfa2VybmVsX3BnZChhZGRyZXNzKSBfX3BnZCgoYWRkcmVzcykgfCBfS0VSTlBHX1RBQkxFKQogCiAvKiBQVUQgLSBMZXZlbDMgYWNjZXNzICovCi0vKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkJCQkJCQlcCi0JKCh1bnNpZ25lZCBsb25nKV9fdmEocHVkX3ZhbCgocHVkKSkgJiBQSFlTSUNBTF9QQUdFX01BU0spKQotI2RlZmluZSBwdWRfcGFnZShwdWQpCShwZm5fdG9fcGFnZShwdWRfdmFsKChwdWQpKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcHVkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpCi0jZGVmaW5lIHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKQkJCQkJXAotCSgocHVkX3QgKilwZ2RfcGFnZV92YWRkcigqKHBnZCkpICsgcHVkX2luZGV4KChhZGRyZXNzKSkpCi0jZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkgKHB1ZF92YWwoKHB1ZCkpICYgX1BBR0VfUFJFU0VOVCkKLQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xhcmdlKHB1ZF90IHB0ZSkKLXsKLQlyZXR1cm4gKHB1ZF92YWwocHRlKSAmIChfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKSkgPT0KLQkJKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpOwotfQogCiAvKiBQTUQgIC0gTGV2ZWwgMiBhY2Nlc3MgKi8KLSNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbCgocG1kKSkgJiBQVEVfUEZOX01BU0spKQotI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3ZhbCgocG1kKSkgPj4gUEFHRV9TSElGVCkpCi0KLSNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpCi0jZGVmaW5lIHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopcHVkX3BhZ2VfdmFkZHIoKihkaXIpKSArIFwKLQkJCQkgIHBtZF9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKCh4KSkpCi0jZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKCh4KSkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZSBwZm5fcG1kKG5yLCBwcm90KSAoX19wbWQoKChucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKChwcm90KSkpKQotI2RlZmluZSBwbWRfcGZuKHgpICAoKHBtZF92YWwoKHgpKSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKLQogI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwoKHB0ZSkpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IC5wdGUgPSAoKG9mZikgPDwgUEFHRV9TSElGVCkgfAlcCiAJCQkJCSAgICBfUEFHRV9GSUxFIH0pCkBAIC0yMjYsMTMgKzEyNyw2IEBACiAKIC8qIFBURSAtIExldmVsIDEgYWNjZXNzLiAqLwogCi0vKiBwYWdlLCBwcm90ZWN0aW9uIC0+IHB0ZSAqLwotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKChwYWdlKSksIChwZ3Byb3QpKQotCi0jZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKLSNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSAoKHB0ZV90ICopIHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBcCi0JCQkJCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKLQogLyogeDg2LTY0IGFsd2F5cyBoYXMgYWxsIHBhZ2UgdGFibGVzIG1hcHBlZC4gKi8KICNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHJlc3MpKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHJlc3MpKQpAQCAtMjY2LDkgKzE2MCw2IEBACiBleHRlcm4gaW50IGtlcm5fYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIHZvaWQgY2xlYW51cF9oaWdobWFwKHZvaWQpOwogCi0jZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKLQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQotCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBX1RPUERPV04KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjQyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0X3R5cGVzLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9QR1RBQkxFXzY0X0RFRlNfSAorI2RlZmluZSBfQVNNX1g4Nl9QR1RBQkxFXzY0X0RFRlNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHRldmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcG1kdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcHRlOyB9IHB0ZV90OworCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFNIQVJFRF9LRVJORUxfUE1ECTAKKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwk0CisKKy8qCisgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCisgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJMzkKKyNkZWZpbmUgUFRSU19QRVJfUEdECTUxMgorCisvKgorICogM3JkIGxldmVsIHBhZ2UKKyAqLworI2RlZmluZSBQVURfU0hJRlQJMzAKKyNkZWZpbmUgUFRSU19QRVJfUFVECTUxMgorCisvKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBtaWRkbGUtbGV2ZWwKKyAqIHBhZ2UgdGFibGUgY2FuIG1hcAorICovCisjZGVmaW5lIFBNRF9TSElGVAkyMQorI2RlZmluZSBQVFJTX1BFUl9QTUQJNTEyCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbAorICovCisjZGVmaW5lIFBUUlNfUEVSX1BURQk1MTIKKworI2RlZmluZSBQTURfU0laRQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFIC0gMSkpCisjZGVmaW5lIFBVRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBVRF9TSElGVCkKKyNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUgLSAxKSkKKyNkZWZpbmUgUEdESVJfU0laRQkoX0FDKDEsIFVMKSA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFIC0gMSkpCisKKworI2RlZmluZSBNQVhNRU0JCSBfQUMoX19BQygxLCBVTCkgPDwgTUFYX1BIWVNNRU1fQklUUywgVUwpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAgX0FDKDB4ZmZmZmMyMDAwMDAwMDAwMCwgVUwpCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgX0FDKDB4ZmZmZmUxZmZmZmZmZmZmZiwgVUwpCisjZGVmaW5lIFZNRU1NQVBfU1RBUlQJIF9BQygweGZmZmZlMjAwMDAwMDAwMDAsIFVMKQorI2RlZmluZSBNT0RVTEVTX1ZBRERSICAgIF9BQygweGZmZmZmZmZmYTAwMDAwMDAsIFVMKQorI2RlZmluZSBNT0RVTEVTX0VORCAgICAgIF9BQygweGZmZmZmZmZmZmYwMDAwMDAsIFVMKQorI2RlZmluZSBNT0RVTEVTX0xFTiAgIChNT0RVTEVTX0VORCAtIE1PRFVMRVNfVkFERFIpCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFXzY0X0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjU4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTAsMCArMSwzMjggQEAKKyNpZm5kZWYgX0FTTV9YODZfUEdUQUJMRV9ERUZTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEdUQUJMRV9ERUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KKworI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorCisjZGVmaW5lIF9QQUdFX0JJVF9QUkVTRU5UCTAJLyogaXMgcHJlc2VudCAqLworI2RlZmluZSBfUEFHRV9CSVRfUlcJCTEJLyogd3JpdGVhYmxlICovCisjZGVmaW5lIF9QQUdFX0JJVF9VU0VSCQkyCS8qIHVzZXJzcGFjZSBhZGRyZXNzYWJsZSAqLworI2RlZmluZSBfUEFHRV9CSVRfUFdUCQkzCS8qIHBhZ2Ugd3JpdGUgdGhyb3VnaCAqLworI2RlZmluZSBfUEFHRV9CSVRfUENECQk0CS8qIHBhZ2UgY2FjaGUgZGlzYWJsZWQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX0FDQ0VTU0VECTUJLyogd2FzIGFjY2Vzc2VkIChyYWlzZWQgYnkgQ1BVKSAqLworI2RlZmluZSBfUEFHRV9CSVRfRElSVFkJCTYJLyogd2FzIHdyaXR0ZW4gdG8gKHJhaXNlZCBieSBDUFUpICovCisjZGVmaW5lIF9QQUdFX0JJVF9QU0UJCTcJLyogNCBNQiAob3IgMk1CKSBwYWdlICovCisjZGVmaW5lIF9QQUdFX0JJVF9QQVQJCTcJLyogb24gNEtCIHBhZ2VzICovCisjZGVmaW5lIF9QQUdFX0JJVF9HTE9CQUwJOAkvKiBHbG9iYWwgVExCIGVudHJ5IFBQcm8rICovCisjZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQxCTkJLyogYXZhaWxhYmxlIGZvciBwcm9ncmFtbWVyICovCisjZGVmaW5lIF9QQUdFX0JJVF9JT01BUAkJMTAJLyogZmxhZyB1c2VkIHRvIGluZGljYXRlIElPIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDMJMTEKKyNkZWZpbmUgX1BBR0VfQklUX1BBVF9MQVJHRQkxMgkvKiBPbiAyTUIgb3IgMUdCIHBhZ2VzICovCisjZGVmaW5lIF9QQUdFX0JJVF9TUEVDSUFMCV9QQUdFX0JJVF9VTlVTRUQxCisjZGVmaW5lIF9QQUdFX0JJVF9DUEFfVEVTVAlfUEFHRV9CSVRfVU5VU0VEMQorI2RlZmluZSBfUEFHRV9CSVRfTlggICAgICAgICAgIDYzICAgICAgIC8qIE5vIGV4ZWN1dGU6IG9ubHkgdmFsaWQgYWZ0ZXIgY3B1aWQgY2hlY2sgKi8KKworLyogSWYgX1BBR0VfQklUX1BSRVNFTlQgaXMgY2xlYXIsIHdlIHVzZSB0aGVzZTogKi8KKy8qIC0gaWYgdGhlIHVzZXIgbWFwcGVkIGl0IHdpdGggUFJPVF9OT05FOyBwdGVfcHJlc2VudCBnaXZlcyB0cnVlICovCisjZGVmaW5lIF9QQUdFX0JJVF9QUk9UTk9ORQlfUEFHRV9CSVRfR0xPQkFMCisvKiAtIHNldDogbm9ubGluZWFyIGZpbGUgbWFwcGluZywgc2F2ZWQgUFRFOyB1bnNldDpzd2FwICovCisjZGVmaW5lIF9QQUdFX0JJVF9GSUxFCQlfUEFHRV9CSVRfRElSVFkKKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QUkVTRU5UKQorI2RlZmluZSBfUEFHRV9SVwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUlcpCisjZGVmaW5lIF9QQUdFX1VTRVIJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VTRVIpCisjZGVmaW5lIF9QQUdFX1BXVAkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFdUKQorI2RlZmluZSBfUEFHRV9QQ0QJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BDRCkKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0FDQ0VTU0VEKQorI2RlZmluZSBfUEFHRV9ESVJUWQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfRElSVFkpCisjZGVmaW5lIF9QQUdFX1BTRQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFNFKQorI2RlZmluZSBfUEFHRV9HTE9CQUwJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0dMT0JBTCkKKyNkZWZpbmUgX1BBR0VfVU5VU0VEMQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVU5VU0VEMSkKKyNkZWZpbmUgX1BBR0VfSU9NQVAJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX0lPTUFQKQorI2RlZmluZSBfUEFHRV9VTlVTRUQzCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9VTlVTRUQzKQorI2RlZmluZSBfUEFHRV9QQVQJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BBVCkKKyNkZWZpbmUgX1BBR0VfUEFUX0xBUkdFIChfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQVRfTEFSR0UpCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1NQRUNJQUwpCisjZGVmaW5lIF9QQUdFX0NQQV9URVNUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9DUEFfVEVTVCkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKKyNkZWZpbmUgX1BBR0VfTlgJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX05YKQorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfTlgJKF9BVChwdGV2YWxfdCwgMCkpCisjZW5kaWYKKworI2RlZmluZSBfUEFHRV9GSUxFCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9GSUxFKQorI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFJPVE5PTkUpCisKKyNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfAlcCisJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX0tFUk5QR19UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfQUNDRVNTRUQgfAlcCisJCQkgX1BBR0VfRElSVFkpCisKKy8qIFNldCBvZiBiaXRzIG5vdCBjaGFuZ2VkIGluIHB0ZV9tb2RpZnkgKi8KKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9QRk5fTUFTSyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCB8CQlcCisJCQkgX1BBR0VfU1BFQ0lBTCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfTUFTSwkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQorI2RlZmluZSBfUEFHRV9DQUNIRV9XQgkJKDApCisjZGVmaW5lIF9QQUdFX0NBQ0hFX1dDCQkoX1BBR0VfUFdUKQorI2RlZmluZSBfUEFHRV9DQUNIRV9VQ19NSU5VUwkoX1BBR0VfUENEKQorI2RlZmluZSBfUEFHRV9DQUNIRV9VQwkJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IFwKKwkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKworI2RlZmluZSBQQUdFX1NIQVJFRF9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8CVwKKwkJCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZX05PRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJIF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFkJCVBBR0VfQ09QWV9OT0VYRUMKKyNkZWZpbmUgUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMX0VYRUMJCQkJCQlcCisJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9HTE9CQUwpCisjZGVmaW5lIF9fUEFHRV9LRVJORUwJCShfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9OWCkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPCQkoX19QQUdFX0tFUk5FTCAmIH5fUEFHRV9SVykKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9SWAkJKF9fUEFHRV9LRVJORUxfRVhFQyAmIH5fUEFHRV9SVykKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9XQwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9DQUNIRV9XQykKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9OT0NBQ0hFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9VQ19NSU5VUwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTEwJCShfX1BBR0VfS0VSTkVMX1JYIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfVUMgfCBfUEFHRV9QU0UpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfUFNFKQorCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU8JCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9OT0NBQ0hFIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJKF9fUEFHRV9LRVJORUxfVUNfTUlOVVMgfCBfUEFHRV9JT01BUCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19XQwkJKF9fUEFHRV9LRVJORUxfV0MgfCBfUEFHRV9JT01BUCkKKworI2RlZmluZSBQQUdFX0tFUk5FTAkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9STykKKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDKQorI2RlZmluZSBQQUdFX0tFUk5FTF9SWAkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfUlgpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1dDCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9XQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfTk9DQUNIRQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9VQ19NSU5VUwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9VQ19NSU5VUykKKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQ19OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0VfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX0VYRUMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfVlNZU0NBTEwJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVlNZU0NBTEwpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFKQorCisjZGVmaW5lIFBBR0VfS0VSTkVMX0lPCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JTykKKyNkZWZpbmUgUEFHRV9LRVJORUxfSU9fTk9DQUNIRQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9JT19VQ19NSU5VUwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19VQ19NSU5VUykKKyNkZWZpbmUgUEFHRV9LRVJORUxfSU9fV0MJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fV0MpCisKKy8qICAgICAgICAgeHdyICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfRVhFQworI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX0VYRUMKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9FWEVDCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfRVhFQworI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRURfRVhFQworI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfRVhFQworCisvKgorICogZWFybHkgaWRlbnRpdHkgbWFwcGluZyAgcHRlIGF0dHJpYiBtYWNyb3MuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSURFTlRfTEFSR0VfRVhFQwlfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMKKyNlbHNlCisvKgorICogRm9yIFBERV9JREVOVF9BVFRSIGluY2x1ZGUgVVNFUiBiaXQuIEFzIHRoZSBQREUgYW5kIFBURSBwcm90ZWN0aW9uCisgKiBiaXRzIGFyZSBjb21iaW5lZCwgdGhpcyB3aWxsIGFsb3cgdXNlciB0byBhY2Nlc3MgdGhlIGhpZ2ggYWRkcmVzcyBtYXBwZWQKKyAqIFZEU08gaW4gdGhlIHByZXNlbmNlIG9mIENPTkZJR19DT01QQVRfVkRTTworICovCisjZGVmaW5lIFBURV9JREVOVF9BVFRSCSAweDAwMwkJLyogUFJFU0VOVCtSVyAqLworI2RlZmluZSBQREVfSURFTlRfQVRUUgkgMHgwNjcJCS8qIFBSRVNFTlQrUlcrVVNFUitESVJUWStBQ0NFU1NFRCAqLworI2RlZmluZSBQR0RfSURFTlRfQVRUUgkgMHgwMDEJCS8qIFBSRVNFTlQgKG5vIG90aGVyIGF0dHJpYnV0ZXMpICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyMgaW5jbHVkZSAicGd0YWJsZV8zMl90eXBlcy5oIgorI2Vsc2UKKyMgaW5jbHVkZSAicGd0YWJsZV82NF90eXBlcy5oIgorI2VuZGlmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBQVEVfUEZOX01BU0sgZXh0cmFjdHMgdGhlIFBGTiBmcm9tIGEgKHB0ZXxwbWR8cHVkfHBnZCl2YWxfdCAqLworI2RlZmluZSBQVEVfUEZOX01BU0sJCSgocHRldmFsX3QpUEhZU0lDQUxfUEFHRV9NQVNLKQorCisvKiBQVEVfRkxBR1NfTUFTSyBleHRyYWN0cyB0aGUgZmxhZ3MgZnJvbSBhIChwdGV8cG1kfHB1ZHxwZ2QpdmFsX3QgKi8KKyNkZWZpbmUgUFRFX0ZMQUdTX01BU0sJCSh+UFRFX1BGTl9NQVNLKQorCit0eXBlZGVmIHN0cnVjdCBwZ3Byb3QgeyBwZ3Byb3R2YWxfdCBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsgcGdkdmFsX3QgcGdkOyB9IHBnZF90OworCitzdGF0aWMgaW5saW5lIHBnZF90IG5hdGl2ZV9tYWtlX3BnZChwZ2R2YWxfdCB2YWwpCit7CisJcmV0dXJuIChwZ2RfdCkgeyB2YWwgfTsKK30KKworc3RhdGljIGlubGluZSBwZ2R2YWxfdCBuYXRpdmVfcGdkX3ZhbChwZ2RfdCBwZ2QpCit7CisJcmV0dXJuIHBnZC5wZ2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdkdmFsX3QgcGdkX2ZsYWdzKHBnZF90IHBnZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3BnZF92YWwocGdkKSAmIFBURV9GTEFHU19NQVNLOworfQorCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDMKK3R5cGVkZWYgc3RydWN0IHsgcHVkdmFsX3QgcHVkOyB9IHB1ZF90OworCitzdGF0aWMgaW5saW5lIHB1ZF90IG5hdGl2ZV9tYWtlX3B1ZChwbWR2YWxfdCB2YWwpCit7CisJcmV0dXJuIChwdWRfdCkgeyB2YWwgfTsKK30KKworc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCit7CisJcmV0dXJuIHB1ZC5wdWQ7Cit9CisjZWxzZQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworc3RhdGljIGlubGluZSBwdWR2YWxfdCBuYXRpdmVfcHVkX3ZhbChwdWRfdCBwdWQpCit7CisJcmV0dXJuIG5hdGl2ZV9wZ2RfdmFsKHB1ZC5wZ2QpOworfQorI2VuZGlmCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgordHlwZWRlZiBzdHJ1Y3QgeyBwbWR2YWxfdCBwbWQ7IH0gcG1kX3Q7CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgbmF0aXZlX21ha2VfcG1kKHBtZHZhbF90IHZhbCkKK3sKKwlyZXR1cm4gKHBtZF90KSB7IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHBtZHZhbF90IG5hdGl2ZV9wbWRfdmFsKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kLnBtZDsKK30KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorCitzdGF0aWMgaW5saW5lIHBtZHZhbF90IG5hdGl2ZV9wbWRfdmFsKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3BnZF92YWwocG1kLnB1ZC5wZ2QpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgcHVkdmFsX3QgcHVkX2ZsYWdzKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3B1ZF92YWwocHVkKSAmIFBURV9GTEFHU19NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHBtZHZhbF90IHBtZF9mbGFncyhwbWRfdCBwbWQpCit7CisJcmV0dXJuIG5hdGl2ZV9wbWRfdmFsKHBtZCkgJiBQVEVfRkxBR1NfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBuYXRpdmVfbWFrZV9wdGUocHRldmFsX3QgdmFsKQoreworCXJldHVybiAocHRlX3QpIHsgLnB0ZSA9IHZhbCB9OworfQorCitzdGF0aWMgaW5saW5lIHB0ZXZhbF90IG5hdGl2ZV9wdGVfdmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlLnB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGV2YWxfdCBwdGVfZmxhZ3MocHRlX3QgcHRlKQoreworCXJldHVybiBuYXRpdmVfcHRlX3ZhbChwdGUpICYgUFRFX0ZMQUdTX01BU0s7Cit9CisKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKwordHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OworCitleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CitleHRlcm4gaW50IG54X2VuYWJsZWQ7CisKKyNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZQlwZ3Byb3Rfd3JpdGVjb21iaW5lCitleHRlcm4gcGdwcm90X3QgcGdwcm90X3dyaXRlY29tYmluZShwZ3Byb3RfdCBwcm90KTsKKworLyogSW5kaWNhdGUgdGhhdCB4ODYgaGFzIGl0cyBvd24gdHJhY2sgYW5kIHVudHJhY2sgcGZuIHZtYSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgX19IQVZFX1BGTk1BUF9UUkFDS0lORworCisjZGVmaW5lIF9fSEFWRV9QSFlTX01FTV9BQ0NFU1NfUFJPVAorc3RydWN0IGZpbGU7CitwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKK2ludCBwaHlzX21lbV9hY2Nlc3NfcHJvdF9hbGxvd2VkKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnZtYV9wcm90KTsKKworLyogSW5zdGFsbCBhIHB0ZSBmb3IgYSBwYXJ0aWN1bGFyIHZhZGRyIGluIGtlcm5lbCBzcGFjZS4gKi8KK3ZvaWQgc2V0X3B0ZV92YWRkcih1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCBwdGUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7CitleHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkge30KKyNlbmRpZgorCitzdHJ1Y3Qgc2VxX2ZpbGU7CitleHRlcm4gdm9pZCBhcmNoX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSk7CisKK2VudW0geworCVBHX0xFVkVMX05PTkUsCisJUEdfTEVWRUxfNEssCisJUEdfTEVWRUxfMk0sCisJUEdfTEVWRUxfMUcsCisJUEdfTEVWRUxfTlVNCit9OworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBwYWdlcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBwYWdlcykgeyB9CisjZW5kaWYKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGtlcm5lbCBwYWdldGFibGUgZW50cnkgY29udHJvbGxpbmcKKyAqIHRoZSB2aXJ0dWFsIGFkZHJlc3MgJ2FkZHJlc3MnLiBOVUxMIG1lYW5zIG5vIHBhZ2V0YWJsZSBlbnRyeSBwcmVzZW50LgorICogTk9URTogdGhlIHJldHVybiB0eXBlIGlzIHB0ZV90IGJ1dCBpZiB0aGUgcG1kIGlzIFBTRSB0aGVuIHdlIHJldHVybiBpdAorICogYXMgYSBwdGUgdG9vLgorICovCitleHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50ICpsZXZlbCk7CisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9QR1RBQkxFX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmgKaW5kZXggYTg4OTQ2NC4uM2FjNTAzMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCkBAIC02LDggKzYsNCBAQAogI2RlZmluZSBBUkNIX0dFVF9GUyAweDEwMDMKICNkZWZpbmUgQVJDSF9HRVRfR1MgMHgxMDA0CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1leHRlcm4gbG9uZyBzeXNfYXJjaF9wcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcpOwotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQogI2VuZGlmIC8qIF9BU01fWDg2X1BSQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggM2JmZDUyMy4uNzYxMzk1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CkBAIC03Myw3ICs3NCw3IEBACiAJY2hhcgkJCXBhZDA7CiAjZWxzZQogCS8qIE51bWJlciBvZiA0SyBwYWdlcyBpbiBEVExCL0lUTEIgY29tYmluZWQoaW4gcGFnZXMpOiAqLwotCWludAkJCSB4ODZfdGxic2l6ZTsKKwlpbnQJCQl4ODZfdGxic2l6ZTsKIAlfX3U4CQkJeDg2X3ZpcnRfYml0czsKIAlfX3U4CQkJeDg2X3BoeXNfYml0czsKICNlbmRpZgpAQCAtMjQ3LDcgKzI0OCw2IEBACiAjZGVmaW5lIElPX0JJVE1BUF9MT05HUwkJCShJT19CSVRNQVBfQllURVMvc2l6ZW9mKGxvbmcpKQogI2RlZmluZSBJT19CSVRNQVBfT0ZGU0VUCQlvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaW9fYml0bWFwKQogI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQJMHg4MDAwCi0jZGVmaW5lIElOVkFMSURfSU9fQklUTUFQX09GRlNFVF9MQVpZCTB4OTAwMAogCiBzdHJ1Y3QgdHNzX3N0cnVjdCB7CiAJLyoKQEAgLTI2MiwxMSArMjYyLDYgQEAKIAkgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgogCSAqLwogCXVuc2lnbmVkIGxvbmcJCWlvX2JpdG1hcFtJT19CSVRNQVBfTE9OR1MgKyAxXTsKLQkvKgotCSAqIENhY2hlIHRoZSBjdXJyZW50IG1heGltdW0gYW5kIHRoZSBsYXN0IHRhc2sgdGhhdCB1c2VkIHRoZSBiaXRtYXA6Ci0JICovCi0JdW5zaWduZWQgbG9uZwkJaW9fYml0bWFwX21heDsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdAkqaW9fYml0bWFwX293bmVyOwogCiAJLyoKIAkgKiAuLiBhbmQgdGhlbiBhbm90aGVyIDB4MTAwIGJ5dGVzIGZvciB0aGUgZW1lcmdlbmN5IGtlcm5lbCBzdGFjazoKQEAgLTM3OCw5ICszNzMsMzAgQEAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgb3JpZ19pc3QsIG9yaWdfaXN0KTsKLSNlbmRpZgogCi1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7Cit1bmlvbiBpcnFfc3RhY2tfdW5pb24geworCWNoYXIgaXJxX3N0YWNrW0lSUV9TVEFDS19TSVpFXTsKKwkvKgorCSAqIEdDQyBoYXJkY29kZXMgdGhlIHN0YWNrIGNhbmFyeSBhcyAlZ3M6NDAuICBTaW5jZSB0aGUKKwkgKiBpcnFfc3RhY2sgaXMgdGhlIG9iamVjdCBhdCAlZ3M6MCwgd2UgcmVzZXJ2ZSB0aGUgYm90dG9tCisJICogNDggYnl0ZXMgb2YgdGhlIGlycSBzdGFjayBmb3IgdGhlIGNhbmFyeS4KKwkgKi8KKwlzdHJ1Y3QgeworCQljaGFyIGdzX2Jhc2VbNDBdOworCQl1bnNpZ25lZCBsb25nIHN0YWNrX2NhbmFyeTsKKwl9OworfTsKKworREVDTEFSRV9QRVJfQ1BVKHVuaW9uIGlycV9zdGFja191bmlvbiwgaXJxX3N0YWNrX3VuaW9uKTsKK0RFQ0xBUkVfSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CisKK0RFQ0xBUkVfUEVSX0NQVShjaGFyICosIGlycV9zdGFja19wdHIpOworI2Vsc2UJLyogWDg2XzY0ICovCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc3RhY2tfY2FuYXJ5KTsKKyNlbmRpZgorI2VuZGlmCS8qIFg4Nl82NCAqLworCiBleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOwogZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOwpAQCAtNzUyLDkgKzc2OCw5IEBACiBleHRlcm4gc3RydWN0IGRlc2NfcHRyCQllYXJseV9nZHRfZGVzY3I7CiAKIGV4dGVybiB2b2lkIGNwdV9zZXRfZ2R0KGludCk7Ci1leHRlcm4gdm9pZCBzd2l0Y2hfdG9fbmV3X2dkdCh2b2lkKTsKK2V4dGVybiB2b2lkIHN3aXRjaF90b19uZXdfZ2R0KGludCk7CitleHRlcm4gdm9pZCBsb2FkX3BlcmNwdV9zZWdtZW50KGludCk7CiBleHRlcm4gdm9pZCBjcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfZ2R0KGludCBjcHUpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2RlYnVnY3RsbXNyKHZvaWQpCiB7CkBAIC04MzksNiArODU1LDcgQEAKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAzR0IgKGRlZmF1bHQpLgogICovCiAjZGVmaW5lIFRBU0tfU0laRQkJUEFHRV9PRkZTRVQKKyNkZWZpbmUgVEFTS19TSVpFX01BWAkJVEFTS19TSVpFCiAjZGVmaW5lIFNUQUNLX1RPUAkJVEFTS19TSVpFCiAjZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVNUQUNLX1RPUAogCkBAIC04OTgsNyArOTE1LDcgQEAKIC8qCiAgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZS4gNDdiaXRzIG1pbnVzIG9uZSBndWFyZCBwYWdlLgogICovCi0jZGVmaW5lIFRBU0tfU0laRTY0CSgoMVVMIDw8IDQ3KSAtIFBBR0VfU0laRSkKKyNkZWZpbmUgVEFTS19TSVpFX01BWAkoKDFVTCA8PCA0NykgLSBQQUdFX1NJWkUpCiAKIC8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KICAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuCkBAIC05MDcsMTIgKzkyNCwxMiBAQAogCQkJCQkweGMwMDAwMDAwIDogMHhGRkZGZTAwMCkKIAogI2RlZmluZSBUQVNLX1NJWkUJCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IFwKLQkJCQkJSUEzMl9QQUdFX09GRlNFVCA6IFRBU0tfU0laRTY0KQorCQkJCQlJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFX01BWCkKICNkZWZpbmUgVEFTS19TSVpFX09GKGNoaWxkKQkoKHRlc3RfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfSUEzMikpID8gXAotCQkJCQlJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFNjQpCisJCQkJCUlBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkVfTUFYKQogCiAjZGVmaW5lIFNUQUNLX1RPUAkJVEFTS19TSVpFCi0jZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVRBU0tfU0laRTY0CisjZGVmaW5lIFNUQUNLX1RPUF9NQVgJCVRBU0tfU0laRV9NQVgKIAogI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCiAJLnNwMCA9ICh1bnNpZ25lZCBsb25nKSZpbml0X3N0YWNrICsgc2l6ZW9mKGluaXRfc3RhY2spIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm90by5oCmluZGV4IGQ2YTIyZjkuLjQ5ZmIzZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvdG8uaApAQCAtMTgsMTEgKzE4LDcgQEAKIAogZXh0ZXJuIHZvaWQgY2hlY2tfZWZlcih2b2lkKTsKIAotI2lmZGVmIENPTkZJR19YODZfQklPU19SRUJPT1QKIGV4dGVybiBpbnQgcmVib290X2ZvcmNlOwotI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgcmVib290X2ZvcmNlID0gMDsKLSNlbmRpZgogCiBsb25nIGRvX2FyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA2ZDM0ZDk1Li5lMzA0YjY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjgsNyArMjgsNyBAQAogCWludCAgeGRzOwogCWludCAgeGVzOwogCWludCAgeGZzOwotCS8qIGludCAgZ3M7ICovCisJaW50ICB4Z3M7CiAJbG9uZyBvcmlnX2VheDsKIAlsb25nIGVpcDsKIAlpbnQgIHhjczsKQEAgLTUwLDcgKzUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGRzOwogCXVuc2lnbmVkIGxvbmcgZXM7CiAJdW5zaWduZWQgbG9uZyBmczsKLQkvKiBpbnQgIGdzOyAqLworCXVuc2lnbmVkIGxvbmcgZ3M7CiAJdW5zaWduZWQgbG9uZyBvcmlnX2F4OwogCXVuc2lnbmVkIGxvbmcgaXA7CiAJdW5zaWduZWQgbG9uZyBjczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JkYzMyMXhfZGVmcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL3JkYzMyMXhfZGVmcy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWdtZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWdtZW50LmgKaW5kZXggMWRjMWI1MS4uMTRlMGVkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlZ21lbnQuaApAQCAtNjEsNyArNjEsNyBAQAogICoKICAqICAyNiAtIEVTUEZJWCBzbWFsbCBTUwogICogIDI3IC0gcGVyLWNwdQkJCVsgb2Zmc2V0IHRvIHBlci1jcHUgZGF0YSBhcmVhIF0KLSAqICAyOCAtIHVudXNlZAorICogIDI4IC0gc3RhY2tfY2FuYXJ5LTIwCQlbIGZvciBzdGFjayBwcm90ZWN0b3IgXQogICogIDI5IC0gdW51c2VkCiAgKiAgMzAgLSB1bnVzZWQKICAqICAzMSAtIFRTUyBmb3IgZG91YmxlIGZhdWx0IGhhbmRsZXIKQEAgLTk1LDYgKzk1LDEzIEBACiAjZGVmaW5lIF9fS0VSTkVMX1BFUkNQVSAwCiAjZW5kaWYKIAorI2RlZmluZSBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZCQkoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMTYpCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisjZGVmaW5lIF9fS0VSTkVMX1NUQUNLX0NBTkFSWQkJKEdEVF9FTlRSWV9TVEFDS19DQU5BUlkgKiA4KQorI2Vsc2UKKyNkZWZpbmUgX19LRVJORUxfU1RBQ0tfQ0FOQVJZCQkwCisjZW5kaWYKKwogI2RlZmluZSBHRFRfRU5UUllfRE9VQkxFRkFVTFRfVFNTCTMxCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlYmU4NThjLi4wNWM2ZjZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsMzMgKzEsMTkgQEAKICNpZm5kZWYgX0FTTV9YODZfU0VUVVBfSAogI2RlZmluZSBfQVNNX1g4Nl9TRVRVUF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjA0OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotdm9pZCB2c21wX2luaXQodm9pZCk7Ci0KLQotdm9pZCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZCk7Ci0KLQotI2lmZGVmIENPTkZJR19YODZfVklTV1MKLWV4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKLWV4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLWV4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7Ci1leHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKIC8qCiAgKiBBbnkgc2V0dXAgcXVpcmtzIHRvIGJlIHBlcmZvcm1lZD8KICAqLwogc3RydWN0IG1wY19jcHU7CiBzdHJ1Y3QgbXBjX2J1czsKIHN0cnVjdCBtcGNfb2VtdGFibGU7CisKIHN0cnVjdCB4ODZfcXVpcmtzIHsKIAlpbnQgKCphcmNoX3ByZV90aW1lX2luaXQpKHZvaWQpOwogCWludCAoKmFyY2hfdGltZV9pbml0KSh2b2lkKTsKQEAgLTQzLDIxICsyOSwyMCBAQAogCXZvaWQgKCptcGNfb2VtX2J1c19pbmZvKShzdHJ1Y3QgbXBjX2J1cyAqbSwgY2hhciAqbmFtZSk7CiAJdm9pZCAoKm1wY19vZW1fcGNpX2J1cykoc3RydWN0IG1wY19idXMgKm0pOwogCXZvaWQgKCpzbXBfcmVhZF9tcGNfb2VtKShzdHJ1Y3QgbXBjX29lbXRhYmxlICpvZW10YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9lbXNpemUpOworCQkJCXVuc2lnbmVkIHNob3J0IG9lbXNpemUpOwogCWludCAoKnNldHVwX2lvYXBpY19pZHMpKHZvaWQpOwotCWludCAoKnVwZGF0ZV9nZW5hcGljKSh2b2lkKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgeDg2X3F1aXJrcyAqeDg2X3F1aXJrczsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7CitleHRlcm4gdm9pZCB4ODZfcXVpcmtfcHJlX2ludHJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHg4Nl9xdWlya19pbnRyX2luaXQodm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgorZXh0ZXJuIHZvaWQgeDg2X3F1aXJrX3RyYXBfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgeDg2X3F1aXJrX3ByZV90aW1lX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4ODZfcXVpcmtfdGltZV9pbml0KHZvaWQpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpZmRlZiBfX2kzODZfXwogCiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CkBAIC03OCw2ICs2MywzMCBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAKKy8qIEludGVycnVwdCBjb250cm9sIGZvciB2U01Qb3dlcmVkIHg4Nl82NCBzeXN0ZW1zICovCisjaWZkZWYgQ09ORklHX1g4Nl9WU01QCit2b2lkIHZzbXBfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdnNtcF9pbml0KHZvaWQpIHsgfQorI2VuZGlmCisKK3ZvaWQgc2V0dXBfYmlvc19jb3JydXB0aW9uX2NoZWNrKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9WSVNXUworZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOworZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCB4ODZfcXVpcmtzICp4ODZfcXVpcmtzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmlkZW9fbW9kZTsKKworI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKyNkZWZpbmUgcGFyYXZpcnRfcG9zdF9hbGxvY2F0b3JfaW5pdCgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZm5kZWYgX1NFVFVQCiAKIC8qCkBAIC0xMDAsNyArMTA5LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcGdfdGFibGVzX2VuZDsKIAogI2Vsc2UKLXZvaWQgX19pbml0IHg4Nl82NF9pbml0X3BkYSh2b2lkKTsKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9rZXJuZWwoY2hhciAqcmVhbF9tb2RlKTsKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMoY2hhciAqcmVhbF9tb2RlX2RhdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXBfYXJjaC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvc2V0dXBfYXJjaC5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cF9hcmNoLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMTk5NTNkZi4uNDdkMGUyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKQEAgLTE1LDM0ICsxNSw4IEBACiAjICBpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogIyBlbmRpZgogI2VuZGlmCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi1leHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbGluX21hc2s7Ci1leHRlcm4gY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOwotZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7Ci1leHRlcm4gY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOwotCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLSNkZWZpbmUgY3B1X2NhbGxpbl9tYXNrCQkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9jYWxsaW5fbWFwKQotI2RlZmluZSBjcHVfY2FsbG91dF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxvdXRfbWFwKQotI2RlZmluZSBjcHVfaW5pdGlhbGl6ZWRfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9pbml0aWFsaXplZCkKLSNkZWZpbmUgY3B1X3NpYmxpbmdfc2V0dXBfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9zaWJsaW5nX3NldHVwX21hcCkKLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQotZXh0ZXJuIHZvaWQgKCptdHJyX2hvb2spKHZvaWQpOwotZXh0ZXJuIHZvaWQgemFwX2xvd19tYXBwaW5ncyh2b2lkKTsKLQotZXh0ZXJuIGludCBfX2NwdWluaXQgZ2V0X2xvY2FsX3BkYShpbnQgY3B1KTsKKyNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgogCiBleHRlcm4gaW50IHNtcF9udW1fc2libGluZ3M7CiBleHRlcm4gdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwpAQCAtNTAsOSArMjQsNyBAQAogREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X3NpYmxpbmdfbWFwKTsKIERFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7CiBERUNMQVJFX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfbnVtYmVyKTsKLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVtYXNrICpjcHVfc2libGluZ19tYXNrKGludCBjcHUpCiB7CkBAIC0xNjcsOCArMTM5LDYgQEAKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiB2b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19zaW5nbGVfaXBpKGludCBjcHUpOwogCi1leHRlcm4gdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKTsKLQogdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKTsKICNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KQogCkBAIC0xNzcsMTAgKzE0Nyw2IEBACiB7CiAJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9jYWxsb3V0X21hc2spOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKQotewotfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGRpc2FibGVkX2NwdXMgX19jcHVpbml0ZGF0YTsKQEAgLTE5MSwxMSArMTU3LDExIEBACiAgKiBmcm9tIHRoZSBpbml0aWFsIHN0YXJ0dXAuIFdlIG1hcCBBUElDX0JBU0UgdmVyeSBlYXJseSBpbiBwYWdlX3NldHVwKCksCiAgKiBzbyB0aGlzIGlzIGNvcnJlY3QgaW4gdGhlIHg4NiBjYXNlLgogICovCi0jZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKHg4Nl9yZWFkX3BlcmNwdShjcHVfbnVtYmVyKSkKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAocGVyY3B1X3JlYWQoY3B1X251bWJlcikpCiBleHRlcm4gaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0X1NNUCkKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQlyZWFkX3BkYShjcHVudW1iZXIpCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKHBlcmNwdV9yZWFkKGNwdV9udW1iZXIpKQogCiAjZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKQkJCQkJXAogKHsJCQkJCQkJCVwKQEAgLTIwNSwxMCArMTcxLDYgQEAKIH0pCiAjZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQlzbXBfcHJvY2Vzc29yX2lkKCkKIAotI2Vsc2UgLyogIUNPTkZJR19YODZfMzJfU01QICYmICFDT05GSUdfWDg2XzY0X1NNUCAqLwotI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0jZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCi0jZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKSAJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKQEAgLTIyMCwyOCArMTgyLDkgQEAKIAlyZXR1cm4gR0VUX0FQSUNfTE9HSUNBTF9JRCgqKHUzMiAqKShBUElDX0JBU0UgKyBBUElDX0xEUikpOwogfQogCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX2FwaWNfaWQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gKih1MzIgKikoQVBJQ19CQVNFICsgQVBJQ19JRCk7Ci0KLQlyZXR1cm4gR0VUX0FQSUNfSUQocmVnKTsKLX0KICNlbmRpZgogCi0KLSMgaWYgZGVmaW5lZChBUElDX0RFRklOSVRJT04pIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKIGV4dGVybiBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwotIyBlbHNlCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCi0JcmV0dXJuIHJlYWRfYXBpY19pZCgpOwotfQotIyBlbmRpZiAvKiBBUElDX0RFRklOSVRJT04gKi8KIAogI2Vsc2UgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCiAKQEAgLTI1MSwxMSArMTk0LDUgQEAKIAogI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwogCi0jaWZkZWYgQ09ORklHX1g4Nl9IQVNfQk9PVF9DUFVfSUQKLWV4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwotI2Vsc2UKLSNkZWZpbmUgYm9vdF9jcHVfaWQJMAotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3NtcGJvb3RfaG9va3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKaW5kZXggMjNiZjUyMS4uMWRlZjYwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaC1kZWZhdWx0L3NtcGJvb3RfaG9va3MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKQEAgLTEzLDEwICsxMywxMCBAQAogCUNNT1NfV1JJVEUoMHhhLCAweGYpOwogCWxvY2FsX2ZsdXNoX3RsYigpOwogCXByX2RlYnVnKCIxLlxuIik7Ci0JKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoVFJBTVBPTElORV9QSFlTX0hJR0gpKSA9CisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2hpZ2gpKSA9CiAJCQkJCQkJCSBzdGFydF9laXAgPj4gNDsKIAlwcl9kZWJ1ZygiMi5cbiIpOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19MT1cpKSA9CisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0KIAkJCQkJCQkgc3RhcnRfZWlwICYgMHhmOwogCXByX2RlYnVnKCIzLlxuIik7CiB9CkBAIC0zNCw3ICszNCw3IEBACiAJICovCiAJQ01PU19XUklURSgwLCAweGYpOwogCi0JKigodm9sYXRpbGUgbG9uZyAqKXBoeXNfdG9fdmlydChUUkFNUE9MSU5FX1BIWVNfTE9XKSkgPSAwOworCSooKHZvbGF0aWxlIGxvbmcgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbXBib290X3NldHVwX2lvX2FwaWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggOGFiOWNjOC4uY2E4YmYyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggODI0N2U5NC4uM2E1Njk2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xNzIsNzAgKzE3Miw4IEBACiAJcmV0dXJuICgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIC0gdG1wKSAmICgoMSA8PCBUSUNLRVRfU0hJRlQpIC0gMSkpID4gMTsKIH0KIAotI2lmZGVmIENPTkZJR19QQVJBVklSVAotLyoKLSAqIERlZmluZSB2aXJ0dWFsaXphdGlvbi1mcmllbmRseSBvbGQtc3R5bGUgbG9jayBieXRlIGxvY2ssIGZvciB1c2UgaW4KLSAqIHB2X2xvY2tfb3BzIGlmIGRlc2lyZWQuCi0gKgotICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIHByZS0yLjYuMjQgc3BpbmxvY2sgYnkgYWx3YXlzIHVzaW5nIHhjaGdiCi0gKiByYXRoZXIgdGhhbiBkZWNiIHRvIHRha2UgdGhlIGxvY2s7IHRoaXMgYWxsb3dzIGl0IHRvIHVzZSBhCi0gKiB6ZXJvLWluaXRpYWxpemVkIGxvY2sgc3RydWN0dXJlLiAgSXQgYWxzbyBtYWludGFpbnMgYSAxLWJ5dGUKLSAqIGNvbnRlbnRpb24gY291bnRlciwgc28gdGhhdCB3ZSBjYW4gaW1wbGVtZW50Ci0gKiBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQuCi0gKi8KLXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgewotCXM4IGxvY2s7Ci0Jczggc3Bpbm5lcnM7Ci19OworI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKIAotc3RhdGljIGlubGluZSBpbnQgX19ieXRlX3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQotewotCXN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKmJsID0gKHN0cnVjdCBfX2J5dGVfc3BpbmxvY2sgKilsb2NrOwotCXJldHVybiBibC0+bG9jayAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2J5dGVfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCi17Ci0Jc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqYmwgPSAoc3RydWN0IF9fYnl0ZV9zcGlubG9jayAqKWxvY2s7Ci0JcmV0dXJuIGJsLT5zcGlubmVycyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19ieXRlX3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKLQlzOCB2YWwgPSAxOwotCi0JYXNtKCIxOiB4Y2hnYiAlMSwgJTBcbiIKLQkgICAgIiAgIHRlc3QgJTEsJTFcbiIKLQkgICAgIiAgIGp6IDNmXG4iCi0JICAgICIgICAiIExPQ0tfUFJFRklYICJpbmNiICUyXG4iCi0JICAgICIyOiByZXA7bm9wXG4iCi0JICAgICIgICBjbXBiICQxLCAlMFxuIgotCSAgICAiICAgamUgMmJcbiIKLQkgICAgIiAgICIgTE9DS19QUkVGSVggImRlY2IgJTJcbiIKLQkgICAgIiAgIGptcCAxYlxuIgotCSAgICAiMzoiCi0JICAgIDogIittIiAoYmwtPmxvY2spLCAiK3EiICh2YWwpLCAiK20iIChibC0+c3Bpbm5lcnMpOiA6ICJtZW1vcnkiKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19ieXRlX3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKLQl1OCBvbGQgPSAxOwotCi0JYXNtKCJ4Y2hnYiAlMSwlMCIKLQkgICAgOiAiK20iIChibC0+bG9jayksICIrcSIgKG9sZCkgOiA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBvbGQgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fYnl0ZV9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICpibCA9IChzdHJ1Y3QgX19ieXRlX3NwaW5sb2NrICopbG9jazsKLQlzbXBfd21iKCk7Ci0JYmwtPmxvY2sgPSAwOwotfQotI2Vsc2UgIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKQEAgLTI2OCw3ICsyMDYsNyBAQAogCV9fcmF3X3NwaW5fbG9jayhsb2NrKTsKIH0KIAotI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQogewpAQCAtMzMwLDggKzI2OCw3IEBACiB7CiAJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKIAotCWF0b21pY19kZWMoY291bnQpOwotCWlmIChhdG9taWNfcmVhZChjb3VudCkgPj0gMCkKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oY291bnQpID49IDApCiAJCXJldHVybiAxOwogCWF0b21pY19pbmMoY291bnQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNzQyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBHQ0Mgc3RhY2sgcHJvdGVjdG9yIHN1cHBvcnQuCisgKgorICogU3RhY2sgcHJvdGVjdG9yIHdvcmtzIGJ5IHB1dHRpbmcgcHJlZGVmaW5lZCBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZgorICogdGhlIHN0YWNrIGZyYW1lIGFuZCB2ZXJpZnlpbmcgdGhhdCBpdCBoYXNuJ3QgYmVlbiBvdmVyd3JpdHRlbiB3aGVuCisgKiByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24uICBUaGUgcGF0dGVybiBpcyBjYWxsZWQgc3RhY2sgY2FuYXJ5CisgKiBhbmQgdW5mb3J0dW5hdGVseSBnY2MgcmVxdWlyZXMgaXQgdG8gYmUgYXQgYSBmaXhlZCBvZmZzZXQgZnJvbSAlZ3MuCisgKiBPbiB4ODZfNjQsIHRoZSBvZmZzZXQgaXMgNDAgYnl0ZXMgYW5kIG9uIHg4Nl8zMiAyMCBieXRlcy4gIHg4Nl82NAorICogYW5kIHg4Nl8zMiB1c2Ugc2VnbWVudCByZWdpc3RlcnMgZGlmZmVyZW50bHkgYW5kIHRodXMgaGFuZGxlcyB0aGlzCisgKiByZXF1aXJlbWVudCBkaWZmZXJlbnRseS4KKyAqCisgKiBPbiB4ODZfNjQsICVncyBpcyBzaGFyZWQgYnkgcGVyY3B1IGFyZWEgYW5kIHN0YWNrIGNhbmFyeS4gIEFsbAorICogcGVyY3B1IHN5bWJvbHMgYXJlIHplcm8gYmFzZWQgYW5kICVncyBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgcGVyY3B1CisgKiBhcmVhLiAgVGhlIGZpcnN0IG9jY3VwYW50IG9mIHRoZSBwZXJjcHUgYXJlYSBpcyBhbHdheXMKKyAqIGlycV9zdGFja191bmlvbiB3aGljaCBjb250YWlucyBzdGFja19jYW5hcnkgYXQgb2Zmc2V0IDQwLiAgVXNlcmxhbmQKKyAqICVncyBpcyBhbHdheXMgc2F2ZWQgYW5kIHJlc3RvcmVkIG9uIGtlcm5lbCBlbnRyeSBhbmQgZXhpdCB1c2luZworICogc3dhcGdzLCBzbyBzdGFjayBwcm90ZWN0b3IgZG9lc24ndCBhZGQgYW55IGNvbXBsZXhpdHkgdGhlcmUuCisgKgorICogT24geDg2XzMyLCBpdCdzIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQuICBBcyBpbiB4ODZfNjQsICVncyBpcworICogdXNlZCBmb3IgdXNlcmxhbmQgVExTLiAgVW5mb3J0dW5hdGVseSwgc29tZSBwcm9jZXNzb3JzIGFyZSBtdWNoCisgKiBzbG93ZXIgYXQgbG9hZGluZyBzZWdtZW50IHJlZ2lzdGVycyB3aXRoIGRpZmZlcmVudCB2YWx1ZSB3aGVuCisgKiBlbnRlcmluZyBhbmQgbGVhdmluZyB0aGUga2VybmVsLCBzbyB0aGUga2VybmVsIHVzZXMgJWZzIGZvciBwZXJjcHUKKyAqIGFyZWEgYW5kIG1hbmFnZXMgJWdzIGxhemlseSBzbyB0aGF0ICVncyBpcyBzd2l0Y2hlZCBvbmx5IHdoZW4KKyAqIG5lY2Vzc2FyeSwgdXN1YWxseSBkdXJpbmcgdGFzayBzd2l0Y2guCisgKgorICogQXMgZ2NjIHJlcXVpcmVzIHRoZSBzdGFjayBjYW5hcnkgYXQgJWdzOjIwLCAlZ3MgY2FuJ3QgYmUgbWFuYWdlZAorICogbGF6aWx5IGlmIHN0YWNrIHByb3RlY3RvciBpcyBlbmFibGVkLCBzbyB0aGUga2VybmVsIHNhdmVzIGFuZAorICogcmVzdG9yZXMgdXNlcmxhbmQgJWdzIG9uIGtlcm5lbCBlbnRyeSBhbmQgZXhpdC4gIFRoaXMgYmVoYXZpb3IgaXMKKyAqIGNvbnRyb2xsZWQgYnkgQ09ORklHX1g4Nl8zMl9MQVpZX0dTIGFuZCBhY2Nlc3NvcnMgYXJlIGRlZmluZWQgaW4KKyAqIHN5c3RlbS5oIHRvIGhpZGUgdGhlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1NUQUNLUFJPVEVDVE9SX0gKKyNkZWZpbmUgX0FTTV9TVEFDS1BST1RFQ1RPUl9IIDEKKworI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorCisjaW5jbHVkZSA8YXNtL3RzYy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKy8qCisgKiAyNCBieXRlIHJlYWQtb25seSBzZWdtZW50IGluaXRpYWxpemVyIGZvciBzdGFjayBjYW5hcnkuICBMaW5rZXIKKyAqIGNhbid0IGhhbmRsZSB0aGUgYWRkcmVzcyBiaXQgc2hpZnRpbmcuICBBZGRyZXNzIHdpbGwgYmUgc2V0IGluCisgKiBoZWFkXzMyIGZvciBib290IENQVSBhbmQgc2V0dXBfcGVyX2NwdV9hcmVhcygpIGZvciBvdGhlcnMuCisgKi8KKyNkZWZpbmUgR0RUX1NUQUNLX0NBTkFSWV9JTklUCQkJCQkJXAorCVtHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZXSA9IHsgeyB7IDB4MDAwMDAwMTgsIDB4MDA0MDkwMDAgfSB9IH0sCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBzdGFja3Byb3RlY3RvciBjYW5hcnkgdmFsdWUuCisgKgorICogTk9URTogdGhpcyBtdXN0IG9ubHkgYmUgY2FsbGVkIGZyb20gZnVuY3Rpb25zIHRoYXQgbmV2ZXIgcmV0dXJuLAorICogYW5kIGl0IG11c3QgYWx3YXlzIGJlIGlubGluZWQuCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBib290X2luaXRfc3RhY2tfY2FuYXJ5KHZvaWQpCit7CisJdTY0IGNhbmFyeTsKKwl1NjQgdHNjOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCUJVSUxEX0JVR19PTihvZmZzZXRvZih1bmlvbiBpcnFfc3RhY2tfdW5pb24sIHN0YWNrX2NhbmFyeSkgIT0gNDApOworI2VuZGlmCisJLyoKKwkgKiBXZSBib3RoIHVzZSB0aGUgcmFuZG9tIHBvb2wgYW5kIHRoZSBjdXJyZW50IFRTQyBhcyBhIHNvdXJjZQorCSAqIG9mIHJhbmRvbW5lc3MuIFRoZSBUU0Mgb25seSBtYXR0ZXJzIGZvciB2ZXJ5IGVhcmx5IGluaXQsCisJICogdGhlcmUgaXQgYWxyZWFkeSBoYXMgc29tZSByYW5kb21uZXNzIG9uIG1vc3Qgc3lzdGVtcy4gTGF0ZXIKKwkgKiBvbiBkdXJpbmcgdGhlIGJvb3R1cCB0aGUgcmFuZG9tIHBvb2wgaGFzIHRydWUgZW50cm9weSB0b28uCisJICovCisJZ2V0X3JhbmRvbV9ieXRlcygmY2FuYXJ5LCBzaXplb2YoY2FuYXJ5KSk7CisJdHNjID0gX19uYXRpdmVfcmVhZF90c2MoKTsKKwljYW5hcnkgKz0gdHNjICsgKHRzYyA8PCAzMlVMKTsKKworCWN1cnJlbnQtPnN0YWNrX2NhbmFyeSA9IGNhbmFyeTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcGVyY3B1X3dyaXRlKGlycV9zdGFja191bmlvbi5zdGFja19jYW5hcnksIGNhbmFyeSk7CisjZWxzZQorCXBlcmNwdV93cml0ZShzdGFja19jYW5hcnksIGNhbmFyeSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3N0YWNrX2NhbmFyeV9zZWdtZW50KGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXVuc2lnbmVkIGxvbmcgY2FuYXJ5ID0gKHVuc2lnbmVkIGxvbmcpJnBlcl9jcHUoc3RhY2tfY2FuYXJ5LCBjcHUpIC0gMjA7CisJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHRfdGFibGUgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOworCXN0cnVjdCBkZXNjX3N0cnVjdCBkZXNjOworCisJZGVzYyA9IGdkdF90YWJsZVtHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZXTsKKwlkZXNjLmJhc2UwID0gY2FuYXJ5ICYgMHhmZmZmOworCWRlc2MuYmFzZTEgPSAoY2FuYXJ5ID4+IDE2KSAmIDB4ZmY7CisJZGVzYy5iYXNlMiA9IChjYW5hcnkgPj4gMjQpICYgMHhmZjsKKwl3cml0ZV9nZHRfZW50cnkoZ2R0X3RhYmxlLCBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZLCAmZGVzYywgREVTQ1RZUEVfUyk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfc3RhY2tfY2FuYXJ5X3NlZ21lbnQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJYXNtKCJtb3YgJTAsICUlZ3MiIDogOiAiciIgKF9fS0VSTkVMX1NUQUNLX0NBTkFSWSkgOiAibWVtb3J5Iik7CisjZW5kaWYKK30KKworI2Vsc2UJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KKworI2RlZmluZSBHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQKKworLyogZHVtbXkgYm9vdF9pbml0X3N0YWNrX2NhbmFyeSgpIGlzIGRlZmluZWQgaW4gbGludXgvc3RhY2twcm90ZWN0b3IuaCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfc3RhY2tfY2FuYXJ5X3NlZ21lbnQoaW50IGNwdSkKK3sgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9zdGFja19jYW5hcnlfc2VnbWVudCh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZ3MiIDogOiAiciIgKDApKTsKKyNlbmRpZgorfQorCisjZW5kaWYJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KKyNlbmRpZgkvKiBfQVNNX1NUQUNLUFJPVEVDVE9SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvYXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2QyYzg2Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TVU1NSVRfQVBJQ19ICi0jZGVmaW5lIF9fQVNNX1NVTU1JVF9BUElDX0gKLQotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLQotI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKLSNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDApCi0KLS8qIEluIGNsdXN0ZXJlZCBtb2RlLCB0aGUgaGlnaCBuaWJibGUgb2YgQVBJQyBJRCBpcyBhIGNsdXN0ZXIgbnVtYmVyLgotICogVGhlIGxvdyBuaWJibGUgaXMgYSA0LWJpdCBiaXRtYXAuICovCi0jZGVmaW5lIFhBUElDX0RFU1RfQ1BVU19TSElGVAk0Ci0jZGVmaW5lIFhBUElDX0RFU1RfQ1BVU19NQVNLCSgoMXUgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKSAtIDEpCi0jZGVmaW5lIFhBUElDX0RFU1RfQ0xVU1RFUl9NQVNLCShYQVBJQ19ERVNUX0NQVVNfTUFTSyA8PCBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpCi0KLSNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJKEFQSUNfREZSX0NMVVNURVIpCi0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICp0YXJnZXRfY3B1cyh2b2lkKQotewotCS8qIENQVV9NQVNLX0FMTCAoMHhmZikgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAotCSAqIGRlc3RfTG93ZXN0UHJpbyBtb2RlIGxvZ2ljYWwgY2x1c3RlcmVkIGFwaWMgaW50ZXJydXB0IHJvdXRpbmcKLQkgKiBKdXN0IHN0YXJ0IG9uIGNwdSAwLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNwcmVhZCBsb2FkCi0JICovCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKLX0KLQotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZGVzdF9Mb3dlc3RQcmlvKQotI2RlZmluZSBJTlRfREVTVF9NT0RFIDEgICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHdlIGRvbid0IHVzZSB0aGUgcGh5c19jcHVfcHJlc2VudF9tYXAgdG8gaW5kaWNhdGUgYXBpY2lkIHByZXNlbmNlICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotI2RlZmluZSBhcGljaWRfY2x1c3RlcihhcGljaWQpICgoYXBpY2lkKSAmIFhBUElDX0RFU1RfQ0xVU1RFUl9NQVNLKQotCi1leHRlcm4gdTggY3B1XzJfbG9naWNhbF9hcGljaWRbXTsKLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXBpY19sZHIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7Ci0JaW50IGNvdW50ID0gMDsKLQl1OCBteV9pZCA9ICh1OCloYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQl1OCBteV9jbHVzdGVyID0gKHU4KWFwaWNpZF9jbHVzdGVyKG15X2lkKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdTggbGlkOwotCWludCBpOwotCi0JLyogQ3JlYXRlIGxvZ2ljYWwgQVBJQyBJRHMgYnkgY291bnRpbmcgQ1BVcyBhbHJlYWR5IGluIGNsdXN0ZXIuICovCi0JZm9yIChjb3VudCA9IDAsIGkgPSBucl9jcHVfaWRzOyAtLWkgPj0gMDsgKSB7Ci0JCWxpZCA9IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW2ldOwotCQlpZiAobGlkICE9IEJBRF9BUElDSUQgJiYgYXBpY2lkX2NsdXN0ZXIobGlkKSA9PSBteV9jbHVzdGVyKQotCQkJKytjb3VudDsKLQl9Ci0jZW5kaWYKLQkvKiBXZSBvbmx5IGhhdmUgYSA0IHdpZGUgYml0bWFwIGluIGNsdXN0ZXIgbW9kZS4gIElmIGEgZGVyYW5nZWQKLQkgKiBCSU9TIHB1dHMgNSBDUFVzIGluIG9uZSBBUElDIGNsdXN0ZXIsIHdlJ3JlIGhvc2VkLiAqLwotCUJVR19PTihjb3VudCA+PSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQpOwotCWlkID0gbXlfY2x1c3RlciB8ICgxVUwgPDwgY291bnQpOwotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKLQl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7Ci0JdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgU3VtbWl0LiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAotCQkJCQkJbnJfaW9hcGljcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JcmV0dXJuIGFwaWNpZF8yX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCi0vKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKLQkJcmV0dXJuIEJBRF9BUElDSUQ7Ci0JcmV0dXJuIChpbnQpY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKLSNlbHNlCi0JcmV0dXJuIGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKLXsKLQlpZiAobXBzX2NwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfaWRfbWFwKQotewotCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHgwRik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGh5c2lkX21hc2tfdCBhcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGFwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9hcGljX21vZGUodm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKLXsKLQlpbnQgbnVtX2JpdHNfc2V0OwotCWludCBjcHVzX2ZvdW5kID0gMDsKLQlpbnQgY3B1OwotCWludCBhcGljaWQ7Ci0KLQludW1fYml0c19zZXQgPSBjcHVzX3dlaWdodCgqY3B1bWFzayk7Ci0JLyogUmV0dXJuIGlkIHRvIGFsbCAqLwotCWlmIChudW1fYml0c19zZXQgPj0gbnJfY3B1X2lkcykKLQkJcmV0dXJuIChpbnQpIDB4RkY7Ci0JLyoKLQkgKiBUaGUgY3B1cyBpbiB0aGUgbWFzayBtdXN0IGFsbCBiZSBvbiB0aGUgYXBpYyBjbHVzdGVyLiAgSWYgYXJlIG5vdAotCSAqIG9uIHRoZSBzYW1lIGFwaWNpZCBjbHVzdGVyIHJldHVybiBkZWZhdWx0IHZhbHVlIG9mIFRBUkdFVF9DUFVTLgotCSAqLwotCWNwdSA9IGZpcnN0X2NwdSgqY3B1bWFzayk7Ci0JYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7Ci0Jd2hpbGUgKGNwdXNfZm91bmQgPCBudW1fYml0c19zZXQpIHsKLQkJaWYgKGNwdV9pc3NldChjcHUsICpjcHVtYXNrKSkgewotCQkJaW50IG5ld19hcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKLQkJCWlmIChhcGljaWRfY2x1c3RlcihhcGljaWQpICE9Ci0JCQkJCWFwaWNpZF9jbHVzdGVyKG5ld19hcGljaWQpKXsKLQkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsIF9fZnVuY19fKTsKLQkJCQlyZXR1cm4gMHhGRjsKLQkJCX0KLQkJCWFwaWNpZCA9IGFwaWNpZCB8IG5ld19hcGljaWQ7Ci0JCQljcHVzX2ZvdW5kKys7Ci0JCX0KLQkJY3B1Kys7Ci0JfQotCXJldHVybiBhcGljaWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmlubWFzaywKLQkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JaW50IGFwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKLQljcHVtYXNrX3Zhcl90IGNwdW1hc2s7Ci0KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVtYXNrLCBHRlBfQVRPTUlDKSkKLQkJcmV0dXJuIGFwaWNpZDsKLQotCWNwdW1hc2tfYW5kKGNwdW1hc2ssIGlubWFzaywgYW5kbWFzayk7Ci0JY3B1bWFza19hbmQoY3B1bWFzaywgY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKLQlhcGljaWQgPSBjcHVfbWFza190b19hcGljaWQoY3B1bWFzayk7Ci0KLQlmcmVlX2NwdW1hc2tfdmFyKGNwdW1hc2spOwotCXJldHVybiBhcGljaWQ7Ci19Ci0KLS8qIGNwdWlkIHJldHVybnMgdGhlIHZhbHVlIGxhdGNoZWQgaW4gdGhlIEhXIGF0IHJlc2V0LCBub3QgdGhlIEFQSUMgSUQKLSAqIHJlZ2lzdGVyJ3MgdmFsdWUuICBGb3IgYW55IGJveCB3aG9zZSBCSU9TIGNoYW5nZXMgQVBJQyBJRHMsIGxpa2UKLSAqIGNsdXN0ZXJlZCBBUElDIHN5c3RlbXMsIHdlIG11c3QgdXNlIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZC4KLSAqCi0gKiBTZWUgSW50ZWwncyBJQS0zMiBTVyBEZXYncyBNYW51YWwgVm9sMiB1bmRlciBDUFVJRC4KLSAqLwotc3RhdGljIGlubGluZSB1MzIgcGh5c19wa2dfaWQodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX1NVTU1JVF9BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvYXBpY2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2ZiY2ExLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9hcGljZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NVTU1JVF9BUElDREVGX0gKLSNkZWZpbmUgX19BU01fU1VNTUlUX0FQSUNERUZfSAotCi0jZGVmaW5lCQlBUElDX0lEX01BU0sJCSgweEZGPDwyNCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JcmV0dXJuICh4Pj4yNCkmMHhGRjsKLX0KLQotI2RlZmluZQkJR0VUX0FQSUNfSUQoeCkJZ2V0X2FwaWNfaWQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvaXBpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvaXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YTJjMjQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VtbWl0L2lwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TVU1NSVRfSVBJX0gKLSNkZWZpbmUgX19BU01fU1VNTUlUX0lQSV9ICi0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBjcHVtYXNrX3QgKm1hc2ssIGludCB2ZWN0b3IpOwotdm9pZCBzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3QgY3B1bWFza190ICptYXNrLCBpbnQgdmVjdG9yKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX21hc2soY29uc3QgY3B1bWFza190ICptYXNrLCBpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOwotCi0JaWYgKCFjcHVzX2VtcHR5KG1hc2spKQotCQlzZW5kX0lQSV9tYXNrKCZtYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0Jc2VuZF9JUElfbWFzaygmY3B1X29ubGluZV9tYXAsIHZlY3Rvcik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTTV9TVU1NSVRfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9tcHBhcnNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdW1taXQvbXBwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODBlODZjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1bW1pdC9tcHBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TVU1NSVRfTVBQQVJTRV9ICi0jZGVmaW5lIF9fQVNNX1NVTU1JVF9NUFBBUlNFX0gKLQotI2luY2x1ZGUgPGFzbS90c2MuaD4KLQotZXh0ZXJuIGludCB1c2VfY3ljbG9uZTsKLQotI2lmZGVmIENPTkZJR19YODZfU1VNTUlUX05VTUEKLWV4dGVybiB2b2lkIHNldHVwX3N1bW1pdCh2b2lkKTsKLSNlbHNlCi0jZGVmaW5lIHNldHVwX3N1bW1pdCgpCXt9Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKLQkJY2hhciAqcHJvZHVjdGlkKQotewotCWlmICghc3RybmNtcChvZW0sICJJQk0gRU5TVyIsIDgpICYmCi0JCQkoIXN0cm5jbXAocHJvZHVjdGlkLCAiVklHSUwgU01QIiwgOSkKLQkJCSB8fCAhc3RybmNtcChwcm9kdWN0aWQsICJFWEEiLCAzKQotCQkJIHx8ICFzdHJuY21wKHByb2R1Y3RpZCwgIlJVVEhMRVNTIFNNUCIsIDEyKSkpewotCQltYXJrX3RzY191bnN0YWJsZSgiU3VtbWl0IGJhc2VkIHN5c3RlbSIpOwotCQl1c2VfY3ljbG9uZSA9IDE7IC8qZW5hYmxlIGN5Y2xvbmUtdGltZXIqLwotCQlzZXR1cF9zdW1taXQoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCi1zdGF0aWMgaW5saW5lIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQotewotCWlmICghc3RybmNtcChvZW1faWQsICJJQk0iLCAzKSAmJgotCSAgICAoIXN0cm5jbXAob2VtX3RhYmxlX2lkLCAiU0VSVklHSUwiLCA4KQotCSAgICAgfHwgIXN0cm5jbXAob2VtX3RhYmxlX2lkLCAiRVhBIiwgMykpKXsKLQkJbWFya190c2NfdW5zdGFibGUoIlN1bW1pdCBiYXNlZCBzeXN0ZW0iKTsKLQkJdXNlX2N5Y2xvbmUgPSAxOyAvKmVuYWJsZSBjeWNsb25lLXRpbWVyKi8KLQkJc2V0dXBfc3VtbWl0KCk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHJpb190YWJsZV9oZHIgewotCXVuc2lnbmVkIGNoYXIgdmVyc2lvbjsgICAgICAvKiBWZXJzaW9uIG51bWJlciBvZiB0aGlzIGRhdGEgc3RydWN0dXJlICAgICAgICAgICAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWZXJzaW9uIDMgYWRkcyBjaGFzc2lzX251bSAmIFdQX2luZGV4ICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgbnVtX3NjYWxfZGV2OyAvKiAjIG9mIFNjYWxhYmlsaXR5IGRldmljZXMgKFR3aXN0ZXJzIGZvciBWaWdpbCkgICAqLwotCXVuc2lnbmVkIGNoYXIgbnVtX3Jpb19kZXY7ICAvKiAjIG9mIFJJTyBJL08gZGV2aWNlcyAoQ3ljbG9uZXMgYW5kIFdpbm5pcGVncykgICAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IHNjYWxfZGV0YWlsIHsKLQl1bnNpZ25lZCBjaGFyIG5vZGVfaWQ7ICAgICAgLyogU2NhbGFiaWxpdHkgTm9kZSBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nIENCQVI7ICAgICAgICAgLyogQWRkcmVzcyBvZiAxTUIgcmVnaXN0ZXIgc3BhY2UgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQwbm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQwcG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAweEZGPU5vbmUgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQxbm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRiA9IE5vbmUgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQxcG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAweEZGPU5vbmUgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQybm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRiA9IE5vbmUgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQycG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAweEZGPU5vbmUgKi8KLQl1bnNpZ25lZCBjaGFyIGNoYXNzaXNfbnVtOyAgLyogMSBiYXNlZCBDaGFzc2lzIG51bWJlciAoMSA9IGJvb3Qgbm9kZSkgICAgICAgICAgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCByaW9fZGV0YWlsIHsKLQl1bnNpZ25lZCBjaGFyIG5vZGVfaWQ7ICAgICAgLyogUklPIE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nIEJCQVI7ICAgICAgICAgLyogQWRkcmVzcyBvZiAxTUIgcmVnaXN0ZXIgc3BhY2UgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHR5cGU7ICAgICAgICAgLyogVHlwZSBvZiBkZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIG93bmVyX2lkOyAgICAgLyogRm9yIFdQRUc6IE5vZGUgSUQgb2YgQ3ljbG9uZSB0aGF0IG93bnMgdGhpcyBXUEVHKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIENZQzogIE5vZGUgSUQgb2YgVHdpc3RlciB0aGF0IG93bnMgdGhpcyBDWUMgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQwbm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQwcG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAweEZGPU5vbmUgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQxbm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHBvcnQxcG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAweEZGPU5vbmUgKi8KLQl1bnNpZ25lZCBjaGFyIGZpcnN0X3Nsb3Q7ICAgLyogRm9yIFdQRUc6IExvd2VzdCBzbG90IG51bWJlciBiZWxvdyB0aGlzIFdQRUcgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIENZQzogIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIHN0YXR1czsgICAgICAgLyogRm9yIFdQRUc6IEJpdCAwID0gMSA6IHRoZSBYQVBJQyBpcyB1c2VkICAgICAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgID0gMCA6IHRoZSBYQVBJQyBpcyBub3QgdXNlZCwgaWU6Ki8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICBpbnRzIGZ3ZGVkIHRvIGFub3RoZXIgWEFQSUMgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgIEJpdHMxOjcgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIENZQzogIEJpdHMwOjcgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIFdQX2luZGV4OyAgICAgLyogRm9yIFdQRUc6IFdQRUcgaW5zdGFuY2UgaW5kZXggLSBsb3dlciBvbmVzIGhhdmUgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgIGxvd2VyIHNsb3QgbnVtYmVycy9QQ0kgYnVzIG51bWJlcnMgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIENZQzogIE5vIG1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyIGNoYXNzaXNfbnVtOyAgLyogMSBiYXNlZCBDaGFzc2lzIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIExvb2tPdXQgV1BFR3MgdGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlICAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhwYW5zaW9uIENoYXNzaXMgIywgZW51bWVyYXRlZCBmcm9tIEJvb3QgICAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9kZSBXUEVHIGV4dGVybmFsIHBvcnQsIHRoZW4gQm9vdCBOb2RlIENZQyAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZXJuYWwgcG9ydCwgdGhlbiBOZXh0IFZpZ2lsIGNoYXNzaXMgV1BFRyAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZXJuYWwgcG9ydCwgZXRjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hhcmVkIExvb2tvdXRzIGhhdmUgb25seSAxIGNoYXNzaXMgbnVtYmVyICh0aGUgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3Qgb25lIGFzc2lnbmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLQotdHlwZWRlZiBlbnVtIHsKLQlDb21wYXRUd2lzdGVyID0gMCwgIC8qIENvbXBhdGliaWxpdHkgVHdpc3RlciAgICAgICAgICAgICAgICovCi0JQWx0VHdpc3RlciAgICA9IDEsICAvKiBBbHRlcm5hdGUgVHdpc3RlciBvZiBpbnRlcm5hbCA4LXdheSAqLwotCUNvbXBhdEN5Y2xvbmUgPSAyLCAgLyogQ29tcGF0aWJpbGl0eSBDeWNsb25lICAgICAgICAgICAgICAgKi8KLQlBbHRDeWNsb25lICAgID0gMywgIC8qIEFsdGVybmF0ZSBDeWNsb25lIG9mIGludGVybmFsIDgtd2F5ICovCi0JQ29tcGF0V1BFRyAgICA9IDQsICAvKiBDb21wYXRpYmlsaXR5IFdQRUcgICAgICAgICAgICAgICAgICAqLwotCUFsdFdQRUcgICAgICAgPSA1LCAgLyogU2Vjb25kIFBsYW5hciBXUEVHICAgICAgICAgICAgICAgICAgKi8KLQlMb29rT3V0QVdQRUcgID0gNiwgIC8qIExvb2tPdXQgV1BFRyAgICAgICAgICAgICAgICAgICAgICAgICovCi0JTG9va091dEJXUEVHICA9IDcsICAvKiBMb29rT3V0IFdQRUcgICAgICAgICAgICAgICAgICAgICAgICAqLwotfSBub2RlX3R5cGU7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX1dQRUcoc3RydWN0IHJpb19kZXRhaWwgKnJpbyl7Ci0JcmV0dXJuIChyaW8tPnR5cGUgPT0gQ29tcGF0V1BFRyB8fCByaW8tPnR5cGUgPT0gQWx0V1BFRyB8fAotCQlyaW8tPnR5cGUgPT0gTG9va091dEFXUEVHIHx8IHJpby0+dHlwZSA9PSBMb29rT3V0QldQRUcpOwotfQotCi0jZW5kaWYgLyogX19BU01fU1VNTUlUX01QUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCAxYjhhZmE3Li44MmFkYTc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaApAQCAtMTc0LDEwICsxNzQsNiBAQAogI2RlZmluZSBTVk1fQ1BVSURfRkVBVFVSRV9TSElGVCAyCiAjZGVmaW5lIFNWTV9DUFVJRF9GVU5DIDB4ODAwMDAwMGEKIAotI2RlZmluZSBNU1JfRUZFUl9TVk1FX01BU0sgKDFVTEwgPDwgMTIpCi0jZGVmaW5lIE1TUl9WTV9DUiAgICAgICAweGMwMDEwMTE0Ci0jZGVmaW5lIE1TUl9WTV9IU0FWRV9QQSAweGMwMDEwMTE3VUxMCi0KICNkZWZpbmUgU1ZNX1ZNX0NSX1NWTV9ESVNBQkxFIDQKIAogI2RlZmluZSBTVk1fU0VMRUNUT1JfU19TSElGVCA0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzX2lhMzIuaAppbmRleCBmZmIwOGJlLi43MmE2ZGNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmgKQEAgLTcwLDggKzcwLDYgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9vbGR1bmFtZShzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgX191c2VyICopOwogbG9uZyBzeXMzMl91bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICopOwogCi1sb25nIHN5czMyX3VzdGF0KHVuc2lnbmVkLCBzdHJ1Y3QgdXN0YXQzMiBfX3VzZXIgKik7Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9leGVjdmUoY2hhciBfX3VzZXIgKiwgY29tcGF0X3VwdHJfdCBfX3VzZXIgKiwKIAkJCSAgICAgY29tcGF0X3VwdHJfdCBfX3VzZXIgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBhc21saW5rYWdlIGxvbmcgc3lzMzJfY2xvbmUodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICopOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKaW5kZXggYzBiMGJkYS4uNzA0MzQwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCkBAIC0yOSwyMSArMjksMjEgQEAKIC8qIFg4Nl8zMiBvbmx5ICovCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogLyoga2VybmVsL3Byb2Nlc3NfMzIuYyAqLwotYXNtbGlua2FnZSBpbnQgc3lzX2Zvcmsoc3RydWN0IHB0X3JlZ3MpOwotYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHN0cnVjdCBwdF9yZWdzKTsKLWFzbWxpbmthZ2UgaW50IHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyk7Ci1hc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKHN0cnVjdCBwdF9yZWdzKTsKK2ludCBzeXNfZm9yayhzdHJ1Y3QgcHRfcmVncyAqKTsKK2ludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MgKik7CitpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICopOworaW50IHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qIGtlcm5lbC9zaWduYWxfMzIuYyAqLwogYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQoaW50LCBpbnQsIG9sZF9zaWdzZXRfdCk7CiBhc21saW5rYWdlIGludCBzeXNfc2lnYWN0aW9uKGludCwgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICosCiAJCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqKTsKLWFzbWxpbmthZ2UgaW50IHN5c19zaWdhbHRzdGFjayh1bnNpZ25lZCBsb25nKTsKLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfc2lncmV0dXJuKHVuc2lnbmVkIGxvbmcpOwotYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nKTsKK2ludCBzeXNfc2lnYWx0c3RhY2soc3RydWN0IHB0X3JlZ3MgKik7Cit1bnNpZ25lZCBsb25nIHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKik7Citsb25nIHN5c19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qIGtlcm5lbC9pb3BvcnQuYyAqLwotYXNtbGlua2FnZSBsb25nIHN5c19pb3BsKHVuc2lnbmVkIGxvbmcpOworbG9uZyBzeXNfaW9wbChzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL3N5c19pMzg2XzMyLmMgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKQEAgLTU5LDggKzU5LDggQEAKIGFzbWxpbmthZ2UgaW50IHN5c19vbGR1bmFtZShzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgX191c2VyICopOwogCiAvKiBrZXJuZWwvdm04Nl8zMi5jICovCi1hc21saW5rYWdlIGludCBzeXNfdm04Nm9sZChzdHJ1Y3QgcHRfcmVncyk7Ci1hc21saW5rYWdlIGludCBzeXNfdm04NihzdHJ1Y3QgcHRfcmVncyk7CitpbnQgc3lzX3ZtODZvbGQoc3RydWN0IHB0X3JlZ3MgKik7CitpbnQgc3lzX3ZtODYoc3RydWN0IHB0X3JlZ3MgKik7CiAKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KIApAQCAtNzQsNiArNzQsNyBAQAogYXNtbGlua2FnZSBsb25nIHN5c19leGVjdmUoY2hhciBfX3VzZXIgKiwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKiwKIAkJCSAgIGNoYXIgX191c2VyICogX191c2VyICosCiAJCQkgICBzdHJ1Y3QgcHRfcmVncyAqKTsKK2xvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKIAogLyoga2VybmVsL2lvcG9ydC5jICovCiBhc21saW5rYWdlIGxvbmcgc3lzX2lvcGwodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqKTsKQEAgLTgxLDcgKzgyLDcgQEAKIC8qIGtlcm5lbC9zaWduYWxfNjQuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5c19zaWdhbHRzdGFjayhjb25zdCBzdGFja190IF9fdXNlciAqLCBzdGFja190IF9fdXNlciAqLAogCQkJCXN0cnVjdCBwdF9yZWdzICopOwotYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKik7Citsb25nIHN5c19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qIGtlcm5lbC9zeXNfeDg2XzY0LmMgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA4ZTYyNmVhLi42NDNjNTliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMjAsOSArMjAsMjYgQEAKIHN0cnVjdCB0YXNrX3N0cnVjdDsgLyogb25lIG9mIHRoZSBzdHJhbmdlciBhc3BlY3RzIG9mIEMgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CitzdHJ1Y3QgdHNzX3N0cnVjdDsKK3ZvaWQgX19zd2l0Y2hfdG9feHRyYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZfcCwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3AsCisJCSAgICAgIHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeQkJCQkJCQlcCisJIm1vdmwgJVBbdGFza19jYW5hcnldKCVbbmV4dF0pLCAlJWVieFxuXHQiCQkJXAorCSJtb3ZsICUlZWJ4LCAiX19wZXJjcHVfYXJnKFtzdGFja19jYW5hcnldKSJcblx0IgorI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfb3BhcmFtCQkJCQkJXAorCSwgW3N0YWNrX2NhbmFyeV0gIj1tIiAocGVyX2NwdV92YXIoc3RhY2tfY2FuYXJ5KSkKKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQkJCQkJCVwKKwksIFt0YXNrX2NhbmFyeV0gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrX2NhbmFyeSkpCisjZWxzZQkvKiBDQ19TVEFDS1BST1RFQ1RPUiAqLworI2RlZmluZSBfX3N3aXRjaF9jYW5hcnkKKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X29wYXJhbQorI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCisjZW5kaWYJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KKwogLyoKICAqIFNhdmluZyBlZmxhZ3MgaXMgaW1wb3J0YW50LiBJdCBzd2l0Y2hlcyBub3Qgb25seSBJT1BMIGJldHdlZW4gdGFza3MsCiAgKiBpdCBhbHNvIHByb3RlY3RzIG90aGVyIHRhc2tzIGZyb20gTlQgbGVha2luZyB0aHJvdWdoIHN5c2VudGVyIGV0Yy4KQEAgLTQ0LDYgKzYxLDcgQEAKIAkJICAgICAibW92bCAlW25leHRfc3BdLCUlZXNwXG5cdCIJLyogcmVzdG9yZSBFU1AgICAqLyBcCiAJCSAgICAgIm1vdmwgJDFmLCVbcHJldl9pcF1cblx0IgkvKiBzYXZlICAgIEVJUCAgICovCVwKIAkJICAgICAicHVzaGwgJVtuZXh0X2lwXVxuXHQiCS8qIHJlc3RvcmUgRUlQICAgKi8JXAorCQkgICAgIF9fc3dpdGNoX2NhbmFyeQkJCQkJXAogCQkgICAgICJqbXAgX19zd2l0Y2hfdG9cbiIJLyogcmVncGFybSBjYWxsICAqLwlcCiAJCSAgICAgIjE6XHQiCQkJCQkJXAogCQkgICAgICJwb3BsICUlZWJwXG5cdCIJCS8qIHJlc3RvcmUgRUJQICAgKi8JXApAQCAtNTgsNiArNzYsOCBAQAogCQkgICAgICAgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4KSwgIj1kIiAoZWR4KSwJCVwKIAkJICAgICAgICI9UyIgKGVzaSksICI9RCIgKGVkaSkJCQkJXAogCQkgICAgICAgCQkJCQkJCVwKKwkJICAgICAgIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0JCQkJXAorCQkJCQkJCQkJXAogCQkgICAgICAgLyogaW5wdXQgcGFyYW1ldGVyczogKi8JCQkJXAogCQkgICAgIDogW25leHRfc3BdICAibSIgKG5leHQtPnRocmVhZC5zcCksCQlcCiAJCSAgICAgICBbbmV4dF9pcF0gICJtIiAobmV4dC0+dGhyZWFkLmlwKSwJCVwKQEAgLTY2LDYgKzg2LDggQEAKIAkJICAgICAgIFtwcmV2XSAgICAgImEiIChwcmV2KSwJCQkJXAogCQkgICAgICAgW25leHRdICAgICAiZCIgKG5leHQpCQkJCVwKIAkJCQkJCQkJCVwKKwkJICAgICAgIF9fc3dpdGNoX2NhbmFyeV9pcGFyYW0JCQkJXAorCQkJCQkJCQkJXAogCQkgICAgIDogLyogcmVsb2FkZWQgc2VnbWVudCByZWdpc3RlcnMgKi8JCQlcCiAJCQkibWVtb3J5Iik7CQkJCQlcCiB9IHdoaWxlICgwKQpAQCAtODYsMjcgKzEwOCw0NCBAQAogCSwgInJjeCIsICJyYngiLCAicmR4IiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCBcCiAJICAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IgogCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeQkJCQkJCQkgIFwKKwkibW92cSAlUFt0YXNrX2NhbmFyeV0oJSVyc2kpLCUlcjhcblx0IgkJCQkgIFwKKwkibW92cSAlJXI4LCJfX3BlcmNwdV9hcmcoW2dzX2NhbmFyeV0pIlxuXHQiCisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0JCQkJCQkgIFwKKwksIFtnc19jYW5hcnldICI9bSIgKHBlcl9jcHVfdmFyKGlycV9zdGFja191bmlvbi5zdGFja19jYW5hcnkpKQorI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCQkJCQkJICBcCisJLCBbdGFza19jYW5hcnldICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFja19jYW5hcnkpKQorI2Vsc2UJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5CisjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0KKyNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQorI2VuZGlmCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCisKIC8qIFNhdmUgcmVzdG9yZSBmbGFncyB0byBjbGVhciBoYW5kbGUgbGVha2luZyBOVCAqLwogI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgXAotCWFzbSB2b2xhdGlsZShTQVZFX0NPTlRFWFQJCQkJCQkgICAgXAorCWFzbSB2b2xhdGlsZShTQVZFX0NPTlRFWFQJCQkJCSAgXAogCSAgICAgIm1vdnEgJSVyc3AsJVBbdGhyZWFkcnNwXSglW3ByZXZdKVxuXHQiIC8qIHNhdmUgUlNQICovCSAgXAogCSAgICAgIm1vdnEgJVBbdGhyZWFkcnNwXSglW25leHRdKSwlJXJzcFxuXHQiIC8qIHJlc3RvcmUgUlNQICovCSAgXAogCSAgICAgImNhbGwgX19zd2l0Y2hfdG9cblx0IgkJCQkJICBcCiAJICAgICAiLmdsb2JsIHRocmVhZF9yZXR1cm5cbiIJCQkJCSAgXAogCSAgICAgInRocmVhZF9yZXR1cm46XG5cdCIJCQkJCSAgXAotCSAgICAgIm1vdnEgJSVnczolUFtwZGFfcGN1cnJlbnRdLCUlcnNpXG5cdCIJCQkgIFwKKwkgICAgICJtb3ZxICJfX3BlcmNwdV9hcmcoW2N1cnJlbnRfdGFza10pIiwlJXJzaVxuXHQiCQkgIFwKKwkgICAgIF9fc3dpdGNoX2NhbmFyeQkJCQkJCSAgXAogCSAgICAgIm1vdnEgJVBbdGhyZWFkX2luZm9dKCUlcnNpKSwlJXI4XG5cdCIJCQkgIFwKLQkgICAgIExPQ0tfUFJFRklYICJidHIgICVbdGlmX2ZvcmtdLCVQW3RpX2ZsYWdzXSglJXI4KVxuXHQiCSAgXAogCSAgICAgIm1vdnEgJSVyYXgsJSVyZGlcblx0IiAJCQkJCSAgXAotCSAgICAgImpjICAgcmV0X2Zyb21fZm9ya1xuXHQiCQkJCQkgIFwKKwkgICAgICJ0ZXN0bCAgJVtfdGlmX2ZvcmtdLCVQW3RpX2ZsYWdzXSglJXI4KVxuXHQiCSAgXAorCSAgICAgImpueiAgIHJldF9mcm9tX2Zvcmtcblx0IgkJCQkJICBcCiAJICAgICBSRVNUT1JFX0NPTlRFWFQJCQkJCQkgIFwKIAkgICAgIDogIj1hIiAobGFzdCkJCQkJCSAgCSAgXAorCSAgICAgICBfX3N3aXRjaF9jYW5hcnlfb3BhcmFtCQkJCQkgIFwKIAkgICAgIDogW25leHRdICJTIiAobmV4dCksIFtwcmV2XSAiRCIgKHByZXYpLAkJCSAgXAogCSAgICAgICBbdGhyZWFkcnNwXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnNwKSksIFwKIAkgICAgICAgW3RpX2ZsYWdzXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKSwJICBcCi0JICAgICAgIFt0aWZfZm9ya10gImkiIChUSUZfRk9SSyksCQkJICAJICBcCisJICAgICAgIFtfdGlmX2ZvcmtdICJpIiAoX1RJRl9GT1JLKSwJCQkgIAkgIFwKIAkgICAgICAgW3RocmVhZF9pbmZvXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKSwgICBcCi0JICAgICAgIFtwZGFfcGN1cnJlbnRdICJpIiAob2Zmc2V0b2Yoc3RydWN0IHg4NjY0X3BkYSwgcGN1cnJlbnQpKSAgXAorCSAgICAgICBbY3VycmVudF90YXNrXSAibSIgKHBlcl9jcHVfdmFyKGN1cnJlbnRfdGFzaykpCQkgIFwKKwkgICAgICAgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQkJCQkJICBcCiAJICAgICA6ICJtZW1vcnkiLCAiY2MiIF9fRVhUUkFfQ0xPQkJFUikKICNlbmRpZgogCkBAIC0xNjUsNiArMjA0LDI1IEBACiAjZGVmaW5lIHNhdmVzZWdtZW50KHNlZywgdmFsdWUpCQkJCVwKIAlhc20oIm1vdiAlJSIgI3NlZyAiLCUwIjoiPXIiICh2YWx1ZSkgOiA6ICJtZW1vcnkiKQogCisvKgorICogeDg2XzMyIHVzZXIgZ3MgYWNjZXNzb3JzLgorICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2lmZGVmIENPTkZJR19YODZfMzJfTEFaWV9HUworI2RlZmluZSBnZXRfdXNlcl9ncyhyZWdzKQkodTE2KSh7dW5zaWduZWQgbG9uZyB2OyBzYXZlc2VnbWVudChncywgdik7IHY7fSkKKyNkZWZpbmUgc2V0X3VzZXJfZ3MocmVncywgdikJbG9hZHNlZ21lbnQoZ3MsICh1bnNpZ25lZCBsb25nKSh2KSkKKyNkZWZpbmUgdGFza191c2VyX2dzKHRzaykJKCh0c2spLT50aHJlYWQuZ3MpCisjZGVmaW5lIGxhenlfc2F2ZV9ncyh2KQkJc2F2ZXNlZ21lbnQoZ3MsICh2KSkKKyNkZWZpbmUgbGF6eV9sb2FkX2dzKHYpCQlsb2Fkc2VnbWVudChncywgKHYpKQorI2Vsc2UJLyogWDg2XzMyX0xBWllfR1MgKi8KKyNkZWZpbmUgZ2V0X3VzZXJfZ3MocmVncykJKHUxNikoKHJlZ3MpLT5ncykKKyNkZWZpbmUgc2V0X3VzZXJfZ3MocmVncywgdikJZG8geyAocmVncyktPmdzID0gKHYpOyB9IHdoaWxlICgwKQorI2RlZmluZSB0YXNrX3VzZXJfZ3ModHNrKQkodGFza19wdF9yZWdzKHRzayktPmdzKQorI2RlZmluZSBsYXp5X3NhdmVfZ3ModikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbGF6eV9sb2FkX2dzKHYpCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYJLyogWDg2XzMyX0xBWllfR1MgKi8KKyNlbmRpZgkvKiBYODZfMzIgKi8KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9saW1pdCh1bnNpZ25lZCBsb25nIHNlZ21lbnQpCiB7CiAJdW5zaWduZWQgbG9uZyBfX2xpbWl0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggOTg3ODk2NC4uZGY5ZDVmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC00MCw2ICs0MCw3IEBACiAJCQkJCQkqLwogCV9fdTgJCQlzdXBlcnZpc29yX3N0YWNrWzBdOwogI2VuZGlmCisJaW50CQkJdWFjY2Vzc19lcnI7CiB9OwogCiAjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKQEAgLTE5NCwyNSArMTk1LDIxIEBACiAKICNlbHNlIC8qIFg4Nl8zMiAqLwogCi0jaW5jbHVkZSA8YXNtL3BkYS5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKyNkZWZpbmUgS0VSTkVMX1NUQUNLX09GRlNFVCAoNSo4KQogCiAvKgogICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KICAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrZXJuZWxfc3RhY2spOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7Ci0JdGkgPSAodm9pZCAqKShyZWFkX3BkYShrZXJuZWxzdGFjaykgKyBQREFfU1RBQ0tPRkZTRVQgLSBUSFJFQURfU0laRSk7Ci0JcmV0dXJuIHRpOwotfQotCi0vKiBkbyBub3QgdXNlIGluIGludGVycnVwdCBjb250ZXh0ICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqc3RhY2tfdGhyZWFkX2luZm8odm9pZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwotCWFzbSgiYW5kcSAlJXJzcCwlMDsgIiA6ICI9ciIgKHRpKSA6ICIwIiAofihUSFJFQURfU0laRSAtIDEpKSk7CisJdGkgPSAodm9pZCAqKShwZXJjcHVfcmVhZChrZXJuZWxfc3RhY2spICsKKwkJICAgICAgS0VSTkVMX1NUQUNLX09GRlNFVCAtIFRIUkVBRF9TSVpFKTsKIAlyZXR1cm4gdGk7CiB9CiAKQEAgLTIyMCw4ICsyMTcsOCBAQAogCiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCiAjZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpIFwKLQltb3ZxICVnczpwZGFfa2VybmVsc3RhY2sscmVnIDsgXAotCXN1YnEgJChUSFJFQURfU0laRS1QREFfU1RBQ0tPRkZTRVQpLHJlZworCW1vdnEgUEVSX0NQVV9WQVIoa2VybmVsX3N0YWNrKSxyZWcgOyBcCisJc3VicSAkKFRIUkVBRF9TSVpFLUtFUk5FTF9TVEFDS19PRkZTRVQpLHJlZwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggMmJiNmE4My4uYTgxMTk1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjZGVmaW5lIFRJQ0tfU0laRSAodGlja19uc2VjIC8gMTAwMCkKIApAQCAtMTIsNiArMTMsNyBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiBpbnQgdGltZXJfYWNrOwogZXh0ZXJuIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogZXh0ZXJuIGludCBub190aW1lcl9jaGVjazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IDBlN2JiYjUuLmQzNTM5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMTEzLDcgKzExMyw3IEBACiAJCV9fZmx1c2hfdGxiKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2ssCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCiAJCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhKQogewpAQCAtMTQyLDMxICsxNDIsMjggQEAKIAlmbHVzaF90bGJfbW0odm1hLT52bV9tbSk7CiB9CiAKLXZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSk7Cit2b2lkIG5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YSk7CiAKICNkZWZpbmUgVExCU1RBVEVfT0sJMQogI2RlZmluZSBUTEJTVEFURV9MQVpZCTIKIAotI2lmZGVmIENPTkZJR19YODZfMzIKIHN0cnVjdCB0bGJfc3RhdGUgewogCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKIAlpbnQgc3RhdGU7Ci0JY2hhciBfX2NhY2hlbGluZV9wYWRkaW5nW0wxX0NBQ0hFX0JZVEVTLThdOwogfTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpOwogCi12b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCk7Ci0jZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xhenlfdGxic3RhdGUodm9pZCkKIHsKKwlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLnN0YXRlLCAwKTsKKwlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSwgJmluaXRfbW0pOwogfQotI2VuZGlmCiAKICNlbmRpZgkvKiBTTVAgKi8KIAogI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKLSNkZWZpbmUgZmx1c2hfdGxiX290aGVycyhtYXNrLCBtbSwgdmEpCW5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKCZtYXNrLCBtbSwgdmEpCisjZGVmaW5lIGZsdXNoX3RsYl9vdGhlcnMobWFzaywgbW0sIHZhKQluYXRpdmVfZmx1c2hfdGxiX290aGVycyhtYXNrLCBtbSwgdmEpCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKQEAgLTE3NSw0ICsxNzIsNiBAQAogCWZsdXNoX3RsYl9hbGwoKTsKIH0KIAorZXh0ZXJuIHZvaWQgemFwX2xvd19tYXBwaW5ncyh2b2lkKTsKKwogI2VuZGlmIC8qIF9BU01fWDg2X1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDRlMmYyZTAuLjc3Y2ZiMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNzQsNiArNzQsOCBAQAogCXJldHVybiAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CisKICNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KIAogLyogTWFwcGluZ3MgYmV0d2VlbiBub2RlIG51bWJlciBhbmQgY3B1cyBvbiB0aGF0IG5vZGUuICovCkBAIC04Myw3ICs4NSw4IEBACiBERUNMQVJFX0VBUkxZX1BFUl9DUFUoaW50LCB4ODZfY3B1X3RvX25vZGVfbWFwKTsKIAogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IE5vZGUuICovCi0jZGVmaW5lIG51bWFfbm9kZV9pZCgpCQlyZWFkX3BkYShub2RlbnVtYmVyKQorREVDTEFSRV9QRVJfQ1BVKGludCwgbm9kZV9udW1iZXIpOworI2RlZmluZSBudW1hX25vZGVfaWQoKQkJcGVyY3B1X3JlYWQobm9kZV9udW1iZXIpCiAKICNpZmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCiBleHRlcm4gaW50IGNwdV90b19ub2RlKGludCBjcHUpOwpAQCAtMTAyLDEwICsxMDUsNyBAQAogLyogU2FtZSBmdW5jdGlvbiBidXQgdXNlZCBpZiBjYWxsZWQgYmVmb3JlIHBlcl9jcHUgYXJlYXMgYXJlIHNldHVwICovCiBzdGF0aWMgaW5saW5lIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQogewotCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKSkKLQkJcmV0dXJuIGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApW2NwdV07Ci0KLQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOworCXJldHVybiBlYXJseV9wZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CiB9CiAKIC8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjcHVtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCkBAIC0xMjIsNiArMTIyLDggQEAKIAogI2VuZGlmIC8qICFDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCiAKK2V4dGVybiB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCk7CisKIC8qCiAgKiBSZXBsYWNlIGRlZmF1bHQgbm9kZV90b19jcHVtYXNrX3B0ciB3aXRoIG9wdGltaXplZCB2ZXJzaW9uCiAgKiBEZXByZWNhdGVkOiB1c2UgImNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrID0gY3B1bWFza19vZl9ub2RlKG5vZGUpIgpAQCAtMTkyLDkgKzE5NCwyMCBAQAogCiAjZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KIAotI2RlZmluZSBudW1hX25vZGVfaWQoKQkJMAotI2RlZmluZQljcHVfdG9fbm9kZShjcHUpCTAKLSNkZWZpbmUJZWFybHlfY3B1X3RvX25vZGUoY3B1KQkwCitzdGF0aWMgaW5saW5lIGludCBudW1hX25vZGVfaWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGlubGluZSBjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKIHsKQEAgLTIwOSw2ICsyMjIsOCBAQAogCXJldHVybiBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KKwogLyoKICAqIFJlcGxhY2UgZGVmYXVsdCBub2RlX3RvX2NwdW1hc2tfcHRyIHdpdGggb3B0aW1pemVkIHZlcnNpb24KICAqIERlcHJlY2F0ZWQ6IHVzZSAiY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mX25vZGUobm9kZSkiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFtcG9saW5lLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFtcG9saW5lLmgKaW5kZXggNzgwYmEwYS4uOTBmMDZjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhbXBvbGluZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYW1wb2xpbmUuaApAQCAtMTMsNiArMTMsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3JzcDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRpYWxfY29kZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGluaXRpYWxfZ3M7CiAKICNkZWZpbmUgVFJBTVBPTElORV9TSVpFIHJvdW5kdXAodHJhbXBvbGluZV9lbmQgLSB0cmFtcG9saW5lX2RhdGEsIFBBR0VfU0laRSkKICNkZWZpbmUgVFJBTVBPTElORV9CQVNFIDB4NjAwMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggY2YzYmIwNS4uMGQ1MzQyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC00MSw3ICs0MSw3IEBACiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9fb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9fYm91bmRzKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfb3Aoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUoc3RydWN0IHB0X3JlZ3MpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2RldmljZV9ub3RfYXZhaWxhYmxlKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogZG90cmFwbGlua2FnZSB2b2lkIGRvX2NvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1bihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19pbnZhbGlkX1RTUyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19zZWdtZW50X25vdF9wcmVzZW50KHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDQzNDAwNTUuLmI2ODVlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLCByZXQsIHgsIHB0cikJCSAgICAgIFwKIAlhc20gdm9sYXRpbGUoImNhbGwgX19nZXRfdXNlcl8iICNzaXplCSAgICAgIFwKLQkJICAgICA6ICI9YSIgKHJldCksIj1kIiAoeCkJICAgICAgXAorCQkgICAgIDogIj1hIiAocmV0KSwgIj1kIiAoeCkJICAgICAgXAogCQkgICAgIDogIjAiIChwdHIpKQkJICAgICAgXAogCiAvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlcgpAQCAtMTgxLDEyICsxODEsMTIgQEAKIAogI2RlZmluZSBfX3B1dF91c2VyX3goc2l6ZSwgeCwgcHRyLCBfX3JldF9wdSkJCQlcCiAJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfIiAjc2l6ZSA6ICI9YSIgKF9fcmV0X3B1KQlcCi0JCSAgICAgOiIwIiAoKHR5cGVvZigqKHB0cikpKSh4KSksICJjIiAocHRyKSA6ICJlYngiKQorCQkgICAgIDogIjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCiAKIAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBhZGRyLCBlcnIpCQkJCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX3U2NCh4LCBhZGRyLCBlcnIsIGVycnJldCkJCQlcCiAJYXNtIHZvbGF0aWxlKCIxOgltb3ZsICUlZWF4LDAoJTIpXG4iCQkJXAogCQkgICAgICIyOgltb3ZsICUlZWR4LDQoJTIpXG4iCQkJXAogCQkgICAgICIzOlxuIgkJCQkJCVwKQEAgLTE5NywxNCArMTk3LDI0IEBACiAJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCA0YikJCQkJXAogCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgNGIpCQkJCVwKIAkJICAgICA6ICI9ciIgKGVycikJCQkJCVwKLQkJICAgICA6ICJBIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJICAgICA6ICJBIiAoeCksICJyIiAoYWRkciksICJpIiAoZXJycmV0KSwgIjAiIChlcnIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2V4X3U2NCh4LCBhZGRyKQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiMToJbW92bCAlJWVheCwwKCUxKVxuIgkJCVwKKwkJICAgICAiMjoJbW92bCAlJWVkeCw0KCUxKVxuIgkJCVwKKwkJICAgICAiMzpcbiIJCQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAyYiAtIDFiKQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYiAtIDJiKQkJCQlcCisJCSAgICAgOiA6ICJBIiAoeCksICJyIiAoYWRkcikpCiAKICNkZWZpbmUgX19wdXRfdXNlcl94OCh4LCBwdHIsIF9fcmV0X3B1KQkJCQlcCiAJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfOCIgOiAiPWEiIChfX3JldF9wdSkJXAogCQkgICAgIDogIkEiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpIDogImVieCIpCiAjZWxzZQotI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBwdHIsIHJldHZhbCkgXAotCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAicSIsICIiLCAiWnIiLCAtRUZBVUxUKQorI2RlZmluZSBfX3B1dF91c2VyX2FzbV91NjQoeCwgcHRyLCByZXR2YWwsIGVycnJldCkgXAorCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAicSIsICIiLCAiWnIiLCBlcnJyZXQpCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2V4X3U2NCh4LCBhZGRyKQlcCisJX19wdXRfdXNlcl9hc21fZXgoeCwgYWRkciwgInEiLCAiIiwgIlpyIikKICNkZWZpbmUgX19wdXRfdXNlcl94OCh4LCBwdHIsIF9fcmV0X3B1KSBfX3B1dF91c2VyX3goOCwgeCwgcHRyLCBfX3JldF9wdSkKICNlbmRpZgogCkBAIC0yNzYsMTAgKzI4NiwzMiBAQAogCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInciLCAidyIsICJpciIsIGVycnJldCk7CVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCi0JCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAibCIsICJrIiwgICJpciIsIGVycnJldCk7XAorCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImwiLCAiayIsICJpciIsIGVycnJldCk7CVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCQlcCi0JCV9fcHV0X3VzZXJfdTY0KChfX3R5cGVvZl9fKCpwdHIpKSh4KSwgcHRyLCByZXR2YWwpOwlcCisJCV9fcHV0X3VzZXJfYXNtX3U2NCgoX190eXBlb2ZfXygqcHRyKSkoeCksIHB0ciwgcmV0dmFsLAlcCisJCQkJICAgZXJycmV0KTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZV9leCh4LCBwdHIsIHNpemUpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtX2V4KHgsIHB0ciwgImIiLCAiYiIsICJpcSIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc21fZXgoeCwgcHRyLCAidyIsICJ3IiwgImlyIik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbV9leCh4LCBwdHIsICJsIiwgImsiLCAiaXIiKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtX2V4X3U2NCgoX190eXBlb2ZfXygqcHRyKSkoeCksIHB0cik7CVwKIAkJYnJlYWs7CQkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCQlcCiAJCV9fcHV0X3VzZXJfYmFkKCk7CQkJCQlcCkBAIC0zMTEsOSArMzQzLDEyIEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX3U2NCh4LCBwdHIsIHJldHZhbCwgZXJycmV0KQkoeCkgPSBfX2dldF91c2VyX2JhZCgpCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2V4X3U2NCh4LCBwdHIpCQkJKHgpID0gX19nZXRfdXNlcl9iYWQoKQogI2Vsc2UKICNkZWZpbmUgX19nZXRfdXNlcl9hc21fdTY0KHgsIHB0ciwgcmV0dmFsLCBlcnJyZXQpIFwKIAkgX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJxIiwgIiIsICI9ciIsIGVycnJldCkKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fZXhfdTY0KHgsIHB0cikgXAorCSBfX2dldF91c2VyX2FzbV9leCh4LCBwdHIsICJxIiwgIiIsICI9ciIpCiAjZW5kaWYKIAogI2RlZmluZSBfX2dldF91c2VyX3NpemUoeCwgcHRyLCBzaXplLCByZXR2YWwsIGVycnJldCkJCQlcCkBAIC0zNTAsNiArMzg1LDMzIEBACiAJCSAgICAgOiAiPXIiIChlcnIpLCBsdHlwZSh4KQkJCQlcCiAJCSAgICAgOiAibSIgKF9fbShhZGRyKSksICJpIiAoZXJycmV0KSwgIjAiIChlcnIpKQogCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZV9leCh4LCBwdHIsIHNpemUpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtX2V4KHgsIHB0ciwgImIiLCAiYiIsICI9cSIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc21fZXgoeCwgcHRyLCAidyIsICJ3IiwgIj1yIik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbV9leCh4LCBwdHIsICJsIiwgImsiLCAiPXIiKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtX2V4X3U2NCh4LCBwdHIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQkoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fZXgoeCwgYWRkciwgaXR5cGUsIHJ0eXBlLCBsdHlwZSkJCQlcCisJYXNtIHZvbGF0aWxlKCIxOgltb3YiaXR5cGUiICUxLCUicnR5cGUiMFxuIgkJXAorCQkgICAgICIyOlxuIgkJCQkJCVwKKwkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDJiIC0gMWIpCQkJCVwKKwkJICAgICA6IGx0eXBlKHgpIDogIm0iIChfX20oYWRkcikpKQorCiAjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCQkJXAogKHsJCQkJCQkJCVwKIAlpbnQgX19wdV9lcnI7CQkJCQkJXApAQCAtMzg1LDYgKzQ0NywyNiBAQAogCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCQkJCVwKIAkJICAgICA6ICI9ciIoZXJyKQkJCQkJXAogCQkgICAgIDogbHR5cGUoeCksICJtIiAoX19tKGFkZHIpKSwgImkiIChlcnJyZXQpLCAiMCIgKGVycikpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fZXgoeCwgYWRkciwgaXR5cGUsIHJ0eXBlLCBsdHlwZSkJCQlcCisJYXNtIHZvbGF0aWxlKCIxOgltb3YiaXR5cGUiICUicnR5cGUiMCwlMVxuIgkJXAorCQkgICAgICIyOlxuIgkJCQkJCVwKKwkJICAgICBfQVNNX0VYVEFCTEUoMWIsIDJiIC0gMWIpCQkJCVwKKwkJICAgICA6IDogbHR5cGUoeCksICJtIiAoX19tKGFkZHIpKSkKKworLyoKKyAqIHVhY2Nlc3NfdHJ5IGFuZCBjYXRjaAorICovCisjZGVmaW5lIHVhY2Nlc3NfdHJ5CWRvIHsJCQkJCQlcCisJaW50IHByZXZfZXJyID0gY3VycmVudF90aHJlYWRfaW5mbygpLT51YWNjZXNzX2VycjsJCVwKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnVhY2Nlc3NfZXJyID0gMDsJCQkJXAorCWJhcnJpZXIoKTsKKworI2RlZmluZSB1YWNjZXNzX2NhdGNoKGVycikJCQkJCQlcCisJKGVycikgfD0gY3VycmVudF90aHJlYWRfaW5mbygpLT51YWNjZXNzX2VycjsJCQlcCisJY3VycmVudF90aHJlYWRfaW5mbygpLT51YWNjZXNzX2VyciA9IHByZXZfZXJyOwkJCVwKK30gd2hpbGUgKDApCisKIC8qKgogICogX19nZXRfdXNlcjogLSBHZXQgYSBzaW1wbGUgdmFyaWFibGUgZnJvbSB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCiAgKiBAeDogICBWYXJpYWJsZSB0byBzdG9yZSByZXN1bHQuCkBAIC00MDgsNiArNDkwLDcgQEAKIAogI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikJCQkJCQlcCiAJX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorCiAvKioKICAqIF9fcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCiAgKiBAeDogICBWYWx1ZSB0byBjb3B5IHRvIHVzZXIgc3BhY2UuCkBAIC00MzUsNiArNTE4LDQ1IEBACiAjZGVmaW5lIF9fcHV0X3VzZXJfdW5hbGlnbmVkIF9fcHV0X3VzZXIKIAogLyoKKyAqIHtnZXR8cHV0fV91c2VyX3RyeSBhbmQgY2F0Y2gKKyAqCisgKiBnZXRfdXNlcl90cnkgeworICoJZ2V0X3VzZXJfZXgoLi4uKTsKKyAqIH0gZ2V0X3VzZXJfY2F0Y2goZXJyKQorICovCisjZGVmaW5lIGdldF91c2VyX3RyeQkJdWFjY2Vzc190cnkKKyNkZWZpbmUgZ2V0X3VzZXJfY2F0Y2goZXJyKQl1YWNjZXNzX2NhdGNoKGVycikKKworI2RlZmluZSBnZXRfdXNlcl9leCh4LCBwdHIpCWRvIHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VlX3ZhbDsJCQkJCVwKKwlfX2dldF91c2VyX3NpemVfZXgoKF9fZ3VlX3ZhbCksIChwdHIpLCAoc2l6ZW9mKCoocHRyKSkpKTsJXAorCSh4KSA9IChfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSlfX2d1ZV92YWw7CQkJXAorfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19YODZfV1BfV09SS1NfT0sKKworI2RlZmluZSBwdXRfdXNlcl90cnkJCXVhY2Nlc3NfdHJ5CisjZGVmaW5lIHB1dF91c2VyX2NhdGNoKGVycikJdWFjY2Vzc19jYXRjaChlcnIpCisKKyNkZWZpbmUgcHV0X3VzZXJfZXgoeCwgcHRyKQkJCQkJCVwKKwlfX3B1dF91c2VyX3NpemVfZXgoKF9fdHlwZW9mX18oKihwdHIpKSkoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKKworI2Vsc2UgLyogIUNPTkZJR19YODZfV1BfV09SS1NfT0sgKi8KKworI2RlZmluZSBwdXRfdXNlcl90cnkJCWRvIHsJCVwKKwlpbnQgX191YWNjZXNzX2VyciA9IDA7CisKKyNkZWZpbmUgcHV0X3VzZXJfY2F0Y2goZXJyKQkJCVwKKwkoZXJyKSB8PSBfX3VhY2Nlc3NfZXJyOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcHV0X3VzZXJfZXgoeCwgcHRyKQlkbyB7CQlcCisJX191YWNjZXNzX2VyciB8PSBfX3B1dF91c2VyKHgsIHB0cik7CVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfWDg2X1dQX1dPUktTX09LICovCisKKy8qCiAgKiBtb3ZzbCBjYW4gYmUgc2xvdyB3aGVuIHNvdXJjZSBhbmQgZGVzdCBhcmUgbm90IGJvdGggOC1ieXRlIGFsaWduZWQKICAqLwogI2lmZGVmIENPTkZJR19YODZfSU5URUxfVVNFUkNPUFkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCA4NDIxMGM0Li44Y2M2ODczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0xODgsMTYgKzE4OCwxNiBAQAogZXh0ZXJuIGxvbmcgX19jb3B5X3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCiAJCQkJdW5zaWduZWQgc2l6ZSwgaW50IHplcm9yZXN0KTsKIAotc3RhdGljIGlubGluZSBpbnQgX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKLQkJCQkJICAgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50CitfX2NvcHlfZnJvbV91c2VyX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQogewogCW1pZ2h0X3NsZWVwKCk7CiAJcmV0dXJuIF9fY29weV91c2VyX25vY2FjaGUoZHN0LCBzcmMsIHNpemUsIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodm9pZCAqZHN0LAotCQkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCi0JCQkJCQkgICAgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50CitfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLAorCQkJCSAgdW5zaWduZWQgc2l6ZSkKIHsKIAlyZXR1cm4gX19jb3B5X3VzZXJfbm9jYWNoZShkc3QsIHNyYywgc2l6ZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGEwMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9BU01fWDg2X1VWX1VWX0gKKyNkZWZpbmUgX0FTTV9YODZfVVZfVVZfSAorCitlbnVtIHV2X3N5c3RlbV90eXBlIHtVVl9OT05FLCBVVl9MRUdBQ1lfQVBJQywgVVZfWDJBUElDLCBVVl9OT05fVU5JUVVFX0FQSUN9OworCitzdHJ1Y3QgY3B1bWFzazsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKyNpZmRlZiBDT05GSUdfWDg2X1VWCisKK2V4dGVybiBlbnVtIHV2X3N5c3RlbV90eXBlIGdldF91dl9zeXN0ZW1fdHlwZSh2b2lkKTsKK2V4dGVybiBpbnQgaXNfdXZfc3lzdGVtKHZvaWQpOworZXh0ZXJuIHZvaWQgdXZfY3B1X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1dl9zeXN0ZW1faW5pdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdXZfZmx1c2hfdGxiX290aGVycyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHZhLAorCQkJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCisjZWxzZQkvKiBYODZfVVYgKi8KKworc3RhdGljIGlubGluZSBlbnVtIHV2X3N5c3RlbV90eXBlIGdldF91dl9zeXN0ZW1fdHlwZSh2b2lkKSB7IHJldHVybiBVVl9OT05FOyB9CitzdGF0aWMgaW5saW5lIGludCBpc191dl9zeXN0ZW0odm9pZCkJeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHV2X2NwdV9pbml0KHZvaWQpCXsgfQorc3RhdGljIGlubGluZSB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpCXsgfQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqCit1dl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGludCBjcHUpCit7IHJldHVybiBjcHVtYXNrOyB9CisKKyNlbmRpZgkvKiBYODZfVVYgKi8KKworI2VuZGlmCS8qIF9BU01fWDg2X1VWX1VWX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKaW5kZXggNTA0MjNjNy4uOWIwZTYxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKQEAgLTMyNSw3ICszMjUsNiBAQAogI2RlZmluZSBjcHViaXRfaXNzZXQoY3B1LCBiYXVfbG9jYWxfY3B1bWFzaykgXAogCXRlc3RfYml0KChjcHUpLCAoYmF1X2xvY2FsX2NwdW1hc2spLmJpdHMpCiAKLWV4dGVybiBpbnQgdXZfZmx1c2hfdGxiX290aGVycyhjcHVtYXNrX3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIHV2X2JhdV9tZXNzYWdlX2ludHIxKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXZfYmF1X3RpbWVvdXRfaW50cjEodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMTAwZjMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMQotICoKLSAqIEF1dGhvcjogSi5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQotICoKLSAqIFN0YW5kYXJkIGluY2x1ZGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOQ1IgVm95YWdlciBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCi0vKiBUaGUgZWlnaHQgQ1BJIHZlY3RvcnMuICBUbyBhY3RpdmF0ZSBhIENQSSwgeW91IHdyaXRlIGEgYml0IG1hc2sKLSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb2Nlc3NvciBzZXQgdG8gYmUgaW50ZXJydXB0ZWQgaW50byB0aGUKLSAqIHJlbGV2YW50IHJlZ2lzdGVyLiAgVGhhdCBzZXQgb2YgQ1BVcyB3aWxsIHRoZW4gYmUgaW50ZXJydXB0ZWQgd2l0aAotICogdGhlIENQSSAqLwotc3RhdGljIGNvbnN0IGludCBWSUNfQ1BJX1JlZ2lzdGVyc1tdID0KLQl7MHhGQzAwLCAweEZDMDEsIDB4RkMwOCwgMHhGQzA5LAotCSAweEZDMTAsIDB4RkMxMSwgMHhGQzE4LCAweEZDMTkgfTsKLQotI2RlZmluZSBWSUNfUFJPQ19XSE9fQU1fSQkJMHhmYzI5Ci0jCWRlZmluZQlRVUFEX0lERU5USUZJRVIJCTB4QzAKLSMJZGVmaW5lICBFSUdIVF9TTE9UX0lERU5USUZJRVIJMHhFMAotI2RlZmluZSBRSUNfRVhURU5ERURfUFJPQ0VTU09SX1NFTEVDVAkweEZDNzIKLSNkZWZpbmUgVklDX0NQSV9CQVNFX1JFR0lTVEVSCQkweEZDNDEKLSNkZWZpbmUgVklDX1BST0NFU1NPUl9JRAkJMHhGQzIxCi0jCWRlZmluZSBWSUNfQ1BVX01BU1FVRVJBREVfRU5BQkxFIDB4OAotCi0jZGVmaW5lIFZJQ19DTEFJTV9SRUdJU1RFUl8wCQkweEZDMzgKLSNkZWZpbmUgVklDX0NMQUlNX1JFR0lTVEVSXzEJCTB4RkMzOQotI2RlZmluZSBWSUNfUkVESVJFQ1RfUkVHSVNURVJfMAkJMHhGQzYwCi0jZGVmaW5lIFZJQ19SRURJUkVDVF9SRUdJU1RFUl8xCQkweEZDNjEKLSNkZWZpbmUgVklDX1BSSU9SSVRZX1JFR0lTVEVSCQkweEZDMjAKLQotI2RlZmluZSBWSUNfUFJJTUFSWV9NQ19CQVNFCQkweEZDNDgKLSNkZWZpbmUgVklDX1NFQ09OREFSWV9NQ19CQVNFCQkweEZDNDkKLQotI2RlZmluZSBRSUNfUFJPQ0VTU09SX0lECQkweEZDNzEKLSMJZGVmaW5lCVFJQ19DUFVJRF9FTkFCTEUJMHgwOAotCi0jZGVmaW5lIFFJQ19WSUNfQ1BJX0JBU0VfUkVHSVNURVIJMHhGQzc5Ci0jZGVmaW5lIFFJQ19DUElfQkFTRV9SRUdJU1RFUgkJMHhGQzdBCi0KLSNkZWZpbmUgUUlDX01BU0tfUkVHSVNURVIwCQkweEZDODAKLS8qIE5PVEU6IHRoZXNlIGFyZSBtYXNrZWQgaGlnaCwgZW5hYmxlZCBsb3cgKi8KLSMJZGVmaW5lIFFJQ19QRVJGX1RJTUVSCQkweDAxCi0jCWRlZmluZSBRSUNfTFBFCQkJMHgwMgotIwlkZWZpbmUgUUlDX1NZU19JTlQJCTB4MDQKLSMJZGVmaW5lIFFJQ19DTU5fSU5UCQkweDA4Ci0vKiBhdCB0aGUgbW9tZW50LCBqdXN0IGVuYWJsZSBDTU5fSU5ULCBkaXNhYmxlIFNZU19JTlQgKi8KLSMJZGVmaW5lIFFJQ19ERUZBVUxUX01BU0swCSh+KFFJQ19DTU5fSU5UIC8qIHwgVklDX1NZU19JTlQgKi8pKQotI2RlZmluZSBRSUNfTUFTS19SRUdJU1RFUjEJCTB4RkM4MQotIwlkZWZpbmUgUUlDX0JPT1RfQ1BJX01BU0sJMHhGRQotLyogRW5hYmxlIENQSSdzIDEtNiBpbmNsdXNpdmUgKi8KLSMJZGVmaW5lIFFJQ19DUElfRU5BQkxFCQkweDgxCi0KLSNkZWZpbmUgUUlDX0lOVEVSUlVQVF9DTEVBUjAJCTB4RkM4QQotI2RlZmluZSBRSUNfSU5URVJSVVBUX0NMRUFSMQkJMHhGQzhCCi0KLS8qIHRoaXMgaXMgd2hlcmUgd2UgcGxhY2UgdGhlIENQSSB2ZWN0b3JzICovCi0jZGVmaW5lIFZJQ19ERUZBVUxUX0NQSV9CQVNFCQkweEMwCi0vKiB0aGlzIGlzIHdoZXJlIHdlIHBsYWNlIHRoZSBRSUMgQ1BJIHZlY3RvcnMgKi8KLSNkZWZpbmUgUUlDX0RFRkFVTFRfQ1BJX0JBU0UJCTB4RDAKLQotI2RlZmluZSBWSUNfQk9PVF9JTlRFUlJVUFRfTUFTSwkJMHhmZQotCi1leHRlcm4gdm9pZCBzbXBfdmljX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaAppbmRleCA1OTM2MzYyLi5lMGY5YWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCXdybXNybChNU1JfVk1fSFNBVkVfUEEsIDApOwogCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0Jd3Jtc3JsKE1TUl9FRkVSLCBlZmVyICYgfk1TUl9FRkVSX1NWTUVfTUFTSyk7CisJd3Jtc3JsKE1TUl9FRkVSLCBlZmVyICYgfkVGRVJfU1ZNRSk7CiB9CiAKIC8qKiBNYWtlcyBzdXJlIFNWTSBpcyBkaXNhYmxlZCwgaWYgaXQgaXMgc3VwcG9ydGVkIG9uIHRoZSBDUFUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKaW5kZXggZDAyMzhlNi4uNDk4Zjk0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKQEAgLTI3MCw4ICsyNzAsOSBAQAogCiAjZGVmaW5lIElOVFJfVFlQRV9FWFRfSU5UUiAgICAgICAgICAgICAgKDAgPDwgOCkgLyogZXh0ZXJuYWwgaW50ZXJydXB0ICovCiAjZGVmaW5lIElOVFJfVFlQRV9OTUlfSU5UUgkJKDIgPDwgOCkgLyogTk1JICovCi0jZGVmaW5lIElOVFJfVFlQRV9FWENFUFRJT04gICAgICAgICAgICAgKDMgPDwgOCkgLyogcHJvY2Vzc29yIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04JKDMgPDwgOCkgLyogcHJvY2Vzc29yIGV4Y2VwdGlvbiAqLwogI2RlZmluZSBJTlRSX1RZUEVfU09GVF9JTlRSICAgICAgICAgICAgICg0IDw8IDgpIC8qIHNvZnR3YXJlIGludGVycnVwdCAqLworI2RlZmluZSBJTlRSX1RZUEVfU09GVF9FWENFUFRJT04JKDYgPDwgOCkgLyogc29mdHdhcmUgZXhjZXB0aW9uICovCiAKIC8qIEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyBmbGFncy4gKi8KICNkZWZpbmUgR1VFU1RfSU5UUl9TVEFURV9TVEkJCTB4MDAwMDAwMDEKQEAgLTMxMSw3ICszMTIsNyBAQAogI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX1RZUEUgICAgICAgICAgIDB4MTAgICAgLyogNCwgZGlyZWN0aW9uIG9mIGFjY2VzcyAqLwogI2RlZmluZSBUWVBFX01PVl9UT19EUiAgICAgICAgICAgICAgICAgICgwIDw8IDQpCiAjZGVmaW5lIFRZUEVfTU9WX0ZST01fRFIgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19SRUcgICAgICAgICAgICAweGYwMCAgIC8qIDExOjgsIGdlbmVyYWwgcHVycG9zZSByZWcuICovCisjZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfUkVHKGVxKSAgICAgICAgKCgoZXEpID4+IDgpICYgMHhmKSAvKiAxMTo4LCBnZW5lcmFsIHB1cnBvc2UgcmVnLiAqLwogCiAKIC8qIHNlZ21lbnQgQVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZveWFnZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZveWFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlNjQ3My4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92b3lhZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotLyogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDEKLSAqCi0gKiBBdXRob3I6IEouRS5KLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20KLSAqCi0gKiBTdGFuZGFyZCBpbmNsdWRlIGRlZmluaXRpb25zIGZvciB0aGUgTkNSIFZveWFnZXIgc3lzdGVtICovCi0KLSN1bmRlZglWT1lBR0VSX0RFQlVHCi0jdW5kZWYJVk9ZQUdFUl9DQVRfREVCVUcKLQotI2lmZGVmIFZPWUFHRVJfREVCVUcKLSNkZWZpbmUgVkRFQlVHKHgpCXByaW50ayB4Ci0jZWxzZQotI2RlZmluZSBWREVCVUcoeCkKLSNlbmRpZgotCi0vKiBUaGVyZSBhcmUgdGhyZWUgbGV2ZWxzIG9mIHZveWFnZXIgbWFjaGluZTogMyw0IGFuZCA1LiBUaGUgcnVsZSBpcwotICogaWYgaXQncyBsZXNzIHRoYW4gMzQzNSBpdCdzIGEgTGV2ZWwgMyBleGNlcHQgZm9yIGEgMzM2MCB3aGljaCBpcwotICogYSBsZXZlbCA0LiAgQSAzNDM1IG9yIGFib3ZlIGlzIGEgTGV2ZWwgNSAqLwotI2RlZmluZSBWT1lBR0VSX0xFVkVMNV9BTkRfQUJPVkUJMHgzNDM1Ci0jZGVmaW5lIFZPWUFHRVJfTEVWRUw0CQkJMHgzMzYwCi0KLS8qIFRoZSBMNCBESU5PIEFTSUMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9ESU5PCQkJMHg0MwotCi0vKiB2b3lhZ2VyIHBvcnRzIGluIHN0YW5kYXJkIEkvTyBzcGFjZSAqLwotI2RlZmluZSBWT1lBR0VSX01DX1NFVFVQCTB4OTYKLQotCi0jZGVmaW5lCVZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUCQkJMHg5NwotIwlkZWZpbmUgVk9ZQUdFUl9DQVRfREVTRUxFQ1QJCTB4ZmYKLSNkZWZpbmUgVk9ZQUdFUl9TU1BCX1JFTE9DQVRJT05fUE9SVAkJMHg5OAotCi0vKiBWYWxpZCBDQVQgY29udHJvbGxlciBjb21tYW5kcyAqLwotLyogc3RhcnQgaW5zdHJ1Y3Rpb24gcmVnaXN0ZXIgY3ljbGUgKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfSVJDWUMJCQkweDAxCi0vKiBzdGFydCBkYXRhIHJlZ2lzdGVyIGN5Y2xlICovCi0jZGVmaW5lIFZPWUFHRVJfQ0FUX0RSQ1lDCQkJMHgwMgotLyogbW92ZSB0byBleGVjdXRlIHN0YXRlICovCi0jZGVmaW5lIFZPWUFHRVJfQ0FUX1JVTgkJCQkweDBGCi0vKiBlbmQgb3BlcmF0aW9uICovCi0jZGVmaW5lIFZPWUFHRVJfQ0FUX0VORAkJCQkweDgwCi0vKiBob2xkIGluIGlkbGUgc3RhdGUgKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfSE9MRAkJCTB4OTAKLS8qIHNpbmdsZSBzdGVwIGFuICJpbnRlc3QiIHZlY3RvciAqLwotI2RlZmluZSBWT1lBR0VSX0NBVF9TVEVQCQkJMHhFMAotLyogcmV0dXJuIGNhdCBjb250cm9sbGVyIHRvIENMRU1TT04gbW9kZSAqLwotI2RlZmluZSBWT1lBR0VSX0NBVF9DTEVNU09OCQkJMHhGRgotCi0vKiB0aGUgZGVmYXVsdCBjYXQgY29tbWFuZCBoZWFkZXIgKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfSEVBREVSCQkJMHg3RgotCi0vKiB0aGUgcmFuZ2Ugb2YgcG9zc2libGUgQ0FUIG1vZHVsZSBpZHMgaW4gdGhlIHN5c3RlbSAqLwotI2RlZmluZSBWT1lBR0VSX01JTl9NT0RVTEUJCQkweDEwCi0jZGVmaW5lIFZPWUFHRVJfTUFYX01PRFVMRQkJCTB4MWYKLQotLyogVGhlIHZveWFnZXIgcmVnaXN0ZXJzIHBlciBhc2ljICovCi0jZGVmaW5lIFZPWUFHRVJfQVNJQ19JRF9SRUcJCQkweDAwCi0jZGVmaW5lIFZPWUFHRVJfQVNJQ19UWVBFX1JFRwkJCTB4MDEKLS8qIHRoZSBzdWIgYWRkcmVzcyByZWdpc3RlcnMgY2FuIGJlIG1hZGUgYXV0byBpbmNyZW1lbnRpbmcgb24gcmVhZHMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9BVVRPX0lOQ19SRUcJCQkweDAyCi0jCWRlZmluZSBWT1lBR0VSX0FVVE9fSU5DCQkJMHgwNAotIwlkZWZpbmUgVk9ZQUdFUl9OT19BVVRPX0lOQwkJMHhmYgotI2RlZmluZSBWT1lBR0VSX1NVQkFERFJEQVRBCQkJMHgwMwotI2RlZmluZSBWT1lBR0VSX1NDQU5QQVRICQkJMHgwNQotIwlkZWZpbmUgVk9ZQUdFUl9DT05ORUNUX0FTSUMJCTB4MDEKLSMJZGVmaW5lIFZPWUFHRVJfRElTQ09OTkVDVF9BU0lDCQkweGZlCi0jZGVmaW5lIFZPWUFHRVJfU1VCQUREUkxPCQkJMHgwNgotI2RlZmluZSBWT1lBR0VSX1NVQkFERFJISQkJCTB4MDcKLSNkZWZpbmUgVk9ZQUdFUl9TVUJNT0RTRUxFQ1QJCQkweDA4Ci0jZGVmaW5lIFZPWUFHRVJfU1VCTU9EUFJFU0VOVAkJCTB4MDkKLQotI2RlZmluZSBWT1lBR0VSX1NVQkFERFJfTE8JCQkweGZmCi0jZGVmaW5lIFZPWUFHRVJfU1VCQUREUl9ISQkJCTB4ZmZmZgotCi0vKiB0aGUgbWF4aW11bSBzaXplIG9mIGEgc2NhbiBwYXRoIC0tIHVzZWQgdG8gZm9ybSBpbnN0cnVjdGlvbnMgKi8KLSNkZWZpbmUgVk9ZQUdFUl9NQVhfU0NBTl9QQVRICQkJMHgxMDAKLS8qIHRoZSBiaWdnZXN0IHBvc3NpYmxlIHJlZ2lzdGVyIHNpemUgKGluIGJ5dGVzKSAqLwotI2RlZmluZSBWT1lBR0VSX01BWF9SRUdfU0laRQkJCTQKLQotLyogVG90YWwgbnVtYmVyIG9mIHBvc3NpYmxlIG1vZHVsZXMgKGluY2x1ZGluZyBzdWJtb2R1bGVzKSAqLwotI2RlZmluZSBWT1lBR0VSX01BWF9NT0RVTEVTCQkJMTYKLS8qIExhcmdlc3QgbnVtYmVyIG9mIGFzaWNzIHBlciBtb2R1bGUgKi8KLSNkZWZpbmUgVk9ZQUdFUl9NQVhfQVNJQ1NfUEVSX01PRFVMRQkJNwotCi0vKiB0aGUgQ0FUIGFzaWMgb2YgZWFjaCBtb2R1bGUgaXMgYWx3YXlzIHRoZSBmaXJzdCBvbmUgKi8KLSNkZWZpbmUgVk9ZQUdFUl9DQVRfSUQJCQkJMAotI2RlZmluZSBWT1lBR0VSX1BTSQkJCQkweDFhCi0KLS8qIHZveWFnZXIgaW5zdHJ1Y3Rpb24gb3BlcmF0aW9ucyBhbmQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFZPWUFHRVJfUkVBRF9DT05GSUcJCQkweDEKLSNkZWZpbmUgVk9ZQUdFUl9XUklURV9DT05GSUcJCQkweDIKLSNkZWZpbmUgVk9ZQUdFUl9CWVBBU1MJCQkJMHhmZgotCi10eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2FzaWMgewotCV9fdTgJYXNpY19hZGRyOwkvKiBBU0lDIGFkZHJlc3M7IExldmVsIDQgKi8KLQlfX3U4CWFzaWNfdHlwZTsgICAgICAvKiBBU0lDIHR5cGUgKi8KLQlfX3U4CWFzaWNfaWQ7CS8qIEFTSUMgaWQgKi8KLQlfX3U4CWp0YWdfaWRbNF07CS8qIEpUQUcgaWQgKi8KLQlfX3U4CWFzaWNfbG9jYXRpb247CS8qIExvY2F0aW9uIHdpdGhpbiBzY2FuIHBhdGg7IHN0YXJ0IHcvIDAgKi8KLQlfX3U4CWJpdF9sb2NhdGlvbjsJLyogTG9jYXRpb24gd2l0aGluIGJpdCBzdHJlYW07IHN0YXJ0IHcvIDAgKi8KLQlfX3U4CWlyZWdfbGVuZ3RoOwkvKiBJbnN0cnVjdGlvbiByZWdpc3RlciBsZW5ndGggKi8KLQlfX3UxNglzdWJhZGRyOwkvKiBBbW91bnQgb2Ygc3ViIGFkZHJlc3Mgc3BhY2UgKi8KLQlzdHJ1Y3Qgdm95YWdlcl9hc2ljICpuZXh0OwkvKiBOZXh0IGFzaWMgaW4gbGlua2VkIGxpc3QgKi8KLX0gdm95YWdlcl9hc2ljX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHZveWFnZXJfbW9kdWxlIHsKLQlfX3U4CW1vZHVsZV9hZGRyOwkJLyogTW9kdWxlIGFkZHJlc3MgKi8KLQlfX3U4CXNjYW5fcGF0aF9jb25uZWN0ZWQ7CS8qIFNjYW4gcGF0aCBjb25uZWN0ZWQgKi8KLQlfX3UxNiAgIGVlX3NpemU7CQkvKiBTaXplIG9mIHRoZSBFRVBST00gKi8KLQlfX3UxNiAgIG51bV9hc2ljczsJCS8qIE51bWJlciBvZiBBc2ljcyAqLwotCV9fdTE2ICAgaW5zdF9iaXRzOwkJLyogSW5zdHJ1Y3Rpb24gYml0cyBpbiB0aGUgc2NhbiBwYXRoICovCi0JX191MTYgICBsYXJnZXN0X3JlZzsJCS8qIExhcmdlc3QgcmVnaXN0ZXIgaW4gdGhlIHNjYW4gcGF0aCAqLwotCV9fdTE2ICAgc21hbGxlc3RfcmVnOwkJLyogU21hbGxlc3QgcmVnaXN0ZXIgaW4gdGhlIHNjYW4gcGF0aCAqLwotCXZveWFnZXJfYXNpY190ICAgKmFzaWM7CQkvKiBGaXJzdCBBU0lDIGluIHNjYW4gcGF0aCAoQ0FUX0kpICovCi0Jc3RydWN0ICAgdm95YWdlcl9tb2R1bGUgKnN1Ym1vZHVsZTsJLyogU3VibW9kdWxlIHBvaW50ZXIgKi8KLQlzdHJ1Y3QgICB2b3lhZ2VyX21vZHVsZSAqbmV4dDsJCS8qIE5leHQgbW9kdWxlIGluIGxpbmtlZCBsaXN0ICovCi19IHZveWFnZXJfbW9kdWxlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHZveWFnZXJfZWVwcm9tX2hkciB7Ci0JIF9fdTggIG1vZHVsZV9pZFs0XTsKLQkgX191OCAgdmVyc2lvbl9pZDsKLQkgX191OCAgY29uZmlnX2lkOwotCSBfX3UxNiBib3VuZHJ5X2lkOwkvKiBib3VuZGFyeSBzY2FuIGlkICovCi0JIF9fdTE2IGVlX3NpemU7CQkvKiBzaXplIG9mIEVFUFJPTSAqLwotCSBfX3U4ICBhc3NlbWJseVsxMV07CS8qIGFzc2VtYmx5ICMgKi8KLQkgX191OCAgYXNzZW1ibHlfcmV2OwkvKiBhc3NlbWJseSByZXYgKi8KLQkgX191OCAgdHJhY2VyWzRdOwkvKiB0cmFjZXIgbnVtYmVyICovCi0JIF9fdTE2IGFzc2VtYmx5X2Nrc3VtOwkvKiBhc20gY2hlY2tzdW0gKi8KLQkgX191MTYgcG93ZXJfY29uc3VtcDsJLyogcHdyIHJlcXVpcmVtZW50cyAqLwotCSBfX3UxNiBudW1fYXNpY3M7CS8qIG51bWJlciBvZiBhc2ljcyAqLwotCSBfX3UxNiBiaXN0X3RpbWU7CS8qIG1pbi4gYmlzdCB0aW1lICovCi0JIF9fdTE2IGVycl9sb2dfb2Zmc2V0OwkvKiBlcnJvciBsb2cgb2Zmc2V0ICovCi0JIF9fdTE2IHNjYW5fcGF0aF9vZmZzZXQ7Lyogc2NhbiBwYXRoIG9mZnNldCAqLwotCSBfX3UxNiBjY3Rfb2Zmc2V0OwotCSBfX3UxNiBsb2dfbGVuZ3RoOwkvKiBsZW5ndGggb2YgZXJyIGxvZyAqLwotCSBfX3UxNiB4c3VtX2VuZDsJLyogb2Zmc2V0IHRvIGVuZCBvZgotCQkJCSAgIGNoZWNrc3VtICovCi0JIF9fdTggIHJlc2VydmVkWzRdOwotCSBfX3U4ICBzZmxhZzsJCS8qIHN0YXJ0aW5nIHNlbnRpbmFsICovCi0JIF9fdTggIHBhcnRfbnVtYmVyWzEzXTsJLyogcHJvbSBwYXJ0IG51bWJlciAqLwotCSBfX3U4ICB2ZXJzaW9uWzEwXTsJLyogdmVyc2lvbiBudW1iZXIgKi8KLQkgX191OCAgc2lnbmF0dXJlWzhdOwotCSBfX3UxNiBlZXByb21fY2hrc3VtOwotCSBfX3UzMiAgZGF0YV9zdGFtcF9vZmZzZXQ7Ci0JIF9fdTggIGVmbGFnIDsJCSAvKiBlbmRpbmcgc2VudGluYWwgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdm95YWdlcl9lcHJvbV9oZHJfdDsKLQotCi0KLSNkZWZpbmUgVk9ZQUdFUl9FUFJPTV9TSVpFX09GRlNFVAkJCQlcCi0JKChfX3UxNikoJigoKHZveWFnZXJfZXByb21faGRyX3QgKikwKS0+ZWVfc2l6ZSkpKQotI2RlZmluZSBWT1lBR0VSX1hTVU1fRU5EX09GRlNFVAkJMHgyYQotCi0vKiB0aGUgZm9sbG93aW5nIHRocmVlIGRlZmluaXRpb25zIGFyZSBmb3IgaW50ZXJuYWwgdGFibGUgbGF5b3V0cwotICogaW4gdGhlIG1vZHVsZSBFUFJPTXMuICBXZSByZWFsbHkgb25seSBjYXJlIGFib3V0IHRoZSBJRHMgYW5kCi0gKiBvZmZzZXRzICovCi10eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX3NwX3RhYmxlIHsKLQlfX3U4IGFzaWNfaWQ7Ci0JX191OCBieXBhc3NfZmxhZzsKLQlfX3UxNiBhc2ljX2RhdGFfb2Zmc2V0OwotCV9fdTE2IGNvbmZpZ19kYXRhX29mZnNldDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdm95YWdlcl9zcF90YWJsZV90OwotCi10eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2p0YWdfdGFibGUgewotCV9fdTggaWNvZGVbNF07Ci0JX191OCBydW5iaXN0WzRdOwotCV9fdTggaW50ZXN0WzRdOwotCV9fdTggc2FtcF9wcmVsZFs0XTsKLQlfX3U4IGlyZWdfbGVuOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2b3lhZ2VyX2p0dF90OwotCi10eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2FzaWNfZGF0YV90YWJsZSB7Ci0JX191OCBqdGFnX2lkWzRdOwotCV9fdTE2IGxlbmd0aF9ic3I7Ci0JX191MTYgbGVuZ3RoX2Jpc3RfcmVnOwotCV9fdTMyIGJpc3RfY2xrOwotCV9fdTE2IHN1YmFkZHJfYml0czsKLQlfX3UxNiBzZWVkX2JpdHM7Ci0JX191MTYgc2lnX2JpdHM7Ci0JX191MTYganRhZ19vZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZveWFnZXJfYXRfdDsKLQotLyogVm95YWdlciBJbnRlcnJ1cHQgQ29udHJvbGxlciAoVklDKSByZWdpc3RlcnMgKi8KLQotLyogQmFzZSB0byBhZGQgdG8gQ3Jvc3MgUHJvY2Vzc29yIEludGVycnVwdHMgKENQSXMpIHdoZW4gdHJpZ2dlcmluZwotICogdGhlIENQVSBJUlEgbGluZSAqLwotLyogcmVnaXN0ZXIgZGVmaW5lcyBmb3IgdGhlIFdDQklDcyAob25lIHBlciBwcm9jZXNzb3IpICovCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUMwCTB4NDEJCS8qIGJ1cyBBIG5vZGUgUDEgcHJvY2Vzc29yIDAgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzEJMHg0OQkJLyogYnVzIEEgbm9kZSBQMSBwcm9jZXNzb3IgMSAqLwotI2RlZmluZSBWT1lBR0VSX1dDQklDMgkweDUxCQkvKiBidXMgQSBub2RlIFAyIHByb2Nlc3NvciAwICovCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUMzCTB4NTkJCS8qIGJ1cyBBIG5vZGUgUDIgcHJvY2Vzc29yIDEgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzQJMHg2MQkJLyogYnVzIEIgbm9kZSBQMSBwcm9jZXNzb3IgMCAqLwotI2RlZmluZSBWT1lBR0VSX1dDQklDNQkweDY5CQkvKiBidXMgQiBub2RlIFAxIHByb2Nlc3NvciAxICovCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUM2CTB4NzEJCS8qIGJ1cyBCIG5vZGUgUDIgcHJvY2Vzc29yIDAgKi8KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzcJMHg3OQkJLyogYnVzIEIgbm9kZSBQMiBwcm9jZXNzb3IgMSAqLwotCi0KLS8qIHRvcCBvZiBtZW1vcnkgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUNfVE9NX0wJMHg0Ci0jZGVmaW5lIFZPWUFHRVJfV0NCSUNfVE9NX0gJMHg1Ci0KLS8qIHJlZ2lzdGVyIGRlZmluZXMgZm9yIFZveWFnZXIgTWVtb3J5IENvbnRvbCAoVk1DKQotICogdGhlc2UgYXJlIHByZXNlbnQgb24gTDQgbWFjaGluZXMgb25seSAqLwotI2RlZmluZQlWT1lBR0VSX1ZNQzEJCTB4ODEKLSNkZWZpbmUgVk9ZQUdFUl9WTUMyCQkweDkxCi0jZGVmaW5lIFZPWUFHRVJfVk1DMwkJMHhhMQotI2RlZmluZSBWT1lBR0VSX1ZNQzQJCTB4YjEKLQotLyogVk1DIFBvcnRzICovCi0jZGVmaW5lIFZPWUFHRVJfVk1DX01FTU9SWV9TRVRVUAkweDkKLSMJZGVmaW5lIFZNQ19JbnRlcmxlYXZpbmcJCTB4MDEKLSMJZGVmaW5lIFZNQ180V2F5CQkJMHgwMgotIwlkZWZpbmUgVk1DX0V2ZW5DYWNoZUxpbmVzCTB4MDQKLSMJZGVmaW5lIFZNQ19IaWdoTGluZQkJMHgwOAotIwlkZWZpbmUgVk1DX1N0YXJ0MF9FbmFibGUJMHgyMAotIwlkZWZpbmUgVk1DX1N0YXJ0MV9FbmFibGUJMHg0MAotIwlkZWZpbmUgVk1DX1ZyZW1hcAkJMHg4MAotI2RlZmluZSBWT1lBR0VSX1ZNQ19CQU5LX0RFTlNJVFkJMHhhCi0jCWRlZmluZQlWTUNfQkFOS19FTVBUWQkJMAotIwlkZWZpbmUJVk1DX0JBTktfNE1CCQkxCi0jCWRlZmluZQlWTUNfQkFOS18xNk1CCQkyCi0jCWRlZmluZQlWTUNfQkFOS182NE1CCQkzCi0jCWRlZmluZQlWTUNfQkFOSzBfTUFTSwkJMHgwMwotIwlkZWZpbmUJVk1DX0JBTksxX01BU0sJCTB4MEMKLSMJZGVmaW5lCVZNQ19CQU5LMl9NQVNLCQkweDMwCi0jCWRlZmluZQlWTUNfQkFOSzNfTUFTSwkJMHhDMAotCi0vKiBNYWdlbGxhbiBNZW1vcnkgQ29udHJvbGxlciAoTU1DKSBkZWZpbmVzIC0gcHJlc2VudCBvbiBMNSAqLwotI2RlZmluZSBWT1lBR0VSX01NQ19BU0lDX0lECQkxCi0vKiB0aGUgdHdvIG1lbW9yeSBtb2R1bGVzIGNvcnJlc3BvbmRpbmcgdG8gbWVtb3J5IGNhcmRzIGluIHRoZSBzeXN0ZW0gKi8KLSNkZWZpbmUgVk9ZQUdFUl9NTUNfTUVNT1JZMF9NT0RVTEUJMHgxNAotI2RlZmluZSBWT1lBR0VSX01NQ19NRU1PUlkxX01PRFVMRQkweDE1Ci0vKiB0aGUgTWFnZWxsYW4gTWVtb3J5IEFkZHJlc3MgKE1NQSkgZGVmaW5lcyAqLwotI2RlZmluZSBWT1lBR0VSX01NQV9BU0lDX0lECQkyCi0KLS8qIFN1Ym1vZHVsZSBudW1iZXIgZm9yIHRoZSBRdWFkIEJhc2Vib2FyZCAqLwotI2RlZmluZSBWT1lBR0VSX1FVQURfQkFTRUJPQVJECQkxCi0KLS8qIEFTSUMgZGVmaW5lcyBmb3IgdGhlIFF1YWQgQmFzZWJvYXJkICovCi0jZGVmaW5lIFZPWUFHRVJfUVVBRF9RREFUQTAJCTEKLSNkZWZpbmUgVk9ZQUdFUl9RVUFEX1FEQVRBMQkJMgotI2RlZmluZSBWT1lBR0VSX1FVQURfUUFCQwkJMwotCi0vKiBVc2VmdWwgYXJlYXMgaW4gZXh0ZW5kZWQgQ01PUyAqLwotI2RlZmluZSBWT1lBR0VSX1BST0NFU1NPUl9QUkVTRU5UX01BU0sJMHg4OGEKLSNkZWZpbmUgVk9ZQUdFUl9NRU1PUllfQ0xJQ0tNQVAJCTB4YTIzCi0jZGVmaW5lIFZPWUFHRVJfRFVNUF9MT0NBVElPTgkJMHhiMWEKLQotLyogU1VTIEluIENvbnRyb2wgYml0IC0gdXNlZCB0byB0ZWxsIFNVUyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gYmUKLSAqIGJhYnlzYXQgYW55bW9yZSAqLwotI2RlZmluZSBWT1lBR0VSX1NVU19JTl9DT05UUk9MX1BPUlQJMHgzZmYKLSMJZGVmaW5lIFZPWUFHRVJfSU5fQ09OVFJPTF9GTEFHCTB4ODAKLQotLyogVm95YWdlciBQU0kgZGVmaW5lcyAqLwotI2RlZmluZSBWT1lBR0VSX1BTSV9TVEFUVVNfUkVHCQkweDA4Ci0jCWRlZmluZSBQU0lfRENfRkFJTAkJMHgwMQotIwlkZWZpbmUgUFNJX01PTgkJCTB4MDIKLSMJZGVmaW5lIFBTSV9GQVVMVAkJMHgwNAotIwlkZWZpbmUgUFNJX0FMQVJNCQkweDA4Ci0jCWRlZmluZSBQU0lfQ1VSUkVOVAkJMHgxMAotIwlkZWZpbmUgUFNJX0RWTQkJCTB4MjAKLSMJZGVmaW5lIFBTSV9QU0NGQVVMVAkJMHg0MAotIwlkZWZpbmUgUFNJX1NUQVRfQ0hHCQkweDgwCi0KLSNkZWZpbmUgVk9ZQUdFUl9QU0lfU1VQUExZX1JFRwkJMHg4MDAwCi0JLyogcmVhZCAqLwotIwlkZWZpbmUgUFNJX0ZBSUxfREMJCTB4MDEKLSMJZGVmaW5lIFBTSV9GQUlMX0FDCQkweDAyCi0jCWRlZmluZSBQU0lfTU9OX0lOVAkJMHgwNAotIwlkZWZpbmUgUFNJX1NXSVRDSF9PRkYJCTB4MDgKLSMJZGVmaW5lIFBTSV9IWF9PRkYJCTB4MTAKLSMJZGVmaW5lIFBTSV9TRUNVUklUWQkJMHgyMAotIwlkZWZpbmUgUFNJX0NNT1NfQkFUVF9MT1cJMHg0MAotIwlkZWZpbmUgUFNJX0NNT1NfQkFUVF9GQUlMCTB4ODAKLQkvKiB3cml0ZSAqLwotIwlkZWZpbmUgUFNJX0NMUl9TV0lUQ0hfT0ZGCTB4MTMKLSMJZGVmaW5lIFBTSV9DTFJfSFhfT0ZGCQkweDE0Ci0jCWRlZmluZSBQU0lfQ0xSX0NNT1NfQkFUVF9GQUlMCTB4MTcKLQotI2RlZmluZSBWT1lBR0VSX1BTSV9NQVNLCQkweDgwMDEKLSMJZGVmaW5lIFBTSV9NQVNLX01BU0sJCTB4MTAKLQotI2RlZmluZSBWT1lBR0VSX1BTSV9BQ19GQUlMX1JFRwkJMHg4MDA0Ci0jZGVmaW5lCUFDX0ZBSUxfU1RBVF9DSEFOR0UJCTB4ODAKLQotI2RlZmluZSBWT1lBR0VSX1BTSV9HRU5FUkFMX1JFRwkJMHg4MDA3Ci0JLyogcmVhZCAqLwotIwlkZWZpbmUgUFNJX1NXSVRDSF9PTgkJMHgwMQotIwlkZWZpbmUgUFNJX1NXSVRDSF9FTkFCTEVECTB4MDIKLSMJZGVmaW5lIFBTSV9BTEFSTV9FTkFCTEVECTB4MDgKLSMJZGVmaW5lIFBTSV9TRUNVUkVfRU5BQkxFRAkweDEwCi0jCWRlZmluZSBQU0lfQ09MRF9SRVNFVAkJMHgyMAotIwlkZWZpbmUgUFNJX0NPTERfU1RBUlQJCTB4ODAKLQkvKiB3cml0ZSAqLwotIwlkZWZpbmUgUFNJX1BPV0VSX0RPV04JCTB4MTAKLSMJZGVmaW5lIFBTSV9TV0lUQ0hfRElTQUJMRQkweDAxCi0jCWRlZmluZSBQU0lfU1dJVENIX0VOQUJMRQkweDExCi0jCWRlZmluZSBQU0lfQ0xFQVIJCTB4MTIKLSMJZGVmaW5lIFBTSV9BTEFSTV9ESVNBQkxFCTB4MDMKLSMJZGVmaW5lIFBTSV9BTEFSTV9FTkFCTEUJCTB4MTMKLSMJZGVmaW5lIFBTSV9DTEVBUl9DT0xEX1JFU0VUCTB4MDUKLSMJZGVmaW5lIFBTSV9TRVRfQ09MRF9SRVNFVAkweDE1Ci0jCWRlZmluZSBQU0lfQ0xFQVJfQ09MRF9TVEFSVAkweDA3Ci0jCWRlZmluZSBQU0lfU0VUX0NPTERfU1RBUlQJMHgxNwotCi0KLQotc3RydWN0IHZveWFnZXJfYmlvc19pbmZvIHsKLQlfX3U4CWxlbjsKLQlfX3U4CW1ham9yOwotCV9fdTgJbWlub3I7Ci0JX191OAlkZWJ1ZzsKLQlfX3U4CW51bV9jbGFzc2VzOwotCV9fdTgJY2xhc3NfMTsKLQlfX3U4CWNsYXNzXzI7Ci19OwotCi0vKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGFyZSBmb3IgdGhlIEtlcm5lbC9TVVMKLSAqIGludGVyZmFjZSB0aGVzZSBhcmUgbmVlZGVkIHRvIGZpbmQgb3V0IGhvdyBTVVMgaW5pdGlhbGlzZWQgYW55IFF1YWQKLSAqIGJvYXJkcyBpbiB0aGUgc3lzdGVtICovCi0KLSNkZWZpbmUJTlVNQkVSX09GX01DX0JVU1NFUwkyCi0jZGVmaW5lIFNMT1RTX1BFUl9NQ19CVVMJOAotI2RlZmluZSBNQVhfQ1BVUyAgICAgICAgICAgICAgICAxNiAgICAgIC8qIDE2IHdheSBDUFUgc3lzdGVtICovCi0jZGVmaW5lIE1BWF9QUk9DRVNTT1JfQk9BUkRTCTQJLyogNCBwcm9jZXNzb3Igc2xvdCBzeXN0ZW0gKi8KLSNkZWZpbmUgTUFYX0NBQ0hFX0xFVkVMUwk0CS8qICMgb2YgY2FjaGUgbGV2ZWxzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBNQVhfU0hBUkVEX0NQVVMJCTQJLyogIyBvZiBDUFVzIHRoYXQgY2FuIHNoYXJlIGEgTEFSQyAqLwotI2RlZmluZSBOVU1CRVJfT0ZfUE9TX1JFR1MJOAotCi10eXBlZGVmIHN0cnVjdCB7Ci0JX191OAlNQ19TbG90OwotCV9fdTgJUE9TX1ZhbHVlc1tOVU1CRVJfT0ZfUE9TX1JFR1NdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBNQ19TbG90SW5mb3JtYXRpb25fdDsKLQotc3RydWN0IFF1YWREZXNjcmlwdGlvbiB7Ci0JX191OCAgVHlwZTsJLyogZm9yIHR5cGUgMCAoRFlBRElDIG9yIE1PTkFESUMpIGFsbCBmaWVsZHMKLQkJCSAqIHdpbGwgYmUgemVybyBleGNlcHQgZm9yIHNsb3QgKi8KLQlfX3U4IFN0cnVjdHVyZVZlcnNpb247Ci0JX191MzIgQ1BJX0Jhc2VBZGRyZXNzOwotCV9fdTMyICBMQVJDX0JhbmtTaXplOwotCV9fdTMyIExvY2FsTWVtb3J5U3RhdGVCaXRzOwotCV9fdTggIFNsb3Q7IC8qIFByb2Nlc3NvciBzbG90cyAxIC0gNCAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IFByb2NCb2FyZEluZm8gewotCV9fdTggVHlwZTsKLQlfX3U4IFN0cnVjdHVyZVZlcnNpb247Ci0JX191OCBOdW1iZXJPZkJvYXJkczsKLQlzdHJ1Y3QgUXVhZERlc2NyaXB0aW9uIFF1YWREYXRhW01BWF9QUk9DRVNTT1JfQk9BUkRTXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBDYWNoZURlc2NyaXB0aW9uIHsKLQlfX3U4IExldmVsOwotCV9fdTMyIFRvdGFsU2l6ZTsKLQlfX3UxNiBMaW5lU2l6ZTsKLQlfX3U4ICBBc3NvY2lhdGl2aXR5OwotCV9fdTggIENhY2hlVHlwZTsKLQlfX3U4ICBXcml0ZVR5cGU7Ci0JX191OCAgTnVtYmVyX0NQVXNfU2hhcmVkQnk7Ci0JX191OCAgU2hhcmVkX0NQVXNfSGFyZHdhcmVfSURzW01BWF9TSEFSRURfQ1BVU107Ci0KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBDUFVfRGVzY3JpcHRpb24gewotCV9fdTggQ1BVX0hhcmR3YXJlSWQ7Ci0JY2hhciAqRlJVX1N0cmluZzsKLQlfX3U4IE51bWJlck9mQ2FjaGVMZXZlbHM7Ci0Jc3RydWN0IENhY2hlRGVzY3JpcHRpb24gQ2FjaGVMZXZlbERhdGFbTUFYX0NBQ0hFX0xFVkVMU107Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgQ1BVX0luZm8gewotCV9fdTggVHlwZTsKLQlfX3U4IFN0cnVjdHVyZVZlcnNpb247Ci0JX191OCBOdW1iZXJPZl9DUFVzOwotCXN0cnVjdCBDUFVfRGVzY3JpcHRpb24gQ1BVX0RhdGFbTUFYX0NQVVNdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSB1c2VkIGJ5IFNVUyBhbmQgdGhlIE9TLgotICogVGhlIGFzc3VtcHRpb24gYWJvdXQgdGhpcyBzdHJ1Y3R1cmUgaXMgdGhhdCBubyBibGFuayBzcGFjZSBpcwotICogcGFja2VkIGluIGl0IGJ5IG91ciBmcmllbmQgdGhlIGNvbXBpbGVyLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JX191OAlNYWlsYm94X1NVUzsJCS8qIFdyaXR0ZW4gdG8gYnkgU1VTIHRvIGdpdmUKLQkJCQkJICAgY29tbWFuZHMvcmVzcG9uc2UgdG8gdGhlIE9TICovCi0JX191OAlNYWlsYm94X09TOwkJLyogV3JpdHRlbiB0byBieSB0aGUgT1MgdG8gZ2l2ZQotCQkJCQkgICBjb21tYW5kcy9yZXNwb25zZSB0byBTVVMgKi8KLQlfX3U4CVNVU19NYWlsYm94VmVyc2lvbjsJLyogVGVsbHMgdGhlIE9TIHdoaWNoIGl0ZXJhdGlvbiBvZiB0aGUKLQkJCQkJICAgaW50ZXJmYWNlIFNVUyBzdXBwb3J0cyAqLwotCV9fdTgJT1NfTWFpbGJveFZlcnNpb247CS8qIFRlbGxzIFNVUyB3aGljaCBpdGVyYXRpb24gb2YgdGhlCi0JCQkJCSAgIGludGVyZmFjZSB0aGUgT1Mgc3VwcG9ydHMgKi8KLQlfX3UzMglPU19GbGFnczsJCS8qIEZsYWdzIHNldCBieSB0aGUgT1MgYXMgaW5mbyBmb3IKLQkJCQkJICAgU1VTICovCi0JX191MzIJU1VTX0ZsYWdzOwkJLyogRmxhZ3Mgc2V0IGJ5IFNVUyBhcyBpbmZvCi0JCQkJCSAgIGZvciB0aGUgT1MgKi8KLQlfX3UzMglXYXRjaERvZ1BlcmlvZDsJCS8qIFdhdGNoZG9nIHBlcmlvZCAoaW4gc2Vjb25kcykgd2hpY2gKLQkJCQkJICAgdGhlIERQIHVzZXMgdG8gc2VlIGlmIHRoZSBPUwotCQkJCQkgICBpcyBkZWFkICovCi0JX191MzIJV2F0Y2hEb2dDb3VudDsJCS8qIFVwZGF0ZWQgYnkgdGhlIE9TIG9uIGV2ZXJ5IHRpYy4gKi8KLQlfX3UzMglNZW1vcnlGb3JfU1VTX0Vycm9yTG9nOwkvKiBGbGF0IDMyIGJpdCBhZGRyZXNzIHdoaWNoIHRlbGxzIFNVUwotCQkJCQkgICB3aGVyZSB0byBzdHVmZiB0aGUgU1VTIGVycm9yIGxvZwotCQkJCQkgICBvbiBhIGR1bXAgKi8KLQlNQ19TbG90SW5mb3JtYXRpb25fdCBNQ19TbG90SW5mb1tOVU1CRVJfT0ZfTUNfQlVTU0VTKlNMT1RTX1BFUl9NQ19CVVNdOwotCQkJCQkvKiBTdG9yYWdlIGZvciBNQ0EgUE9TIGRhdGEgKi8KLQkvKiBBbGwgbmV3IFNFQ09ORF9QQVNTX0lOVEVSRkFDRSBmaWVsZHMgYWRkZWQgZnJvbSB0aGlzIHBvaW50ICovCi0Jc3RydWN0IFByb2NCb2FyZEluZm8gICAgKkJvYXJkRGF0YTsKLQlzdHJ1Y3QgQ1BVX0luZm8gICAgICAgICAqQ1BVX0RhdGE7Ci0JLyogQWxsIG5ldyBmaWVsZHMgbXVzdCBiZSBhZGRlZCBmcm9tIHRoaXMgcG9pbnQgKi8KLX0gVm95YWdlcl9LZXJuZWxTVVNfTWJveF90OwotCi0vKiBzdHJ1Y3R1cmUgZm9yIGZpbmRpbmcgdGhlIHJpZ2h0IG1lbW9yeSBhZGRyZXNzIHRvIHNlbmQgYSBRSUMgQ1BJIHRvICovCi1zdHJ1Y3Qgdm95YWdlcl9xaWNfY3BpIHsKLQkvKiBFYWNoIGNhY2hlIGxpbmUgKDMyIGJ5dGVzKSBjYW4gdHJpZ2dlciBhIGNwaS4gIFRoZSBjcGkKLQkgKiByZWFkL3dyaXRlIG1heSBvY2N1ciBhbnl3aGVyZSBpbiB0aGUgY2FjaGUgbGluZS0tLXBpY2sgdGhlCi0JICogbWlkZGxlIHRvIGJlIHNhZmUgKi8KLQlzdHJ1Y3QgIHsKLQkJX191MzIgcGFkMVszXTsKLQkJX191MzIgY3BpOwotCQlfX3UzMiBwYWQyWzRdOwotCX0gcWljX2NwaVs4XTsKLX07Ci0KLXN0cnVjdCB2b3lhZ2VyX3N0YXR1cyB7Ci0JX191MzIJcG93ZXJfZmFpbDoxOwotCV9fdTMyCXN3aXRjaF9vZmY6MTsKLQlfX3UzMglyZXF1ZXN0X2Zyb21fa2VybmVsOjE7Ci19OwotCi1zdHJ1Y3Qgdm95YWdlcl9wc2lfcmVncyB7Ci0JX191OCBjYXRfaWQ7Ci0JX191OCBjYXRfZGV2OwotCV9fdTggY2F0X2NvbnRyb2w7Ci0JX191OCBzdWJhZGRyOwotCV9fdTggZHVtbXk0OwotCV9fdTggY2hlY2tiaXQ7Ci0JX191OCBzdWJhZGRyX2xvdzsKLQlfX3U4IHN1YmFkZHJfaGlnaDsKLQlfX3U4IGludHN0YXR1czsKLQlfX3U4IHN0YXQxOwotCV9fdTggc3RhdDM7Ci0JX191OCBmYXVsdDsKLQlfX3U4IHRtczsKLQlfX3U4IGdlbjsKLQlfX3U4IHN5c2NvbmY7Ci0JX191OCBkdW1teTE1OwotfTsKLQotc3RydWN0IHZveWFnZXJfcHNpX3N1YnJlZ3MgewotCV9fdTggc3VwcGx5OwotCV9fdTggbWFzazsKLQlfX3U4IHByZXNlbnQ7Ci0JX191OCBEQ2ZhaWw7Ci0JX191OCBBQ2ZhaWw7Ci0JX191OCBmYWlsOwotCV9fdTggVVBTZmFpbDsKLQlfX3U4IGdlbnN0YXR1czsKLX07Ci0KLXN0cnVjdCB2b3lhZ2VyX3BzaSB7Ci0Jc3RydWN0IHZveWFnZXJfcHNpX3JlZ3MgcmVnczsKLQlzdHJ1Y3Qgdm95YWdlcl9wc2lfc3VicmVncyBzdWJyZWdzOwotfTsKLQotc3RydWN0IHZveWFnZXJfU1VTIHsKLSNkZWZpbmUJVk9ZQUdFUl9EVU1QX0JVVFRPTl9OTUkJCTB4MQotI2RlZmluZSBWT1lBR0VSX1NVU19WQUxJRAkJMHgyCi0jZGVmaW5lIFZPWUFHRVJfU1lTSU5UX0NPTVBMRVRFCQkweDMKLQlfX3U4CVNVU19tYm94OwotI2RlZmluZSBWT1lBR0VSX05PX0NPTU1BTkQJCTB4MAotI2RlZmluZSBWT1lBR0VSX0lHTk9SRV9EVU1QCQkweDEKLSNkZWZpbmUgVk9ZQUdFUl9ET19EVU1QCQkJMHgyCi0jZGVmaW5lIFZPWUFHRVJfU1lTSU5UX0hBTkRTSEFLRQkweDMKLSNkZWZpbmUgVk9ZQUdFUl9ET19NRU1fRFVNUAkJMHg0Ci0jZGVmaW5lIFZPWUFHRVJfU1lTSU5UX1dBU19SRUNPVkVSRUQJMHg1Ci0JX191OAlrZXJuZWxfbWJveDsKLSNkZWZpbmUJVk9ZQUdFUl9NQUlMQk9YX1ZFUlNJT04JCTB4MTAKLQlfX3U4CVNVU192ZXJzaW9uOwotCV9fdTgJa2VybmVsX3ZlcnNpb247Ci0jZGVmaW5lIFZPWUFHRVJfT1NfSEFTX1NZU0lOVAkJMHgxCi0jZGVmaW5lIFZPWUFHRVJfT1NfSU5fUFJPR1JFU1MJCTB4MgotI2RlZmluZSBWT1lBR0VSX1VQREFUSU5HX1dEUEVSSU9ECTB4NAotCV9fdTMyCWtlcm5lbF9mbGFnczsKLSNkZWZpbmUgVk9ZQUdFUl9TVVNfQk9PVElORwkJMHgxCi0jZGVmaW5lIFZPWUFHRVJfU1VTX0lOX1BST0dSRVNTCQkweDIKLQlfX3UzMglTVVNfZmxhZ3M7Ci0JX191MzIJd2F0Y2hkb2dfcGVyaW9kOwotCV9fdTMyCXdhdGNoZG9nX2NvdW50OwotCV9fdTMyCVNVU19lcnJvcmxvZzsKLQkvKiBsb3RzIG9mIHN5c3RlbSBjb25maWd1cmF0aW9uIHN0dWZmIHVuZGVyIGhlcmUgKi8KLX07Ci0KLS8qIFZhcmlhYmxlcyBleHBvcnRlZCBieSB2b3lhZ2VyX3NtcCAqLwotZXh0ZXJuIF9fdTMyIHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnM7Ci1leHRlcm4gX191MzIgdm95YWdlcl9hbGxvd2VkX2Jvb3RfcHJvY2Vzc29yczsKLWV4dGVybiBfX3UzMiB2b3lhZ2VyX3F1YWRfcHJvY2Vzc29yczsKLWV4dGVybiBzdHJ1Y3Qgdm95YWdlcl9xaWNfY3BpICp2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbTlJfQ1BVU107Ci1leHRlcm4gc3RydWN0IHZveWFnZXJfU1VTICp2b3lhZ2VyX1NVUzsKLQotLyogdmFyaWFibGVzIGV4cG9ydGVkIGFsd2F5cyAqLwotZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqdm95YWdlcl90aHJlYWQ7Ci1leHRlcm4gaW50IHZveWFnZXJfbGV2ZWw7Ci1leHRlcm4gc3RydWN0IHZveWFnZXJfc3RhdHVzIHZveWFnZXJfc3RhdHVzOwotCi0vKiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhlIHZveWFnZXIgYW5kIHZveWFnZXJfc21wIG1vZHVsZXMgKi8KLWV4dGVybiBpbnQgdm95YWdlcl9jYXRfcmVhZGIoX191OCBtb2R1bGUsIF9fdTggYXNpYywgaW50IHJlZyk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX2NhdF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl9kZXRlY3Qoc3RydWN0IHZveWFnZXJfYmlvc19pbmZvICopOwotZXh0ZXJuIHZvaWQgdm95YWdlcl90cmFwX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX3NldHVwX2lycXModm9pZCk7Ci1leHRlcm4gaW50IHZveWFnZXJfbWVtb3J5X2RldGVjdChpbnQgcmVnaW9uLCBfX3UzMiAqYWRkciwgX191MzIgKmxlbmd0aCk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX3NtcF9pbnRyX2luaXQodm9pZCk7Ci1leHRlcm4gX191OCB2b3lhZ2VyX2V4dGVuZGVkX2Ntb3NfcmVhZChfX3UxNiBjbW9zX2FkZHJlc3MpOwotZXh0ZXJuIHZvaWQgdm95YWdlcl9zbXBfZHVtcCh2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfdGltZXJfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfcG93ZXJfb2ZmKHZvaWQpOwotZXh0ZXJuIHZvaWQgc21wX3ZveWFnZXJfcG93ZXJfb2ZmKHZvaWQgKmR1bW15KTsKLWV4dGVybiB2b2lkIHZveWFnZXJfcmVzdGFydCh2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfY2F0X3Bvd2VyX29mZih2b2lkKTsKLWV4dGVybiB2b2lkIHZveWFnZXJfY2F0X2RvX2NvbW1vbl9pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX2hhbmRsZV9ubWkodm9pZCk7Ci1leHRlcm4gdm9pZCB2b3lhZ2VyX3NtcF9pbnRyX2luaXQodm9pZCk7Ci0vKiBDb21tYW5kcyBmb3IgdGhlIGZvbGxvd2luZyBhcmUgKi8KLSNkZWZpbmUJVk9ZQUdFUl9QU0lfUkVBRAkwCi0jZGVmaW5lIFZPWUFHRVJfUFNJX1dSSVRFCTEKLSNkZWZpbmUgVk9ZQUdFUl9QU0lfU1VCUkVBRAkyCi0jZGVmaW5lIFZPWUFHRVJfUFNJX1NVQldSSVRFCTMKLWV4dGVybiB2b2lkIHZveWFnZXJfY2F0X3BzaShfX3U4LCBfX3UxNiwgX191OCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaAppbmRleCAxOTE0NDE4Li4xZGYzNTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oCkBAIC0xNSwxMCArMTUsNCBAQAogCXJldHVybiByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhyZWdzLT5mbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fZG9fSVJRKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJlZ3MtPm9yaWdfYXggPSB+aXJxOwotCWRvX0lSUShyZWdzKTsKLX0KLQogI2VuZGlmIC8qIF9BU01fWDg2X1hFTl9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmgKaW5kZXggODFmYmQ3My4uZDViN2U5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oCkBAIC0zOCwyMiArMzgsMzAgQEAKIGV4dGVybiBzdHJ1Y3Qgc3RhcnRfaW5mbyAqeGVuX3N0YXJ0X2luZm87CiAKIGVudW0geGVuX2RvbWFpbl90eXBlIHsKLQlYRU5fTkFUSVZFLAotCVhFTl9QVl9ET01BSU4sCi0JWEVOX0hWTV9ET01BSU4sCisJWEVOX05BVElWRSwJCS8qIHJ1bm5pbmcgb24gYmFyZSBoYXJkd2FyZSAgICAqLworCVhFTl9QVl9ET01BSU4sCQkvKiBydW5uaW5nIGluIGEgUFYgZG9tYWluICAgICAgKi8KKwlYRU5fSFZNX0RPTUFJTiwJCS8qIHJ1bm5pbmcgaW4gYSBYZW4gaHZtIGRvbWFpbiAqLwogfTsKIAotZXh0ZXJuIGVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZTsKLQogI2lmZGVmIENPTkZJR19YRU4KLSNkZWZpbmUgeGVuX2RvbWFpbigpCQkoeGVuX2RvbWFpbl90eXBlICE9IFhFTl9OQVRJVkUpCitleHRlcm4gZW51bSB4ZW5fZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlOwogI2Vsc2UKLSNkZWZpbmUgeGVuX2RvbWFpbigpCQkoMCkKKyNkZWZpbmUgeGVuX2RvbWFpbl90eXBlCQlYRU5fTkFUSVZFCiAjZW5kaWYKIAotI2RlZmluZSB4ZW5fcHZfZG9tYWluKCkJCSh4ZW5fZG9tYWluKCkgJiYgeGVuX2RvbWFpbl90eXBlID09IFhFTl9QVl9ET01BSU4pCi0jZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKHhlbl9kb21haW4oKSAmJiB4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX0hWTV9ET01BSU4pCisjZGVmaW5lIHhlbl9kb21haW4oKQkJKHhlbl9kb21haW5fdHlwZSAhPSBYRU5fTkFUSVZFKQorI2RlZmluZSB4ZW5fcHZfZG9tYWluKCkJCSh4ZW5fZG9tYWluKCkgJiYJCQlcCisJCQkJIHhlbl9kb21haW5fdHlwZSA9PSBYRU5fUFZfRE9NQUlOKQorI2RlZmluZSB4ZW5faHZtX2RvbWFpbigpCSh4ZW5fZG9tYWluKCkgJiYJCQlcCisJCQkJIHhlbl9kb21haW5fdHlwZSA9PSBYRU5fSFZNX0RPTUFJTikKIAotI2RlZmluZSB4ZW5faW5pdGlhbF9kb21haW4oKQkoeGVuX3B2X2RvbWFpbigpICYmIHhlbl9zdGFydF9pbmZvLT5mbGFncyAmIFNJRl9JTklURE9NQUlOKQorI2lmZGVmIENPTkZJR19YRU5fRE9NMAorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisKKyNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKHhlbl9wdl9kb21haW4oKSAmJiBcCisJCQkJIHhlbl9zdGFydF9pbmZvLT5mbGFncyAmIFNJRl9JTklURE9NQUlOKQorI2Vsc2UgIC8qICFDT05GSUdfWEVOX0RPTTAgKi8KKyNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKDApCisjZW5kaWYJLyogQ09ORklHX1hFTl9ET00wICovCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9YRU5fSFlQRVJWSVNPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaAppbmRleCA0YmQ5OTBlLi4xYTkxOGRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKQEAgLTE2NCw2ICsxNjQsNyBAQAogCiAKIHhtYWRkcl90IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUodm9pZCAqYWRkcmVzcyk7Cit1bnNpZ25lZCBsb25nIGFyYml0cmFyeV92aXJ0X3RvX21mbih2b2lkICp2YWRkcik7CiB2b2lkIG1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkodm9pZCAqdmFkZHIpOwogdm9pZCBtYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZSh2b2lkICp2YWRkcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCBkMzY0ZGYwLi45NWYyMTZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC0yMywxMSArMjMsMTIgQEAKIENGTEFHU192c3lzY2FsbF82NC5vCTo9ICQoUFJPRklMSU5HKSAtZzAgJChub3N0YWNrcCkKIENGTEFHU19ocGV0Lm8JCTo9ICQobm9zdGFja3ApCiBDRkxBR1NfdHNjLm8JCTo9ICQobm9zdGFja3ApCitDRkxBR1NfcGFyYXZpcnQubwk6PSAkKG5vc3RhY2twKQogCiBvYmoteQkJCTo9IHByb2Nlc3NfJChCSVRTKS5vIHNpZ25hbC5vIGVudHJ5XyQoQklUUykubwogb2JqLXkJCQkrPSB0cmFwcy5vIGlycS5vIGlycV8kKEJJVFMpLm8gZHVtcHN0YWNrXyQoQklUUykubwogb2JqLXkJCQkrPSB0aW1lXyQoQklUUykubyBpb3BvcnQubyBsZHQubyBkdW1wc3RhY2subwotb2JqLXkJCQkrPSBzZXR1cC5vIGk4MjU5Lm8gaXJxaW5pdF8kKEJJVFMpLm8gc2V0dXBfcGVyY3B1Lm8KK29iai15CQkJKz0gc2V0dXAubyBpODI1OS5vIGlycWluaXRfJChCSVRTKS5vCiBvYmotJChDT05GSUdfWDg2X1ZJU1dTKQkrPSB2aXN3c19xdWlya3Mubwogb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gcHJvYmVfcm9tc18zMi5vCiBvYmotJChDT05GSUdfWDg2XzMyKQkrPSBzeXNfaTM4Nl8zMi5vIGkzODZfa3N5bXNfMzIubwpAQCAtNDksMzEgKzUwLDI3IEBACiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkJKz0gc3RhY2t0cmFjZS5vCiBvYmoteQkJCQkrPSBjcHUvCiBvYmoteQkJCQkrPSBhY3BpLwotb2JqLSQoQ09ORklHX1g4Nl9CSU9TX1JFQk9PVCkJKz0gcmVib290Lm8KK29iai15CQkJCSs9IHJlYm9vdC5vCiBvYmotJChDT05GSUdfTUNBKQkJKz0gbWNhXzMyLm8KIG9iai0kKENPTkZJR19YODZfTVNSKQkJKz0gbXNyLm8KIG9iai0kKENPTkZJR19YODZfQ1BVSUQpCQkrPSBjcHVpZC5vCiBvYmotJChDT05GSUdfUENJKQkJKz0gZWFybHktcXVpcmtzLm8KIGFwbS15CQkJCTo9IGFwbV8zMi5vCiBvYmotJChDT05GSUdfQVBNKQkJKz0gYXBtLm8KLW9iai0kKENPTkZJR19YODZfU01QKQkJKz0gc21wLm8KLW9iai0kKENPTkZJR19YODZfU01QKQkJKz0gc21wYm9vdC5vIHRzY19zeW5jLm8gaXBpLm8gdGxiXyQoQklUUykubwotb2JqLSQoQ09ORklHX1g4Nl8zMl9TTVApCSs9IHNtcGNvbW1vbi5vCi1vYmotJChDT05GSUdfWDg2XzY0X1NNUCkJKz0gdHNjX3N5bmMubyBzbXBjb21tb24ubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCitvYmotJChDT05GSUdfU01QKQkJKz0gc21wYm9vdC5vIHRzY19zeW5jLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBzZXR1cF9wZXJjcHUubworb2JqLSQoQ09ORklHX1g4Nl82NF9TTVApCSs9IHRzY19zeW5jLm8KIG9iai0kKENPTkZJR19YODZfVFJBTVBPTElORSkJKz0gdHJhbXBvbGluZV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19YODZfTVBQQVJTRSkJKz0gbXBwYXJzZS5vCi1vYmotJChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCSs9IGFwaWMubyBubWkubwotb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBpb19hcGljLm8KK29iai15CQkJCSs9IGFwaWMvCiBvYmotJChDT05GSUdfWDg2X1JFQk9PVEZJWFVQUykJKz0gcmVib290X2ZpeHVwc18zMi5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlY18kKEJJVFMpLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IHJlbG9jYXRlX2tlcm5lbF8kKEJJVFMpLm8gY3Jhc2gubwogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXBfJChCSVRTKS5vCi1vYmotJChDT05GSUdfWDg2X05VTUFRKQkJKz0gbnVtYXFfMzIubwotb2JqLSQoQ09ORklHX1g4Nl9FUzcwMDApCSs9IGVzNzAwMF8zMi5vCi1vYmotJChDT05GSUdfWDg2X1NVTU1JVF9OVU1BKQkrPSBzdW1taXRfMzIubwotb2JqLXkJCQkJKz0gdnNtcF82NC5vCitvYmotJChDT05GSUdfWDg2X1ZTTVApCQkrPSB2c21wXzY0Lm8KIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19FRkkpIAkJKz0gZWZpLm8gZWZpXyQoQklUUykubyBlZmlfc3R1Yl8kKEJJVFMpLm8KQEAgLTExNCwxNiArMTExLDEzIEBACiAjIyMKICMgNjQgYml0IHNwZWNpZmljIGZpbGVzCiBpZmVxICgkKENPTkZJR19YODZfNjQpLHkpCi0gICAgICAgIG9iai15CQkJCSs9IGdlbmFwaWNfNjQubyBnZW5hcGljX2ZsYXRfNjQubyBnZW54MmFwaWNfdXZfeC5vIHRsYl91di5vCi0Jb2JqLXkJCQkJKz0gYmlvc191di5vIHV2X2lycS5vIHV2X3N5c2ZzLm8KLSAgICAgICAgb2JqLXkJCQkJKz0gZ2VueDJhcGljX2NsdXN0ZXIubwotICAgICAgICBvYmoteQkJCQkrPSBnZW54MmFwaWNfcGh5cy5vCi0gICAgICAgIG9iai0kKENPTkZJR19YODZfUE1fVElNRVIpCSs9IHBtdGltZXJfNjQubwotICAgICAgICBvYmotJChDT05GSUdfQVVESVQpCQkrPSBhdWRpdF82NC5vCisJb2JqLSQoQ09ORklHX1g4Nl9VVikJCSs9IHRsYl91di5vIGJpb3NfdXYubyB1dl9pcnEubyB1dl9zeXNmcy5vCisJb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCisJb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXRfNjQubwogCi0gICAgICAgIG9iai0kKENPTkZJR19HQVJUX0lPTU1VKQkrPSBwY2ktZ2FydF82NC5vIGFwZXJ0dXJlXzY0Lm8KLSAgICAgICAgb2JqLSQoQ09ORklHX0NBTEdBUllfSU9NTVUpCSs9IHBjaS1jYWxnYXJ5XzY0Lm8gdGNlXzY0Lm8KLSAgICAgICAgb2JqLSQoQ09ORklHX0FNRF9JT01NVSkJCSs9IGFtZF9pb21tdV9pbml0Lm8gYW1kX2lvbW11Lm8KKwlvYmotJChDT05GSUdfR0FSVF9JT01NVSkJKz0gcGNpLWdhcnRfNjQubyBhcGVydHVyZV82NC5vCisJb2JqLSQoQ09ORklHX0NBTEdBUllfSU9NTVUpCSs9IHBjaS1jYWxnYXJ5XzY0Lm8gdGNlXzY0Lm8KKwlvYmotJChDT05GSUdfQU1EX0lPTU1VKQkJKz0gYW1kX2lvbW11X2luaXQubyBhbWRfaW9tbXUubwogCi0gICAgICAgIG9iai0kKENPTkZJR19QQ0lfTU1DT05GSUcpCSs9IG1tY29uZi1mYW0xMGhfNjQubworCW9iai0kKENPTkZJR19QQ0lfTU1DT05GSUcpCSs9IG1tY29uZi1mYW0xMGhfNjQubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCA3Njc4ZjEwLi5hMThlYjdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0zNywxNSArMzcsMTAgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSMgaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jZW5kaWYKLQogc3RhdGljIGludCBfX2luaXRkYXRhIGFjcGlfZm9yY2UgPSAwOwogdTMyIGFjcGlfcnNkdF9mb3JjZWQ7CiAjaWZkZWYJQ09ORklHX0FDUEkKQEAgLTU2LDE2ICs1MSw3IEBACiBFWFBPUlRfU1lNQk9MKGFjcGlfZGlzYWJsZWQpOwogCiAjaWZkZWYJQ09ORklHX1g4Nl82NAotCi0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0KLSNlbHNlCQkJCS8qIFg4NiAqLwotCi0jaWZkZWYJQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9tcHBhcnNlLmg+Ci0jZW5kaWYJCQkJLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCi0KKyMgaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjZW5kaWYJCQkJLyogWDg2ICovCiAKICNkZWZpbmUgQkFEX01BRFRfRU5UUlkoZW50cnksIGVuZCkgKAkJCQkJICAgIFwKQEAgLTEyMSwzNSArMTA3LDE4IEBACiAgKi8KIGNoYXIgKl9faW5pdCBfX2FjcGlfbWFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgYmFzZSwgb2Zmc2V0LCBtYXBwZWRfc2l6ZTsKLQlpbnQgaWR4OwogCiAJaWYgKCFwaHlzIHx8ICFzaXplKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChwaHlzK3NpemUgPD0gKG1heF9sb3dfcGZuX21hcHBlZCA8PCBQQUdFX1NISUZUKSkKLQkJcmV0dXJuIF9fdmEocGh5cyk7CisJcmV0dXJuIGVhcmx5X2lvcmVtYXAocGh5cywgc2l6ZSk7Cit9Cit2b2lkIF9faW5pdCBfX2FjcGlfdW5tYXBfdGFibGUoY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKCFtYXAgfHwgIXNpemUpCisJCXJldHVybjsKIAotCW9mZnNldCA9IHBoeXMgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JbWFwcGVkX3NpemUgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7Ci0JY2xlYXJfZml4bWFwKEZJWF9BQ1BJX0VORCk7Ci0Jc2V0X2ZpeG1hcChGSVhfQUNQSV9FTkQsIHBoeXMpOwotCWJhc2UgPSBmaXhfdG9fdmlydChGSVhfQUNQSV9FTkQpOwotCi0JLyoKLQkgKiBNb3N0IGNhc2VzIGNhbiBiZSBjb3ZlcmVkIGJ5IHRoZSBiZWxvdy4KLQkgKi8KLQlpZHggPSBGSVhfQUNQSV9FTkQ7Ci0Jd2hpbGUgKG1hcHBlZF9zaXplIDwgc2l6ZSkgewotCQlpZiAoLS1pZHggPCBGSVhfQUNQSV9CRUdJTikKLQkJCXJldHVybiBOVUxMOwkvKiBjYW5ub3QgaGFuZGxlIHRoaXMgKi8KLQkJcGh5cyArPSBQQUdFX1NJWkU7Ci0JCWNsZWFyX2ZpeG1hcChpZHgpOwotCQlzZXRfZml4bWFwKGlkeCwgcGh5cyk7Ci0JCW1hcHBlZF9zaXplICs9IFBBR0VfU0laRTsKLQl9Ci0KLQlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyICopYmFzZSArIG9mZnNldCk7CisJZWFybHlfaW91bm1hcChtYXAsIHNpemUpOwogfQogCiAjaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRwpAQCAtMjM5LDcgKzIwOCw4IEBACiAJCSAgICAgICBtYWR0LT5hZGRyZXNzKTsKIAl9CiAKLQlhY3BpX21hZHRfb2VtX2NoZWNrKG1hZHQtPmhlYWRlci5vZW1faWQsIG1hZHQtPmhlYWRlci5vZW1fdGFibGVfaWQpOworCWRlZmF1bHRfYWNwaV9tYWR0X29lbV9jaGVjayhtYWR0LT5oZWFkZXIub2VtX2lkLAorCQkJCSAgICBtYWR0LT5oZWFkZXIub2VtX3RhYmxlX2lkKTsKIAogCXJldHVybiAwOwogfQpAQCAtODg0LDcgKzg1NCw3IEBACiAJREVDTEFSRV9CSVRNQVAocGluX3Byb2dyYW1tZWQsIE1QX01BWF9JT0FQSUNfUElOICsgMSk7CiB9IG1wX2lvYXBpY19yb3V0aW5nW01BWF9JT19BUElDU107CiAKLXN0YXRpYyBpbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSkKK2ludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKQogewogCWludCBpID0gMDsKIApAQCAtODk5LDYgKzg2OSwxNiBAQAogCXJldHVybiAtMTsKIH0KIAoraW50IG1wX2ZpbmRfaW9hcGljX3BpbihpbnQgaW9hcGljLCBpbnQgZ3NpKQoreworCWlmIChXQVJOX09OKGlvYXBpYyA9PSAtMSkpCisJCXJldHVybiAtMTsKKwlpZiAoV0FSTl9PTihnc2kgPiBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmdzaV9lbmQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKK30KKwogc3RhdGljIHU4IF9faW5pdCB1bmlxX2lvYXBpY19pZCh1OCBpZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC05MTIsOCArODkyLDggQEAKIAlERUNMQVJFX0JJVE1BUCh1c2VkLCAyNTYpOwogCWJpdG1hcF96ZXJvKHVzZWQsIDI1Nik7CiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQlzdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyAqaWEgPSAmbXBfaW9hcGljc1tpXTsKLQkJX19zZXRfYml0KGlhLT5tcF9hcGljaWQsIHVzZWQpOworCQlzdHJ1Y3QgbXBjX2lvYXBpYyAqaWEgPSAmbXBfaW9hcGljc1tpXTsKKwkJX19zZXRfYml0KGlhLT5hcGljaWQsIHVzZWQpOwogCX0KIAlpZiAoIXRlc3RfYml0KGlkLCB1c2VkKSkKIAkJcmV0dXJuIGlkOwpAQCAtOTQ1LDI5ICs5MjUsMjkgQEAKIAogCWlkeCA9IG5yX2lvYXBpY3M7CiAKLQltcF9pb2FwaWNzW2lkeF0ubXBfdHlwZSA9IE1QX0lPQVBJQzsKLQltcF9pb2FwaWNzW2lkeF0ubXBfZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7Ci0JbXBfaW9hcGljc1tpZHhdLm1wX2FwaWNhZGRyID0gYWRkcmVzczsKKwltcF9pb2FwaWNzW2lkeF0udHlwZSA9IE1QX0lPQVBJQzsKKwltcF9pb2FwaWNzW2lkeF0uZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7CisJbXBfaW9hcGljc1tpZHhdLmFwaWNhZGRyID0gYWRkcmVzczsKIAogCXNldF9maXhtYXBfbm9jYWNoZShGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgsIGFkZHJlc3MpOwotCW1wX2lvYXBpY3NbaWR4XS5tcF9hcGljaWQgPSB1bmlxX2lvYXBpY19pZChpZCk7CisJbXBfaW9hcGljc1tpZHhdLmFwaWNpZCA9IHVuaXFfaW9hcGljX2lkKGlkKTsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JbXBfaW9hcGljc1tpZHhdLm1wX2FwaWN2ZXIgPSBpb19hcGljX2dldF92ZXJzaW9uKGlkeCk7CisJbXBfaW9hcGljc1tpZHhdLmFwaWN2ZXIgPSBpb19hcGljX2dldF92ZXJzaW9uKGlkeCk7CiAjZWxzZQotCW1wX2lvYXBpY3NbaWR4XS5tcF9hcGljdmVyID0gMDsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciA9IDA7CiAjZW5kaWYKIAkvKgogCSAqIEJ1aWxkIGJhc2ljIEdTSSBsb29rdXAgdGFibGUgdG8gZmFjaWxpdGF0ZSBnc2ktPmlvX2FwaWMgbG9va3VwcwogCSAqIGFuZCB0byBwcmV2ZW50IHJlcHJvZ3JhbW1pbmcgb2YgSU9BUElDIHBpbnMgKFBDSSBHU0lzKS4KIAkgKi8KLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmFwaWNfaWQgPSBtcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2lkOworCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uYXBpY19pZCA9IG1wX2lvYXBpY3NbaWR4XS5hcGljaWQ7CiAJbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfYmFzZSA9IGdzaV9iYXNlOwogCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZCA9IGdzaV9iYXNlICsKIAkgICAgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyhpZHgpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiSU9BUElDWyVkXTogYXBpY19pZCAlZCwgdmVyc2lvbiAlZCwgYWRkcmVzcyAweCVseCwgIgotCSAgICAgICAiR1NJICVkLSVkXG4iLCBpZHgsIG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljaWQsCi0JICAgICAgIG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljdmVyLCBtcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2FkZHIsCisJcHJpbnRrKEtFUk5fSU5GTyAiSU9BUElDWyVkXTogYXBpY19pZCAlZCwgdmVyc2lvbiAlZCwgYWRkcmVzcyAweCV4LCAiCisJICAgICAgICJHU0kgJWQtJWRcbiIsIGlkeCwgbXBfaW9hcGljc1tpZHhdLmFwaWNpZCwKKwkgICAgICAgbXBfaW9hcGljc1tpZHhdLmFwaWN2ZXIsIG1wX2lvYXBpY3NbaWR4XS5hcGljYWRkciwKIAkgICAgICAgbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfYmFzZSwgbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfZW5kKTsKIAogCW5yX2lvYXBpY3MrKzsKQEAgLTk5NiwxOSArOTc2LDE5IEBACiAJcmV0dXJuIG1heF9nc2kgKyAxOwogfQogCi1zdGF0aWMgdm9pZCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcF9jb25maWdfaW50c3JjICptLAotCQkJCSAgICBzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqbXBfaXJxKQorc3RhdGljIHZvaWQgYXNzaWduX3RvX21wX2lycShzdHJ1Y3QgbXBjX2ludHNyYyAqbSwKKwkJCQkgICAgc3RydWN0IG1wY19pbnRzcmMgKm1wX2lycSkKIHsKLQltZW1jcHkobXBfaXJxLCBtLCBzaXplb2Yoc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMpKTsKKwltZW1jcHkobXBfaXJxLCBtLCBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpKTsKIH0KIAotc3RhdGljIGludCBtcF9pcnFfY21wKHN0cnVjdCBtcF9jb25maWdfaW50c3JjICptcF9pcnEsCi0JCQkJc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgKm0pCitzdGF0aWMgaW50IG1wX2lycV9jbXAoc3RydWN0IG1wY19pbnRzcmMgKm1wX2lycSwKKwkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKIHsKLQlyZXR1cm4gbWVtY21wKG1wX2lycSwgbSwgc2l6ZW9mKHN0cnVjdCBtcF9jb25maWdfaW50c3JjKSk7CisJcmV0dXJuIG1lbWNtcChtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOwogfQogCi1zdGF0aWMgdm9pZCBzYXZlX21wX2lycShzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqbSkKK3N0YXRpYyB2b2lkIHNhdmVfbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptKQogewogCWludCBpOwogCkBAIC0xMDI2LDcgKzEwMDYsNyBAQAogewogCWludCBpb2FwaWM7CiAJaW50IHBpbjsKLQlzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyBtcF9pcnE7CisJc3RydWN0IG1wY19pbnRzcmMgbXBfaXJxOwogCiAJLyoKIAkgKiBDb252ZXJ0ICdnc2knIHRvICdpb2FwaWMucGluJy4KQEAgLTEwMzQsNyArMTAxNCw3IEBACiAJaW9hcGljID0gbXBfZmluZF9pb2FwaWMoZ3NpKTsKIAlpZiAoaW9hcGljIDwgMCkKIAkJcmV0dXJuOwotCXBpbiA9IGdzaSAtIG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uZ3NpX2Jhc2U7CisJcGluID0gbXBfZmluZF9pb2FwaWNfcGluKGlvYXBpYywgZ3NpKTsKIAogCS8qCiAJICogVEJEOiBUaGlzIGNoZWNrIGlzIGZvciBmYXVsdHkgdGltZXIgZW50cmllcywgd2hlcmUgdGhlIG92ZXJyaWRlCkBAIC0xMDQ0LDEzICsxMDI0LDEzIEBACiAJaWYgKChidXNfaXJxID09IDApICYmICh0cmlnZ2VyID09IDMpKQogCQl0cmlnZ2VyID0gMTsKIAotCW1wX2lycS5tcF90eXBlID0gTVBfSU5UU1JDOwotCW1wX2lycS5tcF9pcnF0eXBlID0gbXBfSU5UOwotCW1wX2lycS5tcF9pcnFmbGFnID0gKHRyaWdnZXIgPDwgMikgfCBwb2xhcml0eTsKLQltcF9pcnEubXBfc3JjYnVzID0gTVBfSVNBX0JVUzsKLQltcF9pcnEubXBfc3JjYnVzaXJxID0gYnVzX2lycTsJLyogSVJRICovCi0JbXBfaXJxLm1wX2RzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10ubXBfYXBpY2lkOyAvKiBBUElDIElEICovCi0JbXBfaXJxLm1wX2RzdGlycSA9IHBpbjsJLyogSU5USU4jICovCisJbXBfaXJxLnR5cGUgPSBNUF9JTlRTUkM7CisJbXBfaXJxLmlycXR5cGUgPSBtcF9JTlQ7CisJbXBfaXJxLmlycWZsYWcgPSAodHJpZ2dlciA8PCAyKSB8IHBvbGFyaXR5OworCW1wX2lycS5zcmNidXMgPSBNUF9JU0FfQlVTOworCW1wX2lycS5zcmNidXNpcnEgPSBidXNfaXJxOwkvKiBJUlEgKi8KKwltcF9pcnEuZHN0YXBpYyA9IG1wX2lvYXBpY3NbaW9hcGljXS5hcGljaWQ7IC8qIEFQSUMgSUQgKi8KKwltcF9pcnEuZHN0aXJxID0gcGluOwkvKiBJTlRJTiMgKi8KIAogCXNhdmVfbXBfaXJxKCZtcF9pcnEpOwogfQpAQCAtMTA2MCw3ICsxMDQwLDcgQEAKIAlpbnQgaTsKIAlpbnQgaW9hcGljOwogCXVuc2lnbmVkIGludCBkc3RhcGljOwotCXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycTsKKwlzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnE7CiAKICNpZiBkZWZpbmVkIChDT05GSUdfTUNBKSB8fCBkZWZpbmVkIChDT05GSUdfRUlTQSkKIAkvKgpAQCAtMTA4NSw3ICsxMDY1LDcgQEAKIAlpb2FwaWMgPSBtcF9maW5kX2lvYXBpYygwKTsKIAlpZiAoaW9hcGljIDwgMCkKIAkJcmV0dXJuOwotCWRzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10ubXBfYXBpY2lkOworCWRzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10uYXBpY2lkOwogCiAJLyoKIAkgKiBVc2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUXMgMC0xNS4gIFVubGVzcwpAQCAtMTA5NSwxNiArMTA3NSwxNCBAQAogCQlpbnQgaWR4OwogCiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgbXBfaXJxX2VudHJpZXM7IGlkeCsrKSB7Ci0JCQlzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqaXJxID0gbXBfaXJxcyArIGlkeDsKKwkJCXN0cnVjdCBtcGNfaW50c3JjICppcnEgPSBtcF9pcnFzICsgaWR4OwogCiAJCQkvKiBEbyB3ZSBhbHJlYWR5IGhhdmUgYSBtYXBwaW5nIGZvciB0aGlzIElTQSBJUlE/ICovCi0JCQlpZiAoaXJxLT5tcF9zcmNidXMgPT0gTVBfSVNBX0JVUwotCQkJICAgICYmIGlycS0+bXBfc3JjYnVzaXJxID09IGkpCisJCQlpZiAoaXJxLT5zcmNidXMgPT0gTVBfSVNBX0JVUyAmJiBpcnEtPnNyY2J1c2lycSA9PSBpKQogCQkJCWJyZWFrOwogCiAJCQkvKiBEbyB3ZSBhbHJlYWR5IGhhdmUgYSBtYXBwaW5nIGZvciB0aGlzIElPQVBJQyBwaW4gKi8KLQkJCWlmIChpcnEtPm1wX2RzdGFwaWMgPT0gZHN0YXBpYyAmJgotCQkJICAgIGlycS0+bXBfZHN0aXJxID09IGkpCisJCQlpZiAoaXJxLT5kc3RhcGljID09IGRzdGFwaWMgJiYgaXJxLT5kc3RpcnEgPT0gaSkKIAkJCQlicmVhazsKIAkJfQogCkBAIC0xMTEzLDEzICsxMDkxLDEzIEBACiAJCQljb250aW51ZTsJLyogSVJRIGFscmVhZHkgdXNlZCAqLwogCQl9CiAKLQkJbXBfaXJxLm1wX3R5cGUgPSBNUF9JTlRTUkM7Ci0JCW1wX2lycS5tcF9pcnFmbGFnID0gMDsJLyogQ29uZm9ybWluZyAqLwotCQltcF9pcnEubXBfc3JjYnVzID0gTVBfSVNBX0JVUzsKLQkJbXBfaXJxLm1wX2RzdGFwaWMgPSBkc3RhcGljOwotCQltcF9pcnEubXBfaXJxdHlwZSA9IG1wX0lOVDsKLQkJbXBfaXJxLm1wX3NyY2J1c2lycSA9IGk7IC8qIElkZW50aXR5IG1hcHBlZCAqLwotCQltcF9pcnEubXBfZHN0aXJxID0gaTsKKwkJbXBfaXJxLnR5cGUgPSBNUF9JTlRTUkM7CisJCW1wX2lycS5pcnFmbGFnID0gMDsJLyogQ29uZm9ybWluZyAqLworCQltcF9pcnEuc3JjYnVzID0gTVBfSVNBX0JVUzsKKwkJbXBfaXJxLmRzdGFwaWMgPSBkc3RhcGljOworCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKKwkJbXBfaXJxLnNyY2J1c2lycSA9IGk7IC8qIElkZW50aXR5IG1hcHBlZCAqLworCQltcF9pcnEuZHN0aXJxID0gaTsKIAogCQlzYXZlX21wX2lycSgmbXBfaXJxKTsKIAl9CkBAIC0xMTU2LDcgKzExMzQsNyBAQAogCQlyZXR1cm4gZ3NpOwogCX0KIAotCWlvYXBpY19waW4gPSBnc2kgLSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmdzaV9iYXNlOworCWlvYXBpY19waW4gPSBtcF9maW5kX2lvYXBpY19waW4oaW9hcGljLCBnc2kpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChpb2FwaWNfcmVudW1iZXJfaXJxKQpAQCAtMTIzMCwyMiArMTIwOCwyMiBAQAogCQkJdTMyIGdzaSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKIHsKICNpZmRlZiBDT05GSUdfWDg2X01QUEFSU0UKLQlzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyBtcF9pcnE7CisJc3RydWN0IG1wY19pbnRzcmMgbXBfaXJxOwogCWludCBpb2FwaWM7CiAKIAlpZiAoIWFjcGlfaW9hcGljKQogCQlyZXR1cm4gMDsKIAogCS8qIHByaW50IHRoZSBlbnRyeSBzaG91bGQgaGFwcGVuIG9uIG1wdGFibGUgaWRlbnRpY2FsbHkgKi8KLQltcF9pcnEubXBfdHlwZSA9IE1QX0lOVFNSQzsKLQltcF9pcnEubXBfaXJxdHlwZSA9IG1wX0lOVDsKLQltcF9pcnEubXBfaXJxZmxhZyA9ICh0cmlnZ2VyaW5nID09IEFDUElfRURHRV9TRU5TSVRJVkUgPyA0IDogMHgwYykgfAorCW1wX2lycS50eXBlID0gTVBfSU5UU1JDOworCW1wX2lycS5pcnF0eXBlID0gbXBfSU5UOworCW1wX2lycS5pcnFmbGFnID0gKHRyaWdnZXJpbmcgPT0gQUNQSV9FREdFX1NFTlNJVElWRSA/IDQgOiAweDBjKSB8CiAJCQkJKHBvbGFyaXR5ID09IEFDUElfQUNUSVZFX0hJR0ggPyAxIDogMyk7Ci0JbXBfaXJxLm1wX3NyY2J1cyA9IG51bWJlcjsKLQltcF9pcnEubXBfc3JjYnVzaXJxID0gKCgoZGV2Zm4gPj4gMykgJiAweDFmKSA8PCAyKSB8ICgocGluIC0gMSkgJiAzKTsKKwltcF9pcnEuc3JjYnVzID0gbnVtYmVyOworCW1wX2lycS5zcmNidXNpcnEgPSAoKChkZXZmbiA+PiAzKSAmIDB4MWYpIDw8IDIpIHwgKChwaW4gLSAxKSAmIDMpOwogCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKGdzaSk7Ci0JbXBfaXJxLm1wX2RzdGFwaWMgPSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmFwaWNfaWQ7Ci0JbXBfaXJxLm1wX2RzdGlycSA9IGdzaSAtIG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uZ3NpX2Jhc2U7CisJbXBfaXJxLmRzdGFwaWMgPSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmFwaWNfaWQ7CisJbXBfaXJxLmRzdGlycSA9IG1wX2ZpbmRfaW9hcGljX3Bpbihpb2FwaWMsIGdzaSk7CiAKIAlzYXZlX21wX2lycSgmbXBfaXJxKTsKICNlbmRpZgpAQCAtMTM3Miw3ICsxMzUwLDcgQEAKIAkJaWYgKCFlcnJvcikgewogCQkJYWNwaV9sYXBpYyA9IDE7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICisjaWZkZWYgQ09ORklHX1g4Nl9CSUdTTVAKIAkJCWdlbmVyaWNfYmlnc21wX3Byb2JlKCk7CiAjZW5kaWYKIAkJCS8qCkBAIC0xMzg0LDkgKzEzNjIsOCBAQAogCQkJCWFjcGlfaW9hcGljID0gMTsKIAogCQkJCXNtcF9mb3VuZF9jb25maWcgPSAxOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQkJCQlzZXR1cF9hcGljX3JvdXRpbmcoKTsKLSNlbmRpZgorCQkJCWlmIChhcGljLT5zZXR1cF9hcGljX3JvdXRpbmcpCisJCQkJCWFwaWMtPnNldHVwX2FwaWNfcm91dGluZygpOwogCQkJfQogCQl9CiAJCWlmIChlcnJvciA9PSAtRUlOVkFMKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCmluZGV4IDMzNTU5NzMuLjU4MGI0ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCkBAIC0zLDggKzMsOCBAQAogICovCiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKIAkuY29kZTE2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwppbmRleCBhNjBjMWYzLi43YzI0M2EyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogCXN0YWNrX3N0YXJ0LnNwID0gdGVtcF9zdGFjayArIHNpemVvZih0ZW1wX3N0YWNrKTsKIAllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9CiAJCQkodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCWluaXRpYWxfZ3MgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmCiAJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpd2FrZXVwX2xvbmc2NDsKIAlzYXZlZF9tYWdpYyA9IDB4MTIzNDU2Nzg5YWJjZGVmMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMKaW5kZXggYTEyZTZhOS4uOGRlZDQxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMKQEAgLTEsNyArMSw3IEBACiAJLnNlY3Rpb24gLnRleHQucGFnZV9hbGlnbmVkCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCiAjIENvcHlyaWdodCAyMDAzLCAyMDA4IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4sIGRpc3RyaWJ1dGUgdW5kZXIgR1BMdjIKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUwppbmRleCA5NjI1OGQ5Li44ZWE1MTY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUwpAQCAtMSw4ICsxLDggQEAKIC50ZXh0CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggYTg0YWM3Yi4uNjkwN2I4ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTQ5OCwxMiArNDk4LDEyIEBACiAgKi8KIHZvaWQgKl9fa3Byb2JlcyB0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqdmFkZHI7CiAJaW50IG5yX3BhZ2VzID0gMjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbMl07CiAJaW50IGk7CiAKKwltaWdodF9zbGVlcCgpOwogCWlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkgewogCQlwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKIAkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciArIFBBR0VfU0laRSk7CkBAIC01MTcsOSArNTE3LDkgQEAKIAkJbnJfcGFnZXMgPSAxOwogCXZhZGRyID0gdm1hcChwYWdlcywgbnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpOwogCUJVR19PTighdmFkZHIpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCW1lbWNweSgmdmFkZHJbKHVuc2lnbmVkIGxvbmcpYWRkciAmIH5QQUdFX01BU0tdLCBvcGNvZGUsIGxlbik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWxvY2FsX2lycV9lbmFibGUoKTsKIAl2dW5tYXAodmFkZHIpOwogCXN5bmNfY29yZSgpOwogCS8qIENvdWxkIGFsc28gZG8gYSBDTEZMVVNIIGhlcmUgdG8gc3BlZWQgdXAgQ1BVIHJlY292ZXJ5OyBidXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3YjdiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIGxvY2FsIEFQSUMgZHJpdmVycyBhbmQgZm9yIHRoZSBJTy1BUElDIGNvZGUKKyMKKworb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljLm8gcHJvYmVfJChCSVRTKS5vIGlwaS5vIG5taS5vCitvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IGlwaS5vCisKK2lmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKK29iai15CQkJCSs9IGFwaWNfZmxhdF82NC5vCitvYmotJChDT05GSUdfWDg2X1gyQVBJQykJKz0geDJhcGljX2NsdXN0ZXIubworb2JqLSQoQ09ORklHX1g4Nl9YMkFQSUMpCSs9IHgyYXBpY19waHlzLm8KK29iai0kKENPTkZJR19YODZfVVYpCQkrPSB4MmFwaWNfdXZfeC5vCitlbmRpZgorCitvYmotJChDT05GSUdfWDg2X0JJR1NNUCkJKz0gYmlnc21wXzMyLm8KK29iai0kKENPTkZJR19YODZfTlVNQVEpCQkrPSBudW1hcV8zMi5vCitvYmotJChDT05GSUdfWDg2X0VTNzAwMCkJKz0gZXM3MDAwXzMyLm8KK29iai0kKENPTkZJR19YODZfU1VNTUlUKQkrPSBzdW1taXRfMzIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggNTcwZjM2ZS4uZjljZWNkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJTG9jYWwgQVBJQyBoYW5kbGluZywgbG9jYWwgQVBJQyB0aW1lcnMKICAqCi0gKgkoYykgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCShjKSAxOTk5LCAyMDAwLCAyMDA5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICoKICAqCUZpeGVzCiAgKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKQEAgLTE0LDUxICsxNCw2OSBAQAogICoJTWlrYWVsIFBldHRlcnNzb24JOglQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL2k4MjUzLmg+Ci0jaW5jbHVkZSA8YXNtL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KK3Vuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKKwordW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOworCisvKiBQcm9jZXNzb3IgdGhhdCBpcyBkb2luZyB0aGUgYm9vdCB1cCAqLwordW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IC0xVTsKIAogLyoKLSAqIFNhbml0eSBjaGVjaworICogVGhlIGhpZ2hlc3QgQVBJQyBJRCBzZWVuIGR1cmluZyBlbnVtZXJhdGlvbi4KKyAqCisgKiBUaGlzIGRldGVybWluZXMgdGhlIG1lc3NhZ2luZyBwcm90b2NvbCB3ZSBjYW4gdXNlOiBpZiBhbGwgQVBJQyBJRHMKKyAqIGFyZSBpbiB0aGUgMCAuLi4gNyByYW5nZSwgdGhlbiB3ZSBjYW4gdXNlIGxvZ2ljYWwgYWRkcmVzc2luZyB3aGljaAorICogaGFzIHNvbWUgcGVyZm9ybWFuY2UgYWR2YW50YWdlcyAoYmV0dGVyIGJyb2FkY2FzdGluZykuCisgKgorICogSWYgdGhlcmUncyBhbiBBUElDIElEIGFib3ZlIDgsIHdlIHVzZSBwaHlzaWNhbCBhZGRyZXNzaW5nLgogICovCi0jaWYgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MEYpICE9IDB4MEYpCi0jIGVycm9yIFNQVVJJT1VTX0FQSUNfVkVDVE9SIGRlZmluaXRpb24gZXJyb3IKLSNlbmRpZgordW5zaWduZWQgaW50IG1heF9waHlzaWNhbF9hcGljaWQ7CisKKy8qCisgKiBCaXRtYXNrIG9mIHBoeXNpY2FsbHkgZXhpc3RpbmcgQ1BVczoKKyAqLworcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKKworLyoKKyAqIE1hcCBjcHUgaW5kZXggdG8gcGh5c2ljYWwgQVBJQyBJRAorICovCitERUZJTkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9jcHVfdG9fYXBpY2lkLCBCQURfQVBJQ0lEKTsKK0RFRklORV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2Jpb3NfY3B1X2FwaWNpZCwgQkFEX0FQSUNJRCk7CitFWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOworRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogLyoKQEAgLTkyLDExICsxMTAsNyBAQAogX19zZXR1cCgiYXBpY3BtdGltZXIiLCBzZXR1cF9hcGljcG10aW1lcik7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgSEFWRV9YMkFQSUMKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9YMkFQSUMKKyNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwogaW50IHgyYXBpYzsKIC8qIHgyYXBpYyBlbmFibGVkIGJlZm9yZSBPUyBoYW5kb3ZlciAqLwogc3RhdGljIGludCB4MmFwaWNfcHJlZW5hYmxlZDsKQEAgLTE5NCwxOCArMjA4LDEzIEBACiAJcmV0dXJuIGxhcGljX2dldF92ZXJzaW9uKCkgPj0gMHgxNDsKIH0KIAotLyoKLSAqIFBhcmF2aXJ0IGtlcm5lbHMgYWxzbyBtaWdodCBiZSB1c2luZyB0aGVzZSBiZWxvdyBvcHMuIFNvIHdlIHN0aWxsCi0gKiB1c2UgZ2VuZXJpYyBhcGljX3JlYWQoKS9hcGljX3dyaXRlKCksIHdoaWNoIG1pZ2h0IGJlIHBvaW50aW5nIHRvIGRpZmZlcmVudAotICogb3BzIGluIFBBUkFWSVJUIGNhc2UuCi0gKi8KLXZvaWQgeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQordm9pZCBuYXRpdmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCiB7CiAJd2hpbGUgKGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZKQogCQljcHVfcmVsYXgoKTsKIH0KIAotdTMyIHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQordTMyIG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQogewogCXUzMiBzZW5kX3N0YXR1czsKIAlpbnQgdGltZW91dDsKQEAgLTIyMSwxMyArMjMwLDEzIEBACiAJcmV0dXJuIHNlbmRfc3RhdHVzOwogfQogCi12b2lkIHhhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCit2b2lkIG5hdGl2ZV9hcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCiB7CiAJYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQoaWQpKTsKIAlhcGljX3dyaXRlKEFQSUNfSUNSLCBsb3cpOwogfQogCi1zdGF0aWMgdTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpCit1NjQgbmF0aXZlX2FwaWNfaWNyX3JlYWQodm9pZCkKIHsKIAl1MzIgaWNyMSwgaWNyMjsKIApAQCAtMjM3LDU0ICsyNDYsNiBAQAogCXJldHVybiBpY3IxIHwgKCh1NjQpaWNyMiA8PCAzMik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXBpY19vcHMgeGFwaWNfb3BzID0gewotCS5yZWFkID0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCi0JLndyaXRlID0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAotCS5pY3JfcmVhZCA9IHhhcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4YXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4YXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUsCi19OwotCi1zdHJ1Y3QgYXBpY19vcHMgX19yZWFkX21vc3RseSAqYXBpY19vcHMgPSAmeGFwaWNfb3BzOwotRVhQT1JUX1NZTUJPTF9HUEwoYXBpY19vcHMpOwotCi0jaWZkZWYgSEFWRV9YMkFQSUMKLXN0YXRpYyB2b2lkIHgyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB1MzIgc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgeDJhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCi17Ci0Jd3Jtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksICgoX191NjQpIGlkKSA8PCAzMiB8IGxvdyk7Ci19Ci0KLXN0YXRpYyB1NjQgeDJhcGljX2ljcl9yZWFkKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlyZG1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgdmFsKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIHgyYXBpY19vcHMgPSB7Ci0JLnJlYWQgPSBuYXRpdmVfYXBpY19tc3JfcmVhZCwKLQkud3JpdGUgPSBuYXRpdmVfYXBpY19tc3Jfd3JpdGUsCi0JLmljcl9yZWFkID0geDJhcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4MmFwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0geDJhcGljX3dhaXRfaWNyX2lkbGUsCi0JLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCi19OwotI2VuZGlmCi0KIC8qKgogICogZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgLSBlbmFibGUgTk1JIHRocm91Z2ggbG9jYWwgdmVjdG9yIHRhYmxlIDAKICAqLwpAQCAtNDU3LDcgKzQxOCw3IEBACiBzdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCXNlbmRfSVBJX21hc2sobWFzaywgTE9DQUxfVElNRVJfVkVDVE9SKTsKKwlhcGljLT5zZW5kX0lQSV9tYXNrKG1hc2ssIExPQ0FMX1RJTUVSX1ZFQ1RPUik7CiAjZW5kaWYKIH0KIApAQCAtNTM1LDcgKzQ5Niw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfYnlfcG10aW1lcihsb25nIGRlbHRhcG0sIGxvbmcgKmRlbHRhKQorc3RhdGljIGludCBfX2luaXQKK2NhbGlicmF0ZV9ieV9wbXRpbWVyKGxvbmcgZGVsdGFwbSwgbG9uZyAqZGVsdGEsIGxvbmcgKmRlbHRhdHNjKQogewogCWNvbnN0IGxvbmcgcG1fMTAwbXMgPSBQTVRNUl9USUNLU19QRVJfU0VDIC8gMTA7CiAJY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcyAvIDEwMDsKQEAgLTU0Niw3ICs1MDgsNyBAQAogCXJldHVybiAtMTsKICNlbmRpZgogCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIFBNIHRpbWVyIGRlbHRhID0gJWxkXG4iLCBkZWx0YXBtKTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0tVGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOwogCiAJLyogQ2hlY2ssIGlmIHRoZSBQTSB0aW1lciBpcyBhdmFpbGFibGUgKi8KIAlpZiAoIWRlbHRhcG0pCkBAIC01NTYsMTkgKzUxOCwzMCBAQAogCiAJaWYgKGRlbHRhcG0gPiAocG1fMTAwbXMgLSBwbV90aHJlc2gpICYmCiAJICAgIGRlbHRhcG0gPCAocG1fMTAwbXMgKyBwbV90aHJlc2gpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBQTSB0aW1lciByZXN1bHQgb2tcbiIpOwotCX0gZWxzZSB7Ci0JCXJlcyA9ICgoKHU2NClkZWx0YXBtKSAqICBtdWx0KSA+PiAyMjsKLQkJZG9fZGl2KHJlcywgMTAwMDAwMCk7Ci0JCXByX3dhcm5pbmcoIkFQSUMgY2FsaWJyYXRpb24gbm90IGNvbnNpc3RlbnQgIgotCQkJIndpdGggUE0gVGltZXI6ICVsZG1zIGluc3RlYWQgb2YgMTAwbXNcbiIsCi0JCQkobG9uZylyZXMpOwotCQkvKiBDb3JyZWN0IHRoZSBsYXBpYyBjb3VudGVyIHZhbHVlICovCi0JCXJlcyA9ICgoKHU2NCkoKmRlbHRhKSkgKiBwbV8xMDBtcyk7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBQTS1UaW1lciByZXN1bHQgb2tcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXMgPSAoKCh1NjQpZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7CisJZG9fZGl2KHJlcywgMTAwMDAwMCk7CisJcHJfd2FybmluZygiQVBJQyBjYWxpYnJhdGlvbiBub3QgY29uc2lzdGVudCAiCisJCSAgICJ3aXRoIFBNLVRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLChsb25nKXJlcyk7CisKKwkvKiBDb3JyZWN0IHRoZSBsYXBpYyBjb3VudGVyIHZhbHVlICovCisJcmVzID0gKCgodTY0KSgqZGVsdGEpKSAqIHBtXzEwMG1zKTsKKwlkb19kaXYocmVzLCBkZWx0YXBtKTsKKwlwcl9pbmZvKCJBUElDIGRlbHRhIGFkanVzdGVkIHRvIFBNLVRpbWVyOiAiCisJCSIlbHUgKCVsZClcbiIsICh1bnNpZ25lZCBsb25nKXJlcywgKmRlbHRhKTsKKwkqZGVsdGEgPSAobG9uZylyZXM7CisKKwkvKiBDb3JyZWN0IHRoZSB0c2MgY291bnRlciB2YWx1ZSAqLworCWlmIChjcHVfaGFzX3RzYykgeworCQlyZXMgPSAoKCh1NjQpKCpkZWx0YXRzYykpICogcG1fMTAwbXMpOwogCQlkb19kaXYocmVzLCBkZWx0YXBtKTsKLQkJcHJfaW5mbygiQVBJQyBkZWx0YSBhZGp1c3RlZCB0byBQTS1UaW1lcjogIgotCQkJIiVsdSAoJWxkKVxuIiwgKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGEpOwotCQkqZGVsdGEgPSAobG9uZylyZXM7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlRTQyBkZWx0YSBhZGp1c3RlZCB0byAiCisJCQkJCSAgIlBNLVRpbWVyOiAlbHUgKCVsZCkgXG4iLAorCQkJCQkodW5zaWduZWQgbG9uZylyZXMsICpkZWx0YXRzYyk7CisJCSpkZWx0YXRzYyA9IChsb25nKXJlczsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU3OSw3ICs1NTIsNyBAQAogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOwogCXZvaWQgKCpyZWFsX2hhbmRsZXIpKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldik7CiAJdW5zaWduZWQgbG9uZyBkZWx0YWo7Ci0JbG9uZyBkZWx0YTsKKwlsb25nIGRlbHRhLCBkZWx0YXRzYzsKIAlpbnQgcG1fcmVmZXJlbmNlZCA9IDA7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtNjA5LDkgKzU4MiwxMSBAQAogCWRlbHRhID0gbGFwaWNfY2FsX3QxIC0gbGFwaWNfY2FsX3QyOwogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBsYXBpYyBkZWx0YSA9ICVsZFxuIiwgZGVsdGEpOwogCisJZGVsdGF0c2MgPSAobG9uZykobGFwaWNfY2FsX3RzYzIgLSBsYXBpY19jYWxfdHNjMSk7CisKIAkvKiB3ZSB0cnVzdCB0aGUgUE0gYmFzZWQgY2FsaWJyYXRpb24gaWYgcG9zc2libGUgKi8KIAlwbV9yZWZlcmVuY2VkID0gIWNhbGlicmF0ZV9ieV9wbXRpbWVyKGxhcGljX2NhbF9wbTIgLSBsYXBpY19jYWxfcG0xLAotCQkJCQkmZGVsdGEpOworCQkJCQkmZGVsdGEsICZkZWx0YXRzYyk7CiAKIAkvKiBDYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLwogCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhkZWx0YSwgVElDS19OU0VDICogTEFQSUNfQ0FMX0xPT1BTLApAQCAtNjI5LDExICs2MDQsMTAgQEAKIAkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCk7CiAKIAlpZiAoY3B1X2hhc190c2MpIHsKLQkJZGVsdGEgPSAobG9uZykobGFwaWNfY2FsX3RzYzIgLSBsYXBpY19jYWxfdHNjMSk7CiAJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIENQVSBjbG9jayBzcGVlZCBpcyAiCiAJCQkgICAgIiVsZC4lMDRsZCBNSHouXG4iLAotCQkJICAgIChkZWx0YSAvIExBUElDX0NBTF9MT09QUykgLyAoMTAwMDAwMCAvIEhaKSwKLQkJCSAgICAoZGVsdGEgLyBMQVBJQ19DQUxfTE9PUFMpICUgKDEwMDAwMDAgLyBIWikpOworCQkJICAgIChkZWx0YXRzYyAvIExBUElDX0NBTF9MT09QUykgLyAoMTAwMDAwMCAvIEhaKSwKKwkJCSAgICAoZGVsdGF0c2MgLyBMQVBJQ19DQUxfTE9PUFMpICUgKDEwMDAwMDAgLyBIWikpOwogCX0KIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGhvc3QgYnVzIGNsb2NrIHNwZWVkIGlzICIKQEAgLTk5MSwxMSArOTY1LDExIEBACiAJICovCiAJcmVnMCA9IGFwaWNfcmVhZChBUElDX0lEKTsKIAlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIEFQSUNfSURfTUFTSyk7CisJYXBpY193cml0ZShBUElDX0lELCByZWcwIF4gYXBpYy0+YXBpY19pZF9tYXNrKTsKIAlyZWcxID0gYXBpY19yZWFkKEFQSUNfSUQpOwogCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMSk7CiAJYXBpY193cml0ZShBUElDX0lELCByZWcwKTsKLQlpZiAocmVnMSAhPSAocmVnMCBeIEFQSUNfSURfTUFTSykpCisJaWYgKHJlZzEgIT0gKHJlZzAgXiBhcGljLT5hcGljX2lkX21hc2spKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0xMDg5LDcgKzEwNjMsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGVzcl9kaXNhYmxlKSB7CisJaWYgKGFwaWMtPmRpc2FibGVfZXNyKSB7CiAJCS8qCiAJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgogCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQpAQCAtMTEzMCw5ICsxMTA0LDE0IEBACiAJdW5zaWduZWQgaW50IHZhbHVlOwogCWludCBpLCBqOwogCisJaWYgKGRpc2FibGVfYXBpYykgeworCQlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKKwkJcmV0dXJuOworCX0KKwogI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBQb3VuZCB0aGUgRVNSIHJlYWxseSBoYXJkIG92ZXIgdGhlIGhlYWQgd2l0aCBhIGJpZyBoYW1tZXIgLSBtYmxpZ2ggKi8KLQlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpICYmIGVzcl9kaXNhYmxlKSB7CisJaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSAmJiBhcGljLT5kaXNhYmxlX2VzcikgewogCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKIAkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwpAQCAtMTE0Niw3ICsxMTI1LDcgQEAKIAkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCiAJICogVGhpcyBpcyBtZWFuaW5nbGVzcyBpbiBjbHVzdGVyZWQgYXBpYyBtb2RlLCBzbyB3ZSBza2lwIGl0LgogCSAqLwotCWlmICghYXBpY19pZF9yZWdpc3RlcmVkKCkpCisJaWYgKCFhcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQoKSkKIAkJQlVHKCk7CiAKIAkvKgpAQCAtMTE1NCw3ICsxMTMzLDcgQEAKIAkgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAogCSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCiAJICovCi0JaW5pdF9hcGljX2xkcigpOworCWFwaWMtPmluaXRfYXBpY19sZHIoKTsKIAogCS8qCiAJICogU2V0IFRhc2sgUHJpb3JpdHkgdG8gJ2FjY2VwdCBhbGwnLiBXZSBuZXZlciBjaGFuZ2UgdGhpcwpAQCAtMTI4MiwxNyArMTI2MSwxMiBAQAogCWFwaWNfcG1fYWN0aXZhdGUoKTsKIH0KIAotI2lmZGVmIEhBVkVfWDJBUElDCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCiB7Ci0JaW50IG1zciwgbXNyMjsKLQotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOwotCi0JaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpIHsKKwlpZiAoeDJhcGljX2VuYWJsZWQoKSkgewogCQlwcl9pbmZvKCJ4MmFwaWMgZW5hYmxlZCBieSBCSU9TLCBzd2l0Y2hpbmcgdG8geDJhcGljIG9wc1xuIik7CiAJCXgyYXBpY19wcmVlbmFibGVkID0geDJhcGljID0gMTsKLQkJYXBpY19vcHMgPSAmeDJhcGljX29wczsKIAl9CiB9CiAKQEAgLTEzMDAsNiArMTI3NCw5IEBACiB7CiAJaW50IG1zciwgbXNyMjsKIAorCWlmICgheDJhcGljKQorCQlyZXR1cm47CisKIAlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKIAlpZiAoIShtc3IgJiBYMkFQSUNfRU5BQkxFKSkgewogCQlwcl9pbmZvKCJFbmFibGluZyB4MmFwaWNcbiIpOwpAQCAtMTM2Myw3ICsxMzQwLDYgQEAKIAogCWlmICgheDJhcGljKSB7CiAJCXgyYXBpYyA9IDE7Ci0JCWFwaWNfb3BzID0gJngyYXBpY19vcHM7CiAJCWVuYWJsZV94MmFwaWMoKTsKIAl9CiAKQEAgLTE0MDEsNyArMTM3Nyw3IEBACiAKIAlyZXR1cm47CiB9Ci0jZW5kaWYgLyogSEFWRV9YMkFQSUMgKi8KKyNlbmRpZiAvKiBDT05GSUdfWDg2X1gyQVBJQyAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogLyoKQEAgLTE1MzIsNyArMTUwOCw3IEBACiAgKi8KIHZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQogewotI2lmZGVmIEhBVkVfWDJBUElDCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIAlpZiAoeDJhcGljKSB7CiAJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwogCQlyZXR1cm47CkBAIC0xNTcwLDExICsxNTQ2LDExIEBACiAKIGludCBfX2luaXQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoZGlzYWJsZV9hcGljKSB7CiAJCXByX2luZm8oIkFwaWMgZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQorI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoIWNwdV9oYXNfYXBpYykgewogCQlkaXNhYmxlX2FwaWMgPSAxOwogCQlwcl9pbmZvKCJBcGljIGRpc2FibGVkIGJ5IEJJT1NcbiIpOwpAQCAtMTU5NiwxMSArMTU3Miw5IEBACiAJfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX1gyQVBJQwogCWVuYWJsZV9JUl94MmFwaWMoKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfNjQKLQlzZXR1cF9hcGljX3JvdXRpbmcoKTsKKwlkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZygpOwogI2VuZGlmCiAKIAl2ZXJpZnlfbG9jYWxfQVBJQygpOwpAQCAtMTYyMSwzNSArMTU5NSwzMSBAQAogCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOwogCXNldHVwX2xvY2FsX0FQSUMoKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAkvKgogCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQwotCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgdmVjdG9yIG9uIEJQCisJICogV2UgbmVlZCBjbGVhcl9JT19BUElDIGJlZm9yZSBlbmFibGluZyBlcnJvciB2ZWN0b3IKIAkgKi8KIAlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCiAJCWVuYWJsZV9JT19BUElDKCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyB8fCBza2lwX2lvYXBpY19zZXR1cCB8fCAhbnJfaW9hcGljcykKLSNlbmRpZgotCQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKIAllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCiAJCXNldHVwX0lPX0FQSUMoKTsKLSMgaWZkZWYgQ09ORklHX1g4Nl82NAotCWVsc2UKKwllbHNlIHsKIAkJbnJfaW9hcGljcyA9IDA7Ci0jIGVuZGlmCisJCWxvY2FsaXNlX25taV93YXRjaGRvZygpOworCX0KKyNlbHNlCisJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKLQljaGVja19ubWlfd2F0Y2hkb2coKTsKLSNlbHNlCiAJc2V0dXBfYm9vdF9jbG9jaygpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljaGVja19ubWlfd2F0Y2hkb2coKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC0xNzM4LDcgKzE3MDgsOCBAQAogCQlvdXRiKDB4MDEsIDB4MjMpOwogCX0KICNlbmRpZgotCWVuYWJsZV9hcGljX21vZGUoKTsKKwlpZiAoYXBpYy0+ZW5hYmxlX2FwaWNfbW9kZSkKKwkJYXBpYy0+ZW5hYmxlX2FwaWNfbW9kZSgpOwogfQogCiAvKioKQEAgLTE4NzYsMjkgKzE4NDcsMzkgQEAKIAl9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLwotCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCkpIHsKLQkJdTE2ICpjcHVfdG9fYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpOwotCQl1MTYgKmJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCi0JCWNwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKLQkJYmlvc19jcHVfYXBpY2lkW2NwdV0gPSBhcGljaWQ7Ci0JfSBlbHNlIHsKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKLQkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCX0KKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwllYXJseV9wZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOworCWVhcmx5X3Blcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKICNlbmRpZgogCiAJc2V0X2NwdV9wb3NzaWJsZShjcHUsIHRydWUpOwogCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQogewogCXJldHVybiByZWFkX2FwaWNfaWQoKTsKIH0KKwordm9pZCBkZWZhdWx0X2luaXRfYXBpY19sZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CisJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKK2ludCBkZWZhdWx0X2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJcmV0dXJuIGFwaWNpZF8yX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQogI2VuZGlmCiAKIC8qCkBAIC0xOTc2LDcgKzE5NTcsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0jaWZkZWYgSEFWRV9YMkFQSUMKKyNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwogCWlmICh4MmFwaWMpCiAJCWVuYWJsZV94MmFwaWMoKTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzM4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEphbWVzIENsZXZlcmRvbiwgSUJNLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqCisgKiBGbGF0IEFQSUMgc3ViYXJjaCBjb2RlLgorICoKKyAqIEhhY2tlZCBmb3IgeDg2LTY0IGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tIGkzODYgYXJjaGl0ZWN0dXJlIGNvZGUgYnkKKyAqIE1hcnRpbiBCbGlnaCwgQW5kaSBLbGVlbiwgSmFtZXMgQm90dG9tbGV5LCBKb2huIFN0dWx0eiwgYW5kCisgKiBKYW1lcyBDbGV2ZXJkb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9pcGkuaD4KKworI2lmZGVmIENPTkZJR19BQ1BJCisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmZsYXRfdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1X29ubGluZV9tYXNrOworfQorCitzdGF0aWMgdm9pZCBmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOworfQorCisvKgorICogU2V0IHVwIHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELgorICoKKyAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCisgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAorICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KKyAqLworc3RhdGljIHZvaWQgZmxhdF9pbml0X2FwaWNfbGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBudW0sIGlkOworCisJbnVtID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlkID0gMVVMIDw8IG51bTsKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9GTEFUKTsKKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIpICYgfkFQSUNfTERSX01BU0s7CisJdmFsIHw9IFNFVF9BUElDX0xPR0lDQUxfSUQoaWQpOworCWFwaWNfd3JpdGUoQVBJQ19MRFIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZmxhdF9zZW5kX0lQSV9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fZGVmYXVsdF9zZW5kX0lQSV9kZXN0X2ZpZWxkKG1hc2ssIHZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGZsYXRfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07CisKKwlfZmxhdF9zZW5kX0lQSV9tYXNrKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkCisgZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoY3B1IDwgQklUU19QRVJfTE9ORykKKwkJY2xlYXJfYml0KGNwdSwgJm1hc2spOworCisJX2ZsYXRfc2VuZF9JUElfbWFzayhtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBmbGF0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworI2lmZGVmCUNPTkZJR19IT1RQTFVHX0NQVQorCWludCBob3RwbHVnID0gMTsKKyNlbHNlCisJaW50IGhvdHBsdWcgPSAwOworI2VuZGlmCisJaWYgKGhvdHBsdWcgfHwgdmVjdG9yID09IE5NSV9WRUNUT1IpIHsKKwkJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1bWFza19vZihjcHUpKSkgeworCQkJdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdV9vbmxpbmVfbWFzaylbMF07CisKKwkJCWlmIChjcHUgPCBCSVRTX1BFUl9MT05HKQorCQkJCWNsZWFyX2JpdChjcHUsICZtYXNrKTsKKworCQkJX2ZsYXRfc2VuZF9JUElfbWFzayhtYXNrLCB2ZWN0b3IpOworCQl9CisJfSBlbHNlIGlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKKwkJX19kZWZhdWx0X3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExCVVQsCisJCQkJCSAgICB2ZWN0b3IsIGFwaWMtPmRlc3RfbG9naWNhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbGF0X3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQoreworCWlmICh2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikgeworCQlmbGF0X3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworCX0gZWxzZSB7CisJCV9fZGVmYXVsdF9zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMSU5DLAorCQkJCQkgICAgdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmbGF0X2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwlpZCA9ICgoKHgpPj4yNCkgJiAweEZGdSk7CisKKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKK3sKKwl1bnNpZ25lZCBsb25nIHg7CisKKwl4ID0gKChpZCAmIDB4RkZ1KTw8MjQpOworCXJldHVybiB4OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJlYWRfeGFwaWNfaWQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwlpZCA9IGZsYXRfZ2V0X2FwaWNfaWQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBpbnQgZmxhdF9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KHJlYWRfeGFwaWNfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazEgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOworCXVuc2lnbmVkIGxvbmcgbWFzazIgPSBjcHVtYXNrX2JpdHMoYW5kbWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOworCisJcmV0dXJuIG1hc2sxICYgbWFzazI7Cit9CisKK3N0YXRpYyBpbnQgZmxhdF9waHlzX3BrZ19pZChpbnQgaW5pdGlhbF9hcGljX2lkLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSA+PiBpbmRleF9tc2I7Cit9CisKK3N0cnVjdCBhcGljIGFwaWNfZmxhdCA9ICB7CisJLm5hbWUJCQkJPSAiZmxhdCIsCisJLnByb2JlCQkJCT0gTlVMTCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSBmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2ssCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBmbGF0X2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0xvd2VzdFByaW8sCisJLmlycV9kZXN0X21vZGUJCQk9IDEsIC8qIGxvZ2ljYWwgKi8KKworCS50YXJnZXRfY3B1cwkJCT0gZmxhdF90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDAsCisJLmRlc3RfbG9naWNhbAkJCT0gQVBJQ19ERVNUX0xPR0lDQUwsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IE5VTEwsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IE5VTEwsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IGZsYXRfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gTlVMTCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IE5VTEwsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBOVUxMLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gTlVMTCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gTlVMTCwKKwkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IE5VTEwsCisJLmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQJPSBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IGZsYXRfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IE5VTEwsCisKKwkuZ2V0X2FwaWNfaWQJCQk9IGZsYXRfZ2V0X2FwaWNfaWQsCisJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGdSA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gZmxhdF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IGZsYXRfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0gZmxhdF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IGZsYXRfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBhcGljX3NlbmRfSVBJX3NlbGYsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19MT1csCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0hJR0gsCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gTlVMTCwKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBOVUxMLAorCisJLnJlYWQJCQkJPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKKwkud3JpdGUJCQkJPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCisJLmljcl9yZWFkCQkJPSBuYXRpdmVfYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlCQkJPSBuYXRpdmVfYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV9hcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCit9OworCisvKgorICogUGh5c2ZsYXQgbW9kZSBpcyB1c2VkIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiA4IENQVXMgb24gYSBBTUQgc3lzdGVtLgorICogV2UgY2Fubm90IHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IGluIHRoaXMgY2FzZSBiZWNhdXNlIHRoZSBtYXNrCisgKiBvdmVyZmxvd3MsIHNvIHVzZSBwaHlzaWNhbCBtb2RlLgorICovCitzdGF0aWMgaW50IHBoeXNmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisjaWZkZWYgQ09ORklHX0FDUEkKKwkvKgorCSAqIFF1aXJrOiBzb21lIHg4Nl82NCBtYWNoaW5lcyBjYW4gb25seSB1c2UgcGh5c2ljYWwgQVBJQyBtb2RlCisJICogcmVnYXJkbGVzcyBvZiBob3cgbWFueSBwcm9jZXNzb3JzIGFyZSBwcmVzZW50ICh4ODZfNjQgRVM3MDAwCisJICogaXMgYW4gZXhhbXBsZSkuCisJICovCisJaWYgKGFjcGlfZ2JsX0ZBRFQuaGVhZGVyLnJldmlzaW9uID4gRkFEVDJfUkVWSVNJT05fSUQgJiYKKwkJKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInN5c3RlbSBBUElDIG9ubHkgY2FuIHVzZSBwaHlzaWNhbCBmbGF0Iik7CisJCXJldHVybiAxOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcGh5c2ZsYXRfdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1X29ubGluZV9tYXNrOworfQorCitzdGF0aWMgdm9pZCBwaHlzZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCit7CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKK30KKworc3RhdGljIHZvaWQgcGh5c2ZsYXRfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfcGh5cyhjcHVtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBwaHlzZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJCSAgICAgIGludCB2ZWN0b3IpCit7CisJZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfcGh5cyhjcHVtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBwaHlzZmxhdF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfcGh5cyhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQoreworCXBoeXNmbGF0X3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBoeXNmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOworCWlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorcGh5c2ZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykgeworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCisJCQlicmVhazsKKwl9CisJaWYgKGNwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCisJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0cnVjdCBhcGljIGFwaWNfcGh5c2ZsYXQgPSAgeworCisJLm5hbWUJCQkJPSAicGh5c2ljYWwgZmxhdCIsCisJLnByb2JlCQkJCT0gTlVMTCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSBwaHlzZmxhdF9hY3BpX21hZHRfb2VtX2NoZWNrLAorCS5hcGljX2lkX3JlZ2lzdGVyZWQJCT0gZmxhdF9hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9GaXhlZCwKKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMCwgLyogcGh5c2ljYWwgKi8KKworCS50YXJnZXRfY3B1cwkJCT0gcGh5c2ZsYXRfdGFyZ2V0X2NwdXMsCisJLmRpc2FibGVfZXNyCQkJPSAwLAorCS5kZXN0X2xvZ2ljYWwJCQk9IDAsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IE5VTEwsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IE5VTEwsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gcGh5c2ZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS8qIG5vdCBuZWVkZWQsIGJ1dCBzaG91bGRuJ3QgaHVydDogKi8KKwkuaW5pdF9hcGljX2xkcgkJCT0gZmxhdF9pbml0X2FwaWNfbGRyLAorCisJLmlvYXBpY19waHlzX2lkX21hcAkJPSBOVUxMLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gTlVMTCwKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gTlVMTCwKKwkuYXBpY2lkX3RvX25vZGUJCQk9IE5VTEwsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBOVUxMLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBOVUxMLAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKKwkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLAorCS5waHlzX3BrZ19pZAkJCT0gZmxhdF9waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0gZmxhdF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IHNldF9hcGljX2lkLAorCS5hcGljX2lkX21hc2sJCQk9IDB4RkZ1IDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBwaHlzZmxhdF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gcGh5c2ZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSBwaHlzZmxhdF9zZW5kX0lQSV9tYXNrLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBwaHlzZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0gcGh5c2ZsYXRfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSBwaHlzZmxhdF9zZW5kX0lQSV9hbGwsCisJLnNlbmRfSVBJX3NlbGYJCQk9IGFwaWNfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBOVUxMLAorCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDZlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYwpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIEFQSUMgZHJpdmVyIGZvciAiYmlnc21wIiB4QVBJQyBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiA4IHZpcnR1YWwgQ1BVcy4KKyAqCisgKiBEcml2ZXMgdGhlIGxvY2FsIEFQSUMgaW4gImNsdXN0ZXJlZCBtb2RlIi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCitzdGF0aWMgdW5zaWduZWQgYmlnc21wX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlyZXR1cm4gKHggPj4gMjQpICYgMHhGRjsKK30KKworc3RhdGljIGludCBiaWdzbXBfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjcHVtYXNrX3QgKmJpZ3NtcF90YXJnZXRfY3B1cyh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gJmNwdV9vbmxpbmVfbWFwOworI2Vsc2UKKwlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KDApOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJpZ3NtcF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmlnc21wX2NoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbGRyKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIGlkOworCisJdmFsID0gYXBpY19yZWFkKEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOworCWlkID0gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpOworCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGlkKTsKKworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCisgKgorICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKyAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorICovCitzdGF0aWMgdm9pZCBiaWdzbXBfaW5pdF9hcGljX2xkcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9GTEFUKTsKKwl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYmlnc21wX3NldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8KKwkJIkVuYWJsaW5nIEFQSUMgbW9kZTogIFBoeXNmbGF0LiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQlucl9pb2FwaWNzKTsKK30KKworc3RhdGljIGludCBiaWdzbXBfYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworCXJldHVybiBhcGljaWRfMl9ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKK30KKworc3RhdGljIGludCBiaWdzbXBfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmIChtcHNfY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIChpbnQpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisKKwlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHBoeXNpZF9tYXNrX3QgYmlnc21wX2FwaWNpZF90b19jcHVfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCit7CisJcmV0dXJuIHBoeXNpZF9tYXNrX29mX3BoeXNpZChwaHlzX2FwaWNpZCk7Cit9CisKKy8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCitzdGF0aWMgaW5saW5lIGludCBiaWdzbXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gY3B1X3BoeXNpY2FsX2lkKGNwdSk7Cit9CisKK3N0YXRpYyBwaHlzaWRfbWFza190IGJpZ3NtcF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3sKKwkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4RkZMKTsKK30KKworc3RhdGljIGludCBiaWdzbXBfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiAxOworfQorCisvKiBBcyB3ZSBhcmUgdXNpbmcgc2luZ2xlIENQVSBhcyBkZXN0aW5hdGlvbiwgcGljayBvbmx5IG9uZSBDUFUgaGVyZSAqLworc3RhdGljIHVuc2lnbmVkIGludCBiaWdzbXBfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3sKKwlyZXR1cm4gYmlnc21wX2NwdV90b19sb2dpY2FsX2FwaWNpZChmaXJzdF9jcHUoKmNwdW1hc2spKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBiaWdzbXBfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQoreworCWludCBjcHU7CisKKwkvKgorCSAqIFdlJ3JlIHVzaW5nIGZpeGVkIElSUSBkZWxpdmVyeSwgY2FuIG9ubHkgcmV0dXJuIG9uZSBwaHlzIEFQSUMgSUQuCisJICogTWF5IGFzIHdlbGwgYmUgdGhlIGZpcnN0LgorCSAqLworCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBjcHVtYXNrLCBhbmRtYXNrKSB7CisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKKworCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgaW50IGJpZ3NtcF9waHlzX3BrZ19pZChpbnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKK3sKKwlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaWdzbXBfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfcGh5cyhtYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBiaWdzbXBfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX3BoeXMoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBiaWdzbXBfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJYmlnc21wX3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOworfQorCitzdGF0aWMgaW50IGRtaV9iaWdzbXA7IC8qIGNhbiBiZSBzZXQgYnkgZG1pIHNjYW5uZXJzICovCisKK3N0YXRpYyBpbnQgaHBfaHRfYmlnc21wKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkKQoreworCXByaW50ayhLRVJOX05PVElDRSAiJXMgZGV0ZWN0ZWQ6IGZvcmNlIHVzZSBvZiBhcGljPWJpZ3NtcFxuIiwgZC0+aWRlbnQpOworCWRtaV9iaWdzbXAgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGJpZ3NtcF9kbWlfdGFibGVbXSA9IHsKKwl7IGhwX2h0X2JpZ3NtcCwgIkhQIFByb0xpYW50IERMNzYwIEcyIiwKKwkJewlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiSFAiKSwKKwkJCURNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCAiUDQ0LSIpLAorCQl9CisJfSwKKworCXsgaHBfaHRfYmlnc21wLCAiSFAgUHJvTGlhbnQgREw3NDAiLAorCQl7CURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9CSU9TX1ZFUlNJT04sICJQNDctIiksCisJCX0KKwl9LAorCXsgfSAvKiBOVUxMIGVudHJ5IHN0b3BzIERNSSBzY2FubmluZyAqLworfTsKKworc3RhdGljIHZvaWQgYmlnc21wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCit7CisJY3B1c19jbGVhcigqcmV0bWFzayk7CisJY3B1X3NldChjcHUsICpyZXRtYXNrKTsKK30KKworc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKK3sKKwlpZiAoZGVmX3RvX2JpZ3NtcCkKKwkJZG1pX2JpZ3NtcCA9IDE7CisJZWxzZQorCQlkbWlfY2hlY2tfc3lzdGVtKGJpZ3NtcF9kbWlfdGFibGUpOworCisJcmV0dXJuIGRtaV9iaWdzbXA7Cit9CisKK3N0cnVjdCBhcGljIGFwaWNfYmlnc21wID0geworCisJLm5hbWUJCQkJPSAiYmlnc21wIiwKKwkucHJvYmUJCQkJPSBwcm9iZV9iaWdzbXAsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0gTlVMTCwKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IGJpZ3NtcF9hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9GaXhlZCwKKwkvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBDUFU6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDAsCisKKwkudGFyZ2V0X2NwdXMJCQk9IGJpZ3NtcF90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDEsCisJLmRlc3RfbG9naWNhbAkJCT0gMCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gYmlnc21wX2NoZWNrX2FwaWNpZF91c2VkLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBiaWdzbXBfY2hlY2tfYXBpY2lkX3ByZXNlbnQsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gYmlnc21wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gYmlnc21wX2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGJpZ3NtcF9pb2FwaWNfcGh5c19pZF9tYXAsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBiaWdzbXBfc2V0dXBfYXBpY19yb3V0aW5nLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAorCS5hcGljaWRfdG9fbm9kZQkJCT0gYmlnc21wX2FwaWNpZF90b19ub2RlLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gYmlnc21wX2NwdV90b19sb2dpY2FsX2FwaWNpZCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGJpZ3NtcF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBiaWdzbXBfYXBpY2lkX3RvX2NwdV9wcmVzZW50LAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGJpZ3NtcF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IE5VTEwsCisJLnBoeXNfcGtnX2lkCQkJPSBiaWdzbXBfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IE5VTEwsCisKKwkuZ2V0X2FwaWNfaWQJCQk9IGJpZ3NtcF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRiA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSBiaWdzbXBfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSBiaWdzbXBfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gTlVMTCwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSBiaWdzbXBfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSBiaWdzbXBfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBkZWZhdWx0X3NlbmRfSVBJX3NlbGYsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19MT1csCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0hJR0gsCisKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBkZWZhdWx0X3dhaXRfZm9yX2luaXRfZGVhc3NlcnQsCisKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBkZWZhdWx0X2lucXVpcmVfcmVtb3RlX2FwaWMsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTg4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYwpAQCAtMCwwICsxLDc4MCBAQAorLyoKKyAqIFdyaXR0ZW4gYnk6IEdhcnJ5IEZvcnNncmVuLCBVbmlzeXMgQ29ycG9yYXRpb24KKyAqICAgICAgICAgICAgIE5hdGFsaWUgUHJvdGFzZXZpY2gsIFVuaXN5cyBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSB0byBjb25maWd1cmUgYW5kIGludGVyZmFjZQorICogd2l0aCBVbmlzeXMgRVM3MDAwIHNlcmllcyBoYXJkd2FyZSBzeXN0ZW0gbWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVW5pc3lzIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICoKKyAqICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29udGFjdCBpbmZvcm1hdGlvbjogVW5pc3lzIENvcnBvcmF0aW9uLCBUb3duc2hpcCBMaW5lICYgVW5pb24gTWVldGluZworICogUm9hZHMtQSwgVW5pc3lzIFdheSwgQmx1ZSBCZWxsLCBQZW5uc3lsdmFuaWEsIDE5NDI0LCBvcjoKKyAqCisgKiBodHRwOi8vd3d3LnVuaXN5cy5jb20KKyAqLworI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCisvKgorICogRVM3MDAwIGNoaXBzZXRzCisgKi8KKworI2RlZmluZSBOT05fVU5JU1lTCQkJMAorI2RlZmluZSBFUzcwMDBfQ0xBU1NJQwkJCTEKKyNkZWZpbmUgRVM3MDAwX1pPUlJPCQkJMgorCisjZGVmaW5lCU1JUF9SRUcJCQkJMQorI2RlZmluZQlNSVBfUFNBSV9SRUcJCQk0CisKKyNkZWZpbmUJTUlQX0JVU1kJCQkxCisjZGVmaW5lCU1JUF9TUElOCQkJMHhmMDAwMAorI2RlZmluZQlNSVBfVkFMSUQJCQkweDAxMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUJTUlQX1NXX0FQSUMJCQkweDEwMjBiCisKKyNkZWZpbmUJTUlQX1BPUlQodmFsKQkJCSgodmFsID4+IDMyKSAmIDB4ZmZmZikKKworI2RlZmluZQlNSVBfUkRfTE8odmFsKQkJCSh2YWwgJiAweGZmZmZmZmZmKQorCitzdHJ1Y3QgbWlwX3JlZyB7CisJdW5zaWduZWQgbG9uZyBsb25nCQlvZmZfMHgwMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW9mZl8weDA4OworCXVuc2lnbmVkIGxvbmcgbG9uZwkJb2ZmXzB4MTA7CisJdW5zaWduZWQgbG9uZyBsb25nCQlvZmZfMHgxODsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW9mZl8weDIwOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJb2ZmXzB4Mjg7CisJdW5zaWduZWQgbG9uZyBsb25nCQlvZmZfMHgzMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW9mZl8weDM4OworfTsKKworc3RydWN0IG1pcF9yZWdfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBsb25nCQltaXBfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCWRlbGl2ZXJ5X2luZm87CisJdW5zaWduZWQgbG9uZyBsb25nCQlob3N0X3JlZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCW1pcF9yZWc7Cit9OworCitzdHJ1Y3QgcHNhaSB7CisJdW5zaWduZWQgbG9uZyBsb25nCQllbnRyeV90eXBlOworCXVuc2lnbmVkIGxvbmcgbG9uZwkJYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCWJlcF9hZGRyOworfTsKKworI2lmZGVmIENPTkZJR19BQ1BJCisKK3N0cnVjdCBlczcwMDBfb2VtX3RhYmxlIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIJSGVhZGVyOworCXUzMgkJCQlPRU1UYWJsZUFkZHI7CisJdTMyCQkJCU9FTVRhYmxlU2l6ZTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQkJb2VtX2FkZHJYOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCQlvZW1fc2l6ZTsKKworI2VuZGlmCisKKy8qCisgKiBFUzcwMDAgR2xvYmFscworICovCisKK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nCQkqcHNhaTsKK3N0YXRpYyBzdHJ1Y3QgbWlwX3JlZwkJCSptaXBfcmVnOworc3RhdGljIHN0cnVjdCBtaXBfcmVnCQkJKmhvc3RfcmVnOworc3RhdGljIGludCAJCQkJbWlwX3BvcnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJCW1pcF9hZGRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCQlob3N0X2FkZHI7CisKK2ludAkJCQkJZXM3MDAwX3BsYXQ7CisKKy8qCisgKiBHU0kgb3ZlcnJpZGUgZm9yIEVTNzAwMCBwbGF0Zm9ybXMuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAkJCWJhc2U7CisKK3N0YXRpYyBpbnQKK2VzNzAwMF9yZW5hbWVfZ3NpKGludCBpb2FwaWMsIGludCBnc2kpCit7CisJaWYgKGVzNzAwMF9wbGF0ID09IEVTNzAwMF9aT1JSTykKKwkJcmV0dXJuIGdzaTsKKworCWlmICghYmFzZSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykKKwkJCWJhc2UgKz0gbnJfaW9hcGljX3JlZ2lzdGVyc1tpXTsKKwl9CisKKwlpZiAoIWlvYXBpYyAmJiAoZ3NpIDwgMTYpKQorCQlnc2kgKz0gYmFzZTsKKworCXJldHVybiBnc2k7Cit9CisKK3N0YXRpYyBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX21pcChpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGVpcCkKK3sKKwl1bnNpZ25lZCBsb25nIHZlY3QgPSAwLCBwc2FpdmFsID0gMDsKKworCWlmIChwc2FpID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXZlY3QgPSAoKHVuc2lnbmVkIGxvbmcpX19wYShlaXApLzB4MTAwMCkgPDwgMTY7CisJcHNhaXZhbCA9ICgweDEwMDAwMDAgfCB2ZWN0IHwgY3B1KTsKKworCXdoaWxlICgqcHNhaSAmIDB4MTAwMDAwMCkKKwkJOworCisJKnBzYWkgPSBwc2FpdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX2FwaWNfaXNfY2x1c3Rlcih2b2lkKQoreworCS8qIE1QRU5USVVNSUlJICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID49IDcgfHwgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPD0gMTEpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF91bmlzeXModm9pZCkKK3sKKwkvKgorCSAqIERldGVybWluZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgRVM3MDAwIGN1cnJlbnRseSBydW5uaW5nLgorCSAqCisJICogZXM3MDAwX3BsYXQgPSAxIGlmIHRoZSBtYWNoaW5lIGlzIGEgNXh4IEVTNzAwMCBib3gKKwkgKiBlczcwMDBfcGxhdCA9IDIgaWYgdGhlIG1hY2hpbmUgaXMgYSB4ODZfNjQgRVM3MDAwIGJveAorCSAqCisJICovCisJaWYgKCEoYm9vdF9jcHVfZGF0YS54ODYgPD0gMTUgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPD0gMikpCisJCWVzNzAwMF9wbGF0ID0gRVM3MDAwX1pPUlJPOworCWVsc2UKKwkJZXM3MDAwX3BsYXQgPSBFUzcwMDBfQ0xBU1NJQzsKKwlpb2FwaWNfcmVudW1iZXJfaXJxID0gZXM3MDAwX3JlbmFtZV9nc2k7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgT0VNIFRhYmxlOgorICovCitzdGF0aWMgaW50IHBhcnNlX3VuaXN5c19vZW0oY2hhciAqb2VtcHRyKQoreworCWludAkJCWk7CisJaW50IAkJCXN1Y2Nlc3MgPSAwOworCXVuc2lnbmVkIGNoYXIJCXR5cGUsIHNpemU7CisJdW5zaWduZWQgbG9uZwkJdmFsOworCWNoYXIJCQkqdHAgPSBOVUxMOworCXN0cnVjdCBwc2FpCQkqcHNhaXAgPSBOVUxMOworCXN0cnVjdCBtaXBfcmVnX2luZm8gCSptaTsKKwlzdHJ1Y3QgbWlwX3JlZwkJKmhvc3QsICptaXA7CisKKwl0cCA9IG9lbXB0cjsKKworCXRwICs9IDg7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDY7IGkrKykgeworCQl0eXBlID0gKnRwKys7CisJCXNpemUgPSAqdHArKzsKKwkJdHAgLT0gMjsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgTUlQX1JFRzoKKwkJCW1pID0gKHN0cnVjdCBtaXBfcmVnX2luZm8gKil0cDsKKwkJCXZhbCA9IE1JUF9SRF9MTyhtaS0+aG9zdF9yZWcpOworCQkJaG9zdF9hZGRyID0gdmFsOworCQkJaG9zdCA9IChzdHJ1Y3QgbWlwX3JlZyAqKXZhbDsKKwkJCWhvc3RfcmVnID0gX192YShob3N0KTsKKwkJCXZhbCA9IE1JUF9SRF9MTyhtaS0+bWlwX3JlZyk7CisJCQltaXBfcG9ydCA9IE1JUF9QT1JUKG1pLT5taXBfaW5mbyk7CisJCQltaXBfYWRkciA9IHZhbDsKKwkJCW1pcCA9IChzdHJ1Y3QgbWlwX3JlZyAqKXZhbDsKKwkJCW1pcF9yZWcgPSBfX3ZhKG1pcCk7CisJCQlwcl9kZWJ1ZygiZXM3MDAwX21pcGNmZzogaG9zdF9yZWcgPSAweCVseCBcbiIsCisJCQkJICh1bnNpZ25lZCBsb25nKWhvc3RfcmVnKTsKKwkJCXByX2RlYnVnKCJlczcwMDBfbWlwY2ZnOiBtaXBfcmVnID0gMHglbHggXG4iLAorCQkJCSAodW5zaWduZWQgbG9uZyltaXBfcmVnKTsKKwkJCXN1Y2Nlc3MrKzsKKwkJCWJyZWFrOworCQljYXNlIE1JUF9QU0FJX1JFRzoKKwkJCXBzYWlwID0gKHN0cnVjdCBwc2FpICopdHA7CisJCQlpZiAodHAgIT0gTlVMTCkgeworCQkJCWlmIChwc2FpcC0+YWRkcikKKwkJCQkJcHNhaSA9IF9fdmEocHNhaXAtPmFkZHIpOworCQkJCWVsc2UKKwkJCQkJcHNhaSA9IE5VTEw7CisJCQkJc3VjY2VzcysrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQl0cCArPSBzaXplOworCX0KKworCWlmIChzdWNjZXNzIDwgMikKKwkJZXM3MDAwX3BsYXQgPSBOT05fVU5JU1lTOworCWVsc2UKKwkJc2V0dXBfdW5pc3lzKCk7CisKKwlyZXR1cm4gZXM3MDAwX3BsYXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfQUNQSQorc3RhdGljIGludCBmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nICpvZW1fYWRkcikKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlciA9IE5VTEw7CisJc3RydWN0IGVzNzAwMF9vZW1fdGFibGUgKnRhYmxlOworCWFjcGlfc2l6ZSB0Ymxfc2l6ZTsKKwlhY3BpX3N0YXR1cyByZXQ7CisJaW50IGkgPSAwOworCisJZm9yICg7OykgeworCQlyZXQgPSBhY3BpX2dldF90YWJsZV93aXRoX3NpemUoIk9FTTEiLCBpKyssICZoZWFkZXIsICZ0Ymxfc2l6ZSk7CisJCWlmICghQUNQSV9TVUNDRVNTKHJldCkpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKCFtZW1jbXAoKGNoYXIgKikgJmhlYWRlci0+b2VtX2lkLCAiVU5JU1lTIiwgNikpCisJCQlicmVhazsKKworCQllYXJseV9hY3BpX29zX3VubWFwX21lbW9yeShoZWFkZXIsIHRibF9zaXplKTsKKwl9CisKKwl0YWJsZSA9ICh2b2lkICopaGVhZGVyOworCisJb2VtX2FkZHJYCT0gdGFibGUtPk9FTVRhYmxlQWRkcjsKKwlvZW1fc2l6ZQk9IHRhYmxlLT5PRU1UYWJsZVNpemU7CisKKwllYXJseV9hY3BpX29zX3VubWFwX21lbW9yeShoZWFkZXIsIHRibF9zaXplKTsKKworCSpvZW1fYWRkcgk9ICh1bnNpZ25lZCBsb25nKV9fYWNwaV9tYXBfdGFibGUob2VtX2FkZHJYLCBvZW1fc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdW5tYXBfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgb2VtX2FkZHIpCit7CisJaWYgKCFvZW1fYWRkcikKKwkJcmV0dXJuOworCisJX19hY3BpX3VubWFwX3RhYmxlKChjaGFyICopb2VtX2FkZHIsIG9lbV9zaXplKTsKK30KKworc3RhdGljIGludCBlczcwMDBfY2hlY2tfZHNkdCh2b2lkKQoreworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CisKKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X3RhYmxlX2hlYWRlcihBQ1BJX1NJR19EU0RULCAwLCAmaGVhZGVyKSkgJiYKKwkgICAgIXN0cm5jbXAoaGVhZGVyLm9lbV9pZCwgIlVOSVNZUyIsIDYpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlczcwMDBfYWNwaV9yZXQ7CisKKy8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KK3N0YXRpYyBpbnQgZXM3MDAwX2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJdW5zaWduZWQgbG9uZyBvZW1fYWRkciA9IDA7CisJaW50IGNoZWNrX2RzZHQ7CisJaW50IHJldCA9IDA7CisKKwkvKiBjaGVjayBkc2R0IGF0IGZpcnN0IHRvIGF2b2lkIGNsZWFyIGZpeF9tYXAgZm9yIG9lbV9hZGRyICovCisJY2hlY2tfZHNkdCA9IGVzNzAwMF9jaGVja19kc2R0KCk7CisKKwlpZiAoIWZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKCZvZW1fYWRkcikpIHsKKwkJaWYgKGNoZWNrX2RzZHQpIHsKKwkJCXJldCA9IHBhcnNlX3VuaXN5c19vZW0oKGNoYXIgKilvZW1fYWRkcik7CisJCX0gZWxzZSB7CisJCQlzZXR1cF91bmlzeXMoKTsKKwkJCXJldCA9IDE7CisJCX0KKwkJLyoKKwkJICogd2UgbmVlZCB0byB1bm1hcCBpdAorCQkgKi8KKwkJdW5tYXBfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKG9lbV9hZGRyKTsKKwl9CisKKwllczcwMDBfYWNwaV9yZXQgPSByZXQ7CisKKwlyZXR1cm4gcmV0ICYmICFlczcwMDBfYXBpY19pc19jbHVzdGVyKCk7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX2FjcGlfbWFkdF9vZW1fY2hlY2tfY2x1c3RlcihjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlpbnQgcmV0ID0gZXM3MDAwX2FjcGlfcmV0OworCisJcmV0dXJuIHJldCAmJiBlczcwMDBfYXBpY19pc19jbHVzdGVyKCk7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfQUNQSTogKi8KK3N0YXRpYyBpbnQgZXM3MDAwX2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXM3MDAwX2FjcGlfbWFkdF9vZW1fY2hlY2tfY2x1c3RlcihjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAhQ09ORklHX0FDUEkgKi8KKworc3RhdGljIHZvaWQgZXM3MDAwX3NwaW4oaW50IG4pCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGkrKyA8IG4pCisJCXJlcF9ub3AoKTsKK30KKworc3RhdGljIGludCBlczcwMDBfbWlwX3dyaXRlKHN0cnVjdCBtaXBfcmVnICptaXBfcmVnKQoreworCWludCBzdGF0dXMgPSAwOworCWludCBzcGluOworCisJc3BpbiA9IE1JUF9TUElOOworCXdoaWxlICgoaG9zdF9yZWctPm9mZl8weDM4ICYgTUlQX1ZBTElEKSAhPSAwKSB7CisJCWlmICgtLXNwaW4gPD0gMCkgeworCQkJV0FSTigxLAkiVGltZW91dCB3YWl0aW5nIGZvciBIb3N0IFZhbGlkIEZsYWdcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWVzNzAwMF9zcGluKE1JUF9TUElOKTsKKwl9CisKKwltZW1jcHkoaG9zdF9yZWcsIG1pcF9yZWcsIHNpemVvZihzdHJ1Y3QgbWlwX3JlZykpOworCW91dGIoMSwgbWlwX3BvcnQpOworCisJc3BpbiA9IE1JUF9TUElOOworCisJd2hpbGUgKChtaXBfcmVnLT5vZmZfMHgzOCAmIE1JUF9WQUxJRCkgPT0gMCkgeworCQlpZiAoLS1zcGluIDw9IDApIHsKKwkJCVdBUk4oMSwJIlRpbWVvdXQgd2FpdGluZyBmb3IgTUlQIFZhbGlkIEZsYWdcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWVzNzAwMF9zcGluKE1JUF9TUElOKTsKKwl9CisKKwlzdGF0dXMgPSAobWlwX3JlZy0+b2ZmXzB4MDAgJiAweGZmZmYwMDAwMDAwMDAwVUxMKSA+PiA0ODsKKwltaXBfcmVnLT5vZmZfMHgzOCAmPSB+TUlQX1ZBTElEOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgZXM3MDAwX2VuYWJsZV9hcGljX21vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgbWlwX3JlZyBlczcwMDBfbWlwX3JlZzsKKwlpbnQgbWlwX3N0YXR1czsKKworCWlmICghZXM3MDAwX3BsYXQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIkVTNzAwMDogRW5hYmxpbmcgQVBJQyBtb2RlLlxuIik7CisJbWVtc2V0KCZlczcwMDBfbWlwX3JlZywgMCwgc2l6ZW9mKHN0cnVjdCBtaXBfcmVnKSk7CisJZXM3MDAwX21pcF9yZWcub2ZmXzB4MDAgPSBNSVBfU1dfQVBJQzsKKwllczcwMDBfbWlwX3JlZy5vZmZfMHgzOCA9IE1JUF9WQUxJRDsKKworCXdoaWxlICgobWlwX3N0YXR1cyA9IGVzNzAwMF9taXBfd3JpdGUoJmVzNzAwMF9taXBfcmVnKSkgIT0gMCkKKwkJV0FSTigxLCAiQ29tbWFuZCBmYWlsZWQsIHN0YXR1cyA9ICV4XG4iLCBtaXBfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZXM3MDAwX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworfQorCisKK3N0YXRpYyB2b2lkIGVzNzAwMF93YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KGF0b21pY190ICpkZWFzc2VydCkKK3sKKwl3aGlsZSAoIWF0b21pY19yZWFkKGRlYXNzZXJ0KSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXM3MDAwX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlyZXR1cm4gKHggPj4gMjQpICYgMHhGRjsKK30KKworc3RhdGljIHZvaWQgZXM3MDAwX3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCit7CisJZGVmYXVsdF9zZW5kX0lQSV9tYXNrX3NlcXVlbmNlX3BoeXMobWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQgZXM3MDAwX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9waHlzKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQgZXM3MDAwX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQoreworCWVzNzAwMF9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIGludCBlczcwMDBfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjcHVtYXNrX3QgKnRhcmdldF9jcHVzX2NsdXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gJkNQVV9NQVNLX0FMTDsKK30KKworc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqZXM3MDAwX3RhcmdldF9jcHVzKHZvaWQpCit7CisJcmV0dXJuICZjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworZXM3MDAwX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiAwOworfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZXM3MDAwX2NoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2xkcihpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgaWQgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSk7CisKKwlyZXR1cm4gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCisgKgorICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMZFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKKyAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgorICovCitzdGF0aWMgdm9pZCBlczcwMDBfaW5pdF9hcGljX2xkcl9jbHVzdGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX0NMVVNURVIpOworCXZhbCA9IGNhbGN1bGF0ZV9sZHIoY3B1KTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBlczcwMDBfaW5pdF9hcGljX2xkcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBBUElDX0RGUl9GTEFUKTsKKwl2YWwgPSBjYWxjdWxhdGVfbGRyKGNwdSk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZXM3MDAwX3NldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworCWludCBhcGljID0gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcHJpbnRrKEtFUk5fSU5GTworCSAgIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiBVc2luZyAlZCBJL08gQVBJQ3MsIHRhcmdldCBjcHVzICVseFxuIiwKKwkJKGFwaWNfdmVyc2lvblthcGljXSA9PSAweDE0KSA/CisJCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwKKwkJbnJfaW9hcGljcywgY3B1c19hZGRyKCplczcwMDBfdGFyZ2V0X2NwdXMoKSlbMF0pOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBlczcwMDBfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmICghbXBzX2NwdSkKKwkJcmV0dXJuIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKKwllbHNlIGlmIChtcHNfY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIGludCBjcHVfaWQ7CisKK3N0YXRpYyBwaHlzaWRfbWFza190IGVzNzAwMF9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQoreworCXBoeXNpZF9tYXNrX3QgbWFzazsKKworCW1hc2sgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoY3B1X2lkKTsKKwkrK2NwdV9pZDsKKworCXJldHVybiBtYXNrOworfQorCisvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLworc3RhdGljIGludCBlczcwMDBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIGNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV07CisjZWxzZQorCXJldHVybiBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgcGh5c2lkX21hc2tfdCBlczcwMDBfaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCit7CisJLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCisJcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweGZmKTsKK30KKworc3RhdGljIGludCBlczcwMDBfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgY3B1X3BoeXNpY2FsX2FwaWNpZCkKK3sKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgcm91bmQgPSAwOworCWludCBjcHUsIHVuaW5pdGlhbGl6ZWRfdmFyKGFwaWNpZCk7CisKKwkvKgorCSAqIFRoZSBjcHVzIGluIHRoZSBtYXNrIG11c3QgYWxsIGJlIG9uIHRoZSBhcGljIGNsdXN0ZXIuCisJICovCisJZm9yX2VhY2hfY3B1KGNwdSwgY3B1bWFzaykgeworCQlpbnQgbmV3X2FwaWNpZCA9IGVzNzAwMF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKKworCQlpZiAocm91bmQgJiYgQVBJQ19DTFVTVEVSKGFwaWNpZCkgIT0gQVBJQ19DTFVTVEVSKG5ld19hcGljaWQpKSB7CisJCQlXQVJOKDEsICJOb3QgYSB2YWxpZCBtYXNrISIpOworCisJCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwkJfQorCQlhcGljaWQgPSBuZXdfYXBpY2lkOworCQlyb3VuZCsrOworCX0KKwlyZXR1cm4gYXBpY2lkOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqaW5tYXNrLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCit7CisJaW50IGFwaWNpZCA9IGVzNzAwMF9jcHVfdG9fbG9naWNhbF9hcGljaWQoMCk7CisJY3B1bWFza192YXJfdCBjcHVtYXNrOworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmY3B1bWFzaywgR0ZQX0FUT01JQykpCisJCXJldHVybiBhcGljaWQ7CisKKwljcHVtYXNrX2FuZChjcHVtYXNrLCBpbm1hc2ssIGFuZG1hc2spOworCWNwdW1hc2tfYW5kKGNwdW1hc2ssIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJYXBpY2lkID0gZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrKTsKKworCWZyZWVfY3B1bWFza192YXIoY3B1bWFzayk7CisKKwlyZXR1cm4gYXBpY2lkOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9waHlzX3BrZ19pZChpbnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKK3sKKwlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZXM3MDAwKHZvaWQpCit7CisJLyogcHJvYmVkIGxhdGVyIGluIG1wdGFibGUvQUNQSSBob29rcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9tcHNfcmV0Oworc3RhdGljIGludCBlczcwMDBfbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJY2hhciAqcHJvZHVjdGlkKQoreworCWludCByZXQgPSAwOworCisJaWYgKG1wYy0+b2VtcHRyKSB7CisJCXN0cnVjdCBtcGNfb2VtdGFibGUgKm9lbV90YWJsZSA9CisJCQkoc3RydWN0IG1wY19vZW10YWJsZSAqKW1wYy0+b2VtcHRyOworCisJCWlmICghc3RybmNtcChvZW0sICJVTklTWVMiLCA2KSkKKwkJCXJldCA9IHBhcnNlX3VuaXN5c19vZW0oKGNoYXIgKilvZW1fdGFibGUpOworCX0KKworCWVzNzAwMF9tcHNfcmV0ID0gcmV0OworCisJcmV0dXJuIHJldCAmJiAhZXM3MDAwX2FwaWNfaXNfY2x1c3RlcigpOworfQorCitzdGF0aWMgaW50IGVzNzAwMF9tcHNfb2VtX2NoZWNrX2NsdXN0ZXIoc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sCisJCWNoYXIgKnByb2R1Y3RpZCkKK3sKKwlpbnQgcmV0ID0gZXM3MDAwX21wc19yZXQ7CisKKwlyZXR1cm4gcmV0ICYmIGVzNzAwMF9hcGljX2lzX2NsdXN0ZXIoKTsKK30KKworc3RydWN0IGFwaWMgYXBpY19lczcwMDBfY2x1c3RlciA9IHsKKworCS5uYW1lCQkJCT0gImVzNzAwMCIsCisJLnByb2JlCQkJCT0gcHJvYmVfZXM3MDAwLAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IGVzNzAwMF9hY3BpX21hZHRfb2VtX2NoZWNrX2NsdXN0ZXIsCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBlczcwMDBfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfTG93ZXN0UHJpbywKKwkvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3M6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDEsCisKKwkudGFyZ2V0X2NwdXMJCQk9IHRhcmdldF9jcHVzX2NsdXN0ZXIsCisJLmRpc2FibGVfZXNyCQkJPSAxLAorCS5kZXN0X2xvZ2ljYWwJCQk9IDAsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IGVzNzAwMF9jaGVja19hcGljaWRfdXNlZCwKKwkuY2hlY2tfYXBpY2lkX3ByZXNlbnQJCT0gZXM3MDAwX2NoZWNrX2FwaWNpZF9wcmVzZW50LAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IGVzNzAwMF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IGVzNzAwMF9pbml0X2FwaWNfbGRyX2NsdXN0ZXIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGVzNzAwMF9pb2FwaWNfcGh5c19pZF9tYXAsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBlczcwMDBfc2V0dXBfYXBpY19yb3V0aW5nLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAorCS5hcGljaWRfdG9fbm9kZQkJCT0gZXM3MDAwX2FwaWNpZF90b19ub2RlLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gZXM3MDAwX2NwdV90b19sb2dpY2FsX2FwaWNpZCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGVzNzAwMF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBlczcwMDBfYXBpY2lkX3RvX2NwdV9wcmVzZW50LAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGVzNzAwMF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IGVzNzAwMF9lbmFibGVfYXBpY19tb2RlLAorCS5waHlzX3BrZ19pZAkJCT0gZXM3MDAwX3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBlczcwMDBfbXBzX29lbV9jaGVja19jbHVzdGVyLAorCisJLmdldF9hcGljX2lkCQkJPSBlczcwMDBfZ2V0X2FwaWNfaWQsCisJLnNldF9hcGljX2lkCQkJPSBOVUxMLAorCS5hcGljX2lkX21hc2sJCQk9IDB4RkYgPDwgMjQsCisKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGVzNzAwMF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0gZXM3MDAwX3NlbmRfSVBJX21hc2ssCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IE5VTEwsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0gZXM3MDAwX3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0gZXM3MDAwX3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0gZGVmYXVsdF9zZW5kX0lQSV9zZWxmLAorCisJLndha2V1cF9zZWNvbmRhcnlfY3B1CQk9IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9taXAsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSAweDQ2NywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gMHg0NjksCisKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBOVUxMLAorCisJLyogTm90aGluZyB0byBkbyBmb3IgbW9zdCBwbGF0Zm9ybXMsIHNpbmNlIGNsZWFyZWQgYnkgdGhlIElOSVQgY3ljbGU6ICovCisJLnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYwk9IE5VTEwsCisJLmlucXVpcmVfcmVtb3RlX2FwaWMJCT0gZGVmYXVsdF9pbnF1aXJlX3JlbW90ZV9hcGljLAorCisJLnJlYWQJCQkJPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKKwkud3JpdGUJCQkJPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCisJLmljcl9yZWFkCQkJPSBuYXRpdmVfYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlCQkJPSBuYXRpdmVfYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV9hcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCit9OworCitzdHJ1Y3QgYXBpYyBhcGljX2VzNzAwMCA9IHsKKworCS5uYW1lCQkJCT0gImVzNzAwMCIsCisJLnByb2JlCQkJCT0gcHJvYmVfZXM3MDAwLAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IGVzNzAwMF9hY3BpX21hZHRfb2VtX2NoZWNrLAorCS5hcGljX2lkX3JlZ2lzdGVyZWQJCT0gZXM3MDAwX2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0ZpeGVkLAorCS8qIHBoeXMgZGVsaXZlcnkgdG8gdGFyZ2V0IENQVXM6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDAsCisKKwkudGFyZ2V0X2NwdXMJCQk9IGVzNzAwMF90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDEsCisJLmRlc3RfbG9naWNhbAkJCT0gMCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gZXM3MDAwX2NoZWNrX2FwaWNpZF91c2VkLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBlczcwMDBfY2hlY2tfYXBpY2lkX3ByZXNlbnQsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZXM3MDAwX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gZXM3MDAwX2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGVzNzAwMF9pb2FwaWNfcGh5c19pZF9tYXAsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBlczcwMDBfc2V0dXBfYXBpY19yb3V0aW5nLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAorCS5hcGljaWRfdG9fbm9kZQkJCT0gZXM3MDAwX2FwaWNpZF90b19ub2RlLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gZXM3MDAwX2NwdV90b19sb2dpY2FsX2FwaWNpZCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGVzNzAwMF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBlczcwMDBfYXBpY2lkX3RvX2NwdV9wcmVzZW50LAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGVzNzAwMF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IGVzNzAwMF9lbmFibGVfYXBpY19tb2RlLAorCS5waHlzX3BrZ19pZAkJCT0gZXM3MDAwX3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBlczcwMDBfbXBzX29lbV9jaGVjaywKKworCS5nZXRfYXBpY19pZAkJCT0gZXM3MDAwX2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gTlVMTCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGIDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IGVzNzAwMF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IGVzNzAwMF9zZW5kX0lQSV9tYXNrLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBOVUxMLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmCQk9IGVzNzAwMF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IGVzNzAwMF9zZW5kX0lQSV9hbGwsCisJLnNlbmRfSVBJX3NlbGYJCQk9IGRlZmF1bHRfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IDB4NDY3LAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSAweDQ2OSwKKworCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IGVzNzAwMF93YWl0X2Zvcl9pbml0X2RlYXNzZXJ0LAorCisJLyogTm90aGluZyB0byBkbyBmb3IgbW9zdCBwbGF0Zm9ybXMsIHNpbmNlIGNsZWFyZWQgYnkgdGhlIElOSVQgY3ljbGU6ICovCisJLnNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYwk9IE5VTEwsCisJLmlucXVpcmVfcmVtb3RlX2FwaWMJCT0gZGVmYXVsdF9pbnF1aXJlX3JlbW90ZV9hcGljLAorCisJLnJlYWQJCQkJPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKKwkud3JpdGUJCQkJPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCisJLmljcl9yZWFkCQkJPSBuYXRpdmVfYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlCQkJPSBuYXRpdmVfYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV9hcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvaW9fYXBpYy5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggYmM3YWM0ZC4uMDBlNjA3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJSW50ZWwgSU8tQVBJQyBzdXBwb3J0IGZvciBtdWx0aS1QZW50aXVtIGhvc3RzLgogICoKLSAqCUNvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciwgSGFqbmFsa2EgU3phYm8KKyAqCUNvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwOSBJbmdvIE1vbG5hciwgSGFqbmFsa2EgU3phYm8KICAqCiAgKglNYW55IHRoYW5rcyB0byBTdGlnIFZlbmFhcyBmb3IgdHJ5aW5nIG91dCBjb3VudGxlc3MgZXhwZXJpbWVudGFsCiAgKglwYXRjaGVzIGFuZCByZXBvcnRpbmcvZGVidWdnaW5nIHByb2JsZW1zIHBhdGllbnRseSEKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vaWRsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgpAQCAtNjEsOSArNjIsNyBAQAogI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKICNkZWZpbmUgX19hcGljZGVidWdpbml0KHR5cGUpIHN0YXRpYyB0eXBlIF9faW5pdAogCkBAIC04MiwxMSArODEsMTEgQEAKIGludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107CiAKIC8qIEkvTyBBUElDIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKK3N0cnVjdCBtcGNfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKIGludCBucl9pb2FwaWNzOwogCiAvKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKK3N0cnVjdCBtcGNfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKIAogLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KIGludCBtcF9pcnFfZW50cmllczsKQEAgLTk5LDEwICs5OCwxOSBAQAogCiBpbnQgc2tpcF9pb2FwaWNfc2V0dXA7CiAKK3ZvaWQgYXJjaF9kaXNhYmxlX3NtcF9zdXBwb3J0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCW5vaW9hcGljcXVpcmsgPSAxOworCW5vaW9hcGljcmVyb3V0ZSA9IC0xOworI2VuZGlmCisJc2tpcF9pb2FwaWNfc2V0dXAgPSAxOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2FwaWMoY2hhciAqc3RyKQogewogCS8qIGRpc2FibGUgSU8tQVBJQyAqLwotCWRpc2FibGVfaW9hcGljX3NldHVwKCk7CisJYXJjaF9kaXNhYmxlX3NtcF9zdXBwb3J0KCk7CiAJcmV0dXJuIDA7CiB9CiBlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKQEAgLTM1Niw3ICszNjQsNyBAQAogCiAJaWYgKCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHsKIAkJLyogaXQgbWVhbnMgdGhhdCBkb21haW4gaXMgbm90IGNoYW5nZWQgKi8KLQkJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMoJmRlc2MtPmFmZmluaXR5LCBtYXNrKSkKKwkJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMoZGVzYy0+YWZmaW5pdHksIG1hc2spKQogCQkJY2ZnLT5tb3ZlX2Rlc2NfcGVuZGluZyA9IDE7CiAJfQogfQpAQCAtMzg2LDcgKzM5NCw3IEBACiBzdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKIHsKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSBfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkKLQkJKyAobXBfaW9hcGljc1tpZHhdLm1wX2FwaWNhZGRyICYgflBBR0VfTUFTSyk7CisJCSsgKG1wX2lvYXBpY3NbaWR4XS5hcGljYWRkciAmIH5QQUdFX01BU0spOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCkBAIC00NzgsNyArNDg2LDcgQEAKIAlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOwogfQogCi1zdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCit2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwpAQCAtNTEzLDExICs1MjEsMTEgQEAKIAkJZm9yX2VhY2hfY3B1X2FuZChpLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFzaykKIAkJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50Kys7CiAJCWZvcl9lYWNoX2NwdV9hbmQoaSwgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spCi0JCQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoaSksIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJCWFwaWMtPnNlbmRfSVBJX21hc2soY3B1bWFza19vZihpKSwgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwogCX0gZWxzZSB7CiAJCWNwdW1hc2tfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spOwogCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdW1hc2tfd2VpZ2h0KGNsZWFudXBfbWFzayk7Ci0JCXNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CisJCWFwaWMtPnNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CiAJCWZyZWVfY3B1bWFza192YXIoY2xlYW51cF9tYXNrKTsKIAl9CiAJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKQEAgLTU2Miw4ICs1NzAsOSBAQAogYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwogCiAvKgotICogRWl0aGVyIHNldHMgZGVzYy0+YWZmaW5pdHkgdG8gYSB2YWxpZCB2YWx1ZSwgYW5kIHJldHVybnMgY3B1X21hc2tfdG9fYXBpY2lkCi0gKiBvZiB0aGF0LCBvciByZXR1cm5zIEJBRF9BUElDSUQgYW5kIGxlYXZlcyBkZXNjLT5hZmZpbml0eSB1bnRvdWNoZWQuCisgKiBFaXRoZXIgc2V0cyBkZXNjLT5hZmZpbml0eSB0byBhIHZhbGlkIHZhbHVlLCBhbmQgcmV0dXJucworICogLT5jcHVfbWFza190b19hcGljaWQgb2YgdGhhdCwgb3IgcmV0dXJucyBCQURfQVBJQ0lEIGFuZAorICogbGVhdmVzIGRlc2MtPmFmZmluaXR5IHVudG91Y2hlZC4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludAogc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKQEAgLTU3OSw5ICs1ODgsMTAgQEAKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm4gQkFEX0FQSUNJRDsKIAotCWNwdW1hc2tfYW5kKCZkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4sIG1hc2spOworCWNwdW1hc2tfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbiwgbWFzayk7CiAJc2V0X2V4dHJhX21vdmVfZGVzYyhkZXNjLCBtYXNrKTsKLQlyZXR1cm4gY3B1X21hc2tfdG9fYXBpY2lkX2FuZCgmZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzayk7CisKKwlyZXR1cm4gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTc5NiwyMyArODA2LDYgQEAKIAkJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7CiB9CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCi12b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgY2ZnOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCWNmZyA9IEFQSUNfRE1fRklYRUQgfCBBUElDX0RFU1RfU0VMRiB8IHZlY3RvciB8IEFQSUNfREVTVF9MT0dJQ0FMOwotCS8qCi0JICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCi0JICovCi0JYXBpY193cml0ZShBUElDX0lDUiwgY2ZnKTsKLX0KLSNlbmRpZiAvKiAhQ09ORklHX1NNUCAmJiBDT05GSUdfWDg2XzMyKi8KLQogI2lmZGVmIENPTkZJR19YODZfMzIKIC8qCiAgKiBzdXBwb3J0IGZvciBicm9rZW4gTVAgQklPU3MsIGVuYWJsZXMgaGFuZC1yZWRpcmVjdGlvbiBvZiBQSVJRMC03IHRvCkBAIC04MjAsOCArODEzLDkgQEAKICAqLwogCiAjZGVmaW5lIE1BWF9QSVJRUyA4Ci1zdGF0aWMgaW50IHBpcnFfZW50cmllcyBbTUFYX1BJUlFTXTsKLXN0YXRpYyBpbnQgcGlycXNfZW5hYmxlZDsKK3N0YXRpYyBpbnQgcGlycV9lbnRyaWVzW01BWF9QSVJRU10gPSB7CisJWzAgLi4uIE1BWF9QSVJRUyAtIDFdID0gLTEKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19waXJxX3NldHVwKGNoYXIgKnN0cikKIHsKQEAgLTgzMCwxMCArODI0LDYgQEAKIAogCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCi0JCXBpcnFfZW50cmllc1tpXSA9IC0xOwotCi0JcGlycXNfZW5hYmxlZCA9IDE7CiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KIAkJCSJQSVJRIHJlZGlyZWN0aW9uLCB3b3JraW5nIGFyb3VuZCBicm9rZW4gTVAtQklPUy5cbiIpOwogCW1heCA9IE1BWF9QSVJRUzsKQEAgLTk0NCwxMCArOTM0LDEwIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkIHx8Ci0JCSAgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKSAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RpcnEgPT0gcGluKQorCQlpZiAobXBfaXJxc1tpXS5pcnF0eXBlID09IHR5cGUgJiYKKwkJICAgIChtcF9pcnFzW2ldLmRzdGFwaWMgPT0gbXBfaW9hcGljc1thcGljXS5hcGljaWQgfHwKKwkJICAgICBtcF9pcnFzW2ldLmRzdGFwaWMgPT0gTVBfQVBJQ19BTEwpICYmCisJCSAgICBtcF9pcnFzW2ldLmRzdGlycSA9PSBwaW4pCiAJCQlyZXR1cm4gaTsKIAogCXJldHVybiAtMTsKQEAgLTk2MSwxMyArOTUxLDEzIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0uc3JjYnVzOwogCiAJCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQorCQkgICAgKG1wX2lycXNbaV0uaXJxdHlwZSA9PSB0eXBlKSAmJgorCQkgICAgKG1wX2lycXNbaV0uc3JjYnVzaXJxID09IGlycSkpCiAKLQkJCXJldHVybiBtcF9pcnFzW2ldLm1wX2RzdGlycTsKKwkJCXJldHVybiBtcF9pcnFzW2ldLmRzdGlycTsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtOTc3LDE3ICs5NjcsMTcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7CisJCWludCBsYnVzID0gbXBfaXJxc1tpXS5zcmNidXM7CiAKIAkJaWYgKHRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGlycSkpCisJCSAgICAobXBfaXJxc1tpXS5pcnF0eXBlID09IHR5cGUpICYmCisJCSAgICAobXBfaXJxc1tpXS5zcmNidXNpcnEgPT0gaXJxKSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA8IG1wX2lycV9lbnRyaWVzKSB7CiAJCWludCBhcGljOwogCQlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMpCisJCQlpZiAobXBfaW9hcGljc1thcGljXS5hcGljaWQgPT0gbXBfaXJxc1tpXS5kc3RhcGljKQogCQkJCXJldHVybiBhcGljOwogCQl9CiAJfQpAQCAtMTAxMiwyMyArMTAwMiwyMyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7CisJCWludCBsYnVzID0gbXBfaXJxc1tpXS5zcmNidXM7CiAKIAkJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMgfHwKLQkJCSAgICBtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gTVBfQVBJQ19BTEwpCisJCQlpZiAobXBfaW9hcGljc1thcGljXS5hcGljaWQgPT0gbXBfaXJxc1tpXS5kc3RhcGljIHx8CisJCQkgICAgbXBfaXJxc1tpXS5kc3RhcGljID09IE1QX0FQSUNfQUxMKQogCQkJCWJyZWFrOwogCiAJCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCisJCSAgICAhbXBfaXJxc1tpXS5pcnF0eXBlICYmCiAJCSAgICAoYnVzID09IGxidXMpICYmCi0JCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7Ci0JCQlpbnQgaXJxID0gcGluXzJfaXJxKGksYXBpYyxtcF9pcnFzW2ldLm1wX2RzdGlycSk7CisJCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0uc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7CisJCQlpbnQgaXJxID0gcGluXzJfaXJxKGksIGFwaWMsIG1wX2lycXNbaV0uZHN0aXJxKTsKIAogCQkJaWYgKCEoYXBpYyB8fCBJT19BUElDX0lSUShpcnEpKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHBpbiA9PSAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgJiAzKSkKKwkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0uc3JjYnVzaXJxICYgMykpCiAJCQkJcmV0dXJuIGlycTsKIAkJCS8qCiAJCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKQEAgLTEwNzEsNyArMTA2MSw3IEBACiAgKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAogICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCiAKLSNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnEpKQorI2RlZmluZSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpCShFSVNBX0VMQ1IobXBfaXJxc1tpZHhdLnNyY2J1c2lycSkpCiAjZGVmaW5lIGRlZmF1bHRfRUlTQV9wb2xhcml0eShpZHgpCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkKIAogLyogUENJIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSBvbmUgbGV2ZWwgdHJpZ2dlcmVkLApAQCAtMTA4OCwxMyArMTA3OCwxMyBAQAogCiBzdGF0aWMgaW50IE1QQklPU19wb2xhcml0eShpbnQgaWR4KQogewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOworCWludCBidXMgPSBtcF9pcnFzW2lkeF0uc3JjYnVzOwogCWludCBwb2xhcml0eTsKIAogCS8qCiAJICogRGV0ZXJtaW5lIElSUSBsaW5lIHBvbGFyaXR5IChoaWdoIGFjdGl2ZSBvciBsb3cgYWN0aXZlKToKIAkgKi8KLQlzd2l0Y2ggKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnICYgMykKKwlzd2l0Y2ggKG1wX2lycXNbaWR4XS5pcnFmbGFnICYgMykKIAl7CiAJCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgcG9sYXJpdHkgKi8KIAkJCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKQEAgLTExMzAsMTMgKzExMjAsMTMgQEAKIAogc3RhdGljIGludCBNUEJJT1NfdHJpZ2dlcihpbnQgaWR4KQogewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOworCWludCBidXMgPSBtcF9pcnFzW2lkeF0uc3JjYnVzOwogCWludCB0cmlnZ2VyOwogCiAJLyoKIAkgKiBEZXRlcm1pbmUgSVJRIHRyaWdnZXIgbW9kZSAoZWRnZSBvciBsZXZlbCBzZW5zaXRpdmUpOgogCSAqLwotCXN3aXRjaCAoKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnPj4yKSAmIDMpCisJc3dpdGNoICgobXBfaXJxc1tpZHhdLmlycWZsYWc+PjIpICYgMykKIAl7CiAJCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgKi8KIAkJCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKQEAgLTEyMTQsMTYgKzEyMDQsMTYgQEAKIHN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQogewogCWludCBpcnEsIGk7Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5zcmNidXM7CiAKIAkvKgogCSAqIERlYnVnZ2luZyBjaGVjaywgd2UgYXJlIGluIGJpZyB0cm91YmxlIGlmIHRoaXMgbWVzc2FnZSBwb3BzIHVwIQogCSAqLwotCWlmIChtcF9pcnFzW2lkeF0ubXBfZHN0aXJxICE9IHBpbikKKwlpZiAobXBfaXJxc1tpZHhdLmRzdGlycSAhPSBwaW4pCiAJCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOwogCiAJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7CisJCWlycSA9IG1wX2lycXNbaWR4XS5zcmNidXNpcnE7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgpAQCAtMTMxNSw3ICsxMzA1LDcgQEAKIAkJaW50IG5ld19jcHU7CiAJCWludCB2ZWN0b3IsIG9mZnNldDsKIAotCQl2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oY3B1LCB0bXBfbWFzayk7CisJCWFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUsIHRtcF9tYXNrKTsKIAogCQl2ZWN0b3IgPSBjdXJyZW50X3ZlY3RvcjsKIAkJb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQ7CkBAIC0xNDg1LDEwICsxNDc1LDEwIEBACiAJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIH0KIAotc3RhdGljIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWMsIGludCBpcnEsCi0JCQkgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAotCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQoraW50IHNldHVwX2lvYXBpY19lbnRyeShpbnQgYXBpY19pZCwgaW50IGlycSwKKwkJICAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbiwgaW50IHRyaWdnZXIsCisJCSAgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IpCiB7CiAJLyoKIAkgKiBhZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CkBAIC0xNDk3LDI1ICsxNDg3LDI1IEBACiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7Ci0JCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBtYXBfaW9hcGljX3RvX2lyKGFwaWMpOworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gbWFwX2lvYXBpY190b19pcihhcGljX2lkKTsKIAkJc3RydWN0IGlydGUgaXJ0ZTsKIAkJc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKmlyX2VudHJ5ID0KIAkJCShzdHJ1Y3QgSVJfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSBlbnRyeTsKIAkJaW50IGluZGV4OwogCiAJCWlmICghaW9tbXUpCi0JCQlwYW5pYygiTm8gbWFwcGluZyBpb21tdSBmb3IgaW9hcGljICVkXG4iLCBhcGljKTsKKwkJCXBhbmljKCJObyBtYXBwaW5nIGlvbW11IGZvciBpb2FwaWMgJWRcbiIsIGFwaWNfaWQpOwogCiAJCWluZGV4ID0gYWxsb2NfaXJ0ZShpb21tdSwgaXJxLCAxKTsKIAkJaWYgKGluZGV4IDwgMCkKLQkJCXBhbmljKCJGYWlsZWQgdG8gYWxsb2NhdGUgSVJURSBmb3IgaW9hcGljICVkXG4iLCBhcGljKTsKKwkJCXBhbmljKCJGYWlsZWQgdG8gYWxsb2NhdGUgSVJURSBmb3IgaW9hcGljICVkXG4iLCBhcGljX2lkKTsKIAogCQltZW1zZXQoJmlydGUsIDAsIHNpemVvZihpcnRlKSk7CiAKIAkJaXJ0ZS5wcmVzZW50ID0gMTsKLQkJaXJ0ZS5kc3RfbW9kZSA9IElOVF9ERVNUX01PREU7CisJCWlydGUuZHN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOwogCQlpcnRlLnRyaWdnZXJfbW9kZSA9IHRyaWdnZXI7Ci0JCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCQlpcnRlLmRsdnJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKIAkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7CiAJCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7CiAKQEAgLTE1MjgsOCArMTUxOCw4IEBACiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWVudHJ5LT5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCQllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlOworCQllbnRyeS0+ZGVzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKIAkJZW50cnktPmRlc3QgPSBkZXN0aW5hdGlvbjsKIAl9CiAKQEAgLTE1NDYsNyArMTUzNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX0lPX0FQSUNfaXJxKGludCBhcGljLCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCitzdGF0aWMgdm9pZCBzZXR1cF9JT19BUElDX2lycShpbnQgYXBpY19pZCwgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAogCQkJICAgICAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSkKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwpAQCAtMTU1OCwyMiArMTU0OCwyMiBAQAogCiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBUQVJHRVRfQ1BVUykpCisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBhcGljLT50YXJnZXRfY3B1cygpKSkKIAkJcmV0dXJuOwogCi0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIFRBUkdFVF9DUFVTKTsKKwlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAKIAlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsS0VSTl9ERUJVRwogCQkgICAgIklPQVBJQ1slZF06IFNldCByb3V0aW5nIGVudHJ5ICglZC0lZCAtPiAweCV4IC0+ICIKIAkJICAgICJJUlEgJWQgTW9kZTolaSBBY3RpdmU6JWkpXG4iLAotCQkgICAgYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbiwgY2ZnLT52ZWN0b3IsCisJCSAgICBhcGljX2lkLCBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCwgcGluLCBjZmctPnZlY3RvciwKIAkJICAgIGlycSwgdHJpZ2dlciwgcG9sYXJpdHkpOwogCiAKLQlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBpcnEsICZlbnRyeSwKKwlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBpcnEsICZlbnRyeSwKIAkJCSAgICAgICBkZXN0LCB0cmlnZ2VyLCBwb2xhcml0eSwgY2ZnLT52ZWN0b3IpKSB7CiAJCXByaW50aygiRmFpbGVkIHRvIHNldHVwIGlvYXBpYyBlbnRyeSBmb3IgaW9hcGljICAlZCwgcGluICVkXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbik7CisJCSAgICAgICBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCwgcGluKTsKIAkJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE1ODIsMTIgKzE1NzIsMTIgQEAKIAlpZiAoaXJxIDwgTlJfSVJRU19MRUdBQ1kpCiAJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CiAKLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWNfaWQsIHBpbiwgZW50cnkpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCiB7Ci0JaW50IGFwaWMsIHBpbiwgaWR4LCBpcnE7CisJaW50IGFwaWNfaWQsIHBpbiwgaWR4LCBpcnE7CiAJaW50IG5vdGNvbiA9IDA7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CkBAIC0xNTk1LDIxICsxNTg1LDE5IEBACiAKIAlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKIAotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCWZvciAoYXBpY19pZCA9IDA7IGFwaWNfaWQgPCBucl9pb2FwaWNzOyBhcGljX2lkKyspIHsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNfaWRdOyBwaW4rKykgewogCi0JCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7CisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljX2lkLCBwaW4sIG1wX0lOVCk7CiAJCQlpZiAoaWR4ID09IC0xKSB7CiAJCQkJaWYgKCFub3Rjb24pIHsKIAkJCQkJbm90Y29uID0gMTsKIAkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAogCQkJCQkJS0VSTl9ERUJVRyAiICVkLSVkIiwKLQkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAotCQkJCQkJcGluKTsKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBwaW4pOwogCQkJCX0gZWxzZQogCQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgJWQtJWQiLAotCQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsCi0JCQkJCQlwaW4pOworCQkJCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIHBpbik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAobm90Y29uKSB7CkBAIC0xNjE4LDIwICsxNjA2LDI1IEBACiAJCQkJbm90Y29uID0gMDsKIAkJCX0KIAotCQkJaXJxID0gcGluXzJfaXJxKGlkeCwgYXBpYywgcGluKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCQlpZiAobXVsdGlfdGltZXJfY2hlY2soYXBpYywgaXJxKSkKKwkJCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWNfaWQsIHBpbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHRoZSB0aW1lciBJUlEgaWYgdGhlcmUncyBhIHF1aXJrIGhhbmRsZXIKKwkJCSAqIGluc3RhbGxlZCBhbmQgaWYgaXQgcmV0dXJucyAxOgorCQkJICovCisJCQlpZiAoYXBpYy0+bXVsdGlfdGltZXJfY2hlY2sgJiYKKwkJCQkJYXBpYy0+bXVsdGlfdGltZXJfY2hlY2soYXBpY19pZCwgaXJxKSkKIAkJCQljb250aW51ZTsKLSNlbmRpZgorCiAJCQlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KGlycSwgY3B1KTsKIAkJCWlmICghZGVzYykgewogCQkJCXByaW50ayhLRVJOX0lORk8gImNhbiBub3QgZ2V0IGlycV9kZXNjIGZvciAlZFxuIiwgaXJxKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQkJCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgYXBpYywgcGluKTsKKwkJCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgYXBpY19pZCwgcGluKTsKIAotCQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsIGRlc2MsCisJCQlzZXR1cF9JT19BUElDX2lycShhcGljX2lkLCBwaW4sIGlycSwgZGVzYywKIAkJCQkJaXJxX3RyaWdnZXIoaWR4KSwgaXJxX3BvbGFyaXR5KGlkeCkpOwogCQl9CiAJfQpAQCAtMTY0NCw3ICsxNjM3LDcgQEAKIC8qCiAgKiBTZXQgdXAgdGhlIHRpbWVyIHBpbiwgcG9zc2libHkgd2l0aCB0aGUgODI1OUEtbWFzdGVyIGJlaGluZC4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RpbWVyX0lSUTBfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluLAorc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RpbWVyX0lSUTBfcGluKHVuc2lnbmVkIGludCBhcGljX2lkLCB1bnNpZ25lZCBpbnQgcGluLAogCQkJCQlpbnQgdmVjdG9yKQogewogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwpAQCAtMTY2MCwxMCArMTY1MywxMCBAQAogCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCiAJICogdG8gdGhlIGZpcnN0IENQVS4KIAkgKi8KLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCi0JZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0JZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCWVudHJ5LmRlc3RfbW9kZSA9IGFwaWMtPmlycV9kZXN0X21vZGU7CisJZW50cnkubWFzayA9IDA7CQkJLyogZG9uJ3QgbWFzayBJUlEgZm9yIGVkZ2UgKi8KKwllbnRyeS5kZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKGFwaWMtPnRhcmdldF9jcHVzKCkpOworCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKIAllbnRyeS5wb2xhcml0eSA9IDA7CiAJZW50cnkudHJpZ2dlciA9IDA7CiAJZW50cnkudmVjdG9yID0gdmVjdG9yOwpAQCAtMTY3Nyw3ICsxNjcwLDcgQEAKIAkvKgogCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKIAkgKi8KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWNfaWQsIHBpbiwgZW50cnkpOwogfQogCiAKQEAgLTE2OTksNyArMTY5Miw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBNUCBJUlEgc291cmNlczogJWQuXG4iLCBtcF9pcnFfZW50cmllcyk7CiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykKIAkJcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBJTy1BUElDICMlZCByZWdpc3RlcnM6ICVkLlxuIiwKLQkJICAgICAgIG1wX2lvYXBpY3NbaV0ubXBfYXBpY2lkLCBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldKTsKKwkJICAgICAgIG1wX2lvYXBpY3NbaV0uYXBpY2lkLCBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldKTsKIAogCS8qCiAJICogV2UgYXJlIGEgYml0IGNvbnNlcnZhdGl2ZSBhYm91dCB3aGF0IHdlIGV4cGVjdC4gIFdlIGhhdmUgdG8KQEAgLTE3MTksNyArMTcxMiw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCXByaW50aygiXG4iKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiSU8gQVBJQyAjJWQuLi4uLi5cbiIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSU8gQVBJQyAjJWQuLi4uLi5cbiIsIG1wX2lvYXBpY3NbYXBpY10uYXBpY2lkKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDA6ICUwOFhcbiIsIHJlZ18wMC5yYXcpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogcGh5c2ljYWwgQVBJQyBpZDogJTAyWFxuIiwgcmVnXzAwLmJpdHMuSUQpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogRGVsaXZlcnkgVHlwZTogJVhcbiIsIHJlZ18wMC5iaXRzLmRlbGl2ZXJ5X3R5cGUpOwpAQCAtMTk4MCwxMyArMTk3Myw2IEBACiAJaW50IGFwaWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpbnQgaTsKLQlpZiAoIXBpcnFzX2VuYWJsZWQpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKLQkJCXBpcnFfZW50cmllc1tpXSA9IC0xOwotI2VuZGlmCi0KIAkvKgogCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6CiAJICovCkBAIC0yMDkwLDcgKzIwNzYsNyBAQAogewogCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKIAlwaHlzaWRfbWFza190IHBoeXNfaWRfcHJlc2VudF9tYXA7Ci0JaW50IGFwaWM7CisJaW50IGFwaWNfaWQ7CiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciBvbGRfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIxMDksMjYgKzIwOTUsMjYgQEAKIAkgKiBUaGlzIGlzIGJyb2tlbjsgYW55dGhpbmcgd2l0aCBhIHJlYWwgY3B1IGNvdW50IGhhcyB0bwogCSAqIGNpcmN1bXZlbnQgdGhpcyBpZGlvY3kgcmVnYXJkbGVzcy4KIAkgKi8KLQlwaHlzX2lkX3ByZXNlbnRfbWFwID0gaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwlwaHlzX2lkX3ByZXNlbnRfbWFwID0gYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIAogCS8qCiAJICogU2V0IHRoZSBJT0FQSUMgSUQgdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgogCSAqLwotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwlmb3IgKGFwaWNfaWQgPSAwOyBhcGljX2lkIDwgbnJfaW9hcGljczsgYXBpY19pZCsrKSB7CiAKIAkJLyogUmVhZCB0aGUgcmVnaXN0ZXIgMCB2YWx1ZSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljX2lkLCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAotCQlvbGRfaWQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKKwkJb2xkX2lkID0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQ7CiAKLQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgeworCQlpZiAobXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEIGlzICVkIGluIHRoZSBNUEMgdGFibGUhLi4uXG4iLAotCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCQlhcGljX2lkLCBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCk7CiAJCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKIAkJCQlyZWdfMDAuYml0cy5JRCk7Ci0JCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IHJlZ18wMC5iaXRzLklEOworCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQgPSByZWdfMDAuYml0cy5JRDsKIAkJfQogCiAJCS8qCkBAIC0yMTM2LDEwICsyMTIyLDEwIEBACiAJCSAqIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQogCQkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KIAkJICovCi0JCWlmIChjaGVja19hcGljaWRfdXNlZChwaHlzX2lkX3ByZXNlbnRfbWFwLAotCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkpIHsKKwkJaWYgKGFwaWMtPmNoZWNrX2FwaWNpZF91c2VkKHBoeXNfaWRfcHJlc2VudF9tYXAsCisJCQkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCAlZCBpcyBhbHJlYWR5IHVzZWQhLi4uXG4iLAotCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCQlhcGljX2lkLCBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspCiAJCQkJaWYgKCFwaHlzaWRfaXNzZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCkpCiAJCQkJCWJyZWFrOwpAQCAtMjE0OCwxMyArMjEzNCwxMyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCiAJCQkJaSk7CiAJCQlwaHlzaWRfc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApOwotCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPSBpOworCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQgPSBpOwogCQl9IGVsc2UgewogCQkJcGh5c2lkX21hc2tfdCB0bXA7Ci0JCQl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJdG1wID0gYXBpYy0+YXBpY2lkX3RvX2NwdV9wcmVzZW50KG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKTsKIAkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlNldHRpbmcgJWQgaW4gdGhlICIKIAkJCQkJInBoeXNfaWRfcHJlc2VudF9tYXBcbiIsCi0JCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOwogCQkJcGh5c2lkc19vcihwaHlzX2lkX3ByZXNlbnRfbWFwLCBwaHlzX2lkX3ByZXNlbnRfbWFwLCB0bXApOwogCQl9CiAKQEAgLTIxNjMsMTEgKzIxNDksMTEgQEAKIAkJICogV2UgbmVlZCB0byBhZGp1c3QgdGhlIElSUSByb3V0aW5nIHRhYmxlCiAJCSAqIGlmIHRoZSBJRCBjaGFuZ2VkLgogCQkgKi8KLQkJaWYgKG9sZF9pZCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKKwkJaWYgKG9sZF9pZCAhPSBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCkKIAkJCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQkJCWlmIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gb2xkX2lkKQotCQkJCQltcF9pcnFzW2ldLm1wX2RzdGFwaWMKLQkJCQkJCT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisJCQkJaWYgKG1wX2lycXNbaV0uZHN0YXBpYyA9PSBvbGRfaWQpCisJCQkJCW1wX2lycXNbaV0uZHN0YXBpYworCQkJCQkJPSBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZDsKIAogCQkvKgogCQkgKiBSZWFkIHRoZSByaWdodCB2YWx1ZSBmcm9tIHRoZSBNUEMgdGFibGUgYW5kCkBAIC0yMTc1LDIwICsyMTYxLDIwIEBACiAJCSAqLwogCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwogCQkJIi4uLmNoYW5naW5nIElPLUFQSUMgcGh5c2ljYWwgQVBJQyBJRCB0byAlZCAuLi4iLAotCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOwogCi0JCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisJCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQ7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlpb19hcGljX3dyaXRlKGFwaWMsIDAsIHJlZ18wMC5yYXcpOworCQlpb19hcGljX3dyaXRlKGFwaWNfaWQsIDAsIHJlZ18wMC5yYXcpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJCS8qCiAJCSAqIFNhbml0eSBjaGVjawogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7CisJCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpY19pZCwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKKwkJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKQogCQkJcHJpbnRrKCJjb3VsZCBub3Qgc2V0IElEIVxuIik7CiAJCWVsc2UKIAkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBvay5cbiIpOwpAQCAtMjI5MSw3ICsyMjc3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0Jc2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdW1hc2tfZmlyc3QoY2ZnLT5kb21haW4pKSwgY2ZnLT52ZWN0b3IpOworCWFwaWMtPnNlbmRfSVBJX21hc2soY3B1bWFza19vZihjcHVtYXNrX2ZpcnN0KGNmZy0+ZG9tYWluKSksIGNmZy0+dmVjdG9yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDE7CkBAIC0yMjk5LDcgKzIyODUsNyBAQAogI2Vsc2UKIHN0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzZW5kX0lQSV9zZWxmKGlycV9jZmcoaXJxKS0+dmVjdG9yKTsKKwlhcGljLT5zZW5kX0lQSV9zZWxmKGlycV9jZmcoaXJxKS0+dmVjdG9yKTsKIAogCXJldHVybiAxOwogfQpAQCAtMjM2Myw3ICsyMzQ5LDcgQEAKIAogCXNldF9leHRyYV9tb3ZlX2Rlc2MoZGVzYywgbWFzayk7CiAKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIG1hc2spOwogCiAJbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7CiAJaWYgKG1vZGlmeV9pb2FwaWNfcnRlKSB7CkBAIC0yMzgzLDcgKzIzNjksNyBAQAogCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpCiAJCXNlbmRfY2xlYW51cF92ZWN0b3IoY2ZnKTsKIAotCWNwdW1hc2tfY29weSgmZGVzYy0+YWZmaW5pdHksIG1hc2spOworCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCkBAIC0yNDA1LDExICsyMzkxLDExIEBACiAJfQogCiAJLyogZXZlcnRoaW5nIGlzIGNsZWFyLiB3ZSBoYXZlIHJpZ2h0IG9mIHdheSAqLwotCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsICZkZXNjLT5wZW5kaW5nX21hc2spOworCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIGRlc2MtPnBlbmRpbmdfbWFzayk7CiAKIAlyZXQgPSAwOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQljcHVtYXNrX2NsZWFyKCZkZXNjLT5wZW5kaW5nX21hc2spOworCWNwdW1hc2tfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKIAogdW5tYXNrOgogCXVubWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwpAQCAtMjQzNCw3ICsyNDIwLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgJmRlc2MtPnBlbmRpbmdfbWFzayk7CisJCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQl9CiAJfQpAQCAtMjQ0OCw3ICsyNDM0LDcgQEAKIHsKIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSB7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCQljcHVtYXNrX2NvcHkoJmRlc2MtPnBlbmRpbmdfbWFzaywgbWFzayk7CisJCWNwdW1hc2tfY29weShkZXNjLT5wZW5kaW5nX21hc2ssIG1hc2spOwogCQltaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbF9kZXNjKGRlc2MpOwogCQlyZXR1cm47CiAJfQpAQCAtMjUxNiw3ICsyNTAyLDcgQEAKIAogCQkvKiBkb21haW4gaGFzIG5vdCBjaGFuZ2VkLCBidXQgYWZmaW5pdHkgZGlkICovCiAJCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlpZiAoY3B1X2lzc2V0KG1lLCBkZXNjLT5hZmZpbml0eSkpIHsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUobWUsIGRlc2MtPmFmZmluaXR5KSkgewogCQkJKmRlc2NwID0gZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbWUpOwogCQkJLyogZ2V0IHRoZSBuZXcgb25lICovCiAJCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CkBAIC0yODY3LDE5ICsyODUzLDE1IEBACiAJaW50IGNwdSA9IGJvb3RfY3B1X2lkOwogCWludCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgdmVyOwogCWludCBub19waW4xID0gMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOwotCiAJLyoKIAkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgogCSAqLwogCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFzc2lnbl9pcnFfdmVjdG9yKDAsIGNmZywgVEFSR0VUX0NQVVMpOworCWFzc2lnbl9pcnFfdmVjdG9yKDAsIGNmZywgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAKIAkvKgogCSAqIEFzIElSUTAgaXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgODI1OUEsIHRoZSB2aXJ0dWFsCkBAIC0yODkzLDcgKzI4NzUsMTMgQEAKIAlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwogCWluaXRfODI1OUEoMSk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCXRpbWVyX2FjayA9IChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMgJiYgIUFQSUNfSU5URUdSQVRFRCh2ZXIpKTsKKwl7CisJCXVuc2lnbmVkIGludCB2ZXI7CisKKwkJdmVyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwkJdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOworCQl0aW1lcl9hY2sgPSAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDICYmICFBUElDX0lOVEVHUkFURUQodmVyKSk7CisJfQogI2VuZGlmCiAKIAlwaW4xICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfSU5UKTsKQEAgLTI5MzIsOCArMjkyMCwxNyBAQAogCQlpZiAobm9fcGluMSkgewogCQkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBhcGljMSwgcGluMSk7CiAJCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOworCQl9IGVsc2UgeworCQkJLyogZm9yIGVkZ2UgdHJpZ2dlciwgc2V0dXBfSU9fQVBJQ19pcnEgYWxyZWFkeQorCQkJICogbGVhdmUgaXQgdW5tYXNrZWQuCisJCQkgKiBzbyBvbmx5IG5lZWQgdG8gdW5tYXNrIGlmIGl0IGlzIGxldmVsLXRyaWdnZXIKKwkJCSAqIGRvIHdlIHJlYWxseSBoYXZlIGxldmVsIHRyaWdnZXIgdGltZXI/CisJCQkgKi8KKwkJCWludCBpZHg7CisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljMSwgcGluMSwgbXBfSU5UKTsKKwkJCWlmIChpZHggIT0gLTEgJiYgaXJxX3RyaWdnZXIoaWR4KSkKKwkJCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAkJfQotCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CiAJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CiAJCQkJc2V0dXBfbm1pKCk7CkBAIC0yOTQ3LDYgKzI5NDQsNyBAQAogCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOwogI2VuZGlmCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKIAkJaWYgKCFub19waW4xKQogCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKQEAgLTI5NjEsNyArMjk1OSw2IEBACiAJCSAqLwogCQlyZXBsYWNlX3Bpbl9hdF9pcnFfY3B1KGNmZywgY3B1LCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwogCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMiwgcGluMiwgY2ZnLT52ZWN0b3IpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAkJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CiAJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gd29ya3MuXG4iKTsKQEAgLTI5NzYsNiArMjk3Myw3IEBACiAJCS8qCiAJCSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4KIAkJICovCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWRpc2FibGVfODI1OUFfaXJxKDApOwogCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7CiAJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKQEAgLTMwMDEsNiArMjk5OSw3IEBACiAJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKIAkJZ290byBvdXQ7CiAJfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJZGlzYWJsZV84MjU5QV9pcnEoMCk7CiAJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CiAJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQuXG4iKTsKQEAgLTMwMTgsNiArMzAxNyw3IEBACiAJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKIAkJZ290byBvdXQ7CiAJfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQgOiguXG4iKTsKIAlwYW5pYygiSU8tQVBJQyArIHRpbWVyIGRvZXNuJ3Qgd29yayEgIEJvb3Qgd2l0aCBhcGljPWRlYnVnIGFuZCBzZW5kIGEgIgogCQkicmVwb3J0LiAgVGhlbiB0cnkgYm9vdGluZyB3aXRoIHRoZSAnbm9hcGljJyBvcHRpb24uXG4iKTsKQEAgLTMwNDcsMTMgKzMwNDcsOSBAQAogdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQyh2b2lkKQogewogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWVuYWJsZV9JT19BUElDKCk7Ci0jZWxzZQogCS8qCiAJICogY2FsbGluZyBlbmFibGVfSU9fQVBJQygpIGlzIG1vdmVkIHRvIHNldHVwX2xvY2FsX0FQSUMgZm9yIEJQCiAJICovCi0jZW5kaWYKIAogCWlvX2FwaWNfaXJxcyA9IH5QSUNfSVJRUzsKIApAQCAtMzExOCw4ICszMTE0LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoZGV2LT5pZCwgMCk7Ci0JaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkKSB7Ci0JCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQ7CisJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbZGV2LT5pZF0uYXBpY2lkKSB7CisJCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1tkZXYtPmlkXS5hcGljaWQ7CiAJCWlvX2FwaWNfd3JpdGUoZGV2LT5pZCwgMCwgcmVnXzAwLnJhdyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CkBAIC0zMTY5LDYgKzMxNjUsNyBAQAogCiBkZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOwogCitzdGF0aWMgaW50IG5yX2lycXNfZ3NpID0gTlJfSVJRU19MRUdBQ1k7CiAvKgogICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgogICovCkBAIC0zMTgzLDExICszMTgwLDExIEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjX25ldyA9IE5VTEw7CiAKIAlpcnEgPSAwOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWZvciAobmV3ID0gaXJxX3dhbnQ7IG5ldyA8IE5SX0lSUVM7IG5ldysrKSB7Ci0JCWlmIChwbGF0Zm9ybV9sZWdhY3lfaXJxKG5ldykpCi0JCQljb250aW51ZTsKKwlpZiAoaXJxX3dhbnQgPCBucl9pcnFzX2dzaSkKKwkJaXJxX3dhbnQgPSBucl9pcnFzX2dzaTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCWZvciAobmV3ID0gaXJxX3dhbnQ7IG5ldyA8IG5yX2lycXM7IG5ldysrKSB7CiAJCWRlc2NfbmV3ID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KG5ldywgY3B1KTsKIAkJaWYgKCFkZXNjX25ldykgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOwpAQCAtMzE5Nyw3ICszMTk0LDcgQEAKIAogCQlpZiAoY2ZnX25ldy0+dmVjdG9yICE9IDApCiAJCQljb250aW51ZTsKLQkJaWYgKF9fYXNzaWduX2lycV92ZWN0b3IobmV3LCBjZmdfbmV3LCBUQVJHRVRfQ1BVUykgPT0gMCkKKwkJaWYgKF9fYXNzaWduX2lycV92ZWN0b3IobmV3LCBjZmdfbmV3LCBhcGljLT50YXJnZXRfY3B1cygpKSA9PSAwKQogCQkJaXJxID0gbmV3OwogCQlicmVhazsKIAl9CkBAIC0zMjEyLDcgKzMyMDksNiBAQAogCXJldHVybiBpcnE7CiB9CiAKLXN0YXRpYyBpbnQgbnJfaXJxc19nc2kgPSBOUl9JUlFTX0xFR0FDWTsKIGludCBjcmVhdGVfaXJxKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGlycV93YW50OwpAQCAtMzI1OSwxMiArMzI1NSwxNSBAQAogCWludCBlcnI7CiAJdW5zaWduZWQgZGVzdDsKIAorCWlmIChkaXNhYmxlX2FwaWMpCisJCXJldHVybiAtRU5YSU87CisKIAljZmcgPSBpcnFfY2ZnKGlycSk7Ci0JZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIFRBUkdFVF9DUFVTKTsKKwllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWRfYW5kKGNmZy0+ZG9tYWluLCBUQVJHRVRfQ1BVUyk7CisJZGVzdCA9IGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIGFwaWMtPnRhcmdldF9jcHVzKCkpOwogCiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKQEAgLTMyNzgsOSArMzI3Nyw5IEBACiAJCW1lbXNldCAoJmlydGUsIDAsIHNpemVvZihpcnRlKSk7CiAKIAkJaXJ0ZS5wcmVzZW50ID0gMTsKLQkJaXJ0ZS5kc3RfbW9kZSA9IElOVF9ERVNUX01PREU7CisJCWlydGUuZHN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOwogCQlpcnRlLnRyaWdnZXJfbW9kZSA9IDA7IC8qIGVkZ2UgKi8KLQkJaXJ0ZS5kbHZyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7CisJCWlydGUuZGx2cnlfbW9kZSA9IGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlOwogCQlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwogCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CiAKQEAgLTMyOTgsMTAgKzMyOTcsMTAgQEAKIAkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKIAkJbXNnLT5hZGRyZXNzX2xvID0KIAkJCU1TSV9BRERSX0JBU0VfTE8gfAotCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KKwkJCSgoYXBpYy0+aXJxX2Rlc3RfbW9kZSA9PSAwKSA/CiAJCQkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVNJQ0FMOgogCQkJCU1TSV9BRERSX0RFU1RfTU9ERV9MT0dJQ0FMKSB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJKChhcGljLT5pcnFfZGVsaXZlcnlfbW9kZSAhPSBkZXN0X0xvd2VzdFByaW8pID8KIAkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFU6CiAJCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJKSB8CiAJCQlNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwpAQCAtMzMwOSw3ICszMzA4LDcgQEAKIAkJbXNnLT5kYXRhID0KIAkJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8CiAJCQlNU0lfREFUQV9MRVZFTF9BU1NFUlQgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KKwkJCSgoYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/CiAJCQkJTVNJX0RBVEFfREVMSVZFUllfRklYRUQ6CiAJCQkJTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJKSB8CiAJCQlNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOwpAQCAtMzQ2NCw0MCArMzQ2Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICptc2lkZXNjKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7Ci0KLQlpcnFfd2FudCA9IG5yX2lycXNfZ3NpOwotCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQpOwotCWlmIChpcnEgPT0gMCkKLQkJcmV0dXJuIC0xOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCWdvdG8gbm9faXI7Ci0KLQlyZXQgPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7Ci1ub19pcjoKLSNlbmRpZgotCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBtc2lkZXNjLCBpcnEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRlc3Ryb3lfaXJxKGlycSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLWVycm9yOgotCWRlc3Ryb3lfaXJxKGlycSk7Ci0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCiBpbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTM1MTQsOSArMzQ3OSw5IEBACiAJc3ViX2hhbmRsZSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtc2lkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQlpcnEgPSBjcmVhdGVfaXJxX25yKGlycV93YW50KTsKLQkJaXJxX3dhbnQrKzsKIAkJaWYgKGlycSA9PSAwKQogCQkJcmV0dXJuIC0xOworCQlpcnFfd2FudCA9IGlycSArIDE7CiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQkJZ290byBub19pcjsKQEAgLTM3MjcsMTMgKzM2OTIsMTcgQEAKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCWludCBlcnI7CiAKKwlpZiAoZGlzYWJsZV9hcGljKQorCQlyZXR1cm4gLUVOWElPOworCiAJY2ZnID0gaXJxX2NmZyhpcnEpOwotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBUQVJHRVRfQ1BVUyk7CisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpOwogCWlmICghZXJyKSB7CiAJCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKIAkJdW5zaWduZWQgZGVzdDsKIAotCQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgVEFSR0VUX0NQVVMpOworCQlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwKKwkJCQkJCSAgICBhcGljLT50YXJnZXRfY3B1cygpKTsKIAogCQltc2cuYWRkcmVzc19oaSA9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CiAKQEAgLTM3NDEsMTEgKzM3MTAsMTEgQEAKIAkJCUhUX0lSUV9MT1dfQkFTRSB8CiAJCQlIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCkgfAogCQkJSFRfSVJRX0xPV19WRUNUT1IoY2ZnLT52ZWN0b3IpIHwKLQkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/CisJCQkoKGFwaWMtPmlycV9kZXN0X21vZGUgPT0gMCkgPwogCQkJCUhUX0lSUV9MT1dfRE1fUEhZU0lDQUwgOgogCQkJCUhUX0lSUV9MT1dfRE1fTE9HSUNBTCkgfAogCQkJSFRfSVJRX0xPV19SUUVPSV9FREdFIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/CisJCQkoKGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlICE9IGRlc3RfTG93ZXN0UHJpbykgPwogCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgogCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCkgfAogCQkJSFRfSVJRX0xPV19JUlFfTUFTS0VEOwpAQCAtMzc2MSw3ICszNzMwLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSFRfSVJRICovCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CisjaWZkZWYgQ09ORklHX1g4Nl9VVgogLyoKICAqIFJlLXRhcmdldCB0aGUgaXJxIHRvIHRoZSBzcGVjaWZpZWQgQ1BVIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZCBNTVIgbG9jYXRlZAogICogb24gdGhlIHNwZWNpZmllZCBibGFkZSB0byBhbGxvdyB0aGUgc2VuZGluZyBvZiBNU0lzIHRvIHRoZSBzcGVjaWZpZWQgQ1BVLgpAQCAtMzc5MywxMiArMzc2MiwxMiBAQAogCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAKIAllbnRyeS0+dmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQllbnRyeS0+ZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlOworCWVudHJ5LT5kZXN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOwogCWVudHJ5LT5wb2xhcml0eSA9IDA7CiAJZW50cnktPnRyaWdnZXIgPSAwOwogCWVudHJ5LT5tYXNrID0gMDsKLQllbnRyeS0+ZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChlbGlnaWJsZV9jcHUpOworCWVudHJ5LT5kZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKGVsaWdpYmxlX2NwdSk7CiAKIAltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7CkBAIC0zODYxLDYgKzM4MzAsMjggQEAKIAlwcmludGsoS0VSTl9ERUJVRyAibnJfaXJxc19nc2k6ICVkXG4iLCBucl9pcnFzX2dzaSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQoraW50IF9faW5pdCBhcmNoX3Byb2JlX25yX2lycXModm9pZCkKK3sKKwlpbnQgbnI7CisKKwlpZiAobnJfaXJxcyA+IChOUl9WRUNUT1JTICogbnJfY3B1X2lkcykpCisJCW5yX2lycXMgPSBOUl9WRUNUT1JTICogbnJfY3B1X2lkczsKKworCW5yID0gbnJfaXJxc19nc2kgKyA4ICogbnJfY3B1X2lkczsKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0lfTVNJKSB8fCBkZWZpbmVkKENPTkZJR19IVF9JUlEpCisJLyoKKwkgKiBmb3IgTVNJIGFuZCBIVCBkeW4gaXJxCisJICovCisJbnIgKz0gbnJfaXJxc19nc2kgKiAxNjsKKyNlbmRpZgorCWlmIChuciA8IG5yX2lycXMpCisJCW5yX2lycXMgPSBucjsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgSU9BUElDIENvbmZpZ3VyYXRpb24KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zODg2LDcgKzM4NzcsNyBAQAogCSAqLwogCiAJaWYgKHBoeXNpZHNfZW1wdHkoYXBpY19pZF9tYXApKQotCQlhcGljX2lkX21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJCWFwaWNfaWRfbWFwID0gYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKQEAgLTM5MDIsMTAgKzM4OTMsMTAgQEAKIAkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCiAJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCiAJICovCi0JaWYgKGNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgeworCWlmIChhcGljLT5jaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgYXBpY19pZCkpIHsKIAogCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspIHsKLQkJCWlmICghY2hlY2tfYXBpY2lkX3VzZWQoYXBpY19pZF9tYXAsIGkpKQorCQkJaWYgKCFhcGljLT5jaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgaSkpCiAJCQkJYnJlYWs7CiAJCX0KIApAQCAtMzkxOCw3ICszOTA5LDcgQEAKIAkJYXBpY19pZCA9IGk7CiAJfQogCi0JdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KGFwaWNfaWQpOworCXRtcCA9IGFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudChhcGljX2lkKTsKIAlwaHlzaWRzX29yKGFwaWNfaWRfbWFwLCBhcGljX2lkX21hcCwgdG1wKTsKIAogCWlmIChyZWdfMDAuYml0cy5JRCAhPSBhcGljX2lkKSB7CkBAIC0zOTk1LDggKzM5ODYsOCBAQAogCQlyZXR1cm4gLTE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSBtcF9JTlQgJiYKLQkJICAgIG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGJ1c19pcnEpCisJCWlmIChtcF9pcnFzW2ldLmlycXR5cGUgPT0gbXBfSU5UICYmCisJCSAgICBtcF9pcnFzW2ldLnNyY2J1c2lycSA9PSBidXNfaXJxKQogCQkJYnJlYWs7CiAJaWYgKGkgPj0gbXBfaXJxX2VudHJpZXMpCiAJCXJldHVybiAtMTsKQEAgLTQwMTEsNyArNDAwMiw3IEBACiAvKgogICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgaXMgb25seSBhIGhlbHBlciBmb3IgdGhlIGkzODYgc21wIGJvb3QgcHJvY2VzcyB3aGVyZQogICogd2UgbmVlZCB0byByZXByb2dyYW0gdGhlIGlvcmVkdGJscyB0byBjYXRlciBmb3IgdGhlIGNwdXMgd2hpY2ggaGF2ZSBjb21lIG9ubGluZQotICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBUQVJHRVRfQ1BVUworICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBhcGljLT50YXJnZXRfY3B1cygpCiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQpAQCAtNDA1MCw5ICs0MDQxLDkgQEAKIAkJCSAqLwogCQkJaWYgKGRlc2MtPnN0YXR1cyAmCiAJCQkgICAgKElSUV9OT19CQUxBTkNJTkcgfCBJUlFfQUZGSU5JVFlfU0VUKSkKLQkJCQltYXNrID0gJmRlc2MtPmFmZmluaXR5OworCQkJCW1hc2sgPSBkZXNjLT5hZmZpbml0eTsKIAkJCWVsc2UKLQkJCQltYXNrID0gVEFSR0VUX0NQVVM7CisJCQkJbWFzayA9IGFwaWMtPnRhcmdldF9jcHVzKCk7CiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCkBAIC00MTExLDcgKzQxMDIsNyBAQAogCWlvYXBpY19yZXMgPSBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKCk7CiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewogCQlpZiAoc21wX2ZvdW5kX2NvbmZpZykgewotCQkJaW9hcGljX3BoeXMgPSBtcF9pb2FwaWNzW2ldLm1wX2FwaWNhZGRyOworCQkJaW9hcGljX3BoeXMgPSBtcF9pb2FwaWNzW2ldLmFwaWNhZGRyOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAkJCWlmICghaW9hcGljX3BoeXMpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmNTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCkBAIC0wLDAgKzEsMTY0IEBACisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisKK3ZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX3NlcXVlbmNlX3BoeXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogSGFjay4gVGhlIGNsdXN0ZXJlZCBBUElDIGFkZHJlc3NpbmcgbW9kZSBkb2Vzbid0IGFsbG93IHVzIHRvIHNlbmQKKwkgKiB0byBhbiBhcmJpdHJhcnkgbWFzaywgc28gSSBkbyBhIHVuaWNhc3QgdG8gZWFjaCBDUFUgaW5zdGVhZC4KKwkgKiAtIG1ibGlnaAorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CisJCV9fZGVmYXVsdF9zZW5kX0lQSV9kZXN0X2ZpZWxkKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsCisJCQkJcXVlcnlfY3B1KSwgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfcGh5cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJCSBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBTZWUgSGFjayBjb21tZW50IGFib3ZlICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQorCQkJY29udGludWU7CisJCV9fZGVmYXVsdF9zZW5kX0lQSV9kZXN0X2ZpZWxkKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsCisJCQkJIHF1ZXJ5X2NwdSksIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIGRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9sb2dpY2FsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcXVlcnlfY3B1OworCisJLyoKKwkgKiBIYWNrLiBUaGUgY2x1c3RlcmVkIEFQSUMgYWRkcmVzc2luZyBtb2RlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZAorCSAqIHRvIGFuIGFyYml0cmFyeSBtYXNrLCBzbyBJIGRvIGEgdW5pY2FzdHMgdG8gZWFjaCBDUFUgaW5zdGVhZC4gVGhpcworCSAqIHNob3VsZCBiZSBtb2RpZmllZCB0byBkbyAxIG1lc3NhZ2UgcGVyIGNsdXN0ZXIgSUQgLSBtYmxpZ2gKKwkgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKQorCQlfX2RlZmF1bHRfc2VuZF9JUElfZGVzdF9maWVsZCgKKwkJCWFwaWMtPmNwdV90b19sb2dpY2FsX2FwaWNpZChxdWVyeV9jcHUpLCB2ZWN0b3IsCisJCQlhcGljLT5kZXN0X2xvZ2ljYWwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9sb2dpY2FsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQkJIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcXVlcnlfY3B1OworCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qIFNlZSBIYWNrIGNvbW1lbnQgYWJvdmUgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CisJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCisJCQljb250aW51ZTsKKwkJX19kZWZhdWx0X3NlbmRfSVBJX2Rlc3RfZmllbGQoCisJCQlhcGljLT5jcHVfdG9fbG9naWNhbF9hcGljaWQocXVlcnlfY3B1KSwgdmVjdG9yLAorCQkJYXBpYy0+ZGVzdF9sb2dpY2FsKTsKKwkJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKKworLyoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG9uIHNtYWxsZXIgbWFjaGluZXMuCisgKi8KK3ZvaWQgZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2xvZ2ljYWwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJV0FSTl9PTihtYXNrICYgfmNwdW1hc2tfYml0cyhjcHVfb25saW5lX21hc2spWzBdKTsKKwlfX2RlZmF1bHRfc2VuZF9JUElfZGVzdF9maWVsZChtYXNrLCB2ZWN0b3IsIGFwaWMtPmRlc3RfbG9naWNhbCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIGRlZmF1bHRfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCS8qCisJICogaWYgdGhlcmUgYXJlIG5vIG90aGVyIENQVXMgaW4gdGhlIHN5c3RlbSB0aGVuIHdlIGdldCBhbiBBUElDIHNlbmQKKwkgKiBlcnJvciBpZiB3ZSB0cnkgdG8gYnJvYWRjYXN0LCB0aHVzIGF2b2lkIHNlbmRpbmcgSVBJcyBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKCEobnVtX29ubGluZV9jcHVzKCkgPiAxKSkKKwkJcmV0dXJuOworCisJX19kZWZhdWx0X2xvY2FsX3NlbmRfSVBJX2FsbGJ1dHNlbGYodmVjdG9yKTsKK30KKwordm9pZCBkZWZhdWx0X3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQoreworCV9fZGVmYXVsdF9sb2NhbF9zZW5kX0lQSV9hbGwodmVjdG9yKTsKK30KKwordm9pZCBkZWZhdWx0X3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKK3sKKwlfX2RlZmF1bHRfc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX1NFTEYsIHZlY3RvciwgYXBpYy0+ZGVzdF9sb2dpY2FsKTsKK30KKworLyogbXVzdCBjb21lIGFmdGVyIHRoZSBzZW5kX0lQSSBmdW5jdGlvbnMgYWJvdmUgZm9yIGlubGluaW5nICovCitzdGF0aWMgaW50IGNvbnZlcnRfYXBpY2lkX3RvX2NwdShpbnQgYXBpY19pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWlmIChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBpKSA9PSBhcGljX2lkKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCWludCBhcGljaWQsIGNwdWlkOworCisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykpCisJCXJldHVybiAwOworCisJYXBpY2lkID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGFwaWNpZCA9PSBCQURfQVBJQ0lEKQorCQlyZXR1cm4gMDsKKworCWNwdWlkID0gY29udmVydF9hcGljaWRfdG9fY3B1KGFwaWNpZCk7CisKKwlyZXR1cm4gY3B1aWQgPj0gMCA/IGNwdWlkIDogMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL25taS5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwppbmRleCA3MjI4OTc5Li5iZGZhZDgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tY2UuaD4KIAotI2luY2x1ZGUgPG1hY2hfdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaF90cmFwcy5oPgogCiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CiBpbnQgbm1pX3dhdGNoZG9nX2VuYWJsZWQ7CkBAIC02MSwxMSArNjEsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfbm1pX2NvdW50KGludCBjcHUpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiBjcHVfcGRhKGNwdSktPl9fbm1pX2NvdW50OwotI2Vsc2UKLQlyZXR1cm4gbm1pX2NvdW50KGNwdSk7Ci0jZW5kaWYKKwlyZXR1cm4gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5fX25taV9jb3VudDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWNlX2luX3Byb2dyZXNzKHZvaWQpCkBAIC04MiwxMiArNzgsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGltZXJfaXJxcyhpbnQgY3B1KQogewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gcmVhZF9wZGEoYXBpY190aW1lcl9pcnFzKSArIHJlYWRfcGRhKGlycTBfaXJxcyk7Ci0jZWxzZQogCXJldHVybiBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxcyArCiAJCXBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuaXJxMF9pcnFzOwotI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTJmYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwpAQCAtMCwwICsxLDU1NyBAQAorLyoKKyAqIFdyaXR0ZW4gYnk6IFBhdHJpY2lhIEdhdWdoZW4sIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxnb25lQHVzLmlibS5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vbnVtYXEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCisjZGVmaW5lCU1CX1RPX1BBR0VTKGFkZHIpCQkoKGFkZHIpIDw8ICgyMCAtIFBBR0VfU0hJRlQpKQorCitpbnQgZm91bmRfbnVtYXE7CisKKy8qCisgKiBIYXZlIHRvIG1hdGNoIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJpZXMgdG8gbWFpbiB0YWJsZSBlbnRyaWVzIGJ5IGNvdW50ZXIKKyAqIGhlbmNlIHRoZSBtcGNfcmVjb3JkIHZhcmlhYmxlIC4uLi4gY2FuJ3Qgc2VlIGEgbGVzcyBkaXNndXN0aW5nIHdheSBvZgorICogZG9pbmcgdGhpcyAuLi4uCisgKi8KK3N0cnVjdCBtcGNfdHJhbnMgeworCXVuc2lnbmVkIGNoYXIJCQltcGNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyCQkJdHJhbnNfbGVuOworCXVuc2lnbmVkIGNoYXIJCQl0cmFuc190eXBlOworCXVuc2lnbmVkIGNoYXIJCQl0cmFuc19xdWFkOworCXVuc2lnbmVkIGNoYXIJCQl0cmFuc19nbG9iYWw7CisJdW5zaWduZWQgY2hhcgkJCXRyYW5zX2xvY2FsOworCXVuc2lnbmVkIHNob3J0CQkJdHJhbnNfcmVzZXJ2ZWQ7Cit9OworCisvKiB4ODZfcXVpcmtzIG1lbWJlciAqLworc3RhdGljIGludAkJCQltcGNfcmVjb3JkOworCitzdGF0aWMgc3RydWN0IG1wY190cmFucwkJCSp0cmFuc2xhdGlvbl90YWJsZVtNQVhfTVBDX0VOVFJZXTsKKworaW50CQkJCQltcF9idXNfaWRfdG9fbm9kZVtNQVhfTVBfQlVTU0VTXTsKK2ludAkJCQkJbXBfYnVzX2lkX3RvX2xvY2FsW01BWF9NUF9CVVNTRVNdOworaW50CQkJCQlxdWFkX2xvY2FsX3RvX21wX2J1c19pZFtOUl9DUFVTLzRdWzRdOworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9yZWdpc3Rlcl9ub2RlKGludCBub2RlLCBzdHJ1Y3Qgc3lzX2NmZ19kYXRhICpzY2QpCit7CisJc3RydWN0IGVhY2hxdWFkbWVtICplcSA9IHNjZC0+ZXEgKyBub2RlOworCisJbm9kZV9zZXRfb25saW5lKG5vZGUpOworCisJLyogQ29udmVydCB0byBwYWdlcyAqLworCW5vZGVfc3RhcnRfcGZuW25vZGVdID0KKwkJIE1CX1RPX1BBR0VTKGVxLT5oaV9zaHJkX21lbV9zdGFydCAtIGVxLT5wcml2X21lbV9zaXplKTsKKworCW5vZGVfZW5kX3Bmbltub2RlXSA9CisJCSBNQl9UT19QQUdFUyhlcS0+aGlfc2hyZF9tZW1fc3RhcnQgKyBlcS0+aGlfc2hyZF9tZW1fc2l6ZSk7CisKKwllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKG5vZGUsIG5vZGVfc3RhcnRfcGZuW25vZGVdLAorCQkJCQkJbm9kZV9lbmRfcGZuW25vZGVdKTsKKworCW1lbW9yeV9wcmVzZW50KG5vZGUsIG5vZGVfc3RhcnRfcGZuW25vZGVdLCBub2RlX2VuZF9wZm5bbm9kZV0pOworCisJbm9kZV9yZW1hcF9zaXplW25vZGVdID0gbm9kZV9tZW1tYXBfc2l6ZV9ieXRlcyhub2RlLAorCQkJCQlub2RlX3N0YXJ0X3Bmbltub2RlXSwKKwkJCQkJbm9kZV9lbmRfcGZuW25vZGVdKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBzbXBfZHVtcF9xY3QoKQorICoKKyAqIERlc2NyaXB0aW9uOiBnZXRzIG1lbW9yeSBsYXlvdXQgZnJvbSB0aGUgcXVhZCBjb25maWcgdGFibGUuICBUaGlzCisgKiBmdW5jdGlvbiBhbHNvIHVwZGF0ZXMgbm9kZV9vbmxpbmVfbWFwIHdpdGggdGhlIG5vZGVzIChxdWFkcykgcHJlc2VudC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNtcF9kdW1wX3FjdCh2b2lkKQoreworCXN0cnVjdCBzeXNfY2ZnX2RhdGEgKnNjZDsKKwlpbnQgbm9kZTsKKworCXNjZCA9ICh2b2lkICopX192YShTWVNfQ0ZHX0RBVEFfUFJJVl9BRERSKTsKKworCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CisJZm9yX2VhY2hfbm9kZShub2RlKSB7CisJCWlmIChzY2QtPnF1YWRzX3ByZXNlbnQzMV8wICYgKDEgPDwgbm9kZSkpCisJCQludW1hcV9yZWdpc3Rlcl9ub2RlKG5vZGUsIHNjZCk7CisJfQorfQorCit2b2lkIF9fY3B1aW5pdCBudW1hcV90c2NfZGlzYWJsZSh2b2lkKQoreworCWlmICghZm91bmRfbnVtYXEpCisJCXJldHVybjsKKworCWlmIChudW1fb25saW5lX25vZGVzKCkgPiAxKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJOVU1BUTogZGlzYWJsaW5nIFRTQ1xuIik7CisJCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG51bWFxX3ByZV90aW1lX2luaXQodm9pZCkKK3sKKwludW1hcV90c2NfZGlzYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChpbnQgcXVhZCwgaW50IHBoeXNfYXBpY2lkKQoreworCXJldHVybiAocXVhZCA8PCA0KSArIChwaHlzX2FwaWNpZCA/IHBoeXNfYXBpY2lkIDw8IDEgOiAxKTsKK30KKworLyogeDg2X3F1aXJrcyBtZW1iZXIgKi8KK3N0YXRpYyBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jcHUgKm0pCit7CisJaW50IHF1YWQgPSB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXS0+dHJhbnNfcXVhZDsKKwlpbnQgbG9naWNhbF9hcGljaWQgPSBnZW5lcmF0ZV9sb2dpY2FsX2FwaWNpZChxdWFkLCBtLT5hcGljaWQpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIlByb2Nlc3NvciAjJWQgJXU6JXUgQVBJQyB2ZXJzaW9uICVkIChxdWFkICVkLCBhcGljICVkKVxuIiwKKwkJIG0tPmFwaWNpZCwgKG0tPmNwdWZlYXR1cmUgJiBDUFVfRkFNSUxZX01BU0spID4+IDgsCisJCShtLT5jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCisJCSBtLT5hcGljdmVyLCBxdWFkLCBsb2dpY2FsX2FwaWNpZCk7CisKKwlyZXR1cm4gbG9naWNhbF9hcGljaWQ7Cit9CisKKy8qIHg4Nl9xdWlya3MgbWVtYmVyICovCitzdGF0aWMgdm9pZCBtcGNfb2VtX2J1c19pbmZvKHN0cnVjdCBtcGNfYnVzICptLCBjaGFyICpuYW1lKQoreworCWludCBxdWFkID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX3F1YWQ7CisJaW50IGxvY2FsID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX2xvY2FsOworCisJbXBfYnVzX2lkX3RvX25vZGVbbS0+YnVzaWRdID0gcXVhZDsKKwltcF9idXNfaWRfdG9fbG9jYWxbbS0+YnVzaWRdID0gbG9jYWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJCdXMgIyVkIGlzICVzIChub2RlICVkKVxuIiwgbS0+YnVzaWQsIG5hbWUsIHF1YWQpOworfQorCisvKiB4ODZfcXVpcmtzIG1lbWJlciAqLworc3RhdGljIHZvaWQgbXBjX29lbV9wY2lfYnVzKHN0cnVjdCBtcGNfYnVzICptKQoreworCWludCBxdWFkID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX3F1YWQ7CisJaW50IGxvY2FsID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX2xvY2FsOworCisJcXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdID0gbS0+YnVzaWQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBNUF90cmFuc2xhdGlvbl9pbmZvKHN0cnVjdCBtcGNfdHJhbnMgKm0pCit7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAiVHJhbnNsYXRpb246IHJlY29yZCAlZCwgdHlwZSAlZCwgcXVhZCAlZCwgZ2xvYmFsICVkLCBsb2NhbCAlZFxuIiwKKwkgICAgICAgbXBjX3JlY29yZCwgbS0+dHJhbnNfdHlwZSwgbS0+dHJhbnNfcXVhZCwgbS0+dHJhbnNfZ2xvYmFsLAorCSAgICAgICBtLT50cmFuc19sb2NhbCk7CisKKwlpZiAobXBjX3JlY29yZCA+PSBNQVhfTVBDX0VOVFJZKQorCQlwcmludGsoS0VSTl9FUlIgIk1BWF9NUENfRU5UUlkgZXhjZWVkZWQhXG4iKTsKKwllbHNlCisJCXRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdID0gbTsgLyogc3Rhc2ggdGhpcyBmb3IgbGF0ZXIgKi8KKworCWlmIChtLT50cmFuc19xdWFkIDwgTUFYX05VTU5PREVTICYmICFub2RlX29ubGluZShtLT50cmFuc19xdWFkKSkKKwkJbm9kZV9zZXRfb25saW5lKG0tPnRyYW5zX3F1YWQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtcGZfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqbXAsIGludCBsZW4pCit7CisJaW50IHN1bSA9IDA7CisKKwl3aGlsZSAobGVuLS0pCisJCXN1bSArPSAqbXArKzsKKworCXJldHVybiBzdW0gJiAweEZGOworfQorCisvKgorICogUmVhZC9wYXJzZSB0aGUgTVBDIG9lbSB0YWJsZXMKKyAqLworc3RhdGljIHZvaWQgX19pbml0Cisgc21wX3JlYWRfbXBjX29lbShzdHJ1Y3QgbXBjX29lbXRhYmxlICpvZW10YWJsZSwgdW5zaWduZWQgc2hvcnQgb2Vtc2l6ZSkKK3sKKwlpbnQgY291bnQgPSBzaXplb2YoKm9lbXRhYmxlKTsJLyogdGhlIGhlYWRlciBzaXplICovCisJdW5zaWduZWQgY2hhciAqb2VtcHRyID0gKCh1bnNpZ25lZCBjaGFyICopb2VtdGFibGUpICsgY291bnQ7CisKKwltcGNfcmVjb3JkID0gMDsKKwlwcmludGsoS0VSTl9JTkZPCisJCSJGb3VuZCBhbiBPRU0gTVBDIHRhYmxlIGF0ICU4cCAtIHBhcnNpbmcgaXQgLi4uIFxuIiwgb2VtdGFibGUpOworCisJaWYgKG1lbWNtcChvZW10YWJsZS0+c2lnbmF0dXJlLCBNUENfT0VNX1NJR05BVFVSRSwgNCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlNNUCBtcGMgb2VtdGFibGU6IGJhZCBzaWduYXR1cmUgWyVjJWMlYyVjXSFcbiIsCisJCSAgICAgICBvZW10YWJsZS0+c2lnbmF0dXJlWzBdLCBvZW10YWJsZS0+c2lnbmF0dXJlWzFdLAorCQkgICAgICAgb2VtdGFibGUtPnNpZ25hdHVyZVsyXSwgb2VtdGFibGUtPnNpZ25hdHVyZVszXSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobXBmX2NoZWNrc3VtKCh1bnNpZ25lZCBjaGFyICopb2VtdGFibGUsIG9lbXRhYmxlLT5sZW5ndGgpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNUCBvZW0gbXB0YWJsZTogY2hlY2tzdW0gZXJyb3IhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChjb3VudCA8IG9lbXRhYmxlLT5sZW5ndGgpIHsKKwkJc3dpdGNoICgqb2VtcHRyKSB7CisJCWNhc2UgTVBfVFJBTlNMQVRJT046CisJCQl7CisJCQkJc3RydWN0IG1wY190cmFucyAqbSA9ICh2b2lkICopb2VtcHRyOworCisJCQkJTVBfdHJhbnNsYXRpb25faW5mbyhtKTsKKwkJCQlvZW1wdHIgKz0gc2l6ZW9mKCptKTsKKwkJCQljb3VudCArPSBzaXplb2YoKm0pOworCQkJCSsrbXBjX3JlY29yZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiVW5yZWNvZ25pc2VkIE9FTSB0YWJsZSBlbnRyeSB0eXBlISAtICVkXG4iLAorCQkJICAgICAgIChpbnQpKm9lbXB0cik7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG51bWFxX3NldHVwX2lvYXBpY19pZHModm9pZCkKK3sKKwkvKiBzbyBjYW4gc2tpcCBpdCAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHg4Nl9xdWlya3MgbnVtYXFfeDg2X3F1aXJrcyBfX2luaXRkYXRhID0geworCS5hcmNoX3ByZV90aW1lX2luaXQJCT0gbnVtYXFfcHJlX3RpbWVfaW5pdCwKKwkuYXJjaF90aW1lX2luaXQJCQk9IE5VTEwsCisJLmFyY2hfcHJlX2ludHJfaW5pdAkJPSBOVUxMLAorCS5hcmNoX21lbW9yeV9zZXR1cAkJPSBOVUxMLAorCS5hcmNoX2ludHJfaW5pdAkJCT0gTlVMTCwKKwkuYXJjaF90cmFwX2luaXQJCQk9IE5VTEwsCisJLm1hY2hfZ2V0X3NtcF9jb25maWcJCT0gTlVMTCwKKwkubWFjaF9maW5kX3NtcF9jb25maWcJCT0gTlVMTCwKKwkubXBjX3JlY29yZAkJCT0gJm1wY19yZWNvcmQsCisJLm1wY19hcGljX2lkCQkJPSBtcGNfYXBpY19pZCwKKwkubXBjX29lbV9idXNfaW5mbwkJPSBtcGNfb2VtX2J1c19pbmZvLAorCS5tcGNfb2VtX3BjaV9idXMJCT0gbXBjX29lbV9wY2lfYnVzLAorCS5zbXBfcmVhZF9tcGNfb2VtCQk9IHNtcF9yZWFkX21wY19vZW0sCisJLnNldHVwX2lvYXBpY19pZHMJCT0gbnVtYXFfc2V0dXBfaW9hcGljX2lkcywKK307CisKK3N0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9jaGVja19udW1hcSh2b2lkKQoreworCS8qCisJICogRmluZCBwb3NzaWJsZSBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb246CisJICovCisJZWFybHlfZmluZF9zbXBfY29uZmlnKCk7CisKKwkvKgorCSAqIGdldCBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb246CisJICovCisJaWYgKHNtcF9mb3VuZF9jb25maWcpCisJCWVhcmx5X2dldF9zbXBfY29uZmlnKCk7CisKKwlpZiAoZm91bmRfbnVtYXEpCisJCXg4Nl9xdWlya3MgPSAmbnVtYXFfeDg2X3F1aXJrczsKK30KKworaW50IF9faW5pdCBnZXRfbWVtY2ZnX251bWFxKHZvaWQpCit7CisJZWFybHlfY2hlY2tfbnVtYXEoKTsKKwlpZiAoIWZvdW5kX251bWFxKQorCQlyZXR1cm4gMDsKKwlzbXBfZHVtcF9xY3QoKTsKKworCXJldHVybiAxOworfQorCisjZGVmaW5lIE5VTUFRX0FQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1hcV9nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJuICh4ID4+IDI0KSAmIDB4MEY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9sb2dpY2FsKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGZfbG9naWNhbChjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwludW1hcV9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKK30KKworI2RlZmluZSBOVU1BUV9UUkFNUE9MSU5FX1BIWVNfTE9XCSgweDgpCisjZGVmaW5lIE5VTUFRX1RSQU1QT0xJTkVfUEhZU19ISUdICSgweGEpCisKKy8qCisgKiBCZWNhdXNlIHdlIHVzZSBOTUlzIHJhdGhlciB0aGFuIHRoZSBJTklULVNUQVJUVVAgc2VxdWVuY2UgdG8KKyAqIGJvb3RzdHJhcCB0aGUgQ1BVcywgdGhlIEFQSUMgbWF5IGJlIGluIGEgd2VpcmQgc3RhdGUuIEtpY2sgaXQ6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWModm9pZCkKK3sKKwljbGVhcl9sb2NhbF9BUElDKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpudW1hcV90YXJnZXRfY3B1cyh2b2lkKQoreworCXJldHVybiAmQ1BVX01BU0tfQUxMOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK251bWFxX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQoreworCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbnVtYXFfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgaW5saW5lIGludCBudW1hcV9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG51bWFxX2luaXRfYXBpY19sZHIodm9pZCkKK3sKKwkvKiBBbHJlYWR5IGRvbmUgaW4gTlVNQS1RIGZpcm13YXJlICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hcV9zZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPCisJCSJFbmFibGluZyBBUElDIG1vZGU6ICBOVU1BLVEuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCisJCW5yX2lvYXBpY3MpOworfQorCisvKgorICogU2tpcCBhZGRpbmcgdGhlIHRpbWVyIGludCBvbiBzZWNvbmRhcnkgbm9kZXMsIHdoaWNoIGNhdXNlcworICogYSBzbWFsbCBidXQgcGFpbmZ1bCByaWZ0IGluIHRoZSB0aW1lLXNwYWNlIGNvbnRpbnV1bS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbnVtYXFfbXVsdGlfdGltZXJfY2hlY2soaW50IGFwaWMsIGludCBpcnEpCit7CisJcmV0dXJuIGFwaWMgIT0gMCAmJiBpcnEgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IG51bWFxX2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQoreworCS8qIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KKwlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4RlVMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbnVtYXFfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGludCBjcHUpCit7CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKK30KKworLyoKKyAqIFN1cHBvcnRpbmcgb3ZlciA2MCBjcHVzIG9uIE5VTUEtUSByZXF1aXJlcyBhIGxvY2FsaXR5LWRlcGVuZGVudAorICogY3B1IHRvIEFQSUMgSUQgcmVsYXRpb24gdG8gcHJvcGVybHkgaW50ZXJhY3Qgd2l0aCB0aGUgaW50ZWxsaWdlbnQKKyAqIG1vZGUgb2YgdGhlIGNsdXN0ZXIgY29udHJvbGxlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbnVtYXFfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQoreworCWlmIChtcHNfY3B1IDwgNjApCisJCXJldHVybiAoKG1wc19jcHUgPj4gMikgPDwgNCkgfCAoMSA8PCAobXBzX2NwdSAmIDB4MykpOworCWVsc2UKKwkJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bWFxX2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKK3sKKwlyZXR1cm4gbG9naWNhbF9hcGljaWQgPj4gNDsKK30KKworc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IG51bWFxX2FwaWNpZF90b19jcHVfcHJlc2VudChpbnQgbG9naWNhbF9hcGljaWQpCit7CisJaW50IG5vZGUgPSBudW1hcV9hcGljaWRfdG9fbm9kZShsb2dpY2FsX2FwaWNpZCk7CisJaW50IGNwdSA9IF9fZmZzKGxvZ2ljYWxfYXBpY2lkICYgMHhmKTsKKworCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQoY3B1ICsgNCpub2RlKTsKK30KKworLyogV2hlcmUgdGhlIElPIGFyZWEgd2FzIG1hcHBlZCBvbiBtdWx0aXF1YWQsIGFsd2F5cyAwIG90aGVyd2lzZSAqLwordm9pZCAqeHF1YWRfcG9ydGlvOworCitzdGF0aWMgaW5saW5lIGludCBudW1hcV9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBXZSB1c2UgcGh5c2ljYWwgYXBpY2lkcyBoZXJlLCBub3QgbG9naWNhbCwgc28ganVzdCByZXR1cm4gdGhlIGRlZmF1bHQKKyAqIHBoeXNpY2FsIGJyb2FkY2FzdCB0byBzdG9wIHBlb3BsZSBmcm9tIGJyZWFraW5nIHVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG51bWFxX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCit7CisJcmV0dXJuIDB4MEY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitudW1hcV9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlyZXR1cm4gMHgwRjsKK30KKworLyogTm8gTlVNQS1RIGJveCBoYXMgYSBIVCBDUFUsIGJ1dCBpdCBjYW4ndCBodXJ0IHRvIHVzZSB0aGUgZGVmYXVsdCBjb2RlLiAqLworc3RhdGljIGlubGluZSBpbnQgbnVtYXFfcGh5c19wa2dfaWQoaW50IGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCitzdGF0aWMgaW50CitudW1hcV9tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCit7CisJaWYgKHN0cm5jbXAob2VtLCAiSUJNIE5VTUEiLCA4KSkKKwkJcHJpbnRrKEtFUk5fRVJSICJXYXJuaW5nISBOb3QgYSBOVU1BLVEgc3lzdGVtIVxuIik7CisJZWxzZQorCQlmb3VuZF9udW1hcSA9IDE7CisKKwlyZXR1cm4gZm91bmRfbnVtYXE7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfbnVtYXEodm9pZCkKK3sKKwkvKiBhbHJlYWR5IGtub3cgZnJvbSBnZXRfbWVtY2ZnX251bWFxKCkgKi8KKwlyZXR1cm4gZm91bmRfbnVtYXE7Cit9CisKK3N0YXRpYyB2b2lkIG51bWFxX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworfQorCitzdGF0aWMgdm9pZCBudW1hcV9zZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKK3sKKwlpbnQgbnVtX3F1YWRzID0gbnVtX29ubGluZV9ub2RlcygpOworCisJaWYgKG51bV9xdWFkcyA8PSAxKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJSZW1hcHBpbmcgY3Jvc3MtcXVhZCBwb3J0IEkvTyBmb3IgJWQgcXVhZHNcbiIsIG51bV9xdWFkcyk7CisKKwl4cXVhZF9wb3J0aW8gPSBpb3JlbWFwKFhRVUFEX1BPUlRJT19CQVNFLCBudW1fcXVhZHMqWFFVQURfUE9SVElPX1FVQUQpOworCisJcHJpbnRrKEtFUk5fSU5GTworCQkieHF1YWRfcG9ydGlvIHZhZGRyIDB4JTA4bHgsIGxlbiAlMDhseFxuIiwKKwkJKHVfbG9uZykgeHF1YWRfcG9ydGlvLCAodV9sb25nKSBudW1fcXVhZHMqWFFVQURfUE9SVElPX1FVQUQpOworfQorCitzdHJ1Y3QgYXBpYyBhcGljX251bWFxID0geworCisJLm5hbWUJCQkJPSAiTlVNQVEiLAorCS5wcm9iZQkJCQk9IHByb2JlX251bWFxLAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBudW1hcV9hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9Mb3dlc3RQcmlvLAorCS8qIHBoeXNpY2FsIGRlbGl2ZXJ5IG9uIExPQ0FMIHF1YWQ6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDAsCisKKwkudGFyZ2V0X2NwdXMJCQk9IG51bWFxX3RhcmdldF9jcHVzLAorCS5kaXNhYmxlX2VzcgkJCT0gMSwKKwkuZGVzdF9sb2dpY2FsCQkJPSBBUElDX0RFU1RfTE9HSUNBTCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gbnVtYXFfY2hlY2tfYXBpY2lkX3VzZWQsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IG51bWFxX2NoZWNrX2FwaWNpZF9wcmVzZW50LAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IG51bWFxX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gbnVtYXFfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gbnVtYXFfaW9hcGljX3BoeXNfaWRfbWFwLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gbnVtYXFfc2V0dXBfYXBpY19yb3V0aW5nLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBudW1hcV9tdWx0aV90aW1lcl9jaGVjaywKKwkuYXBpY2lkX3RvX25vZGUJCQk9IG51bWFxX2FwaWNpZF90b19ub2RlLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gbnVtYXFfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gbnVtYXFfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gbnVtYXFfYXBpY2lkX3RvX2NwdV9wcmVzZW50LAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gbnVtYXFfc2V0dXBfcG9ydGlvX3JlbWFwLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gbnVtYXFfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKKwkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLAorCS5waHlzX3BrZ19pZAkJCT0gbnVtYXFfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IG51bWFxX21wc19vZW1fY2hlY2ssCisKKwkuZ2V0X2FwaWNfaWQJCQk9IG51bWFxX2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gTlVMTCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweDBGIDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBudW1hcV9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSBudW1hcV9zZW5kX0lQSV9tYXNrLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBOVUxMLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmCQk9IG51bWFxX3NlbmRfSVBJX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbAkJCT0gbnVtYXFfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBkZWZhdWx0X3NlbmRfSVBJX3NlbGYsCisKKwkud2FrZXVwX3NlY29uZGFyeV9jcHUJCT0gd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taSwKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBOVU1BUV9UUkFNUE9MSU5FX1BIWVNfTE9XLAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSBOVU1BUV9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKworCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmUgYmVjYXVzZSB3ZSB1c2UgTk1JJ3MgdG8gYm9vdCBpbnN0ZWFkICovCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gTlVMTCwKKworCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBudW1hcV9zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMsCisJLmlucXVpcmVfcmVtb3RlX2FwaWMJCT0gTlVMTCwKKworCS5yZWFkCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCisJLndyaXRlCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAorCS5pY3JfcmVhZAkJCT0gbmF0aXZlX2FwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX2FwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBuYXRpdmVfYXBpY193YWl0X2ljcl9pZGxlLAorCS5zYWZlX3dhaXRfaWNyX2lkbGUJCT0gbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MWM5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogRGVmYXVsdCBnZW5lcmljIEFQSUMgZHJpdmVyLiBUaGlzIGhhbmRsZXMgdXAgdG8gOCBDUFVzLgorICoKKyAqIENvcHlyaWdodCAyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KKyAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCisgKgorICogR2VuZXJpYyB4ODYgQVBJQyBkcml2ZXIgcHJvYmUgbGF5ZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorI2RlZmluZSBERUZBVUxUX1NFTkRfSVBJCSgxKQorI2Vsc2UKKyNkZWZpbmUgREVGQVVMVF9TRU5EX0lQSQkoMCkKKyNlbmRpZgorCitpbnQgbm9fYnJvYWRjYXN0ID0gREVGQVVMVF9TRU5EX0lQSTsKKworc3RhdGljIF9faW5pdCBpbnQgbm9faXBpX2Jyb2FkY2FzdChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbm9fYnJvYWRjYXN0KTsKKwlwcl9pbmZvKCJVc2luZyAlcyBtb2RlXG4iLAorCQlub19icm9hZGNhc3QgPyAiTm8gSVBJIEJyb2FkY2FzdCIgOiAiSVBJIEJyb2FkY2FzdCIpOworCXJldHVybiAxOworfQorX19zZXR1cCgibm9faXBpX2Jyb2FkY2FzdD0iLCBub19pcGlfYnJvYWRjYXN0KTsKKworc3RhdGljIGludCBfX2luaXQgcHJpbnRfaXBpX21vZGUodm9pZCkKK3sKKwlwcl9pbmZvKCJVc2luZyBJUEkgJXMgbW9kZVxuIiwKKwkJbm9fYnJvYWRjYXN0ID8gIk5vLVNob3J0Y3V0IiA6ICJTaG9ydGN1dCIpOworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChwcmludF9pcGlfbW9kZSk7CisKK3ZvaWQgZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlwcmludGsoS0VSTl9JTkZPCisJCSJFbmFibGluZyBBUElDIG1vZGU6ICBGbGF0LiAgVXNpbmcgJWQgSS9PIEFQSUNzXG4iLAorCQlucl9pb2FwaWNzKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBkZWZhdWx0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwkvKgorCSAqIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCisJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKKwkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KKwkgKi8KKwkqcmV0bWFzayA9IChjcHVtYXNrX3QpIHsgeyBbMF0gPSBBUElDX0FMTF9DUFVTIH0gfTsKK30KKworLyogc2hvdWxkIGJlIGNhbGxlZCBsYXN0LiAqLworc3RhdGljIGludCBwcm9iZV9kZWZhdWx0KHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBhcGljIGFwaWNfZGVmYXVsdCA9IHsKKworCS5uYW1lCQkJCT0gImRlZmF1bHQiLAorCS5wcm9iZQkJCQk9IHByb2JlX2RlZmF1bHQsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0gTlVMTCwKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IGRlZmF1bHRfYXBpY19pZF9yZWdpc3RlcmVkLAorCisJLmlycV9kZWxpdmVyeV9tb2RlCQk9IGRlc3RfTG93ZXN0UHJpbywKKwkvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgQ1BVczogKi8KKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMSwKKworCS50YXJnZXRfY3B1cwkJCT0gZGVmYXVsdF90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDAsCisJLmRlc3RfbG9naWNhbAkJCT0gQVBJQ19ERVNUX0xPR0lDQUwsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IGRlZmF1bHRfY2hlY2tfYXBpY2lkX3VzZWQsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IGRlZmF1bHRfY2hlY2tfYXBpY2lkX3ByZXNlbnQsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZGVmYXVsdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IGRlZmF1bHRfaW5pdF9hcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gZGVmYXVsdF9pb2FwaWNfcGh5c19pZF9tYXAsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZywKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gTlVMTCwKKwkuYXBpY2lkX3RvX25vZGUJCQk9IGRlZmF1bHRfYXBpY2lkX3RvX25vZGUsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV90b19sb2dpY2FsX2FwaWNpZCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gZGVmYXVsdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IE5VTEwsCisJLnBoeXNfcGtnX2lkCQkJPSBkZWZhdWx0X3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBOVUxMLAorCisJLmdldF9hcGljX2lkCQkJPSBkZWZhdWx0X2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gTlVMTCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweDBGIDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSBkZWZhdWx0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQsCisKKwkuc2VuZF9JUElfbWFzawkJCT0gZGVmYXVsdF9zZW5kX0lQSV9tYXNrX2xvZ2ljYWwsCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IGRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX2xvZ2ljYWwsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0gZGVmYXVsdF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IGRlZmF1bHRfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBkZWZhdWx0X3NlbmRfSVBJX3NlbGYsCisKKwkudHJhbXBvbGluZV9waHlzX2xvdwkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19MT1csCisJLnRyYW1wb2xpbmVfcGh5c19oaWdoCQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0hJR0gsCisKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBkZWZhdWx0X3dhaXRfZm9yX2luaXRfZGVhc3NlcnQsCisKKwkuc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljCT0gTlVMTCwKKwkuaW5xdWlyZV9yZW1vdGVfYXBpYwkJPSBkZWZhdWx0X2lucXVpcmVfcmVtb3RlX2FwaWMsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV9hcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUJCQk9IG5hdGl2ZV9hcGljX2ljcl93cml0ZSwKKwkud2FpdF9pY3JfaWRsZQkJCT0gbmF0aXZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKK307CisKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX251bWFxOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfc3VtbWl0OworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfYmlnc21wOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfZXM3MDAwOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfZXM3MDAwX2NsdXN0ZXI7CitleHRlcm4gc3RydWN0IGFwaWMgYXBpY19kZWZhdWx0OworCitzdHJ1Y3QgYXBpYyAqYXBpYyA9ICZhcGljX2RlZmF1bHQ7CitFWFBPUlRfU1lNQk9MX0dQTChhcGljKTsKKworc3RhdGljIHN0cnVjdCBhcGljICphcGljX3Byb2JlW10gX19pbml0ZGF0YSA9IHsKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisJJmFwaWNfbnVtYXEsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X1NVTU1JVAorCSZhcGljX3N1bW1pdCwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfQklHU01QCisJJmFwaWNfYmlnc21wLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9FUzcwMDAKKwkmYXBpY19lczcwMDAsCisJJmFwaWNfZXM3MDAwX2NsdXN0ZXIsCisjZW5kaWYKKwkmYXBpY19kZWZhdWx0LAkvKiBtdXN0IGJlIGxhc3QgKi8KKwlOVUxMLAorfTsKKworc3RhdGljIGludCBjbWRsaW5lX2FwaWMgX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FwaWMoY2hhciAqYXJnKQoreworCWludCBpOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgaSsrKSB7CisJCWlmICghc3RyY21wKGFwaWNfcHJvYmVbaV0tPm5hbWUsIGFyZykpIHsKKwkJCWFwaWMgPSBhcGljX3Byb2JlW2ldOworCQkJY21kbGluZV9hcGljID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogUGFyc2VkIGFnYWluIGJ5IF9fc2V0dXAgZm9yIGRlYnVnL3ZlcmJvc2UgKi8KKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJhcGljIiwgcGFyc2VfYXBpYyk7CisKK3ZvaWQgX19pbml0IGdlbmVyaWNfYmlnc21wX3Byb2JlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl9CSUdTTVAKKwkvKgorCSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHN3aXRjaCB0byBiaWdzbXAgbW9kZSB3aGVuCisJICogLSBUaGVyZSBpcyBubyBhcGljPSBvcHRpb24gc3BlY2lmaWVkIGJ5IHRoZSB1c2VyCisJICogLSBnZW5lcmljX2FwaWNfcHJvYmUoKSBoYXMgY2hvc2VuIGFwaWNfZGVmYXVsdCBhcyB0aGUgc3ViX2FyY2gKKwkgKiAtIHdlIGZpbmQgbW9yZSB0aGFuIDggQ1BVcyBpbiBhY3BpIExBUElDIGxpc3Rpbmcgd2l0aCB4QVBJQyBzdXBwb3J0CisJICovCisKKwlpZiAoIWNtZGxpbmVfYXBpYyAmJiBhcGljID09ICZhcGljX2RlZmF1bHQpIHsKKwkJaWYgKGFwaWNfYmlnc21wLnByb2JlKCkpIHsKKwkJCWFwaWMgPSAmYXBpY19iaWdzbXA7CisJCQlwcmludGsoS0VSTl9JTkZPICJPdmVycmlkaW5nIEFQSUMgZHJpdmVyIHdpdGggJXNcbiIsCisJCQkgICAgICAgYXBpYy0+bmFtZSk7CisJCX0KKwl9CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgZ2VuZXJpY19hcGljX3Byb2JlKHZvaWQpCit7CisJaWYgKCFjbWRsaW5lX2FwaWMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07IGkrKykgeworCQkJaWYgKGFwaWNfcHJvYmVbaV0tPnByb2JlKCkpIHsKKwkJCQlhcGljID0gYXBpY19wcm9iZVtpXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBOb3QgdmlzaWJsZSB3aXRob3V0IGVhcmx5IGNvbnNvbGUgKi8KKwkJaWYgKCFhcGljX3Byb2JlW2ldKQorCQkJcGFuaWMoIkRpZG4ndCBmaW5kIGFuIEFQSUMgZHJpdmVyIik7CisJfQorCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEFQSUMgZHJpdmVyICVzXG4iLCBhcGljLT5uYW1lKTsKK30KKworLyogVGhlc2UgZnVuY3Rpb25zIGNhbiBzd2l0Y2ggdGhlIEFQSUMgZXZlbiBhZnRlciB0aGUgaW5pdGlhbCAtPnByb2JlKCkgKi8KKworaW50IF9faW5pdAorZ2VuZXJpY19tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKKwkJaWYgKCFhcGljX3Byb2JlW2ldLT5tcHNfb2VtX2NoZWNrKQorCQkJY29udGludWU7CisJCWlmICghYXBpY19wcm9iZVtpXS0+bXBzX29lbV9jaGVjayhtcGMsIG9lbSwgcHJvZHVjdGlkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghY21kbGluZV9hcGljKSB7CisJCQlhcGljID0gYXBpY19wcm9iZVtpXTsKKwkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAorCQkJICAgICAgIGFwaWMtPm5hbWUpOworCQl9CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBkZWZhdWx0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKKwkJaWYgKCFhcGljX3Byb2JlW2ldLT5hY3BpX21hZHRfb2VtX2NoZWNrKQorCQkJY29udGludWU7CisJCWlmICghYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjayhvZW1faWQsIG9lbV90YWJsZV9pZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNtZGxpbmVfYXBpYykgeworCQkJYXBpYyA9IGFwaWNfcHJvYmVbaV07CisJCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBBUElDIGRyaXZlciBgJXMnLlxuIiwKKwkJCSAgICAgICBhcGljLT5uYW1lKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc3NDhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgorICoKKyAqIEdlbmVyaWMgQVBJQyBzdWItYXJjaCBwcm9iZSBsYXllci4KKyAqCisgKiBIYWNrZWQgZm9yIHg4Ni02NCBieSBKYW1lcyBDbGV2ZXJkb24gZnJvbSBpMzg2IGFyY2hpdGVjdHVyZSBjb2RlIGJ5CisgKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAorICogSmFtZXMgQ2xldmVyZG9uLgorICovCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lwaS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCitleHRlcm4gc3RydWN0IGFwaWMgYXBpY19mbGF0OworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfcGh5c2ZsYXQ7CitleHRlcm4gc3RydWN0IGFwaWMgYXBpY194MnhwaWNfdXZfeDsKK2V4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX3gyYXBpY19waHlzOworZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfeDJhcGljX2NsdXN0ZXI7CisKK3N0cnVjdCBhcGljIF9fcmVhZF9tb3N0bHkgKmFwaWMgPSAmYXBpY19mbGF0OworRVhQT1JUX1NZTUJPTF9HUEwoYXBpYyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXBpYyAqYXBpY19wcm9iZVtdIF9faW5pdGRhdGEgPSB7CisjaWZkZWYgQ09ORklHX1g4Nl9VVgorCSZhcGljX3gyYXBpY191dl94LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKKwkmYXBpY194MmFwaWNfcGh5cywKKwkmYXBpY194MmFwaWNfY2x1c3RlciwKKyNlbmRpZgorCSZhcGljX3BoeXNmbGF0LAorCU5VTEwsCit9OworCisvKgorICogQ2hlY2sgdGhlIEFQSUMgSURzIGluIGJpb3NfY3B1X2FwaWNpZCBhbmQgY2hvb3NlIHRoZSBBUElDIG1vZGUuCisgKi8KK3ZvaWQgX19pbml0IGRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKKwlpZiAoeDJhcGljICYmIChhcGljICE9ICZhcGljX3gyYXBpY19waHlzICYmCisjaWZkZWYgQ09ORklHX1g4Nl9VVgorCQkgICAgICAgYXBpYyAhPSAmYXBpY194MmFwaWNfdXZfeCAmJgorI2VuZGlmCisJCSAgICAgICBhcGljICE9ICZhcGljX3gyYXBpY19jbHVzdGVyKSkgeworCQlpZiAoeDJhcGljX3BoeXMpCisJCQlhcGljID0gJmFwaWNfeDJhcGljX3BoeXM7CisJCWVsc2UKKwkJCWFwaWMgPSAmYXBpY194MmFwaWNfY2x1c3RlcjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOworCX0KKyNlbmRpZgorCisJaWYgKGFwaWMgPT0gJmFwaWNfZmxhdCkgeworCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KQorCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OworCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgYXBpYy0+bmFtZSk7CisJfQorfQorCisvKiBTYW1lIGZvciBib3RoIGZsYXQgYW5kIHBoeXNpY2FsLiAqLworCit2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCV9fZGVmYXVsdF9zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfU0VMRiwgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOworfQorCitpbnQgX19pbml0IGRlZmF1bHRfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07ICsraSkgeworCQlpZiAoYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjayhvZW1faWQsIG9lbV90YWJsZV9pZCkpIHsKKwkJCWFwaWMgPSBhcGljX3Byb2JlW2ldOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXMuXG4iLAorCQkJCWFwaWMtPm5hbWUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYzUyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIElCTSBTdW1taXQtU3BlY2lmaWMgQ29kZQorICoKKyAqIFdyaXR0ZW4gQnk6IE1hdHRoZXcgRG9ic29uLCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSUJNIENvcnAuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxjb2xwYXRjaEB1cy5pYm0uY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgorCisvKgorICogQVBJQyBkcml2ZXIgZm9yIHRoZSBJQk0gIlN1bW1pdCIgY2hpcHNldC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9pcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBzdW1taXRfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQoreworCXJldHVybiAoeCA+PiAyNCkgJiAweEZGOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VtbWl0X3NlbmRfSVBJX21hc2soY29uc3QgY3B1bWFza190ICptYXNrLCBpbnQgdmVjdG9yKQoreworCWRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9sb2dpY2FsKG1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHN1bW1pdF9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJY3B1bWFza190IG1hc2sgPSBjcHVfb25saW5lX21hcDsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtYXNrKTsKKworCWlmICghY3B1c19lbXB0eShtYXNrKSkKKwkJc3VtbWl0X3NlbmRfSVBJX21hc2soJm1hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHN1bW1pdF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwlzdW1taXRfc2VuZF9JUElfbWFzaygmY3B1X29ubGluZV9tYXAsIHZlY3Rvcik7Cit9CisKKyNpbmNsdWRlIDxhc20vdHNjLmg+CisKK2V4dGVybiBpbnQgdXNlX2N5Y2xvbmU7CisKKyNpZmRlZiBDT05GSUdfWDg2X1NVTU1JVF9OVU1BCitzdGF0aWMgdm9pZCBzZXR1cF9zdW1taXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3N1bW1pdCh2b2lkKSB7fQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc3VtbWl0X21wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sCisJCWNoYXIgKnByb2R1Y3RpZCkKK3sKKwlpZiAoIXN0cm5jbXAob2VtLCAiSUJNIEVOU1ciLCA4KSAmJgorCQkJKCFzdHJuY21wKHByb2R1Y3RpZCwgIlZJR0lMIFNNUCIsIDkpCisJCQkgfHwgIXN0cm5jbXAocHJvZHVjdGlkLCAiRVhBIiwgMykKKwkJCSB8fCAhc3RybmNtcChwcm9kdWN0aWQsICJSVVRITEVTUyBTTVAiLCAxMikpKXsKKwkJbWFya190c2NfdW5zdGFibGUoIlN1bW1pdCBiYXNlZCBzeXN0ZW0iKTsKKwkJdXNlX2N5Y2xvbmUgPSAxOyAvKmVuYWJsZSBjeWNsb25lLXRpbWVyKi8KKwkJc2V0dXBfc3VtbWl0KCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogSG9vayBmcm9tIGdlbmVyaWMgQUNQSSB0YWJsZXMuYyAqLworc3RhdGljIGludCBzdW1taXRfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKK3sKKwlpZiAoIXN0cm5jbXAob2VtX2lkLCAiSUJNIiwgMykgJiYKKwkgICAgKCFzdHJuY21wKG9lbV90YWJsZV9pZCwgIlNFUlZJR0lMIiwgOCkKKwkgICAgIHx8ICFzdHJuY21wKG9lbV90YWJsZV9pZCwgIkVYQSIsIDMpKSl7CisJCW1hcmtfdHNjX3Vuc3RhYmxlKCJTdW1taXQgYmFzZWQgc3lzdGVtIik7CisJCXVzZV9jeWNsb25lID0gMTsgLyplbmFibGUgY3ljbG9uZS10aW1lciovCisJCXNldHVwX3N1bW1pdCgpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByaW9fdGFibGVfaGRyIHsKKwl1bnNpZ25lZCBjaGFyIHZlcnNpb247ICAgICAgLyogVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSAgICAgICAgICAgKi8KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVmVyc2lvbiAzIGFkZHMgY2hhc3Npc19udW0gJiBXUF9pbmRleCAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyIG51bV9zY2FsX2RldjsgLyogIyBvZiBTY2FsYWJpbGl0eSBkZXZpY2VzIChUd2lzdGVycyBmb3IgVmlnaWwpICAgKi8KKwl1bnNpZ25lZCBjaGFyIG51bV9yaW9fZGV2OyAgLyogIyBvZiBSSU8gSS9PIGRldmljZXMgKEN5Y2xvbmVzIGFuZCBXaW5uaXBlZ3MpICAgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzY2FsX2RldGFpbCB7CisJdW5zaWduZWQgY2hhciBub2RlX2lkOyAgICAgIC8qIFNjYWxhYmlsaXR5IE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBDQkFSOyAgICAgICAgIC8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBwb3J0MG5vZGU7ICAgIC8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkY9Tm9uZSAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBwb3J0MHBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgMHhGRj1Ob25lICovCisJdW5zaWduZWQgY2hhciBwb3J0MW5vZGU7ICAgIC8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkYgPSBOb25lICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBwb3J0MXBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgMHhGRj1Ob25lICovCisJdW5zaWduZWQgY2hhciBwb3J0Mm5vZGU7ICAgIC8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkYgPSBOb25lICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBwb3J0MnBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgMHhGRj1Ob25lICovCisJdW5zaWduZWQgY2hhciBjaGFzc2lzX251bTsgIC8qIDEgYmFzZWQgQ2hhc3NpcyBudW1iZXIgKDEgPSBib290IG5vZGUpICAgICAgICAgICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcmlvX2RldGFpbCB7CisJdW5zaWduZWQgY2hhciBub2RlX2lkOyAgICAgIC8qIFJJTyBOb2RlIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBCQkFSOyAgICAgICAgIC8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciB0eXBlOyAgICAgICAgIC8qIFR5cGUgb2YgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBvd25lcl9pZDsgICAgIC8qIEZvciBXUEVHOiBOb2RlIElEIG9mIEN5Y2xvbmUgdGhhdCBvd25zIHRoaXMgV1BFRyovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBDWUM6ICBOb2RlIElEIG9mIFR3aXN0ZXIgdGhhdCBvd25zIHRoaXMgQ1lDICovCisJdW5zaWduZWQgY2hhciBwb3J0MG5vZGU7ICAgIC8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkY9Tm9uZSAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBwb3J0MHBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgMHhGRj1Ob25lICovCisJdW5zaWduZWQgY2hhciBwb3J0MW5vZGU7ICAgIC8qIE5vZGUgSUQgcG9ydCBjb25uZWN0ZWQgdG86IDB4RkY9Tm9uZSAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBwb3J0MXBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgMHhGRj1Ob25lICovCisJdW5zaWduZWQgY2hhciBmaXJzdF9zbG90OyAgIC8qIEZvciBXUEVHOiBMb3dlc3Qgc2xvdCBudW1iZXIgYmVsb3cgdGhpcyBXUEVHICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBDWUM6ICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBzdGF0dXM7ICAgICAgIC8qIEZvciBXUEVHOiBCaXQgMCA9IDEgOiB0aGUgWEFQSUMgaXMgdXNlZCAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICA9IDAgOiB0aGUgWEFQSUMgaXMgbm90IHVzZWQsIGllOiovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgaW50cyBmd2RlZCB0byBhbm90aGVyIFhBUElDICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICBCaXRzMTo3IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBDWUM6ICBCaXRzMDo3IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBXUF9pbmRleDsgICAgIC8qIEZvciBXUEVHOiBXUEVHIGluc3RhbmNlIGluZGV4IC0gbG93ZXIgb25lcyBoYXZlICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICBsb3dlciBzbG90IG51bWJlcnMvUENJIGJ1cyBudW1iZXJzICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBDWUM6ICBObyBtZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgY2hhciBjaGFzc2lzX251bTsgIC8qIDEgYmFzZWQgQ2hhc3NpcyBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBMb29rT3V0IFdQRUdzIHRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4cGFuc2lvbiBDaGFzc2lzICMsIGVudW1lcmF0ZWQgZnJvbSBCb290ICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vZGUgV1BFRyBleHRlcm5hbCBwb3J0LCB0aGVuIEJvb3QgTm9kZSBDWUMgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4dGVybmFsIHBvcnQsIHRoZW4gTmV4dCBWaWdpbCBjaGFzc2lzIFdQRUcgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4dGVybmFsIHBvcnQsIGV0Yy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNoYXJlZCBMb29rb3V0cyBoYXZlIG9ubHkgMSBjaGFzc2lzIG51bWJlciAodGhlICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IG9uZSBhc3NpZ25lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3R5cGVkZWYgZW51bSB7CisJQ29tcGF0VHdpc3RlciA9IDAsICAvKiBDb21wYXRpYmlsaXR5IFR3aXN0ZXIgICAgICAgICAgICAgICAqLworCUFsdFR3aXN0ZXIgICAgPSAxLCAgLyogQWx0ZXJuYXRlIFR3aXN0ZXIgb2YgaW50ZXJuYWwgOC13YXkgKi8KKwlDb21wYXRDeWNsb25lID0gMiwgIC8qIENvbXBhdGliaWxpdHkgQ3ljbG9uZSAgICAgICAgICAgICAgICovCisJQWx0Q3ljbG9uZSAgICA9IDMsICAvKiBBbHRlcm5hdGUgQ3ljbG9uZSBvZiBpbnRlcm5hbCA4LXdheSAqLworCUNvbXBhdFdQRUcgICAgPSA0LCAgLyogQ29tcGF0aWJpbGl0eSBXUEVHICAgICAgICAgICAgICAgICAgKi8KKwlBbHRXUEVHICAgICAgID0gNSwgIC8qIFNlY29uZCBQbGFuYXIgV1BFRyAgICAgICAgICAgICAgICAgICovCisJTG9va091dEFXUEVHICA9IDYsICAvKiBMb29rT3V0IFdQRUcgICAgICAgICAgICAgICAgICAgICAgICAqLworCUxvb2tPdXRCV1BFRyAgPSA3LCAgLyogTG9va091dCBXUEVHICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gbm9kZV90eXBlOworCitzdGF0aWMgaW5saW5lIGludCBpc19XUEVHKHN0cnVjdCByaW9fZGV0YWlsICpyaW8peworCXJldHVybiAocmlvLT50eXBlID09IENvbXBhdFdQRUcgfHwgcmlvLT50eXBlID09IEFsdFdQRUcgfHwKKwkJcmlvLT50eXBlID09IExvb2tPdXRBV1BFRyB8fCByaW8tPnR5cGUgPT0gTG9va091dEJXUEVHKTsKK30KKworCisvKiBJbiBjbHVzdGVyZWQgbW9kZSwgdGhlIGhpZ2ggbmliYmxlIG9mIEFQSUMgSUQgaXMgYSBjbHVzdGVyIG51bWJlci4KKyAqIFRoZSBsb3cgbmliYmxlIGlzIGEgNC1iaXQgYml0bWFwLiAqLworI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfU0hJRlQJNAorI2RlZmluZSBYQVBJQ19ERVNUX0NQVVNfTUFTSwkoKDF1IDw8IFhBUElDX0RFU1RfQ1BVU19TSElGVCkgLSAxKQorI2RlZmluZSBYQVBJQ19ERVNUX0NMVVNURVJfTUFTSwkoWEFQSUNfREVTVF9DUFVTX01BU0sgPDwgWEFQSUNfREVTVF9DUFVTX1NISUZUKQorCisjZGVmaW5lIFNVTU1JVF9BUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKKworc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqc3VtbWl0X3RhcmdldF9jcHVzKHZvaWQpCit7CisJLyogQ1BVX01BU0tfQUxMICgweGZmKSBoYXMgdW5kZWZpbmVkIGJlaGF2aW91ciB3aXRoCisJICogZGVzdF9Mb3dlc3RQcmlvIG1vZGUgbG9naWNhbCBjbHVzdGVyZWQgYXBpYyBpbnRlcnJ1cHQgcm91dGluZworCSAqIEp1c3Qgc3RhcnQgb24gY3B1IDAuICBJUlEgYmFsYW5jaW5nIHdpbGwgc3ByZWFkIGxvYWQKKwkgKi8KKwlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW1taXRfY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIHdlIGRvbid0IHVzZSB0aGUgcGh5c19jcHVfcHJlc2VudF9tYXAgdG8gaW5kaWNhdGUgYXBpY2lkIHByZXNlbmNlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW1taXRfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc3VtbWl0X2luaXRfYXBpY19sZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgaWQ7CisJaW50IGNvdW50ID0gMDsKKwl1OCBteV9pZCA9ICh1OCloYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwl1OCBteV9jbHVzdGVyID0gQVBJQ19DTFVTVEVSKG15X2lkKTsKKyNpZmRlZiBDT05GSUdfU01QCisJdTggbGlkOworCWludCBpOworCisJLyogQ3JlYXRlIGxvZ2ljYWwgQVBJQyBJRHMgYnkgY291bnRpbmcgQ1BVcyBhbHJlYWR5IGluIGNsdXN0ZXIuICovCisJZm9yIChjb3VudCA9IDAsIGkgPSBucl9jcHVfaWRzOyAtLWkgPj0gMDsgKSB7CisJCWxpZCA9IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW2ldOworCQlpZiAobGlkICE9IEJBRF9BUElDSUQgJiYgQVBJQ19DTFVTVEVSKGxpZCkgPT0gbXlfY2x1c3RlcikKKwkJCSsrY291bnQ7CisJfQorI2VuZGlmCisJLyogV2Ugb25seSBoYXZlIGEgNCB3aWRlIGJpdG1hcCBpbiBjbHVzdGVyIG1vZGUuICBJZiBhIGRlcmFuZ2VkCisJICogQklPUyBwdXRzIDUgQ1BVcyBpbiBvbmUgQVBJQyBjbHVzdGVyLCB3ZSdyZSBob3NlZC4gKi8KKwlCVUdfT04oY291bnQgPj0gWEFQSUNfREVTVF9DUFVTX1NISUZUKTsKKwlpZCA9IG15X2NsdXN0ZXIgfCAoMVVMIDw8IGNvdW50KTsKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBTVU1NSVRfQVBJQ19ERlJfVkFMVUUpOworCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKKwl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7CisJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKK30KKworc3RhdGljIGludCBzdW1taXRfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHN1bW1pdF9zZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKK3sKKwlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogIFN1bW1pdC4gIFVzaW5nICVkIEkvTyBBUElDc1xuIiwKKwkJCQkJCW5yX2lvYXBpY3MpOworfQorCitzdGF0aWMgaW50IHN1bW1pdF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBhcGljaWRfMl9ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN1bW1pdF9jcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gY3B1XzJfbG9naWNhbF9hcGljaWRbY3B1XTsKKyNlbHNlCisJcmV0dXJuIGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgc3VtbWl0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlpZiAobXBzX2NwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHBoeXNpZF9tYXNrX3Qgc3VtbWl0X2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfaWRfbWFwKQoreworCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLworCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHgwRik7Cit9CisKK3N0YXRpYyBwaHlzaWRfbWFza190IHN1bW1pdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKDApOworfQorCitzdGF0aWMgaW50IHN1bW1pdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VtbWl0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCit7CisJdW5zaWduZWQgaW50IHJvdW5kID0gMDsKKwlpbnQgY3B1LCBhcGljaWQgPSAwOworCisJLyoKKwkgKiBUaGUgY3B1cyBpbiB0aGUgbWFzayBtdXN0IGFsbCBiZSBvbiB0aGUgYXBpYyBjbHVzdGVyLgorCSAqLworCWZvcl9lYWNoX2NwdShjcHUsIGNwdW1hc2spIHsKKwkJaW50IG5ld19hcGljaWQgPSBzdW1taXRfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CisKKwkJaWYgKHJvdW5kICYmIEFQSUNfQ0xVU1RFUihhcGljaWQpICE9IEFQSUNfQ0xVU1RFUihuZXdfYXBpY2lkKSkgeworCQkJcHJpbnRrKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiBCQURfQVBJQ0lEOworCQl9CisJCWFwaWNpZCB8PSBuZXdfYXBpY2lkOworCQlyb3VuZCsrOworCX0KKwlyZXR1cm4gYXBpY2lkOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bW1pdF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICppbm1hc2ssCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlpbnQgYXBpY2lkID0gc3VtbWl0X2NwdV90b19sb2dpY2FsX2FwaWNpZCgwKTsKKwljcHVtYXNrX3Zhcl90IGNwdW1hc2s7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVtYXNrLCBHRlBfQVRPTUlDKSkKKwkJcmV0dXJuIGFwaWNpZDsKKworCWNwdW1hc2tfYW5kKGNwdW1hc2ssIGlubWFzaywgYW5kbWFzayk7CisJY3B1bWFza19hbmQoY3B1bWFzaywgY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwlhcGljaWQgPSBzdW1taXRfY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2spOworCisJZnJlZV9jcHVtYXNrX3ZhcihjcHVtYXNrKTsKKworCXJldHVybiBhcGljaWQ7Cit9CisKKy8qCisgKiBjcHVpZCByZXR1cm5zIHRoZSB2YWx1ZSBsYXRjaGVkIGluIHRoZSBIVyBhdCByZXNldCwgbm90IHRoZSBBUElDIElECisgKiByZWdpc3RlcidzIHZhbHVlLiAgRm9yIGFueSBib3ggd2hvc2UgQklPUyBjaGFuZ2VzIEFQSUMgSURzLCBsaWtlCisgKiBjbHVzdGVyZWQgQVBJQyBzeXN0ZW1zLCB3ZSBtdXN0IHVzZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQuCisgKgorICogU2VlIEludGVsJ3MgSUEtMzIgU1cgRGV2J3MgTWFudWFsIFZvbDIgdW5kZXIgQ1BVSUQuCisgKi8KK3N0YXRpYyBpbnQgc3VtbWl0X3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSA+PiBpbmRleF9tc2I7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfc3VtbWl0KHZvaWQpCit7CisJLyogcHJvYmVkIGxhdGVyIGluIG1wdGFibGUvQUNQSSBob29rcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW1taXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2X1NVTU1JVF9OVU1BCitzdGF0aWMgc3RydWN0IHJpb190YWJsZV9oZHIgKnJpb190YWJsZV9oZHI7CitzdGF0aWMgc3RydWN0IHNjYWxfZGV0YWlsICAgKnNjYWxfZGV2c1tNQVhfTlVNTk9ERVNdOworc3RhdGljIHN0cnVjdCByaW9fZGV0YWlsICAgICpyaW9fZGV2c1tNQVhfTlVNTk9ERVMqNF07CisKKyNpZm5kZWYgQ09ORklHX1g4Nl9OVU1BUQorc3RhdGljIGludCBtcF9idXNfaWRfdG9fbm9kZVtNQVhfTVBfQlVTU0VTXTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNldHVwX3BjaV9ub2RlX21hcF9mb3Jfd3BlZyhpbnQgd3BlZ19udW0sIGludCBsYXN0X2J1cykKK3sKKwlpbnQgdHdpc3RlciA9IDAsIG5vZGUgPSAwOworCWludCBpLCBidXMsIG51bV9idXNlczsKKworCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrKSB7CisJCWlmIChyaW9fZGV2c1tpXS0+bm9kZV9pZCA9PSByaW9fZGV2c1t3cGVnX251bV0tPm93bmVyX2lkKSB7CisJCQl0d2lzdGVyID0gcmlvX2RldnNbaV0tPm93bmVyX2lkOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgZmluZCBvd25lciBDeWNsb25lIGZvciBXaW5uaXBlZyFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGxhc3RfYnVzOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXY7IGkrKykgeworCQlpZiAoc2NhbF9kZXZzW2ldLT5ub2RlX2lkID09IHR3aXN0ZXIpIHsKKwkJCW5vZGUgPSBzY2FsX2RldnNbaV0tPm5vZGVfaWQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgZmluZCBvd25lciBUd2lzdGVyIGZvciBDeWNsb25lIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gbGFzdF9idXM7CisJfQorCisJc3dpdGNoIChyaW9fZGV2c1t3cGVnX251bV0tPnR5cGUpIHsKKwljYXNlIENvbXBhdFdQRUc6CisJCS8qCisJCSAqIFRoZSBDb21wYXRpYmlsaXR5IFdpbm5pcGVnIGNvbnRyb2xzIHRoZSAyIGxlZ2FjeSBidXNlcywKKwkJICogdGhlIDY2TUh6IFBDSSBidXMgWzIgc2xvdHNdIGFuZCB0aGUgMiAiZXh0cmEiIGJ1c2VzIGluIGNhc2UKKwkJICogYSBQQ0ktUENJIGJyaWRnZSBjYXJkIGlzIHVzZWQgaW4gZWl0aGVyIHNsb3Q6IHRvdGFsIDUgYnVzZXMuCisJCSAqLworCQludW1fYnVzZXMgPSA1OworCQlicmVhazsKKwljYXNlIEFsdFdQRUc6CisJCS8qCisJCSAqIFRoZSBBbHRlcm5hdGUgV2lubmlwZWcgY29udHJvbHMgdGhlIDIgMTMzTUh6IGJ1c2VzIFsxIHNsb3QKKwkJICogZWFjaF0sIHRoZWlyIDIgImV4dHJhIiBidXNlcywgdGhlIDEwME1IeiBidXMgWzIgc2xvdHNdIGFuZAorCQkgKiB0aGUgImV4dHJhIiBidXNlcyBmb3IgZWFjaCBvZiB0aG9zZSBzbG90czogdG90YWwgNyBidXNlcy4KKwkJICovCisJCW51bV9idXNlcyA9IDc7CisJCWJyZWFrOworCWNhc2UgTG9va091dEFXUEVHOgorCWNhc2UgTG9va091dEJXUEVHOgorCQkvKgorCQkgKiBBIExvb2tvdXQgV2lubmlwZWcgY29udHJvbHMgMyAxMDBNSHogYnVzZXMgWzIgc2xvdHMgZWFjaF0KKwkJICogJiB0aGUgImV4dHJhIiBidXNlcyBmb3IgZWFjaCBvZiB0aG9zZSBzbG90czogdG90YWwgOSBidXNlcy4KKwkJICovCisJCW51bV9idXNlcyA9IDk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbnN1cHBvcnRlZCBXaW5uaXBlZyB0eXBlIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gbGFzdF9idXM7CisJfQorCisJZm9yIChidXMgPSBsYXN0X2J1czsgYnVzIDwgbGFzdF9idXMgKyBudW1fYnVzZXM7IGJ1cysrKQorCQltcF9idXNfaWRfdG9fbm9kZVtidXNdID0gbm9kZTsKKwlyZXR1cm4gYnVzOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2RldGFpbF9hcnJheXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHB0cjsKKwlpbnQgaSwgc2NhbF9kZXRhaWxfc2l6ZSwgcmlvX2RldGFpbF9zaXplOworCisJaWYgKHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldiA+IE1BWF9OVU1OT0RFUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTUFYX05VTU5PREVTIHRvbyBsb3chICBEZWZpbmVkIGFzICVkLCBidXQgc3lzdGVtIGhhcyAlZCBub2Rlcy5cbiIsIF9fZnVuY19fLCBNQVhfTlVNTk9ERVMsIHJpb190YWJsZV9oZHItPm51bV9zY2FsX2Rldik7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAocmlvX3RhYmxlX2hkci0+dmVyc2lvbikgeworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIFJpbyBHcmFuZGUgVGFibGUgVmVyc2lvbjogJWRcbiIsIF9fZnVuY19fLCByaW9fdGFibGVfaGRyLT52ZXJzaW9uKTsKKwkJcmV0dXJuIDA7CisJY2FzZSAyOgorCQlzY2FsX2RldGFpbF9zaXplID0gMTE7CisJCXJpb19kZXRhaWxfc2l6ZSA9IDEzOworCQlicmVhazsKKwljYXNlIDM6CisJCXNjYWxfZGV0YWlsX3NpemUgPSAxMjsKKwkJcmlvX2RldGFpbF9zaXplID0gMTU7CisJCWJyZWFrOworCX0KKworCXB0ciA9ICh1bnNpZ25lZCBsb25nKXJpb190YWJsZV9oZHIgKyAzOworCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXY7IGkrKywgcHRyICs9IHNjYWxfZGV0YWlsX3NpemUpCisJCXNjYWxfZGV2c1tpXSA9IChzdHJ1Y3Qgc2NhbF9kZXRhaWwgKilwdHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKywgcHRyICs9IHJpb19kZXRhaWxfc2l6ZSkKKwkJcmlvX2RldnNbaV0gPSAoc3RydWN0IHJpb19kZXRhaWwgKilwdHI7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBzZXR1cF9zdW1taXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nCQlwdHI7CisJdW5zaWduZWQgc2hvcnQJCW9mZnNldDsKKwlpbnQJCQlpLCBuZXh0X3dwZWcsIG5leHRfYnVzID0gMDsKKworCS8qIFRoZSBwb2ludGVyIHRvIHRoZSBFQkRBIGlzIHN0b3JlZCBpbiB0aGUgd29yZCBAIHBoeXMgMHg0MEUoNDA6MEUpICovCisJcHRyID0gZ2V0X2Jpb3NfZWJkYSgpOworCXB0ciA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChwdHIpOworCisJcmlvX3RhYmxlX2hkciA9IE5VTEw7CisJb2Zmc2V0ID0gMHgxODA7CisJd2hpbGUgKG9mZnNldCkgeworCQkvKiBUaGUgYmxvY2sgaWQgaXMgc3RvcmVkIGluIHRoZSAybmQgd29yZCAqLworCQlpZiAoKigodW5zaWduZWQgc2hvcnQgKikocHRyICsgb2Zmc2V0ICsgMikpID09IDB4NDc1MikgeworCQkJLyogc2V0IHRoZSBwb2ludGVyIHBhc3QgdGhlIG9mZnNldCAmIGJsb2NrIGlkICovCisJCQlyaW9fdGFibGVfaGRyID0gKHN0cnVjdCByaW9fdGFibGVfaGRyICopKHB0ciArIG9mZnNldCArIDQpOworCQkJYnJlYWs7CisJCX0KKwkJLyogVGhlIG5leHQgb2Zmc2V0IGlzIHN0b3JlZCBpbiB0aGUgMXN0IHdvcmQuICAwIG1lYW5zIG5vIG1vcmUgKi8KKwkJb2Zmc2V0ID0gKigodW5zaWduZWQgc2hvcnQgKikocHRyICsgb2Zmc2V0KSk7CisJfQorCWlmICghcmlvX3RhYmxlX2hkcikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbG9jYXRlIFJpbyBHcmFuZGUgVGFibGUgaW4gRUJEQSAtIGJhaWxpbmchXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWJ1aWxkX2RldGFpbF9hcnJheXMoKSkKKwkJcmV0dXJuOworCisJLyogVGhlIGZpcnN0IFdpbm5pcGVnIHdlJ3JlIGxvb2tpbmcgZm9yIGhhcyBhbiBpbmRleCBvZiAwICovCisJbmV4dF93cGVnID0gMDsKKwlkbyB7CisJCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrKSB7CisJCQlpZiAoaXNfV1BFRyhyaW9fZGV2c1tpXSkgJiYgcmlvX2RldnNbaV0tPldQX2luZGV4ID09IG5leHRfd3BlZykgeworCQkJCS8qIEl0J3MgdGhlIFdpbm5pcGVnIHdlJ3JlIGxvb2tpbmcgZm9yISAqLworCQkJCW5leHRfYnVzID0gc2V0dXBfcGNpX25vZGVfbWFwX2Zvcl93cGVnKGksIG5leHRfYnVzKTsKKwkJCQluZXh0X3dwZWcrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBJZiB3ZSBnbyB0aHJvdWdoIGFsbCBSaW8gZGV2aWNlcyBhbmQgZG9uJ3QgZmluZCBvbmUgd2l0aAorCQkgKiB0aGUgbmV4dCBpbmRleCwgaXQgbWVhbnMgd2UndmUgZm91bmQgYWxsIHRoZSBXaW5uaXBlZ3MsCisJCSAqIGFuZCB0aHVzIGFsbCB0aGUgUENJIGJ1c2VzLgorCQkgKi8KKwkJaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXYpCisJCQluZXh0X3dwZWcgPSAwOworCX0gd2hpbGUgKG5leHRfd3BlZyAhPSAwKTsKK30KKyNlbmRpZgorCitzdHJ1Y3QgYXBpYyBhcGljX3N1bW1pdCA9IHsKKworCS5uYW1lCQkJCT0gInN1bW1pdCIsCisJLnByb2JlCQkJCT0gcHJvYmVfc3VtbWl0LAorCS5hY3BpX21hZHRfb2VtX2NoZWNrCQk9IHN1bW1pdF9hY3BpX21hZHRfb2VtX2NoZWNrLAorCS5hcGljX2lkX3JlZ2lzdGVyZWQJCT0gc3VtbWl0X2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0xvd2VzdFByaW8sCisJLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIENQVXM6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDEsCisKKwkudGFyZ2V0X2NwdXMJCQk9IHN1bW1pdF90YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDEsCisJLmRlc3RfbG9naWNhbAkJCT0gQVBJQ19ERVNUX0xPR0lDQUwsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IHN1bW1pdF9jaGVja19hcGljaWRfdXNlZCwKKwkuY2hlY2tfYXBpY2lkX3ByZXNlbnQJCT0gc3VtbWl0X2NoZWNrX2FwaWNpZF9wcmVzZW50LAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IHN1bW1pdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IHN1bW1pdF9pbml0X2FwaWNfbGRyLAorCisJLmlvYXBpY19waHlzX2lkX21hcAkJPSBzdW1taXRfaW9hcGljX3BoeXNfaWRfbWFwLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gc3VtbWl0X3NldHVwX2FwaWNfcm91dGluZywKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gTlVMTCwKKwkuYXBpY2lkX3RvX25vZGUJCQk9IHN1bW1pdF9hcGljaWRfdG9fbm9kZSwKKwkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IHN1bW1pdF9jcHVfdG9fbG9naWNhbF9hcGljaWQsCisJLmNwdV9wcmVzZW50X3RvX2FwaWNpZAkJPSBzdW1taXRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gc3VtbWl0X2FwaWNpZF90b19jcHVfcHJlc2VudCwKKwkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IE5VTEwsCisJLmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQJPSBzdW1taXRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKKwkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLAorCS5waHlzX3BrZ19pZAkJCT0gc3VtbWl0X3BoeXNfcGtnX2lkLAorCS5tcHNfb2VtX2NoZWNrCQkJPSBzdW1taXRfbXBzX29lbV9jaGVjaywKKworCS5nZXRfYXBpY19pZAkJCT0gc3VtbWl0X2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gTlVMTCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGIDw8IDI0LAorCisJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBzdW1taXRfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IHN1bW1pdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IHN1bW1pdF9zZW5kX0lQSV9tYXNrLAorCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYJPSBOVUxMLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmCQk9IHN1bW1pdF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IHN1bW1pdF9zZW5kX0lQSV9hbGwsCisJLnNlbmRfSVBJX3NlbGYJCQk9IGRlZmF1bHRfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKworCS53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0CQk9IGRlZmF1bHRfd2FpdF9mb3JfaW5pdF9kZWFzc2VydCwKKworCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IGRlZmF1bHRfaW5xdWlyZV9yZW1vdGVfYXBpYywKKworCS5yZWFkCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCisJLndyaXRlCQkJCT0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAorCS5pY3JfcmVhZAkJCT0gbmF0aXZlX2FwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX2FwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBuYXRpdmVfYXBpY193YWl0X2ljcl9pZGxlLAorCS5zYWZlX3dhaXRfaWNyX2lkbGUJCT0gbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjg3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCkBAIC0wLDAgKzEsMjM5IEBACisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisKK0RFRklORV9QRVJfQ1BVKHUzMiwgeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCk7CisKK3N0YXRpYyBpbnQgeDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJcmV0dXJuIHgyYXBpY19lbmFibGVkKCk7Cit9CisKKy8qIFN0YXJ0IHdpdGggYWxsIElSUXMgcG9pbnRpbmcgdG8gYm9vdCBDUFUuICBJUlEgYmFsYW5jaW5nIHdpbGwgc2hpZnQgdGhlbS4gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp4MmFwaWNfdGFyZ2V0X2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKK30KKworLyoKKyAqIGZvciBub3cgZWFjaCBsb2dpY2FsIGNwdSBpcyBpbiBpdHMgb3duIHZlY3RvciBhbGxvY2F0aW9uIGRvbWFpbi4KKyAqLworc3RhdGljIHZvaWQgeDJhcGljX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldG1hc2spOworfQorCitzdGF0aWMgdm9pZAorIF9feDJhcGljX3NlbmRfSVBJX2Rlc3QodW5zaWduZWQgaW50IGFwaWNpZCwgaW50IHZlY3RvciwgdW5zaWduZWQgaW50IGRlc3QpCit7CisJdW5zaWduZWQgbG9uZyBjZmc7CisKKwljZmcgPSBfX3ByZXBhcmVfSUNSKDAsIHZlY3RvciwgZGVzdCk7CisKKwkvKgorCSAqIHNlbmQgdGhlIElQSS4KKwkgKi8KKwluYXRpdmVfeDJhcGljX2ljcl93cml0ZShjZmcsIGFwaWNpZCk7Cit9CisKKy8qCisgKiBmb3Igbm93LCB3ZSBzZW5kIHRoZSBJUEkncyBvbmUgYnkgb25lIGluIHRoZSBjcHVtYXNrLgorICogVEJEOiBCYXNlZCBvbiB0aGUgY3B1IG1hc2ssIHdlIGNhbiBzZW5kIHRoZSBJUEkncyB0byB0aGUgY2x1c3RlciBncm91cAorICogYXQgb25jZS4gV2UgaGF2ZSAxNiBjcHUncyBpbiBhIGNsdXN0ZXIuIFRoaXMgd2lsbCBtaW5pbWl6ZSBJUEkgcmVnaXN0ZXIKKyAqIHdyaXRlcy4KKyAqLworc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CisJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCisJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIHF1ZXJ5X2NwdSksCisJCQl2ZWN0b3IsIGFwaWMtPmRlc3RfbG9naWNhbCk7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKKyB4MmFwaWNfc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CisJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCisJCQljb250aW51ZTsKKwkJX194MmFwaWNfc2VuZF9JUElfZGVzdCgKKwkJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIHF1ZXJ5X2NwdSksCisJCQkJdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvcl9lYWNoX29ubGluZV9jcHUocXVlcnlfY3B1KSB7CisJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCisJCQljb250aW51ZTsKKwkJX194MmFwaWNfc2VuZF9JUElfZGVzdCgKKwkJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIHF1ZXJ5X2NwdSksCisJCQkJdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwl4MmFwaWNfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgeDJhcGljX2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgbG9naWNhbCBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrKTsKKworCWlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KTsKKwllbHNlCisJCXJldHVybiBCQURfQVBJQ0lEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Cit4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQoreworCWludCBjcHU7CisKKwkvKgorCSAqIFdlJ3JlIHVzaW5nIGZpeGVkIElSUSBkZWxpdmVyeSwgY2FuIG9ubHkgcmV0dXJuIG9uZSBsb2dpY2FsIEFQSUMgSUQuCisJICogTWF5IGFzIHdlbGwgYmUgdGhlIGZpcnN0LgorCSAqLworCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBjcHVtYXNrLCBhbmRtYXNrKSB7CisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChjcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBjcHUpOworCisJcmV0dXJuIEJBRF9BUElDSUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX2NsdXN0ZXJfcGh5c19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCit7CisJdW5zaWduZWQgaW50IGlkOworCisJaWQgPSB4OworCXJldHVybiBpZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGxvbmcgeDsKKworCXggPSBpZDsKKwlyZXR1cm4geDsKK30KKworc3RhdGljIGludCB4MmFwaWNfY2x1c3Rlcl9waHlzX3BrZ19pZChpbnQgaW5pdGlhbF9hcGljaWQsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGN1cnJlbnRfY3B1X2RhdGEuaW5pdGlhbF9hcGljaWQgPj4gaW5kZXhfbXNiOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF94MmFwaWNfbGRyKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KSA9IGFwaWNfcmVhZChBUElDX0xEUik7Cit9CisKK3N0cnVjdCBhcGljIGFwaWNfeDJhcGljX2NsdXN0ZXIgPSB7CisKKwkubmFtZQkJCQk9ICJjbHVzdGVyIHgyYXBpYyIsCisJLnByb2JlCQkJCT0gTlVMTCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjaywKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9Mb3dlc3RQcmlvLAorCS5pcnFfZGVzdF9tb2RlCQkJPSAxLCAvKiBsb2dpY2FsICovCisKKwkudGFyZ2V0X2NwdXMJCQk9IHgyYXBpY190YXJnZXRfY3B1cywKKwkuZGlzYWJsZV9lc3IJCQk9IDAsCisJLmRlc3RfbG9naWNhbAkJCT0gQVBJQ19ERVNUX0xPR0lDQUwsCisJLmNoZWNrX2FwaWNpZF91c2VkCQk9IE5VTEwsCisJLmNoZWNrX2FwaWNpZF9wcmVzZW50CQk9IE5VTEwsCisKKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0geDJhcGljX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKKwkuaW5pdF9hcGljX2xkcgkJCT0gaW5pdF94MmFwaWNfbGRyLAorCisJLmlvYXBpY19waHlzX2lkX21hcAkJPSBOVUxMLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gTlVMTCwKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gTlVMTCwKKwkuYXBpY2lkX3RvX25vZGUJCQk9IE5VTEwsCisJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBOVUxMLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBOVUxMLAorCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKKwkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKKwkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLAorCS5waHlzX3BrZ19pZAkJCT0geDJhcGljX2NsdXN0ZXJfcGh5c19wa2dfaWQsCisJLm1wc19vZW1fY2hlY2sJCQk9IE5VTEwsCisKKwkuZ2V0X2FwaWNfaWQJCQk9IHgyYXBpY19jbHVzdGVyX3BoeXNfZ2V0X2FwaWNfaWQsCisJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGRkZGRkZGdSwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0geDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSB4MmFwaWNfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0geDJhcGljX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSB4MmFwaWNfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSB4MmFwaWNfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBOVUxMLAorCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21zcl9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21zcl93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV94MmFwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX3gyYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCkBAIC0wLDAgKzEsMjI4IEBACisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisKK2ludCB4MmFwaWNfcGh5czsKKworc3RhdGljIGludCBzZXRfeDJhcGljX3BoeXNfbW9kZShjaGFyICphcmcpCit7CisJeDJhcGljX3BoeXMgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIngyYXBpY19waHlzIiwgc2V0X3gyYXBpY19waHlzX21vZGUpOworCitzdGF0aWMgaW50IHgyYXBpY19hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCWlmICh4MmFwaWNfcGh5cykKKwkJcmV0dXJuIHgyYXBpY19lbmFibGVkKCk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogU3RhcnQgd2l0aCBhbGwgSVJRcyBwb2ludGluZyB0byBib290IENQVS4gIElSUSBiYWxhbmNpbmcgd2lsbCBzaGlmdCB0aGVtLiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKngyYXBpY190YXJnZXRfY3B1cyh2b2lkKQoreworCXJldHVybiBjcHVtYXNrX29mKDApOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQoreworCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgcmV0bWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIF9feDJhcGljX3NlbmRfSVBJX2Rlc3QodW5zaWduZWQgaW50IGFwaWNpZCwgaW50IHZlY3RvciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZGVzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZzsKKworCWNmZyA9IF9fcHJlcGFyZV9JQ1IoMCwgdmVjdG9yLCBkZXN0KTsKKworCS8qCisJICogc2VuZCB0aGUgSVBJLgorCSAqLworCW5hdGl2ZV94MmFwaWNfaWNyX3dyaXRlKGNmZywgYXBpY2lkKTsKK30KKworc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CisJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKKwkJCQkgICAgICAgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCisgeDJhcGljX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgeworCQlpZiAocXVlcnlfY3B1ICE9IHRoaXNfY3B1KQorCQkJX194MmFwaWNfc2VuZF9JUElfZGVzdCgKKwkJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAorCQkJCXZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KHF1ZXJ5X2NwdSkgeworCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQorCQkJY29udGludWU7CisJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKKwkJCQkgICAgICAgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwl4MmFwaWNfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgeDJhcGljX2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrKTsKKworCWlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoreDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKK3sKKwlpbnQgY3B1OworCisJLyoKKwkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgorCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KKwkgKi8KKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykgeworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCisJCQlicmVhazsKKwl9CisKKwlpZiAoY3B1IDwgbnJfY3B1X2lkcykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisKKwlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfcGh5c19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBpbnQgeDJhcGljX3BoeXNfcGtnX2lkKGludCBpbml0aWFsX2FwaWNpZCwgaW50IGluZGV4X21zYikKK3sKKwlyZXR1cm4gY3VycmVudF9jcHVfZGF0YS5pbml0aWFsX2FwaWNpZCA+PiBpbmRleF9tc2I7Cit9CisKK3N0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCit7CisJYXBpY193cml0ZShBUElDX1NFTEZfSVBJLCB2ZWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3gyYXBpY19sZHIodm9pZCkKK3sKK30KKworc3RydWN0IGFwaWMgYXBpY194MmFwaWNfcGh5cyA9IHsKKworCS5uYW1lCQkJCT0gInBoeXNpY2FsIHgyYXBpYyIsCisJLnByb2JlCQkJCT0gTlVMTCwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjaywKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQsCisKKwkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9GaXhlZCwKKwkuaXJxX2Rlc3RfbW9kZQkJCT0gMCwgLyogcGh5c2ljYWwgKi8KKworCS50YXJnZXRfY3B1cwkJCT0geDJhcGljX3RhcmdldF9jcHVzLAorCS5kaXNhYmxlX2VzcgkJCT0gMCwKKwkuZGVzdF9sb2dpY2FsCQkJPSAwLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBOVUxMLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBOVUxMLAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IGluaXRfeDJhcGljX2xkciwKKworCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gTlVMTCwKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IE5VTEwsCisJLm11bHRpX3RpbWVyX2NoZWNrCQk9IE5VTEwsCisJLmFwaWNpZF90b19ub2RlCQkJPSBOVUxMLAorCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gTlVMTCwKKwkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gTlVMTCwKKwkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IE5VTEwsCisJLmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQJPSBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQsCisJLmVuYWJsZV9hcGljX21vZGUJCT0gTlVMTCwKKwkucGh5c19wa2dfaWQJCQk9IHgyYXBpY19waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0geDJhcGljX3BoeXNfZ2V0X2FwaWNfaWQsCisJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKKwkuYXBpY19pZF9tYXNrCQkJPSAweEZGRkZGRkZGdSwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0geDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKworCS5zZW5kX0lQSV9tYXNrCQkJPSB4MmFwaWNfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0geDJhcGljX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsCQkJPSB4MmFwaWNfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSB4MmFwaWNfc2VuZF9JUElfc2VsZiwKKworCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBOVUxMLAorCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21zcl9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21zcl93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV94MmFwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX3gyYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYwpyZW5hbWUgdG8gYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBiMTkzZTA4Li4xYmQ2ZGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC03LDI3ICs3LDI4IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9pcGkuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiBERUZJTkVfUEVSX0NQVShpbnQsIHgyYXBpY19leHRyYV9iaXRzKTsKIApAQCAtOTAsMzkgKzkxLDQzIEBACiAJY3B1bWFza19zZXRfY3B1KGNwdSwgcmV0bWFzayk7CiB9CiAKLWludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCkKK3N0YXRpYyBpbnQgdXZfd2FrZXVwX3NlY29uZGFyeShpbnQgcGh5c19hcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcmlwKQogeworI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgcG5vZGU7CiAKIAlwbm9kZSA9IHV2X2FwaWNpZF90b19wbm9kZShwaHlzX2FwaWNpZCk7CiAJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKIAkgICAgKHBoeXNfYXBpY2lkIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAotCSAgICAoKChsb25nKXN0YXJ0X3JpcCA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCkgPj4gMTIpIHwKKwkgICAgKChzdGFydF9yaXAgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpID4+IDEyKSB8CiAJICAgIEFQSUNfRE1fSU5JVDsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOwogCW1kZWxheSgxMCk7CiAKIAl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAogCSAgICAocGh5c19hcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8Ci0JICAgICgoKGxvbmcpc3RhcnRfcmlwIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKSA+PiAxMikgfAorCSAgICAoKHN0YXJ0X3JpcCA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCkgPj4gMTIpIHwKIAkgICAgQVBJQ19ETV9TVEFSVFVQOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CisKKwlhdG9taWNfc2V0KCZpbml0X2RlYXNzZXJ0ZWQsIDEpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX29uZShpbnQgY3B1LCBpbnQgdmVjdG9yKQogewotCXVuc2lnbmVkIGxvbmcgdmFsLCBhcGljaWQsIGxhcGljaWQ7CisJdW5zaWduZWQgbG9uZyB2YWwsIGFwaWNpZDsKIAlpbnQgcG5vZGU7CiAKIAlhcGljaWQgPSBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCWxhcGljaWQgPSBhcGljaWQgJiAweDNmOwkJLyogWlpaIG1hY3JvIG5lZWRlZCAqLwogCXBub2RlID0gdXZfYXBpY2lkX3RvX3Bub2RlKGFwaWNpZCk7Ci0JdmFsID0KLQkgICAgKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwgKGxhcGljaWQgPDwKLQkJCQkJICAgICAgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8Ci0JICAgICh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOworCisJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKKwkgICAgICAoYXBpY2lkIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCSAgICAgICh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOworCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKIH0KIApAQCAtMTM2LDIyICsxNDEsMjQgQEAKIAogc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQogewotCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKQorCWZvcl9lYWNoX2NwdShjcHUsIG1hc2spIHsKIAkJaWYgKGNwdSAhPSB0aGlzX2NwdSkKIAkJCXV2X3NlbmRfSVBJX29uZShjcHUsIHZlY3Rvcik7CisJfQogfQogCiBzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCiB7Ci0JdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IGNwdTsKIAotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgIT0gdGhpc19jcHUpCiAJCQl1dl9zZW5kX0lQSV9vbmUoY3B1LCB2ZWN0b3IpOworCX0KIH0KIAogc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCkBAIC0xNzAsMjEgKzE3NywyMSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHV2X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKLQlpbnQgY3B1OwotCiAJLyoKIAkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgogCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KIAkgKi8KLQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOworCiAJaWYgKCh1bnNpZ25lZCljcHUgPCBucl9jcHVfaWRzKQogCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKIAllbHNlCiAJCXJldHVybiBCQURfQVBJQ0lEOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHV2X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphbmRtYXNrKQorc3RhdGljIHVuc2lnbmVkIGludAordXZfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCiB7CiAJaW50IGNwdTsKIApAQCAtMTkyLDE1ICsxOTksMTcgQEAKIAkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgogCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KIAkgKi8KLQlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykKKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykgewogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCiAJCQlicmVhazsKKwl9CiAJaWYgKGNwdSA8IG5yX2NwdV9pZHMpCiAJCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCiAJcmV0dXJuIEJBRF9BUElDSUQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQorc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQogewogCXVuc2lnbmVkIGludCBpZDsKIApAQCAtMjIyLDEwICsyMzEsMTAgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdXZfcmVhZF9hcGljX2lkKHZvaWQpCiB7CiAKLQlyZXR1cm4gZ2V0X2FwaWNfaWQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKwlyZXR1cm4geDJhcGljX2dldF9hcGljX2lkKGFwaWNfcmVhZChBUElDX0lEKSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGh5c19wa2dfaWQoaW50IGluZGV4X21zYikKK3N0YXRpYyBpbnQgdXZfcGh5c19wa2dfaWQoaW50IGluaXRpYWxfYXBpY2lkLCBpbnQgaW5kZXhfbXNiKQogewogCXJldHVybiB1dl9yZWFkX2FwaWNfaWQoKSA+PiBpbmRleF9tc2I7CiB9CkBAIC0yMzUsMjYgKzI0NCw2NCBAQAogCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKIH0KIAotc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfdXZfeCA9IHsKLQkubmFtZSA9ICJVViBsYXJnZSBzeXN0ZW0iLAotCS5hY3BpX21hZHRfb2VtX2NoZWNrID0gdXZfYWNwaV9tYWR0X29lbV9jaGVjaywKLQkuaW50X2RlbGl2ZXJ5X21vZGUgPSBkZXN0X0ZpeGVkLAotCS5pbnRfZGVzdF9tb2RlID0gKEFQSUNfREVTVF9QSFlTSUNBTCAhPSAwKSwKLQkudGFyZ2V0X2NwdXMgPSB1dl90YXJnZXRfY3B1cywKLQkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluID0gdXZfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAotCS5hcGljX2lkX3JlZ2lzdGVyZWQgPSB1dl9hcGljX2lkX3JlZ2lzdGVyZWQsCi0JLmluaXRfYXBpY19sZHIgPSB1dl9pbml0X2FwaWNfbGRyLAotCS5zZW5kX0lQSV9hbGwgPSB1dl9zZW5kX0lQSV9hbGwsCi0JLnNlbmRfSVBJX2FsbGJ1dHNlbGYgPSB1dl9zZW5kX0lQSV9hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9tYXNrID0gdXZfc2VuZF9JUElfbWFzaywKLQkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmID0gdXZfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9zZWxmID0gdXZfc2VuZF9JUElfc2VsZiwKLQkuY3B1X21hc2tfdG9fYXBpY2lkID0gdXZfY3B1X21hc2tfdG9fYXBpY2lkLAotCS5jcHVfbWFza190b19hcGljaWRfYW5kID0gdXZfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKLQkucGh5c19wa2dfaWQgPSBwaHlzX3BrZ19pZCwKLQkuZ2V0X2FwaWNfaWQgPSBnZXRfYXBpY19pZCwKLQkuc2V0X2FwaWNfaWQgPSBzZXRfYXBpY19pZCwKLQkuYXBpY19pZF9tYXNrID0gKDB4RkZGRkZGRkZ1KSwKK3N0cnVjdCBhcGljIGFwaWNfeDJhcGljX3V2X3ggPSB7CisKKwkubmFtZQkJCQk9ICJVViBsYXJnZSBzeXN0ZW0iLAorCS5wcm9iZQkJCQk9IE5VTEwsCisJLmFjcGlfbWFkdF9vZW1fY2hlY2sJCT0gdXZfYWNwaV9tYWR0X29lbV9jaGVjaywKKwkuYXBpY19pZF9yZWdpc3RlcmVkCQk9IHV2X2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0ZpeGVkLAorCS5pcnFfZGVzdF9tb2RlCQkJPSAxLCAvKiBsb2dpY2FsICovCisKKwkudGFyZ2V0X2NwdXMJCQk9IHV2X3RhcmdldF9jcHVzLAorCS5kaXNhYmxlX2VzcgkJCT0gMCwKKwkuZGVzdF9sb2dpY2FsCQkJPSBBUElDX0RFU1RfTE9HSUNBTCwKKwkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gTlVMTCwKKwkuY2hlY2tfYXBpY2lkX3ByZXNlbnQJCT0gTlVMTCwKKworCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSB1dl92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCisJLmluaXRfYXBpY19sZHIJCQk9IHV2X2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IE5VTEwsCisJLnNldHVwX2FwaWNfcm91dGluZwkJPSBOVUxMLAorCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAorCS5hcGljaWRfdG9fbm9kZQkJCT0gTlVMTCwKKwkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IE5VTEwsCisJLmNwdV9wcmVzZW50X3RvX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZCwKKwkuYXBpY2lkX3RvX2NwdV9wcmVzZW50CQk9IE5VTEwsCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IE5VTEwsCisJLnBoeXNfcGtnX2lkCQkJPSB1dl9waHlzX3BrZ19pZCwKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0geDJhcGljX2dldF9hcGljX2lkLAorCS5zZXRfYXBpY19pZAkJCT0gc2V0X2FwaWNfaWQsCisJLmFwaWNfaWRfbWFzawkJCT0gMHhGRkZGRkZGRnUsCisKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IHV2X2NwdV9tYXNrX3RvX2FwaWNpZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZAkJPSB1dl9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IHV2X3NlbmRfSVBJX21hc2ssCisJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IHV2X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfYWxsYnV0c2VsZgkJPSB1dl9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IHV2X3NlbmRfSVBJX2FsbCwKKwkuc2VuZF9JUElfc2VsZgkJCT0gdXZfc2VuZF9JUElfc2VsZiwKKworCS53YWtldXBfc2Vjb25kYXJ5X2NwdQkJPSB1dl93YWtldXBfc2Vjb25kYXJ5LAorCS50cmFtcG9saW5lX3BoeXNfbG93CQk9IERFRkFVTFRfVFJBTVBPTElORV9QSFlTX0xPVywKKwkudHJhbXBvbGluZV9waHlzX2hpZ2gJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSCwKKwkud2FpdF9mb3JfaW5pdF9kZWFzc2VydAkJPSBOVUxMLAorCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5hdGl2ZV9hcGljX21zcl9yZWFkLAorCS53cml0ZQkJCQk9IG5hdGl2ZV9hcGljX21zcl93cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5hdGl2ZV94MmFwaWNfaWNyX3JlYWQsCisJLmljcl93cml0ZQkJCT0gbmF0aXZlX3gyYXBpY19pY3Jfd3JpdGUsCisJLndhaXRfaWNyX2lkbGUJCQk9IG5hdGl2ZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAogfTsKIAogc3RhdGljIF9fY3B1aW5pdCB2b2lkIHNldF94MmFwaWNfZXh0cmFfYml0cyhpbnQgcG5vZGUpCkBAIC0zMjIsNyArMzY5LDcgQEAKIAlwYWRkciA9IGJhc2UgPDwgc2hpZnQ7CiAJYnl0ZXMgPSAoMVVMIDw8IHNoaWZ0KSAqIChtYXhfcG5vZGUgKyAxKTsKIAlwcmludGsoS0VSTl9JTkZPICJVVjogTWFwICVzX0hJIDB4JWx4IC0gMHglbHhcbiIsIGlkLCBwYWRkciwKLQkgICAgICAgCQkJCQlwYWRkciArIGJ5dGVzKTsKKwkJCQkJCXBhZGRyICsgYnl0ZXMpOwogCWlmIChtYXBfdHlwZSA9PSBtYXBfdWMpCiAJCWluaXRfZXh0cmFfbWFwcGluZ191YyhwYWRkciwgYnl0ZXMpOwogCWVsc2UKQEAgLTQ4NSw3ICs1MzIsNyBAQAogCiAvKgogICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgotICogCVpaWiBob3RwbHVnIG5vdCBzdXBwb3J0ZWQgeWV0CisgKiBGSVhNRTogaG90cGx1ZyBub3Qgc3VwcG9ydGVkIHlldAogICovCiB2b2lkIF9fY3B1aW5pdCB1dl9jcHVfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IDI2NmVjNmMuLjEwMDMzZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogICovCiAjZGVmaW5lIEFQTV9aRVJPX1NFR1MKIAotI2luY2x1ZGUgImFwbS5oIgorI2luY2x1ZGUgPGFzbS9hcG0uaD4KIAogLyoKICAqIERlZmluZSB0byByZS1pbml0aWFsaXplIHRoZSBpbnRlcnJ1cHQgMCB0aW1lciB0byAxMDAgSHogYWZ0ZXIgYSBzdXNwZW5kLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfMzIuYwppbmRleCBlZTRkZjA4Li5mYmYyZjMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfMzIuYwpAQCAtNzUsNiArNzUsNyBAQAogCU9GRlNFVChQVF9EUywgIHB0X3JlZ3MsIGRzKTsKIAlPRkZTRVQoUFRfRVMsICBwdF9yZWdzLCBlcyk7CiAJT0ZGU0VUKFBUX0ZTLCAgcHRfcmVncywgZnMpOworCU9GRlNFVChQVF9HUywgIHB0X3JlZ3MsIGdzKTsKIAlPRkZTRVQoUFRfT1JJR19FQVgsIHB0X3JlZ3MsIG9yaWdfYXgpOwogCU9GRlNFVChQVF9FSVAsIHB0X3JlZ3MsIGlwKTsKIAlPRkZTRVQoUFRfQ1MsICBwdF9yZWdzLCBjcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCmluZGV4IDFkNDFkM2YuLjg3OTNhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CkBAIC00OCwxNiArNDcsNiBAQAogI2VuZGlmCiAJQkxBTksoKTsKICN1bmRlZiBFTlRSWQotI2RlZmluZSBFTlRSWShlbnRyeSkgREVGSU5FKHBkYV8gIyMgZW50cnksIG9mZnNldG9mKHN0cnVjdCB4ODY2NF9wZGEsIGVudHJ5KSkKLQlFTlRSWShrZXJuZWxzdGFjayk7IAotCUVOVFJZKG9sZHJzcCk7IAotCUVOVFJZKHBjdXJyZW50KTsgCi0JRU5UUlkoaXJxY291bnQpOwotCUVOVFJZKGNwdW51bWJlcik7Ci0JRU5UUlkoaXJxc3RhY2twdHIpOwotCUVOVFJZKGRhdGFfb2Zmc2V0KTsKLQlCTEFOSygpOwotI3VuZGVmIEVOVFJZCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAJQkxBTksoKTsKIAlPRkZTRVQoUEFSQVZJUlRfZW5hYmxlZCwgcHZfaW5mbywgcGFyYXZpcnRfZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggMmNmMjM2My4uNjg4MmE3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlIDxhc20vcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAogc3RydWN0IGNwdWlkX2JpdCB7CiAJdTE2IGZlYXR1cmU7CkBAIC02OSw3ICs2OSw3IEBACiAgKi8KIHZvaWQgX19jcHVpbml0IGRldGVjdF9leHRlbmRlZF90b3BvbG9neShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9TTVAKKyNpZmRlZiBDT05GSUdfU01QCiAJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgc3ViX2luZGV4OwogCXVuc2lnbmVkIGludCBodF9tYXNrX3dpZHRoLCBjb3JlX3BsdXNfbWFza193aWR0aDsKIAl1bnNpZ25lZCBpbnQgY29yZV9zZWxlY3RfbWFzaywgY29yZV9sZXZlbF9zaWJsaW5nczsKQEAgLTExNiwyMiArMTE2LDE0IEBACiAKIAljb3JlX3NlbGVjdF9tYXNrID0gKH4oLTEgPDwgY29yZV9wbHVzX21hc2tfd2lkdGgpKSA+PiBodF9tYXNrX3dpZHRoOwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWMtPmNwdV9jb3JlX2lkID0gcGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGh0X21hc2tfd2lkdGgpCisJYy0+Y3B1X2NvcmVfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaHRfbWFza193aWR0aCkKIAkJCQkJCSAmIGNvcmVfc2VsZWN0X21hc2s7Ci0JYy0+cGh5c19wcm9jX2lkID0gcGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGNvcmVfcGx1c19tYXNrX3dpZHRoKTsKKwljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgY29yZV9wbHVzX21hc2tfd2lkdGgpOwogCS8qCiAJICogUmVpbml0IHRoZSBhcGljaWQsIG5vdyB0aGF0IHdlIGhhdmUgZXh0ZW5kZWQgaW5pdGlhbF9hcGljaWQuCiAJICovCi0JYy0+YXBpY2lkID0gcGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIDApOwotI2Vsc2UKLQljLT5jcHVfY29yZV9pZCA9IHBoeXNfcGtnX2lkKGh0X21hc2tfd2lkdGgpICYgY29yZV9zZWxlY3RfbWFzazsKLQljLT5waHlzX3Byb2NfaWQgPSBwaHlzX3BrZ19pZChjb3JlX3BsdXNfbWFza193aWR0aCk7Ci0JLyoKLQkgKiBSZWluaXQgdGhlIGFwaWNpZCwgbm93IHRoYXQgd2UgaGF2ZSBleHRlbmRlZCBpbml0aWFsX2FwaWNpZC4KLQkgKi8KLQljLT5hcGljaWQgPSBwaHlzX3BrZ19pZCgwKTsKLSNlbmRpZgorCWMtPmFwaWNpZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKKwogCWMtPng4Nl9tYXhfY29yZXMgPSAoY29yZV9sZXZlbF9zaWJsaW5ncyAvIHNtcF9udW1fc2libGluZ3MpOwogCiAKQEAgLTE0MywzNyArMTM1LDMgQEAKIAlyZXR1cm47CiAjZW5kaWYKIH0KLQotI2lmZGVmIENPTkZJR19YODZfUEFUCi12b2lkIF9fY3B1aW5pdCB2YWxpZGF0ZV9wYXRfc3VwcG9ydChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0JaWYgKCFjcHVfaGFzX3BhdCkKLQkJcGF0X2Rpc2FibGUoIlBBVCBub3Qgc3VwcG9ydGVkIGJ5IENQVS4iKTsKLQotCXN3aXRjaCAoYy0+eDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJLyoKLQkJICogVGhlcmUgaXMgYSBrbm93biBlcnJhdHVtIG9uIFBlbnRpdW0gSUlJIGFuZCBDb3JlIFNvbG8KLQkJICogYW5kIENvcmUgRHVvIENQVXMuCi0JCSAqICIgUGFnZSB3aXRoIFBBVCBzZXQgdG8gV0Mgd2hpbGUgYXNzb2NpYXRlZCBNVFJSIGlzIFVDCi0JCSAqICAgbWF5IGNvbnNvbGlkYXRlIHRvIFVDICIKLQkJICogQmVjYXVzZSBvZiB0aGlzIGVycmF0dW0sIGl0IGlzIGJldHRlciB0byBzdGljayB3aXRoCi0JCSAqIHNldHRpbmcgV0MgaW4gTVRSUiByYXRoZXIgdGhhbiB1c2luZyBQQVQgb24gdGhlc2UgQ1BVcy4KLQkJICoKLQkJICogRW5hYmxlIFBBVCBXQyBvbmx5IG9uIFA0LCBDb3JlIDIgb3IgbGF0ZXIgQ1BVcy4KLQkJICovCi0JCWlmIChjLT54ODYgPiAweDYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAxNSkpCi0JCQlyZXR1cm47Ci0KLQkJcGF0X2Rpc2FibGUoIlBBVCBXQyBkaXNhYmxlZCBkdWUgdG8ga25vd24gQ1BVIGVycmF0dW0uIik7Ci0JCXJldHVybjsKLQotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JY2FzZSBYODZfVkVORE9SX0NFTlRBVVI6Ci0JY2FzZSBYODZfVkVORE9SX1RSQU5TTUVUQToKLQkJcmV0dXJuOwotCX0KLQotCXBhdF9kaXNhYmxlKCJQQVQgZGlzYWJsZWQuIE5vdCB5ZXQgdmVyaWZpZWQgb24gdGhpcyBDUFUgdHlwZS4iKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggN2M4NzhmNi4uMjU0MjNhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC0xMiw4ICsxMiw2IEBACiAjIGluY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotCiAjaW5jbHVkZSAiY3B1LmgiCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA4MzQ5MmIxLi44MjZkNWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTIxLDE0ICsyMSwxNCBAQAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9wZGEuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+CiAKICNpbmNsdWRlICJjcHUuaCIKIApAQCAtNTAsNiArNTEsMTUgQEAKIC8qIHJlcHJlc2VudGluZyBjcHVzIGZvciB3aGljaCBzaWJsaW5nIG1hcHMgY2FuIGJlIGNvbXB1dGVkICovCiBjcHVtYXNrX3Zhcl90IGNwdV9zaWJsaW5nX3NldHVwX21hc2s7CiAKKy8qIGNvcnJlY3RseSBzaXplIHRoZSBsb2NhbCBjcHUgbWFza3MgKi8KK3ZvaWQgX19pbml0IHNldHVwX2NwdV9sb2NhbF9tYXNrcyh2b2lkKQoreworCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9pbml0aWFsaXplZF9tYXNrKTsKKwlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfY2FsbGluX21hc2spOworCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9jYWxsb3V0X21hc2spOworCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9zaWJsaW5nX3NldHVwX21hc2spOworfQorCiAjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCiAKIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKQEAgLTYyLDIzICs3MiwyMyBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CiAKK0RFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0vKiBXZSBuZWVkIHZhbGlkIGtlcm5lbCBzZWdtZW50cyBmb3IgZGF0YSBhbmQgY29kZSBpbiBsb25nIG1vZGUgdG9vCi0gKiBJUkVUIHdpbGwgY2hlY2sgdGhlIHNlZ21lbnQgdHlwZXMgIGtrZWlsIDIwMDAvMTAvMjgKLSAqIEFsc28gc3lzcmV0IG1hbmRhdGVzIGEgc3BlY2lhbCBHRFQgbGF5b3V0Ci0gKi8KLS8qIFRoZSBUTFMgZGVzY3JpcHRvcnMgYXJlIGN1cnJlbnRseSBhdCBhIGRpZmZlcmVudCBwbGFjZSBjb21wYXJlZCB0byBpMzg2LgotICAgSG9wZWZ1bGx5IG5vYm9keSBleHBlY3RzIHRoZW0gYXQgYSBmaXhlZCBwbGFjZSAoV2luZT8pICovCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKKwkvKgorCSAqIFdlIG5lZWQgdmFsaWQga2VybmVsIHNlZ21lbnRzIGZvciBkYXRhIGFuZCBjb2RlIGluIGxvbmcgbW9kZSB0b28KKwkgKiBJUkVUIHdpbGwgY2hlY2sgdGhlIHNlZ21lbnQgdHlwZXMgIGtrZWlsIDIwMDAvMTAvMjgKKwkgKiBBbHNvIHN5c3JldCBtYW5kYXRlcyBhIHNwZWNpYWwgR0RUIGxheW91dAorCSAqCisJICogVGhlIFRMUyBkZXNjcmlwdG9ycyBhcmUgY3VycmVudGx5IGF0IGEgZGlmZmVyZW50IHBsYWNlIGNvbXBhcmVkIHRvIGkzODYuCisJICogSG9wZWZ1bGx5IG5vYm9keSBleHBlY3RzIHRoZW0gYXQgYSBmaXhlZCBwbGFjZSAoV2luZT8pCisJICovCiAJW0dEVF9FTlRSWV9LRVJORUwzMl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YjAwIH0gfSB9LAogCVtHRFRfRU5UUllfS0VSTkVMX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBhZjliMDAgfSB9IH0sCiAJW0dEVF9FTlRSWV9LRVJORUxfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTMwMCB9IH0gfSwKIAlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZiMDAgfSB9IH0sCiAJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjMwMCB9IH0gfSwKIAlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWZmYjAwIH0gfSB9LAotfSB9OwogI2Vsc2UKLURFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKIAlbR0RUX0VOVFJZX0tFUk5FTF9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YTAwIH0gfSB9LAogCVtHRFRfRU5UUllfS0VSTkVMX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCiAJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmEwMCB9IH0gfSwKQEAgLTExMCw5ICsxMjAsMTAgQEAKIAlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsyXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDkyMDAgfSB9IH0sCiAKIAlbR0RUX0VOVFJZX0VTUEZJWF9TU10gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwYzA5MjAwIH0gfSB9LAotCVtHRFRfRU5UUllfUEVSQ1BVXSA9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9IH0sCi19IH07CisJW0dEVF9FTlRSWV9QRVJDUFVdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKKwlHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQKICNlbmRpZgorfSB9OwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChnZHRfcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC0yMTMsNiArMjI0LDQ5IEBACiAjZW5kaWYKIAogLyoKKyAqIFNvbWUgQ1BVIGZlYXR1cmVzIGRlcGVuZCBvbiBoaWdoZXIgQ1BVSUQgbGV2ZWxzLCB3aGljaCBtYXkgbm90IGFsd2F5cworICogYmUgYXZhaWxhYmxlIGR1ZSB0byBDUFVJRCBsZXZlbCBjYXBwaW5nIG9yIGJyb2tlbiB2aXJ0dWFsaXphdGlvbgorICogc29mdHdhcmUuICBBZGQgdGhvc2UgZmVhdHVyZXMgdG8gdGhpcyB0YWJsZSB0byBhdXRvLWRpc2FibGUgdGhlbS4KKyAqLworc3RydWN0IGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlIHsKKwl1MzIgZmVhdHVyZTsKKwl1MzIgbGV2ZWw7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZSBfX2NwdWluaXRjb25zdAorY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmVzW10gPSB7CisJeyBYODZfRkVBVFVSRV9NV0FJVCwJCTB4MDAwMDAwMDUgfSwKKwl7IFg4Nl9GRUFUVVJFX0RDQSwJCTB4MDAwMDAwMDkgfSwKKwl7IFg4Nl9GRUFUVVJFX1hTQVZFLAkJMHgwMDAwMDAwZCB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgZmlsdGVyX2NwdWlkX2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgYm9vbCB3YXJuKQoreworCWNvbnN0IHN0cnVjdCBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZSAqZGY7CisJZm9yIChkZiA9IGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlczsgZGYtPmZlYXR1cmU7IGRmKyspIHsKKwkJLyoKKwkJICogTm90ZTogY3B1aWRfbGV2ZWwgaXMgc2V0IHRvIC0xIGlmIHVuYXZhaWxhYmxlLCBidXQKKwkJICogZXh0ZW5kZWRfZXh0ZW5kZWRfbGV2ZWwgaXMgc2V0IHRvIDAgaWYgdW5hdmFpbGFibGUKKwkJICogYW5kIHRoZSBsZWdpdGltYXRlIGV4dGVuZGVkIGxldmVscyBhcmUgYWxsIG5lZ2F0aXZlCisJCSAqIHdoZW4gc2lnbmVkOyBoZW5jZSB0aGUgd2VpcmQgbWVzc2luZyBhcm91bmQgd2l0aAorCQkgKiBzaWducyBoZXJlLi4uCisJCSAqLworCQlpZiAoY3B1X2hhcyhjLCBkZi0+ZmVhdHVyZSkgJiYKKwkJICAgICgoczMyKWRmLT5sZXZlbCA8IDAgPworCQkgICAgICh1MzIpZGYtPmxldmVsID4gKHUzMiljLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA6CisJCSAgICAgKHMzMilkZi0+bGV2ZWwgPiAoczMyKWMtPmNwdWlkX2xldmVsKSkgeworCQkJY2xlYXJfY3B1X2NhcChjLCBkZi0+ZmVhdHVyZSk7CisJCQlpZiAod2FybikKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJDUFU6IENQVSBmZWF0dXJlICVzIGRpc2FibGVkICIKKwkJCQkgICAgICAgImR1ZSB0byBsYWNrIG9mIENQVUlEIGxldmVsIDB4JXhcbiIsCisJCQkJICAgICAgIHg4Nl9jYXBfZmxhZ3NbZGYtPmZlYXR1cmVdLAorCQkJCSAgICAgICBkZi0+bGV2ZWwpOworCQl9CisJfQorfQorCisvKgogICogTmFtaW5nIGNvbnZlbnRpb24gc2hvdWxkIGJlOiA8TmFtZT4gWyg8Q29kZW5hbWU+KV0KICAqIFRoaXMgdGFibGUgb25seSBpcyB1c2VkIHVubGVzcyBpbml0Xzx2ZW5kb3I+KCkgYmVsb3cgZG9lc24ndCBzZXQgaXQ7CiAgKiBpbiBwYXJ0aWN1bGFyLCBpZiBDUFVJRCBsZXZlbHMgMHg4MDAwMDAwMi4uNCBhcmUgc3VwcG9ydGVkLCB0aGlzIGlzbid0IHVzZWQKQEAgLTI0MiwxOCArMjk2LDI5IEBACiAKIF9fdTMyIGNsZWFyZWRfY3B1X2NhcHNbTkNBUElOVFNdIF9fY3B1aW5pdGRhdGE7CiAKK3ZvaWQgbG9hZF9wZXJjcHVfc2VnbWVudChpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlsb2Fkc2VnbWVudChmcywgX19LRVJORUxfUEVSQ1BVKTsKKyNlbHNlCisJbG9hZHNlZ21lbnQoZ3MsIDApOworCXdybXNybChNU1JfR1NfQkFTRSwgKHVuc2lnbmVkIGxvbmcpcGVyX2NwdShpcnFfc3RhY2tfdW5pb24uZ3NfYmFzZSwgY3B1KSk7CisjZW5kaWYKKwlsb2FkX3N0YWNrX2NhbmFyeV9zZWdtZW50KCk7Cit9CisKIC8qIEN1cnJlbnQgZ2R0IHBvaW50cyAlZnMgYXQgdGhlICJtYXN0ZXIiIHBlci1jcHUgYXJlYTogYWZ0ZXIgdGhpcywKICAqIGl0J3Mgb24gdGhlIHJlYWwgb25lLiAqLwotdm9pZCBzd2l0Y2hfdG9fbmV3X2dkdCh2b2lkKQordm9pZCBzd2l0Y2hfdG9fbmV3X2dkdChpbnQgY3B1KQogewogCXN0cnVjdCBkZXNjX3B0ciBnZHRfZGVzY3I7CiAKLQlnZHRfZGVzY3IuYWRkcmVzcyA9IChsb25nKWdldF9jcHVfZ2R0X3RhYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJZ2R0X2Rlc2NyLmFkZHJlc3MgPSAobG9uZylnZXRfY3B1X2dkdF90YWJsZShjcHUpOwogCWdkdF9kZXNjci5zaXplID0gR0RUX1NJWkUgLSAxOwogCWxvYWRfZ2R0KCZnZHRfZGVzY3IpOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQlhc20oIm1vdiAlMCwgJSVmcyIgOiA6ICJyIiAoX19LRVJORUxfUEVSQ1BVKSA6ICJtZW1vcnkiKTsKLSNlbmRpZgorCS8qIFJlbG9hZCB0aGUgcGVyLWNwdSBiYXNlICovCisKKwlsb2FkX3BlcmNwdV9zZWdtZW50KGNwdSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqY3B1X2RldnNbWDg2X1ZFTkRPUl9OVU1dID0ge307CkBAIC0zODMsMTEgKzQ0OCw3IEBACiAJCX0KIAogCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIoc21wX251bV9zaWJsaW5ncyk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQljLT5waHlzX3Byb2NfaWQgPSBwaHlzX3BrZ19pZChpbmRleF9tc2IpOwotI2Vsc2UKLQkJYy0+cGh5c19wcm9jX2lkID0gcGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYik7Ci0jZW5kaWYKKwkJYy0+cGh5c19wcm9jX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYik7CiAKIAkJc21wX251bV9zaWJsaW5ncyA9IHNtcF9udW1fc2libGluZ3MgLyBjLT54ODZfbWF4X2NvcmVzOwogCkBAIC0zOTUsMTMgKzQ1Niw4IEBACiAKIAkJY29yZV9iaXRzID0gZ2V0X2NvdW50X29yZGVyKGMtPng4Nl9tYXhfY29yZXMpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQljLT5jcHVfY29yZV9pZCA9IHBoeXNfcGtnX2lkKGluZGV4X21zYikgJgorCQljLT5jcHVfY29yZV9pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpICYKIAkJCQkJICAgICAgICgoMSA8PCBjb3JlX2JpdHMpIC0gMSk7Ci0jZWxzZQotCQljLT5jcHVfY29yZV9pZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpICYKLQkJCQkJICAgICAgICgoMSA8PCBjb3JlX2JpdHMpIC0gMSk7Ci0jZW5kaWYKIAl9CiAKIG91dDoKQEAgLTU3MCwxMSArNjI2LDEwIEBACiAJaWYgKHRoaXNfY3B1LT5jX2Vhcmx5X2luaXQpCiAJCXRoaXNfY3B1LT5jX2Vhcmx5X2luaXQoYyk7CiAKLQl2YWxpZGF0ZV9wYXRfc3VwcG9ydChjKTsKLQogI2lmZGVmIENPTkZJR19TTVAKIAljLT5jcHVfaW5kZXggPSBib290X2NwdV9pZDsKICNlbmRpZgorCWZpbHRlcl9jcHVpZF9mZWF0dXJlcyhjLCBmYWxzZSk7CiB9CiAKIHZvaWQgX19pbml0IGVhcmx5X2NwdV9pbml0KHZvaWQpCkBAIC02MzcsNyArNjkyLDcgQEAKIAkJYy0+aW5pdGlhbF9hcGljaWQgPSAoY3B1aWRfZWJ4KDEpID4+IDI0KSAmIDB4RkY7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogIyBpZmRlZiBDT05GSUdfWDg2X0hUCi0JCWMtPmFwaWNpZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKKwkJYy0+YXBpY2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIDApOwogIyBlbHNlCiAJCWMtPmFwaWNpZCA9IGMtPmluaXRpYWxfYXBpY2lkOwogIyBlbmRpZgpAQCAtNjg0LDcgKzczOSw3IEBACiAJCXRoaXNfY3B1LT5jX2lkZW50aWZ5KGMpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWMtPmFwaWNpZCA9IHBoeXNfcGtnX2lkKDApOworCWMtPmFwaWNpZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCAwKTsKICNlbmRpZgogCiAJLyoKQEAgLTcwOCw2ICs3NjMsOSBAQAogCSAqIHdlIGRvICJnZW5lcmljIGNoYW5nZXMuIgogCSAqLwogCisJLyogRmlsdGVyIG91dCBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gQ1BVSUQgbGV2ZWxzIHdlIGRvbid0IGhhdmUgKi8KKwlmaWx0ZXJfY3B1aWRfZmVhdHVyZXMoYywgdHJ1ZSk7CisKIAkvKiBJZiB0aGUgbW9kZWwgbmFtZSBpcyBzdGlsbCB1bnNldCwgZG8gdGFibGUgbG9va3VwLiAqLwogCWlmICghYy0+eDg2X21vZGVsX2lkWzBdKSB7CiAJCWNoYXIgKnA7CkBAIC04NzcsNTQgKzkzNSwyMiBAQAogX19zZXR1cCgiY2xlYXJjcHVpZD0iLCBzZXR1cF9kaXNhYmxlY3B1aWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotc3RydWN0IHg4NjY0X3BkYSAqKl9jcHVfcGRhIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKF9jcHVfcGRhKTsKLQogc3RydWN0IGRlc2NfcHRyIGlkdF9kZXNjciA9IHsgMjU2ICogMTYgLSAxLCAodW5zaWduZWQgbG9uZykgaWR0X3RhYmxlIH07CiAKLXN0YXRpYyBjaGFyIGJvb3RfY3B1X3N0YWNrW0lSUVNUQUNLU0laRV0gX19wYWdlX2FsaWduZWRfYnNzOworREVGSU5FX1BFUl9DUFVfRklSU1QodW5pb24gaXJxX3N0YWNrX3VuaW9uLAorCQkgICAgIGlycV9zdGFja191bmlvbikgX19hbGlnbmVkKFBBR0VfU0laRSk7CitERUZJTkVfUEVSX0NQVShjaGFyICosIGlycV9zdGFja19wdHIpID0KKwlpbml0X3Blcl9jcHVfdmFyKGlycV9zdGFja191bmlvbi5pcnFfc3RhY2spICsgSVJRX1NUQUNLX1NJWkUgLSA2NDsKIAotdm9pZCBfX2NwdWluaXQgcGRhX2luaXQoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgeDg2NjRfcGRhICpwZGEgPSBjcHVfcGRhKGNwdSk7CitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrZXJuZWxfc3RhY2spID0KKwkodW5zaWduZWQgbG9uZykmaW5pdF90aHJlYWRfdW5pb24gLSBLRVJORUxfU1RBQ0tfT0ZGU0VUICsgVEhSRUFEX1NJWkU7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woa2VybmVsX3N0YWNrKTsKIAotCS8qIFNldHVwIHVwIGRhdGEgdGhhdCBtYXkgYmUgbmVlZGVkIGluIF9fZ2V0X2ZyZWVfcGFnZXMgZWFybHkgKi8KLQlsb2Fkc2VnbWVudChmcywgMCk7Ci0JbG9hZHNlZ21lbnQoZ3MsIDApOwotCS8qIE1lbW9yeSBjbG9iYmVycyB1c2VkIHRvIG9yZGVyIFBEQSBhY2Nlc3NlZCAqLwotCW1iKCk7Ci0Jd3Jtc3JsKE1TUl9HU19CQVNFLCBwZGEpOwotCW1iKCk7CitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCkgPSAtMTsKIAotCXBkYS0+Y3B1bnVtYmVyID0gY3B1OwotCXBkYS0+aXJxY291bnQgPSAtMTsKLQlwZGEtPmtlcm5lbHN0YWNrID0gKHVuc2lnbmVkIGxvbmcpc3RhY2tfdGhyZWFkX2luZm8oKSAtCi0JCQkJIFBEQV9TVEFDS09GRlNFVCArIFRIUkVBRF9TSVpFOwotCXBkYS0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0JcGRhLT5tbXVfc3RhdGUgPSAwOwotCi0JaWYgKGNwdSA9PSAwKSB7Ci0JCS8qIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaW4gc21wYm9vdC5jICovCi0JCXBkYS0+cGN1cnJlbnQgPSAmaW5pdF90YXNrOwotCQlwZGEtPmlycXN0YWNrcHRyID0gYm9vdF9jcHVfc3RhY2s7Ci0JCXBkYS0+aXJxc3RhY2twdHIgKz0gSVJRU1RBQ0tTSVpFIC0gNjQ7Ci0JfSBlbHNlIHsKLQkJaWYgKCFwZGEtPmlycXN0YWNrcHRyKSB7Ci0JCQlwZGEtPmlycXN0YWNrcHRyID0gKGNoYXIgKikKLQkJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIElSUVNUQUNLX09SREVSKTsKLQkJCWlmICghcGRhLT5pcnFzdGFja3B0cikKLQkJCQlwYW5pYygiY2Fubm90IGFsbG9jYXRlIGlycXN0YWNrIGZvciBjcHUgJWQiLAotCQkJCSAgICAgIGNwdSk7Ci0JCQlwZGEtPmlycXN0YWNrcHRyICs9IElSUVNUQUNLU0laRSAtIDY0OwotCQl9Ci0KLQkJaWYgKHBkYS0+bm9kZW51bWJlciA9PSAwICYmIGNwdV90b19ub2RlKGNwdSkgIT0gTlVNQV9OT19OT0RFKQotCQkJcGRhLT5ub2RlbnVtYmVyID0gY3B1X3RvX25vZGUoY3B1KTsKLQl9Ci19Ci0KLXN0YXRpYyBjaGFyIGJvb3RfZXhjZXB0aW9uX3N0YWNrc1soTl9FWENFUFRJT05fU1RBQ0tTIC0gMSkgKiBFWENFUFRJT05fU1RLU1ogKwotCQkJCSAgREVCVUdfU1RLU1pdIF9fcGFnZV9hbGlnbmVkX2JzczsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQoY2hhciwgZXhjZXB0aW9uX3N0YWNrcworCVsoTl9FWENFUFRJT05fU1RBQ0tTIC0gMSkgKiBFWENFUFRJT05fU1RLU1ogKyBERUJVR19TVEtTWl0pCisJX19hbGlnbmVkKFBBR0VfU0laRSk7CiAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaWdub3JlX3N5c3JldCh2b2lkKTsKIApAQCAtOTU3LDE2ICs5ODMsMjEgQEAKICAqLwogREVGSU5FX1BFUl9DUFUoc3RydWN0IG9yaWdfaXN0LCBvcmlnX2lzdCk7CiAKLSNlbHNlCisjZWxzZQkvKiB4ODZfNjQgKi8KIAotLyogTWFrZSBzdXJlICVmcyBpcyBpbml0aWFsaXplZCBwcm9wZXJseSBpbiBpZGxlIHRocmVhZHMgKi8KKyNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHN0YWNrX2NhbmFyeSk7CisjZW5kaWYKKworLyogTWFrZSBzdXJlICVmcyBhbmQgJWdzIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBpbiBpZGxlIHRocmVhZHMgKi8KIHN0cnVjdCBwdF9yZWdzICogX19jcHVpbml0IGlkbGVfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAltZW1zZXQocmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CiAJcmVncy0+ZnMgPSBfX0tFUk5FTF9QRVJDUFU7CisJcmVncy0+Z3MgPSBfX0tFUk5FTF9TVEFDS19DQU5BUlk7CiAJcmV0dXJuIHJlZ3M7CiB9Ci0jZW5kaWYKKyNlbmRpZgkvKiB4ODZfNjQgKi8KIAogLyoKICAqIGNwdV9pbml0KCkgaW5pdGlhbGl6ZXMgc3RhdGUgdGhhdCBpcyBwZXItQ1BVLiBTb21lIGRhdGEgaXMgYWxyZWFkeQpAQCAtOTgyLDE1ICsxMDEzLDE0IEBACiAJc3RydWN0IHRzc19zdHJ1Y3QgKnQgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKIAlzdHJ1Y3Qgb3JpZ19pc3QgKm9yaWdfaXN0ID0gJnBlcl9jcHUob3JpZ19pc3QsIGNwdSk7CiAJdW5zaWduZWQgbG9uZyB2OwotCWNoYXIgKmVzdGFja3MgPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWU7CiAJaW50IGk7CiAKLQkvKiBDUFUgMCBpcyBpbml0aWFsaXNlZCBpbiBoZWFkNjQuYyAqLwotCWlmIChjcHUgIT0gMCkKLQkJcGRhX2luaXQoY3B1KTsKLQllbHNlCi0JCWVzdGFja3MgPSBib290X2V4Y2VwdGlvbl9zdGFja3M7CisjaWZkZWYgQ09ORklHX05VTUEKKwlpZiAoY3B1ICE9IDAgJiYgcGVyY3B1X3JlYWQobm9kZV9udW1iZXIpID09IDAgJiYKKwkgICAgY3B1X3RvX25vZGUoY3B1KSAhPSBOVU1BX05PX05PREUpCisJCXBlcmNwdV93cml0ZShub2RlX251bWJlciwgY3B1X3RvX25vZGUoY3B1KSk7CisjZW5kaWYKIAogCW1lID0gY3VycmVudDsKIApAQCAtMTAwNiw3ICsxMDM2LDkgQEAKIAkgKiBhbmQgc2V0IHVwIHRoZSBHRFQgZGVzY3JpcHRvcjoKIAkgKi8KIAotCXN3aXRjaF90b19uZXdfZ2R0KCk7CisJc3dpdGNoX3RvX25ld19nZHQoY3B1KTsKKwlsb2Fkc2VnbWVudChmcywgMCk7CisKIAlsb2FkX2lkdCgoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopJmlkdF9kZXNjcik7CiAKIAltZW1zZXQobWUtPnRocmVhZC50bHNfYXJyYXksIDAsIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIDgpOwpAQCAtMTAxNywyNSArMTA0OSwyMCBAQAogCWJhcnJpZXIoKTsKIAogCWNoZWNrX2VmZXIoKTsKLQlpZiAoY3B1ICE9IDAgJiYgeDJhcGljKQorCWlmIChjcHUgIT0gMCkKIAkJZW5hYmxlX3gyYXBpYygpOwogCiAJLyoKIAkgKiBzZXQgdXAgYW5kIGxvYWQgdGhlIHBlci1DUFUgVFNTCiAJICovCiAJaWYgKCFvcmlnX2lzdC0+aXN0WzBdKSB7Ci0JCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXJbTl9FWENFUFRJT05fU1RBQ0tTXSA9IHsKLQkJICBbMCAuLi4gTl9FWENFUFRJT05fU1RBQ0tTIC0gMV0gPSBFWENFUFRJT05fU1RBQ0tfT1JERVIsCi0JCSAgW0RFQlVHX1NUQUNLIC0gMV0gPSBERUJVR19TVEFDS19PUkRFUgorCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNpemVzW05fRVhDRVBUSU9OX1NUQUNLU10gPSB7CisJCSAgWzAgLi4uIE5fRVhDRVBUSU9OX1NUQUNLUyAtIDFdID0gRVhDRVBUSU9OX1NUS1NaLAorCQkgIFtERUJVR19TVEFDSyAtIDFdID0gREVCVUdfU1RLU1oKIAkJfTsKKwkJY2hhciAqZXN0YWNrcyA9IHBlcl9jcHUoZXhjZXB0aW9uX3N0YWNrcywgY3B1KTsKIAkJZm9yICh2ID0gMDsgdiA8IE5fRVhDRVBUSU9OX1NUQUNLUzsgdisrKSB7Ci0JCQlpZiAoY3B1KSB7Ci0JCQkJZXN0YWNrcyA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBvcmRlclt2XSk7Ci0JCQkJaWYgKCFlc3RhY2tzKQotCQkJCQlwYW5pYygiQ2Fubm90IGFsbG9jYXRlIGV4Y2VwdGlvbiAiCi0JCQkJCSAgICAgICJzdGFjayAlbGQgJWRcbiIsIHYsIGNwdSk7Ci0JCQl9Ci0JCQllc3RhY2tzICs9IFBBR0VfU0laRSA8PCBvcmRlclt2XTsKKwkJCWVzdGFja3MgKz0gc2l6ZXNbdl07CiAJCQlvcmlnX2lzdC0+aXN0W3ZdID0gdC0+eDg2X3Rzcy5pc3Rbdl0gPQogCQkJCQkodW5zaWduZWQgbG9uZyllc3RhY2tzOwogCQl9CkBAIC0xMDY5LDIyICsxMDk2LDE5IEBACiAJICovCiAJaWYgKGtnZGJfY29ubmVjdGVkICYmIGFyY2hfa2dkYl9vcHMuY29ycmVjdF9od19icmVhaykKIAkJYXJjaF9rZ2RiX29wcy5jb3JyZWN0X2h3X2JyZWFrKCk7Ci0JZWxzZSB7CisJZWxzZQogI2VuZGlmCi0JLyoKLQkgKiBDbGVhciBhbGwgNiBkZWJ1ZyByZWdpc3RlcnM6Ci0JICovCi0KLQlzZXRfZGVidWdyZWcoMFVMLCAwKTsKLQlzZXRfZGVidWdyZWcoMFVMLCAxKTsKLQlzZXRfZGVidWdyZWcoMFVMLCAyKTsKLQlzZXRfZGVidWdyZWcoMFVMLCAzKTsKLQlzZXRfZGVidWdyZWcoMFVMLCA2KTsKLQlzZXRfZGVidWdyZWcoMFVMLCA3KTsKLSNpZmRlZiBDT05GSUdfS0dEQgotCS8qIElmIHRoZSBrZ2RiIGlzIGNvbm5lY3RlZCBubyBkZWJ1ZyByZWdzIHNob3VsZCBiZSBhbHRlcmVkLiAqLworCXsKKwkJLyoKKwkJICogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOgorCQkgKi8KKwkJc2V0X2RlYnVncmVnKDBVTCwgMCk7CisJCXNldF9kZWJ1Z3JlZygwVUwsIDEpOworCQlzZXRfZGVidWdyZWcoMFVMLCAyKTsKKwkJc2V0X2RlYnVncmVnKDBVTCwgMyk7CisJCXNldF9kZWJ1Z3JlZygwVUwsIDYpOworCQlzZXRfZGVidWdyZWcoMFVMLCA3KTsKIAl9Ci0jZW5kaWYKIAogCWZwdV9pbml0KCk7CiAKQEAgLTExMTQsNyArMTEzOCw3IEBACiAJCWNsZWFyX2luX2NyNChYODZfQ1I0X1ZNRXxYODZfQ1I0X1BWSXxYODZfQ1I0X1RTRHxYODZfQ1I0X0RFKTsKIAogCWxvYWRfaWR0KCZpZHRfZGVzY3IpOwotCXN3aXRjaF90b19uZXdfZ2R0KCk7CisJc3dpdGNoX3RvX25ld19nZHQoY3B1KTsKIAogCS8qCiAJICogU2V0IHVwIGFuZCBsb2FkIHRoZSBwZXItQ1BVIFRTUyBhbmQgTERUCkBAIC0xMTM1LDkgKzExNTksNiBAQAogCV9fc2V0X3Rzc19kZXNjKGNwdSwgR0RUX0VOVFJZX0RPVUJMRUZBVUxUX1RTUywgJmRvdWJsZWZhdWx0X3Rzcyk7CiAjZW5kaWYKIAotCS8qIENsZWFyICVncy4gKi8KLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZ3MiIDogOiAiciIgKDApKTsKLQogCS8qIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczogKi8KIAlzZXRfZGVidWdyZWcoMCwgMCk7CiAJc2V0X2RlYnVncmVnKDAsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCA2NTc5MmMyLi41MmM4Mzk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpAQCAtODcsMzAgKzg3LDE1IEBACiBjb25maWcgWDg2X1BPV0VSTk9XX0s4CiAJdHJpc3RhdGUgIkFNRCBPcHRlcm9uL0F0aGxvbjY0IFBvd2VyTm93ISIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKKwlkZXBlbmRzIG9uIEFDUEkgJiYgQUNQSV9QUk9DRVNTT1IKIAloZWxwCi0JICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBtb2JpbGUgQU1EIE9wdGVyb24vQXRobG9uNjQgcHJvY2Vzc29ycy4KKwkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIEs4L0sxMCBPcHRlcm9uL0F0aGxvbjY0IHByb2Nlc3NvcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2Vybm93LWs4LgogCiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KLWNvbmZpZyBYODZfUE9XRVJOT1dfSzhfQUNQSQotCWJvb2wKLQlwcm9tcHQgIkFDUEkgU3VwcG9ydCIgaWYgWDg2XzMyCi0JZGVwZW5kcyBvbiBBQ1BJICYmIFg4Nl9QT1dFUk5PV19LOCAmJiBBQ1BJX1BST0NFU1NPUgotCWRlcGVuZHMgb24gIShYODZfUE9XRVJOT1dfSzggPSB5ICYmIEFDUElfUFJPQ0VTU09SID0gbSkKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSzhzIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBTdGF0ZXMgdmlhIEFDUEkuCi0JICBUaGlzIGRyaXZlciBpcyBwcm9iYWJseSByZXF1aXJlZCBmb3IgQ1BVRnJlcSB0byB3b3JrIHdpdGggbXVsdGktc29ja2V0IGFuZAotCSAgU01QIHN5c3RlbXMuICBJdCBpcyBub3QgcmVxdWlyZWQgb24gYXQgbGVhc3Qgc29tZSBzaW5nbGUtc29ja2V0IHlldAotCSAgbXVsdGktY29yZSBzeXN0ZW1zLCBldmVuIGlmIFNNUCBpcyBlbmFibGVkLgotCi0JICBJdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuCi0KIGNvbmZpZyBYODZfR1hfU1VTUE1PRAogCXRyaXN0YXRlICJDeXJpeCBNZWRpYUdYL05hdFNlbWkgR2VvZGUgU3VzcGVuZCBNb2R1bGF0aW9uIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFBDSQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCmluZGV4IDU2MGY3NzYuLjUwOTI5NmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKQEAgLTEsNiArMSwxMSBAQAorIyBMaW5rIG9yZGVyIG1hdHRlcnMuIEs4IGlzIHByZWZlcnJlZCB0byBBQ1BJIGJlY2F1c2Ugb2YgZmlybXdhcmUgYnVncyBpbiBlYXJseQorIyBLOCBzeXN0ZW1zLiBBQ1BJIGlzIHByZWZlcnJlZCB0byBhbGwgb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4KKyMgc3BlZWRzdGVwLSogaXMgcHJlZmVycmVkIG92ZXIgcDQtY2xvY2ttb2QuCisKK29iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCitvYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s2KQkJKz0gcG93ZXJub3ctazYubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNykJCSs9IHBvd2Vybm93LWs3Lm8KLW9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCiBvYmotJChDT05GSUdfWDg2X0xPTkdIQVVMKQkJKz0gbG9uZ2hhdWwubwogb2JqLSQoQ09ORklHX1g4Nl9FX1BPV0VSU0FWRVIpCQkrPSBlX3Bvd2Vyc2F2ZXIubwogb2JqLSQoQ09ORklHX0VMQU5fQ1BVRlJFUSkJCSs9IGVsYW5mcmVxLm8KQEAgLTEwLDcgKzE1LDYgQEAKIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0lDSCkJCSs9IHNwZWVkc3RlcC1pY2gubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCKQkJKz0gc3BlZWRzdGVwLWxpYi5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9TTUkpCQkrPSBzcGVlZHN0ZXAtc21pLm8KLW9iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwogb2JqLSQoQ09ORklHX1g4Nl9QNF9DTE9DS01PRCkJCSs9IHA0LWNsb2NrbW9kLm8KIG9iai0kKENPTkZJR19YODZfQ1BVRlJFUV9ORk9SQ0UyKQkrPSBjcHVmcmVxLW5mb3JjZTIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDRiMWMzMTkuLjIzZGE5NmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYWNwaS1jcHVmcmVxLmMgLSBBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIgKCRSZXZpc2lvbjogMS40ICQpCisgKiBhY3BpLWNwdWZyZXEuYyAtIEFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlcgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBQYXVsIERpZWZlbmJhdWdoIDxwYXVsLnMuZGllZmVuYmF1Z2hAaW50ZWwuY29tPgpAQCAtMzYsMTYgKzM2LDE4IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKwogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJhY3BpLWNwdWZyZXEiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiYWNwaS1jcHVmcmVxIiwgbXNnKQogCiBNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoLCBEb21pbmlrIEJyb2Rvd3NraSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIiKTsKQEAgLTk1LDcgKzk3LDcgQEAKIAogCXBlcmYgPSBkYXRhLT5hY3BpX2RhdGE7CiAKLQlmb3IgKGk9MDsgaTxwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKIAkJaWYgKHZhbHVlID09IHBlcmYtPnN0YXRlc1tpXS5zdGF0dXMpCiAJCQlyZXR1cm4gZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3k7CiAJfQpAQCAtMTEwLDcgKzExMiw3IEBACiAJbXNyICY9IElOVEVMX01TUl9SQU5HRTsKIAlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCi0JZm9yIChpPTA7IGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CiAJCWlmIChtc3IgPT0gcGVyZi0+c3RhdGVzW2RhdGEtPmZyZXFfdGFibGVbaV0uaW5kZXhdLnN0YXR1cykKIAkJCXJldHVybiBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKIAl9CkBAIC0xMzgsMTUgKzE0MCwxMyBAQAogCXU4IGJpdF93aWR0aDsKIH07CiAKLXR5cGVkZWYgdW5pb24gewotCXN0cnVjdCBtc3JfYWRkciBtc3I7Ci0Jc3RydWN0IGlvX2FkZHIgaW87Ci19IGRydl9hZGRyX3VuaW9uOwotCiBzdHJ1Y3QgZHJ2X2NtZCB7CiAJdW5zaWduZWQgaW50IHR5cGU7CiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7Ci0JZHJ2X2FkZHJfdW5pb24gYWRkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBtc3JfYWRkciBtc3I7CisJCXN0cnVjdCBpb19hZGRyIGlvOworCX0gYWRkcjsKIAl1MzIgdmFsOwogfTsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAJdW5zaWduZWQgaW50IGN1cl9mcmVxOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpPTA7IGk8MTAwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJY3VyX2ZyZXEgPSBleHRyYWN0X2ZyZXEoZ2V0X2N1cl92YWwobWFzayksIGRhdGEpOwogCQlpZiAoY3VyX2ZyZXEgPT0gZnJlcSkKIAkJCXJldHVybiAxOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAkJdW5zaWduZWQgbG9uZyBmcmVxbiA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAKLQkJZm9yIChpPTA7IGk8KHBlcmYtPnN0YXRlX2NvdW50LTEpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IChwZXJmLT5zdGF0ZV9jb3VudC0xKTsgaSsrKSB7CiAJCQlmcmVxID0gZnJlcW47CiAJCQlmcmVxbiA9IHBlcmYtPnN0YXRlc1tpKzFdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkJCWlmICgoMiAqIGNwdV9raHopID4gKGZyZXFuICsgZnJlcSkpIHsKQEAgLTYwMSw3ICs2MDEsNyBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkYXRhLT5hY3BpX2RhdGEgPSBwZXJjcHVfcHRyKGFjcGlfcGVyZl9kYXRhLCBjcHUpOworCWRhdGEtPmFjcGlfZGF0YSA9IHBlcl9jcHVfcHRyKGFjcGlfcGVyZl9kYXRhLCBjcHUpOwogCXBlcl9jcHUoZHJ2X2RhdGEsIGNwdSkgPSBkYXRhOwogCiAJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkKQEAgLTY3Myw3ICs2NzMsNyBAQAogCiAJLyogZGV0ZWN0IHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAwOwotCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewogCQlpZiAoKHBlcmYtPnN0YXRlc1tpXS50cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAwKSA+CiAJCSAgICBwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5KQogCQkJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CkBAIC02ODIsOCArNjgyLDggQEAKIAogCWRhdGEtPm1heF9mcmVxID0gcGVyZi0+c3RhdGVzWzBdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkvKiB0YWJsZSBpbml0ICovCi0JZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewotCQlpZiAoaT4wICYmIHBlcmYtPnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSA+PQorCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJCWlmIChpID4gMCAmJiBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgPj0KIAkJICAgIGRhdGEtPmZyZXFfdGFibGVbdmFsaWRfc3RhdGVzLTFdLmZyZXF1ZW5jeSAvIDEwMDApCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCmluZGV4IDk2NWVhNTIuLjczMzA5M2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqIG5mb3JjZTJfY2hpcHNldDoKICAqIEZTQiBpcyBjaGFuZ2VkIHVzaW5nIHRoZSBjaGlwc2V0CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmZvcmNlMl9jaGlwc2V0X2RldjsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmZvcmNlMl9kZXY7CiAKIC8qIGZpZDoKICAqIG11bHRpcGxpZXIgKiAxMApAQCAtNTYsNyArNTYsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhtaW5fZnNiLAogCQkiTWluaW11bSBGU0IgdG8gdXNlLCBpZiBub3QgZGVmaW5lZDogY3VycmVudCBGU0IgLSA1MCIpOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImNwdWZyZXEtbmZvcmNlMiIsIG1zZykKKyNkZWZpbmUgUEZYICJjcHVmcmVxLW5mb3JjZTI6ICIKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJjcHVmcmVxLW5mb3JjZTIiLCBtc2cpCiAKIC8qKgogICogbmZvcmNlMl9jYWxjX2ZzYiAtIGNhbGN1bGF0ZSBGU0IKQEAgLTExOCwxMSArMTIwLDExIEBACiAJaW50IHRlbXA7CiAKIAkvKiBTZXQgdGhlIHBsbCBhZGRyLiB0byAweDAwICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEFEUiwgMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExBRFIsIDApOwogCiAJLyogTm93IHdyaXRlIHRoZSB2YWx1ZSBpbiBhbGwgNjQgcmVnaXN0ZXJzICovCiAJZm9yICh0ZW1wID0gMDsgdGVtcCA8PSAweDNmOyB0ZW1wKyspCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExSRUcsIHBsbCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMUkVHLCBwbGwpOwogCiAJcmV0dXJuOwogfQpAQCAtMTM5LDggKzE0MSw4IEBACiAJdTMyIGZzYiwgdGVtcCA9IDA7CiAKIAkvKiBHZXQgY2hpcHNldCBib290IEZTQiBmcm9tIHN1YmRldmljZSA1IChGU0IgYXQgYm9vdC10aW1lKSAqLwotCW5mb3JjZTJfc3ViNSA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLAotCQkJCQkJMHgwMUVGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwluZm9yY2UyX3N1YjUgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMUVGLAorCQkJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwogCWlmICghbmZvcmNlMl9zdWI1KQogCQlyZXR1cm4gMDsKIApAQCAtMTQ4LDEzICsxNTAsMTMgQEAKIAlmc2IgLz0gMTAwMDAwMDsKIAogCS8qIENoZWNrIGlmIFBMTCByZWdpc3RlciBpcyBhbHJlYWR5IHNldCAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CiAKIAlpZiAoYm9vdGZzYiB8fCAhdGVtcCkKIAkJcmV0dXJuIGZzYjsKIAogCS8qIFVzZSBQTEwgcmVnaXN0ZXIgRlNCIHZhbHVlICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMUkVHLCAmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTFJFRywgJnRlbXApOwogCWZzYiA9IG5mb3JjZTJfY2FsY19mc2IodGVtcCk7CiAKIAlyZXR1cm4gZnNiOwpAQCAtMTc0LDE4ICsxNzYsMTggQEAKIAlpbnQgcGxsID0gMDsKIAogCWlmICgoZnNiID4gbWF4X2ZzYikgfHwgKGZzYiA8IE5GT1JDRTJfTUlOX0ZTQikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBGU0IgJWQgaXMgb3V0IG9mIHJhbmdlIVxuIiwgZnNiKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlNCICVkIGlzIG91dCBvZiByYW5nZSFcbiIsIGZzYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXRmc2IgPSBuZm9yY2UyX2ZzYl9yZWFkKDApOwogCWlmICghdGZzYikgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IEVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIEZTQlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIEZTQlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEZpcnN0IHdyaXRlPyBUaGVuIHNldCBhY3R1YWwgdmFsdWUgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOwogCWlmICghdGVtcCkgewogCQlwbGwgPSBuZm9yY2UyX2NhbGNfcGxsKHRmc2IpOwogCkBAIC0xOTcsNyArMTk5LDcgQEAKIAogCS8qIEVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KIAl0ZW1wID0gMHgwMTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCl0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTgpdGVtcCk7CiAKIAlkaWZmID0gdGZzYiAtIGZzYjsKIApAQCAtMjIyLDcgKzIyNCw3IEBACiAJfQogCiAJdGVtcCA9IDB4NDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMQURSLCAodTgpdGVtcCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEFEUiwgKHU4KXRlbXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQsNyArMjQ2LDggQEAKICAqIG5mb3JjZTJfdGFyZ2V0IC0gc2V0IGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKiBAcG9saWN5OiBuZXcgcG9saWN5CiAgKiBAdGFyZ2V0X2ZyZXE6IHRoZSB0YXJnZXQgZnJlcXVlbmN5Ci0gKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeSAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKKyAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5CisgKiAgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS4KICAqLwpAQCAtMjc2LDcgKzI3OSw3IEBACiAJLyogbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAqLwogCiAJaWYgKG5mb3JjZTJfc2V0X2ZzYih0YXJnZXRfZnNiKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKIAkJCXRhcmdldF9mc2IpOwogCWVsc2UKIAkJZHByaW50aygiQ2hhbmdlZCBGU0Igc3VjY2Vzc2Z1bGx5IHRvICVkXG4iLApAQCAtMzI3LDggKzMzMCw4IEBACiAJLyogRklYOiBHZXQgRklEIGZyb20gQ1BVICovCiAJaWYgKCFmaWQpIHsKIAkJaWYgKCFjcHVfa2h6KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNwdWZyZXE6IGNwdV9raHogbm90IHNldCwgY2FuJ3QgY2FsY3VsYXRlIG11bHRpcGxpZXIhXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkiY3B1X2toeiBub3Qgc2V0LCBjYW4ndCBjYWxjdWxhdGUgbXVsdGlwbGllciFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMzQzLDcgKzM0Niw3IEBACiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiBGU0IgY3VycmVudGx5IGF0ICVpIE1IeiwgRklEICVkLiVkXG4iLCBmc2IsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZTQiBjdXJyZW50bHkgYXQgJWkgTUh6LCBGSUQgJWQuJWRcbiIsIGZzYiwKIAkgICAgICAgZmlkIC8gMTAsIGZpZCAlIDEwKTsKIAogCS8qIFNldCBtYXhpbXVtIEZTQiB0byBGU0IgYXQgYm9vdCB0aW1lICovCkBAIC0zOTIsMTcgKzM5NSwxOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mb3JjZTJfZGV0ZWN0X2NoaXBzZXQodm9pZCkKIHsKLQluZm9yY2UyX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsCisJbmZvcmNlMl9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwKIAkJCQkJUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMiwKIAkJCQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CiAKLQlpZiAobmZvcmNlMl9jaGlwc2V0X2RldiA9PSBOVUxMKQorCWlmIChuZm9yY2UyX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6IERldGVjdGVkIG5Gb3JjZTIgY2hpcHNldCByZXZpc2lvbiAlWFxuIiwKLQkgICAgICAgbmZvcmNlMl9jaGlwc2V0X2Rldi0+cmV2aXNpb24pOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgImNwdWZyZXE6IEZTQiBjaGFuZ2luZyBpcyBtYXliZSB1bnN0YWJsZSBhbmQgY2FuIGxlYWQgdG8gY3Jhc2hlcyBhbmQgZGF0YSBsb3NzLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRldGVjdGVkIG5Gb3JjZTIgY2hpcHNldCByZXZpc2lvbiAlWFxuIiwKKwkgICAgICAgbmZvcmNlMl9kZXYtPnJldmlzaW9uKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWAorCSAgICAgICAiRlNCIGNoYW5naW5nIGlzIG1heWJlIHVuc3RhYmxlIGFuZCBjYW4gbGVhZCB0byAiCisJICAgICAgICJjcmFzaGVzIGFuZCBkYXRhIGxvc3MuXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIwLDcgKzQyNCw3IEBACiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmIChuZm9yY2UyX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBObyBuRm9yY2UyIGNoaXBzZXQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIG5Gb3JjZTIgY2hpcHNldC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwppbmRleCBjMmY5MzBkLi4zNWEyNTdkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCkBAIC0xMiwxMiArMTIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS90c2MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAogI2RlZmluZSBFUFNfQlJBTkRfQzdNCTAKICNkZWZpbmUgRVBTX0JSQU5EX0M3CTEKQEAgLTE4NCw3ICsxODQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlzd2l0Y2goYnJhbmQpIHsKKwlzd2l0Y2ggKGJyYW5kKSB7CiAJY2FzZSBFUFNfQlJBTkRfQzdNOgogCQlwcmludGsoS0VSTl9DT05UICJDNy1NXG4iKTsKIAkJYnJlYWs7CkBAIC0yMDQsMTIgKzIwNCwxMiBAQAogCX0KIAkvKiBFbmFibGUgRW5oYW5jZWQgUG93ZXJTYXZlciAqLwogCXJkbXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgdmFsKTsKLQlpZiAoISh2YWwgJiAxIDw8IDE2KSkgewotCQl2YWwgfD0gMSA8PCAxNjsKKwlpZiAoISh2YWwgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTkhBTkNFRF9TUEVFRFNURVApKSB7CisJCXZhbCB8PSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTkhBTkNFRF9TUEVFRFNURVA7CiAJCXdybXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgdmFsKTsKIAkJLyogQ2FuIGJlIGxvY2tlZCBhdCAwICovCiAJCXJkbXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgdmFsKTsKLQkJaWYgKCEodmFsICYgMSA8PCAxNikpIHsKKwkJaWYgKCEodmFsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDYW4ndCBlbmFibGUgRW5oYW5jZWQgUG93ZXJTYXZlclxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtMjE4LDE3ICsyMTgsMjAgQEAKIAkvKiBQcmludCB2b2x0YWdlIGFuZCBtdWx0aXBsaWVyICovCiAJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CiAJY3VycmVudF92b2x0YWdlID0gbG8gJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gImVwczogQ3VycmVudCB2b2x0YWdlID0gJWRtVlxuIiwgY3VycmVudF92b2x0YWdlICogMTYgKyA3MDApOworCXByaW50ayhLRVJOX0lORk8gImVwczogQ3VycmVudCB2b2x0YWdlID0gJWRtVlxuIiwKKwkJCWN1cnJlbnRfdm9sdGFnZSAqIDE2ICsgNzAwKTsKIAljdXJyZW50X211bHRpcGxpZXIgPSAobG8gPj4gOCkgJiAweGZmOwogCXByaW50ayhLRVJOX0lORk8gImVwczogQ3VycmVudCBtdWx0aXBsaWVyID0gJWRcbiIsIGN1cnJlbnRfbXVsdGlwbGllcik7CiAKIAkvKiBQcmludCBsaW1pdHMgKi8KIAltYXhfdm9sdGFnZSA9IGhpICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJlcHM6IEhpZ2hlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsIG1heF92b2x0YWdlICogMTYgKyA3MDApOworCXByaW50ayhLRVJOX0lORk8gImVwczogSGlnaGVzdCB2b2x0YWdlID0gJWRtVlxuIiwKKwkJCW1heF92b2x0YWdlICogMTYgKyA3MDApOwogCW1heF9tdWx0aXBsaWVyID0gKGhpID4+IDgpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IEhpZ2hlc3QgbXVsdGlwbGllciA9ICVkXG4iLCBtYXhfbXVsdGlwbGllcik7CiAJbWluX3ZvbHRhZ2UgPSAoaGkgPj4gMTYpICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJlcHM6IExvd2VzdCB2b2x0YWdlID0gJWRtVlxuIiwgbWluX3ZvbHRhZ2UgKiAxNiArIDcwMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBMb3dlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsCisJCQltaW5fdm9sdGFnZSAqIDE2ICsgNzAwKTsKIAltaW5fbXVsdGlwbGllciA9IChoaSA+PiAyNCkgJiAweGZmOwogCXByaW50ayhLRVJOX0lORk8gImVwczogTG93ZXN0IG11bHRpcGxpZXIgPSAlZFxuIiwgbWluX211bHRpcGxpZXIpOwogCkBAIC0zMTgsNyArMzIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIGVwc19hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqZXBzX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zNTYsNyArMzU5LDcgQEAKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZlcHNfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUmFmYbMgQmlsc2tpIDxyYWZhbGJpbHNraUBpbnRlcmlhLnBsPiIpOworTU9EVUxFX0FVVEhPUigiUmFmYWwgQmlsc2tpIDxyYWZhbGJpbHNraUBpbnRlcmlhLnBsPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJFbmhhbmNlZCBQb3dlclNhdmVyIGRyaXZlciBmb3IgVklBIEM3IENQVSdzLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCmluZGV4IGZlNjEzYzkuLjAwNmIyNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCkBAIC0xODQsNyArMTg0LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZlbGFuZnJlcV90YWJsZVswXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmZWxhbmZyZXFfdGFibGVbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVsYW5mcmVxX3NldF9jcHVfc3RhdGUobmV3c3RhdGUpOwpAQCAtMzAxLDcgKzMwMiw4IEBACiBtb2R1bGVfcGFyYW0obWF4X2ZyZXEsIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFN2ZW4gR2VnZ3VzIDxzdmVuQGdlZ2d1cy5uZXQ+Iik7CitNT0RVTEVfQVVUSE9SKCJSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCAiCisJCSJTdmVuIEdlZ2d1cyA8c3ZlbkBnZWdndXMubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJjcHVmcmVxIGRyaXZlciBmb3IgQU1EJ3MgRWxhbiBDUFVzIik7CiAKIG1vZHVsZV9pbml0KGVsYW5mcmVxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKaW5kZXggOWQ5ZWFlOC4uYWMyN2VjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCkBAIC03OSw4ICs3OSw5IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWN5cml4Lmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKIC8qIFBDSSBjb25maWcgcmVnaXN0ZXJzLCBhbGwgYXQgRjAgKi8KICNkZWZpbmUgUENJX1BNRVIxCTB4ODAJLyogcG93ZXIgbWFuYWdlbWVudCBlbmFibGUgcmVnaXN0ZXIgMSAqLwpAQCAtMTIyLDggKzEyMyw4IEBACiBzdGF0aWMgaW50IHN0b2NrX2ZyZXE7CiAKIC8qIFBDSSBidXMgY2xvY2sgLSBkZWZhdWx0cyB0byAzMC4wMDAgaWYgY3B1X2toeiBpcyBub3QgYXZhaWxhYmxlICovCi1zdGF0aWMgaW50IHBjaV9idXNjbGsgPSAwOwotbW9kdWxlX3BhcmFtIChwY2lfYnVzY2xrLCBpbnQsIDA0NDQpOworc3RhdGljIGludCBwY2lfYnVzY2xrOworbW9kdWxlX3BhcmFtKHBjaV9idXNjbGssIGludCwgMDQ0NCk7CiAKIC8qIG1heGltdW0gZHVyYXRpb24gZm9yIHdoaWNoIHRoZSBjcHUgbWF5IGJlIHN1c3BlbmRlZAogICogKDMydXMgKiBNQVhfRFVSQVRJT04pLiBJZiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIHRoaXMgZGVmYXVsdHMKQEAgLTEzMiw3ICsxMzMsNyBAQAogICogaXMgc3VzcGVuZGVkIC0tIHByb2Nlc3NpbmcgcG93ZXIgaXMganVzdCAwLjM5JSBvZiB3aGF0IGl0IHVzZWQgdG8gYmUsCiAgKiB0aG91Z2guIDc4MS4yNSBrSHooISkgZm9yIGEgMjAwIE1IeiBwcm9jZXNzb3IgLS0gd293LiAqLwogc3RhdGljIGludCBtYXhfZHVyYXRpb24gPSAyNTU7Ci1tb2R1bGVfcGFyYW0gKG1heF9kdXJhdGlvbiwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShtYXhfZHVyYXRpb24sIGludCwgMDQ0NCk7CiAKIC8qIEZvciB0aGUgZGVmYXVsdCBwb2xpY3ksIHdlIHdhbnQgYXQgbGVhc3Qgc29tZSBwcm9jZXNzaW5nIHBvd2VyCiAgKiAtIGxldCdzIHNheSA1JS4gKG1pbiA9IG1heGZyZXEgLyBQT0xJQ1lfTUlOX0RJVikKQEAgLTE0MCw3ICsxNDEsOCBAQAogI2RlZmluZSBQT0xJQ1lfTUlOX0RJViAyMAogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiZ3gtc3VzcG1vZCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJneC1zdXNwbW9kIiwgbXNnKQogCiAvKioKICAqIHdlIGNhbiBkZXRlY3QgYSBjb3JlIG11bHRpcGlsZXIgZnJvbSBkaXIwX2xzYgpAQCAtMTY2LDEyICsxNjgsMjAgQEAKICAqCUxvdyBMZXZlbCBjaGlwc2V0IGludGVyZmFjZQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBneF9jaGlwc2V0X3RibFtdIF9faW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7IDAsIH0sCiB9OwogCitzdGF0aWMgdm9pZCBneF93cml0ZV9ieXRlKGludCByZWcsIGludCB2YWx1ZSkKK3sKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIHJlZywgdmFsdWUpOworfQorCiAvKioKICAqIGd4X2RldGVjdF9jaGlwc2V0OgogICoKQEAgLTIwMCw3ICsyMTAsOCBAQAogLyoqCiAgKiBneF9nZXRfY3B1c3BlZWQ6CiAgKgotICogRmluZHMgb3V0IGF0IHdoaWNoIGVmZmljaWVudCBmcmVxdWVuY3kgdGhlIEN5cml4IE1lZGlhR1gvTmF0U2VtaSBHZW9kZSBDUFUgcnVucy4KKyAqIEZpbmRzIG91dCBhdCB3aGljaCBlZmZpY2llbnQgZnJlcXVlbmN5IHRoZSBDeXJpeCBNZWRpYUdYL05hdFNlbWkKKyAqIEdlb2RlIENQVSBydW5zLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGd4X2dldF9jcHVzcGVlZCh1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMjE3LDE3ICsyMjgsMTggQEAKICAqCiAgKiovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ3hfdmFsaWRhdGVfc3BlZWQodW5zaWduZWQgaW50IGtoeiwgdTggKm9uX2R1cmF0aW9uLCB1OCAqb2ZmX2R1cmF0aW9uKQorc3RhdGljIHVuc2lnbmVkIGludCBneF92YWxpZGF0ZV9zcGVlZCh1bnNpZ25lZCBpbnQga2h6LCB1OCAqb25fZHVyYXRpb24sCisJCXU4ICpvZmZfZHVyYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTggdG1wX29uLCB0bXBfb2ZmOwogCWludCBvbGRfdG1wX2ZyZXEgPSBzdG9ja19mcmVxOwogCWludCB0bXBfZnJlcTsKIAotCSpvZmZfZHVyYXRpb249MTsKLQkqb25fZHVyYXRpb249MDsKKwkqb2ZmX2R1cmF0aW9uID0gMTsKKwkqb25fZHVyYXRpb24gPSAwOwogCi0JZm9yIChpPW1heF9kdXJhdGlvbjsgaT4wOyBpLS0pIHsKKwlmb3IgKGkgPSBtYXhfZHVyYXRpb247IGkgPiAwOyBpLS0pIHsKIAkJdG1wX29mZiA9ICgoa2h6ICogaSkgLyBzdG9ja19mcmVxKSAmIDB4ZmY7CiAJCXRtcF9vbiA9IGkgLSB0bXBfb2ZmOwogCQl0bXBfZnJlcSA9IChzdG9ja19mcmVxICogdG1wX29mZikgLyBpOwpAQCAtMjU5LDI2ICsyNzEsMzQgQEAKIAlmcmVxcy5jcHUgPSAwOwogCWZyZXFzLm9sZCA9IGd4X2dldF9jcHVzcGVlZCgwKTsKIAotCW5ld19raHogPSBneF92YWxpZGF0ZV9zcGVlZChraHosICZneF9wYXJhbXMtPm9uX2R1cmF0aW9uLCAmZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOworCW5ld19raHogPSBneF92YWxpZGF0ZV9zcGVlZChraHosICZneF9wYXJhbXMtPm9uX2R1cmF0aW9uLAorCQkJJmd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKIAogCWZyZXFzLm5ldyA9IG5ld19raHo7CiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCWlmIChuZXdfa2h6ICE9IHN0b2NrX2ZyZXEpIHsgIC8qIGlmIG5ldyBraHogPT0gMTAwJSBvZiBDUFUgc3BlZWQsIGl0IGlzIHNwZWNpYWwgY2FzZSAqLworCisKKwlpZiAobmV3X2toeiAhPSBzdG9ja19mcmVxKSB7CisJCS8qIGlmIG5ldyBraHogPT0gMTAwJSBvZiBDUFUgc3BlZWQsIGl0IGlzIHNwZWNpYWwgY2FzZSAqLwogCQlzd2l0Y2ggKGd4X3BhcmFtcy0+Y3M1NXgwLT5kZXZpY2UpIHsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZOgogCQkJcG1lcjEgPSBneF9wYXJhbXMtPnBjaV9wbWVyMSB8IElSUV9TUERVUCB8IFZJRF9TUERVUDsKIAkJCS8qIEZJWE1FOiBuZWVkIHRvIHRlc3Qgb3RoZXIgdmFsdWVzIC0tIFp3YW5lLE1pdXJhICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9JUlFUQywgNCk7IC8qIHR5cGljYWwgMiB0byA0bXMgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1ZJRFRDLCAxMDApOy8qIHR5cGljYWwgNTAgdG8gMTAwbXMgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1BNRVIxLCBwbWVyMSk7CisJCQkvKiB0eXBpY2FsIDIgdG8gNG1zICovCisJCQlneF93cml0ZV9ieXRlKFBDSV9JUlFUQywgNCk7CisJCQkvKiB0eXBpY2FsIDUwIHRvIDEwMG1zICovCisJCQlneF93cml0ZV9ieXRlKFBDSV9WSURUQywgMTAwKTsKKwkJCWd4X3dyaXRlX2J5dGUoUENJX1BNRVIxLCBwbWVyMSk7CiAKLQkJCWlmIChneF9wYXJhbXMtPmNzNTV4MC0+cmV2aXNpb24gPCAweDEwKSB7ICAgLyogQ1M1NTMwKHJldiAxLjIsIDEuMykgKi8KLQkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmcgfCBTVVNNT0Q7Ci0JCQl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENTNTUzMEEsQi4uICovCi0JCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnIHwgU1VTTU9EIHwgUFdSU1ZFOworCQkJaWYgKGd4X3BhcmFtcy0+Y3M1NXgwLT5yZXZpc2lvbiA8IDB4MTApIHsKKwkJCQkvKiBDUzU1MzAocmV2IDEuMiwgMS4zKSAqLworCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZ3xTVVNNT0Q7CisJCQl9IGVsc2UgeworCQkJCS8qIENTNTUzMEEsQi4uICovCisJCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnfFNVU01PRHxQV1JTVkU7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjA6CkBAIC0yOTQsMTMgKzMxNCwxMyBAQAogCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmcgJiB+KFNVU01PRCk7CiAJCWd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uID0gMDsKIAkJZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiA9IDA7Ci0JCWRwcmludGsoInN1c3BlbmQgbW9kdWxhdGlvbiBkaXNhYmxlZDogY3B1IHJ1bnMgMTAwIHBlcmNlbnQgc3BlZWQuXG4iKTsKKwkJZHByaW50aygic3VzcGVuZCBtb2R1bGF0aW9uIGRpc2FibGVkOiBjcHUgcnVucyAxMDAlJSBzcGVlZC5cbiIpOwogCX0KIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwgZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX01PRE9OLCBneF9wYXJhbXMtPm9uX2R1cmF0aW9uKTsKKwlneF93cml0ZV9ieXRlKFBDSV9NT0RPRkYsIGd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKKwlneF93cml0ZV9ieXRlKFBDSV9NT0RPTiwgZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbik7CiAKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9TVVNDRkcsIHN1c2NmZyk7CisJZ3hfd3JpdGVfYnl0ZShQQ0lfU1VTQ0ZHLCBzdXNjZmcpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfU1VTQ0ZHLCAmc3VzY2ZnKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTMzNCw3ICszNTQsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBvbGljeS0+Y3B1ID0gMDsKLQljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLCBzdG9ja19mcmVxKTsKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLAorCQkJc3RvY2tfZnJlcSk7CiAKIAkvKiBpdCBuZWVkcyB0byBiZSBhc3N1cmVkIHRoYXQgYXQgbGVhc3Qgb25lIHN1cHBvcnRlZCBmcmVxdWVuY3kgaXMKIAkgKiB3aXRoaW4gcG9saWN5LT5taW4gYW5kIHBvbGljeS0+bWF4LiBJZiBpdCBpcyBub3QsIHBvbGljeS0+bWF4CkBAIC0zNTQsNyArMzc1LDggQEAKIAlwb2xpY3ktPm1heCA9IHRtcF9mcmVxOwogCWlmIChwb2xpY3ktPm1heCA8IHBvbGljeS0+bWluKQogCQlwb2xpY3ktPm1heCA9IHBvbGljeS0+bWluOwotCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksIHN0b2NrX2ZyZXEpOworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksCisJCQlzdG9ja19mcmVxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzk4LDE4ICs0MjAsMTggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBkZXRlcm1pbmUgbWF4aW11bSBmcmVxdWVuY3kgKi8KLQlpZiAocGNpX2J1c2NsaykgeworCWlmIChwY2lfYnVzY2xrKQogCQltYXhmcmVxID0gcGNpX2J1c2NsayAqIGd4X2ZyZXFfbXVsdFtnZXRDeDg2KENYODZfRElSMSkgJiAweDBmXTsKLQl9IGVsc2UgaWYgKGNwdV9raHopIHsKKwllbHNlIGlmIChjcHVfa2h6KQogCQltYXhmcmVxID0gY3B1X2toejsKLQl9IGVsc2UgeworCWVsc2UKIAkJbWF4ZnJlcSA9IDMwMDAwICogZ3hfZnJlcV9tdWx0W2dldEN4ODYoQ1g4Nl9ESVIxKSAmIDB4MGZdOwotCX0KKwogCXN0b2NrX2ZyZXEgPSBtYXhmcmVxOwogCWN1cmZyZXEgPSBneF9nZXRfY3B1c3BlZWQoMCk7CiAKIAlkcHJpbnRrKCJjcHUgbWF4IGZyZXF1ZW5jeSBpcyAlZC5cbiIsIG1heGZyZXEpOwotCWRwcmludGsoImNwdSBjdXJyZW50IGZyZXF1ZW5jeSBpcyAlZGtIei5cbiIsY3VyZnJlcSk7CisJZHByaW50aygiY3B1IGN1cnJlbnQgZnJlcXVlbmN5IGlzICVka0h6LlxuIiwgY3VyZnJlcSk7CiAKIAkvKiBzZXR1cCBiYXNpYyBzdHJ1Y3QgZm9yIGNwdWZyZXEgQVBJICovCiAJcG9saWN5LT5jcHUgPSAwOwpAQCAtNDQ3LDcgKzQ2OSw4IEBACiAJc3RydWN0IHBjaV9kZXYgKmd4X3BjaTsKIAogCS8qIFRlc3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgaGFyZHdhcmUgKi8KLQlpZiAoKGd4X3BjaSA9IGd4X2RldGVjdF9jaGlwc2V0KCkpID09IE5VTEwpCisJZ3hfcGNpID0gZ3hfZGV0ZWN0X2NoaXBzZXQoKTsKKwlpZiAoZ3hfcGNpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogY2hlY2sgd2hldGhlciBtb2R1bGUgcGFyYW1ldGVycyBhcmUgc2FuZSAqLwpAQCAtNDY4LDkgKzQ5MSwxMSBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjEsICYocGFyYW1zLT5wY2lfcG1lcjEpKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX1BNRVIyLCAmKHBhcmFtcy0+cGNpX3BtZXIyKSk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPTiwgJihwYXJhbXMtPm9uX2R1cmF0aW9uKSk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPRkYsICYocGFyYW1zLT5vZmZfZHVyYXRpb24pKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwKKwkJCSYocGFyYW1zLT5vZmZfZHVyYXRpb24pKTsKIAotCWlmICgocmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmd4X3N1c3Btb2RfZHJpdmVyKSkpIHsKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmZ3hfc3VzcG1vZF9kcml2ZXIpOworCWlmIChyZXQpIHsKIAkJa2ZyZWUocGFyYW1zKTsKIAkJcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgZXJyb3IhICovCiAJfQpAQCAtNDg1LDkgKzUxMCw5IEBACiAJa2ZyZWUoZ3hfcGFyYW1zKTsKIH0KIAotTU9EVUxFX0FVVEhPUiAoIkhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJDcHVmcmVxIGRyaXZlciBmb3IgQ3lyaXggTWVkaWFHWCBhbmQgTmF0U2VtaSBHZW9kZSIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNwdWZyZXEgZHJpdmVyIGZvciBDeXJpeCBNZWRpYUdYIGFuZCBOYXRTZW1pIEdlb2RlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGNwdWZyZXFfZ3hfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX2d4X2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCBhNGNmZjVkLi5mMWM1MWFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtMzAsMTIgKzMwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCiAjaW5jbHVkZSAibG9uZ2hhdWwuaCIKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgVVNFX05PUlRIQlJJREdFCQkoMSA8PCAyKQogCiBzdGF0aWMgaW50IGNwdV9tb2RlbDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtc2NhbGVzPTE2Oworc3RhdGljIHVuc2lnbmVkIGludCBudW1zY2FsZXMgPSAxNjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnNiOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1WX3BvcyAqdnJtX21WX3RhYmxlOwpAQCAtNjcsOCArNjcsOCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBoaWdoZXN0X3NwZWVkLCBsb3dlc3Rfc3BlZWQ7IC8qIGtIeiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBtaW5tdWx0LCBtYXhtdWx0Owogc3RhdGljIGludCBjYW5fc2NhbGVfdm9sdGFnZTsKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByOworc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3g7CiBzdGF0aWMgdTMyIGFjcGlfcmVnc19hZGRyOwogc3RhdGljIHU4IGxvbmdoYXVsX2ZsYWdzOwogc3RhdGljIHVuc2lnbmVkIGludCBsb25naGF1bF9pbmRleDsKQEAgLTc4LDEyICs3OCwxMyBAQAogc3RhdGljIGludCBkaXNhYmxlX2FjcGlfYzM7CiBzdGF0aWMgaW50IHJldmlkX2VycmF0YTsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJsb25naGF1bCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJsb25naGF1bCIsIG1zZykKIAogCiAvKiBDbG9jayByYXRpb3MgbXVsdGlwbGllZCBieSAxMCAqLwotc3RhdGljIGludCBjbG9ja19yYXRpb1szMl07Ci1zdGF0aWMgaW50IGVibGNyX3RhYmxlWzMyXTsKK3N0YXRpYyBpbnQgbXVsdHNbMzJdOworc3RhdGljIGludCBlYmxjclszMl07CiBzdGF0aWMgaW50IGxvbmdoYXVsX3ZlcnNpb247CiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpsb25naGF1bF90YWJsZTsKIApAQCAtOTMsNyArOTQsNyBAQAogc3RhdGljIGNoYXIgKnByaW50X3NwZWVkKGludCBzcGVlZCkKIHsKIAlpZiAoc3BlZWQgPCAxMDAwKSB7Ci0JCXNucHJpbnRmKHNwZWVkYnVmZmVyLCBzaXplb2Yoc3BlZWRidWZmZXIpLCIlZE1IeiIsIHNwZWVkKTsKKwkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksICIlZE1IeiIsIHNwZWVkKTsKIAkJcmV0dXJuIHNwZWVkYnVmZmVyOwogCX0KIApAQCAtMTIyLDI3ICsxMjMsMjggQEAKIAogc3RhdGljIGludCBsb25naGF1bF9nZXRfY3B1X211bHQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGludmFsdWU9MCxsbywgaGk7CisJdW5zaWduZWQgbG9uZyBpbnZhbHVlID0gMCwgbG8sIGhpOwogCi0JcmRtc3IgKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBsbywgaGkpOwotCWludmFsdWUgPSAobG8gJiAoMTw8MjJ8MTw8MjN8MTw8MjR8MTw8MjUpKSA+PjIyOwotCWlmIChsb25naGF1bF92ZXJzaW9uPT1UWVBFX0xPTkdIQVVMX1YyIHx8IGxvbmdoYXVsX3ZlcnNpb249PVRZUEVfUE9XRVJTQVZFUikgeworCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBsbywgaGkpOworCWludmFsdWUgPSAobG8gJiAoMTw8MjJ8MTw8MjN8MTw8MjR8MTw8MjUpKT4+MjI7CisJaWYgKGxvbmdoYXVsX3ZlcnNpb24gPT0gVFlQRV9MT05HSEFVTF9WMiB8fAorCSAgICBsb25naGF1bF92ZXJzaW9uID09IFRZUEVfUE9XRVJTQVZFUikgewogCQlpZiAobG8gJiAoMTw8MjcpKQotCQkJaW52YWx1ZSs9MTY7CisJCQlpbnZhbHVlICs9IDE2OwogCX0KLQlyZXR1cm4gZWJsY3JfdGFibGVbaW52YWx1ZV07CisJcmV0dXJuIGVibGNyW2ludmFsdWVdOwogfQogCiAvKiBGb3IgcHJvY2Vzc29yIHdpdGggQkNSMiBNU1IgKi8KIAotc3RhdGljIHZvaWQgZG9fbG9uZ2hhdWwxKHVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleCkKK3N0YXRpYyB2b2lkIGRvX2xvbmdoYXVsMSh1bnNpZ25lZCBpbnQgbXVsdHNfaW5kZXgpCiB7CiAJdW5pb24gbXNyX2JjcjIgYmNyMjsKIAogCXJkbXNybChNU1JfVklBX0JDUjIsIGJjcjIudmFsKTsKIAkvKiBFbmFibGUgc29mdHdhcmUgY2xvY2sgbXVsdGlwbGllciAqLwogCWJjcjIuYml0cy5FU09GVEJGID0gMTsKLQliY3IyLmJpdHMuQ0xPQ0tNVUwgPSBjbG9ja19yYXRpb19pbmRleCAmIDB4ZmY7CisJYmNyMi5iaXRzLkNMT0NLTVVMID0gbXVsdHNfaW5kZXggJiAweGZmOwogCiAJLyogU3luYyB0byB0aW1lciB0aWNrICovCiAJc2FmZV9oYWx0KCk7CkBAIC0xNjEsNyArMTYzLDcgQEAKIAogLyogRm9yIHByb2Nlc3NvciB3aXRoIExvbmdoYXVsIE1TUiAqLwogCi1zdGF0aWMgdm9pZCBkb19wb3dlcnNhdmVyKGludCBjeF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXgsCitzdGF0aWMgdm9pZCBkb19wb3dlcnNhdmVyKGludCBjeF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgbXVsdHNfaW5kZXgsCiAJCQkgIHVuc2lnbmVkIGludCBkaXIpCiB7CiAJdW5pb24gbXNyX2xvbmdoYXVsIGxvbmdoYXVsOwpAQCAtMTczLDExICsxNzUsMTEgQEAKIAkJbG9uZ2hhdWwuYml0cy5SZXZpc2lvbktleSA9IGxvbmdoYXVsLmJpdHMuUmV2aXNpb25JRDsKIAllbHNlCiAJCWxvbmdoYXVsLmJpdHMuUmV2aXNpb25LZXkgPSAwOwotCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvID0gY2xvY2tfcmF0aW9faW5kZXggJiAweGY7Ci0JbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW80ID0gKGNsb2NrX3JhdGlvX2luZGV4ICYgMHgxMCkgPj4gNDsKKwlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbyA9IG11bHRzX2luZGV4ICYgMHhmOworCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvNCA9IChtdWx0c19pbmRleCAmIDB4MTApID4+IDQ7CiAJLyogU2V0dXAgbmV3IHZvbHRhZ2UgKi8KIAlpZiAoY2FuX3NjYWxlX3ZvbHRhZ2UpCi0JCWxvbmdoYXVsLmJpdHMuU29mdFZJRCA9IChjbG9ja19yYXRpb19pbmRleCA+PiA4KSAmIDB4MWY7CisJCWxvbmdoYXVsLmJpdHMuU29mdFZJRCA9IChtdWx0c19pbmRleCA+PiA4KSAmIDB4MWY7CiAJLyogU3luYyB0byB0aW1lciB0aWNrICovCiAJc2FmZV9oYWx0KCk7CiAJLyogUmFpc2Ugdm9sdGFnZSBpZiBuZWNlc3NhcnkgKi8KQEAgLTI0MCwxNCArMjQyLDE0IEBACiAKIC8qKgogICogbG9uZ2hhdWxfc2V0X2NwdV9mcmVxdWVuY3koKQotICogQGNsb2NrX3JhdGlvX2luZGV4IDogYml0cGF0dGVybiBvZiB0aGUgbmV3IG11bHRpcGxpZXIuCisgKiBAbXVsdHNfaW5kZXggOiBiaXRwYXR0ZXJuIG9mIHRoZSBuZXcgbXVsdGlwbGllci4KICAqCiAgKiBTZXRzIGEgbmV3IGNsb2NrIHJhdGlvLgogICovCiAKIHN0YXRpYyB2b2lkIGxvbmdoYXVsX3NldHN0YXRlKHVuc2lnbmVkIGludCB0YWJsZV9pbmRleCkKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXg7CisJdW5zaWduZWQgaW50IG11bHRzX2luZGV4OwogCWludCBzcGVlZCwgbXVsdDsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjU2LDkgKzI1OCw5IEBACiAJdTMyIGJtX3RpbWVvdXQgPSAxMDAwOwogCXVuc2lnbmVkIGludCBkaXIgPSAwOwogCi0JY2xvY2tfcmF0aW9faW5kZXggPSBsb25naGF1bF90YWJsZVt0YWJsZV9pbmRleF0uaW5kZXg7CisJbXVsdHNfaW5kZXggPSBsb25naGF1bF90YWJsZVt0YWJsZV9pbmRleF0uaW5kZXg7CiAJLyogU2FmZXR5IHByZWNhdXRpb25zICovCi0JbXVsdCA9IGNsb2NrX3JhdGlvW2Nsb2NrX3JhdGlvX2luZGV4ICYgMHgxZl07CisJbXVsdCA9IG11bHRzW211bHRzX2luZGV4ICYgMHgxZl07CiAJaWYgKG11bHQgPT0gLTEpCiAJCXJldHVybjsKIAlzcGVlZCA9IGNhbGNfc3BlZWQobXVsdCk7CkBAIC0yNzQsNyArMjc2LDcgQEAKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAKLQlkcHJpbnRrICgiU2V0dGluZyB0byBGU0I6JWRNSHogTXVsdDolZC4lZHggKCVzKVxuIiwKKwlkcHJpbnRrKCJTZXR0aW5nIHRvIEZTQjolZE1IeiBNdWx0OiVkLiVkeCAoJXMpXG4iLAogCQkJZnNiLCBtdWx0LzEwLCBtdWx0JTEwLCBwcmludF9zcGVlZChzcGVlZC8xMDAwKSk7CiByZXRyeV9sb29wOgogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtMjgyLDggKzI4NCw4IEBACiAKIAlwaWMyX21hc2sgPSBpbmIoMHhBMSk7CiAJcGljMV9tYXNrID0gaW5iKDB4MjEpOwkvKiB3b3JrcyBvbiBDMy4gc2F2ZSBtYXNrLiAqLwotCW91dGIoMHhGRiwweEExKTsJLyogT3ZlcmtpbGwgKi8KLQlvdXRiKDB4RkUsMHgyMSk7CS8qIFRNUjAgb25seSAqLworCW91dGIoMHhGRiwgMHhBMSk7CS8qIE92ZXJraWxsICovCisJb3V0YigweEZFLCAweDIxKTsJLyogVE1SMCBvbmx5ICovCiAKIAkvKiBXYWl0IHdoaWxlIFBDSSBidXMgaXMgYnVzeS4gKi8KIAlpZiAoYWNwaV9yZWdzX2FkZHIgJiYgKGxvbmdoYXVsX2ZsYWdzICYgVVNFX05PUlRIQlJJREdFCkBAIC0zMTIsNyArMzE0LDcgQEAKIAkgKiBTb2Z0d2FyZSBjb250cm9sbGVkIG11bHRpcGxpZXJzIG9ubHkuCiAJICovCiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YxOgotCQlkb19sb25naGF1bDEoY2xvY2tfcmF0aW9faW5kZXgpOworCQlkb19sb25naGF1bDEobXVsdHNfaW5kZXgpOwogCQlicmVhazsKIAogCS8qCkBAIC0zMjcsOSArMzI5LDkgQEAKIAkJaWYgKGxvbmdoYXVsX2ZsYWdzICYgVVNFX0FDUElfQzMpIHsKIAkJCS8qIERvbid0IGFsbG93IHdha2V1cCAqLwogCQkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQsIDApOwotCQkJZG9fcG93ZXJzYXZlcihjeC0+YWRkcmVzcywgY2xvY2tfcmF0aW9faW5kZXgsIGRpcik7CisJCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBtdWx0c19pbmRleCwgZGlyKTsKIAkJfSBlbHNlIHsKLQkJCWRvX3Bvd2Vyc2F2ZXIoMCwgY2xvY2tfcmF0aW9faW5kZXgsIGRpcik7CisJCQlkb19wb3dlcnNhdmVyKDAsIG11bHRzX2luZGV4LCBkaXIpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTM0MSw4ICszNDMsOCBAQAogCQkvKiBFbmFibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiAqLwogCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMCk7CiAJfQotCW91dGIocGljMl9tYXNrLDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KLQlvdXRiKHBpYzFfbWFzaywweDIxKTsKKwlvdXRiKHBpYzJfbWFzaywgMHhBMSk7CS8qIHJlc3RvcmUgbWFzayAqLworCW91dGIocGljMV9tYXNrLCAweDIxKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwpAQCAtMzkyLDcgKzM5NCw4IEBACiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAKIAlpZiAoIWJtX3RpbWVvdXQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXJuaW5nOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGlkbGUgUENJIGJ1cy5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2FybmluZzogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciAiCisJCQkJImlkbGUgUENJIGJ1cy5cbiIpOwogfQogCiAvKgpAQCAtNDU4LDMxICs0NjEsMzIgQEAKIAkJYnJlYWs7CiAJfQogCi0JZHByaW50ayAoIk1pbk11bHQ6JWQuJWR4IE1heE11bHQ6JWQuJWR4XG4iLAorCWRwcmludGsoIk1pbk11bHQ6JWQuJWR4IE1heE11bHQ6JWQuJWR4XG4iLAogCQkgbWlubXVsdC8xMCwgbWlubXVsdCUxMCwgbWF4bXVsdC8xMCwgbWF4bXVsdCUxMCk7CiAKIAloaWdoZXN0X3NwZWVkID0gY2FsY19zcGVlZChtYXhtdWx0KTsKIAlsb3dlc3Rfc3BlZWQgPSBjYWxjX3NwZWVkKG1pbm11bHQpOwotCWRwcmludGsgKCJGU0I6JWRNSHogIExvd2VzdCBzcGVlZDogJXMgICBIaWdoZXN0IHNwZWVkOiVzXG4iLCBmc2IsCisJZHByaW50aygiRlNCOiVkTUh6ICBMb3dlc3Qgc3BlZWQ6ICVzICAgSGlnaGVzdCBzcGVlZDolc1xuIiwgZnNiLAogCQkgcHJpbnRfc3BlZWQobG93ZXN0X3NwZWVkLzEwMDApLAogCQkgcHJpbnRfc3BlZWQoaGlnaGVzdF9zcGVlZC8xMDAwKSk7CiAKIAlpZiAobG93ZXN0X3NwZWVkID09IGhpZ2hlc3Rfc3BlZWQpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJoaWdoZXN0c3BlZWQgPT0gbG93ZXN0LCBhYm9ydGluZy5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGlnaGVzdHNwZWVkID09IGxvd2VzdCwgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChsb3dlc3Rfc3BlZWQgPiBoaWdoZXN0X3NwZWVkKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAibm9uc2Vuc2UhIGxvd2VzdCAoJWQgPiAlZCkgIVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIm5vbnNlbnNlISBsb3dlc3QgKCVkID4gJWQpICFcbiIsCiAJCQlsb3dlc3Rfc3BlZWQsIGhpZ2hlc3Rfc3BlZWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlsb25naGF1bF90YWJsZSA9IGttYWxsb2MoKG51bXNjYWxlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSksIEdGUF9LRVJORUwpOwotCWlmKCFsb25naGF1bF90YWJsZSkKKwlsb25naGF1bF90YWJsZSA9IGttYWxsb2MoKG51bXNjYWxlcyArIDEpICogc2l6ZW9mKCpsb25naGF1bF90YWJsZSksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWxvbmdoYXVsX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaiA9IDA7IGogPCBudW1zY2FsZXM7IGorKykgewotCQlyYXRpbyA9IGNsb2NrX3JhdGlvW2pdOworCQlyYXRpbyA9IG11bHRzW2pdOwogCQlpZiAocmF0aW8gPT0gLTEpCiAJCQljb250aW51ZTsKIAkJaWYgKHJhdGlvID4gbWF4bXVsdCB8fCByYXRpbyA8IG1pbm11bHQpCkBAIC01MDcsMTMgKzUxMSwxMCBAQAogCQkJfQogCQl9CiAJCWlmIChtaW5faSAhPSBqKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdGVtcDsKLQkJCXRlbXAgPSBsb25naGF1bF90YWJsZVtqXS5mcmVxdWVuY3k7Ci0JCQlsb25naGF1bF90YWJsZVtqXS5mcmVxdWVuY3kgPSBsb25naGF1bF90YWJsZVttaW5faV0uZnJlcXVlbmN5OwotCQkJbG9uZ2hhdWxfdGFibGVbbWluX2ldLmZyZXF1ZW5jeSA9IHRlbXA7Ci0JCQl0ZW1wID0gbG9uZ2hhdWxfdGFibGVbal0uaW5kZXg7Ci0JCQlsb25naGF1bF90YWJsZVtqXS5pbmRleCA9IGxvbmdoYXVsX3RhYmxlW21pbl9pXS5pbmRleDsKLQkJCWxvbmdoYXVsX3RhYmxlW21pbl9pXS5pbmRleCA9IHRlbXA7CisJCQlzd2FwKGxvbmdoYXVsX3RhYmxlW2pdLmZyZXF1ZW5jeSwKKwkJCSAgICAgbG9uZ2hhdWxfdGFibGVbbWluX2ldLmZyZXF1ZW5jeSk7CisJCQlzd2FwKGxvbmdoYXVsX3RhYmxlW2pdLmluZGV4LAorCQkJICAgICBsb25naGF1bF90YWJsZVttaW5faV0uaW5kZXgpOwogCQl9CiAJfQogCkBAIC01MjEsNyArNTIyLDcgQEAKIAogCS8qIEZpbmQgaW5kZXggd2UgYXJlIHJ1bm5pbmcgb24gKi8KIAlmb3IgKGogPSAwOyBqIDwgazsgaisrKSB7Ci0JCWlmIChjbG9ja19yYXRpb1tsb25naGF1bF90YWJsZVtqXS5pbmRleCAmIDB4MWZdID09IG11bHQpIHsKKwkJaWYgKG11bHRzW2xvbmdoYXVsX3RhYmxlW2pdLmluZGV4ICYgMHgxZl0gPT0gbXVsdCkgewogCQkJbG9uZ2hhdWxfaW5kZXggPSBqOwogCQkJYnJlYWs7CiAJCX0KQEAgLTU1OSwyMCArNTYwLDIyIEBACiAJbWF4dmlkID0gdnJtX21WX3RhYmxlW2xvbmdoYXVsLmJpdHMuTWF4aW11bVZJRF07CiAKIAlpZiAobWludmlkLm1WID09IDAgfHwgbWF4dmlkLm1WID09IDAgfHwgbWludmlkLm1WID4gbWF4dmlkLm1WKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiQm9ndXMgdmFsdWVzIE1pbjolZC4lMDNkIE1heDolZC4lMDNkLiAiCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJCb2d1cyB2YWx1ZXMgTWluOiVkLiUwM2QgTWF4OiVkLiUwM2QuICIKIAkJCQkJIlZvbHRhZ2Ugc2NhbGluZyBkaXNhYmxlZC5cbiIsCi0JCQkJCW1pbnZpZC5tVi8xMDAwLCBtaW52aWQubVYlMTAwMCwgbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwKTsKKwkJCQkJbWludmlkLm1WLzEwMDAsIG1pbnZpZC5tViUxMDAwLAorCQkJCQltYXh2aWQubVYvMTAwMCwgbWF4dmlkLm1WJTEwMDApOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKG1pbnZpZC5tViA9PSBtYXh2aWQubVYpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJDbGFpbXMgdG8gc3VwcG9ydCB2b2x0YWdlIHNjYWxpbmcgYnV0IG1pbiAmIG1heCBhcmUgIgotCQkJCSJib3RoICVkLiUwM2QuIFZvbHRhZ2Ugc2NhbGluZyBkaXNhYmxlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNsYWltcyB0byBzdXBwb3J0IHZvbHRhZ2Ugc2NhbGluZyBidXQgIgorCQkJCSJtaW4gJiBtYXggYXJlIGJvdGggJWQuJTAzZC4gIgorCQkJCSJWb2x0YWdlIHNjYWxpbmcgZGlzYWJsZWRcbiIsCiAJCQkJbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIEhvdyBtYW55IHZvbHRhZ2Ugc3RlcHMgKi8KKwkvKiBIb3cgbWFueSB2b2x0YWdlIHN0ZXBzKi8KIAludW12c2NhbGVzID0gbWF4dmlkLnBvcyAtIG1pbnZpZC5wb3MgKyAxOwogCXByaW50ayhLRVJOX0lORk8gUEZYCiAJCSJNYXggVklEPSVkLiUwM2QgICIKQEAgLTU4Niw3ICs1ODksNyBAQAogCWogPSBsb25naGF1bC5iaXRzLk1pbk1IekJSOwogCWlmIChsb25naGF1bC5iaXRzLk1pbk1IekJSNCkKIAkJaiArPSAxNjsKLQltaW5fdmlkX3NwZWVkID0gZWJsY3JfdGFibGVbal07CisJbWluX3ZpZF9zcGVlZCA9IGVibGNyW2pdOwogCWlmIChtaW5fdmlkX3NwZWVkID09IC0xKQogCQlyZXR1cm47CiAJc3dpdGNoIChsb25naGF1bC5iaXRzLk1pbk1IekZTQikgewpAQCAtNjE3LDcgKzYyMCw4IEBACiAJCQlwb3MgPSBtaW52aWQucG9zOwogCQlsb25naGF1bF90YWJsZVtqXS5pbmRleCB8PSBtVl92cm1fdGFibGVbcG9zXSA8PCA4OwogCQl2aWQgPSB2cm1fbVZfdGFibGVbbVZfdnJtX3RhYmxlW3Bvc11dOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZjogJWQga0h6LCBpbmRleDogJWQsIHZpZDogJWQgbVZcbiIsIHNwZWVkLCBqLCB2aWQubVYpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZjogJWQga0h6LCBpbmRleDogJWQsIHZpZDogJWQgbVZcbiIsCisJCQkJc3BlZWQsIGosIHZpZC5tVik7CiAJCWorKzsKIAl9CiAKQEAgLTY0MCw3ICs2NDQsOCBAQAogCXVuc2lnbmVkIGludCBkaXIgPSAwOwogCXU4IHZpZCwgY3VycmVudF92aWQ7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgbG9uZ2hhdWxfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJnRhYmxlX2luZGV4KSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgbG9uZ2hhdWxfdGFibGUsIHRhcmdldF9mcmVxLAorCQkJCXJlbGF0aW9uLCAmdGFibGVfaW5kZXgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIERvbid0IHNldCBzYW1lIGZyZXF1ZW5jeSBhZ2FpbiAqLwpAQCAtNjU2LDcgKzY2MSw4IEBACiAJCSAqIHRoaXMgaW4gaGFyZHdhcmUsIEMzIGlzIG9sZCBhbmQgd2UgbmVlZCB0byBkbyB0aGlzCiAJCSAqIGluIHNvZnR3YXJlLiAqLwogCQlpID0gbG9uZ2hhdWxfaW5kZXg7Ci0JCWN1cnJlbnRfdmlkID0gKGxvbmdoYXVsX3RhYmxlW2xvbmdoYXVsX2luZGV4XS5pbmRleCA+PiA4KSAmIDB4MWY7CisJCWN1cnJlbnRfdmlkID0gKGxvbmdoYXVsX3RhYmxlW2xvbmdoYXVsX2luZGV4XS5pbmRleCA+PiA4KTsKKwkJY3VycmVudF92aWQgJj0gMHgxZjsKIAkJaWYgKHRhYmxlX2luZGV4ID4gbG9uZ2hhdWxfaW5kZXgpCiAJCQlkaXIgPSAxOwogCQl3aGlsZSAoaSAhPSB0YWJsZV9pbmRleCkgewpAQCAtNjkxLDkgKzY5Nyw5IEBACiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkOwogCi0JaWYgKCBhY3BpX2J1c19nZXRfZGV2aWNlKG9ial9oYW5kbGUsICZkKSApIHsKKwlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShvYmpfaGFuZGxlLCAmZCkpCiAJCXJldHVybiAwOwotCX0KKwogCSpyZXR1cm5fdmFsdWUgPSBhY3BpX2RyaXZlcl9kYXRhKGQpOwogCXJldHVybiAxOwogfQpAQCAtNzUwLDcgKzc1Niw3IEBACiAJLyogRmluZCBWVDgyMzUgc291dGhicmlkZ2UgKi8KIAlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNSwgTlVMTCk7CiAJaWYgKGRldiA9PSBOVUxMKQotCS8qIEZpbmQgVlQ4MjM3IHNvdXRoYnJpZGdlICovCisJCS8qIEZpbmQgVlQ4MjM3IHNvdXRoYnJpZGdlICovCiAJCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLAogCQkJCSAgICAgUENJX0RFVklDRV9JRF9WSUFfODIzNywgTlVMTCk7CiAJaWYgKGRldiAhPSBOVUxMKSB7CkBAIC03NjksNyArNzc1LDggQEAKIAkJaWYgKHBjaV9jbWQgJiAxIDw8IDcpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4ODgsICZhY3BpX3JlZ3NfYWRkcik7CiAJCQlhY3BpX3JlZ3NfYWRkciAmPSAweGZmMDA7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUNQSSBJL08gYXQgMHgleFxuIiwgYWNwaV9yZWdzX2FkZHIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFDUEkgSS9PIGF0IDB4JXhcbiIsCisJCQkJCWFjcGlfcmVnc19hZGRyKTsKIAkJfQogCiAJCXBjaV9kZXZfcHV0KGRldik7CkBAIC03ODEsNyArNzg4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGxvbmdoYXVsX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKLQljaGFyICpjcHVuYW1lPU5VTEw7CisJY2hhciAqY3B1bmFtZSA9IE5VTEw7CiAJaW50IHJldDsKIAl1MzIgbG8sIGhpOwogCkBAIC03OTEsOCArNzk4LDggQEAKIAkJY3B1X21vZGVsID0gQ1BVX1NBTVVFTDsKIAkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsJyBbQzVBXSI7CiAJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOwotCQltZW1jcHkgKGNsb2NrX3JhdGlvLCBzYW11ZWwxX2Nsb2NrX3JhdGlvLCBzaXplb2Yoc2FtdWVsMV9jbG9ja19yYXRpbykpOwotCQltZW1jcHkgKGVibGNyX3RhYmxlLCBzYW11ZWwxX2VibGNyLCBzaXplb2Yoc2FtdWVsMV9lYmxjcikpOworCQltZW1jcHkobXVsdHMsIHNhbXVlbDFfbXVsdHMsIHNpemVvZihzYW11ZWwxX211bHRzKSk7CisJCW1lbWNweShlYmxjciwgc2FtdWVsMV9lYmxjciwgc2l6ZW9mKHNhbXVlbDFfZWJsY3IpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDc6CkBAIC04MDMsMTAgKzgxMCw4IEBACiAJCQljcHVuYW1lID0gIkMzICdTYW11ZWwgMicgW0M1Ql0iOwogCQkJLyogTm90ZSwgdGhpcyBpcyBub3QgYSB0eXBvLCBlYXJseSBTYW11ZWwyJ3MgaGFkCiAJCQkgKiBTYW11ZWwxIHJhdGlvcy4gKi8KLQkJCW1lbWNweShjbG9ja19yYXRpbywgc2FtdWVsMV9jbG9ja19yYXRpbywKLQkJCQlzaXplb2Yoc2FtdWVsMV9jbG9ja19yYXRpbykpOwotCQkJbWVtY3B5KGVibGNyX3RhYmxlLCBzYW11ZWwyX2VibGNyLAotCQkJCXNpemVvZihzYW11ZWwyX2VibGNyKSk7CisJCQltZW1jcHkobXVsdHMsIHNhbXVlbDFfbXVsdHMsIHNpemVvZihzYW11ZWwxX211bHRzKSk7CisJCQltZW1jcHkoZWJsY3IsIHNhbXVlbDJfZWJsY3IsIHNpemVvZihzYW11ZWwyX2VibGNyKSk7CiAJCQlicmVhazsKIAkJY2FzZSAxIC4uLiAxNToKIAkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOwpAQCAtODE3LDEwICs4MjIsOCBAQAogCQkJCWNwdV9tb2RlbCA9IENQVV9FWlJBOwogCQkJCWNwdW5hbWUgPSAiQzMgJ0V6cmEnIFtDNUNdIjsKIAkJCX0KLQkJCW1lbWNweShjbG9ja19yYXRpbywgZXpyYV9jbG9ja19yYXRpbywKLQkJCQlzaXplb2YoZXpyYV9jbG9ja19yYXRpbykpOwotCQkJbWVtY3B5KGVibGNyX3RhYmxlLCBlenJhX2VibGNyLAotCQkJCXNpemVvZihlenJhX2VibGNyKSk7CisJCQltZW1jcHkobXVsdHMsIGV6cmFfbXVsdHMsIHNpemVvZihlenJhX211bHRzKSk7CisJCQltZW1jcHkoZWJsY3IsIGV6cmFfZWJsY3IsIHNpemVvZihlenJhX2VibGNyKSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTgyOSwxOCArODMyLDE2IEBACiAJCWNwdV9tb2RlbCA9IENQVV9FWlJBX1Q7CiAJCWNwdW5hbWUgPSAiQzMgJ0V6cmEtVCcgW0M1TV0iOwogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9QT1dFUlNBVkVSOwotCQludW1zY2FsZXM9MzI7Ci0JCW1lbWNweSAoY2xvY2tfcmF0aW8sIGV6cmF0X2Nsb2NrX3JhdGlvLCBzaXplb2YoZXpyYXRfY2xvY2tfcmF0aW8pKTsKLQkJbWVtY3B5IChlYmxjcl90YWJsZSwgZXpyYXRfZWJsY3IsIHNpemVvZihlenJhdF9lYmxjcikpOworCQludW1zY2FsZXMgPSAzMjsKKwkJbWVtY3B5KG11bHRzLCBlenJhdF9tdWx0cywgc2l6ZW9mKGV6cmF0X211bHRzKSk7CisJCW1lbWNweShlYmxjciwgZXpyYXRfZWJsY3IsIHNpemVvZihlenJhdF9lYmxjcikpOwogCQlicmVhazsKIAogCWNhc2UgOToKIAkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfUE9XRVJTQVZFUjsKIAkJbnVtc2NhbGVzID0gMzI7Ci0JCW1lbWNweShjbG9ja19yYXRpbywKLQkJICAgICAgIG5laGVtaWFoX2Nsb2NrX3JhdGlvLAotCQkgICAgICAgc2l6ZW9mKG5laGVtaWFoX2Nsb2NrX3JhdGlvKSk7Ci0JCW1lbWNweShlYmxjcl90YWJsZSwgbmVoZW1pYWhfZWJsY3IsIHNpemVvZihuZWhlbWlhaF9lYmxjcikpOworCQltZW1jcHkobXVsdHMsIG5laGVtaWFoX211bHRzLCBzaXplb2YobmVoZW1pYWhfbXVsdHMpKTsKKwkJbWVtY3B5KGVibGNyLCBuZWhlbWlhaF9lYmxjciwgc2l6ZW9mKG5laGVtaWFoX2VibGNyKSk7CiAJCXN3aXRjaCAoYy0+eDg2X21hc2spIHsKIAkJY2FzZSAwIC4uLiAxOgogCQkJY3B1X21vZGVsID0gQ1BVX05FSEVNSUFIOwpAQCAtODY5LDE0ICs4NzAsMTQgQEAKIAkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOwogCX0KIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVklBICVzIENQVSBkZXRlY3RlZC4gICIsIGNwdW5hbWUpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJWSUEgJXMgQ1BVIGRldGVjdGVkLiAgIiwgY3B1bmFtZSk7CiAJc3dpdGNoIChsb25naGF1bF92ZXJzaW9uKSB7CiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YxOgogCWNhc2UgVFlQRV9MT05HSEFVTF9WMjoKLQkJcHJpbnRrICgiTG9uZ2hhdWwgdiVkIHN1cHBvcnRlZC5cbiIsIGxvbmdoYXVsX3ZlcnNpb24pOworCQlwcmludGsoS0VSTl9DT05UICJMb25naGF1bCB2JWQgc3VwcG9ydGVkLlxuIiwgbG9uZ2hhdWxfdmVyc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgVFlQRV9QT1dFUlNBVkVSOgotCQlwcmludGsgKCJQb3dlcnNhdmVyIHN1cHBvcnRlZC5cbiIpOworCQlwcmludGsoS0VSTl9DT05UICJQb3dlcnNhdmVyIHN1cHBvcnRlZC5cbiIpOwogCQlicmVhazsKIAl9OwogCkBAIC05NDAsNyArOTQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIGxvbmdoYXVsX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpsb25naGF1bF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtOTY2LDEzICs5NjcsMTUgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIk1vcmUgdGhhbiAxIENQVSBkZXRlY3RlZCwgbG9uZ2hhdWwgZGlzYWJsZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTW9yZSB0aGFuIDEgQ1BVIGRldGVjdGVkLCAiCisJCQkJImxvbmdoYXVsIGRpc2FibGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWlmIChjcHVfaGFzX2FwaWMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQVBJQyBkZXRlY3RlZC4gTG9uZ2hhdWwgaXMgY3VycmVudGx5IGJyb2tlbiBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQVBJQyBkZXRlY3RlZC4gTG9uZ2hhdWwgaXMgY3VycmVudGx5ICIKKwkJCQkiYnJva2VuIGluIHRoaXMgY29uZmlndXJhdGlvbi5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjZW5kaWYKQEAgLTk5Myw4ICs5OTYsOCBAQAogewogCWludCBpOwogCi0JZm9yIChpPTA7IGkgPCBudW1zY2FsZXM7IGkrKykgewotCQlpZiAoY2xvY2tfcmF0aW9baV0gPT0gbWF4bXVsdCkgeworCWZvciAoaSA9IDA7IGkgPCBudW1zY2FsZXM7IGkrKykgeworCQlpZiAobXVsdHNbaV0gPT0gbWF4bXVsdCkgewogCQkJbG9uZ2hhdWxfc2V0c3RhdGUoaSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTAwNywxMSArMTAxMCwxMSBAQAogLyogRXZlbiBpZiBCSU9TIGlzIGV4cG9ydGluZyBBQ1BJIEMzIHN0YXRlLCBhbmQgaXQgaXMgdXNlZAogICogd2l0aCBzdWNjZXNzIHdoZW4gQ1BVIGlzIGlkbGUsIHRoaXMgc3RhdGUgZG9lc24ndAogICogdHJpZ2dlciBmcmVxdWVuY3kgdHJhbnNpdGlvbiBpbiBzb21lIGNhc2VzLiAqLwotbW9kdWxlX3BhcmFtIChkaXNhYmxlX2FjcGlfYzMsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9hY3BpX2MzLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2FjcGlfYzMsICJEb24ndCB1c2UgQUNQSSBDMyBzdXBwb3J0Iik7CiAvKiBDaGFuZ2UgQ1BVIHZvbHRhZ2Ugd2l0aCBmcmVxdWVuY3kuIFZlcnkgdXNlZnVsbCB0byBzYXZlCiAgKiBwb3dlciwgYnV0IG1vc3QgVklBIEMzIHByb2Nlc3NvcnMgYXJlbid0IHN1cHBvcnRpbmcgaXQuICovCi1tb2R1bGVfcGFyYW0gKHNjYWxlX3ZvbHRhZ2UsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oc2NhbGVfdm9sdGFnZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NhbGVfdm9sdGFnZSwgIlNjYWxlIHZvbHRhZ2Ugb2YgcHJvY2Vzc29yIik7CiAvKiBGb3JjZSByZXZpc2lvbiBrZXkgdG8gMCBmb3IgcHJvY2Vzc29ycyB3aGljaCBkb2Vzbid0CiAgKiBzdXBwb3J0IHZvbHRhZ2Ugc2NhbGluZywgYnV0IGFyZSBpbnRyb2R1Y2luZyBpdHNlbGYgYXMKQEAgLTEwMTksOSArMTAyMiw5IEBACiBtb2R1bGVfcGFyYW0ocmV2aWRfZXJyYXRhLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZXZpZF9lcnJhdGEsICJJZ25vcmUgQ1BVIFJldmlzaW9uIElEIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTG9uZ2hhdWwgZHJpdmVyIGZvciBWSUEgQ3lyaXggcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMb25naGF1bCBkcml2ZXIgZm9yIFZJQSBDeXJpeCBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKGxvbmdoYXVsX2luaXQpOwogbW9kdWxlX2V4aXQobG9uZ2hhdWxfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCmluZGV4IDRmY2MzMjAuLmUyMzYwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCkBAIC00OSwxNCArNDksMTQgQEAKIAogLyoKICAqIENsb2NrIHJhdGlvIHRhYmxlcy4gRGl2L01vZCBieSAxMCB0byBnZXQgcmF0aW8uCi0gKiBUaGUgZWJsY3Igb25lcyBzcGVjaWZ5IHRoZSByYXRpbyByZWFkIGZyb20gdGhlIENQVS4KLSAqIFRoZSBjbG9ja19yYXRpbyBvbmVzIHNwZWNpZnkgd2hhdCB0byB3cml0ZSB0byB0aGUgQ1BVLgorICogVGhlIGVibGNyIHZhbHVlcyBzcGVjaWZ5IHRoZSByYXRpbyByZWFkIGZyb20gdGhlIENQVS4KKyAqIFRoZSBtdWx0cyB2YWx1ZXMgc3BlY2lmeSB3aGF0IHRvIHdyaXRlIHRvIHRoZSBDUFUuCiAgKi8KIAogLyoKICAqIFZJQSBDMyBTYW11ZWwgMSAgJiBTYW11ZWwgMiAoc3RlcHBpbmcgMCkKICAqLwotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIHNhbXVlbDFfY2xvY2tfcmF0aW9bMTZdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIHNhbXVlbDFfbXVsdHNbMTZdID0gewogCS0xLCAvKiAwMDAwIC0+IFJFU0VSVkVEICovCiAJMzAsIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMTE5LDcgKzExOSw3IEBACiAvKgogICogVklBIEMzIEV6cmEKICAqLwotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmFfY2xvY2tfcmF0aW9bMTZdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmFfbXVsdHNbMTZdID0gewogCTEwMCwgLyogMDAwMCAtPiAxMC4weCAqLwogCTMwLCAgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMTYwLDcgKzE2MCw3IEBACiAvKgogICogVklBIEMzIChFenJhLVQpIFtDNU1dLgogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYXRfY2xvY2tfcmF0aW9bMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmF0X211bHRzWzMyXSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTIzNSw3ICsyMzUsNyBAQAogLyoKICAqIFZJQSBDMyBOZWhlbWlhaCAqLwogCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgIG5laGVtaWFoX2Nsb2NrX3JhdGlvWzMyXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSAgbmVoZW1pYWhfbXVsdHNbMzJdID0gewogCTEwMCwgLyogMDAwMCAtPiAxMC4weCAqLwogCS0xLCAvKiAwMDAxIC0+IDE2LjB4ICovCiAJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwppbmRleCA3NzdhN2ZmLi5kYTVmNzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKQEAgLTExLDEyICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImxvbmdydW4iLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkibG9uZ3J1biIsIG1zZykKIAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlcglsb25ncnVuX2RyaXZlcjsKIApAQCAtNTEsNyArNTIsNyBAQAogCW1zcl9sbyAmPSAweDAwMDAwMDdGOwogCW1zcl9oaSAmPSAweDAwMDAwMDdGOwogCi0JaWYgKCBsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxICkgeworCWlmIChsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxKSB7CiAJCS8qIEFzc3VtZSBkZWdlbmVyYXRlIExvbmdydW4gdGFibGUgKi8KIAkJcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IGxvbmdydW5faGlnaF9mcmVxOwogCX0gZWxzZSB7CkBAIC03OSw3ICs4MCw3IEBACiAJaWYgKCFwb2xpY3kpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCBsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxICkgeworCWlmIChsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxKSB7CiAJCS8qIEFzc3VtZSBkZWdlbmVyYXRlIExvbmdydW4gdGFibGUgKi8KIAkJcGN0Z19sbyA9IHBjdGdfaGkgPSAxMDA7CiAJfSBlbHNlIHsKQEAgLTE1Miw3ICsxNTMsNyBAQAogCWNwdWlkKDB4ODA4NjAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCWRwcmludGsoImNwdWlkIGVheCBpcyAldVxuIiwgZWF4KTsKIAotCXJldHVybiAoZWF4ICogMTAwMCk7CisJcmV0dXJuIGVheCAqIDEwMDA7CiB9CiAKIC8qKgpAQCAtMTk2LDcgKzE5Nyw4IEBACiAJCXJkbXNyKE1TUl9UTVRBX0xSVElfVk9MVF9NSFosIG1zcl9sbywgbXNyX2hpKTsKIAkJKmhpZ2hfZnJlcSA9IG1zcl9sbyAqIDEwMDA7IC8qIHRvIGtIeiAqLwogCi0JCWRwcmludGsoImxvbmdydW4gdGFibGUgaW50ZXJmYWNlIHRvbGQgJXUgLSAldSBrSHpcbiIsICpsb3dfZnJlcSwgKmhpZ2hfZnJlcSk7CisJCWRwcmludGsoImxvbmdydW4gdGFibGUgaW50ZXJmYWNlIHRvbGQgJXUgLSAldSBrSHpcbiIsCisJCQkJKmxvd19mcmVxLCAqaGlnaF9mcmVxKTsKIAogCQlpZiAoKmxvd19mcmVxID4gKmhpZ2hfZnJlcSkKIAkJCSpsb3dfZnJlcSA9ICpoaWdoX2ZyZXE7CkBAIC0yMTksNyArMjIxLDcgQEAKIAljcHVpZCgweDgwODYwMDA3LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAkvKiB0cnkgZGVjcmVhc2luZyBpbiAxMCUgc3RlcHMsIHNvbWUgcHJvY2Vzc29ycyByZWFjdCBvbmx5CiAJICogb24gc29tZSBiYXJyaWVyIHZhbHVlcyAqLwotCWZvciAodHJ5X2hpID0gODA7IHRyeV9oaSA+IDAgJiYgZWN4ID4gOTA7IHRyeV9oaSAtPTEwKSB7CisJZm9yICh0cnlfaGkgPSA4MDsgdHJ5X2hpID4gMCAmJiBlY3ggPiA5MDsgdHJ5X2hpIC09IDEwKSB7CiAJCS8qIHNldCB0byAwIHRvIHRyeV9oaSBwZXJmX3BjdGcgKi8KIAkJbXNyX2xvICY9IDB4RkZGRkZGODA7CiAJCW1zcl9oaSAmPSAweEZGRkZGRjgwOwpAQCAtMjM2LDcgKzIzOCw3IEBACiAKIAkvKiBwZXJmb3JtYW5jZV9wY3RnID0gKGN1cnJlbnRfZnJlcSAtIGxvd19mcmVxKS8oaGlnaF9mcmVxIC0gbG93X2ZyZXEpCiAJICogZXFhbHMKLQkgKiBsb3dfZnJlcSAqICggMSAtIHBlcmZfcGN0ZykgPSAoY3VyX2ZyZXEgLSBoaWdoX2ZyZXEgKiBwZXJmX3BjdGcpCisJICogbG93X2ZyZXEgKiAoMSAtIHBlcmZfcGN0ZykgPSAoY3VyX2ZyZXEgLSBoaWdoX2ZyZXEgKiBwZXJmX3BjdGcpCiAJICoKIAkgKiBoaWdoX2ZyZXEgKiBwZXJmX3BjdGcgaXMgc3RvcmVkIHRlbXBvYXJpbHkgaW50byAiZWJ4Ii4KIAkgKi8KQEAgLTMxNyw5ICszMTksMTAgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTG9uZ1J1biBkcml2ZXIgZm9yIFRyYW5zbWV0YSBDcnVzb2UgYW5kIEVmZmljZW9uIHByb2Nlc3NvcnMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMb25nUnVuIGRyaXZlciBmb3IgVHJhbnNtZXRhIENydXNvZSBhbmQgIgorCQkiRWZmaWNlb24gcHJvY2Vzc29ycy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQobG9uZ3J1bl9pbml0KTsKIG1vZHVsZV9leGl0KGxvbmdydW5fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IDMxNzhjM2EuLjQxZWQ5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0yNywxNSArMjcsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIAogI2RlZmluZSBQRlgJInA0LWNsb2NrbW9kOiAiCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInA0LWNsb2NrbW9kIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInA0LWNsb2NrbW9kIiwgbXNnKQogCiAvKgogICogRHV0eSBDeWNsZSAoM2JpdHMpLCBub3RlIERDX0RJU0FCTEUgaXMgbm90IHNwZWNpZmllZCBpbgpAQCAtNTgsNyArNjAsOCBAQAogewogCXUzMiBsLCBoOwogCi0JaWYgKCFjcHVfb25saW5lKGNwdSkgfHwgKG5ld3N0YXRlID4gRENfRElTQUJMRSkgfHwgKG5ld3N0YXRlID09IERDX1JFU1YpKQorCWlmICghY3B1X29ubGluZShjcHUpIHx8CisJICAgIChuZXdzdGF0ZSA+IERDX0RJU0FCTEUpIHx8IChuZXdzdGF0ZSA9PSBEQ19SRVNWKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZG1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9TVEFUVVMsICZsLCAmaCk7CkBAIC02Niw3ICs2OSw4IEBACiAJaWYgKGwgJiAweDAxKQogCQlkcHJpbnRrKCJDUFUjJWQgY3VycmVudGx5IHRoZXJtYWwgdGhyb3R0bGVkXG4iLCBjcHUpOwogCi0JaWYgKGhhc19ONDRfTzE3X2VycmF0YVtjcHVdICYmIChuZXdzdGF0ZSA9PSBEQ18yNVBUIHx8IG5ld3N0YXRlID09IERDX0RGTFQpKQorCWlmIChoYXNfTjQ0X08xN19lcnJhdGFbY3B1XSAmJgorCSAgICAobmV3c3RhdGUgPT0gRENfMjVQVCB8fCBuZXdzdGF0ZSA9PSBEQ19ERkxUKSkKIAkJbmV3c3RhdGUgPSBEQ18zOFBUOwogCiAJcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTCwgJmwsICZoKTsKQEAgLTExMiw3ICsxMTYsOCBAQAogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCWludCBpOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmcmVxcy5vbGQgPSBjcHVmcmVxX3A0X2dldChwb2xpY3ktPmNwdSk7CkBAIC0xMjcsNyArMTMyLDggQEAKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAl9CiAKLQkvKiBydW4gb24gZWFjaCBsb2dpY2FsIENQVSwgc2VlIHNlY3Rpb24gMTMuMTUuMyBvZiBJQTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZQorCS8qIHJ1biBvbiBlYWNoIGxvZ2ljYWwgQ1BVLAorCSAqIHNlZSBzZWN0aW9uIDEzLjE1LjMgb2YgSUEzMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUKIAkgKiBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAzCiAJICovCiAJZm9yX2VhY2hfY3B1KGksIHBvbGljeS0+Y3B1cykKQEAgLTE1MywyOCArMTU5LDMwIEBACiB7CiAJaWYgKGMtPng4NiA9PSAweDA2KSB7CiAJCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVIGRldGVjdGVkLiAiCi0JCQkgICAgICAgIlRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyB2b2x0YWdlIHNjYWxpbmciCi0JCQkgICAgICAgIiBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgc2NhbGluZy4gWW91IHNob3VsZCB1c2UgIgotCQkJICAgICAgICJ0aGF0IGluc3RlYWQgb2YgcDQtY2xvY2ttb2QsIGlmIHBvc3NpYmxlLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVICIKKwkJCSAgICAgICAiZGV0ZWN0ZWQuIFRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyAiCisJCQkgICAgICAgInZvbHRhZ2Ugc2NhbGluZyBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgIgorCQkJICAgICAgICJzY2FsaW5nLiBZb3Ugc2hvdWxkIHVzZSB0aGF0IGluc3RlYWQgb2YgIgorCQkJICAgICAgICJwNC1jbG9ja21vZCwgaWYgcG9zc2libGUuXG4iKTsKIAkJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAkJY2FzZSAweDBFOiAvKiBDb3JlICovCiAJCWNhc2UgMHgwRjogLyogQ29yZSBEdW8gKi8KIAkJY2FzZSAweDE2OiAvKiBDZWxlcm9uIENvcmUgKi8KIAkJCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7Ci0JCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkUpOworCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUENPUkUpOwogCQljYXNlIDB4MEQ6IC8qIFBlbnRpdW0gTSAoRG90aGFuKSAqLwogCQkJcDRjbG9ja21vZF9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIDB4MDk6IC8qIFBlbnRpdW0gTSAoQmFuaWFzKSAqLwotCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1BNKTsKKwkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1BNKTsKIAkJfQogCX0KIAogCWlmIChjLT54ODYgIT0gMHhGKSB7CiAJCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gcDQtY2xvY2ttb2QtY2FwYWJsZSBDUFUuICIKLQkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gQ1BVLiAiCisJCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byAiCisJCQkJIjxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE4MiwxNiArMTkwLDE2IEBACiAJICogdGhyb3R0bGluZyBpcyBhY3RpdmUgb3Igbm90LiAqLwogCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7CiAKLQlpZiAoc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKSA9PSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TSkgeworCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9DUFVfUDRNKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBQZW50aXVtIDQtTSBkZXRlY3RlZC4gIgogCQkgICAgICAgIlRoZSBzcGVlZHN0ZXAtaWNoIG9yIGFjcGkgY3B1ZnJlcSBtb2R1bGVzIG9mZmVyICIKIAkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5IHNjYWxpbmcuICIKIAkJICAgICAgICJZb3Ugc2hvdWxkIHVzZSBlaXRoZXIgb25lIGluc3RlYWQgb2YgcDQtY2xvY2ttb2QsICIKIAkJICAgICAgICJpZiBwb3NzaWJsZS5cbiIpOwotCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNKTsKKwkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUDRNKTsKIAl9CiAKLQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUDREKTsKKwlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QNEQpOwogfQogCiAKQEAgLTIxNywxNCArMjI1LDIwIEBACiAJCWRwcmludGsoImhhcyBlcnJhdGEgLS0gZGlzYWJsaW5nIGxvdyBmcmVxdWVuY2llc1xuIik7CiAJfQogCisJaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX0NQVV9QNEQgJiYKKwkgICAgYy0+eDg2X21vZGVsIDwgMikgeworCQkvKiBzd2l0Y2ggdG8gbWF4aW11bSBmcmVxdWVuY3kgYW5kIG1lYXN1cmUgcmVzdWx0ICovCisJCWNwdWZyZXFfcDRfc2V0ZGMocG9saWN5LT5jcHUsIERDX0RJU0FCTEUpOworCQlyZWNhbGlicmF0ZV9jcHVfa2h6KCk7CisJfQogCS8qIGdldCBtYXggZnJlcXVlbmN5ICovCiAJc3RvY2tfZnJlcSA9IGNwdWZyZXFfcDRfZ2V0X2ZyZXF1ZW5jeShjKTsKIAlpZiAoIXN0b2NrX2ZyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdGFibGUgaW5pdCAqLwotCWZvciAoaT0xOyAocDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKLQkJaWYgKChpPDIpICYmIChoYXNfTjQ0X08xN19lcnJhdGFbcG9saWN5LT5jcHVdKSkKKwlmb3IgKGkgPSAxOyAocDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwkJaWYgKChpIDwgMikgJiYgKGhhc19ONDRfTzE3X2VycmF0YVtwb2xpY3ktPmNwdV0pKQogCQkJcDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CiAJCWVsc2UKIAkJCXA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID0gKHN0b2NrX2ZyZXEgKiBpKS84OwpAQCAtMjMyLDcgKzI0NiwxMCBAQAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHA0Y2xvY2ttb2RfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwOyAvKiBhc3N1bWVkICovCisKKwkvKiB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5IGlzIHNldCB0byBiZSAxIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtCisJICogdHJhbnNpdGlvbiBsYXRlbmN5IG9mIHRoZSBvbmRlbWFuZCBnb3Zlcm5vciAqLworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwMTsKIAlwb2xpY3ktPmN1ciA9IHN0b2NrX2ZyZXE7CiAKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdKTsKQEAgLTI1OCwxMiArMjc1LDEyIEBACiAJCWwgPSBEQ19ESVNBQkxFOwogCiAJaWYgKGwgIT0gRENfRElTQUJMRSkKLQkJcmV0dXJuIChzdG9ja19mcmVxICogbCAvIDgpOworCQlyZXR1cm4gc3RvY2tfZnJlcSAqIGwgLyA4OwogCiAJcmV0dXJuIHN0b2NrX2ZyZXE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwNGNsb2NrbW9kX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpwNGNsb2NrbW9kX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0yOTgsOSArMzE1LDEwIEBACiAKIAlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmcDRjbG9ja21vZF9kcml2ZXIpOwogCWlmICghcmV0KQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUDQvWGVvbihUTSkgQ1BVIE9uLURlbWFuZCBDbG9jayBNb2R1bGF0aW9uIGF2YWlsYWJsZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJQNC9YZW9uKFRNKSBDUFUgT24tRGVtYW5kIENsb2NrICIKKwkJCQkiTW9kdWxhdGlvbiBhdmFpbGFibGVcbiIpOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMzEwLDkgKzMyOCw5IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIlp3YW5lIE13YWlrYW1ibyA8endhbmVAY29tbWZpcmVzZXJ2aWNlcy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJjcHVmcmVxIGRyaXZlciBmb3IgUGVudGl1bShUTSkgNC9YZW9uKFRNKSIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlp3YW5lIE13YWlrYW1ibyA8endhbmVAY29tbWZpcmVzZXJ2aWNlcy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNwdWZyZXEgZHJpdmVyIGZvciBQZW50aXVtKFRNKSA0L1hlb24oVE0pIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIGxhdGVfaW5pdGNhbGwoY3B1ZnJlcV9wNF9pbml0KTsKIG1vZHVsZV9leGl0KGNwdWZyZXFfcDRfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCmluZGV4IGMxYWM1NzkuLmYxMGRlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqICBUaGlzIGZpbGUgd2FzIGJhc2VkIHVwb24gY29kZSBpbiBQb3dlcnR3ZWFrIExpbnV4IChodHRwOi8vcG93ZXJ0d2Vhay5zZi5uZXQpCi0gKiAgKEMpIDIwMDAtMjAwMyAgRGF2ZSBKb25lcywgQXJqYW4gdmFuIGRlIFZlbiwgSmFubmUgUMOkbmvDpGzDpCwgRG9taW5payBCcm9kb3dza2kuCisgKiAgKEMpIDIwMDAtMjAwMyAgRGF2ZSBKb25lcywgQXJqYW4gdmFuIGRlIFZlbiwgSmFubmUgUMOkbmvDpGzDpCwKKyAqICAgICAgICAgICAgICAgICBEb21pbmlrIEJyb2Rvd3NraS4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgogICoKQEAgLTEzLDE0ICsxNCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL21zci5oPgorCiAjZGVmaW5lIFBPV0VSTk9XX0lPUE9SVCAweGZmZjAgICAgICAgICAgLyogaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUsIGFzIGxvbmcKIAkJCQkJICAgYXMgaXQgaXMgdW51c2VkICovCiAKKyNkZWZpbmUgUEZYICJwb3dlcm5vdy1rNjogIgogc3RhdGljIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIGJ1c2ZyZXE7ICAgLyogRlNCLCBpbiAxMCBrSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBtYXhfbXVsdGlwbGllcjsKIApAQCAtNDcsOCArNDksOCBAQAogICovCiBzdGF0aWMgaW50IHBvd2Vybm93X2s2X2dldF9jcHVfbXVsdGlwbGllcih2b2lkKQogewotCXU2NCAgICAgICAgICAgICBpbnZhbHVlID0gMDsKLQl1MzIgICAgICAgICAgICAgbXNydmFsOworCXU2NCBpbnZhbHVlID0gMDsKKwl1MzIgbXNydmFsOwogCiAJbXNydmFsID0gUE9XRVJOT1dfSU9QT1JUICsgMHgxOwogCXdybXNyKE1TUl9LNl9FUE1SLCBtc3J2YWwsIDApOyAvKiBlbmFibGUgdGhlIFBvd2VyTm93IHBvcnQgKi8KQEAgLTY4LDEyICs3MCwxMiBAQAogICovCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rNl9zZXRfc3RhdGUodW5zaWduZWQgaW50IGJlc3RfaSkKIHsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICBvdXR2YWx1ZSA9IDAsIGludmFsdWUgPSAwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIG1zcnZhbDsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAgICBmcmVxczsKKwl1bnNpZ25lZCBsb25nIG91dHZhbHVlID0gMCwgaW52YWx1ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBtc3J2YWw7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAKIAlpZiAoY2xvY2tfcmF0aW9bYmVzdF9pXS5pbmRleCA+IG1heF9tdWx0aXBsaWVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogaW52YWxpZCB0YXJnZXQgZnJlcXVlbmN5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCB0YXJnZXQgZnJlcXVlbmN5XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE5LDcgKzEyMSw4IEBACiAgKiBwb3dlcm5vd19rNl9zZXRwb2xpY3kgLSBzZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKiBAcG9saWN5OiBuZXcgcG9saWN5CiAgKiBAdGFyZ2V0X2ZyZXE6IHRoZSB0YXJnZXQgZnJlcXVlbmN5Ci0gKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeSAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKKyAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5CisgKiAgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogc2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeQogICovCkBAIC0xMjcsOSArMTMwLDEwIEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKLQl1bnNpZ25lZCBpbnQgICAgbmV3c3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmNsb2NrX3JhdGlvWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZjbG9ja19yYXRpb1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcG93ZXJub3dfazZfc2V0X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTE0MCw3ICsxNDQsNyBAQAogCiBzdGF0aWMgaW50IHBvd2Vybm93X2s2X2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBpLCBmOwogCWludCByZXN1bHQ7CiAKIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKQEAgLTE1MiwxMCArMTU2LDExIEBACiAKIAkvKiB0YWJsZSBpbml0ICovCiAJZm9yIChpID0gMDsgKGNsb2NrX3JhdGlvW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewotCQlpZiAoY2xvY2tfcmF0aW9baV0uaW5kZXggPiBtYXhfbXVsdGlwbGllcikKKwkJZiA9IGNsb2NrX3JhdGlvW2ldLmluZGV4OworCQlpZiAoZiA+IG1heF9tdWx0aXBsaWVyKQogCQkJY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOwogCQllbHNlCi0JCQljbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgPSBidXNmcmVxICogY2xvY2tfcmF0aW9baV0uaW5kZXg7CisJCQljbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgPSBidXNmcmVxICogZjsKIAl9CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KQEAgLTE4NSw3ICsxOTAsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93X2s2X2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXJldHVybiBidXNmcmVxICogcG93ZXJub3dfazZfZ2V0X2NwdV9tdWx0aXBsaWVyKCk7CisJdW5zaWduZWQgaW50IHJldDsKKwlyZXQgPSAoYnVzZnJlcSAqIHBvd2Vybm93X2s2X2dldF9jcHVfbXVsdGlwbGllcigpKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcG93ZXJub3dfazZfYXR0cltdID0gewpAQCAtMjIxLDcgKzIyOCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihQT1dFUk5PV19JT1BPUlQsIDE2LCAiUG93ZXJOb3chIikpIHsKLQkJcHJpbnRrKCJjcHVmcmVxOiBQb3dlck5vdyBJT1BPUlQgcmVnaW9uIGFscmVhZHkgdXNlZC5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXJOb3cgSU9QT1JUIHJlZ2lvbiBhbHJlYWR5IHVzZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNDYsNyArMjUzLDggQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuLCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sICIKKwkJIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUG93ZXJOb3chIGRyaXZlciBmb3IgQU1EIEs2LTIrIC8gSzYtMysgcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwppbmRleCAxYjQ0NmQ3Li4zYzI4Y2NkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwpAQCAtNiwxMCArNiwxMiBAQAogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KICAqICBCYXNlZCB1cG9uIGRhdGFzaGVldHMgJiBzYW1wbGUgQ1BVcyBraW5kbHkgcHJvdmlkZWQgYnkgQU1ELgogICoKLSAqIEVycmF0YSA1OiBQcm9jZXNzb3IgbWF5IGZhaWwgdG8gZXhlY3V0ZSBhIEZJRC9WSUQgY2hhbmdlIGluIHByZXNlbmNlIG9mIGludGVycnVwdC4KLSAqIC0gV2UgY2xpL3N0aSBvbiBzdGVwcGluZyBBMCBDUFVzIGFyb3VuZCB0aGUgRklEL1ZJRCB0cmFuc2l0aW9uLgotICogRXJyYXRhIDE1OiBQcm9jZXNzb3JzIHdpdGggaGFsZiBmcmVxdWVuY3kgbXVsdGlwbGllcnMgbWF5IGhhbmcgdXBvbiB3YWtldXAgZnJvbSBkaXNjb25uZWN0LgotICogLSBXZSBkaXNhYmxlIGhhbGYgbXVsdGlwbGllcnMgaWYgQUNQSSBpcyB1c2VkIG9uIEEwIHN0ZXBwaW5nIENQVXMuCisgKiBFcnJhdGEgNToKKyAqICBDUFUgbWF5IGZhaWwgdG8gZXhlY3V0ZSBhIEZJRC9WSUQgY2hhbmdlIGluIHByZXNlbmNlIG9mIGludGVycnVwdC4KKyAqICAtIFdlIGNsaS9zdGkgb24gc3RlcHBpbmcgQTAgQ1BVcyBhcm91bmQgdGhlIEZJRC9WSUQgdHJhbnNpdGlvbi4KKyAqIEVycmF0YSAxNToKKyAqICBDUFUgd2l0aCBoYWxmIGZyZXF1ZW5jeSBtdWx0aXBsaWVycyBtYXkgaGFuZyB1cG9uIHdha2V1cCBmcm9tIGRpc2Nvbm5lY3QuCisgKiAgLSBXZSBkaXNhYmxlIGhhbGYgbXVsdGlwbGllcnMgaWYgQUNQSSBpcyB1c2VkIG9uIEEwIHN0ZXBwaW5nIENQVXMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsMTEgKzIyLDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS90aW1lci5oPgkJLyogTmVlZGVkIGZvciByZWNhbGlicmF0ZV9jcHVfa2h6KCkgKi8KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LN19BQ1BJCkBAIC01OCw5ICs2MCw5IEBACiB1bmlvbiBwb3dlcm5vd19hY3BpX2NvbnRyb2xfdCB7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgbG9uZyBmaWQ6NSwKLQkJdmlkOjUsCi0JCXNndGM6MjAsCi0JCXJlczE6MjsKKwkJCXZpZDo1LAorCQkJc2d0YzoyMCwKKwkJCXJlczE6MjsKIAl9IGJpdHM7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiB9OwpAQCAtOTQsMTQgKzk2LDE1IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FuX3NjYWxlX2J1czsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FuX3NjYWxlX3ZpZDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zcGVlZD0tMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zcGVlZCA9IC0xOwogc3RhdGljIHVuc2lnbmVkIGludCBtYXhpbXVtX3NwZWVkOwogc3RhdGljIHVuc2lnbmVkIGludCBudW1iZXJfc2NhbGVzOwogc3RhdGljIHVuc2lnbmVkIGludCBmc2I7CiBzdGF0aWMgdW5zaWduZWQgaW50IGxhdGVuY3k7CiBzdGF0aWMgY2hhciBoYXZlX2EwOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInBvd2Vybm93LWs3IiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInBvd2Vybm93LWs3IiwgbXNnKQogCiBzdGF0aWMgaW50IGNoZWNrX2ZzYih1bnNpZ25lZCBpbnQgZnNic3BlZWQpCiB7CkBAIC0xMDksNyArMTEyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZiA9IGZzYiAvIDEwMDA7CiAKIAlkZWx0YSA9IChmc2JzcGVlZCA+IGYpID8gZnNic3BlZWQgLSBmIDogZiAtIGZzYnNwZWVkOwotCXJldHVybiAoZGVsdGEgPCA1KTsKKwlyZXR1cm4gZGVsdGEgPCA1OwogfQogCiBzdGF0aWMgaW50IGNoZWNrX3Bvd2Vybm93KHZvaWQpCkBAIC0xMTcsMjQgKzEyMCwyNiBAQAogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1bnNpZ25lZCBpbnQgbWF4ZWksIGVheCwgZWJ4LCBlY3gsIGVkeDsKIAotCWlmICgoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkgfHwgKGMtPng4NiAhPTYpKSB7CisJaWYgKChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKSB8fCAoYy0+eDg2ICE9IDYpKSB7CiAjaWZkZWYgTU9EVUxFCi0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aXRoIEFNRCBLNyBDUFVzXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgd2l0aCAiCisJCQkJIkFNRCBLNyBDUFVzXG4iKTsKICNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBHZXQgbWF4aW11bSBjYXBhYmlsaXRpZXMgKi8KLQltYXhlaSA9IGNwdWlkX2VheCAoMHg4MDAwMDAwMCk7CisJbWF4ZWkgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7CiAJaWYgKG1heGVpIDwgMHg4MDAwMDAwNykgewkvKiBBbnkgcG93ZXJub3cgaW5mbyA/ICovCiAjaWZkZWYgTU9EVUxFCi0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTm8gcG93ZXJub3cgY2FwYWJpbGl0aWVzIGRldGVjdGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIHBvd2Vybm93IGNhcGFiaWxpdGllcyBkZXRlY3RlZFxuIik7CiAjZW5kaWYKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKGMtPng4Nl9tYXNrID09IDApKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiSzcgNjYwW0EwXSBjb3JlIGRldGVjdGVkLCBlbmFibGluZyBlcnJhdGEgd29ya2Fyb3VuZHNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSzcgNjYwW0EwXSBjb3JlIGRldGVjdGVkLCAiCisJCQkJImVuYWJsaW5nIGVycmF0YSB3b3JrYXJvdW5kc1xuIik7CiAJCWhhdmVfYTAgPSAxOwogCX0KIApAQCAtMTQ0LDM3ICsxNDksNDIgQEAKIAlpZiAoIShlZHggJiAoMSA8PCAxIHwgMSA8PCAyKSkpCiAJCXJldHVybiAwOwogCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJQb3dlck5PVyEgVGVjaG5vbG9neSBwcmVzZW50LiBDYW4gc2NhbGU6ICIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJQb3dlck5PVyEgVGVjaG5vbG9neSBwcmVzZW50LiBDYW4gc2NhbGU6ICIpOwogCiAJaWYgKGVkeCAmIDEgPDwgMSkgewotCQlwcmludGsgKCJmcmVxdWVuY3kiKTsKLQkJY2FuX3NjYWxlX2J1cz0xOworCQlwcmludGsoImZyZXF1ZW5jeSIpOworCQljYW5fc2NhbGVfYnVzID0gMTsKIAl9CiAKIAlpZiAoKGVkeCAmICgxIDw8IDEgfCAxIDw8IDIpKSA9PSAweDYpCi0JCXByaW50ayAoIiBhbmQgIik7CisJCXByaW50aygiIGFuZCAiKTsKIAogCWlmIChlZHggJiAxIDw8IDIpIHsKLQkJcHJpbnRrICgidm9sdGFnZSIpOwotCQljYW5fc2NhbGVfdmlkPTE7CisJCXByaW50aygidm9sdGFnZSIpOworCQljYW5fc2NhbGVfdmlkID0gMTsKIAl9CiAKLQlwcmludGsgKCIuXG4iKTsKKwlwcmludGsoIi5cbiIpOwogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2VudHJ5KHVuc2lnbmVkIGludCBlbnRyeSkKK3sKKwlwb3dlcm5vd190YWJsZVtlbnRyeV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworfQogCi1zdGF0aWMgaW50IGdldF9yYW5nZXMgKHVuc2lnbmVkIGNoYXIgKnBzdCkKK3N0YXRpYyBpbnQgZ2V0X3Jhbmdlcyh1bnNpZ25lZCBjaGFyICpwc3QpCiB7CiAJdW5zaWduZWQgaW50IGo7CiAJdW5zaWduZWQgaW50IHNwZWVkOwogCXU4IGZpZCwgdmlkOwogCi0JcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqIChudW1iZXJfc2NhbGVzICsgMSkpLCBHRlBfS0VSTkVMKTsKKwlwb3dlcm5vd190YWJsZSA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICoKKwkJCQkobnVtYmVyX3NjYWxlcyArIDEpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3dlcm5vd190YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGo9MCA7IGogPCBudW1iZXJfc2NhbGVzOyBqKyspIHsKKwlmb3IgKGogPSAwIDsgaiA8IG51bWJlcl9zY2FsZXM7IGorKykgewogCQlmaWQgPSAqcHN0Kys7CiAKIAkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gKGZzYiAqIGZpZF9jb2Rlc1tmaWRdKSAvIDEwOwpAQCAtMTgyLDEwICsxOTIsMTAgQEAKIAogCQlzcGVlZCA9IHBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeTsKIAotCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApPT01KSB7CisJCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCkgPT0gNSkgewogI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzdfQUNQSQogCQkJaWYgKGhhdmVfYTAgPT0gMSkKLQkJCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQkJaW52YWxpZGF0ZV9lbnRyeShqKTsKICNlbmRpZgogCQl9CiAKQEAgLTE5Nyw3ICsyMDcsNyBAQAogCQl2aWQgPSAqcHN0Kys7CiAJCXBvd2Vybm93X3RhYmxlW2pdLmluZGV4IHw9ICh2aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwogCi0JCWRwcmludGsgKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgorCQlkcHJpbnRrKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAogCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkLzEwMDAsIHZpZCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0vMTAwMCwKQEAgLTIxNCwxMyArMjI0LDEzIEBACiB7CiAJdW5pb24gbXNyX2ZpZHZpZGN0bCBmaWR2aWRjdGw7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJaWYgKGZpZHZpZGN0bC5iaXRzLkZJRCAhPSBmaWQpIHsKIAkJZmlkdmlkY3RsLmJpdHMuU0dUQyA9IGxhdGVuY3k7CiAJCWZpZHZpZGN0bC5iaXRzLkZJRCA9IGZpZDsKIAkJZmlkdmlkY3RsLmJpdHMuVklEQyA9IDA7CiAJCWZpZHZpZGN0bC5iaXRzLkZJREMgPSAxOwotCQl3cm1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJCXdybXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCX0KIH0KIApAQCAtMjI5LDE4ICsyMzksMTggQEAKIHsKIAl1bmlvbiBtc3JfZmlkdmlkY3RsIGZpZHZpZGN0bDsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKIAlpZiAoZmlkdmlkY3RsLmJpdHMuVklEICE9IHZpZCkgewogCQlmaWR2aWRjdGwuYml0cy5TR1RDID0gbGF0ZW5jeTsKIAkJZmlkdmlkY3RsLmJpdHMuVklEID0gdmlkOwogCQlmaWR2aWRjdGwuYml0cy5GSURDID0gMDsKIAkJZmlkdmlkY3RsLmJpdHMuVklEQyA9IDE7Ci0JCXdybXNybCAoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKKwkJd3Jtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJfQogfQogCiAKLXN0YXRpYyB2b2lkIGNoYW5nZV9zcGVlZCAodW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHZvaWQgY2hhbmdlX3NwZWVkKHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAl1OCBmaWQsIHZpZDsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKQEAgLTI1Nyw3ICsyNjcsNyBAQAogCiAJZnJlcXMuY3B1ID0gMDsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAljZmlkID0gZmlkdmlkc3RhdHVzLmJpdHMuQ0ZJRDsKIAlmcmVxcy5vbGQgPSBmc2IgKiBmaWRfY29kZXNbY2ZpZF0gLyAxMDsKIApAQCAtMzIxLDEyICszMzEsMTQgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CisJaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQgIT0KKwkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMjsKIAl9CiAKLQlpZiAoYWNwaV9wcm9jZXNzb3JfcGVyZi0+c3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CisJaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPQorCQkJQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnIyOwogCX0KQEAgLTMzOCw3ICszNTAsOCBAQAogCQlnb3RvIGVycjI7CiAJfQogCi0JcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChudW1iZXJfc2NhbGVzICsgMSkgKiAoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkpLCBHRlBfS0VSTkVMKTsKKwlwb3dlcm5vd190YWJsZSA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICoKKwkJCQkobnVtYmVyX3NjYWxlcyArIDEpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3dlcm5vd190YWJsZSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjI7CkBAIC0zNTIsNyArMzY1LDcgQEAKIAkJdW5zaWduZWQgaW50IHNwZWVkLCBzcGVlZF9taHo7CiAKIAkJcGMudmFsID0gKHVuc2lnbmVkIGxvbmcpIHN0YXRlLT5jb250cm9sOwotCQlkcHJpbnRrICgiYWNwaTogIFAlZDogJWQgTUh6ICVkIG1XICVkIHVTIGNvbnRyb2wgJTA4eCBTR1RDICVkXG4iLAorCQlkcHJpbnRrKCJhY3BpOiAgUCVkOiAlZCBNSHogJWQgbVcgJWQgdVMgY29udHJvbCAlMDh4IFNHVEMgJWRcbiIsCiAJCQkgaSwKIAkJCSAodTMyKSBzdGF0ZS0+Y29yZV9mcmVxdWVuY3ksCiAJCQkgKHUzMikgc3RhdGUtPnBvd2VyLApAQCAtMzgxLDEyICszOTQsMTIgQEAKIAkJaWYgKHNwZWVkICUgMTAwMCA+IDApCiAJCQlzcGVlZF9taHorKzsKIAotCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApPT01KSB7CisJCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCkgPT0gNSkgewogCQkJaWYgKGhhdmVfYTAgPT0gMSkKLQkJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQkJaW52YWxpZGF0ZV9lbnRyeShpKTsKIAkJfQogCi0JCWRwcmludGsgKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgorCQlkcHJpbnRrKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAogCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkX21oeiwgdmlkLAogCQkJIG1vYmlsZV92aWRfdGFibGVbdmlkXS8xMDAwLApAQCAtNDIyLDcgKzQzNSw4IEBACiBlcnIwNToKIAlrZnJlZShhY3BpX3Byb2Nlc3Nvcl9wZXJmKTsKIGVycjA6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkFDUEkgcGVyZmxpYiBjYW4gbm90IGJlIHVzZWQgaW4gdGhpcyBwbGF0Zm9ybVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkFDUEkgcGVyZmxpYiBjYW4gbm90IGJlIHVzZWQgb24gIgorCQkJInRoaXMgcGxhdGZvcm1cbiIpOwogCWFjcGlfcHJvY2Vzc29yX3BlcmYgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC00MzUsNyArNDQ5LDE0IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBwb3dlcm5vd19kZWNvZGVfYmlvcyAoaW50IG1heGZpZCwgaW50IHN0YXJ0dmlkKQorc3RhdGljIHZvaWQgcHJpbnRfcHN0X2VudHJ5KHN0cnVjdCBwc3RfcyAqcHN0LCB1bnNpZ25lZCBpbnQgaikKK3sKKwlkcHJpbnRrKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7CisJZHByaW50aygiIGNwdWlkOiAweCV4ICBmc2I6ICVkICBtYXhGSUQ6IDB4JXggIHN0YXJ0dmlkOiAweCV4XG4iLAorCQlwc3QtPmNwdWlkLCBwc3QtPmZzYnNwZWVkLCBwc3QtPm1heGZpZCwgcHN0LT5zdGFydHZpZCk7Cit9CisKK3N0YXRpYyBpbnQgcG93ZXJub3dfZGVjb2RlX2Jpb3MoaW50IG1heGZpZCwgaW50IHN0YXJ0dmlkKQogewogCXN0cnVjdCBwc2JfcyAqcHNiOwogCXN0cnVjdCBwc3RfcyAqcHN0OwpAQCAtNDQ2LDYxICs0NjcsNjcgQEAKIAogCWV0dXBsZSA9IGNwdWlkX2VheCgweDgwMDAwMDAxKTsKIAotCWZvciAoaT0weEMwMDAwOyBpIDwgMHhmZmZmMCA7IGkrPTE2KSB7CisJZm9yIChpID0gMHhDMDAwMDsgaSA8IDB4ZmZmZjAgOyBpICs9IDE2KSB7CiAKIAkJcCA9IHBoeXNfdG9fdmlydChpKTsKIAotCQlpZiAobWVtY21wKHAsICJBTURLN1BOT1chIiwgIDEwKSA9PSAwKXsKLQkJCWRwcmludGsgKCJGb3VuZCBQU0IgaGVhZGVyIGF0ICVwXG4iLCBwKTsKKwkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsICAxMCkgPT0gMCkgeworCQkJZHByaW50aygiRm91bmQgUFNCIGhlYWRlciBhdCAlcFxuIiwgcCk7CiAJCQlwc2IgPSAoc3RydWN0IHBzYl9zICopIHA7Ci0JCQlkcHJpbnRrICgiVGFibGUgdmVyc2lvbjogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOworCQkJZHByaW50aygiVGFibGUgdmVyc2lvbjogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOwogCQkJaWYgKHBzYi0+dGFibGV2ZXJzaW9uICE9IDB4MTIpIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlNvcnJ5LCBvbmx5IHYxLjIgdGFibGVzIHN1cHBvcnRlZCByaWdodCBub3dcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJTb3JyeSwgb25seSB2MS4yIHRhYmxlcyIKKwkJCQkJCSIgc3VwcG9ydGVkIHJpZ2h0IG5vd1xuIik7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9CiAKLQkJCWRwcmludGsgKCJGbGFnczogMHgleFxuIiwgcHNiLT5mbGFncyk7Ci0JCQlpZiAoKHBzYi0+ZmxhZ3MgJiAxKT09MCkgewotCQkJCWRwcmludGsgKCJNb2JpbGUgdm9sdGFnZSByZWd1bGF0b3JcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlkcHJpbnRrICgiRGVza3RvcCB2b2x0YWdlIHJlZ3VsYXRvclxuIik7Ci0JCQl9CisJCQlkcHJpbnRrKCJGbGFnczogMHgleFxuIiwgcHNiLT5mbGFncyk7CisJCQlpZiAoKHBzYi0+ZmxhZ3MgJiAxKSA9PSAwKQorCQkJCWRwcmludGsoIk1vYmlsZSB2b2x0YWdlIHJlZ3VsYXRvclxuIik7CisJCQllbHNlCisJCQkJZHByaW50aygiRGVza3RvcCB2b2x0YWdlIHJlZ3VsYXRvclxuIik7CiAKIAkJCWxhdGVuY3kgPSBwc2ItPnNldHRsaW5ndGltZTsKIAkJCWlmIChsYXRlbmN5IDwgMTAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJJT1Mgc2V0IHNldHRsaW5nIHRpbWUgdG8gJWQgbWljcm9zZWNvbmRzLiAiCi0JCQkJCQkiU2hvdWxkIGJlIGF0IGxlYXN0IDEwMC4gQ29ycmVjdGluZy5cbiIsIGxhdGVuY3kpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJCSU9TIHNldCBzZXR0bGluZyB0aW1lICIKKwkJCQkJCSJ0byAlZCBtaWNyb3NlY29uZHMuICIKKwkJCQkJCSJTaG91bGQgYmUgYXQgbGVhc3QgMTAwLiAiCisJCQkJCQkiQ29ycmVjdGluZy5cbiIsIGxhdGVuY3kpOwogCQkJCWxhdGVuY3kgPSAxMDA7CiAJCQl9Ci0JCQlkcHJpbnRrICgiU2V0dGxpbmcgVGltZTogJWQgbWljcm9zZWNvbmRzLlxuIiwgcHNiLT5zZXR0bGluZ3RpbWUpOwotCQkJZHByaW50ayAoIkhhcyAlZCBQU1QgdGFibGVzLiAoT25seSBkdW1waW5nIG9uZXMgcmVsZXZhbnQgdG8gdGhpcyBDUFUpLlxuIiwgcHNiLT5udW1wc3QpOworCQkJZHByaW50aygiU2V0dGxpbmcgVGltZTogJWQgbWljcm9zZWNvbmRzLlxuIiwKKwkJCQkJcHNiLT5zZXR0bGluZ3RpbWUpOworCQkJZHByaW50aygiSGFzICVkIFBTVCB0YWJsZXMuIChPbmx5IGR1bXBpbmcgb25lcyAiCisJCQkJCSJyZWxldmFudCB0byB0aGlzIENQVSkuXG4iLAorCQkJCQlwc2ItPm51bXBzdCk7CiAKLQkJCXAgKz0gc2l6ZW9mIChzdHJ1Y3QgcHNiX3MpOworCQkJcCArPSBzaXplb2Yoc3RydWN0IHBzYl9zKTsKIAogCQkJcHN0ID0gKHN0cnVjdCBwc3RfcyAqKSBwOwogCi0JCQlmb3IgKGo9MDsgajxwc2ItPm51bXBzdDsgaisrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgcHNiLT5udW1wc3Q7IGorKykgewogCQkJCXBzdCA9IChzdHJ1Y3QgcHN0X3MgKikgcDsKIAkJCQludW1iZXJfc2NhbGVzID0gcHN0LT5udW1wc3RhdGVzOwogCi0JCQkJaWYgKChldHVwbGUgPT0gcHN0LT5jcHVpZCkgJiYgY2hlY2tfZnNiKHBzdC0+ZnNic3BlZWQpICYmCi0JCQkJICAgIChtYXhmaWQ9PXBzdC0+bWF4ZmlkKSAmJiAoc3RhcnR2aWQ9PXBzdC0+c3RhcnR2aWQpKQotCQkJCXsKLQkJCQkJZHByaW50ayAoIlBTVDolZCAoQCVwKVxuIiwgaiwgcHN0KTsKLQkJCQkJZHByaW50ayAoIiBjcHVpZDogMHgleCAgZnNiOiAlZCAgbWF4RklEOiAweCV4ICBzdGFydHZpZDogMHgleFxuIiwKLQkJCQkJCSBwc3QtPmNwdWlkLCBwc3QtPmZzYnNwZWVkLCBwc3QtPm1heGZpZCwgcHN0LT5zdGFydHZpZCk7Ci0KLQkJCQkJcmV0ID0gZ2V0X3JhbmdlcyAoKGNoYXIgKikgcHN0ICsgc2l6ZW9mIChzdHJ1Y3QgcHN0X3MpKTsKKwkJCQlpZiAoKGV0dXBsZSA9PSBwc3QtPmNwdWlkKSAmJgorCQkJCSAgICBjaGVja19mc2IocHN0LT5mc2JzcGVlZCkgJiYKKwkJCQkgICAgKG1heGZpZCA9PSBwc3QtPm1heGZpZCkgJiYKKwkJCQkgICAgKHN0YXJ0dmlkID09IHBzdC0+c3RhcnR2aWQpKSB7CisJCQkJCXByaW50X3BzdF9lbnRyeShwc3QsIGopOworCQkJCQlwID0gKGNoYXIgKilwc3QgKyBzaXplb2Yoc3RydWN0IHBzdF9zKTsKKwkJCQkJcmV0ID0gZ2V0X3JhbmdlcyhwKTsKIAkJCQkJcmV0dXJuIHJldDsKIAkJCQl9IGVsc2UgewogCQkJCQl1bnNpZ25lZCBpbnQgazsKLQkJCQkJcCA9IChjaGFyICopIHBzdCArIHNpemVvZiAoc3RydWN0IHBzdF9zKTsKLQkJCQkJZm9yIChrPTA7IGs8bnVtYmVyX3NjYWxlczsgaysrKQotCQkJCQkJcCs9MjsKKwkJCQkJcCA9IChjaGFyICopcHN0ICsgc2l6ZW9mKHN0cnVjdCBwc3Rfcyk7CisJCQkJCWZvciAoayA9IDA7IGsgPCBudW1iZXJfc2NhbGVzOyBrKyspCisJCQkJCQlwICs9IDI7CiAJCQkJfQogCQkJfQotCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJObyBQU1QgdGFibGVzIG1hdGNoIHRoaXMgY3B1aWQgKDB4JXgpXG4iLCBldHVwbGUpOwotCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUaGlzIGlzIGluZGljYXRpdmUgb2YgYSBicm9rZW4gQklPUy5cbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIFBTVCB0YWJsZXMgbWF0Y2ggdGhpcyBjcHVpZCAiCisJCQkJCSIoMHgleClcbiIsIGV0dXBsZSk7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGhpcyBpcyBpbmRpY2F0aXZlIG9mIGEgYnJva2VuICIKKwkJCQkJIkJJT1MuXG4iKTsKIAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTUxMSwxMyArNTM4LDE0IEBACiB9CiAKIAotc3RhdGljIGludCBwb3dlcm5vd190YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBwb3dlcm5vd190YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGU7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgcG93ZXJub3dfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgcG93ZXJub3dfdGFibGUsIHRhcmdldF9mcmVxLAorCQkJCXJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNoYW5nZV9zcGVlZChuZXdzdGF0ZSk7CkBAIC01MjYsNyArNTU0LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IHBvd2Vybm93X3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHBvd2Vybm93X3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgcG93ZXJub3dfdGFibGUpOwogfQpAQCAtNTY2LDE4ICs1OTQsMjMgQEAKIAogCWlmIChjcHUpCiAJCXJldHVybiAwOwotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAljZmlkID0gZmlkdmlkc3RhdHVzLmJpdHMuQ0ZJRDsKIAotCXJldHVybiAoZnNiICogZmlkX2NvZGVzW2NmaWRdIC8gMTApOworCXJldHVybiBmc2IgKiBmaWRfY29kZXNbY2ZpZF0gLyAxMDsKIH0KIAogCiBzdGF0aWMgaW50IF9faW5pdCBhY2VyX2NwdWZyZXFfcHN0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkKQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGxhcHRvcCB3aXRoIGJyb2tlbiBQU1QgdGFibGVzIGluIEJJT1MgZGV0ZWN0ZWQuXG4iLCBkLT5pZGVudCk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiWW91IG5lZWQgdG8gZG93bmdyYWRlIHRvIDNBMjEgKDA5LzA5LzIwMDIpLCBvciB0cnkgYSBuZXdlciBCSU9TIHRoYW4gM0E3MSAoMDEvMjAvMjAwMylcbiIpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgImNwdWZyZXEgc2NhbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBhcyBhIHJlc3VsdCBvZiB0aGlzLlxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJIiVzIGxhcHRvcCB3aXRoIGJyb2tlbiBQU1QgdGFibGVzIGluIEJJT1MgZGV0ZWN0ZWQuXG4iLAorCQlkLT5pZGVudCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJIllvdSBuZWVkIHRvIGRvd25ncmFkZSB0byAzQTIxICgwOS8wOS8yMDAyKSwgb3IgdHJ5IGEgbmV3ZXIgIgorCQkiQklPUyB0aGFuIDNBNzEgKDAxLzIwLzIwMDMpXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkiY3B1ZnJlcSBzY2FsaW5nIGhhcyBiZWVuIGRpc2FibGVkIGFzIGEgcmVzdWx0IG9mIHRoaXMuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTk4LDcgKzYzMSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19jcHVfaW5pdCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAl1bmlvbiBtc3JfZmlkdmlkc3RhdHVzIGZpZHZpZHN0YXR1czsKIAlpbnQgcmVzdWx0OwpAQCAtNjA2LDcgKzYzOSw3IEBACiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOwogCiAJcmVjYWxpYnJhdGVfY3B1X2toeigpOwogCkBAIC02MTgsMTkgKzY1MSwyMSBAQAogCWRwcmludGsoIkZTQjogJTNkTUh6XG4iLCBmc2IvMTAwMCk7CiAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShwb3dlcm5vd19kbWlfdGFibGUpIHx8IGFjcGlfZm9yY2UpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJQU0IvUFNUIGtub3duIHRvIGJlIGJyb2tlbi4gIFRyeWluZyBBQ1BJIGluc3RlYWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUFNCL1BTVCBrbm93biB0byBiZSBicm9rZW4uICAiCisJCQkJIlRyeWluZyBBQ1BJIGluc3RlYWRcbiIpOwogCQlyZXN1bHQgPSBwb3dlcm5vd19hY3BpX2luaXQoKTsKIAl9IGVsc2UgewotCQlyZXN1bHQgPSBwb3dlcm5vd19kZWNvZGVfYmlvcyhmaWR2aWRzdGF0dXMuYml0cy5NRklELCBmaWR2aWRzdGF0dXMuYml0cy5TVklEKTsKKwkJcmVzdWx0ID0gcG93ZXJub3dfZGVjb2RlX2Jpb3MoZmlkdmlkc3RhdHVzLmJpdHMuTUZJRCwKKwkJCQlmaWR2aWRzdGF0dXMuYml0cy5TVklEKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUcnlpbmcgQUNQSSBwZXJmbGliXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJUcnlpbmcgQUNQSSBwZXJmbGliXG4iKTsKIAkJCW1heGltdW1fc3BlZWQgPSAwOwogCQkJbWluaW11bV9zcGVlZCA9IC0xOwogCQkJbGF0ZW5jeSA9IDA7CiAJCQlyZXN1bHQgPSBwb3dlcm5vd19hY3BpX2luaXQoKTsKIAkJCWlmIChyZXN1bHQpIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkFDUEkgYW5kIGxlZ2FjeSBtZXRob2RzIGZhaWxlZFxuIik7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJTZWUgaHR0cDovL3d3dy5jb2RlbW9ua2V5Lm9yZy51ay9wcm9qZWN0cy9jcHVmcmVxL3Bvd2Vybm93LWs3Lmh0bWxcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJCSJBQ1BJIGFuZCBsZWdhY3kgbWV0aG9kcyBmYWlsZWRcbiIpOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogU0dUQyB1c2UgdGhlIGJ1cyBjbG9jayBhcyB0aW1lciAqLwpAQCAtNjQyLDEwICs2NzcsMTEgQEAKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJNaW5pbXVtIHNwZWVkICVkIE1Iei4gTWF4aW11bSBzcGVlZCAlZCBNSHouXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJNaW5pbXVtIHNwZWVkICVkIE1Iei4gTWF4aW11bSBzcGVlZCAlZCBNSHouXG4iLAogCQkJCW1pbmltdW1fc3BlZWQvMTAwMCwgbWF4aW11bV9zcGVlZC8xMDAwKTsKIAotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBjcHVmcmVxX3NjYWxlKDIwMDAwMDBVTCwgZnNiLCBsYXRlbmN5KTsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0KKwkJY3B1ZnJlcV9zY2FsZSgyMDAwMDAwVUwsIGZzYiwgbGF0ZW5jeSk7CiAKIAlwb2xpY3ktPmN1ciA9IHBvd2Vybm93X2dldCgwKTsKIApAQCAtNjU0LDcgKzY5MCw4IEBACiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBwb3dlcm5vd190YWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfY3B1X2V4aXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KSB7CitzdGF0aWMgaW50IHBvd2Vybm93X2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorewogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKHBvbGljeS0+Y3B1KTsKIAogI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzdfQUNQSQpAQCAtNjY5LDcgKzcwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwb3dlcm5vd190YWJsZV9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcG93ZXJub3dfdGFibGVfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTY4NSwxNSArNzIyLDE1IEBACiAJLmF0dHIJPSBwb3dlcm5vd190YWJsZV9hdHRyLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2luaXQodm9pZCkKIHsKLQlpZiAoY2hlY2tfcG93ZXJub3coKT09MCkKKwlpZiAoY2hlY2tfcG93ZXJub3coKSA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnBvd2Vybm93X2RyaXZlcik7CiB9CiAKIAotc3RhdGljIHZvaWQgX19leGl0IHBvd2Vybm93X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcG93ZXJub3dfZXhpdCh2b2lkKQogewogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJnBvd2Vybm93X2RyaXZlcik7CiB9CkBAIC03MDEsOSArNzM4LDkgQEAKIG1vZHVsZV9wYXJhbShhY3BpX2ZvcmNlLCAgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWNwaV9mb3JjZSwgIkZvcmNlIEFDUEkgdG8gYmUgdXNlZC4iKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJQb3dlcm5vdyBkcml2ZXIgZm9yIEFNRCBLNyBwcm9jZXNzb3JzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2Vybm93IGRyaXZlciBmb3IgQU1EIEs3IHByb2Nlc3NvcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIGxhdGVfaW5pdGNhbGwocG93ZXJub3dfaW5pdCk7CiBtb2R1bGVfZXhpdChwb3dlcm5vd19leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNjQyOGFhMS4uYTE1YWM5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTMzLDE2ICszMywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBmb3IgY3VycmVudCAvIHNldF9jcHVzX2FsbG93ZWQoKSAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+Ci0jZW5kaWYKIAogI2RlZmluZSBQRlggInBvd2Vybm93LWs4OiAiCiAjZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMi4yMC4wMCIKQEAgLTcxLDcgKzY5LDggQEAKIAlyZXR1cm4gMTAwMCAqIGZpbmRfZnJlcV9mcm9tX2ZpZChmaWQpOwogfQogCi1zdGF0aWMgdTMyIGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpkYXRhLCB1MzIgcHN0YXRlKQorc3RhdGljIHUzMiBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZGF0YSwKKwkJdTMyIHBzdGF0ZSkKIHsKIAlyZXR1cm4gZGF0YVtwc3RhdGVdLmZyZXF1ZW5jeTsKIH0KQEAgLTE4Niw3ICsxODUsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlsbyA9IGZpZCB8IChkYXRhLT5jdXJydmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCkgfCBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CisJbG8gPSBmaWQ7CisJbG8gfD0gKGRhdGEtPmN1cnJ2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKTsKKwlsbyB8PSBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CiAKIAlkcHJpbnRrKCJ3cml0aW5nIGZpZCAweCV4LCBsbyAweCV4LCBoaSAweCV4XG4iLAogCQlmaWQsIGxvLCBkYXRhLT5wbGxsb2NrICogUExMX0xPQ0tfQ09OVkVSU0lPTik7CkBAIC0xOTQsNyArMTk1LDkgQEAKIAlkbyB7CiAJCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwogCQlpZiAoaSsrID4gMTAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJIYXJkd2FyZSBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiSGFyZHdhcmUgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gIgorCQkJCSJubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpOwpAQCAtMjAyLDE0ICsyMDUsMTYgQEAKIAljb3VudF9vZmZfaXJ0KGRhdGEpOwogCiAJaWYgKHNhdmV2aWQgIT0gZGF0YS0+Y3VycnZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2aWQgY2hhbmdlIG9uIGZpZCB0cmFucywgb2xkIDB4JXgsIG5ldyAweCV4XG4iLAotCQkgICAgICAgc2F2ZXZpZCwgZGF0YS0+Y3VycnZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJ2aWQgY2hhbmdlIG9uIGZpZCB0cmFucywgb2xkIDB4JXgsIG5ldyAweCV4XG4iLAorCQkJc2F2ZXZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChmaWQgIT0gZGF0YS0+Y3VycmZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmaWQgdHJhbnMgZmFpbGVkLCBmaWQgMHgleCwgY3VyciAweCV4XG4iLCBmaWQsCi0JCSAgICAgICAgZGF0YS0+Y3VycmZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJmaWQgdHJhbnMgZmFpbGVkLCBmaWQgMHgleCwgY3VyciAweCV4XG4iLCBmaWQsCisJCQlkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMjgsNyArMjMzLDkgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JbG8gPSBkYXRhLT5jdXJyZmlkIHwgKHZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpIHwgTVNSX0NfTE9fSU5JVF9GSURfVklEOworCWxvID0gZGF0YS0+Y3VycmZpZDsKKwlsbyB8PSAodmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCk7CisJbG8gfD0gTVNSX0NfTE9fSU5JVF9GSURfVklEOwogCiAJZHByaW50aygid3JpdGluZyB2aWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKIAkJdmlkLCBsbywgU1RPUF9HUkFOVF81TlMpOwpAQCAtMjM2LDIwICsyNDMsMjQgQEAKIAlkbyB7CiAJCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgU1RPUF9HUkFOVF81TlMpOwogCQlpZiAoaSsrID4gMTAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnRlcm5hbCBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gcGVuZGluZyBiaXQgIgorCQkJCQkidmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlICIKKwkJCQkJImNoYW5nZXMgcG9zc2libGVcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IHdoaWxlIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSk7CiAKIAlpZiAoc2F2ZWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZpZCBjaGFuZ2VkIG9uIHZpZCB0cmFucywgb2xkIDB4JXggbmV3IDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggImZpZCBjaGFuZ2VkIG9uIHZpZCB0cmFucywgb2xkICIKKwkJCSIweCV4IG5ldyAweCV4XG4iLAogCQkgICAgICAgc2F2ZWZpZCwgZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmICh2aWQgIT0gZGF0YS0+Y3VycnZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2aWQgdHJhbnMgZmFpbGVkLCB2aWQgMHgleCwgY3VyciAweCV4XG4iLCB2aWQsCi0JCQkJZGF0YS0+Y3VycnZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInZpZCB0cmFucyBmYWlsZWQsIHZpZCAweCV4LCAiCisJCQkJImN1cnIgMHgleFxuIiwKKwkJCQl2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTI2MSw3ICsyNzIsOCBAQAogICogRGVjcmVhc2luZyB2aWQgY29kZXMgcmVwcmVzZW50IGluY3JlYXNpbmcgdm9sdGFnZXM6CiAgKiB2aWQgb2YgMCBpcyAxLjU1MFYsIHZpZCBvZiAweDFlIGlzIDAuODAwViwgdmlkIG9mIFZJRF9PRkYgaXMgb2ZmLgogICovCi1zdGF0aWMgaW50IGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXF2aWQsIHUzMiBzdGVwKQorc3RhdGljIGludCBkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1MzIgcmVxdmlkLCB1MzIgc3RlcCkKIHsKIAlpZiAoKGRhdGEtPmN1cnJ2aWQgLSByZXF2aWQpID4gc3RlcCkKIAkJcmVxdmlkID0gZGF0YS0+Y3VycnZpZCAtIHN0ZXA7CkBAIC0yODMsNyArMjk1LDggQEAKIH0KIAogLyogQ2hhbmdlIE9wdGVyb24vQXRobG9uNjQgZmlkIGFuZCB2aWQsIGJ5IHRoZSAzIHBoYXNlcy4gKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9maWRfdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxZmlkLCB1MzIgcmVxdmlkKQorc3RhdGljIGludCB0cmFuc2l0aW9uX2ZpZF92aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXFmaWQsIHUzMiByZXF2aWQpCiB7CiAJaWYgKGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihkYXRhLCByZXF2aWQpKQogCQlyZXR1cm4gMTsKQEAgLTI5OCw3ICszMTEsOCBAQAogCQlyZXR1cm4gMTsKIAogCWlmICgocmVxZmlkICE9IGRhdGEtPmN1cnJmaWQpIHx8IChyZXF2aWQgIT0gZGF0YS0+Y3VycnZpZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIChjcHUlZCk6IHJlcSAweCV4IDB4JXgsIGN1cnIgMHgleCAweCV4XG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgKGNwdSVkKTogcmVxIDB4JXggMHgleCwgIgorCQkJCSJjdXJyIDB4JXggMHgleFxuIiwKIAkJCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCQkJcmVxZmlkLCByZXF2aWQsIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCQlyZXR1cm4gMTsKQEAgLTMxMSwxMyArMzI1LDE1IEBACiB9CiAKIC8qIFBoYXNlIDEgLSBjb3JlIHZvbHRhZ2UgdHJhbnNpdGlvbiAuLi4gc2V0dXAgdm9sdGFnZSAqLwotc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcHJlX3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXF2aWQpCitzdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcXZpZCkKIHsKIAl1MzIgcnZvc3RlcHMgPSBkYXRhLT5ydm87CiAJdTMyIHNhdmVmaWQgPSBkYXRhLT5jdXJyZmlkOwogCXUzMiBtYXh2aWQsIGxvOwogCi0JZHByaW50aygicGgxIChjcHUlZCk6IHN0YXJ0LCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgcmVxdmlkIDB4JXgsIHJ2byAweCV4XG4iLAorCWRwcmludGsoInBoMSAoY3B1JWQpOiBzdGFydCwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsICIKKwkJInJlcXZpZCAweCV4LCBydm8gMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkLCByZXF2aWQsIGRhdGEtPnJ2byk7CiAKQEAgLTM0MCw3ICszNTYsNyBAQAogCQl9IGVsc2UgewogCQkJZHByaW50aygicGgxOiBjaGFuZ2luZyB2aWQgZm9yIHJ2bywgcmVxIDB4JXhcbiIsCiAJCQkJZGF0YS0+Y3VycnZpZCAtIDEpOwotCQkJaWYgKGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoZGF0YSwgZGF0YS0+Y3VycnZpZCAtIDEsIDEpKQorCQkJaWYgKGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoZGF0YSwgZGF0YS0+Y3VycnZpZC0xLCAxKSkKIAkJCQlyZXR1cm4gMTsKIAkJCXJ2b3N0ZXBzLS07CiAJCX0KQEAgLTM1MCw3ICszNjYsOCBAQAogCQlyZXR1cm4gMTsKIAogCWlmIChzYXZlZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgxIGVyciwgY3VycmZpZCBjaGFuZ2VkIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDEgZXJyLCBjdXJyZmlkIGNoYW5nZWQgMHgleFxuIiwKKwkJCQlkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zNjMsMjAgKzM4MCwyNCBAQAogLyogUGhhc2UgMiAtIGNvcmUgZnJlcXVlbmN5IHRyYW5zaXRpb24gKi8KIHN0YXRpYyBpbnQgY29yZV9mcmVxdWVuY3lfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcWZpZCkKIHsKLQl1MzIgdmNvcmVxZmlkLCB2Y29jdXJyZmlkLCB2Y29maWRkaWZmLCBmaWRfaW50ZXJ2YWwsIHNhdmV2aWQgPSBkYXRhLT5jdXJydmlkOworCXUzMiB2Y29yZXFmaWQsIHZjb2N1cnJmaWQsIHZjb2ZpZGRpZmY7CisJdTMyIGZpZF9pbnRlcnZhbCwgc2F2ZXZpZCA9IGRhdGEtPmN1cnJ2aWQ7CiAKLQlpZiAoKHJlcWZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyOiBpbGxlZ2FsIGxvLWxvIHRyYW5zaXRpb24gMHgleCAweCV4XG4iLAotCQkJcmVxZmlkLCBkYXRhLT5jdXJyZmlkKTsKKwlpZiAoKHJlcWZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmCisJICAgIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyOiBpbGxlZ2FsIGxvLWxvIHRyYW5zaXRpb24gIgorCQkJCSIweCV4IDB4JXhcbiIsIHJlcWZpZCwgZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChkYXRhLT5jdXJyZmlkID09IHJlcWZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDIgbnVsbCBmaWQgdHJhbnNpdGlvbiAweCV4XG4iLCBkYXRhLT5jdXJyZmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyIG51bGwgZmlkIHRyYW5zaXRpb24gMHgleFxuIiwKKwkJCQlkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZHByaW50aygicGgyIChjcHUlZCk6IHN0YXJ0aW5nLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgcmVxZmlkIDB4JXhcbiIsCisJZHByaW50aygicGgyIChjcHUlZCk6IHN0YXJ0aW5nLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgIgorCQkicmVxZmlkIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCwgcmVxZmlkKTsKIApAQCAtMzkwLDE0ICs0MTEsMTQgQEAKIAogCQlpZiAocmVxZmlkID4gZGF0YS0+Y3VycmZpZCkgewogCQkJaWYgKGRhdGEtPmN1cnJmaWQgPiBMT19GSURfVEFCTEVfVE9QKSB7Ci0JCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwgZGF0YS0+Y3VycmZpZCArIGZpZF9pbnRlcnZhbCkpIHsKKwkJCQlpZiAod3JpdGVfbmV3X2ZpZChkYXRhLAorCQkJCQkJZGF0YS0+Y3VycmZpZCArIGZpZF9pbnRlcnZhbCkpCiAJCQkJCXJldHVybiAxOwotCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHdyaXRlX25ld19maWQKLQkJCQkgICAgKGRhdGEsIDIgKyBjb252ZXJ0X2ZpZF90b192Y29fZmlkKGRhdGEtPmN1cnJmaWQpKSkgeworCQkJCSAgICAoZGF0YSwKKwkJCQkgICAgIDIgKyBjb252ZXJ0X2ZpZF90b192Y29fZmlkKGRhdGEtPmN1cnJmaWQpKSkKIAkJCQkJcmV0dXJuIDE7Ci0JCQkJfQogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwgZGF0YS0+Y3VycmZpZCAtIGZpZF9pbnRlcnZhbCkpCkBAIC00MTcsNyArNDM4LDggQEAKIAogCWlmIChkYXRhLT5jdXJyZmlkICE9IHJlcWZpZCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkicGgyOiBtaXNtYXRjaCwgZmFpbGVkIGZpZCB0cmFuc2l0aW9uLCBjdXJyIDB4JXgsIHJlcSAweCV4XG4iLAorCQkJInBoMjogbWlzbWF0Y2gsIGZhaWxlZCBmaWQgdHJhbnNpdGlvbiwgIgorCQkJImN1cnIgMHgleCwgcmVxIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJyZmlkLCByZXFmaWQpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC00MzUsNyArNDU3LDggQEAKIH0KIAogLyogUGhhc2UgMyAtIGNvcmUgdm9sdGFnZSB0cmFuc2l0aW9uIGZsb3cgLi4uIGp1bXAgdG8gdGhlIGZpbmFsIHZpZC4gKi8KLXN0YXRpYyBpbnQgY29yZV92b2x0YWdlX3Bvc3RfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcXZpZCkKK3N0YXRpYyBpbnQgY29yZV92b2x0YWdlX3Bvc3RfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcXZpZCkKIHsKIAl1MzIgc2F2ZWZpZCA9IGRhdGEtPmN1cnJmaWQ7CiAJdTMyIHNhdmVyZXF2aWQgPSByZXF2aWQ7CkBAIC00NTcsNyArNDgwLDggQEAKIAogCQlpZiAoZGF0YS0+Y3VycnZpZCAhPSByZXF2aWQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAicGgzOiBmYWlsZWQgdmlkIHRyYW5zaXRpb25cbiwgcmVxIDB4JXgsIGN1cnIgMHgleCIsCisJCQkgICAgICAgInBoMzogZmFpbGVkIHZpZCB0cmFuc2l0aW9uXG4sICIKKwkJCSAgICAgICAicmVxIDB4JXgsIGN1cnIgMHgleCIsCiAJCQkgICAgICAgcmVxdmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC01MDgsNyArNTMyLDggQEAKIAlpZiAoKGVheCAmIENQVUlEX1hGQU0pID09IENQVUlEX1hGQU1fSzgpIHsKIAkJaWYgKCgoZWF4ICYgQ1BVSURfVVNFX1hGQU1fWE1PRCkgIT0gQ1BVSURfVVNFX1hGQU1fWE1PRCkgfHwKIAkJICAgICgoZWF4ICYgQ1BVSURfWE1PRCkgPiBDUFVJRF9YTU9EX1JFVl9NQVNLKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByb2Nlc3NvciBjcHVpZCAleCBub3Qgc3VwcG9ydGVkXG4iLCBlYXgpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkiUHJvY2Vzc29yIGNwdWlkICV4IG5vdCBzdXBwb3J0ZWRcbiIsIGVheCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC01MjAsOCArNTQ1LDEwIEBACiAJCX0KIAogCQljcHVpZChDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQkJaWYgKChlZHggJiBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgIT0gUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJQb3dlciBzdGF0ZSB0cmFuc2l0aW9ucyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJaWYgKChlZHggJiBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkKKwkJCSE9IFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCSJQb3dlciBzdGF0ZSB0cmFuc2l0aW9ucyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsgLyogbXVzdCBiZSBhIEhXIFBzdGF0ZSBjYXBhYmxlIHByb2Nlc3NvciAqLwpAQCAtNTM5LDcgKzU2Niw4IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX3BzdF90YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IHBzdF9zICpwc3QsIHU4IG1heHZpZCkKK3N0YXRpYyBpbnQgY2hlY2tfcHN0X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgcHN0X3MgKnBzdCwKKwkJdTggbWF4dmlkKQogewogCXVuc2lnbmVkIGludCBqOwogCXU4IGxhc3RmaWQgPSAweGZmOwpAQCAtNTUwLDEyICs1NzgsMTQgQEAKIAkJCSAgICAgICBqLCBwc3Rbal0udmlkKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChwc3Rbal0udmlkIDwgZGF0YS0+cnZvKSB7CS8qIHZpZCArIHJ2byA+PSAwICovCisJCWlmIChwc3Rbal0udmlkIDwgZGF0YS0+cnZvKSB7CisJCQkvKiB2aWQgKyBydm8gPj0gMCAqLwogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIjAgdmlkIGV4Y2VlZGVkIHdpdGggcHN0YXRlIgogCQkJICAgICAgICIgJWRcbiIsIGopOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJaWYgKHBzdFtqXS52aWQgPCBtYXh2aWQgKyBkYXRhLT5ydm8pIHsJLyogdmlkICsgcnZvID49IG1heHZpZCAqLworCQlpZiAocHN0W2pdLnZpZCA8IG1heHZpZCArIGRhdGEtPnJ2bykgeworCQkJLyogdmlkICsgcnZvID49IG1heHZpZCAqLwogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIm1heHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSIKIAkJCSAgICAgICAiICVkXG4iLCBqKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtNTc5LDIzICs2MDksMzEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChsYXN0ZmlkID4gTE9fRklEX1RBQkxFX1RPUCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBGV19CVUcgUEZYICAiZmlyc3QgZmlkIG5vdCBmcm9tIGxvIGZyZXEgdGFibGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEZXX0JVRyBQRlgKKwkJCSJmaXJzdCBmaWQgbm90IGZyb20gbG8gZnJlcSB0YWJsZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9lbnRyeShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGVudHJ5KQoreworCWRhdGEtPnBvd2Vybm93X3RhYmxlW2VudHJ5XS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X2Jhc2ljcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkKIHsKIAlpbnQgajsKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykgewotCQlpZiAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ICE9IENQVUZSRVFfRU5UUllfSU5WQUxJRCkgeworCQlpZiAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ICE9CisJCQkJQ1BVRlJFUV9FTlRSWV9JTlZBTElEKSB7CiAJCQlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgICVkIDogcHN0YXRlICVkICglZCBNSHopXG4iLAotCQkJCQlqLAorCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJCSIgICAlZCA6IHBzdGF0ZSAlZCAoJWQgTUh6KVxuIiwgaiwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXgsCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeS8xMDAwKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgICVkIDogZmlkIDB4JXggKCVkIE1IeiksIHZpZCAweCV4XG4iLAorCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJCSIgICAlZCA6IGZpZCAweCV4ICglZCBNSHopLCB2aWQgMHgleFxuIiwKIAkJCQkJaiwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggJiAweGZmLAogCQkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kvMTAwMCwKQEAgLTYwNCwyMCArNjQyLDI1IEBACiAJCX0KIAl9CiAJaWYgKGRhdGEtPmJhdHBzKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT25seSAlZCBwc3RhdGVzIG9uIGJhdHRlcnlcbiIsIGRhdGEtPmJhdHBzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9ubHkgJWQgcHN0YXRlcyBvbiBiYXR0ZXJ5XG4iLAorCQkJCWRhdGEtPmJhdHBzKTsKIH0KIAotc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgcHN0X3MgKnBzdCwgdTggbWF4dmlkKQorc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgcHN0X3MgKnBzdCwgdTggbWF4dmlkKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGU7CiAJdW5zaWduZWQgaW50IGo7CiAKLQlpZiAoZGF0YS0+YmF0cHMpIHsgICAgLyogdXNlIEFDUEkgc3VwcG9ydCB0byBnZXQgZnVsbCBzcGVlZCBvbiBtYWlucyBwb3dlciAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiT25seSAlZCBwc3RhdGVzIHVzYWJsZSAodXNlIEFDUEkgZHJpdmVyIGZvciBmdWxsIHJhbmdlXG4iLCBkYXRhLT5iYXRwcyk7CisJaWYgKGRhdGEtPmJhdHBzKSB7CisJCS8qIHVzZSBBQ1BJIHN1cHBvcnQgdG8gZ2V0IGZ1bGwgc3BlZWQgb24gbWFpbnMgcG93ZXIgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSJPbmx5ICVkIHBzdGF0ZXMgdXNhYmxlICh1c2UgQUNQSSBkcml2ZXIgZm9yIGZ1bGwgIgorCQkJInJhbmdlXG4iLCBkYXRhLT5iYXRwcyk7CiAJCWRhdGEtPm51bXBzID0gZGF0YS0+YmF0cHM7CiAJfQogCi0JZm9yICggaj0xOyBqPGRhdGEtPm51bXBzOyBqKysgKSB7CisJZm9yIChqID0gMTsgaiA8IGRhdGEtPm51bXBzOyBqKyspIHsKIAkJaWYgKHBzdFtqLTFdLmZpZCA+PSBwc3Rbal0uZmlkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJQU1Qgb3V0IG9mIHNlcXVlbmNlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQwLDkgKzY4MywxMSBAQAogCX0KIAogCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1wczsgaisrKSB7CisJCWludCBmcmVxOwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCA9IHBzdFtqXS5maWQ7IC8qIGxvd2VyIDggYml0cyAqLwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCB8PSAocHN0W2pdLnZpZCA8PCA4KTsgLyogdXBwZXIgOCBiaXRzICovCi0JCXBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQocHN0W2pdLmZpZCk7CisJCWZyZXEgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKHBzdFtqXS5maWQpOworCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSBmcmVxOwogCX0KIAlwb3dlcm5vd190YWJsZVtkYXRhLT5udW1wc10uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7CiAJcG93ZXJub3dfdGFibGVbZGF0YS0+bnVtcHNdLmluZGV4ID0gMDsKQEAgLTY1OCw3ICs3MDMsOCBAQAogCQlwcmludF9iYXNpY3MoZGF0YSk7CiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykKLQkJaWYgKChwc3Rbal0uZmlkPT1kYXRhLT5jdXJyZmlkKSAmJiAocHN0W2pdLnZpZD09ZGF0YS0+Y3VycnZpZCkpCisJCWlmICgocHN0W2pdLmZpZCA9PSBkYXRhLT5jdXJyZmlkKSAmJgorCQkgICAgKHBzdFtqXS52aWQgPT0gZGF0YS0+Y3VycnZpZCkpCiAJCQlyZXR1cm4gMDsKIAogCWRwcmludGsoImN1cnJmaWQvdmlkIGRvIG5vdCBtYXRjaCBQU1QsIGlnbm9yaW5nXG4iKTsKQEAgLTY5OCw3ICs3NDQsOCBAQAogCQl9CiAKIAkJZGF0YS0+dnN0YWJsZSA9IHBzYi0+dnN0YWJsZTsKLQkJZHByaW50aygidm9sdGFnZSBzdGFiaWxpemF0aW9uIHRpbWU6ICVkKCoyMHVzKVxuIiwgZGF0YS0+dnN0YWJsZSk7CisJCWRwcmludGsoInZvbHRhZ2Ugc3RhYmlsaXphdGlvbiB0aW1lOiAlZCgqMjB1cylcbiIsCisJCQkJZGF0YS0+dnN0YWJsZSk7CiAKIAkJZHByaW50aygiZmxhZ3MyOiAweCV4XG4iLCBwc2ItPmZsYWdzMik7CiAJCWRhdGEtPnJ2byA9IHBzYi0+ZmxhZ3MyICYgMzsKQEAgLTcxMywxMSArNzYwLDEyIEBACiAKIAkJZHByaW50aygibnVtcHN0OiAweCV4XG4iLCBwc2ItPm51bV90YWJsZXMpOwogCQljcHN0ID0gcHNiLT5udW1fdGFibGVzOwotCQlpZiAoKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwgKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZlMCkgKXsKKwkJaWYgKChwc2ItPmNwdWlkID09IDB4MDAwMDBmYzApIHx8CisJCSAgICAocHNiLT5jcHVpZCA9PSAweDAwMDAwZmUwKSkgewogCQkJdGhpc2NwdWlkID0gY3B1aWRfZWF4KENQVUlEX1BST0NFU1NPUl9TSUdOQVRVUkUpOwotCQkJaWYgKCh0aGlzY3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwgKHRoaXNjcHVpZCA9PSAweDAwMDAwZmUwKSApIHsKKwkJCWlmICgodGhpc2NwdWlkID09IDB4MDAwMDBmYzApIHx8CisJCQkgICAgKHRoaXNjcHVpZCA9PSAweDAwMDAwZmUwKSkKIAkJCQljcHN0ID0gMTsKLQkJCX0KIAkJfQogCQlpZiAoY3BzdCAhPSAxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAibnVtcHN0IG11c3QgYmUgMVxuIik7CkBAIC03MzIsNyArNzgwLDggQEAKIAogCQlkYXRhLT5udW1wcyA9IHBzYi0+bnVtcHM7CiAJCWRwcmludGsoIm51bXBzdGF0ZXM6IDB4JXhcbiIsIGRhdGEtPm51bXBzKTsKLQkJcmV0dXJuIGZpbGxfcG93ZXJub3dfdGFibGUoZGF0YSwgKHN0cnVjdCBwc3RfcyAqKShwc2IrMSksIG1heHZpZCk7CisJCXJldHVybiBmaWxsX3Bvd2Vybm93X3RhYmxlKGRhdGEsCisJCQkJKHN0cnVjdCBwc3RfcyAqKShwc2IrMSksIG1heHZpZCk7CiAJfQogCS8qCiAJICogSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIGNvbXBsYWluIHRvIEJJT1MgbWFudWZhY3R1cmVyLiBJZgpAQCAtNzQ1LDI4ICs3OTQsMzEgQEAKIAkgKiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbgogCSAqIHd3dy5hbWQuY29tCiAJICovCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiQklPUyBlcnJvciAtIG5vIFBTQiBvciBBQ1BJIF9QU1Mgb2JqZWN0c1xuIik7CisJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIk5vIFBTQiBvciBBQ1BJIF9QU1Mgb2JqZWN0c1xuIik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKLXN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CisJYWNwaV9pbnRlZ2VyIGNvbnRyb2w7CisKIAlpZiAoIWRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCB8fCAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKSkKIAkJcmV0dXJuOwogCi0JZGF0YS0+aXJ0ID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gSVJUX1NISUZUKSAmIElSVF9NQVNLOwotCWRhdGEtPnJ2byA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IFJWT19TSElGVCkgJiBSVk9fTUFTSzsKLQlkYXRhLT5leHR0eXBlID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gRVhUX1RZUEVfU0hJRlQpICYgRVhUX1RZUEVfTUFTSzsKLQlkYXRhLT5wbGxsb2NrID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gUExMX0xfU0hJRlQpICYgUExMX0xfTUFTSzsKLQlkYXRhLT52aWRtdnMgPSAxIDw8ICgoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBNVlNfU0hJRlQpICYgTVZTX01BU0spOwotCWRhdGEtPnZzdGFibGUgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBWU1RfU0hJRlQpICYgVlNUX01BU0s7Ci19CisJY29udHJvbCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2w7IGRhdGEtPmlydCA9IChjb250cm9sCisJCQk+PiBJUlRfU0hJRlQpICYgSVJUX01BU0s7IGRhdGEtPnJ2byA9IChjb250cm9sID4+CisJCQkJUlZPX1NISUZUKSAmIFJWT19NQVNLOyBkYXRhLT5leHR0eXBlID0gKGNvbnRyb2wKKwkJCQkJPj4gRVhUX1RZUEVfU0hJRlQpICYgRVhUX1RZUEVfTUFTSzsKKwlkYXRhLT5wbGxsb2NrID0gKGNvbnRyb2wgPj4gUExMX0xfU0hJRlQpICYgUExMX0xfTUFTSzsgZGF0YS0+dmlkbXZzID0gMQorCQk8PCAoKGNvbnRyb2wgPj4gTVZTX1NISUZUKSAmIE1WU19NQVNLKTsgZGF0YS0+dnN0YWJsZSA9CisJCShjb250cm9sID4+IFZTVF9TSElGVCkgJiBWU1RfTUFTSzsgfQogCiBzdGF0aWMgaW50IHBvd2Vybm93X2s4X2NwdV9pbml0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZTsKIAlpbnQgcmV0X3ZhbCA9IC1FTk9ERVY7CisJYWNwaV9pbnRlZ2VyIHNwYWNlX2lkOwogCiAJaWYgKGFjcGlfcHJvY2Vzc29yX3JlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSkpIHsKIAkJZHByaW50aygicmVnaXN0ZXIgcGVyZm9ybWFuY2UgZmFpbGVkOiBiYWQgQUNQSSBkYXRhXG4iKTsKQEAgLTc3OSwxMSArODMxLDEyIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoKGRhdGEtPmFjcGlfZGF0YS5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB8fAotCQkoZGF0YS0+YWNwaV9kYXRhLnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKKwlzcGFjZV9pZCA9IGRhdGEtPmFjcGlfZGF0YS5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkOworCWlmICgoc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHx8CisJCShzcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKIAkJZHByaW50aygiSW52YWxpZCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKCV4IC0gJXgpXG4iLAogCQkJZGF0YS0+YWNwaV9kYXRhLmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQsCi0JCQlkYXRhLT5hY3BpX2RhdGEuc3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkKTsKKwkJCXNwYWNlX2lkKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIApAQCAtODAyLDcgKzg1NSw4IEBACiAJaWYgKHJldF92YWwpCiAJCWdvdG8gZXJyX291dF9tZW07CiAKLQlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uZnJlcXVlbmN5ID0KKwkJQ1BVRlJFUV9UQUJMRV9FTkQ7CiAJcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5pbmRleCA9IDA7CiAJZGF0YS0+cG93ZXJub3dfdGFibGUgPSBwb3dlcm5vd190YWJsZTsKIApAQCAtODMwLDEzICs4ODQsMTUgQEAKIGVycl9vdXQ6CiAJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpOwogCi0JLyogZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IGluZm9ybXMgdXMgYXQgLT5leGl0KCkgd2hldGhlciBBQ1BJIHdhcyB1c2VkICovCisJLyogZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IGluZm9ybXMgdXMgYXQgLT5leGl0KCkKKwkgKiB3aGV0aGVyIEFDUEkgd2FzIHVzZWQgKi8KIAlkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgPSAwOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQogewogCWludCBpOwogCXUzMiBoaSA9IDAsIGxvID0gMDsKQEAgLTg0OCw4NCArOTA0LDEwMSBAQAogCiAJCWluZGV4ID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sICYgSFdfUFNUQVRFX01BU0s7CiAJCWlmIChpbmRleCA+IGRhdGEtPm1heF9od19wc3RhdGUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgcHN0YXRlICVkIC0gYmFkIHZhbHVlICVkLlxuIiwgaSwgaW5kZXgpOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUGxlYXNlIHJlcG9ydCB0byBCSU9TIG1hbnVmYWN0dXJlclxuIik7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIHBzdGF0ZSAlZCAtICIKKwkJCQkJImJhZCB2YWx1ZSAlZC5cbiIsIGksIGluZGV4KTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlBsZWFzZSByZXBvcnQgdG8gQklPUyAiCisJCQkJCSJtYW51ZmFjdHVyZXJcbiIpOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXJkbXNyKE1TUl9QU1RBVEVfREVGX0JBU0UgKyBpbmRleCwgbG8sIGhpKTsKIAkJaWYgKCEoaGkgJiBIV19QU1RBVEVfVkFMSURfTUFTSykpIHsKIAkJCWRwcmludGsoImludmFsaWQgcHN0YXRlICVkLCBpZ25vcmluZ1xuIiwgaW5kZXgpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggPSBpbmRleDsKIAotCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKKwkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0KKwkJCWRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCiB7CiAJaW50IGk7CiAJaW50IGNudGxvZnJlcSA9IDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50OyBpKyspIHsKIAkJdTMyIGZpZDsKIAkJdTMyIHZpZDsKKwkJdTMyIGZyZXEsIGluZGV4OworCQlhY3BpX2ludGVnZXIgc3RhdHVzLCBjb250cm9sOwogCiAJCWlmIChkYXRhLT5leHR0eXBlKSB7Ci0JCQlmaWQgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnN0YXR1cyAmIEVYVF9GSURfTUFTSzsKLQkJCXZpZCA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnN0YXR1cyA+PiBWSURfU0hJRlQpICYgRVhUX1ZJRF9NQVNLOworCQkJc3RhdHVzID0gIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzOworCQkJZmlkID0gc3RhdHVzICYgRVhUX0ZJRF9NQVNLOworCQkJdmlkID0gKHN0YXR1cyA+PiBWSURfU0hJRlQpICYgRVhUX1ZJRF9NQVNLOwogCQl9IGVsc2UgewotCQkJZmlkID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sICYgRklEX01BU0s7Ci0JCQl2aWQgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sID4+IFZJRF9TSElGVCkgJiBWSURfTUFTSzsKKwkJCWNvbnRyb2wgPSAgZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sOworCQkJZmlkID0gY29udHJvbCAmIEZJRF9NQVNLOworCQkJdmlkID0gKGNvbnRyb2wgPj4gVklEX1NISUZUKSAmIFZJRF9NQVNLOwogCQl9CiAKIAkJZHByaW50aygiICAgJWQgOiBmaWQgMHgleCwgdmlkIDB4JXhcbiIsIGksIGZpZCwgdmlkKTsKIAotCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGZpZDsgLyogbG93ZXIgOCBiaXRzICovCi0JCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4IHw9ICh2aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwotCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7CisJCWluZGV4ID0gZmlkIHwgKHZpZDw8OCk7CisJCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4ID0gaW5kZXg7CisKKwkJZnJlcSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZmlkKTsKKwkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gZnJlcTsKIAogCQkvKiB2ZXJpZnkgZnJlcXVlbmN5IGlzIE9LICovCi0JCWlmICgocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID4gKE1BWF9GUkVRICogMTAwMCkpIHx8Ci0JCQkocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5IDwgKE1JTl9GUkVRICogMTAwMCkpKSB7Ci0JCQlkcHJpbnRrKCJpbnZhbGlkIGZyZXEgJXUga0h6LCBpZ25vcmluZ1xuIiwgcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5KTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJaWYgKChmcmVxID4gKE1BWF9GUkVRICogMTAwMCkpIHx8IChmcmVxIDwgKE1JTl9GUkVRICogMTAwMCkpKSB7CisJCQlkcHJpbnRrKCJpbnZhbGlkIGZyZXEgJXUga0h6LCBpZ25vcmluZ1xuIiwgZnJlcSk7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiB2ZXJpZnkgdm9sdGFnZSBpcyBPSyAtIEJJT1NzIGFyZSB1c2luZyAib2ZmIiB0byBpbmRpY2F0ZSBpbnZhbGlkICovCisJCS8qIHZlcmlmeSB2b2x0YWdlIGlzIE9LIC0KKwkJICogQklPU3MgYXJlIHVzaW5nICJvZmYiIHRvIGluZGljYXRlIGludmFsaWQgKi8KIAkJaWYgKHZpZCA9PSBWSURfT0ZGKSB7CiAJCQlkcHJpbnRrKCJpbnZhbGlkIHZpZCAldSwgaWdub3JpbmdcbiIsIHZpZCk7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiB2ZXJpZnkgb25seSAxIGVudHJ5IGZyb20gdGhlIGxvIGZyZXF1ZW5jeSB0YWJsZSAqLwogCQlpZiAoZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgewogCQkJaWYgKGNudGxvZnJlcSkgewotCQkJCS8qIGlmIGJvdGggZW50cmllcyBhcmUgdGhlIHNhbWUsIGlnbm9yZSB0aGlzIG9uZSAuLi4gKi8KLQkJCQlpZiAoKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmZyZXF1ZW5jeSkgfHwKLQkJCQkgICAgKHBvd2Vybm93X3RhYmxlW2ldLmluZGV4ICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uaW5kZXgpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlRvbyBtYW55IGxvIGZyZXEgdGFibGUgZW50cmllc1xuIik7CisJCQkJLyogaWYgYm90aCBlbnRyaWVzIGFyZSB0aGUgc2FtZSwKKwkJCQkgKiBpZ25vcmUgdGhpcyBvbmUgLi4uICovCisJCQkJaWYgKChmcmVxICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uZnJlcXVlbmN5KSB8fAorCQkJCSAgICAoaW5kZXggIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5pbmRleCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCQkJIlRvbyBtYW55IGxvIGZyZXEgdGFibGUgIgorCQkJCQkJImVudHJpZXNcbiIpOwogCQkJCQlyZXR1cm4gMTsKIAkJCQl9CiAKLQkJCQlkcHJpbnRrKCJkb3VibGUgbG93IGZyZXF1ZW5jeSB0YWJsZSBlbnRyeSwgaWdub3JpbmcgaXQuXG4iKTsKLQkJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQkJZHByaW50aygiZG91YmxlIGxvdyBmcmVxdWVuY3kgdGFibGUgZW50cnksICIKKwkJCQkJCSJpZ25vcmluZyBpdC5cbiIpOworCQkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UKIAkJCQljbnRsb2ZyZXEgPSBpOwogCQl9CiAKLQkJaWYgKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW52YWxpZCBmcmVxIGVudHJpZXMgJXUga0h6IHZzLiAldSBrSHpcbiIsCi0JCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5LAotCQkJCSh1bnNpZ25lZCBpbnQpIChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMCkpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQlpZiAoZnJlcSAhPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW52YWxpZCBmcmVxIGVudHJpZXMgIgorCQkJCSIldSBrSHogdnMuICV1IGtIelxuIiwgZnJlcSwKKwkJCQkodW5zaWduZWQgaW50KQorCQkJCShkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5CisJCQkJICogMTAwMCkpOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQpAQCAtOTM1LDcgKzEwMDgsOCBAQAogc3RhdGljIHZvaWQgcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkKIHsKIAlpZiAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50KQotCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSk7CisJCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwKKwkJCQlkYXRhLT5jcHUpOwogCWZyZWVfY3B1bWFza192YXIoZGF0YS0+YWNwaV9kYXRhLnNoYXJlZF9jcHVfbWFwKTsKIH0KIApAQCAtOTUzLDE1ICsxMDI3LDkgQEAKIAlyZXR1cm4gMTAwMCAqIG1heF9sYXRlbmN5OwogfQogCi0jZWxzZQotc3RhdGljIGludCBwb3dlcm5vd19rOF9jcHVfaW5pdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKSB7IHJldHVybiAtRU5PREVWOyB9Ci1zdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9jcHVfZXhpdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKSB7IHJldHVybjsgfQotc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW50IGdldF90cmFuc2l0aW9uX2xhdGVuY3koc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkgKi8KLQogLyogVGFrZSBhIGZyZXF1ZW5jeSwgYW5kIGlzc3VlIHRoZSBmaWQvdmlkIHRyYW5zaXRpb24gY29tbWFuZCAqLwotc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJdTMyIGZpZCA9IDA7CiAJdTMyIHZpZCA9IDA7CkBAIC05ODksNyArMTA1Nyw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICgoZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgeworCWlmICgoZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYKKwkgICAgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCSAgICAgICAiaWdub3JpbmcgaWxsZWdhbCBjaGFuZ2UgaW4gbG8gZnJlcSB0YWJsZS0leCB0byAweCV4XG4iLAogCQkgICAgICAgZGF0YS0+Y3VycmZpZCwgZmlkKTsKQEAgLTEwMTcsNyArMTA4Niw4IEBACiB9CiAKIC8qIFRha2UgYSBmcmVxdWVuY3ksIGFuZCBpc3N1ZSB0aGUgaGFyZHdhcmUgcHN0YXRlIHRyYW5zaXRpb24gY29tbWFuZCAqLwotc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJdTMyIHBzdGF0ZSA9IDA7CiAJaW50IHJlcywgaTsKQEAgLTEwMjksNyArMTA5OSw4IEBACiAJcHN0YXRlID0gaW5kZXggJiBIV19QU1RBVEVfTUFTSzsKIAlpZiAocHN0YXRlID4gZGF0YS0+bWF4X2h3X3BzdGF0ZSkKIAkJcmV0dXJuIDA7Ci0JZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgZGF0YS0+Y3VycnBzdGF0ZSk7CisJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBzdGF0ZSk7CiAKIAlmb3JfZWFjaF9jcHVfbWFza19ucihpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKQEAgLTEwNDgsNyArMTExOSw4IEBACiB9CiAKIC8qIERyaXZlciBlbnRyeSBwb2ludCB0byBzd2l0Y2ggdG8gdGhlIHRhcmdldCBmcmVxdWVuY3kgKi8KLXN0YXRpYyBpbnQgcG93ZXJub3drOF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wsIHVuc2lnbmVkIHRhcmdmcmVxLCB1bnNpZ25lZCByZWxhdGlvbikKK3N0YXRpYyBpbnQgcG93ZXJub3drOF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wsCisJCXVuc2lnbmVkIHRhcmdmcmVxLCB1bnNpZ25lZCByZWxhdGlvbikKIHsKIAljcHVtYXNrX3Qgb2xkbWFzazsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpOwpAQCAtMTA4NywxNCArMTE1OSwxOCBAQAogCQlkcHJpbnRrKCJ0YXJnOiBjdXJyIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKLQkJaWYgKChjaGVja3ZpZCAhPSBkYXRhLT5jdXJydmlkKSB8fCAoY2hlY2tmaWQgIT0gZGF0YS0+Y3VycmZpZCkpIHsKKwkJaWYgKChjaGVja3ZpZCAhPSBkYXRhLT5jdXJydmlkKSB8fAorCQkgICAgKGNoZWNrZmlkICE9IGRhdGEtPmN1cnJmaWQpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJCSJlcnJvciAtIG91dCBvZiBzeW5jLCBmaXggMHgleCAweCV4LCB2aWQgMHgleCAweCV4XG4iLAotCQkJCWNoZWNrZmlkLCBkYXRhLT5jdXJyZmlkLCBjaGVja3ZpZCwgZGF0YS0+Y3VycnZpZCk7CisJCQkJImVycm9yIC0gb3V0IG9mIHN5bmMsIGZpeCAweCV4IDB4JXgsICIKKwkJCQkidmlkIDB4JXggMHgleFxuIiwKKwkJCQljaGVja2ZpZCwgZGF0YS0+Y3VycmZpZCwKKwkJCQljaGVja3ZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCX0KIAl9CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbCwgZGF0YS0+cG93ZXJub3dfdGFibGUsIHRhcmdmcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbCwgZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQkJdGFyZ2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlnb3RvIGVycl9vdXQ7CiAKIAltdXRleF9sb2NrKCZmaWR2aWRfbXV0ZXgpOwpAQCAtMTExNCw3ICsxMTkwLDggQEAKIAltdXRleF91bmxvY2soJmZpZHZpZF9tdXRleCk7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIG5ld3N0YXRlKTsKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCW5ld3N0YXRlKTsKIAllbHNlCiAJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlyZXQgPSAwOwpAQCAtMTE0MSw2ICsxMjE4LDcgQEAKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YTsKIAljcHVtYXNrX3Qgb2xkbWFzazsKIAlpbnQgcmM7CisJc3RhdGljIGludCBwcmludF9vbmNlOwogCiAJaWYgKCFjcHVfb25saW5lKHBvbC0+Y3B1KSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTYzLDMzICsxMjQxLDMxIEBACiAJCSAqIGFuIFVQIHZlcnNpb24sIGFuZCBpcyBkZXByZWNhdGVkIGJ5IEFNRC4KIAkJICovCiAJCWlmIChudW1fb25saW5lX2NwdXMoKSAhPSAxKSB7Ci0jaWZuZGVmIENPTkZJR19BQ1BJX1BST0NFU1NPUgotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQUNQSSBQcm9jZXNzb3Igc3VwcG9ydCBpcyByZXF1aXJlZCAiCi0JCQkgICAgICAgImZvciBTTVAgc3lzdGVtcyBidXQgaXMgYWJzZW50LiBQbGVhc2UgbG9hZCB0aGUgIgotCQkJICAgICAgICJBQ1BJIFByb2Nlc3NvciBtb2R1bGUgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgIgotCQkJICAgICAgICJkcml2ZXIuXG4iKTsKLSNlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiWW91ciBCSU9TIGRvZXMgbm90IHByb3ZpZGUiCi0JCQkgICAgICAgIiBBQ1BJIF9QU1Mgb2JqZWN0cyBpbiBhIHdheSB0aGF0IExpbnV4ICIKLQkJCSAgICAgICAidW5kZXJzdGFuZHMuIFBsZWFzZSByZXBvcnQgdGhpcyB0byB0aGUgTGludXggIgotCQkJICAgICAgICJBQ1BJIG1haW50YWluZXJzIGFuZCBjb21wbGFpbiB0byB5b3VyIEJJT1MgIgotCQkJICAgICAgICJ2ZW5kb3IuXG4iKTsKLSNlbmRpZgotCQkJa2ZyZWUoZGF0YSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCS8qCisJCQkgKiBSZXBsYWNlIHRoaXMgb25lIHdpdGggcHJpbnRfb25jZSBhcyBzb29uIGFzIHN1Y2ggYQorCQkJICogdGhpbmcgZ2V0cyBpbnRyb2R1Y2VkCisJCQkgKi8KKwkJCWlmICghcHJpbnRfb25jZSkgeworCQkJCVdBUk5fT05DRSgxLCBLRVJOX0VSUiBGV19CVUcgUEZYICJZb3VyIEJJT1MgIgorCQkJCQkiZG9lcyBub3QgcHJvdmlkZSBBQ1BJIF9QU1Mgb2JqZWN0cyAiCisJCQkJCSJpbiBhIHdheSB0aGF0IExpbnV4IHVuZGVyc3RhbmRzLiAiCisJCQkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdGhlIExpbnV4IEFDUEkiCisJCQkJCSIgbWFpbnRhaW5lcnMgYW5kIGNvbXBsYWluIHRvIHlvdXIgIgorCQkJCQkiQklPUyB2ZW5kb3IuXG4iKTsKKwkJCQlwcmludF9vbmNlKys7CisJCQl9CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJaWYgKHBvbC0+Y3B1ICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJObyBBQ1BJIF9QU1Mgb2JqZWN0cyBmb3IgIgogCQkJICAgICAgICJDUFUgb3RoZXIgdGhhbiBDUFUwLiBDb21wbGFpbiB0byB5b3VyIEJJT1MgIgogCQkJICAgICAgICJ2ZW5kb3IuXG4iKTsKLQkJCWtmcmVlKGRhdGEpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJcmMgPSBmaW5kX3BzYl90YWJsZShkYXRhKTsKLQkJaWYgKHJjKSB7Ci0JCQlrZnJlZShkYXRhKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX291dDsKKwogCQkvKiBUYWtlIGEgY3J1ZGUgZ3Vlc3MgaGVyZS4KIAkJICogVGhhdCBndWVzcyB3YXMgaW4gbWljcm9zZWNvbmRzLCBzbyBtdWx0aXBseSB3aXRoIDEwMDAgKi8KIAkJcG9sLT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9ICgKQEAgLTEyMDQsMTYgKzEyODAsMTYgQEAKIAogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gcG9sLT5jcHUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgcG9sLT5jcHUpOwotCQlnb3RvIGVycl9vdXQ7CisJCWdvdG8gZXJyX291dF91bm1hc2s7CiAJfQogCiAJaWYgKHBlbmRpbmdfYml0X3N0dWNrKCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGluZyBpbml0LCBjaGFuZ2UgcGVuZGluZyBiaXQgc2V0XG4iKTsKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCX0KIAogCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX09QVEVST04pCiAJCWZpZHZpZF9tc3JfaW5pdCgpOwpAQCAtMTIyOCw3ICsxMzA0LDggQEAKIAlkYXRhLT5hdmFpbGFibGVfY29yZXMgPSBwb2wtPmNwdXM7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIGRhdGEtPmN1cnJwc3RhdGUpOworCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQkJZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZWxzZQogCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAJZHByaW50aygicG9saWN5IGN1cnJlbnQgZnJlcXVlbmN5ICVkIGtIelxuIiwgcG9sLT5jdXIpOwpAQCAtMTI0NSw3ICsxMzIyLDggQEAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihkYXRhLT5wb3dlcm5vd190YWJsZSwgcG9sLT5jcHUpOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBwc3RhdGUgMHgleFxuIiwgZGF0YS0+Y3VycnBzdGF0ZSk7CisJCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgcHN0YXRlIDB4JXhcbiIsCisJCQkJZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZWxzZQogCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwpAQCAtMTI1NCwxNSArMTMzMiwxNiBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl9vdXQ6CitlcnJfb3V0X3VubWFzazoKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAJcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShkYXRhKTsKIAorZXJyX291dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgcG93ZXJub3drOF9jcHVfZXhpdCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwb3dlcm5vd2s4X2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sKQogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcGVyX2NwdShwb3dlcm5vd19kYXRhLCBwb2wtPmNwdSk7CiAKQEAgLTEyNzksNyArMTM1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG93ZXJub3drOF9nZXQgKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93azhfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CkBAIC0xMzE1LDcgKzEzOTQsNyBAQAogCXJldHVybiBraHo7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwb3dlcm5vd19rOF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcG93ZXJub3dfazhfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTEzNjAsNyArMTQzOSw4IEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmY3B1ZnJlcV9hbWQ2NF9kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJQYXVsIERldnJpZW5kdCA8cGF1bC5kZXZyaWVuZHRAYW1kLmNvbT4gYW5kIE1hcmsgTGFuZ3Nkb3JmIDxtYXJrLmxhbmdzZG9yZkBhbWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiUGF1bCBEZXZyaWVuZHQgPHBhdWwuZGV2cmllbmR0QGFtZC5jb20+IGFuZCAiCisJCSJNYXJrIExhbmdzZG9yZiA8bWFyay5sYW5nc2RvcmZAYW1kLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQU1EIEF0aGxvbiA2NCBhbmQgT3B0ZXJvbiBwcm9jZXNzb3IgZnJlcXVlbmN5IGRyaXZlci4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaAppbmRleCA4ZWNjNzViLi42YzY2OThmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaApAQCAtNDUsMTEgKzQ1LDEwIEBACiAJICogZnJlcXVlbmN5IGlzIGluIGtIeiAqLwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAgKnBvd2Vybm93X3RhYmxlOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCiAJLyogdGhlIGFjcGkgdGFibGUgbmVlZHMgdG8gYmUga2VwdC4gaXQncyBvbmx5IGF2YWlsYWJsZSBpZiBBQ1BJIHdhcwogCSAqIHVzZWQgdG8gZGV0ZXJtaW5lIHZhbGlkIGZyZXF1ZW5jeS92aWQvZmlkIHN0YXRlcyAqLwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSBhY3BpX2RhdGE7Ci0jZW5kaWYKKwogCS8qIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBhc3NvY2lhdGVkIGNvcmVzLCBidXQgbGV0IGNwdWZyZXEKIAkgKiBoYW5kbGUgaG90cGx1ZyBldmVudHMgLSBzbyBqdXN0IHBvaW50IGF0IGNwdWZyZXEgcG9sLT5jcHVzCiAJICogc3RydWN0dXJlICovCkBAIC0yMjIsMTAgKzIyMSw4IEBACiAKIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KTsKIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSk7CiBzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGlubGluZSB2b2lkIGRlZmluZV9zaWJsaW5ncyhpbnQgY3B1LCBjcHVtYXNrX3QgY3B1X3NoYXJlZGNvcmVfbWFza1tdKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKaW5kZXggNDJkYTliZC4uNDM1YTk5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCkBAIC0xOSwxNyArMTksMTkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBNTUNSX0JBU0UJMHhmZmZlZjAwMAkvKiBUaGUgZGVmYXVsdCBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgT0ZGU19DUFVDVEwJMHgyICAgLyogQ1BVIENvbnRyb2wgUmVnaXN0ZXIgKi8KIAogc3RhdGljIF9fdTggX19pb21lbSAqY3B1Y3RsOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNjNTIwX2ZyZXEiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic2M1MjBfZnJlcSIsIG1zZykKKyNkZWZpbmUgUEZYICJzYzUyMF9mcmVxOiAiCiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgc2M1MjBfZnJlcV90YWJsZVtdID0gewogCXsweDAxLAkxMDAwMDB9LApAQCAtNDMsNyArNDUsOCBAQAogCiAJc3dpdGNoIChjbG9ja3NwZWVkX3JlZyAmIDB4MDMpIHsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgInNjNTIwX2ZyZXE6IGVycm9yOiBjcHVjdGwgcmVnaXN0ZXIgaGFzIHVuZXhwZWN0ZWQgdmFsdWUgJTAyeFxuIiwgY2xvY2tzcGVlZF9yZWcpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJvcjogY3B1Y3RsIHJlZ2lzdGVyIGhhcyB1bmV4cGVjdGVkICIKKwkJCQkidmFsdWUgJTAyeFxuIiwgY2xvY2tzcGVlZF9yZWcpOwogCWNhc2UgMHgwMToKIAkJcmV0dXJuIDEwMDAwMDsKIAljYXNlIDB4MDI6CkBAIC01MSw3ICs1NCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUgKHVuc2lnbmVkIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNjNTIwX2ZyZXFfc2V0X2NwdV9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcwlmcmVxczsKQEAgLTc2LDE4ICs3OSwxOSBAQAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogfTsKIAotc3RhdGljIGludCBzYzUyMF9mcmVxX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHNjNTIwX2ZyZXFfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc2M1MjBfZnJlcV90YWJsZVswXSk7CiB9CiAKLXN0YXRpYyBpbnQgc2M1MjBfZnJlcV90YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBzYzUyMF9mcmVxX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCiAJCQkgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewogCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBzYzUyMF9mcmVxX3RhYmxlLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUobmV3c3RhdGUpOwpAQCAtMTE2LDcgKzEyMCw3IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc2M1MjBfZnJlcV90YWJsZSwgcG9saWN5LT5jcHUpOwogCkBAIC0xMzEsNyArMTM1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogc2M1MjBfZnJlcV9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc2M1MjBfZnJlcV9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMTU1LDEzICsxNTksMTMgQEAKIAlpbnQgZXJyOwogCiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwotCWlmKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKLQkJCQljLT54ODYgIT0gNCB8fCBjLT54ODZfbW9kZWwgIT0gOSkgeworCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8CisJICAgIGMtPng4NiAhPSA0IHx8IGMtPng4Nl9tb2RlbCAhPSA5KSB7CiAJCWRwcmludGsoIm5vIEVsYW4gU0M1MjAgcHJvY2Vzc29yIGZvdW5kIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljcHVjdGwgPSBpb3JlbWFwKCh1bnNpZ25lZCBsb25nKShNTUNSX0JBU0UgKyBPRkZTX0NQVUNUTCksIDEpOwotCWlmKCFjcHVjdGwpIHsKKwlpZiAoIWNwdWN0bCkgewogCQlwcmludGsoS0VSTl9FUlIgInNjNTIwX2ZyZXE6IGVycm9yOiBmYWlsZWQgdG8gcmVtYXAgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCmluZGV4IGYwODk5ODIuLmM5ZjFmZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKQEAgLTM5MCwxNCArMzkwLDE0IEBACiAJICAgZW5hYmxlIGl0IGlmIG5vdC4gKi8KIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7CiAKLQlpZiAoIShsICYgKDE8PDE2KSkpIHsKLQkJbCB8PSAoMTw8MTYpOworCWlmICghKGwgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTkhBTkNFRF9TUEVFRFNURVApKSB7CisJCWwgfD0gTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQOwogCQlkcHJpbnRrKCJ0cnlpbmcgdG8gZW5hYmxlIEVuaGFuY2VkIFNwZWVkU3RlcCAoJXgpXG4iLCBsKTsKIAkJd3Jtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwogCiAJCS8qIGNoZWNrIHRvIHNlZSBpZiBpdCBzdHVjayAqLwogCQlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7Ci0JCWlmICghKGwgJiAoMTw8MTYpKSkgeworCQlpZiAoIShsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKIAkJCQkiY291bGRuJ3QgZW5hYmxlIEVuaGFuY2VkIFNwZWVkU3RlcFxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IGRlZGMxZTkuLjhiYmIxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMzksNyArMzksNyBAQAogCiAvKiBzcGVlZHN0ZXBfcHJvY2Vzc29yCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3I7CiAKIHN0YXRpYyB1MzIgcG1iYXNlOwogCkBAIC01NCw3ICs1NCw4IEBACiB9OwogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic3BlZWRzdGVwLWljaCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJzcGVlZHN0ZXAtaWNoIiwgbXNnKQogCiAKIC8qKgpAQCAtNjIsNyArNjMsNyBAQAogICoKICAqIFJldHVybnM6IC1FTk9ERVYgaWYgbm8gcmVnaXN0ZXIgY291bGQgYmUgZm91bmQKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfZmluZF9yZWdpc3RlciAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIodm9pZCkKIHsKIAlpZiAoIXNwZWVkc3RlcF9jaGlwc2V0X2RldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC05MCw3ICs5MSw3IEBACiAgKgogICogICBUcmllcyB0byBjaGFuZ2UgdGhlIFNwZWVkU3RlcCBzdGF0ZS4KICAqLwotc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJdTggcG0yX2JsazsKIAl1OCB2YWx1ZTsKQEAgLTEzMywxMSArMTM0LDExIEBACiAKIAlkcHJpbnRrKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKIAotCWlmIChzdGF0ZSA9PSAodmFsdWUgJiAweDEpKSB7Ci0JCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkXG4iLCAoc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpIC8gMTAwMCkpOwotCX0gZWxzZSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSBmYWlsZWQgLSBJL08gZXJyb3JcbiIpOwotCX0KKwlpZiAoc3RhdGUgPT0gKHZhbHVlICYgMHgxKSkKKwkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWRcbiIsCisJCQlzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKSAvIDEwMDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgZmFpbGVkIC0gSS9PIGVycm9yXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTE0OSw3ICsxNTAsNyBAQAogICogICBUcmllcyB0byBhY3RpdmF0ZSB0aGUgU3BlZWRTdGVwIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMuCiAgKiBSZXR1cm5zIC1FSU5WQUwgb24gYW4gdW5zdXBwb3J0ZWQgY2hpcHNldCwgYW5kIHplcm8gb24gc3VjY2Vzcy4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfYWN0aXZhdGUgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9hY3RpdmF0ZSh2b2lkKQogewogCXUxNiB2YWx1ZSA9IDA7CiAKQEAgLTE3NSwyMCArMTc2LDE4IEBACiAgKiBmdW5jdGlvbnMuIFJldHVybnMgdGhlIFNQRUVEU1RFUF9DSElQU0VUXy1udW1iZXIgZm9yIHRoZSBkZXRlY3RlZAogICogY2hpcHNldCwgb3IgemVybyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCAodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KHZvaWQpCiB7CiAJc3BlZWRzdGVwX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCWlmIChzcGVlZHN0ZXBfY2hpcHNldF9kZXYpCiAJCXJldHVybiA0OyAvKiA0LU0gKi8KIAogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KQogCQlyZXR1cm4gMzsgLyogMy1NICovCkBAIC0xOTYsOCArMTk1LDcgQEAKIAogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMTAsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KSB7CiAJCS8qIHNwZWVkc3RlcC5jIGNhdXNlcyBsb2NrdXBzIG9uIERlbGwgSW5zcGlyb25zIDgwMDAgYW5kCkBAIC0yMDgsOCArMjA2LDcgQEAKIAogCQlob3N0YnJpZGdlICA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X01DLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAKIAkJaWYgKCFob3N0YnJpZGdlKQpAQCAtMjM2LDcgKzIzMyw3IEBACiAKIAljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1cyk7Ci0Jc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CisJc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1c19hbGxvd2VkKTsKIAlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIHNwZWVkKTsKIAlyZXR1cm4gc3BlZWQ7CkBAIC0yNTEsMTEgKzI0OCwxMiBAQAogICogc3BlZWRzdGVwX3RhcmdldCAtIHNldCBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICoJKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCSAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CkBAIC0yNjQsNyArMjYyLDggQEAKIAljcHVtYXNrX3QgY3B1c19hbGxvd2VkOwogCWludCBpOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gX3NwZWVkc3RlcF9nZXQocG9saWN5LT5jcHVzKTsKQEAgLTMwOCw3ICszMDcsNyBAQAogICogTGltaXQgbXVzdCBiZSB3aXRoaW4gc3BlZWRzdGVwX2xvd19mcmVxIGFuZCBzcGVlZHN0ZXBfaGlnaF9mcmVxLCB3aXRoCiAgKiBhdCBsZWFzdCBvbmUgYm9yZGVyIGluY2x1ZGVkLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdKTsKIH0KQEAgLTM0NCw3ICszNDMsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAotCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkgPyAibG93IiA6ICJoaWdoIiwKKwkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCisJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMzUyLDkgKzM1Miw5IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc3BlZWRzdGVwX2ZyZXFzKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2Niw3ICszNjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogc3BlZWRzdGVwX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpzcGVlZHN0ZXBfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTM5NiwxMyArMzk2LDE1IEBACiAJLyogZGV0ZWN0IHByb2Nlc3NvciAqLwogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGNhcGFibGUgcHJvY2Vzc29yIG5vdCBmb3VuZFxuIik7CisJCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgY2FwYWJsZSBwcm9jZXNzb3IgIgorCQkJCSJub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmICghc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAoeWV0KSBhdmFpbGFibGUuXG4iKTsKKwkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAiCisJCQkJIih5ZXQpIGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQzMSw5ICs0MzMsMTEgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzIHdpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCAiCisJCSJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzICIKKwkJIndpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzcGVlZHN0ZXBfaW5pdCk7CiBtb2R1bGVfZXhpdChzcGVlZHN0ZXBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwppbmRleCBjZGFjN2Q2Li4yZTNjNjg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKQEAgLTE2LDEyICsxNiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vdHNjLmg+CiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1saWIiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLWxpYiIsIG1zZykKKworI2RlZmluZSBQRlggInNwZWVkc3RlcC1saWI6ICIKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCi1zdGF0aWMgaW50IHJlbGF4ZWRfY2hlY2sgPSAwOworc3RhdGljIGludCByZWxheGVkX2NoZWNrOwogI2Vsc2UKICNkZWZpbmUgcmVsYXhlZF9jaGVjayAwCiAjZW5kaWYKQEAgLTMwLDE0ICszNCwxNCBAQAogICogICAgICAgICAgICAgICAgICAgR0VUIFBST0NFU1NPUiBDT1JFIFNQRUVEIElOIEtIWiAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtM19nZXRfZnJlcXVlbmN5ICh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQorc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtM19nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCiB7Ci0gICAgICAgIC8qIFNlZSB0YWJsZSAxNCBvZiBwM19kcy5wZGYgYW5kIHRhYmxlIDIyIG9mIDI5ODM0MDAzLnBkZiAqLworCS8qIFNlZSB0YWJsZSAxNCBvZiBwM19kcy5wZGYgYW5kIHRhYmxlIDIyIG9mIDI5ODM0MDAzLnBkZiAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGludCByYXRpbzsJLyogRnJlcXVlbmN5IE11bHRpcGxpZXIgKHgxMCkgKi8KIAkJdTggYml0bWFwOwkJLyogcG93ZXIgb24gY29uZmlndXJhdGlvbiBiaXRzCiAJCQkJCVsyNywgMjU6MjJdIChpbiBNU1IgMHgyYSkgKi8KLQl9IG1zcl9kZWNvZGVfbXVsdCBbXSA9IHsKKwl9IG1zcl9kZWNvZGVfbXVsdFtdID0gewogCQl7IDMwLCAweDAxIH0sCiAJCXsgMzUsIDB4MDUgfSwKIAkJeyA0MCwgMHgwMiB9LApAQCAtNTIsNyArNTYsNyBAQAogCQl7IDg1LCAweDI2IH0sCiAJCXsgOTAsIDB4MjAgfSwKIAkJeyAxMDAsIDB4MmIgfSwKLQkJeyAwLCAweGZmIH0gICAgIC8qIGVycm9yIG9yIHVua25vd24gdmFsdWUgKi8KKwkJeyAwLCAweGZmIH0JLyogZXJyb3Igb3IgdW5rbm93biB2YWx1ZSAqLwogCX07CiAKIAkvKiBQSUlJKC1NKSBGU0Igc2V0dGluZ3M6IHNlZSB0YWJsZSBiMS1iIG9mIDI0NTQ3MjA2LnBkZiAqLwpAQCAtNjAsNyArNjQsNyBAQAogCQl1bnNpZ25lZCBpbnQgdmFsdWU7CS8qIEZyb250IFNpZGUgQnVzIHNwZWVkIGluIE1IeiAqLwogCQl1OCBiaXRtYXA7CQkvKiBwb3dlciBvbiBjb25maWd1cmF0aW9uIGJpdHMgWzE4OiAxOV0KIAkJCQkJKGluIE1TUiAweDJhKSAqLwotCX0gbXNyX2RlY29kZV9mc2IgW10gPSB7CisJfSBtc3JfZGVjb2RlX2ZzYltdID0gewogCQl7ICA2NiwgMHgwIH0sCiAJCXsgMTAwLCAweDIgfSwKIAkJeyAxMzMsIDB4MSB9LApAQCAtODUsNyArODksNyBAQAogCX0KIAogCS8qIGRlY29kZSB0aGUgbXVsdGlwbGllciAqLwotCWlmIChwcm9jZXNzb3IgPT0gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFkpIHsKKwlpZiAocHJvY2Vzc29yID09IFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZKSB7CiAJCWRwcmludGsoIndvcmthcm91bmQgZm9yIGVhcmx5IFBJSUlzXG4iKTsKIAkJbXNyX2xvICY9IDB4MDNjMDAwMDA7CiAJfSBlbHNlCkBAIC05Nyw5ICsxMDEsMTAgQEAKIAkJaisrOwogCX0KIAotCWRwcmludGsoInNwZWVkIGlzICV1XG4iLCAobXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDApKTsKKwlkcHJpbnRrKCJzcGVlZCBpcyAldVxuIiwKKwkJKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKSk7CiAKLQlyZXR1cm4gKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKTsKKwlyZXR1cm4gbXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDA7CiB9CiAKIApAQCAtMTEyLDIwICsxMTcsMjMgQEAKIAogCS8qIHNlZSB0YWJsZSBCLTIgb2YgMjQ1NDcyMTIucGRmICovCiAJaWYgKG1zcl9sbyAmIDB4MDAwNDAwMDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNwZWVkc3RlcC1saWI6IFBNIC0gaW52YWxpZCBGU0I6IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJQTSAtIGludmFsaWQgRlNCOiAweCV4IDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKLQlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwgbXNyX3RtcCwgKG1zcl90bXAgKiAxMDAgKiAxMDAwKSk7CisJZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJCQltc3JfdG1wLCAobXNyX3RtcCAqIDEwMCAqIDEwMDApKTsKIAotCXJldHVybiAobXNyX3RtcCAqIDEwMCAqIDEwMDApOworCXJldHVybiBtc3JfdG1wICogMTAwICogMTAwMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtX2NvcmVfZ2V0X2ZyZXF1ZW5jeSh2b2lkKQogewogCXUzMiBmc2IgPSAwOwogCXUzMiBtc3JfbG8sIG1zcl90bXA7CisJaW50IHJldDsKIAogCXJkbXNyKE1TUl9GU0JfRlJFUSwgbXNyX2xvLCBtc3JfdG1wKTsKIAkvKiBzZWUgdGFibGUgQi0yIG9mIDI1MzY2OTIwLnBkZiAqLwpAQCAtMTUzLDEyICsxNjEsMTUgQEAKIAl9CiAKIAlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfdG1wKTsKLQlkcHJpbnRrKCJQQ09SRSAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLAorCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsIG1zcl90bXAsIChtc3JfdG1wICogZnNiKSk7CisJZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJCQltc3JfdG1wLCAobXNyX3RtcCAqIGZzYikpOwogCi0JcmV0dXJuIChtc3JfdG1wICogZnNiKTsKKwlyZXQgPSAobXNyX3RtcCAqIGZzYik7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xNjcsNiArMTc4LDE2IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CiAJdTMyIG1zcl9sbywgbXNyX2hpLCBtdWx0OwogCXVuc2lnbmVkIGludCBmc2IgPSAwOworCXVuc2lnbmVkIGludCByZXQ7CisJdTggZnNiX2NvZGU7CisKKwkvKiBQZW50aXVtIDQgTW9kZWwgMCBhbmQgMSBkbyBub3QgaGF2ZSB0aGUgQ29yZSBDbG9jayBGcmVxdWVuY3kKKwkgKiB0byBTeXN0ZW0gQnVzIEZyZXF1ZW5jeSBSYXRpbyBGaWVsZCBpbiB0aGUgUHJvY2Vzc29yIEZyZXF1ZW5jeQorCSAqIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgb2YgdGhlIE1TUi4gVGhlcmVmb3JlIHRoZSBjdXJyZW50CisJICogZnJlcXVlbmN5IGNhbm5vdCBiZSBjYWxjdWxhdGVkIGFuZCBoYXMgdG8gYmUgbWVhc3VyZWQuCisJICovCisJaWYgKGMtPng4Nl9tb2RlbCA8IDIpCisJCXJldHVybiBjcHVfa2h6OwogCiAJcmRtc3IoMHgyYywgbXNyX2xvLCBtc3JfaGkpOwogCkBAIC0xNzcsNjIgKzE5OCw2MSBAQAogCSAqIHJldmlzaW9uICMxMiBpbiBUYWJsZSBCLTE6IE1TUnMgaW4gdGhlIFBlbnRpdW0gNCBhbmQKIAkgKiBJbnRlbCBYZW9uIFByb2Nlc3NvcnMsIG9uIHBhZ2UgQi00IGFuZCBCLTUuCiAJICovCi0JaWYgKGMtPng4Nl9tb2RlbCA8IDIpCisJZnNiX2NvZGUgPSAobXNyX2xvID4+IDE2KSAmIDB4NzsKKwlzd2l0Y2ggKGZzYl9jb2RlKSB7CisJY2FzZSAwOgogCQlmc2IgPSAxMDAgKiAxMDAwOwotCWVsc2UgewotCQl1OCBmc2JfY29kZSA9IChtc3JfbG8gPj4gMTYpICYgMHg3OwotCQlzd2l0Y2ggKGZzYl9jb2RlKSB7Ci0JCWNhc2UgMDoKLQkJCWZzYiA9IDEwMCAqIDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZnNiID0gMTMzMzMgKiAxMDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlmc2IgPSAyMDAgKiAxMDAwOwotCQkJYnJlYWs7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmc2IgPSAxMzMzMyAqIDEwOworCQlicmVhazsKKwljYXNlIDI6CisJCWZzYiA9IDIwMCAqIDEwMDA7CisJCWJyZWFrOwogCX0KIAogCWlmICghZnNiKQotCQlwcmludGsoS0VSTl9ERUJVRyAic3BlZWRzdGVwLWxpYjogY291bGRuJ3QgZGV0ZWN0IEZTQiBzcGVlZC4gUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxsaW51eEBicm9kby5kZT5cbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNvdWxkbid0IGRldGVjdCBGU0Igc3BlZWQuICIKKwkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxsaW51eEBicm9kby5kZT5cbiIpOwogCiAJLyogTXVsdGlwbGllci4gKi8KIAltdWx0ID0gbXNyX2xvID4+IDI0OwogCi0JZHByaW50aygiUDQgLSBGU0IgJXUga0h6OyBNdWx0aXBsaWVyICV1OyBTcGVlZCAldSBrSHpcbiIsIGZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKKwlkcHJpbnRrKCJQNCAtIEZTQiAldSBrSHo7IE11bHRpcGxpZXIgJXU7IFNwZWVkICV1IGtIelxuIiwKKwkJCWZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKIAotCXJldHVybiAoZnNiICogbXVsdCk7CisJcmV0ID0gKGZzYiAqIG11bHQpOworCXJldHVybiByZXQ7CiB9CiAKIAotdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQordW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCiB7CiAJc3dpdGNoIChwcm9jZXNzb3IpIHsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkU6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BDT1JFOgogCQlyZXR1cm4gcGVudGl1bV9jb3JlX2dldF9mcmVxdWVuY3koKTsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUE06CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BNOgogCQlyZXR1cm4gcGVudGl1bU1fZ2V0X2ZyZXF1ZW5jeSgpOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQ6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUDREOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QNE06CiAJCXJldHVybiBwZW50aXVtNF9nZXRfZnJlcXVlbmN5KCk7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfVDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk6CiAJCXJldHVybiBwZW50aXVtM19nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSk7CitFWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSk7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIERFVEVDVCBTUEVFRFNURVAtQ0FQQUJMRSBQUk9DRVNTT1IgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKQordW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCXUzMiBlYngsIG1zcl9sbywgbXNyX2hpOwpAQCAtMjYxLDcgKzI4MSw3IEBACiAJCQkgKiBzYW1wbGUgaGFzIGVieCA9IDB4MGYsIHByb2R1Y3Rpb24gaGFzIDB4MGUuCiAJCQkgKi8KIAkJCWlmICgoZWJ4ID09IDB4MGUpIHx8IChlYnggPT0gMHgwZikpCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1A0TTsKIAkJCWJyZWFrOwogCQljYXNlIDc6CiAJCQkvKgpAQCAtMjcyLDcgKzI5Miw3IEBACiAJCQkgKiBzYW1wbGVzIGFyZSBvbmx5IG9mIEItc3RlcHBpbmcuLi4KIAkJCSAqLwogCQkJaWYgKGVieCA9PSAweDBlKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QNE07CiAJCQlicmVhazsKIAkJY2FzZSA5OgogCQkJLyoKQEAgLTI4OCwxMCArMzA4LDEzIEBACiAJCQkgKiBNLVA0LU1zIG1heSBoYXZlIGVpdGhlciBlYng9MHhlIG9yIDB4ZiBbc2VlIGFib3ZlXQogCQkJICogTS1QNC81MzMgaGF2ZSBlaXRoZXIgZWJ4PTB4ZSBvciAweGYuIFsyNTMxNzYwNy5wZGZdCiAJCQkgKiBhbHNvLCBNLVA0TSBIVHMgaGF2ZSBlYng9MHg4LCB0b28KLQkJCSAqIEZvciBub3csIHRoZXkgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIG1vZGVsX2lkIHN0cmluZworCQkJICogRm9yIG5vdywgdGhleSBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbW9kZWxfaWQKKwkJCSAqIHN0cmluZwogCQkJICovCi0JCQlpZiAoKGVieCA9PSAweDBlKSB8fCAoc3Ryc3RyKGMtPng4Nl9tb2RlbF9pZCwiTW9iaWxlIEludGVsKFIpIFBlbnRpdW0oUikgNCIpICE9IE5VTEwpKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCWlmICgoZWJ4ID09IDB4MGUpIHx8CisJCQkJKHN0cnN0cihjLT54ODZfbW9kZWxfaWQsCisJCQkJICAgICJNb2JpbGUgSW50ZWwoUikgUGVudGl1bShSKSA0IikgIT0gTlVMTCkpCisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUDRNOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTMwMSw3ICszMjQsOCBAQAogCiAJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAljYXNlIDB4MEI6IC8qIEludGVsIFBJSUkgW1R1YWxhdGluXSAqLwotCQkvKiBjcHVpZF9lYngoMSkgaXMgMHgwNCBmb3IgZGVza3RvcCBQSUlJLCAweDA2IGZvciBtb2JpbGUgUElJSS1NICovCisJCS8qIGNwdWlkX2VieCgxKSBpcyAweDA0IGZvciBkZXNrdG9wIFBJSUksCisJCSAqIDB4MDYgZm9yIG1vYmlsZSBQSUlJLU0gKi8KIAkJZWJ4ID0gY3B1aWRfZWJ4KDB4MDAwMDAwMDEpOwogCQlkcHJpbnRrKCJlYnggaXMgJXhcbiIsIGVieCk7CiAKQEAgLTMxMywxNCArMzM3LDE1IEBACiAJCS8qIFNvIGZhciBhbGwgUElJSS1NIHByb2Nlc3NvcnMgc3VwcG9ydCBTcGVlZFN0ZXAuIFNlZQogCQkgKiBJbnRlbCdzIDI0NTQwNjQwLnBkZiBvZiBKdW5lIDIwMDMKIAkJICovCi0JCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDsKKwkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9UOwogCiAJY2FzZSAweDA4OiAvKiBJbnRlbCBQSUlJIFtDb3BwZXJtaW5lXSAqLwogCiAJCS8qIGFsbCBtb2JpbGUgUElJSSBDb3BwZXJtaW5lcyBoYXZlIEZTQiAxMDAgTUh6CiAJCSAqID09PiBzb3J0IG91dCBhIGZldyBkZXNrdG9wIFBJSUlzLiAqLwogCQlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfaGkpOwotCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CisJCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OIGlzIDB4JXgsIDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfaGkpOwogCQltc3JfbG8gJj0gMHgwMGMwMDAwOwogCQlpZiAobXNyX2xvICE9IDB4MDA4MDAwMCkKIAkJCXJldHVybiAwOwpAQCAtMzMyLDEzICszNTcsMTUgQEAKIAkJICogYml0IDU2IG9yIDU3IGlzIHNldAogCQkgKi8KIAkJcmRtc3IoTVNSX0lBMzJfUExBVEZPUk1fSUQsIG1zcl9sbywgbXNyX2hpKTsKLQkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwgbXNyX2xvLCBtc3JfaGkpOwotCQlpZiAoKG1zcl9oaSAmICgxPDwxOCkpICYmIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKKwkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwKKwkJCQltc3JfbG8sIG1zcl9oaSk7CisJCWlmICgobXNyX2hpICYgKDE8PDE4KSkgJiYKKwkJICAgIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKIAkJCWlmIChjLT54ODZfbWFzayA9PSAweDAxKSB7CiAJCQkJZHByaW50aygiZWFybHkgUElJSSB2ZXJzaW9uXG4iKTsKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk7CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOwogCQkJfSBlbHNlCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfQzsKIAkJfQogCiAJZGVmYXVsdDoKQEAgLTM2OSw3ICszOTYsNyBAQAogCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgYm90aCBzcGVlZHNcbiIpOwogCiAJLyogZ2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlwcmV2X3NwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CisJcHJldl9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCFwcmV2X3NwZWVkKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMzc5LDcgKzQwNiw3IEBACiAKIAkvKiBzd2l0Y2ggdG8gbG93IHN0YXRlICovCiAJc2V0X3N0YXRlKFNQRUVEU1RFUF9MT1cpOwotCSpsb3dfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kocHJvY2Vzc29yKTsKKwkqbG93X3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoISpsb3dfc3BlZWQpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC0zOTgsNyArNDI1LDcgQEAKIAlpZiAodHJhbnNpdGlvbl9sYXRlbmN5KQogCQlkb19nZXR0aW1lb2ZkYXkoJnR2Mik7CiAKLQkqaGlnaF9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOworCSpoaWdoX3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoISpoaWdoX3NwZWVkKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtNDI2LDkgKzQ1MywxMiBAQAogCQkvKiBjaGVjayBpZiB0aGUgbGF0ZW5jeSBtZWFzdXJlbWVudCBpcyB0b28gaGlnaCBvciB0b28gbG93CiAJCSAqIGFuZCBzZXQgaXQgdG8gYSBzYWZlIHZhbHVlICg1MDB1U2VjKSBpbiB0aGF0IGNhc2UKIAkJICovCi0JCWlmICgqdHJhbnNpdGlvbl9sYXRlbmN5ID4gMTAwMDAwMDAgfHwgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAic3BlZWRzdGVwOiBmcmVxdWVuY3kgdHJhbnNpdGlvbiBtZWFzdXJlZCBzZWVtcyBvdXQgb2YgIgotCQkJCQkicmFuZ2UgKCV1IG5TZWMpLCBmYWxsaW5nIGJhY2sgdG8gYSBzYWZlIG9uZSBvZiAldSBuU2VjLlxuIiwKKwkJaWYgKCp0cmFuc2l0aW9uX2xhdGVuY3kgPiAxMDAwMDAwMCB8fAorCQkgICAgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiZnJlcXVlbmN5IHRyYW5zaXRpb24gIgorCQkJCQkibWVhc3VyZWQgc2VlbXMgb3V0IG9mIHJhbmdlICgldSAiCisJCQkJCSJuU2VjKSwgZmFsbGluZyBiYWNrIHRvIGEgc2FmZSBvbmUgb2YiCisJCQkJCSIldSBuU2VjLlxuIiwKIAkJCQkJKnRyYW5zaXRpb25fbGF0ZW5jeSwgNTAwMDAwKTsKIAkJCSp0cmFuc2l0aW9uX2xhdGVuY3kgPSA1MDAwMDA7CiAJCX0KQEAgLTQzNiwxNSArNDY2LDE2IEBACiAKIG91dDoKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X2ZyZXFzKTsKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCiBtb2R1bGVfcGFyYW0ocmVsYXhlZF9jaGVjaywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmVsYXhlZF9jaGVjaywgIkRvbid0IGRvIGFsbCBjaGVja3MgZm9yIHNwZWVkc3RlcCBjYXBhYmlsaXR5LiIpOworTU9EVUxFX1BBUk1fREVTQyhyZWxheGVkX2NoZWNrLAorCQkiRG9uJ3QgZG8gYWxsIGNoZWNrcyBmb3Igc3BlZWRzdGVwIGNhcGFiaWxpdHkuIik7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxpYnJhcnkgZm9yIEludGVsIFNwZWVkU3RlcCAxIG9yIDIgY3B1ZnJlcSBkcml2ZXJzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGlicmFyeSBmb3IgSW50ZWwgU3BlZWRTdGVwIDEgb3IgMiBjcHVmcmVxIGRyaXZlcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaAppbmRleCBiMTFiY2M2Li4yYjZjMDRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKQEAgLTEyLDE3ICsxMiwxNyBAQAogCiAvKiBwcm9jZXNzb3JzICovCiAKLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFkJMHgwMDAwMDAwMSAgLyogQ29wcGVybWluZSBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DCQkweDAwMDAwMDAyICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1QJCTB4MDAwMDAwMDMgIC8qIFR1YWxhdGluIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNE0JCQkweDAwMDAwMDA0ICAvKiBQNC1NICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWQkweDAwMDAwMDAxICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX0MJCTB4MDAwMDAwMDIgIC8qIENvcHBlcm1pbmUgY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfVAkJMHgwMDAwMDAwMyAgLyogVHVhbGF0aW4gY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1A0TQkJMHgwMDAwMDAwNCAgLyogUDQtTSAgKi8KIAogLyogdGhlIGZvbGxvd2luZyBwcm9jZXNzb3JzIGFyZSBub3Qgc3BlZWRzdGVwLWNhcGFibGUgYW5kIGFyZSBub3QgYXV0by1kZXRlY3RlZAogICogaW4gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKS4gSG93ZXZlciwgdGhlaXIgc3BlZWQgY2FuIGJlIGRldGVjdGVkIHVzaW5nCi0gKiB0aGUgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KCkgY2FsbC4gKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QTQkJCTB4RkZGRkZGMDMgIC8qIFBlbnRpdW0gTSAgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQJCQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCisgKiB0aGUgc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koKSBjYWxsLiAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BNCQkweEZGRkZGRjAzICAvKiBQZW50aXVtIE0gICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUDRECQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCiAKIC8qIHNwZWVkc3RlcCBzdGF0ZXMgLS0gb25seSB0d28gb2YgdGhlbSAqLwogCkBAIC0zNCw3ICszNCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKTsKIAogLyogZGV0ZWN0IHRoZSBjdXJyZW50IHNwZWVkIChpbiBraHopIG9mIHRoZSBwcm9jZXNzb3IgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKTsKIAogCiAvKiBkZXRlY3QgdGhlIGxvdyBhbmQgaGlnaCBzcGVlZHMgb2YgdGhlIHByb2Nlc3Nvci4gVGhlIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYwppbmRleCA4YTg1YzkzLi5iZWZlYTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKQEAgLTMwLDEyICszMCwxMiBAQAogICogSWYgdXNlciBnaXZlcyBpdCwgdGhlc2UgYXJlIHVzZWQuCiAgKgogICovCi1zdGF0aWMgaW50IHNtaV9wb3J0ID0gMDsKLXN0YXRpYyBpbnQgc21pX2NtZCA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHNtaV9zaWcgPSAwOworc3RhdGljIGludCBzbWlfcG9ydDsKK3N0YXRpYyBpbnQgc21pX2NtZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc21pX3NpZzsKIAogLyogaW5mbyBhYm91dCB0aGUgcHJvY2Vzc29yICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yOwogCiAvKgogICogVGhlcmUgYXJlIG9ubHkgdHdvIGZyZXF1ZW5jeSBzdGF0ZXMgZm9yIGVhY2ggcHJvY2Vzc29yLiBWYWx1ZXMKQEAgLTU2LDEyICs1NiwxMyBAQAogICogb2YgRE1BIGFjdGl2aXR5IGdvaW5nIG9uPyAqLwogI2RlZmluZSBTTUlfVFJJRVMgNQogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1zbWkiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLXNtaSIsIG1zZykKIAogLyoqCiAgKiBzcGVlZHN0ZXBfc21pX293bmVyc2hpcAogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX293bmVyc2hpcCh2b2lkKQogewogCXUzMiBjb21tYW5kLCByZXN1bHQsIG1hZ2ljLCBkdW1teTsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX09XTkVSOwpAQCAtNzAsMTYgKzcxLDE4IEBACiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCW1hZ2ljID0gdmlydF90b19waHlzKG1hZ2ljX2RhdGEpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIG9idGFpbiBvd25lcnNoaXAgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJCWNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwXG4iCi0JCTogIj1EIiAocmVzdWx0KSwgIj1hIiAoZHVtbXkpLCAiPWIiIChkdW1teSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLAotCQkJIj1TIiAoZHVtbXkpCisJCTogIj1EIiAocmVzdWx0KSwKKwkJICAiPWEiIChkdW1teSksICI9YiIgKGR1bW15KSwgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksCisJCSAgIj1TIiAoZHVtbXkpCiAJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLAotCQkJIkQiICgwKSwgIlMiIChtYWdpYykKKwkJICAiRCIgKDApLCAiUyIgKG1hZ2ljKQogCQk6ICJtZW1vcnkiCiAJKTsKIApAQCAtOTcsMTAgKzEwMCwxMCBAQAogICogZXZlbiBoYW5ncyBbY2YuIGJ1Z21lLm9zZGwub3JnICMgMTQyMl0gb24gZWFybGllciBzeXN0ZW1zLiBFbXBpcmljYWwgdGVzdGluZwogICogc2hvd3MgdGhhdCB0aGUgbGF0dGVyIG9jY3VycyBpZiAhKGlzdF9pbmZvLmV2ZW50ICYgMHhGRkZGKS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyAodW5zaWduZWQgaW50ICpsb3csIHVuc2lnbmVkIGludCAqaGlnaCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXModW5zaWduZWQgaW50ICpsb3csIHVuc2lnbmVkIGludCAqaGlnaCkKIHsKIAl1MzIgY29tbWFuZCwgcmVzdWx0ID0gMCwgZWRpLCBoaWdoX21oeiwgbG93X21oeiwgZHVtbXk7Ci0JdTMyIHN0YXRlPTA7CisJdTMyIHN0YXRlID0gMDsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX0ZSRVFTOwogCiAJaWYgKCEoaXN0X2luZm8uZXZlbnQgJiAweEZGRkYpKSB7CkBAIC0xMTAsMTcgKzExMywyNSBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicCIKLQkJOiAiPWEiIChyZXN1bHQpLCAiPWIiIChoaWdoX21oeiksICI9YyIgKGxvd19taHopLCAiPWQiIChzdGF0ZSksICI9RCIgKGVkaSksICI9UyIgKGR1bW15KQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKKwkJOiAiPWEiIChyZXN1bHQpLAorCQkgICI9YiIgKGhpZ2hfbWh6KSwKKwkJICAiPWMiIChsb3dfbWh6KSwKKwkJICAiPWQiIChzdGF0ZSksICI9RCIgKGVkaSksICI9UyIgKGR1bW15KQorCQk6ICJhIiAoY29tbWFuZCksCisJCSAgImIiIChmdW5jdGlvbiksCisJCSAgImMiIChzdGF0ZSksCisJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkpOwogCi0JZHByaW50aygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLCByZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKKwlkcHJpbnRrKCJyZXN1bHQgJXgsIGxvd19mcmVxICV1LCBoaWdoX2ZyZXEgJXVcbiIsCisJCQlyZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKIAogCS8qIGFib3J0IGlmIHJlc3VsdHMgYXJlIG9idmlvdXNseSBpbmNvcnJlY3QuLi4gKi8KIAlpZiAoKGhpZ2hfbWh6ICsgbG93X21oeikgPCA2MDApCkBAIC0xMzcsMjYgKzE0OCwzMCBAQAogICogQHN0YXRlOiBwcm9jZXNzb3IgZnJlcXVlbmN5IHN0YXRlIChTUEVFRFNURVBfTE9XIG9yIFNQRUVEU1RFUF9ISUdIKQogICoKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfZ2V0X3N0YXRlICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfZ2V0X3N0YXRlKHZvaWQpCiB7Ci0JdTMyIGZ1bmN0aW9uPUdFVF9TUEVFRFNURVBfU1RBVEU7CisJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9TVEFURTsKIAl1MzIgcmVzdWx0LCBzdGF0ZSwgZWRpLCBjb21tYW5kLCBkdW1teTsKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4ICIKKwkJImF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwXG4iCi0JCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCi0JCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCTogIj1hIiAocmVzdWx0KSwKKwkJICAiPWIiIChzdGF0ZSksICI9RCIgKGVkaSksCisJCSAgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQorCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLAorCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAogCWRwcmludGsoInN0YXRlIGlzICV4LCByZXN1bHQgaXMgJXhcbiIsIHN0YXRlLCByZXN1bHQpOwogCi0JcmV0dXJuIChzdGF0ZSAmIDEpOworCXJldHVybiBzdGF0ZSAmIDE7CiB9CiAKIApAQCAtMTY1LDExICsxODAsMTEgQEAKICAqIEBzdGF0ZTogbmV3IHByb2Nlc3NvciBmcmVxdWVuY3kgc3RhdGUgKFNQRUVEU1RFUF9MT1cgb3IgU1BFRURTVEVQX0hJR0gpCiAgKgogICovCi1zdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlKHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMCwgY29tbWFuZCwgbmV3X3N0YXRlLCBkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBmdW5jdGlvbj1TRVRfU1BFRURTVEVQX1NUQVRFOworCXVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFNFVF9TUEVFRFNURVBfU1RBVEU7CiAJdW5zaWduZWQgaW50IHJldHJ5ID0gMDsKIAogCWlmIChzdGF0ZSA+IDB4MSkKQEAgLTE4MCwxMSArMTk1LDE0IEBACiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSAiCisJCSJ3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCWRvIHsKIAkJaWYgKHJldHJ5KSB7Ci0JCQlkcHJpbnRrKCJyZXRyeSAldSwgcHJldmlvdXMgcmVzdWx0ICV1LCB3YWl0aW5nLi4uXG4iLCByZXRyeSwgcmVzdWx0KTsKKwkJCWRwcmludGsoInJldHJ5ICV1LCBwcmV2aW91cyByZXN1bHQgJXUsIHdhaXRpbmcuLi5cbiIsCisJCQkJCXJldHJ5LCByZXN1bHQpOwogCQkJbWRlbGF5KHJldHJ5ICogNTApOwogCQl9CiAJCXJldHJ5Kys7CkBAIC0xOTIsMjAgKzIxMCwyNiBAQAogCQkJInB1c2ggJSVlYnBcbiIKIAkJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCQkicG9wICUlZWJwIgotCQkJOiAiPWIiIChuZXdfc3RhdGUpLCAiPUQiIChyZXN1bHQpLCAiPWMiIChkdW1teSksICI9YSIgKGR1bW15KSwKLQkJCQkiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQotCQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCQk6ICI9YiIgKG5ld19zdGF0ZSksICI9RCIgKHJlc3VsdCksCisJCQkgICI9YyIgKGR1bW15KSwgIj1hIiAoZHVtbXkpLAorCQkJICAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQorCQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksCisJCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJCQkpOwogCX0gd2hpbGUgKChuZXdfc3RhdGUgIT0gc3RhdGUpICYmIChyZXRyeSA8PSBTTUlfVFJJRVMpKTsKIAogCS8qIGVuYWJsZSBJUlFzICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JaWYgKG5ld19zdGF0ZSA9PSBzdGF0ZSkgewotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZCBhZnRlciAldSB0cmllcyB3aXRoIHJlc3VsdCAldVxuIiwgKHNwZWVkc3RlcF9mcmVxc1tuZXdfc3RhdGVdLmZyZXF1ZW5jeSAvIDEwMDApLCByZXRyeSwgcmVzdWx0KTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSB0byBzdGF0ZSAldSBmYWlsZWQgd2l0aCBuZXdfc3RhdGUgJXUgYW5kIHJlc3VsdCAldVxuIiwgc3RhdGUsIG5ld19zdGF0ZSwgcmVzdWx0KTsKLQl9CisJaWYgKG5ld19zdGF0ZSA9PSBzdGF0ZSkKKwkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWQgYWZ0ZXIgJXUgdHJpZXMgIgorCQkJIndpdGggcmVzdWx0ICV1XG4iLAorCQkJKHNwZWVkc3RlcF9mcmVxc1tuZXdfc3RhdGVdLmZyZXF1ZW5jeSAvIDEwMDApLAorCQkJcmV0cnksIHJlc3VsdCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSB0byBzdGF0ZSAldSAiCisJCQkiZmFpbGVkIHdpdGggbmV3X3N0YXRlICV1IGFuZCByZXN1bHQgJXVcbiIsCisJCQlzdGF0ZSwgbmV3X3N0YXRlLCByZXN1bHQpOwogCiAJcmV0dXJuOwogfQpAQCAtMjE5LDEzICsyNDMsMTQgQEAKICAqCiAgKiBTZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5L2ZyZXEuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQl1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gc3BlZWRzdGVwX2ZyZXFzW3NwZWVkc3RlcF9nZXRfc3RhdGUoKV0uZnJlcXVlbmN5OwpAQCAtMjUwLDcgKzI3NSw3IEBACiAgKiBMaW1pdCBtdXN0IGJlIHdpdGhpbiBzcGVlZHN0ZXBfbG93X2ZyZXEgYW5kIHNwZWVkc3RlcF9oaWdoX2ZyZXEsIHdpdGgKICAqIGF0IGxlYXN0IG9uZSBib3JkZXIgaW5jbHVkZWQuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0pOwogfQpAQCAtMjU5LDcgKzI4NCw4IEBACiBzdGF0aWMgaW50IHNwZWVkc3RlcF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGludCBzcGVlZCxzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgc3BlZWQsIHN0YXRlOworCXVuc2lnbmVkIGludCAqbG93LCAqaGlnaDsKIAogCS8qIGNhcGFiaWxpdHkgY2hlY2sgKi8KIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKQEAgLTI3MiwxOSArMjk4LDIzIEBACiAJfQogCiAJLyogZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY3kgKi8KLQlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcygmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3kpOworCWxvdyA9ICZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5OworCWhpZ2ggPSAmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3k7CisKKwlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyhsb3csIGhpZ2gpOwogCWlmIChyZXN1bHQpIHsKLQkJLyogZmFsbCBiYWNrIHRvIHNwZWVkc3RlcF9saWIuYyBkZWN0aW9uIG1lY2hhbmlzbTogdHJ5IGJvdGggc3RhdGVzIG91dCAqLwotCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyBieSBTTUkgY2FsbC5cbiIpOworCQkvKiBmYWxsIGJhY2sgdG8gc3BlZWRzdGVwX2xpYi5jIGRlY3Rpb24gbWVjaGFuaXNtOgorCQkgKiB0cnkgYm90aCBzdGF0ZXMgb3V0ICovCisJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jaWVzICIKKwkJCQkiYnkgU01JIGNhbGwuXG4iKTsKIAkJcmVzdWx0ID0gc3BlZWRzdGVwX2dldF9mcmVxcyhzcGVlZHN0ZXBfcHJvY2Vzc29yLAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5LAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0hJR0hdLmZyZXF1ZW5jeSwKKwkJCQlsb3csIGhpZ2gsCiAJCQkJTlVMTCwKIAkJCQkmc3BlZWRzdGVwX3NldF9zdGF0ZSk7CiAKIAkJaWYgKHJlc3VsdCkgewotCQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyAtLSBhYm9ydGluZy5cbiIpOworCQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyIKKwkJCQkJIiAtLSBhYm9ydGluZy5cbiIpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfSBlbHNlCiAJCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIHdvcmtlZC5cbiIpOwpAQCAtMjk1LDcgKzMyNSw4IEBACiAJc3BlZWQgPSBzcGVlZHN0ZXBfZnJlcXNbc3RhdGVdLmZyZXF1ZW5jeTsKIAogCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAotCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkgPyAibG93IiA6ICJoaWdoIiwKKwkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCisJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMzA0LDcgKzMzNSw3IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc3BlZWRzdGVwX2ZyZXFzKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzcGVlZHN0ZXBfZnJlcXMsIHBvbGljeS0+Y3B1KTsKIApAQCAtMzIxLDcgKzM1Miw3IEBACiB7CiAJaWYgKGNwdSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKKwlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CiB9CiAKIApAQCAtMzM1LDcgKzM2Niw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNwZWVkc3RlcF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc3BlZWRzdGVwX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zNjQsMjEgKzM5NSwyMyBAQAogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCiAJc3dpdGNoIChzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfVDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOwogCX0KIAogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrICgiTm8gc3VwcG9ydGVkIEludGVsIENQVSBkZXRlY3RlZC5cbiIpOworCQlkcHJpbnRrKCJObyBzdXBwb3J0ZWQgSW50ZWwgQ1BVIGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsIGV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCi0JCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwgaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOworCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsICIKKwkJImV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCisJCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwKKwkJaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOwogCiAJLyogRXJyb3IgaWYgbm8gSVNULVNNSSBCSU9TIG9yIG5vIFBBUk0KIAkJIHNpZz0gJ0lTR0UnIGFrYSAnSW50ZWwgU3BlZWRzdGVwIEdhdGUgRScgKi8KQEAgLTQxNiwxNyArNDQ5LDIwIEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmc3BlZWRzdGVwX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9wYXJhbShzbWlfcG9ydCwgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0oc21pX2NtZCwgICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHNtaV9zaWcsICB1aW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfcG9ydCwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfY21kLCAgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfc2lnLCB1aW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhzbWlfcG9ydCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBwb3J0IHdpdGggdGhpcyB2YWx1ZSAtLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweGIyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHNtaV9jbWQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgY29tbWFuZCB3aXRoIHRoaXMgdmFsdWUgLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHg4MiIpOwotTU9EVUxFX1BBUk1fREVTQyhzbWlfc2lnLCAiU2V0IHRvIDEgdG8gZmFrZSB0aGUgSVNUIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSBTTUkgaW50ZXJmYWNlLiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfcG9ydCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBwb3J0IHdpdGggdGhpcyB2YWx1ZSAiCisJCSItLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweGIyIik7CitNT0RVTEVfUEFSTV9ERVNDKHNtaV9jbWQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgY29tbWFuZCB3aXRoIHRoaXMgdmFsdWUgIgorCQkiLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHg4MiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfc2lnLCAiU2V0IHRvIDEgdG8gZmFrZSB0aGUgSVNUIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSAiCisJCSJTTUkgaW50ZXJmYWNlLiIpOwogCi1NT0RVTEVfQVVUSE9SICgiSGlyb3NoaSBNaXVyYSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiU3BlZWRzdGVwIGRyaXZlciBmb3IgSVNUIGFwcGxldCBTTUkgaW50ZXJmYWNlLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgTWl1cmEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3BlZWRzdGVwIGRyaXZlciBmb3IgSVNUIGFwcGxldCBTTUkgaW50ZXJmYWNlLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzcGVlZHN0ZXBfaW5pdCk7CiBtb2R1bGVfZXhpdChzcGVlZHN0ZXBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggMjRmZjI2YS4uMWE4OWEyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKQEAgLTI0LDcgKzI1LDYgQEAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZWFybHlfaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCkBAIC01NiwxMyArNTYsMzAgQEAKIAogCS8qCiAJICogYy0+eDg2X3Bvd2VyIGlzIDgwMDBfMDAwNyBlZHguIEJpdCA4IGlzIFRTQyBydW5zIGF0IGNvbnN0YW50IHJhdGUKLQkgKiB3aXRoIFAvVCBzdGF0ZXMgYW5kIGRvZXMgbm90IHN0b3AgaW4gZGVlcCBDLXN0YXRlcworCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzLgorCSAqCisJICogSXQgaXMgYWxzbyByZWxpYWJsZSBhY3Jvc3MgY29yZXMgYW5kIHNvY2tldHMuIChidXQgbm90IGFjcm9zcworCSAqIGNhYmluZXRzIC0gd2UgdHVybiBpdCBvZmYgaW4gdGhhdCBjYXNlIGV4cGxpY2l0bHkuKQogCSAqLwogCWlmIChjLT54ODZfcG93ZXIgJiAoMSA8PCA4KSkgewogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9OT05TVE9QX1RTQyk7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CisJCXNjaGVkX2Nsb2NrX3N0YWJsZSA9IDE7CiAJfQogCisJLyoKKwkgKiBUaGVyZSBpcyBhIGtub3duIGVycmF0dW0gb24gUGVudGl1bSBJSUkgYW5kIENvcmUgU29sbworCSAqIGFuZCBDb3JlIER1byBDUFVzLgorCSAqICIgUGFnZSB3aXRoIFBBVCBzZXQgdG8gV0Mgd2hpbGUgYXNzb2NpYXRlZCBNVFJSIGlzIFVDCisJICogICBtYXkgY29uc29saWRhdGUgdG8gVUMgIgorCSAqIEJlY2F1c2Ugb2YgdGhpcyBlcnJhdHVtLCBpdCBpcyBiZXR0ZXIgdG8gc3RpY2sgd2l0aAorCSAqIHNldHRpbmcgV0MgaW4gTVRSUiByYXRoZXIgdGhhbiB1c2luZyBQQVQgb24gdGhlc2UgQ1BVcy4KKwkgKgorCSAqIEVuYWJsZSBQQVQgV0Mgb25seSBvbiBQNCwgQ29yZSAyIG9yIGxhdGVyIENQVXMuCisJICovCisJaWYgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA8IDE1KQorCQljbGVhcl9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BBVCk7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC0xMzUsMTAgKzE1MiwxMCBAQAogCSAqLwogCWlmICgoYy0+eDg2ID09IDE1KSAmJiAoYy0+eDg2X21vZGVsID09IDEpICYmIChjLT54ODZfbWFzayA9PSAxKSkgewogCQlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbG8sIGhpKTsKLQkJaWYgKChsbyAmICgxPDw5KSkgPT0gMCkgeworCQlpZiAoKGxvICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUFJFRkVUQ0hfRElTQUJMRSkgPT0gMCkgewogCQkJcHJpbnRrIChLRVJOX0lORk8gIkNQVTogQzAgc3RlcHBpbmcgUDQgWGVvbiBkZXRlY3RlZC5cbiIpOwogCQkJcHJpbnRrIChLRVJOX0lORk8gIkNQVTogRGlzYWJsaW5nIGhhcmR3YXJlIHByZWZldGNoaW5nIChFcnJhdGEgMDM3KVxuIik7Ci0JCQlsbyB8PSAoMTw8OSk7CS8qIERpc2FibGUgaHcgcHJlZmV0Y2hpbmcgKi8KKwkJCWxvIHw9IE1TUl9JQTMyX01JU0NfRU5BQkxFX1BSRUZFVENIX0RJU0FCTEU7CiAJCQl3cm1zciAoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGxvLCBoaSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCBkYTI5OWViLi43MjkzNTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKQEAgLTE0Nyw3ICsxNDcsMTYgQEAKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWN4IGVjeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgbG9uZyBjYW5fZGlzYWJsZTsKLQljcHVtYXNrX3Qgc2hhcmVkX2NwdV9tYXA7CS8qIGZ1dHVyZT86IG9ubHkgY3B1cy9ub2RlIGlzIG5lZWRlZCAqLworCURFQ0xBUkVfQklUTUFQKHNoYXJlZF9jcHVfbWFwLCBOUl9DUFVTKTsKK307CisKKy8qIHN1YnNldCBvZiBhYm92ZSBfY3B1aWQ0X2luZm8gdy9vIHNoYXJlZF9jcHVfbWFwICovCitzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgeworCXVuaW9uIF9jcHVpZDRfbGVhZl9lYXggZWF4OworCXVuaW9uIF9jcHVpZDRfbGVhZl9lYnggZWJ4OworCXVuaW9uIF9jcHVpZDRfbGVhZl9lY3ggZWN4OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOwogfTsKIAogI2lmZGVmIENPTkZJR19QQ0kKQEAgLTI3OCw3ICsyODcsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQKLWFtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmKQorYW1kX2NoZWNrX2wzX2Rpc2FibGUoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKIHsKIAlpZiAoaW5kZXggPCAzKQogCQlyZXR1cm47CkBAIC0yODYsNyArMjk1LDggQEAKIH0KIAogc3RhdGljIGludAotX19jcHVpbml0IGNwdWlkNF9jYWNoZV9sb29rdXAoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYpCitfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGludCBpbmRleCwKKwkJCQkgICBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKIHsKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWF4IAllYXg7CiAJdW5pb24gX2NwdWlkNF9sZWFmX2VieCAJZWJ4OwpAQCAtMzE0LDYgKzMyNCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX2xvb2t1cChpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZikKK3sKKwlzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKmxlYWZfcmVncyA9CisJCShzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKil0aGlzX2xlYWY7CisKKwlyZXR1cm4gY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGluZGV4LCBsZWFmX3JlZ3MpOworfQorCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBmaW5kX251bV9jYWNoZV9sZWF2ZXModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQJCWVheCwgZWJ4LCBlY3gsIGVkeDsKQEAgLTM1MywxMSArMzcyLDEwIEBACiAJCSAqIHBhcmFtZXRlcnMgY3B1aWQgbGVhZiB0byBmaW5kIHRoZSBjYWNoZSBkZXRhaWxzCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhY2hlX2xlYXZlczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgX2NwdWlkNF9pbmZvIHRoaXNfbGVhZjsKLQorCQkJc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzIHRoaXNfbGVhZjsKIAkJCWludCByZXR2YWw7CiAKLQkJCXJldHZhbCA9IGNwdWlkNF9jYWNoZV9sb29rdXAoaSwgJnRoaXNfbGVhZik7CisJCQlyZXR2YWwgPSBjcHVpZDRfY2FjaGVfbG9va3VwX3JlZ3MoaSwgJnRoaXNfbGVhZik7CiAJCQlpZiAocmV0dmFsID49IDApIHsKIAkJCQlzd2l0Y2godGhpc19sZWFmLmVheC5zcGxpdC5sZXZlbCkgewogCQkJCSAgICBjYXNlIDE6CkBAIC01MDYsMTcgKzUyNCwyMCBAQAogCW51bV90aHJlYWRzX3NoYXJpbmcgPSAxICsgdGhpc19sZWFmLT5lYXguc3BsaXQubnVtX3RocmVhZHNfc2hhcmluZzsKIAogCWlmIChudW1fdGhyZWFkc19zaGFyaW5nID09IDEpCi0JCWNwdV9zZXQoY3B1LCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgdG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CiAJZWxzZSB7CiAJCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihudW1fdGhyZWFkc19zaGFyaW5nKTsKIAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJCWlmIChjcHVfZGF0YShpKS5hcGljaWQgPj4gaW5kZXhfbXNiID09CiAJCQkgICAgYy0+YXBpY2lkID4+IGluZGV4X21zYikgewotCQkJCWNwdV9zZXQoaSwgdGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CisJCQkJY3B1bWFza19zZXRfY3B1KGksCisJCQkJCXRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwogCQkJCWlmIChpICE9IGNwdSAmJiBwZXJfY3B1KGNwdWlkNF9pbmZvLCBpKSkgIHsKLQkJCQkJc2libGluZ19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKGksIGluZGV4KTsKLQkJCQkJY3B1X3NldChjcHUsIHNpYmxpbmdfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCQkJCQlzaWJsaW5nX2xlYWYgPQorCQkJCQkJQ1BVSUQ0X0lORk9fSURYKGksIGluZGV4KTsKKwkJCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgdG9fY3B1bWFzaygKKwkJCQkJCXNpYmxpbmdfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTUyOCw5ICs1NDksMTAgQEAKIAlpbnQgc2libGluZzsKIAogCXRoaXNfbGVhZiA9IENQVUlENF9JTkZPX0lEWChjcHUsIGluZGV4KTsKLQlmb3JfZWFjaF9jcHVfbWFza19ucihzaWJsaW5nLCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSB7CisJZm9yX2VhY2hfY3B1KHNpYmxpbmcsIHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpIHsKIAkJc2libGluZ19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKHNpYmxpbmcsIGluZGV4KTsKLQkJY3B1X2NsZWFyKGNwdSwgc2libGluZ19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwKKwkJCQkgIHRvX2NwdW1hc2soc2libGluZ19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwogCX0KIH0KICNlbHNlCkBAIC02MzUsOCArNjU3LDkgQEAKIAlpbnQgbiA9IDA7CiAKIAlpZiAobGVuID4gMSkgewotCQljcHVtYXNrX3QgKm1hc2sgPSAmdGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcDsKKwkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7CiAKKwkJbWFzayA9IHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CiAJCW4gPSB0eXBlPwogCQkJY3B1bGlzdF9zY25wcmludGYoYnVmLCBsZW4tMiwgbWFzaykgOgogCQkJY3B1bWFza19zY25wcmludGYoYnVmLCBsZW4tMiwgbWFzayk7CkBAIC02OTksNyArNzIyLDggQEAKIAogc3RhdGljIHNzaXplX3Qgc2hvd19jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQogewotCWludCBub2RlID0gY3B1X3RvX25vZGUoZmlyc3RfY3B1KHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CisJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHVtYXNrX2ZpcnN0KG1hc2spKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAlzc2l6ZV90IHJldCA9IDA7CiAJaW50IGk7CkBAIC03MzMsNyArNzU3LDggQEAKIHN0b3JlX2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjb25zdCBjaGFyICpidWYsCiAJCSAgICBzaXplX3QgY291bnQpCiB7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShmaXJzdF9jcHUodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrID0gdG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKKwlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdW1hc2tfZmlyc3QobWFzaykpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCXVuc2lnbmVkIGludCByZXQsIGluZGV4LCB2YWw7CiAKQEAgLTg3OCw3ICs5MDMsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgY3B1bWFza190IGNhY2hlX2Rldl9tYXAgPSBDUFVfTUFTS19OT05FOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGNhY2hlX2Rldl9tYXAsIE5SX0NQVVMpOwogCiAvKiBBZGQvUmVtb3ZlIGNhY2hlIGludGVyZmFjZSBmb3IgQ1BVIGRldmljZSAqLwogc3RhdGljIGludCBfX2NwdWluaXQgY2FjaGVfYWRkX2RldihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c19kZXYpCkBAIC05MTgsNyArOTQzLDcgQEAKIAkJfQogCQlrb2JqZWN0X3VldmVudCgmKHRoaXNfb2JqZWN0LT5rb2JqKSwgS09CSl9BREQpOwogCX0KLQljcHVfc2V0KGNwdSwgY2FjaGVfZGV2X21hcCk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgdG9fY3B1bWFzayhjYWNoZV9kZXZfbWFwKSk7CiAKIAlrb2JqZWN0X3VldmVudChwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSksIEtPQkpfQUREKTsKIAlyZXR1cm4gMDsKQEAgLTkzMSw5ICs5NTYsOSBAQAogCiAJaWYgKHBlcl9jcHUoY3B1aWQ0X2luZm8sIGNwdSkgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmICghY3B1X2lzc2V0KGNwdSwgY2FjaGVfZGV2X21hcCkpCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdG9fY3B1bWFzayhjYWNoZV9kZXZfbWFwKSkpCiAJCXJldHVybjsKLQljcHVfY2xlYXIoY3B1LCBjYWNoZV9kZXZfbWFwKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jYWNoZV9sZWF2ZXM7IGkrKykKIAkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsaSktPmtvYmopKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwppbmRleCBmMmVlMGFlLi45ODE3NTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCkBAIC02Nyw3ICs2Nyw3IEBACiBzdHJ1Y3QgdGhyZXNob2xkX2JhbmsgewogCXN0cnVjdCBrb2JqZWN0ICprb2JqOwogCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmJsb2NrczsKLQljcHVtYXNrX3QgY3B1czsKKwljcHVtYXNrX3Zhcl90IGNwdXM7CiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aHJlc2hvbGRfYmFuayAqLCB0aHJlc2hvbGRfYmFua3NbTlJfQkFOS1NdKTsKIApAQCAtNDgxLDcgKzQ4MSw3IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGNwdV9kYXRhKGNwdSkuY3B1X2NvcmVfaWQgJiYgc2hhcmVkX2JhbmtbYmFua10pIHsJLyogc3ltbGluayAqLwotCQlpID0gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJaSA9IGNwdW1hc2tfZmlyc3QoJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKIAogCQkvKiBmaXJzdCBjb3JlIG5vdCB1cCB5ZXQgKi8KIAkJaWYgKGNwdV9kYXRhKGkpLmNwdV9jb3JlX2lkKQpAQCAtNTAxLDcgKzUwMSw3IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAotCQliLT5jcHVzID0gcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSk7CisJCWNwdW1hc2tfY29weShiLT5jcHVzLCAmcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOwogCQlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IGI7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTUxMiwxNSArNTEyLDIwIEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZiLT5jcHVzLCBHRlBfS0VSTkVMKSkgeworCQlrZnJlZShiKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCiAJYi0+a29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQobmFtZSwgJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KS5rb2JqKTsKIAlpZiAoIWItPmtvYmopCiAJCWdvdG8gb3V0X2ZyZWU7CiAKICNpZm5kZWYgQ09ORklHX1NNUAotCWItPmNwdXMgPSBDUFVfTUFTS19BTEw7CisJY3B1bWFza19zZXRhbGwoYi0+Y3B1cyk7CiAjZWxzZQotCWItPmNwdXMgPSBwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KTsKKwljcHVtYXNrX2NvcHkoYi0+Y3B1cywgJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKICNlbmRpZgogCiAJcGVyX2NwdSh0aHJlc2hvbGRfYmFua3MsIGNwdSlbYmFua10gPSBiOwpAQCAtNTI5LDcgKzUzNCw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksIGItPmNwdXMpIHsKKwlmb3JfZWFjaF9jcHUoaSwgYi0+Y3B1cykgewogCQlpZiAoaSA9PSBjcHUpCiAJCQljb250aW51ZTsKIApAQCAtNTQ1LDYgKzU1MCw3IEBACiAKIG91dF9mcmVlOgogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gTlVMTDsKKwlmcmVlX2NwdW1hc2tfdmFyKGItPmNwdXMpOwogCWtmcmVlKGIpOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC02MTksNyArNjI1LDcgQEAKICNlbmRpZgogCiAJLyogcmVtb3ZlIGFsbCBzaWJsaW5nIHN5bWxpbmtzIGJlZm9yZSB1bnJlZ2lzdGVyaW5nICovCi0JZm9yX2VhY2hfY3B1X21hc2tfbnIoaSwgYi0+Y3B1cykgeworCWZvcl9lYWNoX2NwdShpLCBiLT5jcHVzKSB7CiAJCWlmIChpID09IGNwdSkKIAkJCWNvbnRpbnVlOwogCkBAIC02MzIsNiArNjM4LDcgQEAKIGZyZWVfb3V0OgogCWtvYmplY3RfZGVsKGItPmtvYmopOwogCWtvYmplY3RfcHV0KGItPmtvYmopOworCWZyZWVfY3B1bWFza192YXIoYi0+Y3B1cyk7CiAJa2ZyZWUoYik7CiAJcGVyX2NwdSh0aHJlc2hvbGRfYmFua3MsIGNwdSlbYmFua10gPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwppbmRleCBmNDRjMzY2Li5hYTVlMjg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KQEAgLTQ4LDEzICs0OSwxMyBAQAogCSAqLwogCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsLCBoKTsKIAloID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0JaWYgKChsICYgKDEgPDwgMykpICYmIChoICYgQVBJQ19ETV9TTUkpKSB7CisJaWYgKChsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0xKSAmJiAoaCAmIEFQSUNfRE1fU01JKSkgewogCQlwcmludGsoS0VSTl9ERUJVRwogCQkgICAgICAgIkNQVSVkOiBUaGVybWFsIG1vbml0b3JpbmcgaGFuZGxlZCBieSBTTUlcbiIsIGNwdSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9UTTIpICYmIChsICYgKDEgPDwgMTMpKSkKKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9UTTIpICYmIChsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0yKSkKIAkJdG0yID0gMTsKIAogCWlmIChoICYgQVBJQ19WRUNUT1JfTUFTSykgewpAQCAtNzIsNyArNzMsNyBAQAogCXdybXNyKE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCwgbCB8IDB4MDMsIGgpOwogCiAJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwotCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsIHwgKDEgPDwgMyksIGgpOworCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsIHwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0xLCBoKTsKIAogCWwgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbCAmIH5BUElDX0xWVF9NQVNLRUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMKaW5kZXggOWI2MGZjZS4uZjUzYmRjYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9wNC5jCkBAIC04NSw3ICs4NSw3IEBACiAJICovCiAJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwogCWggPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLQlpZiAoKGwgJiAoMTw8MykpICYmIChoICYgQVBJQ19ETV9TTUkpKSB7CisJaWYgKChsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0xKSAmJiAoaCAmIEFQSUNfRE1fU01JKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiQ1BVJWQ6IFRoZXJtYWwgbW9uaXRvcmluZyBoYW5kbGVkIGJ5IFNNSVxuIiwKIAkJCQljcHUpOwogCQlyZXR1cm47IC8qIC1FQlVTWSAqLwpAQCAtMTExLDcgKzExMSw3IEBACiAJdmVuZG9yX3RoZXJtYWxfaW50ZXJydXB0ID0gaW50ZWxfdGhlcm1hbF9pbnRlcnJ1cHQ7CiAKIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7Ci0Jd3Jtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwgfCAoMTw8MyksIGgpOworCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsIHwgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVE0xLCBoKTsKIAogCWwgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbCAmIH5BUElDX0xWVF9NQVNLRUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwppbmRleCA5YWJkNDhiLi5mNmM3MGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KICNpbmNsdWRlIDxhc20vaW50ZWxfYXJjaF9wZXJmbW9uLmg+CiAKIHN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKaW5kZXggMDFiMTI0NC4uZDY3ZTBlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTcsMTEgKzcsMTAgQEAKIC8qCiAgKglHZXQgQ1BVIGluZm9ybWF0aW9uIGZvciB1c2UgYnkgdGhlIHByb2Nmcy4KICAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKIHN0YXRpYyB2b2lkIHNob3dfY3B1aW5mb19jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNwdWluZm9feDg2ICpjLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSkKIHsKLSNpZmRlZiBDT05GSUdfWDg2X0hUCisjaWZkZWYgQ09ORklHX1NNUAogCWlmIChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncyA+IDEpIHsKIAkJc2VxX3ByaW50ZihtLCAicGh5c2ljYWwgaWRcdDogJWRcbiIsIGMtPnBoeXNfcHJvY19pZCk7CiAJCXNlcV9wcmludGYobSwgInNpYmxpbmdzXHQ6ICVkXG4iLApAQCAtMjQsNiArMjMsNyBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiBzdGF0aWMgdm9pZCBzaG93X2NwdWluZm9fbWlzYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAkvKgpAQCAtNTAsMjIgKzUwLDYgQEAKIAkJICAgYy0+d3Bfd29ya3Nfb2sgPyAieWVzIiA6ICJubyIpOwogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIHNob3dfY3B1aW5mb19jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNwdWluZm9feDg2ICpjLAotCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGMtPng4Nl9tYXhfY29yZXMgKiBzbXBfbnVtX3NpYmxpbmdzID4gMSkgewotCQlzZXFfcHJpbnRmKG0sICJwaHlzaWNhbCBpZFx0OiAlZFxuIiwgYy0+cGh5c19wcm9jX2lkKTsKLQkJc2VxX3ByaW50ZihtLCAic2libGluZ3NcdDogJWRcbiIsCi0JCQkgICBjcHVzX3dlaWdodChwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSkpOwotCQlzZXFfcHJpbnRmKG0sICJjb3JlIGlkXHRcdDogJWRcbiIsIGMtPmNwdV9jb3JlX2lkKTsKLQkJc2VxX3ByaW50ZihtLCAiY3B1IGNvcmVzXHQ6ICVkXG4iLCBjLT5ib290ZWRfY29yZXMpOwotCQlzZXFfcHJpbnRmKG0sICJhcGljaWRcdFx0OiAlZFxuIiwgYy0+YXBpY2lkKTsKLQkJc2VxX3ByaW50ZihtLCAiaW5pdGlhbCBhcGljaWRcdDogJWRcbiIsIGMtPmluaXRpYWxfYXBpY2lkKTsKLQl9Ci0jZW5kaWYKLX0KLQogc3RhdGljIHZvaWQgc2hvd19jcHVpbmZvX21pc2Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJc2VxX3ByaW50ZihtLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYwppbmRleCBjNjg5ZDE5Li5mZjk1ODI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYwpAQCAtMjQsMTIgKzI0LDEwIEBACiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS92aXJ0ZXh0Lmg+CiAKLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggNmIxZjZmNi4uODdkMTAzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtOTksNyArOTksNyBAQAogCQkJCWZyYW1lID0gZnJhbWUtPm5leHRfZnJhbWU7CiAJCQkJYnAgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAJCQl9IGVsc2UgewotCQkJCW9wcy0+YWRkcmVzcyhkYXRhLCBhZGRyLCBicCA9PSAwKTsKKwkJCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkciwgMCk7CiAJCQl9CiAJCQlwcmludF9mdHJhY2VfZ3JhcGhfYWRkcihhZGRyLCBkYXRhLCBvcHMsIHRpbmZvLCBncmFwaCk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCBjMzAyZDA3Li5kMzVkYjU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xMDYsNyArMTA2LDggQEAKIAkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEpCiB7CiAJY29uc3QgdW5zaWduZWQgY3B1ID0gZ2V0X2NwdSgpOwotCXVuc2lnbmVkIGxvbmcgKmlycXN0YWNrX2VuZCA9ICh1bnNpZ25lZCBsb25nICopY3B1X3BkYShjcHUpLT5pcnFzdGFja3B0cjsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhY2tfZW5kID0KKwkJKHVuc2lnbmVkIGxvbmcgKilwZXJfY3B1KGlycV9zdGFja19wdHIsIGNwdSk7CiAJdW5zaWduZWQgdXNlZCA9IDA7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbzsKIAlpbnQgZ3JhcGggPSAwOwpAQCAtMTYwLDIzICsxNjEsMjMgQEAKIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgZXN0YWNrX2VuZFstMl07CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoaXJxc3RhY2tfZW5kKSB7Ci0JCQl1bnNpZ25lZCBsb25nICppcnFzdGFjazsKLQkJCWlycXN0YWNrID0gaXJxc3RhY2tfZW5kIC0KLQkJCQkoSVJRU1RBQ0tTSVpFIC0gNjQpIC8gc2l6ZW9mKCppcnFzdGFjayk7CisJCWlmIChpcnFfc3RhY2tfZW5kKSB7CisJCQl1bnNpZ25lZCBsb25nICppcnFfc3RhY2s7CisJCQlpcnFfc3RhY2sgPSBpcnFfc3RhY2tfZW5kIC0KKwkJCQkoSVJRX1NUQUNLX1NJWkUgLSA2NCkgLyBzaXplb2YoKmlycV9zdGFjayk7CiAKLQkJCWlmIChzdGFjayA+PSBpcnFzdGFjayAmJiBzdGFjayA8IGlycXN0YWNrX2VuZCkgeworCQkJaWYgKHN0YWNrID49IGlycV9zdGFjayAmJiBzdGFjayA8IGlycV9zdGFja19lbmQpIHsKIAkJCQlpZiAob3BzLT5zdGFjayhkYXRhLCAiSVJRIikgPCAwKQogCQkJCQlicmVhazsKIAkJCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2sodGluZm8sIHN0YWNrLCBicCwKLQkJCQkJb3BzLCBkYXRhLCBpcnFzdGFja19lbmQsICZncmFwaCk7CisJCQkJCW9wcywgZGF0YSwgaXJxX3N0YWNrX2VuZCwgJmdyYXBoKTsKIAkJCQkvKgogCQkJCSAqIFdlIGxpbmsgdG8gdGhlIG5leHQgc3RhY2sgKHdoaWNoIHdvdWxkIGJlCiAJCQkJICogdGhlIHByb2Nlc3Mgc3RhY2sgbm9ybWFsbHkpIHRoZSBsYXN0CiAJCQkJICogcG9pbnRlciAoaW5kZXggLTEgdG8gZW5kKSBpbiB0aGUgSVJRIHN0YWNrOgogCQkJCSAqLwotCQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgKGlycXN0YWNrX2VuZFstMV0pOwotCQkJCWlycXN0YWNrX2VuZCA9IE5VTEw7CisJCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSAoaXJxX3N0YWNrX2VuZFstMV0pOworCQkJCWlycV9zdGFja19lbmQgPSBOVUxMOwogCQkJCW9wcy0+c3RhY2soZGF0YSwgIkVPSSIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTk5LDEwICsyMDAsMTAgQEAKIAl1bnNpZ25lZCBsb25nICpzdGFjazsKIAlpbnQgaTsKIAljb25zdCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXVuc2lnbmVkIGxvbmcgKmlycXN0YWNrX2VuZCA9Ci0JCSh1bnNpZ25lZCBsb25nICopIChjcHVfcGRhKGNwdSktPmlycXN0YWNrcHRyKTsKLQl1bnNpZ25lZCBsb25nICppcnFzdGFjayA9Ci0JCSh1bnNpZ25lZCBsb25nICopIChjcHVfcGRhKGNwdSktPmlycXN0YWNrcHRyIC0gSVJRU1RBQ0tTSVpFKTsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhY2tfZW5kID0KKwkJKHVuc2lnbmVkIGxvbmcgKikocGVyX2NwdShpcnFfc3RhY2tfcHRyLCBjcHUpKTsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhY2sgPQorCQkodW5zaWduZWQgbG9uZyAqKShwZXJfY3B1KGlycV9zdGFja19wdHIsIGNwdSkgLSBJUlFfU1RBQ0tfU0laRSk7CiAKIAkvKgogCSAqIGRlYnVnZ2luZyBhaWQ6ICJzaG93X3N0YWNrKE5VTEwsIE5VTEwpOyIgcHJpbnRzIHRoZQpAQCAtMjE4LDkgKzIxOSw5IEBACiAKIAlzdGFjayA9IHNwOwogCWZvciAoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgewotCQlpZiAoc3RhY2sgPj0gaXJxc3RhY2sgJiYgc3RhY2sgPD0gaXJxc3RhY2tfZW5kKSB7Ci0JCQlpZiAoc3RhY2sgPT0gaXJxc3RhY2tfZW5kKSB7Ci0JCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSAoaXJxc3RhY2tfZW5kWy0xXSk7CisJCWlmIChzdGFjayA+PSBpcnFfc3RhY2sgJiYgc3RhY2sgPD0gaXJxX3N0YWNrX2VuZCkgeworCQkJaWYgKHN0YWNrID09IGlycV9zdGFja19lbmQpIHsKKwkJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIChpcnFfc3RhY2tfZW5kWy0xXSk7CiAJCQkJcHJpbnRrKCIgPEVPST4gIik7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0yNDEsNyArMjQyLDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHNwOwogCWNvbnN0IGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpjdXIgPSBjcHVfcGRhKGNwdSktPnBjdXJyZW50OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyID0gY3VycmVudDsKIAogCXNwID0gcmVncy0+c3A7CiAJcHJpbnRrKCJDUFUgJWQgIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGU4NTgyNjguLjUwOGJlYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtODU4LDYgKzg1OCw5IEBACiAgKi8KIHZvaWQgX19pbml0IHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKQogeworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybjsKKwogCWRyb3Bfb3ZlcmxhcHNfdGhhdF9hcmVfb2soc3RhcnQsIGVuZCk7CiAJX19yZXNlcnZlX2Vhcmx5KHN0YXJ0LCBlbmQsIG5hbWUsIDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDUwNGFkMTkuLjYzOWFkOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDx4ZW4vaHZjLWNvbnNvbGUuaD4KICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2VoY2lfZGVmLmg+CiAKIC8qIFNpbXBsZSBWR0Egb3V0cHV0ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKaW5kZXggZWIxZWYzYi4uMTczNmFjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwpAQCAtMzY2LDEwICszNjYsMTIgQEAKIAkJCQkJU01CSU9TX1RBQkxFX0dVSUQpKSB7CiAJCQllZmkuc21iaW9zID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKIAkJCXByaW50aygiIFNNQklPUz0weCVseCAiLCBjb25maWdfdGFibGVzW2ldLnRhYmxlKTsKKyNpZmRlZiBDT05GSUdfWDg2X1VWCiAJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwKIAkJCQkJVVZfU1lTVEVNX1RBQkxFX0dVSUQpKSB7CiAJCQllZmkudXZfc3lzdGFiID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKIAkJCXByaW50aygiIFVWc3lzdGFiPTB4JWx4ICIsIGNvbmZpZ190YWJsZXNbaV0udGFibGUpOworI2VuZGlmCiAJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwKIAkJCQkJSENEUF9UQUJMRV9HVUlEKSkgewogCQkJZWZpLmhjZHAgPSBjb25maWdfdGFibGVzW2ldLnRhYmxlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaV82NC5jIGIvYXJjaC94ODYva2VybmVsL2VmaV82NC5jCmluZGV4IGNiNzgzYjkuLjIyYzNiNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmlfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpXzY0LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vZWZpLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKIHN0YXRpYyBwZ2RfdCBzYXZlX3BnZCBfX2luaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZpX2ZsYWdzIF9faW5pdGRhdGE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lZmlfc3R1Yl8zMi5TCmluZGV4IGVmMDBiYjcuLmZiZTY2ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmlfc3R1Yl8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmlfc3R1Yl8zMi5TCkBAIC02LDcgKzYsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCiAvKgogICogZWZpX2NhbGxfcGh5cyh2b2lkICosIC4uLikgaXMgYSBmdW5jdGlvbiB3aXRoIHZhcmlhYmxlIHBhcmFtZXRlcnMuCkBAIC0xMTMsNiArMTEzLDcgQEAKIAltb3ZsCSglZWR4KSwgJWVjeAogCXB1c2hsCSVlY3gKIAlyZXQKK0VORFBST0MoZWZpX2NhbGxfcGh5cykKIC5wcmV2aW91cwogCiAuZGF0YQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaV9zdHViXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfNjQuUwppbmRleCA5OWI0N2Q0Li40YzA3Y2NhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpX3N0dWJfNjQuUwpAQCAtNDEsNiArNDEsNyBAQAogCWFkZHEgJDMyLCAlcnNwCiAJUkVTVE9SRV9YTU0KIAlyZXQKK0VORFBST0MoZWZpX2NhbGwwKQogCiBFTlRSWShlZmlfY2FsbDEpCiAJU0FWRV9YTU0KQEAgLTUwLDYgKzUxLDcgQEAKIAlhZGRxICQzMiwgJXJzcAogCVJFU1RPUkVfWE1NCiAJcmV0CitFTkRQUk9DKGVmaV9jYWxsMSkKIAogRU5UUlkoZWZpX2NhbGwyKQogCVNBVkVfWE1NCkBAIC01OSw2ICs2MSw3IEBACiAJYWRkcSAkMzIsICVyc3AKIAlSRVNUT1JFX1hNTQogCXJldAorRU5EUFJPQyhlZmlfY2FsbDIpCiAKIEVOVFJZKGVmaV9jYWxsMykKIAlTQVZFX1hNTQpAQCAtNjksNiArNzIsNyBAQAogCWFkZHEgJDMyLCAlcnNwCiAJUkVTVE9SRV9YTU0KIAlyZXQKK0VORFBST0MoZWZpX2NhbGwzKQogCiBFTlRSWShlZmlfY2FsbDQpCiAJU0FWRV9YTU0KQEAgLTgwLDYgKzg0LDcgQEAKIAlhZGRxICQzMiwgJXJzcAogCVJFU1RPUkVfWE1NCiAJcmV0CitFTkRQUk9DKGVmaV9jYWxsNCkKIAogRU5UUlkoZWZpX2NhbGw1KQogCVNBVkVfWE1NCkBAIC05Miw2ICs5Nyw3IEBACiAJYWRkcSAkNDgsICVyc3AKIAlSRVNUT1JFX1hNTQogCXJldAorRU5EUFJPQyhlZmlfY2FsbDUpCiAKIEVOVFJZKGVmaV9jYWxsNikKIAlTQVZFX1hNTQpAQCAtMTA3LDMgKzExMyw0IEBACiAJYWRkcSAkNDgsICVyc3AKIAlSRVNUT1JFX1hNTQogCXJldAorRU5EUFJPQyhlZmlfY2FsbDYpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDQ2NDY5MDIuLjg5OWU4OTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC0zMCwxMiArMzAsMTMgQEAKICAqCTFDKCVlc3ApIC0gJWRzCiAgKgkyMCglZXNwKSAtICVlcwogICoJMjQoJWVzcCkgLSAlZnMKLSAqCTI4KCVlc3ApIC0gb3JpZ19lYXgKLSAqCTJDKCVlc3ApIC0gJWVpcAotICoJMzAoJWVzcCkgLSAlY3MKLSAqCTM0KCVlc3ApIC0gJWVmbGFncwotICoJMzgoJWVzcCkgLSAlb2xkZXNwCi0gKgkzQyglZXNwKSAtICVvbGRzcworICoJMjgoJWVzcCkgLSAlZ3MJCXNhdmVkIGlmZiAhQ09ORklHX1g4Nl8zMl9MQVpZX0dTCisgKgkyQyglZXNwKSAtIG9yaWdfZWF4CisgKgkzMCglZXNwKSAtICVlaXAKKyAqCTM0KCVlc3ApIC0gJWNzCisgKgkzOCglZXNwKSAtICVlZmxhZ3MKKyAqCTNDKCVlc3ApIC0gJW9sZGVzcAorICoJNDAoJWVzcCkgLSAlb2xkc3MKICAqCiAgKiAiY3VycmVudCIgaXMgaW4gcmVnaXN0ZXIgJWVieCBkdXJpbmcgYW55IHNsb3cgZW50cmllcy4KICAqLwpAQCAtNDYsNyArNDcsNyBAQAogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CkBAIC0xMDEsMTIxICsxMDIsMjIxIEBACiAjZGVmaW5lIHJlc3VtZV91c2Vyc3BhY2Vfc2lnCXJlc3VtZV91c2Vyc3BhY2UKICNlbmRpZgogCi0jZGVmaW5lIFNBVkVfQUxMIFwKLQljbGQ7IFwKLQlwdXNobCAlZnM7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JLypDRklfUkVMX09GRlNFVCBmcywgMDsqL1wKLQlwdXNobCAlZXM7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JLypDRklfUkVMX09GRlNFVCBlcywgMDsqL1wKLQlwdXNobCAlZHM7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JLypDRklfUkVMX09GRlNFVCBkcywgMDsqL1wKLQlwdXNobCAlZWF4OyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCUNGSV9SRUxfT0ZGU0VUIGVheCwgMDtcCi0JcHVzaGwgJWVicDsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0O1wKLQlDRklfUkVMX09GRlNFVCBlYnAsIDA7XAotCXB1c2hsICVlZGk7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JQ0ZJX1JFTF9PRkZTRVQgZWRpLCAwO1wKLQlwdXNobCAlZXNpOyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCUNGSV9SRUxfT0ZGU0VUIGVzaSwgMDtcCi0JcHVzaGwgJWVkeDsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0O1wKLQlDRklfUkVMX09GRlNFVCBlZHgsIDA7XAotCXB1c2hsICVlY3g7IFwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDtcCi0JQ0ZJX1JFTF9PRkZTRVQgZWN4LCAwO1wKLQlwdXNobCAlZWJ4OyBcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAotCUNGSV9SRUxfT0ZGU0VUIGVieCwgMDtcCi0JbW92bCAkKF9fVVNFUl9EUyksICVlZHg7IFwKLQltb3ZsICVlZHgsICVkczsgXAotCW1vdmwgJWVkeCwgJWVzOyBcCi0JbW92bCAkKF9fS0VSTkVMX1BFUkNQVSksICVlZHg7IFwKLQltb3ZsICVlZHgsICVmcworLyoKKyAqIFVzZXIgZ3Mgc2F2ZS9yZXN0b3JlCisgKgorICogJWdzIGlzIHVzZWQgZm9yIHVzZXJsYW5kIFRMUyBhbmQga2VybmVsIG9ubHkgdXNlcyBpdCBmb3Igc3RhY2sKKyAqIGNhbmFyeSB3aGljaCBpcyByZXF1aXJlZCB0byBiZSBhdCAlZ3M6MjAgYnkgZ2NjLiAgUmVhZCB0aGUgY29tbWVudAorICogYXQgdGhlIHRvcCBvZiBzdGFja3Byb3RlY3Rvci5oIGZvciBtb3JlIGluZm8uCisgKgorICogTG9jYWwgbGFiZWxzIDk4IGFuZCA5OSBhcmUgdXNlZC4KKyAqLworI2lmZGVmIENPTkZJR19YODZfMzJfTEFaWV9HUwogCi0jZGVmaW5lIFJFU1RPUkVfSU5UX1JFR1MgXAotCXBvcGwgJWVieDsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JQ0ZJX1JFU1RPUkUgZWJ4O1wKLQlwb3BsICVlY3g7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCUNGSV9SRVNUT1JFIGVjeDtcCi0JcG9wbCAlZWR4OwlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQlDRklfUkVTVE9SRSBlZHg7XAotCXBvcGwgJWVzaTsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JQ0ZJX1JFU1RPUkUgZXNpO1wKLQlwb3BsICVlZGk7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCUNGSV9SRVNUT1JFIGVkaTtcCi0JcG9wbCAlZWJwOwlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQlDRklfUkVTVE9SRSBlYnA7XAotCXBvcGwgJWVheDsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JQ0ZJX1JFU1RPUkUgZWF4CisgLyogdW5mb3J0dW5hdGVseSBwdXNoL3BvcCBjYW4ndCBiZSBuby1vcCAqLworLm1hY3JvIFBVU0hfR1MKKwlwdXNobCAkMAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisuZW5kbQorLm1hY3JvIFBPUF9HUyBwb3A9MAorCWFkZGwgJCg0ICsgXHBvcCksICVlc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLSg0ICsgXHBvcCkKKy5lbmRtCisubWFjcm8gUE9QX0dTX0VYCisuZW5kbQogCi0jZGVmaW5lIFJFU1RPUkVfUkVHUwlcCi0JUkVTVE9SRV9JTlRfUkVHUzsgXAotMToJcG9wbCAlZHM7CVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQ7XAotCS8qQ0ZJX1JFU1RPUkUgZHM7Ki9cCi0yOglwb3BsICVlczsJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNDtcCi0JLypDRklfUkVTVE9SRSBlczsqL1wKLTM6CXBvcGwgJWZzOwlcCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQkvKkNGSV9SRVNUT1JFIGZzOyovXAotLnB1c2hzZWN0aW9uIC5maXh1cCwiYXgiOwlcCi00Ogltb3ZsICQwLCglZXNwKTsJXAotCWptcCAxYjsJCVwKLTU6CW1vdmwgJDAsKCVlc3ApOwlcCi0Jam1wIDJiOwkJXAotNjoJbW92bCAkMCwoJWVzcCk7CVwKLQlqbXAgM2I7CQlcCi0uc2VjdGlvbiBfX2V4X3RhYmxlLCJhIjtcCi0JLmFsaWduIDQ7CVwKLQkubG9uZyAxYiw0YjsJXAotCS5sb25nIDJiLDViOwlcCi0JLmxvbmcgM2IsNmI7CVwKKyAvKiBhbGwgdGhlIHJlc3QgYXJlIG5vLW9wICovCisubWFjcm8gUFRHU19UT19HUworLmVuZG0KKy5tYWNybyBQVEdTX1RPX0dTX0VYCisuZW5kbQorLm1hY3JvIEdTX1RPX1JFRyByZWcKKy5lbmRtCisubWFjcm8gUkVHX1RPX1BUR1MgcmVnCisuZW5kbQorLm1hY3JvIFNFVF9LRVJORUxfR1MgcmVnCisuZW5kbQorCisjZWxzZQkvKiBDT05GSUdfWDg2XzMyX0xBWllfR1MgKi8KKworLm1hY3JvIFBVU0hfR1MKKwlwdXNobCAlZ3MKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCS8qQ0ZJX1JFTF9PRkZTRVQgZ3MsIDAqLworLmVuZG0KKworLm1hY3JvIFBPUF9HUyBwb3A9MAorOTg6CXBvcGwgJWdzCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJLypDRklfUkVTVE9SRSBncyovCisgIC5pZiBccG9wIDw+IDAKKwlhZGQgJFxwb3AsICVlc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLVxwb3AKKyAgLmVuZGlmCisuZW5kbQorLm1hY3JvIFBPUF9HU19FWAorLnB1c2hzZWN0aW9uIC5maXh1cCwgImF4IgorOTk6CW1vdmwgJDAsICglZXNwKQorCWptcCA5OGIKKy5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCS5hbGlnbiA0CisJLmxvbmcgOThiLCA5OWIKIC5wb3BzZWN0aW9uCisuZW5kbQogCi0jZGVmaW5lIFJJTkcwX0lOVF9GUkFNRSBcCi0JQ0ZJX1NUQVJUUFJPQyBzaW1wbGU7XAotCUNGSV9TSUdOQUxfRlJBTUU7XAotCUNGSV9ERUZfQ0ZBIGVzcCwgMyo0O1wKLQkvKkNGSV9PRkZTRVQgY3MsIC0yKjQ7Ki9cCisubWFjcm8gUFRHU19UT19HUworOTg6CW1vdiBQVF9HUyglZXNwKSwgJWdzCisuZW5kbQorLm1hY3JvIFBUR1NfVE9fR1NfRVgKKy5wdXNoc2VjdGlvbiAuZml4dXAsICJheCIKKzk5Ogltb3ZsICQwLCBQVF9HUyglZXNwKQorCWptcCA5OGIKKy5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCS5hbGlnbiA0CisJLmxvbmcgOThiLCA5OWIKKy5wb3BzZWN0aW9uCisuZW5kbQorCisubWFjcm8gR1NfVE9fUkVHIHJlZworCW1vdmwgJWdzLCBccmVnCisJLypDRklfUkVHSVNURVIgZ3MsIFxyZWcqLworLmVuZG0KKy5tYWNybyBSRUdfVE9fUFRHUyByZWcKKwltb3ZsIFxyZWcsIFBUX0dTKCVlc3ApCisJLypDRklfUkVMX09GRlNFVCBncywgUFRfR1MqLworLmVuZG0KKy5tYWNybyBTRVRfS0VSTkVMX0dTIHJlZworCW1vdmwgJChfX0tFUk5FTF9TVEFDS19DQU5BUlkpLCBccmVnCisJbW92bCBccmVnLCAlZ3MKKy5lbmRtCisKKyNlbmRpZgkvKiBDT05GSUdfWDg2XzMyX0xBWllfR1MgKi8KKworLm1hY3JvIFNBVkVfQUxMCisJY2xkCisJUFVTSF9HUworCXB1c2hsICVmcworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJLypDRklfUkVMX09GRlNFVCBmcywgMDsqLworCXB1c2hsICVlcworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJLypDRklfUkVMX09GRlNFVCBlcywgMDsqLworCXB1c2hsICVkcworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJLypDRklfUkVMX09GRlNFVCBkcywgMDsqLworCXB1c2hsICVlYXgKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVheCwgMAorCXB1c2hsICVlYnAKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVicCwgMAorCXB1c2hsICVlZGkKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVkaSwgMAorCXB1c2hsICVlc2kKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVzaSwgMAorCXB1c2hsICVlZHgKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVkeCwgMAorCXB1c2hsICVlY3gKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVjeCwgMAorCXB1c2hsICVlYngKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCUNGSV9SRUxfT0ZGU0VUIGVieCwgMAorCW1vdmwgJChfX1VTRVJfRFMpLCAlZWR4CisJbW92bCAlZWR4LCAlZHMKKwltb3ZsICVlZHgsICVlcworCW1vdmwgJChfX0tFUk5FTF9QRVJDUFUpLCAlZWR4CisJbW92bCAlZWR4LCAlZnMKKwlTRVRfS0VSTkVMX0dTICVlZHgKKy5lbmRtCisKKy5tYWNybyBSRVNUT1JFX0lOVF9SRUdTCisJcG9wbCAlZWJ4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZWJ4CisJcG9wbCAlZWN4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZWN4CisJcG9wbCAlZWR4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZWR4CisJcG9wbCAlZXNpCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZXNpCisJcG9wbCAlZWRpCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZWRpCisJcG9wbCAlZWJwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZWJwCisJcG9wbCAlZWF4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX1JFU1RPUkUgZWF4CisuZW5kbQorCisubWFjcm8gUkVTVE9SRV9SRUdTIHBvcD0wCisJUkVTVE9SRV9JTlRfUkVHUworMToJcG9wbCAlZHMKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKKwkvKkNGSV9SRVNUT1JFIGRzOyovCisyOglwb3BsICVlcworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCS8qQ0ZJX1JFU1RPUkUgZXM7Ki8KKzM6CXBvcGwgJWZzCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJLypDRklfUkVTVE9SRSBmczsqLworCVBPUF9HUyBccG9wCisucHVzaHNlY3Rpb24gLmZpeHVwLCAiYXgiCis0Ogltb3ZsICQwLCAoJWVzcCkKKwlqbXAgMWIKKzU6CW1vdmwgJDAsICglZXNwKQorCWptcCAyYgorNjoJbW92bCAkMCwgKCVlc3ApCisJam1wIDNiCisuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKKwkuYWxpZ24gNAorCS5sb25nIDFiLCA0YgorCS5sb25nIDJiLCA1YgorCS5sb25nIDNiLCA2YgorLnBvcHNlY3Rpb24KKwlQT1BfR1NfRVgKKy5lbmRtCisKKy5tYWNybyBSSU5HMF9JTlRfRlJBTUUKKwlDRklfU1RBUlRQUk9DIHNpbXBsZQorCUNGSV9TSUdOQUxfRlJBTUUKKwlDRklfREVGX0NGQSBlc3AsIDMqNAorCS8qQ0ZJX09GRlNFVCBjcywgLTIqNDsqLwogCUNGSV9PRkZTRVQgZWlwLCAtMyo0CisuZW5kbQogCi0jZGVmaW5lIFJJTkcwX0VDX0ZSQU1FIFwKLQlDRklfU1RBUlRQUk9DIHNpbXBsZTtcCi0JQ0ZJX1NJR05BTF9GUkFNRTtcCi0JQ0ZJX0RFRl9DRkEgZXNwLCA0KjQ7XAotCS8qQ0ZJX09GRlNFVCBjcywgLTIqNDsqL1wKKy5tYWNybyBSSU5HMF9FQ19GUkFNRQorCUNGSV9TVEFSVFBST0Mgc2ltcGxlCisJQ0ZJX1NJR05BTF9GUkFNRQorCUNGSV9ERUZfQ0ZBIGVzcCwgNCo0CisJLypDRklfT0ZGU0VUIGNzLCAtMio0OyovCiAJQ0ZJX09GRlNFVCBlaXAsIC0zKjQKKy5lbmRtCiAKLSNkZWZpbmUgUklORzBfUFRSRUdTX0ZSQU1FIFwKLQlDRklfU1RBUlRQUk9DIHNpbXBsZTtcCi0JQ0ZJX1NJR05BTF9GUkFNRTtcCi0JQ0ZJX0RFRl9DRkEgZXNwLCBQVF9PTERFU1AtUFRfRUJYO1wKLQkvKkNGSV9PRkZTRVQgY3MsIFBUX0NTLVBUX09MREVTUDsqL1wKLQlDRklfT0ZGU0VUIGVpcCwgUFRfRUlQLVBUX09MREVTUDtcCi0JLypDRklfT0ZGU0VUIGVzLCBQVF9FUy1QVF9PTERFU1A7Ki9cCi0JLypDRklfT0ZGU0VUIGRzLCBQVF9EUy1QVF9PTERFU1A7Ki9cCi0JQ0ZJX09GRlNFVCBlYXgsIFBUX0VBWC1QVF9PTERFU1A7XAotCUNGSV9PRkZTRVQgZWJwLCBQVF9FQlAtUFRfT0xERVNQO1wKLQlDRklfT0ZGU0VUIGVkaSwgUFRfRURJLVBUX09MREVTUDtcCi0JQ0ZJX09GRlNFVCBlc2ksIFBUX0VTSS1QVF9PTERFU1A7XAotCUNGSV9PRkZTRVQgZWR4LCBQVF9FRFgtUFRfT0xERVNQO1wKLQlDRklfT0ZGU0VUIGVjeCwgUFRfRUNYLVBUX09MREVTUDtcCisubWFjcm8gUklORzBfUFRSRUdTX0ZSQU1FCisJQ0ZJX1NUQVJUUFJPQyBzaW1wbGUKKwlDRklfU0lHTkFMX0ZSQU1FCisJQ0ZJX0RFRl9DRkEgZXNwLCBQVF9PTERFU1AtUFRfRUJYCisJLypDRklfT0ZGU0VUIGNzLCBQVF9DUy1QVF9PTERFU1A7Ki8KKwlDRklfT0ZGU0VUIGVpcCwgUFRfRUlQLVBUX09MREVTUAorCS8qQ0ZJX09GRlNFVCBlcywgUFRfRVMtUFRfT0xERVNQOyovCisJLypDRklfT0ZGU0VUIGRzLCBQVF9EUy1QVF9PTERFU1A7Ki8KKwlDRklfT0ZGU0VUIGVheCwgUFRfRUFYLVBUX09MREVTUAorCUNGSV9PRkZTRVQgZWJwLCBQVF9FQlAtUFRfT0xERVNQCisJQ0ZJX09GRlNFVCBlZGksIFBUX0VESS1QVF9PTERFU1AKKwlDRklfT0ZGU0VUIGVzaSwgUFRfRVNJLVBUX09MREVTUAorCUNGSV9PRkZTRVQgZWR4LCBQVF9FRFgtUFRfT0xERVNQCisJQ0ZJX09GRlNFVCBlY3gsIFBUX0VDWC1QVF9PTERFU1AKIAlDRklfT0ZGU0VUIGVieCwgUFRfRUJYLVBUX09MREVTUAorLmVuZG0KIAogRU5UUlkocmV0X2Zyb21fZm9yaykKIAlDRklfU1RBUlRQUk9DCkBAIC0zNjIsNiArNDYzLDcgQEAKIAl4b3JsICVlYnAsJWVicAogCVRSQUNFX0lSUVNfT04KIDE6CW1vdiAgUFRfRlMoJWVzcCksICVmcworCVBUR1NfVE9fR1MKIAlFTkFCTEVfSU5URVJSVVBUU19TWVNFWElUCiAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCkBAIC00MTAsNiArNTEyLDcgQEAKIAkuYWxpZ24gNAogCS5sb25nIDFiLDJiCiAucG9wc2VjdGlvbgorCVBUR1NfVE9fR1NfRVgKIEVORFBST0MoaWEzMl9zeXNlbnRlcl90YXJnZXQpCiAKIAkjIHN5c3RlbSBjYWxsIGhhbmRsZXIgc3R1YgpAQCAtNDUyLDggKzU1NSw3IEBACiByZXN0b3JlX25vY2hlY2s6CiAJVFJBQ0VfSVJRU19JUkVUCiByZXN0b3JlX25vY2hlY2tfbm90cmFjZToKLQlSRVNUT1JFX1JFR1MKLQlhZGRsICQ0LCAlZXNwCQkJIyBza2lwIG9yaWdfZWF4L2Vycm9yX2NvZGUKKwlSRVNUT1JFX1JFR1MgNAkJCSMgc2tpcCBvcmlnX2VheC9lcnJvcl9jb2RlCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CiBpcnFfcmV0dXJuOgogCUlOVEVSUlVQVF9SRVRVUk4KQEAgLTU5NSwyOCArNjk3LDUwIEBACiBFTkQoc3lzY2FsbF9iYWRzeXMpCiAJQ0ZJX0VORFBST0MKIAotI2RlZmluZSBGSVhVUF9FU1BGSVhfU1RBQ0sgXAotCS8qIHNpbmNlIHdlIGFyZSBvbiBhIHdyb25nIHN0YWNrLCB3ZSBjYW50IG1ha2UgaXQgYSBDIGNvZGUgOiggKi8gXAotCVBFUl9DUFUoZ2R0X3BhZ2UsICVlYngpOyBcCi0JR0VUX0RFU0NfQkFTRShHRFRfRU5UUllfRVNQRklYX1NTLCAlZWJ4LCAlZWF4LCAlYXgsICVhbCwgJWFoKTsgXAotCWFkZGwgJWVzcCwgJWVheDsgXAotCXB1c2hsICRfX0tFUk5FTF9EUzsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0OyBcCi0JcHVzaGwgJWVheDsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0OyBcCi0JbHNzICglZXNwKSwgJWVzcDsgXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtODsKLSNkZWZpbmUgVU5XSU5EX0VTUEZJWF9TVEFDSyBcCi0JbW92bCAlc3MsICVlYXg7IFwKLQkvKiBzZWUgaWYgb24gZXNwZml4IHN0YWNrICovIFwKLQljbXB3ICRfX0VTUEZJWF9TUywgJWF4OyBcCi0Jam5lIDI3ZjsgXAotCW1vdmwgJF9fS0VSTkVMX0RTLCAlZWF4OyBcCi0JbW92bCAlZWF4LCAlZHM7IFwKLQltb3ZsICVlYXgsICVlczsgXAotCS8qIHN3aXRjaCB0byBub3JtYWwgc3RhY2sgKi8gXAotCUZJWFVQX0VTUEZJWF9TVEFDSzsgXAotMjc6OworLyoKKyAqIFN5c3RlbSBjYWxscyB0aGF0IG5lZWQgYSBwdF9yZWdzIHBvaW50ZXIuCisgKi8KKyNkZWZpbmUgUFRSRUdTQ0FMTChuYW1lKSBcCisJQUxJR047IFwKK3B0cmVnc18jI25hbWU6IFwKKwlsZWFsIDQoJWVzcCksJWVheDsgXAorCWptcCBzeXNfIyNuYW1lOworCitQVFJFR1NDQUxMKGlvcGwpCitQVFJFR1NDQUxMKGZvcmspCitQVFJFR1NDQUxMKGNsb25lKQorUFRSRUdTQ0FMTCh2Zm9yaykKK1BUUkVHU0NBTEwoZXhlY3ZlKQorUFRSRUdTQ0FMTChzaWdhbHRzdGFjaykKK1BUUkVHU0NBTEwoc2lncmV0dXJuKQorUFRSRUdTQ0FMTChydF9zaWdyZXR1cm4pCitQVFJFR1NDQUxMKHZtODYpCitQVFJFR1NDQUxMKHZtODZvbGQpCisKKy5tYWNybyBGSVhVUF9FU1BGSVhfU1RBQ0sKKwkvKiBzaW5jZSB3ZSBhcmUgb24gYSB3cm9uZyBzdGFjaywgd2UgY2FudCBtYWtlIGl0IGEgQyBjb2RlIDooICovCisJUEVSX0NQVShnZHRfcGFnZSwgJWVieCkKKwlHRVRfREVTQ19CQVNFKEdEVF9FTlRSWV9FU1BGSVhfU1MsICVlYngsICVlYXgsICVheCwgJWFsLCAlYWgpCisJYWRkbCAlZXNwLCAlZWF4CisJcHVzaGwgJF9fS0VSTkVMX0RTCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlwdXNobCAlZWF4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlsc3MgKCVlc3ApLCAlZXNwCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CisuZW5kbQorLm1hY3JvIFVOV0lORF9FU1BGSVhfU1RBQ0sKKwltb3ZsICVzcywgJWVheAorCS8qIHNlZSBpZiBvbiBlc3BmaXggc3RhY2sgKi8KKwljbXB3ICRfX0VTUEZJWF9TUywgJWF4CisJam5lIDI3ZgorCW1vdmwgJF9fS0VSTkVMX0RTLCAlZWF4CisJbW92bCAlZWF4LCAlZHMKKwltb3ZsICVlYXgsICVlcworCS8qIHN3aXRjaCB0byBub3JtYWwgc3RhY2sgKi8KKwlGSVhVUF9FU1BGSVhfU1RBQ0sKKzI3OgorLmVuZG0KIAogLyoKICAqIEJ1aWxkIHRoZSBlbnRyeSBzdHVicyBhbmQgcG9pbnRlciB0YWJsZSB3aXRoIHNvbWUgYXNzZW1ibGVyIG1hZ2ljLgpAQCAtNjcyLDcgKzc5Niw3IEBACiBFTkRQUk9DKGNvbW1vbl9pbnRlcnJ1cHQpCiAJQ0ZJX0VORFBST0MKIAotI2RlZmluZSBCVUlMRF9JTlRFUlJVUFQobmFtZSwgbnIpCVwKKyNkZWZpbmUgQlVJTERfSU5URVJSVVBUMyhuYW1lLCBuciwgZm4pCVwKIEVOVFJZKG5hbWUpCQkJCVwKIAlSSU5HMF9JTlRfRlJBTUU7CQlcCiAJcHVzaGwgJH4obnIpOwkJCVwKQEAgLTY4MCwxMyArODA0LDE1IEBACiAJU0FWRV9BTEw7CQkJXAogCVRSQUNFX0lSUVNfT0ZGCQkJXAogCW1vdmwgJWVzcCwlZWF4OwkJCVwKLQljYWxsIHNtcF8jI25hbWU7CQlcCisJY2FsbCBmbjsJCQlcCiAJam1wIHJldF9mcm9tX2ludHI7CQlcCiAJQ0ZJX0VORFBST0M7CQkJXAogRU5EUFJPQyhuYW1lKQogCisjZGVmaW5lIEJVSUxEX0lOVEVSUlVQVChuYW1lLCBucikJQlVJTERfSU5URVJSVVBUMyhuYW1lLCBuciwgc21wXyMjbmFtZSkKKwogLyogVGhlIGluY2x1ZGUgaXMgd2hlcmUgYWxsIG9mIHRoZSBTTVAgZXRjLiBpbnRlcnJ1cHRzIGNvbWUgZnJvbSAqLwotI2luY2x1ZGUgImVudHJ5X2FyY2guaCIKKyNpbmNsdWRlIDxhc20vZW50cnlfYXJjaC5oPgogCiBFTlRSWShjb3Byb2Nlc3Nvcl9lcnJvcikKIAlSSU5HMF9JTlRfRlJBTUUKQEAgLTEwNjgsNyArMTE5NCwxMCBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJQUxJR04KIGVycm9yX2NvZGU6Ci0JLyogdGhlIGZ1bmN0aW9uIGFkZHJlc3MgaXMgaW4gJWZzJ3Mgc2xvdCBvbiB0aGUgc3RhY2sgKi8KKwkvKiB0aGUgZnVuY3Rpb24gYWRkcmVzcyBpcyBpbiAlZ3MncyBzbG90IG9uIHRoZSBzdGFjayAqLworCXB1c2hsICVmcworCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJLypDRklfUkVMX09GRlNFVCBmcywgMCovCiAJcHVzaGwgJWVzCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAkvKkNGSV9SRUxfT0ZGU0VUIGVzLCAwKi8KQEAgLTEwOTcsMjAgKzEyMjYsMTUgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCUNGSV9SRUxfT0ZGU0VUIGVieCwgMAogCWNsZAotCXB1c2hsICVmcwotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0Ci0JLypDRklfUkVMX09GRlNFVCBmcywgMCovCiAJbW92bCAkKF9fS0VSTkVMX1BFUkNQVSksICVlY3gKIAltb3ZsICVlY3gsICVmcwogCVVOV0lORF9FU1BGSVhfU1RBQ0sKLQlwb3BsICVlY3gKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKLQkvKkNGSV9SRUdJU1RFUiBlcywgZWN4Ki8KLQltb3ZsIFBUX0ZTKCVlc3ApLCAlZWRpCQkjIGdldCB0aGUgZnVuY3Rpb24gYWRkcmVzcworCUdTX1RPX1JFRyAlZWN4CisJbW92bCBQVF9HUyglZXNwKSwgJWVkaQkJIyBnZXQgdGhlIGZ1bmN0aW9uIGFkZHJlc3MKIAltb3ZsIFBUX09SSUdfRUFYKCVlc3ApLCAlZWR4CSMgZ2V0IHRoZSBlcnJvciBjb2RlCiAJbW92bCAkLTEsIFBUX09SSUdfRUFYKCVlc3ApCSMgbm8gc3lzY2FsbCB0byByZXN0YXJ0Ci0JbW92ICAlZWN4LCBQVF9GUyglZXNwKQotCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIEVTKi8KKwlSRUdfVE9fUFRHUyAlZWN4CisJU0VUX0tFUk5FTF9HUyAlZWN4CiAJbW92bCAkKF9fVVNFUl9EUyksICVlY3gKIAltb3ZsICVlY3gsICVkcwogCW1vdmwgJWVjeCwgJWVzCkBAIC0xMTM0LDI2ICsxMjU4LDI3IEBACiAgKiBieSBoYW5kIG9udG8gdGhlIG5ldyBzdGFjayAtIHdoaWxlIHVwZGF0aW5nIHRoZSByZXR1cm4gZWlwIHBhc3QKICAqIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHdvdWxkIGhhdmUgZG9uZSBpdCBmb3Igc3lzZW50ZXIuCiAgKi8KLSNkZWZpbmUgRklYX1NUQUNLKG9mZnNldCwgb2ssIGxhYmVsKQkJXAotCWNtcHcgJF9fS0VSTkVMX0NTLDQoJWVzcCk7CQlcCi0Jam5lIG9rOwkJCQkJXAotbGFiZWw6CQkJCQkJXAotCW1vdmwgVFNTX3N5c2VudGVyX3NwMCtvZmZzZXQoJWVzcCksJWVzcDsJXAotCUNGSV9ERUZfQ0ZBIGVzcCwgMDsJCQlcCi0JQ0ZJX1VOREVGSU5FRCBlaXA7CQkJXAotCXB1c2hmbDsJCQkJCVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDsJCVwKLQlwdXNobCAkX19LRVJORUxfQ1M7CQkJXAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0OwkJXAotCXB1c2hsICRzeXNlbnRlcl9wYXN0X2VzcDsJCVwKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNDsJCVwKKy5tYWNybyBGSVhfU1RBQ0sgb2Zmc2V0IG9rIGxhYmVsCisJY21wdyAkX19LRVJORUxfQ1MsIDQoJWVzcCkKKwlqbmUgXG9rCitcbGFiZWw6CisJbW92bCBUU1Nfc3lzZW50ZXJfc3AwICsgXG9mZnNldCglZXNwKSwgJWVzcAorCUNGSV9ERUZfQ0ZBIGVzcCwgMAorCUNGSV9VTkRFRklORUQgZWlwCisJcHVzaGZsCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlwdXNobCAkX19LRVJORUxfQ1MKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCXB1c2hsICRzeXNlbnRlcl9wYXN0X2VzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJQ0ZJX1JFTF9PRkZTRVQgZWlwLCAwCisuZW5kbQogCiBFTlRSWShkZWJ1ZykKIAlSSU5HMF9JTlRfRlJBTUUKIAljbXBsICRpYTMyX3N5c2VudGVyX3RhcmdldCwoJWVzcCkKIAlqbmUgZGVidWdfc3RhY2tfY29ycmVjdAotCUZJWF9TVEFDSygxMiwgZGVidWdfc3RhY2tfY29ycmVjdCwgZGVidWdfZXNwX2ZpeF9pbnNuKQorCUZJWF9TVEFDSyAxMiwgZGVidWdfc3RhY2tfY29ycmVjdCwgZGVidWdfZXNwX2ZpeF9pbnNuCiBkZWJ1Z19zdGFja19jb3JyZWN0OgogCXB1c2hsICQtMQkJCSMgbWFyayB0aGlzIGFzIGFuIGludAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CkBAIC0xMjExLDcgKzEzMzYsNyBAQAogCiBubWlfc3RhY2tfZml4dXA6CiAJUklORzBfSU5UX0ZSQU1FCi0JRklYX1NUQUNLKDEyLG5taV9zdGFja19jb3JyZWN0LCAxKQorCUZJWF9TVEFDSyAxMiwgbm1pX3N0YWNrX2NvcnJlY3QsIDEKIAlqbXAgbm1pX3N0YWNrX2NvcnJlY3QKIAogbm1pX2RlYnVnX3N0YWNrX2NoZWNrOgpAQCAtMTIyMiw3ICsxMzQ3LDcgQEAKIAlqYiBubWlfc3RhY2tfY29ycmVjdAogCWNtcGwgJGRlYnVnX2VzcF9maXhfaW5zbiwoJWVzcCkKIAlqYSBubWlfc3RhY2tfY29ycmVjdAotCUZJWF9TVEFDSygyNCxubWlfc3RhY2tfY29ycmVjdCwgMSkKKwlGSVhfU1RBQ0sgMjQsIG5taV9zdGFja19jb3JyZWN0LCAxCiAJam1wIG5taV9zdGFja19jb3JyZWN0CiAKIG5taV9lc3BmaXhfc3RhY2s6CkBAIC0xMjM0LDcgKzEzNTksNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJcHVzaGwgJWVzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0Ci0JYWRkdyAkNCwgKCVlc3ApCisJYWRkbCAkNCwgKCVlc3ApCiAJLyogY29weSB0aGUgaXJldCBmcmFtZSBvZiAxMiBieXRlcyAqLwogCS5yZXB0IDMKIAlwdXNobCAxNiglZXNwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwppbmRleCBhMTM0NjIxLi44M2QxODM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNDgsMTAgKzQ4LDExIEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KIAogLyogQXZvaWQgX19BU1NFTUJMRVJfXydpZnlpbmcgPGxpbnV4L2F1ZGl0Lmg+IGp1c3QgZm9yIHRoaXMuICAqLwogI2luY2x1ZGUgPGxpbnV4L2VsZi1lbS5oPgpAQCAtNzYsMjAgKzc3LDE3IEBACiAJbW92cSA4KCVyYnApLCAlcnNpCiAJc3VicSAkTUNPVU5UX0lOU05fU0laRSwgJXJkaQogCi0uZ2xvYmwgZnRyYWNlX2NhbGwKLWZ0cmFjZV9jYWxsOgorR0xPQkFMKGZ0cmFjZV9jYWxsKQogCWNhbGwgZnRyYWNlX3N0dWIKIAogCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0uZ2xvYmwgZnRyYWNlX2dyYXBoX2NhbGwKLWZ0cmFjZV9ncmFwaF9jYWxsOgorR0xPQkFMKGZ0cmFjZV9ncmFwaF9jYWxsKQogCWptcCBmdHJhY2Vfc3R1YgogI2VuZGlmCiAKLS5nbG9ibCBmdHJhY2Vfc3R1YgotZnRyYWNlX3N0dWI6CitHTE9CQUwoZnRyYWNlX3N0dWIpCiAJcmV0cQogRU5EKGZ0cmFjZV9jYWxsZXIpCiAKQEAgLTEwOSw4ICsxMDcsNyBAQAogCWpueiBmdHJhY2VfZ3JhcGhfY2FsbGVyCiAjZW5kaWYKIAotLmdsb2JsIGZ0cmFjZV9zdHViCi1mdHJhY2Vfc3R1YjoKK0dMT0JBTChmdHJhY2Vfc3R1YikKIAlyZXRxCiAKIHRyYWNlOgpAQCAtMTQ3LDkgKzE0NCw3IEBACiAJcmV0cQogRU5EKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCiAKLQotLmdsb2JsIHJldHVybl90b19oYW5kbGVyCi1yZXR1cm5fdG9faGFuZGxlcjoKK0dMT0JBTChyZXR1cm5fdG9faGFuZGxlcikKIAlzdWJxICAkODAsICVyc3AKIAogCW1vdnEgJXJheCwgKCVyc3ApCkBAIC0xODcsNiArMTgyLDcgQEAKIEVOVFJZKG5hdGl2ZV91c2VyZ3Nfc3lzcmV0NjQpCiAJc3dhcGdzCiAJc3lzcmV0cQorRU5EUFJPQyhuYXRpdmVfdXNlcmdzX3N5c3JldDY0KQogI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVCAqLwogCiAKQEAgLTIwOSw3ICsyMDUsNyBAQAogCiAJLyogJXJzcDphdCBGUkFNRUVORCAqLwogCS5tYWNybyBGSVhVUF9UT1BfT0ZfU1RBQ0sgdG1wIG9mZnNldD0wCi0JbW92cSAlZ3M6cGRhX29sZHJzcCxcdG1wCisJbW92cSBQRVJfQ1BVX1ZBUihvbGRfcnNwKSxcdG1wCiAJbW92cSBcdG1wLFJTUCtcb2Zmc2V0KCVyc3ApCiAJbW92cSAkX19VU0VSX0RTLFNTK1xvZmZzZXQoJXJzcCkKIAltb3ZxICRfX1VTRVJfQ1MsQ1MrXG9mZnNldCglcnNwKQpAQCAtMjIwLDcgKzIxNiw3IEBACiAKIAkubWFjcm8gUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgdG1wIG9mZnNldD0wCiAJbW92cSBSU1ArXG9mZnNldCglcnNwKSxcdG1wCi0JbW92cSBcdG1wLCVnczpwZGFfb2xkcnNwCisJbW92cSBcdG1wLFBFUl9DUFVfVkFSKG9sZF9yc3ApCiAJbW92cSBFRkxBR1MrXG9mZnNldCglcnNwKSxcdG1wCiAJbW92cSBcdG1wLFIxMStcb2Zmc2V0KCVyc3ApCiAJLmVuZG0KQEAgLTMzNiwxNSArMzMyLDE1IEBACiAJamUgMWYKIAlTV0FQR1MKIAkvKgotCSAqIGlycWNvdW50IGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBDUFUgaXMgYWxyZWFkeSBvbiBhbiBpbnRlcnJ1cHQgc3RhY2sKKwkgKiBpcnFfY291bnQgaXMgdXNlZCB0byBjaGVjayBpZiBhIENQVSBpcyBhbHJlYWR5IG9uIGFuIGludGVycnVwdCBzdGFjawogCSAqIG9yIG5vdC4gV2hpbGUgdGhpcyBpcyBlc3NlbnRpYWxseSByZWR1bmRhbnQgd2l0aCBwcmVlbXB0X2NvdW50IGl0IGlzCiAJICogYSBsaXR0bGUgY2hlYXBlciB0byB1c2UgYSBzZXBhcmF0ZSBjb3VudGVyIGluIHRoZSBQREEgKHNob3J0IG9mCiAJICogbW92aW5nIGlycV9lbnRlciBpbnRvIGFzc2VtYmx5LCB3aGljaCB3b3VsZCBiZSB0b28gbXVjaCB3b3JrKQogCSAqLwotMToJaW5jbCAlZ3M6cGRhX2lycWNvdW50CisxOglpbmNsIFBFUl9DUFVfVkFSKGlycV9jb3VudCkKIAlqbmUgMmYKIAlwb3BxX2NmaSAlcmF4CQkJLyogbW92ZSByZXR1cm4gYWRkcmVzcy4uLiAqLwotCW1vdiAlZ3M6cGRhX2lycXN0YWNrcHRyLCVyc3AKKwltb3YgUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3B0ciksJXJzcAogCUVNUFRZX0ZSQU1FIDAKIAlwdXNocV9jZmkgJXJicAkJCS8qIGJhY2tsaW5rIGZvciB1bndpbmRlciAqLwogCXB1c2hxX2NmaSAlcmF4CQkJLyogLi4uIHRvIHRoZSBuZXcgc3RhY2sgKi8KQEAgLTQwOSw2ICs0MDUsOCBAQAogRU5UUlkocmV0X2Zyb21fZm9yaykKIAlERUZBVUxUX0ZSQU1FCiAKKwlMT0NLIDsgYnRyICRUSUZfRk9SSyxUSV9mbGFncyglcjgpCisKIAlwdXNoIGtlcm5lbF9lZmxhZ3MoJXJpcCkKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAogCXBvcGYJCQkJCSMgcmVzZXQga2VybmVsIGVmbGFncwpAQCAtNDY4LDcgKzQ2Niw3IEBACiBFTlRSWShzeXN0ZW1fY2FsbCkKIAlDRklfU1RBUlRQUk9DCXNpbXBsZQogCUNGSV9TSUdOQUxfRlJBTUUKLQlDRklfREVGX0NGQQlyc3AsUERBX1NUQUNLT0ZGU0VUCisJQ0ZJX0RFRl9DRkEJcnNwLEtFUk5FTF9TVEFDS19PRkZTRVQKIAlDRklfUkVHSVNURVIJcmlwLHJjeAogCS8qQ0ZJX1JFR0lTVEVSCXJmbGFncyxyMTEqLwogCVNXQVBHU19VTlNBRkVfU1RBQ0sKQEAgLTQ3OSw4ICs0NzcsOCBAQAogCSAqLwogRU5UUlkoc3lzdGVtX2NhbGxfYWZ0ZXJfc3dhcGdzKQogCi0JbW92cQklcnNwLCVnczpwZGFfb2xkcnNwCi0JbW92cQklZ3M6cGRhX2tlcm5lbHN0YWNrLCVyc3AKKwltb3ZxCSVyc3AsUEVSX0NQVV9WQVIob2xkX3JzcCkKKwltb3ZxCVBFUl9DUFVfVkFSKGtlcm5lbF9zdGFjayksJXJzcAogCS8qCiAJICogTm8gbmVlZCB0byBmb2xsb3cgdGhpcyBpcnFzIG9mZi9vbiBzZWN0aW9uIC0gaXQncyBzdHJhaWdodAogCSAqIGFuZCBzaG9ydDoKQEAgLTUyMyw3ICs1MjEsNyBAQAogCUNGSV9SRUdJU1RFUglyaXAscmN4CiAJUkVTVE9SRV9BUkdTIDAsLUFSR19TS0lQLDEKIAkvKkNGSV9SRUdJU1RFUglyZmxhZ3MscjExKi8KLQltb3ZxCSVnczpwZGFfb2xkcnNwLCAlcnNwCisJbW92cQlQRVJfQ1BVX1ZBUihvbGRfcnNwKSwgJXJzcAogCVVTRVJHU19TWVNSRVQ2NAogCiAJQ0ZJX1JFU1RPUkVfU1RBVEUKQEAgLTYzMCwxNiArNjI4LDE0IEBACiAgKiBTeXNjYWxsIHJldHVybiBwYXRoIGVuZGluZyB3aXRoIElSRVQuCiAgKiBIYXMgY29ycmVjdCB0b3Agb2Ygc3RhY2ssIGJ1dCBwYXJ0aWFsIHN0YWNrIGZyYW1lLgogICovCi0JLmdsb2JsIGludF9yZXRfZnJvbV9zeXNfY2FsbAotCS5nbG9ibCBpbnRfd2l0aF9jaGVjawotaW50X3JldF9mcm9tX3N5c19jYWxsOgorR0xPQkFMKGludF9yZXRfZnJvbV9zeXNfY2FsbCkKIAlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9OT05FKQogCVRSQUNFX0lSUVNfT0ZGCiAJdGVzdGwgJDMsQ1MtQVJHT0ZGU0VUKCVyc3ApCiAJamUgcmV0aW50X3Jlc3RvcmVfYXJncwogCW1vdmwgJF9USUZfQUxMV09SS19NQVNLLCVlZGkKIAkvKiBlZGk6CW1hc2sgdG8gY2hlY2sgKi8KLWludF93aXRoX2NoZWNrOgorR0xPQkFMKGludF93aXRoX2NoZWNrKQogCUxPQ0tERVBfU1lTX0VYSVRfSVJRCiAJR0VUX1RIUkVBRF9JTkZPKCVyY3gpCiAJbW92bCBUSV9mbGFncyglcmN4KSwlZWR4CkBAIC04MzMsMTEgKzgyOSwxMSBAQAogCVhDUFRfRlJBTUUKIAlhZGRxICQtMHg4MCwoJXJzcCkJCS8qIEFkanVzdCB2ZWN0b3IgdG8gWy0yNTYsLTFdIHJhbmdlICovCiAJaW50ZXJydXB0IGRvX0lSUQotCS8qIDAoJXJzcCk6IG9sZHJzcC1BUkdPRkZTRVQgKi8KKwkvKiAwKCVyc3ApOiBvbGRfcnNwLUFSR09GRlNFVCAqLwogcmV0X2Zyb21faW50cjoKIAlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9OT05FKQogCVRSQUNFX0lSUVNfT0ZGCi0JZGVjbCAlZ3M6cGRhX2lycWNvdW50CisJZGVjbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCiAJbGVhdmVxCiAJQ0ZJX0RFRl9DRkFfUkVHSVNURVIJcnNwCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUCS04CkBAIC05ODIsOCArOTc4LDEwIEBACiAJaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19YODZfVVYKIGFwaWNpbnRlcnJ1cHQgVVZfQkFVX01FU1NBR0UgXAogCXV2X2JhdV9tZXNzYWdlX2ludHIxIHV2X2JhdV9tZXNzYWdlX2ludGVycnVwdAorI2VuZGlmCiBhcGljaW50ZXJydXB0IExPQ0FMX1RJTUVSX1ZFQ1RPUiBcCiAJYXBpY190aW1lcl9pbnRlcnJ1cHQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0CiAKQEAgLTEwNzMsMTAgKzEwNzEsMTAgQEAKIAlUUkFDRV9JUlFTX09GRgogCW1vdnEgJXJzcCwlcmRpCQkvKiBwdF9yZWdzIHBvaW50ZXIgKi8KIAl4b3JsICVlc2ksJWVzaQkJLyogbm8gZXJyb3IgY29kZSAqLwotCW1vdnEgJWdzOnBkYV9kYXRhX29mZnNldCwgJXJicAotCXN1YnEgJEVYQ0VQVElPTl9TVEtTWiwgcGVyX2NwdV9faW5pdF90c3MgKyBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXJicCkKKwlQRVJfQ1BVKGluaXRfdHNzLCAlcmJwKQorCXN1YnEgJEVYQ0VQVElPTl9TVEtTWiwgVFNTX2lzdCArIChcaXN0IC0gMSkgKiA4KCVyYnApCiAJY2FsbCBcZG9fc3ltCi0JYWRkcSAkRVhDRVBUSU9OX1NUS1NaLCBwZXJfY3B1X19pbml0X3RzcyArIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQorCWFkZHEgJEVYQ0VQVElPTl9TVEtTWiwgVFNTX2lzdCArIChcaXN0IC0gMSkgKiA4KCVyYnApCiAJam1wIHBhcmFub2lkX2V4aXQJLyogJWVieDogbm8gc3dhcGdzIGZsYWcgKi8KIAlDRklfRU5EUFJPQwogRU5EKFxzeW0pCkBAIC0xMTM4LDcgKzExMzYsNyBAQAogCUNGSV9TVEFSVFBST0MKIAlwdXNoZgogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfQU5ZIHwgfihDTEJSX1JESSkpCisJRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfQU5ZICYgfkNMQlJfUkRJKQogCVNXQVBHUwogZ3NfY2hhbmdlOgogCW1vdmwgJWVkaSwlZ3MKQEAgLTEyNjAsMTQgKzEyNTgsMTQgQEAKIAlDRklfUkVMX09GRlNFVCByYnAsMAogCW1vdiAgJXJzcCwlcmJwCiAJQ0ZJX0RFRl9DRkFfUkVHSVNURVIgcmJwCi0JaW5jbCAlZ3M6cGRhX2lycWNvdW50Ci0JY21vdmUgJWdzOnBkYV9pcnFzdGFja3B0ciwlcnNwCisJaW5jbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCisJY21vdmUgUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3B0ciksJXJzcAogCXB1c2ggICVyYnAJCQkjIGJhY2tsaW5rIGZvciBvbGQgdW53aW5kZXIKIAljYWxsIF9fZG9fc29mdGlycQogCWxlYXZlcQogCUNGSV9ERUZfQ0ZBX1JFR0lTVEVSCXJzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAgIC04Ci0JZGVjbCAlZ3M6cGRhX2lycWNvdW50CisJZGVjbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCiAJcmV0CiAJQ0ZJX0VORFBST0MKIEVORChjYWxsX3NvZnRpcnEpCkBAIC0xMjk3LDE1ICsxMjk1LDE1IEBACiAJbW92cSAlcmRpLCAlcnNwICAgICAgICAgICAgIyB3ZSBkb24ndCByZXR1cm4sIGFkanVzdCB0aGUgc3RhY2sgZnJhbWUKIAlDRklfRU5EUFJPQwogCURFRkFVTFRfRlJBTUUKLTExOglpbmNsICVnczpwZGFfaXJxY291bnQKKzExOglpbmNsIFBFUl9DUFVfVkFSKGlycV9jb3VudCkKIAltb3ZxICVyc3AsJXJicAogCUNGSV9ERUZfQ0ZBX1JFR0lTVEVSIHJicAotCWNtb3Z6cSAlZ3M6cGRhX2lycXN0YWNrcHRyLCVyc3AKKwljbW92enEgUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3B0ciksJXJzcAogCXB1c2hxICVyYnAJCQkjIGJhY2tsaW5rIGZvciBvbGQgdW53aW5kZXIKIAljYWxsIHhlbl9ldnRjaG5fZG9fdXBjYWxsCiAJcG9wcSAlcnNwCiAJQ0ZJX0RFRl9DRkFfUkVHSVNURVIgcnNwCi0JZGVjbCAlZ3M6cGRhX2lycWNvdW50CisJZGVjbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCiAJam1wICBlcnJvcl9leGl0CiAJQ0ZJX0VORFBST0MKIEVORChkb19oeXBlcnZpc29yX2NhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VzNzAwMF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2VzNzAwMF8zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzY5OWM5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9lczcwMDBfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotICogV3JpdHRlbiBieTogR2FycnkgRm9yc2dyZW4sIFVuaXN5cyBDb3Jwb3JhdGlvbgotICogICAgICAgICAgICAgTmF0YWxpZSBQcm90YXNldmljaCwgVW5pc3lzIENvcnBvcmF0aW9uCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdG8gY29uZmlndXJlIGFuZCBpbnRlcmZhY2UKLSAqIHdpdGggVW5pc3lzIEVTNzAwMCBzZXJpZXMgaGFyZHdhcmUgc3lzdGVtIG1hbmFnZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzIFVuaXN5cyBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQotICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIENvbnRhY3QgaW5mb3JtYXRpb246IFVuaXN5cyBDb3Jwb3JhdGlvbiwgVG93bnNoaXAgTGluZSAmIFVuaW9uIE1lZXRpbmcKLSAqIFJvYWRzLUEsIFVuaXN5cyBXYXksIEJsdWUgQmVsbCwgUGVubnN5bHZhbmlhLCAxOTQyNCwgb3I6Ci0gKgotICogaHR0cDovL3d3dy51bmlzeXMuY29tCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbm1pLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPG1hY2hfbXBwYXJzZS5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLS8qCi0gKiBFUzcwMDAgY2hpcHNldHMKLSAqLwotCi0jZGVmaW5lIE5PTl9VTklTWVMJCTAKLSNkZWZpbmUgRVM3MDAwX0NMQVNTSUMJCTEKLSNkZWZpbmUgRVM3MDAwX1pPUlJPCQkyCi0KLQotI2RlZmluZQlNSVBfUkVHCQkJMQotI2RlZmluZQlNSVBfUFNBSV9SRUcJCTQKLQotI2RlZmluZQlNSVBfQlVTWQkJMQotI2RlZmluZQlNSVBfU1BJTgkJMHhmMDAwMAotI2RlZmluZQlNSVBfVkFMSUQJCTB4MDEwMDAwMDAwMDAwMDAwMFVMTAotI2RlZmluZQlNSVBfUE9SVChWQUxVRSkJKChWQUxVRSA+PiAzMikgJiAweGZmZmYpCi0KLSNkZWZpbmUJTUlQX1JEX0xPKFZBTFVFKQkoVkFMVUUgJiAweGZmZmZmZmZmKQotCi1zdHJ1Y3QgbWlwX3JlZ19pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWlwX2luZm87Ci0JdW5zaWduZWQgbG9uZyBsb25nIGRlbGl2ZXJ5X2luZm87Ci0JdW5zaWduZWQgbG9uZyBsb25nIGhvc3RfcmVnOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBtaXBfcmVnOwotfTsKLQotc3RydWN0IHBhcnRfaW5mbyB7Ci0JdW5zaWduZWQgY2hhciB0eXBlOwotCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgcGFydF9pZDsKLQl1bnNpZ25lZCBjaGFyIGFwaWNfbW9kZTsKLQl1bnNpZ25lZCBsb25nIHNudW07Ci0JY2hhciBwdHlwZVsxNl07Ci0JY2hhciBzbmFtZVs2NF07Ci0JY2hhciBwbmFtZVs2NF07Ci19OwotCi1zdHJ1Y3QgcHNhaSB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5X3R5cGU7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGJlcF9hZGRyOwotfTsKLQotc3RydWN0IGVzNzAwMF9tZW1faW5mbyB7Ci0JdW5zaWduZWQgY2hhciB0eXBlOwotCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgcmVzdls2XTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyAgc2l6ZTsKLX07Ci0KLXN0cnVjdCBlczcwMDBfb2VtX3RhYmxlIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgaGRyOwotCXN0cnVjdCBtaXBfcmVnX2luZm8gbWlwOwotCXN0cnVjdCBwYXJ0X2luZm8gcGlmOwotCXN0cnVjdCBlczcwMDBfbWVtX2luZm8gc2htOwotCXN0cnVjdCBwc2FpIHBzYWk7Ci19OwotCi0jaWZkZWYgQ09ORklHX0FDUEkKLQotc3RydWN0IG9lbV90YWJsZSB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIEhlYWRlcjsKLQl1MzIgT0VNVGFibGVBZGRyOwotCXUzMiBPRU1UYWJsZVNpemU7Ci19OwotCi1leHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKTsKLWV4dGVybiB2b2lkIHVubWFwX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nIG9lbV9hZGRyKTsKLSNlbmRpZgotCi1zdHJ1Y3QgbWlwX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9mZl8wOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfODsKLQl1bnNpZ25lZCBsb25nIGxvbmcgb2ZmXzEwOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfMTg7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9mZl8yMDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgb2ZmXzI4OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfMzA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9mZl8zODsKLX07Ci0KLSNkZWZpbmUJTUlQX1NXX0FQSUMJCTB4MTAyMGIKLSNkZWZpbmUJTUlQX0ZVTkMoVkFMVUUpCQkoVkFMVUUgJiAweGZmKQotCi0vKgotICogRVM3MDAwIEdsb2JhbHMKLSAqLwotCi1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqcHNhaSA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IG1pcF9yZWcJCSptaXBfcmVnOwotc3RhdGljIHN0cnVjdCBtaXBfcmVnCQkqaG9zdF9yZWc7Ci1zdGF0aWMgaW50IAkJCW1pcF9wb3J0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcJCW1pcF9hZGRyLCBob3N0X2FkZHI7Ci0KLWludCBlczcwMDBfcGxhdDsKLQotLyoKLSAqIEdTSSBvdmVycmlkZSBmb3IgRVM3MDAwIHBsYXRmb3Jtcy4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGJhc2U7Ci0KLXN0YXRpYyBpbnQKLWVzNzAwMF9yZW5hbWVfZ3NpKGludCBpb2FwaWMsIGludCBnc2kpCi17Ci0JaWYgKGVzNzAwMF9wbGF0ID09IEVTNzAwMF9aT1JSTykKLQkJcmV0dXJuIGdzaTsKLQotCWlmICghYmFzZSkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykKLQkJCWJhc2UgKz0gbnJfaW9hcGljX3JlZ2lzdGVyc1tpXTsKLQl9Ci0KLQlpZiAoIWlvYXBpYyAmJiAoZ3NpIDwgMTYpKQotCQlnc2kgKz0gYmFzZTsKLQlyZXR1cm4gZ3NpOwotfQotCi1zdGF0aWMgaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9taXAoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBlaXApCi17Ci0JdW5zaWduZWQgbG9uZyB2ZWN0ID0gMCwgcHNhaXZhbCA9IDA7Ci0KLQlpZiAocHNhaSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQl2ZWN0ID0gKCh1bnNpZ25lZCBsb25nKV9fcGEoZWlwKS8weDEwMDApIDw8IDE2OwotCXBzYWl2YWwgPSAoMHgxMDAwMDAwIHwgdmVjdCB8IGNwdSk7Ci0KLQl3aGlsZSAoKnBzYWkgJiAweDEwMDAwMDApCi0JCTsKLQotCSpwc2FpID0gcHNhaXZhbDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBub29wX3dhaXRfZm9yX2RlYXNzZXJ0KGF0b21pY190ICpkZWFzc2VydF9ub3RfdXNlZCkKLXsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZXM3MDAwX3VwZGF0ZV9nZW5hcGljKHZvaWQpCi17Ci0JZ2VuYXBpYy0+d2FrZXVwX2NwdSA9IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9taXA7Ci0KLQkvKiBNUEVOVElVTUlJSSAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2ICYmCi0JICAgIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+PSA3IHx8IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDw9IDExKSkgewotCQllczcwMDBfdXBkYXRlX2dlbmFwaWNfdG9fY2x1c3RlcigpOwotCQlnZW5hcGljLT53YWl0X2Zvcl9pbml0X2RlYXNzZXJ0ID0gbm9vcF93YWl0X2Zvcl9kZWFzc2VydDsKLQkJZ2VuYXBpYy0+d2FrZXVwX2NwdSA9IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9taXA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0Ci1zZXR1cF91bmlzeXModm9pZCkKLXsKLQkvKgotCSAqIERldGVybWluZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgRVM3MDAwIGN1cnJlbnRseSBydW5uaW5nLgotCSAqCi0JICogZXM3MDAwX3BsYXQgPSAxIGlmIHRoZSBtYWNoaW5lIGlzIGEgNXh4IEVTNzAwMCBib3gKLQkgKiBlczcwMDBfcGxhdCA9IDIgaWYgdGhlIG1hY2hpbmUgaXMgYSB4ODZfNjQgRVM3MDAwIGJveAotCSAqCi0JICovCi0JaWYgKCEoYm9vdF9jcHVfZGF0YS54ODYgPD0gMTUgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPD0gMikpCi0JCWVzNzAwMF9wbGF0ID0gRVM3MDAwX1pPUlJPOwotCWVsc2UKLQkJZXM3MDAwX3BsYXQgPSBFUzcwMDBfQ0xBU1NJQzsKLQlpb2FwaWNfcmVudW1iZXJfaXJxID0gZXM3MDAwX3JlbmFtZV9nc2k7Ci0KLQl4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYyA9IGVzNzAwMF91cGRhdGVfZ2VuYXBpYzsKLX0KLQotLyoKLSAqIFBhcnNlIHRoZSBPRU0gVGFibGUKLSAqLwotCi1pbnQgX19pbml0Ci1wYXJzZV91bmlzeXNfb2VtIChjaGFyICpvZW1wdHIpCi17Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaTsKLQlpbnQgCQkJc3VjY2VzcyA9IDA7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgdHlwZSwgc2l6ZTsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICB2YWw7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgKnRwID0gTlVMTDsKLQlzdHJ1Y3QgcHNhaSAgICAgICAgICAgICAqcHNhaXAgPSBOVUxMOwotCXN0cnVjdCBtaXBfcmVnX2luZm8gCSptaTsKLQlzdHJ1Y3QgbWlwX3JlZwkJKmhvc3QsICptaXA7Ci0KLQl0cCA9IG9lbXB0cjsKLQotCXRwICs9IDg7Ci0KLQlmb3IgKGk9MDsgaSA8PSA2OyBpKyspIHsKLQkJdHlwZSA9ICp0cCsrOwotCQlzaXplID0gKnRwKys7Ci0JCXRwIC09IDI7Ci0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIE1JUF9SRUc6Ci0JCQltaSA9IChzdHJ1Y3QgbWlwX3JlZ19pbmZvICopdHA7Ci0JCQl2YWwgPSBNSVBfUkRfTE8obWktPmhvc3RfcmVnKTsKLQkJCWhvc3RfYWRkciA9IHZhbDsKLQkJCWhvc3QgPSAoc3RydWN0IG1pcF9yZWcgKil2YWw7Ci0JCQlob3N0X3JlZyA9IF9fdmEoaG9zdCk7Ci0JCQl2YWwgPSBNSVBfUkRfTE8obWktPm1pcF9yZWcpOwotCQkJbWlwX3BvcnQgPSBNSVBfUE9SVChtaS0+bWlwX2luZm8pOwotCQkJbWlwX2FkZHIgPSB2YWw7Ci0JCQltaXAgPSAoc3RydWN0IG1pcF9yZWcgKil2YWw7Ci0JCQltaXBfcmVnID0gX192YShtaXApOwotCQkJcHJfZGVidWcoImVzNzAwMF9taXBjZmc6IGhvc3RfcmVnID0gMHglbHggXG4iLAotCQkJCSAodW5zaWduZWQgbG9uZylob3N0X3JlZyk7Ci0JCQlwcl9kZWJ1ZygiZXM3MDAwX21pcGNmZzogbWlwX3JlZyA9IDB4JWx4IFxuIiwKLQkJCQkgKHVuc2lnbmVkIGxvbmcpbWlwX3JlZyk7Ci0JCQlzdWNjZXNzKys7Ci0JCQlicmVhazsKLQkJY2FzZSBNSVBfUFNBSV9SRUc6Ci0JCQlwc2FpcCA9IChzdHJ1Y3QgcHNhaSAqKXRwOwotCQkJaWYgKHRwICE9IE5VTEwpIHsKLQkJCQlpZiAocHNhaXAtPmFkZHIpCi0JCQkJCXBzYWkgPSBfX3ZhKHBzYWlwLT5hZGRyKTsKLQkJCQllbHNlCi0JCQkJCXBzYWkgPSBOVUxMOwotCQkJCXN1Y2Nlc3MrKzsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJdHAgKz0gc2l6ZTsKLQl9Ci0KLQlpZiAoc3VjY2VzcyA8IDIpIHsKLQkJZXM3MDAwX3BsYXQgPSBOT05fVU5JU1lTOwotCX0gZWxzZQotCQlzZXR1cF91bmlzeXMoKTsKLQlyZXR1cm4gZXM3MDAwX3BsYXQ7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQUNQSQotc3RhdGljIHVuc2lnbmVkIGxvbmcgb2VtX2FkZHJYOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb2VtX3NpemU7Ci1pbnQgX19pbml0IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKQotewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKLQlpbnQgaSA9IDA7Ci0KLQl3aGlsZSAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X3RhYmxlKCJPRU0xIiwgaSsrLCAmaGVhZGVyKSkpIHsKLQkJaWYgKCFtZW1jbXAoKGNoYXIgKikgJmhlYWRlci0+b2VtX2lkLCAiVU5JU1lTIiwgNikpIHsKLQkJCXN0cnVjdCBvZW1fdGFibGUgKnQgPSAoc3RydWN0IG9lbV90YWJsZSAqKWhlYWRlcjsKLQotCQkJb2VtX2FkZHJYID0gdC0+T0VNVGFibGVBZGRyOwotCQkJb2VtX3NpemUgPSB0LT5PRU1UYWJsZVNpemU7Ci0KLQkJCSpvZW1fYWRkciA9ICh1bnNpZ25lZCBsb25nKV9fYWNwaV9tYXBfdGFibGUob2VtX2FkZHJYLAotCQkJCQkJCQkgICAgb2VtX3NpemUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC0xOwotfQotCi12b2lkIF9faW5pdCB1bm1hcF91bmlzeXNfYWNwaV9vZW1fdGFibGUodW5zaWduZWQgbG9uZyBvZW1fYWRkcikKLXsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZAotZXM3MDAwX3NwaW4oaW50IG4pCi17Ci0JaW50IGkgPSAwOwotCi0Jd2hpbGUgKGkrKyA8IG4pCi0JCXJlcF9ub3AoKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWVzNzAwMF9taXBfd3JpdGUoc3RydWN0IG1pcF9yZWcgKm1pcF9yZWcpCi17Ci0JaW50CQkJc3RhdHVzID0gMDsKLQlpbnQJCQlzcGluOwotCi0Jc3BpbiA9IE1JUF9TUElOOwotCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcgbG9uZylob3N0X3JlZy0+b2ZmXzM4ICYKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylNSVBfVkFMSUQpICE9IDApIHsKLQkJCWlmICgtLXNwaW4gPD0gMCkgewotCQkJCXByaW50aygiZXM3MDAwX21pcF93cml0ZTogVGltZW91dCB3YWl0aW5nIGZvciBIb3N0IFZhbGlkIEZsYWciKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCWVzNzAwMF9zcGluKE1JUF9TUElOKTsKLQl9Ci0KLQltZW1jcHkoaG9zdF9yZWcsIG1pcF9yZWcsIHNpemVvZihzdHJ1Y3QgbWlwX3JlZykpOwotCW91dGIoMSwgbWlwX3BvcnQpOwotCi0Jc3BpbiA9IE1JUF9TUElOOwotCi0Jd2hpbGUgKCgodW5zaWduZWQgbG9uZyBsb25nKW1pcF9yZWctPm9mZl8zOCAmCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpTUlQX1ZBTElEKSA9PSAwKSB7Ci0JCWlmICgtLXNwaW4gPD0gMCkgewotCQkJcHJpbnRrKCJlczcwMDBfbWlwX3dyaXRlOiBUaW1lb3V0IHdhaXRpbmcgZm9yIE1JUCBWYWxpZCBGbGFnIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJZXM3MDAwX3NwaW4oTUlQX1NQSU4pOwotCX0KLQotCXN0YXR1cyA9ICgodW5zaWduZWQgbG9uZyBsb25nKW1pcF9yZWctPm9mZl8wICYKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykweGZmZmYwMDAwMDAwMDAwVUxMKSA+PiA0ODsKLQltaXBfcmVnLT5vZmZfMzggPSAoKHVuc2lnbmVkIGxvbmcgbG9uZyltaXBfcmVnLT5vZmZfMzggJgotCQkodW5zaWduZWQgbG9uZyBsb25nKX5NSVBfVkFMSUQpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgX19pbml0Ci1lczcwMDBfc3dfYXBpYyh2b2lkKQotewotCWlmIChlczcwMDBfcGxhdCkgewotCQlpbnQgbWlwX3N0YXR1czsKLQkJc3RydWN0IG1pcF9yZWcgZXM3MDAwX21pcF9yZWc7Ci0KLQkJcHJpbnRrKCJFUzcwMDA6IEVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOwotICAgICAgICAJbWVtc2V0KCZlczcwMDBfbWlwX3JlZywgMCwgc2l6ZW9mKHN0cnVjdCBtaXBfcmVnKSk7Ci0gICAgICAgIAllczcwMDBfbWlwX3JlZy5vZmZfMCA9IE1JUF9TV19BUElDOwotICAgICAgICAJZXM3MDAwX21pcF9yZWcub2ZmXzM4ID0gKE1JUF9WQUxJRCk7Ci0gICAgICAgIAl3aGlsZSAoKG1pcF9zdGF0dXMgPSBlczcwMDBfbWlwX3dyaXRlKCZlczcwMDBfbWlwX3JlZykpICE9IDApCi0gICAgICAgICAgICAgIAkJcHJpbnRrKCJlczcwMDBfc3dfYXBpYzogY29tbWFuZCBmYWlsZWQsIHN0YXR1cyA9ICV4XG4iLAotCQkJCW1pcF9zdGF0dXMpOwotCQlyZXR1cm47Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiY2VkNzguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNCBKYW1lcyBDbGV2ZXJkb24sIElCTS4KLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCi0gKgotICogR2VuZXJpYyBBUElDIHN1Yi1hcmNoIHByb2JlIGxheWVyLgotICoKLSAqIEhhY2tlZCBmb3IgeDg2LTY0IGJ5IEphbWVzIENsZXZlcmRvbiBmcm9tIGkzODYgYXJjaGl0ZWN0dXJlIGNvZGUgYnkKLSAqIE1hcnRpbiBCbGlnaCwgQW5kaSBLbGVlbiwgSmFtZXMgQm90dG9tbGV5LCBKb2huIFN0dWx0eiwgYW5kCi0gKiBKYW1lcyBDbGV2ZXJkb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFyLmg+Ci0KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2lwaS5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX2ZsYXQ7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY19waHlzZmxhdDsKLWV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3gyeHBpY191dl94OwotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3BoeXM7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfY2x1c3RlcjsKLQotc3RydWN0IGdlbmFwaWMgX19yZWFkX21vc3RseSAqZ2VuYXBpYyA9ICZhcGljX2ZsYXQ7Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VuYXBpYyAqYXBpY19wcm9iZVtdIF9faW5pdGRhdGEgPSB7Ci0JJmFwaWNfeDJhcGljX3V2X3gsCi0JJmFwaWNfeDJhcGljX3BoeXMsCi0JJmFwaWNfeDJhcGljX2NsdXN0ZXIsCi0JJmFwaWNfcGh5c2ZsYXQsCi0JTlVMTCwKLX07Ci0KLS8qCi0gKiBDaGVjayB0aGUgQVBJQyBJRHMgaW4gYmlvc19jcHVfYXBpY2lkIGFuZCBjaG9vc2UgdGhlIEFQSUMgbW9kZS4KLSAqLwotdm9pZCBfX2luaXQgc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCi17Ci0JaWYgKGdlbmFwaWMgPT0gJmFwaWNfeDJhcGljX3BoeXMgfHwgZ2VuYXBpYyA9PSAmYXBpY194MmFwaWNfY2x1c3RlcikgewotCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQlnZW5hcGljID0gJmFwaWNfZmxhdDsKLQl9Ci0KLQlpZiAoZ2VuYXBpYyA9PSAmYXBpY19mbGF0KSB7Ci0JCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCi0JCQlnZW5hcGljID0gJmFwaWNfcGh5c2ZsYXQ7Ci0JCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBnZW5hcGljLT5uYW1lKTsKLQl9Ci0KLQlpZiAoeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMpCi0JCXg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKCk7Ci19Ci0KLS8qIFNhbWUgZm9yIGJvdGggZmxhdCBhbmQgcGh5c2ljYWwuICovCi0KLXZvaWQgYXBpY19zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCi17Ci0JX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfU0VMRiwgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOwotfQotCi1pbnQgX19pbml0IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKLQkJaWYgKGFwaWNfcHJvYmVbaV0tPmFjcGlfbWFkdF9vZW1fY2hlY2sob2VtX2lkLCBvZW1fdGFibGVfaWQpKSB7Ci0JCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzLlxuIiwKLQkJCQlnZW5hcGljLT5uYW1lKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDE4NTQ4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQgSmFtZXMgQ2xldmVyZG9uLCBJQk0uCi0gKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHYuMgotICoKLSAqIEZsYXQgQVBJQyBzdWJhcmNoIGNvZGUuCi0gKgotICogSGFja2VkIGZvciB4ODYtNjQgYnkgSmFtZXMgQ2xldmVyZG9uIGZyb20gaTM4NiBhcmNoaXRlY3R1cmUgY29kZSBieQotICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKLSAqIEphbWVzIENsZXZlcmRvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9pcGkuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgotCi0jaWZkZWYgQ09ORklHX0FDUEkKLSNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+Ci0jZW5kaWYKLQotc3RhdGljIGludCBmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZmxhdF90YXJnZXRfY3B1cyh2b2lkKQotewotCXJldHVybiBjcHVfb25saW5lX21hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQotewotCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCi0JICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKLQkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KLQkgKgotCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCi0JICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCi0JICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KLQkgKi8KLQljcHVtYXNrX2NsZWFyKHJldG1hc2spOwotCWNwdW1hc2tfYml0cyhyZXRtYXNrKVswXSA9IEFQSUNfQUxMX0NQVVM7Ci19Ci0KLS8qCi0gKiBTZXQgdXAgdGhlIGxvZ2ljYWwgZGVzdGluYXRpb24gSUQuCi0gKgotICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0gKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgotICovCi1zdGF0aWMgdm9pZCBmbGF0X2luaXRfYXBpY19sZHIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQl1bnNpZ25lZCBsb25nIG51bSwgaWQ7Ci0KLQludW0gPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWQgPSAxVUwgPDwgbnVtOwotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX0ZMQVQpOwotCXZhbCA9IGFwaWNfcmVhZChBUElDX0xEUikgJiB+QVBJQ19MRFJfTUFTSzsKLQl2YWwgfD0gU0VUX0FQSUNfTE9HSUNBTF9JRChpZCk7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9mbGF0X3NlbmRfSVBJX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19zZW5kX0lQSV9kZXN0X2ZpZWxkKG1hc2ssIHZlY3RvciwgQVBJQ19ERVNUX0xPR0lDQUwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZmxhdF9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKLQotCV9mbGF0X3NlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCSAgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF07Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChjcHUgPCBCSVRTX1BFUl9MT05HKQotCQljbGVhcl9iaXQoY3B1LCAmbWFzayk7Ci0JX2ZsYXRfc2VuZF9JUElfbWFzayhtYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBmbGF0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotI2lmZGVmCUNPTkZJR19IT1RQTFVHX0NQVQotCWludCBob3RwbHVnID0gMTsKLSNlbHNlCi0JaW50IGhvdHBsdWcgPSAwOwotI2VuZGlmCi0JaWYgKGhvdHBsdWcgfHwgdmVjdG9yID09IE5NSV9WRUNUT1IpIHsKLQkJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1bWFza19vZihjcHUpKSkgewotCQkJdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdV9vbmxpbmVfbWFzaylbMF07Ci0KLQkJCWlmIChjcHUgPCBCSVRTX1BFUl9MT05HKQotCQkJCWNsZWFyX2JpdChjcHUsICZtYXNrKTsKLQotCQkJX2ZsYXRfc2VuZF9JUElfbWFzayhtYXNrLCB2ZWN0b3IpOwotCQl9Ci0JfSBlbHNlIGlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKLQkJX19zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfQUxMQlVULCB2ZWN0b3IsQVBJQ19ERVNUX0xPR0lDQUwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZmxhdF9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKLXsKLQlpZiAodmVjdG9yID09IE5NSV9WRUNUT1IpCi0JCWZsYXRfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci0JZWxzZQotCQlfX3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9BTExJTkMsIHZlY3RvciwgQVBJQ19ERVNUX0xPR0lDQUwpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQl1bnNpZ25lZCBpbnQgaWQ7Ci0KLQlpZCA9ICgoKHgpPj4yNCkgJiAweEZGdSk7Ci0JcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZXRfYXBpY19pZCh1bnNpZ25lZCBpbnQgaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB4OwotCi0JeCA9ICgoaWQgJiAweEZGdSk8PDI0KTsKLQlyZXR1cm4geDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByZWFkX3hhcGljX2lkKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlkOwotCi0JaWQgPSBnZXRfYXBpY19pZChhcGljX3JlYWQoQVBJQ19JRCkpOwotCXJldHVybiBpZDsKLX0KLQotc3RhdGljIGludCBmbGF0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF94YXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCi17Ci0JcmV0dXJuIGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrMSA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci0JdW5zaWduZWQgbG9uZyBtYXNrMiA9IGNwdW1hc2tfYml0cyhhbmRtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci0KLQlyZXR1cm4gbWFzazEgJiBtYXNrMjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwaHlzX3BrZ19pZChpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSA+PiBpbmRleF9tc2I7Ci19Ci0KLXN0cnVjdCBnZW5hcGljIGFwaWNfZmxhdCA9ICB7Ci0JLm5hbWUgPSAiZmxhdCIsCi0JLmFjcGlfbWFkdF9vZW1fY2hlY2sgPSBmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2ssCi0JLmludF9kZWxpdmVyeV9tb2RlID0gZGVzdF9Mb3dlc3RQcmlvLAotCS5pbnRfZGVzdF9tb2RlID0gKEFQSUNfREVTVF9MT0dJQ0FMICE9IDApLAotCS50YXJnZXRfY3B1cyA9IGZsYXRfdGFyZ2V0X2NwdXMsCi0JLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiA9IGZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAotCS5hcGljX2lkX3JlZ2lzdGVyZWQgPSBmbGF0X2FwaWNfaWRfcmVnaXN0ZXJlZCwKLQkuaW5pdF9hcGljX2xkciA9IGZsYXRfaW5pdF9hcGljX2xkciwKLQkuc2VuZF9JUElfYWxsID0gZmxhdF9zZW5kX0lQSV9hbGwsCi0JLnNlbmRfSVBJX2FsbGJ1dHNlbGYgPSBmbGF0X3NlbmRfSVBJX2FsbGJ1dHNlbGYsCi0JLnNlbmRfSVBJX21hc2sgPSBmbGF0X3NlbmRfSVBJX21hc2ssCi0JLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiA9IGZsYXRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9zZWxmID0gYXBpY19zZW5kX0lQSV9zZWxmLAotCS5jcHVfbWFza190b19hcGljaWQgPSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZCwKLQkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZCA9IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKLQkucGh5c19wa2dfaWQgPSBwaHlzX3BrZ19pZCwKLQkuZ2V0X2FwaWNfaWQgPSBnZXRfYXBpY19pZCwKLQkuc2V0X2FwaWNfaWQgPSBzZXRfYXBpY19pZCwKLQkuYXBpY19pZF9tYXNrID0gKDB4RkZ1PDwyNCksCi19OwotCi0vKgotICogUGh5c2ZsYXQgbW9kZSBpcyB1c2VkIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiA4IENQVXMgb24gYSBBTUQgc3lzdGVtLgotICogV2UgY2Fubm90IHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IGluIHRoaXMgY2FzZSBiZWNhdXNlIHRoZSBtYXNrCi0gKiBvdmVyZmxvd3MsIHNvIHVzZSBwaHlzaWNhbCBtb2RlLgotICovCi1zdGF0aWMgaW50IHBoeXNmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0jaWZkZWYgQ09ORklHX0FDUEkKLQkvKgotCSAqIFF1aXJrOiBzb21lIHg4Nl82NCBtYWNoaW5lcyBjYW4gb25seSB1c2UgcGh5c2ljYWwgQVBJQyBtb2RlCi0JICogcmVnYXJkbGVzcyBvZiBob3cgbWFueSBwcm9jZXNzb3JzIGFyZSBwcmVzZW50ICh4ODZfNjQgRVM3MDAwCi0JICogaXMgYW4gZXhhbXBsZSkuCi0JICovCi0JaWYgKGFjcGlfZ2JsX0ZBRFQuaGVhZGVyLnJldmlzaW9uID4gRkFEVDJfUkVWSVNJT05fSUQgJiYKLQkJKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInN5c3RlbSBBUElDIG9ubHkgY2FuIHVzZSBwaHlzaWNhbCBmbGF0Iik7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcGh5c2ZsYXRfdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXNrOwotfQotCi1zdGF0aWMgdm9pZCBwaHlzZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCi17Ci0JY3B1bWFza19jbGVhcihyZXRtYXNrKTsKLQljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgcGh5c2ZsYXRfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX3NlcXVlbmNlKGNwdW1hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQkJICAgICAgaW50IHZlY3RvcikKLXsKLQlzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY3B1bWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgcGh5c2ZsYXRfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCXNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBoeXNmbGF0X3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCXBoeXNmbGF0X3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBoeXNmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKLXsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgotCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KLQkgKi8KLQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOwotCWlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0JZWxzZQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotcGh5c2ZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgotCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KLQkgKi8KLQlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQotCQkJYnJlYWs7Ci0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX3BoeXNmbGF0ID0gIHsKLQkubmFtZSA9ICJwaHlzaWNhbCBmbGF0IiwKLQkuYWNwaV9tYWR0X29lbV9jaGVjayA9IHBoeXNmbGF0X2FjcGlfbWFkdF9vZW1fY2hlY2ssCi0JLmludF9kZWxpdmVyeV9tb2RlID0gZGVzdF9GaXhlZCwKLQkuaW50X2Rlc3RfbW9kZSA9IChBUElDX0RFU1RfUEhZU0lDQUwgIT0gMCksCi0JLnRhcmdldF9jcHVzID0gcGh5c2ZsYXRfdGFyZ2V0X2NwdXMsCi0JLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiA9IHBoeXNmbGF0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKLQkuYXBpY19pZF9yZWdpc3RlcmVkID0gZmxhdF9hcGljX2lkX3JlZ2lzdGVyZWQsCi0JLmluaXRfYXBpY19sZHIgPSBmbGF0X2luaXRfYXBpY19sZHIsLypub3QgbmVlZGVkLCBidXQgc2hvdWxkbid0IGh1cnQqLwotCS5zZW5kX0lQSV9hbGwgPSBwaHlzZmxhdF9zZW5kX0lQSV9hbGwsCi0JLnNlbmRfSVBJX2FsbGJ1dHNlbGYgPSBwaHlzZmxhdF9zZW5kX0lQSV9hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9tYXNrID0gcGh5c2ZsYXRfc2VuZF9JUElfbWFzaywKLQkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmID0gcGh5c2ZsYXRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9zZWxmID0gYXBpY19zZW5kX0lQSV9zZWxmLAotCS5jcHVfbWFza190b19hcGljaWQgPSBwaHlzZmxhdF9jcHVfbWFza190b19hcGljaWQsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQgPSBwaHlzZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kLAotCS5waHlzX3BrZ19pZCA9IHBoeXNfcGtnX2lkLAotCS5nZXRfYXBpY19pZCA9IGdldF9hcGljX2lkLAotCS5zZXRfYXBpY19pZCA9IHNldF9hcGljX2lkLAotCS5hcGljX2lkX21hc2sgPSAoMHhGRnU8PDI0KSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX2NsdXN0ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfY2x1c3Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2U0OTdjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfY2x1c3Rlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLQotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vaXBpLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLQotREVGSU5FX1BFUl9DUFUodTMyLCB4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKTsKLQotc3RhdGljIGludCB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKLXsKLQlpZiAoY3B1X2hhc194MmFwaWMpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFN0YXJ0IHdpdGggYWxsIElSUXMgcG9pbnRpbmcgdG8gYm9vdCBDUFUuICBJUlEgYmFsYW5jaW5nIHdpbGwgc2hpZnQgdGhlbS4gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp4MmFwaWNfdGFyZ2V0X2NwdXModm9pZCkKLXsKLQlyZXR1cm4gY3B1bWFza19vZigwKTsKLX0KLQotLyoKLSAqIGZvciBub3cgZWFjaCBsb2dpY2FsIGNwdSBpcyBpbiBpdHMgb3duIHZlY3RvciBhbGxvY2F0aW9uIGRvbWFpbi4KLSAqLwotc3RhdGljIHZvaWQgeDJhcGljX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKLXsKLQljcHVtYXNrX2NsZWFyKHJldG1hc2spOwotCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldG1hc2spOwotfQotCi1zdGF0aWMgdm9pZCBfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHVuc2lnbmVkIGludCBhcGljaWQsIGludCB2ZWN0b3IsCi0JCQkJICAgdW5zaWduZWQgaW50IGRlc3QpCi17Ci0JdW5zaWduZWQgbG9uZyBjZmc7Ci0KLQljZmcgPSBfX3ByZXBhcmVfSUNSKDAsIHZlY3RvciwgZGVzdCk7Ci0KLQkvKgotCSAqIHNlbmQgdGhlIElQSS4KLQkgKi8KLQl4MmFwaWNfaWNyX3dyaXRlKGNmZywgYXBpY2lkKTsKLX0KLQotLyoKLSAqIGZvciBub3csIHdlIHNlbmQgdGhlIElQSSdzIG9uZSBieSBvbmUgaW4gdGhlIGNwdW1hc2suCi0gKiBUQkQ6IEJhc2VkIG9uIHRoZSBjcHUgbWFzaywgd2UgY2FuIHNlbmQgdGhlIElQSSdzIHRvIHRoZSBjbHVzdGVyIGdyb3VwCi0gKiBhdCBvbmNlLiBXZSBoYXZlIDE2IGNwdSdzIGluIGEgY2x1c3Rlci4gVGhpcyB3aWxsIG1pbmltaXplIElQSSByZWdpc3RlcgotICogd3JpdGVzLgotICovCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spCi0JCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCi0JCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIHF1ZXJ5X2NwdSksCi0JCQl2ZWN0b3IsIEFQSUNfREVTVF9MT0dJQ0FMKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkJCSAgICBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKQotCQlpZiAocXVlcnlfY3B1ICE9IHRoaXNfY3B1KQotCQkJX194MmFwaWNfc2VuZF9JUElfZGVzdCgKLQkJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIHF1ZXJ5X2NwdSksCi0JCQkJdmVjdG9yLCBBUElDX0RFU1RfTE9HSUNBTCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KHF1ZXJ5X2NwdSkKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCi0JCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJCXZlY3RvciwgQVBJQ19ERVNUX0xPR0lDQUwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQotewotCXgyYXBpY19zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKLX0KLQotc3RhdGljIGludCB4MmFwaWNfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKLXsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgbG9naWNhbCBBUElDIElELgotCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KLQkgKi8KLQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2spOwotCWlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgbG9naWNhbCBBUElDIElELgotCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KLQkgKi8KLQlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQotCQkJYnJlYWs7Ci0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7Ci0JcmV0dXJuIEJBRF9BUElDSUQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQotewotCXVuc2lnbmVkIGludCBpZDsKLQotCWlkID0geDsKLQlyZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKLXsKLQl1bnNpZ25lZCBsb25nIHg7Ci0KLQl4ID0gaWQ7Ci0JcmV0dXJuIHg7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGh5c19wa2dfaWQoaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gY3VycmVudF9jcHVfZGF0YS5pbml0aWFsX2FwaWNpZCA+PiBpbmRleF9tc2I7Ci19Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCi17Ci0JYXBpY193cml0ZShBUElDX1NFTEZfSVBJLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBpbml0X3gyYXBpY19sZHIodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBjcHUpID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlyZXR1cm47Ci19Ci0KLXN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX2NsdXN0ZXIgPSB7Ci0JLm5hbWUgPSAiY2x1c3RlciB4MmFwaWMiLAotCS5hY3BpX21hZHRfb2VtX2NoZWNrID0geDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2ssCi0JLmludF9kZWxpdmVyeV9tb2RlID0gZGVzdF9Mb3dlc3RQcmlvLAotCS5pbnRfZGVzdF9tb2RlID0gKEFQSUNfREVTVF9MT0dJQ0FMICE9IDApLAotCS50YXJnZXRfY3B1cyA9IHgyYXBpY190YXJnZXRfY3B1cywKLQkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluID0geDJhcGljX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKLQkuYXBpY19pZF9yZWdpc3RlcmVkID0geDJhcGljX2FwaWNfaWRfcmVnaXN0ZXJlZCwKLQkuaW5pdF9hcGljX2xkciA9IGluaXRfeDJhcGljX2xkciwKLQkuc2VuZF9JUElfYWxsID0geDJhcGljX3NlbmRfSVBJX2FsbCwKLQkuc2VuZF9JUElfYWxsYnV0c2VsZiA9IHgyYXBpY19zZW5kX0lQSV9hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9tYXNrID0geDJhcGljX3NlbmRfSVBJX21hc2ssCi0JLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZiA9IHgyYXBpY19zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCi0JLnNlbmRfSVBJX3NlbGYgPSB4MmFwaWNfc2VuZF9JUElfc2VsZiwKLQkuY3B1X21hc2tfdG9fYXBpY2lkID0geDJhcGljX2NwdV9tYXNrX3RvX2FwaWNpZCwKLQkuY3B1X21hc2tfdG9fYXBpY2lkX2FuZCA9IHgyYXBpY19jcHVfbWFza190b19hcGljaWRfYW5kLAotCS5waHlzX3BrZ19pZCA9IHBoeXNfcGtnX2lkLAotCS5nZXRfYXBpY19pZCA9IGdldF9hcGljX2lkLAotCS5zZXRfYXBpY19pZCA9IHNldF9hcGljX2lkLAotCS5hcGljX2lkX21hc2sgPSAoMHhGRkZGRkZGRnUpLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfcGh5cy5jIGIvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY19waHlzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYmNjMGUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY19waHlzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9pcGkuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotCi1zdGF0aWMgaW50IHgyYXBpY19waHlzOwotCi1zdGF0aWMgaW50IHNldF94MmFwaWNfcGh5c19tb2RlKGNoYXIgKmFyZykKLXsKLQl4MmFwaWNfcGh5cyA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgieDJhcGljX3BoeXMiLCBzZXRfeDJhcGljX3BoeXNfbW9kZSk7Ci0KLXN0YXRpYyBpbnQgeDJhcGljX2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JaWYgKGNwdV9oYXNfeDJhcGljICYmIHgyYXBpY19waHlzKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKiBTdGFydCB3aXRoIGFsbCBJUlFzIHBvaW50aW5nIHRvIGJvb3QgQ1BVLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNoaWZ0IHRoZW0uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqeDJhcGljX3RhcmdldF9jcHVzKHZvaWQpCi17Ci0JcmV0dXJuIGNwdW1hc2tfb2YoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCi17Ci0JY3B1bWFza19jbGVhcihyZXRtYXNrKTsKLQljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgX194MmFwaWNfc2VuZF9JUElfZGVzdCh1bnNpZ25lZCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yLAotCQkJCSAgIHVuc2lnbmVkIGludCBkZXN0KQotewotCXVuc2lnbmVkIGxvbmcgY2ZnOwotCi0JY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IsIGRlc3QpOwotCi0JLyoKLQkgKiBzZW5kIHRoZSBJUEkuCi0JICovCi0JeDJhcGljX2ljcl93cml0ZShjZmcsIGFwaWNpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY19zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewotCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCi0JCQkJICAgICAgIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAotCQkJCQkgICAgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwotCXVuc2lnbmVkIGxvbmcgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewotCQlpZiAocXVlcnlfY3B1ICE9IHRoaXNfY3B1KQotCQkJX194MmFwaWNfc2VuZF9JUElfZGVzdCgKLQkJCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAotCQkJCXZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KHF1ZXJ5X2NwdSkKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCi0JCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKLQkJCQl2ZWN0b3IsIEFQSUNfREVTVF9QSFlTSUNBTCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0JeDJhcGljX3NlbmRfSVBJX21hc2soY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaW50IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQotewotCWludCBjcHU7Ci0KLQkvKgotCSAqIFdlJ3JlIHVzaW5nIGZpeGVkIElSUSBkZWxpdmVyeSwgY2FuIG9ubHkgcmV0dXJuIG9uZSBwaHlzIEFQSUMgSUQuCi0JICogTWF5IGFzIHdlbGwgYmUgdGhlIGZpcnN0LgotCSAqLwotCWNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1bWFzayk7Ci0JaWYgKCh1bnNpZ25lZCljcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSdyZSB1c2luZyBmaXhlZCBJUlEgZGVsaXZlcnksIGNhbiBvbmx5IHJldHVybiBvbmUgcGh5cyBBUElDIElELgotCSAqIE1heSBhcyB3ZWxsIGJlIHRoZSBmaXJzdC4KLQkgKi8KLQlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1bWFzaywgYW5kbWFzaykKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQotCQkJYnJlYWs7Ci0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQl1bnNpZ25lZCBpbnQgaWQ7Ci0KLQlpZCA9IHg7Ci0JcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZXRfYXBpY19pZCh1bnNpZ25lZCBpbnQgaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB4OwotCi0JeCA9IGlkOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBoeXNfcGtnX2lkKGludCBpbmRleF9tc2IpCi17Ci0JcmV0dXJuIGN1cnJlbnRfY3B1X2RhdGEuaW5pdGlhbF9hcGljaWQgPj4gaW5kZXhfbXNiOwotfQotCi1zdGF0aWMgdm9pZCB4MmFwaWNfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQotewotCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF94MmFwaWNfbGRyKHZvaWQpCi17Ci0JcmV0dXJuOwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX3gyYXBpY19waHlzID0gewotCS5uYW1lID0gInBoeXNpY2FsIHgyYXBpYyIsCi0JLmFjcGlfbWFkdF9vZW1fY2hlY2sgPSB4MmFwaWNfYWNwaV9tYWR0X29lbV9jaGVjaywKLQkuaW50X2RlbGl2ZXJ5X21vZGUgPSBkZXN0X0ZpeGVkLAotCS5pbnRfZGVzdF9tb2RlID0gKEFQSUNfREVTVF9QSFlTSUNBTCAhPSAwKSwKLQkudGFyZ2V0X2NwdXMgPSB4MmFwaWNfdGFyZ2V0X2NwdXMsCi0JLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiA9IHgyYXBpY192ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCi0JLmFwaWNfaWRfcmVnaXN0ZXJlZCA9IHgyYXBpY19hcGljX2lkX3JlZ2lzdGVyZWQsCi0JLmluaXRfYXBpY19sZHIgPSBpbml0X3gyYXBpY19sZHIsCi0JLnNlbmRfSVBJX2FsbCA9IHgyYXBpY19zZW5kX0lQSV9hbGwsCi0JLnNlbmRfSVBJX2FsbGJ1dHNlbGYgPSB4MmFwaWNfc2VuZF9JUElfYWxsYnV0c2VsZiwKLQkuc2VuZF9JUElfbWFzayA9IHgyYXBpY19zZW5kX0lQSV9tYXNrLAotCS5zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYgPSB4MmFwaWNfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLAotCS5zZW5kX0lQSV9zZWxmID0geDJhcGljX3NlbmRfSVBJX3NlbGYsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZCA9IHgyYXBpY19jcHVfbWFza190b19hcGljaWQsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQgPSB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKLQkucGh5c19wa2dfaWQgPSBwaHlzX3BrZ19pZCwKLQkuZ2V0X2FwaWNfaWQgPSBnZXRfYXBpY19pZCwKLQkuc2V0X2FwaWNfaWQgPSBzZXRfYXBpY19pZCwKLQkuYXBpY19pZF9tYXNrID0gKDB4RkZGRkZGRkZ1KSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKaW5kZXggYjlhNGQ4Yy4uZjViMjcyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYwpAQCAtMjYsMjcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vYmlvc19lYmRhLmg+CiAjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KIAotLyogYm9vdCBjcHUgcGRhICovCi1zdGF0aWMgc3RydWN0IHg4NjY0X3BkYSBfYm9vdF9jcHVfcGRhOwotCi0jaWZkZWYgQ09ORklHX1NNUAotLyoKLSAqIFdlIGluc3RhbGwgYW4gZW1wdHkgY3B1X3BkYSBwb2ludGVyIHRhYmxlIHRvIGluZGljYXRlIHRvIGVhcmx5IHVzZXJzCi0gKiAobnVtYV9zZXRfbm9kZSkgdGhhdCB0aGUgY3B1X3BkYSBwb2ludGVyIHRhYmxlIGZvciBjcHVzIG90aGVyIHRoYW4KLSAqIHRoZSBib290IGNwdSBpcyBub3QgeWV0IHNldHVwLgotICovCi1zdGF0aWMgc3RydWN0IHg4NjY0X3BkYSAqX19jcHVfcGRhW05SX0NQVVNdIF9faW5pdGRhdGE7Ci0jZWxzZQotc3RhdGljIHN0cnVjdCB4ODY2NF9wZGEgKl9fY3B1X3BkYVtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwotI2VuZGlmCi0KLXZvaWQgX19pbml0IHg4Nl82NF9pbml0X3BkYSh2b2lkKQotewotCV9jcHVfcGRhID0gX19jcHVfcGRhOwotCWNwdV9wZGEoMCkgPSAmX2Jvb3RfY3B1X3BkYTsKLQlwZGFfaW5pdCgwKTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHphcF9pZGVudGl0eV9tYXBwaW5ncyh2b2lkKQogewogCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soMFVMKTsKQEAgLTExMiw4ICs5MSw2IEBACiAJaWYgKGNvbnNvbGVfbG9nbGV2ZWwgPT0gMTApCiAJCWVhcmx5X3ByaW50aygiS2VybmVsIGFsaXZlXG4iKTsKIAotCXg4Nl82NF9pbml0X3BkYSgpOwotCiAJeDg2XzY0X3N0YXJ0X3Jlc2VydmF0aW9ucyhyZWFsX21vZGVfZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGU4MzViNGUuLmMzMmNhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtMTEsMTQgKzExLDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogCiAvKiBQaHlzaWNhbCBhZGRyZXNzICovCiAjZGVmaW5lIHBhKFgpICgoWCkgLSBfX1BBR0VfT0ZGU0VUKQpAQCAtNDI5LDE0ICs0MzAsMzQgQEAKIAlsam1wICQoX19LRVJORUxfQ1MpLCQxZgogMToJbW92bCAkKF9fS0VSTkVMX0RTKSwlZWF4CSMgcmVsb2FkIGFsbCB0aGUgc2VnbWVudCByZWdpc3RlcnMKIAltb3ZsICVlYXgsJXNzCQkJIyBhZnRlciBjaGFuZ2luZyBnZHQuCi0JbW92bCAlZWF4LCVmcwkJCSMgZ2V0cyByZXNldCBvbmNlIHRoZXJlJ3MgcmVhbCBwZXJjcHUKIAogCW1vdmwgJChfX1VTRVJfRFMpLCVlYXgJCSMgRFMvRVMgY29udGFpbnMgZGVmYXVsdCBVU0VSIHNlZ21lbnQKIAltb3ZsICVlYXgsJWRzCiAJbW92bCAlZWF4LCVlcwogCi0JeG9ybCAlZWF4LCVlYXgJCQkjIENsZWFyIEdTIGFuZCBMRFQKKwltb3ZsICQoX19LRVJORUxfUEVSQ1BVKSwgJWVheAorCW1vdmwgJWVheCwlZnMJCQkjIHNldCB0aGlzIGNwdSdzIHBlcmNwdQorCisjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisJLyoKKwkgKiBUaGUgbGlua2VyIGNhbid0IGhhbmRsZSB0aGlzIGJ5IHJlbG9jYXRpb24uICBNYW51YWxseSBzZXQKKwkgKiBiYXNlIGFkZHJlc3MgaW4gc3RhY2sgY2FuYXJ5IHNlZ21lbnQgZGVzY3JpcHRvci4KKwkgKi8KKwljbXBiICQwLHJlYWR5CisJam5lIDFmCisJbW92bCAkcGVyX2NwdV9fZ2R0X3BhZ2UsJWVheAorCW1vdmwgJHBlcl9jcHVfX3N0YWNrX2NhbmFyeSwlZWN4CisJc3VibCAkMjAsICVlY3gKKwltb3Z3ICVjeCwgOCAqIEdEVF9FTlRSWV9TVEFDS19DQU5BUlkgKyAyKCVlYXgpCisJc2hybCAkMTYsICVlY3gKKwltb3ZiICVjbCwgOCAqIEdEVF9FTlRSWV9TVEFDS19DQU5BUlkgKyA0KCVlYXgpCisJbW92YiAlY2gsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgNyglZWF4KQorMToKKyNlbmRpZgorCW1vdmwgJChfX0tFUk5FTF9TVEFDS19DQU5BUlkpLCVlYXgKIAltb3ZsICVlYXgsJWdzCisKKwl4b3JsICVlYXgsJWVheAkJCSMgQ2xlYXIgTERUCiAJbGxkdCAlYXgKIAogCWNsZAkJCSMgZ2NjMiB3YW50cyB0aGUgZGlyZWN0aW9uIGZsYWcgY2xlYXJlZCBhdCBhbGwgdGltZXMKQEAgLTQ0Niw4ICs0NjcsNiBAQAogCW1vdmIgJDEsIHJlYWR5CiAJY21wYiAkMCwlY2wJCSMgdGhlIGZpcnN0IENQVSBjYWxscyBzdGFydF9rZXJuZWwKIAlqZSAgIDFmCi0JbW92bCAkKF9fS0VSTkVMX1BFUkNQVSksICVlYXgKLQltb3ZsICVlYXgsJWZzCQkjIHNldCB0aGlzIGNwdSdzIHBlcmNwdQogCW1vdmwgKHN0YWNrX3N0YXJ0KSwgJWVzcAogMToKICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC01NDgsMTIgKzU2Nyw4IEBACiAJcHVzaGwgJWVheAogCXB1c2hsICVlZHgJCS8qIHRyYXBubyAqLwogCXB1c2hsICRmYXVsdF9tc2cKLSNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCi0JY2FsbCBlYXJseV9wcmludGsKLSNlbHNlCiAJY2FsbCBwcmludGsKICNlbmRpZgotI2VuZGlmCiAJY2FsbCBkdW1wX3N0YWNrCiBobHRfbG9vcDoKIAlobHQKQEAgLTU4MCwxMSArNTk1LDEwIEBACiAJcHVzaGwgMzIoJWVzcCkKIAlwdXNobCA0MCglZXNwKQogCXB1c2hsICRpbnRfbXNnCi0jaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwotCWNhbGwgZWFybHlfcHJpbnRrCi0jZWxzZQogCWNhbGwgcHJpbnRrCi0jZW5kaWYKKworCWNhbGwgZHVtcF9zdGFjaworCiAJYWRkbCAkKDUqNCksJWVzcAogCXBvcGwgJWRzCiAJcG9wbCAlZXMKQEAgLTY2MCw3ICs2NzQsNyBAQAogCS5sb25nIDAKIAogaW50X21zZzoKLQkuYXNjaXogIlVua25vd24gaW50ZXJydXB0IG9yIGZhdWx0IGF0IEVJUCAlcCAlcCAlcFxuIgorCS5hc2NpeiAiVW5rbm93biBpbnRlcnJ1cHQgb3IgZmF1bHQgYXQ6ICVwICVwICVwXG4iCiAKIGZhdWx0X21zZzoKIC8qIGZhdWx0IGluZm86ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwppbmRleCAwZTI3NWQ0Li41NGIyOWJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgpAQCAtMjI2LDEyICsyMjcsMTUgQEAKIAltb3ZsICVlYXgsJWZzCiAJbW92bCAlZWF4LCVncwogCi0JLyogCi0JICogU2V0dXAgdXAgYSBkdW1teSBQREEuIHRoaXMgaXMganVzdCBmb3Igc29tZSBlYXJseSBib290dXAgY29kZQotCSAqIHRoYXQgZG9lcyBpbl9pbnRlcnJ1cHQoKSAKLQkgKi8gCisJLyogU2V0IHVwICVncy4KKwkgKgorCSAqIFRoZSBiYXNlIG9mICVncyBhbHdheXMgcG9pbnRzIHRvIHRoZSBib3R0b20gb2YgdGhlIGlycXN0YWNrCisJICogdW5pb24uICBJZiB0aGUgc3RhY2sgcHJvdGVjdG9yIGNhbmFyeSBpcyBlbmFibGVkLCBpdCBpcworCSAqIGxvY2F0ZWQgYXQgJWdzOjQwLiAgTm90ZSB0aGF0LCBvbiBTTVAsIHRoZSBib290IGNwdSB1c2VzCisJICogaW5pdCBkYXRhIHNlY3Rpb24gdGlsbCBwZXIgY3B1IGFyZWFzIGFyZSBzZXQgdXAuCisJICovCiAJbW92bAkkTVNSX0dTX0JBU0UsJWVjeAotCW1vdnEJJGVtcHR5X3plcm9fcGFnZSwlcmF4CisJbW92cQlpbml0aWFsX2dzKCVyaXApLCVyYXgKIAltb3ZxICAgICVyYXgsJXJkeAogCXNocnEJJDMyLCVyZHgKIAl3cm1zcgkKQEAgLTI1Nyw2ICsyNjEsOCBAQAogCS5hbGlnbgk4CiAJRU5UUlkoaW5pdGlhbF9jb2RlKQogCS5xdWFkCXg4Nl82NF9zdGFydF9rZXJuZWwKKwlFTlRSWShpbml0aWFsX2dzKQorCS5xdWFkCUlOSVRfUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uKQogCV9fRklOSVREQVRBCiAKIAlFTlRSWShzdGFja19zdGFydCkKQEAgLTMyMyw4ICszMjksNiBAQAogI2VuZGlmIC8qIENPTkZJR19FQVJMWV9QUklOVEsgKi8KIAkucHJldmlvdXMKIAotLmJhbGlnbiBQQUdFX1NJWkUKLQogI2RlZmluZSBORVhUX1BBR0UobmFtZSkgXAogCS5iYWxpZ24JUEFHRV9TSVpFOyBcCiBFTlRSWShuYW1lKQpAQCAtNDAxLDcgKzQwNSw4IEBACiAJLmdsb2JsIGVhcmx5X2dkdF9kZXNjcgogZWFybHlfZ2R0X2Rlc2NyOgogCS53b3JkCUdEVF9FTlRSSUVTKjgtMQotCS5xdWFkICAgcGVyX2NwdV9fZ2R0X3BhZ2UKK2Vhcmx5X2dkdF9kZXNjcl9iYXNlOgorCS5xdWFkCUlOSVRfUEVSX0NQVV9WQVIoZ2R0X3BhZ2UpCiAKIEVOVFJZKHBoeXNfYmFzZSkKIAkvKiBUaGlzIG11c3QgbWF0Y2ggdGhlIGZpcnN0IGVudHJ5IGluIGxldmVsMl9rZXJuZWxfcGd0ICovCkBAIC00MTIsNyArNDE3LDcgQEAKIAkuc2VjdGlvbiAuYnNzLCAiYXciLCBAbm9iaXRzCiAJLmFsaWduIEwxX0NBQ0hFX0JZVEVTCiBFTlRSWShpZHRfdGFibGUpCi0JLnNraXAgMjU2ICogMTYKKwkuc2tpcCBJRFRfRU5UUklFUyAqIDE2CiAKIAkuc2VjdGlvbiAuYnNzLnBhZ2VfYWxpZ25lZCwgImF3IiwgQG5vYml0cwogCS5hbGlnbiBQQUdFX1NJWkUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCmluZGV4IGEwMDU0NWYuLjY0OGIzYTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwpAQCAtODAsNiArODAsNyBAQAogICovCiBzdGF0aWMgaW50IGJvb3RfaHBldF9kaXNhYmxlOwogaW50IGhwZXRfZm9yY2VfdXNlcjsKK3N0YXRpYyBpbnQgaHBldF92ZXJib3NlOwogCiBzdGF0aWMgaW50IF9faW5pdCBocGV0X3NldHVwKGNoYXIgKnN0cikKIHsKQEAgLTg4LDYgKzg5LDggQEAKIAkJCWJvb3RfaHBldF9kaXNhYmxlID0gMTsKIAkJaWYgKCFzdHJuY21wKCJmb3JjZSIsIHN0ciwgNSkpCiAJCQlocGV0X2ZvcmNlX3VzZXIgPSAxOworCQlpZiAoIXN0cm5jbXAoInZlcmJvc2UiLCBzdHIsIDcpKQorCQkJaHBldF92ZXJib3NlID0gMTsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC0xMTksNiArMTIyLDQzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc19ocGV0X2VuYWJsZWQpOwogCitzdGF0aWMgdm9pZCBfaHBldF9wcmludF9jb25maWcoY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBsaW5lKQoreworCXUzMiBpLCB0aW1lcnMsIGwsIGg7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogJXMoJWQpOlxuIiwgZnVuY3Rpb24sIGxpbmUpOworCWwgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCWggPSBocGV0X3JlYWRsKEhQRVRfUEVSSU9EKTsKKwl0aW1lcnMgPSAoKGwgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpICsgMTsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiBJRDogMHgleCwgUEVSSU9EOiAweCV4XG4iLCBsLCBoKTsKKwlsID0gaHBldF9yZWFkbChIUEVUX0NGRyk7CisJaCA9IGhwZXRfcmVhZGwoSFBFVF9TVEFUVVMpOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IENGRzogMHgleCwgU1RBVFVTOiAweCV4XG4iLCBsLCBoKTsKKwlsID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOworCWggPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUis0KTsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiBDT1VOVEVSX2w6IDB4JXgsIENPVU5URVJfaDogMHgleFxuIiwgbCwgaCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGltZXJzOyBpKyspIHsKKwkJbCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaSkpOworCQloID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhpKSs0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogVCVkOiBDRkdfbDogMHgleCwgQ0ZHX2g6IDB4JXhcbiIsCisJCSAgICAgICBpLCBsLCBoKTsKKwkJbCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DTVAoaSkpOworCQloID0gaHBldF9yZWFkbChIUEVUX1RuX0NNUChpKSs0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogVCVkOiBDTVBfbDogMHgleCwgQ01QX2g6IDB4JXhcbiIsCisJCSAgICAgICBpLCBsLCBoKTsKKwkJbCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShpKSk7CisJCWggPSBocGV0X3JlYWRsKEhQRVRfVG5fUk9VVEUoaSkrNCk7CisJCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IFQlZCBST1VURV9sOiAweCV4LCBST1VURV9oOiAweCV4XG4iLAorCQkgICAgICAgaSwgbCwgaCk7CisJfQorfQorCisjZGVmaW5lIGhwZXRfcHJpbnRfY29uZmlnKCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoaHBldF92ZXJib3NlKQkJCQkJXAorCQlfaHBldF9wcmludF9jb25maWcoX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CVwKK30gd2hpbGUgKDApCisKIC8qCiAgKiBXaGVuIHRoZSBocGV0IGRyaXZlciAoL2Rldi9ocGV0KSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIHJlc2VydmUKICAqIHRpbWVyIDAgYW5kIHRpbWVyIDEgaW4gY2FzZSBvZiBSVEMgZW11bGF0aW9uLgpAQCAtMTkxLDI3ICsyMzEsMzcgQEAKIAkucmF0aW5nCQk9IDUwLAogfTsKIAotc3RhdGljIHZvaWQgaHBldF9zdGFydF9jb3VudGVyKHZvaWQpCitzdGF0aWMgdm9pZCBocGV0X3N0b3BfY291bnRlcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY2ZnID0gaHBldF9yZWFkbChIUEVUX0NGRyk7Ci0KIAljZmcgJj0gfkhQRVRfQ0ZHX0VOQUJMRTsKIAlocGV0X3dyaXRlbChjZmcsIEhQRVRfQ0ZHKTsKIAlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIpOwogCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUiArIDQpOworfQorCitzdGF0aWMgdm9pZCBocGV0X3N0YXJ0X2NvdW50ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwogCWNmZyB8PSBIUEVUX0NGR19FTkFCTEU7CiAJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CiB9CiAKK3N0YXRpYyB2b2lkIGhwZXRfcmVzdGFydF9jb3VudGVyKHZvaWQpCit7CisJaHBldF9zdG9wX2NvdW50ZXIoKTsKKwlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKK30KKwogc3RhdGljIHZvaWQgaHBldF9yZXN1bWVfZGV2aWNlKHZvaWQpCiB7CiAJZm9yY2VfaHBldF9yZXN1bWUoKTsKIH0KIAotc3RhdGljIHZvaWQgaHBldF9yZXN0YXJ0X2NvdW50ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhwZXRfcmVzdW1lX2NvdW50ZXIodm9pZCkKIHsKIAlocGV0X3Jlc3VtZV9kZXZpY2UoKTsKLQlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKwlocGV0X3Jlc3RhcnRfY291bnRlcigpOwogfQogCiBzdGF0aWMgdm9pZCBocGV0X2VuYWJsZV9sZWdhY3lfaW50KHZvaWQpCkBAIC0yNTksMjkgKzMwOSwyMyBAQAogc3RhdGljIHZvaWQgaHBldF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0LCBpbnQgdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBjZmcsIGNtcCwgbm93OworCXVuc2lnbmVkIGxvbmcgY2ZnOwogCXVpbnQ2NF90IGRlbHRhOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJaHBldF9zdG9wX2NvdW50ZXIoKTsKIAkJZGVsdGEgPSAoKHVpbnQ2NF90KShOU0VDX1BFUl9TRUMvSFopKSAqIGV2dC0+bXVsdDsKIAkJZGVsdGEgPj49IGV2dC0+c2hpZnQ7Ci0JCW5vdyA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKLQkJY21wID0gbm93ICsgKHVuc2lnbmVkIGxvbmcpIGRlbHRhOwogCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCS8qIE1ha2Ugc3VyZSB3ZSB1c2UgZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0cyAqLwogCQljZmcgJj0gfkhQRVRfVE5fTEVWRUw7CiAJCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfAogCQkgICAgICAgSFBFVF9UTl9TRVRWQUwgfCBIUEVUX1ROXzMyQklUOwogCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKHRpbWVyKSk7Ci0JCS8qCi0JCSAqIFRoZSBmaXJzdCB3cml0ZSBhZnRlciB3cml0aW5nIFROX1NFVFZBTCB0byB0aGUKLQkJICogY29uZmlnIHJlZ2lzdGVyIHNldHMgdGhlIGNvdW50ZXIgdmFsdWUsIHRoZSBzZWNvbmQKLQkJICogd3JpdGUgc2V0cyB0aGUgcGVyaW9kLgotCQkgKi8KLQkJaHBldF93cml0ZWwoY21wLCBIUEVUX1RuX0NNUCh0aW1lcikpOwotCQl1ZGVsYXkoMSk7CiAJCWhwZXRfd3JpdGVsKCh1bnNpZ25lZCBsb25nKSBkZWx0YSwgSFBFVF9Ubl9DTVAodGltZXIpKTsKKwkJaHBldF9zdGFydF9jb3VudGVyKCk7CisJCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgpAQCAtMzA4LDYgKzM1Miw3IEBACiAJCQlpcnFfc2V0X2FmZmluaXR5KGhkZXYtPmlycSwgY3B1bWFza19vZihoZGV2LT5jcHUpKTsKIAkJCWVuYWJsZV9pcnEoaGRldi0+aXJxKTsKIAkJfQorCQlocGV0X3ByaW50X2NvbmZpZygpOwogCQlicmVhazsKIAl9CiB9CkBAIC01MjYsNiArNTcxLDcgQEAKIAogCW51bV90aW1lcnMgPSAoKGlkICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKTsKIAludW1fdGltZXJzKys7IC8qIFZhbHVlIHJlYWQgb3V0IHN0YXJ0cyBmcm9tIDAgKi8KKwlocGV0X3ByaW50X2NvbmZpZygpOwogCiAJaHBldF9kZXZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhwZXRfZGV2KSAqIG51bV90aW1lcnMsIEdGUF9LRVJORUwpOwogCWlmICghaHBldF9kZXZzKQpAQCAtNjk1LDcgKzc0MSw3IEBACiAJLm1hc2sJCT0gSFBFVF9NQVNLLAogCS5zaGlmdAkJPSBIUEVUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKLQkucmVzdW1lCQk9IGhwZXRfcmVzdGFydF9jb3VudGVyLAorCS5yZXN1bWUJCT0gaHBldF9yZXN1bWVfY291bnRlciwKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnZyZWFkCQk9IHZyZWFkX2hwZXQsCiAjZW5kaWYKQEAgLTcwNyw3ICs3NTMsNyBAQAogCWN5Y2xlX3QgdDE7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlciAqLwotCWhwZXRfc3RhcnRfY291bnRlcigpOworCWhwZXRfcmVzdGFydF9jb3VudGVyKCk7CiAKIAkvKiBWZXJpZnkgd2hldGhlciBocGV0IGNvdW50ZXIgd29ya3MgKi8KIAl0MSA9IHJlYWRfaHBldCgpOwpAQCAtNzkzLDYgKzgzOSw3IEBACiAJICogaW5mb3JtYXRpb24gYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKIAkgKi8KIAlpZCA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7CisJaHBldF9wcmludF9jb25maWcoKTsKIAogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiAJLyoKQEAgLTg0NSw2ICs4OTIsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnMoaHBldF9yZWFkbChIUEVUX0lEKSk7CisJaHBldF9wcmludF9jb25maWcoKTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWhwZXRfY3B1aHBfbm90aWZ5KE5VTEwsIENQVV9PTkxJTkUsICh2b2lkICopKGxvbmcpY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1OS5jIGIvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKaW5kZXggMTFkNTA5My4uZGY4OTEwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvcG9ydC5jIGIvYXJjaC94ODYva2VybmVsL2lvcG9ydC5jCmluZGV4IGIxMjIwOGYuLjk5YzRkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9wb3J0LmMKQEAgLTg1LDE5ICs4NSw4IEBACiAKIAl0LT5pb19iaXRtYXBfbWF4ID0gYnl0ZXM7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBTZXRzIHRoZSBsYXp5IHRyaWdnZXIgc28gdGhhdCB0aGUgbmV4dCBJL08gb3BlcmF0aW9uIHdpbGwKLQkgKiByZWxvYWQgdGhlIGNvcnJlY3QgYml0bWFwLgotCSAqIFJlc2V0IHRoZSBvd25lciBzbyB0aGF0IGEgcHJvY2VzcyBzd2l0Y2ggd2lsbCBub3Qgc2V0Ci0JICogdHNzLT5pb19iaXRtYXBfYmFzZSB0byBJT19CSVRNQVBfT0ZGU0VULgotCSAqLwotCXRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IElOVkFMSURfSU9fQklUTUFQX09GRlNFVF9MQVpZOwotCXRzcy0+aW9fYml0bWFwX293bmVyID0gTlVMTDsKLSNlbHNlCiAJLyogVXBkYXRlIHRoZSBUU1M6ICovCiAJbWVtY3B5KHRzcy0+aW9fYml0bWFwLCB0LT5pb19iaXRtYXBfcHRyLCBieXRlc191cGRhdGVkKTsKLSNlbmRpZgogCiAJcHV0X2NwdSgpOwogCkBAIC0xMzEsOSArMTIwLDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKLWFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBsb25nIHJlZ3NwKQorbG9uZyBzeXNfaW9wbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSZyZWdzcDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWwgPSByZWdzLT5ieDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZjdXJyZW50LT50aHJlYWQ7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lwaS5jIGIvYXJjaC94ODYva2VybmVsL2lwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODViYmY4Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotCi0vKgotICogdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVhbCB3aXRoIHNlbmRpbmcgSVBJcyBiZXR3ZWVuIENQVXMuCi0gKgotICogV2UgdXNlICdicm9hZGNhc3QnLCBDUFUtPkNQVSBJUElzIGFuZCBzZWxmLUlQSXMgdG9vLgotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHJlcGFyZV9JQ1IodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGludCBpY3IgPSBzaG9ydGN1dCB8IEFQSUNfREVTVF9MT0dJQ0FMOwotCi0Jc3dpdGNoICh2ZWN0b3IpIHsKLQlkZWZhdWx0OgotCQlpY3IgfD0gQVBJQ19ETV9GSVhFRCB8IHZlY3RvcjsKLQkJYnJlYWs7Ci0JY2FzZSBOTUlfVkVDVE9SOgotCQlpY3IgfD0gQVBJQ19ETV9OTUk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gaWNyOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3ByZXBhcmVfSUNSMih1bnNpZ25lZCBpbnQgbWFzaykKLXsKLQlyZXR1cm4gU0VUX0FQSUNfREVTVF9GSUVMRChtYXNrKTsKLX0KLQotdm9pZCBfX3NlbmRfSVBJX3Nob3J0Y3V0KHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvcikKLXsKLQkvKgotCSAqIFN1YnRsZS4gSW4gdGhlIGNhc2Ugb2YgdGhlICduZXZlciBkbyBkb3VibGUgd3JpdGVzJyB3b3JrYXJvdW5kCi0JICogd2UgaGF2ZSB0byBsb2NrIG91dCBpbnRlcnJ1cHRzIHRvIGJlIHNhZmUuICBBcyB3ZSBkb24ndCBjYXJlCi0JICogb2YgdGhlIHZhbHVlIHJlYWQgd2UgdXNlIGFuIGF0b21pYyBybXcgYWNjZXNzIHRvIGF2b2lkIGNvc3RseQotCSAqIGNsaS9zdGkuICBPdGhlcndpc2Ugd2UgdXNlIGFuIGV2ZW4gY2hlYXBlciBzaW5nbGUgYXRvbWljIHdyaXRlCi0JICogdG8gdGhlIEFQSUMuCi0JICovCi0JdW5zaWduZWQgaW50IGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCS8qCi0JICogTm8gbmVlZCB0byB0b3VjaCB0aGUgdGFyZ2V0IGNoaXAgZmllbGQKLQkgKi8KLQljZmcgPSBfX3ByZXBhcmVfSUNSKHNob3J0Y3V0LCB2ZWN0b3IpOwotCi0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotCi12b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQlfX3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9TRUxGLCB2ZWN0b3IpOwotfQotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIHNlbmQgYW4gSVBJIHdpdGggbm8gc2hvcnRoYW5kIG5vdGF0aW9uICh0aGUgZGVzdGluYXRpb24gaXMKLSAqIHNwZWNpZmllZCBpbiBiaXRzIDU2IHRvIDYzIG9mIHRoZSBJQ1IpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9kZXN0X2ZpZWxkKHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlpZiAodW5saWtlbHkodmVjdG9yID09IE5NSV9WRUNUT1IpKQotCQlzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOwotCWVsc2UKLQkJYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQkvKgotCSAqIHByZXBhcmUgdGFyZ2V0IGNoaXAgZmllbGQKLQkgKi8KLQljZmcgPSBfX3ByZXBhcmVfSUNSMihtYXNrKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgY2ZnKTsKLQotCS8qCi0JICogcHJvZ3JhbSB0aGUgSUNSCi0JICovCi0JY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IpOwotCi0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotCi0vKgotICogVGhpcyBpcyBvbmx5IHVzZWQgb24gc21hbGxlciBtYWNoaW5lcy4KLSAqLwotdm9pZCBzZW5kX0lQSV9tYXNrX2JpdG1hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JV0FSTl9PTihtYXNrICYgfmNwdW1hc2tfYml0cyhjcHVfb25saW5lX21hc2spWzBdKTsKLQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQobWFzaywgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBxdWVyeV9jcHU7Ci0KLQkvKgotCSAqIEhhY2suIFRoZSBjbHVzdGVyZWQgQVBJQyBhZGRyZXNzaW5nIG1vZGUgZG9lc24ndCBhbGxvdyB1cyB0byBzZW5kCi0JICogdG8gYW4gYXJiaXRyYXJ5IG1hc2ssIHNvIEkgZG8gYSB1bmljYXN0cyB0byBlYWNoIENQVSBpbnN0ZWFkLiBUaGlzCi0JICogc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGRvIDEgbWVzc2FnZSBwZXIgY2x1c3RlciBJRCAtIG1ibGlnaAotCSAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spCi0JCV9fc2VuZF9JUElfZGVzdF9maWVsZChjcHVfdG9fbG9naWNhbF9hcGljaWQocXVlcnlfY3B1KSwgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgc2VuZF9JUElfbWFza19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHF1ZXJ5X2NwdTsKLQl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBTZWUgSGFjayBjb21tZW50IGFib3ZlICovCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykKLQkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKLQkJCV9fc2VuZF9JUElfZGVzdF9maWVsZChjcHVfdG9fbG9naWNhbF9hcGljaWQocXVlcnlfY3B1KSwKLQkJCQkJICAgICAgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qIG11c3QgY29tZSBhZnRlciB0aGUgc2VuZF9JUEkgZnVuY3Rpb25zIGFib3ZlIGZvciBpbmxpbmluZyAqLwotc3RhdGljIGludCBjb252ZXJ0X2FwaWNpZF90b19jcHUoaW50IGFwaWNfaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlpZiAocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgaSkgPT0gYXBpY19pZCkKLQkJCXJldHVybiBpOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlpbnQgYXBpY2lkLCBjcHVpZDsKLQotCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpKQotCQlyZXR1cm4gMDsKLQotCWFwaWNpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkKLQkJcmV0dXJuIDA7Ci0KLQljcHVpZCA9IGNvbnZlcnRfYXBpY2lkX3RvX2NwdShhcGljaWQpOwotCi0JcmV0dXJuIGNwdWlkID49IDAgPyBjcHVpZCA6IDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCAzOTczZTJkLi5mMTNjYTE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC02LDEwICs2LDEyIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgogCiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCkBAIC0zNiwxMSArMzgsNyBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBpcnFfc3RhdHMoeCkJCSgmcGVyX2NwdShpcnFfc3RhdCwgeCkpCi0jZWxzZQotIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQljcHVfcGRhKHgpCi0jZW5kaWYKKyNkZWZpbmUgaXJxX3N0YXRzKHgpCQkoJnBlcl9jcHUoaXJxX3N0YXQsIHgpKQogLyoKICAqIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmc6CiAgKi8KQEAgLTE5Miw0ICsxOTAsNDAgQEAKIAlyZXR1cm4gc3VtOwogfQogCisKKy8qCisgKiBkb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlEncyAodGhlIHNwZWNpYWwKKyAqIFNNUCBjcm9zcy1DUFUgaW50ZXJydXB0cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYworICogaGFuZGxlcnMpLgorICovCit1bnNpZ25lZCBpbnQgX19pcnFfZW50cnkgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCS8qIGhpZ2ggYml0IHVzZWQgaW4gcmV0X2Zyb21fIGNvZGUgICovCisJdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7CisJdW5zaWduZWQgaXJxOworCisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisKKwlpcnEgPSBfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl07CisKKwlpZiAoIWhhbmRsZV9pcnEoaXJxLCByZWdzKSkgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJaWYgKCFkaXNhYmxlX2FwaWMpCisJCQlhY2tfQVBJQ19pcnEoKTsKKyNlbmRpZgorCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICVkLiVkIE5vIGlycSBoYW5kbGVyIGZvciB2ZWN0b3IgKGlycSAlZClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdmVjdG9yLCBpcnEpOworCX0KKworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworCXJldHVybiAxOworfQorCiBFWFBPUlRfU1lNQk9MX0dQTCh2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwppbmRleCA3NGI5ZmY3Li4zYjA5NjM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogCkBAIC01NSwxMyArNTYsMTMgQEAKIHVuaW9uIGlycV9jdHggewogCXN0cnVjdCB0aHJlYWRfaW5mbyAgICAgIHRpbmZvOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIHN0YWNrW1RIUkVBRF9TSVpFL3NpemVvZih1MzIpXTsKLX07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOwogCi1zdGF0aWMgdW5pb24gaXJxX2N0eCAqaGFyZGlycV9jdHhbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKLXN0YXRpYyB1bmlvbiBpcnFfY3R4ICpzb2Z0aXJxX2N0eFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIGlycV9jdHggKiwgaGFyZGlycV9jdHgpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIGlycV9jdHggKiwgc29mdGlycV9jdHgpOwogCi1zdGF0aWMgY2hhciBzb2Z0aXJxX3N0YWNrW05SX0NQVVMgKiBUSFJFQURfU0laRV0gX19wYWdlX2FsaWduZWRfYnNzOwotc3RhdGljIGNoYXIgaGFyZGlycV9zdGFja1tOUl9DUFVTICogVEhSRUFEX1NJWkVdIF9fcGFnZV9hbGlnbmVkX2JzczsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQodW5pb24gaXJxX2N0eCwgaGFyZGlycV9zdGFjayk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHVuaW9uIGlycV9jdHgsIHNvZnRpcnFfc3RhY2spOwogCiBzdGF0aWMgdm9pZCBjYWxsX29uX3N0YWNrKHZvaWQgKmZ1bmMsIHZvaWQgKnN0YWNrKQogewpAQCAtODEsNyArODIsNyBAQAogCXUzMiAqaXNwLCBhcmcxLCBhcmcyOwogCiAJY3VyY3R4ID0gKHVuaW9uIGlycV9jdHggKikgY3VycmVudF90aHJlYWRfaW5mbygpOwotCWlycWN0eCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaXJxY3R4ID0gX19nZXRfY3B1X3ZhcihoYXJkaXJxX2N0eCk7CiAKIAkvKgogCSAqIHRoaXMgaXMgd2hlcmUgd2Ugc3dpdGNoIHRvIHRoZSBJUlEgc3RhY2suIEhvd2V2ZXIsIGlmIHdlIGFyZQpAQCAtMTI1LDM0ICsxMjYsMzQgQEAKIHsKIAl1bmlvbiBpcnFfY3R4ICppcnFjdHg7CiAKLQlpZiAoaGFyZGlycV9jdHhbY3B1XSkKKwlpZiAocGVyX2NwdShoYXJkaXJxX2N0eCwgY3B1KSkKIAkJcmV0dXJuOwogCi0JaXJxY3R4ID0gKHVuaW9uIGlycV9jdHgqKSAmaGFyZGlycV9zdGFja1tjcHUqVEhSRUFEX1NJWkVdOworCWlycWN0eCA9ICZwZXJfY3B1KGhhcmRpcnFfc3RhY2ssIGNwdSk7CiAJaXJxY3R4LT50aW5mby50YXNrCQk9IE5VTEw7CiAJaXJxY3R4LT50aW5mby5leGVjX2RvbWFpbgk9IE5VTEw7CiAJaXJxY3R4LT50aW5mby5jcHUJCT0gY3B1OwogCWlycWN0eC0+dGluZm8ucHJlZW1wdF9jb3VudAk9IEhBUkRJUlFfT0ZGU0VUOwogCWlycWN0eC0+dGluZm8uYWRkcl9saW1pdAk9IE1BS0VfTU1fU0VHKDApOwogCi0JaGFyZGlycV9jdHhbY3B1XSA9IGlycWN0eDsKKwlwZXJfY3B1KGhhcmRpcnFfY3R4LCBjcHUpID0gaXJxY3R4OwogCi0JaXJxY3R4ID0gKHVuaW9uIGlycV9jdHggKikgJnNvZnRpcnFfc3RhY2tbY3B1KlRIUkVBRF9TSVpFXTsKKwlpcnFjdHggPSAmcGVyX2NwdShzb2Z0aXJxX3N0YWNrLCBjcHUpOwogCWlycWN0eC0+dGluZm8udGFzawkJPSBOVUxMOwogCWlycWN0eC0+dGluZm8uZXhlY19kb21haW4JPSBOVUxMOwogCWlycWN0eC0+dGluZm8uY3B1CQk9IGNwdTsKIAlpcnFjdHgtPnRpbmZvLnByZWVtcHRfY291bnQJPSAwOwogCWlycWN0eC0+dGluZm8uYWRkcl9saW1pdAk9IE1BS0VfTU1fU0VHKDApOwogCi0Jc29mdGlycV9jdHhbY3B1XSA9IGlycWN0eDsKKwlwZXJfY3B1KHNvZnRpcnFfY3R4LCBjcHUpID0gaXJxY3R4OwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIkNQVSAldSBpcnFzdGFja3MsIGhhcmQ9JXAgc29mdD0lcFxuIiwKLQkgICAgICAgY3B1LCBoYXJkaXJxX2N0eFtjcHVdLCBzb2Z0aXJxX2N0eFtjcHVdKTsKKwkgICAgICAgY3B1LCBwZXJfY3B1KGhhcmRpcnFfY3R4LCBjcHUpLCAgcGVyX2NwdShzb2Z0aXJxX2N0eCwgY3B1KSk7CiB9CiAKIHZvaWQgaXJxX2N0eF9leGl0KGludCBjcHUpCiB7Ci0JaGFyZGlycV9jdHhbY3B1XSA9IE5VTEw7CisJcGVyX2NwdShoYXJkaXJxX2N0eCwgY3B1KSA9IE5VTEw7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19zb2Z0aXJxKHZvaWQpCkBAIC0xNjksNyArMTcwLDcgQEAKIAogCWlmIChsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkgewogCQljdXJjdHggPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0JCWlycWN0eCA9IHNvZnRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJCWlycWN0eCA9IF9fZ2V0X2NwdV92YXIoc29mdGlycV9jdHgpOwogCQlpcnFjdHgtPnRpbmZvLnRhc2sgPSBjdXJjdHgtPnRhc2s7CiAJCWlycWN0eC0+dGluZm8ucHJldmlvdXNfZXNwID0gY3VycmVudF9zdGFja19wb2ludGVyOwogCkBAIC0xOTEsMzMgKzE5MiwxNiBAQAogZXhlY3V0ZV9vbl9pcnFfc3RhY2soaW50IG92ZXJmbG93LCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBpcnEpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCi0vKgotICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCi0gKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKLSAqIGhhbmRsZXJzKS4KLSAqLwotdW5zaWduZWQgaW50IGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2Jvb2wgaGFuZGxlX2lycSh1bnNpZ25lZCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKLQkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICovCi0JaW50IG92ZXJmbG93OwotCXVuc2lnbmVkIHZlY3RvciA9IH5yZWdzLT5vcmlnX2F4OwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQl1bnNpZ25lZCBpcnE7Ci0KLQotCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCWlycV9lbnRlcigpOwotCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKwlpbnQgb3ZlcmZsb3c7CiAKIAlvdmVyZmxvdyA9IGNoZWNrX3N0YWNrX292ZXJmbG93KCk7CiAKIAlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlpZiAodW5saWtlbHkoIWRlc2MpKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICIlczogY2Fubm90IGhhbmRsZSBJUlEgJWQgdmVjdG9yICUjeCBjcHUgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCBpcnEsIHZlY3Rvciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJQlVHKCk7Ci0JfQorCWlmICh1bmxpa2VseSghZGVzYykpCisJCXJldHVybiBmYWxzZTsKIAogCWlmICghZXhlY3V0ZV9vbl9pcnFfc3RhY2sob3ZlcmZsb3csIGRlc2MsIGlycSkpIHsKIAkJaWYgKHVubGlrZWx5KG92ZXJmbG93KSkKQEAgLTIyNSwxMyArMjA5LDEwIEBACiAJCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKIAl9CiAKLQlpcnFfZXhpdCgpOwotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KIAogLyogQSBjcHUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNwdV9vbmxpbmVfbWFzay4gIFJlc2V0IGlycSBhZmZpbml0aWVzLiAqLwogdm9pZCBmaXh1cF9pcnFzKHZvaWQpCkBAIC0yNDgsNyArMjI5LDcgQEAKIAkJaWYgKGlycSA9PSAyKQogCQkJY29udGludWU7CiAKLQkJYWZmaW5pdHkgPSAmZGVzYy0+YWZmaW5pdHk7CisJCWFmZmluaXR5ID0gZGVzYy0+YWZmaW5pdHk7CiAJCWlmIChjcHVtYXNrX2FueV9hbmQoYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykgPj0gbnJfY3B1X2lkcykgewogCQkJcHJpbnRrKCJCcmVha2luZyBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCQkJYWZmaW5pdHkgPSBjcHVfYWxsX21hc2s7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKaW5kZXggNjNjODhlNi4uOTc3ZDhiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYwpAQCAtMTgsNiArMTgsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKworREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoaXJxX2NwdXN0YXRfdCwgaXJxX3N0YXQpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9zdGF0KTsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MgKiwgaXJxX3JlZ3MpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9yZWdzKTsKIAogLyoKICAqIFByb2JhYmlsaXN0aWMgc3RhY2sgb3ZlcmZsb3cgY2hlY2s6CkBAIC00MSw0MiArNDgsMTggQEAKICNlbmRpZgogfQogCi0vKgotICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCi0gKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKLSAqIGhhbmRsZXJzKS4KLSAqLwotYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgX19pcnFfZW50cnkgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYm9vbCBoYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAotCS8qIGhpZ2ggYml0IHVzZWQgaW4gcmV0X2Zyb21fIGNvZGUgICovCi0JdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7Ci0JdW5zaWduZWQgaXJxOwotCi0JZXhpdF9pZGxlKCk7Ci0JaXJxX2VudGVyKCk7Ci0JaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwotCiAJc3RhY2tfb3ZlcmZsb3dfY2hlY2socmVncyk7CiAKIAlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlpZiAobGlrZWx5KGRlc2MpKQotCQlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGRlc2MpOwotCWVsc2UgewotCQlpZiAoIWRpc2FibGVfYXBpYykKLQkJCWFja19BUElDX2lycSgpOworCWlmICh1bmxpa2VseSghZGVzYykpCisJCXJldHVybiBmYWxzZTsKIAotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlZC4lZCBObyBpcnEgaGFuZGxlciBmb3IgdmVjdG9yXG4iLAotCQkJCV9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIHZlY3Rvcik7Ci0JfQotCi0JaXJxX2V4aXQoKTsKLQotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci0JcmV0dXJuIDE7CisJZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtMTAwLDcgKzgzLDcgQEAKIAkJLyogaW50ZXJydXB0J3MgYXJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnQgKi8KIAkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAotCQlhZmZpbml0eSA9ICZkZXNjLT5hZmZpbml0eTsKKwkJYWZmaW5pdHkgPSBkZXNjLT5hZmZpbml0eTsKIAkJaWYgKCFpcnFfaGFzX2FjdGlvbihpcnEpIHx8CiAJCSAgICBjcHVtYXNrX2VxdWFsKGFmZmluaXR5LCBjcHVfb25saW5lX21hc2spKSB7CiAJCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwppbmRleCAxMGEwOWMyLi41MGI4YzNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCkBAIC03OCw2ICs3OCwxNSBAQAogCX0KIH0KIAorLyoKKyAqIElSUTIgaXMgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gc2Vjb25kIGludGVycnVwdCBjb250cm9sbGVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTIgPSB7CisJLmhhbmRsZXIgPSBub19hY3Rpb24sCisJLm1hc2sgPSBDUFVfTUFTS19OT05FLAorCS5uYW1lID0gImNhc2NhZGUiLAorfTsKKwogREVGSU5FX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKSA9IHsKIAlbMCAuLi4gSVJRMF9WRUNUT1IgLSAxXSA9IC0xLAogCVtJUlEwX1ZFQ1RPUl0gPSAwLApAQCAtMTE4LDggKzEyNyw4IEBACiB7CiAJaW50IGk7CiAKLQkvKiBhbGwgdGhlIHNldCB1cCBiZWZvcmUgdGhlIGNhbGwgZ2F0ZXMgYXJlIGluaXRpYWxpc2VkICovCi0JcHJlX2ludHJfaW5pdF9ob29rKCk7CisJLyogRXhlY3V0ZSBhbnkgcXVpcmtzIGJlZm9yZSB0aGUgY2FsbCBnYXRlcyBhcmUgaW5pdGlhbGlzZWQ6ICovCisJeDg2X3F1aXJrX3ByZV9pbnRyX2luaXQoKTsKIAogCS8qCiAJICogQ292ZXIgdGhlIHdob2xlIHZlY3RvciBzcGFjZSwgbm8gdmVjdG9yIGNhbiBlc2NhcGUKQEAgLTE0MCw4ICsxNDksMTUgQEAKIAkgKi8KIAlhbGxvY19pbnRyX2dhdGUoUkVTQ0hFRFVMRV9WRUNUT1IsIHJlc2NoZWR1bGVfaW50ZXJydXB0KTsKIAotCS8qIElQSSBmb3IgaW52YWxpZGF0aW9uICovCi0JYWxsb2NfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUiwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQpOworCS8qIElQSXMgZm9yIGludmFsaWRhdGlvbiAqLworCWFsbG9jX2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMCwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQwKTsKKwlhbGxvY19pbnRyX2dhdGUoSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzEsIGludmFsaWRhdGVfaW50ZXJydXB0MSk7CisJYWxsb2NfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCsyLCBpbnZhbGlkYXRlX2ludGVycnVwdDIpOworCWFsbG9jX2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMywgaW52YWxpZGF0ZV9pbnRlcnJ1cHQzKTsKKwlhbGxvY19pbnRyX2dhdGUoSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzQsIGludmFsaWRhdGVfaW50ZXJydXB0NCk7CisJYWxsb2NfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCs1LCBpbnZhbGlkYXRlX2ludGVycnVwdDUpOworCWFsbG9jX2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrNiwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQ2KTsKKwlhbGxvY19pbnRyX2dhdGUoSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUKzcsIGludmFsaWRhdGVfaW50ZXJydXB0Nyk7CiAKIAkvKiBJUEkgZm9yIGdlbmVyaWMgZnVuY3Rpb24gY2FsbCAqLwogCWFsbG9jX2ludHJfZ2F0ZShDQUxMX0ZVTkNUSU9OX1ZFQ1RPUiwgY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQpOwpAQCAtMTY5LDEwICsxODUsMTQgQEAKIAlhbGxvY19pbnRyX2dhdGUoVEhFUk1BTF9BUElDX1ZFQ1RPUiwgdGhlcm1hbF9pbnRlcnJ1cHQpOwogI2VuZGlmCiAKLQkvKiBzZXR1cCBhZnRlciBjYWxsIGdhdGVzIGFyZSBpbml0aWFsaXNlZCAodXN1YWxseSBhZGQgaW4KLQkgKiB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGdhdGVzKQorCWlmICghYWNwaV9pb2FwaWMpCisJCXNldHVwX2lycSgyLCAmaXJxMik7CisKKwkvKgorCSAqIENhbGwgcXVpcmtzIGFmdGVyIGNhbGwgZ2F0ZXMgYXJlIGluaXRpYWxpc2VkICh1c3VhbGx5IGFkZCBpbgorCSAqIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZ2F0ZXMpOgogCSAqLwotCWludHJfaW5pdF9ob29rKCk7CisJeDg2X3F1aXJrX2ludHJfaW5pdCgpOwogCiAJLyoKIAkgKiBFeHRlcm5hbCBGUFU/IFNldCB1cCBpcnExMyBpZiBzbywgZm9yCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYwppbmRleCAxMDQzNWExLi5lZWRmYWViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPG1hY2hfaXBpLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAogLyoKICAqIFB1dCB0aGUgZXJyb3IgY29kZSBoZXJlIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBjYXJlczoKQEAgLTM0Nyw3ICszNDcsNyBAQAogICovCiB2b2lkIGtnZGJfcm91bmR1cF9jcHVzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc2VuZF9JUElfYWxsYnV0c2VsZihBUElDX0RNX05NSSk7CisJYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZihBUElDX0RNX05NSSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZTk0OGIyOC4uNDU1OGRkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xOTMsNiArMTkzLDkgQEAKIAlrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlOwogCWtwcm9iZV9vcGNvZGVfdCAqb3JpZ19vcGNvZGVzID0gb3Bjb2RlczsKIAorCWlmIChzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhvcGNvZGVzKSkKKwkJcmV0dXJuIDA7CS8qIFBhZ2UgZmF1bHQgbWF5IG9jY3VyIG9uIHRoaXMgYWRkcmVzcy4gKi8KKwogcmV0cnk6CiAJaWYgKG9wY29kZXMgLSBvcmlnX29wY29kZXMgPiBNQVhfSU5TTl9TSVpFIC0gMSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCmluZGV4IDY1MmZjZTZkLi4xMzdmMmU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX3BhcmEuaD4KICNpbmNsdWRlIDxhc20vcHZjbG9jay5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwppbmRleCAzN2Y0MjAwLi5mNWZjOGM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogc3RhdGljIHZvaWQgbWFjaGluZV9rZXhlY19wcmVwYXJlX3BhZ2VfdGFibGVzKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewogCXZvaWQgKmNvbnRyb2xfcGFnZTsKLQlwbWRfdCAqcG1kID0gMDsKKwlwbWRfdCAqcG1kID0gTlVMTDsKIAogCWNvbnRyb2xfcGFnZSA9IHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpOwogI2lmZGVmIENPTkZJR19YODZfUEFFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwppbmRleCBjNDNjYWEzLi42OTkzZDUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKQEAgLTE4LDE1ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNkZWZpbmUgUEFHRV9BTElHTkVEIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXyhQQUdFX1NJWkUpKSkKLXN0YXRpYyB1NjQga2V4ZWNfcGdkWzUxMl0gUEFHRV9BTElHTkVEOwotc3RhdGljIHU2NCBrZXhlY19wdWQwWzUxMl0gUEFHRV9BTElHTkVEOwotc3RhdGljIHU2NCBrZXhlY19wbWQwWzUxMl0gUEFHRV9BTElHTkVEOwotc3RhdGljIHU2NCBrZXhlY19wdGUwWzUxMl0gUEFHRV9BTElHTkVEOwotc3RhdGljIHU2NCBrZXhlY19wdWQxWzUxMl0gUEFHRV9BTElHTkVEOwotc3RhdGljIHU2NCBrZXhlY19wbWQxWzUxMl0gUEFHRV9BTElHTkVEOwotc3RhdGljIHU2NCBrZXhlY19wdGUxWzUxMl0gUEFHRV9BTElHTkVEOwotCiBzdGF0aWMgdm9pZCBpbml0X2xldmVsMl9wYWdlKHBtZF90ICpsZXZlbDJwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmRfYWRkcjsKQEAgLTEwNywxMiArOTgsNjUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgdm9pZCBmcmVlX3RyYW5zaXRpb25fcGd0YWJsZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmFyY2gucHVkKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmFyY2gucG1kKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmFyY2gucHRlKTsKK30KKworc3RhdGljIGludCBpbml0X3RyYW5zaXRpb25fcGd0YWJsZShzdHJ1Y3Qga2ltYWdlICppbWFnZSwgcGdkX3QgKnBnZCkKK3sKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBwYWRkcjsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKworCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmVsb2NhdGVfa2VybmVsOworCXBhZGRyID0gX19wYShwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKStQQUdFX1NJWkUpOworCXBnZCArPSBwZ2RfaW5kZXgodmFkZHIpOworCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHsKKwkJcHVkID0gKHB1ZF90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIXB1ZCkKKwkJCWdvdG8gZXJyOworCQlpbWFnZS0+YXJjaC5wdWQgPSBwdWQ7CisJCXNldF9wZ2QocGdkLCBfX3BnZChfX3BhKHB1ZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJfQorCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCB2YWRkcik7CisJaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkgeworCQlwbWQgPSAocG1kX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghcG1kKQorCQkJZ290byBlcnI7CisJCWltYWdlLT5hcmNoLnBtZCA9IHBtZDsKKwkJc2V0X3B1ZChwdWQsIF9fcHVkKF9fcGEocG1kKSB8IF9LRVJOUEdfVEFCTEUpKTsKKwl9CisJcG1kID0gcG1kX29mZnNldChwdWQsIHZhZGRyKTsKKwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKSB7CisJCXB0ZSA9IChwdGVfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFwdGUpCisJCQlnb3RvIGVycjsKKwkJaW1hZ2UtPmFyY2gucHRlID0gcHRlOworCQlzZXRfcG1kKHBtZCwgX19wbWQoX19wYShwdGUpIHwgX0tFUk5QR19UQUJMRSkpOworCX0KKwlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZhZGRyKTsKKwlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwYWRkciA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTF9FWEVDKSk7CisJcmV0dXJuIDA7CitlcnI6CisJZnJlZV90cmFuc2l0aW9uX3BndGFibGUoaW1hZ2UpOworCXJldHVybiByZXN1bHQ7Cit9CisKIAogc3RhdGljIGludCBpbml0X3BndGFibGUoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGd0YWJsZSkKIHsKIAlwZ2RfdCAqbGV2ZWw0cDsKKwlpbnQgcmVzdWx0OwogCWxldmVsNHAgPSAocGdkX3QgKilfX3ZhKHN0YXJ0X3BndGFibGUpOwotCXJldHVybiBpbml0X2xldmVsNF9wYWdlKGltYWdlLCBsZXZlbDRwLCAwLCBtYXhfcGZuIDw8IFBBR0VfU0hJRlQpOworCXJlc3VsdCA9IGluaXRfbGV2ZWw0X3BhZ2UoaW1hZ2UsIGxldmVsNHAsIDAsIG1heF9wZm4gPDwgUEFHRV9TSElGVCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gaW5pdF90cmFuc2l0aW9uX3BndGFibGUoaW1hZ2UsIGxldmVsNHApOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfaWR0KHZvaWQgKm5ld2lkdCwgdTE2IGxpbWl0KQpAQCAtMTc0LDcgKzIxOCw3IEBACiAKIHZvaWQgbWFjaGluZV9rZXhlY19jbGVhbnVwKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewotCXJldHVybjsKKwlmcmVlX3RyYW5zaXRpb25fcGd0YWJsZShpbWFnZSk7CiB9CiAKIC8qCkBAIC0xOTUsMjIgKzIzOSw2IEBACiAJbWVtY3B5KGNvbnRyb2xfcGFnZSwgcmVsb2NhdGVfa2VybmVsLCBQQUdFX1NJWkUpOwogCiAJcGFnZV9saXN0W1BBX0NPTlRST0xfUEFHRV0gPSB2aXJ0X3RvX3BoeXMoY29udHJvbF9wYWdlKTsKLQlwYWdlX2xpc3RbVkFfQ09OVFJPTF9QQUdFXSA9ICh1bnNpZ25lZCBsb25nKXJlbG9jYXRlX2tlcm5lbDsKLQlwYWdlX2xpc3RbUEFfUEdEXSA9IHZpcnRfdG9fcGh5cygma2V4ZWNfcGdkKTsKLQlwYWdlX2xpc3RbVkFfUEdEXSA9ICh1bnNpZ25lZCBsb25nKWtleGVjX3BnZDsKLQlwYWdlX2xpc3RbUEFfUFVEXzBdID0gdmlydF90b19waHlzKCZrZXhlY19wdWQwKTsKLQlwYWdlX2xpc3RbVkFfUFVEXzBdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfcHVkMDsKLQlwYWdlX2xpc3RbUEFfUE1EXzBdID0gdmlydF90b19waHlzKCZrZXhlY19wbWQwKTsKLQlwYWdlX2xpc3RbVkFfUE1EXzBdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfcG1kMDsKLQlwYWdlX2xpc3RbUEFfUFRFXzBdID0gdmlydF90b19waHlzKCZrZXhlY19wdGUwKTsKLQlwYWdlX2xpc3RbVkFfUFRFXzBdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfcHRlMDsKLQlwYWdlX2xpc3RbUEFfUFVEXzFdID0gdmlydF90b19waHlzKCZrZXhlY19wdWQxKTsKLQlwYWdlX2xpc3RbVkFfUFVEXzFdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfcHVkMTsKLQlwYWdlX2xpc3RbUEFfUE1EXzFdID0gdmlydF90b19waHlzKCZrZXhlY19wbWQxKTsKLQlwYWdlX2xpc3RbVkFfUE1EXzFdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfcG1kMTsKLQlwYWdlX2xpc3RbUEFfUFRFXzFdID0gdmlydF90b19waHlzKCZrZXhlY19wdGUxKTsKLQlwYWdlX2xpc3RbVkFfUFRFXzFdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfcHRlMTsKLQogCXBhZ2VfbGlzdFtQQV9UQUJMRV9QQUdFXSA9CiAJICAodW5zaWduZWQgbG9uZylfX3BhKHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21jYV8zMi5jIGIvYXJjaC94ODYva2VybmVsL21jYV8zMi5jCmluZGV4IDJkYzE4MzcuLjg0NWQ4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tY2FfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWNhXzMyLmMKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3aGljaF9zY3NpOwogCkBAIC00NzQsNiArNDczLDQgQEAKIAkgKiBhZGFwdGVyIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIGVycm9yLgogCSAqLwogCWJ1c19mb3JfZWFjaF9kZXYoJm1jYV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgbWNhX2hhbmRsZV9ubWlfY2FsbGJhY2spOwotCi0JbWNhX25taV9ob29rKCk7Ci19IC8qIG1jYV9oYW5kbGVfbm1pICovCit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKaW5kZXggYjdmNGM5Mi4uNWU5ZjRmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwpAQCAtODcsOSArODcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJcmV0dXJuICghc2lnbWF0Y2goc2lnLCBjc2lnLT5zaWcsIHBmLCBjc2lnLT5wZikpID8gMCA6IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IAorc3RhdGljIGlubGluZSBpbnQKIHVwZGF0ZV9tYXRjaF9yZXZpc2lvbihzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9pbnRlbCAqbWNfaGVhZGVyLAlpbnQgcmV2KQogewogCXJldHVybiAobWNfaGVhZGVyLT5yZXYgPD0gcmV2KSA/IDAgOiAxOwpAQCAtNDQyLDggKzQ0Miw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsICh2b2lkKilmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUsCi0JCQkmZ2V0X3Vjb2RlX2Z3KTsKKwlyZXQgPSBnZW5lcmljX2xvYWRfbWljcm9jb2RlKGNwdSwgKHZvaWQgKilmaXJtd2FyZS0+ZGF0YSwKKwkJCQkgICAgIGZpcm13YXJlLT5zaXplLCAmZ2V0X3Vjb2RlX2Z3KTsKIAogCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCkBAIC00NjAsNyArNDYwLDcgQEAKIAkvKiBXZSBzaG91bGQgYmluZCB0aGUgdGFzayB0byB0aGUgQ1BVICovCiAJQlVHX09OKGNwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCXJldHVybiBnZW5lcmljX2xvYWRfbWljcm9jb2RlKGNwdSwgKHZvaWQqKWJ1Ziwgc2l6ZSwgJmdldF91Y29kZV91c2VyKTsKKwlyZXR1cm4gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsICh2b2lkICopYnVmLCBzaXplLCAmZ2V0X3Vjb2RlX3VzZXIpOwogfQogCiBzdGF0aWMgdm9pZCBtaWNyb2NvZGVfZmluaV9jcHUoaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfMzIuYwppbmRleCAzZGIwYTU0NC4uMGVkZDgxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21vZHVsZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfMzIuYwpAQCAtNDIsNyArNDIsNyBAQAogewogCXZmcmVlKG1vZHVsZV9yZWdpb24pOwogCS8qIEZJWE1FOiBJZiBtb2R1bGVfcmVnaW9uID09IG1vZC0+aW5pdF9yZWdpb24sIHRyaW0gZXhjZXB0aW9uCi0gICAgICAgICAgIHRhYmxlIGVudHJpZXMuICovCisJICAgdGFibGUgZW50cmllcy4gKi8KIH0KIAogLyogV2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBzcGVjaWFsLiAqLwpAQCAtMTEzLDEzICsxMTMsMTMgQEAKIAkJKnBhcmEgPSBOVUxMOwogCWNoYXIgKnNlY3N0cmluZ3MgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CiAKLQlmb3IgKHMgPSBzZWNoZHJzOyBzIDwgc2VjaGRycyArIGhkci0+ZV9zaG51bTsgcysrKSB7IAorCWZvciAocyA9IHNlY2hkcnM7IHMgPCBzZWNoZHJzICsgaGRyLT5lX3NobnVtOyBzKyspIHsKIAkJaWYgKCFzdHJjbXAoIi50ZXh0Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQogCQkJdGV4dCA9IHM7CiAJCWlmICghc3RyY21wKCIuYWx0aW5zdHJ1Y3Rpb25zIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQogCQkJYWx0ID0gczsKIAkJaWYgKCFzdHJjbXAoIi5zbXBfbG9ja3MiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkpCi0JCQlsb2Nrcz0gczsKKwkJCWxvY2tzID0gczsKIAkJaWYgKCFzdHJjbXAoIi5wYXJhaW5zdHJ1Y3Rpb25zIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQogCQkJcGFyYSA9IHM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC94ODYva2VybmVsL21vZHVsZV82NC5jCmluZGV4IDZiYTg3ODMuLmMyMzg4MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tb2R1bGVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTMwLDE0ICszMCwxNCBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotI2RlZmluZSBERUJVR1AoZm10Li4uKSAKKyNkZWZpbmUgREVCVUdQKGZtdC4uLikKIAogI2lmbmRlZiBDT05GSUdfVU1MCiB2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKIHsKIAl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKIAkvKiBGSVhNRTogSWYgbW9kdWxlX3JlZ2lvbiA9PSBtb2QtPmluaXRfcmVnaW9uLCB0cmltIGV4Y2VwdGlvbgotICAgICAgICAgICB0YWJsZSBlbnRyaWVzLiAqLworCSAgIHRhYmxlIGVudHJpZXMuICovCiB9CiAKIHZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCkBAIC03Nyw3ICs3Nyw3IEBACiAJRWxmNjRfUmVsYSAqcmVsID0gKHZvaWQgKilzZWNoZHJzW3JlbHNlY10uc2hfYWRkcjsKIAlFbGY2NF9TeW0gKnN5bTsKIAl2b2lkICpsb2M7Ci0JdTY0IHZhbDsgCisJdTY0IHZhbDsKIAogCURFQlVHUCgiQXBwbHlpbmcgcmVsb2NhdGUgc2VjdGlvbiAldSB0byAldVxuIiwgcmVsc2VjLAogCSAgICAgICBzZWNoZHJzW3JlbHNlY10uc2hfaW5mbyk7CkBAIC05MSwxMSArOTEsMTEgQEAKIAkJc3ltID0gKEVsZjY0X1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKIAkJCSsgRUxGNjRfUl9TWU0ocmVsW2ldLnJfaW5mbyk7CiAKLQkgICAgICAgIERFQlVHUCgidHlwZSAlZCBzdF92YWx1ZSAlTHggcl9hZGRlbmQgJUx4IGxvYyAlTHhcbiIsCi0JCSAgICAgICAoaW50KUVMRjY0X1JfVFlQRShyZWxbaV0ucl9pbmZvKSwgCi0JCSAgICAgICBzeW0tPnN0X3ZhbHVlLCByZWxbaV0ucl9hZGRlbmQsICh1NjQpbG9jKTsKKwkJREVCVUdQKCJ0eXBlICVkIHN0X3ZhbHVlICVMeCByX2FkZGVuZCAlTHggbG9jICVMeFxuIiwKKwkJCShpbnQpRUxGNjRfUl9UWVBFKHJlbFtpXS5yX2luZm8pLAorCQkJc3ltLT5zdF92YWx1ZSwgcmVsW2ldLnJfYWRkZW5kLCAodTY0KWxvYyk7CiAKLQkJdmFsID0gc3ltLT5zdF92YWx1ZSArIHJlbFtpXS5yX2FkZGVuZDsgCisJCXZhbCA9IHN5bS0+c3RfdmFsdWUgKyByZWxbaV0ucl9hZGRlbmQ7CiAKIAkJc3dpdGNoIChFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbykpIHsKIAkJY2FzZSBSX1g4Nl82NF9OT05FOgpAQCAtMTEzLDE2ICsxMTMsMTYgQEAKIAkJCWlmICgoczY0KXZhbCAhPSAqKHMzMiAqKWxvYykKIAkJCQlnb3RvIG92ZXJmbG93OwogCQkJYnJlYWs7Ci0JCWNhc2UgUl9YODZfNjRfUEMzMjogCisJCWNhc2UgUl9YODZfNjRfUEMzMjoKIAkJCXZhbCAtPSAodTY0KWxvYzsKIAkJCSoodTMyICopbG9jID0gdmFsOwogI2lmIDAKIAkJCWlmICgoczY0KXZhbCAhPSAqKHMzMiAqKWxvYykKLQkJCQlnb3RvIG92ZXJmbG93OyAKKwkJCQlnb3RvIG92ZXJmbG93OwogI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBVbmtub3duIHJlbGEgcmVsb2NhdGlvbjogJUx1XG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJtb2R1bGUgJXM6IFVua25vd24gcmVsYSByZWxvY2F0aW9uOiAlbGx1XG4iLAogCQkJICAgICAgIG1lLT5uYW1lLCBFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbykpOwogCQkJcmV0dXJuIC1FTk9FWEVDOwogCQl9CkBAIC0xMzAsNyArMTMwLDcgQEAKIAlyZXR1cm4gMDsKIAogb3ZlcmZsb3c6Ci0JcHJpbnRrKEtFUk5fRVJSICJvdmVyZmxvdyBpbiByZWxvY2F0aW9uIHR5cGUgJWQgdmFsICVMeFxuIiwgCisJcHJpbnRrKEtFUk5fRVJSICJvdmVyZmxvdyBpbiByZWxvY2F0aW9uIHR5cGUgJWQgdmFsICVMeFxuIiwKIAkgICAgICAgKGludClFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbyksIHZhbCk7CiAJcHJpbnRrKEtFUk5fRVJSICJgJXMnIGxpa2VseSBub3QgY29tcGlsZWQgd2l0aCAtbWNtb2RlbD1rZXJuZWxcbiIsCiAJICAgICAgIG1lLT5uYW1lKTsKQEAgLTE0MywxMyArMTQzLDEzIEBACiAJCSAgIHVuc2lnbmVkIGludCByZWxzZWMsCiAJCSAgIHN0cnVjdCBtb2R1bGUgKm1lKQogewotCXByaW50aygibm9uIGFkZCByZWxvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCXByaW50ayhLRVJOX0VSUiAibm9uIGFkZCByZWxvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwogCXJldHVybiAtRU5PU1lTOwotfSAKK30KIAogaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqbWUpCisJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQogewogCWNvbnN0IEVsZl9TaGRyICpzLCAqdGV4dCA9IE5VTEwsICphbHQgPSBOVUxMLCAqbG9ja3MgPSBOVUxMLAogCQkqcGFyYSA9IE5VTEw7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJaWYgKCFzdHJjbXAoIi5hbHRpbnN0cnVjdGlvbnMiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkpCiAJCQlhbHQgPSBzOwogCQlpZiAoIXN0cmNtcCgiLnNtcF9sb2NrcyIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKLQkJCWxvY2tzPSBzOworCQkJbG9ja3MgPSBzOwogCQlpZiAoIXN0cmNtcCgiLnBhcmFpbnN0cnVjdGlvbnMiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkpCiAJCQlwYXJhID0gczsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwppbmRleCBhNjQ5YTRjLi4zN2NiMWJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTMsNyArMyw3IEBACiAgKgljb21wbGlhbnQgTVAtdGFibGUgcGFyc2luZyByb3V0aW5lcy4KICAqCiAgKgkoYykgMTk5NSBBbGFuIENveCwgQnVpbGRpbmcgIzMgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqCShjKSAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoJKGMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKiAgICAgIChjKSAyMDA4IEFsZXhleSBTdGFyaWtvdnNraXkgPGFzdGFyaWtvdnNraXlAc3VzZS5kZT4KICAqLwogCkBAIC0yOSwxMiArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotI2lmZGVmIENPTkZJR19YODZfMzIKLSNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxtYWNoX21wcGFyc2UuaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIC8qCiAgKiBDaGVja3N1bSBhbiBNUCBjb25maWd1cmF0aW9uIGJsb2NrLgogICovCkBAIC0xNDQsMTEgKzEzOSwxMSBAQAogCWlmIChiYWRfaW9hcGljKG0tPmFwaWNhZGRyKSkKIAkJcmV0dXJuOwogCi0JbXBfaW9hcGljc1tucl9pb2FwaWNzXS5tcF9hcGljYWRkciA9IG0tPmFwaWNhZGRyOwotCW1wX2lvYXBpY3NbbnJfaW9hcGljc10ubXBfYXBpY2lkID0gbS0+YXBpY2lkOwotCW1wX2lvYXBpY3NbbnJfaW9hcGljc10ubXBfdHlwZSA9IG0tPnR5cGU7Ci0JbXBfaW9hcGljc1tucl9pb2FwaWNzXS5tcF9hcGljdmVyID0gbS0+YXBpY3ZlcjsKLQltcF9pb2FwaWNzW25yX2lvYXBpY3NdLm1wX2ZsYWdzID0gbS0+ZmxhZ3M7CisJbXBfaW9hcGljc1tucl9pb2FwaWNzXS5hcGljYWRkciA9IG0tPmFwaWNhZGRyOworCW1wX2lvYXBpY3NbbnJfaW9hcGljc10uYXBpY2lkID0gbS0+YXBpY2lkOworCW1wX2lvYXBpY3NbbnJfaW9hcGljc10udHlwZSA9IG0tPnR5cGU7CisJbXBfaW9hcGljc1tucl9pb2FwaWNzXS5hcGljdmVyID0gbS0+YXBpY3ZlcjsKKwltcF9pb2FwaWNzW25yX2lvYXBpY3NdLmZsYWdzID0gbS0+ZmxhZ3M7CiAJbnJfaW9hcGljcysrOwogfQogCkBAIC0xNjAsNTUgKzE1NSw1NSBAQAogCQltLT5zcmNidXNpcnEsIG0tPmRzdGFwaWMsIG0tPmRzdGlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwcmludF9tcF9pcnFfaW5mbyhzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqbXBfaXJxKQorc3RhdGljIHZvaWQgX19pbml0IHByaW50X21wX2lycV9pbmZvKHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEpCiB7CiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiSW50OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlMDJ4LCIKIAkJIiBJUlEgJTAyeCwgQVBJQyBJRCAleCwgQVBJQyBJTlQgJTAyeFxuIiwKLQkJbXBfaXJxLT5tcF9pcnF0eXBlLCBtcF9pcnEtPm1wX2lycWZsYWcgJiAzLAotCQkobXBfaXJxLT5tcF9pcnFmbGFnID4+IDIpICYgMywgbXBfaXJxLT5tcF9zcmNidXMsCi0JCW1wX2lycS0+bXBfc3JjYnVzaXJxLCBtcF9pcnEtPm1wX2RzdGFwaWMsIG1wX2lycS0+bXBfZHN0aXJxKTsKKwkJbXBfaXJxLT5pcnF0eXBlLCBtcF9pcnEtPmlycWZsYWcgJiAzLAorCQkobXBfaXJxLT5pcnFmbGFnID4+IDIpICYgMywgbXBfaXJxLT5zcmNidXMsCisJCW1wX2lycS0+c3JjYnVzaXJxLCBtcF9pcnEtPmRzdGFwaWMsIG1wX2lycS0+ZHN0aXJxKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl90b19tcF9pcnEoc3RydWN0IG1wY19pbnRzcmMgKm0sCi0JCQkJICAgIHN0cnVjdCBtcF9jb25maWdfaW50c3JjICptcF9pcnEpCisJCQkJICAgIHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEpCiB7Ci0JbXBfaXJxLT5tcF9kc3RhcGljID0gbS0+ZHN0YXBpYzsKLQltcF9pcnEtPm1wX3R5cGUgPSBtLT50eXBlOwotCW1wX2lycS0+bXBfaXJxdHlwZSA9IG0tPmlycXR5cGU7Ci0JbXBfaXJxLT5tcF9pcnFmbGFnID0gbS0+aXJxZmxhZzsKLQltcF9pcnEtPm1wX3NyY2J1cyA9IG0tPnNyY2J1czsKLQltcF9pcnEtPm1wX3NyY2J1c2lycSA9IG0tPnNyY2J1c2lycTsKLQltcF9pcnEtPm1wX2RzdGlycSA9IG0tPmRzdGlycTsKKwltcF9pcnEtPmRzdGFwaWMgPSBtLT5kc3RhcGljOworCW1wX2lycS0+dHlwZSA9IG0tPnR5cGU7CisJbXBfaXJxLT5pcnF0eXBlID0gbS0+aXJxdHlwZTsKKwltcF9pcnEtPmlycWZsYWcgPSBtLT5pcnFmbGFnOworCW1wX2lycS0+c3JjYnVzID0gbS0+c3JjYnVzOworCW1wX2lycS0+c3JjYnVzaXJxID0gbS0+c3JjYnVzaXJxOworCW1wX2lycS0+ZHN0aXJxID0gbS0+ZHN0aXJxOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXNzaWduX3RvX21wY19pbnRzcmMoc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgKm1wX2lycSwKK3N0YXRpYyB2b2lkIF9faW5pdCBhc3NpZ25fdG9fbXBjX2ludHNyYyhzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxLAogCQkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKIHsKLQltLT5kc3RhcGljID0gbXBfaXJxLT5tcF9kc3RhcGljOwotCW0tPnR5cGUgPSBtcF9pcnEtPm1wX3R5cGU7Ci0JbS0+aXJxdHlwZSA9IG1wX2lycS0+bXBfaXJxdHlwZTsKLQltLT5pcnFmbGFnID0gbXBfaXJxLT5tcF9pcnFmbGFnOwotCW0tPnNyY2J1cyA9IG1wX2lycS0+bXBfc3JjYnVzOwotCW0tPnNyY2J1c2lycSA9IG1wX2lycS0+bXBfc3JjYnVzaXJxOwotCW0tPmRzdGlycSA9IG1wX2lycS0+bXBfZHN0aXJxOworCW0tPmRzdGFwaWMgPSBtcF9pcnEtPmRzdGFwaWM7CisJbS0+dHlwZSA9IG1wX2lycS0+dHlwZTsKKwltLT5pcnF0eXBlID0gbXBfaXJxLT5pcnF0eXBlOworCW0tPmlycWZsYWcgPSBtcF9pcnEtPmlycWZsYWc7CisJbS0+c3JjYnVzID0gbXBfaXJxLT5zcmNidXM7CisJbS0+c3JjYnVzaXJxID0gbXBfaXJxLT5zcmNidXNpcnE7CisJbS0+ZHN0aXJxID0gbXBfaXJxLT5kc3RpcnE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1wX2lycV9tcGNfaW50c3JjX2NtcChzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyAqbXBfaXJxLAorc3RhdGljIGludCBfX2luaXQgbXBfaXJxX21wY19pbnRzcmNfY21wKHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEsCiAJCQkJCXN0cnVjdCBtcGNfaW50c3JjICptKQogewotCWlmIChtcF9pcnEtPm1wX2RzdGFwaWMgIT0gbS0+ZHN0YXBpYykKKwlpZiAobXBfaXJxLT5kc3RhcGljICE9IG0tPmRzdGFwaWMpCiAJCXJldHVybiAxOwotCWlmIChtcF9pcnEtPm1wX3R5cGUgIT0gbS0+dHlwZSkKKwlpZiAobXBfaXJxLT50eXBlICE9IG0tPnR5cGUpCiAJCXJldHVybiAyOwotCWlmIChtcF9pcnEtPm1wX2lycXR5cGUgIT0gbS0+aXJxdHlwZSkKKwlpZiAobXBfaXJxLT5pcnF0eXBlICE9IG0tPmlycXR5cGUpCiAJCXJldHVybiAzOwotCWlmIChtcF9pcnEtPm1wX2lycWZsYWcgIT0gbS0+aXJxZmxhZykKKwlpZiAobXBfaXJxLT5pcnFmbGFnICE9IG0tPmlycWZsYWcpCiAJCXJldHVybiA0OwotCWlmIChtcF9pcnEtPm1wX3NyY2J1cyAhPSBtLT5zcmNidXMpCisJaWYgKG1wX2lycS0+c3JjYnVzICE9IG0tPnNyY2J1cykKIAkJcmV0dXJuIDU7Ci0JaWYgKG1wX2lycS0+bXBfc3JjYnVzaXJxICE9IG0tPnNyY2J1c2lycSkKKwlpZiAobXBfaXJxLT5zcmNidXNpcnEgIT0gbS0+c3JjYnVzaXJxKQogCQlyZXR1cm4gNjsKLQlpZiAobXBfaXJxLT5tcF9kc3RpcnEgIT0gbS0+ZHN0aXJxKQorCWlmIChtcF9pcnEtPmRzdGlycSAhPSBtLT5kc3RpcnEpCiAJCXJldHVybiA3OwogCiAJcmV0dXJuIDA7CkBAIC0yOTIsMTYgKzI4Nyw3IEBACiAJCXJldHVybiAwOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogbmVlZCB0byBtYWtlIHN1cmUgc3VtbWl0IGFuZCBlczcwMDAncyBtcHNfb2VtX2NoZWNrIGlzIHNhZmUgdG8gYmUKLQkgKiBjYWxsZWQgZWFybHkgdmlhIGdlbmVyaWNhcmNoICdzIG1wc19vZW1fY2hlY2sKLQkgKi8KLQlpZiAoZWFybHkpIHsKLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi0JCW51bWFxX21wc19vZW1fY2hlY2sobXBjLCBvZW0sIHN0cik7Ci0jZW5kaWYKLQl9IGVsc2UKLQkJbXBzX29lbV9jaGVjayhtcGMsIG9lbSwgc3RyKTsKKwlnZW5lcmljX21wc19vZW1fY2hlY2sobXBjLCBvZW0sIHN0cik7CiAjZW5kaWYKIAkvKiBzYXZlIHRoZSBsb2NhbCBBUElDIGFkZHJlc3MsIGl0IG1pZ2h0IGJlIG5vbi1kZWZhdWx0ICovCiAJaWYgKCFhY3BpX2xhcGljKQpAQCAtMzg2LDEzICszNzIsMTMgQEAKIAkJCSgqeDg2X3F1aXJrcy0+bXBjX3JlY29yZCkrKzsKIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICi0gICAgICAgZ2VuZXJpY19iaWdzbXBfcHJvYmUoKTsKKyNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAorCWdlbmVyaWNfYmlnc21wX3Byb2JlKCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQlzZXR1cF9hcGljX3JvdXRpbmcoKTsKLSNlbmRpZgorCWlmIChhcGljLT5zZXR1cF9hcGljX3JvdXRpbmcpCisJCWFwaWMtPnNldHVwX2FwaWNfcm91dGluZygpOworCiAJaWYgKCFudW1fcHJvY2Vzc29ycykKIAkJcHJpbnRrKEtFUk5fRVJSICJNUFRBQkxFOiBubyBwcm9jZXNzb3JzIHJlZ2lzdGVyZWQhXG4iKTsKIAlyZXR1cm4gbnVtX3Byb2Nlc3NvcnM7CkBAIC00MTcsNyArNDAzLDcgQEAKIAlpbnRzcmMudHlwZSA9IE1QX0lOVFNSQzsKIAlpbnRzcmMuaXJxZmxhZyA9IDA7CS8qIGNvbmZvcm1pbmcgKi8KIAlpbnRzcmMuc3JjYnVzID0gMDsKLQlpbnRzcmMuZHN0YXBpYyA9IG1wX2lvYXBpY3NbMF0ubXBfYXBpY2lkOworCWludHNyYy5kc3RhcGljID0gbXBfaW9hcGljc1swXS5hcGljaWQ7CiAKIAlpbnRzcmMuaXJxdHlwZSA9IG1wX0lOVDsKIApAQCAtNTcwLDE0ICs1NTYsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZl9mb3VuZDsKK3N0YXRpYyBzdHJ1Y3QgbXBmX2ludGVsICptcGZfZm91bmQ7CiAKIC8qCiAgKiBTY2FuIHRoZSBtZW1vcnkgYmxvY2tzIGZvciBhbiBTTVAgY29uZmlndXJhdGlvbiBibG9jay4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IF9fZ2V0X3NtcF9jb25maWcodW5zaWduZWQgaW50IGVhcmx5KQogewotCXN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqbXBmID0gbXBmX2ZvdW5kOworCXN0cnVjdCBtcGZfaW50ZWwgKm1wZiA9IG1wZl9mb3VuZDsKIAogCWlmICghbXBmKQogCQlyZXR1cm47CkBAIC01OTgsOSArNTg0LDkgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJJbnRlbCBNdWx0aVByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIHYxLiVkXG4iLAotCSAgICAgICBtcGYtPm1wZl9zcGVjaWZpY2F0aW9uKTsKKwkgICAgICAgbXBmLT5zcGVjaWZpY2F0aW9uKTsKICNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQotCWlmIChtcGYtPm1wZl9mZWF0dXJlMiAmICgxIDw8IDcpKSB7CisJaWYgKG1wZi0+ZmVhdHVyZTIgJiAoMSA8PCA3KSkgewogCQlwcmludGsoS0VSTl9JTkZPICIgICAgSU1DUiBhbmQgUElDIGNvbXBhdGliaWxpdHkgbW9kZS5cbiIpOwogCQlwaWNfbW9kZSA9IDE7CiAJfSBlbHNlIHsKQEAgLTYxMSw3ICs1OTcsNyBAQAogCS8qCiAJICogTm93IHNlZSBpZiB3ZSBuZWVkIHRvIHJlYWQgZnVydGhlci4KIAkgKi8KLQlpZiAobXBmLT5tcGZfZmVhdHVyZTEgIT0gMCkgeworCWlmIChtcGYtPmZlYXR1cmUxICE9IDApIHsKIAkJaWYgKGVhcmx5KSB7CiAJCQkvKgogCQkJICogbG9jYWwgQVBJQyBoYXMgZGVmYXVsdCBhZGRyZXNzCkBAIC02MjEsMTYgKzYwNywxNiBAQAogCQl9CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRGVmYXVsdCBNUCBjb25maWd1cmF0aW9uICMlZFxuIiwKLQkJICAgICAgIG1wZi0+bXBmX2ZlYXR1cmUxKTsKLQkJY29uc3RydWN0X2RlZmF1bHRfSVNBX21wdGFibGUobXBmLT5tcGZfZmVhdHVyZTEpOworCQkgICAgICAgbXBmLT5mZWF0dXJlMSk7CisJCWNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+ZmVhdHVyZTEpOwogCi0JfSBlbHNlIGlmIChtcGYtPm1wZl9waHlzcHRyKSB7CisJfSBlbHNlIGlmIChtcGYtPnBoeXNwdHIpIHsKIAogCQkvKgogCQkgKiBSZWFkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0YWJsZS4gIEFueXRoaW5nIGhlcmUgd2lsbAogCQkgKiBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCiAJCSAqLwotCQlpZiAoIXNtcF9yZWFkX21wYyhwaHlzX3RvX3ZpcnQobXBmLT5tcGZfcGh5c3B0ciksIGVhcmx5KSkgeworCQlpZiAoIXNtcF9yZWFkX21wYyhwaHlzX3RvX3ZpcnQobXBmLT5waHlzcHRyKSwgZWFybHkpKSB7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJCQlzbXBfZm91bmRfY29uZmlnID0gMDsKICNlbmRpZgpAQCAtNjg4LDMyICs2NzQsMzIgQEAKIAkJCQkgIHVuc2lnbmVkIHJlc2VydmUpCiB7CiAJdW5zaWduZWQgaW50ICpicCA9IHBoeXNfdG9fdmlydChiYXNlKTsKLQlzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZjsKKwlzdHJ1Y3QgbXBmX2ludGVsICptcGY7CiAKIAlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJTY2FuIFNNUCBmcm9tICVwIGZvciAlbGQgYnl0ZXMuXG4iLAogCQkJYnAsIGxlbmd0aCk7CiAJQlVJTERfQlVHX09OKHNpemVvZigqbXBmKSAhPSAxNik7CiAKIAl3aGlsZSAobGVuZ3RoID4gMCkgewotCQltcGYgPSAoc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICopYnA7CisJCW1wZiA9IChzdHJ1Y3QgbXBmX2ludGVsICopYnA7CiAJCWlmICgoKmJwID09IFNNUF9NQUdJQ19JREVOVCkgJiYKLQkJICAgIChtcGYtPm1wZl9sZW5ndGggPT0gMSkgJiYKKwkJICAgIChtcGYtPmxlbmd0aCA9PSAxKSAmJgogCQkgICAgIW1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKWJwLCAxNikgJiYKLQkJICAgICgobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSAxKQotCQkgICAgIHx8IChtcGYtPm1wZl9zcGVjaWZpY2F0aW9uID09IDQpKSkgeworCQkgICAgKChtcGYtPnNwZWNpZmljYXRpb24gPT0gMSkKKwkJICAgICB8fCAobXBmLT5zcGVjaWZpY2F0aW9uID09IDQpKSkgewogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDE7CiAjZW5kaWYKIAkJCW1wZl9mb3VuZCA9IG1wZjsKIAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm91bmQgU01QIE1QLXRhYmxlIGF0IFslcF0gJTA4bHhcbiIsCi0JCQkgICAgICAgbXBmLCB2aXJ0X3RvX3BoeXMobXBmKSk7CisJCQlwcmludGsoS0VSTl9JTkZPICJmb3VuZCBTTVAgTVAtdGFibGUgYXQgWyVwXSAlbGx4XG4iLAorCQkJICAgICAgIG1wZiwgKHU2NCl2aXJ0X3RvX3BoeXMobXBmKSk7CiAKIAkJCWlmICghcmVzZXJ2ZSkKIAkJCQlyZXR1cm4gMTsKIAkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKHZpcnRfdG9fcGh5cyhtcGYpLCBQQUdFX1NJWkUsCiAJCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCQlpZiAobXBmLT5tcGZfcGh5c3B0cikgeworCQkJaWYgKG1wZi0+cGh5c3B0cikgewogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJCQkJLyoKQEAgLTcyMiwxNSArNzA4LDI0IEBACiAJCQkJICogdGhlIGJvdHRvbSBpcyBtYXBwZWQgbm93LgogCQkJCSAqIFBDLTk4MDAncyBNUEMgdGFibGUgcGxhY2VzIG9uIHRoZSB2ZXJ5IGxhc3QKIAkJCQkgKiBvZiBwaHlzaWNhbCBtZW1vcnk7IHNvIHRoYXQgc2ltcGx5IHJlc2VydmluZwotCQkJCSAqIFBBR0VfU0laRSBmcm9tIG1wZy0+bXBmX3BoeXNwdHIgeWllbGRzIEJVRygpCisJCQkJICogUEFHRV9TSVpFIGZyb20gbXBmLT5waHlzcHRyIHlpZWxkcyBCVUcoKQogCQkJCSAqIGluIHJlc2VydmVfYm9vdG1lbS4KKwkJCQkgKiBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHBoeXNwdHIgaXMgYmVsb3cgdGhhbgorCQkJCSAqIG1heF9sb3dfcGZuCisJCQkJICogd2UgZG9uJ3QgbmVlZCByZXNlcnZlIHRoZSBhcmVhIGFib3ZlIG1heF9sb3dfcGZuCiAJCQkJICovCiAJCQkJdW5zaWduZWQgbG9uZyBlbmQgPSBtYXhfbG93X3BmbiAqIFBBR0VfU0laRTsKLQkJCQlpZiAobXBmLT5tcGZfcGh5c3B0ciArIHNpemUgPiBlbmQpCi0JCQkJCXNpemUgPSBlbmQgLSBtcGYtPm1wZl9waHlzcHRyOwotI2VuZGlmCi0JCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5tcGZfcGh5c3B0ciwgc2l6ZSwKKworCQkJCWlmIChtcGYtPnBoeXNwdHIgPCBlbmQpIHsKKwkJCQkJaWYgKG1wZi0+cGh5c3B0ciArIHNpemUgPiBlbmQpCisJCQkJCQlzaXplID0gZW5kIC0gbXBmLT5waHlzcHRyOworCQkJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsCisJCQkJCQkJQk9PVE1FTV9ERUZBVUxUKTsKKwkJCQl9CisjZWxzZQorCQkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwKIAkJCQkJCUJPT1RNRU1fREVGQVVMVCk7CisjZW5kaWYKIAkJCX0KIAogCQkJcmV0dXJuIDE7CkBAIC04MDksMTUgKzgwNCwxNSBAQAogCS8qIG5vdCBsZWdhY3kgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgIT0gbXBfSU5UKQorCQlpZiAobXBfaXJxc1tpXS5pcnF0eXBlICE9IG1wX0lOVCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycWZsYWcgIT0gMHgwZikKKwkJaWYgKG1wX2lycXNbaV0uaXJxZmxhZyAhPSAweDBmKQogCQkJY29udGludWU7CiAKLQkJaWYgKG1wX2lycXNbaV0ubXBfc3JjYnVzICE9IG0tPnNyY2J1cykKKwkJaWYgKG1wX2lycXNbaV0uc3JjYnVzICE9IG0tPnNyY2J1cykKIAkJCWNvbnRpbnVlOwotCQlpZiAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgIT0gbS0+c3JjYnVzaXJxKQorCQlpZiAobXBfaXJxc1tpXS5zcmNidXNpcnEgIT0gbS0+c3JjYnVzaXJxKQogCQkJY29udGludWU7CiAJCWlmIChpcnFfdXNlZFtpXSkgewogCQkJLyogYWxyZWFkeSBjbGFpbWVkICovCkBAIC05MjIsMTAgKzkxNywxMCBAQAogCQlpZiAoaXJxX3VzZWRbaV0pCiAJCQljb250aW51ZTsKIAotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlICE9IG1wX0lOVCkKKwkJaWYgKG1wX2lycXNbaV0uaXJxdHlwZSAhPSBtcF9JTlQpCiAJCQljb250aW51ZTsKIAotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnFmbGFnICE9IDB4MGYpCisJCWlmIChtcF9pcnFzW2ldLmlycWZsYWcgIT0gMHgwZikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChucl9tX3NwYXJlID4gMCkgewpAQCAtMTAwMSw3ICs5OTYsNyBAQAogewogCWNoYXIgc3RyWzE2XTsKIAljaGFyIG9lbVsxMF07Ci0Jc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGY7CisJc3RydWN0IG1wZl9pbnRlbCAqbXBmOwogCXN0cnVjdCBtcGNfdGFibGUgKm1wYywgKm1wY19uZXc7CiAKIAlpZiAoIWVuYWJsZV91cGRhdGVfbXB0YWJsZSkKQEAgLTEwMTQsMTkgKzEwMDksMTkgQEAKIAkvKgogCSAqIE5vdyBzZWUgaWYgd2UgbmVlZCB0byBnbyBmdXJ0aGVyLgogCSAqLwotCWlmIChtcGYtPm1wZl9mZWF0dXJlMSAhPSAwKQorCWlmIChtcGYtPmZlYXR1cmUxICE9IDApCiAJCXJldHVybiAwOwogCi0JaWYgKCFtcGYtPm1wZl9waHlzcHRyKQorCWlmICghbXBmLT5waHlzcHRyKQogCQlyZXR1cm4gMDsKIAotCW1wYyA9IHBoeXNfdG9fdmlydChtcGYtPm1wZl9waHlzcHRyKTsKKwltcGMgPSBwaHlzX3RvX3ZpcnQobXBmLT5waHlzcHRyKTsKIAogCWlmICghc21wX2NoZWNrX21wYyhtcGMsIG9lbSwgc3RyKSkKIAkJcmV0dXJuIDA7CiAKLQlwcmludGsoS0VSTl9JTkZPICJtcGY6ICVseFxuIiwgdmlydF90b19waHlzKG1wZikpOwotCXByaW50ayhLRVJOX0lORk8gIm1wZl9waHlzcHRyOiAleFxuIiwgbXBmLT5tcGZfcGh5c3B0cik7CisJcHJpbnRrKEtFUk5fSU5GTyAibXBmOiAlbGx4XG4iLCAodTY0KXZpcnRfdG9fcGh5cyhtcGYpKTsKKwlwcmludGsoS0VSTl9JTkZPICJwaHlzcHRyOiAleFxuIiwgbXBmLT5waHlzcHRyKTsKIAogCWlmIChtcGNfbmV3X3BoeXMgJiYgbXBjLT5sZW5ndGggPiBtcGNfbmV3X2xlbmd0aCkgewogCQltcGNfbmV3X3BoeXMgPSAwOwpAQCAtMTA0NywyMyArMTA0MiwyMyBAQAogCQl9CiAJCXByaW50ayhLRVJOX0lORk8gInVzZSBpbi1wb3NpdG9uIHJlcGxhY2luZ1xuIik7CiAJfSBlbHNlIHsKLQkJbXBmLT5tcGZfcGh5c3B0ciA9IG1wY19uZXdfcGh5czsKKwkJbXBmLT5waHlzcHRyID0gbXBjX25ld19waHlzOwogCQltcGNfbmV3ID0gcGh5c190b192aXJ0KG1wY19uZXdfcGh5cyk7CiAJCW1lbWNweShtcGNfbmV3LCBtcGMsIG1wYy0+bGVuZ3RoKTsKIAkJbXBjID0gbXBjX25ldzsKIAkJLyogY2hlY2sgaWYgd2UgY2FuIG1vZGlmeSB0aGF0ICovCi0JCWlmIChtcGNfbmV3X3BoeXMgLSBtcGYtPm1wZl9waHlzcHRyKSB7Ci0JCQlzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZl9uZXc7CisJCWlmIChtcGNfbmV3X3BoeXMgLSBtcGYtPnBoeXNwdHIpIHsKKwkJCXN0cnVjdCBtcGZfaW50ZWwgKm1wZl9uZXc7CiAJCQkvKiBzdGVhbCAxNiBieXRlcyBmcm9tIFswLCAxaykgKi8KIAkJCXByaW50ayhLRVJOX0lORk8gIm1wZiBuZXc6ICV4XG4iLCAweDQwMCAtIDE2KTsKIAkJCW1wZl9uZXcgPSBwaHlzX3RvX3ZpcnQoMHg0MDAgLSAxNik7CiAJCQltZW1jcHkobXBmX25ldywgbXBmLCAxNik7CiAJCQltcGYgPSBtcGZfbmV3OwotCQkJbXBmLT5tcGZfcGh5c3B0ciA9IG1wY19uZXdfcGh5czsKKwkJCW1wZi0+cGh5c3B0ciA9IG1wY19uZXdfcGh5czsKIAkJfQotCQltcGYtPm1wZl9jaGVja3N1bSA9IDA7Ci0JCW1wZi0+bXBmX2NoZWNrc3VtIC09IG1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKW1wZiwgMTYpOwotCQlwcmludGsoS0VSTl9JTkZPICJtcGZfcGh5c3B0ciBuZXc6ICV4XG4iLCBtcGYtPm1wZl9waHlzcHRyKTsKKwkJbXBmLT5jaGVja3N1bSA9IDA7CisJCW1wZi0+Y2hlY2tzdW0gLT0gbXBmX2NoZWNrc3VtKCh1bnNpZ25lZCBjaGFyICopbXBmLCAxNik7CisJCXByaW50ayhLRVJOX0lORk8gInBoeXNwdHIgbmV3OiAleFxuIiwgbXBmLT5waHlzcHRyKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21zci5jIGIvYXJjaC94ODYva2VybmVsL21zci5jCmluZGV4IDcyNjI2NjYuLjNjZjM0MTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqbXNyX2NsYXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL251bWFxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbnVtYXFfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIxOTFkNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbnVtYXFfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vKgotICogV3JpdHRlbiBieTogUGF0cmljaWEgR2F1Z2hlbiwgSUJNIENvcnBvcmF0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxnb25lQHVzLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL251bWFxLmg+Ci0jaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotI2RlZmluZQlNQl9UT19QQUdFUyhhZGRyKSAoKGFkZHIpIDw8ICgyMCAtIFBBR0VfU0hJRlQpKQotCi0vKgotICogRnVuY3Rpb246IHNtcF9kdW1wX3FjdCgpCi0gKgotICogRGVzY3JpcHRpb246IGdldHMgbWVtb3J5IGxheW91dCBmcm9tIHRoZSBxdWFkIGNvbmZpZyB0YWJsZS4gIFRoaXMKLSAqIGZ1bmN0aW9uIGFsc28gdXBkYXRlcyBub2RlX29ubGluZV9tYXAgd2l0aCB0aGUgbm9kZXMgKHF1YWRzKSBwcmVzZW50LgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc21wX2R1bXBfcWN0KHZvaWQpCi17Ci0JaW50IG5vZGU7Ci0Jc3RydWN0IGVhY2hxdWFkbWVtICplcTsKLQlzdHJ1Y3Qgc3lzX2NmZ19kYXRhICpzY2QgPQotCQkoc3RydWN0IHN5c19jZmdfZGF0YSAqKV9fdmEoU1lTX0NGR19EQVRBX1BSSVZfQUREUik7Ci0KLQlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwotCWZvcl9lYWNoX25vZGUobm9kZSkgewotCQlpZiAoc2NkLT5xdWFkc19wcmVzZW50MzFfMCAmICgxIDw8IG5vZGUpKSB7Ci0JCQlub2RlX3NldF9vbmxpbmUobm9kZSk7Ci0JCQllcSA9ICZzY2QtPmVxW25vZGVdOwotCQkJLyogQ29udmVydCB0byBwYWdlcyAqLwotCQkJbm9kZV9zdGFydF9wZm5bbm9kZV0gPSBNQl9UT19QQUdFUygKLQkJCQllcS0+aGlfc2hyZF9tZW1fc3RhcnQgLSBlcS0+cHJpdl9tZW1fc2l6ZSk7Ci0JCQlub2RlX2VuZF9wZm5bbm9kZV0gPSBNQl9UT19QQUdFUygKLQkJCQllcS0+aGlfc2hyZF9tZW1fc3RhcnQgKyBlcS0+aGlfc2hyZF9tZW1fc2l6ZSk7Ci0KLQkJCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMobm9kZSwgbm9kZV9zdGFydF9wZm5bbm9kZV0sCi0JCQkJCQkJbm9kZV9lbmRfcGZuW25vZGVdKTsKLQkJCW1lbW9yeV9wcmVzZW50KG5vZGUsCi0JCQkJbm9kZV9zdGFydF9wZm5bbm9kZV0sIG5vZGVfZW5kX3Bmbltub2RlXSk7Ci0JCQlub2RlX3JlbWFwX3NpemVbbm9kZV0gPSBub2RlX21lbW1hcF9zaXplX2J5dGVzKG5vZGUsCi0JCQkJCQkJbm9kZV9zdGFydF9wZm5bbm9kZV0sCi0JCQkJCQkJbm9kZV9lbmRfcGZuW25vZGVdKTsKLQkJfQotCX0KLX0KLQotCi12b2lkIF9fY3B1aW5pdCBudW1hcV90c2NfZGlzYWJsZSh2b2lkKQotewotCWlmICghZm91bmRfbnVtYXEpCi0JCXJldHVybjsKLQotCWlmIChudW1fb25saW5lX25vZGVzKCkgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJOVU1BUTogZGlzYWJsaW5nIFRTQ1xuIik7Ci0JCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG51bWFxX3ByZV90aW1lX2luaXQodm9pZCkKLXsKLQludW1hcV90c2NfZGlzYWJsZSgpOwotCXJldHVybiAwOwotfQotCi1pbnQgZm91bmRfbnVtYXE7Ci0vKgotICogSGF2ZSB0byBtYXRjaCB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyaWVzIHRvIG1haW4gdGFibGUgZW50cmllcyBieSBjb3VudGVyCi0gKiBoZW5jZSB0aGUgbXBjX3JlY29yZCB2YXJpYWJsZSAuLi4uIGNhbid0IHNlZSBhIGxlc3MgZGlzZ3VzdGluZyB3YXkgb2YKLSAqIGRvaW5nIHRoaXMgLi4uLgotICovCi1zdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiB7Ci0JdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX2xlbjsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX3R5cGU7Ci0JdW5zaWduZWQgY2hhciB0cmFuc19xdWFkOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNfZ2xvYmFsOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNfbG9jYWw7Ci0JdW5zaWduZWQgc2hvcnQgdHJhbnNfcmVzZXJ2ZWQ7Ci19OwotCi0vKiB4ODZfcXVpcmtzIG1lbWJlciAqLwotc3RhdGljIGludCBtcGNfcmVjb3JkOwotc3RhdGljIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbl90YWJsZVtNQVhfTVBDX0VOVFJZXQotICAgIF9fY3B1aW5pdGRhdGE7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdlbmVyYXRlX2xvZ2ljYWxfYXBpY2lkKGludCBxdWFkLCBpbnQgcGh5c19hcGljaWQpCi17Ci0JcmV0dXJuIChxdWFkIDw8IDQpICsgKHBoeXNfYXBpY2lkID8gcGh5c19hcGljaWQgPDwgMSA6IDEpOwotfQotCi0vKiB4ODZfcXVpcmtzIG1lbWJlciAqLwotc3RhdGljIGludCBtcGNfYXBpY19pZChzdHJ1Y3QgbXBjX2NwdSAqbSkKLXsKLQlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdLT50cmFuc19xdWFkOwotCWludCBsb2dpY2FsX2FwaWNpZCA9IGdlbmVyYXRlX2xvZ2ljYWxfYXBpY2lkKHF1YWQsIG0tPmFwaWNpZCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiUHJvY2Vzc29yICMlZCAldToldSBBUElDIHZlcnNpb24gJWQgKHF1YWQgJWQsIGFwaWMgJWQpXG4iLAotCSAgICAgICBtLT5hcGljaWQsIChtLT5jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAotCSAgICAgICAobS0+Y3B1ZmVhdHVyZSAmIENQVV9NT0RFTF9NQVNLKSA+PiA0LAotCSAgICAgICBtLT5hcGljdmVyLCBxdWFkLCBsb2dpY2FsX2FwaWNpZCk7Ci0JcmV0dXJuIGxvZ2ljYWxfYXBpY2lkOwotfQotCi1pbnQgbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU107Ci0KLWludCBtcF9idXNfaWRfdG9fbG9jYWxbTUFYX01QX0JVU1NFU107Ci0KLS8qIHg4Nl9xdWlya3MgbWVtYmVyICovCi1zdGF0aWMgdm9pZCBtcGNfb2VtX2J1c19pbmZvKHN0cnVjdCBtcGNfYnVzICptLCBjaGFyICpuYW1lKQotewotCWludCBxdWFkID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX3F1YWQ7Ci0JaW50IGxvY2FsID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX2xvY2FsOwotCi0JbXBfYnVzX2lkX3RvX25vZGVbbS0+YnVzaWRdID0gcXVhZDsKLQltcF9idXNfaWRfdG9fbG9jYWxbbS0+YnVzaWRdID0gbG9jYWw7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQnVzICMlZCBpcyAlcyAobm9kZSAlZClcbiIsCi0JICAgICAgIG0tPmJ1c2lkLCBuYW1lLCBxdWFkKTsKLX0KLQotaW50IHF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkIFtOUl9DUFVTLzRdWzRdOwotCi0vKiB4ODZfcXVpcmtzIG1lbWJlciAqLwotc3RhdGljIHZvaWQgbXBjX29lbV9wY2lfYnVzKHN0cnVjdCBtcGNfYnVzICptKQotewotCWludCBxdWFkID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX3F1YWQ7Ci0JaW50IGxvY2FsID0gdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0tPnRyYW5zX2xvY2FsOwotCi0JcXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdID0gbS0+YnVzaWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBNUF90cmFuc2xhdGlvbl9pbmZvKHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICptKQotewotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIlRyYW5zbGF0aW9uOiByZWNvcmQgJWQsIHR5cGUgJWQsIHF1YWQgJWQsIGdsb2JhbCAlZCwgbG9jYWwgJWRcbiIsCi0JICAgICAgIG1wY19yZWNvcmQsIG0tPnRyYW5zX3R5cGUsIG0tPnRyYW5zX3F1YWQsIG0tPnRyYW5zX2dsb2JhbCwKLQkgICAgICAgbS0+dHJhbnNfbG9jYWwpOwotCi0JaWYgKG1wY19yZWNvcmQgPj0gTUFYX01QQ19FTlRSWSkKLQkJcHJpbnRrKEtFUk5fRVJSICJNQVhfTVBDX0VOVFJZIGV4Y2VlZGVkIVxuIik7Ci0JZWxzZQotCQl0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSA9IG07CS8qIHN0YXNoIHRoaXMgZm9yIGxhdGVyICovCi0JaWYgKG0tPnRyYW5zX3F1YWQgPCBNQVhfTlVNTk9ERVMgJiYgIW5vZGVfb25saW5lKG0tPnRyYW5zX3F1YWQpKQotCQlub2RlX3NldF9vbmxpbmUobS0+dHJhbnNfcXVhZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1wZl9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICptcCwgaW50IGxlbikKLXsKLQlpbnQgc3VtID0gMDsKLQotCXdoaWxlIChsZW4tLSkKLQkJc3VtICs9ICptcCsrOwotCi0JcmV0dXJuIHN1bSAmIDB4RkY7Ci19Ci0KLS8qCi0gKiBSZWFkL3BhcnNlIHRoZSBNUEMgb2VtIHRhYmxlcwotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfcmVhZF9tcGNfb2VtKHN0cnVjdCBtcGNfb2VtdGFibGUgKm9lbXRhYmxlLAotCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBvZW1zaXplKQotewotCWludCBjb3VudCA9IHNpemVvZigqb2VtdGFibGUpOwkvKiB0aGUgaGVhZGVyIHNpemUgKi8KLQl1bnNpZ25lZCBjaGFyICpvZW1wdHIgPSAoKHVuc2lnbmVkIGNoYXIgKilvZW10YWJsZSkgKyBjb3VudDsKLQotCW1wY19yZWNvcmQgPSAwOwotCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdCAuLi4gXG4iLAotCSAgICAgICBvZW10YWJsZSk7Ci0JaWYgKG1lbWNtcChvZW10YWJsZS0+c2lnbmF0dXJlLCBNUENfT0VNX1NJR05BVFVSRSwgNCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlNNUCBtcGMgb2VtdGFibGU6IGJhZCBzaWduYXR1cmUgWyVjJWMlYyVjXSFcbiIsCi0JCSAgICAgICBvZW10YWJsZS0+c2lnbmF0dXJlWzBdLCBvZW10YWJsZS0+c2lnbmF0dXJlWzFdLAotCQkgICAgICAgb2VtdGFibGUtPnNpZ25hdHVyZVsyXSwgb2VtdGFibGUtPnNpZ25hdHVyZVszXSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKW9lbXRhYmxlLCBvZW10YWJsZS0+bGVuZ3RoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgb2VtIG1wdGFibGU6IGNoZWNrc3VtIGVycm9yIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0Jd2hpbGUgKGNvdW50IDwgb2VtdGFibGUtPmxlbmd0aCkgewotCQlzd2l0Y2ggKCpvZW1wdHIpIHsKLQkJY2FzZSBNUF9UUkFOU0xBVElPTjoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqbSA9Ci0JCQkJICAgIChzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqKW9lbXB0cjsKLQkJCQlNUF90cmFuc2xhdGlvbl9pbmZvKG0pOwotCQkJCW9lbXB0ciArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJKyttcGNfcmVjb3JkOwotCQkJCWJyZWFrOwotCQkJfQotCQlkZWZhdWx0OgotCQkJewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIlVucmVjb2duaXNlZCBPRU0gdGFibGUgZW50cnkgdHlwZSEgLSAlZFxuIiwKLQkJCQkgICAgICAgKGludCkqb2VtcHRyKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG51bWFxX3NldHVwX2lvYXBpY19pZHModm9pZCkKLXsKLQkvKiBzbyBjYW4gc2tpcCBpdCAqLwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBudW1hcV91cGRhdGVfZ2VuYXBpYyh2b2lkKQotewotCWdlbmFwaWMtPndha2V1cF9jcHUgPSB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbm1pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeDg2X3F1aXJrcyBudW1hcV94ODZfcXVpcmtzIF9faW5pdGRhdGEgPSB7Ci0JLmFyY2hfcHJlX3RpbWVfaW5pdAk9IG51bWFxX3ByZV90aW1lX2luaXQsCi0JLmFyY2hfdGltZV9pbml0CQk9IE5VTEwsCi0JLmFyY2hfcHJlX2ludHJfaW5pdAk9IE5VTEwsCi0JLmFyY2hfbWVtb3J5X3NldHVwCT0gTlVMTCwKLQkuYXJjaF9pbnRyX2luaXQJCT0gTlVMTCwKLQkuYXJjaF90cmFwX2luaXQJCT0gTlVMTCwKLQkubWFjaF9nZXRfc21wX2NvbmZpZwk9IE5VTEwsCi0JLm1hY2hfZmluZF9zbXBfY29uZmlnCT0gTlVMTCwKLQkubXBjX3JlY29yZAkJPSAmbXBjX3JlY29yZCwKLQkubXBjX2FwaWNfaWQJCT0gbXBjX2FwaWNfaWQsCi0JLm1wY19vZW1fYnVzX2luZm8JPSBtcGNfb2VtX2J1c19pbmZvLAotCS5tcGNfb2VtX3BjaV9idXMJPSBtcGNfb2VtX3BjaV9idXMsCi0JLnNtcF9yZWFkX21wY19vZW0JPSBzbXBfcmVhZF9tcGNfb2VtLAotCS5zZXR1cF9pb2FwaWNfaWRzCT0gbnVtYXFfc2V0dXBfaW9hcGljX2lkcywKLQkudXBkYXRlX2dlbmFwaWMJCT0gbnVtYXFfdXBkYXRlX2dlbmFwaWMsCi19OwotCi12b2lkIG51bWFxX21wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCkKLXsKLQlpZiAoc3RybmNtcChvZW0sICJJQk0gTlVNQSIsIDgpKQotCQlwcmludGsoIldhcm5pbmchICBOb3QgYSBOVU1BLVEgc3lzdGVtIVxuIik7Ci0JZWxzZQotCQlmb3VuZF9udW1hcSA9IDE7Ci19Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9jaGVja19udW1hcSh2b2lkKQotewotCS8qCi0JICogRmluZCBwb3NzaWJsZSBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb246Ci0JICovCi0JZWFybHlfZmluZF9zbXBfY29uZmlnKCk7Ci0JLyoKLQkgKiBnZXQgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgotCSAqLwotCWlmIChzbXBfZm91bmRfY29uZmlnKQotCQllYXJseV9nZXRfc21wX2NvbmZpZygpOwotCi0JaWYgKGZvdW5kX251bWFxKQotCQl4ODZfcXVpcmtzID0gJm51bWFxX3g4Nl9xdWlya3M7Ci19Ci0KLWludCBfX2luaXQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKQotewotCWVhcmx5X2NoZWNrX251bWFxKCk7Ci0JaWYgKCFmb3VuZF9udW1hcSkKLQkJcmV0dXJuIDA7Ci0Jc21wX2R1bXBfcWN0KCk7Ci0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMKaW5kZXggOTU3NzdiMC4uM2E3YzVhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYwpAQCAtMjYsMTMgKzI2LDMgQEAKIH07CiBFWFBPUlRfU1lNQk9MKHB2X2xvY2tfb3BzKTsKIAotdm9pZCBfX2luaXQgcGFyYXZpcnRfdXNlX2J5dGVsb2Nrcyh2b2lkKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlwdl9sb2NrX29wcy5zcGluX2lzX2xvY2tlZCA9IF9fYnl0ZV9zcGluX2lzX2xvY2tlZDsKLQlwdl9sb2NrX29wcy5zcGluX2lzX2NvbnRlbmRlZCA9IF9fYnl0ZV9zcGluX2lzX2NvbnRlbmRlZDsKLQlwdl9sb2NrX29wcy5zcGluX2xvY2sgPSBfX2J5dGVfc3Bpbl9sb2NrOwotCXB2X2xvY2tfb3BzLnNwaW5fdHJ5bG9jayA9IF9fYnl0ZV9zcGluX3RyeWxvY2s7Ci0JcHZfbG9ja19vcHMuc3Bpbl91bmxvY2sgPSBfX2J5dGVfc3Bpbl91bmxvY2s7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggYzY1MjBhNC4uNjNkZDM1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC00NCw2ICs0MywxNyBAQAogewogfQogCisvKiBpZGVudGl0eSBmdW5jdGlvbiwgd2hpY2ggY2FuIGJlIGlubGluZWQgKi8KK3UzMiBfcGFyYXZpcnRfaWRlbnRfMzIodTMyIHgpCit7CisJcmV0dXJuIHg7Cit9CisKK3U2NCBfcGFyYXZpcnRfaWRlbnRfNjQodTY0IHgpCit7CisJcmV0dXJuIHg7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkZWZhdWx0X2Jhbm5lcih2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcGFyYXZpcnR1YWxpemVkIGtlcm5lbCBvbiAlc1xuIiwKQEAgLTEzOCw5ICsxNDgsMTYgQEAKIAlpZiAob3BmdW5jID09IE5VTEwpCiAJCS8qIElmIHRoZXJlJ3Mgbm8gZnVuY3Rpb24sIHBhdGNoIGl0IHdpdGggYSB1ZDJhIChCVUcpICovCiAJCXJldCA9IHBhcmF2aXJ0X3BhdGNoX2luc25zKGluc25idWYsIGxlbiwgdWQyYSwgdWQyYStzaXplb2YodWQyYSkpOwotCWVsc2UgaWYgKG9wZnVuYyA9PSBwYXJhdmlydF9ub3ApCisJZWxzZSBpZiAob3BmdW5jID09IF9wYXJhdmlydF9ub3ApCiAJCS8qIElmIHRoZSBvcGVyYXRpb24gaXMgYSBub3AsIHRoZW4gbm9wIHRoZSBjYWxsc2l0ZSAqLwogCQlyZXQgPSBwYXJhdmlydF9wYXRjaF9ub3AoKTsKKworCS8qIGlkZW50aXR5IGZ1bmN0aW9ucyBqdXN0IHJldHVybiB0aGVpciBzaW5nbGUgYXJndW1lbnQgKi8KKwllbHNlIGlmIChvcGZ1bmMgPT0gX3BhcmF2aXJ0X2lkZW50XzMyKQorCQlyZXQgPSBwYXJhdmlydF9wYXRjaF9pZGVudF8zMihpbnNuYnVmLCBsZW4pOworCWVsc2UgaWYgKG9wZnVuYyA9PSBfcGFyYXZpcnRfaWRlbnRfNjQpCisJCXJldCA9IHBhcmF2aXJ0X3BhdGNoX2lkZW50XzY0KGluc25idWYsIGxlbik7CisKIAllbHNlIGlmICh0eXBlID09IFBBUkFWSVJUX1BBVENIKHB2X2NwdV9vcHMuaXJldCkgfHwKIAkJIHR5cGUgPT0gUEFSQVZJUlRfUEFUQ0gocHZfY3B1X29wcy5pcnFfZW5hYmxlX3N5c2V4aXQpIHx8CiAJCSB0eXBlID09IFBBUkFWSVJUX1BBVENIKHB2X2NwdV9vcHMudXNlcmdzX3N5c3JldDMyKSB8fApAQCAtMzE4LDEwICszMzUsMTAgQEAKIAogc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wcyA9IHsKIAkuaW5pdF9JUlEgPSBuYXRpdmVfaW5pdF9JUlEsCi0JLnNhdmVfZmwgPSBuYXRpdmVfc2F2ZV9mbCwKLQkucmVzdG9yZV9mbCA9IG5hdGl2ZV9yZXN0b3JlX2ZsLAotCS5pcnFfZGlzYWJsZSA9IG5hdGl2ZV9pcnFfZGlzYWJsZSwKLQkuaXJxX2VuYWJsZSA9IG5hdGl2ZV9pcnFfZW5hYmxlLAorCS5zYXZlX2ZsID0gX19QVl9JU19DQUxMRUVfU0FWRShuYXRpdmVfc2F2ZV9mbCksCisJLnJlc3RvcmVfZmwgPSBfX1BWX0lTX0NBTExFRV9TQVZFKG5hdGl2ZV9yZXN0b3JlX2ZsKSwKKwkuaXJxX2Rpc2FibGUgPSBfX1BWX0lTX0NBTExFRV9TQVZFKG5hdGl2ZV9pcnFfZGlzYWJsZSksCisJLmlycV9lbmFibGUgPSBfX1BWX0lTX0NBTExFRV9TQVZFKG5hdGl2ZV9pcnFfZW5hYmxlKSwKIAkuc2FmZV9oYWx0ID0gbmF0aXZlX3NhZmVfaGFsdCwKIAkuaGFsdCA9IG5hdGl2ZV9oYWx0LAogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTM5OSw2ICs0MTYsMTQgQEAKICNlbmRpZgogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCisvKiAzMi1iaXQgcGFnZXRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgUFRFX0lERU5UCV9fUFZfSVNfQ0FMTEVFX1NBVkUoX3BhcmF2aXJ0X2lkZW50XzMyKQorI2Vsc2UKKy8qIDY0LWJpdCBwYWdldGFibGUgZW50cmllcyAqLworI2RlZmluZSBQVEVfSURFTlQJX19QVl9JU19DQUxMRUVfU0FWRShfcGFyYXZpcnRfaWRlbnRfNjQpCisjZW5kaWYKKwogc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wcyA9IHsKICNpZm5kZWYgQ09ORklHX1g4Nl82NAogCS5wYWdldGFibGVfc2V0dXBfc3RhcnQgPSBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0LApAQCAtNDUwLDIyICs0NzUsMjMgQEAKIAkucG1kX2NsZWFyID0gbmF0aXZlX3BtZF9jbGVhciwKICNlbmRpZgogCS5zZXRfcHVkID0gbmF0aXZlX3NldF9wdWQsCi0JLnBtZF92YWwgPSBuYXRpdmVfcG1kX3ZhbCwKLQkubWFrZV9wbWQgPSBuYXRpdmVfbWFrZV9wbWQsCisKKwkucG1kX3ZhbCA9IFBURV9JREVOVCwKKwkubWFrZV9wbWQgPSBQVEVfSURFTlQsCiAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKLQkucHVkX3ZhbCA9IG5hdGl2ZV9wdWRfdmFsLAotCS5tYWtlX3B1ZCA9IG5hdGl2ZV9tYWtlX3B1ZCwKKwkucHVkX3ZhbCA9IFBURV9JREVOVCwKKwkubWFrZV9wdWQgPSBQVEVfSURFTlQsCisKIAkuc2V0X3BnZCA9IG5hdGl2ZV9zZXRfcGdkLAogI2VuZGlmCiAjZW5kaWYgLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCiAKLQkucHRlX3ZhbCA9IG5hdGl2ZV9wdGVfdmFsLAotCS5wdGVfZmxhZ3MgPSBuYXRpdmVfcHRlX2ZsYWdzLAotCS5wZ2RfdmFsID0gbmF0aXZlX3BnZF92YWwsCisJLnB0ZV92YWwgPSBQVEVfSURFTlQsCisJLnBnZF92YWwgPSBQVEVfSURFTlQsCiAKLQkubWFrZV9wdGUgPSBuYXRpdmVfbWFrZV9wdGUsCi0JLm1ha2VfcGdkID0gbmF0aXZlX21ha2VfcGdkLAorCS5tYWtlX3B0ZSA9IFBURV9JREVOVCwKKwkubWFrZV9wZ2QgPSBQVEVfSURFTlQsCiAKIAkuZHVwX21tYXAgPSBwYXJhdmlydF9ub3AsCiAJLmV4aXRfbW1hcCA9IHBhcmF2aXJ0X25vcCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF8zMi5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0X3BhdGNoXzMyLmMKaW5kZXggOWZlNjQ0Zi4uZDlmMzJlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0X3BhdGNoXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0X3BhdGNoXzMyLmMKQEAgLTEyLDYgKzEyLDE4IEBACiBERUZfTkFUSVZFKHB2X2NwdV9vcHMsIGNsdHMsICJjbHRzIik7CiBERUZfTkFUSVZFKHB2X2NwdV9vcHMsIHJlYWRfdHNjLCAicmR0c2MiKTsKIAordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfMzIodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCS8qIGFyZyBpbiAlZWF4LCByZXR1cm4gaW4gJWVheCAqLworCXJldHVybiAwOworfQorCit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZGVudF82NCh2b2lkICppbnNuYnVmLCB1bnNpZ25lZCBsZW4pCit7CisJLyogYXJnIGluICVlZHg6JWVheCwgcmV0dXJuIGluICVlZHg6JWVheCAqLworCXJldHVybiAwOworfQorCiB1bnNpZ25lZCBuYXRpdmVfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppYnVmLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydF9wYXRjaF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0X3BhdGNoXzY0LmMKaW5kZXggMDYxZDAxZC4uM2YwOGYzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0X3BhdGNoXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0X3BhdGNoXzY0LmMKQEAgLTE5LDYgKzE5LDIxIEBACiBERUZfTkFUSVZFKHB2X2NwdV9vcHMsIHVzZXJnc19zeXNyZXQzMiwgInN3YXBnczsgc3lzcmV0bCIpOwogREVGX05BVElWRShwdl9jcHVfb3BzLCBzd2FwZ3MsICJzd2FwZ3MiKTsKIAorREVGX05BVElWRSgsIG1vdjMyLCAibW92ICVlZGksICVlYXgiKTsKK0RFRl9OQVRJVkUoLCBtb3Y2NCwgIm1vdiAlcmRpLCAlcmF4Iik7CisKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lkZW50XzMyKHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbikKK3sKKwlyZXR1cm4gcGFyYXZpcnRfcGF0Y2hfaW5zbnMoaW5zbmJ1ZiwgbGVuLAorCQkJCSAgICBzdGFydF9fbW92MzIsIGVuZF9fbW92MzIpOworfQorCit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZGVudF82NCh2b2lkICppbnNuYnVmLCB1bnNpZ25lZCBsZW4pCit7CisJcmV0dXJuIHBhcmF2aXJ0X3BhdGNoX2luc25zKGluc25idWYsIGxlbiwKKwkJCQkgICAgc3RhcnRfX21vdjY0LCBlbmRfX21vdjY0KTsKK30KKwogdW5zaWduZWQgbmF0aXZlX3BhdGNoKHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaWJ1ZiwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvYmVfcm9tc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3Byb2JlX3JvbXNfMzIuYwppbmRleCA2NzVhNDhjLi4wNzFlN2ZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvYmVfcm9tc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9iZV9yb21zXzMyLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxzZXR1cF9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwX2FyY2guaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzeXN0ZW1fcm9tX3Jlc291cmNlID0gewogCS5uYW1lCT0gIlN5c3RlbSBST00iLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNmQxMmY3ZS4uNmFmYTUyMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xLDggKzEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vaWRsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAKIHVuc2lnbmVkIGxvbmcgaWRsZV9oYWx0OwogRVhQT1JUX1NZTUJPTChpZGxlX2hhbHQpOwpAQCAtNTYsNiArNTksMTkyIEBACiB9CiAKIC8qCisgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgorICovCit2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICptZSA9IGN1cnJlbnQ7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmbWUtPnRocmVhZDsKKworCWlmIChtZS0+dGhyZWFkLmlvX2JpdG1hcF9wdHIpIHsKKwkJc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBnZXRfY3B1KCkpOworCisJCWtmcmVlKHQtPmlvX2JpdG1hcF9wdHIpOworCQl0LT5pb19iaXRtYXBfcHRyID0gTlVMTDsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lPX0JJVE1BUCk7CisJCS8qCisJCSAqIENhcmVmdWwsIGNsZWFyIHRoaXMgaW4gdGhlIFRTUyB0b286CisJCSAqLworCQltZW1zZXQodHNzLT5pb19iaXRtYXAsIDB4ZmYsIHQtPmlvX2JpdG1hcF9tYXgpOworCQl0LT5pb19iaXRtYXBfbWF4ID0gMDsKKwkJcHV0X2NwdSgpOworCX0KKworCWRzX2V4aXRfdGhyZWFkKGN1cnJlbnQpOworfQorCit2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfQUJJX1BFTkRJTkcpKSB7CisJCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9BQklfUEVORElORyk7CisJCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JQTMyKSkgeworCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0lBMzIpOworCQl9IGVsc2UgeworCQkJc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JQTMyKTsKKwkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX0NPTVBBVDsKKwkJfQorCX0KKyNlbmRpZgorCisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0RFQlVHKTsKKworCXRzay0+dGhyZWFkLmRlYnVncmVnMCA9IDA7CisJdHNrLT50aHJlYWQuZGVidWdyZWcxID0gMDsKKwl0c2stPnRocmVhZC5kZWJ1Z3JlZzIgPSAwOworCXRzay0+dGhyZWFkLmRlYnVncmVnMyA9IDA7CisJdHNrLT50aHJlYWQuZGVidWdyZWc2ID0gMDsKKwl0c2stPnRocmVhZC5kZWJ1Z3JlZzcgPSAwOworCW1lbXNldCh0c2stPnRocmVhZC50bHNfYXJyYXksIDAsIHNpemVvZih0c2stPnRocmVhZC50bHNfYXJyYXkpKTsKKwkvKgorCSAqIEZvcmdldCBjb3Byb2Nlc3NvciBzdGF0ZS4uCisJICovCisJdHNrLT5mcHVfY291bnRlciA9IDA7CisJY2xlYXJfZnB1KHRzayk7CisJY2xlYXJfdXNlZF9tYXRoKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhcmRfZGlzYWJsZV9UU0Modm9pZCkKK3sKKwl3cml0ZV9jcjQocmVhZF9jcjQoKSB8IFg4Nl9DUjRfVFNEKTsKK30KKwordm9pZCBkaXNhYmxlX1RTQyh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICghdGVzdF9hbmRfc2V0X3RocmVhZF9mbGFnKFRJRl9OT1RTQykpCisJCS8qCisJCSAqIE11c3QgZmxpcCB0aGUgQ1BVIHN0YXRlIHN5bmNocm9ub3VzbHkgd2l0aAorCQkgKiBUSUZfTk9UU0MgaW4gdGhlIGN1cnJlbnQgcnVubmluZyBjb250ZXh0LgorCQkgKi8KKwkJaGFyZF9kaXNhYmxlX1RTQygpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhcmRfZW5hYmxlX1RTQyh2b2lkKQoreworCXdyaXRlX2NyNChyZWFkX2NyNCgpICYgflg4Nl9DUjRfVFNEKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX1RTQyh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICh0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQorCQkvKgorCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKKwkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KKwkJICovCisJCWhhcmRfZW5hYmxlX1RTQygpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK2ludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9OT1RTQykpCisJCXZhbCA9IFBSX1RTQ19TSUdTRUdWOworCWVsc2UKKwkJdmFsID0gUFJfVFNDX0VOQUJMRTsKKworCXJldHVybiBwdXRfdXNlcih2YWwsICh1bnNpZ25lZCBpbnQgX191c2VyICopYWRyKTsKK30KKworaW50IHNldF90c2NfbW9kZSh1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPT0gUFJfVFNDX1NJR1NFR1YpCisJCWRpc2FibGVfVFNDKCk7CisJZWxzZSBpZiAodmFsID09IFBSX1RTQ19FTkFCTEUpCisJCWVuYWJsZV9UU0MoKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19zd2l0Y2hfdG9feHRyYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZfcCwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3AsCisJCSAgICAgIHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MpCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnByZXYsICpuZXh0OworCisJcHJldiA9ICZwcmV2X3AtPnRocmVhZDsKKwluZXh0ID0gJm5leHRfcC0+dGhyZWFkOworCisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RTX0FSRUFfTVNSKSB8fAorCSAgICB0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9EU19BUkVBX01TUikpCisJCWRzX3N3aXRjaF90byhwcmV2X3AsIG5leHRfcCk7CisJZWxzZSBpZiAobmV4dC0+ZGVidWdjdGxtc3IgIT0gcHJldi0+ZGVidWdjdGxtc3IpCisJCXVwZGF0ZV9kZWJ1Z2N0bG1zcihuZXh0LT5kZWJ1Z2N0bG1zcik7CisKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfREVCVUcpKSB7CisJCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzAsIDApOworCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWcxLCAxKTsKKwkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMiwgMik7CisJCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzMsIDMpOworCQkvKiBubyA0IGFuZCA1ICovCisJCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzYsIDYpOworCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWc3LCA3KTsKKwl9CisKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfTk9UU0MpIF4KKwkgICAgdGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfTk9UU0MpKSB7CisJCS8qIHByZXYgYW5kIG5leHQgYXJlIGRpZmZlcmVudCAqLworCQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfTk9UU0MpKQorCQkJaGFyZF9kaXNhYmxlX1RTQygpOworCQllbHNlCisJCQloYXJkX2VuYWJsZV9UU0MoKTsKKwl9CisKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfSU9fQklUTUFQKSkgeworCQkvKgorCQkgKiBDb3B5IHRoZSByZWxldmFudCByYW5nZSBvZiB0aGUgSU8gYml0bWFwLgorCQkgKiBOb3JtYWxseSB0aGlzIGlzIDEyOCBieXRlcyBvciBsZXNzOgorCQkgKi8KKwkJbWVtY3B5KHRzcy0+aW9fYml0bWFwLCBuZXh0LT5pb19iaXRtYXBfcHRyLAorCQkgICAgICAgbWF4KHByZXYtPmlvX2JpdG1hcF9tYXgsIG5leHQtPmlvX2JpdG1hcF9tYXgpKTsKKwl9IGVsc2UgaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX0lPX0JJVE1BUCkpIHsKKwkJLyoKKwkJICogQ2xlYXIgYW55IHBvc3NpYmxlIGxlZnRvdmVyIGJpdHM6CisJCSAqLworCQltZW1zZXQodHNzLT5pb19iaXRtYXAsIDB4ZmYsIHByZXYtPmlvX2JpdG1hcF9tYXgpOworCX0KK30KKworaW50IHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3MtPnNwLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdHJpdmlhbCwgYW5kIG9uIHRoZSBmYWNlIG9mIGl0IGxvb2tzIGxpa2UgaXQKKyAqIGNvdWxkIGVxdWFsbHkgd2VsbCBiZSBkb25lIGluIHVzZXIgbW9kZS4KKyAqCisgKiBOb3Qgc28sIGZvciBxdWl0ZSB1bm9idmlvdXMgcmVhc29ucyAtIHJlZ2lzdGVyIHByZXNzdXJlLgorICogSW4gdXNlciBtb2RlIHZmb3JrKCkgY2Fubm90IGhhdmUgYSBzdGFjayBmcmFtZSwgYW5kIGlmCisgKiBkb25lIGJ5IGNhbGxpbmcgdGhlICJjbG9uZSgpIiBzeXN0ZW0gY2FsbCBkaXJlY3RseSwgeW91CisgKiBkbyBub3QgaGF2ZSBlbm91Z2ggY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXJzIHRvIGhvbGQgYWxsCisgKiB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQuCisgKi8KK2ludCBzeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIGRvX2ZvcmsoQ0xPTkVfVkZPUksgfCBDTE9ORV9WTSB8IFNJR0NITEQsIHJlZ3MtPnNwLCByZWdzLCAwLAorCQkgICAgICAgTlVMTCwgTlVMTCk7Cit9CisKKworLyoKICAqIElkbGUgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucwogICovCiB1bnNpZ25lZCBsb25nIGJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUgPSAwOwpAQCAtMzUwLDcgKzUzOSw3IEBACiAKIHZvaWQgX19jcHVpbml0IHNlbGVjdF9pZGxlX3JvdXRpbmUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotI2lmZGVmIENPTkZJR19YODZfU01QCisjaWZkZWYgQ09ORklHX1NNUAogCWlmIChwbV9pZGxlID09IHBvbGxfaWRsZSAmJiBzbXBfbnVtX3NpYmxpbmdzID4gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBwb2xsaW5nIGlkbGUgYW5kIEhUIGVuYWJsZWQsIgogCQkJIiBwZXJmb3JtYW5jZSBtYXkgZGVncmFkZS5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggYmQ0ZGEyYS4uMTQwMTRkNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3N0YWNrcHJvdGVjdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjYsOSArNjcsNiBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGN1cnJlbnRfdGFzaykgPSAmaW5pdF90YXNrOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGN1cnJlbnRfdGFzayk7CiAKLURFRklORV9QRVJfQ1BVKGludCwgY3B1X251bWJlcik7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X251bWJlcik7Ci0KIC8qCiAgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KICAqLwpAQCAtOTQsNiArOTIsMTUgQEAKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJLyoKKwkgKiBJZiB3ZSdyZSB0aGUgbm9uLWJvb3QgQ1BVLCBub3RoaW5nIHNldCB0aGUgc3RhY2sgY2FuYXJ5IHVwCisJICogZm9yIHVzLiAgQ1BVMCBhbHJlYWR5IGhhcyBpdCBpbml0aWFsaXplZCBidXQgbm8gaGFybSBpbgorCSAqIGRvaW5nIGl0IGFnYWluLiAgVGhpcyBpcyBhIGdvb2QgcGxhY2UgZm9yIHVwZGF0aW5nIGl0LCBhcworCSAqIHdlIHdvbnQgZXZlciByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uIChzbyB0aGUgaW52YWxpZAorCSAqIGNhbmFyaWVzIGFscmVhZHkgb24gdGhlIHN0YWNrIHdvbnQgZXZlciB0cmlnZ2VyKS4KKwkgKi8KKwlib290X2luaXRfc3RhY2tfY2FuYXJ5KCk7CisKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOwogCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KQEAgLTEwOCw3ICsxMTUsNiBAQAogCQkJCXBsYXlfZGVhZCgpOwogCiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaWRsZV90aW1lc3RhbXAgPSBqaWZmaWVzOwogCQkJLyogRG9uJ3QgdHJhY2UgaXJxcyBvZmYgZm9yIGlkbGUgKi8KIAkJCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOwogCQkJcG1faWRsZSgpOwpAQCAtMTMyLDcgKzEzOCw3IEBACiAJaWYgKHVzZXJfbW9kZV92bShyZWdzKSkgewogCQlzcCA9IHJlZ3MtPnNwOwogCQlzcyA9IHJlZ3MtPnNzICYgMHhmZmZmOwotCQlzYXZlc2VnbWVudChncywgZ3MpOworCQlncyA9IGdldF91c2VyX2dzKHJlZ3MpOwogCX0gZWxzZSB7CiAJCXNwID0gKHVuc2lnbmVkIGxvbmcpICgmcmVncy0+c3ApOwogCQlzYXZlc2VnbWVudChzcywgc3MpOwpAQCAtMjEzLDYgKzIxOSw3IEBACiAJcmVncy5kcyA9IF9fVVNFUl9EUzsKIAlyZWdzLmVzID0gX19VU0VSX0RTOwogCXJlZ3MuZnMgPSBfX0tFUk5FTF9QRVJDUFU7CisJcmVncy5ncyA9IF9fS0VSTkVMX1NUQUNLX0NBTkFSWTsKIAlyZWdzLm9yaWdfYXggPSAtMTsKIAlyZWdzLmlwID0gKHVuc2lnbmVkIGxvbmcpIGtlcm5lbF90aHJlYWRfaGVscGVyOwogCXJlZ3MuY3MgPSBfX0tFUk5FTF9DUyB8IGdldF9rZXJuZWxfcnBsKCk7CkBAIC0yMjMsNTUgKzIzMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCi0vKgotICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KLSAqLwotdm9pZCBleGl0X3RocmVhZCh2b2lkKQotewotCS8qIFRoZSBwcm9jZXNzIG1heSBoYXZlIGFsbG9jYXRlZCBhbiBpbyBwb3J0IGJpdG1hcC4uLiBudWtlIGl0LiAqLwotCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JT19CSVRNQVApKSkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJnRzay0+dGhyZWFkOwotCQlpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0KLQkJa2ZyZWUodC0+aW9fYml0bWFwX3B0cik7Ci0JCXQtPmlvX2JpdG1hcF9wdHIgPSBOVUxMOwotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfSU9fQklUTUFQKTsKLQkJLyoKLQkJICogQ2FyZWZ1bCwgY2xlYXIgdGhpcyBpbiB0aGUgVFNTIHRvbzoKLQkJICovCi0JCW1lbXNldCh0c3MtPmlvX2JpdG1hcCwgMHhmZiwgdHNzLT5pb19iaXRtYXBfbWF4KTsKLQkJdC0+aW9fYml0bWFwX21heCA9IDA7Ci0JCXRzcy0+aW9fYml0bWFwX293bmVyID0gTlVMTDsKLQkJdHNzLT5pb19iaXRtYXBfbWF4ID0gMDsKLQkJdHNzLT54ODZfdHNzLmlvX2JpdG1hcF9iYXNlID0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUOwotCQlwdXRfY3B1KCk7Ci0JfQotCi0JZHNfZXhpdF90aHJlYWQoY3VycmVudCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JdHNrLT50aHJlYWQuZGVidWdyZWcwID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzEgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnMiA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWczID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzYgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnNyA9IDA7Ci0JbWVtc2V0KHRzay0+dGhyZWFkLnRsc19hcnJheSwgMCwgc2l6ZW9mKHRzay0+dGhyZWFkLnRsc19hcnJheSkpOwotCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9ERUJVRyk7Ci0JLyoKLQkgKiBGb3JnZXQgY29wcm9jZXNzb3Igc3RhdGUuLgotCSAqLwotCXRzay0+ZnB1X2NvdW50ZXIgPSAwOwotCWNsZWFyX2ZwdSh0c2spOwotCWNsZWFyX3VzZWRfbWF0aCgpOwotfQotCiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQogewogCUJVR19PTihkZWFkX3Rhc2stPm1tKTsKQEAgLTMwNSw3ICsyNjMsNyBAQAogCiAJcC0+dGhyZWFkLmlwID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2Zvcms7CiAKLQlzYXZlc2VnbWVudChncywgcC0+dGhyZWFkLmdzKTsKKwl0YXNrX3VzZXJfZ3MocCkgPSBnZXRfdXNlcl9ncyhyZWdzKTsKIAogCXRzayA9IGN1cnJlbnQ7CiAJaWYgKHVubGlrZWx5KHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0lPX0JJVE1BUCkpKSB7CkBAIC0zNDMsNyArMzAxLDcgQEAKIHZvaWQKIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfaXAsIHVuc2lnbmVkIGxvbmcgbmV3X3NwKQogewotCV9fYXNtX18oIm1vdmwgJTAsICUlZ3MiIDogOiAiciIoMCkpOworCXNldF91c2VyX2dzKHJlZ3MsIDApOwogCXJlZ3MtPmZzCQk9IDA7CiAJc2V0X2ZzKFVTRVJfRFMpOwogCXJlZ3MtPmRzCQk9IF9fVVNFUl9EUzsKQEAgLTM1OSwxMjcgKzMxNyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdGFydF90aHJlYWQpOwogCi1zdGF0aWMgdm9pZCBoYXJkX2Rpc2FibGVfVFNDKHZvaWQpCi17Ci0Jd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1RTRCk7Ci19Ci0KLXZvaWQgZGlzYWJsZV9UU0Modm9pZCkKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoIXRlc3RfYW5kX3NldF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQotCQkvKgotCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKLQkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KLQkJICovCi0JCWhhcmRfZGlzYWJsZV9UU0MoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCBoYXJkX2VuYWJsZV9UU0Modm9pZCkKLXsKLQl3cml0ZV9jcjQocmVhZF9jcjQoKSAmIH5YODZfQ1I0X1RTRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9UU0Modm9pZCkKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKLQkJLyoKLQkJICogTXVzdCBmbGlwIHRoZSBDUFUgc3RhdGUgc3luY2hyb25vdXNseSB3aXRoCi0JCSAqIFRJRl9OT1RTQyBpbiB0aGUgY3VycmVudCBydW5uaW5nIGNvbnRleHQuCi0JCSAqLwotCQloYXJkX2VuYWJsZV9UU0MoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1pbnQgZ2V0X3RzY19tb2RlKHVuc2lnbmVkIGxvbmcgYWRyKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQotCQl2YWwgPSBQUl9UU0NfU0lHU0VHVjsKLQllbHNlCi0JCXZhbCA9IFBSX1RTQ19FTkFCTEU7Ci0KLQlyZXR1cm4gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFkcik7Ci19Ci0KLWludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCkKLXsKLQlpZiAodmFsID09IFBSX1RTQ19TSUdTRUdWKQotCQlkaXNhYmxlX1RTQygpOwotCWVsc2UgaWYgKHZhbCA9PSBQUl9UU0NfRU5BQkxFKQotCQllbmFibGVfVFNDKCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgdm9pZAotX19zd2l0Y2hfdG9feHRyYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZfcCwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3AsCi0JCSBzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzKQotewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2LCAqbmV4dDsKLQotCXByZXYgPSAmcHJldl9wLT50aHJlYWQ7Ci0JbmV4dCA9ICZuZXh0X3AtPnRocmVhZDsKLQotCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9EU19BUkVBX01TUikgfHwKLQkgICAgdGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfRFNfQVJFQV9NU1IpKQotCQlkc19zd2l0Y2hfdG8ocHJldl9wLCBuZXh0X3ApOwotCWVsc2UgaWYgKG5leHQtPmRlYnVnY3RsbXNyICE9IHByZXYtPmRlYnVnY3RsbXNyKQotCQl1cGRhdGVfZGVidWdjdGxtc3IobmV4dC0+ZGVidWdjdGxtc3IpOwotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RFQlVHKSkgewotCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWcwLCAwKTsKLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMSwgMSk7Ci0JCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzIsIDIpOwotCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWczLCAzKTsKLQkJLyogbm8gNCBhbmQgNSAqLwotCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWc2LCA2KTsKLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnNywgNyk7Ci0JfQotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX05PVFNDKSBeCi0JICAgIHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX05PVFNDKSkgewotCQkvKiBwcmV2IGFuZCBuZXh0IGFyZSBkaWZmZXJlbnQgKi8KLQkJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX05PVFNDKSkKLQkJCWhhcmRfZGlzYWJsZV9UU0MoKTsKLQkJZWxzZQotCQkJaGFyZF9lbmFibGVfVFNDKCk7Ci0JfQotCi0JaWYgKCF0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9JT19CSVRNQVApKSB7Ci0JCS8qCi0JCSAqIERpc2FibGUgdGhlIGJpdG1hcCB2aWEgYW4gaW52YWxpZCBvZmZzZXQuIFdlIHN0aWxsIGNhY2hlCi0JCSAqIHRoZSBwcmV2aW91cyBiaXRtYXAgb3duZXIgYW5kIHRoZSBJTyBiaXRtYXAgY29udGVudHM6Ci0JCSAqLwotCQl0c3MtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQ7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGlrZWx5KG5leHQgPT0gdHNzLT5pb19iaXRtYXBfb3duZXIpKSB7Ci0JCS8qCi0JCSAqIFByZXZpb3VzIG93bmVyIG9mIHRoZSBiaXRtYXAgKGhlbmNlIHRoZSBiaXRtYXAgY29udGVudCkKLQkJICogbWF0Y2hlcyB0aGUgbmV4dCB0YXNrLCB3ZSBkb250IGhhdmUgdG8gZG8gYW55dGhpbmcgYnV0Ci0JCSAqIHRvIHNldCBhIHZhbGlkIG9mZnNldCBpbiB0aGUgVFNTOgotCQkgKi8KLQkJdHNzLT54ODZfdHNzLmlvX2JpdG1hcF9iYXNlID0gSU9fQklUTUFQX09GRlNFVDsKLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIExhenkgVFNTJ3MgSS9PIGJpdG1hcCBjb3B5LiBXZSBzZXQgYW4gaW52YWxpZCBvZmZzZXQgaGVyZQotCSAqIGFuZCB3ZSBsZXQgdGhlIHRhc2sgdG8gZ2V0IGEgR1BGIGluIGNhc2UgYW4gSS9PIGluc3RydWN0aW9uCi0JICogaXMgcGVyZm9ybWVkLiAgVGhlIGhhbmRsZXIgb2YgdGhlIEdQRiB3aWxsIHZlcmlmeSB0aGF0IHRoZQotCSAqIGZhdWx0aW5nIHRhc2sgaGFzIGEgdmFsaWQgSS9PIGJpdG1hcCBhbmQsIGl0IHRydWUsIGRvZXMgdGhlCi0JICogcmVhbCBjb3B5IGFuZCByZXN0YXJ0IHRoZSBpbnN0cnVjdGlvbi4gIFRoaXMgd2lsbCBzYXZlIHVzCi0JICogcmVkdW5kYW50IGNvcGllcyB3aGVuIHRoZSBjdXJyZW50bHkgc3dpdGNoZWQgdGFzayBkb2VzIG5vdAotCSAqIHBlcmZvcm0gYW55IEkvTyBkdXJpbmcgaXRzIHRpbWVzbGljZS4KLQkgKi8KLQl0c3MtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVRfTEFaWTsKLX0KIAogLyoKICAqCXN3aXRjaF90byh4LHluKSBzaG91bGQgc3dpdGNoIHRhc2tzIGZyb20geCB0byB5LgpAQCAtNTQwLDcgKzM3Nyw3IEBACiAJICogdXNlZCAlZnMgb3IgJWdzIChpdCBkb2VzIG5vdCB0b2RheSksIG9yIGlmIHRoZSBrZXJuZWwgaXMKIAkgKiBydW5uaW5nIGluc2lkZSBvZiBhIGh5cGVydmlzb3IgbGF5ZXIuCiAJICovCi0Jc2F2ZXNlZ21lbnQoZ3MsIHByZXYtPmdzKTsKKwlsYXp5X3NhdmVfZ3MocHJldi0+Z3MpOwogCiAJLyoKIAkgKiBMb2FkIHRoZSBwZXItdGhyZWFkIFRocmVhZC1Mb2NhbCBTdG9yYWdlIGRlc2NyaXB0b3IuCkBAIC01ODYsNjQgKzQyMyw0NCBAQAogCSAqIFJlc3RvcmUgJWdzIGlmIG5lZWRlZCAod2hpY2ggaXMgY29tbW9uKQogCSAqLwogCWlmIChwcmV2LT5ncyB8IG5leHQtPmdzKQotCQlsb2Fkc2VnbWVudChncywgbmV4dC0+Z3MpOworCQlsYXp5X2xvYWRfZ3MobmV4dC0+Z3MpOwogCi0JeDg2X3dyaXRlX3BlcmNwdShjdXJyZW50X3Rhc2ssIG5leHRfcCk7CisJcGVyY3B1X3dyaXRlKGN1cnJlbnRfdGFzaywgbmV4dF9wKTsKIAogCXJldHVybiBwcmV2X3A7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JcmV0dXJuIGRvX2ZvcmsoU0lHQ0hMRCwgcmVncy5zcCwgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOwotfQotCi1hc21saW5rYWdlIGludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MgcmVncykKK2ludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFnczsKIAl1bnNpZ25lZCBsb25nIG5ld3NwOwogCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIsICpjaGlsZF90aWRwdHI7CiAKLQljbG9uZV9mbGFncyA9IHJlZ3MuYng7Ci0JbmV3c3AgPSByZWdzLmN4OwotCXBhcmVudF90aWRwdHIgPSAoaW50IF9fdXNlciAqKXJlZ3MuZHg7Ci0JY2hpbGRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLmRpOworCWNsb25lX2ZsYWdzID0gcmVncy0+Yng7CisJbmV3c3AgPSByZWdzLT5jeDsKKwlwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5keDsKKwljaGlsZF90aWRwdHIgPSAoaW50IF9fdXNlciAqKXJlZ3MtPmRpOwogCWlmICghbmV3c3ApCi0JCW5ld3NwID0gcmVncy5zcDsKLQlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsICZyZWdzLCAwLCBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOwotfQotCi0vKgotICogVGhpcyBpcyB0cml2aWFsLCBhbmQgb24gdGhlIGZhY2Ugb2YgaXQgbG9va3MgbGlrZSBpdAotICogY291bGQgZXF1YWxseSB3ZWxsIGJlIGRvbmUgaW4gdXNlciBtb2RlLgotICoKLSAqIE5vdCBzbywgZm9yIHF1aXRlIHVub2J2aW91cyByZWFzb25zIC0gcmVnaXN0ZXIgcHJlc3N1cmUuCi0gKiBJbiB1c2VyIG1vZGUgdmZvcmsoKSBjYW5ub3QgaGF2ZSBhIHN0YWNrIGZyYW1lLCBhbmQgaWYKLSAqIGRvbmUgYnkgY2FsbGluZyB0aGUgImNsb25lKCkiIHN5c3RlbSBjYWxsIGRpcmVjdGx5LCB5b3UKLSAqIGRvIG5vdCBoYXZlIGVub3VnaCBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcnMgdG8gaG9sZCBhbGwKLSAqIHRoZSBpbmZvcm1hdGlvbiB5b3UgbmVlZC4KLSAqLwotYXNtbGlua2FnZSBpbnQgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JcmV0dXJuIGRvX2ZvcmsoQ0xPTkVfVkZPUksgfCBDTE9ORV9WTSB8IFNJR0NITEQsIHJlZ3Muc3AsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKwkJbmV3c3AgPSByZWdzLT5zcDsKKwlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsIHJlZ3MsIDAsIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7CiB9CiAKIC8qCiAgKiBzeXNfZXhlY3ZlKCkgZXhlY3V0ZXMgYSBuZXcgcHJvZ3JhbS4KICAqLwotYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShzdHJ1Y3QgcHRfcmVncyByZWdzKQoraW50IHN5c19leGVjdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGVycm9yOwogCWNoYXIgKmZpbGVuYW1lOwogCi0JZmlsZW5hbWUgPSBnZXRuYW1lKChjaGFyIF9fdXNlciAqKSByZWdzLmJ4KTsKKwlmaWxlbmFtZSA9IGdldG5hbWUoKGNoYXIgX191c2VyICopIHJlZ3MtPmJ4KTsKIAllcnJvciA9IFBUUl9FUlIoZmlsZW5hbWUpOwogCWlmIChJU19FUlIoZmlsZW5hbWUpKQogCQlnb3RvIG91dDsKIAllcnJvciA9IGRvX2V4ZWN2ZShmaWxlbmFtZSwKLQkJCShjaGFyIF9fdXNlciAqIF9fdXNlciAqKSByZWdzLmN4LAotCQkJKGNoYXIgX191c2VyICogX191c2VyICopIHJlZ3MuZHgsCi0JCQkmcmVncyk7CisJCQkoY2hhciBfX3VzZXIgKiBfX3VzZXIgKikgcmVncy0+Y3gsCisJCQkoY2hhciBfX3VzZXIgKiBfX3VzZXIgKikgcmVncy0+ZHgsCisJCQlyZWdzKTsKIAlpZiAoZXJyb3IgPT0gMCkgewogCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmV0dXJuIHVzaW5nIHN5c2VudGVyLi4gKi8KIAkJc2V0X3RocmVhZF9mbGFnKFRJRl9JUkVUKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDg1YjRjYjUuLmFiYjdlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9zdGFja3Byb3RlY3Rvci5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQ3LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAjaW5jbHVkZSA8YXNtL3ByY3RsLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KQEAgLTU4LDYgKzU4LDEyIEBACiAKIGFzbWxpbmthZ2UgZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAorREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGN1cnJlbnRfdGFzaykgPSAmaW5pdF90YXNrOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGN1cnJlbnRfdGFzayk7CisKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG9sZF9yc3ApOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGNoYXIsIGlzX2lkbGUpOworCiB1bnNpZ25lZCBsb25nIGtlcm5lbF90aHJlYWRfZmxhZ3MgPSBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VEOwogCiBzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQoaWRsZV9ub3RpZmllcik7CkBAIC03NiwxMyArODIsMTMgQEAKIAogdm9pZCBlbnRlcl9pZGxlKHZvaWQpCiB7Ci0Jd3JpdGVfcGRhKGlzaWRsZSwgMSk7CisJcGVyY3B1X3dyaXRlKGlzX2lkbGUsIDEpOwogCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpZGxlX25vdGlmaWVyLCBJRExFX1NUQVJULCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0X2lkbGUodm9pZCkKIHsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0X3BkYSgwLCBpc2lkbGUpID09IDApCisJaWYgKHg4Nl90ZXN0X2FuZF9jbGVhcl9iaXRfcGVyY3B1KDAsIGlzX2lkbGUpID09IDApCiAJCXJldHVybjsKIAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaWRsZV9ub3RpZmllciwgSURMRV9FTkQsIE5VTEwpOwogfQpAQCAtMTEyLDYgKzExOCwxNiBAQAogdm9pZCBjcHVfaWRsZSh2b2lkKQogewogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CisKKwkvKgorCSAqIElmIHdlJ3JlIHRoZSBub24tYm9vdCBDUFUsIG5vdGhpbmcgc2V0IHRoZSBzdGFjayBjYW5hcnkgdXAKKwkgKiBmb3IgdXMuICBDUFUwIGFscmVhZHkgaGFzIGl0IGluaXRpYWxpemVkIGJ1dCBubyBoYXJtIGluCisJICogZG9pbmcgaXQgYWdhaW4uICBUaGlzIGlzIGEgZ29vZCBwbGFjZSBmb3IgdXBkYXRpbmcgaXQsIGFzCisJICogd2Ugd29udCBldmVyIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24gKHNvIHRoZSBpbnZhbGlkCisJICogY2FuYXJpZXMgYWxyZWFkeSBvbiB0aGUgc3RhY2sgd29udCBldmVyIHRyaWdnZXIpLgorCSAqLworCWJvb3RfaW5pdF9zdGFja19jYW5hcnkoKTsKKwogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAJd2hpbGUgKDEpIHsKIAkJdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljaygxKTsKQEAgLTIyMSw2MSArMjM3LDYgQEAKIAlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICh2b2lkICopKHJlZ3MgKyAxKSwgcmVncy0+YnApOwogfQogCi0vKgotICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KLSAqLwotdm9pZCBleGl0X3RocmVhZCh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OwotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJm1lLT50aHJlYWQ7Ci0KLQlpZiAobWUtPnRocmVhZC5pb19iaXRtYXBfcHRyKSB7Ci0JCXN0cnVjdCB0c3Nfc3RydWN0ICp0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgZ2V0X2NwdSgpKTsKLQotCQlrZnJlZSh0LT5pb19iaXRtYXBfcHRyKTsKLQkJdC0+aW9fYml0bWFwX3B0ciA9IE5VTEw7Ci0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JT19CSVRNQVApOwotCQkvKgotCQkgKiBDYXJlZnVsLCBjbGVhciB0aGlzIGluIHRoZSBUU1MgdG9vOgotCQkgKi8KLQkJbWVtc2V0KHRzcy0+aW9fYml0bWFwLCAweGZmLCB0LT5pb19iaXRtYXBfbWF4KTsKLQkJdC0+aW9fYml0bWFwX21heCA9IDA7Ci0JCXB1dF9jcHUoKTsKLQl9Ci0KLQlkc19leGl0X3RocmVhZChjdXJyZW50KTsKLX0KLQotdm9pZCBmbHVzaF90aHJlYWQodm9pZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfQUJJX1BFTkRJTkcpKSB7Ci0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9BQklfUEVORElORyk7Ci0JCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JQTMyKSkgewotCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0lBMzIpOwotCQl9IGVsc2UgewotCQkJc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9JQTMyKTsKLQkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX0NPTVBBVDsKLQkJfQotCX0KLQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfREVCVUcpOwotCi0JdHNrLT50aHJlYWQuZGVidWdyZWcwID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzEgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnMiA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWczID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzYgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnNyA9IDA7Ci0JbWVtc2V0KHRzay0+dGhyZWFkLnRsc19hcnJheSwgMCwgc2l6ZW9mKHRzay0+dGhyZWFkLnRsc19hcnJheSkpOwotCS8qCi0JICogRm9yZ2V0IGNvcHJvY2Vzc29yIHN0YXRlLi4KLQkgKi8KLQl0c2stPmZwdV9jb3VudGVyID0gMDsKLQljbGVhcl9mcHUodHNrKTsKLQljbGVhcl91c2VkX21hdGgoKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlpZiAoZGVhZF90YXNrLT5tbSkgewpAQCAtMzk3LDcgKzM1OCw3IEBACiAJbG9hZF9nc19pbmRleCgwKTsKIAlyZWdzLT5pcAkJPSBuZXdfaXA7CiAJcmVncy0+c3AJCT0gbmV3X3NwOwotCXdyaXRlX3BkYShvbGRyc3AsIG5ld19zcCk7CisJcGVyY3B1X3dyaXRlKG9sZF9yc3AsIG5ld19zcCk7CiAJcmVncy0+Y3MJCT0gX19VU0VSX0NTOwogCXJlZ3MtPnNzCQk9IF9fVVNFUl9EUzsKIAlyZWdzLT5mbGFncwkJPSAweDIwMDsKQEAgLTQwOSwxMTggKzM3MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdGFydF90aHJlYWQpOwogCi1zdGF0aWMgdm9pZCBoYXJkX2Rpc2FibGVfVFNDKHZvaWQpCi17Ci0Jd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1RTRCk7Ci19Ci0KLXZvaWQgZGlzYWJsZV9UU0Modm9pZCkKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoIXRlc3RfYW5kX3NldF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQotCQkvKgotCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKLQkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KLQkJICovCi0JCWhhcmRfZGlzYWJsZV9UU0MoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCBoYXJkX2VuYWJsZV9UU0Modm9pZCkKLXsKLQl3cml0ZV9jcjQocmVhZF9jcjQoKSAmIH5YODZfQ1I0X1RTRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9UU0Modm9pZCkKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVFNDKSkKLQkJLyoKLQkJICogTXVzdCBmbGlwIHRoZSBDUFUgc3RhdGUgc3luY2hyb25vdXNseSB3aXRoCi0JCSAqIFRJRl9OT1RTQyBpbiB0aGUgY3VycmVudCBydW5uaW5nIGNvbnRleHQuCi0JCSAqLwotCQloYXJkX2VuYWJsZV9UU0MoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1pbnQgZ2V0X3RzY19tb2RlKHVuc2lnbmVkIGxvbmcgYWRyKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQotCQl2YWwgPSBQUl9UU0NfU0lHU0VHVjsKLQllbHNlCi0JCXZhbCA9IFBSX1RTQ19FTkFCTEU7Ci0KLQlyZXR1cm4gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFkcik7Ci19Ci0KLWludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCkKLXsKLQlpZiAodmFsID09IFBSX1RTQ19TSUdTRUdWKQotCQlkaXNhYmxlX1RTQygpOwotCWVsc2UgaWYgKHZhbCA9PSBQUl9UU0NfRU5BQkxFKQotCQllbmFibGVfVFNDKCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBzcGVjaWFsIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGxvYWQgYSBkZWJ1Z2dpbmcgcmVnaXN0ZXIKLSAqLwotI2RlZmluZSBsb2FkZGVidWcodGhyZWFkLCByKSBzZXRfZGVidWdyZWcodGhyZWFkLT5kZWJ1Z3JlZyAjIyByLCByKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9feHRyYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZfcCwKLQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3AsCi0JCQkJICAgIHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MpCi17Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnByZXYsICpuZXh0OwotCi0JcHJldiA9ICZwcmV2X3AtPnRocmVhZCwKLQluZXh0ID0gJm5leHRfcC0+dGhyZWFkOwotCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RTX0FSRUFfTVNSKSB8fAotCSAgICB0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9EU19BUkVBX01TUikpCi0JCWRzX3N3aXRjaF90byhwcmV2X3AsIG5leHRfcCk7Ci0JZWxzZSBpZiAobmV4dC0+ZGVidWdjdGxtc3IgIT0gcHJldi0+ZGVidWdjdGxtc3IpCi0JCXVwZGF0ZV9kZWJ1Z2N0bG1zcihuZXh0LT5kZWJ1Z2N0bG1zcik7Ci0KLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfREVCVUcpKSB7Ci0JCWxvYWRkZWJ1ZyhuZXh0LCAwKTsKLQkJbG9hZGRlYnVnKG5leHQsIDEpOwotCQlsb2FkZGVidWcobmV4dCwgMik7Ci0JCWxvYWRkZWJ1ZyhuZXh0LCAzKTsKLQkJLyogbm8gNCBhbmQgNSAqLwotCQlsb2FkZGVidWcobmV4dCwgNik7Ci0JCWxvYWRkZWJ1ZyhuZXh0LCA3KTsKLQl9Ci0KLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfTk9UU0MpIF4KLQkgICAgdGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfTk9UU0MpKSB7Ci0JCS8qIHByZXYgYW5kIG5leHQgYXJlIGRpZmZlcmVudCAqLwotCQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfTk9UU0MpKQotCQkJaGFyZF9kaXNhYmxlX1RTQygpOwotCQllbHNlCi0JCQloYXJkX2VuYWJsZV9UU0MoKTsKLQl9Ci0KLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfSU9fQklUTUFQKSkgewotCQkvKgotCQkgKiBDb3B5IHRoZSByZWxldmFudCByYW5nZSBvZiB0aGUgSU8gYml0bWFwLgotCQkgKiBOb3JtYWxseSB0aGlzIGlzIDEyOCBieXRlcyBvciBsZXNzOgotCQkgKi8KLQkJbWVtY3B5KHRzcy0+aW9fYml0bWFwLCBuZXh0LT5pb19iaXRtYXBfcHRyLAotCQkgICAgICAgbWF4KHByZXYtPmlvX2JpdG1hcF9tYXgsIG5leHQtPmlvX2JpdG1hcF9tYXgpKTsKLQl9IGVsc2UgaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX0lPX0JJVE1BUCkpIHsKLQkJLyoKLQkJICogQ2xlYXIgYW55IHBvc3NpYmxlIGxlZnRvdmVyIGJpdHM6Ci0JCSAqLwotCQltZW1zZXQodHNzLT5pb19iaXRtYXAsIDB4ZmYsIHByZXYtPmlvX2JpdG1hcF9tYXgpOwotCX0KLX0KLQogLyoKICAqCXN3aXRjaF90byh4LHkpIHNob3VsZCBzd2l0Y2ggdGFza3MgZnJvbSB4IHRvIHkuCiAgKgpAQCAtNjE4LDIxICs0NjcsMTMgQEAKIAkvKgogCSAqIFN3aXRjaCB0aGUgUERBIGFuZCBGUFUgY29udGV4dHMuCiAJICovCi0JcHJldi0+dXNlcnNwID0gcmVhZF9wZGEob2xkcnNwKTsKLQl3cml0ZV9wZGEob2xkcnNwLCBuZXh0LT51c2Vyc3ApOwotCXdyaXRlX3BkYShwY3VycmVudCwgbmV4dF9wKTsKKwlwcmV2LT51c2Vyc3AgPSBwZXJjcHVfcmVhZChvbGRfcnNwKTsKKwlwZXJjcHVfd3JpdGUob2xkX3JzcCwgbmV4dC0+dXNlcnNwKTsKKwlwZXJjcHVfd3JpdGUoY3VycmVudF90YXNrLCBuZXh0X3ApOwogCi0Jd3JpdGVfcGRhKGtlcm5lbHN0YWNrLAorCXBlcmNwdV93cml0ZShrZXJuZWxfc3RhY2ssCiAJCSAgKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKG5leHRfcCkgKwotCQkgIFRIUkVBRF9TSVpFIC0gUERBX1NUQUNLT0ZGU0VUKTsKLSNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKLQl3cml0ZV9wZGEoc3RhY2tfY2FuYXJ5LCBuZXh0X3AtPnN0YWNrX2NhbmFyeSk7Ci0JLyoKLQkgKiBCdWlsZCB0aW1lIG9ubHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGFja19jYW5hcnkgaXMgYXQKLQkgKiBvZmZzZXQgNDAgaW4gdGhlIHBkYTsgdGhpcyBpcyBhIGdjYyBBQkkgcmVxdWlyZW1lbnQKLQkgKi8KLQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHg4NjY0X3BkYSwgc3RhY2tfY2FuYXJ5KSAhPSA0MCk7Ci0jZW5kaWYKKwkJICBUSFJFQURfU0laRSAtIEtFUk5FTF9TVEFDS19PRkZTRVQpOwogCiAJLyoKIAkgKiBOb3cgbWF5YmUgcmVsb2FkIHRoZSBkZWJ1ZyByZWdpc3RlcnMgYW5kIGhhbmRsZSBJL08gYml0bWFwcwpAQCAtNjg2LDExICs1MjcsNiBAQAogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5SRUFEX0lNUExJRVNfRVhFQzsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3MtPnNwLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKLX0KLQogYXNtbGlua2FnZSBsb25nCiBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKIAkgIHZvaWQgX191c2VyICpwYXJlbnRfdGlkLCB2b2lkIF9fdXNlciAqY2hpbGRfdGlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTcwMCwyMiArNTM2LDYgQEAKIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsIHJlZ3MsIDAsIHBhcmVudF90aWQsIGNoaWxkX3RpZCk7CiB9CiAKLS8qCi0gKiBUaGlzIGlzIHRyaXZpYWwsIGFuZCBvbiB0aGUgZmFjZSBvZiBpdCBsb29rcyBsaWtlIGl0Ci0gKiBjb3VsZCBlcXVhbGx5IHdlbGwgYmUgZG9uZSBpbiB1c2VyIG1vZGUuCi0gKgotICogTm90IHNvLCBmb3IgcXVpdGUgdW5vYnZpb3VzIHJlYXNvbnMgLSByZWdpc3RlciBwcmVzc3VyZS4KLSAqIEluIHVzZXIgbW9kZSB2Zm9yaygpIGNhbm5vdCBoYXZlIGEgc3RhY2sgZnJhbWUsIGFuZCBpZgotICogZG9uZSBieSBjYWxsaW5nIHRoZSAiY2xvbmUoKSIgc3lzdGVtIGNhbGwgZGlyZWN0bHksIHlvdQotICogZG8gbm90IGhhdmUgZW5vdWdoIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVycyB0byBob2xkIGFsbAotICogdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkLgotICovCi1hc21saW5rYWdlIGxvbmcgc3lzX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBkb19mb3JrKENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0gfCBTSUdDSExELCByZWdzLT5zcCwgcmVncywgMCwKLQkJICAgIE5VTEwsIE5VTEwpOwotfQotCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFjazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAwNmNhMDdmLi4zZDk2NzJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC03NSwxMCArNzUsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnB0X3JlZ3NfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHJlZ25vKQogewogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYngpICE9IDApOwotCXJlZ25vID4+PSAyOwotCWlmIChyZWdubyA+IEZTKQotCQktLXJlZ25vOwotCXJldHVybiAmcmVncy0+YnggKyByZWdubzsKKwlyZXR1cm4gJnJlZ3MtPmJ4ICsgKHJlZ25vID4+IDIpOwogfQogCiBzdGF0aWMgdTE2IGdldF9zZWdtZW50X3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQpAQCAtOTAsOSArODcsMTAgQEAKIAlpZiAob2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LCBncykpCiAJCXJldHZhbCA9ICpwdF9yZWdzX2FjY2Vzcyh0YXNrX3B0X3JlZ3ModGFzayksIG9mZnNldCk7CiAJZWxzZSB7Ci0JCXJldHZhbCA9IHRhc2stPnRocmVhZC5nczsKIAkJaWYgKHRhc2sgPT0gY3VycmVudCkKLQkJCXNhdmVzZWdtZW50KGdzLCByZXR2YWwpOworCQkJcmV0dmFsID0gZ2V0X3VzZXJfZ3ModGFza19wdF9yZWdzKHRhc2spKTsKKwkJZWxzZQorCQkJcmV0dmFsID0gdGFza191c2VyX2dzKHRhc2spOwogCX0KIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTI2LDEzICsxMjQsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LCBncyk6Ci0JCXRhc2stPnRocmVhZC5ncyA9IHZhbHVlOwogCQlpZiAodGFzayA9PSBjdXJyZW50KQotCQkJLyoKLQkJCSAqIFRoZSB1c2VyLW1vZGUgJWdzIGlzIG5vdCBhZmZlY3RlZCBieQotCQkJICoga2VybmVsIGVudHJ5LCBzbyB3ZSBtdXN0IHVwZGF0ZSB0aGUgQ1BVLgotCQkJICovCi0JCQlsb2Fkc2VnbWVudChncywgdmFsdWUpOworCQkJc2V0X3VzZXJfZ3ModGFza19wdF9yZWdzKHRhc2spLCB2YWx1ZSk7CisJCWVsc2UKKwkJCXRhc2tfdXNlcl9ncyh0YXNrKSA9IHZhbHVlOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjczLDcgKzI2OCw3IEBACiAJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9JQTMyKSkKIAkJcmV0dXJuIElBMzJfUEFHRV9PRkZTRVQgLSAzOwogI2VuZGlmCi0JcmV0dXJuIFRBU0tfU0laRTY0IC0gNzsKKwlyZXR1cm4gVEFTS19TSVpFX01BWCAtIDc7CiB9CiAKICNlbmRpZgkvKiBDT05GSUdfWDg2XzMyICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggMzA5OTQ5ZS4uNjk3ZDFiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwpAQCAtMTcyLDcgKzE3Miw4IEBACiAJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNywKIAkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwotCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzYTE2LAkvKiBJQ0gxMCAqLworCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqY2FjaGVkX2RldjsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDQ1MjZiM2EuLjJhZWYzNmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KICNpbmNsdWRlIDxhc20vdmlydGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKICMgaW5jbHVkZSA8bGludXgvZG1pLmg+CkBAIC0yMyw4ICsyNCw2IEBACiAjIGluY2x1ZGUgPGFzbS9pb21tdS5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotCiAvKgogICogUG93ZXIgb2ZmIGZ1bmN0aW9uLCBpZiBhbnkKICAqLwpAQCAtNjU4LDcgKzY1Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHNtcF9zZW5kX25taV9hbGxidXRzZWxmKHZvaWQpCiB7Ci0Jc2VuZF9JUElfYWxsYnV0c2VsZihOTUlfVkVDVE9SKTsKKwlhcGljLT5zZW5kX0lQSV9hbGxidXRzZWxmKE5NSV9WRUNUT1IpOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNyYXNoX25taV9uYiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwppbmRleCBhMTYwZjMxLi4yMDY0ZDBhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCkBAIC03LDcgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCmluZGV4IGY1YWZlNjYuLmQzMmNmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKQEAgLTcsMTAgKzcsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogCiAvKgogICogTXVzdCBiZSByZWxvY2F0YWJsZSBQSUMgY29kZSBjYWxsYWJsZSBhcyBhIEMgZnVuY3Rpb24KQEAgLTI5LDEyMiArMjksNiBAQAogCSAqICVyZHggc3RhcnQgYWRkcmVzcwogCSAqLwogCi0JLyogbWFwIHRoZSBjb250cm9sIHBhZ2UgYXQgaXRzIHZpcnR1YWwgYWRkcmVzcyAqLwotCi0JbW92cQkkMHgwMDAwZmY4MDAwMDAwMDAwLCAlcjEwICAgICAgICAvKiBtYXNrICovCi0JbW92CSQoMzkgLSAzKSwgJWNsICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgdG8gc2hpZnQgKi8KLQltb3ZxCVBUUihWQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjExIC8qIGFkZHJlc3MgdG8gbWFwICovCi0KLQltb3ZxCSVyMTEsICVyOQotCWFuZHEJJXIxMCwgJXI5Ci0Jc2hycQklY2wsICVyOQotCi0JbW92cQlQVFIoVkFfUEdEKSglcnNpKSwgJXI4Ci0JYWRkcQklcjgsICVyOQotCW1vdnEJUFRSKFBBX1BVRF8wKSglcnNpKSwgJXI4Ci0Jb3JxCSRQQUdFX0FUVFIsICVyOAotCW1vdnEJJXI4LCAoJXI5KQotCi0Jc2hycQkkOSwgJXIxMAotCXN1YgkkOSwgJWNsCi0KLQltb3ZxCSVyMTEsICVyOQotCWFuZHEJJXIxMCwgJXI5Ci0Jc2hycQklY2wsICVyOQotCi0JbW92cQlQVFIoVkFfUFVEXzApKCVyc2kpLCAlcjgKLQlhZGRxCSVyOCwgJXI5Ci0JbW92cQlQVFIoUEFfUE1EXzApKCVyc2kpLCAlcjgKLQlvcnEJJFBBR0VfQVRUUiwgJXI4Ci0JbW92cQklcjgsICglcjkpCi0KLQlzaHJxCSQ5LCAlcjEwCi0Jc3ViCSQ5LCAlY2wKLQotCW1vdnEJJXIxMSwgJXI5Ci0JYW5kcQklcjEwLCAlcjkKLQlzaHJxCSVjbCwgJXI5Ci0KLQltb3ZxCVBUUihWQV9QTURfMCkoJXJzaSksICVyOAotCWFkZHEJJXI4LCAlcjkKLQltb3ZxCVBUUihQQV9QVEVfMCkoJXJzaSksICVyOAotCW9ycQkkUEFHRV9BVFRSLCAlcjgKLQltb3ZxCSVyOCwgKCVyOSkKLQotCXNocnEJJDksICVyMTAKLQlzdWIJJDksICVjbAotCi0JbW92cQklcjExLCAlcjkKLQlhbmRxCSVyMTAsICVyOQotCXNocnEJJWNsLCAlcjkKLQotCW1vdnEJUFRSKFZBX1BURV8wKSglcnNpKSwgJXI4Ci0JYWRkcQklcjgsICVyOQotCW1vdnEJUFRSKFBBX0NPTlRST0xfUEFHRSkoJXJzaSksICVyOAotCW9ycQkkUEFHRV9BVFRSLCAlcjgKLQltb3ZxCSVyOCwgKCVyOSkKLQotCS8qIGlkZW50aXR5IG1hcCB0aGUgY29udHJvbCBwYWdlIGF0IGl0cyBwaHlzaWNhbCBhZGRyZXNzICovCi0KLQltb3ZxCSQweDAwMDBmZjgwMDAwMDAwMDAsICVyMTAgICAgICAgIC8qIG1hc2sgKi8KLQltb3YJJCgzOSAtIDMpLCAlY2wgICAgICAgICAgICAgICAgICAgLyogYml0cyB0byBzaGlmdCAqLwotCW1vdnEJUFRSKFBBX0NPTlRST0xfUEFHRSkoJXJzaSksICVyMTEgLyogYWRkcmVzcyB0byBtYXAgKi8KLQotCW1vdnEJJXIxMSwgJXI5Ci0JYW5kcQklcjEwLCAlcjkKLQlzaHJxCSVjbCwgJXI5Ci0KLQltb3ZxCVBUUihWQV9QR0QpKCVyc2kpLCAlcjgKLQlhZGRxCSVyOCwgJXI5Ci0JbW92cQlQVFIoUEFfUFVEXzEpKCVyc2kpLCAlcjgKLQlvcnEJJFBBR0VfQVRUUiwgJXI4Ci0JbW92cQklcjgsICglcjkpCi0KLQlzaHJxCSQ5LCAlcjEwCi0Jc3ViCSQ5LCAlY2wKLQotCW1vdnEJJXIxMSwgJXI5Ci0JYW5kcQklcjEwLCAlcjkKLQlzaHJxCSVjbCwgJXI5Ci0KLQltb3ZxCVBUUihWQV9QVURfMSkoJXJzaSksICVyOAotCWFkZHEJJXI4LCAlcjkKLQltb3ZxCVBUUihQQV9QTURfMSkoJXJzaSksICVyOAotCW9ycQkkUEFHRV9BVFRSLCAlcjgKLQltb3ZxCSVyOCwgKCVyOSkKLQotCXNocnEJJDksICVyMTAKLQlzdWIJJDksICVjbAotCi0JbW92cQklcjExLCAlcjkKLQlhbmRxCSVyMTAsICVyOQotCXNocnEJJWNsLCAlcjkKLQotCW1vdnEJUFRSKFZBX1BNRF8xKSglcnNpKSwgJXI4Ci0JYWRkcQklcjgsICVyOQotCW1vdnEJUFRSKFBBX1BURV8xKSglcnNpKSwgJXI4Ci0Jb3JxCSRQQUdFX0FUVFIsICVyOAotCW1vdnEJJXI4LCAoJXI5KQotCi0Jc2hycQkkOSwgJXIxMAotCXN1YgkkOSwgJWNsCi0KLQltb3ZxCSVyMTEsICVyOQotCWFuZHEJJXIxMCwgJXI5Ci0Jc2hycQklY2wsICVyOQotCi0JbW92cQlQVFIoVkFfUFRFXzEpKCVyc2kpLCAlcjgKLQlhZGRxCSVyOCwgJXI5Ci0JbW92cQlQVFIoUEFfQ09OVFJPTF9QQUdFKSglcnNpKSwgJXI4Ci0Jb3JxCSRQQUdFX0FUVFIsICVyOAotCW1vdnEJJXI4LCAoJXI5KQotCi1yZWxvY2F0ZV9uZXdfa2VybmVsOgotCS8qICVyZGkgaW5kaXJlY3Rpb25fcGFnZQotCSAqICVyc2kgcGFnZV9saXN0Ci0JICogJXJkeCBzdGFydCBhZGRyZXNzCi0JICovCi0KIAkvKiB6ZXJvIG91dCBmbGFncywgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCXB1c2hxICQwCiAJcG9wZnEKQEAgLTE1Niw5ICs0MCw4IEBACiAJLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZSBub3cgdG9vICovCiAJbW92cQlQVFIoUEFfVEFCTEVfUEFHRSkoJXJzaSksICVyY3gKIAotCS8qIHN3aXRjaCB0byBuZXcgc2V0IG9mIHBhZ2UgdGFibGVzICovCi0JbW92cQlQVFIoUEFfUEdEKSglcnNpKSwgJXI5Ci0JbW92cQklcjksICVjcjMKKwkvKiBTd2l0Y2ggdG8gdGhlIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcyAqLworCW1vdnEJJXJjeCwgJWNyMwogCiAJLyogc2V0dXAgYSBuZXcgc3RhY2sgYXQgdGhlIGVuZCBvZiB0aGUgcGh5c2ljYWwgY29udHJvbCBwYWdlICovCiAJbGVhCVBBR0VfU0laRSglcjgpLCAlcnNwCkBAIC0xOTQsOSArNzcsNyBAQAogCWptcCAxZgogMToKIAotCS8qIFN3aXRjaCB0byB0aGUgaWRlbnRpdHkgbWFwcGVkIHBhZ2UgdGFibGVzLAotCSAqIGFuZCBmbHVzaCB0aGUgVExCLgotCSovCisJLyogRmx1c2ggdGhlIFRMQiAobmVlZGVkPykgKi8KIAltb3ZxCSVyY3gsICVjcjMKIAogCS8qIERvIHRoZSBjb3BpZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggNmE4ODExYS4uYjc0NmRlYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTc0LDE0ICs3NCwxNSBAQAogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL2VmaS5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9kbWkuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pc3QuaD4KICNpbmNsdWRlIDxhc20vdm1pLmg+Ci0jaW5jbHVkZSA8c2V0dXBfYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cF9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtODksNyArOTAsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CkBAIC05Nyw3ICs5OCw2IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAKLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCkBAIC0xMTIsNiArMTEyLDIwIEBACiAjZGVmaW5lIEFSQ0hfU0VUVVAKICNlbmRpZgogCit1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQgX19yZWFkX21vc3RseTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKK2ludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKK3sKKwlyZXR1cm4gX19kZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChtcHNfY3B1KTsKK30KKworaW50IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQoreworCXJldHVybiBfX2RlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworfQorI2VuZGlmCisKICNpZm5kZWYgQ09ORklHX0RFQlVHX0JPT1RfUEFSQU1TCiBzdHJ1Y3QgYm9vdF9wYXJhbXMgX19pbml0ZGF0YSBib290X3BhcmFtczsKICNlbHNlCkBAIC01ODYsMjAgKzYwMCw3IEBACiBlYXJseV9wYXJhbSgiZWxmY29yZWhkciIsIHNldHVwX2VsZmNvcmVoZHIpOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IGRlZmF1bHRfdXBkYXRlX2dlbmFwaWModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2X1NNUAotIyBpZiBkZWZpbmVkKENPTkZJR19YODZfR0VORVJJQ0FSQ0gpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQlnZW5hcGljLT53YWtldXBfY3B1ID0gd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX2luaXQ7Ci0jIGVuZGlmCi0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHg4Nl9xdWlya3MgZGVmYXVsdF94ODZfcXVpcmtzIF9faW5pdGRhdGEgPSB7Ci0JLnVwZGF0ZV9nZW5hcGljICAgICAgICAgPSBkZWZhdWx0X3VwZGF0ZV9nZW5hcGljLAotfTsKK3N0YXRpYyBzdHJ1Y3QgeDg2X3F1aXJrcyBkZWZhdWx0X3g4Nl9xdWlya3MgX19pbml0ZGF0YTsKIAogc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3MgX19pbml0ZGF0YSA9ICZkZWZhdWx0X3g4Nl9xdWlya3M7CiAKQEAgLTY1Niw3ICs2NTcsNiBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAltZW1jcHkoJmJvb3RfY3B1X2RhdGEsICZuZXdfY3B1X2RhdGEsIHNpemVvZihuZXdfY3B1X2RhdGEpKTsKIAl2aXN3c19lYXJseV9kZXRlY3QoKTsKLQlwcmVfc2V0dXBfYXJjaF9ob29rKCk7CiAjZWxzZQogCXByaW50ayhLRVJOX0lORk8gIkNvbW1hbmQgbGluZTogJXNcbiIsIGJvb3RfY29tbWFuZF9saW5lKTsKICNlbmRpZgpAQCAtODI0LDggKzgyNCw3IEBACiAjZWxzZQogCW51bV9waHlzcGFnZXMgPSBtYXhfcGZuOwogCi0gCWlmIChjcHVfaGFzX3gyYXBpYykKLSAJCWNoZWNrX3gyYXBpYygpOworCWNoZWNrX3gyYXBpYygpOwogCiAJLyogSG93IG1hbnkgZW5kLW9mLW1lbW9yeSB2YXJpYWJsZXMgeW91IGhhdmUsIGdyYW5kbWEhICovCiAJLyogbmVlZCB0aGlzIGJlZm9yZSBjYWxsaW5nIHJlc2VydmVfaW5pdHJkICovCkBAIC04NjUsOSArODY0LDcgQEAKIAogCXJlc2VydmVfaW5pdHJkKCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJdnNtcF9pbml0KCk7Ci0jZW5kaWYKIAogCWlvX2RlbGF5X2luaXQoKTsKIApAQCAtODkzLDEyICs4OTAsMTEgQEAKIAkgKi8KIAlhY3BpX3Jlc2VydmVfYm9vdG1lbSgpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9GSU5EX1NNUF9DT05GSUcKIAkvKgogCSAqIEZpbmQgYW5kIHJlc2VydmUgcG9zc2libGUgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgogCSAqLwogCWZpbmRfc21wX2NvbmZpZygpOwotI2VuZGlmCisKIAlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC05MjUsOSArOTIxLDcgQEAKIAltYXBfdnN5c2NhbGwoKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl9HRU5FUklDQVJDSAogCWdlbmVyaWNfYXBpY19wcm9iZSgpOwotI2VuZGlmCiAKIAllYXJseV9xdWlya3MoKTsKIApAQCAtOTc4LDQgKzk3Miw5NSBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAKKy8qKgorICogeDg2X3F1aXJrX3ByZV9pbnRyX2luaXQgLSBpbml0aWFsaXNhdGlvbiBwcmlvciB0byBzZXR0aW5nIHVwIGludGVycnVwdCB2ZWN0b3JzCisgKgorICogRGVzY3JpcHRpb246CisgKglQZXJmb3JtIGFueSBuZWNlc3NhcnkgaW50ZXJydXB0IGluaXRpYWxpc2F0aW9uIHByaW9yIHRvIHNldHRpbmcgdXAKKyAqCXRoZSAib3JkaW5hcnkiIGludGVycnVwdCBjYWxsIGdhdGVzLiAgRm9yIGxlZ2FjeSByZWFzb25zLCB0aGUgSVNBCisgKglpbnRlcnJ1cHRzIHNob3VsZCBiZSBpbml0aWFsaXNlZCBoZXJlIGlmIHRoZSBtYWNoaW5lIGVtdWxhdGVzIGEgUEMKKyAqCWluIGFueSB3YXkuCisgKiovCit2b2lkIF9faW5pdCB4ODZfcXVpcmtfcHJlX2ludHJfaW5pdCh2b2lkKQoreworCWlmICh4ODZfcXVpcmtzLT5hcmNoX3ByZV9pbnRyX2luaXQpIHsKKwkJaWYgKHg4Nl9xdWlya3MtPmFyY2hfcHJlX2ludHJfaW5pdCgpKQorCQkJcmV0dXJuOworCX0KKwlpbml0X0lTQV9pcnFzKCk7Cit9CisKKy8qKgorICogeDg2X3F1aXJrX2ludHJfaW5pdCAtIHBvc3QgZ2F0ZSBzZXR1cCBpbnRlcnJ1cHQgaW5pdGlhbGlzYXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqCUZpbGwgaW4gYW55IGludGVycnVwdHMgdGhhdCBtYXkgaGF2ZSBiZWVuIGxlZnQgb3V0IGJ5IHRoZSBnZW5lcmFsCisgKglpbml0X0lSUSgpIHJvdXRpbmUuICBpbnRlcnJ1cHRzIGhhdmluZyB0byBkbyB3aXRoIHRoZSBtYWNoaW5lIHJhdGhlcgorICoJdGhhbiB0aGUgZGV2aWNlcyBvbiB0aGUgSS9PIGJ1cyAobGlrZSBBUElDIGludGVycnVwdHMgaW4gaW50ZWwgTVAKKyAqCXN5c3RlbXMpIGFyZSBzdGFydGVkIGhlcmUuCisgKiovCit2b2lkIF9faW5pdCB4ODZfcXVpcmtfaW50cl9pbml0KHZvaWQpCit7CisJaWYgKHg4Nl9xdWlya3MtPmFyY2hfaW50cl9pbml0KSB7CisJCWlmICh4ODZfcXVpcmtzLT5hcmNoX2ludHJfaW5pdCgpKQorCQkJcmV0dXJuOworCX0KK30KKworLyoqCisgKiB4ODZfcXVpcmtfdHJhcF9pbml0IC0gaW5pdGlhbGlzZSBzeXN0ZW0gc3BlY2lmaWMgdHJhcHMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqCUNhbGxlZCBhcyB0aGUgZmluYWwgYWN0IG9mIHRyYXBfaW5pdCgpLiAgVXNlZCBpbiBWSVNXUyB0byBpbml0aWFsaXNlCisgKgl0aGUgdmFyaW91cyBib2FyZCBzcGVjaWZpYyBBUElDIHRyYXBzLgorICoqLwordm9pZCBfX2luaXQgeDg2X3F1aXJrX3RyYXBfaW5pdCh2b2lkKQoreworCWlmICh4ODZfcXVpcmtzLT5hcmNoX3RyYXBfaW5pdCkgeworCQlpZiAoeDg2X3F1aXJrcy0+YXJjaF90cmFwX2luaXQoKSkKKwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0geworCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMIHwgSVJRRl9USU1FUiwKKwkubWFzayA9IENQVV9NQVNLX05PTkUsCisJLm5hbWUgPSAidGltZXIiCit9OworCisvKioKKyAqIHg4Nl9xdWlya19wcmVfdGltZV9pbml0IC0gZG8gYW55IHNwZWNpZmljIGluaXRpYWxpc2F0aW9ucyBiZWZvcmUuCisgKgorICoqLwordm9pZCBfX2luaXQgeDg2X3F1aXJrX3ByZV90aW1lX2luaXQodm9pZCkKK3sKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfdGltZV9pbml0KQorCQl4ODZfcXVpcmtzLT5hcmNoX3ByZV90aW1lX2luaXQoKTsKK30KKworLyoqCisgKiB4ODZfcXVpcmtfdGltZV9pbml0IC0gZG8gYW55IHNwZWNpZmljIGluaXRpYWxpc2F0aW9ucyBmb3IgdGhlIHN5c3RlbSB0aW1lci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqCU11c3QgcGx1ZyB0aGUgc3lzdGVtIHRpbWVyIGludGVycnVwdCBzb3VyY2UgYXQgSFogaW50byB0aGUgSVJRIGxpc3RlZAorICoJaW4gaXJxX3ZlY3RvcnMuaDpUSU1FUl9JUlEKKyAqKi8KK3ZvaWQgX19pbml0IHg4Nl9xdWlya190aW1lX2luaXQodm9pZCkKK3sKKwlpZiAoeDg2X3F1aXJrcy0+YXJjaF90aW1lX2luaXQpIHsKKwkJLyoKKwkJICogQSBub256ZXJvIHJldHVybiBjb2RlIGRvZXMgbm90IG1lYW4gZmFpbHVyZSwgaXQgbWVhbnMKKwkJICogdGhhdCB0aGUgYXJjaGl0ZWN0dXJlIHF1aXJrIGRvZXMgbm90IHdhbnQgYW55CisJCSAqIGdlbmVyaWMgKHRpbWVyKSBzZXR1cCB0byBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhpczoKKwkJICovCisJCWlmICh4ODZfcXVpcmtzLT5hcmNoX3RpbWVfaW5pdCgpKQorCQkJcmV0dXJuOworCX0KKworCWlycTAubWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOworCXNldHVwX2lycSgwLCAmaXJxMCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDAxMTYxMDcuLjQwMDMzMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTcsMTUwICs3LDM1NiBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vaGlnaG1lbS5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgogCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi11bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnM7Ci11bnNpZ25lZCBkaXNhYmxlZF9jcHVzIF9fY3B1aW5pdGRhdGE7Ci0vKiBQcm9jZXNzb3IgdGhhdCBpcyBkb2luZyB0aGUgYm9vdCB1cCAqLwotdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IC0xVTsKLUVYUE9SVF9TWU1CT0woYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLXVuc2lnbmVkIGludCBtYXhfcGh5c2ljYWxfYXBpY2lkOwotCi0vKiBCaXRtYXNrIG9mIHBoeXNpY2FsbHkgZXhpc3RpbmcgQ1BVcyAqLwotcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKLSNlbmRpZgotCi0vKiBtYXAgY3B1IGluZGV4IHRvIHBoeXNpY2FsIEFQSUMgSUQgKi8KLURFRklORV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2NwdV90b19hcGljaWQsIEJBRF9BUElDSUQpOwotREVGSU5FX0VBUkxZX1BFUl9DUFUodTE2LCB4ODZfYmlvc19jcHVfYXBpY2lkLCBCQURfQVBJQ0lEKTsKLUVYUE9SVF9FQVJMWV9QRVJfQ1BVX1NZTUJPTCh4ODZfY3B1X3RvX2FwaWNpZCk7Ci1FWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0jZGVmaW5lCVg4Nl82NF9OVU1BCTEKLQotLyogbWFwIGNwdSBpbmRleCB0byBub2RlIGluZGV4ICovCi1ERUZJTkVfRUFSTFlfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXAsIE5VTUFfTk9fTk9ERSk7Ci1FWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19ub2RlX21hcCk7Ci0KLS8qIHdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMgKi8KLWNwdW1hc2tfdCAqbm9kZV90b19jcHVtYXNrX21hcDsKLUVYUE9SVF9TWU1CT0wobm9kZV90b19jcHVtYXNrX21hcCk7Ci0KLS8qIHNldHVwIG5vZGVfdG9fY3B1bWFza19tYXAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpOwotCisjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUworIyBkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CisjIGRlZmluZSBEQkcoeC4uLikKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEpICYmIGRlZmluZWQoQ09ORklHX1g4Nl9TTVApCi0vKgotICogQ29weSBkYXRhIHVzZWQgaW4gZWFybHkgaW5pdCByb3V0aW5lcyBmcm9tIHRoZSBpbml0aWFsIGFycmF5cyB0byB0aGUKLSAqIHBlciBjcHUgZGF0YSBhcmVhcy4gIFRoZXNlIGFycmF5cyB0aGVuIGJlY29tZSBleHBlbmRhYmxlIGFuZCB0aGUKLSAqICpfZWFybHlfcHRyJ3MgYXJlIHplcm9lZCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN0YXRpYyBhcnJheXMgYXJlIGdvbmUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X21hcHModm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0KLQkJCQllYXJseV9wZXJfY3B1X21hcCh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0KLQkJCQllYXJseV9wZXJfY3B1X21hcCh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpOwotI2lmZGVmIFg4Nl82NF9OVU1BCi0JCXBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KSA9Ci0JCQkJZWFybHlfcGVyX2NwdV9tYXAoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKLSNlbmRpZgotCX0KLQotCS8qIGluZGljYXRlIHRoZSBlYXJseSBzdGF0aWMgYXJyYXlzIHdpbGwgc29vbiBiZSBnb25lICovCi0JZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpID0gTlVMTDsKLQllYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKSA9IE5VTEw7Ci0jaWZkZWYgWDg2XzY0X05VTUEKLQllYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKSA9IE5VTEw7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qCi0gKiBHcmVhdCBmdXR1cmUgbm90LXNvLWZ1dHVyaXN0aWMgcGxhbjogbWFrZSBpMzg2IGFuZCB4ODZfNjQgZG8gaXQKLSAqIHRoZSBzYW1lIHdheQotICovCi11bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY3B1X3BkYV9tYXAodm9pZCkgeyB9Ci0KLSNlbGlmICFkZWZpbmVkKENPTkZJR19TTVApCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY3B1X3BkYV9tYXAodm9pZCkgeyB9Ci0KLSNlbHNlIC8qIENPTkZJR19TTVAgJiYgQ09ORklHX1g4Nl82NCAqLwotCi0vKgotICogQWxsb2NhdGUgY3B1X3BkYSBwb2ludGVyIHRhYmxlIGFuZCBhcnJheSB2aWEgYWxsb2NfYm9vdG1lbS4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NwdV9wZGFfbWFwKHZvaWQpCi17Ci0JY2hhciAqcGRhOwotCXN0cnVjdCB4ODY2NF9wZGEgKipuZXdfY3B1X3BkYTsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IGNwdTsKLQotCXNpemUgPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgeDg2NjRfcGRhKSwgY2FjaGVfbGluZV9zaXplKCkpOwotCi0JLyogYWxsb2NhdGUgY3B1X3BkYSBhcnJheSBhbmQgcG9pbnRlciB0YWJsZSAqLwotCXsKLQkJdW5zaWduZWQgbG9uZyB0c2l6ZSA9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKTsKLQkJdW5zaWduZWQgbG9uZyBhc2l6ZSA9IHNpemUgKiAobnJfY3B1X2lkcyAtIDEpOwotCi0JCXRzaXplID0gcm91bmR1cCh0c2l6ZSwgY2FjaGVfbGluZV9zaXplKCkpOwotCQluZXdfY3B1X3BkYSA9IGFsbG9jX2Jvb3RtZW0odHNpemUgKyBhc2l6ZSk7Ci0JCXBkYSA9IChjaGFyICopbmV3X2NwdV9wZGEgKyB0c2l6ZTsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgdG8gc3RhdGljIHBkYSdzICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpZiAoY3B1ID09IDApIHsKLQkJCS8qIGxlYXZlIGJvb3QgY3B1IHBkYSBpbiBwbGFjZSAqLwotCQkJbmV3X2NwdV9wZGFbMF0gPSBjcHVfcGRhKDApOwotCQkJY29udGludWU7Ci0JCX0KLQkJbmV3X2NwdV9wZGFbY3B1XSA9IChzdHJ1Y3QgeDg2NjRfcGRhICopcGRhOwotCQluZXdfY3B1X3BkYVtjcHVdLT5pbl9ib290bWVtID0gMTsKLQkJcGRhICs9IHNpemU7Ci0JfQotCi0JLyogcG9pbnQgdG8gbmV3IHBvaW50ZXIgdGFibGUgKi8KLQlfY3B1X3BkYSA9IG5ld19jcHVfcGRhOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1NNUCAmJiBDT05GSUdfWDg2XzY0ICovCitERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9udW1iZXIpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9udW1iZXIpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBCT09UX1BFUkNQVV9PRkZTRVQgKCh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9sb2FkKQorI2Vsc2UKKyNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUIDAKKyNlbmRpZgogCi0vKiBjb3JyZWN0bHkgc2l6ZSB0aGUgbG9jYWwgY3B1IG1hc2tzICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpID0gQk9PVF9QRVJDUFVfT0ZGU0VUOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHRoaXNfY3B1X29mZik7CisKK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0geworCVswIC4uLiBOUl9DUFVTLTFdID0gQk9PVF9QRVJDUFVfT0ZGU0VULAorfTsKK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CisKKy8qCisgKiBPbiB4ODZfNjQgc3ltYm9scyByZWZlcmVuY2VkIGZyb20gY29kZSBzaG91bGQgYmUgcmVhY2hhYmxlIHVzaW5nCisgKiAzMmJpdCByZWxvY2F0aW9ucy4gIFJlc2VydmUgc3BhY2UgZm9yIHN0YXRpYyBwZXJjcHUgdmFyaWFibGVzIGluCisgKiBtb2R1bGVzIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIHNlcnZlZCBmcm9tIHRoZSBmaXJzdCBjaHVuayB3aGljaAorICogaXMgbG9jYXRlZCBhdCB0aGUgcGVyY3B1IHNlZ21lbnQgYmFzZS4gIE9uIHg4Nl8zMiwgYW55dGhpbmcgY2FuCisgKiBhZGRyZXNzIGFueXdoZXJlLiAgTm8gbmVlZCB0byByZXNlcnZlIHNwYWNlIGluIHRoZSBmaXJzdCBjaHVuay4KKyAqLworI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUJUEVSQ1BVX01PRFVMRV9SRVNFUlZFCisjZWxzZQorI2RlZmluZSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRQkwCisjZW5kaWYKKworLyoqCisgKiBwY3B1X25lZWRfbnVtYSAtIGRldGVybWluZSBwZXJjcHUgYWxsb2NhdGlvbiBuZWVkcyB0byBjb25zaWRlciBOVU1BCisgKgorICogSWYgTlVNQSBpcyBub3QgY29uZmlndXJlZCBvciB0aGVyZSBpcyBvbmx5IG9uZSBOVU1BIG5vZGUgYXZhaWxhYmxlLAorICogdGhlcmUgaXMgbm8gcmVhc29uIHRvIGNvbnNpZGVyIE5VTUEuICBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMKKyAqIHdoZXRoZXIgcGVyY3B1IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIE5VTUEgb3Igbm90LgorICoKKyAqIFJFVFVSTlM6CisgKiB0cnVlIGlmIE5VTUEgc2hvdWxkIGJlIGNvbnNpZGVyZWQ7IG90aGVyd2lzZSwgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sIF9faW5pdCBwY3B1X25lZWRfbnVtYSh2b2lkKQogewotCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9pbml0aWFsaXplZF9tYXNrKTsKLQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfY2FsbGluX21hc2spOwotCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9jYWxsb3V0X21hc2spOwotCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9zaWJsaW5nX3NldHVwX21hc2spOworI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCisJcGdfZGF0YV90ICpsYXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CisKKwkJaWYgKG5vZGVfb25saW5lKG5vZGUpICYmIE5PREVfREFUQShub2RlKSAmJgorCQkgICAgbGFzdCAmJiBsYXN0ICE9IE5PREVfREFUQShub2RlKSkKKwkJCXJldHVybiB0cnVlOworCisJCWxhc3QgPSBOT0RFX0RBVEEobm9kZSk7CisJfQorI2VuZGlmCisJcmV0dXJuIGZhbHNlOwogfQogCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9jcHVfbG9jYWxfbWFza3Modm9pZCkKKy8qKgorICogcGNwdV9hbGxvY19ib290bWVtIC0gTlVNQSBmcmllbmRseSBhbGxvY19ib290bWVtIHdyYXBwZXIgZm9yIHBlcmNwdQorICogQGNwdTogY3B1IHRvIGFsbG9jYXRlIGZvcgorICogQHNpemU6IHNpemUgYWxsb2NhdGlvbiBpbiBieXRlcworICogQGFsaWduOiBhbGlnbm1lbnQKKyAqCisgKiBBbGxvY2F0ZSBAc2l6ZSBieXRlcyBhbGlnbmVkIGF0IEBhbGlnbiBmb3IgY3B1IEBjcHUuICBUaGlzIHdyYXBwZXIKKyAqIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBOVU1BIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQKKyAqIGNvbmZpZ3VyYXRpb24uCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQgKiBfX2luaXQgcGNwdV9hbGxvY19ib290bWVtKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKKwljb25zdCB1bnNpZ25lZCBsb25nIGdvYWwgPSBfX3BhKE1BWF9ETUFfQUREUkVTUyk7CisjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKwlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CisJdm9pZCAqcHRyOworCisJaWYgKCFub2RlX29ubGluZShub2RlKSB8fCAhTk9ERV9EQVRBKG5vZGUpKSB7CisJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLCBnb2FsKTsKKwkJcHJfaW5mbygiY3B1ICVkIGhhcyBubyBub2RlICVkIG9yIG5vZGUtbG9jYWwgbWVtb3J5XG4iLAorCQkJY3B1LCBub2RlKTsKKwkJcHJfZGVidWcoInBlciBjcHUgZGF0YSBmb3IgY3B1JWQgJWx1IGJ5dGVzIGF0ICUwMTZseFxuIiwKKwkJCSBjcHUsIHNpemUsIF9fcGEocHRyKSk7CisJfSBlbHNlIHsKKwkJcHRyID0gX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEobm9kZSksCisJCQkJCQkgICBzaXplLCBhbGlnbiwgZ29hbCk7CisJCXByX2RlYnVnKCJwZXIgY3B1IGRhdGEgZm9yIGNwdSVkICVsdSBieXRlcyBvbiBub2RlJWQgYXQgIgorCQkJICIlMDE2bHhcbiIsIGNwdSwgc2l6ZSwgbm9kZSwgX19wYShwdHIpKTsKKwl9CisJcmV0dXJuIHB0cjsKKyNlbHNlCisJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLCBnb2FsKTsKKyNlbmRpZgogfQogCi0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworLyoKKyAqIFJlbWFwIGFsbG9jYXRvcgorICoKKyAqIFRoaXMgYWxsb2NhdG9yIHVzZXMgUE1EIHBhZ2UgYXMgdW5pdC4gIEEgUE1EIHBhZ2UgaXMgYWxsb2NhdGVkIGZvcgorICogZWFjaCBjcHUgYW5kIGVhY2ggaXMgcmVtYXBwZWQgaW50byB2bWFsbG9jIGFyZWEgdXNpbmcgUE1EIG1hcHBpbmcuCisgKiBBcyBQTUQgcGFnZSBpcyBxdWl0ZSBsYXJnZSwgb25seSBwYXJ0IG9mIGl0IGlzIHVzZWQgZm9yIHRoZSBmaXJzdAorICogY2h1bmsuICBVbnVzZWQgcGFydCBpcyByZXR1cm5lZCB0byB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCisgKgorICogU28sIHRoZSBQTUQgcGFnZXMgYXJlIG1hcHBlZCB0d2ljZSAtIG9uY2UgdG8gdGhlIHBoeXNpY2FsIG1hcHBpbmcKKyAqIGFuZCB0byB0aGUgdm1hbGxvYyBhcmVhIGZvciB0aGUgZmlyc3QgcGVyY3B1IGNodW5rLiAgVGhlIGRvdWJsZQorICogbWFwcGluZyBkb2VzIGFkZCBvbmUgbW9yZSBQTUQgVExCIGVudHJ5IHByZXNzdXJlIGJ1dCBzdGlsbCBpcyBtdWNoCisgKiBiZXR0ZXIgdGhhbiBvbmx5IHVzaW5nIDRrIG1hcHBpbmdzIHdoaWxlIHN0aWxsIGJlaW5nIE5VTUEgZnJpZW5kbHkuCisgKi8KKyNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUworc3RhdGljIHNpemVfdCBwY3B1cl9zaXplIF9faW5pdGRhdGE7CitzdGF0aWMgdm9pZCAqKnBjcHVyX3B0cnMgX19pbml0ZGF0YTsKKworc3RhdGljIHN0cnVjdCBwYWdlICogX19pbml0IHBjcHVyX2dldF9wYWdlKHVuc2lnbmVkIGludCBjcHUsIGludCBwYWdlbm8pCit7CisJc2l6ZV90IG9mZiA9IChzaXplX3QpcGFnZW5vIDw8IFBBR0VfU0hJRlQ7CisKKwlpZiAob2ZmID49IHBjcHVyX3NpemUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZpcnRfdG9fcGFnZShwY3B1cl9wdHJzW2NwdV0gKyBvZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBfX2luaXQgc2V0dXBfcGNwdV9yZW1hcChzaXplX3Qgc3RhdGljX3NpemUpCit7CisJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07CisJcGdfZGF0YV90ICpsYXN0OworCXNpemVfdCBwdHJzX3NpemUsIGR5bl9zaXplOworCXVuc2lnbmVkIGludCBjcHU7CisJc3NpemVfdCByZXQ7CisKKwkvKgorCSAqIElmIGxhcmdlIHBhZ2UgaXNuJ3Qgc3VwcG9ydGVkLCB0aGVyZSdzIG5vIGJlbmVmaXQgaW4gZG9pbmcKKwkgKiB0aGlzLiAgQWxzbywgb24gbm9uLU5VTUEsIGVtYmVkZGluZyBpcyBiZXR0ZXIuCisJICovCisJaWYgKCFjcHVfaGFzX3BzZSB8fCBwY3B1X25lZWRfbnVtYSgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxhc3QgPSBOVUxMOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOworCisJCWlmIChub2RlX29ubGluZShub2RlKSAmJiBOT0RFX0RBVEEobm9kZSkgJiYKKwkJICAgIGxhc3QgJiYgbGFzdCAhPSBOT0RFX0RBVEEobm9kZSkpCisJCQlnb3RvIHByb2NlZWQ7CisKKwkJbGFzdCA9IE5PREVfREFUQShub2RlKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CisKK3Byb2NlZWQ6CisJLyoKKwkgKiBDdXJyZW50bHkgc3VwcG9ydHMgb25seSBzaW5nbGUgcGFnZS4gIFN1cHBvcnRpbmcgbXVsdGlwbGUKKwkgKiBwYWdlcyB3b24ndCBiZSB0b28gZGlmZmljdWx0IGlmIGl0IGV2ZXIgYmVjb21lcyBuZWNlc3NhcnkuCisJICovCisJcGNwdXJfc2l6ZSA9IFBGTl9BTElHTihzdGF0aWNfc2l6ZSArIFBFUkNQVV9NT0RVTEVfUkVTRVJWRSArCisJCQkgICAgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSk7CisJaWYgKHBjcHVyX3NpemUgPiBQTURfU0laRSkgeworCQlwcl93YXJuaW5nKCJQRVJDUFU6IHN0YXRpYyBkYXRhIGlzIGxhcmdlciB0aGFuIGxhcmdlIHBhZ2UsICIKKwkJCSAgICJjYW4ndCB1c2UgbGFyZ2UgcGFnZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkeW5fc2l6ZSA9IHBjcHVyX3NpemUgLSBzdGF0aWNfc2l6ZSAtIFBFUkNQVV9GSVJTVF9DSFVOS19SRVNFUlZFOworCisJLyogYWxsb2NhdGUgcG9pbnRlciBhcnJheSBhbmQgYWxsb2MgbGFyZ2UgcGFnZXMgKi8KKwlwdHJzX3NpemUgPSBQRk5fQUxJR04obnVtX3Bvc3NpYmxlX2NwdXMoKSAqIHNpemVvZihwY3B1cl9wdHJzWzBdKSk7CisJcGNwdXJfcHRycyA9IGFsbG9jX2Jvb3RtZW0ocHRyc19zaXplKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcGNwdXJfcHRyc1tjcHVdID0gcGNwdV9hbGxvY19ib290bWVtKGNwdSwgUE1EX1NJWkUsIFBNRF9TSVpFKTsKKwkJaWYgKCFwY3B1cl9wdHJzW2NwdV0pCisJCQlnb3RvIGVub21lbTsKKworCQkvKgorCQkgKiBPbmx5IHVzZSBwY3B1cl9zaXplIGJ5dGVzIGFuZCBnaXZlIGJhY2sgdGhlIHJlc3QuCisJCSAqCisJCSAqIEluZ286IFRoZSAyTUIgdXAtcm91bmRpbmcgYm9vdG1lbSBpcyBuZWVkZWQgdG8gbWFrZQorCQkgKiBzdXJlIHRoZSBwYXJ0aWFsIDJNQiBwYWdlIGlzIHN0aWxsIGZ1bGx5IFJBTSAtIGl0J3MKKwkJICogbm90IHdlbGwtc3BlY2lmaWVkIHRvIGhhdmUgYSBQQVQtaW5jb21wYXRpYmxlIGFyZWEKKwkJICogKHVubWFwcGVkIFJBTSwgZGV2aWNlIG1lbW9yeSwgZXRjLikgaW4gdGhhdCBob2xlLgorCQkgKi8KKwkJZnJlZV9ib290bWVtKF9fcGEocGNwdXJfcHRyc1tjcHVdICsgcGNwdXJfc2l6ZSksCisJCQkgICAgIFBNRF9TSVpFIC0gcGNwdXJfc2l6ZSk7CisKKwkJbWVtY3B5KHBjcHVyX3B0cnNbY3B1XSwgX19wZXJfY3B1X2xvYWQsIHN0YXRpY19zaXplKTsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhZGRyZXNzIGFuZCBtYXAgKi8KKwl2bS5mbGFncyA9IFZNX0FMTE9DOworCXZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogUE1EX1NJWkU7CisJdm1fYXJlYV9yZWdpc3Rlcl9lYXJseSgmdm0sIFBNRF9TSVpFKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcG1kX3QgKnBtZDsKKworCQlwbWQgPSBwb3B1bGF0ZV9leHRyYV9wbWQoKHVuc2lnbmVkIGxvbmcpdm0uYWRkcgorCQkJCQkgKyBjcHUgKiBQTURfU0laRSk7CisJCXNldF9wbWQocG1kLCBwZm5fcG1kKHBhZ2VfdG9fcGZuKHZpcnRfdG9fcGFnZShwY3B1cl9wdHJzW2NwdV0pKSwKKwkJCQkgICAgIFBBR0VfS0VSTkVMX0xBUkdFKSk7CisJfQorCisJLyogd2UncmUgcmVhZHksIGNvbW1pdCAqLworCXByX2luZm8oIlBFUkNQVTogUmVtYXBwZWQgYXQgJXAgd2l0aCBsYXJnZSBwYWdlcywgc3RhdGljIGRhdGEgIgorCQkiJXp1IGJ5dGVzXG4iLCB2bS5hZGRyLCBzdGF0aWNfc2l6ZSk7CisKKwlyZXQgPSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVyX2dldF9wYWdlLCBzdGF0aWNfc2l6ZSwKKwkJCQkgICAgIFBFUkNQVV9GSVJTVF9DSFVOS19SRVNFUlZFLCBkeW5fc2l6ZSwKKwkJCQkgICAgIFBNRF9TSVpFLCB2bS5hZGRyLCBOVUxMKTsKKwlnb3RvIG91dF9mcmVlX2FyOworCitlbm9tZW06CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJaWYgKHBjcHVyX3B0cnNbY3B1XSkKKwkJCWZyZWVfYm9vdG1lbShfX3BhKHBjcHVyX3B0cnNbY3B1XSksIFBNRF9TSVpFKTsKKwlyZXQgPSAtRU5PTUVNOworb3V0X2ZyZWVfYXI6CisJZnJlZV9ib290bWVtKF9fcGEocGNwdXJfcHRycyksIHB0cnNfc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCitzdGF0aWMgc3NpemVfdCBfX2luaXQgc2V0dXBfcGNwdV9yZW1hcChzaXplX3Qgc3RhdGljX3NpemUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKworLyoKKyAqIEVtYmVkZGluZyBhbGxvY2F0b3IKKyAqCisgKiBUaGUgZmlyc3QgY2h1bmsgaXMgc2l6ZWQgdG8ganVzdCBjb250YWluIHRoZSBzdGF0aWMgYXJlYSBwbHVzCisgKiBtb2R1bGUgYW5kIGR5bmFtaWMgcmVzZXJ2ZXMgYW5kIGVtYmVkZGVkIGludG8gbGluZWFyIHBoeXNpY2FsCisgKiBtYXBwaW5nIHNvIHRoYXQgaXQgY2FuIHVzZSBQTUQgbWFwcGluZyB3aXRob3V0IGFkZGl0aW9uYWwgVExCCisgKiBwcmVzc3VyZS4KKyAqLworc3RhdGljIHNzaXplX3QgX19pbml0IHNldHVwX3BjcHVfZW1iZWQoc2l6ZV90IHN0YXRpY19zaXplKQoreworCXNpemVfdCByZXNlcnZlID0gUEVSQ1BVX01PRFVMRV9SRVNFUlZFICsgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRTsKKworCS8qCisJICogSWYgbGFyZ2UgcGFnZSBpc24ndCBzdXBwb3J0ZWQsIHRoZXJlJ3Mgbm8gYmVuZWZpdCBpbiBkb2luZworCSAqIHRoaXMuICBBbHNvLCBlbWJlZGRpbmcgYWxsb2NhdGlvbiBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoCisJICogTlVNQS4KKwkgKi8KKwlpZiAoIWNwdV9oYXNfcHNlIHx8IHBjcHVfbmVlZF9udW1hKCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc3RhdGljX3NpemUsIFBFUkNQVV9GSVJTVF9DSFVOS19SRVNFUlZFLAorCQkJCSAgICAgIHJlc2VydmUgLSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRSwgLTEpOworfQorCisvKgorICogNGsgcGFnZSBhbGxvY2F0b3IKKyAqCisgKiBUaGlzIGlzIHRoZSBiYXNpYyBhbGxvY2F0b3IuICBTdGF0aWMgcGVyY3B1IGFyZWEgaXMgYWxsb2NhdGVkCisgKiBwYWdlLWJ5LXBhZ2UgYW5kIG1vc3Qgb2YgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBieSB0aGUgZ2VuZXJpYworICogc2V0dXAgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBjcHU0a19wYWdlcyBfX2luaXRkYXRhOworc3RhdGljIGludCBwY3B1NGtfbnJfc3RhdGljX3BhZ2VzIF9faW5pdGRhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqIF9faW5pdCBwY3B1NGtfZ2V0X3BhZ2UodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VubykKK3sKKwlpZiAocGFnZW5vIDwgcGNwdTRrX25yX3N0YXRpY19wYWdlcykKKwkJcmV0dXJuIHBjcHU0a19wYWdlc1tjcHUgKiBwY3B1NGtfbnJfc3RhdGljX3BhZ2VzICsgcGFnZW5vXTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjcHU0a19wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBvcHVsYXRlX2V4dHJhX3B0ZShhZGRyKTsKK30KKworc3RhdGljIHNzaXplX3QgX19pbml0IHNldHVwX3BjcHVfNGsoc2l6ZV90IHN0YXRpY19zaXplKQoreworCXNpemVfdCBwYWdlc19zaXplOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGksIGo7CisJc3NpemVfdCByZXQ7CisKKwlwY3B1NGtfbnJfc3RhdGljX3BhZ2VzID0gUEZOX1VQKHN0YXRpY19zaXplKTsKKworCS8qIHVuYWxpZ25lZCBhbGxvY2F0aW9ucyBjYW4ndCBiZSBmcmVlZCwgcm91bmQgdXAgdG8gcGFnZSBzaXplICovCisJcGFnZXNfc2l6ZSA9IFBGTl9BTElHTihwY3B1NGtfbnJfc3RhdGljX3BhZ2VzICogbnVtX3Bvc3NpYmxlX2NwdXMoKQorCQkJICAgICAgICogc2l6ZW9mKHBjcHU0a19wYWdlc1swXSkpOworCXBjcHU0a19wYWdlcyA9IGFsbG9jX2Jvb3RtZW0ocGFnZXNfc2l6ZSk7CisKKwkvKiBhbGxvY2F0ZSBhbmQgY29weSAqLworCWogPSAwOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCWZvciAoaSA9IDA7IGkgPCBwY3B1NGtfbnJfc3RhdGljX3BhZ2VzOyBpKyspIHsKKwkJCXZvaWQgKnB0cjsKKworCQkJcHRyID0gcGNwdV9hbGxvY19ib290bWVtKGNwdSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQkJaWYgKCFwdHIpCisJCQkJZ290byBlbm9tZW07CisKKwkJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9sb2FkICsgaSAqIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJCXBjcHU0a19wYWdlc1tqKytdID0gdmlydF90b19wYWdlKHB0cik7CisJCX0KKworCS8qIHdlJ3JlIHJlYWR5LCBjb21taXQgKi8KKwlwcl9pbmZvKCJQRVJDUFU6IEFsbG9jYXRlZCAlZCA0ayBwYWdlcywgc3RhdGljIGRhdGEgJXp1IGJ5dGVzXG4iLAorCQlwY3B1NGtfbnJfc3RhdGljX3BhZ2VzLCBzdGF0aWNfc2l6ZSk7CisKKwlyZXQgPSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHU0a19nZXRfcGFnZSwgc3RhdGljX3NpemUsCisJCQkJICAgICBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRSwgLTEsCisJCQkJICAgICAtMSwgTlVMTCwgcGNwdTRrX3BvcHVsYXRlX3B0ZSk7CisJZ290byBvdXRfZnJlZV9hcjsKKworZW5vbWVtOgorCXdoaWxlICgtLWogPj0gMCkKKwkJZnJlZV9ib290bWVtKF9fcGEocGFnZV9hZGRyZXNzKHBjcHU0a19wYWdlc1tqXSkpLCBQQUdFX1NJWkUpOworCXJldCA9IC1FTk9NRU07CitvdXRfZnJlZV9hcjoKKwlmcmVlX2Jvb3RtZW0oX19wYShwY3B1NGtfcGFnZXMpLCBwYWdlc19zaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcGVyY3B1X3NlZ21lbnQoaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJc3RydWN0IGRlc2Nfc3RydWN0IGdkdDsKKworCXBhY2tfZGVzY3JpcHRvcigmZ2R0LCBwZXJfY3B1X29mZnNldChjcHUpLCAweEZGRkZGLAorCQkJMHgyIHwgREVTQ1RZUEVfUywgMHg4KTsKKwlnZHQucyA9IDE7CisJd3JpdGVfZ2R0X2VudHJ5KGdldF9jcHVfZ2R0X3RhYmxlKGNwdSksCisJCQlHRFRfRU5UUllfUEVSQ1BVLCAmZ2R0LCBERVNDVFlQRV9TKTsKKyNlbmRpZgorfQogCiAvKgogICogR3JlYXQgZnV0dXJlIHBsYW46CkBAIC0xNTksNTAgKzM2NSw3NyBAQAogICovCiB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCiB7Ci0Jc3NpemVfdCBzaXplLCBvbGRfc2l6ZTsKLQljaGFyICpwdHI7Ci0JaW50IGNwdTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKLQotCS8qIFNldHVwIGNwdV9wZGEgbWFwICovCi0Jc2V0dXBfY3B1X3BkYV9tYXAoKTsKLQotCS8qIENvcHkgc2VjdGlvbiBmb3IgZWFjaCBDUFUgKHdlIGRpc2NhcmQgdGhlIG9yaWdpbmFsKSAqLwotCW9sZF9zaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOwotCWFsaWduID0gbWF4X3QodW5zaWduZWQgbG9uZywgUEFHRV9TSVpFLCBhbGlnbik7Ci0Jc2l6ZSA9IHJvdW5kdXAob2xkX3NpemUsIGFsaWduKTsKKwlzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0OworCXVuc2lnbmVkIGludCBjcHU7CisJdW5zaWduZWQgbG9uZyBkZWx0YTsKKwlzaXplX3QgcGNwdV91bml0X3NpemU7CisJc3NpemVfdCByZXQ7CiAKIAlwcl9pbmZvKCJOUl9DUFVTOiVkIG5yX2NwdW1hc2tfYml0czolZCBucl9jcHVfaWRzOiVkIG5yX25vZGVfaWRzOiVkXG4iLAogCQlOUl9DUFVTLCBucl9jcHVtYXNrX2JpdHMsIG5yX2NwdV9pZHMsIG5yX25vZGVfaWRzKTsKIAotCXByX2luZm8oIlBFUkNQVTogQWxsb2NhdGluZyAlemQgYnl0ZXMgb2YgcGVyIGNwdSBkYXRhXG4iLCBzaXplKTsKKwkvKgorCSAqIEFsbG9jYXRlIHBlcmNwdSBhcmVhLiAgSWYgUFNFIGlzIHN1cHBvcnRlZCwgdHJ5IHRvIG1ha2UgdXNlCisJICogb2YgbGFyZ2UgcGFnZSBtYXBwaW5ncy4gIFBsZWFzZSByZWFkIGNvbW1lbnRzIG9uIHRvcCBvZgorCSAqIGVhY2ggYWxsb2NhdG9yIGZvciBkZXRhaWxzLgorCSAqLworCXJldCA9IHNldHVwX3BjcHVfcmVtYXAoc3RhdGljX3NpemUpOworCWlmIChyZXQgPCAwKQorCQlyZXQgPSBzZXR1cF9wY3B1X2VtYmVkKHN0YXRpY19zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0ID0gc2V0dXBfcGNwdV80ayhzdGF0aWNfc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCXBhbmljKCJjYW5ub3QgYWxsb2NhdGUgc3RhdGljIHBlcmNwdSBhcmVhICglenUgYnl0ZXMsIGVycj0lemQpIiwKKwkJICAgICAgc3RhdGljX3NpemUsIHJldCk7CiAKKwlwY3B1X3VuaXRfc2l6ZSA9IHJldDsKKworCS8qIGFscmlnaHR5LCBwZXJjcHUgYXJlYXMgdXAgYW5kIHJ1bm5pbmcgKi8KKwlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLSNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLQkJcHRyID0gX19hbGxvY19ib290bWVtKHNpemUsIGFsaWduLAotCQkJCSBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwotI2Vsc2UKLQkJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwotCQlpZiAoIW5vZGVfb25saW5lKG5vZGUpIHx8ICFOT0RFX0RBVEEobm9kZSkpIHsKLQkJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwKLQkJCQkJIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7Ci0JCQlwcl9pbmZvKCJjcHUgJWQgaGFzIG5vIG5vZGUgJWQgb3Igbm9kZS1sb2NhbCBtZW1vcnlcbiIsCi0JCQkJY3B1LCBub2RlKTsKLQkJCXByX2RlYnVnKCJwZXIgY3B1IGRhdGEgZm9yIGNwdSVkIGF0ICUwMTZseFxuIiwKLQkJCQkgY3B1LCBfX3BhKHB0cikpOwotCQl9IGVsc2UgewotCQkJcHRyID0gX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplLCBhbGlnbiwKLQkJCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwotCQkJcHJfZGVidWcoInBlciBjcHUgZGF0YSBmb3IgY3B1JWQgb24gbm9kZSVkIGF0ICUwMTZseFxuIiwKLQkJCQljcHUsIG5vZGUsIF9fcGEocHRyKSk7Ci0JCX0KKwkJcGVyX2NwdV9vZmZzZXQoY3B1KSA9IGRlbHRhICsgY3B1ICogcGNwdV91bml0X3NpemU7CisJCXBlcl9jcHUodGhpc19jcHVfb2ZmLCBjcHUpID0gcGVyX2NwdV9vZmZzZXQoY3B1KTsKKwkJcGVyX2NwdShjcHVfbnVtYmVyLCBjcHUpID0gY3B1OworCQlzZXR1cF9wZXJjcHVfc2VnbWVudChjcHUpOworCQlzZXR1cF9zdGFja19jYW5hcnlfc2VnbWVudChjcHUpOworCQkvKgorCQkgKiBDb3B5IGRhdGEgdXNlZCBpbiBlYXJseSBpbml0IHJvdXRpbmVzIGZyb20gdGhlCisJCSAqIGluaXRpYWwgYXJyYXlzIHRvIHRoZSBwZXIgY3B1IGRhdGEgYXJlYXMuICBUaGVzZQorCQkgKiBhcnJheXMgdGhlbiBiZWNvbWUgZXhwZW5kYWJsZSBhbmQgdGhlICpfZWFybHlfcHRyJ3MKKwkJICogYXJlIHplcm9lZCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN0YXRpYyBhcnJheXMgYXJlCisJCSAqIGdvbmUuCisJCSAqLworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0KKwkJCWVhcmx5X3Blcl9jcHVfbWFwKHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOworCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPQorCQkJZWFybHlfcGVyX2NwdV9tYXAoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KTsKICNlbmRpZgotCQlwZXJfY3B1X29mZnNldChjcHUpID0gcHRyIC0gX19wZXJfY3B1X3N0YXJ0OwotCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfc3RhcnQsIF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJcGVyX2NwdShpcnFfc3RhY2tfcHRyLCBjcHUpID0KKwkJCXBlcl9jcHUoaXJxX3N0YWNrX3VuaW9uLmlycV9zdGFjaywgY3B1KSArCisJCQlJUlFfU1RBQ0tfU0laRSAtIDY0OworI2lmZGVmIENPTkZJR19OVU1BCisJCXBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KSA9CisJCQllYXJseV9wZXJfY3B1X21hcCh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOworI2VuZGlmCisjZW5kaWYKKwkJLyoKKwkJICogVXAgdG8gdGhpcyBwb2ludCwgdGhlIGJvb3QgQ1BVIGhhcyBiZWVuIHVzaW5nIC5kYXRhLmluaXQKKwkJICogYXJlYS4gIFJlbG9hZCBhbnkgY2hhbmdlZCBzdGF0ZSBmb3IgdGhlIGJvb3QgQ1BVLgorCQkgKi8KKwkJaWYgKGNwdSA9PSBib290X2NwdV9pZCkKKwkJCXN3aXRjaF90b19uZXdfZ2R0KGNwdSk7CiAJfQogCi0JLyogU2V0dXAgcGVyY3B1IGRhdGEgbWFwcyAqLwotCXNldHVwX3Blcl9jcHVfbWFwcygpOworCS8qIGluZGljYXRlIHRoZSBlYXJseSBzdGF0aWMgYXJyYXlzIHdpbGwgc29vbiBiZSBnb25lICovCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpID0gTlVMTDsKKwllYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKSA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX05VTUEpCisJZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCkgPSBOVUxMOworI2VuZGlmCiAKIAkvKiBTZXR1cCBub2RlIHRvIGNwdW1hc2sgbWFwICovCiAJc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCgpOwpAQCAtMjEwLDE5OSArNDQzLDMgQEAKIAkvKiBTZXR1cCBjcHUgaW5pdGlhbGl6ZWQsIGNhbGxpbiwgY2FsbG91dCBtYXNrcyAqLwogCXNldHVwX2NwdV9sb2NhbF9tYXNrcygpOwogfQotCi0jZW5kaWYKLQotI2lmZGVmIFg4Nl82NF9OVU1BCi0KLS8qCi0gKiBBbGxvY2F0ZSBub2RlX3RvX2NwdW1hc2tfbWFwIGJhc2VkIG9uIG51bWJlciBvZiBhdmFpbGFibGUgbm9kZXMKLSAqIFJlcXVpcmVzIG5vZGVfcG9zc2libGVfbWFwIHRvIGJlIHZhbGlkLgotICoKLSAqIE5vdGU6IG5vZGVfdG9fY3B1bWFzaygpIGlzIG5vdCB2YWxpZCB1bnRpbCBhZnRlciB0aGlzIGlzIGRvbmUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IG5vZGUsIG51bSA9IDA7Ci0JY3B1bWFza190ICptYXA7Ci0KLQkvKiBzZXR1cCBucl9ub2RlX2lkcyBpZiBub3QgZG9uZSB5ZXQgKi8KLQlpZiAobnJfbm9kZV9pZHMgPT0gTUFYX05VTU5PREVTKSB7Ci0JCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKLQkJCW51bSA9IG5vZGU7Ci0JCW5yX25vZGVfaWRzID0gbnVtICsgMTsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSB0aGUgbWFwICovCi0JbWFwID0gYWxsb2NfYm9vdG1lbV9sb3cobnJfbm9kZV9pZHMgKiBzaXplb2YoY3B1bWFza190KSk7Ci0KLQlwcl9kZWJ1ZygiTm9kZSB0byBjcHVtYXNrIG1hcCBhdCAlcCBmb3IgJWQgbm9kZXNcbiIsCi0JCSBtYXAsIG5yX25vZGVfaWRzKTsKLQotCS8qIG5vZGVfdG9fY3B1bWFzaygpIHdpbGwgbm93IHdvcmsgKi8KLQlub2RlX3RvX2NwdW1hc2tfbWFwID0gbWFwOwotfQotCi12b2lkIF9fY3B1aW5pdCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQotewotCWludCAqY3B1X3RvX25vZGVfbWFwID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCk7Ci0KLQlpZiAoY3B1X3BkYShjcHUpICYmIG5vZGUgIT0gTlVNQV9OT19OT0RFKQotCQljcHVfcGRhKGNwdSktPm5vZGVudW1iZXIgPSBub2RlOwotCi0JaWYgKGNwdV90b19ub2RlX21hcCkKLQkJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSBub2RlOwotCi0JZWxzZSBpZiAocGVyX2NwdV9vZmZzZXQoY3B1KSkKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpID0gbm9kZTsKLQotCWVsc2UKLQkJcHJfZGVidWcoIlNldHRpbmcgbm9kZSBmb3Igbm9uLXByZXNlbnQgY3B1ICVkXG4iLCBjcHUpOwotfQotCi12b2lkIF9fY3B1aW5pdCBudW1hX2NsZWFyX25vZGUoaW50IGNwdSkKLXsKLQludW1hX3NldF9ub2RlKGNwdSwgTlVNQV9OT19OT0RFKTsKLX0KLQotI2lmbmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCi0KLXZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KQotewotCWNwdV9zZXQoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2Vhcmx5X2NwdV90b19ub2RlKGNwdSldKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCi17Ci0JY3B1X2NsZWFyKGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtjcHVfdG9fbm9kZShjcHUpXSk7Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KLQotLyoKLSAqIC0tLS0tLS0tLSBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbnVtYSBmdW5jdGlvbnMgLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGludCBlbmFibGUpCi17Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCWNwdW1hc2tfdCAqbWFzazsKLQljaGFyIGJ1Zls2NF07Ci0KLQlpZiAobm9kZV90b19jcHVtYXNrX21hcCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibm9kZV90b19jcHVtYXNrX21hcCBOVUxMXG4iKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm47Ci0JfQotCi0JbWFzayA9ICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotCWlmIChlbmFibGUpCi0JCWNwdV9zZXQoY3B1LCAqbWFzayk7Ci0JZWxzZQotCQljcHVfY2xlYXIoY3B1LCAqbWFzayk7Ci0KLQljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLAotCQllbmFibGUgPyAibnVtYV9hZGRfY3B1IiA6ICJudW1hX3JlbW92ZV9jcHUiLCBjcHUsIG5vZGUsIGJ1Zik7Ci19Ci0KLXZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KQotewotCW51bWFfc2V0X2NwdW1hc2soY3B1LCAxKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCi17Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDApOwotfQotCi1pbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKLXsKLQlpZiAoZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNwdV90b19ub2RlKCVkKTogdXNhZ2UgdG9vIGVhcmx5IVxuIiwgY3B1KTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcClbY3B1XTsKLQl9Ci0JcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKLX0KLUVYUE9SVF9TWU1CT0woY3B1X3RvX25vZGUpOwotCi0vKgotICogU2FtZSBmdW5jdGlvbiBhcyBjcHVfdG9fbm9kZSgpIGJ1dCB1c2VkIGlmIGNhbGxlZCBiZWZvcmUgdGhlCi0gKiBwZXJfY3B1IGFyZWFzIGFyZSBzZXR1cC4KLSAqLwotaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCi17Ci0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApKQotCQlyZXR1cm4gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcClbY3B1XTsKLQotCWlmICghcGVyX2NwdV9vZmZzZXQoY3B1KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiZWFybHlfY3B1X3RvX25vZGUoJWQpOiBubyBwZXJfY3B1IGFyZWEhXG4iLCBjcHUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBOVU1BX05PX05PREU7Ci0JfQotCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Ci19Ci0KLQotLyogZW1wdHkgY3B1bWFzayAqLwotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCBjcHVfbWFza19ub25lOwotCi0vKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4KLSAqLwotY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY3B1bWFza19vZl9ub2RlKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsCi0JCQlub2RlKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gKGNvbnN0IGNwdW1hc2tfdCAqKSZjcHVfb25saW5lX21hcDsKLQl9Ci0JaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCi0JCQlub2RlLCBucl9ub2RlX2lkcyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuICZjcHVfbWFza19ub25lOwotCX0KLQlyZXR1cm4gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Ci19Ci1FWFBPUlRfU1lNQk9MKGNwdW1hc2tfb2Zfbm9kZSk7Ci0KLS8qCi0gKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgotICoKLSAqIFNpZGUgbm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSByZXR1cm5lZCBjcHVtYXNrIG9uIHRoZSBzdGFjawotICogc28gd2l0aCBhIGhpZ2ggTlJfQ1BVUyBjb3VudCwgZXhjZXNzaXZlIHN0YWNrIHNwYWNlIGlzIHVzZWQuICBUaGUKLSAqIG5vZGVfdG9fY3B1bWFza19wdHIgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUuCi0gKi8KLWNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCi17Ci0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkibm9kZV90b19jcHVtYXNrKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsIG5vZGUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBjcHVfb25saW5lX21hcDsKLQl9Ci0JaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIm5vZGVfdG9fY3B1bWFzayglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCi0JCQlub2RlLCBucl9ub2RlX2lkcyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIGNwdV9tYXNrX25vbmU7Ci0JfQotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2spOwotCi0vKgotICogLS0tLS0tLS0tIGVuZCBvZiBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbnVtYSBmdW5jdGlvbnMgLS0tLS0tLS0tCi0gKi8KLQotI2VuZGlmIC8qIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KLQotI2VuZGlmIC8qIFg4Nl82NF9OVU1BICovCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwppbmRleCBkZjA1ODdmLi5kMmNjNjQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCkBAIC01MCwyNyArNTAsMjMgQEAKICMgZGVmaW5lIEZJWF9FRkxBR1MJX19GSVhfRUZMQUdTCiAjZW5kaWYKIAotI2RlZmluZSBDT1BZKHgpCQkJewkJXAotCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPngsICZzYy0+eCk7CVwKLX0KKyNkZWZpbmUgQ09QWSh4KQkJCWRvIHsJCQlcCisJZ2V0X3VzZXJfZXgocmVncy0+eCwgJnNjLT54KTsJCQlcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIENPUFlfU0VHKHNlZykJCXsJCQlcCi0JCXVuc2lnbmVkIHNob3J0IHRtcDsJCQlcCi0JCWVyciB8PSBfX2dldF91c2VyKHRtcCwgJnNjLT5zZWcpOwlcCi0JCXJlZ3MtPnNlZyA9IHRtcDsJCQlcCi19CisjZGVmaW5lIEdFVF9TRUcoc2VnKQkJKHsJCQlcCisJdW5zaWduZWQgc2hvcnQgdG1wOwkJCQlcCisJZ2V0X3VzZXJfZXgodG1wLCAmc2MtPnNlZyk7CQkJXAorCXRtcDsJCQkJCQlcCit9KQogCi0jZGVmaW5lIENPUFlfU0VHX0NQTDMoc2VnKQl7CQkJXAotCQl1bnNpZ25lZCBzaG9ydCB0bXA7CQkJXAotCQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+c2VnKTsJXAotCQlyZWdzLT5zZWcgPSB0bXAgfCAzOwkJCVwKLX0KKyNkZWZpbmUgQ09QWV9TRUcoc2VnKQkJZG8gewkJCVwKKwlyZWdzLT5zZWcgPSBHRVRfU0VHKHNlZyk7CQkJXAorfSB3aGlsZSAoMCkKIAotI2RlZmluZSBHRVRfU0VHKHNlZykJCXsJCQlcCi0JCXVuc2lnbmVkIHNob3J0IHRtcDsJCQlcCi0JCWVyciB8PSBfX2dldF91c2VyKHRtcCwgJnNjLT5zZWcpOwlcCi0JCWxvYWRzZWdtZW50KHNlZywgdG1wKTsJCQlcCi19CisjZGVmaW5lIENPUFlfU0VHX0NQTDMoc2VnKQlkbyB7CQkJXAorCXJlZ3MtPnNlZyA9IEdFVF9TRUcoc2VnKSB8IDM7CQkJXAorfSB3aGlsZSAoMCkKIAogc3RhdGljIGludAogcmVzdG9yZV9zaWdjb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjLApAQCAtODMsNDUgKzc5LDQ5IEBACiAJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCisJZ2V0X3VzZXJfdHJ5IHsKKwogI2lmZGVmIENPTkZJR19YODZfMzIKLQlHRVRfU0VHKGdzKTsKLQlDT1BZX1NFRyhmcyk7Ci0JQ09QWV9TRUcoZXMpOwotCUNPUFlfU0VHKGRzKTsKKwkJc2V0X3VzZXJfZ3MocmVncywgR0VUX1NFRyhncykpOworCQlDT1BZX1NFRyhmcyk7CisJCUNPUFlfU0VHKGVzKTsKKwkJQ09QWV9TRUcoZHMpOwogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAotCUNPUFkoZGkpOyBDT1BZKHNpKTsgQ09QWShicCk7IENPUFkoc3ApOyBDT1BZKGJ4KTsKLQlDT1BZKGR4KTsgQ09QWShjeCk7IENPUFkoaXApOworCQlDT1BZKGRpKTsgQ09QWShzaSk7IENPUFkoYnApOyBDT1BZKHNwKTsgQ09QWShieCk7CisJCUNPUFkoZHgpOyBDT1BZKGN4KTsgQ09QWShpcCk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JQ09QWShyOCk7Ci0JQ09QWShyOSk7Ci0JQ09QWShyMTApOwotCUNPUFkocjExKTsKLQlDT1BZKHIxMik7Ci0JQ09QWShyMTMpOwotCUNPUFkocjE0KTsKLQlDT1BZKHIxNSk7CisJCUNPUFkocjgpOworCQlDT1BZKHI5KTsKKwkJQ09QWShyMTApOworCQlDT1BZKHIxMSk7CisJCUNPUFkocjEyKTsKKwkJQ09QWShyMTMpOworCQlDT1BZKHIxNCk7CisJCUNPUFkocjE1KTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JQ09QWV9TRUdfQ1BMMyhjcyk7Ci0JQ09QWV9TRUdfQ1BMMyhzcyk7CisJCUNPUFlfU0VHX0NQTDMoY3MpOworCQlDT1BZX1NFR19DUEwzKHNzKTsKICNlbHNlIC8qICFDT05GSUdfWDg2XzMyICovCi0JLyogS2VybmVsIHNhdmVzIGFuZCByZXN0b3JlcyBvbmx5IHRoZSBDUyBzZWdtZW50IHJlZ2lzdGVyIG9uIHNpZ25hbHMsCi0JICogd2hpY2ggaXMgdGhlIGJhcmUgbWluaW11bSBuZWVkZWQgdG8gYWxsb3cgbWl4ZWQgMzIvNjQtYml0IGNvZGUuCi0JICogQXBwJ3Mgc2lnbmFsIGhhbmRsZXIgY2FuIHNhdmUvcmVzdG9yZSBvdGhlciBzZWdtZW50cyBpZiBuZWVkZWQuICovCi0JQ09QWV9TRUdfQ1BMMyhjcyk7CisJCS8qIEtlcm5lbCBzYXZlcyBhbmQgcmVzdG9yZXMgb25seSB0aGUgQ1Mgc2VnbWVudCByZWdpc3RlciBvbiBzaWduYWxzLAorCQkgKiB3aGljaCBpcyB0aGUgYmFyZSBtaW5pbXVtIG5lZWRlZCB0byBhbGxvdyBtaXhlZCAzMi82NC1iaXQgY29kZS4KKwkJICogQXBwJ3Mgc2lnbmFsIGhhbmRsZXIgY2FuIHNhdmUvcmVzdG9yZSBvdGhlciBzZWdtZW50cyBpZiBuZWVkZWQuICovCisJCUNPUFlfU0VHX0NQTDMoY3MpOwogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAotCWVyciB8PSBfX2dldF91c2VyKHRtcGZsYWdzLCAmc2MtPmZsYWdzKTsKLQlyZWdzLT5mbGFncyA9IChyZWdzLT5mbGFncyAmIH5GSVhfRUZMQUdTKSB8ICh0bXBmbGFncyAmIEZJWF9FRkxBR1MpOwotCXJlZ3MtPm9yaWdfYXggPSAtMTsJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KKwkJZ2V0X3VzZXJfZXgodG1wZmxhZ3MsICZzYy0+ZmxhZ3MpOworCQlyZWdzLT5mbGFncyA9IChyZWdzLT5mbGFncyAmIH5GSVhfRUZMQUdTKSB8ICh0bXBmbGFncyAmIEZJWF9FRkxBR1MpOworCQlyZWdzLT5vcmlnX2F4ID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCiAKLQllcnIgfD0gX19nZXRfdXNlcihidWYsICZzYy0+ZnBzdGF0ZSk7Ci0JZXJyIHw9IHJlc3RvcmVfaTM4N194c3RhdGUoYnVmKTsKKwkJZ2V0X3VzZXJfZXgoYnVmLCAmc2MtPmZwc3RhdGUpOworCQllcnIgfD0gcmVzdG9yZV9pMzg3X3hzdGF0ZShidWYpOwogCi0JZXJyIHw9IF9fZ2V0X3VzZXIoKnBheCwgJnNjLT5heCk7CisJCWdldF91c2VyX2V4KCpwYXgsICZzYy0+YXgpOworCX0gZ2V0X3VzZXJfY2F0Y2goZXJyKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzMSw1NyArMTMxLDU1IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JewotCQl1bnNpZ25lZCBpbnQgdG1wOworCXB1dF91c2VyX3RyeSB7CiAKLQkJc2F2ZXNlZ21lbnQoZ3MsIHRtcCk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKLQl9Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZnMsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5mcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZXMsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5lcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZHMsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5kcyk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQlwdXRfdXNlcl9leChnZXRfdXNlcl9ncyhyZWdzKSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZnMsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5mcyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmVzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZXMpOworCQlwdXRfdXNlcl9leChyZWdzLT5kcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmRzKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5kaSwgJnNjLT5kaSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c2ksICZzYy0+c2kpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmJwLCAmc2MtPmJwKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zcCwgJnNjLT5zcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+YngsICZzYy0+YngpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmR4LCAmc2MtPmR4KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5jeCwgJnNjLT5jeCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+YXgsICZzYy0+YXgpOworCQlwdXRfdXNlcl9leChyZWdzLT5kaSwgJnNjLT5kaSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnNpLCAmc2MtPnNpKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+YnAsICZzYy0+YnApOworCQlwdXRfdXNlcl9leChyZWdzLT5zcCwgJnNjLT5zcCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmJ4LCAmc2MtPmJ4KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+ZHgsICZzYy0+ZHgpOworCQlwdXRfdXNlcl9leChyZWdzLT5jeCwgJnNjLT5jeCk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmF4LCAmc2MtPmF4KTsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjgsICZzYy0+cjgpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnI5LCAmc2MtPnI5KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTAsICZzYy0+cjEwKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTEsICZzYy0+cjExKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTIsICZzYy0+cjEyKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTMsICZzYy0+cjEzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTQsICZzYy0+cjE0KTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTUsICZzYy0+cjE1KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+cjgsICZzYy0+cjgpOworCQlwdXRfdXNlcl9leChyZWdzLT5yOSwgJnNjLT5yOSk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnIxMCwgJnNjLT5yMTApOworCQlwdXRfdXNlcl9leChyZWdzLT5yMTEsICZzYy0+cjExKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+cjEyLCAmc2MtPnIxMik7CisJCXB1dF91c2VyX2V4KHJlZ3MtPnIxMywgJnNjLT5yMTMpOworCQlwdXRfdXNlcl9leChyZWdzLT5yMTQsICZzYy0+cjE0KTsKKwkJcHV0X3VzZXJfZXgocmVncy0+cjE1LCAmc2MtPnIxNSk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCi0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sICZzYy0+dHJhcG5vKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSwgJnNjLT5lcnIpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmlwLCAmc2MtPmlwKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sICZzYy0+dHJhcG5vKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+dGhyZWFkLmVycm9yX2NvZGUsICZzYy0+ZXJyKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+aXAsICZzYy0+aXApOwogI2lmZGVmIENPTkZJR19YODZfMzIKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5jcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmNzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5mbGFncywgJnNjLT5mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c3AsICZzYy0+c3BfYXRfc2lnbmFsKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5zcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPnNzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+Y3MsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5jcyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmZsYWdzLCAmc2MtPmZsYWdzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+c3AsICZzYy0+c3BfYXRfc2lnbmFsKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+c3MsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5zcyk7CiAjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMiAqLwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmZsYWdzLCAmc2MtPmZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5jcywgJnNjLT5jcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnNjLT5ncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnNjLT5mcyk7CisJCXB1dF91c2VyX2V4KHJlZ3MtPmZsYWdzLCAmc2MtPmZsYWdzKTsKKwkJcHV0X3VzZXJfZXgocmVncy0+Y3MsICZzYy0+Y3MpOworCQlwdXRfdXNlcl9leCgwLCAmc2MtPmdzKTsKKwkJcHV0X3VzZXJfZXgoMCwgJnNjLT5mcyk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCi0JZXJyIHw9IF9fcHV0X3VzZXIoZnBzdGF0ZSwgJnNjLT5mcHN0YXRlKTsKKwkJcHV0X3VzZXJfZXgoZnBzdGF0ZSwgJnNjLT5mcHN0YXRlKTsKIAotCS8qIG5vbi1pQkNTMiBleHRlbnNpb25zLi4gKi8KLQllcnIgfD0gX19wdXRfdXNlcihtYXNrLCAmc2MtPm9sZG1hc2spOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5jcjIsICZzYy0+Y3IyKTsKKwkJLyogbm9uLWlCQ1MyIGV4dGVuc2lvbnMuLiAqLworCQlwdXRfdXNlcl9leChtYXNrLCAmc2MtPm9sZG1hc2spOworCQlwdXRfdXNlcl9leChjdXJyZW50LT50aHJlYWQuY3IyLCAmc2MtPmNyMik7CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE4OSw2ICsxODcsNzEgQEAKIC8qCiAgKiBTZXQgdXAgYSBzaWduYWwgZnJhbWUuCiAgKi8KKworLyoKKyAqIERldGVybWluZSB3aGljaCBzdGFjayB0byB1c2UuLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGlnbl9zaWdmcmFtZSh1bnNpZ25lZCBsb25nIHNwKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIEFsaWduIHRoZSBzdGFjayBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgaTM4NiBBQkksCisJICogaS5lLiBzbyB0aGF0IG9uIGZ1bmN0aW9uIGVudHJ5ICgoc3AgKyA0KSAmIDE1KSA9PSAwLgorCSAqLworCXNwID0gKChzcCArIDQpICYgLTE2dWwpIC0gNDsKKyNlbHNlIC8qICFDT05GSUdfWDg2XzMyICovCisJc3AgPSByb3VuZF9kb3duKHNwLCAxNikgLSA4OworI2VuZGlmCisJcmV0dXJuIHNwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICoKK2dldF9zaWdmcmFtZShzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2l6ZV90IGZyYW1lX3NpemUsCisJICAgICB2b2lkIF9fdXNlciAqKmZwc3RhdGUpCit7CisJLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKi8KKwl1bnNpZ25lZCBsb25nIHNwID0gcmVncy0+c3A7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogcmVkem9uZSAqLworCXNwIC09IDEyODsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKKwkvKgorCSAqIElmIHdlIGFyZSBvbiB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBhbmQgd291bGQgb3ZlcmZsb3cgaXQsIGRvbid0LgorCSAqIFJldHVybiBhbiBhbHdheXMtYm9ndXMgYWRkcmVzcyBpbnN0ZWFkIHNvIHdlIHdpbGwgZGllIHdpdGggU0lHU0VHVi4KKwkgKi8KKwlpZiAob25fc2lnX3N0YWNrKHNwKSAmJiAhbGlrZWx5KG9uX3NpZ19zdGFjayhzcCAtIGZyYW1lX3NpemUpKSkKKwkJcmV0dXJuICh2b2lkIF9fdXNlciAqKSAtMUw7CisKKwkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgeworCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQorCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJLyogVGhpcyBpcyB0aGUgbGVnYWN5IHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICovCisJCWlmICgocmVncy0+c3MgJiAweGZmZmYpICE9IF9fVVNFUl9EUyAmJgorCQkJIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgJiYKKwkJCQlrYS0+c2Euc2FfcmVzdG9yZXIpCisJCQlzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCX0KKworCWlmICh1c2VkX21hdGgoKSkgeworCQlzcCAtPSBzaWdfeHN0YXRlX3NpemU7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlzcCA9IHJvdW5kX2Rvd24oc3AsIDY0KTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisJCSpmcHN0YXRlID0gKHZvaWQgX191c2VyICopc3A7CisKKwkJaWYgKHNhdmVfaTM4N194c3RhdGUoKmZwc3RhdGUpIDwgMCkKKwkJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7CisJfQorCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKWFsaWduX3NpZ2ZyYW1lKHNwIC0gZnJhbWVfc2l6ZSk7Cit9CisKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl1MTYgcG9wbG1vdmw7CkBAIC0yMTIsNTQgKzI3NSw2IEBACiAJMAogfTsKIAotLyoKLSAqIERldGVybWluZSB3aGljaCBzdGFjayB0byB1c2UuLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICoKLWdldF9zaWdmcmFtZShzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2l6ZV90IGZyYW1lX3NpemUsCi0JICAgICB2b2lkICoqZnBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHNwOwotCi0JLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKi8KLQlzcCA9IHJlZ3MtPnNwOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93IGl0LCBkb24ndC4KLQkgKiBSZXR1cm4gYW4gYWx3YXlzLWJvZ3VzIGFkZHJlc3MgaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCi0JICovCi0JaWYgKG9uX3NpZ19zdGFjayhzcCkgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3AgLSBmcmFtZV9zaXplKSkpCi0JCXJldHVybiAodm9pZCBfX3VzZXIgKikgLTFMOwotCi0JLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKLQkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKLQkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7Ci0JfSBlbHNlIHsKLQkJLyogVGhpcyBpcyB0aGUgbGVnYWN5IHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICovCi0JCWlmICgocmVncy0+c3MgJiAweGZmZmYpICE9IF9fVVNFUl9EUyAmJgotCQkJIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgJiYKLQkJCQlrYS0+c2Euc2FfcmVzdG9yZXIpCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7Ci0JfQotCi0JaWYgKHVzZWRfbWF0aCgpKSB7Ci0JCXNwID0gc3AgLSBzaWdfeHN0YXRlX3NpemU7Ci0JCSpmcHN0YXRlID0gKHN0cnVjdCBfZnBzdGF0ZSAqKSBzcDsKLQkJaWYgKHNhdmVfaTM4N194c3RhdGUoKmZwc3RhdGUpIDwgMCkKLQkJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7Ci0JfQotCi0Jc3AgLT0gZnJhbWVfc2l6ZTsKLQkvKgotCSAqIEFsaWduIHRoZSBzdGFjayBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgaTM4NiBBQkksCi0JICogaS5lLiBzbyB0aGF0IG9uIGZ1bmN0aW9uIGVudHJ5ICgoc3AgKyA0KSAmIDE1KSA9PSAwLgotCSAqLwotCXNwID0gKChzcCArIDQpICYgLTE2dWwpIC0gNDsKLQotCXJldHVybiAodm9pZCBfX3VzZXIgKikgc3A7Ci19Ci0KIHN0YXRpYyBpbnQKIF9fc2V0dXBfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnc2V0X3QgKnNldCwKIAkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTMzNiw0MyArMzUxLDQxIEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciB8PSBfX3B1dF91c2VyKHNpZywgJmZyYW1lLT5zaWcpOwotCWVyciB8PSBfX3B1dF91c2VyKCZmcmFtZS0+aW5mbywgJmZyYW1lLT5waW5mbyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoJmZyYW1lLT51YywgJmZyYW1lLT5wdWMpOwotCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcigmZnJhbWUtPmluZm8sIGluZm8pOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUZBVUxUOworCXB1dF91c2VyX3RyeSB7CisJCXB1dF91c2VyX2V4KHNpZywgJmZyYW1lLT5zaWcpOworCQlwdXRfdXNlcl9leCgmZnJhbWUtPmluZm8sICZmcmFtZS0+cGluZm8pOworCQlwdXRfdXNlcl9leCgmZnJhbWUtPnVjLCAmZnJhbWUtPnB1Yyk7CisJCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcigmZnJhbWUtPmluZm8sIGluZm8pOwogCi0JLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCi0JaWYgKGNwdV9oYXNfeHNhdmUpCi0JCWVyciB8PSBfX3B1dF91c2VyKFVDX0ZQX1hTVEFURSwgJmZyYW1lLT51Yy51Y19mbGFncyk7Ci0JZWxzZQotCQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2xpbmspOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zcCwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc2FzX3NzX2ZsYWdzKHJlZ3MtPnNwKSwKLQkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7Ci0JZXJyIHw9IHNldHVwX3NpZ2NvbnRleHQoJmZyYW1lLT51Yy51Y19tY29udGV4dCwgZnBzdGF0ZSwKLQkJCQlyZWdzLCBzZXQtPnNpZ1swXSk7Ci0JZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUZBVUxUOworCQkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KKwkJaWYgKGNwdV9oYXNfeHNhdmUpCisJCQlwdXRfdXNlcl9leChVQ19GUF9YU1RBVEUsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCQllbHNlCisJCQlwdXRfdXNlcl9leCgwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwkJcHV0X3VzZXJfZXgoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKKwkJcHV0X3VzZXJfZXgoc2FzX3NzX2ZsYWdzKHJlZ3MtPnNwKSwKKwkJCSAgICAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKKwkJcHV0X3VzZXJfZXgoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CisJCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIGZwc3RhdGUsCisJCQkJCXJlZ3MsIHNldC0+c2lnWzBdKTsKKwkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwogCi0JLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZS4gICovCi0JcmVzdG9yZXIgPSBWRFNPMzJfU1lNQk9MKGN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc28sIHJ0X3NpZ3JldHVybik7Ci0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKQotCQlyZXN0b3JlciA9IGthLT5zYS5zYV9yZXN0b3JlcjsKLQllcnIgfD0gX19wdXRfdXNlcihyZXN0b3JlciwgJmZyYW1lLT5wcmV0Y29kZSk7CisJCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICAqLworCQlyZXN0b3JlciA9IFZEU08zMl9TWU1CT0woY3VycmVudC0+bW0tPmNvbnRleHQudmRzbywgcnRfc2lncmV0dXJuKTsKKwkJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKQorCQkJcmVzdG9yZXIgPSBrYS0+c2Euc2FfcmVzdG9yZXI7CisJCXB1dF91c2VyX2V4KHJlc3RvcmVyLCAmZnJhbWUtPnByZXRjb2RlKTsKIAotCS8qCi0JICogVGhpcyBpcyBtb3ZsICRfX05SX3J0X3NpZ3JldHVybiwgJWF4IDsgaW50ICQweDgwCi0JICoKLQkgKiBXRSBETyBOT1QgVVNFIElUIEFOWSBNT1JFISBJdCdzIG9ubHkgbGVmdCBoZXJlIGZvciBoaXN0b3JpY2FsCi0JICogcmVhc29ucyBhbmQgYmVjYXVzZSBnZGIgdXNlcyBpdCBhcyBhIHNpZ25hdHVyZSB0byBub3RpY2UKLQkgKiBzaWduYWwgaGFuZGxlciBzdGFjayBmcmFtZXMuCi0JICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoKigodTY0ICopJnJ0X3JldGNvZGUpLCAodTY0ICopZnJhbWUtPnJldGNvZGUpOworCQkvKgorCQkgKiBUaGlzIGlzIG1vdmwgJF9fTlJfcnRfc2lncmV0dXJuLCAlYXggOyBpbnQgJDB4ODAKKwkJICoKKwkJICogV0UgRE8gTk9UIFVTRSBJVCBBTlkgTU9SRSEgSXQncyBvbmx5IGxlZnQgaGVyZSBmb3IgaGlzdG9yaWNhbAorCQkgKiByZWFzb25zIGFuZCBiZWNhdXNlIGdkYiB1c2VzIGl0IGFzIGEgc2lnbmF0dXJlIHRvIG5vdGljZQorCQkgKiBzaWduYWwgaGFuZGxlciBzdGFjayBmcmFtZXMuCisJCSAqLworCQlwdXRfdXNlcl9leCgqKCh1NjQgKikmcnRfcmV0Y29kZSksICh1NjQgKilmcmFtZS0+cmV0Y29kZSk7CisJfSBwdXRfdXNlcl9jYXRjaChlcnIpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0zOTIsMjQgKzQwNSw2IEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMiAqLwotLyoKLSAqIERldGVybWluZSB3aGljaCBzdGFjayB0byB1c2UuLgotICovCi1zdGF0aWMgdm9pZCBfX3VzZXIgKgotZ2V0X3N0YWNrKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQkvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAtIHJlZHpvbmUqLwotCXNwIC09IDEyODsKLQotCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWlmIChzYXNfc3NfZmxhZ3Moc3ApID09IDApCi0JCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwotCX0KLQotCXJldHVybiAodm9pZCBfX3VzZXIgKilyb3VuZF9kb3duKHNwIC0gc2l6ZSwgNjQpOwotfQotCiBzdGF0aWMgaW50IF9fc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCQkJICAgIHNpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtNDE4LDE1ICs0MTMsNyBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OwogCi0JaWYgKHVzZWRfbWF0aCgpKSB7Ci0JCWZwID0gZ2V0X3N0YWNrKGthLCByZWdzLT5zcCwgc2lnX3hzdGF0ZV9zaXplKTsKLQkJZnJhbWUgPSAodm9pZCBfX3VzZXIgKilyb3VuZF9kb3duKAotCQkJKHVuc2lnbmVkIGxvbmcpZnAgLSBzaXplb2Yoc3RydWN0IHJ0X3NpZ2ZyYW1lKSwgMTYpIC0gODsKLQotCQlpZiAoc2F2ZV9pMzg3X3hzdGF0ZShmcCkgPCAwKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfSBlbHNlCi0JCWZyYW1lID0gZ2V0X3N0YWNrKGthLCByZWdzLT5zcCwgc2l6ZW9mKHN0cnVjdCBydF9zaWdmcmFtZSkpIC0gODsKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKHN0cnVjdCBydF9zaWdmcmFtZSksICZmcCk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNDM2LDI4ICs0MjMsMzAgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwotCWlmIChjcHVfaGFzX3hzYXZlKQotCQllcnIgfD0gX19wdXRfdXNlcihVQ19GUF9YU1RBVEUsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVsc2UKLQkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihtZS0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKLQllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+c3ApLAotCQkJICAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihtZS0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7Ci0JZXJyIHw9IHNldHVwX3NpZ2NvbnRleHQoJmZyYW1lLT51Yy51Y19tY29udGV4dCwgZnAsIHJlZ3MsIHNldC0+c2lnWzBdKTsKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7CisJcHV0X3VzZXJfdHJ5IHsKKwkJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCisJCWlmIChjcHVfaGFzX3hzYXZlKQorCQkJcHV0X3VzZXJfZXgoVUNfRlBfWFNUQVRFLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwkJZWxzZQorCQkJcHV0X3VzZXJfZXgoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJCXB1dF91c2VyX2V4KDAsICZmcmFtZS0+dWMudWNfbGluayk7CisJCXB1dF91c2VyX2V4KG1lLT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOworCQlwdXRfdXNlcl9leChzYXNfc3NfZmxhZ3MocmVncy0+c3ApLAorCQkJICAgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOworCQlwdXRfdXNlcl9leChtZS0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CisJCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIGZwLCByZWdzLCBzZXQtPnNpZ1swXSk7CisJCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKIAotCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICBJZiBwcm92aWRlZCwgdXNlIGEgc3R1YgotCSAgIGFscmVhZHkgaW4gdXNlcnNwYWNlLiAgKi8KLQkvKiB4ODYtNjQgc2hvdWxkIGFsd2F5cyB1c2UgU0FfUkVTVE9SRVIuICovCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSB7Ci0JCWVyciB8PSBfX3B1dF91c2VyKGthLT5zYS5zYV9yZXN0b3JlciwgJmZyYW1lLT5wcmV0Y29kZSk7Ci0JfSBlbHNlIHsKLQkJLyogY291bGQgdXNlIGEgdnN0dWIgaGVyZSAqLwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisJCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICBJZiBwcm92aWRlZCwgdXNlIGEgc3R1YgorCQkgICBhbHJlYWR5IGluIHVzZXJzcGFjZS4gICovCisJCS8qIHg4Ni02NCBzaG91bGQgYWx3YXlzIHVzZSBTQV9SRVNUT1JFUi4gKi8KKwkJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSB7CisJCQlwdXRfdXNlcl9leChrYS0+c2Euc2FfcmVzdG9yZXIsICZmcmFtZS0+cHJldGNvZGUpOworCQl9IGVsc2UgeworCQkJLyogY291bGQgdXNlIGEgdnN0dWIgaGVyZSAqLworCQkJZXJyIHw9IC1FRkFVTFQ7CisJCX0KKwl9IHB1dF91c2VyX2NhdGNoKGVycik7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTUwOSwzMSArNDk4LDQxIEBACiAJICAgICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICpvYWN0KQogewogCXN0cnVjdCBrX3NpZ2FjdGlvbiBuZXdfa2EsIG9sZF9rYTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaWYgKGFjdCkgewogCQlvbGRfc2lnc2V0X3QgbWFzazsKIAotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYWN0LCBzaXplb2YoKmFjdCkpIHx8Ci0JCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9oYW5kbGVyLCAmYWN0LT5zYV9oYW5kbGVyKSB8fAotCQkgICAgX19nZXRfdXNlcihuZXdfa2Euc2Euc2FfcmVzdG9yZXIsICZhY3QtPnNhX3Jlc3RvcmVyKSkKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGFjdCwgc2l6ZW9mKCphY3QpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCV9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncyk7Ci0JCV9fZ2V0X3VzZXIobWFzaywgJmFjdC0+c2FfbWFzayk7CisJCWdldF91c2VyX3RyeSB7CisJCQlnZXRfdXNlcl9leChuZXdfa2Euc2Euc2FfaGFuZGxlciwgJmFjdC0+c2FfaGFuZGxlcik7CisJCQlnZXRfdXNlcl9leChuZXdfa2Euc2Euc2FfZmxhZ3MsICZhY3QtPnNhX2ZsYWdzKTsKKwkJCWdldF91c2VyX2V4KG1hc2ssICZhY3QtPnNhX21hc2spOworCQkJZ2V0X3VzZXJfZXgobmV3X2thLnNhLnNhX3Jlc3RvcmVyLCAmYWN0LT5zYV9yZXN0b3Jlcik7CisJCX0gZ2V0X3VzZXJfY2F0Y2gocmV0KTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXNpZ2luaXRzZXQoJm5ld19rYS5zYS5zYV9tYXNrLCBtYXNrKTsKIAl9CiAKIAlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKIAogCWlmICghcmV0ICYmIG9hY3QpIHsKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvYWN0LCBzaXplb2YoKm9hY3QpKSB8fAotCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfaGFuZGxlciwgJm9hY3QtPnNhX2hhbmRsZXIpIHx8Ci0JCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKSkKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvYWN0LCBzaXplb2YoKm9hY3QpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCV9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpOwotCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spOworCQlwdXRfdXNlcl90cnkgeworCQkJcHV0X3VzZXJfZXgob2xkX2thLnNhLnNhX2hhbmRsZXIsICZvYWN0LT5zYV9oYW5kbGVyKTsKKwkJCXB1dF91c2VyX2V4KG9sZF9rYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKTsKKwkJCXB1dF91c2VyX2V4KG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spOworCQkJcHV0X3VzZXJfZXgob2xkX2thLnNhLnNhX3Jlc3RvcmVyLCAmb2FjdC0+c2FfcmVzdG9yZXIpOworCQl9IHB1dF91c2VyX2NhdGNoKHJldCk7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC01NDEsMTQgKzU0MCw5IEBACiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotYXNtbGlua2FnZSBpbnQgc3lzX3NpZ2FsdHN0YWNrKHVuc2lnbmVkIGxvbmcgYngpCitpbnQgc3lzX3NpZ2FsdHN0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCS8qCi0JICogVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBnY2MgcmVhbGl6ZSBpdCBkb2Vzbid0IG93biB0aGUKLQkgKiAic3RydWN0IHB0X3JlZ3MiCi0JICovCi0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikmYng7Ci0JY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcyA9IChjb25zdCBzdGFja190IF9fdXNlciAqKWJ4OworCWNvbnN0IHN0YWNrX3QgX191c2VyICp1c3MgPSAoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKilyZWdzLT5ieDsKIAlzdGFja190IF9fdXNlciAqdW9zcyA9IChzdGFja190IF9fdXNlciAqKXJlZ3MtPmN4OwogCiAJcmV0dXJuIGRvX3NpZ2FsdHN0YWNrKHVzcywgdW9zcywgcmVncy0+c3ApOwpAQCAtNTY2LDE0ICs1NjAsMTIgQEAKICAqIERvIGEgc2lnbmFsIHJldHVybjsgdW5kbyB0aGUgc2lnbmFsIHN0YWNrLgogICovCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19zaWdyZXR1cm4odW5zaWduZWQgbG9uZyBfX3VudXNlZCkKK3Vuc2lnbmVkIGxvbmcgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZTsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAl1bnNpZ25lZCBsb25nIGF4OwogCXNpZ3NldF90IHNldDsKIAotCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikgJl9fdW51c2VkOwogCWZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKikocmVncy0+c3AgLSA4KTsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQpAQCAtNjAwLDcgKzU5Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCi1zdGF0aWMgbG9uZyBkb19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitsb25nIHN5c19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CiAJdW5zaWduZWQgbG9uZyBheDsKQEAgLTYzMSwyNSArNjIzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qCi0gKiBOb3RlOiBkbyBub3QgcGFzcyBpbiBwdF9yZWdzIGRpcmVjdGx5IGFzIHdpdGggdGFpbC1jYWxsIG9wdGltaXphdGlvbgotICogR0NDIHdpbGwgaW5jb3JyZWN0bHkgc3RvbXAgb24gdGhlIGNhbGxlcidzIGZyYW1lIGFuZCBjb3JydXB0IHVzZXItc3BhY2UKLSAqIHJlZ2lzdGVyIHN0YXRlOgotICovCi1hc21saW5rYWdlIGludCBzeXNfcnRfc2lncmV0dXJuKHVuc2lnbmVkIGxvbmcgX191bnVzZWQpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikmX191bnVzZWQ7Ci0KLQlyZXR1cm4gZG9fcnRfc2lncmV0dXJuKHJlZ3MpOwotfQotI2Vsc2UgLyogIUNPTkZJR19YODZfMzIgKi8KLWFzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBkb19ydF9zaWdyZXR1cm4ocmVncyk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotCiAvKgogICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcjoKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcC5jIGIvYXJjaC94ODYva2VybmVsL3NtcC5jCmluZGV4IGU2ZmFhMzMuLjEzZjMzZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wLmMKQEAgLTIsNyArMiw3IEBACiAgKglJbnRlbCBTTVAgc3VwcG9ydCByb3V0aW5lcy4KICAqCiAgKgkoYykgMTk5NSBBbGFuIENveCwgQnVpbGRpbmcgIzMgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqCShjKSAxOTk4LTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoJKGMpIDE5OTgtOTksIDIwMDAsIDIwMDkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKiAgICAgIChjKSAyMDAyLDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgogICoKICAqCWkzODYgYW5kIHg4Nl82NCBpbnRlZ3JhdGlvbiBieSBHbGF1YmVyIENvc3RhIDxnY29zdGFAcmVkaGF0LmNvbT4KQEAgLTI2LDggKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAvKgogICoJU29tZSBub3RlcyBvbiB4ODYgcHJvY2Vzc29yIGJ1Z3MgYWZmZWN0aW5nIFNNUCBvcGVyYXRpb246CiAgKgpAQCAtMTE4LDEyICsxMTcsMTIgQEAKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KLQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoY3B1KSwgUkVTQ0hFRFVMRV9WRUNUT1IpOworCWFwaWMtPnNlbmRfSVBJX21hc2soY3B1bWFza19vZihjcHUpLCBSRVNDSEVEVUxFX1ZFQ1RPUik7CiB9CiAKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoaW50IGNwdSkKIHsKLQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoY3B1KSwgQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SKTsKKwlhcGljLT5zZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoY3B1KSwgQ0FMTF9GVU5DVElPTl9TSU5HTEVfVkVDVE9SKTsKIH0KIAogdm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfaXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQpAQCAtMTMxLDcgKzEzMCw3IEBACiAJY3B1bWFza192YXJfdCBhbGxidXRzZWxmOwogCiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmYWxsYnV0c2VsZiwgR0ZQX0FUT01JQykpIHsKLQkJc2VuZF9JUElfbWFzayhtYXNrLCBDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7CisJCWFwaWMtPnNlbmRfSVBJX21hc2sobWFzaywgQ0FMTF9GVU5DVElPTl9WRUNUT1IpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDAsOSArMTM5LDkgQEAKIAogCWlmIChjcHVtYXNrX2VxdWFsKG1hc2ssIGFsbGJ1dHNlbGYpICYmCiAJICAgIGNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfY2FsbG91dF9tYXNrKSkKLQkJc2VuZF9JUElfYWxsYnV0c2VsZihDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7CisJCWFwaWMtPnNlbmRfSVBJX2FsbGJ1dHNlbGYoQ0FMTF9GVU5DVElPTl9WRUNUT1IpOwogCWVsc2UKLQkJc2VuZF9JUElfbWFzayhtYXNrLCBDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7CisJCWFwaWMtPnNlbmRfSVBJX21hc2sobWFzaywgQ0FMTF9GVU5DVElPTl9WRUNUT1IpOwogCiAJZnJlZV9jcHVtYXNrX3ZhcihhbGxidXRzZWxmKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGJiMWEzYjEuLjI0OTMzNGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMiw3ICsyLDcgQEAKICAqCXg4NiBTTVAgYm9vdGluZyBmdW5jdGlvbnMKICAqCiAgKgkoYykgMTk5NSBBbGFuIENveCwgQnVpbGRpbmcgIzMgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqCShjKSAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoJKGMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKglDb3B5cmlnaHQgMjAwMSBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKgogICoJTXVjaCBvZiB0aGUgY29yZSBTTVAgd29yayBpcyBiYXNlZCBvbiBwcmV2aW91cyB3b3JrIGJ5IFRob21hcyBSYWRrZSwgdG8KQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CkBAIC02MSwxMyArNjAsMTIgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS92bWkuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KIAotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotI2luY2x1ZGUgPG1hY2hfd2FrZWNwdS5oPgotI2luY2x1ZGUgPHNtcGJvb3RfaG9va3MuaD4KKyNpbmNsdWRlIDxhc20vc21wYm9vdF9ob29rcy5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogdTggYXBpY2lkXzJfbm9kZVtNQVhfQVBJQ0lEXTsKQEAgLTExNCw3ICsxMTIsNyBAQAogREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X2luZm8pOwogCi1zdGF0aWMgYXRvbWljX3QgaW5pdF9kZWFzc2VydGVkOworYXRvbWljX3QgaW5pdF9kZWFzc2VydGVkOwogCiAKIC8qIFNldCBpZiB3ZSBmaW5kIGEgQiBzdGVwcGluZyBDUFUgKi8KQEAgLTE2Myw3ICsxNjEsNyBAQAogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGFwaWNpZCA9IGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBub2RlID0gYXBpY2lkX3RvX25vZGUoYXBpY2lkKTsKKwlpbnQgbm9kZSA9IGFwaWMtPmFwaWNpZF90b19ub2RlKGFwaWNpZCk7CiAKIAlpZiAoIW5vZGVfb25saW5lKG5vZGUpKQogCQlub2RlID0gZmlyc3Rfb25saW5lX25vZGU7CkBAIC0xOTYsNyArMTk0LDggQEAKIAkgKiBvdXIgbG9jYWwgQVBJQy4gIFdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIElQSSBvciB3ZSdsbAogCSAqIGxvY2sgdXAgb24gYW4gQVBJQyBhY2Nlc3MuCiAJICovCi0Jd2FpdF9mb3JfaW5pdF9kZWFzc2VydCgmaW5pdF9kZWFzc2VydGVkKTsKKwlpZiAoYXBpYy0+d2FpdF9mb3JfaW5pdF9kZWFzc2VydCkKKwkJYXBpYy0+d2FpdF9mb3JfaW5pdF9kZWFzc2VydCgmaW5pdF9kZWFzc2VydGVkKTsKIAogCS8qCiAJICogKFRoaXMgd29ya3MgZXZlbiBpZiB0aGUgQVBJQyBpcyBub3QgZW5hYmxlZC4pCkBAIC0yNDMsNyArMjQyLDggQEAKIAkgKi8KIAogCXByX2RlYnVnKCJDQUxMSU4sIGJlZm9yZSBzZXR1cF9sb2NhbF9BUElDKCkuXG4iKTsKLQlzbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMoKTsKKwlpZiAoYXBpYy0+c21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKQorCQlhcGljLT5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMoKTsKIAlzZXR1cF9sb2NhbF9BUElDKCk7CiAJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAltYXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKCk7CkBAIC01ODMsNyArNTgzLDcgQEAKIAkvKiBUYXJnZXQgY2hpcCAqLwogCS8qIEJvb3Qgb24gdGhlIHN0YWNrICovCiAJLyogS2ljayB0aGUgc2Vjb25kICovCi0JYXBpY19pY3Jfd3JpdGUoQVBJQ19ETV9OTUkgfCBBUElDX0RFU1RfTE9HSUNBTCwgbG9naWNhbF9hcGljaWQpOworCWFwaWNfaWNyX3dyaXRlKEFQSUNfRE1fTk1JIHwgYXBpYy0+ZGVzdF9sb2dpY2FsLCBsb2dpY2FsX2FwaWNpZCk7CiAKIAlwcl9kZWJ1ZygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOwogCXNlbmRfc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKQEAgLTYxNCwxMiArNjE0LDYgQEAKIAl1bnNpZ25lZCBsb25nIHNlbmRfc3RhdHVzLCBhY2NlcHRfc3RhdHVzID0gMDsKIAlpbnQgbWF4bHZ0LCBudW1fc3RhcnRzLCBqOwogCi0JaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpID09IFVWX05PTl9VTklRVUVfQVBJQykgewotCQlzZW5kX3N0YXR1cyA9IHV2X3dha2V1cF9zZWNvbmRhcnkocGh5c19hcGljaWQsIHN0YXJ0X2VpcCk7Ci0JCWF0b21pY19zZXQoJmluaXRfZGVhc3NlcnRlZCwgMSk7Ci0JCXJldHVybiBzZW5kX3N0YXR1czsKLQl9Ci0KIAltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CiAKIAkvKgpAQCAtNzQ1LDc4ICs3MzksMjMgQEAKIAljb21wbGV0ZSgmY19pZGxlLT5kb25lKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQotLyogX19yZWYgYmVjYXVzZSBpdCdzIHNhZmUgdG8gY2FsbCBmcmVlX2Jvb3RtZW0gd2hlbiBhZnRlcl9ib290bWVtID09IDAuICovCi1zdGF0aWMgdm9pZCBfX3JlZiBmcmVlX2Jvb3RtZW1fcGRhKHN0cnVjdCB4ODY2NF9wZGEgKm9sZHBkYSkKLXsKLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZylvbGRwZGEsIHNpemVvZigqb2xkcGRhKSk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBub2RlIGxvY2FsIG1lbW9yeSBmb3IgdGhlIEFQIHBkYS4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgX2NwdV9wZGEgcG9pbnRlciB0YWJsZSBpcyBpbml0aWFsaXplZC4KLSAqLwotaW50IF9fY3B1aW5pdCBnZXRfbG9jYWxfcGRhKGludCBjcHUpCi17Ci0Jc3RydWN0IHg4NjY0X3BkYSAqb2xkcGRhLCAqbmV3cGRhOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeDg2NjRfcGRhKTsKLQlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0KLQlpZiAoY3B1X3BkYShjcHUpICYmICFjcHVfcGRhKGNwdSktPmluX2Jvb3RtZW0pCi0JCXJldHVybiAwOwotCi0Jb2xkcGRhID0gY3B1X3BkYShjcHUpOwotCW5ld3BkYSA9IGttYWxsb2Nfbm9kZShzaXplLCBHRlBfQVRPTUlDLCBub2RlKTsKLQlpZiAoIW5ld3BkYSkgewotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBhbGxvY2F0ZSBub2RlIGxvY2FsIFBEQSAiCi0JCQkiZm9yIENQVSAlZCBvbiBub2RlICVkXG4iLCBjcHUsIG5vZGUpOwotCi0JCWlmIChvbGRwZGEpCi0JCQlyZXR1cm4gMDsJLyogaGF2ZSBhIHVzYWJsZSBwZGEgKi8KLQkJZWxzZQotCQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChvbGRwZGEpIHsKLQkJbWVtY3B5KG5ld3BkYSwgb2xkcGRhLCBzaXplKTsKLQkJZnJlZV9ib290bWVtX3BkYShvbGRwZGEpOwotCX0KLQotCW5ld3BkYS0+aW5fYm9vdG1lbSA9IDA7Ci0JY3B1X3BkYShjcHUpID0gbmV3cGRhOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQotc3RhdGljIGludCBfX2NwdWluaXQgZG9fYm9vdF9jcHUoaW50IGFwaWNpZCwgaW50IGNwdSkKIC8qCiAgKiBOT1RFIC0gb24gbW9zdCBzeXN0ZW1zIHRoaXMgaXMgYSBQSFlTSUNBTCBhcGljIElELCBidXQgb24gbXVsdGlxdWFkCiAgKiAoaWUgY2x1c3RlcmVkIGFwaWMgYWRkcmVzc2luZyBtb2RlKSwgdGhpcyBpcyBhIExPR0lDQUwgYXBpYyBJRC4KLSAqIFJldHVybnMgemVybyBpZiBDUFUgYm9vdGVkIE9LLCBlbHNlIGVycm9yIGNvZGUgZnJvbSB3YWtldXBfc2Vjb25kYXJ5X2NwdS4KKyAqIFJldHVybnMgemVybyBpZiBDUFUgYm9vdGVkIE9LLCBlbHNlIGVycm9yIGNvZGUgZnJvbQorICogLT53YWtldXBfc2Vjb25kYXJ5X2NwdS4KICAqLworc3RhdGljIGludCBfX2NwdWluaXQgZG9fYm9vdF9jcHUoaW50IGFwaWNpZCwgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGJvb3RfZXJyb3IgPSAwOwotCWludCB0aW1lb3V0OwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfaXA7Ci0JdW5zaWduZWQgc2hvcnQgbm1pX2hpZ2ggPSAwLCBubWlfbG93ID0gMDsKKwlpbnQgdGltZW91dDsKIAlzdHJ1Y3QgY3JlYXRlX2lkbGUgY19pZGxlID0gewotCQkuY3B1ID0gY3B1LAotCQkuZG9uZSA9IENPTVBMRVRJT05fSU5JVElBTElaRVJfT05TVEFDSyhjX2lkbGUuZG9uZSksCisJCS5jcHUJPSBjcHUsCisJCS5kb25lCT0gQ09NUExFVElPTl9JTklUSUFMSVpFUl9PTlNUQUNLKGNfaWRsZS5kb25lKSwKIAl9OwotCUlOSVRfV09SSygmY19pZGxlLndvcmssIGRvX2ZvcmtfaWRsZSk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIEFQIHBkYXMgKi8KLQlpZiAoY3B1ID4gMCkgewotCQlib290X2Vycm9yID0gZ2V0X2xvY2FsX3BkYShjcHUpOwotCQlpZiAoYm9vdF9lcnJvcikKLQkJCWdvdG8gcmVzdG9yZV9zdGF0ZTsKLQkJCS8qIGlmIGNhbid0IGdldCBwZGEgbWVtb3J5LCBjYW4ndCBzdGFydCBjcHUgKi8KLQl9Ci0jZW5kaWYKKwlJTklUX1dPUksoJmNfaWRsZS53b3JrLCBkb19mb3JrX2lkbGUpOwogCiAJYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goMSk7CiAKQEAgLTg0NywxNCArNzg2LDE2IEBACiAKIAlzZXRfaWRsZV9mb3JfY3B1KGNwdSwgY19pZGxlLmlkbGUpOwogZG9fcmVzdDoKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJcGVyX2NwdShjdXJyZW50X3Rhc2ssIGNwdSkgPSBjX2lkbGUuaWRsZTsKLQlpbml0X2dkdChjcHUpOworI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBTdGFjayBmb3Igc3RhcnR1cF8zMiBjYW4gYmUganVzdCBhcyBmb3Igc3RhcnRfc2Vjb25kYXJ5IG9ud2FyZHMgKi8KIAlpcnFfY3R4X2luaXQoY3B1KTsKICNlbHNlCi0JY3B1X3BkYShjcHUpLT5wY3VycmVudCA9IGNfaWRsZS5pZGxlOwogCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjX2lkbGUuaWRsZSwgVElGX0ZPUkspOworCWluaXRpYWxfZ3MgPSBwZXJfY3B1X29mZnNldChjcHUpOworCXBlcl9jcHUoa2VybmVsX3N0YWNrLCBjcHUpID0KKwkJKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKGNfaWRsZS5pZGxlKSAtCisJCUtFUk5FTF9TVEFDS19PRkZTRVQgKyBUSFJFQURfU0laRTsKICNlbmRpZgogCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKIAlpbml0aWFsX2NvZGUgPSAodW5zaWduZWQgbG9uZylzdGFydF9zZWNvbmRhcnk7CkBAIC04NzgsOCArODE5LDYgQEAKIAogCQlwcl9kZWJ1ZygiU2V0dGluZyB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3Rvci5cbiIpOwogCi0JCXN0b3JlX05NSV92ZWN0b3IoJm5taV9oaWdoLCAmbm1pX2xvdyk7Ci0KIAkJc21wYm9vdF9zZXR1cF93YXJtX3Jlc2V0X3ZlY3RvcihzdGFydF9pcCk7CiAJCS8qCiAJCSAqIEJlIHBhcmFub2lkIGFib3V0IGNsZWFyaW5nIEFQSUMgZXJyb3JzLgpAQCAtODkxLDkgKzgzMCwxMyBAQAogCX0KIAogCS8qCi0JICogU3RhcnRpbmcgYWN0dWFsIElQSSBzZXF1ZW5jZS4uLgorCSAqIEtpY2sgdGhlIHNlY29uZGFyeSBDUFUuIFVzZSB0aGUgbWV0aG9kIGluIHRoZSBBUElDIGRyaXZlcgorCSAqIGlmIGl0J3MgZGVmaW5lZCAtIG9yIHVzZSBhbiBJTklUIGJvb3QgQVBJQyBtZXNzYWdlIG90aGVyd2lzZToKIAkgKi8KLQlib290X2Vycm9yID0gd2FrZXVwX3NlY29uZGFyeV9jcHUoYXBpY2lkLCBzdGFydF9pcCk7CisJaWYgKGFwaWMtPndha2V1cF9zZWNvbmRhcnlfY3B1KQorCQlib290X2Vycm9yID0gYXBpYy0+d2FrZXVwX3NlY29uZGFyeV9jcHUoYXBpY2lkLCBzdGFydF9pcCk7CisJZWxzZQorCQlib290X2Vycm9yID0gd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX2luaXQoYXBpY2lkLCBzdGFydF9pcCk7CiAKIAlpZiAoIWJvb3RfZXJyb3IpIHsKIAkJLyoKQEAgLTkyNywxMyArODcwLDExIEBACiAJCQllbHNlCiAJCQkJLyogdHJhbXBvbGluZSBjb2RlIG5vdCBydW4gKi8KIAkJCQlwcmludGsoS0VSTl9FUlIgIk5vdCByZXNwb25kaW5nLlxuIik7Ci0JCQlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgIT0gVVZfTk9OX1VOSVFVRV9BUElDKQotCQkJCWlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKKwkJCWlmIChhcGljLT5pbnF1aXJlX3JlbW90ZV9hcGljKQorCQkJCWFwaWMtPmlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKIAkJfQogCX0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1yZXN0b3JlX3N0YXRlOgotI2VuZGlmCisKIAlpZiAoYm9vdF9lcnJvcikgewogCQkvKiBUcnkgdG8gcHV0IHRoaW5ncyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlIGJlZm9yZSAuLi4gKi8KIAkJbnVtYV9yZW1vdmVfY3B1KGNwdSk7IC8qIHdhcyBzZXQgYnkgbnVtYV9hZGRfY3B1ICovCkBAIC05NjEsNyArOTAyLDcgQEAKIAogaW50IF9fY3B1aW5pdCBuYXRpdmVfY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JaW50IGFwaWNpZCA9IGNwdV9wcmVzZW50X3RvX2FwaWNpZChjcHUpOworCWludCBhcGljaWQgPSBhcGljLT5jcHVfcHJlc2VudF90b19hcGljaWQoY3B1KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKQEAgLTEwNTQsMTQgKzk5NSwxNCBAQAogewogCXByZWVtcHRfZGlzYWJsZSgpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X1BDKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCisjaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9CSUdTTVApICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKIAlpZiAoZGVmX3RvX2JpZ3NtcCAmJiBucl9jcHVfaWRzID4gOCkgewogCQl1bnNpZ25lZCBpbnQgY3B1OwogCQl1bnNpZ25lZCBucjsKIAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiTW9yZSB0aGFuIDggQ1BVcyBkZXRlY3RlZCAtIHNraXBwaW5nIHRoZW0uXG4iCi0JCSAgICAgICAiVXNlIENPTkZJR19YODZfR0VORVJJQ0FSQ0ggYW5kIENPTkZJR19YODZfQklHU01QLlxuIik7CisJCSAgICAgICAiVXNlIENPTkZJR19YODZfQklHU01QLlxuIik7CiAKIAkJbnIgPSAwOwogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKQEAgLTExMDcsNyArMTA0OCw3IEBACiAJICogU2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgTVAgdGFibGUgc2hvdWxkIGxpc3QgdGhlIGJvb3QKIAkgKiBDUFUgdG9vLCBidXQgd2UgZG8gaXQgZm9yIHRoZSBzYWtlIG9mIHJvYnVzdG5lc3MgYW55d2F5LgogCSAqLwotCWlmICghY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChib290X2NwdV9waHlzaWNhbF9hcGljaWQpKSB7CisJaWYgKCFhcGljLT5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkid2VpcmQsIGJvb3QgQ1BVICgjJWQpIG5vdCBsaXN0ZWQgYnkgdGhlIEJJT1MuXG4iLAogCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKQEAgLTExMjUsNiArMTA2Niw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZvcmNpbmcgdXNlIG9mIGR1bW15IEFQSUMgZW11bGF0aW9uLiIKIAkJCQkiKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKIAkJc21wYm9vdF9jbGVhcl9pb19hcGljKCk7CisJCWFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCgpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTgxLDkgKzExMjMsOSBAQAogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gMDsgIC8qIG5lZWRlZD8gKi8KIAlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWVuYWJsZV9JUl94MmFwaWMoKTsKLQlzZXR1cF9hcGljX3JvdXRpbmcoKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcoKTsKICNlbmRpZgogCiAJaWYgKHNtcF9zYW5pdHlfY2hlY2sobWF4X2NwdXMpIDwgMCkgewpAQCAtMTIwNywxOCArMTE0OSwxOCBAQAogCSAqLwogCXNldHVwX2xvY2FsX0FQSUMoKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKgogCSAqIEVuYWJsZSBJTyBBUElDIGJlZm9yZSBzZXR0aW5nIHVwIGVycm9yIHZlY3RvcgogCSAqLwogCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKIAkJZW5hYmxlX0lPX0FQSUMoKTsKLSNlbmRpZgorCiAJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAogCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKIAotCXNldHVwX3BvcnRpb19yZW1hcCgpOworCWlmIChhcGljLT5zZXR1cF9wb3J0aW9fcmVtYXApCisJCWFwaWMtPnNldHVwX3BvcnRpb19yZW1hcCgpOwogCiAJc21wYm9vdF9zZXR1cF9pb19hcGljKCk7CiAJLyoKQEAgLTEyNDAsMTAgKzExODIsNyBAQAogdm9pZCBfX2luaXQgbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7CiAJaW50IG1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpbml0X2dkdChtZSk7Ci0jZW5kaWYKLQlzd2l0Y2hfdG9fbmV3X2dkdCgpOworCXN3aXRjaF90b19uZXdfZ2R0KG1lKTsKIAkvKiBhbHJlYWR5IHNldCBtZSBpbiBjcHVfb25saW5lX21hc2sgaW4gYm9vdF9jcHVfaW5pdCgpICovCiAJY3B1bWFza19zZXRfY3B1KG1lLCBjcHVfY2FsbG91dF9tYXNrKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgbWUpID0gQ1BVX09OTElORTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBjb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBjb21tb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3ZTMwOS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogU01QIHN0dWZmIHdoaWNoIGlzIGNvbW1vbiB0byBhbGwgc3ViLWFyY2hpdGVjdHVyZXMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHRoaXNfY3B1X29mZik7Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBDUFUncyBHRFQuICBUaGlzIGlzIGVpdGhlciB0aGUgYm9vdCBDUFUgZG9pbmcgaXRzZWxmCi0gKiAoc3RpbGwgdXNpbmcgdGhlIG1hc3RlciBwZXItY3B1IGFyZWEpLCBvciBhIENQVSBkb2luZyBpdCBmb3IgYQotICogc2Vjb25kYXJ5IHdoaWNoIHdpbGwgc29vbiBjb21lIHVwLgotICovCi1fX2NwdWluaXQgdm9pZCBpbml0X2dkdChpbnQgY3B1KQotewotCXN0cnVjdCBkZXNjX3N0cnVjdCBnZHQ7Ci0KLQlwYWNrX2Rlc2NyaXB0b3IoJmdkdCwgX19wZXJfY3B1X29mZnNldFtjcHVdLCAweEZGRkZGLAotCQkJMHgyIHwgREVTQ1RZUEVfUywgMHg4KTsKLQlnZHQucyA9IDE7Ci0KLQl3cml0ZV9nZHRfZW50cnkoZ2V0X2NwdV9nZHRfdGFibGUoY3B1KSwKLQkJCUdEVF9FTlRSWV9QRVJDUFUsICZnZHQsIERFU0NUWVBFX1MpOwotCi0JcGVyX2NwdSh0aGlzX2NwdV9vZmYsIGNwdSkgPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV07Ci0JcGVyX2NwdShjcHVfbnVtYmVyLCBjcHUpID0gY3B1OwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCAxMDc4NmFmLi5mN2JkZGMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3RhY2sgdHJhY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3VtbWl0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3VtbWl0XzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOTg3ODUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3N1bW1pdF8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKiBJQk0gU3VtbWl0LVNwZWNpZmljIENvZGUKLSAqCi0gKiBXcml0dGVuIEJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3JwLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKLSAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKLSAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKiBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogU2VuZCBmZWVkYmFjayB0byA8Y29scGF0Y2hAdXMuaWJtLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KLSNpbmNsdWRlIDxhc20vc3VtbWl0L21wcGFyc2UuaD4KLQotc3RhdGljIHN0cnVjdCByaW9fdGFibGVfaGRyICpyaW9fdGFibGVfaGRyIF9faW5pdGRhdGE7Ci1zdGF0aWMgc3RydWN0IHNjYWxfZGV0YWlsICAgKnNjYWxfZGV2c1tNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7Ci1zdGF0aWMgc3RydWN0IHJpb19kZXRhaWwgICAgKnJpb19kZXZzW01BWF9OVU1OT0RFUyo0XSBfX2luaXRkYXRhOwotCi0jaWZuZGVmIENPTkZJR19YODZfTlVNQVEKLXN0YXRpYyBpbnQgbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU10gX19pbml0ZGF0YTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9wY2lfbm9kZV9tYXBfZm9yX3dwZWcoaW50IHdwZWdfbnVtLCBpbnQgbGFzdF9idXMpCi17Ci0JaW50IHR3aXN0ZXIgPSAwLCBub2RlID0gMDsKLQlpbnQgaSwgYnVzLCBudW1fYnVzZXM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKykgewotCQlpZiAocmlvX2RldnNbaV0tPm5vZGVfaWQgPT0gcmlvX2RldnNbd3BlZ19udW1dLT5vd25lcl9pZCkgewotCQkJdHdpc3RlciA9IHJpb19kZXZzW2ldLT5vd25lcl9pZDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpID09IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkbid0IGZpbmQgb3duZXIgQ3ljbG9uZSBmb3IgV2lubmlwZWchXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBsYXN0X2J1czsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2OyBpKyspIHsKLQkJaWYgKHNjYWxfZGV2c1tpXS0+bm9kZV9pZCA9PSB0d2lzdGVyKSB7Ci0JCQlub2RlID0gc2NhbF9kZXZzW2ldLT5ub2RlX2lkOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkbid0IGZpbmQgb3duZXIgVHdpc3RlciBmb3IgQ3ljbG9uZSFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIGxhc3RfYnVzOwotCX0KLQotCXN3aXRjaCAocmlvX2RldnNbd3BlZ19udW1dLT50eXBlKSB7Ci0JY2FzZSBDb21wYXRXUEVHOgotCQkvKgotCQkgKiBUaGUgQ29tcGF0aWJpbGl0eSBXaW5uaXBlZyBjb250cm9scyB0aGUgMiBsZWdhY3kgYnVzZXMsCi0JCSAqIHRoZSA2Nk1IeiBQQ0kgYnVzIFsyIHNsb3RzXSBhbmQgdGhlIDIgImV4dHJhIiBidXNlcyBpbiBjYXNlCi0JCSAqIGEgUENJLVBDSSBicmlkZ2UgY2FyZCBpcyB1c2VkIGluIGVpdGhlciBzbG90OiB0b3RhbCA1IGJ1c2VzLgotCQkgKi8KLQkJbnVtX2J1c2VzID0gNTsKLQkJYnJlYWs7Ci0JY2FzZSBBbHRXUEVHOgotCQkvKgotCQkgKiBUaGUgQWx0ZXJuYXRlIFdpbm5pcGVnIGNvbnRyb2xzIHRoZSAyIDEzM01IeiBidXNlcyBbMSBzbG90Ci0JCSAqIGVhY2hdLCB0aGVpciAyICJleHRyYSIgYnVzZXMsIHRoZSAxMDBNSHogYnVzIFsyIHNsb3RzXSBhbmQKLQkJICogdGhlICJleHRyYSIgYnVzZXMgZm9yIGVhY2ggb2YgdGhvc2Ugc2xvdHM6IHRvdGFsIDcgYnVzZXMuCi0JCSAqLwotCQludW1fYnVzZXMgPSA3OwotCQlicmVhazsKLQljYXNlIExvb2tPdXRBV1BFRzoKLQljYXNlIExvb2tPdXRCV1BFRzoKLQkJLyoKLQkJICogQSBMb29rb3V0IFdpbm5pcGVnIGNvbnRyb2xzIDMgMTAwTUh6IGJ1c2VzIFsyIHNsb3RzIGVhY2hdCi0JCSAqICYgdGhlICJleHRyYSIgYnVzZXMgZm9yIGVhY2ggb2YgdGhvc2Ugc2xvdHM6IHRvdGFsIDkgYnVzZXMuCi0JCSAqLwotCQludW1fYnVzZXMgPSA5OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5zdXBwb3J0ZWQgV2lubmlwZWcgdHlwZSFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIGxhc3RfYnVzOwotCX0KLQotCWZvciAoYnVzID0gbGFzdF9idXM7IGJ1cyA8IGxhc3RfYnVzICsgbnVtX2J1c2VzOyBidXMrKykKLQkJbXBfYnVzX2lkX3RvX25vZGVbYnVzXSA9IG5vZGU7Ci0JcmV0dXJuIGJ1czsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYnVpbGRfZGV0YWlsX2FycmF5cyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcHRyOwotCWludCBpLCBzY2FsX2RldGFpbF9zaXplLCByaW9fZGV0YWlsX3NpemU7Ci0KLQlpZiAocmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2ID4gTUFYX05VTU5PREVTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNQVhfTlVNTk9ERVMgdG9vIGxvdyEgIERlZmluZWQgYXMgJWQsIGJ1dCBzeXN0ZW0gaGFzICVkIG5vZGVzLlxuIiwgX19mdW5jX18sIE1BWF9OVU1OT0RFUywgcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChyaW9fdGFibGVfaGRyLT52ZXJzaW9uKSB7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgUmlvIEdyYW5kZSBUYWJsZSBWZXJzaW9uOiAlZFxuIiwgX19mdW5jX18sIHJpb190YWJsZV9oZHItPnZlcnNpb24pOwotCQlyZXR1cm4gMDsKLQljYXNlIDI6Ci0JCXNjYWxfZGV0YWlsX3NpemUgPSAxMTsKLQkJcmlvX2RldGFpbF9zaXplID0gMTM7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJc2NhbF9kZXRhaWxfc2l6ZSA9IDEyOwotCQlyaW9fZGV0YWlsX3NpemUgPSAxNTsKLQkJYnJlYWs7Ci0JfQotCi0JcHRyID0gKHVuc2lnbmVkIGxvbmcpcmlvX3RhYmxlX2hkciArIDM7Ci0JZm9yIChpID0gMDsgaSA8IHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldjsgaSsrLCBwdHIgKz0gc2NhbF9kZXRhaWxfc2l6ZSkKLQkJc2NhbF9kZXZzW2ldID0gKHN0cnVjdCBzY2FsX2RldGFpbCAqKXB0cjsKLQotCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrLCBwdHIgKz0gcmlvX2RldGFpbF9zaXplKQotCQlyaW9fZGV2c1tpXSA9IChzdHJ1Y3QgcmlvX2RldGFpbCAqKXB0cjsKLQotCXJldHVybiAxOwotfQotCi12b2lkIF9faW5pdCBzZXR1cF9zdW1taXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nCQlwdHI7Ci0JdW5zaWduZWQgc2hvcnQJCW9mZnNldDsKLQlpbnQJCQlpLCBuZXh0X3dwZWcsIG5leHRfYnVzID0gMDsKLQotCS8qIFRoZSBwb2ludGVyIHRvIHRoZSBFQkRBIGlzIHN0b3JlZCBpbiB0aGUgd29yZCBAIHBoeXMgMHg0MEUoNDA6MEUpICovCi0JcHRyID0gZ2V0X2Jpb3NfZWJkYSgpOwotCXB0ciA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChwdHIpOwotCi0JcmlvX3RhYmxlX2hkciA9IE5VTEw7Ci0Jb2Zmc2V0ID0gMHgxODA7Ci0Jd2hpbGUgKG9mZnNldCkgewotCQkvKiBUaGUgYmxvY2sgaWQgaXMgc3RvcmVkIGluIHRoZSAybmQgd29yZCAqLwotCQlpZiAoKigodW5zaWduZWQgc2hvcnQgKikocHRyICsgb2Zmc2V0ICsgMikpID09IDB4NDc1MikgewotCQkJLyogc2V0IHRoZSBwb2ludGVyIHBhc3QgdGhlIG9mZnNldCAmIGJsb2NrIGlkICovCi0JCQlyaW9fdGFibGVfaGRyID0gKHN0cnVjdCByaW9fdGFibGVfaGRyICopKHB0ciArIG9mZnNldCArIDQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogVGhlIG5leHQgb2Zmc2V0IGlzIHN0b3JlZCBpbiB0aGUgMXN0IHdvcmQuICAwIG1lYW5zIG5vIG1vcmUgKi8KLQkJb2Zmc2V0ID0gKigodW5zaWduZWQgc2hvcnQgKikocHRyICsgb2Zmc2V0KSk7Ci0JfQotCWlmICghcmlvX3RhYmxlX2hkcikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbG9jYXRlIFJpbyBHcmFuZGUgVGFibGUgaW4gRUJEQSAtIGJhaWxpbmchXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIWJ1aWxkX2RldGFpbF9hcnJheXMoKSkKLQkJcmV0dXJuOwotCi0JLyogVGhlIGZpcnN0IFdpbm5pcGVnIHdlJ3JlIGxvb2tpbmcgZm9yIGhhcyBhbiBpbmRleCBvZiAwICovCi0JbmV4dF93cGVnID0gMDsKLQlkbyB7Ci0JCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrKSB7Ci0JCQlpZiAoaXNfV1BFRyhyaW9fZGV2c1tpXSkgJiYgcmlvX2RldnNbaV0tPldQX2luZGV4ID09IG5leHRfd3BlZykgewotCQkJCS8qIEl0J3MgdGhlIFdpbm5pcGVnIHdlJ3JlIGxvb2tpbmcgZm9yISAqLwotCQkJCW5leHRfYnVzID0gc2V0dXBfcGNpX25vZGVfbWFwX2Zvcl93cGVnKGksIG5leHRfYnVzKTsKLQkJCQluZXh0X3dwZWcrKzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiBJZiB3ZSBnbyB0aHJvdWdoIGFsbCBSaW8gZGV2aWNlcyBhbmQgZG9uJ3QgZmluZCBvbmUgd2l0aAotCQkgKiB0aGUgbmV4dCBpbmRleCwgaXQgbWVhbnMgd2UndmUgZm91bmQgYWxsIHRoZSBXaW5uaXBlZ3MsCi0JCSAqIGFuZCB0aHVzIGFsbCB0aGUgUENJIGJ1c2VzLgotCQkgKi8KLQkJaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXYpCi0JCQluZXh0X3dwZWcgPSAwOwotCX0gd2hpbGUgKG5leHRfd3BlZyAhPSAwKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCmluZGV4IGUyZTg2YTAuLjNiZGI2NDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwpAQCAtMSw3ICsxLDcgQEAKIEVOVFJZKHN5c19jYWxsX3RhYmxlKQogCS5sb25nIHN5c19yZXN0YXJ0X3N5c2NhbGwJLyogMCAtIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwsIHVzZWQgZm9yIHJlc3RhcnRpbmcgKi8KIAkubG9uZyBzeXNfZXhpdAotCS5sb25nIHN5c19mb3JrCisJLmxvbmcgcHRyZWdzX2ZvcmsKIAkubG9uZyBzeXNfcmVhZAogCS5sb25nIHN5c193cml0ZQogCS5sb25nIHN5c19vcGVuCQkvKiA1ICovCkBAIC0xMCw3ICsxMCw3IEBACiAJLmxvbmcgc3lzX2NyZWF0CiAJLmxvbmcgc3lzX2xpbmsKIAkubG9uZyBzeXNfdW5saW5rCS8qIDEwICovCi0JLmxvbmcgc3lzX2V4ZWN2ZQorCS5sb25nIHB0cmVnc19leGVjdmUKIAkubG9uZyBzeXNfY2hkaXIKIAkubG9uZyBzeXNfdGltZQogCS5sb25nIHN5c19ta25vZApAQCAtMTA5LDE3ICsxMDksMTcgQEAKIAkubG9uZyBzeXNfbmV3bHN0YXQKIAkubG9uZyBzeXNfbmV3ZnN0YXQKIAkubG9uZyBzeXNfdW5hbWUKLQkubG9uZyBzeXNfaW9wbAkJLyogMTEwICovCisJLmxvbmcgcHRyZWdzX2lvcGwJLyogMTEwICovCiAJLmxvbmcgc3lzX3ZoYW5ndXAKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgImlkbGUiIHN5c3RlbSBjYWxsICovCi0JLmxvbmcgc3lzX3ZtODZvbGQKKwkubG9uZyBwdHJlZ3Nfdm04Nm9sZAogCS5sb25nIHN5c193YWl0NAogCS5sb25nIHN5c19zd2Fwb2ZmCS8qIDExNSAqLwogCS5sb25nIHN5c19zeXNpbmZvCiAJLmxvbmcgc3lzX2lwYwogCS5sb25nIHN5c19mc3luYwotCS5sb25nIHN5c19zaWdyZXR1cm4KLQkubG9uZyBzeXNfY2xvbmUJCS8qIDEyMCAqLworCS5sb25nIHB0cmVnc19zaWdyZXR1cm4KKwkubG9uZyBwdHJlZ3NfY2xvbmUJLyogMTIwICovCiAJLmxvbmcgc3lzX3NldGRvbWFpbm5hbWUKIAkubG9uZyBzeXNfbmV3dW5hbWUKIAkubG9uZyBzeXNfbW9kaWZ5X2xkdApAQCAtMTY1LDE0ICsxNjUsMTQgQEAKIAkubG9uZyBzeXNfbXJlbWFwCiAJLmxvbmcgc3lzX3NldHJlc3VpZDE2CiAJLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLwotCS5sb25nIHN5c192bTg2CisJLmxvbmcgcHRyZWdzX3ZtODYKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBPbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLwogCS5sb25nIHN5c19wb2xsCiAJLmxvbmcgc3lzX25mc3NlcnZjdGwKIAkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCiAJLmxvbmcgc3lzX2dldHJlc2dpZDE2CiAJLmxvbmcgc3lzX3ByY3RsCi0JLmxvbmcgc3lzX3J0X3NpZ3JldHVybgorCS5sb25nIHB0cmVnc19ydF9zaWdyZXR1cm4KIAkubG9uZyBzeXNfcnRfc2lnYWN0aW9uCiAJLmxvbmcgc3lzX3J0X3NpZ3Byb2NtYXNrCS8qIDE3NSAqLwogCS5sb25nIHN5c19ydF9zaWdwZW5kaW5nCkBAIC0xODUsMTEgKzE4NSwxMSBAQAogCS5sb25nIHN5c19nZXRjd2QKIAkubG9uZyBzeXNfY2FwZ2V0CiAJLmxvbmcgc3lzX2NhcHNldAkvKiAxODUgKi8KLQkubG9uZyBzeXNfc2lnYWx0c3RhY2sKKwkubG9uZyBwdHJlZ3Nfc2lnYWx0c3RhY2sKIAkubG9uZyBzeXNfc2VuZGZpbGUKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3Igc3RyZWFtczEgKi8KIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3Igc3RyZWFtczIgKi8KLQkubG9uZyBzeXNfdmZvcmsJCS8qIDE5MCAqLworCS5sb25nIHB0cmVnc192Zm9yawkvKiAxOTAgKi8KIAkubG9uZyBzeXNfZ2V0cmxpbWl0CiAJLmxvbmcgc3lzX21tYXAyCiAJLmxvbmcgc3lzX3RydW5jYXRlNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDM5ODVjYWMuLjVjNWQ4N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWVfMzIuYwpAQCAtMzMsMTIgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21jYS5oPgogCi0jaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKLSNpbmNsdWRlICJkb190aW1lci5oIgorI2luY2x1ZGUgPGFzbS9kb190aW1lci5oPgogCiBpbnQgdGltZXJfYWNrOwogCkBAIC0xMTgsNyArMTE4LDcgQEAKIHsKIAlpZiAoIWhwZXRfZW5hYmxlKCkpCiAJCXNldHVwX3BpdF90aW1lcigpOwotCXRpbWVfaW5pdF9ob29rKCk7CisJeDg2X3F1aXJrX3RpbWVfaW5pdCgpOwogfQogCiAvKgpAQCAtMTMxLDcgKzEzMSw3IEBACiAgKi8KIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewotCXByZV90aW1lX2luaXRfaG9vaygpOworCXg4Nl9xdWlya19wcmVfdGltZV9pbml0KCk7CiAJdHNjX2luaXQoKTsKIAlsYXRlX3RpbWVfaW5pdCA9IGNob29zZV90aW1lX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1MDU0Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiXzMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLQotREVGSU5FX1BFUl9DUFUoc3RydWN0IHRsYl9zdGF0ZSwgY3B1X3RsYnN0YXRlKQotCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkID0geyAmaW5pdF9tbSwgMCwgfTsKLQotLyogbXVzdCBjb21lIGFmdGVyIHRoZSBzZW5kX0lQSSBmdW5jdGlvbnMgYWJvdmUgZm9yIGlubGluaW5nICovCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLQotLyoKLSAqCVNtYXJ0ZXIgU01QIGZsdXNoaW5nIG1hY3Jvcy4KLSAqCQljL28gTGludXMgVG9ydmFsZHMuCi0gKgotICoJVGhlc2UgbWVhbiB5b3UgY2FuIHJlYWxseSBkZWZpbml0ZWx5IHV0dGVybHkgZm9yZ2V0IGFib3V0Ci0gKgl3cml0aW5nIHRvIHVzZXIgc3BhY2UgZnJvbSBpbnRlcnJ1cHRzLiAoSXRzIG5vdCBhbGxvd2VkIGFueXdheSkuCi0gKgotICoJT3B0aW1pemF0aW9ucyBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgotICovCi0KLXN0YXRpYyBjcHVtYXNrX3QgZmx1c2hfY3B1bWFzazsKLXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpmbHVzaF9tbTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0bGJzdGF0ZV9sb2NrKTsKLQotLyoKLSAqIFdlIGNhbm5vdCBjYWxsIG1tZHJvcCgpIGJlY2F1c2Ugd2UgYXJlIGluIGludGVycnVwdCBjb250ZXh0LAotICogaW5zdGVhZCB1cGRhdGUgbW0tPmNwdV92bV9tYXNrLgotICoKLSAqIFdlIG5lZWQgdG8gcmVsb2FkICVjcjMgc2luY2UgdGhlIHBhZ2UgdGFibGVzIG1heSBiZSBnb2luZwotICogYXdheSBmcm9tIHVuZGVyIHVzLi4KLSAqLwotdm9pZCBsZWF2ZV9tbShpbnQgY3B1KQotewotCUJVR19PTih4ODZfcmVhZF9wZXJjcHUoY3B1X3RsYnN0YXRlLnN0YXRlKSA9PSBUTEJTVEFURV9PSyk7Ci0JY3B1X2NsZWFyKGNwdSwgeDg2X3JlYWRfcGVyY3B1KGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0pLT5jcHVfdm1fbWFzayk7Ci0JbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobGVhdmVfbW0pOwotCi0vKgotICoKLSAqIFRoZSBmbHVzaCBJUEkgYXNzdW1lcyB0aGF0IGEgdGhyZWFkIHN3aXRjaCBoYXBwZW5zIGluIHRoaXMgb3JkZXI6Ci0gKiBbY3B1MDogdGhlIGNwdSB0aGF0IHN3aXRjaGVzXQotICogMSkgc3dpdGNoX21tKCkgZWl0aGVyIDFhKSBvciAxYikKLSAqIDFhKSB0aHJlYWQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IG1tCi0gKiAxYTEpIGNwdV9jbGVhcihjcHUsIG9sZF9tbS0+Y3B1X3ZtX21hc2spOwotICogCVN0b3AgaXBpIGRlbGl2ZXJ5IGZvciB0aGUgb2xkIG1tLiBUaGlzIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAotICogCXRoZSBvdGhlciBjcHVzLCBidXQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IGlnbm9yZSBmbHVzaCBpcGlzCi0gKiAJZm9yIHRoZSB3cm9uZyBtbSwgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHdlIHBlcmZvcm0gYSBzdXBlcmZsdW91cwotICogCXRsYiBmbHVzaC4KLSAqIDFhMikgc2V0IGNwdV90bGJzdGF0ZSB0byBUTEJTVEFURV9PSwotICogCU5vdyB0aGUgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IHdvbid0IGNhbGwgbGVhdmVfbW0gaWYgY3B1MAotICoJd2FzIGluIGxhenkgdGxiIG1vZGUuCi0gKiAxYTMpIHVwZGF0ZSBjcHVfdGxic3RhdGVbXS5hY3RpdmVfbW0KLSAqIAlOb3cgY3B1MCBhY2NlcHRzIHRsYiBmbHVzaGVzIGZvciB0aGUgbmV3IG1tLgotICogMWE0KSBjcHVfc2V0KGNwdSwgbmV3X21tLT5jcHVfdm1fbWFzayk7Ci0gKiAJTm93IHRoZSBvdGhlciBjcHVzIHdpbGwgc2VuZCB0bGIgZmx1c2ggaXBpcy4KLSAqIDFhNCkgY2hhbmdlIGNyMy4KLSAqIDFiKSB0aHJlYWQgc3dpdGNoIHdpdGhvdXQgbW0gY2hhbmdlCi0gKgljcHVfdGxic3RhdGVbXS5hY3RpdmVfbW0gaXMgY29ycmVjdCwgY3B1MCBhbHJlYWR5IGhhbmRsZXMKLSAqCWZsdXNoIGlwaXMuCi0gKiAxYjEpIHNldCBjcHVfdGxic3RhdGUgdG8gVExCU1RBVEVfT0sKLSAqIDFiMikgdGVzdF9hbmRfc2V0IHRoZSBjcHUgYml0IGluIGNwdV92bV9tYXNrLgotICogCUF0b21pY2FsbHkgc2V0IHRoZSBiaXQgW290aGVyIGNwdXMgd2lsbCBzdGFydCBzZW5kaW5nIGZsdXNoIGlwaXNdLAotICogCWFuZCB0ZXN0IHRoZSBiaXQuCi0gKiAxYjMpIGlmIHRoZSBiaXQgd2FzIDA6IGxlYXZlX21tIHdhcyBjYWxsZWQsIGZsdXNoIHRoZSB0bGIuCi0gKiAyKSBzd2l0Y2ggJSVlc3AsIGllIGN1cnJlbnQKLSAqCi0gKiBUaGUgaW50ZXJydXB0IG11c3QgaGFuZGxlIDIgc3BlY2lhbCBjYXNlczoKLSAqIC0gY3IzIGlzIGNoYW5nZWQgYmVmb3JlICUlZXNwLCBpZS4gaXQgY2Fubm90IHVzZSBjdXJyZW50LT57YWN0aXZlXyx9bW0uCi0gKiAtIHRoZSBjcHUgcGVyZm9ybXMgc3BlY3VsYXRpdmUgdGxiIHJlYWRzLCBpLmUuIGV2ZW4gaWYgdGhlIGNwdSBvbmx5Ci0gKiAgIHJ1bnMgaW4ga2VybmVsIHNwYWNlLCB0aGUgY3B1IGNvdWxkIGxvYWQgdGxiIGVudHJpZXMgZm9yIHVzZXIgc3BhY2UKLSAqICAgcGFnZXMuCi0gKgotICogVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGNwdV90bGJzdGF0ZSBpcyBsb2NhbCB0byBlYWNoIGNwdSwgbm8KLSAqIHdyaXRlL3JlYWQgb3JkZXJpbmcgcHJvYmxlbXMuCi0gKi8KLQotLyoKLSAqIFRMQiBmbHVzaCBJUEk6Ci0gKgotICogMSkgRmx1c2ggdGhlIHRsYiBlbnRyaWVzIGlmIHRoZSBjcHUgdXNlcyB0aGUgbW0gdGhhdCdzIGJlaW5nIGZsdXNoZWQuCi0gKiAyKSBMZWF2ZSB0aGUgbW0gaWYgd2UgYXJlIGluIHRoZSBsYXp5IHRsYiBtb2RlLgotICovCi0KLXZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgY3B1OwotCi0JY3B1ID0gZ2V0X2NwdSgpOwotCi0JaWYgKCFjcHVfaXNzZXQoY3B1LCBmbHVzaF9jcHVtYXNrKSkKLQkJZ290byBvdXQ7Ci0JCS8qCi0JCSAqIFRoaXMgd2FzIGEgQlVHKCkgYnV0IHVudGlsIHNvbWVvbmUgY2FuIHF1b3RlIG1lIHRoZQotCQkgKiBsaW5lIGZyb20gdGhlIGludGVsIG1hbnVhbCB0aGF0IGd1YXJhbnRlZXMgYW4gSVBJIHRvCi0JCSAqIG11bHRpcGxlIENQVXMgaXMgcmV0cmllZCBfb25seV8gb24gdGhlIGVycm9yaW5nIENQVXMKLQkJICogaXRzIHN0YXlpbmcgYXMgYSByZXR1cm4KLQkJICoKLQkJICogQlVHKCk7Ci0JCSAqLwotCi0JaWYgKGZsdXNoX21tID09IHg4Nl9yZWFkX3BlcmNwdShjcHVfdGxic3RhdGUuYWN0aXZlX21tKSkgewotCQlpZiAoeDg2X3JlYWRfcGVyY3B1KGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfT0spIHsKLQkJCWlmIChmbHVzaF92YSA9PSBUTEJfRkxVU0hfQUxMKQotCQkJCWxvY2FsX2ZsdXNoX3RsYigpOwotCQkJZWxzZQotCQkJCV9fZmx1c2hfdGxiX29uZShmbHVzaF92YSk7Ci0JCX0gZWxzZQotCQkJbGVhdmVfbW0oY3B1KTsKLQl9Ci0JYWNrX0FQSUNfaXJxKCk7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JY3B1X2NsZWFyKGNwdSwgZmx1c2hfY3B1bWFzayk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLW91dDoKLQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKLQlpbmNfaXJxX3N0YXQoaXJxX3RsYl9jb3VudCk7Ci19Ci0KLXZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0JY3B1bWFza190IGNwdW1hc2sgPSAqY3B1bWFza3A7Ci0KLQkvKgotCSAqIEEgY291cGxlIG9mICh0byBiZSByZW1vdmVkKSBzYW5pdHkgY2hlY2tzOgotCSAqCi0JICogLSBjdXJyZW50IENQVSBtdXN0IG5vdCBiZSBpbiBtYXNrCi0JICogLSBtYXNrIG11c3QgZXhpc3QgOikKLQkgKi8KLQlCVUdfT04oY3B1c19lbXB0eShjcHVtYXNrKSk7Ci0JQlVHX09OKGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdW1hc2spKTsKLQlCVUdfT04oIW1tKTsKLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCS8qIElmIGEgQ1BVIHdoaWNoIHdlIHJhbiBvbiBoYXMgZ29uZSBkb3duLCBPSy4gKi8KLQljcHVzX2FuZChjcHVtYXNrLCBjcHVtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkoY3B1bWFzaykpKQotCQlyZXR1cm47Ci0jZW5kaWYKLQotCS8qCi0JICogaSdtIG5vdCBoYXBweSBhYm91dCB0aGlzIGdsb2JhbCBzaGFyZWQgc3BpbmxvY2sgaW4gdGhlCi0JICogTU0gaG90IHBhdGgsIGJ1dCB3ZSdsbCBzZWUgaG93IGNvbnRlbmRlZCBpdCBpcy4KLQkgKiBBSzogeDg2LTY0IGhhcyBhIGZhc3RlciBtZXRob2QgdGhhdCBjb3VsZCBiZSBwb3J0ZWQuCi0JICovCi0Jc3Bpbl9sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKLQotCWZsdXNoX21tID0gbW07Ci0JZmx1c2hfdmEgPSB2YTsKLQljcHVzX29yKGZsdXNoX2NwdW1hc2ssIGNwdW1hc2ssIGZsdXNoX2NwdW1hc2spOwotCi0JLyoKLQkgKiBNYWtlIHRoZSBhYm92ZSBtZW1vcnkgb3BlcmF0aW9ucyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZQotCSAqIHNlbmRpbmcgdGhlIElQSS4KLQkgKi8KLQlzbXBfbWIoKTsKLQkvKgotCSAqIFdlIGhhdmUgdG8gc2VuZCB0aGUgSVBJIG9ubHkgdG8KLQkgKiBDUFVzIGFmZmVjdGVkLgotCSAqLwotCXNlbmRfSVBJX21hc2soJmNwdW1hc2ssIElOVkFMSURBVEVfVExCX1ZFQ1RPUik7Ci0KLQl3aGlsZSAoIWNwdXNfZW1wdHkoZmx1c2hfY3B1bWFzaykpCi0JCS8qIG5vdGhpbmcuIGxvY2t1cCBkZXRlY3Rpb24gZG9lcyBub3QgYmVsb25nIGhlcmUgKi8KLQkJY3B1X3JlbGF4KCk7Ci0KLQlmbHVzaF9tbSA9IE5VTEw7Ci0JZmx1c2hfdmEgPSAwOwotCXNwaW5fdW5sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQljcHVtYXNrX3QgY3B1X21hc2s7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0KLQlsb2NhbF9mbHVzaF90bGIoKTsKLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQotCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgewotCQlpZiAoY3VycmVudC0+bW0pCi0JCQlsb2NhbF9mbHVzaF90bGIoKTsKLQkJZWxzZQotCQkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2YSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgewotCQlpZiAoY3VycmVudC0+bW0pCi0JCQlfX2ZsdXNoX3RsYl9vbmUodmEpOwotCQkgZWxzZQotCQkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0KLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQotCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgdmEpOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLUVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX3BhZ2UpOwotCi1zdGF0aWMgdm9pZCBkb19mbHVzaF90bGJfYWxsKHZvaWQgKmluZm8pCi17Ci0JdW5zaWduZWQgbG9uZyBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlfX2ZsdXNoX3RsYl9hbGwoKTsKLQlpZiAoeDg2X3JlYWRfcGVyY3B1KGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfTEFaWSkKLQkJbGVhdmVfbW0oY3B1KTsKLX0KLQotdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0Jb25fZWFjaF9jcHUoZG9fZmx1c2hfdGxiX2FsbCwgTlVMTCwgMSk7Ci19Ci0KLXZvaWQgcmVzZXRfbGF6eV90bGJzdGF0ZSh2b2lkKQotewotCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPSAwOwotCXBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbSA9ICZpbml0X21tOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKaW5kZXggNjgxMmI4Mi4uZDAzOGI5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwpAQCAtMTEsMTYgKzExLDE1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXYuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgogI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfYmF1Lmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgogCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0KIHN0YXRpYyBzdHJ1Y3QgYmF1X2NvbnRyb2wJKip1dl9iYXVfdGFibGVfYmFzZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQl1dl9iYXVfcmV0cnlfbGltaXQgX19yZWFkX21vc3RseTsKIApAQCAtMjEwLDE0ICsyMDksMTUgQEAKICAqCiAgKiBTZW5kIGEgYnJvYWRjYXN0IGFuZCB3YWl0IGZvciBhIGJyb2FkY2FzdCBtZXNzYWdlIHRvIGNvbXBsZXRlLgogICoKLSAqIFRoZSBjcHVtYXNrcCBtYXNrIGNvbnRhaW5zIHRoZSBjcHVzIHRoZSBicm9hZGNhc3Qgd2FzIHNlbnQgdG8uCisgKiBUaGUgZmx1c2hfbWFzayBjb250YWlucyB0aGUgY3B1cyB0aGUgYnJvYWRjYXN0IHdhcyBzZW50IHRvLgogICoKLSAqIFJldHVybnMgMSBpZiBhbGwgcmVtb3RlIGZsdXNoaW5nIHdhcyBkb25lLiBUaGUgbWFzayBpcyB6ZXJvZWQuCi0gKiBSZXR1cm5zIDAgaWYgc29tZSByZW1vdGUgZmx1c2hpbmcgcmVtYWlucyB0byBiZSBkb25lLiBUaGUgbWFzayBpcyBsZWZ0Ci0gKiB1bmNoYW5nZWQuCisgKiBSZXR1cm5zIE5VTEwgaWYgYWxsIHJlbW90ZSBmbHVzaGluZyB3YXMgZG9uZS4gVGhlIG1hc2sgaXMgemVyb2VkLgorICogUmV0dXJucyBAZmx1c2hfbWFzayBpZiBzb21lIHJlbW90ZSBmbHVzaGluZyByZW1haW5zIHRvIGJlIGRvbmUuIFRoZQorICogbWFzayB3aWxsIGhhdmUgc29tZSBiaXRzIHN0aWxsIHNldC4KICAqLwotaW50IHV2X2ZsdXNoX3NlbmRfYW5kX3dhaXQoaW50IGNwdSwgaW50IHRoaXNfYmxhZGUsIHN0cnVjdCBiYXVfZGVzYyAqYmF1X2Rlc2MsCi0JCQkgICBjcHVtYXNrX3QgKmNwdW1hc2twKQorY29uc3Qgc3RydWN0IGNwdW1hc2sgKnV2X2ZsdXNoX3NlbmRfYW5kX3dhaXQoaW50IGNwdSwgaW50IHRoaXNfYmxhZGUsCisJCQkJCSAgICAgc3RydWN0IGJhdV9kZXNjICpiYXVfZGVzYywKKwkJCQkJICAgICBzdHJ1Y3QgY3B1bWFzayAqZmx1c2hfbWFzaykKIHsKIAlpbnQgY29tcGxldGlvbl9zdGF0dXMgPSAwOwogCWludCByaWdodF9zaGlmdDsKQEAgLTI1Nyw2NiArMjU3LDc0IEBACiAJCSAqIHRoZSBjcHUncywgYWxsIG9mIHdoaWNoIGFyZSBzdGlsbCBpbiB0aGUgbWFzay4KIAkJICovCiAJCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnB0Y19pKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZmx1c2hfbWFzazsKIAl9CiAKIAkvKgogCSAqIFN1Y2Nlc3MsIHNvIGNsZWFyIHRoZSByZW1vdGUgY3B1J3MgZnJvbSB0aGUgbWFzayBzbyB3ZSBkb24ndAogCSAqIHVzZSB0aGUgSVBJIG1ldGhvZCBvZiBzaG9vdGRvd24gb24gdGhlbS4KIAkgKi8KLQlmb3JfZWFjaF9jcHVfbWFzayhiaXQsICpjcHVtYXNrcCkgeworCWZvcl9lYWNoX2NwdShiaXQsIGZsdXNoX21hc2spIHsKIAkJYmxhZGUgPSB1dl9jcHVfdG9fYmxhZGVfaWQoYml0KTsKIAkJaWYgKGJsYWRlID09IHRoaXNfYmxhZGUpCiAJCQljb250aW51ZTsKLQkJY3B1X2NsZWFyKGJpdCwgKmNwdW1hc2twKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoYml0LCBmbHVzaF9tYXNrKTsKIAl9Ci0JaWYgKCFjcHVzX2VtcHR5KCpjcHVtYXNrcCkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOworCWlmICghY3B1bWFza19lbXB0eShmbHVzaF9tYXNrKSkKKwkJcmV0dXJuIGZsdXNoX21hc2s7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgogICogdXZfZmx1c2hfdGxiX290aGVycyAtIGdsb2JhbGx5IHB1cmdlIHRyYW5zbGF0aW9uIGNhY2hlIG9mIGEgdmlydHVhbAogICogYWRkcmVzcyBvciBhbGwgVExCJ3MKLSAqIEBjcHVtYXNrcDogbWFzayBvZiBhbGwgY3B1J3MgaW4gd2hpY2ggdGhlIGFkZHJlc3MgaXMgdG8gYmUgcmVtb3ZlZAorICogQGNwdW1hc2s6IG1hc2sgb2YgYWxsIGNwdSdzIGluIHdoaWNoIHRoZSBhZGRyZXNzIGlzIHRvIGJlIHJlbW92ZWQKICAqIEBtbTogbW1fc3RydWN0IGNvbnRhaW5pbmcgdmlydHVhbCBhZGRyZXNzIHJhbmdlCiAgKiBAdmE6IHZpcnR1YWwgYWRkcmVzcyB0byBiZSByZW1vdmVkIChvciBUTEJfRkxVU0hfQUxMIGZvciBhbGwgVExCJ3Mgb24gY3B1KQorICogQGNwdTogdGhlIGN1cnJlbnQgY3B1CiAgKgogICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGluaXRpYXRpbmcgYW55IFVWIGdsb2JhbCBUTEIgc2hvb3Rkb3duLgogICoKICAqIFB1cmdlcyB0aGUgdHJhbnNsYXRpb24gY2FjaGVzIG9mIGFsbCBzcGVjaWZpZWQgcHJvY2Vzc29ycyBvZiB0aGUgZ2l2ZW4KICAqIHZpcnR1YWwgYWRkcmVzcywgb3IgcHVyZ2VzIGFsbCBUTEIncyBvbiBzcGVjaWZpZWQgcHJvY2Vzc29ycy4KICAqCi0gKiBUaGUgY2FsbGVyIGhhcyBkZXJpdmVkIHRoZSBjcHVtYXNrcCBmcm9tIHRoZSBtbV9zdHJ1Y3QgYW5kIGhhcyBzdWJ0cmFjdGVkCi0gKiB0aGUgbG9jYWwgY3B1IGZyb20gdGhlIG1hc2suICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGlmIHRoZXJlCi0gKiBhcmUgYml0cyBzZXQgaW4gdGhlIG1hc2suIChlLmcuIGZsdXNoX3RsYl9wYWdlKCkpCisgKiBUaGUgY2FsbGVyIGhhcyBkZXJpdmVkIHRoZSBjcHVtYXNrIGZyb20gdGhlIG1tX3N0cnVjdC4gIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBvbmx5IGlmIHRoZXJlIGFyZSBiaXRzIHNldCBpbiB0aGUgbWFzay4gKGUuZy4gZmx1c2hfdGxiX3BhZ2UoKSkKICAqCi0gKiBUaGUgY3B1bWFza3AgaXMgY29udmVydGVkIGludG8gYSBub2RlbWFzayBvZiB0aGUgbm9kZXMgY29udGFpbmluZworICogVGhlIGNwdW1hc2sgaXMgY29udmVydGVkIGludG8gYSBub2RlbWFzayBvZiB0aGUgbm9kZXMgY29udGFpbmluZwogICogdGhlIGNwdXMuCiAgKgotICogUmV0dXJucyAxIGlmIGFsbCByZW1vdGUgZmx1c2hpbmcgd2FzIGRvbmUuCi0gKiBSZXR1cm5zIDAgaWYgc29tZSByZW1vdGUgZmx1c2hpbmcgcmVtYWlucyB0byBiZSBkb25lLgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCisgKgorICogUmV0dXJucyBOVUxMIGlmIGFsbCByZW1vdGUgZmx1c2hpbmcgd2FzIGRvbmUuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gY3B1bWFzayBpZiBzb21lIHJlbW90ZSBmbHVzaGluZyByZW1haW5zIHRvIGJlCisgKiBkb25lLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgdmFsaWQgdGlsbCBwcmVlbXB0aW9uIGlzIHJlLWVuYWJsZWQuCiAgKi8KLWludCB1dl9mbHVzaF90bGJfb3RoZXJzKGNwdW1hc2tfdCAqY3B1bWFza3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJdW5zaWduZWQgbG9uZyB2YSkKK2NvbnN0IHN0cnVjdCBjcHVtYXNrICp1dl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGludCBjcHUpCiB7CisJc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgZmx1c2hfdGxiX21hc2spOworCXN0cnVjdCBjcHVtYXNrICpmbHVzaF9tYXNrID0gJl9fZ2V0X2NwdV92YXIoZmx1c2hfdGxiX21hc2spOwogCWludCBpOwogCWludCBiaXQ7CiAJaW50IGJsYWRlOwotCWludCBjcHU7CisJaW50IHV2X2NwdTsKIAlpbnQgdGhpc19ibGFkZTsKIAlpbnQgbG9jYWxzID0gMDsKIAlzdHJ1Y3QgYmF1X2Rlc2MgKmJhdV9kZXNjOwogCi0JY3B1ID0gdXZfYmxhZGVfcHJvY2Vzc29yX2lkKCk7CisJY3B1bWFza19hbmRub3QoZmx1c2hfbWFzaywgY3B1bWFzaywgY3B1bWFza19vZihjcHUpKTsKKworCXV2X2NwdSA9IHV2X2JsYWRlX3Byb2Nlc3Nvcl9pZCgpOwogCXRoaXNfYmxhZGUgPSB1dl9udW1hX2JsYWRlX2lkKCk7CiAJYmF1X2Rlc2MgPSBfX2dldF9jcHVfdmFyKGJhdV9jb250cm9sKS5kZXNjcmlwdG9yX2Jhc2U7Ci0JYmF1X2Rlc2MgKz0gVVZfSVRFTVNfUEVSX0RFU0NSSVBUT1IgKiBjcHU7CisJYmF1X2Rlc2MgKz0gVVZfSVRFTVNfUEVSX0RFU0NSSVBUT1IgKiB1dl9jcHU7CiAKIAliYXVfbm9kZXNfY2xlYXIoJmJhdV9kZXNjLT5kaXN0cmlidXRpb24sIFVWX0RJU1RSSUJVVElPTl9TSVpFKTsKIAogCWkgPSAwOwotCWZvcl9lYWNoX2NwdV9tYXNrKGJpdCwgKmNwdW1hc2twKSB7CisJZm9yX2VhY2hfY3B1KGJpdCwgZmx1c2hfbWFzaykgewogCQlibGFkZSA9IHV2X2NwdV90b19ibGFkZV9pZChiaXQpOwogCQlCVUdfT04oYmxhZGUgPiAoVVZfRElTVFJJQlVUSU9OX1NJWkUgLSAxKSk7CiAJCWlmIChibGFkZSA9PSB0aGlzX2JsYWRlKSB7CkBAIC0zMzEsMTcgKzMzOSwxNyBAQAogCQkgKiBubyBvZmZfbm9kZSBmbHVzaGluZzsgcmV0dXJuIHN0YXR1cyBmb3IgbG9jYWwgbm9kZQogCQkgKi8KIAkJaWYgKGxvY2FscykKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZsdXNoX21hc2s7CiAJCWVsc2UKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIE5VTEw7CiAJfQogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnJlcXVlc3RvcisrOwogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLm50YXJnZXRlZCArPSBpOwogCiAJYmF1X2Rlc2MtPnBheWxvYWQuYWRkcmVzcyA9IHZhOwotCWJhdV9kZXNjLT5wYXlsb2FkLnNlbmRpbmdfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWJhdV9kZXNjLT5wYXlsb2FkLnNlbmRpbmdfY3B1ID0gY3B1OwogCi0JcmV0dXJuIHV2X2ZsdXNoX3NlbmRfYW5kX3dhaXQoY3B1LCB0aGlzX2JsYWRlLCBiYXVfZGVzYywgY3B1bWFza3ApOworCXJldHVybiB1dl9mbHVzaF9zZW5kX2FuZF93YWl0KHV2X2NwdSwgdGhpc19ibGFkZSwgYmF1X2Rlc2MsIGZsdXNoX21hc2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzMyLlMKaW5kZXggZDhjY2MzYy4uNjZkODc0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV8zMi5TCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAKIC8qIFdlIGNhbiBmcmVlIHVwIHRyYW1wb2xpbmUgYWZ0ZXIgYm9vdHVwIGlmIGNwdSBob3RwbHVnIGlzIG5vdCBzdXBwb3J0ZWQuICovCiAjaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKaW5kZXggODk0MjkzYy4uY2RkZmI4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCkBAIC0yNSwxMCArMjUsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogCiAuc2VjdGlvbiAucm9kYXRhLCAiYSIsIEBwcm9nYml0cwogCkBAIC0zNyw3ICszOCw3IEBACiBFTlRSWSh0cmFtcG9saW5lX2RhdGEpCiByX2Jhc2UgPSAuCiAJY2xpCQkJIyBXZSBzaG91bGQgYmUgc2FmZSBhbnl3YXkKLQl3YmludmQJCisJd2JpbnZkCiAJbW92CSVjcywgJWF4CSMgQ29kZSBhbmQgZGF0YSBpbiB0aGUgc2FtZSBwbGFjZQogCW1vdgklYXgsICVkcwogCW1vdgklYXgsICVlcwpAQCAtNzMsOSArNzQsOCBAQAogCWxpZHRsCXRpZHQgLSByX2Jhc2UJIyBsb2FkIGlkdCB3aXRoIDAsIDAKIAlsZ2R0bAl0Z2R0IC0gcl9iYXNlCSMgbG9hZCBnZHQgd2l0aCB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZQogCi0JeG9yCSVheCwgJWF4Ci0JaW5jCSVheAkJIyBwcm90ZWN0ZWQgbW9kZSAoUEUpIGJpdAotCWxtc3cJJWF4CQkjIGludG8gcHJvdGVjdGVkIG1vZGUKKwltb3YJJFg4Nl9DUjBfUEUsICVheAkjIHByb3RlY3RlZCBtb2RlIChQRSkgYml0CisJbG1zdwklYXgJCQkjIGludG8gcHJvdGVjdGVkIG1vZGUKIAogCSMgZmx1c2ggcHJlZmV0Y2ggYW5kIGp1bXAgdG8gc3RhcnR1cF8zMgogCWxqbXBsCSooc3RhcnR1cF8zMl92ZWN0b3IgLSByX2Jhc2UpCkBAIC04Niw5ICs4Niw4IEBACiAJbW92bAkkX19LRVJORUxfRFMsICVlYXgJIyBJbml0aWFsaXplIHRoZSAlZHMgc2VnbWVudCByZWdpc3RlcgogCW1vdmwJJWVheCwgJWRzCiAKLQl4b3JsCSVlYXgsICVlYXgKLQlidHNsCSQ1LCAlZWF4CQkjIEVuYWJsZSBQQUUgbW9kZQotCW1vdmwJJWVheCwgJWNyNAorCW1vdmwJJFg4Nl9DUjRfUEFFLCAlZWF4CisJbW92bAklZWF4LCAlY3I0CQkjIEVuYWJsZSBQQUUgbW9kZQogCiAJCQkJCSMgU2V0dXAgdHJhbXBvbGluZSA0IGxldmVsIHBhZ2V0YWJsZXMKIAlsZWFsCSh0cmFtcG9saW5lX2xldmVsNF9wZ3QgLSByX2Jhc2UpKCVlc2kpLCAlZWF4CkBAIC05OSw5ICs5OCw5IEBACiAJeG9ybAklZWR4LCAlZWR4CiAJd3Jtc3IKIAotCXhvcmwJJWVheCwgJWVheAotCWJ0c2wJJDMxLCAlZWF4CQkjIEVuYWJsZSBwYWdpbmcgYW5kIGluIHR1cm4gYWN0aXZhdGUgTG9uZyBNb2RlCi0JYnRzbAkkMCwgJWVheAkJIyBFbmFibGUgcHJvdGVjdGVkIG1vZGUKKwkjIEVuYWJsZSBwYWdpbmcgYW5kIGluIHR1cm4gYWN0aXZhdGUgTG9uZyBNb2RlCisJIyBFbmFibGUgcHJvdGVjdGVkIG1vZGUKKwltb3ZsCSQoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpLCAlZWF4CiAJbW92bAklZWF4LCAlY3IwCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBhOWU3NTQ4Li5hMWQyODgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNTQsMTUgKzU0LDE0IEBACiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogCi0jaW5jbHVkZSA8bWFjaF90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoX3RyYXBzLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiAjaW5jbHVkZSAiY3B1L21jaGVjay9tY2UuaCIKQEAgLTExOSw0NyArMTE4LDYgQEAKIAlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkKIAkJZGllKHN0ciwgcmVncywgZXJyKTsKIH0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGxhenkgVFNTJ3MgSS9PIGJpdG1hcCBjb3B5LiBJZiB0aGUgVFNTIGhhcyBhbgotICogaW52YWxpZCBvZmZzZXQgc2V0ICh0aGUgTEFaWSBvbmUpIGFuZCB0aGUgZmF1bHRpbmcgdGhyZWFkIGhhcwotICogYSB2YWxpZCBJL08gYml0bWFwIHBvaW50ZXIsIHdlIGNvcHkgdGhlIEkvTyBiaXRtYXAgaW4gdGhlIFRTUywKLSAqIHdlIHNldCB0aGUgb2Zmc2V0IGZpZWxkIGNvcnJlY3RseSBhbmQgcmV0dXJuIDEuCi0gKi8KLXN0YXRpYyBpbnQgbGF6eV9pb2JpdG1hcF9jb3B5KHZvaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZDsKLQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzOwotCWludCBjcHU7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0JdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKLQotCWlmICh0c3MtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPT0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUX0xBWlkgJiYKLQkgICAgdGhyZWFkLT5pb19iaXRtYXBfcHRyKSB7Ci0JCW1lbWNweSh0c3MtPmlvX2JpdG1hcCwgdGhyZWFkLT5pb19iaXRtYXBfcHRyLAotCQkgICAgICAgdGhyZWFkLT5pb19iaXRtYXBfbWF4KTsKLQkJLyoKLQkJICogSWYgdGhlIHByZXZpb3VzbHkgc2V0IG1hcCB3YXMgZXh0ZW5kaW5nIHRvIGhpZ2hlciBwb3J0cwotCQkgKiB0aGFuIHRoZSBjdXJyZW50IG9uZSwgcGFkIGV4dHJhIHNwYWNlIHdpdGggMHhmZiAobm8gYWNjZXNzKS4KLQkJICovCi0JCWlmICh0aHJlYWQtPmlvX2JpdG1hcF9tYXggPCB0c3MtPmlvX2JpdG1hcF9tYXgpIHsKLQkJCW1lbXNldCgoY2hhciAqKSB0c3MtPmlvX2JpdG1hcCArCi0JCQkJdGhyZWFkLT5pb19iaXRtYXBfbWF4LCAweGZmLAotCQkJCXRzcy0+aW9fYml0bWFwX21heCAtIHRocmVhZC0+aW9fYml0bWFwX21heCk7Ci0JCX0KLQkJdHNzLT5pb19iaXRtYXBfbWF4ID0gdGhyZWFkLT5pb19iaXRtYXBfbWF4OwotCQl0c3MtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPSBJT19CSVRNQVBfT0ZGU0VUOwotCQl0c3MtPmlvX2JpdG1hcF9vd25lciA9IHRocmVhZDsKLQkJcHV0X2NwdSgpOwotCi0JCXJldHVybiAxOwotCX0KLQlwdXRfY3B1KCk7Ci0KLQlyZXR1cm4gMDsKLX0KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMKQEAgLTMxMCwxMSArMjY4LDYgQEAKIAljb25kaXRpb25hbF9zdGkocmVncyk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKGxhenlfaW9iaXRtYXBfY29weSgpKSB7Ci0JCS8qIHJlc3RhcnQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uICovCi0JCXJldHVybjsKLQl9Ci0KIAlpZiAocmVncy0+ZmxhZ3MgJiBYODZfVk1fTUFTSykKIAkJZ290byBncF9pbl92bTg2OwogI2VuZGlmCkBAIC05MTQsMTkgKzg2NywyMCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NQVRIX0VNVUxBVElPTiAqLwogCi1kb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX2RldmljZV9ub3RfYXZhaWxhYmxlKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCitkb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzCitkb19kZXZpY2Vfbm90X2F2YWlsYWJsZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKIAlpZiAocmVhZF9jcjAoKSAmIFg4Nl9DUjBfRU0pIHsKIAkJc3RydWN0IG1hdGhfZW11X2luZm8gaW5mbyA9IHsgfTsKIAotCQljb25kaXRpb25hbF9zdGkoJnJlZ3MpOworCQljb25kaXRpb25hbF9zdGkocmVncyk7CiAKLQkJaW5mby5yZWdzID0gJnJlZ3M7CisJCWluZm8ucmVncyA9IHJlZ3M7CiAJCW1hdGhfZW11bGF0ZSgmaW5mbyk7CiAJfSBlbHNlIHsKIAkJbWF0aF9zdGF0ZV9yZXN0b3JlKCk7IC8qIGludGVycnVwdHMgc3RpbGwgb2ZmICovCi0JCWNvbmRpdGlvbmFsX3N0aSgmcmVncyk7CisJCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKIAl9CiAjZWxzZQogCW1hdGhfc3RhdGVfcmVzdG9yZSgpOwpAQCAtOTQyLDcgKzg5Niw3IEBACiAJaW5mby5zaV9zaWdubyA9IFNJR0lMTDsKIAlpbmZvLnNpX2Vycm5vID0gMDsKIAlpbmZvLnNpX2NvZGUgPSBJTExfQkFEU1RLOwotCWluZm8uc2lfYWRkciA9IDA7CisJaW5mby5zaV9hZGRyID0gTlVMTDsKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImlyZXQgZXhjZXB0aW9uIiwKIAkJCXJlZ3MsIGVycm9yX2NvZGUsIDMyLCBTSUdJTEwpID09IE5PVElGWV9TVE9QKQogCQlyZXR1cm47CkBAIC0xMDI2LDYgKzk4MCw2IEBACiAJY3B1X2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLQl0cmFwX2luaXRfaG9vaygpOworCXg4Nl9xdWlya190cmFwX2luaXQoKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IDU5OWU1ODEuLjdhNTY3ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKQEAgLTE3LDIwICsxNywyMSBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAKLXVuc2lnbmVkIGludCBjcHVfa2h6OyAgICAgICAgICAgLyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi8KK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IGNwdV9raHo7CS8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovCiBFWFBPUlRfU1lNQk9MKGNwdV9raHopOwotdW5zaWduZWQgaW50IHRzY19raHo7CisKK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHRzY19raHo7CiBFWFBPUlRfU1lNQk9MKHRzY19raHopOwogCiAvKgogICogVFNDIGNhbiBiZSB1bnN0YWJsZSBkdWUgdG8gY3B1ZnJlcSBvciBkdWUgdG8gdW5zeW5jZWQgVFNDcwogICovCi1zdGF0aWMgaW50IHRzY191bnN0YWJsZTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0c2NfdW5zdGFibGU7CiAKIC8qIG5hdGl2ZV9zY2hlZF9jbG9jaygpIGlzIGNhbGxlZCBiZWZvcmUgdHNjX2luaXQoKSwgc28KICAgIHdlIG11c3Qgc3RhcnQgd2l0aCB0aGUgVFNDIHNvZnQgZGlzYWJsZWQgdG8gcHJldmVudAogICAgZXJyb25lb3VzIHJkdHNjIHVzYWdlIG9uICFjcHVfaGFzX3RzYyBwcm9jZXNzb3JzICovCi1zdGF0aWMgaW50IHRzY19kaXNhYmxlZCA9IC0xOworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHRzY19kaXNhYmxlZCA9IC0xOwogCiBzdGF0aWMgaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTsKIC8qCkBAIC0yNzMsMzAgKzI3NCw0MyBAQAogICogdXNlIHRoZSBUU0MgdmFsdWUgYXQgdGhlIHRyYW5zaXRpb25zIHRvIGNhbGN1bGF0ZSBhIHByZXR0eQogICogZ29vZCB2YWx1ZSBmb3IgdGhlIFRTQyBmcmVxdWVuY3R5LgogICovCi1zdGF0aWMgaW5saW5lIGludCBwaXRfZXhwZWN0X21zYih1bnNpZ25lZCBjaGFyIHZhbCkKK3N0YXRpYyBpbmxpbmUgaW50IHBpdF9leHBlY3RfbXNiKHVuc2lnbmVkIGNoYXIgdmFsLCB1NjQgKnRzY3AsIHVuc2lnbmVkIGxvbmcgKmRlbHRhcCkKIHsKLQlpbnQgY291bnQgPSAwOworCWludCBjb3VudDsKKwl1NjQgdHNjID0gMDsKIAogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDUwMDAwOyBjb3VudCsrKSB7CiAJCS8qIElnbm9yZSBMU0IgKi8KIAkJaW5iKDB4NDIpOwogCQlpZiAoaW5iKDB4NDIpICE9IHZhbCkKIAkJCWJyZWFrOworCQl0c2MgPSBnZXRfY3ljbGVzKCk7CiAJfQotCXJldHVybiBjb3VudCA+IDUwOworCSpkZWx0YXAgPSBnZXRfY3ljbGVzKCkgLSB0c2M7CisJKnRzY3AgPSB0c2M7CisKKwkvKgorCSAqIFdlIHJlcXVpcmUgX3NvbWVfIHN1Y2Nlc3MsIGJ1dCB0aGUgcXVhbGl0eSBjb250cm9sCisJICogd2lsbCBiZSBiYXNlZCBvbiB0aGUgZXJyb3IgdGVybXMgb24gdGhlIFRTQyB2YWx1ZXMuCisJICovCisJcmV0dXJuIGNvdW50ID4gNTsKIH0KIAogLyoKLSAqIEhvdyBtYW55IE1TQiB2YWx1ZXMgZG8gd2Ugd2FudCB0byBzZWU/IFdlIGFpbSBmb3IgYQotICogMTVtcyBjYWxpYnJhdGlvbiwgd2hpY2ggYXNzdW1pbmcgYSAydXMgY291bnRlciByZWFkCi0gKiBlcnJvciBzaG91bGQgZ2l2ZSB1cyByb3VnaGx5IDE1MCBwcG0gcHJlY2lzaW9uIGZvcgotICogdGhlIGNhbGlicmF0aW9uLgorICogSG93IG1hbnkgTVNCIHZhbHVlcyBkbyB3ZSB3YW50IHRvIHNlZT8gV2UgYWltIGZvcgorICogYSBtYXhpbXVtIGVycm9yIHJhdGUgb2YgNTAwcHBtIChpbiBwcmFjdGljZSB0aGUKKyAqIHJlYWwgZXJyb3IgaXMgbXVjaCBzbWFsbGVyKSwgYnV0IHJlZnVzZSB0byBzcGVuZAorICogbW9yZSB0aGFuIDI1bXMgb24gaXQuCiAgKi8KLSNkZWZpbmUgUVVJQ0tfUElUX01TIDE1Ci0jZGVmaW5lIFFVSUNLX1BJVF9JVEVSQVRJT05TIChRVUlDS19QSVRfTVMgKiBQSVRfVElDS19SQVRFIC8gMTAwMCAvIDI1NikKKyNkZWZpbmUgTUFYX1FVSUNLX1BJVF9NUyAyNQorI2RlZmluZSBNQVhfUVVJQ0tfUElUX0lURVJBVElPTlMgKE1BWF9RVUlDS19QSVRfTVMgKiBQSVRfVElDS19SQVRFIC8gMTAwMCAvIDI1NikKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpY2tfcGl0X2NhbGlicmF0ZSh2b2lkKQogeworCWludCBpOworCXU2NCB0c2MsIGRlbHRhOworCXVuc2lnbmVkIGxvbmcgZDEsIGQyOworCiAJLyogU2V0IHRoZSBHYXRlIGhpZ2gsIGRpc2FibGUgc3BlYWtlciAqLwogCW91dGIoKGluYigweDYxKSAmIH4weDAyKSB8IDB4MDEsIDB4NjEpOwogCkBAIC0zMTUsNDUgKzMyOSw1MiBAQAogCW91dGIoMHhmZiwgMHg0Mik7CiAJb3V0YigweGZmLCAweDQyKTsKIAotCWlmIChwaXRfZXhwZWN0X21zYigweGZmKSkgewotCQlpbnQgaTsKLQkJdTY0IHQxLCB0MiwgZGVsdGE7Ci0JCXVuc2lnbmVkIGNoYXIgZXhwZWN0ID0gMHhmZTsKKwkvKgorCSAqIFRoZSBQSVQgc3RhcnRzIGNvdW50aW5nIGF0IHRoZSBuZXh0IGVkZ2UsIHNvIHdlCisJICogbmVlZCB0byBkZWxheSBmb3IgYSBtaWNyb3NlY29uZC4gVGhlIGVhc2llc3Qgd2F5CisJICogdG8gZG8gdGhhdCBpcyB0byBqdXN0IHJlYWQgYmFjayB0aGUgMTYtYml0IGNvdW50ZXIKKwkgKiBvbmNlIGZyb20gdGhlIFBJVC4KKwkgKi8KKwlpbmIoMHg0Mik7CisJaW5iKDB4NDIpOwogCi0JCXQxID0gZ2V0X2N5Y2xlcygpOwotCQlmb3IgKGkgPSAwOyBpIDwgUVVJQ0tfUElUX0lURVJBVElPTlM7IGkrKywgZXhwZWN0LS0pIHsKLQkJCWlmICghcGl0X2V4cGVjdF9tc2IoZXhwZWN0KSkKLQkJCQlnb3RvIGZhaWxlZDsKKwlpZiAocGl0X2V4cGVjdF9tc2IoMHhmZiwgJnRzYywgJmQxKSkgeworCQlmb3IgKGkgPSAxOyBpIDw9IE1BWF9RVUlDS19QSVRfSVRFUkFUSU9OUzsgaSsrKSB7CisJCQlpZiAoIXBpdF9leHBlY3RfbXNiKDB4ZmYtaSwgJmRlbHRhLCAmZDIpKQorCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogSXRlcmF0ZSB1bnRpbCB0aGUgZXJyb3IgaXMgbGVzcyB0aGFuIDUwMCBwcG0KKwkJCSAqLworCQkJZGVsdGEgLT0gdHNjOworCQkJaWYgKGQxK2QyIDwgZGVsdGEgPj4gMTEpCisJCQkJZ290byBzdWNjZXNzOwogCQl9Ci0JCXQyID0gZ2V0X2N5Y2xlcygpOwotCi0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB3ZSBjYW4gcmVseSBvbiB0aGUgc2Vjb25kIFRTQyB0aW1lc3RhbXA6Ci0JCSAqLwotCQlpZiAoIXBpdF9leHBlY3RfbXNiKGV4cGVjdCkpCi0JCQlnb3RvIGZhaWxlZDsKLQotCQkvKgotCQkgKiBPaywgaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UndmUgc2VlbiB0aGUKLQkJICogTVNCIG9mIHRoZSBQSVQgZGVjcmVtZW50IFFVSUNLX1BJVF9JVEVSQVRJT05TCi0JCSAqIHRpbWVzLCBhbmQgZWFjaCBNU0IgaGFkIG1hbnkgaGl0cywgc28gd2UgbmV2ZXIKLQkJICogaGFkIGFueSBzdWRkZW4ganVtcHMuCi0JCSAqCi0JCSAqIEFzIGEgcmVzdWx0LCB3ZSBjYW4gZGVwZW5kIG9uIHRoZXJlIG5vdCBiZWluZwotCQkgKiBhbnkgb2RkIGRlbGF5cyBhbnl3aGVyZSwgYW5kIHRoZSBUU0MgcmVhZHMgYXJlCi0JCSAqIHJlbGlhYmxlLgotCQkgKgotCQkgKiBrSHogPSB0aWNrcyAvIHRpbWUtaW4tc2Vjb25kcyAvIDEwMDA7Ci0JCSAqIGtIeiA9ICh0MiAtIHQxKSAvIChRUEkgKiAyNTYgLyBQSVRfVElDS19SQVRFKSAvIDEwMDAKLQkJICoga0h6ID0gKCh0MiAtIHQxKSAqIFBJVF9USUNLX1JBVEUpIC8gKFFQSSAqIDI1NiAqIDEwMDApCi0JCSAqLwotCQlkZWx0YSA9ICh0MiAtIHQxKSpQSVRfVElDS19SQVRFOwotCQlkb19kaXYoZGVsdGEsIFFVSUNLX1BJVF9JVEVSQVRJT05TKjI1NioxMDAwKTsKLQkJcHJpbnRrKCJGYXN0IFRTQyBjYWxpYnJhdGlvbiB1c2luZyBQSVRcbiIpOwotCQlyZXR1cm4gZGVsdGE7CiAJfQotZmFpbGVkOgorCXByaW50aygiRmFzdCBUU0MgY2FsaWJyYXRpb24gZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKKworc3VjY2VzczoKKwkvKgorCSAqIE9rLCBpZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSd2ZSBzZWVuIHRoZQorCSAqIE1TQiBvZiB0aGUgUElUIGRlY3JlbWVudCAnaScgdGltZXMsIGFuZCB0aGUKKwkgKiBlcnJvciBoYXMgc2hydW5rIHRvIGxlc3MgdGhhbiA1MDAgcHBtLgorCSAqCisJICogQXMgYSByZXN1bHQsIHdlIGNhbiBkZXBlbmQgb24gdGhlcmUgbm90IGJlaW5nCisJICogYW55IG9kZCBkZWxheXMgYW55d2hlcmUsIGFuZCB0aGUgVFNDIHJlYWRzIGFyZQorCSAqIHJlbGlhYmxlICh3aXRoaW4gdGhlIGVycm9yKS4gV2UgYWxzbyBhZGp1c3QgdGhlCisJICogZGVsdGEgdG8gdGhlIG1pZGRsZSBvZiB0aGUgZXJyb3IgYmFycywganVzdAorCSAqIGJlY2F1c2UgaXQgbG9va3MgbmljZXIuCisJICoKKwkgKiBrSHogPSB0aWNrcyAvIHRpbWUtaW4tc2Vjb25kcyAvIDEwMDA7CisJICoga0h6ID0gKHQyIC0gdDEpIC8gKEkgKiAyNTYgLyBQSVRfVElDS19SQVRFKSAvIDEwMDAKKwkgKiBrSHogPSAoKHQyIC0gdDEpICogUElUX1RJQ0tfUkFURSkgLyAoSSAqIDI1NiAqIDEwMDApCisJICovCisJZGVsdGEgKz0gKGxvbmcpKGQyIC0gZDEpLzI7CisJZGVsdGEgKj0gUElUX1RJQ0tfUkFURTsKKwlkb19kaXYoZGVsdGEsIGkqMjU2KjEwMDApOworCXByaW50aygiRmFzdCBUU0MgY2FsaWJyYXRpb24gdXNpbmcgUElUXG4iKTsKKwlyZXR1cm4gZGVsdGE7CiB9CiAKIC8qKgpAQCAtNTIzLDggKzU0NCw2IEBACiAJcmV0dXJuIHRzY19waXRfbWluOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogT25seSBjYWxsZWQgZnJvbSB0aGUgUG93ZXJub3cgSzcgY3B1IGZyZXEgZHJpdmVyICovCiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKQogewogI2lmbmRlZiBDT05GSUdfU01QCkBAIC01NDYsNyArNTY1LDYgQEAKIAogRVhQT1JUX1NZTUJPTChyZWNhbGlicmF0ZV9jcHVfa2h6KTsKIAotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogQWNjZWxlcmF0b3JzIGZvciBzY2hlZF9jbG9jaygpCiAgKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKQEAgLTc3Myw3ICs3OTEsNyBAQAogCWlmICghY3B1X2hhc190c2MgfHwgdHNjX3Vuc3RhYmxlKQogCQlyZXR1cm4gMTsKIAotI2lmZGVmIENPTkZJR19YODZfU01QCisjaWZkZWYgQ09ORklHX1NNUAogCWlmIChhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSkKIAkJcmV0dXJuIDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCBkODAxZDA2Li4xOTFhODc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC0yNCwxOCArMjQsMTQgQEAKIAogI2luY2x1ZGUgPGFzbS92aXN3cy9jb2JhbHQuaD4KICNpbmNsdWRlIDxhc20vdmlzd3MvcGlpeDQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotCi0jaW5jbHVkZSAibWFjaF9hcGljLmgiCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CkBAIC00OSw4ICs0NSw2IEBACiAKIGV4dGVybiBpbnQgbm9fYnJvYWRjYXN0OwogCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLQogY2hhciB2aXN3c19ib2FyZF90eXBlCT0gLTE7CiBjaGFyIHZpc3dzX2JvYXJkX3Jldgk9IC0xOwogCkBAIC0yMDAsNyArMTk0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFwaWNfY3B1cyA9IGFwaWNpZF90b19jcHVfcHJlc2VudChtLT5hcGljaWQpOworCWFwaWNfY3B1cyA9IGFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudChtLT5hcGljaWQpOwogCXBoeXNpZHNfb3IocGh5c19jcHVfcHJlc2VudF9tYXAsIHBoeXNfY3B1X3ByZXNlbnRfbWFwLCBhcGljX2NwdXMpOwogCS8qCiAJICogVmFsaWRhdGUgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtODZfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bTg2XzMyLmMKaW5kZXggNGVlYjVjZi4uZDdhYzg0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtODZfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm04Nl8zMi5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlyZXQgPSBLVk04Ni0+cmVnczMyOwogCiAJcmV0LT5mcyA9IGN1cnJlbnQtPnRocmVhZC5zYXZlZF9mczsKLQlsb2Fkc2VnbWVudChncywgY3VycmVudC0+dGhyZWFkLnNhdmVkX2dzKTsKKwlzZXRfdXNlcl9ncyhyZXQsIGN1cnJlbnQtPnRocmVhZC5zYXZlZF9ncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTk3LDkgKzE5Nyw5IEBACiBzdGF0aWMgaW50IGRvX3ZtODZfaXJxX2hhbmRsaW5nKGludCBzdWJmdW5jdGlvbiwgaW50IGlycW51bWJlcik7CiBzdGF0aWMgdm9pZCBkb19zeXNfdm04NihzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0ICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKLWFzbWxpbmthZ2UgaW50IHN5c192bTg2b2xkKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCitpbnQgc3lzX3ZtODZvbGQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqdjg2ID0gKHN0cnVjdCB2bTg2X3N0cnVjdCBfX3VzZXIgKilyZWdzLmJ4OworCXN0cnVjdCB2bTg2X3N0cnVjdCBfX3VzZXIgKnY4NiA9IChzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICopcmVncy0+Yng7CiAJc3RydWN0IGtlcm5lbF92bTg2X3N0cnVjdCBpbmZvOyAvKiBkZWNsYXJlIHRoaXMgX29uIHRvcF8sCiAJCQkJCSAqIHRoaXMgYXZvaWRzIHdhc3Rpbmcgb2Ygc3RhY2sgc3BhY2UuCiAJCQkJCSAqIFRoaXMgcmVtYWlucyBvbiB0aGUgc3RhY2sgdW50aWwgd2UKQEAgLTIxOCw3ICsyMTgsNyBAQAogCWlmICh0bXApCiAJCWdvdG8gb3V0OwogCW1lbXNldCgmaW5mby52bTg2cGx1cywgMCwgKGludCkmaW5mby5yZWdzMzIgLSAoaW50KSZpbmZvLnZtODZwbHVzKTsKLQlpbmZvLnJlZ3MzMiA9ICZyZWdzOworCWluZm8ucmVnczMyID0gcmVnczsKIAl0c2stPnRocmVhZC52bTg2X2luZm8gPSB2ODY7CiAJZG9fc3lzX3ZtODYoJmluZm8sIHRzayk7CiAJcmV0ID0gMDsJLyogd2UgbmV2ZXIgcmV0dXJuIGhlcmUgKi8KQEAgLTIyNyw3ICsyMjcsNyBAQAogfQogCiAKLWFzbWxpbmthZ2UgaW50IHN5c192bTg2KHN0cnVjdCBwdF9yZWdzIHJlZ3MpCitpbnQgc3lzX3ZtODYoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtlcm5lbF92bTg2X3N0cnVjdCBpbmZvOyAvKiBkZWNsYXJlIHRoaXMgX29uIHRvcF8sCiAJCQkJCSAqIHRoaXMgYXZvaWRzIHdhc3Rpbmcgb2Ygc3RhY2sgc3BhY2UuCkBAIC0yMzksMTIgKzIzOSwxMiBAQAogCXN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgX191c2VyICp2ODY7CiAKIAl0c2sgPSBjdXJyZW50OwotCXN3aXRjaCAocmVncy5ieCkgeworCXN3aXRjaCAocmVncy0+YngpIHsKIAljYXNlIFZNODZfUkVRVUVTVF9JUlE6CiAJY2FzZSBWTTg2X0ZSRUVfSVJROgogCWNhc2UgVk04Nl9HRVRfSVJRX0JJVFM6CiAJY2FzZSBWTTg2X0dFVF9BTkRfUkVTRVRfSVJROgotCQlyZXQgPSBkb192bTg2X2lycV9oYW5kbGluZyhyZWdzLmJ4LCAoaW50KXJlZ3MuY3gpOworCQlyZXQgPSBkb192bTg2X2lycV9oYW5kbGluZyhyZWdzLT5ieCwgKGludClyZWdzLT5jeCk7CiAJCWdvdG8gb3V0OwogCWNhc2UgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0s6CiAJCS8qCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogCXJldCA9IC1FUEVSTTsKIAlpZiAodHNrLT50aHJlYWQuc2F2ZWRfc3AwKQogCQlnb3RvIG91dDsKLQl2ODYgPSAoc3RydWN0IHZtODZwbHVzX3N0cnVjdCBfX3VzZXIgKilyZWdzLmN4OworCXY4NiA9IChzdHJ1Y3Qgdm04NnBsdXNfc3RydWN0IF9fdXNlciAqKXJlZ3MtPmN4OwogCXRtcCA9IGNvcHlfdm04Nl9yZWdzX2Zyb21fdXNlcigmaW5mby5yZWdzLCAmdjg2LT5yZWdzLAogCQkJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0LCByZWdzMzIpIC0KIAkJCQkgICAgICAgc2l6ZW9mKGluZm8ucmVncykpOwogCXJldCA9IC1FRkFVTFQ7CiAJaWYgKHRtcCkKIAkJZ290byBvdXQ7Ci0JaW5mby5yZWdzMzIgPSAmcmVnczsKKwlpbmZvLnJlZ3MzMiA9IHJlZ3M7CiAJaW5mby52bTg2cGx1cy5pc192bTg2cHVzID0gMTsKIAl0c2stPnRocmVhZC52bTg2X2luZm8gPSAoc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqKXY4NjsKIAlkb19zeXNfdm04NigmaW5mbywgdHNrKTsKQEAgLTMyMyw3ICszMjMsNyBAQAogCWluZm8tPnJlZ3MzMi0+YXggPSAwOwogCXRzay0+dGhyZWFkLnNhdmVkX3NwMCA9IHRzay0+dGhyZWFkLnNwMDsKIAl0c2stPnRocmVhZC5zYXZlZF9mcyA9IGluZm8tPnJlZ3MzMi0+ZnM7Ci0Jc2F2ZXNlZ21lbnQoZ3MsIHRzay0+dGhyZWFkLnNhdmVkX2dzKTsKKwl0c2stPnRocmVhZC5zYXZlZF9ncyA9IGdldF91c2VyX2dzKGluZm8tPnJlZ3MzMik7CiAKIAl0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgZ2V0X2NwdSgpKTsKIAl0c2stPnRocmVhZC5zcDAgPSAodW5zaWduZWQgbG9uZykgJmluZm8tPlZNODZfVFNTX0VTUDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKaW5kZXggYmVmNThiNC4uMmNjNGE5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwpAQCAtNjgwLDEwICs2ODAsMTEgQEAKIAlwYXJhX2ZpbGwocHZfbW11X29wcy53cml0ZV9jcjIsIFNldENSMik7CiAJcGFyYV9maWxsKHB2X21tdV9vcHMud3JpdGVfY3IzLCBTZXRDUjMpOwogCXBhcmFfZmlsbChwdl9jcHVfb3BzLndyaXRlX2NyNCwgU2V0Q1I0KTsKLQlwYXJhX2ZpbGwocHZfaXJxX29wcy5zYXZlX2ZsLCBHZXRJbnRlcnJ1cHRNYXNrKTsKLQlwYXJhX2ZpbGwocHZfaXJxX29wcy5yZXN0b3JlX2ZsLCBTZXRJbnRlcnJ1cHRNYXNrKTsKLQlwYXJhX2ZpbGwocHZfaXJxX29wcy5pcnFfZGlzYWJsZSwgRGlzYWJsZUludGVycnVwdHMpOwotCXBhcmFfZmlsbChwdl9pcnFfb3BzLmlycV9lbmFibGUsIEVuYWJsZUludGVycnVwdHMpOworCisJcGFyYV9maWxsKHB2X2lycV9vcHMuc2F2ZV9mbC5mdW5jLCBHZXRJbnRlcnJ1cHRNYXNrKTsKKwlwYXJhX2ZpbGwocHZfaXJxX29wcy5yZXN0b3JlX2ZsLmZ1bmMsIFNldEludGVycnVwdE1hc2spOworCXBhcmFfZmlsbChwdl9pcnFfb3BzLmlycV9kaXNhYmxlLmZ1bmMsIERpc2FibGVJbnRlcnJ1cHRzKTsKKwlwYXJhX2ZpbGwocHZfaXJxX29wcy5pcnFfZW5hYmxlLmZ1bmMsIEVuYWJsZUludGVycnVwdHMpOwogCiAJcGFyYV9maWxsKHB2X2NwdV9vcHMud2JpbnZkLCBXQklOVkQpOwogCXBhcmFfZmlsbChwdl9jcHVfb3BzLnJlYWRfdHNjLCBSRFRTQyk7CkBAIC03OTcsOCArNzk4LDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0gICAgICAgcGFyYV9maWxsKGFwaWNfb3BzLT5yZWFkLCBBUElDUmVhZCk7Ci0gICAgICAgcGFyYV9maWxsKGFwaWNfb3BzLT53cml0ZSwgQVBJQ1dyaXRlKTsKKyAgICAgICBwYXJhX2ZpbGwoYXBpYy0+cmVhZCwgQVBJQ1JlYWQpOworICAgICAgIHBhcmFfZmlsbChhcGljLT53cml0ZSwgQVBJQ1dyaXRlKTsKICNlbmRpZgogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKaW5kZXggZTViMDg4Zi4uMzNhNzg4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS92bWkuaD4KICNpbmNsdWRlIDxhc20vdm1pX3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KQEAgLTI1Niw3ICsyNTUsNyBAQAogCSAqLwogCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX1NVU1BFTkQsIE5VTEwpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9TTVAKKyNpZmRlZiBDT05GSUdfU01QCiAJLyoKIAkgKiBYWFggaGFuZGxlX3BlcmNwdV9pcnEgb25seSBkZWZpbmVkIGZvciBTTVA7IHdlIG5lZWQgdG8gc3dpdGNoIG92ZXIKIAkgKiB0byB1c2luZyBpdCwgc2luY2UgdGhpcyBpcyBhIGxvY2FsIGludGVycnVwdCwgd2hpY2ggZWFjaCBDUFUgbXVzdApAQCAtMjg4LDggKzI4Nyw3IEBACiBzdGF0aWMgY3ljbGVfdCByZWFkX3JlYWxfY3ljbGVzKHZvaWQpCiB7CiAJY3ljbGVfdCByZXQgPSAoY3ljbGVfdCl2bWlfdGltZXJfb3BzLmdldF9jeWNsZV9jb3VudGVyKFZNSV9DWUNMRVNfUkVBTCk7Ci0JcmV0dXJuIHJldCA+PSBjbG9ja3NvdXJjZV92bWkuY3ljbGVfbGFzdCA/Ci0JCXJldCA6IGNsb2Nrc291cmNlX3ZtaS5jeWNsZV9sYXN0OworCXJldHVybiBtYXgocmV0LCBjbG9ja3NvdXJjZV92bWkuY3ljbGVfbGFzdCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2Vfdm1pID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwppbmRleCA4MmM2NzU1Li4wZDg2MDk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwpAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KIApAQCAtMTc4LDE0ICsxNzgsNyBAQAogCV9faW5pdHJhbWZzX2VuZCA9IC47CiAgIH0KICNlbmRpZgotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgLmRhdGEucGVyY3B1ICA6IEFUKEFERFIoLmRhdGEucGVyY3B1KSAtIExPQURfT0ZGU0VUKSB7Ci0JX19wZXJfY3B1X3N0YXJ0ID0gLjsKLQkqKC5kYXRhLnBlcmNwdS5wYWdlX2FsaWduZWQpCi0JKiguZGF0YS5wZXJjcHUpCi0JKiguZGF0YS5wZXJjcHUuc2hhcmVkX2FsaWduZWQpCi0JX19wZXJfY3B1X2VuZCA9IC47Ci0gIH0KKyAgUEVSQ1BVKFBBR0VfU0laRSkKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC8qIGZyZWVkIGFmdGVyIGluaXQgZW5kcyBoZXJlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMKaW5kZXggMWE2MTRjMC4uZmJmY2VkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMKQEAgLTUsNyArNSw4IEBACiAjZGVmaW5lIExPQURfT0ZGU0VUIF9fU1RBUlRfS0VSTkVMX21hcAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAKICN1bmRlZiBpMzg2CS8qIGluIGNhc2UgdGhlIHByZXByb2Nlc3NvciBpcyBhIDMyYml0IG9uZSAqLwogCkBAIC0xMywxMiArMTQsMTUgQEAKIE9VVFBVVF9BUkNIKGkzODY6eDg2LTY0KQogRU5UUlkocGh5c19zdGFydHVwXzY0KQogamlmZmllc182NCA9IGppZmZpZXM7Ci1fcHJveHlfcGRhID0gMTsKIFBIRFJTIHsKIAl0ZXh0IFBUX0xPQUQgRkxBR1MoNSk7CS8qIFJfRSAqLwogCWRhdGEgUFRfTE9BRCBGTEFHUyg3KTsJLyogUldFICovCiAJdXNlciBQVF9MT0FEIEZMQUdTKDcpOwkvKiBSV0UgKi8KIAlkYXRhLmluaXQgUFRfTE9BRCBGTEFHUyg3KTsJLyogUldFICovCisjaWZkZWYgQ09ORklHX1NNUAorCXBlcmNwdSBQVF9MT0FEIEZMQUdTKDcpOwkvKiBSV0UgKi8KKyNlbmRpZgorCWRhdGEuaW5pdDIgUFRfTE9BRCBGTEFHUyg3KTsJLyogUldFICovCiAJbm90ZSBQVF9OT1RFIEZMQUdTKDApOwkvKiBfX18gKi8KIH0KIFNFQ1RJT05TCkBAIC0yMDgsMTQgKzIxMiwyOCBAQAogICBfX2luaXRyYW1mc19lbmQgPSAuOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU01QCisgIC8qCisgICAqIHBlcmNwdSBvZmZzZXRzIGFyZSB6ZXJvLWJhc2VkIG9uIFNNUC4gIFBFUkNQVV9WQUREUigpIGNoYW5nZXMgdGhlCisgICAqIG91dHB1dCBQSERSLCBzbyB0aGUgbmV4dCBvdXRwdXQgc2VjdGlvbiAtIF9fZGF0YV9ub3NhdmUgLSBzaG91bGQKKyAgICogc3RhcnQgYW5vdGhlciBzZWN0aW9uIGRhdGEuaW5pdDIuICBBbHNvLCBwZGEgc2hvdWxkIGJlIGF0IHRoZSBoZWFkIG9mCisgICAqIHBlcmNwdSBhcmVhLiAgUHJlYWxsb2NhdGUgaXQgYW5kIGRlZmluZSB0aGUgcGVyY3B1IG9mZnNldCBzeW1ib2wKKyAgICogc28gdGhhdCBpdCBjYW4gYmUgYWNjZXNzZWQgYXMgYSBwZXJjcHUgdmFyaWFibGUuCisgICAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKKyAgUEVSQ1BVX1ZBRERSKDAsIDpwZXJjcHUpCisjZWxzZQogICBQRVJDUFUoUEFHRV9TSVpFKQorI2VuZGlmCiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX25vc2F2ZV9iZWdpbiA9IC47Ci0gIC5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7ICooLmRhdGEubm9zYXZlKSB9CisgIC5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7CisgICAgICAqKC5kYXRhLm5vc2F2ZSkKKyAgfSA6ZGF0YS5pbml0MiAvKiB1c2UgYW5vdGhlciBzZWN0aW9uIGRhdGEuaW5pdDIsIHNlZSBQRVJDUFVfVkFERFIoKSBhYm92ZSAqLwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19ub3NhdmVfZW5kID0gLjsKIApAQCAtMjM5LDggKzI1NywyMSBAQAogICBEV0FSRl9ERUJVRwogfQogCisgLyoKKyAgKiBQZXItY3B1IHN5bWJvbHMgd2hpY2ggbmVlZCB0byBiZSBvZmZzZXQgZnJvbSBfX3Blcl9jcHVfbG9hZAorICAqIGZvciB0aGUgYm9vdCBwcm9jZXNzb3IuCisgICovCisjZGVmaW5lIElOSVRfUEVSX0NQVSh4KSBpbml0X3Blcl9jcHVfXyMjeCA9IHBlcl9jcHVfXyMjeCArIF9fcGVyX2NwdV9sb2FkCitJTklUX1BFUl9DUFUoZ2R0X3BhZ2UpOworSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CisKIC8qCiAgKiBCdWlsZC10aW1lIGNoZWNrIG9uIHRoZSBpbWFnZSBzaXplOgogICovCiBBU1NFUlQoKF9lbmQgLSBfdGV4dCA8PSBLRVJORUxfSU1BR0VfU0laRSksCiAJImtlcm5lbCBpbWFnZSBiaWdnZXIgdGhhbiBLRVJORUxfSU1BR0VfU0laRSIpCisKKyNpZmRlZiBDT05GSUdfU01QCitBU1NFUlQoKHBlcl9jcHVfX2lycV9zdGFja191bmlvbiA9PSAwKSwKKyAgICAgICAgImlycV9zdGFja191bmlvbiBpcyBub3QgYXQgc3RhcnQgb2YgcGVyLWNwdSBhcmVhIik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCmluZGV4IGE2ODhmM2IuLjc0ZGU1NjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jaWYgZGVmaW5lZCBDT05GSUdfUENJICYmIGRlZmluZWQgQ09ORklHX1BBUkFWSVJUCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAvKgogICogSW50ZXJydXB0IGNvbnRyb2wgb24gdlNNUG93ZXJlZCBzeXN0ZW1zOgogICogfkFDIGlzIGEgc2hhZG93IG9mIElGLiAgSWYgSUYgaXMgJ29uJyBBQyBzaG91bGQgYmUgJ29mZicKQEAgLTM3LDYgKzM3LDcgQEAKIAkJZmxhZ3MgJj0gflg4Nl9FRkxBR1NfSUY7CiAJcmV0dXJuIGZsYWdzOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh2c21wX3NhdmVfZmwpOwogCiBzdGF0aWMgdm9pZCB2c21wX3Jlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTQ2LDYgKzQ3LDcgQEAKIAkJZmxhZ3MgfD0gWDg2X0VGTEFHU19BQzsKIAluYXRpdmVfcmVzdG9yZV9mbChmbGFncyk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHZzbXBfcmVzdG9yZV9mbCk7CiAKIHN0YXRpYyB2b2lkIHZzbXBfaXJxX2Rpc2FibGUodm9pZCkKIHsKQEAgLTUzLDYgKzU1LDcgQEAKIAogCW5hdGl2ZV9yZXN0b3JlX2ZsKChmbGFncyAmIH5YODZfRUZMQUdTX0lGKSB8IFg4Nl9FRkxBR1NfQUMpOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh2c21wX2lycV9kaXNhYmxlKTsKIAogc3RhdGljIHZvaWQgdnNtcF9pcnFfZW5hYmxlKHZvaWQpCiB7CkBAIC02MCw2ICs2Myw3IEBACiAKIAluYXRpdmVfcmVzdG9yZV9mbCgoZmxhZ3MgfCBYODZfRUZMQUdTX0lGKSAmICh+WDg2X0VGTEFHU19BQykpOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh2c21wX2lycV9lbmFibGUpOwogCiBzdGF0aWMgdW5zaWduZWQgX19pbml0X29yX21vZHVsZSB2c21wX3BhdGNoKHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaWJ1ZiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKQpAQCAtOTAsMTAgKzk0LDEwIEBACiAJICAgICAgIGNhcCwgY3RsKTsKIAlpZiAoY2FwICYgY3RsICYgKDEgPDwgNCkpIHsKIAkJLyogU2V0dXAgaXJxIG9wcyBhbmQgdHVybiBvbiB2U01QICBJUlEgZmFzdHBhdGggaGFuZGxpbmcgKi8KLQkJcHZfaXJxX29wcy5pcnFfZGlzYWJsZSA9IHZzbXBfaXJxX2Rpc2FibGU7Ci0JCXB2X2lycV9vcHMuaXJxX2VuYWJsZSAgPSB2c21wX2lycV9lbmFibGU7Ci0JCXB2X2lycV9vcHMuc2F2ZV9mbCAgPSB2c21wX3NhdmVfZmw7Ci0JCXB2X2lycV9vcHMucmVzdG9yZV9mbCAgPSB2c21wX3Jlc3RvcmVfZmw7CisJCXB2X2lycV9vcHMuaXJxX2Rpc2FibGUgPSBQVl9DQUxMRUVfU0FWRSh2c21wX2lycV9kaXNhYmxlKTsKKwkJcHZfaXJxX29wcy5pcnFfZW5hYmxlICA9IFBWX0NBTExFRV9TQVZFKHZzbXBfaXJxX2VuYWJsZSk7CisJCXB2X2lycV9vcHMuc2F2ZV9mbCAgPSBQVl9DQUxMRUVfU0FWRSh2c21wX3NhdmVfZmwpOworCQlwdl9pcnFfb3BzLnJlc3RvcmVfZmwgID0gUFZfQ0FMTEVFX1NBVkUodnNtcF9yZXN0b3JlX2ZsKTsKIAkJcHZfaW5pdF9vcHMucGF0Y2ggPSB2c21wX3BhdGNoOwogCiAJCWN0bCAmPSB+KDEgPDwgNCk7CkBAIC0xMTAsNyArMTE0LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBpc192c21wID0gLTE7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfdnNtcF9ib3godm9pZCkKQEAgLTEzNSwxNSArMTM4LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfdnNtcF9ib3godm9pZCkKLXsKLX0KLWludCBpc192c21wX2JveCh2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCiAKIHZvaWQgX19pbml0IHZzbXBfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwppbmRleCA2OTVlNDI2Li4zOTA5ZTNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwpAQCAtNTgsNSArNTgsMyBAQAogRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogRVhQT1JUX1NZTUJPTChpbml0X2xldmVsNF9wZ3QpOwogRVhQT1JUX1NZTUJPTChsb2FkX2dzX2luZGV4KTsKLQotRVhQT1JUX1NZTUJPTChfcHJveHlfcGRhKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggYjgxMTI1Zi4uMGEzMDNjM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC00LDYgKzQsMTAgQEAKIGNvbmZpZyBIQVZFX0tWTQogICAgICAgIGJvb2wKIAorY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKKyAgICAgICBib29sCisgICAgICAgZGVmYXVsdCB5CisKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKIAlkZXBlbmRzIG9uIEhBVkVfS1ZNIHx8IFg4NgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCA3MmJkMjc1Li5jMTNiYjkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjAxLDYgKzIwMSw5IEBACiAJaWYgKCFhdG9taWNfaW5jX2FuZF90ZXN0KCZwdC0+cGVuZGluZykpCiAJCXNldF9iaXQoS1ZNX1JFUV9QRU5ESU5HX1RJTUVSLCAmdmNwdTAtPnJlcXVlc3RzKTsKIAorCWlmICghcHQtPnJlaW5qZWN0KQorCQlhdG9taWNfc2V0KCZwdC0+cGVuZGluZywgMSk7CisKIAlpZiAodmNwdTAgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmdmNwdTAtPndxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1MC0+d3EpOwogCkBAIC01MzYsNiArNTM5LDE2IEBACiAJcGl0LT5waXRfc3RhdGUuaXJxX2FjayA9IDE7CiB9CiAKK3N0YXRpYyB2b2lkIHBpdF9tYXNrX25vdGlmZXIoc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbiwgYm9vbCBtYXNrKQoreworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBjb250YWluZXJfb2Yoa2ltbiwgc3RydWN0IGt2bV9waXQsIG1hc2tfbm90aWZpZXIpOworCisJaWYgKCFtYXNrKSB7CisJCWF0b21pY19zZXQoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5kaW5nLCAwKTsKKwkJcGl0LT5waXRfc3RhdGUuaXJxX2FjayA9IDE7CisJfQorfQorCiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7CkBAIC01NDUsOSArNTU4LDcgQEAKIAlpZiAoIXBpdCkKIAkJcmV0dXJuIE5VTEw7CiAKLQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCXBpdC0+aXJxX3NvdXJjZV9pZCA9IGt2bV9yZXF1ZXN0X2lycV9zb3VyY2VfaWQoa3ZtKTsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJaWYgKHBpdC0+aXJxX3NvdXJjZV9pZCA8IDApIHsKIAkJa2ZyZWUocGl0KTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01ODAsMTAgKzU5MSwxNCBAQAogCXBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllci5nc2kgPSAwOwogCXBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllci5pcnFfYWNrZWQgPSBrdm1fcGl0X2Fja19pcnE7CiAJa3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLCAmcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyKTsKKwlwaXRfc3RhdGUtPnBpdF90aW1lci5yZWluamVjdCA9IHRydWU7CiAJbXV0ZXhfdW5sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAogCWt2bV9waXRfcmVzZXQocGl0KTsKIAorCXBpdC0+bWFza19ub3RpZmllci5mdW5jID0gcGl0X21hc2tfbm90aWZlcjsKKwlrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLCAmcGl0LT5tYXNrX25vdGlmaWVyKTsKKwogCXJldHVybiBwaXQ7CiB9CiAKQEAgLTU5Miw2ICs2MDcsOCBAQAogCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAogCWlmIChrdm0tPmFyY2gudnBpdCkgeworCQlrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihrdm0sIDAsCisJCQkJCSAgICAgICAma3ZtLT5hcmNoLnZwaXQtPm1hc2tfbm90aWZpZXIpOwogCQltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCQl0aW1lciA9ICZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci50aW1lcjsKIAkJaHJ0aW1lcl9jYW5jZWwodGltZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmggYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaAppbmRleCA0MTc4MDIyLi42YWNiZTRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaAorKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaApAQCAtOSw2ICs5LDcgQEAKIAlzNjQgcGVyaW9kOyAvKiB1bml0OiBucyAqLwogCXM2NCBzY2hlZHVsZWQ7CiAJYXRvbWljX3QgcGVuZGluZzsKKwlib29sIHJlaW5qZWN0OwogfTsKIAogc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUgewpAQCAtNDUsNiArNDYsNyBAQAogCXN0cnVjdCBrdm0gKmt2bTsKIAlzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgcGl0X3N0YXRlOwogCWludCBpcnFfc291cmNlX2lkOworCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgbWFza19ub3RpZmllcjsKIH07CiAKICNkZWZpbmUgS1ZNX1BJVF9CQVNFX0FERFJFU1MJICAgIDB4NDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1OS5jIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKaW5kZXggMTc5ZGNiMC4uMWNjYjUwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAKIHN0YXRpYyB2b2lkIHBpY19sb2NrKHN0cnVjdCBrdm1fcGljICpzKQorCV9fYWNxdWlyZXMoJnMtPmxvY2spCiB7CiAJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcGljX3VubG9jayhzdHJ1Y3Qga3ZtX3BpYyAqcykKKwlfX3JlbGVhc2VzKCZzLT5sb2NrKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHMtPmt2bTsKIAl1bnNpZ25lZCBhY2tzID0gcy0+cGVuZGluZ19hY2tzOwpAQCAtNDksNyArNTEsOCBAQAogCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAogCXdoaWxlIChhY2tzKSB7Ci0JCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgX19mZnMoYWNrcykpOworCQlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIFNFTEVDVF9QSUMoX19mZnMoYWNrcykpLAorCQkJCSAgICAgX19mZnMoYWNrcykpOwogCQlhY2tzICY9IGFja3MgLSAxOwogCX0KIApAQCAtNzYsMTIgKzc5LDEzIEBACiAvKgogICogc2V0IGlycSBsZXZlbC4gSWYgYW4gZWRnZSBpcyBkZXRlY3RlZCwgdGhlbiB0aGUgSVJSIGlzIHNldCB0byAxCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwaWNfc2V0X2lycTEoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW5saW5lIGludCBwaWNfc2V0X2lycTEoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7Ci0JaW50IG1hc2s7CisJaW50IG1hc2ssIHJldCA9IDE7CiAJbWFzayA9IDEgPDwgaXJxOwogCWlmIChzLT5lbGNyICYgbWFzaykJLyogbGV2ZWwgdHJpZ2dlcmVkICovCiAJCWlmIChsZXZlbCkgeworCQkJcmV0ID0gIShzLT5pcnIgJiBtYXNrKTsKIAkJCXMtPmlyciB8PSBtYXNrOwogCQkJcy0+bGFzdF9pcnIgfD0gbWFzazsKIAkJfSBlbHNlIHsKQEAgLTkwLDExICs5NCwxNSBAQAogCQl9CiAJZWxzZQkvKiBlZGdlIHRyaWdnZXJlZCAqLwogCQlpZiAobGV2ZWwpIHsKLQkJCWlmICgocy0+bGFzdF9pcnIgJiBtYXNrKSA9PSAwKQorCQkJaWYgKChzLT5sYXN0X2lyciAmIG1hc2spID09IDApIHsKKwkJCQlyZXQgPSAhKHMtPmlyciAmIG1hc2spOwogCQkJCXMtPmlyciB8PSBtYXNrOworCQkJfQogCQkJcy0+bGFzdF9pcnIgfD0gbWFzazsKIAkJfSBlbHNlCiAJCQlzLT5sYXN0X2lyciAmPSB+bWFzazsKKworCXJldHVybiAocy0+aW1yICYgbWFzaykgPyAtMSA6IHJldDsKIH0KIAogLyoKQEAgLTE3MSwxNiArMTc5LDE5IEBACiAJcGljX3VubG9jayhzKTsKIH0KIAotdm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitpbnQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fcGljICpzID0gb3BhcXVlOworCWludCByZXQgPSAtMTsKIAogCXBpY19sb2NrKHMpOwogCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBQSUNfTlVNX1BJTlMpIHsKLQkJcGljX3NldF9pcnExKCZzLT5waWNzW2lycSA+PiAzXSwgaXJxICYgNywgbGV2ZWwpOworCQlyZXQgPSBwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CiAJCXBpY191cGRhdGVfaXJxKHMpOwogCX0KIAlwaWNfdW5sb2NrKHMpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTIzMiw3ICsyNDMsNyBAQAogCX0KIAlwaWNfdXBkYXRlX2lycShzKTsKIAlwaWNfdW5sb2NrKHMpOwotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxKTsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIFNFTEVDVF9QSUMoaXJxKSwgaXJxKTsKIAogCXJldHVybiBpbnRubzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuaCBiL2FyY2gveDg2L2t2bS9pcnEuaAppbmRleCA4MjU3OWVlLi45ZjU5MzE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmgKKysrIGIvYXJjaC94ODYva3ZtL2lycS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAibGFwaWMuaCIKIAogI2RlZmluZSBQSUNfTlVNX1BJTlMgMTYKKyNkZWZpbmUgU0VMRUNUX1BJQyhpcnEpIFwKKwkoKGlycSkgPCA4ID8gS1ZNX0lSUUNISVBfUElDX01BU1RFUiA6IEtWTV9JUlFDSElQX1BJQ19TTEFWRSkKIAogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fdmNwdTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmggYi9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCmluZGV4IDhlNWVlOTkuLmVkNjZlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKKysrIGIvYXJjaC94ODYva3ZtL2t2bV9zdm0uaApAQCAtMTgsNyArMTgsNiBAQAogfTsKIAogI2RlZmluZSBOUl9IT1NUX1NBVkVfVVNFUl9NU1JTIEFSUkFZX1NJWkUoaG9zdF9zYXZlX3VzZXJfbXNycykKLSNkZWZpbmUgTlVNX0RCX1JFR1MgNAogCiBzdHJ1Y3Qga3ZtX3ZjcHU7CiAKQEAgLTI5LDE4ICsyOCwyMyBAQAogCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOwogCXVpbnQ2NF90IGFzaWRfZ2VuZXJhdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgZGJfcmVnc1tOVU1fREJfUkVHU107Ci0KIAl1NjQgbmV4dF9yaXA7CiAKIAl1NjQgaG9zdF91c2VyX21zcnNbTlJfSE9TVF9TQVZFX1VTRVJfTVNSU107CiAJdTY0IGhvc3RfZ3NfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGhvc3RfY3IyOwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kYl9yZWdzW05VTV9EQl9SRUdTXTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CiAKIAl1MzIgKm1zcnBtOworCXN0cnVjdCB2bWNiICpoc2F2ZTsKKwl1NjQgaHNhdmVfbXNyOworCisJdTY0IG5lc3RlZF92bWNiOworCisJLyogVGhlc2UgYXJlIHRoZSBtZXJnZWQgdmVjdG9ycyAqLworCXUzMiAqbmVzdGVkX21zcnBtOworCisJLyogZ3BhIHBvaW50ZXJzIHRvIHRoZSByZWFsIHZlY3RvcnMgKi8KKwl1NjQgbmVzdGVkX3ZtY2JfbXNycG07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCAyZDQ0NzdjLi4yYTM2ZjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNDUsMTEgKzE0NSwyMCBAQAogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICptb3JlOwogfTsKIAotc3RydWN0IGt2bV9zaGFkb3dfd2FsayB7Ci0JaW50ICgqZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKndhbGssIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJICAgICB1NjQgYWRkciwgdTY0ICpzcHRlLCBpbnQgbGV2ZWwpOworc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciB7CisJdTY0IGFkZHI7CisJaHBhX3Qgc2hhZG93X2FkZHI7CisJaW50IGxldmVsOworCXU2NCAqc3B0ZXA7CisJdW5zaWduZWQgaW5kZXg7CiB9OwogCisjZGVmaW5lIGZvcl9lYWNoX3NoYWRvd19lbnRyeShfdmNwdSwgX2FkZHIsIF93YWxrZXIpICAgIFwKKwlmb3IgKHNoYWRvd193YWxrX2luaXQoJihfd2Fsa2VyKSwgX3ZjcHUsIF9hZGRyKTsJXAorCSAgICAgc2hhZG93X3dhbGtfb2theSgmKF93YWxrZXIpKTsJCQlcCisJICAgICBzaGFkb3dfd2Fsa19uZXh0KCYoX3dhbGtlcikpKQorCisKIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgewogCWludCAoKmVudHJ5KSAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspOwogfTsKQEAgLTM0Myw3ICszNTIsNiBAQAogCiAJQlVHX09OKCFtYy0+bm9ianMpOwogCXAgPSBtYy0+b2JqZWN0c1stLW1jLT5ub2Jqc107Ci0JbWVtc2V0KHAsIDAsIHNpemUpOwogCXJldHVybiBwOwogfQogCkBAIC03OTQsMTAgKzgwMiw4IEBACiAJc2V0X3BhZ2VfcHJpdmF0ZSh2aXJ0X3RvX3BhZ2Uoc3AtPnNwdCksICh1bnNpZ25lZCBsb25nKXNwKTsKIAlsaXN0X2FkZCgmc3AtPmxpbmssICZ2Y3B1LT5rdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnNwLT5vb3NfbGluayk7Ci0JQVNTRVJUKGlzX2VtcHR5X3NoYWRvd19wYWdlKHNwLT5zcHQpKTsKIAliaXRtYXBfemVybyhzcC0+c2xvdF9iaXRtYXAsIEtWTV9NRU1PUllfU0xPVFMgKyBLVk1fUFJJVkFURV9NRU1fU0xPVFMpOwogCXNwLT5tdWx0aW1hcHBlZCA9IDA7Ci0Jc3AtPmdsb2JhbCA9IDE7CiAJc3AtPnBhcmVudF9wdGUgPSBwYXJlbnRfcHRlOwogCS0tdmNwdS0+a3ZtLT5hcmNoLm5fZnJlZV9tbXVfcGFnZXM7CiAJcmV0dXJuIHNwOwpAQCAtOTgzLDggKzk4OSw4IEBACiAJICAgICBpZHggPCA1MTI7CQkJCQlcCiAJICAgICBpZHggPSBmaW5kX25leHRfYml0KGJpdG1hcCwgNTEyLCBpZHgrMSkpCiAKLWludCBtbXVfcGFnZXNfYWRkKHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKLQkJICAgaW50IGlkeCkKK3N0YXRpYyBpbnQgbW11X3BhZ2VzX2FkZChzdHJ1Y3Qga3ZtX21tdV9wYWdlcyAqcHZlYywgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkgaW50IGlkeCkKIHsKIAlpbnQgaTsKIApAQCAtMTA1OSw3ICsxMDY1LDcgQEAKIAlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwogCWJ1Y2tldCA9ICZrdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoc3AsIG5vZGUsIGJ1Y2tldCwgaGFzaF9saW5rKQotCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbAorCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLmRpcmVjdAogCQkgICAgJiYgIXNwLT5yb2xlLmludmFsaWQpIHsKIAkJCXBncHJpbnRrKCIlczogZm91bmQgcm9sZSAleFxuIiwKIAkJCQkgX19mdW5jX18sIHNwLT5yb2xlLndvcmQpOwpAQCAtMTExNSw4ICsxMTIxLDkgQEAKIAkJCWkgPCBwdmVjLm5yICYmICh7IHNwID0gcHZlYy5wYWdlW2ldLnNwOyAxO30pOwlcCiAJCQlpID0gbW11X3BhZ2VzX25leHQoJnB2ZWMsICZwYXJlbnRzLCBpKSkKIAotaW50IG1tdV9wYWdlc19uZXh0KHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLCBzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cywKLQkJICAgaW50IGkpCitzdGF0aWMgaW50IG1tdV9wYWdlc19uZXh0KHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLAorCQkJICBzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cywKKwkJCSAgaW50IGkpCiB7CiAJaW50IG47CiAKQEAgLTExMzUsNyArMTE0Miw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXZvaWQgbW11X3BhZ2VzX2NsZWFyX3BhcmVudHMoc3RydWN0IG1tdV9wYWdlX3BhdGggKnBhcmVudHMpCitzdGF0aWMgdm9pZCBtbXVfcGFnZXNfY2xlYXJfcGFyZW50cyhzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cykKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOwpAQCAtMTE5Myw3ICsxMjAwLDcgQEAKIAkJCQkJICAgICBnZm5fdCBnZm4sCiAJCQkJCSAgICAgZ3ZhX3QgZ2FkZHIsCiAJCQkJCSAgICAgdW5zaWduZWQgbGV2ZWwsCi0JCQkJCSAgICAgaW50IG1ldGFwaHlzaWNhbCwKKwkJCQkJICAgICBpbnQgZGlyZWN0LAogCQkJCQkgICAgIHVuc2lnbmVkIGFjY2VzcywKIAkJCQkJICAgICB1NjQgKnBhcmVudF9wdGUpCiB7CkBAIC0xMjA0LDEwICsxMjExLDkgQEAKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKIAotCXJvbGUud29yZCA9IDA7Ci0Jcm9sZS5nbGV2ZWxzID0gdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbDsKKwlyb2xlID0gdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlOwogCXJvbGUubGV2ZWwgPSBsZXZlbDsKLQlyb2xlLm1ldGFwaHlzaWNhbCA9IG1ldGFwaHlzaWNhbDsKKwlyb2xlLmRpcmVjdCA9IGRpcmVjdDsKIAlyb2xlLmFjY2VzcyA9IGFjY2VzczsKIAlpZiAodmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCA8PSBQVDMyX1JPT1RfTEVWRUwpIHsKIAkJcXVhZHJhbnQgPSBnYWRkciA+PiAoUEFHRV9TSElGVCArIChQVDY0X1BUX0JJVFMgKiBsZXZlbCkpOwpAQCAtMTI0Miw4ICsxMjQ4LDkgQEAKIAlwZ3ByaW50aygiJXM6IGFkZGluZyBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLCBnZm4sIHJvbGUud29yZCk7CiAJc3AtPmdmbiA9IGdmbjsKIAlzcC0+cm9sZSA9IHJvbGU7CisJc3AtPmdsb2JhbCA9IHJvbGUuY3I0X3BnZTsKIAlobGlzdF9hZGRfaGVhZCgmc3AtPmhhc2hfbGluaywgYnVja2V0KTsKLQlpZiAoIW1ldGFwaHlzaWNhbCkgeworCWlmICghZGlyZWN0KSB7CiAJCWlmIChybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBnZm4pKQogCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJCWFjY291bnRfc2hhZG93ZWQodmNwdS0+a3ZtLCBnZm4pOwpAQCAtMTI1NSwzNSArMTI2MiwzNSBAQAogCXJldHVybiBzcDsKIH0KIAotc3RhdGljIGludCB3YWxrX3NoYWRvdyhzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICp3YWxrZXIsCi0JCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyKQorc3RhdGljIHZvaWQgc2hhZG93X3dhbGtfaW5pdChzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yICppdGVyYXRvciwKKwkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkcikKIHsKLQlocGFfdCBzaGFkb3dfYWRkcjsKLQlpbnQgbGV2ZWw7Ci0JaW50IHI7Ci0JdTY0ICpzcHRlcDsKLQl1bnNpZ25lZCBpbmRleDsKLQotCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7Ci0JbGV2ZWwgPSB2Y3B1LT5hcmNoLm1tdS5zaGFkb3dfcm9vdF9sZXZlbDsKLQlpZiAobGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkgewotCQlzaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnBhZV9yb290WyhhZGRyID4+IDMwKSAmIDNdOwotCQlzaGFkb3dfYWRkciAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOwotCQlpZiAoIXNoYWRvd19hZGRyKQotCQkJcmV0dXJuIDE7Ci0JCS0tbGV2ZWw7CisJaXRlcmF0b3ItPmFkZHIgPSBhZGRyOworCWl0ZXJhdG9yLT5zaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOworCWl0ZXJhdG9yLT5sZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOworCWlmIChpdGVyYXRvci0+bGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkgeworCQlpdGVyYXRvci0+c2hhZG93X2FkZHIKKwkJCT0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107CisJCWl0ZXJhdG9yLT5zaGFkb3dfYWRkciAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOworCQktLWl0ZXJhdG9yLT5sZXZlbDsKKwkJaWYgKCFpdGVyYXRvci0+c2hhZG93X2FkZHIpCisJCQlpdGVyYXRvci0+bGV2ZWwgPSAwOwogCX0KK30KIAotCXdoaWxlIChsZXZlbCA+PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7Ci0JCWluZGV4ID0gU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKTsKLQkJc3B0ZXAgPSAoKHU2NCAqKV9fdmEoc2hhZG93X2FkZHIpKSArIGluZGV4OwotCQlyID0gd2Fsa2VyLT5lbnRyeSh3YWxrZXIsIHZjcHUsIGFkZHIsIHNwdGVwLCBsZXZlbCk7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7Ci0JCXNoYWRvd19hZGRyID0gKnNwdGVwICYgUFQ2NF9CQVNFX0FERFJfTUFTSzsKLQkJLS1sZXZlbDsKLQl9Ci0JcmV0dXJuIDA7CitzdGF0aWMgYm9vbCBzaGFkb3dfd2Fsa19va2F5KHN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgKml0ZXJhdG9yKQoreworCWlmIChpdGVyYXRvci0+bGV2ZWwgPCBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlyZXR1cm4gZmFsc2U7CisJaXRlcmF0b3ItPmluZGV4ID0gU0hBRE9XX1BUX0lOREVYKGl0ZXJhdG9yLT5hZGRyLCBpdGVyYXRvci0+bGV2ZWwpOworCWl0ZXJhdG9yLT5zcHRlcAk9ICgodTY0ICopX192YShpdGVyYXRvci0+c2hhZG93X2FkZHIpKSArIGl0ZXJhdG9yLT5pbmRleDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2hhZG93X3dhbGtfbmV4dChzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yICppdGVyYXRvcikKK3sKKwlpdGVyYXRvci0+c2hhZG93X2FkZHIgPSAqaXRlcmF0b3ItPnNwdGVwICYgUFQ2NF9CQVNFX0FERFJfTUFTSzsKKwktLWl0ZXJhdG9yLT5sZXZlbDsKIH0KIAogc3RhdGljIHZvaWQga3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihzdHJ1Y3Qga3ZtICprdm0sCkBAIC0xMzg4LDcgKzEzOTUsNyBAQAogCWt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oa3ZtLCBzcCk7CiAJa3ZtX21tdV91bmxpbmtfcGFyZW50cyhrdm0sIHNwKTsKIAlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKLQlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLmRpcmVjdCkKIAkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJaWYgKHNwLT51bnN5bmMpCiAJCWt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoa3ZtLCBzcCk7CkBAIC0xNDUxLDcgKzE0NTgsNyBAQAogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykKLQkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5tZXRhcGh5c2ljYWwpIHsKKwkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmICFzcC0+cm9sZS5kaXJlY3QpIHsKIAkJCXBncHJpbnRrKCIlczogZ2ZuICVseCByb2xlICV4XG4iLCBfX2Z1bmNfXywgZ2ZuLAogCQkJCSBzcC0+cm9sZS53b3JkKTsKIAkJCXIgPSAxOwpAQCAtMTQ2MywxMSArMTQ3MCwyMCBAQAogCiBzdGF0aWMgdm9pZCBtbXVfdW5zaGFkb3coc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CisJdW5zaWduZWQgaW5kZXg7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5uOwogCi0Jd2hpbGUgKChzcCA9IGt2bV9tbXVfbG9va3VwX3BhZ2Uoa3ZtLCBnZm4pKSAhPSBOVUxMKSB7Ci0JCXBncHJpbnRrKCIlczogemFwICVseCAleFxuIiwgX19mdW5jX18sIGdmbiwgc3AtPnJvbGUud29yZCk7Ci0JCWt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCk7CisJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKKwlidWNrZXQgPSAma3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsIG5uLCBidWNrZXQsIGhhc2hfbGluaykgeworCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLmRpcmVjdAorCQkgICAgJiYgIXNwLT5yb2xlLmludmFsaWQpIHsKKwkJCXBncHJpbnRrKCIlczogemFwICVseCAleFxuIiwKKwkJCQkgX19mdW5jX18sIGdmbiwgc3AtPnJvbGUud29yZCk7CisJCQlrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApOworCQl9CiAJfQogfQogCkBAIC0xNjIyLDcgKzE2MzgsNyBAQAogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJLyogZG9uJ3QgdW5zeW5jIGlmIHBhZ2V0YWJsZSBpcyBzaGFkb3dlZCB3aXRoIG11bHRpcGxlIHJvbGVzICovCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgewotCQlpZiAocy0+Z2ZuICE9IHNwLT5nZm4gfHwgcy0+cm9sZS5tZXRhcGh5c2ljYWwpCisJCWlmIChzLT5nZm4gIT0gc3AtPmdmbiB8fCBzLT5yb2xlLmRpcmVjdCkKIAkJCWNvbnRpbnVlOwogCQlpZiAocy0+cm9sZS53b3JkICE9IHNwLT5yb2xlLndvcmQpCiAJCQlyZXR1cm4gMTsKQEAgLTE2NjksOCArMTY4NSw2IEBACiAJdTY0IG10X21hc2sgPSBzaGFkb3dfbXRfbWFzazsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc2hhZG93X3B0ZSkpOwogCi0JaWYgKCEodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X1BHRSkpCi0JCWdsb2JhbCA9IDA7CiAJaWYgKCFnbG9iYWwgJiYgc3AtPmdsb2JhbCkgewogCQlzcC0+Z2xvYmFsID0gMDsKIAkJaWYgKHNwLT51bnN5bmMpIHsKQEAgLTE3NzcsMTIgKzE3OTEsOCBAQAogCQkJcGdwcmludGsoImhmbiBvbGQgJWx4IG5ldyAlbHhcbiIsCiAJCQkJIHNwdGVfdG9fcGZuKCpzaGFkb3dfcHRlKSwgcGZuKTsKIAkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc2hhZG93X3B0ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobGFyZ2VwYWdlKQotCQkJCXdhc19ybWFwcGVkID0gaXNfbGFyZ2VfcHRlKCpzaGFkb3dfcHRlKTsKLQkJCWVsc2UKLQkJCQl3YXNfcm1hcHBlZCA9IDE7Ci0JCX0KKwkJfSBlbHNlCisJCQl3YXNfcm1hcHBlZCA9IDE7CiAJfQogCWlmIChzZXRfc3B0ZSh2Y3B1LCBzaGFkb3dfcHRlLCBwdGVfYWNjZXNzLCB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKIAkJICAgICAgZGlydHksIGxhcmdlcGFnZSwgZ2xvYmFsLCBnZm4sIHBmbiwgc3BlY3VsYXRpdmUsIHRydWUpKSB7CkBAIC0xODIwLDY3ICsxODMwLDQyIEBACiB7CiB9CiAKLXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgewotCXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgd2Fsa2VyOwotCXBmbl90IHBmbjsKLQlpbnQgd3JpdGU7Ci0JaW50IGxhcmdlcGFnZTsKLQlpbnQgcHRfd3JpdGU7Ci19OwotCi1zdGF0aWMgaW50IGRpcmVjdF9tYXBfZW50cnkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3dhbGssCi0JCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIHU2NCBhZGRyLCB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayAqd2FsayA9Ci0JCWNvbnRhaW5lcl9vZihfd2Fsaywgc3RydWN0IGRpcmVjdF9zaGFkb3dfd2Fsaywgd2Fsa2VyKTsKLQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlnZm5fdCBwc2V1ZG9fZ2ZuOwotCWdmbl90IGdmbiA9IGFkZHIgPj4gUEFHRV9TSElGVDsKLQotCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JICAgIHx8ICh3YWxrLT5sYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgewotCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCi0JCQkgICAgIDAsIHdhbGstPndyaXRlLCAxLCAmd2Fsay0+cHRfd3JpdGUsCi0JCQkgICAgIHdhbGstPmxhcmdlcGFnZSwgMCwgZ2ZuLCB3YWxrLT5wZm4sIGZhbHNlKTsKLQkJKyt2Y3B1LT5zdGF0LnBmX2ZpeGVkOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKnNwdGVwID09IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKSB7Ci0JCXBzZXVkb19nZm4gPSAoYWRkciAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwotCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcHNldWRvX2dmbiwgKGd2YV90KWFkZHIsIGxldmVsIC0gMSwKLQkJCQkgICAgICAxLCBBQ0NfQUxMLCBzcHRlcCk7Ci0JCWlmICghc3ApIHsKLQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOwotCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHdhbGstPnBmbik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXNldF9zaGFkb3dfcHRlKHNwdGVwLAotCQkJICAgICAgIF9fcGEoc3AtPnNwdCkKLQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKLQkJCSAgICAgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19kaXJlY3RfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgdiwgaW50IHdyaXRlLAogCQkJaW50IGxhcmdlcGFnZSwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4pCiB7Ci0JaW50IHI7Ci0Jc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayB3YWxrZXIgPSB7Ci0JCS53YWxrZXIgPSB7IC5lbnRyeSA9IGRpcmVjdF9tYXBfZW50cnksIH0sCi0JCS5wZm4gPSBwZm4sCi0JCS5sYXJnZXBhZ2UgPSBsYXJnZXBhZ2UsCi0JCS53cml0ZSA9IHdyaXRlLAotCQkucHRfd3JpdGUgPSAwLAotCX07CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKwlpbnQgcHRfd3JpdGUgPSAwOworCWdmbl90IHBzZXVkb19nZm47CiAKLQlyID0gd2Fsa19zaGFkb3coJndhbGtlci53YWxrZXIsIHZjcHUsIGdmbiA8PCBQQUdFX1NISUZUKTsKLQlpZiAociA8IDApCi0JCXJldHVybiByOwotCXJldHVybiB3YWxrZXIucHRfd3JpdGU7CisJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsICh1NjQpZ2ZuIDw8IFBBR0VfU0hJRlQsIGl0ZXJhdG9yKSB7CisJCWlmIChpdGVyYXRvci5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCisJCSAgICB8fCAobGFyZ2VwYWdlICYmIGl0ZXJhdG9yLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBpdGVyYXRvci5zcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKKwkJCQkgICAgIDAsIHdyaXRlLCAxLCAmcHRfd3JpdGUsCisJCQkJICAgICBsYXJnZXBhZ2UsIDAsIGdmbiwgcGZuLCBmYWxzZSk7CisJCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgqaXRlcmF0b3Iuc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKKwkJCXBzZXVkb19nZm4gPSAoaXRlcmF0b3IuYWRkciAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOworCQkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sIGl0ZXJhdG9yLmFkZHIsCisJCQkJCSAgICAgIGl0ZXJhdG9yLmxldmVsIC0gMSwKKwkJCQkJICAgICAgMSwgQUNDX0FMTCwgaXRlcmF0b3Iuc3B0ZXApOworCQkJaWYgKCFzcCkgeworCQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOworCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCisJCQlzZXRfc2hhZG93X3B0ZShpdGVyYXRvci5zcHRlcCwKKwkJCQkgICAgICAgX19wYShzcC0+c3B0KQorCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKKwkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7CisJCX0KKwl9CisJcmV0dXJuIHB0X3dyaXRlOwogfQogCiBzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbikKQEAgLTE5NjIsNyArMTk0Nyw3IEBACiAJaW50IGk7CiAJZ2ZuX3Qgcm9vdF9nZm47CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7Ci0JaW50IG1ldGFwaHlzaWNhbCA9IDA7CisJaW50IGRpcmVjdCA9IDA7CiAKIAlyb290X2dmbiA9IHZjcHUtPmFyY2guY3IzID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTE5NzEsMTggKzE5NTYsMTggQEAKIAogCQlBU1NFUlQoIVZBTElEX1BBR0Uocm9vdCkpOwogCQlpZiAodGRwX2VuYWJsZWQpCi0JCQltZXRhcGh5c2ljYWwgPSAxOworCQkJZGlyZWN0ID0gMTsKIAkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHJvb3RfZ2ZuLCAwLAotCQkJCSAgICAgIFBUNjRfUk9PVF9MRVZFTCwgbWV0YXBoeXNpY2FsLAorCQkJCSAgICAgIFBUNjRfUk9PVF9MRVZFTCwgZGlyZWN0LAogCQkJCSAgICAgIEFDQ19BTEwsIE5VTEwpOwogCQlyb290ID0gX19wYShzcC0+c3B0KTsKIAkJKytzcC0+cm9vdF9jb3VudDsKIAkJdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEgPSByb290OwogCQlyZXR1cm47CiAJfQotCW1ldGFwaHlzaWNhbCA9ICFpc19wYWdpbmcodmNwdSk7CisJZGlyZWN0ID0gIWlzX3BhZ2luZyh2Y3B1KTsKIAlpZiAodGRwX2VuYWJsZWQpCi0JCW1ldGFwaHlzaWNhbCA9IDE7CisJCWRpcmVjdCA9IDE7CiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewogCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbaV07CiAKQEAgLTE5OTYsNyArMTk4MSw3IEBACiAJCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCA9PSAwKQogCQkJcm9vdF9nZm4gPSAwOwogCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcm9vdF9nZm4sIGkgPDwgMzAsCi0JCQkJICAgICAgUFQzMl9ST09UX0xFVkVMLCBtZXRhcGh5c2ljYWwsCisJCQkJICAgICAgUFQzMl9ST09UX0xFVkVMLCBkaXJlY3QsCiAJCQkJICAgICAgQUNDX0FMTCwgTlVMTCk7CiAJCXJvb3QgPSBfX3BhKHNwLT5zcHQpOwogCQkrK3NwLT5yb290X2NvdW50OwpAQCAtMjI1MSwxNyArMjIzNiwyMyBAQAogCiBzdGF0aWMgaW50IGluaXRfa3ZtX3NvZnRtbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWludCByOworCiAJQVNTRVJUKHZjcHUpOwogCUFTU0VSVCghVkFMSURfUEFHRSh2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSkpOwogCiAJaWYgKCFpc19wYWdpbmcodmNwdSkpCi0JCXJldHVybiBub25wYWdpbmdfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gbm9ucGFnaW5nX2luaXRfY29udGV4dCh2Y3B1KTsKIAllbHNlIGlmIChpc19sb25nX21vZGUodmNwdSkpCi0JCXJldHVybiBwYWdpbmc2NF9pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBwYWdpbmc2NF9pbml0X2NvbnRleHQodmNwdSk7CiAJZWxzZSBpZiAoaXNfcGFlKHZjcHUpKQotCQlyZXR1cm4gcGFnaW5nMzJFX2luaXRfY29udGV4dCh2Y3B1KTsKKwkJciA9IHBhZ2luZzMyRV9pbml0X2NvbnRleHQodmNwdSk7CiAJZWxzZQotCQlyZXR1cm4gcGFnaW5nMzJfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gcGFnaW5nMzJfaW5pdF9jb250ZXh0KHZjcHUpOworCisJdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlLmdsZXZlbHMgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9rdm1fbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTI0OTIsNyArMjQ4Myw3IEBACiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsIG4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7Ci0JCWlmIChzcC0+Z2ZuICE9IGdmbiB8fCBzcC0+cm9sZS5tZXRhcGh5c2ljYWwgfHwgc3AtPnJvbGUuaW52YWxpZCkKKwkJaWYgKHNwLT5nZm4gIT0gZ2ZuIHx8IHNwLT5yb2xlLmRpcmVjdCB8fCBzcC0+cm9sZS5pbnZhbGlkKQogCQkJY29udGludWU7CiAJCXB0ZV9zaXplID0gc3AtPnJvbGUuZ2xldmVscyA9PSBQVDMyX1JPT1RfTEVWRUwgPyA0IDogODsKIAkJbWlzYWxpZ25lZCA9IChvZmZzZXQgXiAob2Zmc2V0ICsgYnl0ZXMgLSAxKSkgJiB+KHB0ZV9zaXplIC0gMSk7CkBAIC0zMTMwLDcgKzMxMjEsNyBAQAogCWdmbl90IGdmbjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3AsICZ2Y3B1LT5rdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcywgbGluaykgewotCQlpZiAoc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCQlpZiAoc3AtPnJvbGUuZGlyZWN0KQogCQkJY29udGludWU7CiAKIAkJZ2ZuID0gdW5hbGlhc19nZm4odmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCAyNThlNWQ1Li5lYWFiMjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKKysrIGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpc19sb25nX21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gdmNwdS0+YXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfTE1FOworCXJldHVybiB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9MTUE7CiAjZWxzZQogCXJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDlmZDc4YjYuLjZiZDcwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaWYgUFRUWVBFID09IDY0CiAJI2RlZmluZSBwdF9lbGVtZW50X3QgdTY0CiAJI2RlZmluZSBndWVzdF93YWxrZXIgZ3Vlc3Rfd2Fsa2VyNjQKLQkjZGVmaW5lIHNoYWRvd193YWxrZXIgc2hhZG93X3dhbGtlcjY0CiAJI2RlZmluZSBGTkFNRShuYW1lKSBwYWdpbmcjIzY0XyMjbmFtZQogCSNkZWZpbmUgUFRfQkFTRV9BRERSX01BU0sgUFQ2NF9CQVNFX0FERFJfTUFTSwogCSNkZWZpbmUgUFRfRElSX0JBU0VfQUREUl9NQVNLIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLCkBAIC00Miw3ICs0MSw2IEBACiAjZWxpZiBQVFRZUEUgPT0gMzIKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1MzIKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXIzMgotCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyMzIKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjMzJfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDMyX0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQzMl9ESVJfQkFTRV9BRERSX01BU0sKQEAgLTczLDE4ICs3MSw2IEBACiAJdTMyIGVycm9yX2NvZGU7CiB9OwogCi1zdHJ1Y3Qgc2hhZG93X3dhbGtlciB7Ci0Jc3RydWN0IGt2bV9zaGFkb3dfd2FsayB3YWxrZXI7Ci0Jc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3Vlc3Rfd2Fsa2VyOwotCWludCB1c2VyX2ZhdWx0OwotCWludCB3cml0ZV9mYXVsdDsKLQlpbnQgbGFyZ2VwYWdlOwotCWludCAqcHR3cml0ZTsKLQlwZm5fdCBwZm47Ci0JdTY0ICpzcHRlcDsKLQlncGFfdCBwdGVfZ3BhOwotfTsKLQogc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuKHB0X2VsZW1lbnRfdCBncHRlKQogewogCXJldHVybiAoZ3B0ZSAmIFBUX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwpAQCAtMjgzLDkxICsyNjksNzkgQEAKIC8qCiAgKiBGZXRjaCBhIHNoYWRvdyBwdGUgZm9yIGEgc3BlY2lmaWMgbGV2ZWwgaW4gdGhlIHBhZ2luZyBoaWVyYXJjaHkuCiAgKi8KLXN0YXRpYyBpbnQgRk5BTUUoc2hhZG93X3dhbGtfZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl9zdywKLQkJCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwKLQkJCQkgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQotewotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyICpzdyA9Ci0JCWNvbnRhaW5lcl9vZihfc3csIHN0cnVjdCBzaGFkb3dfd2Fsa2VyLCB3YWxrZXIpOwotCXN0cnVjdCBndWVzdF93YWxrZXIgKmd3ID0gc3ctPmd1ZXN0X3dhbGtlcjsKLQl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOwotCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvd19wYWdlOwotCXU2NCBzcHRlOwotCWludCBtZXRhcGh5c2ljYWw7Ci0JZ2ZuX3QgdGFibGVfZ2ZuOwotCWludCByOwotCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKLQotCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JICAgIHx8IChzdy0+bGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKLQkJbW11X3NldF9zcHRlKHZjcHUsIHNwdGVwLCBhY2Nlc3MsIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAotCQkJICAgICBzdy0+dXNlcl9mYXVsdCwgc3ctPndyaXRlX2ZhdWx0LAotCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAotCQkJICAgICBzdy0+cHR3cml0ZSwgc3ctPmxhcmdlcGFnZSwKLQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfR0xPQkFMX01BU0ssCi0JCQkgICAgIGd3LT5nZm4sIHN3LT5wZm4sIGZhbHNlKTsKLQkJc3ctPnNwdGVwID0gc3B0ZXA7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSAmJiAhaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCi0JCXJldHVybiAwOwotCi0JaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7Ci0JCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7Ci0JCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwotCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKLQl9Ci0KLQlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMICYmIGd3LT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKLQkJbWV0YXBoeXNpY2FsID0gMTsKLQkJaWYgKCFpc19kaXJ0eV9wdGUoZ3ctPnB0ZXNbbGV2ZWwgLSAxXSkpCi0JCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIDFdKTsKLQl9IGVsc2UgewotCQltZXRhcGh5c2ljYWwgPSAwOwotCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07Ci0JfQotCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIChndmFfdClhZGRyLCBsZXZlbC0xLAotCQkJCSAgICAgICBtZXRhcGh5c2ljYWwsIGFjY2Vzcywgc3B0ZXApOwotCWlmICghbWV0YXBoeXNpY2FsKSB7Ci0JCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBndy0+cHRlX2dwYVtsZXZlbCAtIDJdLAotCQkJCQkgICZjdXJyX3B0ZSwgc2l6ZW9mKGN1cnJfcHRlKSk7Ci0JCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKLQkJCWt2bV9tbXVfcHV0X3BhZ2Uoc2hhZG93X3BhZ2UsIHNwdGVwKTsKLQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihzdy0+cGZuKTsKLQkJCXN3LT5zcHRlcCA9IE5VTEw7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXNwdGUgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSwotCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7Ci0JKnNwdGVwID0gc3B0ZTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU2NCAqRk5BTUUoZmV0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwKLQkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndWVzdF93YWxrZXIsCisJCQkgc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3csCiAJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGxhcmdlcGFnZSwKIAkJCSBpbnQgKnB0d3JpdGUsIHBmbl90IHBmbikKIHsKLQlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7Ci0JCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KSwgfSwKLQkJLmd1ZXN0X3dhbGtlciA9IGd1ZXN0X3dhbGtlciwKLQkJLnVzZXJfZmF1bHQgPSB1c2VyX2ZhdWx0LAotCQkud3JpdGVfZmF1bHQgPSB3cml0ZV9mYXVsdCwKLQkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKLQkJLnB0d3JpdGUgPSBwdHdyaXRlLAotCQkucGZuID0gcGZuLAotCX07CisJdW5zaWduZWQgYWNjZXNzID0gZ3ctPnB0X2FjY2VzczsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKKwl1NjQgc3B0ZSwgKnNwdGVwOworCWludCBkaXJlY3Q7CisJZ2ZuX3QgdGFibGVfZ2ZuOworCWludCByOworCWludCBsZXZlbDsKKwlwdF9lbGVtZW50X3QgY3Vycl9wdGU7CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAotCWlmICghaXNfcHJlc2VudF9wdGUoZ3Vlc3Rfd2Fsa2VyLT5wdGVzW2d1ZXN0X3dhbGtlci0+bGV2ZWwgLSAxXSkpCisJaWYgKCFpc19wcmVzZW50X3B0ZShndy0+cHRlc1tndy0+bGV2ZWwgLSAxXSkpCiAJCXJldHVybiBOVUxMOwogCi0Jd2Fsa19zaGFkb3coJndhbGtlci53YWxrZXIsIHZjcHUsIGFkZHIpOworCWZvcl9lYWNoX3NoYWRvd19lbnRyeSh2Y3B1LCBhZGRyLCBpdGVyYXRvcikgeworCQlsZXZlbCA9IGl0ZXJhdG9yLmxldmVsOworCQlzcHRlcCA9IGl0ZXJhdG9yLnNwdGVwOworCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAorCQkgICAgfHwgKGxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIGFjY2VzcywKKwkJCQkgICAgIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAorCQkJCSAgICAgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCisJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAorCQkJCSAgICAgcHR3cml0ZSwgbGFyZ2VwYWdlLAorCQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfR0xPQkFMX01BU0ssCisJCQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlKTsKKwkJCWJyZWFrOworCQl9CiAKLQlyZXR1cm4gd2Fsa2VyLnNwdGVwOworCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkgJiYgIWlzX2xhcmdlX3B0ZSgqc3B0ZXApKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7CisJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKKwkJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKKwkJfQorCisJCWlmIChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwKKwkJICAgICYmIGd3LT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKKwkJCWRpcmVjdCA9IDE7CisJCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKKwkJCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4oZ3ctPnB0ZXNbbGV2ZWwgLSAxXSk7CisJCX0gZWxzZSB7CisJCQlkaXJlY3QgPSAwOworCQkJdGFibGVfZ2ZuID0gZ3ctPnRhYmxlX2dmbltsZXZlbCAtIDJdOworCQl9CisJCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIGFkZHIsIGxldmVsLTEsCisJCQkJCSAgICAgICBkaXJlY3QsIGFjY2Vzcywgc3B0ZXApOworCQlpZiAoIWRpcmVjdCkgeworCQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sCisJCQkJCQkgIGd3LT5wdGVfZ3BhW2xldmVsIC0gMl0sCisJCQkJCQkgICZjdXJyX3B0ZSwgc2l6ZW9mKGN1cnJfcHRlKSk7CisJCQlpZiAociB8fCBjdXJyX3B0ZSAhPSBndy0+cHRlc1tsZXZlbCAtIDJdKSB7CisJCQkJa3ZtX21tdV9wdXRfcGFnZShzaGFkb3dfcGFnZSwgc3B0ZXApOworCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQkJCXNwdGVwID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXNwdGUgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpCisJCQl8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX0FDQ0VTU0VEX01BU0sKKwkJCXwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSzsKKwkJKnNwdGVwID0gc3B0ZTsKKwl9CisKKwlyZXR1cm4gc3B0ZXA7CiB9CiAKIC8qCkBAIC00NjUsNTQgKzQzOSw1NiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IEZOQU1FKHNoYWRvd19pbnZscGdfZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl9zdywKLQkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLAotCQkJCSAgICAgIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3Qgc2hhZG93X3dhbGtlciAqc3cgPQotCQljb250YWluZXJfb2YoX3N3LCBzdHJ1Y3Qgc2hhZG93X3dhbGtlciwgd2Fsa2VyKTsKLQotCS8qIEZJWE1FOiBwcm9wZXJseSBoYW5kbGUgaW52bHBnIG9uIGxhcmdlIGd1ZXN0IHBhZ2VzICovCi0JaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwgfHwKLQkgICAgKChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkgewotCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKTsKLQotCQlzdy0+cHRlX2dwYSA9IChzcC0+Z2ZuIDw8IFBBR0VfU0hJRlQpOwotCQlzdy0+cHRlX2dwYSArPSAoc3B0ZXAgLSBzcC0+c3B0KSAqIHNpemVvZihwdF9lbGVtZW50X3QpOwotCi0JCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkgewotCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7Ci0JCQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCi0JCQkJLS12Y3B1LT5rdm0tPnN0YXQubHBhZ2VzOwotCQl9Ci0JCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgRk5BTUUoaW52bHBnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKIHsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOwogCXB0X2VsZW1lbnRfdCBncHRlOwotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHdhbGtlciA9IHsKLQkJLndhbGtlciA9IHsgLmVudHJ5ID0gRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSksIH0sCi0JCS5wdGVfZ3BhID0gLTEsCi0JfTsKKwlncGFfdCBwdGVfZ3BhID0gLTE7CisJaW50IGxldmVsOworCXU2NCAqc3B0ZXA7CisJaW50IG5lZWRfZmx1c2ggPSAwOwogCiAJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKLQl3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ3ZhKTsKKworCWZvcl9lYWNoX3NoYWRvd19lbnRyeSh2Y3B1LCBndmEsIGl0ZXJhdG9yKSB7CisJCWxldmVsID0gaXRlcmF0b3IubGV2ZWw7CisJCXNwdGVwID0gaXRlcmF0b3Iuc3B0ZXA7CisKKwkJLyogRklYTUU6IHByb3Blcmx5IGhhbmRsZSBpbnZscGcgb24gbGFyZ2UgZ3Vlc3QgcGFnZXMgKi8KKwkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwgfHwKKwkJICAgICgobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSAmJiBpc19sYXJnZV9wdGUoKnNwdGVwKSkpIHsKKwkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOworCisJCQlwdGVfZ3BhID0gKHNwLT5nZm4gPDwgUEFHRV9TSElGVCk7CisJCQlwdGVfZ3BhICs9IChzcHRlcCAtIHNwLT5zcHQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7CisKKwkJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkgeworCQkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOworCQkJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkKKwkJCQkJLS12Y3B1LT5rdm0tPnN0YXQubHBhZ2VzOworCQkJCW5lZWRfZmx1c2ggPSAxOworCQkJfQorCQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChuZWVkX2ZsdXNoKQorCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Ci0JaWYgKHdhbGtlci5wdGVfZ3BhID09IC0xKQorCisJaWYgKHB0ZV9ncGEgPT0gLTEpCiAJCXJldHVybjsKLQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgd2Fsa2VyLnB0ZV9ncGEsICZncHRlLAorCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBwdGVfZ3BhLCAmZ3B0ZSwKIAkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpKSkKIAkJcmV0dXJuOwogCWlmIChpc19wcmVzZW50X3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCWlmIChtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KSkKIAkJCXJldHVybjsKLQkJa3ZtX21tdV9wdGVfd3JpdGUodmNwdSwgd2Fsa2VyLnB0ZV9ncGEsIChjb25zdCB1OCAqKSZncHRlLAorCQlrdm1fbW11X3B0ZV93cml0ZSh2Y3B1LCBwdGVfZ3BhLCAoY29uc3QgdTggKikmZ3B0ZSwKIAkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpLCAwKTsKIAl9CiB9CkBAIC01NDAsNyArNTE2LDcgQEAKIAlwdF9lbGVtZW50X3QgcHRbMjU2IC8gc2l6ZW9mKHB0X2VsZW1lbnRfdCldOwogCWdwYV90IHB0ZV9ncGE7CiAKLQlpZiAoc3AtPnJvbGUubWV0YXBoeXNpY2FsCisJaWYgKHNwLT5yb2xlLmRpcmVjdAogCSAgICB8fCAoUFRUWVBFID09IDMyICYmIHNwLT5yb2xlLmxldmVsID4gUFRfUEFHRV9UQUJMRV9MRVZFTCkpIHsKIAkJbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCQlyZXR1cm47CkBAIC02MTksNyArNTk1LDYgQEAKIAogI3VuZGVmIHB0X2VsZW1lbnRfdAogI3VuZGVmIGd1ZXN0X3dhbGtlcgotI3VuZGVmIHNoYWRvd193YWxrZXIKICN1bmRlZiBGTkFNRQogI3VuZGVmIFBUX0JBU0VfQUREUl9NQVNLCiAjdW5kZWYgUFRfSU5ERVgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCBhOWU3NjllLi4xODIxYzIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0zOCw5ICszOCw2IEBACiAjZGVmaW5lIElPUE1fQUxMT0NfT1JERVIgMgogI2RlZmluZSBNU1JQTV9BTExPQ19PUkRFUiAxCiAKLSNkZWZpbmUgRFI3X0dEX01BU0sgKDEgPDwgMTMpCi0jZGVmaW5lIERSNl9CRF9NQVNLICgxIDw8IDEzKQotCiAjZGVmaW5lIFNFR19UWVBFX0xEVCAyCiAjZGVmaW5lIFNFR19UWVBFX0JVU1lfVFNTMTYgMwogCkBAIC01MCw2ICs0NywxNSBAQAogCiAjZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH4oMHgzZlVMTCkpCiAKKy8qIFR1cm4gb24gdG8gZ2V0IGRlYnVnZ2luZyBvdXRwdXQqLworLyogI2RlZmluZSBORVNURURfREVCVUcgKi8KKworI2lmZGVmIE5FU1RFRF9ERUJVRworI2RlZmluZSBuc3ZtX3ByaW50ayhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgbnN2bV9wcmludGsoZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKIC8qIGVuYWJsZSBOUFQgZm9yIEFNRDY0IGFuZCBYODYgd2l0aCBQQUUgKi8KICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCiBzdGF0aWMgYm9vbCBucHRfZW5hYmxlZCA9IHRydWU7CkBAIC02MCwxNCArNjYsMjkgQEAKIAogbW9kdWxlX3BhcmFtKG5wdCwgaW50LCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBuZXN0ZWQgPSAwOworbW9kdWxlX3BhcmFtKG5lc3RlZCwgaW50LCBTX0lSVUdPKTsKKwogc3RhdGljIHZvaWQga3ZtX3JlcHV0X2lycShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiBzdGF0aWMgdm9pZCBzdm1fZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pOworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3Ztc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqbmVzdGVkX3ZtY2IsCisJCQkgICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKKwkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSk7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZjcHVfc3ZtICp0b19zdm0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiBjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfc3ZtLCB2Y3B1KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlzX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlyZXR1cm4gc3ZtLT5uZXN0ZWRfdm1jYjsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9wbV9iYXNlOwogCiBzdHJ1Y3Qga3ZtX2xkdHRzc19kZXNjIHsKQEAgLTE1NywzMiArMTc4LDYgQEAKIAlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlY3IyIiA6OiAiciIgKHZhbCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9kcjYodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGRyNjsKLQotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyNiwgJTAiIDogIj1yIiAoZHI2KSk7Ci0JcmV0dXJuIGRyNjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RyNih1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHI2IiA6OiAiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9kcjcodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGRyNzsKLQotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyNywgJTAiIDogIj1yIiAoZHI3KSk7Ci0JcmV0dXJuIGRyNzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RyNyh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHI3IiA6OiAiciIgKHZhbCkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfbmV3X2FzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXRvX3N2bSh2Y3B1KS0+YXNpZF9nZW5lcmF0aW9uLS07CkBAIC0xOTgsNyArMTkzLDcgQEAKIAlpZiAoIW5wdF9lbmFibGVkICYmICEoZWZlciAmIEVGRVJfTE1BKSkKIAkJZWZlciAmPSB+RUZFUl9MTUU7CiAKLQl0b19zdm0odmNwdSktPnZtY2ItPnNhdmUuZWZlciA9IGVmZXIgfCBNU1JfRUZFUl9TVk1FX01BU0s7CisJdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLmVmZXIgPSBlZmVyIHwgRUZFUl9TVk1FOwogCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOwogfQogCkBAIC0yMDcsNiArMjAyLDExIEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKKwkvKiBJZiB3ZSBhcmUgd2l0aGluIGEgbmVzdGVkIFZNIHdlJ2QgYmV0dGVyICNWTUVYSVQgYW5kIGxldCB0aGUKKwkgICBndWVzdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiAqLworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdm0sIG5yLCBoYXNfZXJyb3JfY29kZSwgZXJyb3JfY29kZSkpCisJCXJldHVybjsKKwogCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmogPSBucgogCQl8IFNWTV9FVlRJTkpfVkFMSUQKIAkJfCAoaGFzX2Vycm9yX2NvZGUgPyBTVk1fRVZUSU5KX1ZBTElEX0VSUiA6IDApCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlrdm1fcmlwX3dyaXRlKHZjcHUsIHN2bS0+bmV4dF9yaXApOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgJj0gflNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0s7CiAKLQl2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9IDE7CisJdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPSAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spOwogfQogCiBzdGF0aWMgaW50IGhhc19zdm0odm9pZCkKQEAgLTI1MCw3ICsyNTAsNyBAQAogCWNvbnN0IGNoYXIgKm1zZzsKIAogCWlmICghY3B1X2hhc19zdm0oJm1zZykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaGFzX3N2bjogJXNcbiIsIG1zZyk7CisJCXByaW50ayhLRVJOX0lORk8gImhhc19zdm06ICVzXG4iLCBtc2cpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogCXN2bV9kYXRhLT50c3NfZGVzYyA9IChzdHJ1Y3Qga3ZtX2xkdHRzc19kZXNjICopKGdkdCArIEdEVF9FTlRSWV9UU1MpOwogCiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgfCBNU1JfRUZFUl9TVk1FX01BU0spOworCXdybXNybChNU1JfRUZFUiwgZWZlciB8IEVGRVJfU1ZNRSk7CiAKIAl3cm1zcmwoTVNSX1ZNX0hTQVZFX1BBLAogCSAgICAgICBwYWdlX3RvX3Bmbihzdm1fZGF0YS0+c2F2ZV9hcmVhKSA8PCBQQUdFX1NISUZUKTsKQEAgLTQxNyw2ICs0MTcsMTQgQEAKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05YKSkKIAkJa3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9OWCk7CiAKKwlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZYU1JfT1BUKSkKKwkJa3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9GRlhTUik7CisKKwlpZiAobmVzdGVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gImt2bTogTmVzdGVkIFZpcnR1YWxpemF0aW9uIGVuYWJsZWRcbiIpOworCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX1NWTUUpOworCX0KKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXIgPSBzdm1fY3B1X2luaXQoY3B1KTsKIAkJaWYgKHIpCkBAIC01NTksNyArNTY3LDcgQEAKIAlpbml0X3N5c19zZWcoJnNhdmUtPmxkdHIsIFNFR19UWVBFX0xEVCk7CiAJaW5pdF9zeXNfc2VnKCZzYXZlLT50ciwgU0VHX1RZUEVfQlVTWV9UU1MxNik7CiAKLQlzYXZlLT5lZmVyID0gTVNSX0VGRVJfU1ZNRV9NQVNLOworCXNhdmUtPmVmZXIgPSBFRkVSX1NWTUU7CiAJc2F2ZS0+ZHI2ID0gMHhmZmZmMGZmMDsKIAlzYXZlLT5kcjcgPSAweDQwMDsKIAlzYXZlLT5yZmxhZ3MgPSAyOwpAQCAtNTkxLDYgKzU5OSw5IEBACiAJCXNhdmUtPmNyNCA9IDA7CiAJfQogCWZvcmNlX25ld19hc2lkKCZzdm0tPnZjcHUpOworCisJc3ZtLT5uZXN0ZWRfdm1jYiA9IDA7CisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzID0gSEZfR0lGX01BU0s7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNjE1LDYgKzYyNiw4IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm07CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHBhZ2UgKm1zcnBtX3BhZ2VzOworCXN0cnVjdCBwYWdlICpoc2F2ZV9wYWdlOworCXN0cnVjdCBwYWdlICpuZXN0ZWRfbXNycG1fcGFnZXM7CiAJaW50IGVycjsKIAogCXN2bSA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMKTsKQEAgLTYzNywxNCArNjUwLDI1IEBACiAJbXNycG1fcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCBNU1JQTV9BTExPQ19PUkRFUik7CiAJaWYgKCFtc3JwbV9wYWdlcykKIAkJZ290byB1bmluaXQ7CisKKwluZXN0ZWRfbXNycG1fcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCBNU1JQTV9BTExPQ19PUkRFUik7CisJaWYgKCFuZXN0ZWRfbXNycG1fcGFnZXMpCisJCWdvdG8gdW5pbml0OworCiAJc3ZtLT5tc3JwbSA9IHBhZ2VfYWRkcmVzcyhtc3JwbV9wYWdlcyk7CiAJc3ZtX3ZjcHVfaW5pdF9tc3JwbShzdm0tPm1zcnBtKTsKIAorCWhzYXZlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmICghaHNhdmVfcGFnZSkKKwkJZ290byB1bmluaXQ7CisJc3ZtLT5oc2F2ZSA9IHBhZ2VfYWRkcmVzcyhoc2F2ZV9wYWdlKTsKKworCXN2bS0+bmVzdGVkX21zcnBtID0gcGFnZV9hZGRyZXNzKG5lc3RlZF9tc3JwbV9wYWdlcyk7CisKIAlzdm0tPnZtY2IgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJY2xlYXJfcGFnZShzdm0tPnZtY2IpOwogCXN2bS0+dm1jYl9wYSA9IHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQ7CiAJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOwotCW1lbXNldChzdm0tPmRiX3JlZ3MsIDAsIHNpemVvZihzdm0tPmRiX3JlZ3MpKTsKIAlpbml0X3ZtY2Ioc3ZtKTsKIAogCWZ4X2luaXQoJnN2bS0+dmNwdSk7CkBAIC02NjksNiArNjkzLDggQEAKIAogCV9fZnJlZV9wYWdlKHBmbl90b19wYWdlKHN2bS0+dm1jYl9wYSA+PiBQQUdFX1NISUZUKSk7CiAJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShzdm0tPm1zcnBtKSwgTVNSUE1fQUxMT0NfT1JERVIpOworCV9fZnJlZV9wYWdlKHZpcnRfdG9fcGFnZShzdm0tPmhzYXZlKSk7CisJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShzdm0tPm5lc3RlZF9tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKIAlrdm1fdmNwdV91bmluaXQodmNwdSk7CiAJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCBzdm0pOwogfQpAQCAtNzE4LDYgKzc0NCwxNiBAQAogCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSByZmxhZ3M7CiB9CiAKK3N0YXRpYyB2b2lkIHN2bV9zZXRfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKK30KKworc3RhdGljIHZvaWQgc3ZtX2NsZWFyX3ZpbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgdm1jYl9zZWcgKnN2bV9zZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQogewogCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSA9ICZ0b19zdm0odmNwdSktPnZtY2ItPnNhdmU7CkBAIC03NjAsMjAgKzc5NiwzNyBAQAogCXZhci0+ZGIgPSAocy0+YXR0cmliID4+IFNWTV9TRUxFQ1RPUl9EQl9TSElGVCkgJiAxOwogCXZhci0+ZyA9IChzLT5hdHRyaWIgPj4gU1ZNX1NFTEVDVE9SX0dfU0hJRlQpICYgMTsKIAotCS8qCi0JICogU1ZNIGFsd2F5cyBzdG9yZXMgMCBmb3IgdGhlICdHJyBiaXQgaW4gdGhlIENTIHNlbGVjdG9yIGluCi0JICogdGhlIFZNQ0Igb24gYSBWTUVYSVQuIFRoaXMgaHVydHMgY3Jvc3MtdmVuZG9yIG1pZ3JhdGlvbjoKLQkgKiBJbnRlbCdzIFZNRU5UUlkgaGFzIGEgY2hlY2sgb24gdGhlICdHJyBiaXQuCi0JICovCi0JaWYgKHNlZyA9PSBWQ1BVX1NSRUdfQ1MpCisJc3dpdGNoIChzZWcpIHsKKwljYXNlIFZDUFVfU1JFR19DUzoKKwkJLyoKKwkJICogU1ZNIGFsd2F5cyBzdG9yZXMgMCBmb3IgdGhlICdHJyBiaXQgaW4gdGhlIENTIHNlbGVjdG9yIGluCisJCSAqIHRoZSBWTUNCIG9uIGEgVk1FWElULiBUaGlzIGh1cnRzIGNyb3NzLXZlbmRvciBtaWdyYXRpb246CisJCSAqIEludGVsJ3MgVk1FTlRSWSBoYXMgYSBjaGVjayBvbiB0aGUgJ0cnIGJpdC4KKwkJICovCiAJCXZhci0+ZyA9IHMtPmxpbWl0ID4gMHhmZmZmZjsKLQotCS8qCi0JICogV29yayBhcm91bmQgYSBidWcgd2hlcmUgdGhlIGJ1c3kgZmxhZyBpbiB0aGUgdHIgc2VsZWN0b3IKLQkgKiBpc24ndCBleHBvc2VkCi0JICovCi0JaWYgKHNlZyA9PSBWQ1BVX1NSRUdfVFIpCisJCWJyZWFrOworCWNhc2UgVkNQVV9TUkVHX1RSOgorCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSB0aGUgYnVzeSBmbGFnIGluIHRoZSB0ciBzZWxlY3RvcgorCQkgKiBpc24ndCBleHBvc2VkCisJCSAqLwogCQl2YXItPnR5cGUgfD0gMHgyOworCQlicmVhazsKKwljYXNlIFZDUFVfU1JFR19EUzoKKwljYXNlIFZDUFVfU1JFR19FUzoKKwljYXNlIFZDUFVfU1JFR19GUzoKKwljYXNlIFZDUFVfU1JFR19HUzoKKwkJLyoKKwkJICogVGhlIGFjY2Vzc2VkIGJpdCBtdXN0IGFsd2F5cyBiZSBzZXQgaW4gdGhlIHNlZ21lbnQKKwkJICogZGVzY3JpcHRvciBjYWNoZSwgYWx0aG91Z2ggaXQgY2FuIGJlIGNsZWFyZWQgaW4gdGhlCisJCSAqIGRlc2NyaXB0b3IsIHRoZSBjYWNoZWQgYml0IGFsd2F5cyByZW1haW5zIGF0IDEuIFNpbmNlCisJCSAqIEludGVsIGhhcyBhIGNoZWNrIG9uIHRoaXMsIHNldCBpdCBoZXJlIHRvIHN1cHBvcnQKKwkJICogY3Jvc3MtdmVuZG9yIG1pZ3JhdGlvbi4KKwkJICovCisJCWlmICghdmFyLT51bnVzYWJsZSkKKwkJCXZhci0+dHlwZSB8PSAweDE7CisJCWJyZWFrOworCX0KIAogCXZhci0+dW51c2FibGUgPSAhdmFyLT5wcmVzZW50OwogfQpAQCAtOTA1LDkgKzk1OCwzNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgc3ZtX2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQorc3RhdGljIGludCBzdm1fZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCWludCBvbGRfZGVidWcgPSB2Y3B1LT5ndWVzdF9kZWJ1ZzsKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKworCXZjcHUtPmd1ZXN0X2RlYnVnID0gZGJnLT5jb250cm9sOworCisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zICY9CisJCX4oKDEgPDwgREJfVkVDVE9SKSB8ICgxIDw8IEJQX1ZFQ1RPUikpOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19FTkFCTEUpIHsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYKKwkJICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9CisJCQkJMSA8PCBEQl9WRUNUT1I7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCisJCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KKwkJCQkxIDw8IEJQX1ZFQ1RPUjsKKwl9IGVsc2UKKwkJdmNwdS0+Z3Vlc3RfZGVidWcgPSAwOworCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IGRiZy0+YXJjaC5kZWJ1Z3JlZ1s3XTsKKwllbHNlCisJCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2Y3B1LT5hcmNoLmRyNzsKKworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQlzdm0tPnZtY2ItPnNhdmUucmZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGOworCWVsc2UgaWYgKG9sZF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQlzdm0tPnZtY2ItPnNhdmUucmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkYpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX2dldF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtOTQ5LDcgKzEwMzAsMjkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHRvX3N2bSh2Y3B1KS0+ZGJfcmVnc1tkcl07CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlzd2l0Y2ggKGRyKSB7CisJY2FzZSAwIC4uLiAzOgorCQl2YWwgPSB2Y3B1LT5hcmNoLmRiW2RyXTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQkJdmFsID0gdmNwdS0+YXJjaC5kcjY7CisJCWVsc2UKKwkJCXZhbCA9IHN2bS0+dm1jYi0+c2F2ZS5kcjY7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJCXZhbCA9IHZjcHUtPmFyY2guZHI3OworCQllbHNlCisJCQl2YWwgPSBzdm0tPnZtY2ItPnNhdmUuZHI3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSAwOworCX0KKwogCUtWTVRSQUNFXzJEKERSX1JFQUQsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAlyZXR1cm4gdmFsOwogfQpAQCAtOTU5LDMzICsxMDYyLDQwIEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQkqZXhjZXB0aW9uID0gMDsKKwlLVk1UUkFDRV8yRChEUl9XUklURSwgdmNwdSwgKHUzMilkciwgKHUzMil2YWx1ZSwgaGFuZGxlcik7CiAKLQlpZiAoc3ZtLT52bWNiLT5zYXZlLmRyNyAmIERSN19HRF9NQVNLKSB7Ci0JCXN2bS0+dm1jYi0+c2F2ZS5kcjcgJj0gfkRSN19HRF9NQVNLOwotCQlzdm0tPnZtY2ItPnNhdmUuZHI2IHw9IERSNl9CRF9NQVNLOwotCQkqZXhjZXB0aW9uID0gREJfVkVDVE9SOwotCQlyZXR1cm47Ci0JfQorCSpleGNlcHRpb24gPSAwOwogCiAJc3dpdGNoIChkcikgewogCWNhc2UgMCAuLi4gMzoKLQkJc3ZtLT5kYl9yZWdzW2RyXSA9IHZhbHVlOworCQl2Y3B1LT5hcmNoLmRiW2RyXSA9IHZhbHVlOworCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJdmNwdS0+YXJjaC5lZmZfZGJbZHJdID0gdmFsdWU7CiAJCXJldHVybjsKIAljYXNlIDQgLi4uIDU6Ci0JCWlmICh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfREUpIHsKKwkJaWYgKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9ERSkKIAkJCSpleGNlcHRpb24gPSBVRF9WRUNUT1I7Ci0JCQlyZXR1cm47Ci0JCX0KLQljYXNlIDc6IHsKLQkJaWYgKHZhbHVlICYgfigoMVVMTCA8PCAzMikgLSAxKSkgeworCQlyZXR1cm47CisJY2FzZSA2OgorCQlpZiAodmFsdWUgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKIAkJCSpleGNlcHRpb24gPSBHUF9WRUNUT1I7CiAJCQlyZXR1cm47CiAJCX0KLQkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IHZhbHVlOworCQl2Y3B1LT5hcmNoLmRyNiA9ICh2YWx1ZSAmIERSNl9WT0xBVElMRSkgfCBEUjZfRklYRURfMTsKIAkJcmV0dXJuOwotCX0KKwljYXNlIDc6CisJCWlmICh2YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgeworCQkJKmV4Y2VwdGlvbiA9IEdQX1ZFQ1RPUjsKKwkJCXJldHVybjsKKwkJfQorCQl2Y3B1LT5hcmNoLmRyNyA9ICh2YWx1ZSAmIERSN19WT0xBVElMRSkgfCBEUjdfRklYRURfMTsKKwkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgeworCQkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IHZjcHUtPmFyY2guZHI3OworCQkJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9ICh2YWx1ZSAmIERSN19CUF9FTl9NQVNLKTsKKwkJfQorCQlyZXR1cm47CiAJZGVmYXVsdDoKKwkJLyogRklYTUU6IFBvc3NpYmxlIGNhc2U/ICovCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5leHBlY3RlZCBkciAldVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBkcik7CiAJCSpleGNlcHRpb24gPSBVRF9WRUNUT1I7CkBAIC0xMDMxLDYgKzExNDEsMjcgQEAKIAlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KCZzdm0tPnZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOwogfQogCitzdGF0aWMgaW50IGRiX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKCEoc3ZtLT52Y3B1Lmd1ZXN0X2RlYnVnICYKKwkgICAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkpIHsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBEQl9WRUNUT1IpOworCQlyZXR1cm4gMTsKKwl9CisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gc3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UgKyBzdm0tPnZtY2ItPnNhdmUucmlwOworCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJwX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gc3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UgKyBzdm0tPnZtY2ItPnNhdmUucmlwOworCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gQlBfVkVDVE9SOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHVkX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJaW50IGVyOwpAQCAtMTA4MCw3ICsxMjExLDcgQEAKIHN0YXRpYyBpbnQgaW9faW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1MzIgaW9faW5mbyA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMTsgLyogYWRkcmVzcyBzaXplIGJ1Zz8gKi8KLQlpbnQgc2l6ZSwgZG93biwgaW4sIHN0cmluZywgcmVwOworCWludCBzaXplLCBpbiwgc3RyaW5nOwogCXVuc2lnbmVkIHBvcnQ7CiAKIAkrK3N2bS0+dmNwdS5zdGF0LmlvX2V4aXRzOwpAQCAtMTA5OSw4ICsxMjMwLDYgQEAKIAlpbiA9IChpb19pbmZvICYgU1ZNX0lPSU9fVFlQRV9NQVNLKSAhPSAwOwogCXBvcnQgPSBpb19pbmZvID4+IDE2OwogCXNpemUgPSAoaW9faW5mbyAmIFNWTV9JT0lPX1NJWkVfTUFTSykgPj4gU1ZNX0lPSU9fU0laRV9TSElGVDsKLQlyZXAgPSAoaW9faW5mbyAmIFNWTV9JT0lPX1JFUF9NQVNLKSAhPSAwOwotCWRvd24gPSAoc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfREYpICE9IDA7CiAKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCXJldHVybiBrdm1fZW11bGF0ZV9waW8oJnN2bS0+dmNwdSwga3ZtX3J1biwgaW4sIHNpemUsIHBvcnQpOwpAQCAtMTEzOSw2ICsxMjY4LDU2NyBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJaWYgKCEoc3ZtLT52Y3B1LmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX1NWTUUpCisJICAgIHx8ICFpc19wYWdpbmcoJnN2bS0+dmNwdSkpIHsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBVRF9WRUNUT1IpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc3ZtLT52bWNiLT5zYXZlLmNwbCkgeworCQlrdm1faW5qZWN0X2dwKCZzdm0tPnZjcHUsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdW5zaWduZWQgbnIsCisJCQkJICAgICAgYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpCit7CisJaWYgKGlzX25lc3RlZChzdm0pKSB7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9FWENQX0JBU0UgKyBucjsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZV9oaSA9IDA7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSA9IGVycm9yX2NvZGU7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiA9IHN2bS0+dmNwdS5hcmNoLmNyMjsKKwkJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSwgZmFsc2UpKSB7CisJCQluc3ZtX3ByaW50aygiVk1leGl0IC0+IEVYQ1AgMHgleFxuIiwgbnIpOworCisJCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX3N2bV9pbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCQlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKKwkJCXJldHVybiAwOworCisJCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0hJRl9NQVNLKSkKKwkJCXJldHVybiAwOworCisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9JTlRSOworCisJCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIGZhbHNlKSkgeworCQkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBJTlRSXG4iKTsKKwkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKm5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBncGEpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcGFnZSA9IGdmbl90b19wYWdlKHN2bS0+dmNwdS5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKGlzX2Vycm9yX3BhZ2UocGFnZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvdWxkIG5vdCBmaW5kIHBhZ2UgYXQgMHglbGx4XG4iLAorCQkgICAgICAgX19mdW5jX18sIGdwYSk7CisJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CisJCWt2bV9pbmplY3RfZ3AoJnN2bS0+dmNwdSwgMCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gcGFnZTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2RvKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAorCQkJIHU2NCBhcmcxX2dwYSwgdTY0IGFyZzJfZ3BhLCB2b2lkICpvcGFxdWUsCisJCQkgaW50ICgqaGFuZGxlcikoc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkJCXZvaWQgKmFyZzEsCisJCQkJCXZvaWQgKmFyZzIsCisJCQkJCXZvaWQgKm9wYXF1ZSkpCit7CisJc3RydWN0IHBhZ2UgKmFyZzFfcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqYXJnMl9wYWdlID0gTlVMTDsKKwl2b2lkICphcmcxOworCXZvaWQgKmFyZzIgPSBOVUxMOworCWludCByZXR2YWw7CisKKwlhcmcxX3BhZ2UgPSBuZXN0ZWRfc3ZtX2dldF9wYWdlKHN2bSwgYXJnMV9ncGEpOworCWlmKGFyZzFfcGFnZSA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCWlmIChhcmcyX2dwYSkgeworCQlhcmcyX3BhZ2UgPSBuZXN0ZWRfc3ZtX2dldF9wYWdlKHN2bSwgYXJnMl9ncGEpOworCQlpZihhcmcyX3BhZ2UgPT0gTlVMTCkgeworCQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihhcmcxX3BhZ2UpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlhcmcxID0ga21hcF9hdG9taWMoYXJnMV9wYWdlLCBLTV9VU0VSMCk7CisJaWYgKGFyZzJfZ3BhKQorCQlhcmcyID0ga21hcF9hdG9taWMoYXJnMl9wYWdlLCBLTV9VU0VSMSk7CisKKwlyZXR2YWwgPSBoYW5kbGVyKHN2bSwgYXJnMSwgYXJnMiwgb3BhcXVlKTsKKworCWt1bm1hcF9hdG9taWMoYXJnMSwgS01fVVNFUjApOworCWlmIChhcmcyX2dwYSkKKwkJa3VubWFwX2F0b21pYyhhcmcyLCBLTV9VU0VSMSk7CisKKwlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KGFyZzFfcGFnZSk7CisJaWYgKGFyZzJfZ3BhKQorCQlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KGFyZzJfcGFnZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX3JlYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkJCXZvaWQgKmFyZzEsCisJCQkJCXZvaWQgKmFyZzIsCisJCQkJCXZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCWJvb2wga3ZtX292ZXJyaWRlcyA9ICooYm9vbCAqKW9wYXF1ZTsKKwl1MzIgZXhpdF9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKworCWlmIChrdm1fb3ZlcnJpZGVzKSB7CisJCXN3aXRjaCAoZXhpdF9jb2RlKSB7CisJCWNhc2UgU1ZNX0VYSVRfSU5UUjoKKwkJY2FzZSBTVk1fRVhJVF9OTUk6CisJCQlyZXR1cm4gMDsKKwkJLyogRm9yIG5vdyB3ZSBhcmUgYWx3YXlzIGhhbmRsaW5nIE5QRnMgd2hlbiB1c2luZyB0aGVtICovCisJCWNhc2UgU1ZNX0VYSVRfTlBGOgorCQkJaWYgKG5wdF9lbmFibGVkKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCS8qIFdoZW4gd2UncmUgc2hhZG93aW5nLCB0cmFwIFBGcyAqLworCQljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUjoKKwkJCWlmICghbnB0X2VuYWJsZWQpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChleGl0X2NvZGUpIHsKKwljYXNlIFNWTV9FWElUX1JFQURfQ1IwIC4uLiBTVk1fRVhJVF9SRUFEX0NSODogeworCQl1MzIgY3JfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1JFQURfQ1IwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkICYgY3JfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9XUklURV9DUjAgLi4uIFNWTV9FWElUX1dSSVRFX0NSODogeworCQl1MzIgY3JfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1dSSVRFX0NSMCk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgJiBjcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1JFQURfRFIwIC4uLiBTVk1fRVhJVF9SRUFEX0RSNzogeworCQl1MzIgZHJfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1JFQURfRFIwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkICYgZHJfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9XUklURV9EUjAgLi4uIFNWTV9FWElUX1dSSVRFX0RSNzogeworCQl1MzIgZHJfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1dSSVRFX0RSMCk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUgJiBkcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSAuLi4gU1ZNX0VYSVRfRVhDUF9CQVNFICsgMHgxZjogeworCQl1MzIgZXhjcF9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfRVhDUF9CQVNFKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zICYgZXhjcF9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCXU2NCBleGl0X2JpdHMgPSAxVUxMIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9JTlRSKTsKKwkJbnN2bV9wcmludGsoImV4aXQgY29kZTogMHgleFxuIiwgZXhpdF9jb2RlKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCAmIGV4aXRfYml0cykKKwkJCXJldHVybiAxOworCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkJICAgICAgIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIsCisJCQkJICAgICAgIHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCXU4ICptc3JwbSA9ICh1OCAqKWFyZzI7CisgICAgICAgIHUzMiB0MCwgdDE7CisJdTMyIG1zciA9IHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07CisJdTMyIHBhcmFtID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xICYgMTsKKworCWlmICghKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCAmICgxVUxMIDw8IElOVEVSQ0VQVF9NU1JfUFJPVCkpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaChtc3IpIHsKKwljYXNlIDAgLi4uIDB4MWZmZjoKKwkJdDAgPSAobXNyICogMikgJSA4OworCQl0MSA9IG1zciAvIDg7CisJCWJyZWFrOworCWNhc2UgMHhjMDAwMDAwMCAuLi4gMHhjMDAwMWZmZjoKKwkJdDAgPSAoODE5MiArIG1zciAtIDB4YzAwMDAwMDApICogMjsKKwkJdDEgPSAodDAgLyA4KTsKKwkJdDAgJT0gODsKKwkJYnJlYWs7CisJY2FzZSAweGMwMDEwMDAwIC4uLiAweGMwMDExZmZmOgorCQl0MCA9ICgxNjM4NCArIG1zciAtIDB4YzAwMTAwMDApICogMjsKKwkJdDEgPSAodDAgLyA4KTsKKwkJdDAgJT0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwlpZiAobXNycG1bdDFdICYgKCgxIDw8IHBhcmFtKSA8PCB0MCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKQoreworCWJvb2wgayA9IGt2bV9vdmVycmlkZTsKKworCXN3aXRjaCAoc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSkgeworCWNhc2UgU1ZNX0VYSVRfTVNSOgorCQlyZXR1cm4gbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2IsCisJCQkJICAgICBzdm0tPm5lc3RlZF92bWNiX21zcnBtLCBOVUxMLAorCQkJCSAgICAgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfbXNyKTsKKwlkZWZhdWx0OiBicmVhazsKKwl9CisKKwlyZXR1cm4gbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2IsIDAsICZrLAorCQkJICAgICBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9yZWFsKTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF9yZWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAorCQkJCSAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJc3RydWN0IHZtY2IgKmhzYXZlID0gc3ZtLT5oc2F2ZTsKKwl1NjQgbmVzdGVkX3NhdmVbXSA9IHsgbmVzdGVkX3ZtY2ItPnNhdmUuY3IwLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPnNhdmUuY3IzLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPnNhdmUuY3I0LAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPnNhdmUuZWZlciwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucywKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pb3BtX2Jhc2VfcGEsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0IH07CisKKwkvKiBHaXZlIHRoZSBjdXJyZW50IHZtY2IgdG8gdGhlIGd1ZXN0ICovCisJbWVtY3B5KG5lc3RlZF92bWNiLCBzdm0tPnZtY2IsIHNpemVvZihzdHJ1Y3Qgdm1jYikpOworCW5lc3RlZF92bWNiLT5zYXZlLmNyMCA9IG5lc3RlZF9zYXZlWzBdOworCWlmICghbnB0X2VuYWJsZWQpCisJCW5lc3RlZF92bWNiLT5zYXZlLmNyMyA9IG5lc3RlZF9zYXZlWzFdOworCW5lc3RlZF92bWNiLT5zYXZlLmNyNCA9IG5lc3RlZF9zYXZlWzJdOworCW5lc3RlZF92bWNiLT5zYXZlLmVmZXIgPSBuZXN0ZWRfc2F2ZVszXTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCA9IG5lc3RlZF9zYXZlWzRdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSA9IG5lc3RlZF9zYXZlWzVdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkID0gbmVzdGVkX3NhdmVbNl07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlID0gbmVzdGVkX3NhdmVbN107CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBuZXN0ZWRfc2F2ZVs4XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgPSBuZXN0ZWRfc2F2ZVs5XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gbmVzdGVkX3NhdmVbMTBdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmlvcG1fYmFzZV9wYSA9IG5lc3RlZF9zYXZlWzExXTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gbmVzdGVkX3NhdmVbMTJdOworCisJLyogV2UgYWx3YXlzIHNldCBWX0lOVFJfTUFTS0lORyBhbmQgcmVtZW1iZXIgdGhlIG9sZCB2YWx1ZSBpbiBoZmxhZ3MgKi8KKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JTlRSX01BU0tJTkdfTUFTSzsKKworCWlmICgobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSVJRX01BU0spICYmCisJICAgIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yKSkgeworCQluc3ZtX3ByaW50aygiV0FSTklORzogSVJRIDB4JXggc3RpbGwgZW5hYmxlZCBvbiAjVk1FWElUXG4iLAorCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IpOworCX0KKworCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvbnRyb2wgZW50cmllcyAqLworCXN2bS0+dm1jYi0+Y29udHJvbCA9IGhzYXZlLT5jb250cm9sOworCisJLyogS2lsbCBhbnkgcGVuZGluZyBleGNlcHRpb25zICovCisJaWYgKHN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID09IHRydWUpCisJCW5zdm1fcHJpbnRrKCJXQVJOSU5HOiBQZW5kaW5nIEV4Y2VwdGlvblxuIik7CisJc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKworCS8qIFJlc3RvcmUgc2VsZWN0ZWQgc2F2ZSBlbnRyaWVzICovCisJc3ZtLT52bWNiLT5zYXZlLmVzID0gaHNhdmUtPnNhdmUuZXM7CisJc3ZtLT52bWNiLT5zYXZlLmNzID0gaHNhdmUtPnNhdmUuY3M7CisJc3ZtLT52bWNiLT5zYXZlLnNzID0gaHNhdmUtPnNhdmUuc3M7CisJc3ZtLT52bWNiLT5zYXZlLmRzID0gaHNhdmUtPnNhdmUuZHM7CisJc3ZtLT52bWNiLT5zYXZlLmdkdHIgPSBoc2F2ZS0+c2F2ZS5nZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5pZHRyID0gaHNhdmUtPnNhdmUuaWR0cjsKKwlzdm0tPnZtY2ItPnNhdmUucmZsYWdzID0gaHNhdmUtPnNhdmUucmZsYWdzOworCXN2bV9zZXRfZWZlcigmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5lZmVyKTsKKwlzdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjAgfCBYODZfQ1IwX1BFKTsKKwlzdm1fc2V0X2NyNCgmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjQpOworCWlmIChucHRfZW5hYmxlZCkgeworCQlzdm0tPnZtY2ItPnNhdmUuY3IzID0gaHNhdmUtPnNhdmUuY3IzOworCQlzdm0tPnZjcHUuYXJjaC5jcjMgPSBoc2F2ZS0+c2F2ZS5jcjM7CisJfSBlbHNlIHsKKwkJa3ZtX3NldF9jcjMoJnN2bS0+dmNwdSwgaHNhdmUtPnNhdmUuY3IzKTsKKwl9CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SQVgsIGhzYXZlLT5zYXZlLnJheCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SU1AsIGhzYXZlLT5zYXZlLnJzcCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SSVAsIGhzYXZlLT5zYXZlLnJpcCk7CisJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IDA7CisJc3ZtLT52bWNiLT5zYXZlLmNwbCA9IDA7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8gPSAwOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKKwkvKiBFeGl0IG5lc3RlZCBTVk0gbW9kZSAqLworCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJbnN2bV9wcmludGsoIlZNZXhpdFxuIik7CisJaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLAorCQkJICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtZXhpdF9yZWFsKSkKKwkJcmV0dXJuIDE7CisKKwlrdm1fbW11X3Jlc2V0X2NvbnRleHQoJnN2bS0+dmNwdSk7CisJa3ZtX21tdV9sb2FkKCZzdm0tPnZjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqYXJnMSwKKwkJCQkgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlpbnQgaTsKKwl1MzIgKm5lc3RlZF9tc3JwbSA9ICh1MzIqKWFyZzE7CisJZm9yIChpPTA7IGk8IFBBR0VfU0laRSAqICgxIDw8IE1TUlBNX0FMTE9DX09SREVSKSAvIDQ7IGkrKykKKwkJc3ZtLT5uZXN0ZWRfbXNycG1baV0gPSBzdm0tPm1zcnBtW2ldIHwgbmVzdGVkX21zcnBtW2ldOworCXN2bS0+dm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gX19wYShzdm0tPm5lc3RlZF9tc3JwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAorCQkJICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCXN0cnVjdCB2bWNiICpoc2F2ZSA9IHN2bS0+aHNhdmU7CisKKwkvKiBuZXN0ZWRfdm1jYiBpcyBvdXIgaW5kaWNhdG9yIGlmIG5lc3RlZCBTVk0gaXMgYWN0aXZhdGVkICovCisJc3ZtLT5uZXN0ZWRfdm1jYiA9IHN2bS0+dm1jYi0+c2F2ZS5yYXg7CisKKwkvKiBDbGVhciBpbnRlcm5hbCBzdGF0dXMgKi8KKwlzdm0tPnZjcHUuYXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOworCisJLyogU2F2ZSB0aGUgb2xkIHZtY2IsIHNvIHdlIGRvbid0IG5lZWQgdG8gcGljayB3aGF0IHdlIHNhdmUsIGJ1dAorCSAgIGNhbiByZXN0b3JlIGV2ZXJ5dGhpbmcgd2hlbiBhIFZNRVhJVCBvY2N1cnMgKi8KKwltZW1jcHkoaHNhdmUsIHN2bS0+dm1jYiwgc2l6ZW9mKHN0cnVjdCB2bWNiKSk7CisJLyogV2UgbmVlZCB0byByZW1lbWJlciB0aGUgb3JpZ2luYWwgQ1IzIGluIHRoZSBTUFQgY2FzZSAqLworCWlmICghbnB0X2VuYWJsZWQpCisJCWhzYXZlLT5zYXZlLmNyMyA9IHN2bS0+dmNwdS5hcmNoLmNyMzsKKwloc2F2ZS0+c2F2ZS5jcjQgPSBzdm0tPnZjcHUuYXJjaC5jcjQ7CisJaHNhdmUtPnNhdmUucmlwID0gc3ZtLT5uZXh0X3JpcDsKKworCWlmIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0hJRl9NQVNLOworCWVsc2UKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9ISUZfTUFTSzsKKworCS8qIExvYWQgdGhlIG5lc3RlZCBndWVzdCBzdGF0ZSAqLworCXN2bS0+dm1jYi0+c2F2ZS5lcyA9IG5lc3RlZF92bWNiLT5zYXZlLmVzOworCXN2bS0+dm1jYi0+c2F2ZS5jcyA9IG5lc3RlZF92bWNiLT5zYXZlLmNzOworCXN2bS0+dm1jYi0+c2F2ZS5zcyA9IG5lc3RlZF92bWNiLT5zYXZlLnNzOworCXN2bS0+dm1jYi0+c2F2ZS5kcyA9IG5lc3RlZF92bWNiLT5zYXZlLmRzOworCXN2bS0+dm1jYi0+c2F2ZS5nZHRyID0gbmVzdGVkX3ZtY2ItPnNhdmUuZ2R0cjsKKwlzdm0tPnZtY2ItPnNhdmUuaWR0ciA9IG5lc3RlZF92bWNiLT5zYXZlLmlkdHI7CisJc3ZtLT52bWNiLT5zYXZlLnJmbGFncyA9IG5lc3RlZF92bWNiLT5zYXZlLnJmbGFnczsKKwlzdm1fc2V0X2VmZXIoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuZWZlcik7CisJc3ZtX3NldF9jcjAoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuY3IwKTsKKwlzdm1fc2V0X2NyNCgmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjQpOworCWlmIChucHRfZW5hYmxlZCkgeworCQlzdm0tPnZtY2ItPnNhdmUuY3IzID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3IzOworCQlzdm0tPnZjcHUuYXJjaC5jcjMgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjM7CisJfSBlbHNlIHsKKwkJa3ZtX3NldF9jcjMoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuY3IzKTsKKwkJa3ZtX21tdV9yZXNldF9jb250ZXh0KCZzdm0tPnZjcHUpOworCX0KKwlzdm0tPnZtY2ItPnNhdmUuY3IyID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3IyOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUkFYLCBuZXN0ZWRfdm1jYi0+c2F2ZS5yYXgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUlNQLCBuZXN0ZWRfdm1jYi0+c2F2ZS5yc3ApOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUklQLCBuZXN0ZWRfdm1jYi0+c2F2ZS5yaXApOworCS8qIEluIGNhc2Ugd2UgZG9uJ3QgZXZlbiByZWFjaCB2Y3B1X3J1biwgdGhlIGZpZWxkcyBhcmUgbm90IHVwZGF0ZWQgKi8KKwlzdm0tPnZtY2ItPnNhdmUucmF4ID0gbmVzdGVkX3ZtY2ItPnNhdmUucmF4OworCXN2bS0+dm1jYi0+c2F2ZS5yc3AgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5yc3A7CisJc3ZtLT52bWNiLT5zYXZlLnJpcCA9IG5lc3RlZF92bWNiLT5zYXZlLnJpcDsKKwlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gbmVzdGVkX3ZtY2ItPnNhdmUuZHI3OworCXN2bS0+dm1jYi0+c2F2ZS5kcjYgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5kcjY7CisJc3ZtLT52bWNiLT5zYXZlLmNwbCA9IG5lc3RlZF92bWNiLT5zYXZlLmNwbDsKKworCS8qIFdlIGRvbid0IHdhbnQgYSBuZXN0ZWQgZ3Vlc3QgdG8gYmUgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBndWVzdCwKKwkgICBzbyBhbGwgaW50ZXJjZXB0cyBhcmUgT1JlZCAqLworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZDsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQ7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGU7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zOworCisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQ7CisKKwlzdm0tPm5lc3RlZF92bWNiX21zcnBtID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYTsKKworCWZvcmNlX25ld19hc2lkKCZzdm0tPnZjcHUpOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbzsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvX2VycjsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X2N0bCA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgfCBWX0lOVFJfTUFTS0lOR19NQVNLOworCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9JUlFfTUFTSykgeworCQluc3ZtX3ByaW50aygiblNWTSBJbmplY3RpbmcgSW50ZXJydXB0OiAweCV4XG4iLAorCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwpOworCX0KKwlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSU5UUl9NQVNLSU5HX01BU0spCisJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9WSU5UUl9NQVNLOworCWVsc2UKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9WSU5UUl9NQVNLOworCisJbnN2bV9wcmludGsoIm5TVk0gZXhpdF9pbnRfaW5mbzogMHgleCB8IGludF9zdGF0ZTogMHgleFxuIiwKKwkJCW5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8sCisJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfc3RhdGUpOworCisJc3ZtLT52bWNiLT5jb250cm9sLmludF92ZWN0b3IgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfc3RhdGU7CisJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgKz0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wudHNjX29mZnNldDsKKwlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qICYgU1ZNX0VWVElOSl9WQUxJRCkKKwkJbnN2bV9wcmludGsoIkluamVjdGluZyBFdmVudDogMHgleFxuIiwKKwkJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmopOworCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmogPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmo7CisJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2lual9lcnIgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmpfZXJyOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0dJRl9NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWxvYWRzYXZlKHN0cnVjdCB2bWNiICpmcm9tX3ZtY2IsIHN0cnVjdCB2bWNiICp0b192bWNiKQoreworCXRvX3ZtY2ItPnNhdmUuZnMgPSBmcm9tX3ZtY2ItPnNhdmUuZnM7CisJdG9fdm1jYi0+c2F2ZS5ncyA9IGZyb21fdm1jYi0+c2F2ZS5nczsKKwl0b192bWNiLT5zYXZlLnRyID0gZnJvbV92bWNiLT5zYXZlLnRyOworCXRvX3ZtY2ItPnNhdmUubGR0ciA9IGZyb21fdm1jYi0+c2F2ZS5sZHRyOworCXRvX3ZtY2ItPnNhdmUua2VybmVsX2dzX2Jhc2UgPSBmcm9tX3ZtY2ItPnNhdmUua2VybmVsX2dzX2Jhc2U7CisJdG9fdm1jYi0+c2F2ZS5zdGFyID0gZnJvbV92bWNiLT5zYXZlLnN0YXI7CisJdG9fdm1jYi0+c2F2ZS5sc3RhciA9IGZyb21fdm1jYi0+c2F2ZS5sc3RhcjsKKwl0b192bWNiLT5zYXZlLmNzdGFyID0gZnJvbV92bWNiLT5zYXZlLmNzdGFyOworCXRvX3ZtY2ItPnNhdmUuc2ZtYXNrID0gZnJvbV92bWNiLT5zYXZlLnNmbWFzazsKKwl0b192bWNiLT5zYXZlLnN5c2VudGVyX2NzID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2NzOworCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2VzcDsKKwl0b192bWNiLT5zYXZlLnN5c2VudGVyX2VpcCA9IGZyb21fdm1jYi0+c2F2ZS5zeXNlbnRlcl9laXA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtbG9hZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqbmVzdGVkX3ZtY2IsCisJCQkgICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlyZXR1cm4gbmVzdGVkX3N2bV92bWxvYWRzYXZlKChzdHJ1Y3Qgdm1jYiAqKW5lc3RlZF92bWNiLCBzdm0tPnZtY2IpOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKKwkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXJldHVybiBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3ZtLT52bWNiLCAoc3RydWN0IHZtY2IgKiluZXN0ZWRfdm1jYik7Cit9CisKK3N0YXRpYyBpbnQgdm1sb2FkX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsIE5VTEwsIG5lc3RlZF9zdm1fdm1sb2FkKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZtc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCW5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCAwLCBOVUxMLCBuZXN0ZWRfc3ZtX3Ztc2F2ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2bXJ1bl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCW5zdm1fcHJpbnRrKCJWTXJ1blxuIik7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCAwLAorCQkJICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtcnVuKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2JfbXNycG0sIDAsCisJCSAgICAgIE5VTEwsIG5lc3RlZF9zdm1fdm1ydW5fbXNycG0pKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN0Z2lfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfR0lGX01BU0s7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjbGdpX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKKworCS8qIEFmdGVyIGEgQ0xHSSBubyBpbnRlcnJ1cHRzIHNob3VsZCBjb21lICovCisJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CisJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBpbnZhbGlkX29wX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKQEAgLTEyNTAsNiArMTk0MCwxNSBAQAogCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CiAJCSpkYXRhID0gc3ZtLT52bWNiLT5zYXZlLmxhc3RfZXhjcF90bzsKIAkJYnJlYWs7CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CisJCSpkYXRhID0gc3ZtLT5oc2F2ZV9tc3I7CisJCWJyZWFrOworCWNhc2UgTVNSX1ZNX0NSOgorCQkqZGF0YSA9IDA7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorCQkqZGF0YSA9IDB4MDEwMDAwNjU7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBrdm1fZ2V0X21zcl9jb21tb24odmNwdSwgZWN4LCBkYXRhKTsKIAl9CkBAIC0xMzQ0LDYgKzIwNDMsOSBAQAogCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgZWN4LCBkYXRhKTsKIAogCQlicmVhazsKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKKwkJc3ZtLT5oc2F2ZV9tc3IgPSBkYXRhOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CiAJfQpAQCAtMTM4MCw3ICsyMDgyLDcgQEAKIHsKIAlLVk1UUkFDRV8wRChQRU5EX0lOVFIsICZzdm0tPnZjcHUsIGhhbmRsZXIpOwogCi0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwlzdm1fY2xlYXJfdmludHIoc3ZtKTsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JUlFfTUFTSzsKIAkvKgogCSAqIElmIHRoZSB1c2VyIHNwYWNlIHdhaXRzIHRvIGluamVjdCBpbnRlcnJ1cHRzLCBleGl0IGFzIHNvb24gYXMKQEAgLTE0MTcsNiArMjExOSw4IEBACiAJW1NWTV9FWElUX1dSSVRFX0RSM10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9EUjVdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfRFI3XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0VYQ1BfQkFTRSArIERCX1ZFQ1RPUl0JPSBkYl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0VYQ1BfQkFTRSArIEJQX1ZFQ1RPUl0JPSBicF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUl0JPSB1ZF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUl0gCT0gcGZfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBOTV9WRUNUT1JdIAk9IG5tX2ludGVyY2VwdGlvbiwKQEAgLTE0MzYsMTIgKzIxNDAsMTIgQEAKIAlbU1ZNX0VYSVRfTVNSXQkJCQk9IG1zcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1RBU0tfU1dJVENIXQkJCT0gdGFza19zd2l0Y2hfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9TSFVURE9XTl0JCQk9IHNodXRkb3duX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfVk1SVU5dCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1SVU5dCQkJPSB2bXJ1bl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1ZNTUNBTExdCQkJPSB2bW1jYWxsX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfVk1MT0FEXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1ZNU0FWRV0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9TVEdJXQkJCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9DTEdJXQkJCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTUxPQURdCQkJPSB2bWxvYWRfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTVNBVkVdCQkJPSB2bXNhdmVfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9TVEdJXQkJCQk9IHN0Z2lfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9DTEdJXQkJCQk9IGNsZ2lfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9TS0lOSVRdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV0JJTlZEXSAgICAgICAgICAgICAgICAgICAgICAgPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfTU9OSVRPUl0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLApAQCAtMTQ1Nyw2ICsyMTYxLDE3IEBACiAJS1ZNVFJBQ0VfM0QoVk1FWElULCB2Y3B1LCBleGl0X2NvZGUsICh1MzIpc3ZtLT52bWNiLT5zYXZlLnJpcCwKIAkJICAgICh1MzIpKCh1NjQpc3ZtLT52bWNiLT5zYXZlLnJpcCA+PiAzMiksIGVudHJ5ZXhpdCk7CiAKKwlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJbnN2bV9wcmludGsoIm5lc3RlZCBoYW5kbGVfZXhpdDogMHgleCB8IDB4JWx4IHwgMHglbHggfCAweCVseFxuIiwKKwkJCSAgICBleGl0X2NvZGUsIHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSwKKwkJCSAgICBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzIsIHN2bS0+dm1jYi0+c2F2ZS5yaXApOworCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCB0cnVlKSkgeworCQkJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKKwkJCW5zdm1fcHJpbnRrKCItPiAjVk1FWElUXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCiAJaWYgKG5wdF9lbmFibGVkKSB7CiAJCWludCBtbXVfcmVsb2FkID0gMDsKIAkJaWYgKCh2Y3B1LT5hcmNoLmNyMCBeIHN2bS0+dm1jYi0+c2F2ZS5jcjApICYgWDg2X0NSMF9QRykgewpAQCAtMTU0NCw2ICsyMjU5LDggQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAorCW5lc3RlZF9zdm1faW50cihzdm0pOworCiAJc3ZtX2luamVjdF9pcnEoc3ZtLCBpcnEpOwogfQogCkBAIC0xNTg5LDExICsyMzA2LDE3IEBACiAJaWYgKCFrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkpCiAJCWdvdG8gb3V0OwogCisJaWYgKG5lc3RlZF9zdm1faW50cihzdm0pKQorCQlnb3RvIG91dDsKKworCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0dJRl9NQVNLKSkKKwkJZ290byBvdXQ7CisKIAlpZiAoISh2bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpIHx8CiAJICAgICh2bWNiLT5jb250cm9sLmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spIHx8CiAJICAgICh2bWNiLT5jb250cm9sLmV2ZW50X2luaiAmIFNWTV9FVlRJTkpfVkFMSUQpKSB7CiAJCS8qIHVuYWJsZSB0byBkZWxpdmVyIGlycSwgc2V0IHBlbmRpbmcgaXJxICovCi0JCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9ICgxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7CisJCXN2bV9zZXRfdmludHIoc3ZtKTsKIAkJc3ZtX2luamVjdF9pcnEoc3ZtLCAweDApOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNjE1LDcgKzIzMzgsOCBAQAogCX0KIAogCXN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9Ci0JCSEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSyk7CisJCSEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgJiYKKwkJIChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9kb19pbmplY3RfdmVjdG9yKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtMTYzNyw5ICsyMzYxLDEzIEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gJnN2bS0+dm1jYi0+Y29udHJvbDsKIAorCWlmIChuZXN0ZWRfc3ZtX2ludHIoc3ZtKSkKKwkJcmV0dXJuOworCiAJc3ZtLT52Y3B1LmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0KIAkJKCEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgJiYKLQkJIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikpOworCQkgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSAmJgorCQkgKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0dJRl9NQVNLKSk7CiAKIAlpZiAoc3ZtLT52Y3B1LmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuICYmIHN2bS0+dmNwdS5hcmNoLmlycV9zdW1tYXJ5KQogCQkvKgpAQCAtMTY1Miw5ICsyMzgwLDkgQEAKIAkgKi8KIAlpZiAoIXN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiAmJgogCSAgICAoc3ZtLT52Y3B1LmFyY2guaXJxX3N1bW1hcnkgfHwga3ZtX3J1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93KSkKLQkJY29udHJvbC0+aW50ZXJjZXB0IHw9IDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSOwotCSBlbHNlCi0JCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwkJc3ZtX3NldF92aW50cihzdm0pOworCWVsc2UKKwkJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX3NldF90c3NfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBhZGRyKQpAQCAtMTY2MiwyMiArMjM5MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVfZGJfcmVncyh1bnNpZ25lZCBsb25nICpkYl9yZWdzKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMCwgJTAiIDogIj1yIihkYl9yZWdzWzBdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUlZHIxLCAlMCIgOiAiPXIiKGRiX3JlZ3NbMV0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjIsICUwIiA6ICI9ciIoZGJfcmVnc1syXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMywgJTAiIDogIj1yIihkYl9yZWdzWzNdKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZGJfcmVncyh1bnNpZ25lZCBsb25nICpkYl9yZWdzKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjAiIDogOiAiciIoZGJfcmVnc1swXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjEiIDogOiAiciIoZGJfcmVnc1sxXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjIiIDogOiAiciIoZGJfcmVnc1syXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjMiIDogOiAiciIoZGJfcmVnc1szXSkpOwotfQotCiBzdGF0aWMgdm9pZCBzdm1fZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlmb3JjZV9uZXdfYXNpZCh2Y3B1KTsKQEAgLTE3MzYsMTkgKzI0NDgsMTIgQEAKIAlnc19zZWxlY3RvciA9IGt2bV9yZWFkX2dzKCk7CiAJbGR0X3NlbGVjdG9yID0ga3ZtX3JlYWRfbGR0KCk7CiAJc3ZtLT5ob3N0X2NyMiA9IGt2bV9yZWFkX2NyMigpOwotCXN2bS0+aG9zdF9kcjYgPSByZWFkX2RyNigpOwotCXN2bS0+aG9zdF9kcjcgPSByZWFkX2RyNygpOwotCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSB2Y3B1LT5hcmNoLmNyMjsKKwlpZiAoIWlzX25lc3RlZChzdm0pKQorCQlzdm0tPnZtY2ItPnNhdmUuY3IyID0gdmNwdS0+YXJjaC5jcjI7CiAJLyogcmVxdWlyZWQgZm9yIGxpdmUgbWlncmF0aW9uIHdpdGggTlBUICovCiAJaWYgKG5wdF9lbmFibGVkKQogCQlzdm0tPnZtY2ItPnNhdmUuY3IzID0gdmNwdS0+YXJjaC5jcjM7CiAKLQlpZiAoc3ZtLT52bWNiLT5zYXZlLmRyNyAmIDB4ZmYpIHsKLQkJd3JpdGVfZHI3KDApOwotCQlzYXZlX2RiX3JlZ3Moc3ZtLT5ob3N0X2RiX3JlZ3MpOwotCQlsb2FkX2RiX3JlZ3Moc3ZtLT5kYl9yZWdzKTsKLQl9Ci0KIAljbGdpKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0xODI0LDE2ICsyNTI5LDExIEBACiAjZW5kaWYKIAkJKTsKIAotCWlmICgoc3ZtLT52bWNiLT5zYXZlLmRyNyAmIDB4ZmYpKQotCQlsb2FkX2RiX3JlZ3Moc3ZtLT5ob3N0X2RiX3JlZ3MpOwotCiAJdmNwdS0+YXJjaC5jcjIgPSBzdm0tPnZtY2ItPnNhdmUuY3IyOwogCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHN2bS0+dm1jYi0+c2F2ZS5yYXg7CiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gc3ZtLT52bWNiLT5zYXZlLnJzcDsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzdm0tPnZtY2ItPnNhdmUucmlwOwogCi0Jd3JpdGVfZHI2KHN2bS0+aG9zdF9kcjYpOwotCXdyaXRlX2RyNyhzdm0tPmhvc3RfZHI3KTsKIAlrdm1fd3JpdGVfY3IyKHN2bS0+aG9zdF9jcjIpOwogCiAJa3ZtX2xvYWRfZnMoZnNfc2VsZWN0b3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDc2MTFhZjUuLmJiNDgxMzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTkxLDYgKzkxLDcgQEAKIAl9IHJtb2RlOwogCWludCB2cGlkOwogCWJvb2wgZW11bGF0aW9uX3JlcXVpcmVkOworCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBpbnZhbGlkX3N0YXRlX2VtdWxhdGlvbl9yZXN1bHQ7CiAKIAkvKiBTdXBwb3J0IGZvciB2bm1pLWxlc3MgQ1BVcyAqLwogCWludCBzb2Z0X3ZubWlfYmxvY2tlZDsKQEAgLTE4OSwyMSArMTkwLDIxIEBACiB7CiAJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKIAkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQotCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IFBGX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJKElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8IFBGX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbm9fZGV2aWNlKHUzMiBpbnRyX2luZm8pCiB7CiAJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKIAkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQotCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IE5NX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJKElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8IE5NX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfaW52YWxpZF9vcGNvZGUodTMyIGludHJfaW5mbykKIHsKIAlyZXR1cm4gKGludHJfaW5mbyAmIChJTlRSX0lORk9fSU5UUl9UWVBFX01BU0sgfCBJTlRSX0lORk9fVkVDVE9SX01BU0sgfAogCQkJICAgICBJTlRSX0lORk9fVkFMSURfTUFTSykpID09Ci0JCShJTlRSX1RZUEVfRVhDRVBUSU9OIHwgVURfVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCQkoSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OIHwgVURfVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19leHRlcm5hbF9pbnRlcnJ1cHQodTMyIGludHJfaW5mbykKQEAgLTQ4MCw4ICs0ODEsMTMgQEAKIAllYiA9ICgxdSA8PCBQRl9WRUNUT1IpIHwgKDF1IDw8IFVEX1ZFQ1RPUik7CiAJaWYgKCF2Y3B1LT5mcHVfYWN0aXZlKQogCQllYiB8PSAxdSA8PCBOTV9WRUNUT1I7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWViIHw9IDF1IDw8IERCX1ZFQ1RPUjsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfRU5BQkxFKSB7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCWViIHw9IDF1IDw8IERCX1ZFQ1RPUjsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKKwkJCWViIHw9IDF1IDw8IEJQX1ZFQ1RPUjsKKwl9CiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKQogCQllYiA9IH4wOwogCWlmICh2bV9uZWVkX2VwdCgpKQpAQCAtNzQ3LDI5ICs3NTMsMzMgQEAKIAkJCQlib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKKwl1MzIgaW50cl9pbmZvID0gbnIgfCBJTlRSX0lORk9fVkFMSURfTUFTSzsKIAotCWlmIChoYXNfZXJyb3JfY29kZSkKKwlpZiAoaGFzX2Vycm9yX2NvZGUpIHsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0VYQ0VQVElPTl9FUlJPUl9DT0RFLCBlcnJvcl9jb2RlKTsKKwkJaW50cl9pbmZvIHw9IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSzsKKwl9CiAKIAlpZiAodmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpIHsKIAkJdm14LT5ybW9kZS5pcnEucGVuZGluZyA9IHRydWU7CiAJCXZteC0+cm1vZGUuaXJxLnZlY3RvciA9IG5yOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7Ci0JCWlmIChuciA9PSBCUF9WRUNUT1IpCisJCWlmIChuciA9PSBCUF9WRUNUT1IgfHwgbnIgPT0gT0ZfVkVDVE9SKQogCQkJdm14LT5ybW9kZS5pcnEucmlwKys7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsCi0JCQkgICAgIG5yIHwgSU5UUl9UWVBFX1NPRlRfSU5UUgotCQkJICAgICB8IChoYXNfZXJyb3JfY29kZSA/IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSyA6IDApCi0JCQkgICAgIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCQlpbnRyX2luZm8gfD0gSU5UUl9UWVBFX1NPRlRfSU5UUjsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaW50cl9pbmZvKTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CiAJCWt2bV9yaXBfd3JpdGUodmNwdSwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CiAJCXJldHVybjsKIAl9CiAKLQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAotCQkgICAgIG5yIHwgSU5UUl9UWVBFX0VYQ0VQVElPTgotCQkgICAgIHwgKGhhc19lcnJvcl9jb2RlID8gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLIDogMCkKLQkJICAgICB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwlpZiAobnIgPT0gQlBfVkVDVE9SIHx8IG5yID09IE9GX1ZFQ1RPUikgeworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5TVFJVQ1RJT05fTEVOLCAxKTsKKwkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9TT0ZUX0VYQ0VQVElPTjsKKwl9IGVsc2UKKwkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTjsKKworCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIGludHJfaW5mbyk7CiB9CiAKIHN0YXRpYyBib29sIHZteF9leGNlcHRpb25faW5qZWN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtODU2LDExICs4NjYsOCBAQAogICogd3JpdGVzICdndWVzdF90c2MnIGludG8gZ3Vlc3QncyB0aW1lc3RhbXAgY291bnRlciAicmVnaXN0ZXIiCiAgKiBndWVzdF90c2MgPSBob3N0X3RzYyArIHRzY19vZmZzZXQgPT0+IHRzY19vZmZzZXQgPSBndWVzdF90c2MgLSBob3N0X3RzYwogICovCi1zdGF0aWMgdm9pZCBndWVzdF93cml0ZV90c2ModTY0IGd1ZXN0X3RzYykKK3N0YXRpYyB2b2lkIGd1ZXN0X3dyaXRlX3RzYyh1NjQgZ3Vlc3RfdHNjLCB1NjQgaG9zdF90c2MpCiB7Ci0JdTY0IGhvc3RfdHNjOwotCi0JcmR0c2NsbChob3N0X3RzYyk7CiAJdm1jc193cml0ZTY0KFRTQ19PRkZTRVQsIGd1ZXN0X3RzYyAtIGhvc3RfdHNjKTsKIH0KIApAQCAtOTI1LDE0ICs5MzIsMTUgQEAKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSAqbXNyOworCXU2NCBob3N0X3RzYzsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAobXNyX2luZGV4KSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWNhc2UgTVNSX0VGRVI6CiAJCXZteF9sb2FkX2hvc3Rfc3RhdGUodm14KTsKIAkJcmV0ID0ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIG1zcl9pbmRleCwgZGF0YSk7CiAJCWJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKIAljYXNlIE1TUl9GU19CQVNFOgogCQl2bWNzX3dyaXRlbChHVUVTVF9GU19CQVNFLCBkYXRhKTsKIAkJYnJlYWs7CkBAIC05NTAsNyArOTU4LDggQEAKIAkJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVI6Ci0JCWd1ZXN0X3dyaXRlX3RzYyhkYXRhKTsKKwkJcmR0c2NsbChob3N0X3RzYyk7CisJCWd1ZXN0X3dyaXRlX3RzYyhkYXRhLCBob3N0X3RzYyk7CiAJCWJyZWFrOwogCWNhc2UgTVNSX1A2X1BFUkZDVFIwOgogCWNhc2UgTVNSX1A2X1BFUkZDVFIxOgpAQCAtOTk5LDQwICsxMDA4LDI4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK3N0YXRpYyBpbnQgc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCXVuc2lnbmVkIGxvbmcgZHI3ID0gMHg0MDA7Ci0JaW50IG9sZF9zaW5nbGVzdGVwOworCWludCBvbGRfZGVidWcgPSB2Y3B1LT5ndWVzdF9kZWJ1ZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jb2xkX3NpbmdsZXN0ZXAgPSB2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwOworCXZjcHUtPmd1ZXN0X2RlYnVnID0gZGJnLT5jb250cm9sOworCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkpCisJCXZjcHUtPmd1ZXN0X2RlYnVnID0gMDsKIAotCXZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgPSBkYmctPmVuYWJsZWQ7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpIHsKLQkJaW50IGk7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJdm1jc193cml0ZWwoR1VFU1RfRFI3LCBkYmctPmFyY2guZGVidWdyZWdbN10pOworCWVsc2UKKwkJdm1jc193cml0ZWwoR1VFU1RfRFI3LCB2Y3B1LT5hcmNoLmRyNyk7CiAKLQkJZHI3IHw9IDB4MjAwOyAgLyogZXhhY3QgKi8KLQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQkJaWYgKCFkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCi0JCQkJY29udGludWU7Ci0JCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5icFtpXSA9IGRiZy0+YnJlYWtwb2ludHNbaV0uYWRkcmVzczsKLQkJCWRyNyB8PSAyIDw8IChpKjIpOyAgICAvKiBnbG9iYWwgZW5hYmxlICovCi0JCQlkcjcgfD0gMCA8PCAoaSo0KzE2KTsgLyogZXhlY3V0aW9uIGJyZWFrcG9pbnQgKi8KLQkJfQotCi0JCXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXAgPSBkYmctPnNpbmdsZXN0ZXA7Ci0JfSBlbHNlCi0JCXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXAgPSAwOwotCi0JaWYgKG9sZF9zaW5nbGVzdGVwICYmICF2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CisJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCWZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGOworCWVsc2UgaWYgKG9sZF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQogCQlmbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGKTsKLQkJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7Ci0JfQorCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwogCiAJdXBkYXRlX2V4Y2VwdGlvbl9iaXRtYXAodmNwdSk7Ci0Jdm1jc193cml0ZWwoR1VFU1RfRFI3LCBkcjcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDMzLDYgKzE0MzAsMjkgQEAKIAlpbml0X3Jtb2RlKHZjcHUtPmt2bSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZteF9zZXRfZWZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKQoreworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOworCXN0cnVjdCBrdm1fbXNyX2VudHJ5ICptc3IgPSBmaW5kX21zcl9lbnRyeSh2bXgsIE1TUl9FRkVSKTsKKworCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOworCWlmICghbXNyKQorCQlyZXR1cm47CisJaWYgKGVmZXIgJiBFRkVSX0xNQSkgeworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCisJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSB8CisJCQkgICAgIFZNX0VOVFJZX0lBMzJFX01PREUpOworCQltc3ItPmRhdGEgPSBlZmVyOworCX0gZWxzZSB7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKKwkJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpICYKKwkJCSAgICAgflZNX0VOVFJZX0lBMzJFX01PREUpOworCisJCW1zci0+ZGF0YSA9IGVmZXIgJiB+RUZFUl9MTUU7CisJfQorCXNldHVwX21zcnModm14KTsKK30KKwogI2lmZGVmIENPTkZJR19YODZfNjQKIAogc3RhdGljIHZvaWQgZW50ZXJfbG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTQ0NywxMyArMTQ2Nyw4IEBACiAJCQkgICAgIChndWVzdF90cl9hciAmIH5BUl9UWVBFX01BU0spCiAJCQkgICAgIHwgQVJfVFlQRV9CVVNZXzY0X1RTUyk7CiAJfQotCiAJdmNwdS0+YXJjaC5zaGFkb3dfZWZlciB8PSBFRkVSX0xNQTsKLQotCWZpbmRfbXNyX2VudHJ5KHRvX3ZteCh2Y3B1KSwgTVNSX0VGRVIpLT5kYXRhIHw9IEVGRVJfTE1BIHwgRUZFUl9MTUU7Ci0Jdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAotCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKQotCQkgICAgIHwgVk1fRU5UUllfSUEzMkVfTU9ERSk7CisJdm14X3NldF9lZmVyKHZjcHUsIHZjcHUtPmFyY2guc2hhZG93X2VmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBleGl0X2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE2MTIsMzAgKzE2MjcsNiBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0NSNCwgaHdfY3I0KTsKIH0KIAotc3RhdGljIHZvaWQgdm14X3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCi17Ci0Jc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0Jc3RydWN0IGt2bV9tc3JfZW50cnkgKm1zciA9IGZpbmRfbXNyX2VudHJ5KHZteCwgTVNSX0VGRVIpOwotCi0JdmNwdS0+YXJjaC5zaGFkb3dfZWZlciA9IGVmZXI7Ci0JaWYgKCFtc3IpCi0JCXJldHVybjsKLQlpZiAoZWZlciAmIEVGRVJfTE1BKSB7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKLQkJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSB8Ci0JCQkJICAgICBWTV9FTlRSWV9JQTMyRV9NT0RFKTsKLQkJbXNyLT5kYXRhID0gZWZlcjsKLQotCX0gZWxzZSB7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKLQkJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSAmCi0JCQkJICAgICB+Vk1fRU5UUllfSUEzMkVfTU9ERSk7Ci0KLQkJbXNyLT5kYXRhID0gZWZlciAmIH5FRkVSX0xNRTsKLQl9Ci0Jc2V0dXBfbXNycyh2bXgpOwotfQotCiBzdGF0aWMgdTY0IHZteF9nZXRfc2VnbWVudF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKIHsKIAlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CkBAIC0xNjUzLDcgKzE2NDQsNyBAQAogCXZhci0+bGltaXQgPSB2bWNzX3JlYWQzMihzZi0+bGltaXQpOwogCXZhci0+c2VsZWN0b3IgPSB2bWNzX3JlYWQxNihzZi0+c2VsZWN0b3IpOwogCWFyID0gdm1jc19yZWFkMzIoc2YtPmFyX2J5dGVzKTsKLQlpZiAoYXIgJiBBUl9VTlVTQUJMRV9NQVNLKQorCWlmICgoYXIgJiBBUl9VTlVTQUJMRV9NQVNLKSAmJiAhZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKQogCQlhciA9IDA7CiAJdmFyLT50eXBlID0gYXIgJiAxNTsKIAl2YXItPnMgPSAoYXIgPj4gNCkgJiAxOwpAQCAtMTc4OCwxNCArMTc3OSwxNiBAQAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7CiAJY3NfcnBsID0gY3Muc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKIAorCWlmIChjcy51bnVzYWJsZSkKKwkJcmV0dXJuIGZhbHNlOwogCWlmICh+Y3MudHlwZSAmIChBUl9UWVBFX0NPREVfTUFTS3xBUl9UWVBFX0FDQ0VTU0VTX01BU0spKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCFjcy5zKQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKCEofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9XUklURUFCTEVfTUFTSykpKSB7CisJaWYgKGNzLnR5cGUgJiBBUl9UWVBFX1dSSVRFQUJMRV9NQVNLKSB7CiAJCWlmIChjcy5kcGwgPiBjc19ycGwpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmIChjcy50eXBlICYgQVJfVFlQRV9DT0RFX01BU0spIHsKKwl9IGVsc2UgewogCQlpZiAoY3MuZHBsICE9IGNzX3JwbCkKIAkJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xODE0LDcgKzE4MDcsOSBAQAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmc3MsIFZDUFVfU1JFR19TUyk7CiAJc3NfcnBsID0gc3Muc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKIAotCWlmICgoc3MudHlwZSAhPSAzKSB8fCAoc3MudHlwZSAhPSA3KSkKKwlpZiAoc3MudW51c2FibGUpCisJCXJldHVybiB0cnVlOworCWlmIChzcy50eXBlICE9IDMgJiYgc3MudHlwZSAhPSA3KQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCFzcy5zKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xODM0LDYgKzE4MjksOCBAQAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdmFyLCBzZWcpOwogCXJwbCA9IHZhci5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLOwogCisJaWYgKHZhci51bnVzYWJsZSkKKwkJcmV0dXJuIHRydWU7CiAJaWYgKCF2YXIucykKIAkJcmV0dXJuIGZhbHNlOwogCWlmICghdmFyLnByZXNlbnQpCkBAIC0xODU1LDkgKzE4NTIsMTEgQEAKIAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdHIsIFZDUFVfU1JFR19UUik7CiAKKwlpZiAodHIudW51c2FibGUpCisJCXJldHVybiBmYWxzZTsKIAlpZiAodHIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9USV9NQVNLKQkvKiBUSSA9IDEgKi8KIAkJcmV0dXJuIGZhbHNlOwotCWlmICgodHIudHlwZSAhPSAzKSB8fCAodHIudHlwZSAhPSAxMSkpIC8qIFRPRE86IENoZWNrIGlmIGd1ZXN0IGlzIGluIElBMzJlIG1vZGUgKi8KKwlpZiAodHIudHlwZSAhPSAzICYmIHRyLnR5cGUgIT0gMTEpIC8qIFRPRE86IENoZWNrIGlmIGd1ZXN0IGlzIGluIElBMzJlIG1vZGUgKi8KIAkJcmV0dXJuIGZhbHNlOwogCWlmICghdHIucHJlc2VudCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTg3MSw2ICsxODcwLDggQEAKIAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmbGR0ciwgVkNQVV9TUkVHX0xEVFIpOwogCisJaWYgKGxkdHIudW51c2FibGUpCisJCXJldHVybiB0cnVlOwogCWlmIChsZHRyLnNlbGVjdG9yICYgU0VMRUNUT1JfVElfTUFTSykJLyogVEkgPSAxICovCiAJCXJldHVybiBmYWxzZTsKIAlpZiAobGR0ci50eXBlICE9IDIpCkBAIC0yMTEyLDcgKzIxMTMsNyBAQAogewogCXUzMiBob3N0X3N5c2VudGVyX2NzLCBtc3JfbG93LCBtc3JfaGlnaDsKIAl1MzIganVuazsKLQl1NjQgaG9zdF9wYXQ7CisJdTY0IGhvc3RfcGF0LCB0c2NfdGhpcywgdHNjX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBhOwogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGR0OwogCWludCBpOwpAQCAtMjI0MCw2ICsyMjQxLDEyIEBACiAJdm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfjBVTCk7CiAJdm1jc193cml0ZWwoQ1I0X0dVRVNUX0hPU1RfTUFTSywgS1ZNX0dVRVNUX0NSNF9NQVNLKTsKIAorCXRzY19iYXNlID0gdm14LT52Y3B1Lmt2bS0+YXJjaC52bV9pbml0X3RzYzsKKwlyZHRzY2xsKHRzY190aGlzKTsKKwlpZiAodHNjX3RoaXMgPCB2bXgtPnZjcHUua3ZtLT5hcmNoLnZtX2luaXRfdHNjKQorCQl0c2NfYmFzZSA9IHRzY190aGlzOworCisJZ3Vlc3Rfd3JpdGVfdHNjKDAsIHRzY19iYXNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMxOSw3ICsyMzI2LDYgQEAKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgMCk7CiAKLQkvKiB0b2RvOiBkcjAgPSBkcjEgPSBkcjIgPSBkcjMgPSAwOyBkcjYgPSAweGZmZmYwZmYwICovCiAJdm1jc193cml0ZWwoR1VFU1RfRFI3LCAweDQwMCk7CiAKIAl2bWNzX3dyaXRlbChHVUVTVF9HRFRSX0JBU0UsIDApOwpAQCAtMjMzMiw4ICsyMzM4LDYgQEAKIAl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLCAwKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfUEVORElOR19EQkdfRVhDRVBUSU9OUywgMCk7CiAKLQlndWVzdF93cml0ZV90c2MoMCk7Ci0KIAkvKiBTcGVjaWFsIHJlZ2lzdGVycyAqLwogCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX0RFQlVHQ1RMLCAwKTsKIApAQCAtMjQ4Niw2ICsyNDkwLDExIEBACiB7CiAJdm14X3VwZGF0ZV93aW5kb3dfc3RhdGVzKHZjcHUpOwogCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJR1VFU1RfSU5UUl9TVEFURV9TVEkgfAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTKTsKKwogCWlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nICYmICF2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgewogCQlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykgewogCQkJZW5hYmxlX25taV93aW5kb3codmNwdSk7CkBAIC0yNTM2LDI0ICsyNTQ1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2RlYnVnX3ByZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnID0gJnZjcHUtPmd1ZXN0X2RlYnVnOwotCi0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbMF0sIDApOwotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzFdLCAxKTsKLQlzZXRfZGVidWdyZWcoZGJnLT5icFsyXSwgMik7Ci0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbM10sIDMpOwotCi0JaWYgKGRiZy0+c2luZ2xlc3RlcCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCWZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOwotCQlmbGFncyB8PSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRjsKLQkJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGhhbmRsZV9ybW9kZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgaW50IHZlYywgdTMyIGVycl9jb2RlKQogewpAQCAtMjU3MCw5ICsyNTYxLDE3IEBACiAJICogICAgICAgIHRoZSByZXF1aXJlZCBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgcmV3b3JrLgogCSAqLwogCXN3aXRjaCAodmVjKSB7Ci0JY2FzZSBERV9WRUNUT1I6CiAJY2FzZSBEQl9WRUNUT1I6CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCXJldHVybiAwOworCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlYyk7CisJCXJldHVybiAxOwogCWNhc2UgQlBfVkVDVE9SOgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKQorCQkJcmV0dXJuIDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgREVfVkVDVE9SOgogCWNhc2UgT0ZfVkVDVE9SOgogCWNhc2UgQlJfVkVDVE9SOgogCWNhc2UgVURfVkVDVE9SOgpAQCAtMjU4OSw4ICsyNTg4LDggQEAKIHN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXUzMiBpbnRyX2luZm8sIGVycm9yX2NvZGU7Ci0JdW5zaWduZWQgbG9uZyBjcjIsIHJpcDsKKwl1MzIgaW50cl9pbmZvLCBleF9ubywgZXJyb3JfY29kZTsKKwl1bnNpZ25lZCBsb25nIGNyMiwgcmlwLCBkcjY7CiAJdTMyIHZlY3RfaW5mbzsKIAllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXI7CiAKQEAgLTI2NDksMTQgKzI2NDgsMzAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLKSkgPT0KLQkgICAgKElOVFJfVFlQRV9FWENFUFRJT04gfCAxKSkgeworCWV4X25vID0gaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOworCXN3aXRjaCAoZXhfbm8pIHsKKwljYXNlIERCX1ZFQ1RPUjoKKwkJZHI2ID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOworCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkgeworCQkJdmNwdS0+YXJjaC5kcjYgPSBkcjYgfCBEUjZfRklYRURfMTsKKwkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKKwkJCXJldHVybiAxOworCQl9CisJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI2ID0gZHI2IHwgRFI2X0ZJWEVEXzE7CisJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI3ID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEJQX1ZFQ1RPUjoKIAkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKLQkJcmV0dXJuIDA7CisJCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpICsgcmlwOworCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IGV4X25vOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0VYQ0VQVElPTjsKKwkJa3ZtX3J1bi0+ZXguZXhjZXB0aW9uID0gZXhfbm87CisJCWt2bV9ydW4tPmV4LmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCQlicmVhazsKIAl9Ci0Ja3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9FWENFUFRJT047Ci0Ja3ZtX3J1bi0+ZXguZXhjZXB0aW9uID0gaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwotCWt2bV9ydW4tPmV4LmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwogCXJldHVybiAwOwogfQogCkBAIC0yNjc3LDcgKzI2OTIsNyBAQAogc3RhdGljIGludCBoYW5kbGVfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbjsKLQlpbnQgc2l6ZSwgZG93biwgaW4sIHN0cmluZywgcmVwOworCWludCBzaXplLCBpbiwgc3RyaW5nOwogCXVuc2lnbmVkIHBvcnQ7CiAKIAkrK3ZjcHUtPnN0YXQuaW9fZXhpdHM7CkBAIC0yNjkzLDggKzI3MDgsNiBAQAogCiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJiA3KSArIDE7CiAJaW4gPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgOCkgIT0gMDsKLQlkb3duID0gKHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKSAmIFg4Nl9FRkxBR1NfREYpICE9IDA7Ci0JcmVwID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDMyKSAhPSAwOwogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gPj4gMTY7CiAKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtMjc5NSwyMSArMjgwOCw0NCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBkciwgcmVnOwogCi0JLyoKLQkgKiBGSVhNRTogdGhpcyBjb2RlIGFzc3VtZXMgdGhlIGhvc3QgaXMgZGVidWdnaW5nIHRoZSBndWVzdC4KLQkgKiAgICAgICAgbmVlZCB0byBkZWFsIHdpdGggZ3Vlc3QgZGVidWdnaW5nIGl0c2VsZiB0b28uCi0JICovCisJZHIgPSB2bWNzX3JlYWRsKEdVRVNUX0RSNyk7CisJaWYgKGRyICYgRFI3X0dEKSB7CisJCS8qCisJCSAqIEFzIHRoZSB2bS1leGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgZGVidWcgdHJhcCwgd2UKKwkJICogbmVlZCB0byBlbXVsYXRlIHRoZSBsYXR0ZXIsIGVpdGhlciBmb3IgdGhlIGhvc3Qgb3IgdGhlCisJCSAqIGd1ZXN0IGRlYnVnZ2luZyBpdHNlbGYuCisJCSAqLworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSB7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNiA9IHZjcHUtPmFyY2guZHI2OworCQkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5kcjcgPSBkcjsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPQorCQkJCXZtY3NfcmVhZGwoR1VFU1RfQ1NfQkFTRSkgKworCQkJCXZtY3NfcmVhZGwoR1VFU1RfUklQKTsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SOworCQkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJdmNwdS0+YXJjaC5kcjcgJj0gfkRSN19HRDsKKwkJCXZjcHUtPmFyY2guZHI2IHw9IERSNl9CRDsKKwkJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdmNwdS0+YXJjaC5kcjcpOworCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBEQl9WRUNUT1IpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7Ci0JZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiA3OwotCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKLQlpZiAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMTYpIHsKLQkJLyogbW92IGZyb20gZHIgKi8KKwlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmIERFQlVHX1JFR19BQ0NFU1NfTlVNOworCXJlZyA9IERFQlVHX1JFR19BQ0NFU1NfUkVHKGV4aXRfcXVhbGlmaWNhdGlvbik7CisJaWYgKGV4aXRfcXVhbGlmaWNhdGlvbiAmIFRZUEVfTU9WX0ZST01fRFIpIHsKIAkJc3dpdGNoIChkcikgeworCQljYXNlIDAgLi4uIDM6CisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRiW2RyXTsKKwkJCWJyZWFrOwogCQljYXNlIDY6Ci0JCQl2YWwgPSAweGZmZmYwZmYwOworCQkJdmFsID0gdmNwdS0+YXJjaC5kcjY7CiAJCQlicmVhazsKIAkJY2FzZSA3OgotCQkJdmFsID0gMHg0MDA7CisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdmFsID0gMDsKQEAgLTI4MTcsNyArMjg1MywzOCBAQAogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2YWwpOwogCQlLVk1UUkFDRV8yRChEUl9SRUFELCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CiAJfSBlbHNlIHsKLQkJLyogbW92IHRvIGRyICovCisJCXZhbCA9IHZjcHUtPmFyY2gucmVnc1tyZWddOworCQlzd2l0Y2ggKGRyKSB7CisJCWNhc2UgMCAuLi4gMzoKKwkJCXZjcHUtPmFyY2guZGJbZHJdID0gdmFsOworCQkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCQl2Y3B1LT5hcmNoLmVmZl9kYltkcl0gPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSA0IC4uLiA1OgorCQkJaWYgKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9ERSkKKwkJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgeworCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgR1BfVkVDVE9SKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZjcHUtPmFyY2guZHI2ID0gKHZhbCAmIERSNl9WT0xBVElMRSkgfCBEUjZfRklYRURfMTsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQlpZiAodmFsICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7CisJCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBHUF9WRUNUT1IpOworCQkJCWJyZWFrOworCQkJfQorCQkJdmNwdS0+YXJjaC5kcjcgPSAodmFsICYgRFI3X1ZPTEFUSUxFKSB8IERSN19GSVhFRF8xOworCQkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgeworCQkJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdmNwdS0+YXJjaC5kcjcpOworCQkJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPQorCQkJCQkodmFsICYgRFI3X0JQX0VOX01BU0spOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJS1ZNVFJBQ0VfMkQoRFJfV1JJVEUsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAl9CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyZXR1cm4gMTsKQEAgLTI5NjgsMTcgKzMwMzUsMjUgQEAKIAl9CiAJdHNzX3NlbGVjdG9yID0gZXhpdF9xdWFsaWZpY2F0aW9uOwogCi0JcmV0dXJuIGt2bV90YXNrX3N3aXRjaCh2Y3B1LCB0c3Nfc2VsZWN0b3IsIHJlYXNvbik7CisJaWYgKCFrdm1fdGFza19zd2l0Y2godmNwdSwgdHNzX3NlbGVjdG9yLCByZWFzb24pKQorCQlyZXR1cm4gMDsKKworCS8qIGNsZWFyIGFsbCBsb2NhbCBicmVha3BvaW50IGVuYWJsZSBmbGFncyAqLworCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdm1jc19yZWFkbChHVUVTVF9EUjcpICYgfjU1KTsKKworCS8qCisJICogVE9ETzogV2hhdCBhYm91dCBkZWJ1ZyB0cmFwcyBvbiB0c3Mgc3dpdGNoPworCSAqICAgICAgIEFyZSB3ZSBzdXBwb3NlZCB0byBpbmplY3QgdGhlbSBhbmQgdXBkYXRlIGRyNj8KKwkgKi8KKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTY0IGV4aXRfcXVhbGlmaWNhdGlvbjsKLQllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXI7CiAJZ3BhX3QgZ3BhOwotCXVuc2lnbmVkIGxvbmcgaHZhOwogCWludCBnbGFfdmFsaWRpdHk7Ci0JaW50IHI7CiAKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWQ2NChFWElUX1FVQUxJRklDQVRJT04pOwogCkBAIC0zMDAxLDMyICszMDc2LDcgQEAKIAl9CiAKIAlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKLQlodmEgPSBnZm5fdG9faHZhKHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOwotCWlmICgha3ZtX2lzX2Vycm9yX2h2YShodmEpKSB7Ci0JCXIgPSBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhICYgUEFHRV9NQVNLLCAwKTsKLQkJaWYgKHIgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVQVDogTm90IGVub3VnaCBtZW1vcnkhXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qIG11c3QgYmUgTU1JTyAqLwotCQllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwga3ZtX3J1biwgMCwgMCwgMCk7Ci0KLQkJaWYgKGVyID09IEVNVUxBVEVfRkFJTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgIkVQVDogRmFpbCB0byBoYW5kbGUgRVBUIHZpb2xhdGlvbiB2bWV4aXQhZXIgaXMgJWRcbiIsCi0JCQkgZXIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEdQQTogMHglbHgsIEdWQTogMHglbHhcbiIsCi0JCQkgKGxvbmcgdW5zaWduZWQgaW50KXZtY3NfcmVhZDY0KEdVRVNUX1BIWVNJQ0FMX0FERFJFU1MpLAotCQkJIChsb25nIHVuc2lnbmVkIGludCl2bWNzX3JlYWQ2NChHVUVTVF9MSU5FQVJfQUREUkVTUykpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEV4aXQgcXVhbGlmaWNhdGlvbiBpcyAweCVseFxuIiwKLQkJCQkobG9uZyB1bnNpZ25lZCBpbnQpZXhpdF9xdWFsaWZpY2F0aW9uKTsKLQkJCXJldHVybiAtRU5PVFNVUFA7Ci0JCX0gZWxzZSBpZiAoZXIgPT0gRU1VTEFURV9ET19NTUlPKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOworCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhICYgUEFHRV9NQVNLLCAwKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQpAQCAtMzA0Niw3ICszMDk2LDcgQEAKIAkJCQlzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQlpbnQgZXJyOworCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcnIgPSBFTVVMQVRFX0RPTkU7CiAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTMwNzEsMTAgKzMxMjEsNyBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQkvKiBHdWVzdCBzdGF0ZSBzaG91bGQgYmUgdmFsaWQgbm93IGV4Y2VwdCBpZiB3ZSBuZWVkIHRvCi0JICogZW11bGF0ZSBhbiBNTUlPICovCi0JaWYgKGd1ZXN0X3N0YXRlX3ZhbGlkKHZjcHUpKQotCQl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CisJdm14LT5pbnZhbGlkX3N0YXRlX2VtdWxhdGlvbl9yZXN1bHQgPSBlcnI7CiB9CiAKIC8qCkBAIC0zMTIzLDggKzMxNzAsMTEgQEAKIAogCS8qIElmIHdlIG5lZWQgdG8gZW11bGF0ZSBhbiBNTUlPIGZyb20gaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUKIAkgKiB3ZSBqdXN0IHJldHVybiAwICovCi0JaWYgKHZteC0+ZW11bGF0aW9uX3JlcXVpcmVkICYmIGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKLQkJcmV0dXJuIDA7CisJaWYgKHZteC0+ZW11bGF0aW9uX3JlcXVpcmVkICYmIGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkgeworCQlpZiAoZ3Vlc3Rfc3RhdGVfdmFsaWQodmNwdSkpCisJCQl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CisJCXJldHVybiB2bXgtPmludmFsaWRfc3RhdGVfZW11bGF0aW9uX3Jlc3VsdCAhPSBFTVVMQVRFX0RPX01NSU87CisJfQogCiAJLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKIAkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCkBAIC0zMjM4LDcgKzMyODgsOCBAQAogCQkJdm14LT52Y3B1LmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7CiAJfQogCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoJnZteC0+dmNwdSk7Ci0JaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9FWENFUFRJT04pIHsKKwlpZiAoaWR0dl9pbmZvX3ZhbGlkICYmICh0eXBlID09IElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8fAorCQkJCXR5cGUgPT0gSU5UUl9UWVBFX1NPRlRfRVhDRVBUSU9OKSkgewogCQlpZiAoaWR0X3ZlY3RvcmluZ19pbmZvICYgVkVDVE9SSU5HX0lORk9fREVMSVZFUl9DT0RFX01BU0spIHsKIAkJCWVycm9yID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19FUlJPUl9DT0RFKTsKIAkJCWt2bV9xdWV1ZV9leGNlcHRpb25fZSgmdm14LT52Y3B1LCB2ZWN0b3IsIGVycm9yKTsKQEAgLTMyNTksNiArMzMxMCwxMSBAQAogCiAJdm14X3VwZGF0ZV93aW5kb3dfc3RhdGVzKHZjcHUpOwogCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJR1VFU1RfSU5UUl9TVEFURV9TVEkgfAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTKTsKKwogCWlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nICYmICF2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgewogCQlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykgewogCQkJZW5hYmxlX25taV93aW5kb3codmNwdSk7CkBAIC0zMzQ3LDYgKzM0MDMsOCBAQAogCSAqLwogCXZtY3Nfd3JpdGVsKEhPU1RfQ1IwLCByZWFkX2NyMCgpKTsKIAorCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmRyNiwgNik7CisKIAlhc20oCiAJCS8qIFN0b3JlIGhvc3QgcmVnaXN0ZXJzICovCiAJCSJwdXNoICUlIlIiZHg7IHB1c2ggJSUiUiJicDsiCkBAIC0zNDQxLDYgKzM0OTksOCBAQAogCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7CiAJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gMDsKIAorCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmRyNiwgNik7CisKIAl2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7CiAJaWYgKHZteC0+cm1vZGUuaXJxLnBlbmRpbmcpCiAJCWZpeHVwX3Jtb2RlX2lycSh2bXgpOwpAQCAtMzU5NSw3ICszNjU1LDYgQEAKIAkudmNwdV9wdXQgPSB2bXhfdmNwdV9wdXQsCiAKIAkuc2V0X2d1ZXN0X2RlYnVnID0gc2V0X2d1ZXN0X2RlYnVnLAotCS5ndWVzdF9kZWJ1Z19wcmUgPSBrdm1fZ3Vlc3RfZGVidWdfcHJlLAogCS5nZXRfbXNyID0gdm14X2dldF9tc3IsCiAJLnNldF9tc3IgPSB2bXhfc2V0X21zciwKIAkuZ2V0X3NlZ21lbnRfYmFzZSA9IHZteF9nZXRfc2VnbWVudF9iYXNlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc1OGI3YTEuLjhjYTEwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpAQCAtNjksNiArNzAsOCBAQAogCiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZChzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCiAJCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcyk7CitzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqa3ZtX2ZpbmRfY3B1aWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgICAgICB1MzIgZnVuY3Rpb24sIHUzMiBpbmRleCk7CiAKIHN0cnVjdCBrdm1feDg2X29wcyAqa3ZtX3g4Nl9vcHM7CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1feDg2X29wcyk7CkBAIC0xNzMsNiArMTc2LDcgQEAKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKQogewogCSsrdmNwdS0+c3RhdC5wZl9ndWVzdDsKKwogCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nKSB7CiAJCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciA9PSBQRl9WRUNUT1IpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJrdm06IGluamVjdF9wYWdlX2ZhdWx0OiIKQEAgLTM2MSw2ICszNjUsNyBAQAogCX0KIAlrdm1feDg2X29wcy0+c2V0X2NyNCh2Y3B1LCBjcjQpOwogCXZjcHUtPmFyY2guY3I0ID0gY3I0OworCXZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZS5jcjRfcGdlID0gKGNyNCAmIFg4Nl9DUjRfUEdFKSAmJiAhdGRwX2VuYWJsZWQ7CiAJa3ZtX21tdV9zeW5jX2dsb2JhbCh2Y3B1KTsKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CiB9CkBAIC00NDIsNiArNDQ3LDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2NyOCk7CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGJpdChpbnQgYml0bm8pCit7CisJcmV0dXJuIDEgPDwgKGJpdG5vICYgMzEpOworfQorCiAvKgogICogTGlzdCBvZiBtc3IgbnVtYmVycyB3aGljaCB3ZSBleHBvc2UgdG8gdXNlcnNwYWNlIHRocm91Z2ggS1ZNX0dFVF9NU1JTCiAgKiBhbmQgS1ZNX1NFVF9NU1JTLCBhbmQgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVC4KQEAgLTQ1Niw3ICs0NjYsNyBAQAogCU1TUl9DU1RBUiwgTVNSX0tFUk5FTF9HU19CQVNFLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfTFNUQVIsCiAjZW5kaWYKIAlNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIsIE1TUl9LVk1fU1lTVEVNX1RJTUUsIE1TUl9LVk1fV0FMTF9DTE9DSywKLQlNU1JfSUEzMl9QRVJGX1NUQVRVUywgTVNSX0lBMzJfQ1JfUEFUCisJTVNSX0lBMzJfUEVSRl9TVEFUVVMsIE1TUl9JQTMyX0NSX1BBVCwgTVNSX1ZNX0hTQVZFX1BBCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbnVtX21zcnNfdG9fc2F2ZTsKQEAgLTQ4MSw2ICs0OTEsMjggQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmIChlZmVyICYgRUZFUl9GRlhTUikgeworCQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZmVhdDsKKworCQlmZWF0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMSwgMCk7CisJCWlmICghZmVhdCB8fCAhKGZlYXQtPmVkeCAmIGJpdChYODZfRkVBVFVSRV9GWFNSX09QVCkpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2VmZXI6ICNHUCwgZW5hYmxlIEZGWFNSIHcvbyBDUFVJRCBjYXBhYmlsaXR5XG4iKTsKKwkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoZWZlciAmIEVGRVJfU1ZNRSkgeworCQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZmVhdDsKKworCQlmZWF0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMSwgMCk7CisJCWlmICghZmVhdCB8fCAhKGZlYXQtPmVjeCAmIGJpdChYODZfRkVBVFVSRV9TVk0pKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9lZmVyOiAjR1AsIGVuYWJsZSBTVk0gdy9vIFNWTVxuIik7CisJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJa3ZtX3g4Nl9vcHMtPnNldF9lZmVyKHZjcHUsIGVmZXIpOwogCiAJZWZlciAmPSB+RUZFUl9MTUE7CkBAIC01ODYsNiArNjE4LDggQEAKIAkJIGh2X2Nsb2NrLT50c2NfdG9fc3lzdGVtX211bCk7CiB9CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfdHNjX2toeik7CisKIHN0YXRpYyB2b2lkIGt2bV93cml0ZV9ndWVzdF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CkBAIC01OTYsOSArNjMwLDkgQEAKIAlpZiAoKCF2Y3B1LT50aW1lX3BhZ2UpKQogCQlyZXR1cm47CiAKLQlpZiAodW5saWtlbHkodmNwdS0+aHZfY2xvY2tfdHNjX2toeiAhPSB0c2Nfa2h6KSkgewotCQlrdm1fc2V0X3RpbWVfc2NhbGUodHNjX2toeiwgJnZjcHUtPmh2X2Nsb2NrKTsKLQkJdmNwdS0+aHZfY2xvY2tfdHNjX2toeiA9IHRzY19raHo7CisJaWYgKHVubGlrZWx5KHZjcHUtPmh2X2Nsb2NrX3RzY19raHogIT0gX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeikpKSB7CisJCWt2bV9zZXRfdGltZV9zY2FsZShfX2dldF9jcHVfdmFyKGNwdV90c2Nfa2h6KSwgJnZjcHUtPmh2X2Nsb2NrKTsKKwkJdmNwdS0+aHZfY2xvY2tfdHNjX2toeiA9IF9fZ2V0X2NwdV92YXIoY3B1X3RzY19raHopOwogCX0KIAogCS8qIEtlZXAgaXJxIGRpc2FibGVkIHRvIHByZXZlbnQgY2hhbmdlcyB0byB0aGUgY2xvY2sgKi8KQEAgLTYyOSw2ICs2NjMsMTYgQEAKIAltYXJrX3BhZ2VfZGlydHkodi0+a3ZtLCB2Y3B1LT50aW1lID4+IFBBR0VfU0hJRlQpOwogfQogCitzdGF0aWMgaW50IGt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdikKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdSA9ICZ2LT5hcmNoOworCisJaWYgKCF2Y3B1LT50aW1lX3BhZ2UpCisJCXJldHVybiAwOworCXNldF9iaXQoS1ZNX1JFUV9LVk1DTE9DS19VUERBVEUsICZ2LT5yZXF1ZXN0cyk7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBib29sIG1zcl9tdHJyX3ZhbGlkKHVuc2lnbmVkIG1zcikKIHsKIAlzd2l0Y2ggKG1zcikgewpAQCAtNzIyLDYgKzc2Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgogCWNhc2UgTVNSX0lBMzJfVUNPREVfV1JJVEU6CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CiAJCWJyZWFrOwogCWNhc2UgMHgyMDAgLi4uIDB4MmZmOgogCQlyZXR1cm4gc2V0X21zcl9tdHJyKHZjcHUsIG1zciwgZGF0YSk7CkBAIC03NTgsNyArODAzLDcgQEAKIAkJCXZjcHUtPmFyY2gudGltZV9wYWdlID0gTlVMTDsKIAkJfQogCi0JCWt2bV93cml0ZV9ndWVzdF90aW1lKHZjcHUpOworCQlrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC04NDMsNiArODg4LDcgQEAKIAljYXNlIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQOgogCWNhc2UgTVNSX0lBMzJfTEFTVElOVEZST01JUDoKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOgorCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgogCQlkYXRhID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfTVRSUmNhcDoKQEAgLTk2NywxMCArMTAxMywxMyBAQAogCWNhc2UgS1ZNX0NBUF9NTVVfU0hBRE9XX0NBQ0hFX0NPTlRST0w6CiAJY2FzZSBLVk1fQ0FQX1NFVF9UU1NfQUREUjoKIAljYXNlIEtWTV9DQVBfRVhUX0NQVUlEOgorCWNhc2UgS1ZNX0NBUF9DTE9DS1NPVVJDRToKIAljYXNlIEtWTV9DQVBfUElUOgogCWNhc2UgS1ZNX0NBUF9OT1BfSU9fREVMQVk6CiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9TWU5DX01NVToKKwljYXNlIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTDoKKwljYXNlIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC05OTEsOSArMTA0MCw2IEBACiAJY2FzZSBLVk1fQ0FQX0lPTU1VOgogCQlyID0gaW9tbXVfZm91bmQoKTsKIAkJYnJlYWs7Ci0JY2FzZSBLVk1fQ0FQX0NMT0NLU09VUkNFOgotCQlyID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTEwNDQsNyArMTA5MCw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY3B1aWQsIGNwdWlkX2FyZywgc2l6ZW9mIGNwdWlkKSkKIAkJCWdvdG8gb3V0OwogCQlyID0ga3ZtX2Rldl9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKCZjcHVpZCwKLQkJCWNwdWlkX2FyZy0+ZW50cmllcyk7CisJCQkJCQkgICAgICBjcHVpZF9hcmctPmVudHJpZXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCkBAIC0xMDY0LDcgKzExMTAsNyBAQAogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCWt2bV94ODZfb3BzLT52Y3B1X2xvYWQodmNwdSwgY3B1KTsKLQlrdm1fd3JpdGVfZ3Vlc3RfdGltZSh2Y3B1KTsKKwlrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xMTQyLDggKzExODgsOCBAQAogfQogCiBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3NldF9jcHVpZDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKIHsKIAlpbnQgcjsKIApAQCAtMTE2Miw4ICsxMjA4LDggQEAKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9nZXRfY3B1aWQyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJaW50IHI7CiAKQEAgLTExNzIsNyArMTIxOCw3IEBACiAJCWdvdG8gb3V0OwogCXIgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoZW50cmllcywgJnZjcHUtPmFyY2guY3B1aWRfZW50cmllcywKLQkJCSAgIHZjcHUtPmFyY2guY3B1aWRfbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQorCQkJIHZjcHUtPmFyY2guY3B1aWRfbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQogCQlnb3RvIG91dDsKIAlyZXR1cm4gMDsKIApAQCAtMTE4MSwxOCArMTIyNywxMyBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBiaXQoaW50IGJpdG5vKQotewotCXJldHVybiAxIDw8IChiaXRubyAmIDMxKTsKLX0KLQogc3RhdGljIHZvaWQgZG9fY3B1aWRfMV9lbnQoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmVudHJ5LCB1MzIgZnVuY3Rpb24sCi0JCQkgIHUzMiBpbmRleCkKKwkJCSAgIHUzMiBpbmRleCkKIHsKIAllbnRyeS0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAllbnRyeS0+aW5kZXggPSBpbmRleDsKIAljcHVpZF9jb3VudChlbnRyeS0+ZnVuY3Rpb24sIGVudHJ5LT5pbmRleCwKLQkJJmVudHJ5LT5lYXgsICZlbnRyeS0+ZWJ4LCAmZW50cnktPmVjeCwgJmVudHJ5LT5lZHgpOworCQkgICAgJmVudHJ5LT5lYXgsICZlbnRyeS0+ZWJ4LCAmZW50cnktPmVjeCwgJmVudHJ5LT5lZHgpOwogCWVudHJ5LT5mbGFncyA9IDA7CiB9CiAKQEAgLTEyMjIsMTUgKzEyNjMsMTcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCWJpdChYODZfRkVBVFVSRV9MTSkgfAogI2VuZGlmCisJCWJpdChYODZfRkVBVFVSRV9GWFNSX09QVCkgfAogCQliaXQoWDg2X0ZFQVRVUkVfTU1YRVhUKSB8CiAJCWJpdChYODZfRkVBVFVSRV8zRE5PV0VYVCkgfAogCQliaXQoWDg2X0ZFQVRVUkVfM0ROT1cpOwogCWNvbnN0IHUzMiBrdm1fc3VwcG9ydGVkX3dvcmQzX3g4Nl9mZWF0dXJlcyA9CiAJCWJpdChYODZfRkVBVFVSRV9YTU0zKSB8IGJpdChYODZfRkVBVFVSRV9DWDE2KTsKIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkNl94ODZfZmVhdHVyZXMgPQotCQliaXQoWDg2X0ZFQVRVUkVfTEFIRl9MTSkgfCBiaXQoWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWSk7CisJCWJpdChYODZfRkVBVFVSRV9MQUhGX0xNKSB8IGJpdChYODZfRkVBVFVSRV9DTVBfTEVHQUNZKSB8CisJCWJpdChYODZfRkVBVFVSRV9TVk0pOwogCi0JLyogYWxsIGZ1bmMgMiBjcHVpZF9jb3VudCgpIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHNhbWUgY3B1ICovCisJLyogYWxsIGNhbGxzIHRvIGNwdWlkX2NvdW50KCkgc2hvdWxkIGJlIG1hZGUgb24gdGhlIHNhbWUgY3B1ICovCiAJZ2V0X2NwdSgpOwogCWRvX2NwdWlkXzFfZW50KGVudHJ5LCBmdW5jdGlvbiwgaW5kZXgpOwogCSsrKm5lbnQ7CkBAIC0xMzA0LDcgKzEzNDcsNyBAQAogfQogCiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZChzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKIHsKIAlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqY3B1aWRfZW50cmllczsKIAlpbnQgbGltaXQsIG5lbnQgPSAwLCByID0gLUUyQklHOwpAQCAtMTMyMSw3ICsxMzY0LDcgQEAKIAlsaW1pdCA9IGNwdWlkX2VudHJpZXNbMF0uZWF4OwogCWZvciAoZnVuYyA9IDE7IGZ1bmMgPD0gbGltaXQgJiYgbmVudCA8IGNwdWlkLT5uZW50OyArK2Z1bmMpCiAJCWRvX2NwdWlkX2VudCgmY3B1aWRfZW50cmllc1tuZW50XSwgZnVuYywgMCwKLQkJCQkmbmVudCwgY3B1aWQtPm5lbnQpOworCQkJICAgICAmbmVudCwgY3B1aWQtPm5lbnQpOwogCXIgPSAtRTJCSUc7CiAJaWYgKG5lbnQgPj0gY3B1aWQtPm5lbnQpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMzMwLDEwICsxMzczLDEwIEBACiAJbGltaXQgPSBjcHVpZF9lbnRyaWVzW25lbnQgLSAxXS5lYXg7CiAJZm9yIChmdW5jID0gMHg4MDAwMDAwMTsgZnVuYyA8PSBsaW1pdCAmJiBuZW50IDwgY3B1aWQtPm5lbnQ7ICsrZnVuYykKIAkJZG9fY3B1aWRfZW50KCZjcHVpZF9lbnRyaWVzW25lbnRdLCBmdW5jLCAwLAotCQkJICAgICAgICZuZW50LCBjcHVpZC0+bmVudCk7CisJCQkgICAgICZuZW50LCBjcHVpZC0+bmVudCk7CiAJciA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcihlbnRyaWVzLCBjcHVpZF9lbnRyaWVzLAotCQkJbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQorCQkJIG5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKIAkJZ290byBvdXRfZnJlZTsKIAljcHVpZC0+bmVudCA9IG5lbnQ7CiAJciA9IDA7CkBAIC0xNDc3LDcgKzE1MjAsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNwdWlkLCBjcHVpZF9hcmcsIHNpemVvZiBjcHVpZCkpCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV92Y3B1X2lvY3RsX3NldF9jcHVpZDIodmNwdSwgJmNwdWlkLAotCQkJCWNwdWlkX2FyZy0+ZW50cmllcyk7CisJCQkJCSAgICAgIGNwdWlkX2FyZy0+ZW50cmllcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwpAQCAtMTQ5MCw3ICsxNTMzLDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjcHVpZCwgY3B1aWRfYXJnLCBzaXplb2YgY3B1aWQpKQogCQkJZ290byBvdXQ7CiAJCXIgPSBrdm1fdmNwdV9pb2N0bF9nZXRfY3B1aWQyKHZjcHUsICZjcHVpZCwKLQkJCQljcHVpZF9hcmctPmVudHJpZXMpOworCQkJCQkgICAgICBjcHVpZF9hcmctPmVudHJpZXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVGQVVMVDsKQEAgLTE3MTAsNiArMTc1MywxNSBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9yZWluamVjdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkJIHN0cnVjdCBrdm1fcmVpbmplY3RfY29udHJvbCAqY29udHJvbCkKK3sKKwlpZiAoIWt2bS0+YXJjaC52cGl0KQorCQlyZXR1cm4gLUVOWElPOworCWt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnJlaW5qZWN0ID0gY29udHJvbC0+cGl0X3JlaW5qZWN0OworCXJldHVybiAwOworfQorCiAvKgogICogR2V0IChhbmQgY2xlYXIpIHRoZSBkaXJ0eSBtZW1vcnkgbG9nIGZvciBhIG1lbW9yeSBzbG90LgogICovCkBAIC0xODA3LDEzICsxODU5LDI2IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhrdm0pOworCQlpZiAocikgeworCQkJa2ZyZWUoa3ZtLT5hcmNoLnZwaWMpOworCQkJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOworCQkJZ290byBvdXQ7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ1JFQVRFX1BJVDoKKwkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwkJciA9IC1FRVhJU1Q7CisJCWlmIChrdm0tPmFyY2gudnBpdCkKKwkJCWdvdG8gY3JlYXRlX3BpdF91bmxvY2s7CiAJCXIgPSAtRU5PTUVNOwogCQlrdm0tPmFyY2gudnBpdCA9IGt2bV9jcmVhdGVfcGl0KGt2bSk7CiAJCWlmIChrdm0tPmFyY2gudnBpdCkKIAkJCXIgPSAwOworCWNyZWF0ZV9waXRfdW5sb2NrOgorCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewogCQlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnFfZXZlbnQ7CiAKQEAgLTE4MjEsMTAgKzE4ODYsMTcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpcnFfZXZlbnQsIGFyZ3AsIHNpemVvZiBpcnFfZXZlbnQpKQogCQkJZ290byBvdXQ7CiAJCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pKSB7CisJCQlfX3MzMiBzdGF0dXM7CiAJCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCQkJa3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCi0JCQkJICAgIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CisJCQlzdGF0dXMgPSBrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKKwkJCQkJaXJxX2V2ZW50LmlycSwgaXJxX2V2ZW50LmxldmVsKTsKIAkJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJCWlmIChpb2N0bCA9PSBLVk1fSVJRX0xJTkVfU1RBVFVTKSB7CisJCQkJaXJxX2V2ZW50LnN0YXR1cyA9IHN0YXR1czsKKwkJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpcnFfZXZlbnQsCisJCQkJCQkJc2l6ZW9mIGlycV9ldmVudCkpCisJCQkJCWdvdG8gb3V0OworCQkJfQogCQkJciA9IDA7CiAJCX0KIAkJYnJlYWs7CkBAIC0xOTA3LDYgKzE5NzksMTcgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9SRUlOSkVDVF9DT05UUk9MOiB7CisJCXN0cnVjdCBrdm1fcmVpbmplY3RfY29udHJvbCBjb250cm9sOworCQlyID0gIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY29udHJvbCwgYXJncCwgc2l6ZW9mKGNvbnRyb2wpKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX3JlaW5qZWN0KGt2bSwgJmNvbnRyb2wpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCTsKIAl9CkBAIC0xOTYwLDEwICsyMDQzLDggQEAKIAlyZXR1cm4gZGV2OwogfQogCi1pbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICB2b2lkICp2YWwsCi0JCQkgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl2b2lkICpkYXRhID0gdmFsOwogCWludCByID0gWDg2RU1VTF9DT05USU5VRTsKQEAgLTE5NzEsMjcgKzIwNTIsNTcgQEAKIAl3aGlsZSAoYnl0ZXMpIHsKIAkJZ3BhX3QgZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKIAkJdW5zaWduZWQgb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7Ci0JCXVuc2lnbmVkIHRvY29weSA9IG1pbihieXRlcywgKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCk7CisJCXVuc2lnbmVkIHRvcmVhZCA9IG1pbihieXRlcywgKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCk7CiAJCWludCByZXQ7CiAKIAkJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpIHsKIAkJCXIgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCXJldCA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b2NvcHkpOworCQlyZXQgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgdG9yZWFkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXIgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJYnl0ZXMgLT0gdG9jb3B5OwotCQlkYXRhICs9IHRvY29weTsKLQkJYWRkciArPSB0b2NvcHk7CisJCWJ5dGVzIC09IHRvcmVhZDsKKwkJZGF0YSArPSB0b3JlYWQ7CisJCWFkZHIgKz0gdG9yZWFkOwogCX0KIG91dDoKIAlyZXR1cm4gcjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGVtdWxhdG9yX3JlYWRfc3RkKTsKKworc3RhdGljIGludCBrdm1fd3JpdGVfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdm9pZCAqZGF0YSA9IHZhbDsKKwlpbnQgciA9IFg4NkVNVUxfQ09OVElOVUU7CisKKwl3aGlsZSAoYnl0ZXMpIHsKKwkJZ3BhX3QgZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7CisJCXVuc2lnbmVkIHRvd3JpdGUgPSBtaW4oYnl0ZXMsICh1bnNpZ25lZClQQUdFX1NJWkUgLSBvZmZzZXQpOworCQlpbnQgcmV0OworCisJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKSB7CisJCQlyID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSBrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIHRvd3JpdGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJciA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQkJZ290byBvdXQ7CisJCX0KKworCQlieXRlcyAtPSB0b3dyaXRlOworCQlkYXRhICs9IHRvd3JpdGU7CisJCWFkZHIgKz0gdG93cml0ZTsKKwl9CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKIAogc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHZvaWQgKnZhbCwKQEAgLTIwMTMsOCArMjEyNCw4IEBACiAJaWYgKChncGEgJiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpCiAJCWdvdG8gbW1pbzsKIAotCWlmIChlbXVsYXRvcl9yZWFkX3N0ZChhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1KQotCQkJPT0gWDg2RU1VTF9DT05USU5VRSkKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydChhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1KQorCQkJCT09IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CkBAIC0yMjE3LDcgKzIzMjgsNyBAQAogCiAJcmlwX2xpbmVhciA9IHJpcCArIGdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX0NTKTsKIAotCWVtdWxhdG9yX3JlYWRfc3RkKHJpcF9saW5lYXIsICh2b2lkICopb3Bjb2RlcywgNCwgdmNwdSk7CisJa3ZtX3JlYWRfZ3Vlc3RfdmlydChyaXBfbGluZWFyLCAodm9pZCAqKW9wY29kZXMsIDQsIHZjcHUpOwogCiAJcHJpbnRrKEtFUk5fRVJSICJlbXVsYXRpb24gZmFpbGVkICglcykgcmlwICVseCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCSAgICAgICBjb250ZXh0LCByaXAsIG9wY29kZXNbMF0sIG9wY29kZXNbMV0sIG9wY29kZXNbMl0sIG9wY29kZXNbM10pOwpAQCAtMjIyNSw3ICsyMzM2LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUpOwogCiBzdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHsKLQkucmVhZF9zdGQgICAgICAgICAgICA9IGVtdWxhdG9yX3JlYWRfc3RkLAorCS5yZWFkX3N0ZCAgICAgICAgICAgID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCwKIAkucmVhZF9lbXVsYXRlZCAgICAgICA9IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQsCiAJLndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCwKIAkuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsCkBAIC0yMzI3LDQwICsyNDM4LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbXVsYXRlX2luc3RydWN0aW9uKTsKIAotc3RhdGljIHZvaWQgZnJlZV9waW9fZ3Vlc3RfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXMpOyArK2kpCi0JCWlmICh2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSkgewotCQkJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eSh2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSk7Ci0JCQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSA9IE5VTEw7Ci0JCX0KLX0KLQogc3RhdGljIGludCBwaW9fY29weV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl2b2lkICpwID0gdmNwdS0+YXJjaC5waW9fZGF0YTsKLQl2b2lkICpxOworCWd2YV90IHEgPSB2Y3B1LT5hcmNoLnBpby5ndWVzdF9ndmE7CiAJdW5zaWduZWQgYnl0ZXM7Ci0JaW50IG5yX3BhZ2VzID0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbMV0gPyAyIDogMTsKKwlpbnQgcmV0OwogCi0JcSA9IHZtYXAodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXMsIG5yX3BhZ2VzLCBWTV9SRUFEfFZNX1dSSVRFLAotCQkgUEFHRV9LRVJORUwpOwotCWlmICghcSkgewotCQlmcmVlX3Bpb19ndWVzdF9wYWdlcyh2Y3B1KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXEgKz0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZV9vZmZzZXQ7CiAJYnl0ZXMgPSB2Y3B1LT5hcmNoLnBpby5zaXplICogdmNwdS0+YXJjaC5waW8uY3VyX2NvdW50OwogCWlmICh2Y3B1LT5hcmNoLnBpby5pbikKLQkJbWVtY3B5KHEsIHAsIGJ5dGVzKTsKKwkJcmV0ID0ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQocSwgcCwgYnl0ZXMsIHZjcHUpOwogCWVsc2UKLQkJbWVtY3B5KHAsIHEsIGJ5dGVzKTsKLQlxIC09IHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0OwotCXZ1bm1hcChxKTsKLQlmcmVlX3Bpb19ndWVzdF9wYWdlcyh2Y3B1KTsKLQlyZXR1cm4gMDsKKwkJcmV0ID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydChxLCBwLCBieXRlcywgdmNwdSk7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGNvbXBsZXRlX3BpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDcxLDcgKzI1NjEsNiBAQAogCXZjcHUtPmFyY2gucGlvLmluID0gaW47CiAJdmNwdS0+YXJjaC5waW8uc3RyaW5nID0gMDsKIAl2Y3B1LT5hcmNoLnBpby5kb3duID0gMDsKLQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldCA9IDA7CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gMDsKIAogCWlmICh2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9PSBLVk1fRVhJVF9JT19JTikKQEAgLTI0OTksOSArMjU4OCw3IEBACiAJCSAgZ3ZhX3QgYWRkcmVzcywgaW50IHJlcCwgdW5zaWduZWQgcG9ydCkKIHsKIAl1bnNpZ25lZCBub3csIGluX3BhZ2U7Ci0JaW50IGksIHJldCA9IDA7Ci0JaW50IG5yX3BhZ2VzID0gMTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcGlvX2RldjsKIAogCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTzsKQEAgLTI1MTMsNyArMjYwMCw2IEBACiAJdmNwdS0+YXJjaC5waW8uaW4gPSBpbjsKIAl2Y3B1LT5hcmNoLnBpby5zdHJpbmcgPSAxOwogCXZjcHUtPmFyY2gucGlvLmRvd24gPSBkb3duOwotCXZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcmVzcyk7CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gcmVwOwogCiAJaWYgKHZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID09IEtWTV9FWElUX0lPX0lOKQpAQCAtMjUzMywxNSArMjYxOSw4IEBACiAJZWxzZQogCQlpbl9wYWdlID0gb2Zmc2V0X2luX3BhZ2UoYWRkcmVzcykgKyBzaXplOwogCW5vdyA9IG1pbihjb3VudCwgKHVuc2lnbmVkIGxvbmcpaW5fcGFnZSAvIHNpemUpOwotCWlmICghbm93KSB7Ci0JCS8qCi0JCSAqIFN0cmluZyBJL08gc3RyYWRkbGVzIHBhZ2UgYm91bmRhcnkuICBQaW4gdHdvIGd1ZXN0IHBhZ2VzCi0JCSAqIHNvIHRoYXQgd2Ugc2F0aXNmeSBhdG9taWNpdHkgY29uc3RyYWludHMuICBEbyBqdXN0IG9uZQotCQkgKiB0cmFuc2FjdGlvbiB0byBhdm9pZCBjb21wbGV4aXR5LgotCQkgKi8KLQkJbnJfcGFnZXMgPSAyOworCWlmICghbm93KQogCQlub3cgPSAxOwotCX0KIAlpZiAoZG93bikgewogCQkvKgogCQkgKiBTdHJpbmcgSS9PIGluIHJldmVyc2UuICBZdWNrLiAgS2lsbCB0aGUgZ3Vlc3QsIGZpeCBsYXRlci4KQEAgLTI1NTYsMTUgKzI2MzUsNyBAQAogCWlmICh2Y3B1LT5hcmNoLnBpby5jdXJfY291bnQgPT0gdmNwdS0+YXJjaC5waW8uY291bnQpCiAJCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyArK2kpIHsKLQkJcGFnZSA9IGd2YV90b19wYWdlKHZjcHUsIGFkZHJlc3MgKyBpICogUEFHRV9TSVpFKTsKLQkJdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0gPSBwYWdlOwotCQlpZiAoIXBhZ2UpIHsKLQkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7Ci0JCQlmcmVlX3Bpb19ndWVzdF9wYWdlcyh2Y3B1KTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQorCXZjcHUtPmFyY2gucGlvLmd1ZXN0X2d2YSA9IGFkZHJlc3M7CiAKIAlwaW9fZGV2ID0gdmNwdV9maW5kX3Bpb19kZXYodmNwdSwgcG9ydCwKIAkJCQkgICAgdmNwdS0+YXJjaC5waW8uY3VyX2NvdW50LApAQCAtMjU3Miw3ICsyNjQzLDExIEBACiAJaWYgKCF2Y3B1LT5hcmNoLnBpby5pbikgewogCQkvKiBzdHJpbmcgUElPIHdyaXRlICovCiAJCXJldCA9IHBpb19jb3B5X2RhdGEodmNwdSk7Ci0JCWlmIChyZXQgPj0gMCAmJiBwaW9fZGV2KSB7CisJCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKKwkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAocmV0ID09IDAgJiYgcGlvX2RldikgewogCQkJcGlvX3N0cmluZ193cml0ZShwaW9fZGV2LCB2Y3B1KTsKIAkJCWNvbXBsZXRlX3Bpbyh2Y3B1KTsKIAkJCWlmICh2Y3B1LT5hcmNoLnBpby5jb3VudCA9PSAwKQpAQCAtMjU4Nyw5ICsyNjYyLDcyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZW11bGF0ZV9waW9fc3RyaW5nKTsKIAorc3RhdGljIHZvaWQgYm91bmNlX29mZih2b2lkICppbmZvKQoreworCS8qIG5vdGhpbmcgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGludCAgcmVmX2ZyZXE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0c2Nfa2h6X3JlZjsKKworc3RhdGljIGludCBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAorCQkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CisJc3RydWN0IGt2bSAqa3ZtOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgaSwgc2VuZF9pcGkgPSAwOworCisJaWYgKCFyZWZfZnJlcSkKKwkJcmVmX2ZyZXEgPSBmcmVxLT5vbGQ7CisKKwlpZiAodmFsID09IENQVUZSRVFfUFJFQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykKKwkJcmV0dXJuIDA7CisJaWYgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgZnJlcS0+b2xkIDwgZnJlcS0+bmV3KQorCQlyZXR1cm4gMDsKKwlwZXJfY3B1KGNwdV90c2Nfa2h6LCBmcmVxLT5jcHUpID0gY3B1ZnJlcV9zY2FsZSh0c2Nfa2h6X3JlZiwgcmVmX2ZyZXEsIGZyZXEtPm5ldyk7CisKKwlzcGluX2xvY2soJmt2bV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGt2bSwgJnZtX2xpc3QsIHZtX2xpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgeworCQkJdmNwdSA9IGt2bS0+dmNwdXNbaV07CisJCQlpZiAoIXZjcHUpCisJCQkJY29udGludWU7CisJCQlpZiAodmNwdS0+Y3B1ICE9IGZyZXEtPmNwdSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgha3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUodmNwdSkpCisJCQkJY29udGludWU7CisJCQlpZiAodmNwdS0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQlzZW5kX2lwaSsrOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CisKKwlpZiAoZnJlcS0+b2xkIDwgZnJlcS0+bmV3ICYmIHNlbmRfaXBpKSB7CisJCS8qCisJCSAqIFdlIHVwc2NhbGUgdGhlIGZyZXF1ZW5jeS4gIE11c3QgbWFrZSB0aGUgZ3Vlc3QKKwkJICogZG9lc24ndCBzZWUgb2xkIGt2bWNsb2NrIHZhbHVlcyB3aGlsZSBydW5uaW5nIHdpdGgKKwkJICogdGhlIG5ldyBmcmVxdWVuY3ksIG90aGVyd2lzZSB3ZSByaXNrIHRoZSBndWVzdCBzZWVzCisJCSAqIHRpbWUgZ28gYmFja3dhcmRzLgorCQkgKgorCQkgKiBJbiBjYXNlIHdlIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IGZvciBhbm90aGVyIGNwdQorCQkgKiAod2hpY2ggbWlnaHQgYmUgaW4gZ3Vlc3QgY29udGV4dCkgc2VuZCBhbiBpbnRlcnJ1cHQKKwkJICogdG8ga2ljayB0aGUgY3B1IG91dCBvZiBndWVzdCBjb250ZXh0LiAgTmV4dCB0aW1lCisJCSAqIGd1ZXN0IGNvbnRleHQgaXMgZW50ZXJlZCBrdm1jbG9jayB3aWxsIGJlIHVwZGF0ZWQsCisJCSAqIHNvIHRoZSBndWVzdCB3aWxsIG5vdCBzZWUgc3RhbGUgdmFsdWVzLgorCQkgKi8KKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGZyZXEtPmNwdSwgYm91bmNlX29mZiwgTlVMTCwgMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7CisgICAgICAgIC5ub3RpZmllcl9jYWxsICA9IGt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXIKK307CisKIGludCBrdm1fYXJjaF9pbml0KHZvaWQgKm9wYXF1ZSkKIHsKLQlpbnQgcjsKKwlpbnQgciwgY3B1OwogCXN0cnVjdCBrdm1feDg2X29wcyAqb3BzID0gKHN0cnVjdCBrdm1feDg2X29wcyAqKW9wYXF1ZTsKIAogCWlmIChrdm1feDg2X29wcykgewpAQCAtMjYyMCw2ICsyNzU4LDE1IEBACiAJa3ZtX21tdV9zZXRfYmFzZV9wdGVzKFBUX1BSRVNFTlRfTUFTSyk7CiAJa3ZtX21tdV9zZXRfbWFza19wdGVzKFBUX1VTRVJfTUFTSywgUFRfQUNDRVNTRURfTUFTSywKIAkJCVBUX0RJUlRZX01BU0ssIFBUNjRfTlhfTUFTSywgMCwgMCk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlwZXJfY3B1KGNwdV90c2Nfa2h6LCBjcHUpID0gdHNjX2toejsKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKSB7CisJCXRzY19raHpfcmVmID0gdHNjX2toejsKKwkJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigma3ZtY2xvY2tfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkJICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworCX0KKwogCXJldHVybiAwOwogCiBvdXQ6CkBAIC0yODI3LDI1ICsyOTc0LDIwIEBACiAJaWYgKChlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NJR05JRkNBTlRfSU5ERVgpICYmIGUtPmluZGV4ICE9IGluZGV4KQogCQlyZXR1cm4gMDsKIAlpZiAoKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQykgJiYKLQkJIShlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCkpCisJICAgICEoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBrdm1fZW11bGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqa3ZtX2ZpbmRfY3B1aWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgICAgICB1MzIgZnVuY3Rpb24sIHUzMiBpbmRleCkKIHsKIAlpbnQgaTsKLQl1MzIgZnVuY3Rpb24sIGluZGV4OwotCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplLCAqYmVzdDsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdCA9IE5VTEw7CiAKLQlmdW5jdGlvbiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwotCWluZGV4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIDApOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCAwKTsKLQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOwotCWJlc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmNwdWlkX25lbnQ7ICsraSkgeworCQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZTsKKwogCQllID0gJnZjcHUtPmFyY2guY3B1aWRfZW50cmllc1tpXTsKIAkJaWYgKGlzX21hdGNoaW5nX2NwdWlkX2VudHJ5KGUsIGZ1bmN0aW9uLCBpbmRleCkpIHsKIAkJCWlmIChlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMpCkBAIC0yODYwLDYgKzMwMDIsMjEgQEAKIAkJCWlmICghYmVzdCB8fCBlLT5mdW5jdGlvbiA+IGJlc3QtPmZ1bmN0aW9uKQogCQkJCWJlc3QgPSBlOwogCX0KKwlyZXR1cm4gYmVzdDsKK30KKwordm9pZCBrdm1fZW11bGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdTMyIGZ1bmN0aW9uLCBpbmRleDsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDsKKworCWZ1bmN0aW9uID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CisJaW5kZXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgMCk7CisJYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIGZ1bmN0aW9uLCBpbmRleCk7CiAJaWYgKGJlc3QpIHsKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIGJlc3QtPmVheCk7CiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCBiZXN0LT5lYngpOwpAQCAtMjk0NSw2ICszMTAyLDggQEAKIAlpZiAodmNwdS0+cmVxdWVzdHMpIHsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX01JR1JBVEVfVElNRVIsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlfX2t2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX0tWTUNMT0NLX1VQREFURSwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJCWt2bV93cml0ZV9ndWVzdF90aW1lKHZjcHUpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlrdm1fbW11X3N5bmNfcm9vdHModmNwdSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9UTEJfRkxVU0gsICZ2Y3B1LT5yZXF1ZXN0cykpCkBAIC0yOTc5LDkgKzMxMzgsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJa3ZtX3g4Nl9vcHMtPmd1ZXN0X2RlYnVnX3ByZSh2Y3B1KTsKLQogCXZjcHUtPmd1ZXN0X21vZGUgPSAxOwogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgZ3Vlc3RfbW9kZSBhc3NpZ25tZW50IHdvbid0IGhhcHBlbiBhZnRlcgpAQCAtMzAwMiwxMCArMzE1OCwzNCBAQAogCiAJa3ZtX2d1ZXN0X2VudGVyKCk7CiAKKwlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNiwgNik7CisJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjcsIDcpOworCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKSkgeworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzBdLCAwKTsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsxXSwgMSk7CisJCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMl0sIDIpOworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzNdLCAzKTsKKworCQlzZXRfZGVidWdyZWcoMCwgNyk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlswXSwgMCk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlsxXSwgMSk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlsyXSwgMik7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlszXSwgMyk7CisJfQogCiAJS1ZNVFJBQ0VfMEQoVk1FTlRSWSwgdmNwdSwgZW50cnlleGl0KTsKIAlrdm1feDg2X29wcy0+cnVuKHZjcHUsIGt2bV9ydW4pOwogCisJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MpKSB7CisJCXNldF9kZWJ1Z3JlZygwLCA3KTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlswXSwgMCk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMV0sIDEpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzJdLCAyKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlszXSwgMyk7CisJfQorCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI2LCA2KTsKKwlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNywgNyk7CisKIAl2Y3B1LT5ndWVzdF9tb2RlID0gMDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTMxOTIsNyArMzM3Miw3IEBACiAJLyoKIAkgKiBEb24ndCBsZWFrIGRlYnVnIGZsYWdzIGluIGNhc2UgdGhleSB3ZXJlIHNldCBmb3IgZ3Vlc3QgZGVidWdnaW5nCiAJICovCi0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgJiYgdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCkKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKIAkJcmVncy0+cmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkYpOwogCiAJdmNwdV9wdXQodmNwdSk7CkBAIC0zODExLDE1ICszOTkxLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCWludCByOworCWludCBpLCByOwogCiAJdmNwdV9sb2FkKHZjcHUpOwogCisJaWYgKChkYmctPmNvbnRyb2wgJiAoS1ZNX0dVRVNUREJHX0VOQUJMRSB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSA9PQorCSAgICAoS1ZNX0dVRVNUREJHX0VOQUJMRSB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfREJfUkVHUzsgKytpKQorCQkJdmNwdS0+YXJjaC5lZmZfZGJbaV0gPSBkYmctPmFyY2guZGVidWdyZWdbaV07CisJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPQorCQkJKGRiZy0+YXJjaC5kZWJ1Z3JlZ1s3XSAmIERSN19CUF9FTl9NQVNLKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0RCX1JFR1M7IGkrKykKKwkJCXZjcHUtPmFyY2guZWZmX2RiW2ldID0gdmNwdS0+YXJjaC5kYltpXTsKKwkJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9ICh2Y3B1LT5hcmNoLmRyNyAmIERSN19CUF9FTl9NQVNLKTsKKwl9CisKIAlyID0ga3ZtX3g4Nl9vcHMtPnNldF9ndWVzdF9kZWJ1Zyh2Y3B1LCBkYmcpOwogCisJaWYgKGRiZy0+Y29udHJvbCAmIEtWTV9HVUVTVERCR19JTkpFQ1RfREIpCisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKKwllbHNlIGlmIChkYmctPmNvbnRyb2wgJiBLVk1fR1VFU1REQkdfSU5KRUNUX0JQKQorCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEJQX1ZFQ1RPUik7CisKIAl2Y3B1X3B1dCh2Y3B1KTsKIAogCXJldHVybiByOwpAQCAtNDAwNyw2ICs0MjA0LDExIEBACiAJdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IGZhbHNlOwogCXZjcHUtPmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7CiAKKwl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0gMDsKKwltZW1zZXQodmNwdS0+YXJjaC5kYiwgMCwgc2l6ZW9mKHZjcHUtPmFyY2guZGIpKTsKKwl2Y3B1LT5hcmNoLmRyNiA9IERSNl9GSVhFRF8xOworCXZjcHUtPmFyY2guZHI3ID0gRFI3X0ZJWEVEXzE7CisKIAlyZXR1cm4ga3ZtX3g4Nl9vcHMtPnZjcHVfcmVzZXQodmNwdSk7CiB9CiAKQEAgLTQxMDAsNiArNDMwMiw4IEBACiAJLyogUmVzZXJ2ZSBiaXQgMCBvZiBpcnFfc291cmNlc19iaXRtYXAgZm9yIHVzZXJzcGFjZSBpcnEgc291cmNlICovCiAJc2V0X2JpdChLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsICZrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKTsKIAorCXJkdHNjbGwoa3ZtLT5hcmNoLnZtX2luaXRfdHNjKTsKKwogCXJldHVybiBrdm07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKaW5kZXggZDE3NGRiNy4uY2E5MTc0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCTAsIEltcGxpY2l0T3BzIHwgU3RhY2ssIDAsIDAsCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBNb3YsIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LAogCS8qIDB4QzggLSAweENGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCBJbXBsaWNpdE9wcyB8IFN0YWNrLCAwLCAwLCAwLCAwLAogCS8qIDB4RDAgLSAweEQ3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLApAQCAtMTEzNiwxOCArMTEzNiwxOSBAQAogfQogCiBzdGF0aWMgaW50IGVtdWxhdGVfcG9wKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQorCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAorCQkgICAgICAgdm9pZCAqZGVzdCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgcmM7CiAKIAlyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChyZWdpc3Rlcl9hZGRyZXNzKGMsIHNzX2Jhc2UoY3R4dCksCiAJCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSksCi0JCQkJJmMtPnNyYy52YWwsIGMtPnNyYy5ieXRlcywgY3R4dC0+dmNwdSk7CisJCQkJZGVzdCwgbGVuLCBjdHh0LT52Y3B1KTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0JcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIGMtPnNyYy5ieXRlcyk7CisJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIGxlbik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMTU3LDExICsxMTU4LDkgQEAKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgcmM7CiAKLQljLT5zcmMuYnl0ZXMgPSBjLT5kc3QuYnl0ZXM7Ci0JcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMpOworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+ZHN0LmJ5dGVzKTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwotCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCXJldHVybiAwOwogfQogCkBAIC0xMjc5LDYgKzEyNzgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBlbXVsYXRlX3JldF9mYXIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgY3M7CisKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmVpcCwgYy0+b3BfYnl0ZXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWlmIChjLT5vcF9ieXRlcyA9PSA0KQorCQljLT5laXAgPSAodTMyKWMtPmVpcDsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmNzLCBjLT5vcF9ieXRlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmMgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgKHUxNiljcywgMSwgVkNQVV9TUkVHX0NTKTsKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCiB7CkBAIC0xNDY3LDExICsxNDg1LDkgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDU4IC4uLiAweDVmOiAvKiBwb3AgcmVnICovCiAJcG9wX2luc3RydWN0aW9uOgotCQljLT5zcmMuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMpOworCQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmRzdC52YWwsIGMtPm9wX2J5dGVzKTsKIAkJaWYgKHJjICE9IDApCiAJCQlnb3RvIGRvbmU7Ci0JCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCQlicmVhazsKIAljYXNlIDB4NjM6CQkvKiBtb3ZzeGQgKi8KIAkJaWYgKGN0eHQtPm1vZGUgIT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKQEAgLTE3MzgsNiArMTc1NCwxMSBAQAogCW1vdjoKIAkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CiAJCWJyZWFrOworCWNhc2UgMHhjYjoJCS8qIHJldCBmYXIgKi8KKwkJcmMgPSBlbXVsYXRlX3JldF9mYXIoY3R4dCwgb3BzKTsKKwkJaWYgKHJjKQorCQkJZ290byBkb25lOworCQlicmVhazsKIAljYXNlIDB4ZDAgLi4uIDB4ZDE6CS8qIEdycDIgKi8KIAkJYy0+c3JjLnZhbCA9IDE7CiAJCWVtdWxhdGVfZ3JwMihjdHh0KTsKQEAgLTE5MDgsMTEgKzE5MjksMTYgQEAKIAkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAkJCWJyZWFrOwogCQljYXNlIDM6IC8qIGxpZHQvdm1tY2FsbCAqLwotCQkJaWYgKGMtPm1vZHJtX21vZCA9PSAzICYmIGMtPm1vZHJtX3JtID09IDEpIHsKLQkJCQlyYyA9IGt2bV9maXhfaHlwZXJjYWxsKGN0eHQtPnZjcHUpOwotCQkJCWlmIChyYykKLQkJCQkJZ290byBkb25lOwotCQkJCWt2bV9lbXVsYXRlX2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKKwkJCWlmIChjLT5tb2RybV9tb2QgPT0gMykgeworCQkJCXN3aXRjaCAoYy0+bW9kcm1fcm0pIHsKKwkJCQljYXNlIDE6CisJCQkJCXJjID0ga3ZtX2ZpeF9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7CisJCQkJCWlmIChyYykKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXJjID0gcmVhZF9kZXNjcmlwdG9yKGN0eHQsIG9wcywgYy0+c3JjLnB0ciwKIAkJCQkJCSAgICAgJnNpemUsICZhZGRyZXNzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L0tjb25maWcgYi9hcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZwppbmRleCBjNzBlMTJiLi44ZGFiOGY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZwpAQCAtMyw3ICszLDYgQEAKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgogCWRlcGVuZHMgb24gIVg4Nl9QQUUKLQlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgogCXNlbGVjdCBWSVJUSU8KIAlzZWxlY3QgVklSVElPX1JJTkcKIAlzZWxlY3QgVklSVElPX0NPTlNPTEUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDk2MGE4ZDkuLjlmZTRkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xndWVzdC9ib290LmMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwpAQCAtMTczLDI0ICsxNzMsMjkgQEAKIHsKIAlyZXR1cm4gbGd1ZXN0X2RhdGEuaXJxX2VuYWJsZWQ7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHNhdmVfZmwpOwogCiAvKiByZXN0b3JlX2ZsYWdzKCkganVzdCBzZXRzIHRoZSBmbGFncyBiYWNrIHRvIHRoZSB2YWx1ZSBnaXZlbi4gKi8KIHN0YXRpYyB2b2lkIHJlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlsZ3Vlc3RfZGF0YS5pcnFfZW5hYmxlZCA9IGZsYWdzOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhyZXN0b3JlX2ZsKTsKIAogLyogSW50ZXJydXB0cyBnbyBvZmYuLi4gKi8KIHN0YXRpYyB2b2lkIGlycV9kaXNhYmxlKHZvaWQpCiB7CiAJbGd1ZXN0X2RhdGEuaXJxX2VuYWJsZWQgPSAwOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyhpcnFfZGlzYWJsZSk7CiAKIC8qIEludGVycnVwdHMgZ28gb24uLi4gKi8KIHN0YXRpYyB2b2lkIGlycV9lbmFibGUodm9pZCkKIHsKIAlsZ3Vlc3RfZGF0YS5pcnFfZW5hYmxlZCA9IFg4Nl9FRkxBR1NfSUY7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKGlycV9lbmFibGUpOworCiAvKjoqLwogLypNOjAwMyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgZm9yIG91dHN0YW5kaW5nIGludGVycnVwdHMgd2hlbiB3ZSByZS1lbmFibGUKICAqIHRoZW0gKG9yIHdoZW4gd2UgdW5tYXNrIGFuIGludGVycnVwdCkuICBUaGlzIHNlZW1zIHRvIHdvcmsgZm9yIHRoZSBtb21lbnQsCkBAIC0yNzgsNyArMjgzLDcgQEAKIAkvKiBUaGVyZSdzIG9uZSBwcm9ibGVtIHdoaWNoIG5vcm1hbCBoYXJkd2FyZSBkb2Vzbid0IGhhdmU6IHRoZSBIb3N0CiAJICogY2FuJ3QgaGFuZGxlIHVzIHJlbW92aW5nIGVudHJpZXMgd2UncmUgY3VycmVudGx5IHVzaW5nLiAgU28gd2UgY2xlYXIKIAkgKiB0aGUgR1MgcmVnaXN0ZXIgaGVyZTogaWYgaXQncyBuZWVkZWQgaXQnbGwgYmUgcmVsb2FkZWQgYW55d2F5LiAqLwotCWxvYWRzZWdtZW50KGdzLCAwKTsKKwlsYXp5X2xvYWRfZ3MoMCk7CiAJbGF6eV9oY2FsbChMSENBTExfTE9BRF9UTFMsIF9fcGEoJnQtPnRsc19hcnJheSksIGNwdSwgMCk7CiB9CiAKQEAgLTgzMCwxMyArODM1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXBpY19vcHMgbGd1ZXN0X2Jhc2ljX2FwaWNfb3BzID0gewotCS5yZWFkID0gbGd1ZXN0X2FwaWNfcmVhZCwKLQkud3JpdGUgPSBsZ3Vlc3RfYXBpY193cml0ZSwKLQkuaWNyX3JlYWQgPSBsZ3Vlc3RfYXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0gbGd1ZXN0X2FwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0gbGd1ZXN0X2FwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gbGd1ZXN0X2FwaWNfc2FmZV93YWl0X2ljcl9pZGxlLAorc3RhdGljIHZvaWQgc2V0X2xndWVzdF9iYXNpY19hcGljX29wcyh2b2lkKQoreworCWFwaWMtPnJlYWQgPSBsZ3Vlc3RfYXBpY19yZWFkOworCWFwaWMtPndyaXRlID0gbGd1ZXN0X2FwaWNfd3JpdGU7CisJYXBpYy0+aWNyX3JlYWQgPSBsZ3Vlc3RfYXBpY19pY3JfcmVhZDsKKwlhcGljLT5pY3Jfd3JpdGUgPSBsZ3Vlc3RfYXBpY19pY3Jfd3JpdGU7CisJYXBpYy0+d2FpdF9pY3JfaWRsZSA9IGxndWVzdF9hcGljX3dhaXRfaWNyX2lkbGU7CisJYXBpYy0+c2FmZV93YWl0X2ljcl9pZGxlID0gbGd1ZXN0X2FwaWNfc2FmZV93YWl0X2ljcl9pZGxlOwogfTsKICNlbmRpZgogCkBAIC05OTEsMTAgKzk5NywxMCBAQAogCiAJLyogaW50ZXJydXB0LXJlbGF0ZWQgb3BlcmF0aW9ucyAqLwogCXB2X2lycV9vcHMuaW5pdF9JUlEgPSBsZ3Vlc3RfaW5pdF9JUlE7Ci0JcHZfaXJxX29wcy5zYXZlX2ZsID0gc2F2ZV9mbDsKLQlwdl9pcnFfb3BzLnJlc3RvcmVfZmwgPSByZXN0b3JlX2ZsOwotCXB2X2lycV9vcHMuaXJxX2Rpc2FibGUgPSBpcnFfZGlzYWJsZTsKLQlwdl9pcnFfb3BzLmlycV9lbmFibGUgPSBpcnFfZW5hYmxlOworCXB2X2lycV9vcHMuc2F2ZV9mbCA9IFBWX0NBTExFRV9TQVZFKHNhdmVfZmwpOworCXB2X2lycV9vcHMucmVzdG9yZV9mbCA9IFBWX0NBTExFRV9TQVZFKHJlc3RvcmVfZmwpOworCXB2X2lycV9vcHMuaXJxX2Rpc2FibGUgPSBQVl9DQUxMRUVfU0FWRShpcnFfZGlzYWJsZSk7CisJcHZfaXJxX29wcy5pcnFfZW5hYmxlID0gUFZfQ0FMTEVFX1NBVkUoaXJxX2VuYWJsZSk7CiAJcHZfaXJxX29wcy5zYWZlX2hhbHQgPSBsZ3Vlc3Rfc2FmZV9oYWx0OwogCiAJLyogaW5pdC10aW1lIG9wZXJhdGlvbnMgKi8KQEAgLTEwMzcsNyArMTA0Myw3IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkvKiBhcGljIHJlYWQvd3JpdGUgaW50ZXJjZXB0cyAqLwotCWFwaWNfb3BzID0gJmxndWVzdF9iYXNpY19hcGljX29wczsKKwlzZXRfbGd1ZXN0X2Jhc2ljX2FwaWNfb3BzKCk7CiAjZW5kaWYKIAogCS8qIHRpbWUgb3BlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2dldHVzZXIuUyBiL2FyY2gveDg2L2xpYi9nZXR1c2VyLlMKaW5kZXggYWQzNzQwMC4uNTFmMTUwNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL2dldHVzZXIuUworKysgYi9hcmNoL3g4Ni9saWIvZ2V0dXNlci5TCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZGVmYXVsdC9NYWtlZmlsZSBiL2FyY2gveDg2L21hY2gtZGVmYXVsdC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEyZmUzNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWRlZmF1bHQvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCi0jCi0KLW9iai15CQkJCTo9IHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jIGIvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjU5MTguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqCU1hY2hpbmUgc3BlY2lmaWMgc2V0dXAgZm9yIGdlbmVyaWMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KLSNpbmNsdWRlIDxhc20vZTgyMC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotI2RlZmluZSBERUZBVUxUX1NFTkRfSVBJCSgxKQotI2Vsc2UKLSNkZWZpbmUgREVGQVVMVF9TRU5EX0lQSQkoMCkKLSNlbmRpZgotCi1pbnQgbm9fYnJvYWRjYXN0ID0gREVGQVVMVF9TRU5EX0lQSTsKLQotLyoqCi0gKiBwcmVfaW50cl9pbml0X2hvb2sgLSBpbml0aWFsaXNhdGlvbiBwcmlvciB0byBzZXR0aW5nIHVwIGludGVycnVwdCB2ZWN0b3JzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglQZXJmb3JtIGFueSBuZWNlc3NhcnkgaW50ZXJydXB0IGluaXRpYWxpc2F0aW9uIHByaW9yIHRvIHNldHRpbmcgdXAKLSAqCXRoZSAib3JkaW5hcnkiIGludGVycnVwdCBjYWxsIGdhdGVzLiAgRm9yIGxlZ2FjeSByZWFzb25zLCB0aGUgSVNBCi0gKglpbnRlcnJ1cHRzIHNob3VsZCBiZSBpbml0aWFsaXNlZCBoZXJlIGlmIHRoZSBtYWNoaW5lIGVtdWxhdGVzIGEgUEMKLSAqCWluIGFueSB3YXkuCi0gKiovCi12b2lkIF9faW5pdCBwcmVfaW50cl9pbml0X2hvb2sodm9pZCkKLXsKLQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfaW50cl9pbml0KSB7Ci0JCWlmICh4ODZfcXVpcmtzLT5hcmNoX3ByZV9pbnRyX2luaXQoKSkKLQkJCXJldHVybjsKLQl9Ci0JaW5pdF9JU0FfaXJxcygpOwotfQotCi0vKgotICogSVJRMiBpcyBjYXNjYWRlIGludGVycnVwdCB0byBzZWNvbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIKLSAqLwotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMiA9IHsKLQkuaGFuZGxlciA9IG5vX2FjdGlvbiwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCi0JLm5hbWUgPSAiY2FzY2FkZSIsCi19OwotCi0vKioKLSAqIGludHJfaW5pdF9ob29rIC0gcG9zdCBnYXRlIHNldHVwIGludGVycnVwdCBpbml0aWFsaXNhdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRmlsbCBpbiBhbnkgaW50ZXJydXB0cyB0aGF0IG1heSBoYXZlIGJlZW4gbGVmdCBvdXQgYnkgdGhlIGdlbmVyYWwKLSAqCWluaXRfSVJRKCkgcm91dGluZS4gIGludGVycnVwdHMgaGF2aW5nIHRvIGRvIHdpdGggdGhlIG1hY2hpbmUgcmF0aGVyCi0gKgl0aGFuIHRoZSBkZXZpY2VzIG9uIHRoZSBJL08gYnVzIChsaWtlIEFQSUMgaW50ZXJydXB0cyBpbiBpbnRlbCBNUAotICoJc3lzdGVtcykgYXJlIHN0YXJ0ZWQgaGVyZS4KLSAqKi8KLXZvaWQgX19pbml0IGludHJfaW5pdF9ob29rKHZvaWQpCi17Ci0JaWYgKHg4Nl9xdWlya3MtPmFyY2hfaW50cl9pbml0KSB7Ci0JCWlmICh4ODZfcXVpcmtzLT5hcmNoX2ludHJfaW5pdCgpKQotCQkJcmV0dXJuOwotCX0KLQlpZiAoIWFjcGlfaW9hcGljKQotCQlzZXR1cF9pcnEoMiwgJmlycTIpOwotCi19Ci0KLS8qKgotICogcHJlX3NldHVwX2FyY2hfaG9vayAtIGhvb2sgY2FsbGVkIHByaW9yIHRvIGFueSBzZXR1cF9hcmNoKCkgZXhlY3V0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglnZW5lcmFsbHkgdXNlZCB0byBhY3RpdmF0ZSBhbnkgbWFjaGluZSBzcGVjaWZpYyBpZGVudGlmaWNhdGlvbgotICoJcm91dGluZXMgdGhhdCBtYXkgYmUgbmVlZGVkIGJlZm9yZSBzZXR1cF9hcmNoKCkgcnVucy4gIE9uIFZveWFnZXIKLSAqCXRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIGJvYXJkIHJldmlzaW9uIGFuZCB0eXBlLgotICoqLwotdm9pZCBfX2luaXQgcHJlX3NldHVwX2FyY2hfaG9vayh2b2lkKQotewotfQotCi0vKioKLSAqIHRyYXBfaW5pdF9ob29rIC0gaW5pdGlhbGlzZSBzeXN0ZW0gc3BlY2lmaWMgdHJhcHMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNhbGxlZCBhcyB0aGUgZmluYWwgYWN0IG9mIHRyYXBfaW5pdCgpLiAgVXNlZCBpbiBWSVNXUyB0byBpbml0aWFsaXNlCi0gKgl0aGUgdmFyaW91cyBib2FyZCBzcGVjaWZpYyBBUElDIHRyYXBzLgotICoqLwotdm9pZCBfX2luaXQgdHJhcF9pbml0X2hvb2sodm9pZCkKLXsKLQlpZiAoeDg2X3F1aXJrcy0+YXJjaF90cmFwX2luaXQpIHsKLQkJaWYgKHg4Nl9xdWlya3MtPmFyY2hfdHJhcF9pbml0KCkpCi0JCQlyZXR1cm47Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKLQkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfSVJRUE9MTCB8IElSUUZfVElNRVIsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAotCS5uYW1lID0gInRpbWVyIgotfTsKLQotLyoqCi0gKiBwcmVfdGltZV9pbml0X2hvb2sgLSBkbyBhbnkgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb25zIGJlZm9yZS4KLSAqCi0gKiovCi12b2lkIF9faW5pdCBwcmVfdGltZV9pbml0X2hvb2sodm9pZCkKLXsKLQlpZiAoeDg2X3F1aXJrcy0+YXJjaF9wcmVfdGltZV9pbml0KQotCQl4ODZfcXVpcmtzLT5hcmNoX3ByZV90aW1lX2luaXQoKTsKLX0KLQotLyoqCi0gKiB0aW1lX2luaXRfaG9vayAtIGRvIGFueSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0gdGltZXIuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglNdXN0IHBsdWcgdGhlIHN5c3RlbSB0aW1lciBpbnRlcnJ1cHQgc291cmNlIGF0IEhaIGludG8gdGhlIElSUSBsaXN0ZWQKLSAqCWluIGlycV92ZWN0b3JzLmg6VElNRVJfSVJRCi0gKiovCi12b2lkIF9faW5pdCB0aW1lX2luaXRfaG9vayh2b2lkKQotewotCWlmICh4ODZfcXVpcmtzLT5hcmNoX3RpbWVfaW5pdCkgewotCQkvKgotCQkgKiBBIG5vbnplcm8gcmV0dXJuIGNvZGUgZG9lcyBub3QgbWVhbiBmYWlsdXJlLCBpdCBtZWFucwotCQkgKiB0aGF0IHRoZSBhcmNoaXRlY3R1cmUgcXVpcmsgZG9lcyBub3Qgd2FudCBhbnkKLQkJICogZ2VuZXJpYyAodGltZXIpIHNldHVwIHRvIGJlIHBlcmZvcm1lZCBhZnRlciB0aGlzOgotCQkgKi8KLQkJaWYgKHg4Nl9xdWlya3MtPmFyY2hfdGltZV9pbml0KCkpCi0JCQlyZXR1cm47Ci0JfQotCi0JaXJxMC5tYXNrID0gY3B1bWFza19vZl9jcHUoMCk7Ci0Jc2V0dXBfaXJxKDAsICZpcnEwKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQ0EKLS8qKgotICogbWNhX25taV9ob29rIC0gaG9vayBpbnRvIE1DQSBzcGVjaWZpYyBOTUkgY2hhaW4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBNQ0EgKE1pY3JvY2hhbm5lbCBBcmNoaXRlY3R1cmUpIGhhcyBhbiBOTUkgY2hhaW4gZm9yIE5NSSBzb3VyY2VzCi0gKglhbG9uZyB0aGUgTUNBIGJ1cy4gIFVzZSB0aGlzIHRvIGhvb2sgaW50byB0aGF0IGNoYWluIGlmIHlvdSB3aWxsIG5lZWQKLSAqCWl0LgotICoqLwotdm9pZCBtY2Ffbm1pX2hvb2sodm9pZCkKLXsKLQkvKgotCSAqIElmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlcmUncyBhIHdob2xlIGJ1bmNoIG9mIG90aGVyIHRoaW5ncyB0aGF0Ci0JICogd2UgY2FuIGRvIHRvIGNoZWNrIGZvciBOTUkgcHJvYmxlbXMsIGJ1dCB0aGF0J3MgYWxsIEkga25vdyBhYm91dAotCSAqIGF0IHRoZSBtb21lbnQuCi0JICovCi0JcHJfd2FybmluZygiTk1JIGdlbmVyYXRlZCBmcm9tIHVua25vd24gc291cmNlIVxuIik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIF9faW5pdCBpbnQgbm9faXBpX2Jyb2FkY2FzdChjaGFyICpzdHIpCi17Ci0JZ2V0X29wdGlvbigmc3RyLCAmbm9fYnJvYWRjYXN0KTsKLQlwcl9pbmZvKCJVc2luZyAlcyBtb2RlXG4iLAotCQlub19icm9hZGNhc3QgPyAiTm8gSVBJIEJyb2FkY2FzdCIgOiAiSVBJIEJyb2FkY2FzdCIpOwotCXJldHVybiAxOwotfQotX19zZXR1cCgibm9faXBpX2Jyb2FkY2FzdD0iLCBub19pcGlfYnJvYWRjYXN0KTsKLQotc3RhdGljIGludCBfX2luaXQgcHJpbnRfaXBpX21vZGUodm9pZCkKLXsKLQlwcl9pbmZvKCJVc2luZyBJUEkgJXMgbW9kZVxuIiwKLQkJbm9fYnJvYWRjYXN0ID8gIk5vLVNob3J0Y3V0IiA6ICJTaG9ydGN1dCIpOwotCXJldHVybiAwOwotfQotCi1sYXRlX2luaXRjYWxsKHByaW50X2lwaV9tb2RlKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL01ha2VmaWxlIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzMwZjRlLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBnZW5lcmljIGFyY2hpdGVjdHVyZQotIwotCi1FWFRSQV9DRkxBR1MJCQk6PSAtSWFyY2gveDg2L2tlcm5lbAotCi1vYmoteQkJCQk6PSBwcm9iZS5vIGRlZmF1bHQubwotb2JqLSQoQ09ORklHX1g4Nl9OVU1BUSkJCSs9IG51bWFxLm8KLW9iai0kKENPTkZJR19YODZfU1VNTUlUKQkrPSBzdW1taXQubwotb2JqLSQoQ09ORklHX1g4Nl9CSUdTTVApCSs9IGJpZ3NtcC5vCi1vYmotJChDT05GSUdfWDg2X0VTNzAwMCkJKz0gZXM3MDAwLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0Yzc4NC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQVBJQyBkcml2ZXIgZm9yICJiaWdzbXAiIFhBUElDIG1hY2hpbmVzIHdpdGggbW9yZSB0aGFuIDggdmlydHVhbCBDUFVzLgotICogRHJpdmVzIHRoZSBsb2NhbCBBUElDIGluICJjbHVzdGVyZWQgbW9kZSIuCi0gKi8KLSNkZWZpbmUgQVBJQ19ERUZJTklUSU9OIDEKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxhc20vYmlnc21wL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxhc20vYmlnc21wL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vYmlnc21wL2lwaS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9tYWNoX3dha2VjcHUuaD4KLQotc3RhdGljIGludCBkbWlfYmlnc21wOyAvKiBjYW4gYmUgc2V0IGJ5IGRtaSBzY2FubmVycyAqLwotCi1zdGF0aWMgaW50IGhwX2h0X2JpZ3NtcChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGRldGVjdGVkOiBmb3JjZSB1c2Ugb2YgYXBpYz1iaWdzbXBcbiIsIGQtPmlkZW50KTsKLQlkbWlfYmlnc21wID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgYmlnc21wX2RtaV90YWJsZVtdID0gewotCXsgaHBfaHRfYmlnc21wLCAiSFAgUHJvTGlhbnQgREw3NjAgRzIiLAotCXsgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkhQIiksCi0JRE1JX01BVENIKERNSV9CSU9TX1ZFUlNJT04sICJQNDQtIiksfQotCX0sCi0KLQl7IGhwX2h0X2JpZ3NtcCwgIkhQIFByb0xpYW50IERMNzQwIiwKLQl7IERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAotCURNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCAiUDQ3LSIpLH0KLQl9LAotCSB7IH0KLX07Ci0KLXN0YXRpYyB2b2lkIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCi17Ci0JY3B1c19jbGVhcigqcmV0bWFzayk7Ci0JY3B1X3NldChjcHUsICpyZXRtYXNrKTsKLX0KLQotc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKLXsKLQlpZiAoZGVmX3RvX2JpZ3NtcCkKLQkJZG1pX2JpZ3NtcCA9IDE7Ci0JZWxzZQotCQlkbWlfY2hlY2tfc3lzdGVtKGJpZ3NtcF9kbWlfdGFibGUpOwotCXJldHVybiBkbWlfYmlnc21wOwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX2JpZ3NtcCA9IEFQSUNfSU5JVCgiYmlnc21wIiwgcHJvYmVfYmlnc21wKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjNhNGE3Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogRGVmYXVsdCBnZW5lcmljIEFQSUMgZHJpdmVyLiBUaGlzIGhhbmRsZXMgdXAgdG8gOCBDUFVzLgotICovCi0jZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9tYWNoX2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1Lmg+Ci0KLS8qIHNob3VsZCBiZSBjYWxsZWQgbGFzdC4gKi8KLXN0YXRpYyBpbnQgcHJvYmVfZGVmYXVsdCh2b2lkKQotewotCXJldHVybiAxOwotfQotCi1zdHJ1Y3QgZ2VuYXBpYyBhcGljX2RlZmF1bHQgPSBBUElDX0lOSVQoImRlZmF1bHQiLCBwcm9iZV9kZWZhdWx0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkZWQxNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIEFQSUMgZHJpdmVyIGZvciB0aGUgVW5pc3lzIEVTNzAwMCBjaGlwc2V0LgotICovCi0jZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2VzNzAwMC9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2VzNzAwMC9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2VzNzAwMC9pcGkuaD4KLSNpbmNsdWRlIDxhc20vZXM3MDAwL21wcGFyc2UuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfd2FrZWNwdS5oPgotCi12b2lkIF9faW5pdCBlczcwMDBfdXBkYXRlX2dlbmFwaWNfdG9fY2x1c3Rlcih2b2lkKQotewotCWdlbmFwaWMtPnRhcmdldF9jcHVzID0gdGFyZ2V0X2NwdXNfY2x1c3RlcjsKLQlnZW5hcGljLT5pbnRfZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFX0NMVVNURVI7Ci0JZ2VuYXBpYy0+aW50X2Rlc3RfbW9kZSA9IElOVF9ERVNUX01PREVfQ0xVU1RFUjsKLQlnZW5hcGljLT5ub19iYWxhbmNlX2lycSA9IE5PX0JBTEFOQ0VfSVJRX0NMVVNURVI7Ci0KLQlnZW5hcGljLT5pbml0X2FwaWNfbGRyID0gaW5pdF9hcGljX2xkcl9jbHVzdGVyOwotCi0JZ2VuYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkID0gY3B1X21hc2tfdG9fYXBpY2lkX2NsdXN0ZXI7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvYmVfZXM3MDAwKHZvaWQpCi17Ci0JLyogcHJvYmVkIGxhdGVyIGluIG1wdGFibGUvQUNQSSBob29rcyAqLwotCXJldHVybiAwOwotfQotCi1leHRlcm4gdm9pZCBlczcwMDBfc3dfYXBpYyh2b2lkKTsKLXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCi17Ci0JZXM3MDAwX3N3X2FwaWMoKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50Ci1tcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCi17Ci0JaWYgKG1wYy0+b2VtcHRyKSB7Ci0JCXN0cnVjdCBtcGNfb2VtdGFibGUgKm9lbV90YWJsZSA9Ci0JCQkoc3RydWN0IG1wY19vZW10YWJsZSAqKW1wYy0+b2VtcHRyOwotCQlpZiAoIXN0cm5jbXAob2VtLCAiVU5JU1lTIiwgNikpCi0JCQlyZXR1cm4gcGFyc2VfdW5pc3lzX29lbSgoY2hhciAqKW9lbV90YWJsZSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0FDUEkKLS8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBvZW1fYWRkciA9IDA7Ci0JaW50IGNoZWNrX2RzZHQ7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBjaGVjayBkc2R0IGF0IGZpcnN0IHRvIGF2b2lkIGNsZWFyIGZpeF9tYXAgZm9yIG9lbV9hZGRyICovCi0JY2hlY2tfZHNkdCA9IGVzNzAwMF9jaGVja19kc2R0KCk7Ci0KLQlpZiAoIWZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKCZvZW1fYWRkcikpIHsKLQkJaWYgKGNoZWNrX2RzZHQpCi0JCQlyZXQgPSBwYXJzZV91bmlzeXNfb2VtKChjaGFyICopb2VtX2FkZHIpOwotCQllbHNlIHsKLQkJCXNldHVwX3VuaXN5cygpOwotCQkJcmV0ID0gMTsKLQkJfQotCQkvKgotCQkgKiB3ZSBuZWVkIHRvIHVubWFwIGl0Ci0JCSAqLwotCQl1bm1hcF91bmlzeXNfYWNwaV9vZW1fdGFibGUob2VtX2FkZHIpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKLXsKLQkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cwotCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0Ci0JICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCi0JICoKLQkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bwotCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQotCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCi0JICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07Ci19Ci0KLXN0cnVjdCBnZW5hcGljIF9faW5pdGRhdGFfcmVmb2sgYXBpY19lczcwMDAgPSBBUElDX0lOSVQoImVzNzAwMCIsIHByb2JlX2VzNzAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc5ZTIyLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIEFQSUMgZHJpdmVyIGZvciB0aGUgSUJNIE5VTUFRIGNoaXBzZXQuCi0gKi8KLSNkZWZpbmUgQVBJQ19ERUZJTklUSU9OIDEKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vbnVtYXEvYXBpY2RlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGFzbS9udW1hcS9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL251bWFxL2lwaS5oPgotI2luY2x1ZGUgPGFzbS9udW1hcS9tcHBhcnNlLmg+Ci0jaW5jbHVkZSA8YXNtL251bWFxL3dha2VjcHUuaD4KLSNpbmNsdWRlIDxhc20vbnVtYXEuaD4KLQotc3RhdGljIGludCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgY2hhciAqb2VtLCBjaGFyICpwcm9kdWN0aWQpCi17Ci0JbnVtYXFfbXBzX29lbV9jaGVjayhtcGMsIG9lbSwgcHJvZHVjdGlkKTsKLQlyZXR1cm4gZm91bmRfbnVtYXE7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvYmVfbnVtYXEodm9pZCkKLXsKLQkvKiBhbHJlYWR5IGtub3cgZnJvbSBnZXRfbWVtY2ZnX251bWFxKCkgKi8KLQlyZXR1cm4gZm91bmRfbnVtYXE7Ci19Ci0KLS8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KLXN0YXRpYyBpbnQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKLXsKLQkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cwotCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0Ci0JICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCi0JICoKLQkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bwotCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQotCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCi0JICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07Ci19Ci0KLXN0cnVjdCBnZW5hcGljIGFwaWNfbnVtYXEgPSBBUElDX0lOSVQoIk5VTUFRIiwgcHJvYmVfbnVtYXEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3Byb2JlLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhMzhkYS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgotICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKLSAqCi0gKiBHZW5lcmljIHg4NiBBUElDIGRyaXZlciBwcm9iZSBsYXllci4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfbnVtYXE7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY19zdW1taXQ7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY19iaWdzbXA7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY19lczcwMDA7Ci1leHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY19kZWZhdWx0OwotCi1zdHJ1Y3QgZ2VuYXBpYyAqZ2VuYXBpYyA9ICZhcGljX2RlZmF1bHQ7Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VuYXBpYyAqYXBpY19wcm9iZVtdIF9faW5pdGRhdGEgPSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotCSZhcGljX251bWFxLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVQKLQkmYXBpY19zdW1taXQsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAotCSZhcGljX2JpZ3NtcCwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfRVM3MDAwCi0JJmFwaWNfZXM3MDAwLAotI2VuZGlmCi0JJmFwaWNfZGVmYXVsdCwJLyogbXVzdCBiZSBsYXN0ICovCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBpbnQgY21kbGluZV9hcGljIF9faW5pdGRhdGE7Ci1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hcGljKGNoYXIgKmFyZykKLXsKLQlpbnQgaTsKLQotCWlmICghYXJnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07IGkrKykgewotCQlpZiAoIXN0cmNtcChhcGljX3Byb2JlW2ldLT5uYW1lLCBhcmcpKSB7Ci0JCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCWNtZGxpbmVfYXBpYyA9IDE7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCWlmICh4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYykKLQkJeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMoKTsKLQotCS8qIFBhcnNlZCBhZ2FpbiBieSBfX3NldHVwIGZvciBkZWJ1Zy92ZXJib3NlICovCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiYXBpYyIsIHBhcnNlX2FwaWMpOwotCi12b2lkIF9faW5pdCBnZW5lcmljX2JpZ3NtcF9wcm9iZSh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfQklHU01QCi0JLyoKLQkgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzd2l0Y2ggdG8gYmlnc21wIG1vZGUgd2hlbgotCSAqIC0gVGhlcmUgaXMgbm8gYXBpYz0gb3B0aW9uIHNwZWNpZmllZCBieSB0aGUgdXNlcgotCSAqIC0gZ2VuZXJpY19hcGljX3Byb2JlKCkgaGFzIGNob3NlbiBhcGljX2RlZmF1bHQgYXMgdGhlIHN1Yl9hcmNoCi0JICogLSB3ZSBmaW5kIG1vcmUgdGhhbiA4IENQVXMgaW4gYWNwaSBMQVBJQyBsaXN0aW5nIHdpdGggeEFQSUMgc3VwcG9ydAotCSAqLwotCi0JaWYgKCFjbWRsaW5lX2FwaWMgJiYgZ2VuYXBpYyA9PSAmYXBpY19kZWZhdWx0KSB7Ci0JCWlmIChhcGljX2JpZ3NtcC5wcm9iZSgpKSB7Ci0JCQlnZW5hcGljID0gJmFwaWNfYmlnc21wOwotCQkJaWYgKHg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKQotCQkJCXg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJPdmVycmlkaW5nIEFQSUMgZHJpdmVyIHdpdGggJXNcbiIsCi0JCQkgICAgICAgZ2VuYXBpYy0+bmFtZSk7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0KLQotdm9pZCBfX2luaXQgZ2VuZXJpY19hcGljX3Byb2JlKHZvaWQpCi17Ci0JaWYgKCFjbWRsaW5lX2FwaWMpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07IGkrKykgewotCQkJaWYgKGFwaWNfcHJvYmVbaV0tPnByb2JlKCkpIHsKLQkJCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiBOb3QgdmlzaWJsZSB3aXRob3V0IGVhcmx5IGNvbnNvbGUgKi8KLQkJaWYgKCFhcGljX3Byb2JlW2ldKQotCQkJcGFuaWMoIkRpZG4ndCBmaW5kIGFuIEFQSUMgZHJpdmVyIik7Ci0KLQkJaWYgKHg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKQotCQkJeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMoKTsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgQVBJQyBkcml2ZXIgJXNcbiIsIGdlbmFwaWMtPm5hbWUpOwotfQotCi0vKiBUaGVzZSBmdW5jdGlvbnMgY2FuIHN3aXRjaCB0aGUgQVBJQyBldmVuIGFmdGVyIHRoZSBpbml0aWFsIC0+cHJvYmUoKSAqLwotCi1pbnQgX19pbml0IG1wc19vZW1fY2hlY2soc3RydWN0IG1wY190YWJsZSAqbXBjLCBjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKLQkJaWYgKGFwaWNfcHJvYmVbaV0tPm1wc19vZW1fY2hlY2sobXBjLCBvZW0sIHByb2R1Y3RpZCkpIHsKLQkJCWlmICghY21kbGluZV9hcGljKSB7Ci0JCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQkJaWYgKHg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKQotCQkJCQl4ODZfcXVpcmtzLT51cGRhdGVfZ2VuYXBpYygpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAotCQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7Ci0JCWlmIChhcGljX3Byb2JlW2ldLT5hY3BpX21hZHRfb2VtX2NoZWNrKG9lbV9pZCwgb2VtX3RhYmxlX2lkKSkgewotCQkJaWYgKCFjbWRsaW5lX2FwaWMpIHsKLQkJCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCQlpZiAoeDg2X3F1aXJrcy0+dXBkYXRlX2dlbmFwaWMpCi0JCQkJCXg4Nl9xdWlya3MtPnVwZGF0ZV9nZW5hcGljKCk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gQVBJQyBkcml2ZXIgYCVzJy5cbiIsCi0JCQkJICAgICAgIGdlbmFwaWMtPm5hbWUpOwotCQkJfQotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gZ2VuYXBpYy0+Z2V0X2FwaWNfaWQoKih1bnNpZ25lZCBsb25nICopKEFQSUNfQkFTRStBUElDX0lEKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MjFmZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIEFQSUMgZHJpdmVyIGZvciB0aGUgSUJNICJTdW1taXQiIGNoaXBzZXQuCi0gKi8KLSNkZWZpbmUgQVBJQ19ERUZJTklUSU9OIDEKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vc3VtbWl0L2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxhc20vc3VtbWl0L2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vc3VtbWl0L2lwaS5oPgotI2luY2x1ZGUgPGFzbS9zdW1taXQvbXBwYXJzZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWRlZmF1bHQvbWFjaF93YWtlY3B1Lmg+Ci0KLXN0YXRpYyBpbnQgcHJvYmVfc3VtbWl0KHZvaWQpCi17Ci0JLyogcHJvYmVkIGxhdGVyIGluIG1wdGFibGUvQUNQSSBob29rcyAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgY3B1bWFza190ICpyZXRtYXNrKQotewotCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCi0JICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKLQkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KLQkgKgotCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCi0JICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCi0JICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KLQkgKi8KLQkqcmV0bWFzayA9IChjcHVtYXNrX3QpeyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKLX0KLQotc3RydWN0IGdlbmFwaWMgYXBpY19zdW1taXQgPSBBUElDX0lOSVQoInN1bW1pdCIsIHByb2JlX3N1bW1pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvTWFrZWZpbGUgYi9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMjViNGMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgUkRDMzIxeCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCi0jCi1vYmotJChDT05GSUdfWDg2X1JEQzMyMVgpICAgICAgICA6PSBncGlvLm8gcGxhdGZvcm0ubwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvZ3Bpby5jIGIvYXJjaC94ODYvbWFjaC1yZGMzMjF4L2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ3ZjMzZC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0gKiAgR1BJTyBzdXBwb3J0IGZvciBSREMgU29DIFIzMjEwL1I4NjEwCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNywgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIFZvbGtlciBXZWlzcyA8ZGV2QHRpbnR1Yy5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmg+Ci0KLQotLyogc3BpbiBsb2NrIHRvIHByb3RlY3Qgb3VyIHByaXZhdGUgY29weSBvZiBHUElPIGRhdGEgcmVnaXN0ZXIgcGx1cwotICAgdGhlIGFjY2VzcyB0byBQQ0kgY29uZiByZWdpc3RlcnMuICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7Ci0KLS8qIGNvcHkgb2YgR1BJTyBkYXRhIHJlZ2lzdGVycyAqLwotc3RhdGljIHUzMiBncGlvX2RhdGFfcmVnMTsKLXN0YXRpYyB1MzIgZ3Bpb19kYXRhX3JlZzI7Ci0KLXN0YXRpYyB1MzIgZ3Bpb19yZXF1ZXN0X2RhdGFbMl07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHJkYzMyMXhfY29uZl93cml0ZSh1bnNpZ25lZCBhZGRyLCB1MzIgdmFsdWUpCi17Ci0Jb3V0bCgoMSA8PCAzMSkgfCAoNyA8PCAxMSkgfCBhZGRyLCBSREMzMjEwX0NGR1JFR19BRERSKTsKLQlvdXRsKHZhbHVlLCBSREMzMjEwX0NGR1JFR19EQVRBKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJkYzMyMXhfY29uZl9vcih1bnNpZ25lZCBhZGRyLCB1MzIgdmFsdWUpCi17Ci0Jb3V0bCgoMSA8PCAzMSkgfCAoNyA8PCAxMSkgfCBhZGRyLCBSREMzMjEwX0NGR1JFR19BRERSKTsKLQl2YWx1ZSB8PSBpbmwoUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci0Jb3V0bCh2YWx1ZSwgUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHJkYzMyMXhfY29uZl9yZWFkKHVuc2lnbmVkIGFkZHIpCi17Ci0Jb3V0bCgoMSA8PCAzMSkgfCAoNyA8PCAxMSkgfCBhZGRyLCBSREMzMjEwX0NGR1JFR19BRERSKTsKLQotCXJldHVybiBpbmwoUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci19Ci0KLS8qIGNvbmZpZ3VyZSBwaW4gYXMgR1BJTyAqLwotc3RhdGljIHZvaWQgcmRjMzIxeF9jb25maWd1cmVfZ3Bpbyh1bnNpZ25lZCBncGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JcmRjMzIxeF9jb25mX29yKGdwaW8gPCAzMgotCQk/IFJEQzMyMVhfR1BJT19DVFJMX1JFRzEgOiBSREMzMjFYX0dQSU9fQ1RSTF9SRUcyLAotCQkxIDw8IChncGlvICYgMHgxZikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotfQotCi0vKiBpbml0aWFsbHkgc2V0dXAgdGhlIDIgY29waWVzIG9mIHRoZSBncGlvIGRhdGEgcmVnaXN0ZXJzLgotICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgcGxhdGZvcm0gc2V0dXAgY29kZS4gKi8KLXZvaWQgX19pbml0IHJkYzMyMXhfZ3Bpb19zZXR1cCgpCi17Ci0JLyogdGhpcyBtaWdodCBub3QgYmUsIHdoYXQgb3RoZXJzIChCSU9TLCBib290bG9hZGVyLCBldGMuKQotCSAgIHdyb3RlIHRvIHRoZXNlIHJlZ2lzdGVycyBiZWZvcmUsIGJ1dCBpdCdzIGEgZ29vZCBndWVzcy4gU3RpbGwKLQkgICBiZXR0ZXIgdGhhbiBqdXN0IHVzaW5nIDB4ZmZmZmZmZmYuICovCi0KLQlncGlvX2RhdGFfcmVnMSA9IHJkYzMyMXhfY29uZl9yZWFkKFJEQzMyMVhfR1BJT19EQVRBX1JFRzEpOwotCWdwaW9fZGF0YV9yZWcyID0gcmRjMzIxeF9jb25mX3JlYWQoUkRDMzIxWF9HUElPX0RBVEFfUkVHMik7Ci19Ci0KLS8qIGRldGVybWluZSwgaWYgZ3BpbyBudW1iZXIgaXMgdmFsaWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJkYzMyMXhfaXNfZ3Bpbyh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBncGlvIDw9IFJEQzMyMVhfTUFYX0dQSU87Ci19Ci0KLS8qIHJlcXVlc3QgR1BJTyAqLwotaW50IHJkY19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcmRjMzIxeF9pc19ncGlvKGdwaW8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlpZiAoZ3Bpb19yZXF1ZXN0X2RhdGFbKGdwaW8gJiAweDIwKSA/IDEgOiAwXSAmICgxIDw8IChncGlvICYgMHgxZikpKQotCQlnb3RvIGludXNlOwotCWdwaW9fcmVxdWVzdF9kYXRhWyhncGlvICYgMHgyMCkgPyAxIDogMF0gfD0gKDEgPDwgKGdwaW8gJiAweDFmKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLWludXNlOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCXJldHVybiAtRUlOVkFMOwotfQotRVhQT1JUX1NZTUJPTChyZGNfZ3Bpb19yZXF1ZXN0KTsKLQotLyogcmVsZWFzZSBwcmV2aW91c2x5LWNsYWltZWQgR1BJTyAqLwotdm9pZCByZGNfZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcmRjMzIxeF9pc19ncGlvKGdwaW8pKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JZ3Bpb19yZXF1ZXN0X2RhdGFbKGdwaW8gJiAweDIwKSA/IDEgOiAwXSAmPSB+KDEgPDwgKGdwaW8gJiAweDFmKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHJkY19ncGlvX2ZyZWUpOwotCi0vKiByZWFkIEdQSU8gcGluICovCi1pbnQgcmRjX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCXJlZyA9IHJkYzMyMXhfY29uZl9yZWFkKGdwaW8gPCAzMgotCQk/IFJEQzMyMVhfR1BJT19EQVRBX1JFRzEgOiBSREMzMjFYX0dQSU9fREFUQV9SRUcyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAoMSA8PCAoZ3BpbyAmIDB4MWYpKSAmIHJlZyA/IDEgOiAwOwotfQotRVhQT1JUX1NZTUJPTChyZGNfZ3Bpb19nZXRfdmFsdWUpOwotCi0vKiBzZXQgR1BJTyBwaW4gdG8gdmFsdWUgKi8KLXZvaWQgcmRjX2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiByZWc7Ci0KLQlyZWcgPSAxIDw8IChncGlvICYgMHgxZik7Ci0JaWYgKGdwaW8gPCAzMikgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCWlmICh2YWx1ZSkKLQkJCWdwaW9fZGF0YV9yZWcxIHw9IHJlZzsKLQkJZWxzZQotCQkJZ3Bpb19kYXRhX3JlZzEgJj0gfnJlZzsKLQkJcmRjMzIxeF9jb25mX3dyaXRlKFJEQzMyMVhfR1BJT19EQVRBX1JFRzEsIGdwaW9fZGF0YV9yZWcxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlpZiAodmFsdWUpCi0JCQlncGlvX2RhdGFfcmVnMiB8PSByZWc7Ci0JCWVsc2UKLQkJCWdwaW9fZGF0YV9yZWcyICY9IH5yZWc7Ci0JCXJkYzMyMXhfY29uZl93cml0ZShSREMzMjFYX0dQSU9fREFUQV9SRUcyLCBncGlvX2RhdGFfcmVnMik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wocmRjX2dwaW9fc2V0X3ZhbHVlKTsKLQotLyogY29uZmlndXJlIEdQSU8gcGluIGFzIGlucHV0ICovCi1pbnQgcmRjX2dwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKCFyZGMzMjF4X2lzX2dwaW8oZ3BpbykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmRjMzIxeF9jb25maWd1cmVfZ3BpbyhncGlvKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChyZGNfZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi0vKiBjb25maWd1cmUgR1BJTyBwaW4gYXMgb3V0cHV0IGFuZCBzZXQgdmFsdWUgKi8KLWludCByZGNfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlpZiAoIXJkYzMyMXhfaXNfZ3BpbyhncGlvKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci0JcmRjMzIxeF9jb25maWd1cmVfZ3BpbyhncGlvKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChyZGNfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtcmRjMzIxeC9wbGF0Zm9ybS5jIGIvYXJjaC94ODYvbWFjaC1yZGMzMjF4L3BsYXRmb3JtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNGU1MGMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L3BsYXRmb3JtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogIEdlbmVyaWMgUkRDMzIxeCBwbGF0Zm9ybSBkZXZpY2VzCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNyBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLQotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0KLS8qIExFRFMgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGVmYXVsdF9sZWRzW10gPSB7Ci0JeyAubmFtZSA9ICJyZGM6ZG16IiwgLmdwaW8gPSAxLCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHJkYzMyMXhfbGVkX2RhdGEgPSB7Ci0JLm51bV9sZWRzID0gQVJSQVlfU0laRShkZWZhdWx0X2xlZHMpLAotCS5sZWRzID0gZGVmYXVsdF9sZWRzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmRjMzIxeF9sZWRzID0gewotCS5uYW1lID0gImxlZHMtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcmRjMzIxeF9sZWRfZGF0YSwKLQl9Ci19OwotCi0vKiBXYXRjaGRvZyAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmRjMzIxeF93ZHQgPSB7Ci0JLm5hbWUgPSAicmRjMzIxeC13ZHQiLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyZGMzMjF4X2RldnNbXSA9IHsKLQkmcmRjMzIxeF9sZWRzLAotCSZyZGMzMjF4X3dkdAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcmRjX2JvYXJkX3NldHVwKHZvaWQpCi17Ci0JcmRjMzIxeF9ncGlvX3NldHVwKCk7Ci0KLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocmRjMzIxeF9kZXZzLCBBUlJBWV9TSVpFKHJkYzMyMXhfZGV2cykpOwotfQotCi1hcmNoX2luaXRjYWxsKHJkY19ib2FyZF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvTWFrZWZpbGUgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YzI1MGIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgotIwotCi1FWFRSQV9DRkxBR1MJOj0gLUlhcmNoL3g4Ni9rZXJuZWwKLW9iai15CQkJOj0gc2V0dXAubyB2b3lhZ2VyX2Jhc2ljLm8gdm95YWdlcl90aHJlYWQubwotCi1vYmotJChDT05GSUdfU01QKQkrPSB2b3lhZ2VyX3NtcC5vIHZveWFnZXJfY2F0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtdm95YWdlci9zZXR1cC5jIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNTExODMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqCU1hY2hpbmUgc3BlY2lmaWMgc2V0dXAgZm9yIGdlbmVyaWMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KLSNpbmNsdWRlIDxhc20vZTgyMC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi12b2lkIF9faW5pdCBwcmVfaW50cl9pbml0X2hvb2sodm9pZCkKLXsKLQlpbml0X0lTQV9pcnFzKCk7Ci19Ci0KLS8qCi0gKiBJUlEyIGlzIGNhc2NhZGUgaW50ZXJydXB0IHRvIHNlY29uZCBpbnRlcnJ1cHQgY29udHJvbGxlcgotICovCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEyID0gewotCS5oYW5kbGVyID0gbm9fYWN0aW9uLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKLQkubmFtZSA9ICJjYXNjYWRlIiwKLX07Ci0KLXZvaWQgX19pbml0IGludHJfaW5pdF9ob29rKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXZveWFnZXJfc21wX2ludHJfaW5pdCgpOwotI2VuZGlmCi0KLQlzZXR1cF9pcnEoMiwgJmlycTIpOwotfQotCi1zdGF0aWMgdm9pZCB2b3lhZ2VyX2Rpc2FibGVfdHNjKHZvaWQpCi17Ci0JLyogVm95YWdlcnMgcnVuIHRoZWlyIENQVXMgZnJvbSBpbmRlcGVuZGVudCBjbG9ja3MsIHNvIGRpc2FibGUKLQkgKiB0aGUgVFNDIGNvZGUgYmVjYXVzZSB3ZSBjYW4ndCBzeW5jIHRoZW0gKi8KLQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQyk7Ci19Ci0KLXZvaWQgX19pbml0IHByZV9zZXR1cF9hcmNoX2hvb2sodm9pZCkKLXsKLQl2b3lhZ2VyX2Rpc2FibGVfdHNjKCk7Ci19Ci0KLXZvaWQgX19pbml0IHByZV90aW1lX2luaXRfaG9vayh2b2lkKQotewotCXZveWFnZXJfZGlzYWJsZV90c2MoKTsKLX0KLQotdm9pZCBfX2luaXQgdHJhcF9pbml0X2hvb2sodm9pZCkKLXsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCA9IHsKLQkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfSVJRUE9MTCB8IElSUUZfVElNRVIsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAotCS5uYW1lID0gInRpbWVyIgotfTsKLQotdm9pZCBfX2luaXQgdGltZV9pbml0X2hvb2sodm9pZCkKLXsKLQlpcnEwLm1hc2sgPSBjcHVtYXNrX29mX2NwdShzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0Jc2V0dXBfaXJxKDAsICZpcnEwKTsKLX0KLQotLyogSG9vayBmb3IgbWFjaGluZSBzcGVjaWZpYyBtZW1vcnkgc2V0dXAuICovCi0KLWNoYXIgKl9faW5pdCBtYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKQotewotCWNoYXIgKndobzsKLQlpbnQgbmV3X25yOwotCi0Jd2hvID0gIk5PVCBWT1lBR0VSIjsKLQotCWlmICh2b3lhZ2VyX2xldmVsID09IDUpIHsKLQkJX191MzIgYWRkciwgbGVuZ3RoOwotCQlpbnQgaTsKLQotCQl3aG8gPSAiVm95YWdlci1TVVMiOwotCi0JCWU4MjAubnJfbWFwID0gMDsKLQkJZm9yIChpID0gMDsgdm95YWdlcl9tZW1vcnlfZGV0ZWN0KGksICZhZGRyLCAmbGVuZ3RoKTsgaSsrKSB7Ci0JCQllODIwX2FkZF9yZWdpb24oYWRkciwgbGVuZ3RoLCBFODIwX1JBTSk7Ci0JCX0KLQkJcmV0dXJuIHdobzsKLQl9IGVsc2UgaWYgKHZveWFnZXJfbGV2ZWwgPT0gNCkgewotCQlfX3UzMiB0b207Ci0JCV9fdTE2IGNhdGJhc2UgPSBpbmIoVk9ZQUdFUl9TU1BCX1JFTE9DQVRJT05fUE9SVCkgPDwgODsKLQkJLyogc2VsZWN0IHRoZSBESU5PIGNvbmZpZyBzcGFjZSAqLwotCQlvdXRiKFZPWUFHRVJfRElOTywgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCQkvKiBSZWFkIERJTk8gdG9wIG9mIG1lbW9yeSByZWdpc3RlciAqLwotCQl0b20gPSAoKGluYihjYXRiYXNlICsgMHg0KSAmIDB4ZjApIDw8IDE2KQotCQkgICAgKyAoKGluYihjYXRiYXNlICsgMHg1KSAmIDB4N2YpIDw8IDI0KTsKLQotCQlpZiAoaW5iKGNhdGJhc2UpICE9IFZPWUFHRVJfRElOTykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIlZveWFnZXI6IEZhaWxlZCB0byBnZXQgRElOTyBmb3IgTDQsIHNldHRpbmcgdG9tIHRvIEVYVF9NRU1fS1xuIik7Ci0JCQl0b20gPSAoYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8uZXh0X21lbV9rKSA8PCAxMDsKLQkJfQotCQl3aG8gPSAiVm95YWdlci1UT00iOwotCQllODIwX2FkZF9yZWdpb24oMCwgMHg5ZjAwMCwgRTgyMF9SQU0pOwotCQkvKiBtYXAgZnJvbSAxTSB0byB0b3Agb2YgbWVtb3J5ICovCi0JCWU4MjBfYWRkX3JlZ2lvbigxICogMTAyNCAqIDEwMjQsIHRvbSAtIDEgKiAxMDI0ICogMTAyNCwKLQkJCQkgIEU4MjBfUkFNKTsKLQkJLyogRklYTUU6IFNob3VsZCBjaGVjayB0aGUgQVNJQ3MgdG8gc2VlIGlmIEkgbmVlZCB0bwotCQkgKiB0YWtlIG91dCB0aGUgOE0gd2luZG93LiAgSnVzdCBkbyBpdCBhdCB0aGUgbW9tZW50Ci0JCSAqICovCi0JCWU4MjBfYWRkX3JlZ2lvbig4ICogMTAyNCAqIDEwMjQsIDggKiAxMDI0ICogMTAyNCwKLQkJCQkgIEU4MjBfUkVTRVJWRUQpOwotCQlyZXR1cm4gd2hvOwotCX0KLQotCXJldHVybiBkZWZhdWx0X21hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkNmY4MC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLS8qIENvcHlyaWdodCAoQykgMTk5OSwyMDAxIAotICoKLSAqIEF1dGhvcjogSi5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIHZveWFnZXIgc3BlY2lmaWMgcm91dGluZXMgZm9yIGdldHRpbmcKLSAqIGluaXRpYWxpc2F0aW9uIG9mIHRoZSBhcmNoaXRlY3R1cmUgdG8gZnVuY3Rpb24uICBGb3IgYWRkaXRpb25hbAotICogZmVhdHVyZXMgc2VlOgotICoKLSAqCXZveWFnZXJfY2F0LmMgLSBWb3lhZ2VyIENBVCBidXMgaW50ZXJmYWNlCi0gKgl2b3lhZ2VyX3NtcC5jIC0gVm95YWdlciBTTVAgaGFsIChlbXVsYXRlcyBsaW51eCBzbXAuYykKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdm95YWdlci5oPgotI2luY2x1ZGUgPGFzbS92aWMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjUzLmg+Ci0KLS8qCi0gKiBQb3dlciBvZmYgZnVuY3Rpb24sIGlmIGFueQotICovCi12b2lkICgqcG1fcG93ZXJfb2ZmKSAodm9pZCk7Ci1FWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7Ci0KLWludCB2b3lhZ2VyX2xldmVsID0gMDsKLQotc3RydWN0IHZveWFnZXJfU1VTICp2b3lhZ2VyX1NVUyA9IE5VTEw7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCB2b3lhZ2VyX2R1bXAoaW50IGR1bW15MSwgc3RydWN0IHR0eV9zdHJ1Y3QgKmR1bW15MykKLXsKLQkvKiBnZXQgaGVyZSB2aWEgYSBzeXNycSAqLwotCXZveWFnZXJfc21wX2R1bXAoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfdm95YWdlcl9kdW1wX29wID0gewotCS5oYW5kbGVyID0gdm95YWdlcl9kdW1wLAotCS5oZWxwX21zZyA9ICJWb3lhZ2VyIiwKLQkuYWN0aW9uX21zZyA9ICJEdW1wIFZveWFnZXIgU3RhdHVzIiwKLX07Ci0jZW5kaWYKLQotdm9pZCB2b3lhZ2VyX2RldGVjdChzdHJ1Y3Qgdm95YWdlcl9iaW9zX2luZm8gKmJpb3MpCi17Ci0JaWYgKGJpb3MtPmxlbiAhPSAweGZmKSB7Ci0JCWludCBjbGFzcyA9IChiaW9zLT5jbGFzc18xIDw8IDgpCi0JCSAgICB8IChiaW9zLT5jbGFzc18yICYgMHhmZik7Ci0KLQkJcHJpbnRrKCJWb3lhZ2VyIFN5c3RlbSBkZXRlY3RlZC5cbiIKLQkJICAgICAgICIgICAgICAgIENsYXNzICV4LCBSZXZpc2lvbiAlZC4lZFxuIiwKLQkJICAgICAgIGNsYXNzLCBiaW9zLT5tYWpvciwgYmlvcy0+bWlub3IpOwotCQlpZiAoY2xhc3MgPT0gVk9ZQUdFUl9MRVZFTDQpCi0JCQl2b3lhZ2VyX2xldmVsID0gNDsKLQkJZWxzZSBpZiAoY2xhc3MgPCBWT1lBR0VSX0xFVkVMNV9BTkRfQUJPVkUpCi0JCQl2b3lhZ2VyX2xldmVsID0gMzsKLQkJZWxzZQotCQkJdm95YWdlcl9sZXZlbCA9IDU7Ci0JCXByaW50aygiICAgICAgICBBcmNoaXRlY3R1cmUgTGV2ZWwgJWRcbiIsIHZveWFnZXJfbGV2ZWwpOwotCQlpZiAodm95YWdlcl9sZXZlbCA8IDQpCi0JCQlwcmludGsKLQkJCSAgICAoIlxuKipXQVJOSU5HKio6IFZveWFnZXIgSEFMIG9ubHkgc3VwcG9ydHMgTGV2ZWxzIDQgYW5kIDUgQXJjaGl0ZWN0dXJlcyBhdCB0aGUgbW9tZW50XG5cbiIpOwotCQkvKiBpbnN0YWxsIHRoZSBwb3dlciBvZmYgaGFuZGxlciAqLwotCQlwbV9wb3dlcl9vZmYgPSB2b3lhZ2VyX3Bvd2VyX29mZjsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXJlZ2lzdGVyX3N5c3JxX2tleSgndicsICZzeXNycV92b3lhZ2VyX2R1bXBfb3ApOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJcHJpbnRrKCJcblxuKipXQVJOSU5HKio6IE5vIFZveWFnZXIgU3Vic3lzdGVtIEZvdW5kXG4iKTsKLQl9Ci19Ci0KLXZvaWQgdm95YWdlcl9zeXN0ZW1faW50ZXJydXB0KGludCBjcGwsIHZvaWQgKmRldl9pZCkKLXsKLQlwcmludGsoIlZveWFnZXI6IGRldGVjdGVkIHN5c3RlbSBpbnRlcnJ1cHRcbiIpOwotfQotCi0vKiBSb3V0aW5lIHRvIHJlYWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXh0ZW5kZWQgQ01PUyBhcmVhICovCi1fX3U4IHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKF9fdTE2IGFkZHIpCi17Ci0Jb3V0YihhZGRyICYgMHhmZiwgMHg3NCk7Ci0Jb3V0YigoYWRkciA+PiA4KSAmIDB4ZmYsIDB4NzUpOwotCXJldHVybiBpbmIoMHg3Nik7Ci19Ci0KLS8qIGludGVybmFsIGRlZmluaXRpb25zIGZvciB0aGUgU1VTIENsaWNrIE1hcCBvZiBtZW1vcnkgKi8KLQotI2RlZmluZSBDTElDS19FTlRSSUVTCTE2Ci0jZGVmaW5lIENMSUNLX1NJWkUJNDA5NgkvKiBjbGljayB0byBieXRlIGNvbnZlcnNpb24gZm9yIExlbmd0aCAqLwotCi10eXBlZGVmIHN0cnVjdCBDbGlja01hcCB7Ci0Jc3RydWN0IEVudHJ5IHsKLQkJX191MzIgQWRkcmVzczsKLQkJX191MzIgTGVuZ3RoOwotCX0gRW50cnlbQ0xJQ0tfRU5UUklFU107Ci19IENsaWNrTWFwX3Q7Ci0KLS8qIFRoaXMgcm91dGluZSBpcyBwcmV0dHkgbXVjaCBhbiBhd2Z1bCBoYWNrIHRvIHJlYWQgdGhlIGJpb3MgY2xpY2ttYXAgYnkKLSAqIG1hcHBpbmcgaXQgaW50byBwYWdlIDAuICBUaGVyZSBhcmUgdXN1YWxseSB0aHJlZSByZWdpb25zIGluIHRoZSBtYXA6Ci0gKiAJQmFzZSBNZW1vcnkKLSAqIAlFeHRlbmRlZCBNZW1vcnkKLSAqCXplcm8gbGVuZ3RoIG1hcmtlciBmb3IgZW5kIG9mIG1hcAotICoKLSAqIFJldHVybnMgYXJlIDAgZm9yIGZhaWx1cmUgYW5kIDEgZm9yIHN1Y2Nlc3Mgb24gZXh0cmFjdGluZyByZWdpb24uCi0gKi8KLWludCBfX2luaXQgdm95YWdlcl9tZW1vcnlfZGV0ZWN0KGludCByZWdpb24sIF9fdTMyICogc3RhcnQsIF9fdTMyICogbGVuZ3RoKQotewotCWludCBpOwotCWludCByZXR2YWwgPSAwOwotCV9fdTggY21vc1s0XTsKLQlDbGlja01hcF90ICptYXA7Ci0JdW5zaWduZWQgbG9uZyBtYXBfYWRkcjsKLQl1bnNpZ25lZCBsb25nIG9sZDsKLQotCWlmIChyZWdpb24gPj0gQ0xJQ0tfRU5UUklFUykgewotCQlwcmludGsoIlZveWFnZXI6IElsbGVnYWwgQ2xpY2tNYXAgcmVnaW9uICVkXG4iLCByZWdpb24pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNtb3MpOyBpKyspCi0JCWNtb3NbaV0gPQotCQkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9NRU1PUllfQ0xJQ0tNQVAgKyBpKTsKLQotCW1hcF9hZGRyID0gKih1bnNpZ25lZCBsb25nICopY21vczsKLQotCS8qIHN0ZWFsIHBhZ2UgMCBmb3IgdGhpcyAqLwotCW9sZCA9IHBnMFswXTsKLQlwZzBbMF0gPSAoKG1hcF9hZGRyICYgUEFHRV9NQVNLKSB8IF9QQUdFX1JXIHwgX1BBR0VfUFJFU0VOVCk7Ci0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JLyogbm93IGNsZWFyIGV2ZXJ5dGhpbmcgb3V0IGJ1dCBwYWdlIDAgKi8KLQltYXAgPSAoQ2xpY2tNYXBfdCAqKSAobWFwX2FkZHIgJiAoflBBR0VfTUFTSykpOwotCi0JLyogemVybyBsZW5ndGggaXMgdGhlIGVuZCBvZiB0aGUgY2xpY2ttYXAgKi8KLQlpZiAobWFwLT5FbnRyeVtyZWdpb25dLkxlbmd0aCAhPSAwKSB7Ci0JCSpsZW5ndGggPSBtYXAtPkVudHJ5W3JlZ2lvbl0uTGVuZ3RoICogQ0xJQ0tfU0laRTsKLQkJKnN0YXJ0ID0gbWFwLT5FbnRyeVtyZWdpb25dLkFkZHJlc3M7Ci0JCXJldHZhbCA9IDE7Ci0JfQotCi0JLyogcmVwbGFjZSB0aGUgbWFwcGluZyAqLwotCXBnMFswXSA9IG9sZDsKLQlsb2NhbF9mbHVzaF90bGIoKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiB2b3lhZ2VyIHNwZWNpZmljIGhhbmRsaW5nIGNvZGUgZm9yIHRpbWVyIGludGVycnVwdHMuICBVc2VkIHRvIGhhbmQKLSAqIG9mZiB0aGUgdGltZXIgdGljayB0byB0aGUgU01QIGNvZGUsIHNpbmNlIHRoZSBWSUMgZG9lc24ndCBoYXZlIGFuCi0gKiBpbnRlcm5hbCB0aW1lciAoVGhlIFFJQyBkb2VzLCBidXQgdGhhdCdzIGFub3RoZXIgc3RvcnkpLiAqLwotdm9pZCB2b3lhZ2VyX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCWlmICgoamlmZmllcyAmIDB4M2ZmKSA9PSAwKSB7Ci0KLQkJLyogVGhlcmUgc2VlbXMgdG8gYmUgc29tZXRoaW5nIGZsYWt5IGluIGVpdGhlcgotCQkgKiBoYXJkd2FyZSBvciBzb2Z0d2FyZSB0aGF0IGlzIHJlc2V0dGluZyB0aGUgdGltZXIgMAotCQkgKiBjb3VudCB0byBzb21ldGhpbmcgbXVjaCBoaWdoZXIgdGhhbiBpdCBzaG91bGQgYmUKLQkJICogVGhpcyBzZWVtcyB0byBvY2N1ciBpbiB0aGUgYm9vdCBzZXF1ZW5jZSwganVzdAotCQkgKiBiZWZvcmUgcm9vdCBpcyBtb3VudGVkLiAgVGhlcmVmb3JlLCBldmVyeSAxMAotCQkgKiBzZWNvbmRzIG9yIHNvLCB3ZSBzYW5pdHkgY2hlY2sgdGhlIHRpbWVyIHplcm8gY291bnQKLQkJICogYW5kIGtpY2sgaXQgYmFjayB0byB3aGVyZSBpdCBzaG91bGQgYmUuCi0JCSAqCi0JCSAqIEZJWE1FOiBUaGlzIGlzIHRoZSBtb3N0IGF3ZnVsIGhhY2sgeWV0IHNlZW4uICBJCi0JCSAqIHNob3VsZCB3b3JrIG91dCBleGFjdGx5IHdoYXQgaXMgaW50ZXJmZXJpbmcgd2l0aAotCQkgKiB0aGUgdGltZXIgY291bnQgc2V0dGluZ3MgZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UKLQkJICogYW5kIHN3aWZ0bHkgaW50cm9kdWNlIGl0IHRvIHNvbWV0aGluZyBzaGFycCBhbmQKLQkJICogcG9pbnR5LiAgKi8KLQkJX191MTYgdmFsOwotCi0JCXNwaW5fbG9jaygmaTgyNTNfbG9jayk7Ci0KLQkJb3V0Yl9wKDB4MDAsIDB4NDMpOwotCQl2YWwgPSBpbmJfcCgweDQwKTsKLQkJdmFsIHw9IGluYigweDQwKSA8PCA4OwotCQlzcGluX3VubG9jaygmaTgyNTNfbG9jayk7Ci0KLQkJaWYgKHZhbCA+IExBVENIKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIlxuVk9ZQUdFUjogY291bnRkb3duIHRpbWVyIHZhbHVlIHRvbyBoaWdoICglZCksIHJlc2V0dGluZ1xuXG4iLAotCQkJICAgICB2YWwpOwotCQkJc3Bpbl9sb2NrKCZpODI1M19sb2NrKTsKLQkJCW91dGIoMHgzNCwgMHg0Myk7Ci0JCQlvdXRiX3AoTEFUQ0ggJiAweGZmLCAweDQwKTsJLyogTFNCICovCi0JCQlvdXRiKExBVENIID4+IDgsIDB4NDApOwkvKiBNU0IgKi8KLQkJCXNwaW5fdW5sb2NrKCZpODI1M19sb2NrKTsKLQkJfQotCX0KLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX3ZpY190aW1lcl9pbnRlcnJ1cHQoKTsKLSNlbmRpZgotfQotCi12b2lkIHZveWFnZXJfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JcHJpbnRrKCJWT1lBR0VSIFBvd2VyIE9mZlxuIik7Ci0KLQlpZiAodm95YWdlcl9sZXZlbCA9PSA1KSB7Ci0JCXZveWFnZXJfY2F0X3Bvd2VyX29mZigpOwotCX0gZWxzZSBpZiAodm95YWdlcl9sZXZlbCA9PSA0KSB7Ci0JCS8qIFRoaXMgZG9lc24ndCBhcHBhcmVudGx5IHdvcmsgb24gbW9zdCBMNCBtYWNoaW5lcywKLQkJICogYnV0IHRoZSBzcGVjcyBzYXkgdG8gZG8gdGhpcyB0byBnZXQgYXV0b21hdGljIHBvd2VyCi0JCSAqIG9mZi4gIFVuZm9ydHVuYXRlbHksIGlmIGl0IGRvZXNuJ3QgcG93ZXIgb2ZmIHRoZQotCQkgKiBtYWNoaW5lLCBpdCBlbmRzIHVwIGRvaW5nIGEgY29sZCByZXN0YXJ0LCB3aGljaAotCQkgKiBpc24ndCByZWFsbHkgaW50ZW5kZWQsIHNvIGNvbW1lbnQgb3V0IHRoZSBjb2RlICovCi0jaWYgMAotCQlpbnQgcG9ydDsKLQotCQkvKiBlbmFibGUgdGhlIHZveWFnZXIgQ29uZmlndXJhdGlvbiBTcGFjZSAqLwotCQlvdXRiKChpbmIoVk9ZQUdFUl9NQ19TRVRVUCkgJiAweGYwKSB8IDB4OCwgVk9ZQUdFUl9NQ19TRVRVUCk7Ci0JCS8qIHRoZSBwb3J0IGZvciB0aGUgcG93ZXIgb2ZmIGZsYWcgaXMgYW4gb2Zmc2V0IGZyb20gdGhlCi0JCSAgIGZsb2F0aW5nIGJhc2UgKi8KLQkJcG9ydCA9IChpbmIoVk9ZQUdFUl9TU1BCX1JFTE9DQVRJT05fUE9SVCkgPDwgOCkgKyAweDIxOwotCQkvKiBzZXQgdGhlIHBvd2VyIG9mZiBmbGFnICovCi0JCW91dGIoaW5iKHBvcnQpIHwgMHgxLCBwb3J0KTsKLSNlbmRpZgotCX0KLQkvKiBhbmQgd2FpdCBmb3IgaXQgdG8gaGFwcGVuICovCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlmb3IgKDs7KQotCQloYWx0KCk7Ci19Ci0KLS8qIGNvcGllZCBmcm9tIHByb2Nlc3MuYyAqLwotc3RhdGljIGlubGluZSB2b2lkIGtiX3dhaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspCi0JCWlmICgoaW5iX3AoMHg2NCkgJiAweDAyKSA9PSAwKQotCQkJYnJlYWs7Ci19Ci0KLXZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQotewotCS8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBzaHV0ZG93biBuZWVkZWQgYmVmb3JlIGEga2V4ZWMgKi8KLX0KLQotdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQotewotCXByaW50aygiVm95YWdlciBXYXJtIFJlc3RhcnRcbiIpOwotCWtiX3dhaXQoKTsKLQotCWlmICh2b3lhZ2VyX2xldmVsID09IDUpIHsKLQkJLyogd3JpdGUgbWFnaWMgdmFsdWVzIHRvIHRoZSBSVEMgdG8gaW5mb3JtIHN5c3RlbSB0aGF0Ci0JCSAqIHNodXRkb3duIGlzIGJlZ2lubmluZyAqLwotCQlvdXRiKDB4OGYsIDB4NzApOwotCQlvdXRiKDB4NSwgMHg3MSk7Ci0KLQkJdWRlbGF5KDUwKTsKLQkJb3V0YigweGZlLCAweDY0KTsJLyogcHVsbCByZXNldCBsb3cgKi8KLQl9IGVsc2UgaWYgKHZveWFnZXJfbGV2ZWwgPT0gNCkgewotCQlfX3UxNiBjYXRiYXNlID0gaW5iKFZPWUFHRVJfU1NQQl9SRUxPQ0FUSU9OX1BPUlQpIDw8IDg7Ci0JCV9fdTggYmFzZWJkID0gaW5iKFZPWUFHRVJfTUNfU0VUVVApOwotCi0JCW91dGIoYmFzZWJkIHwgMHgwOCwgVk9ZQUdFUl9NQ19TRVRVUCk7Ci0JCW91dGIoMHgwMiwgY2F0YmFzZSArIDB4MjEpOwotCX0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWZvciAoOzspCi0JCWhhbHQoKTsKLX0KLQotdm9pZCBtYWNoaW5lX2VtZXJnZW5jeV9yZXN0YXJ0KHZvaWQpCi17Ci0JLypmb3Igbm93LCBqdXN0IGhvb2sgdGhpcyB0byBhIHdhcm0gcmVzdGFydCAqLwotCW1hY2hpbmVfcmVzdGFydChOVUxMKTsKLX0KLQotdm9pZCBtY2Ffbm1pX2hvb2sodm9pZCkKLXsKLQlfX3U4IGR1bXB2YWwgX19tYXliZV91bnVzZWQgPSBpbmIoMHhmODIzKTsKLQlfX3U4IHN3bm1pIF9fbWF5YmVfdW51c2VkID0gaW5iKDB4ZjgxMyk7Ci0KLQkvKiBGSVhNRTogYXNzdW1lIGR1bXAgc3dpdGNoIHByZXNzZWQgKi8KLQkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGR1bXAgc3dpdGNoIHdhcyBwcmVzc2VkICovCi0JVkRFQlVHKCgiVk9ZQUdFUjogZHVtcHZhbCA9IDB4JXgsIHN3bm1pID0gMHgleFxuIiwgZHVtcHZhbCwgc3dubWkpKTsKLQkvKiBjbGVhciBzd25taSAqLwotCW91dGIoMHhmZiwgMHhmODEzKTsKLQkvKiB0ZWxsIFNVUyB0byBpZ25vcmUgZHVtcCAqLwotCWlmICh2b3lhZ2VyX2xldmVsID09IDUgJiYgdm95YWdlcl9TVVMgIT0gTlVMTCkgewotCQlpZiAodm95YWdlcl9TVVMtPlNVU19tYm94ID09IFZPWUFHRVJfRFVNUF9CVVRUT05fTk1JKSB7Ci0JCQl2b3lhZ2VyX1NVUy0+a2VybmVsX21ib3ggPSBWT1lBR0VSX05PX0NPTU1BTkQ7Ci0JCQl2b3lhZ2VyX1NVUy0+a2VybmVsX2ZsYWdzIHw9IFZPWUFHRVJfT1NfSU5fUFJPR1JFU1M7Ci0JCQl1ZGVsYXkoMTAwMCk7Ci0JCQl2b3lhZ2VyX1NVUy0+a2VybmVsX21ib3ggPSBWT1lBR0VSX0lHTk9SRV9EVU1QOwotCQkJdm95YWdlcl9TVVMtPmtlcm5lbF9mbGFncyAmPSB+Vk9ZQUdFUl9PU19JTl9QUk9HUkVTUzsKLQkJfQotCX0KLQlwcmludGsoS0VSTl9FUlIKLQkgICAgICAgIlZPWUFHRVI6IER1bXAgc3dpdGNoIHByZXNzZWQsIHByaW50aW5nIENQVSVkIHRyYWNlYmFja3NcbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0Jc2hvd19zdGFjayhOVUxMLCBOVUxMKTsKLQlzaG93X3N0YXRlKCk7Ci19Ci0KLXZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCi17Ci0JLyogdHJlYXQgYSBoYWx0IGxpa2UgYSBwb3dlciBvZmYgKi8KLQltYWNoaW5lX3Bvd2VyX29mZigpOwotfQotCi12b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JaWYgKHBtX3Bvd2VyX29mZikKLQkJcG1fcG93ZXJfb2ZmKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWQ1OThjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE5NyArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0KLS8qIENvcHlyaWdodCAoQykgMTk5OSwyMDAxCi0gKgotICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbG9naWMgZm9yIG1hbmlwdWxhdGluZyB0aGUgQ0FUIGJ1cwotICogaW4gYSBsZXZlbCA1IG1hY2hpbmUuCi0gKgotICogVGhlIENBVCBidXMgaXMgYSBzZXJpYWwgY29uZmlndXJhdGlvbiBhbmQgdGVzdCBidXMuICBJdHMgcHJpbWFyeQotICogdXNlcyBhcmUgdG8gcHJvYmUgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtIGFuZCB0bwotICogZGlhZ25vc2UgZXJyb3IgY29uZGl0aW9ucyB3aGVuIGEgc3lzdGVtIGludGVycnVwdCBvY2N1cnMuICBUaGUgbG93Ci0gKiBsZXZlbCBpbnRlcmZhY2UgaXMgZmFpcmx5IHByaW1pdGl2ZSwgc28gbW9zdCBvZiB0aGlzIGZpbGUgY29uc2lzdHMKLSAqIG9mIGJpdCBzaGlmdCBtYW5pcHVsYXRpb25zIHRvIHNlbmQgYW5kIHJlY2VpdmUgcGFja2V0cyBvbiB0aGUKLSAqIHNlcmlhbCBidXMgKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KLSNpbmNsdWRlIDxhc20vdmljLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaWZkZWYgVk9ZQUdFUl9DQVRfREVCVUcKLSNkZWZpbmUgQ0RFQlVHKHgpCXByaW50ayB4Ci0jZWxzZQotI2RlZmluZSBDREVCVUcoeCkKLSNlbmRpZgotCi0vKiB0aGUgQ0FUIGNvbW1hbmQgcG9ydCAqLwotI2RlZmluZSBDQVRfQ01ECQkoc3NwYiArIDB4ZSkKLS8qIHRoZSBDQVQgZGF0YSBwb3J0ICovCi0jZGVmaW5lIENBVF9EQVRBCShzc3BiICsgMHhkKQotCi0vKiB0aGUgaW50ZXJuYWwgY2F0IGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgY2F0X3BhY2soX191OCAqIG1zZywgX191MTYgc3RhcnRfYml0LCBfX3U4ICogZGF0YSwgX191MTYgbnVtX2JpdHMpOwotc3RhdGljIHZvaWQgY2F0X3VucGFjayhfX3U4ICogbXNnLCBfX3UxNiBzdGFydF9iaXQsIF9fdTggKiBkYXRhLAotCQkgICAgICAgX191MTYgbnVtX2JpdHMpOwotc3RhdGljIHZvaWQgY2F0X2J1aWxkX2hlYWRlcihfX3U4ICogaGVhZGVyLCBjb25zdCBfX3UxNiBsZW4sCi0JCQkgICAgIGNvbnN0IF9fdTE2IHNtYWxsZXN0X3JlZ19iaXRzLAotCQkJICAgICBjb25zdCBfX3UxNiBsb25nZXN0X3JlZ19iaXRzKTsKLXN0YXRpYyBpbnQgY2F0X3NlbmRpbnN0KHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLAotCQkJX191OCByZWcsIF9fdTggb3ApOwotc3RhdGljIGludCBjYXRfZ2V0ZGF0YSh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwKLQkJICAgICAgIF9fdTggcmVnLCBfX3U4ICogdmFsdWUpOwotc3RhdGljIGludCBjYXRfc2hpZnRvdXQoX191OCAqIGRhdGEsIF9fdTE2IGRhdGFfYnl0ZXMsIF9fdTE2IGhlYWRlcl9ieXRlcywKLQkJCV9fdTggcGFkX2JpdHMpOwotc3RhdGljIGludCBjYXRfd3JpdGUodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsIF9fdTggcmVnLAotCQkgICAgIF9fdTggdmFsdWUpOwotc3RhdGljIGludCBjYXRfcmVhZCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwgX191OCByZWcsCi0JCSAgICBfX3U4ICogdmFsdWUpOwotc3RhdGljIGludCBjYXRfc3VicmVhZCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwKLQkJICAgICAgIF9fdTE2IG9mZnNldCwgX191MTYgbGVuLCB2b2lkICpidWYpOwotc3RhdGljIGludCBjYXRfc2VuZGRhdGEodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsCi0JCQlfX3U4IHJlZywgX191OCB2YWx1ZSk7Ci1zdGF0aWMgaW50IGNhdF9kaXNjb25uZWN0KHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwKTsKLXN0YXRpYyBpbnQgY2F0X2Nvbm5lY3Qodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3ApOwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNhdF9tb2R1bGVfbmFtZShpbnQgbW9kdWxlX2lkKQotewotCXN3aXRjaCAobW9kdWxlX2lkKSB7Ci0JY2FzZSAweDEwOgotCQlyZXR1cm4gIlByb2Nlc3NvciBTbG90IDAiOwotCWNhc2UgMHgxMToKLQkJcmV0dXJuICJQcm9jZXNzb3IgU2xvdCAxIjsKLQljYXNlIDB4MTI6Ci0JCXJldHVybiAiUHJvY2Vzc29yIFNsb3QgMiI7Ci0JY2FzZSAweDEzOgotCQlyZXR1cm4gIlByb2Nlc3NvciBTbG90IDQiOwotCWNhc2UgMHgxNDoKLQkJcmV0dXJuICJNZW1vcnkgU2xvdCAwIjsKLQljYXNlIDB4MTU6Ci0JCXJldHVybiAiTWVtb3J5IFNsb3QgMSI7Ci0JY2FzZSAweDE4OgotCQlyZXR1cm4gIlByaW1hcnkgTWljcm9jaGFubmVsIjsKLQljYXNlIDB4MTk6Ci0JCXJldHVybiAiU2Vjb25kYXJ5IE1pY3JvY2hhbm5lbCI7Ci0JY2FzZSAweDFhOgotCQlyZXR1cm4gIlBvd2VyIFN1cHBseSBJbnRlcmZhY2UiOwotCWNhc2UgMHgxYzoKLQkJcmV0dXJuICJQcm9jZXNzb3IgU2xvdCA1IjsKLQljYXNlIDB4MWQ6Ci0JCXJldHVybiAiUHJvY2Vzc29yIFNsb3QgNiI7Ci0JY2FzZSAweDFlOgotCQlyZXR1cm4gIlByb2Nlc3NvciBTbG90IDciOwotCWNhc2UgMHgxZjoKLQkJcmV0dXJuICJQcm9jZXNzb3IgU2xvdCA4IjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIlVua25vd24gTW9kdWxlIjsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc3NwYiA9IDA7CQkvKiBzdG9yZXMgdGhlIHN1cGVyIHBvcnQgbG9jYXRpb24gKi8KLWludCB2b3lhZ2VyXzhzbG90ID0gMDsJCS8qIHNldCB0byB0cnVlIGlmIGEgNTF4eCBtb25zdGVyICovCi0KLXZveWFnZXJfbW9kdWxlX3QgKnZveWFnZXJfY2F0X2xpc3Q7Ci0KLS8qIHRoZSBJL08gcG9ydCBhc3NpZ25tZW50cyBmb3IgdGhlIFZJQyBhbmQgUUlDICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHZpY19yZXMgPSB7Ci0JLm5hbWUgPSAiVm95YWdlciBJbnRlcnJ1cHQgQ29udHJvbGxlciIsCi0JLnN0YXJ0ID0gMHhGQzAwLAotCS5lbmQgPSAweEZDNkYKLX07Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIHFpY19yZXMgPSB7Ci0JLm5hbWUgPSAiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsCi0JLnN0YXJ0ID0gMHhGQzcwLAotCS5lbmQgPSAweEZDRkYKLX07Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYWNrIGEgZGF0YSBiaXQgc3RyZWFtIGluc2lkZSBhIG1lc3NhZ2UuCi0gKiBJdCB3cml0ZXMgbnVtX2JpdHMgb2YgdGhlIGRhdGEgYnVmZmVyIGluIG1zZyBzdGFydGluZyBhdCBzdGFydF9iaXQuCi0gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhbnkgdW51c2VkIGJpdCBpbiB0aGUgZGF0YSBzdHJlYW0KLSAqIGlzIHNldCB0byB6ZXJvIHNvIHRoYXQgdGhlIG9ycyB3aWxsIHdvcmsgY29ycmVjdGx5ICovCi1zdGF0aWMgdm9pZAotY2F0X3BhY2soX191OCAqIG1zZywgY29uc3QgX191MTYgc3RhcnRfYml0LCBfX3U4ICogZGF0YSwgY29uc3QgX191MTYgbnVtX2JpdHMpCi17Ci0JLyogY29tcHV0ZSBpbml0aWFsIHNoaWZ0IG5lZWRlZCAqLwotCWNvbnN0IF9fdTE2IG9mZnNldCA9IHN0YXJ0X2JpdCAlIEJJVFNfUEVSX0JZVEU7Ci0JX191MTYgbGVuID0gbnVtX2JpdHMgLyBCSVRTX1BFUl9CWVRFOwotCV9fdTE2IGJ5dGUgPSBzdGFydF9iaXQgLyBCSVRTX1BFUl9CWVRFOwotCV9fdTE2IHJlc2lkdWUgPSAobnVtX2JpdHMgJSBCSVRTX1BFUl9CWVRFKSArIG9mZnNldDsKLQlpbnQgaTsKLQotCS8qIGFkanVzdCBpZiB3ZSBoYXZlIG1vcmUgdGhhbiBhIGJ5dGUgb2YgcmVzaWR1ZSAqLwotCWlmIChyZXNpZHVlID49IEJJVFNfUEVSX0JZVEUpIHsKLQkJcmVzaWR1ZSAtPSBCSVRTX1BFUl9CWVRFOwotCQlsZW4rKzsKLQl9Ci0KLQkvKiBjbGVhciBvdXQgdGhlIGJpdHMuICBXZSBhc3N1bWUgaGVyZSB0aGF0IGlmIGxlbj09MCB0aGVuCi0JICogcmVzaWR1ZSA+PSBvZmZzZXQuICBUaGlzIGlzIGFsd2F5cyB0cnVlIGZvciB0aGUgY2F0YnVzCi0JICogb3BlcmF0aW9ucyAqLwotCW1zZ1tieXRlXSAmPSAweGZmIDw8IChCSVRTX1BFUl9CWVRFIC0gb2Zmc2V0KTsKLQltc2dbYnl0ZSsrXSB8PSBkYXRhWzBdID4+IG9mZnNldDsKLQlpZiAobGVuID09IDApCi0JCXJldHVybjsKLQlmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCi0JCW1zZ1tieXRlKytdID0gKGRhdGFbaSAtIDFdIDw8IChCSVRTX1BFUl9CWVRFIC0gb2Zmc2V0KSkKLQkJICAgIHwgKGRhdGFbaV0gPj4gb2Zmc2V0KTsKLQlpZiAocmVzaWR1ZSAhPSAwKSB7Ci0JCV9fdTggbWFzayA9IDB4ZmYgPj4gcmVzaWR1ZTsKLQkJX191OCBsYXN0X2J5dGUgPSBkYXRhW2kgLSAxXSA8PCAoQklUU19QRVJfQllURSAtIG9mZnNldCkKLQkJICAgIHwgKGRhdGFbaV0gPj4gb2Zmc2V0KTsKLQotCQlsYXN0X2J5dGUgJj0gfm1hc2s7Ci0JCW1zZ1tieXRlXSAmPSBtYXNrOwotCQltc2dbYnl0ZV0gfD0gbGFzdF9ieXRlOwotCX0KLQlyZXR1cm47Ci19Ci0KLS8qIHVucGFjayB0aGUgZGF0YSBhZ2FpbiAoc2FtZSBhcmd1bWVudHMgYXMgY2F0X3BhY2soKSkuIGRhdGEgYnVmZmVyCi0gKiBtdXN0IGJlIHplcm8gcG9wdWxhdGVkLgotICoKLSAqIEZ1bmN0aW9uOiBnaXZlbiBhIG1lc3NhZ2Ugc3RyaW5nIG1vdmUgdG8gc3RhcnRfYml0IGFuZCBjb3B5IG51bV9iaXRzIGludG8KLSAqIGRhdGEgKHN0YXJ0aW5nIGF0IGJpdCAwIGluIGRhdGEpLgotICovCi1zdGF0aWMgdm9pZAotY2F0X3VucGFjayhfX3U4ICogbXNnLCBjb25zdCBfX3UxNiBzdGFydF9iaXQsIF9fdTggKiBkYXRhLCBjb25zdCBfX3UxNiBudW1fYml0cykKLXsKLQkvKiBjb21wdXRlIGluaXRpYWwgc2hpZnQgbmVlZGVkICovCi0JY29uc3QgX191MTYgb2Zmc2V0ID0gc3RhcnRfYml0ICUgQklUU19QRVJfQllURTsKLQlfX3UxNiBsZW4gPSBudW1fYml0cyAvIEJJVFNfUEVSX0JZVEU7Ci0JY29uc3QgX191OCBsYXN0X2JpdHMgPSBudW1fYml0cyAlIEJJVFNfUEVSX0JZVEU7Ci0JX191MTYgYnl0ZSA9IHN0YXJ0X2JpdCAvIEJJVFNfUEVSX0JZVEU7Ci0JaW50IGk7Ci0KLQlpZiAobGFzdF9iaXRzICE9IDApCi0JCWxlbisrOwotCi0JLyogc3BlY2lhbCBjYXNlOiB3YW50IDwgOCBiaXRzIGZyb20gbXNnIGFuZCB3ZSBjYW4gZ2V0IGl0IGZyb20KLQkgKiBhIHNpbmdsZSBieXRlIG9mIHRoZSBtc2cgKi8KLQlpZiAobGVuID09IDAgJiYgQklUU19QRVJfQllURSAtIG9mZnNldCA+PSBudW1fYml0cykgewotCQlkYXRhWzBdID0gbXNnW2J5dGVdIDw8IG9mZnNldDsKLQkJZGF0YVswXSAmPSAweGZmID4+IChCSVRTX1BFUl9CWVRFIC0gbnVtX2JpdHMpOwotCQlyZXR1cm47Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkvKiB0aGlzIGFubm95aW5nIGlmIGhhcyB0byBiZSBkb25lIGp1c3QgaW4gY2FzZSBhIHJlYWQgb2YKLQkJICogbXNnIG9uZSBiZXlvbmQgdGhlIGFycmF5IGNhdXNlcyBhIHBhbmljICovCi0JCWlmIChvZmZzZXQgIT0gMCkgewotCQkJZGF0YVtpXSA9IG1zZ1tieXRlKytdIDw8IG9mZnNldDsKLQkJCWRhdGFbaV0gfD0gbXNnW2J5dGVdID4+IChCSVRTX1BFUl9CWVRFIC0gb2Zmc2V0KTsKLQkJfSBlbHNlIHsKLQkJCWRhdGFbaV0gPSBtc2dbYnl0ZSsrXTsKLQkJfQotCX0KLQkvKiBkbyB3ZSBuZWVkIHRvIHRydW5jYXRlIHRoZSBmaW5hbCBieXRlICovCi0JaWYgKGxhc3RfYml0cyAhPSAwKSB7Ci0JCWRhdGFbaSAtIDFdICY9IDB4ZmYgPDwgKEJJVFNfUEVSX0JZVEUgLSBsYXN0X2JpdHMpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYXRfYnVpbGRfaGVhZGVyKF9fdTggKiBoZWFkZXIsIGNvbnN0IF9fdTE2IGxlbiwgY29uc3QgX191MTYgc21hbGxlc3RfcmVnX2JpdHMsCi0JCSBjb25zdCBfX3UxNiBsb25nZXN0X3JlZ19iaXRzKQotewotCWludCBpOwotCV9fdTE2IHN0YXJ0X2JpdCA9IChzbWFsbGVzdF9yZWdfYml0cyAtIDEpICUgQklUU19QRVJfQllURTsKLQlfX3U4ICpsYXN0X2J5dGUgPSAmaGVhZGVyW2xlbiAtIDFdOwotCi0JaWYgKHN0YXJ0X2JpdCA9PSAwKQotCQlzdGFydF9iaXQgPSAxOwkvKiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpdCBpbiB0aGUgaGRyICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCWhlYWRlcltpXSA9IDA7Ci0KLQlmb3IgKGkgPSBzdGFydF9iaXQ7IGkgPiAwOyBpLS0pCi0JCSpsYXN0X2J5dGUgPSAoKCpsYXN0X2J5dGUpIDw8IDEpICsgMTsKLQotfQotCi1zdGF0aWMgaW50Ci1jYXRfc2VuZGluc3Qodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsIF9fdTggcmVnLCBfX3U4IG9wKQotewotCV9fdTggcGFyaXR5LCBpbnN0LCBpbnN0X2J1Zls0XSA9IHsgMCB9OwotCV9fdTggaXNlcVtWT1lBR0VSX01BWF9TQ0FOX1BBVEhdLCBoc2VxW1ZPWUFHRVJfTUFYX1JFR19TSVpFXTsKLQlfX3UxNiBpYnl0ZXMsIGhieXRlcywgcGFkYml0czsKLQlpbnQgaTsKLQotCS8qIAotCSAqIFBhcml0eSBpcyB0aGUgcGFyaXR5IG9mIHRoZSByZWdpc3RlciBudW1iZXIgKyAxIChSRUFEX1JFR0lTVEVSCi0JICogYW5kIFdSSVRFX1JFR0lTVEVSIGFsd2F5cyBhZGQgJzEnIHRvIHRoZSBudW1iZXIgb2YgYml0cyA9PSAxKQotCSAqLwotCXBhcml0eSA9IChfX3U4KSAoMSArIChyZWcgJiAweDAxKSArCi0JCQkgKChfX3U4KSAocmVnICYgMHgwMikgPj4gMSkgKwotCQkJICgoX191OCkgKHJlZyAmIDB4MDQpID4+IDIpICsKLQkJCSAoKF9fdTgpIChyZWcgJiAweDA4KSA+PiAzKSkgJSAyOwotCi0JaW5zdCA9ICgocGFyaXR5IDw8IDcpIHwgKHJlZyA8PCAyKSB8IG9wKTsKLQotCW91dGIoVk9ZQUdFUl9DQVRfSVJDWUMsIENBVF9DTUQpOwotCWlmICghbW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCkgewotCQlpZiAoYXNpY3AtPmFzaWNfaWQgIT0gVk9ZQUdFUl9DQVRfSUQpIHsKLQkJCXByaW50awotCQkJICAgICgiKipXQVJOSU5HKioqOiBjYXRfc2VuZGluc3QgaGFzIGRpc2Nvbm5lY3RlZCBzY2FuIHBhdGggbm90IHRvIENBVCBhc2ljXG4iKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCW91dGIoVk9ZQUdFUl9DQVRfSEVBREVSLCBDQVRfREFUQSk7Ci0JCW91dGIoaW5zdCwgQ0FUX0RBVEEpOwotCQlpZiAoaW5iKENBVF9EQVRBKSAhPSBWT1lBR0VSX0NBVF9IRUFERVIpIHsKLQkJCUNERUJVRygoIlZPWUFHRVIgQ0FUOiBjYXRfc2VuZGluc3QgZmFpbGVkIHRvIGdldCBDQVRfSEVBREVSXG4iKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JaWJ5dGVzID0gbW9kcC0+aW5zdF9iaXRzIC8gQklUU19QRVJfQllURTsKLQlpZiAoKHBhZGJpdHMgPSBtb2RwLT5pbnN0X2JpdHMgJSBCSVRTX1BFUl9CWVRFKSAhPSAwKSB7Ci0JCXBhZGJpdHMgPSBCSVRTX1BFUl9CWVRFIC0gcGFkYml0czsKLQkJaWJ5dGVzKys7Ci0JfQotCWhieXRlcyA9IG1vZHAtPmxhcmdlc3RfcmVnIC8gQklUU19QRVJfQllURTsKLQlpZiAobW9kcC0+bGFyZ2VzdF9yZWcgJSBCSVRTX1BFUl9CWVRFKQotCQloYnl0ZXMrKzsKLQlDREVCVUcoKCJjYXRfc2VuZGluc3Q6IGlieXRlcz0lZCwgaGJ5dGVzPSVkXG4iLCBpYnl0ZXMsIGhieXRlcykpOwotCS8qIGluaXRpYWxpc2UgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlIHRvIDB4ZmYgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaWJ5dGVzICsgaGJ5dGVzOyBpKyspCi0JCWlzZXFbaV0gPSAweGZmOwotCWNhdF9idWlsZF9oZWFkZXIoaHNlcSwgaGJ5dGVzLCBtb2RwLT5zbWFsbGVzdF9yZWcsIG1vZHAtPmxhcmdlc3RfcmVnKTsKLQljYXRfcGFjayhpc2VxLCBtb2RwLT5pbnN0X2JpdHMsIGhzZXEsIGhieXRlcyAqIEJJVFNfUEVSX0JZVEUpOwotCWluc3RfYnVmWzBdID0gaW5zdDsKLQlpbnN0X2J1ZlsxXSA9IDB4RkYgPj4gKG1vZHAtPmxhcmdlc3RfcmVnICUgQklUU19QRVJfQllURSk7Ci0JY2F0X3BhY2soaXNlcSwgYXNpY3AtPmJpdF9sb2NhdGlvbiwgaW5zdF9idWYsIGFzaWNwLT5pcmVnX2xlbmd0aCk7Ci0jaWZkZWYgVk9ZQUdFUl9DQVRfREVCVUcKLQlwcmludGsoImlucyA9IDB4JXgsIGlzZXE6ICIsIGluc3QpOwotCWZvciAoaSA9IDA7IGkgPCBpYnl0ZXMgKyBoYnl0ZXM7IGkrKykKLQkJcHJpbnRrKCIweCV4ICIsIGlzZXFbaV0pOwotCXByaW50aygiXG4iKTsKLSNlbmRpZgotCWlmIChjYXRfc2hpZnRvdXQoaXNlcSwgaWJ5dGVzLCBoYnl0ZXMsIHBhZGJpdHMpKSB7Ci0JCUNERUJVRygoIlZPWUFHRVIgQ0FUOiBjYXRfc2VuZGluc3Q6IGNhdF9zaGlmdG91dCBmYWlsZWRcbiIpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCUNERUJVRygoIkNBVCBTSElGVE9VVCBET05FXG4iKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWNhdF9nZXRkYXRhKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3U4IHJlZywKLQkgICAgX191OCAqIHZhbHVlKQotewotCWlmICghbW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCkgewotCQlpZiAoYXNpY3AtPmFzaWNfaWQgIT0gVk9ZQUdFUl9DQVRfSUQpIHsKLQkJCUNERUJVRygoIlZPWUFHRVIgQ0FUOiBFUlJPUjogY2F0X2dldGRhdGEgdG8gQ0FUIGFzaWMgd2l0aCBzY2FuIHBhdGggY29ubmVjdGVkXG4iKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAocmVnID4gVk9ZQUdFUl9TVUJBRERSSEkpCi0JCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRFJDWUMsIENBVF9DTUQpOwotCQlvdXRiKFZPWUFHRVJfQ0FUX0hFQURFUiwgQ0FUX0RBVEEpOwotCQkqdmFsdWUgPSBpbmIoQ0FUX0RBVEEpOwotCQlvdXRiKDB4QUEsIENBVF9EQVRBKTsKLQkJaWYgKGluYihDQVRfREFUQSkgIT0gVk9ZQUdFUl9DQVRfSEVBREVSKSB7Ci0JCQlDREVCVUcoKCJjYXRfZ2V0ZGF0YTogZmFpbGVkIHRvIGdldCBWT1lBR0VSX0NBVF9IRUFERVJcbiIpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCV9fdTE2IHNiaXRzID0gbW9kcC0+bnVtX2FzaWNzIC0gMSArIGFzaWNwLT5pcmVnX2xlbmd0aDsKLQkJX191MTYgc2J5dGVzID0gc2JpdHMgLyBCSVRTX1BFUl9CWVRFOwotCQlfX3UxNiB0Ynl0ZXM7Ci0JCV9fdTggc3RyaW5nW1ZPWUFHRVJfTUFYX1NDQU5fUEFUSF0sCi0JCSAgICB0cmFpbGVyW1ZPWUFHRVJfTUFYX1JFR19TSVpFXTsKLQkJX191OCBwYWRiaXRzOwotCQlpbnQgaTsKLQotCQlvdXRiKFZPWUFHRVJfQ0FUX0RSQ1lDLCBDQVRfQ01EKTsKLQotCQlpZiAoKHBhZGJpdHMgPSBzYml0cyAlIEJJVFNfUEVSX0JZVEUpICE9IDApIHsKLQkJCXBhZGJpdHMgPSBCSVRTX1BFUl9CWVRFIC0gcGFkYml0czsKLQkJCXNieXRlcysrOwotCQl9Ci0JCXRieXRlcyA9IGFzaWNwLT5pcmVnX2xlbmd0aCAvIEJJVFNfUEVSX0JZVEU7Ci0JCWlmIChhc2ljcC0+aXJlZ19sZW5ndGggJSBCSVRTX1BFUl9CWVRFKQotCQkJdGJ5dGVzKys7Ci0JCUNERUJVRygoImNhdF9nZXRkYXRhOiB0Ynl0ZXMgPSAlZCwgc2J5dGVzID0gJWQsIHBhZGJpdHMgPSAlZFxuIiwKLQkJCXRieXRlcywgc2J5dGVzLCBwYWRiaXRzKSk7Ci0JCWNhdF9idWlsZF9oZWFkZXIodHJhaWxlciwgdGJ5dGVzLCAxLCBhc2ljcC0+aXJlZ19sZW5ndGgpOwotCi0JCWZvciAoaSA9IHRieXRlcyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlvdXRiKHRyYWlsZXJbaV0sIENBVF9EQVRBKTsKLQkJCXN0cmluZ1tzYnl0ZXMgKyBpXSA9IGluYihDQVRfREFUQSk7Ci0JCX0KLQotCQlmb3IgKGkgPSBzYnl0ZXMgLSAxOyBpID49IDA7IGktLSkgewotCQkJb3V0YigweGFhLCBDQVRfREFUQSk7Ci0JCQlzdHJpbmdbaV0gPSBpbmIoQ0FUX0RBVEEpOwotCQl9Ci0JCSp2YWx1ZSA9IDA7Ci0JCWNhdF91bnBhY2soc3RyaW5nLAotCQkJICAgcGFkYml0cyArICh0Ynl0ZXMgKiBCSVRTX1BFUl9CWVRFKSArCi0JCQkgICBhc2ljcC0+YXNpY19sb2NhdGlvbiwgdmFsdWUsIGFzaWNwLT5pcmVnX2xlbmd0aCk7Ci0jaWZkZWYgVk9ZQUdFUl9DQVRfREVCVUcKLQkJcHJpbnRrKCJ2YWx1ZT0weCV4LCBzdHJpbmc6ICIsICp2YWx1ZSk7Ci0JCWZvciAoaSA9IDA7IGkgPCB0Ynl0ZXMgKyBzYnl0ZXM7IGkrKykKLQkJCXByaW50aygiMHgleCAiLCBzdHJpbmdbaV0pOwotCQlwcmludGsoIlxuIik7Ci0jZW5kaWYKLQotCQkvKiBzYW5pdHkgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHJldHVybiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgdGJ5dGVzOyBpKyspIHsKLQkJCV9fdTggaW5wdXQgPSAwOwotCi0JCQljYXRfdW5wYWNrKHN0cmluZywgcGFkYml0cyArIChpICogQklUU19QRVJfQllURSksCi0JCQkJICAgJmlucHV0LCBCSVRTX1BFUl9CWVRFKTsKLQkJCWlmICh0cmFpbGVyW2ldICE9IGlucHV0KSB7Ci0JCQkJQ0RFQlVHKCgiY2F0X2dldGRhdGE6IGZhaWxlZCB0byBzYW5pdHkgY2hlY2sgcmVzdCBvZiByZXQoJWQpIDB4JXggIT0gMHgleFxuIiwgaSwgaW5wdXQsIHRyYWlsZXJbaV0pKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCQlDREVCVUcoKCJjYXRfZ2V0ZGF0YSBET05FXG4iKSk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludAotY2F0X3NoaWZ0b3V0KF9fdTggKiBkYXRhLCBfX3UxNiBkYXRhX2J5dGVzLCBfX3UxNiBoZWFkZXJfYnl0ZXMsIF9fdTggcGFkX2JpdHMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBkYXRhX2J5dGVzICsgaGVhZGVyX2J5dGVzIC0gMTsgaSA+PSBoZWFkZXJfYnl0ZXM7IGktLSkKLQkJb3V0YihkYXRhW2ldLCBDQVRfREFUQSk7Ci0KLQlmb3IgKGkgPSBoZWFkZXJfYnl0ZXMgLSAxOyBpID49IDA7IGktLSkgewotCQlfX3U4IGhlYWRlciA9IDA7Ci0JCV9fdTggaW5wdXQ7Ci0KLQkJb3V0YihkYXRhW2ldLCBDQVRfREFUQSk7Ci0JCWlucHV0ID0gaW5iKENBVF9EQVRBKTsKLQkJQ0RFQlVHKCgiY2F0X3NoaWZ0b3V0OiByZXR1cm5lZCAweCV4XG4iLCBpbnB1dCkpOwotCQljYXRfdW5wYWNrKGRhdGEsICgoZGF0YV9ieXRlcyArIGkpICogQklUU19QRVJfQllURSkgLSBwYWRfYml0cywKLQkJCSAgICZoZWFkZXIsIEJJVFNfUEVSX0JZVEUpOwotCQlpZiAoaW5wdXQgIT0gaGVhZGVyKSB7Ci0JCQlDREVCVUcoKCJWT1lBR0VSIENBVDogY2F0X3NoaWZ0b3V0IGZhaWxlZCB0byByZXR1cm4gaGVhZGVyIDB4JXggIT0gMHgleFxuIiwgaW5wdXQsIGhlYWRlcikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWNhdF9zZW5kZGF0YSh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCwKLQkgICAgIF9fdTggcmVnLCBfX3U4IHZhbHVlKQotewotCW91dGIoVk9ZQUdFUl9DQVRfRFJDWUMsIENBVF9DTUQpOwotCWlmICghbW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCkgewotCQlpZiAoYXNpY3AtPmFzaWNfaWQgIT0gVk9ZQUdFUl9DQVRfSUQpIHsKLQkJCUNERUJVRygoIlZPWUFHRVIgQ0FUOiBFUlJPUjogc2NhbiBwYXRoIGRpc2Nvbm5lY3RlZCB3aGVuIGFzaWMgIT0gQ0FUXG4iKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlvdXRiKFZPWUFHRVJfQ0FUX0hFQURFUiwgQ0FUX0RBVEEpOwotCQlvdXRiKHZhbHVlLCBDQVRfREFUQSk7Ci0JCWlmIChpbmIoQ0FUX0RBVEEpICE9IFZPWUFHRVJfQ0FUX0hFQURFUikgewotCQkJQ0RFQlVHKCgiY2F0X3NlbmRkYXRhOiBmYWlsZWQgdG8gZ2V0IGNvcnJlY3QgaGVhZGVyIHJlc3BvbnNlIHRvIHNlbnQgZGF0YVxuIikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKHJlZyA+IFZPWUFHRVJfU1VCQUREUkhJKSB7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlfX3UxNiBoYnl0ZXMgPSBhc2ljcC0+aXJlZ19sZW5ndGggLyBCSVRTX1BFUl9CWVRFOwotCQlfX3UxNiBkYnl0ZXMgPQotCQkgICAgKG1vZHAtPm51bV9hc2ljcyAtIDEgKyBhc2ljcC0+aXJlZ19sZW5ndGgpIC8gQklUU19QRVJfQllURTsKLQkJX191OCBwYWRiaXRzLCBkc2VxW1ZPWUFHRVJfTUFYX1NDQU5fUEFUSF0sCi0JCSAgICBoc2VxW1ZPWUFHRVJfTUFYX1JFR19TSVpFXTsKLQkJaW50IGk7Ci0KLQkJaWYgKChwYWRiaXRzID0gKG1vZHAtPm51bV9hc2ljcyAtIDEKLQkJCQkrIGFzaWNwLT5pcmVnX2xlbmd0aCkgJSBCSVRTX1BFUl9CWVRFKSAhPSAwKSB7Ci0JCQlwYWRiaXRzID0gQklUU19QRVJfQllURSAtIHBhZGJpdHM7Ci0JCQlkYnl0ZXMrKzsKLQkJfQotCQlpZiAoYXNpY3AtPmlyZWdfbGVuZ3RoICUgQklUU19QRVJfQllURSkKLQkJCWhieXRlcysrOwotCi0JCWNhdF9idWlsZF9oZWFkZXIoaHNlcSwgaGJ5dGVzLCAxLCBhc2ljcC0+aXJlZ19sZW5ndGgpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBkYnl0ZXMgKyBoYnl0ZXM7IGkrKykKLQkJCWRzZXFbaV0gPSAweGZmOwotCQlDREVCVUcoKCJjYXRfc2VuZGRhdGE6IGRieXRlcz0lZCwgaGJ5dGVzPSVkLCBwYWRiaXRzPSVkXG4iLAotCQkJZGJ5dGVzLCBoYnl0ZXMsIHBhZGJpdHMpKTsKLQkJY2F0X3BhY2soZHNlcSwgbW9kcC0+bnVtX2FzaWNzIC0gMSArIGFzaWNwLT5pcmVnX2xlbmd0aCwKLQkJCSBoc2VxLCBoYnl0ZXMgKiBCSVRTX1BFUl9CWVRFKTsKLQkJY2F0X3BhY2soZHNlcSwgYXNpY3AtPmFzaWNfbG9jYXRpb24sICZ2YWx1ZSwKLQkJCSBhc2ljcC0+aXJlZ19sZW5ndGgpOwotI2lmZGVmIFZPWUFHRVJfQ0FUX0RFQlVHCi0JCXByaW50aygiZHNlcSAiKTsKLQkJZm9yIChpID0gMDsgaSA8IGhieXRlcyArIGRieXRlczsgaSsrKSB7Ci0JCQlwcmludGsoIjB4JXggIiwgZHNlcVtpXSk7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0JCXJldHVybiBjYXRfc2hpZnRvdXQoZHNlcSwgZGJ5dGVzLCBoYnl0ZXMsIHBhZGJpdHMpOwotCX0KLX0KLQotc3RhdGljIGludAotY2F0X3dyaXRlKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3U4IHJlZywgX191OCB2YWx1ZSkKLXsKLQlpZiAoY2F0X3NlbmRpbnN0KG1vZHAsIGFzaWNwLCByZWcsIFZPWUFHRVJfV1JJVEVfQ09ORklHKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIGNhdF9zZW5kZGF0YShtb2RwLCBhc2ljcCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNhdF9yZWFkKHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwLCBfX3U4IHJlZywKLQkgX191OCAqIHZhbHVlKQotewotCWlmIChjYXRfc2VuZGluc3QobW9kcCwgYXNpY3AsIHJlZywgVk9ZQUdFUl9SRUFEX0NPTkZJRykpCi0JCXJldHVybiAxOwotCXJldHVybiBjYXRfZ2V0ZGF0YShtb2RwLCBhc2ljcCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNhdF9zdWJhZGRyc2V0dXAodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsIF9fdTE2IG9mZnNldCwKLQkJIF9fdTE2IGxlbikKLXsKLQlfX3U4IHZhbDsKLQotCWlmIChsZW4gPiAxKSB7Ci0JCS8qIHNldCBhdXRvIGluY3JlbWVudCAqLwotCQlfX3U4IG5ld3ZhbDsKLQotCQlpZiAoY2F0X3JlYWQobW9kcCwgYXNpY3AsIFZPWUFHRVJfQVVUT19JTkNfUkVHLCAmdmFsKSkgewotCQkJQ0RFQlVHKCgiY2F0X3N1YmFkZHJzZXR1cDogcmVhZCBvZiBWT1lBR0VSX0FVVE9fSU5DX1JFRyBmYWlsZWRcbiIpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCUNERUJVRygoImNhdF9zdWJhZGRyc2V0dXA6IFZPWUFHRVJfQVVUT19JTkNfUkVHID0gMHgleFxuIiwKLQkJCXZhbCkpOwotCQluZXd2YWwgPSB2YWwgfCBWT1lBR0VSX0FVVE9fSU5DOwotCQlpZiAobmV3dmFsICE9IHZhbCkgewotCQkJaWYgKGNhdF93cml0ZShtb2RwLCBhc2ljcCwgVk9ZQUdFUl9BVVRPX0lOQ19SRUcsIHZhbCkpIHsKLQkJCQlDREVCVUcoKCJjYXRfc3ViYWRkcnNldHVwOiB3cml0ZSB0byBWT1lBR0VSX0FVVE9fSU5DX1JFRyBmYWlsZWRcbiIpKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY2F0X3dyaXRlKG1vZHAsIGFzaWNwLCBWT1lBR0VSX1NVQkFERFJMTywgKF9fdTgpIChvZmZzZXQgJiAweGZmKSkpIHsKLQkJQ0RFQlVHKCgiY2F0X3N1YmFkZHJzZXR1cDogd3JpdGUgdG8gU1VCQUREUkxPIGZhaWxlZFxuIikpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKGFzaWNwLT5zdWJhZGRyID4gVk9ZQUdFUl9TVUJBRERSX0xPKSB7Ci0JCWlmIChjYXRfd3JpdGUKLQkJICAgIChtb2RwLCBhc2ljcCwgVk9ZQUdFUl9TVUJBRERSSEksIChfX3U4KSAob2Zmc2V0ID4+IDgpKSkgewotCQkJQ0RFQlVHKCgiY2F0X3N1YmFkZHJzZXR1cDogd3JpdGUgdG8gU1VCQUREUkhJIGZhaWxlZFxuIikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJY2F0X3JlYWQobW9kcCwgYXNpY3AsIFZPWUFHRVJfU1VCQUREUkhJLCAmdmFsKTsKLQkJQ0RFQlVHKCgiY2F0X3N1YmFkZHJzZXR1cDogb2Zmc2V0ID0gJWQsIGhpID0gJWRcbiIsIG9mZnNldCwKLQkJCXZhbCkpOwotCX0KLQljYXRfcmVhZChtb2RwLCBhc2ljcCwgVk9ZQUdFUl9TVUJBRERSTE8sICZ2YWwpOwotCUNERUJVRygoImNhdF9zdWJhZGRyc2V0dXA6IG9mZnNldCA9ICVkLCBsbyA9ICVkXG4iLCBvZmZzZXQsIHZhbCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jYXRfc3Vid3JpdGUodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsIF9fdTE2IG9mZnNldCwKLQkgICAgIF9fdTE2IGxlbiwgdm9pZCAqYnVmKQotewotCWludCBpLCByZXR2YWw7Ci0KLQkvKiBGSVhNRTogbmVlZCBzcGVjaWFsIGFjdGlvbnMgZm9yIFZPWUFHRVJfQ0FUX0lEIGhlcmUgKi8KLQlpZiAoYXNpY3AtPmFzaWNfaWQgPT0gVk9ZQUdFUl9DQVRfSUQpIHsKLQkJQ0RFQlVHKCgiY2F0X3N1YndyaXRlOiBBVFRFTVBUIFRPIFdSSVRFIFRPIENBVCBBU0lDXG4iKSk7Ci0JCS8qIEZJWE1FIC0tIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgaGFuZGxlZCBiZXR0ZXIKLQkJICogVGhlcmUgaXMgYSBwcm9ibGVtIHdyaXRpbmcgdG8gdGhlIGNhdCBhc2ljIGluIHRoZQotCQkgKiBQU0kuICBUaGUgMzB1cyBkZWxheSBzZWVtcyB0byB3b3JrLCB0aG91Z2ggKi8KLQkJdWRlbGF5KDMwKTsKLQl9Ci0KLQlpZiAoKHJldHZhbCA9IGNhdF9zdWJhZGRyc2V0dXAobW9kcCwgYXNpY3AsIG9mZnNldCwgbGVuKSkgIT0gMCkgewotCQlwcmludGsoImNhdF9zdWJ3cml0ZTogY2F0X3N1YmFkZHJzZXR1cCBGQUlMRURcbiIpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlmIChjYXRfc2VuZGluc3QKLQkgICAgKG1vZHAsIGFzaWNwLCBWT1lBR0VSX1NVQkFERFJEQVRBLCBWT1lBR0VSX1dSSVRFX0NPTkZJRykpIHsKLQkJcHJpbnRrKCJjYXRfc3Vid3JpdGU6IGNhdF9zZW5kaW5zdCBGQUlMRURcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChjYXRfc2VuZGRhdGEobW9kcCwgYXNpY3AsIDB4RkYsICgoX191OCAqKSBidWYpW2ldKSkgewotCQkJcHJpbnRrCi0JCQkgICAgKCJjYXRfc3Vid3JpdGU6IGNhdF9zZW5kYXRhIGVsZW1lbnQgYXQgJWQgRkFJTEVEXG4iLAotCQkJICAgICBpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotc3RhdGljIGludAotY2F0X3N1YnJlYWQodm95YWdlcl9tb2R1bGVfdCAqIG1vZHAsIHZveWFnZXJfYXNpY190ICogYXNpY3AsIF9fdTE2IG9mZnNldCwKLQkgICAgX191MTYgbGVuLCB2b2lkICpidWYpCi17Ci0JaW50IGksIHJldHZhbDsKLQotCWlmICgocmV0dmFsID0gY2F0X3N1YmFkZHJzZXR1cChtb2RwLCBhc2ljcCwgb2Zmc2V0LCBsZW4pKSAhPSAwKSB7Ci0JCUNERUJVRygoImNhdF9zdWJyZWFkOiBjYXRfc3ViYWRkcnNldHVwIEZBSUxFRFxuIikpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlmIChjYXRfc2VuZGluc3QobW9kcCwgYXNpY3AsIFZPWUFHRVJfU1VCQUREUkRBVEEsIFZPWUFHRVJfUkVBRF9DT05GSUcpKSB7Ci0JCUNERUJVRygoImNhdF9zdWJyZWFkOiBjYXRfc2VuZGluc3QgZmFpbGVkXG4iKSk7Ci0JCXJldHVybiAxOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJaWYgKGNhdF9nZXRkYXRhKG1vZHAsIGFzaWNwLCAweEZGLCAmKChfX3U4ICopIGJ1ZilbaV0pKSB7Ci0JCQlDREVCVUcoKCJjYXRfc3VicmVhZDogY2F0X2dldGRhdGEgZWxlbWVudCAlZCBmYWlsZWRcbiIsCi0JCQkJaSkpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGJ1ZmZlciBmb3Igc3RvcmluZyBFUFJPTSBkYXRhIHJlYWQgaW4gZHVyaW5nIGluaXRpYWxpc2F0aW9uICovCi1zdGF0aWMgX19pbml0ZGF0YSBfX3U4IGVwcm9tX2J1ZlsweEZGRkZdOwotc3RhdGljIHZveWFnZXJfbW9kdWxlX3QgKnZveWFnZXJfaW5pdGlhbF9tb2R1bGU7Ci0KLS8qIEluaXRpYWxpc2UgdGhlIGNhdCBidXMgY29tcG9uZW50cy4gIFdlIGFzc3VtZSB0aGlzIGlzIGNhbGxlZCBieSB0aGUKLSAqIGJvb3QgY3B1ICphZnRlciogYWxsIG1lbW9yeSBpbml0aWFsaXNhdGlvbiBoYXMgYmVlbiBkb25lIChzbyB3ZSBjYW4KLSAqIHVzZSBrbWFsbG9jKSBidXQgYmVmb3JlIHNtcCBpbml0aWFsaXNhdGlvbiwgc28gd2UgY2FuIHByb2JlIHRoZSBTTVAKLSAqIGNvbmZpZ3VyYXRpb24gYW5kIHBpY2sgdXAgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLiAgKi8KLXZvaWQgX19pbml0IHZveWFnZXJfY2F0X2luaXQodm9pZCkKLXsKLQl2b3lhZ2VyX21vZHVsZV90ICoqbW9kcHAgPSAmdm95YWdlcl9pbml0aWFsX21vZHVsZTsKLQl2b3lhZ2VyX2FzaWNfdCAqKmFzaWNwcDsKLQl2b3lhZ2VyX2FzaWNfdCAqcWFiY19hc2ljID0gTlVMTDsKLQlpbnQgaSwgajsKLQl1bnNpZ25lZCBsb25nIHFpY19hZGRyID0gMDsKLQlfX3U4IHFhYmNfZGF0YVsweDIwXTsKLQlfX3U4IG51bV9zdWJtb2R1bGVzLCB2YWw7Ci0Jdm95YWdlcl9lcHJvbV9oZHJfdCAqZXByb21faGRyID0gKHZveWFnZXJfZXByb21faGRyX3QgKikgJiBlcHJvbV9idWZbMF07Ci0KLQlfX3U4IGNtb3NbNF07Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JLyogaW5pdGlhbGxpc2UgdGhlIFNVUyBtYWlsYm94ICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihjbW9zKTsgaSsrKQotCQljbW9zW2ldID0gdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9EVU1QX0xPQ0FUSU9OICsgaSk7Ci0JYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKWNtb3M7Ci0JaWYgKChhZGRyICYgMHhmZjAwMDAwMCkgIT0gMHhmZjAwMDAwMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJWb3lhZ2VyIGZhaWxlZCB0byBnZXQgU1VTIG1haWxib3ggKGFkZHIgPSAweCVseFxuIiwKLQkJICAgICAgIGFkZHIpOwotCX0gZWxzZSB7Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCi0JCXJlcy5uYW1lID0gInZveWFnZXIgU1VTIjsKLQkJcmVzLnN0YXJ0ID0gYWRkcjsKLQkJcmVzLmVuZCA9IGFkZHIgKyAweDNmZjsKLQotCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlcyk7Ci0JCXZveWFnZXJfU1VTID0gKHN0cnVjdCB2b3lhZ2VyX1NVUyAqKQotCQkgICAgaW9yZW1hcChhZGRyLCAweDQwMCk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiVm95YWdlciBTVVMgbWFpbGJveCB2ZXJzaW9uIDB4JXhcbiIsCi0JCSAgICAgICB2b3lhZ2VyX1NVUy0+U1VTX3ZlcnNpb24pOwotCQl2b3lhZ2VyX1NVUy0+a2VybmVsX3ZlcnNpb24gPSBWT1lBR0VSX01BSUxCT1hfVkVSU0lPTjsKLQkJdm95YWdlcl9TVVMtPmtlcm5lbF9mbGFncyA9IFZPWUFHRVJfT1NfSEFTX1NZU0lOVDsKLQl9Ci0KLQkvKiBjbGVhciB0aGUgcHJvY2Vzc29yIGNvdW50cyAqLwotCXZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgPSAwOwotCXZveWFnZXJfcXVhZF9wcm9jZXNzb3JzID0gMDsKLQotCXByaW50aygiVk9ZQUdFUjogYmVnaW5uaW5nIENBVCBidXMgcHJvYmVcbiIpOwotCS8qIHNldCB1cCB0aGUgU3VwZXJTZXQgUG9ydCBCbG9jayB3aGljaCB0ZWxscyB1cyB3aGVyZSB0aGUKLQkgKiBDQVQgY29tbXVuaWNhdGlvbiBwb3J0IGlzICovCi0Jc3NwYiA9IGluYihWT1lBR0VSX1NTUEJfUkVMT0NBVElPTl9QT1JUKSAqIDB4MTAwOwotCVZERUJVRygoIlZPWUFHRVIgREVCVUc6IHNzcGIgPSAweCV4XG4iLCBzc3BiKSk7Ci0KLQkvKiBub3cgZmluZCBvdXQgaWYgd2VyZSA4IHNsb3Qgb3Igbm9ybWFsICovCi0JaWYgKChpbmIoVklDX1BST0NfV0hPX0FNX0kpICYgRUlHSFRfU0xPVF9JREVOVElGSUVSKQotCSAgICA9PSBFSUdIVF9TTE9UX0lERU5USUZJRVIpIHsKLQkJdm95YWdlcl84c2xvdCA9IDE7Ci0JCXByaW50ayhLRVJOX05PVElDRQotCQkgICAgICAgIlZveWFnZXI6IEVpZ2h0IHNsb3QgNTF4eCBjb25maWd1cmF0aW9uIGRldGVjdGVkXG4iKTsKLQl9Ci0KLQlmb3IgKGkgPSBWT1lBR0VSX01JTl9NT0RVTEU7IGkgPD0gVk9ZQUdFUl9NQVhfTU9EVUxFOyBpKyspIHsKLQkJX191OCBpbnB1dDsKLQkJaW50IGFzaWM7Ci0JCV9fdTE2IGVwcm9tX3NpemU7Ci0JCV9fdTE2IHNwX29mZnNldDsKLQotCQlvdXRiKFZPWUFHRVJfQ0FUX0RFU0VMRUNULCBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCk7Ci0JCW91dGIoaSwgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCi0JCS8qIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW9kdWxlICovCi0JCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJb3V0YihWT1lBR0VSX0NBVF9JUkNZQywgQ0FUX0NNRCk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfSEVBREVSLCBDQVRfREFUQSk7Ci0JCS8qIHN0cmVhbSBzZXJpZXMgb2YgYWx0ZXJuYXRpbmcgMSdzIGFuZCAwJ3MgdG8gc3RpbXVsYXRlCi0JCSAqIHJlc3BvbnNlICovCi0JCW91dGIoMHhBQSwgQ0FUX0RBVEEpOwotCQlpbnB1dCA9IGluYihDQVRfREFUQSk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJaWYgKGlucHV0ICE9IFZPWUFHRVJfQ0FUX0hFQURFUikgewotCQkJY29udGludWU7Ci0JCX0KLQkJQ0RFQlVHKCgiVk9ZQUdFUiBERUJVRzogZm91bmQgbW9kdWxlIGlkIDB4JXgsICVzXG4iLCBpLAotCQkJY2F0X21vZHVsZV9uYW1lKGkpKSk7Ci0JCSptb2RwcCA9IGttYWxsb2Moc2l6ZW9mKHZveWFnZXJfbW9kdWxlX3QpLCBHRlBfS0VSTkVMKTsJLyomdm95YWdlcl9tb2R1bGVfc3RvcmFnZVtjYXRfY291bnQrK107ICovCi0JCWlmICgqbW9kcHAgPT0gTlVMTCkgewotCQkJcHJpbnRrKCIqKldBUk5JTkcqKiBrbWFsbG9jIGZhaWx1cmUgaW4gY2F0X2luaXRcbiIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJbWVtc2V0KCptb2RwcCwgMCwgc2l6ZW9mKHZveWFnZXJfbW9kdWxlX3QpKTsKLQkJLyogbmVlZCB0ZW1wb3JhcnkgYXNpYyBmb3IgY2F0X3N1YnJlYWQuICBJdCB3aWxsIGJlCi0JCSAqIGZpbGxlZCBpbiBjb3JyZWN0bHkgbGF0ZXIgKi8KLQkJKCptb2RwcCktPmFzaWMgPSBrbWFsbG9jKHNpemVvZih2b3lhZ2VyX2FzaWNfdCksIEdGUF9LRVJORUwpOwkvKiZ2b3lhZ2VyX2FzaWNfc3RvcmFnZVthc2ljX2NvdW50XTsgKi8KLQkJaWYgKCgqbW9kcHApLT5hc2ljID09IE5VTEwpIHsKLQkJCXByaW50aygiKipXQVJOSU5HKioga21hbGxvYyBmYWlsdXJlIGluIGNhdF9pbml0XG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW1lbXNldCgoKm1vZHBwKS0+YXNpYywgMCwgc2l6ZW9mKHZveWFnZXJfYXNpY190KSk7Ci0JCSgqbW9kcHApLT5hc2ljLT5hc2ljX2lkID0gVk9ZQUdFUl9DQVRfSUQ7Ci0JCSgqbW9kcHApLT5hc2ljLT5zdWJhZGRyID0gVk9ZQUdFUl9TVUJBRERSX0hJOwotCQkoKm1vZHBwKS0+bW9kdWxlX2FkZHIgPSBpOwotCQkoKm1vZHBwKS0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCA9IDA7Ci0JCWlmIChpID09IFZPWUFHRVJfUFNJKSB7Ci0JCQkvKiBFeGNlcHRpb24gbGVnIGZvciBtb2R1bGVzIHdpdGggbm8gRUVQUk9NICovCi0JCQlwcmludGsoIk1vZHVsZSBcIiVzXCJcbiIsIGNhdF9tb2R1bGVfbmFtZShpKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCUNERUJVRygoImNhdF9pbml0OiBSZWFkaW5nIGVlcHJvbSBmb3IgbW9kdWxlIDB4JXggYXQgb2Zmc2V0ICVkXG4iLCBpLCBWT1lBR0VSX1hTVU1fRU5EX09GRlNFVCkpOwotCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCWNhdF9kaXNjb25uZWN0KCptb2RwcCwgKCptb2RwcCktPmFzaWMpOwotCQlpZiAoY2F0X3N1YnJlYWQoKm1vZHBwLCAoKm1vZHBwKS0+YXNpYywKLQkJCQlWT1lBR0VSX1hTVU1fRU5EX09GRlNFVCwgc2l6ZW9mKGVwcm9tX3NpemUpLAotCQkJCSZlcHJvbV9zaXplKSkgewotCQkJcHJpbnRrCi0JCQkgICAgKCIqKldBUk5JTkcqKjogVm95YWdlciBjb3VsZG4ndCByZWFkIEVQUk9NIHNpemUgZm9yIG1vZHVsZSAweCV4XG4iLAotCQkJICAgICBpKTsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChlcHJvbV9zaXplID4gc2l6ZW9mKGVwcm9tX2J1ZikpIHsKLQkJCXByaW50awotCQkJICAgICgiKipXQVJOSU5HKio6IFZveWFnZXIgaW5zdWZmaWNpZW50IHNpemUgdG8gcmVhZCBFUFJPTSBkYXRhLCBtb2R1bGUgMHgleC4gIE5lZWQgJWRcbiIsCi0JCQkgICAgIGksIGVwcm9tX3NpemUpOwotCQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCUNERUJVRygoImNhdF9pbml0OiBtb2R1bGUgMHgleCwgZWVwcm9tX3NpemUgJWRcbiIsIGksCi0JCQllcHJvbV9zaXplKSk7Ci0JCWlmIChjYXRfc3VicmVhZAotCQkgICAgKCptb2RwcCwgKCptb2RwcCktPmFzaWMsIDAsIGVwcm9tX3NpemUsIGVwcm9tX2J1ZikpIHsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJcHJpbnRrKCJNb2R1bGUgXCIlc1wiLCB2ZXJzaW9uIDB4JXgsIHRyYWNlciAweCV4LCBhc2ljcyAlZFxuIiwKLQkJICAgICAgIGNhdF9tb2R1bGVfbmFtZShpKSwgZXByb21faGRyLT52ZXJzaW9uX2lkLAotCQkgICAgICAgKigoX191MzIgKikgZXByb21faGRyLT50cmFjZXIpLCBlcHJvbV9oZHItPm51bV9hc2ljcyk7Ci0JCSgqbW9kcHApLT5lZV9zaXplID0gZXByb21faGRyLT5lZV9zaXplOwotCQkoKm1vZHBwKS0+bnVtX2FzaWNzID0gZXByb21faGRyLT5udW1fYXNpY3M7Ci0JCWFzaWNwcCA9ICYoKCptb2RwcCktPmFzaWMpOwotCQlzcF9vZmZzZXQgPSBlcHJvbV9oZHItPnNjYW5fcGF0aF9vZmZzZXQ7Ci0JCS8qIEFsbCB3ZSByZWFsbHkgY2FyZSBhYm91dCBhcmUgdGhlIFF1YWQgY2FyZHMuICBXZQotCQkgKiBpZGVudGlmeSB0aGVtIGJlY2F1c2UgdGhleSBhcmUgaW4gYSBwcm9jZXNzb3Igc2xvdAotCQkgKiBhbmQgaGF2ZSBvbmx5IGZvdXIgYXNpY3MgKi8KLQkJaWYgKChpIDwgMHgxMCB8fCAoaSA+PSAweDE0ICYmIGkgPCAweDFjKSB8fCBpID4gMHgxZikpIHsKLQkJCW1vZHBwID0gJigoKm1vZHBwKS0+bmV4dCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBOb3cgd2Uga25vdyBpdCdzIGluIGEgcHJvY2Vzc29yIHNsb3QsIGRvZXMgaXQgaGF2ZQotCQkgKiBhIHF1YWQgYmFzZWJvYXJkIHN1Ym1vZHVsZSAqLwotCQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JCWNhdF9yZWFkKCptb2RwcCwgKCptb2RwcCktPmFzaWMsIFZPWUFHRVJfU1VCTU9EUFJFU0VOVCwKLQkJCSAmbnVtX3N1Ym1vZHVsZXMpOwotCQkvKiBsb3dlc3QgdHdvIGJpdHMsIGFjdGl2ZSBsb3cgKi8KLQkJbnVtX3N1Ym1vZHVsZXMgPSB+KDB4ZmMgfCBudW1fc3VibW9kdWxlcyk7Ci0JCUNERUJVRygoIlZPWUFHRVIgQ0FUOiAlZCBzdWJtb2R1bGVzIHByZXNlbnRcbiIsCi0JCQludW1fc3VibW9kdWxlcykpOwotCQlpZiAobnVtX3N1Ym1vZHVsZXMgPT0gMCkgewotCQkJLyogZmlsbCBpbiB0aGUgZHlhZGljIGV4dGVuZGVkIHByb2Nlc3NvcnMgKi8KLQkJCV9fdTggY3B1ID0gaSAmIDB4MDc7Ci0KLQkJCXByaW50aygiTW9kdWxlIFwiJXNcIjogRHlhZGljIFByb2Nlc3NvciBDYXJkXG4iLAotCQkJICAgICAgIGNhdF9tb2R1bGVfbmFtZShpKSk7Ci0JCQl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzIHw9ICgxIDw8IGNwdSk7Ci0JCQljcHUgKz0gNDsKLQkJCXZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgfD0gKDEgPDwgY3B1KTsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogbm93IHdlIHdhbnQgdG8gcmVhZCB0aGUgYXNpY3Mgb24gdGhlIGZpcnN0IHN1Ym1vZHVsZSwKLQkJICogd2hpY2ggc2hvdWxkIGJlIHRoZSBxdWFkIGJhc2UgYm9hcmQgKi8KLQotCQljYXRfcmVhZCgqbW9kcHAsICgqbW9kcHApLT5hc2ljLCBWT1lBR0VSX1NVQk1PRFNFTEVDVCwgJnZhbCk7Ci0JCUNERUJVRygoImNhdF9pbml0OiBTVUJNT0RTRUxFQ1QgdmFsdWUgPSAweCV4XG4iLCB2YWwpKTsKLQkJdmFsID0gKHZhbCAmIDB4N2MpIHwgVk9ZQUdFUl9RVUFEX0JBU0VCT0FSRDsKLQkJY2F0X3dyaXRlKCptb2RwcCwgKCptb2RwcCktPmFzaWMsIFZPWUFHRVJfU1VCTU9EU0VMRUNULCB2YWwpOwotCi0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQotCQlDREVCVUcoKCJjYXRfaW5pdDogUmVhZGluZyBlZXByb20gZm9yIG1vZHVsZSAweCV4IGF0IG9mZnNldCAlZFxuIiwgaSwgVk9ZQUdFUl9YU1VNX0VORF9PRkZTRVQpKTsKLQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQljYXRfZGlzY29ubmVjdCgqbW9kcHAsICgqbW9kcHApLT5hc2ljKTsKLQkJaWYgKGNhdF9zdWJyZWFkKCptb2RwcCwgKCptb2RwcCktPmFzaWMsCi0JCQkJVk9ZQUdFUl9YU1VNX0VORF9PRkZTRVQsIHNpemVvZihlcHJvbV9zaXplKSwKLQkJCQkmZXByb21fc2l6ZSkpIHsKLQkJCXByaW50awotCQkJICAgICgiKipXQVJOSU5HKio6IFZveWFnZXIgY291bGRuJ3QgcmVhZCBFUFJPTSBzaXplIGZvciBtb2R1bGUgMHgleFxuIiwKLQkJCSAgICAgaSk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoZXByb21fc2l6ZSA+IHNpemVvZihlcHJvbV9idWYpKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIioqV0FSTklORyoqOiBWb3lhZ2VyIGluc3VmZmljaWVudCBzaXplIHRvIHJlYWQgRVBST00gZGF0YSwgbW9kdWxlIDB4JXguICBOZWVkICVkXG4iLAotCQkJICAgICBpLCBlcHJvbV9zaXplKTsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQlDREVCVUcoKCJjYXRfaW5pdDogbW9kdWxlIDB4JXgsIGVlcHJvbV9zaXplICVkXG4iLCBpLAotCQkJZXByb21fc2l6ZSkpOwotCQlpZiAoY2F0X3N1YnJlYWQKLQkJICAgICgqbW9kcHAsICgqbW9kcHApLT5hc2ljLCAwLCBlcHJvbV9zaXplLCBlcHJvbV9idWYpKSB7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCS8qIE5vdyBkbyBldmVyeXRoaW5nIGZvciB0aGUgUUJCIHN1Ym1vZHVsZSAxICovCi0JCSgqbW9kcHApLT5lZV9zaXplID0gZXByb21faGRyLT5lZV9zaXplOwotCQkoKm1vZHBwKS0+bnVtX2FzaWNzID0gZXByb21faGRyLT5udW1fYXNpY3M7Ci0JCWFzaWNwcCA9ICYoKCptb2RwcCktPmFzaWMpOwotCQlzcF9vZmZzZXQgPSBlcHJvbV9oZHItPnNjYW5fcGF0aF9vZmZzZXQ7Ci0JCS8qIGdldCByaWQgb2YgdGhlIGR1bW15IENBVCBhc2ljIGFuZCByZWFkIHRoZSByZWFsIG9uZSAqLwotCQlrZnJlZSgoKm1vZHBwKS0+YXNpYyk7Ci0JCWZvciAoYXNpYyA9IDA7IGFzaWMgPCAoKm1vZHBwKS0+bnVtX2FzaWNzOyBhc2ljKyspIHsKLQkJCWludCBqOwotCQkJdm95YWdlcl9hc2ljX3QgKmFzaWNwID0gKmFzaWNwcCA9IGt6YWxsb2Moc2l6ZW9mKHZveWFnZXJfYXNpY190KSwgR0ZQX0tFUk5FTCk7CS8qJnZveWFnZXJfYXNpY19zdG9yYWdlW2FzaWNfY291bnQrK107ICovCi0JCQl2b3lhZ2VyX3NwX3RhYmxlX3QgKnNwX3RhYmxlOwotCQkJdm95YWdlcl9hdF90ICphc2ljX3RhYmxlOwotCQkJdm95YWdlcl9qdHRfdCAqanRhZ190YWJsZTsKLQotCQkJaWYgKGFzaWNwID09IE5VTEwpIHsKLQkJCQlwcmludGsKLQkJCQkgICAgKCIqKldBUk5JTkcqKiBrbWFsbG9jIGZhaWx1cmUgaW4gY2F0X2luaXRcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYXNpY3BwID0gJihhc2ljcC0+bmV4dCk7Ci0JCQlhc2ljcC0+YXNpY19sb2NhdGlvbiA9IGFzaWM7Ci0JCQlzcF90YWJsZSA9Ci0JCQkgICAgKHZveWFnZXJfc3BfdGFibGVfdCAqKSAoZXByb21fYnVmICsgc3Bfb2Zmc2V0KTsKLQkJCWFzaWNwLT5hc2ljX2lkID0gc3BfdGFibGUtPmFzaWNfaWQ7Ci0JCQlhc2ljX3RhYmxlID0KLQkJCSAgICAodm95YWdlcl9hdF90ICopIChlcHJvbV9idWYgKwotCQkJCQkgICAgICBzcF90YWJsZS0+YXNpY19kYXRhX29mZnNldCk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCWFzaWNwLT5qdGFnX2lkW2pdID0gYXNpY190YWJsZS0+anRhZ19pZFtqXTsKLQkJCWp0YWdfdGFibGUgPQotCQkJICAgICh2b3lhZ2VyX2p0dF90ICopIChlcHJvbV9idWYgKwotCQkJCQkgICAgICAgYXNpY190YWJsZS0+anRhZ19vZmZzZXQpOwotCQkJYXNpY3AtPmlyZWdfbGVuZ3RoID0ganRhZ190YWJsZS0+aXJlZ19sZW47Ci0JCQlhc2ljcC0+Yml0X2xvY2F0aW9uID0gKCptb2RwcCktPmluc3RfYml0czsKLQkJCSgqbW9kcHApLT5pbnN0X2JpdHMgKz0gYXNpY3AtPmlyZWdfbGVuZ3RoOwotCQkJaWYgKGFzaWNwLT5pcmVnX2xlbmd0aCA+ICgqbW9kcHApLT5sYXJnZXN0X3JlZykKLQkJCQkoKm1vZHBwKS0+bGFyZ2VzdF9yZWcgPSBhc2ljcC0+aXJlZ19sZW5ndGg7Ci0JCQlpZiAoYXNpY3AtPmlyZWdfbGVuZ3RoIDwgKCptb2RwcCktPnNtYWxsZXN0X3JlZyB8fAotCQkJICAgICgqbW9kcHApLT5zbWFsbGVzdF9yZWcgPT0gMCkKLQkJCQkoKm1vZHBwKS0+c21hbGxlc3RfcmVnID0gYXNpY3AtPmlyZWdfbGVuZ3RoOwotCQkJQ0RFQlVHKCgiYXNpYyAweCV4LCBpcmVnX2xlbmd0aD0lZCwgYml0X2xvY2F0aW9uPSVkXG4iLAotCQkJCWFzaWNwLT5hc2ljX2lkLCBhc2ljcC0+aXJlZ19sZW5ndGgsCi0JCQkJYXNpY3AtPmJpdF9sb2NhdGlvbikpOwotCQkJaWYgKGFzaWNwLT5hc2ljX2lkID09IFZPWUFHRVJfUVVBRF9RQUJDKSB7Ci0JCQkJQ0RFQlVHKCgiVk9ZQUdFUiBDQVQ6IFFBQkMgQVNJQyBmb3VuZFxuIikpOwotCQkJCXFhYmNfYXNpYyA9IGFzaWNwOwotCQkJfQotCQkJc3Bfb2Zmc2V0ICs9IHNpemVvZih2b3lhZ2VyX3NwX3RhYmxlX3QpOwotCQl9Ci0JCUNERUJVRygoIk1vZHVsZSBpbnN0X2JpdHMgPSAlZCwgbGFyZ2VzdF9yZWcgPSAlZCwgc21hbGxlc3RfcmVnPSVkXG4iLCAoKm1vZHBwKS0+aW5zdF9iaXRzLCAoKm1vZHBwKS0+bGFyZ2VzdF9yZWcsICgqbW9kcHApLT5zbWFsbGVzdF9yZWcpKTsKLQkJLyogT0ssIG5vdyB3ZSBoYXZlIHRoZSBRVUFEIEFTSUNzIHNldCB1cCwgdXNlIHRoZW0uCi0JCSAqIHdlIG5lZWQgdG86Ci0JCSAqCi0JCSAqIDEuIEZpbmQgdGhlIE1lbW9yeSBhcmVhIGZvciB0aGUgUXVhZCBDUElzLgotCQkgKiAyLiBGaW5kIHRoZSBFeHRlbmRlZCBWSUMgcHJvY2Vzc29yCi0JCSAqIDMuIENvbmZpZ3VyZSBhIHNlY29uZCBleHRlbmRlZCBWSUMgcHJvY2Vzc29yIChUaGlzCi0JCSAqICAgIGNhbm5vdCBiZSBkb25lIGZvciB0aGUgNTF4eC4KLQkJICogKi8KLQkJb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCQljYXRfY29ubmVjdCgqbW9kcHAsICgqbW9kcHApLT5hc2ljKTsKLQkJQ0RFQlVHKCgiQ0FUIENPTk5FQ1RFRCEhXG4iKSk7Ci0JCWNhdF9zdWJyZWFkKCptb2RwcCwgcWFiY19hc2ljLCAwLCBzaXplb2YocWFiY19kYXRhKSwgcWFiY19kYXRhKTsKLQkJcWljX2FkZHIgPSBxYWJjX2RhdGFbNV0gPDwgODsKLQkJcWljX2FkZHIgPSAocWljX2FkZHIgfCBxYWJjX2RhdGFbNl0pIDw8IDg7Ci0JCXFpY19hZGRyID0gKHFpY19hZGRyIHwgcWFiY19kYXRhWzddKSA8PCA4OwotCQlwcmludGsKLQkJICAgICgiTW9kdWxlIFwiJXNcIjogUXVhZCBQcm9jZXNzb3IgQ2FyZDsgQ1BJIDB4JWx4LCBTRVQ9MHgleFxuIiwKLQkJICAgICBjYXRfbW9kdWxlX25hbWUoaSksIHFpY19hZGRyLCBxYWJjX2RhdGFbOF0pOwotI2lmIDAJCQkJLyogcGx1bWJpbmcgZmFpbHMtLS1GSVhNRSAqLwotCQlpZiAoKHFhYmNfZGF0YVs4XSAmIDB4ZjApID09IDApIHsKLQkJCS8qIEZJWE1FOiAzMiB3YXkgOCBDUFUgc2xvdCBtb25zdGVyIGNhbm5vdCBiZQotCQkJICogcGx1bWJlZCB0aGlzIHdheS0tLW5lZWQgdG8gY2hlY2sgZm9yIGl0ICovCi0KLQkJCXByaW50aygiUGx1bWJpbmcgc2Vjb25kIEV4dGVuZGVkIFF1YWQgUHJvY2Vzc29yXG4iKTsKLQkJCS8qIHNlY29uZCBWSUMgbGluZSBoYXJkd2lyZWQgdG8gUXVhZCBDUFUgMSAqLwotCQkJcWFiY19kYXRhWzhdIHw9IDB4MjA7Ci0JCQljYXRfc3Vid3JpdGUoKm1vZHBwLCBxYWJjX2FzaWMsIDgsIDEsICZxYWJjX2RhdGFbOF0pOwotI2lmZGVmIFZPWUFHRVJfQ0FUX0RFQlVHCi0JCQkvKiB2ZXJpZnkgcGx1bWJpbmcgKi8KLQkJCWNhdF9zdWJyZWFkKCptb2RwcCwgcWFiY19hc2ljLCA4LCAxLCAmcWFiY19kYXRhWzhdKTsKLQkJCWlmICgocWFiY19kYXRhWzhdICYgMHhmMCkgPT0gMCkgewotCQkJCUNERUJVRygoIlBMVU1CSU5HIEZBSUxFRDogMHgleFxuIiwKLQkJCQkJcWFiY19kYXRhWzhdKSk7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotI2VuZGlmCi0KLQkJewotCQkJc3RydWN0IHJlc291cmNlICpyZXMgPQotCQkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJcmVzLT5uYW1lID0ga21hbGxvYygxMjgsIEdGUF9LRVJORUwpOwotCQkJc3ByaW50ZigoY2hhciAqKXJlcy0+bmFtZSwgIlZveWFnZXIgJXMgUXVhZCBDUEkiLAotCQkJCWNhdF9tb2R1bGVfbmFtZShpKSk7Ci0JCQlyZXMtPnN0YXJ0ID0gcWljX2FkZHI7Ci0JCQlyZXMtPmVuZCA9IHFpY19hZGRyICsgMHgzZmY7Ci0JCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKLQkJfQotCi0JCXFpY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9jYWNoZShxaWNfYWRkciwgMHg0MDApOwotCi0JCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCV9fdTggY3B1OwotCi0JCQlpZiAodm95YWdlcl84c2xvdCkgewotCQkJCS8qIDggc2xvdCBoYXMgYSBkaWZmZXJlbnQgbWFwcGluZywKLQkJCQkgKiBlYWNoIHNsb3QgaGFzIG9ubHkgb25lIHZpYyBsaW5lLCBzbwotCQkJCSAqIDEgY3B1IGluIGVhY2ggc2xvdCBtdXN0IGJlIDwgOCAqLwotCQkJCWNwdSA9IChpICYgMHgwNykgKyBqICogODsKLQkJCX0gZWxzZSB7Ci0JCQkJY3B1ID0gKGkgJiAweDAzKSArIGogKiA0OwotCQkJfQotCQkJaWYgKChxYWJjX2RhdGFbOF0gJiAoMSA8PCBqKSkpIHsKLQkJCQl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzIHw9ICgxIDw8IGNwdSk7Ci0JCQl9Ci0JCQlpZiAocWFiY19kYXRhWzhdICYgKDEgPDwgKGogKyA0KSkpIHsKLQkJCQkvKiBTZWNvbmQgU0VUIHJlZ2lzdGVyIHBsdW1iZWQ6IFF1YWQKLQkJCQkgKiBjYXJkIGhhcyB0d28gVklDIGNvbm5lY3RlZCBDUFVzLgotCQkJCSAqIFNlY29uZGFyeSBjYW5ub3QgYmUgYm9vdGVkIGFzIGEgVklDCi0JCQkJICogQ1BVICovCi0JCQkJdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyB8PSAoMSA8PCBjcHUpOwotCQkJCXZveWFnZXJfYWxsb3dlZF9ib290X3Byb2Nlc3NvcnMgJj0KLQkJCQkgICAgKH4oMSA8PCBjcHUpKTsKLQkJCX0KLQotCQkJdm95YWdlcl9xdWFkX3Byb2Nlc3NvcnMgfD0gKDEgPDwgY3B1KTsKLQkJCXZveWFnZXJfcXVhZF9jcGlfYWRkcltjcHVdID0gKHN0cnVjdCB2b3lhZ2VyX3FpY19jcGkgKikKLQkJCSAgICAocWljX2FkZHIgKyAoaiA8PCA4KSk7Ci0JCQlDREVCVUcoKCJDUFUlZDogQ1BJIGFkZHJlc3MgMHglbHhcbiIsIGNwdSwKLQkJCQkodW5zaWduZWQgbG9uZyl2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbY3B1XSkpOwotCQl9Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQotCQkqYXNpY3BwID0gTlVMTDsKLQkJbW9kcHAgPSAmKCgqbW9kcHApLT5uZXh0KTsKLQl9Ci0JKm1vZHBwID0gTlVMTDsKLQlwcmludGsKLQkgICAgKCJDQVQgQnVzIEluaXRpYWxpc2F0aW9uIGZpbmlzaGVkOiBleHRlbmRlZCBwcm9jcyAweCV4LCBxdWFkIHByb2NzIDB4JXgsIGFsbG93ZWQgdmljIGJvb3QgPSAweCV4XG4iLAotCSAgICAgdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycywgdm95YWdlcl9xdWFkX3Byb2Nlc3NvcnMsCi0JICAgICB2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzKTsKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZ2aWNfcmVzKTsKLQlpZiAodm95YWdlcl9xdWFkX3Byb2Nlc3NvcnMpCi0JCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnFpY19yZXMpOwotCS8qIHNldCB1cCB0aGUgZnJvbnQgcG93ZXIgc3dpdGNoICovCi19Ci0KLWludCB2b3lhZ2VyX2NhdF9yZWFkYihfX3U4IG1vZHVsZSwgX191OCBhc2ljLCBpbnQgcmVnKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNhdF9kaXNjb25uZWN0KHZveWFnZXJfbW9kdWxlX3QgKiBtb2RwLCB2b3lhZ2VyX2FzaWNfdCAqIGFzaWNwKQotewotCV9fdTggdmFsOwotCWludCBlcnIgPSAwOwotCi0JaWYgKCFtb2RwLT5zY2FuX3BhdGhfY29ubmVjdGVkKQotCQlyZXR1cm4gMDsKLQlpZiAoYXNpY3AtPmFzaWNfaWQgIT0gVk9ZQUdFUl9DQVRfSUQpIHsKLQkJQ0RFQlVHKCgiY2F0X2Rpc2Nvbm5lY3Q6IEFTSUMgaXMgbm90IENBVFxuIikpOwotCQlyZXR1cm4gMTsKLQl9Ci0JZXJyID0gY2F0X3JlYWQobW9kcCwgYXNpY3AsIFZPWUFHRVJfU0NBTlBBVEgsICZ2YWwpOwotCWlmIChlcnIpIHsKLQkJQ0RFQlVHKCgiY2F0X2Rpc2Nvbm5lY3Q6IGZhaWxlZCB0byByZWFkIFNDQU5QQVRIXG4iKSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXZhbCAmPSBWT1lBR0VSX0RJU0NPTk5FQ1RfQVNJQzsKLQllcnIgPSBjYXRfd3JpdGUobW9kcCwgYXNpY3AsIFZPWUFHRVJfU0NBTlBBVEgsIHZhbCk7Ci0JaWYgKGVycikgewotCQlDREVCVUcoKCJjYXRfZGlzY29ubmVjdDogZmFpbGVkIHRvIHdyaXRlIFNDQU5QQVRIXG4iKSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JbW9kcC0+c2Nhbl9wYXRoX2Nvbm5lY3RlZCA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYXRfY29ubmVjdCh2b3lhZ2VyX21vZHVsZV90ICogbW9kcCwgdm95YWdlcl9hc2ljX3QgKiBhc2ljcCkKLXsKLQlfX3U4IHZhbDsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChtb2RwLT5zY2FuX3BhdGhfY29ubmVjdGVkKQotCQlyZXR1cm4gMDsKLQlpZiAoYXNpY3AtPmFzaWNfaWQgIT0gVk9ZQUdFUl9DQVRfSUQpIHsKLQkJQ0RFQlVHKCgiY2F0X2Nvbm5lY3Q6IEFTSUMgaXMgbm90IENBVFxuIikpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQllcnIgPSBjYXRfcmVhZChtb2RwLCBhc2ljcCwgVk9ZQUdFUl9TQ0FOUEFUSCwgJnZhbCk7Ci0JaWYgKGVycikgewotCQlDREVCVUcoKCJjYXRfY29ubmVjdDogZmFpbGVkIHRvIHJlYWQgU0NBTlBBVEhcbiIpKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JdmFsIHw9IFZPWUFHRVJfQ09OTkVDVF9BU0lDOwotCWVyciA9IGNhdF93cml0ZShtb2RwLCBhc2ljcCwgVk9ZQUdFUl9TQ0FOUEFUSCwgdmFsKTsKLQlpZiAoZXJyKSB7Ci0JCUNERUJVRygoImNhdF9jb25uZWN0OiBmYWlsZWQgdG8gd3JpdGUgU0NBTlBBVEhcbiIpKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQltb2RwLT5zY2FuX3BhdGhfY29ubmVjdGVkID0gMTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHZveWFnZXJfY2F0X3Bvd2VyX29mZih2b2lkKQotewotCS8qIFBvd2VyIHRoZSBtYWNoaW5lIG9mZiBieSB3cml0aW5nIHRvIHRoZSBQU0kgb3ZlciB0aGUgQ0FUCi0JICogYnVzICovCi0JX191OCBkYXRhOwotCXZveWFnZXJfbW9kdWxlX3QgcHNpID0geyAwIH07Ci0Jdm95YWdlcl9hc2ljX3QgcHNpX2FzaWMgPSB7IDAgfTsKLQotCXBzaS5hc2ljID0gJnBzaV9hc2ljOwotCXBzaS5hc2ljLT5hc2ljX2lkID0gVk9ZQUdFUl9DQVRfSUQ7Ci0JcHNpLmFzaWMtPnN1YmFkZHIgPSBWT1lBR0VSX1NVQkFERFJfSEk7Ci0JcHNpLm1vZHVsZV9hZGRyID0gVk9ZQUdFUl9QU0k7Ci0JcHNpLnNjYW5fcGF0aF9jb25uZWN0ZWQgPSAwOwotCi0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCS8qIENvbm5lY3QgdGhlIFBTSSB0byB0aGUgQ0FUIEJ1cyAqLwotCW91dGIoVk9ZQUdFUl9DQVRfREVTRUxFQ1QsIFZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUKTsKLQlvdXRiKFZPWUFHRVJfUFNJLCBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCk7Ci0Jb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCWNhdF9kaXNjb25uZWN0KCZwc2ksICZwc2lfYXNpYyk7Ci0JLyogUmVhZCB0aGUgc3RhdHVzICovCi0JY2F0X3N1YnJlYWQoJnBzaSwgJnBzaV9hc2ljLCBWT1lBR0VSX1BTSV9HRU5FUkFMX1JFRywgMSwgJmRhdGEpOwotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQlDREVCVUcoKCJQU0kgU1RBVFVTIDB4JXhcbiIsIGRhdGEpKTsKLQkvKiBUaGVzZSB0d28gd3JpdGVzIGFyZSBwb3dlciBvZmYgcHJlcCBhbmQgcGVyZm9ybSAqLwotCWRhdGEgPSBQU0lfQ0xFQVI7Ci0Jb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCWNhdF9zdWJ3cml0ZSgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX0dFTkVSQUxfUkVHLCAxLCAmZGF0YSk7Ci0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCWRhdGEgPSBQU0lfUE9XRVJfRE9XTjsKLQlvdXRiKFZPWUFHRVJfQ0FUX1JVTiwgQ0FUX0NNRCk7Ci0JY2F0X3N1YndyaXRlKCZwc2ksICZwc2lfYXNpYywgVk9ZQUdFUl9QU0lfR0VORVJBTF9SRUcsIDEsICZkYXRhKTsKLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci19Ci0KLXN0cnVjdCB2b3lhZ2VyX3N0YXR1cyB2b3lhZ2VyX3N0YXR1cyA9IHsgMCB9OwotCi12b2lkIHZveWFnZXJfY2F0X3BzaShfX3U4IGNtZCwgX191MTYgcmVnLCBfX3U4ICogZGF0YSkKLXsKLQl2b3lhZ2VyX21vZHVsZV90IHBzaSA9IHsgMCB9OwotCXZveWFnZXJfYXNpY190IHBzaV9hc2ljID0geyAwIH07Ci0KLQlwc2kuYXNpYyA9ICZwc2lfYXNpYzsKLQlwc2kuYXNpYy0+YXNpY19pZCA9IFZPWUFHRVJfQ0FUX0lEOwotCXBzaS5hc2ljLT5zdWJhZGRyID0gVk9ZQUdFUl9TVUJBRERSX0hJOwotCXBzaS5tb2R1bGVfYWRkciA9IFZPWUFHRVJfUFNJOwotCXBzaS5zY2FuX3BhdGhfY29ubmVjdGVkID0gMDsKLQotCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQkvKiBDb25uZWN0IHRoZSBQU0kgdG8gdGhlIENBVCBCdXMgKi8KLQlvdXRiKFZPWUFHRVJfQ0FUX0RFU0VMRUNULCBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCk7Ci0Jb3V0YihWT1lBR0VSX1BTSSwgVk9ZQUdFUl9DQVRfQ09ORklHX1BPUlQpOwotCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQljYXRfZGlzY29ubmVjdCgmcHNpLCAmcHNpX2FzaWMpOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWT1lBR0VSX1BTSV9SRUFEOgotCQljYXRfcmVhZCgmcHNpLCAmcHNpX2FzaWMsIHJlZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgVk9ZQUdFUl9QU0lfV1JJVEU6Ci0JCWNhdF93cml0ZSgmcHNpLCAmcHNpX2FzaWMsIHJlZywgKmRhdGEpOwotCQlicmVhazsKLQljYXNlIFZPWUFHRVJfUFNJX1NVQlJFQUQ6Ci0JCWNhdF9zdWJyZWFkKCZwc2ksICZwc2lfYXNpYywgcmVnLCAxLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBWT1lBR0VSX1BTSV9TVUJXUklURToKLQkJY2F0X3N1YndyaXRlKCZwc2ksICZwc2lfYXNpYywgcmVnLCAxLCBkYXRhKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWb3lhZ2VyIFBTSSwgdW5yZWNvZ25pc2VkIGNvbW1hbmQgJWRcbiIsIGNtZCk7Ci0JCWJyZWFrOwotCX0KLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci19Ci0KLXZvaWQgdm95YWdlcl9jYXRfZG9fY29tbW9uX2ludGVycnVwdCh2b2lkKQotewotCS8qIFRoaXMgaXMgY2F1c2VkIGVpdGhlciBieSBhIG1lbW9yeSBwYXJpdHkgZXJyb3Igb3Igc29tZXRoaW5nCi0JICogaW4gdGhlIFBTSSAqLwotCV9fdTggZGF0YTsKLQl2b3lhZ2VyX21vZHVsZV90IHBzaSA9IHsgMCB9OwotCXZveWFnZXJfYXNpY190IHBzaV9hc2ljID0geyAwIH07Ci0Jc3RydWN0IHZveWFnZXJfcHNpIHBzaV9yZWc7Ci0JaW50IGk7Ci0gICAgICByZV9yZWFkOgotCXBzaS5hc2ljID0gJnBzaV9hc2ljOwotCXBzaS5hc2ljLT5hc2ljX2lkID0gVk9ZQUdFUl9DQVRfSUQ7Ci0JcHNpLmFzaWMtPnN1YmFkZHIgPSBWT1lBR0VSX1NVQkFERFJfSEk7Ci0JcHNpLm1vZHVsZV9hZGRyID0gVk9ZQUdFUl9QU0k7Ci0JcHNpLnNjYW5fcGF0aF9jb25uZWN0ZWQgPSAwOwotCi0Jb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCS8qIENvbm5lY3QgdGhlIFBTSSB0byB0aGUgQ0FUIEJ1cyAqLwotCW91dGIoVk9ZQUdFUl9DQVRfREVTRUxFQ1QsIFZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUKTsKLQlvdXRiKFZPWUFHRVJfUFNJLCBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCk7Ci0Jb3V0YihWT1lBR0VSX0NBVF9SVU4sIENBVF9DTUQpOwotCWNhdF9kaXNjb25uZWN0KCZwc2ksICZwc2lfYXNpYyk7Ci0JLyogUmVhZCB0aGUgc3RhdHVzLiAgTk9URTogTmVlZCB0byByZWFkICphbGwqIHRoZSBQU0kgcmVncyBoZXJlCi0JICogb3RoZXJ3aXNlIHRoZSBjbW4gaW50IHdpbGwgYmUgcmVhc3NlcnRlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHNpX3JlZy5yZWdzKTsgaSsrKSB7Ci0JCWNhdF9yZWFkKCZwc2ksICZwc2lfYXNpYywgaSwgJigoX191OCAqKSAmIHBzaV9yZWcucmVncylbaV0pOwotCX0KLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JaWYgKChwc2lfcmVnLnJlZ3MuY2hlY2tiaXQgJiAweDAyKSA9PSAwKSB7Ci0JCXBzaV9yZWcucmVncy5jaGVja2JpdCB8PSAweDAyOwotCQljYXRfd3JpdGUoJnBzaSwgJnBzaV9hc2ljLCA1LCBwc2lfcmVnLnJlZ3MuY2hlY2tiaXQpOwotCQlwcmludGsoIlZPWUFHRVIgUkUtUkVBRCBQU0lcbiIpOwotCQlnb3RvIHJlX3JlYWQ7Ci0JfQotCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBzaV9yZWcuc3VicmVncyk7IGkrKykgewotCQkvKiBUaGlzIGxvb2tzIHN0cmFuZ2UsIGJ1dCB0aGUgUFNJIGRvZXNuJ3QgZG8gYXV0byBpbmNyZW1lbnQKLQkJICogY29ycmVjdGx5ICovCi0JCWNhdF9zdWJyZWFkKCZwc2ksICZwc2lfYXNpYywgVk9ZQUdFUl9QU0lfU1VQUExZX1JFRyArIGksCi0JCQkgICAgMSwgJigoX191OCAqKSAmIHBzaV9yZWcuc3VicmVncylbaV0pOwotCX0KLQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0jaWZkZWYgVk9ZQUdFUl9DQVRfREVCVUcKLQlwcmludGsoIlZPWUFHRVIgUFNJOiAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBzaV9yZWcucmVncyk7IGkrKykKLQkJcHJpbnRrKCIlMDJ4ICIsICgoX191OCAqKSAmIHBzaV9yZWcucmVncylbaV0pOwotCXByaW50aygiXG4gICAgICAgICAgICIpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHNpX3JlZy5zdWJyZWdzKTsgaSsrKQotCQlwcmludGsoIiUwMnggIiwgKChfX3U4ICopICYgcHNpX3JlZy5zdWJyZWdzKVtpXSk7Ci0JcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0JaWYgKHBzaV9yZWcucmVncy5pbnRzdGF0dXMgJiBQU0lfTU9OKSB7Ci0JCS8qIHN3aXRjaCBvZmYgb3IgcG93ZXIgZmFpbCAqLwotCi0JCWlmIChwc2lfcmVnLnN1YnJlZ3Muc3VwcGx5ICYgUFNJX1NXSVRDSF9PRkYpIHsKLQkJCWlmICh2b3lhZ2VyX3N0YXR1cy5zd2l0Y2hfb2ZmKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJWb3lhZ2VyIGZyb250IHBhbmVsIHN3aXRjaCB0dXJuZWQgb2ZmIGFnYWluLS0tSW1tZWRpYXRlIHBvd2VyIG9mZiFcbiIpOwotCQkJCXZveWFnZXJfY2F0X3Bvd2VyX29mZigpOwotCQkJCS8qIG5vdCByZWFjaGVkICovCi0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiVm95YWdlciBmcm9udCBwYW5lbCBzd2l0Y2ggdHVybmVkIG9mZlxuIik7Ci0JCQkJdm95YWdlcl9zdGF0dXMuc3dpdGNoX29mZiA9IDE7Ci0JCQkJdm95YWdlcl9zdGF0dXMucmVxdWVzdF9mcm9tX2tlcm5lbCA9IDE7Ci0JCQkJd2FrZV91cF9wcm9jZXNzKHZveWFnZXJfdGhyZWFkKTsKLQkJCX0KLQkJCS8qIFRlbGwgdGhlIGhhcmR3YXJlIHdlJ3JlIHRha2luZyBjYXJlIG9mIHRoZQotCQkJICogc2h1dGRvd24sIG90aGVyd2lzZSBpdCB3aWxsIHBvd2VyIHRoZSBib3ggb2ZmCi0JCQkgKiB3aXRoaW4gMyBzZWNvbmRzIG9mIHRoZSBzd2l0Y2ggYmVpbmcgcHJlc3NlZCBhbmQsCi0JCQkgKiB3aGljaCBpcyBtdWNoIG1vcmUgaW1wb3J0YW50IHRvIHVzLCBjb250aW51ZSB0byAKLQkJCSAqIGFzc2VydCB0aGUgY29tbW9uIGludGVycnVwdCAqLwotCQkJZGF0YSA9IFBTSV9DTFJfU1dJVENIX09GRjsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJCWNhdF9zdWJ3cml0ZSgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX1NVUFBMWV9SRUcsCi0JCQkJICAgICAxLCAmZGF0YSk7Ci0JCQlvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCX0gZWxzZSB7Ci0KLQkJCVZERUJVRygoIlZveWFnZXIgYWMgZmFpbCByZWcgMHgleFxuIiwKLQkJCQlwc2lfcmVnLnN1YnJlZ3MuQUNmYWlsKSk7Ci0JCQlpZiAoKHBzaV9yZWcuc3VicmVncy5BQ2ZhaWwgJiBBQ19GQUlMX1NUQVRfQ0hBTkdFKSA9PSAwKSB7Ci0JCQkJLyogTm8gZnVydGhlciB1cGRhdGUgKi8KLQkJCQlyZXR1cm47Ci0JCQl9Ci0jaWYgMAotCQkJLyogRG9uJ3QgYm90aGVyIHRyeWluZyB0byBmaW5kIG91dCB3aG8gZmFpbGVkLgotCQkJICogRklYTUU6IFRoaXMgcHJvYmFibHkgbWFrZXMgdGhlIGNvZGUgaW5jb3JyZWN0IG9uCi0JCQkgKiBhbnl0aGluZyBvdGhlciB0aGFuIGEgMzQ1eCAqLwotCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQkJCWlmIChwc2lfcmVnLnN1YnJlZ3MuQUNmYWlsICYgKDEgPDwgaSkpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBQyBGQUlMIElOIFNVUFBMWSAlZFxuIiwgaSk7Ci0jZW5kaWYKLQkJCS8qIERPTidUIGRvIHRoaXM6IGl0IHNodXRzIGRvd24gdGhlIEFDIFBTSSAKLQkJCSAgIG91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJCSAgIGRhdGEgPSBQU0lfTUFTS19NQVNLIHwgaTsKLQkJCSAgIGNhdF9zdWJ3cml0ZSgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX01BU0ssCi0JCQkgICAxLCAmZGF0YSk7Ci0JCQkgICBvdXRiKFZPWUFHRVJfQ0FUX0VORCwgQ0FUX0NNRCk7Ci0JCQkgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiVm95YWdlciBBQyBwb3dlciBmYWlsdXJlXG4iKTsKLQkJCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJCWRhdGEgPSBQU0lfQ09MRF9TVEFSVDsKLQkJCWNhdF9zdWJ3cml0ZSgmcHNpLCAmcHNpX2FzaWMsIFZPWUFHRVJfUFNJX0dFTkVSQUxfUkVHLAotCQkJCSAgICAgMSwgJmRhdGEpOwotCQkJb3V0YihWT1lBR0VSX0NBVF9FTkQsIENBVF9DTUQpOwotCQkJdm95YWdlcl9zdGF0dXMucG93ZXJfZmFpbCA9IDE7Ci0JCQl2b3lhZ2VyX3N0YXR1cy5yZXF1ZXN0X2Zyb21fa2VybmVsID0gMTsKLQkJCXdha2VfdXBfcHJvY2Vzcyh2b3lhZ2VyX3RocmVhZCk7Ci0JCX0KLQotCX0gZWxzZSBpZiAocHNpX3JlZy5yZWdzLmludHN0YXR1cyAmIFBTSV9GQVVMVCkgewotCQkvKiBNYWpvciBmYXVsdCEgKi8KLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVm95YWdlciBQU0kgRGV0ZWN0ZWQgbWFqb3IgZmF1bHQsIGltbWVkaWF0ZSBwb3dlciBvZmYhXG4iKTsKLQkJdm95YWdlcl9jYXRfcG93ZXJfb2ZmKCk7Ci0JCS8qIG5vdCByZWFjaGVkICovCi0JfSBlbHNlIGlmIChwc2lfcmVnLnJlZ3MuaW50c3RhdHVzICYgKFBTSV9EQ19GQUlMIHwgUFNJX0FMQVJNCi0JCQkJCSAgICAgfCBQU0lfQ1VSUkVOVCB8IFBTSV9EVk0KLQkJCQkJICAgICB8IFBTSV9QU0NGQVVMVCB8IFBTSV9TVEFUX0NIRykpIHsKLQkJLyogb3RoZXIgcHNpIGZhdWx0ICovCi0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVm95YWdlciBQU0kgc3RhdHVzIDB4JXhcbiIsIGRhdGEpOwotCQkvKiBjbGVhciB0aGUgUFNJIGZhdWx0ICovCi0JCW91dGIoVk9ZQUdFUl9DQVRfUlVOLCBDQVRfQ01EKTsKLQkJY2F0X3dyaXRlKCZwc2ksICZwc2lfYXNpYywgVk9ZQUdFUl9QU0lfU1RBVFVTX1JFRywgMCk7Ci0JCW91dGIoVk9ZQUdFUl9DQVRfRU5ELCBDQVRfQ01EKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWNjODRhLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgwNyArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0KLS8qIENvcHlyaWdodCAoQykgMTk5OSwyMDAxCi0gKgotICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCi0gKgotICogVGhpcyBmaWxlIHByb3ZpZGVzIGFsbCB0aGUgc2FtZSBleHRlcm5hbCBlbnRyaWVzIGFzIHNtcC5jIGJ1dCB1c2VzCi0gKiB0aGUgdm95YWdlciBoYWwgdG8gcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eQotICovCi0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KLSNpbmNsdWRlIDxhc20vdmljLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KLQotLyogVExCIHN0YXRlIC0tIHZpc2libGUgZXh0ZXJuYWxseSwgaW5kZXhlZCBwaHlzaWNhbGx5ICovCi1ERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpID0geyAmaW5pdF9tbSwgMCB9OwotCi0vKiBDUFUgSVJRIGFmZmluaXR5IC0tIHNldCB0byBhbGwgb25lcyBpbml0aWFsbHkgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9pcnFfYWZmaW5pdHlbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZCA9Ci0Je1swIC4uLiBOUl9DUFVTLTFdICA9IH4wVUwgfTsKLQotLyogcGVyIENQVSBkYXRhIHN0cnVjdHVyZSAoZm9yIC9wcm9jL2NwdWluZm8gZXQgYWwpLCB2aXNpYmxlIGV4dGVybmFsbHkKLSAqIGluZGV4ZWQgcGh5c2ljYWxseSAqLwotREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X2luZm8pOwotCi0vKiBwaHlzaWNhbCBJRCBvZiB0aGUgQ1BVIHVzZWQgdG8gYm9vdCB0aGUgc3lzdGVtICovCi11bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwotCi0vKiBUaGUgbWVtb3J5IGxpbmUgYWRkcmVzc2VzIGZvciB0aGUgUXVhZCBDUElzICovCi1zdHJ1Y3Qgdm95YWdlcl9xaWNfY3BpICp2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotLyogVGhlIG1hc2tzIGZvciB0aGUgRXh0ZW5kZWQgVklDIHByb2Nlc3NvcnMsIGZpbGxlZCBpbiBieSBjYXRfaW5pdCAqLwotX191MzIgdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyA9IDA7Ci0KLS8qIE1hc2tzIGZvciB0aGUgZXh0ZW5kZWQgUXVhZCBwcm9jZXNzb3JzIHdoaWNoIGNhbm5vdCBiZSBWSUMgYm9vdGVkICovCi1fX3UzMiB2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzID0gMDsKLQotLyogVGhlIG1hc2sgZm9yIHRoZSBRdWFkIFByb2Nlc3NvcnMgKGJvdGggZXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCkgKi8KLV9fdTMyIHZveWFnZXJfcXVhZF9wcm9jZXNzb3JzID0gMDsKLQotLyogVG90YWwgY291bnQgb2YgbGl2ZSBDUFVzLCB1c2VkIGluIHByb2Nlc3MuYyB0byBkaXNwbGF5Ci0gKiB0aGUgQ1BVIGluZm9ybWF0aW9uIGFuZCBpbiBpcnEuYyBmb3IgdGhlIHBlciBDUFUgaXJxCi0gKiBhY3Rpdml0eSBjb3VudC4gIEZpbmFsbHkgZXhwb3J0ZWQgYnkgaTM4Nl9rc3ltcy5jICovCi1zdGF0aWMgaW50IHZveWFnZXJfZXh0ZW5kZWRfY3B1cyA9IDE7Ci0KLS8qIFVzZWQgZm9yIHRoZSBpbnZhbGlkYXRlIG1hcCB0aGF0J3MgYWxzbyBjaGVja2VkIGluIHRoZSBzcGlubG9jayAqLwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc21wX2ludmFsaWRhdGVfbmVlZGVkOwotCi0vKiBCaXRtYXNrIG9mIENQVXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIC0gZXhwb3J0ZWQgYnkgaTM4Nl9zeW1zLmMsIHVzZWQKLSAqIGJ5IHNjaGVkdWxlciBidXQgaW5kZXhlZCBwaHlzaWNhbGx5ICovCi1zdGF0aWMgY3B1bWFza190IHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXAgPSBDUFVfTUFTS19OT05FOwotCi0vKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBzZW5kX0NQSShfX3UzMiBjcHVzZXQsIF9fdTggY3BpKTsKLXN0YXRpYyB2b2lkIGFja19DUEkoX191OCBjcGkpOwotc3RhdGljIGludCBhY2tfUUlDX0NQSShfX3U4IGNwaSk7Ci1zdGF0aWMgdm9pZCBhY2tfc3BlY2lhbF9RSUNfQ1BJKF9fdTggY3BpKTsKLXN0YXRpYyB2b2lkIGFja19WSUNfQ1BJKF9fdTggY3BpKTsKLXN0YXRpYyB2b2lkIHNlbmRfQ1BJX2FsbGJ1dHNlbGYoX191OCBjcGkpOwotc3RhdGljIHZvaWQgbWFza192aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgdW5tYXNrX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGVuYWJsZV9sb2NhbF92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9sb2NhbF92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgYmVmb3JlX2hhbmRsZV92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgYWZ0ZXJfaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBzZXRfdmljX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7Ci1zdGF0aWMgdm9pZCBhY2tfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIHZpY19lbmFibGVfY3BpKHZvaWQpOwotc3RhdGljIHZvaWQgZG9fYm9vdF9jcHUoX191OCBjcHVpZCk7Ci1zdGF0aWMgdm9pZCBkb19xdWFkX2Jvb3RzdHJhcCh2b2lkKTsKLXN0YXRpYyB2b2lkIGluaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpOwotCi1pbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwotaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKLQotLyogSW5saW5lIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfb25lX1FJQ19DUEkoX191OCBjcHUsIF9fdTggY3BpKQotewotCXZveWFnZXJfcXVhZF9jcGlfYWRkcltjcHVdLT5xaWNfY3BpW2NwaV0uY3BpID0KLQkgICAgKHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAxNikgKyBjcGk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX1FJQ19DUEkoX191MzIgY3B1c2V0LCBfX3U4IGNwaSkKLXsKLQlpbnQgY3B1OwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdXNldCAmICgxIDw8IGNwdSkpIHsKLSNpZmRlZiBWT1lBR0VSX0RFQlVHCi0JCQlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKLQkJCQlWREVCVUcoKCJDUFUlZCBzZW5kaW5nIGNwaSAlZCB0byBDUFUlZCBub3QgaW4gIgotCQkJCQkiY3B1X29ubGluZV9tYXBcbiIsCi0JCQkJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcGksIGNwdSkpOwotI2VuZGlmCi0JCQlzZW5kX29uZV9RSUNfQ1BJKGNwdSwgY3BpIC0gUUlDX0NQSV9PRkZTRVQpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JhcHBlcl9zbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpCi17Ci0JaXJxX2VudGVyKCk7Ci0Jc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCgpOwotCWlycV9leGl0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX29uZV9DUEkoX191OCBjcHUsIF9fdTggY3BpKQotewotCWlmICh2b3lhZ2VyX3F1YWRfcHJvY2Vzc29ycyAmICgxIDw8IGNwdSkpCi0JCXNlbmRfb25lX1FJQ19DUEkoY3B1LCBjcGkgLSBRSUNfQ1BJX09GRlNFVCk7Ci0JZWxzZQotCQlzZW5kX0NQSSgxIDw8IGNwdSwgY3BpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfQ1BJX2FsbGJ1dHNlbGYoX191OCBjcGkpCi17Ci0JX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JX191MzIgbWFzayA9IGNwdXNfYWRkcihjcHVfb25saW5lX21hcClbMF0gJiB+KDEgPDwgY3B1KTsKLQlzZW5kX0NQSShtYXNrLCBjcGkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jcHVfcXVhZCh2b2lkKQotewotCV9fdTggY3B1bWFzayA9IGluYihWSUNfUFJPQ19XSE9fQU1fSSk7Ci0JcmV0dXJuICgoY3B1bWFzayAmIFFVQURfSURFTlRJRklFUikgPT0gUVVBRF9JREVOVElGSUVSKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY3B1X2V4dGVuZGVkKHZvaWQpCi17Ci0JX191OCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXJldHVybiAodm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyAmICgxIDw8IGNwdSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jcHVfdmljX2Jvb3Qodm9pZCkKLXsKLQlfX3U4IGNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JcmV0dXJuICh2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzCi0JCSYgdm95YWdlcl9hbGxvd2VkX2Jvb3RfcHJvY2Vzc29ycyAmICgxIDw8IGNwdSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX0NQSShfX3U4IGNwaSkKLXsKLQlzd2l0Y2ggKGNwaSkgewotCWNhc2UgVklDX0NQVV9CT09UX0NQSToKLQkJaWYgKGlzX2NwdV9xdWFkKCkgJiYgIWlzX2NwdV92aWNfYm9vdCgpKQotCQkJYWNrX1FJQ19DUEkoY3BpKTsKLQkJZWxzZQotCQkJYWNrX1ZJQ19DUEkoY3BpKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSUNfU1lTX0lOVDoKLQljYXNlIFZJQ19DTU5fSU5UOgotCQkvKiBUaGVzZSBhcmUgc2xpZ2h0bHkgc3RyYW5nZS4gIEV2ZW4gb24gdGhlIFF1YWQgY2FyZCwKLQkJICogVGhleSBhcmUgdmVjdG9yZWQgYXMgVklDIENQSXMgKi8KLQkJaWYgKGlzX2NwdV9xdWFkKCkpCi0JCQlhY2tfc3BlY2lhbF9RSUNfQ1BJKGNwaSk7Ci0JCWVsc2UKLQkJCWFja19WSUNfQ1BJKGNwaSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygiVk9ZQUdFUiBFUlJPUjogQ1BJJWQgaXMgaW4gY29tbW9uIENQSSBjb2RlXG4iLCBjcGkpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIGxvY2FsIHZhcmlhYmxlcyAqLwotCi0vKiBUaGUgVklDIElSUSBkZXNjcmlwdG9ycyAtLSB0aGVzZSBsb29rIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlCi0gKiA4MjU5IElSUXMgZXhjZXB0IHRoYXQgbWFza3MgYW5kIHRoaW5ncyBtdXN0IGJlIGtlcHQgcGVyIHByb2Nlc3NvcgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHZpY19jaGlwID0gewotCS5uYW1lID0gIlZJQyIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX3ZpY19pcnEsCi0JLm1hc2sgPSBtYXNrX3ZpY19pcnEsCi0JLnVubWFzayA9IHVubWFza192aWNfaXJxLAotCS5zZXRfYWZmaW5pdHkgPSBzZXRfdmljX2lycV9hZmZpbml0eSwKLX07Ci0KLS8qIHVzZWQgdG8gY291bnQgdXAgYXMgQ1BVcyBhcmUgYnJvdWdodCBvbiBsaW5lIChzdGFydHMgYXQgMCkgKi8KLXN0YXRpYyBpbnQgY3B1Y291bnQgPSAwOwotCi0vKiBUaGUgcGVyIGNwdSBwcm9maWxlIHN0dWZmIC0gdXNlZCBpbiBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0ICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwcm9mX211bHRpcGxpZXIpID0gMTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHByb2Zfb2xkX211bHRpcGxpZXIpID0gMTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHByb2ZfY291bnRlcikgPSAxOwotCi0vKiB0aGUgbWFwIHVzZWQgdG8gY2hlY2sgaWYgYSBDUFUgaGFzIGJvb3RlZCAqLwotc3RhdGljIF9fdTMyIGNwdV9ib290ZWRfbWFwOwotCi0vKiB0aGUgc3luY2hyb25pemUgZmxhZyB1c2VkIHRvIGhvbGQgYWxsIHNlY29uZGFyeSBDUFVzIHNwaW5uaW5nIGluCi0gKiBhIHRpZ2h0IGxvb3AgdW50aWwgdGhlIGJvb3Qgc2VxdWVuY2UgaXMgcmVhZHkgZm9yIHRoZW0gKi8KLXN0YXRpYyBjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrID0gQ1BVX01BU0tfTk9ORTsKLQotLyogVGhpcyBpcyBmb3IgdGhlIG5ldyBkeW5hbWljIENQVSBib290IGNvZGUgKi8KLQotLyogVGhlIHBlciBwcm9jZXNzb3IgSVJRIG1hc2tzICh0aGVzZSBhcmUgdXN1YWxseSBrZXB0IGluIHN5bmMpICovCi1zdGF0aWMgX191MTYgdmljX2lycV9tYXNrW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLS8qIHRoZSBsaXN0IG9mIElSUXMgdG8gYmUgZW5hYmxlZCBieSB0aGUgVklDX0VOQUJMRV9JUlFfQ1BJICovCi1zdGF0aWMgX191MTYgdmljX2lycV9lbmFibGVfbWFza1tOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkID0geyAwIH07Ci0KLS8qIExvY2sgZm9yIGVuYWJsZS9kaXNhYmxlIG9mIFZJQyBpbnRlcnJ1cHRzICovCi1zdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZCBERUZJTkVfU1BJTkxPQ0sodmljX2lycV9sb2NrKTsKLQotLyogVGhlIGJvb3QgcHJvY2Vzc29yIGlzIGNvcnJlY3RseSBzZXQgdXAgaW4gUEMgbW9kZSB3aGVuIGl0Ci0gKiBjb21lcyB1cCwgYnV0IHRoZSBzZWNvbmRhcmllcyBuZWVkIHRoZWlyIG1hc3Rlci9zbGF2ZSA4MjU5Ci0gKiBwYWlycyBpbml0aWFsaXppbmcgY29ycmVjdGx5ICovCi0KLS8qIEludGVycnVwdCBjb3VudGVycyAocGVyIGNwdSkgYW5kIHRvdGFsIC0gdXNlZCB0byB0cnkgdG8KLSAqIGV2ZW4gdXAgdGhlIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcyAqLwotc3RhdGljIGxvbmcgdmljX2ludHJfdG90YWwgPSAwOwotc3RhdGljIGxvbmcgdmljX2ludHJfY291bnRbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsgMCB9Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgdmljX3RpY2tbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsgMCB9OwotCi0vKiBTaW5jZSB3ZSBjYW4gb25seSB1c2UgQ1BJMCwgd2UgZmFrZSBhbGwgdGhlIG90aGVyIENQSXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZpY19jcGlfbWFpbGJveFtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwotCi0vKiBkZWJ1Z2dpbmcgcm91dGluZSB0byByZWFkIHRoZSBpc3Igb2YgdGhlIGNwdSdzIHBpYyAqLwotc3RhdGljIGlubGluZSBfX3UxNiB2aWNfcmVhZF9pc3Iodm9pZCkKLXsKLQlfX3UxNiBpc3I7Ci0KLQlvdXRiKDB4MGIsIDB4YTApOwotCWlzciA9IGluYigweGEwKSA8PCA4OwotCW91dGIoMHgwYiwgMHgyMCk7Ci0JaXNyIHw9IGluYigweDIwKTsKLQotCXJldHVybiBpc3I7Ci19Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBxaWNfc2V0dXAodm9pZCkKLXsKLQlpZiAoIWlzX2NwdV9xdWFkKCkpIHsKLQkJLyogbm90IGEgcXVhZCwgbm8gc2V0dXAgKi8KLQkJcmV0dXJuOwotCX0KLQlvdXRiKFFJQ19ERUZBVUxUX01BU0swLCBRSUNfTUFTS19SRUdJU1RFUjApOwotCW91dGIoUUlDX0NQSV9FTkFCTEUsIFFJQ19NQVNLX1JFR0lTVEVSMSk7Ci0KLQlpZiAoaXNfY3B1X2V4dGVuZGVkKCkpIHsKLQkJLyogdGhlIFFJQyBkdXBsaWNhdGUgb2YgdGhlIFZJQyBiYXNlIHJlZ2lzdGVyICovCi0JCW91dGIoVklDX0RFRkFVTFRfQ1BJX0JBU0UsIFFJQ19WSUNfQ1BJX0JBU0VfUkVHSVNURVIpOwotCQlvdXRiKFFJQ19ERUZBVUxUX0NQSV9CQVNFLCBRSUNfQ1BJX0JBU0VfUkVHSVNURVIpOwotCi0JCS8qIEZJWE1FOiBzaG91bGQgc2V0IHVwIHRoZSBRSUMgdGltZXIgYW5kIG1lbW9yeSBwYXJpdHkKLQkJICogZXJyb3IgdmVjdG9ycyBoZXJlICovCi0JfQotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgdmljX3NldHVwX3BpYyh2b2lkKQotewotCW91dGIoMSwgVklDX1JFRElSRUNUX1JFR0lTVEVSXzEpOwotCS8qIGNsZWFyIHRoZSBjbGFpbSByZWdpc3RlcnMgZm9yIGR5bmFtaWMgcm91dGluZyAqLwotCW91dGIoMCwgVklDX0NMQUlNX1JFR0lTVEVSXzApOwotCW91dGIoMCwgVklDX0NMQUlNX1JFR0lTVEVSXzEpOwotCi0Jb3V0YigwLCBWSUNfUFJJT1JJVFlfUkVHSVNURVIpOwotCS8qIFNldCB0aGUgUHJpbWFyeSBhbmQgU2Vjb25kYXJ5IE1pY3JvY2hhbm5lbCB2ZWN0b3IKLQkgKiBiYXNlcyB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb3JkaW5hcnkgaW50ZXJydXB0cwotCSAqCi0JICogRklYTUU6IFRoaXMgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgdXNpbmcgc2VwYXJhdGUKLQkgKiB2ZWN0b3JzLiAqLwotCW91dGIoRklSU1RfRVhURVJOQUxfVkVDVE9SLCBWSUNfUFJJTUFSWV9NQ19CQVNFKTsKLQlvdXRiKEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiwgVklDX1NFQ09OREFSWV9NQ19CQVNFKTsKLQkvKiBOb3cgaW5pdGlhbGxpc2UgdGhlIG1hc3RlciBQSUMgYmVsb25naW5nIHRvIHRoaXMgQ1BVIGJ5Ci0JICogc2VuZGluZyB0aGUgZm91ciBJQ1dzICovCi0KLQkvKiBJQ1cxOiBsZXZlbCB0cmlnZ2VyZWQsIElDVzQgbmVlZGVkICovCi0Jb3V0YigweDE5LCAweDIwKTsKLQotCS8qIElDVzI6IHZlY3RvciBiYXNlICovCi0Jb3V0YihGSVJTVF9FWFRFUk5BTF9WRUNUT1IsIDB4MjEpOwotCi0JLyogSUNXMzogc2xhdmUgYXQgbGluZSAyICovCi0Jb3V0YigweDA0LCAweDIxKTsKLQotCS8qIElDVzQ6IDgwODYgbW9kZSAqLwotCW91dGIoMHgwMSwgMHgyMSk7Ci0KLQkvKiBub3cgdGhlIHNhbWUgZm9yIHRoZSBzbGF2ZSBQSUMgKi8KLQotCS8qIElDVzE6IGxldmVsIHRyaWdnZXIsIElDVzQgbmVlZGVkICovCi0Jb3V0YigweDE5LCAweEEwKTsKLQotCS8qIElDVzI6IHNsYXZlIHZlY3RvciBiYXNlICovCi0Jb3V0YihGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyA4LCAweEExKTsKLQotCS8qIElDVzM6IHNsYXZlIElEICovCi0Jb3V0YigweDAyLCAweEExKTsKLQotCS8qIElDVzQ6IDgwODYgbW9kZSAqLwotCW91dGIoMHgwMSwgMHhBMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3F1YWRfYm9vdHN0cmFwKHZvaWQpCi17Ci0JaWYgKGlzX2NwdV9xdWFkKCkgJiYgaXNfY3B1X3ZpY19ib290KCkpIHsKLQkJaW50IGk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCV9fdTggY3B1aWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJLyogRklYTUU6IHRoaXMgd291bGQgYmUgPj4zICYweDcgb24gdGhlIDMyIHdheSAqLwotCQkJaWYgKCgoY3B1aWQgPj4gMikgJiAweDAzKSA9PSBpKQotCQkJCS8qIGRvbid0IGxvd2VyIG91ciBvd24gbWFzayEgKi8KLQkJCQljb250aW51ZTsKLQotCQkJLyogbWFzcXVlcmFkZSBhcyBsb2NhbCBRdWFkIENQVSAqLwotCQkJb3V0YihRSUNfQ1BVSURfRU5BQkxFIHwgaSwgUUlDX1BST0NFU1NPUl9JRCk7Ci0JCQkvKiBlbmFibGUgdGhlIHN0YXJ0dXAgQ1BJICovCi0JCQlvdXRiKFFJQ19CT09UX0NQSV9NQVNLLCBRSUNfTUFTS19SRUdJU1RFUjEpOwotCQkJLyogcmVzdG9yZSBjcHUgaWQgKi8KLQkJCW91dGIoMCwgUUlDX1BST0NFU1NPUl9JRCk7Ci0JCX0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLX0KLQotdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKQotewotCS8qIFRoaXMgaXMgZW1wdHkgb24gdm95YWdlciBiZWNhdXNlIHdlIG5lZWQgYSBtdWNoCi0JICogZWFybGllciBkZXRlY3Rpb24gd2hpY2ggaXMgZG9uZSBpbiBmaW5kX3NtcF9jb25maWcgKi8KLX0KLQotLyogU2V0IHVwIGFsbCB0aGUgYmFzaWMgc3R1ZmY6IHJlYWQgdGhlIFNNUCBjb25maWcgYW5kIG1ha2UgYWxsIHRoZQotICogU01QIGluZm9ybWF0aW9uIHJlZmxlY3Qgb25seSB0aGUgYm9vdCBjcHUuICBBbGwgb3RoZXJzIHdpbGwgYmUKLSAqIGJyb3VnaHQgb24tbGluZSBsYXRlci4gKi8KLXZvaWQgX19pbml0IGZpbmRfc21wX2NvbmZpZyh2b2lkKQotewotCWludCBpOwotCi0JYm9vdF9jcHVfaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXByaW50aygiVk9ZQUdFUiBTTVA6IEJvb3QgY3B1IGlzICVkXG4iLCBib290X2NwdV9pZCk7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBDUFUgc3RydWN0dXJlcyAobW92ZWQgZnJvbSBzbXBfYm9vdF9jcHVzKSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspCi0JCWNwdV9pcnFfYWZmaW5pdHlbaV0gPSB+MDsKLQljcHVfb25saW5lX21hcCA9IGNwdW1hc2tfb2ZfY3B1KGJvb3RfY3B1X2lkKTsKLQotCS8qIFRoZSBib290IENQVSBtdXN0IGJlIGV4dGVuZGVkICovCi0Jdm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyA9IDEgPDwgYm9vdF9jcHVfaWQ7Ci0JLyogaW5pdGlhbGx5LCBhbGwgb2YgdGhlIGZpcnN0IDggQ1BVcyBjYW4gYm9vdCAqLwotCXZveWFnZXJfYWxsb3dlZF9ib290X3Byb2Nlc3NvcnMgPSAweGZmOwotCS8qIHNldCB1cCBldmVyeXRoaW5nIGZvciBqdXN0IHRoaXMgQ1BVLCB3ZSBjYW4gYWx0ZXIKLQkgKiB0aGlzIGFzIHdlIHN0YXJ0IHRoZSBvdGhlciBDUFVzIGxhdGVyICovCi0JLyogbm93IGdldCB0aGUgQ1BVIGRpc3Bvc2l0aW9uIGZyb20gdGhlIGV4dGVuZGVkIENNT1MgKi8KLQljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gPQotCSAgICB2b3lhZ2VyX2V4dGVuZGVkX2Ntb3NfcmVhZChWT1lBR0VSX1BST0NFU1NPUl9QUkVTRU5UX01BU0spOwotCWNwdXNfYWRkcih2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwKVswXSB8PQotCSAgICB2b3lhZ2VyX2V4dGVuZGVkX2Ntb3NfcmVhZChWT1lBR0VSX1BST0NFU1NPUl9QUkVTRU5UX01BU0sgKyAxKSA8PCA4OwotCWNwdXNfYWRkcih2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwKVswXSB8PQotCSAgICB2b3lhZ2VyX2V4dGVuZGVkX2Ntb3NfcmVhZChWT1lBR0VSX1BST0NFU1NPUl9QUkVTRU5UX01BU0sgKwotCQkJCSAgICAgICAyKSA8PCAxNjsKLQljcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0KLQkgICAgdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsKLQkJCQkgICAgICAgMykgPDwgMjQ7Ci0JaW5pdF9jcHVfcG9zc2libGUoJnZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApOwotCXByaW50aygiVk9ZQUdFUiBTTVA6IHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXAgPSAweCVseFxuIiwKLQkgICAgICAgY3B1c19hZGRyKHZveWFnZXJfcGh5c19jcHVfcHJlc2VudF9tYXApWzBdKTsKLQkvKiBIZXJlIHdlIHNldCB1cCB0aGUgVklDIHRvIGVuYWJsZSBTTVAgKi8KLQkvKiBlbmFibGUgdGhlIENQSXMgYnkgd3JpdGluZyB0aGUgYmFzZSB2ZWN0b3IgdG8gdGhlaXIgcmVnaXN0ZXIgKi8KLQlvdXRiKFZJQ19ERUZBVUxUX0NQSV9CQVNFLCBWSUNfQ1BJX0JBU0VfUkVHSVNURVIpOwotCW91dGIoMSwgVklDX1JFRElSRUNUX1JFR0lTVEVSXzEpOwotCS8qIHNldCB0aGUgY2xhaW0gcmVnaXN0ZXJzIGZvciBzdGF0aWMgcm91dGluZyAtLS0gQm9vdCBDUFUgZ2V0cwotCSAqIGFsbCBpbnRlcnJ1cHRzIHVudGlsbCBhbGwgb3RoZXIgQ1BVcyBzdGFydGVkICovCi0Jb3V0YigweGZmLCBWSUNfQ0xBSU1fUkVHSVNURVJfMCk7Ci0Jb3V0YigweGZmLCBWSUNfQ0xBSU1fUkVHSVNURVJfMSk7Ci0JLyogU2V0IHRoZSBQcmltYXJ5IGFuZCBTZWNvbmRhcnkgTWljcm9jaGFubmVsIHZlY3RvcgotCSAqIGJhc2VzIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvcmRpbmFyeSBpbnRlcnJ1cHRzCi0JICoKLQkgKiBGSVhNRTogVGhpcyB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCB1c2luZyBzZXBhcmF0ZQotCSAqIHZlY3RvcnMuICovCi0Jb3V0YihGSVJTVF9FWFRFUk5BTF9WRUNUT1IsIFZJQ19QUklNQVJZX01DX0JBU0UpOwotCW91dGIoRklSU1RfRVhURVJOQUxfVkVDVE9SLCBWSUNfU0VDT05EQVJZX01DX0JBU0UpOwotCi0JLyogRmluYWxseSB0ZWxsIHRoZSBmaXJtd2FyZSB0aGF0IHdlJ3JlIGRyaXZpbmcgKi8KLQlvdXRiKGluYihWT1lBR0VSX1NVU19JTl9DT05UUk9MX1BPUlQpIHwgVk9ZQUdFUl9JTl9DT05UUk9MX0ZMQUcsCi0JICAgICBWT1lBR0VSX1NVU19JTl9DT05UUk9MX1BPUlQpOwotCi0JY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBib290X2NwdV9pZDsKLQl4ODZfd3JpdGVfcGVyY3B1KGNwdV9udW1iZXIsIGJvb3RfY3B1X2lkKTsKLX0KLQotLyoKLSAqCVRoZSBib290c3RyYXAga2VybmVsIGVudHJ5IGNvZGUgaGFzIHNldCB0aGVzZSB1cC4gU2F2ZSB0aGVtCi0gKglmb3IgYSBnaXZlbiBDUFUsIGlkIGlzIHBoeXNpY2FsICovCi12b2lkIF9faW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQotewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpZCk7Ci0KLQkqYyA9IGJvb3RfY3B1X2RhdGE7Ci0JYy0+Y3B1X2luZGV4ID0gaWQ7Ci0KLQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwotfQotCi0vKiBSb3V0aW5lIGluaXRpYWxseSBjYWxsZWQgd2hlbiBhIG5vbi1ib290IENQVSBpcyBicm91Z2h0IG9ubGluZSAqLwotc3RhdGljIHZvaWQgX19pbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCi17Ci0JX191OCBjcHVpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JY3B1X2luaXQoKTsKLQotCS8qIE9LLCB3ZSdyZSBpbiB0aGUgcm91dGluZSAqLwotCWFja19DUEkoVklDX0NQVV9CT09UX0NQSSk7Ci0KLQkvKiBzZXR1cCB0aGUgODI1OSBtYXN0ZXIgc2xhdmUgcGFpciBiZWxvbmdpbmcgdG8gdGhpcyBDUFUgLS0tCi0JICogd2Ugd29uJ3QgYWN0dWFsbHkgcmVjZWl2ZSBhbnkgdW50aWwgdGhlIGJvb3QgQ1BVCi0JICogcmVsaW5xdWlzaGVzIGl0J3Mgc3RhdGljIHJvdXRpbmcgbWFzayAqLwotCXZpY19zZXR1cF9waWMoKTsKLQotCXFpY19zZXR1cCgpOwotCi0JaWYgKGlzX2NwdV9xdWFkKCkgJiYgIWlzX2NwdV92aWNfYm9vdCgpKSB7Ci0JCS8qIGNsZWFyIHRoZSBib290IENQSSAqLwotCQlfX3U4IGR1bW15OwotCi0JCWR1bW15ID0KLQkJICAgIHZveWFnZXJfcXVhZF9jcGlfYWRkcltjcHVpZF0tPnFpY19jcGlbVklDX0NQVV9CT09UX0NQSV0uY3BpOwotCQlwcmludGsoInJlYWQgZHVtbXkgJWRcbiIsIGR1bW15KTsKLQl9Ci0KLQkvKiBsb3dlciB0aGUgbWFzayB0byByZWNlaXZlIENQSXMgKi8KLQl2aWNfZW5hYmxlX2NwaSgpOwotCi0JVkRFQlVHKCgiVk9ZQUdFUiBTTVA6IENQVSVkLCBzdGFjayBhdCBhYm91dCAlcFxuIiwgY3B1aWQsICZjcHVpZCkpOwotCi0Jbm90aWZ5X2NwdV9zdGFydGluZyhjcHVpZCk7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCS8qIGdldCBvdXIgYm9nb21pcHMgKi8KLQljYWxpYnJhdGVfZGVsYXkoKTsKLQotCS8qIHNhdmUgb3VyIHByb2Nlc3NvciBwYXJhbWV0ZXJzICovCi0Jc21wX3N0b3JlX2NwdV9pbmZvKGNwdWlkKTsKLQotCS8qIGlmIHdlJ3JlIGEgcXVhZCwgd2UgbWF5IG5lZWQgdG8gYm9vdHN0cmFwIG90aGVyIENQVXMgKi8KLQlkb19xdWFkX2Jvb3RzdHJhcCgpOwotCi0JLyogRklYTUU6IHRoaXMgaXMgcmF0aGVyIGEgcG9vciBoYWNrIHRvIHByZXZlbnQgdGhlIENQVQotCSAqIGFjdGl2YXRpbmcgc29mdGlycXMgd2hpbGUgaXQncyBzdXBwb3NlZCB0byBiZSB3YWl0aW5nIGZvcgotCSAqIHBlcm1pc3Npb24gdG8gcHJvY2VlZC4gIFdpdGhvdXQgdGhpcywgdGhlIG5ldyBwZXIgQ1BVIHN0dWZmCi0JICogaW4gdGhlIHNvZnRpcnFzIHdpbGwgZmFpbCAqLwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JY3B1X3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApOwotCi0JLyogc2lnbmFsIHRoYXQgd2UncmUgZG9uZSAqLwotCWNwdV9ib290ZWRfbWFwID0gMTsKLQotCXdoaWxlICghY3B1X2lzc2V0KGNwdWlkLCBzbXBfY29tbWVuY2VkX21hc2spKQotCQlyZXBfbm9wKCk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0KLQljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7Ci0Jd21iKCk7Ci0JY3B1X2lkbGUoKTsKLX0KLQotLyogUm91dGluZSB0byBraWNrIHN0YXJ0IHRoZSBnaXZlbiBDUFUgYW5kIHdhaXQgZm9yIGl0IHRvIHJlcG9ydCByZWFkeQotICogKG9yIHRpbWVvdXQgaW4gc3RhcnR1cCkuICBXaGVuIHRoaXMgcm91dGluZSByZXR1cm5zLCB0aGUgcmVxdWVzdGVkCi0gKiBDUFUgaXMgZWl0aGVyIGZ1bGx5IHJ1bm5pbmcgYW5kIGNvbmZpZ3VyZWQgb3Iga25vd24gdG8gYmUgZGVhZC4KLSAqCi0gKiBXZSBjYWxsIHRoaXMgcm91dGluZSBzZXF1ZW50aWFsbHkgMSBDUFUgYXQgYSB0aW1lLCBzbyBubyBuZWVkIGZvcgotICogbG9ja2luZyAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZG9fYm9vdF9jcHUoX191OCBjcHUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICppZGxlOwotCWludCB0aW1lb3V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHF1YWRfYm9vdCA9ICgxIDw8IGNwdSkgJiB2b3lhZ2VyX3F1YWRfcHJvY2Vzc29ycwotCSAgICAmIH4odm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycwotCQkmIHZveWFnZXJfYWxsb3dlZF9ib290X3Byb2Nlc3NvcnMpOwotCi0JLyogVGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBDUEkgSURUIGdhdGUgKGluIHJlYWwgbW9kZSkgd2hpY2gKLQkgKiB3ZSdyZSBoaWphY2tpbmcgdG8gYm9vdCB0aGUgQ1BVICovCi0JdW5pb24gSURURm9ybWF0IHsKLQkJc3RydWN0IHNlZyB7Ci0JCQlfX3UxNiBPZmZzZXQ7Ci0JCQlfX3UxNiBTZWdtZW50OwotCQl9IGlkdDsKLQkJX191MzIgdmFsOwotCX0gaGlqYWNrX3NvdXJjZTsKLQotCV9fdTMyICpoaWphY2tfdmVjdG9yOwotCV9fdTMyIHN0YXJ0X3BoeXNfYWRkcmVzcyA9IHNldHVwX3RyYW1wb2xpbmUoKTsKLQotCS8qIFRoZXJlJ3MgYSBjbGV2ZXIgdHJpY2sgdG8gdGhpczogVGhlIGxpbnV4IHRyYW1wb2xpbmUgaXMKLQkgKiBjb21waWxlZCB0byBiZWdpbiBhdCBhYnNvbHV0ZSBsb2NhdGlvbiB6ZXJvLCBzbyBtYWtlIHRoZQotCSAqIGFkZHJlc3MgemVybyBidXQgaGF2ZSB0aGUgZGF0YSBzZWdtZW50IHNlbGVjdG9yIGNvbXBlbnNhdGUKLQkgKiBmb3IgdGhlIGFjdHVhbCBhZGRyZXNzICovCi0JaGlqYWNrX3NvdXJjZS5pZHQuT2Zmc2V0ID0gc3RhcnRfcGh5c19hZGRyZXNzICYgMHgwMDBGOwotCWhpamFja19zb3VyY2UuaWR0LlNlZ21lbnQgPSAoc3RhcnRfcGh5c19hZGRyZXNzID4+IDQpICYgMHhGRkZGOwotCi0JY3B1Y291bnQrKzsKLQlhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaCgxKTsKLQotCWlkbGUgPSBmb3JrX2lkbGUoY3B1KTsKLQlpZiAoSVNfRVJSKGlkbGUpKQotCQlwYW5pYygiZmFpbGVkIGZvcmsgZm9yIENQVSVkIiwgY3B1KTsKLQlpZGxlLT50aHJlYWQuaXAgPSAodW5zaWduZWQgbG9uZylzdGFydF9zZWNvbmRhcnk7Ci0JLyogaW5pdF90YXNrcyAoaW4gc2NoZWQuYykgaXMgaW5kZXhlZCBsb2dpY2FsbHkgKi8KLQlzdGFja19zdGFydC5zcCA9ICh2b2lkICopaWRsZS0+dGhyZWFkLnNwOwotCi0JaW5pdF9nZHQoY3B1KTsKLQlwZXJfY3B1KGN1cnJlbnRfdGFzaywgY3B1KSA9IGlkbGU7Ci0JZWFybHlfZ2R0X2Rlc2NyLmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShjcHUpOwotCWlycV9jdHhfaW5pdChjcHUpOwotCi0JLyogTm90ZTogRG9uJ3QgbW9kaWZ5IGluaXRpYWwgc3Mgb3ZlcnJpZGUgKi8KLQlWREVCVUcoKCJWT1lBR0VSIFNNUDogQm9vdGluZyBDUFUlZCBhdCAweCVseFsleDoleF0sIHN0YWNrICVwXG4iLCBjcHUsCi0JCSh1bnNpZ25lZCBsb25nKWhpamFja19zb3VyY2UudmFsLCBoaWphY2tfc291cmNlLmlkdC5TZWdtZW50LAotCQloaWphY2tfc291cmNlLmlkdC5PZmZzZXQsIHN0YWNrX3N0YXJ0LnNwKSk7Ci0KLQkvKiBpbml0IGxvd21lbSBpZGVudGl0eSBtYXBwaW5nICovCi0JY2xvbmVfcGdkX3JhbmdlKHN3YXBwZXJfcGdfZGlyLCBzd2FwcGVyX3BnX2RpciArIEtFUk5FTF9QR0RfQk9VTkRBUlksCi0JCQltaW5fdCh1bnNpZ25lZCBsb25nLCBLRVJORUxfUEdEX1BUUlMsIEtFUk5FTF9QR0RfQk9VTkRBUlkpKTsKLQlmbHVzaF90bGJfYWxsKCk7Ci0KLQlpZiAocXVhZF9ib290KSB7Ci0JCXByaW50aygiQ1BVICVkOiBub24gZXh0ZW5kZWQgUXVhZCBib290XG4iLCBjcHUpOwotCQloaWphY2tfdmVjdG9yID0KLQkJICAgIChfX3UzMiAqKQotCQkgICAgcGh5c190b192aXJ0KChWSUNfQ1BVX0JPT1RfQ1BJICsgUUlDX0RFRkFVTFRfQ1BJX0JBU0UpICogNCk7Ci0JCSpoaWphY2tfdmVjdG9yID0gaGlqYWNrX3NvdXJjZS52YWw7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJDUFUlZDogZXh0ZW5kZWQgVklDIGJvb3RcbiIsIGNwdSk7Ci0JCWhpamFja192ZWN0b3IgPQotCQkgICAgKF9fdTMyICopCi0JCSAgICBwaHlzX3RvX3ZpcnQoKFZJQ19DUFVfQk9PVF9DUEkgKyBWSUNfREVGQVVMVF9DUElfQkFTRSkgKiA0KTsKLQkJKmhpamFja192ZWN0b3IgPSBoaWphY2tfc291cmNlLnZhbDsKLQkJLyogVklDIGVycmF0YSwgbWF5IGFsc28gcmVjZWl2ZSBpbnRlcnJ1cHQgYXQgdGhpcyBhZGRyZXNzICovCi0JCWhpamFja192ZWN0b3IgPQotCQkgICAgKF9fdTMyICopCi0JCSAgICBwaHlzX3RvX3ZpcnQoKFZJQ19DUFVfQk9PVF9FUlJBVEFfQ1BJICsKLQkJCQkgIFZJQ19ERUZBVUxUX0NQSV9CQVNFKSAqIDQpOwotCQkqaGlqYWNrX3ZlY3RvciA9IGhpamFja19zb3VyY2UudmFsOwotCX0KLQkvKiBBbGwgbm9uLWJvb3QgQ1BVcyBzdGFydCB3aXRoIGludGVycnVwdHMgZnVsbHkgbWFza2VkLiAgTmVlZAotCSAqIHRvIGxvd2VyIHRoZSBtYXNrIG9mIHRoZSBDUEkgd2UncmUgYWJvdXQgdG8gc2VuZC4gIFdlIGRvCi0JICogdGhpcyBpbiB0aGUgVklDIGJ5IG1hc3F1ZXJhZGluZyBhcyB0aGUgcHJvY2Vzc29yIHdlJ3JlCi0JICogYWJvdXQgdG8gYm9vdCBhbmQgbG93ZXJpbmcgaXRzIGludGVycnVwdCBtYXNrICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChxdWFkX2Jvb3QpIHsKLQkJc2VuZF9vbmVfUUlDX0NQSShjcHUsIFZJQ19DUFVfQk9PVF9DUEkpOwotCX0gZWxzZSB7Ci0JCW91dGIoVklDX0NQVV9NQVNRVUVSQURFX0VOQUJMRSB8IGNwdSwgVklDX1BST0NFU1NPUl9JRCk7Ci0JCS8qIGhlcmUgd2UncmUgYWx0ZXJpbmcgcmVnaXN0ZXJzIGJlbG9uZ2luZyB0byBgY3B1JyAqLwotCi0JCW91dGIoVklDX0JPT1RfSU5URVJSVVBUX01BU0ssIDB4MjEpOwotCQkvKiBub3cgZ28gYmFjayB0byBvdXIgb3JpZ2luYWwgaWRlbnRpdHkgKi8KLQkJb3V0Yihib290X2NwdV9pZCwgVklDX1BST0NFU1NPUl9JRCk7Ci0KLQkJLyogYW5kIGJvb3QgdGhlIENQVSAqLwotCi0JCXNlbmRfQ1BJKCgxIDw8IGNwdSksIFZJQ19DUFVfQk9PVF9DUEkpOwotCX0KLQljcHVfYm9vdGVkX21hcCA9IDA7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogbm93IHdhaXQgZm9yIGl0IHRvIGJlY29tZSByZWFkeSAob3IgdGltZW91dCkgKi8KLQlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNTAwMDA7IHRpbWVvdXQrKykgewotCQlpZiAoY3B1X2Jvb3RlZF9tYXApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7Ci0JfQotCS8qIHJlc2V0IHRoZSBwYWdlIHRhYmxlICovCi0JemFwX2xvd19tYXBwaW5ncygpOwotCi0JaWYgKGNwdV9ib290ZWRfbWFwKSB7Ci0JCVZERUJVRygoIkNQVSVkOiBCb290ZWQgc3VjY2Vzc2Z1bGx5LCBiYWNrIGluIENQVSAlZFxuIiwKLQkJCWNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7Ci0KLQkJcHJpbnRrKCJDUFUlZDogIiwgY3B1KTsKLQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGNwdSkpOwotCQl3bWIoKTsKLQkJY3B1X3NldChjcHUsIGNwdV9jYWxsb3V0X21hcCk7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotCX0gZWxzZSB7Ci0JCXByaW50aygiQ1BVJWQgRkFJTEVEIFRPIEJPT1Q6ICIsIGNwdSk7Ci0JCWlmICgqCi0JCSAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwaHlzX3RvX3ZpcnQoc3RhcnRfcGh5c19hZGRyZXNzKSkKLQkJICAgID09IDB4QTUpCi0JCQlwcmludGsoIlN0dWNrLlxuIik7Ci0JCWVsc2UKLQkJCXByaW50aygiTm90IHJlc3BvbmRpbmcuXG4iKTsKLQotCQljcHVjb3VudC0tOwotCX0KLX0KLQotdm9pZCBfX2luaXQgc21wX2Jvb3RfY3B1cyh2b2lkKQotewotCWludCBpOwotCi0JLyogQ0FUIEJVUyBpbml0aWFsaXNhdGlvbiBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIG1lbW9yeSAqLwotCS8qIEZJWE1FOiBUaGUgTDQgaGFzIGEgY2F0YnVzIHRvbywgaXQganVzdCBuZWVkcyB0byBiZQotCSAqIGFjY2Vzc2VkIGluIGEgdG90YWxseSBkaWZmZXJlbnQgd2F5ICovCi0JaWYgKHZveWFnZXJfbGV2ZWwgPT0gNSkgewotCQl2b3lhZ2VyX2NhdF9pbml0KCk7Ci0KLQkJLyogbm93IHRoYXQgdGhlIGNhdCBoYXMgcHJvYmVkIHRoZSBWb3lhZ2VyIFN5c3RlbSBCdXMsIHNhbml0eQotCQkgKiBjaGVjayB0aGUgY3B1IG1hcCAqLwotCQlpZiAoKCh2b3lhZ2VyX3F1YWRfcHJvY2Vzc29ycyB8IHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMpCi0JCSAgICAgJiBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0pICE9Ci0JCSAgICBjcHVzX2FkZHIodm95YWdlcl9waHlzX2NwdV9wcmVzZW50X21hcClbMF0pIHsKLQkJCS8qIHNob3VsZCBwYW5pYyAqLwotCQkJcHJpbnRrKCJcblxuKioqV0FSTklORyoqKiAiCi0JCQkgICAgICAgIlNhbml0eSBjaGVjayBvZiBDUFUgcHJlc2VudCBtYXAgRkFJTEVEXG4iKTsKLQkJfQotCX0gZWxzZSBpZiAodm95YWdlcl9sZXZlbCA9PSA0KQotCQl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzID0KLQkJICAgIGNwdXNfYWRkcih2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwKVswXTsKLQotCS8qIHRoaXMgc2V0cyB1cCB0aGUgaWRsZSB0YXNrIHRvIHJ1biBvbiB0aGUgY3VycmVudCBjcHUgKi8KLQl2b3lhZ2VyX2V4dGVuZGVkX2NwdXMgPSAxOwotCS8qIFJlbW92ZSB0aGUgZ2xvYmFsX2lycV9ob2xkZXIgc2V0dGluZywgaXQgdHJpZ2dlcnMgYSBCVUcoKSBvbgotCSAqIHNjaGVkdWxlIGF0IHRoZSBtb21lbnQgKi8KLQkvL2dsb2JhbF9pcnFfaG9sZGVyID0gYm9vdF9jcHVfaWQ7Ci0KLQkvKiBGSVhNRTogTmVlZCB0byBkbyBzb21ldGhpbmcgYWJvdXQgdGhpcyBidXQgY3VycmVudGx5IG9ubHkgd29ya3MKLQkgKiBvbiBDUFVzIHdpdGggYSB0c2Mgd2hpY2ggbm9uZSBvZiBtaW5lIGhhdmUuCi0JIHNtcF90dW5lX3NjaGVkdWxpbmcoKTsKLQkgKi8KLQlzbXBfc3RvcmVfY3B1X2luZm8oYm9vdF9jcHVfaWQpOwotCS8qIHNldHVwIHRoZSBqdW1wIHZlY3RvciAqLwotCWluaXRpYWxfY29kZSA9ICh1bnNpZ25lZCBsb25nKWluaXRpYWxpemVfc2Vjb25kYXJ5OwotCXByaW50aygiQ1BVJWQ6ICIsIGJvb3RfY3B1X2lkKTsKLQlwcmludF9jcHVfaW5mbygmY3B1X2RhdGEoYm9vdF9jcHVfaWQpKTsKLQotCWlmIChpc19jcHVfcXVhZCgpKSB7Ci0JCS8qIGJvb3Rpbmcgb24gYSBRdWFkIENQVSAqLwotCQlwcmludGsoIlZPWUFHRVIgU01QOiBCb290IENQVSBpcyBRdWFkXG4iKTsKLQkJcWljX3NldHVwKCk7Ci0JCWRvX3F1YWRfYm9vdHN0cmFwKCk7Ci0JfQotCi0JLyogZW5hYmxlIG91ciBvd24gQ1BJcyAqLwotCXZpY19lbmFibGVfY3BpKCk7Ci0KLQljcHVfc2V0KGJvb3RfY3B1X2lkLCBjcHVfb25saW5lX21hcCk7Ci0JY3B1X3NldChib290X2NwdV9pZCwgY3B1X2NhbGxvdXRfbWFwKTsKLQotCS8qIGxvb3Agb3ZlciBhbGwgdGhlIGV4dGVuZGVkIFZJQyBDUFVzIGFuZCBib290IHRoZW0uICBUaGUKLQkgKiBRdWFkIENQVXMgbXVzdCBiZSBib290c3RyYXBwZWQgYnkgdGhlaXIgZXh0ZW5kZWQgVklDIGNwdSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspIHsKLQkJaWYgKGkgPT0gYm9vdF9jcHVfaWQgfHwgIWNwdV9pc3NldChpLCB2b3lhZ2VyX3BoeXNfY3B1X3ByZXNlbnRfbWFwKSkKLQkJCWNvbnRpbnVlOwotCQlkb19ib290X2NwdShpKTsKLQkJLyogVGhpcyB1ZGVsYXkgc2VlbXMgdG8gYmUgbmVlZGVkIGZvciB0aGUgUXVhZCBib290cwotCQkgKiBkb24ndCByZW1vdmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nICovCi0JCXVkZWxheSgxMDAwKTsKLQl9Ci0JLyogd2UgY291bGQgY29tcHV0ZSB0aGUgdG90YWwgYm9nb21pcHMgaGVyZSwgYnV0IHdoeSBib3RoZXI/LAotCSAqIENvZGUgYWRkZWQgZnJvbSBzbXBib290LmMgKi8KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7Ci0KLQkJZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQkJYm9nb3N1bSArPSBjcHVfZGF0YShpKS5sb29wc19wZXJfamlmZnk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkICIKLQkJICAgICAgICIoJWx1LiUwMmx1IEJvZ29NSVBTKS5cbiIsCi0JCSAgICAgICBjcHVjb3VudCArIDEsIGJvZ29zdW0gLyAoNTAwMDAwIC8gSFopLAotCQkgICAgICAgKGJvZ29zdW0gLyAoNTAwMCAvIEhaKSkgJSAxMDApOwotCX0KLQl2b3lhZ2VyX2V4dGVuZGVkX2NwdXMgPSBod2VpZ2h0MzIodm95YWdlcl9leHRlbmRlZF92aWNfcHJvY2Vzc29ycyk7Ci0JcHJpbnRrKCJWT1lBR0VSOiBFeHRlbmRlZCAoaW50ZXJydXB0IGhhbmRsaW5nIENQVXMpOiAiCi0JICAgICAgICIlZCwgbm9uLWV4dGVuZGVkOiAlZFxuIiwgdm95YWdlcl9leHRlbmRlZF9jcHVzLAotCSAgICAgICBudW1fYm9vdGluZ19jcHVzKCkgLSB2b3lhZ2VyX2V4dGVuZGVkX2NwdXMpOwotCS8qIHRoYXQncyBpdCwgc3dpdGNoIHRvIHN5bW1ldHJpYyBtb2RlICovCi0Jb3V0YigwLCBWSUNfUFJJT1JJVFlfUkVHSVNURVIpOwotCW91dGIoMCwgVklDX0NMQUlNX1JFR0lTVEVSXzApOwotCW91dGIoMCwgVklDX0NMQUlNX1JFR0lTVEVSXzEpOwotCi0JVkRFQlVHKCgiVk9ZQUdFUiBTTVA6IEJvb3RlZCB3aXRoICVkIENQVXNcbiIsIG51bV9ib290aW5nX2NwdXMoKSkpOwotfQotCi0vKiBSZWxvYWQgdGhlIHNlY29uZGFyeSBDUFVzIHRhc2sgc3RydWN0dXJlICh0aGlzIGZ1bmN0aW9uIGRvZXMgbm90Ci0gKiByZXR1cm4gKSAqLwotc3RhdGljIHZvaWQgX19pbml0IGluaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCi17Ci0jaWYgMAotCS8vIEFDIGtlcm5lbHMgb25seQotCXNldF9jdXJyZW50KGhhcmRfZ2V0X2N1cnJlbnQoKSk7Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBsb2FkIHRoZSBmdWxsIFRTUywKLQkgKiBiYXNpY2FsbHkganVzdCB0aGUgc3RhY2sgcG9pbnRlciBhbmQgdGhlIGVpcC4KLQkgKi8KLQotCWFzbSB2b2xhdGlsZSAoIm1vdmwgJTAsJSVlc3Bcblx0IgotCQkgICAgICAiam1wIColMSI6OiJyIiAoY3VycmVudC0+dGhyZWFkLnNwKSwKLQkJICAgICAgInIiKGN1cnJlbnQtPnRocmVhZC5pcCkpOwotfQotCi0vKiBoYW5kbGUgYSBWb3lhZ2VyIFNZU19JTlQgLS0gSWYgd2UgZG9uJ3QsIHRoZSBiYXNlIGJvYXJkIHdpbGwKLSAqIHBhbmljIHRoZSBzeXN0ZW0uCi0gKgotICogU3lzdGVtIGludGVycnVwdHMgb2NjdXIgYmVjYXVzZSBzb21lIHByb2JsZW0gd2FzIGRldGVjdGVkIG9uIHRoZQotICogdmFyaW91cyBidXNzZXMuICBUbyBmaW5kIG91dCB3aGF0IHlvdSBoYXZlIHRvIHByb2JlIGFsbCB0aGUKLSAqIGhhcmR3YXJlIHZpYSB0aGUgQ0FUIGJ1cy4gIEZJWE1FOiBBdCB0aGUgbW9tZW50IHdlIGRvIG5vdGhpbmcuICovCi12b2lkIHNtcF92aWNfc3lzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlhY2tfQ1BJKFZJQ19TWVNfSU5UKTsKLQlwcmludGsoIlZveWFnZXIgU1lTVEVNIElOVEVSUlVQVFxuIik7Ci19Ci0KLS8qIEhhbmRsZSBhIHZveWFnZXIgQ01OX0lOVDsgVGhlc2UgaW50ZXJydXB0cyBvY2N1ciBlaXRoZXIgYmVjYXVzZSBvZgotICogYSBzeXN0ZW0gc3RhdHVzIGNoYW5nZSBvciBiZWNhdXNlIGEgc2luZ2xlIGJpdCBtZW1vcnkgZXJyb3IKLSAqIG9jY3VycmVkLiAgRklYTUU6IEF0IHRoZSBtb21lbnQsIGlnbm9yZSBhbGwgdGhpcy4gKi8KLXZvaWQgc21wX3ZpY19jbW5faW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0YXRpYyBfX3U4IGluX2Ntbl9pbnQgPSAwOwotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21uX2ludF9sb2NrKTsKLQotCS8qIGNvbW1vbiBpbnRzIGFyZSBicm9hZGNhc3QsIHNvIG1ha2Ugc3VyZSB3ZSBvbmx5IGRvIHRoaXMgb25jZSAqLwotCV9yYXdfc3Bpbl9sb2NrKCZjbW5faW50X2xvY2spOwotCWlmIChpbl9jbW5faW50KQotCQlnb3RvIHVubG9ja19lbmQ7Ci0KLQlpbl9jbW5faW50Kys7Ci0JX3Jhd19zcGluX3VubG9jaygmY21uX2ludF9sb2NrKTsKLQotCVZERUJVRygoIlZveWFnZXIgQ09NTU9OIElOVEVSUlVQVFxuIikpOwotCi0JaWYgKHZveWFnZXJfbGV2ZWwgPT0gNSkKLQkJdm95YWdlcl9jYXRfZG9fY29tbW9uX2ludGVycnVwdCgpOwotCi0JX3Jhd19zcGluX2xvY2soJmNtbl9pbnRfbG9jayk7Ci0JaW5fY21uX2ludCA9IDA7Ci0gICAgICB1bmxvY2tfZW5kOgotCV9yYXdfc3Bpbl91bmxvY2soJmNtbl9pbnRfbG9jayk7Ci0JYWNrX0NQSShWSUNfQ01OX0lOVCk7Ci19Ci0KLS8qCi0gKiBSZXNjaGVkdWxlIGNhbGwgYmFjay4gTm90aGluZyB0byBkbywgYWxsIHRoZSB3b3JrIGlzIGRvbmUKLSAqIGF1dG9tYXRpY2FsbHkgd2hlbiB3ZSByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0LiAgKi8KLXN0YXRpYyB2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdCh2b2lkKQotewotCS8qIGRvIG5vdGhpbmcgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmZsdXNoX21tOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmx1c2hfdmE7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRsYnN0YXRlX2xvY2spOwotCi0vKgotICogV2UgY2Fubm90IGNhbGwgbW1kcm9wKCkgYmVjYXVzZSB3ZSBhcmUgaW4gaW50ZXJydXB0IGNvbnRleHQsCi0gKiBpbnN0ZWFkIHVwZGF0ZSBtbS0+Y3B1X3ZtX21hc2suCi0gKgotICogV2UgbmVlZCB0byByZWxvYWQgJWNyMyBzaW5jZSB0aGUgcGFnZSB0YWJsZXMgbWF5IGJlIGdvaW5nCi0gKiBhd2F5IGZyb20gdW5kZXIgdXMuLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdm95YWdlcl9sZWF2ZV9tbSh1bnNpZ25lZCBsb25nIGNwdSkKLXsKLQlpZiAocGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPT0gVExCU1RBVEVfT0spCi0JCUJVRygpOwotCWNwdV9jbGVhcihjcHUsIHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbS0+Y3B1X3ZtX21hc2spOwotCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKLX0KLQotLyoKLSAqIEludmFsaWRhdGUgY2FsbC1iYWNrCi0gKi8KLXN0YXRpYyB2b2lkIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCh2b2lkKQotewotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKCF0ZXN0X2JpdChjcHUsICZzbXBfaW52YWxpZGF0ZV9uZWVkZWQpKQotCQlyZXR1cm47Ci0JLyogVGhpcyB3aWxsIGZsb29kIG1lc3NhZ2VzLiAgRG9uJ3QgdW5jb21tZW50IHVubGVzcyB5b3Ugc2VlCi0JICogUHJvYmxlbXMgd2l0aCBjcm9zcyBjcHUgaW52YWxpZGF0aW9uCi0JIFZERUJVRygoIlZPWUFHRVIgU01QOiBDUFUlZCByZWNlaXZlZCBJTlZBTElEQVRFX0NQSVxuIiwKLQkgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7Ci0JICovCi0KLQlpZiAoZmx1c2hfbW0gPT0gcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuYWN0aXZlX21tKSB7Ci0JCWlmIChwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9PSBUTEJTVEFURV9PSykgewotCQkJaWYgKGZsdXNoX3ZhID09IFRMQl9GTFVTSF9BTEwpCi0JCQkJbG9jYWxfZmx1c2hfdGxiKCk7Ci0JCQllbHNlCi0JCQkJX19mbHVzaF90bGJfb25lKGZsdXNoX3ZhKTsKLQkJfSBlbHNlCi0JCQl2b3lhZ2VyX2xlYXZlX21tKGNwdSk7Ci0JfQotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNsZWFyX2JpdChjcHUsICZzbXBfaW52YWxpZGF0ZV9uZWVkZWQpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci19Ci0KLS8qIEFsbCB0aGUgbmV3IGZsdXNoIG9wZXJhdGlvbnMgZm9yIDIuNCAqLwotCi0vKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggYSBwaHlzaWNhbCBjcHUgbWFzayAqLwotc3RhdGljIHZvaWQKLXZveWFnZXJfZmx1c2hfdGxiX290aGVycyh1bnNpZ25lZCBsb25nIGNwdW1hc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0JaW50IHN0dWNrID0gNTAwMDA7Ci0KLQlpZiAoIWNwdW1hc2spCi0JCUJVRygpOwotCWlmICgoY3B1bWFzayAmIGNwdXNfYWRkcihjcHVfb25saW5lX21hcClbMF0pICE9IGNwdW1hc2spCi0JCUJVRygpOwotCWlmIChjcHVtYXNrICYgKDEgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJQlVHKCk7Ci0JaWYgKCFtbSkKLQkJQlVHKCk7Ci0KLQlzcGluX2xvY2soJnRsYnN0YXRlX2xvY2spOwotCi0JZmx1c2hfbW0gPSBtbTsKLQlmbHVzaF92YSA9IHZhOwotCWF0b21pY19zZXRfbWFzayhjcHVtYXNrLCAmc21wX2ludmFsaWRhdGVfbmVlZGVkKTsKLQkvKgotCSAqIFdlIGhhdmUgdG8gc2VuZCB0aGUgQ1BJIG9ubHkgdG8KLQkgKiBDUFVzIGFmZmVjdGVkLgotCSAqLwotCXNlbmRfQ1BJKGNwdW1hc2ssIFZJQ19JTlZBTElEQVRFX0NQSSk7Ci0KLQl3aGlsZSAoc21wX2ludmFsaWRhdGVfbmVlZGVkKSB7Ci0JCW1iKCk7Ci0JCWlmICgtLXN0dWNrID09IDApIHsKLQkJCXByaW50aygiKioqV0FSTklORyoqKiBTdHVjayBkb2luZyBpbnZhbGlkYXRlIENQSSAiCi0JCQkgICAgICAgIihDUFUlZClcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIFVuY29tbWVudCBvbmx5IHRvIGRlYnVnIGludmFsaWRhdGlvbiBwcm9ibGVtcwotCSAgIFZERUJVRygoIlZPWUFHRVIgU01QOiBDb21wbGV0ZWQgaW52YWxpZGF0ZSBDUEkgKENQVSVkKVxuIiwgY3B1KSk7Ci0JICovCi0KLQlmbHVzaF9tbSA9IE5VTEw7Ci0JZmx1c2hfdmEgPSAwOwotCXNwaW5fdW5sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQl1bnNpZ25lZCBsb25nIGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQljcHVfbWFzayA9IGNwdXNfYWRkcihtbS0+Y3B1X3ZtX21hc2spWzBdICYgfigxIDw8IHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JaWYgKGNwdV9tYXNrKQotCQl2b3lhZ2VyX2ZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXVuc2lnbmVkIGxvbmcgY3B1X21hc2s7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWNwdV9tYXNrID0gY3B1c19hZGRyKG1tLT5jcHVfdm1fbWFzaylbMF0gJiB+KDEgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJbG9jYWxfZmx1c2hfdGxiKCk7Ci0JCWVsc2UKLQkJCXZveWFnZXJfbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0JaWYgKGNwdV9tYXNrKQotCQl2b3lhZ2VyX2ZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCXVuc2lnbmVkIGxvbmcgY3B1X21hc2s7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWNwdV9tYXNrID0gY3B1c19hZGRyKG1tLT5jcHVfdm1fbWFzaylbMF0gJiB+KDEgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7Ci0JCWlmIChjdXJyZW50LT5tbSkKLQkJCV9fZmx1c2hfdGxiX29uZSh2YSk7Ci0JCWVsc2UKLQkJCXZveWFnZXJfbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0KLQlpZiAoY3B1X21hc2spCi0JCXZveWFnZXJfZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX3BhZ2UpOwotCi0vKiBlbmFibGUgdGhlIHJlcXVlc3RlZCBJUlFzICovCi1zdGF0aWMgdm9pZCBzbXBfZW5hYmxlX2lycV9pbnRlcnJ1cHQodm9pZCkKLXsKLQlfX3U4IGlycTsKLQlfX3U4IGNwdSA9IGdldF9jcHUoKTsKLQotCVZERUJVRygoIlZPWUFHRVIgU01QOiBDUFUlZCBlbmFibGluZyBpcnEgbWFzayAweCV4XG4iLCBjcHUsCi0JCXZpY19pcnFfZW5hYmxlX21hc2tbY3B1XSkpOwotCi0Jc3Bpbl9sb2NrKCZ2aWNfaXJxX2xvY2spOwotCWZvciAoaXJxID0gMDsgaXJxIDwgMTY7IGlycSsrKSB7Ci0JCWlmICh2aWNfaXJxX2VuYWJsZV9tYXNrW2NwdV0gJiAoMSA8PCBpcnEpKQotCQkJZW5hYmxlX2xvY2FsX3ZpY19pcnEoaXJxKTsKLQl9Ci0JdmljX2lycV9lbmFibGVfbWFza1tjcHVdID0gMDsKLQlzcGluX3VubG9jaygmdmljX2lycV9sb2NrKTsKLQotCXB1dF9jcHVfbm9fcmVzY2hlZCgpOwotfQotCi0vKgotICoJQ1BVIGhhbHQgY2FsbC1iYWNrCi0gKi8KLXN0YXRpYyB2b2lkIHNtcF9zdG9wX2NwdV9mdW5jdGlvbih2b2lkICpkdW1teSkKLXsKLQlWREVCVUcoKCJWT1lBR0VSIFNNUDogQ1BVJWQgaXMgU1RPUFBJTkdcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWZvciAoOzspCi0JCWhhbHQoKTsKLX0KLQotLyogZXhlY3V0ZSBhIHRocmVhZCBvbiBhIG5ldyBDUFUuICBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG11c3QgYmUKLSAqIHByZXZpb3VzbHkgc2V0IHVwLiAgVGhpcyBpcyB1c2VkIHRvIHNjaGVkdWxlIGEgZnVuY3Rpb24gZm9yCi0gKiBleGVjdXRpb24gb24gYWxsIENQVXMgLSBzZXQgdXAgdGhlIGZ1bmN0aW9uIHRoZW4gYnJvYWRjYXN0IGEKLSAqIGZ1bmN0aW9uX2ludGVycnVwdCBDUEkgdG8gY29tZSBoZXJlIG9uIGVhY2ggQ1BVICovCi1zdGF0aWMgdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpcnFfZW50ZXIoKTsKLQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwotCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9jYWxsX2NvdW50Kys7Ci0JaXJxX2V4aXQoKTsKLX0KLQotc3RhdGljIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCh2b2lkKQotewotCWlycV9lbnRlcigpOwotCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9jYWxsX2NvdW50Kys7Ci0JaXJxX2V4aXQoKTsKLX0KLQotLyogU29ycnkgYWJvdXQgdGhlIG5hbWUuICBJbiBhbiBBUElDIGJhc2VkIHN5c3RlbSwgdGhlIEFQSUNzCi0gKiB0aGVtc2VsdmVzIGFyZSBwcm9ncmFtbWVkIHRvIHNlbmQgYSB0aW1lciBpbnRlcnJ1cHQuICBUaGlzIGlzIHVzZWQKLSAqIGJ5IGxpbnV4IHRvIHJlc2NoZWR1bGUgdGhlIHByb2Nlc3Nvci4gIFZveWFnZXIgZG9lc24ndCBoYXZlIHRoaXMsCi0gKiBzbyB3ZSB1c2UgdGhlIHN5c3RlbSBjbG9jayB0byBpbnRlcnJ1cHQgb25lIHByb2Nlc3Nvciwgd2hpY2ggaW4KLSAqIHR1cm4sIGJyb2FkY2FzdHMgYSB0aW1lciBDUEkgdG8gYWxsIHRoZSBvdGhlcnMgLS0tIHdlIHJlY2VpdmUgdGhhdAotICogQ1BJIGhlcmUuICBXZSBkb24ndCB1c2UgdGhpcyBhY3R1YWxseSBmb3IgY291bnRpbmcgc28gbG9zaW5nCi0gKiB0aWNrcyBkb2Vzbid0IG1hdHRlcgotICoKLSAqIEZJWE1FOiBGb3IgdGhvc2UgQ1BVcyB3aGljaCBhY3R1YWxseSBoYXZlIGEgbG9jYWwgQVBJQywgd2UgY291bGQKLSAqIHRyeSB0byB1c2UgaXQgdG8gdHJpZ2dlciB0aGlzIGludGVycnVwdCBpbnN0ZWFkIG9mIGhhdmluZyB0bwotICogYnJvYWRjYXN0IHRoZSB0aW1lciB0aWNrLiAgVW5mb3J0dW5hdGVseSwgYWxsIG15IHBlbnRpdW0gRFlBRHMgaGF2ZQotICogbm8gbG9jYWwgQVBJQywgc28gSSBjYW4ndCBkbyB0aGlzCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgYSBwbGFjZWhvbGRlciBhbmQgaXMgdW51c2VkIGluIHRoZSBjb2RlICovCi12b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0Jd3JhcHBlcl9zbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KCk7Ci0Jc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKLX0KLQotLyogQWxsIG9mIHRoZSBRVUFEIGludGVycnVwdCBHQVRFUyAqLwotdm9pZCBzbXBfcWljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0JYWNrX1FJQ19DUEkoUUlDX1RJTUVSX0NQSSk7Ci0Jd3JhcHBlcl9zbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KCk7Ci0Jc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKLX0KLQotdm9pZCBzbXBfcWljX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWFja19RSUNfQ1BJKFFJQ19JTlZBTElEQVRFX0NQSSk7Ci0Jc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KCk7Ci19Ci0KLXZvaWQgc21wX3FpY19yZXNjaGVkdWxlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlhY2tfUUlDX0NQSShRSUNfUkVTQ0hFRFVMRV9DUEkpOwotCXNtcF9yZXNjaGVkdWxlX2ludGVycnVwdCgpOwotfQotCi12b2lkIHNtcF9xaWNfZW5hYmxlX2lycV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JYWNrX1FJQ19DUEkoUUlDX0VOQUJMRV9JUlFfQ1BJKTsKLQlzbXBfZW5hYmxlX2lycV9pbnRlcnJ1cHQoKTsKLX0KLQotdm9pZCBzbXBfcWljX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWFja19RSUNfQ1BJKFFJQ19DQUxMX0ZVTkNUSU9OX0NQSSk7Ci0Jc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7Ci19Ci0KLXZvaWQgc21wX3FpY19jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JYWNrX1FJQ19DUEkoUUlDX0NBTExfRlVOQ1RJT05fU0lOR0xFX0NQSSk7Ci0Jc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotfQotCi12b2lkIHNtcF92aWNfY3BpX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0JX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoaXNfY3B1X3F1YWQoKSkKLQkJYWNrX1FJQ19DUEkoVklDX0NQSV9MRVZFTDApOwotCWVsc2UKLQkJYWNrX1ZJQ19DUEkoVklDX0NQSV9MRVZFTDApOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChWSUNfVElNRVJfQ1BJLCAmdmljX2NwaV9tYWlsYm94W2NwdV0pKQotCQl3cmFwcGVyX3NtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFZJQ19JTlZBTElEQVRFX0NQSSwgJnZpY19jcGlfbWFpbGJveFtjcHVdKSkKLQkJc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChWSUNfUkVTQ0hFRFVMRV9DUEksICZ2aWNfY3BpX21haWxib3hbY3B1XSkpCi0JCXNtcF9yZXNjaGVkdWxlX2ludGVycnVwdCgpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVklDX0VOQUJMRV9JUlFfQ1BJLCAmdmljX2NwaV9tYWlsYm94W2NwdV0pKQotCQlzbXBfZW5hYmxlX2lycV9pbnRlcnJ1cHQoKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFZJQ19DQUxMX0ZVTkNUSU9OX0NQSSwgJnZpY19jcGlfbWFpbGJveFtjcHVdKSkKLQkJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChWSUNfQ0FMTF9GVU5DVElPTl9TSU5HTEVfQ1BJLCAmdmljX2NwaV9tYWlsYm94W2NwdV0pKQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7Ci0Jc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkICppbmZvKQotewotCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JX19mbHVzaF90bGJfYWxsKCk7Ci0JaWYgKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID09IFRMQlNUQVRFX0xBWlkpCi0JCXZveWFnZXJfbGVhdmVfbW0oY3B1KTsKLX0KLQotLyogZmx1c2ggdGhlIFRMQiBvZiBldmVyeSBhY3RpdmUgQ1BVIGluIHRoZSBzeXN0ZW0gKi8KLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCW9uX2VhY2hfY3B1KGRvX2ZsdXNoX3RsYl9hbGwsIDAsIDEpOwotfQotCi0vKiBzZW5kIGEgcmVzY2hlZHVsZSBDUEkgdG8gb25lIENQVSBieSBwaHlzaWNhbCBDUFUgbnVtYmVyKi8KLXN0YXRpYyB2b2lkIHZveWFnZXJfc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQotewotCXNlbmRfb25lX0NQSShjcHUsIFZJQ19SRVNDSEVEVUxFX0NQSSk7Ci19Ci0KLWludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlfX3U4IGk7Ci0JX191OCBjcHVtYXNrID0gaW5iKFZJQ19QUk9DX1dIT19BTV9JKTsKLQlpZiAoKGNwdW1hc2sgJiBRVUFEX0lERU5USUZJRVIpID09IFFVQURfSURFTlRJRklFUikKLQkJcmV0dXJuIGNwdW1hc2sgJiAweDFGOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAoY3B1bWFzayAmICgxIDw8IGkpKQotCQkJcmV0dXJuIGk7Ci0JfQotCXByaW50aygiKiogV0FSTklORyAqKiBJbGxlZ2FsIGNwdWlkIHJldHVybmVkIGJ5IFZJQzogJWQiLCBjcHVtYXNrKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCXJldHVybiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLX0KLQotLyogYnJvYWRjYXN0IGEgaGFsdCB0byBhbGwgb3RoZXIgQ1BVcyAqLwotc3RhdGljIHZvaWQgdm95YWdlcl9zbXBfc2VuZF9zdG9wKHZvaWQpCi17Ci0Jc21wX2NhbGxfZnVuY3Rpb24oc21wX3N0b3BfY3B1X2Z1bmN0aW9uLCBOVUxMLCAxKTsKLX0KLQotLyogdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgaW4gdGltZS5jIHdoZW4gYSBjbG9jayB0aWNrIGZpcmVzCi0gKiB3ZSBuZWVkIHRvIHJlLWJyb2FkY2FzdCB0aGUgdGljayB0byBhbGwgQ1BVcyAqLwotdm9pZCBzbXBfdmljX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCXNlbmRfQ1BJX2FsbGJ1dHNlbGYoVklDX1RJTUVSX0NQSSk7Ci0Jc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCgpOwotfQotCi0vKiBsb2NhbCAocGVyIENQVSkgdGltZXIgaW50ZXJydXB0LiAgSXQgZG9lcyBib3RoIHByb2ZpbGluZyBhbmQKLSAqIHByb2Nlc3Mgc3RhdGlzdGljcy9yZXNjaGVkdWxpbmcuCi0gKgotICogV2UgZG8gcHJvZmlsaW5nIGluIGV2ZXJ5IGxvY2FsIHRpY2ssIHN0YXRpc3RpY3MvcmVzY2hlZHVsaW5nCi0gKiBoYXBwZW4gb25seSBldmVyeSAncHJvZmlsaW5nIG11bHRpcGxpZXInIHRpY2tzLiBUaGUgZGVmYXVsdAotICogbXVsdGlwbGllciBpcyAxIGFuZCBpdCBjYW4gYmUgY2hhbmdlZCBieSB3cml0aW5nIHRoZSBuZXcgbXVsdGlwbGllcgotICogdmFsdWUgaW50byAvcHJvYy9wcm9maWxlLgotICovCi12b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWxvbmcgd2VpZ2h0OwotCi0JcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwotCWlmICgtLXBlcl9jcHUocHJvZl9jb3VudGVyLCBjcHUpIDw9IDApIHsKLQkJLyoKLQkJICogVGhlIG11bHRpcGxpZXIgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGdvdAotCQkgKiB0byB0aGlzIHBvaW50IGFzIGEgcmVzdWx0IG9mIHRoZSB1c2VyIHdyaXRpbmcgdG8KLQkJICogL3Byb2MvcHJvZmlsZS4gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBBUElDCi0JCSAqIHRpbWVyIGFjY29yZGluZ2x5LgotCQkgKgotCQkgKiBJbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IG1hc2tlZCBvZmYgYXQgdGhpcyBwb2ludC4KLQkJICovCi0JCXBlcl9jcHUocHJvZl9jb3VudGVyLCBjcHUpID0gcGVyX2NwdShwcm9mX211bHRpcGxpZXIsIGNwdSk7Ci0JCWlmIChwZXJfY3B1KHByb2ZfY291bnRlciwgY3B1KSAhPQotCQkgICAgcGVyX2NwdShwcm9mX29sZF9tdWx0aXBsaWVyLCBjcHUpKSB7Ci0JCQkvKiBGSVhNRTogbmVlZCB0byB1cGRhdGUgdGhlIHZpYyB0aW1lciB0aWNrIGhlcmUgKi8KLQkJCXBlcl9jcHUocHJvZl9vbGRfbXVsdGlwbGllciwgY3B1KSA9Ci0JCQkgICAgcGVyX2NwdShwcm9mX2NvdW50ZXIsIGNwdSk7Ci0JCX0KLQotCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGVfdm0oZ2V0X2lycV9yZWdzKCkpKTsKLQl9Ci0KLQlpZiAoKCgxIDw8IGNwdSkgJiB2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzKSA9PSAwKQotCQkvKiBvbmx5IGV4dGVuZGVkIFZJQyBwcm9jZXNzb3JzIHBhcnRpY2lwYXRlIGluCi0JCSAqIGludGVycnVwdCBkaXN0cmlidXRpb24gKi8KLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBXZSB0YWtlIHRoZSAnbG9uZycgcmV0dXJuIHBhdGgsIGFuZCB0aGVyZSBldmVyeSBzdWJzeXN0ZW0KLQkgKiBncmFicyB0aGUgYXBwcm9wcmlhdGUgbG9ja3MgKGtlcm5lbCBsb2NrLyBpcnEgbG9jaykuCi0JICoKLQkgKiB3ZSBtaWdodCB3YW50IHRvIGRlY291cGxlIHByb2ZpbGluZyBmcm9tIHRoZSAnbG9uZyBwYXRoJywKLQkgKiBhbmQgZG8gdGhlIHByb2ZpbGluZyB0b3RhbGx5IGluIGFzc2VtYmx5LgotCSAqCi0JICogQ3VycmVudGx5IHRoaXMgaXNuJ3QgdG9vIG11Y2ggb2YgYW4gaXNzdWUgKHBlcmZvcm1hbmNlIHdpc2UpLAotCSAqIHdlIGNhbiB0YWtlIG1vcmUgdGhhbiAxMDBLIGxvY2FsIGlycXMgcGVyIHNlY29uZCBvbiBhIDEwMCBNSHogUDUuCi0JICovCi0KLQlpZiAoKCsrdmljX3RpY2tbY3B1XSAmIDB4NykgIT0gMCkKLQkJcmV0dXJuOwotCS8qIGdldCBoZXJlIGV2ZXJ5IDE2IHRpY2tzIChhYm91dCBldmVyeSAxLzYgb2YgYSBzZWNvbmQpICovCi0KLQkvKiBDaGFuZ2Ugb3VyIHByaW9yaXR5IHRvIGdpdmUgc29tZW9uZSBlbHNlIGEgY2hhbmNlIGF0IGdldHRpbmcKLQkgKiB0aGUgSVJRLiBUaGUgYWxnb3JpdGhtIGdvZXMgbGlrZSB0aGlzOgotCSAqCi0JICogSW4gdGhlIFZJQywgdGhlIGR5bmFtaWNhbGx5IHJvdXRlZCBpbnRlcnJ1cHQgaXMgYWx3YXlzCi0JICogaGFuZGxlZCBieSB0aGUgbG93ZXN0IHByaW9yaXR5IGVsaWdpYmxlIChpLmUuIHJlY2VpdmluZwotCSAqIGludGVycnVwdHMpIENQVS4gIElmID4xIGVsaWdpYmxlIENQVXMgYXJlIGVxdWFsIGxvd2VzdCwgdGhlCi0JICogbG93ZXN0IHByb2Nlc3NvciBudW1iZXIgZ2V0cyBpdC4KLQkgKgotCSAqIFRoZSBwcmlvcml0eSBvZiBhIENQVSBpcyBjb250cm9sbGVkIGJ5IGEgc3BlY2lhbCBwZXItQ1BVCi0JICogVklDIHByaW9yaXR5IHJlZ2lzdGVyIHdoaWNoIGlzIDMgYml0cyB3aWRlIDAgYmVpbmcgbG93ZXN0Ci0JICogYW5kIDcgaGlnaGVzdCBwcmlvcml0eS4uCi0JICoKLQkgKiBUaGVyZWZvcmUgd2Ugc3VidHJhY3QgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGludGVycnVwdHMgZnJvbQotCSAqIHRoZSBudW1iZXIgd2UndmUgZmllbGRlZC4gIElmIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLCB3ZQotCSAqIGxvd2VyIHRoZSBhY3Rpdml0eSBjb3VudCBhbmQgaWYgaXQgaXMgcG9zaXRpdmUsIHdlIHJhaXNlCi0JICogaXQuCi0JICoKLQkgKiBJJ20gYWZyYWlkIHRoaXMgc3RpbGwgbGVhZHMgdG8gb2RkIGxvb2tpbmcgaW50ZXJydXB0IGNvdW50czoKLQkgKiB0aGUgdG90YWxzIGFyZSBhbGwgcm91Z2hseSBlcXVhbCwgYnV0IHRoZSBpbmRpdmlkdWFsIG9uZXMKLQkgKiBsb29rIHJhdGhlciBza2V3ZWQuCi0JICoKLQkgKiBGSVhNRTogVGhpcyBhbGdvcml0aG0gaXMgdG90YWwgY3JhcCB3aGVuIG1peGVkIHdpdGggU01QCi0JICogYWZmaW5pdHkgY29kZSBzaW5jZSB3ZSBub3cgdHJ5IHRvIGV2ZW4gdXAgdGhlIGludGVycnVwdAotCSAqIGNvdW50cyB3aGVuIGFuIGFmZmluaXR5IGJpbmRpbmcgaXMga2VlcGluZyB0aGVtIG9uIGEKLQkgKiBwYXJ0aWN1bGFyIENQVSovCi0Jd2VpZ2h0ID0gKHZpY19pbnRyX2NvdW50W2NwdV0gKiB2b3lhZ2VyX2V4dGVuZGVkX2NwdXMKLQkJICAtIHZpY19pbnRyX3RvdGFsKSA+PiA0OwotCXdlaWdodCArPSA0OwotCWlmICh3ZWlnaHQgPiA3KQotCQl3ZWlnaHQgPSA3OwotCWlmICh3ZWlnaHQgPCAwKQotCQl3ZWlnaHQgPSAwOwotCi0Jb3V0YigoX191OCkgd2VpZ2h0LCBWSUNfUFJJT1JJVFlfUkVHSVNURVIpOwotCi0jaWZkZWYgVk9ZQUdFUl9ERUJVRwotCWlmICgodmljX3RpY2tbY3B1XSAmIDB4RkZGKSA9PSAwKSB7Ci0JCS8qIHByaW50IHRoaXMgbWVzc2FnZSByb3VnaGx5IGV2ZXJ5IDI1IHNlY3MgKi8KLQkJcHJpbnRrKCJWT1lBR0VSIFNNUDogdmljX3RpY2tbJWRdID0gJWx1LCB3ZWlnaHQgPSAlbGRcbiIsCi0JCSAgICAgICBjcHUsIHZpY190aWNrW2NwdV0sIHdlaWdodCk7Ci0JfQotI2VuZGlmCi19Ci0KLS8qIHNldHVwIHRoZSBwcm9maWxpbmcgdGltZXIgKi8KLWludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCi17Ci0JaW50IGk7Ci0KLQlpZiAoKCFtdWx0aXBsaWVyKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIFNldCB0aGUgbmV3IG11bHRpcGxpZXIgZm9yIGVhY2ggQ1BVLiBDUFVzIGRvbid0IHN0YXJ0IHVzaW5nIHRoZQotCSAqIG5ldyB2YWx1ZXMgdW50aWwgdGhlIG5leHQgdGltZXIgaW50ZXJydXB0IGluIHdoaWNoIHRoZXkgZG8gcHJvY2VzcwotCSAqIGFjY291bnRpbmcuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7ICsraSkKLQkJcGVyX2NwdShwcm9mX211bHRpcGxpZXIsIGkpID0gbXVsdGlwbGllcjsKLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGlzIGEgYml0IG9mIGEgbWVzcywgYnV0IGZvcmNlZCBvbiB1cyBieSB0aGUgZ2VuaXJxIGNoYW5nZXMKLSAqIHRoZXJlJ3Mgbm8gZ2VuaXJxIGhhbmRsZXIgdGhhdCByZWFsbHkgZG9lcyB3aGF0IHZveWFnZXIgd2FudHMKLSAqIHNvIGhhY2sgaXQgdXAgd2l0aCB0aGUgc2ltcGxlIElSUSBoYW5kbGVyICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JYmVmb3JlX2hhbmRsZV92aWNfaXJxKGlycSk7Ci0JaGFuZGxlX3NpbXBsZV9pcnEoaXJxLCBkZXNjKTsKLQlhZnRlcl9oYW5kbGVfdmljX2lycShpcnEpOwotfQotCi0vKiAgVGhlIENQSXMgYXJlIGhhbmRsZWQgaW4gdGhlIHBlciBjcHUgODI1OXMsIHNvIHRoZXkgbXVzdCBiZQotICogIGVuYWJsZWQgdG8gYmUgcmVjZWl2ZWQ6IEZJWDogZW5hYmxpbmcgdGhlIENQSXMgaW4gdGhlIGVhcmx5Ci0gKiAgYm9vdCBzZXF1ZW5jZSBpbnRlcmZlcmVzIHdpdGggYnVnIGNoZWNraW5nOyBlbmFibGUgdGhlbSBsYXRlcgotICogIG9uIGluIHNtcF9pbml0ICovCi0jZGVmaW5lIFZJQ19TRVRfR0FURShjcGksIHZlY3RvcikgXAotCXNldF9pbnRyX2dhdGUoKGNwaSkgKyBWSUNfREVGQVVMVF9DUElfQkFTRSwgKHZlY3RvcikpCi0jZGVmaW5lIFFJQ19TRVRfR0FURShjcGksIHZlY3RvcikgXAotCXNldF9pbnRyX2dhdGUoKGNwaSkgKyBRSUNfREVGQVVMVF9DUElfQkFTRSwgKHZlY3RvcikpCi0KLXZvaWQgX19pbml0IHZveWFnZXJfc21wX2ludHJfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JLyogaW5pdGlhbGl6ZSB0aGUgcGVyIGNwdSBpcnEgbWFzayB0byBhbGwgZGlzYWJsZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1X2lkczsgaSsrKQotCQl2aWNfaXJxX21hc2tbaV0gPSAweEZGRkY7Ci0KLQlWSUNfU0VUX0dBVEUoVklDX0NQSV9MRVZFTDAsIHZpY19jcGlfaW50ZXJydXB0KTsKLQotCVZJQ19TRVRfR0FURShWSUNfU1lTX0lOVCwgdmljX3N5c19pbnRlcnJ1cHQpOwotCVZJQ19TRVRfR0FURShWSUNfQ01OX0lOVCwgdmljX2Ntbl9pbnRlcnJ1cHQpOwotCi0JUUlDX1NFVF9HQVRFKFFJQ19USU1FUl9DUEksIHFpY190aW1lcl9pbnRlcnJ1cHQpOwotCVFJQ19TRVRfR0FURShRSUNfSU5WQUxJREFURV9DUEksIHFpY19pbnZhbGlkYXRlX2ludGVycnVwdCk7Ci0JUUlDX1NFVF9HQVRFKFFJQ19SRVNDSEVEVUxFX0NQSSwgcWljX3Jlc2NoZWR1bGVfaW50ZXJydXB0KTsKLQlRSUNfU0VUX0dBVEUoUUlDX0VOQUJMRV9JUlFfQ1BJLCBxaWNfZW5hYmxlX2lycV9pbnRlcnJ1cHQpOwotCVFJQ19TRVRfR0FURShRSUNfQ0FMTF9GVU5DVElPTl9DUEksIHFpY19jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCk7Ci0KLQkvKiBub3cgcHV0IHRoZSBWSUMgZGVzY3JpcHRvciBpbnRvIHRoZSBmaXJzdCA0OCBJUlFzCi0JICoKLQkgKiBUaGlzIGlzIGZvciBsYXRlcjogZmlyc3QgMTYgY29ycmVzcG9uZCB0byBQQyBJUlFzOyBuZXh0IDE2Ci0JICogYXJlIFByaW1hcnkgTUMgSVJRcyBhbmQgZmluYWwgMTYgYXJlIFNlY29uZGFyeSBNQyBJUlFzICovCi0JZm9yIChpID0gMDsgaSA8IDQ4OyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmdmljX2NoaXAsIGhhbmRsZV92aWNfaXJxKTsKLX0KLQotLyogc2VuZCBhIENQSSBhdCBsZXZlbCBjcGkgdG8gYSBzZXQgb2YgY3B1cyBpbiBjcHVzZXQgKHNldCAxIGJpdCBwZXIKLSAqIHByb2Nlc3NvciB0byByZWNlaXZlIENQSSAqLwotc3RhdGljIHZvaWQgc2VuZF9DUEkoX191MzIgY3B1c2V0LCBfX3U4IGNwaSkKLXsKLQlpbnQgY3B1OwotCV9fdTMyIHF1YWRfY3B1c2V0ID0gKGNwdXNldCAmIHZveWFnZXJfcXVhZF9wcm9jZXNzb3JzKTsKLQotCWlmIChjcGkgPCBWSUNfU1RBUlRfRkFLRV9DUEkpIHsKLQkJLyogZmFrZSBDUEkgYXJlIG9ubHkgdXNlZCBmb3IgYm9vdGluZywgc28gc2VuZCB0byB0aGUKLQkJICogZXh0ZW5kZWQgcXVhZHMgYXMgd2VsbC0tLVF1YWRzIG11c3QgYmUgVklDIGJvb3RlZCAqLwotCQlvdXRiKChfX3U4KSAoY3B1c2V0KSwgVklDX0NQSV9SZWdpc3RlcnNbY3BpXSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHF1YWRfY3B1c2V0KQotCQlzZW5kX1FJQ19DUEkocXVhZF9jcHVzZXQsIGNwaSk7Ci0JY3B1c2V0ICY9IH5xdWFkX2NwdXNldDsKLQljcHVzZXQgJj0gMHhmZjsJCS8qIG9ubHkgZmlyc3QgOCBDUFVzIHZhaWxkIGZvciBWSUMgQ1BJICovCi0JaWYgKGNwdXNldCA9PSAwKQotCQlyZXR1cm47Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdXNldCAmICgxIDw8IGNwdSkpCi0JCQlzZXRfYml0KGNwaSwgJnZpY19jcGlfbWFpbGJveFtjcHVdKTsKLQl9Ci0JaWYgKGNwdXNldCkKLQkJb3V0YigoX191OCkgY3B1c2V0LCBWSUNfQ1BJX1JlZ2lzdGVyc1tWSUNfQ1BJX0xFVkVMMF0pOwotfQotCi0vKiBBY2tub3dsZWRnZSByZWNlaXB0IG9mIENQSSBpbiB0aGUgUUlDLCBjbGVhciBpbiBRSUMgaGFyZHdhcmUgYW5kCi0gKiBzZXQgdGhlIGNhY2hlIGxpbmUgdG8gc2hhcmVkIGJ5IHJlYWRpbmcgaXQuCi0gKgotICogRE9OJ1QgbWFrZSB0aGlzIGlubGluZSBvdGhlcndpc2UgdGhlIGNhY2hlIGxpbmUgcmVhZCB3aWxsIGJlCi0gKiBvcHRpbWlzZWQgYXdheQotICogKi8KLXN0YXRpYyBpbnQgYWNrX1FJQ19DUEkoX191OCBjcGkpCi17Ci0JX191OCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWNwaSAmPSA3OwotCi0Jb3V0YigxIDw8IGNwaSwgUUlDX0lOVEVSUlVQVF9DTEVBUjEpOwotCXJldHVybiB2b3lhZ2VyX3F1YWRfY3BpX2FkZHJbY3B1XS0+cWljX2NwaVtjcGldLmNwaTsKLX0KLQotc3RhdGljIHZvaWQgYWNrX3NwZWNpYWxfUUlDX0NQSShfX3U4IGNwaSkKLXsKLQlzd2l0Y2ggKGNwaSkgewotCWNhc2UgVklDX0NNTl9JTlQ6Ci0JCW91dGIoUUlDX0NNTl9JTlQsIFFJQ19JTlRFUlJVUFRfQ0xFQVIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSUNfU1lTX0lOVDoKLQkJb3V0YihRSUNfU1lTX0lOVCwgUUlDX0lOVEVSUlVQVF9DTEVBUjApOwotCQlicmVhazsKLQl9Ci0JLyogYWxzbyBjbGVhciBhdCB0aGUgVklDLCBqdXN0IGluIGNhc2UgKG5vcCBmb3Igbm9uLWV4dGVuZGVkIHByb2MpICovCi0JYWNrX1ZJQ19DUEkoY3BpKTsKLX0KLQotLyogQWNrbm93bGVkZ2UgcmVjZWlwdCBvZiBDUEkgaW4gdGhlIFZJQyAoZXNzZW50aWFsbHkgYW4gRU9JKSAqLwotc3RhdGljIHZvaWQgYWNrX1ZJQ19DUEkoX191OCBjcGkpCi17Ci0jaWZkZWYgVk9ZQUdFUl9ERUJVRwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX191MTYgaXNyOwotCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlzciA9IHZpY19yZWFkX2lzcigpOwotCWlmICgoaXNyICYgKDEgPDwgKGNwaSAmIDcpKSkgPT0gMCkgewotCQlwcmludGsoIlZPWUFHRVIgU01QOiBDUFUlZCBsb3N0IENQSSVkXG4iLCBjcHUsIGNwaSk7Ci0JfQotI2VuZGlmCi0JLyogc2VuZCBzcGVjaWZpYyBFT0k7IHRoZSB0d28gc3lzdGVtIGludGVycnVwdHMgaGF2ZQotCSAqIGJpdCA0IHNldCBmb3IgYSBzZXBhcmF0ZSB2ZWN0b3IgYnV0IGJlaGF2ZSBhcyB0aGUKLQkgKiBjb3JyZXNwb25kaW5nIDMgYml0IGludHIgKi8KLQlvdXRiX3AoMHg2MCB8IChjcGkgJiA3KSwgMHgyMCk7Ci0KLSNpZmRlZiBWT1lBR0VSX0RFQlVHCi0JaWYgKCh2aWNfcmVhZF9pc3IoKSAmICgxIDw8IChjcGkgJiA3KSkpICE9IDApIHsKLQkJcHJpbnRrKCJWT1lBR0VSIFNNUDogQ1BVJWQgc3RpbGwgYXNzZXJ0aW5nIENQSSVkXG4iLCBjcHUsIGNwaSk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgotfQotCi0vKiBjcmliYmVkIHdpdGggdGhhbmtzIGZyb20gaXJxLmMgKi8KLSNkZWZpbmUgX19ieXRlKHgseSkJKCgodW5zaWduZWQgY2hhciAqKSYoeSkpW3hdKQotI2RlZmluZSBjYWNoZWRfMjEoY3B1KQkoX19ieXRlKDAsdmljX2lycV9tYXNrW2NwdV0pKQotI2RlZmluZSBjYWNoZWRfQTEoY3B1KQkoX19ieXRlKDEsdmljX2lycV9tYXNrW2NwdV0pKQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVubWFza192aWNfaXJxKGlycSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhlIGVuYWJsZSBhbmQgZGlzYWJsZSByb3V0aW5lcy4gIFRoaXMgaXMgd2hlcmUgd2UgcnVuIGludG8KLSAqIGNvbmZsaWN0aW5nIGFyY2hpdGVjdHVyYWwgcGhpbG9zb3BoeS4gIEZ1bmRhbWVudGFsbHksIHRoZSB2b3lhZ2VyCi0gKiBhcmNoaXRlY3R1cmUgZG9lcyBub3QgZXhwZWN0IHRvIGhhdmUgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGdsb2JhbGx5Ci0gKiAodGhlIElSUSBjb250cm9sbGVycyBiZWxvbmcgdG8gZWFjaCBDUFUpLiAgVGhlIHByb2Nlc3NvciBtYXNxdWVyYWRlCi0gKiB3aGljaCBpcyB1c2VkIHRvIHN0YXJ0IHRoZSBzeXN0ZW0gc2hvdWxkbid0IGJlIHVzZWQgaW4gYSBydW5uaW5nIE9TCi0gKiBzaW5jZSBpdCB3aWxsIGNhdXNlIGdyZWF0IGNvbmZ1c2lvbiBpZiB0d28gc2VwYXJhdGUgQ1BVcyBkcml2ZSB0bwotICogdGhlIHNhbWUgSVJRIGNvbnRyb2xsZXIgKEkga25vdywgSSd2ZSB0cmllZCBpdCkuCi0gKgotICogVGhlIHNvbHV0aW9uIGlzIGEgdmFyaWFudCBvbiB0aGUgTkNSIGxhenkgU1BMIGRlc2lnbjoKLSAqCi0gKiAxKSBUbyBkaXNhYmxlIGFuIGludGVycnVwdCwgZG8gbm90aGluZyAob3RoZXIgdGhhbiBzZXQgdGhlCi0gKiAgICBJUlFfRElTQUJMRUQgZmxhZykuICBUaGlzIGRhcmVzIHRoZSBpbnRlcnJ1cHQgYWN0dWFsbHkgdG8gYXJyaXZlLgotICoKLSAqIDIpIElmIHRoZSBpbnRlcnJ1cHQgZGFyZXMgdG8gY29tZSBpbiwgcmFpc2UgdGhlIGxvY2FsIG1hc2sgYWdhaW5zdAotICogICAgaXQgKHRoaXMgd2lsbCByZXN1bHQgaW4gYWxsIHRoZSBDUFUgbWFza3MgYmVpbmcgcmFpc2VkCi0gKiAgICBldmVudHVhbGx5KS4KLSAqCi0gKiAzKSBUbyBlbmFibGUgdGhlIGludGVycnVwdCwgbG93ZXIgdGhlIG1hc2sgb24gdGhlIGxvY2FsIENQVSBhbmQKLSAqICAgIGJyb2FkY2FzdCBhbiBJbnRlcnJ1cHQgZW5hYmxlIENQSSB3aGljaCBjYXVzZXMgYWxsIG90aGVyIENQVXMgdG8KLSAqICAgIGFkanVzdCB0aGVpciBtYXNrcyBhY2NvcmRpbmdseS4gICovCi0KLXN0YXRpYyB2b2lkIHVubWFza192aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JLyogbGludXggZG9lc24ndCB0byBwcm9jZXNzb3ItaXJxIGFmZmluaXR5LCBzbyBlbmFibGUgb24KLQkgKiBhbGwgQ1BVcyB3ZSBrbm93IGFib3V0ICovCi0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKSwgcmVhbF9jcHU7Ci0JX191MTYgbWFzayA9ICgxIDw8IGlycSk7Ci0JX191MzIgcHJvY2Vzc29yTGlzdCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVZERUJVRygoIlZPWUFHRVI6IHVubWFza192aWNfaXJxKCVkKSBDUFUlZCBhZmZpbml0eSAweCVseFxuIiwKLQkJaXJxLCBjcHUsIGNwdV9pcnFfYWZmaW5pdHlbY3B1XSkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aWNfaXJxX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KHJlYWxfY3B1KSB7Ci0JCWlmICghKHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMgJiAoMSA8PCByZWFsX2NwdSkpKQotCQkJY29udGludWU7Ci0JCWlmICghKGNwdV9pcnFfYWZmaW5pdHlbcmVhbF9jcHVdICYgbWFzaykpIHsKLQkJCS8qIGlycSBoYXMgbm8gYWZmaW5pdHkgZm9yIHRoaXMgQ1BVLCBpZ25vcmUgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChyZWFsX2NwdSA9PSBjcHUpIHsKLQkJCWVuYWJsZV9sb2NhbF92aWNfaXJxKGlycSk7Ci0JCX0gZWxzZSBpZiAodmljX2lycV9tYXNrW3JlYWxfY3B1XSAmIG1hc2spIHsKLQkJCXZpY19pcnFfZW5hYmxlX21hc2tbcmVhbF9jcHVdIHw9IG1hc2s7Ci0JCQlwcm9jZXNzb3JMaXN0IHw9ICgxIDw8IHJlYWxfY3B1KTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aWNfaXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAocHJvY2Vzc29yTGlzdCkKLQkJc2VuZF9DUEkocHJvY2Vzc29yTGlzdCwgVklDX0VOQUJMRV9JUlFfQ1BJKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza192aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JLyogbGF6eSBkaXNhYmxlLCBkbyBub3RoaW5nICovCi19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9sb2NhbF92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JX191MTYgbWFzayA9IH4oMSA8PCBpcnEpOwotCV9fdTE2IG9sZF9tYXNrID0gdmljX2lycV9tYXNrW2NwdV07Ci0KLQl2aWNfaXJxX21hc2tbY3B1XSAmPSBtYXNrOwotCWlmICh2aWNfaXJxX21hc2tbY3B1XSA9PSBvbGRfbWFzaykKLQkJcmV0dXJuOwotCi0JVkRFQlVHKCgiVk9ZQUdFUiBERUJVRzogRW5hYmxpbmcgaXJxICVkIGluIGhhcmR3YXJlIG9uIENQVSAlZFxuIiwKLQkJaXJxLCBjcHUpKTsKLQotCWlmIChpcnEgJiA4KSB7Ci0JCW91dGJfcChjYWNoZWRfQTEoY3B1KSwgMHhBMSk7Ci0JCSh2b2lkKWluYl9wKDB4QTEpOwotCX0gZWxzZSB7Ci0JCW91dGJfcChjYWNoZWRfMjEoY3B1KSwgMHgyMSk7Ci0JCSh2b2lkKWluYl9wKDB4MjEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9sb2NhbF92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JX191MTYgbWFzayA9ICgxIDw8IGlycSk7Ci0JX191MTYgb2xkX21hc2sgPSB2aWNfaXJxX21hc2tbY3B1XTsKLQotCWlmIChpcnEgPT0gNykKLQkJcmV0dXJuOwotCi0JdmljX2lycV9tYXNrW2NwdV0gfD0gbWFzazsKLQlpZiAob2xkX21hc2sgPT0gdmljX2lycV9tYXNrW2NwdV0pCi0JCXJldHVybjsKLQotCVZERUJVRygoIlZPWUFHRVIgREVCVUc6IERpc2FibGluZyBpcnEgJWQgaW4gaGFyZHdhcmUgb24gQ1BVICVkXG4iLAotCQlpcnEsIGNwdSkpOwotCi0JaWYgKGlycSAmIDgpIHsKLQkJb3V0Yl9wKGNhY2hlZF9BMShjcHUpLCAweEExKTsKLQkJKHZvaWQpaW5iX3AoMHhBMSk7Ci0JfSBlbHNlIHsKLQkJb3V0Yl9wKGNhY2hlZF8yMShjcHUpLCAweDIxKTsKLQkJKHZvaWQpaW5iX3AoMHgyMSk7Ci0JfQotfQotCi0vKiBUaGUgVklDIGlzIGxldmVsIHRyaWdnZXJlZCwgc28gdGhlIGFjayBjYW4gb25seSBiZSBpc3N1ZWQgYWZ0ZXIgdGhlCi0gKiBpbnRlcnJ1cHQgY29tcGxldGVzLiAgSG93ZXZlciwgd2UgZG8gVm95YWdlciBsYXp5IGludGVycnVwdAotICogaGFuZGxpbmcgaGVyZTogSXQgaXMgYW4gZXh0cmVtZWx5IGV4cGVuc2l2ZSBvcGVyYXRpb24gdG8gbWFzayBhbgotICogaW50ZXJydXB0IGluIHRoZSB2aWMsIHNvIHdlIG1lcmVseSBzZXQgYSBmbGFnIChJUlFfRElTQUJMRUQpLiAgSWYKLSAqIHRoaXMgaW50ZXJydXB0IGFjdHVhbGx5IGNvbWVzIGluLCB0aGVuIHdlIG1hc2sgYW5kIGFjayBoZXJlIHRvIHB1c2gKLSAqIHRoZSBpbnRlcnJ1cHQgb2ZmIHRvIGFub3RoZXIgQ1BVICovCi1zdGF0aWMgdm9pZCBiZWZvcmVfaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlfX3U4IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCV9yYXdfc3Bpbl9sb2NrKCZ2aWNfaXJxX2xvY2spOwotCXZpY19pbnRyX3RvdGFsKys7Ci0JdmljX2ludHJfY291bnRbY3B1XSsrOwotCi0JaWYgKCEoY3B1X2lycV9hZmZpbml0eVtjcHVdICYgKDEgPDwgaXJxKSkpIHsKLQkJLyogVGhlIGlycSBpcyBub3QgaW4gb3VyIGFmZmluaXR5IG1hc2ssIHB1c2ggaXQgb2ZmCi0JCSAqIG9udG8gYW5vdGhlciBDUFUgKi8KLQkJVkRFQlVHKCgiVk9ZQUdFUiBERUJVRzogYWZmaW5pdHkgdHJpZ2dlcmVkIGRpc2FibGUgb2YgaXJxICVkICIKLQkJCSJvbiBjcHUgJWRcbiIsIGlycSwgY3B1KSk7Ci0JCWRpc2FibGVfbG9jYWxfdmljX2lycShpcnEpOwotCQkvKiBzZXQgSVJRX0lOUFJPR1JFU1MgdG8gcHJldmVudCB0aGUgaGFuZGxlciBpbiBpcnEuYyBmcm9tCi0JCSAqIGFjdHVhbGx5IGNhbGxpbmcgdGhlIGludGVycnVwdCByb3V0aW5lICovCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfUkVQTEFZIHwgSVJRX0lOUFJPR1JFU1M7Ci0JfSBlbHNlIGlmIChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKLQkJLyogRGFtbiwgdGhlIGludGVycnVwdCBhY3R1YWxseSBhcnJpdmVkLCBkbyB0aGUgbGF6eQotCQkgKiBkaXNhYmxlIHRoaW5nLiBUaGUgaW50ZXJydXB0IHJvdXRpbmUgaW4gaXJxLmMgd2lsbAotCQkgKiBub3QgaGFuZGxlIGEgSVJRX0RJU0FCTEVEIGludGVycnVwdCwgc28gbm90aGluZyBtb3JlCi0JCSAqIG5lZWQgYmUgZG9uZSBoZXJlICovCi0JCVZERUJVRygoIlZPWUFHRVIgREVCVUc6IGxhenkgZGlzYWJsZSBvZiBpcnEgJWQgb24gQ1BVICVkXG4iLAotCQkJaXJxLCBjcHUpKTsKLQkJZGlzYWJsZV9sb2NhbF92aWNfaXJxKGlycSk7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfUkVQTEFZOwotCX0gZWxzZSB7Ci0JCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1JFUExBWTsKLQl9Ci0KLQlfcmF3X3NwaW5fdW5sb2NrKCZ2aWNfaXJxX2xvY2spOwotfQotCi0vKiBGaW5pc2ggdGhlIFZJQyBpbnRlcnJ1cHQ6IGJhc2ljYWxseSBtYXNrICovCi1zdGF0aWMgdm9pZCBhZnRlcl9oYW5kbGVfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCi0JX3Jhd19zcGluX2xvY2soJnZpY19pcnFfbG9jayk7Ci0JewotCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfklSUV9JTlBST0dSRVNTOwotI2lmZGVmIFZPWUFHRVJfREVCVUcKLQkJX191MTYgaXNyOwotI2VuZGlmCi0KLQkJZGVzYy0+c3RhdHVzID0gc3RhdHVzOwotCQlpZiAoKHN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCi0JCQlkaXNhYmxlX2xvY2FsX3ZpY19pcnEoaXJxKTsKLSNpZmRlZiBWT1lBR0VSX0RFQlVHCi0JCS8qIERFQlVHOiBiZWZvcmUgd2UgYWNrLCBjaGVjayB3aGF0J3MgaW4gcHJvZ3Jlc3MgKi8KLQkJaXNyID0gdmljX3JlYWRfaXNyKCk7Ci0JCWlmICgoaXNyICYgKDEgPDwgaXJxKSAmJiAhKHN0YXR1cyAmIElSUV9SRVBMQVkpKSA9PSAwKSB7Ci0JCQlpbnQgaTsKLQkJCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQkJX191OCByZWFsX2NwdTsKLQkJCWludCBtYXNrOwkvKiBVbS4uLiBpbml0aWFsaXplIG1lPz8/IC0tUlIgKi8KLQotCQkJcHJpbnRrKCJWT1lBR0VSIFNNUDogQ1BVJWQgbG9zdCBpbnRlcnJ1cHQgJWRcbiIsCi0JCQkgICAgICAgY3B1LCBpcnEpOwotCQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KHJlYWxfY3B1LCBtYXNrKSB7Ci0KLQkJCQlvdXRiKFZJQ19DUFVfTUFTUVVFUkFERV9FTkFCTEUgfCByZWFsX2NwdSwKLQkJCQkgICAgIFZJQ19QUk9DRVNTT1JfSUQpOwotCQkJCWlzciA9IHZpY19yZWFkX2lzcigpOwotCQkJCWlmIChpc3IgJiAoMSA8PCBpcnEpKSB7Ci0JCQkJCXByaW50awotCQkJCQkgICAgKCJWT1lBR0VSIFNNUDogQ1BVJWQgYWNrIGlycSAlZFxuIiwKLQkJCQkJICAgICByZWFsX2NwdSwgaXJxKTsKLQkJCQkJYWNrX3ZpY19pcnEoaXJxKTsKLQkJCQl9Ci0JCQkJb3V0YihjcHUsIFZJQ19QUk9DRVNTT1JfSUQpOwotCQkJfQotCQl9Ci0jZW5kaWYgLyogVk9ZQUdFUl9ERUJVRyAqLwotCQkvKiBhcyBzb29uIGFzIHdlIGFjaywgdGhlIGludGVycnVwdCBpcyBlbGlnaWJsZSBmb3IKLQkJICogcmVjZWlwdCBieSBhbm90aGVyIENQVSBzbyBldmVyeXRoaW5nIG11c3QgYmUgaW4KLQkJICogb3JkZXIgaGVyZSAgKi8KLQkJYWNrX3ZpY19pcnEoaXJxKTsKLQkJaWYgKHN0YXR1cyAmIElSUV9SRVBMQVkpIHsKLQkJCS8qIHJlcGxheSBpcyBzZXQgaWYgd2UgZGlzYWJsZSB0aGUgaW50ZXJydXB0Ci0JCQkgKiBpbiB0aGUgYmVmb3JlX2hhbmRsZV92aWNfaXJxKCkgcm91dGluZSwgc28KLQkJCSAqIGNsZWFyIHRoZSBpbiBwcm9ncmVzcyBiaXQgaGVyZSB0byBhbGxvdyB0aGUKLQkJCSAqIG5leHQgQ1BVIHRvIGhhbmRsZSB0aGlzIGNvcnJlY3RseSAqLwotCQkJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9JTlBST0dSRVNTKTsKLQkJfQotI2lmZGVmIFZPWUFHRVJfREVCVUcKLQkJaXNyID0gdmljX3JlYWRfaXNyKCk7Ci0JCWlmICgoaXNyICYgKDEgPDwgaXJxKSkgIT0gMCkKLQkJCXByaW50aygiVk9ZQUdFUiBTTVA6IGFmdGVyX2hhbmRsZV92aWNfaXJxKCkgYWZ0ZXIgIgotCQkJICAgICAgICJhY2sgaXJxPSVkLCBpc3I9MHgleFxuIiwgaXJxLCBpc3IpOwotI2VuZGlmIC8qIFZPWUFHRVJfREVCVUcgKi8KLQl9Ci0JX3Jhd19zcGluX3VubG9jaygmdmljX2lycV9sb2NrKTsKLQotCS8qIEFsbCBjb2RlIGFmdGVyIHRoaXMgcG9pbnQgaXMgb3V0IG9mIHRoZSBtYWluIHBhdGggLSB0aGUgSVJRCi0JICogbWF5IGJlIGludGVyY2VwdGVkIGJ5IGFub3RoZXIgQ1BVIGlmIHJlYXNzZXJ0ZWQgKi8KLX0KLQotLyogTGludXggcHJvY2Vzc29yIC0gaW50ZXJydXB0IGFmZmluaXR5IG1hbmlwdWxhdGlvbnMuCi0gKgotICogRm9yIGVhY2ggcHJvY2Vzc29yLCB3ZSBtYWludGFpbiBhIDMyIGJpdCBpcnEgYWZmaW5pdHkgbWFzay4KLSAqIEluaXRpYWxseSBpdCBpcyBzZXQgdG8gYWxsIDEncyBzbyBldmVyeSBwcm9jZXNzb3IgYWNjZXB0cyBldmVyeQotICogaW50ZXJydXB0LiAgSW4gdGhpcyBjYWxsLCB3ZSBjaGFuZ2UgdGhlIHByb2Nlc3NvcidzIGFmZmluaXR5IG1hc2s6Ci0gKgotICogQ2hhbmdlIGZyb20gZW5hYmxlIHRvIGRpc2FibGU6Ci0gKgotICogSWYgdGhlIGludGVycnVwdCBldmVyIGNvbWVzIGluIHRvIHRoZSBwcm9jZXNzb3IsIHdlIHdpbGwgZGlzYWJsZSBpdAotICogYW5kIGFjayBpdCB0byBwdXNoIGl0IG9mZiB0byBhbm90aGVyIENQVSwgc28ganVzdCBhY2NlcHQgdGhlIG1hc2sgaGVyZS4KLSAqCi0gKiBDaGFuZ2UgZnJvbSBkaXNhYmxlIHRvIGVuYWJsZToKLSAqCi0gKiBjaGFuZ2UgdGhlIG1hc2sgYW5kIHRoZW4gZG8gYW4gaW50ZXJydXB0IGVuYWJsZSBDUEkgdG8gcmUtZW5hYmxlIG9uCi0gKiB0aGUgc2VsZWN0ZWQgcHJvY2Vzc29ycyAqLwotCi12b2lkIHNldF92aWNfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCS8qIE9ubHkgZXh0ZW5kZWQgcHJvY2Vzc29ycyBoYW5kbGUgaW50ZXJydXB0cyAqLwotCXVuc2lnbmVkIGxvbmcgcmVhbF9tYXNrOwotCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSAxIDw8IGlycTsKLQlpbnQgY3B1OwotCi0JcmVhbF9tYXNrID0gY3B1c19hZGRyKCptYXNrKVswXSAmIHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnM7Ci0KLQlpZiAoY3B1c19hZGRyKCptYXNrKVswXSA9PSAwKQotCQkvKiBjYW4ndCBoYXZlIG5vIENQVXMgdG8gYWNjZXB0IHRoZSBpbnRlcnJ1cHQgLS0gZXh0cmVtZWx5Ci0JCSAqIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4gKi8KLQkJcmV0dXJuOwotCi0JaWYgKGlycSA9PSAwKQotCQkvKiBjYW4ndCBjaGFuZ2UgdGhlIGFmZmluaXR5IG9mIHRoZSB0aW1lciBJUlEuICBUaGlzCi0JCSAqIGlzIGR1ZSB0byB0aGUgY29uc3RyYWludCBpbiB0aGUgdm95YWdlcgotCQkgKiBhcmNoaXRlY3R1cmUgdGhhdCB0aGUgQ1BJIGFsc28gY29tZXMgaW4gb24gYW5kIElSUQotCQkgKiBsaW5lIGFuZCB3ZSBoYXZlIGNob3NlbiBJUlEwIGZvciB0aGlzLiAgSWYgeW91Ci0JCSAqIHJhaXNlIHRoZSBtYXNrIG9uIHRoaXMgaW50ZXJydXB0LCB0aGUgcHJvY2Vzc29yCi0JCSAqIHdpbGwgbm8tbG9uZ2VyIGJlIGFibGUgdG8gYWNjZXB0IFZJQyBDUElzICovCi0JCXJldHVybjsKLQotCWlmIChpcnEgPj0gMzIpCi0JCS8qIFlvdSBjYW4gb25seSBoYXZlIDMyIGludGVycnVwdHMgaW4gYSB2b3lhZ2VyIHN5c3RlbQotCQkgKiAoYW5kIDMyIG9ubHkgaWYgeW91IGhhdmUgYSBzZWNvbmRhcnkgbWljcm9jaGFubmVsCi0JCSAqIGJ1cykgKi8KLQkJcmV0dXJuOwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJdW5zaWduZWQgbG9uZyBjcHVfbWFzayA9IDEgPDwgY3B1OwotCi0JCWlmIChjcHVfbWFzayAmIHJlYWxfbWFzaykgewotCQkJLyogZW5hYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY3B1ICovCi0JCQljcHVfaXJxX2FmZmluaXR5W2NwdV0gfD0gaXJxX21hc2s7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY3B1ICovCi0JCQljcHVfaXJxX2FmZmluaXR5W2NwdV0gJj0gfmlycV9tYXNrOwotCQl9Ci0JfQotCS8qIHRoaXMgaXMgbWFnaWMsIHdlIG5vdyBoYXZlIHRoZSBjb3JyZWN0IGFmZmluaXR5IG1hcHMsIHNvCi0JICogZW5hYmxlIHRoZSBpbnRlcnJ1cHQuICBUaGlzIHdpbGwgc2VuZCBhbiBlbmFibGUgQ1BJIHRvCi0JICogdGhvc2UgQ1BVcyB3aG8gbmVlZCB0byBlbmFibGUgaXQgaW4gdGhlaXIgbG9jYWwgbWFza3MsCi0JICogY2F1c2luZyB0aGVtIHRvIGNvcnJlY3QgZm9yIHRoZSBuZXcgYWZmaW5pdHkgLiBJZiB0aGUKLQkgKiBpbnRlcnJ1cHQgaXMgY3VycmVudGx5IGdsb2JhbGx5IGRpc2FibGVkLCBpdCB3aWxsIHNpbXBseSBiZQotCSAqIGRpc2FibGVkIGFnYWluIGFzIGl0IGNvbWVzIGluICh2b3lhZ2VyIGxhenkgZGlzYWJsZSkuICBJZgotCSAqIHRoZSBhZmZpbml0eSBtYXAgaXMgdGlnaHRlbmVkIHRvIGRpc2FibGUgdGhlIGludGVycnVwdCBvbiBhCi0JICogY3B1LCBpdCB3aWxsIGJlIHB1c2hlZCBvZmYgd2hlbiBpdCBjb21lcyBpbiAqLwotCXVubWFza192aWNfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja192aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKGlycSAmIDgpIHsKLQkJb3V0YigweDYyLCAweDIwKTsJLyogU3BlY2lmaWMgRU9JIHRvIGNhc2NhZGUgKi8KLQkJb3V0YigweDYwIHwgKGlycSAmIDcpLCAweEEwKTsKLQl9IGVsc2UgewotCQlvdXRiKDB4NjAgfCAoaXJxICYgNyksIDB4MjApOwotCX0KLX0KLQotLyogZW5hYmxlIHRoZSBDUElzLiAgSW4gdGhlIFZJQywgdGhlIENQSXMgYXJlIGRlbGl2ZXJlZCBieSB0aGUgODI1OQotICogYnV0IGFyZSBub3QgdmVjdG9yZWQgYnkgaXQuICBUaGlzIG1lYW5zIHRoYXQgdGhlIDgyNTkgbWFzayBtdXN0IGJlCi0gKiBsb3dlcmVkIHRvIHJlY2VpdmUgdGhlbSAqLwotc3RhdGljIF9faW5pdCB2b2lkIHZpY19lbmFibGVfY3BpKHZvaWQpCi17Ci0JX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBqdXN0IHRha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IG1hc2sgKG5vcCBmb3IgYm9vdCBjcHUpICovCi0JdmljX2lycV9tYXNrW2NwdV0gPSB2aWNfaXJxX21hc2tbYm9vdF9jcHVfaWRdOwotCi0JZW5hYmxlX2xvY2FsX3ZpY19pcnEoVklDX0NQSV9MRVZFTDApOwotCWVuYWJsZV9sb2NhbF92aWNfaXJxKFZJQ19DUElfTEVWRUwxKTsKLQkvKiBmb3Igc3lzIGludCBhbmQgY21uIGludCAqLwotCWVuYWJsZV9sb2NhbF92aWNfaXJxKDcpOwotCi0JaWYgKGlzX2NwdV9xdWFkKCkpIHsKLQkJb3V0YihRSUNfREVGQVVMVF9NQVNLMCwgUUlDX01BU0tfUkVHSVNURVIwKTsKLQkJb3V0YihRSUNfQ1BJX0VOQUJMRSwgUUlDX01BU0tfUkVHSVNURVIxKTsKLQkJVkRFQlVHKCgiVk9ZQUdFUiBTTVA6IFFJQyBFTkFCTEUgQ1BJOiBDUFUlZDogTUFTSyAweCV4XG4iLAotCQkJY3B1LCBRSUNfQ1BJX0VOQUJMRSkpOwotCX0KLQotCVZERUJVRygoIlZPWUFHRVIgU01QOiBFTkFCTEUgQ1BJOiBDUFUlZDogTUFTSyAweCV4XG4iLAotCQljcHUsIHZpY19pcnFfbWFza1tjcHVdKSk7Ci19Ci0KLXZvaWQgdm95YWdlcl9zbXBfZHVtcCgpCi17Ci0JaW50IG9sZF9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGNwdTsKLQotCS8qIGR1bXAgdGhlIGludGVycnVwdCBtYXNrcyBvZiBlYWNoIHByb2Nlc3NvciAqLwotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCV9fdTE2IGltciwgaXNyLCBpcnI7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlvdXRiKFZJQ19DUFVfTUFTUVVFUkFERV9FTkFCTEUgfCBjcHUsIFZJQ19QUk9DRVNTT1JfSUQpOwotCQlpbXIgPSAoaW5iKDB4YTEpIDw8IDgpIHwgaW5iKDB4MjEpOwotCQlvdXRiKDB4MGEsIDB4YTApOwotCQlpcnIgPSBpbmIoMHhhMCkgPDwgODsKLQkJb3V0YigweDBhLCAweDIwKTsKLQkJaXJyIHw9IGluYigweDIwKTsKLQkJb3V0YigweDBiLCAweGEwKTsKLQkJaXNyID0gaW5iKDB4YTApIDw8IDg7Ci0JCW91dGIoMHgwYiwgMHgyMCk7Ci0JCWlzciB8PSBpbmIoMHgyMCk7Ci0JCW91dGIob2xkX2NwdSwgVklDX1BST0NFU1NPUl9JRCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcHJpbnRrKCJcdENQVSVkOiBtYXNrPTB4JXgsIElNUj0weCV4LCBJUlI9MHgleCwgSVNSPTB4JXhcbiIsCi0JCSAgICAgICBjcHUsIHZpY19pcnFfbWFza1tjcHVdLCBpbXIsIGlyciwgaXNyKTsKLSNpZiAwCi0JCS8qIFRoZXNlIGxpbmVzIGFyZSBwdXQgaW4gdG8gdHJ5IHRvIHVuc3RpY2sgYW4gdW4gYWNrJ2QgaXJxICovCi0JCWlmIChpc3IgIT0gMCkgewotCQkJaW50IGlycTsKLQkJCWZvciAoaXJxID0gMDsgaXJxIDwgMTY7IGlycSsrKSB7Ci0JCQkJaWYgKGlzciAmICgxIDw8IGlycSkpIHsKLQkJCQkJcHJpbnRrKCJcdENQVSVkOiBhY2sgaXJxICVkXG4iLAotCQkJCQkgICAgICAgY3B1LCBpcnEpOwotCQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQkJCW91dGIoVklDX0NQVV9NQVNRVUVSQURFX0VOQUJMRSB8IGNwdSwKLQkJCQkJICAgICBWSUNfUFJPQ0VTU09SX0lEKTsKLQkJCQkJYWNrX3ZpY19pcnEoaXJxKTsKLQkJCQkJb3V0YihvbGRfY3B1LCBWSUNfUFJPQ0VTU09SX0lEKTsKLQkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJCX0KLQkJCX0KLQkJfQotI2VuZGlmCi0JfQotfQotCi12b2lkIHNtcF92b3lhZ2VyX3Bvd2VyX29mZih2b2lkICpkdW1teSkKLXsKLQlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IGJvb3RfY3B1X2lkKQotCQl2b3lhZ2VyX3Bvd2VyX29mZigpOwotCWVsc2UKLQkJc21wX3N0b3BfY3B1X2Z1bmN0aW9uKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdm95YWdlcl9zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQkvKiBGSVhNRTogaWdub3JlIG1heF9jcHVzIGZvciBub3cgKi8KLQlzbXBfYm9vdF9jcHVzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCB2b3lhZ2VyX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCi17Ci0JaW5pdF9nZHQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzd2l0Y2hfdG9fbmV3X2dkdCgpOwotCi0JY3B1X29ubGluZV9tYXAgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWNwdV9jYWxsb3V0X21hcCA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JY3B1X2NhbGxpbl9tYXAgPSBDUFVfTUFTS19OT05FOwotCWNwdV9wcmVzZW50X21hcCA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLX0KLQotc3RhdGljIGludCBfX2NwdWluaXQgdm95YWdlcl9jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKLXsKLQkvKiBUaGlzIG9ubHkgd29ya3MgYXQgYm9vdCBmb3IgeDg2LiAgU2VlICJyZXdyaXRlIiBhYm92ZS4gKi8KLQlpZiAoY3B1X2lzc2V0KGNwdSwgc21wX2NvbW1lbmNlZF9tYXNrKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQkvKiBJbiBjYXNlIG9uZSBkaWRuJ3QgY29tZSB1cCAqLwotCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKQotCQlyZXR1cm4gLUVJTzsKLQkvKiBVbmxlYXNoIHRoZSBDUFUhICovCi0JY3B1X3NldChjcHUsIHNtcF9jb21tZW5jZWRfbWFzayk7Ci0Jd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCi0JCW1iKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2b3lhZ2VyX3NtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQotewotCXphcF9sb3dfbWFwcGluZ3MoKTsKLX0KLQotdm9pZCBfX2luaXQgc21wX3NldHVwX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JeDg2X3dyaXRlX3BlcmNwdShjcHVfbnVtYmVyLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZveWFnZXJfc2VuZF9jYWxsX2Z1bmMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNhbGxtYXNrKQotewotCV9fdTMyIG1hc2sgPSBjcHVzX2FkZHIoKmNhbGxtYXNrKVswXSAmIH4oMSA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXNlbmRfQ1BJKG1hc2ssIFZJQ19DQUxMX0ZVTkNUSU9OX0NQSSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZveWFnZXJfc2VuZF9jYWxsX2Z1bmNfc2luZ2xlKGludCBjcHUpCi17Ci0Jc2VuZF9DUEkoMSA8PCBjcHUsIFZJQ19DQUxMX0ZVTkNUSU9OX1NJTkdMRV9DUEkpOwotfQotCi1zdHJ1Y3Qgc21wX29wcyBzbXBfb3BzID0gewotCS5zbXBfcHJlcGFyZV9ib290X2NwdSA9IHZveWFnZXJfc21wX3ByZXBhcmVfYm9vdF9jcHUsCi0JLnNtcF9wcmVwYXJlX2NwdXMgPSB2b3lhZ2VyX3NtcF9wcmVwYXJlX2NwdXMsCi0JLmNwdV91cCA9IHZveWFnZXJfY3B1X3VwLAotCS5zbXBfY3B1c19kb25lID0gdm95YWdlcl9zbXBfY3B1c19kb25lLAotCi0JLnNtcF9zZW5kX3N0b3AgPSB2b3lhZ2VyX3NtcF9zZW5kX3N0b3AsCi0JLnNtcF9zZW5kX3Jlc2NoZWR1bGUgPSB2b3lhZ2VyX3NtcF9zZW5kX3Jlc2NoZWR1bGUsCi0KLQkuc2VuZF9jYWxsX2Z1bmNfaXBpID0gdm95YWdlcl9zZW5kX2NhbGxfZnVuYywKLQkuc2VuZF9jYWxsX2Z1bmNfc2luZ2xlX2lwaSA9IHZveWFnZXJfc2VuZF9jYWxsX2Z1bmNfc2luZ2xlLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NDY0YTIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSAqCi0gKiBBdXRob3I6IEouRS5KLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20KLSAqCi0gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgbWFjaGluZSBzdGF0dXMgbW9uaXRvciB0aHJlYWQgZm9yIHRoZQotICogdm95YWdlciBhcmNoaXRlY3R1cmUuICBUaGlzIGFsbG93cyB1cyB0byBtb25pdG9yIHRoZSBtYWNoaW5lCi0gKiBlbnZpcm9ubWVudCAodGVtcCwgdm9sdGFnZSwgZmFuIGZ1bmN0aW9uKSBhbmQgdGhlIGZyb250IHBhbmVsIGFuZAotICogaW50ZXJuYWwgVVBTLiAgSWYgYSBmYXVsdCBpcyBkZXRlY3RlZCwgdGhpcyB0aHJlYWQgdGFrZXMgY29ycmVjdGl2ZQotICogYWN0aW9uICh1c3VhbGx5IGp1c3QgaW5mb3JtaW5nIGluaXQpCi0gKiAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vdm95YWdlci5oPgotI2luY2x1ZGUgPGFzbS92aWMuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLQotc3RydWN0IHRhc2tfc3RydWN0ICp2b3lhZ2VyX3RocmVhZDsKLXN0YXRpYyBfX3U4IHNldF90aW1lb3V0OwotCi1zdGF0aWMgaW50IGV4ZWN1dGUoY29uc3QgY2hhciAqc3RyaW5nKQotewotCWludCByZXQ7Ci0KLQljaGFyICplbnZwW10gPSB7Ci0JCSJIT01FPS8iLAotCQkiVEVSTT1saW51eCIsCi0JCSJQQVRIPS9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluIiwKLQkJTlVMTCwKLQl9OwotCWNoYXIgKmFyZ3ZbXSA9IHsKLQkJIi9iaW4vYmFzaCIsCi0JCSItYyIsCi0JCShjaGFyICopc3RyaW5nLAotCQlOVUxMLAotCX07Ci0KLQlpZiAoKHJldCA9Ci0JICAgICBjYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIFVNSF9XQUlUX1BST0MpKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVm95YWdlciBmYWlsZWQgdG8gcnVuIFwiJXNcIjogJWlcbiIsIHN0cmluZywKLQkJICAgICAgIHJldCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX2Zyb21fa2VybmVsKHZvaWQpCi17Ci0JaWYgKHZveWFnZXJfc3RhdHVzLnN3aXRjaF9vZmYpIHsKLQotCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29uZmlndXJhYmxlIHZpYSBwcm9jICovCi0JCWV4ZWN1dGUoInVtYXNrIDYwMDsgZWNobyAwID4gL2V0Yy9pbml0cnVubHZsOyBraWxsIC1IVVAgMSIpOwotCX0gZWxzZSBpZiAodm95YWdlcl9zdGF0dXMucG93ZXJfZmFpbCkgewotCQlWREVCVUcoKCJWb3lhZ2VyIGRhZW1vbiBkZXRlY3RlZCBBQyBwb3dlciBmYWlsdXJlXG4iKSk7Ci0KLQkJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbmZpZ3VyZWFibGUgdmlhIHByb2MgKi8KLQkJZXhlY3V0ZSgidW1hc2sgNjAwOyBlY2hvIEYgPiAvZXRjL3Bvd2Vyc3RhdHVzOyBraWxsIC1QV1IgMSIpOwotCQlzZXRfdGltZW91dCA9IDE7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjaGVja19jb250aW51aW5nX2NvbmRpdGlvbih2b2lkKQotewotCWlmICh2b3lhZ2VyX3N0YXR1cy5wb3dlcl9mYWlsKSB7Ci0JCV9fdTggZGF0YTsKLQkJdm95YWdlcl9jYXRfcHNpKFZPWUFHRVJfUFNJX1NVQlJFQUQsCi0JCQkJVk9ZQUdFUl9QU0lfQUNfRkFJTF9SRUcsICZkYXRhKTsKLQkJaWYgKChkYXRhICYgMHgxZikgPT0gMCkgewotCQkJLyogYWxsIHBvd2VyIHJlc3RvcmVkICovCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSAgICAgICAiVk9ZQUdFUiBBQyBwb3dlciByZXN0b3JlZCwgY2FuY2VsbGluZyBzaHV0ZG93blxuIik7Ci0JCQkvKiBGSVhNRTogc2hvdWxkIGJlIHVzZXIgY29uZmlndXJlYWJsZSAqLwotCQkJZXhlY3V0ZQotCQkJICAgICgidW1hc2sgNjAwOyBlY2hvIE8gPiAvZXRjL3Bvd2Vyc3RhdHVzOyBraWxsIC1QV1IgMSIpOwotCQkJc2V0X3RpbWVvdXQgPSAwOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IHRocmVhZCh2b2lkICp1bnVzZWQpCi17Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJWb3lhZ2VyIHN0YXJ0aW5nIG1vbml0b3IgdGhyZWFkXG4iKTsKLQotCWZvciAoOzspIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChzZXRfdGltZW91dCA/IEhaIDogTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCi0JCVZERUJVRygoIlZveWFnZXIgRGFlbW9uIGF3b2tlblxuIikpOwotCQlpZiAodm95YWdlcl9zdGF0dXMucmVxdWVzdF9mcm9tX2tlcm5lbCA9PSAwKSB7Ci0JCQkvKiBwcm9iYWJseSBhd29rZW4gZnJvbSB0aW1lb3V0ICovCi0JCQljaGVja19jb250aW51aW5nX2NvbmRpdGlvbigpOwotCQl9IGVsc2UgewotCQkJY2hlY2tfZnJvbV9rZXJuZWwoKTsKLQkJCXZveWFnZXJfc3RhdHVzLnJlcXVlc3RfZnJvbV9rZXJuZWwgPSAwOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCB2b3lhZ2VyX3RocmVhZF9zdGFydCh2b2lkKQotewotCXZveWFnZXJfdGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkLCBOVUxMLCAia3ZveWFnZXJkIik7Ci0JaWYgKElTX0VSUih2b3lhZ2VyX3RocmVhZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVm95YWdlcjogRmFpbGVkIHRvIGNyZWF0ZSBzeXN0ZW0gbW9uaXRvciB0aHJlYWQuXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIodm95YWdlcl90aHJlYWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHZveWFnZXJfdGhyZWFkX3N0b3Aodm9pZCkKLXsKLQlrdGhyZWFkX3N0b3Aodm95YWdlcl90aHJlYWQpOwotfQotCi1tb2R1bGVfaW5pdCh2b3lhZ2VyX3RocmVhZF9zdGFydCk7Ci1tb2R1bGVfZXhpdCh2b3lhZ2VyX3RocmVhZF9zdG9wKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hdGgtZW11L2dldF9hZGRyZXNzLmMgYi9hcmNoL3g4Ni9tYXRoLWVtdS9nZXRfYWRkcmVzcy5jCmluZGV4IDQyMGIzYjYuLjZlZjVlOTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hdGgtZW11L2dldF9hZGRyZXNzLmMKKysrIGIvYXJjaC94ODYvbWF0aC1lbXUvZ2V0X2FkZHJlc3MuYwpAQCAtMTUwLDExICsxNTAsOSBAQAogI2VuZGlmIC8qIFBBUkFOT0lEICovCiAKIAlzd2l0Y2ggKHNlZ21lbnQpIHsKLQkJLyogZ3MgaXNuJ3QgdXNlZCBieSB0aGUga2VybmVsLCBzbyBpdCBzdGlsbCBoYXMgaXRzCi0JCSAgIHVzZXItc3BhY2UgdmFsdWUuICovCiAJY2FzZSBQUkVGSVhfR1NfIC0gMToKLQkJLyogTi5CLiAtIG1vdmwgJXNlZywgbWVtIGlzIGEgMiBieXRlIHdyaXRlIHJlZ2FyZGxlc3Mgb2YgcHJlZml4ICovCi0JCXNhdmVzZWdtZW50KGdzLCBhZGRyLT5zZWxlY3Rvcik7CisJCS8qIHVzZXIgZ3MgaGFuZGxpbmcgY2FuIGJlIGxhenksIHVzZSBzcGVjaWFsIGFjY2Vzc29ycyAqLworCQlhZGRyLT5zZWxlY3RvciA9IGdldF91c2VyX2dzKEZQVV9pbmZvLT5yZWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYWRkci0+c2VsZWN0b3IgPSBQTV9SRUdfKHNlZ21lbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCBkOGNjOTZhMi4uMDg1Mzc3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTEsNiArMSw4IEBACi1vYmoteQk6PSAgaW5pdF8kKEJJVFMpLm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vIFwKK29iai15CTo9ICBpbml0Lm8gaW5pdF8kKEJJVFMpLm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vIFwKIAkgICAgcGF0Lm8gcGd0YWJsZS5vIGd1cC5vCiAKK29iai0kKENPTkZJR19TTVApCQkrPSB0bGIubworCiBvYmotJChDT05GSUdfWDg2XzMyKQkJKz0gcGd0YWJsZV8zMi5vIGlvbWFwXzMyLm8KIAogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkJKz0gaHVnZXRsYnBhZ2UubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZXh0YWJsZS5jIGIvYXJjaC94ODYvbW0vZXh0YWJsZS5jCmluZGV4IDdlOGRiNTMuLjYxYjQxY2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2V4dGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9leHRhYmxlLmMKQEAgLTIzLDYgKzIzLDEyIEBACiAKIAlmaXh1cCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPmlwKTsKIAlpZiAoZml4dXApIHsKKwkJLyogSWYgZml4dXAgaXMgbGVzcyB0aGFuIDE2LCBpdCBtZWFucyB1YWNjZXNzIGVycm9yICovCisJCWlmIChmaXh1cC0+Zml4dXAgPCAxNikgeworCQkJY3VycmVudF90aHJlYWRfaW5mbygpLT51YWNjZXNzX2VyciA9IC1FRkFVTFQ7CisJCQlyZWdzLT5pcCArPSBmaXh1cC0+Zml4dXA7CisJCQlyZXR1cm4gMTsKKwkJfQogCQlyZWdzLT5pcCA9IGZpeHVwLT5maXh1cDsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggYzc2ZWYxZC4uYTAzYjcyNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xLDczICsxLDc5IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCBJbmMuLCBJbmdvIE1vbG5hcgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgkJLyogRm9yIHVuYmxhbmtfc2NyZWVuKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgkJLyogZm9yIG1heF9sb3dfcGZuICovCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KIAogLyoKLSAqIFBhZ2UgZmF1bHQgZXJyb3IgY29kZSBiaXRzCi0gKgliaXQgMCA9PSAwIG1lYW5zIG5vIHBhZ2UgZm91bmQsIDEgbWVhbnMgcHJvdGVjdGlvbiBmYXVsdAotICoJYml0IDEgPT0gMCBtZWFucyByZWFkLCAxIG1lYW5zIHdyaXRlCi0gKgliaXQgMiA9PSAwIG1lYW5zIGtlcm5lbCwgMSBtZWFucyB1c2VyLW1vZGUKLSAqCWJpdCAzID09IDEgbWVhbnMgdXNlIG9mIHJlc2VydmVkIGJpdCBkZXRlY3RlZAotICoJYml0IDQgPT0gMSBtZWFucyBmYXVsdCB3YXMgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2gKKyAqIFBhZ2UgZmF1bHQgZXJyb3IgY29kZSBiaXRzOgorICoKKyAqICAgYml0IDAgPT0JIDA6IG5vIHBhZ2UgZm91bmQJMTogcHJvdGVjdGlvbiBmYXVsdAorICogICBiaXQgMSA9PQkgMDogcmVhZCBhY2Nlc3MJCTE6IHdyaXRlIGFjY2VzcworICogICBiaXQgMiA9PQkgMDoga2VybmVsLW1vZGUgYWNjZXNzCTE6IHVzZXItbW9kZSBhY2Nlc3MKKyAqICAgYml0IDMgPT0JCQkJMTogdXNlIG9mIHJlc2VydmVkIGJpdCBkZXRlY3RlZAorICogICBiaXQgNCA9PQkJCQkxOiBmYXVsdCB3YXMgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2gKICAqLwotI2RlZmluZSBQRl9QUk9UCQkoMTw8MCkKLSNkZWZpbmUgUEZfV1JJVEUJKDE8PDEpCi0jZGVmaW5lIFBGX1VTRVIJCSgxPDwyKQotI2RlZmluZSBQRl9SU1ZECQkoMTw8MykKLSNkZWZpbmUgUEZfSU5TVFIJKDE8PDQpCitlbnVtIHg4Nl9wZl9lcnJvcl9jb2RlIHsKIAorCVBGX1BST1QJCT0JCTEgPDwgMCwKKwlQRl9XUklURQk9CQkxIDw8IDEsCisJUEZfVVNFUgkJPQkJMSA8PCAyLAorCVBGX1JTVkQJCT0JCTEgPDwgMywKKwlQRl9JTlNUUgk9CQkxIDw8IDQsCit9OworCisvKgorICogUmV0dXJucyAwIGlmIG1taW90cmFjZSBpcyBkaXNhYmxlZCwgb3IgaWYgdGhlIGZhdWx0IGlzIG5vdAorICogaGFuZGxlZCBieSBtbWlvdHJhY2U6CisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGttbWlvX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0jaWZkZWYgQ09ORklHX01NSU9UUkFDRQogCWlmICh1bmxpa2VseShpc19rbW1pb19hY3RpdmUoKSkpCiAJCWlmIChrbW1pb19oYW5kbGVyKHJlZ3MsIGFkZHIpID09IDEpCiAJCQlyZXR1cm4gLTE7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0jaWZkZWYgQ09ORklHX0tQUk9CRVMKIAlpbnQgcmV0ID0gMDsKIAogCS8qIGtwcm9iZV9ydW5uaW5nKCkgbmVlZHMgc21wX3Byb2Nlc3Nvcl9pZCgpICovCi0JaWYgKCF1c2VyX21vZGVfdm0ocmVncykpIHsKKwlpZiAoa3Byb2Jlc19idWlsdF9pbigpICYmICF1c2VyX21vZGVfdm0ocmVncykpIHsKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWlmIChrcHJvYmVfcnVubmluZygpICYmIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHJlZ3MsIDE0KSkKIAkJCXJldCA9IDE7CkBAIC03NSwyOSArODEsNzYgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiAvKgotICogWDg2XzMyCi0gKiBTb21ldGltZXMgQU1EIEF0aGxvbi9PcHRlcm9uIENQVXMgcmVwb3J0IGludmFsaWQgZXhjZXB0aW9ucyBvbiBwcmVmZXRjaC4KLSAqIENoZWNrIHRoYXQgaGVyZSBhbmQgaWdub3JlIGl0LgorICogUHJlZmV0Y2ggcXVpcmtzOgogICoKLSAqIFg4Nl82NAotICogU29tZXRpbWVzIHRoZSBDUFUgcmVwb3J0cyBpbnZhbGlkIGV4Y2VwdGlvbnMgb24gcHJlZmV0Y2guCi0gKiBDaGVjayB0aGF0IGhlcmUgYW5kIGlnbm9yZSBpdC4KKyAqIDMyLWJpdCBtb2RlOgogICoKLSAqIE9wY29kZSBjaGVja2VyIGJhc2VkIG9uIGNvZGUgYnkgUmljaGFyZCBCcnVubmVyCisgKiAgIFNvbWV0aW1lcyBBTUQgQXRobG9uL09wdGVyb24gQ1BVcyByZXBvcnQgaW52YWxpZCBleGNlcHRpb25zIG9uIHByZWZldGNoLgorICogICBDaGVjayB0aGF0IGhlcmUgYW5kIGlnbm9yZSBpdC4KKyAqCisgKiA2NC1iaXQgbW9kZToKKyAqCisgKiAgIFNvbWV0aW1lcyB0aGUgQ1BVIHJlcG9ydHMgaW52YWxpZCBleGNlcHRpb25zIG9uIHByZWZldGNoLgorICogICBDaGVjayB0aGF0IGhlcmUgYW5kIGlnbm9yZSBpdC4KKyAqCisgKiBPcGNvZGUgY2hlY2tlciBiYXNlZCBvbiBjb2RlIGJ5IFJpY2hhcmQgQnJ1bm5lci4KICAqLwotc3RhdGljIGludCBpc19wcmVmZXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQKK2NoZWNrX3ByZWZldGNoX29wY29kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqaW5zdHIsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgb3Bjb2RlLCBpbnQgKnByZWZldGNoKQogewotCXVuc2lnbmVkIGNoYXIgKmluc3RyOwotCWludCBzY2FuX21vcmUgPSAxOwotCWludCBwcmVmZXRjaCA9IDA7CisJdW5zaWduZWQgY2hhciBpbnN0cl9oaSA9IG9wY29kZSAmIDB4ZjA7CisJdW5zaWduZWQgY2hhciBpbnN0cl9sbyA9IG9wY29kZSAmIDB4MGY7CisKKwlzd2l0Y2ggKGluc3RyX2hpKSB7CisJY2FzZSAweDIwOgorCWNhc2UgMHgzMDoKKwkJLyoKKwkJICogVmFsdWVzIDB4MjYsMHgyRSwweDM2LDB4M0UgYXJlIHZhbGlkIHg4NiBwcmVmaXhlcy4KKwkJICogSW4gWDg2XzY0IGxvbmcgbW9kZSwgdGhlIENQVSB3aWxsIHNpZ25hbCBpbnZhbGlkCisJCSAqIG9wY29kZSBpZiBzb21lIG9mIHRoZXNlIHByZWZpeGVzIGFyZSBwcmVzZW50IHNvCisJCSAqIFg4Nl82NCB3aWxsIG5ldmVyIGdldCBoZXJlIGFueXdheQorCQkgKi8KKwkJcmV0dXJuICgoaW5zdHJfbG8gJiA3KSA9PSAweDYpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIDB4NDA6CisJCS8qCisJCSAqIEluIEFNRDY0IGxvbmcgbW9kZSAweDQwLi4weDRGIGFyZSB2YWxpZCBSRVggcHJlZml4ZXMKKwkJICogTmVlZCB0byBmaWd1cmUgb3V0IHVuZGVyIHdoYXQgaW5zdHJ1Y3Rpb24gbW9kZSB0aGUKKwkJICogaW5zdHJ1Y3Rpb24gd2FzIGlzc3VlZC4gQ291bGQgY2hlY2sgdGhlIExEVCBmb3IgbG0sCisJCSAqIGJ1dCBmb3Igbm93IGl0J3MgZ29vZCBlbm91Z2ggdG8gYXNzdW1lIHRoYXQgbG9uZworCQkgKiBtb2RlIG9ubHkgdXNlcyB3ZWxsIGtub3duIHNlZ21lbnRzIG9yIGtlcm5lbC4KKwkJICovCisJCXJldHVybiAoIXVzZXJfbW9kZShyZWdzKSkgfHwgKHJlZ3MtPmNzID09IF9fVVNFUl9DUyk7CisjZW5kaWYKKwljYXNlIDB4NjA6CisJCS8qIDB4NjQgdGhydSAweDY3IGFyZSB2YWxpZCBwcmVmaXhlcyBpbiBhbGwgbW9kZXMuICovCisJCXJldHVybiAoaW5zdHJfbG8gJiAweEMpID09IDB4NDsKKwljYXNlIDB4RjA6CisJCS8qIDB4RjAsIDB4RjIsIDB4RjMgYXJlIHZhbGlkIHByZWZpeGVzIGluIGFsbCBtb2Rlcy4gKi8KKwkJcmV0dXJuICFpbnN0cl9sbyB8fCAoaW5zdHJfbG8+PjEpID09IDE7CisJY2FzZSAweDAwOgorCQkvKiBQcmVmZXRjaCBpbnN0cnVjdGlvbiBpcyAweDBGMEQgb3IgMHgwRjE4ICovCisJCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcyhpbnN0ciwgb3Bjb2RlKSkKKwkJCXJldHVybiAwOworCisJCSpwcmVmZXRjaCA9IChpbnN0cl9sbyA9PSAweEYpICYmCisJCQkob3Bjb2RlID09IDB4MEQgfHwgb3Bjb2RlID09IDB4MTgpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2lzX3ByZWZldGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKIAl1bnNpZ25lZCBjaGFyICptYXhfaW5zdHI7CisJdW5zaWduZWQgY2hhciAqaW5zdHI7CisJaW50IHByZWZldGNoID0gMDsKIAogCS8qCiAJICogSWYgaXQgd2FzIGEgZXhlYyAoaW5zdHJ1Y3Rpb24gZmV0Y2gpIGZhdWx0IG9uIE5YIHBhZ2UsIHRoZW4KQEAgLTEwNiwxNjQgKzE1OSw0MiBAQAogCWlmIChlcnJvcl9jb2RlICYgUEZfSU5TVFIpCiAJCXJldHVybiAwOwogCi0JaW5zdHIgPSAodW5zaWduZWQgY2hhciAqKWNvbnZlcnRfaXBfdG9fbGluZWFyKGN1cnJlbnQsIHJlZ3MpOworCWluc3RyID0gKHZvaWQgKiljb252ZXJ0X2lwX3RvX2xpbmVhcihjdXJyZW50LCByZWdzKTsKIAltYXhfaW5zdHIgPSBpbnN0ciArIDE1OwogCiAJaWYgKHVzZXJfbW9kZShyZWdzKSAmJiBpbnN0ciA+PSAodW5zaWduZWQgY2hhciAqKVRBU0tfU0laRSkKIAkJcmV0dXJuIDA7CiAKLQl3aGlsZSAoc2Nhbl9tb3JlICYmIGluc3RyIDwgbWF4X2luc3RyKSB7CisJd2hpbGUgKGluc3RyIDwgbWF4X2luc3RyKSB7CiAJCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwotCQl1bnNpZ25lZCBjaGFyIGluc3RyX2hpOwotCQl1bnNpZ25lZCBjaGFyIGluc3RyX2xvOwogCiAJCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcyhpbnN0ciwgb3Bjb2RlKSkKIAkJCWJyZWFrOwogCi0JCWluc3RyX2hpID0gb3Bjb2RlICYgMHhmMDsKLQkJaW5zdHJfbG8gPSBvcGNvZGUgJiAweDBmOwogCQlpbnN0cisrOwogCi0JCXN3aXRjaCAoaW5zdHJfaGkpIHsKLQkJY2FzZSAweDIwOgotCQljYXNlIDB4MzA6Ci0JCQkvKgotCQkJICogVmFsdWVzIDB4MjYsMHgyRSwweDM2LDB4M0UgYXJlIHZhbGlkIHg4NiBwcmVmaXhlcy4KLQkJCSAqIEluIFg4Nl82NCBsb25nIG1vZGUsIHRoZSBDUFUgd2lsbCBzaWduYWwgaW52YWxpZAotCQkJICogb3Bjb2RlIGlmIHNvbWUgb2YgdGhlc2UgcHJlZml4ZXMgYXJlIHByZXNlbnQgc28KLQkJCSAqIFg4Nl82NCB3aWxsIG5ldmVyIGdldCBoZXJlIGFueXdheQotCQkJICovCi0JCQlzY2FuX21vcmUgPSAoKGluc3RyX2xvICYgNykgPT0gMHg2KTsKKwkJaWYgKCFjaGVja19wcmVmZXRjaF9vcGNvZGUocmVncywgaW5zdHIsIG9wY29kZSwgJnByZWZldGNoKSkKIAkJCWJyZWFrOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJY2FzZSAweDQwOgotCQkJLyoKLQkJCSAqIEluIEFNRDY0IGxvbmcgbW9kZSAweDQwLi4weDRGIGFyZSB2YWxpZCBSRVggcHJlZml4ZXMKLQkJCSAqIE5lZWQgdG8gZmlndXJlIG91dCB1bmRlciB3aGF0IGluc3RydWN0aW9uIG1vZGUgdGhlCi0JCQkgKiBpbnN0cnVjdGlvbiB3YXMgaXNzdWVkLiBDb3VsZCBjaGVjayB0aGUgTERUIGZvciBsbSwKLQkJCSAqIGJ1dCBmb3Igbm93IGl0J3MgZ29vZCBlbm91Z2ggdG8gYXNzdW1lIHRoYXQgbG9uZwotCQkJICogbW9kZSBvbmx5IHVzZXMgd2VsbCBrbm93biBzZWdtZW50cyBvciBrZXJuZWwuCi0JCQkgKi8KLQkJCXNjYW5fbW9yZSA9ICghdXNlcl9tb2RlKHJlZ3MpKSB8fCAocmVncy0+Y3MgPT0gX19VU0VSX0NTKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWNhc2UgMHg2MDoKLQkJCS8qIDB4NjQgdGhydSAweDY3IGFyZSB2YWxpZCBwcmVmaXhlcyBpbiBhbGwgbW9kZXMuICovCi0JCQlzY2FuX21vcmUgPSAoaW5zdHJfbG8gJiAweEMpID09IDB4NDsKLQkJCWJyZWFrOwotCQljYXNlIDB4RjA6Ci0JCQkvKiAweEYwLCAweEYyLCAweEYzIGFyZSB2YWxpZCBwcmVmaXhlcyBpbiBhbGwgbW9kZXMuICovCi0JCQlzY2FuX21vcmUgPSAhaW5zdHJfbG8gfHwgKGluc3RyX2xvPj4xKSA9PSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDoKLQkJCS8qIFByZWZldGNoIGluc3RydWN0aW9uIGlzIDB4MEYwRCBvciAweDBGMTggKi8KLQkJCXNjYW5fbW9yZSA9IDA7Ci0KLQkJCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcyhpbnN0ciwgb3Bjb2RlKSkKLQkJCQlicmVhazsKLQkJCXByZWZldGNoID0gKGluc3RyX2xvID09IDB4RikgJiYKLQkJCQkob3Bjb2RlID09IDB4MEQgfHwgb3Bjb2RlID09IDB4MTgpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzY2FuX21vcmUgPSAwOwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAJcmV0dXJuIHByZWZldGNoOwogfQogCi1zdGF0aWMgdm9pZCBmb3JjZV9zaWdfaW5mb19mYXVsdChpbnQgc2lfc2lnbm8sIGludCBzaV9jb2RlLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgdm9pZAorZm9yY2Vfc2lnX2luZm9fZmF1bHQoaW50IHNpX3NpZ25vLCBpbnQgc2lfY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXNpZ2luZm9fdCBpbmZvOwogCi0JaW5mby5zaV9zaWdubyA9IHNpX3NpZ25vOwotCWluZm8uc2lfZXJybm8gPSAwOwotCWluZm8uc2lfY29kZSA9IHNpX2NvZGU7Ci0JaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopYWRkcmVzczsKKwlpbmZvLnNpX3NpZ25vCT0gc2lfc2lnbm87CisJaW5mby5zaV9lcnJubwk9IDA7CisJaW5mby5zaV9jb2RlCT0gc2lfY29kZTsKKwlpbmZvLnNpX2FkZHIJPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOworCiAJZm9yY2Vfc2lnX2luZm8oc2lfc2lnbm8sICZpbmZvLCB0c2spOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIGludCBiYWRfYWRkcmVzcyh2b2lkICpwKQotewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0JcmV0dXJuIHByb2JlX2tlcm5lbF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nICopcCwgZHVtbXkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGR1bXBfcGFnZXRhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JX190eXBlb2ZfXyhwdGVfdmFsKF9fcHRlKDApKSkgcGFnZTsKLQotCXBhZ2UgPSByZWFkX2NyMygpOwotCXBhZ2UgPSAoKF9fdHlwZW9mX18ocGFnZSkgKikgX192YShwYWdlKSlbYWRkcmVzcyA+PiBQR0RJUl9TSElGVF07Ci0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLQlwcmludGsoIipwZHB0ID0gJTAxNkx4ICIsIHBhZ2UpOwotCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JICAgICYmIHBhZ2UgJiBfUEFHRV9QUkVTRU5UKSB7Ci0JCXBhZ2UgJj0gUEFHRV9NQVNLOwotCQlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpWyhhZGRyZXNzID4+IFBNRF9TSElGVCkKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChQVFJTX1BFUl9QTUQgLSAxKV07Ci0JCXByaW50ayhLRVJOX0NPTlQgIipwZGUgPSAlMDE2THggIiwgcGFnZSk7Ci0JCXBhZ2UgJj0gfl9QQUdFX05YOwotCX0KLSNlbHNlCi0JcHJpbnRrKCIqcGRlID0gJTA4bHggIiwgcGFnZSk7Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgbXVzdCBub3QgZGlyZWN0bHkgYWNjZXNzIHRoZSBwdGUgaW4gdGhlIGhpZ2hwdGUKLQkgKiBjYXNlIGlmIHRoZSBwYWdlIHRhYmxlIGlzIGxvY2F0ZWQgaW4gaGlnaG1lbS4KLQkgKiBBbmQgbGV0J3MgcmF0aGVyIG5vdCBrbWFwLWF0b21pYyB0aGUgcHRlLCBqdXN0IGluIGNhc2UKLQkgKiBpdCdzIGFsbG9jYXRlZCBhbHJlYWR5LgotCSAqLwotCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JICAgICYmIChwYWdlICYgX1BBR0VfUFJFU0VOVCkKLQkgICAgJiYgIShwYWdlICYgX1BBR0VfUFNFKSkgewotCQlwYWdlICY9IFBBR0VfTUFTSzsKLQkJcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVsoYWRkcmVzcyA+PiBQQUdFX1NISUZUKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKFBUUlNfUEVSX1BURSAtIDEpXTsKLQkJcHJpbnRrKCIqcHRlID0gJTAqTHggIiwgc2l6ZW9mKHBhZ2UpKjIsICh1NjQpcGFnZSk7Ci0JfQotCi0JcHJpbnRrKCJcbiIpOwotI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwotCXBnZF90ICpwZ2Q7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwotCXB0ZV90ICpwdGU7Ci0KLQlwZ2QgPSAocGdkX3QgKilyZWFkX2NyMygpOwotCi0JcGdkID0gX192YSgodW5zaWduZWQgbG9uZylwZ2QgJiBQSFlTSUNBTF9QQUdFX01BU0spOwotCXBnZCArPSBwZ2RfaW5kZXgoYWRkcmVzcyk7Ci0JaWYgKGJhZF9hZGRyZXNzKHBnZCkpIGdvdG8gYmFkOwotCXByaW50aygiUEdEICVseCAiLCBwZ2RfdmFsKCpwZ2QpKTsKLQlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSBnb3RvIHJldDsKLQotCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKLQlpZiAoYmFkX2FkZHJlc3MocHVkKSkgZ290byBiYWQ7Ci0JcHJpbnRrKCJQVUQgJWx4ICIsIHB1ZF92YWwoKnB1ZCkpOwotCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkgfHwgcHVkX2xhcmdlKCpwdWQpKQotCQlnb3RvIHJldDsKLQotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKLQlpZiAoYmFkX2FkZHJlc3MocG1kKSkgZ290byBiYWQ7Ci0JcHJpbnRrKCJQTUQgJWx4ICIsIHBtZF92YWwoKnBtZCkpOwotCWlmICghcG1kX3ByZXNlbnQoKnBtZCkgfHwgcG1kX2xhcmdlKCpwbWQpKSBnb3RvIHJldDsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JaWYgKGJhZF9hZGRyZXNzKHB0ZSkpIGdvdG8gYmFkOwotCXByaW50aygiUFRFICVseCIsIHB0ZV92YWwoKnB0ZSkpOwotcmV0OgotCXByaW50aygiXG4iKTsKLQlyZXR1cm47Ci1iYWQ6Ci0JcHJpbnRrKCJCQURcbiIpOwotI2VuZGlmCi19CitERUZJTkVfU1BJTkxPQ0socGdkX2xvY2spOworTElTVF9IRUFEKHBnZF9saXN0KTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnZtYWxsb2Nfc3luY19vbmUocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQpAQCAtMjg0LDcgKzIxNSw2IEBACiAJICogYW5kIHJlZHVuZGFudCB3aXRoIHRoZSBzZXRfcG1kKCkgb24gbm9uLVBBRS4gQXMgd291bGQKIAkgKiBzZXRfcHVkLgogCSAqLwotCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCXB1ZF9rID0gcHVkX29mZnNldChwZ2RfaywgYWRkcmVzcyk7CiAJaWYgKCFwdWRfcHJlc2VudCgqcHVkX2spKQpAQCAtMjk0LDQ2ICsyMjQsMzM0IEBACiAJcG1kX2sgPSBwbWRfb2Zmc2V0KHB1ZF9rLCBhZGRyZXNzKTsKIAlpZiAoIXBtZF9wcmVzZW50KCpwbWRfaykpCiAJCXJldHVybiBOVUxMOworCiAJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkgewogCQlzZXRfcG1kKHBtZCwgKnBtZF9rKTsKIAkJYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJQlVHX09OKHBtZF9wYWdlKCpwbWQpICE9IHBtZF9wYWdlKCpwbWRfaykpOworCX0KKwogCXJldHVybiBwbWRfazsKIH0KKwordm9pZCB2bWFsbG9jX3N5bmNfYWxsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJaWYgKFNIQVJFRF9LRVJORUxfUE1EKQorCQlyZXR1cm47CisKKwlmb3IgKGFkZHJlc3MgPSBWTUFMTE9DX1NUQVJUICYgUE1EX01BU0s7CisJICAgICBhZGRyZXNzID49IFRBU0tfU0laRSAmJiBhZGRyZXNzIDwgRklYQUREUl9UT1A7CisJICAgICBhZGRyZXNzICs9IFBNRF9TSVpFKSB7CisKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBnZF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJnBnZF9saXN0LCBscnUpIHsKKwkJCWlmICghdm1hbGxvY19zeW5jX29uZShwYWdlX2FkZHJlc3MocGFnZSksIGFkZHJlc3MpKQorCQkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBnZF9sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogMzItYml0OgorICoKKyAqICAgSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2Mgb3IgbW9kdWxlIG1hcHBpbmcgYXJlYQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IHZtYWxsb2NfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXVuc2lnbmVkIGxvbmcgcGdkX3BhZGRyOworCXBtZF90ICpwbWRfazsKKwlwdGVfdCAqcHRlX2s7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIHZtYWxsb2MgYXJlYTogKi8KKwlpZiAoIShhZGRyZXNzID49IFZNQUxMT0NfU1RBUlQgJiYgYWRkcmVzcyA8IFZNQUxMT0NfRU5EKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBTeW5jaHJvbml6ZSB0aGlzIHRhc2sncyB0b3AgbGV2ZWwgcGFnZS10YWJsZQorCSAqIHdpdGggdGhlICdyZWZlcmVuY2UnIHBhZ2UgdGFibGUuCisJICoKKwkgKiBEbyBfbm90XyB1c2UgImN1cnJlbnQiIGhlcmUuIFdlIG1pZ2h0IGJlIGluc2lkZQorCSAqIGFuIGludGVycnVwdCBpbiB0aGUgbWlkZGxlIG9mIGEgdGFzayBzd2l0Y2guLgorCSAqLworCXBnZF9wYWRkciA9IHJlYWRfY3IzKCk7CisJcG1kX2sgPSB2bWFsbG9jX3N5bmNfb25lKF9fdmEocGdkX3BhZGRyKSwgYWRkcmVzcyk7CisJaWYgKCFwbWRfaykKKwkJcmV0dXJuIC0xOworCisJcHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcmVzcyk7CisJaWYgKCFwdGVfcHJlc2VudCgqcHRlX2spKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERpZCBpdCBoaXQgdGhlIERPUyBzY3JlZW4gbWVtb3J5IFZBIGZyb20gdm04NiBtb2RlPworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NoZWNrX3Y4MDg2X21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXVuc2lnbmVkIGxvbmcgYml0OworCisJaWYgKCF2ODA4Nl9tb2RlKHJlZ3MpKQorCQlyZXR1cm47CisKKwliaXQgPSAoYWRkcmVzcyAtIDB4QTAwMDApID4+IFBBR0VfU0hJRlQ7CisJaWYgKGJpdCA8IDMyKQorCQl0c2stPnRocmVhZC5zY3JlZW5fYml0bWFwIHw9IDEgPDwgYml0OworfQorCitzdGF0aWMgdm9pZCBkdW1wX3BhZ2V0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJX190eXBlb2ZfXyhwdGVfdmFsKF9fcHRlKDApKSkgcGFnZTsKKworCXBhZ2UgPSByZWFkX2NyMygpOworCXBhZ2UgPSAoKF9fdHlwZW9mX18ocGFnZSkgKikgX192YShwYWdlKSlbYWRkcmVzcyA+PiBQR0RJUl9TSElGVF07CisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXByaW50aygiKnBkcHQgPSAlMDE2THggIiwgcGFnZSk7CisJaWYgKChwYWdlID4+IFBBR0VfU0hJRlQpIDwgbWF4X2xvd19wZm4KKwkgICAgJiYgcGFnZSAmIF9QQUdFX1BSRVNFTlQpIHsKKwkJcGFnZSAmPSBQQUdFX01BU0s7CisJCXBhZ2UgPSAoKF9fdHlwZW9mX18ocGFnZSkgKikgX192YShwYWdlKSlbKGFkZHJlc3MgPj4gUE1EX1NISUZUKQorCQkJCQkJCSYgKFBUUlNfUEVSX1BNRCAtIDEpXTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKnBkZSA9ICUwMTZMeCAiLCBwYWdlKTsKKwkJcGFnZSAmPSB+X1BBR0VfTlg7CisJfQorI2Vsc2UKKwlwcmludGsoIipwZGUgPSAlMDhseCAiLCBwYWdlKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qCisJICogV2UgbXVzdCBub3QgZGlyZWN0bHkgYWNjZXNzIHRoZSBwdGUgaW4gdGhlIGhpZ2hwdGUKKwkgKiBjYXNlIGlmIHRoZSBwYWdlIHRhYmxlIGlzIGxvY2F0ZWQgaW4gaGlnaG1lbS4KKwkgKiBBbmQgbGV0J3MgcmF0aGVyIG5vdCBrbWFwLWF0b21pYyB0aGUgcHRlLCBqdXN0IGluIGNhc2UKKwkgKiBpdCdzIGFsbG9jYXRlZCBhbHJlYWR5OgorCSAqLworCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCisJICAgICYmIChwYWdlICYgX1BBR0VfUFJFU0VOVCkKKwkgICAgJiYgIShwYWdlICYgX1BBR0VfUFNFKSkgeworCisJCXBhZ2UgJj0gUEFHRV9NQVNLOworCQlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpWyhhZGRyZXNzID4+IFBBR0VfU0hJRlQpCisJCQkJCQkJJiAoUFRSU19QRVJfUFRFIC0gMSldOworCQlwcmludGsoIipwdGUgPSAlMCpMeCAiLCBzaXplb2YocGFnZSkqMiwgKHU2NClwYWdlKTsKKwl9CisKKwlwcmludGsoIlxuIik7Cit9CisKKyNlbHNlIC8qIENPTkZJR19YODZfNjQ6ICovCisKK3ZvaWQgdm1hbGxvY19zeW5jX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCWZvciAoYWRkcmVzcyA9IFZNQUxMT0NfU1RBUlQgJiBQR0RJUl9NQVNLOyBhZGRyZXNzIDw9IFZNQUxMT0NfRU5EOworCSAgICAgYWRkcmVzcyArPSBQR0RJUl9TSVpFKSB7CisKKwkJY29uc3QgcGdkX3QgKnBnZF9yZWYgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcyk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCWlmIChwZ2Rfbm9uZSgqcGdkX3JlZikpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGdkX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCAmcGdkX2xpc3QsIGxydSkgeworCQkJcGdkX3QgKnBnZDsKKwkJCXBnZCA9IChwZ2RfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKSArIHBnZF9pbmRleChhZGRyZXNzKTsKKwkJCWlmIChwZ2Rfbm9uZSgqcGdkKSkKKwkJCQlzZXRfcGdkKHBnZCwgKnBnZF9yZWYpOworCQkJZWxzZQorCQkJCUJVR19PTihwZ2RfcGFnZV92YWRkcigqcGdkKSAhPSBwZ2RfcGFnZV92YWRkcigqcGdkX3JlZikpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBnZF9sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogNjQtYml0OgorICoKKyAqICAgSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2MgYXJlYQorICoKKyAqIFRoaXMgYXNzdW1lcyBubyBsYXJnZSBwYWdlcyBpbiB0aGVyZS4KKyAqLworc3RhdGljIG5vaW5saW5lIGludCB2bWFsbG9jX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwZ2RfdCAqcGdkLCAqcGdkX3JlZjsKKwlwdWRfdCAqcHVkLCAqcHVkX3JlZjsKKwlwbWRfdCAqcG1kLCAqcG1kX3JlZjsKKwlwdGVfdCAqcHRlLCAqcHRlX3JlZjsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gdm1hbGxvYyBhcmVhOiAqLworCWlmICghKGFkZHJlc3MgPj0gVk1BTExPQ19TVEFSVCAmJiBhZGRyZXNzIDwgVk1BTExPQ19FTkQpKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIENvcHkga2VybmVsIG1hcHBpbmdzIG92ZXIgd2hlbiBuZWVkZWQuIFRoaXMgY2FuIGFsc28KKwkgKiBoYXBwZW4gd2l0aGluIGEgcmFjZSBpbiBwYWdlIHRhYmxlIHVwZGF0ZS4gSW4gdGhlIGxhdGVyCisJICogY2FzZSBqdXN0IGZsdXNoOgorCSAqLworCXBnZCA9IHBnZF9vZmZzZXQoY3VycmVudC0+YWN0aXZlX21tLCBhZGRyZXNzKTsKKwlwZ2RfcmVmID0gcGdkX29mZnNldF9rKGFkZHJlc3MpOworCWlmIChwZ2Rfbm9uZSgqcGdkX3JlZikpCisJCXJldHVybiAtMTsKKworCWlmIChwZ2Rfbm9uZSgqcGdkKSkKKwkJc2V0X3BnZChwZ2QsICpwZ2RfcmVmKTsKKwllbHNlCisJCUJVR19PTihwZ2RfcGFnZV92YWRkcigqcGdkKSAhPSBwZ2RfcGFnZV92YWRkcigqcGdkX3JlZikpOworCisJLyoKKwkgKiBCZWxvdyBoZXJlIG1pc21hdGNoZXMgYXJlIGJ1Z3MgYmVjYXVzZSB0aGVzZSBsb3dlciB0YWJsZXMKKwkgKiBhcmUgc2hhcmVkOgorCSAqLworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOworCXB1ZF9yZWYgPSBwdWRfb2Zmc2V0KHBnZF9yZWYsIGFkZHJlc3MpOworCWlmIChwdWRfbm9uZSgqcHVkX3JlZikpCisJCXJldHVybiAtMTsKKworCWlmIChwdWRfbm9uZSgqcHVkKSB8fCBwdWRfcGFnZV92YWRkcigqcHVkKSAhPSBwdWRfcGFnZV92YWRkcigqcHVkX3JlZikpCisJCUJVRygpOworCisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOworCXBtZF9yZWYgPSBwbWRfb2Zmc2V0KHB1ZF9yZWYsIGFkZHJlc3MpOworCWlmIChwbWRfbm9uZSgqcG1kX3JlZikpCisJCXJldHVybiAtMTsKKworCWlmIChwbWRfbm9uZSgqcG1kKSB8fCBwbWRfcGFnZSgqcG1kKSAhPSBwbWRfcGFnZSgqcG1kX3JlZikpCisJCUJVRygpOworCisJcHRlX3JlZiA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9yZWYsIGFkZHJlc3MpOworCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9yZWYpKQorCQlyZXR1cm4gLTE7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOworCisJLyoKKwkgKiBEb24ndCB1c2UgcHRlX3BhZ2UgaGVyZSwgYmVjYXVzZSB0aGUgbWFwcGluZ3MgY2FuIHBvaW50CisJICogb3V0c2lkZSBtZW1fbWFwLCBhbmQgdGhlIE5VTUEgaGFzaCBsb29rdXAgY2Fubm90IGhhbmRsZQorCSAqIHRoYXQ6CisJICovCisJaWYgKCFwdGVfcHJlc2VudCgqcHRlKSB8fCBwdGVfcGZuKCpwdGUpICE9IHB0ZV9wZm4oKnB0ZV9yZWYpKQorCQlCVUcoKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3QgY2hhciBlcnJhdGE5M193YXJuaW5nW10gPQogS0VSTl9FUlIgIioqKioqKiogWW91ciBCSU9TIHNlZW1zIHRvIG5vdCBjb250YWluIGEgZml4IGZvciBLOCBlcnJhdGEgIzkzXG4iCiBLRVJOX0VSUiAiKioqKioqKiBXb3JraW5nIGFyb3VuZCBpdCwgYnV0IGl0IG1heSBjYXVzZSBTRUdWcyBvciBidXJuIHBvd2VyLlxuIgogS0VSTl9FUlIgIioqKioqKiogUGxlYXNlIGNvbnNpZGVyIGEgQklPUyB1cGRhdGUuXG4iCiBLRVJOX0VSUiAiKioqKioqKiBEaXNhYmxpbmcgVVNCIGxlZ2FjeSBpbiB0aGUgQklPUyBtYXkgYWxzbyBoZWxwLlxuIjsKLSNlbmRpZgogCi0vKiBXb3JrYXJvdW5kIGZvciBLOCBlcnJhdHVtICM5MyAmIGJ1Z2d5IEJJT1MuCi0gICBCSU9TIFNNTSBmdW5jdGlvbnMgYXJlIHJlcXVpcmVkIHRvIHVzZSBhIHNwZWNpZmljIHdvcmthcm91bmQKLSAgIHRvIGF2b2lkIGNvcnJ1cHRpb24gb2YgdGhlIDY0Yml0IFJJUCByZWdpc3RlciBvbiBDIHN0ZXBwaW5nIEs4LgotICAgQSBsb3Qgb2YgQklPUyB0aGF0IGRpZG4ndCBnZXQgdGVzdGVkIHByb3Blcmx5IG1pc3MgdGhpcy4KLSAgIFRoZSBPUyBzZWVzIHRoaXMgYXMgYSBwYWdlIGZhdWx0IHdpdGggdGhlIHVwcGVyIDMyYml0cyBvZiBSSVAgY2xlYXJlZC4KLSAgIFRyeSB0byB3b3JrIGFyb3VuZCBpdCBoZXJlLgotICAgTm90ZSB3ZSBvbmx5IGhhbmRsZSBmYXVsdHMgaW4ga2VybmVsIGhlcmUuCi0gICBEb2VzIG5vdGhpbmcgZm9yIFg4Nl8zMgorLyoKKyAqIE5vIHZtODYgbW9kZSBpbiA2NC1iaXQgbW9kZToKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjaGVja192ODA4Nl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworc3RhdGljIGludCBiYWRfYWRkcmVzcyh2b2lkICpwKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlyZXR1cm4gcHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcgKilwLCBkdW1teSk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcGFnZXRhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworCisJcGdkID0gKHBnZF90ICopcmVhZF9jcjMoKTsKKworCXBnZCA9IF9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkICYgUEhZU0lDQUxfUEFHRV9NQVNLKTsKKworCXBnZCArPSBwZ2RfaW5kZXgoYWRkcmVzcyk7CisJaWYgKGJhZF9hZGRyZXNzKHBnZCkpCisJCWdvdG8gYmFkOworCisJcHJpbnRrKCJQR0QgJWx4ICIsIHBnZF92YWwoKnBnZCkpOworCisJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKKwkJZ290byBvdXQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CisJaWYgKGJhZF9hZGRyZXNzKHB1ZCkpCisJCWdvdG8gYmFkOworCisJcHJpbnRrKCJQVUQgJWx4ICIsIHB1ZF92YWwoKnB1ZCkpOworCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkgfHwgcHVkX2xhcmdlKCpwdWQpKQorCQlnb3RvIG91dDsKKworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwlpZiAoYmFkX2FkZHJlc3MocG1kKSkKKwkJZ290byBiYWQ7CisKKwlwcmludGsoIlBNRCAlbHggIiwgcG1kX3ZhbCgqcG1kKSk7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSB8fCBwbWRfbGFyZ2UoKnBtZCkpCisJCWdvdG8gb3V0OworCisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKKwlpZiAoYmFkX2FkZHJlc3MocHRlKSkKKwkJZ290byBiYWQ7CisKKwlwcmludGsoIlBURSAlbHgiLCBwdGVfdmFsKCpwdGUpKTsKK291dDoKKwlwcmludGsoIlxuIik7CisJcmV0dXJuOworYmFkOgorCXByaW50aygiQkFEXG4iKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KKworLyoKKyAqIFdvcmthcm91bmQgZm9yIEs4IGVycmF0dW0gIzkzICYgYnVnZ3kgQklPUy4KKyAqCisgKiBCSU9TIFNNTSBmdW5jdGlvbnMgYXJlIHJlcXVpcmVkIHRvIHVzZSBhIHNwZWNpZmljIHdvcmthcm91bmQKKyAqIHRvIGF2b2lkIGNvcnJ1cHRpb24gb2YgdGhlIDY0Yml0IFJJUCByZWdpc3RlciBvbiBDIHN0ZXBwaW5nIEs4LgorICoKKyAqIEEgbG90IG9mIEJJT1MgdGhhdCBkaWRuJ3QgZ2V0IHRlc3RlZCBwcm9wZXJseSBtaXNzIHRoaXMuCisgKgorICogVGhlIE9TIHNlZXMgdGhpcyBhcyBhIHBhZ2UgZmF1bHQgd2l0aCB0aGUgdXBwZXIgMzJiaXRzIG9mIFJJUCBjbGVhcmVkLgorICogVHJ5IHRvIHdvcmsgYXJvdW5kIGl0IGhlcmUuCisgKgorICogTm90ZSB3ZSBvbmx5IGhhbmRsZSBmYXVsdHMgaW4ga2VybmVsIGhlcmUuCisgKiBEb2VzIG5vdGhpbmcgb24gMzItYml0LgogICovCiBzdGF0aWMgaW50IGlzX2VycmF0YTkzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCXN0YXRpYyBpbnQgd2FybmVkOworCXN0YXRpYyBpbnQgb25jZTsKKwogCWlmIChhZGRyZXNzICE9IHJlZ3MtPmlwKQogCQlyZXR1cm4gMDsKKwogCWlmICgoYWRkcmVzcyA+PiAzMikgIT0gMCkKIAkJcmV0dXJuIDA7CisKIAlhZGRyZXNzIHw9IDB4ZmZmZmZmZmZVTCA8PCAzMjsKIAlpZiAoKGFkZHJlc3MgPj0gKHU2NClfc3RleHQgJiYgYWRkcmVzcyA8PSAodTY0KV9ldGV4dCkgfHwKIAkgICAgKGFkZHJlc3MgPj0gTU9EVUxFU19WQUREUiAmJiBhZGRyZXNzIDw9IE1PRFVMRVNfRU5EKSkgewotCQlpZiAoIXdhcm5lZCkgeworCQlpZiAoIW9uY2UpIHsKIAkJCXByaW50ayhlcnJhdGE5M193YXJuaW5nKTsKLQkJCXdhcm5lZCA9IDE7CisJCQlvbmNlID0gMTsKIAkJfQogCQlyZWdzLT5pcCA9IGFkZHJlc3M7CiAJCXJldHVybiAxOwpAQCAtMzQzLDE2ICs1NjEsMTcgQEAKIH0KIAogLyoKLSAqIFdvcmsgYXJvdW5kIEs4IGVycmF0dW0gIzEwMCBLOCBpbiBjb21wYXQgbW9kZSBvY2Nhc2lvbmFsbHkganVtcHMgdG8gaWxsZWdhbAotICogYWRkcmVzc2VzID40R0IuICBXZSBjYXRjaCB0aGlzIGluIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgYmVjYXVzZSB0aGVzZQotICogYWRkcmVzc2VzIGFyZSBub3QgcmVhY2hhYmxlLiBKdXN0IGRldGVjdCB0aGlzIGNhc2UgYW5kIHJldHVybi4gIEFueSBjb2RlCisgKiBXb3JrIGFyb3VuZCBLOCBlcnJhdHVtICMxMDAgSzggaW4gY29tcGF0IG1vZGUgb2NjYXNpb25hbGx5IGp1bXBzCisgKiB0byBpbGxlZ2FsIGFkZHJlc3NlcyA+NEdCLgorICoKKyAqIFdlIGNhdGNoIHRoaXMgaW4gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBiZWNhdXNlIHRoZXNlIGFkZHJlc3NlcworICogYXJlIG5vdCByZWFjaGFibGUuIEp1c3QgZGV0ZWN0IHRoaXMgY2FzZSBhbmQgcmV0dXJuLiAgQW55IGNvZGUKICAqIHNlZ21lbnQgaW4gTERUIGlzIGNvbXBhdGliaWxpdHkgbW9kZS4KICAqLwogc3RhdGljIGludCBpc19lcnJhdGExMDAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JaWYgKChyZWdzLT5jcyA9PSBfX1VTRVIzMl9DUyB8fCAocmVncy0+Y3MgJiAoMTw8MikpKSAmJgotCSAgICAoYWRkcmVzcyA+PiAzMikpCisJaWYgKChyZWdzLT5jcyA9PSBfX1VTRVIzMl9DUyB8fCAocmVncy0+Y3MgJiAoMTw8MikpKSAmJiAoYWRkcmVzcyA+PiAzMikpCiAJCXJldHVybiAxOwogI2VuZGlmCiAJcmV0dXJuIDA7CkBAIC0zNjIsOCArNTgxLDkgQEAKIHsKICNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCiAJdW5zaWduZWQgbG9uZyBucjsKKwogCS8qCi0JICogUGVudGl1bSBGMCAwRiBDNyBDOCBidWcgd29ya2Fyb3VuZC4KKwkgKiBQZW50aXVtIEYwIDBGIEM3IEM4IGJ1ZyB3b3JrYXJvdW5kOgogCSAqLwogCWlmIChib290X2NwdV9kYXRhLmYwMGZfYnVnKSB7CiAJCW5yID0gKGFkZHJlc3MgLSBpZHRfZGVzY3IuYWRkcmVzcykgPj4gMzsKQEAgLTM3Nyw2MiArNTk3LDI3NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X2ZhdWx0X29vcHMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgY29uc3QgY2hhciBueF93YXJuaW5nW10gPSBLRVJOX0NSSVQKKyJrZXJuZWwgdHJpZWQgdG8gZXhlY3V0ZSBOWC1wcm90ZWN0ZWQgcGFnZSAtIGV4cGxvaXQgYXR0ZW1wdD8gKHVpZDogJWQpXG4iOworCitzdGF0aWMgdm9pZAorc2hvd19mYXVsdF9vb3BzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKCFvb3BzX21heV9wcmludCgpKQogCQlyZXR1cm47Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfUEFFCiAJaWYgKGVycm9yX2NvZGUgJiBQRl9JTlNUUikgewogCQl1bnNpZ25lZCBpbnQgbGV2ZWw7CisKIAkJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7CiAKIAkJaWYgKHB0ZSAmJiBwdGVfcHJlc2VudCgqcHRlKSAmJiAhcHRlX2V4ZWMoKnB0ZSkpCi0JCQlwcmludGsoS0VSTl9DUklUICJrZXJuZWwgdHJpZWQgdG8gZXhlY3V0ZSAiCi0JCQkJIk5YLXByb3RlY3RlZCBwYWdlIC0gZXhwbG9pdCBhdHRlbXB0PyAiCi0JCQkJIih1aWQ6ICVkKVxuIiwgY3VycmVudF91aWQoKSk7CisJCQlwcmludGsobnhfd2FybmluZywgY3VycmVudF91aWQoKSk7CiAJfQotI2VuZGlmCiAKIAlwcmludGsoS0VSTl9BTEVSVCAiQlVHOiB1bmFibGUgdG8gaGFuZGxlIGtlcm5lbCAiKTsKIAlpZiAoYWRkcmVzcyA8IFBBR0VfU0laRSkKIAkJcHJpbnRrKEtFUk5fQ09OVCAiTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIik7CiAJZWxzZQogCQlwcmludGsoS0VSTl9DT05UICJwYWdpbmcgcmVxdWVzdCIpOworCiAJcHJpbnRrKEtFUk5fQ09OVCAiIGF0ICVwXG4iLCAodm9pZCAqKSBhZGRyZXNzKTsKIAlwcmludGsoS0VSTl9BTEVSVCAiSVA6Iik7CiAJcHJpbnRrX2FkZHJlc3MocmVncy0+aXAsIDEpOworCiAJZHVtcF9wYWdldGFibGUoYWRkcmVzcyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdGF0aWMgbm9pbmxpbmUgdm9pZCBwZ3RhYmxlX2JhZCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCitzdGF0aWMgbm9pbmxpbmUgdm9pZAorcGd0YWJsZV9iYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBvb3BzX2JlZ2luKCk7Ci0JaW50IHNpZyA9IFNJR0tJTEw7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2lnOworCisJZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CisJdHNrID0gY3VycmVudDsKKwlzaWcgPSBTSUdLSUxMOwogCiAJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBhdCBhZGRyZXNzICVseFxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgYWRkcmVzcyk7CisJICAgICAgIHRzay0+Y29tbSwgYWRkcmVzcyk7CiAJZHVtcF9wYWdldGFibGUoYWRkcmVzcyk7Ci0JdHNrID0gY3VycmVudDsKLQl0c2stPnRocmVhZC5jcjIgPSBhZGRyZXNzOwotCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxNDsKLQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKworCXRzay0+dGhyZWFkLmNyMgkJPSBhZGRyZXNzOworCXRzay0+dGhyZWFkLnRyYXBfbm8JPSAxNDsKKwl0c2stPnRocmVhZC5lcnJvcl9jb2RlCT0gZXJyb3JfY29kZTsKKwogCWlmIChfX2RpZSgiQmFkIHBhZ2V0YWJsZSIsIHJlZ3MsIGVycm9yX2NvZGUpKQogCQlzaWcgPSAwOworCiAJb29wc19lbmQoZmxhZ3MsIHJlZ3MsIHNpZyk7CiB9Ci0jZW5kaWYKKworc3RhdGljIG5vaW5saW5lIHZvaWQKK25vX2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXVuc2lnbmVkIGxvbmcgKnN0YWNrZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNpZzsKKworCS8qIEFyZSB3ZSBwcmVwYXJlZCB0byBoYW5kbGUgdGhpcyBrZXJuZWwgZmF1bHQ/ICovCisJaWYgKGZpeHVwX2V4Y2VwdGlvbihyZWdzKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiAzMi1iaXQ6CisJICoKKwkgKiAgIFZhbGlkIHRvIGRvIGFub3RoZXIgcGFnZSBmYXVsdCBoZXJlLCBiZWNhdXNlIGlmIHRoaXMgZmF1bHQKKwkgKiAgIGhhZCBiZWVuIHRyaWdnZXJlZCBieSBpc19wcmVmZXRjaCBmaXh1cF9leGNlcHRpb24gd291bGQgaGF2ZQorCSAqICAgaGFuZGxlZCBpdC4KKwkgKgorCSAqIDY0LWJpdDoKKwkgKgorCSAqICAgSGFsbCBvZiBzaGFtZSBvZiBDUFUvQklPUyBidWdzLgorCSAqLworCWlmIChpc19wcmVmZXRjaChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKSkKKwkJcmV0dXJuOworCisJaWYgKGlzX2VycmF0YTkzKHJlZ3MsIGFkZHJlc3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KKwkgKiB0ZXJtaW5hdGUgdGhpbmdzIHdpdGggZXh0cmVtZSBwcmVqdWRpY2U6CisJICovCisJZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CisKKwlzaG93X2ZhdWx0X29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisKKwlzdGFja2VuZCA9IGVuZF9vZl9zdGFjayh0c2spOworCWlmICgqc3RhY2tlbmQgIT0gU1RBQ0tfRU5EX01BR0lDKQorCQlwcmludGsoS0VSTl9BTEVSVCAiVGhyZWFkIG92ZXJyYW4gc3RhY2ssIG9yIHN0YWNrIGNvcnJ1cHRlZFxuIik7CisKKwl0c2stPnRocmVhZC5jcjIJCT0gYWRkcmVzczsKKwl0c2stPnRocmVhZC50cmFwX25vCT0gMTQ7CisJdHNrLT50aHJlYWQuZXJyb3JfY29kZQk9IGVycm9yX2NvZGU7CisKKwlzaWcgPSBTSUdLSUxMOworCWlmIChfX2RpZSgiT29wcyIsIHJlZ3MsIGVycm9yX2NvZGUpKQorCQlzaWcgPSAwOworCisJLyogRXhlY3V0aXZlIHN1bW1hcnkgaW4gY2FzZSB0aGUgYm9keSBvZiB0aGUgb29wcyBzY3JvbGxlZCBhd2F5ICovCisJcHJpbnRrKEtFUk5fRU1FUkcgIkNSMjogJTAxNmx4XG4iLCBhZGRyZXNzKTsKKworCW9vcHNfZW5kKGZsYWdzLCByZWdzLCBzaWcpOworfQorCisvKgorICogUHJpbnQgb3V0IGluZm8gYWJvdXQgZmF0YWwgc2VnZmF1bHRzLCBpZiB0aGUgc2hvd191bmhhbmRsZWRfc2lnbmFscworICogc3lzY3RsIGlzIHNldDoKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzaG93X3NpZ25hbF9tc2coc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoIXVuaGFuZGxlZF9zaWduYWwodHNrLCBTSUdTRUdWKSkKKwkJcmV0dXJuOworCisJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0NPTlQgIiVzJXNbJWRdOiBzZWdmYXVsdCBhdCAlbHggaXAgJXAgc3AgJXAgZXJyb3IgJWx4IiwKKwkJdGFza19waWRfbnIodHNrKSA+IDEgPyBLRVJOX0lORk8gOiBLRVJOX0VNRVJHLAorCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIGFkZHJlc3MsCisJCSh2b2lkICopcmVncy0+aXAsICh2b2lkICopcmVncy0+c3AsIGVycm9yX2NvZGUpOworCisJcHJpbnRfdm1hX2FkZHIoS0VSTl9DT05UICIgaW4gIiwgcmVncy0+aXApOworCisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQKK19fYmFkX2FyZWFfbm9zZW1hcGhvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHNpX2NvZGUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJLyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovCisJaWYgKGVycm9yX2NvZGUgJiBQRl9VU0VSKSB7CisJCS8qCisJCSAqIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBpbnRlcnJ1cHRzIG9mZiBoZXJlOgorCQkgKi8KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCS8qCisJCSAqIFZhbGlkIHRvIGRvIGFub3RoZXIgcGFnZSBmYXVsdCBoZXJlIGJlY2F1c2UgdGhpcyBvbmUgY2FtZQorCQkgKiBmcm9tIHVzZXIgc3BhY2U6CisJCSAqLworCQlpZiAoaXNfcHJlZmV0Y2gocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcykpCisJCQlyZXR1cm47CisKKwkJaWYgKGlzX2VycmF0YTEwMChyZWdzLCBhZGRyZXNzKSkKKwkJCXJldHVybjsKKworCQlpZiAodW5saWtlbHkoc2hvd191bmhhbmRsZWRfc2lnbmFscykpCisJCQlzaG93X3NpZ25hbF9tc2cocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgdHNrKTsKKworCQkvKiBLZXJuZWwgYWRkcmVzc2VzIGFyZSBhbHdheXMgcHJvdGVjdGlvbiBmYXVsdHM6ICovCisJCXRzay0+dGhyZWFkLmNyMgkJPSBhZGRyZXNzOworCQl0c2stPnRocmVhZC5lcnJvcl9jb2RlCT0gZXJyb3JfY29kZSB8IChhZGRyZXNzID49IFRBU0tfU0laRSk7CisJCXRzay0+dGhyZWFkLnRyYXBfbm8JPSAxNDsKKworCQlmb3JjZV9zaWdfaW5mb19mYXVsdChTSUdTRUdWLCBzaV9jb2RlLCBhZGRyZXNzLCB0c2spOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoaXNfZjAwZl9idWcocmVncywgYWRkcmVzcykpCisJCXJldHVybjsKKworCW5vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBub2lubGluZSB2b2lkCitiYWRfYXJlYV9ub3NlbWFwaG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlfX2JhZF9hcmVhX25vc2VtYXBob3JlKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIFNFR1ZfTUFQRVJSKTsKK30KKworc3RhdGljIHZvaWQKK19fYmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBzaV9jb2RlKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisKKwkvKgorCSAqIFNvbWV0aGluZyB0cmllZCB0byBhY2Nlc3MgbWVtb3J5IHRoYXQgaXNuJ3QgaW4gb3VyIG1lbW9yeSBtYXAuLgorCSAqIEZpeCBpdCwgYnV0IGNoZWNrIGlmIGl0J3Mga2VybmVsIG9yIHVzZXIgZmlyc3QuLgorCSAqLworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwlfX2JhZF9hcmVhX25vc2VtYXBob3JlKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIHNpX2NvZGUpOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZAorYmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCV9fYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgU0VHVl9NQVBFUlIpOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZAorYmFkX2FyZWFfYWNjZXNzX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlfX2JhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIFNFR1ZfQUNDRVJSKTsKK30KKworLyogVE9ETzogZml4dXAgZm9yICJtbS1pbnZva2Utb29tLWtpbGxlci1mcm9tLXBhZ2UtZmF1bHQucGF0Y2giICovCitzdGF0aWMgdm9pZAorb3V0X29mX21lbW9yeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwkvKgorCSAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBjYWxsIHRoZSBPT00ga2lsbGVyLCBhbmQgcmV0dXJuIHRoZSB1c2Vyc3BhY2UKKwkgKiAod2hpY2ggd2lsbCByZXRyeSB0aGUgZmF1bHQsIG9yIGtpbGwgdXMgaWYgd2UgZ290IG9vbS1raWxsZWQpOgorCSAqLworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOworfQorCitzdGF0aWMgdm9pZAorZG9fc2lnYnVzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOworCisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWU6ICovCisJaWYgKCEoZXJyb3JfY29kZSAmIFBGX1VTRVIpKQorCQlub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCisJLyogVXNlci1zcGFjZSA9PiBvayB0byBkbyBhbm90aGVyIHBhZ2UgZmF1bHQ6ICovCisJaWYgKGlzX3ByZWZldGNoKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpKQorCQlyZXR1cm47CisKKwl0c2stPnRocmVhZC5jcjIJCT0gYWRkcmVzczsKKwl0c2stPnRocmVhZC5lcnJvcl9jb2RlCT0gZXJyb3JfY29kZTsKKwl0c2stPnRocmVhZC50cmFwX25vCT0gMTQ7CisKKwlmb3JjZV9zaWdfaW5mb19mYXVsdChTSUdCVVMsIEJVU19BRFJFUlIsIGFkZHJlc3MsIHRzayk7Cit9CisKK3N0YXRpYyBub2lubGluZSB2b2lkCittbV9mYXVsdF9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAorCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBmYXVsdCkKK3sKKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pIHsKKwkJb3V0X29mX21lbW9yeShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKwl9IGVsc2UgeworCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCisJCQlkb19zaWdidXMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCWVsc2UKKwkJCUJVRygpOworCX0KK30KIAogc3RhdGljIGludCBzcHVyaW91c19mYXVsdF9jaGVjayh1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHB0ZV90ICpwdGUpCiB7CiAJaWYgKChlcnJvcl9jb2RlICYgUEZfV1JJVEUpICYmICFwdGVfd3JpdGUoKnB0ZSkpCiAJCXJldHVybiAwOworCiAJaWYgKChlcnJvcl9jb2RlICYgUEZfSU5TVFIpICYmICFwdGVfZXhlYygqcHRlKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ0MCwyMSArODc1LDI1IEBACiB9CiAKIC8qCi0gKiBIYW5kbGUgYSBzcHVyaW91cyBmYXVsdCBjYXVzZWQgYnkgYSBzdGFsZSBUTEIgZW50cnkuICBUaGlzIGFsbG93cwotICogdXMgdG8gbGF6aWx5IHJlZnJlc2ggdGhlIFRMQiB3aGVuIGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9mIGEKLSAqIGtlcm5lbCBwYWdlIChSTyAtPiBSVyBvciBOWCAtPiBYKS4gIERvaW5nIGl0IGVhZ2VybHkgaXMgdmVyeQotICogZXhwZW5zaXZlIHNpbmNlIHRoYXQgaW1wbGllcyBkb2luZyBhIGZ1bGwgY3Jvc3MtcHJvY2Vzc29yIFRMQgotICogZmx1c2gsIGV2ZW4gaWYgbm8gc3RhbGUgVExCIGVudHJpZXMgZXhpc3Qgb24gb3RoZXIgcHJvY2Vzc29ycy4KKyAqIEhhbmRsZSBhIHNwdXJpb3VzIGZhdWx0IGNhdXNlZCBieSBhIHN0YWxlIFRMQiBlbnRyeS4KKyAqCisgKiBUaGlzIGFsbG93cyB1cyB0byBsYXppbHkgcmVmcmVzaCB0aGUgVExCIHdoZW4gaW5jcmVhc2luZyB0aGUKKyAqIHBlcm1pc3Npb25zIG9mIGEga2VybmVsIHBhZ2UgKFJPIC0+IFJXIG9yIE5YIC0+IFgpLiAgRG9pbmcgaXQKKyAqIGVhZ2VybHkgaXMgdmVyeSBleHBlbnNpdmUgc2luY2UgdGhhdCBpbXBsaWVzIGRvaW5nIGEgZnVsbAorICogY3Jvc3MtcHJvY2Vzc29yIFRMQiBmbHVzaCwgZXZlbiBpZiBubyBzdGFsZSBUTEIgZW50cmllcyBleGlzdAorICogb24gb3RoZXIgcHJvY2Vzc29ycy4KKyAqCiAgKiBUaGVyZSBhcmUgbm8gc2VjdXJpdHkgaW1wbGljYXRpb25zIHRvIGxlYXZpbmcgYSBzdGFsZSBUTEIgd2hlbgogICogaW5jcmVhc2luZyB0aGUgcGVybWlzc2lvbnMgb24gYSBwYWdlLgogICovCi1zdGF0aWMgaW50IHNwdXJpb3VzX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCSAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQorc3RhdGljIG5vaW5saW5lIGludAorc3B1cmlvdXNfZmF1bHQodW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZTsKKwlpbnQgcmV0OwogCiAJLyogUmVzZXJ2ZWQtYml0IHZpb2xhdGlvbiBvciB1c2VyIGFjY2VzcyB0byBrZXJuZWwgc3BhY2U/ICovCiAJaWYgKGVycm9yX2NvZGUgJiAoUEZfVVNFUiB8IFBGX1JTVkQpKQpAQCAtNDgyLDEyNyArOTIxLDcxIEBACiAJaWYgKCFwdGVfcHJlc2VudCgqcHRlKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gc3B1cmlvdXNfZmF1bHRfY2hlY2soZXJyb3JfY29kZSwgcHRlKTsKLX0KLQotLyoKLSAqIFg4Nl8zMgotICogSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2Mgb3IgbW9kdWxlIG1hcHBpbmcgYXJlYQotICoKLSAqIFg4Nl82NAotICogSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2MgYXJlYQotICoKLSAqIFRoaXMgYXNzdW1lcyBubyBsYXJnZSBwYWdlcyBpbiB0aGVyZS4KLSAqLwotc3RhdGljIGludCB2bWFsbG9jX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5zaWduZWQgbG9uZyBwZ2RfcGFkZHI7Ci0JcG1kX3QgKnBtZF9rOwotCXB0ZV90ICpwdGVfazsKLQotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gdm1hbGxvYyBhcmVhICovCi0JaWYgKCEoYWRkcmVzcyA+PSBWTUFMTE9DX1NUQVJUICYmIGFkZHJlc3MgPCBWTUFMTE9DX0VORCkpCi0JCXJldHVybiAtMTsKKwlyZXQgPSBzcHVyaW91c19mYXVsdF9jaGVjayhlcnJvcl9jb2RlLCBwdGUpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKIAogCS8qCi0JICogU3luY2hyb25pemUgdGhpcyB0YXNrJ3MgdG9wIGxldmVsIHBhZ2UtdGFibGUKLQkgKiB3aXRoIHRoZSAncmVmZXJlbmNlJyBwYWdlIHRhYmxlLgotCSAqCi0JICogRG8gX25vdF8gdXNlICJjdXJyZW50IiBoZXJlLiBXZSBtaWdodCBiZSBpbnNpZGUKLQkgKiBhbiBpbnRlcnJ1cHQgaW4gdGhlIG1pZGRsZSBvZiBhIHRhc2sgc3dpdGNoLi4KKwkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBwZXJtaXNzaW9ucyBpbiBQTUQuCisJICogSWYgbm90LCB0aGVuIHRoZXJlJ3MgYSBidWcgaW4gdGhlIHBhZ2UgdGFibGVzOgogCSAqLwotCXBnZF9wYWRkciA9IHJlYWRfY3IzKCk7Ci0JcG1kX2sgPSB2bWFsbG9jX3N5bmNfb25lKF9fdmEocGdkX3BhZGRyKSwgYWRkcmVzcyk7Ci0JaWYgKCFwbWRfaykKLQkJcmV0dXJuIC0xOwotCXB0ZV9rID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2ssIGFkZHJlc3MpOwotCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9rKSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotI2Vsc2UKLQlwZ2RfdCAqcGdkLCAqcGdkX3JlZjsKLQlwdWRfdCAqcHVkLCAqcHVkX3JlZjsKLQlwbWRfdCAqcG1kLCAqcG1kX3JlZjsKLQlwdGVfdCAqcHRlLCAqcHRlX3JlZjsKKwlyZXQgPSBzcHVyaW91c19mYXVsdF9jaGVjayhlcnJvcl9jb2RlLCAocHRlX3QgKikgcG1kKTsKKwlXQVJOX09OQ0UoIXJldCwgIlBNRCBoYXMgaW5jb3JyZWN0IHBlcm1pc3Npb24gYml0c1xuIik7CiAKLQkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIHZtYWxsb2MgYXJlYSAqLwotCWlmICghKGFkZHJlc3MgPj0gVk1BTExPQ19TVEFSVCAmJiBhZGRyZXNzIDwgVk1BTExPQ19FTkQpKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBDb3B5IGtlcm5lbCBtYXBwaW5ncyBvdmVyIHdoZW4gbmVlZGVkLiBUaGlzIGNhbiBhbHNvCi0JICAgaGFwcGVuIHdpdGhpbiBhIHJhY2UgaW4gcGFnZSB0YWJsZSB1cGRhdGUuIEluIHRoZSBsYXRlcgotCSAgIGNhc2UganVzdCBmbHVzaC4gKi8KLQotCXBnZCA9IHBnZF9vZmZzZXQoY3VycmVudC0+YWN0aXZlX21tLCBhZGRyZXNzKTsKLQlwZ2RfcmVmID0gcGdkX29mZnNldF9rKGFkZHJlc3MpOwotCWlmIChwZ2Rfbm9uZSgqcGdkX3JlZikpCi0JCXJldHVybiAtMTsKLQlpZiAocGdkX25vbmUoKnBnZCkpCi0JCXNldF9wZ2QocGdkLCAqcGdkX3JlZik7Ci0JZWxzZQotCQlCVUdfT04ocGdkX3BhZ2VfdmFkZHIoKnBnZCkgIT0gcGdkX3BhZ2VfdmFkZHIoKnBnZF9yZWYpKTsKLQotCS8qIEJlbG93IGhlcmUgbWlzbWF0Y2hlcyBhcmUgYnVncyBiZWNhdXNlIHRoZXNlIGxvd2VyIHRhYmxlcwotCSAgIGFyZSBzaGFyZWQgKi8KLQotCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKLQlwdWRfcmVmID0gcHVkX29mZnNldChwZ2RfcmVmLCBhZGRyZXNzKTsKLQlpZiAocHVkX25vbmUoKnB1ZF9yZWYpKQotCQlyZXR1cm4gLTE7Ci0JaWYgKHB1ZF9ub25lKCpwdWQpIHx8IHB1ZF9wYWdlX3ZhZGRyKCpwdWQpICE9IHB1ZF9wYWdlX3ZhZGRyKCpwdWRfcmVmKSkKLQkJQlVHKCk7Ci0JcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwotCXBtZF9yZWYgPSBwbWRfb2Zmc2V0KHB1ZF9yZWYsIGFkZHJlc3MpOwotCWlmIChwbWRfbm9uZSgqcG1kX3JlZikpCi0JCXJldHVybiAtMTsKLQlpZiAocG1kX25vbmUoKnBtZCkgfHwgcG1kX3BhZ2UoKnBtZCkgIT0gcG1kX3BhZ2UoKnBtZF9yZWYpKQotCQlCVUcoKTsKLQlwdGVfcmVmID0gcHRlX29mZnNldF9rZXJuZWwocG1kX3JlZiwgYWRkcmVzcyk7Ci0JaWYgKCFwdGVfcHJlc2VudCgqcHRlX3JlZikpCi0JCXJldHVybiAtMTsKLQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOwotCS8qIERvbid0IHVzZSBwdGVfcGFnZSBoZXJlLCBiZWNhdXNlIHRoZSBtYXBwaW5ncyBjYW4gcG9pbnQKLQkgICBvdXRzaWRlIG1lbV9tYXAsIGFuZCB0aGUgTlVNQSBoYXNoIGxvb2t1cCBjYW5ub3QgaGFuZGxlCi0JICAgdGhhdC4gKi8KLQlpZiAoIXB0ZV9wcmVzZW50KCpwdGUpIHx8IHB0ZV9wZm4oKnB0ZSkgIT0gcHRlX3BmbigqcHRlX3JlZikpCi0JCUJVRygpOwotCXJldHVybiAwOwotI2VuZGlmCisJcmV0dXJuIHJldDsKIH0KIAogaW50IHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgPSAxOwogCitzdGF0aWMgaW5saW5lIGludAorYWNjZXNzX2Vycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgaW50IHdyaXRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAod3JpdGUpIHsKKwkJLyogd3JpdGUsIHByZXNlbnQgYW5kIHdyaXRlLCBub3QgcHJlc2VudDogKi8KKwkJaWYgKHVubGlrZWx5KCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogcmVhZCwgcHJlc2VudDogKi8KKwlpZiAodW5saWtlbHkoZXJyb3JfY29kZSAmIFBGX1BST1QpKQorCQlyZXR1cm4gMTsKKworCS8qIHJlYWQsIG5vdCBwcmVzZW50OiAqLworCWlmICh1bmxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYXVsdF9pbl9rZXJuZWxfc3BhY2UodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBhZGRyZXNzID49IFRBU0tfU0laRV9NQVg7Cit9CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwYWdlIGZhdWx0cy4gIEl0IGRldGVybWluZXMgdGhlIGFkZHJlc3MsCiAgKiBhbmQgdGhlIHByb2JsZW0sIGFuZCB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZQogICogcm91dGluZXMuCiAgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1hc21saW5rYWdlCi0jZW5kaWYKLXZvaWQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK2RvdHJhcGxpbmthZ2Ugdm9pZCBfX2twcm9iZXMKK2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0JaW50IHdyaXRlLCBzaV9jb2RlOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCWludCB3cml0ZTsKIAlpbnQgZmF1bHQ7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHNpZzsKLSNlbmRpZgogCiAJdHNrID0gY3VycmVudDsKIAltbSA9IHRzay0+bW07CisKIAlwcmVmZXRjaHcoJm1tLT5tbWFwX3NlbSk7CiAKLQkvKiBnZXQgdGhlIGFkZHJlc3MgKi8KKwkvKiBHZXQgdGhlIGZhdWx0aW5nIGFkZHJlc3M6ICovCiAJYWRkcmVzcyA9IHJlYWRfY3IyKCk7CiAKLQlzaV9jb2RlID0gU0VHVl9NQVBFUlI7Ci0KIAlpZiAodW5saWtlbHkoa21taW9fZmF1bHQocmVncywgYWRkcmVzcykpKQogCQlyZXR1cm47CiAKQEAgLTYxOSwzMTkgKzEwMDIsMTQ3IEBACiAJICogKGVycm9yX2NvZGUgJiA0KSA9PSAwLCBhbmQgdGhhdCB0aGUgZmF1bHQgd2FzIG5vdCBhCiAJICogcHJvdGVjdGlvbiBlcnJvciAoZXJyb3JfY29kZSAmIDkpID09IDAuCiAJICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmICh1bmxpa2VseShhZGRyZXNzID49IFRBU0tfU0laRSkpIHsKLSNlbHNlCi0JaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVEFTS19TSVpFNjQpKSB7Ci0jZW5kaWYKKwlpZiAodW5saWtlbHkoZmF1bHRfaW5fa2VybmVsX3NwYWNlKGFkZHJlc3MpKSkgewogCQlpZiAoIShlcnJvcl9jb2RlICYgKFBGX1JTVkR8UEZfVVNFUnxQRl9QUk9UKSkgJiYKIAkJICAgIHZtYWxsb2NfZmF1bHQoYWRkcmVzcykgPj0gMCkKIAkJCXJldHVybjsKIAotCQkvKiBDYW4gaGFuZGxlIGEgc3RhbGUgUk8tPlJXIFRMQiAqLwotCQlpZiAoc3B1cmlvdXNfZmF1bHQoYWRkcmVzcywgZXJyb3JfY29kZSkpCisJCS8qIENhbiBoYW5kbGUgYSBzdGFsZSBSTy0+UlcgVExCOiAqLworCQlpZiAoc3B1cmlvdXNfZmF1bHQoZXJyb3JfY29kZSwgYWRkcmVzcykpCiAJCQlyZXR1cm47CiAKLQkJLyoga3Byb2JlcyBkb24ndCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0cy4gKi8KKwkJLyoga3Byb2JlcyBkb24ndCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0czogKi8KIAkJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MpKQogCQkJcmV0dXJuOwogCQkvKgogCQkgKiBEb24ndCB0YWtlIHRoZSBtbSBzZW1hcGhvcmUgaGVyZS4gSWYgd2UgZml4dXAgYSBwcmVmZXRjaAotCQkgKiBmYXVsdCB3ZSBjb3VsZCBvdGhlcndpc2UgZGVhZGxvY2suCisJCSAqIGZhdWx0IHdlIGNvdWxkIG90aGVyd2lzZSBkZWFkbG9jazoKIAkJICovCi0JCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisJCWJhZF9hcmVhX25vc2VtYXBob3JlKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCisJCXJldHVybjsKIAl9CiAKLQkvKiBrcHJvYmVzIGRvbid0IHdhbnQgdG8gaG9vayB0aGUgc3B1cmlvdXMgZmF1bHRzLiAqLwotCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzKSkKKwkvKiBrcHJvYmVzIGRvbid0IHdhbnQgdG8gaG9vayB0aGUgc3B1cmlvdXMgZmF1bHRzOiAqLworCWlmICh1bmxpa2VseShub3RpZnlfcGFnZV9mYXVsdChyZWdzKSkpCiAJCXJldHVybjsKLQogCS8qCiAJICogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIGNyMiBoYXMgYmVlbiBzYXZlZCBhbmQgdGhlCiAJICogdm1hbGxvYyBmYXVsdCBoYXMgYmVlbiBoYW5kbGVkLgogCSAqCiAJICogVXNlci1tb2RlIHJlZ2lzdGVycyBjb3VudCBhcyBhIHVzZXIgYWNjZXNzIGV2ZW4gZm9yIGFueQotCSAqIHBvdGVudGlhbCBzeXN0ZW0gZmF1bHQgb3IgQ1BVIGJ1Z2xldC4KKwkgKiBwb3RlbnRpYWwgc3lzdGVtIGZhdWx0IG9yIENQVSBidWdsZXQ6CiAJICovCiAJaWYgKHVzZXJfbW9kZV92bShyZWdzKSkgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCWVycm9yX2NvZGUgfD0gUEZfVVNFUjsKLQl9IGVsc2UgaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0gZWxzZSB7CisJCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9FRkxBR1NfSUYpCisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmICh1bmxpa2VseShlcnJvcl9jb2RlICYgUEZfUlNWRCkpCi0JCXBndGFibGVfYmFkKGFkZHJlc3MsIHJlZ3MsIGVycm9yX2NvZGUpOwotI2VuZGlmCisJCXBndGFibGVfYmFkKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwogCiAJLyoKLQkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQsIGhhdmUgbm8gdXNlciBjb250ZXh0IG9yIGFyZSBydW5uaW5nIGluIGFuCi0JICogYXRvbWljIHJlZ2lvbiB0aGVuIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0LgorCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCwgaGF2ZSBubyB1c2VyIGNvbnRleHQgb3IgYXJlIHJ1bm5pbmcKKwkgKiBpbiBhbiBhdG9taWMgcmVnaW9uIHRoZW4gd2UgbXVzdCBub3QgdGFrZSB0aGUgZmF1bHQ6CiAJICovCi0JaWYgKHVubGlrZWx5KGluX2F0b21pYygpIHx8ICFtbSkpCi0JCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisJaWYgKHVubGlrZWx5KGluX2F0b21pYygpIHx8ICFtbSkpIHsKKwkJYmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIFdoZW4gcnVubmluZyBpbiB0aGUga2VybmVsIHdlIGV4cGVjdCBmYXVsdHMgdG8gb2NjdXIgb25seSB0bwotCSAqIGFkZHJlc3NlcyBpbiB1c2VyIHNwYWNlLiAgQWxsIG90aGVyIGZhdWx0cyByZXByZXNlbnQgZXJyb3JzIGluIHRoZQotCSAqIGtlcm5lbCBhbmQgc2hvdWxkIGdlbmVyYXRlIGFuIE9PUFMuICBVbmZvcnR1bmF0ZWx5LCBpbiB0aGUgY2FzZSBvZiBhbgotCSAqIGVycm9uZW91cyBmYXVsdCBvY2N1cnJpbmcgaW4gYSBjb2RlIHBhdGggd2hpY2ggYWxyZWFkeSBob2xkcyBtbWFwX3NlbQotCSAqIHdlIHdpbGwgZGVhZGxvY2sgYXR0ZW1wdGluZyB0byB2YWxpZGF0ZSB0aGUgZmF1bHQgYWdhaW5zdCB0aGUKLQkgKiBhZGRyZXNzIHNwYWNlLiAgTHVja2lseSB0aGUga2VybmVsIG9ubHkgdmFsaWRseSByZWZlcmVuY2VzIHVzZXIKLQkgKiBzcGFjZSBmcm9tIHdlbGwgZGVmaW5lZCBhcmVhcyBvZiBjb2RlLCB3aGljaCBhcmUgbGlzdGVkIGluIHRoZQotCSAqIGV4Y2VwdGlvbnMgdGFibGUuCisJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4KKwkgKiB0aGUga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRoZQorCSAqIGNhc2Ugb2YgYW4gZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5CisJICogaG9sZHMgbW1hcF9zZW0gd2Ugd2lsbCBkZWFkbG9jayBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdAorCSAqIGFnYWluc3QgdGhlIGFkZHJlc3Mgc3BhY2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5CisJICogcmVmZXJlbmNlcyB1c2VyIHNwYWNlIGZyb20gd2VsbCBkZWZpbmVkIGFyZWFzIG9mIGNvZGUsIHdoaWNoIGFyZQorCSAqIGxpc3RlZCBpbiB0aGUgZXhjZXB0aW9ucyB0YWJsZS4KIAkgKgogCSAqIEFzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZhdWx0cyB3aWxsIGJlIHZhbGlkIHdlIHdpbGwgb25seSBwZXJmb3JtCi0JICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGEgZGVhZGxvY2suCi0JICogQXR0ZW1wdCB0byBsb2NrIHRoZSBhZGRyZXNzIHNwYWNlLCBpZiB3ZSBjYW5ub3Qgd2UgdGhlbiB2YWxpZGF0ZSB0aGUKLQkgKiBzb3VyY2UuICBJZiB0aGlzIGlzIGludmFsaWQgd2UgY2FuIHNraXAgdGhlIGFkZHJlc3Mgc3BhY2UgY2hlY2ssCi0JICogdGh1cyBhdm9pZGluZyB0aGUgZGVhZGxvY2suCisJICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGEKKwkgKiBkZWFkbG9jay4gQXR0ZW1wdCB0byBsb2NrIHRoZSBhZGRyZXNzIHNwYWNlLCBpZiB3ZSBjYW5ub3Qgd2UgdGhlbgorCSAqIHZhbGlkYXRlIHRoZSBzb3VyY2UuIElmIHRoaXMgaXMgaW52YWxpZCB3ZSBjYW4gc2tpcCB0aGUgYWRkcmVzcworCSAqIHNwYWNlIGNoZWNrLCB0aHVzIGF2b2lkaW5nIHRoZSBkZWFkbG9jazoKIAkgKi8KLQlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZtbS0+bW1hcF9zZW0pKSB7CisJaWYgKHVubGlrZWx5KCFkb3duX3JlYWRfdHJ5bG9jaygmbW0tPm1tYXBfc2VtKSkpIHsKIAkJaWYgKChlcnJvcl9jb2RlICYgUEZfVVNFUikgPT0gMCAmJgotCQkgICAgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPmlwKSkKLQkJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CisJCSAgICAhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+aXApKSB7CisJCQliYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKwkJCXJldHVybjsKKwkJfQogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGFib3ZlIGRvd25fcmVhZF90cnlsb2NrKCkgbWlnaHQgaGF2ZSBzdWNjZWVkZWQgaW4KKwkJICogd2hpY2ggY2FzZSB3ZSdsbCBoYXZlIG1pc3NlZCB0aGUgbWlnaHRfc2xlZXAoKSBmcm9tCisJCSAqIGRvd25fcmVhZCgpOgorCQkgKi8KKwkJbWlnaHRfc2xlZXAoKTsKIAl9CiAKIAl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7Ci0JaWYgKCF2bWEpCi0JCWdvdG8gYmFkX2FyZWE7Ci0JaWYgKHZtYS0+dm1fc3RhcnQgPD0gYWRkcmVzcykKKwlpZiAodW5saWtlbHkoIXZtYSkpIHsKKwkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKKwl9CisJaWYgKGxpa2VseSh2bWEtPnZtX3N0YXJ0IDw9IGFkZHJlc3MpKQogCQlnb3RvIGdvb2RfYXJlYTsKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkKLQkJZ290byBiYWRfYXJlYTsKKwlpZiAodW5saWtlbHkoISh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkpIHsKKwkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKKwl9CiAJaWYgKGVycm9yX2NvZGUgJiBQRl9VU0VSKSB7CiAJCS8qCiAJCSAqIEFjY2Vzc2luZyB0aGUgc3RhY2sgYmVsb3cgJXNwIGlzIGFsd2F5cyBhIGJ1Zy4KIAkJICogVGhlIGxhcmdlIGN1c2hpb24gYWxsb3dzIGluc3RydWN0aW9ucyBsaWtlIGVudGVyCi0JCSAqIGFuZCBwdXNoYSB0byB3b3JrLiAgKCJlbnRlciAkNjU1MzUsJDMxIiBwdXNoZXMKKwkJICogYW5kIHB1c2hhIHRvIHdvcmsuICgiZW50ZXIgJDY1NTM1LCAkMzEiIHB1c2hlcwogCQkgKiAzMiBwb2ludGVycyBhbmQgdGhlbiBkZWNyZW1lbnRzICVzcCBieSA2NTUzNS4pCiAJCSAqLwotCQlpZiAoYWRkcmVzcyArIDY1NTM2ICsgMzIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgPCByZWdzLT5zcCkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCWlmICh1bmxpa2VseShhZGRyZXNzICsgNjU1MzYgKyAzMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSA8IHJlZ3MtPnNwKSkgeworCQkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCQlyZXR1cm47CisJCX0KIAl9Ci0JaWYgKGV4cGFuZF9zdGFjayh2bWEsIGFkZHJlc3MpKQotCQlnb3RvIGJhZF9hcmVhOwotLyoKLSAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBhY2Nlc3MsIHNvCi0gKiB3ZSBjYW4gaGFuZGxlIGl0Li4KLSAqLworCWlmICh1bmxpa2VseShleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkpIHsKKwkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBhY2Nlc3MsIHNvCisJICogd2UgY2FuIGhhbmRsZSBpdC4uCisJICovCiBnb29kX2FyZWE6Ci0Jc2lfY29kZSA9IFNFR1ZfQUNDRVJSOwotCXdyaXRlID0gMDsKLQlzd2l0Y2ggKGVycm9yX2NvZGUgJiAoUEZfUFJPVHxQRl9XUklURSkpIHsKLQlkZWZhdWx0OgkvKiAzOiB3cml0ZSwgcHJlc2VudCAqLwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFBGX1dSSVRFOgkJLyogd3JpdGUsIG5vdCBwcmVzZW50ICovCi0JCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCQlnb3RvIGJhZF9hcmVhOwotCQl3cml0ZSsrOwotCQlicmVhazsKLQljYXNlIFBGX1BST1Q6CQkvKiByZWFkLCBwcmVzZW50ICovCi0JCWdvdG8gYmFkX2FyZWE7Ci0JY2FzZSAwOgkJCS8qIHJlYWQsIG5vdCBwcmVzZW50ICovCi0JCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpKQotCQkJZ290byBiYWRfYXJlYTsKKwl3cml0ZSA9IGVycm9yX2NvZGUgJiBQRl9XUklURTsKKworCWlmICh1bmxpa2VseShhY2Nlc3NfZXJyb3IoZXJyb3JfY29kZSwgd3JpdGUsIHZtYSkpKSB7CisJCWJhZF9hcmVhX2FjY2Vzc19lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZmF1bHQsCiAJICogbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbwotCSAqIHRoZSBmYXVsdC4KKwkgKiB0aGUgZmF1bHQ6CiAJICovCiAJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgd3JpdGUpOworCiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7Ci0JCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKLQkJCWdvdG8gb3V0X29mX21lbW9yeTsKLQkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCi0JCQlnb3RvIGRvX3NpZ2J1czsKLQkJQlVHKCk7CisJCW1tX2ZhdWx0X2Vycm9yKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIGZhdWx0KTsKKwkJcmV0dXJuOwogCX0KKwogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKQogCQl0c2stPm1hal9mbHQrKzsKIAllbHNlCiAJCXRzay0+bWluX2ZsdCsrOwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogRGlkIGl0IGhpdCB0aGUgRE9TIHNjcmVlbiBtZW1vcnkgVkEgZnJvbSB2bTg2IG1vZGU/Ci0JICovCi0JaWYgKHY4MDg2X21vZGUocmVncykpIHsKLQkJdW5zaWduZWQgbG9uZyBiaXQgPSAoYWRkcmVzcyAtIDB4QTAwMDApID4+IFBBR0VfU0hJRlQ7Ci0JCWlmIChiaXQgPCAzMikKLQkJCXRzay0+dGhyZWFkLnNjcmVlbl9iaXRtYXAgfD0gMSA8PCBiaXQ7Ci0JfQotI2VuZGlmCisJY2hlY2tfdjgwODZfbW9kZShyZWdzLCBhZGRyZXNzLCB0c2spOworCiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm47Ci0KLS8qCi0gKiBTb21ldGhpbmcgdHJpZWQgdG8gYWNjZXNzIG1lbW9yeSB0aGF0IGlzbid0IGluIG91ciBtZW1vcnkgbWFwLi4KLSAqIEZpeCBpdCwgYnV0IGNoZWNrIGlmIGl0J3Mga2VybmVsIG9yIHVzZXIgZmlyc3QuLgotICovCi1iYWRfYXJlYToKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCi1iYWRfYXJlYV9ub3NlbWFwaG9yZToKLQkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KLQlpZiAoZXJyb3JfY29kZSAmIFBGX1VTRVIpIHsKLQkJLyoKLQkJICogSXQncyBwb3NzaWJsZSB0byBoYXZlIGludGVycnVwdHMgb2ZmIGhlcmUuCi0JCSAqLwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkJLyoKLQkJICogVmFsaWQgdG8gZG8gYW5vdGhlciBwYWdlIGZhdWx0IGhlcmUgYmVjYXVzZSB0aGlzIG9uZSBjYW1lCi0JCSAqIGZyb20gdXNlciBzcGFjZS4KLQkJICovCi0JCWlmIChpc19wcmVmZXRjaChyZWdzLCBhZGRyZXNzLCBlcnJvcl9jb2RlKSkKLQkJCXJldHVybjsKLQotCQlpZiAoaXNfZXJyYXRhMTAwKHJlZ3MsIGFkZHJlc3MpKQotCQkJcmV0dXJuOwotCi0JCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHVuaGFuZGxlZF9zaWduYWwodHNrLCBTSUdTRUdWKSAmJgotCQkgICAgcHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoCi0JCQkiJXMlc1slZF06IHNlZ2ZhdWx0IGF0ICVseCBpcCAlcCBzcCAlcCBlcnJvciAlbHgiLAotCQkJdGFza19waWRfbnIodHNrKSA+IDEgPyBLRVJOX0lORk8gOiBLRVJOX0VNRVJHLAotCQkJdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCBhZGRyZXNzLAotCQkJKHZvaWQgKikgcmVncy0+aXAsICh2b2lkICopIHJlZ3MtPnNwLCBlcnJvcl9jb2RlKTsKLQkJCXByaW50X3ZtYV9hZGRyKCIgaW4gIiwgcmVncy0+aXApOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0KLQkJdHNrLT50aHJlYWQuY3IyID0gYWRkcmVzczsKLQkJLyogS2VybmVsIGFkZHJlc3NlcyBhcmUgYWx3YXlzIHByb3RlY3Rpb24gZmF1bHRzICovCi0JCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlIHwgKGFkZHJlc3MgPj0gVEFTS19TSVpFKTsKLQkJdHNrLT50aHJlYWQudHJhcF9ubyA9IDE0OwotCQlmb3JjZV9zaWdfaW5mb19mYXVsdChTSUdTRUdWLCBzaV9jb2RlLCBhZGRyZXNzLCB0c2spOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGlzX2YwMGZfYnVnKHJlZ3MsIGFkZHJlc3MpKQotCQlyZXR1cm47Ci0KLW5vX2NvbnRleHQ6Ci0JLyogQXJlIHdlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGlzIGtlcm5lbCBmYXVsdD8gICovCi0JaWYgKGZpeHVwX2V4Y2VwdGlvbihyZWdzKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBYODZfMzIKLQkgKiBWYWxpZCB0byBkbyBhbm90aGVyIHBhZ2UgZmF1bHQgaGVyZSwgYmVjYXVzZSBpZiB0aGlzIGZhdWx0Ci0JICogaGFkIGJlZW4gdHJpZ2dlcmVkIGJ5IGlzX3ByZWZldGNoIGZpeHVwX2V4Y2VwdGlvbiB3b3VsZCBoYXZlCi0JICogaGFuZGxlZCBpdC4KLQkgKgotCSAqIFg4Nl82NAotCSAqIEhhbGwgb2Ygc2hhbWUgb2YgQ1BVL0JJT1MgYnVncy4KLQkgKi8KLQlpZiAoaXNfcHJlZmV0Y2gocmVncywgYWRkcmVzcywgZXJyb3JfY29kZSkpCi0JCXJldHVybjsKLQotCWlmIChpc19lcnJhdGE5MyhyZWdzLCBhZGRyZXNzKSkKLQkJcmV0dXJuOwotCi0vKgotICogT29wcy4gVGhlIGtlcm5lbCB0cmllZCB0byBhY2Nlc3Mgc29tZSBiYWQgcGFnZS4gV2UnbGwgaGF2ZSB0bwotICogdGVybWluYXRlIHRoaW5ncyB3aXRoIGV4dHJlbWUgcHJlanVkaWNlLgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWJ1c3Rfc3BpbmxvY2tzKDEpOwotI2Vsc2UKLQlmbGFncyA9IG9vcHNfYmVnaW4oKTsKLSNlbmRpZgotCi0Jc2hvd19mYXVsdF9vb3BzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwotCi0JdHNrLT50aHJlYWQuY3IyID0gYWRkcmVzczsKLQl0c2stPnRocmVhZC50cmFwX25vID0gMTQ7Ci0JdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZGllKCJPb3BzIiwgcmVncywgZXJyb3JfY29kZSk7Ci0JYnVzdF9zcGlubG9ja3MoMCk7Ci0JZG9fZXhpdChTSUdLSUxMKTsKLSNlbHNlCi0Jc2lnID0gU0lHS0lMTDsKLQlpZiAoX19kaWUoIk9vcHMiLCByZWdzLCBlcnJvcl9jb2RlKSkKLQkJc2lnID0gMDsKLQkvKiBFeGVjdXRpdmUgc3VtbWFyeSBpbiBjYXNlIHRoZSBib2R5IG9mIHRoZSBvb3BzIHNjcm9sbGVkIGF3YXkgKi8KLQlwcmludGsoS0VSTl9FTUVSRyAiQ1IyOiAlMDE2bHhcbiIsIGFkZHJlc3MpOwotCW9vcHNfZW5kKGZsYWdzLCByZWdzLCBzaWcpOwotI2VuZGlmCi0KLW91dF9vZl9tZW1vcnk6Ci0JLyoKLQkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgY2FsbCB0aGUgT09NIGtpbGxlciwgYW5kIHJldHVybiB0aGUgdXNlcnNwYWNlCi0JICogKHdoaWNoIHdpbGwgcmV0cnkgdGhlIGZhdWx0LCBvciBraWxsIHVzIGlmIHdlIGdvdCBvb20ta2lsbGVkKS4KLQkgKi8KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7Ci0JcmV0dXJuOwotCi1kb19zaWdidXM6Ci0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQotCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWUgKi8KLQlpZiAoIShlcnJvcl9jb2RlICYgUEZfVVNFUikpCi0JCWdvdG8gbm9fY29udGV4dDsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogVXNlciBzcGFjZSA9PiBvayB0byBkbyBhbm90aGVyIHBhZ2UgZmF1bHQgKi8KLQlpZiAoaXNfcHJlZmV0Y2gocmVncywgYWRkcmVzcywgZXJyb3JfY29kZSkpCi0JCXJldHVybjsKLSNlbmRpZgotCXRzay0+dGhyZWFkLmNyMiA9IGFkZHJlc3M7Ci0JdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7Ci0JdHNrLT50aHJlYWQudHJhcF9ubyA9IDE0OwotCWZvcmNlX3NpZ19pbmZvX2ZhdWx0KFNJR0JVUywgQlVTX0FEUkVSUiwgYWRkcmVzcywgdHNrKTsKLX0KLQotREVGSU5FX1NQSU5MT0NLKHBnZF9sb2NrKTsKLUxJU1RfSEVBRChwZ2RfbGlzdCk7Ci0KLXZvaWQgdm1hbGxvY19zeW5jX2FsbCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAoU0hBUkVEX0tFUk5FTF9QTUQpCi0JCXJldHVybjsKLQotCWZvciAoYWRkcmVzcyA9IFZNQUxMT0NfU1RBUlQgJiBQTURfTUFTSzsKLQkgICAgIGFkZHJlc3MgPj0gVEFTS19TSVpFICYmIGFkZHJlc3MgPCBGSVhBRERSX1RPUDsKLQkgICAgIGFkZHJlc3MgKz0gUE1EX1NJWkUpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBnZF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJnBnZF9saXN0LCBscnUpIHsKLQkJCWlmICghdm1hbGxvY19zeW5jX29uZShwYWdlX2FkZHJlc3MocGFnZSksCi0JCQkJCSAgICAgIGFkZHJlc3MpKQotCQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBnZF9sb2NrLCBmbGFncyk7Ci0JfQotI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwotCWZvciAoYWRkcmVzcyA9IFZNQUxMT0NfU1RBUlQgJiBQR0RJUl9NQVNLOyBhZGRyZXNzIDw9IFZNQUxMT0NfRU5EOwotCSAgICAgYWRkcmVzcyArPSBQR0RJUl9TSVpFKSB7Ci0JCWNvbnN0IHBnZF90ICpwZ2RfcmVmID0gcGdkX29mZnNldF9rKGFkZHJlc3MpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlpZiAocGdkX25vbmUoKnBnZF9yZWYpKQotCQkJY29udGludWU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZwZ2RfbGlzdCwgbHJ1KSB7Ci0JCQlwZ2RfdCAqcGdkOwotCQkJcGdkID0gKHBnZF90ICopcGFnZV9hZGRyZXNzKHBhZ2UpICsgcGdkX2luZGV4KGFkZHJlc3MpOwotCQkJaWYgKHBnZF9ub25lKCpwZ2QpKQotCQkJCXNldF9wZ2QocGdkLCAqcGdkX3JlZik7Ci0JCQllbHNlCi0JCQkJQlVHX09OKHBnZF9wYWdlX3ZhZGRyKCpwZ2QpICE9IHBnZF9wYWdlX3ZhZGRyKCpwZ2RfcmVmKSk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGdkX2xvY2ssIGZsYWdzKTsKLQl9Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwppbmRleCBiY2MwNzljLi4wMGYxMjdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+IC8qIGZvciB0b3RhbHJhbV9wYWdlcyAqLwogCiB2b2lkICprbWFwKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMTU2LDMgKzE1NywzNiBAQAogRVhQT1JUX1NZTUJPTChrdW5tYXApOwogRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pYyk7CiBFWFBPUlRfU1lNQk9MKGt1bm1hcF9hdG9taWMpOworCisjaWZkZWYgQ09ORklHX05VTUEKK3ZvaWQgX19pbml0IHNldF9oaWdobWVtX3BhZ2VzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlpbnQgbmlkOworCisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3BmbjsKKworCQlpZiAoIWlzX2hpZ2htZW0oem9uZSkpCisJCQljb250aW51ZTsKKworCQl6b25lX3N0YXJ0X3BmbiA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuOworCQl6b25lX2VuZF9wZm4gPSB6b25lX3N0YXJ0X3BmbiArIHpvbmUtPnNwYW5uZWRfcGFnZXM7CisKKwkJbmlkID0gem9uZV90b19uaWQoem9uZSk7CisJCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyAlcyBmb3Igbm9kZSAlZCAoJTA4bHg6JTA4bHgpXG4iLAorCQkJCXpvbmUtPm5hbWUsIG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CisKKwkJYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgem9uZV9zdGFydF9wZm4sCisJCQkJIHpvbmVfZW5kX3Bmbik7CisJfQorCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCit7CisJYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuKTsKKworCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKK30KKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmE3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTAsMCArMSw0OSBAQAorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCit2b2lkIGZyZWVfaW5pdF9wYWdlcyhjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBiZWdpbjsKKworCWlmIChhZGRyID49IGVuZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBkZWJ1Z2dpbmcgcGFnZSBhY2Nlc3NlcyB0aGVuIGRvIG5vdCBmcmVlIHRoaXMgbWVtb3J5IGJ1dAorCSAqIG1hcmsgdGhlbSBub3QgcHJlc2VudCAtIGFueSBidWdneSBpbml0LXNlY3Rpb24gYWNjZXNzIHdpbGwKKwkgKiBjcmVhdGUgYSBrZXJuZWwgcGFnZSBmYXVsdDoKKwkgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWc6IHVubWFwcGluZyBpbml0IG1lbW9yeSAlMDhseC4uJTA4bHhcbiIsCisJCWJlZ2luLCBQQUdFX0FMSUdOKGVuZCkpOworCXNldF9tZW1vcnlfbnAoYmVnaW4sIChlbmQgLSBiZWdpbikgPj4gUEFHRV9TSElGVCk7CisjZWxzZQorCS8qCisJICogV2UganVzdCBtYXJrZWQgdGhlIGtlcm5lbCB0ZXh0IHJlYWQgb25seSBhYm92ZSwgbm93IHRoYXQKKwkgKiB3ZSBhcmUgZ29pbmcgdG8gZnJlZSBwYXJ0IG9mIHRoYXQsIHdlIG5lZWQgdG8gbWFrZSB0aGF0CisJICogd3JpdGVhYmxlIGZpcnN0LgorCSAqLworCXNldF9tZW1vcnlfcncoYmVnaW4sIChlbmQgLSBiZWdpbikgPj4gUEFHRV9TSElGVCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nICVzOiAlbHVrIGZyZWVkXG4iLCB3aGF0LCAoZW5kIC0gYmVnaW4pID4+IDEwKTsKKworCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKKwkJbWVtc2V0KCh2b2lkICopKGFkZHIgJiB+KFBBR0VfU0laRS0xKSksCisJCQlQT0lTT05fRlJFRV9JTklUTUVNLCBQQUdFX1NJWkUpOworCQlmcmVlX3BhZ2UoYWRkcik7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorI2VuZGlmCit9CisKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCit7CisJZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCisJCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbiksCisJCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCAyY2VmMDUwLi40N2RmMGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC00OSw5ICs0OSw2IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLXVuc2lnbmVkIGludCBfX1ZNQUxMT0NfUkVTRVJWRSA9IDEyOCA8PCAyMDsKIAogdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwpAQCAtMTM4LDYgKzEzNSwyMyBAQAogCXJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIDApOwogfQogCitwbWRfdCAqIF9faW5pdCBwb3B1bGF0ZV9leHRyYV9wbWQodW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlpbnQgcGdkX2lkeCA9IHBnZF9pbmRleCh2YWRkcik7CisJaW50IHBtZF9pZHggPSBwbWRfaW5kZXgodmFkZHIpOworCisJcmV0dXJuIG9uZV9tZF90YWJsZV9pbml0KHN3YXBwZXJfcGdfZGlyICsgcGdkX2lkeCkgKyBwbWRfaWR4OworfQorCitwdGVfdCAqIF9faW5pdCBwb3B1bGF0ZV9leHRyYV9wdGUodW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlpbnQgcHRlX2lkeCA9IHB0ZV9pbmRleCh2YWRkcik7CisJcG1kX3QgKnBtZDsKKworCXBtZCA9IHBvcHVsYXRlX2V4dHJhX3BtZCh2YWRkcik7CisJcmV0dXJuIG9uZV9wYWdlX3RhYmxlX2luaXQocG1kKSArIHB0ZV9pZHg7Cit9CisKIHN0YXRpYyBwdGVfdCAqX19pbml0IHBhZ2VfdGFibGVfa21hcF9jaGVjayhwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCAqbGFzdHB0ZSkKIHsKQEAgLTQ3MCwyMiArNDg0LDEwIEBACiAJd29ya193aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgYWRkX2hpZ2hwYWdlc193b3JrX2ZuLCAmZGF0YSk7CiB9CiAKLSNpZm5kZWYgQ09ORklHX05VTUEKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCi17Ci0JYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuKTsKLQotCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKLX0KLSNlbmRpZiAvKiAhQ09ORklHX05VTUEgKi8KLQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJtYW5lbnRfa21hcHNfaW5pdChwZ2RfdCAqcGdkX2Jhc2UpCiB7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdCh2b2lkKQotewotfQogI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCiAKIHZvaWQgX19pbml0IG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCkBAIC02NzUsNiArNjc3LDg2IEBACiB9CiBlYXJseV9wYXJhbSgiaGlnaG1lbSIsIHBhcnNlX2hpZ2htZW0pOwogCisjZGVmaW5lIE1TR19ISUdITUVNX1RPT19CSUcgXAorCSJoaWdobWVtIHNpemUgKCVsdU1CKSBpcyBiaWdnZXIgdGhhbiBwYWdlcyBhdmFpbGFibGUgKCVsdU1CKSFcbiIKKworI2RlZmluZSBNU0dfTE9XTUVNX1RPT19TTUFMTCBcCisJImhpZ2htZW0gc2l6ZSAoJWx1TUIpIHJlc3VsdHMgaW4gPDY0TUIgbG93bWVtLCBpZ25vcmluZyBpdCFcbiIKKy8qCisgKiBBbGwgb2YgUkFNIGZpdHMgaW50byBsb3dtZW0gLSBidXQgaWYgdXNlciB3YW50cyBoaWdobWVtCisgKiBhcnRpZmljaWFsbHkgdmlhIHRoZSBoaWdobWVtPXggYm9vdCBwYXJhbWV0ZXIgdGhlbiBjcmVhdGUKKyAqIGl0OgorICovCit2b2lkIF9faW5pdCBsb3dtZW1fcGZuX2luaXQodm9pZCkKK3sKKwkvKiBtYXhfbG93X3BmbiBpcyAwLCB3ZSBhbHJlYWR5IGhhdmUgZWFybHlfcmVzIHN1cHBvcnQgKi8KKwltYXhfbG93X3BmbiA9IG1heF9wZm47CisKKwlpZiAoaGlnaG1lbV9wYWdlcyA9PSAtMSkKKwkJaGlnaG1lbV9wYWdlcyA9IDA7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlpZiAoaGlnaG1lbV9wYWdlcyA+PSBtYXhfcGZuKSB7CisJCXByaW50ayhLRVJOX0VSUiBNU0dfSElHSE1FTV9UT09fQklHLAorCQkJcGFnZXNfdG9fbWIoaGlnaG1lbV9wYWdlcyksIHBhZ2VzX3RvX21iKG1heF9wZm4pKTsKKwkJaGlnaG1lbV9wYWdlcyA9IDA7CisJfQorCWlmIChoaWdobWVtX3BhZ2VzKSB7CisJCWlmIChtYXhfbG93X3BmbiAtIGhpZ2htZW1fcGFnZXMgPCA2NCoxMDI0KjEwMjQvUEFHRV9TSVpFKSB7CisJCQlwcmludGsoS0VSTl9FUlIgTVNHX0xPV01FTV9UT09fU01BTEwsCisJCQkJcGFnZXNfdG9fbWIoaGlnaG1lbV9wYWdlcykpOworCQkJaGlnaG1lbV9wYWdlcyA9IDA7CisJCX0KKwkJbWF4X2xvd19wZm4gLT0gaGlnaG1lbV9wYWdlczsKKwl9CisjZWxzZQorCWlmIChoaWdobWVtX3BhZ2VzKQorCQlwcmludGsoS0VSTl9FUlIgImlnbm9yaW5nIGhpZ2htZW0gc2l6ZSBvbiBub24taGlnaG1lbSBrZXJuZWwhXG4iKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIE1TR19ISUdITUVNX1RPT19TTUFMTCBcCisJIm9ubHkgJWx1TUIgaGlnaG1lbSBwYWdlcyBhdmFpbGFibGUsIGlnbm9yaW5nIGhpZ2htZW0gc2l6ZSBvZiAlbHVNQiFcbiIKKworI2RlZmluZSBNU0dfSElHSE1FTV9UUklNTUVEIFwKKwkiV2FybmluZzogb25seSA0R0Igd2lsbCBiZSB1c2VkLiBVc2UgYSBISUdITUVNNjRHIGVuYWJsZWQga2VybmVsIVxuIgorLyoKKyAqIFdlIGhhdmUgbW9yZSBSQU0gdGhhbiBmaXRzIGludG8gbG93bWVtIC0gd2UgdHJ5IHRvIHB1dCBpdCBpbnRvCisgKiBoaWdobWVtLCBhbHNvIHRha2luZyB0aGUgaGlnaG1lbT14IGJvb3QgcGFyYW1ldGVyIGludG8gYWNjb3VudDoKKyAqLwordm9pZCBfX2luaXQgaGlnaG1lbV9wZm5faW5pdCh2b2lkKQoreworCW1heF9sb3dfcGZuID0gTUFYTUVNX1BGTjsKKworCWlmIChoaWdobWVtX3BhZ2VzID09IC0xKQorCQloaWdobWVtX3BhZ2VzID0gbWF4X3BmbiAtIE1BWE1FTV9QRk47CisKKwlpZiAoaGlnaG1lbV9wYWdlcyArIE1BWE1FTV9QRk4gPCBtYXhfcGZuKQorCQltYXhfcGZuID0gTUFYTUVNX1BGTiArIGhpZ2htZW1fcGFnZXM7CisKKwlpZiAoaGlnaG1lbV9wYWdlcyArIE1BWE1FTV9QRk4gPiBtYXhfcGZuKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTVNHX0hJR0hNRU1fVE9PX1NNQUxMLAorCQkJcGFnZXNfdG9fbWIobWF4X3BmbiAtIE1BWE1FTV9QRk4pLAorCQkJcGFnZXNfdG9fbWIoaGlnaG1lbV9wYWdlcykpOworCQloaWdobWVtX3BhZ2VzID0gMDsKKwl9CisjaWZuZGVmIENPTkZJR19ISUdITUVNCisJLyogTWF4aW11bSBtZW1vcnkgdXNhYmxlIGlzIHdoYXQgaXMgZGlyZWN0bHkgYWRkcmVzc2FibGUgKi8KKwlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIG9ubHkgJWxkTUIgd2lsbCBiZSB1c2VkLlxuIiwgTUFYTUVNPj4yMCk7CisJaWYgKG1heF9wZm4gPiBNQVhfTk9OUEFFX1BGTikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVXNlIGEgSElHSE1FTTY0RyBlbmFibGVkIGtlcm5lbC5cbiIpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVXNlIGEgSElHSE1FTSBlbmFibGVkIGtlcm5lbC5cbiIpOworCW1heF9wZm4gPSBNQVhNRU1fUEZOOworI2Vsc2UgLyogIUNPTkZJR19ISUdITUVNICovCisjaWZuZGVmIENPTkZJR19ISUdITUVNNjRHCisJaWYgKG1heF9wZm4gPiBNQVhfTk9OUEFFX1BGTikgeworCQltYXhfcGZuID0gTUFYX05PTlBBRV9QRk47CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTVNHX0hJR0hNRU1fVFJJTU1FRCk7CisJfQorI2VuZGlmIC8qICFDT05GSUdfSElHSE1FTTY0RyAqLworI2VuZGlmIC8qICFDT05GSUdfSElHSE1FTSAqLworfQorCiAvKgogICogRGV0ZXJtaW5lIGxvdyBhbmQgaGlnaCBtZW1vcnkgcmFuZ2VzOgogICovCkBAIC02ODIsNjggKzc2NCwxMCBAQAogewogCS8qIGl0IGNvdWxkIHVwZGF0ZSBtYXhfcGZuICovCiAKLQkvKiBtYXhfbG93X3BmbiBpcyAwLCB3ZSBhbHJlYWR5IGhhdmUgZWFybHlfcmVzIHN1cHBvcnQgKi8KLQotCW1heF9sb3dfcGZuID0gbWF4X3BmbjsKLQlpZiAobWF4X2xvd19wZm4gPiBNQVhNRU1fUEZOKSB7Ci0JCWlmIChoaWdobWVtX3BhZ2VzID09IC0xKQotCQkJaGlnaG1lbV9wYWdlcyA9IG1heF9wZm4gLSBNQVhNRU1fUEZOOwotCQlpZiAoaGlnaG1lbV9wYWdlcyArIE1BWE1FTV9QRk4gPCBtYXhfcGZuKQotCQkJbWF4X3BmbiA9IE1BWE1FTV9QRk4gKyBoaWdobWVtX3BhZ2VzOwotCQlpZiAoaGlnaG1lbV9wYWdlcyArIE1BWE1FTV9QRk4gPiBtYXhfcGZuKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJvbmx5ICVsdU1CIGhpZ2htZW0gcGFnZXMgIgotCQkJCSJhdmFpbGFibGUsIGlnbm9yaW5nIGhpZ2htZW0gc2l6ZSBvZiAldU1CLlxuIiwKLQkJCQlwYWdlc190b19tYihtYXhfcGZuIC0gTUFYTUVNX1BGTiksCi0JCQkJcGFnZXNfdG9fbWIoaGlnaG1lbV9wYWdlcykpOwotCQkJaGlnaG1lbV9wYWdlcyA9IDA7Ci0JCX0KLQkJbWF4X2xvd19wZm4gPSBNQVhNRU1fUEZOOwotI2lmbmRlZiBDT05GSUdfSElHSE1FTQotCQkvKiBNYXhpbXVtIG1lbW9yeSB1c2FibGUgaXMgd2hhdCBpcyBkaXJlY3RseSBhZGRyZXNzYWJsZSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIG9ubHkgJWxkTUIgd2lsbCBiZSB1c2VkLlxuIiwKLQkJCQkJTUFYTUVNPj4yMCk7Ci0JCWlmIChtYXhfcGZuID4gTUFYX05PTlBBRV9QRk4pCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICJVc2UgYSBISUdITUVNNjRHIGVuYWJsZWQga2VybmVsLlxuIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVzZSBhIEhJR0hNRU0gZW5hYmxlZCBrZXJuZWwuXG4iKTsKLQkJbWF4X3BmbiA9IE1BWE1FTV9QRk47Ci0jZWxzZSAvKiAhQ09ORklHX0hJR0hNRU0gKi8KLSNpZm5kZWYgQ09ORklHX0hJR0hNRU02NEcKLQkJaWYgKG1heF9wZm4gPiBNQVhfTk9OUEFFX1BGTikgewotCQkJbWF4X3BmbiA9IE1BWF9OT05QQUVfUEZOOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBvbmx5IDRHQiB3aWxsIGJlIHVzZWQuIgotCQkJCSJVc2UgYSBISUdITUVNNjRHIGVuYWJsZWQga2VybmVsLlxuIik7Ci0JCX0KLSNlbmRpZiAvKiAhQ09ORklHX0hJR0hNRU02NEcgKi8KLSNlbmRpZiAvKiAhQ09ORklHX0hJR0hNRU0gKi8KLQl9IGVsc2UgewotCQlpZiAoaGlnaG1lbV9wYWdlcyA9PSAtMSkKLQkJCWhpZ2htZW1fcGFnZXMgPSAwOwotI2lmZGVmIENPTkZJR19ISUdITUVNCi0JCWlmIChoaWdobWVtX3BhZ2VzID49IG1heF9wZm4pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiaGlnaG1lbSBzaXplIHNwZWNpZmllZCAoJXVNQikgaXMgIgotCQkJCSJiaWdnZXIgdGhhbiBwYWdlcyBhdmFpbGFibGUgKCVsdU1CKSEuXG4iLAotCQkJCXBhZ2VzX3RvX21iKGhpZ2htZW1fcGFnZXMpLAotCQkJCXBhZ2VzX3RvX21iKG1heF9wZm4pKTsKLQkJCWhpZ2htZW1fcGFnZXMgPSAwOwotCQl9Ci0JCWlmIChoaWdobWVtX3BhZ2VzKSB7Ci0JCQlpZiAobWF4X2xvd19wZm4gLSBoaWdobWVtX3BhZ2VzIDwKLQkJCSAgICA2NCoxMDI0KjEwMjQvUEFHRV9TSVpFKXsKLQkJCQlwcmludGsoS0VSTl9FUlIgImhpZ2htZW0gc2l6ZSAldU1CIHJlc3VsdHMgaW4gIgotCQkJCSJzbWFsbGVyIHRoYW4gNjRNQiBsb3dtZW0sIGlnbm9yaW5nIGl0LlxuIgotCQkJCQksIHBhZ2VzX3RvX21iKGhpZ2htZW1fcGFnZXMpKTsKLQkJCQloaWdobWVtX3BhZ2VzID0gMDsKLQkJCX0KLQkJCW1heF9sb3dfcGZuIC09IGhpZ2htZW1fcGFnZXM7Ci0JCX0KLSNlbHNlCi0JCWlmIChoaWdobWVtX3BhZ2VzKQotCQkJcHJpbnRrKEtFUk5fRVJSICJpZ25vcmluZyBoaWdobWVtIHNpemUgb24gbm9uLWhpZ2htZW0iCi0JCQkJCSIga2VybmVsIVxuIik7Ci0jZW5kaWYKLQl9CisJaWYgKG1heF9wZm4gPD0gTUFYTUVNX1BGTikKKwkJbG93bWVtX3Bmbl9pbml0KCk7CisJZWxzZQorCQloaWdobWVtX3Bmbl9pbml0KCk7CiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKQEAgLTgyNiwxMCArODUwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBwdWRzLCBwbWRzLCBwdGVzLCB0YWJsZXMsIHN0YXJ0OwogCiAJcHVkcyA9IChlbmQgKyBQVURfU0laRSAtIDEpID4+IFBVRF9TSElGVDsKLQl0YWJsZXMgPSBQQUdFX0FMSUdOKHB1ZHMgKiBzaXplb2YocHVkX3QpKTsKKwl0YWJsZXMgPSByb3VuZHVwKHB1ZHMgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpOwogCiAJcG1kcyA9IChlbmQgKyBQTURfU0laRSAtIDEpID4+IFBNRF9TSElGVDsKLQl0YWJsZXMgKz0gUEFHRV9BTElHTihwbWRzICogc2l6ZW9mKHBtZF90KSk7CisJdGFibGVzICs9IHJvdW5kdXAocG1kcyAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7CiAKIAlpZiAodXNlX3BzZSkgewogCQl1bnNpZ25lZCBsb25nIGV4dHJhOwpAQCAtODQwLDEwICs4NjQsMTAgQEAKIAl9IGVsc2UKIAkJcHRlcyA9IChlbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCi0JdGFibGVzICs9IFBBR0VfQUxJR04ocHRlcyAqIHNpemVvZihwdGVfdCkpOworCXRhYmxlcyArPSByb3VuZHVwKHB0ZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOwogCiAJLyogZm9yIGZpeG1hcCAqLwotCXRhYmxlcyArPSBQQUdFX0FMSUdOKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyAqIHNpemVvZihwdGVfdCkpOworCXRhYmxlcyArPSByb3VuZHVwKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7CiAKIAkvKgogCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZApAQCAtMTE5Myw0NSArMTIxNyw2IEBACiB9CiAjZW5kaWYKIAotdm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCS8qCi0JICogSWYgZGVidWdnaW5nIHBhZ2UgYWNjZXNzZXMgdGhlbiBkbyBub3QgZnJlZSB0aGlzIG1lbW9yeSBidXQKLQkgKiBtYXJrIHRoZW0gbm90IHByZXNlbnQgLSBhbnkgYnVnZ3kgaW5pdC1zZWN0aW9uIGFjY2VzcyB3aWxsCi0JICogY3JlYXRlIGEga2VybmVsIHBhZ2UgZmF1bHQ6Ci0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiZGVidWc6IHVubWFwcGluZyBpbml0IG1lbW9yeSAlMDhseC4uJTA4bHhcbiIsCi0JCWJlZ2luLCBQQUdFX0FMSUdOKGVuZCkpOwotCXNldF9tZW1vcnlfbnAoYmVnaW4sIChlbmQgLSBiZWdpbikgPj4gUEFHRV9TSElGVCk7Ci0jZWxzZQotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCS8qCi0JICogV2UganVzdCBtYXJrZWQgdGhlIGtlcm5lbCB0ZXh0IHJlYWQgb25seSBhYm92ZSwgbm93IHRoYXQKLQkgKiB3ZSBhcmUgZ29pbmcgdG8gZnJlZSBwYXJ0IG9mIHRoYXQsIHdlIG5lZWQgdG8gbWFrZSB0aGF0Ci0JICogd3JpdGVhYmxlIGZpcnN0LgotCSAqLwotCXNldF9tZW1vcnlfcncoYmVnaW4sIChlbmQgLSBiZWdpbikgPj4gUEFHRV9TSElGVCk7Ci0KLQlmb3IgKGFkZHIgPSBiZWdpbjsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCW1lbXNldCgodm9pZCAqKWFkZHIsIFBPSVNPTl9GUkVFX0lOSVRNRU0sIFBBR0VfU0laRSk7Ci0JCWZyZWVfcGFnZShhZGRyKTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKLXsKLQlmcmVlX2luaXRfcGFnZXMoInVudXNlZCBrZXJuZWwgbWVtb3J5IiwKLQkJCSh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKSwKLQkJCSh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCkpOwotfQotCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCBiMTM1MjI1Li4wN2Y0NGQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC0xNjgsMzQgKzE2OCw1MSBAQAogCXJldHVybiBwdHI7CiB9CiAKLXZvaWQKLXNldF9wdGVfdmFkZHJfcHVkKHB1ZF90ICpwdWRfcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgbmV3X3B0ZSkKK3N0YXRpYyBwdWRfdCAqZmlsbF9wdWQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlpZiAocGdkX25vbmUoKnBnZCkpIHsKKwkJcHVkX3QgKnB1ZCA9IChwdWRfdCAqKXNwcF9nZXRwYWdlKCk7CisJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBwdWQpOworCQlpZiAocHVkICE9IHB1ZF9vZmZzZXQocGdkLCAwKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiUEFHRVRBQkxFIEJVRyAjMDAhICVwIDwtPiAlcFxuIiwKKwkJCSAgICAgICBwdWQsIHB1ZF9vZmZzZXQocGdkLCAwKSk7CisJfQorCXJldHVybiBwdWRfb2Zmc2V0KHBnZCwgdmFkZHIpOworfQorCitzdGF0aWMgcG1kX3QgKmZpbGxfcG1kKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCXBtZF90ICpwbWQgPSAocG1kX3QgKikgc3BwX2dldHBhZ2UoKTsKKwkJcHVkX3BvcHVsYXRlKCZpbml0X21tLCBwdWQsIHBtZCk7CisJCWlmIChwbWQgIT0gcG1kX29mZnNldChwdWQsIDApKQorCQkJcHJpbnRrKEtFUk5fRVJSICJQQUdFVEFCTEUgQlVHICMwMSEgJXAgPC0+ICVwXG4iLAorCQkJICAgICAgIHBtZCwgcG1kX29mZnNldChwdWQsIDApKTsKKwl9CisJcmV0dXJuIHBtZF9vZmZzZXQocHVkLCB2YWRkcik7Cit9CisKK3N0YXRpYyBwdGVfdCAqZmlsbF9wdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlpZiAocG1kX25vbmUoKnBtZCkpIHsKKwkJcHRlX3QgKnB0ZSA9IChwdGVfdCAqKSBzcHBfZ2V0cGFnZSgpOworCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIHB0ZSk7CisJCWlmIChwdGUgIT0gcHRlX29mZnNldF9rZXJuZWwocG1kLCAwKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiUEFHRVRBQkxFIEJVRyAjMDIhXG4iKTsKKwl9CisJcmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgdmFkZHIpOworfQorCit2b2lkIHNldF9wdGVfdmFkZHJfcHVkKHB1ZF90ICpwdWRfcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgbmV3X3B0ZSkKIHsKIAlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZTsKIAogCXB1ZCA9IHB1ZF9wYWdlICsgcHVkX2luZGV4KHZhZGRyKTsKLQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKLQkJcG1kID0gKHBtZF90ICopIHNwcF9nZXRwYWdlKCk7Ci0JCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBwbWQpOwotCQlpZiAocG1kICE9IHBtZF9vZmZzZXQocHVkLCAwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJQQUdFVEFCTEUgQlVHICMwMSEgJXAgPC0+ICVwXG4iLAotCQkJCXBtZCwgcG1kX29mZnNldChwdWQsIDApKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgdmFkZHIpOwotCWlmIChwbWRfbm9uZSgqcG1kKSkgewotCQlwdGUgPSAocHRlX3QgKikgc3BwX2dldHBhZ2UoKTsKLQkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBwdGUpOwotCQlpZiAocHRlICE9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUEFHRVRBQkxFIEJVRyAjMDIhXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCX0KKwlwbWQgPSBmaWxsX3BtZChwdWQsIHZhZGRyKTsKKwlwdGUgPSBmaWxsX3B0ZShwbWQsIHZhZGRyKTsKIAotCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgdmFkZHIpOwogCXNldF9wdGUocHRlLCBuZXdfcHRlKTsKIAogCS8qCkBAIC0yMDUsOCArMjIyLDcgQEAKIAlfX2ZsdXNoX3RsYl9vbmUodmFkZHIpOwogfQogCi12b2lkCi1zZXRfcHRlX3ZhZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IHB0ZXZhbCkKK3ZvaWQgc2V0X3B0ZV92YWRkcih1bnNpZ25lZCBsb25nIHZhZGRyLCBwdGVfdCBwdGV2YWwpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkX3BhZ2U7CkBAIC0yMjMsNiArMjM5LDI0IEBACiAJc2V0X3B0ZV92YWRkcl9wdWQocHVkX3BhZ2UsIHZhZGRyLCBwdGV2YWwpOwogfQogCitwbWRfdCAqIF9faW5pdCBwb3B1bGF0ZV9leHRyYV9wbWQodW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisKKwlwZ2QgPSBwZ2Rfb2Zmc2V0X2sodmFkZHIpOworCXB1ZCA9IGZpbGxfcHVkKHBnZCwgdmFkZHIpOworCXJldHVybiBmaWxsX3BtZChwdWQsIHZhZGRyKTsKK30KKworcHRlX3QgKiBfX2luaXQgcG9wdWxhdGVfZXh0cmFfcHRlKHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJcG1kX3QgKnBtZDsKKworCXBtZCA9IHBvcHVsYXRlX2V4dHJhX3BtZCh2YWRkcik7CisJcmV0dXJuIGZpbGxfcHRlKHBtZCwgdmFkZHIpOworfQorCiAvKgogICogQ3JlYXRlIGxhcmdlIHBhZ2UgdGFibGUgbWFwcGluZ3MgZm9yIGEgcmFuZ2Ugb2YgcGh5c2ljYWwgYWRkcmVzc2VzLgogICovCkBAIC05NDcsNDMgKzk4MSw2IEBACiAJCWluaXRzaXplID4+IDEwKTsKIH0KIAotdm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gYmVnaW47Ci0KLQlpZiAoYWRkciA+PSBlbmQpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgZGVidWdnaW5nIHBhZ2UgYWNjZXNzZXMgdGhlbiBkbyBub3QgZnJlZSB0aGlzIG1lbW9yeSBidXQKLQkgKiBtYXJrIHRoZW0gbm90IHByZXNlbnQgLSBhbnkgYnVnZ3kgaW5pdC1zZWN0aW9uIGFjY2VzcyB3aWxsCi0JICogY3JlYXRlIGEga2VybmVsIHBhZ2UgZmF1bHQ6Ci0JICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCXByaW50ayhLRVJOX0lORk8gImRlYnVnOiB1bm1hcHBpbmcgaW5pdCBtZW1vcnkgJTA4bHguLiUwOGx4XG4iLAotCQliZWdpbiwgUEFHRV9BTElHTihlbmQpKTsKLQlzZXRfbWVtb3J5X25wKGJlZ2luLCAoZW5kIC0gYmVnaW4pID4+IFBBR0VfU0hJRlQpOwotI2Vsc2UKLQlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nICVzOiAlbHVrIGZyZWVkXG4iLCB3aGF0LCAoZW5kIC0gYmVnaW4pID4+IDEwKTsKLQotCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJbWVtc2V0KCh2b2lkICopKGFkZHIgJiB+KFBBR0VfU0laRS0xKSksCi0JCQlQT0lTT05fRlJFRV9JTklUTUVNLCBQQUdFX1NJWkUpOwotCQlmcmVlX3BhZ2UoYWRkcik7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JfQotI2VuZGlmCi19Ci0KLXZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCi17Ci0JZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCi0JCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbiksCi0JCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpKTsKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEEKIGNvbnN0IGludCByb2RhdGFfdGVzdF9kYXRhID0gMHhDMzsKIEVYUE9SVF9TWU1CT0xfR1BMKHJvZGF0YV90ZXN0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IGY0NWQ1ZTIuLjQzM2Y3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogICoKICAqIE11c3QgYmUgZnJlZWQgd2l0aCBpb3VubWFwLgogICovCi12b2lkIF9faW9tZW0gKmlvcmVtYXBfd2ModW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3ZvaWQgX19pb21lbSAqaW9yZW1hcF93YyhyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKHBhdF9lbmFibGVkKQogCQlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIF9QQUdFX0NBQ0hFX1dDLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtdGVzdC5jIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCmluZGV4IDljYWIxOGIuLjBiY2Q3ODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbXRlc3QuYworKysgYi9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKQEAgLTksNDQgKzksNDQgQEAKIAogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtZW10ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSB1bnNpZ25lZCBwYXR0ZXJuKQorc3RhdGljIHU2NCBwYXR0ZXJuc1tdIF9faW5pdGRhdGEgPSB7CisJMCwKKwkweGZmZmZmZmZmZmZmZmZmZmZVTEwsCisJMHg1NTU1NTU1NTU1NTU1NTU1VUxMLAorCTB4YWFhYWFhYWFhYWFhYWFhYVVMTCwKKwkweDExMTExMTExMTExMTExMTFVTEwsCisJMHgyMjIyMjIyMjIyMjIyMjIyVUxMLAorCTB4NDQ0NDQ0NDQ0NDQ0NDQ0NFVMTCwKKwkweDg4ODg4ODg4ODg4ODg4ODhVTEwsCisJMHgzMzMzMzMzMzMzMzMzMzMzVUxMLAorCTB4NjY2NjY2NjY2NjY2NjY2NlVMTCwKKwkweDk5OTk5OTk5OTk5OTk5OTlVTEwsCisJMHhjY2NjY2NjY2NjY2NjY2NjVUxMLAorCTB4Nzc3Nzc3Nzc3Nzc3Nzc3N1VMTCwKKwkweGJiYmJiYmJiYmJiYmJiYmJVTEwsCisJMHhkZGRkZGRkZGRkZGRkZGRkVUxMLAorCTB4ZWVlZWVlZWVlZWVlZWVlZVVMTCwKKwkweDdhNmM3MjU4NTU0ZTQ5NGNVTEwsIC8qIHllYWggOy0pICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9iYWRfbWVtKHU2NCBwYXR0ZXJuLCB1NjQgc3RhcnRfYmFkLCB1NjQgZW5kX2JhZCkKIHsKLQl1bnNpZ25lZCBsb25nIGk7Ci0JdW5zaWduZWQgbG9uZyAqc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9iYWQ7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2JhZDsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BoeXNfYWxpZ25lZDsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCXVuc2lnbmVkIGxvbmcgaW5jcjsKKwlwcmludGsoS0VSTl9JTkZPICIgICUwMTZsbHggYmFkIG1lbSBhZGRyICUwMTBsbHggLSAlMDEwbGx4IHJlc2VydmVkXG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwYXR0ZXJuLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydF9iYWQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZF9iYWQpOworCXJlc2VydmVfZWFybHkoc3RhcnRfYmFkLCBlbmRfYmFkLCAiQkFEIFJBTSIpOworfQogCi0Jc3dpdGNoIChwYXR0ZXJuKSB7Ci0JY2FzZSAwOgotCQl2YWwgPSAwVUw7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJdmFsID0gLTFVTDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJdmFsID0gMHg1NTU1NTU1NTU1NTU1NTU1VUw7Ci0jZWxzZQotCQl2YWwgPSAweDU1NTU1NTU1VUw7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSAzOgotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJdmFsID0gMHhhYWFhYWFhYWFhYWFhYWFhVUw7Ci0jZWxzZQotCQl2YWwgPSAweGFhYWFhYWFhVUw7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KK3N0YXRpYyB2b2lkIF9faW5pdCBtZW10ZXN0KHU2NCBwYXR0ZXJuLCB1NjQgc3RhcnRfcGh5cywgdTY0IHNpemUpCit7CisJdTY0IGksIGNvdW50OworCXU2NCAqc3RhcnQ7CisJdTY0IHN0YXJ0X2JhZCwgbGFzdF9iYWQ7CisJdTY0IHN0YXJ0X3BoeXNfYWxpZ25lZDsKKwlzaXplX3QgaW5jcjsKIAotCWluY3IgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJaW5jciA9IHNpemVvZihwYXR0ZXJuKTsKIAlzdGFydF9waHlzX2FsaWduZWQgPSBBTElHTihzdGFydF9waHlzLCBpbmNyKTsKIAljb3VudCA9IChzaXplIC0gKHN0YXJ0X3BoeXNfYWxpZ25lZCAtIHN0YXJ0X3BoeXMpKS9pbmNyOwogCXN0YXJ0ID0gX192YShzdGFydF9waHlzX2FsaWduZWQpOwpAQCAtNTQsMjUgKzU0LDQyIEBACiAJbGFzdF9iYWQgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXN0YXJ0W2ldID0gdmFsOworCQlzdGFydFtpXSA9IHBhdHRlcm47CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHN0YXJ0KyssIHN0YXJ0X3BoeXNfYWxpZ25lZCArPSBpbmNyKSB7Ci0JCWlmICgqc3RhcnQgIT0gdmFsKSB7Ci0JCQlpZiAoc3RhcnRfcGh5c19hbGlnbmVkID09IGxhc3RfYmFkICsgaW5jcikgewotCQkJCWxhc3RfYmFkICs9IGluY3I7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzdGFydF9iYWQpIHsKLQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4gICUwMTZseCBiYWQgbWVtIGFkZHIgJTAxMGx4IC0gJTAxMGx4IHJlc2VydmVkIiwKLQkJCQkJCXZhbCwgc3RhcnRfYmFkLCBsYXN0X2JhZCArIGluY3IpOwotCQkJCQlyZXNlcnZlX2Vhcmx5KHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyLCAiQkFEIFJBTSIpOwotCQkJCX0KLQkJCQlzdGFydF9iYWQgPSBsYXN0X2JhZCA9IHN0YXJ0X3BoeXNfYWxpZ25lZDsKLQkJCX0KKwkJaWYgKCpzdGFydCA9PSBwYXR0ZXJuKQorCQkJY29udGludWU7CisJCWlmIChzdGFydF9waHlzX2FsaWduZWQgPT0gbGFzdF9iYWQgKyBpbmNyKSB7CisJCQlsYXN0X2JhZCArPSBpbmNyOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKHN0YXJ0X2JhZCkKKwkJCXJlc2VydmVfYmFkX21lbShwYXR0ZXJuLCBzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jcik7CisJCXN0YXJ0X2JhZCA9IGxhc3RfYmFkID0gc3RhcnRfcGh5c19hbGlnbmVkOwogCX0KLQlpZiAoc3RhcnRfYmFkKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDE2bHggYmFkIG1lbSBhZGRyICUwMTBseCAtICUwMTBseCByZXNlcnZlZCIsCi0JCQl2YWwsIHN0YXJ0X2JhZCwgbGFzdF9iYWQgKyBpbmNyKTsKLQkJcmVzZXJ2ZV9lYXJseShzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jciwgIkJBRCBSQU0iKTsKKwlpZiAoc3RhcnRfYmFkKQorCQlyZXNlcnZlX2JhZF9tZW0ocGF0dGVybiwgc3RhcnRfYmFkLCBsYXN0X2JhZCArIGluY3IpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZG9fb25lX3Bhc3ModTY0IHBhdHRlcm4sIHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwl1NjQgc2l6ZSA9IDA7CisKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJc3RhcnQgPSBmaW5kX2U4MjBfYXJlYV9zaXplKHN0YXJ0LCAmc2l6ZSwgMSk7CisKKwkJLyogZG9uZSA/ICovCisJCWlmIChzdGFydCA+PSBlbmQpCisJCQlicmVhazsKKwkJaWYgKHN0YXJ0ICsgc2l6ZSA+IGVuZCkKKwkJCXNpemUgPSBlbmQgLSBzdGFydDsKKworCQlwcmludGsoS0VSTl9JTkZPICIgICUwMTBsbHggLSAlMDEwbGx4IHBhdHRlcm4gJTAxNmxseFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQgKyBzaXplLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3B1X3RvX2JlNjQocGF0dGVybikpOworCQltZW10ZXN0KHBhdHRlcm4sIHN0YXJ0LCBzaXplKTsKKworCQlzdGFydCArPSBzaXplOwogCX0KIH0KIApAQCAtOTAsMzMgKzEwNywyMiBAQAogCiB2b2lkIF9faW5pdCBlYXJseV9tZW10ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXU2NCB0X3N0YXJ0LCB0X3NpemU7Ci0JdW5zaWduZWQgcGF0dGVybjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0gMDsKIAogCWlmICghbWVtdGVzdF9wYXR0ZXJuKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9JTkZPICJlYXJseV9tZW10ZXN0OiBwYXR0ZXJuIG51bSAlZCIsIG1lbXRlc3RfcGF0dGVybik7Ci0JZm9yIChwYXR0ZXJuID0gMDsgcGF0dGVybiA8IG1lbXRlc3RfcGF0dGVybjsgcGF0dGVybisrKSB7Ci0JCXRfc3RhcnQgPSBzdGFydDsKLQkJdF9zaXplID0gMDsKLQkJd2hpbGUgKHRfc3RhcnQgPCBlbmQpIHsKLQkJCXRfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYV9zaXplKHRfc3RhcnQsICZ0X3NpemUsIDEpOwotCi0JCQkvKiBkb25lID8gKi8KLQkJCWlmICh0X3N0YXJ0ID49IGVuZCkKLQkJCQlicmVhazsKLQkJCWlmICh0X3N0YXJ0ICsgdF9zaXplID4gZW5kKQotCQkJCXRfc2l6ZSA9IGVuZCAtIHRfc3RhcnQ7Ci0KLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDEwbGx4IC0gJTAxMGxseCBwYXR0ZXJuICVkIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXRfc3RhcnQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0X3N0YXJ0ICsgdF9zaXplLCBwYXR0ZXJuKTsKLQotCQkJbWVtdGVzdCh0X3N0YXJ0LCB0X3NpemUsIHBhdHRlcm4pOwotCi0JCQl0X3N0YXJ0ICs9IHRfc2l6ZTsKLQkJfQorCXByaW50ayhLRVJOX0lORk8gImVhcmx5X21lbXRlc3Q6ICMgb2YgdGVzdHM6ICVkXG4iLCBtZW10ZXN0X3BhdHRlcm4pOworCWZvciAoaSA9IDA7IGkgPCBtZW10ZXN0X3BhdHRlcm47IGkrKykgeworCQlpZHggPSBpICUgQVJSQVlfU0laRShwYXR0ZXJucyk7CisJCWRvX29uZV9wYXNzKHBhdHRlcm5zW2lkeF0sIHN0YXJ0LCBlbmQpOwogCX0KLQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCisJaWYgKGlkeCA+IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfbWVtdGVzdDogd2lwZSBvdXQgIgorCQkgICAgICAgInRlc3QgcGF0dGVybiBmcm9tIG1lbW9yeVxuIik7CisJCS8qIGFkZGl0aW9uYWwgdGVzdCB3aXRoIHBhdHRlcm4gMCB3aWxsIGRvIHRoaXMgKi8KKwkJZG9fb25lX3Bhc3MoMCwgc3RhcnQsIGVuZCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbW1hcC5jIGIvYXJjaC94ODYvbW0vbW1hcC5jCmluZGV4IDU2ZmU3MTIuLjE2NTgyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21tYXAuYworKysgYi9hcmNoL3g4Ni9tbS9tbWFwLmMKQEAgLTQsNyArNCw3IEBACiAgKiBCYXNlZCBvbiBjb2RlIGJ5IEluZ28gTW9sbmFyIGFuZCBBbmRpIEtsZWVuLCBjb3B5cmlnaHRlZAogICogYXMgZm9sbG93czoKICAqCi0gKiBDb3B5cmlnaHQgMjAwMy0yMDA0IFJlZCBIYXQgSW5jLiwgRHVyaGFtLCBOb3J0aCBDYXJvbGluYS4KKyAqIENvcHlyaWdodCAyMDAzLTIwMDkgUmVkIEhhdCBJbmMuCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDUgQW5kaSBLbGVlbiwgU1VTRSBMYWJzLgogICogQ29weXJpZ2h0IDIwMDcgSmlyaSBLb3NpbmEsIFNVU0UgTGFicy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfMzIuYyBiL2FyY2gveDg2L21tL251bWFfMzIuYwppbmRleCBkMWY3NDM5Li40NTFmZTk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV8zMi5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlzaXplID0gQUxJR04oc2l6ZSwgTDFfQ0FDSEVfQllURVMpOwogCiAJaWYgKCFhbGxvY2F0aW9uIHx8IChhbGxvY2F0aW9uICsgc2l6ZSkgPj0gbm9kZV9yZW1hcF9lbmRfdmFkZHJbbmlkXSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCiAJbm9kZV9yZW1hcF9hbGxvY192YWRkcltuaWRdICs9IHNpemU7CiAJbWVtc2V0KGFsbG9jYXRpb24sIDAsIHNpemUpOwpAQCAtNDIzLDMyICs0MjMsNiBAQAogCXNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKCk7CiB9CiAKLXZvaWQgX19pbml0IHNldF9oaWdobWVtX3BhZ2VzX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCXN0cnVjdCB6b25lICp6b25lOwotCWludCBuaWQ7Ci0KLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKLQkJdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuOwotCi0JCWlmICghaXNfaGlnaG1lbSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCi0JCXpvbmVfc3RhcnRfcGZuID0gem9uZS0+em9uZV9zdGFydF9wZm47Ci0JCXpvbmVfZW5kX3BmbiA9IHpvbmVfc3RhcnRfcGZuICsgem9uZS0+c3Bhbm5lZF9wYWdlczsKLQotCQluaWQgPSB6b25lX3RvX25pZCh6b25lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nICVzIGZvciBub2RlICVkICglMDhseDolMDhseClcbiIsCi0JCQkJem9uZS0+bmFtZSwgbmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCQlhZGRfaGlnaHBhZ2VzX3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkLCB6b25lX3N0YXJ0X3BmbiwKLQkJCQkgem9uZV9lbmRfcGZuKTsKLQl9Ci0JdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwotI2VuZGlmCi19Ci0KICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIHN0YXRpYyBpbnQgcGFkZHJfdG9fbmlkKHU2NCBhZGRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IGYzNTE2ZGEuLjY0YzljZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTIwLDYgKzIwLDEyIEBACiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vazguaD4KIAorI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKyMgZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorI2Vsc2UKKyMgZGVmaW5lIERCRyh4Li4uKQorI2VuZGlmCisKIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW01BWF9OVU1OT0RFU10gX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0wobm9kZV9kYXRhKTsKIApAQCAtMzMsNiArMzksMjEgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZW1hcF9hZGRyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBub2RlbWFwX3NpemU7CiAKK0RFRklORV9QRVJfQ1BVKGludCwgbm9kZV9udW1iZXIpID0gMDsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChub2RlX251bWJlcik7CisKKy8qCisgKiBNYXAgY3B1IGluZGV4IHRvIG5vZGUgaW5kZXgKKyAqLworREVGSU5FX0VBUkxZX1BFUl9DUFUoaW50LCB4ODZfY3B1X3RvX25vZGVfbWFwLCBOVU1BX05PX05PREUpOworRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9jcHVfdG9fbm9kZV9tYXApOworCisvKgorICogV2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcworICovCitjcHVtYXNrX3QgKm5vZGVfdG9fY3B1bWFza19tYXA7CitFWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOworCiAvKgogICogR2l2ZW4gYSBzaGlmdCB2YWx1ZSwgdHJ5IHRvIHBvcHVsYXRlIG1lbW5vZGVtYXBbXQogICogUmV0dXJucyA6CkBAIC02NDAsMyArNjYxLDE5OSBAQAogI2VuZGlmCiAKIAorLyoKKyAqIEFsbG9jYXRlIG5vZGVfdG9fY3B1bWFza19tYXAgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBub2RlcworICogUmVxdWlyZXMgbm9kZV9wb3NzaWJsZV9tYXAgdG8gYmUgdmFsaWQuCisgKgorICogTm90ZTogbm9kZV90b19jcHVtYXNrKCkgaXMgbm90IHZhbGlkIHVudGlsIGFmdGVyIHRoaXMgaXMgZG9uZS4KKyAqIChVc2UgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyB0byBjaGVjayB0aGlzLikKKyAqLwordm9pZCBfX2luaXQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKQoreworCXVuc2lnbmVkIGludCBub2RlLCBudW0gPSAwOworCWNwdW1hc2tfdCAqbWFwOworCisJLyogc2V0dXAgbnJfbm9kZV9pZHMgaWYgbm90IGRvbmUgeWV0ICovCisJaWYgKG5yX25vZGVfaWRzID09IE1BWF9OVU1OT0RFUykgeworCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZV9wb3NzaWJsZV9tYXApCisJCQludW0gPSBub2RlOworCQlucl9ub2RlX2lkcyA9IG51bSArIDE7CisJfQorCisJLyogYWxsb2NhdGUgdGhlIG1hcCAqLworCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbG93KG5yX25vZGVfaWRzICogc2l6ZW9mKGNwdW1hc2tfdCkpOworCURCRygibm9kZV90b19jcHVtYXNrX21hcCBhdCAlcCBmb3IgJWQgbm9kZXNcbiIsIG1hcCwgbnJfbm9kZV9pZHMpOworCisJcHJfZGVidWcoIk5vZGUgdG8gY3B1bWFzayBtYXAgYXQgJXAgZm9yICVkIG5vZGVzXG4iLAorCQkgbWFwLCBucl9ub2RlX2lkcyk7CisKKwkvKiBub2RlX3RvX2NwdW1hc2soKSB3aWxsIG5vdyB3b3JrICovCisJbm9kZV90b19jcHVtYXNrX21hcCA9IG1hcDsKK30KKwordm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKK3sKKwlpbnQgKmNwdV90b19ub2RlX21hcCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApOworCisJLyogZWFybHkgc2V0dGluZywgbm8gcGVyY3B1IGFyZWEgeWV0ICovCisJaWYgKGNwdV90b19ub2RlX21hcCkgeworCQljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IG5vZGU7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCisJaWYgKGNwdSA+PSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkgeworCQlwcmludGsoS0VSTl9FUlIgIm51bWFfc2V0X25vZGU6IGludmFsaWQgY3B1IyAoJWQpXG4iLCBjcHUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSkgPSBub2RlOworCisJaWYgKG5vZGUgIT0gTlVNQV9OT19OT0RFKQorCQlwZXJfY3B1KG5vZGVfbnVtYmVyLCBjcHUpID0gbm9kZTsKK30KKwordm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpCit7CisJbnVtYV9zZXRfbm9kZShjcHUsIE5VTUFfTk9fTk9ERSk7Cit9CisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUworCit2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKK3sKKwljcHVfc2V0KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7Cit9CisKK3ZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQoreworCWNwdV9jbGVhcihjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbZWFybHlfY3B1X3RvX25vZGUoY3B1KV0pOworfQorCisjZWxzZSAvKiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCisKKy8qCisgKiAtLS0tLS0tLS0gZGVidWcgdmVyc2lvbnMgb2YgdGhlIG51bWEgZnVuY3Rpb25zIC0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQoreworCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKKwljcHVtYXNrX3QgKm1hc2s7CisJY2hhciBidWZbNjRdOworCisJaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIm5vZGVfdG9fY3B1bWFza19tYXAgTlVMTFxuIik7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuOworCX0KKworCW1hc2sgPSAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKKwlpZiAoZW5hYmxlKQorCQljcHVfc2V0KGNwdSwgKm1hc2spOworCWVsc2UKKwkJY3B1X2NsZWFyKGNwdSwgKm1hc2spOworCisJY3B1bGlzdF9zY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgbWFzayk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNwdSAlZCBub2RlICVkOiBtYXNrIG5vdyAlc1xuIiwKKwkJZW5hYmxlID8gIm51bWFfYWRkX2NwdSIgOiAibnVtYV9yZW1vdmVfY3B1IiwgY3B1LCBub2RlLCBidWYpOworfQorCit2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKK3sKKwludW1hX3NldF9jcHVtYXNrKGNwdSwgMSk7Cit9CisKK3ZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQoreworCW51bWFfc2V0X2NwdW1hc2soY3B1LCAwKTsKK30KKworaW50IGNwdV90b19ub2RlKGludCBjcHUpCit7CisJaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJjcHVfdG9fbm9kZSglZCk6IHVzYWdlIHRvbyBlYXJseSFcbiIsIGNwdSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApW2NwdV07CisJfQorCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Cit9CitFWFBPUlRfU1lNQk9MKGNwdV90b19ub2RlKTsKKworLyoKKyAqIFNhbWUgZnVuY3Rpb24gYXMgY3B1X3RvX25vZGUoKSBidXQgdXNlZCBpZiBjYWxsZWQgYmVmb3JlIHRoZQorICogcGVyX2NwdSBhcmVhcyBhcmUgc2V0dXAuCisgKi8KK2ludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQoreworCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKSkKKwkJcmV0dXJuIGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fbm9kZV9tYXApW2NwdV07CisKKwlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJlYXJseV9jcHVfdG9fbm9kZSglZCk6IG5vIHBlcl9jcHUgYXJlYSFcbiIsIGNwdSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIE5VTUFfTk9fTk9ERTsKKwl9CisJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKK30KKworCisvKiBlbXB0eSBjcHVtYXNrICovCitzdGF0aWMgY29uc3QgY3B1bWFza190IGNwdV9tYXNrX25vbmU7CisKKy8qCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgorICovCitjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKK3sKKwlpZiAobm9kZV90b19jcHVtYXNrX21hcCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBubyBub2RlX3RvX2NwdW1hc2tfbWFwIVxuIiwKKwkJCW5vZGUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiAoY29uc3QgY3B1bWFza190ICopJmNwdV9vbmxpbmVfbWFwOworCX0KKwlpZiAobm9kZSA+PSBucl9ub2RlX2lkcykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiY3B1bWFza19vZl9ub2RlKCVkKTogbm9kZSA+IG5yX25vZGVfaWRzKCVkKVxuIiwKKwkJCW5vZGUsIG5yX25vZGVfaWRzKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gJmNwdV9tYXNrX25vbmU7CisJfQorCXJldHVybiAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKK30KK0VYUE9SVF9TWU1CT0woY3B1bWFza19vZl9ub2RlKTsKKworLyoKKyAqIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCisgKgorICogU2lkZSBub3RlOiB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIHJldHVybmVkIGNwdW1hc2sgb24gdGhlIHN0YWNrCisgKiBzbyB3aXRoIGEgaGlnaCBOUl9DUFVTIGNvdW50LCBleGNlc3NpdmUgc3RhY2sgc3BhY2UgaXMgdXNlZC4gIFRoZQorICogbm9kZV90b19jcHVtYXNrX3B0ciBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZS4KKyAqLworY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKK3sKKwlpZiAobm9kZV90b19jcHVtYXNrX21hcCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJub2RlX3RvX2NwdW1hc2soJWQpOiBubyBub2RlX3RvX2NwdW1hc2tfbWFwIVxuIiwgbm9kZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIGNwdV9vbmxpbmVfbWFwOworCX0KKwlpZiAobm9kZSA+PSBucl9ub2RlX2lkcykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkibm9kZV90b19jcHVtYXNrKCVkKTogbm9kZSA+IG5yX25vZGVfaWRzKCVkKVxuIiwKKwkJCW5vZGUsIG5yX25vZGVfaWRzKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gY3B1X21hc2tfbm9uZTsKKwl9CisJcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Cit9CitFWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFzayk7CisKKy8qCisgKiAtLS0tLS0tLS0gZW5kIG9mIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBudW1hIGZ1bmN0aW9ucyAtLS0tLS0tLS0KKyAqLworCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggNzIzM2JkNy4uOWM0Mjk0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC00ODIsNiArNDgyLDEzIEBACiAJcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7CiAJcGFyYXZpcnRfYWxsb2NfcHRlKCZpbml0X21tLCBwYWdlX3RvX3BmbihiYXNlKSk7CiAJcmVmX3Byb3QgPSBwdGVfcGdwcm90KHB0ZV9jbHJodWdlKCprcHRlKSk7CisJLyoKKwkgKiBJZiB3ZSBldmVyIHdhbnQgdG8gdXRpbGl6ZSB0aGUgUEFUIGJpdCwgd2UgbmVlZCB0bworCSAqIHVwZGF0ZSB0aGlzIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSBpdCdzIGNvbnZlcnRlZCBmcm9tCisJICogYml0IDEyIHRvIGJpdCA3IHdoZW4gd2UgY3Jvc3MgZnJvbSB0aGUgMk1CIGxldmVsIHRvCisJICogdGhlIDRLIGxldmVsOgorCSAqLworCVdBUk5fT05fT05DRShwZ3Byb3RfdmFsKHJlZl9wcm90KSAmIF9QQUdFX1BBVF9MQVJHRSk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaWYgKGxldmVsID09IFBHX0xFVkVMXzFHKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBiL2FyY2gveDg2L21tL3BhdC5jCmluZGV4IGUwYWIxNzMuLjJlZDM3MTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC0zMSw3ICszMSw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIGludCBfX3JlYWRfbW9zdGx5IHBhdF9lbmFibGVkID0gMTsKIAotdm9pZCBfX2NwdWluaXQgcGF0X2Rpc2FibGUoY2hhciAqcmVhc29uKQordm9pZCBfX2NwdWluaXQgcGF0X2Rpc2FibGUoY29uc3QgY2hhciAqcmVhc29uKQogewogCXBhdF9lbmFibGVkID0gMDsKIAlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgcmVhc29uKTsKQEAgLTQzLDYgKzQzLDExIEBACiAJcmV0dXJuIDA7CiB9CiBlYXJseV9wYXJhbSgibm9wYXQiLCBub3BhdCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhdF9kaXNhYmxlKGNvbnN0IGNoYXIgKnJlYXNvbikKK3sKKwkodm9pZClyZWFzb247Cit9CiAjZW5kaWYKIAogCkBAIC03OSwxNiArODQsMjAgQEAKIAlpZiAoIXBhdF9lbmFibGVkKQogCQlyZXR1cm47CiAKLQkvKiBQYXJhbm9pYSBjaGVjay4gKi8KLQlpZiAoIWNwdV9oYXNfcGF0ICYmIGJvb3RfcGF0X3N0YXRlKSB7Ci0JCS8qCi0JCSAqIElmIHRoaXMgaGFwcGVucyB3ZSBhcmUgb24gYSBzZWNvbmRhcnkgQ1BVLCBidXQKLQkJICogc3dpdGNoZWQgdG8gUEFUIG9uIHRoZSBib290IENQVS4gV2UgaGF2ZSBubyB3YXkgdG8KLQkJICogdW5kbyBQQVQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9FUlIgIlBBVCBlbmFibGVkLCAiCi0JCSAgICAgICAiYnV0IG5vdCBzdXBwb3J0ZWQgYnkgc2Vjb25kYXJ5IENQVVxuIik7Ci0JCUJVRygpOworCWlmICghY3B1X2hhc19wYXQpIHsKKwkJaWYgKCFib290X3BhdF9zdGF0ZSkgeworCQkJcGF0X2Rpc2FibGUoIlBBVCBub3Qgc3VwcG9ydGVkIGJ5IENQVS4iKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJZiB0aGlzIGhhcHBlbnMgd2UgYXJlIG9uIGEgc2Vjb25kYXJ5IENQVSwgYnV0CisJCQkgKiBzd2l0Y2hlZCB0byBQQVQgb24gdGhlIGJvb3QgQ1BVLiBXZSBoYXZlIG5vIHdheSB0bworCQkJICogdW5kbyBQQVQuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiUEFUIGVuYWJsZWQsICIKKwkJCSAgICAgICAiYnV0IG5vdCBzdXBwb3J0ZWQgYnkgc2Vjb25kYXJ5IENQVVxuIik7CisJCQlCVUcoKTsKKwkJfQogCX0KIAogCS8qIFNldCBQV1QgdG8gV3JpdGUtQ29tYmluaW5nLiBBbGwgb3RoZXIgYml0cyBzdGF5IHRoZSBzYW1lICovCkBAIC02MjYsNiArNjM1LDMzIEBACiB9CiAKIC8qCisgKiBDaGFuZ2UgdGhlIG1lbW9yeSB0eXBlIGZvciB0aGUgcGh5c2lhbCBhZGRyZXNzIHJhbmdlIGluIGtlcm5lbCBpZGVudGl0eQorICogbWFwcGluZyBzcGFjZSBpZiB0aGF0IHJhbmdlIGlzIGEgcGFydCBvZiBpZGVudGl0eSBtYXAuCisgKi8KK2ludCBrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZSh1NjQgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgaWRfc3o7CisKKwlpZiAoIXBhdF9lbmFibGVkIHx8IGJhc2UgPj0gX19wYShoaWdoX21lbW9yeSkpCisJCXJldHVybiAwOworCisJaWRfc3ogPSAoX19wYShoaWdoX21lbW9yeSkgPCBiYXNlICsgc2l6ZSkgPworCQkJCV9fcGEoaGlnaF9tZW1vcnkpIC0gYmFzZSA6CisJCQkJc2l6ZTsKKworCWlmIChpb3JlbWFwX2NoYW5nZV9hdHRyKCh1bnNpZ25lZCBsb25nKV9fdmEoYmFzZSksIGlkX3N6LCBmbGFncykgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSIlczolZCBpb3JlbWFwX2NoYW5nZV9hdHRyIGZhaWxlZCAlcyAiCisJCQkiZm9yICVMeC0lTHhcbiIsCisJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQljYXR0cl9uYW1lKGZsYWdzKSwKKwkJCWJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJhc2UgKyBzaXplKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKICAqIEludGVybmFsIGludGVyZmFjZSB0byByZXNlcnZlIGEgcmFuZ2Ugb2YgcGh5c2ljYWwgbWVtb3J5IHdpdGggcHJvdC4KICAqIFJlc2VydmVkIG5vbiBSQU0gcmVnaW9ucyBvbmx5IGFuZCBhZnRlciBzdWNjZXNzZnVsIHJlc2VydmVfbWVtdHlwZSwKICAqIHRoaXMgZnVuYyBhbHNvIGtlZXBzIGlkZW50aXR5IG1hcHBpbmcgKGlmIGFueSkgaW4gc3luYyB3aXRoIHRoaXMgbmV3IHByb3QuCkBAIC02MzQsNyArNjcwLDcgQEAKIAkJCQlpbnQgc3RyaWN0X3Byb3QpCiB7CiAJaW50IGlzX3JhbSA9IDA7Ci0JaW50IGlkX3N6LCByZXQ7CisJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgd2FudF9mbGFncyA9IChwZ3Byb3RfdmFsKCp2bWFfcHJvdCkgJiBfUEFHRV9DQUNIRV9NQVNLKTsKIApAQCAtNjcxLDIzICs3MDcsOCBAQAogCQkJCSAgICAgZmxhZ3MpOwogCX0KIAotCS8qIE5lZWQgdG8ga2VlcCBpZGVudGl0eSBtYXBwaW5nIGluIHN5bmMgKi8KLQlpZiAocGFkZHIgPj0gX19wYShoaWdoX21lbW9yeSkpCi0JCXJldHVybiAwOwotCi0JaWRfc3ogPSAoX19wYShoaWdoX21lbW9yeSkgPCBwYWRkciArIHNpemUpID8KLQkJCQlfX3BhKGhpZ2hfbWVtb3J5KSAtIHBhZGRyIDoKLQkJCQlzaXplOwotCi0JaWYgKGlvcmVtYXBfY2hhbmdlX2F0dHIoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIGlkX3N6LCBmbGFncykgPCAwKSB7CisJaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBhZGRyLCBzaXplLCBmbGFncykgPCAwKSB7CiAJCWZyZWVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplKTsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXM6JWQgcmVzZXJ2ZV9wZm5fcmFuZ2UgaW9yZW1hcF9jaGFuZ2VfYXR0ciBmYWlsZWQgJXMgIgotCQkJImZvciAlTHgtJUx4XG4iLAotCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAotCQkJY2F0dHJfbmFtZShmbGFncyksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXBhZGRyLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGFkZHIgKyBzaXplKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2L21tL3BndGFibGUuYwppbmRleCA4NmYyZmZjLi41YjdjN2M4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtMzEzLDYgKzMxMywyNCBAQAogCXJldHVybiB5b3VuZzsKIH0KIAorLyoqCisgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gcmVzZXJ2ZXMgYSBob2xlIGluIHRoZSB0b3Agb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKKyAqIEByZXNlcnZlIC0gc2l6ZSBvZiBob2xlIHRvIHJlc2VydmUKKyAqCisgKiBDYW4gYmUgdXNlZCB0byByZWxvY2F0ZSB0aGUgZml4bWFwIGFyZWEgYW5kIHBva2UgYSBob2xlIGluIHRoZSB0b3AKKyAqIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHRvIG1ha2Ugcm9vbSBmb3IgYSBoeXBlcnZpc29yLgorICovCit2b2lkIF9faW5pdCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJQlVHX09OKGZpeG1hcHNfc2V0ID4gMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXJ2aW5nIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBhYm92ZSAweCUwOHhcbiIsCisJICAgICAgIChpbnQpLXJlc2VydmUpOworCV9fRklYQUREUl9UT1AgPSAtcmVzZXJ2ZSAtIFBBR0VfU0laRTsKKwlfX1ZNQUxMT0NfUkVTRVJWRSArPSByZXNlcnZlOworI2VuZGlmCit9CisKIGludCBmaXhtYXBzX3NldDsKIAogdm9pZCBfX25hdGl2ZV9zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgcHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCmluZGV4IDA5NTFkYjkuLmYyZTQ3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKK3Vuc2lnbmVkIGludCBfX1ZNQUxMT0NfUkVTRVJWRSA9IDEyOCA8PCAyMDsKKwogLyoKICAqIEFzc29jaWF0ZSBhIHZpcnR1YWwgcGFnZSBmcmFtZSB3aXRoIGEgZ2l2ZW4gcGh5c2ljYWwgcGFnZSBmcmFtZSAKICAqIGFuZCBwcm90ZWN0aW9uIGZsYWdzIGZvciB0aGF0IGZyYW1lLgpAQCAtOTcsMjIgKzk5LDYgQEAKIHVuc2lnbmVkIGxvbmcgX19GSVhBRERSX1RPUCA9IDB4ZmZmZmYwMDA7CiBFWFBPUlRfU1lNQk9MKF9fRklYQUREUl9UT1ApOwogCi0vKioKLSAqIHJlc2VydmVfdG9wX2FkZHJlc3MgLSByZXNlcnZlcyBhIGhvbGUgaW4gdGhlIHRvcCBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZQotICogQHJlc2VydmUgLSBzaXplIG9mIGhvbGUgdG8gcmVzZXJ2ZQotICoKLSAqIENhbiBiZSB1c2VkIHRvIHJlbG9jYXRlIHRoZSBmaXhtYXAgYXJlYSBhbmQgcG9rZSBhIGhvbGUgaW4gdGhlIHRvcAotICogb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UgdG8gbWFrZSByb29tIGZvciBhIGh5cGVydmlzb3IuCi0gKi8KLXZvaWQgX19pbml0IHJlc2VydmVfdG9wX2FkZHJlc3ModW5zaWduZWQgbG9uZyByZXNlcnZlKQotewotCUJVR19PTihmaXhtYXBzX3NldCA+IDApOwotCXByaW50ayhLRVJOX0lORk8gIlJlc2VydmluZyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYWJvdmUgMHglMDh4XG4iLAotCSAgICAgICAoaW50KS1yZXNlcnZlKTsKLQlfX0ZJWEFERFJfVE9QID0gLXJlc2VydmUgLSBQQUdFX1NJWkU7Ci0JX19WTUFMTE9DX1JFU0VSVkUgKz0gcmVzZXJ2ZTsKLX0KLQogLyoKICAqIHZtYWxsb2M9c2l6ZSBmb3JjZXMgdGhlIHZtYWxsb2MgYXJlYSB0byBiZSBleGFjdGx5ICdzaXplJwogICogYnl0ZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgKG9yIGRlY3JlYXNlKSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCAwOTczN2M4Li41NzRjOGJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0yMCw3ICsyMCw4IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgotI2luY2x1ZGUgPGFzbS9nZW5hcGljLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXYuaD4KIAogaW50IGFjcGlfbnVtYSBfX2luaXRkYXRhOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiXzY0LmMgYi9hcmNoL3g4Ni9tbS90bGIuYwpzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvdGxiXzY0LmMKcmVuYW1lIHRvIGFyY2gveDg2L21tL3RsYi5jCmluZGV4IGY4YmU2ZjEuLmE2NTRkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfNjQuYworKysgYi9hcmNoL3g4Ni9tbS90bGIuYwpAQCAtMSwyNCArMSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgotI2luY2x1ZGUgPGFzbS91di91dl9iYXUuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS91di91di5oPgogCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCB0bGJfc3RhdGUsIGNwdV90bGJzdGF0ZSkKKwkJCT0geyAmaW5pdF9tbSwgMCwgfTsKKwogLyoKICAqCVNtYXJ0ZXIgU01QIGZsdXNoaW5nIG1hY3Jvcy4KICAqCQljL28gTGludXMgVG9ydmFsZHMuCkBAIC0zMyw3ICsyOCw3IEBACiAgKglUbyBhdm9pZCBnbG9iYWwgc3RhdGUgdXNlIDggZGlmZmVyZW50IGNhbGwgdmVjdG9ycy4KICAqCUVhY2ggQ1BVIHVzZXMgYSBzcGVjaWZpYyB2ZWN0b3IgdG8gdHJpZ2dlciBmbHVzaGVzIG9uIG90aGVyCiAgKglDUFVzLiBEZXBlbmRpbmcgb24gdGhlIHJlY2VpdmVkIHZlY3RvciB0aGUgdGFyZ2V0IENQVXMgbG9vayBpbnRvCi0gKgl0aGUgcmlnaHQgcGVyIGNwdSB2YXJpYWJsZSBmb3IgdGhlIGZsdXNoIGRhdGEuCisgKgl0aGUgcmlnaHQgYXJyYXkgc2xvdCBmb3IgdGhlIGZsdXNoIGRhdGEuCiAgKgogICoJV2l0aCBtb3JlIHRoYW4gOCBDUFVzIHRoZXkgYXJlIGhhc2hlZCB0byB0aGUgOCBhdmFpbGFibGUKICAqCXZlY3RvcnMuIFRoZSBsaW1pdGVkIGdsb2JhbCB2ZWN0b3Igc3BhY2UgZm9yY2VzIHVzIHRvIHRoaXMgcmlnaHQgbm93LgpAQCAtNDMsMTggKzM4LDE4IEBACiAKIHVuaW9uIHNtcF9mbHVzaF9zdGF0ZSB7CiAJc3RydWN0IHsKLQkJY3B1bWFza190IGZsdXNoX2NwdW1hc2s7CiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKmZsdXNoX21tOwogCQl1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwogCQlzcGlubG9ja190IHRsYnN0YXRlX2xvY2s7CisJCURFQ0xBUkVfQklUTUFQKGZsdXNoX2NwdW1hc2ssIE5SX0NQVVMpOwogCX07Ci0JY2hhciBwYWRbU01QX0NBQ0hFX0JZVEVTXTsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCWNoYXIgcGFkW0NPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTXTsKK30gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAogLyogU3RhdGUgaXMgcHV0IGludG8gdGhlIHBlciBDUFUgZGF0YSBzZWN0aW9uLCBidXQgcGFkZGVkCiAgICB0byBhIGZ1bGwgY2FjaGUgbGluZSBiZWNhdXNlIG90aGVyIENQVXMgY2FuIGFjY2VzcyBpdCBhbmQgd2UgZG9uJ3QKICAgIHdhbnQgZmFsc2Ugc2hhcmluZyBpbiB0aGUgcGVyIGNwdSBkYXRhIHNlZ21lbnQuICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5pb24gc21wX2ZsdXNoX3N0YXRlLCBmbHVzaF9zdGF0ZSk7CitzdGF0aWMgdW5pb24gc21wX2ZsdXNoX3N0YXRlIGZsdXNoX3N0YXRlW05VTV9JTlZBTElEQVRFX1RMQl9WRUNUT1JTXTsKIAogLyoKICAqIFdlIGNhbm5vdCBjYWxsIG1tZHJvcCgpIGJlY2F1c2Ugd2UgYXJlIGluIGludGVycnVwdCBjb250ZXh0LApAQCAtNjIsOSArNTcsOSBAQAogICovCiB2b2lkIGxlYXZlX21tKGludCBjcHUpCiB7Ci0JaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfT0spCisJaWYgKHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfT0spCiAJCUJVRygpOwotCWNwdV9jbGVhcihjcHUsIHJlYWRfcGRhKGFjdGl2ZV9tbSktPmNwdV92bV9tYXNrKTsKKwljcHVfY2xlYXIoY3B1LCBwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuYWN0aXZlX21tKS0+Y3B1X3ZtX21hc2spOwogCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlYXZlX21tKTsKQEAgLTExNywxMCArMTEyLDIwIEBACiAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KICAqLwogCi1hc21saW5rYWdlIHZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorLyoKKyAqIEZJWE1FOiB1c2Ugb2YgYXNtbGlua2FnZSBpcyBub3QgY29uc2lzdGVudC4gIE9uIHg4Nl82NCBpdCdzIG5vb3AKKyAqIGJ1dCBzdGlsbCB1c2VkIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2UgYnV0IHRoZSB1c2FnZSBpcyBzbGlnaHRseQorICogaW5jb25zaXN0ZW50LiAgT24geDg2XzMyLCBhc21saW5rYWdlIGlzIHJlZ3Bhcm0oMCkgYnV0IGludGVycnVwdAorICogZW50cnkgY2FsbHMgaW4gd2l0aCB0aGUgZmlyc3QgcGFyYW1ldGVyIGluICVlYXguICBNYXliZSBkZWZpbmUKKyAqIGludHJsaW5rYWdlPworICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorYXNtbGlua2FnZQorI2VuZGlmCit2b2lkIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnQgY3B1OwotCWludCBzZW5kZXI7CisJdW5zaWduZWQgaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgc2VuZGVyOwogCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTEyOSw5ICsxMzQsOSBAQAogCSAqIFVzZSB0aGF0IHRvIGRldGVybWluZSB3aGVyZSB0aGUgc2VuZGVyIHB1dCB0aGUgZGF0YS4KIAkgKi8KIAlzZW5kZXIgPSB+cmVncy0+b3JpZ19heCAtIElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVDsKLQlmID0gJnBlcl9jcHUoZmx1c2hfc3RhdGUsIHNlbmRlcik7CisJZiA9ICZmbHVzaF9zdGF0ZVtzZW5kZXJdOwogCi0JaWYgKCFjcHVfaXNzZXQoY3B1LCBmLT5mbHVzaF9jcHVtYXNrKSkKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0b19jcHVtYXNrKGYtPmZsdXNoX2NwdW1hc2spKSkKIAkJZ290byBvdXQ7CiAJCS8qCiAJCSAqIFRoaXMgd2FzIGEgQlVHKCkgYnV0IHVudGlsIHNvbWVvbmUgY2FuIHF1b3RlIG1lIHRoZQpAQCAtMTQyLDggKzE0Nyw4IEBACiAJCSAqIEJVRygpOwogCQkgKi8KIAotCWlmIChmLT5mbHVzaF9tbSA9PSByZWFkX3BkYShhY3RpdmVfbW0pKSB7Ci0JCWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX09LKSB7CisJaWYgKGYtPmZsdXNoX21tID09IHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0pKSB7CisJCWlmIChwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuc3RhdGUpID09IFRMQlNUQVRFX09LKSB7CiAJCQlpZiAoZi0+Zmx1c2hfdmEgPT0gVExCX0ZMVVNIX0FMTCkKIAkJCQlsb2NhbF9mbHVzaF90bGIoKTsKIAkJCWVsc2UKQEAgLTE1MywyMyArMTU4LDIxIEBACiAJfQogb3V0OgogCWFja19BUElDX2lycSgpOwotCWNwdV9jbGVhcihjcHUsIGYtPmZsdXNoX2NwdW1hc2spOworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgdG9fY3B1bWFzayhmLT5mbHVzaF9jcHVtYXNrKSk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAlpbmNfaXJxX3N0YXQoaXJxX3RsYl9jb3VudCk7CiB9CiAKLXZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgdmEpCitzdGF0aWMgdm9pZCBmbHVzaF90bGJfb3RoZXJzX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmEpCiB7Ci0JaW50IHNlbmRlcjsKKwl1bnNpZ25lZCBpbnQgc2VuZGVyOwogCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKLQljcHVtYXNrX3QgY3B1bWFzayA9ICpjcHVtYXNrcDsKLQotCWlmIChpc191dl9zeXN0ZW0oKSAmJiB1dl9mbHVzaF90bGJfb3RoZXJzKCZjcHVtYXNrLCBtbSwgdmEpKQotCQlyZXR1cm47CiAKIAkvKiBDYWxsZXIgaGFzIGRpc2FibGVkIHByZWVtcHRpb24gKi8KIAlzZW5kZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCkgJSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUzsKLQlmID0gJnBlcl9jcHUoZmx1c2hfc3RhdGUsIHNlbmRlcik7CisJZiA9ICZmbHVzaF9zdGF0ZVtzZW5kZXJdOwogCiAJLyoKIAkgKiBDb3VsZCBhdm9pZCB0aGlzIGxvY2sgd2hlbgpAQCAtMTgwLDcgKzE4Myw4IEBACiAKIAlmLT5mbHVzaF9tbSA9IG1tOwogCWYtPmZsdXNoX3ZhID0gdmE7Ci0JY3B1c19vcihmLT5mbHVzaF9jcHVtYXNrLCBjcHVtYXNrLCBmLT5mbHVzaF9jcHVtYXNrKTsKKwljcHVtYXNrX2FuZG5vdCh0b19jcHVtYXNrKGYtPmZsdXNoX2NwdW1hc2spLAorCQkgICAgICAgY3B1bWFzaywgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAogCS8qCiAJICogTWFrZSB0aGUgYWJvdmUgbWVtb3J5IG9wZXJhdGlvbnMgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUKQEAgLTE5MSw5ICsxOTUsMTAgQEAKIAkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIElQSSBvbmx5IHRvCiAJICogQ1BVcyBhZmZlY3RlZC4KIAkgKi8KLQlzZW5kX0lQSV9tYXNrKCZjcHVtYXNrLCBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQgKyBzZW5kZXIpOworCWFwaWMtPnNlbmRfSVBJX21hc2sodG9fY3B1bWFzayhmLT5mbHVzaF9jcHVtYXNrKSwKKwkJICAgICAgSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUICsgc2VuZGVyKTsKIAotCXdoaWxlICghY3B1c19lbXB0eShmLT5mbHVzaF9jcHVtYXNrKSkKKwl3aGlsZSAoIWNwdW1hc2tfZW1wdHkodG9fY3B1bWFzayhmLT5mbHVzaF9jcHVtYXNrKSkpCiAJCWNwdV9yZWxheCgpOwogCiAJZi0+Zmx1c2hfbW0gPSBOVUxMOwpAQCAtMjAxLDEyICsyMDYsMjggQEAKIAlzcGluX3VubG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiB9CiAKK3ZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZhKQoreworCWlmIChpc191dl9zeXN0ZW0oKSkgeworCQl1bnNpZ25lZCBpbnQgY3B1OworCisJCWNwdSA9IGdldF9jcHUoKTsKKwkJY3B1bWFzayA9IHV2X2ZsdXNoX3RsYl9vdGhlcnMoY3B1bWFzaywgbW0sIHZhLCBjcHUpOworCQlpZiAoY3B1bWFzaykKKwkJCWZsdXNoX3RsYl9vdGhlcnNfaXBpKGNwdW1hc2ssIG1tLCB2YSk7CisJCXB1dF9jcHUoKTsKKwkJcmV0dXJuOworCX0KKwlmbHVzaF90bGJfb3RoZXJzX2lwaShjcHVtYXNrLCBtbSwgdmEpOworfQorCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBpbml0X3NtcF9mbHVzaCh2b2lkKQogewogCWludCBpOwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCi0JCXNwaW5fbG9ja19pbml0KCZwZXJfY3B1KGZsdXNoX3N0YXRlLCBpKS50bGJzdGF0ZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbHVzaF9zdGF0ZSk7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJmZsdXNoX3N0YXRlW2ldLnRsYnN0YXRlX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTUsMjUgKzIzNiwxOCBAQAogdm9pZCBmbHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQljcHVtYXNrX3QgY3B1X21hc2s7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAKIAlsb2NhbF9mbHVzaF90bGIoKTsKLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQotCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7CisJaWYgKGNwdW1hc2tfYW55X2J1dCgmbW0tPmNwdV92bV9tYXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpIDwgbnJfY3B1X2lkcykKKwkJZmx1c2hfdGxiX290aGVycygmbW0tPmNwdV92bV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwogCiAJaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgewogCQlpZiAoY3VycmVudC0+bW0pCkBAIC0yNDEsOCArMjU1LDggQEAKIAkJZWxzZQogCQkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl9Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOworCWlmIChjcHVtYXNrX2FueV9idXQoJm1tLT5jcHVfdm1fbWFzaywgc21wX3Byb2Nlc3Nvcl9pZCgpKSA8IG5yX2NwdV9pZHMpCisJCWZsdXNoX3RsYl9vdGhlcnMoJm1tLT5jcHVfdm1fbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTI1MCwxMSArMjY0LDggQEAKIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCWNwdW1hc2tfdCBjcHVfbWFzazsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKIAogCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKIAkJaWYgKGN1cnJlbnQtPm1tKQpAQCAtMjYzLDggKzI3NCw4IEBACiAJCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCX0KIAotCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCi0JCWZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCB2YSk7CisJaWYgKGNwdW1hc2tfYW55X2J1dCgmbW0tPmNwdV92bV9tYXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpIDwgbnJfY3B1X2lkcykKKwkJZmx1c2hfdGxiX290aGVycygmbW0tPmNwdV92bV9tYXNrLCBtbSwgdmEpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTI3NCw3ICsyODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJX19mbHVzaF90bGJfYWxsKCk7Ci0JaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfTEFaWSkKKwlpZiAocGVyY3B1X3JlYWQoY3B1X3RsYnN0YXRlLnN0YXRlKSA9PSBUTEJTVEFURV9MQVpZKQogCQlsZWF2ZV9tbShjcHUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCmluZGV4IDIwODkzNTQuLjhlYjI5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CiAKQEAgLTE4LDEwICsxOCw2IEBACiAKICNkZWZpbmUgUVVBRExPQ0FMMkJVUyhxdWFkLGxvY2FsKSAocXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdKQogCi0vKiBXaGVyZSB0aGUgSU8gYXJlYSB3YXMgbWFwcGVkIG9uIG11bHRpcXVhZCwgYWx3YXlzIDAgb3RoZXJ3aXNlICovCi12b2lkICp4cXVhZF9wb3J0aW87Ci1FWFBPUlRfU1lNQk9MKHhxdWFkX3BvcnRpbyk7Ci0KICNkZWZpbmUgWFFVQURfUE9SVF9BRERSKHBvcnQsIHF1YWQpICh4cXVhZF9wb3J0aW8gKyAoWFFVQURfUE9SVElPX1FVQUQqcXVhZCkgKyBwb3J0KQogCiAjZGVmaW5lIFBDSV9DT05GMV9NUV9BRERSRVNTKGJ1cywgZGV2Zm4sIHJlZykgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3BjYmlvcy5jIGIvYXJjaC94ODYvcGNpL3BjYmlvcy5jCmluZGV4IGI4MmNhZTkuLjFjOTc1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9wY2Jpb3MuYworKysgYi9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtZGVmYXVsdC9wY2ktZnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1mdW5jdGlvbnMuaD4KIAogLyogQklPUzMyIHNpZ25hdHVyZTogIl8zMl8iICovCiAjZGVmaW5lIEJJT1MzMl9TSUdOQVRVUkUJKCgnXycgPDwgMCkgKyAoJzMnIDw8IDgpICsgKCcyJyA8PCAxNikgKyAoJ18nIDw8IDI0KSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV9hc21fMzIuUyBiL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV9hc21fMzIuUwppbmRleCBkMWU5YjUzLi5iNjQxMzg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfYXNtXzMyLlMKKysrIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV8zMi5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TCmluZGV4IDAwMDQxNTkuLjkzNTY1NDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV9hc21fNjQuUworKysgYi9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfYXNtXzY0LlMKQEAgLTE4LDcgKzE4LDcgQEAKIAkudGV4dAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCmluZGV4IDRkNmVmMGEuLjE2YTkwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvdmRzby9NYWtlZmlsZQpAQCAtMzgsNyArMzgsNyBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCiAKIENGTCA6PSAkKFBST0ZJTElORykgLW1jbW9kZWw9c21hbGwgLWZQSUMgLU8yIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgLW02NCBcCi0gICAgICAgJChmaWx0ZXIgLWclLCQoS0JVSUxEX0NGTEFHUykpCisgICAgICAgJChmaWx0ZXIgLWclLCQoS0JVSUxEX0NGTEFHUykpICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tc3RhY2stcHJvdGVjdG9yKQogCiAkKHZvYmpzKTogS0JVSUxEX0NGTEFHUyArPSAkKENGTCkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92bWEuYyBiL2FyY2gveDg2L3Zkc28vdm1hLmMKaW5kZXggOWM5OGNjNi4uNzEzM2NkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92bWEuYworKysgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCkBAIC04NSw4ICs4NSw4IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7CiAJdW5zaWduZWQgb2Zmc2V0OwogCWVuZCA9IChzdGFydCArIFBNRF9TSVpFIC0gMSkgJiBQTURfTUFTSzsKLQlpZiAoZW5kID49IFRBU0tfU0laRTY0KQotCQllbmQgPSBUQVNLX1NJWkU2NDsKKwlpZiAoZW5kID49IFRBU0tfU0laRV9NQVgpCisJCWVuZCA9IFRBU0tfU0laRV9NQVg7CiAJZW5kIC09IGxlbjsKIAkvKiBUaGlzIGxvc2VzIHNvbWUgbW9yZSBiaXRzIHRoYW4gYSBtb2R1bG8sIGJ1dCBpcyBjaGVhcGVyICovCiAJb2Zmc2V0ID0gZ2V0X3JhbmRvbV9pbnQoKSAmIChQVFJTX1BFUl9QVEUgLSAxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9LY29uZmlnIGIvYXJjaC94ODYveGVuL0tjb25maWcKaW5kZXggODdiOWFiMS4uYjgzZTExOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL0tjb25maWcKKysrIGIvYXJjaC94ODYveGVuL0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAJYm9vbCAiWGVuIGd1ZXN0IHN1cHBvcnQiCiAJc2VsZWN0IFBBUkFWSVJUCiAJc2VsZWN0IFBBUkFWSVJUX0NMT0NLCi0JZGVwZW5kcyBvbiBYODZfNjQgfHwgKFg4Nl8zMiAmJiBYODZfUEFFICYmICEoWDg2X1ZJU1dTIHx8IFg4Nl9WT1lBR0VSKSkKKwlkZXBlbmRzIG9uIFg4Nl82NCB8fCAoWDg2XzMyICYmIFg4Nl9QQUUgJiYgIVg4Nl9WSVNXUykKIAlkZXBlbmRzIG9uIFg4Nl9DTVBYQ0hHICYmIFg4Nl9UU0MKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBMaW51eCBYZW4gcG9ydC4gIEVuYWJsaW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9NYWtlZmlsZSBiL2FyY2gveDg2L3hlbi9NYWtlZmlsZQppbmRleCA2ZGNlZmJhLi4zYjc2N2QwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYveGVuL01ha2VmaWxlCkBAIC02LDcgKzYsOCBAQAogZW5kaWYKIAogb2JqLXkJCTo9IGVubGlnaHRlbi5vIHNldHVwLm8gbXVsdGljYWxscy5vIG1tdS5vIGlycS5vIFwKLQkJCXRpbWUubyB4ZW4tYXNtXyQoQklUUykubyBncmFudC10YWJsZS5vIHN1c3BlbmQubworCQkJdGltZS5vIHhlbi1hc20ubyB4ZW4tYXNtXyQoQklUUykubyBcCisJCQlncmFudC10YWJsZS5vIHN1c3BlbmQubwogCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc3BpbmxvY2subwogb2JqLSQoQ09ORklHX1hFTl9ERUJVR19GUykJKz0gZGVidWdmcy5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGI1OGU5NjMuLjgyY2QzOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTYxLDQwICs2MSwxMyBAQAogZW51bSB4ZW5fZG9tYWluX3R5cGUgeGVuX2RvbWFpbl90eXBlID0gWEVOX05BVElWRTsKIEVYUE9SVF9TWU1CT0xfR1BMKHhlbl9kb21haW5fdHlwZSk7CiAKLS8qCi0gKiBJZGVudGl0eSBtYXAsIGluIGFkZGl0aW9uIHRvIHBsYWluIGtlcm5lbCBtYXAuICBUaGlzIG5lZWRzIHRvIGJlCi0gKiBsYXJnZSBlbm91Z2ggdG8gYWxsb2NhdGUgcGFnZSB0YWJsZSBwYWdlcyB0byBhbGxvY2F0ZSB0aGUgcmVzdC4KLSAqIEVhY2ggcGFnZSBjYW4gbWFwIDJNQi4KLSAqLwotc3RhdGljIHB0ZV90IGxldmVsMV9pZGVudF9wZ3RbUFRSU19QRVJfUFRFICogNF0gX19wYWdlX2FsaWduZWRfYnNzOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotLyogbDMgcHVkIGZvciB1c2Vyc3BhY2UgdnN5c2NhbGwgbWFwcGluZyAqLwotc3RhdGljIHB1ZF90IGxldmVsM191c2VyX3ZzeXNjYWxsW1BUUlNfUEVSX1BVRF0gX19wYWdlX2FsaWduZWRfYnNzOwotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQotLyoKLSAqIE5vdGUgYWJvdXQgY3IzIChwYWdldGFibGUgYmFzZSkgdmFsdWVzOgotICoKLSAqIHhlbl9jcjMgY29udGFpbnMgdGhlIGN1cnJlbnQgbG9naWNhbCBjcjMgdmFsdWU7IGl0IGNvbnRhaW5zIHRoZQotICogbGFzdCBzZXQgY3IzLiAgVGhpcyBtYXkgbm90IGJlIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBjcjMsIGJlY2F1c2UKLSAqIGl0cyB1cGRhdGUgbWF5IGJlIGJlaW5nIGxhemlseSBkZWZlcnJlZC4gIEhvd2V2ZXIsIGEgdmNwdSBsb29raW5nCi0gKiBhdCBpdHMgb3duIGNyMyBjYW4gdXNlIHRoaXMgdmFsdWUga25vd2luZyB0aGF0IGl0IGV2ZXJ5dGhpbmcgd2lsbAotICogYmUgc2VsZi1jb25zaXN0ZW50LgotICoKLSAqIHhlbl9jdXJyZW50X2NyMyBjb250YWlucyB0aGUgYWN0dWFsIHZjcHUgY3IzOyBpdCBpcyBzZXQgb25jZSB0aGUKLSAqIGh5cGVyY2FsbCB0byBzZXQgdGhlIHZjcHUgY3IzIGlzIGNvbXBsZXRlIChzbyBpdCBtYXkgYmUgYSBsaXR0bGUKLSAqIG91dCBvZiBkYXRlLCBidXQgaXQgd2lsbCBuZXZlciBiZSBzZXQgZWFybHkpLiAgSWYgb25lIHZjcHUgaXMKLSAqIGxvb2tpbmcgYXQgYW5vdGhlciB2Y3B1J3MgY3IzIHZhbHVlLCBpdCBzaG91bGQgdXNlIHRoaXMgdmFyaWFibGUuCi0gKi8KLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jcjMpOwkgLyogY3IzIHN0b3JlZCBhcyBwaHlzYWRkciAqLwotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgeGVuX2N1cnJlbnRfY3IzKTsJIC8qIGFjdHVhbCB2Y3B1IGNyMyAqLwotCiBzdHJ1Y3Qgc3RhcnRfaW5mbyAqeGVuX3N0YXJ0X2luZm87CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc3RhcnRfaW5mbyk7CiAKIHN0cnVjdCBzaGFyZWRfaW5mbyB4ZW5fZHVtbXlfc2hhcmVkX2luZm87CiAKK3ZvaWQgKnhlbl9pbml0aWFsX2dkdDsKKwogLyoKICAqIFBvaW50IGF0IHNvbWUgZW1wdHkgbWVtb3J5IHRvIHN0YXJ0IHdpdGguIFdlIG1hcCB0aGUgcmVhbCBzaGFyZWRfaW5mbwogICogcGFnZSBhcyBzb29uIGFzIGZpeG1hcCBpcyB1cCBhbmQgcnVubmluZy4KQEAgLTExNCwxNCArODcsNyBAQAogICoKICAqIDA6IG5vdCBhdmFpbGFibGUsIDE6IGF2YWlsYWJsZQogICovCi1zdGF0aWMgaW50IGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCA9Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCTEKLSNlbHNlCi0JMAotI2VuZGlmCi0JOwotCitzdGF0aWMgaW50IGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCA9IDE7CiAKIHN0YXRpYyB2b2lkIHhlbl92Y3B1X3NldHVwKGludCBjcHUpCiB7CkBAIC0xMzcsNyArMTAzLDcgQEAKIAogCXZjcHVwID0gJnBlcl9jcHUoeGVuX3ZjcHVfaW5mbywgY3B1KTsKIAotCWluZm8ubWZuID0gdmlydF90b19tZm4odmNwdXApOworCWluZm8ubWZuID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWZuKHZjcHVwKTsKIAlpbmZvLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHZjcHVwKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJ0cnlpbmcgdG8gbWFwIHZjcHVfaW5mbyAlZCBhdCAlcCwgbWZuICVsbHgsIG9mZnNldCAlZFxuIiwKQEAgLTIzNyw3ICsyMDMsNyBAQAogCXJldHVybiBIWVBFUlZJU09SX2dldF9kZWJ1Z3JlZyhyZWcpOwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fbGVhdmVfbGF6eSh2b2lkKQordm9pZCB4ZW5fbGVhdmVfbGF6eSh2b2lkKQogewogCXBhcmF2aXJ0X2xlYXZlX2xhenkocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpKTsKIAl4ZW5fbWNfZmx1c2goKTsKQEAgLTMzNSw4ICszMDEsMTAgQEAKIAlmcmFtZXMgPSBtY3MuYXJnczsKIAogCWZvciAoZiA9IDA7IHZhIDwgZHRyLT5hZGRyZXNzICsgc2l6ZTsgdmEgKz0gUEFHRV9TSVpFLCBmKyspIHsKLQkJZnJhbWVzW2ZdID0gdmlydF90b19tZm4odmEpOworCQlmcmFtZXNbZl0gPSBhcmJpdHJhcnlfdmlydF90b19tZm4oKHZvaWQgKil2YSk7CisKIAkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seSgodm9pZCAqKXZhKTsKKwkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShtZm5fdG9fdmlydChmcmFtZXNbZl0pKTsKIAl9CiAKIAlNVUxUSV9zZXRfZ2R0KG1jcy5tYywgZnJhbWVzLCBzaXplIC8gc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVjdCkpOwpAQCAtMzQ4LDcgKzMxNiw3IEBACiAJCQkJdW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGkpCiB7CiAJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOwotCXhtYWRkcl90IG1hZGRyID0gdmlydF90b19tYWNoaW5lKCZnZHRbR0RUX0VOVFJZX1RMU19NSU4raV0pOworCXhtYWRkcl90IG1hZGRyID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSgmZ2R0W0dEVF9FTlRSWV9UTFNfTUlOK2ldKTsKIAlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jID0gX194ZW5fbWNfZW50cnkoMCk7CiAKIAlNVUxUSV91cGRhdGVfZGVzY3JpcHRvcihtYy5tYywgbWFkZHIubWFkZHIsIHQtPnRsc19hcnJheVtpXSk7CkBAIC0zNTcsMTMgKzMyNSwxNCBAQAogc3RhdGljIHZvaWQgeGVuX2xvYWRfdGxzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQogewogCS8qCi0JICogWFhYIHNsZWF6eSBoYWNrOiBJZiB3ZSdyZSBiZWluZyBjYWxsZWQgaW4gYSBsYXp5LWNwdSB6b25lLAotCSAqIGl0IG1lYW5zIHdlJ3JlIGluIGEgY29udGV4dCBzd2l0Y2gsIGFuZCAlZ3MgaGFzIGp1c3QgYmVlbgotCSAqIHNhdmVkLiAgVGhpcyBtZWFucyB3ZSBjYW4gemVybyBpdCBvdXQgdG8gcHJldmVudCBmYXVsdHMgb24KLQkgKiBleGl0IGZyb20gdGhlIGh5cGVydmlzb3IgaWYgdGhlIG5leHQgcHJvY2VzcyBoYXMgbm8gJWdzLgotCSAqIEVpdGhlciB3YXksIGl0IGhhcyBiZWVuIHNhdmVkLCBhbmQgdGhlIG5ldyB2YWx1ZSB3aWxsIGdldAotCSAqIGxvYWRlZCBwcm9wZXJseS4gIFRoaXMgd2lsbCBnbyBhd2F5IGFzIHNvb24gYXMgWGVuIGhhcyBiZWVuCi0JICogbW9kaWZpZWQgdG8gbm90IHNhdmUvcmVzdG9yZSAlZ3MgZm9yIG5vcm1hbCBoeXBlcmNhbGxzLgorCSAqIFhYWCBzbGVhenkgaGFjazogSWYgd2UncmUgYmVpbmcgY2FsbGVkIGluIGEgbGF6eS1jcHUgem9uZQorCSAqIGFuZCBsYXp5IGdzIGhhbmRsaW5nIGlzIGVuYWJsZWQsIGl0IG1lYW5zIHdlJ3JlIGluIGEKKwkgKiBjb250ZXh0IHN3aXRjaCwgYW5kICVncyBoYXMganVzdCBiZWVuIHNhdmVkLiAgVGhpcyBtZWFucyB3ZQorCSAqIGNhbiB6ZXJvIGl0IG91dCB0byBwcmV2ZW50IGZhdWx0cyBvbiBleGl0IGZyb20gdGhlCisJICogaHlwZXJ2aXNvciBpZiB0aGUgbmV4dCBwcm9jZXNzIGhhcyBubyAlZ3MuICBFaXRoZXIgd2F5LCBpdAorCSAqIGhhcyBiZWVuIHNhdmVkLCBhbmQgdGhlIG5ldyB2YWx1ZSB3aWxsIGdldCBsb2FkZWQgcHJvcGVybHkuCisJICogVGhpcyB3aWxsIGdvIGF3YXkgYXMgc29vbiBhcyBYZW4gaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm90CisJICogc2F2ZS9yZXN0b3JlICVncyBmb3Igbm9ybWFsIGh5cGVyY2FsbHMuCiAJICoKIAkgKiBPbiB4ODZfNjQsIHRoaXMgaGFjayBpcyBub3QgdXNlZCBmb3IgJWdzLCBiZWNhdXNlIGdzIHBvaW50cwogCSAqIHRvIEtFUk5FTF9HU19CQVNFIChhbmQgdXNlcyBpdCBmb3IgUERBIHJlZmVyZW5jZXMpLCBzbyB3ZQpAQCAtMzc1LDcgKzM0NCw3IEBACiAJICovCiAJaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX0NQVSkgewogI2lmZGVmIENPTkZJR19YODZfMzIKLQkJbG9hZHNlZ21lbnQoZ3MsIDApOworCQlsYXp5X2xvYWRfZ3MoMCk7CiAjZWxzZQogCQlsb2Fkc2VnbWVudChmcywgMCk7CiAjZW5kaWYKQEAgLTUyMSw3ICs0OTAsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6IHsKLQkJeG1hZGRyX3QgbWFkZHIgPSB2aXJ0X3RvX21hY2hpbmUoJmR0W2VudHJ5XSk7CisJCXhtYWRkcl90IG1hZGRyID0gYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSgmZHRbZW50cnldKTsKIAogCQl4ZW5fbWNfZmx1c2goKTsKIAkJaWYgKEhZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3IobWFkZHIubWFkZHIsICoodTY0ICopZGVzYykpCkBAIC01ODcsOTQgKzU1NiwxOCBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBhcGljX29wcyB4ZW5fYmFzaWNfYXBpY19vcHMgPSB7Ci0JLnJlYWQgPSB4ZW5fYXBpY19yZWFkLAotCS53cml0ZSA9IHhlbl9hcGljX3dyaXRlLAotCS5pY3JfcmVhZCA9IHhlbl9hcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4ZW5fYXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4ZW5fYXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSB4ZW5fc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCi19Oworc3RhdGljIHZvaWQgc2V0X3hlbl9iYXNpY19hcGljX29wcyh2b2lkKQoreworCWFwaWMtPnJlYWQgPSB4ZW5fYXBpY19yZWFkOworCWFwaWMtPndyaXRlID0geGVuX2FwaWNfd3JpdGU7CisJYXBpYy0+aWNyX3JlYWQgPSB4ZW5fYXBpY19pY3JfcmVhZDsKKwlhcGljLT5pY3Jfd3JpdGUgPSB4ZW5fYXBpY19pY3Jfd3JpdGU7CisJYXBpYy0+d2FpdF9pY3JfaWRsZSA9IHhlbl9hcGljX3dhaXRfaWNyX2lkbGU7CisJYXBpYy0+c2FmZV93YWl0X2ljcl9pZGxlID0geGVuX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlOworfQogCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgeGVuX2ZsdXNoX3RsYih2b2lkKQotewotCXN0cnVjdCBtbXVleHRfb3AgKm9wOwotCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQltY3MgPSB4ZW5fbWNfZW50cnkoc2l6ZW9mKCpvcCkpOwotCi0Jb3AgPSBtY3MuYXJnczsKLQlvcC0+Y21kID0gTU1VRVhUX1RMQl9GTFVTSF9MT0NBTDsKLQlNVUxUSV9tbXVleHRfb3AobWNzLm1jLCBvcCwgMSwgTlVMTCwgRE9NSURfU0VMRik7Ci0KLQl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9NTVUpOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgeGVuX2ZsdXNoX3RsYl9zaW5nbGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN0cnVjdCBtbXVleHRfb3AgKm9wOwotCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQltY3MgPSB4ZW5fbWNfZW50cnkoc2l6ZW9mKCpvcCkpOwotCW9wID0gbWNzLmFyZ3M7Ci0Jb3AtPmNtZCA9IE1NVUVYVF9JTlZMUEdfTE9DQUw7Ci0Jb3AtPmFyZzEubGluZWFyX2FkZHIgPSBhZGRyICYgUEFHRV9NQVNLOwotCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKLQotCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fZmx1c2hfdGxiX290aGVycyhjb25zdCBjcHVtYXNrX3QgKmNwdXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSB1bnNpZ25lZCBsb25nIHZhKQotewotCXN0cnVjdCB7Ci0JCXN0cnVjdCBtbXVleHRfb3Agb3A7Ci0JCWNwdW1hc2tfdCBtYXNrOwotCX0gKmFyZ3M7Ci0JY3B1bWFza190IGNwdW1hc2sgPSAqY3B1czsKLQlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jczsKLQotCS8qCi0JICogQSBjb3VwbGUgb2YgKHRvIGJlIHJlbW92ZWQpIHNhbml0eSBjaGVja3M6Ci0JICoKLQkgKiAtIGN1cnJlbnQgQ1BVIG11c3Qgbm90IGJlIGluIG1hc2sKLQkgKiAtIG1hc2sgbXVzdCBleGlzdCA6KQotCSAqLwotCUJVR19PTihjcHVzX2VtcHR5KGNwdW1hc2spKTsKLQlCVUdfT04oY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1bWFzaykpOwotCUJVR19PTighbW0pOwotCi0JLyogSWYgYSBDUFUgd2hpY2ggd2UgcmFuIG9uIGhhcyBnb25lIGRvd24sIE9LLiAqLwotCWNwdXNfYW5kKGNwdW1hc2ssIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eShjcHVtYXNrKSkKLQkJcmV0dXJuOwotCi0JbWNzID0geGVuX21jX2VudHJ5KHNpemVvZigqYXJncykpOwotCWFyZ3MgPSBtY3MuYXJnczsKLQlhcmdzLT5tYXNrID0gY3B1bWFzazsKLQlhcmdzLT5vcC5hcmcyLnZjcHVtYXNrID0gJmFyZ3MtPm1hc2s7Ci0KLQlpZiAodmEgPT0gVExCX0ZMVVNIX0FMTCkgewotCQlhcmdzLT5vcC5jbWQgPSBNTVVFWFRfVExCX0ZMVVNIX01VTFRJOwotCX0gZWxzZSB7Ci0JCWFyZ3MtPm9wLmNtZCA9IE1NVUVYVF9JTlZMUEdfTVVMVEk7Ci0JCWFyZ3MtPm9wLmFyZzEubGluZWFyX2FkZHIgPSB2YTsKLQl9Ci0KLQlNVUxUSV9tbXVleHRfb3AobWNzLm1jLCAmYXJncy0+b3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpOwotCi0JeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfTU1VKTsKLX0KIAogc3RhdGljIHZvaWQgeGVuX2NsdHModm9pZCkKIHsKQEAgLTcwMCwyMSArNTkzLDYgQEAKIAl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9DUFUpOwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3IyKHVuc2lnbmVkIGxvbmcgY3IyKQotewotCXg4Nl9yZWFkX3BlcmNwdSh4ZW5fdmNwdSktPmFyY2guY3IyID0gY3IyOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjIodm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1KS0+YXJjaC5jcjI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9yZWFkX2NyMl9kaXJlY3Qodm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1X2luZm8uYXJjaC5jcjIpOwotfQotCiBzdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgY3I0KQogewogCWNyNCAmPSB+WDg2X0NSNF9QR0U7CkBAIC03MjMsNzEgKzYwMSw2IEBACiAJbmF0aXZlX3dyaXRlX2NyNChjcjQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjModm9pZCkKLXsKLQlyZXR1cm4geDg2X3JlYWRfcGVyY3B1KHhlbl9jcjMpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF9jcjModm9pZCAqdikKLXsKLQl4ODZfd3JpdGVfcGVyY3B1KHhlbl9jdXJyZW50X2NyMywgKHVuc2lnbmVkIGxvbmcpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9feGVuX3dyaXRlX2NyMyhib29sIGtlcm5lbCwgdW5zaWduZWQgbG9uZyBjcjMpCi17Ci0Jc3RydWN0IG1tdWV4dF9vcCAqb3A7Ci0Jc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7Ci0JdW5zaWduZWQgbG9uZyBtZm47Ci0KLQlpZiAoY3IzKQotCQltZm4gPSBwZm5fdG9fbWZuKFBGTl9ET1dOKGNyMykpOwotCWVsc2UKLQkJbWZuID0gMDsKLQotCVdBUk5fT04obWZuID09IDAgJiYga2VybmVsKTsKLQotCW1jcyA9IF9feGVuX21jX2VudHJ5KHNpemVvZigqb3ApKTsKLQotCW9wID0gbWNzLmFyZ3M7Ci0Jb3AtPmNtZCA9IGtlcm5lbCA/IE1NVUVYVF9ORVdfQkFTRVBUUiA6IE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSOwotCW9wLT5hcmcxLm1mbiA9IG1mbjsKLQotCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKLQotCWlmIChrZXJuZWwpIHsKLQkJeDg2X3dyaXRlX3BlcmNwdSh4ZW5fY3IzLCBjcjMpOwotCi0JCS8qIFVwZGF0ZSB4ZW5fY3VycmVudF9jcjMgb25jZSB0aGUgYmF0Y2ggaGFzIGFjdHVhbGx5Ci0JCSAgIGJlZW4gc3VibWl0dGVkLiAqLwotCQl4ZW5fbWNfY2FsbGJhY2soc2V0X2N1cnJlbnRfY3IzLCAodm9pZCAqKWNyMyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB4ZW5fd3JpdGVfY3IzKHVuc2lnbmVkIGxvbmcgY3IzKQotewotCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKLQotCXhlbl9tY19iYXRjaCgpOyAgLyogZGlzYWJsZXMgaW50ZXJydXB0cyAqLwotCi0JLyogVXBkYXRlIHdoaWxlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyBpdHMgYXRvbWljIHdpdGgKLQkgICByZXNwZWN0IHRvIGlwaXMgKi8KLQl4ODZfd3JpdGVfcGVyY3B1KHhlbl9jcjMsIGNyMyk7Ci0KLQlfX3hlbl93cml0ZV9jcjModHJ1ZSwgY3IzKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQl7Ci0JCXBnZF90ICp1c2VyX3BnZCA9IHhlbl9nZXRfdXNlcl9wZ2QoX192YShjcjMpKTsKLQkJaWYgKHVzZXJfcGdkKQotCQkJX194ZW5fd3JpdGVfY3IzKGZhbHNlLCBfX3BhKHVzZXJfcGdkKSk7Ci0JCWVsc2UKLQkJCV9feGVuX3dyaXRlX2NyMyhmYWxzZSwgMCk7Ci0JfQotI2VuZGlmCi0KLQl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9DUFUpOyAgLyogaW50ZXJydXB0cyByZXN0b3JlZCAqLwotfQotCiBzdGF0aWMgaW50IHhlbl93cml0ZV9tc3Jfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCiB7CiAJaW50IHJldDsKQEAgLTgyOSwxODUgKzY0Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogRWFybHkgaW4gYm9vdCwgd2hpbGUgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBwYWdldGFibGUsIGFzc3VtZQotICAgZXZlcnl0aGluZyBpcyBwaW5uZWQuICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX2FsbG9jX3B0ZV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLSNpZmRlZiBDT05GSUdfRkxBVE1FTQotCUJVR19PTihtZW1fbWFwKTsJLyogc2hvdWxkIG9ubHkgYmUgdXNlZCBlYXJseSAqLwotI2VuZGlmCi0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShfX3ZhKFBGTl9QSFlTKHBmbikpKTsKLX0KLQotLyogRWFybHkgcmVsZWFzZV9wdGUgYXNzdW1lcyB0aGF0IGFsbCBwdHMgYXJlIHBpbm5lZCwgc2luY2UgdGhlcmUncwotICAgb25seSBpbml0X21tIGFuZCBhbnl0aGluZyBhdHRhY2hlZCB0byB0aGF0IGlzIHBpbm5lZC4gKi8KLXN0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0ZV9pbml0KHVuc2lnbmVkIGxvbmcgcGZuKQotewotCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOwotfQotCi1zdGF0aWMgdm9pZCBwaW5fcGFnZXRhYmxlX3Bmbih1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXN0cnVjdCBtbXVleHRfb3Agb3A7Ci0Jb3AuY21kID0gY21kOwotCW9wLmFyZzEubWZuID0gcGZuX3RvX21mbihwZm4pOwotCWlmIChIWVBFUlZJU09SX21tdWV4dF9vcCgmb3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpKQotCQlCVUcoKTsKLX0KLQotLyogVGhpcyBuZWVkcyB0byBtYWtlIHN1cmUgdGhlIG5ldyBwdGUgcGFnZSBpcyBwaW5uZWQgaWZmIGl0cyBiZWluZwotICAgYXR0YWNoZWQgdG8gYSBwaW5uZWQgcGFnZXRhYmxlLiAqLwotc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B0cGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxldmVsKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQotCWlmIChQYWdlUGlubmVkKHZpcnRfdG9fcGFnZShtbS0+cGdkKSkpIHsKLQkJU2V0UGFnZVBpbm5lZChwYWdlKTsKLQotCQl2bV91bm1hcF9hbGlhc2VzKCk7Ci0JCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKLQkJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoX192YShQRk5fUEhZUygodW5zaWduZWQgbG9uZylwZm4pKSk7Ci0JCQlpZiAobGV2ZWwgPT0gUFRfUFRFICYmIFVTRV9TUExJVF9QVExPQ0tTKQotCQkJCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDFfVEFCTEUsIHBmbik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN0cmF5IG1hcHBpbmdzIG9mCi0JCQkgICB0aGlzIHBhZ2UgKi8KLQkJCWttYXBfZmx1c2hfdW51c2VkKCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9hbGxvY19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgUFRfUFRFKTsKLX0KLQotc3RhdGljIHZvaWQgeGVuX2FsbG9jX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QTUQpOwotfQotCi1zdGF0aWMgaW50IHhlbl9wZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JcGdkX3QgKnBnZCA9IG1tLT5wZ2Q7Ci0JaW50IHJldCA9IDA7Ci0KLQlCVUdfT04oUGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UocGdkKSkpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocGdkKTsKLQkJcGdkX3QgKnVzZXJfcGdkOwotCi0JCUJVR19PTihwYWdlLT5wcml2YXRlICE9IDApOwotCi0JCXJldCA9IC1FTk9NRU07Ci0KLQkJdXNlcl9wZ2QgPSAocGdkX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCQlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpdXNlcl9wZ2Q7Ci0KLQkJaWYgKHVzZXJfcGdkICE9IE5VTEwpIHsKLQkJCXVzZXJfcGdkW3BnZF9pbmRleChWU1lTQ0FMTF9TVEFSVCldID0KLQkJCQlfX3BnZChfX3BhKGxldmVsM191c2VyX3ZzeXNjYWxsKSB8IF9QQUdFX1RBQkxFKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQotCQlCVUdfT04oUGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UoeGVuX2dldF91c2VyX3BnZChwZ2QpKSkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgeGVuX3BnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlwZ2RfdCAqdXNlcl9wZ2QgPSB4ZW5fZ2V0X3VzZXJfcGdkKHBnZCk7Ci0KLQlpZiAodXNlcl9wZ2QpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl1c2VyX3BnZCk7Ci0jZW5kaWYKLX0KLQotLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHVudGlsIHdlJ3JlIE9LIHRvIHVzZSBzdHJ1Y3QgcGFnZSAqLwotc3RhdGljIHZvaWQgeGVuX3JlbGVhc2VfcHRwYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsZXZlbCkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0KLQlpZiAoUGFnZVBpbm5lZChwYWdlKSkgewotCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCQlpZiAobGV2ZWwgPT0gUFRfUFRFICYmIFVTRV9TUExJVF9QVExPQ0tTKQotCQkJCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgcGZuKTsKLQkJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOwotCQl9Ci0JCUNsZWFyUGFnZVBpbm5lZChwYWdlKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0ZSh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQl4ZW5fcmVsZWFzZV9wdHBhZ2UocGZuLCBQVF9QVEUpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wbWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUE1EKTsKLX0KLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QVUQpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUFVEKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLXN0YXRpYyB2b2lkICp4ZW5fa21hcF9hdG9taWNfcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKLXsKLQlwZ3Byb3RfdCBwcm90ID0gUEFHRV9LRVJORUw7Ci0KLQlpZiAoUGFnZVBpbm5lZChwYWdlKSkKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX1JPOwotCi0JaWYgKDAgJiYgUGFnZUhpZ2hNZW0ocGFnZSkpCi0JCXByaW50aygibWFwcGluZyBoaWdocHRlICVseCB0eXBlICVkIHByb3QgJXNcbiIsCi0JCSAgICAgICBwYWdlX3RvX3BmbihwYWdlKSwgdHlwZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9SVyA/ICJXUklURSIgOiAiUkVBRCIpOwotCi0JcmV0dXJuIGttYXBfYXRvbWljX3Byb3QocGFnZSwgdHlwZSwgcHJvdCk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLXN0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQkvKiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHB0ZSwgdGhlbiBkb24ndCBhbGxvdyBfUEFHRV9SVyB0byBiZSBzZXQgKi8KLQlpZiAocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9QUkVTRU5UKQotCQlwdGUgPSBfX3B0ZV9tYSgoKHB0ZV92YWxfbWEoKnB0ZXApICYgX1BBR0VfUlcpIHwgfl9QQUdFX1JXKSAmCi0JCQkgICAgICAgcHRlX3ZhbF9tYShwdGUpKTsKLQotCXJldHVybiBwdGU7Ci19Ci0KLS8qIEluaXQtdGltZSBzZXRfcHRlIHdoaWxlIGNvbnN0cnVjdGluZyBpbml0aWFsIHBhZ2V0YWJsZXMsIHdoaWNoCi0gICBkb2Vzbid0IGFsbG93IFJPIHBhZ2V0YWJsZSBwYWdlcyB0byBiZSByZW1hcHBlZCBSVyAqLwotc3RhdGljIF9faW5pdCB2b2lkIHhlbl9zZXRfcHRlX2luaXQocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlwdGUgPSBtYXNrX3J3X3B0ZShwdGVwLCBwdGUpOwotCi0JeGVuX3NldF9wdGUocHRlcCwgcHRlKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkKLXsKLX0KLQogdm9pZCB4ZW5fc2V0dXBfc2hhcmVkX2luZm8odm9pZCkKIHsKIAlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKSB7CkBAIC0xMDI4LDM3ICs2NjIsNiBAQAogCXhlbl9zZXR1cF9tZm5fbGlzdF9saXN0KCk7CiB9CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpCi17Ci0JeGVuX3NldHVwX3NoYXJlZF9pbmZvKCk7Ci19Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKQotewotCXB2X21tdV9vcHMuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlOwotCXB2X21tdV9vcHMuc2V0X3BtZCA9IHhlbl9zZXRfcG1kOwotCXB2X21tdV9vcHMuc2V0X3B1ZCA9IHhlbl9zZXRfcHVkOwotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCXB2X21tdV9vcHMuc2V0X3BnZCA9IHhlbl9zZXRfcGdkOwotI2VuZGlmCi0KLQkvKiBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIHBhdGNoaW5nIGhhc24ndCBoYXBwZW5lZCB5ZXQKLQkgICAod2hpY2ggaXQgaGFzbid0KSAqLwotCXB2X21tdV9vcHMuYWxsb2NfcHRlID0geGVuX2FsbG9jX3B0ZTsKLQlwdl9tbXVfb3BzLmFsbG9jX3BtZCA9IHhlbl9hbGxvY19wbWQ7Ci0JcHZfbW11X29wcy5yZWxlYXNlX3B0ZSA9IHhlbl9yZWxlYXNlX3B0ZTsKLQlwdl9tbXVfb3BzLnJlbGVhc2VfcG1kID0geGVuX3JlbGVhc2VfcG1kOwotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCXB2X21tdV9vcHMuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B1ZDsKLQlwdl9tbXVfb3BzLnJlbGVhc2VfcHVkID0geGVuX3JlbGVhc2VfcHVkOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JU2V0UGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UobGV2ZWwzX3VzZXJfdnN5c2NhbGwpKTsKLSNlbmRpZgotCXhlbl9tYXJrX2luaXRfbW1fcGlubmVkKCk7Ci19Ci0KIC8qIFRoaXMgaXMgY2FsbGVkIG9uY2Ugd2UgaGF2ZSB0aGUgY3B1X3Bvc3NpYmxlX21hcCAqLwogdm9pZCB4ZW5fc2V0dXBfdmNwdV9pbmZvX3BsYWNlbWVudCh2b2lkKQogewpAQCAtMTA3MiwxMCArNjc1LDEwIEBACiAJaWYgKGhhdmVfdmNwdV9pbmZvX3BsYWNlbWVudCkgewogCQlwcmludGsoS0VSTl9JTkZPICJYZW46IHVzaW5nIHZjcHVfaW5mbyBwbGFjZW1lbnRcbiIpOwogCi0JCXB2X2lycV9vcHMuc2F2ZV9mbCA9IHhlbl9zYXZlX2ZsX2RpcmVjdDsKLQkJcHZfaXJxX29wcy5yZXN0b3JlX2ZsID0geGVuX3Jlc3RvcmVfZmxfZGlyZWN0OwotCQlwdl9pcnFfb3BzLmlycV9kaXNhYmxlID0geGVuX2lycV9kaXNhYmxlX2RpcmVjdDsKLQkJcHZfaXJxX29wcy5pcnFfZW5hYmxlID0geGVuX2lycV9lbmFibGVfZGlyZWN0OworCQlwdl9pcnFfb3BzLnNhdmVfZmwgPSBfX1BWX0lTX0NBTExFRV9TQVZFKHhlbl9zYXZlX2ZsX2RpcmVjdCk7CisJCXB2X2lycV9vcHMucmVzdG9yZV9mbCA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUoeGVuX3Jlc3RvcmVfZmxfZGlyZWN0KTsKKwkJcHZfaXJxX29wcy5pcnFfZGlzYWJsZSA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCk7CisJCXB2X2lycV9vcHMuaXJxX2VuYWJsZSA9IF9fUFZfSVNfQ0FMTEVFX1NBVkUoeGVuX2lycV9lbmFibGVfZGlyZWN0KTsKIAkJcHZfbW11X29wcy5yZWFkX2NyMiA9IHhlbl9yZWFkX2NyMl9kaXJlY3Q7CiAJfQogfQpAQCAtMTEzMyw0OSArNzM2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fc2V0X2ZpeG1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKLXsKLQlwdGVfdCBwdGU7Ci0KLQlwaHlzID4+PSBQQUdFX1NISUZUOwotCi0Jc3dpdGNoIChpZHgpIHsKLQljYXNlIEZJWF9CVE1BUF9FTkQgLi4uIEZJWF9CVE1BUF9CRUdJTjoKLSNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCi0JY2FzZSBGSVhfRjAwRl9JRFQ6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JY2FzZSBGSVhfV1BfVEVTVDoKLQljYXNlIEZJWF9WRFNPOgotIyBpZmRlZiBDT05GSUdfSElHSE1FTQotCWNhc2UgRklYX0tNQVBfQkVHSU4gLi4uIEZJWF9LTUFQX0VORDoKLSMgZW5kaWYKLSNlbHNlCi0JY2FzZSBWU1lTQ0FMTF9MQVNUX1BBR0UgLi4uIFZTWVNDQUxMX0ZJUlNUX1BBR0U6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQljYXNlIEZJWF9BUElDX0JBU0U6CS8qIG1hcHMgZHVtbXkgbG9jYWwgQVBJQyAqLwotI2VuZGlmCi0JCXB0ZSA9IHBmbl9wdGUocGh5cywgcHJvdCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHRlID0gbWZuX3B0ZShwaHlzLCBwcm90KTsKLQkJYnJlYWs7Ci0JfQotCi0JX19uYXRpdmVfc2V0X2ZpeG1hcChpZHgsIHB0ZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogUmVwbGljYXRlIGNoYW5nZXMgdG8gbWFwIHRoZSB2c3lzY2FsbCBwYWdlIGludG8gdGhlIHVzZXIKLQkgICBwYWdldGFibGUgdnN5c2NhbGwgbWFwcGluZy4gKi8KLQlpZiAoaWR4ID49IFZTWVNDQUxMX0xBU1RfUEFHRSAmJiBpZHggPD0gVlNZU0NBTExfRklSU1RfUEFHRSkgewotCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19maXhfdG9fdmlydChpZHgpOwotCQlzZXRfcHRlX3ZhZGRyX3B1ZChsZXZlbDNfdXNlcl92c3lzY2FsbCwgdmFkZHIsIHB0ZSk7Ci0JfQotI2VuZGlmCi19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW5mbyB4ZW5faW5mbyBfX2luaXRkYXRhID0gewogCS5wYXJhdmlydF9lbmFibGVkID0gMSwKIAkuc2hhcmVkX2tlcm5lbF9wbWQgPSAwLApAQCAtMTI3MSw4NyArODMxLDYgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9tbXVfb3BzIHhlbl9tbXVfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLnBhZ2V0YWJsZV9zZXR1cF9zdGFydCA9IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQsCi0JLnBhZ2V0YWJsZV9zZXR1cF9kb25lID0geGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lLAotCi0JLnJlYWRfY3IyID0geGVuX3JlYWRfY3IyLAotCS53cml0ZV9jcjIgPSB4ZW5fd3JpdGVfY3IyLAotCi0JLnJlYWRfY3IzID0geGVuX3JlYWRfY3IzLAotCS53cml0ZV9jcjMgPSB4ZW5fd3JpdGVfY3IzLAotCi0JLmZsdXNoX3RsYl91c2VyID0geGVuX2ZsdXNoX3RsYiwKLQkuZmx1c2hfdGxiX2tlcm5lbCA9IHhlbl9mbHVzaF90bGIsCi0JLmZsdXNoX3RsYl9zaW5nbGUgPSB4ZW5fZmx1c2hfdGxiX3NpbmdsZSwKLQkuZmx1c2hfdGxiX290aGVycyA9IHhlbl9mbHVzaF90bGJfb3RoZXJzLAotCi0JLnB0ZV91cGRhdGUgPSBwYXJhdmlydF9ub3AsCi0JLnB0ZV91cGRhdGVfZGVmZXIgPSBwYXJhdmlydF9ub3AsCi0KLQkucGdkX2FsbG9jID0geGVuX3BnZF9hbGxvYywKLQkucGdkX2ZyZWUgPSB4ZW5fcGdkX2ZyZWUsCi0KLQkuYWxsb2NfcHRlID0geGVuX2FsbG9jX3B0ZV9pbml0LAotCS5yZWxlYXNlX3B0ZSA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAotCS5hbGxvY19wbWQgPSB4ZW5fYWxsb2NfcHRlX2luaXQsCi0JLmFsbG9jX3BtZF9jbG9uZSA9IHBhcmF2aXJ0X25vcCwKLQkucmVsZWFzZV9wbWQgPSB4ZW5fcmVsZWFzZV9wdGVfaW5pdCwKLQotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0JLmttYXBfYXRvbWljX3B0ZSA9IHhlbl9rbWFwX2F0b21pY19wdGUsCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQkuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlLAotI2Vsc2UKLQkuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlX2luaXQsCi0jZW5kaWYKLQkuc2V0X3B0ZV9hdCA9IHhlbl9zZXRfcHRlX2F0LAotCS5zZXRfcG1kID0geGVuX3NldF9wbWRfaHlwZXIsCi0KLQkucHRlcF9tb2RpZnlfcHJvdF9zdGFydCA9IF9fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCwKLQkucHRlcF9tb2RpZnlfcHJvdF9jb21taXQgPSBfX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0LAotCi0JLnB0ZV92YWwgPSB4ZW5fcHRlX3ZhbCwKLQkucHRlX2ZsYWdzID0gbmF0aXZlX3B0ZV9mbGFncywKLQkucGdkX3ZhbCA9IHhlbl9wZ2RfdmFsLAotCi0JLm1ha2VfcHRlID0geGVuX21ha2VfcHRlLAotCS5tYWtlX3BnZCA9IHhlbl9tYWtlX3BnZCwKLQotI2lmZGVmIENPTkZJR19YODZfUEFFCi0JLnNldF9wdGVfYXRvbWljID0geGVuX3NldF9wdGVfYXRvbWljLAotCS5zZXRfcHRlX3ByZXNlbnQgPSB4ZW5fc2V0X3B0ZV9hdCwKLQkucHRlX2NsZWFyID0geGVuX3B0ZV9jbGVhciwKLQkucG1kX2NsZWFyID0geGVuX3BtZF9jbGVhciwKLSNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwotCS5zZXRfcHVkID0geGVuX3NldF9wdWRfaHlwZXIsCi0KLQkubWFrZV9wbWQgPSB4ZW5fbWFrZV9wbWQsCi0JLnBtZF92YWwgPSB4ZW5fcG1kX3ZhbCwKLQotI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAotCS5wdWRfdmFsID0geGVuX3B1ZF92YWwsCi0JLm1ha2VfcHVkID0geGVuX21ha2VfcHVkLAotCS5zZXRfcGdkID0geGVuX3NldF9wZ2RfaHlwZXIsCi0KLQkuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B0ZV9pbml0LAotCS5yZWxlYXNlX3B1ZCA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLwotCi0JLmFjdGl2YXRlX21tID0geGVuX2FjdGl2YXRlX21tLAotCS5kdXBfbW1hcCA9IHhlbl9kdXBfbW1hcCwKLQkuZXhpdF9tbWFwID0geGVuX2V4aXRfbW1hcCwKLQotCS5sYXp5X21vZGUgPSB7Ci0JCS5lbnRlciA9IHBhcmF2aXJ0X2VudGVyX2xhenlfbW11LAotCQkubGVhdmUgPSB4ZW5fbGVhdmVfbGF6eSwKLQl9LAotCi0JLnNldF9maXhtYXAgPSB4ZW5fc2V0X2ZpeG1hcCwKLX07Ci0KIHN0YXRpYyB2b2lkIHhlbl9yZWJvb3QoaW50IHJlYXNvbikKIHsKIAlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24gciA9IHsgLnJlYXNvbiA9IHJlYXNvbiB9OwpAQCAtMTM5NCwyMjMgKzg3Myw2IEBACiB9OwogCiAKLXN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV90b3Aodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5zaWduZWQgbG9uZyB0b3AgPSBIWVBFUlZJU09SX1ZJUlRfU1RBUlQ7Ci0Jc3RydWN0IHhlbl9wbGF0Zm9ybV9wYXJhbWV0ZXJzIHBwOwotCi0JaWYgKEhZUEVSVklTT1JfeGVuX3ZlcnNpb24oWEVOVkVSX3BsYXRmb3JtX3BhcmFtZXRlcnMsICZwcCkgPT0gMCkKLQkJdG9wID0gcHAudmlydF9zdGFydDsKLQotCXJlc2VydmVfdG9wX2FkZHJlc3MoLXRvcCk7Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwotfQotCi0vKgotICogTGlrZSBfX3ZhKCksIGJ1dCByZXR1cm5zIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBtYXBwaW5nICh3aGljaCBpcwotICogYWxsIHdlIGhhdmUgdW50aWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nIGhhcyBiZWVuIHNldCB1cC4KLSAqLwotc3RhdGljIHZvaWQgKl9fa2EocGh5c19hZGRyX3QgcGFkZHIpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiAodm9pZCAqKShwYWRkciArIF9fU1RBUlRfS0VSTkVMX21hcCk7Ci0jZWxzZQotCXJldHVybiBfX3ZhKHBhZGRyKTsKLSNlbmRpZgotfQotCi0vKiBDb252ZXJ0IGEgbWFjaGluZSBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG0ycChwaHlzX2FkZHJfdCBtYWRkcikKLXsKLQlwaHlzX2FkZHJfdCBwYWRkcjsKLQotCW1hZGRyICY9IFBURV9QRk5fTUFTSzsKLQlwYWRkciA9IG1mbl90b19wZm4obWFkZHIgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVDsKLQotCXJldHVybiBwYWRkcjsKLX0KLQotLyogQ29udmVydCBhIG1hY2hpbmUgYWRkcmVzcyB0byBrZXJuZWwgdmlydHVhbCAqLwotc3RhdGljIHZvaWQgKm0ydihwaHlzX2FkZHJfdCBtYWRkcikKLXsKLQlyZXR1cm4gX19rYShtMnAobWFkZHIpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3BhZ2VfcHJvdCh2b2lkICphZGRyLCBwZ3Byb3RfdCBwcm90KQotewotCXVuc2lnbmVkIGxvbmcgcGZuID0gX19wYShhZGRyKSA+PiBQQUdFX1NISUZUOwotCXB0ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKLQotCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKWFkZHIsIHB0ZSwgMCkpCi0JCUJVRygpOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX21hcF9pZGVudGl0eV9lYXJseShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIG1heF9wZm4pCi17Ci0JdW5zaWduZWQgcG1kaWR4LCBwdGVpZHg7Ci0JdW5zaWduZWQgaWRlbnRfcHRlOwotCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JaWRlbnRfcHRlID0gMDsKLQlwZm4gPSAwOwotCWZvciAocG1kaWR4ID0gMDsgcG1kaWR4IDwgUFRSU19QRVJfUE1EICYmIHBmbiA8IG1heF9wZm47IHBtZGlkeCsrKSB7Ci0JCXB0ZV90ICpwdGVfcGFnZTsKLQotCQkvKiBSZXVzZSBvciBhbGxvY2F0ZSBhIHBhZ2Ugb2YgcHRlcyAqLwotCQlpZiAocG1kX3ByZXNlbnQocG1kW3BtZGlkeF0pKQotCQkJcHRlX3BhZ2UgPSBtMnYocG1kW3BtZGlkeF0ucG1kKTsKLQkJZWxzZSB7Ci0JCQkvKiBDaGVjayBmb3IgZnJlZSBwdGUgcGFnZXMgKi8KLQkJCWlmIChpZGVudF9wdGUgPT0gQVJSQVlfU0laRShsZXZlbDFfaWRlbnRfcGd0KSkKLQkJCQlicmVhazsKLQotCQkJcHRlX3BhZ2UgPSAmbGV2ZWwxX2lkZW50X3BndFtpZGVudF9wdGVdOwotCQkJaWRlbnRfcHRlICs9IFBUUlNfUEVSX1BURTsKLQotCQkJcG1kW3BtZGlkeF0gPSBfX3BtZChfX3BhKHB0ZV9wYWdlKSB8IF9QQUdFX1RBQkxFKTsKLQkJfQotCi0JCS8qIEluc3RhbGwgbWFwcGluZ3MgKi8KLQkJZm9yIChwdGVpZHggPSAwOyBwdGVpZHggPCBQVFJTX1BFUl9QVEU7IHB0ZWlkeCsrLCBwZm4rKykgewotCQkJcHRlX3QgcHRlOwotCi0JCQlpZiAocGZuID4gbWF4X3Bmbl9tYXBwZWQpCi0JCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47Ci0KLQkJCWlmICghcHRlX25vbmUocHRlX3BhZ2VbcHRlaWR4XSkpCi0JCQkJY29udGludWU7Ci0KLQkJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTF9FWEVDKTsKLQkJCXB0ZV9wYWdlW3B0ZWlkeF0gPSBwdGU7Ci0JCX0KLQl9Ci0KLQlmb3IgKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IGlkZW50X3B0ZTsgcHRlaWR4ICs9IFBUUlNfUEVSX1BURSkKLQkJc2V0X3BhZ2VfcHJvdCgmbGV2ZWwxX2lkZW50X3BndFtwdGVpZHhdLCBQQUdFX0tFUk5FTF9STyk7Ci0KLQlzZXRfcGFnZV9wcm90KHBtZCwgUEFHRV9LRVJORUxfUk8pOwotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotc3RhdGljIHZvaWQgY29udmVydF9wZm5fbWZuKHZvaWQgKnYpCi17Ci0JcHRlX3QgKnB0ZSA9IHY7Ci0JaW50IGk7Ci0KLQkvKiBBbGwgbGV2ZWxzIGFyZSBjb252ZXJ0ZWQgdGhlIHNhbWUgd2F5LCBzbyBqdXN0IHRyZWF0IHRoZW0KLQkgICBhcyBwdGVzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykKLQkJcHRlW2ldID0geGVuX21ha2VfcHRlKHB0ZVtpXS5wdGUpOwotfQotCi0vKgotICogU2V0IHVwIHRoZSBpbml0YWwga2VybmVsIHBhZ2V0YWJsZS4KLSAqCi0gKiBXZSBjYW4gY29uc3RydWN0IHRoaXMgYnkgZ3JhZnRpbmcgdGhlIFhlbiBwcm92aWRlZCBwYWdldGFibGUgaW50bwotICogaGVhZF82NC5TJ3MgcHJlY29uc3RydWN0ZWQgcGFnZXRhYmxlcy4gIFdlIGNvcHkgdGhlIFhlbiBMMidzIGludG8KLSAqIGxldmVsMl9pZGVudF9wZ3QsIGxldmVsMl9rZXJuZWxfcGd0IGFuZCBsZXZlbDJfZml4bWFwX3BndC4gIFRoaXMKLSAqIG1lYW5zIHRoYXQgb25seSB0aGUga2VybmVsIGhhcyBhIHBoeXNpY2FsIG1hcHBpbmcgdG8gc3RhcnQgd2l0aCAtCi0gKiBidXQgdGhhdCdzIGVub3VnaCB0byBnZXQgX192YSB3b3JraW5nLiAgV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZXN0Ci0gKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0Ci0gKiB1cC4KLSAqLwotc3RhdGljIF9faW5pdCBwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgbWF4X3BmbikKLXsKLQlwdWRfdCAqbDM7Ci0JcG1kX3QgKmwyOwotCi0JLyogWmFwIGlkZW50aXR5IG1hcHBpbmcgKi8KLQlpbml0X2xldmVsNF9wZ3RbMF0gPSBfX3BnZCgwKTsKLQotCS8qIFByZS1jb25zdHJ1Y3RlZCBlbnRyaWVzIGFyZSBpbiBwZm4sIHNvIGNvbnZlcnQgdG8gbWZuICovCi0JY29udmVydF9wZm5fbWZuKGluaXRfbGV2ZWw0X3BndCk7Ci0JY29udmVydF9wZm5fbWZuKGxldmVsM19pZGVudF9wZ3QpOwotCWNvbnZlcnRfcGZuX21mbihsZXZlbDNfa2VybmVsX3BndCk7Ci0KLQlsMyA9IG0ydihwZ2RbcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCldLnBnZCk7Ci0JbDIgPSBtMnYobDNbcHVkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCldLnB1ZCk7Ci0KLQltZW1jcHkobGV2ZWwyX2lkZW50X3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOwotCW1lbWNweShsZXZlbDJfa2VybmVsX3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOwotCi0JbDMgPSBtMnYocGdkW3BnZF9pbmRleChfX1NUQVJUX0tFUk5FTF9tYXAgKyBQTURfU0laRSldLnBnZCk7Ci0JbDIgPSBtMnYobDNbcHVkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCArIFBNRF9TSVpFKV0ucHVkKTsKLQltZW1jcHkobGV2ZWwyX2ZpeG1hcF9wZ3QsIGwyLCBzaXplb2YocG1kX3QpICogUFRSU19QRVJfUE1EKTsKLQotCS8qIFNldCB1cCBpZGVudGl0eSBtYXAgKi8KLQl4ZW5fbWFwX2lkZW50aXR5X2Vhcmx5KGxldmVsMl9pZGVudF9wZ3QsIG1heF9wZm4pOwotCi0JLyogTWFrZSBwYWdldGFibGUgcGllY2VzIFJPICovCi0Jc2V0X3BhZ2VfcHJvdChpbml0X2xldmVsNF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGxldmVsM19pZGVudF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGxldmVsM19rZXJuZWxfcGd0LCBQQUdFX0tFUk5FTF9STyk7Ci0Jc2V0X3BhZ2VfcHJvdChsZXZlbDNfdXNlcl92c3lzY2FsbCwgUEFHRV9LRVJORUxfUk8pOwotCXNldF9wYWdlX3Byb3QobGV2ZWwyX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGxldmVsMl9maXhtYXBfcGd0LCBQQUdFX0tFUk5FTF9STyk7Ci0KLQkvKiBQaW4gZG93biBuZXcgTDQgKi8KLQlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfUElOX0w0X1RBQkxFLAotCQkJICBQRk5fRE9XTihfX3BhX3N5bWJvbChpbml0X2xldmVsNF9wZ3QpKSk7Ci0KLQkvKiBVbnBpbiBYZW4tcHJvdmlkZWQgb25lICovCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBQRk5fRE9XTihfX3BhKHBnZCkpKTsKLQotCS8qIFN3aXRjaCBvdmVyICovCi0JcGdkID0gaW5pdF9sZXZlbDRfcGd0OwotCi0JLyoKLQkgKiBBdCB0aGlzIHN0YWdlIHRoZXJlIGNhbiBiZSBubyB1c2VyIHBnZCwgYW5kIG5vIHBhZ2UKLQkgKiBzdHJ1Y3R1cmUgdG8gYXR0YWNoIGl0IHRvLCBzbyBtYWtlIHN1cmUgd2UganVzdCBzZXQga2VybmVsCi0JICogcGdkLgotCSAqLwotCXhlbl9tY19iYXRjaCgpOwotCV9feGVuX3dyaXRlX2NyMyh0cnVlLCBfX3BhKHBnZCkpOwotCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX0NQVSk7Ci0KLQlyZXNlcnZlX2Vhcmx5KF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UpLAotCQkgICAgICBfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlICsKLQkJCSAgIHhlbl9zdGFydF9pbmZvLT5ucl9wdF9mcmFtZXMgKiBQQUdFX1NJWkUpLAotCQkgICAgICAiWEVOIFBBR0VUQUJMRVMiKTsKLQotCXJldHVybiBwZ2Q7Ci19Ci0jZWxzZQkvKiAhQ09ORklHX1g4Nl82NCAqLwotc3RhdGljIHBtZF90IGxldmVsMl9rZXJuZWxfcGd0W1BUUlNfUEVSX1BNRF0gX19wYWdlX2FsaWduZWRfYnNzOwotCi1zdGF0aWMgX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAotCQkJCQkJdW5zaWduZWQgbG9uZyBtYXhfcGZuKQotewotCXBtZF90ICprZXJuZWxfcG1kOwotCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihpbml0X3BnX3RhYmxlc19lbmQgKyA1MTIqMTAyNCk7Ci0KLQlrZXJuZWxfcG1kID0gbTJ2KHBnZFtLRVJORUxfUEdEX0JPVU5EQVJZXS5wZ2QpOwotCW1lbWNweShsZXZlbDJfa2VybmVsX3BndCwga2VybmVsX3BtZCwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7Ci0KLQl4ZW5fbWFwX2lkZW50aXR5X2Vhcmx5KGxldmVsMl9rZXJuZWxfcGd0LCBtYXhfcGZuKTsKLQotCW1lbWNweShzd2FwcGVyX3BnX2RpciwgcGdkLCBzaXplb2YocGdkX3QpICogUFRSU19QRVJfUEdEKTsKLQlzZXRfcGdkKCZzd2FwcGVyX3BnX2RpcltLRVJORUxfUEdEX0JPVU5EQVJZXSwKLQkJCV9fcGdkKF9fcGEobGV2ZWwyX2tlcm5lbF9wZ3QpIHwgX1BBR0VfUFJFU0VOVCkpOwotCi0Jc2V0X3BhZ2VfcHJvdChsZXZlbDJfa2VybmVsX3BndCwgUEFHRV9LRVJORUxfUk8pOwotCXNldF9wYWdlX3Byb3Qoc3dhcHBlcl9wZ19kaXIsIFBBR0VfS0VSTkVMX1JPKTsKLQlzZXRfcGFnZV9wcm90KGVtcHR5X3plcm9fcGFnZSwgUEFHRV9LRVJORUxfUk8pOwotCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBQRk5fRE9XTihfX3BhKHBnZCkpKTsKLQotCXhlbl93cml0ZV9jcjMoX19wYShzd2FwcGVyX3BnX2RpcikpOwotCi0JcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1BJTl9MM19UQUJMRSwgUEZOX0RPV04oX19wYShzd2FwcGVyX3BnX2RpcikpKTsKLQotCXJldHVybiBzd2FwcGVyX3BnX2RpcjsKLX0KLSNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCi0KIC8qIEZpcnN0IEMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIFhlbiBib290ICovCiBhc21saW5rYWdlIHZvaWQgX19pbml0IHhlbl9zdGFydF9rZXJuZWwodm9pZCkKIHsKQEAgLTE2MzksNyArOTAxLDcgQEAKIAkvKgogCSAqIHNldCB1cCB0aGUgYmFzaWMgYXBpYyBvcHMuCiAJICovCi0JYXBpY19vcHMgPSAmeGVuX2Jhc2ljX2FwaWNfb3BzOworCXNldF94ZW5fYmFzaWNfYXBpY19vcHMoKTsKICNlbmRpZgogCiAJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfbW11X3B0X3VwZGF0ZV9wcmVzZXJ2ZV9hZCkpIHsKQEAgLTE2NTAsMTAgKzkxMiwxOCBAQAogCW1hY2hpbmVfb3BzID0geGVuX21hY2hpbmVfb3BzOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qIERpc2FibGUgdW50aWwgZGlyZWN0IHBlci1jcHUgZGF0YSBhY2Nlc3MuICovCi0JaGF2ZV92Y3B1X2luZm9fcGxhY2VtZW50ID0gMDsKLQl4ODZfNjRfaW5pdF9wZGEoKTsKKwkvKgorCSAqIFNldHVwIHBlcmNwdSBzdGF0ZS4gIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGZvciA2NC1iaXQKKwkgKiBiZWNhdXNlIDMyLWJpdCBhbHJlYWR5IGhhcyAlZnMgc2V0IHByb3Blcmx5LgorCSAqLworCWxvYWRfcGVyY3B1X3NlZ21lbnQoMCk7CiAjZW5kaWYKKwkvKgorCSAqIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byByZXRhaW4gdGhlIGluaXRpYWwgYWRkcmVzcyBvZiB0aGUKKwkgKiBwZXJjcHUgZ2R0X3BhZ2UgaXMgdG8gcmVtZW1iZXIgaXQgaGVyZSwgc28gd2UgY2FuIGdvIGFuZAorCSAqIG1hcmsgaXQgUlcgbGF0ZXIsIHdoZW4gdGhlIGluaXRpYWwgcGVyY3B1IGFyZWEgaXMgZnJlZWQuCisJICovCisJeGVuX2luaXRpYWxfZ2R0ID0gJnBlcl9jcHUoZ2R0X3BhZ2UsIDApOwogCiAJeGVuX3NtcF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9pcnEuYyBiL2FyY2gveDg2L3hlbi9pcnEuYwppbmRleCBiYjA0MjYwLi5jZmQxNzc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vaXJxLmMKKysrIGIvYXJjaC94ODYveGVuL2lycS5jCkBAIC0xOSwyNyArMTksMTIgQEAKIAkodm9pZClIWVBFUlZJU09SX3hlbl92ZXJzaW9uKDAsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX194ZW5faW5pdF9JUlEodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIENyZWF0ZSBpZGVudGl0eSB2ZWN0b3ItPmlycSBtYXAgKi8KLQlmb3IoaSA9IDA7IGkgPCBOUl9WRUNUT1JTOyBpKyspIHsKLQkJaW50IGNwdTsKLQotCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW2ldID0gaTsKLQl9Ci0KLQl4ZW5faW5pdF9JUlEoKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX3NhdmVfZmwodm9pZCkKIHsKIAlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl2Y3B1ID0geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1KTsKKwl2Y3B1ID0gcGVyY3B1X3JlYWQoeGVuX3ZjcHUpOwogCiAJLyogZmxhZyBoYXMgb3Bwb3NpdGUgc2Vuc2Ugb2YgbWFzayAqLwogCWZsYWdzID0gIXZjcHUtPmV2dGNobl91cGNhbGxfbWFzazsKQEAgLTUwLDYgKzM1LDcgQEAKIAkqLwogCXJldHVybiAoLWZsYWdzKSAmIFg4Nl9FRkxBR1NfSUY7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9zYXZlX2ZsKTsKIAogc3RhdGljIHZvaWQgeGVuX3Jlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTYyLDcgKzQ4LDcgQEAKIAkgICBtYWtlIHN1cmUgd2UncmUgZG9uJ3Qgc3dpdGNoIENQVXMgYmV0d2VlbiBnZXR0aW5nIHRoZSB2Y3B1CiAJICAgcG9pbnRlciBhbmQgdXBkYXRpbmcgdGhlIG1hc2suICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JdmNwdSA9IHg4Nl9yZWFkX3BlcmNwdSh4ZW5fdmNwdSk7CisJdmNwdSA9IHBlcmNwdV9yZWFkKHhlbl92Y3B1KTsKIAl2Y3B1LT5ldnRjaG5fdXBjYWxsX21hc2sgPSBmbGFnczsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAKQEAgLTc2LDYgKzYyLDcgQEAKIAkJCXhlbl9mb3JjZV9ldnRjaG5fY2FsbGJhY2soKTsKIAl9CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9yZXN0b3JlX2ZsKTsKIAogc3RhdGljIHZvaWQgeGVuX2lycV9kaXNhYmxlKHZvaWQpCiB7CkBAIC04Myw5ICs3MCwxMCBAQAogCSAgIG1ha2Ugc3VyZSB3ZSdyZSBkb24ndCBzd2l0Y2ggQ1BVcyBiZXR3ZWVuIGdldHRpbmcgdGhlIHZjcHUKIAkgICBwb2ludGVyIGFuZCB1cGRhdGluZyB0aGUgbWFzay4gKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQl4ODZfcmVhZF9wZXJjcHUoeGVuX3ZjcHUpLT5ldnRjaG5fdXBjYWxsX21hc2sgPSAxOworCXBlcmNwdV9yZWFkKHhlbl92Y3B1KS0+ZXZ0Y2huX3VwY2FsbF9tYXNrID0gMTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9pcnFfZGlzYWJsZSk7CiAKIHN0YXRpYyB2b2lkIHhlbl9pcnFfZW5hYmxlKHZvaWQpCiB7CkBAIC05Niw3ICs4NCw3IEBACiAJICAgdGhlIGNhbGxlciBpcyBjb25mdXNlZCBhbmQgaXMgdHJ5aW5nIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzCiAJICAgb24gYW4gaW5kZXRlcm1pbmF0ZSBwcm9jZXNzb3IuICovCiAKLQl2Y3B1ID0geDg2X3JlYWRfcGVyY3B1KHhlbl92Y3B1KTsKKwl2Y3B1ID0gcGVyY3B1X3JlYWQoeGVuX3ZjcHUpOwogCXZjcHUtPmV2dGNobl91cGNhbGxfbWFzayA9IDA7CiAKIAkvKiBEb2Vzbid0IG1hdHRlciBpZiB3ZSBnZXQgcHJlZW1wdGVkIGhlcmUsIGJlY2F1c2UgYW55CkBAIC0xMDYsNiArOTQsNyBAQAogCWlmICh1bmxpa2VseSh2Y3B1LT5ldnRjaG5fdXBjYWxsX3BlbmRpbmcpKQogCQl4ZW5fZm9yY2VfZXZ0Y2huX2NhbGxiYWNrKCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9pcnFfZW5hYmxlKTsKIAogc3RhdGljIHZvaWQgeGVuX3NhZmVfaGFsdCh2b2lkKQogewpAQCAtMTIzLDExICsxMTIsMTMgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pcnFfb3BzIHhlbl9pcnFfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLmluaXRfSVJRID0gX194ZW5faW5pdF9JUlEsCi0JLnNhdmVfZmwgPSB4ZW5fc2F2ZV9mbCwKLQkucmVzdG9yZV9mbCA9IHhlbl9yZXN0b3JlX2ZsLAotCS5pcnFfZGlzYWJsZSA9IHhlbl9pcnFfZGlzYWJsZSwKLQkuaXJxX2VuYWJsZSA9IHhlbl9pcnFfZW5hYmxlLAorCS5pbml0X0lSUSA9IHhlbl9pbml0X0lSUSwKKworCS5zYXZlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3NhdmVfZmwpLAorCS5yZXN0b3JlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3Jlc3RvcmVfZmwpLAorCS5pcnFfZGlzYWJsZSA9IFBWX0NBTExFRV9TQVZFKHhlbl9pcnFfZGlzYWJsZSksCisJLmlycV9lbmFibGUgPSBQVl9DQUxMRUVfU0FWRSh4ZW5faXJxX2VuYWJsZSksCisKIAkuc2FmZV9oYWx0ID0geGVuX3NhZmVfaGFsdCwKIAkuaGFsdCA9IHhlbl9oYWx0LAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCA1MDNjMjQwLi5jYjZhZmE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9saW5rYWdlLmg+CiAKQEAgLTU1LDYgKzU2LDggQEAKIAogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDx4ZW4vaHZjLWNvbnNvbGUuaD4KIAogI2luY2x1ZGUgIm11bHRpY2FsbHMuaCIKICNpbmNsdWRlICJtbXUuaCIKQEAgLTExNCw2ICsxMTcsMzcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19YRU5fREVCVUdfRlMgKi8KIAorCisvKgorICogSWRlbnRpdHkgbWFwLCBpbiBhZGRpdGlvbiB0byBwbGFpbiBrZXJuZWwgbWFwLiAgVGhpcyBuZWVkcyB0byBiZQorICogbGFyZ2UgZW5vdWdoIHRvIGFsbG9jYXRlIHBhZ2UgdGFibGUgcGFnZXMgdG8gYWxsb2NhdGUgdGhlIHJlc3QuCisgKiBFYWNoIHBhZ2UgY2FuIG1hcCAyTUIuCisgKi8KK3N0YXRpYyBwdGVfdCBsZXZlbDFfaWRlbnRfcGd0W1BUUlNfUEVSX1BURSAqIDRdIF9fcGFnZV9hbGlnbmVkX2JzczsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qIGwzIHB1ZCBmb3IgdXNlcnNwYWNlIHZzeXNjYWxsIG1hcHBpbmcgKi8KK3N0YXRpYyBwdWRfdCBsZXZlbDNfdXNlcl92c3lzY2FsbFtQVFJTX1BFUl9QVURdIF9fcGFnZV9hbGlnbmVkX2JzczsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qCisgKiBOb3RlIGFib3V0IGNyMyAocGFnZXRhYmxlIGJhc2UpIHZhbHVlczoKKyAqCisgKiB4ZW5fY3IzIGNvbnRhaW5zIHRoZSBjdXJyZW50IGxvZ2ljYWwgY3IzIHZhbHVlOyBpdCBjb250YWlucyB0aGUKKyAqIGxhc3Qgc2V0IGNyMy4gIFRoaXMgbWF5IG5vdCBiZSB0aGUgY3VycmVudCBlZmZlY3RpdmUgY3IzLCBiZWNhdXNlCisgKiBpdHMgdXBkYXRlIG1heSBiZSBiZWluZyBsYXppbHkgZGVmZXJyZWQuICBIb3dldmVyLCBhIHZjcHUgbG9va2luZworICogYXQgaXRzIG93biBjcjMgY2FuIHVzZSB0aGlzIHZhbHVlIGtub3dpbmcgdGhhdCBpdCBldmVyeXRoaW5nIHdpbGwKKyAqIGJlIHNlbGYtY29uc2lzdGVudC4KKyAqCisgKiB4ZW5fY3VycmVudF9jcjMgY29udGFpbnMgdGhlIGFjdHVhbCB2Y3B1IGNyMzsgaXQgaXMgc2V0IG9uY2UgdGhlCisgKiBoeXBlcmNhbGwgdG8gc2V0IHRoZSB2Y3B1IGNyMyBpcyBjb21wbGV0ZSAoc28gaXQgbWF5IGJlIGEgbGl0dGxlCisgKiBvdXQgb2YgZGF0ZSwgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgc2V0IGVhcmx5KS4gIElmIG9uZSB2Y3B1IGlzCisgKiBsb29raW5nIGF0IGFub3RoZXIgdmNwdSdzIGNyMyB2YWx1ZSwgaXQgc2hvdWxkIHVzZSB0aGlzIHZhcmlhYmxlLgorICovCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB4ZW5fY3IzKTsJIC8qIGNyMyBzdG9yZWQgYXMgcGh5c2FkZHIgKi8KK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jdXJyZW50X2NyMyk7CSAvKiBhY3R1YWwgdmNwdSBjcjMgKi8KKworCiAvKgogICogSnVzdCBiZXlvbmQgdGhlIGhpZ2hlc3QgdXNlcm1vZGUgYWRkcmVzcy4gIFNUQUNLX1RPUF9NQVggaGFzIGEKICAqIHJlZHpvbmUgYWJvdmUgaXQsIHNvIHJvdW5kIGl0IHVwIHRvIGEgUEdEIGJvdW5kYXJ5LgpAQCAtMjQyLDYgKzI3NiwxMyBAQAogCXAybV90b3BbdG9waWR4XVtpZHhdID0gbWZuOwogfQogCit1bnNpZ25lZCBsb25nIGFyYml0cmFyeV92aXJ0X3RvX21mbih2b2lkICp2YWRkcikKK3sKKwl4bWFkZHJfdCBtYWRkciA9IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUodmFkZHIpOworCisJcmV0dXJuIFBGTl9ET1dOKG1hZGRyLm1hZGRyKTsKK30KKwogeG1hZGRyX3QgYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICp2YWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKQEAgLTQ1OCwyOCArNDk5LDMzIEBACiB7CiAJcmV0dXJuIHB0ZV9tZm5fdG9fcGZuKHB0ZS5wdGUpOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh4ZW5fcHRlX3ZhbCk7CiAKIHBnZHZhbF90IHhlbl9wZ2RfdmFsKHBnZF90IHBnZCkKIHsKIAlyZXR1cm4gcHRlX21mbl90b19wZm4ocGdkLnBnZCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9wZ2RfdmFsKTsKIAogcHRlX3QgeGVuX21ha2VfcHRlKHB0ZXZhbF90IHB0ZSkKIHsKIAlwdGUgPSBwdGVfcGZuX3RvX21mbihwdGUpOwogCXJldHVybiBuYXRpdmVfbWFrZV9wdGUocHRlKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX21ha2VfcHRlKTsKIAogcGdkX3QgeGVuX21ha2VfcGdkKHBnZHZhbF90IHBnZCkKIHsKIAlwZ2QgPSBwdGVfcGZuX3RvX21mbihwZ2QpOwogCXJldHVybiBuYXRpdmVfbWFrZV9wZ2QocGdkKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX21ha2VfcGdkKTsKIAogcG1kdmFsX3QgeGVuX3BtZF92YWwocG1kX3QgcG1kKQogewogCXJldHVybiBwdGVfbWZuX3RvX3BmbihwbWQucG1kKTsKIH0KK1BWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX3BtZF92YWwpOwogCiB2b2lkIHhlbl9zZXRfcHVkX2h5cGVyKHB1ZF90ICpwdHIsIHB1ZF90IHZhbCkKIHsKQEAgLTU1NiwxMiArNjAyLDE0IEBACiAJcG1kID0gcHRlX3Bmbl90b19tZm4ocG1kKTsKIAlyZXR1cm4gbmF0aXZlX21ha2VfcG1kKHBtZCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9tYWtlX3BtZCk7CiAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKIHB1ZHZhbF90IHhlbl9wdWRfdmFsKHB1ZF90IHB1ZCkKIHsKIAlyZXR1cm4gcHRlX21mbl90b19wZm4ocHVkLnB1ZCk7CiB9CitQVl9DQUxMRUVfU0FWRV9SRUdTX1RIVU5LKHhlbl9wdWRfdmFsKTsKIAogcHVkX3QgeGVuX21ha2VfcHVkKHB1ZHZhbF90IHB1ZCkKIHsKQEAgLTU2OSw2ICs2MTcsNyBAQAogCiAJcmV0dXJuIG5hdGl2ZV9tYWtlX3B1ZChwdWQpOwogfQorUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh4ZW5fbWFrZV9wdWQpOwogCiBwZ2RfdCAqeGVuX2dldF91c2VyX3BnZChwZ2RfdCAqcGdkKQogewpAQCAtMTA2MywxOCArMTExMiwxNCBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gaW5mbzsKIAlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYWN0aXZlX21tID0gcmVhZF9wZGEoYWN0aXZlX21tKTsKLSNlbHNlCi0JYWN0aXZlX21tID0gX19nZXRfY3B1X3ZhcihjcHVfdGxic3RhdGUpLmFjdGl2ZV9tbTsKLSNlbmRpZgorCWFjdGl2ZV9tbSA9IHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0pOwogCiAJaWYgKGFjdGl2ZV9tbSA9PSBtbSkKIAkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIElmIHRoaXMgY3B1IHN0aWxsIGhhcyBhIHN0YWxlIGNyMyByZWZlcmVuY2UsIHRoZW4gbWFrZSBzdXJlCiAJICAgaXQgaGFzIGJlZW4gZmx1c2hlZC4gKi8KLQlpZiAoeDg2X3JlYWRfcGVyY3B1KHhlbl9jdXJyZW50X2NyMykgPT0gX19wYShtbS0+cGdkKSkgeworCWlmIChwZXJjcHVfcmVhZCh4ZW5fY3VycmVudF9jcjMpID09IF9fcGEobW0tPnBnZCkpIHsKIAkJbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIpOwogCQlhcmNoX2ZsdXNoX2xhenlfY3B1X21vZGUoKTsKIAl9CkBAIC0xMTU2LDYgKzEyMDEsNzA2IEBACiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogfQogCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSkKK3sKK30KKworc3RhdGljIF9faW5pdCB2b2lkIHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKK3sKKwl4ZW5fc2V0dXBfc2hhcmVkX2luZm8oKTsKK30KKworc3RhdGljIHZvaWQgeGVuX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIGNyMikKK3sKKwlwZXJjcHVfcmVhZCh4ZW5fdmNwdSktPmFyY2guY3IyID0gY3IyOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjIodm9pZCkKK3sKKwlyZXR1cm4gcGVyY3B1X3JlYWQoeGVuX3ZjcHUpLT5hcmNoLmNyMjsKK30KKwordW5zaWduZWQgbG9uZyB4ZW5fcmVhZF9jcjJfZGlyZWN0KHZvaWQpCit7CisJcmV0dXJuIHBlcmNwdV9yZWFkKHhlbl92Y3B1X2luZm8uYXJjaC5jcjIpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fZmx1c2hfdGxiKHZvaWQpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCW1jcyA9IHhlbl9tY19lbnRyeShzaXplb2YoKm9wKSk7CisKKwlvcCA9IG1jcy5hcmdzOworCW9wLT5jbWQgPSBNTVVFWFRfVExCX0ZMVVNIX0xPQ0FMOworCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKKworCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fZmx1c2hfdGxiX3NpbmdsZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCW1jcyA9IHhlbl9tY19lbnRyeShzaXplb2YoKm9wKSk7CisJb3AgPSBtY3MuYXJnczsKKwlvcC0+Y21kID0gTU1VRVhUX0lOVkxQR19MT0NBTDsKKwlvcC0+YXJnMS5saW5lYXJfYWRkciA9IGFkZHIgJiBQQUdFX01BU0s7CisJTVVMVElfbW11ZXh0X29wKG1jcy5tYywgb3AsIDEsIE5VTEwsIERPTUlEX1NFTEYpOworCisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfTU1VKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAorCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YSkKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbW11ZXh0X29wIG9wOworCQlERUNMQVJFX0JJVE1BUChtYXNrLCBOUl9DUFVTKTsKKwl9ICphcmdzOworCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgbWNzOworCisJQlVHX09OKGNwdW1hc2tfZW1wdHkoY3B1cykpOworCUJVR19PTighbW0pOworCisJbWNzID0geGVuX21jX2VudHJ5KHNpemVvZigqYXJncykpOworCWFyZ3MgPSBtY3MuYXJnczsKKwlhcmdzLT5vcC5hcmcyLnZjcHVtYXNrID0gdG9fY3B1bWFzayhhcmdzLT5tYXNrKTsKKworCS8qIFJlbW92ZSB1cywgYW5kIGFueSBvZmZsaW5lIENQVVMuICovCisJY3B1bWFza19hbmQodG9fY3B1bWFzayhhcmdzLT5tYXNrKSwgY3B1cywgY3B1X29ubGluZV9tYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIHRvX2NwdW1hc2soYXJncy0+bWFzaykpOworCisJaWYgKHZhID09IFRMQl9GTFVTSF9BTEwpIHsKKwkJYXJncy0+b3AuY21kID0gTU1VRVhUX1RMQl9GTFVTSF9NVUxUSTsKKwl9IGVsc2UgeworCQlhcmdzLT5vcC5jbWQgPSBNTVVFWFRfSU5WTFBHX01VTFRJOworCQlhcmdzLT5vcC5hcmcxLmxpbmVhcl9hZGRyID0gdmE7CisJfQorCisJTVVMVElfbW11ZXh0X29wKG1jcy5tYywgJmFyZ3MtPm9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKKworCXhlbl9tY19pc3N1ZShQQVJBVklSVF9MQVpZX01NVSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9yZWFkX2NyMyh2b2lkKQoreworCXJldHVybiBwZXJjcHVfcmVhZCh4ZW5fY3IzKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2N1cnJlbnRfY3IzKHZvaWQgKnYpCit7CisJcGVyY3B1X3dyaXRlKHhlbl9jdXJyZW50X2NyMywgKHVuc2lnbmVkIGxvbmcpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9feGVuX3dyaXRlX2NyMyhib29sIGtlcm5lbCwgdW5zaWduZWQgbG9uZyBjcjMpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisJdW5zaWduZWQgbG9uZyBtZm47CisKKwlpZiAoY3IzKQorCQltZm4gPSBwZm5fdG9fbWZuKFBGTl9ET1dOKGNyMykpOworCWVsc2UKKwkJbWZuID0gMDsKKworCVdBUk5fT04obWZuID09IDAgJiYga2VybmVsKTsKKworCW1jcyA9IF9feGVuX21jX2VudHJ5KHNpemVvZigqb3ApKTsKKworCW9wID0gbWNzLmFyZ3M7CisJb3AtPmNtZCA9IGtlcm5lbCA/IE1NVUVYVF9ORVdfQkFTRVBUUiA6IE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSOworCW9wLT5hcmcxLm1mbiA9IG1mbjsKKworCU1VTFRJX21tdWV4dF9vcChtY3MubWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKKworCWlmIChrZXJuZWwpIHsKKwkJcGVyY3B1X3dyaXRlKHhlbl9jcjMsIGNyMyk7CisKKwkJLyogVXBkYXRlIHhlbl9jdXJyZW50X2NyMyBvbmNlIHRoZSBiYXRjaCBoYXMgYWN0dWFsbHkKKwkJICAgYmVlbiBzdWJtaXR0ZWQuICovCisJCXhlbl9tY19jYWxsYmFjayhzZXRfY3VycmVudF9jcjMsICh2b2lkICopY3IzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl93cml0ZV9jcjModW5zaWduZWQgbG9uZyBjcjMpCit7CisJQlVHX09OKHByZWVtcHRpYmxlKCkpOworCisJeGVuX21jX2JhdGNoKCk7ICAvKiBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCisKKwkvKiBVcGRhdGUgd2hpbGUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIGl0cyBhdG9taWMgd2l0aAorCSAgIHJlc3BlY3QgdG8gaXBpcyAqLworCXBlcmNwdV93cml0ZSh4ZW5fY3IzLCBjcjMpOworCisJX194ZW5fd3JpdGVfY3IzKHRydWUsIGNyMyk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJeworCQlwZ2RfdCAqdXNlcl9wZ2QgPSB4ZW5fZ2V0X3VzZXJfcGdkKF9fdmEoY3IzKSk7CisJCWlmICh1c2VyX3BnZCkKKwkJCV9feGVuX3dyaXRlX2NyMyhmYWxzZSwgX19wYSh1c2VyX3BnZCkpOworCQllbHNlCisJCQlfX3hlbl93cml0ZV9jcjMoZmFsc2UsIDApOworCX0KKyNlbmRpZgorCisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsgIC8qIGludGVycnVwdHMgcmVzdG9yZWQgKi8KK30KKworc3RhdGljIGludCB4ZW5fcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBnZF90ICpwZ2QgPSBtbS0+cGdkOworCWludCByZXQgPSAwOworCisJQlVHX09OKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKHBnZCkpKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwl7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBnZCk7CisJCXBnZF90ICp1c2VyX3BnZDsKKworCQlCVUdfT04ocGFnZS0+cHJpdmF0ZSAhPSAwKTsKKworCQlyZXQgPSAtRU5PTUVNOworCisJCXVzZXJfcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXVzZXJfcGdkOworCisJCWlmICh1c2VyX3BnZCAhPSBOVUxMKSB7CisJCQl1c2VyX3BnZFtwZ2RfaW5kZXgoVlNZU0NBTExfU1RBUlQpXSA9CisJCQkJX19wZ2QoX19wYShsZXZlbDNfdXNlcl92c3lzY2FsbCkgfCBfUEFHRV9UQUJMRSk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJQlVHX09OKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKHhlbl9nZXRfdXNlcl9wZ2QocGdkKSkpKTsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9wZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcGdkX3QgKnVzZXJfcGdkID0geGVuX2dldF91c2VyX3BnZChwZ2QpOworCisJaWYgKHVzZXJfcGdkKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdXNlcl9wZ2QpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfSElHSFBURQorc3RhdGljIHZvaWQgKnhlbl9rbWFwX2F0b21pY19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKQoreworCXBncHJvdF90IHByb3QgPSBQQUdFX0tFUk5FTDsKKworCWlmIChQYWdlUGlubmVkKHBhZ2UpKQorCQlwcm90ID0gUEFHRV9LRVJORUxfUk87CisKKwlpZiAoMCAmJiBQYWdlSGlnaE1lbShwYWdlKSkKKwkJcHJpbnRrKCJtYXBwaW5nIGhpZ2hwdGUgJWx4IHR5cGUgJWQgcHJvdCAlc1xuIiwKKwkJICAgICAgIHBhZ2VfdG9fcGZuKHBhZ2UpLCB0eXBlLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1JXID8gIldSSVRFIiA6ICJSRUFEIik7CisKKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdChwYWdlLCB0eXBlLCBwcm90KTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorc3RhdGljIF9faW5pdCBwdGVfdCBtYXNrX3J3X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCS8qIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHRlLCB0aGVuIGRvbid0IGFsbG93IF9QQUdFX1JXIHRvIGJlIHNldCAqLworCWlmIChwdGVfdmFsX21hKCpwdGVwKSAmIF9QQUdFX1BSRVNFTlQpCisJCXB0ZSA9IF9fcHRlX21hKCgocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9SVykgfCB+X1BBR0VfUlcpICYKKwkJCSAgICAgICBwdGVfdmFsX21hKHB0ZSkpOworCisJcmV0dXJuIHB0ZTsKK30KKworLyogSW5pdC10aW1lIHNldF9wdGUgd2hpbGUgY29uc3RydWN0aW5nIGluaXRpYWwgcGFnZXRhYmxlcywgd2hpY2gKKyAgIGRvZXNuJ3QgYWxsb3cgUk8gcGFnZXRhYmxlIHBhZ2VzIHRvIGJlIHJlbWFwcGVkIFJXICovCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX3NldF9wdGVfaW5pdChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXB0ZSA9IG1hc2tfcndfcHRlKHB0ZXAsIHB0ZSk7CisKKwl4ZW5fc2V0X3B0ZShwdGVwLCBwdGUpOworfQorI2VuZGlmCisKKy8qIEVhcmx5IGluIGJvb3QsIHdoaWxlIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgcGFnZXRhYmxlLCBhc3N1bWUKKyAgIGV2ZXJ5dGhpbmcgaXMgcGlubmVkLiAqLworc3RhdGljIF9faW5pdCB2b2lkIHhlbl9hbGxvY19wdGVfaW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKwlCVUdfT04obWVtX21hcCk7CS8qIHNob3VsZCBvbmx5IGJlIHVzZWQgZWFybHkgKi8KKyNlbmRpZgorCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoX192YShQRk5fUEhZUyhwZm4pKSk7Cit9CisKKy8qIEVhcmx5IHJlbGVhc2VfcHRlIGFzc3VtZXMgdGhhdCBhbGwgcHRzIGFyZSBwaW5uZWQsIHNpbmNlIHRoZXJlJ3MKKyAgIG9ubHkgaW5pdF9tbSBhbmQgYW55dGhpbmcgYXR0YWNoZWQgdG8gdGhhdCBpcyBwaW5uZWQuICovCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdGVfaW5pdCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwltYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZShfX3ZhKFBGTl9QSFlTKHBmbikpKTsKK30KKworc3RhdGljIHZvaWQgcGluX3BhZ2V0YWJsZV9wZm4odW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgbW11ZXh0X29wIG9wOworCW9wLmNtZCA9IGNtZDsKKwlvcC5hcmcxLm1mbiA9IHBmbl90b19tZm4ocGZuKTsKKwlpZiAoSFlQRVJWSVNPUl9tbXVleHRfb3AoJm9wLCAxLCBOVUxMLCBET01JRF9TRUxGKSkKKwkJQlVHKCk7Cit9CisKKy8qIFRoaXMgbmVlZHMgdG8gbWFrZSBzdXJlIHRoZSBuZXcgcHRlIHBhZ2UgaXMgcGlubmVkIGlmZiBpdHMgYmVpbmcKKyAgIGF0dGFjaGVkIHRvIGEgcGlubmVkIHBhZ2V0YWJsZS4gKi8KK3N0YXRpYyB2b2lkIHhlbl9hbGxvY19wdHBhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsZXZlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKKwlpZiAoUGFnZVBpbm5lZCh2aXJ0X3RvX3BhZ2UobW0tPnBnZCkpKSB7CisJCVNldFBhZ2VQaW5uZWQocGFnZSk7CisKKwkJdm1fdW5tYXBfYWxpYXNlcygpOworCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCQltYWtlX2xvd21lbV9wYWdlX3JlYWRvbmx5KF9fdmEoUEZOX1BIWVMoKHVuc2lnbmVkIGxvbmcpcGZuKSkpOworCQkJaWYgKGxldmVsID09IFBUX1BURSAmJiBVU0VfU1BMSVRfUFRMT0NLUykKKwkJCQlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfUElOX0wxX1RBQkxFLCBwZm4pOworCQl9IGVsc2UgeworCQkJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdHJheSBtYXBwaW5ncyBvZgorCQkJICAgdGhpcyBwYWdlICovCisJCQlrbWFwX2ZsdXNoX3VudXNlZCgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB4ZW5fYWxsb2NfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl4ZW5fYWxsb2NfcHRwYWdlKG1tLCBwZm4sIFBUX1BURSk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9hbGxvY19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgUFRfUE1EKTsKK30KKworLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHVudGlsIHdlJ3JlIE9LIHRvIHVzZSBzdHJ1Y3QgcGFnZSAqLworc3RhdGljIHZvaWQgeGVuX3JlbGVhc2VfcHRwYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsZXZlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKKwlpZiAoUGFnZVBpbm5lZChwYWdlKSkgeworCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCQlpZiAobGV2ZWwgPT0gUFRfUFRFICYmIFVTRV9TUExJVF9QVExPQ0tTKQorCQkJCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgcGZuKTsKKwkJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOworCQl9CisJCUNsZWFyUGFnZVBpbm5lZChwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0ZSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl4ZW5fcmVsZWFzZV9wdHBhZ2UocGZuLCBQVF9QVEUpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wbWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUE1EKTsKK30KKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPT0gNAorc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisJeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QVUQpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUFVEKTsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCB4ZW5fcmVzZXJ2ZV90b3Aodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJdW5zaWduZWQgbG9uZyB0b3AgPSBIWVBFUlZJU09SX1ZJUlRfU1RBUlQ7CisJc3RydWN0IHhlbl9wbGF0Zm9ybV9wYXJhbWV0ZXJzIHBwOworCisJaWYgKEhZUEVSVklTT1JfeGVuX3ZlcnNpb24oWEVOVkVSX3BsYXRmb3JtX3BhcmFtZXRlcnMsICZwcCkgPT0gMCkKKwkJdG9wID0gcHAudmlydF9zdGFydDsKKworCXJlc2VydmVfdG9wX2FkZHJlc3MoLXRvcCk7CisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLworfQorCisvKgorICogTGlrZSBfX3ZhKCksIGJ1dCByZXR1cm5zIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBtYXBwaW5nICh3aGljaCBpcworICogYWxsIHdlIGhhdmUgdW50aWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nIGhhcyBiZWVuIHNldCB1cC4KKyAqLworc3RhdGljIHZvaWQgKl9fa2EocGh5c19hZGRyX3QgcGFkZHIpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJldHVybiAodm9pZCAqKShwYWRkciArIF9fU1RBUlRfS0VSTkVMX21hcCk7CisjZWxzZQorCXJldHVybiBfX3ZhKHBhZGRyKTsKKyNlbmRpZgorfQorCisvKiBDb252ZXJ0IGEgbWFjaGluZSBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG0ycChwaHlzX2FkZHJfdCBtYWRkcikKK3sKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKworCW1hZGRyICY9IFBURV9QRk5fTUFTSzsKKwlwYWRkciA9IG1mbl90b19wZm4obWFkZHIgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVDsKKworCXJldHVybiBwYWRkcjsKK30KKworLyogQ29udmVydCBhIG1hY2hpbmUgYWRkcmVzcyB0byBrZXJuZWwgdmlydHVhbCAqLworc3RhdGljIHZvaWQgKm0ydihwaHlzX2FkZHJfdCBtYWRkcikKK3sKKwlyZXR1cm4gX19rYShtMnAobWFkZHIpKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3BhZ2VfcHJvdCh2b2lkICphZGRyLCBwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gX19wYShhZGRyKSA+PiBQQUdFX1NISUZUOworCXB0ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKKworCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKWFkZHIsIHB0ZSwgMCkpCisJCUJVRygpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX21hcF9pZGVudGl0eV9lYXJseShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIG1heF9wZm4pCit7CisJdW5zaWduZWQgcG1kaWR4LCBwdGVpZHg7CisJdW5zaWduZWQgaWRlbnRfcHRlOworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJaWRlbnRfcHRlID0gMDsKKwlwZm4gPSAwOworCWZvciAocG1kaWR4ID0gMDsgcG1kaWR4IDwgUFRSU19QRVJfUE1EICYmIHBmbiA8IG1heF9wZm47IHBtZGlkeCsrKSB7CisJCXB0ZV90ICpwdGVfcGFnZTsKKworCQkvKiBSZXVzZSBvciBhbGxvY2F0ZSBhIHBhZ2Ugb2YgcHRlcyAqLworCQlpZiAocG1kX3ByZXNlbnQocG1kW3BtZGlkeF0pKQorCQkJcHRlX3BhZ2UgPSBtMnYocG1kW3BtZGlkeF0ucG1kKTsKKwkJZWxzZSB7CisJCQkvKiBDaGVjayBmb3IgZnJlZSBwdGUgcGFnZXMgKi8KKwkJCWlmIChpZGVudF9wdGUgPT0gQVJSQVlfU0laRShsZXZlbDFfaWRlbnRfcGd0KSkKKwkJCQlicmVhazsKKworCQkJcHRlX3BhZ2UgPSAmbGV2ZWwxX2lkZW50X3BndFtpZGVudF9wdGVdOworCQkJaWRlbnRfcHRlICs9IFBUUlNfUEVSX1BURTsKKworCQkJcG1kW3BtZGlkeF0gPSBfX3BtZChfX3BhKHB0ZV9wYWdlKSB8IF9QQUdFX1RBQkxFKTsKKwkJfQorCisJCS8qIEluc3RhbGwgbWFwcGluZ3MgKi8KKwkJZm9yIChwdGVpZHggPSAwOyBwdGVpZHggPCBQVFJTX1BFUl9QVEU7IHB0ZWlkeCsrLCBwZm4rKykgeworCQkJcHRlX3QgcHRlOworCisJCQlpZiAocGZuID4gbWF4X3Bmbl9tYXBwZWQpCisJCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47CisKKwkJCWlmICghcHRlX25vbmUocHRlX3BhZ2VbcHRlaWR4XSkpCisJCQkJY29udGludWU7CisKKwkJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTF9FWEVDKTsKKwkJCXB0ZV9wYWdlW3B0ZWlkeF0gPSBwdGU7CisJCX0KKwl9CisKKwlmb3IgKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IGlkZW50X3B0ZTsgcHRlaWR4ICs9IFBUUlNfUEVSX1BURSkKKwkJc2V0X3BhZ2VfcHJvdCgmbGV2ZWwxX2lkZW50X3BndFtwdGVpZHhdLCBQQUdFX0tFUk5FTF9STyk7CisKKwlzZXRfcGFnZV9wcm90KHBtZCwgUEFHRV9LRVJORUxfUk8pOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIHZvaWQgY29udmVydF9wZm5fbWZuKHZvaWQgKnYpCit7CisJcHRlX3QgKnB0ZSA9IHY7CisJaW50IGk7CisKKwkvKiBBbGwgbGV2ZWxzIGFyZSBjb252ZXJ0ZWQgdGhlIHNhbWUgd2F5LCBzbyBqdXN0IHRyZWF0IHRoZW0KKwkgICBhcyBwdGVzLiAqLworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykKKwkJcHRlW2ldID0geGVuX21ha2VfcHRlKHB0ZVtpXS5wdGUpOworfQorCisvKgorICogU2V0IHVwIHRoZSBpbml0YWwga2VybmVsIHBhZ2V0YWJsZS4KKyAqCisgKiBXZSBjYW4gY29uc3RydWN0IHRoaXMgYnkgZ3JhZnRpbmcgdGhlIFhlbiBwcm92aWRlZCBwYWdldGFibGUgaW50bworICogaGVhZF82NC5TJ3MgcHJlY29uc3RydWN0ZWQgcGFnZXRhYmxlcy4gIFdlIGNvcHkgdGhlIFhlbiBMMidzIGludG8KKyAqIGxldmVsMl9pZGVudF9wZ3QsIGxldmVsMl9rZXJuZWxfcGd0IGFuZCBsZXZlbDJfZml4bWFwX3BndC4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgb25seSB0aGUga2VybmVsIGhhcyBhIHBoeXNpY2FsIG1hcHBpbmcgdG8gc3RhcnQgd2l0aCAtCisgKiBidXQgdGhhdCdzIGVub3VnaCB0byBnZXQgX192YSB3b3JraW5nLiAgV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZXN0CisgKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0CisgKiB1cC4KKyAqLworX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAorCQkJCQkgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQoreworCXB1ZF90ICpsMzsKKwlwbWRfdCAqbDI7CisKKwkvKiBaYXAgaWRlbnRpdHkgbWFwcGluZyAqLworCWluaXRfbGV2ZWw0X3BndFswXSA9IF9fcGdkKDApOworCisJLyogUHJlLWNvbnN0cnVjdGVkIGVudHJpZXMgYXJlIGluIHBmbiwgc28gY29udmVydCB0byBtZm4gKi8KKwljb252ZXJ0X3Bmbl9tZm4oaW5pdF9sZXZlbDRfcGd0KTsKKwljb252ZXJ0X3Bmbl9tZm4obGV2ZWwzX2lkZW50X3BndCk7CisJY29udmVydF9wZm5fbWZuKGxldmVsM19rZXJuZWxfcGd0KTsKKworCWwzID0gbTJ2KHBnZFtwZ2RfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0ucGdkKTsKKwlsMiA9IG0ydihsM1twdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0ucHVkKTsKKworCW1lbWNweShsZXZlbDJfaWRlbnRfcGd0LCBsMiwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CisJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBsMiwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CisKKwlsMyA9IG0ydihwZ2RbcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCArIFBNRF9TSVpFKV0ucGdkKTsKKwlsMiA9IG0ydihsM1twdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwICsgUE1EX1NJWkUpXS5wdWQpOworCW1lbWNweShsZXZlbDJfZml4bWFwX3BndCwgbDIsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOworCisJLyogU2V0IHVwIGlkZW50aXR5IG1hcCAqLworCXhlbl9tYXBfaWRlbnRpdHlfZWFybHkobGV2ZWwyX2lkZW50X3BndCwgbWF4X3Bmbik7CisKKwkvKiBNYWtlIHBhZ2V0YWJsZSBwaWVjZXMgUk8gKi8KKwlzZXRfcGFnZV9wcm90KGluaXRfbGV2ZWw0X3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwzX2lkZW50X3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwzX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKwlzZXRfcGFnZV9wcm90KGxldmVsM191c2VyX3ZzeXNjYWxsLCBQQUdFX0tFUk5FTF9STyk7CisJc2V0X3BhZ2VfcHJvdChsZXZlbDJfa2VybmVsX3BndCwgUEFHRV9LRVJORUxfUk8pOworCXNldF9wYWdlX3Byb3QobGV2ZWwyX2ZpeG1hcF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKworCS8qIFBpbiBkb3duIG5ldyBMNCAqLworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDRfVEFCTEUsCisJCQkgIFBGTl9ET1dOKF9fcGFfc3ltYm9sKGluaXRfbGV2ZWw0X3BndCkpKTsKKworCS8qIFVucGluIFhlbi1wcm92aWRlZCBvbmUgKi8KKwlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfVU5QSU5fVEFCTEUsIFBGTl9ET1dOKF9fcGEocGdkKSkpOworCisJLyogU3dpdGNoIG92ZXIgKi8KKwlwZ2QgPSBpbml0X2xldmVsNF9wZ3Q7CisKKwkvKgorCSAqIEF0IHRoaXMgc3RhZ2UgdGhlcmUgY2FuIGJlIG5vIHVzZXIgcGdkLCBhbmQgbm8gcGFnZQorCSAqIHN0cnVjdHVyZSB0byBhdHRhY2ggaXQgdG8sIHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IHNldCBrZXJuZWwKKwkgKiBwZ2QuCisJICovCisJeGVuX21jX2JhdGNoKCk7CisJX194ZW5fd3JpdGVfY3IzKHRydWUsIF9fcGEocGdkKSk7CisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfQ1BVKTsKKworCXJlc2VydmVfZWFybHkoX19wYSh4ZW5fc3RhcnRfaW5mby0+cHRfYmFzZSksCisJCSAgICAgIF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UgKworCQkJICAgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcyAqIFBBR0VfU0laRSksCisJCSAgICAgICJYRU4gUEFHRVRBQkxFUyIpOworCisJcmV0dXJuIHBnZDsKK30KKyNlbHNlCS8qICFDT05GSUdfWDg2XzY0ICovCitzdGF0aWMgcG1kX3QgbGV2ZWwyX2tlcm5lbF9wZ3RbUFRSU19QRVJfUE1EXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisKK19faW5pdCBwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKK3sKKwlwbWRfdCAqa2VybmVsX3BtZDsKKworCWluaXRfcGdfdGFibGVzX3N0YXJ0ID0gX19wYShwZ2QpOworCWluaXRfcGdfdGFibGVzX2VuZCA9IF9fcGEocGdkKSArIHhlbl9zdGFydF9pbmZvLT5ucl9wdF9mcmFtZXMqUEFHRV9TSVpFOworCW1heF9wZm5fbWFwcGVkID0gUEZOX0RPV04oaW5pdF9wZ190YWJsZXNfZW5kICsgNTEyKjEwMjQpOworCisJa2VybmVsX3BtZCA9IG0ydihwZ2RbS0VSTkVMX1BHRF9CT1VOREFSWV0ucGdkKTsKKwltZW1jcHkobGV2ZWwyX2tlcm5lbF9wZ3QsIGtlcm5lbF9wbWQsIHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQpOworCisJeGVuX21hcF9pZGVudGl0eV9lYXJseShsZXZlbDJfa2VybmVsX3BndCwgbWF4X3Bmbik7CisKKwltZW1jcHkoc3dhcHBlcl9wZ19kaXIsIHBnZCwgc2l6ZW9mKHBnZF90KSAqIFBUUlNfUEVSX1BHRCk7CisJc2V0X3BnZCgmc3dhcHBlcl9wZ19kaXJbS0VSTkVMX1BHRF9CT1VOREFSWV0sCisJCQlfX3BnZChfX3BhKGxldmVsMl9rZXJuZWxfcGd0KSB8IF9QQUdFX1BSRVNFTlQpKTsKKworCXNldF9wYWdlX3Byb3QobGV2ZWwyX2tlcm5lbF9wZ3QsIFBBR0VfS0VSTkVMX1JPKTsKKwlzZXRfcGFnZV9wcm90KHN3YXBwZXJfcGdfZGlyLCBQQUdFX0tFUk5FTF9STyk7CisJc2V0X3BhZ2VfcHJvdChlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfS0VSTkVMX1JPKTsKKworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9VTlBJTl9UQUJMRSwgUEZOX0RPV04oX19wYShwZ2QpKSk7CisKKwl4ZW5fd3JpdGVfY3IzKF9fcGEoc3dhcHBlcl9wZ19kaXIpKTsKKworCXBpbl9wYWdldGFibGVfcGZuKE1NVUVYVF9QSU5fTDNfVEFCTEUsIFBGTl9ET1dOKF9fcGEoc3dhcHBlcl9wZ19kaXIpKSk7CisKKwlyZXR1cm4gc3dhcHBlcl9wZ19kaXI7Cit9CisjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCitzdGF0aWMgdm9pZCB4ZW5fc2V0X2ZpeG1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKK3sKKwlwdGVfdCBwdGU7CisKKwlwaHlzID4+PSBQQUdFX1NISUZUOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIEZJWF9CVE1BUF9FTkQgLi4uIEZJWF9CVE1BUF9CRUdJTjoKKyNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCisJY2FzZSBGSVhfRjAwRl9JRFQ6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJY2FzZSBGSVhfV1BfVEVTVDoKKwljYXNlIEZJWF9WRFNPOgorIyBpZmRlZiBDT05GSUdfSElHSE1FTQorCWNhc2UgRklYX0tNQVBfQkVHSU4gLi4uIEZJWF9LTUFQX0VORDoKKyMgZW5kaWYKKyNlbHNlCisJY2FzZSBWU1lTQ0FMTF9MQVNUX1BBR0UgLi4uIFZTWVNDQUxMX0ZJUlNUX1BBR0U6CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwljYXNlIEZJWF9BUElDX0JBU0U6CS8qIG1hcHMgZHVtbXkgbG9jYWwgQVBJQyAqLworI2VuZGlmCisJCXB0ZSA9IHBmbl9wdGUocGh5cywgcHJvdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHRlID0gbWZuX3B0ZShwaHlzLCBwcm90KTsKKwkJYnJlYWs7CisJfQorCisJX19uYXRpdmVfc2V0X2ZpeG1hcChpZHgsIHB0ZSk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogUmVwbGljYXRlIGNoYW5nZXMgdG8gbWFwIHRoZSB2c3lzY2FsbCBwYWdlIGludG8gdGhlIHVzZXIKKwkgICBwYWdldGFibGUgdnN5c2NhbGwgbWFwcGluZy4gKi8KKwlpZiAoaWR4ID49IFZTWVNDQUxMX0xBU1RfUEFHRSAmJiBpZHggPD0gVlNZU0NBTExfRklSU1RfUEFHRSkgeworCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19maXhfdG9fdmlydChpZHgpOworCQlzZXRfcHRlX3ZhZGRyX3B1ZChsZXZlbDNfdXNlcl92c3lzY2FsbCwgdmFkZHIsIHB0ZSk7CisJfQorI2VuZGlmCit9CisKK19faW5pdCB2b2lkIHhlbl9wb3N0X2FsbG9jYXRvcl9pbml0KHZvaWQpCit7CisJcHZfbW11X29wcy5zZXRfcHRlID0geGVuX3NldF9wdGU7CisJcHZfbW11X29wcy5zZXRfcG1kID0geGVuX3NldF9wbWQ7CisJcHZfbW11X29wcy5zZXRfcHVkID0geGVuX3NldF9wdWQ7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CisJcHZfbW11X29wcy5zZXRfcGdkID0geGVuX3NldF9wZ2Q7CisjZW5kaWYKKworCS8qIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgcGF0Y2hpbmcgaGFzbid0IGhhcHBlbmVkIHlldAorCSAgICh3aGljaCBpdCBoYXNuJ3QpICovCisJcHZfbW11X29wcy5hbGxvY19wdGUgPSB4ZW5fYWxsb2NfcHRlOworCXB2X21tdV9vcHMuYWxsb2NfcG1kID0geGVuX2FsbG9jX3BtZDsKKwlwdl9tbXVfb3BzLnJlbGVhc2VfcHRlID0geGVuX3JlbGVhc2VfcHRlOworCXB2X21tdV9vcHMucmVsZWFzZV9wbWQgPSB4ZW5fcmVsZWFzZV9wbWQ7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CisJcHZfbW11X29wcy5hbGxvY19wdWQgPSB4ZW5fYWxsb2NfcHVkOworCXB2X21tdV9vcHMucmVsZWFzZV9wdWQgPSB4ZW5fcmVsZWFzZV9wdWQ7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlTZXRQYWdlUGlubmVkKHZpcnRfdG9fcGFnZShsZXZlbDNfdXNlcl92c3lzY2FsbCkpOworI2VuZGlmCisJeGVuX21hcmtfaW5pdF9tbV9waW5uZWQoKTsKK30KKworCitjb25zdCBzdHJ1Y3QgcHZfbW11X29wcyB4ZW5fbW11X29wcyBfX2luaXRkYXRhID0geworCS5wYWdldGFibGVfc2V0dXBfc3RhcnQgPSB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0LAorCS5wYWdldGFibGVfc2V0dXBfZG9uZSA9IHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZSwKKworCS5yZWFkX2NyMiA9IHhlbl9yZWFkX2NyMiwKKwkud3JpdGVfY3IyID0geGVuX3dyaXRlX2NyMiwKKworCS5yZWFkX2NyMyA9IHhlbl9yZWFkX2NyMywKKwkud3JpdGVfY3IzID0geGVuX3dyaXRlX2NyMywKKworCS5mbHVzaF90bGJfdXNlciA9IHhlbl9mbHVzaF90bGIsCisJLmZsdXNoX3RsYl9rZXJuZWwgPSB4ZW5fZmx1c2hfdGxiLAorCS5mbHVzaF90bGJfc2luZ2xlID0geGVuX2ZsdXNoX3RsYl9zaW5nbGUsCisJLmZsdXNoX3RsYl9vdGhlcnMgPSB4ZW5fZmx1c2hfdGxiX290aGVycywKKworCS5wdGVfdXBkYXRlID0gcGFyYXZpcnRfbm9wLAorCS5wdGVfdXBkYXRlX2RlZmVyID0gcGFyYXZpcnRfbm9wLAorCisJLnBnZF9hbGxvYyA9IHhlbl9wZ2RfYWxsb2MsCisJLnBnZF9mcmVlID0geGVuX3BnZF9mcmVlLAorCisJLmFsbG9jX3B0ZSA9IHhlbl9hbGxvY19wdGVfaW5pdCwKKwkucmVsZWFzZV9wdGUgPSB4ZW5fcmVsZWFzZV9wdGVfaW5pdCwKKwkuYWxsb2NfcG1kID0geGVuX2FsbG9jX3B0ZV9pbml0LAorCS5hbGxvY19wbWRfY2xvbmUgPSBwYXJhdmlydF9ub3AsCisJLnJlbGVhc2VfcG1kID0geGVuX3JlbGVhc2VfcHRlX2luaXQsCisKKyNpZmRlZiBDT05GSUdfSElHSFBURQorCS5rbWFwX2F0b21pY19wdGUgPSB4ZW5fa21hcF9hdG9taWNfcHRlLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLnNldF9wdGUgPSB4ZW5fc2V0X3B0ZSwKKyNlbHNlCisJLnNldF9wdGUgPSB4ZW5fc2V0X3B0ZV9pbml0LAorI2VuZGlmCisJLnNldF9wdGVfYXQgPSB4ZW5fc2V0X3B0ZV9hdCwKKwkuc2V0X3BtZCA9IHhlbl9zZXRfcG1kX2h5cGVyLAorCisJLnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQgPSBfX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQsCisJLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0ID0gX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCwKKworCS5wdGVfdmFsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3B0ZV92YWwpLAorCS5wZ2RfdmFsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3BnZF92YWwpLAorCisJLm1ha2VfcHRlID0gUFZfQ0FMTEVFX1NBVkUoeGVuX21ha2VfcHRlKSwKKwkubWFrZV9wZ2QgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fbWFrZV9wZ2QpLAorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKwkuc2V0X3B0ZV9hdG9taWMgPSB4ZW5fc2V0X3B0ZV9hdG9taWMsCisJLnNldF9wdGVfcHJlc2VudCA9IHhlbl9zZXRfcHRlX2F0LAorCS5wdGVfY2xlYXIgPSB4ZW5fcHRlX2NsZWFyLAorCS5wbWRfY2xlYXIgPSB4ZW5fcG1kX2NsZWFyLAorI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCisJLnNldF9wdWQgPSB4ZW5fc2V0X3B1ZF9oeXBlciwKKworCS5tYWtlX3BtZCA9IFBWX0NBTExFRV9TQVZFKHhlbl9tYWtlX3BtZCksCisJLnBtZF92YWwgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fcG1kX3ZhbCksCisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKKwkucHVkX3ZhbCA9IFBWX0NBTExFRV9TQVZFKHhlbl9wdWRfdmFsKSwKKwkubWFrZV9wdWQgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fbWFrZV9wdWQpLAorCS5zZXRfcGdkID0geGVuX3NldF9wZ2RfaHlwZXIsCisKKwkuYWxsb2NfcHVkID0geGVuX2FsbG9jX3B0ZV9pbml0LAorCS5yZWxlYXNlX3B1ZCA9IHhlbl9yZWxlYXNlX3B0ZV9pbml0LAorI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLworCisJLmFjdGl2YXRlX21tID0geGVuX2FjdGl2YXRlX21tLAorCS5kdXBfbW1hcCA9IHhlbl9kdXBfbW1hcCwKKwkuZXhpdF9tbWFwID0geGVuX2V4aXRfbW1hcCwKKworCS5sYXp5X21vZGUgPSB7CisJCS5lbnRlciA9IHBhcmF2aXJ0X2VudGVyX2xhenlfbW11LAorCQkubGVhdmUgPSB4ZW5fbGVhdmVfbGF6eSwKKwl9LAorCisJLnNldF9maXhtYXAgPSB4ZW5fc2V0X2ZpeG1hcCwKK307CisKKwogI2lmZGVmIENPTkZJR19YRU5fREVCVUdfRlMKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmRfbW11X2RlYnVnOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5oIGIvYXJjaC94ODYveGVuL21tdS5oCmluZGV4IDk4ZDcxNjUuLjI0ZDFiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuaAorKysgYi9hcmNoL3g4Ni94ZW4vbW11LmgKQEAgLTU0LDQgKzU0LDcgQEAKIHZvaWQgIHhlbl9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CiAKK3Vuc2lnbmVkIGxvbmcgeGVuX3JlYWRfY3IyX2RpcmVjdCh2b2lkKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdl9tbXVfb3BzIHhlbl9tbXVfb3BzOwogI2VuZGlmCS8qIF9YRU5fTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMgYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCmluZGV4IGM3Mzg2NDQuLjhiZmY3ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKKysrIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwpAQCAtMzksNiArMzksNyBAQAogCXN0cnVjdCBtdWx0aWNhbGxfZW50cnkgZW50cmllc1tNQ19CQVRDSF07CiAjaWYgTUNfREVCVUcKIAlzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5IGRlYnVnW01DX0JBVENIXTsKKwl2b2lkICpjYWxsZXJbTUNfQkFUQ0hdOwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBhcmdzW01DX0FSR1NdOwogCXN0cnVjdCBjYWxsYmFjayB7CkBAIC0xNTQsMTEgKzE1NSwxMiBAQAogCQkJICAgICAgIHJldCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJCWR1bXBfc3RhY2soKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBiLT5tY2lkeDsgaSsrKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgY2FsbCAlMmQvJWQ6IG9wPSVsdSBhcmc9WyVseF0gcmVzdWx0PSVsZFxuIiwKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBjYWxsICUyZC8lZDogb3A9JWx1IGFyZz1bJWx4XSByZXN1bHQ9JWxkXHQlcEZcbiIsCiAJCQkJICAgICAgIGkrMSwgYi0+bWNpZHgsCiAJCQkJICAgICAgIGItPmRlYnVnW2ldLm9wLAogCQkJCSAgICAgICBiLT5kZWJ1Z1tpXS5hcmdzWzBdLAotCQkJCSAgICAgICBiLT5lbnRyaWVzW2ldLnJlc3VsdCk7CisJCQkJICAgICAgIGItPmVudHJpZXNbaV0ucmVzdWx0LAorCQkJCSAgICAgICBiLT5jYWxsZXJbaV0pOwogCQkJfQogCQl9CiAjZW5kaWYKQEAgLTE2OCw4ICsxNzAsNiBAQAogCX0gZWxzZQogCQlCVUdfT04oYi0+YXJnaWR4ICE9IDApOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCiAJZm9yIChpID0gMDsgaSA8IGItPmNiaWR4OyBpKyspIHsKIAkJc3RydWN0IGNhbGxiYWNrICpjYiA9ICZiLT5jYWxsYmFja3NbaV07CiAKQEAgLTE3Nyw3ICsxNzcsOSBAQAogCX0KIAliLT5jYmlkeCA9IDA7CiAKLQlCVUdfT04ocmV0KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlXQVJOX09OKHJldCk7CiB9CiAKIHN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgX194ZW5fbWNfZW50cnkoc2l6ZV90IGFyZ3MpCkBAIC0xOTcsNiArMTk5LDkgQEAKIAl9CiAKIAlyZXQubWMgPSAmYi0+ZW50cmllc1tiLT5tY2lkeF07CisjaWZkZWYgTUNfREVCVUcKKwliLT5jYWxsZXJbYi0+bWNpZHhdID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworI2VuZGlmCiAJYi0+bWNpZHgrKzsKIAlyZXQuYXJncyA9ICZiLT5hcmdzW2FyZ2lkeF07CiAJYi0+YXJnaWR4ID0gYXJnaWR4ICsgYXJnczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmggYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5oCmluZGV4IGZhM2UxMDcuLjllNTY1ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmgKKysrIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuaApAQCAtNDEsNyArNDEsNyBAQAogCQl4ZW5fbWNfZmx1c2goKTsKIAogCS8qIHJlc3RvcmUgZmxhZ3Mgc2F2ZWQgaW4geGVuX21jX2JhdGNoICovCi0JbG9jYWxfaXJxX3Jlc3RvcmUoeDg2X3JlYWRfcGVyY3B1KHhlbl9tY19pcnFfZmxhZ3MpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShwZXJjcHVfcmVhZCh4ZW5fbWNfaXJxX2ZsYWdzKSk7CiB9CiAKIC8qIFNldCB1cCBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IGJhdGNoIGlzIGZsdXNoZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zbXAuYyBiL2FyY2gveDg2L3hlbi9zbXAuYwppbmRleCBjNDRlMjA2Li44ZDQ3MDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc21wLmMKKysrIGIvYXJjaC94ODYveGVuL3NtcC5jCkBAIC01MCwxMSArNTAsNyBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGVuX3Jlc2NoZWR1bGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3Jlc2NoZWRfY291bnQrKzsKLSNlbHNlCi0JYWRkX3BkYShpcnFfcmVzY2hlZF9jb3VudCwgMSk7Ci0jZW5kaWYKKwlpbmNfaXJxX3N0YXQoaXJxX3Jlc2NoZWRfY291bnQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNzgsNyArNzQsNyBAQAogCXhlbl9zZXR1cF9jcHVfY2xvY2tldmVudHMoKTsKIAogCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0JeDg2X3dyaXRlX3BlcmNwdShjcHVfc3RhdGUsIENQVV9PTkxJTkUpOworCXBlcmNwdV93cml0ZShjcHVfc3RhdGUsIENQVV9PTkxJTkUpOwogCXdtYigpOwogCiAJLyogV2UgY2FuIHRha2UgaW50ZXJydXB0cyBub3c6IHdlJ3JlIG9mZmljaWFsbHkgInVwIi4gKi8KQEAgLTE3NCw3ICsxNzAsNyBAQAogCiAJLyogV2UndmUgc3dpdGNoZWQgdG8gdGhlICJyZWFsIiBwZXItY3B1IGdkdCwgc28gbWFrZSBzdXJlIHRoZQogCSAgIG9sZCBtZW1vcnkgY2FuIGJlIHJlY3ljbGVkICovCi0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoJnBlcl9jcHVfdmFyKGdkdF9wYWdlKSk7CisJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoeGVuX2luaXRpYWxfZ2R0KTsKIAogCXhlbl9zZXR1cF92Y3B1X2luZm9fcGxhY2VtZW50KCk7CiB9CkBAIC0yMjMsNiArMjE5LDcgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9ndWVzdF9jb250ZXh0ICpjdHh0OwogCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0OworCXVuc2lnbmVkIGxvbmcgZ2R0X21mbjsKIAogCWlmIChjcHVtYXNrX3Rlc3RfYW5kX3NldF9jcHUoY3B1LCB4ZW5fY3B1X2luaXRpYWxpemVkX21hcCkpCiAJCXJldHVybiAwOwpAQCAtMjM5LDYgKzIzNiw4IEBACiAJY3R4dC0+dXNlcl9yZWdzLnNzID0gX19LRVJORUxfRFM7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWN0eHQtPnVzZXJfcmVncy5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKKyNlbHNlCisJY3R4dC0+Z3NfYmFzZV9rZXJuZWwgPSBwZXJfY3B1X29mZnNldChjcHUpOwogI2VuZGlmCiAJY3R4dC0+dXNlcl9yZWdzLmVpcCA9ICh1bnNpZ25lZCBsb25nKWNwdV9icmluZ3VwX2FuZF9pZGxlOwogCWN0eHQtPnVzZXJfcmVncy5lZmxhZ3MgPSAweDEwMDA7IC8qIElPUExfUklORzEgKi8KQEAgLTI1MCw5ICsyNDksMTIgQEAKIAljdHh0LT5sZHRfZW50cyA9IDA7CiAKIAlCVUdfT04oKHVuc2lnbmVkIGxvbmcpZ2R0ICYgflBBR0VfTUFTSyk7Ci0JbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShnZHQpOwogCi0JY3R4dC0+Z2R0X2ZyYW1lc1swXSA9IHZpcnRfdG9fbWZuKGdkdCk7CisJZ2R0X21mbiA9IGFyYml0cmFyeV92aXJ0X3RvX21mbihnZHQpOworCW1ha2VfbG93bWVtX3BhZ2VfcmVhZG9ubHkoZ2R0KTsKKwltYWtlX2xvd21lbV9wYWdlX3JlYWRvbmx5KG1mbl90b192aXJ0KGdkdF9tZm4pKTsKKworCWN0eHQtPmdkdF9mcmFtZXNbMF0gPSBnZHRfbWZuOwogCWN0eHQtPmdkdF9lbnRzICAgICAgPSBHRFRfRU5UUklFUzsKIAogCWN0eHQtPnVzZXJfcmVncy5jcyA9IF9fS0VSTkVMX0NTOwpAQCAtMjgzLDIzICsyODUsMTQgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUgPSBpZGxlX3Rhc2soY3B1KTsKIAlpbnQgcmM7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIEFQIHBkYXMgKi8KLQlXQVJOX09OKGNwdSA9PSAwKTsKLQlpZiAoY3B1ID4gMCkgewotCQlyYyA9IGdldF9sb2NhbF9wZGEoY3B1KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWluaXRfZ2R0KGNwdSk7CiAJcGVyX2NwdShjdXJyZW50X3Rhc2ssIGNwdSkgPSBpZGxlOworI2lmZGVmIENPTkZJR19YODZfMzIKIAlpcnFfY3R4X2luaXQoY3B1KTsKICNlbHNlCi0JY3B1X3BkYShjcHUpLT5wY3VycmVudCA9IGlkbGU7CiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGlkbGUsIFRJRl9GT1JLKTsKKwlwZXJfY3B1KGtlcm5lbF9zdGFjaywgY3B1KSA9CisJCSh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShpZGxlKSAtCisJCUtFUk5FTF9TVEFDS19PRkZTRVQgKyBUSFJFQURfU0laRTsKICNlbmRpZgogCXhlbl9zZXR1cF90aW1lcihjcHUpOwogCXhlbl9pbml0X2xvY2tfY3B1KGNwdSk7CkBAIC00NDUsMTEgKzQzOCw3IEBACiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX2NhbGxfY291bnQrKzsKLSNlbHNlCi0JYWRkX3BkYShpcnFfY2FsbF9jb3VudCwgMSk7Ci0jZW5kaWYKKwlpbmNfaXJxX3N0YXQoaXJxX2NhbGxfY291bnQpOwogCWlycV9leGl0KCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00NTksMTEgKzQ0OCw3IEBACiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9jYWxsX2NvdW50Kys7Ci0jZWxzZQotCWFkZF9wZGEoaXJxX2NhbGxfY291bnQsIDEpOwotI2VuZGlmCisJaW5jX2lycV9zdGF0KGlycV9jYWxsX2NvdW50KTsKIAlpcnFfZXhpdCgpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYyBiL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKaW5kZXggMjEyZmZlMC4uOTViZTdiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3N1c3BlbmQuYworKysgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KICNpbmNsdWRlIDxhc20veGVuL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAjaW5jbHVkZSAibW11LmgiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbS5TIGIvYXJjaC94ODYveGVuL3hlbi1hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQ3MzYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYveGVuL3hlbi1hc20uUwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIEFzbSB2ZXJzaW9ucyBvZiBYZW4gcHYtb3BzLCBzdWl0YWJsZSBmb3IgZWl0aGVyIGRpcmVjdCB1c2Ugb3IKKyAqIGlubGluaW5nLiAgVGhlIGlubGluZSB2ZXJzaW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdC11c2UKKyAqIHZlcnNpb25zLCB3aXRoIHRoZSBwcmUtIGFuZCBwb3N0LWFtYmxlIGNob3BwZWQgb2ZmLgorICoKKyAqIFRoaXMgY29kZSBpcyBlbmNvZGVkIGZvciBzaXplIHJhdGhlciB0aGFuIGFic29sdXRlIGVmZmljaWVuY3ksIHdpdGgKKyAqIGEgdmlldyB0byBiZWluZyBhYmxlIHRvIGlubGluZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICoKKyAqIFdlIG9ubHkgYm90aGVyIHdpdGggZGlyZWN0IGZvcm1zIChpZSwgdmNwdSBpbiBwZXJjcHUgZGF0YSkgb2YgdGhlCisgKiBvcGVyYXRpb25zIGhlcmU7IHRoZSBpbmRpcmVjdCBmb3JtcyBhcmUgYmV0dGVyIGhhbmRsZWQgaW4gQywgc2luY2UKKyAqIHRoZXkncmUgZ2VuZXJhbGx5IHRvbyBsYXJnZSB0byBpbmxpbmUgYW55d2F5LgorICovCisKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorCisjaW5jbHVkZSAieGVuLWFzbS5oIgorCisvKgorICogRW5hYmxlIGV2ZW50cy4gIFRoaXMgY2xlYXJzIHRoZSBldmVudCBtYXNrIGFuZCB0ZXN0cyB0aGUgcGVuZGluZworICogZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZyBldmVudHMsCisgKiB0aGVuIGVudGVyIHRoZSBoeXBlcnZpc29yIHRvIGdldCB0aGVtIGhhbmRsZWQuCisgKi8KK0VOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwkvKiBVbm1hc2sgZXZlbnRzICovCisJbW92YiAkMCwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKKworCS8qCisJICogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aCBhbnkKKwkgKiBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nIHJ1bgorCSAqIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4KKwkgKi8KKworCS8qIFRlc3QgZm9yIHBlbmRpbmcgKi8KKwl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX3BlbmRpbmcKKwlqeiAxZgorCisyOgljYWxsIGNoZWNrX2V2ZW50cworMToKK0VORFBBVENIKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKKwlSRUxPQyh4ZW5faXJxX2VuYWJsZV9kaXJlY3QsIDJiKzEpCisKKworLyoKKyAqIERpc2FibGluZyBldmVudHMgaXMgc2ltcGx5IGEgbWF0dGVyIG9mIG1ha2luZyB0aGUgZXZlbnQgbWFzaworICogbm9uLXplcm8uCisgKi8KK0VOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCisJbW92YiAkMSwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKK0VORFBBVENIKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCisJcmV0CisJRU5EUFJPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQorCVJFTE9DKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QsIDApCisKKy8qCisgKiAoeGVuXylzYXZlX2ZsIGlzIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGludGVycnVwdCBlbmFibGUgc3RhdHVzLgorICogQ2FsbGVycyBleHBlY3QgdGhlIHN0YXR1cyB0byBiZSBpbiBYODZfRUZMQUdTX0lGLCBhbmQgb3RoZXIgYml0cworICogbWF5IGJlIHNldCBpbiB0aGUgcmV0dXJuIHZhbHVlLiAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieQorICogbWFraW5nIHN1cmUgdGhhdCBYODZfRUZMQUdTX0lGIGhhcyB0aGUgcmlnaHQgdmFsdWUgKGFuZCBvdGhlciBiaXRzCisgKiBpbiB0aGF0IGJ5dGUgYXJlIDApLCBidXQgb3RoZXIgYml0cyBpbiB0aGUgcmV0dXJuIHZhbHVlIGFyZQorICogdW5kZWZpbmVkLiAgV2UgbmVlZCB0byB0b2dnbGUgdGhlIHN0YXRlIG9mIHRoZSBiaXQsIGJlY2F1c2UgWGVuIGFuZAorICogeDg2IHVzZSBvcHBvc2l0ZSBzZW5zZXMgKG1hc2sgdnMgZW5hYmxlKS4KKyAqLworRU5UUlkoeGVuX3NhdmVfZmxfZGlyZWN0KQorCXRlc3RiICQweGZmLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKSArIFhFTl92Y3B1X2luZm9fbWFzaworCXNldHogJWFoCisJYWRkYiAlYWgsICVhaAorRU5EUEFUQ0goeGVuX3NhdmVfZmxfZGlyZWN0KQorCXJldAorCUVORFBST0MoeGVuX3NhdmVfZmxfZGlyZWN0KQorCVJFTE9DKHhlbl9zYXZlX2ZsX2RpcmVjdCwgMCkKKworCisvKgorICogSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4gZnJvbQorICogeGVuX3NhdmVfZmxfZGlyZWN0LCBidXQgZm9yIHJvYnVzdG5lc3Mgc2FrZSB3ZSB0ZXN0IG9ubHkgdGhlCisgKiBYODZfRUZMQUdTX0lGIGZsYWcgcmF0aGVyIHRoYW4gdGhlIHdob2xlIGJ5dGUuIEFmdGVyIHNldHRpbmcgdGhlCisgKiBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZCBwZW5kaW5nIGV2ZW50cyBhbmQKKyAqIGVudGVycyB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBkZWxpdmVyZWQgaWYgc28uCisgKi8KK0VOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdGVzdHcgJFg4Nl9FRkxBR1NfSUYsICVkaQorI2Vsc2UKKwl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwgJWFoCisjZW5kaWYKKwlzZXR6IFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pICsgWEVOX3ZjcHVfaW5mb19tYXNrCisJLyoKKwkgKiBQcmVlbXB0IGhlcmUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGF0IHdpbGwgZGVhbCB3aXRoIGFueQorCSAqIHBlbmRpbmcgaW50ZXJydXB0cy4gIFRoZSBwZW5kaW5nIGNoZWNrIG1heSBlbmQgdXAgYmVpbmcgcnVuCisJICogb24gdGhlIHdyb25nIENQVSwgYnV0IHRoYXQgZG9lc24ndCBodXJ0LgorCSAqLworCisJLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCisJY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKSArIFhFTl92Y3B1X2luZm9fcGVuZGluZworCWp6IDFmCisyOgljYWxsIGNoZWNrX2V2ZW50cworMToKK0VORFBBVENIKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwlyZXQKKwlFTkRQUk9DKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKKwlSRUxPQyh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QsIDJiKzEpCisKKworLyoKKyAqIEZvcmNlIGFuIGV2ZW50IGNoZWNrIGJ5IG1ha2luZyBhIGh5cGVyY2FsbCwgYnV0IHByZXNlcnZlIHJlZ3MKKyAqIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuCisgKi8KK2NoZWNrX2V2ZW50czoKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJcHVzaCAlZWF4CisJcHVzaCAlZWN4CisJcHVzaCAlZWR4CisJY2FsbCB4ZW5fZm9yY2VfZXZ0Y2huX2NhbGxiYWNrCisJcG9wICVlZHgKKwlwb3AgJWVjeAorCXBvcCAlZWF4CisjZWxzZQorCXB1c2ggJXJheAorCXB1c2ggJXJjeAorCXB1c2ggJXJkeAorCXB1c2ggJXJzaQorCXB1c2ggJXJkaQorCXB1c2ggJXI4CisJcHVzaCAlcjkKKwlwdXNoICVyMTAKKwlwdXNoICVyMTEKKwljYWxsIHhlbl9mb3JjZV9ldnRjaG5fY2FsbGJhY2sKKwlwb3AgJXIxMQorCXBvcCAlcjEwCisJcG9wICVyOQorCXBvcCAlcjgKKwlwb3AgJXJkaQorCXBvcCAlcnNpCisJcG9wICVyZHgKKwlwb3AgJXJjeAorCXBvcCAlcmF4CisjZW5kaWYKKwlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLmggYi9hcmNoL3g4Ni94ZW4veGVuLWFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTI3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni94ZW4veGVuLWFzbS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX1hFTl9YRU5fQVNNX0gKKyNkZWZpbmUgX1hFTl9YRU5fQVNNX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2RlZmluZSBSRUxPQyh4LCB2KQkuZ2xvYmwgeCMjX3JlbG9jOyB4IyNfcmVsb2M9dgorI2RlZmluZSBFTkRQQVRDSCh4KQkuZ2xvYmwgeCMjX2VuZDsgeCMjX2VuZD0uCisKKy8qIFBzZXVkby1mbGFnIHVzZWQgZm9yIHZpcnR1YWwgTk1JLCB3aGljaCB3ZSBkb24ndCBpbXBsZW1lbnQgeWV0ICovCisjZGVmaW5lIFhFTl9FRkxBR1NfTk1JCTB4ODAwMDAwMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TIGIvYXJjaC94ODYveGVuL3hlbi1hc21fMzIuUwppbmRleCA0Mjc4NmY1Li44OGUxNWRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tYXNtXzMyLlMKQEAgLTEsMjk4ICsxLDI3IEBACiAvKgotCUFzbSB2ZXJzaW9ucyBvZiBYZW4gcHYtb3BzLCBzdWl0YWJsZSBmb3IgZWl0aGVyIGRpcmVjdCB1c2Ugb3IgaW5saW5pbmcuCi0JVGhlIGlubGluZSB2ZXJzaW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdC11c2UgdmVyc2lvbnMsIHdpdGggdGhlCi0JcHJlLSBhbmQgcG9zdC1hbWJsZSBjaG9wcGVkIG9mZi4KLQotCVRoaXMgY29kZSBpcyBlbmNvZGVkIGZvciBzaXplIHJhdGhlciB0aGFuIGFic29sdXRlIGVmZmljaWVuY3ksCi0Jd2l0aCBhIHZpZXcgdG8gYmVpbmcgYWJsZSB0byBpbmxpbmUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLQotCVdlIG9ubHkgYm90aGVyIHdpdGggZGlyZWN0IGZvcm1zIChpZSwgdmNwdSBpbiBwZGEpIG9mIHRoZSBvcGVyYXRpb25zCi0JaGVyZTsgdGhlIGluZGlyZWN0IGZvcm1zIGFyZSBiZXR0ZXIgaGFuZGxlZCBpbiBDLCBzaW5jZSB0aGV5J3JlCi0JZ2VuZXJhbGx5IHRvbyBsYXJnZSB0byBpbmxpbmUgYW55d2F5LgorICogQXNtIHZlcnNpb25zIG9mIFhlbiBwdi1vcHMsIHN1aXRhYmxlIGZvciBlaXRoZXIgZGlyZWN0IHVzZSBvcgorICogaW5saW5pbmcuICBUaGUgaW5saW5lIHZlcnNpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0LXVzZQorICogdmVyc2lvbnMsIHdpdGggdGhlIHByZS0gYW5kIHBvc3QtYW1ibGUgY2hvcHBlZCBvZmYuCisgKgorICogVGhpcyBjb2RlIGlzIGVuY29kZWQgZm9yIHNpemUgcmF0aGVyIHRoYW4gYWJzb2x1dGUgZWZmaWNpZW5jeSwgd2l0aAorICogYSB2aWV3IHRvIGJlaW5nIGFibGUgdG8gaW5saW5lIGFzIG11Y2ggYXMgcG9zc2libGUuCisgKgorICogV2Ugb25seSBib3RoZXIgd2l0aCBkaXJlY3QgZm9ybXMgKGllLCB2Y3B1IGluIHBkYSkgb2YgdGhlCisgKiBvcGVyYXRpb25zIGhlcmU7IHRoZSBpbmRpcmVjdCBmb3JtcyBhcmUgYmV0dGVyIGhhbmRsZWQgaW4gQywgc2luY2UKKyAqIHRoZXkncmUgZ2VuZXJhbGx5IHRvbyBsYXJnZSB0byBpbmxpbmUgYW55d2F5LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogCi0jZGVmaW5lIFJFTE9DKHgsIHYpCS5nbG9ibCB4IyNfcmVsb2M7IHgjI19yZWxvYz12Ci0jZGVmaW5lIEVORFBBVENIKHgpCS5nbG9ibCB4IyNfZW5kOyB4IyNfZW5kPS4KLQotLyogUHNldWRvLWZsYWcgdXNlZCBmb3IgdmlydHVhbCBOTUksIHdoaWNoIHdlIGRvbid0IGltcGxlbWVudCB5ZXQgKi8KLSNkZWZpbmUgWEVOX0VGTEFHU19OTUkJMHg4MDAwMDAwMAorI2luY2x1ZGUgInhlbi1hc20uaCIKIAogLyoKLQlFbmFibGUgZXZlbnRzLiAgVGhpcyBjbGVhcnMgdGhlIGV2ZW50IG1hc2sgYW5kIHRlc3RzIHRoZSBwZW5kaW5nCi0JZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZwotCWV2ZW50cywgdGhlbiBlbnRlciB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBoYW5kbGVkLgotICovCi1FTlRSWSh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JLyogVW5tYXNrIGV2ZW50cyAqLwotCW1vdmIgJDAsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pK1hFTl92Y3B1X2luZm9fbWFzawotCi0JLyogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aAotCSAgIGFueSBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nCi0JICAgcnVuIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4gKi8KLQotCS8qIFRlc3QgZm9yIHBlbmRpbmcgKi8KLQl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykrWEVOX3ZjcHVfaW5mb19wZW5kaW5nCi0JanogMWYKLQotMjoJY2FsbCBjaGVja19ldmVudHMKLTE6Ci1FTkRQQVRDSCh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JUkVMT0MoeGVuX2lycV9lbmFibGVfZGlyZWN0LCAyYisxKQotCi0KLS8qCi0JRGlzYWJsaW5nIGV2ZW50cyBpcyBzaW1wbHkgYSBtYXR0ZXIgb2YgbWFraW5nIHRoZSBldmVudCBtYXNrCi0Jbm9uLXplcm8uCi0gKi8KLUVOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCi0JbW92YiAkMSwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykrWEVOX3ZjcHVfaW5mb19tYXNrCi1FTkRQQVRDSCh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQotCXJldAotCUVORFBST0MoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKLQlSRUxPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0LCAwKQotCi0vKgotCSh4ZW5fKXNhdmVfZmwgaXMgdXNlZCB0byBnZXQgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVuYWJsZSBzdGF0dXMuCi0JQ2FsbGVycyBleHBlY3QgdGhlIHN0YXR1cyB0byBiZSBpbiBYODZfRUZMQUdTX0lGLCBhbmQgb3RoZXIgYml0cwotCW1heSBiZSBzZXQgaW4gdGhlIHJldHVybiB2YWx1ZS4gIFdlIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgYnkKLQltYWtpbmcgc3VyZSB0aGF0IFg4Nl9FRkxBR1NfSUYgaGFzIHRoZSByaWdodCB2YWx1ZSAoYW5kIG90aGVyIGJpdHMKLQlpbiB0aGF0IGJ5dGUgYXJlIDApLCBidXQgb3RoZXIgYml0cyBpbiB0aGUgcmV0dXJuIHZhbHVlIGFyZQotCXVuZGVmaW5lZC4gIFdlIG5lZWQgdG8gdG9nZ2xlIHRoZSBzdGF0ZSBvZiB0aGUgYml0LCBiZWNhdXNlCi0JWGVuIGFuZCB4ODYgdXNlIG9wcG9zaXRlIHNlbnNlcyAobWFzayB2cyBlbmFibGUpLgotICovCi1FTlRSWSh4ZW5fc2F2ZV9mbF9kaXJlY3QpCi0JdGVzdGIgJDB4ZmYsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pK1hFTl92Y3B1X2luZm9fbWFzawotCXNldHogJWFoCi0JYWRkYiAlYWgsJWFoCi1FTkRQQVRDSCh4ZW5fc2F2ZV9mbF9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5fc2F2ZV9mbF9kaXJlY3QpCi0JUkVMT0MoeGVuX3NhdmVfZmxfZGlyZWN0LCAwKQotCi0KLS8qCi0JSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4KLQlmcm9tIHhlbl9zYXZlX2ZsX2RpcmVjdCwgYnV0IGZvciByb2J1c3RuZXNzIHNha2Ugd2UgdGVzdCBvbmx5Ci0JdGhlIFg4Nl9FRkxBR1NfSUYgZmxhZyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgYnl0ZS4gQWZ0ZXIKLQlzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZAotCXBlbmRpbmcgZXZlbnRzIGFuZCBlbnRlcnMgdGhlIGh5cGVydmlzb3IgdG8gZ2V0IHRoZW0gZGVsaXZlcmVkCi0JaWYgc28uCi0gKi8KLUVOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKLQl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwgJWFoCi0Jc2V0eiBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKStYRU5fdmNwdV9pbmZvX21hc2sKLQkvKiBQcmVlbXB0IGhlcmUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGF0IHdpbGwgZGVhbCB3aXRoCi0JICAgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gIFRoZSBwZW5kaW5nIGNoZWNrIG1heSBlbmQgdXAgYmVpbmcKLQkgICBydW4gb24gdGhlIHdyb25nIENQVSwgYnV0IHRoYXQgZG9lc24ndCBodXJ0LiAqLwotCi0JLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCi0JY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKStYRU5fdmNwdV9pbmZvX3BlbmRpbmcKLQlqeiAxZgotMjoJY2FsbCBjaGVja19ldmVudHMKLTE6Ci1FTkRQQVRDSCh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5fcmVzdG9yZV9mbF9kaXJlY3QpCi0JUkVMT0MoeGVuX3Jlc3RvcmVfZmxfZGlyZWN0LCAyYisxKQotCi0vKgotCVdlIGNhbid0IHVzZSBzeXNleGl0IGRpcmVjdGx5LCBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluIHJpbmcwLgotCUJ1dCB3ZSBjYW4gZWFzaWx5IGZha2UgaXQgdXAgdXNpbmcgaXJldC4gIEFzc3VtaW5nIHhlbl9zeXNleGl0Ci0JaXMganVtcGVkIHRvIHdpdGggYSBzdGFuZGFyZCBzdGFjayBmcmFtZSwgd2UgY2FuIGp1c3Qgc3RyaXAgaXQKLQliYWNrIHRvIGEgc3RhbmRhcmQgaXJldCBmcmFtZSBhbmQgdXNlIGlyZXQuCi0gKi8KLUVOVFJZKHhlbl9zeXNleGl0KQotCW1vdmwgUFRfRUFYKCVlc3ApLCAlZWF4CQkJLyogU2hvdWxkbid0IGJlIG5lY2Vzc2FyeT8gKi8KLQlvcmwgJFg4Nl9FRkxBR1NfSUYsIFBUX0VGTEFHUyglZXNwKQotCWxlYSBQVF9FSVAoJWVzcCksICVlc3AKLQotCWptcCB4ZW5faXJldAotRU5EUFJPQyh4ZW5fc3lzZXhpdCkKLQotLyoKLQlUaGlzIGlzIHJ1biB3aGVyZSBhIG5vcm1hbCBpcmV0IHdvdWxkIGJlIHJ1biwgd2l0aCB0aGUgc2FtZSBzdGFjayBzZXR1cDoKLQkgICAgICA4OiBlZmxhZ3MKLQkgICAgICA0OiBjcwotCWVzcC0+IDA6IGVpcAotCi0JVGhpcyBhdHRlbXB0cyB0byBtYWtlIHN1cmUgdGhhdCBhbnkgcGVuZGluZyBldmVudHMgYXJlIGRlYWx0Ci0Jd2l0aCBvbiByZXR1cm4gdG8gdXNlcm1vZGUsIGJ1dCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbgotCXdoaWNoIGFuIGV2ZW50IGNhbiBoYXBwZW4ganVzdCBiZWZvcmUgZW50ZXJpbmcgdXNlcm1vZGUuICBJZgotCXRoZSBuZXN0ZWQgaW50ZXJydXB0IGVuZHMgdXAgc2V0dGluZyBvbmUgb2YgdGhlIFRJRl9XT1JLX01BU0sKLQlwZW5kaW5nIHdvcmsgZmxhZ3MsIHRoZXkgd2lsbCBub3QgYmUgdGVzdGVkIGFnYWluIGJlZm9yZQotCXJldHVybmluZyB0byB1c2VybW9kZS4gVGhpcyBtZWFucyB0aGF0IGEgcHJvY2VzcyBjYW4gZW5kIHVwCi0Jd2l0aCBwZW5kaW5nIHdvcmssIHdoaWNoIHdpbGwgYmUgdW5wcm9jZXNzZWQgdW50aWwgdGhlIHByb2Nlc3MKLQllbnRlcnMgYW5kIGxlYXZlcyB0aGUga2VybmVsIGFnYWluLCB3aGljaCBjb3VsZCBiZSBhbgotCXVuYm91bmRlZCBhbW91bnQgb2YgdGltZS4gIFRoaXMgbWVhbnMgdGhhdCBhIHBlbmRpbmcgc2lnbmFsIG9yCi0JcmVzY2hlZHVsZSBldmVudCBjb3VsZCBiZSBpbmRlZmluaXRlbHkgZGVsYXllZC4KLQotCVRoZSBmaXggaXMgdG8gbm90aWNlIGEgbmVzdGVkIGludGVycnVwdCBpbiB0aGUgY3JpdGljYWwKLQl3aW5kb3csIGFuZCBpZiBvbmUgb2NjdXJzLCB0aGVuIGZvbGQgdGhlIG5lc3RlZCBpbnRlcnJ1cHQgaW50bwotCXRoZSBjdXJyZW50IGludGVycnVwdCBzdGFjayBmcmFtZSwgYW5kIHJlLXByb2Nlc3MgaXQKLQlpdGVyYXRpdmVseSByYXRoZXIgdGhhbiByZWN1cnNpdmVseS4gIFRoaXMgbWVhbnMgdGhhdCBpdCB3aWxsCi0JZXhpdCB2aWEgdGhlIG5vcm1hbCBwYXRoLCBhbmQgYWxsIHBlbmRpbmcgd29yayB3aWxsIGJlIGRlYWx0Ci0Jd2l0aCBhcHByb3ByaWF0ZWx5LgotCi0JQmVjYXVzZSB0aGUgbmVzdGVkIGludGVycnVwdCBoYW5kbGVyIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUKLQljdXJyZW50IHN0YWNrIHN0YXRlIGluIHdoYXRldmVyIGZvcm0gaXRzIGluLCB3ZSBrZWVwIHRoaW5ncwotCXNpbXBsZSBieSBvbmx5IHVzaW5nIGEgc2luZ2xlIHJlZ2lzdGVyIHdoaWNoIGlzIHB1c2hlZC9wb3BwZWQKLQlvbiB0aGUgc3RhY2suCi0gKi8KLUVOVFJZKHhlbl9pcmV0KQotCS8qIHRlc3QgZWZsYWdzIGZvciBzcGVjaWFsIGNhc2VzICovCi0JdGVzdGwgJChYODZfRUZMQUdTX1ZNIHwgWEVOX0VGTEFHU19OTUkpLCA4KCVlc3ApCi0Jam56IGh5cGVyX2lyZXQKLQotCXB1c2ggJWVheAotCUVTUF9PRkZTRVQ9NAkjIGJ5dGVzIHB1c2hlZCBvbnRvIHN0YWNrCi0KLQkvKiBTdG9yZSB2Y3B1X2luZm8gcG9pbnRlciBmb3IgZWFzeSBhY2Nlc3MuICBEbyBpdCB0aGlzCi0JICAgd2F5IHRvIGF2b2lkIGhhdmluZyB0byByZWxvYWQgJWZzICovCi0jaWZkZWYgQ09ORklHX1NNUAotCUdFVF9USFJFQURfSU5GTyglZWF4KQotCW1vdmwgVElfY3B1KCVlYXgpLCVlYXgKLQltb3ZsIF9fcGVyX2NwdV9vZmZzZXQoLCVlYXgsNCksJWVheAotCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwlZWF4Ci0jZWxzZQotCW1vdmwgcGVyX2NwdV9feGVuX3ZjcHUsICVlYXgKLSNlbmRpZgotCi0JLyogY2hlY2sgSUYgc3RhdGUgd2UncmUgcmVzdG9yaW5nICovCi0JdGVzdGIgJFg4Nl9FRkxBR1NfSUY+PjgsIDgrMStFU1BfT0ZGU0VUKCVlc3ApCi0KLQkvKiBNYXliZSBlbmFibGUgZXZlbnRzLiAgT25jZSB0aGlzIGhhcHBlbnMgd2UgY291bGQgZ2V0IGEKLQkgICByZWN1cnNpdmUgZXZlbnQsIHNvIHRoZSBjcml0aWNhbCByZWdpb24gc3RhcnRzIGltbWVkaWF0ZWx5Ci0JICAgYWZ0ZXJ3YXJkcy4gIEhvd2V2ZXIsIGlmIHRoYXQgaGFwcGVucyB3ZSBkb24ndCBlbmQgdXAKLQkgICByZXN1bWluZyB0aGUgY29kZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBiZSB3b3JyaWVkIGFib3V0Ci0JICAgYmVpbmcgcHJlZW1wdGVkIHRvIGFub3RoZXIgQ1BVLiAqLwotCXNldHogWEVOX3ZjcHVfaW5mb19tYXNrKCVlYXgpCi14ZW5faXJldF9zdGFydF9jcml0OgotCi0JLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCi0JY21wdyAkMHgwMDAxLCBYRU5fdmNwdV9pbmZvX3BlbmRpbmcoJWVheCkKLQotCS8qIElmIHRoZXJlJ3Mgc29tZXRoaW5nIHBlbmRpbmcsIG1hc2sgZXZlbnRzIGFnYWluIHNvIHdlCi0JICAgY2FuIGp1bXAgYmFjayBpbnRvIHhlbl9oeXBlcnZpc29yX2NhbGxiYWNrICovCi0Jc2V0ZSBYRU5fdmNwdV9pbmZvX21hc2soJWVheCkKLQotCXBvcGwgJWVheAotCi0JLyogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSByZWdpc3RlcnMgYXJlIHJlc3RvcmVkIGFuZCB0aGUgc3RhY2sKLQkgICB1cGRhdGVkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGlmIHdlJ3JlIHByZWVtcHRlZCAqLwotaXJldF9yZXN0b3JlX2VuZDoKLQotCS8qIEp1bXAgdG8gaHlwZXJ2aXNvcl9jYWxsYmFjayBhZnRlciBmaXhpbmcgdXAgdGhlIHN0YWNrLgotCSAgIEV2ZW50cyBhcmUgbWFza2VkLCBzbyBqdW1waW5nIG91dCBvZiB0aGUgY3JpdGljYWwKLQkgICByZWdpb24gaXMgT0suICovCi0JamUgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2sKLQotMToJaXJldAoteGVuX2lyZXRfZW5kX2NyaXQ6Ci0uc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5hbGlnbiA0Ci0JLmxvbmcgMWIsaXJldF9leGMKLS5wcmV2aW91cwotCi1oeXBlcl9pcmV0OgotCS8qIHB1dCB0aGlzIG91dCBvZiBsaW5lIHNpbmNlIGl0cyB2ZXJ5IHJhcmVseSB1c2VkICovCi0Jam1wIGh5cGVyY2FsbF9wYWdlICsgX19IWVBFUlZJU09SX2lyZXQgKiAzMgotCi0JLmdsb2JsIHhlbl9pcmV0X3N0YXJ0X2NyaXQsIHhlbl9pcmV0X2VuZF9jcml0Ci0KLS8qCi0gICBUaGlzIGlzIGNhbGxlZCBieSB4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjayBpbiBlbnRyeS5TIHdoZW4gaXQgc2VlcwotICAgdGhhdCB0aGUgRUlQIGF0IHRoZSB0aW1lIG9mIGludGVycnVwdCB3YXMgYmV0d2VlbiB4ZW5faXJldF9zdGFydF9jcml0Ci0gICBhbmQgeGVuX2lyZXRfZW5kX2NyaXQuICBXZSdyZSBwYXNzZWQgdGhlIEVJUCBpbiAlZWF4IHNvIHdlIGNhbiBkbwotICAgYSBtb3JlIHJlZmluZWQgZGV0ZXJtaW5hdGlvbiBvZiB3aGF0IHRvIGRvLgotCi0gICBUaGUgc3RhY2sgZm9ybWF0IGF0IHRoaXMgcG9pbnQgaXM6Ci0JLS0tLS0tLS0tLS0tLS0tLQotCSBzcwkJOiAoc3MvZXNwIG1heSBiZSBwcmVzZW50IGlmIHdlIGNhbWUgZnJvbSB1c2VybW9kZSkKLQkgZXNwCQk6Ci0JIGVmbGFncwkJfSAgb3V0ZXIgZXhjZXB0aW9uIGluZm8KLQkgY3MJCX0KLQkgZWlwCQl9Ci0JLS0tLS0tLS0tLS0tLS0tLSA8LSBlZGkgKGNvcHkgZGVzdCkKLQkgZWF4CQk6ICBvdXRlciBlYXggaWYgaXQgaGFzbid0IGJlZW4gcmVzdG9yZWQKLQktLS0tLS0tLS0tLS0tLS0tCi0JIGVmbGFncwkJfSAgbmVzdGVkIGV4Y2VwdGlvbiBpbmZvCi0JIGNzCQl9ICAgKG5vIHNzL2VzcCBiZWNhdXNlIHdlJ3JlIG5lc3RlZAotCSBlaXAJCX0gICAgZnJvbSB0aGUgc2FtZSByaW5nKQotCSBvcmlnX2VheAl9PC0gZXNpIChjb3B5IHNyYykKLQkgLSAtIC0gLSAtIC0gLSAtCi0JIGZzCQl9Ci0JIGVzCQl9Ci0JIGRzCQl9ICBTQVZFX0FMTCBzdGF0ZQotCSBlYXgJCX0KLQkgIDoJCToKLQkgZWJ4CQl9PC0gZXNwCi0JLS0tLS0tLS0tLS0tLS0tLQotCi0gICBJbiBvcmRlciB0byBkZWxpdmVyIHRoZSBuZXN0ZWQgZXhjZXB0aW9uIHByb3Blcmx5LCB3ZSBuZWVkIHRvIHNoaWZ0Ci0gICBldmVyeXRoaW5nIGZyb20gdGhlIHJldHVybiBhZGRyIHVwIHRvIHRoZSBlcnJvciBjb2RlIHNvIGl0Ci0gICBzaXRzIGp1c3QgdW5kZXIgdGhlIG91dGVyIGV4Y2VwdGlvbiBpbmZvLiAgVGhpcyBtZWFucyB0aGF0IHdoZW4gd2UKLSAgIGhhbmRsZSB0aGUgZXhjZXB0aW9uLCB3ZSBkbyBpdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgb3V0ZXIgZXhjZXB0aW9uCi0gICByYXRoZXIgdGhhbiBzdGFydGluZyBhIG5ldyBvbmUuCi0KLSAgIFRoZSBvbmx5IGNhdmVhdCBpcyB0aGF0IGlmIHRoZSBvdXRlciBlYXggaGFzbid0IGJlZW4KLSAgIHJlc3RvcmVkIHlldCAoaWUsIGl0J3Mgc3RpbGwgb24gc3RhY2spLCB3ZSBuZWVkIHRvIGluc2VydAotICAgaXRzIHZhbHVlIGludG8gdGhlIFNBVkVfQUxMIHN0YXRlIGJlZm9yZSBnb2luZyBvbiwgc2luY2UKLSAgIGl0J3MgdXNlcm1vZGUgc3RhdGUgd2hpY2ggd2UgZXZlbnR1YWxseSBuZWVkIHRvIHJlc3RvcmUuCi0gKi8KLUVOVFJZKHhlbl9pcmV0X2NyaXRfZml4dXApCi0JLyoKLQkgICBQYXJhbm9pYTogTWFrZSBzdXJlIHdlJ3JlIHJlYWxseSBjb21pbmcgZnJvbSBrZXJuZWwgc3BhY2UuCi0JICAgT25lIGNvdWxkIGltYWdpbmUgYSBjYXNlIHdoZXJlIHVzZXJzcGFjZSBqdW1wcyBpbnRvIHRoZQotCSAgIGNyaXRpY2FsIHJhbmdlIGFkZHJlc3MsIGJ1dCBqdXN0IGJlZm9yZSB0aGUgQ1BVIGRlbGl2ZXJzIGEgR1AsCi0JICAgaXQgZGVjaWRlcyB0byBkZWxpdmVyIGFuIGludGVycnVwdCBpbnN0ZWFkLiAgVW5saWtlbHk/Ci0JICAgRGVmaW5pdGVseS4gIEVhc3kgdG8gYXZvaWQ/ICBZZXMuICBUaGUgSW50ZWwgZG9jdW1lbnRzCi0JICAgZXhwbGljaXRseSBzYXkgdGhhdCB0aGUgcmVwb3J0ZWQgRUlQIGZvciBhIGJhZCBqdW1wIGlzIHRoZQotCSAgIGp1bXAgaW5zdHJ1Y3Rpb24gaXRzZWxmLCBub3QgdGhlIGRlc3RpbmF0aW9uLCBidXQgc29tZSB2aXJ0dWFsCi0JICAgZW52aXJvbm1lbnRzIGdldCB0aGlzIHdyb25nLgotCSAqLwotCW1vdmwgUFRfQ1MoJWVzcCksICVlY3gKLQlhbmRsICRTRUdNRU5UX1JQTF9NQVNLLCAlZWN4Ci0JY21wbCAkVVNFUl9SUEwsICVlY3gKLQlqZSAyZgotCi0JbGVhIFBUX09SSUdfRUFYKCVlc3ApLCAlZXNpCi0JbGVhIFBUX0VGTEFHUyglZXNwKSwgJWVkaQotCi0JLyogSWYgZWlwIGlzIGJlZm9yZSBpcmV0X3Jlc3RvcmVfZW5kIHRoZW4gc3RhY2sKLQkgICBoYXNuJ3QgYmVlbiByZXN0b3JlZCB5ZXQuICovCi0JY21wICRpcmV0X3Jlc3RvcmVfZW5kLCAlZWF4Ci0JamFlIDFmCi0KLQltb3ZsIDArNCglZWRpKSwlZWF4CQkvKiBjb3B5IEVBWCAoanVzdCBhYm92ZSB0b3Agb2YgZnJhbWUpICovCi0JbW92bCAlZWF4LCBQVF9FQVgoJWVzcCkKLQotCWxlYSBFU1BfT0ZGU0VUKCVlZGkpLCVlZGkJLyogbW92ZSBkZXN0IHVwIG92ZXIgc2F2ZWQgcmVncyAqLwotCi0JLyogc2V0IHVwIHRoZSBjb3B5ICovCi0xOglzdGQKLQltb3YgJFBUX0VJUCAvIDQsICVlY3gJCS8qIHNhdmVkIHJlZ3MgdXAgdG8gb3JpZ19lYXggKi8KLQlyZXAgbW92c2wKLQljbGQKLQotCWxlYSA0KCVlZGkpLCVlc3AJCS8qIHBvaW50IGVzcCB0byBuZXcgZnJhbWUgKi8KLTI6CWptcCB4ZW5fZG9fdXBjYWxsCi0KLQotLyoKLQlGb3JjZSBhbiBldmVudCBjaGVjayBieSBtYWtpbmcgYSBoeXBlcmNhbGwsCi0JYnV0IHByZXNlcnZlIHJlZ3MgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4KKyAqIEZvcmNlIGFuIGV2ZW50IGNoZWNrIGJ5IG1ha2luZyBhIGh5cGVyY2FsbCwgYnV0IHByZXNlcnZlIHJlZ3MKKyAqIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuCiAgKi8KIGNoZWNrX2V2ZW50czoKIAlwdXNoICVlYXgKQEAgLTMwMywzICszMiwxOTcgQEAKIAlwb3AgJWVjeAogCXBvcCAlZWF4CiAJcmV0CisKKy8qCisgKiBXZSBjYW4ndCB1c2Ugc3lzZXhpdCBkaXJlY3RseSwgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbiByaW5nMC4KKyAqIEJ1dCB3ZSBjYW4gZWFzaWx5IGZha2UgaXQgdXAgdXNpbmcgaXJldC4gIEFzc3VtaW5nIHhlbl9zeXNleGl0IGlzCisgKiBqdW1wZWQgdG8gd2l0aCBhIHN0YW5kYXJkIHN0YWNrIGZyYW1lLCB3ZSBjYW4ganVzdCBzdHJpcCBpdCBiYWNrIHRvCisgKiBhIHN0YW5kYXJkIGlyZXQgZnJhbWUgYW5kIHVzZSBpcmV0LgorICovCitFTlRSWSh4ZW5fc3lzZXhpdCkKKwltb3ZsIFBUX0VBWCglZXNwKSwgJWVheAkJCS8qIFNob3VsZG4ndCBiZSBuZWNlc3Nhcnk/ICovCisJb3JsICRYODZfRUZMQUdTX0lGLCBQVF9FRkxBR1MoJWVzcCkKKwlsZWEgUFRfRUlQKCVlc3ApLCAlZXNwCisKKwlqbXAgeGVuX2lyZXQKK0VORFBST0MoeGVuX3N5c2V4aXQpCisKKy8qCisgKiBUaGlzIGlzIHJ1biB3aGVyZSBhIG5vcm1hbCBpcmV0IHdvdWxkIGJlIHJ1biwgd2l0aCB0aGUgc2FtZSBzdGFjayBzZXR1cDoKKyAqCTg6IGVmbGFncworICoJNDogY3MKKyAqCWVzcC0+IDA6IGVpcAorICoKKyAqIFRoaXMgYXR0ZW1wdHMgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHBlbmRpbmcgZXZlbnRzIGFyZSBkZWFsdCB3aXRoCisgKiBvbiByZXR1cm4gdG8gdXNlcm1vZGUsIGJ1dCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCBhbgorICogZXZlbnQgY2FuIGhhcHBlbiBqdXN0IGJlZm9yZSBlbnRlcmluZyB1c2VybW9kZS4gIElmIHRoZSBuZXN0ZWQKKyAqIGludGVycnVwdCBlbmRzIHVwIHNldHRpbmcgb25lIG9mIHRoZSBUSUZfV09SS19NQVNLIHBlbmRpbmcgd29yaworICogZmxhZ3MsIHRoZXkgd2lsbCBub3QgYmUgdGVzdGVkIGFnYWluIGJlZm9yZSByZXR1cm5pbmcgdG8KKyAqIHVzZXJtb2RlLiBUaGlzIG1lYW5zIHRoYXQgYSBwcm9jZXNzIGNhbiBlbmQgdXAgd2l0aCBwZW5kaW5nIHdvcmssCisgKiB3aGljaCB3aWxsIGJlIHVucHJvY2Vzc2VkIHVudGlsIHRoZSBwcm9jZXNzIGVudGVycyBhbmQgbGVhdmVzIHRoZQorICoga2VybmVsIGFnYWluLCB3aGljaCBjb3VsZCBiZSBhbiB1bmJvdW5kZWQgYW1vdW50IG9mIHRpbWUuICBUaGlzCisgKiBtZWFucyB0aGF0IGEgcGVuZGluZyBzaWduYWwgb3IgcmVzY2hlZHVsZSBldmVudCBjb3VsZCBiZQorICogaW5kZWZpbml0ZWx5IGRlbGF5ZWQuCisgKgorICogVGhlIGZpeCBpcyB0byBub3RpY2UgYSBuZXN0ZWQgaW50ZXJydXB0IGluIHRoZSBjcml0aWNhbCB3aW5kb3csIGFuZAorICogaWYgb25lIG9jY3VycywgdGhlbiBmb2xkIHRoZSBuZXN0ZWQgaW50ZXJydXB0IGludG8gdGhlIGN1cnJlbnQKKyAqIGludGVycnVwdCBzdGFjayBmcmFtZSwgYW5kIHJlLXByb2Nlc3MgaXQgaXRlcmF0aXZlbHkgcmF0aGVyIHRoYW4KKyAqIHJlY3Vyc2l2ZWx5LiAgVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwgZXhpdCB2aWEgdGhlIG5vcm1hbCBwYXRoLCBhbmQKKyAqIGFsbCBwZW5kaW5nIHdvcmsgd2lsbCBiZSBkZWFsdCB3aXRoIGFwcHJvcHJpYXRlbHkuCisgKgorICogQmVjYXVzZSB0aGUgbmVzdGVkIGludGVycnVwdCBoYW5kbGVyIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgY3VycmVudAorICogc3RhY2sgc3RhdGUgaW4gd2hhdGV2ZXIgZm9ybSBpdHMgaW4sIHdlIGtlZXAgdGhpbmdzIHNpbXBsZSBieSBvbmx5CisgKiB1c2luZyBhIHNpbmdsZSByZWdpc3RlciB3aGljaCBpcyBwdXNoZWQvcG9wcGVkIG9uIHRoZSBzdGFjay4KKyAqLworRU5UUlkoeGVuX2lyZXQpCisJLyogdGVzdCBlZmxhZ3MgZm9yIHNwZWNpYWwgY2FzZXMgKi8KKwl0ZXN0bCAkKFg4Nl9FRkxBR1NfVk0gfCBYRU5fRUZMQUdTX05NSSksIDgoJWVzcCkKKwlqbnogaHlwZXJfaXJldAorCisJcHVzaCAlZWF4CisJRVNQX09GRlNFVD00CSMgYnl0ZXMgcHVzaGVkIG9udG8gc3RhY2sKKworCS8qCisJICogU3RvcmUgdmNwdV9pbmZvIHBvaW50ZXIgZm9yIGVhc3kgYWNjZXNzLiAgRG8gaXQgdGhpcyB3YXkgdG8KKwkgKiBhdm9pZCBoYXZpbmcgdG8gcmVsb2FkICVmcworCSAqLworI2lmZGVmIENPTkZJR19TTVAKKwlHRVRfVEhSRUFEX0lORk8oJWVheCkKKwltb3ZsIFRJX2NwdSglZWF4KSwgJWVheAorCW1vdmwgX19wZXJfY3B1X29mZnNldCgsJWVheCw0KSwgJWVheAorCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwgJWVheAorI2Vsc2UKKwltb3ZsIHBlcl9jcHVfX3hlbl92Y3B1LCAlZWF4CisjZW5kaWYKKworCS8qIGNoZWNrIElGIHN0YXRlIHdlJ3JlIHJlc3RvcmluZyAqLworCXRlc3RiICRYODZfRUZMQUdTX0lGPj44LCA4KzErRVNQX09GRlNFVCglZXNwKQorCisJLyoKKwkgKiBNYXliZSBlbmFibGUgZXZlbnRzLiAgT25jZSB0aGlzIGhhcHBlbnMgd2UgY291bGQgZ2V0IGEKKwkgKiByZWN1cnNpdmUgZXZlbnQsIHNvIHRoZSBjcml0aWNhbCByZWdpb24gc3RhcnRzIGltbWVkaWF0ZWx5CisJICogYWZ0ZXJ3YXJkcy4gIEhvd2V2ZXIsIGlmIHRoYXQgaGFwcGVucyB3ZSBkb24ndCBlbmQgdXAKKwkgKiByZXN1bWluZyB0aGUgY29kZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBiZSB3b3JyaWVkIGFib3V0CisJICogYmVpbmcgcHJlZW1wdGVkIHRvIGFub3RoZXIgQ1BVLgorCSAqLworCXNldHogWEVOX3ZjcHVfaW5mb19tYXNrKCVlYXgpCit4ZW5faXJldF9zdGFydF9jcml0OgorCisJLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCisJY21wdyAkMHgwMDAxLCBYRU5fdmNwdV9pbmZvX3BlbmRpbmcoJWVheCkKKworCS8qCisJICogSWYgdGhlcmUncyBzb21ldGhpbmcgcGVuZGluZywgbWFzayBldmVudHMgYWdhaW4gc28gd2UgY2FuCisJICoganVtcCBiYWNrIGludG8geGVuX2h5cGVydmlzb3JfY2FsbGJhY2sKKwkgKi8KKwlzZXRlIFhFTl92Y3B1X2luZm9fbWFzayglZWF4KQorCisJcG9wbCAlZWF4CisKKwkvKgorCSAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVnaXN0ZXJzIGFyZSByZXN0b3JlZCBhbmQgdGhlIHN0YWNrCisJICogdXBkYXRlZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBpZiB3ZSdyZQorCSAqIHByZWVtcHRlZAorCSAqLworaXJldF9yZXN0b3JlX2VuZDoKKworCS8qCisJICogSnVtcCB0byBoeXBlcnZpc29yX2NhbGxiYWNrIGFmdGVyIGZpeGluZyB1cCB0aGUgc3RhY2suCisJICogRXZlbnRzIGFyZSBtYXNrZWQsIHNvIGp1bXBpbmcgb3V0IG9mIHRoZSBjcml0aWNhbCByZWdpb24gaXMKKwkgKiBPSy4KKwkgKi8KKwlqZSB4ZW5faHlwZXJ2aXNvcl9jYWxsYmFjaworCisxOglpcmV0Cit4ZW5faXJldF9lbmRfY3JpdDoKKy5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgorCS5hbGlnbiA0CisJLmxvbmcgMWIsIGlyZXRfZXhjCisucHJldmlvdXMKKworaHlwZXJfaXJldDoKKwkvKiBwdXQgdGhpcyBvdXQgb2YgbGluZSBzaW5jZSBpdHMgdmVyeSByYXJlbHkgdXNlZCAqLworCWptcCBoeXBlcmNhbGxfcGFnZSArIF9fSFlQRVJWSVNPUl9pcmV0ICogMzIKKworCS5nbG9ibCB4ZW5faXJldF9zdGFydF9jcml0LCB4ZW5faXJldF9lbmRfY3JpdAorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2sgaW4gZW50cnkuUyB3aGVuIGl0IHNlZXMKKyAqIHRoYXQgdGhlIEVJUCBhdCB0aGUgdGltZSBvZiBpbnRlcnJ1cHQgd2FzIGJldHdlZW4KKyAqIHhlbl9pcmV0X3N0YXJ0X2NyaXQgYW5kIHhlbl9pcmV0X2VuZF9jcml0LiAgV2UncmUgcGFzc2VkIHRoZSBFSVAgaW4KKyAqICVlYXggc28gd2UgY2FuIGRvIGEgbW9yZSByZWZpbmVkIGRldGVybWluYXRpb24gb2Ygd2hhdCB0byBkby4KKyAqCisgKiBUaGUgc3RhY2sgZm9ybWF0IGF0IHRoaXMgcG9pbnQgaXM6CisgKgktLS0tLS0tLS0tLS0tLS0tCisgKgkgc3MJCTogKHNzL2VzcCBtYXkgYmUgcHJlc2VudCBpZiB3ZSBjYW1lIGZyb20gdXNlcm1vZGUpCisgKgkgZXNwCQk6CisgKgkgZWZsYWdzCQl9ICBvdXRlciBleGNlcHRpb24gaW5mbworICoJIGNzCQl9CisgKgkgZWlwCQl9CisgKgktLS0tLS0tLS0tLS0tLS0tIDwtIGVkaSAoY29weSBkZXN0KQorICoJIGVheAkJOiAgb3V0ZXIgZWF4IGlmIGl0IGhhc24ndCBiZWVuIHJlc3RvcmVkCisgKgktLS0tLS0tLS0tLS0tLS0tCisgKgkgZWZsYWdzCQl9ICBuZXN0ZWQgZXhjZXB0aW9uIGluZm8KKyAqCSBjcwkJfSAgIChubyBzcy9lc3AgYmVjYXVzZSB3ZSdyZSBuZXN0ZWQKKyAqCSBlaXAJCX0gICAgZnJvbSB0aGUgc2FtZSByaW5nKQorICoJIG9yaWdfZWF4CX08LSBlc2kgKGNvcHkgc3JjKQorICoJIC0gLSAtIC0gLSAtIC0gLQorICoJIGZzCQl9CisgKgkgZXMJCX0KKyAqCSBkcwkJfSAgU0FWRV9BTEwgc3RhdGUKKyAqCSBlYXgJCX0KKyAqCSAgOgkJOgorICoJIGVieAkJfTwtIGVzcAorICoJLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEluIG9yZGVyIHRvIGRlbGl2ZXIgdGhlIG5lc3RlZCBleGNlcHRpb24gcHJvcGVybHksIHdlIG5lZWQgdG8gc2hpZnQKKyAqIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmV0dXJuIGFkZHIgdXAgdG8gdGhlIGVycm9yIGNvZGUgc28gaXQgc2l0cworICoganVzdCB1bmRlciB0aGUgb3V0ZXIgZXhjZXB0aW9uIGluZm8uICBUaGlzIG1lYW5zIHRoYXQgd2hlbiB3ZQorICogaGFuZGxlIHRoZSBleGNlcHRpb24sIHdlIGRvIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBvdXRlcgorICogZXhjZXB0aW9uIHJhdGhlciB0aGFuIHN0YXJ0aW5nIGEgbmV3IG9uZS4KKyAqCisgKiBUaGUgb25seSBjYXZlYXQgaXMgdGhhdCBpZiB0aGUgb3V0ZXIgZWF4IGhhc24ndCBiZWVuIHJlc3RvcmVkIHlldAorICogKGllLCBpdCdzIHN0aWxsIG9uIHN0YWNrKSwgd2UgbmVlZCB0byBpbnNlcnQgaXRzIHZhbHVlIGludG8gdGhlCisgKiBTQVZFX0FMTCBzdGF0ZSBiZWZvcmUgZ29pbmcgb24sIHNpbmNlIGl0J3MgdXNlcm1vZGUgc3RhdGUgd2hpY2ggd2UKKyAqIGV2ZW50dWFsbHkgbmVlZCB0byByZXN0b3JlLgorICovCitFTlRSWSh4ZW5faXJldF9jcml0X2ZpeHVwKQorCS8qCisJICogUGFyYW5vaWE6IE1ha2Ugc3VyZSB3ZSdyZSByZWFsbHkgY29taW5nIGZyb20ga2VybmVsIHNwYWNlLgorCSAqIE9uZSBjb3VsZCBpbWFnaW5lIGEgY2FzZSB3aGVyZSB1c2Vyc3BhY2UganVtcHMgaW50byB0aGUKKwkgKiBjcml0aWNhbCByYW5nZSBhZGRyZXNzLCBidXQganVzdCBiZWZvcmUgdGhlIENQVSBkZWxpdmVycyBhCisJICogR1AsIGl0IGRlY2lkZXMgdG8gZGVsaXZlciBhbiBpbnRlcnJ1cHQgaW5zdGVhZC4gIFVubGlrZWx5PworCSAqIERlZmluaXRlbHkuICBFYXN5IHRvIGF2b2lkPyAgWWVzLiAgVGhlIEludGVsIGRvY3VtZW50cworCSAqIGV4cGxpY2l0bHkgc2F5IHRoYXQgdGhlIHJlcG9ydGVkIEVJUCBmb3IgYSBiYWQganVtcCBpcyB0aGUKKwkgKiBqdW1wIGluc3RydWN0aW9uIGl0c2VsZiwgbm90IHRoZSBkZXN0aW5hdGlvbiwgYnV0IHNvbWUKKwkgKiB2aXJ0dWFsIGVudmlyb25tZW50cyBnZXQgdGhpcyB3cm9uZy4KKwkgKi8KKwltb3ZsIFBUX0NTKCVlc3ApLCAlZWN4CisJYW5kbCAkU0VHTUVOVF9SUExfTUFTSywgJWVjeAorCWNtcGwgJFVTRVJfUlBMLCAlZWN4CisJamUgMmYKKworCWxlYSBQVF9PUklHX0VBWCglZXNwKSwgJWVzaQorCWxlYSBQVF9FRkxBR1MoJWVzcCksICVlZGkKKworCS8qCisJICogSWYgZWlwIGlzIGJlZm9yZSBpcmV0X3Jlc3RvcmVfZW5kIHRoZW4gc3RhY2sKKwkgKiBoYXNuJ3QgYmVlbiByZXN0b3JlZCB5ZXQuCisJICovCisJY21wICRpcmV0X3Jlc3RvcmVfZW5kLCAlZWF4CisJamFlIDFmCisKKwltb3ZsIDArNCglZWRpKSwgJWVheAkJLyogY29weSBFQVggKGp1c3QgYWJvdmUgdG9wIG9mIGZyYW1lKSAqLworCW1vdmwgJWVheCwgUFRfRUFYKCVlc3ApCisKKwlsZWEgRVNQX09GRlNFVCglZWRpKSwgJWVkaQkvKiBtb3ZlIGRlc3QgdXAgb3ZlciBzYXZlZCByZWdzICovCisKKwkvKiBzZXQgdXAgdGhlIGNvcHkgKi8KKzE6CXN0ZAorCW1vdiAkUFRfRUlQIC8gNCwgJWVjeAkJLyogc2F2ZWQgcmVncyB1cCB0byBvcmlnX2VheCAqLworCXJlcCBtb3ZzbAorCWNsZAorCisJbGVhIDQoJWVkaSksICVlc3AJCS8qIHBvaW50IGVzcCB0byBuZXcgZnJhbWUgKi8KKzI6CWptcCB4ZW5fZG9fdXBjYWxsCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtXzY0LlMgYi9hcmNoL3g4Ni94ZW4veGVuLWFzbV82NC5TCmluZGV4IDA1Nzk0YzUuLjAyZjQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tYXNtXzY0LlMKKysrIGIvYXJjaC94ODYveGVuL3hlbi1hc21fNjQuUwpAQCAtMSwxNzQgKzEsNDUgQEAKIC8qCi0JQXNtIHZlcnNpb25zIG9mIFhlbiBwdi1vcHMsIHN1aXRhYmxlIGZvciBlaXRoZXIgZGlyZWN0IHVzZSBvciBpbmxpbmluZy4KLQlUaGUgaW5saW5lIHZlcnNpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0LXVzZSB2ZXJzaW9ucywgd2l0aCB0aGUKLQlwcmUtIGFuZCBwb3N0LWFtYmxlIGNob3BwZWQgb2ZmLgotCi0JVGhpcyBjb2RlIGlzIGVuY29kZWQgZm9yIHNpemUgcmF0aGVyIHRoYW4gYWJzb2x1dGUgZWZmaWNpZW5jeSwKLQl3aXRoIGEgdmlldyB0byBiZWluZyBhYmxlIHRvIGlubGluZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgotCi0JV2Ugb25seSBib3RoZXIgd2l0aCBkaXJlY3QgZm9ybXMgKGllLCB2Y3B1IGluIHBkYSkgb2YgdGhlIG9wZXJhdGlvbnMKLQloZXJlOyB0aGUgaW5kaXJlY3QgZm9ybXMgYXJlIGJldHRlciBoYW5kbGVkIGluIEMsIHNpbmNlIHRoZXkncmUKLQlnZW5lcmFsbHkgdG9vIGxhcmdlIHRvIGlubGluZSBhbnl3YXkuCisgKiBBc20gdmVyc2lvbnMgb2YgWGVuIHB2LW9wcywgc3VpdGFibGUgZm9yIGVpdGhlciBkaXJlY3QgdXNlIG9yCisgKiBpbmxpbmluZy4gIFRoZSBpbmxpbmUgdmVyc2lvbnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBkaXJlY3QtdXNlCisgKiB2ZXJzaW9ucywgd2l0aCB0aGUgcHJlLSBhbmQgcG9zdC1hbWJsZSBjaG9wcGVkIG9mZi4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZW5jb2RlZCBmb3Igc2l6ZSByYXRoZXIgdGhhbiBhYnNvbHV0ZSBlZmZpY2llbmN5LCB3aXRoCisgKiBhIHZpZXcgdG8gYmVpbmcgYWJsZSB0byBpbmxpbmUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAqCisgKiBXZSBvbmx5IGJvdGhlciB3aXRoIGRpcmVjdCBmb3JtcyAoaWUsIHZjcHUgaW4gcGRhKSBvZiB0aGUKKyAqIG9wZXJhdGlvbnMgaGVyZTsgdGhlIGluZGlyZWN0IGZvcm1zIGFyZSBiZXR0ZXIgaGFuZGxlZCBpbiBDLCBzaW5jZQorICogdGhleSdyZSBnZW5lcmFsbHkgdG9vIGxhcmdlIHRvIGlubGluZSBhbnl3YXkuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogCi0jZGVmaW5lIFJFTE9DKHgsIHYpCS5nbG9ibCB4IyNfcmVsb2M7IHgjI19yZWxvYz12Ci0jZGVmaW5lIEVORFBBVENIKHgpCS5nbG9ibCB4IyNfZW5kOyB4IyNfZW5kPS4KLQotLyogUHNldWRvLWZsYWcgdXNlZCBmb3IgdmlydHVhbCBOTUksIHdoaWNoIHdlIGRvbid0IGltcGxlbWVudCB5ZXQgKi8KLSNkZWZpbmUgWEVOX0VGTEFHU19OTUkJMHg4MDAwMDAwMAotCi0jaWYgMQotLyoKLQl4ODYtNjQgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlyZWN0IGFjY2VzcyB0byBwZXJjcHUgdmFyaWFibGVzCi0JdmlhIGEgc2VnbWVudCBvdmVycmlkZSwgc28gd2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUKLQluZXZlciBnZXRzIHVzZWQKLSAqLwotI2RlZmluZSBCVUcJCQl1ZDJhCi0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhciwgb2ZmKQkweGRlYWRiZWVmCi0jZW5kaWYKLQotLyoKLQlFbmFibGUgZXZlbnRzLiAgVGhpcyBjbGVhcnMgdGhlIGV2ZW50IG1hc2sgYW5kIHRlc3RzIHRoZSBwZW5kaW5nCi0JZXZlbnQgc3RhdHVzIHdpdGggb25lIGFuZCBvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgcGVuZGluZwotCWV2ZW50cywgdGhlbiBlbnRlciB0aGUgaHlwZXJ2aXNvciB0byBnZXQgdGhlbSBoYW5kbGVkLgotICovCi1FTlRSWSh4ZW5faXJxX2VuYWJsZV9kaXJlY3QpCi0JQlVHCi0KLQkvKiBVbm1hc2sgZXZlbnRzICovCi0JbW92YiAkMCwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbywgWEVOX3ZjcHVfaW5mb19tYXNrKQotCi0JLyogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhhdCB3aWxsIGRlYWwgd2l0aAotCSAgIGFueSBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGluZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nCi0JICAgcnVuIG9uIHRoZSB3cm9uZyBDUFUsIGJ1dCB0aGF0IGRvZXNuJ3QgaHVydC4gKi8KLQotCS8qIFRlc3QgZm9yIHBlbmRpbmcgKi8KLQl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbywgWEVOX3ZjcHVfaW5mb19wZW5kaW5nKQotCWp6IDFmCi0KLTI6CWNhbGwgY2hlY2tfZXZlbnRzCi0xOgotRU5EUEFUQ0goeGVuX2lycV9lbmFibGVfZGlyZWN0KQotCXJldAotCUVORFBST0MoeGVuX2lycV9lbmFibGVfZGlyZWN0KQotCVJFTE9DKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCwgMmIrMSkKLQotLyoKLQlEaXNhYmxpbmcgZXZlbnRzIGlzIHNpbXBseSBhIG1hdHRlciBvZiBtYWtpbmcgdGhlIGV2ZW50IG1hc2sKLQlub24temVyby4KLSAqLwotRU5UUlkoeGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKLQlCVUcKLQotCW1vdmIgJDEsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8sIFhFTl92Y3B1X2luZm9fbWFzaykKLUVORFBBVENIKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCi0JcmV0Ci0JRU5EUFJPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQotCVJFTE9DKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QsIDApCi0KLS8qCi0JKHhlbl8pc2F2ZV9mbCBpcyB1c2VkIHRvIGdldCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXR1cy4KLQlDYWxsZXJzIGV4cGVjdCB0aGUgc3RhdHVzIHRvIGJlIGluIFg4Nl9FRkxBR1NfSUYsIGFuZCBvdGhlciBiaXRzCi0JbWF5IGJlIHNldCBpbiB0aGUgcmV0dXJuIHZhbHVlLiAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieQotCW1ha2luZyBzdXJlIHRoYXQgWDg2X0VGTEFHU19JRiBoYXMgdGhlIHJpZ2h0IHZhbHVlIChhbmQgb3RoZXIgYml0cwotCWluIHRoYXQgYnl0ZSBhcmUgMCksIGJ1dCBvdGhlciBiaXRzIGluIHRoZSByZXR1cm4gdmFsdWUgYXJlCi0JdW5kZWZpbmVkLiAgV2UgbmVlZCB0byB0b2dnbGUgdGhlIHN0YXRlIG9mIHRoZSBiaXQsIGJlY2F1c2UKLQlYZW4gYW5kIHg4NiB1c2Ugb3Bwb3NpdGUgc2Vuc2VzIChtYXNrIHZzIGVuYWJsZSkuCi0gKi8KLUVOVFJZKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQlCVUcKLQotCXRlc3RiICQweGZmLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvLCBYRU5fdmNwdV9pbmZvX21hc2spCi0Jc2V0eiAlYWgKLQlhZGRiICVhaCwlYWgKLUVORFBBVENIKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQlyZXQKLQlFTkRQUk9DKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQlSRUxPQyh4ZW5fc2F2ZV9mbF9kaXJlY3QsIDApCi0KLS8qCi0JSW4gcHJpbmNpcGxlIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHBhc3NpbmcgdXMgYSB2YWx1ZSByZXR1cm4KLQlmcm9tIHhlbl9zYXZlX2ZsX2RpcmVjdCwgYnV0IGZvciByb2J1c3RuZXNzIHNha2Ugd2UgdGVzdCBvbmx5Ci0JdGhlIFg4Nl9FRkxBR1NfSUYgZmxhZyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgYnl0ZS4gQWZ0ZXIKLQlzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzayBzdGF0ZSwgaXQgY2hlY2tzIGZvciB1bm1hc2tlZAotCXBlbmRpbmcgZXZlbnRzIGFuZCBlbnRlcnMgdGhlIGh5cGVydmlzb3IgdG8gZ2V0IHRoZW0gZGVsaXZlcmVkCi0JaWYgc28uCi0gKi8KLUVOVFJZKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCkKLQlCVUcKLQotCXRlc3RiICRYODZfRUZMQUdTX0lGPj44LCAlYWgKLQlzZXR6IFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8sIFhFTl92Y3B1X2luZm9fbWFzaykKLQkvKiBQcmVlbXB0IGhlcmUgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB0aGF0IHdpbGwgZGVhbCB3aXRoCi0JICAgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gIFRoZSBwZW5kaW5nIGNoZWNrIG1heSBlbmQgdXAgYmVpbmcKLQkgICBydW4gb24gdGhlIHdyb25nIENQVSwgYnV0IHRoYXQgZG9lc24ndCBodXJ0LiAqLwotCi0JLyogY2hlY2sgZm9yIHVubWFza2VkIGFuZCBwZW5kaW5nICovCi0JY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvLCBYRU5fdmNwdV9pbmZvX3BlbmRpbmcpCi0JanogMWYKLTI6CWNhbGwgY2hlY2tfZXZlbnRzCi0xOgotRU5EUEFUQ0goeGVuX3Jlc3RvcmVfZmxfZGlyZWN0KQotCXJldAotCUVORFBST0MoeGVuX3Jlc3RvcmVfZmxfZGlyZWN0KQotCVJFTE9DKHhlbl9yZXN0b3JlX2ZsX2RpcmVjdCwgMmIrMSkKLQotCi0vKgotCUZvcmNlIGFuIGV2ZW50IGNoZWNrIGJ5IG1ha2luZyBhIGh5cGVyY2FsbCwKLQlidXQgcHJlc2VydmUgcmVncyBiZWZvcmUgbWFraW5nIHRoZSBjYWxsLgotICovCi1jaGVja19ldmVudHM6Ci0JcHVzaCAlcmF4Ci0JcHVzaCAlcmN4Ci0JcHVzaCAlcmR4Ci0JcHVzaCAlcnNpCi0JcHVzaCAlcmRpCi0JcHVzaCAlcjgKLQlwdXNoICVyOQotCXB1c2ggJXIxMAotCXB1c2ggJXIxMQotCWNhbGwgeGVuX2ZvcmNlX2V2dGNobl9jYWxsYmFjawotCXBvcCAlcjExCi0JcG9wICVyMTAKLQlwb3AgJXI5Ci0JcG9wICVyOAotCXBvcCAlcmRpCi0JcG9wICVyc2kKLQlwb3AgJXJkeAotCXBvcCAlcmN4Ci0JcG9wICVyYXgKLQlyZXQKKyNpbmNsdWRlICJ4ZW4tYXNtLmgiCiAKIEVOVFJZKHhlbl9hZGp1c3RfZXhjZXB0aW9uX2ZyYW1lKQotCW1vdiA4KzAoJXJzcCksJXJjeAotCW1vdiA4KzgoJXJzcCksJXIxMQorCW1vdiA4KzAoJXJzcCksICVyY3gKKwltb3YgOCs4KCVyc3ApLCAlcjExCiAJcmV0ICQxNgogCiBoeXBlcmNhbGxfaXJldCA9IGh5cGVyY2FsbF9wYWdlICsgX19IWVBFUlZJU09SX2lyZXQgKiAzMgogLyoKLQlYZW42NCBpcmV0IGZyYW1lOgotCi0Jc3MKLQlyc3AKLQlyZmxhZ3MKLQljcwotCXJpcAkJPC0tIHN0YW5kYXJkIGlyZXQgZnJhbWUKLQotCWZsYWdzCi0KLQlyY3gJCX0KLQlyMTEJCX08LS0gcHVzaGVkIGJ5IGh5cGVyY2FsbCBwYWdlCi1yc3AgLT4JcmF4CQl9CisgKiBYZW42NCBpcmV0IGZyYW1lOgorICoKKyAqCXNzCisgKglyc3AKKyAqCXJmbGFncworICoJY3MKKyAqCXJpcAkJPC0tIHN0YW5kYXJkIGlyZXQgZnJhbWUKKyAqCisgKglmbGFncworICoKKyAqCXJjeAkJfQorICoJcjExCQl9PC0tIHB1c2hlZCBieSBoeXBlcmNhbGwgcGFnZQorICogcnNwLT5yYXgJCX0KICAqLwogRU5UUlkoeGVuX2lyZXQpCiAJcHVzaHEgJDAKQEAgLTE3Nyw4ICs0OCw4IEBACiBSRUxPQyh4ZW5faXJldCwgMWIrMSkKIAogLyoKLQlzeXNleGl0IGlzIG5vdCB1c2VkIGZvciA2NC1iaXQgcHJvY2Vzc2VzLCBzbyBpdCdzCi0Jb25seSBldmVyIHVzZWQgdG8gcmV0dXJuIHRvIDMyLWJpdCBjb21wYXQgdXNlcnNwYWNlLgorICogc3lzZXhpdCBpcyBub3QgdXNlZCBmb3IgNjQtYml0IHByb2Nlc3Nlcywgc28gaXQncyBvbmx5IGV2ZXIgdXNlZCB0bworICogcmV0dXJuIHRvIDMyLWJpdCBjb21wYXQgdXNlcnNwYWNlLgogICovCiBFTlRSWSh4ZW5fc3lzZXhpdCkKIAlwdXNocSAkX19VU0VSMzJfRFMKQEAgLTE5MywxMyArNjQsMTUgQEAKIFJFTE9DKHhlbl9zeXNleGl0LCAxYisxKQogCiBFTlRSWSh4ZW5fc3lzcmV0NjQpCi0JLyogV2UncmUgYWxyZWFkeSBvbiB0aGUgdXNlcm1vZGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgYnV0IHN0aWxsCi0JICAgd2l0aCB0aGUga2VybmVsIGdzLCBzbyB3ZSBjYW4gZWFzaWx5IHN3aXRjaCBiYWNrICovCi0JbW92cSAlcnNwLCAlZ3M6cGRhX29sZHJzcAotCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjaywlcnNwCisJLyoKKwkgKiBXZSdyZSBhbHJlYWR5IG9uIHRoZSB1c2VybW9kZSBzdGFjayBhdCB0aGlzIHBvaW50LCBidXQKKwkgKiBzdGlsbCB3aXRoIHRoZSBrZXJuZWwgZ3MsIHNvIHdlIGNhbiBlYXNpbHkgc3dpdGNoIGJhY2sKKwkgKi8KKwltb3ZxICVyc3AsIFBFUl9DUFVfVkFSKG9sZF9yc3ApCisJbW92cSBQRVJfQ1BVX1ZBUihrZXJuZWxfc3RhY2spLCAlcnNwCiAKIAlwdXNocSAkX19VU0VSX0RTCi0JcHVzaHEgJWdzOnBkYV9vbGRyc3AKKwlwdXNocSBQRVJfQ1BVX1ZBUihvbGRfcnNwKQogCXB1c2hxICVyMTEKIAlwdXNocSAkX19VU0VSX0NTCiAJcHVzaHEgJXJjeApAQCAtMjEwLDEzICs4MywxNSBAQAogUkVMT0MoeGVuX3N5c3JldDY0LCAxYisxKQogCiBFTlRSWSh4ZW5fc3lzcmV0MzIpCi0JLyogV2UncmUgYWxyZWFkeSBvbiB0aGUgdXNlcm1vZGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgYnV0IHN0aWxsCi0JICAgd2l0aCB0aGUga2VybmVsIGdzLCBzbyB3ZSBjYW4gZWFzaWx5IHN3aXRjaCBiYWNrICovCi0JbW92cSAlcnNwLCAlZ3M6cGRhX29sZHJzcAotCW1vdnEgJWdzOnBkYV9rZXJuZWxzdGFjaywgJXJzcAorCS8qCisJICogV2UncmUgYWxyZWFkeSBvbiB0aGUgdXNlcm1vZGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgYnV0CisJICogc3RpbGwgd2l0aCB0aGUga2VybmVsIGdzLCBzbyB3ZSBjYW4gZWFzaWx5IHN3aXRjaCBiYWNrCisJICovCisJbW92cSAlcnNwLCBQRVJfQ1BVX1ZBUihvbGRfcnNwKQorCW1vdnEgUEVSX0NQVV9WQVIoa2VybmVsX3N0YWNrKSwgJXJzcAogCiAJcHVzaHEgJF9fVVNFUjMyX0RTCi0JcHVzaHEgJWdzOnBkYV9vbGRyc3AKKwlwdXNocSBQRVJfQ1BVX1ZBUihvbGRfcnNwKQogCXB1c2hxICVyMTEKIAlwdXNocSAkX19VU0VSMzJfQ1MKIAlwdXNocSAlcmN4CkBAIC0yMjcsMjggKzEwMiwyNyBAQAogUkVMT0MoeGVuX3N5c3JldDMyLCAxYisxKQogCiAvKgotCVhlbiBoYW5kbGVzIHN5c2NhbGwgY2FsbGJhY2tzIG11Y2ggbGlrZSBvcmRpbmFyeSBleGNlcHRpb25zLAotCXdoaWNoIG1lYW5zIHdlIGhhdmU6Ci0JIC0ga2VybmVsIGdzCi0JIC0ga2VybmVsIHJzcAotCSAtIGFuIGlyZXQtbGlrZSBzdGFjayBmcmFtZSBvbiB0aGUgc3RhY2sgKGluY2x1ZGluZyByY3ggYW5kIHIxMSk6Ci0JCXNzCi0JCXJzcAotCQlyZmxhZ3MKLQkJY3MKLQkJcmlwCi0JCXIxMQotCXJzcC0+CXJjeAotCi0JSW4gYWxsIHRoZSBlbnRyeXBvaW50cywgd2UgdW5kbyBhbGwgdGhhdCB0byBtYWtlIGl0IGxvb2sKLQlsaWtlIGEgQ1BVLWdlbmVyYXRlZCBzeXNjYWxsL3N5c2VudGVyIGFuZCBqdW1wIHRvIHRoZSBub3JtYWwKLQllbnRyeXBvaW50LgorICogWGVuIGhhbmRsZXMgc3lzY2FsbCBjYWxsYmFja3MgbXVjaCBsaWtlIG9yZGluYXJ5IGV4Y2VwdGlvbnMsIHdoaWNoCisgKiBtZWFucyB3ZSBoYXZlOgorICogLSBrZXJuZWwgZ3MKKyAqIC0ga2VybmVsIHJzcAorICogLSBhbiBpcmV0LWxpa2Ugc3RhY2sgZnJhbWUgb24gdGhlIHN0YWNrIChpbmNsdWRpbmcgcmN4IGFuZCByMTEpOgorICoJc3MKKyAqCXJzcAorICoJcmZsYWdzCisgKgljcworICoJcmlwCisgKglyMTEKKyAqIHJzcC0+cmN4CisgKgorICogSW4gYWxsIHRoZSBlbnRyeXBvaW50cywgd2UgdW5kbyBhbGwgdGhhdCB0byBtYWtlIGl0IGxvb2sgbGlrZSBhCisgKiBDUFUtZ2VuZXJhdGVkIHN5c2NhbGwvc3lzZW50ZXIgYW5kIGp1bXAgdG8gdGhlIG5vcm1hbCBlbnRyeXBvaW50LgogICovCiAKIC5tYWNybyB1bmRvX3hlbl9zeXNjYWxsCi0JbW92IDAqOCglcnNwKSwlcmN4Ci0JbW92IDEqOCglcnNwKSwlcjExCi0JbW92IDUqOCglcnNwKSwlcnNwCisJbW92IDAqOCglcnNwKSwgJXJjeAorCW1vdiAxKjgoJXJzcCksICVyMTEKKwltb3YgNSo4KCVyc3ApLCAlcnNwCiAuZW5kbQogCiAvKiBOb3JtYWwgNjQtYml0IHN5c3RlbSBjYWxsIHRhcmdldCAqLwpAQCAtMjc1LDcgKzE0OSw3IEBACiAKIEVOVFJZKHhlbl9zeXNjYWxsMzJfdGFyZ2V0KQogRU5UUlkoeGVuX3N5c2VudGVyX3RhcmdldCkKLQlsZWEgMTYoJXJzcCksICVyc3AJLyogc3RyaXAgJXJjeCwlcjExICovCisJbGVhIDE2KCVyc3ApLCAlcnNwCS8qIHN0cmlwICVyY3gsICVyMTEgKi8KIAltb3YgJC1FTk9TWVMsICVyYXgKIAlwdXNocSAkVkdDRl9pbl9zeXNjYWxsCiAJam1wIGh5cGVyY2FsbF9pcmV0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWhlYWQuUyBiL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCmluZGV4IDYzZDQ5YTUuLjFhNWZmMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4taGVhZC5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9lbGZub3RlLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9pbnRlcmZhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmggYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCmluZGV4IGMxZjhmYWYuLjJmNWVmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKKysrIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaApAQCAtMTAsOSArMTAsMTIgQEAKIGV4dGVybiBjb25zdCBjaGFyIHhlbl9oeXBlcnZpc29yX2NhbGxiYWNrW107CiBleHRlcm4gY29uc3QgY2hhciB4ZW5fZmFpbHNhZmVfY2FsbGJhY2tbXTsKIAorZXh0ZXJuIHZvaWQgKnhlbl9pbml0aWFsX2dkdDsKKwogc3RydWN0IHRyYXBfaW5mbzsKIHZvaWQgeGVuX2NvcHlfdHJhcF9pbmZvKHN0cnVjdCB0cmFwX2luZm8gKnRyYXBzKTsKIAorREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB2Y3B1X2luZm8sIHhlbl92Y3B1X2luZm8pOwogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jcjMpOwogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHhlbl9jdXJyZW50X2NyMyk7CiAKQEAgLTIyLDYgKzI1LDEzIEBACiAKIHZvaWQgeGVuX3NldHVwX21mbl9saXN0X2xpc3Qodm9pZCk7CiB2b2lkIHhlbl9zZXR1cF9zaGFyZWRfaW5mbyh2b2lkKTsKK3ZvaWQgeGVuX3NldHVwX21hY2hwaHlzX21hcHBpbmcodm9pZCk7CitwZ2RfdCAqeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKTsKK3ZvaWQgeGVuX2lkZW50X21hcF9JU0Eodm9pZCk7Cit2b2lkIHhlbl9yZXNlcnZlX3RvcCh2b2lkKTsKKwordm9pZCB4ZW5fbGVhdmVfbGF6eSh2b2lkKTsKK3ZvaWQgeGVuX3Bvc3RfYWxsb2NhdG9yX2luaXQodm9pZCk7CiAKIGNoYXIgKiBfX2luaXQgeGVuX21lbW9yeV9zZXR1cCh2b2lkKTsKIHZvaWQgX19pbml0IHhlbl9hcmNoX3NldHVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2MTAwNjgyLi5kZDFhN2E0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjUsNCArNjUsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmCS8qIF9YVEVOU0FfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBmNTBiNjk3Li4yMjZhMzkxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9YVEVOU0FfU1dBQl9ICiAjZGVmaW5lIF9YVEVOU0FfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IDVmYmNkZTUuLmYzYjY2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMjliY2ZhYy4uOTk2ZWQ5MCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC02MDMsMTMgKzYwMywxMCBAQAogCXEtPnF1ZXVlX2ZsYWdzCQk9IFFVRVVFX0ZMQUdfREVGQVVMVDsKIAlxLT5xdWV1ZV9sb2NrCQk9IGxvY2s7CiAKLQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCBCTEtfU0VHX0JPVU5EQVJZX01BU0spOwotCisJLyoKKwkgKiBUaGlzIGFsc28gc2V0cyBody9waHlzIHNlZ21lbnRzLCBib3VuZGFyeSBhbmQgc2l6ZQorCSAqLwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocSwgX19tYWtlX3JlcXVlc3QpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIE1BWF9TRUdNRU5UX1NJWkUpOwotCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBNQVhfSFdfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBNQVhfUEhZU19TRUdNRU5UUyk7CiAKIAlxLT5zZ19yZXNlcnZlZF9zaXplID0gSU5UX01BWDsKIApAQCAtNzM1LDcgKzczMiw2IEBACiAJCV9fZnJlZWRfcmVxdWVzdChxLCBydyBeIDEpOwogfQogCi0jZGVmaW5lIGJsa2Rldl9mcmVlX3JxKGxpc3QpIGxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQogLyoKICAqIEdldCBhIGZyZWUgcmVxdWVzdCwgcXVldWVfbG9jayBtdXN0IGJlIGhlbGQuCiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgd2l0aCBxdWV1ZV9sb2NrIGhlbGQuCkBAIC0xMDY2LDYgKzEwNjIsOSBAQAogCiAJZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KHEsIHJlcSk7CiAKKwkvKiB0aGlzIGlzIGEgYmlvIGxlYWsgKi8KKwlXQVJOX09OKHJlcS0+YmlvICE9IE5VTEwpOworCiAJLyoKIAkgKiBSZXF1ZXN0IG1heSBub3QgaGF2ZSBvcmlnaW5hdGVkIGZyb20gbGxfcndfYmxrLiBpZiBub3QsCiAJICogaXQgZGlkbid0IGNvbWUgb3V0IG9mIG91ciByZXNlcnZlZCBycSBwb29scwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA1YTI0NGYwLi5lMzljYjI0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtNDAzLDYgKzQwMyw4IEBACiAJaWYgKGJsa19ycV9jcHVfdmFsaWQobmV4dCkpCiAJCXJlcS0+Y3B1ID0gbmV4dC0+Y3B1OwogCisJLyogb3duZXItc2hpcCBvZiBiaW8gcGFzc2VkIGZyb20gbmV4dCB0byByZXEgKi8KKwluZXh0LT5iaW8gPSBOVUxMOwogCV9fYmxrX3B1dF9yZXF1ZXN0KHEsIG5leHQpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrdHJhY2UuYyBiL2Jsb2NrL2Jsa3RyYWNlLmMKaW5kZXggN2NmOWQxZi4uMDI4MTIwYSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrdHJhY2UuYworKysgYi9ibG9jay9ibGt0cmFjZS5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAlpZiAoIWJ0LT5zZXF1ZW5jZSkKIAkJZ290byBlcnI7CiAKLQlidC0+bXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRyk7CisJYnQtPm1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTsKIAlpZiAoIWJ0LT5tc2dfZGF0YSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggMGNlODgwNi4uMjA2MDYwZSAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTIxOCw5ICsyMTgsNiBAQAogCiAJaWYgKGhkci0+Z3VhcmQgIT0gJ1EnKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaGRyLT5kb3V0X3hmZXJfbGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpIHx8Ci0JICAgIGhkci0+ZGluX3hmZXJfbGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpKQotCQlyZXR1cm4gLUVJTzsKIAogCXN3aXRjaCAoaGRyLT5wcm90b2NvbCkgewogCWNhc2UgQlNHX1BST1RPQ09MX1NDU0k6CkBAIC0zNTMsNiArMzUwLDggQEAKIHN0YXRpYyB2b2lkIGJzZ19hZGRfY29tbWFuZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJICAgIHN0cnVjdCBic2dfY29tbWFuZCAqYmMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlpbnQgYXRfaGVhZCA9ICgwID09IChiYy0+aGRyLmZsYWdzICYgQlNHX0ZMQUdfUV9BVF9UQUlMKSk7CisKIAkvKgogCSAqIGFkZCBiYyBjb21tYW5kIHRvIGJ1c3kgcXVldWUgYW5kIHN1Ym1pdCBycSBmb3IgaW8KIAkgKi8KQEAgLTM2OCw3ICszNjcsNyBAQAogCWRwcmludGsoIiVzOiBxdWV1ZWluZyBycSAlcCwgYmMgJXBcbiIsIGJkLT5uYW1lLCBycSwgYmMpOwogCiAJcnEtPmVuZF9pb19kYXRhID0gYmM7Ci0JYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHEsIE5VTEwsIHJxLCAxLCBic2dfcnFfZW5kX2lvKTsKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocSwgTlVMTCwgcnEsIGF0X2hlYWQsIGJzZ19ycV9lbmRfaW8pOwogfQogCiBzdGF0aWMgc3RydWN0IGJzZ19jb21tYW5kICpic2dfbmV4dF9kb25lX2NtZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQpCkBAIC05MjQsNiArOTIzLDcgQEAKIAkJc3RydWN0IHJlcXVlc3QgKnJxOwogCQlzdHJ1Y3QgYmlvICpiaW8sICpiaWRpX2JpbyA9IE5VTEw7CiAJCXN0cnVjdCBzZ19pb192NCBoZHI7CisJCWludCBhdF9oZWFkOwogCQl1OCBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaGRyLCB1YXJnLCBzaXplb2YoaGRyKSkpCkBAIC05MzYsNyArOTM2LDkgQEAKIAkJYmlvID0gcnEtPmJpbzsKIAkJaWYgKHJxLT5uZXh0X3JxKQogCQkJYmlkaV9iaW8gPSBycS0+bmV4dF9ycS0+YmlvOwotCQlibGtfZXhlY3V0ZV9ycShiZC0+cXVldWUsIE5VTEwsIHJxLCAwKTsKKworCQlhdF9oZWFkID0gKDAgPT0gKGhkci5mbGFncyAmIEJTR19GTEFHX1FfQVRfVEFJTCkpOworCQlibGtfZXhlY3V0ZV9ycShiZC0+cXVldWUsIE5VTEwsIHJxLCBhdF9oZWFkKTsKIAkJcmV0ID0gYmxrX2NvbXBsZXRlX3NndjRfaGRyX3JxKHJxLCAmaGRyLCBiaW8sIGJpZGlfYmlvKTsKIAogCQlpZiAoY29weV90b191c2VyKHVhcmcsICZoZHIsIHNpemVvZihoZHIpKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2NtZC1maWx0ZXIuYyBiL2Jsb2NrL2NtZC1maWx0ZXIuYwppbmRleCA1MDRiMjc1Li41NzJiYmMyIDEwMDY0NAotLS0gYS9ibG9jay9jbWQtZmlsdGVyLmMKKysrIGIvYmxvY2svY21kLWZpbHRlci5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgpkaWZmIC0tZ2l0IGEvYmxvY2svc2NzaV9pb2N0bC5jIGIvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IGVlOWM2N2QuLjYyNmVlMjcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3Njc2lfaW9jdGwuYworKysgYi9ibG9jay9zY3NpX2lvY3RsLmMKQEAgLTIxNCwyMSArMjE0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiB1bm1hcCBhIHJlcXVlc3QgdGhhdCB3YXMgcHJldmlvdXNseSBtYXBwZWQgdG8gdGhpcyBzZ19pb19oZHIuIGhhbmRsZXMKLSAqIGJvdGggc2cgYW5kIG5vbi1zZyBzZ19pb19oZHIuCi0gKi8KLXN0YXRpYyBpbnQgYmxrX3VubWFwX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHNnX2lvX2hkciAqaGRyKQotewotCWJsa19ycV91bm1hcF91c2VyKHJxLT5iaW8pOwotCWJsa19wdXRfcmVxdWVzdChycSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYmxrX2NvbXBsZXRlX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHNnX2lvX2hkciAqaGRyLAogCQkJCSBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaW50IHIsIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAkvKgogCSAqIGZpbGwgaW4gYWxsIHRoZSBvdXRwdXQgbWVtYmVycwpAQCAtMjUzLDEyICsyNDIsMTAgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCi0JcnEtPmJpbyA9IGJpbzsKLQlyID0gYmxrX3VubWFwX3NnaGRyX3JxKHJxLCBoZHIpOwotCWlmIChyZXQpCi0JCXIgPSByZXQ7CisJYmxrX3JxX3VubWFwX3VzZXIoYmlvKTsKKwlibGtfcHV0X3JlcXVlc3QocnEpOwogCi0JcmV0dXJuIHI7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzZ19pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4IDhkZGU0ZmMuLjc0ZDBlNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC01Niw2ICs1Niw3IEBACiAJdHJpc3RhdGUKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKIAlzZWxlY3QgQ1JZUFRPX1JORzIKKwlzZWxlY3QgQ1JZUFRPX1dPUktRVUVVRQogCiBjb25maWcgQ1JZUFRPX0hBU0gKIAl0cmlzdGF0ZQpAQCAtNzUsNiArNzYsMTAgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBDUllQVE9fQUxHQVBJMgogCitjb25maWcgQ1JZUFRPX1BDT01QCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKKwogY29uZmlnIENSWVBUT19NQU5BR0VSCiAJdHJpc3RhdGUgIkNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtIG1hbmFnZXIiCiAJc2VsZWN0IENSWVBUT19NQU5BR0VSMgpAQCAtODcsNiArOTIsNyBAQAogCXNlbGVjdCBDUllQVE9fQUVBRDIKIAlzZWxlY3QgQ1JZUFRPX0hBU0gyCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIyCisJc2VsZWN0IENSWVBUT19QQ09NUAogCiBjb25maWcgQ1JZUFRPX0dGMTI4TVVMCiAJdHJpc3RhdGUgIkdGKDJeMTI4KSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCkBAIC0xMDYsMTEgKzExMiwxNSBAQAogCWhlbHAKIAkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KIAorY29uZmlnIENSWVBUT19XT1JLUVVFVUUKKyAgICAgICB0cmlzdGF0ZQorCiBjb25maWcgQ1JZUFRPX0NSWVBURAogCXRyaXN0YXRlICJTb2Z0d2FyZSBhc3luYyBjcnlwdG8gZGFlbW9uIgogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCiAJc2VsZWN0IENSWVBUT19IQVNICiAJc2VsZWN0IENSWVBUT19NQU5BR0VSCisJc2VsZWN0IENSWVBUT19XT1JLUVVFVUUKIAloZWxwCiAJICBUaGlzIGlzIGEgZ2VuZXJpYyBzb2Z0d2FyZSBhc3luY2hyb25vdXMgY3J5cHRvIGRhZW1vbiB0aGF0CiAJICBjb252ZXJ0cyBhbiBhcmJpdHJhcnkgc3luY2hyb25vdXMgc29mdHdhcmUgY3J5cHRvIGFsZ29yaXRobQpAQCAtNDcwLDYgKzQ4MCwzMSBAQAogCiAJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBDUllQVE9fQUVTX05JX0lOVEVMCisJdHJpc3RhdGUgIkFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoQUVTLU5JKSIKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQKKwlzZWxlY3QgQ1JZUFRPX0FFU19YODZfNjQKKwlzZWxlY3QgQ1JZUFRPX0NSWVBURAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJaGVscAorCSAgVXNlIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgZm9yIEFFUyBhbGdvcml0aG0uCisKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwKKwkgIGFsZ29yaXRobS4KKworCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCisJICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZworCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCisJICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKKwkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKKwkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KKworCSAgVGhlIEFFUyBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMKKworCSAgU2VlIDxodHRwOi8vY3NyYy5uaXN0Lmdvdi9lbmNyeXB0aW9uL2Flcy8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgQ1JZUFRPX0FOVUJJUwogCXRyaXN0YXRlICJBbnViaXMgY2lwaGVyIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpAQCAtNzE0LDYgKzc0OSwxNSBAQAogCiAJICBZb3Ugd2lsbCBtb3N0IHByb2JhYmx5IHdhbnQgdGhpcyBpZiB1c2luZyBJUFNlYy4KIAorY29uZmlnIENSWVBUT19aTElCCisJdHJpc3RhdGUgIlpsaWIgY29tcHJlc3Npb24gYWxnb3JpdGhtIgorCXNlbGVjdCBDUllQVE9fUENPTVAKKwlzZWxlY3QgWkxJQl9JTkZMQVRFCisJc2VsZWN0IFpMSUJfREVGTEFURQorCXNlbGVjdCBOTEFUVFIKKwloZWxwCisJICBUaGlzIGlzIHRoZSB6bGliIGFsZ29yaXRobS4KKwogY29uZmlnIENSWVBUT19MWk8KIAl0cmlzdGF0ZSAiTFpPIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDQ2YjA4YmYuLjY3M2Q5ZjcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTUsNiArNSw4IEBACiBvYmotJChDT05GSUdfQ1JZUFRPKSArPSBjcnlwdG8ubwogY3J5cHRvLW9ianMgOj0gYXBpLm8gY2lwaGVyLm8gZGlnZXN0Lm8gY29tcHJlc3MubwogCitvYmotJChDT05GSUdfQ1JZUFRPX1dPUktRVUVVRSkgKz0gY3J5cHRvX3dxLm8KKwogb2JqLSQoQ09ORklHX0NSWVBUT19GSVBTKSArPSBmaXBzLm8KIAogY3J5cHRvX2FsZ2FwaS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KQEAgLTI1LDYgKzI3LDggQEAKIGNyeXB0b19oYXNoLW9ianMgKz0gc2hhc2gubwogb2JqLSQoQ09ORklHX0NSWVBUT19IQVNIMikgKz0gY3J5cHRvX2hhc2gubwogCitvYmotJChDT05GSUdfQ1JZUFRPX1BDT01QKSArPSBwY29tcHJlc3MubworCiBjcnlwdG9tZ3Itb2JqcyA6PSBhbGdib3NzLm8gdGVzdG1nci5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fTUFOQUdFUjIpICs9IGNyeXB0b21nci5vCkBAIC03MCw2ICs3NCw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX1NFRUQpICs9IHNlZWQubwogb2JqLSQoQ09ORklHX0NSWVBUT19TQUxTQTIwKSArPSBzYWxzYTIwX2dlbmVyaWMubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERUZMQVRFKSArPSBkZWZsYXRlLm8KK29iai0kKENPTkZJR19DUllQVE9fWkxJQikgKz0gemxpYi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDKSArPSBtaWNoYWVsX21pYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSQzMyQykgKz0gY3JjMzJjLm8KIG9iai0kKENPTkZJR19DUllQVE9fQVVUSEVOQykgKz0gYXV0aGVuYy5vCmRpZmYgLS1naXQgYS9jcnlwdG8vYWJsa2NpcGhlci5jIGIvY3J5cHRvL2FibGtjaXBoZXIuYwppbmRleCA5NDE0MGIzLi5lMTFjZTM3IDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTI4Miw2ICsyODIsMjUgQEAKIAkJCQkJICBhbGctPmNyYV9hYmxrY2lwaGVyLml2c2l6ZSkpCiAJCXJldHVybiBhbGc7CiAKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlIHwgQ1JZUFRPX0FMR19URVNURUQsCisJCQkJICAgIG1hc2sgJiB+Q1JZUFRPX0FMR19URVNURUQpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIGFsZzsKKworCWlmICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgQ1JZUFRPX0FMR19UWVBFX0dJVkNJUEhFUikgeworCQlpZiAoKGFsZy0+Y3JhX2ZsYWdzIF4gdHlwZSBeIH5tYXNrKSAmIENSWVBUT19BTEdfVEVTVEVEKSB7CisJCQljcnlwdG9fbW9kX3B1dChhbGcpOworCQkJYWxnID0gRVJSX1BUUigtRU5PRU5UKTsKKwkJfQorCQlyZXR1cm4gYWxnOworCX0KKworCUJVR19PTighKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCQkgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiA/IGFsZy0+Y3JhX2Jsa2NpcGhlci5pdnNpemUgOgorCQkJCQkgICAgIGFsZy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplKSk7CisKIAlyZXR1cm4gRVJSX1BUUihjcnlwdG9fZ2l2Y2lwaGVyX2RlZmF1bHQoYWxnLCB0eXBlLCBtYXNrKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hZWFkLmMgYi9jcnlwdG8vYWVhZC5jCmluZGV4IDNhNmYzZjUuLmQ5YWE3MzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZWFkLmMKKysrIGIvY3J5cHRvL2FlYWQuYwpAQCAtNDIyLDYgKzQyMiwyMiBAQAogCWlmICghYWxnLT5jcmFfYWVhZC5pdnNpemUpCiAJCXJldHVybiBhbGc7CiAKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlIHwgQ1JZUFRPX0FMR19URVNURUQsCisJCQkJICAgIG1hc2sgJiB+Q1JZUFRPX0FMR19URVNURUQpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIGFsZzsKKworCWlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWVhZF90eXBlKSB7CisJCWlmICgoYWxnLT5jcmFfZmxhZ3MgXiB0eXBlIF4gfm1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpIHsKKwkJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCQlhbGcgPSBFUlJfUFRSKC1FTk9FTlQpOworCQl9CisJCXJldHVybiBhbGc7CisJfQorCisJQlVHX09OKCFhbGctPmNyYV9hZWFkLml2c2l6ZSk7CisKIAlyZXR1cm4gRVJSX1BUUihjcnlwdG9fbml2YWVhZF9kZWZhdWx0KGFsZywgdHlwZSwgbWFzaykpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYm9zcy5jIGIvY3J5cHRvL2FsZ2Jvc3MuYwppbmRleCA0NjAxZTQyNi4uNjkwNmY5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2Jvc3MuYworKysgYi9jcnlwdG8vYWxnYm9zcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjA2LDggKzIwNiw3IEBACiAJdTMyIHR5cGUgPSBwYXJhbS0+dHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghKCh0eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUikgJgotCSAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikpCisJaWYgKHR5cGUgJiBDUllQVE9fQUxHX1RFU1RFRCkKIAkJZ290byBza2lwdGVzdDsKIAogCWVyciA9IGFsZ190ZXN0KHBhcmFtLT5kcml2ZXIsIHBhcmFtLT5hbGcsIHR5cGUsIENSWVBUT19BTEdfVEVTVEVEKTsKQEAgLTIyMyw2ICsyMjIsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwogCXN0cnVjdCBjcnlwdG9fdGVzdF9wYXJhbSAqcGFyYW07CisJdTMyIHR5cGU7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBlcnI7CkBAIC0yMzMsNyArMjMzLDE5IEBACiAKIAltZW1jcHkocGFyYW0tPmRyaXZlciwgYWxnLT5jcmFfZHJpdmVyX25hbWUsIHNpemVvZihwYXJhbS0+ZHJpdmVyKSk7CiAJbWVtY3B5KHBhcmFtLT5hbGcsIGFsZy0+Y3JhX25hbWUsIHNpemVvZihwYXJhbS0+YWxnKSk7Ci0JcGFyYW0tPnR5cGUgPSBhbGctPmNyYV9mbGFnczsKKwl0eXBlID0gYWxnLT5jcmFfZmxhZ3M7CisKKwkvKiBUaGlzIHBpZWNlIG9mIGNyYXAgbmVlZHMgdG8gZGlzYXBwZWFyIGludG8gcGVyLXR5cGUgdGVzdCBob29rcy4gKi8KKwlpZiAoKCEoKHR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSKSAmCisJICAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikgJiYKKwkgICAgICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgICBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSID8gYWxnLT5jcmFfYmxrY2lwaGVyLml2c2l6ZSA6CisJCQkJCSAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKSB8fAorCSAgICAoISgodHlwZSBeIENSWVBUT19BTEdfVFlQRV9BRUFEKSAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSAmJgorCSAgICAgYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX25pdmFlYWRfdHlwZSAmJiBhbGctPmNyYV9hZWFkLml2c2l6ZSkpCisJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CisKKwlwYXJhbS0+dHlwZSA9IHR5cGU7CiAKIAl0aHJlYWQgPSBrdGhyZWFkX3J1bihjcnlwdG9tZ3JfdGVzdCwgcGFyYW0sICJjcnlwdG9tZ3JfdGVzdCIpOwogCWlmIChJU19FUlIodGhyZWFkKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hbnNpX2Nwcm5nLmMgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCmluZGV4IDBmYWM4ZmYuLmQ4MGVkNGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnNpX2Nwcm5nLmMKKysrIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwpAQCAtMTMyLDkgKzEzMiwxNSBAQAogCQkJICovCiAJCQlpZiAoIW1lbWNtcChjdHgtPnJhbmRfZGF0YSwgY3R4LT5sYXN0X3JhbmRfZGF0YSwKIAkJCQkJREVGQVVMVF9CTEtfU1opKSB7CisJCQkJaWYgKGZpcHNfZW5hYmxlZCkgeworCQkJCQlwYW5pYygiY3BybmcgJXAgRmFpbGVkIHJlcGV0aXRpb24gY2hlY2shXG4iLAorCQkJCQkJY3R4KTsKKwkJCQl9CisKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJImN0eCAlcCBGYWlsZWQgcmVwZXRpdGlvbiBjaGVjayFcbiIsCiAJCQkJCWN0eCk7CisKIAkJCQljdHgtPmZsYWdzIHw9IFBSTkdfTkVFRF9SRVNFVDsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTMzOCw3ICszNDQsMTYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZjdHgtPnBybmdfbG9jayk7CiAKLQlyZXR1cm4gcmVzZXRfcHJuZ19jb250ZXh0KGN0eCwgTlVMTCwgREVGQVVMVF9QUk5HX0tTWiwgTlVMTCwgTlVMTCk7CisJaWYgKHJlc2V0X3BybmdfY29udGV4dChjdHgsIE5VTEwsIERFRkFVTFRfUFJOR19LU1osIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGFmdGVyIGFsbG9jYXRpb24sIHdlIHNob3VsZCBhbHdheXMgZm9yY2UgdGhlIHVzZXIgdG8gcmVzZXQKKwkgKiBzbyB0aGV5IGRvbid0IGluYWR2ZXJ0ZW50bHkgdXNlIHRoZSBpbnNlY3VyZSBkZWZhdWx0IHZhbHVlcworCSAqIHdpdGhvdXQgc3BlY2lmeWluZyB0aGVtIGludGVudGlhbGx5CisJICovCisJY3R4LT5mbGFncyB8PSBQUk5HX05FRURfUkVTRVQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNwcm5nX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCAzOGEyYmMwLi4zMTRkYWI5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqbGFydmFsOwogCWludCBvazsKIAotCWlmICghKG1hc2sgJiBDUllQVE9fQUxHX1RFU1RFRCkpIHsKKwlpZiAoISgodHlwZSB8IG1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpKSB7CiAJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CiAJCW1hc2sgfD0gQ1JZUFRPX0FMR19URVNURUQ7CiAJfQpAQCAtNDY0LDggKzQ2NCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfYmFzZSk7CiAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3ZvaWQgKmNyeXB0b19jcmVhdGVfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQogewogCWNoYXIgKm1lbTsKIAlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gTlVMTDsKQEAgLTQ5OSw5ICs0OTksOSBAQAogCQljcnlwdG9fc2hvb3RfYWxnKGFsZyk7CiAJa2ZyZWUobWVtKTsKIG91dF9lcnI6Ci0JdGZtID0gRVJSX1BUUihlcnIpOworCW1lbSA9IEVSUl9QVFIoZXJyKTsKIG91dDoKLQlyZXR1cm4gdGZtOworCXJldHVybiBtZW07CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fY3JlYXRlX3RmbSk7CiAKQEAgLTUyNSwxMiArNTI1LDExIEBACiAgKgogICoJSW4gY2FzZSBvZiBlcnJvciB0aGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIHBvaW50ZXIuCiAgKi8KLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAotCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spCit2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICooKmxvb2t1cCkoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXZvaWQgKnRmbTsKIAlpbnQgZXJyOwogCiAJdHlwZSAmPSBmcm9udGVuZC0+bWFza2NsZWFyOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsa2NpcGhlci5jIGIvY3J5cHRvL2Jsa2NpcGhlci5jCmluZGV4IGQ3MGE0MWMuLjkwZDI2YzkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYmxrY2lwaGVyLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWludCBlcnI7CiAKIAl0eXBlID0gY3J5cHRvX3NrY2lwaGVyX3R5cGUodHlwZSk7Ci0JbWFzayA9IGNyeXB0b19za2NpcGhlcl9tYXNrKG1hc2spIHwgQ1JZUFRPX0FMR19HRU5JVjsKKwltYXNrID0gY3J5cHRvX3NrY2lwaGVyX21hc2sobWFzayl8IENSWVBUT19BTEdfR0VOSVY7CiAKIAlhbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSwgdHlwZSwgbWFzayk7CiAJaWYgKElTX0VSUihhbGcpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NoYWluaXYuYyBiL2NyeXB0by9jaGFpbml2LmMKaW5kZXggN2MzN2E0OS4uYmEyMDBiMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NoYWluaXYuYworKysgYi9jcnlwdG8vY2hhaW5pdi5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaD4KICNpbmNsdWRlIDxjcnlwdG8vcm5nLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEzMyw3ICsxMzQsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcXVldWVkID0gc2NoZWR1bGVfd29yaygmY3R4LT5wb3N0cG9uZWQpOworCXF1ZXVlZCA9IHF1ZXVlX3dvcmsoa2NyeXB0b193cSwgJmN0eC0+cG9zdHBvbmVkKTsKIAlCVUdfT04oIXF1ZXVlZCk7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdGQuYyBiL2NyeXB0by9jcnlwdGQuYwppbmRleCBkMjllMDZiLi5kMTRiMjI2IDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRkLmMKKysrIGIvY3J5cHRvL2NyeXB0ZC5jCkBAIC0xMiwzMCArMTIsMzEgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdGQuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNkZWZpbmUgQ1JZUFREX01BWF9RTEVOIDEwMAorI2RlZmluZSBDUllQVERfTUFYX0NQVV9RTEVOIDEwMAogCi1zdHJ1Y3QgY3J5cHRkX3N0YXRlIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4Oworc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgewogCXN0cnVjdCBjcnlwdG9fcXVldWUgcXVldWU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKworc3RydWN0IGNyeXB0ZF9xdWV1ZSB7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKIH07CiAKIHN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4IHsKIAlzdHJ1Y3QgY3J5cHRvX3NwYXduIHNwYXduOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOwogfTsKIAogc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4IHsKQEAgLTU0LDExICs1NSw4NSBAQAogCWNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdGRfc3RhdGUgKmNyeXB0ZF9nZXRfc3RhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyB2b2lkIGNyeXB0ZF9xdWV1ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIGludCBjcnlwdGRfaW5pdF9xdWV1ZShzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IG1heF9jcHVfcWxlbikKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwlxdWV1ZS0+Y3B1X3F1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlKTsKKwlpZiAoIXF1ZXVlLT5jcHVfcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwkJY3J5cHRvX2luaXRfcXVldWUoJmNwdV9xdWV1ZS0+cXVldWUsIG1heF9jcHVfcWxlbik7CisJCUlOSVRfV09SSygmY3B1X3F1ZXVlLT53b3JrLCBjcnlwdGRfcXVldWVfd29ya2VyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0ZF9maW5pX3F1ZXVlKHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQoreworCWludCBjcHU7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwkJQlVHX09OKGNwdV9xdWV1ZS0+cXVldWUucWxlbik7CisJfQorCWZyZWVfcGVyY3B1KHF1ZXVlLT5jcHVfcXVldWUpOworfQorCitzdGF0aWMgaW50IGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3Qoc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUsCisJCQkJICBzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJaW50IGNwdSwgZXJyOworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwllcnIgPSBjcnlwdG9fZW5xdWV1ZV9yZXF1ZXN0KCZjcHVfcXVldWUtPnF1ZXVlLCByZXF1ZXN0KTsKKwlxdWV1ZV93b3JrX29uKGNwdSwga2NyeXB0b193cSwgJmNwdV9xdWV1ZS0+d29yayk7CisJcHV0X2NwdSgpOworCisJcmV0dXJuIGVycjsKK30KKworLyogQ2FsbGVkIGluIHdvcmtxdWV1ZSBjb250ZXh0LCBkbyBvbmUgcmVhbCBjcnlwdGlvbiB3b3JrICh2aWEKKyAqIHJlcS0+Y29tcGxldGUpIGFuZCByZXNjaGVkdWxlIGl0c2VsZiBpZiB0aGVyZSBhcmUgbW9yZSB3b3JrIHRvCisgKiBkby4gKi8KK3N0YXRpYyB2b2lkIGNyeXB0ZF9xdWV1ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsICpiYWNrbG9nOworCisJY3B1X3F1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlLCB3b3JrKTsKKwkvKiBPbmx5IGhhbmRsZSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgdG8gYXZvaWQgaG9nZ2luZyBjcnlwdG8KKwkgKiB3b3JrcXVldWUuIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgaXMgdXNlZCB0byBwcmV2ZW50CisJICogYmVpbmcgcHJlZW1wdGVkIGJ5IGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3QoKSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCWJhY2tsb2cgPSBjcnlwdG9fZ2V0X2JhY2tsb2coJmNwdV9xdWV1ZS0+cXVldWUpOworCXJlcSA9IGNyeXB0b19kZXF1ZXVlX3JlcXVlc3QoJmNwdV9xdWV1ZS0+cXVldWUpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJaWYgKGJhY2tsb2cpCisJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csIC1FSU5QUk9HUkVTUyk7CisJcmVxLT5jb21wbGV0ZShyZXEsIDApOworCisJaWYgKGNwdV9xdWV1ZS0+cXVldWUucWxlbikKKwkJcXVldWVfd29yayhrY3J5cHRvX3dxLCAmY3B1X3F1ZXVlLT53b3JrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpjcnlwdGRfZ2V0X3F1ZXVlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9IGNyeXB0b190Zm1fYWxnX2luc3RhbmNlKHRmbSk7CiAJc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggKmljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwotCXJldHVybiBpY3R4LT5zdGF0ZTsKKwlyZXR1cm4gaWN0eC0+cXVldWU7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2Jsa2NpcGhlcl9zZXRrZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpwYXJlbnQsCkBAIC0xMzAsMTkgKzIwNSwxMyBAQAogewogCXN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPQotCQljcnlwdGRfZ2V0X3N0YXRlKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pKTsKLQlpbnQgZXJyOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOwogCisJcXVldWUgPSBjcnlwdGRfZ2V0X3F1ZXVlKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pKTsKIAlyY3R4LT5jb21wbGV0ZSA9IHJlcS0+YmFzZS5jb21wbGV0ZTsKIAlyZXEtPmJhc2UuY29tcGxldGUgPSBjb21wbGV0ZTsKIAotCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCWVyciA9IGFibGtjaXBoZXJfZW5xdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUsIHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCXdha2VfdXBfcHJvY2VzcyhzdGF0ZS0+dGFzayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRkX2VucXVldWVfcmVxdWVzdChxdWV1ZSwgJnJlcS0+YmFzZSk7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2Jsa2NpcGhlcl9lbmNyeXB0X2VucXVldWUoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQpAQCAtMTc2LDIxICsyNDUsMTIgQEAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9ibGtjaXBoZXJfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPSBjcnlwdGRfZ2V0X3N0YXRlKHRmbSk7Ci0JaW50IGFjdGl2ZTsKLQotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7Ci0JYWN0aXZlID0gYWJsa2NpcGhlcl90Zm1faW5fcXVldWUoJnN0YXRlLT5xdWV1ZSwKLQkJCQkJIF9fY3J5cHRvX2FibGtjaXBoZXJfY2FzdCh0Zm0pKTsKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0KLQlCVUdfT04oYWN0aXZlKTsKIAogCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjdHgtPmNoaWxkKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCQkJICAgICBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwkJCQkJCSAgICAgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKIAlzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCAqY3R4OwpAQCAtMjEzLDcgKzI3Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9pbnN0OwogCi0JY3R4LT5zdGF0ZSA9IHN0YXRlOworCWN0eC0+cXVldWUgPSBxdWV1ZTsKIAogCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOwogCkBAIC0yMzEsNyArMjkxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19ibGtjaXBoZXIoCi0Jc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTI0MSw3ICszMDEsNyBAQAogCWlmIChJU19FUlIoYWxnKSkKIAkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CiAKLQlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgc3RhdGUpOworCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBxdWV1ZSk7CiAJaWYgKElTX0VSUihpbnN0KSkKIAkJZ290byBvdXRfcHV0X2FsZzsKIApAQCAtMjg5LDE1ICszNDksNiBAQAogc3RhdGljIHZvaWQgY3J5cHRkX2hhc2hfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gY3J5cHRkX2dldF9zdGF0ZSh0Zm0pOwotCWludCBhY3RpdmU7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWFjdGl2ZSA9IGFoYXNoX3RmbV9pbl9xdWV1ZSgmc3RhdGUtPnF1ZXVlLAotCQkJCV9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKSk7Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0JQlVHX09OKGFjdGl2ZSk7CiAKIAljcnlwdG9fZnJlZV9oYXNoKGN0eC0+Y2hpbGQpOwogfQpAQCAtMzIzLDE5ICszNzQsMTMgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRkX2hhc2hfcmVxdWVzdF9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9Ci0JCWNyeXB0ZF9nZXRfc3RhdGUoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKLQlpbnQgZXJyOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlID0KKwkJY3J5cHRkX2dldF9xdWV1ZShjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwogCiAJcmN0eC0+Y29tcGxldGUgPSByZXEtPmJhc2UuY29tcGxldGU7CiAJcmVxLT5iYXNlLmNvbXBsZXRlID0gY29tcGxldGU7CiAKLQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQllcnIgPSBhaGFzaF9lbnF1ZXVlX3JlcXVlc3QoJnN0YXRlLT5xdWV1ZSwgcmVxKTsKLQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0Jd2FrZV91cF9wcm9jZXNzKHN0YXRlLT50YXNrKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KHF1ZXVlLCAmcmVxLT5iYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRkX2hhc2hfaW5pdChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcV9hc3luYywgaW50IGVycikKQEAgLTQ2OCw3ICs1MTMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jX2hhc2goCi0Jc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTQ3OCw3ICs1MjMsNyBAQAogCWlmIChJU19FUlIoYWxnKSkKIAkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKIAotCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBzdGF0ZSk7CisJaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHF1ZXVlKTsKIAlpZiAoSVNfRVJSKGluc3QpKQogCQlnb3RvIG91dF9wdXRfYWxnOwogCkBAIC01MDIsNyArNTQ3LDcgQEAKIAlyZXR1cm4gaW5zdDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdGRfc3RhdGUgc3RhdGU7CitzdGF0aWMgc3RydWN0IGNyeXB0ZF9xdWV1ZSBxdWV1ZTsKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCiB7CkBAIC01MTQsOSArNTU5LDkgQEAKIAogCXN3aXRjaCAoYWxndC0+dHlwZSAmIGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUjoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19ibGtjaXBoZXIodGIsICZzdGF0ZSk7CisJCXJldHVybiBjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKHRiLCAmcXVldWUpOwogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0RJR0VTVDoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19oYXNoKHRiLCAmc3RhdGUpOworCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2hhc2godGIsICZxdWV1ZSk7CiAJfQogCiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC01MzcsODIgKzU4Miw1OCBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0ZF9jcmVhdGVfdGhyZWFkKHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlLAotCQkJCSAgICAgICBpbnQgKCpmbikodm9pZCAqZGF0YSksIGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0YXRlLT5sb2NrKTsKLQltdXRleF9pbml0KCZzdGF0ZS0+bXV0ZXgpOwotCWNyeXB0b19pbml0X3F1ZXVlKCZzdGF0ZS0+cXVldWUsIENSWVBURF9NQVhfUUxFTik7CisJY2hhciBjcnlwdGRfYWxnX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm07CiAKLQlzdGF0ZS0+dGFzayA9IGt0aHJlYWRfcnVuKGZuLCBzdGF0ZSwgbmFtZSk7Ci0JaWYgKElTX0VSUihzdGF0ZS0+dGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHN0YXRlLT50YXNrKTsKKwlpZiAoc25wcmludGYoY3J5cHRkX2FsZ19uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJjcnlwdGQoJXMpIiwgYWxnX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXRmbSA9IGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKGNyeXB0ZF9hbGdfbmFtZSwgdHlwZSwgbWFzayk7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gRVJSX0NBU1QodGZtKTsKKwlpZiAoY3J5cHRvX2FibGtjaXBoZXJfdGZtKHRmbSktPl9fY3J0X2FsZy0+Y3JhX21vZHVsZSAhPSBUSElTX01PRFVMRSkgeworCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKHRmbSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KIAotCXJldHVybiAwOworCXJldHVybiBfX2NyeXB0ZF9hYmxrY2lwaGVyX2Nhc3QodGZtKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNyeXB0ZF9zdG9wX3RocmVhZChzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKK3N0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSkKIHsKLQlCVUdfT04oc3RhdGUtPnF1ZXVlLnFsZW4pOwotCWt0aHJlYWRfc3RvcChzdGF0ZS0+dGFzayk7CisJc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgoJnRmbS0+YmFzZSk7CisJcmV0dXJuIGN0eC0+Y2hpbGQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZCk7CiAKLXN0YXRpYyBpbnQgY3J5cHRkX3RocmVhZCh2b2lkICpkYXRhKQordm9pZCBjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKQogewotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gZGF0YTsKLQlpbnQgc3RvcDsKLQotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCi0JZG8gewotCQlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgKmJhY2tsb2c7Ci0KLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCQliYWNrbG9nID0gY3J5cHRvX2dldF9iYWNrbG9nKCZzdGF0ZS0+cXVldWUpOwotCQlyZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUpOwotCQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0JCXN0b3AgPSBrdGhyZWFkX3Nob3VsZF9zdG9wKCk7Ci0KLQkJaWYgKHN0b3AgfHwgcmVxKSB7Ci0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlpZiAocmVxKSB7Ci0JCQkJaWYgKGJhY2tsb2cpCi0JCQkJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csCi0JCQkJCQkJICAtRUlOUFJPR1JFU1MpOwotCQkJCXJlcS0+Y29tcGxldGUocmVxLCAwKTsKLQkJCX0KLQkJfQotCi0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQotCQlzY2hlZHVsZSgpOwotCX0gd2hpbGUgKCFzdG9wKTsKLQotCXJldHVybiAwOworCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoJnRmbS0+YmFzZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgY3J5cHRkX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gY3J5cHRkX2NyZWF0ZV90aHJlYWQoJnN0YXRlLCBjcnlwdGRfdGhyZWFkLCAiY3J5cHRkIik7CisJZXJyID0gY3J5cHRkX2luaXRfcXVldWUoJnF1ZXVlLCBDUllQVERfTUFYX0NQVV9RTEVOKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdGRfdG1wbCk7CiAJaWYgKGVycikKLQkJa3RocmVhZF9zdG9wKHN0YXRlLnRhc2spOworCQljcnlwdGRfZmluaV9xdWV1ZSgmcXVldWUpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNyeXB0ZF9leGl0KHZvaWQpCiB7Ci0JY3J5cHRkX3N0b3BfdGhyZWFkKCZzdGF0ZSk7CisJY3J5cHRkX2ZpbmlfcXVldWUoJnF1ZXVlKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRkX3RtcGwpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX3dxLmMgYi9jcnlwdG8vY3J5cHRvX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjZjYyNAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jcnlwdG9fd3EuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogV29ya3F1ZXVlIGZvciBjcnlwdG8gc3Vic3lzdGVtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnAuCisgKiAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprY3J5cHRvX3dxOworRVhQT1JUX1NZTUJPTF9HUEwoa2NyeXB0b193cSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0b193cV9pbml0KHZvaWQpCit7CisJa2NyeXB0b193cSA9IGNyZWF0ZV93b3JrcXVldWUoImNyeXB0byIpOworCWlmICh1bmxpa2VseSgha2NyeXB0b193cSkpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvX3dxX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShrY3J5cHRvX3dxKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvX3dxX2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvX3dxX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldvcmtxdWV1ZSBmb3IgY3J5cHRvIHN1YnN5c3RlbSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2dmMTI4bXVsLmMgYi9jcnlwdG8vZ2YxMjhtdWwuYwppbmRleCBlY2JlYWExLi5hOTBkMjYwIDEwMDY0NAotLS0gYS9jcnlwdG8vZ2YxMjhtdWwuYworKysgYi9jcnlwdG8vZ2YxMjhtdWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNiwgUmlrIFNuZWwgPHJzbmVsQGN1YmUuZHluZG5zLm9yZz4KICAqCiAgKiBCYXNlZCBvbiBEciBCcmlhbiBHbGFkbWFuJ3MgKEdQTCdkKSB3b3JrIHB1Ymxpc2hlZCBhdAotICogaHR0cDovL2ZwLmdsYWRtYW4ucGx1cy5jb20vY3J5cHRvZ3JhcGh5X3RlY2hub2xvZ3kvaW5kZXguaHRtCisgKiBodHRwOi8vZ2xhZG1hbi5wbHVzaG9zdC5jby51ay9vbGRzaXRlL2NyeXB0b2dyYXBoeV90ZWNobm9sb2d5L2luZGV4LnBocAogICogU2VlIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGJlbG93LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDNjMTlhMjcuLmZjNzZlMWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0xMDksOCArMTA5LDEwIEBACiB2b2lkIGNyeXB0b19zaG9vdF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CiBzdHJ1Y3QgY3J5cHRvX3RmbSAqX19jcnlwdG9fYWxsb2NfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIHUzMiB0eXBlLAogCQkJCSAgICAgIHUzMiBtYXNrKTsKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7Cit2b2lkICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7Cit2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIAogaW50IGNyeXB0b19yZWdpc3Rlcl9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAogCQkJICAgICBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wY29tcHJlc3MuYyBiL2NyeXB0by9wY29tcHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTlhNGFmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3Bjb21wcmVzcy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBQYXJ0aWFsIChkZSljb21wcmVzc2lvbiBvcGVyYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisKK3N0YXRpYyBpbnQgY3J5cHRvX3Bjb21wX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19wY29tcF9leHRzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQoreworCXJldHVybiBhbGctPmNyYV9jdHhzaXplOworfQorCitzdGF0aWMgaW50IGNyeXB0b19wY29tcF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fcGNvbXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCisJX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworc3RhdGljIHZvaWQgY3J5cHRvX3Bjb21wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXNlcV9wcmludGYobSwgInR5cGUgICAgICAgICA6IHBjb21wXG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9fcGNvbXBfdHlwZSA9IHsKKwkuZXh0c2l6ZQk9IGNyeXB0b19wY29tcF9leHRzaXplLAorCS5pbml0CQk9IGNyeXB0b19wY29tcF9pbml0LAorCS5pbml0X3RmbQk9IGNyeXB0b19wY29tcF9pbml0X3RmbSwKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCS5zaG93CQk9IGNyeXB0b19wY29tcF9zaG93LAorI2VuZGlmCisJLm1hc2tjbGVhcgk9IH5DUllQVE9fQUxHX1RZUEVfTUFTSywKKwkubWFza3NldAk9IENSWVBUT19BTEdfVFlQRV9NQVNLLAorCS50eXBlCQk9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MsCisJLnRmbXNpemUJPSBvZmZzZXRvZihzdHJ1Y3QgY3J5cHRvX3Bjb21wLCBiYXNlKSwKK307CisKK3N0cnVjdCBjcnlwdG9fcGNvbXAgKmNyeXB0b19hbGxvY19wY29tcChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCisJCQkJCXUzMiBtYXNrKQoreworCXJldHVybiBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3Bjb21wX3R5cGUsIHR5cGUsIG1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX3Bjb21wKTsKKworaW50IGNyeXB0b19yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmJhc2UgPSAmYWxnLT5iYXNlOworCisJYmFzZS0+Y3JhX3R5cGUgPSAmY3J5cHRvX3Bjb21wX3R5cGU7CisJYmFzZS0+Y3JhX2ZsYWdzICY9IH5DUllQVE9fQUxHX1RZUEVfTUFTSzsKKwliYXNlLT5jcmFfZmxhZ3MgfD0gQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUzsKKworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKGJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKTsKKworaW50IGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZykKK3sKKwlyZXR1cm4gY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcnRpYWwgKGRlKWNvbXByZXNzaW9uIHR5cGUiKTsKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKaW5kZXggY2FhMzU0Mi4uNjM0OWQ4MyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKQEAgLTIsNyArMiw3IEBACiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBTSEEtMjU2LCBhcyBzcGVjaWZpZWQgaW4KLSAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL3Nocy9zaGEyNTYtMzg0LTUxMi5wZGYKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVE0vY2F2cC9kb2N1bWVudHMvc2hzL3NoYTI1Ni0zODQtNTEyLnBkZgogICoKICAqIFNIQS0yNTYgY29kZSBieSBKZWFuLUx1YyBDb29rZSA8amxjb29rZUBjZXJ0YWlua2V5LmNvbT4uCiAgKgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYXNoLmMgYi9jcnlwdG8vc2hhc2guYwppbmRleCBkNWEyYjYxLi43YTY1OTczIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhc2guYworKysgYi9jcnlwdG8vc2hhc2guYwpAQCAtMTgsMTUgKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3NoYXNoX3R5cGU7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19zaGFzaCAqX19jcnlwdG9fc2hhc2hfY2FzdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCXJldHVybiBjb250YWluZXJfb2YodGZtLCBzdHJ1Y3QgY3J5cHRvX3NoYXNoLCBiYXNlKTsKLX0KLQogI2luY2x1ZGUgImludGVybmFsLmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3NoYXNoX3R5cGU7CisKIHN0YXRpYyBpbnQgc2hhc2hfc2V0a2V5X3VuYWxpZ25lZChzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCiAJCQkJICB1bnNpZ25lZCBpbnQga2V5bGVuKQogewpAQCAtMjgyLDggKzI3Nyw3IEBACiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzaGFzaCA9IF9fY3J5cHRvX3NoYXNoX2Nhc3QoY3J5cHRvX2NyZWF0ZV90Zm0oCi0JCWNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSkpOworCXNoYXNoID0gY3J5cHRvX2NyZWF0ZV90Zm0oY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKTsKIAlpZiAoSVNfRVJSKHNoYXNoKSkgewogCQljcnlwdG9fbW9kX3B1dChjYWxnKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2hhc2gpOwpAQCAtMzkxLDggKzM4NSw3IEBACiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzaGFzaCA9IF9fY3J5cHRvX3NoYXNoX2Nhc3QoY3J5cHRvX2NyZWF0ZV90Zm0oCi0JCWNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSkpOworCXNoYXNoID0gY3J5cHRvX2NyZWF0ZV90Zm0oY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKTsKIAlpZiAoSVNfRVJSKHNoYXNoKSkgewogCQljcnlwdG9fbW9kX3B1dChjYWxnKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2hhc2gpOwpAQCAtNDQyLDggKzQzNSw2IEBACiBzdGF0aWMgaW50IGNyeXB0b19zaGFzaF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQogewotCWlmIChmcm9udGVuZC0+dHlwZSAhPSBDUllQVE9fQUxHX1RZUEVfU0hBU0gpCi0JCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQogCkBAIC00ODIsOCArNDczLDcgQEAKIHN0cnVjdCBjcnlwdG9fc2hhc2ggKmNyeXB0b19hbGxvY19zaGFzaChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCiAJCQkJCXUzMiBtYXNrKQogewotCXJldHVybiBfX2NyeXB0b19zaGFzaF9jYXN0KAotCQljcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3NoYXNoX3R5cGUsIHR5cGUsIG1hc2spKTsKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19zaGFzaF90eXBlLCB0eXBlLCBtYXNrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19zaGFzaCk7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCAyOGE0NWExZS4uYzNjOTEyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL3RjcnlwdC5jCisrKyBiL2NyeXB0by90Y3J5cHQuYwpAQCAtNTMsNyArNTMsNyBAQAogCSJjYXN0NiIsICJhcmM0IiwgIm1pY2hhZWxfbWljIiwgImRlZmxhdGUiLCAiY3JjMzJjIiwgInRlYSIsICJ4dGVhIiwKIAkia2hhemFkIiwgIndwNTEyIiwgIndwMzg0IiwgIndwMjU2IiwgInRuZXByZXMiLCAieGV0YSIsICAiZmNyeXB0IiwKIAkiY2FtZWxsaWEiLCAic2VlZCIsICJzYWxzYTIwIiwgInJtZDEyOCIsICJybWQxNjAiLCAicm1kMjU2IiwgInJtZDMyMCIsCi0JImx6byIsICJjdHMiLCBOVUxMCisJImx6byIsICJjdHMiLCAiemxpYiIsIE5VTEwKIH07CiAKIHN0YXRpYyBpbnQgdGVzdF9jaXBoZXJfamlmZmllcyhzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGludCBlbmMsCkBAIC02NjEsNiArNjYxLDEwIEBACiAJCXRjcnlwdF90ZXN0KCJlY2Ioc2VlZCkiKTsKIAkJYnJlYWs7CiAKKwljYXNlIDQ0OgorCQl0Y3J5cHRfdGVzdCgiemxpYiIpOworCQlicmVhazsKKwogCWNhc2UgMTAwOgogCQl0Y3J5cHRfdGVzdCgiaG1hYyhtZDUpIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuYyBiL2NyeXB0by90ZXN0bWdyLmMKaW5kZXggYTc1ZjExZi4uYjUwYzNjNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuYworKysgYi9jcnlwdG8vdGVzdG1nci5jCkBAIC03Miw2ICs3MiwxMyBAQAogCX0gY29tcCwgZGVjb21wOwogfTsKIAorc3RydWN0IHBjb21wX3Rlc3Rfc3VpdGUgeworCXN0cnVjdCB7CisJCXN0cnVjdCBwY29tcF90ZXN0dmVjICp2ZWNzOworCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJfSBjb21wLCBkZWNvbXA7Cit9OworCiBzdHJ1Y3QgaGFzaF90ZXN0X3N1aXRlIHsKIAlzdHJ1Y3QgaGFzaF90ZXN0dmVjICp2ZWNzOwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTg2LDYgKzkzLDcgQEAKIAkJc3RydWN0IGFlYWRfdGVzdF9zdWl0ZSBhZWFkOwogCQlzdHJ1Y3QgY2lwaGVyX3Rlc3Rfc3VpdGUgY2lwaGVyOwogCQlzdHJ1Y3QgY29tcF90ZXN0X3N1aXRlIGNvbXA7CisJCXN0cnVjdCBwY29tcF90ZXN0X3N1aXRlIHBjb21wOwogCQlzdHJ1Y3QgaGFzaF90ZXN0X3N1aXRlIGhhc2g7CiAJfSBzdWl0ZTsKIH07CkBAIC04OTgsNiArOTA2LDE1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdGVzdF9wY29tcChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCSAgICAgIHN0cnVjdCBwY29tcF90ZXN0dmVjICpjdGVtcGxhdGUsCisJCSAgICAgIHN0cnVjdCBwY29tcF90ZXN0dmVjICpkdGVtcGxhdGUsIGludCBjdGNvdW50LAorCQkgICAgICBpbnQgZHRjb3VudCkKK3sKKwljb25zdCBjaGFyICphbGdvID0gY3J5cHRvX3RmbV9hbGdfZHJpdmVyX25hbWUoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIHJlc3VsdFtDT01QX0JVRl9TSVpFXTsKKwlpbnQgZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3Rjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBjb21wX3JlcXVlc3QgcmVxOworCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX3NldHVwKHRmbSwgY3RlbXBsYXRlW2ldLnBhcmFtcywKKwkJCQkJICAgICAgY3RlbXBsYXRlW2ldLnBhcmFtc2l6ZSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBzZXR1cCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc19pbml0KHRmbSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBpbml0IGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKKworCQlyZXEubmV4dF9pbiA9IGN0ZW1wbGF0ZVtpXS5pbnB1dDsKKwkJcmVxLmF2YWlsX2luID0gY3RlbXBsYXRlW2ldLmlubGVuIC8gMjsKKwkJcmVxLm5leHRfb3V0ID0gcmVzdWx0OworCQlyZXEuYXZhaWxfb3V0ID0gY3RlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBBZGQgcmVtYWluaW5nIGlucHV0IGRhdGEgKi8KKwkJcmVxLmF2YWlsX2luICs9IChjdGVtcGxhdGVbaV0uaW5sZW4gKyAxKSAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBQcm92aWRlIHJlbWFpbmluZyBvdXRwdXQgc3BhY2UgKi8KKwkJcmVxLmF2YWlsX291dCArPSBDT01QX0JVRl9TSVpFIC0gY3RlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfZmluYWwodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIGZpbmFsIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmIChDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCAhPSBjdGVtcGxhdGVbaV0ub3V0bGVuKSB7CisJCQlwcl9lcnIoImFsZzogY29tcDogQ29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICVzOiAiCisJCQkgICAgICAgIm91dHB1dCBsZW4gPSAlZCAoZXhwZWN0ZWQgJWQpXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCwKKwkJCSAgICAgICBjdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG1lbWNtcChyZXN1bHQsIGN0ZW1wbGF0ZVtpXS5vdXRwdXQsIGN0ZW1wbGF0ZVtpXS5vdXRsZW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IENvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzXG4iLCBpICsgMSwgYWxnbyk7CisJCQloZXhkdW1wKHJlc3VsdCwgY3RlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBkdGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGNvbXBfcmVxdWVzdCByZXE7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19zZXR1cCh0Zm0sIGR0ZW1wbGF0ZVtpXS5wYXJhbXMsCisJCQkJCQlkdGVtcGxhdGVbaV0ucGFyYW1zaXplKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gc2V0dXAgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX2luaXQodGZtKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gaW5pdCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisKKwkJcmVxLm5leHRfaW4gPSBkdGVtcGxhdGVbaV0uaW5wdXQ7CisJCXJlcS5hdmFpbF9pbiA9IGR0ZW1wbGF0ZVtpXS5pbmxlbiAvIDI7CisJCXJlcS5uZXh0X291dCA9IHJlc3VsdDsKKwkJcmVxLmF2YWlsX291dCA9IGR0ZW1wbGF0ZVtpXS5vdXRsZW4gLyAyOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIEFkZCByZW1haW5pbmcgaW5wdXQgZGF0YSAqLworCQlyZXEuYXZhaWxfaW4gKz0gKGR0ZW1wbGF0ZVtpXS5pbmxlbiArIDEpIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiB1cGRhdGUgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBQcm92aWRlIHJlbWFpbmluZyBvdXRwdXQgc3BhY2UgKi8KKwkJcmVxLmF2YWlsX291dCArPSBDT01QX0JVRl9TSVpFIC0gZHRlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19maW5hbCh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBmaW5hbCBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmIChDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCAhPSBkdGVtcGxhdGVbaV0ub3V0bGVuKSB7CisJCQlwcl9lcnIoImFsZzogY29tcDogRGVjb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlczogb3V0cHV0IGxlbiA9ICVkIChleHBlY3RlZCAlZClcbiIsIGkgKyAxLAorCQkJICAgICAgIGFsZ28sIENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0LAorCQkJICAgICAgIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobWVtY21wKHJlc3VsdCwgZHRlbXBsYXRlW2ldLm91dHB1dCwgZHRlbXBsYXRlW2ldLm91dGxlbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogRGVjb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlc1xuIiwgaSArIDEsIGFsZ28pOworCQkJaGV4ZHVtcChyZXN1bHQsIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhbGdfdGVzdF9hZWFkKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCiAJCQkgdTMyIHR5cGUsIHUzMiBtYXNrKQogewpAQCAtMTAwNyw2ICsxMTY4LDI4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBhbGdfdGVzdF9wY29tcChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAorCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b19wY29tcCAqdGZtOworCWludCBlcnI7CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfcGNvbXAoZHJpdmVyLCB0eXBlLCBtYXNrKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJfZXJyKCJhbGc6IHBjb21wOiBGYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsCisJCSAgICAgICBkcml2ZXIsIFBUUl9FUlIodGZtKSk7CisJCXJldHVybiBQVFJfRVJSKHRmbSk7CisJfQorCisJZXJyID0gdGVzdF9wY29tcCh0Zm0sIGRlc2MtPnN1aXRlLnBjb21wLmNvbXAudmVjcywKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5kZWNvbXAudmVjcywKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5jb21wLmNvdW50LAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmRlY29tcC5jb3VudCk7CisKKwljcnlwdG9fZnJlZV9wY29tcCh0Zm0pOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYWxnX3Rlc3RfaGFzaChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAogCQkJIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKQEAgLTE4MzUsNiArMjAxOCwyMSBAQAogCQkJCX0KIAkJCX0KIAkJfQorCX0sIHsKKwkJLmFsZyA9ICJ6bGliIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9wY29tcCwKKwkJLnN1aXRlID0geworCQkJLnBjb21wID0geworCQkJCS5jb21wID0geworCQkJCQkudmVjcyA9IHpsaWJfY29tcF90dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gWkxJQl9DT01QX1RFU1RfVkVDVE9SUworCQkJCX0sCisJCQkJLmRlY29tcCA9IHsKKwkJCQkJLnZlY3MgPSB6bGliX2RlY29tcF90dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gWkxJQl9ERUNPTVBfVEVTVF9WRUNUT1JTCisJCQkJfQorCQkJfQorCQl9CiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuaCBiL2NyeXB0by90ZXN0bWdyLmgKaW5kZXggMTMyOTUzZS4uNTI2ZjAwYSAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuaAorKysgYi9jcnlwdG8vdGVzdG1nci5oCkBAIC0xNSw2ICsxNSwxMSBAQAogI2lmbmRlZiBfQ1JZUFRPX1RFU1RNR1JfSAogI2RlZmluZSBfQ1JZUFRPX1RFU1RNR1JfSAogCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCiAjZGVmaW5lIE1BWF9ESUdFU1RfU0laRQkJNjQKICNkZWZpbmUgTUFYX1RBUAkJCTgKIApAQCAtODM0NywxMCArODM1MiwxOSBAQAogCWNoYXIgb3V0cHV0W0NPTVBfQlVGX1NJWkVdOwogfTsKIAorc3RydWN0IHBjb21wX3Rlc3R2ZWMgeworCXZvaWQgKnBhcmFtczsKKwl1bnNpZ25lZCBpbnQgcGFyYW1zaXplOworCWludCBpbmxlbiwgb3V0bGVuOworCWNoYXIgaW5wdXRbQ09NUF9CVUZfU0laRV07CisJY2hhciBvdXRwdXRbQ09NUF9CVUZfU0laRV07Cit9OworCiAvKgogICogRGVmbGF0ZSB0ZXN0IHZlY3RvcnMgKG51bGwtdGVybWluYXRlZCBzdHJpbmdzKS4KICAqIFBhcmFtczogd2luYml0cz0tMTEsIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgTUFYX01FTV9MRVZFTC4KICAqLworCiAjZGVmaW5lIERFRkxBVEVfQ09NUF9URVNUX1ZFQ1RPUlMgMgogI2RlZmluZSBERUZMQVRFX0RFQ09NUF9URVNUX1ZFQ1RPUlMgMgogCkBAIC04NDI2LDYgKzg0NDAsMTM5IEBACiAJfSwKIH07CiAKKyNkZWZpbmUgWkxJQl9DT01QX1RFU1RfVkVDVE9SUyAyCisjZGVmaW5lIFpMSUJfREVDT01QX1RFU1RfVkVDVE9SUyAyCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXN0cnVjdCBubGF0dHIgbmxhOworCWludCB2YWw7Cit9IGRlZmxhdGVfY29tcF9wYXJhbXNbXSA9IHsKKwl7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9MRVZFTCwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX01FVEhPRCwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZMQVRFRCwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9XSU5ET1dCSVRTLAorCQl9LAorCQkudmFsCQkJPSAtMTEsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfTUVNTEVWRUwsCisJCX0sCisJCS52YWwJCQk9IE1BWF9NRU1fTEVWRUwsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfU1RSQVRFR1ksCisJCX0sCisJCS52YWwJCQk9IFpfREVGQVVMVF9TVFJBVEVHWSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdHJ1Y3QgbmxhdHRyIG5sYTsKKwlpbnQgdmFsOworfSBkZWZsYXRlX2RlY29tcF9wYXJhbXNbXSA9IHsKKwl7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfREVDT01QX1dJTkRPV0JJVFMsCisJCX0sCisJCS52YWwJCQk9IC0xMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBjb21wX3Rlc3R2ZWMgemxpYl9jb21wX3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkucGFyYW1zID0gJmRlZmxhdGVfY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9jb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDcwLAorCQkub3V0bGVuCT0gMzgsCisJCS5pbnB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJCS5vdXRwdXQJPSAiXHhmM1x4Y2FceGNmXHhjY1x4NTNceDI4XHgyZFx4NTYiCisJCQkgICJceGM4XHhjYlx4MmZceDU3XHg0OFx4Y2NceDRiXHg1MSIKKwkJCSAgIlx4MjhceGNlXHg0OFx4MmNceDRhXHg1NVx4MjhceGM5IgorCQkJICAiXHg0OFx4NTVceDI4XHhjZVx4NGZceDJiXHgyOVx4MDciCisJCQkgICJceDcxXHhiY1x4MDhceDJiXHgwMVx4MDAiLAorCX0sIHsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2NvbXBfcGFyYW1zLAorCQkucGFyYW1zaXplID0gc2l6ZW9mKGRlZmxhdGVfY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAxOTEsCisJCS5vdXRsZW4JPSAxMjIsCisJCS5pbnB1dAk9ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBhIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgREVGTEFURSIKKwkJCSJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKKwkJCSJ0aGUgREVGTEFURSBhbGdvcml0aG0gdG8gdGhlIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wuIiwKKwkJLm91dHB1dAk9ICJceDVkXHg4ZFx4MzFceDBlXHhjMlx4MzBceDEwXHgwNCIKKwkJCSAgIlx4YmZceGIyXHgyZlx4YzhceDFmXHgxMFx4MDRceDA5IgorCQkJICAiXHg4OVx4YzJceDg1XHgzZlx4NzBceGIxXHgyZlx4ZjgiCisJCQkgICJceDI0XHhkYlx4NjdceGQ5XHg0N1x4YzFceGVmXHg0OSIKKwkJCSAgIlx4NjhceDEyXHg1MVx4YWVceDc2XHg2N1x4ZDZceDI3IgorCQkJICAiXHgxOVx4ODhceDFhXHhkZVx4ODVceGFiXHgyMVx4ZjIiCisJCQkgICJceDA4XHg1ZFx4MTZceDFlXHgyMFx4MDRceDJkXHhhZCIKKwkJCSAgIlx4ZjNceDE4XHhhMlx4MTVceDg1XHgyZFx4NjlceGM0IgorCQkJICAiXHg0Mlx4ODNceDIzXHhiNlx4NmNceDg5XHg3MVx4OWIiCisJCQkgICJceGVmXHhjZlx4OGJceDlmXHhjZlx4MzNceGNhXHgyZiIKKwkJCSAgIlx4ZWRceDYyXHhhOVx4NGNceDgwXHhmZlx4MTNceGFmIgorCQkJICAiXHg1Mlx4MzdceGVkXHgwZVx4NTJceDZiXHg1OVx4MDIiCisJCQkgICJceGQ5XHg0ZVx4ZThceDdhXHg3Nlx4MWRceDAyXHg5OCIKKwkJCSAgIlx4ZmVceDhhXHg4N1x4ODNceGEzXHg0Zlx4NTZceDhhIgorCQkJICAiXHhiOFx4OWVceDhlXHg1Y1x4NTdceGQzXHhhMFx4NzkiCisJCQkgICJceGZhXHgwMiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB6bGliX2RlY29tcF90dl90ZW1wbGF0ZVtdID0geworCXsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2RlY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9kZWNvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMTIyLAorCQkub3V0bGVuCT0gMTkxLAorCQkuaW5wdXQJPSAiXHg1ZFx4OGRceDMxXHgwZVx4YzJceDMwXHgxMFx4MDQiCisJCQkgICJceGJmXHhiMlx4MmZceGM4XHgxZlx4MTBceDA0XHgwOSIKKwkJCSAgIlx4ODlceGMyXHg4NVx4M2ZceDcwXHhiMVx4MmZceGY4IgorCQkJICAiXHgyNFx4ZGJceDY3XHhkOVx4NDdceGMxXHhlZlx4NDkiCisJCQkgICJceDY4XHgxMlx4NTFceGFlXHg3Nlx4NjdceGQ2XHgyNyIKKwkJCSAgIlx4MTlceDg4XHgxYVx4ZGVceDg1XHhhYlx4MjFceGYyIgorCQkJICAiXHgwOFx4NWRceDE2XHgxZVx4MjBceDA0XHgyZFx4YWQiCisJCQkgICJceGYzXHgxOFx4YTJceDE1XHg4NVx4MmRceDY5XHhjNCIKKwkJCSAgIlx4NDJceDgzXHgyM1x4YjZceDZjXHg4OVx4NzFceDliIgorCQkJICAiXHhlZlx4Y2ZceDhiXHg5Zlx4Y2ZceDMzXHhjYVx4MmYiCisJCQkgICJceGVkXHg2Mlx4YTlceDRjXHg4MFx4ZmZceDEzXHhhZiIKKwkJCSAgIlx4NTJceDM3XHhlZFx4MGVceDUyXHg2Ylx4NTlceDAyIgorCQkJICAiXHhkOVx4NGVceGU4XHg3YVx4NzZceDFkXHgwMlx4OTgiCisJCQkgICJceGZlXHg4YVx4ODdceDgzXHhhM1x4NGZceDU2XHg4YSIKKwkJCSAgIlx4YjhceDllXHg4ZVx4NWNceDU3XHhkM1x4YTBceDc5IgorCQkJICAiXHhmYVx4MDIiLAorCQkub3V0cHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBERUZMQVRFIgorCQkJImNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gb2YgIgorCQkJInRoZSBERUZMQVRFIGFsZ29yaXRobSB0byB0aGUgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbC4iLAorCX0sIHsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2RlY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9kZWNvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMzgsCisJCS5vdXRsZW4JPSA3MCwKKwkJLmlucHV0CT0gIlx4ZjNceGNhXHhjZlx4Y2NceDUzXHgyOFx4MmRceDU2IgorCQkJICAiXHhjOFx4Y2JceDJmXHg1N1x4NDhceGNjXHg0Ylx4NTEiCisJCQkgICJceDI4XHhjZVx4NDhceDJjXHg0YVx4NTVceDI4XHhjOSIKKwkJCSAgIlx4NDhceDU1XHgyOFx4Y2VceDRmXHgyYlx4MjlceDA3IgorCQkJICAiXHg3MVx4YmNceDA4XHgyYlx4MDFceDAwIiwKKwkJLm91dHB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJfSwKK307CisKIC8qCiAgKiBMWk8gdGVzdCB2ZWN0b3JzIChudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncykuCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by96bGliLmMgYi9jcnlwdG8vemxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjA5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vemxpYi5jCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogWmxpYiBhbGdvcml0aG0KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogQmFzZWQgb24gZGVmbGF0ZS5jLCB3aGljaCBpcworICogQ29weXJpZ2h0IChjKSAyMDAzIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRklYTUU6IGRlZmxhdGUgdHJhbnNmb3JtcyB3aWxsIHJlcXVpcmUgdXAgdG8gYSB0b3RhbCBvZiBhYm91dCA0MzZrIG9mIGtlcm5lbAorICogbWVtb3J5IG9uIGkzODYgKDM5MGsgZm9yIGNvbXByZXNzaW9uLCB0aGUgcmVzdCBmb3IgZGVjb21wcmVzc2lvbiksIGFzIHRoZQorICogY3VycmVudCB6bGliIGtlcm5lbCBjb2RlIHVzZXMgYSB3b3JzdCBjYXNlIHByZS1hbGxvY2F0aW9uIHN5c3RlbSBieSBkZWZhdWx0LgorICogVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBzbyB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGlzIHByb3Blcmx5CisgKiByZWxhdGVkIHRvIHRoZSB3aW5iaXRzIGFuZCBtZW1sZXZlbCBwYXJhbWV0ZXJzLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIiVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCisKK3N0cnVjdCB6bGliX2N0eCB7CisJc3RydWN0IHpfc3RyZWFtX3MgY29tcF9zdHJlYW07CisJc3RydWN0IHpfc3RyZWFtX3MgZGVjb21wX3N0cmVhbTsKKwlpbnQgZGVjb21wX3dpbmRvd0JpdHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHpsaWJfY29tcF9leGl0KHN0cnVjdCB6bGliX2N0eCAqY3R4KQoreworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKKworCWlmIChzdHJlYW0tPndvcmtzcGFjZSkgeworCQl6bGliX2RlZmxhdGVFbmQoc3RyZWFtKTsKKwkJdmZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB6bGliX2RlY29tcF9leGl0KHN0cnVjdCB6bGliX2N0eCAqY3R4KQoreworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOworCisJaWYgKHN0cmVhbS0+d29ya3NwYWNlKSB7CisJCXpsaWJfaW5mbGF0ZUVuZChzdHJlYW0pOworCQlrZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgemxpYl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCXpsaWJfY29tcF9leGl0KGN0eCk7CisJemxpYl9kZWNvbXBfZXhpdChjdHgpOworfQorCisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CisJc3RydWN0IG5sYXR0ciAqdGJbWkxJQl9DT01QX01BWCArIDFdOworCXNpemVfdCB3b3Jrc3BhY2VzaXplOworCWludCByZXQ7CisKKwlyZXQgPSBubGFfcGFyc2UodGIsIFpMSUJfQ09NUF9NQVgsIHBhcmFtcywgbGVuLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJemxpYl9jb21wX2V4aXQoY3R4KTsKKworCXdvcmtzcGFjZXNpemUgPSB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpOworCXN0cmVhbS0+d29ya3NwYWNlID0gdm1hbGxvYyh3b3Jrc3BhY2VzaXplKTsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChzdHJlYW0tPndvcmtzcGFjZSwgMCwgd29ya3NwYWNlc2l6ZSk7CisJcmV0ID0gemxpYl9kZWZsYXRlSW5pdDIoc3RyZWFtLAorCQkJCXRiW1pMSUJfQ09NUF9MRVZFTF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTEVWRUxdKQorCQkJCQk6IFpfREVGQVVMVF9DT01QUkVTU0lPTiwKKwkJCQl0YltaTElCX0NPTVBfTUVUSE9EXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9NRVRIT0RdKQorCQkJCQk6IFpfREVGTEFURUQsCisJCQkJdGJbWkxJQl9DT01QX1dJTkRPV0JJVFNdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX1dJTkRPV0JJVFNdKQorCQkJCQk6IE1BWF9XQklUUywKKwkJCQl0YltaTElCX0NPTVBfTUVNTEVWRUxdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX01FTUxFVkVMXSkKKwkJCQkJOiBERUZfTUVNX0xFVkVMLAorCQkJCXRiW1pMSUJfQ09NUF9TVFJBVEVHWV0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfU1RSQVRFR1ldKQorCQkJCQk6IFpfREVGQVVMVF9TVFJBVEVHWSk7CisJaWYgKHJldCAhPSBaX09LKSB7CisJCXZmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcmV0ID0gemxpYl9kZWZsYXRlUmVzZXQoc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5jb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2RlZmxhdGUoc3RyZWFtLCBaX05PX0ZMVVNIKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgWl9PSzoKKwkJYnJlYWs7CisKKwljYXNlIFpfQlVGX0VSUk9SOgorCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGNvdWxkIG5vdCBtYWtlIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfZGVmbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOworCXN0cnVjdCBubGF0dHIgKnRiW1pMSUJfREVDT01QX01BWCArIDFdOworCWludCByZXQgPSAwOworCisJcmV0ID0gbmxhX3BhcnNlKHRiLCBaTElCX0RFQ09NUF9NQVgsIHBhcmFtcywgbGVuLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJemxpYl9kZWNvbXBfZXhpdChjdHgpOworCisJY3R4LT5kZWNvbXBfd2luZG93Qml0cyA9IHRiW1pMSUJfREVDT01QX1dJTkRPV0JJVFNdCisJCQkJID8gbmxhX2dldF91MzIodGJbWkxJQl9ERUNPTVBfV0lORE9XQklUU10pCisJCQkJIDogREVGX1dCSVRTOworCisJc3RyZWFtLT53b3Jrc3BhY2UgPSBremFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCksIEdGUF9LRVJORUwpOworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gemxpYl9pbmZsYXRlSW5pdDIoc3RyZWFtLCBjdHgtPmRlY29tcF93aW5kb3dCaXRzKTsKKwlpZiAocmV0ICE9IFpfT0spIHsKKwkJa2ZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcmV0ID0gemxpYl9pbmZsYXRlUmVzZXQoc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlicmVhazsKKworCWNhc2UgWl9CVUZfRVJST1I6CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgY291bGQgbm90IG1ha2UgcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlpZiAoZGN0eC0+ZGVjb21wX3dpbmRvd0JpdHMgPCAwKSB7CisJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIGEgYnVnIGluIHpsaWIsIHdoaWNoIHNvbWV0aW1lcyB3YW50cyB0byB0YXN0ZSBhbgorCQkgKiBleHRyYSBieXRlIHdoZW4gYmVpbmcgdXNlZCBpbiB0aGUgKHVuZG9jdW1lbnRlZCkgcmF3IGRlZmxhdGUKKwkJICogbW9kZS4gKEZyb20gVVNBR0kpLgorCQkgKi8KKwkJaWYgKHJldCA9PSBaX09LICYmICFzdHJlYW0tPmF2YWlsX2luICYmIHN0cmVhbS0+YXZhaWxfb3V0KSB7CisJCQljb25zdCB2b2lkICpzYXZlZF9uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCQkJdTggemVyb3N0dWZmID0gMDsKKworCQkJc3RyZWFtLT5uZXh0X2luID0gJnplcm9zdHVmZjsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSAxOworCQkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCQkJc3RyZWFtLT5uZXh0X2luID0gc2F2ZWRfbmV4dF9pbjsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSAwOworCQl9CisJfSBlbHNlCisJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlwcl9kZWJ1ZygiemxpYl9pbmZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY29tcF9hbGcgemxpYl9hbGcgPSB7CisJLmNvbXByZXNzX3NldHVwCQk9IHpsaWJfY29tcHJlc3Nfc2V0dXAsCisJLmNvbXByZXNzX2luaXQJCT0gemxpYl9jb21wcmVzc19pbml0LAorCS5jb21wcmVzc191cGRhdGUJPSB6bGliX2NvbXByZXNzX3VwZGF0ZSwKKwkuY29tcHJlc3NfZmluYWwJCT0gemxpYl9jb21wcmVzc19maW5hbCwKKwkuZGVjb21wcmVzc19zZXR1cAk9IHpsaWJfZGVjb21wcmVzc19zZXR1cCwKKwkuZGVjb21wcmVzc19pbml0CT0gemxpYl9kZWNvbXByZXNzX2luaXQsCisJLmRlY29tcHJlc3NfdXBkYXRlCT0gemxpYl9kZWNvbXByZXNzX3VwZGF0ZSwKKwkuZGVjb21wcmVzc19maW5hbAk9IHpsaWJfZGVjb21wcmVzc19maW5hbCwKKworCS5iYXNlCQkJPSB7CisJCS5jcmFfbmFtZQk9ICJ6bGliIiwKKwkJLmNyYV9mbGFncwk9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MsCisJCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgemxpYl9jdHgpLAorCQkuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX2luaXQJPSB6bGliX2luaXQsCisJCS5jcmFfZXhpdAk9IHpsaWJfZXhpdCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB6bGliX21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9wY29tcCgmemxpYl9hbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgemxpYl9tb2RfZmluaSh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKCZ6bGliX2FsZyk7Cit9CisKK21vZHVsZV9pbml0KHpsaWJfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoemxpYl9tb2RfZmluaSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWmxpYiBDb21wcmVzc2lvbiBBbGdvcml0aG0iKTsKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKaW5kZXggYzNlODQxZi4uYWIwYWZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF90YWJsZQorICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZQogICoKICAqIFBBUkFNRVRFUlM6ICBTaWduYXR1cmUgICAgICAgICAgIC0gQUNQSSBzaWduYXR1cmUgb2YgbmVlZGVkIHRhYmxlCiAgKiAgICAgICAgICAgICAgSW5zdGFuY2UgICAgICAgICAgICAtIFdoaWNoIGluc3RhbmNlIChmb3IgU1NEVHMpCkBAIC0zNzcsOCArMzc3LDkgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwotYWNwaV9nZXRfdGFibGUoY2hhciAqc2lnbmF0dXJlLAotCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSkKK2FjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShjaGFyICpzaWduYXR1cmUsCisJICAgICAgIHUzMiBpbnN0YW5jZSwgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqb3V0X3RhYmxlLAorCSAgICAgICBhY3BpX3NpemUgKnRibF9zaXplKQogewogICAgICAgIHUzMiBpOwogICAgICAgIHUzMiBqOwpAQCAtNDA4LDYgKzQwOSw3IEBACiAJCSAgICBhY3BpX3RiX3ZlcmlmeV90YWJsZSgmYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXSk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQkJKm91dF90YWJsZSA9IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ucG9pbnRlcjsKKwkJCSp0Ymxfc2l6ZSA9IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ubGVuZ3RoOwogCQl9CiAKIAkJaWYgKCFhY3BpX2dibF9wZXJtYW5lbnRfbW1hcCkgewpAQCAtNDIwLDYgKzQyMiwxNSBAQAogCXJldHVybiAoQUVfTk9UX0ZPVU5EKTsKIH0KIAorYWNwaV9zdGF0dXMKK2FjcGlfZ2V0X3RhYmxlKGNoYXIgKnNpZ25hdHVyZSwKKwkgICAgICAgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKipvdXRfdGFibGUpCit7CisJYWNwaV9zaXplIHRibF9zaXplOworCisJcmV0dXJuIGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShzaWduYXR1cmUsCisJCSAgICAgICBpbnN0YW5jZSwgb3V0X3RhYmxlLCAmdGJsX3NpemUpOworfQogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3RhYmxlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDc2NWZkMWM1Li5iZWU2NGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC03NTgsOCArNzU4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlleHRlcm4gYWNwaV9zdGF0dXMgYWNwaV9vc19pbml0aWFsaXplMSh2b2lkKTsKIAotCi0Jc3RhdHVzID0gYWNwaV9vc19pbml0aWFsaXplMSgpOworCWFjcGlfb3NfaW5pdGlhbGl6ZTEoKTsKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfZW5hYmxlX3N1YnN5c3RlbShBQ1BJX05PX0hBUkRXQVJFX0lOSVQgfCBBQ1BJX05PX0FDUElfRU5BQkxFKTsKQEAgLTc2OSwxMiArNzY4LDYgQEAKIAkJZ290byBlcnJvcjE7CiAJfQogCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKLQkJICAgICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBBQ1BJIE9TIG9iamVjdHNcbiIpOwotCQlnb3RvIGVycm9yMTsKLQl9Ci0KIAkvKgogCSAqIEFDUEkgMi4wIHJlcXVpcmVzIHRoZSBFQyBkcml2ZXIgdG8gYmUgbG9hZGVkIGFuZCB3b3JrIGJlZm9yZQogCSAqIHRoZSBFQyBkZXZpY2UgaXMgZm91bmQgaW4gdGhlIG5hbWVzcGFjZSAoaS5lLiBiZWZvcmUgYWNwaV9pbml0aWFsaXplX29iamVjdHMoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggMzUwOTRmMjMwLi43YWY3ZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQlzaXplb2Yoc3RydWN0IGRvY2tfc3RhdGlvbiAqKSk7CiAKIAkvKiB3ZSB3YW50IHRoZSBkb2NrIGRldmljZSB0byBzZW5kIHVldmVudHMgKi8KLQlkb2NrX2RldmljZS0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJmRvY2tfZGV2aWNlLT5kZXYsIDApOwogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJZG9ja19zdGF0aW9uLT5mbGFncyB8PSBET0NLX0lTX0RPQ0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCmluZGV4IDBjMjRiZDQuLmFlYjdlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC0yMzUsMTEgKzIzNSw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcmVzdWx0ID0KLQkgICAgZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBhY3BpX2V2ZW50X21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiRmFpbGVkIHRvIHNlbmQgYSBHZW5ldGxpbmsgbWVzc2FnZSFcbiIpKTsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIGFjcGlfZXZlbnRfbWNncnAuaWQsIEdGUF9BVE9NSUMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS5jIGIvZHJpdmVycy9hY3BpL251bWEuYwppbmRleCBjNWUyOTJhLi4zYTBkOGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS5jCisrKyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCWludCBweG0sIG5vZGUgPSAtMTsKIAogCXB4bSA9IGFjcGlfZ2V0X3B4bShoYW5kbGUpOwotCWlmIChweG0gPj0gMCkKKwlpZiAocHhtID49IDAgJiYgcHhtIDwgTUFYX1BYTV9ET01BSU5TKQogCQlub2RlID0gYWNwaV9tYXBfcHhtX3RvX25vZGUocHhtKTsKIAogCXJldHVybiBub2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IGIzMTkzZWMuLmViODk4MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTI3MiwxNCArMjcyLDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX29zX21hcF9tZW1vcnkpOwogCi12b2lkIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqIHZpcnQsIGFjcGlfc2l6ZSBzaXplKQordm9pZCBfX3JlZiBhY3BpX29zX3VubWFwX21lbW9yeSh2b2lkIF9faW9tZW0gKnZpcnQsIGFjcGlfc2l6ZSBzaXplKQogewotCWlmIChhY3BpX2dibF9wZXJtYW5lbnRfbW1hcCkgeworCWlmIChhY3BpX2dibF9wZXJtYW5lbnRfbW1hcCkKIAkJaW91bm1hcCh2aXJ0KTsKLQl9CisJZWxzZQorCQlfX2FjcGlfdW5tYXBfdGFibGUodmlydCwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX29zX3VubWFwX21lbW9yeSk7CiAKK3ZvaWQgX19pbml0IGVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgYWNwaV9zaXplIHNpemUpCit7CisJaWYgKCFhY3BpX2dibF9wZXJtYW5lbnRfbW1hcCkKKwkJX19hY3BpX3VubWFwX3RhYmxlKHZpcnQsIHNpemUpOworfQorCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIGFjcGlfc3RhdHVzCiBhY3BpX29zX2dldF9waHlzaWNhbF9hZGRyZXNzKHZvaWQgKnZpcnQsIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyAqIHBoeXMpCkBAIC0xMzE3LDU0ICsxMzI0LDYgQEAKIAlyZXR1cm4gQUVfU1VQUE9SVDsKIH0KIAotI2lmZGVmCUNPTkZJR19YODYKLQotc3RydWN0IGFtbF9wb3J0X2Rlc2MgewotCXVpbnQJc3RhcnQ7Ci0JdWludAllbmQ7Ci0JY2hhciogICBuYW1lOwotCWNoYXIJd2FybmVkOwotfTsKLQotc3RhdGljIHN0cnVjdCBhbWxfcG9ydF9kZXNjIGFtbF9pbnZhbGlkX3BvcnRfbGlzdFtdID0gewotCXsweDIwLCAweDIxLCAiUElDMCIsIDB9LAotCXsweEEwLCAweEExLCAiUElDMSIsIDB9LAotCXsweDREMCwgMHg0RDEsICJFTENSIiwgMH0KLX07Ci0KLS8qCi0gKiB2YWxpZF9hbWxfaW9fYWRkcmVzcygpCi0gKgotICogaWYgdmFsaWQsIHJldHVybiB0cnVlCi0gKiBlbHNlIGludmFsaWQsIHdhcm4gb25jZSwgcmV0dXJuIGZhbHNlCi0gKi8KLXN0YXRpYyBib29sIHZhbGlkX2FtbF9pb19hZGRyZXNzKHVpbnQgYWRkcmVzcywgdWludCBsZW5ndGgpCi17Ci0JaW50IGk7Ci0JaW50IGVudHJpZXMgPSBzaXplb2YoYW1sX2ludmFsaWRfcG9ydF9saXN0KSAvIHNpemVvZihzdHJ1Y3QgYW1sX3BvcnRfZGVzYyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgKytpKSB7Ci0JCWlmICgoYWRkcmVzcyA+PSBhbWxfaW52YWxpZF9wb3J0X2xpc3RbaV0uc3RhcnQgJiYKLQkJCWFkZHJlc3MgPD0gYW1sX2ludmFsaWRfcG9ydF9saXN0W2ldLmVuZCkgfHwKLQkJCShhZGRyZXNzICsgbGVuZ3RoID49IGFtbF9pbnZhbGlkX3BvcnRfbGlzdFtpXS5zdGFydCAmJgotCQkJYWRkcmVzcyAgKyBsZW5ndGggPD0gYW1sX2ludmFsaWRfcG9ydF9saXN0W2ldLmVuZCkpCi0JCXsKLQkJCWlmICghYW1sX2ludmFsaWRfcG9ydF9saXN0W2ldLndhcm5lZCkKLQkJCXsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkFDUEk6IERlbmllZCBCSU9TIEFNTCBhY2Nlc3MiCi0JCQkJCSIgdG8gaW52YWxpZCBwb3J0IDB4JXgrMHgleCAoJXMpXG4iLAotCQkJCQlhZGRyZXNzLCBsZW5ndGgsCi0JCQkJCWFtbF9pbnZhbGlkX3BvcnRfbGlzdFtpXS5uYW1lKTsKLQkJCQlhbWxfaW52YWxpZF9wb3J0X2xpc3RbaV0ud2FybmVkID0gMTsKLQkJCX0KLQkJCXJldHVybiBmYWxzZTsJLyogaW52YWxpZCAqLwotCQl9Ci0JfQotCXJldHVybiB0cnVlOwkvKiB2YWxpZCAqLwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCB2YWxpZF9hbWxfaW9fYWRkcmVzcyh1aW50IGFkZHJlc3MsIHVpbnQgbGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzCkBAIC0xMzk0LDggKzEzNTMsNiBAQAogCiAJc3dpdGNoIChzcGFjZV9pZCkgewogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgotCQlpZiAoIXZhbGlkX2FtbF9pb19hZGRyZXNzKGFkZHJlc3MsIGxlbmd0aCkpCi0JCQlyZXR1cm4gQUVfQU1MX0lMTEVHQUxfQUREUkVTUzsKIAljYXNlIEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlk6CiAJCS8qIE9ubHkgaW50ZXJmZXJlbmNlIGNoZWNrcyBhZ2FpbnN0IFN5c3RlbUlPIGFuZCBTeXRlbU1lbW9yeQogCQkgICBhcmUgbmVlZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IDljYzc2OWIuLjY4ZmQzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC01MTYsMTIgKzUxNiwxMiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJjcHVfcHRyKHBlcmZvcm1hbmNlLCBpKSkgeworCQlpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJfY3B1X3B0cihwZXJmb3JtYW5jZSwgaSkpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXByLT5wZXJmb3JtYW5jZSA9IHBlcmNwdV9wdHIocGVyZm9ybWFuY2UsIGkpOworCQlwci0+cGVyZm9ybWFuY2UgPSBwZXJfY3B1X3B0cihwZXJmb3JtYW5jZSwgaSk7CiAJCWNwdW1hc2tfc2V0X2NwdShpLCBwci0+cGVyZm9ybWFuY2UtPnNoYXJlZF9jcHVfbWFwKTsKIAkJaWYgKGFjcGlfcHJvY2Vzc29yX2dldF9wc2QocHIpKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCA1MTkyNjY2Li4wMDQ1NmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtMzc4LDYgKzM3OCwyMiBAQAogCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY21pbmkxLDEiKSwKIAkJfSwKIAl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X29sZF9zdXNwZW5kX29yZGVyaW5nLAorCS5pZGVudCA9ICJBc3VzIFB1bmRpdCBQMS1BSDIgKE0yTjhMIG1vdGhlcmJvYXJkKSIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQVNVU1RlayBDb21wdXRlciBJTkMuIiksCisJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk0yTjhMIiksCisJCX0sCisJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiVG9zaGliYSBTYXRlbGxpdGUgTDMwMCIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTYXRlbGxpdGUgTDMwMCIpLAorCQl9LAorCX0sCiAJe30sCiB9OwogI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggYTg4NTI5NS4uZmVjMWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMTgxLDE0ICsxODEsMTUgQEAKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmVudHJ5OwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQ7CisJYWNwaV9zaXplIHRibF9zaXplOwogCiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChzdHJuY21wKGlkLCBBQ1BJX1NJR19NQURULCA0KSA9PSAwKQotCQlhY3BpX2dldF90YWJsZShpZCwgYWNwaV9hcGljX2luc3RhbmNlLCAmdGFibGVfaGVhZGVyKTsKKwkJYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGlkLCBhY3BpX2FwaWNfaW5zdGFuY2UsICZ0YWJsZV9oZWFkZXIsICZ0Ymxfc2l6ZSk7CiAJZWxzZQotCQlhY3BpX2dldF90YWJsZShpZCwgMCwgJnRhYmxlX2hlYWRlcik7CisJCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShpZCwgMCwgJnRhYmxlX2hlYWRlciwgJnRibF9zaXplKTsKIAogCWlmICghdGFibGVfaGVhZGVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICIlNC40cyBub3QgcHJlc2VudFxuIiwgaWQpOwpAQCAtMjA2LDggKzIwNywxMCBAQAogCSAgICAgICB0YWJsZV9lbmQpIHsKIAkJaWYgKGVudHJ5LT50eXBlID09IGVudHJ5X2lkCiAJCSAgICAmJiAoIW1heF9lbnRyaWVzIHx8IGNvdW50KysgPCBtYXhfZW50cmllcykpCi0JCQlpZiAoaGFuZGxlcihlbnRyeSwgdGFibGVfZW5kKSkKKwkJCWlmIChoYW5kbGVyKGVudHJ5LCB0YWJsZV9lbmQpKSB7CisJCQkJZWFybHlfYWNwaV9vc191bm1hcF9tZW1vcnkoKGNoYXIgKil0YWJsZV9oZWFkZXIsIHRibF9zaXplKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAogCQllbnRyeSA9IChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKikKIAkJICAgICgodW5zaWduZWQgbG9uZyllbnRyeSArIGVudHJ5LT5sZW5ndGgpOwpAQCAtMjE3LDYgKzIyMCw3IEBACiAJCSAgICAgICAiJWkgZm91bmRcbiIsIGlkLCBlbnRyeV9pZCwgY291bnQgLSBtYXhfZW50cmllcywgY291bnQpOwogCX0KIAorCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KChjaGFyICopdGFibGVfaGVhZGVyLCB0Ymxfc2l6ZSk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yNDEsMTcgKzI0NSwxOSBAQAogaW50IF9faW5pdCBhY3BpX3RhYmxlX3BhcnNlKGNoYXIgKmlkLCBhY3BpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcikKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKKwlhY3BpX3NpemUgdGJsX3NpemU7CiAKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHN0cm5jbXAoaWQsIEFDUElfU0lHX01BRFQsIDQpID09IDApCi0JCWFjcGlfZ2V0X3RhYmxlKGlkLCBhY3BpX2FwaWNfaW5zdGFuY2UsICZ0YWJsZSk7CisJCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShpZCwgYWNwaV9hcGljX2luc3RhbmNlLCAmdGFibGUsICZ0Ymxfc2l6ZSk7CiAJZWxzZQotCQlhY3BpX2dldF90YWJsZShpZCwgMCwgJnRhYmxlKTsKKwkJYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGlkLCAwLCAmdGFibGUsICZ0Ymxfc2l6ZSk7CiAKIAlpZiAodGFibGUpIHsKIAkJaGFuZGxlcih0YWJsZSk7CisJCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCB0Ymxfc2l6ZSk7CiAJCXJldHVybiAwOwogCX0gZWxzZQogCQlyZXR1cm4gMTsKQEAgLTI2NSw4ICsyNzEsOSBAQAogc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX211bHRpcGxlX21hZHQodm9pZCkKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKKwlhY3BpX3NpemUgdGJsX3NpemU7CiAKLQlhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAyLCAmdGFibGUpOworCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShBQ1BJX1NJR19NQURULCAyLCAmdGFibGUsICZ0Ymxfc2l6ZSk7CiAJaWYgKHRhYmxlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCSAgICAgICAiQklPUyBidWc6IG11bHRpcGxlIEFQSUMvTUFEVCBmb3VuZCwiCkBAIC0yNzUsNiArMjgyLDcgQEAKIAkJICAgICAgICJJZiBcImFjcGlfYXBpY19pbnN0YW5jZT0lZFwiIHdvcmtzIGJldHRlciwgIgogCQkgICAgICAgIm5vdGlmeSBsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZ1xuIiwKIAkJICAgICAgIGFjcGlfYXBpY19pbnN0YW5jZSA/IDAgOiAyKTsKKwkJZWFybHlfYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHRibF9zaXplKTsKIAogCX0gZWxzZQogCQlhY3BpX2FwaWNfaW5zdGFuY2UgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbWJhL2J1cy5jIGIvZHJpdmVycy9hbWJhL2J1cy5jCmluZGV4IDAwYzQ2ZTAuLjNkNzYzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWRldi0+ZGV2LnJlbGVhc2UgPSBhbWJhX2RldmljZV9yZWxlYXNlOwogCWRldi0+ZGV2LmJ1cyA9ICZhbWJhX2J1c3R5cGU7CiAJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kbWFfbWFzazsKLQlkZXYtPnJlcy5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCWRldi0+cmVzLm5hbWUgPSBkZXZfbmFtZSgmZGV2LT5kZXYpOwogCiAJaWYgKCFkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayAmJiBkZXYtPmRtYV9tYXNrKQogCQlkZXZfd2FybigmZGV2LT5kZXYsICJjb2hlcmVudCBkbWEgbWFzayBpcyB1bnNldFxuIik7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAlpZiAoZC0+cGFyZW50KQogCQlyICY9IGQtPnBhcmVudCA9PSBkZXYtPnBhcmVudDsKIAlpZiAoZC0+YnVzaWQpCi0JCXIgJj0gc3RyY21wKGRldi0+YnVzX2lkLCBkLT5idXNpZCkgPT0gMDsKKwkJciAmPSBzdHJjbXAoZGV2X25hbWUoZGV2KSwgZC0+YnVzaWQpID09IDA7CiAKIAlpZiAocikgewogCQlnZXRfZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggNjZlMDEyYy4uNzg4YmJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJLyogYm9hcmRfYWhjaSAqLwogCXsKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00MTIsNyArNDEyLDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX05DUSB8IEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfdnQ4MjUxX29wcywKIAl9LApAQCAtNDIwLDcgKzQyMCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19JR05fSVJRX0lGX0VSUiksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDMwLDcgKzQzMCw3IEBACiAJCQkJIEFIQ0lfSEZMQUdfMzJCSVRfT05MWSB8IEFIQ0lfSEZMQUdfTk9fTVNJIHwKIAkJCQkgQUhDSV9IRkxBR19TRUNUMjU1KSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfc2I2MDBfb3BzLAogCX0sCkBAIC00NDAsNyArNDQwLDcgQEAKIAkJCQkgQUhDSV9IRkxBR19NVl9QQVRBIHwgQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUwpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9zYjYwMF9vcHMsCiAJfSwKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfWUVTX05DUSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTEzNDgsNyArMTM0OCw3IEBACiAJd3JpdGVsKG1lc3NhZ2VbMV0sIG1taW8gKyBocHJpdi0+ZW1fbG9jKzQpOwogCiAJLyogc2F2ZSBvZmYgbmV3IGxlZCBzdGF0ZSBmb3IgcG9ydC9zbG90ICovCi0JZW1wLT5sZWRfc3RhdGUgPSBtZXNzYWdlWzFdOworCWVtcC0+bGVkX3N0YXRlID0gc3RhdGU7CiAKIAkvKgogCSAqIHRlbGwgaGFyZHdhcmUgdG8gdHJhbnNtaXQgdGhlIG1lc3NhZ2UKQEAgLTI1NjUsNiArMjU2NSwxNSBAQAogCQkJLyogUENJIHNsb3QgbnVtYmVyIG9mIHRoZSBjb250cm9sbGVyICovCiAJCQkuZHJpdmVyX2RhdGEgPSAodm9pZCAqKTB4MUZVTCwKIAkJfSwKKwkJeworCQkJLmlkZW50ID0gIkhQIENvbXBhcSA2NzIwcyIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIENvbXBhcSA2NzIwcyIpLAorCQkJfSwKKwkJCS8qIFBDSSBzbG90IG51bWJlciBvZiB0aGUgY29udHJvbGxlciAqLworCQkJLmRyaXZlcl9kYXRhID0gKHZvaWQgKikweDFGVUwsCisJCX0sCiAKIAkJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiAJfTsKQEAgLTI2NDcsOCArMjY1Niw4IEBACiAJaWYgKGJvYXJkX2lkID09IGJvYXJkX2FoY2lfc2I3MDAgJiYgcGRldi0+cmV2aXNpb24gPj0gMHg0MCkKIAkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMOwogCi0JaWYgKChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkgfHwgcGNpX2VuYWJsZV9tc2kocGRldikpCi0JCXBjaV9pbnR4KHBkZXYsIDEpOworCWlmICghKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSkKKwkJcGNpX2VuYWJsZV9tc2kocGRldik7CiAKIAkvKiBzYXZlIGluaXRpYWwgY29uZmlnICovCiAJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKHBkZXYsIGhwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCmluZGV4IGRjNDhhNjMuLmVjZmQyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtMTE4LDggKzExOCw4IEBACiAJdTE2IGNvbW1hbmQ7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmdlbmVyaWNfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggNTQ5NjFjMC4uZTVjYmU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC00NDYsMzQgKzQ0NiwzNCBAQAogCVtwaWl4X3BhdGFfbXdkbWFdID0gCS8qIFBJSVgzIE1XRE1BIG9ubHkgKi8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAogCX0sCiAKIAlbcGlpeF9wYXRhXzMzXSA9CS8qIFBJSVg0IGF0IDMzTUh6ICovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoX3BhdGFfMzNdID0gCS8qIElDSDAgLSBJQ0ggYXQgMzNNaHoqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrIAk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBDaGVjazogbWF5YmUgMHgwNyAgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwgLyogVURNQTMzICovCisJCS5waW9fbWFzayAJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBDaGVjazogbWF5YmUgTVdETUEwIGlzIG9rICAqLworCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoX3BhdGFfNjZdID0gCS8qIElDSCBjb250cm9sbGVycyB1cCB0byA2Nk1IeiAqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrIAk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBNV0RNQTAgaXMgYnJva2VuIG9uIGNoaXAgKi8KKwkJLnBpb19tYXNrIAk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIE1XRE1BMCBpcyBicm9rZW4gb24gY2hpcCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCkBAIC00ODEsMTcgKzQ4MSwxNyBAQAogCVtpY2hfcGF0YV8xMDBdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfQ0hFQ0tJTlRSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LCAvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2g1X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC00OTksOCArNDk5LDggQEAKIAlbaWNoNl9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTA4LDggKzUwOCw4IEBACiAJW2ljaDZtX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MTcsOCArNTE3LDggQEAKIAlbaWNoOF9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTIHwgUElJWF9GTEFHX1NJRFBSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTI2LDggKzUyNiw4IEBACiAJW2ljaDhfMnBvcnRfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19TSURQUiwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUzNSw4ICs1MzUsOCBAQAogCVt0b2xhcGFpX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01NDQsOCArNTQ0LDggQEAKIAlbaWNoOG1fYXBwbGVfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTU1Myw5ICs1NTMsOSBAQAogCVtwaWl4X3BhdGFfdm13XSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3Ztd19vcHMsCiAJfSwKIApAQCAtMTI4OSw2ICsxMjg5LDM5IEBACiAJcmV0dXJuIG1hcDsKIH0KIAorc3RhdGljIGJvb2wgcGlpeF9ub19zaWRwcihzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhvc3QtPmRldik7CisKKwkvKgorCSAqIFNhbXN1bmcgREItUDcwIG9ubHkgaGFzIHRocmVlIEFUQSBwb3J0cyBleHBvc2VkIGFuZAorCSAqIGN1cmlvdXNseSB0aGUgdW5jb25uZWN0ZWQgZmlyc3QgcG9ydCByZXBvcnRzIGxpbmsgb25saW5lCisJICogd2hpbGUgbm90IHJlc3BvbmRpbmcgdG8gU1JTVCBwcm90b2NvbCBjYXVzaW5nIGV4Y2Vzc2l2ZQorCSAqIGRldGVjdGlvbiBkZWxheS4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBzeXN0ZW0gZG9lc24ndCBjYXJyeSBlbm91Z2ggRE1JCisJICogaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgdGhlIG1hY2hpbmUgYnV0IGRvZXMgaGF2ZSBzdWJzeXN0ZW0KKwkgKiB2ZW5kb3IgYW5kIGRldmljZSBzZXQuICBBcyBpdCdzIHVuY2xlYXIgd2hldGhlciB0aGUKKwkgKiBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBpcyB1c2VkIG9ubHkgZm9yIHRoaXMgc3BlY2lmaWMKKwkgKiBib2FyZCwgdGhlIHBvcnQgY2FuJ3QgYmUgZGlzYWJsZWQgc29sZWx5IHdpdGggdGhlCisJICogaW5mb3JtYXRpb247IGhvd2V2ZXIsIHR1cm5pbmcgb2ZmIFNJRFBSIGFjY2VzcyB3b3JrcyBhcm91bmQKKwkgKiB0aGUgcHJvYmxlbS4gIFR1cm4gaXQgb2ZmLgorCSAqCisJICogVGhpcyBwcm9ibGVtIGlzIHJlcG9ydGVkIGluIGJuYyM0NDEyNDAuCisJICoKKwkgKiBodHRwczovL2J1Z3ppbGxhLm5vdmVsbC5jb20vc2hvd19idWcuY2dpP2lkPTQ0MTQyMAorCSAqLworCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJiBwZGV2LT5kZXZpY2UgPT0gMHgyOTIwICYmCisJICAgIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TQU1TVU5HICYmCisJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHhiMDQ5KSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBob3N0LT5kZXYsCisJCQkgICAiU2Ftc3VuZyBEQi1QNzAgZGV0ZWN0ZWQsIGRpc2FibGluZyBTSURQUlxuIik7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgcGlpeF9pbml0X3NpZHByKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaG9zdC0+ZGV2KTsKQEAgLTEzMDIsNiArMTMzNSwxMCBAQAogCQlpZiAoaHByaXYtPm1hcFtpXSA9PSBJREUpCiAJCQlyZXR1cm4gMDsKIAorCS8qIGlzIGl0IGJsYWNrbGlzdGVkPyAqLworCWlmIChwaWl4X25vX3NpZHByKGhvc3QpKQorCQlyZXR1cm4gMDsKKwogCWlmICghKGhvc3QtPnBvcnRzWzBdLT5mbGFncyAmIFBJSVhfRkxBR19TSURQUikpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCAwNjBiY2Q2Li5lN2VhNzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgpAQCAtMjM4OSw2ICsyMzkwLDcgQEAKIAlkZXYtPmN5bGluZGVycyA9IDA7CiAJZGV2LT5oZWFkcyA9IDA7CiAJZGV2LT5zZWN0b3JzID0gMDsKKwlkZXYtPm11bHRpX2NvdW50ID0gMDsKIAogCS8qCiAJICogY29tbW9uIEFUQSwgQVRBUEkgZmVhdHVyZSB0ZXN0cwpAQCAtMjQyNiw4ICsyNDI4LDE1IEBACiAKIAkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfbl9zZWN0b3JzKGlkKTsKIAotCQlpZiAoZGV2LT5pZFs1OV0gJiAweDEwMCkKLQkJCWRldi0+bXVsdGlfY291bnQgPSBkZXYtPmlkWzU5XSAmIDB4ZmY7CisJCS8qIGdldCBjdXJyZW50IFIvVyBNdWx0aXBsZSBjb3VudCBzZXR0aW5nICovCisJCWlmICgoZGV2LT5pZFs0N10gPj4gOCkgPT0gMHg4MCAmJiAoZGV2LT5pZFs1OV0gJiAweDEwMCkpIHsKKwkJCXVuc2lnbmVkIGludCBtYXggPSBkZXYtPmlkWzQ3XSAmIDB4ZmY7CisJCQl1bnNpZ25lZCBpbnQgY250ID0gZGV2LT5pZFs1OV0gJiAweGZmOworCQkJLyogb25seSByZWNvZ25pemUvYWxsb3cgcG93ZXJzIG9mIHR3byBoZXJlICovCisJCQlpZiAoaXNfcG93ZXJfb2ZfMihtYXgpICYmIGlzX3Bvd2VyX29mXzIoY250KSkKKwkJCQlpZiAoY250IDw9IG1heCkKKwkJCQkJZGV2LT5tdWx0aV9jb3VudCA9IGNudDsKKwkJfQogCiAJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKIAkJCWNvbnN0IGNoYXIgKmxiYV9kZXNjOwpAQCAtNjcwOSw2ICs2NzE4LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kb19kZXZfcmVhZF9pZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9zaW11bGF0ZSk7CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9waW9fcXVldWVfdGFzayk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGlvX25lZWRfaW9yZHkpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3RpbWluZ19maW5kX21vZGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3RpbWluZ19jb21wdXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggZWE4OTA5MS4uMDE4MzEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCiAJLyogRm9yIG5ldyBFSCwgYWxsIHFjcyBhcmUgZmluaXNoZWQgaW4gb25lIG9mIHRocmVlIHdheXMgLQogCSAqIG5vcm1hbCBjb21wbGV0aW9uLCBlcnJvciBjb21wbGV0aW9uLCBhbmQgU0NTSSB0aW1lb3V0LgotCSAqIEJvdGggY21wbGV0aW9ucyBjYW4gcmFjZSBhZ2FpbnN0IFNDU0kgdGltZW91dC4gIFdoZW4gbm9ybWFsCisJICogQm90aCBjb21wbGV0aW9ucyBjYW4gcmFjZSBhZ2FpbnN0IFNDU0kgdGltZW91dC4gIFdoZW4gbm9ybWFsCiAJICogY29tcGxldGlvbiB3aW5zLCB0aGUgcWMgbmV2ZXIgcmVhY2hlcyBFSC4gIFdoZW4gZXJyb3IKIAkgKiBjb21wbGV0aW9uIHdpbnMsIHRoZSBxYyBoYXMgQVRBX1FDRkxBR19GQUlMRUQgc2V0LgogCSAqCkBAIC01NjIsNyArNTYyLDE5IEBACiAJCWludCBucl90aW1lZG91dCA9IDA7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKKwkJCisJCS8qIFRoaXMgbXVzdCBvY2N1ciB1bmRlciB0aGUgYXAtPmxvY2sgYXMgd2UgZG9uJ3Qgd2FudAorCQkgICBhIHBvbGxlZCByZWNvdmVyeSB0byByYWNlIHRoZSByZWFsIGludGVycnVwdCBoYW5kbGVyCisJCSAgIAorCQkgICBUaGUgbG9zdF9pbnRlcnJ1cHQgaGFuZGxlciBjaGVja3MgZm9yIGFueSBjb21wbGV0ZWQgYnV0CisJCSAgIG5vbi1ub3RpZmllZCBjb21tYW5kIGFuZCBjb21wbGV0ZXMgbXVjaCBsaWtlIGFuIElSUSBoYW5kbGVyLgorCQkgICAKKwkJICAgV2UgdGhlbiBmYWxsIGludG8gdGhlIGVycm9yIHJlY292ZXJ5IGNvZGUgd2hpY2ggd2lsbCB0cmVhdAorCQkgICB0aGlzIGFzIGlmIG5vcm1hbCBjb21wbGV0aW9uIHdvbiB0aGUgcmFjZSAqLwogCisJCWlmIChhcC0+b3BzLT5sb3N0X2ludGVycnVwdCkKKwkJCWFwLT5vcHMtPmxvc3RfaW50ZXJydXB0KGFwKTsKKwkJCQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NtZCwgdG1wLCAmaG9zdC0+ZWhfY21kX3EsIGVoX2VudHJ5KSB7CiAJCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCkBAIC02MDYsNiArNjE4LDkgQEAKIAkJYXAtPmVoX3RyaWVzID0gQVRBX0VIX01BWF9UUklFUzsKIAl9IGVsc2UKIAkJc3Bpbl91bmxvY2tfd2FpdChhcC0+bG9jayk7CisJCQorCS8qIElmIHdlIHRpbWVkIHJhY2VkIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvCisJICAgcmVjb3ZlciBucl90aW1lZG91dCA9PSAwIHdoeSBleGFjdGx5IGFyZSB3ZSBkb2luZyBlcnJvciByZWNvdmVyeSA/ICovCiAKICByZXBlYXQ6CiAJLyogaW52b2tlIGVycm9yIGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCA3MTRjYjA0Li44MzMyZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC01Miw2ICs1Miw3IEBACiAJLnNvZnRyZXNldAkJPSBhdGFfc2ZmX3NvZnRyZXNldCwKIAkuaGFyZHJlc2V0CQk9IHNhdGFfc2ZmX2hhcmRyZXNldCwKIAkucG9zdHJlc2V0CQk9IGF0YV9zZmZfcG9zdHJlc2V0LAorCS5kcmFpbl9maWZvCQk9IGF0YV9zZmZfZHJhaW5fZmlmbywKIAkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIsCiAJLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZCwKIApAQCAtNjQsNiArNjUsOCBAQAogCS5zZmZfaXJxX29uCQk9IGF0YV9zZmZfaXJxX29uLAogCS5zZmZfaXJxX2NsZWFyCQk9IGF0YV9zZmZfaXJxX2NsZWFyLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQsCisKIAkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3J0X29wcyk7CkBAIC0xNjQ2LDcgKzE2NDksNyBAQAogICoJUkVUVVJOUzoKICAqCU9uZSBpZiBpbnRlcnJ1cHQgd2FzIGhhbmRsZWQsIHplcm8gaWYgbm90IChzaGFyZWQgaXJxKS4KICAqLwotaW5saW5lIHVuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAordW5zaWduZWQgaW50IGF0YV9zZmZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOwpAQCAtMTc3NSw2ICsxNzc4LDQ4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2ludGVycnVwdCk7CiAKIC8qKgorICoJYXRhX3NmZl9sb3N0X2ludGVycnVwdAktCUNoZWNrIGZvciBhbiBhcHBhcmVudCBsb3N0IGludGVycnVwdAorICoJQGFwOiBwb3J0IHRoYXQgYXBwZWFycyB0byBoYXZlIHRpbWVkIG91dAorICoKKyAqCUNhbGxlZCBmcm9tIHRoZSBsaWJhdGEgZXJyb3IgaGFuZGxlcnMgd2hlbiB0aGUgY29yZSBjb2RlIHN1c3BlY3RzCisgKglhbiBpbnRlcnJ1cHQgaGFzIGJlZW4gbG9zdC4gSWYgaXQgaGFzIGNvbXBsZXRlIGFueXRoaW5nIHdlIGNhbiBhbmQKKyAqCXRoZW4gcmV0dXJuLiBJbnRlcmZhY2UgbXVzdCBzdXBwb3J0IGFsdHN0YXR1cyBmb3IgdGhpcyBmYXN0ZXIKKyAqCXJlY292ZXJ5IHRvIG9jY3VyLgorICoKKyAqCUxvY2tpbmc6CisgKglDYWxsZXIgaG9sZHMgaG9zdCBsb2NrCisgKi8KKwordm9pZCBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdTggc3RhdHVzOworCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisKKwkvKiBPbmx5IG9uZSBvdXRzdGFuZGluZyBjb21tYW5kIHBlciBTRkYgY2hhbm5lbCAqLworCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKKwkvKiBDaGVjayB3ZSBoYXZlIGEgbGl2ZSBvbmUuLiAqLworCWlmIChxYyA9PSBOVUxMIHx8ICAhKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSkKKwkJcmV0dXJuOworCS8qIFdlIGNhbm5vdCBsb3NlIGFuIGludGVycnVwdCBvbiBhIHBvbGxlZCBjb21tYW5kICovCisJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQlyZXR1cm47CisJLyogU2VlIGlmIHRoZSBjb250cm9sbGVyIHRoaW5rcyBpdCBpcyBzdGlsbCBidXN5IC0gaWYgc28gdGhlIGNvbW1hbmQKKwkgICBpc24ndCBhIGxvc3QgSVJRIGJ1dCBpcyBzdGlsbCBpbiBwcm9ncmVzcyAqLworCXN0YXR1cyA9IGF0YV9zZmZfYWx0c3RhdHVzKGFwKTsKKwlpZiAoc3RhdHVzICYgQVRBX0JVU1kpCisJCXJldHVybjsKKworCS8qIFRoZXJlIHdhcyBhIGNvbW1hbmQgcnVubmluZywgd2UgYXJlIG5vIGxvbmdlciBidXN5IGFuZCB3ZSBoYXZlCisJICAgbm8gaW50ZXJydXB0LiAqLworCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLCAibG9zdCBpbnRlcnJ1cHQgKFN0YXR1cyAweCV4KVxuIiwKKwkJCQkJCQkJc3RhdHVzKTsKKwkvKiBSdW4gdGhlIGhvc3QgaW50ZXJydXB0IGxvZ2ljIGFzIGlmIHRoZSBpbnRlcnJ1cHQgaGFkIG5vdCBiZWVuCisJICAgbG9zdCAqLworCWF0YV9zZmZfaG9zdF9pbnRyKGFwLCBxYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KTsKKworLyoqCiAgKglhdGFfc2ZmX2ZyZWV6ZSAtIEZyZWV6ZSBTRkYgY29udHJvbGxlciBwb3J0CiAgKglAYXA6IHBvcnQgdG8gZnJlZXplCiAgKgpAQCAtMjA2Niw2ICsyMTExLDcgQEAKIAlpb3dyaXRlOChhcC0+Y3RsIHwgQVRBX1NSU1QsIGlvYWRkci0+Y3RsX2FkZHIpOwogCXVkZWxheSgyMCk7CS8qIEZJWE1FOiBmbHVzaCAqLwogCWlvd3JpdGU4KGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCWFwLT5sYXN0X2N0bCA9IGFwLT5jdGw7CiAKIAkvKiB3YWl0IHRoZSBwb3J0IHRvIGJlY29tZSByZWFkeSAqLwogCXJldHVybiBhdGFfc2ZmX3dhaXRfYWZ0ZXJfcmVzZXQoJmFwLT5saW5rLCBkZXZtYXNrLCBkZWFkbGluZSk7CkBAIC0yMTkwLDEyICsyMjM2LDQ3IEBACiAJfQogCiAJLyogc2V0IHVwIGRldmljZSBjb250cm9sICovCi0JaWYgKGFwLT5pb2FkZHIuY3RsX2FkZHIpCisJaWYgKGFwLT5pb2FkZHIuY3RsX2FkZHIpIHsKIAkJaW93cml0ZTgoYXAtPmN0bCwgYXAtPmlvYWRkci5jdGxfYWRkcik7CisJCWFwLT5sYXN0X2N0bCA9IGFwLT5jdGw7CisJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3N0cmVzZXQpOwogCiAvKioKKyAqCWF0YV9zZmZfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisKK3ZvaWQgYXRhX3NmZl9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaW50IGNvdW50OworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisKKwkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggaW5jb21pbmcgZGF0YSB3aGVuIGEgY29tbWFuZCB3YXMgcnVubmluZyAqLworCWlmIChxYyA9PSBOVUxMIHx8IHFjLT5kbWFfZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybjsKKworCWFwID0gcWMtPmFwOworCS8qIERyYWluIHVwIHRvIDY0SyBvZiBkYXRhIGJlZm9yZSB3ZSBnaXZlIHVwIHRoaXMgcmVjb3ZlcnkgbWV0aG9kICovCisJZm9yIChjb3VudCA9IDA7IChhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKSAmIEFUQV9EUlEpCisJCQkJCQkmJiBjb3VudCA8IDMyNzY4OyBjb3VudCsrKQorCQlpb3JlYWQxNihhcC0+aW9hZGRyLmRhdGFfYWRkcik7CisKKwkvKiBDYW4gYmVjb21lIERFQlVHIGxhdGVyICovCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fREVCVUcsCisJCQkiZHJhaW5lZCAlZCBieXRlcyB0byBjbGVhciBEUlEuXG4iLCBjb3VudCk7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfZHJhaW5fZmlmbyk7CisKKy8qKgogICoJYXRhX3NmZl9lcnJvcl9oYW5kbGVyIC0gU3RvY2sgZXJyb3IgaGFuZGxlciBmb3IgQk1ETUEgY29udHJvbGxlcgogICoJQGFwOiBwb3J0IHRvIGhhbmRsZSBlcnJvciBmb3IKICAqCkBAIC0yMjM2LDcgKzIzMTcsOCBAQAogCQkgKiByZWFsbHkgYSB0aW1lb3V0IGV2ZW50LCBhZGp1c3QgZXJyb3IgbWFzayBhbmQKIAkJICogY2FuY2VsIGZyb3plbiBzdGF0ZS4KIAkJICovCi0JCWlmIChxYy0+ZXJyX21hc2sgPT0gQUNfRVJSX1RJTUVPVVQgJiYgKGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgeworCQlpZiAocWMtPmVycl9tYXNrID09IEFDX0VSUl9USU1FT1VUCisJCQkJCQkmJiAoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7CiAJCQlxYy0+ZXJyX21hc2sgPSBBQ19FUlJfSE9TVF9CVVM7CiAJCQl0aGF3ID0gMTsKIAkJfQpAQCAtMjI0Nyw2ICsyMzI5LDEzIEBACiAJYXRhX3NmZl9zeW5jKGFwKTsJCS8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRoaXMgKi8KIAlhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKKwkvKiBXZSAqTVVTVCogZG8gRklGTyBkcmFpbmluZyBiZWZvcmUgd2UgaXNzdWUgYSByZXNldCBhcyBzZXZlcmFsCisJICogZGV2aWNlcyBoZWxwZnVsbHkgY2xlYXIgdGhlaXIgaW50ZXJuYWwgc3RhdGUgYW5kIHdpbGwgbG9jayBzb2xpZAorCSAqIGlmIHdlIHRvdWNoIHRoZSBkYXRhIHBvcnQgcG9zdCByZXNldC4gUGFzcyBxYyBpbiBjYXNlIGFueW9uZSB3YW50cworCSAqICB0byBkbyBkaWZmZXJlbnQgUElPL0RNQSByZWNvdmVyeSBvciBoYXMgcGVyIGNvbW1hbmQgZml4dXBzCisJICovCisJaWYgKGFwLT5vcHMtPmRyYWluX2ZpZm8pCisJCWFwLT5vcHMtPmRyYWluX2ZpZm8ocWMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yNTM0LDYgKzI2MjMsNyBAQAogCWlmIChhcC0+ZmxhZ3MgJiAoQVRBX0ZMQUdfU0FUQV9SRVNFVCB8IEFUQV9GTEFHX1NSU1QpKSB7CiAJCS8qIHNldCB1cCBkZXZpY2UgY29udHJvbCBmb3IgQVRBX0ZMQUdfU0FUQV9SRVNFVCAqLwogCQlpb3dyaXRlOChhcC0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJYXAtPmxhc3RfY3RsID0gYXAtPmN0bDsKIAl9CiAKIAlEUFJJTlRLKCJFWElUXG4iKTsKQEAgLTI5NTUsNCArMzA0NSwzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3NmZl9pbml0X29uZSk7CiAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggY2VhODAxNC4uODlhMWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTc5LDggKzc5LDYgQEAKIAkJCSAgIHU2NCBibG9jaywgdTMyIG5fYmxvY2ssIHVuc2lnbmVkIGludCB0Zl9mbGFncywKIAkJCSAgIHVuc2lnbmVkIGludCB0YWcpOwogZXh0ZXJuIHU2NCBhdGFfdGZfcmVhZF9ibG9jayhzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Ziwgc3RydWN0IGF0YV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBhdGFfcGlvX3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAqZGF0YSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5KTsKIGV4dGVybiB2b2lkIGF0YV9wb3J0X2ZsdXNoX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdW5zaWduZWQgYXRhX2V4ZWNfaW50ZXJuYWwoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBjb25zdCB1OCAqY2RiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwppbmRleCA4Yjc3YTk4Li5kOGYzNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwpAQCAtMjQ2LDkgKzI0Niw5IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCi0JCS51ZG1hX21hc2sgCT0gMHg3ZiwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAKIAkJLnBvcnRfb3BzCT0gJnBhY3BpX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggZWI5OWRiZS4uNzUxYjdlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC00OTIsNTMgKzQ5Miw1MyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2Vhcmx5ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9lYXJseV9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCBhZGRlZCBETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmYWxpXzIwX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweDIwIHdpdGggc3VwcG9ydCBsb2dpYyBhZGRlZCBVRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fMjBfdWRtYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywJLyogVURNQTMzICovCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZhbGlfMjBfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzIgYWRkcyBVRE1BNjYgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmYWxpX2MyX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEMzIGlzIFVETUE2NiBmb3Igbm93ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9jMl9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDNCBpcyBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmFsaV9jNF9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDNSBpcyBVRE1BMTMzIHdpdGggTEJBNDggRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmFsaV9jNV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwppbmRleCAxMTViMWNkLi4zM2E3NGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTQ1NSw3NCArNDU1LDc0IEBACiBzdGF0aWMgaW50IGFtZF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzEwXSA9IHsKLQkJewkvKiAwOiBBTUQgNzQwMSAqLworCQl7CS8qIDA6IEFNRCA3NDAxIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAkvKiBObyBTV0RNQSAqLwotCQkJLnVkbWFfbWFzayA9IDB4MDcsCS8qIFVETUEgMzMgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZhbWQzM19wb3J0X29wcwogCQl9LAogCQl7CS8qIDE6IEVhcmx5IEFNRDc0MDkgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAkvKiBVRE1BIDY2ICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmYW1kNjZfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiAyOiBBTUQgNzQwOSwgbm8gc3dkbWEgZXJyYXRhICovCisJCXsJLyogMjogQU1EIDc0MDkgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwJLyogVURNQSA2NiAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmFtZDY2X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogMzogQU1EIDc0MTEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMDBfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiA0OiBBTUQgNzQ0MSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9LAotCQl7CS8qIDU6IEFNRCA4MTExKi8KKwkJewkvKiA1OiBBTUQgODExMSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCS8qIFVETUEgMTMzLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkJLnBvcnRfb3BzID0gJmFtZDEzM19wb3J0X29wcwogCQl9LAotCQl7CS8qIDY6IEFNRCA4MTExIFVETUEgMTAwIChTZXJlbmFkZSkgKi8KKwkJewkvKiA2OiBBTUQgODExMSBVRE1BIDEwMCAoU2VyZW5hZGUpIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAsIG5vIHN3ZG1hICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogNzogTnZpZGlhIE5mb3JjZSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJm52MTAwX3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogODogTnZpZGlhIE5mb3JjZTIgYW5kIGxhdGVyICovCisJCXsJLyogODogTnZpZGlhIE5mb3JjZTIgYW5kIGxhdGVyIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogVURNQSAxMzMsIG5vIHN3ZG1hICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCQkucG9ydF9vcHMgPSAmbnYxMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiA5OiBBTUQgQ1M1NTM2IChHZW9kZSBjb21wYW5pb24pICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTAwX3BvcnRfb3BzCiAJCX0KIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCmluZGV4IDZiMzA5MmMuLmQzMzJjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCQlwZXJmb3JtYW5jZSBBbGVzc2FuZHJvIFp1bW1vIDxhbGVzc2FuZHJvLnp1bW1vQHRvd2VydGVjaC5pdD4KICAqCiAgKglUT0RPCi0gKgk4NTAgc2VyaWFsaXphdGlvbiBvbmNlIHRoZSBjb3JlIHN1cHBvcnRzIGl0CiAgKglJbnZlc3RpZ2F0ZSBub19kc2Mgb24gODUwUgogICoJQ2xvY2sgZGV0ZWN0CiAgKi8KQEAgLTI5LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9hcnRvcCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC40IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjUiCiAKIC8qCiAgKglUaGUgQVJUT1AgaGFzIDMzIE1oeiBhbmQgIm92ZXIgY2xvY2tlZCIgdGltaW5nIHRhYmxlcy4gVW50aWwgd2UKQEAgLTI4Myw2ICsyODIsMzEgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0NCArIGFwLT5wb3J0X25vLCB1bHRyYSk7CiB9CiAKKy8qKgorICoJYXJ0b3BfNjIxMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglJc3N1ZSBjb21tYW5kcyBwZXIgaG9zdCBvbiB0aGlzIGNoaXAuCisgKi8KKworc3RhdGljIGludCBhcnRvcDYyMTBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFydG9wX3NodCA9IHsKIAlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CkBAIC0yOTMsNiArMzE3LDcgQEAKIAkuc2V0X3Bpb21vZGUJCT0gYXJ0b3A2MjEwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBhcnRvcDYyMTBfc2V0X2RtYW1vZGUsCiAJLnByZXJlc2V0CQk9IGFydG9wNjIxMF9wcmVfcmVzZXQsCisJLnFjX2RlZmVyCQk9IGFydG9wNjIxMF9xY19kZWZlciwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhcnRvcDYyNjBfb3BzID0gewpAQCAtMzIzLDI5ICszNDgsMjkgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182MjEwID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyMTBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI2eCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjYwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyOHggPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182Mjh4X2Zhc3QgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKQEAgLTM2MiwxMiArMzg3LDggQEAKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMCkgewkvKiA2MjEwIHZhcmlhbnQgKi8KIAkJcHBpWzBdID0gJmluZm9fNjIxMDsKLQkJcHBpWzFdID0gJmF0YV9kdW1teV9wb3J0X2luZm87CiAJCS8qIEJJT1MgbWF5IGhhdmUgbGVmdCB1cyBpbiBVRE1BLCBjbGVhciBpdCBiZWZvcmUgbGliYXRhIHByb2JlICovCiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDU0LCAwKTsKLQkJLyogRm9yIHRoZSBtb21lbnQgKGFsc28gbGFja3MgZHNjKSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUlRPUCA2MjEwIHJlcXVpcmVzIHNlcmlhbGl6ZSBmdW5jdGlvbmFsaXR5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGxpYmF0YS5cbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTZWNvbmRhcnkgQVRBIHBvcnRzIHdpbGwgbm90IGJlIGFjdGl2YXRlZC5cbiIpOwogCX0KIAllbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMSkJLyogNjI2MCAqLwogCQlwcGlbMF0gPSAmaW5mb182MjZ4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYwppbmRleCBhYjYxMDk1Li41YzEyOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYwpAQCAtNjcsNyArNjcsOSBAQAogICoKICAqIEFsdGVyIFBJT19NQVNLIGJlbG93IGFjY29yZGluZyB0byB0YWJsZSB0byBzZXQgbWF4aW1hbCBQSU8gbW9kZS4KICAqLwotI2RlZmluZSBQSU9fTUFTSyAoMHgxZikKK2VudW0geworICBQSU9fTUFTSyA9IEFUQV9QSU80LAorfTsKIAogLyoKICAqIFN0cnVjdCBjb250YWluaW5nIHByaXZhdGUgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggNTA2YWRkZS4uYmVjMGI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0yMjAsOSArMjIwLDkgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA2LAkvKiBObyBNV0RNQTAgc3VwcG9ydCAqLwotCQkudWRtYV9tYXNrID0gMHgzRiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMTJfT05MWSwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmF0aWl4cF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBhdGlpeHBfZW5hYmxlX2JpdHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwppbmRleCAxMDUwZmVkLi5jNGI0N2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUwogCQkJCXwgQVRBX0ZMQUdfTU1JTwogCQkJCXwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gMCwKIAkJLnVkbWFfbWFzawk9IDAsCiAJCS5wb3J0X29wcwk9ICZiZmluX3BhdGFfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKaW5kZXggMzRhMzk0Mi4uNWFjZjlmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZjbWQ2NDBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCmluZGV4IDMxNjdkOGYuLmY5OGRmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwpAQCAtMjk5LDQwICsyOTksNDAgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gY21kX2luZm9bNl0gPSB7CiAJCXsJLyogQ01EIDY0MyAtIG5vIFVETUEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkucG9ydF9vcHMgPSAmY21kNjR4X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0NiB3aXRoIGJyb2tlbiBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgd2l0aCB3b3JraW5nIFVETUEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgcmV2IDEgICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0NnIxX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0OCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmY21kNjQ4X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0OSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmY21kNjQ4X3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCmluZGV4IDExODZiY2QuLmRiNmE5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjdGxfcG9ydFtdID0geyAweDNGNiwgMHgzNzYgfTsKIAlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkucG9ydF9vcHMJPSAmY3M1NTIwX3BvcnRfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVsyXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IGJiYTQ1MzMuLmM5NzRiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwpAQCAtMjk4LDE1ICsyOTgsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJmNzNTUzMF9wb3J0X29wcwogCX07CiAJLyogVGhlIGRvY2tpbmcgY29ubmVjdG9yIGRvZXNuJ3QgZG8gVURNQSwgYW5kIGl0IHNlZW1zIG5vdCBNV0RNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX3BhbG1heF9zZWNvbmRhcnkgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmY3M1NTMwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwppbmRleCA4YjIzNmFmLi5kMzNhYTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKQEAgLTE4MSw4ICsxODEsOCBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZjczU1MzVfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKaW5kZXggYWZlZDkyOS4uNmRhNGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCkBAIC0yNDEsOCArMjQxLDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmY3M1NTM2X3BvcnRfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCmluZGV4IGQ1NDY0MjUuLjhmYjA0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCkBAIC0xMjQsOCArMTI0LDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmY3k4MmM2OTNfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sICZhdGFfZHVtbXlfcG9ydF9pbmZvIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jCmluZGV4IGFjNjM5MmUuLjIwODVlMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jCkBAIC0yNTEsOSArMjUxLDkgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCi0JCS51ZG1hX21hc2sgCT0gMHgwZiwgLyogVURNQSA2NiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmVmYXJfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggNjVjMjhlNS4uZDdmMmRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0zMzYsOCArMzM2LDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNjYgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmhwdDM2Nl9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA0MjE2Mzk5Li44MWFiNTcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCkBAIC03NTMsNTUgKzc1Myw1NSBAQAogCS8qIEhQVDM3MCAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MF9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwQSAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBhID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBhX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwXzMzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MEEgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwYV8zMyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwYV9wb3J0X29wcwogCX07CiAJLyogSFBUMzcxLCAzNzIgYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcyID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3NCAtIFVETUExMDAsIGZ1bmN0aW9uIDEgdXNlcyBkaWZmZXJlbnQgcHJlcmVzZXQgbWV0aG9kICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0X2ZuMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcyX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4xID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzRfZm4xX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggZDVjOWZkNy4uM2Q1OWZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTQ0MSw4ICs0NDEsOCBAQAogCS8qIEhQVDM3Mk4gYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDN4Mm5fcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKaW5kZXggZjE5Y2M2NC4uN2UzMTAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCkBAIC0xODgsMTEgKzE4OCwxMSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKICNpZiBkZWZpbmVkKENPTkZJR19QQVRBX0hQVDNYM19ETUEpCiAJCS8qIEZ1cnRoZXIgZGVidWcgbmVlZGVkICovCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKICNlbmRpZgogCQkucG9ydF9vcHMgPSAmaHB0M3gzX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCmluZGV4IGNmOWU5ODQuLmU3MzQ3ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIAlpZiAoZWMtPmRtYSAhPSBOT19ETUEgJiYgIXJlcXVlc3RfZG1hKGVjLT5kbWEsIERSVl9OQU1FKSkgewogCQlzdGF0ZS0+ZG1hID0gZWMtPmRtYTsKLQkJaW5mby0+bXdkbWFfbWFzayA9IDB4MDc7CS8qIE1XMC4uMiAqLworCQlpbmZvLT5td2RtYV9tYXNrID0gQVRBX01XRE1BMjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucl9wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAotCQlhcC0+cGlvX21hc2sgPSAweDFmOworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAkJYXAtPm13ZG1hX21hc2sgPSBpbmZvLT5td2RtYV9tYXNrOwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPm9wcyA9ICZwYXRhX2ljc2lkZV9wb3J0X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCmluZGV4IDE1Y2RiOTEuLjRiY2ViODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2lzYXBucCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjUiCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzYXBucF9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMjgsNiArMjgsMTMgQEAKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpc2FwbnBfbm9hbHRfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCisJLyogTm8gYWx0c3RhdHVzIHNvIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBsb3N0IGludGVycnVwdCBwb2xsICovCisJLmxvc3RfaW50ZXJydXB0ID0gQVRBX09QX05VTEwsCit9OworCiAvKioKICAqCWlzYXBucF9pbml0X29uZQkJLQlhdHRhY2ggYW4gaXNhcG5wIGludGVyZmFjZQogICoJQGlkZXY6IFBuUCBkZXZpY2UKQEAgLTY1LDggKzcyLDggQEAKIAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKLQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAxOworCWFwLT5vcHMgPSAmaXNhcG5wX25vYWx0X3BvcnRfb3BzOworCWFwLT5waW9fbWFzayA9IEFUQV9QSU8wOwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCiAJYXAtPmlvYWRkci5jbWRfYWRkciA9IGNtZF9hZGRyOwpAQCAtNzYsNiArODMsNyBAQAogCQkJCQkgICBwbnBfcG9ydF9zdGFydChpZGV2LCAxKSwgMSk7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGN0bF9hZGRyOworCQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKIAl9CiAKIAlhdGFfc2ZmX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwppbmRleCBjMTEzZDdjLi5mMTU2ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKQEAgLTI2Miw4ICsyNjIsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsIC8qIEZJWE1FOiB3YW50IFVETUEgMTAwPyAqLwogCQkucG9ydF9vcHMJPSAmaXQ4MjEzX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKaW5kZXggYjA1Yjg2YS4uMTg4YmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCkBAIC04NzUsMjkgKzg3NSwyOSBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc21hcnQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9zbWFydF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFzc3RocnUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9wYXNzdGhydV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcmRjID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZpdDgyMXhfcmRjX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19yZGNfMTEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLyogTm8gVURNQSAqLwogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3JkY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwppbmRleCBiMTczYzE1Li4xOWZkZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKIAlhcC0+b3BzCT0gJml4cDR4eF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAweDFmOyAvKiBQSU80ICovCisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19OT19BVEFQSTsKIAogCWl4cDR4eF9zZXR1cF9wb3J0KGFwLCBkYXRhLCBjczAtPnN0YXJ0LCBjczEtPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggMzhjZjFhYi4uM2ExNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTEzNiw4ICsxMzYsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAKIAkJLnBvcnRfb3BzCT0gJmptaWNyb25fb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggZTNiYzFiNC4uM2Y4MzBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIHN0YXRpYyBpbnQgd2luYm9uZDsJCS8qIFNldCB0byBwcm9iZSBXaW5ib25kIGNvbnRyb2xsZXJzLAogCQkJCQlnaXZlIEkvTyBwb3J0IGlmIG5vbiBzdGFuZGFyZCAqLwogc3RhdGljIGludCBhdXRvc3BlZWQ7CQkvKiBDaGlwIHByZXNlbnQgd2hpY2ggc25vb3BzIHNwZWVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbnQgcGlvX21hc2sgPSAweDFGOwkvKiBQSU8gcmFuZ2UgZm9yIGF1dG9zcGVlZCBkZXZpY2VzICovCitzdGF0aWMgaW50IHBpb19tYXNrID0gQVRBX1BJTzQ7CS8qIFBJTyByYW5nZSBmb3IgYXV0b3NwZWVkIGRldmljZXMgKi8KIHN0YXRpYyBpbnQgaW9yZHlfbWFzayA9IDB4RkZGRkZGRkY7CS8qIFVzZSBpb3JkeSBpZiBhdmFpbGFibGUgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCmluZGV4IDc2ZTM5OWIuLjIwOTZmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJLyogU2xhdmUgcG9zc2libGUgYXMgaXRzIG1hZ2ljYWxseSBtYXBwZWQgbm90IHJlYWwgKi8KIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDUwYWU2ZDEuLjY4ZDI3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNzM3LDEwICs3MzcsMTAgQEAKIAkgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAibXdkbWEtbW9kZSIsICZwcm9wbGVuKTsKIAlpZiAoKHByb3ApICYmIChwcm9wbGVuID49IDQpKQotCQltd2RtYV9tYXNrID0gMHg3ICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOworCQltd2RtYV9tYXNrID0gQVRBX01XRE1BMiAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAidWRtYS1tb2RlIiwgJnByb3BsZW4pOwogCWlmICgocHJvcCkgJiYgKHByb3BsZW4gPj0gNCkpCi0JCXVkbWFfbWFzayA9IDB4NyAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKKwkJdWRtYV9tYXNrID0gQVRBX1VETUEyICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOwogCiAJYXRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAlpZiAoYXRhX2lycSA9PSBOT19JUlEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwppbmRleCBhYTU3NmNhLi5iMjFmMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgICB0aGUgTVBJSVggeW91ciBib3ggZ29lcyBjYXN0b3JzIHVwICovCiAKIAlhcC0+b3BzID0gJm1waWl4X3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MUY7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IDlkYzA1ZTEuLmJkYjIzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC01MSw4ICs1MSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkvKiBBY3R1YWxseSB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGVzZSBhcyB0aGUKIAkJICAgZmlybXdhcmUgZGVhbHMgd2l0aCBpdCAqLwotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwgLyogVURNQSAxMzMgKi8KIAkJLnBvcnRfb3BzCT0gJm5ldGNlbGxfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCmluZGV4IDRkZDlhM2IuLjBmYjZiMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcC0+b3BzID0gJm5pbmphMzJfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHgxRjsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlICsgMHgxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggNDBkNDExYy4uY2E1M2ZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDBGLAorCQkucGlvX21hc2sgPSBBVEFfUElPMywKIAkJLnBvcnRfb3BzID0gJm5zODc0MTBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKaW5kZXggODliZjVmOC4uNzczYjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKQEAgLTM0Niw4ICszNDYsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm5zODc0MTVfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CkBAIC0zNTUsOCArMzU1LDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvODc1NjAgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmbnM4NzU2MF9wYXRhX29wcywKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwppbmRleCAwZmU0ZWYzLi5lZmUyYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWFwLT5wcml2YXRlX2RhdGEgPSBjZl9wb3J0OwogCWNmX3BvcnQtPmFwID0gYXA7CiAJYXAtPm9wcyA9ICZvY3Rlb25fY2Zfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4N2Y7IC8qIFN1cHBvcnQgUElPIDAtNiAqLworCWFwLT5waW9fbWFzayA9IEFUQV9QSU82OwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZCiAJCSAgfCBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HOwogCkBAIC05MDAsNyArOTAwLDcgQEAKIAkJYXAtPmlvYWRkci5jdGxfYWRkcgk9IGNzMSArICg2IDw8IDEpICsgMTsKIAkJb2N0ZW9uX2NmX29wcy5zZmZfZGF0YV94ZmVyID0gb2N0ZW9uX2NmX2RhdGFfeGZlcjE2OwogCi0JCWFwLT5td2RtYV9tYXNrCT0gMHgxZjsgLyogU3VwcG9ydCBNV0RNQSAwLTQgKi8KKwkJYXAtPm13ZG1hX21hc2sJPSBBVEFfTVdETUE0OwogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpcnFfaGFuZGxlciA9IG9jdGVvbl9jZl9pbnRlcnJ1cHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggMmMxYTkxYy4uODRhYzUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm9sZHBpaXhfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCmluZGV4IGU0ZmE0ZDUuLjk5ZWRkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZvcHRpX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCmluZGV4IDkzYmI2ZTkuLjg2ODg1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCkBAIC0zOTksMTUgKzM5OSwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmb3B0aWRtYV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZvcHRpcGx1c19wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb184MmM3MDAsIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDY0YjJlMjIuLmY0ZDAwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfcGNtY2lhIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuNSIKIAogLyoKICAqCVByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gZ2x1ZSBzdHVmZiB0b2dldGhlcgpAQCAtMTI2LDYgKzEyNiwzNyBAQAogCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJcGNtY2lhXzhiaXRfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisgCit2b2lkIHBjbWNpYV84Yml0X2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbmNvbWluZyBkYXRhIHdoZW4gYSBjb21tYW5kIHdhcyBydW5uaW5nICovCisJaWYgKHFjID09IE5VTEwgfHwgcWMtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJYXAgPSBxYy0+YXA7CisKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJCSYmIGNvdW50KysgPCA2NTUzNjspCisJCWlvcmVhZDgoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwKKwkJCQkJCQkJY291bnQpOworCit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBjbWNpYV9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMTQzLDYgKzE3NCw3IEBACiAJLnNmZl9kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyXzhiaXQsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlXzhiaXQsCisJLmRyYWluX2ZpZm8JPSBwY21jaWFfOGJpdF9kcmFpbl9maWZvLAogfTsKIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCkBAIC0yOTksNyArMzMxLDcgQEAKIAkJYXAgPSBob3N0LT5wb3J0c1twXTsKIAogCQlhcC0+b3BzID0gb3BzOwotCQlhcC0+cGlvX21hc2sgPSAxOwkJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGlvX2FkZHIgKyAweDEwICogcDsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyICsgMHgxMCAqIHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKaW5kZXggZTk0ZWZjYy4uY2E1Y2FkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwpAQCAtMTUyLDE4ICsxNTIsMTggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJICAgICAgICAgICAgICAgICAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmcGRjMjAyN3hfcGF0YTEwMF9vcHMsCiAJfSwKIAkvKiBQRENfVURNQV8xMzMgKi8KIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKICAgICAgICAgICAgICAgICAgICAgICAgIAkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsIC8qIHVkbWEwLTYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkYzIwMjd4X3BhdGExMzNfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKaW5kZXggNzk5YTZhMC4uNWZlZGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCkBAIC0yOTEsMjIgKzI5MSwyMiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzNdID0gewogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI0eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCBmMWIyNmY3Li40NTg3OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKQEAgLTIxMiwxMSArMjEyLDExIEBACiAKIAlpZiAodHlwZSA9PSA2NTgwKSB7CiAJCWFwLT5vcHMgPSAmcWRpNjU4MF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCX0gZWxzZSB7CiAJCWFwLT5vcHMgPSAmcWRpNjUwMF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgwNzsJLyogQWN0dWFsbHkgUElPMyAhSU9SRFkgaXMgcG9zc2libGUgKi8KKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzI7IC8qIEFjdHVhbGx5IFBJTzMgIUlPUkRZIGlzIHBvc3NpYmxlICovCiAJCWFwLT5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19JT1JEWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKaW5kZXggNjk1ZDQ0YS4uNDQwMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKQEAgLTIxNiw5ICsyMTYsOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4MTQsIC8qIFVETUEzMy82NiBvbmx5ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTI0X09OTFksCiAJCS5wb3J0X29wcwk9ICZyYWRpc3lzX3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCmluZGV4IGViZmNkYTIuLjhlM2NkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKQEAgLTQ4LDYzICs0OCwxMSBAQAogc3RydWN0IHJiNTMyX2NmX2luZm8gewogCXZvaWQgX19pb21lbQkqaW9iYXNlOwogCXVuc2lnbmVkIGludAlncGlvX2xpbmU7Ci0JaW50CQlmcm96ZW47CiAJdW5zaWduZWQgaW50CWlycTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmI1MzJfcGF0YV9maW5pc2hfaW8oc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhaC0+cHJpdmF0ZV9kYXRhOwotCi0JLyogRklYTUU6IEtlZXAgcHJldmlvdXMgZGVsYXkuIElmIHRoaXMgaXMgbWVyZWx5IGEgZmVuY2UgdGhlbgotCSAgIGF0YV9zZmZfc3luYyBtaWdodCBiZSBzdWZmaWNpZW50LiAqLwotCWF0YV9zZmZfZG1hX3BhdXNlKGFwKTsKLQluZGVsYXkoUkI1MDBfQ0ZfSU9fREVMQVkpOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCWNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXdyaXRlYih0Zi0+Y29tbWFuZCwgYXAtPmlvYWRkci5jb21tYW5kX2FkZHIpOwotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByYjUzMl9wYXRhX2RhdGFfeGZlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCXVuc2lnbmVkIGludCBidWZsZW4sIGludCB3cml0ZV9kYXRhKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5saW5rLT5hcDsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOwotCWludCByZXRsZW4gPSBidWZsZW47Ci0KLQlpZiAod3JpdGVfZGF0YSkgewotCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQotCQkJd3JpdGViKCpidWYsIGlvYWRkcik7Ci0JfSBlbHNlIHsKLQkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKLQkJCSpidWYgPSByZWFkYihpb2FkZHIpOwotCX0KLQotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFkZXYtPmxpbmstPmFwKTsKLQlyZXR1cm4gcmV0bGVuOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDA7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCByYjUzMl9wYXRhX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gZGV2X2luc3RhbmNlOwpAQCAtMTEyLDggKzYwLDcgQEAKIAogCWlmIChncGlvX2dldF92YWx1ZShpbmZvLT5ncGlvX2xpbmUpKSB7CiAJCXNldF9pcnFfdHlwZShpbmZvLT5pcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0JCWlmICghaW5mby0+ZnJvemVuKQotCQkJYXRhX3NmZl9pbnRlcnJ1cHQoaW5mby0+aXJxLCBkZXZfaW5zdGFuY2UpOworCQlhdGFfc2ZmX2ludGVycnVwdChpbmZvLT5pcnEsIGRldl9pbnN0YW5jZSk7CiAJfSBlbHNlIHsKIAkJc2V0X2lycV90eXBlKGluZm8tPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJfQpAQCAtMTIzLDEwICs3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYjUzMl9wYXRhX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKLQkuc2ZmX2V4ZWNfY29tbWFuZAk9IHJiNTMyX3BhdGFfZXhlY19jb21tYW5kLAotCS5zZmZfZGF0YV94ZmVyCQk9IHJiNTMyX3BhdGFfZGF0YV94ZmVyLAotCS5mcmVlemUJCQk9IHJiNTMyX3BhdGFfZnJlZXplLAotCS50aGF3CQkJPSByYjUzMl9wYXRhX3RoYXcsCisJLnNmZl9kYXRhX3hmZXIJCT0gYXRhX3NmZl9kYXRhX3hmZXIzMiwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQ1LDcgKzg5LDcgQEAKIAlhcCA9IGFoLT5wb3J0c1swXTsKIAogCWFwLT5vcHMJCT0gJnJiNTMyX3BhdGFfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrCT0gMHgxZjsgLyogUElPNCAqLworCWFwLT5waW9fbWFzawk9IEFUQV9QSU80OwogCWFwLT5mbGFncwk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU87CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyCT0gaW5mby0+aW9iYXNlICsgUkI1MDBfQ0ZfUkVHX0JBU0U7CkBAIC0xNjAsNyArMTA0LDcgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgcmI1MzJfcGF0YV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJaW50IGdwaW87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGF0YV9ob3N0ICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDQ2ZDZiYzEuLjBjNTc0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtODgsNyArODgsNyBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJnJ6MTAwMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggOWE0YmRjYS4uZjQ5ODE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yLDcgKzIsNiBAQAogICogTmV3IEFUQSBsYXllciBTQzEyMDAgZHJpdmVyCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqIFRPRE86IE1vZGUgc2VsZWN0aW9uIGZpbHRlcmluZwotICogVE9ETzogQ2FuJ3QgZW5hYmxlIHNlY29uZCBjaGFubmVsIHVudGlsIEFUQSBjb3JlIGhhcyBzZXJpYWxpemUKICAqIFRPRE86IE5lZWRzIGN1c3RvbSBETUEgY2xlYW51cCBjb2RlCiAgKgogICogQmFzZWQgdmVyeSBoZWF2aWx5IG9uCkBAIC0xNzgsNiArMTc3LDMxIEBACiAJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCisvKioKKyAqCXNjMTIwMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglTZXJpYWxpemUgY29tbWFuZCBpc3N1ZSBvbiB0aGlzIGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCBzYzEyMDBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjMTIwMF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCkBAIC0xODcsNiArMjExLDcgQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAogCS5xY19pc3N1ZQk9IHNjMTIwMF9xY19pc3N1ZSwKKwkucWNfZGVmZXIJPSBzYzEyMDBfcWNfZGVmZXIsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gc2MxMjAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNjMTIwMF9zZXRfZG1hbW9kZSwKQEAgLTIwNSwxMyArMjMwLDEzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwogCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OwogCiAJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBkNDQ3ZjFjLi40MjU3ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTEwMDEsOCArMTAwMSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NjX3BvcnRfaW5mb1tdID0gewogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDAwLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLyogTm8gTVdETUEgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnNjY19wYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zY2guYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKaW5kZXggNmFlZWVlYi4uOTljY2ViNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2guYwpAQCAtODQsOSArODQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NoX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSBBVEFfUElPNCwgICAvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsIC8qIG13ZG1hMC0yICovCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgIC8qIHVkbWEwLTUgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2NoX3BhdGFfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDhkMmZkOWQuLmJlYWVkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTM5OCwyNiArMzk4LDI2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CiAJCXsgLyogT1NCNCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19vc2I0X3BvcnRfb3BzCiAJCX0sIHsgLyogT1NCNCBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSAweDAwLAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkvKiBObyBVRE1BICovCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgLSBsYXRlciByZXZpc2lvbnMqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3NfY3NiX3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDllNzY0ZTUuLjRjYjY0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMjgyLDE1ICsyODIsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbG93ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZzaWw2ODBfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggMjdjZWI0Mi4uNDg4ZTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCkBAIC01NTIsNTEgKzU1Miw1NyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSAweDA3LAotCS51ZG1hX21hc2sJPSAwLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkvKiBObyBVRE1BICovCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzMzID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gMHgwNywKLQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAkvKiBVRE1BIDMzICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzY2ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLworCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2lzXzEwMF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzMgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX29wcywKIH07CiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19mb3Jfc2F0YSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Zvcl9zYXRhX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Vhcmx5X29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMWIwZTdiNi4uMjlmNzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMjgzLDEzICsyODMsMTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJLyogZm9yIG5vdyB1c2Ugb25seSB0aGUgZmlyc3QgcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCBlZjk1OTc1Li5mMWYxM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtMTkxLDggKzE5MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnRyaWZsZXhfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IGJhNTU2ZDMuLmIwOGU2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtNDIyLDQ2ICs0MjIsNDYgQEAKIAkvKiBFYXJseSBWSUEgd2l0aG91dCBVRE1BIHN1cHBvcnQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogRGl0dG8gd2l0aCBJUlEgbWFza2luZyByZXF1aXJlZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wc19ub2lycSwKIAl9OwogCS8qIFZJQSBVRE1BIDMzIGRldmljZXMgKGFuZCBib3JrZWQgNjYpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMzNfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSAxMDAgZGV2aWNlcyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTEwMF9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogRklYTUU6IHNob3VsZCBjaGVjayBub3J0aCBicmlkZ2UgKi8KIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IDMxOWUxNjQuLjZkODYxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJYXRhX3BvcnRfZGVzYyhhcCwgImNtZCAweCVseCBjdGwgMHglbHgiLCBjbWRfcG9ydCwgY3RsX3BvcnQpOwogCiAJCWFwLT5vcHMgPSAmd2luYm9uZF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCmluZGV4IGJlNTM1NDUuLjM5NTg4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwpAQCAtMTQ4LDYgKzE0OCw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWRtYV9hdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKIAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKKwogCS5jaGVja19hdGFwaV9kbWEJPSBhZG1hX2NoZWNrX2F0YXBpX2RtYSwKIAkucWNfcHJlcAkJPSBhZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFkbWFfcWNfaXNzdWUsCkBAIC0xNjYsNyArMTY4LDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYWRtYV9hdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCA1NWJjODhjLi5jMmU5MGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTEyNzksOCArMTI3OSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2F0YV9mc2xfcG9ydF9pbmZvW10gPSB7CiAJewogCSAuZmxhZ3MgPSBTQVRBX0ZTTF9IT1NUX0ZMQUdTLAotCSAucGlvX21hc2sgPSAweDFmLAkvKiBwaW8gMC00ICovCi0JIC51ZG1hX21hc2sgPSAweDdmLAkvKiB1ZG1hIDAtNiAqLworCSAucGlvX21hc2sgPSBBVEFfUElPNCwKKwkgLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkgLnBvcnRfb3BzID0gJnNhdGFfZnNsX29wcywKIAkgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggZmJiZDg3Yy4uMzA1YTRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmljX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19QSU9fRE1BLAotCS5waW9fbWFzawkJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawkJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCS5waW9fbWFzawkJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawkJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwkJPSAmaW5pY19wb3J0X29wcwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCA3MDA3ZWRkLi5hMzc3MjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xLDEwICsxLDEzIEBACiAvKgogICogc2F0YV9tdi5jIC0gTWFydmVsbCBTQVRBIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgMjAwODogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDk6IE1hcnZlbGwgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNTogRU1DIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJldHQgUnVzcy4KKyAqIEV4dGVuc2l2ZSBvdmVyaGF1bCBhbmQgZW5oYW5jZW1lbnQgYnkgTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+LgorICoKICAqIFBsZWFzZSBBTFdBWVMgY29weSBsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnIG9uIGVtYWlscy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMjAgKzI4LDEzIEBACiAvKgogICogc2F0YV9tdiBUT0RPIGxpc3Q6CiAgKgotICogLS0+IEVycmF0YSB3b3JrYXJvdW5kIGZvciBOQ1EgZGV2aWNlIGVycm9ycy4KLSAqCiAgKiAtLT4gTW9yZSBlcnJhdGEgd29ya2Fyb3VuZHMgZm9yIFBDSS1YLgogICoKICAqIC0tPiBDb21wbGV0ZSBhIGZ1bGwgZXJyYXRhIGF1ZGl0IGZvciBhbGwgY2hpcHNldHMgdG8gaWRlbnRpZnkgb3RoZXJzLgogICoKLSAqIC0tPiBBVEFQSSBzdXBwb3J0IChNYXJ2ZWxsIGNsYWltcyB0aGUgNjB4eC83MHh4IGNoaXBzIGNhbiBkbyBpdCkuCi0gKgogICogLS0+IERldmVsb3AgYSBsb3ctcG93ZXItY29uc3VtcHRpb24gc3RyYXRlZ3ksIGFuZCBpbXBsZW1lbnQgaXQuCiAgKgotICogLS0+IFtFeHBlcmltZW50LCBsb3cgcHJpb3JpdHldIEludmVzdGlnYXRlIGludGVycnVwdCBjb2FsZXNjaW5nLgotICogICAgICAgUXVpdGUgb2Z0ZW4sIGVzcGVjaWFsbHkgd2l0aCBQQ0kgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyAoTVNJKSwKLSAqICAgICAgIHRoZSBvdmVyaGVhZCByZWR1Y2VkIGJ5IGludGVycnVwdCBtaXRpZ2F0aW9uIGlzIHF1aXRlIG9mdGVuIG5vdAotICogICAgICAgd29ydGggdGhlIGxhdGVuY3kgY29zdC4KKyAqIC0tPiBBZGQgc3lzZnMgYXR0cmlidXRlcyBmb3IgcGVyLWNoaXAgLyBwZXItSEMgSVJRIGNvYWxlc2NpbmcgdGhyZXNob2xkcy4KICAqCiAgKiAtLT4gW0V4cGVyaW1lbnQsIE1hcnZlbGwgdmFsdWUgYWRkZWRdIElzIGl0IHBvc3NpYmxlIHRvIHVzZSB0YXJnZXQKICAqICAgICAgIG1vZGUgdG8gY3Jvc3MtY29ubmVjdCB0d28gTGludXggYm94ZXMgd2l0aCBNYXJ2ZWxsIGNhcmRzPyAgSWYgc28sCkBAIC02OCw3ICs2NCwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX212IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4yNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMjciCisKKy8qCisgKiBtb2R1bGUgb3B0aW9ucworICovCisKK3N0YXRpYyBpbnQgbXNpOworI2lmZGVmIENPTkZJR19QQ0kKK21vZHVsZV9wYXJhbShtc2ksIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7CisjZW5kaWYKKworc3RhdGljIGludCBpcnFfY29hbGVzY2luZ19pb19jb3VudDsKK21vZHVsZV9wYXJhbShpcnFfY29hbGVzY2luZ19pb19jb3VudCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsCisJCSAiSVJRIGNvYWxlc2NpbmcgSS9PIGNvdW50IHRocmVzaG9sZCAoMC4uMjU1KSIpOworCitzdGF0aWMgaW50IGlycV9jb2FsZXNjaW5nX3VzZWNzOworbW9kdWxlX3BhcmFtKGlycV9jb2FsZXNjaW5nX3VzZWNzLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnFfY29hbGVzY2luZ191c2VjcywKKwkJICJJUlEgY29hbGVzY2luZyB0aW1lIHRocmVzaG9sZCBpbiB1c2VjcyIpOwogCiBlbnVtIHsKIAkvKiBCQVIncyBhcmUgZW51bWVyYXRlZCBpbiB0ZXJtcyBvZiBwY2lfcmVzb3VyY2Vfc3RhcnQoKSB0ZXJtcyAqLwpAQCAtNzksMTMgKzk1LDMyIEBACiAJTVZfTUFKT1JfUkVHX0FSRUFfU1oJPSAweDEwMDAwLAkvKiA2NEtCICovCiAJTVZfTUlOT1JfUkVHX0FSRUFfU1oJPSAweDIwMDAsCS8qIDhLQiAqLwogCisJLyogRm9yIHVzZSB3aXRoIGJvdGggSVJRIGNvYWxlc2NpbmcgbWV0aG9kcyAoImFsbCBwb3J0cyIgb3IgInBlci1IQyIgKi8KKwlDT0FMX0NMT0NLU19QRVJfVVNFQwk9IDE1MCwJCS8qIGZvciBjYWxjdWxhdGluZyBDT0FMX1RJTUVzICovCisJTUFYX0NPQUxfVElNRV9USFJFU0hPTEQJPSAoKDEgPDwgMjQpIC0gMSksIC8qIGludGVybmFsIGNsb2NrcyBjb3VudCAqLworCU1BWF9DT0FMX0lPX0NPVU5UCT0gMjU1LAkJLyogY29tcGxldGVkIEkvTyBjb3VudCAqLworCiAJTVZfUENJX1JFR19CQVNFCQk9IDAsCi0JTVZfSVJRX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAkvKiA2eHh4IHBhcnQgb25seSAqLwotCU1WX0lSUV9DT0FMX0NBVVNFCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4MDgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0xPCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ODgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0hJCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAotCU1WX0lSUV9DT0FMX1RIUkVTSE9MRAkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGNjKSwKLQlNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRAk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ZDApLAorCisJLyoKKwkgKiBQZXItY2hpcCAoImFsbCBwb3J0cyIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBvbmx5IGZvciBHRU5fSUkgLyBHRU5fSUlFIGhhcmR3YXJlLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCU1WX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAorCU1WX0lSUV9DT0FMX0NBVVNFCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDA4KSwKKwlBTExfUE9SVFNfQ09BTF9JUlEJPSAoMSA8PCA0KSwJLyogYWxsIHBvcnRzIGlycSBldmVudCAqLworCisJTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEICAgPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4Y2MpLAorCU1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEID0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweGQwKSwKKworCS8qCisJICogUmVnaXN0ZXJzIGZvciB0aGUgKHVudXNlZCBoZXJlKSB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nIGZlYXR1cmU6CisJICovCisJTVZfVFJBTl9DT0FMX0NBVVNFX0xPCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDg4KSwKKwlNVl9UUkFOX0NPQUxfQ0FVU0VfSEkJPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAogCiAJTVZfU0FUQUhDMF9SRUdfQkFTRQk9IDB4MjAwMDAsCiAJTVZfRkxBU0hfQ1RMX09GUwk9IDB4MTA0NmMsCkBAIC0xMTcsMTcgKzE1MiwxNiBAQAogCiAJLyogSG9zdCBGbGFncyAqLwogCU1WX0ZMQUdfRFVBTF9IQwkJPSAoMSA8PCAzMCksICAvKiB0d28gU0FUQSBIb3N0IENvbnRyb2xsZXJzICovCi0JTVZfRkxBR19JUlFfQ09BTEVTQ0UJPSAoMSA8PCAyOSksICAvKiBJUlEgY29hbGVzY2luZyBjYXBhYmlsaXR5ICovCiAKIAlNVl9DT01NT05fRkxBR1MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fQVRBUEkgfAotCQkJCSAgQVRBX0ZMQUdfUElPX1BPTExJTkcsCisJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX1BPTExJTkcsCiAKLQlNVl82WFhYX0ZMQUdTCQk9IE1WX0ZMQUdfSVJRX0NPQUxFU0NFLAorCU1WX0dFTl9JX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX05PX0FUQVBJLAogCi0JTVZfR0VOSUlFX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAotCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKLQkJCQkgIEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0FOLAorCU1WX0dFTl9JSV9GTEFHUwkJPSBNVl9DT01NT05fRkxBR1MgfCBBVEFfRkxBR19OQ1EgfAorCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBLAorCisJTVZfR0VOX0lJRV9GTEFHUwk9IE1WX0dFTl9JSV9GTEFHUyB8IEFUQV9GTEFHX0FOLAogCiAJQ1JRQl9GTEFHX1JFQUQJCT0gKDEgPDwgMCksCiAJQ1JRQl9UQUdfU0hJRlQJCT0gMSwKQEAgLTE4MCwxNiArMjE0LDE4IEBACiAJUENJX0hDX01BSU5fSVJRX01BU0tfT0ZTICA9IDB4MWQ2NCwKIAlTT0NfSENfTUFJTl9JUlFfQ0FVU0VfT0ZTID0gMHgyMDAyMCwKIAlTT0NfSENfTUFJTl9JUlFfTUFTS19PRlMgID0gMHgyMDAyNCwKLQlFUlJfSVJRCQkJPSAoMSA8PCAwKSwJLyogc2hpZnQgYnkgcG9ydCAjICovCi0JRE9ORV9JUlEJCT0gKDEgPDwgMSksCS8qIHNoaWZ0IGJ5IHBvcnQgIyAqLworCUVSUl9JUlEJCQk9ICgxIDw8IDApLAkvKiBzaGlmdCBieSAoMiAqIHBvcnQgIykgKi8KKwlET05FX0lSUQkJPSAoMSA8PCAxKSwJLyogc2hpZnQgYnkgKDIgKiBwb3J0ICMpICovCiAJSEMwX0lSUV9QRU5ECQk9IDB4MWZmLAkvKiBiaXRzIDAtOCA9IEhDMCdzIHBvcnRzICovCiAJSENfU0hJRlQJCT0gOSwJCS8qIGJpdHMgOS0xNyA9IEhDMSdzIHBvcnRzICovCisJRE9ORV9JUlFfMF8zCQk9IDB4MDAwMDAwYWEsCS8qIERPTkVfSVJRIHBvcnRzIDAsMSwyLDMgKi8KKwlET05FX0lSUV80XzcJCT0gKERPTkVfSVJRXzBfMyA8PCBIQ19TSElGVCksICAvKiA0LDUsNiw3ICovCiAJUENJX0VSUgkJCT0gKDEgPDwgMTgpLAotCVRSQU5fTE9fRE9ORQkJPSAoMSA8PCAxOSksCS8qIDZ4eHg6IElSUSBjb2FsZXNjaW5nICovCi0JVFJBTl9ISV9ET05FCQk9ICgxIDw8IDIwKSwJLyogNnh4eDogSVJRIGNvYWxlc2NpbmcgKi8KLQlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCi0JUE9SVFNfNF83X0NPQUxfRE9ORQk9ICgxIDw8IDE3KSwKLQlQT1JUU18wXzdfQ09BTF9ET05FCT0gKDEgPDwgMjEpLAkvKiA2eHh4OiBJUlEgY29hbGVzY2luZyAqLworCVRSQU5fQ09BTF9MT19ET05FCT0gKDEgPDwgMTkpLAkvKiB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nICovCisJVFJBTl9DT0FMX0hJX0RPTkUJPSAoMSA8PCAyMCksCS8qIHRyYW5zYWN0aW9uIGNvYWxlc2NpbmcgKi8KKwlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCS8qIEhDMCBJUlEgY29hbGVzY2luZyAqLworCVBPUlRTXzRfN19DT0FMX0RPTkUJPSAoMSA8PCAxNyksCS8qIEhDMSBJUlEgY29hbGVzY2luZyAqLworCUFMTF9QT1JUU19DT0FMX0RPTkUJPSAoMSA8PCAyMSksCS8qIEdFTl9JSShFKSBJUlEgY29hbGVzY2luZyAqLwogCUdQSU9fSU5UCQk9ICgxIDw8IDIyKSwKIAlTRUxGX0lOVAkJPSAoMSA8PCAyMyksCiAJVFdTSV9JTlQJCT0gKDEgPDwgMjQpLApAQCAtMjA1LDYgKzI0MSwyMSBAQAogCUhDX0NPQUxfSVJRCQk9ICgxIDw8IDQpLAkvKiBJUlEgY29hbGVzY2luZyAqLwogCURFVl9JUlEJCQk9ICgxIDw8IDgpLAkvKiBzaGlmdCBieSBwb3J0ICMgKi8KIAorCS8qCisJICogUGVyLUhDIChIb3N0LUNvbnRyb2xsZXIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBwcmVzZW50IG9uIGFsbCBjaGlwIGdlbmVyYXRpb25zLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCUhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMJPSAweDAwMGMsCisJSENfSVJRX0NPQUxfVElNRV9USFJFU0hPTERfT0ZTCT0gMHgwMDEwLAorCisJU09DX0xFRF9DVFJMX09GUwk9IDB4MmMsCisJU09DX0xFRF9DVFJMX0JMSU5LCT0gKDEgPDwgMCksCS8qIEFjdGl2ZSBMRUQgYmxpbmsgKi8KKwlTT0NfTEVEX0NUUkxfQUNUX1BSRVNFTkNFID0gKDEgPDwgMiksCS8qIE11bHRpcGxleCBkZXYgcHJlc2VuY2UgKi8KKwkJCQkJCS8qICB3aXRoIGRldiBhY3Rpdml0eSBMRUQgKi8KKwogCS8qIFNoYWRvdyBibG9jayByZWdpc3RlcnMgKi8KIAlTSERfQkxLX09GUwkJPSAweDEwMCwKIAlTSERfQ1RMX0FTVF9PRlMJCT0gMHgyMCwJCS8qIG9mcyBmcm9tIFNIRF9CTEtfT0ZTICovCkBAIC0zNDYsNiArMzk3LDEyIEBACiAJRURNQV9BUkJfQ0ZHX09GUwk9IDB4MzgsCiAKIAlFRE1BX0hBTFRDT05EX09GUwk9IDB4NjAsCQkvKiBHZW5JSWUgaGFsdCBjb25kaXRpb25zICovCisJRURNQV9VTktOT1dOX1JTVkRfT0ZTCT0gMHg2QywJCS8qIEdlbklJZSB1bmtub3duL3Jlc2VydmVkICovCisKKwlCTURNQV9DTURfT0ZTCQk9IDB4MjI0LAkvKiBibWRtYSBjb21tYW5kIHJlZ2lzdGVyICovCisJQk1ETUFfU1RBVFVTX09GUwk9IDB4MjI4LAkvKiBibWRtYSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlCTURNQV9QUkRfTE9XX09GUwk9IDB4MjJjLAkvKiBibWRtYSBQUkQgYWRkciAzMTowICovCisJQk1ETUFfUFJEX0hJR0hfT0ZTCT0gMHgyMzAsCS8qIGJtZG1hIFBSRCBhZGRyIDYzOjMyICovCiAKIAkvKiBIb3N0IHByaXZhdGUgZmxhZ3MgKGhwX2ZsYWdzKSAqLwogCU1WX0hQX0ZMQUdfTVNJCQk9ICgxIDw8IDApLApAQCAtMzU5LDEyICs0MTYsMTQgQEAKIAlNVl9IUF9QQ0lFCQk9ICgxIDw8IDkpLAkvKiBQQ0llIGJ1cy9yZWdzOiA3MDQyICovCiAJTVZfSFBfQ1VUX1RIUk9VR0gJPSAoMSA8PCAxMCksCS8qIGNhbiB1c2UgRURNQSBjdXQtdGhyb3VnaCAqLwogCU1WX0hQX0ZMQUdfU09DCQk9ICgxIDw8IDExKSwJLyogU3lzdGVtT25DaGlwLCBubyBQQ0kgKi8KKwlNVl9IUF9RVUlSS19MRURfQkxJTktfRU4gPSAoMSA8PCAxMiksCS8qIGlzIGxlZCBibGlua2luZyBlbmFibGVkPyAqLwogCiAJLyogUG9ydCBwcml2YXRlIGZsYWdzIChwcF9mbGFncykgKi8KIAlNVl9QUF9GTEFHX0VETUFfRU4JPSAoMSA8PCAwKSwJLyogaXMgRURNQSBlbmdpbmUgZW5hYmxlZD8gKi8KIAlNVl9QUF9GTEFHX05DUV9FTgk9ICgxIDw8IDEpLAkvKiBpcyBFRE1BIHNldCB1cCBmb3IgTkNRPyAqLwogCU1WX1BQX0ZMQUdfRkJTX0VOCT0gKDEgPDwgMiksCS8qIGlzIEVETUEgc2V0IHVwIGZvciBGQlM/ICovCiAJTVZfUFBfRkxBR19ERUxBWUVEX0VICT0gKDEgPDwgMyksCS8qIGRlbGF5ZWQgZGV2IGVyciBoYW5kbGluZyAqLworCU1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSA9ICgxIDw8IDQpLAkvKiBpZ25vcmUgaW5pdGlhbCBBVEFfRFJEWSAqLwogfTsKIAogI2RlZmluZSBJU19HRU5fSShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0kpCkBAIC00MzMsNiArNDkyLDE4IEBACiAJX19sZTMyCQkJcmVzZXJ2ZWQ7CiB9OwogCisvKgorICogV2Uga2VlcCBhIGxvY2FsIGNhY2hlIG9mIGEgZmV3IGZyZXF1ZW50bHkgYWNjZXNzZWQgcG9ydAorICogcmVnaXN0ZXJzIGhlcmUsIHRvIGF2b2lkIGhhdmluZyB0byByZWFkIHRoZW0gKHZlcnkgc2xvdykKKyAqIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gRURNQSBhbmQgbm9uLUVETUEgbW9kZXMuCisgKi8KK3N0cnVjdCBtdl9jYWNoZWRfcmVncyB7CisJdTMyCQkJZmlzY2ZnOworCXUzMgkJCWx0bW9kZTsKKwl1MzIJCQloYWx0Y29uZDsKKwl1MzIJCQl1bmtub3duX3JzdmQ7Cit9OworCiBzdHJ1Y3QgbXZfcG9ydF9wcml2IHsKIAlzdHJ1Y3QgbXZfY3JxYgkJKmNycWI7CiAJZG1hX2FkZHJfdAkJY3JxYl9kbWE7CkBAIC00NDUsNiArNTE2LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJlc3BfaWR4OwogCiAJdTMyCQkJcHBfZmxhZ3M7CisJc3RydWN0IG12X2NhY2hlZF9yZWdzCWNhY2hlZDsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5ZWRfZWhfcG1wX21hcDsKIH07CiAKQEAgLTUzNSw3ICs2MDcsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgcG9ydF9ubyk7CiBzdGF0aWMgaW50IG12X3N0b3BfZWRtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyBpbnQgbXZfc3RvcF9lZG1hX2VuZ2luZSh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyk7Ci1zdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpOworc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9lZG1hKTsKIAogc3RhdGljIHZvaWQgbXZfcG1wX3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgcG1wKTsKIHN0YXRpYyBpbnQgbXZfcG1wX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCkBAIC01NDYsNiArNjE4LDE0IEBACiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2NycGJfZW50cmllcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCQlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCk7CiAKK3N0YXRpYyB2b2lkIG12X3NmZl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IG12X2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB2b2lkIG12X2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHU4ICAgbXZfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHU4IG12X3NmZl9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKIC8qIC5zZ190YWJsZXNpemUgaXMgKE1WX01BWF9TR19DVCAvIDIpIGluIHRoZSBzdHJ1Y3R1cmVzIGJlbG93CiAgKiBiZWNhdXNlIHdlIGhhdmUgdG8gYWxsb3cgcm9vbSBmb3Igd29yc3QgY2FzZSBzcGxpdHRpbmcgb2YKICAqIFBSRHMgZm9yIDY0SyBib3VuZGFyaWVzIGluIG12X2ZpbGxfc2coKS4KQEAgLTU2Niw2ICs2NDYsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12NV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAorCiAJLnFjX2RlZmVyCQk9IG12X3FjX2RlZmVyLAogCS5xY19wcmVwCQk9IG12X3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IG12X3FjX2lzc3VlLApAQCAtNTkzLDYgKzY3NSwxNCBAQAogCS5wbXBfc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBtdl9wbXBfZXJyb3JfaGFuZGxlciwKKworCS5zZmZfY2hlY2tfc3RhdHVzCT0gbXZfc2ZmX2NoZWNrX3N0YXR1cywKKwkuc2ZmX2lycV9jbGVhcgkJPSBtdl9zZmZfaXJxX2NsZWFyLAorCS5jaGVja19hdGFwaV9kbWEJPSBtdl9jaGVja19hdGFwaV9kbWEsCisJLmJtZG1hX3NldHVwCQk9IG12X2JtZG1hX3NldHVwLAorCS5ibWRtYV9zdGFydAkJPSBtdl9ibWRtYV9zdGFydCwKKwkuYm1kbWFfc3RvcAkJPSBtdl9ibWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gbXZfYm1kbWFfc3RhdHVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12X2lpZV9vcHMgPSB7CkBAIC02MDMsNTMgKzY5Myw0OSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CiAJeyAgLyogY2hpcF81MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDh4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDgwICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF82MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKLQkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19OQ1EsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY2X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNjA4eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRIHwgTVZfRkxBR19EVUFMX0hDLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12Nl9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzYwNDIgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKIAl9LAogCXsgIC8qIGNoaXBfNzA0MiAqLwotCQkuZmxhZ3MJCT0gTVZfR0VOSUlFX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJRV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF9zb2MgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKQEAgLTc5NCw2ICs4ODAsNDQgQEAKIAlyZXR1cm4gKChwb3J0X2ZsYWdzICYgTVZfRkxBR19EVUFMX0hDKSA/IDIgOiAxKTsKIH0KIAorLyoqCisgKiAgICAgIG12X3NhdmVfY2FjaGVkX3JlZ3MgLSAocmUtKWluaXRpYWxpemUgY2FjaGVkIHBvcnQgcmVnaXN0ZXJzCisgKiAgICAgIEBhcDogdGhlIHBvcnQgd2hvc2UgcmVnaXN0ZXJzIHdlIGFyZSBjYWNoaW5nCisgKgorICoJSW5pdGlhbGl6ZSB0aGUgbG9jYWwgY2FjaGUgb2YgcG9ydCByZWdpc3RlcnMsCisgKglzbyB0aGF0IHJlYWRpbmcgdGhlbSBvdmVyIGFuZCBvdmVyIGFnYWluIGNhbgorICoJYmUgYXZvaWRlZCBvbiB0aGUgaG90dGVyIHBhdGhzIG9mIHRoaXMgZHJpdmVyLgorICoJVGhpcyBzYXZlcyBhIGZldyBtaWNyb3NlY29uZHMgZWFjaCB0aW1lIHdlIHN3aXRjaAorICoJdG8vZnJvbSBFRE1BIG1vZGUgdG8gcGVyZm9ybSAoZWcuKSBhIGRyaXZlIGNhY2hlIGZsdXNoLgorICovCitzdGF0aWMgdm9pZCBtdl9zYXZlX2NhY2hlZF9yZWdzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlwcC0+Y2FjaGVkLmZpc2NmZyA9IHJlYWRsKHBvcnRfbW1pbyArIEZJU0NGR19PRlMpOworCXBwLT5jYWNoZWQubHRtb2RlID0gcmVhZGwocG9ydF9tbWlvICsgTFRNT0RFX09GUyk7CisJcHAtPmNhY2hlZC5oYWx0Y29uZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTKTsKKwlwcC0+Y2FjaGVkLnVua25vd25fcnN2ZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfVU5LTk9XTl9SU1ZEX09GUyk7Cit9CisKKy8qKgorICogICAgICBtdl93cml0ZV9jYWNoZWRfcmVnIC0gd3JpdGUgdG8gYSBjYWNoZWQgcG9ydCByZWdpc3RlcgorICogICAgICBAYWRkcjogaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqICAgICAgQG9sZDogcG9pbnRlciB0byBjYWNoZWQgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyCisgKiAgICAgIEBuZXc6IG5ldyB2YWx1ZSBmb3IgdGhlIHJlZ2lzdGVyCisgKgorICoJV3JpdGUgYSBuZXcgdmFsdWUgdG8gYSBjYWNoZWQgcmVnaXN0ZXIsCisgKglidXQgb25seSBpZiB0aGUgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbXZfd3JpdGVfY2FjaGVkX3JlZyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiAqb2xkLCB1MzIgbmV3KQoreworCWlmIChuZXcgIT0gKm9sZCkgeworCQkqb2xkID0gbmV3OworCQl3cml0ZWwobmV3LCBhZGRyKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9lZG1hX3B0cnModm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgICAgIHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2LAogCQkJICAgICBzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCkKQEAgLTgyNSw2ICs5NDksMjMgQEAKIAkJIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOwogfQogCitzdGF0aWMgdm9pZCBtdl93cml0ZV9tYWluX2lycV9tYXNrKHUzMiBtYXNrLCBzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdikKK3sKKwkvKgorCSAqIFdoZW4gd3JpdGluZyB0byB0aGUgbWFpbl9pcnFfbWFzayBpbiBoYXJkd2FyZSwKKwkgKiB3ZSBtdXN0IGVuc3VyZSBleGNsdXNpdml0eSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBiaXRzCisJICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGl2aWR1YWwgcG9ydCBET05FX0lSUSBiaXRzLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgcmVhbGx5IGFuICJJUlEgZW5hYmxlIiByZWdpc3RlciwKKwkgKiBub3QgYW4gIklSUSBtYXNrIiByZWdpc3RlciBhcyBNYXJ2ZWxsJ3MgbmFtaW5nIG1pZ2h0IHN1Z2dlc3QuCisJICovCisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzBfM19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV8wXzM7CisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzRfN19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV80Xzc7CisJd3JpdGVsZmwobWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9tYWluX2lycV9tYXNrKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKIAkJCQkgdTMyIGRpc2FibGVfYml0cywgdTMyIGVuYWJsZV9iaXRzKQogewpAQCAtODM1LDcgKzk3Niw3IEBACiAJbmV3X21hc2sgPSAob2xkX21hc2sgJiB+ZGlzYWJsZV9iaXRzKSB8IGVuYWJsZV9iaXRzOwogCWlmIChuZXdfbWFzayAhPSBvbGRfbWFzaykgewogCQlocHJpdi0+bWFpbl9pcnFfbWFzayA9IG5ld19tYXNrOwotCQl3cml0ZWxmbChuZXdfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2sobmV3X21hc2ssIGhwcml2KTsKIAl9CiB9CiAKQEAgLTg1Miw4ICs5OTMsOTQgQEAKIAltdl9zZXRfbWFpbl9pcnFfbWFzayhhcC0+aG9zdCwgZGlzYWJsZV9iaXRzLCBlbmFibGVfYml0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIG12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJCSAgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCisJCQkJCSAgdW5zaWduZWQgaW50IHBvcnRfaXJxcykKK3sKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IGhhcmRwb3J0ID0gbXZfaGFyZHBvcnRfZnJvbV9wb3J0KGFwLT5wb3J0X25vKTsKKwl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKKwkJCQltdl9ob3N0X2Jhc2UoYXAtPmhvc3QpLCBhcC0+cG9ydF9ubyk7CisJdTMyIGhjX2lycV9jYXVzZTsKKworCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCisJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9FUlJfSVJRX0NBVVNFX09GUyk7CisKKwkvKiBjbGVhciBwZW5kaW5nIGlycSBldmVudHMgKi8KKwloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOworCXdyaXRlbGZsKGhjX2lycV9jYXVzZSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOworCisJLyogY2xlYXIgRklTIElSUSBDYXVzZSAqLworCWlmIChJU19HRU5fSUlFKGhwcml2KSkKKwkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisKKwltdl9lbmFibGVfcG9ydF9pcnFzKGFwLCBwb3J0X2lycXMpOworfQorCitzdGF0aWMgdm9pZCBtdl9zZXRfaXJxX2NvYWxlc2Npbmcoc3RydWN0IGF0YV9ob3N0ICpob3N0LAorCQkJCSAgdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgdXNlY3MpCit7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvID0gaHByaXYtPmJhc2UsICpoY19tbWlvOworCXUzMiBjb2FsX2VuYWJsZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2xrcywgaXNfZHVhbF9oYyA9IGhwcml2LT5uX3BvcnRzID4gTVZfUE9SVFNfUEVSX0hDOworCWNvbnN0IHUzMiBjb2FsX2Rpc2FibGUgPSBQT1JUU18wXzNfQ09BTF9ET05FIHwgUE9SVFNfNF83X0NPQUxfRE9ORSB8CisJCQkJCQkJQUxMX1BPUlRTX0NPQUxfRE9ORTsKKworCS8qIERpc2FibGUgSVJRIGNvYWxlc2NpbmcgaWYgZWl0aGVyIHRocmVzaG9sZCBpcyB6ZXJvICovCisJaWYgKCF1c2VjcyB8fCAhY291bnQpIHsKKwkJY2xrcyA9IGNvdW50ID0gMDsKKwl9IGVsc2UgeworCQkvKiBSZXNwZWN0IG1heGltdW0gbGltaXRzIG9mIHRoZSBoYXJkd2FyZSAqLworCQljbGtzID0gdXNlY3MgKiBDT0FMX0NMT0NLU19QRVJfVVNFQzsKKwkJaWYgKGNsa3MgPiBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRCkKKwkJCWNsa3MgPSBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRDsKKwkJaWYgKGNvdW50ID4gTUFYX0NPQUxfSU9fQ09VTlQpCisJCQljb3VudCA9IE1BWF9DT0FMX0lPX0NPVU5UOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgY29hbF9kaXNhYmxlLCAwKTsKKworCWlmIChpc19kdWFsX2hjICYmICFJU19HRU5fSShocHJpdikpIHsKKwkJLyoKKwkJICogR0VOX0lJL0dFTl9JSUUgd2l0aCBkdWFsIGhvc3QgY29udHJvbGxlcnM6CisJCSAqIG9uZSBzZXQgb2YgZ2xvYmFsIHRocmVzaG9sZHMgZm9yIHRoZSBlbnRpcmUgY2hpcC4KKwkJICovCisJCXdyaXRlbChjbGtzLCAgbW1pbyArIE1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEKTsKKwkJd3JpdGVsKGNvdW50LCBtbWlvICsgTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEKTsKKwkJLyogY2xlYXIgbGVmdG92ZXIgY29hbCBJUlEgYml0ICovCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCQlpZiAoY291bnQpCisJCQljb2FsX2VuYWJsZSA9IEFMTF9QT1JUU19DT0FMX0RPTkU7CisJCWNsa3MgPSBjb3VudCA9IDA7IC8qIGZvcmNlIGNsZWFyaW5nIG9mIHJlZ3VsYXIgcmVncyBiZWxvdyAqLworCX0KKworCS8qCisJICogQWxsIGNoaXBzOiBpbmRlcGVuZGVudCB0aHJlc2hvbGRzIGZvciBlYWNoIEhDIG9uIHRoZSBjaGlwLgorCSAqLworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtbWlvLCAwKTsKKwl3cml0ZWwoY2xrcywgIGhjX21taW8gKyBIQ19JUlFfQ09BTF9USU1FX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbCh+SENfQ09BTF9JUlEsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKKwlpZiAoY291bnQpCisJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzBfM19DT0FMX0RPTkU7CisJaWYgKGlzX2R1YWxfaGMpIHsKKwkJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG1taW8sIE1WX1BPUlRTX1BFUl9IQyk7CisJCXdyaXRlbChjbGtzLCAgaGNfbW1pbyArIEhDX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEX09GUyk7CisJCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCQl3cml0ZWwofkhDX0NPQUxfSVJRLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7CisJCWlmIChjb3VudCkKKwkJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzRfN19DT0FMX0RPTkU7CisJfQorCisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgY29hbF9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoqCi0gKiAgICAgIG12X3N0YXJ0X2RtYSAtIEVuYWJsZSBlRE1BIGVuZ2luZQorICogICAgICBtdl9zdGFydF9lZG1hIC0gRW5hYmxlIGVETUEgZW5naW5lCiAgKiAgICAgIEBiYXNlOiBwb3J0IGJhc2UgYWRkcmVzcwogICogICAgICBAcHA6IHBvcnQgcHJpdmF0ZSBkYXRhCiAgKgpAQCAtODYzLDcgKzEwOTAsNyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyB2b2lkIG12X3N0YXJ0X2RtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKK3N0YXRpYyB2b2lkIG12X3N0YXJ0X2VkbWEoc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgc3RydWN0IG12X3BvcnRfcHJpdiAqcHAsIHU4IHByb3RvY29sKQogewogCWludCB3YW50X25jcSA9IChwcm90b2NvbCA9PSBBVEFfUFJPVF9OQ1EpOwpAQCAtODc1LDI2ICsxMTAyLDExIEBACiAJfQogCWlmICghKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikpIHsKIAkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCQlpbnQgaGFyZHBvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQoYXAtPnBvcnRfbm8pOwotCQl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKLQkJCQkJbXZfaG9zdF9iYXNlKGFwLT5ob3N0KSwgYXAtPnBvcnRfbm8pOwotCQl1MzIgaGNfaXJxX2NhdXNlOwogCi0JCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCi0JCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfRVJSX0lSUV9DQVVTRV9PRlMpOwotCi0JCS8qIGNsZWFyIHBlbmRpbmcgaXJxIGV2ZW50cyAqLwotCQloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOwotCQl3cml0ZWxmbChoY19pcnFfY2F1c2UsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKLQotCQltdl9lZG1hX2NmZyhhcCwgd2FudF9uY3EpOwotCi0JCS8qIGNsZWFyIEZJUyBJUlEgQ2F1c2UgKi8KLQkJaWYgKElTX0dFTl9JSUUoaHByaXYpKQotCQkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisJCW12X2VkbWFfY2ZnKGFwLCB3YW50X25jcSwgMSk7CiAKIAkJbXZfc2V0X2VkbWFfcHRycyhwb3J0X21taW8sIGhwcml2LCBwcCk7Ci0JCW12X2VuYWJsZV9wb3J0X2lycXMoYXAsIERPTkVfSVJRfEVSUl9JUlEpOworCQltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgcG9ydF9tbWlvLCBET05FX0lSUXxFUlJfSVJRKTsKIAogCQl3cml0ZWxmbChFRE1BX0VOLCBwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpOwogCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19FRE1BX0VOOwpAQCAtOTUyLDYgKzExNjQsNyBAQAogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIgPSAwOwogCiAJaWYgKCEocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSkKIAkJcmV0dXJuIDA7CkBAIC05NTksOSArMTE3MiwxMCBAQAogCW12X3dhaXRfZm9yX2VkbWFfZW1wdHlfaWRsZShhcCk7CiAJaWYgKG12X3N0b3BfZWRtYV9lbmdpbmUocG9ydF9tbWlvKSkgewogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiVW5hYmxlIHRvIHN0b3AgZURNQVxuIik7Ci0JCXJldHVybiAtRUlPOworCQllcnIgPSAtRUlPOwogCX0KLQlyZXR1cm4gMDsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIEFUQV9ERUJVRwpAQCAtMTEzMCwzNSArMTM0NCwzMyBAQAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KIAotc3RhdGljIHZvaWQgbXZfY29uZmlnX2Zicyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9mYnMpCitzdGF0aWMgdm9pZCBtdl9jb25maWdfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZmJzKQogewotCXUzMiBuZXdfZmlzY2ZnLCBvbGRfZmlzY2ZnOwotCXUzMiBuZXdfbHRtb2RlLCBvbGRfbHRtb2RlOwotCXUzMiBuZXdfaGFsdGNvbmQsIG9sZF9oYWx0Y29uZDsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW87CiAKLQlvbGRfZmlzY2ZnICAgPSByZWFkbChwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlvbGRfbHRtb2RlICAgPSByZWFkbChwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlvbGRfaGFsdGNvbmQgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJdTMyIGZpc2NmZywgICAqb2xkX2Zpc2NmZyAgID0gJnBwLT5jYWNoZWQuZmlzY2ZnOworCXUzMiBsdG1vZGUsICAgKm9sZF9sdG1vZGUgICA9ICZwcC0+Y2FjaGVkLmx0bW9kZTsKKwl1MzIgaGFsdGNvbmQsICpvbGRfaGFsdGNvbmQgPSAmcHAtPmNhY2hlZC5oYWx0Y29uZDsKIAotCW5ld19maXNjZmcgICA9IG9sZF9maXNjZmcgJiB+KEZJU0NGR19TSU5HTEVfU1lOQyB8IEZJU0NGR19XQUlUX0RFVl9FUlIpOwotCW5ld19sdG1vZGUgICA9IG9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7Ci0JbmV3X2hhbHRjb25kID0gb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOworCWx0bW9kZSAgID0gKm9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7CisJaGFsdGNvbmQgPSAqb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOwogCiAJaWYgKHdhbnRfZmJzKSB7Ci0JCW5ld19maXNjZmcgPSBvbGRfZmlzY2ZnIHwgRklTQ0ZHX1NJTkdMRV9TWU5DOwotCQluZXdfbHRtb2RlID0gb2xkX2x0bW9kZSB8IExUTU9ERV9CSVQ4OworCQlmaXNjZmcgPSAqb2xkX2Zpc2NmZyB8IEZJU0NGR19TSU5HTEVfU1lOQzsKKwkJbHRtb2RlID0gKm9sZF9sdG1vZGUgfCBMVE1PREVfQklUODsKIAkJaWYgKHdhbnRfbmNxKQotCQkJbmV3X2hhbHRjb25kICY9IH5FRE1BX0VSUl9ERVY7CisJCQloYWx0Y29uZCAmPSB+RURNQV9FUlJfREVWOwogCQllbHNlCi0JCQluZXdfZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCQkJZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCX0gZWxzZSB7CisJCWZpc2NmZyA9ICpvbGRfZmlzY2ZnICYgfihGSVNDRkdfU0lOR0xFX1NZTkMgfCBGSVNDRkdfV0FJVF9ERVZfRVJSKTsKIAl9CiAKLQlpZiAobmV3X2Zpc2NmZyAhPSBvbGRfZmlzY2ZnKQotCQl3cml0ZWxmbChuZXdfZmlzY2ZnLCBwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlpZiAobmV3X2x0bW9kZSAhPSBvbGRfbHRtb2RlKQotCQl3cml0ZWxmbChuZXdfbHRtb2RlLCBwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlpZiAobmV3X2hhbHRjb25kICE9IG9sZF9oYWx0Y29uZCkKLQkJd3JpdGVsZmwobmV3X2hhbHRjb25kLCBwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhwb3J0X21taW8gKyBGSVNDRkdfT0ZTLCBvbGRfZmlzY2ZnLCBmaXNjZmcpOworCW12X3dyaXRlX2NhY2hlZF9yZWcocG9ydF9tbWlvICsgTFRNT0RFX09GUywgb2xkX2x0bW9kZSwgbHRtb2RlKTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTLCBvbGRfaGFsdGNvbmQsIGhhbHRjb25kKTsKIH0KIAogc3RhdGljIHZvaWQgbXZfNjB4MV9lcnJhdGFfc2F0YTI1KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSkKQEAgLTExNzYsNyArMTM4OCw4NiBAQAogCQl3cml0ZWwobmV3LCBocHJpdi0+YmFzZSArIE1WX0dQSU9fUE9SVF9DVExfT0ZTKTsKIH0KIAotc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxKQorLyoqCisgKgltdl9ibWRtYV9lbmFibGUgLSBzZXQgYSBtYWdpYyBiaXQgb24gR0VOX0lJRSB0byBhbGxvdyBibWRtYQorICoJQGFwOiBQb3J0IGJlaW5nIGluaXRpYWxpemVkCisgKgorICoJVGhlcmUgYXJlIHR3byBETUEgbW9kZXMgb24gdGhlc2UgY2hpcHM6ICBiYXNpYyBETUEsIGFuZCBFRE1BLgorICoKKyAqCUJpdC0wIG9mIHRoZSAiRURNQSBSRVNFUlZFRCIgcmVnaXN0ZXIgZW5hYmxlcy9kaXNhYmxlcyB1c2UKKyAqCW9mIGJhc2ljIERNQSBvbiB0aGUgR0VOX0lJRSB2ZXJzaW9ucyBvZiB0aGUgY2hpcHMuCisgKgorICoJVGhpcyBiaXQgc3Vydml2ZXMgRURNQSByZXNldHMsIGFuZCBtdXN0IGJlIHNldCBmb3IgYmFzaWMgRE1BCisgKgl0byBmdW5jdGlvbiwgYW5kIHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gRURNQSBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX2VuYWJsZV9paWUoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IGVuYWJsZV9ibWRtYSkKK3sKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdTMyIG5ldywgKm9sZCA9ICZwcC0+Y2FjaGVkLnVua25vd25fcnN2ZDsKKworCWlmIChlbmFibGVfYm1kbWEpCisJCW5ldyA9ICpvbGQgfCAxOworCWVsc2UKKwkJbmV3ID0gKm9sZCAmIH4xOworCW12X3dyaXRlX2NhY2hlZF9yZWcobXZfYXBfYmFzZShhcCkgKyBFRE1BX1VOS05PV05fUlNWRF9PRlMsIG9sZCwgbmV3KTsKK30KKworLyoKKyAqIFNPQyBjaGlwcyBoYXZlIGFuIGlzc3VlIHdoZXJlYnkgdGhlIEhERCBMRURzIGRvbid0IGFsd2F5cyBibGluaworICogZHVyaW5nIEkvTyB3aGVuIE5DUSBpcyBlbmFibGVkLiBFbmFibGluZyBhIHNwZWNpYWwgIkxFRCBibGluayIgbW9kZQorICogb2YgdGhlIFNPQyB0YWtlcyBjYXJlIG9mIGl0LCBnZW5lcmF0aW5nIGEgc3RlYWR5IGJsaW5rIHJhdGUgd2hlbgorICogYW55IGRyaXZlIG9uIHRoZSBjaGlwIGlzIGFjdGl2ZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgYmxpbmsgbW9kZSBpcyBhIGdsb2JhbCBoYXJkd2FyZSBzZXR0aW5nIGZvciB0aGUgU09DLAorICogc28gd2UgbXVzdCB1c2UgaXQgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIHBvcnQgb24gdGhlIFNPQyBoYXMgTkNRIGVuYWJsZWQuCisgKgorICogV2UgdHVybiAiTEVEIGJsaW5rIiBvZmYgd2hlbiBOQ1EgaXMgbm90IGluIHVzZSBhbnl3aGVyZSwgYmVjYXVzZSB0aGUgbm9ybWFsCisgKiBMRUQgb3BlcmF0aW9uIHdvcmtzIHRoZW4sIGFuZCBwcm92aWRlcyBiZXR0ZXIgKG1vcmUgYWNjdXJhdGUpIGZlZWRiYWNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IGFuIFNPQyBuZXZlciBoYXMgbW9yZSB0aGFuIG9uZSBIQyBvbmJvYXJkLgorICovCitzdGF0aWMgdm9pZCBtdl9zb2NfbGVkX2JsaW5rX2VuYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisKKwlpZiAoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOKQorCQlyZXR1cm47CisJaHByaXYtPmhwX2ZsYWdzIHw9IE1WX0hQX1FVSVJLX0xFRF9CTElOS19FTjsKKwloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobXZfaG9zdF9iYXNlKGhvc3QpLCBhcC0+cG9ydF9ubyk7CisJbGVkX2N0cmwgPSByZWFkbChoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7CisJd3JpdGVsKGxlZF9jdHJsIHwgU09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3NvY19sZWRfYmxpbmtfZGlzYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisJdW5zaWduZWQgaW50IHBvcnQ7CisKKwlpZiAoIShocHJpdi0+aHBfZmxhZ3MgJiBNVl9IUF9RVUlSS19MRURfQkxJTktfRU4pKQorCQlyZXR1cm47CisKKwkvKiBkaXNhYmxlIGxlZC1ibGluayBvbmx5IGlmIG5vIHBvcnRzIGFyZSB1c2luZyBOQ1EgKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHByaXYtPm5fcG9ydHM7IHBvcnQrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKnRoaXNfYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKKwkJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSB0aGlzX2FwLT5wcml2YXRlX2RhdGE7CisKKwkJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKQorCQkJcmV0dXJuOworCX0KKworCWhwcml2LT5ocF9mbGFncyAmPSB+TVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOOworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtdl9ob3N0X2Jhc2UoaG9zdCksIGFwLT5wb3J0X25vKTsKKwlsZWRfY3RybCA9IHJlYWRsKGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKKwl3cml0ZWwobGVkX2N0cmwgJiB+U09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZWRtYSkKIHsKIAl1MzIgY2ZnOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwICAgID0gYXAtPnByaXZhdGVfZGF0YTsKQEAgLTExODUsNyArMTQ3Niw4IEBACiAKIAkvKiBzZXQgdXAgbm9uLU5DUSBFRE1BIGNvbmZpZ3VyYXRpb24gKi8KIAljZmcgPSBFRE1BX0NGR19RX0RFUFRIOwkJLyogYWx3YXlzIDB4MWYgZm9yICphbGwqIGNoaXBzICovCi0JcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZCU19FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAlpZiAoSVNfR0VOX0koaHByaXYpKQogCQljZmcgfD0gKDEgPDwgOCk7CS8qIGVuYWIgY29uZmlnIGJ1cnN0IHNpemUgbWFzayAqLwpAQCAtMTIwNiw3ICsxNDk4LDcgQEAKIAkJICovCiAJCXdhbnRfZmJzICY9IHdhbnRfbmNxOwogCi0JCW12X2NvbmZpZ19mYnMocG9ydF9tbWlvLCB3YW50X25jcSwgd2FudF9mYnMpOworCQltdl9jb25maWdfZmJzKGFwLCB3YW50X25jcSwgd2FudF9mYnMpOwogCiAJCWlmICh3YW50X2ZicykgewogCQkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRkJTX0VOOwpAQCAtMTIxNCwxOCArMTUwNiwyNyBAQAogCQl9CiAKIAkJY2ZnIHw9ICgxIDw8IDIzKTsJLyogZG8gbm90IG1hc2sgUE0gZmllbGQgaW4gcngnZCBGSVMgKi8KLQkJY2ZnIHw9ICgxIDw8IDIyKTsJLyogZW5hYiA0LWVudHJ5IGhvc3QgcXVldWUgY2FjaGUgKi8KLQkJaWYgKCFJU19TT0MoaHByaXYpKQotCQkJY2ZnIHw9ICgxIDw8IDE4KTsJLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCWlmICh3YW50X2VkbWEpIHsKKwkJCWNmZyB8PSAoMSA8PCAyMik7IC8qIGVuYWIgNC1lbnRyeSBob3N0IHF1ZXVlIGNhY2hlICovCisJCQlpZiAoIUlTX1NPQyhocHJpdikpCisJCQkJY2ZnIHw9ICgxIDw8IDE4KTsgLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCX0KIAkJaWYgKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX0NVVF9USFJPVUdIKQogCQkJY2ZnIHw9ICgxIDw8IDE3KTsgLyogZW5hYiBjdXQtdGhydSAoZGlzIHN0b3ImZm9yd3JkKSAqLworCQltdl9ibWRtYV9lbmFibGVfaWllKGFwLCAhd2FudF9lZG1hKTsKKworCQlpZiAoSVNfU09DKGhwcml2KSkgeworCQkJaWYgKHdhbnRfbmNxKQorCQkJCW12X3NvY19sZWRfYmxpbmtfZW5hYmxlKGFwKTsKKwkJCWVsc2UKKwkJCQltdl9zb2NfbGVkX2JsaW5rX2Rpc2FibGUoYXApOworCQl9CiAJfQogCiAJaWYgKHdhbnRfbmNxKSB7CiAJCWNmZyB8PSBFRE1BX0NGR19OQ1E7CiAJCXBwLT5wcF9mbGFncyB8PSAgTVZfUFBfRkxBR19OQ1FfRU47Ci0JfSBlbHNlCi0JCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19OQ1FfRU47CisJfQogCiAJd3JpdGVsZmwoY2ZnLCBwb3J0X21taW8gKyBFRE1BX0NGR19PRlMpOwogfQpAQCAtMTMwOSw2ICsxNjEwLDggQEAKIAkJCXBwLT5zZ190YmxfZG1hW3RhZ10gPSBwcC0+c2dfdGJsX2RtYVswXTsKIAkJfQogCX0KKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAJcmV0dXJuIDA7CiAKIG91dF9wb3J0X2ZyZWVfZG1hX21lbToKQEAgLTEzNTcsMTIgKzE2NjAsMTMgQEAKIAkJCXUzMiBvZmZzZXQgPSBhZGRyICYgMHhmZmZmOwogCQkJdTMyIGxlbiA9IHNnX2xlbjsKIAotCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4gPiAweDEwMDAwKSkKKwkJCWlmIChvZmZzZXQgKyBsZW4gPiAweDEwMDAwKQogCQkJCWxlbiA9IDB4MTAwMDAgLSBvZmZzZXQ7CiAKIAkJCW12X3NnLT5hZGRyID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQkJbXZfc2ctPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigoYWRkciA+PiAxNikgPj4gMTYpOwogCQkJbXZfc2ctPmZsYWdzX3NpemUgPSBjcHVfdG9fbGUzMihsZW4gJiAweGZmZmYpOworCQkJbXZfc2ctPnJlc2VydmVkID0gMDsKIAogCQkJc2dfbGVuIC09IGxlbjsKIAkJCWFkZHIgKz0gbGVuOwpAQCAtMTM3NCw2ICsxNjc4LDcgQEAKIAogCWlmIChsaWtlbHkobGFzdF9zZykpCiAJCWxhc3Rfc2ctPmZsYWdzX3NpemUgfD0gY3B1X3RvX2xlMzIoRVBSRF9GTEFHX0VORF9PRl9UQkwpOworCW1iKCk7IC8qIGVuc3VyZSBkYXRhIHN0cnVjdHVyZSBpcyB2aXNpYmxlIHRvIHRoZSBjaGlwc2V0ICovCiB9CiAKIHN0YXRpYyB2b2lkIG12X2NycWJfcGFja19jbWQoX19sZTE2ICpjbWR3LCB1OCBkYXRhLCB1OCBhZGRyLCB1bnNpZ25lZCBsYXN0KQpAQCAtMTM4NCw2ICsxNjg5LDE0NyBAQAogfQogCiAvKioKKyAqCW12X3NmZl9pcnFfY2xlYXIgLSBDbGVhciBoYXJkd2FyZSBpbnRlcnJ1cHQgYWZ0ZXIgRE1BLgorICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KKyAqCisgKglXZSBuZWVkIHRoaXMgb25seSBmb3IgQVRBUEkgYm1kbWEgdHJhbnNhY3Rpb25zLAorICoJYXMgb3RoZXJ3aXNlIHdlIGV4cGVyaWVuY2Ugc3B1cmlvdXMgaW50ZXJydXB0cworICoJYWZ0ZXIgbGliYXRhLXNmZiBoYW5kbGVzIHRoZSBibWRtYSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBtdl9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoYXAsIG12X2FwX2Jhc2UoYXApLCBFUlJfSVJRKTsKK30KKworLyoqCisgKgltdl9jaGVja19hdGFwaV9kbWEgLSBGaWx0ZXIgQVRBUEkgY21kcyB3aGljaCBhcmUgdW5zdWl0YWJsZSBmb3IgRE1BLgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBjaGVjayBmb3IgY2hpcHNldC9ETUEgY29tcGF0aWJpbGl0eS4KKyAqCisgKglUaGUgYm1kbWEgZW5naW5lcyBjYW5ub3QgaGFuZGxlIHNwZWN1bGF0aXZlIGRhdGEgc2l6ZXMKKyAqCShieXRlY291bnQgdW5kZXIvb3ZlciBmbG93KS4gIFNvIG9ubHkgYWxsb3cgRE1BIGZvcgorICoJZGF0YSB0cmFuc2ZlciBjb21tYW5kcyB3aXRoIGtub3duIGRhdGEgc2l6ZXMuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIGludCBtdl9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gcWMtPnNjc2ljbWQ7CisKKwlpZiAoc2NtZCkgeworCQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKKwkJY2FzZSBSRUFEXzY6CisJCWNhc2UgUkVBRF8xMDoKKwkJY2FzZSBSRUFEXzEyOgorCQljYXNlIFdSSVRFXzY6CisJCWNhc2UgV1JJVEVfMTA6CisJCWNhc2UgV1JJVEVfMTI6CisJCWNhc2UgR1BDTURfUkVBRF9DRDoKKwkJY2FzZSBHUENNRF9TRU5EX0RWRF9TVFJVQ1RVUkU6CisJCWNhc2UgR1BDTURfU0VORF9DVUVfU0hFRVQ6CisJCQlyZXR1cm4gMDsgLyogRE1BIGlzIHNhZmUgKi8KKwkJfQorCX0KKwlyZXR1cm4gLUVPUE5PVFNVUFA7IC8qIHVzZSBQSU8gaW5zdGVhZCAqLworfQorCisvKioKKyAqCW12X2JtZG1hX3NldHVwIC0gU2V0IHVwIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUgRE1BIGZvci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwltdl9maWxsX3NnKHFjKTsKKworCS8qIGNsZWFyIGFsbCBETUEgY21kIGJpdHMgKi8KKwl3cml0ZWwoMCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLworCXdyaXRlbCgocHAtPnNnX3RibF9kbWFbcWMtPnRhZ10gPj4gMTYpID4+IDE2LAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfSElHSF9PRlMpOworCXdyaXRlbGZsKHBwLT5zZ190YmxfZG1hW3FjLT50YWddLAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfTE9XX09GUyk7CisKKwkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLworCWFwLT5vcHMtPnNmZl9leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXJ0IC0gU3RhcnQgYSBCTURNQSB0cmFuc2FjdGlvbgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdGFydCBETUEgb24uCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdW5zaWduZWQgaW50IHJ3ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CisJdTMyIGNtZCA9IChydyA/IDAgOiBBVEFfRE1BX1dSKSB8IEFUQV9ETUFfU1RBUlQ7CisKKwkvKiBzdGFydCBob3N0IERNQSB0cmFuc2FjdGlvbiAqLworCXdyaXRlbGZsKGNtZCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7Cit9CisKKy8qKgorICoJbXZfYm1kbWFfc3RvcCAtIFN0b3AgQk1ETUEgdHJhbnNmZXIKKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RvcCBETUEgb24uCisgKgorICoJQ2xlYXJzIHRoZSBBVEFfRE1BX1NUQVJUIGZsYWcgaW4gdGhlIGJtZG1hIGNvbnRyb2wgcmVnaXN0ZXIKKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXUzMiBjbWQ7CisKKwkvKiBjbGVhciBzdGFydC9zdG9wIGJpdCAqLworCWNtZCA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCWNtZCAmPSB+QVRBX0RNQV9TVEFSVDsKKwl3cml0ZWxmbChjbWQsIHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCisJLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCisJYXRhX3NmZl9kbWFfcGF1c2UoYXApOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXR1cyAtIFJlYWQgQk1ETUEgc3RhdHVzCisgKglAYXA6IHBvcnQgZm9yIHdoaWNoIHRvIHJldHJpZXZlIERNQSBzdGF0dXMuCisgKgorICoJUmVhZCBhbmQgcmV0dXJuIGVxdWl2YWxlbnQgb2YgdGhlIHNmZiBCTURNQSBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHU4IG12X2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdTMyIHJlZywgc3RhdHVzOworCisJLyoKKwkgKiBPdGhlciBiaXRzIGFyZSB2YWxpZCBvbmx5IGlmIEFUQV9ETUFfQUNUSVZFPT0wLAorCSAqIGFuZCB0aGUgQVRBX0RNQV9JTlRSIGJpdCBkb2Vzbid0IGV4aXN0LgorCSAqLworCXJlZyA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX1NUQVRVU19PRlMpOworCWlmIChyZWcgJiBBVEFfRE1BX0FDVElWRSkKKwkJc3RhdHVzID0gQVRBX0RNQV9BQ1RJVkU7CisJZWxzZQorCQlzdGF0dXMgPSAocmVnICYgQVRBX0RNQV9FUlIpIHwgQVRBX0RNQV9JTlRSOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogICAgICBtdl9xY19wcmVwIC0gSG9zdCBzcGVjaWZpYyBjb21tYW5kIHByZXBhcmF0aW9uLgogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUKICAqCkBAIC0xNTQ1LDYgKzE5OTEsMTMyIEBACiB9CiAKIC8qKgorICoJbXZfc2ZmX2NoZWNrX3N0YXR1cyAtIGZldGNoIGRldmljZSBzdGF0dXMsIGlmIHZhbGlkCisgKglAYXA6IEFUQSBwb3J0IHRvIGZldGNoIHN0YXR1cyBmcm9tCisgKgorICoJV2hlbiB1c2luZyBjb21tYW5kIGlzc3VlIHZpYSBtdl9xY19pc3N1ZV9maXMoKSwKKyAqCXRoZSBpbml0aWFsIEFUQV9CVVNZIHN0YXRlIGRvZXMgbm90IHNob3cgdXAgaW4gdGhlCisgKglBVEEgc3RhdHVzIChzaGFkb3cpIHJlZ2lzdGVyLiAgVGhpcyBjYW4gY29uZnVzZSBsaWJhdGEhCisgKgorICoJU28gd2UgaGF2ZSBhIGhvb2sgaGVyZSB0byBmYWtlIEFUQV9CVVNZIGZvciB0aGF0IHNpdHVhdGlvbiwKKyAqCXVudGlsIHRoZSBmaXJzdCB0aW1lIGEgQlVTWSwgRFJRLCBvciBFUlIgYml0IGlzIHNlZW4uCisgKgorICoJVGhlIHJlc3Qgb2YgdGhlIHRpbWUsIGl0IHNpbXBseSByZXR1cm5zIHRoZSBBVEEgc3RhdHVzIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdTggbXZfc2ZmX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXQgPSBpb3JlYWQ4KGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kpIHsKKwkJaWYgKHN0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRIHwgQVRBX0VSUikpCisJCQlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsKKwkJZWxzZQorCQkJc3RhdCA9IEFUQV9CVVNZOworCX0KKwlyZXR1cm4gc3RhdDsKK30KKworLyoqCisgKgltdl9zZW5kX2ZpcyAtIFNlbmQgYSBGSVMsIHVzaW5nIHRoZSAiVmVuZG9yLVVuaXF1ZSBGSVMiIHJlZ2lzdGVyCisgKglAZmlzOiBmaXMgdG8gYmUgc2VudAorICoJQG53b3JkczogbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBpbiB0aGUgZmlzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXZfc2VuZF9maXMoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyICpmaXMsIGludCBud29yZHMpCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1MzIgaWZjdGwsIG9sZF9pZmN0bCwgaWZzdGF0OworCWludCBpLCB0aW1lb3V0ID0gMjAwLCBmaW5hbF93b3JkID0gbndvcmRzIC0gMTsKKworCS8qIEluaXRpYXRlIEZJUyB0cmFuc21pc3Npb24gbW9kZSAqLworCW9sZF9pZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwlpZmN0bCA9IDB4MTAwIHwgKG9sZF9pZmN0bCAmIDB4Zik7CisJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKworCS8qIFNlbmQgYWxsIHdvcmRzIG9mIHRoZSBGSVMgZXhjZXB0IGZvciB0aGUgZmluYWwgd29yZCAqLworCWZvciAoaSA9IDA7IGkgPCBmaW5hbF93b3JkOyArK2kpCisJCXdyaXRlbChmaXNbaV0sIHBvcnRfbW1pbyArIFZFTkRPUl9VTklRVUVfRklTX09GUyk7CisKKwkvKiBGbGFnIGVuZC1vZi10cmFuc21pc3Npb24sIGFuZCB0aGVuIHNlbmQgdGhlIGZpbmFsIHdvcmQgKi8KKwl3cml0ZWxmbChpZmN0bCB8IDB4MjAwLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisJd3JpdGVsZmwoZmlzW2ZpbmFsX3dvcmRdLCBwb3J0X21taW8gKyBWRU5ET1JfVU5JUVVFX0ZJU19PRlMpOworCisJLyoKKwkgKiBXYWl0IGZvciBGSVMgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLgorCSAqIFRoaXMgdHlwaWNhbGx5IHRha2VzIGp1c3QgYSBzaW5nbGUgaXRlcmF0aW9uLgorCSAqLworCWRvIHsKKwkJaWZzdGF0ID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JRlNUQVRfT0ZTKTsKKwl9IHdoaWxlICghKGlmc3RhdCAmIDB4MTAwMCkgJiYgLS10aW1lb3V0KTsKKworCS8qIFJlc3RvcmUgb3JpZ2luYWwgcG9ydCBjb25maWd1cmF0aW9uICovCisJd3JpdGVsZmwob2xkX2lmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisKKwkvKiBTZWUgaWYgaXQgd29ya2VkICovCisJaWYgKChpZnN0YXQgJiAweDMwMDApICE9IDB4MTAwMCkgeworCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywKKwkJCQkiJXMgdHJhbnNtaXNzaW9uIGVycm9yLCBpZnN0YXQ9JTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgaWZzdGF0KTsKKwkJcmV0dXJuIEFDX0VSUl9PVEhFUjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbXZfcWNfaXNzdWVfZmlzIC0gSXNzdWUgYSBjb21tYW5kIGRpcmVjdGx5IGFzIGEgRklTCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CisgKgorICoJTm90ZSB0aGF0IHRoZSBBVEEgc2hhZG93IHJlZ2lzdGVycyBhcmUgbm90IHVwZGF0ZWQKKyAqCWFmdGVyIGNvbW1hbmQgaXNzdWUsIHNvIHRoZSBkZXZpY2Ugd2lsbCBhcHBlYXIgIlJFQURZIgorICoJaWYgcG9sbGVkLCBldmVuIHdoaWxlIGl0IGlzIEJVU1kgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4KKyAqCisgKglTbyB3ZSB1c2UgYSBzdGF0dXMgaG9vayB0byBmYWtlIEFUQV9CVVNZIHVudGlsIHRoZSBkcml2ZSBjaGFuZ2VzIHN0YXRlLgorICoKKyAqCU5vdGU6IHdlIGRvbid0IGdldCB1cGRhdGVkIHNoYWRvdyByZWdzIG9uICpjb21wbGV0aW9uKgorICoJb2Ygbm9uLWRhdGEgY29tbWFuZHMuIFNvIGF2b2lkIHNlbmRpbmcgdGhlbSB2aWEgdGhpcyBmdW5jdGlvbiwKKyAqCWFzIHRoZXkgd2lsbCBhcHBlYXIgdG8gaGF2ZSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkuCisgKgorICoJR0VOX0lJRSBoYXMgc3BlY2lhbCByZWdpc3RlcnMgdGhhdCB3ZSBjb3VsZCBnZXQgdGhlIHJlc3VsdCB0ZiBmcm9tLAorICoJYnV0IGVhcmxpZXIgY2hpcHNldHMgZG8gbm90LiAgRm9yIG5vdywgd2UgaWdub3JlIHRob3NlIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtdl9xY19pc3N1ZV9maXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbmsgPSBxYy0+ZGV2LT5saW5rOworCXUzMiBmaXNbNV07CisJaW50IGVyciA9IDA7CisKKwlhdGFfdGZfdG9fZmlzKCZxYy0+dGYsIGxpbmstPnBtcCwgMSwgKHZvaWQgKilmaXMpOworCWVyciA9IG12X3NlbmRfZmlzKGFwLCBmaXMsIHNpemVvZihmaXMpIC8gc2l6ZW9mKGZpc1swXSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBUElfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9GSVJTVDsKKwkJYnJlYWs7CisJY2FzZSBBVEFfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisJCWVsc2UKKwkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7CisJCWJyZWFrOworCX0KKworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogICAgICBtdl9xY19pc3N1ZSAtIEluaXRpYXRlIGEgY29tbWFuZCB0byB0aGUgaG9zdAogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CiAgKgpAQCAtMTU1OCwxNCArMjEzMCwyOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CisJc3RhdGljIGludCBsaW1pdF93YXJuaW5ncyA9IDEwOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTMyIGluX2luZGV4OworCXVuc2lnbmVkIGludCBwb3J0X2lycXM7CiAKLQlpZiAoKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9ETUEpICYmCi0JICAgIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfTkNRKSkgewotCQlzdGF0aWMgaW50IGxpbWl0X3dhcm5pbmdzID0gMTA7CisJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7IC8qIHBhcmFub2lhICovCisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBX1BST1RfRE1BOgorCWNhc2UgQVRBX1BST1RfTkNROgorCQltdl9zdGFydF9lZG1hKGFwLCBwb3J0X21taW8sIHBwLCBxYy0+dGYucHJvdG9jb2wpOworCQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKKwkJaW5faW5kZXggPSBwcC0+cmVxX2lkeCA8PCBFRE1BX1JFUV9RX1BUUl9TSElGVDsKKworCQkvKiBXcml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLworCQl3cml0ZWxmbCgocHAtPmNycWJfZG1hICYgRURNQV9SRVFfUV9CQVNFX0xPX01BU0spIHwgaW5faW5kZXgsCisJCQkJCXBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7CisJCXJldHVybiAwOworCisJY2FzZSBBVEFfUFJPVF9QSU86CiAJCS8qCiAJCSAqIEVycmF0YSBTQVRBIzE2LCBTQVRBIzI0OiB3YXJuIGlmIG11bHRpcGxlIERSUXMgZXhwZWN0ZWQuCiAJCSAqCkBAIC0xNTgzLDI3ICsyMTY5LDQ2IEBACiAJCQkJCSI6IGF0dGVtcHRpbmcgUElPIHcvbXVsdGlwbGUgRFJROiAiCiAJCQkJCSJ0aGlzIG1heSBmYWlsIGR1ZSB0byBoL3cgZXJyYXRhXG4iKTsKIAkJfQotCQkvKgotCQkgKiBXZSdyZSBhYm91dCB0byBzZW5kIGEgbm9uLUVETUEgY2FwYWJsZSBjb21tYW5kIHRvIHRoZQotCQkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKLQkJICogc2hhZG93IGJsb2NrLCBldGMgcmVnaXN0ZXJzLgotCQkgKi8KLQkJbXZfc3RvcF9lZG1hKGFwKTsKLQkJbXZfZW5hYmxlX3BvcnRfaXJxcyhhcCwgRVJSX0lSUSk7Ci0JCW12X3BtcF9zZWxlY3QoYXAsIHFjLT5kZXYtPmxpbmstPnBtcCk7Ci0JCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKKwkJLyogZHJvcCB0aHJvdWdoICovCisJY2FzZSBBVEFfUFJPVF9OT0RBVEE6CisJY2FzZSBBVEFQSV9QUk9UX1BJTzoKKwljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgorCQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUElPX1BPTExJTkcpCisJCQlxYy0+dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1BPTExJTkc7CisJCWJyZWFrOwogCX0KIAotCW12X3N0YXJ0X2RtYShhcCwgcG9ydF9tbWlvLCBwcCwgcWMtPnRmLnByb3RvY29sKTsKKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCXBvcnRfaXJxcyA9IEVSUl9JUlE7CS8qIG1hc2sgZGV2aWNlIGludGVycnVwdCB3aGVuIHBvbGxpbmcgKi8KKwllbHNlCisJCXBvcnRfaXJxcyA9IEVSUl9JUlEgfCBET05FX0lSUTsJLyogdW5tYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAKLQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKLQlpbl9pbmRleCA9IHBwLT5yZXFfaWR4IDw8IEVETUFfUkVRX1FfUFRSX1NISUZUOworCS8qCisJICogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKKwkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKKwkgKiBzaGFkb3cgYmxvY2ssIGV0YyByZWdpc3RlcnMuCisJICovCisJbXZfc3RvcF9lZG1hKGFwKTsKKwltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgbXZfYXBfYmFzZShhcCksIHBvcnRfaXJxcyk7CisJbXZfcG1wX3NlbGVjdChhcCwgcWMtPmRldi0+bGluay0+cG1wKTsKIAotCS8qIGFuZCB3cml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLwotCXdyaXRlbGZsKChwcC0+Y3JxYl9kbWEgJiBFRE1BX1JFUV9RX0JBU0VfTE9fTUFTSykgfCBpbl9pbmRleCwKLQkJIHBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAocWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9SRUFEX0xPR19FWFQpIHsKKwkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCQkvKgorCQkgKiBXb3JrYXJvdW5kIGZvciA4OFNYNjB4MSBGRXIgU0FUQSMyNSAocGFydCAyKS4KKwkJICoKKwkJICogQWZ0ZXIgYW55IE5DUSBlcnJvciwgdGhlIFJFQURfTE9HX0VYVCBjb21tYW5kCisJCSAqIGZyb20gbGliYXRhLWVoICptdXN0KiB1c2UgbXZfcWNfaXNzdWVfZmlzKCkuCisJCSAqIE90aGVyd2lzZSBpdCBtaWdodCBmYWlsLCBkdWUgdG8gY2hpcCBlcnJhdGEuCisJCSAqCisJCSAqIFJhdGhlciB0aGFuIHNwZWNpYWwtY2FzZSBpdCwgd2UnbGwganVzdCAqYWx3YXlzKgorCQkgKiB1c2UgdGhpcyBtZXRob2QgaGVyZSBmb3IgUkVBRF9MT0dfRVhULCBtYWtpbmcgZm9yCisJCSAqIGVhc2llciB0ZXN0aW5nLgorCQkgKi8KKwkJaWYgKElTX0dFTl9JSShocHJpdikpCisJCQlyZXR1cm4gbXZfcWNfaXNzdWVfZmlzKHFjKTsKKwl9CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9xdWV1ZWRfY21kICptdl9nZXRfYWN0aXZlX3FjKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xNjE0LDggKzIyMTksMTIgQEAKIAlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pCiAJCXJldHVybiBOVUxMOwogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKLQlpZiAocWMgJiYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkKLQkJcWMgPSBOVUxMOworCWlmIChxYykgeworCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCQlxYyA9IE5VTEw7CisJCWVsc2UgaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQorCQkJcWMgPSBOVUxMOworCX0KIAlyZXR1cm4gcWM7CiB9CiAKQEAgLTIwODQsNiArMjY5MywxMCBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlLCAqaGNfbW1pbzsKIAl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDAsIHBvcnQ7CiAKKwkvKiBJZiBhc3NlcnRlZCwgY2xlYXIgdGhlICJhbGwgcG9ydHMiIElSUSBjb2FsZXNjaW5nIGJpdCAqLworCWlmIChtYWluX2lycV9jYXVzZSAmIEFMTF9QT1JUU19DT0FMX0RPTkUpCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhwcml2LT5uX3BvcnRzOyBwb3J0KyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW3BvcnRdOwogCQl1bnNpZ25lZCBpbnQgcCwgc2hpZnQsIGhhcmRwb3J0LCBwb3J0X2NhdXNlOwpAQCAtMjExNiw2ICsyNzI5LDggQEAKIAkJCSAqIHRvIGFjayAob25seSkgdGhvc2UgcG9ydHMgdmlhIGhjX2lycV9jYXVzZS4KIAkJCSAqLwogCQkJYWNrX2lycXMgPSAwOworCQkJaWYgKGhjX2NhdXNlICYgUE9SVFNfMF8zX0NPQUxfRE9ORSkKKwkJCQlhY2tfaXJxcyA9IEhDX0NPQUxfSVJROwogCQkJZm9yIChwID0gMDsgcCA8IE1WX1BPUlRTX1BFUl9IQzsgKytwKSB7CiAJCQkJaWYgKChwb3J0ICsgcCkgPj0gaHByaXYtPm5fcG9ydHMpCiAJCQkJCWJyZWFrOwpAQCAtMjIwNCw3ICsyODE5LDcgQEAKIAogCS8qIGZvciBNU0k6ICBibG9jayBuZXcgaW50ZXJydXB0cyB3aGlsZSBpbiBoZXJlICovCiAJaWYgKHVzaW5nX21zaSkKLQkJd3JpdGVsKDAsIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworCQltdl93cml0ZV9tYWluX2lycV9tYXNrKDAsIGhwcml2KTsKIAogCW1haW5faXJxX2NhdXNlID0gcmVhZGwoaHByaXYtPm1haW5faXJxX2NhdXNlX2FkZHIpOwogCXBlbmRpbmdfaXJxcyAgID0gbWFpbl9pcnFfY2F1c2UgJiBocHJpdi0+bWFpbl9pcnFfbWFzazsKQEAgLTIyMTgsMTEgKzI4MzMsMTIgQEAKIAkJZWxzZQogCQkJaGFuZGxlZCA9IG12X2hvc3RfaW50cihob3N0LCBwZW5kaW5nX2lycXMpOwogCX0KLQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CiAKIAkvKiBmb3IgTVNJOiB1bm1hc2s7IGludGVycnVwdCBjYXVzZSBiaXRzIHdpbGwgcmV0cmlnZ2VyIG5vdyAqLwogCWlmICh1c2luZ19tc2kpCi0JCXdyaXRlbChocHJpdi0+bWFpbl9pcnFfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2soaHByaXYtPm1haW5faXJxX21hc2ssIGhwcml2KTsKKworCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQpAQCAtMjc3Myw2ICszMzg5LDggQEAKIAogCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKIAlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMikgKi8KIAlkbyB7CkBAIC0yNzkyLDYgKzM0MTAsOCBAQAogCQkJCWV4dHJhID0gSFo7IC8qIG9ubHkgZXh0ZW5kIGl0IG9uY2UsIG1heCAqLwogCQl9CiAJfSB3aGlsZSAoc3N0YXR1cyAhPSAweDAgJiYgc3N0YXR1cyAhPSAweDExMyAmJiBzc3RhdHVzICE9IDB4MTIzKTsKKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTI1LDYgKzM3NDUsOCBAQAogCSAqIFRoZSBwZXItcG9ydCBpbnRlcnJ1cHRzIGdldCBkb25lIGxhdGVyIGFzIHBvcnRzIGFyZSBzZXQgdXAuCiAJICovCiAJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgUENJX0VSUik7CisJbXZfc2V0X2lycV9jb2FsZXNjaW5nKGhvc3QsIGlycV9jb2FsZXNjaW5nX2lvX2NvdW50LAorCQkJCSAgICBpcnFfY29hbGVzY2luZ191c2Vjcyk7CiBkb25lOgogCXJldHVybiByYzsKIH0KQEAgLTMyODYsMTIgKzM5MDgsNiBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLS8qCi0gKiBtb2R1bGUgb3B0aW9ucwotICovCi1zdGF0aWMgaW50IG1zaTsJICAgICAgLyogVXNlIFBDSSBtc2k7IGVpdGhlciB6ZXJvIChvZmYsIGRlZmF1bHQpIG9yIG5vbi16ZXJvICovCi0KLQogLyogbW92ZSB0byBQQ0kgbGF5ZXIgb3IgbGliYXRhIGNvcmU/ICovCiBzdGF0aWMgaW50IHBjaV9nb182NChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTM0NzMsMTAgKzQwODksNSBAQAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKIAotI2lmZGVmIENPTkZJR19QQ0kKLW1vZHVsZV9wYXJhbShtc2ksIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7Ci0jZW5kaWYKLQogbW9kdWxlX2luaXQobXZfaW5pdCk7CiBtb2R1bGVfZXhpdChtdl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCBmNjViNTM3Li42Y2RhMTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC01Nyw5ICs1Nyw5IEBACiAJTlZfTU1JT19CQVIJCQk9IDUsCiAKIAlOVl9QT1JUUwkJCT0gMiwKLQlOVl9QSU9fTUFTSwkJCT0gMHgxZiwKLQlOVl9NV0RNQV9NQVNLCQkJPSAweDA3LAotCU5WX1VETUFfTUFTSwkJCT0gMHg3ZiwKKwlOVl9QSU9fTUFTSwkJCT0gQVRBX1BJTzQsCisJTlZfTVdETUFfTUFTSwkJCT0gQVRBX01XRE1BMiwKKwlOVl9VRE1BX01BU0sJCQk9IEFUQV9VRE1BNiwKIAlOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVAkJPSAweDAwLAogCU5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUCQk9IDB4NDAsCiAKQEAgLTQwOCw2ICs0MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfY29tbW9uX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAJLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKaW5kZXggYmE5YTI1Ny4uYjFmZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKQEAgLTE3Niw3ICsxNzYsOSBAQAogCS5jaGVja19hdGFwaV9kbWEJPSBwZGNfY2hlY2tfYXRhcGlfZG1hLAogCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWUsCisKIAkuc2ZmX2lycV9jbGVhcgkJPSBwZGNfaXJxX2NsZWFyLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAogCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKQEAgLTIxMyw4ICsyMTUsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX1NBVEFfUEFUQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19vbGRfc2F0YV9vcHMsCiAJfSwKQEAgLTIyMiw4ICsyMjQsOCBAQAogCVtib2FyZF8yMDM3eF9wYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTIzMiw4ICsyMzQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfb2xkX3NhdGFfb3BzLAogCX0sCkBAIC0yNDIsOCArMjQ0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yNTIsOCArMjU0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19HRU5fSUkgfCBQRENfRkxBR19TQVRBX1BBVEEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCiAJfSwKQEAgLTI2Miw4ICsyNjQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjcyLDggKzI3NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCmluZGV4IGEwMDBjODYuLmMzOTM2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCiAJLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBBVEFfT1BfTlVMTCwKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAKIAkuc2NyX3JlYWQJCT0gcXNfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBxc19zY3Jfd3JpdGUsCkBAIC0xNjAsNyArMTYxLDcgQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcXNfYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKaW5kZXggZDAwOTE2MC4uZTY3Y2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCkBAIC0yMDAsOCArMjAwLDggQEAKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApAQCAtMjA5LDI0ICsyMDksMjQgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFIHwKIAkJCQkgIFNJTF9GTEFHX05PX1NBVEFfSVJRLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKIAkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCiAJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IDI1OTBjMjIuLjBkODk5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTQyOSwyNSArNDI5LDI1IEBACiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoNCkgfAogCQkJCSAgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiAJLyogc2lsXzMxMzIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIAkvKiBzaWxfMzEzMS9zaWxfMzUzMSAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDEpLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCmluZGV4IDljNDNiNGUuLjhmOTgzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwpAQCAtOTcsOCArOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHg3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCmluZGV4IDYwOWQxNDcuLjcyNTdmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwpAQCAtMzYxLDggKzM2MSw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zNzEsOCArMzcxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BIHwKIAkJCQkgIEsyX0ZMQUdfU0FUQV84X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzgwLDggKzM4MCw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19CQVJfUE9TXzMsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zODksOCArMzg5LDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwppbmRleCBlYzA0YjhkLi5kY2UzZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjXzIwNjIxX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKaW5kZXggMDE5NTc1Yi4uZTViZmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdWxpX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkgIEFUQV9GTEFHX0lHTl9TSU1QTEVYLAotCS5waW9fbWFzayAgICAgICA9IDB4MWYsCQkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sgICAgICAgPSBBVEFfUElPNCwKIAkudWRtYV9tYXNrICAgICAgPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzICAgICAgID0gJnVsaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggNWM2MmRhOS4uOThlOGM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC0xNDYsMjQgKzE0NiwyNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIwX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMV9zcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfc2F0YV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIxX3Bwb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDAsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfcGF0YV9vcHMsCiB9OwpAQCAtMTcxLDggKzE3MSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4MjUxX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJICBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0ODI1MV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggYzU3Y2RmZi4uZWQ3MGJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0zMDgsNiArMzA4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZzY19zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkvKiBUaGUgSVJRIGhhbmRsaW5nIGlzIG5vdCBxdWl0ZSBzdGFuZGFyZCBTRkYgYmVoYXZpb3VyIHNvIHdlCisJICAgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBsb3N0IGludGVycnVwdCBoYW5kbGVyICovCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCS5zZmZfdGZfbG9hZAkJPSB2c2Nfc2F0YV90Zl9sb2FkLAogCS5zZmZfdGZfcmVhZAkJPSB2c2Nfc2F0YV90Zl9yZWFkLAogCS5mcmVlemUJCQk9IHZzY19mcmVlemUsCkBAIC0zNDUsOCArMzQ4LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnZzY19zYXRhX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCmluZGV4IDk4MDk5ZjUuLmIxMTk2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTE2OTAsMTcgKzE2OTAsMTcgQEAKIAkJICB8ICgwICogU0FSTU9ERTBfU0hBREVOKSAvKiBXZSBkb24ndCB1c2Ugc2hhZG93IHJlZ2lzdGVycy4gKi8KIAkJICB8ICgxICogU0FSTU9ERTBfSU5UTU9ERV9SRUFEQ0xFQVIpCiAJCSAgfCAoMSAqIFNBUk1PREUwX0NXUkUpCi0JCSAgfCBJU19GUzUwKGRldik/U0FSTU9ERTBfUFJQV1RfRlM1MF81OiAKLQkJICAgICAgICAgICAgICAgICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zCisJCSAgfCAoSVNfRlM1MChkZXYpID8gU0FSTU9ERTBfUFJQV1RfRlM1MF81OgorCQkJICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zKQogCQkgIHwgKDEgKiBTQVJNT0RFMF9DQUxTVVBfMSkKLQkJICB8IElTX0ZTNTAgKGRldik/KDAKKwkJICB8IChJU19GUzUwKGRldikgPyAoMAogCQkJCSAgIHwgU0FSTU9ERTBfUlhWQ1NfMzIKIAkJCQkgICB8IFNBUk1PREUwX0FCUlZDU18zMiAKIAkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzMyKToKIAkJICAgICAgICAgICAgICAgICAgKDAKIAkJCQkgICB8IFNBUk1PREUwX1JYVkNTXzFrCiAJCQkJICAgfCBTQVJNT0RFMF9BQlJWQ1NfMWsgCi0JCQkJICAgfCBTQVJNT0RFMF9UWFZDU18xaykpOworCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMWspKSk7CiAKIAkvKiAxMG1zICogMTAwIGlzIDEgc2Vjb25kLiBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGFzIEFOMzo5IHNheXMgaXQgdGFrZXMKIAkgICAxbXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IGUxYzc2MTEuLjc4Yzk3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC05NzcsOSArOTc3LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwQnVmICs9IHNwcmludGYoIHBCdWYsICIuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgc3ByaW50ZiggcEJ1ZiwgIlxuIiApOwotICAgICAgICAvLyBTUHJpbnQocHJudEJ1Zik7Ci0gICAgICAgIHByaW50ayhwcm50QnVmKTsKKyAgICAgICAgcHJpbnRrKCIlc1xuIiwgcHJudEJ1Zik7CiAgICAgICAgIGNvdW50ICs9IGNvbDsKICAgICAgICAgcEJ1ZiA9IHBybnRCdWY7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtYXR0cmxpc3QuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjgwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKQEAgLTAsMCArMSw3MCBAQAorU09MT1NfQVRUUl9STyhEcml2ZXJWZXJzaW9uKQorU09MT1NfQVRUUl9STyhBUElWZXJzaW9uKQorU09MT1NfQVRUUl9STyhGaXJtd2FyZVZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKERzcFZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKENvbW1vbkhhbmRzaGFrZSkKK1NPTE9TX0FUVFJfUk8oQ29ubmVjdGVkKQorU09MT1NfQVRUUl9STyhPcGVyYXRpb25hbE1vZGUpCitTT0xPU19BVFRSX1JPKFN0YXRlKQorU09MT1NfQVRUUl9STyhXYXRjaGRvZykKK1NPTE9TX0FUVFJfUk8oT3BlcmF0aW9uUHJvZ3Jlc3MpCitTT0xPU19BVFRSX1JPKExhc3RGYWlsZWQpCitTT0xPU19BVFRSX1JPKFR4Qml0UmF0ZSkKK1NPTE9TX0FUVFJfUk8oUnhCaXRSYXRlKQorLy8gU09MT1NfQVRUUl9STyhEZWx0QUNUQVRQZHMpCisvLyBTT0xPU19BVFRSX1JPKERlbHRBQ1RBVFB1cykKK1NPTE9TX0FUVFJfUk8oVHhBVFRORFIpCitTT0xPU19BVFRSX1JPKFJ4QVRUTkRSKQorU09MT1NfQVRUUl9STyhBbm5leFR5cGUpCitTT0xPU19BVFRSX1JPKEdlbmVyYWxGYWlsdXJlKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlRHBEbikKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZURwVXApCitTT0xPU19BVFRSX1JPKFJTQ29ycmVjdGVkRXJyb3JzRG4pCitTT0xPU19BVFRSX1JPKFJTVW5Db3JyZWN0ZWRFcnJvcnNEbikKK1NPTE9TX0FUVFJfUk8oUlNDb3JyZWN0ZWRFcnJvcnNVcCkKK1NPTE9TX0FUVFJfUk8oUlNVbkNvcnJlY3RlZEVycm9yc1VwKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUkRuKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUlVwKQorU09MT1NfQVRUUl9STyhTaG93dGltZVN0YXJ0KQorU09MT1NfQVRUUl9STyhBVFVSVmVuZG9yKQorU09MT1NfQVRUUl9STyhBVFVDQ291bnRyeSkKK1NPTE9TX0FUVFJfUk8oQVRVUkFOU0lSZXYpCitTT0xPU19BVFRSX1JPKEFUVVJBTlNJU1REKQorU09MT1NfQVRUUl9STyhBVFVDQU5TSVJldikKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lJZCkKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lTVEQpCitTT0xPU19BVFRSX1JPKERhdGFCb29zdCkKK1NPTE9TX0FUVFJfUk8oTG9jYWxJVFVDb3VudHJ5Q29kZSkKK1NPTE9TX0FUVFJfUk8oTG9jYWxTRUYpCitTT0xPU19BVFRSX1JPKExvY2FsRW5kTE9TKQorU09MT1NfQVRUUl9STyhMb2NhbFNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTG9jYWxMaW5lQXR0bikKK1NPTE9TX0FUVFJfUk8oUmF3QXR0bikKK1NPTE9TX0FUVFJfUk8oTG9jYWxUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVTRUYpCitTT0xPU19BVFRSX1JPKFJlbW90ZUxPUykKK1NPTE9TX0FUVFJfUk8oUmVtb3RlTGluZUF0dG4pCitTT0xPU19BVFRSX1JPKFJlbW90ZVNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTGluZVVwQ291bnQpCitTT0xPU19BVFRSX1JPKFNSQUNudCkKK1NPTE9TX0FUVFJfUk8oU1JBQ250VXApCitTT0xPU19BVFRSX1JPKFByb2ZpbGVTdGF0dXMpCitTT0xPU19BVFRSX1JXKEFjdGlvbikKK1NPTE9TX0FUVFJfUlcoQWN0aXZhdGVMaW5lKQorU09MT1NfQVRUUl9STyhMaW5lU3RhdHVzKQorU09MT1NfQVRUUl9SVyhIb3N0Q29udHJvbCkKK1NPTE9TX0FUVFJfUlcoQXV0b1N0YXJ0KQorU09MT1NfQVRUUl9SVyhGYWlsc2FmZSkKK1NPTE9TX0FUVFJfUlcoU2hvd3RpbWVMZWQpCitTT0xPU19BVFRSX1JXKFJldHJhaW4pCitTT0xPU19BVFRSX1JXKERlZmF1bHRzKQorU09MT1NfQVRUUl9SVyhMaW5lTW9kZSkKK1NPTE9TX0FUVFJfUlcoUHJvZmlsZSkKK1NPTE9TX0FUVFJfUlcoRGV0ZWN0Tm9pc2UpCitTT0xPU19BVFRSX1JPKFN1cHBvcnRlZEFubmV4ZXMpCitTT0xPU19BVFRSX1JPKFN0YXR1cykKK1NPTE9TX0FUVFJfUk8oVG90YWxTdGFydCkKK1NPTE9TX0FUVFJfUk8oUmVjZW50U2hvd3RpbWVTdGFydCkKK1NPTE9TX0FUVFJfUk8oVG90YWxSeEJsb2NrcykKK1NPTE9TX0FUVFJfUk8oVG90YWxUeEJsb2NrcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKaW5kZXggODlkN2E2ZS4uYmUyMDQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTksNiArOSw3IEBACiAgKgogICogQXV0aG9yczogTmF0aGFuIFdpbGxpYW1zIDxuYXRoYW5AdHJhdmVyc2UuY29tLmF1PgogICogICAgICAgICAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICogICAgICAgICAgVHJla2VyIENoZW4gPHRyZWtlckB4cmlvLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzYsOCArMzcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhYi5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuMDQiCisjZGVmaW5lIFZFUlNJT04gIjAuMDciCiAjZGVmaW5lIFBUQUcgInNvbG9zLXBjaSIKIAogI2RlZmluZSBDT05GSUdfUkFNX1NJWkUJMTI4CkBAIC00NSwxNiArNDksMzEgQEAKICNkZWZpbmUgSVJRX0VOX0FERFIJMHg3OAogI2RlZmluZSBGUEdBX1ZFUgkweDc0CiAjZGVmaW5lIElSUV9DTEVBUgkweDcwCi0jZGVmaW5lIEJVR19GTEFHCTB4NkMKKyNkZWZpbmUgV1JJVEVfRkxBU0gJMHg2QworI2RlZmluZSBQT1JUUwkJMHg2OAorI2RlZmluZSBGTEFTSF9CTE9DSwkweDY0CisjZGVmaW5lIEZMQVNIX0JVU1kJMHg2MAorI2RlZmluZSBGUEdBX01PREUJMHg1QworI2RlZmluZSBGTEFTSF9NT0RFCTB4NTgKKyNkZWZpbmUgVFhfRE1BX0FERFIocG9ydCkJKDB4NDAgKyAoNCAqIChwb3J0KSkpCisjZGVmaW5lIFJYX0RNQV9BRERSKHBvcnQpCSgweDMwICsgKDQgKiAocG9ydCkpKQogCiAjZGVmaW5lIERBVEFfUkFNX1NJWkUJMzI3NjgKICNkZWZpbmUgQlVGX1NJWkUJNDA5NgorI2RlZmluZSBGUEdBX1BBR0UJNTI4IC8qIEZQR0EgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgU09MT1NfUEFHRQk1MTIgLyogU29sb3MgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgRlBHQV9CTE9DSwkoRlBHQV9QQUdFICogOCkgLyogRlBHQSBmbGFzaCBibG9jayBzaXplKi8KKyNkZWZpbmUgU09MT1NfQkxPQ0sJKFNPTE9TX1BBR0UgKiA4KSAvKiBTb2xvcyBmbGFzaCBibG9jayBzaXplKi8KIAogI2RlZmluZSBSWF9CVUYoY2FyZCwgbnIpICgoY2FyZC0+YnVmZmVycykgKyAobnIpKkJVRl9TSVpFKjIpCiAjZGVmaW5lIFRYX0JVRihjYXJkLCBucikgKChjYXJkLT5idWZmZXJzKSArIChucikqQlVGX1NJWkUqMiArIEJVRl9TSVpFKQogCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKKyNkZWZpbmUgUlhfRE1BX1NJWkUJMjA0OAorCitzdGF0aWMgaW50IHJlc2V0ID0gMDsKIHN0YXRpYyBpbnQgYXRtZGVidWcgPSAwOworc3RhdGljIGludCBmaXJtd2FyZV91cGdyYWRlID0gMDsKK3N0YXRpYyBpbnQgZnBnYV91cGdyYWRlID0gMDsKIAogc3RydWN0IHBrdF9oZHIgewogCV9fbGUxNiBzaXplOwpAQCAtNjMsMjMgKzgyLDQ4IEBACiAJX19sZTE2IHR5cGU7CiB9OwogCitzdHJ1Y3Qgc29sb3Nfc2tiX2NiIHsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXVpbnQzMl90IGRtYV9hZGRyOworfTsKKworCisjZGVmaW5lIFNLQl9DQihza2IpCQkoKHN0cnVjdCBzb2xvc19za2JfY2IgKilza2ItPmNiKQorCiAjZGVmaW5lIFBLVF9EQVRBCTAKICNkZWZpbmUgUEtUX0NPTU1BTkQJMQogI2RlZmluZSBQS1RfUE9QRU4JMwogI2RlZmluZSBQS1RfUENMT1NFCTQKKyNkZWZpbmUgUEtUX1NUQVRVUwk1CiAKIHN0cnVjdCBzb2xvc19jYXJkIHsKIAl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOwogCXZvaWQgX19pb21lbSAqYnVmZmVyczsKIAlpbnQgbnJfcG9ydHM7CisJaW50IHR4X21hc2s7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgYXRtX2RldiAqYXRtZGV2WzRdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bGV0OwogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJc3BpbmxvY2tfdCBjbGlfcXVldWVfbG9jazsKKwlzcGlubG9ja190IHBhcmFtX3F1ZXVlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwYXJhbV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlWzRdOwogCXN0cnVjdCBza19idWZmX2hlYWQgY2xpX3F1ZXVlWzRdOworCXN0cnVjdCBza19idWZmICp0eF9za2JbNF07CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYls0XTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBwYXJhbV93cTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmd193cTsKKwlpbnQgdXNpbmdfZG1hOworfTsKKworCitzdHJ1Y3Qgc29sb3NfcGFyYW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlwaWRfdCBwaWQ7CisJaW50IHBvcnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlOwogfTsKIAogI2RlZmluZSBTT0xPU19DSEFOKGF0bWRldikgKChpbnQpKHVuc2lnbmVkIGxvbmcpKGF0bWRldiktPnBoeV9kYXRhKQpAQCAtODgsMTkgKzEzMiwyMiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2xvcyBQQ0kgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgTG9vcGJhY2siKTsKK01PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBTb2xvcyBjaGlwcyBvbiBzdGFydHVwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGF0bWRlYnVnLCAiUHJpbnQgQVRNIGRhdGEiKTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShhdG1kZWJ1ZywgaW50LCAwNDQ0KTsKLQotc3RhdGljIGludCBvcGVuczsKK01PRFVMRV9QQVJNX0RFU0MoZmlybXdhcmVfdXBncmFkZSwgIkluaXRpYXRlIFNvbG9zIGZpcm13YXJlIHVwZ3JhZGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoZnBnYV91cGdyYWRlLCAiSW5pdGlhdGUgRlBHQSB1cGdyYWRlIik7Cittb2R1bGVfcGFyYW0ocmVzZXQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oYXRtZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZmlybXdhcmVfdXBncmFkZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShmcGdhX3VwZ3JhZGUsIGludCwgMDQ0NCk7CiAKIHN0YXRpYyB2b2lkIGZwZ2FfcXVldWUoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYyk7Ci1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKik7CitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzb2xvc19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyogZmluZF92Y2Moc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLCBpbnQgdmNpKTsKIHN0YXRpYyBpbnQgbGlzdF92Y2NzKGludCB2Y2kpOworc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpOwogc3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyB2b2lkIGF0bV9yZW1vdmUoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgaW50IHNlbmRfY29tbWFuZChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CkBAIC0xMTUsNiArMTYyLDI2NCBAQAogICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNvbG9zX3BhcmFtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMDsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHNvbG9zX3BhcmFtX3Nob3coKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiIsIGN1cnJlbnQtPnBpZCwgYXR0ci0+YXR0ci5uYW1lKTsKKwlza2JfcHV0KHNrYiwgYnVmbGVuKTsKKworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJaWYgKCFwcm0ucmVzcG9uc2UpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gcHJtLnJlc3BvbnNlLT5sZW47CisJbWVtY3B5KGJ1ZiwgcHJtLnJlc3BvbnNlLT5kYXRhLCBidWZsZW4pOworCWtmcmVlX3NrYihwcm0ucmVzcG9uc2UpOworCisJcmV0dXJuIGJ1ZmxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc29sb3NfcGFyYW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCXNzaXplX3QgcmV0OworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMSArIGNvdW50OworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gc29sb3NfcGFyYW1fc3RvcmUoKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiVzXG4iLCBjdXJyZW50LT5waWQsIGF0dHItPmF0dHIubmFtZSwgYnVmKTsKKworCXNrYl9wdXQoc2tiLCBidWZsZW4pOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJc2tiID0gcHJtLnJlc3BvbnNlOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gc2tiLT5sZW47CisKKwkvKiBTb21ldGltZXMgaXQgaGFzIGEgbmV3bGluZSwgc29tZXRpbWVzIGl0IGRvZXNuJ3QuICovCisJaWYgKHNrYi0+ZGF0YVtidWZsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZsZW4tLTsKKworCWlmIChidWZsZW4gPT0gMiAmJiAhc3RybmNtcChza2ItPmRhdGEsICJPSyIsIDIpKQorCQlyZXQgPSBjb3VudDsKKwllbHNlIGlmIChidWZsZW4gPT0gNSAmJiAhc3RybmNtcChza2ItPmRhdGEsICJFUlJPUiIsIDUpKQorCQlyZXQgPSAtRUlPOworCWVsc2UgeworCQkvKiBXZSBrbm93IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhpczsgd2UgYWxsb2NhdGVkIAorCQkgICBpdCBvdXJzZWx2ZXMgKi8KKwkJc2tiLT5kYXRhW2J1Zmxlbl0gPSAwOworCQorCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbmV4cGVjdGVkIHBhcmFtZXRlciByZXNwb25zZTogJyVzJ1xuIiwKKwkJCSBza2ItPmRhdGEpOworCQlyZXQgPSAtRUlPOworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpuZXh0X3N0cmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBpID0gMDsKKwljaGFyICp0aGlzID0gc2tiLT5kYXRhOworCQorCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbjsgaSsrKSB7CisJCWlmICh0aGlzW2ldID09ICdcbicpIHsKKwkJCXRoaXNbaV0gPSAwOworCQkJc2tiX3B1bGwoc2tiLCBpICsgMSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIWlzcHJpbnQodGhpc1tpXSkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdGF0dXMgcGFja2V0IGhhcyBmaWVsZHMgc2VwYXJhdGVkIGJ5IFxuLCBzdGFydGluZyB3aXRoIGEgdmVyc2lvbiBudW1iZXIKKyAqIGZvciB0aGUgaW5mb3JtYXRpb24gdGhlcmVpbi4gRmllbGRzIGFyZS4uLi4KKyAqCisgKiAgICAgcGFja2V0IHZlcnNpb24KKyAqICAgICBSeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBUeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBTdGF0ZQkJKHZlcnNpb24gPj0gMSkKKyAqICAgICBMb2NhbFNOUk1hcmdpbgkodmVyc2lvbiA+PSAxKQorICogICAgIExvY2FsTGluZUF0dG4JKHZlcnNpb24gPj0gMSkKKyAqLyAgICAgICAKK3N0YXRpYyBpbnQgcHJvY2Vzc19zdGF0dXMoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNoYXIgKnN0ciwgKmVuZCwgKnN0YXRlX3N0ciwgKnNuciwgKmF0dG47CisJaW50IHZlciwgcmF0ZV91cCwgcmF0ZV9kb3duOworCisJaWYgKCFjYXJkLT5hdG1kZXZbcG9ydF0pCisJCXJldHVybiAtRU5PREVWOworCisJc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisKKwl2ZXIgPSBzaW1wbGVfc3RydG9sKHN0ciwgTlVMTCwgMTApOworCWlmICh2ZXIgPCAxKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuZXhwZWN0ZWQgc3RhdHVzIGludGVycnVwdCB2ZXJzaW9uICVkXG4iLAorCQkJIHZlcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCWlmICghc3RyY21wKHN0ciwgIkVSUk9SIikpIHsKKwkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJTdGF0dXMgcGFja2V0IGluZGljYXRlZCBTb2xvcyBlcnJvciBvbiBwb3J0ICVkIChzdGFydGluZyB1cD8pXG4iLAorCQkJIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXRlX2Rvd24gPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCXJhdGVfdXAgPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXRlX3N0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdGF0ZV9zdHIpCisJCXJldHVybiAtRUlPOworCisJLyogQW55dGhpbmcgYnV0ICdTaG93dGltZScgaXMgZG93biAqLworCWlmIChzdHJjbXAoc3RhdGVfc3RyLCAiU2hvd3RpbWUiKSkgeworCQljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCXJlbGVhc2VfdmNjcyhjYXJkLT5hdG1kZXZbcG9ydF0pOworCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJQb3J0ICVkOiAlc1xuIiwgcG9ydCwgc3RhdGVfc3RyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25yID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisJYXR0biA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFhdHRuKQorCQlyZXR1cm4gLUVJTzsKKworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlBvcnQgJWQ6ICVzIEAlZC8lZCBrYi9zJXMlcyVzJXNcbiIsCisJCSBwb3J0LCBzdGF0ZV9zdHIsIHJhdGVfZG93bi8xMDAwLCByYXRlX3VwLzEwMDAsCisJCSBzbnJbMF0/IiwgU05SICI6IiIsIHNuciwgYXR0blswXT8iLCBBdHRuICI6IiIsIGF0dG4pOworCQorCWNhcmQtPmF0bWRldltwb3J0XS0+bGlua19yYXRlID0gcmF0ZV9kb3duIC8gNDI0OworCWNhcmQtPmF0bWRldltwb3J0XS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfRk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzb2xvc19wYXJhbSAqcHJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNtZHBpZDsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKHNrYi0+bGVuIDwgNykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2tiLT5kYXRhWzBdICE9ICdMJyAgICB8fCAhaXNkaWdpdChza2ItPmRhdGFbMV0pIHx8CisJICAgICFpc2RpZ2l0KHNrYi0+ZGF0YVsyXSkgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzNdKSB8fAorCSAgICAhaXNkaWdpdChza2ItPmRhdGFbNF0pIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVs1XSkgfHwKKwkgICAgc2tiLT5kYXRhWzZdICE9ICdcbicpCisJCXJldHVybiAwOworCisJY21kcGlkID0gc2ltcGxlX3N0cnRvbCgmc2tiLT5kYXRhWzFdLCBOVUxMLCAxMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJtLCAmY2FyZC0+cGFyYW1fcXVldWUsIGxpc3QpIHsKKwkJaWYgKHBybS0+cG9ydCA9PSBwb3J0ICYmIHBybS0+cGlkID09IGNtZHBpZCkgeworCQkJcHJtLT5yZXNwb25zZSA9IHNrYjsKKwkJCXNrYl9wdWxsKHNrYiwgNyk7CisJCQl3YWtlX3VwKCZjYXJkLT5wYXJhbV93cSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZvdW5kOworfQorCiBzdGF0aWMgc3NpemVfdCBjb25zb2xlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjaGFyICpidWYpCiB7CkBAIC0xNDAsOCArNDQ1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAic2l6ZTogJWRcbiIsIHNpemUpOwotCiAJaWYgKHNpemUgPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CiAJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiQ29tbWFuZCBpcyB0b28gYmlnLiAgRHJvcHBpbmcgcmVxdWVzdFxuIik7CiAJCXJldHVybiAwOwpAQCAtMTgwLDgyICs0ODMsMTgxIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb25zb2xlLCAwNjQ0LCBjb25zb2xlX3Nob3csIGNvbnNvbGVfc3RvcmUpOwogCisKKyNkZWZpbmUgU09MT1NfQVRUUl9STyh4KSBzdGF0aWMgREVWSUNFX0FUVFIoeCwgMDQ0NCwgc29sb3NfcGFyYW1fc2hvdywgTlVMTCk7CisjZGVmaW5lIFNPTE9TX0FUVFJfUlcoeCkgc3RhdGljIERFVklDRV9BVFRSKHgsIDA2NDQsIHNvbG9zX3BhcmFtX3Nob3csIHNvbG9zX3BhcmFtX3N0b3JlKTsKKworI2luY2x1ZGUgInNvbG9zLWF0dHJsaXN0LmMiCisKKyN1bmRlZiBTT0xPU19BVFRSX1JPCisjdW5kZWYgU09MT1NfQVRUUl9SVworCisjZGVmaW5lIFNPTE9TX0FUVFJfUk8oeCkgJmRldl9hdHRyXyMjeC5hdHRyLAorI2RlZmluZSBTT0xPU19BVFRSX1JXKHgpICZkZXZfYXR0cl8jI3guYXR0ciwKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNvbG9zX2F0dHJzW10gPSB7CisjaW5jbHVkZSAic29sb3MtYXR0cmxpc3QuYyIKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2xvc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHNvbG9zX2F0dHJzLAorCS5uYW1lID0gInBhcmFtZXRlcnMiLAorfTsKKworc3RhdGljIGludCBmbGFzaF91cGdyYWRlKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgY2hpcCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CisJdWludDMyX3QgZGF0YTMyID0gMDsKKwlpbnQgYmxvY2tzaXplID0gMDsKKwlpbnQgbnVtYmxvY2tzID0gMDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKGNoaXAgPT0gMCkgeworCQlmd19uYW1lID0gInNvbG9zLUZQR0EuYmluIjsKKwkJYmxvY2tzaXplID0gRlBHQV9CTE9DSzsKKwl9IGVsc2UgeworCQlmd19uYW1lID0gInNvbG9zLUZpcm13YXJlLmJpbiI7CisJCWJsb2Nrc2l6ZSA9IFNPTE9TX0JMT0NLOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmNhcmQtPmRldi0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJGbGFzaCB1cGdyYWRlIHN0YXJ0aW5nXG4iKTsKKworCW51bWJsb2NrcyA9IGZ3LT5zaXplIC8gYmxvY2tzaXplOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkZpcm13YXJlIHNpemU6ICV6ZFxuIiwgZnctPnNpemUpOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIk51bWJlciBvZiBibG9ja3M6ICVkXG4iLCBudW1ibG9ja3MpOworCQorCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkNoYW5naW5nIEZQR0EgdG8gVXBkYXRlIG1vZGVcbiIpOworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKworCS8qIFNldCBtb2RlIHRvIENoaXAgRXJhc2UgKi8KKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJTZXQgRlBHQSBGbGFzaCBtb2RlIHRvICVzIENoaXAgRXJhc2VcbiIsCisJCSBjaGlwPyJTb2xvcyI6IkZQR0EiKTsKKwlpb3dyaXRlMzIoKGNoaXAgKiAyKSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKworCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZnctPnNpemU7IG9mZnNldCArPSBibG9ja3NpemUpIHsKKwkJaW50IGk7CisKKwkJLyogQ2xlYXIgd3JpdGUgZmxhZyAqLworCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisKKwkJLyogU2V0IG1vZGUgdG8gQmxvY2sgV3JpdGUgKi8KKwkJLyogZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiU2V0IEZQR0EgRmxhc2ggbW9kZSB0byBCbG9jayBXcml0ZVxuIik7ICovCisJCWlvd3JpdGUzMigoKGNoaXAgKiAyKSArIDEpLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX01PREUpOworCisJCS8qIENvcHkgYmxvY2sgdG8gYnVmZmVyLCBzd2FwcGluZyBlYWNoIDE2IGJpdHMgKi8KKwkJZm9yKGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpICs9IDQpIHsKKwkJCXVpbnQzMl90IHdvcmQgPSBzd2FoYjMycCgodWludDMyX3QgKikoZnctPmRhdGEgKyBvZmZzZXQgKyBpKSk7CisJCQlpb3dyaXRlMzIod29yZCwgUlhfQlVGKGNhcmQsIDMpICsgaSk7CisJCX0KKworCQkvKiBTcGVjaWZ5IGJsb2NrIG51bWJlciBhbmQgdGhlbiB0cmlnZ2VyIGZsYXNoIHdyaXRlICovCisJCWlvd3JpdGUzMihvZmZzZXQgLyBibG9ja3NpemUsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfQkxPQ0spOworCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKwl9CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZXR1cm5pbmcgRlBHQSB0byBEYXRhIG1vZGVcbiIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc29sb3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGRldl9pZDsKIAlpbnQgaGFuZGxlZCA9IDE7CiAKLQkvL0FDSyBJUlEKIAlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfQ0xFQVIpOwotCS8vRGlzYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAotCS8qIElmIHdlIG9ubHkgZG8gaXQgd2hlbiB0aGUgZGV2aWNlIGlzIG9wZW4sIHdlIGxvc2UgY29uc29sZQotCSAgIG1lc3NhZ2VzICovCi0JaWYgKDEgfHwgb3BlbnMpCisJLyogSWYgd2UncmUgdXAgYW5kIHJ1bm5pbmcsIGp1c3Qga2ljayB0aGUgdGFza2xldCB0byBwcm9jZXNzIFRYL1JYICovCisJaWYgKGNhcmQtPmF0bWRldlswXSkKIAkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJZWxzZQorCQl3YWtlX3VwKCZjYXJkLT5md193cSk7CiAKLQkvL0VuYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAogdm9pZCBzb2xvc19iaCh1bnNpZ25lZCBsb25nIGNhcmRfYXJnKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gKHZvaWQgKiljYXJkX2FyZzsKLQlpbnQgcG9ydDsKIAl1aW50MzJfdCBjYXJkX2ZsYWdzOwotCXVpbnQzMl90IHR4X21hc2s7CiAJdWludDMyX3QgcnhfZG9uZSA9IDA7CisJaW50IHBvcnQ7CiAKLQljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLQotCS8qIFRoZSBUWCBiaXRzIGFyZSBzZXQgaWYgdGhlIGNoYW5uZWwgaXMgYnVzeTsgY2xlYXIgaWYgbm90LiBXZSB3YW50IHRvCi0JICAgaW52b2tlIGZwZ2FfdHgoKSB1bmxlc3MgX2FsbF8gdGhlIGJpdHMgZm9yIGFjdGl2ZSBjaGFubmVscyBhcmUgc2V0ICovCi0JdHhfbWFzayA9ICgxIDw8IGNhcmQtPm5yX3BvcnRzKSAtIDE7Ci0JaWYgKChjYXJkX2ZsYWdzICYgdHhfbWFzaykgIT0gdHhfbWFzaykKLQkJZnBnYV90eChjYXJkKTsKKwkvKgorCSAqIFNpbmNlIGZwZ2FfdHgoKSBpcyBnb2luZyB0byBuZWVkIHRvIHJlYWQgdGhlIGZsYWdzIHVuZGVyIGl0cyBsb2NrLAorCSAqIGl0IGNhbiByZXR1cm4gdGhlbSB0byB1cyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gaGl0IFBDSSBNTUlPCisJICogYWdhaW4gZm9yIHRoZSBzYW1lIGluZm9ybWF0aW9uCisJICovCisJY2FyZF9mbGFncyA9IGZwZ2FfdHgoY2FyZCk7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2FyZC0+bnJfcG9ydHM7IHBvcnQrKykgewogCQlpZiAoY2FyZF9mbGFncyAmICgweDEwIDw8IHBvcnQpKSB7Ci0JCQlzdHJ1Y3QgcGt0X2hkciBoZWFkZXI7CisJCQlzdHJ1Y3QgcGt0X2hkciBfaGRyLCAqaGVhZGVyOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXN0cnVjdCBhdG1fdmNjICp2Y2M7CiAJCQlpbnQgc2l6ZTsKIAotCQkJcnhfZG9uZSB8PSAweDEwIDw8IHBvcnQ7CisJCQlpZiAoY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJc2tiID0gY2FyZC0+cnhfc2tiW3BvcnRdOworCQkJCWNhcmQtPnJ4X3NrYltwb3J0XSA9IE5VTEw7CiAKLQkJCW1lbWNweV9mcm9taW8oJmhlYWRlciwgUlhfQlVGKGNhcmQsIHBvcnQpLCBzaXplb2YoaGVhZGVyKSk7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci5zaXplKTsKKwkJCQloZWFkZXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLT5zaXplKTsKKwkJCQlza2JfcHV0KHNrYiwgc2l6ZSArIHNpemVvZigqaGVhZGVyKSk7CisJCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCQkJfSBlbHNlIHsKKwkJCQloZWFkZXIgPSAmX2hkcjsKIAotCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFza2IpIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBmb3IgUlhcbiIpOwotCQkJCWNvbnRpbnVlOworCQkJCXJ4X2RvbmUgfD0gMHgxMCA8PCBwb3J0OworCisJCQkJbWVtY3B5X2Zyb21pbyhoZWFkZXIsIFJYX0JVRihjYXJkLCBwb3J0KSwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNpemUpOworCisJCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyAxLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIXNrYikgeworCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgZm9yIFJYXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksCisJCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZigqaGVhZGVyKSwKKwkJCQkJICAgICAgc2l6ZSk7CiAJCQl9Ci0KLQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLAotCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZihoZWFkZXIpLAotCQkJCSAgICAgIHNpemUpOwotCiAJCQlpZiAoYXRtZGVidWcpIHsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZWNlaXZlZDogZGV2aWNlICVkXG4iLCBwb3J0KTsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJzaXplOiAlZCBWUEk6ICVkIFZDSTogJWRcbiIsCi0JCQkJCSBzaXplLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQkJIHNpemUsIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJcHJpbnRfYnVmZmVyKHNrYik7CiAJCQl9CiAKLQkJCXN3aXRjaCAobGUxNl90b19jcHUoaGVhZGVyLnR5cGUpKSB7CisJCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci0+dHlwZSkpIHsKIAkJCWNhc2UgUEtUX0RBVEE6Ci0JCQkJdmNjID0gZmluZF92Y2MoY2FyZC0+YXRtZGV2W3BvcnRdLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQl2Y2MgPSBmaW5kX3ZjYyhjYXJkLT5hdG1kZXZbcG9ydF0sIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJaWYgKCF2Y2MpIHsKIAkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlJlY2VpdmVkIHBhY2tldCBmb3IgdW5rbm93biBWQ0kuVlBJICVkLiVkIG9uIHBvcnQgJWRcbiIsCi0JCQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKKwkJCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLT52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCiAJCQkJCQkJIHBvcnQpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0yNjQsMTkgKzY2Niw1MCBAQAogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBQS1RfU1RBVFVTOgorCQkJCWlmIChwcm9jZXNzX3N0YXR1cyhjYXJkLCBwb3J0LCBza2IpICYmCisJCQkJICAgIG5ldF9yYXRlbGltaXQoKSkgeworCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJCYWQgc3RhdHVzIHBhY2tldCBvZiAlZCBieXRlcyBvbiBwb3J0ICVkOlxuIiwgc2tiLT5sZW4sIHBvcnQpOworCQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQl9CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBQS1RfQ09NTUFORDoKIAkJCWRlZmF1bHQ6IC8qIEZJWE1FOiBOb3QgcmVhbGx5LCBzdXJlbHk/ICovCisJCQkJaWYgKHByb2Nlc3NfY29tbWFuZChjYXJkLCBwb3J0LCBza2IpKQorCQkJCQlicmVhazsKIAkJCQlzcGluX2xvY2soJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKIAkJCQlpZiAoc2tiX3F1ZXVlX2xlbigmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdKSA+IDEwKSB7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJEcm9wcGluZyBjb25zb2xlIHJlc3BvbnNlIG9uIHBvcnQgJWRcbiIsCiAJCQkJCQkJIHBvcnQpOworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCX0gZWxzZQogCQkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdLCBza2IpOwogCQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5jbGlfcXVldWVfbG9jayk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJLyogQWxsb2NhdGUgUlggc2ticyBmb3IgYW55IHBvcnRzIHdoaWNoIG5lZWQgdGhlbSAqLworCQlpZiAoY2FyZC0+dXNpbmdfZG1hICYmIGNhcmQtPmF0bWRldltwb3J0XSAmJgorCQkgICAgIWNhcmQtPnJ4X3NrYltwb3J0XSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihSWF9ETUFfU0laRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoc2tiKSB7CisJCQkJU0tCX0NCKHNrYiktPmRtYV9hZGRyID0KKwkJCQkJcGNpX21hcF9zaW5nbGUoY2FyZC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaW93cml0ZTMyKFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJICBjYXJkLT5jb25maWdfcmVncyArIFJYX0RNQV9BRERSKHBvcnQpKTsKKwkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBza2I7CisJCQl9IGVsc2UgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBSWCBza2IiKTsKKworCQkJCS8qIFdlJ2xsIGhhdmUgdG8gdHJ5IGFnYWluIGxhdGVyICovCisJCQkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJCQl9CisJCX0KIAl9CiAJaWYgKHJ4X2RvbmUpCiAJCWlvd3JpdGUzMihyeF9kb25lLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwpAQCAtMzI2LDcgKzc1OSw3IEBACiAJCQkgICAgICAgdmNjLT52Y2kpOwogCQl9CiAJfSBlbHNlIHsKLQkJZm9yKGk9MDsgaTwzMjsgaSsrKXsKKwkJZm9yKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspewogCQkJaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKIAkJCXNrX2Zvcl9lYWNoKHMsIG5vZGUsIGhlYWQpIHsKIAkJCQludW1fZm91bmQgKys7CkBAIC0zNDIsNiArNzc1LDI4IEBACiAJcmV0dXJuIG51bV9mb3VuZDsKIH0KIAorc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpCit7CisgICAgICAgIGludCBpOworCisgICAgICAgIHdyaXRlX2xvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29jayAqczsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCisgICAgICAgICAgICAgICAgc2tfZm9yX2VhY2hfc2FmZShzLCBub2RlLCB0bXAsIGhlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZjYyA9IGF0bV9zayhzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Y2MtPmRldiA9PSBkZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNjX3JlbGVhc2VfYXN5bmModmNjLCAtRVBJUEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza19kZWxfbm9kZV9pbml0KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworfQorCiAKIHN0YXRpYyBpbnQgcG9wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKQEAgLTM0OSw2ICs4MDQsMTIgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuc3VwcG9ydGVkIEFUTSB0eXBlICVkXG4iLAorCQkJIHZjYy0+cW9zLmFhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlciksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiICYmIG5ldF9yYXRlbGltaXQoKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBwb3BlbigpXG4iKTsKQEAgLTM1NiwyMiArODE3LDE3IEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QT1BFTik7CiAKIAlmcGdhX3F1ZXVlKGNhcmQsIFNPTE9TX0NIQU4odmNjLT5kZXYpLCBza2IsIE5VTEwpOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIk9wZW4gZm9yIHZwaSAlZCBhbmQgdmNpICVkIG9uIGludGVyZmFjZSAlZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSk7Ci0Jc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOyAvLyBhY2NlcHQgdGhlIHZwaSAvIHZjaQorCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCWxpc3RfdmNjcygwKTsKIAotCWlmICghb3BlbnMpCi0JCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQotCW9wZW5zKys7IC8vY291bnQgb3BlbiBQVkNzCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSwxNyArODQ1LDEzIEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QQ0xPU0UpOwogCiAJZnBnYV9xdWV1ZShjYXJkLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSwgc2tiLCBOVUxMKTsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJDbG9zZSBmb3IgdnBpICVkIGFuZCB2Y2kgJWQgb24gaW50ZXJmYWNlICVkXG4iLCB2Y2MtPnZwaSwgdmNjLT52Y2ksIFNPTE9TX0NIQU4odmNjLT5kZXYpKTsKLQlpZiAoIS0tb3BlbnMpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQogCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOwogCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIApAQCAtNDM5LDIyICs4OTEsMjYgQEAKIAkJICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJaW50IG9sZF9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCSoodm9pZCAqKilza2ItPmNiID0gdmNjOworCVNLQl9DQihza2IpLT52Y2MgPSB2Y2M7CiAKLQlzcGluX2xvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJb2xkX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJmNhcmQtPnR4X3F1ZXVlW3BvcnRdKTsKIAlza2JfcXVldWVfdGFpbCgmY2FyZC0+dHhfcXVldWVbcG9ydF0sIHNrYik7Ci0Jc3Bpbl91bmxvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCWlmICghb2xkX2xlbikKKwkJY2FyZC0+dHhfbWFzayB8PSAoMSA8PCBwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAKLQkvKiBJZiBUWCBtaWdodCBuZWVkIHRvIGJlIHN0YXJ0ZWQsIGRvIHNvICovCisJLyogVGhlb3JldGljYWxseSB3ZSBjb3VsZCBqdXN0IHNjaGVkdWxlIHRoZSB0YXNrbGV0IGhlcmUsIGJ1dAorCSAgIHRoYXQgaW50cm9kdWNlcyBsYXRlbmN5IHdlIGRvbid0IHdhbnQgLS0gaXQncyBub3RpY2VhYmxlICovCiAJaWYgKCFvbGRfbGVuKQogCQlmcGdhX3R4KGNhcmQpOwogfQogCi1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQpCitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCkKIHsKLQl1aW50MzJfdCB0eF9wZW5kaW5nOworCXVpbnQzMl90IHR4X3BlbmRpbmcsIGNhcmRfZmxhZ3M7CiAJdWludDMyX3QgdHhfc3RhcnRlZCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwpAQCAtNDYyLDY5ICs5MTgsNzcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKKwkKKwljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkvKgorCSAqIFRoZSBxdWV1ZSBsb2NrIGlzIHJlcXVpcmVkIGZvciBfd3JpdGluZ18gdG8gdHhfbWFzaywgYnV0IHdlJ3JlCisJICogT0sgdG8gcmVhZCBpdCBoZXJlIHdpdGhvdXQgbG9ja2luZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVwZGF0ZQorCSAqIHRoYXQgd2UgY291bGQgcmFjZSB3aXRoIGlzIGluIGZwZ2FfcXVldWUoKSB3aGVyZSBpdCBzZXRzIGEgYml0CisJICogZm9yIGEgbmV3IHBvcnQuLi4gYnV0IGl0J3MgZ29pbmcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGlmCisJICogaXQncyBkb2luZyB0aGF0LCBhbnl3YXkuCisJICovCisJdHhfcGVuZGluZyA9IGNhcmQtPnR4X21hc2sgJiB+Y2FyZF9mbGFnczsKIAotCXR4X3BlbmRpbmcgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotCi0JZGV2X3ZkYmcoJmNhcmQtPmRldi0+ZGV2LCAiVFggRmxhZ3MgYXJlICVYXG4iLCB0eF9wZW5kaW5nKTsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBjYXJkLT5ucl9wb3J0czsgcG9ydCsrKSB7Ci0JCWlmICghKHR4X3BlbmRpbmcgJiAoMSA8PCBwb3J0KSkpIHsKKwlmb3IgKHBvcnQgPSAwOyB0eF9wZW5kaW5nOyB0eF9wZW5kaW5nID4+PSAxLCBwb3J0KyspIHsKKwkJaWYgKHR4X3BlbmRpbmcgJiAxKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiID0gY2FyZC0+dHhfc2tiW3BvcnRdOworCQkJaWYgKG9sZHNrYikKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKG9sZHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIG9sZHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQkJc3Bpbl9sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSk7CisJCQlpZiAoIXNrYikKKwkJCQljYXJkLT50eF9tYXNrICY9IH4oMSA8PCBwb3J0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAotCQkJaWYgKCFza2IpCisJCQlpZiAoc2tiICYmICFjYXJkLT51c2luZ19kbWEpIHsKKwkJCQltZW1jcHlfdG9pbyhUWF9CVUYoY2FyZCwgcG9ydCksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OworCQkJCW9sZHNrYiA9IHNrYjsgLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgc2tiIGFscmVhZHkgKi8KKwkJCX0gZWxzZSBpZiAoc2tiICYmIGNhcmQtPnVzaW5nX2RtYSkgeworCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJCQkgICAgICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBUWF9ETUFfQUREUihwb3J0KSk7CisJCQl9CisKKwkJCWlmICghb2xkc2tiKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKiBDbGVhbiB1cCBhbmQgZnJlZSBvbGRza2Igbm93IGl0J3MgZ29uZSAqLwogCQkJaWYgKGF0bWRlYnVnKSB7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiVHJhbnNtaXR0ZWQ6IHBvcnQgJWRcbiIsCiAJCQkJCSBwb3J0KTsKLQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQlwcmludF9idWZmZXIob2xkc2tiKTsKIAkJCX0KLQkJCW1lbWNweV90b2lvKFRYX0JVRihjYXJkLCBwb3J0KSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkJCXZjYyA9ICoodm9pZCAqKilza2ItPmNiOworCQkJdmNjID0gU0tCX0NCKG9sZHNrYiktPnZjYzsKIAogCQkJaWYgKHZjYykgewogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKLQkJCQlzb2xvc19wb3AodmNjLCBza2IpOworCQkJCXNvbG9zX3BvcCh2Y2MsIG9sZHNrYik7CiAJCQl9IGVsc2UKLQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJCWRldl9rZnJlZV9za2JfaXJxKG9sZHNrYik7CiAKLQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OyAvL1NldCBUWCBmdWxsIGZsYWcKIAkJfQogCX0KKwkvKiBGb3Igbm9uLURNQSBUWCwgd3JpdGUgdGhlICdUWCBzdGFydCcgYml0IGZvciBhbGwgZm91ciBwb3J0cyBzaW11bHRhbmVvdXNseSAqLwogCWlmICh0eF9zdGFydGVkKQogCQlpb3dyaXRlMzIodHhfc3RhcnRlZCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2FyZF9mbGFnczsKIH0KIAogc3RhdGljIGludCBwc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gdmNjLT5kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCWludCBwa3RsZW47CiAKLQkvL2Rldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAicHNlbmQgY2FsbGVkLlxuIik7Ci0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImRldix2cGksdmNpID0gJWQsJWQsJWRcbiIsU09MT1NfQ0hBTih2Y2MtPmRldiksdmNjLT52cGksdmNjLT52Y2kpOwotCi0JaWYgKGRlYnVnKSB7Ci0JCXNrYjIgPSBhdG1fYWxsb2NfY2hhcmdlKHZjYywgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoc2tiMikgewotCQkJbWVtY3B5KHNrYjItPmRhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQkJc2tiX3B1dChza2IyLCBza2ItPmxlbik7Ci0JCQl2Y2MtPnB1c2godmNjLCBza2IyKTsKLQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLQkJfQotCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eCk7Ci0JCXNvbG9zX3BvcCh2Y2MsIHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChza2ItPmxlbiA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKKwlwa3RsZW4gPSBza2ItPmxlbjsKKwlpZiAocGt0bGVuID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJMZW5ndGggb2YgUERVIGlzIHRvbyBsYXJnZS4gRHJvcHBpbmcgUERVLlxuIik7CiAJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CiAJCXJldHVybiAwOwpAQCAtNTM5LDYgKzEwMDMsNyBAQAogCiAJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBleHBhbmRfYnksIDAsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJwc2tiX2V4cGFuZF9oZWFkIGZhaWxlZC5cbiIpOwogCQkJc29sb3NfcG9wKHZjYywgc2tiKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTU0Niw3ICsxMDExLDggQEAKIAogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCS8qIFRoaXMgZG9lcyBfbm90XyBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgKi8KKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihwa3RsZW4pOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9EQVRBKTsKQEAgLTU3MywyMCArMTAzOSwxOSBAQAogCiBzdGF0aWMgaW50IGZwZ2FfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWludCBlcnIsIGk7CisJaW50IGVycjsKIAl1aW50MTZfdCBmcGdhX3ZlcjsKIAl1aW50OF90IG1ham9yX3ZlciwgbWlub3JfdmVyOwogCXVpbnQzMl90IGRhdGEzMjsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZDsKIAotCWlmIChkZWJ1ZykKLQkJcmV0dXJuIDA7Ci0KIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJY2FyZC0+ZGV2ID0gZGV2OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmZ3X3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5wYXJhbV93cSk7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKQEAgLTU5NCw2ICsxMDU5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWVyciA9IHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IDMyLWJpdCBETUEgbWFza1xuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAic29sb3MiKTsKIAlpZiAoZXJyKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbnNcbiIpOwpAQCAtNjExLDE3ICsxMDgyLDEzIEBACiAJCWdvdG8gb3V0X3VubWFwX2NvbmZpZzsKIAl9CiAKLS8vCWZvcihpPTA7aTw2NCA7aSs9NCl7Ci0vLwkJZGF0YTMyPWlvcmVhZDMyKGNhcmQtPmJ1ZmZlcnMgKyBpKTsKLS8vCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIiUwOGxYXG4iLCh1bnNpZ25lZCBsb25nKWRhdGEzMik7Ci0vLwl9CisJaWYgKHJlc2V0KSB7CisJCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCiAKLQkvL0ZpbGwgQ29uZmlnIE1lbSB3aXRoIHplcm9zCi0JZm9yKGkgPSAwOyBpIDwgMTI4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIGkpOwotCi0JLy9TZXQgUlggZW1wdHkgZmxhZ3MKLQlpb3dyaXRlMzIoMHhGMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwl9CiAKIAlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfVkVSKTsKIAlmcGdhX3ZlciA9IChkYXRhMzIgJiAweDAwMDBGRkZGKTsKQEAgLTYzMCw1NSArMTA5Nyw1MyBAQAogCWRldl9pbmZvKCZkZXYtPmRldiwgIlNvbG9zIEZQR0EgVmVyc2lvbiAlZC4lMDJkIHN2bi0lZFxuIiwKIAkJIG1ham9yX3ZlciwgbWlub3JfdmVyLCBmcGdhX3Zlcik7CiAKLQljYXJkLT5ucl9wb3J0cyA9IDI7IC8qIEZJWE1FOiBEZXRlY3QgZGF1Z2h0ZXJib2FyZCAqLworCWlmICgwICYmIGZwZ2FfdmVyID4gMjcpCisJCWNhcmQtPnVzaW5nX2RtYSA9IDE7CisJZWxzZSB7CisJCS8qIFNldCBSWCBlbXB0eSBmbGFnIGZvciBhbGwgcG9ydHMgKi8KKwkJaW93cml0ZTMyKDB4RjAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJfQogCi0JZXJyID0gYXRtX2luaXQoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5tYXBfYm90aDsKKwlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIFBPUlRTKTsKKwljYXJkLT5ucl9wb3J0cyA9IChkYXRhMzIgJiAweDAwMDAwMEZGKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOworCiAJdGFza2xldF9pbml0KCZjYXJkLT50bGV0LCBzb2xvc19iaCwgKHVuc2lnbmVkIGxvbmcpY2FyZCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnR4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwotLyoKLQkvLyBTZXQgTG9vcGJhY2sgbW9kZQotCWRhdGEzMiA9IDB4MDAwMTAwMDA7Ci0JaW93cml0ZTMyKGRhdGEzMixjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotKi8KLS8qCi0JLy8gRmlsbCBCdWZmZXJzIHdpdGggemVyb3MKLQlmb3IgKGkgPSAwOyBpIDwgQlVGX1NJWkUgKiA4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5idWZmZXJzICsgaSk7Ci0qLwotLyoKLQlmb3IoaSA9IDA7IGkgPCAoQlVGX1NJWkUgKiAxKTsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHgxMjM0NTY3OCwgY2FyZC0+YnVmZmVycyArIGkgKyAoMCpCVUZfU0laRSkpOwotCWZvcihpID0gMDsgaSA8IChCVUZfU0laRSAqIDEpOyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGFiY2RlZjk4LCBjYXJkLT5idWZmZXJzICsgaSArICgxKkJVRl9TSVpFKSk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5wYXJhbV9xdWV1ZSk7CiAKLQkvLyBSZWFkIENvbmZpZyBNZW1vcnkKLQlwcmludGsoS0VSTl9ERUJVRyAiUmVhZGluZyBDb25maWcgTUVNXG4iKTsKLQlpID0gMDsKLQlmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRhdGEzMj1pb3JlYWQzMihjYXJkLT5idWZmZXJzICsgaSooQlVGX1NJWkUvMikpOwotCQlwcmludGsoS0VSTl9BTEVSVCAiQWRkcjogJWxYIERhdGE6ICUwOGxYXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKGFkZHJfc3RhcnQgKyBpKihCVUZfU0laRS8yKSksCi0JCSAgICAgICAodW5zaWduZWQgbG9uZylkYXRhMzIpOwotCX0KLSovCi0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIlJlcXVlc3RpbmcgSVJROiAlZFxuIixkZXYtPmlycSk7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbG9zX2lycSwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc29sb3NfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCSAgInNvbG9zLXBjaSIsIGNhcmQpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGludGVycnVwdCBJUlE6ICVkXG4iLCBkZXYtPmlycSk7CisJCWdvdG8gb3V0X3VubWFwX2JvdGg7CisJfQogCi0JLy8gRW5hYmxlIElSUXMKIAlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKKwlpZiAoZnBnYV91cGdyYWRlKQorCQlmbGFzaF91cGdyYWRlKGNhcmQsIDApOworCisJaWYgKGZpcm13YXJlX3VwZ3JhZGUpCisJCWZsYXNoX3VwZ3JhZGUoY2FyZCwgMSk7CisKKwllcnIgPSBhdG1faW5pdChjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2lycTsKKwogCXJldHVybiAwOwogCisgb3V0X2ZyZWVfaXJxOgorCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKKwlmcmVlX2lycShkZXYtPmlycSwgY2FyZCk7CisJdGFza2xldF9raWxsKCZjYXJkLT50bGV0KTsKKwkKICBvdXRfdW5tYXBfYm90aDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmNvbmZpZ19yZWdzKTsKICBvdXRfdW5tYXBfY29uZmlnOgogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CkBAIC02OTMsOSArMTE1OCwxMCBAQAogewogCWludCBpOwogCi0Jb3BlbnMgPSAwOwotCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm5yX3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT50eF9xdWV1ZVtpXSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPmNsaV9xdWV1ZVtpXSk7CiAKQEAgLTcwNyw2ICsxMTczLDggQEAKIAkJfQogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2RldiwgJmRldl9hdHRyX2NvbnNvbGUpKQogCQkJZGV2X2VycigmY2FyZC0+ZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgY29uc29sZSBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CisJCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKSkKKwkJCWRldl9lcnIoJmNhcmQtPmRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHBhcmFtZXRlciBncm91cCBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CiAKIAkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmVnaXN0ZXJlZCBBVE0gZGV2aWNlICVkXG4iLCBjYXJkLT5hdG1kZXZbaV0tPm51bWJlcik7CiAKQEAgLTcxNCw2ICsxMTgyLDIyIEBACiAJCWNhcmQtPmF0bWRldltpXS0+Y2lfcmFuZ2UudmNpX2JpdHMgPSAxNjsKIAkJY2FyZC0+YXRtZGV2W2ldLT5kZXZfZGF0YSA9IGNhcmQ7CiAJCWNhcmQtPmF0bWRldltpXS0+cGh5X2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWk7CisJCWNhcmQtPmF0bWRldltpXS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIGF0bV9pbml0KClcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfU1RBVFVTKTsKKworCQlmcGdhX3F1ZXVlKGNhcmQsIGksIHNrYiwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzI0LDggKzEyMDgsMjggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ucl9wb3J0czsgaSsrKSB7CiAJCWlmIChjYXJkLT5hdG1kZXZbaV0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKIAkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlVucmVnaXN0ZXJpbmcgQVRNIGRldmljZSAlZFxuIiwgY2FyZC0+YXRtZGV2W2ldLT5udW1iZXIpOworCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKTsKIAkJCWF0bV9kZXZfZGVyZWdpc3RlcihjYXJkLT5hdG1kZXZbaV0pOworCisJCQlza2IgPSBjYXJkLT5yeF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQl9CisJCQlza2IgPSBjYXJkLT50eF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJfQorCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbaV0pKSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisgCiAJCX0KIAl9CiB9CkBAIC03MzMsMzEgKzEyMzcsMzEgQEAKIHN0YXRpYyB2b2lkIGZwZ2FfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwkKKwkvKiBEaXNhYmxlIElSUXMgKi8KKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKLQlpZiAoZGVidWcpCi0JCXJldHVybjsKKwkvKiBSZXNldCBGUEdBICovCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkodm9pZClpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAogCiAJYXRtX3JlbW92ZShjYXJkKTsKIAotCWRldl92ZGJnKCZkZXYtPmRldiwgIkZyZWVpbmcgSVJRXG4iKTsKLQkvLyBEaXNhYmxlIElSUXMgZnJvbSBGUEdBCi0JaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBjYXJkKTsKIAl0YXNrbGV0X2tpbGwoJmNhcmQtPnRsZXQpOwogCi0JLy8JaW93cml0ZTMyKDB4MDEscGNpcmVncyk7Ci0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiVW5tYXBwaW5nIFBDSSByZXNvdXJjZVxuIik7CisJLyogUmVsZWFzZSBkZXZpY2UgZnJvbSByZXNldCAqLworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJKHZvaWQpaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5jb25maWdfcmVncyk7CiAKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJSZWxlYXNpbmcgUENJIFJlZ2lvblxuIik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoY2FyZCk7Ci0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImZwZ2FfcmVtb3ZlXG4iKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmcGdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggOWY1MGYxYi4uZGRjOTc0OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmgKKysrIGIvZHJpdmVycy9iYXNlL2Jhc2UuaApAQCAtNjMsNiArNjMsMzIgQEAKICNkZWZpbmUgdG9fY2xhc3Mob2JqKQlcCiAJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNsYXNzX3ByaXZhdGUsIGNsYXNzX3N1YnN5cy5rb2JqKQogCisvKioKKyAqIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAtIHN0cnVjdHVyZSB0byBob2xkIHRoZSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgY29yZSBwb3J0aW9ucyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqCisgKiBAa2xpc3RfY2hpbGRyZW4gLSBrbGlzdCBjb250YWluaW5nIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGRldmljZQorICogQGtub2RlX3BhcmVudCAtIG5vZGUgaW4gc2libGluZyBsaXN0CisgKiBAa25vZGVfZHJpdmVyIC0gbm9kZSBpbiBkcml2ZXIgbGlzdAorICogQGtub2RlX2J1cyAtIG5vZGUgaW4gYnVzIGxpc3QKKyAqIEBkZXZpY2UgLSBwb2ludGVyIGJhY2sgdG8gdGhlIHN0cnVjdCBjbGFzcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCisgKiBhc3NvY2lhdGVkIHdpdGguCisgKgorICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuCisgKi8KK3N0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7CisJc3RydWN0IGtsaXN0IGtsaXN0X2NoaWxkcmVuOworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX3BhcmVudDsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9kcml2ZXI7CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfYnVzOworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKK307CisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX3BhcmVudCkKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfZHJpdmVyKG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfZHJpdmVyKQorI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9idXMob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9idXMpCisKIC8qIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBkZXZpY2VzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGJ1c2VzX2luaXQodm9pZCk7CkBAIC04Niw2ICsxMTIsMTEgQEAKIAogZXh0ZXJuIHZvaWQgZHJpdmVyX2RldGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKIGV4dGVybiBpbnQgZHJpdmVyX3Byb2JlX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGlubGluZSBpbnQgZHJpdmVyX21hdGNoX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZHJ2LT5idXMtPm1hdGNoICYmIGRydi0+YnVzLT5tYXRjaChkZXYsIGRydik7Cit9CiAKIGV4dGVybiB2b2lkIHN5c2Rldl9zaHV0ZG93bih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IDgzZjMyYjguLmRjMDMwZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCWludCBlcnIgPSAtRU5PREVWOwogCiAJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlX2J5X25hbWUoYnVzLCBOVUxMLCBidWYpOwotCWlmIChkZXYgJiYgZGV2LT5kcml2ZXIgPT0gTlVMTCkgeworCWlmIChkZXYgJiYgZGV2LT5kcml2ZXIgPT0gTlVMTCAmJiBkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkgewogCQlpZiAoZGV2LT5wYXJlbnQpCS8qIE5lZWRlZCBmb3IgVVNCICovCiAJCQlkb3duKCZkZXYtPnBhcmVudC0+c2VtKTsKIAkJZG93bigmZGV2LT5zZW0pOwpAQCAtMjUzLDcgKzI1MywxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKKworCWlmIChuKSB7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC0yODYsNyArMjkzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmYnVzLT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9idXMgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfYnVzIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oZGV2LCBkYXRhKTsKIAlrbGlzdF9pdGVyX2V4aXQoJmkpOwpAQCAtMzIwLDcgKzMyNyw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIChzdGFydCA/ICZzdGFydC0+a25vZGVfYnVzIDogTlVMTCkpOworCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2J1cyA6IE5VTEwpKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChkZXYsIGRhdGEpICYmIGdldF9kZXZpY2UoZGV2KSkKIAkJCWJyZWFrOwpAQCAtNTA3LDcgKzUxNCw4IEBACiAJCQlyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7CiAJCVdBUk5fT04ocmV0IDwgMCk7CiAJCWlmIChyZXQgPj0gMCkKLQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX2J1cywgJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcyk7CisJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9idXMsCisJCQkJICAgICAgICZidXMtPnAtPmtsaXN0X2RldmljZXMpOwogCX0KIH0KIApAQCAtNTI4LDggKzUzNiw4IEBACiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmJ1cy0+cC0+ZGV2aWNlc19rc2V0LT5rb2JqLAogCQkJCSAgZGV2X25hbWUoZGV2KSk7CiAJCWRldmljZV9yZW1vdmVfYXR0cnMoZGV2LT5idXMsIGRldik7Ci0JCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPmtub2RlX2J1cykpCi0JCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfYnVzKTsKKwkJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+cC0+a25vZGVfYnVzKSkKKwkJCWtsaXN0X2RlbCgmZGV2LT5wLT5rbm9kZV9idXMpOwogCiAJCXByX2RlYnVnKCJidXM6ICclcyc6IHJlbW92ZSBkZXZpY2UgJXNcbiIsCiAJCQkgZGV2LT5idXMtPm5hbWUsIGRldl9uYW1lKGRldikpOwpAQCAtODMxLDE0ICs4MzksMTYgQEAKIAogc3RhdGljIHZvaWQga2xpc3RfZGV2aWNlc19nZXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRldl9wcnYtPmRldmljZTsKIAogCWdldF9kZXZpY2UoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQga2xpc3RfZGV2aWNlc19wdXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRldl9wcnYtPmRldmljZTsKIAogCXB1dF9kZXZpY2UoZGV2KTsKIH0KQEAgLTkzMiw2ICs5NDIsNyBAQAogCWtzZXRfdW5yZWdpc3RlcigmYnVzLT5wLT5zdWJzeXMpOwogCWtmcmVlKGJ1cy0+cCk7CiBvdXQ6CisJYnVzLT5wID0gTlVMTDsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3JlZ2lzdGVyKTsKQEAgLTk1Myw2ICs5NjQsNyBAQAogCWJ1c19yZW1vdmVfZmlsZShidXMsICZidXNfYXR0cl91ZXZlbnQpOwogCWtzZXRfdW5yZWdpc3RlcigmYnVzLT5wLT5zdWJzeXMpOwogCWtmcmVlKGJ1cy0+cCk7CisJYnVzLT5wID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJ1c191bnJlZ2lzdGVyKTsKIApAQCAtOTkzLDE4ICsxMDA1LDIwIEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCXN0cnVjdCBrbGlzdF9ub2RlICpuOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpiOwogCiAJbGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHsKIAkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOwotCQliID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJCWIgPSBkZXZfcHJ2LT5kZXZpY2U7CiAJCWlmIChjb21wYXJlKGEsIGIpIDw9IDApIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLAotCQkJCSAgICAgICAmYi0+a25vZGVfYnVzLm5fbm9kZSk7CisJCQlsaXN0X21vdmVfdGFpbCgmYS0+cC0+a25vZGVfYnVzLm5fbm9kZSwKKwkJCQkgICAgICAgJmItPnAtPmtub2RlX2J1cy5uX25vZGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLCBsaXN0KTsKKwlsaXN0X21vdmVfdGFpbCgmYS0+cC0+a25vZGVfYnVzLm5fbm9kZSwgbGlzdCk7CiB9CiAKIHZvaWQgYnVzX3NvcnRfYnJlYWR0aGZpcnN0KHN0cnVjdCBidXNfdHlwZSAqYnVzLApAQCAtMTAxNCw2ICsxMDI4LDcgQEAKIAlMSVNUX0hFQUQoc29ydGVkX2RldmljZXMpOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBrbGlzdCAqZGV2aWNlX2tsaXN0OwogCkBAIC0xMDIyLDcgKzEwMzcsOCBAQAogCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7CiAJCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKLQkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKIAkJZGV2aWNlX2luc2VydGlvbl9zb3J0X2tsaXN0KGRldiwgJnNvcnRlZF9kZXZpY2VzLCBjb21wYXJlKTsKIAl9CiAJbGlzdF9zcGxpY2UoJnNvcnRlZF9kZXZpY2VzLCAmZGV2aWNlX2tsaXN0LT5rX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggZjNlYWU2My4uZTczYzkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0xMDksNiArMTA5LDcgQEAKIHN0YXRpYyB2b2lkIGRldmljZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSBkZXYtPnA7CiAKIAlpZiAoZGV2LT5yZWxlYXNlKQogCQlkZXYtPnJlbGVhc2UoZGV2KTsKQEAgLTEyMCw2ICsxMjEsNyBAQAogCQlXQVJOKDEsIEtFUk5fRVJSICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBoYXZlIGEgcmVsZWFzZSgpICIKIAkJCSJmdW5jdGlvbiwgaXQgaXMgYnJva2VuIGFuZCBtdXN0IGJlIGZpeGVkLlxuIiwKIAkJCWRldl9uYW1lKGRldikpOworCWtmcmVlKHApOwogfQogCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBkZXZpY2Vfa3R5cGUgPSB7CkBAIC0xMzQsOCArMTM2LDYgQEAKIAogCWlmIChrdHlwZSA9PSAmZGV2aWNlX2t0eXBlKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKLQkJaWYgKGRldi0+dWV2ZW50X3N1cHByZXNzKQotCQkJcmV0dXJuIDA7CiAJCWlmIChkZXYtPmJ1cykKIAkJCXJldHVybiAxOwogCQlpZiAoZGV2LT5jbGFzcykKQEAgLTUwNywxNCArNTA3LDE2IEBACiAKIHN0YXRpYyB2b2lkIGtsaXN0X2NoaWxkcmVuX2dldChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcC0+ZGV2aWNlOwogCiAJZ2V0X2RldmljZShkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBrbGlzdF9jaGlsZHJlbl9wdXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwID0gdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHAtPmRldmljZTsKIAogCXB1dF9kZXZpY2UoZGV2KTsKIH0KQEAgLTUzOCw4ICs1NDAsNiBAQAogewogCWRldi0+a29iai5rc2V0ID0gZGV2aWNlc19rc2V0OwogCWtvYmplY3RfaW5pdCgmZGV2LT5rb2JqLCAmZGV2aWNlX2t0eXBlKTsKLQlrbGlzdF9pbml0KCZkZXYtPmtsaXN0X2NoaWxkcmVuLCBrbGlzdF9jaGlsZHJlbl9nZXQsCi0JCSAgIGtsaXN0X2NoaWxkcmVuX3B1dCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZG1hX3Bvb2xzKTsKIAlpbml0X01VVEVYKCZkZXYtPnNlbSk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+ZGV2cmVzX2xvY2spOwpAQCAtNzc3LDE3ICs3NzcsMTIgQEAKIGludCBkZXZfc2V0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IHZhcmdzOwotCWNoYXIgKnM7CisJaW50IGVycjsKIAogCXZhX3N0YXJ0KHZhcmdzLCBmbXQpOwotCXZzbnByaW50ZihkZXYtPmJ1c19pZCwgc2l6ZW9mKGRldi0+YnVzX2lkKSwgZm10LCB2YXJncyk7CisJZXJyID0ga29iamVjdF9zZXRfbmFtZV92YXJncygmZGV2LT5rb2JqLCBmbXQsIHZhcmdzKTsKIAl2YV9lbmQodmFyZ3MpOwotCi0JLyogZXd3dy4uLiBzb21lIG9mIHRoZXNlIGJ1Z2dlcnMgaGF2ZSAvIGluIHRoZSBuYW1lLi4uICovCi0Jd2hpbGUgKChzID0gc3RyY2hyKGRldi0+YnVzX2lkLCAnLycpKSkKLQkJKnMgPSAnISc7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3NldF9uYW1lKTsKIApAQCAtODY0LDEyICs4NTksMjYgQEAKIAlpZiAoIWRldikKIAkJZ290byBkb25lOwogCi0JLyogVGVtcG9yYXJpbHkgc3VwcG9ydCBpbml0X25hbWUgaWYgaXQgaXMgc2V0LgotCSAqIEl0IHdpbGwgb3ZlcnJpZGUgYnVzX2lkIGZvciBub3cgKi8KLQlpZiAoZGV2LT5pbml0X25hbWUpCi0JCWRldl9zZXRfbmFtZShkZXYsICIlcyIsIGRldi0+aW5pdF9uYW1lKTsKKwlkZXYtPnAgPSBremFsbG9jKHNpemVvZigqZGV2LT5wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnApIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+cC0+ZGV2aWNlID0gZGV2OworCWtsaXN0X2luaXQoJmRldi0+cC0+a2xpc3RfY2hpbGRyZW4sIGtsaXN0X2NoaWxkcmVuX2dldCwKKwkJICAga2xpc3RfY2hpbGRyZW5fcHV0KTsKIAotCWlmICghc3RybGVuKGRldi0+YnVzX2lkKSkKKwkvKgorCSAqIGZvciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2VzLCB3aGljaCBzaG91bGQgYWxsIGJlIGNvbnZlcnRlZAorCSAqIHNvbWUgZGF5LCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIG5hbWUuIFdlIHByZXZlbnQgcmVhZGluZyBiYWNrCisJICogdGhlIG5hbWUsIGFuZCBmb3JjZSB0aGUgdXNlIG9mIGRldl9uYW1lKCkKKwkgKi8KKwlpZiAoZGV2LT5pbml0X25hbWUpIHsKKwkJZGV2X3NldF9uYW1lKGRldiwgZGV2LT5pbml0X25hbWUpOworCQlkZXYtPmluaXRfbmFtZSA9IE5VTEw7CisJfQorCisJaWYgKCFkZXZfbmFtZShkZXYpKQogCQlnb3RvIGRvbmU7CiAKIAlwcl9kZWJ1ZygiZGV2aWNlOiAnJXMnOiAlc1xuIiwgZGV2X25hbWUoZGV2KSwgX19mdW5jX18pOwpAQCAtOTI4LDcgKzkzNyw4IEBACiAJa29iamVjdF91ZXZlbnQoJmRldi0+a29iaiwgS09CSl9BREQpOwogCWJ1c19hdHRhY2hfZGV2aWNlKGRldik7CiAJaWYgKHBhcmVudCkKLQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LCAmcGFyZW50LT5rbGlzdF9jaGlsZHJlbik7CisJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCSAgICAgICAmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAKIAlpZiAoZGV2LT5jbGFzcykgewogCQltdXRleF9sb2NrKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CkBAIC0xMDQyLDcgKzEwNTIsNyBAQAogCWRldmljZV9wbV9yZW1vdmUoZGV2KTsKIAlkcG1fc3lzZnNfcmVtb3ZlKGRldik7CiAJaWYgKHBhcmVudCkKLQkJa2xpc3RfZGVsKCZkZXYtPmtub2RlX3BhcmVudCk7CisJCWtsaXN0X2RlbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCWlmIChNQUpPUihkZXYtPmRldnQpKSB7CiAJCWRldmljZV9yZW1vdmVfc3lzX2Rldl9lbnRyeShkZXYpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2dF9hdHRyKTsKQEAgLTExMDMsNyArMTExMywxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcDsKKworCWlmIChuKSB7CisJCXAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJCWRldiA9IHAtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC0xMTI1LDcgKzExNDIsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmNoaWxkOwogCWludCBlcnJvciA9IDA7CiAKLQlrbGlzdF9pdGVyX2luaXQoJnBhcmVudC0+a2xpc3RfY2hpbGRyZW4sICZpKTsKKwlrbGlzdF9pdGVyX2luaXQoJnBhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4sICZpKTsKIAl3aGlsZSAoKGNoaWxkID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oY2hpbGQsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC0xMTU2LDcgKzExNzMsNyBAQAogCWlmICghcGFyZW50KQogCQlyZXR1cm4gTlVMTDsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5rbGlzdF9jaGlsZHJlbiwgJmkpOworCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbiwgJmkpOwogCXdoaWxlICgoY2hpbGQgPSBuZXh0X2RldmljZSgmaSkpKQogCQlpZiAobWF0Y2goY2hpbGQsIGRhdGEpICYmIGdldF9kZXZpY2UoY2hpbGQpKQogCQkJYnJlYWs7CkBAIC0xMzQ4LDcgKzEzNjUsMTAgQEAKIAlkZXYtPnJlbGVhc2UgPSBkZXZpY2VfY3JlYXRlX3JlbGVhc2U7CiAJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CiAKLQl2c25wcmludGYoZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFLCBmbXQsIGFyZ3MpOworCXJldHZhbCA9IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3MoJmRldi0+a29iaiwgZm10LCBhcmdzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcjsKQEAgLTE0NTIsMTkgKzE0NzIsMTUgQEAKIAkJb2xkX2NsYXNzX25hbWUgPSBtYWtlX2NsYXNzX25hbWUoZGV2LT5jbGFzcy0+bmFtZSwgJmRldi0+a29iaik7CiAjZW5kaWYKIAotCW9sZF9kZXZpY2VfbmFtZSA9IGttYWxsb2MoQlVTX0lEX1NJWkUsIEdGUF9LRVJORUwpOworCW9sZF9kZXZpY2VfbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUoZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvbGRfZGV2aWNlX25hbWUpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3RybGNweShvbGRfZGV2aWNlX25hbWUsIGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSk7Ci0Jc3RybGNweShkZXYtPmJ1c19pZCwgbmV3X25hbWUsIEJVU19JRF9TSVpFKTsKIAogCWVycm9yID0ga29iamVjdF9yZW5hbWUoJmRldi0+a29iaiwgbmV3X25hbWUpOwotCWlmIChlcnJvcikgewotCQlzdHJsY3B5KGRldi0+YnVzX2lkLCBvbGRfZGV2aWNlX25hbWUsIEJVU19JRF9TSVpFKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwotCX0KIAogI2lmZGVmIENPTkZJR19TWVNGU19ERVBSRUNBVEVECiAJaWYgKG9sZF9jbGFzc19uYW1lKSB7CkBAIC0xNTQ1LDggKzE1NjEsMTAgQEAKICAqIGRldmljZV9tb3ZlIC0gbW92ZXMgYSBkZXZpY2UgdG8gYSBuZXcgcGFyZW50CiAgKiBAZGV2OiB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IGRldmljZSB0byBiZSBtb3ZlZAogICogQG5ld19wYXJlbnQ6IHRoZSBuZXcgcGFyZW50IG9mIHRoZSBkZXZpY2UgKGNhbiBieSBOVUxMKQorICogQGRwbV9vcmRlcjogaG93IHRvIHJlb3JkZXIgdGhlIGRwbV9saXN0CiAgKi8KLWludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQpCitpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50LAorCQllbnVtIGRwbV9vcmRlciBkcG1fb3JkZXIpCiB7CiAJaW50IGVycm9yOwogCXN0cnVjdCBkZXZpY2UgKm9sZF9wYXJlbnQ7CkBAIC0xNTU2LDYgKzE1NzQsNyBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWRldmljZV9wbV9sb2NrKCk7CiAJbmV3X3BhcmVudCA9IGdldF9kZXZpY2UobmV3X3BhcmVudCk7CiAJbmV3X3BhcmVudF9rb2JqID0gZ2V0X2RldmljZV9wYXJlbnQoZGV2LCBuZXdfcGFyZW50KTsKIApAQCAtMTU3MCw5ICsxNTg5LDEwIEBACiAJb2xkX3BhcmVudCA9IGRldi0+cGFyZW50OwogCWRldi0+cGFyZW50ID0gbmV3X3BhcmVudDsKIAlpZiAob2xkX3BhcmVudCkKLQkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX3BhcmVudCk7CisJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCWlmIChuZXdfcGFyZW50KSB7Ci0JCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX3BhcmVudCwgJm5ld19wYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfcGFyZW50LAorCQkJICAgICAgICZuZXdfcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAJCXNldF9kZXZfbm9kZShkZXYsIGRldl90b19ub2RlKG5ld19wYXJlbnQpKTsKIAl9CiAKQEAgLTE1ODQsMTEgKzE2MDQsMTEgQEAKIAkJZGV2aWNlX21vdmVfY2xhc3NfbGlua3MoZGV2LCBuZXdfcGFyZW50LCBvbGRfcGFyZW50KTsKIAkJaWYgKCFrb2JqZWN0X21vdmUoJmRldi0+a29iaiwgJm9sZF9wYXJlbnQtPmtvYmopKSB7CiAJCQlpZiAobmV3X3BhcmVudCkKLQkJCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJCQlrbGlzdF9yZW1vdmUoJmRldi0+cC0+a25vZGVfcGFyZW50KTsKIAkJCWRldi0+cGFyZW50ID0gb2xkX3BhcmVudDsKIAkJCWlmIChvbGRfcGFyZW50KSB7Ci0JCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LAotCQkJCQkgICAgICAgJm9sZF9wYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQsCisJCQkJCSAgICAgICAmb2xkX3BhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4pOwogCQkJCXNldF9kZXZfbm9kZShkZXYsIGRldl90b19ub2RlKG9sZF9wYXJlbnQpKTsKIAkJCX0KIAkJfQpAQCAtMTU5Niw5ICsxNjE2LDIzIEBACiAJCXB1dF9kZXZpY2UobmV3X3BhcmVudCk7CiAJCWdvdG8gb3V0OwogCX0KKwlzd2l0Y2ggKGRwbV9vcmRlcikgeworCWNhc2UgRFBNX09SREVSX05PTkU6CisJCWJyZWFrOworCWNhc2UgRFBNX09SREVSX0RFVl9BRlRFUl9QQVJFTlQ6CisJCWRldmljZV9wbV9tb3ZlX2FmdGVyKGRldiwgbmV3X3BhcmVudCk7CisJCWJyZWFrOworCWNhc2UgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWOgorCQlkZXZpY2VfcG1fbW92ZV9iZWZvcmUobmV3X3BhcmVudCwgZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfREVWX0xBU1Q6CisJCWRldmljZV9wbV9tb3ZlX2xhc3QoZGV2KTsKKwkJYnJlYWs7CisJfQogb3V0X3B1dDoKIAlwdXRfZGV2aWNlKG9sZF9wYXJlbnQpOwogb3V0OgorCWRldmljZV9wbV91bmxvY2soKTsKIAlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NwdS5jIGIvZHJpdmVycy9iYXNlL2NwdS5jCmluZGV4IDcxOWVlNWMuLjViMjU3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jcHUuYworKysgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogLyoKICAqIFByaW50IGNwdSBvbmxpbmUsIHBvc3NpYmxlLCBwcmVzZW50LCBhbmQgc3lzdGVtIG1hcHMKICAqLwotc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c19tYXAoY2hhciAqYnVmLCBjcHVtYXNrX3QgKm1hcCkKK3N0YXRpYyBzc2l6ZV90IHByaW50X2NwdXNfbWFwKGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hcCkKIHsKIAlpbnQgbiA9IGNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLTIsIG1hcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggMTM1MjMxMi4uZjE3YzMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIHZvaWQgZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5rbm9kZV9kcml2ZXIpKSB7CisJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+cC0+a25vZGVfZHJpdmVyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZGV2aWNlICVzIGFscmVhZHkgYm91bmRcbiIsCiAJCQlfX2Z1bmNfXywga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKIAkJcmV0dXJuOwpAQCAtNDMsNyArNDMsNyBAQAogCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZkZXYtPmJ1cy0+cC0+YnVzX25vdGlmaWVyLAogCQkJCQkgICAgIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSLCBkZXYpOwogCi0Ja2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfZHJpdmVyLCAmZGV2LT5kcml2ZXItPnAtPmtsaXN0X2RldmljZXMpOworCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX2RyaXZlciwgJmRldi0+ZHJpdmVyLT5wLT5rbGlzdF9kZXZpY2VzKTsKIH0KIAogc3RhdGljIGludCBkcml2ZXJfc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE3MiwxNiArMTcyLDEyIEBACiAvKioKICAqIHdhaXRfZm9yX2RldmljZV9wcm9iZQogICogV2FpdCBmb3IgZGV2aWNlIHByb2JpbmcgdG8gYmUgY29tcGxldGVkLgotICoKLSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gcG9sbHMgYXQgMTAwIG1zZWMgaW50ZXJ2YWxzLgogICovCi1pbnQgd2FpdF9mb3JfZGV2aWNlX3Byb2JlKHZvaWQpCit2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKQogewogCS8qIHdhaXQgZm9yIHRoZSBrbm93biBkZXZpY2VzIHRvIGNvbXBsZXRlIHRoZWlyIHByb2JpbmcgKi8KLQl3aGlsZSAoZHJpdmVyX3Byb2JlX2RvbmUoKSAhPSAwKQotCQltc2xlZXAoMTAwKTsKKwl3YWl0X2V2ZW50KHByb2JlX3dhaXRxdWV1ZSwgYXRvbWljX3JlYWQoJnByb2JlX2NvdW50KSA9PSAwKTsKIAlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTg5LDE0ICsxODUsOCBAQAogICogQGRydjogZHJpdmVyIHRvIGJpbmQgYSBkZXZpY2UgdG8KICAqIEBkZXY6IGRldmljZSB0byB0cnkgdG8gYmluZCB0byB0aGUgZHJpdmVyCiAgKgotICogRmlyc3QsIHdlIGNhbGwgdGhlIGJ1cydzIG1hdGNoIGZ1bmN0aW9uLCBpZiBvbmUgcHJlc2VudCwgd2hpY2ggc2hvdWxkCi0gKiBjb21wYXJlIHRoZSBkZXZpY2UgSURzIHRoZSBkcml2ZXIgc3VwcG9ydHMgd2l0aCB0aGUgZGV2aWNlIElEcyBvZiB0aGUKLSAqIGRldmljZS4gTm90ZSB3ZSBkb24ndCBkbyB0aGlzIG91cnNlbHZlcyBiZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlCi0gKiBmb3JtYXQgb2YgdGhlIElEIHN0cnVjdHVyZXMsIG5vciB3aGF0IGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBtYXRjaCBhbmQKLSAqIHdoYXQgaXMgbm90LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIGEgbWF0Y2ggaXMgZm91bmQsIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcwotICogbm90IHJlZ2lzdGVyZWQsIGFuZCAwIG90aGVyd2lzZS4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRU5PREVWIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQsCisgKiAxIGlmIHRoZSBkZXZpY2UgaXMgYm91bmQgc3VjZXNzZnVsbHkgYW5kIDAgb3RoZXJ3aXNlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBAZGV2LT5zZW0gaGVsZC4gIFdoZW4gY2FsbGVkIGZvciBhCiAgKiBVU0IgaW50ZXJmYWNlLCBAZGV2LT5wYXJlbnQtPnNlbSBtdXN0IGJlIGhlbGQgYXMgd2VsbC4KQEAgLTIwNywyMSArMTk3LDIyIEBACiAKIAlpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKGRldikpCiAJCXJldHVybiAtRU5PREVWOwotCWlmIChkcnYtPmJ1cy0+bWF0Y2ggJiYgIWRydi0+YnVzLT5tYXRjaChkZXYsIGRydikpCi0JCWdvdG8gZG9uZTsKIAogCXByX2RlYnVnKCJidXM6ICclcyc6ICVzOiBtYXRjaGVkIGRldmljZSAlcyB3aXRoIGRyaXZlciAlc1xuIiwKIAkJIGRydi0+YnVzLT5uYW1lLCBfX2Z1bmNfXywgZGV2X25hbWUoZGV2KSwgZHJ2LT5uYW1lKTsKIAogCXJldCA9IHJlYWxseV9wcm9iZShkZXYsIGRydik7CiAKLWRvbmU6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmljZV9hdHRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCisJaWYgKCFkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gZHJpdmVyX3Byb2JlX2RldmljZShkcnYsIGRldik7CiB9CiAKQEAgLTI3NCw3ICsyNjUsNyBAQAogCSAqIGlzIGFuIGVycm9yLgogCSAqLwogCi0JaWYgKGRydi0+YnVzLT5tYXRjaCAmJiAhZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KSkKKwlpZiAoIWRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKQogCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KQEAgLTMyNyw3ICszMTgsNyBAQAogCQkJZHJ2LT5yZW1vdmUoZGV2KTsKIAkJZGV2cmVzX3JlbGVhc2VfYWxsKGRldik7CiAJCWRldi0+ZHJpdmVyID0gTlVMTDsKLQkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX2RyaXZlcik7CisJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9kcml2ZXIpOwogCX0KIH0KIApAQCAtMzU3LDYgKzM0OCw3IEBACiAgKi8KIHZvaWQgZHJpdmVyX2RldGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogeworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAlmb3IgKDs7KSB7CkBAIC0zNjUsOCArMzU3LDEwIEBACiAJCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAJCQlicmVhazsKIAkJfQotCQlkZXYgPSBsaXN0X2VudHJ5KGRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xpc3QucHJldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9kcml2ZXIubl9ub2RlKTsKKwkJZGV2X3BydiA9IGxpc3RfZW50cnkoZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbGlzdC5wcmV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9wcml2YXRlLAorCQkJCSAgICAga25vZGVfZHJpdmVyLm5fbm9kZSk7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKIAkJZ2V0X2RldmljZShkZXYpOwogCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCAxZTJiZGE3Li5jNTFmMTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC0xOSw3ICsxOSwxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9kcml2ZXIpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKKworCWlmIChuKSB7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9kcml2ZXIobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC00Miw3ICs0OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmRydi0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9kcml2ZXIgOiBOVUxMKTsKKwkJCSAgICAgc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2RyaXZlciA6IE5VTEwpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oZGV2LCBkYXRhKTsKIAlrbGlzdF9pdGVyX2V4aXQoJmkpOwpAQCAtNzYsNyArODMsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZkcnYtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2RyaXZlciA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9kcml2ZXIgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpKQogCQlpZiAobWF0Y2goZGV2LCBkYXRhKSAmJiBnZXRfZGV2aWNlKGRldikpCiAJCQlicmVhazsKQEAgLTIxNiw2ICsyMjMsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKm90aGVyOwogCisJQlVHX09OKCFkcnYtPmJ1cy0+cCk7CisKIAlpZiAoKGRydi0+YnVzLT5wcm9iZSAmJiBkcnYtPnByb2JlKSB8fAogCSAgICAoZHJ2LT5idXMtPnJlbW92ZSAmJiBkcnYtPnJlbW92ZSkgfHwKIAkgICAgKGRydi0+YnVzLT5zaHV0ZG93biAmJiBkcnYtPnNodXRkb3duKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggNDQ2OTlkOS4uZDNhNTljNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAlmX2Rldi0+cGFyZW50ID0gZGV2aWNlOwogCWZfZGV2LT5jbGFzcyA9ICZmaXJtd2FyZV9jbGFzczsKIAlkZXZfc2V0X2RydmRhdGEoZl9kZXYsIGZ3X3ByaXYpOwotCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCAxKTsKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycihkZXZpY2UsICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJfQogCiAJaWYgKHVldmVudCkKLQkJZl9kZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCAwKTsKIAkqZGV2X3AgPSBmX2RldjsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCAzNDlhMTAxLi5kMjE5OGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjE3LDYgKzIxNyw3IEBACiAJaWYgKGQpIHsKIAkJbWVtY3B5KGQsIGRhdGEsIHNpemUpOwogCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CisJCXBkZXYtPnBsYXRmb3JtX2RhdGEgPSBkOwogCX0KIAlyZXR1cm4gZCA/IDAgOiAtRU5PTUVNOwogfQpAQCAtMjQ2LDYgKzI0NywyMSBAQAogCWVsc2UKIAkJZGV2X3NldF9uYW1lKCZwZGV2LT5kZXYsIHBkZXYtPm5hbWUpOwogCisJLyogV2Ugd2lsbCByZW1vdmUgcGxhdGZvcm1fZGF0YSBmaWVsZCBmcm9tIHN0cnVjdCBkZXZpY2UKKwkqIGlmIGFsbCBwbGF0Zm9ybSBkZXZpY2VzIHBhc3MgaXRzIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKwkqIGZyb20gcGxhdGZvcm1fZGV2aWNlLiBUaGUgY29udmVyc2lvbiBpcyBnb2luZyB0byBiZSBhCisJKiBsb25nIHRpbWUsIHNvIHdlIGFsbG93IHRoZSB0d28gY2FzZXMgY29leGlzdCB0byBtYWtlCisJKiB0aGlzIGtpbmQgb2YgZml4IG1vcmUgZWFzaWx5Ki8KKwlpZiAocGRldi0+cGxhdGZvcm1fZGF0YSAmJiBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IHVzZSB3aGljaCBwbGF0Zm9ybV9kYXRhP1xuIiwKKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJfSBlbHNlIGlmIChwZGV2LT5wbGF0Zm9ybV9kYXRhKSB7CisJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRldi0+cGxhdGZvcm1fZGF0YTsKKwl9IGVsc2UgaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXBkZXYtPnBsYXRmb3JtX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcCwgKnIgPSAmcGRldi0+cmVzb3VyY2VbaV07CiAKQEAgLTU4NCwxMCArNjAwLDI1IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0JYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9cGxhdGZvcm06JXMiLCBwZGV2LT5uYW1lKTsKKwlhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz0lcyVzIiwgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCwKKwkJKHBkZXYtPmlkX2VudHJ5KSA/IHBkZXYtPmlkX2VudHJ5LT5uYW1lIDogcGRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICpwbGF0Zm9ybV9tYXRjaF9pZCgKKwkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLAorCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl3aGlsZSAoaWQtPm5hbWVbMF0pIHsKKwkJaWYgKHN0cmNtcChwZGV2LT5uYW1lLCBpZC0+bmFtZSkgPT0gMCkgeworCQkJcGRldi0+aWRfZW50cnkgPSBpZDsKKwkJCXJldHVybiBpZDsKKwkJfQorCQlpZCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBwbGF0Zm9ybV9tYXRjaCAtIGJpbmQgcGxhdGZvcm0gZGV2aWNlIHRvIHBsYXRmb3JtIGRyaXZlci4KICAqIEBkZXY6IGRldmljZS4KQEAgLTYwMyw5ICs2MzQsMTQgQEAKICAqLwogc3RhdGljIGludCBwbGF0Zm9ybV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJLyogbWF0Y2ggYWdhaW5zdCB0aGUgaWQgdGFibGUgZmlyc3QgKi8KKwlpZiAocGRydi0+aWRfdGFibGUpCisJCXJldHVybiBwbGF0Zm9ybV9tYXRjaF9pZChwZHJ2LT5pZF90YWJsZSwgcGRldikgIT0gTlVMTDsKKworCS8qIGZhbGwtYmFjayB0byBkcml2ZXIgbmFtZSBtYXRjaCAqLwogCXJldHVybiAoc3RyY21wKHBkZXYtPm5hbWUsIGRydi0+bmFtZSkgPT0gMCk7CiB9CiAKQEAgLTYyMywyNiArNjU5LDI0IEBACiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zdXNwZW5kX2xhdGUpCi0JCXJldCA9IGRydi0+c3VzcGVuZF9sYXRlKHBkZXYsIG1lc2cpOworCWlmIChkZXYtPmRyaXZlciAmJiBwZHJ2LT5zdXNwZW5kX2xhdGUpCisJCXJldCA9IHBkcnYtPnN1c3BlbmRfbGF0ZShwZGV2LCBtZXNnKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZV9lYXJseShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnJlc3VtZV9lYXJseSkKLQkJcmV0ID0gZHJ2LT5yZXN1bWVfZWFybHkocGRldik7CisJaWYgKGRldi0+ZHJpdmVyICYmIHBkcnYtPnJlc3VtZV9lYXJseSkKKwkJcmV0ID0gcGRydi0+cmVzdW1lX2Vhcmx5KHBkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDJkMTRmNGEuLmUyNTUzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMTA3LDYgKzEwNyw1MCBAQAogfQogCiAvKioKKyAqCWRldmljZV9wbV9tb3ZlX2JlZm9yZSAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0CisgKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBiZWZvcmUKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwgc3RydWN0IGRldmljZSAqZGV2YikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyBiZWZvcmUgJXM6JXNcbiIsCisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2YS0+a29iaiksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2Yi0+a29iaikpOworCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGJlZm9yZSBkZXZiLiAqLworCWxpc3RfbW92ZV90YWlsKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKK30KKworLyoqCisgKglkZXZpY2VfcG1fbW92ZV9hZnRlciAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0CisgKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBhZnRlcgorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgYWZ0ZXIgJXM6JXNcbiIsCisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2YS0+a29iaiksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2Yi0+a29iaikpOworCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGFmdGVyIGRldmIuICovCisJbGlzdF9tb3ZlKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKK30KKworLyoqCisgKiAJZGV2aWNlX3BtX21vdmVfbGFzdCAtIG1vdmUgZGV2aWNlIHRvIGVuZCBvZiBkcG1fbGlzdAorICogCUBkZXY6ICAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyB0byBlbmQgb2YgbGlzdFxuIiwKKwkJIGRldi0+YnVzID8gZGV2LT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKKwkJIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CisJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7Cit9CisKKy8qKgogICoJcG1fb3AgLSBleGVjdXRlIHRoZSBQTSBvcGVyYXRpb24gYXBwcm9waWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQKICAqCUBkZXY6CURldmljZS4KICAqCUBvcHM6CVBNIG9wZXJhdGlvbnMgdG8gY2hvb3NlIGZyb20uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaCBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCmluZGV4IDQxZjUxZmEuLmM3Y2I0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCkBAIC0xOCwxMSArMTgsMTkgQEAKIAogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqKTsKIAogI2Vsc2UgLyogQ09ORklHX1BNX1NMRUVQICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwKKwkJCQkJIHN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2Yikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikge30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCBiNDI4YzhjLi5jYmQzNmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogCiBzdGF0aWMgc3NpemVfdAotc3lzZGV2X3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZmZlcikKK3N5c2Rldl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7CisJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKnN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnNob3cpCiAJCXJldHVybiBzeXNkZXZfYXR0ci0+c2hvdyhzeXNkZXYsIHN5c2Rldl9hdHRyLCBidWZmZXIpOwpAQCAtNDIsMTEgKzQyLDExIEBACiAKIAogc3RhdGljIHNzaXplX3QKLXN5c2Rldl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLAotCSAgICAgY29uc3QgY2hhciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KQorc3lzZGV2X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSB0b19zeXNkZXYoa29iaik7CisJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKnN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CiAKIAlpZiAoc3lzZGV2X2F0dHItPnN0b3JlKQogCQlyZXR1cm4gc3lzZGV2X2F0dHItPnN0b3JlKHN5c2Rldiwgc3lzZGV2X2F0dHIsIGJ1ZmZlciwgY291bnQpOwpAQCAtNjMsMTMgKzYzLDEzIEBACiB9OwogCiAKLWludCBzeXNkZXZfY3JlYXRlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKiBzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIGEpCitpbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSkKIHsKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2ZpbGUoJnMtPmtvYmosICZhLT5hdHRyKTsKIH0KIAogCi12b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqIHMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogYSkKK3ZvaWQgc3lzZGV2X3JlbW92ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSkKIHsKIAlzeXNmc19yZW1vdmVfZmlsZSgmcy0+a29iaiwgJmEtPmF0dHIpOwogfQpAQCAtODQsNyArODQsNyBAQAogc3RhdGljIHNzaXplX3Qgc3lzZGV2X2NsYXNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNoYXIgKmJ1ZmZlcikKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CiAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKIAogCWlmIChjbGFzc19hdHRyLT5zaG93KQpAQCAtOTUsOCArOTUsOCBAQAogc3RhdGljIHNzaXplX3Qgc3lzZGV2X2NsYXNzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCSAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOwotCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICogY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOworCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CiAKIAlpZiAoY2xhc3NfYXR0ci0+c3RvcmUpCiAJCXJldHVybiBjbGFzc19hdHRyLT5zdG9yZShjbGFzcywgYnVmZmVyLCBjb3VudCk7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBrc2V0ICpzeXN0ZW1fa3NldDsKIAotaW50IHN5c2Rldl9jbGFzc19yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzKQoraW50IHN5c2Rldl9jbGFzc19yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCiB7CiAJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLCBjbHMtPm5hbWUpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4ga3NldF9yZWdpc3RlcigmY2xzLT5rc2V0KTsKIH0KIAotdm9pZCBzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzKQordm9pZCBzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCiB7CiAJcHJfZGVidWcoIlVucmVnaXN0ZXJpbmcgc3lzZGV2IGNsYXNzICclcydcbiIsCiAJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CkBAIC0yMDMsOCArMjAzLDggQEAKICAqCUBjbHM6CUNsYXNzIGRyaXZlciBiZWxvbmdzIHRvLgogICoJQGRydjoJRHJpdmVyLgogICovCi12b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzLAotCQkJICAgICAgc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnYpCit2b2lkIHN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMsCisJCQkgICAgICBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2KQogewogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmRydi0+ZW50cnkpOwpAQCAtMjI5LDEwICsyMjksMTAgQEAKICAqCUBzeXNkZXY6CWRldmljZSBpbiBxdWVzdGlvbgogICoKICAqLwotaW50IHN5c2Rldl9yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKK2ludCBzeXNkZXZfcmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscyA9IHN5c2Rldi0+Y2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscyA9IHN5c2Rldi0+Y2xzOwogCiAJaWYgKCFjbHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJCQkJICAgICBzeXNkZXYtPmlkKTsKIAogCWlmICghZXJyb3IpIHsKLQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnY7CisJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAKIAkJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5cyBkZXZpY2UgJyVzJ1xuIiwKIAkJCSBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwpAQCAtMjc0LDkgKzI3NCw5IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi12b2lkIHN5c2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2KQordm9pZCBzeXNkZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogewotCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJnN5c2Rldi0+Y2xzLT5kcml2ZXJzLCBlbnRyeSkgewpAQCAtMzA1LDE5ICszMDUsMTkgQEAKICAqLwogdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAogCXByX2RlYnVnKCJTaHV0dGluZyBEb3duIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2OworCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJCXByX2RlYnVnKCJTaHV0dGluZyBkb3duIHR5cGUgJyVzJzpcbiIsCiAJCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKIAkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CiAKIAkJCS8qIENhbGwgYXV4aWxsYXJ5IGRyaXZlcnMgZmlyc3QgKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogICovCiBpbnQgc3lzZGV2X3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsICplcnJfZGV2OwogCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnYsICplcnJfZHJ2OwogCWludCByZXQ7CkBAIC00NDIsMTIgKzQ0MiwxMiBAQAogICovCiBpbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCiAJcHJfZGVidWcoIlJlc3VtaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCQlwcl9kZWJ1ZygiUmVzdW1pbmcgdHlwZSAnJXMnOlxuIiwKIAkJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYyBiL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCmluZGV4IGE3NzhmYjUuLmJmNmIxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCkBAIC0zMSw3ICszMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogCi0jZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpIAkJXAorI2RlZmluZSBkZWZpbmVfb25lX3JvX25hbWVkKF9uYW1lLCBfZnVuYykJCQkJXAorc3RhdGljIFNZU0RFVl9BVFRSKF9uYW1lLCAwNDQ0LCBfZnVuYywgTlVMTCkKKworI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJCQlcCiBzdGF0aWMgU1lTREVWX0FUVFIoX25hbWUsIDA0NDQsIHNob3dfIyNfbmFtZSwgTlVMTCkKIAogI2RlZmluZSBkZWZpbmVfaWRfc2hvd19mdW5jKG5hbWUpCQkJCVwKQEAgLTQyLDggKzQ1LDggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG9wb2xvZ3lfIyNuYW1lKGNwdSkpOwlcCiB9CiAKLSNpZiBkZWZpbmVkKHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncykgfHwgZGVmaW5lZCh0b3BvbG9neV9jb3JlX3NpYmxpbmdzKQotc3RhdGljIHNzaXplX3Qgc2hvd19jcHVtYXAoaW50IHR5cGUsIGNwdW1hc2tfdCAqbWFzaywgY2hhciAqYnVmKQorI2lmIGRlZmluZWQodG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2spIHx8IGRlZmluZWQodG9wb2xvZ3lfY29yZV9jcHVtYXNrKQorc3RhdGljIHNzaXplX3Qgc2hvd19jcHVtYXAoaW50IHR5cGUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBjaGFyICpidWYpCiB7CiAJcHRyZGlmZl90IGxlbiA9IFBUUl9BTElHTihidWYgKyBQQUdFX1NJWkUgLSAxLCBQQUdFX1NJWkUpIC0gYnVmOwogCWludCBuID0gMDsKQEAgLTY1LDcgKzY4LDcgQEAKIAkJCSAgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCi0JcmV0dXJuIHNob3dfY3B1bWFwKDAsICYodG9wb2xvZ3lfIyNuYW1lKGNwdSkpLCBidWYpOwkJXAorCXJldHVybiBzaG93X2NwdW1hcCgwLCB0b3BvbG9neV8jI25hbWUoY3B1KSwgYnVmKTsJCVwKIH0KIAogI2RlZmluZSBkZWZpbmVfc2libGluZ3Nfc2hvd19saXN0KG5hbWUpCQkJCQlcCkBAIC03NCw3ICs3Nyw3IEBACiAJCQkJICBjaGFyICpidWYpCQkJCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCi0JcmV0dXJuIHNob3dfY3B1bWFwKDEsICYodG9wb2xvZ3lfIyNuYW1lKGNwdSkpLCBidWYpOwkJXAorCXJldHVybiBzaG93X2NwdW1hcCgxLCB0b3BvbG9neV8jI25hbWUoY3B1KSwgYnVmKTsJCVwKIH0KIAogI2Vsc2UKQEAgLTgyLDkgKzg1LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQkJXAogCQkJICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsJCQkJCVwKLQljcHVtYXNrX3QgbWFzayA9IHRvcG9sb2d5XyMjbmFtZShjcHUpOwkJCQlcCi0JcmV0dXJuIHNob3dfY3B1bWFwKDAsICZtYXNrLCBidWYpOwkJCQlcCisJcmV0dXJuIHNob3dfY3B1bWFwKDAsIHRvcG9sb2d5XyMjbmFtZShkZXYtPmlkKSwgYnVmKTsJCVwKIH0KIAogI2RlZmluZSBkZWZpbmVfc2libGluZ3Nfc2hvd19saXN0KG5hbWUpCQkJCQlcCkBAIC05Miw5ICs5Myw3IEBACiAJCQkJICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAogCQkJCSAgY2hhciAqYnVmKQkJCQlcCiB7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAotCWNwdW1hc2tfdCBtYXNrID0gdG9wb2xvZ3lfIyNuYW1lKGNwdSk7CQkJCVwKLQlyZXR1cm4gc2hvd19jcHVtYXAoMSwgJm1hc2ssIGJ1Zik7CQkJCVwKKwlyZXR1cm4gc2hvd19jcHVtYXAoMSwgdG9wb2xvZ3lfIyNuYW1lKGRldi0+aWQpLCBidWYpOwkJXAogfQogI2VuZGlmCiAKQEAgLTEwNywxMyArMTA2LDEzIEBACiBkZWZpbmVfaWRfc2hvd19mdW5jKGNvcmVfaWQpOwogZGVmaW5lX29uZV9ybyhjb3JlX2lkKTsKIAotZGVmaW5lX3NpYmxpbmdzX3Nob3dfZnVuYyh0aHJlYWRfc2libGluZ3MpOwotZGVmaW5lX29uZV9ybyh0aHJlYWRfc2libGluZ3MpOwotZGVmaW5lX29uZV9ybyh0aHJlYWRfc2libGluZ3NfbGlzdCk7CitkZWZpbmVfc2libGluZ3Nfc2hvd19mdW5jKHRocmVhZF9jcHVtYXNrKTsKK2RlZmluZV9vbmVfcm9fbmFtZWQodGhyZWFkX3NpYmxpbmdzLCBzaG93X3RocmVhZF9jcHVtYXNrKTsKK2RlZmluZV9vbmVfcm9fbmFtZWQodGhyZWFkX3NpYmxpbmdzX2xpc3QsIHNob3dfdGhyZWFkX2NwdW1hc2tfbGlzdCk7CiAKLWRlZmluZV9zaWJsaW5nc19zaG93X2Z1bmMoY29yZV9zaWJsaW5ncyk7Ci1kZWZpbmVfb25lX3JvKGNvcmVfc2libGluZ3MpOwotZGVmaW5lX29uZV9ybyhjb3JlX3NpYmxpbmdzX2xpc3QpOworZGVmaW5lX3NpYmxpbmdzX3Nob3dfZnVuYyhjb3JlX2NwdW1hc2spOworZGVmaW5lX29uZV9yb19uYW1lZChjb3JlX3NpYmxpbmdzLCBzaG93X2NvcmVfY3B1bWFzayk7CitkZWZpbmVfb25lX3JvX25hbWVkKGNvcmVfc2libGluZ3NfbGlzdCwgc2hvd19jb3JlX2NwdW1hc2tfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJmF0dHJfcGh5c2ljYWxfcGFja2FnZV9pZC5hdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDAzNDRhOGEuLmU3YjhhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ1LDYgKzQ1LDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCitjb25maWcgQkxLX0RFVl9TV0lNCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweSIKKwlkZXBlbmRzIG9uIE02OEsgJiYgTUFDCisJaGVscAorCSAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnQKKwkgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy4KKwogY29uZmlnIEFNSUdBX1oyUkFNCiAJdHJpc3RhdGUgIkFtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFpPUlJPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQppbmRleCAyMDQzMzJiLi4zMTQ1MTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKQEAgLTYsOSArNiwxMSBAQAogIyAKIAogb2JqLSQoQ09ORklHX01BQ19GTE9QUFkpCSs9IHN3aW0zLm8KK29iai0kKENPTkZJR19CTEtfREVWX1NXSU0pCSs9IHN3aW1fbW9kLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0ZEKQkrPSBmbG9wcHkubwogb2JqLSQoQ09ORklHX0FNSUdBX0ZMT1BQWSkJKz0gYW1pZmxvcC5vCiBvYmotJChDT05GSUdfUFMzX0RJU0spCQkrPSBwczNkaXNrLm8KK29iai0kKENPTkZJR19QUzNfVlJBTSkJCSs9IHBzM3ZyYW0ubwogb2JqLSQoQ09ORklHX0FUQVJJX0ZMT1BQWSkJKz0gYXRhZmxvcC5vCiBvYmotJChDT05GSUdfQU1JR0FfWjJSQU0pCSs9IHoycmFtLm8KIG9iai0kKENPTkZJR19CTEtfREVWX1JBTSkJKz0gYnJkLm8KQEAgLTMyLDMgKzM0LDUgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX0hEKQkrPSBoZC5vCiAKIG9iai0kKENPTkZJR19YRU5fQkxLREVWX0ZST05URU5EKQkrPSB4ZW4tYmxrZnJvbnQubworCitzd2ltX21vZC1vYmpzCTo9IHN3aW0ubyBzd2ltX2FzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCmluZGV4IGM2MDk5YmEuLmNlMGQ2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhb2VfcHQgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFvZV9wdCBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BT0UpLAogCS5mdW5jID0gYW9lbmV0X3JjdiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggNGY5YjZkNy4uNWQwZTEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMzg5OCw2ICszODk4LDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGNjaXNzX2luaXQodm9pZCkKIHsKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSByZXF1aXJlcyB0aGF0IGNvbW1hbmRzIGFyZSBhbGlnbmVkIG9uIGEgNjQtYml0CisJICogYm91bmRhcnkuIEdpdmVuIHRoYXQgd2UgdXNlIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgdG8gYWxsb2NhdGUgYW4KKwkgKiBhcnJheSBvZiB0aGVtLCB0aGUgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcy4KKwkgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCkgJSA4KTsKKwogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlxuIik7CiAKIAkvKiBSZWdpc3RlciBmb3Igb3VyIFBDSSBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggNWQzOWRmMS4uY2EyNjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtNjE3LDYgKzYxNyw3IEBACiAJaW50IGk7CiAKIAljLT5wY2lfZGV2ID0gcGRldjsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIEVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggODNkOGVkMy4uYzJjOTVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MTM1LDEwICs0MTM1LDkgQEAKIHN0YXRpYyBzc2l6ZV90IGZsb3BweV9jbW9zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IGRyaXZlOwogCi0JcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsZGV2KTsKIAlkcml2ZSA9IHAtPmlkOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVYXG4iLCBVRFAtPmNtb3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCBiZjAzNDU1Li4yNjIxZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNDc0LDEwICs0NzQsMzUgQEAKIAlpbnQgcmV0OwogCiAJcG9zID0gKChsb2ZmX3QpIGJpby0+Ymlfc2VjdG9yIDw8IDkpICsgbG8tPmxvX29mZnNldDsKLQlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpCisKKwlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpIHsKKwkJaW50IGJhcnJpZXIgPSBiaW9fYmFycmllcihiaW8pOworCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLT5sb19iYWNraW5nX2ZpbGU7CisKKwkJaWYgKGJhcnJpZXIpIHsKKwkJCWlmICh1bmxpa2VseSghZmlsZS0+Zl9vcC0+ZnN5bmMpKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IHZmc19mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCiAJCXJldCA9IGxvX3NlbmQobG8sIGJpbywgcG9zKTsKLQllbHNlCisKKwkJaWYgKGJhcnJpZXIgJiYgIXJldCkgeworCQkJcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJcmV0ID0gLUVJTzsKKwkJfQorCX0gZWxzZQogCQlyZXQgPSBsb19yZWNlaXZlKGxvLCBiaW8sIGxvLT5sb19ibG9ja3NpemUsIHBvcyk7CisKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MjYsNiArODUxLDkgQEAKIAlsby0+bG9fcXVldWUtPnF1ZXVlZGF0YSA9IGxvOwogCWxvLT5sb19xdWV1ZS0+dW5wbHVnX2ZuID0gbG9vcF91bnBsdWc7CiAKKwlpZiAoIShsb19mbGFncyAmIExPX0ZMQUdTX1JFQURfT05MWSkgJiYgZmlsZS0+Zl9vcC0+ZnN5bmMpCisJCWJsa19xdWV1ZV9vcmRlcmVkKGxvLT5sb19xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CisKIAlzZXRfY2FwYWNpdHkobG8tPmxvX2Rpc2ssIHNpemUpOwogCWJkX3NldF9zaXplKGJkZXYsIHNpemUgPDwgOSk7CiAKQEAgLTk0MSwxMSArOTY5LDE4IEBACiAJCWJkX3NldF9zaXplKGJkZXYsIDApOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtPmZfbWFwcGluZywgZ2ZwKTsKIAlsby0+bG9fc3RhdGUgPSBMb191bmJvdW5kOwotCWZwdXQoZmlscCk7CiAJLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAlpZiAobWF4X3BhcnQgPiAwKQogCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CisJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwkvKgorCSAqIE5lZWQgbm90IGhvbGQgbG9fY3RsX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLgorCSAqIENhbGxpbmcgZnB1dCBob2xkaW5nIGxvX2N0bF9tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyCisJICogbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMgZnB1dCBjYW4gdGFrZQorCSAqIGJkX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX2N0bF9tdXRleC4KKwkgKi8KKwlmcHV0KGZpbHApOwogCXJldHVybiAwOwogfQogCkBAIC0xMTYzLDcgKzExOTgsNyBAQAogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZsby0+bG9fY3RsX211dGV4LCAxKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTE9PUF9TRVRfRkQ6CiAJCWVyciA9IGxvb3Bfc2V0X2ZkKGxvLCBtb2RlLCBiZGV2LCBhcmcpOwpAQCAtMTE3Miw3ICsxMjA3LDEwIEBACiAJCWVyciA9IGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpOwogCQlicmVhazsKIAljYXNlIExPT1BfQ0xSX0ZEOgorCQkvKiBsb29wX2Nscl9mZCB3b3VsZCBoYXZlIHVubG9ja2VkIGxvX2N0bF9tdXRleCBvbiBzdWNjZXNzICovCiAJCWVyciA9IGxvb3BfY2xyX2ZkKGxvLCBiZGV2KTsKKwkJaWYgKCFlcnIpCisJCQlnb3RvIG91dF91bmxvY2tlZDsKIAkJYnJlYWs7CiAJY2FzZSBMT09QX1NFVF9TVEFUVVM6CiAJCWVyciA9IGxvb3Bfc2V0X3N0YXR1c19vbGQobG8sIChzdHJ1Y3QgbG9vcF9pbmZvIF9fdXNlciAqKSBhcmcpOwpAQCAtMTE5MCw2ICsxMjI4LDggQEAKIAkJZXJyID0gbG8tPmlvY3RsID8gbG8tPmlvY3RsKGxvLCBjbWQsIGFyZykgOiAtRUlOVkFMOwogCX0KIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCitvdXRfdW5sb2NrZWQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczN2cmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTNlZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKQEAgLTAsMCArMSw4NjUgQEAKKy8qCisgKiBwczN2cmFtIC0gVXNlIGV4dHJhIFBTMyB2aWRlbyByYW0gYXMgTVREIGJsb2NrIGRldmljZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTb255IENvcnBvcmF0aW9uCisgKgorICogQmFzZWQgb24gdGhlIE1URCBwczN2cmFtIGRyaXZlciwgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICogQWRkZWQgc3VwcG9ydCBSU1ggRE1BIFZpdmllbiBDaGFwcGVsaWVyIDx2aXZpZW4uY2hhcHBlbGllckBmcmVlLmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KKyNpbmNsdWRlIDxhc20vcHMzLmg+CisKKworI2RlZmluZSBERVZJQ0VfTkFNRQkJInBzM3ZyYW0iCisKKworI2RlZmluZSBYRFJfQlVGX1NJWkUgKDIgKiAxMDI0ICogMTAyNCkgLyogWERSIGJ1ZmZlciAobXVzdCBiZSAxTWlCIGFsaWduZWQpICovCisjZGVmaW5lIFhEUl9JT0lGIDB4MGMwMDAwMDAKKworI2RlZmluZSBGSUZPX0JBU0UgWERSX0lPSUYKKyNkZWZpbmUgRklGT19TSVpFICg2NCAqIDEwMjQpCisKKyNkZWZpbmUgRE1BX1BBR0VfU0laRSAoNCAqIDEwMjQpCisKKyNkZWZpbmUgQ0FDSEVfUEFHRV9TSVpFICgyNTYgKiAxMDI0KQorI2RlZmluZSBDQUNIRV9QQUdFX0NPVU5UICgoWERSX0JVRl9TSVpFIC0gRklGT19TSVpFKSAvIENBQ0hFX1BBR0VfU0laRSkKKworI2RlZmluZSBDQUNIRV9PRkZTRVQgQ0FDSEVfUEFHRV9TSVpFCisjZGVmaW5lIEZJRk9fT0ZGU0VUIDAKKworI2RlZmluZSBDVFJMX1BVVCAweDEwCisjZGVmaW5lIENUUkxfR0VUIDB4MTEKKyNkZWZpbmUgQ1RSTF9UT1AgMHgxNQorCisjZGVmaW5lIFVQTE9BRF9TVUJDSAkxCisjZGVmaW5lIERPV05MT0FEX1NVQkNICTIKKworI2RlZmluZSBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9PRkZTRVRfSU4JMHgwMDAwMDMwYworI2RlZmluZSBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9OT1RJRlkJMHgwMDAwMDEwNAorCisjZGVmaW5lIEwxR1BVX0NPTlRFWFRfQVRUUklCVVRFX0ZCX0JMSVQgMHg2MDEKKworI2RlZmluZSBDQUNIRV9QQUdFX1BSRVNFTlQgMQorI2RlZmluZSBDQUNIRV9QQUdFX0RJUlRZICAgMgorCitzdHJ1Y3QgcHMzdnJhbV90YWcgeworCXVuc2lnbmVkIGludCBhZGRyZXNzOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKK3N0cnVjdCBwczN2cmFtX2NhY2hlIHsKKwl1bnNpZ25lZCBpbnQgcGFnZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgcGFnZV9zaXplOworCXN0cnVjdCBwczN2cmFtX3RhZyAqdGFnczsKKwl1bnNpZ25lZCBpbnQgaGl0OworCXVuc2lnbmVkIGludCBtaXNzOworfTsKKworc3RydWN0IHBzM3ZyYW1fcHJpdiB7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBnZW5kaXNrICpnZW5kaXNrOworCisJdTY0IHNpemU7CisKKwl1NjQgbWVtb3J5X2hhbmRsZTsKKwl1NjQgY29udGV4dF9oYW5kbGU7CisJdTMyICpjdHJsOworCXUzMiAqcmVwb3J0czsKKwl1OCBfX2lvbWVtICpkZHJfYmFzZTsKKwl1OCAqeGRyX2J1ZjsKKworCXUzMiAqZmlmb19iYXNlOworCXUzMiAqZmlmb19wdHI7CisKKwlzdHJ1Y3QgcHMzdnJhbV9jYWNoZSBjYWNoZTsKKworCS8qIFVzZWQgdG8gc2VyaWFsaXplIGNhY2hlL0RNQSBvcGVyYXRpb25zICovCisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCisKK3N0YXRpYyBpbnQgcHMzdnJhbV9tYWpvcjsKKworCitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBzM3ZyYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisKKyNkZWZpbmUgRE1BX05PVElGSUVSX0hBTkRMRV9CQVNFIDB4NjY2MDQyMDAgLyogZmlyc3QgRE1BIG5vdGlmaWVyIGhhbmRsZSAqLworI2RlZmluZSBETUFfTk9USUZJRVJfT0ZGU0VUX0JBU0UgMHgxMDAwICAgICAvKiBmaXJzdCBETUEgbm90aWZpZXIgb2Zmc2V0ICovCisjZGVmaW5lIERNQV9OT1RJRklFUl9TSVpFICAgICAgICAweDQwCisjZGVmaW5lIE5PVElGSUVSIDcJLyogbm90aWZpZXIgdXNlZCBmb3IgY29tcGxldGlvbiByZXBvcnQgKi8KKworc3RhdGljIGNoYXIgKnNpemUgPSAiMjU2TSI7Cittb2R1bGVfcGFyYW0oc2l6ZSwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhzaXplLCAibWVtb3J5IHNpemUiKTsKKworc3RhdGljIHUzMiAqcHMzdnJhbV9nZXRfbm90aWZpZXIodTMyICpyZXBvcnRzLCBpbnQgbm90aWZpZXIpCit7CisJcmV0dXJuICh2b2lkICopcmVwb3J0cyArIERNQV9OT1RJRklFUl9PRkZTRVRfQkFTRSArCisJICAgICAgIERNQV9OT1RJRklFUl9TSVpFICogbm90aWZpZXI7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1fbm90aWZpZXJfcmVzZXQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisJdTMyICpub3RpZnkgPSBwczN2cmFtX2dldF9ub3RpZmllcihwcml2LT5yZXBvcnRzLCBOT1RJRklFUik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlub3RpZnlbaV0gPSAweGZmZmZmZmZmOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fbm90aWZpZXJfd2FpdChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYsCisJCQkJIHVuc2lnbmVkIGludCB0aW1lb3V0X21zKQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisJdTMyICpub3RpZnkgPSBwczN2cmFtX2dldF9ub3RpZmllcihwcml2LT5yZXBvcnRzLCBOT1RJRklFUik7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7CisKKwlkbyB7CisJCWlmICghbm90aWZ5WzNdKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgxKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIHZvaWQgcHMzdnJhbV9pbml0X3Jpbmcoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwlwcml2LT5jdHJsW0NUUkxfUFVUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUOworCXByaXYtPmN0cmxbQ1RSTF9HRVRdID0gRklGT19CQVNFICsgRklGT19PRkZTRVQ7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV93YWl0X3Jpbmcoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAorCQkJICAgICB1bnNpZ25lZCBpbnQgdGltZW91dF9tcykKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOworCisJZG8geworCQlpZiAocHJpdi0+Y3RybFtDVFJMX1BVVF0gPT0gcHJpdi0+Y3RybFtDVFJMX0dFVF0pCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWRldl93YXJuKCZkZXYtPmNvcmUsICJGSUZPIHRpbWVvdXQgKCUwOHgvJTA4eC8lMDh4KVxuIiwKKwkJIHByaXYtPmN0cmxbQ1RSTF9QVVRdLCBwcml2LT5jdHJsW0NUUkxfR0VUXSwKKwkJIHByaXYtPmN0cmxbQ1RSTF9UT1BdKTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX291dF9yaW5nKHN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYsIHUzMiBkYXRhKQoreworCSoocHJpdi0+Zmlmb19wdHIpKysgPSBkYXRhOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX2JlZ2luX3Jpbmcoc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiwgdTMyIGNoYW4sIHUzMiB0YWcsCisJCQkgICAgICAgdTMyIHNpemUpCit7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAoc2l6ZSA8PCAxOCkgfCAoY2hhbiA8PCAxMykgfCB0YWcpOworfQorCitzdGF0aWMgdm9pZCBwczN2cmFtX3Jld2luZF9yaW5nKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCWludCBzdGF0dXM7CisKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4MjAwMDAwMDAgfCAoRklGT19CQVNFICsgRklGT19PRkZTRVQpKTsKKworCXByaXYtPmN0cmxbQ1RSTF9QVVRdID0gRklGT19CQVNFICsgRklGT19PRkZTRVQ7CisKKwkvKiBhc2tpbmcgdGhlIEhWIGZvciBhIGJsaXQgd2lsbCBraWNrIHRoZSBGSUZPICovCisJc3RhdHVzID0gbHYxX2dwdV9jb250ZXh0X2F0dHJpYnV0ZShwcml2LT5jb250ZXh0X2hhbmRsZSwKKwkJCQkJICAgTDFHUFVfQ09OVEVYVF9BVFRSSUJVVEVfRkJfQkxJVCwgMCwKKwkJCQkJICAgMCwgMCwgMCk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmZGV2LT5jb3JlLAorCQkJIiVzOiBsdjFfZ3B1X2NvbnRleHRfYXR0cmlidXRlIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sCisJCQlzdGF0dXMpOworCisJcHJpdi0+Zmlmb19wdHIgPSBwcml2LT5maWZvX2Jhc2U7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1fZmlyZV9yaW5nKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCWludCBzdGF0dXM7CisKKwltdXRleF9sb2NrKCZwczNfZ3B1X211dGV4KTsKKworCXByaXYtPmN0cmxbQ1RSTF9QVVRdID0gRklGT19CQVNFICsgRklGT19PRkZTRVQgKworCQkJICAgICAgIChwcml2LT5maWZvX3B0ciAtIHByaXYtPmZpZm9fYmFzZSkgKiBzaXplb2YodTMyKTsKKworCS8qIGFza2luZyB0aGUgSFYgZm9yIGEgYmxpdCB3aWxsIGtpY2sgdGhlIEZJRk8gKi8KKwlzdGF0dXMgPSBsdjFfZ3B1X2NvbnRleHRfYXR0cmlidXRlKHByaXYtPmNvbnRleHRfaGFuZGxlLAorCQkJCQkgICBMMUdQVV9DT05URVhUX0FUVFJJQlVURV9GQl9CTElULCAwLAorCQkJCQkgICAwLCAwLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZkZXYtPmNvcmUsCisJCQkiJXM6IGx2MV9ncHVfY29udGV4dF9hdHRyaWJ1dGUgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywKKwkJCXN0YXR1cyk7CisKKwlpZiAoKHByaXYtPmZpZm9fcHRyIC0gcHJpdi0+Zmlmb19iYXNlKSAqIHNpemVvZih1MzIpID4KKwkgICAgRklGT19TSVpFIC0gMTAyNCkgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICJGSUZPIGZ1bGwsIHJld2luZGluZ1xuIik7CisJCXBzM3ZyYW1fd2FpdF9yaW5nKGRldiwgMjAwKTsKKwkJcHMzdnJhbV9yZXdpbmRfcmluZyhkZXYpOworCX0KKworCW11dGV4X3VubG9jaygmcHMzX2dwdV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1fYmluZChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsIDAsIDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHgzMTMzNzMwMyk7CisJcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwgMHgxODAsIDMpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgRE1BX05PVElGSUVSX0hBTkRMRV9CQVNFICsgTk9USUZJRVIpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHhmZWVkMDAwMSk7CS8qIERNQSBzeXN0ZW0gUkFNIGluc3RhbmNlICovCisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweGZlZWQwMDAwKTsgICAgIC8qIERNQSB2aWRlbyBSQU0gaW5zdGFuY2UgKi8KKworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwgMCwgMSk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweDMxMzdjMGRlKTsKKwlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsIDB4MTgwLCAzKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIERNQV9OT1RJRklFUl9IQU5ETEVfQkFTRSArIE5PVElGSUVSKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4ZmVlZDAwMDApOwkvKiBETUEgdmlkZW8gUkFNIGluc3RhbmNlICovCisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweGZlZWQwMDAxKTsJLyogRE1BIHN5c3RlbSBSQU0gaW5zdGFuY2UgKi8KKworCXBzM3ZyYW1fZmlyZV9yaW5nKGRldik7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV91cGxvYWQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAorCQkJICB1bnNpZ25lZCBpbnQgc3JjX29mZnNldCwgdW5zaWduZWQgaW50IGRzdF9vZmZzZXQsCisJCQkgIGludCBsZW4sIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCisJcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwKKwkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX09GRlNFVF9JTiwgOCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBYRFJfSU9JRiArIHNyY19vZmZzZXQpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgZHN0X29mZnNldCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBjb3VudCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAoMSA8PCA4KSB8IDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7CisKKwlwczN2cmFtX25vdGlmaWVyX3Jlc2V0KGRldik7CisJcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwKKwkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX05PVElGWSwgMSk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKKwlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgVVBMT0FEX1NVQkNILCAweDEwMCwgMSk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKKwlwczN2cmFtX2ZpcmVfcmluZyhkZXYpOworCWlmIChwczN2cmFtX25vdGlmaWVyX3dhaXQoZGV2LCAyMDApIDwgMCkgeworCQlkZXZfd2FybigmZGV2LT5jb3JlLCAiJXM6IE5vdGlmaWVyIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fZG93bmxvYWQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAorCQkJICAgIHVuc2lnbmVkIGludCBzcmNfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgZHN0X29mZnNldCwKKwkJCSAgICBpbnQgbGVuLCBpbnQgY291bnQpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwKKwkJCSAgIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX09GRlNFVF9JTiwgOCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBzcmNfb2Zmc2V0KTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIFhEUl9JT0lGICsgZHN0X29mZnNldCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCBjb3VudCk7CisJcHMzdnJhbV9vdXRfcmluZyhwcml2LCAoMSA8PCA4KSB8IDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7CisKKwlwczN2cmFtX25vdGlmaWVyX3Jlc2V0KGRldik7CisJcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIERPV05MT0FEX1NVQkNILAorCQkJICAgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfTk9USUZZLCAxKTsKKwlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOworCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwgMHgxMDAsIDEpOworCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7CisJcHMzdnJhbV9maXJlX3JpbmcoZGV2KTsKKwlpZiAocHMzdnJhbV9ub3RpZmllcl93YWl0KGRldiwgMjAwKSA8IDApIHsKKwkJZGV2X3dhcm4oJmRldi0+Y29yZSwgIiVzOiBOb3RpZmllciB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9ldmljdChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYsIGludCBlbnRyeSkKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKKworCWlmICghKGNhY2hlLT50YWdzW2VudHJ5XS5mbGFncyAmIENBQ0hFX1BBR0VfRElSVFkpKQorCQlyZXR1cm47CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICJGbHVzaGluZyAlZDogMHglMDh4XG4iLCBlbnRyeSwKKwkJY2FjaGUtPnRhZ3NbZW50cnldLmFkZHJlc3MpOworCWlmIChwczN2cmFtX3VwbG9hZChkZXYsIENBQ0hFX09GRlNFVCArIGVudHJ5ICogY2FjaGUtPnBhZ2Vfc2l6ZSwKKwkJCSAgIGNhY2hlLT50YWdzW2VudHJ5XS5hZGRyZXNzLCBETUFfUEFHRV9TSVpFLAorCQkJICAgY2FjaGUtPnBhZ2Vfc2l6ZSAvIERNQV9QQUdFX1NJWkUpIDwgMCkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsCisJCQkiRmFpbGVkIHRvIHVwbG9hZCBmcm9tIDB4JXggdG8gIiAiMHgleCBzaXplIDB4JXhcbiIsCisJCQllbnRyeSAqIGNhY2hlLT5wYWdlX3NpemUsIGNhY2hlLT50YWdzW2VudHJ5XS5hZGRyZXNzLAorCQkJY2FjaGUtPnBhZ2Vfc2l6ZSk7CisJfQorCWNhY2hlLT50YWdzW2VudHJ5XS5mbGFncyAmPSB+Q0FDSEVfUEFHRV9ESVJUWTsKK30KKworc3RhdGljIHZvaWQgcHMzdnJhbV9jYWNoZV9sb2FkKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiwgaW50IGVudHJ5LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBhZGRyZXNzKQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisJc3RydWN0IHBzM3ZyYW1fY2FjaGUgKmNhY2hlID0gJnByaXYtPmNhY2hlOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiRmV0Y2hpbmcgJWQ6IDB4JTA4eFxuIiwgZW50cnksIGFkZHJlc3MpOworCWlmIChwczN2cmFtX2Rvd25sb2FkKGRldiwgYWRkcmVzcywKKwkJCSAgICAgQ0FDSEVfT0ZGU0VUICsgZW50cnkgKiBjYWNoZS0+cGFnZV9zaXplLAorCQkJICAgICBETUFfUEFHRV9TSVpFLAorCQkJICAgICBjYWNoZS0+cGFnZV9zaXplIC8gRE1BX1BBR0VfU0laRSkgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwKKwkJCSJGYWlsZWQgdG8gZG93bmxvYWQgZnJvbSAweCV4IHRvIDB4JXggc2l6ZSAweCV4XG4iLAorCQkJYWRkcmVzcywgZW50cnkgKiBjYWNoZS0+cGFnZV9zaXplLCBjYWNoZS0+cGFnZV9zaXplKTsKKwl9CisKKwljYWNoZS0+dGFnc1tlbnRyeV0uYWRkcmVzcyA9IGFkZHJlc3M7CisJY2FjaGUtPnRhZ3NbZW50cnldLmZsYWdzIHw9IENBQ0hFX1BBR0VfUFJFU0VOVDsKK30KKworCitzdGF0aWMgdm9pZCBwczN2cmFtX2NhY2hlX2ZsdXNoKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKKwlpbnQgaTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIkZMVVNIXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2FjaGUtPnBhZ2VfY291bnQ7IGkrKykgeworCQlwczN2cmFtX2NhY2hlX2V2aWN0KGRldiwgaSk7CisJCWNhY2hlLT50YWdzW2ldLmZsYWdzID0gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHMzdnJhbV9jYWNoZV9tYXRjaChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYsCisJCQkJCWxvZmZfdCBhZGRyZXNzKQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisJc3RydWN0IHBzM3ZyYW1fY2FjaGUgKmNhY2hlID0gJnByaXYtPmNhY2hlOworCXVuc2lnbmVkIGludCBiYXNlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJaW50IGk7CisJc3RhdGljIGludCBjb3VudGVyOworCisJb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgKGFkZHJlc3MgJiAoY2FjaGUtPnBhZ2Vfc2l6ZSAtIDEpKTsKKwliYXNlID0gKHVuc2lnbmVkIGludCkgKGFkZHJlc3MgLSBvZmZzZXQpOworCisJLyogZnVsbHkgYXNzb2NpYXRpdmUgY2hlY2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2FjaGUtPnBhZ2VfY291bnQ7IGkrKykgeworCQlpZiAoKGNhY2hlLT50YWdzW2ldLmZsYWdzICYgQ0FDSEVfUEFHRV9QUkVTRU5UKSAmJgorCQkgICAgY2FjaGUtPnRhZ3NbaV0uYWRkcmVzcyA9PSBiYXNlKSB7CisJCQljYWNoZS0+aGl0Kys7CisJCQlkZXZfZGJnKCZkZXYtPmNvcmUsICJGb3VuZCBlbnRyeSAlZDogMHglMDh4XG4iLCBpLAorCQkJCWNhY2hlLT50YWdzW2ldLmFkZHJlc3MpOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwkvKiBjaG9vc2UgYSByYW5kb20gZW50cnkgKi8KKwlpID0gKGppZmZpZXMgKyAoY291bnRlcisrKSkgJSBjYWNoZS0+cGFnZV9jb3VudDsKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICJVc2luZyBlbnRyeSAlZFxuIiwgaSk7CisKKwlwczN2cmFtX2NhY2hlX2V2aWN0KGRldiwgaSk7CisJcHMzdnJhbV9jYWNoZV9sb2FkKGRldiwgaSwgYmFzZSk7CisKKwljYWNoZS0+bWlzcysrOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IHBzM3ZyYW1fY2FjaGVfaW5pdChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKworCXByaXYtPmNhY2hlLnBhZ2VfY291bnQgPSBDQUNIRV9QQUdFX0NPVU5UOworCXByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSA9IENBQ0hFX1BBR0VfU0laRTsKKwlwcml2LT5jYWNoZS50YWdzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzM3ZyYW1fdGFnKSAqCisJCQkJICAgQ0FDSEVfUEFHRV9DT1VOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYtPmNhY2hlLnRhZ3MgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJDb3VsZCBub3QgYWxsb2NhdGUgY2FjaGUgdGFnc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldl9pbmZvKCZkZXYtPmNvcmUsICJDcmVhdGVkIHJhbSBjYWNoZTogJWQgZW50cmllcywgJWQgS2lCIGVhY2hcbiIsCisJCUNBQ0hFX1BBR0VfQ09VTlQsIENBQ0hFX1BBR0VfU0laRSAvIDEwMjQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBzM3ZyYW1fY2FjaGVfY2xlYW51cChzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IGRldi0+Y29yZS5kcml2ZXJfZGF0YTsKKworCXBzM3ZyYW1fY2FjaGVfZmx1c2goZGV2KTsKKwlrZnJlZShwcml2LT5jYWNoZS50YWdzKTsKK30KKworc3RhdGljIGludCBwczN2cmFtX3JlYWQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LCBsb2ZmX3QgZnJvbSwKKwkJCXNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBjYWNoZWQsIGNvdW50OworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6IGZyb209MHglMDh4IGxlbj0weCV6eFxuIiwgX19mdW5jX18sCisJCSh1bnNpZ25lZCBpbnQpZnJvbSwgbGVuKTsKKworCWlmIChmcm9tID49IHByaXYtPnNpemUpCisJCXJldHVybiAtRUlPOworCisJaWYgKGxlbiA+IHByaXYtPnNpemUgLSBmcm9tKQorCQlsZW4gPSBwcml2LT5zaXplIC0gZnJvbTsKKworCS8qIENvcHkgZnJvbSB2cmFtIHRvIGJ1ZiAqLworCWNvdW50ID0gbGVuOworCXdoaWxlIChjb3VudCkgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBhdmFpbDsKKwkJdW5zaWduZWQgaW50IGVudHJ5OworCisJCW9mZnNldCA9ICh1bnNpZ25lZCBpbnQpIChmcm9tICYgKHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIDEpKTsKKwkJYXZhaWwgID0gcHJpdi0+Y2FjaGUucGFnZV9zaXplIC0gb2Zmc2V0OworCisJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCisJCWVudHJ5ID0gcHMzdnJhbV9jYWNoZV9tYXRjaChkZXYsIGZyb20pOworCQljYWNoZWQgPSBDQUNIRV9PRkZTRVQgKyBlbnRyeSAqIHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSArIG9mZnNldDsKKworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczogZnJvbT0lMDh4IGNhY2hlZD0lMDh4IG9mZnNldD0lMDh4ICIKKwkJCSJhdmFpbD0lMDh4IGNvdW50PSUwOHhcbiIsIF9fZnVuY19fLAorCQkJKHVuc2lnbmVkIGludClmcm9tLCBjYWNoZWQsIG9mZnNldCwgYXZhaWwsIGNvdW50KTsKKworCQlpZiAoYXZhaWwgPiBjb3VudCkKKwkJCWF2YWlsID0gY291bnQ7CisJCW1lbWNweShidWYsIHByaXYtPnhkcl9idWYgKyBjYWNoZWQsIGF2YWlsKTsKKworCQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJCWJ1ZiArPSBhdmFpbDsKKwkJY291bnQgLT0gYXZhaWw7CisJCWZyb20gKz0gYXZhaWw7CisJfQorCisJKnJldGxlbiA9IGxlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwczN2cmFtX3dyaXRlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiwgbG9mZl90IHRvLAorCQkJIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gZGV2LT5jb3JlLmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBjYWNoZWQsIGNvdW50OworCisJaWYgKHRvID49IHByaXYtPnNpemUpCisJCXJldHVybiAtRUlPOworCisJaWYgKGxlbiA+IHByaXYtPnNpemUgLSB0bykKKwkJbGVuID0gcHJpdi0+c2l6ZSAtIHRvOworCisJLyogQ29weSBmcm9tIGJ1ZiB0byB2cmFtICovCisJY291bnQgPSBsZW47CisJd2hpbGUgKGNvdW50KSB7CisJCXVuc2lnbmVkIGludCBvZmZzZXQsIGF2YWlsOworCQl1bnNpZ25lZCBpbnQgZW50cnk7CisKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgKHRvICYgKHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIDEpKTsKKwkJYXZhaWwgID0gcHJpdi0+Y2FjaGUucGFnZV9zaXplIC0gb2Zmc2V0OworCisJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCisJCWVudHJ5ID0gcHMzdnJhbV9jYWNoZV9tYXRjaChkZXYsIHRvKTsKKwkJY2FjaGVkID0gQ0FDSEVfT0ZGU0VUICsgZW50cnkgKiBwcml2LT5jYWNoZS5wYWdlX3NpemUgKyBvZmZzZXQ7CisKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6IHRvPSUwOHggY2FjaGVkPSUwOHggb2Zmc2V0PSUwOHggIgorCQkJImF2YWlsPSUwOHggY291bnQ9JTA4eFxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpdG8sCisJCQljYWNoZWQsIG9mZnNldCwgYXZhaWwsIGNvdW50KTsKKworCQlpZiAoYXZhaWwgPiBjb3VudCkKKwkJCWF2YWlsID0gY291bnQ7CisJCW1lbWNweShwcml2LT54ZHJfYnVmICsgY2FjaGVkLCBidWYsIGF2YWlsKTsKKworCQlwcml2LT5jYWNoZS50YWdzW2VudHJ5XS5mbGFncyB8PSBDQUNIRV9QQUdFX0RJUlRZOworCisJCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwkJYnVmICs9IGF2YWlsOworCQljb3VudCAtPSBhdmFpbDsKKwkJdG8gKz0gYXZhaWw7CisJfQorCisJKnJldGxlbiA9IGxlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwczN2cmFtX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG0tPnByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICJoaXQ6JXVcbm1pc3M6JXVcbiIsIHByaXYtPmNhY2hlLmhpdCwgcHJpdi0+Y2FjaGUubWlzcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHBzM3ZyYW1fcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHMzdnJhbV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBzM3ZyYW1fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcHMzdnJhbV9wcm9jX2luaXQoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisKKwlwZGUgPSBwcm9jX2NyZWF0ZShERVZJQ0VfTkFNRSwgMDQ0NCwgTlVMTCwgJnBzM3ZyYW1fcHJvY19mb3BzKTsKKwlpZiAoIXBkZSkgeworCQlkZXZfd2FybigmZGV2LT5jb3JlLCAiZmFpbGVkIHRvIGNyZWF0ZSAvcHJvYyBlbnRyeVxuIik7CisJCXJldHVybjsKKwl9CisKKwlwZGUtPm93bmVyID0gVEhJU19NT0RVTEU7CisJcGRlLT5kYXRhID0gcHJpdjsKK30KKworc3RhdGljIGludCBwczN2cmFtX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldiA9IHEtPnF1ZXVlZGF0YTsKKwlpbnQgd3JpdGUgPSBiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURTsKKwljb25zdCBjaGFyICpvcCA9IHdyaXRlID8gIndyaXRlIiA6ICJyZWFkIjsKKwlsb2ZmX3Qgb2Zmc2V0ID0gYmlvLT5iaV9zZWN0b3IgPDwgOTsKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBiaW9fdmVjICpidmVjOworCXVuc2lnbmVkIGludCBpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIGJpbywgaSkgeworCQkvKiBQUzMgaXMgcHBjNjQsIHNvIHdlIGRvbid0IGhhbmRsZSBoaWdobWVtICovCisJCWNoYXIgKnB0ciA9IHBhZ2VfYWRkcmVzcyhidmVjLT5idl9wYWdlKSArIGJ2ZWMtPmJ2X29mZnNldDsKKwkJc2l6ZV90IGxlbiA9IGJ2ZWMtPmJ2X2xlbiwgcmV0bGVuOworCisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiAgICAlcyAlenUgYnl0ZXMgYXQgb2Zmc2V0ICVsbHVcbiIsIG9wLAorCQkJbGVuLCBvZmZzZXQpOworCQlpZiAod3JpdGUpCisJCQllcnJvciA9IHBzM3ZyYW1fd3JpdGUoZGV2LCBvZmZzZXQsIGxlbiwgJnJldGxlbiwgcHRyKTsKKwkJZWxzZQorCQkJZXJyb3IgPSBwczN2cmFtX3JlYWQoZGV2LCBvZmZzZXQsIGxlbiwgJnJldGxlbiwgcHRyKTsKKworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzIGZhaWxlZFxuIiwgb3ApOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAocmV0bGVuICE9IGxlbikgeworCQkJZGV2X2VycigmZGV2LT5jb3JlLCAiU2hvcnQgJXNcbiIsIG9wKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJb2Zmc2V0ICs9IGxlbjsKKwl9CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlcyBjb21wbGV0ZWRcbiIsIG9wKTsKKworb3V0OgorCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcHMzdnJhbV9wcm9iZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdjsKKwlpbnQgZXJyb3IsIHN0YXR1czsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CisJc3RydWN0IGdlbmRpc2sgKmdlbmRpc2s7CisJdTY0IGRkcl9scGFyLCBjdHJsX2xwYXIsIGluZm9fbHBhciwgcmVwb3J0c19scGFyLCBkZHJfc2l6ZSwKKwkgICAgcmVwb3J0c19zaXplOworCWNoYXIgKnJlc3Q7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CisJZGV2LT5jb3JlLmRyaXZlcl9kYXRhID0gcHJpdjsKKworCXByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwkvKiBBbGxvY2F0ZSBYRFIgYnVmZmVyICgxTWlCIGFsaWduZWQpICovCisJcHJpdi0+eGRyX2J1ZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCQlnZXRfb3JkZXIoWERSX0JVRl9TSVpFKSk7CisJaWYgKHByaXYtPnhkcl9idWYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJDb3VsZCBub3QgYWxsb2NhdGUgWERSIGJ1ZmZlclxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2ZyZWVfcHJpdjsKKwl9CisKKwkvKiBQdXQgRklGTyBhdCBiZWdnaW5uaW5nIG9mIFhEUiBidWZmZXIgKi8KKwlwcml2LT5maWZvX2Jhc2UgPSAodTMyICopIChwcml2LT54ZHJfYnVmICsgRklGT19PRkZTRVQpOworCXByaXYtPmZpZm9fcHRyID0gcHJpdi0+Zmlmb19iYXNlOworCisJLyogWFhYOiBOZWVkIHRvIG9wZW4gR1BVLCBpbiBjYXNlIHBzM2ZiIG9yIHNuZF9wczMgYXJlbid0IGxvYWRlZCAqLworCWlmIChwczNfb3Blbl9odl9kZXZpY2UoZGV2KSkgeworCQlkZXZfZXJyKCZkZXYtPmNvcmUsICJwczNfb3Blbl9odl9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJZXJyb3IgPSAtRUFHQUlOOworCQlnb3RvIG91dF9jbG9zZV9ncHU7CisJfQorCisJLyogUmVxdWVzdCBtZW1vcnkgKi8KKwlzdGF0dXMgPSAtMTsKKwlkZHJfc2l6ZSA9IEFMSUdOKG1lbXBhcnNlKHNpemUsICZyZXN0KSwgMTAyNCoxMDI0KTsKKwlpZiAoIWRkcl9zaXplKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgIlNwZWNpZmllZCBzaXplIGlzIHRvbyBzbWFsbFxuIik7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBvdXRfY2xvc2VfZ3B1OworCX0KKworCXdoaWxlIChkZHJfc2l6ZSA+IDApIHsKKwkJc3RhdHVzID0gbHYxX2dwdV9tZW1vcnlfYWxsb2NhdGUoZGRyX3NpemUsIDAsIDAsIDAsIDAsCisJCQkJCQkgJnByaXYtPm1lbW9yeV9oYW5kbGUsCisJCQkJCQkgJmRkcl9scGFyKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlicmVhazsKKwkJZGRyX3NpemUgLT0gMTAyNCoxMDI0OworCX0KKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImx2MV9ncHVfbWVtb3J5X2FsbG9jYXRlIGZhaWxlZCAlZFxuIiwKKwkJCXN0YXR1cyk7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV94ZHJfYnVmOworCX0KKworCS8qIFJlcXVlc3QgY29udGV4dCAqLworCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9hbGxvY2F0ZShwcml2LT5tZW1vcnlfaGFuZGxlLCAwLAorCQkJCQkgICZwcml2LT5jb250ZXh0X2hhbmRsZSwgJmN0cmxfbHBhciwKKwkJCQkJICAmaW5mb19scGFyLCAmcmVwb3J0c19scGFyLAorCQkJCQkgICZyZXBvcnRzX3NpemUpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAibHYxX2dwdV9jb250ZXh0X2FsbG9jYXRlIGZhaWxlZCAlZFxuIiwKKwkJCXN0YXR1cyk7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9tZW1vcnk7CisJfQorCisJLyogTWFwIFhEUiBidWZmZXIgdG8gUlNYICovCisJc3RhdHVzID0gbHYxX2dwdV9jb250ZXh0X2lvbWFwKHByaXYtPmNvbnRleHRfaGFuZGxlLCBYRFJfSU9JRiwKKwkJCQkgICAgICAgcHMzX21tX3BoeXNfdG9fbHBhcihfX3BhKHByaXYtPnhkcl9idWYpKSwKKwkJCQkgICAgICAgWERSX0JVRl9TSVpFLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImx2MV9ncHVfY29udGV4dF9pb21hcCBmYWlsZWQgJWRcbiIsCisJCQlzdGF0dXMpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfY29udGV4dDsKKwl9CisKKwlwcml2LT5kZHJfYmFzZSA9IGlvcmVtYXBfZmxhZ3MoZGRyX2xwYXIsIGRkcl9zaXplLCBfUEFHRV9OT19DQUNIRSk7CisKKwlpZiAoIXByaXYtPmRkcl9iYXNlKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImlvcmVtYXAgRERSIGZhaWxlZFxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9jb250ZXh0OworCX0KKworCXByaXYtPmN0cmwgPSBpb3JlbWFwKGN0cmxfbHBhciwgNjQgKiAxMDI0KTsKKwlpZiAoIXByaXYtPmN0cmwpIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAiaW9yZW1hcCBDVFJMIGZhaWxlZFxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5tYXBfdnJhbTsKKwl9CisKKwlwcml2LT5yZXBvcnRzID0gaW9yZW1hcChyZXBvcnRzX2xwYXIsIHJlcG9ydHNfc2l6ZSk7CisJaWYgKCFwcml2LT5yZXBvcnRzKSB7CisJCWRldl9lcnIoJmRldi0+Y29yZSwgImlvcmVtYXAgUkVQT1JUUyBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubWFwX2N0cmw7CisJfQorCisJbXV0ZXhfbG9jaygmcHMzX2dwdV9tdXRleCk7CisJcHMzdnJhbV9pbml0X3JpbmcoZGV2KTsKKwltdXRleF91bmxvY2soJnBzM19ncHVfbXV0ZXgpOworCisJcHJpdi0+c2l6ZSA9IGRkcl9zaXplOworCisJcHMzdnJhbV9iaW5kKGRldik7CisKKwltdXRleF9sb2NrKCZwczNfZ3B1X211dGV4KTsKKwllcnJvciA9IHBzM3ZyYW1fd2FpdF9yaW5nKGRldiwgMTAwKTsKKwltdXRleF91bmxvY2soJnBzM19ncHVfbXV0ZXgpOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY2hhbm5lbHNcbiIpOworCQllcnJvciA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0X3VubWFwX3JlcG9ydHM7CisJfQorCisJcHMzdnJhbV9jYWNoZV9pbml0KGRldik7CisJcHMzdnJhbV9wcm9jX2luaXQoZGV2KTsKKworCXF1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlKEdGUF9LRVJORUwpOworCWlmICghcXVldWUpIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAiYmxrX2FsbG9jX3F1ZXVlIGZhaWxlZFxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfY2FjaGVfY2xlYW51cDsKKwl9CisKKwlwcml2LT5xdWV1ZSA9IHF1ZXVlOworCXF1ZXVlLT5xdWV1ZWRhdGEgPSBkZXY7CisJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChxdWV1ZSwgcHMzdnJhbV9tYWtlX3JlcXVlc3QpOworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxdWV1ZSwgTUFYX1BIWVNfU0VHTUVOVFMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocXVldWUsIE1BWF9IV19TRUdNRU5UUyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocXVldWUsIE1BWF9TRUdNRU5UX1NJWkUpOworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxdWV1ZSwgU0FGRV9NQVhfU0VDVE9SUyk7CisKKwlnZW5kaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIWdlbmRpc2spIHsKKwkJZGV2X2VycigmZGV2LT5jb3JlLCAiYWxsb2NfZGlzayBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9jbGVhbnVwX3F1ZXVlOworCX0KKworCXByaXYtPmdlbmRpc2sgPSBnZW5kaXNrOworCWdlbmRpc2stPm1ham9yID0gcHMzdnJhbV9tYWpvcjsKKwlnZW5kaXNrLT5maXJzdF9taW5vciA9IDA7CisJZ2VuZGlzay0+Zm9wcyA9ICZwczN2cmFtX2ZvcHM7CisJZ2VuZGlzay0+cXVldWUgPSBxdWV1ZTsKKwlnZW5kaXNrLT5wcml2YXRlX2RhdGEgPSBkZXY7CisJZ2VuZGlzay0+ZHJpdmVyZnNfZGV2ID0gJmRldi0+Y29yZTsKKwlzdHJsY3B5KGdlbmRpc2stPmRpc2tfbmFtZSwgREVWSUNFX05BTUUsIHNpemVvZihnZW5kaXNrLT5kaXNrX25hbWUpKTsKKwlzZXRfY2FwYWNpdHkoZ2VuZGlzaywgcHJpdi0+c2l6ZSA+PiA5KTsKKworCWRldl9pbmZvKCZkZXYtPmNvcmUsICIlczogVXNpbmcgJWx1IE1pQiBvZiBHUFUgbWVtb3J5XG4iLAorCQkgZ2VuZGlzay0+ZGlza19uYW1lLCBnZXRfY2FwYWNpdHkoZ2VuZGlzaykgPj4gMTEpOworCisJYWRkX2Rpc2soZ2VuZGlzayk7CisJcmV0dXJuIDA7CisKK2ZhaWxfY2xlYW51cF9xdWV1ZToKKwlibGtfY2xlYW51cF9xdWV1ZShxdWV1ZSk7CitvdXRfY2FjaGVfY2xlYW51cDoKKwlyZW1vdmVfcHJvY19lbnRyeShERVZJQ0VfTkFNRSwgTlVMTCk7CisJcHMzdnJhbV9jYWNoZV9jbGVhbnVwKGRldik7CitvdXRfdW5tYXBfcmVwb3J0czoKKwlpb3VubWFwKHByaXYtPnJlcG9ydHMpOworb3V0X3VubWFwX2N0cmw6CisJaW91bm1hcChwcml2LT5jdHJsKTsKK291dF91bm1hcF92cmFtOgorCWlvdW5tYXAocHJpdi0+ZGRyX2Jhc2UpOworb3V0X2ZyZWVfY29udGV4dDoKKwlsdjFfZ3B1X2NvbnRleHRfZnJlZShwcml2LT5jb250ZXh0X2hhbmRsZSk7CitvdXRfZnJlZV9tZW1vcnk6CisJbHYxX2dwdV9tZW1vcnlfZnJlZShwcml2LT5tZW1vcnlfaGFuZGxlKTsKK291dF9jbG9zZV9ncHU6CisJcHMzX2Nsb3NlX2h2X2RldmljZShkZXYpOworb3V0X2ZyZWVfeGRyX2J1ZjoKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwcml2LT54ZHJfYnVmLCBnZXRfb3JkZXIoWERSX0JVRl9TSVpFKSk7CitmYWlsX2ZyZWVfcHJpdjoKKwlrZnJlZShwcml2KTsKKwlkZXYtPmNvcmUuZHJpdmVyX2RhdGEgPSBOVUxMOworZmFpbDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcHMzdnJhbV9yZW1vdmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBkZXYtPmNvcmUuZHJpdmVyX2RhdGE7CisKKwlkZWxfZ2VuZGlzayhwcml2LT5nZW5kaXNrKTsKKwlwdXRfZGlzayhwcml2LT5nZW5kaXNrKTsKKwlibGtfY2xlYW51cF9xdWV1ZShwcml2LT5xdWV1ZSk7CisJcmVtb3ZlX3Byb2NfZW50cnkoREVWSUNFX05BTUUsIE5VTEwpOworCXBzM3ZyYW1fY2FjaGVfY2xlYW51cChkZXYpOworCWlvdW5tYXAocHJpdi0+cmVwb3J0cyk7CisJaW91bm1hcChwcml2LT5jdHJsKTsKKwlpb3VubWFwKHByaXYtPmRkcl9iYXNlKTsKKwlsdjFfZ3B1X2NvbnRleHRfZnJlZShwcml2LT5jb250ZXh0X2hhbmRsZSk7CisJbHYxX2dwdV9tZW1vcnlfZnJlZShwcml2LT5tZW1vcnlfaGFuZGxlKTsKKwlwczNfY2xvc2VfaHZfZGV2aWNlKGRldik7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcHJpdi0+eGRyX2J1ZiwgZ2V0X29yZGVyKFhEUl9CVUZfU0laRSkpOworCWtmcmVlKHByaXYpOworCWRldi0+Y29yZS5kcml2ZXJfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyIHBzM3ZyYW0gPSB7CisJLm1hdGNoX2lkCT0gUFMzX01BVENIX0lEX0dQVSwKKwkubWF0Y2hfc3ViX2lkCT0gUFMzX01BVENIX1NVQl9JRF9HUFVfUkFNRElTSywKKwkuY29yZS5uYW1lCT0gREVWSUNFX05BTUUsCisJLmNvcmUub3duZXIJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCT0gcHMzdnJhbV9wcm9iZSwKKwkucmVtb3ZlCQk9IHBzM3ZyYW1fcmVtb3ZlLAorCS5zaHV0ZG93bgk9IHBzM3ZyYW1fcmVtb3ZlLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBwczN2cmFtX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfUFMzX0xWMSkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgREVWSUNFX05BTUUpOworCWlmIChlcnJvciA8PSAwKSB7CisJCXByX2VycigiJXM6IHJlZ2lzdGVyX2Jsa2RldiBmYWlsZWQgJWRcbiIsIERFVklDRV9OQU1FLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJcHMzdnJhbV9tYWpvciA9IGVycm9yOworCisJcHJfaW5mbygiJXM6IHJlZ2lzdGVyZWQgYmxvY2sgZGV2aWNlIG1ham9yICVkXG4iLCBERVZJQ0VfTkFNRSwKKwkJcHMzdnJhbV9tYWpvcik7CisKKwllcnJvciA9IHBzM19zeXN0ZW1fYnVzX2RyaXZlcl9yZWdpc3RlcigmcHMzdnJhbSk7CisJaWYgKGVycm9yKQorCQl1bnJlZ2lzdGVyX2Jsa2RldihwczN2cmFtX21ham9yLCBERVZJQ0VfTkFNRSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwczN2cmFtX2V4aXQodm9pZCkKK3sKKwlwczNfc3lzdGVtX2J1c19kcml2ZXJfdW5yZWdpc3RlcigmcHMzdnJhbSk7CisJdW5yZWdpc3Rlcl9ibGtkZXYocHMzdnJhbV9tYWpvciwgREVWSUNFX05BTUUpOworfQorCittb2R1bGVfaW5pdChwczN2cmFtX2luaXQpOworbW9kdWxlX2V4aXQocHMzdnJhbV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQUzMgVmlkZW8gUkFNIFN0b3JhZ2UgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTb255IENvcnBvcmF0aW9uIik7CitNT0RVTEVfQUxJQVMoUFMzX01PRFVMRV9BTElBU19HUFVfUkFNRElTSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmNjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqIERyaXZlciBmb3IgU1dJTSAoU2FuZGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIGZsb3BweSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTYKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTEwLTMwIChsdikgLSBQb3J0IHRvIDIuNgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorCisjZGVmaW5lIENBUkROQU1FICJzd2ltIgorCitzdHJ1Y3Qgc2VjdG9yX2hlYWRlciB7CisJdW5zaWduZWQgY2hhciBzaWRlOworCXVuc2lnbmVkIGNoYXIgdHJhY2s7CisJdW5zaWduZWQgY2hhciBzZWN0b3I7CisJdW5zaWduZWQgY2hhciBzaXplOworCXVuc2lnbmVkIGNoYXIgY3JjMDsKKwl1bnNpZ25lZCBjaGFyIGNyYzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJWZXJzaW9uIDAuMiAoMjAwOC0xMC0zMCkiCisKKyNkZWZpbmUgUkVHKHgpCXVuc2lnbmVkIGNoYXIgeCwgeCAjIyBfcGFkWzB4MjAwIC0gMV07CisKK3N0cnVjdCBzd2ltIHsKKwlSRUcod3JpdGVfZGF0YSkKKwlSRUcod3JpdGVfbWFyaykKKwlSRUcod3JpdGVfQ1JDKQorCVJFRyh3cml0ZV9wYXJhbWV0ZXIpCisJUkVHKHdyaXRlX3BoYXNlKQorCVJFRyh3cml0ZV9zZXR1cCkKKwlSRUcod3JpdGVfbW9kZTApCisJUkVHKHdyaXRlX21vZGUxKQorCisJUkVHKHJlYWRfZGF0YSkKKwlSRUcocmVhZF9tYXJrKQorCVJFRyhyZWFkX2Vycm9yKQorCVJFRyhyZWFkX3BhcmFtZXRlcikKKwlSRUcocmVhZF9waGFzZSkKKwlSRUcocmVhZF9zZXR1cCkKKwlSRUcocmVhZF9zdGF0dXMpCisJUkVHKHJlYWRfaGFuZHNoYWtlKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCYoYmFzZSktPndyaXRlXyMjcmVnLCAodikpCisjZGVmaW5lIHN3aW1fcmVhZChiYXNlLCByZWcpCQlpbl84KCYoYmFzZSktPnJlYWRfIyNyZWcpCisKKy8qIElXTSByZWdpc3RlcnMgKi8KKworc3RydWN0IGl3bSB7CisJUkVHKHBoMEwpCisJUkVHKHBoMEgpCisJUkVHKHBoMUwpCisJUkVHKHBoMUgpCisJUkVHKHBoMkwpCisJUkVHKHBoMkgpCisJUkVHKHBoM0wpCisJUkVHKHBoM0gpCisJUkVHKG10ck9mZikKKwlSRUcobXRyT24pCisJUkVHKGludERyaXZlKQorCVJFRyhleHREcml2ZSkKKwlSRUcocTZMKQorCVJFRyhxNkgpCisJUkVHKHE3TCkKKwlSRUcocTdIKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBpd21fd3JpdGUoYmFzZSwgcmVnLCB2KSAJb3V0XzgoJihiYXNlKS0+cmVnLCAodikpCisjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJihiYXNlKS0+cmVnKQorCisvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgU0VFS19QT1NJVElWRQkweDA3MAorI2RlZmluZSBTRUVLX05FR0FUSVZFCTB4MDc0CisjZGVmaW5lIFNURVAJCTB4MDcxCisjZGVmaW5lIE1PVE9SX09OCTB4MDcyCisjZGVmaW5lIE1PVE9SX09GRgkweDA3NgorI2RlZmluZSBJTkRFWAkJMHgwNzMKKyNkZWZpbmUgRUpFQ1QJCTB4MDc3CisjZGVmaW5lIFNFVE1GTQkJMHgxNzEKKyNkZWZpbmUgU0VUR0NSCQkweDE3NQorCisjZGVmaW5lIFJFTEFYCQkweDAzMworI2RlZmluZSBMU1RSQgkJMHgwMDgKKworI2RlZmluZSBDQV9NQVNLCQkweDA3NworCisvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovCisKKyNkZWZpbmUgUkVBRF9EQVRBXzAJMHgwNzQKKyNkZWZpbmUgVFdPTUVHX0RSSVZFCTB4MDc1CisjZGVmaW5lIFNJTkdMRV9TSURFRAkweDA3NgorI2RlZmluZSBEUklWRV9QUkVTRU5UCTB4MDc3CisjZGVmaW5lIERJU0tfSU4JCTB4MTcwCisjZGVmaW5lIFdSSVRFX1BST1QJMHgxNzEKKyNkZWZpbmUgVFJBQ0tfWkVSTwkweDE3MgorI2RlZmluZSBUQUNITwkJMHgxNzMKKyNkZWZpbmUgUkVBRF9EQVRBXzEJMHgxNzQKKyNkZWZpbmUgTUZNX01PREUJMHgxNzUKKyNkZWZpbmUgU0VFS19DT01QTEVURQkweDE3NgorI2RlZmluZSBPTkVNRUdfTUVESUEJMHgxNzcKKworLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVJLX0JZVEUJMHgwMQorI2RlZmluZSBDUkNfWkVSTwkweDAyCisjZGVmaW5lIFJEREFUQQkJMHgwNAorI2RlZmluZSBTRU5TRQkJMHgwOAorI2RlZmluZSBNT1RFTgkJMHgxMAorI2RlZmluZSBFUlJPUgkJMHgyMAorI2RlZmluZSBEQVQyQllURQkweDQwCisjZGVmaW5lIERBVDFCWVRFCTB4ODAKKworLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqLworCisjZGVmaW5lIFNfSU5WX1dEQVRBCTB4MDEKKyNkZWZpbmUgU18zXzVfU0VMRUNUCTB4MDIKKyNkZWZpbmUgU19HQ1IJCTB4MDQKKyNkZWZpbmUgU19GQ0xLX0RJVjIJMHgwOAorI2RlZmluZSBTX0VSUk9SX0NPUlIJMHgxMAorI2RlZmluZSBTX0lCTV9EUklWRQkweDIwCisjZGVmaW5lIFNfR0NSX1dSSVRFCTB4NDAKKyNkZWZpbmUgU19USU1FT1VUCTB4ODAKKworLyogYml0cyBpbiBtb2RlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0xGSUZPCQkweDAxCisjZGVmaW5lIEVOQkwxCQkweDAyCisjZGVmaW5lIEVOQkwyCQkweDA0CisjZGVmaW5lIEFDVElPTgkJMHgwOAorI2RlZmluZSBXUklURV9NT0RFCTB4MTAKKyNkZWZpbmUgSEVEU0VMCQkweDIwCisjZGVmaW5lIE1PVE9OCQkweDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2VudW0gZHJpdmVfbG9jYXRpb24geworCUlOVEVSTkFMX0RSSVZFID0gMHgwMiwKKwlFWFRFUk5BTF9EUklWRSA9IDB4MDQsCit9OworCitlbnVtIG1lZGlhX3R5cGUgeworCUREX01FRElBLAorCUhEX01FRElBLAorfTsKKworc3RydWN0IGZsb3BweV9zdGF0ZSB7CisKKwkvKiBwaHlzaWNhbCBwcm9wZXJ0aWVzICovCisKKwllbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uOwkvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqLworCWludAkJIGhlYWRfbnVtYmVyOwkvKiBzaW5nbGUtIG9yIGRvdWJsZS1zaWRlZCBkcml2ZSAqLworCisJLyogbWVkaWEgKi8KKworCWludAkJIGRpc2tfaW47CisJaW50CQkgZWplY3RlZDsKKwllbnVtIG1lZGlhX3R5cGUJIHR5cGU7CisJaW50CQkgd3JpdGVfcHJvdGVjdGVkOworCisJaW50CQkgdG90YWxfc2VjczsKKwlpbnQJCSBzZWNwZXJjeWw7CisJaW50CQkgc2VjcGVydHJhY2s7CisKKwkvKiBpbi11c2UgaW5mb3JtYXRpb24gKi8KKworCWludAkJdHJhY2s7CisJaW50CQlyZWZfY291bnQ7CisKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKworCS8qIHBhcmVudCBjb250cm9sbGVyICovCisKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2Q7Cit9OworCitlbnVtIG1vdG9yX2FjdGlvbiB7CisJT0ZGLAorCU9OLAorfTsKKworZW51bSBoZWFkIHsKKwlMT1dFUl9IRUFEID0gMCwKKwlVUFBFUl9IRUFEID0gMSwKK307CisKKyNkZWZpbmUgRkRfTUFYX1VOSVQJMgorCitzdHJ1Y3Qgc3dpbV9wcml2IHsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CisJaW50IGZsb3BweV9jb3VudDsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdOworfTsKKworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJCSAgIHN0cnVjdCBzZWN0b3JfaGVhZGVyICpoZWFkZXIpOworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpCit7CisJc3RydWN0IGl3bSBfX2lvbWVtICppd21fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFlbmFibGUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMHhmOCk7CisJCXJldHVybjsKKwl9CisKKwlpd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBtdHJPZmYpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpOworCisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDE3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHg1Nyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjUpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjUpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjYpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjYpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjcpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjcpCisJCWdvdG8gaXNfaXdtOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMTsKK2lzX2l3bToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKQoreworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTsKKworCXZpYTFfc2V0X2hlYWQoc2VsICYgMHgxMDApOworCisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsICYgQ0FfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBhY3Rpb24pOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgTFNUUkIpOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgKCh+TFNUUkIpICYgMHgwRikpOworCXVkZWxheSgxKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpCit7CisJaW50IHN0YXQ7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBiaXQpOworCisJdWRlbGF5KDEwKTsKKworCXN0YXQgPSBzd2ltX3JlYWQoYmFzZSwgaGFuZHNoYWtlKTsKKworCXJldHVybiAoc3RhdCAmIFNFTlNFKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKK3sKKwlpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqLworCX0gZWxzZSBpZiAobG9jYXRpb24gPT0gRVhURVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAwIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBFWFRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAxIGJpdCAqLworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCSAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbikKK3sKKwlpZiAoYWN0aW9uID09IE9OKSB7CisJCWludCBpOworCisJCXN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMipIWjsgaSsrKSB7CisJCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIE1PVE9SX09OKSkKKwkJCQlicmVhazsKKwkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJfQorCX0gZWxzZSBpZiAoYWN0aW9uID09IE9GRikgeworCQlzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PRkYpOworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCBpOworCisJc3dpbV9hY3Rpb24oYmFzZSwgRUpFQ1QpOworCisJZm9yIChpID0gMDsgaSA8IDIqSFo7IGkrKykgeworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKQorCQkJYnJlYWs7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0KKwlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2hlYWQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgZW51bSBoZWFkIGhlYWQpCit7CisJLyogd2FpdCBkcml2ZSBpcyByZWFkeSAqLworCisJaWYgKGhlYWQgPT0gVVBQRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzEpOworCWVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgd2FpdDsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNURVApOworCisJZm9yICh3YWl0ID0gMDsgd2FpdCA8IEhaOyB3YWl0KyspIHsKKworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIFNURVApKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjazAwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IHRyeTsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCisJZm9yICh0cnkgPSAwOyB0cnkgPCAxMDA7IHRyeSsrKSB7CisKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQkJYnJlYWs7CisKKwkJaWYgKHN3aW1fc3RlcChiYXNlKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKQoreworCWlmIChzdGVwID09IDApCisJCXJldHVybiAwOworCisJaWYgKHN0ZXAgPCAwKSB7CisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCQlzdGVwID0gLXN0ZXA7CisJfSBlbHNlCisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfUE9TSVRJVkUpOworCisJZm9yICggOyBzdGVwID4gMDsgc3RlcC0tKSB7CisJCWlmIChzd2ltX3N0ZXAoYmFzZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IHJldDsKKworCXJldCA9IHN3aW1fc2VlayhiYXNlLCB0cmFjayAtIGZzLT50cmFjayk7CisKKwlpZiAocmV0ID09IDApCisJCWZzLT50cmFjayA9IHRyYWNrOworCWVsc2UgeworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisJCWZzLT50cmFjayA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCXN3aW1fZWplY3QoYmFzZSk7CisKKwlmcy0+ZGlza19pbiA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZF9zZWN0b3Ioc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsCisJCQkJICAgaW50IHNpZGUsIGludCB0cmFjaywKKwkJCQkgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2VjdG9yX2hlYWRlciBoZWFkZXI7CisJaW50IHJldCA9IC0xOworCXNob3J0IGk7CisKKwlzd2ltX3RyYWNrKGZzLCB0cmFjayk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7CisJc3dpbV9oZWFkKGJhc2UsIHNpZGUpOworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIHNpZGUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCAzNjsgaSsrKSB7CisJCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsICZoZWFkZXIpOworCQlpZiAoIXJldCAmJiAoaGVhZGVyLnNlY3RvciA9PSBzZWN0b3IpKSB7CisJCQkvKiBmb3VuZCAqLworCisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoYmFzZSwgYnVmZmVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTsKKworCWlmICgoaGVhZGVyLnNpZGUgIT0gc2lkZSkgIHx8IChoZWFkZXIudHJhY2sgIT0gdHJhY2spIHx8CisJICAgICAoaGVhZGVyLnNlY3RvciAhPSBzZWN0b3IpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlYWRfc2VjdG9ycyhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKKwkJCSAgICAgICBpbnQgcmVxX3NlY3RvciwgaW50IHNlY3RvcnNfbmIsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCByZXQ7CisJaW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7CisJaW50IGksIHRyeTsKKworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCWZvciAoaSA9IHJlcV9zZWN0b3I7IGkgPCByZXFfc2VjdG9yICsgc2VjdG9yc19uYjsgaSsrKSB7CisJCWludCB4OworCQl0cmFjayA9IGkgLyBmcy0+c2VjcGVyY3lsOworCQl4ID0gaSAlIGZzLT5zZWNwZXJjeWw7CisJCXNpZGUgPSB4IC8gZnMtPnNlY3BlcnRyYWNrOworCQlzZWN0b3IgPSB4ICUgZnMtPnNlY3BlcnRyYWNrICsgMTsKKworCQl0cnkgPSA1OworCQlkbyB7CisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yKGZzLCBzaWRlLCB0cmFjaywgc2VjdG9yLAorCQkJCQkJYnVmZmVyKTsKKwkJCWlmICh0cnktLSA9PSAwKQorCQkJCXJldHVybiAtMTsKKwkJfSB3aGlsZSAocmV0ICE9IDUxMik7CisKKwkJYnVmZmVyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnM7CisKKwl3aGlsZSAoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSkpKSB7CisKKwkJZnMgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKKwkJaWYgKHJlcS0+c2VjdG9yIDwgMCB8fCByZXEtPnNlY3RvciA+PSBmcy0+dG90YWxfc2VjcykgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9PSAwKSB7CisJCQllbmRfcmVxdWVzdChyZXEsIDEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmcy0+ZGlza19pbikgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CisJCQlpZiAoZnMtPndyaXRlX3Byb3RlY3RlZCkgeworCQkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CisJCWNhc2UgV1JJVEU6CisJCQkvKiBOT1QgSU1QTEVNRU5URUQgKi8KKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEOgorCQkJaWYgKGZsb3BweV9yZWFkX3NlY3RvcnMoZnMsIHJlcS0+c2VjdG9yLAorCQkJCQkJcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsCisJCQkJCQlyZXEtPmJ1ZmZlcikpIHsKKwkJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmVxLT5ucl9zZWN0b3JzIC09IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCQkJcmVxLT5zZWN0b3IgKz0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCQlyZXEtPmJ1ZmZlciArPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyAqIDUxMjsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlyZWRvX2ZkX3JlcXVlc3QocSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmbG9wcHlfdHlwZVs0XSA9IHsKKwl7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICAgKi8KKwl7ICA3MjAsICA5LCAxLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiAzNjBLQiBTUyAzLjUiKi8KKwl7IDE0NDAsICA5LCAyLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiA3MjBLQiAzLjUiICAgKi8KKwl7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41IiAgKi8KK307CisKK3N0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsCisJCQkgICAgICAgc3RydWN0IGZsb3BweV9zdHJ1Y3QgKipnKQoreworCWlmICh0eXBlID49IEFSUkFZX1NJWkUoZmxvcHB5X3R5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlKQorCQkqZyA9ICZmbG9wcHlfdHlwZVt0eXBlXTsKKwllbHNlIGlmIChmcy0+dHlwZSA9PSBIRF9NRURJQSkgLyogSGlnaC1EZW5zaXR5IG1lZGlhICovCisJCSpnID0gJmZsb3BweV90eXBlWzNdOworCWVsc2UgaWYgKGZzLT5oZWFkX251bWJlciA9PSAyKSAvKiBkb3VibGUtc2lkZWQgKi8KKwkJKmcgPSAmZmxvcHB5X3R5cGVbMl07CisJZWxzZQorCQkqZyA9ICZmbG9wcHlfdHlwZVsxXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9tZWRpdW0oc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKSB7CisJCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpnOworCQlmcy0+ZGlza19pbiA9IDE7CisJCWZzLT53cml0ZV9wcm90ZWN0ZWQgPSBzd2ltX3JlYWRiaXQoYmFzZSwgV1JJVEVfUFJPVCk7CisJCWZzLT50eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19NRURJQSk7CisKKwkJaWYgKHN3aW1fdHJhY2swMChiYXNlKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJTV0lNOiBjYW5ub3QgbW92ZSBmbG9wcHkgaGVhZCB0byB0cmFjayAwXG4iKTsKKworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisKKwkJZ2V0X2Zsb3BweV9nZW9tZXRyeShmcywgMCwgJmcpOworCQlmcy0+dG90YWxfc2VjcyA9IGctPnNpemU7CisJCWZzLT5zZWNwZXJjeWwgPSBnLT5oZWFkICogZy0+c2VjdDsKKwkJZnMtPnNlY3BlcnRyYWNrID0gZy0+c2VjdDsKKwkJZnMtPnRyYWNrID0gMDsKKwl9IGVsc2UgeworCQlmcy0+ZGlza19pbiA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgZXJyOworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgKGZzLT5yZWZfY291bnQgJiYgbW9kZSAmIEZNT0RFX0VYQ0wpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKG1vZGUgJiBGTU9ERV9FWENMKQorCQlmcy0+cmVmX2NvdW50ID0gLTE7CisJZWxzZQorCQlmcy0+cmVmX2NvdW50Kys7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHNldHVwLCBTX0lCTV9EUklWRSAgfCBTX0ZDTEtfRElWMik7CisJdWRlbGF5KDEwKTsKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlzd2ltX21vdG9yKGJhc2UsIE9OKTsKKwlzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pOworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKwlpZiAoIWZzLT5kaXNrX2luKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1vZGUgJiBGTU9ERV9OREVMQVkpCisJCXJldHVybiAwOworCisJaWYgKG1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpIHsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBmcy0+d3JpdGVfcHJvdGVjdGVkKSB7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK291dDoKKwlpZiAoZnMtPnJlZl9jb3VudCA8IDApCisJCWZzLT5yZWZfY291bnQgPSAwOworCWVsc2UgaWYgKGZzLT5yZWZfY291bnQgPiAwKQorCQktLWZzLT5yZWZfY291bnQ7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA9PSAwKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJaWYgKGZzLT5yZWZfY291bnQgPCAwKQorCQlmcy0+cmVmX2NvdW50ID0gMDsKKwllbHNlIGlmIChmcy0+cmVmX2NvdW50ID4gMCkKKwkJLS1mcy0+cmVmX2NvdW50OworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWlmICgoY21kICYgMHg4MCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZERUpFQ1Q6CisJCWlmIChmcy0+cmVmX2NvdW50ICE9IDEpCisJCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSBmbG9wcHlfZWplY3QoZnMpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBGREdFVFBSTToKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgcGFyYW0sICh2b2lkICopICZmbG9wcHlfdHlwZSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBmbG9wcHlfc3RydWN0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiU1dJTSBmbG9wcHlfaW9jdGw6IHVua25vd24gY21kICVkXG4iLAorCQkgICAgICAgY21kKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CisJaW50IHJldDsKKworCXJldCA9IGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsICZnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2VvLT5oZWFkcyA9IGctPmhlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZy0+c2VjdDsKKwlnZW8tPmN5bGluZGVycyA9IGctPnRyYWNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+ZWplY3RlZDsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmV2YWxpZGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKworCWlmICghZnMtPmRpc2tfaW4pCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwllbHNlCisJCWZzLT5lamVjdGVkID0gMDsKKworCXJldHVybiAhZnMtPmRpc2tfaW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CisJLm93bmVyCQkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkJID0gZmxvcHB5X29wZW4sCisJLnJlbGVhc2UJID0gZmxvcHB5X3JlbGVhc2UsCisJLmxvY2tlZF9pb2N0bAkgPSBmbG9wcHlfaW9jdGwsCisJLmdldGdlbwkJID0gZmxvcHB5X2dldGdlbywKKwkubWVkaWFfY2hhbmdlZAkgPSBmbG9wcHlfY2hlY2tfY2hhbmdlLAorCS5yZXZhbGlkYXRlX2Rpc2sgPSBmbG9wcHlfcmV2YWxpZGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZmxvcHB5X2ZpbmQoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gZGF0YTsKKwlpbnQgZHJpdmUgPSAoKnBhcnQgJiAzKTsKKworCWlmIChkcml2ZSA+IHN3ZC0+ZmxvcHB5X2NvdW50KQorCQlyZXR1cm4gTlVMTDsKKworCSpwYXJ0ID0gMDsKKwlyZXR1cm4gZ2V0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwKKwkJCQkgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSAmc3dkLT51bml0W3N3ZC0+ZmxvcHB5X2NvdW50XTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJZnMtPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTsKKworCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSkKKwkJZnMtPmhlYWRfbnVtYmVyID0gMTsKKwllbHNlCisJCWZzLT5oZWFkX251bWJlciA9IDI7CisJZnMtPnJlZl9jb3VudCA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJc3dkLT5mbG9wcHlfY291bnQrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX2Zsb3BweV9pbml0KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCkKK3sKKwlpbnQgZXJyOworCWludCBkcml2ZTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJLyogc2NhbiBmbG9wcHkgZHJpdmVzICovCisKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpKQorCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBJTlRFUk5BTF9EUklWRSk7CisJc3dpbV9kcml2ZShiYXNlLCBFWFRFUk5BTF9EUklWRSk7CisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSkKKwkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpOworCisJLyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqLworCisJZXJyID0gcmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIFNXSU0gZmxvcHB5XG4iLAorCQkgICAgICAgRkxPUFBZX01BSk9SKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2sgPSBhbGxvY19kaXNrKDEpOworCQlpZiAoc3dkLT51bml0W2RyaXZlXS5kaXNrID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcHV0X2Rpc2tzOworCQl9CisJCXN3ZC0+dW5pdFtkcml2ZV0uc3dkID0gc3dkOworCX0KKworCXN3ZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmc3dkLT5sb2NrKTsKKwlpZiAoIXN3ZC0+cXVldWUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3B1dF9kaXNrczsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPm1ham9yID0gRkxPUFBZX01BSk9SOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CisJCXNwcmludGYoc3dkLT51bml0W2RyaXZlXS5kaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgZHJpdmUpOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnN3ZC0+dW5pdFtkcml2ZV07CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cXVldWUgPSBzd2QtPnF1ZXVlOworCQlzZXRfY2FwYWNpdHkoc3dkLT51bml0W2RyaXZlXS5kaXNrLCAyODgwKTsKKwkJYWRkX2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwl9CisKKwlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1NiwgVEhJU19NT0RVTEUsCisJCQkgICAgZmxvcHB5X2ZpbmQsIE5VTEwsIHN3ZCk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9wdXRfZGlza3M6CisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKwl3aGlsZSAoZHJpdmUtLSkKKwkJcHV0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpzd2ltX2Jhc2U7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIENBUkROQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXN3aW1fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXN3aW1fYmFzZSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZV9pbzsKKwl9CisKKwkvKiBwcm9iZSBkZXZpY2UgKi8KKworCXNldF9zd2ltX21vZGUoc3dpbV9iYXNlLCAxKTsKKwlpZiAoIWdldF9zd2ltX21vZGUoc3dpbV9iYXNlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJTV0lNIGRldmljZSBub3QgZm91bmQgIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJLyogc2V0IHBsYXRmb3JtIGRyaXZlciBkYXRhICovCisKKwlzd2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3dpbV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzd2QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzd2QpOworCisJc3dkLT5iYXNlID0gc3dpbV9iYXNlOworCisJcmV0ID0gc3dpbV9mbG9wcHlfaW5pdChzd2QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2tmcmVlOworCisJcmV0dXJuIDA7CisKK291dF9rZnJlZToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKHN3aW1fYmFzZSk7CitvdXRfcmVsZWFzZV9pbzoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZHJpdmU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2KTsKKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7CisJCWRlbF9nZW5kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJCXB1dF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJfQorCisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKworCWJsa19jbGVhbnVwX3F1ZXVlKHN3ZC0+cXVldWUpOworCisJLyogZWplY3QgZmxvcHBpZXMgKi8KKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKQorCQlmbG9wcHlfZWplY3QoJnN3ZC0+dW5pdFtkcml2ZV0pOworCisJaW91bm1hcChzd2QtPmJhc2UpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7CisJLnByb2JlICA9IHN3aW1fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHN3aW1fcmVtb3ZlKSwKKwkuZHJpdmVyICAgPSB7CisJCS5uYW1lCT0gQ0FSRE5BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzd2ltX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJTV0lNIGZsb3BweSBkcml2ZXIgJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN3aW1fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHN3aW1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzd2ltX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3dpbV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc3dpbV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhdXJlbnQgVml2aWVyIDxsYXVyZW50QGx2aXZpZXIuaW5mbz4iKTsKK01PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihGTE9QUFlfTUFKT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjY4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBsb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlcgorICoKKyAqIG5lZWRzIGFzc2VtYmx5IGxhbmd1YWdlIGJlY2F1c2UgaXMgdmVyeSB0aW1pbmcgZGVwZW5kZW50CisgKiB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzIG9ubHkgb24gbWFjaW50b3NoIDY4MHgwIGJhc2VkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTExLTA1IChsdikgLSBhZGQgZ2V0X3N3aW1fbW9kZQorICovCisKKwkuZXF1CXdyaXRlX2RhdGEsCTB4MDAwMAorCS5lcXUJd3JpdGVfbWFyaywJMHgwMjAwCisJLmVxdQl3cml0ZV9DUkMsCTB4MDQwMAorCS5lcXUJd3JpdGVfcGFyYW1ldGVyLDB4MDYwMAorCS5lcXUJd3JpdGVfcGhhc2UsCTB4MDgwMAorCS5lcXUJd3JpdGVfc2V0dXAsCTB4MGEwMAorCS5lcXUJd3JpdGVfbW9kZTAsCTB4MGMwMAorCS5lcXUJd3JpdGVfbW9kZTEsCTB4MGUwMAorCS5lcXUJcmVhZF9kYXRhLAkweDEwMDAKKwkuZXF1CXJlYWRfbWFyaywJMHgxMjAwCisJLmVxdQlyZWFkX2Vycm9yLAkweDE0MDAKKwkuZXF1CXJlYWRfcGFyYW1ldGVyLAkweDE2MDAKKwkuZXF1CXJlYWRfcGhhc2UsCTB4MTgwMAorCS5lcXUJcmVhZF9zZXR1cCwJMHgxYTAwCisJLmVxdQlyZWFkX3N0YXR1cywJMHgxYzAwCisJLmVxdQlyZWFkX2hhbmRzaGFrZSwJMHgxZTAwCisKKwkuZXF1CW9fc2lkZSwgMAorCS5lcXUJb190cmFjaywgMQorCS5lcXUJb19zZWN0b3IsIDIKKwkuZXF1CW9fc2l6ZSwgMworCS5lcXUJb19jcmMwLCA0CisJLmVxdQlvX2NyYzEsIDUKKworCS5lcXUJc2Vla190aW1lLCAzMDAwMAorCS5lcXUJbWF4X3JldHJ5LCA0MAorCS5lcXUJc2VjdG9yX3NpemUsIDUxMgorCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcgorc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXI6CisJbGluawklYTYsICMwCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhNCwlc3BALQorCW1vdmVsCSVhNkAoMHgwYyksICVhNAorCWJzcgltZm1fcmVhZF9hZGRybWFyaworCW1vdmVtbAklc3BAKywgJWQxLSVkNS8lYTAtJWE0CisJdW5sawklYTYKKwlydHMKKworc2VjdG9yX2FkZHJlc3NfbWFyazoKKwkuYnl0ZQkweGExLCAweGExLCAweGExLCAweGZlCitzZWN0b3JfZGF0YV9tYXJrOgorCS5ieXRlCTB4YTEsIDB4YTEsIDB4YTEsIDB4ZmIKKworbWZtX3JlYWRfYWRkcm1hcms6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3ZlcQkjLTEsICVkMAorCW1vdmV3CSNzZWVrX3RpbWUsICVkMgorCit3YWl0X2hlYWRlcl9pbml0OgorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCisJbGVhCXNlY3Rvcl9hZGRyZXNzX21hcmssICVhMAorCW1vdmVxCSMzLCAlZDEKKword2FpdF9hZGRyX21hcmtfYnl0ZToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCB3YWl0X2FkZHJfbWFya19ieXRlCisJYnBsCWhlYWRlcl9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZQorCWJuZQl3YWl0X2hlYWRlcl9pbml0CisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmswOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmswCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3RyYWNrKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMToJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zaWRlKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMjoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMgorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zZWN0b3IpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmszOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmszCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3NpemUpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworY3JjMDoJdHN0YgklYTJACisJZGJtaQklZDIsIGNyYzAKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fY3JjMCkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitjcmMxOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgY3JjMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19jcmMxKQorCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKK2hlYWRlcl9leGl0OgorCW1vdmVxCSMwLCAlZDAKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwlydHMKK3NpZ25hbF9ub255YjoKKwltb3ZlcQkjLTEsICVkMAorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXJ0cworCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEKK3N3aW1fcmVhZF9zZWN0b3JfZGF0YToKKwlsaW5rCSVhNiwgIzAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWE1LCVzcEAtCisJbW92ZWwJJWE2QCgweDBjKSwgJWE0CisJYnNyCW1mbV9yZWFkX2RhdGEKKwltb3ZlbWwJJXNwQCssICVkMS0lZDUvJWEwLSVhNQorCXVubGsJJWE2CisJcnRzCisKK21mbV9yZWFkX2RhdGE6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX2RhdGEpLCAlYTUKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3Zldwkjc2Vla190aW1lLCAlZDIKKword2FpdF9kYXRhX2luaXQ6CisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisKKwlsZWEJc2VjdG9yX2RhdGFfbWFyaywgJWEwCisJbW92ZXEJIzMsICVkMQorCisJLyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqLworCit3YWl0X2RhdGFfbWFya19ieXRlOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIHdhaXRfZGF0YV9tYXJrX2J5dGUKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9kYXRhX21hcmtfYnl0ZQorCWJuZQl3YWl0X2RhdGFfaW5pdAorCisJLyogcmVhZCBkYXRhICovCisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworCW1vdmVsCSNzZWN0b3Jfc2l6ZS0xLCAlZDQJCS8qIHNlY3RvciBzaXplICovCityZWFkX25ld19kYXRhOgorCW1vdmV3CSNtYXhfcmV0cnksICVkMgorcmVhZF9kYXRhX2xvb3A6CisJbW92ZWIJJWEyQCwgJWQ1CisJYW5kYgkjMHhjMCwgJWQ1CisJZGJuZQklZDIsIHJlYWRfZGF0YV9sb29wCisJYmVxCWRhdGFfZXhpdAorCW1vdmViCSVhNUAsICVhNEArCisJYW5kYgkjMHg0MCwgJWQ1CisJZGJuZQklZDQsIHJlYWRfbmV3X2RhdGEKKwliZXEJZXhpdF9sb29wCisJbW92ZWIJJWE1QCwgJWE0QCsKKwlkYnJhCSVkNCwgcmVhZF9uZXdfZGF0YQorZXhpdF9sb29wOgorCisJLyogcmVhZCBDUkMgKi8KKworCW1vdmV3CSNtYXhfcmV0cnksICVkMgorZGF0YV9jcmMwOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIGRhdGFfY3JjMAorCWJwbAlkYXRhX2V4aXQKKworCW1vdmViCSVhM0AsICVkNQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2RhdGFfY3JjMToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCBkYXRhX2NyYzEKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDUKKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisKKwkvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KKworCW1vdmVsCSNzZWN0b3Jfc2l6ZSwgJWQwCisJYWRkdwkjMSwgJWQ0CisJc3VibAklZDQsICVkMAorCXJ0cworZGF0YV9leGl0OgorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmVxCSMtMSwgJWQwCisJcnRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggMTJmYjgxNi4uNjliN2Y4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLSNkZWZpbmUgdWJfdXNiX2lkcyAgc3RvcmFnZV91c2JfaWRzCisjZGVmaW5lIHViX3VzYl9pZHMgIHVzYl9zdG9yYWdlX3VzYl9pZHMKICNlbHNlCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1Yl91c2JfaWRzW10gPSB7CkBAIC0yMTQ2LDEwICsyMTQ2LDkgQEAKIAkJZXAgPSAmYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYzsKIAogCQkvKiBJcyBpdCBhIEJVTEsgZW5kcG9pbnQ/ICovCi0JCWlmICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXApKSB7CiAJCQkvKiBCVUxLIGluIG9yIG91dD8gKi8KLQkJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkgewogCQkJCWlmIChlcF9pbiA9PSBOVUxMKQogCQkJCQllcF9pbiA9IGVwOwogCQkJfSBlbHNlIHsKQEAgLTIxNjgsOSArMjE2Nyw5IEBACiAJc2MtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAlzYy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKaW5kZXggMzgxZDY4Ni4uMTE5YmUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKKysrIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKQEAgLTQ4OSw2ICs0ODksMjggQEAKIAkJYWNlLT5mc21fc3RhdGUsIGFjZS0+aWRfcmVxX2NvdW50KTsKICNlbmRpZgogCisJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYWN0dWFsbHkgYSBDRiBpbiB0aGUgc2xvdC4gSWYgbm90LCB0aGVuCisJICogYmFpbCBvdXQgYmFjayB0byB0aGUgaWRsZSBzdGF0ZSBhbmQgd2FrZSB1cCBhbGwgdGhlIHdhaXRlcnMgKi8KKwlzdGF0dXMgPSBhY2VfaW4zMihhY2UsIEFDRV9TVEFUVVMpOworCWlmICgoc3RhdHVzICYgQUNFX1NUQVRVU19DRkRFVEVDVCkgPT0gMCkgeworCQlhY2UtPmZzbV9zdGF0ZSA9IEFDRV9GU01fU1RBVEVfSURMRTsKKwkJYWNlLT5tZWRpYV9jaGFuZ2UgPSAxOworCQlzZXRfY2FwYWNpdHkoYWNlLT5nZCwgMCk7CisJCWRldl9pbmZvKGFjZS0+ZGV2LCAiTm8gQ0YgaW4gc2xvdFxuIik7CisKKwkJLyogRHJvcCBhbGwgcGVuZGluZyByZXF1ZXN0cyAqLworCQl3aGlsZSAoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QoYWNlLT5xdWV1ZSkpICE9IE5VTEwpCisJCQllbmRfcmVxdWVzdChyZXEsIDApOworCisJCS8qIERyb3AgYmFjayB0byBJRExFIHN0YXRlIGFuZCBub3RpZnkgd2FpdGVycyAqLworCQlhY2UtPmZzbV9zdGF0ZSA9IEFDRV9GU01fU1RBVEVfSURMRTsKKwkJYWNlLT5pZF9yZXN1bHQgPSAtRUlPOworCQl3aGlsZSAoYWNlLT5pZF9yZXFfY291bnQpIHsKKwkJCWNvbXBsZXRlKCZhY2UtPmlkX2NvbXBsZXRpb24pOworCQkJYWNlLT5pZF9yZXFfY291bnQtLTsKKwkJfQorCX0KKwogCXN3aXRjaCAoYWNlLT5mc21fc3RhdGUpIHsKIAljYXNlIEFDRV9GU01fU1RBVEVfSURMRToKIAkJLyogU2VlIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGRvICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwppbmRleCBkM2YxNGJlLi4yYTAwNzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKQEAgLTI1Nyw4ICsyNTcsNyBAQAogCiAJaWYgKGhkciAmIDB4MTApIHsKIAkJQlRfRVJSKCIlcyBlcnJvciBpbiBibG9jayIsIGRhdGEtPmhkZXYtPm5hbWUpOwotCQlpZiAoZGF0YS0+cmVhc3NlbWJseSkKLQkJCWtmcmVlX3NrYihkYXRhLT5yZWFzc2VtYmx5KTsKKwkJa2ZyZWVfc2tiKGRhdGEtPnJlYXNzZW1ibHkpOwogCQlkYXRhLT5yZWFzc2VtYmx5ID0gTlVMTDsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCmluZGV4IGZmMTk1YzIuLmQ1OGUyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKQEAgLTM1OSw5ICszNTksOSBAQAogCQkJQlRfRVJSKCJWZXJ5IHN0cmFuZ2UgKHN0YXQ9MHglMDR4KSIsIHN0YXQpOwogCQl9IGVsc2UgaWYgKChzdGF0ICYgMHhmZikgIT0gMHhmZikgewogCQkJaWYgKHN0YXQgJiAweDAwMjApIHsKLQkJCQlpbnQgc3RhdCA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwMikgJiAweDEwOworCQkJCWludCBzdGF0dXMgPSBidDNjX3JlYWQoaW9iYXNlLCAweDcwMDIpICYgMHgxMDsKIAkJCQlCVF9JTkZPKCIlczogQW50ZW5uYSAlcyIsIGluZm8tPmhkZXYtPm5hbWUsCi0JCQkJCQkJc3RhdCA/ICJvdXQiIDogImluIik7CisJCQkJCQkJc3RhdHVzID8gIm91dCIgOiAiaW4iKTsKIAkJCX0KIAkJCWlmIChzdGF0ICYgMHgwMDAxKQogCQkJCWJ0M2NfcmVjZWl2ZShpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IGI1ZmJkYTYuLmU3MGM1N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuNCIKKyNkZWZpbmUgVkVSU0lPTiAiMC41IgogCiBzdGF0aWMgaW50IGlnbm9yZV9kZ2E7CiBzdGF0aWMgaW50IGlnbm9yZV9jc3I7CkBAIC0xNzEsNiArMTcxLDcgQEAKIAogCV9fdTggY21kcmVxX3R5cGU7CiAKKwl1bnNpZ25lZCBpbnQgc2NvX251bTsKIAlpbnQgaXNvY19hbHRzZXR0aW5nOwogCWludCBzdXNwZW5kX2NvdW50OwogfTsKQEAgLTQ5NiwxMSArNDk3LDIzIEBACiAJCXJldHVybiAwOwogCiAJZXJyID0gYnR1c2Jfc3VibWl0X2ludHJfdXJiKGhkZXYsIEdGUF9LRVJORUwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWVyciA9IGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKIAlpZiAoZXJyIDwgMCkgewotCQljbGVhcl9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQljbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7CisJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmludHJfYW5jaG9yKTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCisJc2V0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CisJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwljbGVhcl9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOworCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02NTUsMTkgKzY2OCwxMCBAQAogCiAJQlRfREJHKCIlcyBldnQgJWQiLCBoZGV2LT5uYW1lLCBldnQpOwogCi0JaWYgKGhkZXYtPmNvbm5faGFzaC5hY2xfbnVtID4gMCkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKSB7Ci0JCQlpZiAoYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9BVE9NSUMpIDwgMCkKLQkJCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQkJZWxzZQotCQkJCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfQVRPTUlDKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCXVzYl91bmxpbmtfYW5jaG9yZWRfdXJicygmZGF0YS0+YnVsa19hbmNob3IpOworCWlmIChoZGV2LT5jb25uX2hhc2guc2NvX251bSAhPSBkYXRhLT5zY29fbnVtKSB7CisJCWRhdGEtPnNjb19udW0gPSBoZGV2LT5jb25uX2hhc2guc2NvX251bTsKKwkJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CiAJfQotCi0Jc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CiB9CiAKIHN0YXRpYyBpbnQgaW5saW5lIF9fc2V0X2lzb2NfaW50ZXJmYWNlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgYWx0c2V0dGluZykKQEAgLTk4Miw5ICs5ODYsMTEgQEAKIAl9CiAKIAlpZiAodGVzdF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKSB7Ci0JCWlmIChidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pIDwgMCkKKwkJZXJyID0gYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKTsKKwkJaWYgKGVyciA8IDApIHsKIAkJCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCWVsc2UKKwkJCXJldHVybiBlcnI7CisJCX0gZWxzZQogCQkJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKaW5kZXggYjBmYWZiMC4uYzBjZTgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKQEAgLTEwMiw4ICsxMDIsNyBAQAogCiAJc2tiX3F1ZXVlX3B1cmdlKCZoNC0+dHhxKTsKIAotCWlmIChoNC0+cnhfc2tiKQotCQlrZnJlZV9za2IoaDQtPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGg0LT5yeF9za2IpOwogCiAJaHUtPnByaXYgPSBOVUxMOwogCWtmcmVlKGg0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMKaW5kZXggYjkxZDQ1YS4uNWM2NTAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMKQEAgLTE2Myw4ICsxNjMsNyBAQAogCXNrYl9xdWV1ZV9wdXJnZSgmbGwtPnR4X3dhaXRfcSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZsbC0+dHhxKTsKIAotCWlmIChsbC0+cnhfc2tiKQotCQlrZnJlZV9za2IobGwtPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGxsLT5yeF9za2IpOwogCiAJaHUtPnByaXYgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA0MzczYWRiLi45ZDk0OTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTI2LDYgKzI2LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NjVHTUVfSUcgICAgIDB4MkExMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01FX0hCICAgICAweDI3QUMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNRV9JRyAgICAgMHgyN0FFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER01fSEIgICAgICAgIDB4QTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0lHICAgICAgICAweEEwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0hCICAgICAgICAgMHhBMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER19JRyAgICAgICAgIDB4QTAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0czM19IQiAgICAgICAgICAweDI5QzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9HMzNfSUcgICAgICAgICAgMHgyOUMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUTM1X0hCICAgICAgICAgIDB4MjlCMApAQCAtNjAsNyArNjQsMTIgQEAKIAogI2RlZmluZSBJU19HMzMgKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRzMzX0hCIHx8IFwKIAkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9RMzVfSEIgfHwgXAotCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19IQikKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9RMzNfSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0hCKQorCisjZGVmaW5lIElTX0lHRCAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHTV9IQiB8fCBcCisJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER19IQikKIAogI2RlZmluZSBJU19HNFggKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdEX0VfSEIgfHwgXAogCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1E0NV9IQiB8fCBcCkBAIC01MTAsNyArNTE5LDcgQEAKIAkJCXNpemUgPSA1MTI7CiAJCX0KIAkJc2l6ZSArPSA0OyAvKiBhZGQgaW4gQklPUyBwb3B1cCBzcGFjZSAqLwotCX0gZWxzZSBpZiAoSVNfRzMzKSB7CisJfSBlbHNlIGlmIChJU19HMzMgJiYgIUlTX0lHRCkgewogCS8qIEczMydzIEdUVCBzaXplIGRlZmluZWQgaW4gZ21jaF9jdHJsICovCiAJCXN3aXRjaCAoZ21jaF9jdHJsICYgRzMzX1BHRVRCTF9TSVpFX01BU0spIHsKIAkJY2FzZSBHMzNfUEdFVEJMX1NJWkVfMU06CkBAIC01MjYsNyArNTM1LDcgQEAKIAkJCXNpemUgPSA1MTI7CiAJCX0KIAkJc2l6ZSArPSA0OwotCX0gZWxzZSBpZiAoSVNfRzRYKSB7CisJfSBlbHNlIGlmIChJU19HNFggfHwgSVNfSUdEKSB7CiAJCS8qIE9uIDQgc2VyaWVzIGhhcmR3YXJlLCBHVFQgc3RvbGVuIGlzIHNlcGFyYXRlIGZyb20gZ3JhcGhpY3MKIAkJICogc3RvbGVuLCBpZ25vcmUgaXQgaW4gc3RvbGVuIGd0dCBlbnRyaWVzIGNvdW50aW5nLiAgSG93ZXZlciwKIAkJICogNEtCIG9mIHRoZSBzdG9sZW4gbWVtb3J5IGRvZXNuJ3QgZ2V0IG1hcHBlZCB0byB0aGUgR1RULgpAQCAtMjE2MSw2ICsyMTcwLDEwIEBACiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9RMzNfSUcsIDAsICJRMzMiLAogCQlOVUxMLCAmaW50ZWxfZzMzX2RyaXZlciB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHTV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHTV9JRywgMCwgIklHRCIsCisJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER19JRywgMCwgIklHRCIsCisJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0dNNDVfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfR000NV9JRywgMCwKIAkgICAgIk1vYmlsZSBJbnRlbMKuIEdNNDUgRXhwcmVzcyIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9JRywgMCwKQEAgLTIzNTUsNiArMjM2OCw4IEBACiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHTV9IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNRV9IQiksCisJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHTV9IQiksCisJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0hCKSwKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ2R1pfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfODJHMzVfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NjVRX0hCKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKaW5kZXggZGI2MDUzOS4uNjk5ZTM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKQEAgLTM1OSw5ICszNTksMTYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpuZXh0X2RldmljZShzdHJ1Y3Qga2xpc3RfaXRlciAqaSkgewotCXN0cnVjdCBrbGlzdF9ub2RlICogbiA9IGtsaXN0X25leHQoaSk7Ci0JcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KSA6IE5VTEw7CitzdGF0aWMgaW50CitmaW5kX3F1aWNrc2lsdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqKmxiYSA9IGRhdGE7CisJc3RydWN0IHBhcmlzY19kZXZpY2UgKnBhZGV2ID0gdG9fcGFyaXNjX2RldmljZShkZXYpOworCisJaWYgKElTX1FVSUNLU0lMVkVSKHBhZGV2KSkKKwkJKmxiYSA9IHBhZGV2OworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTM3Miw4ICszNzksNiBAQAogCWludCBlcnIgPSAtMTsKIAlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqc2JhID0gTlVMTCwgKmxiYSA9IE5VTEw7CiAJc3RydWN0IGxiYV9kZXZpY2UgKmxiYWRldiA9IE5VTEw7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKLQlzdHJ1Y3Qga2xpc3RfaXRlciBpOwogCiAJaWYgKCFzYmFfbGlzdCkKIAkJZ290byBvdXQ7CkBAIC0zODYsMTMgKzM5MSw3IEBACiAJfQogCiAJLyogTm93IHNlYXJjaCBvdXIgUGx1dG8gZm9yIG91ciBwcmVjaW91cyBBR1AgZGV2aWNlLi4uICovCi0Ja2xpc3RfaXRlcl9pbml0KCZzYmEtPmRldi5rbGlzdF9jaGlsZHJlbiwgJmkpOwotCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkgewotCQlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqcGFkZXYgPSB0b19wYXJpc2NfZGV2aWNlKGRldik7Ci0JCWlmIChJU19RVUlDS1NJTFZFUihwYWRldikpCi0JCQlsYmEgPSBwYWRldjsKLQl9Ci0Ja2xpc3RfaXRlcl9leGl0KCZpKTsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnNiYS0+ZGV2LCAmbGJhLCBmaW5kX3F1aWNrc2lsdmVyKTsKIAogCWlmICghbGJhKSB7CiAJCXByaW50ayhLRVJOX0lORk8gRFJWUEZYICJObyBBR1AgZGV2aWNlcyBmb3VuZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCBhNTM0OTY4Li41NDQ4MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMTMsMTAgKzEzLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxuZXQvaXVjdi9pdWN2Lmg+CkBAIC05NSw2ICs5NiwxMiBAQAogLyogQXJyYXkgb2YgYWxsb2NhdGVkIGh2YyBpdWN2IHR0eSBsaW5lcy4uLiAqLwogc3RhdGljIHN0cnVjdCBodmNfaXVjdl9wcml2YXRlICpodmNfaXVjdl90YWJsZVtNQVhfSFZDX0lVQ1ZfTElORVNdOwogI2RlZmluZSBJVUNWX0hWQ19DT05fSURYCSgwKQorLyogTGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMgKHN0cnVjdCBpdWN2X3ZtaWRfZmlsdGVyKSAqLworI2RlZmluZSBNQVhfVk1JRF9GSUxURVIJCSg1MDApCitzdGF0aWMgc2l6ZV90IGh2Y19pdWN2X2ZpbHRlcl9zaXplOworc3RhdGljIHZvaWQgKmh2Y19pdWN2X2ZpbHRlcjsKK3N0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9maWx0ZXJfc3RyaW5nOworc3RhdGljIERFRklORV9SV0xPQ0soaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOwogCiAvKiBLbWVtIGNhY2hlIGFuZCBtZW1wb29sIGZvciBpdWN2X3R0eV9idWZmZXIgZWxlbWVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlOwpAQCAtNjE4LDYgKzYyNSwyNyBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKCkgLSBGaWx0ZXIgY29ubmVjdGlvbiByZXF1ZXN0IGJhc2VkIG9uIHovVk0gdXNlciBJRAorICogQGlwdm1pZDoJT3JpZ2luYXRpbmcgei9WTSB1c2VyIElEIChyaWdodCBwYWRkZWQgd2l0aCBibGFua3MpCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB6L1ZNIHVzZXIgSUQgQGlwdm1pZCBpcyBhbGxvd2VkIHRvIGNvbm5lY3Rpb24sIG90aGVyd2lzZQorICogbm9uLXplcm8uCisgKi8KK3N0YXRpYyBpbnQgaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEodTggaXB2bWlkWzhdKQoreworCXNpemVfdCBpOworCisJLyogTm90ZTogZGVmYXVsdCBwb2xpY3kgaXMgQUNDRVBUIGlmIG5vIGZpbHRlciBpcyBzZXQgKi8KKwlpZiAoIWh2Y19pdWN2X2ZpbHRlcl9zaXplKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaSsrKQorCQlpZiAoMCA9PSBtZW1jbXAoaXB2bWlkLCBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGkpLCA4KSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKICAqIGh2Y19pdWN2X3BhdGhfcGVuZGluZygpIC0gSVVDViBoYW5kbGVyIHRvIHByb2Nlc3MgYSBjb25uZWN0aW9uIHJlcXVlc3QuCiAgKiBAcGF0aDoJUGVuZGluZyBwYXRoIChzdHJ1Y3QgaXVjdl9wYXRoKQogICogQGlwdm1pZDoJei9WTSBzeXN0ZW0gaWRlbnRpZmllciBvZiBvcmlnaW5hdG9yCkBAIC02NDEsNiArNjY5LDcgQEAKIHsKIAlzdHJ1Y3QgaHZjX2l1Y3ZfcHJpdmF0ZSAqcHJpdjsKIAl1OCBudXNlcl9kYXRhWzE2XTsKKwl1OCB2bV91c2VyX2lkWzldOwogCWludCBpLCByYzsKIAogCXByaXYgPSBOVUxMOwpAQCAtNjUzLDYgKzY4MiwyMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBFbmZvcmNlIHRoYXQgaXB2bWlkIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB1cyAqLworCXJlYWRfbG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCXJjID0gaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEoaXB2bWlkKTsKKwlyZWFkX3VubG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykgeworCQlpdWN2X3BhdGhfc2V2ZXIocGF0aCwgaXB1c2VyKTsKKwkJaXVjdl9wYXRoX2ZyZWUocGF0aCk7CisJCW1lbWNweSh2bV91c2VyX2lkLCBpcHZtaWQsIDgpOworCQl2bV91c2VyX2lkWzhdID0gMDsKKwkJcHJfaW5mbygiQSBjb25uZWN0aW9uIHJlcXVlc3QgZnJvbSB6L1ZNIHVzZXIgSUQgJXMgIgorCQkJIndhcyByZWZ1c2VkXG4iLCB2bV91c2VyX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCS8qIElmIHRoZSB0ZXJtaW5hbCBpcyBhbHJlYWR5IGNvbm5lY3RlZCBvciBiZWluZyBzZXZlcmVkLCB0aGVuIHNldmVyCkBAIC04NzcsNiArOTIwLDE3MSBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X3BhcnNlX2ZpbHRlcigpIC0gUGFyc2UgZmlsdGVyIGZvciBhIHNpbmdsZSB6L1ZNIHVzZXIgSUQKKyAqIEBmaWx0ZXI6CVN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICovCitzdGF0aWMgY29uc3QgY2hhciAqaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKGNvbnN0IGNoYXIgKmZpbHRlciwgY2hhciAqZGVzdCkKK3sKKwljb25zdCBjaGFyICpuZXh0ZGVsaW0sICpyZXNpZHVhbDsKKwlzaXplX3QgbGVuOworCisJbmV4dGRlbGltID0gc3RyY2hyKGZpbHRlciwgJywnKTsKKwlpZiAobmV4dGRlbGltKSB7CisJCWxlbiA9IG5leHRkZWxpbSAtIGZpbHRlcjsKKwkJcmVzaWR1YWwgPSBuZXh0ZGVsaW0gKyAxOworCX0gZWxzZSB7CisJCWxlbiA9IHN0cmxlbihmaWx0ZXIpOworCQlyZXNpZHVhbCA9IGZpbHRlciArIGxlbjsKKwl9CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogY2hlY2sgZm9yICdcbicgKGlmIGNhbGxlZCBmcm9tIHN5c2ZzKSAqLworCWlmIChmaWx0ZXJbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlpZiAobGVuID4gOCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBwYWQgd2l0aCBibGFua3MgYW5kIHNhdmUgdXBwZXIgY2FzZSB2ZXJzaW9uIG9mIHVzZXIgSUQgKi8KKwltZW1zZXQoZGVzdCwgJyAnLCA4KTsKKwl3aGlsZSAobGVuLS0pCisJCWRlc3RbbGVuXSA9IHRvdXBwZXIoZmlsdGVyW2xlbl0pOworCXJldHVybiByZXNpZHVhbDsKK30KKworLyoqCisgKiBodmNfaXVjdl9zZXR1cF9maWx0ZXIoKSAtIFNldCB1cCB6L1ZNIHVzZXIgSUQgZmlsdGVyCisgKiBAZmlsdGVyOglTdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqCisgKiBUaGUgZnVuY3Rpb24gcGFyc2VzIHRoZSBAZmlsdGVyIHN0cmluZyBhbmQgY3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nCisgKiB0aGUgbGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMuCisgKiBSZXR1cm4gY29kZSAwIG1lYW5zIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIGZpbHRlciBpcyBzeW50YWN0aWNhbGx5CisgKiBpbmNvcnJlY3QsIC1FTk9NRU0gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHRoZQorICogZmlsdGVyIGxpc3QgYXJyYXksIG9yIC1FTk9TUEMgaWYgdG9vIG1hbnkgei9WTSB1c2VyIElEcyBoYXZlIGJlZW4gc3BlY2lmaWVkLgorICovCitzdGF0aWMgaW50IGh2Y19pdWN2X3NldHVwX2ZpbHRlcihjb25zdCBjaGFyICp2YWwpCit7CisJY29uc3QgY2hhciAqcmVzaWR1YWw7CisJaW50IGVycjsKKwlzaXplX3Qgc2l6ZSwgY291bnQ7CisJdm9pZCAqYXJyYXksICpvbGRfZmlsdGVyOworCisJY291bnQgPSBzdHJsZW4odmFsKTsKKwlpZiAoY291bnQgPT0gMCB8fCAoY291bnQgPT0gMSAmJiB2YWxbMF0gPT0gJ1xuJykpIHsKKwkJc2l6ZSAgPSAwOworCQlhcnJheSA9IE5VTEw7CisJCWdvdG8gb3V0X3JlcGxhY2VfZmlsdGVyOwkvKiBjbGVhciBmaWx0ZXIgKi8KKwl9CisKKwkvKiBjb3VudCB1c2VyIElEcyBpbiBvcmRlciB0byBhbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSAqLworCXNpemUgPSAxOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgocmVzaWR1YWwgPSBzdHJjaHIocmVzaWR1YWwsICcsJykpICE9IE5VTEwpIHsKKwkJcmVzaWR1YWwrKzsKKwkJc2l6ZSsrOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgbGlzdCBleGNlZWRzIHRoZSBmaWx0ZXIgbGltaXQgKi8KKwlpZiAoc2l6ZSA+IE1BWF9WTUlEX0ZJTFRFUikKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlhcnJheSA9IGt6YWxsb2Moc2l6ZSAqIDgsIEdGUF9LRVJORUwpOworCWlmICghYXJyYXkpCisJCXJldHVybiAtRU5PTUVNOworCisJY291bnQgPSBzaXplOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgqcmVzaWR1YWwgJiYgY291bnQpIHsKKwkJcmVzaWR1YWwgPSBodmNfaXVjdl9wYXJzZV9maWx0ZXIocmVzaWR1YWwsCisJCQkJCQkgYXJyYXkgKyAoKHNpemUgLSBjb3VudCkgKiA4KSk7CisJCWlmIChJU19FUlIocmVzaWR1YWwpKSB7CisJCQllcnIgPSBQVFJfRVJSKHJlc2lkdWFsKTsKKwkJCWtmcmVlKGFycmF5KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQljb3VudC0tOworCX0KKworb3V0X3JlcGxhY2VfZmlsdGVyOgorCXdyaXRlX2xvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlvbGRfZmlsdGVyID0gaHZjX2l1Y3ZfZmlsdGVyOworCWh2Y19pdWN2X2ZpbHRlcl9zaXplID0gc2l6ZTsKKwlodmNfaXVjdl9maWx0ZXIgPSBhcnJheTsKKwl3cml0ZV91bmxvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlrZnJlZShvbGRfZmlsdGVyKTsKKworCWVyciA9IDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoKSAtIFNldCB6L1ZNIHVzZXIgSUQgZmlsdGVyIHBhcmFtZXRlcgorICogQHZhbDoJU3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKiBAa3A6CQlLZXJuZWwgcGFyYW1ldGVyIHBvaW50aW5nIHRvIGh2Y19pdWN2X2ZpbHRlciBhcnJheQorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIHVwIHRoZSB6L1ZNIHVzZXIgSUQgZmlsdGVyIHNwZWNpZmllZCBhcyBjb21tYS1zZXBhcmF0ZWQKKyAqIGxpc3Qgb2YgdXNlciBJRHMgaW4gQHZhbC4KKyAqIE5vdGU6IElmIGl0IGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCBAdmFsIGlzIHN0b3JlZCBhbmQKKyAqCSBwYXJzZWQgbGF0ZXIgaW4gaHZjX2l1Y3ZfaW5pdCgpLgorICovCitzdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJjOworCisJaWYgKCFNQUNISU5FX0lTX1ZNIHx8ICFodmNfaXVjdl9kZXZpY2VzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghdmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gMDsKKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKKwkJcmMgPSBodmNfaXVjdl9zZXR1cF9maWx0ZXIodmFsKTsKKwllbHNlCisJCWh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcgPSB2YWw7CS8qIGRlZmVyLi4uICovCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBhcmFtX2dldF92bWlkZmlsdGVyKCkgLSBHZXQgei9WTSB1c2VyIElEIGZpbHRlcgorICogQGJ1ZmZlcjoJQnVmZmVyIHRvIHN0b3JlIHovVk0gdXNlciBJRCBmaWx0ZXIsCisgKgkJKGJ1ZmZlciBzaXplIGFzc3VtcHRpb24gUEFHRV9TSVpFKQorICogQGtwOgkJS2VybmVsIHBhcmFtZXRlciBwb2ludGluZyB0byB0aGUgaHZjX2l1Y3ZfZmlsdGVyIGFycmF5CisgKgorICogVGhlIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZmlsdGVyIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICogaW4gQGJ1ZmZlci4gVHlwaWNhbGx5LCBzeXNmcyByb3V0aW5lcyBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGF0dHIgc2hvdy4KKyAqLworc3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByYzsKKwlzaXplX3QgaW5kZXgsIGxlbjsKKwl2b2lkICpzdGFydCwgKmVuZDsKKworCWlmICghTUFDSElORV9JU19WTSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYyA9IDA7CisJcmVhZF9sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7IGluZGV4KyspIHsKKwkJc3RhcnQgPSBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGluZGV4KTsKKwkJZW5kICAgPSBtZW1jaHIoc3RhcnQsICcgJywgOCk7CisJCWxlbiAgID0gKGVuZCkgPyBlbmQgLSBzdGFydCA6IDg7CisJCW1lbWNweShidWZmZXIgKyByYywgc3RhcnQsIGxlbik7CisJCXJjICs9IGxlbjsKKwkJYnVmZmVyW3JjKytdID0gJywnOworCX0KKwlyZWFkX3VubG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykKKwkJYnVmZmVyWy0tcmNdID0gJ1wwJzsJLyogcmVwbGFjZSBsYXN0IGNvbW1hIGFuZCB1cGRhdGUgcmMgKi8KKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfdm1pZGZpbHRlcihuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHZvaWQpCisKKy8qKgogICogaHZjX2l1Y3ZfaW5pdCgpIC0gei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZCkKQEAgLTg4NCwyNCArMTA5Miw1MyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICghTUFDSElORV9JU19WTSkgewotCQlwcl9pbmZvKCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCAiCi0JCQkgICAiYmUgdXNlZCB3aXRob3V0IHovVk1cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlpZiAoIWh2Y19pdWN2X2RldmljZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghTUFDSElORV9JU19WTSkgeworCQlwcl9ub3RpY2UoIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90ICIKKwkJCSAgICJiZSB1c2VkIHdpdGhvdXQgei9WTVxuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpIHsKKwkJcHJfZXJyKCIlbHUgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoZSBodmNfaXVjdj0gIgorCQkJImtlcm5lbCBwYXJhbWV0ZXJcbiIsIGh2Y19pdWN2X2RldmljZXMpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIHBhcnNlIGh2Y19pdWN2X2FsbG93IHN0cmluZyBhbmQgY3JlYXRlIHovVk0gdXNlciBJRCBmaWx0ZXIgbGlzdCAqLworCWlmIChodmNfaXVjdl9maWx0ZXJfc3RyaW5nKSB7CisJCXJjID0gaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKGh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoICIKKwkJCQkicmVhc29uIGNvZGU9JWRcbiIsIDMpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWNhc2UgLUVJTlZBTDoKKwkJCXByX2VycigiaHZjX2l1Y3ZfYWxsb3c9IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCAiCisJCQkJInovVk0gdXNlciBJRCBsaXN0XG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQljYXNlIC1FTk9TUEM6CisJCQlwcl9lcnIoImh2Y19pdWN2X2FsbG93PSBzcGVjaWZpZXMgdG9vIG1hbnkgIgorCQkJCSJ6L1ZNIHVzZXIgSURzXG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKwl9CiAKIAlodmNfaXVjdl9idWZmZXJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShLTVNHX0NPTVBPTkVOVCwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpdWN2X3R0eV9idWZmZXIpLAogCQkJCQkgICAwLCAwLCBOVUxMKTsKIAlpZiAoIWh2Y19pdWN2X2J1ZmZlcl9jYWNoZSkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoIHJlYXNvbiBjb2RlPSVkXG4iLCAxKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCiAJaHZjX2l1Y3ZfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNRU1QT09MX01JTl9OUiwKQEAgLTkwOSw3ICsxMTQ2LDggQEAKIAlpZiAoIWh2Y19pdWN2X21lbXBvb2wpIHsKIAkJcHJfZXJyKCJBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQgd2l0aCByZWFzb24gY29kZT0lZFxuIiwgMik7CiAJCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZmlyc3QgdGVybWluYWwgZGV2aWNlIGFzIGNvbnNvbGUKQEAgLTk1Myw2ICsxMTkxLDggQEAKIG91dF9lcnJvcl9tZW1vcnk6CiAJbWVtcG9vbF9kZXN0cm95KGh2Y19pdWN2X21lbXBvb2wpOwogCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOworb3V0X2Vycm9yOgorCWh2Y19pdWN2X2RldmljZXMgPSAwOyAvKiBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgZGV2aWNlICovCiAJcmV0dXJuIHJjOwogfQogCkBAIC05NjgsMyArMTIwOCw0IEBACiAKIGRldmljZV9pbml0Y2FsbChodmNfaXVjdl9pbml0KTsKIF9fc2V0dXAoImh2Y19pdWN2PSIsIGh2Y19pdWN2X2NvbmZpZyk7Citjb3JlX3BhcmFtKGh2Y19pdWN2X2FsbG93LCBodmNfaXVjdl9maWx0ZXIsIHZtaWRmaWx0ZXIsIDA2NDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDg4MjJlY2EuLjVmYWI2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTIwLDYgKzIwLDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBIV19SQU5ET01fVElNRVJJT01FTQorCXRyaXN0YXRlICJUaW1lciBJT01FTSBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIGEgZ2VuZXJpYyBSYW5kb20KKwkgIE51bWJlciBHZW5lcmF0b3IgdXNlZCBieSByZWFkaW5nIGEgJ2R1bWInIGlvbWVtIGFkZHJlc3MgdGhhdAorCSAgaXMgdG8gYmUgcmVhZCBubyBmYXN0ZXIgdGhhbiwgZm9yIGV4YW1wbGUsIG9uY2UgYSBzZWNvbmQ7CisJICB0aGUgZGVmYXVsdCBGUEdBIGJpdHN0cmVhbSBvbiB0aGUgVFMtNzgwMCBoYXMgc3VjaCBmdW5jdGlvbmFsaXR5LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aW1lcmlvbWVtLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIEhXX1JBTkRPTV9JTlRFTAogCXRyaXN0YXRlICJJbnRlbCBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChYODYgfHwgSUE2NCkgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCBiNmVmZmI3Li5lODFkMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19IV19SQU5ET00pICs9IHJuZy1jb3JlLm8KIHJuZy1jb3JlLXkgOj0gY29yZS5vCitvYmotJChDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0pICs9IHRpbWVyaW9tZW0tcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fSU5URUwpICs9IGludGVsLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0FNRCkgKz0gYW1kLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0dFT0RFKSArPSBnZW9kZS1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYWQ0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisgKiAgIENvcHlyaWdodCAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE92ZXJ2aWV3OgorICogICBUaGlzIGRyaXZlciBpcyB1c2VmdWwgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgYW4gSU8gcmFuZ2UgdGhhdCBwcm92aWRlcworICogICBwZXJpb2RpYyByYW5kb20gZGF0YSBmcm9tIGEgc2luZ2xlIElPIG1lbW9yeSBhZGRyZXNzLiAgQWxsIHRoZSBwbGF0Zm9ybQorICogICBoYXMgdG8gZG8gaXMgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgJ3dhaXQgdGltZScgdGhhdCBuZXcgZGF0YSBiZWNvbWVzCisgKiAgIGF2YWlsYWJsZS4KKyAqCisgKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBzaXplcyBvdGhlciB0aGFuIDMyYml0cyBhbmQgbWFza2luZworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyaW9tZW0tcm5nLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJpb21lbV9ybmdfZGF0YSAqdGltZXJpb21lbV9ybmdfZGF0YTsKKworc3RhdGljIHZvaWQgdGltZXJpb21lbV9ybmdfdHJpZ2dlcih1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBERUZJTkVfVElNRVIodGltZXJpb21lbV9ybmdfdGltZXIsIHRpbWVyaW9tZW1fcm5nX3RyaWdnZXIsIDAsIDApOworCisvKgorICogaGF2ZSBkYXRhIHJldHVybiAxLCBob3dldmVyIHJldHVybiAwIGlmIHdlIGhhdmUgbm90aGluZworICovCitzdGF0aWMgaW50IHRpbWVyaW9tZW1fcm5nX2RhdGFfcHJlc2VudChzdHJ1Y3QgaHdybmcgKnJuZywgaW50IHdhaXQpCit7CisJaWYgKHJuZy0+cHJpdiA9PSAwKQorCQlyZXR1cm4gMTsKKworCWlmICghd2FpdCB8fCB0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50KQorCQlyZXR1cm4gdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRpbWVyaW9tZW1fcm5nX2RhdGEtPmNvbXBsZXRpb24pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJpb21lbV9ybmdfZGF0YV9yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBjdXI7CisJczMyIGRlbGF5OworCisJKmRhdGEgPSByZWFkbCh0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzKTsKKworCWlmIChybmctPnByaXYgIT0gMCkgeworCQljdXIgPSBqaWZmaWVzOworCisJCWRlbGF5ID0gY3VyIC0gdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlczsKKwkJZGVsYXkgPSBybmctPnByaXYgLSAoZGVsYXkgJSBybmctPnByaXYpOworCisJCXRpbWVyaW9tZW1fcm5nX3RpbWVyLmV4cGlyZXMgPSBjdXIgKyBkZWxheTsKKwkJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDA7CisKKwkJaW5pdF9jb21wbGV0aW9uKCZ0aW1lcmlvbWVtX3JuZ19kYXRhLT5jb21wbGV0aW9uKTsKKwkJYWRkX3RpbWVyKCZ0aW1lcmlvbWVtX3JuZ190aW1lcik7CisJfQorCisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyaW9tZW1fcm5nX3RyaWdnZXIodW5zaWduZWQgbG9uZyBkdW1teSkKK3sKKwl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50ID0gMTsKKwljb21wbGV0ZSgmdGltZXJpb21lbV9ybmdfZGF0YS0+Y29tcGxldGlvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdybmcgdGltZXJpb21lbV9ybmdfb3BzID0geworCS5uYW1lCQk9ICJ0aW1lcmlvbWVtIiwKKwkuZGF0YV9wcmVzZW50CT0gdGltZXJpb21lbV9ybmdfZGF0YV9wcmVzZW50LAorCS5kYXRhX3JlYWQJPSB0aW1lcmlvbWVtX3JuZ19kYXRhX3JlYWQsCisJLnByaXYJCT0gMCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyaW9tZW1fcm5nX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCXRpbWVyaW9tZW1fcm5nX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICh0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QgIT0gMAorCQkmJiB1c2Vjc190b19qaWZmaWVzKHRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCkgPiAwKSB7CisJCXRpbWVyaW9tZW1fcm5nX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzOworCisJCXRpbWVyaW9tZW1fcm5nX29wcy5wcml2ID0gdXNlY3NfdG9famlmZmllcygKKwkJCQkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCk7CisJfQorCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAxOworCisJcmV0ID0gaHdybmdfcmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHJlZ2lzdGVyaW5nXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiMzJiaXRzIGZyb20gMHglcCBAICVkdXNcbiIsCisJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzLAorCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0aW1lcmlvbWVtX3JuZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlkZWxfdGltZXJfc3luYygmdGltZXJpb21lbV9ybmdfdGltZXIpOworCWh3cm5nX3VucmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGltZXJpb21lbV9ybmdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJ0aW1lcmlvbWVtX3JuZyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB0aW1lcmlvbWVtX3JuZ19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRpbWVyaW9tZW1fcm5nX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcmlvbWVtX3JuZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWVyaW9tZW1fcm5nX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodGltZXJpb21lbV9ybmdfaW5pdCk7Cittb2R1bGVfZXhpdCh0aW1lcmlvbWVtX3JuZ19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGltZXIgSU9NRU0gSC9XIFJORyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCBkYzA3M2UxLi41NjA4YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC00MzExLDEwICs0MzExLDE3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaGRsY2Rldl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhkbGNkZXZfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBoZGxjZGV2X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGhkbGNkZXZfdHhfdGltZW91dCwKK307CisKIC8qKgogICogY2FsbGVkIGJ5IGRldmljZSBkcml2ZXIgd2hlbiBhZGRpbmcgZGV2aWNlIGluc3RhbmNlCiAgKiBkbyBnZW5lcmljIEhETEMgaW5pdGlhbGl6YXRpb24KQEAgLTQzNDEsMTEgKzQzNDgsOCBAQAogCWRldi0+aXJxICAgICAgID0gaW5mby0+aXJxX2xldmVsOwogCiAJLyogbmV0d29yayBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCi0JZGV2LT5kb19pb2N0bCAgICAgICA9IGhkbGNkZXZfaW9jdGw7Ci0JZGV2LT5vcGVuICAgICAgICAgICA9IGhkbGNkZXZfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgID0gaGRsY2Rldl9jbG9zZTsKLQlkZXYtPnR4X3RpbWVvdXQgICAgID0gaGRsY2Rldl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKKwlkZXYtPm5ldGRldl9vcHMJICAgID0gJmhkbGNkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCAqIEhaOwogCWRldi0+dHhfcXVldWVfbGVuICAgPSA1MDsKIAogCS8qIGdlbmVyaWMgSERMQyBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggN2MxMzU4MS4uN2M0M2FlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMjQxLDYgKzI0MSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KIAorI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCisjIGluY2x1ZGUgPGxpbnV4L2lycS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01NTgsNyArNTYyLDcgQEAKIAl1bnNpZ25lZCBkb250X2NvdW50X2VudHJvcHk6MTsKIH07CiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICppcnFfdGltZXJfc3RhdGVbTlJfSVJRU107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBmNDM3NDQzLi5mZDNkY2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC04ODgsMTIgKzg4OCw3IEBACiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfZGV2aWNlLmZpZm9fYXN5bmMpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggYjgwNjNkNC4uMDA1N2E4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTgwMDcsMTAgKzgwMDcsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtODAzOCwxMSArODA0NSw4IEBACiAJZGV2LT5kbWEgICAgICAgPSBpbmZvLT5kbWFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcyAgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggZjMyOWY0NS4uZWZiM2RjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTE3NjMsMTAgKzE3NjMsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtMTc5NCwxMSArMTgwMSw4IEBACiAJZGV2LT5pcnEgICAgICAgPSBpbmZvLT5pcnFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcwkgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDdiMGM1YjIuLjhlYjZjODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtMTkwNywxMCArMTkwNywxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC0xOTM4LDExICsxOTQ1LDggQEAKIAlkZXYtPmlycSAgICAgICA9IGluZm8tPmlycV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzCSAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKaW5kZXggOWM0N2RjNC4uY2NkZDgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCkBAIC00MjksMTM0ICs0MjksMTQ4IEBACiAjZGVmaW5lIFRQTV9ESUdFU1RfU0laRSAyMAogI2RlZmluZSBUUE1fRVJST1JfU0laRSAxMAogI2RlZmluZSBUUE1fUkVUX0NPREVfSURYIDYKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYIDEwCi0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFggMTQKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCAxOAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYIDIyCi0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFggMjYKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUEVSTV9ESVNBQkxFX0lEWCAxNgotI2RlZmluZSBUUE1fR0VUX0NBUF9QRVJNX0lOQUNUSVZFX0lEWCAxOAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfQk9PTF8xX0lEWCAxNAotI2RlZmluZSBUUE1fR0VUX0NBUF9URU1QX0lOQUNUSVZFX0lEWCAxNgotCi0jZGVmaW5lIFRQTV9DQVBfSURYIDEzCi0jZGVmaW5lIFRQTV9DQVBfU1VCQ0FQX0lEWCAyMQogCiBlbnVtIHRwbV9jYXBhYmlsaXRpZXMgewotCVRQTV9DQVBfRkxBRyA9IDQsCi0JVFBNX0NBUF9QUk9QID0gNSwKKwlUUE1fQ0FQX0ZMQUcgPSBjcHVfdG9fYmUzMig0KSwKKwlUUE1fQ0FQX1BST1AgPSBjcHVfdG9fYmUzMig1KSwKKwlDQVBfVkVSU0lPTl8xXzEgPSBjcHVfdG9fYmUzMigweDA2KSwKKwlDQVBfVkVSU0lPTl8xXzIgPSBjcHVfdG9fYmUzMigweDFBKQogfTsKIAogZW51bSB0cG1fc3ViX2NhcGFiaWxpdGllcyB7Ci0JVFBNX0NBUF9QUk9QX1BDUiA9IDB4MSwKLQlUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSID0gMHgzLAotCVRQTV9DQVBfRkxBR19QRVJNID0gMHg4LAotCVRQTV9DQVBfRkxBR19WT0wgPSAweDksCi0JVFBNX0NBUF9QUk9QX09XTkVSID0gMHgxMSwKLQlUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQgPSAweDE1LAotCVRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT04gPSAweDIwLAorCVRQTV9DQVBfUFJPUF9QQ1IgPSBjcHVfdG9fYmUzMigweDEwMSksCisJVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiA9IGNwdV90b19iZTMyKDB4MTAzKSwKKwlUUE1fQ0FQX0ZMQUdfUEVSTSA9IGNwdV90b19iZTMyKDB4MTA4KSwKKwlUUE1fQ0FQX0ZMQUdfVk9MID0gY3B1X3RvX2JlMzIoMHgxMDkpLAorCVRQTV9DQVBfUFJPUF9PV05FUiA9IGNwdV90b19iZTMyKDB4MTExKSwKKwlUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQgPSBjcHVfdG9fYmUzMigweDExNSksCisJVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTiA9IGNwdV90b19iZTMyKDB4MTIwKSwKKwogfTsKIAotLyoKLSAqIFRoaXMgaXMgYSBzZW1pIGdlbmVyaWMgR2V0Q2FwYWJpbGl0eSBjb21tYW5kIGZvciB1c2UKLSAqIHdpdGggdGhlIGNhcGFiaWxpdHkgdHlwZSBUUE1fQ0FQX1BST1Agb3IgVFBNX0NBUF9GTEFHCi0gKiBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzdWJfY2FwYWJpbGl0aWVzLgotICovCi0KLXN0YXRpYyBjb25zdCB1OCB0cG1fY2FwW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAyMiwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDAsCQkvKiBUUE1fQ0FQXzxUWVBFPiAqLwotCTAsIDAsIDAsIDQsCQkvKiBUUE1fQ0FQX1NVQl88VFlQRT4gc2l6ZSAqLwotCTAsIDAsIDEsIDAJCS8qIFRQTV9DQVBfU1VCXzxUWVBFPiAqLwotfTsKLQotc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmRhdGEsIGludCBsZW4sCi0JCQkgICAgY2hhciAqZGVzYykKK3N0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2NtZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHN0cnVjdCB0cG1fY21kX3QgKmNtZCwKKwkJCSAgICBpbnQgbGVuLCBjb25zdCBjaGFyICpkZXNjKQogewogCWludCBlcnI7CiAKLQlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgbGVuKTsKKwlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwodTggKikgY21kLCBsZW4pOwogCWlmIChsZW4gPCAgMCkKIAkJcmV0dXJuIGxlbjsKIAlpZiAobGVuID09IFRQTV9FUlJPUl9TSVpFKSB7Ci0JCWVyciA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSk7CisJCWVyciA9IGJlMzJfdG9fY3B1KGNtZC0+aGVhZGVyLm91dC5yZXR1cm5fY29kZSk7CiAJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAlc1xuIiwgZXJyLCBkZXNjKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFIDIwMAorI2RlZmluZSBUUE1fVEFHX1JRVV9DT01NQU5EIGNwdV90b19iZTE2KDE5MykKKyNkZWZpbmUgVFBNX09SRF9HRVRfQ0FQIGNwdV90b19iZTMyKDEwMSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbV9nZXRjYXBfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigyMiksCisJLm9yZGluYWwgPSBUUE1fT1JEX0dFVF9DQVAKK307CisKK3NzaXplX3QgdHBtX2dldGNhcChzdHJ1Y3QgZGV2aWNlICpkZXYsIF9fYmUzMiBzdWJjYXBfaWQsIGNhcF90ICpjYXAsCisJCSAgIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJc3RydWN0IHRwbV9jbWRfdCB0cG1fY21kOworCWludCByYzsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJaWYgKHN1YmNhcF9pZCA9PSBDQVBfVkVSU0lPTl8xXzEgfHwgc3ViY2FwX2lkID09IENBUF9WRVJTSU9OXzFfMikgeworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gc3ViY2FwX2lkOworCQkvKnN1YmNhcCBmaWVsZCBub3QgbmVjZXNzYXJ5ICovCisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDApOworCQl0cG1fY21kLmhlYWRlci5pbi5sZW5ndGggLT0gY3B1X3RvX2JlMzIoc2l6ZW9mKF9fYmUzMikpOworCX0gZWxzZSB7CisJCWlmIChzdWJjYXBfaWQgPT0gVFBNX0NBUF9GTEFHX1BFUk0gfHwKKwkJICAgIHN1YmNhcF9pZCA9PSBUUE1fQ0FQX0ZMQUdfVk9MKQorCQkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfRkxBRzsKKwkJZWxzZQorCQkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBzdWJjYXBfaWQ7CisJfQorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIGRlc2MpOworCWlmICghcmMpCisJCSpjYXAgPSB0cG1fY21kLnBhcmFtcy5nZXRjYXBfb3V0LmNhcDsKKwlyZXR1cm4gcmM7Cit9CisKIHZvaWQgdHBtX2dlbl9pbnRlcnJ1cHQoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzMCldOworCXN0cnVjdAl0cG1fY21kX3QgdHBtX2NtZDsKIAlzc2l6ZV90IHJjOwogCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOwogCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZ2VuX2ludGVycnVwdCk7CiAKIHZvaWQgdHBtX2dldF90aW1lb3V0cyhzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0JdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDMwKV07CisJc3RydWN0IHRwbV9jbWRfdCB0cG1fY21kOworCXN0cnVjdCB0aW1lb3V0X3QgKnRpbWVvdXRfY2FwOworCXN0cnVjdCBkdXJhdGlvbl90ICpkdXJhdGlvbl9jYXA7CiAJc3NpemVfdCByYzsKIAl1MzIgdGltZW91dDsKIAotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIpOwogCWlmIChyYykKIAkJZ290byBkdXJhdGlvbjsKIAotCWlmIChiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFgpKSkKKwlpZiAoYmUzMl90b19jcHUodHBtX2NtZC5oZWFkZXIub3V0Lmxlbmd0aCkKIAkgICAgIT0gNCAqIHNpemVvZih1MzIpKQogCQlnb3RvIGR1cmF0aW9uOwogCisJdGltZW91dF9jYXAgPSAmdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXAudGltZW91dDsKIAkvKiBEb24ndCBvdmVyd3JpdGUgZGVmYXVsdCBpZiB2YWx1ZSBpcyAwICovCi0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5hKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5iKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5jKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0JdGltZW91dCA9Ci0JICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFgpKSk7CisJdGltZW91dCA9IGJlMzJfdG9fY3B1KHRpbWVvdXRfY2FwLT5kKTsKIAlpZiAodGltZW91dCkKIAkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7CiAKIGR1cmF0aW9uOgotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT047CisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OOwogCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGR1cmF0aW9ucyIpOwogCWlmIChyYykKIAkJcmV0dXJuOwogCi0JaWYgKGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCkpKQorCWlmIChiZTMyX3RvX2NwdSh0cG1fY21kLmhlYWRlci5vdXQucmV0dXJuX2NvZGUpCiAJICAgICE9IDMgKiBzaXplb2YodTMyKSkKIAkJcmV0dXJuOwotCisJZHVyYXRpb25fY2FwID0gJnRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwLmR1cmF0aW9uOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fU0hPUlRdID0KLQkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQotCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKLQkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOworCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1KGR1cmF0aW9uX2NhcC0+dHBtX3Nob3J0KSk7CiAJLyogVGhlIEJyb2FkY29tIEJDTTAxMDIgY2hpcHNldCBpbiBhIERlbGwgTGF0aXR1ZGUgRDgyMCBnZXRzIHRoZSBhYm92ZQogCSAqIHZhbHVlIHdyb25nIGFuZCBhcHBhcmVudGx5IHJlcG9ydHMgbXNlY3MgcmF0aGVyIHRoYW4gdXNlY3MuIFNvIHdlCiAJICogZml4IHVwIHRoZSByZXN1bHRpbmcgdG9vLXNtYWxsIFRQTV9TSE9SVCB2YWx1ZSB0byBtYWtlIHRoaW5ncyB3b3JrLgpAQCAtNTY1LDEzICs1NzksOSBAQAogCQljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9IEhaOwogCiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9NRURJVU1dID0KLQkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQotCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKLQkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSkpOworCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1KGR1cmF0aW9uX2NhcC0+dHBtX21lZGl1bSkpOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10gPQotCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1Ci0JCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwotCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCkpKSk7CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoZHVyYXRpb25fY2FwLT50cG1fbG9uZykpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dldF90aW1lb3V0cyk7CiAKQEAgLTU4NywzNiArNTk3LDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fY29udGludWVfc2VsZnRlc3QpOwogCi0jZGVmaW5lICBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUgMjAwCi0KIHNzaXplX3QgdHBtX3Nob3dfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCiAJCQljaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19QRVJNOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtdHBpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgZW5hYmxlZCBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX0ZMQUdfUEVSTSwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBlbmFibGVkIHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFkYXRhW1RQTV9HRVRfQ0FQX1BFUk1fRElTQUJMRV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWNhcC5wZXJtX2ZsYWdzLmRpc2FibGUpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2VuYWJsZWQpOwpAQCAtNjI0LDMxICs2MTYsMTUgQEAKIHNzaXplX3QgdHBtX3Nob3dfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1BFUk07Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW10cGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBhY3RpdmUgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9GTEFHX1BFUk0sICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgYWN0aXZlIHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFkYXRhW1RQTV9HRVRfQ0FQX1BFUk1fSU5BQ1RJVkVfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFjYXAucGVybV9mbGFncy5kZWFjdGl2YXRlZCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfYWN0aXZlKTsKQEAgLTY1NiwzMSArNjMyLDE1IEBACiBzc2l6ZV90IHRwbV9zaG93X293bmVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX09XTkVSOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBvd25lciBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfT1dORVIsICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBvd25lciBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhW1RQTV9HRVRfQ0FQX1JFVF9CT09MXzFfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGNhcC5vd25lZCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfb3duZWQpOwpAQCAtNjg4LDExNiArNjQ4LDE4MCBAQAogc3NpemVfdCB0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19WT0w7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRlbXBvcmFyeSBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX0ZMQUdfVk9MLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGVtcG9yYXJ5IHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGFbVFBNX0dFVF9DQVBfVEVNUF9JTkFDVElWRV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgY2FwLnN0Y2xlYXJfZmxhZ3MuZGVhY3RpdmF0ZWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3RlbXBfZGVhY3RpdmF0ZWQpOwogCi1zdGF0aWMgY29uc3QgdTggcGNycmVhZFtdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMTQsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAyMSwJCS8qIFRQTV9PUkRfUGNyUmVhZCAqLwotCTAsIDAsIDAsIDAJCS8qIFBDUiBpbmRleCAqLworLyoKKyAqIHRwbV9jaGlwX2ZpbmRfZ2V0IC0gcmV0dXJuIHRwbV9jaGlwIGZvciBnaXZlbiBjaGlwIG51bWJlcgorICovCitzdGF0aWMgc3RydWN0IHRwbV9jaGlwICp0cG1fY2hpcF9maW5kX2dldChpbnQgY2hpcF9udW0pCit7CisJc3RydWN0IHRwbV9jaGlwICpwb3MsICpjaGlwID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3MsICZ0cG1fY2hpcF9saXN0LCBsaXN0KSB7CisJCWlmIChjaGlwX251bSAhPSBUUE1fQU5ZX05VTSAmJiBjaGlwX251bSAhPSBwb3MtPmRldl9udW0pCisJCQljb250aW51ZTsKKworCQlpZiAodHJ5X21vZHVsZV9nZXQocG9zLT5kZXYtPmRyaXZlci0+b3duZXIpKSB7CisJCQljaGlwID0gcG9zOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGNoaXA7Cit9CisKKyNkZWZpbmUgVFBNX09SRElOQUxfUENSUkVBRCBjcHVfdG9fYmUzMigyMSkKKyNkZWZpbmUgUkVBRF9QQ1JfUkVTVUxUX1NJWkUgMzAKK3N0YXRpYyBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciBwY3JyZWFkX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMTQpLAorCS5vcmRpbmFsID0gVFBNX09SRElOQUxfUENSUkVBRAogfTsKIAoraW50IF9fdHBtX3Bjcl9yZWFkKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKQoreworCWludCByYzsKKwlzdHJ1Y3QgdHBtX2NtZF90IGNtZDsKKworCWNtZC5oZWFkZXIuaW4gPSBwY3JyZWFkX2hlYWRlcjsKKwljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX2lkeCA9IGNwdV90b19iZTMyKHBjcl9pZHgpOworCUJVSUxEX0JVR19PTihjbWQuaGVhZGVyLmluLmxlbmd0aCA+IFJFQURfUENSX1JFU1VMVF9TSVpFKTsKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKKwkJCSAgImF0dGVtcHRpbmcgdG8gcmVhZCBhIHBjciB2YWx1ZSIpOworCisJaWYgKHJjID09IDApCisJCW1lbWNweShyZXNfYnVmLCBjbWQucGFyYW1zLnBjcnJlYWRfb3V0LnBjcl9yZXN1bHQsCisJCSAgICAgICBUUE1fRElHRVNUX1NJWkUpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiB0cG1fcGNyX3JlYWQgLSByZWFkIGEgcGNyIHZhbHVlCisgKiBAY2hpcF9udW06IAl0cG0gaWR4ICMgb3IgQU5ZCisgKiBAcGNyX2lkeDoJcGNyIGlkeCB0byByZXRyaWV2ZQorICogQHJlc19idWY6IAlUUE1fUENSIHZhbHVlCisgKiAJCXNpemUgb2YgcmVzX2J1ZiBpcyAyMCBieXRlcyAob3IgTlVMTCBpZiB5b3UgZG9uJ3QgY2FyZSkKKyAqCisgKiBUaGUgVFBNIGRyaXZlciBzaG91bGQgYmUgYnVpbHQtaW4sIGJ1dCBmb3Igd2hhdGV2ZXIgcmVhc29uIGl0CisgKiBpc24ndCwgcHJvdGVjdCBhZ2FpbnN0IHRoZSBjaGlwIGRpc2FwcGVhcmluZywgYnkgaW5jcmVtZW50aW5nCisgKiB0aGUgbW9kdWxlIHVzYWdlIGNvdW50LgorICovCitpbnQgdHBtX3Bjcl9yZWFkKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKwlpbnQgcmM7CisKKwljaGlwID0gdHBtX2NoaXBfZmluZF9nZXQoY2hpcF9udW0pOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXJjID0gX190cG1fcGNyX3JlYWQoY2hpcCwgcGNyX2lkeCwgcmVzX2J1Zik7CisJbW9kdWxlX3B1dChjaGlwLT5kZXYtPmRyaXZlci0+b3duZXIpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9wY3JfcmVhZCk7CisKKy8qKgorICogdHBtX3Bjcl9leHRlbmQgLSBleHRlbmQgcGNyIHZhbHVlIHdpdGggaGFzaAorICogQGNoaXBfbnVtOiAJdHBtIGlkeCAjIG9yIEFOJgorICogQHBjcl9pZHg6CXBjciBpZHggdG8gZXh0ZW5kCisgKiBAaGFzaDogCWhhc2ggdmFsdWUgdXNlZCB0byBleHRlbmQgcGNyIHZhbHVlCisgKgorICogVGhlIFRQTSBkcml2ZXIgc2hvdWxkIGJlIGJ1aWx0LWluLCBidXQgZm9yIHdoYXRldmVyIHJlYXNvbiBpdAorICogaXNuJ3QsIHByb3RlY3QgYWdhaW5zdCB0aGUgY2hpcCBkaXNhcHBlYXJpbmcsIGJ5IGluY3JlbWVudGluZworICogdGhlIG1vZHVsZSB1c2FnZSBjb3VudC4KKyAqLworI2RlZmluZSBUUE1fT1JEX1BDUl9FWFRFTkQgY3B1X3RvX2JlMzIoMjApCisjZGVmaW5lIEVYVEVORF9QQ1JfU0laRSAzNAorc3RhdGljIHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHBjcmV4dGVuZF9oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDM0KSwKKwkub3JkaW5hbCA9IFRQTV9PUkRfUENSX0VYVEVORAorfTsKKworaW50IHRwbV9wY3JfZXh0ZW5kKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKQoreworCXN0cnVjdCB0cG1fY21kX3QgY21kOworCWludCByYzsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisKKwljaGlwID0gdHBtX2NoaXBfZmluZF9nZXQoY2hpcF9udW0pOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJY21kLmhlYWRlci5pbiA9IHBjcmV4dGVuZF9oZWFkZXI7CisJQlVJTERfQlVHX09OKGJlMzJfdG9fY3B1KGNtZC5oZWFkZXIuaW4ubGVuZ3RoKSA+IEVYVEVORF9QQ1JfU0laRSk7CisJY21kLnBhcmFtcy5wY3JleHRlbmRfaW4ucGNyX2lkeCA9IGNwdV90b19iZTMyKHBjcl9pZHgpOworCW1lbWNweShjbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5oYXNoLCBoYXNoLCBUUE1fRElHRVNUX1NJWkUpOworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIGNtZC5oZWFkZXIuaW4ubGVuZ3RoLAorCQkJICAiYXR0ZW1wdGluZyBleHRlbmQgYSBQQ1IgdmFsdWUiKTsKKworCW1vZHVsZV9wdXQoY2hpcC0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcGNyX2V4dGVuZCk7CisKIHNzaXplX3QgdHBtX3Nob3dfcGNycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOworCXU4IGRpZ2VzdFtUUE1fRElHRVNUX1NJWkVdOwogCXNzaXplX3QgcmM7CiAJaW50IGksIGosIG51bV9wY3JzOwotCV9fYmUzMiBpbmRleDsKIAljaGFyICpzdHIgPSBidWY7Ci0KIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9QQ1I7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX1BDUiwgJmNhcCwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIFBDUlMiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQludW1fcGNycyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIDE0KSkpOworCW51bV9wY3JzID0gYmUzMl90b19jcHUoY2FwLm51bV9wY3JzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BjcnM7IGkrKykgewotCQltZW1jcHkoZGF0YSwgcGNycmVhZCwgc2l6ZW9mKHBjcnJlYWQpKTsKLQkJaW5kZXggPSBjcHVfdG9fYmUzMihpKTsKLQkJbWVtY3B5KGRhdGEgKyAxMCwgJmluZGV4LCA0KTsKLQkJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJCSJhdHRlbXB0aW5nIHRvIHJlYWQgYSBQQ1IiKTsKKwkJcmMgPSBfX3RwbV9wY3JfcmVhZChjaGlwLCBpLCBkaWdlc3QpOwogCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJQQ1ItJTAyZDogIiwgaSk7CiAJCWZvciAoaiA9IDA7IGogPCBUUE1fRElHRVNUX1NJWkU7IGorKykKLQkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiUwMlggIiwgKihkYXRhICsgMTAgKyBqKSk7CisJCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJYICIsIGRpZ2VzdFtqXSk7CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7CiAJfQotb3V0OgotCWtmcmVlKGRhdGEpOwogCXJldHVybiBzdHIgLSBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19wY3JzKTsKIAogI2RlZmluZSAgUkVBRF9QVUJFS19SRVNVTFRfU0laRSAzMTQKLXN0YXRpYyBjb25zdCB1OCByZWFkcHViZWtbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDMwLAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTI0LAkJLyogVFBNX09SRF9SZWFkUHViZWsgKi8KKyNkZWZpbmUgVFBNX09SRF9SRUFEUFVCRUsgY3B1X3RvX2JlMzIoMTI0KQorc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtX3JlYWRwdWJla19oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDMwKSwKKwkub3JkaW5hbCA9IFRQTV9PUkRfUkVBRFBVQkVLCiB9OwogCiBzc2l6ZV90IHRwbV9zaG93X3B1YmVrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgICBjaGFyICpidWYpCiB7CiAJdTggKmRhdGE7CisJc3RydWN0IHRwbV9jbWRfdCB0cG1fY21kOwogCXNzaXplX3QgZXJyOwogCWludCBpLCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEgPSBremFsbG9jKFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgcmVhZHB1YmVrLCBzaXplb2YocmVhZHB1YmVrKSk7Ci0KLQllcnIgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9yZWFkcHViZWtfaGVhZGVyOworCWVyciA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFBVQkVLIik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC04MTIsNyArODM2LDcgQEAKIAkgICAyNTYgYnl0ZSBtb2R1bHVzCiAJICAgaWdub3JlIGNoZWNrc3VtIDIwIGJ5dGVzCiAJICovCi0KKwlkYXRhID0gdHBtX2NtZC5wYXJhbXMucmVhZHB1YmVrX291dF9idWZmZXI7CiAJc3RyICs9CiAJICAgIHNwcmludGYoc3RyLAogCQkgICAgIkFsZ29yaXRobTogJTAyWCAlMDJYICUwMlggJTAyWFxuRW5jc2NoZW1lOiAlMDJYICUwMlhcbiIKQEAgLTgzMiw2NSArODU2LDMzIEBACiAJfQogb3V0OgogCXJjID0gc3RyIC0gYnVmOwotCWtmcmVlKGRhdGEpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3B1YmVrKTsKIAotI2RlZmluZSBDQVBfVkVSU0lPTl8xXzEgNgotI2RlZmluZSBDQVBfVkVSU0lPTl8xXzIgMHgxQQotI2RlZmluZSBDQVBfVkVSU0lPTl9JRFggMTMKLXN0YXRpYyBjb25zdCB1OCBjYXBfdmVyc2lvbltdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMTgsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAxMDEsCQkvKiBUUE1fT1JEX0dldENhcGFiaWxpdHkgKi8KLQkwLCAwLCAwLCAwLAotCTAsIDAsIDAsIDAKLX07CiAKIHNzaXplX3QgdHBtX3Nob3dfY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAorCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIsICZjYXAsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlciIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAotCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7Ci0KLQltZW1jcHkoZGF0YSwgY2FwX3ZlcnNpb24sIHNpemVvZihjYXBfdmVyc2lvbikpOwotCWRhdGFbQ0FQX1ZFUlNJT05fSURYXSA9IENBUF9WRVJTSU9OXzFfMTsKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMSB2ZXJzaW9uIik7CiAJaWYgKHJjKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CisJc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAorCQkgICAgICAgYmUzMl90b19jcHUoY2FwLm1hbnVmYWN0dXJlcl9pZCkpOwogCisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgQ0FQX1ZFUlNJT05fMV8xLCAmY2FwLAorCQkgICAgICAgICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4xIHZlcnNpb24iKTsKKwlpZiAocmMpCisJCXJldHVybiAwOwogCXN0ciArPSBzcHJpbnRmKHN0ciwKIAkJICAgICAgICJUQ0cgdmVyc2lvbjogJWQuJWRcbkZpcm13YXJlIHZlcnNpb246ICVkLiVkXG4iLAotCQkgICAgICAgKGludCkgZGF0YVsxNF0sIChpbnQpIGRhdGFbMTVdLCAoaW50KSBkYXRhWzE2XSwKLQkJICAgICAgIChpbnQpIGRhdGFbMTddKTsKLQotb3V0OgotCWtmcmVlKGRhdGEpOworCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uLk1ham9yLCBjYXAudHBtX3ZlcnNpb24uTWlub3IsCisJCSAgICAgICBjYXAudHBtX3ZlcnNpb24ucmV2TWFqb3IsIGNhcC50cG1fdmVyc2lvbi5yZXZNaW5vcik7CiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2NhcHMpOwpAQCAtODk4LDUxICs4OTAsMjUgQEAKIHNzaXplX3QgdHBtX3Nob3dfY2Fwc18xXzIoc3RydWN0IGRldmljZSAqIGRldiwKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7Ci0Jc3NpemVfdCBsZW47CisJY2FwX3QgY2FwOworCXNzaXplX3QgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSOwotCi0JbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSk7Ci0JaWYgKGxlbiA8PSBUUE1fRVJST1JfU0laRSkgewotCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXJcbiIsCi0JCQliZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpKTsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiwgJmNhcCwKKwkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9Ci0KIAlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCi0JCSAgICAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKLQotCW1lbWNweShkYXRhLCBjYXBfdmVyc2lvbiwgc2l6ZW9mKGNhcF92ZXJzaW9uKSk7Ci0JZGF0YVtDQVBfVkVSU0lPTl9JRFhdID0gQ0FQX1ZFUlNJT05fMV8yOwotCi0JbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSk7Ci0JaWYgKGxlbiA8PSBUUE1fRVJST1JfU0laRSkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgIgotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjIgdmVyc2lvblxuIiwKLQkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSkpOwotCQlnb3RvIG91dDsKLQl9CisJCSAgICAgICBiZTMyX3RvX2NwdShjYXAubWFudWZhY3R1cmVyX2lkKSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgQ0FQX1ZFUlNJT05fMV8yLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4yIHZlcnNpb24iKTsKKwlpZiAocmMpCisJCXJldHVybiAwOwogCXN0ciArPSBzcHJpbnRmKHN0ciwKIAkJICAgICAgICJUQ0cgdmVyc2lvbjogJWQuJWRcbkZpcm13YXJlIHZlcnNpb246ICVkLiVkXG4iLAotCQkgICAgICAgKGludCkgZGF0YVsxNl0sIChpbnQpIGRhdGFbMTddLCAoaW50KSBkYXRhWzE4XSwKLQkJICAgICAgIChpbnQpIGRhdGFbMTldKTsKLQotb3V0OgotCWtmcmVlKGRhdGEpOworCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uXzFfMi5NYWpvciwgY2FwLnRwbV92ZXJzaW9uXzFfMi5NaW5vciwKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbl8xXzIucmV2TWFqb3IsCisJCSAgICAgICBjYXAudHBtX3ZlcnNpb25fMV8yLnJldk1pbm9yKTsKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwc18xXzIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggOGUzMGRmNC4uOGUwMGI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHBtLmg+CiAKIGVudW0gdHBtX3RpbWVvdXQgewogCVRQTV9USU1FT1VUID0gNSwJLyogbXNlY3MgKi8KQEAgLTEyMyw2ICsxMjQsMTQ3IEBACiAJb3V0YihpbmRleCwgYmFzZSk7CiAJb3V0Yih2YWx1ZSAmIDB4RkYsIGJhc2UrMSk7CiB9CitzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB7CisJX19iZTE2CXRhZzsKKwlfX2JlMzIJbGVuZ3RoOworCV9fYmUzMglvcmRpbmFsOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdHBtX291dHB1dF9oZWFkZXIgeworCV9fYmUxNgl0YWc7CisJX19iZTMyCWxlbmd0aDsKKwlfX2JlMzIJcmV0dXJuX2NvZGU7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAlzdGNsZWFyX2ZsYWdzX3QgeworCV9fYmUxNgl0YWc7CisJdTgJZGVhY3RpdmF0ZWQ7CisJdTgJZGlzYWJsZUZvcmNlQ2xlYXI7CisJdTgJcGh5c2ljYWxQcmVzZW5jZTsKKwl1OAlwaHlzaWNhbFByZXNlbmNlTG9jazsKKwl1OAliR2xvYmFsTG9jazsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV92ZXJzaW9uX3QgeworCXU4CU1ham9yOworCXU4CU1pbm9yOworCXU4CXJldk1ham9yOworCXU4CXJldk1pbm9yOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX3ZlcnNpb25fMV8yX3QgeworCV9fYmUxNgl0YWc7CisJdTgJTWFqb3I7CisJdTgJTWlub3I7CisJdTgJcmV2TWFqb3I7CisJdTgJcmV2TWlub3I7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0aW1lb3V0X3QgeworCV9fYmUzMglhOworCV9fYmUzMgliOworCV9fYmUzMgljOworCV9fYmUzMglkOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZHVyYXRpb25fdCB7CisJX19iZTMyCXRwbV9zaG9ydDsKKwlfX2JlMzIJdHBtX21lZGl1bTsKKwlfX2JlMzIJdHBtX2xvbmc7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBwZXJtYW5lbnRfZmxhZ3NfdCB7CisJX19iZTE2CXRhZzsKKwl1OAlkaXNhYmxlOworCXU4CW93bmVyc2hpcDsKKwl1OAlkZWFjdGl2YXRlZDsKKwl1OAlyZWFkUHViZWs7CisJdTgJZGlzYWJsZU93bmVyQ2xlYXI7CisJdTgJYWxsb3dNYWludGVuYW5jZTsKKwl1OAlwaHlzaWNhbFByZXNlbmNlTGlmZXRpbWVMb2NrOworCXU4CXBoeXNpY2FsUHJlc2VuY2VIV0VuYWJsZTsKKwl1OAlwaHlzaWNhbFByZXNlbmNlQ01ERW5hYmxlOworCXU4CUNFS1BVc2VkOworCXU4CVRQTXBvc3Q7CisJdTgJVFBNcG9zdExvY2s7CisJdTgJRklQUzsKKwl1OAlvcGVyYXRvcjsKKwl1OAllbmFibGVSZXZva2VFSzsKKwl1OAludkxvY2tlZDsKKwl1OAlyZWFkU1JLUHViOworCXU4CXRwbUVzdGFibGlzaGVkOworCXU4CW1haW50ZW5hbmNlRG9uZTsKKwl1OAlkaXNhYmxlRnVsbERBTG9naWNJbmZvOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QJcGVybWFuZW50X2ZsYWdzX3QgcGVybV9mbGFnczsKKwlzdHJ1Y3QJc3RjbGVhcl9mbGFnc190CXN0Y2xlYXJfZmxhZ3M7CisJYm9vbAlvd25lZDsKKwlfX2JlMzIJbnVtX3BjcnM7CisJc3RydWN0CXRwbV92ZXJzaW9uX3QJdHBtX3ZlcnNpb247CisJc3RydWN0CXRwbV92ZXJzaW9uXzFfMl90IHRwbV92ZXJzaW9uXzFfMjsKKwlfX2JlMzIJbWFudWZhY3R1cmVyX2lkOworCXN0cnVjdCB0aW1lb3V0X3QgIHRpbWVvdXQ7CisJc3RydWN0IGR1cmF0aW9uX3QgZHVyYXRpb247Cit9IGNhcF90OworCitzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfaW4geworCV9fYmUzMgljYXA7CisJX19iZTMyCXN1YmNhcF9zaXplOworCV9fYmUzMglzdWJjYXA7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19vdXQgeworCV9fYmUzMgljYXBfc2l6ZTsKKwljYXBfdAljYXA7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fcmVhZHB1YmVrX3BhcmFtc19vdXQgeworCXU4CWFsZ29yaXRobVs0XTsKKwl1OAllbmNzY2hlbWVbMl07CisJdTgJc2lnc2NoZW1lWzJdOworCXU4CXBhcmFtZXRlcnNbMTJdOyAvKmFzc3VtaW5nIFJTQSovCisJX19iZTMyCWtleXNpemU7CisJdTgJbW9kdWx1c1syNTZdOworCXU4CWNoZWNrc3VtWzIwXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0CXRwbV9pbnB1dF9oZWFkZXIgaW47CisJc3RydWN0CXRwbV9vdXRwdXRfaGVhZGVyIG91dDsKK30gdHBtX2NtZF9oZWFkZXI7CisKKyNkZWZpbmUgVFBNX0RJR0VTVF9TSVpFIDIwCitzdHJ1Y3QgdHBtX3BjcnJlYWRfb3V0IHsKKwl1OAlwY3JfcmVzdWx0W1RQTV9ESUdFU1RfU0laRV07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0cG1fcGNycmVhZF9pbiB7CisJX19iZTMyCXBjcl9pZHg7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0cG1fcGNyZXh0ZW5kX2luIHsKKwlfX2JlMzIJcGNyX2lkeDsKKwl1OAloYXNoW1RQTV9ESUdFU1RfU0laRV07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19vdXQgZ2V0Y2FwX291dDsKKwlzdHJ1Y3QJdHBtX3JlYWRwdWJla19wYXJhbXNfb3V0IHJlYWRwdWJla19vdXQ7CisJdTgJcmVhZHB1YmVrX291dF9idWZmZXJbc2l6ZW9mKHN0cnVjdCB0cG1fcmVhZHB1YmVrX3BhcmFtc19vdXQpXTsKKwlzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfaW4gZ2V0Y2FwX2luOworCXN0cnVjdAl0cG1fcGNycmVhZF9pbglwY3JyZWFkX2luOworCXN0cnVjdAl0cG1fcGNycmVhZF9vdXQJcGNycmVhZF9vdXQ7CisJc3RydWN0CXRwbV9wY3JleHRlbmRfaW4gcGNyZXh0ZW5kX2luOworfSB0cG1fY21kX3BhcmFtczsKKworc3RydWN0IHRwbV9jbWRfdCB7CisJdHBtX2NtZF9oZWFkZXIJaGVhZGVyOworCXRwbV9jbWRfcGFyYW1zCXBhcmFtczsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3NpemVfdAl0cG1fZ2V0Y2FwKHN0cnVjdCBkZXZpY2UgKiwgX19iZTMyLCBjYXBfdCAqLCBjb25zdCBjaGFyICopOwogCiBleHRlcm4gdm9pZCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiB2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCmluZGV4IGQwZTc5MjYuLmM2NGExYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwpAQCAtMTY4LDEyICsxNjgsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdG1sX2RydiA9IHsKLQkubmFtZSA9ICJ0cG1fYXRtZWwiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnN1c3BlbmQgPSB0cG1fcG1fc3VzcGVuZCwKLQkucmVzdW1lID0gdHBtX3BtX3Jlc3VtZSwKK3N0YXRpYyBpbnQgdHBtX2F0bWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHRwbV9wbV9zdXNwZW5kKCZkZXYtPmRldiwgbXNnKTsKK30KKworc3RhdGljIGludCB0cG1fYXRtbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiB0cG1fcG1fcmVzdW1lKCZkZXYtPmRldik7Cit9CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1sX2RydiA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0cG1fYXRtZWwiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCA9IHRwbV9hdG1sX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRwbV9hdG1sX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRtZWwodm9pZCkKQEAgLTE4NCw3ICsxOTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAlzdHJ1Y3QgIHRwbV9jaGlwICpjaGlwOwogCi0JcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJmF0bWxfZHJ2KTsKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRtbF9kcnYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yMjMsMTMgKzIzMywxMyBAQAogCQlhdG1lbF9yZWxlYXNlX3JlZ2lvbihiYXNlLAogCQkJCSAgICAgcmVnaW9uX3NpemUpOwogZXJyX3VucmVnX2RydjoKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9hdG1lbCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlhdG1sX3BsYXRfcmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKaW5kZXggNzE3YWY3YS4uYWVjMTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKQEAgLTY1NCwxMiArNjU0LDIyIEBACiAJCSAgICBzaXplb2YodHBtX3BucF90YmxbVElTX0hJRF9VU1JfSURYXS5pZCksIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhoaWQsICJTZXQgYWRkaXRpb25hbCBzcGVjaWZpYyBISUQgZm9yIHRoaXMgZHJpdmVyIHRvIHByb2JlIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB0aXNfZHJ2ID0gewotCS5uYW1lID0gInRwbV90aXMiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnN1c3BlbmQgPSB0cG1fcG1fc3VzcGVuZCwKLQkucmVzdW1lID0gdHBtX3BtX3Jlc3VtZSwKK3N0YXRpYyBpbnQgdHBtX3Rpc19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gdHBtX3BtX3N1c3BlbmQoJmRldi0+ZGV2LCBtc2cpOworfQorCitzdGF0aWMgaW50IHRwbV90aXNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdHBtX3BtX3Jlc3VtZSgmZGV2LT5kZXYpOworfQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGlzX2RydiA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0cG1fdGlzIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSB0cG1fdGlzX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRwbV90aXNfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CkBAIC02NzIsMTQgKzY4MiwxNCBAQAogCWludCByYzsKIAogCWlmIChmb3JjZSkgewotCQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmdGlzX2Rydik7CisJCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aXNfZHJ2KTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAkJaWYgKElTX0VSUihwZGV2PXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInRwbV90aXMiLCAtMSwgTlVMTCwgMCkpKQogCQkJcmV0dXJuIFBUUl9FUlIocGRldik7CiAJCWlmKChyYz10cG1fdGlzX2luaXQoJnBkZXYtPmRldiwgVElTX01FTV9CQVNFLCBUSVNfTUVNX0xFTiwgMCkpICE9IDApIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOwogCQl9CiAJCXJldHVybiByYzsKIAl9CkBAIC03MTEsNyArNzIxLDcgQEAKIAogCWlmIChmb3JjZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CiAJfSBlbHNlCiAJCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmdGlzX3BucF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGJjODRlMTIuLjIyNGYyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTIxNjIsMTMgKzIxNjIsMTIgQEAKIAlpZiAoZ2V0X3VzZXIobm9uYmxvY2ssIHApKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCS8qIGZpbGUtPmZfZmxhZ3MgaXMgc3RpbGwgQktMIHByb3RlY3RlZCBpbiB0aGUgZnMgbGF5ZXIgLSB2b21pdCAqLwotCWxvY2tfa2VybmVsKCk7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWlmIChub25ibG9jaykKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwogCWVsc2UKIAkJZmlsZS0+Zl9mbGFncyAmPSB+T19OT05CTE9DSzsKLQl1bmxvY2tfa2VybmVsKCk7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwppbmRleCA0ZjNiM2Y5Li5kOTRkMjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCkBAIC00NzksMTggKzQ3OSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsYXNzICp2Y19jbGFzczsKIAotdm9pZCB2Y3NfbWFrZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCB2Y3NfbWFrZV9zeXNmcyhpbnQgaW5kZXgpCiB7Ci0JZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSksIE5VTEwsCi0JCSAgICAgICJ2Y3MldSIsIHR0eS0+aW5kZXggKyAxKTsKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpLCBOVUxMLAotCQkgICAgICAidmNzYSV1IiwgdHR5LT5pbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxKSwgTlVMTCwKKwkJICAgICAgInZjcyV1IiwgaW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMTI5KSwgTlVMTCwKKwkJICAgICAgInZjc2EldSIsIGluZGV4ICsgMSk7CiB9CiAKLXZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKGludCBpbmRleCkKIHsKLQlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSkpOwotCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpKTsKKwlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEpKTsKKwlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEyOSkpOwogfQogCiBpbnQgX19pbml0IHZjc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnQuYyBiL2RyaXZlcnMvY2hhci92dC5jCmluZGV4IDc5MDBiZDYuLjJjMWQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dC5jCisrKyBiL2RyaXZlcnMvY2hhci92dC5jCkBAIC03NzgsNiArNzc4LDcgQEAKIAkgICAgfQogCSAgICB2Yy0+dmNfa21hbGxvY2VkID0gMTsKIAkgICAgdmNfaW5pdCh2YywgdmMtPnZjX3Jvd3MsIHZjLT52Y19jb2xzLCAxKTsKKwkgICAgdmNzX21ha2Vfc3lzZnMoY3VycmNvbnMpOwogCSAgICBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmdnRfbm90aWZpZXJfbGlzdCwgVlRfQUxMT0NBVEUsICZwYXJhbSk7CiAJfQogCXJldHVybiAwOwpAQCAtOTg3LDcgKzk4OCw5IEBACiAJaWYgKHZjX2NvbnNfYWxsb2NhdGVkKGN1cnJjb25zKSkgewogCQlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB2Y19jb25zW2N1cnJjb25zXS5kOwogCQlzdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0gcGFyYW0gPSB7IC52YyA9IHZjIH07CisKIAkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX0RFQUxMT0NBVEUsICZwYXJhbSk7CisJCXZjc19yZW1vdmVfc3lzZnMoY3VycmNvbnMpOwogCQl2Yy0+dmNfc3ctPmNvbl9kZWluaXQodmMpOwogCQlwdXRfcGlkKHZjLT52dF9waWQpOwogCQltb2R1bGVfcHV0KHZjLT52Y19zdy0+b3duZXIpOwpAQCAtMjc3NSw3ICsyNzc4LDYgQEAKIAkJCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgfD0gSVVURjg7CiAJCQllbHNlCiAJCQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnICY9IH5JVVRGODsKLQkJCXZjc19tYWtlX3N5c2ZzKHR0eSk7CiAJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC0yNzk1LDcgKzI3OTcsNiBAQAogCUJVR19PTih2YyA9PSBOVUxMKTsKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJdmMtPnZjX3R0eSA9IE5VTEw7Ci0JdmNzX3JlbW92ZV9zeXNmcyh0dHkpOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAl0dHlfc2h1dGRvd24odHR5KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCmluZGV4IDE1MjU4ODIuLjFlZmIyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAKIG9iai0kKENPTkZJR19YODZfQ1lDTE9ORV9USU1FUikJKz0gY3ljbG9uZS5vCiBvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBhY3BpX3BtLm8KIG9iai0kKENPTkZJR19TQ3gyMDBIUl9USU1FUikJKz0gc2N4MjAwX2hydC5vCitvYmotJChDT05GSUdfU0hfVElNRVJfQ01UKQkrPSBzaF9jbXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCBlMTEyOWZhLi5lZTE5YjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBDT05GSUdfWDg2XzY0Ci0jaW5jbHVkZSAibWFjaF90aW1lci5oIgorI2luY2x1ZGUgPGFzbS9tYWNoX3RpbWVyLmg+CiAjZGVmaW5lIFBNVE1SX0VYUEVDVEVEX1JBVEUgXAogICAoKENBTElCUkFURV9MQVRDSCAqIChQTVRNUl9USUNLU19QRVJfU0VDID4+IDEwKSkgLyAoQ0xPQ0tfVElDS19SQVRFPj4xMCkpCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jeWNsb25lLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYwppbmRleCAxYmRlMzAzLi44NjE1MDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSAibWFjaF90aW1lci5oIgorI2luY2x1ZGUgPGFzbS9tYWNoX3RpbWVyLmg+CiAKICNkZWZpbmUgQ1lDTE9ORV9DQkFSX0FERFIJMHhGRUIwMENEMAkvKiBiYXNlIGFkZHJlc3MgcHRyICovCiAjZGVmaW5lIENZQ0xPTkVfUE1DQ19PRkZTRVQJMHg1MUEwCQkvKiBvZmZzZXQgdG8gY29udHJvbCByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4M2I0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKQEAgLTAsMCArMSw2MTUgQEAKKy8qCisgKiBTdXBlckggVGltZXIgU3VwcG9ydCAtIENNVAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KKworc3RydWN0IHNoX2NtdF9wcml2IHsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2U7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGxvbmcgd2lkdGg7IC8qIDE2IG9yIDMyIGJpdCB2ZXJzaW9uIG9mIGhhcmR3YXJlIGJsb2NrICovCisJdW5zaWduZWQgbG9uZyBvdmVyZmxvd19iaXQ7CisJdW5zaWduZWQgbG9uZyBjbGVhcl9iaXRzOworCXN0cnVjdCBpcnFhY3Rpb24gaXJxYWN0aW9uOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBuZXh0X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgbWF4X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjZWQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9jeWNsZXM7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNoX2NtdF9sb2NrKTsKKworI2RlZmluZSBDTVNUUiAtMSAvKiBzaGFyZWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01DU1IgMCAvKiBjaGFubmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ05UIDEgLyogY2hhbm5lbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNPUiAyIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2NtdF9yZWFkKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHJlZ19ucikKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcC0+bWFwYmFzZTsKKwl1bnNpZ25lZCBsb25nIG9mZnM7CisKKwlpZiAocmVnX25yID09IENNU1RSKSB7CisJCW9mZnMgPSAwOworCQliYXNlIC09IGNmZy0+Y2hhbm5lbF9vZmZzZXQ7CisJfSBlbHNlCisJCW9mZnMgPSByZWdfbnI7CisKKwlpZiAocC0+d2lkdGggPT0gMTYpCisJCW9mZnMgPDw9IDE7CisJZWxzZSB7CisJCW9mZnMgPDw9IDI7CisJCWlmICgocmVnX25yID09IENNQ05UKSB8fCAocmVnX25yID09IENNQ09SKSkKKwkJCXJldHVybiBpb3JlYWQzMihiYXNlICsgb2Zmcyk7CisJfQorCisJcmV0dXJuIGlvcmVhZDE2KGJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoX2NtdF93cml0ZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCByZWdfbnIsCisJCQkJdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcC0+bWFwYmFzZTsKKwl1bnNpZ25lZCBsb25nIG9mZnM7CisKKwlpZiAocmVnX25yID09IENNU1RSKSB7CisJCW9mZnMgPSAwOworCQliYXNlIC09IGNmZy0+Y2hhbm5lbF9vZmZzZXQ7CisJfSBlbHNlCisJCW9mZnMgPSByZWdfbnI7CisKKwlpZiAocC0+d2lkdGggPT0gMTYpCisJCW9mZnMgPDw9IDE7CisJZWxzZSB7CisJCW9mZnMgPDw9IDI7CisJCWlmICgocmVnX25yID09IENNQ05UKSB8fCAocmVnX25yID09IENNQ09SKSkgeworCQkJaW93cml0ZTMyKHZhbHVlLCBiYXNlICsgb2Zmcyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpb3dyaXRlMTYodmFsdWUsIGJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfY210X2dldF9jb3VudGVyKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKKwkJCQkJaW50ICpoYXNfd3JhcHBlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHYxLCB2MiwgdjM7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRpbWVyIHZhbHVlIGlzIHN0YWJsZS4gU3RvbGVuIGZyb20gYWNwaV9wbS5jICovCisJZG8geworCQl2MSA9IHNoX2NtdF9yZWFkKHAsIENNQ05UKTsKKwkJdjIgPSBzaF9jbXRfcmVhZChwLCBDTUNOVCk7CisJCXYzID0gc2hfY210X3JlYWQocCwgQ01DTlQpOworCX0gd2hpbGUgKHVubGlrZWx5KCh2MSA+IHYyICYmIHYxIDwgdjMpIHx8ICh2MiA+IHYzICYmIHYyIDwgdjEpCisJCQkgIHx8ICh2MyA+IHYxICYmIHYzIDwgdjIpKSk7CisKKwkqaGFzX3dyYXBwZWQgPSBzaF9jbXRfcmVhZChwLCBDTUNTUikgJiBwLT5vdmVyZmxvd19iaXQ7CisJcmV0dXJuIHYyOworfQorCisKK3N0YXRpYyB2b2lkIHNoX2NtdF9zdGFydF9zdG9wX2NoKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHN0YXJ0KQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWx1ZTsKKworCS8qIHN0YXJ0IHN0b3AgcmVnaXN0ZXIgc2hhcmVkIGJ5IG11bHRpcGxlIHRpbWVyIGNoYW5uZWxzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNoX2NtdF9sb2NrLCBmbGFncyk7CisJdmFsdWUgPSBzaF9jbXRfcmVhZChwLCBDTVNUUik7CisKKwlpZiAoc3RhcnQpCisJCXZhbHVlIHw9IDEgPDwgY2ZnLT50aW1lcl9iaXQ7CisJZWxzZQorCQl2YWx1ZSAmPSB+KDEgPDwgY2ZnLT50aW1lcl9iaXQpOworCisJc2hfY210X3dyaXRlKHAsIENNU1RSLCB2YWx1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hfY210X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBzaF9jbXRfZW5hYmxlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyAqcmF0ZSkKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCS8qIGVuYWJsZSBjbG9jayAqLworCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiBjYW5ub3QgZW5hYmxlIGNsb2NrIFwiJXNcIlxuIiwgY2ZnLT5jbGspOworCQlyZXR1cm4gcmV0OworCX0KKwkqcmF0ZSA9IGNsa19nZXRfcmF0ZShwLT5jbGspIC8gODsKKworCS8qIG1ha2Ugc3VyZSBjaGFubmVsIGlzIGRpc2FibGVkICovCisJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisKKwkvKiBjb25maWd1cmUgY2hhbm5lbCwgcGVyaW9kaWMgbW9kZSBhbmQgbWF4aW11bSB0aW1lb3V0ICovCisJaWYgKHAtPndpZHRoID09IDE2KQorCQlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIDApOworCWVsc2UKKwkJc2hfY210X3dyaXRlKHAsIENNQ1NSLCAweDAxYTQpOworCisJc2hfY210X3dyaXRlKHAsIENNQ09SLCAweGZmZmZmZmZmKTsKKwlzaF9jbXRfd3JpdGUocCwgQ01DTlQsIDApOworCisJLyogZW5hYmxlIGNoYW5uZWwgKi8KKwlzaF9jbXRfc3RhcnRfc3RvcF9jaChwLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hfY210X2Rpc2FibGUoc3RydWN0IHNoX2NtdF9wcml2ICpwKQoreworCS8qIGRpc2FibGUgY2hhbm5lbCAqLworCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDApOworCisJLyogc3RvcCBjbG9jayAqLworCWNsa19kaXNhYmxlKHAtPmNsayk7Cit9CisKKy8qIHByaXZhdGUgZmxhZ3MgKi8KKyNkZWZpbmUgRkxBR19DTE9DS0VWRU5UICgxIDw8IDApCisjZGVmaW5lIEZMQUdfQ0xPQ0tTT1VSQ0UgKDEgPDwgMSkKKyNkZWZpbmUgRkxBR19SRVBST0dSQU0gKDEgPDwgMikKKyNkZWZpbmUgRkxBR19TS0lQRVZFTlQgKDEgPDwgMykKKyNkZWZpbmUgRkxBR19JUlFDT05URVhUICgxIDw8IDQpCisKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCisJCQkJCSAgICAgIGludCBhYnNvbHV0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG5ld19tYXRjaDsKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gcC0+bmV4dF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IDA7CisJaW50IGhhc193cmFwcGVkOworCisJbm93ID0gc2hfY210X2dldF9jb3VudGVyKHAsICZoYXNfd3JhcHBlZCk7CisJcC0+ZmxhZ3MgfD0gRkxBR19SRVBST0dSQU07IC8qIGZvcmNlIHJlcHJvZ3JhbSAqLworCisJaWYgKGhhc193cmFwcGVkKSB7CisJCS8qIHdlJ3JlIGNvbXBldGluZyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKwkJICogIC0+IGxldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcmVwcm9ncmFtIHRoZSB0aW1lci4KKwkJICogIC0+IGludGVycnVwdCBudW1iZXIgdHdvIGhhbmRsZXMgdGhlIGV2ZW50LgorCQkgKi8KKwkJcC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYWJzb2x1dGUpCisJCW5vdyA9IDA7CisKKwlkbyB7CisJCS8qIHJlcHJvZ3JhbSB0aGUgdGltZXIgaGFyZHdhcmUsCisJCSAqIGJ1dCBkb24ndCBzYXZlIHRoZSBuZXcgbWF0Y2ggdmFsdWUgeWV0LgorCQkgKi8KKwkJbmV3X21hdGNoID0gbm93ICsgdmFsdWUgKyBkZWxheTsKKwkJaWYgKG5ld19tYXRjaCA+IHAtPm1heF9tYXRjaF92YWx1ZSkKKwkJCW5ld19tYXRjaCA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKworCQlzaF9jbXRfd3JpdGUocCwgQ01DT1IsIG5ld19tYXRjaCk7CisKKwkJbm93ID0gc2hfY210X2dldF9jb3VudGVyKHAsICZoYXNfd3JhcHBlZCk7CisJCWlmIChoYXNfd3JhcHBlZCAmJiAobmV3X21hdGNoID4gcC0+bWF0Y2hfdmFsdWUpKSB7CisJCQkvKiB3ZSBhcmUgY2hhbmdpbmcgdG8gYSBncmVhdGVyIG1hdGNoIHZhbHVlLAorCQkJICogc28gdGhpcyB3cmFwIG11c3QgYmUgY2F1c2VkIGJ5IHRoZSBjb3VudGVyCisJCQkgKiBtYXRjaGluZyB0aGUgb2xkIHZhbHVlLgorCQkJICogLT4gZmlyc3QgaW50ZXJydXB0IHJlcHJvZ3JhbXMgdGhlIHRpbWVyLgorCQkJICogLT4gaW50ZXJydXB0IG51bWJlciB0d28gaGFuZGxlcyB0aGUgZXZlbnQuCisJCQkgKi8KKwkJCXAtPmZsYWdzIHw9IEZMQUdfU0tJUEVWRU5UOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaGFzX3dyYXBwZWQpIHsKKwkJCS8qIHdlIGFyZSBjaGFuZ2luZyB0byBhIHNtYWxsZXIgbWF0Y2ggdmFsdWUsCisJCQkgKiBzbyB0aGUgd3JhcCBtdXN0IGJlIGNhdXNlZCBieSB0aGUgY291bnRlcgorCQkJICogbWF0Y2hpbmcgdGhlIG5ldyB2YWx1ZS4KKwkJCSAqIC0+IHNhdmUgcHJvZ3JhbW1lZCBtYXRjaCB2YWx1ZS4KKwkJCSAqIC0+IGxldCBpc3IgaGFuZGxlIHRoZSBldmVudC4KKwkJCSAqLworCQkJcC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGJlIHNhZmU6IHZlcmlmeSBoYXJkd2FyZSBzZXR0aW5ncyAqLworCQlpZiAobm93IDwgbmV3X21hdGNoKSB7CisJCQkvKiB0aW1lciB2YWx1ZSBpcyBiZWxvdyBtYXRjaCB2YWx1ZSwgYWxsIGdvb2QuCisJCQkgKiB0aGlzIG1ha2VzIHN1cmUgd2Ugd29uJ3QgbWlzcyBhbnkgbWF0Y2ggZXZlbnRzLgorCQkJICogLT4gc2F2ZSBwcm9ncmFtbWVkIG1hdGNoIHZhbHVlLgorCQkJICogLT4gbGV0IGlzciBoYW5kbGUgdGhlIGV2ZW50LgorCQkJICovCisJCQlwLT5tYXRjaF92YWx1ZSA9IG5ld19tYXRjaDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogdGhlIGNvdW50ZXIgaGFzIHJlYWNoZWQgYSB2YWx1ZSBncmVhdGVyCisJCSAqIHRoYW4gb3VyIG5ldyBtYXRjaCB2YWx1ZS4gYW5kIHNpbmNlIHRoZQorCQkgKiBoYXNfd3JhcHBlZCBmbGFnIGlzbid0IHNldCB3ZSBtdXN0IGhhdmUKKwkJICogcHJvZ3JhbW1lZCBhIHRvbyBjbG9zZSBldmVudC4KKwkJICogLT4gaW5jcmVhc2UgZGVsYXkgYW5kIHJldHJ5LgorCQkgKi8KKwkJaWYgKGRlbGF5KQorCQkJZGVsYXkgPDw9IDE7CisJCWVsc2UKKwkJCWRlbGF5ID0gMTsKKworCQlpZiAoIWRlbGF5KQorCQkJcHJfd2FybmluZygic2hfY210OiB0b28gbG9uZyBkZWxheVxuIik7CisKKwl9IHdoaWxlIChkZWxheSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9zZXRfbmV4dChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgZGVsdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkZWx0YSA+IHAtPm1heF9tYXRjaF92YWx1ZSkKKwkJcHJfd2FybmluZygic2hfY210OiBkZWx0YSBvdXQgb2YgcmFuZ2VcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwlwLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGE7CisJc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX2NtdF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGRldl9pZDsKKworCS8qIGNsZWFyIGZsYWdzICovCisJc2hfY210X3dyaXRlKHAsIENNQ1NSLCBzaF9jbXRfcmVhZChwLCBDTUNTUikgJiBwLT5jbGVhcl9iaXRzKTsKKworCS8qIHVwZGF0ZSBjbG9jayBzb3VyY2UgY291bnRlciB0byBiZWdpbiB3aXRoIGlmIGVuYWJsZWQKKwkgKiB0aGUgd3JhcCBmbGFnIHNob3VsZCBiZSBjbGVhcmVkIGJ5IHRoZSB0aW1lciBzcGVjaWZpYworCSAqIGlzciBiZWZvcmUgd2UgZW5kIHVwIGhlcmUuCisJICovCisJaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkKKwkJcC0+dG90YWxfY3ljbGVzICs9IHAtPm1hdGNoX3ZhbHVlOworCisJaWYgKCEocC0+ZmxhZ3MgJiBGTEFHX1JFUFJPR1JBTSkpCisJCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisKKwlwLT5mbGFncyB8PSBGTEFHX0lSUUNPTlRFWFQ7CisKKwlpZiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpIHsKKwkJaWYgKCEocC0+ZmxhZ3MgJiBGTEFHX1NLSVBFVkVOVCkpIHsKKwkJCWlmIChwLT5jZWQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCQkJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKwkJCQlwLT5mbGFncyB8PSBGTEFHX1JFUFJPR1JBTTsKKwkJCX0KKworCQkJcC0+Y2VkLmV2ZW50X2hhbmRsZXIoJnAtPmNlZCk7CisJCX0KKwl9CisKKwlwLT5mbGFncyAmPSB+RkxBR19TS0lQRVZFTlQ7CisKKwlpZiAocC0+ZmxhZ3MgJiBGTEFHX1JFUFJPR1JBTSkgeworCQlwLT5mbGFncyAmPSB+RkxBR19SRVBST0dSQU07CisJCXNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShwLCAxKTsKKworCQlpZiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpCisJCQlpZiAoKHAtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1NIVVRET1dOKQorCQkJICAgIHx8IChwLT5tYXRjaF92YWx1ZSA9PSBwLT5uZXh0X21hdGNoX3ZhbHVlKSkKKwkJCQlwLT5mbGFncyAmPSB+RkxBR19SRVBST0dSQU07CisJfQorCisJcC0+ZmxhZ3MgJj0gfkZMQUdfSVJRQ09OVEVYVDsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzaF9jbXRfc3RhcnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGZsYWcpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIShwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKSkpCisJCXJldCA9IHNoX2NtdF9lbmFibGUocCwgJnAtPnJhdGUpOworCisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcC0+ZmxhZ3MgfD0gZmxhZzsKKworCS8qIHNldHVwIHRpbWVvdXQgaWYgbm8gY2xvY2tldmVudCAqLworCWlmICgoZmxhZyA9PSBGTEFHX0NMT0NLU09VUkNFKSAmJiAoIShwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkpKQorCQlzaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2hfY210X3N0b3Aoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGZsYWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCisJZiA9IHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpOworCXAtPmZsYWdzICY9IH5mbGFnOworCisJaWYgKGYgJiYgIShwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKSkpCisJCXNoX2NtdF9kaXNhYmxlKHApOworCisJLyogYWRqdXN0IHRoZSB0aW1lb3V0IHRvIG1heGltdW0gaWYgb25seSBjbG9ja3NvdXJjZSBsZWZ0ICovCisJaWYgKChmbGFnID09IEZMQUdfQ0xPQ0tFVkVOVCkgJiYgKHAtPmZsYWdzICYgRkxBR19DTE9DS1NPVVJDRSkpCisJCXNoX2NtdF9zZXRfbmV4dChwLCBwLT5tYXhfbWF0Y2hfdmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHNoX2NtdF9wcml2ICpjZWRfdG9fc2hfY210KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNlZCwgc3RydWN0IHNoX2NtdF9wcml2LCBjZWQpOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcGVyaW9kaWMpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJnAtPmNlZDsKKworCXNoX2NtdF9zdGFydChwLCBGTEFHX0NMT0NLRVZFTlQpOworCisJLyogVE9ETzogY2FsY3VsYXRlIGdvb2Qgc2hpZnQgZnJvbSByYXRlIGFuZCBjb3VudGVyIGJpdCB3aWR0aCAqLworCisJY2VkLT5zaGlmdCA9IDMyOworCWNlZC0+bXVsdCA9IGRpdl9zYyhwLT5yYXRlLCBOU0VDX1BFUl9TRUMsIGNlZC0+c2hpZnQpOworCWNlZC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhwLT5tYXhfbWF0Y2hfdmFsdWUsIGNlZCk7CisJY2VkLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MWYsIGNlZCk7CisKKwlpZiAocGVyaW9kaWMpCisJCXNoX2NtdF9zZXRfbmV4dChwLCAocC0+cmF0ZSArIEhaLzIpIC8gSFopOworCWVsc2UKKwkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY2VkX3RvX3NoX2NtdChjZWQpOworCisJLyogZGVhbCB3aXRoIG9sZCBzZXR0aW5nIGZpcnN0ICovCisJc3dpdGNoIChjZWQtPm1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJc2hfY210X3N0b3AocCwgRkxBR19DTE9DS0VWRU5UKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBwZXJpb2RpYyBjbG9jayBldmVudHNcbiIsCisJCQljZWQtPm5hbWUpOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQocCwgMSk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBvbmVzaG90IGNsb2NrIGV2ZW50c1xuIiwKKwkJCWNlZC0+bmFtZSk7CisJCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwkJc2hfY210X3N0b3AocCwgRkxBR19DTE9DS0VWRU5UKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNoX2NtdF9jbG9ja19ldmVudF9uZXh0KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGNlZF90b19zaF9jbXQoY2VkKTsKKworCUJVR19PTihjZWQtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CisJaWYgKGxpa2VseShwLT5mbGFncyAmIEZMQUdfSVJRQ09OVEVYVCkpCisJCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBkZWx0YTsKKwllbHNlCisJCXNoX2NtdF9zZXRfbmV4dChwLCBkZWx0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hfY210X3JlZ2lzdGVyX2Nsb2NrZXZlbnQoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorCQkJCSAgICAgICBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIHJhdGluZykKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmcC0+Y2VkOworCisJbWVtc2V0KGNlZCwgMCwgc2l6ZW9mKCpjZWQpKTsKKworCWNlZC0+bmFtZSA9IG5hbWU7CisJY2VkLT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDOworCWNlZC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKKwljZWQtPnJhdGluZyA9IHJhdGluZzsKKwljZWQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNlZC0+c2V0X25leHRfZXZlbnQgPSBzaF9jbXRfY2xvY2tfZXZlbnRfbmV4dDsKKwljZWQtPnNldF9tb2RlID0gc2hfY210X2Nsb2NrX2V2ZW50X21vZGU7CisKKwlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKKwljZWQtPm11bHQgPSAxOyAvKiB3b3JrIGFyb3VuZCBtaXNwbGFjZWQgV0FSTl9PTigpIGluIGNsb2NrZXZlbnRzLmMgKi8KKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKK30KKworaW50IHNoX2NtdF9yZWdpc3RlcihzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGNoYXIgKm5hbWUsCisJCSAgICB1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfcmF0aW5nLAorCQkgICAgdW5zaWduZWQgbG9uZyBjbG9ja3NvdXJjZV9yYXRpbmcpCit7CisJaWYgKHAtPndpZHRoID09IChzaXplb2YocC0+bWF4X21hdGNoX3ZhbHVlKSAqIDgpKQorCQlwLT5tYXhfbWF0Y2hfdmFsdWUgPSB+MDsKKwllbHNlCisJCXAtPm1heF9tYXRjaF92YWx1ZSA9ICgxIDw8IHAtPndpZHRoKSAtIDE7CisKKwlwLT5tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKwlzcGluX2xvY2tfaW5pdCgmcC0+bG9jayk7CisKKwlpZiAoY2xvY2tldmVudF9yYXRpbmcpCisJCXNoX2NtdF9yZWdpc3Rlcl9jbG9ja2V2ZW50KHAsIG5hbWUsIGNsb2NrZXZlbnRfcmF0aW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9zZXR1cChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnEsIHJldDsKKwlyZXQgPSAtRU5YSU87CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisJcC0+cGRldiA9IHBkZXY7CisKKwlpZiAoIWNmZykgeworCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocC0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHAtPnBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaXJxXG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCS8qIG1hcCBtZW1vcnksIGxldCBtYXBiYXNlIHBvaW50IHRvIG91ciBjaGFubmVsICovCisJcC0+bWFwYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChwLT5tYXBiYXNlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCS8qIHJlcXVlc3QgaXJxIHVzaW5nIHNldHVwX2lycSgpICh0b28gZWFybHkgZm9yIHJlcXVlc3RfaXJxKCkpICovCisJcC0+aXJxYWN0aW9uLm5hbWUgPSBjZmctPm5hbWU7CisJcC0+aXJxYWN0aW9uLmhhbmRsZXIgPSBzaF9jbXRfaW50ZXJydXB0OworCXAtPmlycWFjdGlvbi5kZXZfaWQgPSBwOworCXAtPmlycWFjdGlvbi5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMOworCXAtPmlycWFjdGlvbi5tYXNrID0gQ1BVX01BU0tfTk9ORTsKKwlyZXQgPSBzZXR1cF9pcnEoaXJxLCAmcC0+aXJxYWN0aW9uKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBnZXQgaG9sZCBvZiBjbG9jayAqLworCXAtPmNsayA9IGNsa19nZXQoJnAtPnBkZXYtPmRldiwgY2ZnLT5jbGspOworCWlmIChJU19FUlIocC0+Y2xrKSkgeworCQlwcl9lcnIoInNoX2NtdDogY2Fubm90IGdldCBjbG9jayBcIiVzXCJcbiIsIGNmZy0+Y2xrKTsKKwkJcmV0ID0gUFRSX0VSUihwLT5jbGspOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKHJlc291cmNlX3NpemUocmVzKSA9PSA2KSB7CisJCXAtPndpZHRoID0gMTY7CisJCXAtPm92ZXJmbG93X2JpdCA9IDB4ODA7CisJCXAtPmNsZWFyX2JpdHMgPSB+MHhjMDsKKwl9IGVsc2UgeworCQlwLT53aWR0aCA9IDMyOworCQlwLT5vdmVyZmxvd19iaXQgPSAweDgwMDA7CisJCXAtPmNsZWFyX2JpdHMgPSB+MHhjMDAwOworCX0KKworCXJldHVybiBzaF9jbXRfcmVnaXN0ZXIocCwgY2ZnLT5uYW1lLAorCQkJICAgICAgIGNmZy0+Y2xvY2tldmVudF9yYXRpbmcsCisJCQkgICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOworIGVycjI6CisJZnJlZV9pcnEoaXJxLCBwKTsKKyBlcnIxOgorCWlvdW5tYXAocC0+bWFwYmFzZSk7CisgZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9jbXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHAgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBzaF9jbXRfc2V0dXAocCwgcGRldik7CisJaWYgKHJldCkgeworCQlrZnJlZShwKTsKKworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2hfY210X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAtRUJVU1k7IC8qIGNhbm5vdCB1bnJlZ2lzdGVyIGNsb2NrZXZlbnQgYW5kIGNsb2Nrc291cmNlICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2NtdF9kZXZpY2VfZHJpdmVyID0geworCS5wcm9iZQkJPSBzaF9jbXRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9jbXRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2hfY210IiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9jbXRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoX2NtdF9kZXZpY2VfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNoX2NtdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX2NtdF9kZXZpY2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2hfY210X2luaXQpOworbW9kdWxlX2V4aXQoc2hfY210X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggQ01UIFRpbWVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKaW5kZXggYjZmZTdlNy4uYzc2OWVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqIAljbl9xdWV1ZS5jCi0gKiAKKyAqCiAgKiAyMDA0LTIwMDUgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTMxLDYgKzMxLDQ4IEBACiAjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAorCisvKgorICogVGhpcyBqb2IgaXMgc2VudCB0byB0aGUga2V2ZW50IHdvcmtxdWV1ZS4KKyAqIFdoaWxlIG5vIGV2ZW50IGlzIG9uY2Ugc2VudCB0byBhbnkgY2FsbGJhY2ssIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlCisgKiBpcyBub3QgY3JlYXRlZCB0byBhdm9pZCBhIHVzZWxlc3Mgd2FpdGluZyBrZXJuZWwgdGFzay4KKyAqIE9uY2UgdGhlIGZpcnN0IGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBjcmVhdGUgdGhpcyBkZWRpY2F0ZWQgd29ya3F1ZXVlIHdoaWNoCisgKiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZmxvdyBvZiBkYXRhIGNhbiBiZSBoaWdoIGFuZCB3ZSBkb24ndCB3YW50CisgKiB0byBlbmN1bWJlciBrZXZlbnRkIHdpdGggdGhhdC4KKyAqLworc3RhdGljIHZvaWQgY25fcXVldWVfY3JlYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXY7CisKKwlkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNuX3F1ZXVlX2Rldiwgd3FfY3JlYXRpb24pOworCisJZGV2LT5jbl9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldi0+bmFtZSk7CisJLyogSWYgd2UgZmFpbCwgd2Ugd2lsbCB1c2Uga2V2ZW50ZCBmb3IgYWxsIGZvbGxvd2luZyBjb25uZWN0b3Igam9icyAqLworCVdBUk5fT04oIWRldi0+Y25fcXVldWUpOworfQorCisvKgorICogUXVldWUgYSBkYXRhIHNlbnQgdG8gYSBjYWxsYmFjay4KKyAqIElmIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlIGlzIGFscmVhZHkgY3JlYXRlZCwgd2UgcXVldWUgdGhlIGpvYiBvbiBpdC4KKyAqIE90aGVyd2lzZSwgd2UgcXVldWUgdGhlIGpvYiB0byBrZXZlbnQgYW5kIHF1ZXVlIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlCisgKiBjcmVhdGlvbiB0b28uCisgKi8KK2ludCBxdWV1ZV9jbl93b3JrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNuX3F1ZXVlX2RldiAqcGRldiA9IGNicS0+cGRldjsKKworCWlmIChsaWtlbHkocGRldi0+Y25fcXVldWUpKQorCQlyZXR1cm4gcXVldWVfd29yayhwZGV2LT5jbl9xdWV1ZSwgd29yayk7CisKKwkvKiBEb24ndCBjcmVhdGUgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUgdHdpY2UgKi8KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBkZXYtPndxX3JlcXVlc3RlZCkgPT0gMSkKKwkJc2NoZWR1bGVfd29yaygmcGRldi0+d3FfY3JlYXRpb24pOworCWVsc2UKKwkJYXRvbWljX2RlYygmcGRldi0+d3FfcmVxdWVzdGVkKTsKKworCXJldHVybiBzY2hlZHVsZV93b3JrKHdvcmspOworfQorCiB2b2lkIGNuX3F1ZXVlX3dyYXBwZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxID0KQEAgLTU4LDE0ICsxMDAsMTcgQEAKIAlzbnByaW50ZihjYnEtPmlkLm5hbWUsIHNpemVvZihjYnEtPmlkLm5hbWUpLCAiJXMiLCBuYW1lKTsKIAltZW1jcHkoJmNicS0+aWQuaWQsIGlkLCBzaXplb2Yoc3RydWN0IGNiX2lkKSk7CiAJY2JxLT5kYXRhLmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0JCisKIAlJTklUX1dPUksoJmNicS0+d29yaywgJmNuX3F1ZXVlX3dyYXBwZXIpOwogCXJldHVybiBjYnE7CiB9CiAKIHN0YXRpYyB2b2lkIGNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEpCiB7Ci0JZmx1c2hfd29ya3F1ZXVlKGNicS0+cGRldi0+Y25fcXVldWUpOworCS8qIFRoZSBmaXJzdCBqb2JzIGhhdmUgYmVlbiBzZW50IHRvIGtldmVudCwgZmx1c2ggdGhlbSB0b28gKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWlmIChjYnEtPnBkZXYtPmNuX3F1ZXVlKQorCQlmbHVzaF93b3JrcXVldWUoY2JxLT5wZGV2LT5jbl9xdWV1ZSk7CiAKIAlrZnJlZShjYnEpOwogfQpAQCAtMTQzLDE0ICsxODgsMTEgQEAKIAlhdG9taWNfc2V0KCZkZXYtPnJlZmNudCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+cXVldWVfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+cXVldWVfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53cV9jcmVhdGVkKTsKIAogCWRldi0+bmxzID0gbmxzOwogCi0JZGV2LT5jbl9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldi0+bmFtZSk7Ci0JaWYgKCFkZXYtPmNuX3F1ZXVlKSB7Ci0JCWtmcmVlKGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlJTklUX1dPUksoJmRldi0+d3FfY3JlYXRpb24sIGNuX3F1ZXVlX2NyZWF0ZSk7CiAKIAlyZXR1cm4gZGV2OwogfQpAQCAtMTU4LDkgKzIwMCwyNSBAQAogdm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpuOworCWxvbmcgdGltZW91dDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKIAotCWZsdXNoX3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKKwkvKiBGbHVzaCB0aGUgZmlyc3QgcGVuZGluZyBqb2JzIHF1ZXVlZCBvbiBrZXZlbnQgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogSWYgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUgY3JlYXRpb24gaXMgc3RpbGwgcGVuZGluZywgd2FpdCBmb3IgaXQgKi8KKwlwcmVwYXJlX3RvX3dhaXQoJmRldi0+d3FfY3JlYXRlZCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+d3FfcmVxdWVzdGVkKSAmJiAhZGV2LT5jbl9xdWV1ZSkgeworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChIWiAqIDIpOworCQlpZiAoIXRpbWVvdXQgJiYgIWRldi0+Y25fcXVldWUpCisJCQlXQVJOX09OKDEpOworCX0KKwlmaW5pc2hfd2FpdCgmZGV2LT53cV9jcmVhdGVkLCAmd2FpdCk7CisKKwlpZiAoZGV2LT5jbl9xdWV1ZSkgeworCQlmbHVzaF93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOworCX0KIAogCXNwaW5fbG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKaW5kZXggYmY0ODMwMC4uZmQzMzZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogCWNvbm5lY3Rvci5jCi0gKiAKKyAqCiAgKiAyMDA0LTIwMDUgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTE0NSwxNCArMTQ1LDEzIEBACiAJCQkJX19jYnEtPmRhdGEuZGRhdGEgPSBkYXRhOwogCQkJCV9fY2JxLT5kYXRhLmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCi0JCQkJaWYgKHF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUsCi0JCQkJCQkJJl9fY2JxLT53b3JrKSkKKwkJCQlpZiAocXVldWVfY25fd29yayhfX2NicSwgJl9fY2JxLT53b3JrKSkKIAkJCQkJZXJyID0gMDsKIAkJCQllbHNlCiAJCQkJCWVyciA9IC1FSU5WQUw7CiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCBjbl9jYWxsYmFja19kYXRhICpkOwotCQkJCQorCiAJCQkJZXJyID0gLUVOT01FTTsKIAkJCQlfX25ld19jYnEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkpLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoX19uZXdfY2JxKSB7CkBAIC0xNjMsMTAgKzE2MiwxMiBAQAogCQkJCQlkLT5kZXN0cnVjdF9kYXRhID0gZGVzdHJ1Y3RfZGF0YTsKIAkJCQkJZC0+ZnJlZSA9IF9fbmV3X2NicTsKIAorCQkJCQlfX25ld19jYnEtPnBkZXYgPSBfX2NicS0+cGRldjsKKwogCQkJCQlJTklUX1dPUksoJl9fbmV3X2NicS0+d29yaywKIAkJCQkJCQkmY25fcXVldWVfd3JhcHBlcik7CiAKLQkJCQkJaWYgKHF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUsCisJCQkJCWlmIChxdWV1ZV9jbl93b3JrKF9fbmV3X2NicSwKIAkJCQkJCSAgICAmX19uZXdfY2JxLT53b3JrKSkKIAkJCQkJCWVyciA9IDA7CiAJCQkJCWVsc2UgewpAQCAtMjM3LDcgKzIzOCw3IEBACiAKIAkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlfcmVxICopY3RsLT5kYXRhOwogCQlmb3IgKGkgPSAwOyBpIDwgY3RsLT5pZHhfbm90aWZ5X251bTsgKytpLCArK3JlcSkgewotCQkJaWYgKGlkLT5pZHggPj0gcmVxLT5maXJzdCAmJiAKKwkJCWlmIChpZC0+aWR4ID49IHJlcS0+Zmlyc3QgJiYKIAkJCQkJaWQtPmlkeCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7CiAJCQkJaWR4X2ZvdW5kID0gMTsKIAkJCQlicmVhazsKQEAgLTI0NSw3ICsyNDYsNyBAQAogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IGN0bC0+dmFsX25vdGlmeV9udW07ICsraSwgKytyZXEpIHsKLQkJCWlmIChpZC0+dmFsID49IHJlcS0+Zmlyc3QgJiYgCisJCQlpZiAoaWQtPnZhbCA+PSByZXEtPmZpcnN0ICYmCiAJCQkJCWlkLT52YWwgPCByZXEtPmZpcnN0ICsgcmVxLT5yYW5nZSkgewogCQkJCXZhbF9mb3VuZCA9IDE7CiAJCQkJYnJlYWs7CkBAIC00NTksNyArNDYwLDcgQEAKIAkJbmV0bGlua19rZXJuZWxfcmVsZWFzZShkZXYtPm5scyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQkKKwogCWNuX2FscmVhZHlfaW5pdGlhbGl6ZWQgPSAxOwogCiAJZXJyID0gY25fYWRkX2NhbGxiYWNrKCZkZXYtPmlkLCAiY29ubmVjdG9yIiwgJmNuX2NhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IGQ2ZGFmM2MuLmQyNzBlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTA0LDcgKzEwNCw4IEBACiAKIAogLyogaW50ZXJuYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCk7CitzdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJdW5zaWduZWQgaW50IGV2ZW50KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KTsKIHN0YXRpYyB2b2lkIGhhbmRsZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIApAQCAtMTI4LDcgKzEyOSw3IEBACiBwdXJlX2luaXRjYWxsKGluaXRfY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QpOwogCiBzdGF0aWMgTElTVF9IRUFEKGNwdWZyZXFfZ292ZXJub3JfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYIChjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAKIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9jcHVfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC0zNzEsNyArMzcyLDcgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqdDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkKLQkJaWYgKCFzdHJuaWNtcChzdHJfZ292ZXJub3IsdC0+bmFtZSxDUFVGUkVRX05BTUVfTEVOKSkKKwkJaWYgKCFzdHJuaWNtcChzdHJfZ292ZXJub3IsIHQtPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pKQogCQkJcmV0dXJuIHQ7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTQyOSwxNSArNDMwLDExIEBACiAKIAkJbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAl9Ci0gIG91dDoKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiAKLS8qIGRyaXZlcnMvYmFzZS9jcHUuYyAqLwotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgY3B1X3N5c2Rldl9jbGFzczsKLQotCiAvKioKICAqIGNwdWZyZXFfcGVyX2NwdV9hdHRyX3JlYWQoKSAvIHNob3dfIyNmaWxlX25hbWUoKSAtCiAgKiBwcmludCBvdXQgY3B1ZnJlcSBpbmZvcm1hdGlvbgpAQCAtNDUwLDExICs0NDcsMTIgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNmaWxlX25hbWUJCQkJXAogKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCQlcCiB7CQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIHBvbGljeS0+b2JqZWN0KTsJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwb2xpY3ktPm9iamVjdCk7CVwKIH0KIAogc2hvd19vbmUoY3B1aW5mb19taW5fZnJlcSwgY3B1aW5mby5taW5fZnJlcSk7CiBzaG93X29uZShjcHVpbmZvX21heF9mcmVxLCBjcHVpbmZvLm1heF9mcmVxKTsKK3Nob3dfb25lKGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5LCBjcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSk7CiBzaG93X29uZShzY2FsaW5nX21pbl9mcmVxLCBtaW4pOwogc2hvd19vbmUoc2NhbGluZ19tYXhfZnJlcSwgbWF4KTsKIHNob3dfb25lKHNjYWxpbmdfY3VyX2ZyZXEsIGN1cik7CkBAIC00NzYsNyArNDc0LDcgQEAKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJm5ld19wb2xpY3kub2JqZWN0KTsJCQlcCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJm5ld19wb2xpY3kub2JqZWN0KTsJCQlcCiAJaWYgKHJldCAhPSAxKQkJCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTQ4Niw4ICs0ODQsOCBAQAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsJCQkJCVwKIH0KIAotc3RvcmVfb25lKHNjYWxpbmdfbWluX2ZyZXEsbWluKTsKLXN0b3JlX29uZShzY2FsaW5nX21heF9mcmVxLG1heCk7CitzdG9yZV9vbmUoc2NhbGluZ19taW5fZnJlcSwgbWluKTsKK3N0b3JlX29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogCiAvKioKICAqIHNob3dfY3B1aW5mb19jdXJfZnJlcSAtIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBhcyBkZXRlY3RlZCBieSBoYXJkd2FyZQpAQCAtNTA3LDEyICs1MDUsMTMgQEAKICAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zY2FsaW5nX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JaWYocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUE9XRVJTQVZFKQorCWlmIChwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBvd2Vyc2F2ZVxuIik7CiAJZWxzZSBpZiAocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBlcmZvcm1hbmNlXG4iKTsKIAllbHNlIGlmIChwb2xpY3ktPmdvdmVybm9yKQotCQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzXG4iLCBwb2xpY3ktPmdvdmVybm9yLT5uYW1lKTsKKwkJcmV0dXJuIHNjbnByaW50ZihidWYsIENQVUZSRVFfTkFNRV9MRU4sICIlc1xuIiwKKwkJCQlwb2xpY3ktPmdvdmVybm9yLT5uYW1lKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNTMxLDcgKzUzMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNzY2FuZiAoYnVmLCAiJTE1cyIsIHN0cl9nb3Zlcm5vcik7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiUxNXMiLCBzdHJfZ292ZXJub3IpOwogCWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU3NSw3ICs1NzQsOCBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkgewotCQlpZiAoaSA+PSAoc3NpemVfdCkgKChQQUdFX1NJWkUgLyBzaXplb2YoY2hhcikpIC0gKENQVUZSRVFfTkFNRV9MRU4gKyAyKSkpCisJCWlmIChpID49IChzc2l6ZV90KSAoKFBBR0VfU0laRSAvIHNpemVvZihjaGFyKSkKKwkJICAgIC0gKENQVUZSRVFfTkFNRV9MRU4gKyAyKSkpCiAJCQlnb3RvIG91dDsKIAkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzICIsIHQtPm5hbWUpOwogCX0KQEAgLTU5NCw3ICs1OTQsNyBAQAogCQkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgKFBBR0VfU0laRSAtIGkgLSAyKSwgIiAiKTsKIAkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgKFBBR0VfU0laRSAtIGkgLSAyKSwgIiV1IiwgY3B1KTsKIAkJaWYgKGkgPj0gKFBBR0VfU0laRSAtIDUpKQotCQkgICAgYnJlYWs7CisJCQlicmVhazsKIAl9CiAJaSArPSBzcHJpbnRmKCZidWZbaV0sICJcbiIpOwogCXJldHVybiBpOwpAQCAtNjYwLDYgKzY2MCw3IEBACiBkZWZpbmVfb25lX3JvMDQwMChjcHVpbmZvX2N1cl9mcmVxKTsKIGRlZmluZV9vbmVfcm8oY3B1aW5mb19taW5fZnJlcSk7CiBkZWZpbmVfb25lX3JvKGNwdWluZm9fbWF4X2ZyZXEpOworZGVmaW5lX29uZV9ybyhjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSk7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycyk7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfZHJpdmVyKTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19jdXJfZnJlcSk7CkBAIC02NzMsNiArNjc0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJmNwdWluZm9fbWluX2ZyZXEuYXR0ciwKIAkmY3B1aW5mb19tYXhfZnJlcS5hdHRyLAorCSZjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeS5hdHRyLAogCSZzY2FsaW5nX21pbl9mcmVxLmF0dHIsCiAJJnNjYWxpbmdfbWF4X2ZyZXEuYXR0ciwKIAkmYWZmZWN0ZWRfY3B1cy5hdHRyLApAQCAtNjg0LDEwICs2ODYsMTAgQEAKIAlOVUxMCiB9OwogCi0jZGVmaW5lIHRvX3BvbGljeShrKSBjb250YWluZXJfb2YoayxzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3ksa29iaikKLSNkZWZpbmUgdG9fYXR0cihhKSBjb250YWluZXJfb2YoYSxzdHJ1Y3QgZnJlcV9hdHRyLGF0dHIpCisjZGVmaW5lIHRvX3BvbGljeShrKSBjb250YWluZXJfb2Yoaywgc3RydWN0IGNwdWZyZXFfcG9saWN5LCBrb2JqKQorI2RlZmluZSB0b19hdHRyKGEpIGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgZnJlcV9hdHRyLCBhdHRyKQogCi1zdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyICxjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSB0b19wb2xpY3koa29iaik7CiAJc3RydWN0IGZyZXFfYXR0ciAqZmF0dHIgPSB0b19hdHRyKGF0dHIpOwpAQCAtODUzLDEwICs4NTUsMTAgQEAKIAkJaWYgKGNwdSA9PSBqKQogCQkJY29udGludWU7CiAKLQkJLyogY2hlY2sgZm9yIGV4aXN0aW5nIGFmZmVjdGVkIENQVXMuICBUaGV5IG1heSBub3QgYmUgYXdhcmUKLQkJICogb2YgaXQgZHVlIHRvIENQVSBIb3RwbHVnLgorCQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgYWZmZWN0ZWQgQ1BVcy4KKwkJICogVGhleSBtYXkgbm90IGJlIGF3YXJlIG9mIGl0IGR1ZSB0byBDUFUgSG90cGx1Zy4KIAkJICovCi0JCW1hbmFnZWRfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGopOwkJLy8gRklYTUU6IFdoZXJlIGlzIHRoaXMgcmVsZWFzZWQ/ICBXaGF0IGFib3V0IGVycm9yIHBhdGhzPworCQltYW5hZ2VkX3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChqKTsJCS8qIEZJWE1FOiBXaGVyZSBpcyB0aGlzIHJlbGVhc2VkPyAgV2hhdCBhYm91dCBlcnJvciBwYXRocz8gKi8KIAkJaWYgKHVubGlrZWx5KG1hbmFnZWRfcG9saWN5KSkgewogCiAJCQkvKiBTZXQgcHJvcGVyIHBvbGljeV9jcHUgKi8KQEAgLTExMjcsOCArMTEyOSw4IEBACiAgKglAb2xkX2ZyZXE6IENQVSBmcmVxdWVuY3kgdGhlIGtlcm5lbCB0aGlua3MgdGhlIENQVSBydW5zIGF0CiAgKglAbmV3X2ZyZXE6IENQVSBmcmVxdWVuY3kgdGhlIENQVSBhY3R1YWxseSBydW5zIGF0CiAgKgotICoJV2UgYWRqdXN0IHRvIGN1cnJlbnQgZnJlcXVlbmN5IGZpcnN0LCBhbmQgbmVlZCB0byBjbGVhbiB1cCBsYXRlci4gU28gZWl0aGVyIGNhbGwKLSAqCXRvIGNwdWZyZXFfdXBkYXRlX3BvbGljeSgpIG9yIHNjaGVkdWxlIGhhbmRsZV91cGRhdGUoKSkuCisgKglXZSBhZGp1c3QgdG8gY3VycmVudCBmcmVxdWVuY3kgZmlyc3QsIGFuZCBuZWVkIHRvIGNsZWFuIHVwIGxhdGVyLgorICoJU28gZWl0aGVyIGNhbGwgdG8gY3B1ZnJlcV91cGRhdGVfcG9saWN5KCkgb3Igc2NoZWR1bGUgaGFuZGxlX3VwZGF0ZSgpKS4KICAqLwogc3RhdGljIHZvaWQgY3B1ZnJlcV9vdXRfb2Zfc3luYyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgb2xkX2ZyZXEsCiAJCQkJdW5zaWduZWQgaW50IG5ld19mcmVxKQpAQCAtMTYxMCw3ICsxNjEyLDggQEAKIAogLyoqCiAgKiBjcHVmcmVxX2dldF9wb2xpY3kgLSBnZXQgdGhlIGN1cnJlbnQgY3B1ZnJlcV9wb2xpY3kKLSAqIEBwb2xpY3k6IHN0cnVjdCBjcHVmcmVxX3BvbGljeSBpbnRvIHdoaWNoIHRoZSBjdXJyZW50IGNwdWZyZXFfcG9saWN5IGlzIHdyaXR0ZW4KKyAqIEBwb2xpY3k6IHN0cnVjdCBjcHVmcmVxX3BvbGljeSBpbnRvIHdoaWNoIHRoZSBjdXJyZW50IGNwdWZyZXFfcG9saWN5CisgKglpcyB3cml0dGVuCiAgKgogICogUmVhZHMgdGhlIGN1cnJlbnQgY3B1ZnJlcSBwb2xpY3kuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKaW5kZXggMDMyMDk2Mi4uMmVjZDk1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSBSdXNzZWxsIEtpbmcKICAqICAgICAgICAgICAgKEMpICAyMDAzIFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPi4KICAqICAgICAgICAgICAgICAgICAgICAgIEp1biBOYWthamltYSA8anVuLm5ha2FqaW1hQGludGVsLmNvbT4KLSAqICAgICAgICAgICAgKEMpICAyMDA0IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4LWtlcm5lbEBkaWdyaXoub3JnLnVrPgorICogICAgICAgICAgICAoQykgIDIwMDkgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEzLDIyICsxMywxNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCiAvKgogICogZGJzIGlzIHVzZWQgaW4gdGhpcyBmaWxlIGFzIGEgc2hvcnRmb3JtIGZvciBkZW1hbmRiYXNlZCBzd2l0Y2hpbmcKICAqIEl0IGhlbHBzIHRvIGtlZXAgdmFyaWFibGUgbmFtZXMgc21hbGxlciwgc2ltcGxlcgpAQCAtNDMsMTkgKzM4LDMxIEBACiAgKiBsYXRlbmN5IG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBnb3Zlcm5vciB3aWxsIHdvcmsgb24gYW55IHByb2Nlc3NvciB3aXRoCiAgKiB0cmFuc2l0aW9uIGxhdGVuY3kgPD0gMTBtUywgdXNpbmcgYXBwcm9wcmlhdGUgc2FtcGxpbmcKICAqIHJhdGUuCi0gKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRpb24gbGF0ZW5jeSA+IDEwbVMgKG1vc3RseSBkcml2ZXJzCi0gKiB3aXRoIENQVUZSRVFfRVRFUk5BTCksIHRoaXMgZ292ZXJub3Igd2lsbCBub3Qgd29yay4KKyAqIEZvciBDUFVzIHdpdGggdHJhbnNpdGlvbiBsYXRlbmN5ID4gMTBtUyAobW9zdGx5IGRyaXZlcnMgd2l0aCBDUFVGUkVRX0VURVJOQUwpCisgKiB0aGlzIGdvdmVybm9yIHdpbGwgbm90IHdvcmsuCiAgKiBBbGwgdGltZXMgaGVyZSBhcmUgaW4gdVMuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmX3NhbXBsaW5nX3JhdGU7CiAjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFX1JBVElPCQkJKDIpCiAvKiBmb3IgY29ycmVjdCBzdGF0aXN0aWNzLCB3ZSBuZWVkIGF0IGxlYXN0IDEwIHRpY2tzIGJldHdlZW4gZWFjaCBtZWFzdXJlICovCi0jZGVmaW5lIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUJCQlcCisjZGVmaW5lIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUgCQkJXAogCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCiAjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJXAogCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCisvKiBBYm92ZSBNSU5fU0FNUExJTkdfUkFURSB3aWxsIHZhbmlzaCB3aXRoIGl0cyBzeXNmcyBmaWxlIHNvb24KKyAqIERlZmluZSB0aGUgbWluaW1hbCBzZXR0YWJsZSBzYW1wbGluZyByYXRlIHRvIHRoZSBncmVhdGVyIG9mOgorICogICAtICJIVyB0cmFuc2l0aW9uIGxhdGVuY3kiICogMTAwIChzYW1lIGFzIGRlZmF1bHQgc2FtcGxpbmcgLyAxMCkKKyAqICAgLSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCisgKiBUbyBhdm9pZCB0aGF0IHVzZXJzcGFjZSBzaG9vdHMgaXRzZWxmLgorKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zYW1wbGluZ19yYXRlKHZvaWQpCit7CisJcmV0dXJuIG1heChkZWZfc2FtcGxpbmdfcmF0ZSAvIDEwLCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKK30KKworLyogVGhpcyB3aWxsIGFsc28gdmFuaXNoIHNvb24gd2l0aCByZW1vdmluZyBzYW1wbGluZ19yYXRlX21heCAqLwogI2RlZmluZSBNQVhfU0FNUExJTkdfUkFURQkJCSg1MDAgKiBkZWZfc2FtcGxpbmdfcmF0ZSkKLSNkZWZpbmUgREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSCSgxMDAwKQorI2RlZmluZSBMQVRFTkNZX01VTFRJUExJRVIJCQkoMTAwMCkKICNkZWZpbmUgREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMSkKICNkZWZpbmUgTUFYX1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMTApCiAjZGVmaW5lIFRSQU5TSVRJT05fTEFURU5DWV9MSU1JVAkJKDEwICogMTAwMCAqIDEwMDApCkBAIC02MywxMiArNzAsMTUgQEAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgeworCWNwdXRpbWU2NF90IHByZXZfY3B1X2lkbGU7CisJY3B1dGltZTY0X3QgcHJldl9jcHVfd2FsbDsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV9uaWNlOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3VyX3BvbGljeTsKLQl1bnNpZ25lZCBpbnQgcHJldl9jcHVfaWRsZV91cDsKLQl1bnNpZ25lZCBpbnQgcHJldl9jcHVfaWRsZV9kb3duOwotCXVuc2lnbmVkIGludCBlbmFibGU7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXVuc2lnbmVkIGludCBkb3duX3NraXA7CiAJdW5zaWduZWQgaW50IHJlcXVlc3RlZF9mcmVxOworCWludCBjcHU7CisJdW5zaWduZWQgaW50IGVuYWJsZToxOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIGNwdV9kYnNfaW5mbyk7CiAKQEAgLTgyLDE5ICs5MiwxOCBAQAogICogY3B1X2hvdHBsdWcgbG9jayBzaG91bGQgYmUgdGFrZW4gYmVmb3JlIHRoYXQuIE5vdGUgdGhhdCBjcHVfaG90cGx1ZyBsb2NrCiAgKiBpcyByZWN1cnNpdmUgZm9yIHRoZSBzYW1lIHByb2Nlc3MuIC1WZW5raQogICovCi1zdGF0aWMgREVGSU5FX01VVEVYIChkYnNfbXV0ZXgpOwotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGRic193b3JrLCBkb19kYnNfdGltZXIpOworc3RhdGljIERFRklORV9NVVRFWChkYnNfbXV0ZXgpOwogCi1zdHJ1Y3QgZGJzX3R1bmVycyB7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKmtjb25zZXJ2YXRpdmVfd3E7CisKK3N0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyB7CiAJdW5zaWduZWQgaW50IHNhbXBsaW5nX3JhdGU7CiAJdW5zaWduZWQgaW50IHNhbXBsaW5nX2Rvd25fZmFjdG9yOwogCXVuc2lnbmVkIGludCB1cF90aHJlc2hvbGQ7CiAJdW5zaWduZWQgaW50IGRvd25fdGhyZXNob2xkOwogCXVuc2lnbmVkIGludCBpZ25vcmVfbmljZTsKIAl1bnNpZ25lZCBpbnQgZnJlcV9zdGVwOwotfTsKLQotc3RhdGljIHN0cnVjdCBkYnNfdHVuZXJzIGRic190dW5lcnNfaW5zID0geworfSBkYnNfdHVuZXJzX2lucyA9IHsKIAkudXBfdGhyZXNob2xkID0gREVGX0ZSRVFVRU5DWV9VUF9USFJFU0hPTEQsCiAJLmRvd25fdGhyZXNob2xkID0gREVGX0ZSRVFVRU5DWV9ET1dOX1RIUkVTSE9MRCwKIAkuc2FtcGxpbmdfZG93bl9mYWN0b3IgPSBERUZfU0FNUExJTkdfRE9XTl9GQUNUT1IsCkBAIC0xMDIsMTggKzExMSwzNyBAQAogCS5mcmVxX3N0ZXAgPSA1LAogfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWVfamlmZnkodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCQljcHV0aW1lNjRfdCAqd2FsbCkKIHsKLQl1bnNpZ25lZCBpbnQgYWRkX25pY2UgPSAwLCByZXQ7CisJY3B1dGltZTY0X3QgaWRsZV90aW1lOworCWNwdXRpbWU2NF90IGN1cl93YWxsX3RpbWU7CisJY3B1dGltZTY0X3QgYnVzeV90aW1lOwogCi0JaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQotCQlhZGRfbmljZSA9IGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZTsKKwljdXJfd2FsbF90aW1lID0gamlmZmllczY0X3RvX2NwdXRpbWU2NChnZXRfamlmZmllc182NCgpKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGtzdGF0X2NwdShjcHUpLmNwdXN0YXQudXNlciwKKwkJCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuc3lzdGVtKTsKIAotCXJldCA9IGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaWRsZSArCi0JCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaW93YWl0ICsKLQkJYWRkX25pY2U7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaXJxKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5zb2Z0aXJxKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5zdGVhbCk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZSk7CiAKLQlyZXR1cm4gcmV0OworCWlkbGVfdGltZSA9IGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwgYnVzeV90aW1lKTsKKwlpZiAod2FsbCkKKwkJKndhbGwgPSBjdXJfd2FsbF90aW1lOworCisJcmV0dXJuIGlkbGVfdGltZTsKK30KKworc3RhdGljIGlubGluZSBjcHV0aW1lNjRfdCBnZXRfY3B1X2lkbGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1LCBjcHV0aW1lNjRfdCAqd2FsbCkKK3sKKwl1NjQgaWRsZV90aW1lID0gZ2V0X2NwdV9pZGxlX3RpbWVfdXMoY3B1LCB3YWxsKTsKKworCWlmIChpZGxlX3RpbWUgPT0gLTFVTEwpCisJCXJldHVybiBnZXRfY3B1X2lkbGVfdGltZV9qaWZmeShjcHUsIHdhbGwpOworCisJcmV0dXJuIGlkbGVfdGltZTsKIH0KIAogLyoga2VlcCB0cmFjayBvZiBmcmVxdWVuY3kgdHJhbnNpdGlvbnMgKi8KQEAgLTEyNSwxMCArMTUzLDIxIEBACiAJc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLAogCQkJCQkJCWZyZXEtPmNwdSk7CiAKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwogCWlmICghdGhpc19kYnNfaW5mby0+ZW5hYmxlKQogCQlyZXR1cm4gMDsKIAotCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gZnJlcS0+bmV3OworCXBvbGljeSA9IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3k7CisKKwkvKgorCSAqIHdlIG9ubHkgY2FyZSBpZiBvdXIgaW50ZXJuYWxseSB0cmFja2VkIGZyZXEgbW92ZXMgb3V0c2lkZQorCSAqIHRoZSAndmFsaWQnIHJhbmdlcyBvZiBmcmVxZW5jeSBhdmFpbGFibGUgdG8gdXMgb3RoZXJ3aXNlCisJICogd2UgZG8gbm90IGNoYW5nZSBpdAorCSovCisJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID4gcG9saWN5LT5tYXgKKwkJCXx8IHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIDwgcG9saWN5LT5taW4pCisJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gZnJlcS0+bmV3OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDAsMTYgKzE3OSwzMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWF4KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IGNvbnNlcnZhdGl2ZSBzYW1wbGluZ19yYXRlX21heCAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsCisJCSAgICAgICBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9taW4oc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogY29uc2VydmF0aXZlIHNhbXBsaW5nX3JhdGVfbWF4ICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOwogfQogCi0jZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyIF9uYW1lID0JCQkJXAorI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJXAorc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgX25hbWUgPQkJXAogX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93XyMjX25hbWUsIE5VTEwpCiAKIGRlZmluZV9vbmVfcm8oc2FtcGxpbmdfcmF0ZV9tYXgpOwpAQCAtMTc0LDcgKzIyOCw4IEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwogCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19ET1dOX0ZBQ1RPUiB8fCBpbnB1dCA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTAsMTUgKzI0NSwxMyBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CisKKwlpZiAocmV0ICE9IDEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfUkFURSB8fCBpbnB1dCA8IE1JTl9TQU1QTElOR19SQVRFKSB7Ci0JCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGlucHV0OworCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBtYXgoaW5wdXQsIG1pbmltdW1fc2FtcGxpbmdfcmF0ZSgpKTsKIAltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yMDksMTAgKzI2MiwxMSBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA8PSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgeworCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fAorCQkJaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjgsMTAgKzI4MiwxMiBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IDEwMCB8fCBpbnB1dCA+PSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKKwkvKiBjYW5ub3QgYmUgbG93ZXIgdGhhbiAxMSBvdGhlcndpc2UgZnJlcSB3aWxsIG5vdCBmYWxsICovCisJaWYgKHJldCAhPSAxIHx8IGlucHV0IDwgMTEgfHwgaW5wdXQgPiAxMDAgfHwKKwkJCWlucHV0ID49IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2NCwxMiArMzIwLDE0IEBACiAJfQogCWRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlID0gaW5wdXQ7CiAKLQkvKiB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHByZXZfY3B1X2lkbGVfdXAgYW5kIHByZXZfY3B1X2lkbGVfZG93biAqLworCS8qIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgcHJldl9jcHVfaWRsZSAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikgewotCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87Ci0JCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOwotCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwID0gZ2V0X2NwdV9pZGxlX3RpbWUoaik7Ci0JCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93biA9IGpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7CisJCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm87CisJCWRic19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKKwkJZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAorCQkJCQkJJmRic19pbmZvLT5wcmV2X2NwdV93YWxsKTsKKwkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQorCQkJZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPSBrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlOwogCX0KIAltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKQEAgLTI4MSw3ICszMzksNiBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCWlmIChyZXQgIT0gMSkKQEAgLTMxMCw3ICszNjcsNyBAQAogZGVmaW5lX29uZV9ydyhpZ25vcmVfbmljZV9sb2FkKTsKIGRlZmluZV9vbmVfcncoZnJlcV9zdGVwKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYnNfYXR0cmlidXRlc1tdID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRic19hdHRyaWJ1dGVzW10gPSB7CiAJJnNhbXBsaW5nX3JhdGVfbWF4LmF0dHIsCiAJJnNhbXBsaW5nX3JhdGVfbWluLmF0dHIsCiAJJnNhbXBsaW5nX3JhdGUuYXR0ciwKQEAgLTMyOSw1NSArMzg2LDc4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBkYnNfY2hlY2tfY3B1KGludCBjcHUpCitzdGF0aWMgdm9pZCBkYnNfY2hlY2tfY3B1KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgaWRsZV90aWNrcywgdXBfaWRsZV90aWNrcywgZG93bl9pZGxlX3RpY2tzOwotCXVuc2lnbmVkIGludCB0bXBfaWRsZV90aWNrcywgdG90YWxfaWRsZV90aWNrczsKKwl1bnNpZ25lZCBpbnQgbG9hZCA9IDA7CiAJdW5zaWduZWQgaW50IGZyZXFfdGFyZ2V0OwotCXVuc2lnbmVkIGludCBmcmVxX2Rvd25fc2FtcGxpbmdfcmF0ZTsKLQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGNwdSk7Ci0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAKLQlpZiAoIXRoaXNfZGJzX2luZm8tPmVuYWJsZSkKLQkJcmV0dXJuOworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCXVuc2lnbmVkIGludCBqOwogCiAJcG9saWN5ID0gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeTsKIAogCS8qCi0JICogVGhlIGRlZmF1bHQgc2FmZSByYW5nZSBpcyAyMCUgdG8gODAlCi0JICogRXZlcnkgc2FtcGxpbmdfcmF0ZSwgd2UgY2hlY2sKLQkgKgktIElmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIGxlc3MgdGhhbiAyMCUsIHRoZW4gd2UgdHJ5IHRvCi0JICoJICBpbmNyZWFzZSBmcmVxdWVuY3kKLQkgKiBFdmVyeSBzYW1wbGluZ19yYXRlKnNhbXBsaW5nX2Rvd25fZmFjdG9yLCB3ZSBjaGVjawotCSAqCS0gSWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbW9yZSB0aGFuIDgwJSwgdGhlbiB3ZSB0cnkgdG8KLQkgKgkgIGRlY3JlYXNlIGZyZXF1ZW5jeQorCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUsIHdlIGNoZWNrLCBpZiBjdXJyZW50IGlkbGUgdGltZSBpcyBsZXNzCisJICogdGhhbiAyMCUgKGRlZmF1bHQpLCB0aGVuIHdlIHRyeSB0byBpbmNyZWFzZSBmcmVxdWVuY3kKKwkgKiBFdmVyeSBzYW1wbGluZ19yYXRlKnNhbXBsaW5nX2Rvd25fZmFjdG9yLCB3ZSBjaGVjaywgaWYgY3VycmVudAorCSAqIGlkbGUgdGltZSBpcyBtb3JlIHRoYW4gODAlLCB0aGVuIHdlIHRyeSB0byBkZWNyZWFzZSBmcmVxdWVuY3kKIAkgKgogCSAqIEFueSBmcmVxdWVuY3kgaW5jcmVhc2UgdGFrZXMgaXQgdG8gdGhlIG1heGltdW0gZnJlcXVlbmN5LgogCSAqIEZyZXF1ZW5jeSByZWR1Y3Rpb24gaGFwcGVucyBhdCBtaW5pbXVtIHN0ZXBzIG9mCi0JICogNSUgKGRlZmF1bHQpIG9mIG1heF9mcmVxdWVuY3kKKwkgKiA1JSAoZGVmYXVsdCkgb2YgbWF4aW11bSBmcmVxdWVuY3kKIAkgKi8KIAotCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgaW5jcmVhc2UgKi8KLQlpZGxlX3RpY2tzID0gVUlOVF9NQVg7CisJLyogR2V0IEFic29sdXRlIExvYWQgKi8KKwlmb3JfZWFjaF9jcHUoaiwgcG9saWN5LT5jcHVzKSB7CisJCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqal9kYnNfaW5mbzsKKwkJY3B1dGltZTY0X3QgY3VyX3dhbGxfdGltZSwgY3VyX2lkbGVfdGltZTsKKwkJdW5zaWduZWQgaW50IGlkbGVfdGltZSwgd2FsbF90aW1lOworCisJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOworCisJCWN1cl9pZGxlX3RpbWUgPSBnZXRfY3B1X2lkbGVfdGltZShqLCAmY3VyX3dhbGxfdGltZSk7CisKKwkJd2FsbF90aW1lID0gKHVuc2lnbmVkIGludCkgY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLAorCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOworCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsID0gY3VyX3dhbGxfdGltZTsKKworCQlpZGxlX3RpbWUgPSAodW5zaWduZWQgaW50KSBjcHV0aW1lNjRfc3ViKGN1cl9pZGxlX3RpbWUsCisJCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSk7CisJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBjdXJfaWRsZV90aW1lOworCisJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkgeworCQkJY3B1dGltZTY0X3QgY3VyX25pY2U7CisJCQl1bnNpZ25lZCBsb25nIGN1cl9uaWNlX2ppZmZpZXM7CisKKwkJCWN1cl9uaWNlID0gY3B1dGltZTY0X3N1Yihrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlLAorCQkJCQkgal9kYnNfaW5mby0+cHJldl9jcHVfbmljZSk7CisJCQkvKgorCQkJICogQXNzdW1wdGlvbjogbmljZSB0aW1lIGJldHdlZW4gc2FtcGxpbmcgcGVyaW9kcyB3aWxsCisJCQkgKiBiZSBsZXNzIHRoYW4gMl4zMiBqaWZmaWVzIGZvciAzMiBiaXQgc3lzCisJCQkgKi8KKwkJCWN1cl9uaWNlX2ppZmZpZXMgPSAodW5zaWduZWQgbG9uZykKKwkJCQkJY3B1dGltZTY0X3RvX2ppZmZpZXM2NChjdXJfbmljZSk7CisKKwkJCWpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPSBrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlOworCQkJaWRsZV90aW1lICs9IGppZmZpZXNfdG9fdXNlY3MoY3VyX25pY2VfamlmZmllcyk7CisJCX0KKworCQlpZiAodW5saWtlbHkoIXdhbGxfdGltZSB8fCB3YWxsX3RpbWUgPCBpZGxlX3RpbWUpKQorCQkJY29udGludWU7CisKKwkJbG9hZCA9IDEwMCAqICh3YWxsX3RpbWUgLSBpZGxlX3RpbWUpIC8gd2FsbF90aW1lOworCX0KKworCS8qCisJICogYnJlYWsgb3V0IGlmIHdlICdjYW5ub3QnIHJlZHVjZSB0aGUgc3BlZWQgYXMgdGhlIHVzZXIgbWlnaHQKKwkgKiB3YW50IGZyZXFfc3RlcCB0byBiZSB6ZXJvCisJICovCisJaWYgKGRic190dW5lcnNfaW5zLmZyZXFfc3RlcCA9PSAwKQorCQlyZXR1cm47CiAKIAkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGluY3JlYXNlICovCi0JdG90YWxfaWRsZV90aWNrcyA9IGdldF9jcHVfaWRsZV90aW1lKGNwdSk7Ci0JdG1wX2lkbGVfdGlja3MgPSB0b3RhbF9pZGxlX3RpY2tzIC0KLQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKLQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwID0gdG90YWxfaWRsZV90aWNrczsKLQotCWlmICh0bXBfaWRsZV90aWNrcyA8IGlkbGVfdGlja3MpCi0JCWlkbGVfdGlja3MgPSB0bXBfaWRsZV90aWNrczsKLQotCS8qIFNjYWxlIGlkbGUgdGlja3MgYnkgMTAwIGFuZCBjb21wYXJlIHdpdGggdXAgYW5kIGRvd24gdGlja3MgKi8KLQlpZGxlX3RpY2tzICo9IDEwMDsKLQl1cF9pZGxlX3RpY2tzID0gKDEwMCAtIGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgKgotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKLQotCWlmIChpZGxlX3RpY2tzIDwgdXBfaWRsZV90aWNrcykgeworCWlmIChsb2FkID4gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CiAJCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7Ci0JCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93biA9Ci0JCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOwogCiAJCS8qIGlmIHdlIGFyZSBhbHJlYWR5IGF0IGZ1bGwgc3BlZWQgdGhlbiBicmVhayBvdXQgZWFybHkgKi8KIAkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID09IHBvbGljeS0+bWF4KQpAQCAtMzk4LDQ5ICs0NzgsMjQgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgZGVjcmVhc2UgKi8KLQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXArKzsKLQlpZiAodGhpc19kYnNfaW5mby0+ZG93bl9za2lwIDwgZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfZG93bl9mYWN0b3IpCi0JCXJldHVybjsKLQotCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgZGVjcmVhc2UgKi8KLQl0b3RhbF9pZGxlX3RpY2tzID0gdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKLQl0bXBfaWRsZV90aWNrcyA9IHRvdGFsX2lkbGVfdGlja3MgLQotCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd247Ci0JdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duID0gdG90YWxfaWRsZV90aWNrczsKLQotCWlmICh0bXBfaWRsZV90aWNrcyA8IGlkbGVfdGlja3MpCi0JCWlkbGVfdGlja3MgPSB0bXBfaWRsZV90aWNrczsKLQotCS8qIFNjYWxlIGlkbGUgdGlja3MgYnkgMTAwIGFuZCBjb21wYXJlIHdpdGggdXAgYW5kIGRvd24gdGlja3MgKi8KLQlpZGxlX3RpY2tzICo9IDEwMDsKLQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPSAwOwotCi0JZnJlcV9kb3duX3NhbXBsaW5nX3JhdGUgPSBkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlICoKLQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfZG93bl9mYWN0b3I7Ci0JZG93bl9pZGxlX3RpY2tzID0gKDEwMCAtIGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSAqCi0JCXVzZWNzX3RvX2ppZmZpZXMoZnJlcV9kb3duX3NhbXBsaW5nX3JhdGUpOwotCi0JaWYgKGlkbGVfdGlja3MgPiBkb3duX2lkbGVfdGlja3MpIHsKLQkJLyoKLQkJICogaWYgd2UgYXJlIGFscmVhZHkgYXQgdGhlIGxvd2VzdCBzcGVlZCB0aGVuIGJyZWFrIG91dCBlYXJseQotCQkgKiBvciBpZiB3ZSAnY2Fubm90JyByZWR1Y2UgdGhlIHNwZWVkIGFzIHRoZSB1c2VyIG1pZ2h0IHdhbnQKLQkJICogZnJlcV90YXJnZXQgdG8gYmUgemVybwotCQkgKi8KLQkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID09IHBvbGljeS0+bWluCi0JCQkJfHwgZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwID09IDApCi0JCQlyZXR1cm47Ci0KKwkvKgorCSAqIFRoZSBvcHRpbWFsIGZyZXF1ZW5jeSBpcyB0aGUgZnJlcXVlbmN5IHRoYXQgaXMgdGhlIGxvd2VzdCB0aGF0CisJICogY2FuIHN1cHBvcnQgdGhlIGN1cnJlbnQgQ1BVIHVzYWdlIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgdXAKKwkgKiBwb2xpY3kuIFRvIGJlIHNhZmUsIHdlIGZvY3VzIDEwIHBvaW50cyB1bmRlciB0aGUgdGhyZXNob2xkLgorCSAqLworCWlmIChsb2FkIDwgKGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkIC0gMTApKSB7CiAJCWZyZXFfdGFyZ2V0ID0gKGRic190dW5lcnNfaW5zLmZyZXFfc3RlcCAqIHBvbGljeS0+bWF4KSAvIDEwMDsKIAotCQkvKiBtYXggZnJlcSBjYW5ub3QgYmUgbGVzcyB0aGFuIDEwMC4gQnV0IHdobyBrbm93cy4uLi4gKi8KLQkJaWYgKHVubGlrZWx5KGZyZXFfdGFyZ2V0ID09IDApKQotCQkJZnJlcV90YXJnZXQgPSA1OwotCiAJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIC09IGZyZXFfdGFyZ2V0OwogCQlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPCBwb2xpY3ktPm1pbikKIAkJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5taW47CiAKKwkJLyoKKwkJICogaWYgd2UgY2Fubm90IHJlZHVjZSB0aGUgZnJlcXVlbmN5IGFueW1vcmUsIGJyZWFrIG91dCBlYXJseQorCQkgKi8KKwkJaWYgKHBvbGljeS0+Y3VyID09IHBvbGljeS0+bWluKQorCQkJcmV0dXJuOworCiAJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEsCiAJCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAkJcmV0dXJuOwpAQCAtNDQ5LDI3ICs1MDQsNDUgQEAKIAogc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpbnQgaTsKLQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKLQkJZGJzX2NoZWNrX2NwdShpKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLAotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7Ci0JbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8gPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNwdV9kYnNfaW5mb19zLCB3b3JrLndvcmspOworCXVuc2lnbmVkIGludCBjcHUgPSBkYnNfaW5mby0+Y3B1OworCisJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLworCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CisKKwlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CisKKwlpZiAobG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KSA8IDApCisJCXJldHVybjsKKworCWlmICghZGJzX2luZm8tPmVuYWJsZSkgeworCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CisJCXJldHVybjsKKwl9CisKKwlkYnNfY2hlY2tfY3B1KGRic19pbmZvKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtjb25zZXJ2YXRpdmVfd3EsICZkYnNfaW5mby0+d29yaywgZGVsYXkpOworCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKIHsKLQlpbml0X3RpbWVyX2RlZmVycmFibGUoJmRic193b3JrLnRpbWVyKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLAotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7Ci0JcmV0dXJuOworCS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNhbWUgamlmZnkgKi8KKwlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOworCWRlbGF5IC09IGppZmZpZXMgJSBkZWxheTsKKworCWRic19pbmZvLT5lbmFibGUgPSAxOworCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOworCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihkYnNfaW5mby0+Y3B1LCBrY29uc2VydmF0aXZlX3dxLCAmZGJzX2luZm8tPndvcmssCisJCQkJZGVsYXkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfZXhpdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQogewotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRic193b3JrKTsKLQlyZXR1cm47CisJZGJzX2luZm8tPmVuYWJsZSA9IDA7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGJzX2luZm8tPndvcmspOwogfQogCiBzdGF0aWMgaW50IGNwdWZyZXFfZ292ZXJub3JfZGJzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LApAQCAtNTAzLDExICs1NzYsMTMgQEAKIAkJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOwogCQkJal9kYnNfaW5mby0+Y3VyX3BvbGljeSA9IHBvbGljeTsKIAotCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cCA9IGdldF9jcHVfaWRsZV90aW1lKGNwdSk7Ci0JCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24KLQkJCQk9IGpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7CisJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwKKwkJCQkJCSZqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsKTsKKwkJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkgeworCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UgPQorCQkJCQkJa3N0YXRfY3B1KGopLmNwdXN0YXQubmljZTsKKwkJCX0KIAkJfQotCQl0aGlzX2Ric19pbmZvLT5lbmFibGUgPSAxOwogCQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPSAwOwogCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IHBvbGljeS0+Y3VyOwogCkBAIC01MjMsMzggKzU5OCwzNiBAQAogCQkJaWYgKGxhdGVuY3kgPT0gMCkKIAkJCQlsYXRlbmN5ID0gMTsKIAotCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSAxMCAqIGxhdGVuY3kgKgotCQkJCQlERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVI7Ci0KLQkJCWlmIChkZWZfc2FtcGxpbmdfcmF0ZSA8IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpCi0JCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSBNSU5fU1RBVF9TQU1QTElOR19SQVRFOworCQkJZGVmX3NhbXBsaW5nX3JhdGUgPQorCQkJCW1heChsYXRlbmN5ICogTEFURU5DWV9NVUxUSVBMSUVSLAorCQkJCSAgICBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKIAogCQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGRlZl9zYW1wbGluZ19yYXRlOwogCi0JCQlkYnNfdGltZXJfaW5pdCgpOwogCQkJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigKIAkJCQkJJmRic19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAogCQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwogCQl9CisJCWRic190aW1lcl9pbml0KHRoaXNfZGJzX2luZm8pOwogCiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKKwogCQlicmVhazsKIAogCWNhc2UgQ1BVRlJFUV9HT1ZfU1RPUDoKIAkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQkJdGhpc19kYnNfaW5mby0+ZW5hYmxlID0gMDsKKwkJZGJzX3RpbWVyX2V4aXQodGhpc19kYnNfaW5mbyk7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcG9saWN5LT5rb2JqLCAmZGJzX2F0dHJfZ3JvdXApOwogCQlkYnNfZW5hYmxlLS07CisKIAkJLyoKIAkJICogU3RvcCB0aGUgdGltZXJzY2hlZHVsZSB3b3JrLCB3aGVuIHRoaXMgZ292ZXJub3IKIAkJICogaXMgdXNlZCBmb3IgZmlyc3QgdGltZQogCQkgKi8KLQkJaWYgKGRic19lbmFibGUgPT0gMCkgewotCQkJZGJzX3RpbWVyX2V4aXQoKTsKKwkJaWYgKGRic19lbmFibGUgPT0gMCkKIAkJCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigKIAkJCQkJJmRic19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAogCQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwotCQl9CiAKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCkBAIC01NzEsNiArNjQ0LDcgQEAKIAkJCQkJdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeSwKIAkJCQkJcG9saWN5LT5taW4sIENQVUZSRVFfUkVMQVRJT05fTCk7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKKwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC01ODgsMjMgKzY2MiwzMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX2dvdl9kYnNfaW5pdCh2b2lkKQogewotCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9jb25zZXJ2YXRpdmUpOworCWludCBlcnI7CisKKwlrY29uc2VydmF0aXZlX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgia2NvbnNlcnZhdGl2ZSIpOworCWlmICgha2NvbnNlcnZhdGl2ZV93cSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNyZWF0aW9uIG9mIGtjb25zZXJ2YXRpdmUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZXJyID0gY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfY29uc2VydmF0aXZlKTsKKwlpZiAoZXJyKQorCQlkZXN0cm95X3dvcmtxdWV1ZShrY29uc2VydmF0aXZlX3dxKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX2dvdl9kYnNfZXhpdCh2b2lkKQogewotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzY2hlZHVsZWQgd29yayBpcyBpbmRlZWQgbm90IHJ1bm5pbmcgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9jb25zZXJ2YXRpdmUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGtjb25zZXJ2YXRpdmVfd3EpOwogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleC1rZXJuZWxAZGlncml6Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIidjcHVmcmVxX2NvbnNlcnZhdGl2ZScgLSBBIGR5bmFtaWMgY3B1ZnJlcSBnb3Zlcm5vciBmb3IgIgorTU9EVUxFX0FVVEhPUigiQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiJ2NwdWZyZXFfY29uc2VydmF0aXZlJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZvciAiCiAJCSJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3NvcnMgIgogCQkib3B0aW1pc2VkIGZvciB1c2UgaW4gYSBiYXR0ZXJ5IGVudmlyb25tZW50Iik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRQogZnNfaW5pdGNhbGwoY3B1ZnJlcV9nb3ZfZGJzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggNmY0NWIxNi4uMzM4ZjQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBkYnMgaXMgdXNlZCBpbiB0aGlzIGZpbGUgYXMgYSBzaG9ydGZvcm0gZm9yIGRlbWFuZGJhc2VkIHN3aXRjaGluZwpAQCAtNTEsOCArNTIsMjAgQEAKIAkJCShNSU5fU0FNUExJTkdfUkFURV9SQVRJTyAqIGppZmZpZXNfdG9fdXNlY3MoMTApKQogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURQkJCVwKIAkJCShkZWZfc2FtcGxpbmdfcmF0ZSAvIE1JTl9TQU1QTElOR19SQVRFX1JBVElPKQorLyogQWJvdmUgTUlOX1NBTVBMSU5HX1JBVEUgd2lsbCB2YW5pc2ggd2l0aCBpdHMgc3lzZnMgZmlsZSBzb29uCisgKiBEZWZpbmUgdGhlIG1pbmltYWwgc2V0dGFibGUgc2FtcGxpbmcgcmF0ZSB0byB0aGUgZ3JlYXRlciBvZjoKKyAqICAgLSAiSFcgdHJhbnNpdGlvbiBsYXRlbmN5IiAqIDEwMCAoc2FtZSBhcyBkZWZhdWx0IHNhbXBsaW5nIC8gMTApCisgKiAgIC0gTUlOX1NUQVRfU0FNUExJTkdfUkFURQorICogVG8gYXZvaWQgdGhhdCB1c2Vyc3BhY2Ugc2hvb3RzIGl0c2VsZi4KKyovCitzdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc2FtcGxpbmdfcmF0ZSh2b2lkKQoreworCXJldHVybiBtYXgoZGVmX3NhbXBsaW5nX3JhdGUgLyAxMCwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7Cit9CisKKy8qIFRoaXMgd2lsbCBhbHNvIHZhbmlzaCBzb29uIHdpdGggcmVtb3Zpbmcgc2FtcGxpbmdfcmF0ZV9tYXggKi8KICNkZWZpbmUgTUFYX1NBTVBMSU5HX1JBVEUJCQkoNTAwICogZGVmX3NhbXBsaW5nX3JhdGUpCi0jZGVmaW5lIERFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUgkoMTAwMCkKKyNkZWZpbmUgTEFURU5DWV9NVUxUSVBMSUVSCQkJKDEwMDApCiAjZGVmaW5lIFRSQU5TSVRJT05fTEFURU5DWV9MSU1JVAkJKDEwICogMTAwMCAqIDEwMDApCiAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpAQCAtNjUsMTQgKzc4LDE0IEBACiAJY3B1dGltZTY0X3QgcHJldl9jcHVfd2FsbDsKIAljcHV0aW1lNjRfdCBwcmV2X2NwdV9uaWNlOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3VyX3BvbGljeTsKLSAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGU7CiAJdW5zaWduZWQgaW50IGZyZXFfbG87CiAJdW5zaWduZWQgaW50IGZyZXFfbG9famlmZmllczsKIAl1bnNpZ25lZCBpbnQgZnJlcV9oaV9qaWZmaWVzOwogCWludCBjcHU7CiAJdW5zaWduZWQgaW50IGVuYWJsZToxLAotCSAgICAgICAgICAgICBzYW1wbGVfdHlwZToxOworCQlzYW1wbGVfdHlwZToxOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIGNwdV9kYnNfaW5mbyk7CiAKQEAgLTIwMywxMiArMjE2LDI4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogc3lzZnMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9tYXgoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogb25kZW1hbmQgc2FtcGxpbmdfcmF0ZV9tYXggIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWluKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IG9uZGVtYW5kIHNhbXBsaW5nX3JhdGVfbWluICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKIH0KIAogI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJXApAQCAtMjM4LDEzICsyNjcsMTEgQEAKIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfUkFURQotCQkgICAgIHx8IGlucHV0IDwgTUlOX1NBTVBMSU5HX1JBVEUpIHsKKwlpZiAocmV0ICE9IDEpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gaW5wdXQ7CisJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IG1heChpbnB1dCwgbWluaW11bV9zYW1wbGluZ19yYXRlKCkpOwogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAogCXJldHVybiBjb3VudDsKQEAgLTI3OSwxNCArMzA2LDE0IEBACiAJdW5zaWduZWQgaW50IGo7CiAKIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwotCWlmICggcmV0ICE9IDEgKQorCWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGlucHV0ID4gMSApCisJaWYgKGlucHV0ID4gMSkKIAkJaW5wdXQgPSAxOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAoIGlucHV0ID09IGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlICkgeyAvKiBub3RoaW5nIHRvIGRvICovCisJaWYgKGlucHV0ID09IGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7IC8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gY291bnQ7CiAJfQpAQCAtMzM3LDcgKzM2NCw3IEBACiBkZWZpbmVfb25lX3J3KGlnbm9yZV9uaWNlX2xvYWQpOwogZGVmaW5lX29uZV9ydyhwb3dlcnNhdmVfYmlhcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGJzX2F0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYnNfYXR0cmlidXRlc1tdID0gewogCSZzYW1wbGluZ19yYXRlX21heC5hdHRyLAogCSZzYW1wbGluZ19yYXRlX21pbi5hdHRyLAogCSZzYW1wbGluZ19yYXRlLmF0dHIsCkBAIC01MTIsOCArNTM5LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGRic19pbmZvLT5jdXJfcG9saWN5LAotCSAgICAgICAgICAgICAgICAgICAgICAgIAlkYnNfaW5mby0+ZnJlcV9sbywKLQkgICAgICAgICAgICAgICAgICAgICAgICAJQ1BVRlJFUV9SRUxBVElPTl9IKTsKKwkJCWRic19pbmZvLT5mcmVxX2xvLCBDUFVGUkVRX1JFTEFUSU9OX0gpOwogCX0KIAlxdWV1ZV9kZWxheWVkX3dvcmtfb24oY3B1LCBrb25kZW1hbmRfd3EsICZkYnNfaW5mby0+d29yaywgZGVsYXkpOwogCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKQEAgLTUzMCw3ICs1NTYsNyBAQAogCWRic19pbmZvLT5zYW1wbGVfdHlwZSA9IERCU19OT1JNQUxfU0FNUExFOwogCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOwogCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihkYnNfaW5mby0+Y3B1LCBrb25kZW1hbmRfd3EsICZkYnNfaW5mby0+d29yaywKLQkgICAgICAgICAgICAgICAgICAgICAgZGVsYXkpOworCQlkZWxheSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfZXhpdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQpAQCAtNTkxLDExICs2MTcsOSBAQAogCQkJaWYgKGxhdGVuY3kgPT0gMCkKIAkJCQlsYXRlbmN5ID0gMTsKIAotCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSBsYXRlbmN5ICoKLQkJCQkJREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSOwotCi0JCQlpZiAoZGVmX3NhbXBsaW5nX3JhdGUgPCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKQotCQkJCWRlZl9zYW1wbGluZ19yYXRlID0gTUlOX1NUQVRfU0FNUExJTkdfUkFURTsKKwkJCWRlZl9zYW1wbGluZ19yYXRlID0KKwkJCQltYXgobGF0ZW5jeSAqIExBVEVOQ1lfTVVMVElQTElFUiwKKwkJCQkgICAgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7CiAKIAkJCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBkZWZfc2FtcGxpbmdfcmF0ZTsKIAkJfQpAQCAtNjE3LDEyICs2NDEsMTAgQEAKIAkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKIAkJaWYgKHBvbGljeS0+bWF4IDwgdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeS0+Y3VyKQogCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQodGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS0+bWF4LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUV9SRUxBVElPTl9IKTsKKwkJCQlwb2xpY3ktPm1heCwgQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAkJZWxzZSBpZiAocG9saWN5LT5taW4gPiB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LT5jdXIpCiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCh0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5LT5taW4sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBDUFVGUkVRX1JFTEFUSU9OX0wpOworCQkJCXBvbGljeS0+bWluLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCWJyZWFrOwogCX0KQEAgLTY3Nyw3ICs2OTksNyBAQAogTU9EVUxFX0FVVEhPUigiVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJBbGV4ZXkgU3Rhcmlrb3Zza2l5IDxhbGV4ZXkueS5zdGFyaWtvdnNraXlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9vbmRlbWFuZCcgLSBBIGR5bmFtaWMgY3B1ZnJlcSBnb3Zlcm5vciBmb3IgIgotICAgICAgICAgICAgICAgICAgICJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3NvcnMiKTsKKwkiTG93IExhdGVuY3kgRnJlcXVlbmN5IFRyYW5zaXRpb24gY2FwYWJsZSBwcm9jZXNzb3JzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCmluZGV4IGMwZmY5N2QuLjVhNjJkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwpAQCAtMiw3ICsyLDcgQEAKICAqICBkcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPi4KLSAqCSAgICAgIChDKSAyMDA0IFpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4uCisgKiAgKEMpIDIwMDQgWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPi4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIHNwaW5sb2NrX3QgY3B1ZnJlcV9zdGF0c19sb2NrOwogCi0jZGVmaW5lIENQVUZSRVFfU1RBVERFVklDRV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93KSBcCisjZGVmaW5lIENQVUZSRVFfU1RBVERFVklDRV9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3cpIFwKIHN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyIF9hdHRyXyMjX25hbWUgPSB7XAogCS5hdHRyID0gey5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IF9tb2RlLCB9LCBcCiAJLnNob3cgPSBfc2hvdyxcCkBAIC01MCw4ICs1MCw3IEBACiAJc3NpemVfdCgqc2hvdykgKHN0cnVjdCBjcHVmcmVxX3N0YXRzICosIGNoYXIgKik7CiB9OwogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRzX3VwZGF0ZSAodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0c191cGRhdGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3RpbWU7CkBAIC02OCw4ICs2Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3RvdGFsX3RyYW5zKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RvdGFsX3RyYW5zKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAlpZiAoIXN0YXQpCkBAIC03OCw4ICs3Niw3IEBACiAJCQlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHN0YXQtPmNwdSktPnRvdGFsX3RyYW5zKTsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNob3dfdGltZV9pbl9zdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190aW1lX2luX3N0YXRlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpOwpAQCAtODksMTQgKzg2LDE0IEBACiAJY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RhdC0+Y3B1KTsKIAlmb3IgKGkgPSAwOyBpIDwgc3RhdC0+c3RhdGVfbnVtOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXUgJWxsdVxuIiwgc3RhdC0+ZnJlcV90YWJsZVtpXSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3RhdC0+dGltZV9pbl9zdGF0ZVtpXSkpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCWNwdXRpbWU2NF90b19jbG9ja190KHN0YXQtPnRpbWVfaW5fc3RhdGVbaV0pKTsKIAl9CiAJcmV0dXJuIGxlbjsKIH0KIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3RyYW5zX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RyYW5zX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpLCBqOwpAQCAtMTM5LDExICsxMzYsMTEgQEAKIAkJcmV0dXJuIFBBR0VfU0laRTsKIAlyZXR1cm4gbGVuOwogfQotQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodHJhbnNfdGFibGUsMDQ0NCxzaG93X3RyYW5zX3RhYmxlKTsKK0NQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRyYW5zX3RhYmxlLCAwNDQ0LCBzaG93X3RyYW5zX3RhYmxlKTsKICNlbmRpZgogCi1DUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0b3RhbF90cmFucywwNDQ0LHNob3dfdG90YWxfdHJhbnMpOwotQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodGltZV9pbl9zdGF0ZSwwNDQ0LHNob3dfdGltZV9pbl9zdGF0ZSk7CitDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0b3RhbF90cmFucywgMDQ0NCwgc2hvd190b3RhbF90cmFucyk7CitDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0aW1lX2luX3N0YXRlLCAwNDQ0LCBzaG93X3RpbWVfaW5fc3RhdGUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVmYXVsdF9hdHRyc1tdID0gewogCSZfYXR0cl90b3RhbF90cmFucy5hdHRyLApAQCAtMTU4LDggKzE1NSw3IEBACiAJLm5hbWUgPSAic3RhdHMiCiB9OwogCi1zdGF0aWMgaW50Ci1mcmVxX3RhYmxlX2dldF9pbmRleChzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCwgdW5zaWduZWQgaW50IGZyZXEpCitzdGF0aWMgaW50IGZyZXFfdGFibGVfZ2V0X2luZGV4KHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0LCB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKIAlpbnQgaW5kZXg7CiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhdC0+bWF4X3N0YXRlOyBpbmRleCsrKQpAQCAtMTgzLDggKzE3OSw3IEBACiAJCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwogfQogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBpLCBqLCBjb3VudCA9IDAsIHJldCA9IDA7CkBAIC0xOTQsNyArMTg5LDggQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CiAJaWYgKHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSkKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAoKHN0YXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCXN0YXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyksIEdGUF9LRVJORUwpOworCWlmICgoc3RhdCkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CkBAIC0yMDMsMTMgKzE5OSwxNCBAQAogCQlnb3RvIGVycm9yX2dldF9mYWlsOwogCX0KIAotCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkYXRhLT5rb2JqLCAmc3RhdHNfYXR0cl9ncm91cCkpKQorCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGF0YS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJc3RhdC0+Y3B1ID0gY3B1OwogCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSA9IHN0YXQ7CiAKLQlmb3IgKGk9MDsgdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKKwlmb3IgKGkgPSAwOyB0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CkBAIC0yNTUsOSArMjUyLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRfbm90aWZpZXJfcG9saWN5IChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3BvbGljeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gZGF0YTsKQEAgLTI2OCwxNCArMjY0LDE0IEBACiAJdGFibGUgPSBjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUoY3B1KTsKIAlpZiAoIXRhYmxlKQogCQlyZXR1cm4gMDsKLQlpZiAoKHJldCA9IGNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHBvbGljeSwgdGFibGUpKSkKKwlyZXQgPSBjcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZShwb2xpY3ksIHRhYmxlKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jcHVmcmVxX3N0YXRfbm90aWZpZXJfdHJhbnMgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQl2b2lkICpkYXRhKQorc3RhdGljIGludCBjcHVmcmVxX3N0YXRfbm90aWZpZXJfdHJhbnMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOwogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0OwpAQCAtMzQwLDE5ICszMzYsMjAgQEAKIAkubm90aWZpZXJfY2FsbCA9IGNwdWZyZXFfc3RhdF9ub3RpZmllcl90cmFucwogfTsKIAotc3RhdGljIGludAotX19pbml0IGNwdWZyZXFfc3RhdHNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9zdGF0c19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCiAJc3Bpbl9sb2NrX2luaXQoJmNwdWZyZXFfc3RhdHNfbG9jayk7Ci0JaWYgKChyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl9wb2xpY3lfYmxvY2ssCi0JCQkJQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpKSkKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl9wb2xpY3lfYmxvY2ssCisJCQkJQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3RyYW5zX2Jsb2NrLAotCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUikpKSB7CisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfdHJhbnNfYmxvY2ssCisJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKwlpZiAocmV0KSB7CiAJCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfcG9saWN5X2Jsb2NrLAogCQkJCUNQVUZSRVFfUE9MSUNZX05PVElGSUVSKTsKIAkJcmV0dXJuIHJldDsKQEAgLTM2NCw4ICszNjEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyB2b2lkCi1fX2V4aXQgY3B1ZnJlcV9zdGF0c19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9zdGF0c19leGl0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIApAQCAtMzc5LDEwICszNzUsMTAgQEAKIAl9CiB9CiAKLU1PRFVMRV9BVVRIT1IgKCJab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCInY3B1ZnJlcV9zdGF0cycgLSBBIGRyaXZlciB0byBleHBvcnQgY3B1ZnJlcSBzdGF0cyAiCitNT0RVTEVfQVVUSE9SKCJab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIidjcHVmcmVxX3N0YXRzJyAtIEEgZHJpdmVyIHRvIGV4cG9ydCBjcHVmcmVxIHN0YXRzICIKIAkJCQkidGhyb3VnaCBzeXNmcyBmaWxlc3lzdGVtIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChjcHVmcmVxX3N0YXRzX2luaXQpOwogbW9kdWxlX2V4aXQoY3B1ZnJlcV9zdGF0c19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKaW5kZXggMTQ0MmJiYS4uNjZkMmQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKQEAgLTI0LDkgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0KIC8qKgogICogQSBmZXcgdmFsdWVzIG5lZWRlZCBieSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yCiAgKi8KQEAgLTM3LDcgKzM0LDcgQEAKIAkJCQkJCQl1c2Vyc3BhY2UgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGNwdV9pc19tYW5hZ2VkKTsKIAotc3RhdGljIERFRklORV9NVVRFWAkodXNlcnNwYWNlX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgodXNlcnNwYWNlX211dGV4KTsKIHN0YXRpYyBpbnQgY3B1c191c2luZ191c2Vyc3BhY2VfZ292ZXJub3I7CiAKICNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKQEAgLTQ2LDkgKzQzLDkgQEAKIC8qIGtlZXAgdHJhY2sgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb25zICovCiBzdGF0aWMgaW50CiB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKKwl2b2lkICpkYXRhKQogewotICAgICAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOwogCiAJaWYgKCFwZXJfY3B1KGNwdV9pc19tYW5hZ2VkLCBmcmVxLT5jcHUpKQogCQlyZXR1cm4gMDsKQEAgLTU3LDExICs1NCwxMSBAQAogCQkJZnJlcS0+Y3B1LCBmcmVxLT5uZXcpOwogCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBmcmVxLT5jcHUpID0gZnJlcS0+bmV3OwogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrID0gewotICAgICAgICAubm90aWZpZXJfY2FsbCAgPSB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcgorCS5ub3RpZmllcl9jYWxsICA9IHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyCiB9OwogCiAKQEAgLTkzLDggKzkwLDExIEBACiAJICogV2UncmUgc2FmZSBmcm9tIGNvbmN1cnJlbnQgY2FsbHMgdG8gLT50YXJnZXQoKSBoZXJlCiAJICogYXMgd2UgaG9sZCB0aGUgdXNlcnNwYWNlX211dGV4IGxvY2suIElmIHdlIHdlcmUgY2FsbGluZwogCSAqIGNwdWZyZXFfZHJpdmVyX3RhcmdldCwgYSBkZWFkbG9jayBzaXR1YXRpb24gbWlnaHQgb2NjdXI6Ci0JICogQTogY3B1ZnJlcV9zZXQgKGxvY2sgdXNlcnNwYWNlX211dGV4KSAtPiBjcHVmcmVxX2RyaXZlcl90YXJnZXQobG9jayBwb2xpY3ktPmxvY2spCi0JICogQjogY3B1ZnJlcV9zZXRfcG9saWN5KGxvY2sgcG9saWN5LT5sb2NrKSAtPiBfX2NwdWZyZXFfZ292ZXJub3IgLT4gY3B1ZnJlcV9nb3Zlcm5vcl91c2Vyc3BhY2UgKGxvY2sgdXNlcnNwYWNlX211dGV4KQorCSAqIEE6IGNwdWZyZXFfc2V0IChsb2NrIHVzZXJzcGFjZV9tdXRleCkgLT4KKwkgKiAgICAgIGNwdWZyZXFfZHJpdmVyX3RhcmdldChsb2NrIHBvbGljeS0+bG9jaykKKwkgKiBCOiBjcHVmcmVxX3NldF9wb2xpY3kobG9jayBwb2xpY3ktPmxvY2spIC0+CisJICogICAgICBfX2NwdWZyZXFfZ292ZXJub3IgLT4KKwkgKiAgICAgICAgIGNwdWZyZXFfZ292ZXJub3JfdXNlcnNwYWNlIChsb2NrIHVzZXJzcGFjZV9tdXRleCkKIAkgKi8KIAlyZXQgPSBfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGZyZXEsIENQVUZSRVFfUkVMQVRJT05fTCk7CiAKQEAgLTIxMCw5ICsyMTAsMTAgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiwgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkNQVWZyZXEgcG9saWN5IGdvdmVybm9yICd1c2Vyc3BhY2UnIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiwgIgorCQkiUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1BVZnJlcSBwb2xpY3kgZ292ZXJub3IgJ3VzZXJzcGFjZSciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UKIGZzX2luaXRjYWxsKGNwdWZyZXFfZ292X3VzZXJzcGFjZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCmluZGV4IDkwNzFkODAuLmE5YmQzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwpAQCAtMjgsNyArMjgsNyBAQAogCXVuc2lnbmVkIGludCBtYXhfZnJlcSA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkgewogCQkJZHByaW50aygidGFibGUgZW50cnkgJXUgaXMgaW52YWxpZCwgc2tpcHBpbmdcbiIsIGkpOwpAQCAtNzAsNyArNzAsNyBAQAogCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEsCiAJCQkJICAgICBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJaWYgKCFjcHVfb25saW5lKHBvbGljeS0+Y3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGZyZXEgPCBwb2xpY3ktPm1pbikgfHwgKGZyZXEgPiBwb2xpY3ktPm1heCkpCiAJCQljb250aW51ZTsKLQkJc3dpdGNoKHJlbGF0aW9uKSB7CisJCXN3aXRjaCAocmVsYXRpb24pIHsKIAkJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0g6CiAJCQlpZiAoZnJlcSA8PSB0YXJnZXRfZnJlcSkgewogCQkJCWlmIChmcmVxID49IG9wdGltYWwuZnJlcXVlbmN5KSB7CkBAIC0xNzgsNyArMTc4LDcgQEAKIC8qKgogICogc2hvd19hdmFpbGFibGVfZnJlcXMgLSBzaG93IGF2YWlsYWJsZSBmcmVxdWVuY2llcyBmb3IgdGhlIHNwZWNpZmllZCBDUFUKICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19hdmFpbGFibGVfZnJlcXMgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2F2YWlsYWJsZV9mcmVxcyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGludCBpID0gMDsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAogCXRhYmxlID0gcGVyX2NwdShzaG93X3RhYmxlLCBjcHUpOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCWlmICh0YWJsZVtpXS5mcmVxdWVuY3kgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CiAJCWNvdW50ICs9IHNwcmludGYoJmJ1Zltjb3VudF0sICIlZCAiLCB0YWJsZVtpXS5mcmVxdWVuY3kpOwpAQCAtMjM0LDYgKzIzNCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUpOwogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQ1BVZnJlcSBmcmVxdWVuY3kgdGFibGUgaGVscGVycyIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1BVZnJlcSBmcmVxdWVuY3kgdGFibGUgaGVscGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKaW5kZXggZTUyMjE0NC4uMDFhZmQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZworKysgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiBjb25maWcgQ1JZUFRPX1NIQTFfUzM5MAogCXRyaXN0YXRlICJTSEExIGRpZ2VzdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBTMzkwCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBLTEgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKEZJUFMgMTgwLTEvREZJUFMgMTgwLTIpLgpAQCAtOTQsNyArOTQsNyBAQAogY29uZmlnIENSWVBUT19TSEEyNTZfUzM5MAogCXRyaXN0YXRlICJTSEEyNTYgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEEyNTYgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKERGSVBTIDE4MC0yKS4KQEAgLTEwNSw3ICsxMDUsNyBAQAogY29uZmlnIENSWVBUT19TSEE1MTJfUzM5MAogCXRyaXN0YXRlICJTSEEzODQgYW5kIFNIQTUxMiBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19IQVNICiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQTUxMiBzZWN1cmUgaGFzaCBzdGFuZGFyZC4KQEAgLTIwMCw0ICsyMDAsMTMgQEAKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBJWFA0eHggTlBFIGNyeXB0byBlbmdpbmUuCiAKK2NvbmZpZyBDUllQVE9fREVWX1BQQzRYWAorCXRyaXN0YXRlICJEcml2ZXIgQU1DQyBQUEM0eHggY3J5cHRvIGFjY2VsZXJhdG9yIgorCWRlcGVuZHMgb24gUFBDICYmIDR4eAorCXNlbGVjdCBDUllQVE9fSEFTSAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGhhdmUgc3VwcG9ydCBmb3IgQU1DQyBjcnlwdG8gYWNjZWxlcmF0aW9uLgorCiBlbmRpZiAjIENSWVBUT19IVwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQppbmRleCA3MzU1N2IyLi45YmY0YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQpAQCAtNCwzICs0LDQgQEAKIG9iai0kKENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCkgKz0gaGlmbl83OTV4Lm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1RBTElUT1MpICs9IHRhbGl0b3Mubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSVhQNFhYKSArPSBpeHA0eHhfY3J5cHRvLm8KK29iai0kKENPTkZJR19DUllQVE9fREVWX1BQQzRYWCkgKz0gYW1jYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9hbWNjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzc2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYKSArPSBjcnlwdG80eHgubworY3J5cHRvNHh4LW9ianMgOj0gIGNyeXB0bzR4eF9jb3JlLm8gY3J5cHRvNHh4X2FsZy5vIGNyeXB0bzR4eF9zYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9hbGcuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjZlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9hbGcuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIExpbnV4IGNyeXB0byBhbGdvcml0aG1zLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKyNpbmNsdWRlICJjcnlwdG80eHhfcmVnX2RlZi5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9zYS5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9jb3JlLmgiCisKK3ZvaWQgc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2EsIHUzMiBzYXZlX2gsCisJCQkgICAgICB1MzIgc2F2ZV9pdiwgdTMyIGxkX2gsIHUzMiBsZF9pdiwgdTMyIGhkcl9wcm9jLAorCQkJICAgICAgdTMyIGgsIHUzMiBjLCB1MzIgcGFkX3R5cGUsIHUzMiBvcF9ncnAsIHUzMiBvcCwKKwkJCSAgICAgIHUzMiBkaXIpCit7CisJc2EtPnNhX2NvbW1hbmRfMC53ID0gMDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLnNhdmVfaGFzaF9zdGF0ZSA9IHNhdmVfaDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLnNhdmVfaXYgPSBzYXZlX2l2OworCXNhLT5zYV9jb21tYW5kXzAuYmYubG9hZF9oYXNoX3N0YXRlID0gbGRfaDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmxvYWRfaXYgPSBsZF9pdjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmhkcl9wcm9jID0gaGRyX3Byb2M7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5oYXNoX2FsZyA9IGg7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5jaXBoZXJfYWxnID0gYzsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLnBhZF90eXBlID0gcGFkX3R5cGUgJiAzOworCXNhLT5zYV9jb21tYW5kXzAuYmYuZXh0ZW5kX3BhZCA9IHBhZF90eXBlID4+IDI7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5vcF9ncm91cCA9IG9wX2dycDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLm9wY29kZSA9IG9wOworCXNhLT5zYV9jb21tYW5kXzAuYmYuZGlyID0gZGlyOworfQorCit2b2lkIHNldF9keW5hbWljX3NhX2NvbW1hbmRfMShzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhLCB1MzIgY20sIHUzMiBobWFjX21jLAorCQkJICAgICAgdTMyIGNmYiwgdTMyIGVzbiwgdTMyIHNuX21hc2ssIHUzMiBtdXRlLAorCQkJICAgICAgdTMyIGNwX3BhZCwgdTMyIGNwX3BheSwgdTMyIGNwX2hkcikKK3sKKwlzYS0+c2FfY29tbWFuZF8xLncgPSAwOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY3J5cHRvX21vZGUzMSA9IChjbSAmIDQpID4+IDI7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jcnlwdG9fbW9kZTlfOCA9IGNtICYgMzsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmZlZWRiYWNrX21vZGUgPSBjZmIsCisJc2EtPnNhX2NvbW1hbmRfMS5iZi5zYV9yZXYgPSAxOworCXNhLT5zYV9jb21tYW5kXzEuYmYuZXh0ZW5kZWRfc2VxX251bSA9IGVzbjsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLnNlcV9udW1fbWFzayA9IHNuX21hc2s7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5tdXRhYmxlX2JpdF9wcm9jID0gbXV0ZTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNvcHlfcGFkID0gY3BfcGFkOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY29weV9wYXlsb2FkID0gY3BfcGF5OworCXNhLT5zYV9jb21tYW5kXzEuYmYuY29weV9oZHIgPSBjcF9oZHI7Cit9CisKK2ludCBjcnlwdG80eHhfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5kaXJlY3Rpb24gPSBESVJfT1VUQk9VTkQ7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKwljdHgtPmlzX2hhc2ggPSAwOworCWN0eC0+cGRfY3RsID0gMHgxOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCByZXEtPmluZm8sCisJCQkJICBnZXRfZHluYW1pY19zYV9pdl9zaXplKGN0eCkpOworfQorCitpbnQgY3J5cHRvNHh4X2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKwljdHgtPmlzX2hhc2ggPSAwOworCWN0eC0+cGRfY3RsID0gMTsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkJICByZXEtPm5ieXRlcywgcmVxLT5pbmZvLAorCQkJCSAgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShjdHgpKTsKK30KKworLyoqCisgKiBBRVMgRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgY3J5cHRvNHh4X3NldGtleV9hZXMoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkJY29uc3QgdTggKmtleSwKKwkJCQl1bnNpZ25lZCBpbnQga2V5bGVuLAorCQkJCXVuc2lnbmVkIGNoYXIgY20sCisJCQkJdTggZmIpCit7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3RmbShjaXBoZXIpOworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisJaW50ICAgIHJjOworCisJaWYgKGtleWxlbiAhPSBBRVNfS0VZU0laRV8yNTYgJiYKKwkJa2V5bGVuICE9IEFFU19LRVlTSVpFXzE5MiAmJiBrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMTI4KSB7CisJCWNyeXB0b19hYmxrY2lwaGVyX3NldF9mbGFncyhjaXBoZXIsCisJCQkJQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDcmVhdGUgU0EgKi8KKwlpZiAoY3R4LT5zYV9pbl9kbWFfYWRkciB8fCBjdHgtPnNhX291dF9kbWFfYWRkcikKKwkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKworCXJjID0gY3J5cHRvNHh4X2FsbG9jX3NhKGN0eCwgU0FfQUVTMTI4X0xFTiArIChrZXlsZW4tMTYpIC8gNCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIgPT0gMCkgeworCQlyYyA9IGNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoY3R4KTsKKwkJaWYgKHJjKSB7CisJCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCS8qIFNldHVwIFNBICovCisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMChzYSwgU0FfTk9UX1NBVkVfSEFTSCwgU0FfTk9UX1NBVkVfSVYsCisJCQkJIFNBX0xPQURfSEFTSF9GUk9NX1NBLCBTQV9MT0FEX0lWX0ZST01fU1RBVEUsCisJCQkJIFNBX05PX0hFQURFUl9QUk9DLCBTQV9IQVNIX0FMR19OVUxMLAorCQkJCSBTQV9DSVBIRVJfQUxHX0FFUywgU0FfUEFEX1RZUEVfWkVSTywKKwkJCQkgU0FfT1BfR1JPVVBfQkFTSUMsIFNBX09QQ09ERV9ERUNSWVBULAorCQkJCSBESVJfSU5CT1VORCk7CisKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzEoc2EsIGNtLCBTQV9IQVNIX01PREVfSEFTSCwKKwkJCQkgZmIsIFNBX0VYVEVOREVEX1NOX09GRiwKKwkJCQkgU0FfU0VRX01BU0tfT0ZGLCBTQV9NQ19FTkFCTEUsCisJCQkJIFNBX05PVF9DT1BZX1BBRCwgU0FfTk9UX0NPUFlfUEFZTE9BRCwKKwkJCQkgU0FfTk9UX0NPUFlfSERSKTsKKwljcnlwdG80eHhfbWVtY3B5X2xlKGN0eC0+c2FfaW4gKyBnZXRfZHluYW1pY19zYV9vZmZzZXRfa2V5X2ZpZWxkKGN0eCksCisJCQkgICAga2V5LCBrZXlsZW4pOworCXNhLT5zYV9jb250ZW50cyA9IFNBX0FFU19DT05URU5UUyB8IChrZXlsZW4gPDwgMik7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5rZXlfbGVuID0ga2V5bGVuID4+IDM7CisJY3R4LT5pc19oYXNoID0gMDsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCW1lbWNweShjdHgtPnNhX2luICsgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChjdHgpLAorCQkJKHZvaWQgKikmY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIsIDQpOworCWN0eC0+b2Zmc2V0X3RvX3NyX3B0ciA9IGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoY3R4KTsKKworCW1lbWNweShjdHgtPnNhX291dCwgY3R4LT5zYV9pbiwgY3R4LT5zYV9sZW4gKiA0KTsKKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQ7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5kaXIgPSBESVJfT1VUQk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9zZXRrZXlfYWVzX2NiYyhzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCSAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlyZXR1cm4gY3J5cHRvNHh4X3NldGtleV9hZXMoY2lwaGVyLCBrZXksIGtleWxlbiwgQ1JZUFRPX01PREVfQ0JDLAorCQkJCSAgICBDUllQVE9fRkVFREJBQ0tfTU9ERV9OT19GQik7Cit9CisKKy8qKgorICogSEFTSCBTSEExIEZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IGNyeXB0bzR4eF9oYXNoX2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkJICAgdW5zaWduZWQgaW50IHNhX2xlbiwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIGhhLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgaG0pCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IHRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG80eHhfYWxnICpteV9hbGcgPSBjcnlwdG9fYWxnX3RvX2NyeXB0bzR4eF9hbGcoYWxnKTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCXN0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjAgKnNhX2luOworCWludCByYzsKKworCWN0eC0+ZGV2ICAgPSBteV9hbGctPmRldjsKKwljdHgtPmlzX2hhc2ggPSAxOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisKKwkvKiBDcmVhdGUgU0EgKi8KKwlpZiAoY3R4LT5zYV9pbl9kbWFfYWRkciB8fCBjdHgtPnNhX291dF9kbWFfYWRkcikKKwkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKworCXJjID0gY3J5cHRvNHh4X2FsbG9jX3NhKGN0eCwgc2FfbGVuKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciA9PSAwKSB7CisJCWNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoY3R4KTsKKwkJaWYgKCFjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcikgeworCQkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJdGZtLT5jcnRfYWhhc2gucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHNhLCBTQV9TQVZFX0hBU0gsIFNBX05PVF9TQVZFX0lWLAorCQkJCSBTQV9OT1RfTE9BRF9IQVNILCBTQV9MT0FEX0lWX0ZST01fU0EsCisJCQkJIFNBX05PX0hFQURFUl9QUk9DLCBoYSwgU0FfQ0lQSEVSX0FMR19OVUxMLAorCQkJCSBTQV9QQURfVFlQRV9aRVJPLCBTQV9PUF9HUk9VUF9CQVNJQywKKwkJCQkgU0FfT1BDT0RFX0hBU0gsIERJUl9JTkJPVU5EKTsKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzEoc2EsIDAsIFNBX0hBU0hfTU9ERV9IQVNILAorCQkJCSBDUllQVE9fRkVFREJBQ0tfTU9ERV9OT19GQiwgU0FfRVhURU5ERURfU05fT0ZGLAorCQkJCSBTQV9TRVFfTUFTS19PRkYsIFNBX01DX0VOQUJMRSwKKwkJCQkgU0FfTk9UX0NPUFlfUEFELCBTQV9OT1RfQ09QWV9QQVlMT0FELAorCQkJCSBTQV9OT1RfQ09QWV9IRFIpOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisJc2EtPnNhX2NvbnRlbnRzID0gU0FfSEFTSDE2MF9DT05URU5UUzsKKwlzYV9pbiA9IChzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwICopIGN0eC0+c2FfaW47CisJLyogTmVlZCB0byB6ZXJvIGhhc2ggZGlnZXN0IGluIFNBICovCisJbWVtc2V0KHNhX2luLT5pbm5lcl9kaWdlc3QsIDAsIHNpemVvZihzYV9pbi0+aW5uZXJfZGlnZXN0KSk7CisJbWVtc2V0KHNhX2luLT5vdXRlcl9kaWdlc3QsIDAsIHNpemVvZihzYV9pbi0+b3V0ZXJfZGlnZXN0KSk7CisJc2FfaW4tPnN0YXRlX3B0ciA9IGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyOworCWN0eC0+b2Zmc2V0X3RvX3NyX3B0ciA9IGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoY3R4KTsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKwlpbnQgZHM7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCWRzID0gY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUoCisJCQlfX2NyeXB0b19haGFzaF9jYXN0KHJlcS0+YmFzZS50Zm0pKTsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmRpZ2VzdF9sZW4gPSBkcyA+PiAyOworCXNhLT5zYV9jb21tYW5kXzAuYmYubG9hZF9oYXNoX3N0YXRlID0gU0FfTE9BRF9IQVNIX0ZST01fU0E7CisJY3R4LT5pc19oYXNoID0gMTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF91cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmlzX2hhc2ggPSAxOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisJY3R4LT5wZF9jdGwgPSAweDExOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsCisJCQkJICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHJlcS0+cmVzdWx0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIE5VTEwsIDApOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+aGFzaF9maW5hbCA9IDE7CisJY3R4LT5wZF9jdGwgPSAweDExOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsCisJCQkJICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHJlcS0+cmVzdWx0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIE5VTEwsIDApOworfQorCisvKioKKyAqIFNIQTEgQWxnb3JpdGhtCisgKi8KK2ludCBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiBjcnlwdG80eHhfaGFzaF9hbGdfaW5pdCh0Zm0sIFNBX0hBU0gxNjBfTEVOLCBTQV9IQVNIX0FMR19TSEExLAorCQkJCSAgICAgICBTQV9IQVNIX01PREVfSEFTSCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMGRmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKQEAgLTAsMCArMSwxMzEwIEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBBTUNDIGNyeXB0byBvZmZsb2FkIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIHVzZSB3aXRoCisgKiBMaW51eCBDcnlwdG9BUEkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vZGNyLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CisjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfY29yZS5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9zYS5oIgorCisjZGVmaW5lIFBQQzRYWF9TRUNfVkVSU0lPTl9TVFIJCQkiMC41IgorCisvKioKKyAqIFBQQzR4eCBDcnlwdG8gRW5naW5lIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqLworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2h3X2luaXQoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1bmlvbiBjZV9yaW5nX3NpemUgcmluZ19zaXplOworCXVuaW9uIGNlX3JpbmdfY29udG9sIHJpbmdfY3RybDsKKwl1bmlvbiBjZV9wYXJ0X3Jpbmdfc2l6ZSBwYXJ0X3Jpbmdfc2l6ZTsKKwl1bmlvbiBjZV9pb190aHJlc2hvbGQgaW9fdGhyZXNob2xkOworCXUzMiByYW5kX251bTsKKwl1bmlvbiBjZV9wZV9kbWFfY2ZnIHBlX2RtYV9jZmc7CisKKwl3cml0ZWwoUFBDNFhYX0JZVEVfT1JERVIsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9CWVRFX09SREVSX0NGRyk7CisJLyogc2V0dXAgcGUgZG1hLCBpbmNsdWRlIHJlc2V0IHNnLCBwZHIgYW5kIHBlLCB0aGVuIHJlbGVhc2UgcmVzZXQgKi8KKwlwZV9kbWFfY2ZnLncgPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fc2dwZF9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5ib19kYXRhX2VuID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3NhX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLmJvX3BkX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLmR5bmFtaWNfc2FfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfc2cgPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGRyID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BlID0gMTsKKwl3cml0ZWwocGVfZG1hX2NmZy53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEVfRE1BX0NGRyk7CisJLyogdW4gcmVzZXQgcGUsc2cgYW5kIHBkciAqLworCXBlX2RtYV9jZmcuYmYucGVfbW9kZSA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9zZyA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZHIgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGUgPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fdGRfZW4gPSAwOworCXdyaXRlbChwZV9kbWFfY2ZnLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRV9ETUFfQ0ZHKTsKKwl3cml0ZWwoZGV2LT5wZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRFJfQkFTRSk7CisJd3JpdGVsKGRldi0+cGRyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUkRSX0JBU0UpOworCXdyaXRlbChQUEM0WFhfUFJOR19DVFJMX0FVVE9fRU4sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QUk5HX0NUUkwpOworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmRfbnVtLCBzaXplb2YocmFuZF9udW0pKTsKKwl3cml0ZWwocmFuZF9udW0sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QUk5HX1NFRURfTCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZF9udW0sIHNpemVvZihyYW5kX251bSkpOworCXdyaXRlbChyYW5kX251bSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BSTkdfU0VFRF9IKTsKKwlyaW5nX3NpemUudyA9IDA7CisJcmluZ19zaXplLmJmLnJpbmdfb2Zmc2V0ID0gUFBDNFhYX1BEX1NJWkU7CisJcmluZ19zaXplLmJmLnJpbmdfc2l6ZSAgID0gUFBDNFhYX05VTV9QRDsKKwl3cml0ZWwocmluZ19zaXplLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SSU5HX1NJWkUpOworCXJpbmdfY3RybC53ID0gMDsKKwl3cml0ZWwocmluZ19jdHJsLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SSU5HX0NUUkwpOworCXdyaXRlbChQUEM0WFhfRENfM0RFU19FTiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0RFVklDRV9DVFJMKTsKKwl3cml0ZWwoZGV2LT5nZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRSk7CisJd3JpdGVsKGRldi0+c2RyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0UpOworCXBhcnRfcmluZ19zaXplLncgPSAwOworCXBhcnRfcmluZ19zaXplLmJmLnNkcl9zaXplID0gUFBDNFhYX1NEUl9TSVpFOworCXBhcnRfcmluZ19zaXplLmJmLmdkcl9zaXplID0gUFBDNFhYX0dEUl9TSVpFOworCXdyaXRlbChwYXJ0X3Jpbmdfc2l6ZS53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEFSVF9SSU5HX1NJWkUpOworCXdyaXRlbChQUEM0WFhfU0RfQlVGRkVSX1NJWkUsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QQVJUX1JJTkdfQ0ZHKTsKKwlpb190aHJlc2hvbGQudyA9IDA7CisJaW9fdGhyZXNob2xkLmJmLm91dHB1dF90aHJlc2hvbGQgPSBQUEM0WFhfT1VUUFVUX1RIUkVTSE9MRDsKKwlpb190aHJlc2hvbGQuYmYuaW5wdXRfdGhyZXNob2xkICA9IFBQQzRYWF9JTlBVVF9USFJFU0hPTEQ7CisJd3JpdGVsKGlvX3RocmVzaG9sZC53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU9fVEhSRVNIT0xEKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BEUl9CQVNFX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JEUl9CQVNFX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BLVF9TUkNfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEtUX0RFU1RfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfU0FfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0VfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0VfVUFERFIpOworCS8qIHVuIHJlc2V0IHBlLHNnIGFuZCBwZHIgKi8KKwlwZV9kbWFfY2ZnLmJmLnBlX21vZGUgPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfc2cgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGRyID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BlID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3RkX2VuID0gMDsKKwl3cml0ZWwocGVfZG1hX2NmZy53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEVfRE1BX0NGRyk7CisJLypjbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHQqLworCXdyaXRlbChQUEM0WFhfSU5URVJSVVBUX0NMUiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9DTFIpOworCXdyaXRlbChQUEM0WFhfSU5UX0RFU0NSX0NOVCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9ERVNDUl9DTlQpOworCXdyaXRlbChQUEM0WFhfSU5UX0RFU0NSX0NOVCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9ERVNDUl9DTlQpOworCXdyaXRlbChQUEM0WFhfSU5UX0NGRywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9DRkcpOworCXdyaXRlbChQUEM0WFhfUERfRE9ORV9JTlQsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfRU4pOworfQorCitpbnQgY3J5cHRvNHh4X2FsbG9jX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsIHUzMiBzaXplKQoreworCWN0eC0+c2FfaW4gPSBkbWFfYWxsb2NfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNpemUgKiA0LAorCQkJCQkmY3R4LT5zYV9pbl9kbWFfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKGN0eC0+c2FfaW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHgtPnNhX291dCA9IGRtYV9hbGxvY19jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgc2l6ZSAqIDQsCisJCQkJCSAmY3R4LT5zYV9vdXRfZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCWlmIChjdHgtPnNhX291dCA9PSBOVUxMKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgY3R4LT5zYV9sZW4gKiA0LAorCQkJCSAgY3R4LT5zYV9pbiwgY3R4LT5zYV9pbl9kbWFfYWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjdHgtPnNhX2luLCAwLCBzaXplICogNCk7CisJbWVtc2V0KGN0eC0+c2Ffb3V0LCAwLCBzaXplICogNCk7CisJY3R4LT5zYV9sZW4gPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3J5cHRvNHh4X2ZyZWVfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwlpZiAoY3R4LT5zYV9pbiAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgY3R4LT5zYV9sZW4gKiA0LAorCQkJCSAgY3R4LT5zYV9pbiwgY3R4LT5zYV9pbl9kbWFfYWRkcik7CisJaWYgKGN0eC0+c2Ffb3V0ICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBjdHgtPnNhX2xlbiAqIDQsCisJCQkJICBjdHgtPnNhX291dCwgY3R4LT5zYV9vdXRfZG1hX2FkZHIpOworCisJY3R4LT5zYV9pbl9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9vdXRfZG1hX2FkZHIgPSAwOworCWN0eC0+c2FfbGVuID0gMDsKK30KKwordTMyIGNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwljdHgtPnN0YXRlX3JlY29yZCA9IGRtYV9hbGxvY19jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQlzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCksCisJCQkJJmN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoY3R4LT5zdGF0ZV9yZWNvcmQsIDAsIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcnlwdG80eHhfZnJlZV9zdGF0ZV9yZWNvcmQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwlpZiAoY3R4LT5zdGF0ZV9yZWNvcmQgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCksCisJCQkJICBjdHgtPnN0YXRlX3JlY29yZCwKKwkJCQkgIGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyKTsKKwljdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciA9IDA7Cit9CisKKy8qKgorICogYWxsb2MgbWVtb3J5IGZvciB0aGUgZ2F0aGVyIHJpbmcKKyAqIG5vIG5lZWQgdG8gYWxsb2MgYnVmIGZvciB0aGUgcmluZworICogZ2RyX3RhaWwsIGdkcl9oZWFkIGFuZCBnZHJfY291bnQgYXJlIGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfYnVpbGRfcGRyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKwlkZXYtPnBkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgICAgICZkZXYtPnBkcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnBkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnBkcl91aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBQUEM0WFhfTlVNX1BELAorCQkJCUdGUF9LRVJORUwpOworCWlmICghZGV2LT5wZHJfdWluZm8pIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgZGV2LT5wZHIsCisJCQkJICBkZXYtPnBkcl9wYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoZGV2LT5wZHIsIDAsICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQpOworCWRldi0+c2hhZG93X3NhX3Bvb2wgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgIDI1NiAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICAgJmRldi0+c2hhZG93X3NhX3Bvb2xfcGEsCisJCQkJICAgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNoYWRvd19zYV9wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+c2hhZG93X3NyX3Bvb2wgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkgJmRldi0+c2hhZG93X3NyX3Bvb2xfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zaGFkb3dfc3JfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IFBQQzRYWF9OVU1fUEQ7IGkrKykgeworCQlwZF91aW5mbyA9IChzdHJ1Y3QgcGRfdWluZm8gKikgKGRldi0+cGRyX3VpbmZvICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogaSk7CisKKwkJLyogYWxsb2MgMjU2IGJ5dGVzIHdoaWNoIGlzIGVub3VnaCBmb3IgYW55IGtpbmQgb2YgZHluYW1pYyBzYSAqLworCQlwZF91aW5mby0+c2FfdmEgPSBkZXYtPnNoYWRvd19zYV9wb29sICsgMjU2ICogaTsKKwkJcGRfdWluZm8tPnNhX3BhID0gZGV2LT5zaGFkb3dfc2FfcG9vbF9wYSArIDI1NiAqIGk7CisKKwkJLyogYWxsb2Mgc3RhdGUgcmVjb3JkICovCisJCXBkX3VpbmZvLT5zcl92YSA9IGRldi0+c2hhZG93X3NyX3Bvb2wgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogaTsKKwkJcGRfdWluZm8tPnNyX3BhID0gZGV2LT5zaGFkb3dfc3JfcG9vbF9wYSArCisJCSAgICBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfZGVzdHJveV9wZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5wZHIgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgZGV2LT5wZHIsIGRldi0+cGRyX3BhKTsKKwlpZiAoZGV2LT5zaGFkb3dfc2FfcG9vbCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCAyNTYgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgZGV2LT5zaGFkb3dfc2FfcG9vbCwgZGV2LT5zaGFkb3dfc2FfcG9vbF9wYSk7CisJaWYgKGRldi0+c2hhZG93X3NyX3Bvb2wpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCXNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQlkZXYtPnNoYWRvd19zcl9wb29sLCBkZXYtPnNoYWRvd19zcl9wb29sX3BhKTsKKworCWtmcmVlKGRldi0+cGRyX3VpbmZvKTsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfZ2V0X3BkX2Zyb21fcGRyX25vbG9jayhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXUzMiByZXR2YWw7CisJdTMyIHRtcDsKKworCXJldHZhbCA9IGRldi0+cGRyX2hlYWQ7CisJdG1wID0gKGRldi0+cGRyX2hlYWQgKyAxKSAlIFBQQzRYWF9OVU1fUEQ7CisKKwlpZiAodG1wID09IGRldi0+cGRyX3RhaWwpCisJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKworCWRldi0+cGRyX2hlYWQgPSB0bXA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wdXRfcGRfdG9fcGRyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIHUzMiBpZHgpCit7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcGRfdWluZm8gPSAoc3RydWN0IHBkX3VpbmZvICopKGRldi0+cGRyX3VpbmZvICsKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBpZHgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+cGRyX3RhaWwgIT0gUFBDNFhYX0xBU1RfUEQpCisJCWRldi0+cGRyX3RhaWwrKzsKKwllbHNlCisJCWRldi0+cGRyX3RhaWwgPSAwOworCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0ZSRUU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2VfcGQgKmNyeXB0bzR4eF9nZXRfcGRwKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKnBkX2RtYSwgdTMyIGlkeCkKK3sKKwkqcGRfZG1hID0gZGV2LT5wZHJfcGEgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIGlkeDsKKworCXJldHVybiBkZXYtPnBkciArIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogaWR4OworfQorCisvKioKKyAqIGFsbG9jIG1lbW9yeSBmb3IgdGhlIGdhdGhlciByaW5nCisgKiBubyBuZWVkIHRvIGFsbG9jIGJ1ZiBmb3IgdGhlIHJpbmcKKyAqIGdkcl90YWlsLCBnZHJfaGVhZCBhbmQgZ2RyX2NvdW50IGFyZSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2J1aWxkX2dkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWRldi0+Z2RyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIFBQQzRYWF9OVU1fR0QsCisJCQkJICAgICAgJmRldi0+Z2RyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+Z2RyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChkZXYtPmdkciwgMCwgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBQUEM0WFhfTlVNX0dEKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvNHh4X2Rlc3Ryb3lfZ2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJICBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIFBQQzRYWF9OVU1fR0QsCisJCQkgIGRldi0+Z2RyLCBkZXYtPmdkcl9wYSk7Cit9CisKKy8qCisgKiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogcHJlZW1wdGlvbiBvciBpbnRlcnJ1cHQgbXVzdCBiZSBkaXNhYmxlZAorICovCit1MzIgY3J5cHRvNHh4X2dldF9uX2dkKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIGludCBuKQoreworCXUzMiByZXR2YWw7CisJdTMyIHRtcDsKKwlpZiAobiA+PSBQUEM0WFhfTlVNX0dEKQorCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisKKwlyZXR2YWwgPSBkZXYtPmdkcl9oZWFkOworCXRtcCA9IChkZXYtPmdkcl9oZWFkICsgbikgJSBQUEM0WFhfTlVNX0dEOworCWlmIChkZXYtPmdkcl9oZWFkID4gZGV2LT5nZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5nZHJfaGVhZCAmJiB0bXAgPj0gZGV2LT5nZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9IGVsc2UgaWYgKGRldi0+Z2RyX2hlYWQgPCBkZXYtPmdkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPmdkcl9oZWFkIHx8IHRtcCA+PSBkZXYtPmdkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0KKwlkZXYtPmdkcl9oZWFkID0gdG1wOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcHV0X2dkX3RvX2dkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmdkcl90YWlsID09IGRldi0+Z2RyX2hlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGV2LT5nZHJfdGFpbCAhPSBQUEM0WFhfTEFTVF9HRCkKKwkJZGV2LT5nZHJfdGFpbCsrOworCWVsc2UKKwkJZGV2LT5nZHJfdGFpbCA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2VfZ2QgKmNyeXB0bzR4eF9nZXRfZ2RwKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgKmdkX2RtYSwgdTMyIGlkeCkKK3sKKwkqZ2RfZG1hID0gZGV2LT5nZHJfcGEgKyBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIGlkeDsKKworCXJldHVybiAoc3RydWN0IGNlX2dkICopIChkZXYtPmdkciArIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogaWR4KTsKK30KKworLyoqCisgKiBhbGxvYyBtZW1vcnkgZm9yIHRoZSBzY2F0dGVyIHJpbmcKKyAqIG5lZWQgdG8gYWxsb2MgYnVmIGZvciB0aGUgcmluZworICogc2RyX3RhaWwsIHNkcl9oZWFkIGFuZCBzZHJfY291bnQgYXJlIGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfYnVpbGRfc2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGNlX3NkICpzZF9hcnJheTsKKworCS8qIGFsbG9jIG1lbW9yeSBmb3Igc2NhdHRlciBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkZXYtPnNkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgICAgICZkZXYtPnNkcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgPSBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSA9CisJCWRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKiBQUEM0WFhfTlVNX1NELAorCQkJJmRldi0+c2NhdHRlcl9idWZmZXJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSkgeworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICBkZXYtPnNkciwgZGV2LT5zZHJfcGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzZF9hcnJheSA9IGRldi0+c2RyOworCisJZm9yIChpID0gMDsgaSA8IFBQQzRYWF9OVU1fU0Q7IGkrKykgeworCQlzZF9hcnJheVtpXS5wdHIgPSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3BhICsKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAqIGk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9kZXN0cm95X3NkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnNkciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICBkZXYtPnNkciwgZGV2LT5zZHJfcGEpOworCisJaWYgKGRldi0+c2NhdHRlcl9idWZmZXJfdmEgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICogUFBDNFhYX05VTV9TRCwKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfdmEsCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3BhKTsKK30KKworLyoKKyAqIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKiBwcmVlbXB0aW9uIG9yIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2dldF9uX3NkKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIGludCBuKQoreworCXUzMiByZXR2YWw7CisJdTMyIHRtcDsKKworCWlmIChuID49IFBQQzRYWF9OVU1fU0QpCisJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKworCXJldHZhbCA9IGRldi0+c2RyX2hlYWQ7CisJdG1wID0gKGRldi0+c2RyX2hlYWQgKyBuKSAlIFBQQzRYWF9OVU1fU0Q7CisJaWYgKGRldi0+c2RyX2hlYWQgPiBkZXYtPmdkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPnNkcl9oZWFkICYmIHRtcCA+PSBkZXYtPnNkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0gZWxzZSBpZiAoZGV2LT5zZHJfaGVhZCA8IGRldi0+c2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+c2RyX2hlYWQgfHwgdG1wID49IGRldi0+c2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfSAvKiB0aGUgaGVhZCA9IHRhaWwsIG9yIGVtcHR5IGNhc2UgaXMgYWxyZWFkeSB0YWtlIGNhcmVkICovCisJZGV2LT5zZHJfaGVhZCA9IHRtcDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3B1dF9zZF90b19zZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5zZHJfdGFpbCA9PSBkZXYtPnNkcl9oZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChkZXYtPnNkcl90YWlsICE9IFBQQzRYWF9MQVNUX1NEKQorCQlkZXYtPnNkcl90YWlsKys7CisJZWxzZQorCQlkZXYtPnNkcl90YWlsID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Vfc2QgKmNyeXB0bzR4eF9nZXRfc2RwKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgKnNkX2RtYSwgdTMyIGlkeCkKK3sKKwkqc2RfZG1hID0gZGV2LT5zZHJfcGEgKyBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIGlkeDsKKworCXJldHVybiAgKHN0cnVjdCBjZV9zZCAqKShkZXYtPnNkciArIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogaWR4KTsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgIGRtYV9hZGRyX3QgKmFkZHIsIHUzMiAqbGVuZ3RoLAorCQkJCSAgIHUzMiAqaWR4LCB1MzIgKm9mZnNldCwgdTMyICpuYnl0ZXMpCit7CisJdTMyIGxlbjsKKworCWlmICgqbGVuZ3RoID4gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSB7CisJCW1lbWNweShwaHlzX3RvX3ZpcnQoKmFkZHIpLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSArCisJCQkqaWR4ICogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICsgKm9mZnNldCwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSk7CisJCSpvZmZzZXQgPSAwOworCQkqbGVuZ3RoIC09IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJKm5ieXRlcyAtPSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCWlmICgqaWR4ID09IFBQQzRYWF9MQVNUX1NEKQorCQkJKmlkeCA9IDA7CisJCWVsc2UKKwkJCSgqaWR4KSsrOworCQkqYWRkciA9ICphZGRyICsgIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmICgqbGVuZ3RoIDwgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSB7CisJCW1lbWNweShwaHlzX3RvX3ZpcnQoKmFkZHIpLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSArCisJCQkqaWR4ICogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICsgKm9mZnNldCwgKmxlbmd0aCk7CisJCWlmICgoKm9mZnNldCArICpsZW5ndGgpID09IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgeworCQkJaWYgKCppZHggPT0gUFBDNFhYX0xBU1RfU0QpCisJCQkJKmlkeCA9IDA7CisJCQllbHNlCisJCQkJKCppZHgpKys7CisJCQkqbmJ5dGVzIC09ICpsZW5ndGg7CisJCQkqb2Zmc2V0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCSpuYnl0ZXMgLT0gKmxlbmd0aDsKKwkJCSpvZmZzZXQgKz0gKmxlbmd0aDsKKwkJfQorCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWxlbiA9ICgqbmJ5dGVzIDw9IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgPworCQkJCSgqbmJ5dGVzKSA6IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJbWVtY3B5KHBoeXNfdG9fdmlydCgqYWRkciksCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICsKKwkJCSppZHggKiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKyAqb2Zmc2V0LAorCQkJbGVuKTsKKwkJKm9mZnNldCA9IDA7CisJCSpuYnl0ZXMgLT0gbGVuOworCisJCWlmICgqaWR4ID09IFBQQzRYWF9MQVNUX1NEKQorCQkJKmlkeCA9IDA7CisJCWVsc2UKKwkJCSgqaWR4KSsrOworCisJCXJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2NvcHlfcGt0X3RvX2RzdChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjZV9wZCAqcGQsCisJCQkJICAgICAgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbywKKwkJCQkgICAgICB1MzIgbmJ5dGVzLAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0KQoreworCWRtYV9hZGRyX3QgYWRkcjsKKwl1MzIgdGhpc19zZDsKKwl1MzIgb2Zmc2V0OworCXUzMiBsZW47CisJdTMyIGk7CisJdTMyIHNnX2xlbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJdGhpc19zZCA9IHBkX3VpbmZvLT5maXJzdF9zZDsKKwlvZmZzZXQgPSAwOworCWkgPSAwOworCisJd2hpbGUgKG5ieXRlcykgeworCQlzZyA9ICZkc3RbaV07CisJCXNnX2xlbiA9IHNnLT5sZW5ndGg7CisJCWFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKHNnKSwKKwkJCQlzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKworCQlpZiAob2Zmc2V0ID09IDApIHsKKwkJCWxlbiA9IChuYnl0ZXMgPD0gc2ctPmxlbmd0aCkgPyBuYnl0ZXMgOiBzZy0+bGVuZ3RoOworCQkJd2hpbGUgKGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKGRldiwgJmFkZHIsICZsZW4sCisJCQkJJnRoaXNfc2QsICZvZmZzZXQsICZuYnl0ZXMpKQorCQkJCTsKKwkJCWlmICghbmJ5dGVzKQorCQkJCXJldHVybjsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IChuYnl0ZXMgPD0gKGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAtIG9mZnNldCkpID8KKwkJCQluYnl0ZXMgOiAoZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplIC0gb2Zmc2V0KTsKKwkJCWxlbiA9IChzZy0+bGVuZ3RoIDwgbGVuKSA/IHNnLT5sZW5ndGggOiBsZW47CisJCQl3aGlsZSAoY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2UoZGV2LCAmYWRkciwgJmxlbiwKKwkJCQkJICAgICAgICZ0aGlzX3NkLCAmb2Zmc2V0LCAmbmJ5dGVzKSkKKwkJCQk7CisJCQlpZiAoIW5ieXRlcykKKwkJCQlyZXR1cm47CisJCQlzZ19sZW4gLT0gbGVuOworCQkJaWYgKHNnX2xlbikgeworCQkJCWFkZHIgKz0gbGVuOworCQkJCXdoaWxlIChjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShkZXYsICZhZGRyLAorCQkJCQkmc2dfbGVuLCAmdGhpc19zZCwgJm9mZnNldCwgJm5ieXRlcykpCisJCQkJCTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfY29weV9kaWdlc3RfdG9fZHN0KHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8sCisJCQkJCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwlzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkICpzdGF0ZV9yZWNvcmQgPQorCQkJCShzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkICopIHBkX3VpbmZvLT5zcl92YTsKKworCWlmIChzYS0+c2FfY29tbWFuZF8wLmJmLmhhc2hfYWxnID09IFNBX0hBU0hfQUxHX1NIQTEpIHsKKwkJbWVtY3B5KCh2b2lkICopIHBkX3VpbmZvLT5kZXN0X3ZhLCBzdGF0ZV9yZWNvcmQtPnNhdmVfZGlnZXN0LAorCQkgICAgICAgU0FfSEFTSF9BTEdfU0hBMV9ESUdFU1RfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9yZXRfc2dfZGVzYyhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbykKK3sKKwlpbnQgaTsKKwlpZiAocGRfdWluZm8tPm51bV9nZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRfdWluZm8tPm51bV9nZDsgaSsrKQorCQkJY3J5cHRvNHh4X3B1dF9nZF90b19nZHIoZGV2KTsKKwkJcGRfdWluZm8tPmZpcnN0X2dkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9nZCA9IDA7CisJfQorCWlmIChwZF91aW5mby0+bnVtX3NkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZF91aW5mby0+bnVtX3NkOyBpKyspCisJCQljcnlwdG80eHhfcHV0X3NkX3RvX3NkcihkZXYpOworCisJCXBkX3VpbmZvLT5maXJzdF9zZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fc2QgPSAwOworCX0KK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfYWJsa2NpcGhlcl9kb25lKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvLAorCQkJCSAgICAgc3RydWN0IGNlX3BkICpwZCkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4OworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmFibGtfcmVxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0OworCWRtYV9hZGRyX3QgYWRkcjsKKworCWFibGtfcmVxID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2Nhc3QocGRfdWluZm8tPmFzeW5jX3JlcSk7CisJY3R4ICA9IGNyeXB0b190Zm1fY3R4KGFibGtfcmVxLT5iYXNlLnRmbSk7CisKKwlpZiAocGRfdWluZm8tPnVzaW5nX3NkKSB7CisJCWNyeXB0bzR4eF9jb3B5X3BrdF90b19kc3QoZGV2LCBwZCwgcGRfdWluZm8sIGFibGtfcmVxLT5uYnl0ZXMsCisJCQkJCSAgYWJsa19yZXEtPmRzdCk7CisJfSBlbHNlIHsKKwkJZHN0ID0gcGRfdWluZm8tPmRlc3RfdmE7CisJCWFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKGRzdCksCisJCQkJICAgIGRzdC0+b2Zmc2V0LCBkc3QtPmxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwl9CisJY3J5cHRvNHh4X3JldF9zZ19kZXNjKGRldiwgcGRfdWluZm8pOworCWlmIChhYmxrX3JlcS0+YmFzZS5jb21wbGV0ZSAhPSBOVUxMKQorCQlhYmxrX3JlcS0+YmFzZS5jb21wbGV0ZSgmYWJsa19yZXEtPmJhc2UsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2FoYXNoX2RvbmUoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHg7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFoYXNoX3JlcTsKKworCWFoYXNoX3JlcSA9IGFoYXNoX3JlcXVlc3RfY2FzdChwZF91aW5mby0+YXN5bmNfcmVxKTsKKwljdHggID0gY3J5cHRvX3RmbV9jdHgoYWhhc2hfcmVxLT5iYXNlLnRmbSk7CisKKwljcnlwdG80eHhfY29weV9kaWdlc3RfdG9fZHN0KHBkX3VpbmZvLAorCQkJCSAgICAgY3J5cHRvX3RmbV9jdHgoYWhhc2hfcmVxLT5iYXNlLnRmbSkpOworCWNyeXB0bzR4eF9yZXRfc2dfZGVzYyhkZXYsIHBkX3VpbmZvKTsKKwkvKiBjYWxsIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24geCAqLworCWlmIChhaGFzaF9yZXEtPmJhc2UuY29tcGxldGUgIT0gTlVMTCkKKwkJYWhhc2hfcmVxLT5iYXNlLmNvbXBsZXRlKCZhaGFzaF9yZXEtPmJhc2UsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3BkX2RvbmUoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgdTMyIGlkeCkKK3sKKwlzdHJ1Y3QgY2VfcGQgKnBkOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisKKwlwZCA9ICBkZXYtPnBkciArIHNpemVvZihzdHJ1Y3QgY2VfcGQpKmlkeDsKKwlwZF91aW5mbyA9IGRldi0+cGRyX3VpbmZvICsgc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykqaWR4OworCWlmIChjcnlwdG9fdGZtX2FsZ190eXBlKHBkX3VpbmZvLT5hc3luY19yZXEtPnRmbSkgPT0KKwkJCUNSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSKQorCQlyZXR1cm4gY3J5cHRvNHh4X2FibGtjaXBoZXJfZG9uZShkZXYsIHBkX3VpbmZvLCBwZCk7CisJZWxzZQorCQlyZXR1cm4gY3J5cHRvNHh4X2FoYXNoX2RvbmUoZGV2LCBwZF91aW5mbyk7Cit9CisKKy8qKgorICogTm90ZTogT25seSB1c2UgdGhpcyBmdW5jdGlvbiB0byBjb3B5IGl0ZW1zIHRoYXQgaXMgd29yZCBhbGlnbmVkLgorICovCit2b2lkIGNyeXB0bzR4eF9tZW1jcHlfbGUodW5zaWduZWQgaW50ICpkc3QsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJIGludCBsZW4pCit7CisJdTggKnRtcDsKKwlmb3IgKDsgbGVuID49IDQ7IGJ1ZiArPSA0LCBsZW4gLT0gNCkKKwkJKmRzdCsrID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBpbnQgKikgYnVmKTsKKworCXRtcCA9ICh1OCAqKWRzdDsKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMzoKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gKihidWYrMik7CisJCSp0bXArKyA9ICooYnVmKzEpOworCQkqdG1wKysgPSAqYnVmOworCQlicmVhazsKKwljYXNlIDI6CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9ICooYnVmKzEpOworCQkqdG1wKysgPSAqYnVmOworCQlicmVhazsKKwljYXNlIDE6CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9ICpidWY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X3N0b3BfYWxsKHN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2KQoreworCWNyeXB0bzR4eF9kZXN0cm95X3Bkcihjb3JlX2Rldi0+ZGV2KTsKKwljcnlwdG80eHhfZGVzdHJveV9nZHIoY29yZV9kZXYtPmRldik7CisJY3J5cHRvNHh4X2Rlc3Ryb3lfc2RyKGNvcmVfZGV2LT5kZXYpOworCWRldl9zZXRfZHJ2ZGF0YShjb3JlX2Rldi0+ZGV2aWNlLCBOVUxMKTsKKwlpb3VubWFwKGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UpOworCWtmcmVlKGNvcmVfZGV2LT5kZXYpOworCWtmcmVlKGNvcmVfZGV2KTsKK30KKwordm9pZCBjcnlwdG80eHhfcmV0dXJuX3BkKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkgdTMyIHBkX2VudHJ5LCBzdHJ1Y3QgY2VfcGQgKnBkLAorCQkJIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8pCit7CisJLyogaXJxIHNob3VsZCBiZSBhbHJlYWR5IGRpc2FibGVkICovCisJZGV2LT5wZHJfaGVhZCA9IHBkX2VudHJ5OworCXBkLT5wZF9jdGwudyA9IDA7CisJcGQtPnBkX2N0bF9sZW4udyA9IDA7CisJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfRlJFRTsKK30KKworLyoKKyAqIGRlcml2ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gc2NhdHRlcmxpc3QKKyAqIFNoYW1sZXNzbHkgY29weSBmcm9tIHRhbGl0b3MuYworICovCitzdGF0aWMgaW50IGdldF9zZ19jb3VudChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3QsIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNnX2xpc3Q7CisJaW50IHNnX25lbnRzID0gMDsKKworCXdoaWxlIChuYnl0ZXMpIHsKKwkJc2dfbmVudHMrKzsKKwkJaWYgKHNnLT5sZW5ndGggPiBuYnl0ZXMpCisJCQlicmVhazsKKwkJbmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCXNnID0gc2dfbmV4dChzZyk7CisJfQorCisJcmV0dXJuIHNnX25lbnRzOworfQorCitzdGF0aWMgdTMyIGdldF9uZXh0X2dkKHUzMiBjdXJyZW50KQoreworCWlmIChjdXJyZW50ICE9IFBQQzRYWF9MQVNUX0dEKQorCQlyZXR1cm4gY3VycmVudCArIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBnZXRfbmV4dF9zZCh1MzIgY3VycmVudCkKK3sKKwlpZiAoY3VycmVudCAhPSBQUEM0WFhfTEFTVF9TRCkKKwkJcmV0dXJuIGN1cnJlbnQgKyAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3UzMiBjcnlwdG80eHhfYnVpbGRfcGQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsCisJCSAgICAgICBzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkgICAgICAgdm9pZCAqaXYsIHUzMiBpdl9sZW4pCit7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiA9IGN0eC0+ZGV2OworCWRtYV9hZGRyX3QgYWRkciwgcGRfZG1hLCBzZF9kbWEsIGdkX2RtYTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJc3RydWN0IGNlX2dkICpnZDsKKwlzdHJ1Y3QgY2VfcGQgKnBkOworCXUzMiBudW1fZ2QsIG51bV9zZDsKKwl1MzIgZnN0X2dkID0gMHhmZmZmZmZmZjsKKwl1MzIgZnN0X3NkID0gMHhmZmZmZmZmZjsKKwl1MzIgcGRfZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gZGF0YWxlbiwgaWR4OworCXVuc2lnbmVkIGludCBpdmxlbiA9IDA7CisJdTMyIGdkX2lkeCA9IDA7CisKKwkvKiBmaWd1cmUgaG93IG1hbnkgZ2QgaXMgbmVlZGVkICovCisJbnVtX2dkID0gZ2V0X3NnX2NvdW50KHNyYywgZGF0YWxlbik7CisJaWYgKG51bV9nZCA9PSAxKQorCQludW1fZ2QgPSAwOworCisJLyogZmlndXJlIGhvdyBtYW55IHNkIGlzIG5lZWRlZCAqLworCWlmIChzZ19pc19sYXN0KGRzdCkgfHwgY3R4LT5pc19oYXNoKSB7CisJCW51bV9zZCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGRhdGFsZW4gPiBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpIHsKKwkJCW51bV9zZCA9IGRhdGFsZW4gLyBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJCQlpZiAoZGF0YWxlbiAlIFBQQzRYWF9TRF9CVUZGRVJfU0laRSkKKwkJCQludW1fc2QrKzsKKwkJfSBlbHNlIHsKKwkJCW51bV9zZCA9IDE7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSBmb2xsb3cgc2VjdGlvbiBvZiBjb2RlIG5lZWRzIHRvIGJlIHByb3RlY3RlZAorCSAqIFRoZSBnYXRoZXIgcmluZyBhbmQgc2NhdHRlciByaW5nIG5lZWRzIHRvIGJlIGNvbnNlY3V0aXZlCisJICogSW4gY2FzZSBvZiBydW4gb3V0IG9mIGFueSBraW5kIG9mIGRlc2NyaXB0b3IsIHRoZSBkZXNjcmlwdG9yCisJICogYWxyZWFkeSBnb3QgbXVzdCBiZSByZXR1cm4gdGhlIG9yaWdpbmFsIHBsYWNlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKG51bV9nZCkgeworCQlmc3RfZ2QgPSBjcnlwdG80eHhfZ2V0X25fZ2QoZGV2LCBudW1fZ2QpOworCQlpZiAoZnN0X2dkID09IEVSSU5HX1dBU19GVUxMKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKwlpZiAobnVtX3NkKSB7CisJCWZzdF9zZCA9IGNyeXB0bzR4eF9nZXRfbl9zZChkZXYsIG51bV9zZCk7CisJCWlmIChmc3Rfc2QgPT0gRVJJTkdfV0FTX0ZVTEwpIHsKKwkJCWlmIChudW1fZ2QpCisJCQkJZGV2LT5nZHJfaGVhZCA9IGZzdF9nZDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCXBkX2VudHJ5ID0gY3J5cHRvNHh4X2dldF9wZF9mcm9tX3Bkcl9ub2xvY2soZGV2KTsKKwlpZiAocGRfZW50cnkgPT0gRVJJTkdfV0FTX0ZVTEwpIHsKKwkJaWYgKG51bV9nZCkKKwkJCWRldi0+Z2RyX2hlYWQgPSBmc3RfZ2Q7CisJCWlmIChudW1fc2QpCisJCQlkZXYtPnNkcl9oZWFkID0gZnN0X3NkOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlwZF91aW5mbyA9IChzdHJ1Y3QgcGRfdWluZm8gKikoZGV2LT5wZHJfdWluZm8gKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIHBkX2VudHJ5KTsKKwlwZCA9IGNyeXB0bzR4eF9nZXRfcGRwKGRldiwgJnBkX2RtYSwgcGRfZW50cnkpOworCXBkX3VpbmZvLT5hc3luY19yZXEgPSByZXE7CisJcGRfdWluZm8tPm51bV9nZCA9IG51bV9nZDsKKwlwZF91aW5mby0+bnVtX3NkID0gbnVtX3NkOworCisJaWYgKGl2X2xlbiB8fCBjdHgtPmlzX2hhc2gpIHsKKwkJaXZsZW4gPSBpdl9sZW47CisJCXBkLT5zYSA9IHBkX3VpbmZvLT5zYV9wYTsKKwkJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIHBkX3VpbmZvLT5zYV92YTsKKwkJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQkJbWVtY3B5KHNhLCBjdHgtPnNhX2luLCBjdHgtPnNhX2xlbiAqIDQpOworCQllbHNlCisJCQltZW1jcHkoc2EsIGN0eC0+c2Ffb3V0LCBjdHgtPnNhX2xlbiAqIDQpOworCisJCW1lbWNweSgodm9pZCAqKSBzYSArIGN0eC0+b2Zmc2V0X3RvX3NyX3B0ciwKKwkJCSZwZF91aW5mby0+c3JfcGEsIDQpOworCisJCWlmIChpdl9sZW4pCisJCQljcnlwdG80eHhfbWVtY3B5X2xlKHBkX3VpbmZvLT5zcl92YSwgaXYsIGl2X2xlbik7CisJfSBlbHNlIHsKKwkJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKSB7CisJCQlwZC0+c2EgPSBjdHgtPnNhX2luX2RtYV9hZGRyOworCQkJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJCX0gZWxzZSB7CisJCQlwZC0+c2EgPSBjdHgtPnNhX291dF9kbWFfYWRkcjsKKwkJCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dDsKKwkJfQorCX0KKwlwZC0+c2FfbGVuID0gY3R4LT5zYV9sZW47CisJaWYgKG51bV9nZCkgeworCQkvKiBnZXQgZmlyc3QgZ2Qgd2UgYXJlIGdvaW5nIHRvIHVzZSAqLworCQlnZF9pZHggPSBmc3RfZ2Q7CisJCXBkX3VpbmZvLT5maXJzdF9nZCA9IGZzdF9nZDsKKwkJcGRfdWluZm8tPm51bV9nZCA9IG51bV9nZDsKKwkJZ2QgPSBjcnlwdG80eHhfZ2V0X2dkcChkZXYsICZnZF9kbWEsIGdkX2lkeCk7CisJCXBkLT5zcmMgPSBnZF9kbWE7CisJCS8qIGVuYWJsZSBnYXRoZXIgKi8KKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5nYXRoZXIgPSAxOworCQlpZHggPSAwOworCQlzcmMgPSAmc3JjWzBdOworCQkvKiB3YWxrIHRoZSBzZywgYW5kIHNldHVwIGdhdGhlciBhcnJheSAqLworCQl3aGlsZSAobmJ5dGVzKSB7CisJCQlzZyA9ICZzcmNbaWR4XTsKKwkJCWFkZHIgPSBkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKHNnKSwKKwkJCQkgICAgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJCQlnZC0+cHRyID0gYWRkcjsKKwkJCWdkLT5jdGxfbGVuLmxlbiA9IHNnLT5sZW5ndGg7CisJCQlnZC0+Y3RsX2xlbi5kb25lID0gMDsKKwkJCWdkLT5jdGxfbGVuLnJlYWR5ID0gMTsKKwkJCWlmIChzZy0+bGVuZ3RoID49IG5ieXRlcykKKwkJCQlicmVhazsKKwkJCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQkJZ2RfaWR4ID0gZ2V0X25leHRfZ2QoZ2RfaWR4KTsKKwkJCWdkID0gY3J5cHRvNHh4X2dldF9nZHAoZGV2LCAmZ2RfZG1hLCBnZF9pZHgpOworCQkJaWR4Kys7CisJCX0KKwl9IGVsc2UgeworCQlwZC0+c3JjID0gKHUzMilkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzZ19wYWdlKHNyYyksCisJCQkJc3JjLT5vZmZzZXQsIHNyYy0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwkJLyoKKwkJICogRGlzYWJsZSBnYXRoZXIgaW4gc2EgY29tbWFuZAorCQkgKi8KKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5nYXRoZXIgPSAwOworCQkvKgorCQkgKiBJbmRpY2F0ZSBnYXRoZXIgYXJyYXkgaXMgbm90IHVzZWQKKwkJICovCisJCXBkX3VpbmZvLT5maXJzdF9nZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fZ2QgPSAwOworCX0KKwlpZiAoY3R4LT5pc19oYXNoIHx8IHNnX2lzX2xhc3QoZHN0KSkgeworCQkvKgorCQkgKiB3ZSBrbm93IGFwcGxpY2F0aW9uIGdpdmUgdXMgZHN0IGEgd2hvbGUgcGllY2Ugb2YgbWVtb3J5CisJCSAqIG5vIG5lZWQgdG8gdXNlIHNjYXR0ZXIgcmluZy4KKwkJICogSW4gY2FzZSBvZiBpc19oYXNoLCB0aGUgaWN2IGlzIGFsd2F5cyBhdCBlbmQgb2Ygc3JjIGRhdGEuCisJCSAqLworCQlwZF91aW5mby0+dXNpbmdfc2QgPSAwOworCQlwZF91aW5mby0+Zmlyc3Rfc2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX3NkID0gMDsKKwkJcGRfdWluZm8tPmRlc3RfdmEgPSBkc3Q7CisJCXNhLT5zYV9jb21tYW5kXzAuYmYuc2NhdHRlciA9IDA7CisJCWlmIChjdHgtPmlzX2hhc2gpCisJCQlwZC0+ZGVzdCA9IHZpcnRfdG9fcGh5cygodm9pZCAqKWRzdCk7CisJCWVsc2UKKwkJCXBkLT5kZXN0ID0gKHUzMilkbWFfbWFwX3BhZ2UoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCQlzZ19wYWdlKGRzdCksIGRzdC0+b2Zmc2V0LAorCQkJCQlkc3QtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNlX3NkICpzZCA9IE5VTEw7CisJCXUzMiBzZF9pZHggPSBmc3Rfc2Q7CisJCW5ieXRlcyA9IGRhdGFsZW47CisJCXNhLT5zYV9jb21tYW5kXzAuYmYuc2NhdHRlciA9IDE7CisJCXBkX3VpbmZvLT51c2luZ19zZCA9IDE7CisJCXBkX3VpbmZvLT5kZXN0X3ZhID0gZHN0OworCQlwZF91aW5mby0+Zmlyc3Rfc2QgPSBmc3Rfc2Q7CisJCXBkX3VpbmZvLT5udW1fc2QgPSBudW1fc2Q7CisJCXNkID0gY3J5cHRvNHh4X2dldF9zZHAoZGV2LCAmc2RfZG1hLCBzZF9pZHgpOworCQlwZC0+ZGVzdCA9IHNkX2RtYTsKKwkJLyogc2V0dXAgc2NhdHRlciBkZXNjcmlwdG9yICovCisJCXNkLT5jdGwuZG9uZSA9IDA7CisJCXNkLT5jdGwucmR5ID0gMTsKKwkJLyogc2QtPnB0ciBzaG91bGQgYmUgc2V0dXAgYnkgc2RfaW5pdCByb3V0aW5lKi8KKwkJaWR4ID0gMDsKKwkJaWYgKG5ieXRlcyA+PSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpCisJCQluYnl0ZXMgLT0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCQllbHNlCisJCQluYnl0ZXMgPSAwOworCQl3aGlsZSAobmJ5dGVzKSB7CisJCQlzZF9pZHggPSBnZXRfbmV4dF9zZChzZF9pZHgpOworCQkJc2QgPSBjcnlwdG80eHhfZ2V0X3NkcChkZXYsICZzZF9kbWEsIHNkX2lkeCk7CisJCQkvKiBzZXR1cCBzY2F0dGVyIGRlc2NyaXB0b3IgKi8KKwkJCXNkLT5jdGwuZG9uZSA9IDA7CisJCQlzZC0+Y3RsLnJkeSA9IDE7CisJCQlpZiAobmJ5dGVzID49IFBQQzRYWF9TRF9CVUZGRVJfU0laRSkKKwkJCQluYnl0ZXMgLT0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCQkJZWxzZQorCQkJCS8qCisJCQkJICogU0QgZW50cnkgY2FuIGhvbGQgUFBDNFhYX1NEX0JVRkZFUl9TSVpFLAorCQkJCSAqIHdoaWNoIGlzIG1vcmUgdGhhbiBuYnl0ZXMsIHNvIGRvbmUuCisJCQkJICovCisJCQkJbmJ5dGVzID0gMDsKKwkJfQorCX0KKworCXNhLT5zYV9jb21tYW5kXzEuYmYuaGFzaF9jcnlwdG9fb2Zmc2V0ID0gMDsKKwlwZC0+cGRfY3RsLncgPSBjdHgtPnBkX2N0bDsKKwlwZC0+cGRfY3RsX2xlbi53ID0gMHgwMDQwMDAwMCB8IChjdHgtPmJ5cGFzcyA8PCAyNCkgfCBkYXRhbGVuOworCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0lOVVNFOworCXdtYigpOworCS8qIHdyaXRlIGFueSB2YWx1ZSB0byBwdXNoIGVuZ2luZSB0byByZWFkIGEgcGQgKi8KKwl3cml0ZWwoMSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9ERVNDUl9SRCk7CisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworLyoqCisgKiBBbGdvcml0aG0gUmVnaXN0cmF0aW9uIEZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IGNyeXB0bzR4eF9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqYW1jY19hbGcgPSBjcnlwdG9fYWxnX3RvX2NyeXB0bzR4eF9hbGcoYWxnKTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWN0eC0+ZGV2ID0gYW1jY19hbGctPmRldjsKKwljdHgtPnNhX2luID0gTlVMTDsKKwljdHgtPnNhX291dCA9IE5VTEw7CisJY3R4LT5zYV9pbl9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9vdXRfZG1hX2FkZHIgPSAwOworCWN0eC0+c2FfbGVuID0gMDsKKworCWlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlKQorCQl0Zm0tPmNydF9hYmxrY2lwaGVyLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCWVsc2UgaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19haGFzaF90eXBlKQorCQl0Zm0tPmNydF9haGFzaC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfYWxnX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisJY3J5cHRvNHh4X2ZyZWVfc3RhdGVfcmVjb3JkKGN0eCk7Cit9CisKK2ludCBjcnlwdG80eHhfcmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpzZWNfZGV2LAorCQkJICAgc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19hbGcsIGludCBhcnJheV9zaXplKQoreworCXN0cnVjdCBjcnlwdG80eHhfYWxnICphbGc7CisJaW50IGk7CisJaW50IHJjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheV9zaXplOyBpKyspIHsKKwkJYWxnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9hbGcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhbGcpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlhbGctPmFsZyA9IGNyeXB0b19hbGdbaV07CisJCUlOSVRfTElTVF9IRUFEKCZhbGctPmFsZy5jcmFfbGlzdCk7CisJCWlmIChhbGctPmFsZy5jcmFfaW5pdCA9PSBOVUxMKQorCQkJYWxnLT5hbGcuY3JhX2luaXQgPSBjcnlwdG80eHhfYWxnX2luaXQ7CisJCWlmIChhbGctPmFsZy5jcmFfZXhpdCA9PSBOVUxMKQorCQkJYWxnLT5hbGcuY3JhX2V4aXQgPSBjcnlwdG80eHhfYWxnX2V4aXQ7CisJCWFsZy0+ZGV2ID0gc2VjX2RldjsKKwkJcmMgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGctPmFsZyk7CisJCWlmIChyYykgeworCQkJbGlzdF9kZWwoJmFsZy0+ZW50cnkpOworCQkJa2ZyZWUoYWxnKTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmFsZy0+ZW50cnksICZzZWNfZGV2LT5hbGdfbGlzdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X3VucmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpzZWNfZGV2KQoreworCXN0cnVjdCBjcnlwdG80eHhfYWxnICphbGcsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWxnLCB0bXAsICZzZWNfZGV2LT5hbGdfbGlzdCwgZW50cnkpIHsKKwkJbGlzdF9kZWwoJmFsZy0+ZW50cnkpOworCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnKTsKKwkJa2ZyZWUoYWxnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9iaF90YXNrbGV0X2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCXN0cnVjdCBjZV9wZCAqcGQ7CisJdTMyIHRhaWw7CisKKwl3aGlsZSAoY29yZV9kZXYtPmRldi0+cGRyX2hlYWQgIT0gY29yZV9kZXYtPmRldi0+cGRyX3RhaWwpIHsKKwkJdGFpbCA9IGNvcmVfZGV2LT5kZXYtPnBkcl90YWlsOworCQlwZF91aW5mbyA9IGNvcmVfZGV2LT5kZXYtPnBkcl91aW5mbyArCisJCQlzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSp0YWlsOworCQlwZCA9ICBjb3JlX2Rldi0+ZGV2LT5wZHIgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIHRhaWw7CisJCWlmICgocGRfdWluZm8tPnN0YXRlID09IFBEX0VOVFJZX0lOVVNFKSAmJgorCQkJCSAgIHBkLT5wZF9jdGwuYmYucGVfZG9uZSAmJgorCQkJCSAgICFwZC0+cGRfY3RsLmJmLmhvc3RfcmVhZHkpIHsKKwkJCXBkLT5wZF9jdGwuYmYucGVfZG9uZSA9IDA7CisJCQljcnlwdG80eHhfcGRfZG9uZShjb3JlX2Rldi0+ZGV2LCB0YWlsKTsKKwkJCWNyeXB0bzR4eF9wdXRfcGRfdG9fcGRyKGNvcmVfZGV2LT5kZXYsIHRhaWwpOworCQkJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfRlJFRTsKKwkJfSBlbHNlIHsKKwkJCS8qIGlmIHRhaWwgbm90IGRvbmUsIGJyZWFrICovCisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiBUb3AgSGFsZiBvZiBpc3IuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBjcnlwdG80eHhfY2VfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlID09IDApCisJCXJldHVybiAwOworCisJd3JpdGVsKFBQQzRYWF9JTlRFUlJVUFRfQ0xSLAorCSAgICAgICBjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9DTFIpOworCXRhc2tsZXRfc2NoZWR1bGUoJmNvcmVfZGV2LT50YXNrbGV0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBTdXBwb3J0ZWQgQ3J5cHRvIEFsZ29yaXRobXMKKyAqLworc3RydWN0IGNyeXB0b19hbGcgY3J5cHRvNHh4X2FsZ1tdID0geworCS8qIENyeXB0byBBRVMgbW9kZXMgKi8KKwl7CisJCS5jcmFfbmFtZSAJPSAiY2JjKGFlcykiLAorCQkuY3JhX2RyaXZlcl9uYW1lID0gImNiYy1hZXMtcHBjNHh4IiwKKwkJLmNyYV9wcmlvcml0eSAJPSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzIAk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwgQ1JZUFRPX0FMR19BU1lOQywKKwkJLmNyYV9ibG9ja3NpemUgCT0gQUVTX0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZSAJPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpLAorCQkuY3JhX2FsaWdubWFzayAJPSAwLAorCQkuY3JhX3R5cGUgCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJCS5jcmFfbW9kdWxlIAk9IFRISVNfTU9EVUxFLAorCQkuY3JhX3UgCQk9IHsKKwkJCS5hYmxrY2lwaGVyID0geworCQkJCS5taW5fa2V5c2l6ZSAJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJCS5tYXhfa2V5c2l6ZSAJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJCS5pdnNpemUJCT0gQUVTX0lWX1NJWkUsCisJCQkJLnNldGtleSAJPSBjcnlwdG80eHhfc2V0a2V5X2Flc19jYmMsCisJCQkJLmVuY3J5cHQgCT0gY3J5cHRvNHh4X2VuY3J5cHQsCisJCQkJLmRlY3J5cHQgCT0gY3J5cHRvNHh4X2RlY3J5cHQsCisJCQl9CisJCX0KKwl9LAorCS8qIEhhc2ggU0hBMSAqLworCXsKKwkJLmNyYV9uYW1lCT0gInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lID0gInNoYTEtcHBjNHh4IiwKKwkJLmNyYV9wcmlvcml0eQk9IENSWVBUTzRYWF9DUllQVE9fUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPSBDUllQVE9fQUxHX1RZUEVfQUhBU0ggfCBDUllQVE9fQUxHX0FTWU5DLAorCQkuY3JhX2Jsb2Nrc2l6ZQk9IFNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KSwKKwkJLmNyYV9hbGlnbm1hc2sJPSAwLAorCQkuY3JhX3R5cGUJPSAmY3J5cHRvX2FoYXNoX3R5cGUsCisJCS5jcmFfaW5pdAk9IGNyeXB0bzR4eF9zaGExX2FsZ19pbml0LAorCQkuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX3UJCT0geworCQkJLmFoYXNoID0geworCQkJCS5kaWdlc3RzaXplIAk9IFNIQTFfRElHRVNUX1NJWkUsCisJCQkJLmluaXQJCT0gY3J5cHRvNHh4X2hhc2hfaW5pdCwKKwkJCQkudXBkYXRlCQk9IGNyeXB0bzR4eF9oYXNoX3VwZGF0ZSwKKwkJCQkuZmluYWwgIAk9IGNyeXB0bzR4eF9oYXNoX2ZpbmFsLAorCQkJCS5kaWdlc3QgCT0gY3J5cHRvNHh4X2hhc2hfZGlnZXN0LAorCQkJfQorCQl9CisJfSwKK307CisKKy8qKgorICogTW9kdWxlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqLworc3RhdGljIGludCBfX2luaXQgY3J5cHRvNHh4X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJaW50IHJjOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mZGV2LT5kZXY7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXY7CisKKwlyYyA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsICZyZXMpOworCWlmIChyYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFtY2MscHBjNDYwZXgtY3J5cHRvIikpIHsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QpIHwgUFBDNDYwRVhfQ0VfUkVTRVQpOworCQltdGRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCkgJiB+UFBDNDYwRVhfQ0VfUkVTRVQpOworCX0gZWxzZSBpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCSJhbWNjLHBwYzQwNWV4LWNyeXB0byIpKSB7CisJCW10ZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNUKSB8IFBQQzQwNUVYX0NFX1JFU0VUKTsKKwkJbXRkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QpICYgflBQQzQwNUVYX0NFX1JFU0VUKTsKKwl9IGVsc2UgaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkiYW1jYyxwcGM0NjBzeC1jcnlwdG8iKSkgeworCQltdGRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCkgfCBQUEM0NjBTWF9DRV9SRVNFVCk7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNUKSAmIH5QUEM0NjBTWF9DRV9SRVNFVCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDcnlwdG8gRnVuY3Rpb24gTm90IHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb3JlX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvcmVfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNvcmVfZGV2KTsKKwljb3JlX2Rldi0+b2ZkZXYgPSBvZmRldjsKKwljb3JlX2Rldi0+ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvcmVfZGV2LT5kZXYpCisJCWdvdG8gZXJyX2FsbG9jX2RldjsKKworCWNvcmVfZGV2LT5kZXYtPmNvcmVfZGV2ID0gY29yZV9kZXY7CisJY29yZV9kZXYtPmRldmljZSA9IGRldjsKKwlzcGluX2xvY2tfaW5pdCgmY29yZV9kZXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZjb3JlX2Rldi0+ZGV2LT5hbGdfbGlzdCk7CisJcmMgPSBjcnlwdG80eHhfYnVpbGRfcGRyKGNvcmVfZGV2LT5kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfYnVpbGRfcGRyOworCisJcmMgPSBjcnlwdG80eHhfYnVpbGRfZ2RyKGNvcmVfZGV2LT5kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfYnVpbGRfZ2RyOworCisJcmMgPSBjcnlwdG80eHhfYnVpbGRfc2RyKGNvcmVfZGV2LT5kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfYnVpbGRfc2RyOworCisJLyogSW5pdCB0YXNrbGV0IGZvciBib3R0b20gaGFsZiBwcm9jZXNzaW5nICovCisJdGFza2xldF9pbml0KCZjb3JlX2Rldi0+dGFza2xldCwgY3J5cHRvNHh4X2JoX3Rhc2tsZXRfY2IsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldik7CisKKwkvKiBSZWdpc3RlciBmb3IgQ3J5cHRvIGlzciwgQ3J5cHRvIEVuZ2luZSBJUlEgKi8KKwljb3JlX2Rldi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDApOworCXJjID0gcmVxdWVzdF9pcnEoY29yZV9kZXYtPmlycSwgY3J5cHRvNHh4X2NlX2ludGVycnVwdF9oYW5kbGVyLCAwLAorCQkJIGNvcmVfZGV2LT5kZXYtPm5hbWUsIGRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKKworCWNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UgPSBvZl9pb21hcChvZmRldi0+bm9kZSwgMCk7CisJaWYgKCFjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG9mX2lvbWFwXG4iKTsKKwkJZ290byBlcnJfaW9tYXA7CisJfQorCisJLyogbmVlZCB0byBzZXR1cCBwZHIsIHJkciwgZ2RyIGFuZCBzZHIgYmVmb3JlIHRoaXMgKi8KKwljcnlwdG80eHhfaHdfaW5pdChjb3JlX2Rldi0+ZGV2KTsKKworCS8qIFJlZ2lzdGVyIHNlY3VyaXR5IGFsZ29yaXRobXMgd2l0aCBMaW51eCBDcnlwdG9BUEkgKi8KKwlyYyA9IGNyeXB0bzR4eF9yZWdpc3Rlcl9hbGcoY29yZV9kZXYtPmRldiwgY3J5cHRvNHh4X2FsZywKKwkJCSAgICAgICBBUlJBWV9TSVpFKGNyeXB0bzR4eF9hbGcpKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3N0YXJ0X2RldjsKKworCXJldHVybiAwOworCitlcnJfc3RhcnRfZGV2OgorCWlvdW5tYXAoY29yZV9kZXYtPmRldi0+Y2VfYmFzZSk7CitlcnJfaW9tYXA6CisJZnJlZV9pcnEoY29yZV9kZXYtPmlycSwgZGV2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGNvcmVfZGV2LT5pcnEpOworCXRhc2tsZXRfa2lsbCgmY29yZV9kZXYtPnRhc2tsZXQpOworZXJyX3JlcXVlc3RfaXJxOgorCWNyeXB0bzR4eF9kZXN0cm95X3Nkcihjb3JlX2Rldi0+ZGV2KTsKK2Vycl9idWlsZF9zZHI6CisJY3J5cHRvNHh4X2Rlc3Ryb3lfZ2RyKGNvcmVfZGV2LT5kZXYpOworZXJyX2J1aWxkX2dkcjoKKwljcnlwdG80eHhfZGVzdHJveV9wZHIoY29yZV9kZXYtPmRldik7CitlcnJfYnVpbGRfcGRyOgorCWtmcmVlKGNvcmVfZGV2LT5kZXYpOworZXJyX2FsbG9jX2RldjoKKwlrZnJlZShjb3JlX2Rldik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGNyeXB0bzR4eF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mZGV2LT5kZXY7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWZyZWVfaXJxKGNvcmVfZGV2LT5pcnEsIGRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhjb3JlX2Rldi0+aXJxKTsKKworCXRhc2tsZXRfa2lsbCgmY29yZV9kZXYtPnRhc2tsZXQpOworCS8qIFVuLXJlZ2lzdGVyIHdpdGggTGludXggQ3J5cHRvQVBJICovCisJY3J5cHRvNHh4X3VucmVnaXN0ZXJfYWxnKGNvcmVfZGV2LT5kZXYpOworCS8qIEZyZWUgYWxsIGFsbG9jYXRlZCBtZW1vcnkgKi8KKwljcnlwdG80eHhfc3RvcF9hbGwoY29yZV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNyeXB0bzR4eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgICAgICA9ICJhbWNjLHBwYzR4eC1jcnlwdG8iLH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgY3J5cHRvNHh4X2RyaXZlciA9IHsKKwkubmFtZQkJPSAiY3J5cHRvNHh4IiwKKwkubWF0Y2hfdGFibGUJPSBjcnlwdG80eHhfbWF0Y2gsCisJLnByb2JlCQk9IGNyeXB0bzR4eF9wcm9iZSwKKwkucmVtb3ZlCQk9IGNyeXB0bzR4eF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG80eHhfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNyeXB0bzR4eF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvNHh4X2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY3J5cHRvNHh4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNyeXB0bzR4eF9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0bzR4eF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBTUNDIFBQQzR4eCBjcnlwdG8gYWNjZWxlcmF0b3IiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjEwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgaXMgdGhlIGhlYWRlciBmaWxlIGZvciBBTUNDIENyeXB0byBvZmZsb2FkIExpbnV4IGRldmljZSBkcml2ZXIgZm9yCisgKiB1c2Ugd2l0aCBMaW51eCBDcnlwdG9BUEkuCisKKyAqLworCisjaWZuZGVmIF9fQ1JZUFRPNFhYX0NPUkVfSF9fCisjZGVmaW5lIF9fQ1JZUFRPNFhYX0NPUkVfSF9fCisKKyNkZWZpbmUgUFBDNDYwU1hfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCisjZGVmaW5lIFBQQzQwNUVYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMAorI2RlZmluZSBQUEM0NjBFWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDEKKyNkZWZpbmUgUFBDNDYwRVhfQ0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUFBDNDYwU1hfQ0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUFBDNDA1RVhfQ0VfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworI2RlZmluZSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZCQkzMDAKKyNkZWZpbmUgUFBDNFhYX0xBU1RfUEQJCQkJNjMKKyNkZWZpbmUgUFBDNFhYX05VTV9QRAkJCQk2NAorI2RlZmluZSBQUEM0WFhfTEFTVF9HRAkJCQkxMDIzCisjZGVmaW5lIFBQQzRYWF9OVU1fR0QJCQkJMTAyNAorI2RlZmluZSBQUEM0WFhfTEFTVF9TRAkJCQk2MworI2RlZmluZSBQUEM0WFhfTlVNX1NECQkJCTY0CisjZGVmaW5lIFBQQzRYWF9TRF9CVUZGRVJfU0laRQkJCTIwNDgKKworI2RlZmluZSBQRF9FTlRSWV9JTlVTRQkJCQkxCisjZGVmaW5lIFBEX0VOVFJZX0ZSRUUJCQkJMAorI2RlZmluZSBFUklOR19XQVNfRlVMTAkJCQkweGZmZmZmZmZmCisKK3N0cnVjdCBjcnlwdG80eHhfZGV2aWNlOworCitzdHJ1Y3QgcGRfdWluZm8geworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CisJdTMyICAgc3RhdGU7CisJdTMyIHVzaW5nX3NkOworCXUzMiBmaXJzdF9nZDsJCS8qIGZpcnN0IGdhdGhlciBkaXNjcmlwdG9yCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXUzMiBudW1fZ2Q7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBnYXRoZXIgZGlzY3JpcHRvcgorCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl1MzIgZmlyc3Rfc2Q7CQkvKiBmaXJzdCBzY2F0dGVyIGRpc2NyaXB0b3IKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdTMyIG51bV9zZDsJCS8qIG51bWJlciBvZiBzY2F0dGVyIGRpc2NyaXB0b3JzCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXZvaWQgKnNhX3ZhOwkJLyogc2hhZG93IHNhLCB3aGVuIHVzaW5nIGNwIGZyb20gY3R4LT5zYSAqLworCXUzMiBzYV9wYTsKKwl2b2lkICpzcl92YTsJCS8qIHN0YXRlIHJlY29yZCBmb3Igc2hhZG93IHNhICovCisJdTMyIHNyX3BhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZGVzdF92YTsKKwlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFzeW5jX3JlcTsgCS8qIGJhc2UgY3J5cHRvIHJlcXVlc3QKKwkJCQkJCQlmb3IgdGhpcyBwYWNrZXQgKi8KK307CisKK3N0cnVjdCBjcnlwdG80eHhfZGV2aWNlIHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldjsKKwljaGFyICpuYW1lOworCXU2NCAgY2VfcGh5X2FkZHJlc3M7CisJdm9pZCBfX2lvbWVtICpjZV9iYXNlOworCisJdm9pZCAqcGRyOwkJCS8qIGJhc2UgYWRkcmVzcyBvZiBwYWNrZXQKKwkJCQkJZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBwZHJfcGE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgdG8KKwkJCQkJcHJvZ3JhbSBjZSBwZHJfYmFzZV9yZWdpc3RlciAqLworCXZvaWQgKmdkcjsgICAgICAgICAgICAgICAgICAgICAgLyogZ2F0aGVyIGRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3QgZ2RyX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyB1c2VkIHRvCisJCQkJCXByb2dyYW0gY2UgZ2RyX2Jhc2VfcmVnaXN0ZXIgKi8KKwl2b2lkICpzZHI7CQkJLyogc2NhdHRlciBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IHNkcl9wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MgdXNlZCB0bworCQkJCQlwcm9ncmFtIGNlIHNkcl9iYXNlX3JlZ2lzdGVyICovCisJdm9pZCAqc2NhdHRlcl9idWZmZXJfdmE7CisJZG1hX2FkZHJfdCBzY2F0dGVyX2J1ZmZlcl9wYTsKKwl1MzIgc2NhdHRlcl9idWZmZXJfc2l6ZTsKKworCXZvaWQgKnNoYWRvd19zYV9wb29sOwkJLyogcG9vbCBvZiBtZW1vcnkgZm9yIHNhIGluIHBkX3VpbmZvICovCisJZG1hX2FkZHJfdCBzaGFkb3dfc2FfcG9vbF9wYTsKKwl2b2lkICpzaGFkb3dfc3JfcG9vbDsJCS8qIHBvb2wgb2YgbWVtb3J5IGZvciBzciBpbiBwZF91aW5mbyAqLworCWRtYV9hZGRyX3Qgc2hhZG93X3NyX3Bvb2xfcGE7CisJdTMyIHBkcl90YWlsOworCXUzMiBwZHJfaGVhZDsKKwl1MzIgZ2RyX3RhaWw7CisJdTMyIGdkcl9oZWFkOworCXUzMiBzZHJfdGFpbDsKKwl1MzIgc2RyX2hlYWQ7CisJdm9pZCAqcGRyX3VpbmZvOworCXN0cnVjdCBsaXN0X2hlYWQgYWxnX2xpc3Q7CS8qIExpc3Qgb2YgYWxnb3JpdGhtIHN1cHBvcnRlZAorCQkJCQlieSB0aGlzIGRldmljZSAqLworfTsKKworc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CisJdTMyIGludF9zdGF0dXM7CisJdTMyIGlycTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2N0eCB7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKKwl2b2lkICpzYV9pbjsKKwlkbWFfYWRkcl90IHNhX2luX2RtYV9hZGRyOworCXZvaWQgKnNhX291dDsKKwlkbWFfYWRkcl90IHNhX291dF9kbWFfYWRkcjsKKwl2b2lkICpzdGF0ZV9yZWNvcmQ7CisJZG1hX2FkZHJfdCBzdGF0ZV9yZWNvcmRfZG1hX2FkZHI7CisJdTMyIHNhX2xlbjsKKwl1MzIgb2Zmc2V0X3RvX3NyX3B0cjsgICAgICAgICAgIC8qIG9mZnNldCB0byBzdGF0ZSBwdHIsIGluIGR5bmFtaWMgc2EgKi8KKwl1MzIgZGlyZWN0aW9uOworCXUzMiBuZXh0X2hkcjsKKwl1MzIgc2F2ZV9pdjsKKwl1MzIgcGRfY3RsX2xlbjsKKwl1MzIgcGRfY3RsOworCXUzMiBieXBhc3M7CisJdTMyIGlzX2hhc2g7CisJdTMyIGhhc2hfZmluYWw7Cit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X3JlcV9jdHggeworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CS8qIERldmljZSBpbiB3aGljaAorCQkJCQlvcGVyYXRpb24gdG8gc2VuZCB0byAqLworCXZvaWQgKnNhOworCXUzMiBzYV9kbWFfYWRkcjsKKwl1MTYgc2FfbGVuOworfTsKKworc3RydWN0IGNyeXB0bzR4eF9hbGcgeworCXN0cnVjdCBsaXN0X2hlYWQgIGVudHJ5OworCXN0cnVjdCBjcnlwdG9fYWxnIGFsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworfTsKKworI2RlZmluZSBjcnlwdG9fYWxnX3RvX2NyeXB0bzR4eF9hbGcoeCkgXAorCQljb250YWluZXJfb2YoeCwgc3RydWN0IGNyeXB0bzR4eF9hbGcsIGFsZykKKworZXh0ZXJuIGludCBjcnlwdG80eHhfYWxsb2Nfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwgdTMyIHNpemUpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X2ZyZWVfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGNyeXB0bzR4eF9hbGxvY19zYV9yY3R4KHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsCisJCQkJICAgc3RydWN0IGNyeXB0bzR4eF9jdHggKnJjdHgpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X2ZyZWVfc2FfcmN0eChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqcmN0eCk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9jdHgoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGNyeXB0bzR4eF9hbGxvY19zdGF0ZV9yZWNvcmQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGdldF9keW5hbWljX3NhX29mZnNldF9rZXlfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdTMyIGdldF9keW5hbWljX3NhX2l2X3NpemUoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfbWVtY3B5X2xlKHVuc2lnbmVkIGludCAqZHN0LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbik7CitleHRlcm4gdTMyIGNyeXB0bzR4eF9idWlsZF9wZChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwKKwkJCSAgICAgIHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkgICAgICB2b2lkICppdiwgdTMyIGl2X2xlbik7CitleHRlcm4gaW50IGNyeXB0bzR4eF9zZXRrZXlfYWVzX2NiYyhzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCQkgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbik7CitleHRlcm4gaW50IGNyeXB0bzR4eF9lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9zaGExX2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF91cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDRlZGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oCkBAIC0wLDAgKzEsMjg0IEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbHIgZGVmaW5lcyB0aGUgcmVnaXN0ZXIgc2V0IGZvciBTZWN1cml0eSBTdWJzeXN0ZW0KKyAqLworCisjaWZuZGVmIF9fQ1JZUFRPNFhYX1JFR19ERUZfSF9fCisjZGVmaW5lIF9fQ1JZUFRPNFhYX1JFR19ERUZfSF9fCisKKy8qIENSWVBUTzRYWCBSZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQ1JZUFRPNFhYX0RFU0NSSVBUT1IJCQkweDAwMDAwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9DVFJMX1NUQVQJCQkweDAwMDAwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9TT1VSQ0UJCQkweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUTzRYWF9ERVNUCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBCQkJCTB4MDAwMDAwMEMKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX0xFTkdUSAkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0xFTkdUSAkJCTB4MDAwMDAwMTQKKworI2RlZmluZSBDUllQVE80WFhfUEVfRE1BX0NGRwkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BFX0RNQV9TVEFUCQkJMHgwMDAwMDA0NAorI2RlZmluZSBDUllQVE80WFhfUERSX0JBU0UJCQkweDAwMDAwMDQ4CisjZGVmaW5lIENSWVBUTzRYWF9SRFJfQkFTRQkJCTB4MDAwMDAwNGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfU0laRQkJCTB4MDAwMDAwNTAKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfQ1RSTAkJCTB4MDAwMDAwNTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9SSU5HX1NUQVQJCQkweDAwMDAwMDU4CisjZGVmaW5lIENSWVBUTzRYWF9FWFRfUklOR19TVEFUCQkJMHgwMDAwMDA1YworI2RlZmluZSBDUllQVE80WFhfSU9fVEhSRVNIT0xECQkJMHgwMDAwMDA2MAorI2RlZmluZSBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0UJCTB4MDAwMDAwNjQKKyNkZWZpbmUgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFCQkweDAwMDAwMDY4CisjZGVmaW5lIENSWVBUTzRYWF9QQVJUX1JJTkdfU0laRQkJMHgwMDAwMDA2YworI2RlZmluZSBDUllQVE80WFhfUEFSVF9SSU5HX0NGRwkJICAgICAgICAweDAwMDAwMDcwCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BEUl9CQVNFX1VBRERSCQkweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUTzRYWF9SRFJfQkFTRV9VQUREUgkJMHgwMDAwMDA4NAorI2RlZmluZSBDUllQVE80WFhfUEtUX1NSQ19VQUREUgkJCTB4MDAwMDAwODgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BLVF9ERVNUX1VBRERSCQkweDAwMDAwMDhjCisjZGVmaW5lIENSWVBUTzRYWF9TQV9VQUREUgkJCTB4MDAwMDAwOTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFX1VBRERSCQkweDAwMDAwMEEwCisjZGVmaW5lIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRV9VQUREUgkJMHgwMDAwMDBBNAorCisjZGVmaW5lIENSWVBUTzRYWF9TRVFfUkQJCQkweDAwMDAwNDA4CisjZGVmaW5lIENSWVBUTzRYWF9TRVFfTUFTS19SRAkJCTB4MDAwMDA0MEMKKworI2RlZmluZSBDUllQVE80WFhfU0FfQ01EXzAJCQkweDAwMDEwNjAwCisjZGVmaW5lIENSWVBUTzRYWF9TQV9DTURfMQkJCTB4MDAwMTA2MDQKKworI2RlZmluZSBDUllQVE80WFhfU1RBVEVfUFRSCQkJMHgwMDAxMDZkYworI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSVYJCQkweDAwMDEwNzAwCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9IQVNIX0JZVEVfQ05UXzAJCTB4MDAwMTA3MTAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0hBU0hfQllURV9DTlRfMQkJMHgwMDAxMDcxNAorCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9JRElHRVNUXzAJCTB4MDAwMTA3MTgKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0lESUdFU1RfMQkJMHgwMDAxMDcxYworCisjZGVmaW5lIENSWVBUTzRYWF9EQVRBX0lOCQkJMHgwMDAxODAwMAorI2RlZmluZSBDUllQVE80WFhfREFUQV9PVVQJCQkweDAwMDFjMDAwCisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9VTk1BU0tfU1RBVAkJMHgwMDA1MDBhMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BU0tfU1RBVAkJCTB4MDAwNTAwYTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9DTFIJCQkweDAwMDUwMGE0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfRU4JCQkweDAwMDUwMGE4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9QS0EJCQkweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUERSX0RPTkUJCQkweDAwMDA4MDAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFfV1JfRVJSCQkJMHgwMDAyMDAwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BX1JEX0VSUgkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9QRV9FUlIJCQkweDAwMDAwMjAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfVVNFUl9ETUFfRVJSCQkweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfU0xBVkVfRVJSCQkJMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BU1RFUl9FUlIJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9FUlJPUgkJCTB4MDAwMzAyNTgKKworI2RlZmluZSBDUllQVE80WFhfSU5UX0NGRwkJCTB4MDAwNTAwYWMKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9ERVNDUl9SRAkJCTB4MDAwNTAwYjAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9ERVNDUl9DTlQJCQkweDAwMDUwMGI0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfVElNRU9VVF9DTlQJCTB4MDAwNTAwYjgKKworI2RlZmluZSBDUllQVE80WFhfREVWSUNFX0NUUkwJCQkweDAwMDYwMDgwCisjZGVmaW5lIENSWVBUTzRYWF9ERVZJQ0VfSUQJCQkweDAwMDYwMDg0CisjZGVmaW5lIENSWVBUTzRYWF9ERVZJQ0VfSU5GTwkJCTB4MDAwNjAwODgKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9VU0VSX1NSQwkJCTB4MDAwNjAwOTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9VU0VSX0RFU1QJCQkweDAwMDYwMDk4CisjZGVmaW5lIENSWVBUTzRYWF9ETUFfVVNFUl9DTUQJCQkweDAwMDYwMDlDCisKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9DRkcJICAgICAgICAJMHgwMDA2MDBkNAorI2RlZmluZSBDUllQVE80WFhfQllURV9PUkRFUl9DRkcgCQkweDAwMDYwMGQ4CisjZGVmaW5lIENSWVBUTzRYWF9FTkRJQU5fQ0ZHCQkJMHgwMDA2MDBkOAorCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1NUQVQJCQkweDAwMDcwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX0NUUkwJCQkweDAwMDcwMDA0CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1NFRURfTAkJCTB4MDAwNzAwMDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfU0VFRF9ICQkJMHgwMDA3MDAwYworCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18wCQkJMHgwMDA3MDAyMAorI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMQkJCTB4MDAwNzAwMjQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzIJCQkweDAwMDcwMDI4CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18zCQkJMHgwMDA3MDAyQworCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX0xGU1JfTAkJCTB4MDAwNzAwMzAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfTEZTUl9ICQkJMHgwMDA3MDAzNAorCisvKioKKyAqIEluaXRpbGl6ZSBDUllQVE8gRU5HSU5FIHJlZ2lzdGVycywgYW5kIG1lbW9yeSBiYXNlcy4KKyAqLworI2RlZmluZSBQUEM0WFhfUERSX1BPTEwJCQkJMHgzZmYKKyNkZWZpbmUgUFBDNFhYX09VVFBVVF9USFJFU0hPTEQJCQkyCisjZGVmaW5lIFBQQzRYWF9JTlBVVF9USFJFU0hPTEQJCQkyCisjZGVmaW5lIFBQQzRYWF9QRF9TSVpFCQkJCTYKKyNkZWZpbmUgUFBDNFhYX0NUWF9ET05FX0lOVAkJCTB4MjAwMAorI2RlZmluZSBQUEM0WFhfUERfRE9ORV9JTlQJCQkweDgwMDAKKyNkZWZpbmUgUFBDNFhYX0JZVEVfT1JERVIJCQkweDIyMjIyCisjZGVmaW5lIFBQQzRYWF9JTlRFUlJVUFRfQ0xSCQkJMHgzZmZmZgorI2RlZmluZSBQUEM0WFhfUFJOR19DVFJMX0FVVE9fRU4JCTB4MworI2RlZmluZSBQUEM0WFhfRENfM0RFU19FTgkJCTEKKyNkZWZpbmUgUFBDNFhYX0lOVF9ERVNDUl9DTlQJCQk0CisjZGVmaW5lIFBQQzRYWF9JTlRfVElNRU9VVF9DTlQJCQkwCisjZGVmaW5lIFBQQzRYWF9JTlRfQ0ZHCQkJCTEKKy8qKgorICogYWxsIGZvbGxvdyBkZWZpbmUgYXJlIGFkIGhvYworICovCisjZGVmaW5lIFBQQzRYWF9SSU5HX1JFVFJZCQkJMTAwCisjZGVmaW5lIFBQQzRYWF9SSU5HX1BPTEwJCQkxMDAKKyNkZWZpbmUgUFBDNFhYX1NEUl9TSVpFCQkJCVBQQzRYWF9OVU1fU0QKKyNkZWZpbmUgUFBDNFhYX0dEUl9TSVpFCQkJCVBQQzRYWF9OVU1fR0QKKworLyoqCisgICogR2VuZXJpYyBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcy4gVGhlc2Ugd2lsbAorICogbmV2ZXIgbGlrZWx5IHVzZWQgZXhjZXB0IGZvciByZWZlcmVuY2UgcHVycG9zZS4gVGhlc2Ugc3RydWN0dXJlIGZvcm1hdAorICogY2FuIGJlIG5vdCBjaGFuZ2VkIGFzIHRoZSBoYXJkd2FyZSBleHBlY3RzIHRoZW0gdG8gYmUgbGF5b3V0IGFzIGRlZmluZWQuCisgKiBGaWVsZCBjYW4gYmUgcmVtb3ZlZCBvciByZWR1Y2VkIGJ1dCBvcmRlcmluZyBjYW4gbm90IGJlIGNoYW5nZWQuCisgKi8KKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9DRkdfT0ZGU0VUCQkweDQwCit1bmlvbiBjZV9wZV9kbWFfY2ZnIHsKKwlzdHJ1Y3QgeworCQl1MzIgcnN2Ojc7CisJCXUzMiBkaXJfaG9zdDoxOworCQl1MzIgcnN2MToyOworCQl1MzIgYm9fdGRfZW46MTsKKwkJdTMyIGRpc19wZHJfdXBkOjE7CisJCXUzMiBib19zZ3BkX2VuOjE7CisJCXUzMiBib19kYXRhX2VuOjE7CisJCXUzMiBib19zYV9lbjoxOworCQl1MzIgYm9fcGRfZW46MTsKKwkJdTMyIHJzdjI6NDsKKwkJdTMyIGR5bmFtaWNfc2FfZW46MTsKKwkJdTMyIHBkcl9tb2RlOjI7CisJCXUzMiBwZV9tb2RlOjE7CisJCXUzMiByc3YzOjU7CisJCXUzMiByZXNldF9zZzoxOworCQl1MzIgcmVzZXRfcGRyOjE7CisJCXUzMiByZXNldF9wZToxOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9QRFJfQkFTRV9PRkZTRVQJCTB4NDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1JEUl9CQVNFX09GRlNFVAkJMHg0YworI2RlZmluZSBDUllQVE80WFhfUklOR19TSVpFX09GRlNFVAkJMHg1MAordW5pb24gY2VfcmluZ19zaXplIHsKKwlzdHJ1Y3QgeworCQl1MzIgcmluZ19vZmZzZXQ6MTY7CisJCXUzMiByc3Y6NjsKKwkJdTMyIHJpbmdfc2l6ZToxMDsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfUklOR19DT05UUk9MX09GRlNFVAkJMHg1NAordW5pb24gY2VfcmluZ19jb250b2wgeworCXN0cnVjdCB7CisJCXUzMiBjb250aW51b3VzOjE7CisJCXUzMiByc3Y6NTsKKwkJdTMyIHJpbmdfcmV0cnlfZGl2aXNvcjoxMDsKKwkJdTMyIHJzdjE6NDsKKwkJdTMyIHJpbmdfcG9sbF9kaXZpc29yOjEwOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9JT19USFJFU0hPTERfT0ZGU0VUCQkweDYwCit1bmlvbiBjZV9pb190aHJlc2hvbGQgeworCXN0cnVjdCB7CisJCXUzMiByc3Y6NjsKKwkJdTMyIG91dHB1dF90aHJlc2hvbGQ6MTA7CisJCXUzMiByc3YxOjY7CisJCXUzMiBpbnB1dF90aHJlc2hvbGQ6MTA7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0dBVEhFUl9SSU5HX0JBU0VfT0ZGU0VUCTB4NjQKKyNkZWZpbmUgQ1JZUFRPNFhYX1NDQVRURVJfUklOR19CQVNFX09GRlNFVAkweDY4CisKK3VuaW9uIGNlX3BhcnRfcmluZ19zaXplICB7CisJc3RydWN0IHsKKwkJdTMyIHNkcl9zaXplOjE2OworCQl1MzIgZ2RyX3NpemU6MTY7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfMzIJCQkwCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzY0CQkJMQorI2RlZmluZSBNQVhfQlVSU1RfU0laRV8xMjgJCQkyCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzI1NgkJCTMKKworLyogZ2F0aGVyIGRlc2NyaXB0b3IgY29udHJvbCBsZW5ndGggKi8KK3N0cnVjdCBnZF9jdGxfbGVuIHsKKwl1MzIgbGVuOjE2OworCXUzMiByc3Y6MTQ7CisJdTMyIGRvbmU6MTsKKwl1MzIgcmVhZHk6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZV9nZCB7CisJdTMyIHB0cjsKKwlzdHJ1Y3QgZ2RfY3RsX2xlbiBjdGxfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNkX2N0bCB7CisJdTMyIGN0bDozMDsKKwl1MzIgZG9uZToxOworCXUzMiByZHk6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZV9zZCB7CisgICAgdTMyIHB0cjsKKwlzdHJ1Y3Qgc2RfY3RsIGN0bDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUERfUEFEX0NUTF8zMgkweDEwCisjZGVmaW5lIFBEX1BBRF9DVExfNjQJMHgyMAorI2RlZmluZSBQRF9QQURfQ1RMXzEyOAkweDQwCisjZGVmaW5lIFBEX1BBRF9DVExfMjU2CTB4ODAKK3VuaW9uIGNlX3BkX2N0bCB7CisJc3RydWN0IHsKKwkJdTMyIHBkX3BhZF9jdGw6ODsKKwkJdTMyIHN0YXR1czo4OworCQl1MzIgbmV4dF9oZHI6ODsKKwkJdTMyIHJzdjoyOworCQl1MzIgY2FjaGVkX3NhOjE7CisJCXUzMiBoYXNoX2ZpbmFsOjE7CisJCXUzMiBpbml0X2FyYzQ6MTsKKwkJdTMyIHJzdjE6MTsKKwkJdTMyIHBlX2RvbmU6MTsKKwkJdTMyIGhvc3RfcmVhZHk6MTsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gY2VfcGRfY3RsX2xlbiB7CisJc3RydWN0IHsKKwkJdTMyIGJ5cGFzczo4OworCQl1MzIgcGVfZG9uZToxOworCQl1MzIgaG9zdF9yZWFkeToxOworCQl1MzIgcnN2OjI7CisJCXUzMiBwa3RfbGVuOjIwOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2VfcGQgeworCXVuaW9uIGNlX3BkX2N0bCAgIHBkX2N0bDsKKwl1MzIgc3JjOworCXUzMiBkZXN0OworCXUzMiBzYTsgICAgICAgICAgICAgICAgIC8qIGdldCBmcm9tIGN0eC0+c2FfZG1hX2FkZHIgKi8KKwl1MzIgc2FfbGVuOyAgICAgICAgICAgICAvKiBvbmx5IGlmIGR5bmFtaWMgc2EgaXMgdXNlZCAqLworCXVuaW9uIGNlX3BkX2N0bF9sZW4gcGRfY3RsX2xlbjsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2ZmQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIEBmaWxlIGNyeXB0bzR4eF9zYS5jCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHNlY3VyaXR5IGNvbnRleHQKKyAqIGFzc29pY2F0ZSBmb3JtYXQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9kZXMuaD4KKyNpbmNsdWRlICJjcnlwdG80eHhfcmVnX2RlZi5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9zYS5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9jb3JlLmgiCisKK3UzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfaXZfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1MzIgb2Zmc2V0OworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopKGN0eC0+c2FfaW4pKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopKGN0eC0+c2Ffb3V0KSktPnNhX2NvbnRlbnRzOworCW9mZnNldCA9IGN0cy5iZi5rZXlfc2l6ZQorCQkrIGN0cy5iZi5pbm5lcl9zaXplCisJCSsgY3RzLmJmLm91dGVyX3NpemUKKwkJKyBjdHMuYmYuc3BpCisJCSsgY3RzLmJmLnNlcV9udW0wCisJCSsgY3RzLmJmLnNlcV9udW0xCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazAKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2syCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazM7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2N0bCkgKyBvZmZzZXQgKiA0OworfQorCit1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXUzMiBvZmZzZXQ7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbiktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dCktPnNhX2NvbnRlbnRzOworCW9mZnNldCA9IGN0cy5iZi5rZXlfc2l6ZQorCQkrIGN0cy5iZi5pbm5lcl9zaXplCisJCSsgY3RzLmJmLm91dGVyX3NpemUKKwkJKyBjdHMuYmYuc3BpCisJCSsgY3RzLmJmLnNlcV9udW0wCisJCSsgY3RzLmJmLnNlcV9udW0xCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazAKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2syCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazMKKwkJKyBjdHMuYmYuaXYwCisJCSsgY3RzLmJmLml2MQorCQkrIGN0cy5iZi5pdjIKKwkJKyBjdHMuYmYuaXYzOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9jdGwpICsgb2Zmc2V0ICogNDsKK30KKwordTMyIGdldF9keW5hbWljX3NhX2l2X3NpemUoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0KS0+c2FfY29udGVudHM7CisJcmV0dXJuIChjdHMuYmYuaXYwICsgY3RzLmJmLml2MSArIGN0cy5iZi5pdjIgKyBjdHMuYmYuaXYzKSAqIDQ7Cit9CisKK3UzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfa2V5X2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbiktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dCktPnNhX2NvbnRlbnRzOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9jdGwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4M2VkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBzZWN1cml0eSBjb250ZXh0CisgKiBhc3NvaWNhdGUgZm9ybWF0LgorICovCisKKyNpZm5kZWYgX19DUllQVE80WFhfU0FfSF9fCisjZGVmaW5lIF9fQ1JZUFRPNFhYX1NBX0hfXworCisjZGVmaW5lIEFFU19JVl9TSVpFCQkJCTE2CisKKy8qKgorICogQ29udGVudHMgb2YgRHluYW1pYyBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcworICovCit1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIHsKKwlzdHJ1Y3QgeworCQl1MzIgYXJjNF9zdGF0ZV9wdHI6MTsKKwkJdTMyIGFyYzRfaWpfcHRyOjE7CisJCXUzMiBzdGF0ZV9wdHI6MTsKKwkJdTMyIGl2MzoxOworCQl1MzIgaXYyOjE7CisJCXUzMiBpdjE6MTsKKwkJdTMyIGl2MDoxOworCQl1MzIgc2VxX251bV9tYXNrMzoxOworCQl1MzIgc2VxX251bV9tYXNrMjoxOworCQl1MzIgc2VxX251bV9tYXNrMToxOworCQl1MzIgc2VxX251bV9tYXNrMDoxOworCQl1MzIgc2VxX251bTE6MTsKKwkJdTMyIHNlcV9udW0wOjE7CisJCXUzMiBzcGk6MTsKKwkJdTMyIG91dGVyX3NpemU6NTsKKwkJdTMyIGlubmVyX3NpemU6NTsKKwkJdTMyIGtleV9zaXplOjQ7CisJCXUzMiBjbWRfc2l6ZTo0OworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIERJUl9PVVRCT1VORAkJCQkwCisjZGVmaW5lIERJUl9JTkJPVU5ECQkJCTEKKyNkZWZpbmUgU0FfT1BfR1JPVVBfQkFTSUMJCQkwCisjZGVmaW5lIFNBX09QQ09ERV9FTkNSWVBUCQkJMAorI2RlZmluZSBTQV9PUENPREVfREVDUllQVAkJCTAKKyNkZWZpbmUgU0FfT1BDT0RFX0hBU0gJCQkJMworI2RlZmluZSBTQV9DSVBIRVJfQUxHX0RFUwkJCTAKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR18zREVTCQkJMQorI2RlZmluZSBTQV9DSVBIRVJfQUxHX0FSQzQJCQkyCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfQUVTCQkJMworI2RlZmluZSBTQV9DSVBIRVJfQUxHX0tBU1VNSQkJCTQKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19OVUxMCQkJMTUKKworI2RlZmluZSBTQV9IQVNIX0FMR19NRDUJCQkJMAorI2RlZmluZSBTQV9IQVNIX0FMR19TSEExCQkJMQorI2RlZmluZSBTQV9IQVNIX0FMR19OVUxMCQkJMTUKKyNkZWZpbmUgU0FfSEFTSF9BTEdfU0hBMV9ESUdFU1RfU0laRQkJMjAKKworI2RlZmluZSBTQV9MT0FEX0hBU0hfRlJPTV9TQQkJCTAKKyNkZWZpbmUgU0FfTE9BRF9IQVNIX0ZST01fU1RBVEUJCQkyCisjZGVmaW5lIFNBX05PVF9MT0FEX0hBU0gJCQkzCisjZGVmaW5lIFNBX0xPQURfSVZfRlJPTV9TQQkJCTAKKyNkZWZpbmUgU0FfTE9BRF9JVl9GUk9NX0lOUFVUCQkJMQorI2RlZmluZSBTQV9MT0FEX0lWX0ZST01fU1RBVEUJCQkyCisjZGVmaW5lIFNBX0xPQURfSVZfR0VOX0lWCQkJMworCisjZGVmaW5lIFNBX1BBRF9UWVBFX0NPTlNUQU5UCQkJMgorI2RlZmluZSBTQV9QQURfVFlQRV9aRVJPCQkJMworI2RlZmluZSBTQV9QQURfVFlQRV9UTFMJCQkJNQorI2RlZmluZSBTQV9QQURfVFlQRV9EVExTCQkJNQorI2RlZmluZSBTQV9OT1RfU0FWRV9IQVNICQkJMAorI2RlZmluZSBTQV9TQVZFX0hBU0gJCQkJMQorI2RlZmluZSBTQV9OT1RfU0FWRV9JVgkJCQkwCisjZGVmaW5lIFNBX1NBVkVfSVYJCQkJMQorI2RlZmluZSBTQV9IRUFERVJfUFJPQwkJCQkxCisjZGVmaW5lIFNBX05PX0hFQURFUl9QUk9DCQkJMAorCit1bmlvbiBzYV9jb21tYW5kXzAgeworCXN0cnVjdCB7CisJCXUzMiBzY2F0dGVyOjE7CisJCXUzMiBnYXRoZXI6MTsKKwkJdTMyIHNhdmVfaGFzaF9zdGF0ZToxOworCQl1MzIgc2F2ZV9pdjoxOworCQl1MzIgbG9hZF9oYXNoX3N0YXRlOjI7CisJCXUzMiBsb2FkX2l2OjI7CisJCXUzMiBkaWdlc3RfbGVuOjQ7CisJCXUzMiBoZHJfcHJvYzoxOworCQl1MzIgZXh0ZW5kX3BhZDoxOworCQl1MzIgc3RyZWFtX2NpcGhlcl9wYWQ6MTsKKwkJdTMyIHJzdjoxOworCQl1MzIgaGFzaF9hbGc6NDsKKwkJdTMyIGNpcGhlcl9hbGc6NDsKKwkJdTMyIHBhZF90eXBlOjI7CisJCXUzMiBvcF9ncm91cDoyOworCQl1MzIgZGlyOjE7CisJCXUzMiBvcGNvZGU6MzsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE9fTU9ERV9FQ0IJCQkJMAorI2RlZmluZSBDUllQVE9fTU9ERV9DQkMJCQkJMQorCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFX05PX0ZCCQkwCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzY0QklUX09GQgkJMAorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV84QklUX0NGQgkJMQorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV8xQklUX0NGQgkJMgorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV8xMjhCSVRfQ0ZCCQkzCisKKyNkZWZpbmUgU0FfQUVTX0tFWV9MRU5fMTI4CQkJMgorI2RlZmluZSBTQV9BRVNfS0VZX0xFTl8xOTIJCQkzCisjZGVmaW5lIFNBX0FFU19LRVlfTEVOXzI1NgkJCTQKKworI2RlZmluZSBTQV9SRVYyCQkJCQkxCisvKioKKyAqIFRoZSBmb2xsb3cgZGVmaW5lcyBiaXRzIHNhX2NvbW1hbmRfMQorICogSW4gQmFzaWMgaGFzaCBtb2RlICB0aGlzIGJpdCBkZWZpbmUgc2ltcGxlIGhhc2ggb3IgaG1hYy4KKyAqIEluIElQc2VjIG1vZGUsIHRoaXMgYml0IGRlZmluZSBtdXRpbmcgY29udHJvbC4KKyAqLworI2RlZmluZSBTQV9IQVNIX01PREVfSEFTSAkJCTAKKyNkZWZpbmUgU0FfSEFTSF9NT0RFX0hNQUMJCQkxCisjZGVmaW5lIFNBX01DX0VOQUJMRQkJCQkwCisjZGVmaW5lIFNBX01DX0RJU0FCTEUJCQkJMQorI2RlZmluZSBTQV9OT1RfQ09QWV9IRFIJCQkJMAorI2RlZmluZSBTQV9DT1BZX0hEUgkJCQkxCisjZGVmaW5lIFNBX05PVF9DT1BZX1BBRAkJCQkwCisjZGVmaW5lIFNBX0NPUFlfUEFECQkJCTEKKyNkZWZpbmUgU0FfTk9UX0NPUFlfUEFZTE9BRAkJCTAKKyNkZWZpbmUgU0FfQ09QWV9QQVlMT0FECQkJCTEKKyNkZWZpbmUgU0FfRVhURU5ERURfU05fT0ZGCQkJMAorI2RlZmluZSBTQV9FWFRFTkRFRF9TTl9PTgkJCTEKKyNkZWZpbmUgU0FfU0VRX01BU0tfT0ZGCQkJCTAKKyNkZWZpbmUgU0FfU0VRX01BU0tfT04JCQkJMQorCit1bmlvbiBzYV9jb21tYW5kXzEgeworCXN0cnVjdCB7CisJCXUzMiBjcnlwdG9fbW9kZTMxOjE7CisJCXUzMiBzYXZlX2FyYzRfc3RhdGU6MTsKKwkJdTMyIGFyYzRfc3RhdGVmdWw6MTsKKwkJdTMyIGtleV9sZW46NTsKKwkJdTMyIGhhc2hfY3J5cHRvX29mZnNldDo4OworCQl1MzIgc2FfcmV2OjI7CisJCXUzMiBieXRlX29mZnNldDoxOworCQl1MzIgaG1hY19tdXRpbmc6MTsKKwkJdTMyIGZlZWRiYWNrX21vZGU6MjsKKwkJdTMyIGNyeXB0b19tb2RlOV84OjI7CisJCXUzMiBleHRlbmRlZF9zZXFfbnVtOjE7CisJCXUzMiBzZXFfbnVtX21hc2s6MTsKKwkJdTMyIG11dGFibGVfYml0X3Byb2M6MTsKKwkJdTMyIGlwX3ZlcnNpb246MTsKKwkJdTMyIGNvcHlfcGFkOjE7CisJCXUzMiBjb3B5X3BheWxvYWQ6MTsKKwkJdTMyIGNvcHlfaGRyOjE7CisJCXUzMiByc3YxOjE7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkeW5hbWljX3NhX2N0bCB7CisJdTMyIHNhX2NvbnRlbnRzOworCXVuaW9uIHNhX2NvbW1hbmRfMCBzYV9jb21tYW5kXzA7CisJdW5pb24gc2FfY29tbWFuZF8xIHNhX2NvbW1hbmRfMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogU3RhdGUgUmVjb3JkIGZvciBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpCisgKi8KK3N0cnVjdCAgc2Ffc3RhdGVfcmVjb3JkIHsKKwl1MzIgc2F2ZV9pdls0XTsKKwl1MzIgc2F2ZV9oYXNoX2J5dGVfY250WzJdOworCXUzMiBzYXZlX2RpZ2VzdFsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEFFUzEyOAorICoKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfYWVzMTI4IHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwJY3RybDsKKwl1MzIga2V5WzRdOworCXUzMiBpdls0XTsgLyogZm9yIENCQywgT0ZDLCBhbmQgQ0ZCIG1vZGUgKi8KKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgU0FfQUVTMTI4X0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9hZXMxMjgpLzQpCisjZGVmaW5lIFNBX0FFUzEyOF9DT05URU5UUwkweDNlMDAwMDQyCisKKy8qCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBBRVMxOTIKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfYWVzMTkyIHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgY3RybDsKKwl1MzIga2V5WzZdOworCXUzMiBpdls0XTsgLyogZm9yIENCQywgT0ZDLCBhbmQgQ0ZCIG1vZGUgKi8KKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgU0FfQUVTMTkyX0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9hZXMxOTIpLzQpCisjZGVmaW5lIFNBX0FFUzE5Ml9DT05URU5UUwkweDNlMDAwMDYyCisKKy8qKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgQUVTMjU2CisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2FlczI1NiB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsIGN0cmw7CisJdTMyIGtleVs4XTsKKwl1MzIgaXZbNF07IC8qIGZvciBDQkMsIE9GQywgYW5kIENGQiBtb2RlICovCisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBX0FFUzI1Nl9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfYWVzMjU2KS80KQorI2RlZmluZSBTQV9BRVMyNTZfQ09OVEVOVFMJMHgzZTAwMDA4MgorI2RlZmluZSBTQV9BRVNfQ09OVEVOVFMJCTB4M2UwMDAwMDIKKworLyoqCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBIQVNIMTYwOiBITUFDLVNIQTEKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsIGN0cmw7CisJdTMyIGlubmVyX2RpZ2VzdFs1XTsKKwl1MzIgb3V0ZXJfZGlnZXN0WzVdOworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgU0FfSEFTSDE2MF9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCkvNCkKKyNkZWZpbmUgU0FfSEFTSDE2MF9DT05URU5UUyAgICAgMHgyMDAwYTUwMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGNhL2RjYS1zeXNmcy5jIGIvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKaW5kZXggYmI1MzhiOS4uZWU5MTZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKQEAgLTEsMyArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rpby9kaW8uYyBiL2RyaXZlcnMvZGlvL2Rpby5jCmluZGV4IDEwYzNjNDkuLjU1ZGQ4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGlvL2Rpby5jCisrKyBiL2RyaXZlcnMvZGlvL2Rpby5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIERJTyBidXMgKi8gCiAJSU5JVF9MSVNUX0hFQUQoJmRpb19idXMuZGV2aWNlcyk7Ci0Jc3RyY3B5KGRpb19idXMuZGV2LmJ1c19pZCwgImRpbyIpOworCWRldl9zZXRfbmFtZSgmZGlvX2J1cy5kZXYsICJkaW8iKTsKIAllcnJvciA9IGRldmljZV9yZWdpc3RlcigmZGlvX2J1cy5kZXYpOwogCWlmIChlcnJvcikgewogCQlwcl9lcnIoIkRJTzogRXJyb3IgcmVnaXN0ZXJpbmcgZGlvX2J1c1xuIik7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJZGV2LT5zY29kZSA9IHNjb2RlOwogCQlkZXYtPnJlc291cmNlLnN0YXJ0ID0gcGE7CiAJCWRldi0+cmVzb3VyY2UuZW5kID0gcGEgKyBESU9fU0laRShzY29kZSwgdmEpOwotCQlzcHJpbnRmKGRldi0+ZGV2LmJ1c19pZCwiJTAyeCIsIHNjb2RlKTsKKwkJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwMngiLCBzY29kZSk7CiAKICAgICAgICAgICAgICAgICAvKiByZWFkIHRoZSBJRCBieXRlKHMpIGFuZCBlbmNvZGUgaWYgbmVjZXNzYXJ5LiAqLwogCQlwcmlkID0gRElPX0lEKHZhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCBhOTdjMDdlLi4yMGFkM2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogCWRtYV93cml0ZWwoZHcsIENGRywgRFdfQ0ZHX0RNQV9FTik7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogRGVzaWduV2FyZSBETUEgQ29udHJvbGxlciwgJWQgY2hhbm5lbHNcbiIsCi0JCQlwZGV2LT5kZXYuYnVzX2lkLCBkdy0+ZG1hLmNoYW5jbnQpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIGR3LT5kbWEuY2hhbmNudCk7CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZkdy0+ZG1hKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCmluZGV4IDI0ZjNjYTguLmNiMGY2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEOwogCW1jaS0+bW9kX25hbWUgPSAiY2VsbF9lZGFjIjsKIAltY2ktPmN0bF9uYW1lID0gIk1JQyI7Ci0JbWNpLT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJbWNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCW1jaS0+ZWRhY19jaGVjayA9IGNlbGxfZWRhY19jaGVjazsKIAljZWxsX2VkYWNfaW5pdF9jc3Jvd3MobWNpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IDg1M2VmMzcuLjQ2MzdhNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXBjaS0+ZGV2ID0gJm9wLT5kZXY7CiAJcGNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKIAlwY2ktPmN0bF9uYW1lID0gcGRhdGEtPm5hbWU7Ci0JcGNpLT5kZXZfbmFtZSA9IG9wLT5kZXYuYnVzX2lkOworCXBjaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmb3AtPmRldik7CiAKIAlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKIAkJcGNpLT5lZGFjX2NoZWNrID0gbXBjODV4eF9wY2lfY2hlY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKaW5kZXggMDgzY2U4ZC4uNTEzMWFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY2kpOwogCXBjaS0+ZGV2ID0gJnBkZXYtPmRldjsKLQlwY2ktPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwlwY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJcGNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKIAlwY2ktPmN0bF9uYW1lID0gcGRhdGEtPm5hbWU7CiAKQEAgLTI5NCw3ICsyOTQsNyBAQAogCXBkYXRhLT5pcnEgPSBOT19JUlE7CiAJZWRhY19kZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZWRhY19kZXYpOwotCWVkYWNfZGV2LT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJZWRhY19kZXYtPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpIHsKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXBkYXRhLT5pcnEgPSBOT19JUlE7CiAJZWRhY19kZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZWRhY19kZXYpOwotCWVkYWNfZGV2LT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJZWRhY19kZXYtPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpIHsKQEAgLTcxMyw3ICs3MTMsNyBAQAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jaSk7CiAJcGRhdGEtPm5hbWUgPSAibXY2NHg2MF9tY19lcnIiOwogCXBkYXRhLT5pcnEgPSBOT19JUlE7Ci0JbWNpLT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJbWNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXBkYXRhLT5lZGFjX2lkeCA9IGVkYWNfbWNfaWR4Kys7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS9LY29uZmlnIGIvZHJpdmVycy9laXNhL0tjb25maWcKaW5kZXggYzA2NDY1NzYuLjI3MDUyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWlzYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWlzYS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogY29uZmlnIEVJU0FfVkxCX1BSSU1JTkcKIAlib29sICJWZXNhIExvY2FsIEJ1cyBwcmltaW5nIgotCWRlcGVuZHMgb24gWDg2X1BDICYmIEVJU0EKKwlkZXBlbmRzIG9uIFg4NiAmJiBFSVNBCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgQWN0aXZhdGUgdGhpcyBvcHRpb24gaWYgeW91ciBzeXN0ZW0gY29udGFpbnMgYSBWZXNhIExvY2FsCkBAIC0yNCwxMSArMjQsMTEgQEAKIAkgIFdoZW4gaW4gZG91YnQsIHNheSBZLgogCiAjIFVzaW5nIEVJU0FfVklSVFVBTF9ST09UIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIEFscGhhIG9yCi0jIGFuIFg4Nl9QQyBtYXkgbGVhZCB0byBjcmFzaGVzLi4uCisjIGFuIFg4NiBtYXkgbGVhZCB0byBjcmFzaGVzLi4uCiAKIGNvbmZpZyBFSVNBX1ZJUlRVQUxfUk9PVAogCWJvb2wgIkVJU0EgdmlydHVhbCByb290IGRldmljZSIKLQlkZXBlbmRzIG9uIEVJU0EgJiYgKEFMUEhBIHx8IFg4Nl9QQykKKwlkZXBlbmRzIG9uIEVJU0EgJiYgKEFMUEhBIHx8IFg4NikKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBBY3RpdmF0ZSB0aGlzIG9wdGlvbiBpZiB5b3VyIHN5c3RlbSBvbmx5IGhhdmUgRUlTQSBidXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKaW5kZXggYzk1MGJmOC4uNjY5NThiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKKysrIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWVkZXYtPmRldi5idXMgPSAmZWlzYV9idXNfdHlwZTsKIAllZGV2LT5kZXYuZG1hX21hc2sgPSAmZWRldi0+ZG1hX21hc2s7CiAJZWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZWRldi0+ZG1hX21hc2s7Ci0Jc3ByaW50ZiAoZWRldi0+ZGV2LmJ1c19pZCwgIiUwMlg6JTAyWCIsIHJvb3QtPmJ1c19uciwgc2xvdCk7CisJZGV2X3NldF9uYW1lKCZlZGV2LT5kZXYsICIlMDJYOiUwMlgiLCByb290LT5idXNfbnIsIHNsb3QpOwogCiAJZm9yIChpID0gMDsgaSA8IEVJU0FfTUFYX1JFU09VUkNFUzsgaSsrKSB7CiAjaWZkZWYgQ09ORklHX0VJU0FfTkFNRVMKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKIAogICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogUHJvYmluZyBidXMgJWQgYXQgJXNcbiIsCi0JCXJvb3QtPmJ1c19uciwgcm9vdC0+ZGV2LT5idXNfaWQpOworCQlyb290LT5idXNfbnIsIGRldl9uYW1lKHJvb3QtPmRldikpOwogCiAJLyogRmlyc3QgdHJ5IHRvIGdldCBob2xkIG9mIHNsb3QgMC4gSWYgdGhlcmUgaXMgbm8gZGV2aWNlCiAJICogaGVyZSwgc2ltcGx5IGZhaWwsIHVubGVzcyByb290LT5mb3JjZV9wcm9iZSBpcyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCmluZGV4IGE1ZGQ3YTYuLjhiOGM4YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCkBAIC02Myw4ICs2Myw3IEBACiAjZGVmaW5lIEJJQl9DTUMJCQkoKDEpIDw8IDMwKQogI2RlZmluZSBCSUJfSU1DCQkJKCgxKSA8PCAzMSkKIAotc3RhdGljIHUzMiAqCi1nZW5lcmF0ZV9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzaXplX3QgKmNvbmZpZ19yb21fbGVuZ3RoKQorc3RhdGljIHUzMiAqZ2VuZXJhdGVfY29uZmlnX3JvbShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc2l6ZV90ICpjb25maWdfcm9tX2xlbmd0aCkKIHsKIAlzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYzsKIAlzdGF0aWMgdTMyIGNvbmZpZ19yb21bMjU2XTsKQEAgLTEyOCw4ICsxMjcsNyBAQAogCXJldHVybiBjb25maWdfcm9tOwogfQogCi1zdGF0aWMgdm9pZAotdXBkYXRlX2NvbmZpZ19yb21zKHZvaWQpCitzdGF0aWMgdm9pZCB1cGRhdGVfY29uZmlnX3JvbXModm9pZCkKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZDsKIAl1MzIgKmNvbmZpZ19yb207CkBAIC0xNDEsOCArMTM5LDcgQEAKIAl9CiB9CiAKLWludAotZndfY29yZV9hZGRfZGVzY3JpcHRvcihzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYykKK2ludCBmd19jb3JlX2FkZF9kZXNjcmlwdG9yKHN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjKQogewogCXNpemVfdCBpOwogCkBAIC0xNzEsOCArMTY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYykKK3ZvaWQgZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYykKIHsKIAltdXRleF9sb2NrKCZjYXJkX211dGV4KTsKIApAQCAtMTg1LDEyICsxODEsMzAgQEAKIAltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOwogfQogCitzdGF0aWMgaW50IHNldF9icm9hZGNhc3RfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbChmd19kZXZpY2UoZGV2KSwgKGxvbmcpZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFsbG9jYXRlX2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbikKK3sKKwlpbnQgY2hhbm5lbCwgYmFuZHdpZHRoID0gMDsKKworCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgZ2VuZXJhdGlvbiwgMVVMTCA8PCAzMSwKKwkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgdHJ1ZSk7CisJaWYgKGNoYW5uZWwgPT0gMzEpIHsKKwkJY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGNhcmQtPmRldmljZSwgKHZvaWQgKikobG9uZylnZW5lcmF0aW9uLAorCQkJCSAgICAgIHNldF9icm9hZGNhc3RfY2hhbm5lbCk7CisJfQorfQorCiBzdGF0aWMgY29uc3QgY2hhciBnYXBfY291bnRfdGFibGVbXSA9IHsKIAk2MywgNSwgNywgOCwgMTAsIDEzLCAxNiwgMTgsIDIxLCAyNCwgMjYsIDI5LCAzMiwgMzUsIDM3LCA0MAogfTsKIAotdm9pZAotZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSkKK3ZvaWQgZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlpbnQgc2NoZWR1bGVkOwogCkBAIC0yMDAsMzcgKzIxNCwzOCBAQAogCQlmd19jYXJkX3B1dChjYXJkKTsKIH0KIAotc3RhdGljIHZvaWQKLWZ3X2NhcmRfYm1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBmd19jYXJkX2JtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19jYXJkLCB3b3JrLndvcmspOwogCXN0cnVjdCBmd19kZXZpY2UgKnJvb3RfZGV2aWNlOwotCXN0cnVjdCBmd19ub2RlICpyb290X25vZGUsICpsb2NhbF9ub2RlOworCXN0cnVjdCBmd19ub2RlICpyb290X25vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZSwgcmNvZGU7CisJaW50IHJvb3RfaWQsIG5ld19yb290X2lkLCBpcm1faWQsIGxvY2FsX2lkOworCWludCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlLCByY29kZTsKIAlib29sIGRvX3Jlc2V0ID0gZmFsc2U7CiAJYm9vbCByb290X2RldmljZV9pc19ydW5uaW5nOwogCWJvb2wgcm9vdF9kZXZpY2VfaXNfY21jOwogCV9fYmUzMiBsb2NrX2RhdGFbMl07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCWxvY2FsX25vZGUgPSBjYXJkLT5sb2NhbF9ub2RlOwotCXJvb3Rfbm9kZSAgPSBjYXJkLT5yb290X25vZGU7CiAKLQlpZiAobG9jYWxfbm9kZSA9PSBOVUxMKSB7CisJaWYgKGNhcmQtPmxvY2FsX25vZGUgPT0gTlVMTCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3B1dF9jYXJkOwogCX0KLQlmd19ub2RlX2dldChsb2NhbF9ub2RlKTsKLQlmd19ub2RlX2dldChyb290X25vZGUpOwogCiAJZ2VuZXJhdGlvbiA9IGNhcmQtPmdlbmVyYXRpb247CisJcm9vdF9ub2RlID0gY2FyZC0+cm9vdF9ub2RlOworCWZ3X25vZGVfZ2V0KHJvb3Rfbm9kZSk7CiAJcm9vdF9kZXZpY2UgPSByb290X25vZGUtPmRhdGE7CiAJcm9vdF9kZXZpY2VfaXNfcnVubmluZyA9IHJvb3RfZGV2aWNlICYmCiAJCQlhdG9taWNfcmVhZCgmcm9vdF9kZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfUlVOTklORzsKIAlyb290X2RldmljZV9pc19jbWMgPSByb290X2RldmljZSAmJiByb290X2RldmljZS0+Y21jOwotCXJvb3RfaWQgPSByb290X25vZGUtPm5vZGVfaWQ7Ci0JZ3JhY2UgPSB0aW1lX2FmdGVyKGppZmZpZXMsIGNhcmQtPnJlc2V0X2ppZmZpZXMgKyBESVZfUk9VTkRfVVAoSFosIDEwKSk7CisJcm9vdF9pZCAgPSByb290X25vZGUtPm5vZGVfaWQ7CisJaXJtX2lkICAgPSBjYXJkLT5pcm1fbm9kZS0+bm9kZV9pZDsKKwlsb2NhbF9pZCA9IGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQ7CisKKwlncmFjZSA9IHRpbWVfYWZ0ZXIoamlmZmllcywgY2FyZC0+cmVzZXRfamlmZmllcyArIERJVl9ST1VORF9VUChIWiwgOCkpOwogCiAJaWYgKGlzX25leHRfZ2VuZXJhdGlvbihnZW5lcmF0aW9uLCBjYXJkLT5ibV9nZW5lcmF0aW9uKSB8fAogCSAgICAoY2FyZC0+Ym1fZ2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uICYmIGdyYWNlKSkgewpAQCAtMjQ2LDE2ICsyNjEsMTUgQEAKIAkJICogbmV4dCBnZW5lcmF0aW9uLgogCQkgKi8KIAotCQlpcm1faWQgPSBjYXJkLT5pcm1fbm9kZS0+bm9kZV9pZDsKIAkJaWYgKCFjYXJkLT5pcm1fbm9kZS0+bGlua19vbikgewotCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9ub2RlLT5ub2RlX2lkOworCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAkJCWZ3X25vdGlmeSgiSVJNIGhhcyBsaW5rIG9mZiwgbWFraW5nIGxvY2FsIG5vZGUgKCUwMngpIHJvb3QuXG4iLAogCQkJCSAgbmV3X3Jvb3RfaWQpOwogCQkJZ290byBwaWNrX21lOwogCQl9CiAKIAkJbG9ja19kYXRhWzBdID0gY3B1X3RvX2JlMzIoMHgzZik7Ci0JCWxvY2tfZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX25vZGUtPm5vZGVfaWQpOworCQlsb2NrX2RhdGFbMV0gPSBjcHVfdG9fYmUzMihsb2NhbF9pZCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yNjksOSArMjgzLDE0IEBACiAJCQlnb3RvIG91dDsKIAogCQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYKLQkJICAgIGxvY2tfZGF0YVswXSAhPSBjcHVfdG9fYmUzMigweDNmKSkKLQkJCS8qIFNvbWVib2R5IGVsc2UgaXMgQk0sIGxldCB0aGVtIGRvIHRoZSB3b3JrLiAqLworCQkgICAgbG9ja19kYXRhWzBdICE9IGNwdV90b19iZTMyKDB4M2YpKSB7CisKKwkJCS8qIFNvbWVib2R5IGVsc2UgaXMgQk0uICBPbmx5IGFjdCBhcyBJUk0uICovCisJCQlpZiAobG9jYWxfaWQgPT0gaXJtX2lkKQorCQkJCWFsbG9jYXRlX2Jyb2FkY2FzdF9jaGFubmVsKGNhcmQsIGdlbmVyYXRpb24pOworCiAJCQlnb3RvIG91dDsKKwkJfQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI4MiwxOSArMzAxLDE4IEBACiAJCQkgKiBkbyBhIGJ1cyByZXNldCBhbmQgcGljayB0aGUgbG9jYWwgbm9kZSBhcwogCQkJICogcm9vdCwgYW5kIHRodXMsIElSTS4KIAkJCSAqLwotCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9ub2RlLT5ub2RlX2lkOworCQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAkJCWZ3X25vdGlmeSgiQk0gbG9jayBmYWlsZWQsIG1ha2luZyBsb2NhbCBub2RlICglMDJ4KSByb290LlxuIiwKIAkJCQkgIG5ld19yb290X2lkKTsKIAkJCWdvdG8gcGlja19tZTsKIAkJfQogCX0gZWxzZSBpZiAoY2FyZC0+Ym1fZ2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKSB7CiAJCS8qCi0JCSAqIE9LLCB3ZSB3ZXJlbid0IEJNIGluIHRoZSBsYXN0IGdlbmVyYXRpb24sIGFuZCBpdCdzCi0JCSAqIGxlc3MgdGhhbiAxMDBtcyBzaW5jZSBsYXN0IGJ1cyByZXNldC4gUmVzY2hlZHVsZQotCQkgKiB0aGlzIHRhc2sgMTAwbXMgZnJvbSBub3cuCisJCSAqIFdlIHdlcmVuJ3QgQk0gaW4gdGhlIGxhc3QgZ2VuZXJhdGlvbiwgYW5kIHRoZSBsYXN0CisJCSAqIGJ1cyByZXNldCBpcyBsZXNzIHRoYW4gMTI1bXMgYWdvLiAgUmVzY2hlZHVsZSB0aGlzIGpvYi4KIAkJICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJZndfc2NoZWR1bGVfYm1fd29yayhjYXJkLCBESVZfUk9VTkRfVVAoSFosIDEwKSk7CisJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgRElWX1JPVU5EX1VQKEhaLCA4KSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzEwLDcgKzMyOCw3IEBACiAJCSAqIEVpdGhlciBsaW5rX29uIGlzIGZhbHNlLCBvciB3ZSBmYWlsZWQgdG8gcmVhZCB0aGUKIAkJICogY29uZmlnIHJvbS4gIEluIGVpdGhlciBjYXNlLCBwaWNrIGFub3RoZXIgcm9vdC4KIAkJICovCi0JCW5ld19yb290X2lkID0gbG9jYWxfbm9kZS0+bm9kZV9pZDsKKwkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAl9IGVsc2UgaWYgKCFyb290X2RldmljZV9pc19ydW5uaW5nKSB7CiAJCS8qCiAJCSAqIElmIHdlIGhhdmVuJ3QgcHJvYmVkIHRoaXMgZGV2aWNlIHlldCwgYmFpbCBvdXQgbm93CkBAIC0zMzIsNyArMzUwLDcgQEAKIAkJICogc3VjY2Vzc2Z1bGx5IHJlYWQgdGhlIGNvbmZpZyByb20sIGJ1dCBpdCdzIG5vdAogCQkgKiBjeWNsZSBtYXN0ZXIgY2FwYWJsZS4KIAkJICovCi0JCW5ld19yb290X2lkID0gbG9jYWxfbm9kZS0+bm9kZV9pZDsKKwkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9pZDsKIAl9CiAKICBwaWNrX21lOgpAQCAtMzYzLDI1ICszODEsMjggQEAKIAkJCSAgY2FyZC0+aW5kZXgsIG5ld19yb290X2lkLCBnYXBfY291bnQpOwogCQlmd19zZW5kX3BoeV9jb25maWcoY2FyZCwgbmV3X3Jvb3RfaWQsIGdlbmVyYXRpb24sIGdhcF9jb3VudCk7CiAJCWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KGNhcmQsIDEpOworCQkvKiBXaWxsIGFsbG9jYXRlIGJyb2FkY2FzdCBjaGFubmVsIGFmdGVyIHRoZSByZXNldC4gKi8KKwl9IGVsc2UgeworCQlpZiAobG9jYWxfaWQgPT0gaXJtX2lkKQorCQkJYWxsb2NhdGVfYnJvYWRjYXN0X2NoYW5uZWwoY2FyZCwgZ2VuZXJhdGlvbik7CiAJfQorCiAgb3V0OgogCWZ3X25vZGVfcHV0KHJvb3Rfbm9kZSk7Ci0JZndfbm9kZV9wdXQobG9jYWxfbm9kZSk7CiAgb3V0X3B1dF9jYXJkOgogCWZ3X2NhcmRfcHV0KGNhcmQpOwogfQogCi1zdGF0aWMgdm9pZAotZmx1c2hfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZmx1c2hfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gKHN0cnVjdCBmd19jYXJkICopZGF0YTsKIAogCWZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhjYXJkKTsKIH0KIAotdm9pZAotZndfY2FyZF9pbml0aWFsaXplKHN0cnVjdCBmd19jYXJkICpjYXJkLCBjb25zdCBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgKmRyaXZlciwKLQkJICAgc3RydWN0IGRldmljZSAqZGV2aWNlKQordm9pZCBmd19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQljb25zdCBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgKmRyaXZlciwKKwkJCXN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdGF0aWMgYXRvbWljX3QgaW5kZXggPSBBVE9NSUNfSU5JVCgtMSk7CiAKQEAgLTQwNiwxMyArNDI3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NhcmRfaW5pdGlhbGl6ZSk7CiAKLWludAotZndfY2FyZF9hZGQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JICAgIHUzMiBtYXhfcmVjZWl2ZSwgdTMyIGxpbmtfc3BlZWQsIHU2NCBndWlkKQoraW50IGZ3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQl1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCkKIHsKIAl1MzIgKmNvbmZpZ19yb207CiAJc2l6ZV90IGxlbmd0aDsKLQlpbnQgZXJyOworCWludCByZXQ7CiAKIAljYXJkLT5tYXhfcmVjZWl2ZSA9IG1heF9yZWNlaXZlOwogCWNhcmQtPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOwpAQCAtNDIzLDEzICs0NDMsMTQgQEAKIAlsaXN0X2FkZF90YWlsKCZjYXJkLT5saW5rLCAmY2FyZF9saXN0KTsKIAltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOwogCi0JZXJyID0gY2FyZC0+ZHJpdmVyLT5lbmFibGUoY2FyZCwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKLQlpZiAoZXJyIDwgMCkgeworCXJldCA9IGNhcmQtPmRyaXZlci0+ZW5hYmxlKGNhcmQsIGNvbmZpZ19yb20sIGxlbmd0aCk7CisJaWYgKHJldCA8IDApIHsKIAkJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CiAJCWxpc3RfZGVsKCZjYXJkLT5saW5rKTsKIAkJbXV0ZXhfdW5sb2NrKCZjYXJkX211dGV4KTsKIAl9Ci0JcmV0dXJuIGVycjsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NhcmRfYWRkKTsKIApAQCAtNDQyLDIzICs0NjMsMjAgQEAKICAqIGR1bW15IGRyaXZlciBqdXN0IGZhaWxzIGFsbCBJTy4KICAqLwogCi1zdGF0aWMgaW50Ci1kdW1teV9lbmFibGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgZHVtbXlfZW5hYmxlKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCiB7CiAJQlVHKCk7CiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50Ci1kdW1teV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHJlc3MsCi0JCSAgICAgaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cykKK3N0YXRpYyBpbnQgZHVtbXlfdXBkYXRlX3BoeV9yZWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyZXNzLAorCQkJCWludCBjbGVhcl9iaXRzLCBpbnQgc2V0X2JpdHMpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQKLWR1bW15X3NldF9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgICAgIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgZHVtbXlfc2V0X2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQogewogCS8qCiAJICogV2UgdGFrZSB0aGUgY2FyZCBvdXQgb2YgY2FyZF9saXN0IGJlZm9yZSBzZXR0aW5nIHRoZSBkdW1teQpAQCAtNDY4LDI3ICs0ODYsMjMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkCi1kdW1teV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyB2b2lkIGR1bW15X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQogewogCXBhY2tldC0+Y2FsbGJhY2socGFja2V0LCBjYXJkLCAtRU5PREVWKTsKIH0KIAotc3RhdGljIHZvaWQKLWR1bW15X3NlbmRfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyB2b2lkIGR1bW15X3NlbmRfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKIAlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgY2FyZCwgLUVOT0RFVik7CiB9CiAKLXN0YXRpYyBpbnQKLWR1bW15X2NhbmNlbF9wYWNrZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyBpbnQgZHVtbXlfY2FuY2VsX3BhY2tldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQogewogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50Ci1kdW1teV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgICAgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyBpbnQgZHVtbXlfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCSBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CkBAIC01MDMsMTYgKzUxNywxNCBAQAogCS5lbmFibGVfcGh5c19kbWEgPSBkdW1teV9lbmFibGVfcGh5c19kbWEsCiB9OwogCi12b2lkCi1md19jYXJkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit2b2lkIGZ3X2NhcmRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZndfY2FyZCwga3JlZik7CiAKIAljb21wbGV0ZSgmY2FyZC0+ZG9uZSk7CiB9CiAKLXZvaWQKLWZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit2b2lkIGZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCiB7CiAJY2FyZC0+ZHJpdmVyLT51cGRhdGVfcGh5X3JlZyhjYXJkLCA0LAogCQkJCSAgICAgUEhZX0xJTktfQUNUSVZFIHwgUEhZX0NPTlRFTkRFUiwgMCk7CkBAIC01MzYsOCArNTQ4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfY29yZV9yZW1vdmVfY2FyZCk7CiAKLWludAotZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCkKK2ludCBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHNob3J0X3Jlc2V0KQogewogCWludCByZWcgPSBzaG9ydF9yZXNldCA/IDUgOiAxOwogCWludCBiaXQgPSBzaG9ydF9yZXNldCA/IFBIWV9CVVNfU0hPUlRfUkVTRVQgOiBQSFlfQlVTX1JFU0VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwppbmRleCBlZDAzMjM0Li43ZWI2NTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwpAQCAtMTgsNjcgKzE4LDQwIEBACiAgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKwogI2luY2x1ZGUgImZ3LWRldmljZS5oIgotCi1zdHJ1Y3QgY2xpZW50Owotc3RydWN0IGNsaWVudF9yZXNvdXJjZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnIpOwotCXUzMiBoYW5kbGU7Ci19OwotCi0vKgotICogZGVxdWV1ZV9ldmVudCgpIGp1c3Qga2ZyZWUoKSdzIHRoZSBldmVudCwgc28gdGhlIGV2ZW50IGhhcyB0byBiZQotICogdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuCi0gKi8KLQotc3RydWN0IGV2ZW50IHsKLQlzdHJ1Y3QgeyB2b2lkICpkYXRhOyBzaXplX3Qgc2l6ZTsgfSB2WzJdOwotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKLX07Ci0KLXN0cnVjdCBidXNfcmVzZXQgewotCXN0cnVjdCBldmVudCBldmVudDsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgcmVzZXQ7Ci19OwotCi1zdHJ1Y3QgcmVzcG9uc2UgewotCXN0cnVjdCBldmVudCBldmVudDsKLQlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0Jc3RydWN0IGNsaWVudCAqY2xpZW50OwotCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2U7Ci19OwotCi1zdHJ1Y3QgaXNvX2ludGVycnVwdCB7Ci0Jc3RydWN0IGV2ZW50IGV2ZW50OwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgaW50ZXJydXB0OwotfTsKKyNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCiAKIHN0cnVjdCBjbGllbnQgewogCXUzMiB2ZXJzaW9uOwogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZTsKKwogCXNwaW5sb2NrX3QgbG9jazsKLQl1MzIgcmVzb3VyY2VfaGFuZGxlOwotCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3VyY2VfbGlzdDsKKwlib29sIGluX3NodXRkb3duOworCXN0cnVjdCBpZHIgcmVzb3VyY2VfaWRyOwogCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXU2NCBidXNfcmVzZXRfY2xvc3VyZTsKQEAgLTg5LDE2ICs2MiwxMTggQEAKIAl1bnNpZ25lZCBsb25nIHZtX3N0YXJ0OwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBrcmVmIGtyZWY7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICoKLXU2NF90b191cHRyKF9fdTY0IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGNsaWVudF9nZXQoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCWtyZWZfZ2V0KCZjbGllbnQtPmtyZWYpOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGNsaWVudCwga3JlZik7CisKKwlmd19kZXZpY2VfcHV0KGNsaWVudC0+ZGV2aWNlKTsKKwlrZnJlZShjbGllbnQpOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfcHV0KHN0cnVjdCBjbGllbnQgKmNsaWVudCkKK3sKKwlrcmVmX3B1dCgmY2xpZW50LT5rcmVmLCBjbGllbnRfcmVsZWFzZSk7Cit9CisKK3N0cnVjdCBjbGllbnRfcmVzb3VyY2U7Cit0eXBlZGVmIHZvaWQgKCpjbGllbnRfcmVzb3VyY2VfcmVsZWFzZV9mbl90KShzdHJ1Y3QgY2xpZW50ICosCisJCQkJCSAgICAgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqKTsKK3N0cnVjdCBjbGllbnRfcmVzb3VyY2UgeworCWNsaWVudF9yZXNvdXJjZV9yZWxlYXNlX2ZuX3QgcmVsZWFzZTsKKwlpbnQgaGFuZGxlOworfTsKKworc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSB7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIGhhbmRsZXI7CisJX191NjQgY2xvc3VyZTsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7Cit9OworCitzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOworfTsKKworc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CisJdm9pZCAqZGF0YTsKKwlzaXplX3QgbGVuZ3RoOworfTsKKworc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGZ3X2Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKwl1MzIgZGF0YVswXTsKK307CisKK3N0cnVjdCBpc29fcmVzb3VyY2UgeworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgcmVzb3VyY2U7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworCS8qIFNjaGVkdWxlIHdvcmsgYW5kIGFjY2VzcyB0b2RvIG9ubHkgd2l0aCBjbGllbnQtPmxvY2sgaGVsZC4gKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJZW51bSB7SVNPX1JFU19BTExPQywgSVNPX1JFU19SRUFMTE9DLCBJU09fUkVTX0RFQUxMT0MsCisJICAgICAgSVNPX1JFU19BTExPQ19PTkNFLCBJU09fUkVTX0RFQUxMT0NfT05DRSx9IHRvZG87CisJaW50IGdlbmVyYXRpb247CisJdTY0IGNoYW5uZWxzOworCXMzMiBiYW5kd2lkdGg7CisJc3RydWN0IGlzb19yZXNvdXJjZV9ldmVudCAqZV9hbGxvYywgKmVfZGVhbGxvYzsKK307CisKK3N0YXRpYyB2b2lkIHNjaGVkdWxlX2lzb19yZXNvdXJjZShzdHJ1Y3QgaXNvX3Jlc291cmNlICopOworc3RhdGljIHZvaWQgcmVsZWFzZV9pc29fcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqLCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICopOworCisvKgorICogZGVxdWV1ZV9ldmVudCgpIGp1c3Qga2ZyZWUoKSdzIHRoZSBldmVudCwgc28gdGhlIGV2ZW50IGhhcyB0byBiZQorICogdGhlIGZpcnN0IGZpZWxkIGluIGEgc3RydWN0IFhZWl9ldmVudC4KKyAqLworc3RydWN0IGV2ZW50IHsKKwlzdHJ1Y3QgeyB2b2lkICpkYXRhOyBzaXplX3Qgc2l6ZTsgfSB2WzJdOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKK3N0cnVjdCBidXNfcmVzZXRfZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgcmVzZXQ7Cit9OworCitzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG91dGJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlIHI7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgcmVzcG9uc2U7Cit9OworCitzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QgcmVxdWVzdDsKK307CisKK3N0cnVjdCBpc29faW50ZXJydXB0X2V2ZW50IHsKKwlzdHJ1Y3QgZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBpbnRlcnJ1cHQ7Cit9OworCitzdHJ1Y3QgaXNvX3Jlc291cmNlX2V2ZW50IHsKKwlzdHJ1Y3QgZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlIHJlc291cmNlOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqdTY0X3RvX3VwdHIoX191NjQgdmFsdWUpCiB7CiAJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXZhbHVlOwogfQogCi1zdGF0aWMgaW5saW5lIF9fdTY0Ci11cHRyX3RvX3U2NCh2b2lkIF9fdXNlciAqcHRyKQorc3RhdGljIGlubGluZSBfX3U2NCB1cHRyX3RvX3U2NCh2b2lkIF9fdXNlciAqcHRyKQogewogCXJldHVybiAoX191NjQpKHVuc2lnbmVkIGxvbmcpcHRyOwogfQpAQCAtMTA3LDcgKzE4Miw2IEBACiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGV2aWNlID0gZndfZGV2aWNlX2dldF9ieV9kZXZ0KGlub2RlLT5pX3JkZXYpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkKQEAgLTEyNSwxNiArMTk5LDE3IEBACiAJfQogCiAJY2xpZW50LT5kZXZpY2UgPSBkZXZpY2U7Ci0JSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+ZXZlbnRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+cmVzb3VyY2VfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNsaWVudC0+bG9jayk7CisJaWRyX2luaXQoJmNsaWVudC0+cmVzb3VyY2VfaWRyKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5ldmVudF9saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjbGllbnQtPndhaXQpOworCWtyZWZfaW5pdCgmY2xpZW50LT5rcmVmKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNsaWVudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZkZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmxpbmssICZkZXZpY2UtPmNsaWVudF9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTAsNjggKzIyNSw2OSBAQAogCWV2ZW50LT52WzFdLnNpemUgPSBzaXplMTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZldmVudC0+bGluaywgJmNsaWVudC0+ZXZlbnRfbGlzdCk7CisJaWYgKGNsaWVudC0+aW5fc2h1dGRvd24pCisJCWtmcmVlKGV2ZW50KTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5saW5rLCAmY2xpZW50LT5ldmVudF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2xpZW50LT53YWl0KTsKIH0KIAotc3RhdGljIGludAotZGVxdWV1ZV9ldmVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgZGVxdWV1ZV9ldmVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGV2ZW50ICpldmVudDsKIAlzaXplX3Qgc2l6ZSwgdG90YWw7Ci0JaW50IGksIHJldHZhbDsKKwlpbnQgaSwgcmV0OwogCi0JcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNsaWVudC0+d2FpdCwKLQkJCQkJICAhbGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSB8fAotCQkJCQkgIGZ3X2RldmljZV9pc19zaHV0ZG93bihjbGllbnQtPmRldmljZSkpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjbGllbnQtPndhaXQsCisJCQkhbGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSB8fAorCQkJZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlpZiAobGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSAmJgogCQkgICAgICAgZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0JZXZlbnQgPSBjb250YWluZXJfb2YoY2xpZW50LT5ldmVudF9saXN0Lm5leHQsIHN0cnVjdCBldmVudCwgbGluayk7CisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwlldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJmNsaWVudC0+ZXZlbnRfbGlzdCwgc3RydWN0IGV2ZW50LCBsaW5rKTsKIAlsaXN0X2RlbCgmZXZlbnQtPmxpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKIAogCXRvdGFsID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShldmVudC0+dikgJiYgdG90YWwgPCBjb3VudDsgaSsrKSB7CiAJCXNpemUgPSBtaW4oZXZlbnQtPnZbaV0uc2l6ZSwgY291bnQgLSB0b3RhbCk7CiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgdG90YWwsIGV2ZW50LT52W2ldLmRhdGEsIHNpemUpKSB7Ci0JCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXRvdGFsICs9IHNpemU7CiAJfQotCXJldHZhbCA9IHRvdGFsOworCXJldCA9IHRvdGFsOwogCiAgb3V0OgogCWtmcmVlKGV2ZW50KTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QKLWZ3X2RldmljZV9vcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBmd19kZXZpY2Vfb3BfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlyZXR1cm4gZGVxdWV1ZV9ldmVudChjbGllbnQsIGJ1ZmZlciwgY291bnQpOwogfQogCi0vKiBjYWxsZXIgbXVzdCBob2xkIGNhcmQtPmxvY2sgc28gdGhhdCBub2RlIHBvaW50ZXJzIGNhbiBiZSBkZXJlZmVyZW5jZWQgaGVyZSAqLwotc3RhdGljIHZvaWQKLWZpbGxfYnVzX3Jlc2V0X2V2ZW50KHN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCAqZXZlbnQsCi0JCSAgICAgc3RydWN0IGNsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgZmlsbF9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0ICpldmVudCwKKwkJCQkgc3RydWN0IGNsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CiAKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKwogCWV2ZW50LT5jbG9zdXJlCSAgICAgPSBjbGllbnQtPmJ1c19yZXNldF9jbG9zdXJlOwogCWV2ZW50LT50eXBlICAgICAgICAgID0gRldfQ0RFVl9FVkVOVF9CVVNfUkVTRVQ7CiAJZXZlbnQtPmdlbmVyYXRpb24gICAgPSBjbGllbnQtPmRldmljZS0+Z2VuZXJhdGlvbjsKQEAgLTIyMCwzOSArMjk2LDQ5IEBACiAJZXZlbnQtPmJtX25vZGVfaWQgICAgPSAwOyAvKiBGSVhNRTogV2UgZG9uJ3QgdHJhY2sgdGhlIEJNLiAqLwogCWV2ZW50LT5pcm1fbm9kZV9pZCAgID0gY2FyZC0+aXJtX25vZGUtPm5vZGVfaWQ7CiAJZXZlbnQtPnJvb3Rfbm9kZV9pZCAgPSBjYXJkLT5yb290X25vZGUtPm5vZGVfaWQ7CisKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZAotZm9yX2VhY2hfY2xpZW50KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKLQkJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY2xpZW50ICpjbGllbnQpKQorc3RhdGljIHZvaWQgZm9yX2VhY2hfY2xpZW50KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKKwkJCSAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjbGllbnQgKmNsaWVudCkpCiB7Ci0Jc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CiAJc3RydWN0IGNsaWVudCAqYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQorCW11dGV4X2xvY2soJmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmRldmljZS0+Y2xpZW50X2xpc3QsIGxpbmspCiAJCWNhbGxiYWNrKGMpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmZGV2aWNlLT5jbGllbnRfbGlzdF9tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xdWV1ZV9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGNsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzY2hlZHVsZV9yZWFsbG9jYXRpb25zKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYnVzX3Jlc2V0ICpidXNfcmVzZXQ7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqciA9IHA7CiAKLQlidXNfcmVzZXQgPSBremFsbG9jKHNpemVvZigqYnVzX3Jlc2V0KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1c19yZXNldCA9PSBOVUxMKSB7CisJaWYgKHItPnJlbGVhc2UgPT0gcmVsZWFzZV9pc29fcmVzb3VyY2UpCisJCXNjaGVkdWxlX2lzb19yZXNvdXJjZShjb250YWluZXJfb2YociwKKwkJCQkJc3RydWN0IGlzb19yZXNvdXJjZSwgcmVzb3VyY2UpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcXVldWVfYnVzX3Jlc2V0X2V2ZW50KHN0cnVjdCBjbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYnVzX3Jlc2V0X2V2ZW50ICplOworCisJZSA9IGt6YWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGUgPT0gTlVMTCkgewogCQlmd19ub3RpZnkoIk91dCBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGJ1cyByZXNldCBldmVudFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlmaWxsX2J1c19yZXNldF9ldmVudCgmYnVzX3Jlc2V0LT5yZXNldCwgY2xpZW50KTsKKwlmaWxsX2J1c19yZXNldF9ldmVudCgmZS0+cmVzZXQsIGNsaWVudCk7CiAKLQlxdWV1ZV9ldmVudChjbGllbnQsICZidXNfcmVzZXQtPmV2ZW50LAotCQkgICAgJmJ1c19yZXNldC0+cmVzZXQsIHNpemVvZihidXNfcmVzZXQtPnJlc2V0KSwgTlVMTCwgMCk7CisJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJCSAgICAmZS0+cmVzZXQsIHNpemVvZihlLT5yZXNldCksIE5VTEwsIDApOworCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwlpZHJfZm9yX2VhY2goJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBzY2hlZHVsZV9yZWFsbG9jYXRpb25zLCBjbGllbnQpOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKIH0KIAogdm9pZCBmd19kZXZpY2VfY2Rldl91cGRhdGUoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQpAQCAtMjc0LDExICszNjAsMTEgQEAKIHsKIAlzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyAqZ2V0X2luZm8gPSBidWZmZXI7CiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0IGJ1c19yZXNldDsKLQlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNsaWVudC0+ZGV2aWNlLT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogCWNsaWVudC0+dmVyc2lvbiA9IGdldF9pbmZvLT52ZXJzaW9uOwogCWdldF9pbmZvLT52ZXJzaW9uID0gRldfQ0RFVl9WRVJTSU9OOworCWdldF9pbmZvLT5jYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmluZGV4OwogCiAJZG93bl9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCkBAIC0zMDAsNDkgKzM4Niw2MSBAQAogCWNsaWVudC0+YnVzX3Jlc2V0X2Nsb3N1cmUgPSBnZXRfaW5mby0+YnVzX3Jlc2V0X2Nsb3N1cmU7CiAJaWYgKGdldF9pbmZvLT5idXNfcmVzZXQgIT0gMCkgewogCQl2b2lkIF9fdXNlciAqdXB0ciA9IHU2NF90b191cHRyKGdldF9pbmZvLT5idXNfcmVzZXQpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCWZpbGxfYnVzX3Jlc2V0X2V2ZW50KCZidXNfcmVzZXQsIGNsaWVudCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQogCQlpZiAoY29weV90b191c2VyKHVwdHIsICZidXNfcmVzZXQsIHNpemVvZihidXNfcmVzZXQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWdldF9pbmZvLT5jYXJkID0gY2FyZC0+aW5kZXg7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWFkZF9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3N0YXRpYyBpbnQgYWRkX2NsaWVudF9yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UsIGdmcF90IGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworIHJldHJ5OgorCWlmIChpZHJfcHJlX2dldCgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIGdmcF9tYXNrKSA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZyZXNvdXJjZS0+bGluaywgJmNsaWVudC0+cmVzb3VyY2VfbGlzdCk7Ci0JcmVzb3VyY2UtPmhhbmRsZSA9IGNsaWVudC0+cmVzb3VyY2VfaGFuZGxlKys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlbGVhc2VfY2xpZW50X3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdTMyIGhhbmRsZSwKLQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKipyZXNvdXJjZSkKLXsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmY2xpZW50LT5yZXNvdXJjZV9saXN0LCBsaW5rKSB7Ci0JCWlmIChyLT5oYW5kbGUgPT0gaGFuZGxlKSB7Ci0JCQlsaXN0X2RlbCgmci0+bGluayk7Ci0JCQlicmVhazsKLQkJfQorCWlmIChjbGllbnQtPmluX3NodXRkb3duKQorCQlyZXQgPSAtRUNBTkNFTEVEOworCWVsc2UKKwkJcmV0ID0gaWRyX2dldF9uZXcoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCByZXNvdXJjZSwKKwkJCQkgICZyZXNvdXJjZS0+aGFuZGxlKTsKKwlpZiAocmV0ID49IDApIHsKKwkJY2xpZW50X2dldChjbGllbnQpOworCQlpZiAocmVzb3VyY2UtPnJlbGVhc2UgPT0gcmVsZWFzZV9pc29fcmVzb3VyY2UpCisJCQlzY2hlZHVsZV9pc29fcmVzb3VyY2UoY29udGFpbmVyX29mKHJlc291cmNlLAorCQkJCQkJc3RydWN0IGlzb19yZXNvdXJjZSwgcmVzb3VyY2UpKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoJnItPmxpbmsgPT0gJmNsaWVudC0+cmVzb3VyY2VfbGlzdCkKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gcmV0cnk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcmVsZWFzZV9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1MzIgaGFuZGxlLAorCQkJCSAgIGNsaWVudF9yZXNvdXJjZV9yZWxlYXNlX2ZuX3QgcmVsZWFzZSwKKwkJCQkgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICoqcmVzb3VyY2UpCit7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcjsKKworCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJaWYgKGNsaWVudC0+aW5fc2h1dGRvd24pCisJCXIgPSBOVUxMOworCWVsc2UKKwkJciA9IGlkcl9maW5kKCZjbGllbnQtPnJlc291cmNlX2lkciwgaGFuZGxlKTsKKwlpZiAociAmJiByLT5yZWxlYXNlID09IHJlbGVhc2UpCisJCWlkcl9yZW1vdmUoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKworCWlmICghKHIgJiYgci0+cmVsZWFzZSA9PSByZWxlYXNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocmVzb3VyY2UpCkBAIC0zNTAsMjAzICs0NDgsMjM5IEBACiAJZWxzZQogCQlyLT5yZWxlYXNlKGNsaWVudCwgcik7CiAKKwljbGllbnRfcHV0KGNsaWVudCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXJlbGVhc2VfdHJhbnNhY3Rpb24oc3RydWN0IGNsaWVudCAqY2xpZW50LCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdHJhbnNhY3Rpb24oc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQogewotCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2UgPQotCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCByZXNwb25zZSwgcmVzb3VyY2UpOworCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKKwkJCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSwgcmVzb3VyY2UpOwogCi0JZndfY2FuY2VsX3RyYW5zYWN0aW9uKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCAmcmVzcG9uc2UtPnRyYW5zYWN0aW9uKTsKKwlmd19jYW5jZWxfdHJhbnNhY3Rpb24oY2xpZW50LT5kZXZpY2UtPmNhcmQsICZyLT50cmFuc2FjdGlvbik7CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2UgPSBkYXRhOwotCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IHJlc3BvbnNlLT5jbGllbnQ7CisJc3RydWN0IG91dGJvdW5kX3RyYW5zYWN0aW9uX2V2ZW50ICplID0gZGF0YTsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSAqcnNwID0gJmUtPnJlc3BvbnNlOworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGUtPmNsaWVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlICpyID0gJnJlc3BvbnNlLT5yZXNwb25zZTsKIAotCWlmIChsZW5ndGggPCByLT5sZW5ndGgpCi0JCXItPmxlbmd0aCA9IGxlbmd0aDsKKwlpZiAobGVuZ3RoIDwgcnNwLT5sZW5ndGgpCisJCXJzcC0+bGVuZ3RoID0gbGVuZ3RoOwogCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKLQkJbWVtY3B5KHItPmRhdGEsIHBheWxvYWQsIHItPmxlbmd0aCk7CisJCW1lbWNweShyc3AtPmRhdGEsIHBheWxvYWQsIHJzcC0+bGVuZ3RoKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcmVzcG9uc2UtPnJlc291cmNlLmxpbmspOworCS8qCisJICogMS4gSWYgY2FsbGVkIHdoaWxlIGluIHNodXRkb3duLCB0aGUgaWRyIHRyZWUgbXVzdCBiZSBsZWZ0IHVudG91Y2hlZC4KKwkgKiAgICBUaGUgaWRyIGhhbmRsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIHRoZSBjbGllbnQgcmVmZXJlbmNlIHdpbGwgYmUKKwkgKiAgICBkcm9wcGVkIGxhdGVyLgorCSAqIDIuIElmIHRoZSBjYWxsIGNoYWluIHdhcyByZWxlYXNlX2NsaWVudF9yZXNvdXJjZSAtPgorCSAqICAgIHJlbGVhc2VfdHJhbnNhY3Rpb24gLT4gY29tcGxldGVfdHJhbnNhY3Rpb24gKGluc3RlYWQgb2YgYSBub3JtYWwKKwkgKiAgICBjb25jbHVzaW9uIG9mIHRoZSB0cmFuc2FjdGlvbiksIGkuZS4gaWYgdGhpcyByZXNvdXJjZSB3YXMgYWxyZWFkeQorCSAqICAgIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBpZHIsIHRoZSBjbGllbnQgcmVmZXJlbmNlIHdpbGwgYmUgZHJvcHBlZAorCSAqICAgIGJ5IHJlbGVhc2VfY2xpZW50X3Jlc291cmNlIGFuZCB3ZSBtdXN0IG5vdCBkcm9wIGl0IGhlcmUuCisJICovCisJaWYgKCFjbGllbnQtPmluX3NodXRkb3duICYmCisJICAgIGlkcl9maW5kKCZjbGllbnQtPnJlc291cmNlX2lkciwgZS0+ci5yZXNvdXJjZS5oYW5kbGUpKSB7CisJCWlkcl9yZW1vdmUoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBlLT5yLnJlc291cmNlLmhhbmRsZSk7CisJCS8qIERyb3AgdGhlIGlkcidzIHJlZmVyZW5jZSAqLworCQljbGllbnRfcHV0KGNsaWVudCk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOwogCi0Jci0+dHlwZSAgID0gRldfQ0RFVl9FVkVOVF9SRVNQT05TRTsKLQlyLT5yY29kZSAgPSByY29kZTsKKwlyc3AtPnR5cGUgPSBGV19DREVWX0VWRU5UX1JFU1BPTlNFOworCXJzcC0+cmNvZGUgPSByY29kZTsKIAogCS8qCi0JICogSW4gdGhlIGNhc2UgdGhhdCBzaXplb2YoKnIpIGRvZXNuJ3QgYWxpZ24gd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlCisJICogSW4gdGhlIGNhc2UgdGhhdCBzaXplb2YoKnJzcCkgZG9lc24ndCBhbGlnbiB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUKIAkgKiBkYXRhLCBhbmQgdGhlIHJlYWQgaXMgc2hvcnQsIHByZXNlcnZlIGFuIGV4dHJhIGNvcHkgb2YgdGhlIGRhdGEKIAkgKiB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBhIHByZS0yLjYuMjcgYnVnLiAgU2luY2UgdGhlIGJ1ZyBpcyBoYXJtbGVzcwogCSAqIGZvciBzaG9ydCByZWFkcyBhbmQgc29tZSBhcHBzIGRlcGVuZGVkIG9uIGl0LCB0aGlzIGlzIGJvdGggc2FmZQogCSAqIGFuZCBwcnVkZW50IGZvciBjb21wYXRpYmlsaXR5LgogCSAqLwotCWlmIChyLT5sZW5ndGggPD0gc2l6ZW9mKCpyKSAtIG9mZnNldG9mKHR5cGVvZigqciksIGRhdGEpKQotCQlxdWV1ZV9ldmVudChjbGllbnQsICZyZXNwb25zZS0+ZXZlbnQsIHIsIHNpemVvZigqciksCi0JCQkgICAgci0+ZGF0YSwgci0+bGVuZ3RoKTsKKwlpZiAocnNwLT5sZW5ndGggPD0gc2l6ZW9mKCpyc3ApIC0gb2Zmc2V0b2YodHlwZW9mKCpyc3ApLCBkYXRhKSkKKwkJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsIHJzcCwgc2l6ZW9mKCpyc3ApLAorCQkJICAgIHJzcC0+ZGF0YSwgcnNwLT5sZW5ndGgpOwogCWVsc2UKLQkJcXVldWVfZXZlbnQoY2xpZW50LCAmcmVzcG9uc2UtPmV2ZW50LCByLCBzaXplb2YoKnIpICsgci0+bGVuZ3RoLAorCQlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwgcnNwLCBzaXplb2YoKnJzcCkgKyByc3AtPmxlbmd0aCwKIAkJCSAgICBOVUxMLCAwKTsKKworCS8qIERyb3AgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrJ3MgcmVmZXJlbmNlICovCisJY2xpZW50X3B1dChjbGllbnQpOworfQorCitzdGF0aWMgaW50IGluaXRfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgKnJlcXVlc3QsCisJCQlpbnQgZGVzdGluYXRpb25faWQsIGludCBzcGVlZCkKK3sKKwlzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fZXZlbnQgKmU7CisJaW50IHJldDsKKworCWlmIChyZXF1ZXN0LT50Y29kZSAhPSBUQ09ERV9TVFJFQU1fREFUQSAmJgorCSAgICAocmVxdWVzdC0+bGVuZ3RoID4gNDA5NiB8fCByZXF1ZXN0LT5sZW5ndGggPiA1MTIgPDwgc3BlZWQpKQorCQlyZXR1cm4gLUVJTzsKKworCWUgPSBrbWFsbG9jKHNpemVvZigqZSkgKyByZXF1ZXN0LT5sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZS0+Y2xpZW50ID0gY2xpZW50OworCWUtPnJlc3BvbnNlLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKKwllLT5yZXNwb25zZS5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKworCWlmIChyZXF1ZXN0LT5kYXRhICYmCisJICAgIGNvcHlfZnJvbV91c2VyKGUtPnJlc3BvbnNlLmRhdGEsCisJCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwllLT5yLnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX3RyYW5zYWN0aW9uOworCXJldCA9IGFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmZS0+ci5yZXNvdXJjZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJLyogR2V0IGEgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgKi8KKwljbGllbnRfZ2V0KGNsaWVudCk7CisKKwlmd19zZW5kX3JlcXVlc3QoY2xpZW50LT5kZXZpY2UtPmNhcmQsICZlLT5yLnRyYW5zYWN0aW9uLAorCQkJcmVxdWVzdC0+dGNvZGUsIGRlc3RpbmF0aW9uX2lkLCByZXF1ZXN0LT5nZW5lcmF0aW9uLAorCQkJc3BlZWQsIHJlcXVlc3QtPm9mZnNldCwgZS0+cmVzcG9uc2UuZGF0YSwKKwkJCXJlcXVlc3QtPmxlbmd0aCwgY29tcGxldGVfdHJhbnNhY3Rpb24sIGUpOworCXJldHVybiAwOworCisgZmFpbGVkOgorCWtmcmVlKGUpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpb2N0bF9zZW5kX3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCiB7Ci0Jc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gY2xpZW50LT5kZXZpY2U7CiAJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0ICpyZXF1ZXN0ID0gYnVmZmVyOwotCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2U7CiAKLQkvKiBXaGF0IGlzIHRoZSBiaWdnZXN0IHNpemUgd2UnbGwgYWNjZXB0LCByZWFsbHk/ICovCi0JaWYgKHJlcXVlc3QtPmxlbmd0aCA+IDQwOTYpCisJc3dpdGNoIChyZXF1ZXN0LT50Y29kZSkgeworCWNhc2UgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUOgorCWNhc2UgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUOgorCWNhc2UgVENPREVfUkVBRF9CTE9DS19SRVFVRVNUOgorCWNhc2UgVENPREVfTE9DS19NQVNLX1NXQVA6CisJY2FzZSBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUDoKKwljYXNlIFRDT0RFX0xPQ0tfRkVUQ0hfQUREOgorCWNhc2UgVENPREVfTE9DS19MSVRUTEVfQUREOgorCWNhc2UgVENPREVfTE9DS19CT1VOREVEX0FERDoKKwljYXNlIFRDT0RFX0xPQ0tfV1JBUF9BREQ6CisJY2FzZSBUQ09ERV9MT0NLX1ZFTkRPUl9ERVBFTkRFTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwotCi0JcmVzcG9uc2UgPSBrbWFsbG9jKHNpemVvZigqcmVzcG9uc2UpICsgcmVxdWVzdC0+bGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzcG9uc2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXNwb25zZS0+Y2xpZW50ID0gY2xpZW50OwotCXJlc3BvbnNlLT5yZXNwb25zZS5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7Ci0JcmVzcG9uc2UtPnJlc3BvbnNlLmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOwotCi0JaWYgKHJlcXVlc3QtPmRhdGEgJiYKLQkgICAgY29weV9mcm9tX3VzZXIocmVzcG9uc2UtPnJlc3BvbnNlLmRhdGEsCi0JCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoKSkgewotCQlrZnJlZShyZXNwb25zZSk7Ci0JCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJlc3BvbnNlLT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV90cmFuc2FjdGlvbjsKLQlhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnJlc3BvbnNlLT5yZXNvdXJjZSk7Ci0KLQlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmcmVzcG9uc2UtPnRyYW5zYWN0aW9uLAotCQkJcmVxdWVzdC0+dGNvZGUgJiAweDFmLAotCQkJZGV2aWNlLT5ub2RlLT5ub2RlX2lkLAotCQkJcmVxdWVzdC0+Z2VuZXJhdGlvbiwKLQkJCWRldmljZS0+bWF4X3NwZWVkLAotCQkJcmVxdWVzdC0+b2Zmc2V0LAotCQkJcmVzcG9uc2UtPnJlc3BvbnNlLmRhdGEsIHJlcXVlc3QtPmxlbmd0aCwKLQkJCWNvbXBsZXRlX3RyYW5zYWN0aW9uLCByZXNwb25zZSk7Ci0KLQlpZiAocmVxdWVzdC0+ZGF0YSkKLQkJcmV0dXJuIHNpemVvZihyZXF1ZXN0KSArIHJlcXVlc3QtPmxlbmd0aDsKLQllbHNlCi0JCXJldHVybiBzaXplb2YocmVxdWVzdCk7CisJcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkLAorCQkJICAgIGNsaWVudC0+ZGV2aWNlLT5tYXhfc3BlZWQpOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19oYW5kbGVyIHsKLQlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIGhhbmRsZXI7Ci0JX191NjQgY2xvc3VyZTsKLQlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLX07Ci0KLXN0cnVjdCByZXF1ZXN0IHsKLQlzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdDsKLQl2b2lkICpkYXRhOwotCXNpemVfdCBsZW5ndGg7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLX07Ci0KLXN0cnVjdCByZXF1ZXN0X2V2ZW50IHsKLQlzdHJ1Y3QgZXZlbnQgZXZlbnQ7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCByZXF1ZXN0OwotfTsKLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQorc3RhdGljIHZvaWQgcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCSAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxdWVzdCA9Ci0JCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlcXVlc3QsIHJlc291cmNlKTsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKKwkJCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19zZW5kX3Jlc3BvbnNlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCByZXF1ZXN0LT5yZXF1ZXN0LAorCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsCiAJCQkgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwotCWtmcmVlKHJlcXVlc3QpOworCWtmcmVlKHIpOwogfQogCi1zdGF0aWMgdm9pZAotaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyLAotCSAgICAgICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkgICAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJCSAgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkJICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewotCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXIgPSBjYWxsYmFja19kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpyZXF1ZXN0OwotCXN0cnVjdCByZXF1ZXN0X2V2ZW50ICplOwotCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGhhbmRsZXItPmNsaWVudDsKKwlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlICpoYW5kbGVyID0gY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9ldmVudCAqZTsKKwlpbnQgcmV0OwogCi0JcmVxdWVzdCA9IGttYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CisJciA9IGttYWxsb2Moc2l6ZW9mKCpyKSwgR0ZQX0FUT01JQyk7CiAJZSA9IGttYWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlcXVlc3QgPT0gTlVMTCB8fCBlID09IE5VTEwpIHsKLQkJa2ZyZWUocmVxdWVzdCk7Ci0JCWtmcmVlKGUpOwotCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHIsIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAociA9PSBOVUxMIHx8IGUgPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CiAKLQlyZXF1ZXN0LT5yZXF1ZXN0ID0gcjsKLQlyZXF1ZXN0LT5kYXRhICAgID0gcGF5bG9hZDsKLQlyZXF1ZXN0LT5sZW5ndGggID0gbGVuZ3RoOworCXItPnJlcXVlc3QgPSByZXF1ZXN0OworCXItPmRhdGEgICAgPSBwYXlsb2FkOworCXItPmxlbmd0aCAgPSBsZW5ndGg7CiAKLQlyZXF1ZXN0LT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV9yZXF1ZXN0OwotCWFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmcmVxdWVzdC0+cmVzb3VyY2UpOworCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX3JlcXVlc3Q7CisJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShoYW5kbGVyLT5jbGllbnQsICZyLT5yZXNvdXJjZSwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOwogCiAJZS0+cmVxdWVzdC50eXBlICAgID0gRldfQ0RFVl9FVkVOVF9SRVFVRVNUOwogCWUtPnJlcXVlc3QudGNvZGUgICA9IHRjb2RlOwogCWUtPnJlcXVlc3Qub2Zmc2V0ICA9IG9mZnNldDsKIAllLT5yZXF1ZXN0Lmxlbmd0aCAgPSBsZW5ndGg7Ci0JZS0+cmVxdWVzdC5oYW5kbGUgID0gcmVxdWVzdC0+cmVzb3VyY2UuaGFuZGxlOworCWUtPnJlcXVlc3QuaGFuZGxlICA9IHItPnJlc291cmNlLmhhbmRsZTsKIAllLT5yZXF1ZXN0LmNsb3N1cmUgPSBoYW5kbGVyLT5jbG9zdXJlOwogCi0JcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJcXVldWVfZXZlbnQoaGFuZGxlci0+Y2xpZW50LCAmZS0+ZXZlbnQsCiAJCSAgICAmZS0+cmVxdWVzdCwgc2l6ZW9mKGUtPnJlcXVlc3QpLCBwYXlsb2FkLCBsZW5ndGgpOworCXJldHVybjsKKworIGZhaWxlZDoKKwlrZnJlZShyKTsKKwlrZnJlZShlKTsKKwlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQKLXJlbGVhc2VfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKLQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQorc3RhdGljIHZvaWQgcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJCSAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKIHsKLQlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyID0KLQkJY29udGFpbmVyX29mKHJlc291cmNlLCBzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyLCByZXNvdXJjZSk7CisJc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSAqciA9CisJICAgIGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSwgcmVzb3VyY2UpOwogCi0JZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyKCZoYW5kbGVyLT5oYW5kbGVyKTsKLQlrZnJlZShoYW5kbGVyKTsKKwlmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoJnItPmhhbmRsZXIpOworCWtmcmVlKHIpOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQogewogCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOwotCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CisJc3RydWN0IGFkZHJlc3NfaGFuZGxlcl9yZXNvdXJjZSAqcjsKIAlzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gcmVnaW9uOworCWludCByZXQ7CiAKLQloYW5kbGVyID0ga21hbGxvYyhzaXplb2YoKmhhbmRsZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaGFuZGxlciA9PSBOVUxMKQorCXIgPSBrbWFsbG9jKHNpemVvZigqciksIEdGUF9LRVJORUwpOworCWlmIChyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmVnaW9uLnN0YXJ0ID0gcmVxdWVzdC0+b2Zmc2V0OwogCXJlZ2lvbi5lbmQgPSByZXF1ZXN0LT5vZmZzZXQgKyByZXF1ZXN0LT5sZW5ndGg7Ci0JaGFuZGxlci0+aGFuZGxlci5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7Ci0JaGFuZGxlci0+aGFuZGxlci5hZGRyZXNzX2NhbGxiYWNrID0gaGFuZGxlX3JlcXVlc3Q7Ci0JaGFuZGxlci0+aGFuZGxlci5jYWxsYmFja19kYXRhID0gaGFuZGxlcjsKLQloYW5kbGVyLT5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKLQloYW5kbGVyLT5jbGllbnQgPSBjbGllbnQ7CisJci0+aGFuZGxlci5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CisJci0+aGFuZGxlci5hZGRyZXNzX2NhbGxiYWNrID0gaGFuZGxlX3JlcXVlc3Q7CisJci0+aGFuZGxlci5jYWxsYmFja19kYXRhID0gcjsKKwlyLT5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKwlyLT5jbGllbnQgPSBjbGllbnQ7CiAKLQlpZiAoZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZoYW5kbGVyLT5oYW5kbGVyLCAmcmVnaW9uKSA8IDApIHsKLQkJa2ZyZWUoaGFuZGxlcik7Ci0JCXJldHVybiAtRUJVU1k7CisJcmV0ID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyLT5oYW5kbGVyLCAmcmVnaW9uKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShyKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQloYW5kbGVyLT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXI7Ci0JYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZoYW5kbGVyLT5yZXNvdXJjZSk7Ci0JcmVxdWVzdC0+aGFuZGxlID0gaGFuZGxlci0+cmVzb3VyY2UuaGFuZGxlOworCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2FkZHJlc3NfaGFuZGxlcjsKKwlyZXQgPSBhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnItPnJlc291cmNlLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihjbGllbnQsICZyLT5yZXNvdXJjZSk7CisJCXJldHVybiByZXQ7CisJfQorCXJlcXVlc3QtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKIAogCXJldHVybiAwOwogfQpAQCAtNTU1LDE4ICs2ODksMjIgQEAKIHsKIAlzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOwogCi0JcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLCBOVUxMKTsKKwlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCisJCQkJICAgICAgIHJlbGVhc2VfYWRkcmVzc19oYW5kbGVyLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBpb2N0bF9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQogewogCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UgKnJlcXVlc3QgPSBidWZmZXI7CiAJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2U7Ci0Jc3RydWN0IHJlcXVlc3QgKnI7CisJc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgKnI7CiAKLQlpZiAocmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsICZyZXNvdXJjZSkgPCAwKQorCWlmIChyZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwKKwkJCQkgICAgcmVsZWFzZV9yZXF1ZXN0LCAmcmVzb3VyY2UpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlcXVlc3QsIHJlc291cmNlKTsKKworCXIgPSBjb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLAorCQkJIHJlc291cmNlKTsKIAlpZiAocmVxdWVzdC0+bGVuZ3RoIDwgci0+bGVuZ3RoKQogCQlyLT5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CiAJaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByLT5sZW5ndGgpKQpAQCAtNTg4LDg1ICs3MjYsOTIgQEAKIAlyZXR1cm4gZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHNob3J0X3Jlc2V0KTsKIH0KIAotc3RydWN0IGRlc2NyaXB0b3IgewotCXN0cnVjdCBmd19kZXNjcmlwdG9yIGQ7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLQl1MzIgZGF0YVswXTsKLX07Ci0KIHN0YXRpYyB2b2lkIHJlbGVhc2VfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCiAJCQkgICAgICAgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCiB7Ci0Jc3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPQotCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBkZXNjcmlwdG9yLCByZXNvdXJjZSk7CisJc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UgKnIgPQorCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBkZXNjcmlwdG9yX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKCZkZXNjcmlwdG9yLT5kKTsKLQlrZnJlZShkZXNjcmlwdG9yKTsKKwlmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKCZyLT5kZXNjcmlwdG9yKTsKKwlrZnJlZShyKTsKIH0KIAogc3RhdGljIGludCBpb2N0bF9hZGRfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvciAqcmVxdWVzdCA9IGJ1ZmZlcjsKLQlzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CisJc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UgKnI7CisJaW50IHJldDsKKworCS8qIEFjY2VzcyBwb2xpY3k6IEFsbG93IHRoaXMgaW9jdGwgb25seSBvbiBsb2NhbCBub2RlcycgZGV2aWNlIGZpbGVzLiAqLworCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCXJldCA9IGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkICE9IGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQ7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT1NZUzsKIAogCWlmIChyZXF1ZXN0LT5sZW5ndGggPiAyNTYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGVzY3JpcHRvciA9Ci0JCWttYWxsb2Moc2l6ZW9mKCpkZXNjcmlwdG9yKSArIHJlcXVlc3QtPmxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOwotCWlmIChkZXNjcmlwdG9yID09IE5VTEwpCisJciA9IGttYWxsb2Moc2l6ZW9mKCpyKSArIHJlcXVlc3QtPmxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOworCWlmIChyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKGRlc2NyaXB0b3ItPmRhdGEsCisJaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsCiAJCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoICogNCkpIHsKLQkJa2ZyZWUoZGVzY3JpcHRvcik7Ci0JCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQlkZXNjcmlwdG9yLT5kLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQlkZXNjcmlwdG9yLT5kLmltbWVkaWF0ZSA9IHJlcXVlc3QtPmltbWVkaWF0ZTsKLQlkZXNjcmlwdG9yLT5kLmtleSA9IHJlcXVlc3QtPmtleTsKLQlkZXNjcmlwdG9yLT5kLmRhdGEgPSBkZXNjcmlwdG9yLT5kYXRhOworCXItPmRlc2NyaXB0b3IubGVuZ3RoICAgID0gcmVxdWVzdC0+bGVuZ3RoOworCXItPmRlc2NyaXB0b3IuaW1tZWRpYXRlID0gcmVxdWVzdC0+aW1tZWRpYXRlOworCXItPmRlc2NyaXB0b3Iua2V5ICAgICAgID0gcmVxdWVzdC0+a2V5OworCXItPmRlc2NyaXB0b3IuZGF0YSAgICAgID0gci0+ZGF0YTsKIAotCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJmRlc2NyaXB0b3ItPmQpOwotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWtmcmVlKGRlc2NyaXB0b3IpOwotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJnItPmRlc2NyaXB0b3IpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2Rlc2NyaXB0b3I7CisJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZyLT5yZXNvdXJjZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcigmci0+ZGVzY3JpcHRvcik7CisJCWdvdG8gZmFpbGVkOwogCX0KLQotCWRlc2NyaXB0b3ItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2Rlc2NyaXB0b3I7Ci0JYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZkZXNjcmlwdG9yLT5yZXNvdXJjZSk7Ci0JcmVxdWVzdC0+aGFuZGxlID0gZGVzY3JpcHRvci0+cmVzb3VyY2UuaGFuZGxlOworCXJlcXVlc3QtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKIAogCXJldHVybiAwOworIGZhaWxlZDoKKwlrZnJlZShyKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaW9jdGxfcmVtb3ZlX2Rlc2NyaXB0b3Ioc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCiB7CiAJc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IgKnJlcXVlc3QgPSBidWZmZXI7CiAKLQlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsIE5VTEwpOworCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwKKwkJCQkgICAgICAgcmVsZWFzZV9kZXNjcmlwdG9yLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQKLWlzb19jYWxsYmFjayhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQsIHUzMiBjeWNsZSwKLQkgICAgIHNpemVfdCBoZWFkZXJfbGVuZ3RoLCB2b2lkICpoZWFkZXIsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBpc29fY2FsbGJhY2soc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0LCB1MzIgY3ljbGUsCisJCQkgc2l6ZV90IGhlYWRlcl9sZW5ndGgsIHZvaWQgKmhlYWRlciwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBkYXRhOwotCXN0cnVjdCBpc29faW50ZXJydXB0ICppcnE7CisJc3RydWN0IGlzb19pbnRlcnJ1cHRfZXZlbnQgKmU7CiAKLQlpcnEgPSBremFsbG9jKHNpemVvZigqaXJxKSArIGhlYWRlcl9sZW5ndGgsIEdGUF9BVE9NSUMpOwotCWlmIChpcnEgPT0gTlVMTCkKKwllID0ga3phbGxvYyhzaXplb2YoKmUpICsgaGVhZGVyX2xlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaXJxLT5pbnRlcnJ1cHQudHlwZSAgICAgID0gRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUOwotCWlycS0+aW50ZXJydXB0LmNsb3N1cmUgICA9IGNsaWVudC0+aXNvX2Nsb3N1cmU7Ci0JaXJxLT5pbnRlcnJ1cHQuY3ljbGUgICAgID0gY3ljbGU7Ci0JaXJxLT5pbnRlcnJ1cHQuaGVhZGVyX2xlbmd0aCA9IGhlYWRlcl9sZW5ndGg7Ci0JbWVtY3B5KGlycS0+aW50ZXJydXB0LmhlYWRlciwgaGVhZGVyLCBoZWFkZXJfbGVuZ3RoKTsKLQlxdWV1ZV9ldmVudChjbGllbnQsICZpcnEtPmV2ZW50LCAmaXJxLT5pbnRlcnJ1cHQsCi0JCSAgICBzaXplb2YoaXJxLT5pbnRlcnJ1cHQpICsgaGVhZGVyX2xlbmd0aCwgTlVMTCwgMCk7CisJZS0+aW50ZXJydXB0LnR5cGUgICAgICA9IEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVDsKKwllLT5pbnRlcnJ1cHQuY2xvc3VyZSAgID0gY2xpZW50LT5pc29fY2xvc3VyZTsKKwllLT5pbnRlcnJ1cHQuY3ljbGUgICAgID0gY3ljbGU7CisJZS0+aW50ZXJydXB0LmhlYWRlcl9sZW5ndGggPSBoZWFkZXJfbGVuZ3RoOworCW1lbWNweShlLT5pbnRlcnJ1cHQuaGVhZGVyLCBoZWFkZXIsIGhlYWRlcl9sZW5ndGgpOworCXF1ZXVlX2V2ZW50KGNsaWVudCwgJmUtPmV2ZW50LCAmZS0+aW50ZXJydXB0LAorCQkgICAgc2l6ZW9mKGUtPmludGVycnVwdCkgKyBoZWFkZXJfbGVuZ3RoLCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGludCBpb2N0bF9jcmVhdGVfaXNvX2NvbnRleHQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCkBAIC04NzEsNiArMTAxNiwyNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaXNvX3Jlc291cmNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpc29fcmVzb3VyY2VfZXZlbnQgKmU7CisJc3RydWN0IGlzb19yZXNvdXJjZSAqciA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlzb19yZXNvdXJjZSwgd29yay53b3JrKTsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSByLT5jbGllbnQ7CisJaW50IGdlbmVyYXRpb24sIGNoYW5uZWwsIGJhbmR3aWR0aCwgdG9kbzsKKwlib29sIHNraXAsIGZyZWUsIHN1Y2Nlc3M7CisKKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCWdlbmVyYXRpb24gPSBjbGllbnQtPmRldmljZS0+Z2VuZXJhdGlvbjsKKwl0b2RvID0gci0+dG9kbzsKKwkvKiBBbGxvdyAxMDAwbXMgZ3JhY2UgcGVyaW9kIGZvciBvdGhlciByZWFsbG9jYXRpb25zLiAqLworCWlmICh0b2RvID09IElTT19SRVNfQUxMT0MgJiYKKwkgICAgdGltZV9pc19hZnRlcl9qaWZmaWVzKGNsaWVudC0+ZGV2aWNlLT5jYXJkLT5yZXNldF9qaWZmaWVzICsgSFopKSB7CisJCWlmIChzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnItPndvcmssIERJVl9ST1VORF9VUChIWiwgMykpKQorCQkJY2xpZW50X2dldChjbGllbnQpOworCQlza2lwID0gdHJ1ZTsKKwl9IGVsc2UgeworCQkvKiBXZSBjb3VsZCBiZSBjYWxsZWQgdHdpY2Ugd2l0aGluIHRoZSBzYW1lIGdlbmVyYXRpb24uICovCisJCXNraXAgPSB0b2RvID09IElTT19SRVNfUkVBTExPQyAmJgorCQkgICAgICAgci0+Z2VuZXJhdGlvbiA9PSBnZW5lcmF0aW9uOworCX0KKwlmcmVlID0gdG9kbyA9PSBJU09fUkVTX0RFQUxMT0MgfHwKKwkgICAgICAgdG9kbyA9PSBJU09fUkVTX0FMTE9DX09OQ0UgfHwKKwkgICAgICAgdG9kbyA9PSBJU09fUkVTX0RFQUxMT0NfT05DRTsKKwlyLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisKKwlpZiAoc2tpcCkKKwkJZ290byBvdXQ7CisKKwliYW5kd2lkdGggPSByLT5iYW5kd2lkdGg7CisKKwlmd19pc29fcmVzb3VyY2VfbWFuYWdlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCBnZW5lcmF0aW9uLAorCQkJci0+Y2hhbm5lbHMsICZjaGFubmVsLCAmYmFuZHdpZHRoLAorCQkJdG9kbyA9PSBJU09fUkVTX0FMTE9DIHx8CisJCQl0b2RvID09IElTT19SRVNfUkVBTExPQyB8fAorCQkJdG9kbyA9PSBJU09fUkVTX0FMTE9DX09OQ0UpOworCS8qCisJICogSXMgdGhpcyBnZW5lcmF0aW9uIG91dGRhdGVkIGFscmVhZHk/ICBBcyBsb25nIGFzIHRoaXMgcmVzb3VyY2Ugc3RpY2tzCisJICogaW4gdGhlIGlkciwgaXQgd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gZm9yIGEgbmV3ZXIgZ2VuZXJhdGlvbiBvciBhdAorCSAqIHNodXRkb3duLgorCSAqLworCWlmIChjaGFubmVsID09IC1FQUdBSU4gJiYKKwkgICAgKHRvZG8gPT0gSVNPX1JFU19BTExPQyB8fCB0b2RvID09IElTT19SRVNfUkVBTExPQykpCisJCWdvdG8gb3V0OworCisJc3VjY2VzcyA9IGNoYW5uZWwgPj0gMCB8fCBiYW5kd2lkdGggPiAwOworCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwkvKgorCSAqIFRyYW5zaXQgZnJvbSBhbGxvY2F0aW9uIHRvIHJlYWxsb2NhdGlvbiwgZXhjZXB0IGlmIHRoZSBjbGllbnQKKwkgKiByZXF1ZXN0ZWQgZGVhbGxvY2F0aW9uIGluIHRoZSBtZWFudGltZS4KKwkgKi8KKwlpZiAoci0+dG9kbyA9PSBJU09fUkVTX0FMTE9DKQorCQlyLT50b2RvID0gSVNPX1JFU19SRUFMTE9DOworCS8qCisJICogQWxsb2NhdGlvbiBvciByZWFsbG9jYXRpb24gZmFpbHVyZT8gIFB1bGwgdGhpcyByZXNvdXJjZSBvdXQgb2YgdGhlCisJICogaWRyIGFuZCBwcmVwYXJlIGZvciBkZWxldGlvbiwgdW5sZXNzIHRoZSBjbGllbnQgaXMgc2h1dHRpbmcgZG93bi4KKwkgKi8KKwlpZiAoci0+dG9kbyA9PSBJU09fUkVTX1JFQUxMT0MgJiYgIXN1Y2Nlc3MgJiYKKwkgICAgIWNsaWVudC0+aW5fc2h1dGRvd24gJiYKKwkgICAgaWRyX2ZpbmQoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCByLT5yZXNvdXJjZS5oYW5kbGUpKSB7CisJCWlkcl9yZW1vdmUoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCByLT5yZXNvdXJjZS5oYW5kbGUpOworCQljbGllbnRfcHV0KGNsaWVudCk7CisJCWZyZWUgPSB0cnVlOworCX0KKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DICYmIGNoYW5uZWwgPj0gMCkKKwkJci0+Y2hhbm5lbHMgPSAxVUxMIDw8IGNoYW5uZWw7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX1JFQUxMT0MgJiYgc3VjY2VzcykKKwkJZ290byBvdXQ7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DIHx8IHRvZG8gPT0gSVNPX1JFU19BTExPQ19PTkNFKSB7CisJCWUgPSByLT5lX2FsbG9jOworCQlyLT5lX2FsbG9jID0gTlVMTDsKKwl9IGVsc2UgeworCQllID0gci0+ZV9kZWFsbG9jOworCQlyLT5lX2RlYWxsb2MgPSBOVUxMOworCX0KKwllLT5yZXNvdXJjZS5oYW5kbGUJPSByLT5yZXNvdXJjZS5oYW5kbGU7CisJZS0+cmVzb3VyY2UuY2hhbm5lbAk9IGNoYW5uZWw7CisJZS0+cmVzb3VyY2UuYmFuZHdpZHRoCT0gYmFuZHdpZHRoOworCisJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJCSAgICAmZS0+cmVzb3VyY2UsIHNpemVvZihlLT5yZXNvdXJjZSksIE5VTEwsIDApOworCisJaWYgKGZyZWUpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmci0+d29yayk7CisJCWtmcmVlKHItPmVfYWxsb2MpOworCQlrZnJlZShyLT5lX2RlYWxsb2MpOworCQlrZnJlZShyKTsKKwl9Cisgb3V0OgorCWNsaWVudF9wdXQoY2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgc2NoZWR1bGVfaXNvX3Jlc291cmNlKHN0cnVjdCBpc29fcmVzb3VyY2UgKnIpCit7CisJY2xpZW50X2dldChyLT5jbGllbnQpOworCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyLT53b3JrLCAwKSkKKwkJY2xpZW50X3B1dChyLT5jbGllbnQpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQoreworCXN0cnVjdCBpc29fcmVzb3VyY2UgKnIgPQorCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBpc29fcmVzb3VyY2UsIHJlc291cmNlKTsKKworCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJci0+dG9kbyA9IElTT19SRVNfREVBTExPQzsKKwlzY2hlZHVsZV9pc29fcmVzb3VyY2Uocik7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmxvY2spOworfQorCitzdGF0aWMgaW50IGluaXRfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0LCBpbnQgdG9kbykKK3sKKwlzdHJ1Y3QgaXNvX3Jlc291cmNlX2V2ZW50ICplMSwgKmUyOworCXN0cnVjdCBpc29fcmVzb3VyY2UgKnI7CisJaW50IHJldDsKKworCWlmICgocmVxdWVzdC0+Y2hhbm5lbHMgPT0gMCAmJiByZXF1ZXN0LT5iYW5kd2lkdGggPT0gMCkgfHwKKwkgICAgcmVxdWVzdC0+YmFuZHdpZHRoID4gQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMIHx8CisJICAgIHJlcXVlc3QtPmJhbmR3aWR0aCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJciAgPSBrbWFsbG9jKHNpemVvZigqciksIEdGUF9LRVJORUwpOworCWUxID0ga21hbGxvYyhzaXplb2YoKmUxKSwgR0ZQX0tFUk5FTCk7CisJZTIgPSBrbWFsbG9jKHNpemVvZigqZTIpLCBHRlBfS0VSTkVMKTsKKwlpZiAociA9PSBOVUxMIHx8IGUxID09IE5VTEwgfHwgZTIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJnItPndvcmssIGlzb19yZXNvdXJjZV93b3JrKTsKKwlyLT5jbGllbnQJPSBjbGllbnQ7CisJci0+dG9kbwkJPSB0b2RvOworCXItPmdlbmVyYXRpb24JPSAtMTsKKwlyLT5jaGFubmVscwk9IHJlcXVlc3QtPmNoYW5uZWxzOworCXItPmJhbmR3aWR0aAk9IHJlcXVlc3QtPmJhbmR3aWR0aDsKKwlyLT5lX2FsbG9jCT0gZTE7CisJci0+ZV9kZWFsbG9jCT0gZTI7CisKKwllMS0+cmVzb3VyY2UuY2xvc3VyZQk9IHJlcXVlc3QtPmNsb3N1cmU7CisJZTEtPnJlc291cmNlLnR5cGUJPSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9BTExPQ0FURUQ7CisJZTItPnJlc291cmNlLmNsb3N1cmUJPSByZXF1ZXN0LT5jbG9zdXJlOworCWUyLT5yZXNvdXJjZS50eXBlCT0gRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQ7CisKKwlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DKSB7CisJCXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2lzb19yZXNvdXJjZTsKKwkJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZyLT5yZXNvdXJjZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXItPnJlc291cmNlLnJlbGVhc2UgPSBOVUxMOworCQlyLT5yZXNvdXJjZS5oYW5kbGUgPSAtMTsKKwkJc2NoZWR1bGVfaXNvX3Jlc291cmNlKHIpOworCX0KKwlyZXF1ZXN0LT5oYW5kbGUgPSByLT5yZXNvdXJjZS5oYW5kbGU7CisKKwlyZXR1cm4gMDsKKyBmYWlsOgorCWtmcmVlKHIpOworCWtmcmVlKGUxKTsKKwlrZnJlZShlMik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgKnJlcXVlc3QgPSBidWZmZXI7CisKKwlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LCBJU09fUkVTX0FMTE9DKTsKK30KKworc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOworCisJcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAorCQkJCSAgICAgICByZWxlYXNlX2lzb19yZXNvdXJjZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0ID0gYnVmZmVyOworCisJcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdCwgSVNPX1JFU19BTExPQ19PTkNFKTsKK30KKworc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QsIElTT19SRVNfREVBTExPQ19PTkNFKTsKK30KKworLyoKKyAqIFJldHVybnMgYSBzcGVlZCBjb2RlOiAgTWF4aW11bSBzcGVlZCB0byBvciBmcm9tIHRoaXMgZGV2aWNlLAorICogbGltaXRlZCBieSB0aGUgZGV2aWNlJ3MgbGluayBzcGVlZCwgdGhlIGxvY2FsIG5vZGUncyBsaW5rIHNwZWVkLAorICogYW5kIGFsbCBQSFkgcG9ydCBzcGVlZHMgYmV0d2VlbiB0aGUgdHdvIGxpbmtzLgorICovCitzdGF0aWMgaW50IGlvY3RsX2dldF9zcGVlZChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gY2xpZW50LT5kZXZpY2UtPm1heF9zcGVlZDsKK30KKworc3RhdGljIGludCBpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXN3aXRjaCAocmVxdWVzdC0+dGNvZGUpIHsKKwljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNlY3VyaXR5IHBvbGljeTogT25seSBhbGxvdyBhY2Nlc3NlcyB0byBVbml0cyBTcGFjZS4gKi8KKwlpZiAocmVxdWVzdC0+b2Zmc2V0IDwgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ09ORklHX1JPTV9FTkQpCisJCXJldHVybiAtRUFDQ0VTOworCisJcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIExPQ0FMX0JVUyB8IDB4M2YsIFNDT0RFXzEwMCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfc2VuZF9zdHJlYW1fcGFja2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldCAqcCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgcmVxdWVzdDsKKwlpbnQgZGVzdDsKKworCWlmIChwLT5zcGVlZCA+IGNsaWVudC0+ZGV2aWNlLT5jYXJkLT5saW5rX3NwZWVkIHx8CisJICAgIHAtPmxlbmd0aCA+IDEwMjQgPDwgcC0+c3BlZWQpCisJCXJldHVybiAtRUlPOworCisJaWYgKHAtPnRhZyA+IDMgfHwgcC0+Y2hhbm5lbCA+IDYzIHx8IHAtPnN5ID4gMTUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVzdCA9IGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQocC0+dGFnLCBwLT5jaGFubmVsLCBwLT5zeSk7CisJcmVxdWVzdC50Y29kZQkJPSBUQ09ERV9TVFJFQU1fREFUQTsKKwlyZXF1ZXN0Lmxlbmd0aAkJPSBwLT5sZW5ndGg7CisJcmVxdWVzdC5jbG9zdXJlCQk9IHAtPmNsb3N1cmU7CisJcmVxdWVzdC5kYXRhCQk9IHAtPmRhdGE7CisJcmVxdWVzdC5nZW5lcmF0aW9uCT0gcC0+Z2VuZXJhdGlvbjsKKworCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCAmcmVxdWVzdCwgZGVzdCwgcC0+c3BlZWQpOworfQorCiBzdGF0aWMgaW50ICgqIGNvbnN0IGlvY3RsX2hhbmRsZXJzW10pKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKSA9IHsKIAlpb2N0bF9nZXRfaW5mbywKIAlpb2N0bF9zZW5kX3JlcXVlc3QsCkBAIC04ODUsMTMgKzEyODUsMjAgQEAKIAlpb2N0bF9zdGFydF9pc28sCiAJaW9jdGxfc3RvcF9pc28sCiAJaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyLAorCWlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZSwKKwlpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZSwKKwlpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZSwKKwlpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlLAorCWlvY3RsX2dldF9zcGVlZCwKKwlpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0LAorCWlvY3RsX3NlbmRfc3RyZWFtX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWRpc3BhdGNoX2lvY3RsKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgZGlzcGF0Y2hfaW9jdGwoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCWNoYXIgYnVmZmVyWzI1Nl07Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0OwogCiAJaWYgKF9JT0NfVFlQRShjbWQpICE9ICcjJyB8fAogCSAgICBfSU9DX05SKGNtZCkgPj0gQVJSQVlfU0laRShpb2N0bF9oYW5kbGVycykpCkBAIC05MDMsOSArMTMxMCw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlyZXR2YWwgPSBpb2N0bF9oYW5kbGVyc1tfSU9DX05SKGNtZCldKGNsaWVudCwgYnVmZmVyKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwlyZXQgPSBpb2N0bF9oYW5kbGVyc1tfSU9DX05SKGNtZCldKGNsaWVudCwgYnVmZmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKSB7CiAJCWlmIChfSU9DX1NJWkUoY21kKSA+IHNpemVvZihidWZmZXIpIHx8CkBAIC05MTMsMTIgKzEzMjAsMTEgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcKLWZ3X2RldmljZV9vcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBmd19kZXZpY2Vfb3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC05MjksOSArMTMzNSw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgbG9uZwotZndfZGV2aWNlX29wX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBmd19kZXZpY2Vfb3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIApAQCAtOTQ3LDcgKzEzNTIsNyBAQAogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBwYWdlX2NvdW50LCByZXR2YWw7CisJaW50IHBhZ2VfY291bnQsIHJldDsKIAogCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTk3Myw0OCArMTM3OCw1NyBAQAogCWVsc2UKIAkJZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCi0JcmV0dmFsID0gZndfaXNvX2J1ZmZlcl9pbml0KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQsCi0JCQkJICAgIHBhZ2VfY291bnQsIGRpcmVjdGlvbik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CisJcmV0ID0gZndfaXNvX2J1ZmZlcl9pbml0KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQsCisJCQkJIHBhZ2VfY291bnQsIGRpcmVjdGlvbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKLQlyZXR2YWwgPSBmd19pc29fYnVmZmVyX21hcCgmY2xpZW50LT5idWZmZXIsIHZtYSk7Ci0JaWYgKHJldHZhbCA8IDApCisJcmV0ID0gZndfaXNvX2J1ZmZlcl9tYXAoJmNsaWVudC0+YnVmZmVyLCB2bWEpOworCWlmIChyZXQgPCAwKQogCQlmd19pc29fYnVmZmVyX2Rlc3Ryb3koJmNsaWVudC0+YnVmZmVyLCBjbGllbnQtPmRldmljZS0+Y2FyZCk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2h1dGRvd25fcmVzb3VyY2UoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnIgPSBwOworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGRhdGE7CisKKwlyLT5yZWxlYXNlKGNsaWVudCwgcik7CisJY2xpZW50X3B1dChjbGllbnQpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZndfZGV2aWNlX29wX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBldmVudCAqZSwgKm5leHRfZTsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyLCAqbmV4dF9yOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY2xpZW50LT5idWZmZXIucGFnZXMpCi0JCWZ3X2lzb19idWZmZXJfZGVzdHJveSgmY2xpZW50LT5idWZmZXIsIGNsaWVudC0+ZGV2aWNlLT5jYXJkKTsKKwltdXRleF9sb2NrKCZjbGllbnQtPmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOworCWxpc3RfZGVsKCZjbGllbnQtPmxpbmspOworCW11dGV4X3VubG9jaygmY2xpZW50LT5kZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIAogCWlmIChjbGllbnQtPmlzb19jb250ZXh0KQogCQlmd19pc29fY29udGV4dF9kZXN0cm95KGNsaWVudC0+aXNvX2NvbnRleHQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHIsIG5leHRfciwgJmNsaWVudC0+cmVzb3VyY2VfbGlzdCwgbGluaykKLQkJci0+cmVsZWFzZShjbGllbnQsIHIpOworCWlmIChjbGllbnQtPmJ1ZmZlci5wYWdlcykKKwkJZndfaXNvX2J1ZmZlcl9kZXN0cm95KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQpOwogCi0JLyoKLQkgKiBGSVhNRTogV2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBhc3luYyB0YXNrbGV0cyB0byBzdG9wCi0JICogcnVubmluZyBiZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5LgotCSAqLworCS8qIEZyZWV6ZSBjbGllbnQtPnJlc291cmNlX2lkciBhbmQgY2xpZW50LT5ldmVudF9saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwljbGllbnQtPmluX3NodXRkb3duID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisKKwlpZHJfZm9yX2VhY2goJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBzaHV0ZG93bl9yZXNvdXJjZSwgY2xpZW50KTsKKwlpZHJfcmVtb3ZlX2FsbCgmY2xpZW50LT5yZXNvdXJjZV9pZHIpOworCWlkcl9kZXN0cm95KCZjbGllbnQtPnJlc291cmNlX2lkcik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dF9lLCAmY2xpZW50LT5ldmVudF9saXN0LCBsaW5rKQogCQlrZnJlZShlKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZjbGllbnQtPmxpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+ZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7Ci0KLQlmd19kZXZpY2VfcHV0KGNsaWVudC0+ZGV2aWNlKTsKLQlrZnJlZShjbGllbnQpOworCWNsaWVudF9wdXQoY2xpZW50KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKaW5kZXggYmY1M2FjYi4uYTQ3ZTIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCkBAIC0xOCwyMiArMTgsMjYgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKwogI2luY2x1ZGUgImZ3LWRldmljZS5oIgorI2luY2x1ZGUgImZ3LXRvcG9sb2d5LmgiCisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKIAogdm9pZCBmd19jc3JfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgdTMyICogcCkKIHsKQEAgLTEzMiw4ICsxMzYsNyBAQAogCQkJdmVuZG9yLCBtb2RlbCwgc3BlY2lmaWVyX2lkLCB2ZXJzaW9uKTsKIH0KIAotc3RhdGljIGludAotZndfdW5pdF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCitzdGF0aWMgaW50IGZ3X3VuaXRfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewogCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdChkZXYpOwogCWNoYXIgbW9kYWxpYXNbNjRdOwpAQCAtMTUyLDI3ICsxNTUsNiBAQAogfTsKIEVYUE9SVF9TWU1CT0woZndfYnVzX3R5cGUpOwogCi1zdGF0aWMgdm9pZCBmd19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogVGFrZSB0aGUgY2FyZCBsb2NrIHNvIHdlIGRvbid0IHNldCB0aGlzIHRvIE5VTEwgd2hpbGUgYQotCSAqIEZXX05PREVfVVBEQVRFRCBjYWxsYmFjayBpcyBiZWluZyBoYW5kbGVkIG9yIHdoaWxlIHRoZQotCSAqIGJ1cyBtYW5hZ2VyIHdvcmsgbG9va3MgYXQgdGhpcyBub2RlLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JZGV2aWNlLT5ub2RlLT5kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0KLQlmd19ub2RlX3B1dChkZXZpY2UtPm5vZGUpOwotCWtmcmVlKGRldmljZS0+Y29uZmlnX3JvbSk7Ci0Ja2ZyZWUoZGV2aWNlKTsKLQlmd19jYXJkX3B1dChjYXJkKTsKLX0KLQogaW50IGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQogewogCWludCBnZW5lcmF0aW9uID0gZGV2aWNlLT5nZW5lcmF0aW9uOwpAQCAtMTkxLDggKzE3Myw4IEBACiAJdTMyIGtleTsKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X2ltbWVkaWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19pbW1lZGlhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlICphdHRyID0KIAkJY29udGFpbmVyX29mKGRhdHRyLCBzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUsIGF0dHIpOwpAQCAtMjIzLDggKzIwNSw4IEBACiAjZGVmaW5lIElNTUVESUFURV9BVFRSKG5hbWUsIGtleSkJCQkJXAogCXsgX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfaW1tZWRpYXRlLCBOVUxMKSwga2V5IH0KIAotc3RhdGljIHNzaXplX3QKLXNob3dfdGV4dF9sZWFmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RleHRfbGVhZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQogCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7CkBAIC0yOTMsMTAgKzI3NSw5IEBACiAJVEVYVF9MRUFGX0FUVFIoaGFyZHdhcmVfdmVyc2lvbl9uYW1lLCBDU1JfSEFSRFdBUkVfVkVSU0lPTiksCiB9OwogCi1zdGF0aWMgdm9pZAotaW5pdF9md19hdHRyaWJ1dGVfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2LAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJzLAotCQkJc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCAqZ3JvdXApCitzdGF0aWMgdm9pZCBpbml0X2Z3X2F0dHJpYnV0ZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRycywKKwkJCQkgICAgc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCAqZ3JvdXApCiB7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHI7CiAJaW50IGksIGo7CkBAIC0zMTksOSArMzAwLDggQEAKIAlkZXYtPmdyb3VwcyA9IGdyb3VwLT5ncm91cHM7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1tb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CiAJaW50IGxlbmd0aDsKQEAgLTMzMiw5ICszMTIsOCBAQAogCXJldHVybiBsZW5ndGggKyAxOwogfQogCi1zdGF0aWMgc3NpemVfdAotcm9tX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgcm9tX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdChkZXYpOwpAQCAtMzQ5LDggKzMyOCw4IEBACiAJX19BVFRSX05VTEwsCiB9OwogCi1zdGF0aWMgc3NpemVfdAotY29uZmlnX3JvbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGNvbmZpZ19yb21fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2KTsKIAlzaXplX3QgbGVuZ3RoOwpAQCAtMzYzLDggKzM0Miw4IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGljIHNzaXplX3QKLWd1aWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBndWlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7CiAJaW50IHJldDsKQEAgLTM4Myw4ICszNjIsOCBAQAogCV9fQVRUUl9OVUxMLAogfTsKIAotc3RhdGljIGludAotcmVhZF9yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGluZGV4LCB1MzIgKmRhdGEpCitzdGF0aWMgaW50IHJlYWRfcm9tKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKKwkJICAgIGludCBnZW5lcmF0aW9uLCBpbnQgaW5kZXgsIHUzMiAqZGF0YSkKIHsKIAlpbnQgcmNvZGU7CiAKQEAgLTUzOSw3ICs1MTgsNyBAQAogCiAJa2ZyZWUob2xkX3JvbSk7CiAJcmV0ID0gMDsKLQlkZXZpY2UtPmNtYyA9IHJvbVsyXSAmIDEgPDwgMzA7CisJZGV2aWNlLT5jbWMgPSByb21bMl0gPj4gMzAgJiAxOwogIG91dDoKIAlrZnJlZShyb20pOwogCkBAIC02NzksMTEgKzY1OCw1MyBAQAogCWZ3X2RldmljZV9wdXQoZGV2aWNlKTsKIH0KIAorc3RhdGljIHZvaWQgZndfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYpOworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gZGV2aWNlLT5jYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIFRha2UgdGhlIGNhcmQgbG9jayBzbyB3ZSBkb24ndCBzZXQgdGhpcyB0byBOVUxMIHdoaWxlIGEKKwkgKiBGV19OT0RFX1VQREFURUQgY2FsbGJhY2sgaXMgYmVpbmcgaGFuZGxlZCBvciB3aGlsZSB0aGUKKwkgKiBidXMgbWFuYWdlciB3b3JrIGxvb2tzIGF0IHRoaXMgbm9kZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWRldmljZS0+bm9kZS0+ZGF0YSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCisJZndfbm9kZV9wdXQoZGV2aWNlLT5ub2RlKTsKKwlrZnJlZShkZXZpY2UtPmNvbmZpZ19yb20pOworCWtmcmVlKGRldmljZSk7CisJZndfY2FyZF9wdXQoY2FyZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgZndfZGV2aWNlX3R5cGUgPSB7Ci0JLnJlbGVhc2UJPSBmd19kZXZpY2VfcmVsZWFzZSwKKwkucmVsZWFzZSA9IGZ3X2RldmljZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHZvaWQgZndfZGV2aWNlX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCB1cGRhdGVfdW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CisJc3RydWN0IGZ3X2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCBmd19kcml2ZXIgKilkZXYtPmRyaXZlcjsKKworCWlmIChpc19md191bml0KGRldikgJiYgZHJpdmVyICE9IE5VTEwgJiYgZHJpdmVyLT51cGRhdGUgIT0gTlVMTCkgeworCQlkb3duKCZkZXYtPnNlbSk7CisJCWRyaXZlci0+dXBkYXRlKHVuaXQpOworCQl1cCgmZGV2LT5zZW0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmd19kZXZpY2VfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2RldmljZSwgd29yay53b3JrKTsKKworCWZ3X2RldmljZV9jZGV2X3VwZGF0ZShkZXZpY2UpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2aWNlLT5kZXZpY2UsIE5VTEwsIHVwZGF0ZV91bml0KTsKK30KIAogLyoKICAqIElmIGEgZGV2aWNlIHdhcyBwZW5kaW5nIGZvciBkZWxldGlvbiBiZWNhdXNlIGl0cyBub2RlIHdlbnQgYXdheSBidXQgaXRzCkBAIC03MzUsMTIgKzc1Niw1MCBAQAogCXJldHVybiBtYXRjaDsKIH0KIAorZW51bSB7IEJDX1VOS05PV04gPSAwLCBCQ19VTklNUExFTUVOVEVELCBCQ19JTVBMRU1FTlRFRCwgfTsKKwordm9pZCBmd19kZXZpY2Vfc2V0X2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CisJX19iZTMyIGRhdGE7CisJaW50IHJjb2RlOworCisJaWYgKCFjYXJkLT5icm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQpCisJCXJldHVybjsKKworCWlmIChkZXZpY2UtPmJjX2ltcGxlbWVudGVkID09IEJDX1VOS05PV04pIHsKKwkJcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QsCisJCQkJZGV2aWNlLT5ub2RlX2lkLCBnZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CUk9BRENBU1RfQ0hBTk5FTCwKKwkJCQkmZGF0YSwgNCk7CisJCXN3aXRjaCAocmNvZGUpIHsKKwkJY2FzZSBSQ09ERV9DT01QTEVURToKKwkJCWlmIChkYXRhICYgY3B1X3RvX2JlMzIoMSA8PCAzMSkpIHsKKwkJCQlkZXZpY2UtPmJjX2ltcGxlbWVudGVkID0gQkNfSU1QTEVNRU5URUQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCB0byBjYXNlIGFkZHJlc3MgZXJyb3IgKi8KKwkJY2FzZSBSQ09ERV9BRERSRVNTX0VSUk9SOgorCQkJZGV2aWNlLT5iY19pbXBsZW1lbnRlZCA9IEJDX1VOSU1QTEVNRU5URUQ7CisJCX0KKwl9CisKKwlpZiAoZGV2aWNlLT5iY19pbXBsZW1lbnRlZCA9PSBCQ19JTVBMRU1FTlRFRCkgeworCQlkYXRhID0gY3B1X3RvX2JlMzIoQlJPQURDQVNUX0NIQU5ORUxfSU5JVElBTCB8CisJCQkJICAgQlJPQURDQVNUX0NIQU5ORUxfVkFMSUQpOworCQlmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAorCQkJCWRldmljZS0+bm9kZV9pZCwgZ2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlJPQURDQVNUX0NIQU5ORUwsCisJCQkJJmRhdGEsIDQpOworCX0KK30KKwogc3RhdGljIHZvaWQgZndfZGV2aWNlX2luaXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOwogCXN0cnVjdCBkZXZpY2UgKnJldml2ZWRfZGV2OwotCWludCBtaW5vciwgZXJyOworCWludCBtaW5vciwgcmV0OwogCiAJLyoKIAkgKiBBbGwgZmFpbHVyZSBwYXRocyBoZXJlIHNldCBub2RlLT5kYXRhIHRvIE5VTEwsIHNvIHRoYXQgd2UKQEAgLTc3NiwxMiArODM1LDEyIEBACiAKIAlmd19kZXZpY2VfZ2V0KGRldmljZSk7CiAJZG93bl93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKLQllcnIgPSBpZHJfcHJlX2dldCgmZndfZGV2aWNlX2lkciwgR0ZQX0tFUk5FTCkgPworCXJldCA9IGlkcl9wcmVfZ2V0KCZmd19kZXZpY2VfaWRyLCBHRlBfS0VSTkVMKSA/CiAJICAgICAgaWRyX2dldF9uZXcoJmZ3X2RldmljZV9pZHIsIGRldmljZSwgJm1pbm9yKSA6CiAJICAgICAgLUVOT01FTTsKIAl1cF93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKIAotCWlmIChlcnIgPCAwKQorCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCiAJZGV2aWNlLT5kZXZpY2UuYnVzID0gJmZ3X2J1c190eXBlOwpAQCAtODI4LDYgKzg4Nyw4IEBACiAJCQkJICBkZXZpY2UtPmNvbmZpZ19yb21bM10sIGRldmljZS0+Y29uZmlnX3JvbVs0XSwKIAkJCQkgIDEgPDwgZGV2aWNlLT5tYXhfc3BlZWQpOwogCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA9IDA7CisKKwkJZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbChkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbik7CiAJfQogCiAJLyoKQEAgLTg1MSwyOSArOTEyLDYgQEAKIAlwdXRfZGV2aWNlKCZkZXZpY2UtPmRldmljZSk7CS8qIG91ciByZWZlcmVuY2UgKi8KIH0KIAotc3RhdGljIGludCB1cGRhdGVfdW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7Ci0Jc3RydWN0IGZ3X2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCBmd19kcml2ZXIgKilkZXYtPmRyaXZlcjsKLQotCWlmIChpc19md191bml0KGRldikgJiYgZHJpdmVyICE9IE5VTEwgJiYgZHJpdmVyLT51cGRhdGUgIT0gTlVMTCkgewotCQlkb3duKCZkZXYtPnNlbSk7Ci0JCWRyaXZlci0+dXBkYXRlKHVuaXQpOwotCQl1cCgmZGV2LT5zZW0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBmd19kZXZpY2VfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2RldmljZSwgd29yay53b3JrKTsKLQotCWZ3X2RldmljZV9jZGV2X3VwZGF0ZShkZXZpY2UpOwotCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2aWNlLT5kZXZpY2UsIE5VTEwsIHVwZGF0ZV91bml0KTsKLX0KLQogZW51bSB7CiAJUkVSRUFEX0JJQl9FUlJPUiwKIAlSRVJFQURfQklCX0dPTkUsCkBAIC04OTQsNyArOTMyLDcgQEAKIAkJaWYgKGkgPT0gMCAmJiBxID09IDApCiAJCQlyZXR1cm4gUkVSRUFEX0JJQl9HT05FOwogCi0JCWlmIChpID4gZGV2aWNlLT5jb25maWdfcm9tX2xlbmd0aCB8fCBxICE9IGRldmljZS0+Y29uZmlnX3JvbVtpXSkKKwkJaWYgKHEgIT0gZGV2aWNlLT5jb25maWdfcm9tW2ldKQogCQkJcmV0dXJuIFJFUkVBRF9CSUJfQ0hBTkdFRDsKIAl9CiAKQEAgLTEwMDQsNiArMTA0Miw3IEBACiAJCWRldmljZS0+bm9kZSA9IGZ3X25vZGVfZ2V0KG5vZGUpOwogCQlkZXZpY2UtPm5vZGVfaWQgPSBub2RlLT5ub2RlX2lkOwogCQlkZXZpY2UtPmdlbmVyYXRpb24gPSBjYXJkLT5nZW5lcmF0aW9uOworCQltdXRleF9pbml0KCZkZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIAkJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+Y2xpZW50X2xpc3QpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaAppbmRleCA4ZWY2ZWMyLi45NzU4ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmgKQEAgLTE5LDEwICsxOSwxNyBAQAogI2lmbmRlZiBfX2Z3X2RldmljZV9oCiAjZGVmaW5lIF9fZndfZGV2aWNlX2gKIAorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBlbnVtIGZ3X2RldmljZV9zdGF0ZSB7CkBAIC0zOCw2ICs0NSw5IEBACiAJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbMTFdOwogfTsKIAorc3RydWN0IGZ3X25vZGU7CitzdHJ1Y3QgZndfY2FyZDsKKwogLyoKICAqIE5vdGUsIGZ3X2RldmljZS5nZW5lcmF0aW9uIGFsd2F5cyBoYXMgdG8gYmUgcmVhZCBiZWZvcmUgZndfZGV2aWNlLm5vZGVfaWQuCiAgKiBVc2UgU01QIG1lbW9yeSBiYXJyaWVycyB0byBlbnN1cmUgdGhpcy4gIE90aGVyd2lzZSByZXF1ZXN0cyB3aWxsIGJlIHNlbnQKQEAgLTYxLDEzICs3MSwxOCBAQAogCWludCBub2RlX2lkOwogCWludCBnZW5lcmF0aW9uOwogCXVuc2lnbmVkIG1heF9zcGVlZDsKLQlib29sIGNtYzsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKKworCXN0cnVjdCBtdXRleCBjbGllbnRfbGlzdF9tdXRleDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsaWVudF9saXN0OworCiAJdTMyICpjb25maWdfcm9tOwogCXNpemVfdCBjb25maWdfcm9tX2xlbmd0aDsKIAlpbnQgY29uZmlnX3JvbV9yZXRyaWVzOworCXVuc2lnbmVkIGNtYzoxOworCXVuc2lnbmVkIGJjX2ltcGxlbWVudGVkOjI7CisKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCBhdHRyaWJ1dGVfZ3JvdXA7CiB9OwpAQCAtOTYsNiArMTExLDcgQEAKIAogc3RydWN0IGZ3X2RldmljZSAqZndfZGV2aWNlX2dldF9ieV9kZXZ0KGRldl90IGRldnQpOwogaW50IGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKTsKK3ZvaWQgZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKTsKIAogdm9pZCBmd19kZXZpY2VfY2Rldl91cGRhdGUoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKTsKIHZvaWQgZndfZGV2aWNlX2NkZXZfcmVtb3ZlKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CkBAIC0xNzYsOCArMTkyLDcgQEAKIAljb25zdCBzdHJ1Y3QgZndfZGV2aWNlX2lkICppZF90YWJsZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2RyaXZlciAqCi1md19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2RyaXZlciAqZndfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBmd19kcml2ZXIsIGRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYwppbmRleCBlMTRjMDNkLi4yYmFmMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctaXNvLmMKQEAgLTEsNSArMSw3IEBACiAvKgotICogSXNvY2hyb25vdXMgSU8gZnVuY3Rpb25hbGl0eQorICogSXNvY2hyb25vdXMgSS9PIGZ1bmN0aW9uYWxpdHk6CisgKiAgIC0gSXNvY2hyb25vdXMgRE1BIGNvbnRleHQgbWFuYWdlbWVudAorICogICAtIElzb2Nocm9ub3VzIGJ1cyByZXNvdXJjZSBtYW5hZ2VtZW50IChjaGFubmVscywgYmFuZHdpZHRoKSwgY2xpZW50IHNpZGUKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4KICAqCkBAIC0xOCwyMSArMjAsMjUgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAotI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKLSNpbmNsdWRlICJmdy1kZXZpY2UuaCIKKyNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgogCi1pbnQKLWZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJICAgaW50IHBhZ2VfY291bnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKy8qCisgKiBJc29jaHJvbm91cyBETUEgY29udGV4dCBtYW5hZ2VtZW50CisgKi8KKworaW50IGZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgIGludCBwYWdlX2NvdW50LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JaW50IGksIGosIHJldHZhbCA9IC1FTk9NRU07CisJaW50IGksIGo7CiAJZG1hX2FkZHJfdCBhZGRyZXNzOwogCiAJYnVmZmVyLT5wYWdlX2NvdW50ID0gcGFnZV9jb3VudDsKQEAgLTY5LDE5ICs3NSwyMSBAQAogCWtmcmVlKGJ1ZmZlci0+cGFnZXMpOwogIG91dDoKIAlidWZmZXItPnBhZ2VzID0gTlVMTDsKLQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIGludCBmd19pc29fYnVmZmVyX21hcChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOwotCWludCBpLCByZXR2YWw7CisJaW50IGksIGVycjsKIAogCXVhZGRyID0gdm1hLT52bV9zdGFydDsKIAlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLT5wYWdlX2NvdW50OyBpKyspIHsKLQkJcmV0dmFsID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCB1YWRkciwgYnVmZmVyLT5wYWdlc1tpXSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlyZXR1cm4gcmV0dmFsOworCQllcnIgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHVhZGRyLCBidWZmZXItPnBhZ2VzW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJdWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIApAQCAtMTA1LDE0ICsxMTMsMTQgQEAKIAlidWZmZXItPnBhZ2VzID0gTlVMTDsKIH0KIAotc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKLWZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHR5cGUsCi0JCSAgICAgIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKLQkJICAgICAgZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCitzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJaW50IHR5cGUsIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKKwkJZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHg7CiAKLQljdHggPSBjYXJkLT5kcml2ZXItPmFsbG9jYXRlX2lzb19jb250ZXh0KGNhcmQsIHR5cGUsIGhlYWRlcl9zaXplKTsKKwljdHggPSBjYXJkLT5kcml2ZXItPmFsbG9jYXRlX2lzb19jb250ZXh0KGNhcmQsCisJCQkJCQkgdHlwZSwgY2hhbm5lbCwgaGVhZGVyX3NpemUpOwogCWlmIChJU19FUlIoY3R4KSkKIAkJcmV0dXJuIGN0eDsKIApAQCAtMTM0LDI1ICsxNDIsMTg2IEBACiAJY2FyZC0+ZHJpdmVyLT5mcmVlX2lzb19jb250ZXh0KGN0eCk7CiB9CiAKLWludAotZndfaXNvX2NvbnRleHRfc3RhcnQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKQoraW50IGZ3X2lzb19jb250ZXh0X3N0YXJ0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkJIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKQogewogCXJldHVybiBjdHgtPmNhcmQtPmRyaXZlci0+c3RhcnRfaXNvKGN0eCwgY3ljbGUsIHN5bmMsIHRhZ3MpOwogfQogCi1pbnQKLWZ3X2lzb19jb250ZXh0X3F1ZXVlKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAotCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitpbnQgZndfaXNvX2NvbnRleHRfcXVldWUoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCisJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCSBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGN0eC0+Y2FyZDsKIAogCXJldHVybiBjYXJkLT5kcml2ZXItPnF1ZXVlX2lzbyhjdHgsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKIH0KIAotaW50Ci1md19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQoraW50IGZ3X2lzb19jb250ZXh0X3N0b3Aoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpCiB7CiAJcmV0dXJuIGN0eC0+Y2FyZC0+ZHJpdmVyLT5zdG9wX2lzbyhjdHgpOwogfQorCisvKgorICogSXNvY2hyb25vdXMgYnVzIHJlc291cmNlIG1hbmFnZW1lbnQgKGNoYW5uZWxzLCBiYW5kd2lkdGgpLCBjbGllbnQgc2lkZQorICovCisKK3N0YXRpYyBpbnQgbWFuYWdlX2JhbmR3aWR0aChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGlybV9pZCwgaW50IGdlbmVyYXRpb24sCisJCQkgICAgaW50IGJhbmR3aWR0aCwgYm9vbCBhbGxvY2F0ZSkKK3sKKwlfX2JlMzIgZGF0YVsyXTsKKwlpbnQgdHJ5LCBuZXcsIG9sZCA9IGFsbG9jYXRlID8gQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMIDogMDsKKworCS8qCisJICogT24gYSAxMzk0YSBJUk0gd2l0aCBsb3cgY29udGVudGlvbiwgdHJ5IDwgMSBpcyBlbm91Z2guCisJICogT24gYSAxMzk0LTE5OTUgSVJNLCB3ZSBuZWVkIGF0IGxlYXN0IHRyeSA8IDIuCisJICogTGV0J3MganVzdCBkbyB0cnkgPCA1LgorCSAqLworCWZvciAodHJ5ID0gMDsgdHJ5IDwgNTsgdHJ5KyspIHsKKwkJbmV3ID0gYWxsb2NhdGUgPyBvbGQgLSBiYW5kd2lkdGggOiBvbGQgKyBiYW5kd2lkdGg7CisJCWlmIChuZXcgPCAwIHx8IG5ldyA+IEJBTkRXSURUSF9BVkFJTEFCTEVfSU5JVElBTCkKKwkJCWJyZWFrOworCisJCWRhdGFbMF0gPSBjcHVfdG9fYmUzMihvbGQpOworCQlkYXRhWzFdID0gY3B1X3RvX2JlMzIobmV3KTsKKwkJc3dpdGNoIChmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCisJCQkJaXJtX2lkLCBnZW5lcmF0aW9uLCBTQ09ERV8xMDAsCisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQkFORFdJRFRIX0FWQUlMQUJMRSwKKwkJCQlkYXRhLCBzaXplb2YoZGF0YSkpKSB7CisJCWNhc2UgUkNPREVfR0VORVJBVElPTjoKKwkJCS8qIEEgZ2VuZXJhdGlvbiBjaGFuZ2UgZnJlZXMgYWxsIGJhbmR3aWR0aC4gKi8KKwkJCXJldHVybiBhbGxvY2F0ZSA/IC1FQUdBSU4gOiBiYW5kd2lkdGg7CisKKwkJY2FzZSBSQ09ERV9DT01QTEVURToKKwkJCWlmIChiZTMyX3RvX2NwdXAoZGF0YSkgPT0gb2xkKQorCQkJCXJldHVybiBiYW5kd2lkdGg7CisKKwkJCW9sZCA9IGJlMzJfdG9fY3B1cChkYXRhKTsKKwkJCS8qIEZhbGwgdGhyb3VnaC4gKi8KKwkJfQorCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IG1hbmFnZV9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgaXJtX2lkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSAgdTMyIGNoYW5uZWxzX21hc2ssIHU2NCBvZmZzZXQsIGJvb2wgYWxsb2NhdGUpCit7CisJX19iZTMyIGRhdGFbMl0sIGMsIGFsbCwgb2xkOworCWludCBpLCByZXRyeSA9IDU7CisKKwlvbGQgPSBhbGwgPSBhbGxvY2F0ZSA/IGNwdV90b19iZTMyKH4wKSA6IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoIShjaGFubmVsc19tYXNrICYgMSA8PCBpKSkKKwkJCWNvbnRpbnVlOworCisJCWMgPSBjcHVfdG9fYmUzMigxIDw8ICgzMSAtIGkpKTsKKwkJaWYgKChvbGQgJiBjKSAhPSAoYWxsICYgYykpCisJCQljb250aW51ZTsKKworCQlkYXRhWzBdID0gb2xkOworCQlkYXRhWzFdID0gb2xkIF4gYzsKKwkJc3dpdGNoIChmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCisJCQkJCSAgIGlybV9pZCwgZ2VuZXJhdGlvbiwgU0NPREVfMTAwLAorCQkJCQkgICBvZmZzZXQsIGRhdGEsIHNpemVvZihkYXRhKSkpIHsKKwkJY2FzZSBSQ09ERV9HRU5FUkFUSU9OOgorCQkJLyogQSBnZW5lcmF0aW9uIGNoYW5nZSBmcmVlcyBhbGwgY2hhbm5lbHMuICovCisJCQlyZXR1cm4gYWxsb2NhdGUgPyAtRUFHQUlOIDogaTsKKworCQljYXNlIFJDT0RFX0NPTVBMRVRFOgorCQkJaWYgKGRhdGFbMF0gPT0gb2xkKQorCQkJCXJldHVybiBpOworCisJCQlvbGQgPSBkYXRhWzBdOworCisJCQkvKiBJcyB0aGUgSVJNIDEzOTRhLTIwMDAgY29tcGxpYW50PyAqLworCQkJaWYgKChkYXRhWzBdICYgYykgPT0gKGRhdGFbMV0gJiBjKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogMTM5NC0xOTk1IElSTSwgZmFsbCB0aHJvdWdoIHRvIHJldHJ5LiAqLworCQlkZWZhdWx0OgorCQkJaWYgKHJldHJ5LS0pCisJCQkJaS0tOworCQl9CisJfQorCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGVfY2hhbm5lbChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGlybV9pZCwKKwkJCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IGNoYW5uZWwpCit7CisJdTMyIG1hc2s7CisJdTY0IG9mZnNldDsKKworCW1hc2sgPSBjaGFubmVsIDwgMzIgPyAxIDw8IGNoYW5uZWwgOiAxIDw8IChjaGFubmVsIC0gMzIpOworCW9mZnNldCA9IGNoYW5uZWwgPCAzMiA/IENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9ISSA6CisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0xPOworCisJbWFuYWdlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBtYXNrLCBvZmZzZXQsIGZhbHNlKTsKK30KKworLyoqCisgKiBmd19pc29fcmVzb3VyY2VfbWFuYWdlIC0gQWxsb2NhdGUgb3IgZGVhbGxvY2F0ZSBhIGNoYW5uZWwgYW5kL29yIGJhbmR3aWR0aAorICoKKyAqIEluIHBhcmFtZXRlcnM6IGNhcmQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX21hc2ssIGJhbmR3aWR0aCwgYWxsb2NhdGUKKyAqIE91dCBwYXJhbWV0ZXJzOiBjaGFubmVsLCBiYW5kd2lkdGgKKyAqIFRoaXMgZnVuY3Rpb24gYmxvY2tzIChzbGVlcHMpIGR1cmluZyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIElSTS4KKyAqCisgKiBBbGxvY2F0ZXMgb3IgZGVhbGxvY2F0ZXMgYXQgbW9zdCBvbmUgY2hhbm5lbCBvdXQgb2YgY2hhbm5lbHNfbWFzay4KKyAqIGNoYW5uZWxzX21hc2sgaXMgYSBiaXRmaWVsZCB3aXRoIE1TQiBmb3IgY2hhbm5lbCA2MyBhbmQgTFNCIGZvciBjaGFubmVsIDAuCisgKiAoTm90ZSwgdGhlIElSTSdzIENIQU5ORUxTX0FWQUlMQUJMRSBpcyBhIGJpZy1lbmRpYW4gYml0ZmllbGQgd2l0aCBNU0IgZm9yCisgKiBjaGFubmVsIDAgYW5kIExTQiBmb3IgY2hhbm5lbCA2My4pCisgKiBBbGxvY2F0ZXMgb3IgZGVhbGxvY2F0ZXMgYXMgbWFueSBiYW5kd2lkdGggYWxsb2NhdGlvbiB1bml0cyBhcyBzcGVjaWZpZWQuCisgKgorICogUmV0dXJucyBjaGFubmVsIDwgMCBpZiBubyBjaGFubmVsIHdhcyBhbGxvY2F0ZWQgb3IgZGVhbGxvY2F0ZWQuCisgKiBSZXR1cm5zIGJhbmR3aWR0aCA9IDAgaWYgbm8gYmFuZHdpZHRoIHdhcyBhbGxvY2F0ZWQgb3IgZGVhbGxvY2F0ZWQuCisgKgorICogSWYgZ2VuZXJhdGlvbiBpcyBzdGFsZSwgZGVhbGxvY2F0aW9ucyBzdWNjZWVkIGJ1dCBhbGxvY2F0aW9ucyBmYWlsIHdpdGgKKyAqIGNoYW5uZWwgPSAtRUFHQUlOLgorICoKKyAqIElmIGNoYW5uZWwgYWxsb2NhdGlvbiBmYWlscywgbm8gYmFuZHdpZHRoIHdpbGwgYmUgYWxsb2NhdGVkIGVpdGhlci4KKyAqIElmIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZhaWxzLCBubyBjaGFubmVsIHdpbGwgYmUgYWxsb2NhdGVkIGVpdGhlci4KKyAqIEJ1dCBkZWFsbG9jYXRpb25zIG9mIGNoYW5uZWwgYW5kIGJhbmR3aWR0aCBhcmUgdHJpZWQgaW5kZXBlbmRlbnRseQorICogb2YgZWFjaCBvdGhlcidzIHN1Y2Nlc3MuCisgKi8KK3ZvaWQgZndfaXNvX3Jlc291cmNlX21hbmFnZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGdlbmVyYXRpb24sCisJCQkgICAgdTY0IGNoYW5uZWxzX21hc2ssIGludCAqY2hhbm5lbCwgaW50ICpiYW5kd2lkdGgsCisJCQkgICAgYm9vbCBhbGxvY2F0ZSkKK3sKKwl1MzIgY2hhbm5lbHNfaGkgPSBjaGFubmVsc19tYXNrOwkvKiBjaGFubmVscyAzMS4uLjAgKi8KKwl1MzIgY2hhbm5lbHNfbG8gPSBjaGFubmVsc19tYXNrID4+IDMyOwkvKiBjaGFubmVscyA2My4uLjMyICovCisJaW50IGlybV9pZCwgcmV0LCBjID0gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCWlybV9pZCA9IGNhcmQtPmlybV9ub2RlLT5ub2RlX2lkOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CisKKwlpZiAoY2hhbm5lbHNfaGkpCisJCWMgPSBtYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX2hpLAorCQkgICAgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0hJLCBhbGxvY2F0ZSk7CisJaWYgKGNoYW5uZWxzX2xvICYmIGMgPCAwKSB7CisJCWMgPSBtYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX2xvLAorCQkgICAgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0xPLCBhbGxvY2F0ZSk7CisJCWlmIChjID49IDApCisJCQljICs9IDMyOworCX0KKwkqY2hhbm5lbCA9IGM7CisKKwlpZiAoYWxsb2NhdGUgJiYgY2hhbm5lbHNfbWFzayAhPSAwICYmIGMgPCAwKQorCQkqYmFuZHdpZHRoID0gMDsKKworCWlmICgqYmFuZHdpZHRoID09IDApCisJCXJldHVybjsKKworCXJldCA9IG1hbmFnZV9iYW5kd2lkdGgoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCAqYmFuZHdpZHRoLCBhbGxvY2F0ZSk7CisJaWYgKHJldCA8IDApCisJCSpiYW5kd2lkdGggPSAwOworCisJaWYgKGFsbG9jYXRlICYmIHJldCA8IDAgJiYgYyA+PSAwKSB7CisJCWRlYWxsb2NhdGVfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGMpOworCQkqY2hhbm5lbCA9IHJldDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LW9oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCmluZGV4IDZkMTk4MjguLjExODBkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCkBAIC0yMDUsNiArMjA1LDcgQEAKIAogCXUzMiBpdF9jb250ZXh0X21hc2s7CiAJc3RydWN0IGlzb19jb250ZXh0ICppdF9jb250ZXh0X2xpc3Q7CisJdTY0IGlyX2NvbnRleHRfY2hhbm5lbHM7CiAJdTMyIGlyX2NvbnRleHRfbWFzazsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmlyX2NvbnRleHRfbGlzdDsKIH07CkBAIC00NDEsOSArNDQyLDggQEAKIAlyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9WZXJzaW9uKTsKIH0KIAotc3RhdGljIGludAotb2hjaV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHIsCi0JCSAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQorc3RhdGljIGludCBvaGNpX3VwZGF0ZV9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkciwKKwkJCSAgICAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAl1MzIgdmFsLCBvbGQ7CkBAIC02NTgsOCArNjU4LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWFyX2NvbnRleHRfaW5pdChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfb2hjaSAqb2hjaSwgdTMyIHJlZ3MpCitzdGF0aWMgaW50IGFyX2NvbnRleHRfaW5pdChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LAorCQkJICAgc3RydWN0IGZ3X29oY2kgKm9oY2ksIHUzMiByZWdzKQogewogCXN0cnVjdCBhcl9idWZmZXIgYWI7CiAKQEAgLTY5MCw4ICs2OTAsNyBAQAogCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOwogfQogCi1zdGF0aWMgc3RydWN0IGRlc2NyaXB0b3IgKgotZmluZF9icmFuY2hfZGVzY3JpcHRvcihzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgaW50IHopCitzdGF0aWMgc3RydWN0IGRlc2NyaXB0b3IgKmZpbmRfYnJhbmNoX2Rlc2NyaXB0b3Ioc3RydWN0IGRlc2NyaXB0b3IgKmQsIGludCB6KQogewogCWludCBiLCBrZXk7CiAKQEAgLTc1MSw4ICs3NTAsNyBAQAogICogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgZnJlZSBidWZmZXJzIGZvciB0aGlzCiAgKiBjb250ZXh0LiAgTXVzdCBiZSBjYWxsZWQgd2l0aCBvaGNpLT5sb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyBpbnQKLWNvbnRleHRfYWRkX2J1ZmZlcihzdHJ1Y3QgY29udGV4dCAqY3R4KQorc3RhdGljIGludCBjb250ZXh0X2FkZF9idWZmZXIoc3RydWN0IGNvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl9idWZmZXIgKmRlc2M7CiAJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihidXNfYWRkcik7CkBAIC03ODEsOSArNzc5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY29udGV4dF9pbml0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLAotCSAgICAgdTMyIHJlZ3MsIGRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3N0YXRpYyBpbnQgY29udGV4dF9pbml0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLAorCQkJdTMyIHJlZ3MsIGRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjaykKIHsKIAljdHgtPm9oY2kgPSBvaGNpOwogCWN0eC0+cmVncyA9IHJlZ3M7CkBAIC04MTQsOCArODExLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWNvbnRleHRfcmVsZWFzZShzdHJ1Y3QgY29udGV4dCAqY3R4KQorc3RhdGljIHZvaWQgY29udGV4dF9yZWxlYXNlKHN0cnVjdCBjb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSAmY3R4LT5vaGNpLT5jYXJkOwogCXN0cnVjdCBkZXNjcmlwdG9yX2J1ZmZlciAqZGVzYywgKnRtcDsKQEAgLTgyNyw4ICs4MjMsOCBAQAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG9oY2ktPmxvY2sgaGVsZCAqLwotc3RhdGljIHN0cnVjdCBkZXNjcmlwdG9yICoKLWNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKHN0cnVjdCBjb250ZXh0ICpjdHgsIGludCB6LCBkbWFfYWRkcl90ICpkX2J1cykKK3N0YXRpYyBzdHJ1Y3QgZGVzY3JpcHRvciAqY29udGV4dF9nZXRfZGVzY3JpcHRvcnMoc3RydWN0IGNvbnRleHQgKmN0eCwKKwkJCQkJCSAgaW50IHosIGRtYV9hZGRyX3QgKmRfYnVzKQogewogCXN0cnVjdCBkZXNjcmlwdG9yICpkID0gTlVMTDsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl9idWZmZXIgKmRlc2MgPSBjdHgtPmJ1ZmZlcl90YWlsOwpAQCAtOTEyLDggKzkwOCw4IEBACiAgKiBNdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCB0aGUgb2NoaS0+bG9jayBoZWxkIHRvIGVuc3VyZSBwcm9wZXIKICAqIGdlbmVyYXRpb24gaGFuZGxpbmcgYW5kIGxvY2tpbmcgYXJvdW5kIHBhY2tldCBxdWV1ZSBtYW5pcHVsYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQKLWF0X2NvbnRleHRfcXVldWVfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyBpbnQgYXRfY29udGV4dF9xdWV1ZV9wYWNrZXQoc3RydWN0IGNvbnRleHQgKmN0eCwKKwkJCQkgICBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBjdHgtPm9oY2k7CiAJZG1hX2FkZHJfdCBkX2J1cywgdW5pbml0aWFsaXplZF92YXIocGF5bG9hZF9idXMpOwpAQCAtOTQwLDcgKzkzNiw5IEBACiAJICovCiAKIAloZWFkZXIgPSAoX19sZTMyICopICZkWzFdOwotCWlmIChwYWNrZXQtPmhlYWRlcl9sZW5ndGggPiA4KSB7CisJc3dpdGNoIChwYWNrZXQtPmhlYWRlcl9sZW5ndGgpIHsKKwljYXNlIDE2OgorCWNhc2UgMTI6CiAJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZikgfAogCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOwogCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMigocGFja2V0LT5oZWFkZXJbMV0gJiAweGZmZmYpIHwKQEAgLTk1NCwxMiArOTUyLDI3IEBACiAJCQloZWFkZXJbM10gPSAoX19mb3JjZSBfX2xlMzIpIHBhY2tldC0+aGVhZGVyWzNdOwogCiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYocGFja2V0LT5oZWFkZXJfbGVuZ3RoKTsKLQl9IGVsc2UgeworCQlicmVhazsKKworCWNhc2UgODoKIAkJaGVhZGVyWzBdID0gY3B1X3RvX2xlMzIoKE9IQ0kxMzk0X3BoeV90Y29kZSA8PCA0KSB8CiAJCQkJCShwYWNrZXQtPnNwZWVkIDw8IDE2KSk7CiAJCWhlYWRlclsxXSA9IGNwdV90b19sZTMyKHBhY2tldC0+aGVhZGVyWzBdKTsKIAkJaGVhZGVyWzJdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMV0pOwogCQlkWzBdLnJlcV9jb3VudCA9IGNwdV90b19sZTE2KDEyKTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZikgfAorCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOworCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZjAwMDApOworCQlkWzBdLnJlcV9jb3VudCA9IGNwdV90b19sZTE2KDgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIEJVRygpOyAqLworCQlwYWNrZXQtPmFjayA9IFJDT0RFX1NFTkRfRVJST1I7CisJCXJldHVybiAtMTsKIAl9CiAKIAlkcml2ZXJfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKikgJmRbM107CkBAIC0xMDk1LDggKzExMDgsOCBAQAogI2RlZmluZSBIRUFERVJfR0VUX0RBVEFfTEVOR1RIKHEpCSgoKHEpID4+IDE2KSAmIDB4ZmZmZikKICNkZWZpbmUgSEVBREVSX0dFVF9FWFRFTkRFRF9UQ09ERShxKQkoKChxKSA+PiAwKSAmIDB4ZmZmZikKIAotc3RhdGljIHZvaWQKLWhhbmRsZV9sb2NhbF9yb20oc3RydWN0IGZ3X29oY2kgKm9oY2ksIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKK3N0YXRpYyB2b2lkIGhhbmRsZV9sb2NhbF9yb20oc3RydWN0IGZ3X29oY2kgKm9oY2ksCisJCQkgICAgIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKIHsKIAlzdHJ1Y3QgZndfcGFja2V0IHJlc3BvbnNlOwogCWludCB0Y29kZSwgbGVuZ3RoLCBpOwpAQCAtMTEyMiw4ICsxMTM1LDggQEAKIAlmd19jb3JlX2hhbmRsZV9yZXNwb25zZSgmb2hjaS0+Y2FyZCwgJnJlc3BvbnNlKTsKIH0KIAotc3RhdGljIHZvaWQKLWhhbmRsZV9sb2NhbF9sb2NrKHN0cnVjdCBmd19vaGNpICpvaGNpLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIHUzMiBjc3IpCitzdGF0aWMgdm9pZCBoYW5kbGVfbG9jYWxfbG9jayhzdHJ1Y3QgZndfb2hjaSAqb2hjaSwKKwkJCSAgICAgIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKIHsKIAlzdHJ1Y3QgZndfcGFja2V0IHJlc3BvbnNlOwogCWludCB0Y29kZSwgbGVuZ3RoLCBleHRfdGNvZGUsIHNlbDsKQEAgLTExNjQsOCArMTE3Nyw3IEBACiAJZndfY29yZV9oYW5kbGVfcmVzcG9uc2UoJm9oY2ktPmNhcmQsICZyZXNwb25zZSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1oYW5kbGVfbG9jYWxfcmVxdWVzdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCitzdGF0aWMgdm9pZCBoYW5kbGVfbG9jYWxfcmVxdWVzdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJdTY0IG9mZnNldDsKIAl1MzIgY3NyOwpAQCAtMTIwNSwxMSArMTIxNywxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLWF0X2NvbnRleHRfdHJhbnNtaXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQorc3RhdGljIHZvaWQgYXRfY29udGV4dF90cmFuc21pdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0dmFsOworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5vaGNpLT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjAsMTAgKzEyMzEsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJldHZhbCA9IGF0X2NvbnRleHRfcXVldWVfcGFja2V0KGN0eCwgcGFja2V0KTsKKwlyZXQgPSBhdF9jb250ZXh0X3F1ZXVlX3BhY2tldChjdHgsIHBhY2tldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5vaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocmV0dmFsIDwgMCkKKwlpZiAocmV0IDwgMCkKIAkJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZjdHgtPm9oY2ktPmNhcmQsIHBhY2tldC0+YWNrKTsKIAogfQpAQCAtMTU5MCwxMiArMTYwMSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX3NldF9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgaW50IG9oY2lfc2V0X2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkgICAgICAgdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldHZhbCA9IC1FQlVTWTsKKwlpbnQgcmV0ID0gLUVCVVNZOwogCV9fYmUzMiAqbmV4dF9jb25maWdfcm9tOwogCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIobmV4dF9jb25maWdfcm9tX2J1cyk7CiAKQEAgLTE2NDksNyArMTY2MCw3IEBACiAKIAkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwKIAkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7Ci0JCXJldHZhbCA9IDA7CisJCXJldCA9IDA7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTY2MSwxMyArMTY3MiwxMyBAQAogCSAqIGNvbnRyb2xsZXIgY291bGQgbmVlZCB0byBhY2Nlc3MgaXQgYmVmb3JlIHRoZSBidXMgcmVzZXQKIAkgKiB0YWtlcyBlZmZlY3QuCiAJICovCi0JaWYgKHJldHZhbCA9PSAwKQorCWlmIChyZXQgPT0gMCkKIAkJZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIDEpOwogCWVsc2UKIAkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKIAkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9oY2lfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCkBAIC0xNjg5LDcgKzE3MDAsNyBAQAogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAlzdHJ1Y3QgY29udGV4dCAqY3R4ID0gJm9oY2ktPmF0X3JlcXVlc3RfY3R4OwogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGEgPSBwYWNrZXQtPmRyaXZlcl9kYXRhOwotCWludCByZXR2YWwgPSAtRU5PRU5UOworCWludCByZXQgPSAtRU5PRU5UOwogCiAJdGFza2xldF9kaXNhYmxlKCZjdHgtPnRhc2tsZXQpOwogCkBAIC0xNzA0LDIzICsxNzE1LDIyIEBACiAJZHJpdmVyX2RhdGEtPnBhY2tldCA9IE5VTEw7CiAJcGFja2V0LT5hY2sgPSBSQ09ERV9DQU5DRUxMRUQ7CiAJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZvaGNpLT5jYXJkLCBwYWNrZXQtPmFjayk7Ci0JcmV0dmFsID0gMDsKLQorCXJldCA9IDA7CiAgb3V0OgogCXRhc2tsZXRfZW5hYmxlKCZjdHgtPnRhc2tsZXQpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCBvaGNpX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCiB7CiAjaWZkZWYgQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQQogCXJldHVybiAwOwogI2Vsc2UKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbiwgcmV0dmFsID0gMDsKKwlpbnQgbiwgcmV0ID0gMDsKIAogCS8qCiAJICogRklYTUU6ICBNYWtlIHN1cmUgdGhpcyBiaXRtYXNrIGlzIGNsZWFyZWQgd2hlbiB3ZSBjbGVhciB0aGUgYnVzUmVzZXQKQEAgLTE3MzAsNyArMTc0MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmIChvaGNpLT5nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pIHsKLQkJcmV0dmFsID0gLUVTVEFMRTsKKwkJcmV0ID0gLUVTVEFMRTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzQ4LDEyICsxNzU4LDEyIEBACiAJZmx1c2hfd3JpdGVzKG9oY2kpOwogIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldHZhbDsKKworCXJldHVybiByZXQ7CiAjZW5kaWYgLyogQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQSAqLwogfQogCi1zdGF0aWMgdTY0Ci1vaGNpX2dldF9idXNfdGltZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3N0YXRpYyB1NjQgb2hjaV9nZXRfYnVzX3RpbWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOwogCXUzMiBjeWNsZV90aW1lOwpAQCAtMTc2NSw2ICsxNzc1LDI4IEBACiAJcmV0dXJuIGJ1c190aW1lOwogfQogCitzdGF0aWMgdm9pZCBjb3B5X2lzb19oZWFkZXJzKHN0cnVjdCBpc29fY29udGV4dCAqY3R4LCB2b2lkICpwKQoreworCWludCBpID0gY3R4LT5oZWFkZXJfbGVuZ3RoOworCisJaWYgKGkgKyBjdHgtPmJhc2UuaGVhZGVyX3NpemUgPiBQQUdFX1NJWkUpCisJCXJldHVybjsKKworCS8qCisJICogVGhlIGlzbyBoZWFkZXIgaXMgYnl0ZXN3YXBwZWQgdG8gbGl0dGxlIGVuZGlhbiBieQorCSAqIHRoZSBjb250cm9sbGVyLCBidXQgdGhlIHJlbWFpbmluZyBoZWFkZXIgcXVhZGxldHMKKwkgKiBhcmUgYmlnIGVuZGlhbi4gIFdlIHdhbnQgdG8gcHJlc2VudCBhbGwgdGhlIGhlYWRlcnMKKwkgKiBhcyBiaWcgZW5kaWFuLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlIGZpcnN0IHF1YWRsZXQuCisJICovCisJaWYgKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA+IDApCisJCSoodTMyICopIChjdHgtPmhlYWRlciArIGkpID0gX19zd2FiMzIoKih1MzIgKikgKHAgKyA0KSk7CisJaWYgKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA+IDQpCisJCSoodTMyICopIChjdHgtPmhlYWRlciArIGkgKyA0KSA9IF9fc3dhYjMyKCoodTMyICopIHApOworCWlmIChjdHgtPmJhc2UuaGVhZGVyX3NpemUgPiA4KQorCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgOCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDgpOworCWN0eC0+aGVhZGVyX2xlbmd0aCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX2lyX2R1YWxidWZmZXJfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAogCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKIAkJCQkgICAgICAgc3RydWN0IGRlc2NyaXB0b3IgKmxhc3QpCkBAIC0xNzc1LDcgKzE4MDcsNiBAQAogCV9fbGUzMiAqaXJfaGVhZGVyOwogCXNpemVfdCBoZWFkZXJfbGVuZ3RoOwogCXZvaWQgKnAsICplbmQ7Ci0JaW50IGk7CiAKIAlpZiAoZGItPmZpcnN0X3Jlc19jb3VudCAhPSAwICYmIGRiLT5zZWNvbmRfcmVzX2NvdW50ICE9IDApIHsKIAkJaWYgKGN0eC0+ZXhjZXNzX2J5dGVzIDw9IGxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVxX2NvdW50KSkgewpAQCAtMTc4OCwyNSArMTgxOSwxNCBAQAogCWhlYWRlcl9sZW5ndGggPSBsZTE2X3RvX2NwdShkYi0+Zmlyc3RfcmVxX2NvdW50KSAtCiAJCWxlMTZfdG9fY3B1KGRiLT5maXJzdF9yZXNfY291bnQpOwogCi0JaSA9IGN0eC0+aGVhZGVyX2xlbmd0aDsKIAlwID0gZGIgKyAxOwogCWVuZCA9IHAgKyBoZWFkZXJfbGVuZ3RoOwotCXdoaWxlIChwIDwgZW5kICYmIGkgKyBjdHgtPmJhc2UuaGVhZGVyX3NpemUgPD0gUEFHRV9TSVpFKSB7Ci0JCS8qCi0JCSAqIFRoZSBpc28gaGVhZGVyIGlzIGJ5dGVzd2FwcGVkIHRvIGxpdHRsZSBlbmRpYW4gYnkKLQkJICogdGhlIGNvbnRyb2xsZXIsIGJ1dCB0aGUgcmVtYWluaW5nIGhlYWRlciBxdWFkbGV0cwotCQkgKiBhcmUgYmlnIGVuZGlhbi4gIFdlIHdhbnQgdG8gcHJlc2VudCBhbGwgdGhlIGhlYWRlcnMKLQkJICogYXMgYmlnIGVuZGlhbiwgc28gd2UgaGF2ZSB0byBzd2FwIHRoZSBmaXJzdAotCQkgKiBxdWFkbGV0LgotCQkgKi8KLQkJKih1MzIgKikgKGN0eC0+aGVhZGVyICsgaSkgPSBfX3N3YWIzMigqKHUzMiAqKSAocCArIDQpKTsKLQkJbWVtY3B5KGN0eC0+aGVhZGVyICsgaSArIDQsIHAgKyA4LCBjdHgtPmJhc2UuaGVhZGVyX3NpemUgLSA0KTsKLQkJaSArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7CisJd2hpbGUgKHAgPCBlbmQpIHsKKwkJY29weV9pc29faGVhZGVycyhjdHgsIHApOwogCQljdHgtPmV4Y2Vzc19ieXRlcyArPQogCQkJKGxlMzJfdG9fY3B1KCooX19sZTMyICopKHAgKyA0KSkgPj4gMTYpICYgMHhmZmZmOwotCQlwICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSArIDQ7CisJCXAgKz0gbWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KTsKIAl9Ci0JY3R4LT5oZWFkZXJfbGVuZ3RoID0gaTsKIAogCWN0eC0+ZXhjZXNzX2J5dGVzIC09IGxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVxX2NvdW50KSAtCiAJCWxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVzX2NvdW50KTsKQEAgLTE4MzIsNyArMTg1Miw2IEBACiAJc3RydWN0IGRlc2NyaXB0b3IgKnBkOwogCV9fbGUzMiAqaXJfaGVhZGVyOwogCXZvaWQgKnA7Ci0JaW50IGk7CiAKIAlmb3IgKHBkID0gZDsgcGQgPD0gbGFzdDsgcGQrKykgewogCQlpZiAocGQtPnRyYW5zZmVyX3N0YXR1cykKQEAgLTE4NDIsMjEgKzE4NjEsOCBAQAogCQkvKiBEZXNjcmlwdG9yKHMpIG5vdCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24gKi8KIAkJcmV0dXJuIDA7CiAKLQlpICAgPSBjdHgtPmhlYWRlcl9sZW5ndGg7Ci0JcCAgID0gbGFzdCArIDE7Ci0KLQlpZiAoY3R4LT5iYXNlLmhlYWRlcl9zaXplID4gMCAmJgotCQkJaSArIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA8PSBQQUdFX1NJWkUpIHsKLQkJLyoKLQkJICogVGhlIGlzbyBoZWFkZXIgaXMgYnl0ZXN3YXBwZWQgdG8gbGl0dGxlIGVuZGlhbiBieQotCQkgKiB0aGUgY29udHJvbGxlciwgYnV0IHRoZSByZW1haW5pbmcgaGVhZGVyIHF1YWRsZXRzCi0JCSAqIGFyZSBiaWcgZW5kaWFuLiAgV2Ugd2FudCB0byBwcmVzZW50IGFsbCB0aGUgaGVhZGVycwotCQkgKiBhcyBiaWcgZW5kaWFuLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlIGZpcnN0IHF1YWRsZXQuCi0JCSAqLwotCQkqKHUzMiAqKSAoY3R4LT5oZWFkZXIgKyBpKSA9IF9fc3dhYjMyKCoodTMyICopIChwICsgNCkpOwotCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgNCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDQpOwotCQljdHgtPmhlYWRlcl9sZW5ndGggKz0gY3R4LT5iYXNlLmhlYWRlcl9zaXplOwotCX0KKwlwID0gbGFzdCArIDE7CisJY29weV9pc29faGVhZGVycyhjdHgsIHApOwogCiAJaWYgKGxlMTZfdG9fY3B1KGxhc3QtPmNvbnRyb2wpICYgREVTQ1JJUFRPUl9JUlFfQUxXQVlTKSB7CiAJCWlyX2hlYWRlciA9IChfX2xlMzIgKikgcDsKQEAgLTE4ODgsMjEgKzE4OTQsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBmd19pc29fY29udGV4dCAqCi1vaGNpX2FsbG9jYXRlX2lzb19jb250ZXh0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdHlwZSwgc2l6ZV90IGhlYWRlcl9zaXplKQorc3RhdGljIHN0cnVjdCBmd19pc29fY29udGV4dCAqb2hjaV9hbGxvY2F0ZV9pc29fY29udGV4dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQlpbnQgdHlwZSwgaW50IGNoYW5uZWwsIHNpemVfdCBoZWFkZXJfc2l6ZSkKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHgsICpsaXN0OwogCWRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl1NjQgKmNoYW5uZWxzLCBkb250X2NhcmUgPSB+MFVMTDsKIAl1MzIgKm1hc2ssIHJlZ3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaW5kZXgsIHJldHZhbCA9IC1FTk9NRU07CisJaW50IGluZGV4LCByZXQgPSAtRU5PTUVNOwogCiAJaWYgKHR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpIHsKKwkJY2hhbm5lbHMgPSAmZG9udF9jYXJlOwogCQltYXNrID0gJm9oY2ktPml0X2NvbnRleHRfbWFzazsKIAkJbGlzdCA9IG9oY2ktPml0X2NvbnRleHRfbGlzdDsKIAkJY2FsbGJhY2sgPSBoYW5kbGVfaXRfcGFja2V0OwogCX0gZWxzZSB7CisJCWNoYW5uZWxzID0gJm9oY2ktPmlyX2NvbnRleHRfY2hhbm5lbHM7CiAJCW1hc2sgPSAmb2hjaS0+aXJfY29udGV4dF9tYXNrOwogCQlsaXN0ID0gb2hjaS0+aXJfY29udGV4dF9saXN0OwogCQlpZiAob2hjaS0+dXNlX2R1YWxidWZmZXIpCkBAIC0xOTEyLDkgKzE5MjEsMTEgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwotCWluZGV4ID0gZmZzKCptYXNrKSAtIDE7Ci0JaWYgKGluZGV4ID49IDApCisJaW5kZXggPSAqY2hhbm5lbHMgJiAxVUxMIDw8IGNoYW5uZWwgPyBmZnMoKm1hc2spIC0gMSA6IC0xOworCWlmIChpbmRleCA+PSAwKSB7CisJCSpjaGFubmVscyAmPSB+KDFVTEwgPDwgY2hhbm5lbCk7CiAJCSptYXNrICY9IH4oMSA8PCBpbmRleCk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmIChpbmRleCA8IDApCkBAIC0xOTMyLDggKzE5NDMsOCBAQAogCWlmIChjdHgtPmhlYWRlciA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCXJldHZhbCA9IGNvbnRleHRfaW5pdCgmY3R4LT5jb250ZXh0LCBvaGNpLCByZWdzLCBjYWxsYmFjayk7Ci0JaWYgKHJldHZhbCA8IDApCisJcmV0ID0gY29udGV4dF9pbml0KCZjdHgtPmNvbnRleHQsIG9oY2ksIHJlZ3MsIGNhbGxiYWNrKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfd2l0aF9oZWFkZXI7CiAKIAlyZXR1cm4gJmN0eC0+YmFzZTsKQEAgLTE5NDUsNyArMTk1Niw3IEBACiAJKm1hc2sgfD0gMSA8PCBpbmRleDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQgb2hjaV9zdGFydF9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLApAQCAtMjAyNCwxNiArMjAzNSwxNiBAQAogCX0gZWxzZSB7CiAJCWluZGV4ID0gY3R4IC0gb2hjaS0+aXJfY29udGV4dF9saXN0OwogCQlvaGNpLT5pcl9jb250ZXh0X21hc2sgfD0gMSA8PCBpbmRleDsKKwkJb2hjaS0+aXJfY29udGV4dF9jaGFubmVscyB8PSAxVUxMIDw8IGJhc2UtPmNoYW5uZWw7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX3F1ZXVlX2lzb190cmFuc21pdChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCi0JCQlzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAotCQkJc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCXVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKK3N0YXRpYyBpbnQgb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCSAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkJICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCiB7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgKmxhc3QsICpwZDsKQEAgLTIxMjgsMTEgKzIxMzksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9kdWFsYnVmZmVyKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKLQkJCQkgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCQkJICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAotCQkJCSAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQorc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkJCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCiB7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSBOVUxMOwpAQCAtMjE1MSwxMSArMjE2MSwxMSBAQAogCXogPSAyOwogCiAJLyoKLQkgKiBUaGUgT0hDSSBjb250cm9sbGVyIHB1dHMgdGhlIHN0YXR1cyB3b3JkIGluIHRoZSBoZWFkZXIKLQkgKiBidWZmZXIgdG9vLCBzbyB3ZSBuZWVkIDQgZXh0cmEgYnl0ZXMgcGVyIHBhY2tldC4KKwkgKiBUaGUgT0hDSSBjb250cm9sbGVyIHB1dHMgdGhlIGlzb2Nocm9ub3VzIGhlYWRlciBhbmQgdHJhaWxlciBpbiB0aGUKKwkgKiBidWZmZXIsIHNvIHdlIG5lZWQgYXQgbGVhc3QgOCBieXRlcy4KIAkgKi8KIAlwYWNrZXRfY291bnQgPSBwLT5oZWFkZXJfbGVuZ3RoIC8gY3R4LT5iYXNlLmhlYWRlcl9zaXplOwotCWhlYWRlcl9zaXplID0gcGFja2V0X2NvdW50ICogKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSArIDQpOworCWhlYWRlcl9zaXplID0gcGFja2V0X2NvdW50ICogbWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KTsKIAogCS8qIEdldCBoZWFkZXIgc2l6ZSBpbiBudW1iZXIgb2YgZGVzY3JpcHRvcnMuICovCiAJaGVhZGVyX3ogPSBESVZfUk9VTkRfVVAoaGVhZGVyX3NpemUsIHNpemVvZigqZCkpOwpAQCAtMjE3Myw3ICsyMTgzLDggQEAKIAkJZGIgPSAoc3RydWN0IGRiX2Rlc2NyaXB0b3IgKikgZDsKIAkJZGItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihERVNDUklQVE9SX1NUQVRVUyB8CiAJCQkJCSAgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKLQkJZGItPmZpcnN0X3NpemUgPSBjcHVfdG9fbGUxNihjdHgtPmJhc2UuaGVhZGVyX3NpemUgKyA0KTsKKwkJZGItPmZpcnN0X3NpemUgPQorCQkgICAgY3B1X3RvX2xlMTYobWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KSk7CiAJCWlmIChwLT5za2lwICYmIHJlc3QgPT0gcC0+cGF5bG9hZF9sZW5ndGgpIHsKIAkJCWRiLT5jb250cm9sIHw9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfV0FJVCk7CiAJCQlkYi0+Zmlyc3RfcmVxX2NvdW50ID0gZGItPmZpcnN0X3NpemU7CkBAIC0yMjA4LDExICsyMjE5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCQkJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkJCQkJIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitzdGF0aWMgaW50IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCQlzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCQkJCQlzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJCQl1bnNpZ25lZCBsb25nIHBheWxvYWQpCiB7CiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqZCA9IE5VTEwsICpwZCA9IE5VTEw7CkBAIC0yMjIzLDExICsyMjMzLDExIEBACiAJaW50IHBhZ2UsIG9mZnNldCwgcGFja2V0X2NvdW50LCBoZWFkZXJfc2l6ZSwgcGF5bG9hZF9wZXJfYnVmZmVyOwogCiAJLyoKLQkgKiBUaGUgT0hDSSBjb250cm9sbGVyIHB1dHMgdGhlIHN0YXR1cyB3b3JkIGluIHRoZQotCSAqIGJ1ZmZlciB0b28sIHNvIHdlIG5lZWQgNCBleHRyYSBieXRlcyBwZXIgcGFja2V0LgorCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgaXNvY2hyb25vdXMgaGVhZGVyIGFuZCB0cmFpbGVyIGluIHRoZQorCSAqIGJ1ZmZlciwgc28gd2UgbmVlZCBhdCBsZWFzdCA4IGJ5dGVzLgogCSAqLwogCXBhY2tldF9jb3VudCA9IHAtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Ci0JaGVhZGVyX3NpemUgID0gY3R4LT5iYXNlLmhlYWRlcl9zaXplICsgNDsKKwloZWFkZXJfc2l6ZSAgPSBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwogCiAJLyogR2V0IGhlYWRlciBzaXplIGluIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gKi8KIAloZWFkZXJfeiA9IERJVl9ST1VORF9VUChoZWFkZXJfc2l6ZSwgc2l6ZW9mKCpkKSk7CkBAIC0yMjg2LDI5ICsyMjk2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfcXVldWVfaXNvKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKLQkgICAgICAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkgICAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQorc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzbyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCisJCQkgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+Y29udGV4dC5vaGNpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGJhc2UtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpCi0JCXJldHZhbCA9IG9oY2lfcXVldWVfaXNvX3RyYW5zbWl0KGJhc2UsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKKwkJcmV0ID0gb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoYmFzZSwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOwogCWVsc2UgaWYgKGN0eC0+Y29udGV4dC5vaGNpLT51c2VfZHVhbGJ1ZmZlcikKLQkJcmV0dmFsID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9kdWFsYnVmZmVyKGJhc2UsIHBhY2tldCwKLQkJCQkJCQkgYnVmZmVyLCBwYXlsb2FkKTsKKwkJcmV0ID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9kdWFsYnVmZmVyKGJhc2UsIHBhY2tldCwKKwkJCQkJCQlidWZmZXIsIHBheWxvYWQpOwogCWVsc2UKLQkJcmV0dmFsID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9wYWNrZXRfcGVyX2J1ZmZlcihiYXNlLCBwYWNrZXQsCi0JCQkJCQkJCWJ1ZmZlciwKLQkJCQkJCQkJcGF5bG9hZCk7CisJCXJldCA9IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoYmFzZSwgcGFja2V0LAorCQkJCQkJCWJ1ZmZlciwgcGF5bG9hZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5jb250ZXh0Lm9oY2ktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciBvaGNpX2RyaXZlciA9IHsKQEAgLTIzNTcsOCArMjM2NSw4IEBACiAjZGVmaW5lIG9oY2lfcG1hY19vZmYoZGV2KQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpOwogCXUzMiBidXNfb3B0aW9ucywgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQsIHZlcnNpb247CkBAIC0yNDQwLDYgKzI0NDgsNyBAQAogCW9oY2ktPml0X2NvbnRleHRfbGlzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tTZXQsIH4wKTsKKwlvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzID0gfjBVTEw7CiAJb2hjaS0+aXJfY29udGV4dF9tYXNrID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tTZXQpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza0NsZWFyLCB+MCk7CiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogaHdlaWdodDMyKG9oY2ktPmlyX2NvbnRleHRfbWFzayk7CkBAIC0yNDY3LDExICsyNDc2LDEyIEBACiAJCXJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0dVSURMbyk7CiAKIAllcnIgPSBmd19jYXJkX2FkZCgmb2hjaS0+Y2FyZCwgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQsIGd1aWQpOwotCWlmIChlcnIgPCAwKQorCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9zZWxmX2lkOwogCiAJZndfbm90aWZ5KCJBZGRlZCBmdy1vaGNpIGRldmljZSAlcywgT0hDSSB2ZXJzaW9uICV4LiV4XG4iLAogCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmKTsKKwogCXJldHVybiAwOwogCiAgZmFpbF9zZWxmX2lkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwppbmRleCBjNzFjNDQxLi4yYmNmNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwpAQCAtMzkyLDIwICszOTIsMTggQEAKIAl9CiB9OwogCi1zdGF0aWMgdm9pZAotZnJlZV9vcmIoc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgdm9pZCBmcmVlX29yYihzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3Qgc2JwMl9vcmIgKm9yYiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2JwMl9vcmIsIGtyZWYpOwogCiAJa2ZyZWUob3JiKTsKIH0KIAotc3RhdGljIHZvaWQKLXNicDJfc3RhdHVzX3dyaXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKLQkJICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkJICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCSAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIHNicDJfc3RhdHVzX3dyaXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJCSAgICAgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkJICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCQkgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUgPSBjYWxsYmFja19kYXRhOwogCXN0cnVjdCBzYnAyX29yYiAqb3JiOwpAQCAtNDUxLDkgKzQ0OSw4IEBACiAJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT01QTEVURSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBzYnAyX29yYiAqb3JiID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDgyLDkgKzQ3OSw4IEBACiAJa3JlZl9wdXQoJm9yYi0+a3JlZiwgZnJlZV9vcmIpOwogfQogCi1zdGF0aWMgdm9pZAotc2JwMl9zZW5kX29yYihzdHJ1Y3Qgc2JwMl9vcmIgKm9yYiwgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwKLQkgICAgICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIHU2NCBvZmZzZXQpCitzdGF0aWMgdm9pZCBzYnAyX3NlbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqb3JiLCBzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LAorCQkJICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIHU2NCBvZmZzZXQpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MzEsOCArNTI3LDggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZAotY29tcGxldGVfbWFuYWdlbWVudF9vcmIoc3RydWN0IHNicDJfb3JiICpiYXNlX29yYiwgc3RydWN0IHNicDJfc3RhdHVzICpzdGF0dXMpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9tYW5hZ2VtZW50X29yYihzdHJ1Y3Qgc2JwMl9vcmIgKmJhc2Vfb3JiLAorCQkJCSAgICBzdHJ1Y3Qgc2JwMl9zdGF0dXMgKnN0YXR1cykKIHsKIAlzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiAqb3JiID0KIAkJY29udGFpbmVyX29mKGJhc2Vfb3JiLCBzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiwgYmFzZSk7CkBAIC01NDIsMTAgKzUzOCw5IEBACiAJY29tcGxldGUoJm9yYi0+ZG9uZSk7CiB9CiAKLXN0YXRpYyBpbnQKLXNicDJfc2VuZF9tYW5hZ2VtZW50X29yYihzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LCBpbnQgbm9kZV9pZCwKLQkJCSBpbnQgZ2VuZXJhdGlvbiwgaW50IGZ1bmN0aW9uLCBpbnQgbHVuX29yX2xvZ2luX2lkLAotCQkJIHZvaWQgKnJlc3BvbnNlKQorc3RhdGljIGludCBzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIoc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwgaW50IG5vZGVfaWQsCisJCQkJICAgIGludCBnZW5lcmF0aW9uLCBpbnQgZnVuY3Rpb24sCisJCQkJICAgIGludCBsdW5fb3JfbG9naW5faWQsIHZvaWQgKnJlc3BvbnNlKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKIAlzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiAqb3JiOwpAQCAtNjUyLDkgKzY0Nyw4IEBACiAJCQkgICAmZCwgc2l6ZW9mKGQpKTsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlX25vX3dhaXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGVfbm9fd2FpdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewogCWtmcmVlKGRhdGEpOwogfQpAQCAtMTI5OSw4ICsxMjkzLDcgQEAKIAkJCQkgc2l6ZW9mKG9yYi0+cGFnZV90YWJsZSksIERNQV9UT19ERVZJQ0UpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1zYnAyX3N0YXR1c190b19zZW5zZV9kYXRhKHU4ICpzYnAyX3N0YXR1cywgdTggKnNlbnNlX2RhdGEpCitzdGF0aWMgdW5zaWduZWQgaW50IHNicDJfc3RhdHVzX3RvX3NlbnNlX2RhdGEodTggKnNicDJfc3RhdHVzLCB1OCAqc2Vuc2VfZGF0YSkKIHsKIAlpbnQgc2FtX3N0YXR1czsKIApAQCAtMTMzNyw4ICsxMzMwLDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV9jb21tYW5kX29yYihzdHJ1Y3Qgc2JwMl9vcmIgKmJhc2Vfb3JiLCBzdHJ1Y3Qgc2JwMl9zdGF0dXMgKnN0YXR1cykKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX2NvbW1hbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqYmFzZV9vcmIsCisJCQkJIHN0cnVjdCBzYnAyX3N0YXR1cyAqc3RhdHVzKQogewogCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmIgPQogCQljb250YWluZXJfb2YoYmFzZV9vcmIsIHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiLCBiYXNlKTsKQEAgLTEzODQsOSArMTM3Nyw4IEBACiAJb3JiLT5kb25lKG9yYi0+Y21kKTsKIH0KIAotc3RhdGljIGludAotc2JwMl9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwgc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLAotCQkgICAgIHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCitzdGF0aWMgaW50IHNicDJfbWFwX3NjYXR0ZXJsaXN0KHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmIsCisJCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3Qob3JiLT5jbWQpOwogCWludCBpLCBuOwpAQCAtMTU4NCw5ICsxNTc2LDggQEAKICAqIFRoaXMgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0IHBvcnQgaWRlbnRpZmllciBhbmQgbG9naWNhbCB1bml0CiAgKiBpZGVudGlmaWVyIGFzIHBlciBTQU0tMi4uLlNBTS00IGFubmV4IEEuCiAgKi8KLXN0YXRpYyBzc2l6ZV90Ci1zYnAyX3N5c2ZzX2llZWUxMzk0X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzYnAyX3N5c2ZzX2llZWUxMzk0X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMKaW5kZXggOGRkNjcwMy4uZDBkZWVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYwpAQCAtMzE0LDkgKzMxNCw4IEBACiAJCQkJICAgc3RydWN0IGZ3X25vZGUgKiBub2RlLAogCQkJCSAgIHN0cnVjdCBmd19ub2RlICogcGFyZW50KTsKIAotc3RhdGljIHZvaWQKLWZvcl9lYWNoX2Z3X25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290LAotCQkgZndfbm9kZV9jYWxsYmFja190IGNhbGxiYWNrKQorc3RhdGljIHZvaWQgZm9yX2VhY2hfZndfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKnJvb3QsCisJCQkgICAgIGZ3X25vZGVfY2FsbGJhY2tfdCBjYWxsYmFjaykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGZ3X25vZGUgKm5vZGUsICpuZXh0LCAqY2hpbGQsICpwYXJlbnQ7CkBAIC0zNDksOSArMzQ4LDggQEAKIAkJZndfbm9kZV9wdXQobm9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1yZXBvcnRfbG9zdF9ub2RlKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgc3RydWN0IGZ3X25vZGUgKm5vZGUsIHN0cnVjdCBmd19ub2RlICpwYXJlbnQpCitzdGF0aWMgdm9pZCByZXBvcnRfbG9zdF9ub2RlKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJICAgICBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgc3RydWN0IGZ3X25vZGUgKnBhcmVudCkKIHsKIAlmd19ub2RlX2V2ZW50KGNhcmQsIG5vZGUsIEZXX05PREVfREVTVFJPWUVEKTsKIAlmd19ub2RlX3B1dChub2RlKTsKQEAgLTM2MCw5ICszNTgsOCBAQAogCWNhcmQtPmJtX3JldHJpZXMgPSAwOwogfQogCi1zdGF0aWMgdm9pZAotcmVwb3J0X2ZvdW5kX25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgc3RydWN0IGZ3X25vZGUgKm5vZGUsIHN0cnVjdCBmd19ub2RlICpwYXJlbnQpCitzdGF0aWMgdm9pZCByZXBvcnRfZm91bmRfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgICAgIHN0cnVjdCBmd19ub2RlICpub2RlLCBzdHJ1Y3QgZndfbm9kZSAqcGFyZW50KQogewogCWludCBiX3BhdGggPSAobm9kZS0+cGh5X3NwZWVkID09IFNDT0RFX0JFVEEpOwogCkBAIC00MTUsOCArNDEyLDcgQEAKICAqIGZvdW5kLCBsb3N0IG9yIHVwZGF0ZWQuICBVcGRhdGUgdGhlIG5vZGVzIGluIHRoZSBjYXJkIHRvcG9sb2d5IHRyZWUKICAqIGFzIHdlIGdvLgogICovCi1zdGF0aWMgdm9pZAotdXBkYXRlX3RyZWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290KQorc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290KQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDAsIGxpc3QxOwogCXN0cnVjdCBmd19ub2RlICpub2RlMCwgKm5vZGUxLCAqbmV4dDE7CkBAIC00OTcsOCArNDkzLDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi11cGRhdGVfdG9wb2xvZ3lfbWFwKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgKnNlbGZfaWRzLCBpbnQgc2VsZl9pZF9jb3VudCkKK3N0YXRpYyB2b2lkIHVwZGF0ZV90b3BvbG9neV9tYXAoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJdTMyICpzZWxmX2lkcywgaW50IHNlbGZfaWRfY291bnQpCiB7CiAJaW50IG5vZGVfY291bnQ7CiAKQEAgLTUxMCwxMCArNTA2LDggQEAKIAlmd19jb21wdXRlX2Jsb2NrX2NyYyhjYXJkLT50b3BvbG9neV9tYXApOwogfQogCi12b2lkCi1md19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCQkgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKiBzZWxmX2lkcykKK3ZvaWQgZndfY29yZV9oYW5kbGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCisJCQkgICAgICBpbnQgc2VsZl9pZF9jb3VudCwgdTMyICpzZWxmX2lkcykKIHsKIAlzdHJ1Y3QgZndfbm9kZSAqbG9jYWxfbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTMyLDYgKzUyNiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCisJY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkID0gZmFsc2U7CiAJY2FyZC0+bm9kZV9pZCA9IG5vZGVfaWQ7CiAJLyoKIAkgKiBVcGRhdGUgbm9kZV9pZCBiZWZvcmUgZ2VuZXJhdGlvbiB0byBwcmV2ZW50IGFueWJvZHkgZnJvbSB1c2luZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oCmluZGV4IGFkZGI5ZjguLjNjNDk3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuaAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmgKQEAgLTE5LDYgKzE5LDExIEBACiAjaWZuZGVmIF9fZndfdG9wb2xvZ3lfaAogI2RlZmluZSBfX2Z3X3RvcG9sb2d5X2gKIAorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKIGVudW0gewogCUZXX05PREVfQ1JFQVRFRCwKIAlGV19OT0RFX1VQREFURUQsCkBAIC01MSwyNiArNTYsMjIgQEAKIAlzdHJ1Y3QgZndfbm9kZSAqcG9ydHNbMF07CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmd19ub2RlICoKLWZ3X25vZGVfZ2V0KHN0cnVjdCBmd19ub2RlICpub2RlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfbm9kZSAqZndfbm9kZV9nZXQoc3RydWN0IGZ3X25vZGUgKm5vZGUpCiB7CiAJYXRvbWljX2luYygmbm9kZS0+cmVmX2NvdW50KTsKIAogCXJldHVybiBub2RlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ3X25vZGVfcHV0KHN0cnVjdCBmd19ub2RlICpub2RlKQorc3RhdGljIGlubGluZSB2b2lkIGZ3X25vZGVfcHV0KHN0cnVjdCBmd19ub2RlICpub2RlKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZub2RlLT5yZWZfY291bnQpKQogCQlrZnJlZShub2RlKTsKIH0KIAotdm9pZAotZndfZGVzdHJveV9ub2RlcyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7CitzdHJ1Y3QgZndfY2FyZDsKK3ZvaWQgZndfZGVzdHJveV9ub2RlcyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7CiAKLWludAotZndfY29tcHV0ZV9ibG9ja19jcmModTMyICpibG9jayk7Ci0KK2ludCBmd19jb21wdXRlX2Jsb2NrX2NyYyh1MzIgKmJsb2NrKTsKIAogI2VuZGlmIC8qIF9fZndfdG9wb2xvZ3lfaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCmluZGV4IDY5OWFjMDQuLjI4M2RhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKQEAgLTY0LDEwICs2NCw4IEBACiAjZGVmaW5lIFBIWV9DT05GSUdfUk9PVF9JRChub2RlX2lkKQkoKCgobm9kZV9pZCkgJiAweDNmKSA8PCAyNCkgfCAoMSA8PCAyMykpCiAjZGVmaW5lIFBIWV9JREVOVElGSUVSKGlkKQkJKChpZCkgPDwgMzApCiAKLXN0YXRpYyBpbnQKLWNsb3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0JCSAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJICB1MzIgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgaW50IGNsb3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUpCiB7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04Myw3ICs4MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCZ0LT5saW5rICE9ICZjYXJkLT50cmFuc2FjdGlvbl9saXN0KSB7Ci0JCXQtPmNhbGxiYWNrKGNhcmQsIHJjb2RlLCBwYXlsb2FkLCBsZW5ndGgsIHQtPmNhbGxiYWNrX2RhdGEpOworCQl0LT5jYWxsYmFjayhjYXJkLCByY29kZSwgTlVMTCwgMCwgdC0+Y2FsbGJhY2tfZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTQsOSArOTIsOCBAQAogICogT25seSB2YWxpZCBmb3IgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIHBvdGVudGlhbGx5IHBlbmRpbmcgKGllIGhhdmUKICAqIGJlZW4gc2VudCkuCiAgKi8KLWludAotZndfY2FuY2VsX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgICAgICBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQoraW50IGZ3X2NhbmNlbF90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKIHsKIAkvKgogCSAqIENhbmNlbCB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBpZiBpdCdzIHN0aWxsIHF1ZXVlZC4gIFRoYXQKQEAgLTExMiwyMCArMTA5LDE5IEBACiAJICogaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIHBlbmRpbmcgYW5kIHJlbW92ZSBpdCBpbiB0aGF0IGNhc2UuCiAJICovCiAKLQlyZXR1cm4gY2xvc2VfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIGNhcmQsIFJDT0RFX0NBTkNFTExFRCwgTlVMTCwgMCk7CisJcmV0dXJuIGNsb3NlX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBjYXJkLCBSQ09ERV9DQU5DRUxMRUQpOwogfQogRVhQT1JUX1NZTUJPTChmd19jYW5jZWxfdHJhbnNhY3Rpb24pOwogCi1zdGF0aWMgdm9pZAotdHJhbnNtaXRfY29tcGxldGVfY2FsbGJhY2soc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LAotCQkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzdGF0dXMpCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jb21wbGV0ZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCisJCQkJICAgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCA9CiAJICAgIGNvbnRhaW5lcl9vZihwYWNrZXQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiwgcGFja2V0KTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSBBQ0tfQ09NUExFVEU6Ci0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0NPTVBMRVRFLCBOVUxMLCAwKTsKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfQ09NUExFVEUpOwogCQlicmVhazsKIAljYXNlIEFDS19QRU5ESU5HOgogCQl0LT50aW1lc3RhbXAgPSBwYWNrZXQtPnRpbWVzdGFtcDsKQEAgLTEzMywzMSArMTI5LDQyIEBACiAJY2FzZSBBQ0tfQlVTWV9YOgogCWNhc2UgQUNLX0JVU1lfQToKIAljYXNlIEFDS19CVVNZX0I6Ci0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0JVU1ksIE5VTEwsIDApOworCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9CVVNZKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ0tfREFUQV9FUlJPUjoKLQkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfREFUQV9FUlJPUiwgTlVMTCwgMCk7CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0RBVEFfRVJST1IpOwogCQlicmVhazsKIAljYXNlIEFDS19UWVBFX0VSUk9SOgotCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9UWVBFX0VSUk9SLCBOVUxMLCAwKTsKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfVFlQRV9FUlJPUik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIEluIHRoaXMgY2FzZSB0aGUgYWNrIGlzIHJlYWxseSBhIGp1anUgc3BlY2lmaWMKIAkJICogcmNvZGUsIHNvIGp1c3QgZm9yd2FyZCB0aGF0IHRvIHRoZSBjYWxsYmFjay4KIAkJICovCi0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIHN0YXR1cywgTlVMTCwgMCk7CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIHN0YXR1cyk7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIHZvaWQKLWZ3X2ZpbGxfcmVxdWVzdChzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIGludCB0Y29kZSwgaW50IHRsYWJlbCwKK3N0YXRpYyB2b2lkIGZ3X2ZpbGxfcmVxdWVzdChzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIGludCB0Y29kZSwgaW50IHRsYWJlbCwKIAkJaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgc291cmNlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewogCWludCBleHRfdGNvZGU7CiAKKwlpZiAodGNvZGUgPT0gVENPREVfU1RSRUFNX0RBVEEpIHsKKwkJcGFja2V0LT5oZWFkZXJbMF0gPQorCQkJSEVBREVSX0RBVEFfTEVOR1RIKGxlbmd0aCkgfAorCQkJZGVzdGluYXRpb25faWQgfAorCQkJSEVBREVSX1RDT0RFKFRDT0RFX1NUUkVBTV9EQVRBKTsKKwkJcGFja2V0LT5oZWFkZXJfbGVuZ3RoID0gNDsKKwkJcGFja2V0LT5wYXlsb2FkID0gcGF5bG9hZDsKKwkJcGFja2V0LT5wYXlsb2FkX2xlbmd0aCA9IGxlbmd0aDsKKworCQlnb3RvIGNvbW1vbjsKKwl9CisKIAlpZiAodGNvZGUgPiAweDEwKSB7CiAJCWV4dF90Y29kZSA9IHRjb2RlICYgfjB4MTA7CiAJCXRjb2RlID0gVENPREVfTE9DS19SRVFVRVNUOwpAQCAtMjA0LDcgKzIxMSw3IEBACiAJCXBhY2tldC0+cGF5bG9hZF9sZW5ndGggPSAwOwogCQlicmVhazsKIAl9Ci0KKyBjb21tb246CiAJcGFja2V0LT5zcGVlZCA9IHNwZWVkOwogCXBhY2tldC0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CiAJcGFja2V0LT5hY2sgPSAwOwpAQCAtMjQ2LDEzICsyNTMsMTQgQEAKICAqIEBwYXJhbSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkCiAgKiBAcGFyYW0gY2FsbGJhY2tfZGF0YSBwb2ludGVyIHRvIGFyYml0cmFyeSBkYXRhLCB3aGljaCB3aWxsIGJlCiAgKiAgIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAqCisgKiBJbiBjYXNlIG9mIGFzeW5jaHJvbm91cyBzdHJlYW0gcGFja2V0cyBpLmUuIFRDT0RFX1NUUkVBTV9EQVRBLCB0aGUgY2FsbGVyCisgKiBuZWVkcyB0byBzeW50aGVzaXplIEBkZXN0aW5hdGlvbl9pZCB3aXRoIGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQoKS4KICAqLwotdm9pZAotZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCi0JCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAotCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKQordm9pZCBmd19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwgaW50IHRjb2RlLAorCQkgICAgIGludCBkZXN0aW5hdGlvbl9pZCwgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAorCQkgICAgIGZ3X3RyYW5zYWN0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGxhYmVsOwpAQCAtMzIyLDE2ICszMzAsMTYgQEAKICAqIFJldHVybnMgdGhlIFJDT0RFLgogICovCiBpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKLQkJaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkJdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKKwkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCB0cmFuc2FjdGlvbl9jYWxsYmFja19kYXRhIGQ7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7CiAKIAlpbml0X2NvbXBsZXRpb24oJmQuZG9uZSk7Ci0JZC5wYXlsb2FkID0gZGF0YTsKKwlkLnBheWxvYWQgPSBwYXlsb2FkOwogCWZ3X3NlbmRfcmVxdWVzdChjYXJkLCAmdCwgdGNvZGUsIGRlc3RpbmF0aW9uX2lkLCBnZW5lcmF0aW9uLCBzcGVlZCwKLQkJCW9mZnNldCwgZGF0YSwgbGVuZ3RoLCB0cmFuc2FjdGlvbl9jYWxsYmFjaywgJmQpOworCQkJb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgsIHRyYW5zYWN0aW9uX2NhbGxiYWNrLCAmZCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmZC5kb25lKTsKIAogCXJldHVybiBkLnJjb2RlOwpAQCAtMzk5LDkgKzQwNyw4IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqCi1sb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpsb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyKAorCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlcjsKIApAQCAtNDE0LDkgKzQyMSw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICoKLWxvb2t1cF9lbmNsb3NpbmdfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqbG9va3VwX2VuY2xvc2luZ19hZGRyZXNzX2hhbmRsZXIoCisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwogCkBAIC00NDksMzYgKzQ1NSw0NCBAQAogI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqCi0gKiBBbGxvY2F0ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBpbiB0aGUgbm9kZSBzcGFjZSBvZiB0aGUgT0hDSQotICogY29udHJvbGxlci4gIFdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkIHRoYXQgZmFsbHMgd2l0aGluIHRoZQotICogc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgaXMgaW52b2tlZC4gIFRoZQotICogcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGdpdmUgdGhlIGRldGFpbHMgb2YgdGhlCi0gKiBwYXJ0aWN1bGFyIHJlcXVlc3QuCisgKiBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIgLSByZWdpc3RlciBmb3IgaW5jb21pbmcgcmVxdWVzdHMKKyAqIEBoYW5kbGVyOiBjYWxsYmFjaworICogQHJlZ2lvbjogcmVnaW9uIGluIHRoZSBJRUVFIDEyMTIgbm9kZSBzcGFjZSBhZGRyZXNzIHJhbmdlCisgKgorICogcmVnaW9uLT5zdGFydCwgLT5lbmQsIGFuZCBoYW5kbGVyLT5sZW5ndGggaGF2ZSB0byBiZSBxdWFkbGV0LWFsaWduZWQuCisgKgorICogV2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQgdGhhdCBmYWxscyB3aXRoaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHJhbmdlLAorICogdGhlIHNwZWNpZmllZCBjYWxsYmFjayBpcyBpbnZva2VkLiAgVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICogZ2l2ZSB0aGUgZGV0YWlscyBvZiB0aGUgcGFydGljdWxhciByZXF1ZXN0LgogICoKICAqIFJldHVybiB2YWx1ZTogIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgogICogVGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgaGFuZGxlcidzIGFkZHJlc3MgcmVnaW9uIGlzIGRldGVybWluZWQgYnkKICAqIGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcigpIGFuZCBpcyByZXR1cm5lZCBpbiBoYW5kbGVyLT5vZmZzZXQuCi0gKiBUaGUgb2Zmc2V0IGlzIHF1YWRsZXQtYWxpZ25lZC4KICAqLwotaW50Ci1md19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKK2ludCBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKKwkJCQljb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpvdGhlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAtRUJVU1k7CiAKKwlpZiAocmVnaW9uLT5zdGFydCAmIDB4ZmZmZjAwMDAwMDAwMDAwM1VMTCB8fAorCSAgICByZWdpb24tPmVuZCAgICYgMHhmZmZmMDAwMDAwMDAwMDAzVUxMIHx8CisJICAgIHJlZ2lvbi0+c3RhcnQgPj0gcmVnaW9uLT5lbmQgfHwKKwkgICAgaGFuZGxlci0+bGVuZ3RoICYgMyB8fAorCSAgICBoYW5kbGVyLT5sZW5ndGggPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKIAotCWhhbmRsZXItPm9mZnNldCA9IHJvdW5kdXAocmVnaW9uLT5zdGFydCwgNCk7CisJaGFuZGxlci0+b2Zmc2V0ID0gcmVnaW9uLT5zdGFydDsKIAl3aGlsZSAoaGFuZGxlci0+b2Zmc2V0ICsgaGFuZGxlci0+bGVuZ3RoIDw9IHJlZ2lvbi0+ZW5kKSB7CiAJCW90aGVyID0KIAkJICAgIGxvb2t1cF9vdmVybGFwcGluZ19hZGRyZXNzX2hhbmRsZXIoJmFkZHJlc3NfaGFuZGxlcl9saXN0LAogCQkJCQkJICAgICAgIGhhbmRsZXItPm9mZnNldCwKIAkJCQkJCSAgICAgICBoYW5kbGVyLT5sZW5ndGgpOwogCQlpZiAob3RoZXIgIT0gTlVMTCkgewotCQkJaGFuZGxlci0+b2Zmc2V0ID0KLQkJCSAgICByb3VuZHVwKG90aGVyLT5vZmZzZXQgKyBvdGhlci0+bGVuZ3RoLCA0KTsKKwkJCWhhbmRsZXItPm9mZnNldCArPSBvdGhlci0+bGVuZ3RoOwogCQl9IGVsc2UgewogCQkJbGlzdF9hZGRfdGFpbCgmaGFuZGxlci0+bGluaywgJmFkZHJlc3NfaGFuZGxlcl9saXN0KTsKIAkJCXJldCA9IDA7CkBAIC00OTMsMTIgKzUwNyw3IEBACiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcik7CiAKIC8qKgotICogRGVhbGxvY2F0ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBhbGxvY2F0ZWQgd2l0aCBmd19hbGxvY2F0ZS4gIFRoaXMKLSAqIHdpbGwgY2FsbCB0aGUgYXNzb2NpYXRlZCBjYWxsYmFjayBvbmUgbGFzdCB0aW1lIHdpdGggYSB0aGUgc3BlY2lhbAotICogdGNvZGUgVENPREVfREVBTExPQ0FURSwgdG8gbGV0IHRoZSBjbGllbnQgZGVzdHJveSB0aGUgcmVnaXN0ZXJlZAotICogY2FsbGJhY2sgZGF0YS4gIEZvciBjb252ZW5pZW5jZSwgdGhlIGNhbGxiYWNrIHBhcmFtZXRlcnMgb2Zmc2V0IGFuZAotICogbGVuZ3RoIGFyZSBzZXQgdG8gdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoIHJlc3BlY3RpdmVseSBmb3IgdGhlCi0gKiBkZWFsbG9jYXRlZCByZWdpb24sIHBheWxvYWQgaXMgc2V0IHRvIE5VTEwuCisgKiBmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIgLSB1bnJlZ2lzdGVyIGFuIGFkZHJlc3MgaGFuZGxlcgogICovCiB2b2lkIGZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyKQogewpAQCAtNTE4LDkgKzUyNyw4IEBACiAJdTMyIGRhdGFbMF07CiB9OwogCi1zdGF0aWMgdm9pZAotZnJlZV9yZXNwb25zZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCi0JCSAgICAgICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIGZyZWVfcmVzcG9uc2VfY2FsbGJhY2soc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LAorCQkJCSAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwogCkBAIC01MjgsOSArNTM2LDggQEAKIAlrZnJlZShyZXF1ZXN0KTsKIH0KIAotdm9pZAotZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKLQkJIGludCByY29kZSwgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKKwkJICAgICAgaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewogCWludCB0Y29kZSwgdGxhYmVsLCBleHRlbmRlZF90Y29kZSwgc291cmNlLCBkZXN0aW5hdGlvbjsKIApAQCAtNTg4LDggKzU5NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2ZpbGxfcmVzcG9uc2UpOwogCi1zdGF0aWMgc3RydWN0IGZ3X3JlcXVlc3QgKgotYWxsb2NhdGVfcmVxdWVzdChzdHJ1Y3QgZndfcGFja2V0ICpwKQorc3RhdGljIHN0cnVjdCBmd19yZXF1ZXN0ICphbGxvY2F0ZV9yZXF1ZXN0KHN0cnVjdCBmd19wYWNrZXQgKnApCiB7CiAJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CiAJdTMyICpkYXRhLCBsZW5ndGg7CkBAIC02NDksOCArNjU1LDggQEAKIAlyZXR1cm4gcmVxdWVzdDsKIH0KIAotdm9pZAotZndfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsIGludCByY29kZSkKK3ZvaWQgZndfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsIGludCByY29kZSkKIHsKIAkvKiB1bmlmaWVkIHRyYW5zYWN0aW9uIG9yIGJyb2FkY2FzdCB0cmFuc2FjdGlvbjogZG9uJ3QgcmVzcG9uZCAqLwogCWlmIChyZXF1ZXN0LT5hY2sgIT0gQUNLX1BFTkRJTkcgfHwKQEAgLTY3MCw4ICs2NzYsNyBAQAogfQogRVhQT1JUX1NZTUJPTChmd19zZW5kX3Jlc3BvbnNlKTsKIAotdm9pZAotZndfY29yZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKK3ZvaWQgZndfY29yZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwogCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwpAQCAtNzE5LDggKzcyNCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3QpOwogCi12b2lkCi1md19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKK3ZvaWQgZndfY29yZV9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnApCiB7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03OTMsMTIgKzc5NywxMCBAQAogCXsgLnN0YXJ0ID0gQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfVE9QT0xPR1lfTUFQLAogCSAgLmVuZCAgID0gQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfVE9QT0xPR1lfTUFQX0VORCwgfTsKIAotc3RhdGljIHZvaWQKLWhhbmRsZV90b3BvbG9neV9tYXAoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAotCQkgICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCi0JCSAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkJICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCitzdGF0aWMgdm9pZCBoYW5kbGVfdG9wb2xvZ3lfbWFwKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsIGludCBnZW5lcmF0aW9uLAorCQlpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCXZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJaW50IGksIHN0YXJ0LCBlbmQ7CiAJX19iZTMyICptYXA7CkBAIC04MzIsMTIgKzgzNCwxMCBAQAogCXsgLnN0YXJ0ID0gQ1NSX1JFR0lTVEVSX0JBU0UsCiAJICAuZW5kICAgPSBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9DT05GSUdfUk9NLCB9OwogCi1zdGF0aWMgdm9pZAotaGFuZGxlX3JlZ2lzdGVycyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCi0JCSBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkJIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCSB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQkgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWdpc3RlcnMoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQlpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwgaW50IGdlbmVyYXRpb24sCisJCWludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlpbnQgcmVnID0gb2Zmc2V0ICYgfkNTUl9SRUdJU1RFUl9CQVNFOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBidXNfdGltZTsKQEAgLTkzOSwxMSArOTM5LDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGZ3X2NvcmVfaW5pdCh2b2lkKQogewotCWludCByZXR2YWw7CisJaW50IHJldDsKIAotCXJldHZhbCA9IGJ1c19yZWdpc3RlcigmZndfYnVzX3R5cGUpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IGJ1c19yZWdpc3RlcigmZndfYnVzX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJZndfY2Rldl9tYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCAiZmlyZXdpcmUiLCAmZndfZGV2aWNlX29wcyk7CiAJaWYgKGZ3X2NkZXZfbWFqb3IgPCAwKSB7CkBAIC05NTEsMTkgKzk1MSwxMCBAQAogCQlyZXR1cm4gZndfY2Rldl9tYWpvcjsKIAl9CiAKLQlyZXR2YWwgPSBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnRvcG9sb2d5X21hcCwKLQkJCQkJICAgICAmdG9wb2xvZ3lfbWFwX3JlZ2lvbik7Ci0JQlVHX09OKHJldHZhbCA8IDApOwotCi0JcmV0dmFsID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyZWdpc3RlcnMsCi0JCQkJCSAgICAgJnJlZ2lzdGVyc19yZWdpb24pOwotCUJVR19PTihyZXR2YWwgPCAwKTsKLQotCS8qIEFkZCB0aGUgdmVuZG9yIHRleHR1YWwgZGVzY3JpcHRvci4gKi8KLQlyZXR2YWwgPSBmd19jb3JlX2FkZF9kZXNjcmlwdG9yKCZ2ZW5kb3JfaWRfZGVzY3JpcHRvcik7Ci0JQlVHX09OKHJldHZhbCA8IDApOwotCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJm1vZGVsX2lkX2Rlc2NyaXB0b3IpOwotCUJVR19PTihyZXR2YWwgPCAwKTsKKwlmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnRvcG9sb2d5X21hcCwgJnRvcG9sb2d5X21hcF9yZWdpb24pOworCWZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcigmcmVnaXN0ZXJzLCAmcmVnaXN0ZXJzX3JlZ2lvbik7CisJZndfY29yZV9hZGRfZGVzY3JpcHRvcigmdmVuZG9yX2lkX2Rlc2NyaXB0b3IpOworCWZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJm1vZGVsX2lkX2Rlc2NyaXB0b3IpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKaW5kZXggMWQ3OGU5Yy4uZGZhNzk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaApAQCAtODIsMTQgKzgyLDE0IEBACiAjZGVmaW5lIENTUl9TUEVFRF9NQVAJCQkweDIwMDAKICNkZWZpbmUgQ1NSX1NQRUVEX01BUF9FTkQJCTB4MzAwMAogCisjZGVmaW5lIEJBTkRXSURUSF9BVkFJTEFCTEVfSU5JVElBTAk0OTE1CiAjZGVmaW5lIEJST0FEQ0FTVF9DSEFOTkVMX0lOSVRJQUwJKDEgPDwgMzEgfCAzMSkKICNkZWZpbmUgQlJPQURDQVNUX0NIQU5ORUxfVkFMSUQJCSgxIDw8IDMwKQogCiAjZGVmaW5lIGZ3X25vdGlmeShzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQogI2RlZmluZSBmd19lcnJvcihzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ3X21lbWNweV9mcm9tX2JlMzIodm9pZCAqX2RzdCwgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgZndfbWVtY3B5X2Zyb21fYmUzMih2b2lkICpfZHN0LCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSkKIHsKIAl1MzIgICAgKmRzdCA9IF9kc3Q7CiAJX19iZTMyICpzcmMgPSBfc3JjOwpAQCAtOTksOCArOTksNyBAQAogCQlkc3RbaV0gPSBiZTMyX3RvX2NwdShzcmNbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ3X21lbWNweV90b19iZTMyKHZvaWQgKl9kc3QsIHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKQorc3RhdGljIGlubGluZSB2b2lkIGZ3X21lbWNweV90b19iZTMyKHZvaWQgKl9kc3QsIHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKQogewogCWZ3X21lbWNweV9mcm9tX2JlMzIoX2RzdCwgX3NyYywgc2l6ZSk7CiB9CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCQkgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKTsKIAogdHlwZWRlZiB2b2lkICgqZndfdHJhbnNhY3Rpb25fY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJCQkJICB2b2lkICpkYXRhLAotCQkJCQkgIHNpemVfdCBsZW5ndGgsCisJCQkJCSAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKIAkJCQkJICB2b2lkICpjYWxsYmFja19kYXRhKTsKIAogLyoKQEAgLTE0MSwxMiArMTM5LDYgQEAKIAkJCQkgICAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogCQkJCSAgICAgIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogCi10eXBlZGVmIHZvaWQgKCpmd19idXNfcmVzZXRfY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmhhbmRsZSwKLQkJCQkJaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJCQl1MzIgKnNlbGZfaWRzLAotCQkJCQlpbnQgc2VsZl9pZF9jb3VudCwKLQkJCQkJdm9pZCAqY2FsbGJhY2tfZGF0YSk7Ci0KIHN0cnVjdCBmd19wYWNrZXQgewogCWludCBzcGVlZDsKIAlpbnQgZ2VuZXJhdGlvbjsKQEAgLTE4NywxMiArMTc5LDYgQEAKIAl2b2lkICpjYWxsYmFja19kYXRhOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfcGFja2V0ICoKLWZ3X3BhY2tldChzdHJ1Y3QgbGlzdF9oZWFkICpsKQotewotCXJldHVybiBsaXN0X2VudHJ5KGwsIHN0cnVjdCBmd19wYWNrZXQsIGxpbmspOwotfQotCiBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIHsKIAl1NjQgb2Zmc2V0OwogCXNpemVfdCBsZW5ndGg7CkBAIC0yMDEsNyArMTg3LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiB9OwogCi0KIHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiB7CiAJdTY0IHN0YXJ0OwogCXU2NCBlbmQ7CkBAIC0yNTUsNiArMjQwLDcgQEAKIAlpbnQgYm1fcmV0cmllczsKIAlpbnQgYm1fZ2VuZXJhdGlvbjsKIAorCWJvb2wgYnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkOwogCXUzMiBicm9hZGNhc3RfY2hhbm5lbDsKIAl1MzIgdG9wb2xvZ3lfbWFwWyhDU1JfVE9QT0xPR1lfTUFQX0VORCAtIENTUl9UT1BPTE9HWV9NQVApIC8gNF07CiB9OwpAQCAtMzE1LDEwICszMDEsOCBAQAogc3RydWN0IGZ3X2lzb19jb250ZXh0OwogCiB0eXBlZGVmIHZvaWQgKCpmd19pc29fY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0LAotCQkJCSAgdTMyIGN5Y2xlLAotCQkJCSAgc2l6ZV90IGhlYWRlcl9sZW5ndGgsCi0JCQkJICB2b2lkICpoZWFkZXIsCi0JCQkJICB2b2lkICpkYXRhKTsKKwkJCQkgIHUzMiBjeWNsZSwgc2l6ZV90IGhlYWRlcl9sZW5ndGgsCisJCQkJICB2b2lkICpoZWFkZXIsIHZvaWQgKmRhdGEpOwogCiAvKgogICogQW4gaXNvIGJ1ZmZlciBpcyBqdXN0IGEgc2V0IG9mIHBhZ2VzIG1hcHBlZCBmb3IgRE1BIGluIHRoZQpAQCAtMzQ0LDM2ICszMjgsMjUgQEAKIAl2b2lkICpjYWxsYmFja19kYXRhOwogfTsKIAotaW50Ci1md19pc29fYnVmZmVyX2luaXQoc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgIGludCBwYWdlX2NvdW50LAotCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotaW50Ci1md19pc29fYnVmZmVyX21hcChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci12b2lkCi1md19pc29fYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworaW50IGZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgIGludCBwYWdlX2NvdW50LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworaW50IGZ3X2lzb19idWZmZXJfbWFwKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3ZvaWQgZndfaXNvX2J1ZmZlcl9kZXN0cm95KHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCBmd19jYXJkICpjYXJkKTsKIAotc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKLWZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHR5cGUsCi0JCSAgICAgIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKLQkJICAgICAgZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpOworc3RydWN0IGZ3X2lzb19jb250ZXh0ICpmd19pc29fY29udGV4dF9jcmVhdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCWludCB0eXBlLCBpbnQgY2hhbm5lbCwgaW50IHNwZWVkLCBzaXplX3QgaGVhZGVyX3NpemUsCisJCWZ3X2lzb19jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKTsKK2ludCBmd19pc29fY29udGV4dF9xdWV1ZShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKKwkJCSBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCQkJIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkgdW5zaWduZWQgbG9uZyBwYXlsb2FkKTsKK2ludCBmd19pc29fY29udGV4dF9zdGFydChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKKwkJCSBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncyk7CitpbnQgZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7Cit2b2lkIGZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwogCi12b2lkCi1md19pc29fY29udGV4dF9kZXN0cm95KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKLQotaW50Ci1md19pc29fY29udGV4dF9xdWV1ZShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKLQkJICAgICBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAotCQkgICAgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKTsKLQotaW50Ci1md19pc29fY29udGV4dF9zdGFydChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKLQkJICAgICBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncyk7Ci0KLWludAotZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7Cit2b2lkIGZ3X2lzb19yZXNvdXJjZV9tYW5hZ2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBnZW5lcmF0aW9uLAorCQl1NjQgY2hhbm5lbHNfbWFzaywgaW50ICpjaGFubmVsLCBpbnQgKmJhbmR3aWR0aCwgYm9vbCBhbGxvY2F0ZSk7CiAKIHN0cnVjdCBmd19jYXJkX2RyaXZlciB7CiAJLyoKQEAgLTQxNSw3ICszODgsNyBAQAogCiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKIAkoKmFsbG9jYXRlX2lzb19jb250ZXh0KShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJCQlpbnQgdHlwZSwgc2l6ZV90IGhlYWRlcl9zaXplKTsKKwkJCQlpbnQgdHlwZSwgaW50IGNoYW5uZWwsIHNpemVfdCBoZWFkZXJfc2l6ZSk7CiAJdm9pZCAoKmZyZWVfaXNvX2NvbnRleHQpKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKIAogCWludCAoKnN0YXJ0X2lzbykoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCkBAIC00MjksNTQgKzQwMiw0NSBAQAogCWludCAoKnN0b3BfaXNvKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CiB9OwogCi1pbnQKLWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc2hvcnRfcmVzZXQpOworaW50IGZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc2hvcnRfcmVzZXQpOwogCi12b2lkCi1md19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwKK3ZvaWQgZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCiAJCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAogCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKTsKLQotaW50IGZ3X3J1bl90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsCi0JCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQkgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0KIGludCBmd19jYW5jZWxfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQkgIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pOwotCiB2b2lkIGZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7Ci0KK2ludCBmd19ydW5fdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLAorCQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpOwogdm9pZCBmd19zZW5kX3BoeV9jb25maWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBnYXBfY291bnQpOwogCitzdGF0aWMgaW5saW5lIGludCBmd19zdHJlYW1fcGFja2V0X2Rlc3RpbmF0aW9uX2lkKGludCB0YWcsIGludCBjaGFubmVsLCBpbnQgc3kpCit7CisJcmV0dXJuIHRhZyA8PCAxNCB8IGNoYW5uZWwgPDwgOCB8IHN5OworfQorCiAvKgogICogQ2FsbGVkIGJ5IHRoZSB0b3BvbG9neSBjb2RlIHRvIGluZm9ybSB0aGUgZGV2aWNlIGNvZGUgb2Ygbm9kZQogICogYWN0aXZpdHk7IGZvdW5kLCBsb3N0LCBvciB1cGRhdGVkIG5vZGVzLgogICovCi12b2lkCi1md19ub2RlX2V2ZW50KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgaW50IGV2ZW50KTsKK3ZvaWQgZndfbm9kZV9ldmVudChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKm5vZGUsIGludCBldmVudCk7CiAKIC8qIEFQSSB1c2VkIGJ5IGNhcmQgbGV2ZWwgZHJpdmVycyAqLwogCi12b2lkCi1md19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciAqZHJpdmVyLAotCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotaW50Ci1md19jYXJkX2FkZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkgICAgdTMyIG1heF9yZWNlaXZlLCB1MzIgbGlua19zcGVlZCwgdTY0IGd1aWQpOwordm9pZCBmd19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCWNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworaW50IGZ3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQl1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCk7Cit2b2lkIGZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwordm9pZCBmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBub2RlX2lkLAorCQlpbnQgZ2VuZXJhdGlvbiwgaW50IHNlbGZfaWRfY291bnQsIHUzMiAqc2VsZl9pZHMpOwordm9pZCBmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpyZXF1ZXN0KTsKK3ZvaWQgZndfY29yZV9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCk7CiAKLXZvaWQKLWZ3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwotCi12b2lkCi1md19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCQkgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKnNlbGZfaWRzKTsKLXZvaWQKLWZ3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnJlcXVlc3QpOwotCi12b2lkCi1md19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KTsKK2V4dGVybiBpbnQgZndfaXJtX3NldF9icm9hZGNhc3RfY2hhbm5lbF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgdm9pZCAqZGF0YSk7CiAKICNlbmRpZiAvKiBfX2Z3X3RyYW5zYWN0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCmluZGV4IDc3N2ZiYTQuLjMwMDllMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgKi8KIGludCBkY2RiYXNfc21pX3JlcXVlc3Qoc3RydWN0IHNtaV9jbWQgKnNtaV9jbWQpCiB7Ci0JY3B1bWFza190IG9sZF9tYXNrOworCWNwdW1hc2tfdmFyX3Qgb2xkX21hc2s7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoc21pX2NtZC0+bWFnaWMgIT0gU01JX0NNRF9NQUdJQykgewpAQCAtMjU0LDggKzI1NCwxMSBAQAogCX0KIAogCS8qIFNNSSByZXF1aXJlcyBDUFUgMCAqLwotCW9sZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdSgwKSk7CisJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcigmb2xkX21hc2ssIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNwdW1hc2tfY29weShvbGRfbWFzaywgJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZigwKSk7CiAJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKSB7CiAJCWRldl9kYmcoJmRjZGJhc19wZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGdldCBDUFUgMFxuIiwKIAkJCV9fZnVuY19fKTsKQEAgLTI3NSw3ICsyNzgsOCBAQAogCSk7CiAKIG91dDoKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG9sZF9tYXNrKTsKKwlmcmVlX2NwdW1hc2tfdmFyKG9sZF9tYXNrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IDNhYjNlNGEuLjdiN2RkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC05MzgsOCArOTM4LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoaWJmdF9hZGRyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbHguXG4iLAotCQkgICAgICAgdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CisJCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbGx4LlxuIiwKKwkJICAgICAgICh1NjQpdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CiAKIAkJcmMgPSBpYmZ0X2NoZWNrX2RldmljZSgpOwogCQlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKaW5kZXggN2ExMTY4Mi4uOTg0YjU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYwpAQCAtMTYwLDcgKzE2MCw3IEBACiB7CiAJc3RydWN0IGdwaW9fY2hpcCAqYyA9ICZiZy0+Z3BpbzsKIAotCWMtPmxhYmVsID0gYmctPnBkZXYtPmRldi5idXNfaWQ7CisJYy0+bGFiZWwgPSBkZXZfbmFtZSgmYmctPnBkZXYtPmRldik7CiAJYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljLT5kaXJlY3Rpb25faW5wdXQgPSBidDh4eGdwaW9fZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CiAJYy0+Z2V0ID0gYnQ4eHhncGlvX2dwaW9fZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDMwMDIyYzQuLjRlYzUwNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDggQEAKIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3Byb2MubyBkcm1fc3R1Yi5vIGRybV92bS5vIFwKIAkJZHJtX2FncHN1cHBvcnQubyBkcm1fc2NhdHRlci5vIGF0aV9wY2lnYXJ0Lm8gZHJtX3BjaS5vIFwKIAkJZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fc21hbi5vIGRybV9tbS5vIFwKLQkJZHJtX2NydGMubyBkcm1fY3J0Y19oZWxwZXIubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vCisJCWRybV9jcnRjLm8gZHJtX2NydGNfaGVscGVyLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubyBcCisJCWRybV9pbmZvLm8gZHJtX2RlYnVnZnMubwogCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3N2M2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYwpAQCAtMCwwICsxLDIzNSBAQAorLyoqCisgKiBcZmlsZSBkcm1fZGVidWdmcy5jCisgKiBkZWJ1Z2ZzIHN1cHBvcnQgZm9yIERSTQorICoKKyAqIFxhdXRob3IgQmVuIEdhbWFyaSA8YmdhbWFyaUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIENyZWF0ZWQ6IFN1biBEZWMgMjEgMTM6MDg6NTAgMjAwOCBieSBiZ2FtYXJpQGdtYWlsLmNvbQorICoKKyAqIENvcHlyaWdodCAyMDA4IEJlbiBHYW1hcmkgPGJnYW1hcmlAZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6YXRpb24sIGV0Yy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGRybV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKKwl7InZtIiwgZHJtX3ZtX2luZm8sIDB9LAorCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm8sIDB9LAorCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvLCAwfSwKKwl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvLCAwfSwKKwl7ImdlbV9uYW1lcyIsIGRybV9nZW1fbmFtZV9pbmZvLCBEUklWRVJfR0VNfSwKKwl7ImdlbV9vYmplY3RzIiwgZHJtX2dlbV9vYmplY3RfaW5mbywgRFJJVkVSX0dFTX0sCisjaWYgRFJNX0RFQlVHX0NPREUKKwl7InZtYSIsIGRybV92bWFfaW5mbywgMH0sCisjZW5kaWYKK307CisjZGVmaW5lIERSTV9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRShkcm1fZGVidWdmc19saXN0KQorCisKK3N0YXRpYyBpbnQgZHJtX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbm9kZS0+aW5mb19lbnQtPnNob3csIG5vZGUpOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fZGVidWdmc19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworCisvKioKKyAqIEluaXRpYWxpemUgYSBnaXZlbiBzZXQgb2YgZGVidWdmcyBmaWxlcyBmb3IgYSBkZXZpY2UKKyAqCisgKiBccGFyYW0gZmlsZXMgVGhlIGFycmF5IG9mIGZpbGVzIHRvIGNyZWF0ZQorICogXHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZmlsZXMgZ2l2ZW4KKyAqIFxwYXJhbSByb290IERSSSBkZWJ1Z2ZzIGRpciBlbnRyeS4KKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyCisgKiBccmV0dXJuIFplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorICoKKyAqIENyZWF0ZSBhIGdpdmVuIHNldCBvZiBkZWJ1Z2ZzIGZpbGVzIHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5IG9mCisgKiBnZG1fZGVidWdmc19saXN0cyBpbiB0aGUgZ2l2ZW4gcm9vdCBkaXJlY3RvcnkuCisgKi8KK2ludCBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisJCQkgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QsIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCXN0cnVjdCBkZW50cnkgKmVudDsKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqdG1wOworCWNoYXIgbmFtZVs2NF07CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXUzMiBmZWF0dXJlcyA9IGZpbGVzW2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKworCQl0bXAgPSBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwKKwkJCQlfRFJNX0RSSVZFUik7CisJCWVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZXNbaV0ubmFtZSwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJCSAgcm9vdCwgdG1wLCAmZHJtX2RlYnVnZnNfZm9wcyk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL2RlYnVnZnMvZHJpLyVzLyVzXG4iLAorCQkJCSAgbmFtZSwgZmlsZXNbaV0ubmFtZSk7CisJCQlkcm1fZnJlZSh0bXAsIHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksCisJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOworCQl9CisKKwkJdG1wLT5taW5vciA9IG1pbm9yOworCQl0bXAtPmRlbnQgPSBlbnQ7CisJCXRtcC0+aW5mb19lbnQgPSAmZmlsZXNbaV07CisJCWxpc3RfYWRkKCYodG1wLT5saXN0KSwgJihtaW5vci0+ZGVidWdmc19ub2Rlcy5saXN0KSk7CisJfQorCXJldHVybiAwOworCitmYWlsOgorCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhmaWxlcywgY291bnQsIG1pbm9yKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMpOworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIERSSSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gZm9yIGEgZGV2aWNlCisgKgorICogXHBhcmFtIGRldiBEUk0gZGV2aWNlCisgKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlcgorICogXHBhcmFtIHJvb3QgRFJJIGRlYnVnZnMgZGlyIGVudHJ5LgorICoKKyAqIENyZWF0ZSB0aGUgRFJJIGRlYnVnZnMgcm9vdCBlbnRyeSAiL2RlYnVnZnMvZHJpIiwgdGhlIGRldmljZSBkZWJ1Z2ZzIHJvb3QgZW50cnkKKyAqICIvZGVidWdmcy9kcmkvJW1pbm9yJS8iLCBhbmQgZWFjaCBlbnRyeSBpbiBkZWJ1Z2ZzX2xpc3QgYXMKKyAqICIvZGVidWdmcy9kcmkvJW1pbm9yJS8lbmFtZSUiLgorICovCitpbnQgZHJtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAorCQkgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJY2hhciBuYW1lWzY0XTsKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJm1pbm9yLT5kZWJ1Z2ZzX25vZGVzLmxpc3QpOworCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3JfaWQpOworCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcm9vdCk7CisJaWYgKCFtaW5vci0+ZGVidWdmc19yb290KSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvZGVidWdmcy9kcmkvJXNcbiIsIG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGRybV9kZWJ1Z2ZzX2xpc3QsIERSTV9ERUJVR0ZTX0VOVFJJRVMsCisJCQkJICAgICAgIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKKwlpZiAocmV0KSB7CisJCWRlYnVnZnNfcmVtb3ZlKG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QpOworCQltaW5vci0+ZGVidWdmc19yb290ID0gTlVMTDsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGNvcmUgZHJtIGRlYnVnZnMgZmlsZXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkZXYtPmRyaXZlci0+ZGVidWdmc19pbml0KSB7CisJCXJldCA9IGRldi0+ZHJpdmVyLT5kZWJ1Z2ZzX2luaXQobWlub3IpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkRSTTogRHJpdmVyIGZhaWxlZCB0byBpbml0aWFsaXplICIKKwkJCQkgICIvZGVidWdmcy9kcmkuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBSZW1vdmUgYSBsaXN0IG9mIGRlYnVnZnMgZmlsZXMKKyAqCisgKiBccGFyYW0gZmlsZXMgVGhlIGxpc3Qgb2YgZmlsZXMKKyAqIFxwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGZpbGVzCisgKiBccGFyYW0gbWlub3IgVGhlIG1pbm9yIG9mIHdoaWNoIHdlIHNob3VsZCByZW1vdmUgdGhlIGZpbGVzCisgKiBccmV0dXJuIGFsd2F5cyB6ZXJvLgorICoKKyAqIFJlbW92ZSBhbGwgZGVidWdmcyBlbnRyaWVzIGNyZWF0ZWQgYnkgZGVidWdmc19pbml0KCkuCisgKi8KK2ludCBkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisJCQkgICAgIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnE7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKnRtcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHEsICZtaW5vci0+ZGVidWdmc19ub2Rlcy5saXN0KSB7CisJCQl0bXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRybV9pbmZvX25vZGUsIGxpc3QpOworCQkJaWYgKHRtcC0+aW5mb19lbnQgPT0gJmZpbGVzW2ldKSB7CisJCQkJZGVidWdmc19yZW1vdmUodG1wLT5kZW50KTsKKwkJCQlsaXN0X2RlbChwb3MpOworCQkJCWRybV9mcmVlKHRtcCwgc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwKKwkJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKTsKKworLyoqCisgKiBDbGVhbnVwIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gcmVzb3VyY2VzLgorICoKKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyLgorICogXHJldHVybiBhbHdheXMgemVyby4KKyAqCisgKiBSZW1vdmUgYWxsIGRlYnVnZnMgZW50cmllcyBjcmVhdGVkIGJ5IGRlYnVnZnNfaW5pdCgpLgorICovCitpbnQgZHJtX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKworCWlmICghbWlub3ItPmRlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5kcml2ZXItPmRlYnVnZnNfY2xlYW51cCkKKwkJZGV2LT5kcml2ZXItPmRlYnVnZnNfY2xlYW51cChtaW5vcik7CisKKwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoZHJtX2RlYnVnZnNfbGlzdCwgRFJNX0RFQlVHRlNfRU5UUklFUywgbWlub3IpOworCisJZGVidWdmc19yZW1vdmUobWlub3ItPmRlYnVnZnNfcm9vdCk7CisJbWlub3ItPmRlYnVnZnNfcm9vdCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwppbmRleCAxNGM3YTIzLi5lZDMyZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKQEAgLTQ2LDkgKzQ2LDExIEBACiAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NvcmUuaCIKIAorCiBzdGF0aWMgaW50IGRybV92ZXJzaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKQEAgLTE3OCw3ICsxODAsNyBAQAogCiAJLyogQ2xlYXIgQUdQIGluZm9ybWF0aW9uICovCiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJgotCSAgICAhZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQkJIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKIAkJc3RydWN0IGRybV9hZ3BfbWVtICplbnRyeSwgKnRlbXBlOwogCiAJCS8qIFJlbW92ZSBBR1AgcmVzb3VyY2VzLCBidXQgbGVhdmUgZGV2LT5hZ3AKQEAgLTM4Miw2ICszODQsMTMgQEAKIAkJZ290byBlcnJfcDM7CiAJfQogCisJZHJtX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHJpIiwgTlVMTCk7CisJaWYgKCFkcm1fZGVidWdmc19yb290KSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvZGVidWdmcy9kcmlcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBlcnJfcDM7CisJfQorCiAJZHJtX21lbV9pbml0KCk7CiAKIAlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXNcbiIsCkBAIC00MDAsNiArNDA5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkcm1fY29yZV9leGl0KHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaSIsIE5VTEwpOworCWRlYnVnZnNfcmVtb3ZlKGRybV9kZWJ1Z2ZzX3Jvb3QpOwogCWRybV9zeXNmc19kZXN0cm95KCk7CiAKIAl1bnJlZ2lzdGVyX2NocmRldihEUk1fTUFKT1IsICJkcm0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKaW5kZXggZjUyNjYzZS4uZTEzY2I2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKQEAgLTMzNywxNCArMzM3LDEwIEBACiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCWludCByZXRjb2RlOwogCiAJRFJNX0RFQlVHKCJmZCA9ICVkLCBkZXZpY2UgPSAweCVseFxuIiwgZmQsCiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYocHJpdi0+bWlub3ItPmRldmljZSkpOwotCXJldGNvZGUgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKLQlpZiAocmV0Y29kZSA8IDApCi0JCXJldHVybiByZXRjb2RlOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2Zhc3luYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2OTk3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCkBAIC0wLDAgKzEsMzI4IEBACisvKioKKyAqIFxmaWxlIGRybV9pbmZvLmMKKyAqIERSTSBpbmZvIGZpbGUgaW1wbGVtZW50YXRpb25zCisgKgorICogXGF1dGhvciBCZW4gR2FtYXJpIDxiZ2FtYXJpQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogQ3JlYXRlZDogU3VuIERlYyAyMSAxMzowOTo1MCAyMDA4IGJ5IGJnYW1hcmlAZ21haWwuY29tCisgKgorICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IDIwMDggQmVuIEdhbWFyaSA8YmdhbWFyaUBnbWFpbC5jb20+CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImRybVAuaCIKKworLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9uYW1lIiBpcyByZWFkLgorICoKKyAqIFByaW50cyB0aGUgZGV2aWNlIG5hbWUgdG9nZXRoZXIgd2l0aCB0aGUgYnVzIGlkIGlmIGF2YWlsYWJsZS4KKyAqLworaW50IGRybV9uYW1lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSBub2RlLT5taW5vcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gbWlub3ItPm1hc3RlcjsKKworCWlmICghbWFzdGVyKQorCQlyZXR1cm4gMDsKKworCWlmIChtYXN0ZXItPnVuaXF1ZSkgeworCQlzZXFfcHJpbnRmKG0sICIlcyAlcyAlc1xuIiwKKwkJCSAgIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQkgICBwY2lfbmFtZShkZXYtPnBkZXYpLCBtYXN0ZXItPnVuaXF1ZSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQkgICBwY2lfbmFtZShkZXYtPnBkZXYpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi92bSIgaXMgcmVhZC4KKyAqCisgKiBQcmludHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1hcHBpbmdzIGluIGRybV9kZXZpY2U6Om1hcGxpc3QuCisgKi8KK2ludCBkcm1fdm1faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKKworCS8qIEhhcmRjb2RlZCBmcm9tIF9EUk1fRlJBTUVfQlVGRkVSLAorCSAgIF9EUk1fUkVHSVNURVJTLCBfRFJNX1NITSwgX0RSTV9BR1AsIGFuZAorCSAgIF9EUk1fU0NBVFRFUl9HQVRIRVIgYW5kIF9EUk1fQ09OU0lTVEVOVCAqLworCWNvbnN0IGNoYXIgKnR5cGVzW10gPSB7ICJGQiIsICJSRUciLCAiU0hNIiwgIkFHUCIsICJTRyIsICJQQ0kiIH07CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlzZXFfcHJpbnRmKG0sICJzbG90CSBvZmZzZXQJICAgICAgc2l6ZSB0eXBlIGZsYWdzCSBhZGRyZXNzIG10cnJcblxuIik7CisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyX2xpc3QsICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKKwkJbWFwID0gcl9saXN0LT5tYXA7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CisJCWlmIChtYXAtPnR5cGUgPCAwIHx8IG1hcC0+dHlwZSA+IDUpCisJCQl0eXBlID0gIj8/IjsKKwkJZWxzZQorCQkJdHlwZSA9IHR5cGVzW21hcC0+dHlwZV07CisKKwkJc2VxX3ByaW50ZihtLCAiJTRkIDB4JTA4bHggMHglMDhseCAlNC40cyAgMHglMDJ4IDB4JTA4bHggIiwKKwkJCSAgIGksCisJCQkgICBtYXAtPm9mZnNldCwKKwkJCSAgIG1hcC0+c2l6ZSwgdHlwZSwgbWFwLT5mbGFncywKKwkJCSAgICh1bnNpZ25lZCBsb25nKSByX2xpc3QtPnVzZXJfdG9rZW4pOworCQlpZiAobWFwLT5tdHJyIDwgMCkKKwkJCXNlcV9wcmludGYobSwgIm5vbmVcbiIpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKG0sICIlNGRcbiIsIG1hcC0+bXRycik7CisJCWkrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vcXVldWVzIiBpcyByZWFkLgorICovCitpbnQgZHJtX3F1ZXVlc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWludCBpOworCXN0cnVjdCBkcm1fcXVldWUgKnE7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2VxX3ByaW50ZihtLCAiICBjdHgvZmxhZ3MgICB1c2UgICBmaW4iCisJCSAgICIgICBibGsvcncvcndmICB3YWl0ICAgIGZsdXNoZWQJICAgcXVldWVkIgorCQkgICAiICAgICAgbG9ja3NcblxuIik7CisJZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVfY291bnQ7IGkrKykgeworCQlxID0gZGV2LT5xdWV1ZWxpc3RbaV07CisJCWF0b21pY19pbmMoJnEtPnVzZV9jb3VudCk7CisJCXNlcV9wcmludGYobSwgICAiJTVkLzB4JTAzeCAlNWQgJTVkIgorCQkJICAgIiAlNWQvJWMlYy8lYyVjJWMgJTVaZFxuIiwKKwkJCSAgIGksCisJCQkgICBxLT5mbGFncywKKwkJCSAgIGF0b21pY19yZWFkKCZxLT51c2VfY291bnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmZpbmFsaXphdGlvbiksCisJCQkgICBhdG9taWNfcmVhZCgmcS0+YmxvY2tfY291bnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3JlYWQpID8gJ3InIDogJy0nLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3dyaXRlKSA/ICd3JyA6ICctJywKKwkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPnJlYWRfcXVldWUpID8gJ3InIDogJy0nLAorCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+d3JpdGVfcXVldWUpID8gJ3cnIDogJy0nLAorCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+Zmx1c2hfcXVldWUpID8gJ2YnIDogJy0nLAorCQkJICAgRFJNX0JVRkNPVU5UKCZxLT53YWl0bGlzdCkpOworCQlhdG9taWNfZGVjKCZxLT51c2VfY291bnQpOworCX0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9idWZzIiBpcyByZWFkLgorICovCitpbnQgZHJtX2J1ZnNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYTsKKwlpbnQgaSwgc2VnX3BhZ2VzOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRtYSA9IGRldi0+ZG1hOworCWlmICghZG1hKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKG0sICIgbyAgICAgc2l6ZSBjb3VudCAgZnJlZQkgc2VncyBwYWdlcyAgICBrQlxuXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDw9IERSTV9NQVhfT1JERVI7IGkrKykgeworCQlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkgeworCQkJc2VnX3BhZ2VzID0gZG1hLT5idWZzW2ldLnNlZ19jb3VudCAqICgxIDw8IGRtYS0+YnVmc1tpXS5wYWdlX29yZGVyKTsKKwkJCXNlcV9wcmludGYobSwgIiUyZCAlOGQgJTVkICU1ZCAlNWQgJTVkICU1bGRcbiIsCisJCQkJICAgaSwKKwkJCQkgICBkbWEtPmJ1ZnNbaV0uYnVmX3NpemUsCisJCQkJICAgZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCwKKwkJCQkgICBhdG9taWNfcmVhZCgmZG1hLT5idWZzW2ldLmZyZWVsaXN0LmNvdW50KSwKKwkJCQkgICBkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50LAorCQkJCSAgIHNlZ19wYWdlcywKKwkJCQkgICBzZWdfcGFnZXMgKiBQQUdFX1NJWkUgLyAxMDI0KTsKKwkJfQorCX0KKwlzZXFfcHJpbnRmKG0sICJcbiIpOworCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7CisJCWlmIChpICYmICEoaSAlIDMyKSkKKwkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCXNlcV9wcmludGYobSwgIiAlZCIsIGRtYS0+YnVmbGlzdFtpXS0+bGlzdCk7CisJfQorCXNlcV9wcmludGYobSwgIlxuIik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vdmJsYW5rIiBpcyByZWFkLgorICovCitpbnQgZHJtX3ZibGFua19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWludCBjcnRjOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWZvciAoY3J0YyA9IDA7IGNydGMgPCBkZXYtPm51bV9jcnRjczsgY3J0YysrKSB7CisJCXNlcV9wcmludGYobSwgIkNSVEMgJWQgZW5hYmxlOiAgICAgJWRcbiIsCisJCQkgICBjcnRjLCBhdG9taWNfcmVhZCgmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pKTsKKwkJc2VxX3ByaW50ZihtLCAiQ1JUQyAlZCBjb3VudGVyOiAgICAlZFxuIiwKKwkJCSAgIGNydGMsIGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKSk7CisJCXNlcV9wcmludGYobSwgIkNSVEMgJWQgbGFzdCB3YWl0OiAgJWRcbiIsCisJCQkgICBjcnRjLCBkZXYtPmxhc3RfdmJsYW5rX3dhaXRbY3J0Y10pOworCQlzZXFfcHJpbnRmKG0sICJDUlRDICVkIGluIG1vZGVzZXQ6ICVkXG4iLAorCQkJICAgY3J0YywgZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vY2xpZW50cyIgaXMgcmVhZC4KKyAqCisgKi8KK2ludCBkcm1fY2xpZW50c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1fZmlsZSAqcHJpdjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlzZXFfcHJpbnRmKG0sICJhIGRldglwaWQgICAgdWlkCW1hZ2ljCSAgaW9jdGxzXG5cbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJpdiwgJmRldi0+ZmlsZWxpc3QsIGxoZWFkKSB7CisJCXNlcV9wcmludGYobSwgIiVjICUzZCAlNWQgJTVkICUxMHUgJTEwbHVcbiIsCisJCQkgICBwcml2LT5hdXRoZW50aWNhdGVkID8gJ3knIDogJ24nLAorCQkJICAgcHJpdi0+bWlub3ItPmluZGV4LAorCQkJICAgcHJpdi0+cGlkLAorCQkJICAgcHJpdi0+dWlkLCBwcml2LT5tYWdpYywgcHJpdi0+aW9jdGxfY291bnQpOworCX0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgZHJtX2dlbV9vbmVfbmFtZV9pbmZvKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcHRyOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGRhdGE7CisKKwlzZXFfcHJpbnRmKG0sICJuYW1lICVkIHNpemUgJXpkXG4iLCBvYmotPm5hbWUsIG9iai0+c2l6ZSk7CisKKwlzZXFfcHJpbnRmKG0sICIlNmQgJTh6ZCAlN2QgJThkXG4iLAorCQkgICBvYmotPm5hbWUsIG9iai0+c2l6ZSwKKwkJICAgYXRvbWljX3JlYWQoJm9iai0+aGFuZGxlY291bnQucmVmY291bnQpLAorCQkgICBhdG9taWNfcmVhZCgmb2JqLT5yZWZjb3VudC5yZWZjb3VudCkpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2dlbV9uYW1lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisKKwlzZXFfcHJpbnRmKG0sICIgIG5hbWUgICAgIHNpemUgaGFuZGxlcyByZWZjb3VudFxuIik7CisJaWRyX2Zvcl9lYWNoKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgZHJtX2dlbV9vbmVfbmFtZV9pbmZvLCBtKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9nZW1fb2JqZWN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkKiBkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisKKwlzZXFfcHJpbnRmKG0sICIlZCBvYmplY3RzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfY291bnQpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBvYmplY3QgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPm9iamVjdF9tZW1vcnkpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBwaW5uZWRcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9jb3VudCkpOworCXNlcV9wcmludGYobSwgIiVkIHBpbiBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX21lbW9yeSkpOworCXNlcV9wcmludGYobSwgIiVkIGd0dCBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+Z3R0X21lbW9yeSkpOworCXNlcV9wcmludGYobSwgIiVkIGd0dCB0b3RhbFxuIiwgZGV2LT5ndHRfdG90YWwpOworCXJldHVybiAwOworfQorCisjaWYgRFJNX0RFQlVHX0NPREUKKworaW50IGRybV92bWFfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAqcHQ7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisjaWYgZGVmaW5lZChfX2kzODZfXykKKwl1bnNpZ25lZCBpbnQgcGdwcm90OworI2VuZGlmCisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2VxX3ByaW50ZihtLCAidm1hIHVzZSBjb3VudDogJWQsIGhpZ2hfbWVtb3J5ID0gJXAsIDB4JTA4bGx4XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZGV2LT52bWFfY291bnQpLAorCQkgICBoaWdoX21lbW9yeSwgKHU2NCl2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocHQsICZkZXYtPnZtYWxpc3QsIGhlYWQpIHsKKwkJdm1hID0gcHQtPnZtYTsKKwkJaWYgKCF2bWEpCisJCQljb250aW51ZTsKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIlxuJTVkIDB4JTA4bHgtMHglMDhseCAlYyVjJWMlYyVjJWMgMHglMDhseDAwMCIsCisJCQkgICBwdC0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMgPyAneCcgOiAnLScsCisJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUgPyAncycgOiAncCcsCisJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEID8gJ2wnIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX0lPID8gJ2knIDogJy0nLAorCQkJICAgdm1hLT52bV9wZ29mZik7CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorCQlwZ3Byb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJc2VxX3ByaW50ZihtLCAiICVjJWMlYyVjJWMlYyVjJWMlYyIsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9QUkVTRU5UID8gJ3AnIDogJy0nLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUlcgPyAndycgOiAncicsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9VU0VSID8gJ3UnIDogJ3MnLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUFdUID8gJ3QnIDogJ2InLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUENEID8gJ3UnIDogJ2MnLAorCQkJICAgcGdwcm90ICYgX1BBR0VfQUNDRVNTRUQgPyAnYScgOiAnLScsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9ESVJUWSA/ICdkJyA6ICctJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX1BTRSA/ICdtJyA6ICdrJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX0dMT0JBTCA/ICdnJyA6ICdsJyk7CisjZW5kaWYKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCmluZGV4IDhkZjg0OWYuLjliM2M1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCkBAIC0zNyw1OCArMzcsMTA1IEBACiAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogCi1zdGF0aWMgaW50IGRybV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBkcm1fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2NsaWVudHNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV9xdWV1ZXNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2J1ZnNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV92YmxhbmtfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci0jaWYgRFJNX0RFQlVHX0NPREUKLXN0YXRpYyBpbnQgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemF0aW9uLCBldGMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgogICogUHJvYyBmaWxlIGxpc3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7Ci0JY29uc3QgY2hhciAqbmFtZTsJLyoqPCBmaWxlIG5hbWUgKi8KLQlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJCS8qKjwgcHJvYyBjYWxsYmFjayovCi0JdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KLX0gZHJtX3Byb2NfbGlzdFtdID0geworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGRybV9wcm9jX2xpc3RbXSA9IHsKIAl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKLQl7Im1lbSIsIGRybV9tZW1faW5mbywgMH0sCiAJeyJ2bSIsIGRybV92bV9pbmZvLCAwfSwKIAl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvLCAwfSwKIAl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mbywgMH0sCiAJeyJidWZzIiwgZHJtX2J1ZnNfaW5mbywgMH0sCi0JeyJ2YmxhbmsiLCBkcm1fdmJsYW5rX2luZm8sIDB9LAogCXsiZ2VtX25hbWVzIiwgZHJtX2dlbV9uYW1lX2luZm8sIERSSVZFUl9HRU19LAogCXsiZ2VtX29iamVjdHMiLCBkcm1fZ2VtX29iamVjdF9pbmZvLCBEUklWRVJfR0VNfSwKICNpZiBEUk1fREVCVUdfQ09ERQotCXsidm1hIiwgZHJtX3ZtYV9pbmZvfSwKKwl7InZtYSIsIGRybV92bWFfaW5mbywgMH0sCiAjZW5kaWYKIH07Ci0KICNkZWZpbmUgRFJNX1BST0NfRU5UUklFUyBBUlJBWV9TSVpFKGRybV9wcm9jX2xpc3QpCiAKK3N0YXRpYyBpbnQgZHJtX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSogbm9kZSA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbm9kZS0+aW5mb19lbnQtPnNob3csIG5vZGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcm1fcHJvY19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX3Byb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKwogLyoqCi0gKiBJbml0aWFsaXplIHRoZSBEUkkgcHJvYyBmaWxlc3lzdGVtIGZvciBhIGRldmljZS4KKyAqIEluaXRpYWxpemUgYSBnaXZlbiBzZXQgb2YgcHJvYyBmaWxlcyBmb3IgYSBkZXZpY2UKICAqCi0gKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCi0gKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlci4KKyAqIFxwYXJhbSBmaWxlcyBUaGUgYXJyYXkgb2YgZmlsZXMgdG8gY3JlYXRlCisgKiBccGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBmaWxlcyBnaXZlbgorICogXHBhcmFtIHJvb3QgRFJJIHByb2MgZGlyIGVudHJ5LgorICogXHBhcmFtIG1pbm9yIGRldmljZSBtaW5vciBudW1iZXIKKyAqIFxyZXR1cm4gWmVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlCisgKgorICogQ3JlYXRlIGEgZ2l2ZW4gc2V0IG9mIHByb2MgZmlsZXMgcmVwcmVzZW50ZWQgYnkgYW4gYXJyYXkgb2YKKyAqIGdkbV9wcm9jX2xpc3RzIGluIHRoZSBnaXZlbiByb290IGRpcmVjdG9yeS4KKyAqLworaW50IGRybV9wcm9jX2NyZWF0ZV9maWxlcyhzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqZmlsZXMsIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290LCBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqdG1wOworCWNoYXIgbmFtZVs2NF07CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXUzMiBmZWF0dXJlcyA9IGZpbGVzW2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKworCQl0bXAgPSBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwgX0RSTV9EUklWRVIpOworCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShmaWxlc1tpXS5uYW1lLCBTX0lGUkVHIHwgU19JUlVHTywgcm9vdCk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLyVzLyVzXG4iLAorCQkJCSAgbmFtZSwgZmlsZXNbaV0ubmFtZSk7CisJCQlkcm1fZnJlZSh0bXAsIHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksCisJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZW50LT5wcm9jX2ZvcHMgPSAmZHJtX3Byb2NfZm9wczsKKwkJZW50LT5kYXRhID0gdG1wOworCQl0bXAtPm1pbm9yID0gbWlub3I7CisJCXRtcC0+aW5mb19lbnQgPSAmZmlsZXNbaV07CisJCWxpc3RfYWRkKCYodG1wLT5saXN0KSwgJihtaW5vci0+cHJvY19ub2Rlcy5saXN0KSk7CisJfQorCXJldHVybiAwOworCitmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5wcm9jX3Jvb3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgRFJJIHByb2MgZmlsZXN5c3RlbSBmb3IgYSBkZXZpY2UKKyAqCisgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UKKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyCiAgKiBccGFyYW0gcm9vdCBEUkkgcHJvYyBkaXIgZW50cnkuCiAgKiBccGFyYW0gZGV2X3Jvb3QgcmVzdWx0aW5nIERSSSBkZXZpY2UgcHJvYyBkaXIgZW50cnkuCiAgKiBccmV0dXJuIHJvb3QgZW50cnkgcG9pbnRlciBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCkBAIC0xMDEsMzQgKzE0OCwyNCBAQAogCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQgaSwgaiwgcmV0OwogCWNoYXIgbmFtZVs2NF07CisJaW50IHJldDsKIAorCUlOSVRfTElTVF9IRUFEKCZtaW5vci0+cHJvY19ub2Rlcy5saXN0KTsKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yX2lkKTsKLQltaW5vci0+ZGV2X3Jvb3QgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3QpOwotCWlmICghbWlub3ItPmRldl9yb290KSB7CisJbWlub3ItPnByb2Nfcm9vdCA9IHByb2NfbWtkaXIobmFtZSwgcm9vdCk7CisJaWYgKCFtaW5vci0+cHJvY19yb290KSB7CiAJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvJXNcbiIsIG5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykgewotCQl1MzIgZmVhdHVyZXMgPSBkcm1fcHJvY19saXN0W2ldLmRyaXZlcl9mZWF0dXJlczsKLQotCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgotCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCi0JCQljb250aW51ZTsKLQotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCi0JCQkJCVNfSUZSRUcgfCBTX0lSVUdPLCBtaW5vci0+ZGV2X3Jvb3QpOwotCQlpZiAoIWVudCkgewotCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKLQkJCQkgIG5hbWUsIGRybV9wcm9jX2xpc3RbaV0ubmFtZSk7Ci0JCQlyZXQgPSAtMTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQllbnQtPnJlYWRfcHJvYyA9IGRybV9wcm9jX2xpc3RbaV0uZjsKLQkJZW50LT5kYXRhID0gbWlub3I7CisJcmV0ID0gZHJtX3Byb2NfY3JlYXRlX2ZpbGVzKGRybV9wcm9jX2xpc3QsIERSTV9QUk9DX0VOVFJJRVMsCisJCQkJICAgIG1pbm9yLT5wcm9jX3Jvb3QsIG1pbm9yKTsKKwlpZiAocmV0KSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOworCQltaW5vci0+cHJvY19yb290ID0gTlVMTDsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGNvcmUgZHJtIHByb2MgZmlsZXNcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChkZXYtPmRyaXZlci0+cHJvY19pbml0KSB7CkBAIC0xMzYsMTkgKzE3MywzMiBAQAogCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoIkRSTTogRHJpdmVyIGZhaWxlZCB0byBpbml0aWFsaXplICIKIAkJCQkgICIvcHJvYy9kcmkuXG4iKTsKLQkJCWdvdG8gZmFpbDsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKLSBmYWlsOgorfQogCi0JZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAotCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKLQltaW5vci0+ZGV2X3Jvb3QgPSBOVUxMOwotCXJldHVybiByZXQ7CitpbnQgZHJtX3Byb2NfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpxOworCXN0cnVjdCBkcm1faW5mb19ub2RlICp0bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBxLCAmbWlub3ItPnByb2Nfbm9kZXMubGlzdCkgeworCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkcm1faW5mb19ub2RlLCBsaXN0KTsKKwkJCWlmICh0bXAtPmluZm9fZW50ID09ICZmaWxlc1tpXSkgeworCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGZpbGVzW2ldLm5hbWUsCisJCQkJCQkgIG1pbm9yLT5wcm9jX3Jvb3QpOworCQkJCWxpc3RfZGVsKHBvcyk7CisJCQkJZHJtX2ZyZWUodG1wLCBzaXplb2Yoc3RydWN0IGRybV9pbmZvX25vZGUpLAorCQkJCQkgX0RSTV9EUklWRVIpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE2NCw1NzAgKzIxNCwxOSBAQAogaW50IGRybV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgaTsKIAljaGFyIG5hbWVbNjRdOwogCi0JaWYgKCFyb290IHx8ICFtaW5vci0+ZGV2X3Jvb3QpCisJaWYgKCFyb290IHx8ICFtaW5vci0+cHJvY19yb290KQogCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPmRyaXZlci0+cHJvY19jbGVhbnVwKQogCQlkZXYtPmRyaXZlci0+cHJvY19jbGVhbnVwKG1pbm9yKTsKIAotCWZvciAoaSA9IDA7IGkgPCBEUk1fUFJPQ19FTlRSSUVTOyBpKyspCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwgbWlub3ItPmRldl9yb290KTsKKwlkcm1fcHJvY19yZW1vdmVfZmlsZXMoZHJtX3Byb2NfbGlzdCwgRFJNX1BST0NfRU5UUklFUywgbWlub3IpOworCiAJc3ByaW50ZihuYW1lLCAiJWQiLCBtaW5vci0+aW5kZXgpOwogCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vbmFtZSIgaXMgcmVhZC4KLSAqCi0gKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCi0gKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCi0gKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCi0gKiBccGFyYW0gcmVxdWVzdCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLgotICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCi0gKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCi0gKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICoKLSAqIFByaW50cyB0aGUgZGV2aWNlIG5hbWUgdG9nZXRoZXIgd2l0aCB0aGUgYnVzIGlkIGlmIGF2YWlsYWJsZS4KLSAqLwotc3RhdGljIGludCBkcm1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gbWlub3ItPm1hc3RlcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFtYXN0ZXIpCi0JCXJldHVybiAwOwotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JaWYgKG1hc3Rlci0+dW5pcXVlKSB7Ci0JCURSTV9QUk9DX1BSSU5UKCIlcyAlcyAlc1xuIiwKLQkJCSAgICAgICBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAotCQkJICAgICAgIHBjaV9uYW1lKGRldi0+cGRldiksIG1hc3Rlci0+dW5pcXVlKTsKLQl9IGVsc2UgewotCQlEUk1fUFJPQ19QUklOVCgiJXMgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCi0JCQkgICAgICAgcGNpX25hbWUoZGV2LT5wZGV2KSk7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vdm0iIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqCi0gKiBQcmludHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1hcHBpbmdzIGluIGRybV9kZXZpY2U6Om1hcGxpc3QuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX192bV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCBsZW4gPSAwOwotCXN0cnVjdCBkcm1fbWFwICptYXA7Ci0Jc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwotCi0JLyogSGFyZGNvZGVkIGZyb20gX0RSTV9GUkFNRV9CVUZGRVIsCi0JICAgX0RSTV9SRUdJU1RFUlMsIF9EUk1fU0hNLCBfRFJNX0FHUCwgYW5kCi0JICAgX0RSTV9TQ0FUVEVSX0dBVEhFUiBhbmQgX0RSTV9DT05TSVNURU5UICovCi0JY29uc3QgY2hhciAqdHlwZXNbXSA9IHsgIkZCIiwgIlJFRyIsICJTSE0iLCAiQUdQIiwgIlNHIiwgIlBDSSIgfTsKLQljb25zdCBjaGFyICp0eXBlOwotCWludCBpOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0KLQlEUk1fUFJPQ19QUklOVCgic2xvdAkgb2Zmc2V0CSAgICAgIHNpemUgdHlwZSBmbGFncwkgIgotCQkgICAgICAgImFkZHJlc3MgbXRyclxuXG4iKTsKLQlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJfbGlzdCwgJmRldi0+bWFwbGlzdCwgaGVhZCkgewotCQltYXAgPSByX2xpc3QtPm1hcDsKLQkJaWYgKCFtYXApCi0JCQljb250aW51ZTsKLQkJaWYgKG1hcC0+dHlwZSA8IDAgfHwgbWFwLT50eXBlID4gNSkKLQkJCXR5cGUgPSAiPz8iOwotCQllbHNlCi0JCQl0eXBlID0gdHlwZXNbbWFwLT50eXBlXTsKLQkJRFJNX1BST0NfUFJJTlQoIiU0ZCAweCUwOGx4IDB4JTA4bHggJTQuNHMgIDB4JTAyeCAweCUwOGx4ICIsCi0JCQkgICAgICAgaSwKLQkJCSAgICAgICBtYXAtPm9mZnNldCwKLQkJCSAgICAgICBtYXAtPnNpemUsIHR5cGUsIG1hcC0+ZmxhZ3MsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIHJfbGlzdC0+dXNlcl90b2tlbik7Ci0JCWlmIChtYXAtPm10cnIgPCAwKSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgibm9uZVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiJTRkXG4iLCBtYXAtPm10cnIpOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotLyoqCi0gKiBTaW1wbHkgY2FsbHMgX3ZtX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KLSAqLwotc3RhdGljIGludCBkcm1fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fdm1faW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9xdWV1ZXMiIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqLwotc3RhdGljIGludCBkcm1fX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHJtX3F1ZXVlICpxOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0KLQlEUk1fUFJPQ19QUklOVCgiICBjdHgvZmxhZ3MgICB1c2UgICBmaW4iCi0JCSAgICAgICAiICAgYmxrL3J3L3J3ZiAgd2FpdCAgICBmbHVzaGVkCSAgIHF1ZXVlZCIKLQkJICAgICAgICIgICAgICBsb2Nrc1xuXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZV9jb3VudDsgaSsrKSB7Ci0JCXEgPSBkZXYtPnF1ZXVlbGlzdFtpXTsKLQkJYXRvbWljX2luYygmcS0+dXNlX2NvdW50KTsKLQkJRFJNX1BST0NfUFJJTlRfUkVUKGF0b21pY19kZWMoJnEtPnVzZV9jb3VudCksCi0JCQkJICAgIiU1ZC8weCUwM3ggJTVkICU1ZCIKLQkJCQkgICAiICU1ZC8lYyVjLyVjJWMlYyAlNVpkXG4iLAotCQkJCSAgIGksCi0JCQkJICAgcS0+ZmxhZ3MsCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPnVzZV9jb3VudCksCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmZpbmFsaXphdGlvbiksCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX2NvdW50KSwKLQkJCQkgICBhdG9taWNfcmVhZCgmcS0+YmxvY2tfcmVhZCkgPyAncicgOiAnLScsCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3dyaXRlKSA/ICd3JyA6ICctJywKLQkJCQkgICB3YWl0cXVldWVfYWN0aXZlKCZxLT5yZWFkX3F1ZXVlKSA/ICdyJyA6ICctJywKLQkJCQkgICB3YWl0cXVldWVfYWN0aXZlKCZxLT4KLQkJCQkJCSAgICB3cml0ZV9xdWV1ZSkgPyAndycgOiAnLScsCi0JCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+Ci0JCQkJCQkgICAgZmx1c2hfcXVldWUpID8gJ2YnIDogJy0nLAotCQkJCSAgIERSTV9CVUZDT1VOVCgmcS0+d2FpdGxpc3QpKTsKLQkJYXRvbWljX2RlYygmcS0+dXNlX2NvdW50KTsKLQl9Ci0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotLyoqCi0gKiBTaW1wbHkgY2FsbHMgX3F1ZXVlc19pbmZvKCkgd2hpbGUgaG9sZGluZyB0aGUgZHJtX2RldmljZTo6c3RydWN0X211dGV4IGxvY2suCi0gKi8KLXN0YXRpYyBpbnQgZHJtX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX19xdWV1ZXNfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9idWZzIiBpcyByZWFkLgotICoKLSAqIFxwYXJhbSBidWYgb3V0cHV0IGJ1ZmZlci4KLSAqIFxwYXJhbSBzdGFydCBzdGFydCBvZiBvdXRwdXQgZGF0YS4KLSAqIFxwYXJhbSBvZmZzZXQgcmVxdWVzdGVkIHN0YXJ0IG9mZnNldC4KLSAqIFxwYXJhbSByZXF1ZXN0IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCi0gKiBccGFyYW0gZW9mIHdoZXRoZXIgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJldHVybi4KLSAqIFxwYXJhbSBkYXRhIHByaXZhdGUgZGF0YS4KLSAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX19idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwotCWludCBpOwotCi0JaWYgKCFkbWEgfHwgb2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCURSTV9QUk9DX1BSSU5UKCIgbyAgICAgc2l6ZSBjb3VudCAgZnJlZQkgc2VncyBwYWdlcyAgICBrQlxuXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDw9IERSTV9NQVhfT1JERVI7IGkrKykgewotCQlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkKLQkJCURSTV9QUk9DX1BSSU5UKCIlMmQgJThkICU1ZCAlNWQgJTVkICU1ZCAlNWxkXG4iLAotCQkJCSAgICAgICBpLAotCQkJCSAgICAgICBkbWEtPmJ1ZnNbaV0uYnVmX3NpemUsCi0JCQkJICAgICAgIGRtYS0+YnVmc1tpXS5idWZfY291bnQsCi0JCQkJICAgICAgIGF0b21pY19yZWFkKCZkbWEtPmJ1ZnNbaV0KLQkJCQkJCSAgIC5mcmVlbGlzdC5jb3VudCksCi0JCQkJICAgICAgIGRtYS0+YnVmc1tpXS5zZWdfY291bnQsCi0JCQkJICAgICAgIGRtYS0+YnVmc1tpXS5zZWdfY291bnQKLQkJCQkgICAgICAgKiAoMSA8PCBkbWEtPmJ1ZnNbaV0ucGFnZV9vcmRlciksCi0JCQkJICAgICAgIChkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50Ci0JCQkJCSogKDEgPDwgZG1hLT5idWZzW2ldLnBhZ2Vfb3JkZXIpKQotCQkJCSAgICAgICAqIFBBR0VfU0laRSAvIDEwMjQpOwotCX0KLQlEUk1fUFJPQ19QUklOVCgiXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewotCQlpZiAoaSAmJiAhKGkgJSAzMikpCi0JCQlEUk1fUFJPQ19QUklOVCgiXG4iKTsKLQkJRFJNX1BST0NfUFJJTlQoIiAlZCIsIGRtYS0+YnVmbGlzdFtpXS0+bGlzdCk7Ci0JfQotCURSTV9QUk9DX1BSSU5UKCJcbiIpOwotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF9idWZzX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KLSAqLwotc3RhdGljIGludCBkcm1fYnVmc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fYnVmc19pbmZvKGJ1Ziwgc3RhcnQsIG9mZnNldCwgcmVxdWVzdCwgZW9mLCBkYXRhKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL3ZibGFuayIgaXMgcmVhZC4KLSAqCi0gKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCi0gKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCi0gKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCi0gKiBccGFyYW0gcmVxdWVzdCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLgotICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCi0gKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCi0gKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICovCi1zdGF0aWMgaW50IGRybV9fdmJsYW5rX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlpbnQgY3J0YzsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JZm9yIChjcnRjID0gMDsgY3J0YyA8IGRldi0+bnVtX2NydGNzOyBjcnRjKyspIHsKLQkJRFJNX1BST0NfUFJJTlQoIkNSVEMgJWQgZW5hYmxlOiAgICAgJWRcbiIsCi0JCQkgICAgICAgY3J0YywgYXRvbWljX3JlYWQoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSk7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGNvdW50ZXI6ICAgICVkXG4iLAotCQkJICAgICAgIGNydGMsIGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKSk7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGxhc3Qgd2FpdDogICVkXG4iLAotCQkJICAgICAgIGNydGMsIGRldi0+bGFzdF92Ymxhbmtfd2FpdFtjcnRjXSk7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGluIG1vZGVzZXQ6ICVkXG4iLAotCQkJICAgICAgIGNydGMsIGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSk7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF92YmxhbmtfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9tdXRleCBsb2NrLgotICovCi1zdGF0aWMgaW50IGRybV92YmxhbmtfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXQgPSBkcm1fX3ZibGFua19pbmZvKGJ1Ziwgc3RhcnQsIG9mZnNldCwgcmVxdWVzdCwgZW9mLCBkYXRhKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL2NsaWVudHMiIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqLwotc3RhdGljIGludCBkcm1fX2NsaWVudHNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCBsZW4gPSAwOwotCXN0cnVjdCBkcm1fZmlsZSAqcHJpdjsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JRFJNX1BST0NfUFJJTlQoImEgZGV2CXBpZCAgICB1aWQJbWFnaWMJICBpb2N0bHNcblxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwcml2LCAmZGV2LT5maWxlbGlzdCwgbGhlYWQpIHsKLQkJRFJNX1BST0NfUFJJTlQoIiVjICUzZCAlNWQgJTVkICUxMHUgJTEwbHVcbiIsCi0JCQkgICAgICAgcHJpdi0+YXV0aGVudGljYXRlZCA/ICd5JyA6ICduJywKLQkJCSAgICAgICBwcml2LT5taW5vci0+aW5kZXgsCi0JCQkgICAgICAgcHJpdi0+cGlkLAotCQkJICAgICAgIHByaXYtPnVpZCwgcHJpdi0+bWFnaWMsIHByaXYtPmlvY3RsX2NvdW50KTsKLQl9Ci0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotLyoqCi0gKiBTaW1wbHkgY2FsbHMgX2NsaWVudHNfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9tdXRleCBsb2NrLgotICovCi1zdGF0aWMgaW50IGRybV9jbGllbnRzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX19jbGllbnRzX2luZm8oYnVmLCBzdGFydCwgb2Zmc2V0LCByZXF1ZXN0LCBlb2YsIGRhdGEpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBkcm1fZ2VtX25hbWVfaW5mb19kYXRhIHsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKmJ1ZjsKLSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBlb2Y7Ci19OwotCi1zdGF0aWMgaW50IGRybV9nZW1fb25lX25hbWVfaW5mbyhpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsKLQlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSAgICpuaWQgPSBkYXRhOwotCi0JRFJNX0lORk8oIm5hbWUgJWQgc2l6ZSAlemRcbiIsIG9iai0+bmFtZSwgb2JqLT5zaXplKTsKLQlpZiAobmlkLT5lb2YpCi0JCXJldHVybiAwOwotCi0JbmlkLT5sZW4gKz0gc3ByaW50ZigmbmlkLT5idWZbbmlkLT5sZW5dLAotCQkJICAgICIlNmQgJTh6ZCAlN2QgJThkXG4iLAotCQkJICAgIG9iai0+bmFtZSwgb2JqLT5zaXplLAotCQkJICAgIGF0b21pY19yZWFkKCZvYmotPmhhbmRsZWNvdW50LnJlZmNvdW50KSwKLQkJCSAgICBhdG9taWNfcmVhZCgmb2JqLT5yZWZjb3VudC5yZWZjb3VudCkpOwotCWlmIChuaWQtPmxlbiA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCW5pZC0+ZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRybV9nZW1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0Jc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgbmlkOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQluaWQubGVuID0gc3ByaW50ZihidWYsICIgIG5hbWUgICAgIHNpemUgaGFuZGxlcyByZWZjb3VudFxuIik7Ci0JbmlkLmJ1ZiA9IGJ1ZjsKLQluaWQuZW9mID0gMDsKLQlpZHJfZm9yX2VhY2goJmRldi0+b2JqZWN0X25hbWVfaWRyLCBkcm1fZ2VtX29uZV9uYW1lX2luZm8sICZuaWQpOwotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCWlmIChuaWQubGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIG5pZC5sZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0c1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X2NvdW50KSk7Ci0JRFJNX1BST0NfUFJJTlQoIiVkIG9iamVjdCBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X21lbW9yeSkpOwotCURSTV9QUk9DX1BSSU5UKCIlZCBwaW5uZWRcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9jb3VudCkpOwotCURSTV9QUk9DX1BSSU5UKCIlZCBwaW4gYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9tZW1vcnkpKTsKLQlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5ndHRfbWVtb3J5KSk7Ci0JRFJNX1BST0NfUFJJTlQoIiVkIGd0dCB0b3RhbFxuIiwgZGV2LT5ndHRfdG90YWwpOwotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi0jaWYgRFJNX0RFQlVHX0NPREUKLQotc3RhdGljIGludCBkcm1fX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAqcHQ7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0jaWYgZGVmaW5lZChfX2kzODZfXykKLQl1bnNpZ25lZCBpbnQgcGdwcm90OwotI2VuZGlmCi0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCURSTV9QUk9DX1BSSU5UKCJ2bWEgdXNlIGNvdW50OiAlZCwgaGlnaF9tZW1vcnkgPSAlcCwgMHglMDhseFxuIiwKLQkJICAgICAgIGF0b21pY19yZWFkKCZkZXYtPnZtYV9jb3VudCksCi0JCSAgICAgICBoaWdoX21lbW9yeSwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdCwgJmRldi0+dm1hbGlzdCwgaGVhZCkgewotCQlpZiAoISh2bWEgPSBwdC0+dm1hKSkKLQkJCWNvbnRpbnVlOwotCQlEUk1fUFJPQ19QUklOVCgiXG4lNWQgMHglMDhseC0weCUwOGx4ICVjJWMlYyVjJWMlYyAweCUwOGx4MDAwIiwKLQkJCSAgICAgICBwdC0+cGlkLAotCQkJICAgICAgIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgICAgdm1hLT52bV9lbmQsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX1JFQUQgPyAncicgOiAnLScsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSA/ICdzJyA6ICdwJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEID8gJ2wnIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9JTyA/ICdpJyA6ICctJywKLQkJCSAgICAgICB2bWEtPnZtX3Bnb2ZmKTsKLQotI2lmIGRlZmluZWQoX19pMzg2X18pCi0JCXBncHJvdCA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpOwotCQlEUk1fUFJPQ19QUklOVCgiICVjJWMlYyVjJWMlYyVjJWMlYyIsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFJFU0VOVCA/ICdwJyA6ICctJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9SVyA/ICd3JyA6ICdyJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9VU0VSID8gJ3UnIDogJ3MnLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX1BXVCA/ICd0JyA6ICdiJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9QQ0QgPyAndScgOiAnYycsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfQUNDRVNTRUQgPyAnYScgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfRElSVFkgPyAnZCcgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFNFID8gJ20nIDogJ2snLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX0dMT0JBTCA/ICdnJyA6ICdsJyk7Ci0jZW5kaWYKLQkJRFJNX1BST0NfUFJJTlQoIlxuIik7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX192bWFfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwppbmRleCA3YzhiMTViLi40OGYzM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwpAQCAtNTAsNiArNTAsNyBAQAogCiBzdHJ1Y3QgY2xhc3MgKmRybV9jbGFzczsKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHJtX3Byb2Nfcm9vdDsKK3N0cnVjdCBkZW50cnkgKmRybV9kZWJ1Z2ZzX3Jvb3Q7CiAKIHN0YXRpYyBpbnQgZHJtX21pbm9yX2dldF9pZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdHlwZSkKIHsKQEAgLTMxMyw3ICszMTQsMTUgQEAKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCX0gZWxzZQotCQluZXdfbWlub3ItPmRldl9yb290ID0gTlVMTDsKKwkJbmV3X21pbm9yLT5wcm9jX3Jvb3QgPSBOVUxMOworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJcmV0ID0gZHJtX2RlYnVnZnNfaW5pdChuZXdfbWlub3IsIG1pbm9yX2lkLCBkcm1fZGVidWdmc19yb290KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRFJNOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSAvZGVidWdmcy9kcmkuXG4iKTsKKwkJZ290byBlcnJfZzI7CisJfQorI2VuZGlmCiAKIAlyZXQgPSBkcm1fc3lzZnNfZGV2aWNlX2FkZChuZXdfbWlub3IpOwogCWlmIChyZXQpIHsKQEAgLTQ1MSw2ICs0NjAsMTAgQEAKIAogCWlmIChtaW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZKQogCQlkcm1fcHJvY19jbGVhbnVwKG1pbm9yLCBkcm1fcHJvY19yb290KTsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlkcm1fZGVidWdmc19jbGVhbnVwKG1pbm9yKTsKKyNlbmRpZgorCiAJZHJtX3N5c2ZzX2RldmljZV9yZW1vdmUobWlub3IpOwogCiAJaWRyX3JlbW92ZSgmZHJtX21pbm9yc19pZHIsIG1pbm9yLT5pbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggNWFhNjc4MC4uMTg2ZDA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMzU5LDggKzM1OSw4IEBACiAJRFJNX0RFQlVHKCJhZGRpbmcgXCIlc1wiIHRvIHN5c2ZzXG4iLAogCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAKLQlzbnByaW50Zihjb25uZWN0b3ItPmtkZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImNhcmQlZC0lcyIsCi0JCSBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCWRldl9zZXRfbmFtZSgmY29ubmVjdG9yLT5rZGV2LCAiY2FyZCVkLSVzIiwKKwkJICAgICBkZXYtPnByaW1hcnktPmluZGV4LCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY29ubmVjdG9yLT5rZGV2KTsKIAogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNzkzY2JhMy4uNTFjNWEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAogCSAgaTkxNV9nZW0ubyBcCiAJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKLQkgIGk5MTVfZ2VtX3Byb2MubyBcCisJICBpOTE1X2dlbV9kZWJ1Z2ZzLm8gXAogCSAgaTkxNV9nZW1fdGlsaW5nLm8gXAogCSAgaW50ZWxfZGlzcGxheS5vIFwKIAkgIGludGVsX2NydC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDZkMjFiOWUuLmE4MThiMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtNDEsNyArNDEsNiBAQAogaW50IGk5MTVfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwogCXUzMiBhY3RoZF9yZWcgPSBJU19JOTY1RyhkZXYpID8gQUNUSERfSTk2NSA6IEFDVEhEOwogCXUzMiBsYXN0X2FjdGhkID0gSTkxNV9SRUFEKGFjdGhkX3JlZyk7CkBAIC01OCw4ICs1NywxMiBAQAogCQlpZiAocmluZy0+c3BhY2UgPj0gbikKIAkJCXJldHVybiAwOwogCi0JCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKLQkJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJCWlmIChkZXYtPnByaW1hcnktPm1hc3RlcikgeworCQkJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKKwkJCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOworCQl9CisKIAogCQlpZiAocmluZy0+aGVhZCAhPSBsYXN0X2hlYWQpCiAJCQlpID0gMDsKQEAgLTM1Niw3ICszNTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9lbWl0X2NtZHMoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBfX3VzZXIgKiBidWZmZXIsIGludCBkd29yZHMpCitzdGF0aWMgaW50IGk5MTVfZW1pdF9jbWRzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgKmJ1ZmZlciwgaW50IGR3b3JkcykKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKQEAgLTM3MCw4ICszNzMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBkd29yZHM7KSB7CiAJCWludCBjbWQsIHN6OwogCi0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZjbWQsICZidWZmZXJbaV0sIHNpemVvZihjbWQpKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQljbWQgPSBidWZmZXJbaV07CiAKIAkJaWYgKChzeiA9IHZhbGlkYXRlX2NtZChjbWQpKSA9PSAwIHx8IGkgKyBzeiA+IGR3b3JkcykKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzc5LDExICszODEsNyBAQAogCQlPVVRfUklORyhjbWQpOwogCiAJCXdoaWxlICgrK2ksIC0tc3opIHsKLQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZjbWQsICZidWZmZXJbaV0sCi0JCQkJCQkJIHNpemVvZihjbWQpKSkgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJT1VUX1JJTkcoY21kKTsKKwkJCU9VVF9SSU5HKGJ1ZmZlcltpXSk7CiAJCX0KIAl9CiAKQEAgLTM5NywxNyArMzk1LDEzIEBACiAKIGludAogaTkxNV9lbWl0X2JveChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMsCisJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveGVzLAogCSAgICAgIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGJveDsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3ggPSBib3hlc1tpXTsKIAlSSU5HX0xPQ0FMUzsKIAotCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZib3gsICZib3hlc1tpXSwgc2l6ZW9mKGJveCkpKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQogCWlmIChib3gueTIgPD0gYm94LnkxIHx8IGJveC54MiA8PSBib3gueDEgfHwgYm94LnkyIDw9IDAgfHwgYm94LngyIDw9IDApIHsKIAkJRFJNX0VSUk9SKCJCYWQgYm94ICVkLCVkLi4lZCwlZFxuIiwKIAkJCSAgYm94LngxLCBib3gueTEsIGJveC54MiwgYm94LnkyKTsKQEAgLTQ2MCw3ICs0NTQsOSBAQAogfQogCiBzdGF0aWMgaW50IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgIGRybV9pOTE1X2NtZGJ1ZmZlcl90ICogY21kKQorCQkJCSAgIGRybV9pOTE1X2NtZGJ1ZmZlcl90ICpjbWQsCisJCQkJICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKKwkJCQkgICB2b2lkICpjbWRidWYpCiB7CiAJaW50IG5ib3ggPSBjbWQtPm51bV9jbGlwcmVjdHM7CiAJaW50IGkgPSAwLCBjb3VudCwgcmV0OwpAQCAtNDc2LDEzICs0NzIsMTMgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWlmIChpIDwgbmJveCkgewotCQkJcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNtZC0+Y2xpcHJlY3RzLCBpLAorCQkJcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKIAkJCQkJICAgIGNtZC0+RFIxLCBjbWQtPkRSNCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlyZXQgPSBpOTE1X2VtaXRfY21kcyhkZXYsIChpbnQgX191c2VyICopY21kLT5idWYsIGNtZC0+c3ogLyA0KTsKKwkJcmV0ID0gaTkxNV9lbWl0X2NtZHMoZGV2LCBjbWRidWYsIGNtZC0+c3ogLyA0KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNDkyLDEwICs0ODgsMTAgQEAKIH0KIAogc3RhdGljIGludCBpOTE1X2Rpc3BhdGNoX2JhdGNoYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCSAgICAgZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqIGJhdGNoKQorCQkJCSAgICAgZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqIGJhdGNoLAorCQkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cykKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzID0gYmF0Y2gtPmNsaXByZWN0czsKIAlpbnQgbmJveCA9IGJhdGNoLT5udW1fY2xpcHJlY3RzOwogCWludCBpID0gMCwgY291bnQ7CiAJUklOR19MT0NBTFM7CkBAIC01MTEsNyArNTA3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWlmIChpIDwgbmJveCkgewotCQkJaW50IHJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBib3hlcywgaSwKKwkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgY2xpcHJlY3RzLCBpLAogCQkJCQkJYmF0Y2gtPkRSMSwgYmF0Y2gtPkRSNCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC02MjYsNiArNjIyLDcgQEAKIAkgICAgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqYmF0Y2ggPSBkYXRhOwogCWludCByZXQ7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyA9IE5VTEw7CiAKIAlpZiAoIWRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlcikgewogCQlEUk1fRVJST1IoIkJhdGNoYnVmZmVyIGlvY3RsIGRpc2FibGVkXG4iKTsKQEAgLTYzNywxNyArNjM0LDM1IEBACiAKIAlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKLQlpZiAoYmF0Y2gtPm51bV9jbGlwcmVjdHMgJiYgRFJNX1ZFUklGWUFSRUFfUkVBRChiYXRjaC0+Y2xpcHJlY3RzLAotCQkJCQkJICAgICAgIGJhdGNoLT5udW1fY2xpcHJlY3RzICoKLQkJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYmF0Y2gtPm51bV9jbGlwcmVjdHMpIHsKKwkJY2xpcHJlY3RzID0gZHJtX2NhbGxvYyhiYXRjaC0+bnVtX2NsaXByZWN0cywKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwKKwkJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsIGJhdGNoLT5jbGlwcmVjdHMsCisJCQkJICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBmYWlsX2ZyZWU7CisJfQogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCk7CisJcmV0ID0gaTkxNV9kaXNwYXRjaF9iYXRjaGJ1ZmZlcihkZXYsIGJhdGNoLCBjbGlwcmVjdHMpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKHNhcmVhX3ByaXYpCiAJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCitmYWlsX2ZyZWU6CisJZHJtX2ZyZWUoY2xpcHJlY3RzLAorCQkgYmF0Y2gtPm51bV9jbGlwcmVjdHMgKiBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpLAorCQkgRFJNX01FTV9EUklWRVIpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjU5LDYgKzY3NCw4IEBACiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTkxNV9zYXJlYV90ICopCiAJICAgIG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9pOTE1X2NtZGJ1ZmZlcl90ICpjbWRidWYgPSBkYXRhOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgPSBOVUxMOworCXZvaWQgKmJhdGNoX2RhdGE7CiAJaW50IHJldDsKIAogCURSTV9ERUJVRygiaTkxNSBjbWRidWZmZXIsIGJ1ZiAlcCBzeiAlZCBjbGlwcmVjdHMgJWRcbiIsCkBAIC02NjYsMjUgKzY4Myw1MCBAQAogCiAJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JaWYgKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAmJgotCSAgICBEUk1fVkVSSUZZQVJFQV9SRUFEKGNtZGJ1Zi0+Y2xpcHJlY3RzLAotCQkJCWNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpIHsKLQkJRFJNX0VSUk9SKCJGYXVsdCBhY2Nlc3NpbmcgY2xpcHJlY3RzXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYmF0Y2hfZGF0YSA9IGRybV9hbGxvYyhjbWRidWYtPnN6LCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGJhdGNoX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihiYXRjaF9kYXRhLCBjbWRidWYtPmJ1ZiwgY21kYnVmLT5zeik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfYmF0Y2hfZnJlZTsKKworCWlmIChjbWRidWYtPm51bV9jbGlwcmVjdHMpIHsKKwkJY2xpcHJlY3RzID0gZHJtX2NhbGxvYyhjbWRidWYtPm51bV9jbGlwcmVjdHMsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NsaXBfcmVjdCksCisJCQkJICAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJaWYgKGNsaXByZWN0cyA9PSBOVUxMKQorCQkJZ290byBmYWlsX2JhdGNoX2ZyZWU7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLCBjbWRidWYtPmNsaXByZWN0cywKKwkJCQkgICAgIGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAqCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBmYWlsX2NsaXBfZnJlZTsKIAl9CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOworCXJldCA9IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKGRldiwgY21kYnVmLCBjbGlwcmVjdHMsIGJhdGNoX2RhdGEpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlciBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfYmF0Y2hfZnJlZTsKIAl9CiAKIAlpZiAoc2FyZWFfcHJpdikKIAkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7Ci0JcmV0dXJuIDA7CisKK2ZhaWxfYmF0Y2hfZnJlZToKKwlkcm1fZnJlZShiYXRjaF9kYXRhLCBjbWRidWYtPnN6LCBEUk1fTUVNX0RSSVZFUik7CitmYWlsX2NsaXBfZnJlZToKKwlkcm1fZnJlZShjbGlwcmVjdHMsCisJCSBjbWRidWYtPm51bV9jbGlwcmVjdHMgKiBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpLAorCQkgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpOTE1X2ZsaXBfYnVmcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggYjI5M2VmMC4uZGNiOTFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0xNTAsOCArMTUwLDEwIEBACiAJLmdldF9yZWdfb2ZzID0gZHJtX2NvcmVfZ2V0X3JlZ19vZnMsCiAJLm1hc3Rlcl9jcmVhdGUgPSBpOTE1X21hc3Rlcl9jcmVhdGUsCiAJLm1hc3Rlcl9kZXN0cm95ID0gaTkxNV9tYXN0ZXJfZGVzdHJveSwKLQkucHJvY19pbml0ID0gaTkxNV9nZW1fcHJvY19pbml0LAotCS5wcm9jX2NsZWFudXAgPSBpOTE1X2dlbV9wcm9jX2NsZWFudXAsCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJLmRlYnVnZnNfaW5pdCA9IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdCwKKwkuZGVidWdmc19jbGVhbnVwID0gaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwLAorI2VuZGlmCiAJLmdlbV9pbml0X29iamVjdCA9IGk5MTVfZ2VtX2luaXRfb2JqZWN0LAogCS5nZW1fZnJlZV9vYmplY3QgPSBpOTE1X2dlbV9mcmVlX29iamVjdCwKIAkuZ2VtX3ZtX29wcyA9ICZpOTE1X2dlbV92bV9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBkNmNjOTg2Li5jMTY4NWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTQwNCw3ICs0MDQsOCBAQAogCS8qKiBBR1AgbWVtb3J5IHN0cnVjdHVyZSBmb3Igb3VyIEdUVCBiaW5kaW5nLiAqLwogCURSTV9BR1BfTUVNICphZ3BfbWVtOwogCi0Jc3RydWN0IHBhZ2UgKipwYWdlX2xpc3Q7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlpbnQgcGFnZXNfcmVmY291bnQ7CiAKIAkvKioKIAkgKiBDdXJyZW50IG9mZnNldCBvZiB0aGUgb2JqZWN0IGluIEdUVCBzcGFjZS4KQEAgLTUxOSw3ICs1MjAsNyBAQAogZXh0ZXJuIGxvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gaW50IGk5MTVfZW1pdF9ib3goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzLAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3hlcywKIAkJCSBpbnQgaSwgaW50IERSMSwgaW50IERSNCk7CiAKIC8qIGk5MTVfaXJxLmMgKi8KQEAgLTYwNCw4ICs2MDUsNiBAQAogaW50IGk5MTVfZ2VtX2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIHZvaWQgaTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWludCBpOTE1X2dlbV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwotdm9pZCBpOTE1X2dlbV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogaW50IGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCk7CkBAIC02NDksNiArNjQ4LDEwIEBACiAJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKIHZvaWQgaTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSk7CiAKKy8qIGk5MTVfZGVidWdmcy5jICovCitpbnQgaTkxNV9nZW1fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKK3ZvaWQgaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwogLyogaTkxNV9zdXNwZW5kLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC03ODQsMTUgKzc4NywyMSBAQAogCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUyMiB8fCBcCiAJCSAgICAgSVNfR000NShkZXYpKQogCisjZGVmaW5lIElTX0lHREcoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDAxKQorI2RlZmluZSBJU19JR0RHTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweGEwMTEpCisjZGVmaW5lIElTX0lHRChkZXYpIChJU19JR0RHKGRldikgfHwgSVNfSUdER00oZGV2KSkKKwogI2RlZmluZSBJU19HMzMoZGV2KSAgICAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUMyIHx8CVwKIAkJCShkZXYpLT5wY2lfZGV2aWNlID09IDB4MjlCMiB8fAlcCi0JCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5RDIpCisJCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5RDIgfHwgIFwKKwkJCShJU19JR0QoZGV2KSkpCiAKICNkZWZpbmUgSVNfSTlYWChkZXYpIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IElTX0k5NDVHKGRldikgfHwgXAogCQkgICAgICBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0czMyhkZXYpKQogCiAjZGVmaW5lIElTX01PQklMRShkZXYpIChJU19JODMwKGRldikgfHwgSVNfSTg1WChkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IFwKLQkJCUlTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSkKKwkJCUlTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSB8fCBcCisJCQlJU19JR0QoZGV2KSkKIAogI2RlZmluZSBJOTE1X05FRURfR0ZYX0hXUyhkZXYpIChJU19HMzMoZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgSVNfRzRYKGRldikpCiAvKiBXaXRoIHRoZSA5NDUgYW5kIGxhdGVyLCBZIHRpbGluZyBnb3QgYWRqdXN0ZWQgc28gdGhhdCBpdCB3YXMgMzIgMTI4LWJ5dGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDM3NDI3ZTQuLmI1MmNiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDMsOCArNDMsOCBAQAogCQkJCQkJICAgICB1aW50NjRfdCBvZmZzZXQsCiAJCQkJCQkgICAgIHVpbnQ2NF90IHNpemUpOwogc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19mdWxsX2NwdV9yZWFkX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKIAkJCQkJICAgdW5zaWduZWQgYWxpZ25tZW50KTsKQEAgLTEzNiw2ICsxMzYsMjI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitmYXN0X3NobWVtX3JlYWQoc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJbG9mZl90IHBhZ2VfYmFzZSwgaW50IHBhZ2Vfb2Zmc2V0LAorCQljaGFyIF9fdXNlciAqZGF0YSwKKwkJaW50IGxlbmd0aCkKK3sKKwljaGFyIF9faW9tZW0gKnZhZGRyOworCWludCByZXQ7CisKKwl2YWRkciA9IGttYXBfYXRvbWljKHBhZ2VzW3BhZ2VfYmFzZSA+PiBQQUdFX1NISUZUXSwgS01fVVNFUjApOworCWlmICh2YWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyhkYXRhLCB2YWRkciArIHBhZ2Vfb2Zmc2V0LCBsZW5ndGgpOworCWt1bm1hcF9hdG9taWModmFkZHIsIEtNX1VTRVIwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzbG93X3NobWVtX2NvcHkoc3RydWN0IHBhZ2UgKmRzdF9wYWdlLAorCQlpbnQgZHN0X29mZnNldCwKKwkJc3RydWN0IHBhZ2UgKnNyY19wYWdlLAorCQlpbnQgc3JjX29mZnNldCwKKwkJaW50IGxlbmd0aCkKK3sKKwljaGFyICpkc3RfdmFkZHIsICpzcmNfdmFkZHI7CisKKwlkc3RfdmFkZHIgPSBrbWFwX2F0b21pYyhkc3RfcGFnZSwgS01fVVNFUjApOworCWlmIChkc3RfdmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcmNfdmFkZHIgPSBrbWFwX2F0b21pYyhzcmNfcGFnZSwgS01fVVNFUjEpOworCWlmIChzcmNfdmFkZHIgPT0gTlVMTCkgeworCQlrdW5tYXBfYXRvbWljKGRzdF92YWRkciwgS01fVVNFUjApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoZHN0X3ZhZGRyICsgZHN0X29mZnNldCwgc3JjX3ZhZGRyICsgc3JjX29mZnNldCwgbGVuZ3RoKTsKKworCWt1bm1hcF9hdG9taWMoc3JjX3ZhZGRyLCBLTV9VU0VSMSk7CisJa3VubWFwX2F0b21pYyhkc3RfdmFkZHIsIEtNX1VTRVIwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhc3Qgc2htZW0gcHJlYWQgcGF0aCwgd2hpY2ggYXR0ZW1wdHMgdG8gY29weV9mcm9tX3VzZXIgZGlyZWN0bHkKKyAqIGZyb20gdGhlIGJhY2tpbmcgcGFnZXMgb2YgdGhlIG9iamVjdCB0byB0aGUgdXNlcidzIGFkZHJlc3Mgc3BhY2UuICBPbiBhCisgKiBmYXVsdCwgaXQgZmFpbHMgc28gd2UgY2FuIGZhbGwgYmFjayB0byBpOTE1X2dlbV9zaG1lbV9wd3JpdGVfc2xvdygpLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9zaG1lbV9wcmVhZF9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkICphcmdzLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXNzaXplX3QgcmVtYWluOworCWxvZmZfdCBvZmZzZXQsIHBhZ2VfYmFzZTsKKwljaGFyIF9fdXNlciAqdXNlcl9kYXRhOworCWludCBwYWdlX29mZnNldCwgcGFnZV9sZW5ndGg7CisJaW50IHJldDsKKworCXVzZXJfZGF0YSA9IChjaGFyIF9fdXNlciAqKSAodWludHB0cl90KSBhcmdzLT5kYXRhX3B0cjsKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX3VubG9jazsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfY3B1X3JlYWRfZG9tYWluX3JhbmdlKG9iaiwgYXJncy0+b2Zmc2V0LAorCQkJCQkJCWFyZ3MtPnNpemUpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX3B1dF9wYWdlczsKKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAqCisJCSAqIHBhZ2VfYmFzZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVydHVyZQorCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJcGFnZV9iYXNlID0gKG9mZnNldCAmIH4oUEFHRV9TSVpFLTEpKTsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCisJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OworCisJCXJldCA9IGZhc3Rfc2htZW1fcmVhZChvYmpfcHJpdi0+cGFnZXMsCisJCQkJICAgICAgcGFnZV9iYXNlLCBwYWdlX29mZnNldCwKKwkJCQkgICAgICB1c2VyX2RhdGEsIHBhZ2VfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQl1c2VyX2RhdGEgKz0gcGFnZV9sZW5ndGg7CisJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKKwl9CisKK2ZhaWxfcHV0X3BhZ2VzOgorCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKK2ZhaWxfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWxsYmFjayBzaG1lbSBwcmVhZCBwYXRoLCB3aGljaCBhbGxvY2F0ZXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIGluIGtlcm5lbCBzcGFjZSB0byBjb3B5X3RvX3VzZXIgaW50byBvdXRzaWRlIG9mIHRoZSBzdHJ1Y3RfbXV0ZXgsIHNvIHdlCisgKiBjYW4gY29weSBvdXQgb2YgdGhlIG9iamVjdCdzIGJhY2tpbmcgcGFnZXMgd2hpbGUgaG9sZGluZyB0aGUgc3RydWN0IG11dGV4CisgKiBhbmQgbm90IHRha2UgcGFnZSBmYXVsdHMuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3NobWVtX3ByZWFkX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3QgcGFnZSAqKnVzZXJfcGFnZXM7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldCwgcGlubmVkX3BhZ2VzLCBpOworCWxvZmZfdCBmaXJzdF9kYXRhX3BhZ2UsIGxhc3RfZGF0YV9wYWdlLCBudW1fcGFnZXM7CisJaW50IHNobWVtX3BhZ2VfaW5kZXgsIHNobWVtX3BhZ2Vfb2Zmc2V0OworCWludCBkYXRhX3BhZ2VfaW5kZXgsICBkYXRhX3BhZ2Vfb2Zmc2V0OworCWludCBwYWdlX2xlbmd0aDsKKwlpbnQgcmV0OworCXVpbnQ2NF90IGRhdGFfcHRyID0gYXJncy0+ZGF0YV9wdHI7CisKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJLyogUGluIHRoZSB1c2VyIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIGRhdGEuICBXZSBjYW4ndCBmYXVsdCB3aGlsZQorCSAqIGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleCwgeWV0IHdlIHdhbnQgdG8gaG9sZCBpdCB3aGlsZQorCSAqIGRlcmVmZXJlbmNpbmcgdGhlIHVzZXIgZGF0YS4KKwkgKi8KKwlmaXJzdF9kYXRhX3BhZ2UgPSBkYXRhX3B0ciAvIFBBR0VfU0laRTsKKwlsYXN0X2RhdGFfcGFnZSA9IChkYXRhX3B0ciArIGFyZ3MtPnNpemUgLSAxKSAvIFBBR0VfU0laRTsKKwludW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAtIGZpcnN0X2RhdGFfcGFnZSArIDE7CisKKwl1c2VyX3BhZ2VzID0ga2NhbGxvYyhudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzZXJfcGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcGlubmVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sICh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCisJCQkJICAgICAgbnVtX3BhZ2VzLCAwLCAwLCB1c2VyX3BhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChwaW5uZWRfcGFnZXMgPCBudW1fcGFnZXMpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBmYWlsX3B1dF91c2VyX3BhZ2VzOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF91bmxvY2s7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NwdV9yZWFkX2RvbWFpbl9yYW5nZShvYmosIGFyZ3MtPm9mZnNldCwKKwkJCQkJCQlhcmdzLT5zaXplKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBzaG1lbV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgd2l0aGluIHNobWVtIGZpbGUKKwkJICogc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UgaW4gc2htZW0gZmlsZQorCQkgKiBkYXRhX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciBpbiBnZXRfdXNlcl9wYWdlcyByZXR1cm4KKwkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJc2htZW1fcGFnZV9pbmRleCA9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2VfaW5kZXggPSBkYXRhX3B0ciAvIFBBR0VfU0laRSAtIGZpcnN0X2RhdGFfcGFnZTsKKwkJZGF0YV9wYWdlX29mZnNldCA9IGRhdGFfcHRyICYgflBBR0VfTUFTSzsKKworCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKChzaG1lbV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gc2htZW1fcGFnZV9vZmZzZXQ7CisJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKKworCQlyZXQgPSBzbG93X3NobWVtX2NvcHkodXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIGRhdGFfcGFnZV9vZmZzZXQsCisJCQkJICAgICAgb2JqX3ByaXYtPnBhZ2VzW3NobWVtX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIHNobWVtX3BhZ2Vfb2Zmc2V0LAorCQkJCSAgICAgIHBhZ2VfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQlkYXRhX3B0ciArPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOworCX0KKworZmFpbF9wdXRfcGFnZXM6CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOworZmFpbF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitmYWlsX3B1dF91c2VyX3BhZ2VzOgorCWZvciAoaSA9IDA7IGkgPCBwaW5uZWRfcGFnZXM7IGkrKykgeworCQlTZXRQYWdlRGlydHkodXNlcl9wYWdlc1tpXSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZSh1c2VyX3BhZ2VzW2ldKTsKKwl9CisJa2ZyZWUodXNlcl9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgogICoKQEAgLTE0OCw4ICszNjYsNiBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlzc2l6ZV90IHJlYWQ7Ci0JbG9mZl90IG9mZnNldDsKIAlpbnQgcmV0OwogCiAJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOwpAQCAtMTY3LDMzICszODMsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jcHVfcmVhZF9kb21haW5fcmFuZ2Uob2JqLCBhcmdzLT5vZmZzZXQsCi0JCQkJCQkJYXJncy0+c2l6ZSk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKLQotCXJlYWQgPSB2ZnNfcmVhZChvYmotPmZpbHAsIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCi0JCQlhcmdzLT5zaXplLCAmb2Zmc2V0KTsKLQlpZiAocmVhZCAhPSBhcmdzLT5zaXplKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlpZiAocmVhZCA8IDApCi0JCQlyZXR1cm4gcmVhZDsKLQkJZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXJldCA9IGk5MTVfZ2VtX3NobWVtX3ByZWFkX2Zhc3QoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CisJaWYgKHJldCAhPSAwKQorCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wcmVhZF9zbG93KGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOwogCiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qIFRoaXMgaXMgdGhlIGZhc3Qgd3JpdGUgcGF0aCB3aGljaCBjYW5ub3QgaGFuZGxlCkBAIC0yMjMsMjkgKzQxOSw1MSBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1zbG93X3VzZXJfd3JpdGUoc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcsCi0JCWxvZmZfdCBwYWdlX2Jhc2UsIGludCBwYWdlX29mZnNldCwKLQkJY2hhciBfX3VzZXIgKnVzZXJfZGF0YSwKLQkJaW50IGxlbmd0aCkKK3Nsb3dfa2VybmVsX3dyaXRlKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkgIGxvZmZfdCBndHRfYmFzZSwgaW50IGd0dF9vZmZzZXQsCisJCSAgc3RydWN0IHBhZ2UgKnVzZXJfcGFnZSwgaW50IHVzZXJfb2Zmc2V0LAorCQkgIGludCBsZW5ndGgpCiB7Ci0JY2hhciBfX2lvbWVtICp2YWRkcjsKKwljaGFyICpzcmNfdmFkZHIsICpkc3RfdmFkZHI7CiAJdW5zaWduZWQgbG9uZyB1bndyaXR0ZW47CiAKLQl2YWRkciA9IGlvX21hcHBpbmdfbWFwX3djKG1hcHBpbmcsIHBhZ2VfYmFzZSk7Ci0JaWYgKHZhZGRyID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwotCXVud3JpdHRlbiA9IF9fY29weV9mcm9tX3VzZXIodmFkZHIgKyBwYWdlX29mZnNldCwKLQkJCQkgICAgIHVzZXJfZGF0YSwgbGVuZ3RoKTsKLQlpb19tYXBwaW5nX3VubWFwKHZhZGRyKTsKKwlkc3RfdmFkZHIgPSBpb19tYXBwaW5nX21hcF9hdG9taWNfd2MobWFwcGluZywgZ3R0X2Jhc2UpOworCXNyY192YWRkciA9IGttYXBfYXRvbWljKHVzZXJfcGFnZSwgS01fVVNFUjEpOworCXVud3JpdHRlbiA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZShkc3RfdmFkZHIgKyBndHRfb2Zmc2V0LAorCQkJCQkJICAgICAgc3JjX3ZhZGRyICsgdXNlcl9vZmZzZXQsCisJCQkJCQkgICAgICBsZW5ndGgpOworCWt1bm1hcF9hdG9taWMoc3JjX3ZhZGRyLCBLTV9VU0VSMSk7CisJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoZHN0X3ZhZGRyKTsKIAlpZiAodW53cml0dGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK2Zhc3Rfc2htZW1fd3JpdGUoc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJIGxvZmZfdCBwYWdlX2Jhc2UsIGludCBwYWdlX29mZnNldCwKKwkJIGNoYXIgX191c2VyICpkYXRhLAorCQkgaW50IGxlbmd0aCkKK3sKKwljaGFyIF9faW9tZW0gKnZhZGRyOworCisJdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlc1twYWdlX2Jhc2UgPj4gUEFHRV9TSElGVF0sIEtNX1VTRVIwKTsKKwlpZiAodmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2YWRkciArIHBhZ2Vfb2Zmc2V0LCBkYXRhLCBsZW5ndGgpOworCWt1bm1hcF9hdG9taWModmFkZHIsIEtNX1VTRVIwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhc3QgcHdyaXRlIHBhdGgsIHdoZXJlIHdlIGNvcHkgdGhlIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUKKyAqIHVzZXIgaW50byB0aGUgR1RULCB1bmNhY2hlZC4KKyAqLwogc3RhdGljIGludAotaTkxNV9nZW1fZ3R0X3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAotCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTI3Myw3ICs0OTEsNiBAQAogCiAJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OwotCW9ial9wcml2LT5kaXJ0eSA9IDE7CiAKIAl3aGlsZSAocmVtYWluID4gMCkgewogCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCkBAIC0yOTIsMTYgKzUwOSwxMSBAQAogCQkJCSAgICAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCk7CiAKIAkJLyogSWYgd2UgZ2V0IGEgZmF1bHQgd2hpbGUgY29weWluZyBkYXRhLCB0aGVuIChwcmVzdW1hYmx5KSBvdXIKLQkJICogc291cmNlIHBhZ2UgaXNuJ3QgYXZhaWxhYmxlLiBJbiB0aGlzIGNhc2UsIHVzZSB0aGUKLQkJICogbm9uLWF0b21pYyBmdW5jdGlvbgorCQkgKiBzb3VyY2UgcGFnZSBpc24ndCBhdmFpbGFibGUuICBSZXR1cm4gdGhlIGVycm9yIGFuZCB3ZSdsbAorCQkgKiByZXRyeSBpbiB0aGUgc2xvdyBwYXRoLgogCQkgKi8KLQkJaWYgKHJldCkgewotCQkJcmV0ID0gc2xvd191c2VyX3dyaXRlIChkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCi0JCQkJCSAgICAgICBwYWdlX2Jhc2UsIHBhZ2Vfb2Zmc2V0LAotCQkJCQkgICAgICAgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZmFpbDsKLQkJfQorCQlpZiAocmV0KQorCQkJZ290byBmYWlsOwogCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKIAkJdXNlcl9kYXRhICs9IHBhZ2VfbGVuZ3RoOwpAQCAtMzE1LDM5ICs1MjcsMjg0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBUaGlzIGlzIHRoZSBmYWxsYmFjayBHVFQgcHdyaXRlIHBhdGgsIHdoaWNoIHVzZXMgZ2V0X3VzZXJfcGFnZXMgdG8gcGluCisgKiB0aGUgbWVtb3J5IGFuZCBtYXBzIGl0IHVzaW5nIGttYXBfYXRvbWljIGZvciBjb3B5aW5nLgorICoKKyAqIFRoaXMgY29kZSByZXN1bHRlZCBpbiB4MTFwZXJmIC1yZ2IxMHRleHQgY29uc3VtaW5nIGFib3V0IDEwJSBtb3JlIENQVQorICogdGhhbiB1c2luZyBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qgb24gYSBHNDUgKDMyLWJpdCkuCisgKi8KIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX3NobWVtX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCi0JCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoraTkxNV9nZW1fZ3R0X3B3cml0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogeworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IGd0dF9wYWdlX2Jhc2UsIG9mZnNldDsKKwlsb2ZmX3QgZmlyc3RfZGF0YV9wYWdlLCBsYXN0X2RhdGFfcGFnZSwgbnVtX3BhZ2VzOworCWxvZmZfdCBwaW5uZWRfcGFnZXMsIGk7CisJc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJaW50IGd0dF9wYWdlX29mZnNldCwgZGF0YV9wYWdlX29mZnNldCwgZGF0YV9wYWdlX2luZGV4LCBwYWdlX2xlbmd0aDsKIAlpbnQgcmV0OwotCWxvZmZfdCBvZmZzZXQ7Ci0Jc3NpemVfdCB3cml0dGVuOworCXVpbnQ2NF90IGRhdGFfcHRyID0gYXJncy0+ZGF0YV9wdHI7CisKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJLyogUGluIHRoZSB1c2VyIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIGRhdGEuICBXZSBjYW4ndCBmYXVsdCB3aGlsZQorCSAqIGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleCwgYW5kIGFsbCBvZiB0aGUgcHdyaXRlIGltcGxlbWVudGF0aW9ucworCSAqIHdhbnQgdG8gaG9sZCBpdCB3aGlsZSBkZXJlZmVyZW5jaW5nIHRoZSB1c2VyIGRhdGEuCisJICovCisJZmlyc3RfZGF0YV9wYWdlID0gZGF0YV9wdHIgLyBQQUdFX1NJWkU7CisJbGFzdF9kYXRhX3BhZ2UgPSAoZGF0YV9wdHIgKyBhcmdzLT5zaXplIC0gMSkgLyBQQUdFX1NJWkU7CisJbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCisJdXNlcl9wYWdlcyA9IGtjYWxsb2MobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICh1c2VyX3BhZ2VzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXBpbm5lZF9wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCAodWludHB0cl90KWFyZ3MtPmRhdGFfcHRyLAorCQkJCSAgICAgIG51bV9wYWdlcywgMCwgMCwgdXNlcl9wYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAocGlubmVkX3BhZ2VzIDwgbnVtX3BhZ2VzKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X3VucGluX3BhZ2VzOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5waW5fb2JqZWN0OworCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBndHRfcGFnZV9iYXNlID0gcGFnZSBvZmZzZXQgd2l0aGluIGFwZXJ0dXJlCisJCSAqIGd0dF9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZSBpbiBhcGVydHVyZQorCQkgKiBkYXRhX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciBpbiBnZXRfdXNlcl9wYWdlcyByZXR1cm4KKwkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJZ3R0X3BhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKKwkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisKKwkJcGFnZV9sZW5ndGggPSByZW1haW47CisJCWlmICgoZ3R0X3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBndHRfcGFnZV9vZmZzZXQ7CisJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKKworCQlyZXQgPSBzbG93X2tlcm5lbF93cml0ZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCisJCQkJCWd0dF9wYWdlX2Jhc2UsIGd0dF9wYWdlX29mZnNldCwKKwkJCQkJdXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAorCQkJCQlkYXRhX3BhZ2Vfb2Zmc2V0LAorCQkJCQlwYWdlX2xlbmd0aCk7CisKKwkJLyogSWYgd2UgZ2V0IGEgZmF1bHQgd2hpbGUgY29weWluZyBkYXRhLCB0aGVuIChwcmVzdW1hYmx5KSBvdXIKKwkJICogc291cmNlIHBhZ2UgaXNuJ3QgYXZhaWxhYmxlLiAgUmV0dXJuIHRoZSBlcnJvciBhbmQgd2UnbGwKKwkJICogcmV0cnkgaW4gdGhlIHNsb3cgcGF0aC4KKwkJICovCisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bnBpbl9vYmplY3Q7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQgKz0gcGFnZV9sZW5ndGg7CisJCWRhdGFfcHRyICs9IHBhZ2VfbGVuZ3RoOworCX0KKworb3V0X3VucGluX29iamVjdDoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitvdXRfdW5waW5fcGFnZXM6CisJZm9yIChpID0gMDsgaSA8IHBpbm5lZF9wYWdlczsgaSsrKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UodXNlcl9wYWdlc1tpXSk7CisJa2ZyZWUodXNlcl9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhc3Qgc2htZW0gcHdyaXRlIHBhdGgsIHdoaWNoIGF0dGVtcHRzIHRvIGRpcmVjdGx5CisgKiBjb3B5X2Zyb21fdXNlciBpbnRvIHRoZSBrbWFwcGVkIHBhZ2VzIGJhY2tpbmcgdGhlIG9iamVjdC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldCwgcGFnZV9iYXNlOworCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CisJaW50IHBhZ2Vfb2Zmc2V0LCBwYWdlX2xlbmd0aDsKKwlpbnQgcmV0OworCisJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfdW5sb2NrOworCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgMSk7Ci0JaWYgKHJldCkgewotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfcHV0X3BhZ2VzOwogCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKwlvYmpfcHJpdi0+ZGlydHkgPSAxOwogCi0Jd3JpdHRlbiA9IHZmc193cml0ZShvYmotPmZpbHAsCi0JCQkgICAgKGNoYXIgX191c2VyICopKHVpbnRwdHJfdCkgYXJncy0+ZGF0YV9wdHIsCi0JCQkgICAgYXJncy0+c2l6ZSwgJm9mZnNldCk7Ci0JaWYgKHdyaXR0ZW4gIT0gYXJncy0+c2l6ZSkgewotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJaWYgKHdyaXR0ZW4gPCAwKQotCQkJcmV0dXJuIHdyaXR0ZW47Ci0JCWVsc2UKLQkJCXJldHVybiAtRUlOVkFMOworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKKwkJICoKKwkJICogcGFnZV9iYXNlID0gcGFnZSBvZmZzZXQgd2l0aGluIGFwZXJ0dXJlCisJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCisJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCisJCSAqLworCQlwYWdlX2Jhc2UgPSAob2Zmc2V0ICYgfihQQUdFX1NJWkUtMSkpOworCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOworCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CisKKwkJcmV0ID0gZmFzdF9zaG1lbV93cml0ZShvYmpfcHJpdi0+cGFnZXMsCisJCQkJICAgICAgIHBhZ2VfYmFzZSwgcGFnZV9vZmZzZXQsCisJCQkJICAgICAgIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsX3B1dF9wYWdlczsKKworCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CisJCXVzZXJfZGF0YSArPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOwogCX0KIAorZmFpbF9wdXRfcGFnZXM6CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOworZmFpbF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhbGxiYWNrIHNobWVtIHB3cml0ZSBwYXRoLCB3aGljaCB1c2VzIGdldF91c2VyX3BhZ2VzIHRvIHBpbgorICogdGhlIG1lbW9yeSBhbmQgbWFwcyBpdCB1c2luZyBrbWFwX2F0b21pYyBmb3IgY29weWluZy4KKyAqCisgKiBUaGlzIGF2b2lkcyB0YWtpbmcgbW1hcF9zZW0gZm9yIGZhdWx0aW5nIG9uIHRoZSB1c2VyJ3MgYWRkcmVzcyB3aGlsZSB0aGUKKyAqIHN0cnVjdF9tdXRleCBpcyBoZWxkLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9zaG1lbV9wd3JpdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCBwYWdlICoqdXNlcl9wYWdlczsKKwlzc2l6ZV90IHJlbWFpbjsKKwlsb2ZmX3Qgb2Zmc2V0LCBwaW5uZWRfcGFnZXMsIGk7CisJbG9mZl90IGZpcnN0X2RhdGFfcGFnZSwgbGFzdF9kYXRhX3BhZ2UsIG51bV9wYWdlczsKKwlpbnQgc2htZW1fcGFnZV9pbmRleCwgc2htZW1fcGFnZV9vZmZzZXQ7CisJaW50IGRhdGFfcGFnZV9pbmRleCwgIGRhdGFfcGFnZV9vZmZzZXQ7CisJaW50IHBhZ2VfbGVuZ3RoOworCWludCByZXQ7CisJdWludDY0X3QgZGF0YV9wdHIgPSBhcmdzLT5kYXRhX3B0cjsKKworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisKKwkvKiBQaW4gdGhlIHVzZXIgcGFnZXMgY29udGFpbmluZyB0aGUgZGF0YS4gIFdlIGNhbid0IGZhdWx0IHdoaWxlCisJICogaG9sZGluZyB0aGUgc3RydWN0IG11dGV4LCBhbmQgYWxsIG9mIHRoZSBwd3JpdGUgaW1wbGVtZW50YXRpb25zCisJICogd2FudCB0byBob2xkIGl0IHdoaWxlIGRlcmVmZXJlbmNpbmcgdGhlIHVzZXIgZGF0YS4KKwkgKi8KKwlmaXJzdF9kYXRhX3BhZ2UgPSBkYXRhX3B0ciAvIFBBR0VfU0laRTsKKwlsYXN0X2RhdGFfcGFnZSA9IChkYXRhX3B0ciArIGFyZ3MtPnNpemUgLSAxKSAvIFBBR0VfU0laRTsKKwludW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAtIGZpcnN0X2RhdGFfcGFnZSArIDE7CisKKwl1c2VyX3BhZ2VzID0ga2NhbGxvYyhudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzZXJfcGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcGlubmVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sICh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCisJCQkJICAgICAgbnVtX3BhZ2VzLCAwLCAwLCB1c2VyX3BhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChwaW5uZWRfcGFnZXMgPCBudW1fcGFnZXMpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBmYWlsX3B1dF91c2VyX3BhZ2VzOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF91bmxvY2s7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAqCisJCSAqIHNobWVtX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciB3aXRoaW4gc2htZW0gZmlsZQorCQkgKiBzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZSBpbiBzaG1lbSBmaWxlCisJCSAqIGRhdGFfcGFnZV9pbmRleCA9IHBhZ2UgbnVtYmVyIGluIGdldF91c2VyX3BhZ2VzIHJldHVybgorCQkgKiBkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGggZGF0YV9wYWdlX2luZGV4IHBhZ2UuCisJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCisJCSAqLworCQlzaG1lbV9wYWdlX2luZGV4ID0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCisJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOworCQlpZiAoKHNobWVtX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBzaG1lbV9wYWdlX29mZnNldDsKKwkJaWYgKChkYXRhX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBkYXRhX3BhZ2Vfb2Zmc2V0OworCisJCXJldCA9IHNsb3dfc2htZW1fY29weShvYmpfcHJpdi0+cGFnZXNbc2htZW1fcGFnZV9pbmRleF0sCisJCQkJICAgICAgc2htZW1fcGFnZV9vZmZzZXQsCisJCQkJICAgICAgdXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIGRhdGFfcGFnZV9vZmZzZXQsCisJCQkJICAgICAgcGFnZV9sZW5ndGgpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsX3B1dF9wYWdlczsKKworCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CisJCWRhdGFfcHRyICs9IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQgKz0gcGFnZV9sZW5ndGg7CisJfQorCitmYWlsX3B1dF9wYWdlczoKKwlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CitmYWlsX3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK2ZhaWxfcHV0X3VzZXJfcGFnZXM6CisJZm9yIChpID0gMDsgaSA8IHBpbm5lZF9wYWdlczsgaSsrKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UodXNlcl9wYWdlc1tpXSk7CisJa2ZyZWUodXNlcl9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTM4OCwxMCArODQ1LDE5IEBACiAJaWYgKG9ial9wcml2LT5waHlzX29iaikKIAkJcmV0ID0gaTkxNV9nZW1fcGh5c19wd3JpdGUoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CiAJZWxzZSBpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKLQkJIGRldi0+Z3R0X3RvdGFsICE9IDApCi0JCXJldCA9IGk5MTVfZ2VtX2d0dF9wd3JpdGUoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7Ci0JZWxzZQotCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wd3JpdGUoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CisJCSBkZXYtPmd0dF90b3RhbCAhPSAwKSB7CisJCXJldCA9IGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwkJaWYgKHJldCA9PSAtRUZBVUxUKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlX3Nsb3coZGV2LCBvYmosIGFyZ3MsCisJCQkJCQkgICAgICAgZmlsZV9wcml2KTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZV9mYXN0KGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCQlpZiAocmV0ID09IC1FRkFVTFQpIHsKKwkJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZV9zbG93KGRldiwgb2JqLCBhcmdzLAorCQkJCQkJCSBmaWxlX3ByaXYpOworCQl9CisJfQogCiAjaWYgV0FUQ0hfUFdSSVRFCiAJaWYgKHJldCkKQEAgLTgxNiwyOSArMTI4MiwzMCBAQAogfQogCiBzdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoraTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCBwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOwogCWludCBpOwogCi0JaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkKKwlCVUdfT04ob2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50ID09IDApOworCisJaWYgKC0tb2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50ICE9IDApCiAJCXJldHVybjsKIAotCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykKLQkJaWYgKG9ial9wcml2LT5wYWdlX2xpc3RbaV0gIT0gTlVMTCkgeworCQlpZiAob2JqX3ByaXYtPnBhZ2VzW2ldICE9IE5VTEwpIHsKIAkJCWlmIChvYmpfcHJpdi0+ZGlydHkpCi0JCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7Ci0JCQltYXJrX3BhZ2VfYWNjZXNzZWQob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VzW2ldKTsKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChvYmpfcHJpdi0+cGFnZXNbaV0pOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9ial9wcml2LT5wYWdlc1tpXSk7CiAJCX0KIAlvYmpfcHJpdi0+ZGlydHkgPSAwOwogCi0JZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfbGlzdCwKKwlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZXMsCiAJCSBwYWdlX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLAogCQkgRFJNX01FTV9EUklWRVIpOwotCW9ial9wcml2LT5wYWdlX2xpc3QgPSBOVUxMOworCW9ial9wcml2LT5wYWdlcyA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjkwLDcgKzE3NTcsNyBAQAogCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCiAJCWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhvYmopOwogCi0JaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwogCiAJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UpIHsKIAkJYXRvbWljX2RlYygmZGV2LT5ndHRfY291bnQpOwpAQCAtMTQwOSw3ICsxODc2LDcgQEAKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJaW50IHBhZ2VfY291bnQsIGk7CkBAIC0xNDE4LDE4ICsxODg1LDE5IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IHJldDsKIAotCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0KQorCWlmIChvYmpfcHJpdi0+cGFnZXNfcmVmY291bnQrKyAhPSAwKQogCQlyZXR1cm4gMDsKIAogCS8qIEdldCB0aGUgbGlzdCBvZiBwYWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhleSdsbCBiZSBwaW5uZWQKIAkgKiBhdCB0aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4KIAkgKi8KIAlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOwotCUJVR19PTihvYmpfcHJpdi0+cGFnZV9saXN0ICE9IE5VTEwpOwotCW9ial9wcml2LT5wYWdlX2xpc3QgPSBkcm1fY2FsbG9jKHBhZ2VfY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKLQkJCQkJIERSTV9NRU1fRFJJVkVSKTsKLQlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKSB7CisJQlVHX09OKG9ial9wcml2LT5wYWdlcyAhPSBOVUxMKTsKKwlvYmpfcHJpdi0+cGFnZXMgPSBkcm1fY2FsbG9jKHBhZ2VfY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYtPnBhZ2VzID09IE5VTEwpIHsKIAkJRFJNX0VSUk9SKCJGYWxlZCB0byBhbGxvY2F0ZSBwYWdlIGxpc3RcbiIpOworCQlvYmpfcHJpdi0+cGFnZXNfcmVmY291bnQtLTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDQwLDEwICsxOTA4LDEwIEBACiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIocGFnZSk7CiAJCQlEUk1fRVJST1IoInJlYWRfbWFwcGluZ19wYWdlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJb2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSA9IHBhZ2U7CisJCW9ial9wcml2LT5wYWdlc1tpXSA9IHBhZ2U7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTc2Niw3ICsyMjM0LDcgQEAKIAlEUk1fSU5GTygiQmluZGluZyBvYmplY3Qgb2Ygc2l6ZSAlZCBhdCAweCUwOHhcbiIsCiAJCSBvYmotPnNpemUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKICNlbmRpZgotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KG9iaik7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwogCWlmIChyZXQpIHsKIAkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKIAkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CkBAIC0xNzc4LDEyICsyMjQ2LDEyIEBACiAJICogaW50byB0aGUgR1RULgogCSAqLwogCW9ial9wcml2LT5hZ3BfbWVtID0gZHJtX2FncF9iaW5kX3BhZ2VzKGRldiwKLQkJCQkJICAgICAgIG9ial9wcml2LT5wYWdlX2xpc3QsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+cGFnZXMsCiAJCQkJCSAgICAgICBwYWdlX2NvdW50LAogCQkJCQkgICAgICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCiAJCQkJCSAgICAgICBvYmpfcHJpdi0+YWdwX3R5cGUpOwogCWlmIChvYmpfcHJpdi0+YWdwX21lbSA9PSBOVUxMKSB7Ci0JCWk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CiAJCWRybV9tbV9wdXRfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CiAJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4MTAsMTAgKzIyNzgsMTAgQEAKIAkgKiB0byBHUFUsIGFuZCB3ZSBjYW4gaWdub3JlIHRoZSBjYWNoZSBmbHVzaCBiZWNhdXNlIGl0J2xsIGhhcHBlbgogCSAqIGFnYWluIGF0IGJpbmQgdGltZS4KIAkgKi8KLQlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKQorCWlmIChvYmpfcHJpdi0+cGFnZXMgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCwgb2JqLT5zaXplIC8gUEFHRV9TSVpFKTsKKwlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CiB9CiAKIC8qKiBGbHVzaGVzIGFueSBHUFUgd3JpdGUgZG9tYWluIGZvciB0aGUgb2JqZWN0IGlmIGl0J3MgZGlydHkuICovCkBAIC0xOTEzLDcgKzIzODEsNiBAQAogc3RhdGljIGludAogaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwogCWludCByZXQ7CiAKIAlpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihvYmopOwpAQCAtMTkzMiw3ICsyMzk5LDYgQEAKIAkvKiBGbHVzaCB0aGUgQ1BVIGNhY2hlIGlmIGl0J3Mgc3RpbGwgaW52YWxpZC4gKi8KIAlpZiAoKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgPT0gMCkgewogCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOwotCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKIAogCQlvYmotPnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fQ1BVOwogCX0KQEAgLTIxNDQsNyArMjYxMCw2IEBACiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fb2JqZWN0X3NldF90b19mdWxsX2NwdV9yZWFkX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAogCWlmICghb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkKQpAQCAtMjE1OCw5ICsyNjIzLDggQEAKIAkJZm9yIChpID0gMDsgaSA8PSAob2JqLT5zaXplIC0gMSkgLyBQQUdFX1NJWkU7IGkrKykgewogCQkJaWYgKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSkKIAkJCQljb250aW51ZTsKLQkJCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlX2xpc3QgKyBpLCAxKTsKKwkJCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlcyArIGksIDEpOwogCQl9Ci0JCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOwogCX0KIAogCS8qIEZyZWUgdGhlIHBhZ2VfY3B1X3ZhbGlkIG1hcHBpbmdzIHdoaWNoIGFyZSBub3cgc3RhbGUsIHdoZXRoZXIKQEAgLTIyMjQsNyArMjY4OCw3IEBACiAJCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWRbaV0pCiAJCQljb250aW51ZTsKIAotCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0ICsgaSwgMSk7CisJCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlcyArIGksIDEpOwogCiAJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSA9IDE7CiAJfQpAQCAtMjI0NSwxMiArMjcwOSwxMSBAQAogc3RhdGljIGludAogaTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICplbnRyeSkKKwkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZW50cnksCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqcmVsb2NzOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJaW50IGksIHJldDsKIAl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2U7CkBAIC0yMjYyLDI1ICsyNzI1LDE4IEBACiAKIAllbnRyeS0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAKLQlyZWxvY3MgPSAoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQotCQkgKHVpbnRwdHJfdCkgZW50cnktPnJlbG9jc19wdHI7CiAJLyogQXBwbHkgdGhlIHJlbG9jYXRpb25zLCB1c2luZyB0aGUgR1RUIGFwZXJ0dXJlIHRvIGF2b2lkIGNhY2hlCiAJICogZmx1c2hpbmcgcmVxdWlyZW1lbnRzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2M9ICZyZWxvY3NbaV07CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdGFyZ2V0X29iajsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnRhcmdldF9vYmpfcHJpdjsKIAkJdWludDMyX3QgcmVsb2NfdmFsLCByZWxvY19vZmZzZXQ7CiAJCXVpbnQzMl90IF9faW9tZW0gKnJlbG9jX2VudHJ5OwogCi0JCXJldCA9IGNvcHlfZnJvbV91c2VyKCZyZWxvYywgcmVsb2NzICsgaSwgc2l6ZW9mKHJlbG9jKSk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KIAkJdGFyZ2V0X29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChvYmotPmRldiwgZmlsZV9wcml2LAotCQkJCQkJICAgcmVsb2MudGFyZ2V0X2hhbmRsZSk7CisJCQkJCQkgICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7CiAJCWlmICh0YXJnZXRfb2JqID09IE5VTEwpIHsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FQkFERjsKQEAgLTIyOTIsNTMgKzI3NDgsNTMgQEAKIAkJICovCiAJCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CiAJCQlEUk1fRVJST1IoIk5vIEdUVCBzcGFjZSBmb3VuZCBmb3Igb2JqZWN0ICVkXG4iLAotCQkJCSAgcmVsb2MudGFyZ2V0X2hhbmRsZSk7CisJCQkJICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAocmVsb2Mub2Zmc2V0ID4gb2JqLT5zaXplIC0gNCkgeworCQlpZiAocmVsb2MtPm9mZnNldCA+IG9iai0+c2l6ZSAtIDQpIHsKIAkJCURSTV9FUlJPUigiUmVsb2NhdGlvbiBiZXlvbmQgb2JqZWN0IGJvdW5kczogIgogCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkIHNpemUgJWQuXG4iLAotCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LCAoaW50KSBvYmotPnNpemUpOworCQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsIChpbnQpIG9iai0+c2l6ZSk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHJlbG9jLm9mZnNldCAmIDMpIHsKKwkJaWYgKHJlbG9jLT5vZmZzZXQgJiAzKSB7CiAJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gbm90IDQtYnl0ZSBhbGlnbmVkOiAiCiAJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQuXG4iLAotCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0KTsKKwkJCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCQkJICAoaW50KSByZWxvYy0+b2Zmc2V0KTsKIAkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwogCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChyZWxvYy53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVIHx8Ci0JCSAgICByZWxvYy5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisJCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSB8fAorCQkgICAgcmVsb2MtPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKIAkJCURSTV9FUlJPUigicmVsb2Mgd2l0aCByZWFkL3dyaXRlIENQVSBkb21haW5zOiAiCiAJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgogCQkJCSAgInJlYWQgJTA4eCB3cml0ZSAlMDh4IiwKLQkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKLQkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwKLQkJCQkgIHJlbG9jLnJlYWRfZG9tYWlucywKLQkJCQkgIHJlbG9jLndyaXRlX2RvbWFpbik7CisJCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCisJCQkJICByZWxvYy0+d3JpdGVfZG9tYWluKTsKIAkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwogCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChyZWxvYy53cml0ZV9kb21haW4gJiYgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gJiYKLQkJICAgIHJlbG9jLndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgeworCQlpZiAocmVsb2MtPndyaXRlX2RvbWFpbiAmJiB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiAmJgorCQkgICAgcmVsb2MtPndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgewogCQkJRFJNX0VSUk9SKCJXcml0ZSBkb21haW4gY29uZmxpY3Q6ICIKIAkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCiAJCQkJICAibmV3ICUwOHggb2xkICUwOHhcbiIsCi0JCQkJICBvYmosIHJlbG9jLnRhcmdldF9oYW5kbGUsCi0JCQkJICAoaW50KSByZWxvYy5vZmZzZXQsCi0JCQkJICByZWxvYy53cml0ZV9kb21haW4sCisJCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCQkgIHJlbG9jLT53cml0ZV9kb21haW4sCiAJCQkJICB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwpAQCAtMjM1MSwyMiArMjgwNywyMiBAQAogCQkJICJwcmVzdW1lZCAlMDh4IGRlbHRhICUwOHhcbiIsCiAJCQkgX19mdW5jX18sCiAJCQkgb2JqLAotCQkJIChpbnQpIHJlbG9jLm9mZnNldCwKLQkJCSAoaW50KSByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJIChpbnQpIHJlbG9jLnJlYWRfZG9tYWlucywKLQkJCSAoaW50KSByZWxvYy53cml0ZV9kb21haW4sCisJCQkgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCSAoaW50KSByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCSAoaW50KSByZWxvYy0+cmVhZF9kb21haW5zLAorCQkJIChpbnQpIHJlbG9jLT53cml0ZV9kb21haW4sCiAJCQkgKGludCkgdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0LAotCQkJIChpbnQpIHJlbG9jLnByZXN1bWVkX29mZnNldCwKLQkJCSByZWxvYy5kZWx0YSk7CisJCQkgKGludCkgcmVsb2MtPnByZXN1bWVkX29mZnNldCwKKwkJCSByZWxvYy0+ZGVsdGEpOwogI2VuZGlmCiAKLQkJdGFyZ2V0X29iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gcmVsb2MucmVhZF9kb21haW5zOwotCQl0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiB8PSByZWxvYy53cml0ZV9kb21haW47CisJCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLT5yZWFkX2RvbWFpbnM7CisJCXRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluIHw9IHJlbG9jLT53cml0ZV9kb21haW47CiAKIAkJLyogSWYgdGhlIHJlbG9jYXRpb24gYWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHZhbHVlIGluIGl0LCBubwogCQkgKiBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZS4KIAkJICovCi0JCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgPT0gcmVsb2MucHJlc3VtZWRfb2Zmc2V0KSB7CisJCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgPT0gcmVsb2MtPnByZXN1bWVkX29mZnNldCkgewogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjM4MSwzMiArMjgzNywyNiBAQAogCQkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0bwogCQkgKiBwZXJmb3JtLgogCQkgKi8KLQkJcmVsb2Nfb2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy5vZmZzZXQ7CisJCXJlbG9jX29mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2MtPm9mZnNldDsKIAkJcmVsb2NfcGFnZSA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsCiAJCQkJCQkgICAgICAocmVsb2Nfb2Zmc2V0ICYKIAkJCQkJCSAgICAgICB+KFBBR0VfU0laRSAtIDEpKSk7CiAJCXJlbG9jX2VudHJ5ID0gKHVpbnQzMl90IF9faW9tZW0gKikocmVsb2NfcGFnZSArCiAJCQkJCQkgICAocmVsb2Nfb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKSk7Ci0JCXJlbG9jX3ZhbCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLmRlbHRhOworCQlyZWxvY192YWwgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy0+ZGVsdGE7CiAKICNpZiBXQVRDSF9CVUYKIAkJRFJNX0lORk8oIkFwcGxpZWQgcmVsb2NhdGlvbjogJXBAMHglMDh4ICUwOHggLT4gJTA4eFxuIiwKLQkJCSAgb2JqLCAodW5zaWduZWQgaW50KSByZWxvYy5vZmZzZXQsCisJCQkgIG9iaiwgKHVuc2lnbmVkIGludCkgcmVsb2MtPm9mZnNldCwKIAkJCSAgcmVhZGwocmVsb2NfZW50cnkpLCByZWxvY192YWwpOwogI2VuZGlmCiAJCXdyaXRlbChyZWxvY192YWwsIHJlbG9jX2VudHJ5KTsKIAkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMocmVsb2NfcGFnZSk7CiAKLQkJLyogV3JpdGUgdGhlIHVwZGF0ZWQgcHJlc3VtZWQgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IGJhY2sgb3V0Ci0JCSAqIHRvIHRoZSB1c2VyLgorCQkvKiBUaGUgdXBkYXRlZCBwcmVzdW1lZCBvZmZzZXQgZm9yIHRoaXMgZW50cnkgd2lsbCBiZQorCQkgKiBjb3BpZWQgYmFjayBvdXQgdG8gdGhlIHVzZXIuCiAJCSAqLwotCQlyZWxvYy5wcmVzdW1lZF9vZmZzZXQgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQ7Ci0JCXJldCA9IGNvcHlfdG9fdXNlcihyZWxvY3MgKyBpLCAmcmVsb2MsIHNpemVvZihyZWxvYykpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCXJlbG9jLT5wcmVzdW1lZF9vZmZzZXQgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJfQpAQCAtMjQyMywxMSArMjg3MywxMCBAQAogc3RhdGljIGludAogaTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICpleGVjLAorCQkJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKIAkJCSAgICAgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMgPSAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCi0JCQkJCSAgICAgKHVpbnRwdHJfdCkgZXhlYy0+Y2xpcHJlY3RzX3B0cjsKIAlpbnQgbmJveCA9IGV4ZWMtPm51bV9jbGlwcmVjdHM7CiAJaW50IGkgPSAwLCBjb3VudDsKIAl1aW50MzJfdAlleGVjX3N0YXJ0LCBleGVjX2xlbjsKQEAgLTI0NDgsNyArMjg5Nyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlpZiAoaSA8IG5ib3gpIHsKLQkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgYm94ZXMsIGksCisJCQlpbnQgcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKIAkJCQkJCWV4ZWMtPkRSMSwgZXhlYy0+RFI0KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTI1MDQsNiArMjk1Myw3NSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2dldF9yZWxvY3NfZnJvbV91c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCwKKwkJCSAgICAgIHVpbnQzMl90IGJ1ZmZlcl9jb3VudCwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqKnJlbG9jcykKK3sKKwl1aW50MzJfdCByZWxvY19jb3VudCA9IDAsIHJlbG9jX2luZGV4ID0gMCwgaTsKKwlpbnQgcmV0OworCisJKnJlbG9jcyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCWlmIChyZWxvY19jb3VudCArIGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50IDwgcmVsb2NfY291bnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVsb2NfY291bnQgKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJfQorCisJKnJlbG9jcyA9IGRybV9jYWxsb2MocmVsb2NfY291bnQsIHNpemVvZigqKnJlbG9jcyksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoKnJlbG9jcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmZXJfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKKworCQl1c2VyX3JlbG9jcyA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpZXhlY19saXN0W2ldLnJlbG9jc19wdHI7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJigqcmVsb2NzKVtyZWxvY19pbmRleF0sCisJCQkJICAgICB1c2VyX3JlbG9jcywKKwkJCQkgICAgIGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50ICoKKwkJCQkgICAgIHNpemVvZigqKnJlbG9jcykpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRybV9mcmVlKCpyZWxvY3MsIHJlbG9jX2NvdW50ICogc2l6ZW9mKCoqcmVsb2NzKSwKKwkJCQkgRFJNX01FTV9EUklWRVIpOworCQkJKnJlbG9jcyA9IE5VTEw7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmVsb2NfaW5kZXggKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fcHV0X3JlbG9jc190b191c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCwKKwkJCSAgICB1aW50MzJfdCBidWZmZXJfY291bnQsCisJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MpCit7CisJdWludDMyX3QgcmVsb2NfY291bnQgPSAwLCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7CisKKwkJdXNlcl9yZWxvY3MgPSAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWV4ZWNfbGlzdFtpXS5yZWxvY3NfcHRyOworCisJCWlmIChyZXQgPT0gMCkgeworCQkJcmV0ID0gY29weV90b191c2VyKHVzZXJfcmVsb2NzLAorCQkJCQkgICAmcmVsb2NzW3JlbG9jX2NvdW50XSwKKwkJCQkJICAgZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQgKgorCQkJCQkgICBzaXplb2YoKnJlbG9jcykpOworCQl9CisKKwkJcmVsb2NfY291bnQgKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJfQorCisJZHJtX2ZyZWUocmVsb2NzLCByZWxvY19jb3VudCAqIHNpemVvZigqcmVsb2NzKSwgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50CiBpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKQEAgLTI1MTUsOSArMzAzMywxMSBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoX29iajsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0JaW50IHJldCwgaSwgcGlubmVkID0gMDsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jczsKKwlpbnQgcmV0LCByZXQyLCBpLCBwaW5uZWQgPSAwOwogCXVpbnQ2NF90IGV4ZWNfb2Zmc2V0OwotCXVpbnQzMl90IHNlcW5vLCBmbHVzaF9kb21haW5zOworCXVpbnQzMl90IHNlcW5vLCBmbHVzaF9kb21haW5zLCByZWxvY19pbmRleDsKIAlpbnQgcGluX3RyaWVzOwogCiAjaWYgV0FUQ0hfRVhFQwpAQCAtMjU1MSw2ICszMDcxLDI4IEBACiAJCWdvdG8gcHJlX211dGV4X2VycjsKIAl9CiAKKwlpZiAoYXJncy0+bnVtX2NsaXByZWN0cyAhPSAwKSB7CisJCWNsaXByZWN0cyA9IGRybV9jYWxsb2MoYXJncy0+bnVtX2NsaXByZWN0cywgc2l6ZW9mKCpjbGlwcmVjdHMpLAorCQkJCSAgICAgICBEUk1fTUVNX0RSSVZFUik7CisJCWlmIChjbGlwcmVjdHMgPT0gTlVMTCkKKwkJCWdvdG8gcHJlX211dGV4X2VycjsKKworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsCisJCQkJICAgICAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCisJCQkJICAgICAodWludHB0cl90KSBhcmdzLT5jbGlwcmVjdHNfcHRyLAorCQkJCSAgICAgc2l6ZW9mKCpjbGlwcmVjdHMpICogYXJncy0+bnVtX2NsaXByZWN0cyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJjb3B5ICVkIGNsaXByZWN0cyBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgYXJncy0+bnVtX2NsaXByZWN0cywgcmV0KTsKKwkJCWdvdG8gcHJlX211dGV4X2VycjsKKwkJfQorCX0KKworCXJldCA9IGk5MTVfZ2VtX2dldF9yZWxvY3NfZnJvbV91c2VyKGV4ZWNfbGlzdCwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCQkgICAgJnJlbG9jcyk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIHByZV9tdXRleF9lcnI7CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CkBAIC0yNTkzLDE1ICszMTM1LDE5IEBACiAJLyogUGluIGFuZCByZWxvY2F0ZSAqLwogCWZvciAocGluX3RyaWVzID0gMDsgOyBwaW5fdHJpZXMrKykgewogCQlyZXQgPSAwOworCQlyZWxvY19pbmRleCA9IDA7CisKIAkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CiAJCQlvYmplY3RfbGlzdFtpXS0+cGVuZGluZ19yZWFkX2RvbWFpbnMgPSAwOwogCQkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gMDsKIAkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW5fYW5kX3JlbG9jYXRlKG9iamVjdF9saXN0W2ldLAogCQkJCQkJCSAgICAgICBmaWxlX3ByaXYsCi0JCQkJCQkJICAgICAgICZleGVjX2xpc3RbaV0pOworCQkJCQkJCSAgICAgICAmZXhlY19saXN0W2ldLAorCQkJCQkJCSAgICAgICAmcmVsb2NzW3JlbG9jX2luZGV4XSk7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQkJcGlubmVkID0gaSArIDE7CisJCQlyZWxvY19pbmRleCArPSBleGVjX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudDsKIAkJfQogCQkvKiBzdWNjZXNzICovCiAJCWlmIChyZXQgPT0gMCkKQEAgLTI2ODcsNyArMzIzMyw3IEBACiAjZW5kaWYKIAogCS8qIEV4ZWMgdGhlIGJhdGNoYnVmZmVyICovCi0JcmV0ID0gaTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihkZXYsIGFyZ3MsIGV4ZWNfb2Zmc2V0KTsKKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKGRldiwgYXJncywgY2xpcHJlY3RzLCBleGVjX29mZnNldCk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImRpc3BhdGNoIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnI7CkBAIC0yNzUxLDExICszMjk3LDI3IEBACiAJCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CiAJfQogCisJLyogQ29weSB0aGUgdXBkYXRlZCByZWxvY2F0aW9ucyBvdXQgcmVnYXJkbGVzcyBvZiBjdXJyZW50IGVycm9yCisJICogc3RhdGUuICBGYWlsdXJlIHRvIHVwZGF0ZSB0aGUgcmVsb2NzIHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV4dAorCSAqIHRpbWUgdXNlcmxhbmQgY2FsbHMgZXhlY2J1ZiwgaXQgd291bGQgZG8gc28gd2l0aCBwcmVzdW1lZCBvZmZzZXQKKwkgKiBzdGF0ZSB0aGF0IGRpZG4ndCBtYXRjaCB0aGUgYWN0dWFsIG9iamVjdCBzdGF0ZS4KKwkgKi8KKwlyZXQyID0gaTkxNV9nZW1fcHV0X3JlbG9jc190b191c2VyKGV4ZWNfbGlzdCwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCQkgICByZWxvY3MpOworCWlmIChyZXQyICE9IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29weSByZWxvY2F0aW9ucyBiYWNrIG91dDogJWRcbiIsIHJldDIpOworCisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IHJldDI7CisJfQorCiBwcmVfbXV0ZXhfZXJyOgogCWRybV9mcmVlKG9iamVjdF9saXN0LCBzaXplb2YoKm9iamVjdF9saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKIAkJIERSTV9NRU1fRFJJVkVSKTsKIAlkcm1fZnJlZShleGVjX2xpc3QsIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKIAkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShjbGlwcmVjdHMsIHNpemVvZigqY2xpcHJlY3RzKSAqIGFyZ3MtPm51bV9jbGlwcmVjdHMsCisJCSBEUk1fTUVNX0RSSVZFUik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzE5Miw3ICszNzU0LDcgQEAKIAogCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKIAotCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGttYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0ga21hcChvYmpfcHJpdi0+cGFnZXNbMF0pOwogCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgc3RhdHVzIHBhZ2UuXG4iKTsKIAkJbWVtc2V0KCZkZXZfcHJpdi0+aHdzX21hcCwgMCwgc2l6ZW9mKGRldl9wcml2LT5od3NfbWFwKSk7CkBAIC0zMjIyLDcgKzM3ODQsNyBAQAogCW9iaiA9IGRldl9wcml2LT5od3Nfb2JqOwogCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAotCWt1bm1hcChvYmpfcHJpdi0+cGFnZV9saXN0WzBdKTsKKwlrdW5tYXAob2JqX3ByaXYtPnBhZ2VzWzBdKTsKIAlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwogCWRldl9wcml2LT5od3Nfb2JqID0gTlVMTDsKQEAgLTM1MjUsMjAgKzQwODcsMjAgQEAKIAlpZiAoIW9ial9wcml2LT5waHlzX29iaikKIAkJcmV0dXJuOwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qob2JqKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgewotCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZV9saXN0W2ldLCBLTV9VU0VSMCk7CisJCWNoYXIgKmRzdCA9IGttYXBfYXRvbWljKG9ial9wcml2LT5wYWdlc1tpXSwgS01fVVNFUjApOwogCQljaGFyICpzcmMgPSBvYmpfcHJpdi0+cGh5c19vYmotPmhhbmRsZS0+dmFkZHIgKyAoaSAqIFBBR0VfU0laRSk7CiAKIAkJbWVtY3B5KGRzdCwgc3JjLCBQQUdFX1NJWkUpOwogCQlrdW5tYXBfYXRvbWljKGRzdCwgS01fVVNFUjApOwogCX0KLQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0LCBwYWdlX2NvdW50KTsKKwlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMsIHBhZ2VfY291bnQpOwogCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOwogb3V0OgogCW9ial9wcml2LT5waHlzX29iai0+Y3VyX29iaiA9IE5VTEw7CkBAIC0zNTgxLDcgKzQxNDMsNyBAQAogCW9ial9wcml2LT5waHlzX29iaiA9IGRldl9wcml2LT5tbS5waHlzX29ianNbaWQgLSAxXTsKIAlvYmpfcHJpdi0+cGh5c19vYmotPmN1cl9vYmogPSBvYmo7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChvYmopOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBwYWdlIGxpc3RcbiIpOwogCQlnb3RvIG91dDsKQEAgLTM1OTAsNyArNDE1Miw3IEBACiAJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKLQkJY2hhciAqc3JjID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSwgS01fVVNFUjApOworCQljaGFyICpzcmMgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZXNbaV0sIEtNX1VTRVIwKTsKIAkJY2hhciAqZHN0ID0gb2JqX3ByaXYtPnBoeXNfb2JqLT5oYW5kbGUtPnZhZGRyICsgKGkgKiBQQUdFX1NJWkUpOwogCiAJCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVlYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWdmcy5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2RlZmluZSBEUk1fSTkxNV9SSU5HX0RFQlVHIDEKKworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKKyNkZWZpbmUgQUNUSVZFX0xJU1QJMQorI2RlZmluZSBGTFVTSElOR19MSVNUCTIKKyNkZWZpbmUgSU5BQ1RJVkVfTElTVAkzCisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcGluX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2KQoreworCWlmIChvYmpfcHJpdi0+dXNlcl9waW5fY291bnQgPiAwKQorCQlyZXR1cm4gIlAiOworCWVsc2UgaWYgKG9ial9wcml2LT5waW5fY291bnQgPiAwKQorCQlyZXR1cm4gInAiOworCWVsc2UKKwkJcmV0dXJuICIgIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF90aWxpbmdfZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYpCit7CisgICAgc3dpdGNoIChvYmpfcHJpdi0+dGlsaW5nX21vZGUpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgSTkxNV9USUxJTkdfTk9ORTogcmV0dXJuICIgIjsKKyAgICBjYXNlIEk5MTVfVElMSU5HX1g6IHJldHVybiAiWCI7CisgICAgY2FzZSBJOTE1X1RJTElOR19ZOiByZXR1cm4gIlkiOworICAgIH0KK30KKworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfbGlzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXVpbnRwdHJfdCBsaXN0ID0gKHVpbnRwdHJfdCkgbm9kZS0+aW5mb19lbnQtPmRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlzd2l0Y2ggKGxpc3QpIHsKKwljYXNlIEFDVElWRV9MSVNUOgorCQlzZXFfcHJpbnRmKG0sICJBY3RpdmU6XG4iKTsKKwkJaGVhZCA9ICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3Q7CisJCWJyZWFrOworCWNhc2UgSU5BQ1RJVkVfTElTVDoKKwkJc2VxX3ByaW50ZihtLCAiSW5jdGl2ZTpcbiIpOworCQloZWFkID0gJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0OworCQlicmVhazsKKwljYXNlIEZMVVNISU5HX0xJU1Q6CisJCXNlcV9wcmludGYobSwgIkZsdXNoaW5nOlxuIik7CisJCWhlYWQgPSAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9JTkZPKCJPb29wcywgdW5leHBlY3RlZCBsaXN0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgaGVhZCwgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlzZXFfcHJpbnRmKG0sICIgICAgJXA6ICVzICUwOHggJTA4eCAlZCIsCisJCQkgICBvYmosCisJCQkgICBnZXRfcGluX2ZsYWcob2JqX3ByaXYpLAorCQkJICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKworCQlpZiAob2JqLT5uYW1lKQorCQkJc2VxX3ByaW50ZihtLCAiIChuYW1lOiAlZCkiLCBvYmotPm5hbWUpOworCQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQorCQkJc2VxX3ByaW50ZihtLCAiIChmZW5jZTogJWRcbiIsIG9ial9wcml2LT5mZW5jZV9yZWcpOworCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2dlbV9yZXF1ZXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpnZW1fcmVxdWVzdDsKKworCXNlcV9wcmludGYobSwgIlJlcXVlc3Q6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbV9yZXF1ZXN0LCAmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCwgbGlzdCkgeworCQlzZXFfcHJpbnRmKG0sICIgICAgJWQgQCAlZFxuIiwKKwkJCSAgIGdlbV9yZXF1ZXN0LT5zZXFubywKKwkJCSAgIChpbnQpIChqaWZmaWVzIC0gZ2VtX3JlcXVlc3QtPmVtaXR0ZWRfamlmZmllcykpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2dlbV9zZXFub19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSAhPSBOVUxMKSB7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLAorCQkJICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6IGh3cyB1bmluaXRpYWxpemVkXG4iKTsKKwl9CisJc2VxX3ByaW50ZihtLCAiV2FpdGVyIHNlcXVlbmNlOiAgJWRcbiIsCisJCQlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8pOworCXNlcV9wcmludGYobSwgIklSUSBzZXF1ZW5jZTogICAgICVkXG4iLCBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpOTE1X2ludGVycnVwdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IGVuYWJsZTogICAgJTA4eFxuIiwKKwkJICAgSTkxNV9SRUFEKElFUikpOworCXNlcV9wcmludGYobSwgIkludGVycnVwdCBpZGVudGl0eTogICUwOHhcbiIsCisJCSAgIEk5MTVfUkVBRChJSVIpKTsKKwlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgbWFzazogICAgICAlMDh4XG4iLAorCQkgICBJOTE1X1JFQUQoSU1SKSk7CisJc2VxX3ByaW50ZihtLCAiUGlwZSBBIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKKwkJICAgSTkxNV9SRUFEKFBJUEVBU1RBVCkpOworCXNlcV9wcmludGYobSwgIlBpcGUgQiBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgIEk5MTVfUkVBRChQSVBFQlNUQVQpKTsKKwlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKKwlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlICE9IE5VTEwpIHsKKwkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCQkgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogICAgaHdzIHVuaW5pdGlhbGl6ZWRcbiIpOworCX0KKwlzZXFfcHJpbnRmKG0sICJXYWl0ZXIgc2VxdWVuY2U6ICAgICAlZFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2U6ICAgICAgICAlZFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCXNlcV9wcmludGYobSwgIlJlc2VydmVkIGZlbmNlcyA9ICVkXG4iLCBkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0KTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBmZW5jZXMgPSAlZFxuIiwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXS5vYmo7CisKKwkJaWYgKG9iaiA9PSBOVUxMKSB7CisJCQlzZXFfcHJpbnRmKG0sICJGZW5jZWQgb2JqZWN0WyUyZF0gPSB1bnVzZWRcbiIsIGkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJCQlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCQlzZXFfcHJpbnRmKG0sICJGZW5jZWQgb2JqZWN0WyUyZF0gPSAlcDogJXMgIgorCQkJCSAgICIlMDh4ICUwOHp4ICUwOHggJXMgJTA4eCAlMDh4ICVkIiwKKwkJCQkgICBpLCBvYmosIGdldF9waW5fZmxhZyhvYmpfcHJpdiksCisJCQkJICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkJICAgb2JqLT5zaXplLCBvYmpfcHJpdi0+c3RyaWRlLAorCQkJCSAgIGdldF90aWxpbmdfZmxhZyhvYmpfcHJpdiksCisJCQkJICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCQlpZiAob2JqLT5uYW1lKQorCQkJCXNlcV9wcmludGYobSwgIiAobmFtZTogJWQpIiwgb2JqLT5uYW1lKTsKKwkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2h3c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXZvbGF0aWxlIHUzMiAqaHdzOworCisJaHdzID0gKHZvbGF0aWxlIHUzMiAqKWRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKKwlpZiAoaHdzID09IE5VTEwpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IDQwOTYgLyBzaXplb2YodTMyKSAvIDQ7IGkgKz0gNCkgeworCQlzZXFfcHJpbnRmKG0sICIweCUwOHg6IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCSAgIGkgKiA0LAorCQkJICAgaHdzW2ldLCBod3NbaSArIDFdLCBod3NbaSArIDJdLCBod3NbaSArIDNdKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBpOTE1X2dlbV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKKwl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCisJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LAorCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm8sIDB9LAorCXsiaTkxNV9nZW1fZmVuY2VfcmVncyIsIGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9pbnRlcnJ1cHQiLCBpOTE1X2ludGVycnVwdF9pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2h3cyIsIGk5MTVfaHdzX2luZm8sIDB9LAorfTsKKyNkZWZpbmUgSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fZGVidWdmc19saXN0KQorCitpbnQgaTkxNV9nZW1fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoaTkxNV9nZW1fZGVidWdmc19saXN0LAorCQkJCQlJOTE1X0dFTV9ERUJVR0ZTX0VOVFJJRVMsCisJCQkJCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KKwordm9pZCBpOTE1X2dlbV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCwKKwkJCQkgSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTLCBtaW5vcik7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDFiOWRlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0gKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJkcm0uaCIKLSNpbmNsdWRlICJpOTE1X2RybS5oIgotI2luY2x1ZGUgImk5MTVfZHJ2LmgiCi0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCURSTV9QUk9DX1BSSU5UKCJBY3RpdmU6XG4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPm5hbWUpIHsKLQkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAotCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JRFJNX1BST0NfUFJJTlQoIkZsdXNoaW5nOlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPm5hbWUpIHsKLQkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAotCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX2luYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JRFJNX1BST0NfUFJJTlQoIkluYWN0aXZlOlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0JCWlmIChvYmotPm5hbWUpIHsKLQkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCi0JCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAotCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCi0JCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX3JlcXVlc3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlEUk1fUFJPQ19QUklOVCgiUmVxdWVzdDpcbiIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsICZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAotCQkJICAgIGxpc3QpCi0JewotCQlEUk1fUFJPQ19QUklOVCgiICAgICVkIEAgJWRcbiIsCi0JCQkgICAgICAgZ2VtX3JlcXVlc3QtPnNlcW5vLAotCQkJICAgICAgIChpbnQpIChqaWZmaWVzIC0gZ2VtX3JlcXVlc3QtPmVtaXR0ZWRfamlmZmllcykpOwotCX0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9zZXFub19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgewotCQlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogJWRcbiIsCi0JCQkgICAgICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOwotCX0gZWxzZSB7Ci0JCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiBod3MgdW5pbml0aWFsaXplZFxuIik7Ci0JfQotCURSTV9QUk9DX1BSSU5UKCJXYWl0ZXIgc2VxdWVuY2U6ICAlZFxuIiwKLQkJICAgICAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7Ci0JRFJNX1BST0NfUFJJTlQoIklSUSBzZXF1ZW5jZTogICAgICVkXG4iLCBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLQotc3RhdGljIGludCBpOTE1X2ludGVycnVwdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHQgZW5hYmxlOiAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKElFUikpOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKElJUikpOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHQgbWFzazogICAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKElNUikpOwotCURSTV9QUk9DX1BSSU5UKCJQaXBlIEEgc3RhdDogICAgICAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKFBJUEVBU1RBVCkpOwotCURSTV9QUk9DX1BSSU5UKCJQaXBlIEIgc3RhdDogICAgICAgICAlMDh4XG4iLAotCQkgICAgICAgSTkxNV9SRUFEKFBJUEVCU1RBVCkpOwotCURSTV9QUk9DX1BSSU5UKCJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKLQkJICAgICAgIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkKSk7Ci0JaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSAhPSBOVUxMKSB7Ci0JCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiAgICAlZFxuIiwKLQkJCSAgICAgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7Ci0JfSBlbHNlIHsKLQkJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICAgIGh3cyB1bmluaXRpYWxpemVkXG4iKTsKLQl9Ci0JRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICAgICVkXG4iLAotCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKLQlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCi0JCSAgICAgICBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9od3NfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGxlbiA9IDAsIGk7Ci0Jdm9sYXRpbGUgdTMyICpod3M7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCWh3cyA9ICh2b2xhdGlsZSB1MzIgKilkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7Ci0JaWYgKGh3cyA9PSBOVUxMKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQwOTYgLyBzaXplb2YodTMyKSAvIDQ7IGkgKz0gNCkgewotCQlEUk1fUFJPQ19QUklOVCgiMHglMDh4OiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCi0JCQkgICAgICAgaSAqIDQsCi0JCQkgICAgICAgaHdzW2ldLCBod3NbaSArIDFdLCBod3NbaSArIDJdLCBod3NbaSArIDNdKTsKLQl9Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7Ci0JLyoqIGZpbGUgbmFtZSAqLwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JLyoqIHByb2MgY2FsbGJhY2sqLwotCWludCAoKmYpIChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwotfSBpOTE1X2dlbV9wcm9jX2xpc3RbXSA9IHsKLQl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX2FjdGl2ZV9pbmZvfSwKLQl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fZmx1c2hpbmdfaW5mb30sCi0JeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX2luYWN0aXZlX2luZm99LAotCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mb30sCi0JeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm99LAotCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mb30sCi0JeyJpOTE1X2dlbV9od3MiLCBpOTE1X2h3c19pbmZvfSwKLX07Ci0KLSNkZWZpbmUgSTkxNV9HRU1fUFJPQ19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fcHJvY19saXN0KQotCi1pbnQgaTkxNV9nZW1fcHJvY19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsgaSA8IEk5MTVfR0VNX1BST0NfRU5UUklFUzsgaSsrKSB7Ci0JCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLAotCQkJCQlTX0lGUkVHIHwgU19JUlVHTywgbWlub3ItPmRldl9yb290KTsKLQkJaWYgKCFlbnQpIHsKLQkJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvLi4uLyVzXG4iLAotCQkJCSAgaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUpOwotCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQlyZW1vdmVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQllbnQtPnJlYWRfcHJvYyA9IGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5mOwotCQllbnQtPmRhdGEgPSBtaW5vcjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaTkxNV9nZW1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQotewotCWludCBpOwotCi0JaWYgKCFtaW5vci0+ZGV2X3Jvb3QpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykKLQkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5kZXZfcm9vdCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDdmYjQxOTEuLjRjY2UxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC05NiwxNiArOTYsMTYgQEAKIAkJICovCiAJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwogCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKLQl9IGVsc2UgaWYgKCghSVNfSTk2NUcoZGV2KSAmJiAhSVNfRzMzKGRldikpIHx8IElTX0k5NjVHTShkZXYpIHx8Ci0JCSAgIElTX0dNNDUoZGV2KSkgeworCX0gZWxzZSBpZiAoSVNfTU9CSUxFKGRldikpIHsKIAkJdWludDMyX3QgZGNjOwogCi0JCS8qIE9uIDkxNS05NDUgYW5kIEdNOTY1LCBjaGFubmVsIGludGVybGVhdmUgYnkgdGhlIENQVSBpcwotCQkgKiBkZXRlcm1pbmVkIGJ5IERDQy4gIFRoZSBDUFUgd2lsbCBhbHRlcm5hdGUgYmFzZWQgb24gYml0IDYKLQkJICogaW4gaW50ZXJsZWF2ZWQgbW9kZSwgYW5kIHRoZSBHUFUgd2lsbCB0aGVuIGFsc28gYWx0ZXJuYXRlCi0JCSAqIG9uIGJpdCA2LCA5LCBhbmQgMTAgZm9yIFgsIGJ1dCB0aGUgQ1BVIG1heSBhbHNvIG9wdGlvbmFsbHkKLQkJICogYWx0ZXJuYXRlIGJhc2VkIG9uIGJpdCAxNyAoWE9SIG5vdCBkaXNhYmxlZCBhbmQgWE9SCi0JCSAqIGJpdCA9PSAxNykuCisJCS8qIE9uIG1vYmlsZSA5eHggY2hpcHNldHMsIGNoYW5uZWwgaW50ZXJsZWF2ZSBieSB0aGUgQ1BVIGlzCisJCSAqIGRldGVybWluZWQgYnkgRENDLiAgRm9yIHNpbmdsZS1jaGFubmVsLCBuZWl0aGVyIHRoZSBDUFUKKwkJICogbm9yIHRoZSBHUFUgZG8gc3dpenpsaW5nLiAgRm9yIGR1YWwgY2hhbm5lbCBpbnRlcmxlYXZlZCwKKwkJICogdGhlIEdQVSdzIGludGVybGVhdmUgaXMgYml0IDkgYW5kIDEwIGZvciBYIHRpbGVkLCBhbmQgYml0CisJCSAqIDkgZm9yIFkgdGlsZWQuICBUaGUgQ1BVJ3MgaW50ZXJsZWF2ZSBpcyBpbmRlcGVuZGVudCwgYW5kCisJCSAqIGNhbiBiZSBiYXNlZCBvbiBlaXRoZXIgYml0IDExIChoYXZlbid0IHNlZW4gdGhpcyB5ZXQpIG9yCisJCSAqIGJpdCAxNyAoY29tbW9uKS4KIAkJICovCiAJCWRjYyA9IEk5MTVfUkVBRChEQ0MpOwogCQlzd2l0Y2ggKGRjYyAmIERDQ19BRERSRVNTSU5HX01PREVfTUFTSykgewpAQCAtMTE1LDE5ICsxMTUsMTggQEAKIAkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwogCQkJYnJlYWs7CiAJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfSU5URVJMRUFWRUQ6Ci0JCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSB8fAotCQkJICAgIGRjYyAmIERDQ19DSEFOTkVMX1hPUl9ESVNBQkxFKSB7CisJCQlpZiAoZGNjICYgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUpIHsKKwkJCQkvKiBUaGlzIGlzIHRoZSBiYXNlIHN3aXp6bGluZyBieSB0aGUgR1BVIGZvcgorCQkJCSAqIHRpbGVkIGJ1ZmZlcnMuCisJCQkJICovCiAJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7CiAJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7Ci0JCQl9IGVsc2UgaWYgKChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpICYmCi0JCQkJICAgKGRjYyAmIERDQ19DSEFOTkVMX1hPUl9CSVRfMTcpID09IDApIHsKLQkJCQkvKiBHTTk2NS9HTTQ1IGRvZXMgZWl0aGVyIGJpdCAxMSBvciBiaXQgMTcKLQkJCQkgKiBzd2l6emxpbmcuCi0JCQkJICovCisJCQl9IGVsc2UgaWYgKChkY2MgJiBEQ0NfQ0hBTk5FTF9YT1JfQklUXzE3KSA9PSAwKSB7CisJCQkJLyogQml0IDExIHN3aXp6bGluZyBieSB0aGUgQ1BVIGluIGFkZGl0aW9uLiAqLwogCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExOwogCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzExOwogCQkJfSBlbHNlIHsKLQkJCQkvKiBCaXQgMTcgb3IgcGVyaGFwcyBvdGhlciBzd2l6emxpbmcgKi8KKwkJCQkvKiBCaXQgMTcgc3dpenpsaW5nIGJ5IHRoZSBDUFUgaW4gYWRkaXRpb24uICovCiAJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA5MDYwMGQ4Li4zNzdjYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTM1OSw2ICszNTksNyBAQAogI2RlZmluZSAgIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcJKDEgPDwgMjQpIC8qIGk5MTUgKi8KICNkZWZpbmUgICBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCTB4MDMwMDAwMDAgLyogaTkxNSAqLwogI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkweDAwZmYwMDAwIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSUdECTB4MDBmZjgwMDAgLyogSUdEICovCiAKICNkZWZpbmUgSTkxNV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCiAjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQpAQCAtNDM1LDYgKzQzNiw3IEBACiAgKi8KICNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTCTB4MDAzZjAwMDAKICNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCTE2CisjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVF9JR0QgMTUKIC8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLwogI2RlZmluZSAgIFBMTF9QMl9ESVZJREVfQllfNAkJKDEgPDwgMjMpCiAjZGVmaW5lICAgUExMX1AxX0RJVklERV9CWV9UV08JCSgxIDw8IDIxKSAvKiBpODMwICovCkBAIC01MDEsMTAgKzUwMywxMiBAQAogI2RlZmluZSBGUEIwCTB4MDYwNDgKICNkZWZpbmUgRlBCMQkweDA2MDRjCiAjZGVmaW5lICAgRlBfTl9ESVZfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIEZQX05fSUdEX0RJVl9NQVNLCTB4MDBmZjAwMDAKICNkZWZpbmUgICBGUF9OX0RJVl9TSElGVAkJMTYKICNkZWZpbmUgICBGUF9NMV9ESVZfTUFTSwkweDAwMDAzZjAwCiAjZGVmaW5lICAgRlBfTTFfRElWX1NISUZUCQkgOAogI2RlZmluZSAgIEZQX00yX0RJVl9NQVNLCTB4MDAwMDAwM2YKKyNkZWZpbmUgICBGUF9NMl9JR0RfRElWX01BU0sJMHgwMDAwMDBmZgogI2RlZmluZSAgIEZQX00yX0RJVl9TSElGVAkJIDAKICNkZWZpbmUgRFBMTF9URVNUCTB4NjA2YwogI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfMQkJKDAgPDwgMjIpCkBAIC02MjksNiArNjMzLDIyIEBACiAjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKICNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQogI2RlZmluZSAgIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVAkJKDEgPDwgMykKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfQUNUSVZBVElPTl9QRVJJT0RfMzIJKDAgPDwgOCkKKy8qIG11c3QgdXNlIHBlcmlvZCA2NCBvbiBHTTQ1IGFjY29yZGluZyB0byBkb2NzICovCisjZGVmaW5lIENSVF9IT1RQTFVHX0FDVElWQVRJT05fUEVSSU9EXzY0CSgxIDw8IDgpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RBQ19PTl9USU1FXzJNCQkoMCA8PCA3KQorI2RlZmluZSBDUlRfSE9UUExVR19EQUNfT05fVElNRV80TQkJKDEgPDwgNykKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzQwCQkoMCA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfNTAJCSgxIDw8IDUpCisjZGVmaW5lIENSVF9IT1RQTFVHX1ZPTFRBR0VfQ09NUEFSRV82MAkJKDIgPDwgNSkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzcwCQkoMyA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfTUFTSwkoMyA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfREVMQVlfMUcJCSgwIDw8IDQpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9ERUxBWV8yRwkJKDEgPDwgNCkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfREVURUNUX1ZPTFRBR0VfMzI1TVYJKDAgPDwgMikKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfREVURUNUX1ZPTFRBR0VfNDc1TVYJKDEgPDwgMikKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfTUFTSwkJCSgweDNmYykgLyogQml0cyA5LTIgKi8KKwogCiAjZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKICNkZWZpbmUgICBIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDI5KQpAQCAtODU2LDcgKzg3Niw3IEBACiAgKi8KICMgZGVmaW5lIFRWX0VOQ19DMF9GSVgJCQkoMSA8PCAxMCkKIC8qKiBCaXRzIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQgYnkgc29mdHdhcmUgKi8KLSMgZGVmaW5lIFRWX0NUTF9TQVZFCQkJKCgzIDw8IDgpIHwgKDMgPDwgNikpCisjIGRlZmluZSBUVl9DVExfU0FWRQkJCSgoMSA8PCAxMSkgfCAoMyA8PCA5KSB8ICg3IDw8IDYpIHwgMHhmKQogIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9NQVNLCQkoMyA8PCA0KQogLyoqIFJlYWQtb25seSBzdGF0ZSB0aGF0IHJlcG9ydHMgYWxsIGZlYXR1cmVzIGVuYWJsZWQgKi8KICMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfRU5BQkxFRAkJKDAgPDwgNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaAppbmRleCA1ZWE3MTVhLi5kZTYyMWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oCkBAIC0xNjIsMTMgKzE2MiwxMyBAQAogCXU4IHBhbmVsX3R5cGU7CiAJdTggcnN2ZDE7CiAJLyogTFZEUyBjYXBhYmlsaXRpZXMsIHN0b3JlZCBpbiBhIGR3b3JkICovCi0JdTggcnN2ZDI6MTsKLQl1OCBsdmRzX2VkaWQ6MTsKLQl1OCBwaXhlbF9kaXRoZXI6MTsKLQl1OCBwZml0X3JhdGlvX2F1dG86MTsKLQl1OCBwZml0X2dmeF9tb2RlX2VuaGFuY2VkOjE7Ci0JdTggcGZpdF90ZXh0X21vZGVfZW5oYW5jZWQ6MTsKIAl1OCBwZml0X21vZGU6MjsKKwl1OCBwZml0X3RleHRfbW9kZV9lbmhhbmNlZDoxOworCXU4IHBmaXRfZ2Z4X21vZGVfZW5oYW5jZWQ6MTsKKwl1OCBwZml0X3JhdGlvX2F1dG86MTsKKwl1OCBwaXhlbF9kaXRoZXI6MTsKKwl1OCBsdmRzX2VkaWQ6MTsKKwl1OCByc3ZkMjoxOwogCXU4IHJzdmQ0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBkY2FlZDM0Li4yYjZkNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtNjQsMTEgKzY0LDIxIEBACiBzdGF0aWMgaW50IGludGVsX2NydF9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCisJaW50IG1heF9jbG9jayA9IDA7CiAJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQogCQlyZXR1cm4gTU9ERV9OT19EQkxFU0NBTjsKIAotCWlmIChtb2RlLT5jbG9jayA+IDQwMDAwMCB8fCBtb2RlLT5jbG9jayA8IDI1MDAwKQotCQlyZXR1cm4gTU9ERV9DTE9DS19SQU5HRTsKKwlpZiAobW9kZS0+Y2xvY2sgPCAyNTAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCisJaWYgKCFJU19JOVhYKGRldikpCisJCW1heF9jbG9jayA9IDM1MDAwMDsKKwllbHNlCisJCW1heF9jbG9jayA9IDQwMDAwMDsKKwlpZiAobW9kZS0+Y2xvY2sgPiBtYXhfY2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAKIAlyZXR1cm4gTU9ERV9PSzsKIH0KQEAgLTExMywxMCArMTIzLDEzIEBACiAJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCiAJCWFkcGEgfD0gQURQQV9WU1lOQ19BQ1RJVkVfSElHSDsKIAotCWlmIChpbnRlbF9jcnRjLT5waXBlID09IDApCisJaWYgKGludGVsX2NydGMtPnBpcGUgPT0gMCkgewogCQlhZHBhIHw9IEFEUEFfUElQRV9BX1NFTEVDVDsKLQllbHNlCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCAwKTsKKwl9IGVsc2UgewogCQlhZHBhIHw9IEFEUEFfUElQRV9CX1NFTEVDVDsKKwkJSTkxNV9XUklURShCQ0xSUEFUX0IsIDApOworCX0KIAogCUk5MTVfV1JJVEUoQURQQSwgYWRwYSk7CiB9CkBAIC0xMzMsMjAgKzE0NiwzOSBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiB0ZW1wOworCXUzMiBob3RwbHVnX2VuOworCWludCBpLCB0cmllcyA9IDA7CisJLyoKKwkgKiBPbiA0IHNlcmllcyBkZXNrdG9wLCBDUlQgZGV0ZWN0IHNlcXVlbmNlIG5lZWQgdG8gYmUgZG9uZSB0d2ljZQorCSAqIHRvIGdldCBhIHJlbGlhYmxlIHJlc3VsdC4KKwkgKi8KIAotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCWlmIChJU19HNFgoZGV2KSAmJiAhSVNfR000NShkZXYpKQorCQl0cmllcyA9IDI7CisJZWxzZQorCQl0cmllcyA9IDE7CisJaG90cGx1Z19lbiA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOworCWhvdHBsdWdfZW4gJj0gfihDUlRfSE9UUExVR19NQVNLKTsKKwlob3RwbHVnX2VuIHw9IENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVDsKIAotCXRlbXAgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKKwlpZiAoSVNfR000NShkZXYpKQorCQlob3RwbHVnX2VuIHw9IENSVF9IT1RQTFVHX0FDVElWQVRJT05fUEVSSU9EXzY0OwogCi0JSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sCi0JCSAgIHRlbXAgfCBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QgfCAoMSA8PCA1KSk7CisJaG90cGx1Z19lbiB8PSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfNTA7CiAKLQlkbyB7Ci0JCWlmICghKEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pICYgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUKSkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfSB3aGlsZSAodGltZV9hZnRlcih0aW1lb3V0LCBqaWZmaWVzKSk7CisJZm9yIChpID0gMDsgaSA8IHRyaWVzIDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwkJLyogdHVybiBvbiB0aGUgRk9SQ0VfREVURUNUICovCisJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLCBob3RwbHVnX2VuKTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCQkvKiB3YWl0IGZvciBGT1JDRV9ERVRFQ1QgdG8gZ28gb2ZmICovCisJCWRvIHsKKwkJCWlmICghKEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pICYKKwkJCQkJQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUKSkKKwkJCQlicmVhazsKKwkJCW1zbGVlcCgxKTsKKwkJfSB3aGlsZSAodGltZV9hZnRlcih0aW1lb3V0LCBqaWZmaWVzKSk7CisJfQogCiAJaWYgKChJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpICYgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLKSA9PQogCSAgICBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGEyODM0MjcuLmQ5YzUwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTU2LDExICs1NiwxMyBAQAogfSBpbnRlbF9wMl90OwogCiAjZGVmaW5lIElOVEVMX1AyX05VTQkJICAgICAgMgotCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdF90Oworc3RydWN0IGludGVsX2xpbWl0IHsKICAgICBpbnRlbF9yYW5nZV90ICAgZG90LCB2Y28sIG4sIG0sIG0xLCBtMiwgcCwgcDE7CiAgICAgaW50ZWxfcDJfdAkgICAgcDI7Ci19IGludGVsX2xpbWl0X3Q7CisgICAgYm9vbCAoKiBmaW5kX3BsbCkoY29uc3QgaW50ZWxfbGltaXRfdCAqLCBzdHJ1Y3QgZHJtX2NydGMgKiwKKwkJICAgICAgaW50LCBpbnQsIGludGVsX2Nsb2NrX3QgKik7Cit9OwogCiAjZGVmaW5lIEk4WFhfRE9UX01JTgkJICAyNTAwMAogI2RlZmluZSBJOFhYX0RPVF9NQVgJCSAzNTAwMDAKQEAgLTkwLDE4ICs5MiwzMiBAQAogI2RlZmluZSBJOVhYX0RPVF9NQVgJCSA0MDAwMDAKICNkZWZpbmUgSTlYWF9WQ09fTUlOCQkxNDAwMDAwCiAjZGVmaW5lIEk5WFhfVkNPX01BWAkJMjgwMDAwMAorI2RlZmluZSBJR0RfVkNPX01JTgkJMTcwMDAwMAorI2RlZmluZSBJR0RfVkNPX01BWAkJMzUwMDAwMAogI2RlZmluZSBJOVhYX05fTUlOCQkgICAgICAxCiAjZGVmaW5lIEk5WFhfTl9NQVgJCSAgICAgIDYKKy8qIElHRCdzIE5jb3VudGVyIGlzIGEgcmluZyBjb3VudGVyICovCisjZGVmaW5lIElHRF9OX01JTgkJICAgICAgMworI2RlZmluZSBJR0RfTl9NQVgJCSAgICAgIDYKICNkZWZpbmUgSTlYWF9NX01JTgkJICAgICA3MAogI2RlZmluZSBJOVhYX01fTUFYCQkgICAgMTIwCisjZGVmaW5lIElHRF9NX01JTgkJICAgICAgMgorI2RlZmluZSBJR0RfTV9NQVgJCSAgICAyNTYKICNkZWZpbmUgSTlYWF9NMV9NSU4JCSAgICAgMTAKICNkZWZpbmUgSTlYWF9NMV9NQVgJCSAgICAgMjIKICNkZWZpbmUgSTlYWF9NMl9NSU4JCSAgICAgIDUKICNkZWZpbmUgSTlYWF9NMl9NQVgJCSAgICAgIDkKKy8qIElHRCBNMSBpcyByZXNlcnZlZCwgYW5kIG11c3QgYmUgMCAqLworI2RlZmluZSBJR0RfTTFfTUlOCQkgICAgICAwCisjZGVmaW5lIElHRF9NMV9NQVgJCSAgICAgIDAKKyNkZWZpbmUgSUdEX00yX01JTgkJICAgICAgMAorI2RlZmluZSBJR0RfTTJfTUFYCQkgICAgICAyNTQKICNkZWZpbmUgSTlYWF9QX1NEVk9fREFDX01JTgkgICAgICA1CiAjZGVmaW5lIEk5WFhfUF9TRFZPX0RBQ19NQVgJICAgICA4MAogI2RlZmluZSBJOVhYX1BfTFZEU19NSU4JCSAgICAgIDcKICNkZWZpbmUgSTlYWF9QX0xWRFNfTUFYCQkgICAgIDk4CisjZGVmaW5lIElHRF9QX0xWRFNfTUlOCQkgICAgICA3CisjZGVmaW5lIElHRF9QX0xWRFNfTUFYCQkgICAgIDExMgogI2RlZmluZSBJOVhYX1AxX01JTgkJICAgICAgMQogI2RlZmluZSBJOVhYX1AxX01BWAkJICAgICAgOAogI2RlZmluZSBJOVhYX1AyX1NEVk9fREFDX1NMT1cJCSAgICAgMTAKQEAgLTExNSw2ICsxMzEsOTcgQEAKICNkZWZpbmUgSU5URUxfTElNSVRfSThYWF9MVkRTCSAgICAxCiAjZGVmaW5lIElOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUMgICAyCiAjZGVmaW5lIElOVEVMX0xJTUlUX0k5WFhfTFZEUwkgICAgMworI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfU0RWTwkgICAgNAorI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfSERNSV9EQUMgICA1CisjZGVmaW5lIElOVEVMX0xJTUlUX0c0WF9TSU5HTEVfQ0hBTk5FTF9MVkRTICAgNgorI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfRFVBTF9DSEFOTkVMX0xWRFMgICA3CisjZGVmaW5lIElOVEVMX0xJTUlUX0lHRF9TRFZPX0RBQyAgICA4CisjZGVmaW5lIElOVEVMX0xJTUlUX0lHRF9MVkRTCSAgICA5CisKKy8qVGhlIHBhcmFtZXRlciBpcyBmb3IgU0RWTyBvbiBHNHggcGxhdGZvcm0qLworI2RlZmluZSBHNFhfRE9UX1NEVk9fTUlOICAgICAgICAgICAyNTAwMAorI2RlZmluZSBHNFhfRE9UX1NEVk9fTUFYICAgICAgICAgICAyNzAwMDAKKyNkZWZpbmUgRzRYX1ZDT19NSU4gICAgICAgICAgICAgICAgMTc1MDAwMAorI2RlZmluZSBHNFhfVkNPX01BWCAgICAgICAgICAgICAgICAzNTAwMDAwCisjZGVmaW5lIEc0WF9OX1NEVk9fTUlOICAgICAgICAgICAgIDEKKyNkZWZpbmUgRzRYX05fU0RWT19NQVggICAgICAgICAgICAgNAorI2RlZmluZSBHNFhfTV9TRFZPX01JTiAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRzRYX01fU0RWT19NQVggICAgICAgICAgICAgMTM4CisjZGVmaW5lIEc0WF9NMV9TRFZPX01JTiAgICAgICAgICAgIDE3CisjZGVmaW5lIEc0WF9NMV9TRFZPX01BWCAgICAgICAgICAgIDIzCisjZGVmaW5lIEc0WF9NMl9TRFZPX01JTiAgICAgICAgICAgIDUKKyNkZWZpbmUgRzRYX00yX1NEVk9fTUFYICAgICAgICAgICAgMTEKKyNkZWZpbmUgRzRYX1BfU0RWT19NSU4gICAgICAgICAgICAgMTAKKyNkZWZpbmUgRzRYX1BfU0RWT19NQVggICAgICAgICAgICAgMzAKKyNkZWZpbmUgRzRYX1AxX1NEVk9fTUlOICAgICAgICAgICAgMQorI2RlZmluZSBHNFhfUDFfU0RWT19NQVggICAgICAgICAgICAzCisjZGVmaW5lIEc0WF9QMl9TRFZPX1NMT1cgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QMl9TRFZPX0ZBU1QgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QMl9TRFZPX0xJTUlUICAgICAgICAgIDI3MDAwMAorCisvKlRoZSBwYXJhbWV0ZXIgaXMgZm9yIEhETUlfREFDIG9uIEc0eCBwbGF0Zm9ybSovCisjZGVmaW5lIEc0WF9ET1RfSERNSV9EQUNfTUlOICAgICAgICAgICAyMjAwMAorI2RlZmluZSBHNFhfRE9UX0hETUlfREFDX01BWCAgICAgICAgICAgNDAwMDAwCisjZGVmaW5lIEc0WF9OX0hETUlfREFDX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX0hETUlfREFDX01BWCAgICAgICAgICAgICA0CisjZGVmaW5lIEc0WF9NX0hETUlfREFDX01JTiAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRzRYX01fSERNSV9EQUNfTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfSERNSV9EQUNfTUlOICAgICAgICAgICAgMTYKKyNkZWZpbmUgRzRYX00xX0hETUlfREFDX01BWCAgICAgICAgICAgIDIzCisjZGVmaW5lIEc0WF9NMl9IRE1JX0RBQ19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9IRE1JX0RBQ19NQVggICAgICAgICAgICAxMQorI2RlZmluZSBHNFhfUF9IRE1JX0RBQ19NSU4gICAgICAgICAgICAgNQorI2RlZmluZSBHNFhfUF9IRE1JX0RBQ19NQVggICAgICAgICAgICAgODAKKyNkZWZpbmUgRzRYX1AxX0hETUlfREFDX01JTiAgICAgICAgICAgIDEKKyNkZWZpbmUgRzRYX1AxX0hETUlfREFDX01BWCAgICAgICAgICAgIDgKKyNkZWZpbmUgRzRYX1AyX0hETUlfREFDX1NMT1cgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QMl9IRE1JX0RBQ19GQVNUICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9QMl9IRE1JX0RBQ19MSU1JVCAgICAgICAgICAxNjUwMDAKKworLypUaGUgcGFyYW1ldGVyIGlzIGZvciBTSU5HTEVfQ0hBTk5FTF9MVkRTIG9uIEc0eCBwbGF0Zm9ybSovCisjZGVmaW5lIEc0WF9ET1RfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgIDIwMDAwCisjZGVmaW5lIEc0WF9ET1RfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgIDExNTAwMAorI2RlZmluZSBHNFhfTl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDMKKyNkZWZpbmUgRzRYX01fU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMTA0CisjZGVmaW5lIEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAxNworI2RlZmluZSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAyMworI2RlZmluZSBHNFhfTTJfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgIDExCisjZGVmaW5lIEc0WF9QX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgIDI4CisjZGVmaW5lIEc0WF9QX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDExMgorI2RlZmluZSBHNFhfUDFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAyCisjZGVmaW5lIEc0WF9QMV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgIDgKKyNkZWZpbmUgRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfU0xPVyAgICAgICAgICAgMTQKKyNkZWZpbmUgRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfRkFTVCAgICAgICAgICAgMTQKKyNkZWZpbmUgRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfTElNSVQgICAgICAgICAgMAorCisvKlRoZSBwYXJhbWV0ZXIgaXMgZm9yIERVQUxfQ0hBTk5FTF9MVkRTIG9uIEc0eCBwbGF0Zm9ybSovCisjZGVmaW5lIEc0WF9ET1RfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICA4MDAwMAorI2RlZmluZSBHNFhfRE9UX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgMjI0MDAwCisjZGVmaW5lIEc0WF9OX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICAzCisjZGVmaW5lIEc0WF9NX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRzRYX01fRFVBTF9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgMTcKKyNkZWZpbmUgRzRYX00xX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgIDIzCisjZGVmaW5lIEc0WF9NMl9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAxMQorI2RlZmluZSBHNFhfUF9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMTQKKyNkZWZpbmUgRzRYX1BfRFVBTF9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgIDQyCisjZGVmaW5lIEc0WF9QMV9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAyCisjZGVmaW5lIEc0WF9QMV9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICA2CisjZGVmaW5lIEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19TTE9XICAgICAgICAgICA3CisjZGVmaW5lIEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19GQVNUICAgICAgICAgICA3CisjZGVmaW5lIEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19MSU1JVCAgICAgICAgICAwCisKK3N0YXRpYyBib29sCitpbnRlbF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKK3N0YXRpYyBib29sCitpbnRlbF9nNHhfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c1tdID0gewogICAgIHsgLyogSU5URUxfTElNSVRfSThYWF9EVk9fREFDICovCkBAIC0xMjgsNiArMjM1LDcgQEAKICAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk4WFhfUDFfTUlOLAkJLm1heCA9IEk4WFhfUDFfTUFYIH0sCiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk4WFhfUDJfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSThYWF9QMl9TTE9XLAkucDJfZmFzdCA9IEk4WFhfUDJfRkFTVCB9LAorCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCiAgICAgfSwKICAgICB7IC8qIElOVEVMX0xJTUlUX0k4WFhfTFZEUyAqLwogICAgICAgICAuZG90ID0geyAubWluID0gSThYWF9ET1RfTUlOLAkJLm1heCA9IEk4WFhfRE9UX01BWCB9LApAQCAtMTQwLDYgKzI0OCw3IEBACiAgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOFhYX1AxX0xWRFNfTUlOLAkubWF4ID0gSThYWF9QMV9MVkRTX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOFhYX1AyX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk4WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk4WFhfUDJfTFZEU19GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKICAgICB9LAogICAgIHsgLyogSU5URUxfTElNSVRfSTlYWF9TRFZPX0RBQyAqLwogICAgICAgICAuZG90ID0geyAubWluID0gSTlYWF9ET1RfTUlOLAkJLm1heCA9IEk5WFhfRE9UX01BWCB9LApAQCAtMTUyLDYgKzI2MSw3IEBACiAgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOVhYX1AxX01JTiwJCS5tYXggPSBJOVhYX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk5WFhfUDJfU0RWT19EQUNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX1NEVk9fREFDX0ZBU1QgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAogICAgIH0sCiAgICAgeyAvKiBJTlRFTF9MSU1JVF9JOVhYX0xWRFMgKi8KICAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk5WFhfRE9UX01JTiwJCS5tYXggPSBJOVhYX0RPVF9NQVggfSwKQEAgLTE2NywxOSArMjc3LDE1NyBAQAogCSAqLwogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOVhYX1AyX0xWRFNfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSTlYWF9QMl9MVkRTX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9MVkRTX0ZBU1QgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAogICAgIH0sCisgICAgLyogYmVsb3cgcGFyYW1ldGVyIGFuZCBmdW5jdGlvbiBpcyBmb3IgRzRYIENoaXBzZXQgRmFtaWx5Ki8KKyAgICB7IC8qIElOVEVMX0xJTUlUX0c0WF9TRFZPICovCisJLmRvdCA9IHsgLm1pbiA9IEc0WF9ET1RfU0RWT19NSU4sCS5tYXggPSBHNFhfRE9UX1NEVk9fTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IEc0WF9WQ09fTUlOLAkgICAgICAgIC5tYXggPSBHNFhfVkNPX01BWH0sCisJLm4gICA9IHsgLm1pbiA9IEc0WF9OX1NEVk9fTUlOLAkgICAgICAgIC5tYXggPSBHNFhfTl9TRFZPX01BWCB9LAorCS5tICAgPSB7IC5taW4gPSBHNFhfTV9TRFZPX01JTiwgICAgICAgICAubWF4ID0gRzRYX01fU0RWT19NQVggfSwKKwkubTEgID0geyAubWluID0gRzRYX00xX1NEVk9fTUlOLAkubWF4ID0gRzRYX00xX1NEVk9fTUFYIH0sCisJLm0yICA9IHsgLm1pbiA9IEc0WF9NMl9TRFZPX01JTiwJLm1heCA9IEc0WF9NMl9TRFZPX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBHNFhfUF9TRFZPX01JTiwgICAgICAgICAubWF4ID0gRzRYX1BfU0RWT19NQVggfSwKKwkucDEgID0geyAubWluID0gRzRYX1AxX1NEVk9fTUlOLAkubWF4ID0gRzRYX1AxX1NEVk9fTUFYfSwKKwkucDIgID0geyAuZG90X2xpbWl0ID0gRzRYX1AyX1NEVk9fTElNSVQsCisJCSAucDJfc2xvdyA9IEc0WF9QMl9TRFZPX1NMT1csCisJCSAucDJfZmFzdCA9IEc0WF9QMl9TRFZPX0ZBU1QKKwl9LAorCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorICAgIH0sCisgICAgeyAvKiBJTlRFTF9MSU1JVF9HNFhfSERNSV9EQUMgKi8KKwkuZG90ID0geyAubWluID0gRzRYX0RPVF9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfRE9UX0hETUlfREFDX01BWCB9LAorCS52Y28gPSB7IC5taW4gPSBHNFhfVkNPX01JTiwJICAgICAgICAubWF4ID0gRzRYX1ZDT19NQVh9LAorCS5uICAgPSB7IC5taW4gPSBHNFhfTl9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfTl9IRE1JX0RBQ19NQVggfSwKKwkubSAgID0geyAubWluID0gRzRYX01fSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX01fSERNSV9EQUNfTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IEc0WF9NMV9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfTTFfSERNSV9EQUNfTUFYIH0sCisJLm0yICA9IHsgLm1pbiA9IEc0WF9NMl9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfTTJfSERNSV9EQUNfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IEc0WF9QX0hETUlfREFDX01JTiwJLm1heCA9IEc0WF9QX0hETUlfREFDX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBHNFhfUDFfSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX1AxX0hETUlfREFDX01BWH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9IRE1JX0RBQ19MSU1JVCwKKwkJIC5wMl9zbG93ID0gRzRYX1AyX0hETUlfREFDX1NMT1csCisJCSAucDJfZmFzdCA9IEc0WF9QMl9IRE1JX0RBQ19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfRzRYX1NJTkdMRV9DSEFOTkVMX0xWRFMgKi8KKwkuZG90ID0geyAubWluID0gRzRYX0RPVF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfRE9UX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IEc0WF9WQ09fTUlOLAorCQkgLm1heCA9IEc0WF9WQ09fTUFYIH0sCisJLm4gICA9IHsgLm1pbiA9IEc0WF9OX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9OX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IEc0WF9NMV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubTIgID0geyAubWluID0gRzRYX00yX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBHNFhfUF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfUF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBHNFhfUDFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX1AxX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBHNFhfUDJfU0lOR0xFX0NIQU5ORUxfTFZEU19TTE9XLAorCQkgLnAyX2Zhc3QgPSBHNFhfUDJfU0lOR0xFX0NIQU5ORUxfTFZEU19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfRzRYX0RVQUxfQ0hBTk5FTF9MVkRTICovCisJLmRvdCA9IHsgLm1pbiA9IEc0WF9ET1RfRFVBTF9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9ET1RfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IEc0WF9WQ09fTUlOLAorCQkgLm1heCA9IEc0WF9WQ09fTUFYIH0sCisJLm4gICA9IHsgLm1pbiA9IEc0WF9OX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTl9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubSAgID0geyAubWluID0gRzRYX01fRFVBTF9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5tMSAgPSB7IC5taW4gPSBHNFhfTTFfRFVBTF9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9NMV9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubTIgID0geyAubWluID0gRzRYX00yX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTTJfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IEc0WF9QX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfUF9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkucDEgID0geyAubWluID0gRzRYX1AxX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfUDFfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19MSU1JVCwKKwkJIC5wMl9zbG93ID0gRzRYX1AyX0RVQUxfQ0hBTk5FTF9MVkRTX1NMT1csCisJCSAucDJfZmFzdCA9IEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfSUdEX1NEVk8gKi8KKyAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk5WFhfRE9UX01JTiwJCS5tYXggPSBJOVhYX0RPVF9NQVh9LAorICAgICAgICAudmNvID0geyAubWluID0gSUdEX1ZDT19NSU4sCQkubWF4ID0gSUdEX1ZDT19NQVggfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IElHRF9OX01JTiwJCS5tYXggPSBJR0RfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IElHRF9NX01JTiwJCS5tYXggPSBJR0RfTV9NQVggfSwKKyAgICAgICAgLm0xICA9IHsgLm1pbiA9IElHRF9NMV9NSU4sCQkubWF4ID0gSUdEX00xX01BWCB9LAorICAgICAgICAubTIgID0geyAubWluID0gSUdEX00yX01JTiwJCS5tYXggPSBJR0RfTTJfTUFYIH0sCisgICAgICAgIC5wICAgPSB7IC5taW4gPSBJOVhYX1BfU0RWT19EQUNfTUlOLCAgICAubWF4ID0gSTlYWF9QX1NEVk9fREFDX01BWCB9LAorICAgICAgICAucDEgID0geyAubWluID0gSTlYWF9QMV9NSU4sCQkubWF4ID0gSTlYWF9QMV9NQVggfSwKKwkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9TRFZPX0RBQ19GQVNUIH0sCisgICAgfSwKKyAgICB7IC8qIElOVEVMX0xJTUlUX0lHRF9MVkRTICovCisgICAgICAgIC5kb3QgPSB7IC5taW4gPSBJOVhYX0RPVF9NSU4sCQkubWF4ID0gSTlYWF9ET1RfTUFYIH0sCisgICAgICAgIC52Y28gPSB7IC5taW4gPSBJR0RfVkNPX01JTiwJCS5tYXggPSBJR0RfVkNPX01BWCB9LAorICAgICAgICAubiAgID0geyAubWluID0gSUdEX05fTUlOLAkJLm1heCA9IElHRF9OX01BWCB9LAorICAgICAgICAubSAgID0geyAubWluID0gSUdEX01fTUlOLAkJLm1heCA9IElHRF9NX01BWCB9LAorICAgICAgICAubTEgID0geyAubWluID0gSUdEX00xX01JTiwJCS5tYXggPSBJR0RfTTFfTUFYIH0sCisgICAgICAgIC5tMiAgPSB7IC5taW4gPSBJR0RfTTJfTUlOLAkJLm1heCA9IElHRF9NMl9NQVggfSwKKyAgICAgICAgLnAgICA9IHsgLm1pbiA9IElHRF9QX0xWRFNfTUlOLAkubWF4ID0gSUdEX1BfTFZEU19NQVggfSwKKyAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk5WFhfUDFfTUlOLAkJLm1heCA9IEk5WFhfUDFfTUFYIH0sCisJLyogSUdEIG9ubHkgc3VwcG9ydHMgc2luZ2xlLWNoYW5uZWwgbW9kZS4gKi8KKwkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9MVkRTX1NMT1dfTElNSVQsCisJCSAucDJfc2xvdyA9IEk5WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfTFZEU19TTE9XIH0sCisgICAgfSwKKwogfTsKIAorc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2c0eF9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OworCisJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKSB7CisJCWlmICgoSTkxNV9SRUFEKExWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CisJCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApCisJCQkvKiBMVkRTIHdpdGggZHVhbCBjaGFubmVsICovCisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHMKKwkJCQkJW0lOVEVMX0xJTUlUX0c0WF9EVUFMX0NIQU5ORUxfTFZEU107CisJCWVsc2UKKwkJCS8qIExWRFMgd2l0aCBkdWFsIGNoYW5uZWwgKi8KKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0cworCQkJCQlbSU5URUxfTElNSVRfRzRYX1NJTkdMRV9DSEFOTkVMX0xWRFNdOworCX0gZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfSERNSSkgfHwKKwkJICAgaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfQU5BTE9HKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNbSU5URUxfTElNSVRfRzRYX0hETUlfREFDXTsKKwl9IGVsc2UgaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX1NEVk8pKSB7CisJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9HNFhfU0RWT107CisJfSBlbHNlIC8qIFRoZSBvcHRpb24gaXMgZm9yIG90aGVyIG91dHB1dHMgKi8KKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUNdOworCisJcmV0dXJuIGxpbWl0OworfQorCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCAqaW50ZWxfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7CiAKLQlpZiAoSVNfSTlYWChkZXYpKSB7CisJaWYgKElTX0c0WChkZXYpKSB7CisJCWxpbWl0ID0gaW50ZWxfZzR4X2xpbWl0KGNydGMpOworCX0gZWxzZSBpZiAoSVNfSTlYWChkZXYpICYmICFJU19JR0QoZGV2KSkgewogCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpCiAJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNbSU5URUxfTElNSVRfSTlYWF9MVkRTXTsKIAkJZWxzZQogCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUNdOworCX0gZWxzZSBpZiAoSVNfSUdEKGRldikpIHsKKwkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0lHRF9MVkRTXTsKKwkJZWxzZQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0lHRF9TRFZPX0RBQ107CiAJfSBlbHNlIHsKIAkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQogCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k4WFhfTFZEU107CkBAIC0xODksOCArNDM3LDIxIEBACiAJcmV0dXJuIGxpbWl0OwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKKy8qIG0xIGlzIHJlc2VydmVkIGFzIDAgaW4gSUdELCBuIGlzIGEgcmluZyBjb3VudGVyICovCitzdGF0aWMgdm9pZCBpZ2RfY2xvY2soaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqY2xvY2spCiB7CisJY2xvY2stPm0gPSBjbG9jay0+bTIgKyAyOworCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOworCWNsb2NrLT52Y28gPSByZWZjbGsgKiBjbG9jay0+bSAvIGNsb2NrLT5uOworCWNsb2NrLT5kb3QgPSBjbG9jay0+dmNvIC8gY2xvY2stPnA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Nsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmNsb2NrKQoreworCWlmIChJU19JR0QoZGV2KSkgeworCQlpZ2RfY2xvY2socmVmY2xrLCBjbG9jayk7CisJCXJldHVybjsKKwl9CiAJY2xvY2stPm0gPSA1ICogKGNsb2NrLT5tMSArIDIpICsgKGNsb2NrLT5tMiArIDIpOwogCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOwogCWNsb2NrLT52Y28gPSByZWZjbGsgKiBjbG9jay0+bSAvIChjbG9jay0+biArIDIpOwpAQCAtMjI2LDYgKzQ4Nyw3IEBACiBzdGF0aWMgYm9vbCBpbnRlbF9QTExfaXNfdmFsaWQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnRlbF9jbG9ja190ICpjbG9jaykKIHsKIAljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCA9IGludGVsX2xpbWl0IChjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCiAJaWYgKGNsb2NrLT5wMSAgPCBsaW1pdC0+cDEubWluICB8fCBsaW1pdC0+cDEubWF4ICA8IGNsb2NrLT5wMSkKIAkJSU5URUxQbGxJbnZhbGlkICgicDEgb3V0IG9mIHJhbmdlXG4iKTsKQEAgLTIzNSw3ICs0OTcsNyBAQAogCQlJTlRFTFBsbEludmFsaWQgKCJtMiBvdXQgb2YgcmFuZ2VcbiIpOwogCWlmIChjbG9jay0+bTEgIDwgbGltaXQtPm0xLm1pbiAgfHwgbGltaXQtPm0xLm1heCAgPCBjbG9jay0+bTEpCiAJCUlOVEVMUGxsSW52YWxpZCAoIm0xIG91dCBvZiByYW5nZVxuIik7Ci0JaWYgKGNsb2NrLT5tMSA8PSBjbG9jay0+bTIpCisJaWYgKGNsb2NrLT5tMSA8PSBjbG9jay0+bTIgJiYgIUlTX0lHRChkZXYpKQogCQlJTlRFTFBsbEludmFsaWQgKCJtMSA8PSBtMlxuIik7CiAJaWYgKGNsb2NrLT5tICAgPCBsaW1pdC0+bS5taW4gICB8fCBsaW1pdC0+bS5tYXggICA8IGNsb2NrLT5tKQogCQlJTlRFTFBsbEludmFsaWQgKCJtIG91dCBvZiByYW5nZVxuIik7CkBAIC0yNTIsMTggKzUxNCwxNCBAQAogCXJldHVybiB0cnVlOwogfQogCi0vKioKLSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgotICogcmVmY2xrLCBvciBGQUxTRS4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBjbG9jayBlcXVhdGlvbjoKLSAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KLSAqLwotc3RhdGljIGJvb2wgaW50ZWxfZmluZF9iZXN0X1BMTChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0YXJnZXQsCi0JCQkJaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKK3N0YXRpYyBib29sCitpbnRlbF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQorCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludGVsX2Nsb2NrX3QgY2xvY2s7Ci0JY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQgPSBpbnRlbF9saW1pdChjcnRjKTsKIAlpbnQgZXJyID0gdGFyZ2V0OwogCiAJaWYgKElTX0k5WFgoZGV2KSAmJiBpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSAmJgpAQCAtMjg5LDE1ICs1NDcsMTcgQEAKIAltZW1zZXQgKGJlc3RfY2xvY2ssIDAsIHNpemVvZiAoKmJlc3RfY2xvY2spKTsKIAogCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OyBjbG9jay5tMSsrKSB7Ci0JCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOyBjbG9jay5tMiA8IGNsb2NrLm0xICYmCi0JCQkgICAgIGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJCS8qIG0xIGlzIGFsd2F5cyAwIGluIElHRCAqLworCQkJaWYgKGNsb2NrLm0yID49IGNsb2NrLm0xICYmICFJU19JR0QoZGV2KSkKKwkJCQlicmVhazsKIAkJCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBsaW1pdC0+bi5tYXg7CiAJCQkgICAgIGNsb2NrLm4rKykgewogCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWluOwogCQkJCSAgICAgY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgewogCQkJCQlpbnQgdGhpc19lcnI7CiAKLQkJCQkJaW50ZWxfY2xvY2socmVmY2xrLCAmY2xvY2spOworCQkJCQlpbnRlbF9jbG9jayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKIAogCQkJCQlpZiAoIWludGVsX1BMTF9pc192YWxpZChjcnRjLCAmY2xvY2spKQogCQkJCQkJY29udGludWU7CkBAIC0zMTUsNiArNTc1LDYzIEBACiAJcmV0dXJuIChlcnIgIT0gdGFyZ2V0KTsKIH0KIAorc3RhdGljIGJvb2wKK2ludGVsX2c0eF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQlpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnRlbF9jbG9ja190IGNsb2NrOworCWludCBtYXhfbjsKKwlib29sIGZvdW5kOworCS8qIGFwcHJveGltYXRlbHkgZXF1YWxzIHRhcmdldCAqIDAuMDA0ODggKi8KKwlpbnQgZXJyX21vc3QgPSAodGFyZ2V0ID4+IDgpICsgKHRhcmdldCA+PiAxMCk7CisJZm91bmQgPSBmYWxzZTsKKworCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoKEk5MTVfUkVBRChMVkRTKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQorCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKKwkJZWxzZQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfc2xvdzsKKwl9IGVsc2UgeworCQlpZiAodGFyZ2V0IDwgbGltaXQtPnAyLmRvdF9saW1pdCkKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7CisJCWVsc2UKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7CisJfQorCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCW1heF9uID0gbGltaXQtPm4ubWF4OworCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KKwlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247IGNsb2NrLm4rKykgeworCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yLCBwMSAqLworCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKKwkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7CisJCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1heDsKKwkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgeworCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OworCQkJCSAgICAgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgeworCQkJCQlpbnQgdGhpc19lcnI7CisKKwkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7CisJCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGNydGMsICZjbG9jaykpCisJCQkJCQljb250aW51ZTsKKwkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KSA7CisJCQkJCWlmICh0aGlzX2VyciA8IGVycl9tb3N0KSB7CisJCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQkJZXJyX21vc3QgPSB0aGlzX2VycjsKKwkJCQkJCW1heF9uID0gY2xvY2subjsKKwkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBmb3VuZDsKK30KKwogdm9pZAogaW50ZWxfd2FpdF9mb3JfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC02MzQsNyArOTUxLDcgQEAKIAkJcmV0dXJuIDQwMDAwMDsKIAllbHNlIGlmIChJU19JOTE1RyhkZXYpKQogCQlyZXR1cm4gMzMzMDAwOwotCWVsc2UgaWYgKElTX0k5NDVHTShkZXYpIHx8IElTXzg0NUcoZGV2KSkKKwllbHNlIGlmIChJU19JOTQ1R00oZGV2KSB8fCBJU184NDVHKGRldikgfHwgSVNfSUdER00oZGV2KSkKIAkJcmV0dXJuIDIwMDAwMDsKIAllbHNlIGlmIChJU19JOTE1R00oZGV2KSkgewogCQl1MTYgZ2NmZ2MgPSAwOwpAQCAtNzMzLDYgKzEwNTAsNyBAQAogCWJvb2wgaXNfY3J0ID0gZmFsc2UsIGlzX2x2ZHMgPSBmYWxzZSwgaXNfdHYgPSBmYWxzZTsKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7CiAJaW50IHJldDsKIAogCWRybV92YmxhbmtfcHJlX21vZGVzZXQoZGV2LCBwaXBlKTsKQEAgLTc3NiwxMyArMTA5NCwyMiBAQAogCQlyZWZjbGsgPSA0ODAwMDsKIAl9CiAKLQlvayA9IGludGVsX2ZpbmRfYmVzdF9QTEwoY3J0YywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ssIHJlZmNsaywgJmNsb2NrKTsKKwkvKgorCSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbgorCSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisJICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgorCSAqLworCWxpbWl0ID0gaW50ZWxfbGltaXQoY3J0Yyk7CisJb2sgPSBsaW1pdC0+ZmluZF9wbGwobGltaXQsIGNydGMsIGFkanVzdGVkX21vZGUtPmNsb2NrLCByZWZjbGssICZjbG9jayk7CiAJaWYgKCFvaykgewogCQlEUk1fRVJST1IoIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKKwlpZiAoSVNfSUdEKGRldikpCisJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CisJZWxzZQorCQlmcCA9IGNsb2NrLm4gPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CiAKIAlkcGxsID0gRFBMTF9WR0FfTU9ERV9ESVM7CiAJaWYgKElTX0k5WFgoZGV2KSkgewpAQCAtNzk5LDcgKzExMjYsMTAgQEAKIAkJfQogCiAJCS8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCi0JCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IDE2OworCQlpZiAoSVNfSUdEKGRldikpCisJCQlkcGxsIHw9ICgxIDw8IChjbG9jay5wMSAtIDEpKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUX0lHRDsKKwkJZWxzZQorCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKIAkJc3dpdGNoIChjbG9jay5wMikgewogCQljYXNlIDU6CiAJCQlkcGxsIHw9IERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfNTsKQEAgLTEyNzksMTAgKzE2MDksMjAgQEAKIAkJZnAgPSBJOTE1X1JFQUQoKHBpcGUgPT0gMCkgPyBGUEExIDogRlBCMSk7CiAKIAljbG9jay5tMSA9IChmcCAmIEZQX00xX0RJVl9NQVNLKSA+PiBGUF9NMV9ESVZfU0hJRlQ7Ci0JY2xvY2subTIgPSAoZnAgJiBGUF9NMl9ESVZfTUFTSykgPj4gRlBfTTJfRElWX1NISUZUOwotCWNsb2NrLm4gPSAoZnAgJiBGUF9OX0RJVl9NQVNLKSA+PiBGUF9OX0RJVl9TSElGVDsKKwlpZiAoSVNfSUdEKGRldikpIHsKKwkJY2xvY2subiA9IGZmcygoZnAgJiBGUF9OX0lHRF9ESVZfTUFTSykgPj4gRlBfTl9ESVZfU0hJRlQpIC0gMTsKKwkJY2xvY2subTIgPSAoZnAgJiBGUF9NMl9JR0RfRElWX01BU0spID4+IEZQX00yX0RJVl9TSElGVDsKKwl9IGVsc2UgeworCQljbG9jay5uID0gKGZwICYgRlBfTl9ESVZfTUFTSykgPj4gRlBfTl9ESVZfU0hJRlQ7CisJCWNsb2NrLm0yID0gKGZwICYgRlBfTTJfRElWX01BU0spID4+IEZQX00yX0RJVl9TSElGVDsKKwl9CisKIAlpZiAoSVNfSTlYWChkZXYpKSB7Ci0JCWNsb2NrLnAxID0gZmZzKChkcGxsICYgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLKSA+PgorCQlpZiAoSVNfSUdEKGRldikpCisJCQljbG9jay5wMSA9IGZmcygoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JR0QpID4+CisJCQkJRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVF9JR0QpOworCQllbHNlCisJCQljbG9jay5wMSA9IGZmcygoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSykgPj4KIAkJCSAgICAgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUKTsKIAogCQlzd2l0Y2ggKGRwbGwgJiBEUExMX01PREVfTUFTSykgewpAQCAtMTMwMSw3ICsxNjQxLDcgQEAKIAkJfQogCiAJCS8qIFhYWDogSGFuZGxlIHRoZSAxMDBNaHogcmVmY2xrICovCi0JCWludGVsX2Nsb2NrKDk2MDAwLCAmY2xvY2spOworCQlpbnRlbF9jbG9jayhkZXYsIDk2MDAwLCAmY2xvY2spOwogCX0gZWxzZSB7CiAJCWJvb2wgaXNfbHZkcyA9IChwaXBlID09IDEpICYmIChJOTE1X1JFQUQoTFZEUykgJiBMVkRTX1BPUlRfRU4pOwogCkBAIC0xMzEzLDkgKzE2NTMsOSBAQAogCQkJaWYgKChkcGxsICYgUExMX1JFRl9JTlBVVF9NQVNLKSA9PQogCQkJICAgIFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU4pIHsKIAkJCQkvKiBYWFg6IG1pZ2h0IG5vdCBiZSA2Nk1IeiAqLwotCQkJCWludGVsX2Nsb2NrKDY2MDAwLCAmY2xvY2spOworCQkJCWludGVsX2Nsb2NrKGRldiwgNjYwMDAsICZjbG9jayk7CiAJCQl9IGVsc2UKLQkJCQlpbnRlbF9jbG9jayg0ODAwMCwgJmNsb2NrKTsKKwkJCQlpbnRlbF9jbG9jayhkZXYsIDQ4MDAwLCAmY2xvY2spOwogCQl9IGVsc2UgewogCQkJaWYgKGRwbGwgJiBQTExfUDFfRElWSURFX0JZX1RXTykKIAkJCQljbG9jay5wMSA9IDI7CkBAIC0xMzI4LDcgKzE2NjgsNyBAQAogCQkJZWxzZQogCQkJCWNsb2NrLnAyID0gMjsKIAotCQkJaW50ZWxfY2xvY2soNDgwMDAsICZjbG9jayk7CisJCQlpbnRlbF9jbG9jayhkZXYsIDQ4MDAwLCAmY2xvY2spOwogCQl9CiAJfQogCkBAIC0xNDc0LDEzICsxODE0LDIxIEBACiAKIAlpZiAoSVNfSTlYWChkZXYpKSB7CiAJCWludCBmb3VuZDsKKwkJdTMyIHJlZzsKIAogCQlpZiAoSTkxNV9SRUFEKFNEVk9CKSAmIFNEVk9fREVURUNURUQpIHsKIAkJCWZvdW5kID0gaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0IpOwogCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0hETUkoZGV2KSkKIAkJCQlpbnRlbF9oZG1pX2luaXQoZGV2LCBTRFZPQik7CiAJCX0KLQkJaWYgKCFJU19HNFgoZGV2KSB8fCAoSTkxNV9SRUFEKFNEVk9CKSAmIFNEVk9fREVURUNURUQpKSB7CisKKwkJLyogQmVmb3JlIEc0WCBTRFZPQyBkb2Vzbid0IGhhdmUgaXRzIG93biBkZXRlY3QgcmVnaXN0ZXIgKi8KKwkJaWYgKElTX0c0WChkZXYpKQorCQkJcmVnID0gU0RWT0M7CisJCWVsc2UKKwkJCXJlZyA9IFNEVk9COworCisJCWlmIChJOTE1X1JFQUQocmVnKSAmIFNEVk9fREVURUNURUQpIHsKIAkJCWZvdW5kID0gaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0MpOwogCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0hETUkoZGV2KSkKIAkJCQlpbnRlbF9oZG1pX2luaXQoZGV2LCBTRFZPQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggMGQyMTFhZi4uNjYxOWYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCXBmaXRfY29udHJvbCA9IDA7CiAKIAlpZiAoIUlTX0k5NjVHKGRldikpIHsKLQkJaWYgKGRldl9wcml2LT5wYW5lbF93YW50c19kaXRoZXIpCisJCWlmIChkZXZfcHJpdi0+cGFuZWxfd2FudHNfZGl0aGVyIHx8IGRldl9wcml2LT5sdmRzX2RpdGhlcikKIAkJCXBmaXRfY29udHJvbCB8PSBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEU7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDU2NDg1ZDYuLmNlY2E5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMjE3LDggKzIxNyw4IEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX21fY3NjX2NvbXBvc2l0ZSA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMDQsCi0JLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19tX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0yMjYsOSArMjI2LDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX21fY3NjX3N2aWRlbyA9IHsKLQkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzQsCi0JLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MGYwMCwKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzMsCisJLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIG50c2NfbV9sZXZlbHNfc3ZpZGVvID0gewpAQCAtMjM3LDggKzIzNyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX2pfY3NjX2NvbXBvc2l0ZSA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMTksCi0JLnJ1ID0gMHgwNzRjLCAuZ3UgPSAweDA1NDYsIC5idSA9IDB4MDVlYywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM1YSwgLmd2ID0gMHgwMzIyLCAuYnYgPSAweDA2ZTEsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3NGMsIC5ndSA9IDB4MDU0NiwgLmJ1ID0gMHgwNWVjLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzVhLCAuZ3YgPSAweDAzMjIsIC5idiA9IDB4MDZlMSwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19qX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0yNDcsOCArMjQ3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIG50c2Nfal9jc2Nfc3ZpZGVvID0gewogCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0YywKLQkucnUgPSAweDA3ODgsIC5ndSA9IDB4MDU4MSwgLmJ1ID0gMHgwMzIyLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzk5LCAuZ3YgPSAweDAzNTYsIC5idiA9IDB4MDcwYSwgLmF2ID0gMHgwZjAwLAorCS5ydSA9IDB4MDc4OCwgLmd1ID0gMHgwNTgxLCAuYnUgPSAweDAzMjIsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzOTksIC5ndiA9IDB4MDM1NiwgLmJ2ID0gMHgwNzBhLCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBudHNjX2pfbGV2ZWxzX3N2aWRlbyA9IHsKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTEzLAotCS5ydSA9IDB4MDc0NSwgLmd1ID0gMHgwNTNmLCAuYnUgPSAweDA1ZTEsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNTMsIC5ndiA9IDB4MDMxYywgLmJ2ID0gMHgwNmRjLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzQ1LCAuZ3UgPSAweDA1M2YsIC5idSA9IDB4MDVlMSwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM1MywgLmd2ID0gMHgwMzFjLCAuYnYgPSAweDA2ZGMsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9sZXZlbHNfY29tcG9zaXRlID0gewpAQCAtMjY3LDggKzI2Nyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfY3NjX3N2aWRlbyA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxNDUsCi0JLnJ1ID0gMHgwNzgwLCAuZ3UgPSAweDA1NzksIC5idSA9IDB4MDMxYywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM5MCwgLmd2ID0gMHgwMzRmLCAuYnYgPSAweDA3MDUsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3ODAsIC5ndSA9IDB4MDU3OSwgLmJ1ID0gMHgwMzFjLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzkwLCAuZ3YgPSAweDAzNGYsIC5idiA9IDB4MDcwNSwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX2xldmVsc19zdmlkZW8gPSB7CkBAIC0yNzcsOCArMjc3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9tX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTA0LAotCS5ydSA9IDB4MDczMywgLmd1ID0gMHgwNTJkLCAuYnUgPSAweDA1YzcsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNDAsIC5ndiA9IDB4MDMwYywgLmJ2ID0gMHgwNmQwLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9tX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0yODYsOSArMjg2LDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfbV9jc2Nfc3ZpZGVvID0gewotCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEzNCwKLQkucnUgPSAweDA3NmEsIC5ndSA9IDB4MDU2NCwgLmJ1ID0gMHgwMzBkLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzdhLCAuZ3YgPSAweDAzM2QsIC5idiA9IDB4MDZmNiwgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEzMywKKwkucnUgPSAweDA3NmEsIC5ndSA9IDB4MDU2NCwgLmJ1ID0gMHgwMzBkLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzdhLCAuZ3YgPSAweDAzM2QsIC5idiA9IDB4MDZmNiwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX21fbGV2ZWxzX3N2aWRlbyA9IHsKQEAgLTI5Nyw4ICsyOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX25fY3NjX2NvbXBvc2l0ZSA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMDQsCi0JLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX25fbGV2ZWxzX2NvbXBvc2l0ZSA9IHsKQEAgLTMwNiw5ICszMDYsOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9uX2NzY19zdmlkZW8gPSB7Ci0JLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTM0LAotCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDBmMDAsCisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTMzLAorCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbl9sZXZlbHNfc3ZpZGVvID0gewpAQCAtMzE5LDkgKzMxOSw5IEBACiAgKiBDb21wb25lbnQgY29ubmVjdGlvbnMKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHNkdHZfY3NjX3lwcnBiID0gewotCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0NiwKLQkucnUgPSAweDA1NTksIC5ndSA9IDB4MDM1MywgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzYWQsIC5idiA9IDB4MDc0ZCwgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0NSwKKwkucnUgPSAweDA1NTksIC5ndSA9IDB4MDM1MywgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzYWQsIC5idiA9IDB4MDc0ZCwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHNkdHZfY3NjX3JnYiA9IHsKQEAgLTMzMSw5ICszMzEsOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIGhkdHZfY3NjX3lwcnBiID0gewotCS5yeSA9IDB4MDViMywgLmd5ID0gMHgwMTZlLCAuYnkgPSAweDA3MjgsIC5heSA9IDB4MDE0NiwKLQkucnUgPSAweDA3ZDUsIC5ndSA9IDB4MDM4YiwgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzZDEsIC5idiA9IDB4MDZiYywgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDViMywgLmd5ID0gMHgwMTZlLCAuYnkgPSAweDA3MjgsIC5heSA9IDB4MDE0NSwKKwkucnUgPSAweDA3ZDUsIC5ndSA9IDB4MDM4YiwgLmJ1ID0gMHgwMTAwLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMTAwLCAuZ3YgPSAweDAzZDEsIC5idiA9IDB4MDZiYywgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIGhkdHZfY3NjX3JnYiA9IHsKQEAgLTQxNCw3ICs0MTQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dl9tb2RlIHR2X21vZGVzW10gPSB7CiAJewogCQkubmFtZQkJPSAiTlRTQy1NIiwKLQkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLmNsb2NrCQk9IDEwODAwMCwKIAkJLnJlZnJlc2gJPSAyOTk3MCwKIAkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAogCQkuY29tcG9uZW50X29ubHkgPSAwLApAQCAtNDQyLDggKzQ0Miw4IEBACiAJCS52YnVyc3Rfc3RhcnRfZjQgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mNAk9IDI0MCwKIAogCQkvKiBkZXNpcmVkIDMuNTgwMDAwMCBhY3R1YWwgMy41ODAwMDAwIGNsb2NrIDEwNy41MiAqLwotCQkuZGRhMV9pbmMJPSAgICAxMzYsCi0JCS5kZGEyX2luYwk9ICAgNzYyNCwJICAgIC5kZGEyX3NpemUJCT0gIDIwMDEzLAorCQkuZGRhMV9pbmMJPSAgICAxMzUsCisJCS5kZGEyX2luYwk9ICAyMDgwMCwJICAgIC5kZGEyX3NpemUJCT0gIDI3NDU2LAogCQkuZGRhM19pbmMJPSAgICAgIDAsCSAgICAuZGRhM19zaXplCQk9ICAgICAgMCwKIAkJLnNjX3Jlc2V0CT0gVFZfU0NfUkVTRVRfRVZFUllfNCwKIAkJLnBhbF9idXJzdAk9IGZhbHNlLApAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJfSwKIAl7CiAJCS5uYW1lCQk9ICJOVFNDLTQ0MyIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjk5NzAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTQ4NSwxMCArNDg1LDEwIEBACiAKIAkJLyogZGVzaXJlZCA0LjQzMzYxODAgYWN0dWFsIDQuNDMzNjE4MCBjbG9jayAxMDcuNTIgKi8KIAkJLmRkYTFfaW5jICAgICAgID0gICAgMTY4LAotCQkuZGRhMl9pbmMgICAgICAgPSAgMTg1NTcsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyMDYyNSwKLQkJLmRkYTNfaW5jICAgICAgID0gICAgICAwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICAgIDAsCi0JCS5zY19yZXNldCAgID0gVFZfU0NfUkVTRVRfRVZFUllfOCwKLQkJLnBhbF9idXJzdCAgPSB0cnVlLAorCQkuZGRhMl9pbmMgICAgICAgPSAgIDQwOTMsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyNzQ1NiwKKwkJLmRkYTNfaW5jICAgICAgID0gICAgMzEwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICA1MjUsCisJCS5zY19yZXNldCAgID0gVFZfU0NfUkVTRVRfTkVWRVIsCisJCS5wYWxfYnVyc3QgID0gZmFsc2UsCiAKIAkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmbnRzY19tX2xldmVsc19jb21wb3NpdGUsCiAJCS5jb21wb3NpdGVfY29sb3IgPSAmbnRzY19tX2NzY19jb21wb3NpdGUsCkBAIC00OTksNyArNDk5LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gIk5UU0MtSiIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjk5NzAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTUyNyw4ICs1MjcsOCBAQAogCQkudmJ1cnN0X3N0YXJ0X2Y0ID0gMTAsCQkgICAgLnZidXJzdF9lbmRfZjQJPSAyNDAsCiAKIAkJLyogZGVzaXJlZCAzLjU4MDAwMDAgYWN0dWFsIDMuNTgwMDAwMCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jCT0gICAgMTM2LAotCQkuZGRhMl9pbmMJPSAgIDc2MjQsCSAgICAuZGRhMl9zaXplCQk9ICAyMDAxMywKKwkJLmRkYTFfaW5jCT0gICAgMTM1LAorCQkuZGRhMl9pbmMJPSAgMjA4MDAsCSAgICAuZGRhMl9zaXplCQk9ICAyNzQ1NiwKIAkJLmRkYTNfaW5jCT0gICAgICAwLAkgICAgLmRkYTNfc2l6ZQkJPSAgICAgIDAsCiAJCS5zY19yZXNldAk9IFRWX1NDX1JFU0VUX0VWRVJZXzQsCiAJCS5wYWxfYnVyc3QJPSBmYWxzZSwKQEAgLTU0Miw3ICs1NDIsNyBAQAogCX0sCiAJewogCQkubmFtZQkJPSAiUEFMLU0iLAotCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkuY2xvY2sJCT0gMTA4MDAwLAogCQkucmVmcmVzaAk9IDI5OTcwLAogCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCiAJCS5jb21wb25lbnRfb25seSA9IDAsCkBAIC01NzAsMTEgKzU3MCwxMSBAQAogCQkudmJ1cnN0X3N0YXJ0X2Y0ID0gMTAsCQkgICAgLnZidXJzdF9lbmRfZjQJPSAyNDAsCiAKIAkJLyogZGVzaXJlZCAzLjU4MDAwMDAgYWN0dWFsIDMuNTgwMDAwMCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jCT0gICAgMTM2LAotCQkuZGRhMl9pbmMJPSAgICA3NjI0LAkgICAgLmRkYTJfc2l6ZQkJPSAgMjAwMTMsCisJCS5kZGExX2luYwk9ICAgIDEzNSwKKwkJLmRkYTJfaW5jCT0gIDE2NzA0LAkgICAgLmRkYTJfc2l6ZQkJPSAgMjc0NTYsCiAJCS5kZGEzX2luYwk9ICAgICAgMCwJICAgIC5kZGEzX3NpemUJCT0gICAgICAwLAotCQkuc2NfcmVzZXQJPSBUVl9TQ19SRVNFVF9FVkVSWV80LAotCQkucGFsX2J1cnN0ICA9IGZhbHNlLAorCQkuc2NfcmVzZXQJPSBUVl9TQ19SRVNFVF9FVkVSWV84LAorCQkucGFsX2J1cnN0ICA9IHRydWUsCiAKIAkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmcGFsX21fbGV2ZWxzX2NvbXBvc2l0ZSwKIAkJLmNvbXBvc2l0ZV9jb2xvciA9ICZwYWxfbV9jc2NfY29tcG9zaXRlLApAQCAtNTg2LDcgKzU4Niw3IEBACiAJewogCQkvKiA2MjUgTGluZXMsIDUwIEZpZWxkcywgMTUuNjI1S0h6IGxpbmUsIFN1Yi1DYXJyaWVyIDQuNDM0TUh6ICovCiAJCS5uYW1lCSAgICA9ICJQQUwtTiIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjUwMDAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTYxNSw5ICs2MTUsOSBAQAogCiAKIAkJLyogZGVzaXJlZCA0LjQzMzYxODAgYWN0dWFsIDQuNDMzNjE4MCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jICAgICAgID0gICAgMTY4LAotCQkuZGRhMl9pbmMgICAgICAgPSAgMTg1NTcsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyMDYyNSwKLQkJLmRkYTNfaW5jICAgICAgID0gICAgICAwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICAgIDAsCisJCS5kZGExX2luYyAgICAgICA9ICAgIDEzNSwKKwkJLmRkYTJfaW5jICAgICAgID0gIDIzNTc4LCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjc2NDgsCisJCS5kZGEzX2luYyAgICAgICA9ICAgIDEzNCwgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgNjI1LAogCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX0VWRVJZXzgsCiAJCS5wYWxfYnVyc3QgID0gdHJ1ZSwKIApAQCAtNjMxLDEyICs2MzEsMTIgQEAKIAl7CiAJCS8qIDYyNSBMaW5lcywgNTAgRmllbGRzLCAxNS42MjVLSHogbGluZSwgU3ViLUNhcnJpZXIgNC40MzRNSHogKi8KIAkJLm5hbWUJICAgID0gIlBBTCIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjUwMDAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKIAotCQkuaHN5bmNfZW5kCT0gNjQsCQkgICAgLmhibGFua19lbmQJCT0gMTI4LAorCQkuaHN5bmNfZW5kCT0gNjQsCQkgICAgLmhibGFua19lbmQJCT0gMTQyLAogCQkuaGJsYW5rX3N0YXJ0CT0gODQ0LAkgICAgLmh0b3RhbAkJPSA4NjMsCiAKIAkJLnByb2dyZXNzaXZlCT0gZmFsc2UsICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCkBAIC02NTksOCArNjU5LDggQEAKIAogCQkvKiBkZXNpcmVkIDQuNDMzNjE4MCBhY3R1YWwgNC40MzM2MTgwIGNsb2NrIDEwNy41MiAqLwogCQkuZGRhMV9pbmMgICAgICAgPSAgICAxNjgsCi0JCS5kZGEyX2luYyAgICAgICA9ICAxODU1NywgICAgICAgLmRkYTJfc2l6ZSAgICAgID0gIDIwNjI1LAotCQkuZGRhM19pbmMgICAgICAgPSAgICAgIDAsICAgICAgIC5kZGEzX3NpemUgICAgICA9ICAgICAgMCwKKwkJLmRkYTJfaW5jICAgICAgID0gICA0MTIyLCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjc2NDgsCisJCS5kZGEzX2luYyAgICAgICA9ICAgICA2NywgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgNjI1LAogCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX0VWRVJZXzgsCiAJCS5wYWxfYnVyc3QgID0gdHJ1ZSwKIApAQCAtNjg5LDcgKzY4OSw3IEBACiAJCS52ZXFfZW5hICAgICAgICA9IGZhbHNlLAogCiAJCS52aV9lbmRfZjEgICAgICA9IDQ0LCAgICAgICAgICAgICAgIC52aV9lbmRfZjIgICAgICAgICAgPSA0NCwKLQkJLm5icl9lbmQgICAgICAgID0gNDk2LAorCQkubmJyX2VuZCAgICAgICAgPSA0NzksCiAKIAkJLmJ1cnN0X2VuYSAgICAgID0gZmFsc2UsCiAKQEAgLTcxMyw3ICs3MTMsNyBAQAogCQkudmVxX2VuYSAgICAgICAgPSBmYWxzZSwKIAogCQkudmlfZW5kX2YxICAgICAgPSA0NCwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gNDQsCi0JCS5uYnJfZW5kICAgICAgICA9IDQ5NiwKKwkJLm5icl9lbmQgICAgICAgID0gNDc5LAogCiAJCS5idXJzdF9lbmEgICAgICA9IGZhbHNlLAogCkBAIC04NzYsNyArODc2LDcgQEAKIAkJLmNvbXBvbmVudF9vbmx5ID0gMSwKIAogCQkuaHN5bmNfZW5kICAgICAgPSA4OCwgICAgICAgICAgICAgICAuaGJsYW5rX2VuZCAgICAgICAgID0gMjM1LAotCQkuaGJsYW5rX3N0YXJ0ICAgPSAyMTU1LCAgICAgICAgICAgICAuaHRvdGFsICAgICAgICAgICAgID0gMjIwMCwKKwkJLmhibGFua19zdGFydCAgID0gMjE1NSwgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDIyMDEsCiAKIAkJLnByb2dyZXNzaXZlICAgID0gZmFsc2UsIAkgICAgLnRyaWxldmVsX3N5bmMgPSB0cnVlLAogCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kKGludGVsX291dHB1dCk7CiAKIAkvKiBFbnN1cmUgVFYgcmVmcmVzaCBpcyBjbG9zZSB0byBkZXNpcmVkIHJlZnJlc2ggKi8KLQlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpKSA8IDEpCisJaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKIAkJcmV0dXJuIE1PREVfT0s7CiAJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7CiB9CkBAIC0xMTM1LDcgKzExMzUsOCBAQAogCWlmICghdHZfbW9kZSkKIAkJcmV0dXJuOwkvKiBjYW4ndCBoYXBwZW4gKG1vZGVfcHJlcGFyZSBwcmV2ZW50cyB0aGlzKSAqLwogCi0JdHZfY3RsID0gMDsKKwl0dl9jdGwgPSBJOTE1X1JFQUQoVFZfQ1RMKTsKKwl0dl9jdGwgJj0gVFZfQ1RMX1NBVkU7CiAKIAlzd2l0Y2ggKHR2X3ByaXYtPnR5cGUpIHsKIAlkZWZhdWx0OgpAQCAtMTIxNSw3ICsxMjE2LDYgQEAKIAkvKiBkZGExIGltcGxpZXMgdmFsaWQgdmlkZW8gbGV2ZWxzICovCiAJaWYgKHR2X21vZGUtPmRkYTFfaW5jKSB7CiAJCXNjY3RsMSB8PSBUVl9TQ19EREExX0VOOwotCQlzY2N0bDEgfD0gdmlkZW9fbGV2ZWxzLT5idXJzdCA8PCBUVl9CVVJTVF9MRVZFTF9TSElGVDsKIAl9CiAKIAlpZiAodHZfbW9kZS0+ZGRhMl9pbmMpCkBAIC0xMjI1LDYgKzEyMjUsNyBAQAogCQlzY2N0bDEgfD0gVFZfU0NfRERBM19FTjsKIAogCXNjY3RsMSB8PSB0dl9tb2RlLT5zY19yZXNldDsKKwlzY2N0bDEgfD0gdmlkZW9fbGV2ZWxzLT5idXJzdCA8PCBUVl9CVVJTVF9MRVZFTF9TSElGVDsKIAlzY2N0bDEgfD0gdHZfbW9kZS0+ZGRhMV9pbmMgPDwgVFZfU0NEREExX0lOQ19TSElGVDsKIAogCXNjY3RsMiA9IHR2X21vZGUtPmRkYTJfc2l6ZSA8PCBUVl9TQ0REQTJfU0laRV9TSElGVCB8CkBAIC0xMjY2LDcgKzEyNjcsMTEgQEAKIAkJCSAgIGNvbG9yX2NvbnZlcnNpb24tPmF2KTsKIAl9CiAKLQlJOTE1X1dSSVRFKFRWX0NMUl9LTk9CUywgMHgwMDYwNjAwMCk7CisJaWYgKElTX0k5NjVHKGRldikpCisJCUk5MTVfV1JJVEUoVFZfQ0xSX0tOT0JTLCAweDAwNDA0MDAwKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoVFZfQ0xSX0tOT0JTLCAweDAwNjA2MDAwKTsKKwogCWlmICh2aWRlb19sZXZlbHMpCiAJCUk5MTVfV1JJVEUoVFZfQ0xSX0xFVkVMLAogCQkJICAgKCh2aWRlb19sZXZlbHMtPmJsYWNrIDw8IFRWX0JMQUNLX0xFVkVMX1NISUZUKSB8CkBAIC0xNDAxLDYgKzE0MDYsNyBAQAogCQl0dl9kYWMgPSBJOTE1X1JFQUQoVFZfREFDKTsKIAkJSTkxNV9XUklURShUVl9EQUMsIHNhdmVfdHZfZGFjKTsKIAkJSTkxNV9XUklURShUVl9DVEwsIHNhdmVfdHZfY3RsKTsKKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CiAJfQogCS8qCiAJICogIEEgQiBDCkBAIC0xNDUxLDcgKzE0NTcsNyBAQAogCW1vZGUgPSByZXBvcnRlZF9tb2Rlc1swXTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJm1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCi0JaWYgKGVuY29kZXItPmNydGMpIHsKKwlpZiAoZW5jb2Rlci0+Y3J0YyAmJiBlbmNvZGVyLT5jcnRjLT5lbmFibGVkKSB7CiAJCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShlbmNvZGVyLT5jcnRjLCBpbnRlbF9vdXRwdXQpOwogCX0gZWxzZSB7CiAJCWNydGMgPSBpbnRlbF9nZXRfbG9hZF9kZXRlY3RfcGlwZShpbnRlbF9vdXRwdXQsICZtb2RlLCAmZHBtc19tb2RlKTsKQEAgLTE0NjIsNiArMTQ2OCw4IEBACiAJCQl0eXBlID0gLTE7CiAJfQogCisJdHZfcHJpdi0+dHlwZSA9IHR5cGU7CisKIAlpZiAodHlwZSA8IDApCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIApAQCAtMTQ5NSw3ICsxNTAzLDggQEAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZV9wdHI7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CiAJY29uc3Qgc3RydWN0IHR2X21vZGUgKnR2X21vZGUgPSBpbnRlbF90dl9tb2RlX2ZpbmQoaW50ZWxfb3V0cHV0KTsKLQlpbnQgajsKKwlpbnQgaiwgY291bnQgPSAwOworCXU2NCB0bXA7CiAKIAlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKGlucHV0X3Jlc190YWJsZSkgLyBzaXplb2YoaW5wdXRfcmVzX3RhYmxlWzBdKTsKIAkgICAgIGorKykgewpAQCAtMTUxMCw4ICsxNTE5LDkgQEAKIAkJCQkJJiYgIXR2X21vZGUtPmNvbXBvbmVudF9vbmx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCW1vZGVfcHRyID0gZHJtX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpLAotCQkJCSAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJbW9kZV9wdHIgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOworCQlpZiAoIW1vZGVfcHRyKQorCQkJY29udGludWU7CiAJCXN0cm5jcHkobW9kZV9wdHItPm5hbWUsIGlucHV0LT5uYW1lLCBEUk1fRElTUExBWV9NT0RFX0xFTik7CiAKIAkJbW9kZV9wdHItPmhkaXNwbGF5ID0gaGFjdGl2ZV9zOwpAQCAtMTUyOCwxNSArMTUzOCwxNyBAQAogCQkJbW9kZV9wdHItPnZzeW5jX2VuZCA9IG1vZGVfcHRyLT52c3luY19zdGFydCAgKyAxOwogCQltb2RlX3B0ci0+dnRvdGFsID0gdmFjdGl2ZV9zICsgMzM7CiAKLQkJbW9kZV9wdHItPmNsb2NrID0gKGludCkgKHR2X21vZGUtPnJlZnJlc2ggKgotCQkJCQkgbW9kZV9wdHItPnZ0b3RhbCAqCi0JCQkJCSBtb2RlX3B0ci0+aHRvdGFsIC8gMTAwMCkgLyAxMDAwOworCQl0bXAgPSAodTY0KSB0dl9tb2RlLT5yZWZyZXNoICogbW9kZV9wdHItPnZ0b3RhbDsKKwkJdG1wICo9IG1vZGVfcHRyLT5odG90YWw7CisJCXRtcCA9IGRpdl91NjQodG1wLCAxMDAwMDAwKTsKKwkJbW9kZV9wdHItPmNsb2NrID0gKGludCkgdG1wOwogCiAJCW1vZGVfcHRyLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVI7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlX3B0cik7CisJCWNvdW50Kys7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDQ5NDBlNGQuLmFhMjE0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTIyNywxMiArMjI3LDkgQEAKICAqLwogc3RhdGljIGludCBoaWRkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwogfQogCiAKQEAgLTMwNiw3ICszMDMsNyBAQAogCXJldHVybiAwOwogYmFpbDoKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGxpc3QtPmhpZGRldik7CisJa2ZyZWUobGlzdCk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMzIzLDcgKzMyMCw3IEBACiAgKi8KIHN0YXRpYyBzc2l6ZV90IGhpZGRldl9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgZXZlbnRfc2l6ZTsKIAlpbnQgcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGI4NGJmMDYuLmI0ZWVhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTU0Myw4ICs1NDMsOCBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTAsCiAJICBMTTg2LCBMTTg5IGFuZCBMTTk5LCBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyIGFuZCBBRFQ3NDYxLCBhbmQgTWF4aW0KLQkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksIE1BWDY2ODAgYW5kCi0JICBNQVg2NjgxIHNlbnNvciBjaGlwcy4KKwkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksCisJICBNQVg2NjgwLCBNQVg2NjgxIGFuZCBNQVg2NjkyIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05MC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1My5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKaW5kZXggZTUyYjM4OC4uYWQyYjM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKKysrIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKQEAgLTc2MCw4ICs3NjAsMTEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBvZmZzZXRfY291bnQ7IGkrKykKIAkJaWYgKCh4ID0gYWJpdHVndXJ1M19yZWFkKGRhdGEsIGJhbmssIG9mZnNldCArIGksIGNvdW50LAotCQkJCWJ1ZiArIGkgKiBjb3VudCkpICE9IGNvdW50KQotCQkJcmV0dXJuIGkgKiBjb3VudCArIChpICYmICh4IDwgMCkpID8gMCA6IHg7CisJCQkJYnVmICsgaSAqIGNvdW50KSkgIT0gY291bnQpIHsKKwkJCWlmICh4IDwgMCkKKwkJCQlyZXR1cm4geDsKKwkJCXJldHVybiBpICogY291bnQgKyB4OworCQl9CiAKIAlyZXR1cm4gaSAqIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzUzNzVzLmMgYi9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYwppbmRleCAxNjkyZGUzLi4xOGExYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYwpAQCAtNjE3LDcgKzYxNyw3IEBACiBzdGF0aWMgaW50IGY3NTM3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IGY3NTM3NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGY3NTM3NV9kYXRhICpkYXRhOwogCXN0cnVjdCBmNzUzNzVzX3BsYXRmb3JtX2RhdGEgKmY3NTM3NXNfcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jIGIvZHJpdmVycy9od21vbi9pdDg3LmMKaW5kZXggOTVhOTljNS4uOTE1NzI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pdDg3LmMKKysrIGIvZHJpdmVycy9od21vbi9pdDg3LmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAjZGVmaW5lIFRFTVBfVE9fUkVHKHZhbCkgKFNFTlNPUlNfTElNSVQoKCh2YWwpPDA/KCgodmFsKS01MDApLzEwMDApOlwKIAkJCQkJKCh2YWwpKzUwMCkvMTAwMCksLTEyOCwxMjcpKQotI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkgKCgodmFsKT4weDgwPyh2YWwpLTB4MTAwOih2YWwpKSoxMDAwKQorI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkgKCh2YWwpICogMTAwMCkKIAogI2RlZmluZSBQV01fVE9fUkVHKHZhbCkgICAoKHZhbCkgPj4gMSkKICNkZWZpbmUgUFdNX0ZST01fUkVHKHZhbCkgKCgodmFsKSYweDdmKSA8PCAxKQpAQCAtMjY3LDkgKzI2Nyw5IEBACiAJdTggaGFzX2ZhbjsJCS8qIEJpdGZpZWxkLCBmYW5zIGVuYWJsZWQgKi8KIAl1MTYgZmFuWzVdOwkJLyogUmVnaXN0ZXIgdmFsdWVzLCBwb3NzaWJseSBjb21iaW5lZCAqLwogCXUxNiBmYW5fbWluWzVdOwkJLyogUmVnaXN0ZXIgdmFsdWVzLCBwb3NzaWJseSBjb21iaW5lZCAqLwotCXU4IHRlbXBbM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IHRlbXBfaGlnaFszXTsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCB0ZW1wX2xvd1szXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCisJczggdGVtcFszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCisJczggdGVtcF9oaWdoWzNdOwkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXM4IHRlbXBfbG93WzNdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBzZW5zb3I7CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwogCXU4IGZhbl9kaXZbM107CQkvKiBSZWdpc3RlciBlbmNvZGluZywgc2hpZnRlZCByaWdodCAqLwogCXU4IHZpZDsJCQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG05MC5jIGIvZHJpdmVycy9od21vbi9sbTkwLmMKaW5kZXggOTZhNzAxOC4uMWFmZjc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkwLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkwLmMKQEAgLTMyLDEwICszMiwxMCBAQAogICogc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBUaGVzZSBjaGlwcyBsYWNrIHRoZSByZW1vdGUgdGVtcGVyYXR1cmUKICAqIG9mZnNldCBmZWF0dXJlLgogICoKLSAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2NDYsIE1BWDY2NDcgYW5kIE1BWDY2NDkgY2hpcHMKLSAqIG1hZGUgYnkgTWF4aW0uICBUaGVzZSBhcmUgYWdhaW4gc2ltaWxhciB0byB0aGUgTE04NiwgYnV0IHRoZXkgdXNlCi0gKiB1bnNpZ25lZCB0ZW1wZXJhdHVyZSB2YWx1ZXMgYW5kIGNhbiByZXBvcnQgdGVtcGVyYXR1cmVzIGZyb20gMCB0bwotICogMTQ1IGRlZ3JlZXMuCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBNQVg2NjQ2LCBNQVg2NjQ3LCBNQVg2NjQ4LCBNQVg2NjQ5IGFuZAorICogTUFYNjY5MiBjaGlwcyBtYWRlIGJ5IE1heGltLiAgVGhlc2UgYXJlIGFnYWluIHNpbWlsYXIgdG8gdGhlIExNODYsCisgKiBidXQgdGhleSB1c2UgdW5zaWduZWQgdGVtcGVyYXR1cmUgdmFsdWVzIGFuZCBjYW4gcmVwb3J0IHRlbXBlcmF0dXJlcworICogZnJvbSAwIHRvIDE0NSBkZWdyZWVzLgogICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEsIHR3byBvdGhlciBzZW5zb3IKICAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGFyZSBxdWl0ZSBzaW1pbGFyIHRvIHRoZSBvdGhlciBNYXhpbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggZTdkOTg0OC4uZmJiOTAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC04NDEsNyArODQxLDcgQEAKIAogCWlmIChjbGllbnQtPmRyaXZlciAmJiAhaXNfbmV3c3R5bGVfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKSkgewogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9yZWxlYXNlOwotCQljbGllbnQtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmY2xpZW50LT5kZXYsIDEpOwogCX0gZWxzZQogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9kZXZfcmVsZWFzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggNWVhM2JmYS4uNjQwYzk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC01Niw4ICs1NiwxMiBAQAogCiBjb21tZW50ICJQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzIgogCitjb25maWcgSURFX1hGRVJfTU9ERQorCWJvb2wKKwogY29uZmlnIElERV9USU1JTkdTCiAJYm9vbAorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAKIGNvbmZpZyBJREVfQVRBUEkKIAlib29sCkBAIC02OTgsNiArNzAyLDcgQEAKIGNvbmZpZyBCTEtfREVWX0lERV9BVTFYWFgKICAgICAgICBib29sICJJREUgZm9yIEFNRCBBbGNoZW15IEF1MTIwMCIKICAgICAgICBkZXBlbmRzIG9uIFNPQ19BVTEyMDAKKyAgICAgICBzZWxlY3QgSURFX1hGRVJfTU9ERQogY2hvaWNlCiAgICAgICAgcHJvbXB0ICJJREUgTW9kZSBmb3IgQU1EIEFsY2hlbXkgQXUxMjAwIgogICAgICAgIGRlZmF1bHQgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUEKQEAgLTg3MSw2ICs4NzYsNyBAQAogCiBjb25maWcgQkxLX0RFVl9EVEMyMjc4CiAJdHJpc3RhdGUgIkRUQy0yMjc4IHN1cHBvcnQiCisJc2VsZWN0IElERV9YRkVSX01PREUKIAlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImR0YzIyNzgucHJvYmUiIGtlcm5lbApAQCAtOTAyLDYgKzkwOCw3IEBACiAKIGNvbmZpZyBCTEtfREVWX1VNQzg2NzIKIAl0cmlzdGF0ZSAiVU1DLTg2NzIgc3VwcG9ydCIKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAidW1jODY3Mi5wcm9iZSIga2VybmVsCkBAIC05MTUsNSArOTIyLDYgQEAKIGNvbmZpZyBCTEtfREVWX0lERURNQQogCWRlZl9ib29sIEJMS19ERVZfSURFRE1BX1NGRiB8fCBcCiAJCSBCTEtfREVWX0lERURNQV9JQ1MgfHwgQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCisJc2VsZWN0IElERV9YRkVSX01PREUKIAogZW5kaWYgIyBJREUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggMWMzMjZkOS4uOWI0YmJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTUsOSArNSwxMSBAQAogRVhUUkFfQ0ZMQUdTCQkJCSs9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAotCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXBpby1ibGFja2xpc3QubyBpZGUtc3lzZnMubworCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXN5c2ZzLm8gaWRlLWRldnNldHMubyBcCisJICAgICAgaWRlLWlvLXN0ZC5vIGlkZS1laC5vCiAKICMgY29yZSBJREUgY29kZQoraWRlLWNvcmUtJChDT05GSUdfSURFX1hGRVJfTU9ERSkJKz0gaWRlLXBpby1ibGFja2xpc3QubyBpZGUteGZlci1tb2RlLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9USU1JTkdTKQkJKz0gaWRlLXRpbWluZ3MubwogaWRlLWNvcmUtJChDT05GSUdfSURFX0FUQVBJKQkJKz0gaWRlLWF0YXBpLm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFUENJKQkrPSBzZXR1cC1wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCmluZGV4IDQ0ODViOWMuLjg3OGY4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWRyaXZlLT5od2lmLT5wb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBwaW8gKyBYRkVSX1BJT18wKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCS8qIFRoZXNlIGFyZSBuZWNlc3NhcnkgdG8gZ2V0IEFFQzYyODAgTWFjaW50b3NoIGNhcmRzIHRvIHdvcmsgKi8KIAlpZiAoKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1KSB8fApAQCAtMTU2LDcgKzE1Niw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGEsIHJlZzRhaCB8IDB4ODApOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0cDg2eF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCmluZGV4IDY2ZjQzMDguLmQzNTEzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKKysrIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKglhcHByb3ByaWF0ZSBhbHNvIHNldHMgdXAgdGhlIDE1MzMgc291dGhicmlkZ2UuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYWxpMTV4MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYWxpMTV4MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggdG1wYnl0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYyBiL2RyaXZlcnMvaWRlL2FtZDc0eHguYwppbmRleCA3NzI2N2M4Li42MjhjZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKICAqIFRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjay4gIEluaXRpYWxpemUgZHJpdmUgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2FtZDc0eHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2FtZDc0eHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCB0ID0gMCwgb2Zmc2V0ID0gYW1kX29mZnNldChkZXYpOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJdCB8PSAweGYwOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIEFNRF9JREVfQ09ORklHICsgb2Zmc2V0LCB0KTsKIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGFtZF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTE4MywxNCArMTgzLDYgQEAKIAkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2FtZDc0eHgoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCi0JaWYgKGh3aWYtPmlycSA9PSAwKSAvKiAwIGlzIGJvZ3VzIGJ1dCB3aWxsIGRvIGZvciBub3cgKi8KLQkJaHdpZi0+aXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIGh3aWYtPmNoYW5uZWwpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBhbWRfcG9ydF9vcHMgPSB7CiAJLnNldF9waW9fbW9kZQkJPSBhbWRfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gYW1kX3NldF9kcml2ZSwKQEAgLTIwNyw3ICsxOTksNiBAQAogCXsJCQkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQkJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hbWQ3NHh4LAkJCVwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbWQ3NHh4LAkJCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDAsMHgwMiwweDAyfSwgezB4NDAsMHgwMSwweDAxfX0sCVwKIAkJLnBvcnRfb3BzCT0gJmFtZF9wb3J0X29wcywJCQlcCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19BTUQsCQkJXApAQCAtMjIxLDcgKzIxMiw2IEBACiAJewkJCQkJCQkJXAogCQkubmFtZQkJPSBEUlZfTkFNRSwJCQkJXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FtZDc0eHgsCQkJXAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FtZDc0eHgsCQkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDAyLDB4MDJ9LCB7MHg1MCwweDAxLDB4MDF9fSwJXAogCQkucG9ydF9vcHMJPSAmYW1kX3BvcnRfb3BzLAkJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0FNRCwJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IGVjZDFlNjIuLjkyM2NiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC0xNDIsNyArMTQyLDYgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ4LDB4MDEsMHgwMH0sIHsweDQ4LDB4MDgsMHgwMH19LAogCQkucG9ydF9vcHMJPSAmYXRpaXhwX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTE1MSw3ICsxNTAsNyBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4MDAsMHgwMCwweDAwfX0sCiAJCS5wb3J0X29wcwk9ICZhdGlpeHBfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSB8IElERV9IRkxBR19MRUdBQ1lfSVJRUywKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCmluZGV4IDc5YTJkZmUuLjE1NGVjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKQEAgLTUzNiw5ICs1MzYsOCBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IGF1X2lkZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1X2lkZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKQEAgLTU1MiwyMyArNTUxLDIzIEBACiAjZW5kaWYKIAogCW1lbXNldCgmYXVpZGVfaHdpZiwgMCwgc2l6ZW9mKF9hdWlkZV9od2lmKSk7Ci0JYWh3aWYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJYWh3aWYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCIlcyAlZDogbm8gYmFzZSBhZGRyZXNzXG4iLCBEUlZfTkFNRSwgcGRldi0+aWQpOworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIGJhc2UgYWRkcmVzc1xuIiwgRFJWX05BTUUsIGRldi0+aWQpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKGFod2lmLT5pcnEgPCAwKSB7Ci0JCXByX2RlYnVnKCIlcyAlZDogbm8gSVJRXG4iLCBEUlZfTkFNRSwgcGRldi0+aWQpOworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIElSUVxuIiwgRFJWX05BTUUsIGRldi0+aWQpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJCXBkZXYtPm5hbWUpKSB7CisJCQkJZGV2LT5uYW1lKSkgewogCQlwcl9kZWJ1ZygiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIERSVl9OQU1FKTsKIAkJcmV0ID0gIC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC01ODMsNyArNTgyLDcgQEAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlhdWlkZV9zZXR1cF9wb3J0cygmaHcsIGFod2lmKTsKIAlody5pcnEgPSBhaHdpZi0+aXJxOwotCWh3LmRldiA9IGRldjsKKwlody5kZXYgPSAmZGV2LT5kZXY7CiAJaHcuY2hpcHNldCA9IGlkZV9hdTF4eHg7CiAKIAlyZXQgPSBpZGVfaG9zdF9hZGQoJmF1MXh4eF9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwpAQCAtNTkyLDcgKzU5MSw3IEBACiAKIAlhdWlkZV9od2lmLmh3aWYgPSBob3N0LT5wb3J0c1swXTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJBdTF4eHggSURFKGJ1aWx0aW4pIGNvbmZpZ3VyZWQgZm9yICVzXG4iLCBtb2RlICk7CiAKQEAgLTYwMCwzOCArNTk5LDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdV9pZGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXVfaWRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAKIAlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CiAKIAlpb3VubWFwKCh2b2lkICopYWh3aWYtPnJlZ2Jhc2UpOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTEyMDBfaWRlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTEyMDBfaWRlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZSAJCT0gYXVfaWRlX3Byb2JlLAogCS5yZW1vdmUJCT0gYXVfaWRlX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF1X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1X2lkZV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IDJmOTY4OGQuLmFlZWUwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlyZXR1cm4gKGRtYV9zdGF0ICYgNykgIT0gNDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfY21kNjR4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCBtcmRtb2RlID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9jczU1MjAuYwppbmRleCBkMDAzYmVjLi41OGZiOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MjAuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MjAuYwpAQCAtMTMzLDcgKzEzMyw4IEBACiAJICoJZG8gYWxsIHRoZSBkZXZpY2Ugc2V0dXAgZm9yIHVzCiAJICovCiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMTQsICZod1swXSwgJmh3c1swXSk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsICZod1swXSwgJmh3c1swXSk7CisJaHdbMF0uaXJxID0gMTQ7CiAKIAlyZXR1cm4gaWRlX2hvc3RfYWRkKGQsIGh3cywgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCmluZGV4IGQ4ZWRlODUuLjhlOGIzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKICAqCUluaXRpYWxpemUgdGhlIGNzNTUzMCBicmlkZ2UgZm9yIHJlbGlhYmxlIElERSBETUEgb3BlcmF0aW9uLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2NzNTUzMChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfY3M1NTMwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKm1hc3Rlcl8wID0gTlVMTCwgKmNzNTUzMF8wID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwppbmRleCA4ZjFiMmQ5Li5iYWNiMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYworKysgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwpAQCAtNDYsNyArNDYsNyBAQAogCS5xdWlya3Byb2MJCT0gaWRlX3VuZGVjb2RlZF9zbGF2ZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsa2luX2NiX2luaXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IDNlYjliNWMuLmQzYjNlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC05OTUsNyArOTk1LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgbWNyX2FkZHIgKyAxLCBuZXdfbWNyKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaHB0MzY2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2UJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oJmRldi0+ZGV2KTsKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAJaHB0M3h4X2Rpc2FibGVfZmFzdF9pcnEoZGV2LCAweDUwKTsKIAlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTQpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggaHB0M3h4X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggZWM3ZDA3Zi4uNWI3MDRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC0yMCw5ICsyMCw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogCiAjZGVmaW5lIFJFR1NfUEVSX0dURgkJNwotc3RydWN0IHRhc2tmaWxlX2FycmF5IHsKLQl1OAl0ZmFbUkVHU19QRVJfR1RGXTsJLyogcmVncy4gMHgxZjEgLSAweDFmNyAqLwotfTsKIAogc3RydWN0IEdUTV9idWZmZXIgewogCXUzMglQSU9fc3BlZWQwOwpAQCAtODksMTIgKzg2LDggQEAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKLXN0YXRpYyBpbnQgaWRlX2FjcGlfYmxhY2tsaXN0KHZvaWQpCitpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKQogewotCXN0YXRpYyBpbnQgZG9uZTsKLQlpZiAoZG9uZSkKLQkJcmV0dXJuIDA7Ci0JZG9uZSA9IDE7CiAJZG1pX2NoZWNrX3N5c3RlbShpZGVfYWNwaV9kbWlfdGFibGUpOwogCXJldHVybiAwOwogfQpAQCAtMjAyLDQwICsxOTUsNiBAQAogfQogCiAvKioKLSAqIGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUgLSBHZXQgQUNQSSBvYmplY3QgaGFuZGxlIGZvciBhIGdpdmVuIGRyaXZlCi0gKiBAZHJpdmU6IGRldmljZSB0byBsb2NhdGUKLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIG9iamVjdCBoYW5kbGUgb2YgYSBnaXZlbiBkcml2ZS4gQWNjb3JkaW5nIHRvIHRoZSBBQ1BJCi0gKiBzcGVjIHRoZSBkcml2ZSBpcyBhIGNoaWxkIG9mIHRoZSBod2lmLgotICoKLSAqIFJldHVybnMgaGFuZGxlIG9uIHN1Y2Nlc3MsIDAgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBhY3BpX2hhbmRsZSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90CSpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaW50CQkgcG9ydDsKLQlhY3BpX2hhbmRsZQkgZHJpdmVfaGFuZGxlOwotCi0JaWYgKCFod2lmLT5hY3BpZGF0YSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQotCQlyZXR1cm4gTlVMTDsKLQotCXBvcnQgPSBod2lmLT5jaGFubmVsID8gZHJpdmUtPmRuIC0gMjogZHJpdmUtPmRuOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcyBhdCBjaGFubmVsIzogJWQgcG9ydCM6ICVkXG4iLAotCQkgZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwotCi0KLQkvKiBUQkQ6IGNvdWxkIGFsc28gY2hlY2sgQUNQSSBvYmplY3QgVkFMSUQgYml0cyAqLwotCWRyaXZlX2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBwb3J0KTsKLQlERUJQUklOVCgiZHJpdmUgJXMgaGFuZGxlIDB4JXBcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZV9oYW5kbGUpOwotCi0JcmV0dXJuIGRyaXZlX2hhbmRsZTsKLX0KLQotLyoqCiAgKiBkb19kcml2ZV9nZXRfR1RGIC0gZ2V0IHRoZSBkcml2ZSBib290dXAgZGVmYXVsdCB0YXNrZmlsZSBzZXR0aW5ncwogICogQGRyaXZlOiB0aGUgZHJpdmUgZm9yIHdoaWNoIHRoZSB0YXNrZmlsZSBzZXR0aW5ncyBzaG91bGQgYmUgcmV0cmlldmVkCiAgKiBAZ3RmX2xlbmd0aDogbnVtYmVyIG9mIGJ5dGVzIG9mIF9HVEYgZGF0YSByZXR1cm5lZCBhdCBAZ3RmX2FkZHJlc3MKQEAgLTI1Nyw0NyArMjE2LDE1IEBACiAJYWNwaV9zdGF0dXMJCQlzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyCQlvdXRwdXQ7CiAJdW5pb24gYWNwaV9vYmplY3QgCQkqb3V0X29iajsKLQlpZGVfaHdpZl90CQkJKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgZGV2aWNlCQkJKmRldiA9IGh3aWYtPmdlbmRldi5wYXJlbnQ7CiAJaW50CQkJCWVyciA9IC1FTk9ERVY7Ci0JaW50CQkJCXBvcnQ7CiAKIAkqZ3RmX2xlbmd0aCA9IDA7CiAJKmd0Zl9hZGRyZXNzID0gMFVMOwogCSpvYmpfbG9jID0gMFVMOwogCi0JaWYgKGlkZV9ub2FjcGkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFkZXYpIHsKLQkJREVCUFJJTlQoIm5vIFBDSSBkZXZpY2UgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFod2lmLT5hY3BpZGF0YSkgewotCQlERUJQUklOVCgibm8gQUNQSSBkYXRhIGZvciAlc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXBvcnQgPSBod2lmLT5jaGFubmVsID8gZHJpdmUtPmRuIC0gMjogZHJpdmUtPmRuOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcyBhdCAlcywgcG9ydCM6ICVkLCBoYXJkX3BvcnQjOiAlZFxuIiwKLQkJIGh3aWYtPm5hbWUsIGRldl9uYW1lKGRldiksIHBvcnQsIGh3aWYtPmNoYW5uZWwpOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApIHsKLQkJREVCUFJJTlQoIiVzIGRyaXZlICVkOiVkIG5vdCBwcmVzZW50XG4iLAotCQkJIGh3aWYtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgdGhpcyBkcml2ZSdzIF9BRFIgaW5mby4gaWYgbm90IGFscmVhZHkga25vd24uICovCiAJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpIHsKLQkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShkcml2ZSk7Ci0JCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKSB7Ci0JCQlERUJQUklOVCgiTm8gQUNQSSBvYmplY3QgZm91bmQgZm9yICVzXG4iLAotCQkJCSBkcml2ZS0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlERUJQUklOVCgiTm8gQUNQSSBvYmplY3QgZm91bmQgZm9yICVzXG4iLCBkcml2ZS0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFNldHRpbmcgdXAgb3V0cHV0IGJ1ZmZlciAqLwpAQCAtMzU1LDQzICsyODIsNiBAQAogfQogCiAvKioKLSAqIHRhc2tmaWxlX2xvYWRfcmF3IC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gZHJpdmUKLSAqIEBkcml2ZTogZHJpdmUgdG8gd2hpY2ggb3V0cHV0IGlzIHNlbnQKLSAqIEBndGY6IHJhdyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0ICgweDFmMSAtIDB4MWY3KQotICoKLSAqIE91dHB1dHMgSURFIHRhc2tmaWxlIHRvIHRoZSBkcml2ZS4KLSAqLwotc3RhdGljIGludCB0YXNrZmlsZV9sb2FkX3JhdyhpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKmd0ZikKLXsKLQlpZGVfdGFza190IGFyZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlERUJQUklOVCgiKDB4MWYxLTFmNyk6IGhleDogIgotCSAgICAgICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgZ3RmLT50ZmFbMF0sIGd0Zi0+dGZhWzFdLCBndGYtPnRmYVsyXSwKLQkgICAgICAgZ3RmLT50ZmFbM10sIGd0Zi0+dGZhWzRdLCBndGYtPnRmYVs1XSwgZ3RmLT50ZmFbNl0pOwotCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCi0JLyogY29udmVydCBndGYgdG8gSURFIFRhc2tmaWxlICovCi0JbWVtY3B5KCZhcmdzLnRmX2FycmF5WzddLCAmZ3RmLT50ZmEsIDcpOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCi0JaWYgKCFpZGVfYWNwaWd0ZikgewotCQlERUJQUklOVCgiX0dURiBleGVjdXRpb24gZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBlcnIpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqCiAgKiBkb19kcml2ZV9zZXRfdGFza2ZpbGVzIC0gd3JpdGUgdGhlIGRyaXZlIHRhc2tmaWxlIHNldHRpbmdzIGZyb20gX0dURgogICogQGRyaXZlOiB0aGUgZHJpdmUgdG8gd2hpY2ggdGhlIHRhc2tmaWxlIGNvbW1hbmQgc2hvdWxkIGJlIHNlbnQKICAqIEBndGZfbGVuZ3RoOiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiB0YXNrZmlsZXMKQEAgLTQwNCw0MyArMjk0LDQxIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgZ3RmX2xlbmd0aCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZ3RmX2FkZHJlc3MpCiB7Ci0JaW50CQkJcmMgPSAtRU5PREVWLCBlcnI7CisJaW50CQkJcmMgPSAwLCBlcnI7CiAJaW50CQkJZ3RmX2NvdW50ID0gZ3RmX2xlbmd0aCAvIFJFR1NfUEVSX0dURjsKIAlpbnQJCQlpeDsKLQlzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkJKmd0ZjsKLQotCWlmIChpZGVfbm9hY3BpKQotCQlyZXR1cm4gMDsKLQotCURFQlBSSU5UKCJFTlRFUjogJXMsIGhhcmRfcG9ydCM6ICVkXG4iLCBkcml2ZS0+bmFtZSwgZHJpdmUtPmRuKTsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICghZ3RmX2NvdW50KQkJLyogc2hvdWxkbid0IGJlIGhlcmUgKi8KLQkJZ290byBvdXQ7CiAKIAlERUJQUklOVCgidG90YWwgR1RGIGJ5dGVzPSV1ICgweCV4KSwgZ3RmX2NvdW50PSVkLCBhZGRyPTB4JWx4XG4iLAogCQkgZ3RmX2xlbmd0aCwgZ3RmX2xlbmd0aCwgZ3RmX2NvdW50LCBndGZfYWRkcmVzcyk7CiAKLQlpZiAoZ3RmX2xlbmd0aCAlIFJFR1NfUEVSX0dURikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIEdURiBsZW5ndGggKCVkKVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBndGZfbGVuZ3RoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSAwOworCS8qIHNlbmQgYWxsIHRhc2tmaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwogCWZvciAoaXggPSAwOyBpeCA8IGd0Zl9jb3VudDsgaXgrKykgewotCQlndGYgPSAoc3RydWN0IHRhc2tmaWxlX2FycmF5ICopCi0JCQkoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisJCXU4ICpndGYgPSAodTggKikoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisJCWlkZV90YXNrX3QgdGFzazsKIAotCQkvKiBzZW5kIGFsbCBUYXNrRmlsZSByZWdpc3RlcnMgKDB4MWYxLTB4MWY3KSAqaW4qdGhhdCpvcmRlciogKi8KLQkJZXJyID0gdGFza2ZpbGVfbG9hZF9yYXcoZHJpdmUsIGd0Zik7Ci0JCWlmIChlcnIpCisJCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogIgorCQkJICJoZXg6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkgZ3RmWzBdLCBndGZbMV0sIGd0ZlsyXSwKKwkJCSBndGZbM10sIGd0Zls0XSwgZ3RmWzVdLCBndGZbNl0pOworCisJCWlmICghaWRlX2FjcGlndGYpIHsKKwkJCURFQlBSSU5UKCJfR1RGIGV4ZWN1dGlvbiBkaXNhYmxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNvbnZlcnQgR1RGIHRvIHRhc2tmaWxlICovCisJCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwkJbWVtY3B5KCZ0YXNrLnRmX2FycmF5WzddLCBndGYsIFJFR1NfUEVSX0dURik7CisJCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlkZV9ub19kYXRhX3Rhc2tmaWxlIGZhaWxlZDogJXVcbiIsCisJCQkJCV9fZnVuY19fLCBlcnIpOwogCQkJcmMgPSBlcnI7CisJCX0KIAl9CiAKLW91dDoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY0NywyNiArNTM1LDIzIEBACiAJCURFQlBSSU5UKCJubyBBQ1BJIGRhdGEgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KKwogCS8qIGNoYW5uZWwgZmlyc3QgYW5kIHRoZW4gZHJpdmVzIGZvciBwb3dlciBvbiBhbmQgdmVyc2UgdmVyc2EgZm9yIHBvd2VyIG9mZiAqLwogCWlmIChvbikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBBQ1BJX1NUQVRFX0QwKTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKLQkJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoZHJpdmUpOwotCi0JCWlmIChkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgJiYKLQkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpKSB7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKIAkJCWFjcGlfYnVzX3NldF9wb3dlcihkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUsCi0JCQkJb24/IEFDUElfU1RBVEVfRDA6IEFDUElfU1RBVEVfRDMpOwotCQl9CisJCQkJCSAgIG9uID8gQUNQSV9TVEFURV9EMCA6IEFDUElfU1RBVEVfRDMpOwogCX0KKwogCWlmICghb24pCiAJCWFjcGlfYnVzX3NldF9wb3dlcihod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwgQUNQSV9TVEFURV9EMyk7CiB9CiAKIC8qKgotICogaWRlX2FjcGlfaW5pdCAtIGluaXRpYWxpemUgdGhlIEFDUEkgbGluayBmb3IgYW4gSURFIGludGVyZmFjZQorICogaWRlX2FjcGlfaW5pdF9wb3J0IC0gaW5pdGlhbGl6ZSB0aGUgQUNQSSBsaW5rIGZvciBhbiBJREUgaW50ZXJmYWNlCiAgKiBAaHdpZjogdGFyZ2V0IElERSBpbnRlcmZhY2UgKGNoYW5uZWwpCiAgKgogICogVGhlIEFDUEkgc3BlYyBpcyBub3QgcXVpdGUgY2xlYXIgd2hlbiB0aGUgZHJpdmUgaWRlbnRpZnkgYnVmZmVyCkBAIC02NzYsMTAgKzU2MSw4IEBACiAgKiBTbyB3ZSBnZXQgdGhlIGluZm9ybWF0aW9uIGR1cmluZyBzdGFydHVwOyBidXQgdGhpcyBtZWFucyB0aGF0CiAgKiBhbnkgY2hhbmdlcyBkdXJpbmcgcnVuLXRpbWUgd2lsbCBiZSBsb3N0IGFmdGVyIHJlc3VtZS4KICAqLwotdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpCit2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewotCWlkZV9hY3BpX2JsYWNrbGlzdCgpOwotCiAJaHdpZi0+YWNwaWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWRlX2FjcGlfaHdpZl9saW5rKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFod2lmLT5hY3BpZGF0YSkKIAkJcmV0dXJuOwpAQCAtNzA4LDE1ICs1OTEsMjQgQEAKIAlod2lmLT5kZXZpY2VzWzBdLT5hY3BpZGF0YSA9ICZod2lmLT5hY3BpZGF0YS0+bWFzdGVyOwogCWh3aWYtPmRldmljZXNbMV0tPmFjcGlkYXRhID0gJmh3aWYtPmFjcGlkYXRhLT5zbGF2ZTsKIAotCS8qCi0JICogU2VuZCBJREVOVElGWSBmb3IgZWFjaCBkcml2ZQotCSAqLwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQltZW1zZXQoZHJpdmUtPmFjcGlkYXRhLCAwLCBzaXplb2YoKmRyaXZlLT5hY3BpZGF0YSkpOworCS8qIGdldCBfQURSIGluZm8gZm9yIGVhY2ggZGV2aWNlICovCisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZTsKIAotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOworCQlERUJQUklOVCgiRU5URVI6ICVzIGF0IGNoYW5uZWwjOiAlZCBwb3J0IzogJWRcbiIsCisJCQkgZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIGRyaXZlLT5kbiAmIDEpOwogCisJCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCisJCWRldl9oYW5kbGUgPSBhY3BpX2dldF9jaGlsZChod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwKKwkJCQkJICAgIGRyaXZlLT5kbiAmIDEpOworCisJCURFQlBSSU5UKCJkcml2ZSAlcyBoYW5kbGUgMHglcFxuIiwgZHJpdmUtPm5hbWUsIGRldl9oYW5kbGUpOworCisJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGRldl9oYW5kbGU7CisJfQorCisJLyogc2VuZCBJREVOVElGWSBmb3IgZWFjaCBkZXZpY2UgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQllcnIgPSB0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5KGRyaXZlLCBkcml2ZS0+YWNwaWRhdGEtPmlkYnVmZik7CiAJCWlmIChlcnIpCiAJCQlERUJQUklOVCgiaWRlbnRpZnkgZGV2aWNlICVzIGZhaWxlZCAoJWQpXG4iLApAQCAtNzM2LDkgKzYyOCw3IEBACiAJaWRlX2FjcGlfZ2V0X3RpbWluZyhod2lmKTsKIAlpZGVfYWNwaV9wdXNoX3RpbWluZyhod2lmKTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQotCQkJLyogRXhlY3V0ZSBBQ1BJIHN0YXJ0dXAgY29kZSAqLwotCQkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IGU5NmMwMTIuLjZhZGM1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0xNDAsMTAgKzE0MCwxOSBAQAogCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1BSRUVNUFQ7CiAJcnEtPmJ1ZmZlciA9IChjaGFyICopcGM7CiAJcnEtPnJxX2Rpc2sgPSBkaXNrOworCisJaWYgKHBjLT5yZXFfeGZlcikgeworCQlycS0+ZGF0YSA9IHBjLT5idWY7CisJCXJxLT5kYXRhX2xlbiA9IHBjLT5yZXFfeGZlcjsKKwl9CisKIAltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlKQogCQlycS0+Y21kWzEzXSA9IFJFUV9JREVUQVBFX1BDMTsKLQlpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSk7CisKKwlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOworCisJZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7CiB9CiAKIC8qCkBAIC0xNTksNiArMTY4LDEyIEBACiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBSRUFELCBfX0dGUF9XQUlUKTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwogCXJxLT5idWZmZXIgPSAoY2hhciAqKXBjOworCisJaWYgKHBjLT5yZXFfeGZlcikgeworCQlycS0+ZGF0YSA9IHBjLT5idWY7CisJCXJxLT5kYXRhX2xlbiA9IHBjLT5yZXFfeGZlcjsKKwl9CisKIAltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlKQogCQlycS0+Y21kWzEzXSA9IFJFUV9JREVUQVBFX1BDMTsKQEAgLTI4NSw2ICszMDAsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9jZF9nZXRfeGZlcmxlbik7CiAKK3ZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQoreworCWlkZV90YXNrX3QgdGFzazsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8CisJCQlJREVfVEZMQUdfSU5fTlNFQ1Q7CisKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisKKwkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKKwkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKKwogLyoKICAqIFRoaXMgaXMgdGhlIHVzdWFsIGludGVycnVwdCBoYW5kbGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBhIHBhY2tldAogICogY29tbWFuZC4gIFdlIHdpbGwgdHJhbnNmZXIgc29tZSBvZiB0aGUgZGF0YSAoYXMgcmVxdWVzdGVkIGJ5IHRoZSBkcml2ZSkKQEAgLTQ0NCw2ICs0NzQsMjUgQEAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKK3N0YXRpYyB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJaWRlX3Rhc2tfdCB0YXNrOworCXU4IGRtYSA9IGRyaXZlLT5kbWE7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8CisJCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKKwl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLworCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7CisJdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7CisKKwlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOworCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Cit9CisKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfdGFza190IHRhc2s7CkBAIC02MTcsNyArNjY2LDcgQEAKIAkJCQkJCSAgICAgICA6IFdBSVRfVEFQRV9DTUQ7CiAJfQogCi0JaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKKwlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQpOwogCiAJLyogSXNzdWUgdGhlIHBhY2tldCBjb21tYW5kICovCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IGRkZmJlYTQuLjIxNzdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0yNDIsNyArMjQyLDkgQEAKIAkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZmFpbGVkX2NtZDogMHgleFxuIiwKIAkJCSAgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCi0JaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogc3RhdGljIHZvaWQgY2Ryb21fZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM5NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpAQCAtMCwwICsxLDE5MCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKK0RFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOworCitpZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOworCitzdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJpdmUtPmlvXzMyYml0ID0gYXJnOworCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7CisKK3N0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOworCitzdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQorCWludCBlcnIgPSAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXJyID0gMDsKKworCWlmIChhcmcpIHsKKwkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKKwkJCWVyciA9IC1FSU87CisJfSBlbHNlCisJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKKworb3V0OgorCXJldHVybiBlcnI7CisjZWxzZQorCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIC1FUEVSTTsKKyNlbmRpZgorfQorCisvKgorICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKKyAqLworc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKK3sKKwlzd2l0Y2ggKHJlcV9waW8pIHsKKwljYXNlIDIwMjoKKwljYXNlIDIwMToKKwljYXNlIDIwMDoKKwljYXNlIDEwMjoKKwljYXNlIDEwMToKKwljYXNlIDEwMDoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKKwljYXNlIDk6CisJY2FzZSA4OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7CisJY2FzZSA3OgorCWNhc2UgNjoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgeworCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQl9IGVsc2UKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJfSBlbHNlIHsKKwkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOworCisJCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOworCisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgeworCQkJaWYgKGtlZXBfZG1hKQorCQkJCWlkZV9kbWFfb24oZHJpdmUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKKworc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOworX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOworCitpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsCisJCSAgICAgICBpbnQgYXJnKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCisJCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7CisKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCXJxLT5jbWRfbGVuID0gNTsKKwlycS0+Y21kWzBdID0gUkVRX0RFVlNFVF9FWEVDOworCSooaW50ICopJnJxLT5jbWRbMV0gPSBhcmc7CisJcnEtPnNwZWNpYWwgPSBzZXR0aW5nLT5zZXQ7CisKKwlpZiAoYmxrX2V4ZWN1dGVfcnEocSwgTlVMTCwgcnEsIDApKQorCQlyZXQgPSBycS0+ZXJyb3JzOworCWJsa19wdXRfcmVxdWVzdChycSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCkgPSBycS0+c3BlY2lhbDsKKworCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOworCWlmIChlcnIpCisJCXJxLT5lcnJvcnMgPSBlcnI7CisJZWxzZQorCQllcnIgPSAxOworCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggNzJlYmFiMC4uYTg3OGY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKKwlpbnQgaTsKIAogCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKIApAQCAtMTM2LDggKzEzNywxMyBAQAogCWVsc2UKIAkJaHdpZi0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAKLQlyZXR1cm4gZG1hX21hcF9zZyhod2lmLT5kZXYsIHNnLCBod2lmLT5zZ19uZW50cywKLQkJCSAgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7CisJaSA9IGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgaHdpZi0+c2dfbmVudHMsIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOworCWlmIChpKSB7CisJCWh3aWYtPm9yaWdfc2dfbmVudHMgPSBod2lmLT5zZ19uZW50czsKKwkJaHdpZi0+c2dfbmVudHMgPSBpOworCX0KKworCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX3NnbGlzdCk7CiAKQEAgLTE1Niw3ICsxNjIsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAotCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19uZW50cywKKwlkbWFfdW5tYXBfc2coaHdpZi0+ZGV2LCBod2lmLT5zZ190YWJsZSwgaHdpZi0+b3JpZ19zZ19uZW50cywKIAkJICAgICBod2lmLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXN0cm95X2RtYXRhYmxlKTsKQEAgLTQ2NCw2ICs0NzAsNjMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfdGltZW91dCk7CiAKKy8qCisgKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KKyAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKKyAqIGFsbCBhd2F5CisgKi8KK2lkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpZGVfc3RhcnRzdG9wX3QgcmV0ID0gaWRlX3N0b3BwZWQ7CisKKwkvKgorCSAqIGVuZCBjdXJyZW50IGRtYSB0cmFuc2FjdGlvbgorCSAqLworCisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKKwkJKHZvaWQpaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCXJldCA9IGlkZV9lcnJvcihkcml2ZSwgImRtYSB0aW1lb3V0IGVycm9yIiwKKwkJCQlod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgcmV0cnlcbiIsIGRyaXZlLT5uYW1lKTsKKwkJaHdpZi0+ZG1hX29wcy0+ZG1hX3RpbWVvdXQoZHJpdmUpOworCX0KKworCS8qCisJICogZGlzYWJsZSBkbWEgZm9yIG5vdywgYnV0IHJlbWVtYmVyIHRoYXQgd2UgZGlkIHNvIGJlY2F1c2Ugb2YKKwkgKiBhIHRpbWVvdXQgLS0gd2UnbGwgcmVlbmFibGUgYWZ0ZXIgd2UgZmluaXNoIHRoaXMgbmV4dCByZXF1ZXN0CisJICogKG9yIHJhdGhlciB0aGUgZmlyc3QgY2h1bmsgb2YgaXQpIGluIHBpby4KKwkgKi8KKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ETUFfUElPX1JFVFJZOworCWRyaXZlLT5yZXRyeV9waW8rKzsKKwlpZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKworCS8qCisJICogdW4tYnVzeSBkcml2ZSBldGMgYW5kIG1ha2Ugc3VyZSByZXF1ZXN0IGlzIHNhbmUKKwkgKi8KKworCXJxID0gaHdpZi0+cnE7CisJaWYgKCFycSkKKwkJZ290byBvdXQ7CisKKwlod2lmLT5ycSA9IE5VTEw7CisKKwlycS0+ZXJyb3JzID0gMDsKKworCWlmICghcnEtPmJpbykKKwkJZ290byBvdXQ7CisKKwlycS0+c2VjdG9yID0gcnEtPmJpby0+Ymlfc2VjdG9yOworCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgPSBiaW9faW92ZWMocnEtPmJpbyktPmJ2X2xlbiA+PiA5OworCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwlycS0+YnVmZmVyID0gYmlvX2RhdGEocnEtPmJpbyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaWYgKGh3aWYtPmRtYXRhYmxlX2NwdSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMxYjVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWVoLmMKQEAgLTAsMCArMSw0MjggQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKKwkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7CisJCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisJfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgeworCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCisJCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKKwkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCisJCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLworCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCisJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7CisJCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCisJCQlkcml2ZS0+Y3JjX2NvdW50Kys7CisJCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgeworCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCisJCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOworCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKKwkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCisJCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOworCQl9CisJfQorCisJaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgeworCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKKworCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKKwl9CisKKwlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKKwkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisKKwlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKKwkJKytycS0+ZXJyb3JzOworCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwl9CisKKwlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCisJCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOworCisJKytycS0+ZXJyb3JzOworCisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgICAgdTggc3RhdCwgdTggZXJyKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKKwkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKwl9IGVsc2UgeworCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KKwl9CisKKwlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQorCQkvKiBmb3JjZSBhbiBhYm9ydCAqLworCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOworCisJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7CisJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CisJfSBlbHNlIHsKKwkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7CisJCQkrK3JxLT5lcnJvcnM7CisJCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwkJfQorCQkrK3JxLT5lcnJvcnM7CisJfQorCisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IF9faWRlX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlyZXR1cm4gaWRlX2F0YV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7CisJcmV0dXJuIGlkZV9hdGFwaV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Cit9CisKKy8qKgorICoJaWRlX2Vycm9yCS0JaGFuZGxlIGFuIGVycm9yIG9uIHRoZSBJREUKKyAqCUBkcml2ZTogZHJpdmUgdGhlIGVycm9yIG9jY3VycmVkIG9uCisgKglAbXNnOiBtZXNzYWdlIHRvIHJlcG9ydAorICoJQHN0YXQ6IHN0YXR1cyBiaXRzCisgKgorICoJaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgZHJpdmUuCisgKglGb3Igbm9ybWFsIEkvTyB0aGF0IG1heSB3ZWxsIGluY2x1ZGUgcmV0cmllcy4gV2UgZGVhbCB3aXRoCisgKglib3RoIG5ldy1zdHlsZSAodGFza2ZpbGUpIGFuZCBvbGQgc3R5bGUgY29tbWFuZCBoYW5kbGluZyBoZXJlLgorICoJSW4gdGhlIGNhc2Ugb2YgdGFza2ZpbGUgY29tbWFuZCBoYW5kbGluZyB0aGVyZSBpcyB3b3JrIGxlZnQgdG8KKyAqCWRvCisgKi8KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm1zZywgdTggc3RhdCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJdTggZXJyOworCisJZXJyID0gaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCBtc2csIHN0YXQpOworCisJcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisJaWYgKHJxID09IE5VTEwpCisJCXJldHVybiBpZGVfc3RvcHBlZDsKKworCS8qIHJldHJ5IG9ubHkgIm5vcm1hbCIgSS9POiAqLworCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJCXJxLT5lcnJvcnMgPSAxOworCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgZXJyKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCXJldHVybiBfX2lkZV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXJyb3IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisKKwlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCisJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7Cit9CisKKy8qIG5lZWRlZCBiZWxvdyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEoaWRlX2RyaXZlX3QgKiwgaW50KTsKKworLyoKKyAqIGF0YXBpX3Jlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbgorICogZXZlcnkgNTBtcyBkdXJpbmcgYW4gYXRhcGkgZHJpdmUgcmVzZXQgb3BlcmF0aW9uLiAgSWYgdGhlIGRyaXZlIGhhcyBub3QgeWV0CisgKiByZXNwb25kZWQsIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIKKyAqIGlzIHJlc3RhcnRlZCBmb3IgYW5vdGhlciA1MG1zLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggc3RhdDsKKworCVNFTEVDVF9EUklWRShkcml2ZSk7CisJdWRlbGF5KDEwKTsKKwlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChPS19TVEFUKHN0YXQsIDAsIEFUQV9CVVNZKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CisJZWxzZSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsCisJCQkJCU5VTEwpOworCQkJLyogY29udGludWUgcG9sbGluZyAqLworCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQl9CisJCS8qIGVuZCBvZiBwb2xsaW5nICovCisJCWh3aWYtPnBvbGxpbmcgPSAwOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBVEFQSSByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCisJCQlkcml2ZS0+bmFtZSwgc3RhdCk7CisJCS8qIGRvIGl0IHRoZSBvbGQgZmFzaGlvbmVkIHdheSAqLworCQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAxKTsKKwl9CisJLyogZG9uZSBwb2xsaW5nICovCisJaHdpZi0+cG9sbGluZyA9IDA7CisJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaWRlX2h3aWZfdCAqaHdpZiwgdTggZXJyKQoreworCXN0YXRpYyBjb25zdCBjaGFyICplcnJfbWFzdGVyX3ZhbHNbXSA9CisJCXsgTlVMTCwgInBhc3NlZCIsICJmb3JtYXR0ZXIgZGV2aWNlIGVycm9yIiwKKwkJICAic2VjdG9yIGJ1ZmZlciBlcnJvciIsICJFQ0MgY2lyY3VpdHJ5IGVycm9yIiwKKwkJICAiY29udHJvbGxpbmcgTVBVIGVycm9yIiB9OworCisJdTggZXJyX21hc3RlciA9IGVyciAmIDB4N2Y7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldDogbWFzdGVyOiAiLCBod2lmLT5uYW1lKTsKKwlpZiAoZXJyX21hc3RlciAmJiBlcnJfbWFzdGVyIDwgNikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBlcnJfbWFzdGVyX3ZhbHNbZXJyX21hc3Rlcl0pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fQ09OVCAiZXJyb3IgKDB4JTAyeD8pIiwgZXJyKTsKKwlpZiAoZXJyICYgMHg4MCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiOyBzbGF2ZTogZmFpbGVkIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKworLyoKKyAqIHJlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCisgKiBkdXJpbmcgYW4gaWRlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlcyBoYXZlIG5vdCB5ZXQgcmVzcG9uZGVkLAorICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKKyAqIGZvciBhbm90aGVyIDUwbXMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVzZXRfcG9sbGZ1bmMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCXU4IHRtcDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRfcG9sbCkgeworCQllcnIgPSBwb3J0X29wcy0+cmVzZXRfcG9sbChkcml2ZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhvc3QgcmVzZXRfcG9sbCBmYWlsdXJlIGZvciAlcy5cbiIsCisJCQkJaHdpZi0+bmFtZSwgZHJpdmUtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwl0bXAgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCisJaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQkJLyogY29udGludWUgcG9sbGluZyAqLworCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCWh3aWYtPm5hbWUsIHRtcCk7CisJCWRyaXZlLT5mYWlsdXJlcysrOworCQllcnIgPSAtRUlPOworCX0gZWxzZSAgeworCQl0bXAgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CisKKwkJaWYgKHRtcCA9PSAxKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQ6IHN1Y2Nlc3NcbiIsIGh3aWYtPm5hbWUpOworCQkJZHJpdmUtPmZhaWx1cmVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaHdpZiwgdG1wKTsKKwkJCWRyaXZlLT5mYWlsdXJlcysrOworCQkJZXJyID0gLUVJTzsKKwkJfQorCX0KK291dDoKKwlod2lmLT5wb2xsaW5nID0gMDsJLyogZG9uZSBwb2xsaW5nICovCisJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCBlcnIpOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpbnQgbGVnYWN5ID0gKGRyaXZlLT5pZFtBVEFfSURfQ0ZTX0VOQUJMRV8yXSAmIDB4MDQwMCkgPyAwIDogMTsKKworCWRyaXZlLT5zcGVjaWFsLmFsbCA9IDA7CisJZHJpdmUtPnNwZWNpYWwuYi5zZXRfZ2VvbWV0cnkgPSBsZWdhY3k7CisJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSAgPSBsZWdhY3k7CisKKwlkcml2ZS0+bXVsdF9jb3VudCA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BBUktFRDsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwICYmCisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkKKwkJZHJpdmUtPm11bHRfcmVxID0gMDsKKworCWlmIChkcml2ZS0+bXVsdF9yZXEgIT0gZHJpdmUtPm11bHRfY291bnQpCisJCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKK30KKworc3RhdGljIHZvaWQgcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGRyaXZlLT5od2lmLT5wb3J0X29wczsKKworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCWlkZV9kaXNrX3ByZV9yZXNldChkcml2ZSk7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QT1NUX1JFU0VUOworCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSB7CisJCWlmIChkcml2ZS0+Y3JjX2NvdW50KQorCQkJaWRlX2NoZWNrX2RtYV9jcmMoZHJpdmUpOworCQllbHNlCisJCQlpZGVfZG1hX29mZihkcml2ZSk7CisJfQorCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDApIHsKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkgeworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKKwkJCWRyaXZlLT5pb18zMmJpdCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cHJlX3Jlc2V0KQorCQlwb3J0X29wcy0+cHJlX3Jlc2V0KGRyaXZlKTsKKworCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCAhPSAweGZmKQorCQlkcml2ZS0+ZGVzaXJlZF9zcGVlZCA9IGRyaXZlLT5jdXJyZW50X3NwZWVkOworCWRyaXZlLT5jdXJyZW50X3NwZWVkID0gMHhmZjsKK30KKworLyoKKyAqIGRvX3Jlc2V0MSgpIGF0dGVtcHRzIHRvIHJlY292ZXIgYSBjb25mdXNlZCBkcml2ZSBieSByZXNldHRpbmcgaXQuCisgKiBVbmZvcnR1bmF0ZWx5LCByZXNldHRpbmcgYSBkaXNrIGRyaXZlIGFjdHVhbGx5IHJlc2V0cyBhbGwgZGV2aWNlcyBvbgorICogdGhlIHNhbWUgaW50ZXJmYWNlLCBzbyBpdCBjYW4gcmVhbGx5IGJlIHRob3VnaHQgb2YgYXMgcmVzZXR0aW5nIHRoZQorICogaW50ZXJmYWNlIHJhdGhlciB0aGFuIHJlc2V0dGluZyB0aGUgZHJpdmUuCisgKgorICogQVRBUEkgZGV2aWNlcyBoYXZlIHRoZWlyIG93biByZXNldCBtZWNoYW5pc20gd2hpY2ggYWxsb3dzIHRoZW0gdG8gYmUKKyAqIGluZGl2aWR1YWxseSByZXNldCB3aXRob3V0IGNsb2JiZXJpbmcgb3RoZXIgZGV2aWNlcyBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCisgKgorICogVW5mb3J0dW5hdGVseSwgdGhlIElERSBpbnRlcmZhY2UgZG9lcyBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIGxldAorICogdXMga25vdyB3aGVuIHRoZSByZXNldCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLCBzbyB3ZSBtdXN0IHBvbGwgZm9yIHRoaXMuCisgKiBFcXVhbGx5IHBvb3IsIHRob3VnaCwgaXMgdGhlIGZhY3QgdGhhdCB0aGlzIG1heSBhIHZlcnkgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLAorICogKHVwIHRvIDMwIHNlY29uZHMgd29yc3RjYXNlKS4gIFNvLCBpbnN0ZWFkIG9mIGJ1c3ktd2FpdGluZyBoZXJlIGZvciBpdCwKKyAqIHdlIHNldCBhIHRpbWVyIHRvIHBvbGwgYXQgNTBtcyBpbnRlcnZhbHMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHM7CisJaWRlX2RyaXZlX3QgKnRkcml2ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OworCWludCBpOworCURFRklORV9XQUlUKHdhaXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKworCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLworCUJVR19PTihod2lmLT5oYW5kbGVyICE9IE5VTEwpOworCisJLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgeworCQlwcmVfcmVzZXQoZHJpdmUpOworCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCQl1ZGVsYXkoMjApOworCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7CisJCW5kZWxheSg0MDApOworCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CisJCWh3aWYtPnBvbGxpbmcgPSAxOworCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIGlkZV9zdGFydGVkOworCX0KKworCS8qIFdlIG11c3Qgbm90IGRpc3R1cmIgZGV2aWNlcyBpbiB0aGUgSURFX0RGTEFHX1BBUktFRCBzdGF0ZS4gKi8KKwlkbyB7CisJCXVuc2lnbmVkIGxvbmcgbm93OworCisJCXByZXBhcmVfdG9fd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXRpbWVvdXQgPSBqaWZmaWVzOworCQlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCB0ZHJpdmUsIGh3aWYpIHsKKwkJCWlmICgodGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEKSAmJgorCQkJICAgIHRpbWVfYWZ0ZXIodGRyaXZlLT5zbGVlcCwgdGltZW91dCkpCisJCQkJdGltZW91dCA9IHRkcml2ZS0+c2xlZXA7CisJCX0KKworCQlub3cgPSBqaWZmaWVzOworCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91dCwgbm93KSkKKwkJCWJyZWFrOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHRpbWVvdXQgLSBub3cpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCX0gd2hpbGUgKHRpbWVvdXQpOworCWZpbmlzaF93YWl0KCZpZGVfcGFya193cSwgJndhaXQpOworCisJLyoKKwkgKiBGaXJzdCwgcmVzZXQgYW55IGRldmljZSBzdGF0ZSBkYXRhIHdlIHdlcmUgbWFpbnRhaW5pbmcKKwkgKiBmb3IgYW55IG9mIHRoZSBkcml2ZXMgb24gdGhpcyBpbnRlcmZhY2UuCisJICovCisJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikKKwkJcHJlX3Jlc2V0KHRkcml2ZSk7CisKKwlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIC1FTlhJTyk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBhbHNvIHNldCBuSUVOIHdoaWxlIHJlc2V0dGluZyB0aGUgZGV2aWNlLAorCSAqIHRvIG1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyBmcm9tIHRoZSBpbnRlcmZhY2UgZHVyaW5nIHRoZSByZXNldC4KKwkgKiBIb3dldmVyLCBkdWUgdG8gdGhlIGRlc2lnbiBvZiBQQyBoYXJkd2FyZSwgdGhpcyB3aWxsIGNhdXNlIGFuCisJICogaW1tZWRpYXRlIGludGVycnVwdCBkdWUgdG8gdGhlIGVkZ2UgdHJhbnNpdGlvbiBpdCBwcm9kdWNlcy4KKwkgKiBUaGlzIHNpbmdsZSBpbnRlcnJ1cHQgZ2l2ZXMgdXMgYSAiZmFzdCBwb2xsIiBmb3IgZHJpdmVzIHRoYXQKKwkgKiByZWNvdmVyIGZyb20gcmVzZXQgdmVyeSBxdWlja2x5LCBzYXZpbmcgdXMgdGhlIGZpcnN0IDUwbXMgd2FpdCB0aW1lLgorCSAqCisJICogVE9ETzogYWRkIC0+c29mdHJlc2V0IG1ldGhvZCBhbmQgc3RvcCBhYnVzaW5nIC0+c2V0X2lycQorCSAqLworCS8qIHNldCBTUlNUIGFuZCBuSUVOICovCisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDQpOworCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLworCXVkZWxheSgxMCk7CisJLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7CisJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCisJdWRlbGF5KDEwKTsKKwlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CisJaHdpZi0+cG9sbGluZyA9IDE7CisJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCisJLyoKKwkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKKwkgKiBzdGF0ZSB3aGVuIHRoZSBkaXNrcyBhcmUgcmVzZXQgdGhpcyB3YXkuIEF0IGxlYXN0LCB0aGUgV2luYm9uZAorCSAqIDU1MyBkb2N1bWVudGF0aW9uIHNheXMgdGhhdAorCSAqLworCXBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldHByb2MpCisJCXBvcnRfb3BzLT5yZXNldHByb2MoZHJpdmUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBpZGVfc3RhcnRlZDsKK30KKworLyoKKyAqIGlkZV9kb19yZXNldCgpIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZHJpdmUvaW50ZXJmYWNlIHJlc2V0IGNvZGUuCisgKi8KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGlkZV9kb19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggM2VhYjFjNi4uMzE3ZWM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMzI3LDggKzMyNywxMCBAQAogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCi0JaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChibGtfZnNfcmVxdWVzdChycSkgfHwgcGMtPnJlcV94ZmVyKSB7CisJCWlkZV9pbml0X3NnX2NtZChkcml2ZSwgcnEpOworCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJfQogCiAJcGMtPnNnID0gaHdpZi0+c2dfdGFibGU7CiAJcGMtPnNnX2NudCA9IGh3aWYtPnNnX25lbnRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKQEAgLTAsMCArMSwzMTYgQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisvKgorICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcworICovCisKK3N0YXRpYyB1OCBpZGVfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9vdXRiKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCW91dGIodmFsLCBwb3J0KTsKK30KKworLyoKKyAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKKyAqLworCitzdGF0aWMgdTggaWRlX21tX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgaWRlX21tX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Cit9CisKK3ZvaWQgaWRlX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJd3JpdGViKGNtZCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7CisJZWxzZQorCQlvdXRiKGNtZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjX2NvbW1hbmQpOworCit1OCBpZGVfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKKwllbHNlCisJCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfc3RhdHVzKTsKKwordTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2FsdHN0YXR1cyk7CisKK3ZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQoreworCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOworCisJaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLworCQljdGwgfD0gNDsKKwkJb24gJj0gfjQ7CisJfQorCisJY3RsIHw9IG9uID8gMCA6IDI7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKKwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisKKwlpZiAobW1pbykKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCWVsc2UKKwkJdGZfb3V0YiA9IGlkZV9vdXRiOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJCUhJSEkgPSAweEZGOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOworCisJCWlmIChtbWlvKQorCQkJd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJb3V0dyhkYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJCXRmX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCQl0Zl9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCisJCQkgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9sb2FkKTsKKwordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJaWYgKG1taW8pIHsKKwkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOworCQl0Zl9pbmIgID0gaWRlX21tX2luYjsKKwl9IGVsc2UgeworCQl0Zl9vdXRiID0gaWRlX291dGI7CisJCXRmX2luYiAgPSBpZGVfaW5iOworCX0KKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJCXUxNiBkYXRhOworCisJCWlmIChtbWlvKQorCQkJZGF0YSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKwkJZWxzZQorCQkJZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKKworCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOworCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCisJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLworCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCQl0Zi0+ZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJCXRmLT5uc2VjdCAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCQl0Zi0+bGJhbSAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCQl0Zi0+bGJhaCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJCXRmLT5kZXZpY2UgPSB0Zl9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCQl0Zi0+aG9iX2ZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9yZWFkKTsKKworLyoKKyAqIFNvbWUgbG9jYWxidXMgRUlERSBpbnRlcmZhY2VzIHJlcXVpcmUgYSBzcGVjaWFsIGFjY2VzcyBzZXF1ZW5jZQorICogd2hlbiB1c2luZyAzMi1iaXQgSS9PIGluc3RydWN0aW9ucyB0byB0cmFuc2ZlciBkYXRhLiAgV2UgY2FsbCB0aGlzCisgKiB0aGUgInZsYl9zeW5jIiBzZXF1ZW5jZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgc3VjY2Vzc2l2ZSByZWFkcworICogb2YgdGhlIHNlY3RvciBjb3VudCByZWdpc3RlciBsb2NhdGlvbiwgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisgKiB0byBlbnN1cmUgdGhhdCB0aGUgcmVhZHMgYWxsIGhhcHBlbiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQgYXRhX3ZsYl9zeW5jKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwkodm9pZClpbmIocG9ydCk7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKmZyb20qIHRoZSBJREUgaW50ZXJmYWNlCisgKgorICogVGhlc2Ugcm91dGluZXMgd2lsbCByb3VuZCB1cCBhbnkgcmVxdWVzdCBmb3IgYW4gb2RkIG51bWJlciBvZiBieXRlcywKKyAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKKyAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgorICovCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlsZW4rKzsKKworCWlmIChpb18zMmJpdCkgeworCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCX0KKworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX2luc2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWlmICgobGVuICYgMykgPj0gMikgeworCQkJaWYgKG1taW8pCisJCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAorCQkJCQkJKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWVsc2UKKwkJCWluc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnB1dF9kYXRhKTsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKnRvKiB0aGUgSURFIGludGVyZmFjZQorICovCit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAorCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKKwl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWxlbisrOworCisJaWYgKGlvXzMyYml0KSB7CisJCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgeworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJfQorCisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJZWxzZQorCQkJb3V0c2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKKwkJCWlmIChtbWlvKQorCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCisJCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCQllbHNlCisJCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJZWxzZQorCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7CisKK2NvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisKKwkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKKworCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IGE5YTZjMjAuLjJlOTI0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWRlX2VuZF9kcml2ZV9jbWQpOwogCi1zdGF0aWMgdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWYgKHJxLT5ycV9kaXNrKSB7CiAJCXN0cnVjdCBpZGVfZHJpdmVyICpkcnY7CkBAIC0yMDcsMTMzICsyMDcsNiBAQAogCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKLQkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7Ci0JCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0JfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgewotCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCi0JCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKLQkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCi0JCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLwotCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCi0JCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7Ci0JCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCi0JCQlkcml2ZS0+Y3JjX2NvdW50Kys7Ci0JCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgewotCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCi0JCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOwotCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKLQkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCi0JCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOwotCQl9Ci0JfQotCi0JaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgewotCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKLQotCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKLQl9Ci0KLQlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKLQkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKLQkJKytycS0+ZXJyb3JzOwotCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQl9Ci0KLQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCi0JCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOwotCi0JKytycS0+ZXJyb3JzOwotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAotCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKLQkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KLQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKLQl9IGVsc2UgewotCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KLQl9Ci0KLQlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQkvKiBmb3JjZSBhbiBhYm9ydCAqLwotCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOwotCi0JaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7Ci0JCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7Ci0JfSBlbHNlIHsKLQkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7Ci0JCQkrK3JxLT5lcnJvcnM7Ci0JCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKLQkJfQotCQkrK3JxLT5lcnJvcnM7Ci0JfQotCi0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90Ci1fX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCXJldHVybiBpZGVfYXRhX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLQlyZXR1cm4gaWRlX2F0YXBpX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLX0KLQotLyoqCi0gKglpZGVfZXJyb3IJLQloYW5kbGUgYW4gZXJyb3Igb24gdGhlIElERQotICoJQGRyaXZlOiBkcml2ZSB0aGUgZXJyb3Igb2NjdXJyZWQgb24KLSAqCUBtc2c6IG1lc3NhZ2UgdG8gcmVwb3J0Ci0gKglAc3RhdDogc3RhdHVzIGJpdHMKLSAqCi0gKglpZGVfZXJyb3IoKSB0YWtlcyBhY3Rpb24gYmFzZWQgb24gdGhlIGVycm9yIHJldHVybmVkIGJ5IHRoZSBkcml2ZS4KLSAqCUZvciBub3JtYWwgSS9PIHRoYXQgbWF5IHdlbGwgaW5jbHVkZSByZXRyaWVzLiBXZSBkZWFsIHdpdGgKLSAqCWJvdGggbmV3LXN0eWxlICh0YXNrZmlsZSkgYW5kIG9sZCBzdHlsZSBjb21tYW5kIGhhbmRsaW5nIGhlcmUuCi0gKglJbiB0aGUgY2FzZSBvZiB0YXNrZmlsZSBjb21tYW5kIGhhbmRsaW5nIHRoZXJlIGlzIHdvcmsgbGVmdCB0bwotICoJZG8KLSAqLwotIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCXU4IGVycjsKLQotCWVyciA9IGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgbXNnLCBzdGF0KTsKLQotCXJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlmIChycSA9PSBOVUxMKQotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0KLQkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KLQlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlycS0+ZXJyb3JzID0gMTsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQlyZXR1cm4gX19pZGVfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Vycm9yKTsKLQogc3RhdGljIHZvaWQgaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmKQogewogCXRmLT5uc2VjdCAgID0gZHJpdmUtPnNlY3Q7CkBAIC00OTAsNzEgKzM2MywxNiBAQAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKLWludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywKLQkJICAgICAgIGludCBhcmcpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWludCByZXQgPSAwOwotCi0JaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKLQkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKLQotCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7Ci0JcnEtPmNtZF9sZW4gPSA1OwotCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7Ci0JKihpbnQgKikmcnEtPmNtZFsxXSA9IGFyZzsKLQlycS0+c3BlY2lhbCA9IHNldHRpbmctPnNldDsKLQotCWlmIChibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMCkpCi0JCXJldCA9IHJxLT5lcnJvcnM7Ci0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGV2c2V0X2V4ZWN1dGUpOwotCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9zcGVjaWFsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXU4IGNtZCA9IHJxLT5jbWRbMF07CiAKLQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTIHx8IGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTKSB7Ci0JCWlkZV90YXNrX3QgdGFzazsKLQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKLQotCQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JCWlmIChjbWQgPT0gUkVRX1BBUktfSEVBRFMpIHsKLQkJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOwotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7Ci0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKLQkJCXRmLT5mZWF0dXJlID0gMHg0NDsKLQkJCXRmLT5sYmFsID0gMHg0YzsKLQkJCXRmLT5sYmFtID0gMHg0ZTsKLQkJCXRmLT5sYmFoID0gMHg1NTsKLQkJCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOwotCQl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCi0JCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOwotCi0JCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQkJdGFzay5ycSA9IHJxOwotCQlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7Ci0JCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOwotCX0KLQogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSRVFfUEFSS19IRUFEUzoKKwljYXNlIFJFUV9VTlBBUktfSEVBRFM6CisJCXJldHVybiBpZGVfZG9fcGFya191bnBhcmsoZHJpdmUsIHJxKTsKIAljYXNlIFJFUV9ERVZTRVRfRVhFQzoKLQl7Ci0JCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOwotCi0JCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOwotCQlpZiAoZXJyKQotCQkJcnEtPmVycm9ycyA9IGVycjsKLQkJZWxzZQotCQkJZXJyID0gMTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQorCQlyZXR1cm4gaWRlX2RvX2RldnNldChkcml2ZSwgcnEpOwogCWNhc2UgUkVRX0RSSVZFX1JFU0VUOgogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAlkZWZhdWx0OgpAQCAtODIwLDYzICs2MzgsNiBAQAogCQlibGtfcGx1Z19kZXZpY2UocSk7CiB9CiAKLS8qCi0gKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KLSAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKLSAqIGFsbCBhd2F5Ci0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOwotCi0JLyoKLQkgKiBlbmQgY3VycmVudCBkbWEgdHJhbnNhY3Rpb24KLQkgKi8KLQotCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCSh2b2lkKWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwotCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCi0JCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKLQl9Ci0KLQkvKgotCSAqIGRpc2FibGUgZG1hIGZvciBub3csIGJ1dCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbyBiZWNhdXNlIG9mCi0JICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAotCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCi0JICovCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKLQlkcml2ZS0+cmV0cnlfcGlvKys7Ci0JaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0KLQkvKgotCSAqIHVuLWJ1c3kgZHJpdmUgZXRjIGFuZCBtYWtlIHN1cmUgcmVxdWVzdCBpcyBzYW5lCi0JICovCi0KLQlycSA9IGh3aWYtPnJxOwotCWlmICghcnEpCi0JCWdvdG8gb3V0OwotCi0JaHdpZi0+cnEgPSBOVUxMOwotCi0JcnEtPmVycm9ycyA9IDA7Ci0KLQlpZiAoIXJxLT5iaW8pCi0JCWdvdG8gb3V0OwotCi0JcnEtPnNlY3RvciA9IHJxLT5iaW8tPmJpX3NlY3RvcjsKLQlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW4gPj4gOTsKLQlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JcnEtPmJ1ZmZlciA9IGJpb19kYXRhKHJxLT5iaW8pOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9wbHVnX2RldmljZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CkBAIC04ODgsNiArNjQ5LDI5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgZHJpdmVfaXNfcmVhZHkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0ID0gMDsKKworCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQorCQlyZXR1cm4gaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKTsKKworCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkciAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19CUk9LRU5fQUxUU1RBVFVTKSA9PSAwKQorCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKKwllbHNlCisJCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLworCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChzdGF0ICYgQVRBX0JVU1kpCisJCS8qIGRyaXZlIGJ1c3k6IGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLworCQlyZXR1cm4gMDsKKworCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLworCXJldHVybiAxOworfQorCiAvKioKICAqCWlkZV90aW1lcl9leHBpcnkJLQloYW5kbGUgbGFjayBvZiBhbiBJREUgaW50ZXJydXB0CiAgKglAZGF0YTogdGltZXIgY2FsbGJhY2sgbWFnaWMgKGh3aWYpCkBAIC0xMTY0LDU0ICs5NDgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2ludHIpOwogCi0vKioKLSAqCWlkZV9kb19kcml2ZV9jbWQJLQlpc3N1ZSBJREUgc3BlY2lhbCBjb21tYW5kCi0gKglAZHJpdmU6IGRldmljZSB0byBpc3N1ZSBjb21tYW5kCi0gKglAcnE6IHJlcXVlc3QgdG8gaXNzdWUKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIHNwZWNpYWwgSURFIGRldmljZSByZXF1ZXN0Ci0gKglvbnRvIHRoZSByZXF1ZXN0IHF1ZXVlLgotICoKLSAqCXRoZSBycSBpcyBxdWV1ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgcXVldWUsIGRpc3BsYWNpbmcKLSAqCXRoZSBjdXJyZW50bHktYmVpbmctcHJvY2Vzc2VkIHJlcXVlc3QgYW5kIHRoaXMgZnVuY3Rpb24KLSAqCXJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV3IHJxIHRvIGJlCi0gKgljb21wbGV0ZWQuICBUaGlzIGlzIFZFUlkgREFOR0VST1VTLCBhbmQgaXMgaW50ZW5kZWQgZm9yCi0gKgljYXJlZnVsIHVzZSBieSB0aGUgQVRBUEkgdGFwZS9jZHJvbSBkcml2ZXIgY29kZS4KLSAqLwotCi12b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlkZV9kb19kcml2ZV9jbWQpOwotCi12b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCwgdTggZG1hKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190IHRhc2s7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8Ci0JCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKLQl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLwotCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7Ci0JdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7Ci0KLQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOwotCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wa3RjbWRfdGZfbG9hZCk7Ci0KIHZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB3cml0ZSwgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCBiMTg5MmJkLi4zMTdjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTI3LDM1ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyoKLSAqCUNvbnZlbnRpb25hbCBQSU8gb3BlcmF0aW9ucyBmb3IgQVRBIGRldmljZXMKLSAqLwotCi1zdGF0aWMgdTggaWRlX2luYiAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTgpIGluYihwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX291dGIgKHU4IHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCW91dGIodmFsLCBwb3J0KTsKLX0KLQotLyoKLSAqCU1NSU8gb3BlcmF0aW9ucywgdHlwaWNhbGx5IHVzZWQgZm9yIFNBVEEgY29udHJvbGxlcnMKLSAqLwotCi1zdGF0aWMgdTggaWRlX21tX2luYiAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9tbV9vdXRiICh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKLX0KLQotdm9pZCBTRUxFQ1RfRFJJVkUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3ZvaWQgU0VMRUNUX0RSSVZFKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKQEAgLTc4LDI3NyArNTAsNiBAQAogCQlwb3J0X29wcy0+bWFza3Byb2MoZHJpdmUsIG1hc2spOwogfQogCi12b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlYihjbWQsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOwotCWVsc2UKLQkJb3V0YihjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY19jb21tYW5kKTsKLQotdTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX3N0YXR1cyk7Ci0KLXU4IGlkZV9yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotCWVsc2UKLQkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOwotCi12b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKLXsKLQl1OCBjdGwgPSBBVEFfREVWQ1RMX09CUzsKLQotCWlmIChvbiA9PSA0KSB7IC8qIGhhY2sgZm9yIFNSU1QgKi8KLQkJY3RsIHw9IDQ7Ci0JCW9uICY9IH40OwotCX0KLQotCWN0bCB8PSBvbiA/IDAgOiAyOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJd3JpdGViKGN0bCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLQllbHNlCi0JCW91dGIoY3RsLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2lycSk7Ci0KLXZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwotCi0JaWYgKG1taW8pCi0JCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKLQllbHNlCi0JCXRmX291dGIgPSBpZGVfb3V0YjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQotCQlISUhJID0gMHhGRjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCXdyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JfQotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKLQkJdGZfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQotCQl0Zl9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQotCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKLQkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCi0JCXRmX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKLQkJdGZfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKLQkJdGZfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCi0JCXRmX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKLQkJdGZfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQotCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAotCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7Ci0KLXZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCAoKnRmX2luYikodW5zaWduZWQgbG9uZyBwb3J0KTsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQotCWlmIChtbWlvKSB7Ci0JCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKLQkJdGZfaW5iICA9IGlkZV9tbV9pbmI7Ci0JfSBlbHNlIHsKLQkJdGZfb3V0YiA9IGlkZV9vdXRiOwotCQl0Zl9pbmIgID0gaWRlX2luYjsKLQl9Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCWRhdGEgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCWRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQotCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKLQkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQotCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKLQkJdGYtPmxiYWwgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKLQkJdGYtPmxiYW0gICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKLQkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQotCQl0Zi0+ZGV2aWNlID0gdGZfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7Ci0KLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfcmVhZCk7Ci0KLS8qCi0gKiBTb21lIGxvY2FsYnVzIEVJREUgaW50ZXJmYWNlcyByZXF1aXJlIGEgc3BlY2lhbCBhY2Nlc3Mgc2VxdWVuY2UKLSAqIHdoZW4gdXNpbmcgMzItYml0IEkvTyBpbnN0cnVjdGlvbnMgdG8gdHJhbnNmZXIgZGF0YS4gIFdlIGNhbGwgdGhpcwotICogdGhlICJ2bGJfc3luYyIgc2VxdWVuY2UsIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHN1Y2Nlc3NpdmUgcmVhZHMKLSAqIG9mIHRoZSBzZWN0b3IgY291bnQgcmVnaXN0ZXIgbG9jYXRpb24sIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAotICogdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWRzIGFsbCBoYXBwZW4gdG9nZXRoZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGF0YV92bGJfc3luYyh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JKHZvaWQpaW5iKHBvcnQpOwotCSh2b2lkKWluYihwb3J0KTsKLQkodm9pZClpbmIocG9ydCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICpmcm9tKiB0aGUgSURFIGludGVyZmFjZQotICoKLSAqIFRoZXNlIHJvdXRpbmVzIHdpbGwgcm91bmQgdXAgYW55IHJlcXVlc3QgZm9yIGFuIG9kZCBudW1iZXIgb2YgYnl0ZXMsCi0gKiBzbyBpZiBhbiBvZGQgbGVuIGlzIHNwZWNpZmllZCwgYmUgc3VyZSB0aGF0IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0gKiBleHRyYSBieXRlIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlci4KLSAqLwotdm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOwotCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCi0JbGVuKys7Ci0KLQlpZiAoaW9fMzJiaXQpIHsKLQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7Ci0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQl9Ci0KLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0JCWVsc2UKLQkJCWluc2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKLQkJCWlmIChtbWlvKQotCQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKLQkJCQkJCSh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQkJZWxzZQotCQkJCWluc3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCQllbHNlCi0JCQlpbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5wdXRfZGF0YSk7Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKLSAqLwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7Ci0JdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0KLQlsZW4rKzsKLQotCWlmIChpb18zMmJpdCkgewotCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCX0KLQotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX291dHNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0JCWVsc2UKLQkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJaWYgKChsZW4gJiAzKSA+PSAyKSB7Ci0JCQlpZiAobW1pbykKLQkJCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAotCQkJCQkJICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQkJZWxzZQotCQkJCW91dHN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JCWVsc2UKLQkJCW91dHN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfb3V0cHV0X2RhdGEpOwotCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX3Rhc2tfdCB0YXNrOwpAQCAtMzYyLDM1ICs2Myw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9lcnJvcik7CiAKLXZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQotewotCWlkZV90YXNrX3QgdGFzazsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8Ci0JCQlJREVfVEZMQUdfSU5fTlNFQ1Q7Ci0KLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7Ci0KLQkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKLQkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKLQotY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHMgPSB7Ci0JLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAotCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCi0JLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKLQotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCi0JLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCi0KLQkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKLQkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAotfTsKLQogdm9pZCBpZGVfZml4X2RyaXZlaWQodTE2ICppZCkKIHsKICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCkBAIC00MTIsNyArODQsNyBAQAogICogcmV0dXJuZWQgYnkgdGhlIEFUQV9DTURfSURfQVRBW1BJXSBjb21tYW5kcy4KICAqLwogCi12b2lkIGlkZV9maXhzdHJpbmcgKHU4ICpzLCBjb25zdCBpbnQgYnl0ZWNvdW50LCBjb25zdCBpbnQgYnl0ZXN3YXApCit2b2lkIGlkZV9maXhzdHJpbmcodTggKnMsIGNvbnN0IGludCBieXRlY291bnQsIGNvbnN0IGludCBieXRlc3dhcCkKIHsKIAl1OCAqcCwgKmVuZCA9ICZzW2J5dGVjb3VudCAmIH4xXTsgLyogYnl0ZWNvdW50IG11c3QgYmUgZXZlbiAqLwogCkBAIC00MzUsNDQgKzEwNyw5IEBACiAJd2hpbGUgKHAgIT0gZW5kKQogCQkqcCsrID0gJ1wwJzsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfZml4c3RyaW5nKTsKIAogLyoKLSAqIE5lZWRlZCBmb3IgUENJIGlycSBzaGFyaW5nCi0gKi8KLWludCBkcml2ZV9pc19yZWFkeSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKLQl1OCBzdGF0CQkJPSAwOwotCi0JaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXJldHVybiBod2lmLT5kbWFfb3BzLT5kbWFfdGVzdF9pcnEoZHJpdmUpOwotCi0JLyoKLQkgKiBXZSBkbyBhIHBhc3NpdmUgc3RhdHVzIHRlc3QgdW5kZXIgc2hhcmVkIFBDSSBpbnRlcnJ1cHRzIG9uCi0JICogY2FyZHMgdGhhdCB0cnVseSBzaGFyZSB0aGUgQVRBIHNpZGUgaW50ZXJydXB0LCBidXQgbWF5IGFsc28gc2hhcmUKLQkgKiBhbiBpbnRlcnJ1cHQgd2l0aCBhbm90aGVyIHBjaSBjYXJkL2RldmljZS4gIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMKLQkgKiBhYm91dCBwb3NzaWJsZSBpc2EtcG5wIGFuZCBwY2ktcG5wIGlzc3VlcyB5ZXQuCi0JICovCi0JaWYgKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyICYmCi0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0JST0tFTl9BTFRTVEFUVVMpID09IDApCi0JCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfYWx0c3RhdHVzKGh3aWYpOwotCWVsc2UKLQkJLyogTm90ZTogdGhpcyBtYXkgY2xlYXIgYSBwZW5kaW5nIElSUSEhICovCi0JCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKHN0YXQgJiBBVEFfQlVTWSkKLQkJLyogZHJpdmUgYnVzeTogIGRlZmluaXRlbHkgbm90IGludGVycnVwdGluZyAqLwotCQlyZXR1cm4gMDsKLQotCS8qIGRyaXZlIHJlYWR5OiAqbWlnaHQqIGJlIGludGVycnVwdGluZyAqLwotCXJldHVybiAxOwotfQotCi1FWFBPUlRfU1lNQk9MKGRyaXZlX2lzX3JlYWR5KTsKLQotLyoKICAqIFRoaXMgcm91dGluZSBidXN5LXdhaXRzIGZvciB0aGUgZHJpdmUgc3RhdHVzIHRvIGJlIG5vdCAiYnVzeSIuCiAgKiBJdCB0aGVuIGNoZWNrcyB0aGUgc3RhdHVzIGZvciBhbGwgb2YgdGhlICJnb29kIiBiaXRzIGFuZCBub25lCiAgKiBvZiB0aGUgImJhZCIgYml0cywgYW5kIGlmIGFsbCBpcyBva2F5IGl0IHJldHVybnMgMC4gIEFsbCBvdGhlcgpAQCAtNDgzLDcgKzEyMCw4IEBACiAgKiBzZXR0aW5nIGEgdGltZXIgdG8gd2FrZSB1cCBhdCBoYWxmIHNlY29uZCBpbnRlcnZhbHMgdGhlcmVhZnRlciwKICAqIHVudGlsIHRpbWVvdXQgaXMgYWNoaWV2ZWQsIGJlZm9yZSB0aW1pbmcgb3V0LgogICovCi1zdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1OCAqcnN0YXQpCitzdGF0aWMgaW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdTggKnJzdGF0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwpAQCAtNTQxLDcgKzE3OSw4IEBACiAgKiBUaGUgY2FsbGVyIHNob3VsZCByZXR1cm4gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgInN0YXJ0c3RvcCIgaW4gdGhpcyBjYXNlLAogICogInN0YXJ0c3RvcCIgaXMgdW5jaGFuZ2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4KICAqLwotaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICpzdGFydHN0b3AsIGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCitpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKnN0YXJ0c3RvcCwgaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLAorCQkgIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCWludCBlcnI7CiAJdTggc3RhdDsKQEAgLTU2MSw3ICsyMDAsNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfd2FpdF9zdGF0KTsKIAogLyoqCkBAIC01ODIsNyArMjIwLDYgQEAKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5fZHJpdmVfbGlzdCk7CiAKIC8qCkBAIC02MDcsNyArMjQ0LDcgQEAKICAqICBBbGwgaG9zdHMgdGhhdCB1c2UgdGhlIDgwYyByaWJib24gbXVzdCB1c2UhCiAgKiAgVGhlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHVwcGVyIGJ5dGUgb2Ygd29yZCA5MyBhbmQgdGhlIDgwYyByaWJib24uCiAgKi8KLXU4IGVpZ2h0eV9uaW50eV90aHJlZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQordTggZWlnaHR5X25pbnR5X3RocmVlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKQEAgLTY1Miw0NyArMjg5LDE5IEBACiAKIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXUxNiAqaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBzdGF0OworCWludCByYzsKIAotCS8qCi0JICogUmUtcmVhZCBkcml2ZS0+aWQgZm9yIHBvc3NpYmxlIERNQSBtb2RlCi0JICogY2hhbmdlIChjb3BpZWQgZnJvbSBpZGUtcHJvYmUuYykKLQkgKi8KKwlpZCA9IGttYWxsb2MoU0VDVE9SX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmIChpZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7Ci0JbXNsZWVwKDUwKTsKLQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lEX0FUQSk7Ci0KLQlpZiAoaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDEpKSB7Ci0JCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXNsZWVwKDUwKTsJLyogd2FpdCBmb3IgSVJRIGFuZCBBVEFfRFJRICovCi0Jc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgQVRBX0RSUSwgQkFEX1JfU1RBVCkpIHsKLQkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQlwcmludGsoIiVzOiBDSEVDSyBmb3IgZ29vZCBTVEFUVVNcbiIsIGRyaXZlLT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgQVRBX0NNRF9JRF9BVEEsIGlkKTsKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaWQgPSBrbWFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWlkKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgaWQsIFNFQ1RPUl9TSVpFKTsKLQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwkvKiBjbGVhciBkcml2ZSBJUlEgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWlkZV9maXhfZHJpdmVpZChpZCk7CisKKwlpZiAocmMpCisJCWdvdG8gb3V0X2VycjsKIAogCWRyaXZlLT5pZFtBVEFfSURfVURNQV9NT0RFU10gID0gaWRbQVRBX0lEX1VETUFfTU9ERVNdOwogCWRyaXZlLT5pZFtBVEFfSURfTVdETUFfTU9ERVNdID0gaWRbQVRBX0lEX01XRE1BX01PREVTXTsKQEAgLTcwNSw2ICszMTQsMTIgQEAKIAkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCiAJcmV0dXJuIDE7CitvdXRfZXJyOgorCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlpZiAocmMgPT0gMikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGJhZCBzdGF0dXNcbiIsIGRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CisJa2ZyZWUoaWQpOworCXJldHVybiAwOwogfQogCiBpbnQgaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQpAQCAtNzMxLDE4ICszNDYsMTUgQEAKIAkgKiBidXQgZm9yIHNvbWUgcmVhc29uIHRoZXNlIGRvbid0IHdvcmsgYXQKIAkgKiB0aGlzIHBvaW50IChsb3N0IGludGVycnVwdCkuCiAJICovCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNlbGVjdCB0aGUgZHJpdmUsIGFuZCBpc3N1ZSB0aGUgU0VURkVBVFVSRVMgY29tbWFuZAotICAgICAgICAgKi8KLQlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKLQkKKwogCS8qCiAJICoJRklYTUU6IHdlIHJhY2UgYWdhaW5zdCB0aGUgcnVubmluZyBJUlEgaGVyZSBpZgogCSAqCXRoaXMgaXMgY2FsbGVkIGZyb20gbm9uIElSUSBjb250ZXh0LiBJZiB3ZSB1c2UKIAkgKglkaXNhYmxlX2lycSgpIHdlIGhhbmcgb24gdGhlIGVycm9yIHBhdGguIFdvcmsKIAkgKglpcyBuZWVkZWQuCiAJICovCi0JIAorCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOworCiAJdWRlbGF5KDEpOwogCVNFTEVDVF9EUklWRShkcml2ZSk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwpAQCAtODEyLDggKzQyNCw4IEBACiAgKgogICogU2VlIGFsc28gaWRlX2V4ZWN1dGVfY29tbWFuZAogICovCi1zdGF0aWMgdm9pZCBfX2lkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKKwkJICAgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKQEAgLTgzNSw5ICs0NDcsOCBAQAogCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfc2V0X2hhbmRsZXIpOwotIAorCiAvKioKICAqCWlkZV9leGVjdXRlX2NvbW1hbmQJLQlleGVjdXRlIGFuIElERSBjb21tYW5kCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBpc3N1ZSB0aGUgY29tbWFuZCBhZ2FpbnN0CkBAIC04NDcsNyArNDU4LDcgQEAKICAqCUBleHBpcnk6ICBoYW5kbGVyIHRvIHJ1biBvbiB0aW1lb3V0CiAgKgogICoJSGVscGVyIGZ1bmN0aW9uIHRvIGlzc3VlIGFuIElERSBjb21tYW5kLiBUaGlzIGhhbmRsZXMgdGhlCi0gKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZSAKKyAqCWF0b21pY2l0eSByZXF1aXJlbWVudHMsIGNvbW1hbmQgdGltaW5nIGFuZCBlbnN1cmVzIHRoYXQgdGhlCiAgKgloYW5kbGVyIGFuZCBJUlEgc2V0dXAgZG8gbm90IHJhY2UuIEFsbCBJREUgY29tbWFuZCBraWNrIG9mZgogICoJc2hvdWxkIGdvIHZpYSB0aGlzIGZ1bmN0aW9uIG9yIGRvIGVxdWl2YWxlbnQgbG9ja2luZy4KICAqLwpAQCAtODg0LDMwMSArNDk1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjdXRlX3BrdF9jbWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycikKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0KLQlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7Ci19Ci0KLS8qIG5lZWRlZCBiZWxvdyAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICosIGludCk7Ci0KLS8qCi0gKiBhdGFwaV9yZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcwotICogZHVyaW5nIGFuIGF0YXBpIGRyaXZlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlIGhhcyBub3QgeWV0IHJlc3BvbmRlZCwKLSAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCi0gKiBmb3IgYW5vdGhlciA1MG1zLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IHN0YXQ7Ci0KLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCXVkZWxheSAoMTApOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKE9LX1NUQVQoc3RhdCwgMCwgQVRBX0JVU1kpKQotCQlwcmludGsoIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOwotCWVsc2UgewotCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KLQkJCXJldHVybiBpZGVfc3RhcnRlZDsKLQkJfQotCQkvKiBlbmQgb2YgcG9sbGluZyAqLwotCQlod2lmLT5wb2xsaW5nID0gMDsKLQkJcHJpbnRrKCIlczogQVRBUEkgcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAotCQkJCWRyaXZlLT5uYW1lLCBzdGF0KTsKLQkJLyogZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ICovCi0JCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDEpOwotCX0KLQkvKiBkb25lIHBvbGxpbmcgKi8KLQlod2lmLT5wb2xsaW5nID0gMDsKLQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIDApOwotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihpZGVfaHdpZl90ICpod2lmLCB1OCBlcnIpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmVycl9tYXN0ZXJfdmFsc1tdID0KLQkJeyBOVUxMLCAicGFzc2VkIiwgImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiLAotCQkgICJzZWN0b3IgYnVmZmVyIGVycm9yIiwgIkVDQyBjaXJjdWl0cnkgZXJyb3IiLAotCQkgICJjb250cm9sbGluZyBNUFUgZXJyb3IiIH07Ci0KLQl1OCBlcnJfbWFzdGVyID0gZXJyICYgMHg3ZjsKLQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0OiBtYXN0ZXI6ICIsIGh3aWYtPm5hbWUpOwotCWlmIChlcnJfbWFzdGVyICYmIGVycl9tYXN0ZXIgPCA2KQotCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGVycl9tYXN0ZXJfdmFsc1tlcnJfbWFzdGVyXSk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9DT05UICJlcnJvciAoMHglMDJ4PykiLCBlcnIpOwotCWlmIChlcnIgJiAweDgwKQotCQlwcmludGsoS0VSTl9DT05UICI7IHNsYXZlOiBmYWlsZWQiKTsKLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotfQotCi0vKgotICogcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKLSAqIGR1cmluZyBhbiBpZGUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmVzIGhhdmUgbm90IHlldCByZXNwb25kZWQsCi0gKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAotICogZm9yIGFub3RoZXIgNTBtcy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZXNldF9wb2xsZnVuYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXU4IHRtcDsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRfcG9sbCkgewotCQllcnIgPSBwb3J0X29wcy0+cmVzZXRfcG9sbChkcml2ZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhvc3QgcmVzZXRfcG9sbCBmYWlsdXJlIGZvciAlcy5cbiIsCi0JCQkJaHdpZi0+bmFtZSwgZHJpdmUtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQl0bXAgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7Ci0JCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQkJLyogY29udGludWUgcG9sbGluZyAqLwotCQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCQl9Ci0JCXByaW50aygiJXM6IHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwgaHdpZi0+bmFtZSwgdG1wKTsKLQkJZHJpdmUtPmZhaWx1cmVzKys7Ci0JCWVyciA9IC1FSU87Ci0JfSBlbHNlICB7Ci0JCXRtcCA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKLQotCQlpZiAodG1wID09IDEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldDogc3VjY2Vzc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCQlkcml2ZS0+ZmFpbHVyZXMgPSAwOwotCQl9IGVsc2UgewotCQkJaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihod2lmLCB0bXApOwotCQkJZHJpdmUtPmZhaWx1cmVzKys7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQotb3V0OgotCWh3aWYtPnBvbGxpbmcgPSAwOwkvKiBkb25lIHBvbGxpbmcgKi8KLQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIGVycik7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZGlza19wcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWludCBsZWdhY3kgPSAoZHJpdmUtPmlkW0FUQV9JRF9DRlNfRU5BQkxFXzJdICYgMHgwNDAwKSA/IDAgOiAxOwotCi0JZHJpdmUtPnNwZWNpYWwuYWxsID0gMDsKLQlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IGxlZ2FjeTsKLQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlICA9IGxlZ2FjeTsKLQotCWRyaXZlLT5tdWx0X2NvdW50ID0gMDsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUEFSS0VEOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDAgJiYKLQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKQotCQlkcml2ZS0+bXVsdF9yZXEgPSAwOwotCi0JaWYgKGRyaXZlLT5tdWx0X3JlcSAhPSBkcml2ZS0+bXVsdF9jb3VudCkKLQkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVsdG1vZGUgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gZHJpdmUtPmh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJaWRlX2Rpc2tfcHJlX3Jlc2V0KGRyaXZlKTsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BPU1RfUkVTRVQ7Ci0KLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpIHsKLQkJaWYgKGRyaXZlLT5jcmNfY291bnQpCi0JCQlpZGVfY2hlY2tfZG1hX2NyYyhkcml2ZSk7Ci0JCWVsc2UKLQkJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKLQl9Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCkgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKSB7Ci0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOwotCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5wcmVfcmVzZXQpCi0JCXBvcnRfb3BzLT5wcmVfcmVzZXQoZHJpdmUpOwotCi0JaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkICE9IDB4ZmYpCi0JCWRyaXZlLT5kZXNpcmVkX3NwZWVkID0gZHJpdmUtPmN1cnJlbnRfc3BlZWQ7Ci0JZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSAweGZmOwotfQotCi0vKgotICogZG9fcmVzZXQxKCkgYXR0ZW1wdHMgdG8gcmVjb3ZlciBhIGNvbmZ1c2VkIGRyaXZlIGJ5IHJlc2V0dGluZyBpdC4KLSAqIFVuZm9ydHVuYXRlbHksIHJlc2V0dGluZyBhIGRpc2sgZHJpdmUgYWN0dWFsbHkgcmVzZXRzIGFsbCBkZXZpY2VzIG9uCi0gKiB0aGUgc2FtZSBpbnRlcmZhY2UsIHNvIGl0IGNhbiByZWFsbHkgYmUgdGhvdWdodCBvZiBhcyByZXNldHRpbmcgdGhlCi0gKiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gcmVzZXR0aW5nIHRoZSBkcml2ZS4KLSAqCi0gKiBBVEFQSSBkZXZpY2VzIGhhdmUgdGhlaXIgb3duIHJlc2V0IG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgdGhlbSB0byBiZQotICogaW5kaXZpZHVhbGx5IHJlc2V0IHdpdGhvdXQgY2xvYmJlcmluZyBvdGhlciBkZXZpY2VzIG9uIHRoZSBzYW1lIGludGVyZmFjZS4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5LCB0aGUgSURFIGludGVyZmFjZSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gbGV0Ci0gKiB1cyBrbm93IHdoZW4gdGhlIHJlc2V0IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQsIHNvIHdlIG11c3QgcG9sbCBmb3IgdGhpcy4KLSAqIEVxdWFsbHkgcG9vciwgdGhvdWdoLCBpcyB0aGUgZmFjdCB0aGF0IHRoaXMgbWF5IGEgdmVyeSBsb25nIHRpbWUgdG8gY29tcGxldGUsCi0gKiAodXAgdG8gMzAgc2Vjb25kcyB3b3JzdGNhc2UpLiAgU28sIGluc3RlYWQgb2YgYnVzeS13YWl0aW5nIGhlcmUgZm9yIGl0LAotICogd2Ugc2V0IGEgdGltZXIgdG8gcG9sbCBhdCA1MG1zIGludGVydmFscy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHM7Ci0JaWRlX2RyaXZlX3QgKnRkcml2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OwotCWludCBpOwotCURFRklORV9XQUlUKHdhaXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLwotCUJVR19PTihod2lmLT5oYW5kbGVyICE9IE5VTEwpOwotCi0JLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgewotCQlwcmVfcmVzZXQoZHJpdmUpOwotCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCQl1ZGVsYXkgKDIwKTsKLQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwotCQluZGVsYXkoNDAwKTsKLQkJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwotCQlod2lmLT5wb2xsaW5nID0gMTsKLQkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBpZGVfc3RhcnRlZDsKLQl9Ci0KLQkvKiBXZSBtdXN0IG5vdCBkaXN0dXJiIGRldmljZXMgaW4gdGhlIElERV9ERkxBR19QQVJLRUQgc3RhdGUuICovCi0JZG8gewotCQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCQlwcmVwYXJlX3RvX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQl0aW1lb3V0ID0gamlmZmllczsKLQkJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikgewotCQkJaWYgKHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQgJiYKLQkJCSAgICB0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQgJiYKLQkJCSAgICB0aW1lX2FmdGVyKHRkcml2ZS0+c2xlZXAsIHRpbWVvdXQpKQotCQkJCXRpbWVvdXQgPSB0ZHJpdmUtPnNsZWVwOwotCQl9Ci0KLQkJbm93ID0gamlmZmllczsKLQkJaWYgKHRpbWVfYmVmb3JlX2VxKHRpbWVvdXQsIG5vdykpCi0JCQlicmVhazsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSh0aW1lb3V0IC0gbm93KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQl9IHdoaWxlICh0aW1lb3V0KTsKLQlmaW5pc2hfd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0KTsKLQotCS8qCi0JICogRmlyc3QsIHJlc2V0IGFueSBkZXZpY2Ugc3RhdGUgZGF0YSB3ZSB3ZXJlIG1haW50YWluaW5nCi0JICogZm9yIGFueSBvZiB0aGUgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgotCSAqLwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpCi0JCXByZV9yZXNldCh0ZHJpdmUpOwotCi0JaWYgKGlvX3BvcnRzLT5jdGxfYWRkciA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAtRU5YSU8pOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgYWxzbyBzZXQgbklFTiB3aGlsZSByZXNldHRpbmcgdGhlIGRldmljZSwKLQkgKiB0byBtYXNrIHVud2FudGVkIGludGVycnVwdHMgZnJvbSB0aGUgaW50ZXJmYWNlIGR1cmluZyB0aGUgcmVzZXQuCi0JICogSG93ZXZlciwgZHVlIHRvIHRoZSBkZXNpZ24gb2YgUEMgaGFyZHdhcmUsIHRoaXMgd2lsbCBjYXVzZSBhbgotCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCi0JICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0Ci0JICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KLQkgKgotCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKLQkgKi8KLQkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLwotCXRwX29wcy0+c2V0X2lycShod2lmLCA0KTsKLQkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KLQl1ZGVsYXkoMTApOwotCS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKHVubGVzcyBkZXZpY2UgaXMgb24gdGhlIHF1aXJrIGxpc3QpICovCi0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGRyaXZlLT5xdWlya19saXN0ID09IDIpOwotCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwotCXVkZWxheSgxMCk7Ci0JaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwotCWh3aWYtPnBvbGxpbmcgPSAxOwotCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQotCS8qCi0JICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCi0JICogc3RhdGUgd2hlbiB0aGUgZGlza3MgYXJlIHJlc2V0IHRoaXMgd2F5LiBBdCBsZWFzdCwgdGhlIFdpbmJvbmQKLQkgKiA1NTMgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQKLQkgKi8KLQlwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRwcm9jKQotCQlwb3J0X29wcy0+cmVzZXRwcm9jKGRyaXZlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLS8qCi0gKiBpZGVfZG9fcmVzZXQoKSBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGRyaXZlL2ludGVyZmFjZSByZXNldCBjb2RlLgotICovCi0KLWlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAwKTsKLX0KLQotRVhQT1JUX1NZTUJPTChpZGVfZG9fcmVzZXQpOwotCiAvKgogICogaWRlX3dhaXRfbm90X2J1c3koKSB3YWl0cyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkZXZpY2Ugb24gdGhlIGh3aWYKICAqIHRvIHJlcG9ydCBhIG5vbi1idXN5IHN0YXR1cywgc2VlIGNvbW1lbnRzIGluIGlkZV9wcm9iZV9wb3J0KCkuCkBAIC0xMTg3LDcgKzUwMyw3IEBACiB7CiAJdTggc3RhdCA9IDA7CiAKLQl3aGlsZSh0aW1lb3V0LS0pIHsKKwl3aGlsZSAodGltZW91dC0tKSB7CiAJCS8qCiAJCSAqIFR1cm4gdGhpcyBpbnRvIGEgc2NoZWR1bGUoKSBzbGVlcCBvbmNlIEknbSBzdXJlCiAJCSAqIGFib3V0IGxvY2tpbmcgaXNzdWVzICgyLjUgd29yayA/KS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCAwOTUyNmEwLi5mNmM2ODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC01LDE2MyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICp1ZG1hX3N0cltdID0KLQkgeyAiVURNQS8xNiIsICJVRE1BLzI1IiwgICJVRE1BLzMzIiwgICJVRE1BLzQ0IiwKLQkgICAiVURNQS82NiIsICJVRE1BLzEwMCIsICJVRE1BLzEzMyIsICJVRE1BNyIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICptd2RtYV9zdHJbXSA9Ci0JeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqc3dkbWFfc3RyW10gPQotCXsgIlNXRE1BMCIsICJTV0RNQTEiLCAiU1dETUEyIiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKnBpb19zdHJbXSA9Ci0JeyAiUElPMCIsICJQSU8xIiwgIlBJTzIiLCAiUElPMyIsICJQSU80IiwgIlBJTzUiIH07Ci0KLS8qKgotICoJaWRlX3hmZXJfdmVyYm9zZQktCXJldHVybiBJREUgbW9kZSBuYW1lcwotICoJQG1vZGU6IHRyYW5zZmVyIG1vZGUKLSAqCi0gKglSZXR1cm5zIGEgY29uc3RhbnQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUgbW9kZQotICoJcmVxdWVzdGVkLgotICovCi0KLWNvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSkKLXsKLQljb25zdCBjaGFyICpzOwotCXU4IGkgPSBtb2RlICYgMHhmOwotCi0JaWYgKG1vZGUgPj0gWEZFUl9VRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1VETUFfNykKLQkJcyA9IHVkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9NV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfTVdfRE1BXzIpCi0JCXMgPSBtd2RtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX1NXX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9TV19ETUFfMikKLQkJcyA9IHN3ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfUElPXzAgJiYgbW9kZSA8PSBYRkVSX1BJT181KQotCQlzID0gcGlvX3N0cltpICYgMHg3XTsKLQllbHNlIGlmIChtb2RlID09IFhGRVJfUElPX1NMT1cpCi0JCXMgPSAiUElPIFNMT1ciOwotCWVsc2UKLQkJcyA9ICJYRkVSIEVSUk9SIjsKLQotCXJldHVybiBzOwotfQotRVhQT1JUX1NZTUJPTChpZGVfeGZlcl92ZXJib3NlKTsKLQotLyoqCi0gKglpZGVfcmF0ZV9maWx0ZXIJCS0JZmlsdGVyIHRyYW5zZmVyIG1vZGUKLSAqCUBkcml2ZTogSURFIGRldmljZQotICoJQHNwZWVkOiBkZXNpcmVkIHNwZWVkCi0gKgotICoJR2l2ZW4gdGhlIGF2YWlsYWJsZSB0cmFuc2ZlciBtb2RlcyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqCXRoZSBiZXN0IGF2YWlsYWJsZSBzcGVlZCBhdCBvciBiZWxvdyB0aGUgc3BlZWQgcmVxdWVzdGVkLgotICoKLSAqCVRPRE86IGNoZWNrIGRldmljZSBQSU8gY2FwYWJpbGl0aWVzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9yYXRlX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBtb2RlID0gaWRlX2ZpbmRfZG1hX21vZGUoZHJpdmUsIHNwZWVkKTsKLQotCWlmIChtb2RlID09IDApIHsKLQkJaWYgKGh3aWYtPnBpb19tYXNrKQotCQkJbW9kZSA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxICsgWEZFUl9QSU9fMDsKLQkJZWxzZQotCQkJbW9kZSA9IFhGRVJfUElPXzQ7Ci0JfQotCi0vKglwcmludGsoIiVzOiBtb2RlIDB4JTAyeCwgc3BlZWQgMHglMDJ4XG4iLCBfX2Z1bmNfXywgbW9kZSwgc3BlZWQpOyAqLwotCi0JcmV0dXJuIG1pbihzcGVlZCwgbW9kZSk7Ci19Ci0KLS8qKgotICoJaWRlX2dldF9iZXN0X3Bpb19tb2RlCS0JZ2V0IFBJTyBtb2RlIGZyb20gZHJpdmUKLSAqCUBkcml2ZTogZHJpdmUgdG8gY29uc2lkZXIKLSAqCUBtb2RlX3dhbnRlZDogcHJlZmVycmVkIG1vZGUKLSAqCUBtYXhfbW9kZTogaGlnaGVzdCBhbGxvd2VkIG1vZGUKLSAqCi0gKglUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgcmVjb21tZW5kZWQgUElPIHNldHRpbmdzIGZvciBhIGdpdmVuIGRyaXZlLAotICoJYmFzZWQgb24gdGhlIGRyaXZlLT5pZCBpbmZvcm1hdGlvbiBhbmQgdGhlIGlkZV9waW9fYmxhY2tsaXN0W10uCi0gKgotICoJRHJpdmUgUElPIG1vZGUgaXMgYXV0by1zZWxlY3RlZCBpZiAyNTUgaXMgcGFzc2VkIGFzIG1vZGVfd2FudGVkLgotICoJVGhpcyBpcyB1c2VkIGJ5IG1vc3QgY2hpcHNldCBzdXBwb3J0IG1vZHVsZXMgd2hlbiAiYXV0by10dW5pbmciLgotICovCi0KLXU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKLXsKLQl1MTYgKmlkID0gZHJpdmUtPmlkOwotCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKLQotCWlmIChtb2RlX3dhbnRlZCAhPSAyNTUpCi0JCXJldHVybiBtaW5fdCh1OCwgbW9kZV93YW50ZWQsIG1heF9tb2RlKTsKLQotCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCkgPT0gMCkKLQkJcGlvX21vZGUgPSBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7Ci0KLQlpZiAocGlvX21vZGUgIT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlzIG9uIFBJTyBibGFja2xpc3RcbiIsIGRyaXZlLT5uYW1lKTsKLQl9IGVsc2UgewotCQlwaW9fbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4OwotCQlpZiAocGlvX21vZGUgPiAyKSB7CS8qIDIgaXMgbWF4aW11bSBhbGxvd2VkIHRQSU8gdmFsdWUgKi8KLQkJCXBpb19tb2RlID0gMjsKLQkJCW92ZXJyaWRkZW4gPSAxOwotCQl9Ci0KLQkJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CSAgICAgIC8qIEFUQTI/ICovCi0JCQlpZiAoYXRhX2lkX2hhc19pb3JkeShpZCkpIHsKLQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA3KSB7Ci0JCQkJCW92ZXJyaWRkZW4gPSAwOwotCQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA0KQotCQkJCQkJcGlvX21vZGUgPSA1OwotCQkJCQllbHNlIGlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDIpCi0JCQkJCQlwaW9fbW9kZSA9IDQ7Ci0JCQkJCWVsc2UKLQkJCQkJCXBpb19tb2RlID0gMzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAob3ZlcnJpZGRlbikKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0UElPID4gMiwgYXNzdW1pbmcgdFBJTyA9IDJcbiIsCi0JCQkJCSBkcml2ZS0+bmFtZSk7Ci0JfQotCi0JaWYgKHBpb19tb2RlID4gbWF4X21vZGUpCi0JCXBpb19tb2RlID0gbWF4X21vZGU7Ci0KLQlyZXR1cm4gcGlvX21vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZ2V0X2Jlc3RfcGlvX21vZGUpOwotCi0vKiByZXFfcGlvID09ICIyNTUiIGZvciBhdXRvLXR1bmUgKi8KLXZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByZXFfcGlvKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXU4IGhvc3RfcGlvLCBwaW87Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQotCQlyZXR1cm47Ci0KLQlCVUdfT04oaHdpZi0+cGlvX21hc2sgPT0gMHgwMCk7Ci0KLQlob3N0X3BpbyA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxOwotCi0JcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvLCBob3N0X3Bpbyk7Ci0KLQkvKgotCSAqIFRPRE86Ci0JICogLSByZXBvcnQgZGV2aWNlIG1heCBQSU8gbW9kZQotCSAqIC0gY2hlY2sgcmVxX3BpbyAhPSAyNTUgYWdhaW5zdCBkZXZpY2UgbWF4IFBJTyBtb2RlCi0JICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0IG1heCBQSU8lZCB3YW50ZWQgUElPJWQlcyBzZWxlY3RlZCBQSU8lZFxuIiwKLQkJCSAgZHJpdmUtPm5hbWUsIGhvc3RfcGlvLCByZXFfcGlvLAotCQkJICByZXFfcGlvID09IDI1NSA/ICIoYXV0by10dW5lKSIgOiAiIiwgcGlvKTsKLQotCSh2b2lkKWlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOwotCiAvKioKICAqCWlkZV90b2dnbGVfYm91bmNlCS0JaGFuZGxlIGJvdW5jZSBidWZmZXJpbmcKICAqCUBkcml2ZTogZHJpdmUgdG8gdXBkYXRlCkBAIC0xODgsODkgKzMxLDYgQEAKIAkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChkcml2ZS0+cXVldWUsIGFkZHIpOwogfQogCi1pbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogVE9ETzogdGVtcG9yYXJ5IGhhY2sgZm9yIHNvbWUgbGVnYWN5IGhvc3QgZHJpdmVycyB0aGF0IGRpZG4ndAotCSAqIHNldCB0cmFuc2ZlciBtb2RlIG9uIHRoZSBkZXZpY2UgaW4gLT5zZXRfcGlvX21vZGUgbWV0aG9kLi4uCi0JICovCi0JaWYgKHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkgewotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKLQkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQotCQkJcmV0dXJuIC0xOwotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOwotCX0KLX0KLQotaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7Ci0JCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKLQkJCXJldHVybiAtMTsKLQkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOwotCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9kbWFfbW9kZSk7Ci0KLS8qKgotICoJaWRlX3NldF94ZmVyX3JhdGUJLQlzZXQgdHJhbnNmZXIgcmF0ZQotICoJQGRyaXZlOiBkcml2ZSB0byBzZXQKLSAqCUByYXRlOiBzcGVlZCB0byBhdHRlbXB0IHRvIHNldAotICoKLSAqCUdlbmVyYWwgaGVscGVyIGZvciBzZXR0aW5nIHRoZSBzcGVlZCBvZiBhbiBJREUgZGV2aWNlLiBUaGlzCi0gKglmdW5jdGlvbiBrbm93cyBhYm91dCB1c2VyIGVuZm9yY2VkIGxpbWl0cyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCi0gKgl3aGljaCAtPnNldF9waW9fbW9kZS8tPnNldF9kbWFfbW9kZSBkb2VzIG5vdC4KLSAqLwotCi1pbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuIC0xOwotCi0JcmF0ZSA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgcmF0ZSk7Ci0KLQlCVUdfT04ocmF0ZSA8IFhGRVJfUElPXzApOwotCi0JaWYgKHJhdGUgPj0gWEZFUl9QSU9fMCAmJiByYXRlIDw9IFhGRVJfUElPXzUpCi0JCXJldHVybiBpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCByYXRlKTsKLQotCXJldHVybiBpZGVfc2V0X2RtYV9tb2RlKGRyaXZlLCByYXRlKTsKLX0KLQogc3RhdGljIHZvaWQgaWRlX2R1bXBfb3Bjb2RlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwppbmRleCBjODc1YTk1Li5mMzBlNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKQEAgLTYwLDYgKzYxLDMwIEBACiAJcmV0dXJuOwogfQogCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3BhcmtfdW5wYXJrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCWlmIChycS0+Y21kWzBdID09IFJFUV9QQVJLX0hFQURTKSB7CisJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKKwkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CisJCXRmLT5mZWF0dXJlID0gMHg0NDsKKwkJdGYtPmxiYWwgPSAweDRjOworCQl0Zi0+bGJhbSA9IDB4NGU7CisJCXRmLT5sYmFoID0gMHg1NTsKKwkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLworCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOworCisJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCXRhc2sucnEgPSBycTsKKwlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7Cit9CisKIHNzaXplX3QgaWRlX3Bhcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCmluZGV4IGJkZGFlMmIuLjYxMTExZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jCkBAIC0zMyw4ICszMyw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsX2dlbmVyaWNfaWRlLCBpZGVfZ2VuZXJpY19hbGwsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbGxfZ2VuZXJpY19pZGUsICJJREUgZ2VuZXJpYyB3aWxsIGNsYWltIGFsbCB1bmtub3duIFBDSSBJREUgc3RvcmFnZSBjb250cm9sbGVycy4iKTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1VNQyAoSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUykKLQogI2RlZmluZSBERUNMQVJFX0dFTkVSSUNfUENJX0RFVihleHRyYV9mbGFncykgXAogCXsgXAogCQkubmFtZQkJPSBEUlZfTkFNRSwgXApAQCAtNjEsNyArNTksNyBAQAogCS8qICAyOiBTQU1VUkFJIC8gSFQ2NTY1IC8gSElOVF9JREUgKi8KIAlERUNMQVJFX0dFTkVSSUNfUENJX0RFVigwKSwKIAkvKiAgMzogVU04NjczRiAvIFVNODg4NkEgLyBVTTg4ODZCRiAqLwotCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR1NfVU1DKSwKKwlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdfTk9fRE1BKSwKIAkvKiAgNDogVklBX0lERSAvIE9QVEk2MjFWIC8gUGljY29sbzAxMHsyLDMsNX0gKi8KIAlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdfTk9fQVVUT0RNQSksCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggZWU4ZTNlNy4uOTc0MDY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTE4MSwxNiArMTgxLDE2IEBACiAgKglkb19pZGVudGlmeQktCWlkZW50aWZ5IGEgZHJpdmUKICAqCUBkcml2ZTogZHJpdmUgdG8gaWRlbnRpZnkgCiAgKglAY21kOiBjb21tYW5kIHVzZWQKKyAqCUBpZDogYnVmZmVyIGZvciBJREVOVElGWSBkYXRhCiAgKgogICoJQ2FsbGVkIHdoZW4gd2UgaGF2ZSBpc3N1ZWQgYSBkcml2ZSBpZGVudGlmeSBjb21tYW5kIHRvCiAgKglyZWFkIGFuZCBwYXJzZSB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBydW4gd2l0aAogICoJaW50ZXJydXB0cyBkaXNhYmxlZC4gCiAgKi8KIAotc3RhdGljIHZvaWQgZG9faWRlbnRpZnkoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCitzdGF0aWMgdm9pZCBkb19pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgdTE2ICppZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTE2ICppZCA9IGRyaXZlLT5pZDsKIAljaGFyICptID0gKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJzd2FwID0gMTsKQEAgLTIzMywxNiArMjMzLDYgQEAKIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ERUFEOwogCi0JLyoKLQkgKiBDaGVjayBmb3IgYW4gQVRBUEkgZGV2aWNlCi0JICovCi0JaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKQotCQlpZGVfY2xhc3NpZnlfYXRhcGlfZGV2KGRyaXZlKTsKLQllbHNlCi0JLyoKLQkgKiBOb3QgYW4gQVRBUEkgZGV2aWNlOiBsb29rcyBsaWtlIGEgInJlZ3VsYXIiIGhhcmQgZGlzawotCSAqLwotCQlpZGVfY2xhc3NpZnlfYXRhX2Rldihkcml2ZSk7CiAJcmV0dXJuOwogZXJyX21pc2M6CiAJa2ZyZWUoaWQpOwpAQCAtMjUwLDIxICsyNDAsMTkgQEAKIH0KIAogLyoqCi0gKglhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5CS0Jc2VuZCBhdGEvYXRhcGkgaWRlbnRpZnkKKyAqCWlkZV9kZXZfcmVhZF9pZAktCXNlbmQgQVRBL0FUQVBJIElERU5USUZZIGNvbW1hbmQKICAqCUBkcml2ZTogZHJpdmUgdG8gaWRlbnRpZnkKICAqCUBjbWQ6IGNvbW1hbmQgdG8gdXNlCisgKglAaWQ6IGJ1ZmZlciBmb3IgSURFTlRJRlkgZGF0YQogICoKLSAqCXRyeV90b19pZGVudGlmeSgpIHNlbmRzIGFuIEFUQShQSSkgSURFTlRJRlkgcmVxdWVzdCB0byBhIGRyaXZlCi0gKglhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuICBJdCBhbHNvIG1vbml0b3JzIGlycXMgd2hpbGUgdGhpcyBpcwotICoJaGFwcGVuaW5nLCBpbiBob3BlIG9mIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgd2hpY2ggb25lIGlzCi0gKgliZWluZyB1c2VkIGJ5IHRoZSBpbnRlcmZhY2UuCisgKglTZW5kcyBhbiBBVEEoUEkpIElERU5USUZZIHJlcXVlc3QgdG8gYSBkcml2ZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuCiAgKgogICoJUmV0dXJuczoJMCAgZGV2aWNlIHdhcyBpZGVudGlmaWVkCiAgKgkJCTEgIGRldmljZSB0aW1lZC1vdXQgKG5vIHJlc3BvbnNlIHRvIGlkZW50aWZ5IHJlcXVlc3QpCiAgKgkJCTIgIGRldmljZSBhYm9ydGVkIHRoZSBjb21tYW5kIChyZWZ1c2VkIHRvIGlkZW50aWZ5IGl0c2VsZikKICAqLwogCi1zdGF0aWMgaW50IGFjdHVhbF90cnlfdG9faWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQoraW50IGlkZV9kZXZfcmVhZF9pZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgdTE2ICppZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CkBAIC0yNzMsNiArMjYxLDEzIEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXU4IHMgPSAwLCBhID0gMDsKIAorCS8qCisJICogRGlzYWJsZSBkZXZpY2UgSVJRLiAgT3RoZXJ3aXNlIHdlJ2xsIGdldCBzcHVyaW91cyBpbnRlcnJ1cHRzCisJICogZHVyaW5nIHRoZSBpZGVudGlmeSBwaGFzZSB0aGF0IHRoZSBJUlEgaGFuZGxlciBpc24ndCBleHBlY3RpbmcuCisJICovCisJaWYgKGlvX3BvcnRzLT5jdGxfYWRkcikKKwkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOworCiAJLyogdGFrZSBhIGRlZXAgYnJlYXRoICovCiAJbXNsZWVwKDUwKTsKIApAQCAtMzE3LDcgKzMxMiw3IEBACiAKIAlpZiAoT0tfU1RBVChzLCBBVEFfRFJRLCBCQURfUl9TVEFUKSkgewogCQkvKiBkcml2ZSByZXR1cm5lZCBJRCAqLwotCQlkb19pZGVudGlmeShkcml2ZSwgY21kKTsKKwkJZG9faWRlbnRpZnkoZHJpdmUsIGNtZCwgaWQpOwogCQkvKiBkcml2ZSByZXNwb25kZWQgd2l0aCBJRCAqLwogCQlyYyA9IDA7CiAJCS8qIGNsZWFyIGRyaXZlIElSUSAqLwpAQCAtMzI5LDYzICszMjQsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyoqCi0gKgl0cnlfdG9faWRlbnRpZnkJLQl0cnkgdG8gaWRlbnRpZnkgYSBkcml2ZQotICoJQGRyaXZlOiBkcml2ZSB0byBwcm9iZQotICoJQGNtZDogY29tbWFuZCB0byB1c2UKLSAqCi0gKglJc3N1ZSB0aGUgaWRlbnRpZnkgY29tbWFuZCBhbmQgdGhlbiBkbyBJUlEgcHJvYmluZyB0bwotICoJY29tcGxldGUgdGhlIGlkZW50aWZpY2F0aW9uIHdoZW4gbmVlZGVkIGJ5IGZpbmRpbmcgdGhlCi0gKglJUlEgdGhlIGRyaXZlIGlzIGF0dGFjaGVkIHRvCi0gKi8KLSAKLXN0YXRpYyBpbnQgdHJ5X3RvX2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQlpbnQgcmV0dmFsOwotCWludCBhdXRvcHJvYmUgPSAwOwotCXVuc2lnbmVkIGxvbmcgY29va2llID0gMDsKLQotCS8qCi0JICogRGlzYWJsZSBkZXZpY2UgaXJxIHVubGVzcyB3ZSBuZWVkIHRvCi0JICogcHJvYmUgZm9yIGl0LiBPdGhlcndpc2Ugd2UnbGwgZ2V0IHNwdXJpb3VzCi0JICogaW50ZXJydXB0cyBkdXJpbmcgdGhlIGlkZW50aWZ5LXBoYXNlIHRoYXQKLQkgKiB0aGUgaXJxIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgotCSAqLwotCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkcikgewotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJYXV0b3Byb2JlID0gMTsKLQkJCWNvb2tpZSA9IHByb2JlX2lycV9vbigpOwotCQl9Ci0JCXRwX29wcy0+c2V0X2lycShod2lmLCBhdXRvcHJvYmUpOwotCX0KLQotCXJldHZhbCA9IGFjdHVhbF90cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7Ci0KLQlpZiAoYXV0b3Byb2JlKSB7Ci0JCWludCBpcnE7Ci0KLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwotCQkvKiBjbGVhciBkcml2ZSBJUlEgKi8KLQkJKHZvaWQpdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQkJdWRlbGF5KDUpOwotCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGNvb2tpZSk7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlpZiAoaXJxID4gMCkgewotCQkJCWh3aWYtPmlycSA9IGlycTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTW1tbS4uIG11bHRpcGxlIElSUXMuLgotCQkJCSAqIGRvbid0IGtub3cgd2hpY2ggd2FzIG91cnMKLQkJCQkgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJUlEgcHJvYmUgZmFpbGVkICgweCVseClcbiIsCi0JCQkJCWRyaXZlLT5uYW1lLCBjb29raWUpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBpZGVfYnVzeV9zbGVlcChpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBhbHRzdGF0dXMpCiB7CiAJdTggc3RhdDsKQEAgLTQ0MCw2ICszNzgsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOworCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJaW50IHJjOwogCXU4IHByZXNlbnQgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpLCBzdGF0OwogCkBAIC00NzUsMTEgKzQxNCwxMCBAQAogCiAJaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEFUQV9CVVNZKSB8fAogCSAgICBwcmVzZW50IHx8IGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKSB7Ci0JCS8qIHNlbmQgY21kIGFuZCB3YWl0ICovCi0JCWlmICgocmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCkpKSB7CisJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKKwkJaWYgKHJjKQogCQkJLyogZmFpbGVkOiB0cnkgYWdhaW4gKi8KLQkJCXJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLGNtZCk7Ci0JCX0KKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKIAogCQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIApAQCAtNDk0LDcgKzQzMiw3IEBACiAJCQltc2xlZXAoNTApOwogCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwogCQkJKHZvaWQpaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDApOwotCQkJcmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7CisJCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CiAJCX0KIAogCQkvKiBlbnN1cmUgZHJpdmUgSVJRIGlzIGNsZWFyICovCkBAIC01MTcsMzcgKzQ1NSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKgotICoKLSAqLwotc3RhdGljIHZvaWQgZW5hYmxlX25lc3QgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQl1OCBzdGF0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsaW5nICVzIC0tICIsCi0JCWh3aWYtPm5hbWUsIChjaGFyICopJmRyaXZlLT5pZFtBVEFfSURfUFJPRF0pOwotCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQltc2xlZXAoNTApOwotCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9FWEFCWVRFX0VOQUJMRV9ORVNUKTsKLQotCWlmIChpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMCkpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkICh0aW1lb3V0KVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltc2xlZXAoNTApOwotCi0Jc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgMCwgQkFEX1NUQVQpKQotCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHN0YXR1cyA9IDB4JTAyeClcbiIsIHN0YXQpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAic3VjY2Vzc1xuIik7Ci19Ci0KIC8qKgogICoJcHJvYmVfZm9yX2RyaXZlcwktCXVwcGVyIGxldmVsIGRyaXZlIHByb2JlCiAgKglAZHJpdmU6IGRyaXZlIHRvIHByb2JlIGZvcgpAQCAtNTYzLDYgKzQ3MCw4IEBACiBzdGF0aWMgdTggcHJvYmVfZm9yX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAljaGFyICptOworCWludCByYzsKKwl1OCBjbWQ7CiAKIAkvKgogCSAqCUluIG9yZGVyIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSB3ZSBoYXZlIGFuIGlkCkBAIC01ODYsMjEgKzQ5NSwxOSBAQAogCiAJLyogc2tpcCBwcm9iaW5nPyAqLwogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSA9PSAwKSB7Ci1yZXRyeToKIAkJLyogaWYgIShzdWNjZXNzfHx0aW1lZC1vdXQpICovCi0JCWlmIChkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEEpID49IDIpCisJCWNtZCA9IEFUQV9DTURfSURfQVRBOworCQlyYyA9IGRvX3Byb2JlKGRyaXZlLCBjbWQpOworCQlpZiAocmMgPj0gMikgewogCQkJLyogbG9vayBmb3IgQVRBUEkgZGV2aWNlICovCi0JCQkodm9pZClkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEFQSSk7CisJCQljbWQgPSBBVEFfQ01EX0lEX0FUQVBJOworCQkJcmMgPSBkb19wcm9iZShkcml2ZSwgY21kKTsKKwkJfQogCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJLyogZHJpdmUgbm90IGZvdW5kICovCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAoc3Ryc3RyKG0sICJFIFggQSBCIFkgVCBFIE4gRSBTIFQiKSkgewotCQkJZW5hYmxlX25lc3QoZHJpdmUpOwotCQkJZ290byByZXRyeTsKLQkJfQotCiAJCS8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZD8gKi8KIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApIHsKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spIHsKQEAgLTYxNCw4ICs1MjEsMTIgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBkZXZpY2Ugb24gYnVzIHJlZnVzZWQgaWRlbnRpZmljYXRpb24uIElnbm9yaW5nLlxuIiwgZHJpdmUtPm5hbWUpOwogCQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKQorCQkJCWlkZV9jbGFzc2lmeV9hdGFwaV9kZXYoZHJpdmUpOworCQkJZWxzZQorCQkJCWlkZV9jbGFzc2lmeV9hdGFfZGV2KGRyaXZlKTsKIAkJfQotCQkvKiBkcml2ZSB3YXMgZm91bmQgKi8KIAl9CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKQEAgLTc3OSw3ICs2OTAsNiBAQAogc3RhdGljIGludCBpZGVfcHJvYmVfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewogCWlkZV9kcml2ZV90ICpkcml2ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnFkOwogCWludCBpLCByYyA9IC1FTk9ERVY7CiAKQEAgLTc5Nyw5ICs3MDcsNiBAQAogCWlmIChpcnFkKQogCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOwogCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7Ci0KIAlpZiAoaWRlX3BvcnRfd2FpdF9yZWFkeShod2lmKSA9PSAtRUJVU1kpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogV2FpdCBmb3IgcmVhZHkgZmFpbGVkIGJlZm9yZSBwcm9iZSAhXG4iLCBod2lmLT5uYW1lKTsKIApAQCAtODEzLDggKzcyMCw2IEBACiAJCQlyYyA9IDA7CiAJfQogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCiAJLyoKIAkgKiBVc2UgY2FjaGVkIElSUSBudW1iZXIuIEl0IG1pZ2h0IGJlIChhbmQgaXMuLi4pIGNoYW5nZWQgYnkgcHJvYmUKIAkgKiBjb2RlIGFib3ZlCkBAIC04MzEsMjkgKzczNiwxOCBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnF1aXJrcHJvYykKLQkJCQlwb3J0X29wcy0+cXVpcmtwcm9jKGRyaXZlKTsKLQkJfQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQorCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7CiAJfQogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKIAotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05JQ0UxOwogCi0JCQlpZiAoaHdpZi0+ZG1hX29wcykKLQkJCQlpZGVfc2V0X2RtYShkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKLQkJZWxzZQotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PX0lPXzMyQklUOworCQlpZiAoaHdpZi0+ZG1hX29wcykKKwkJCWlkZV9zZXRfZG1hKGRyaXZlKTsKIAl9CiB9CiAKQEAgLTkyNCwxMCArODE4LDcgQEAKIAlpbnQgaSwgaiA9IDA7CiAKIAltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7Ci0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQlpZiAoaWRlX2luaXRfcXVldWUoZHJpdmUpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlkZTogZmFpbGVkIHRvIGluaXQgJXNcbiIsCiAJCQkJCWRyaXZlLT5uYW1lKTsKQEAgLTk1MywxMyArODQ0LDYgQEAKIAlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyOwogCWludCBzYSA9IDA7CiAKLQltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmh3aWYtPmxvY2spOwotCi0JaW5pdF90aW1lcigmaHdpZi0+dGltZXIpOwotCWh3aWYtPnRpbWVyLmZ1bmN0aW9uID0gJmlkZV90aW1lcl9leHBpcnk7Ci0JaHdpZi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3aWY7Ci0KIAlpcnFfaGFuZGxlciA9IGh3aWYtPmhvc3QtPmlycV9oYW5kbGVyOwogCWlmIChpcnFfaGFuZGxlciA9PSBOVUxMKQogCQlpcnFfaGFuZGxlciA9IGlkZV9pbnRyOwpAQCAtOTk3LDEwICs4ODEsOCBAQAogCQlwcmludGsoS0VSTl9DT05UICIgKHNlcmlhbGl6ZWQpIik7CiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAotCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCXJldHVybiAwOwogb3V0X3VwOgotCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDk5LDE0ICs5ODEsOSBAQAogCiBzdGF0aWMgaW50IGh3aWZfaW5pdChpZGVfaHdpZl90ICpod2lmKQogewotCWludCBvbGRfaXJxOwotCiAJaWYgKCFod2lmLT5pcnEpIHsKLQkJaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCBubyBJUlFcbiIsIGh3aWYtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIG5vIElSUVxuIiwgaHdpZi0+bmFtZSk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoaHdpZi0+bWFqb3IsIGh3aWYtPm5hbWUpKQpAQCAtMTEyNCwyOSArMTAwMSwxMiBAQAogCiAJc2dfaW5pdF90YWJsZShod2lmLT5zZ190YWJsZSwgaHdpZi0+c2dfbWF4X25lbnRzKTsKIAkKLQlpZiAoaW5pdF9pcnEoaHdpZikgPT0gMCkKLQkJZ290byBkb25lOwotCi0Jb2xkX2lycSA9IGh3aWYtPmlycTsKLQkvKgotCSAqCUl0IGZhaWxlZCB0byBpbml0aWFsaXNlLiBGaW5kIHRoZSBkZWZhdWx0IElSUSBmb3IgCi0JICoJdGhpcyBwb3J0IGFuZCB0cnkgdGhhdC4KLQkgKi8KLQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWlmICghaHdpZi0+aXJxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKLQkJCWh3aWYtPm5hbWUsIG9sZF9pcnEpOwotCQlnb3RvIG91dDsKLQl9CiAJaWYgKGluaXRfaXJxKGh3aWYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHByb2JlZCBJUlEgJWQgYW5kIGRlZmF1bHQgSVJRICVkIGZhaWxlZFxuIiwKLQkJCWh3aWYtPm5hbWUsIG9sZF9pcnEsIGh3aWYtPmlycSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCWh3aWYtPm5hbWUsIGh3aWYtPmlycSk7CiAJCWdvdG8gb3V0OwogCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcHJvYmVkIElSUSAlZCBmYWlsZWQsIHVzaW5nIGRlZmF1bHRcbiIsCi0JCWh3aWYtPm5hbWUsIGh3aWYtPmlycSk7CiAKLWRvbmU6CiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihod2lmLT5tYWpvciwgMCksIE1BWF9EUklWRVMgPDwgUEFSVE5fQklUUywKIAkJCSAgICBUSElTX01PRFVMRSwgYXRhX3Byb2JlLCBhdGFfbG9jaywgaHdpZik7CiAJcmV0dXJuIDE7CkBAIC0xMTYxLDEzICsxMDIxLDEwIEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gJmRyaXZlLT5nZW5kZXY7CiAJCWludCByZXQ7CiAKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQljb250aW51ZTsKLQogCQlkZXZfc2V0X25hbWUoZGV2LCAiJXUuJXUiLCBod2lmLT5pbmRleCwgaSk7CiAJCWRldi0+cGFyZW50ID0gJmh3aWYtPmdlbmRldjsKIAkJZGV2LT5idXMgPSAmaWRlX2J1c190eXBlOwpAQCAtMTE5Miw2ICsxMDQ5LDggQEAKIAogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19JT18zMkJJVCkKIAkJCWRyaXZlLT5pb18zMmJpdCA9IDE7CisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKQorCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fSU9fMzJCSVQ7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1VOTUFTS19JUlFTKQogCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19VTk1BU0tfSVJRUykKQEAgLTEyMTMsMTAgKzEwNzIsNiBAQAogCWlmIChkLT5pbml0X2lvcHMpCiAJCWQtPmluaXRfaW9wcyhod2lmKTsKIAotCWlmICgoIWh3aWYtPmlycSAmJiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19MRUdBQ1lfSVJRUykpIHx8Ci0JICAgIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTKSkKLQkJaHdpZi0+aXJxID0gcG9ydCA/IDE1IDogMTQ7Ci0KIAkvKiAtPmhvc3RfZmxhZ3MgbWF5IGJlIHNldCBieSAtPmluaXRfaW9wcyAob3IgZXZlbiBlYXJsaWVyLi4uKSAqLwogCWh3aWYtPmhvc3RfZmxhZ3MgfD0gZC0+aG9zdF9mbGFnczsKIAlod2lmLT5waW9fbWFzayA9IGQtPnBpb19tYXNrOwpAQCAtMTMxNyw2ICsxMTcyLDEyIEBACiAJaHdpZi0+bmFtZVsyXQk9ICdlJzsKIAlod2lmLT5uYW1lWzNdCT0gJzAnICsgaW5kZXg7CiAKKwlzcGluX2xvY2tfaW5pdCgmaHdpZi0+bG9jayk7CisKKwlpbml0X3RpbWVyKCZod2lmLT50aW1lcik7CisJaHdpZi0+dGltZXIuZnVuY3Rpb24gPSAmaWRlX3RpbWVyX2V4cGlyeTsKKwlod2lmLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHdpZjsKKwogCWluaXRfY29tcGxldGlvbigmaHdpZi0+Z2VuZGV2X3JlbF9jb21wKTsKIAogCWh3aWYtPnRwX29wcyA9ICZkZWZhdWx0X3RwX29wczsKQEAgLTE1NjcsNyArMTQyOCw3IEBACiAKIAkJaisrOwogCi0JCWlkZV9hY3BpX2luaXQoaHdpZik7CisJCWlkZV9hY3BpX2luaXRfcG9ydChod2lmKTsKIAogCQlpZiAoaHdpZi0+cHJlc2VudCkKIAkJCWlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwpAQCAtMTYyNCwxMSArMTQ4NSw5IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCWludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwotCQl9CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmRyaXZlLT5nZW5kZXYpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IGE3YjkyODcuLjQxN2NkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJaW50IGk7CiAKIAlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDAgfHwgZHJpdmUtPnByb2MpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJZHJpdmUtPnByb2MgPSBwcm9jX21rZGlyKGRyaXZlLT5uYW1lLCBwYXJlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTBmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKQEAgLTAsMCArMSwyNDYgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqdWRtYV9zdHJbXSA9CisJIHsgIlVETUEvMTYiLCAiVURNQS8yNSIsICAiVURNQS8zMyIsICAiVURNQS80NCIsCisJICAgIlVETUEvNjYiLCAiVURNQS8xMDAiLCAiVURNQS8xMzMiLCAiVURNQTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXdkbWFfc3RyW10gPQorCXsgIk1XRE1BMCIsICJNV0RNQTEiLCAiTVdETUEyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnN3ZG1hX3N0cltdID0KKwl7ICJTV0RNQTAiLCAiU1dETUExIiwgIlNXRE1BMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwaW9fc3RyW10gPQorCXsgIlBJTzAiLCAiUElPMSIsICJQSU8yIiwgIlBJTzMiLCAiUElPNCIsICJQSU81IiB9OworCisvKioKKyAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKKyAqCUBtb2RlOiB0cmFuc2ZlciBtb2RlCisgKgorICoJUmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZGUKKyAqCXJlcXVlc3RlZC4KKyAqLworCitjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IG1vZGUpCit7CisJY29uc3QgY2hhciAqczsKKwl1OCBpID0gbW9kZSAmIDB4ZjsKKworCWlmIChtb2RlID49IFhGRVJfVURNQV8wICYmIG1vZGUgPD0gWEZFUl9VRE1BXzcpCisJCXMgPSB1ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfTVdfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX01XX0RNQV8yKQorCQlzID0gbXdkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9TV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfU1dfRE1BXzIpCisJCXMgPSBzd2RtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNSkKKwkJcyA9IHBpb19zdHJbaSAmIDB4N107CisJZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQorCQlzID0gIlBJTyBTTE9XIjsKKwllbHNlCisJCXMgPSAiWEZFUiBFUlJPUiI7CisKKwlyZXR1cm4gczsKK30KK0VYUE9SVF9TWU1CT0woaWRlX3hmZXJfdmVyYm9zZSk7CisKKy8qKgorICoJaWRlX2dldF9iZXN0X3Bpb19tb2RlCS0JZ2V0IFBJTyBtb2RlIGZyb20gZHJpdmUKKyAqCUBkcml2ZTogZHJpdmUgdG8gY29uc2lkZXIKKyAqCUBtb2RlX3dhbnRlZDogcHJlZmVycmVkIG1vZGUKKyAqCUBtYXhfbW9kZTogaGlnaGVzdCBhbGxvd2VkIG1vZGUKKyAqCisgKglUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgcmVjb21tZW5kZWQgUElPIHNldHRpbmdzIGZvciBhIGdpdmVuIGRyaXZlLAorICoJYmFzZWQgb24gdGhlIGRyaXZlLT5pZCBpbmZvcm1hdGlvbiBhbmQgdGhlIGlkZV9waW9fYmxhY2tsaXN0W10uCisgKgorICoJRHJpdmUgUElPIG1vZGUgaXMgYXV0by1zZWxlY3RlZCBpZiAyNTUgaXMgcGFzc2VkIGFzIG1vZGVfd2FudGVkLgorICoJVGhpcyBpcyB1c2VkIGJ5IG1vc3QgY2hpcHNldCBzdXBwb3J0IG1vZHVsZXMgd2hlbiAiYXV0by10dW5pbmciLgorICovCisKK3U4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKK3sKKwl1MTYgKmlkID0gZHJpdmUtPmlkOworCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKKworCWlmIChtb2RlX3dhbnRlZCAhPSAyNTUpCisJCXJldHVybiBtaW5fdCh1OCwgbW9kZV93YW50ZWQsIG1heF9tb2RlKTsKKworCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCkgPT0gMCkKKwkJcGlvX21vZGUgPSBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7CisKKwlpZiAocGlvX21vZGUgIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlzIG9uIFBJTyBibGFja2xpc3RcbiIsIGRyaXZlLT5uYW1lKTsKKwl9IGVsc2UgeworCQlwaW9fbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4OworCQlpZiAocGlvX21vZGUgPiAyKSB7CS8qIDIgaXMgbWF4aW11bSBhbGxvd2VkIHRQSU8gdmFsdWUgKi8KKwkJCXBpb19tb2RlID0gMjsKKwkJCW92ZXJyaWRkZW4gPSAxOworCQl9CisKKwkJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CSAgICAgIC8qIEFUQTI/ICovCisJCQlpZiAoYXRhX2lkX2hhc19pb3JkeShpZCkpIHsKKwkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA3KSB7CisJCQkJCW92ZXJyaWRkZW4gPSAwOworCQkJCQlpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiA0KQorCQkJCQkJcGlvX21vZGUgPSA1OworCQkJCQllbHNlIGlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDIpCisJCQkJCQlwaW9fbW9kZSA9IDQ7CisJCQkJCWVsc2UKKwkJCQkJCXBpb19tb2RlID0gMzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAob3ZlcnJpZGRlbikKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0UElPID4gMiwgYXNzdW1pbmcgdFBJTyA9IDJcbiIsCisJCQkJCSBkcml2ZS0+bmFtZSk7CisJfQorCisJaWYgKHBpb19tb2RlID4gbWF4X21vZGUpCisJCXBpb19tb2RlID0gbWF4X21vZGU7CisKKwlyZXR1cm4gcGlvX21vZGU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZ2V0X2Jlc3RfcGlvX21vZGUpOworCitpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qCisJICogVE9ETzogdGVtcG9yYXJ5IGhhY2sgZm9yIHNvbWUgbGVnYWN5IGhvc3QgZHJpdmVycyB0aGF0IGRpZG4ndAorCSAqIHNldCB0cmFuc2ZlciBtb2RlIG9uIHRoZSBkZXZpY2UgaW4gLT5zZXRfcGlvX21vZGUgbWV0aG9kLi4uCisJICovCisJaWYgKHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkgeworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKKwkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQorCQkJcmV0dXJuIC0xOworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKKwkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOworCX0KK30KKworaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCisJCXJldHVybiAwOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CisJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOworCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9kbWFfbW9kZSk7CisKKy8qIHJlcV9waW8gPT0gIjI1NSIgZm9yIGF1dG8tdHVuZSAqLwordm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJlcV9waW8pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJdTggaG9zdF9waW8sIHBpbzsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybjsKKworCUJVR19PTihod2lmLT5waW9fbWFzayA9PSAweDAwKTsKKworCWhvc3RfcGlvID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDE7CisKKwlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8sIGhvc3RfcGlvKTsKKworCS8qCisJICogVE9ETzoKKwkgKiAtIHJlcG9ydCBkZXZpY2UgbWF4IFBJTyBtb2RlCisJICogLSBjaGVjayByZXFfcGlvICE9IDI1NSBhZ2FpbnN0IGRldmljZSBtYXggUElPIG1vZGUKKwkgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3QgbWF4IFBJTyVkIHdhbnRlZCBQSU8lZCVzIHNlbGVjdGVkIFBJTyVkXG4iLAorCQkJICBkcml2ZS0+bmFtZSwgaG9zdF9waW8sIHJlcV9waW8sCisJCQkgIHJlcV9waW8gPT0gMjU1ID8gIihhdXRvLXR1bmUpIiA6ICIiLCBwaW8pOworCisJKHZvaWQpaWRlX3NldF9waW9fbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X3Bpbyk7CisKKy8qKgorICoJaWRlX3JhdGVfZmlsdGVyCQktCWZpbHRlciB0cmFuc2ZlciBtb2RlCisgKglAZHJpdmU6IElERSBkZXZpY2UKKyAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAorICoKKyAqCUdpdmVuIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgbW9kZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKgl0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQgYXQgb3IgYmVsb3cgdGhlIHNwZWVkIHJlcXVlc3RlZC4KKyAqCisgKglUT0RPOiBjaGVjayBkZXZpY2UgUElPIGNhcGFiaWxpdGllcworICovCisKK3N0YXRpYyB1OCBpZGVfcmF0ZV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggbW9kZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCBzcGVlZCk7CisKKwlpZiAobW9kZSA9PSAwKSB7CisJCWlmIChod2lmLT5waW9fbWFzaykKKwkJCW1vZGUgPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMSArIFhGRVJfUElPXzA7CisJCWVsc2UKKwkJCW1vZGUgPSBYRkVSX1BJT180OworCX0KKworLyoJcHJpbnRrKCIlczogbW9kZSAweCUwMngsIHNwZWVkIDB4JTAyeFxuIiwgX19mdW5jX18sIG1vZGUsIHNwZWVkKTsgKi8KKworCXJldHVybiBtaW4oc3BlZWQsIG1vZGUpOworfQorCisvKioKKyAqCWlkZV9zZXRfeGZlcl9yYXRlCS0Jc2V0IHRyYW5zZmVyIHJhdGUKKyAqCUBkcml2ZTogZHJpdmUgdG8gc2V0CisgKglAcmF0ZTogc3BlZWQgdG8gYXR0ZW1wdCB0byBzZXQKKyAqCisgKglHZW5lcmFsIGhlbHBlciBmb3Igc2V0dGluZyB0aGUgc3BlZWQgb2YgYW4gSURFIGRldmljZS4gVGhpcworICoJZnVuY3Rpb24ga25vd3MgYWJvdXQgdXNlciBlbmZvcmNlZCBsaW1pdHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbgorICoJd2hpY2ggLT5zZXRfcGlvX21vZGUvLT5zZXRfZG1hX21vZGUgZG9lcyBub3QuCisgKi8KKworaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtMTsKKworCXJhdGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHJhdGUpOworCisJQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKKworCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQorCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7CisKKwlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IDA5MjBlM2IuLjkyYzliOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC02MiwxNjAgKzYyLDYgQEAKIAogc3RydWN0IGNsYXNzICppZGVfcG9ydF9jbGFzczsKIAotLyoKLSAqCUxvY2tzIGZvciBJREUgc2V0dGluZyBmdW5jdGlvbmFsaXR5Ci0gKi8KLQotREVGSU5FX01VVEVYKGlkZV9zZXR0aW5nX210eCk7Ci0KLWlkZV9kZXZzZXRfZ2V0KGlvXzMyYml0LCBpb18zMmJpdCk7Ci0KLXN0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19JT18zMkJJVCkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEgKyAoU1VQUE9SVF9WTEJfU1lOQyA8PCAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcml2ZS0+aW9fMzJiaXQgPSBhcmc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyhrc2V0dGluZ3MsIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKTsKLQotc3RhdGljIGludCBzZXRfa3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmcpCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0tFRVBfU0VUVElOR1M7Ci0JZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZGV2c2V0X2dldF9mbGFnKHVzaW5nX2RtYSwgSURFX0RGTEFHX1VTSU5HX0RNQSk7Ci0KLXN0YXRpYyBpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCi0JaW50IGVyciA9IC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF0YV9pZF9oYXNfZG1hKGRyaXZlLT5pZCkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAwOwotCi0JaWYgKGFyZykgewotCQlpZiAoaWRlX3NldF9kbWEoZHJpdmUpKQotCQkJZXJyID0gLUVJTzsKLQl9IGVsc2UKLQkJaWRlX2RtYV9vZmYoZHJpdmUpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLSNlbHNlCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gLUVQRVJNOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQotICovCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQotewotCXN3aXRjaCAocmVxX3BpbykgewotCWNhc2UgMjAyOgotCWNhc2UgMjAxOgotCWNhc2UgMjAwOgotCWNhc2UgMTAyOgotCWNhc2UgMTAxOgotCWNhc2UgMTAwOgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOwotCWNhc2UgOToKLQljYXNlIDg6Ci0JCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKLQljYXNlIDc6Ci0JY2FzZSA2OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyNTUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7Ci0JCWlmIChhcmcgPT0gOCB8fCBhcmcgPT0gOSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJLyogdGFrZSBsb2NrIGZvciBJREVfREZMQUdfW05PX11VTk1BU0svW05PX11JT18zMkJJVCAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCX0gZWxzZQotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKLQl9IGVsc2UgewotCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7Ci0KLQkJaWRlX3NldF9waW8oZHJpdmUsIGFyZyk7Ci0KLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VUX1BJT19NT0RFX0tFRVBfRE1BKSB7Ci0JCQlpZiAoa2VlcF9kbWEpCi0JCQkJaWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyh1bm1hc2tpcnEsIElERV9ERkxBR19VTk1BU0spOwotCi1zdGF0aWMgaW50IHNldF91bm1hc2tpcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX1VOTUFTSykKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFyZykKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZXh0X2RldnNldF9yd19zeW5jKGlvXzMyYml0LCBpb18zMmJpdCk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKGtlZXBzZXR0aW5ncywga3NldHRpbmdzKTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmModW5tYXNraXJxLCB1bm1hc2tpcnEpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7Ci1fX0lERV9ERVZTRVQocGlvX21vZGUsIERTX1NZTkMsIE5VTEwsIHNldF9waW9fbW9kZSk7Ci0KIC8qKgogICogaWRlX2RldmljZV9nZXQJLQlnZXQgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gYSBpZGVfZHJpdmVfdAogICogQGRyaXZlOglkZXZpY2UgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvCkBAIC01MjcsNiArMzczLDggQEAKIAkJZ290byBvdXRfcG9ydF9jbGFzczsKIAl9CiAKKwlpZGVfYWNwaV9pbml0KCk7CisKIAlwcm9jX2lkZV9jcmVhdGUoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwppbmRleCAxM2I4MTUzLi42YjlmYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4MjApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pdDgyMXgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2l0ODIxeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IGNvbmY7CiAJc3RhdGljIGNoYXIgKm1vZGVbMl0gPSB7ICJwYXNzIHRocm91Z2giLCAic21hcnQiIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKaW5kZXggODM2NDNlZC4uZWE0OGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwpAQCAtMjg2LDkgKzI4Niw3IEBACiAJfQogCiAJaWYgKCF1c2luZ19pbnRhKQotCQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCWVsc2UgaWYgKCFod2lmLT5pcnEgJiYgaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5pcnEpCi0JCWh3aWYtPmlycSA9IGh3aWYtPm1hdGUtPmlycTsJLyogc2hhcmUgSVJRIHdpdGggbWF0ZSAqLworCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgaHdpZi0+Y2hhbm5lbCk7CiAKIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCmluZGV4IGYyMTI5MGMuLmI2ODkwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjbmV3KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGNuZXcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAljb25zdCBjaGFyICpuYW1lID0gRFJWX05BTUU7CiAJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAjZW5kaWYKIAogIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIF9fZGV2aW5pdCBwZGMyMDI3MF9nZXRfZGV2MihzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCA5NzE5MzMyLi5jYmE2NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBkbWFiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CiAJdTggdWRtYV9zcGVlZF9mbGFnID0gMCwgcHJpbWFyeV9tb2RlID0gMCwgc2Vjb25kYXJ5X21vZGUgPSAwOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCXByaW50aygiJXNBQ1RJVkVcbiIsIChpbmIoZG1hYmFzZSB8IDB4MWYpICYgMSkgPyAiIiA6ICJJTiIpOwogCX0KIG91dDoKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwZGMyMDJhdGE0X2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGlpeC5jCmluZGV4IGYxZTJlNGUuLjJhYTY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9waWl4LmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogICoJb3V0IHRvIGJlIG5pY2UgYW5kIHNpbXBsZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2ljaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiBleHRyYSA9IDA7CiAKQEAgLTMxOCwxOSArMzE4LDEyIEBACiAJLmNhYmxlX2RldGVjdAkJPSBwaWl4X2NhYmxlX2RldGVjdCwKIH07CiAKLSNpZm5kZWYgQ09ORklHX0lBNjQKLSAjZGVmaW5lIElERV9IRkxBR1NfUElJWCBJREVfSEZMQUdfTEVHQUNZX0lSUVMKLSNlbHNlCi0gI2RlZmluZSBJREVfSEZMQUdTX1BJSVggMAotI2VuZGlmCi0KICNkZWZpbmUgREVDTEFSRV9QSUlYX0RFVih1ZG1hKSBcCiAJewkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQlcCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGlpeCwJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkucG9ydF9vcHMJPSAmcGlpeF9wb3J0X29wcywJXAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUElJWCwJXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCVwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCVwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAlcCkBAIC0zNDQsNyArMzM3LDYgQEAKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9waWl4LCBcCiAJCS5lbmFibGViaXRzCT0ge3sweDQxLDB4ODAsMHg4MH0sIHsweDQzLDB4ODAsMHg4MH19LCBcCiAJCS5wb3J0X29wcwk9ICZpY2hfcG9ydF9vcHMsIFwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsIFwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksIFwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCBcCkBAIC0zNjAsOCArMzUyLDcgQEAKIAkJICovCiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg2ZCwweGMwLDB4ODB9LCB7MHg2ZCwweGMwLDB4YzB9fSwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwgSURFX0hGTEFHX05PX0RNQSB8Ci0JCQkJICBJREVfSEZMQUdTX1BJSVgsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0lTQV9QT1JUUyB8IElERV9IRkxBR19OT19ETUEsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkvKiBUaGlzIGlzIGEgcGFpbmZ1bCBzeXN0ZW0gYmVzdCB0byBsZXQgaXQgc2VsZiB0dW5lIGZvciBub3cgKi8KIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKaW5kZXggMzgyMTAyYi4uYjY1NTRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCB1bHRyYV9lbmFibGUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zdndrcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc3Z3a3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCXU4IGJ0cjsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVBLCBidHIpOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0YTY2X3N2d2tzX3N2d2tzKGlkZV9od2lmX3QgKmh3aWYpCkBAIC0zNTMsMTQgKzM1MywxMSBAQAogCS5jYWJsZV9kZXRlY3QJCT0gc3Z3a3NfY2FibGVfZGV0ZWN0LAogfTsKIAotI2RlZmluZSBJREVfSEZMQUdTX1NWV0tTIElERV9IRkxBR19MRUdBQ1lfSVJRUwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2VydmVyd29ya3NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMDogT1NCNCAqLwogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJm9zYjRfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIFVETUEgaXMgcHJvYmxlbWF0aWMgb24gT1NCNCAqLwpAQCAtMzY5LDcgKzM2Niw2IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM3OCw3ICszNzQsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTIHwgSURFX0hGTEFHX1NJTkdMRSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzk2LDcgKzM5MSw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUyB8IElERV9IRkxBR19TSU5HTEUsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggZTg1ZDFlZC4uMjRiYzg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTMwNSw3ICszMDUsNiBAQAogICoJQGRldjogUENJIGRldmljZSBob2xkaW5nIGludGVyZmFjZQogICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBwb3J0OiBwb3J0IG51bWJlcgotICoJQGlycTogUENJIElSUQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQKICAqCiAgKglQZXJmb3JtIHRoZSBpbml0aWFsIHNldCB1cCBmb3IgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoaXMKQEAgLTMxNiw3ICszMTUsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaWRlX2h3X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaW50IGlycSwgaHdfcmVnc190ICpodykKKwkJCSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgaHdfcmVnc190ICpodykKIHsKIAl1bnNpZ25lZCBsb25nIGN0bCA9IDAsIGJhc2UgPSAwOwogCkBAIC0zNDQsNyArMzQzLDYgQEAKIAl9CiAKIAltZW1zZXQoaHcsIDAsIHNpemVvZigqaHcpKTsKLQlody0+aXJxID0gaXJxOwogCWh3LT5kZXYgPSAmZGV2LT5kZXY7CiAJaHctPmNoaXBzZXQgPSBkLT5jaGlwc2V0ID8gZC0+Y2hpcHNldCA6IGlkZV9wY2k7CiAJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBiYXNlLCBjdGwgfCAyKTsKQEAgLTQ0OCw3ICs0NDYsNiBAQAogICoJaWRlX3BjaV9zZXR1cF9wb3J0cwktCWNvbmZpZ3VyZSBwb3J0cy9kZXZpY2VzIG9uIFBDSSBJREUKICAqCUBkZXY6IFBDSSBkZXZpY2UKICAqCUBkOiBJREUgcG9ydCBpbmZvCi0gKglAcGNpaXJxOiBJUlEgbGluZQogICoJQGh3OiBod19yZWdzX3QgaW5zdGFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQQ0kgSURFIGRldmljZQogICoJQGh3czogaHdfcmVnc190IHBvaW50ZXJzIHRhYmxlIHRvIHVwZGF0ZQogICoKQEAgLTQ2Miw3ICs0NTksNyBAQAogICovCiAKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCSBpbnQgcGNpaXJxLCBod19yZWdzX3QgKmh3LCBod19yZWdzX3QgKipod3MpCisJCQkgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQogewogCWludCBjaGFubmVscyA9IChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NJTkdMRSkgPyAxIDogMiwgcG9ydDsKIAl1OCB0bXA7CkBAIC00ODEsNyArNDc4LDcgQEAKIAkJCWNvbnRpbnVlOwkvKiBwb3J0IG5vdCBlbmFibGVkICovCiAJCX0KIAotCQlpZiAoaWRlX2h3X2NvbmZpZ3VyZShkZXYsIGQsIHBvcnQsIHBjaWlycSwgaHcgKyBwb3J0KSkKKwkJaWYgKGlkZV9od19jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBodyArIHBvcnQpKQogCQkJY29udGludWU7CiAKIAkJKihod3MgKyBwb3J0KSA9IGh3ICsgcG9ydDsKQEAgLTUyNCw3ICs1MjEsNyBAQAogCQlpZiAobm9pc3kpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyAlczogbm90IDEwMCUlIG5hdGl2ZSBtb2RlOiB3aWxsICIKIAkJCQkicHJvYmUgaXJxcyBsYXRlclxuIiwgZC0+bmFtZSwgcGNpX25hbWUoZGV2KSk7Ci0JCXBjaWlycSA9IHJldDsKKwkJcGNpaXJxID0gMDsKIAl9IGVsc2UgaWYgKCFwY2lpcnEgJiYgbm9pc3kpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXM6IGJhZCBpcnEgKCVkKTogd2lsbCBwcm9iZSBsYXRlclxuIiwKIAkJCWQtPm5hbWUsIHBjaV9uYW1lKGRldiksIHBjaWlycSk7CkBAIC01NDksNyArNTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMCwgJmh3WzBdLCAmaHdzWzBdKTsKKwlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgJmh3WzBdLCAmaHdzWzBdKTsKIAogCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhkLCBod3MpOwogCWlmIChob3N0ID09IE5VTEwpIHsKQEAgLTU2OCw3ICs1NjUsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBmaXh1cCBJUlEgKi8KLQlod1sxXS5pcnEgPSBod1swXS5pcnEgPSByZXQ7CisJaWYgKGlkZV9wY2lfaXNfaW5fY29tcGF0aWJpbGl0eV9tb2RlKGRldikpIHsKKwkJaHdbMF0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDApOworCQlod1sxXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgMSk7CisJfSBlbHNlCisJCWh3WzFdLmlycSA9IGh3WzBdLmlycSA9IHJldDsKIAogCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIGQsIGh3cyk7CiAJaWYgKHJldCkKQEAgLTU5MSw3ICs1OTIsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCi0JCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgMCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CisJCWlkZV9wY2lfc2V0dXBfcG9ydHMocGRldltpXSwgZCwgJmh3W2kqMl0sICZod3NbaSoyXSk7CiAJfQogCiAJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKGQsIGh3cyk7CkBAIC02MTksNyArNjIwLDExIEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBmaXh1cCBJUlEgKi8KLQkJaHdbaSoyICsgMV0uaXJxID0gaHdbaSoyXS5pcnEgPSByZXQ7CisJCWlmIChpZGVfcGNpX2lzX2luX2NvbXBhdGliaWxpdHlfbW9kZShwZGV2W2ldKSkgeworCQkJaHdbaSoyXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHBkZXZbaV0sIDApOworCQkJaHdbaSoyICsgMV0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShwZGV2W2ldLCAxKTsKKwkJfSBlbHNlCisJCQlod1tpKjIgKyAxXS5pcnEgPSBod1tpKjJdLmlycSA9IHJldDsKIAl9CiAKIAlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBkLCBod3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IGNiMmIzNTIuLjE4MTFhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICoJdG8gMTMzIE1IeiBjbG9ja2luZyBpZiB0aGUgc3lzdGVtIGlzbid0IGFscmVhZHkgc2V0IHVwIHRvIGRvIGl0LgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpaW1hZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGhvc3QtPmhvc3RfcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCA5ZWMxYTRhLi5hZmNhMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC00NDcsNyArNDQ3LDcgQEAKIAlyZXR1cm4gY2hpcHNldF9mYW1pbHk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NpczU1MTMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAkvKiBNYWtlIGdlbmVyYWwgY29uZmlnIG9wcyBoZXJlCiAJICAgMS8gdGVsbCBJREUgY2hhbm5lbHMgdG8gb3BlcmF0ZSBpbiBDb21wYXRpYmlsaXR5IG1vZGUgb25seQpAQCAtNTYzLDcgKzU2Myw3IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zaXM1NTEzLAogCS5lbmFibGViaXRzCT0geyB7MHg0YSwgMHgwMiwgMHgwMn0sIHsweDRhLCAweDA0LCAweDA0fSB9LAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTIHwgSURFX0hGTEFHX05PX0FVVE9ETUEsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVVUT0RNQSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKaW5kZXggNjI5Nzk1Ni4uZGJhMjEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCkBAIC0yNzEsNyArMjcxLDcgQEAKICAqIGNoYW5uZWwgMCBoZXJlIGF0IGxlYXN0LCBidXQgY2hhbm5lbCAxIGhhcyB0byBiZSBlbmFibGVkIGJ5CiAgKiBmaXJtd2FyZSBvciBhcmNoIGNvZGUuIFdlIHN0aWxsIHNldCBib3RoIHRvIDE2IGJpdHMgbW9kZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2w4MmMxMDUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3NsODJjMTA1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzbDgyYzEwNV9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMgYi9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCmluZGV4IDQwYjRiOTQuLmY1NWQ3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwpAQCAtMTM2LDcgKzEzNiw2IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmVuYWJsZWJpdHMJPSB7IHsweDQxLCAweDgwLCAweDgwfSwgezB4NDMsIDB4ODAsIDB4ODB9IH0sCiAJLnBvcnRfb3BzCT0gJnNsYzkwZTY2X3BvcnRfb3BzLAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAogCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAogCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggYjZhMTI4NS4uMWMwOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTI3Nyw5ICsyNzcsNiBAQAogCWlmIChyZWcgJiAweDEwKQogCQkvKiBsZWdhY3kgbW9kZSAqLwogCQlod2lmLT5pcnEgPSBod2lmLT5jaGFubmVsID8gMTUgOiAxNDsKLQllbHNlIGlmICghaHdpZi0+aXJxICYmIGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxKQotCQkvKiBzaGFyaW5nIElSUSB3aXRoIG1hdGUgKi8KLQkJaHdpZi0+aXJxID0gaHdpZi0+bWF0ZS0+aXJxOwogCiAjaWYgMQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKaW5kZXggNjA5MmZlMy4uM2ZmNzIzMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCWFuZCBpbml0aWFsaXplIGl0cyBkcml2ZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfdmlhODJjeHh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IGhvc3QtPmhvc3RfcHJpdjsKQEAgLTQ0MywxNiArNDQzLDYgQEAKIAlpZiAoKHZpYV9jb25maWctPmZsYWdzICYgVklBX05PX1VOTUFTSykgPT0gMCkKIAkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19VTk1BU0tfSVJRUzsKIAotI2lmZGVmIENPTkZJR19QUENfQ0hSUAotCWlmIChtYWNoaW5lX2lzKGNocnApICYmIF9jaHJwX3R5cGUgPT0gX0NIUlBfUGVnYXNvcykKLQkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUzsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FNSUdBT05FCi0JaWYgKG1hY2hpbmVfaXMoYW1pZ2FvbmUpKQotCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOwotI2VuZGlmCi0KIAlkLnVkbWFfbWFzayA9IHZpYV9jb25maWctPnVkbWFfbWFzazsKIAogCXZkZXYgPSBremFsbG9jKHNpemVvZigqdmRldiksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9jc3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmMKaW5kZXggMzE0MDBjOC4uZDY5NmY2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9jc3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2Nzci5jCkBAIC02OCwyMiArNjgsMjIgQEAKIAkuaG9zdF9yZXNldCA9CWhvc3RfcmVzZXQsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBtYXBfb3BzID0gewogCS5yZWFkID0gcmVhZF9tYXBzLAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGZjcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgZmNwX29wcyA9IHsKIAkud3JpdGUgPSB3cml0ZV9mY3AsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgcmVnX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyByZWdfb3BzID0gewogCS5yZWFkID0gcmVhZF9yZWdzLAogCS53cml0ZSA9IHdyaXRlX3JlZ3MsCiAJLmxvY2sgPSBsb2NrX3JlZ3MsCiAJLmxvY2s2NCA9IGxvY2s2NF9yZWdzLAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGNvbmZpZ19yb21fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGNvbmZpZ19yb21fb3BzID0gewogCS5yZWFkID0gcmVhZF9jb25maWdfcm9tLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKaW5kZXggMzgzOGJjNC4uODIzYTYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCkBAIC0xMzI1LDExICsxMzI1LDcgQEAKIAogCXN0cnVjdCB2aWRlb19jYXJkICp2aWRlbyA9IGZpbGVfdG9fdmlkZW9fY2FyZChmaWxlKTsKIAotCWludCByZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBkdjEzOTRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMjE3NSw3ICsyMTcxLDcgQEAKICAqIEV4cG9ydCBpbmZvcm1hdGlvbiBhYm91dCBwcm90b2NvbHMvZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAgKi8KICNpZmRlZiBNT0RVTEUKLXN0YXRpYyBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGR2MTM5NF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZHYxMzk0X2lkX3RhYmxlW10gPSB7CiAJewogCQkubWF0Y2hfZmxhZ3MJPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfCBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAogCQkuc3BlY2lmaWVyX2lkCT0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSAmIDB4ZmZmZmZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCAxYTkxOWRmLi40Y2ExMDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiBzdGF0aWMgdm9pZCBldGhlcjEzOTRfaG9zdF9yZXNldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KTsKIAogLyogRnVuY3Rpb24gZm9yIGluY29taW5nIDEzOTQgcGFja2V0cyAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGFkZHJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGFkZHJfb3BzID0gewogCS53cml0ZSA9CWV0aGVyMTM5NF93cml0ZSwKIH07CiAKQEAgLTQzOCw3ICs0MzgsNyBAQAogCXJldHVybiBldGgxMzk0X25ld19ub2RlKGhpLCB1ZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGV0aDEzOTRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGV0aDEzOTRfaWRfdGFibGVbXSA9IHsKIAl7CiAJCS5tYXRjaF9mbGFncyA9IChJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfAogCQkJCUlFRUUxMzk0X01BVENIX1ZFUlNJT04pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmMKaW5kZXggNjAwZTM5MS4uNGJjNDQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgZHVtbXlfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGR1bW15X29wczsKIAogLyogZHVtbXkgYWRkcmVzcyBzcGFjZXMgYXMgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBvZiB0aGUgaG9zdCdzIGEucy4gbGlzdCAqLwogc3RhdGljIHZvaWQgaW5pdF9ocHNiX2hpZ2hsZXZlbChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwppbmRleCA1M2FhZGE1Li5hNmQ1NWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiBzdGF0aWMgc3NpemVfdCBmd19zaG93X2Rydl9kZXZpY2VfaWRzKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgKmRyaXZlcjsKLQlzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZDsKKwljb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZDsKIAlpbnQgbGVuZ3RoID0gMDsKIAljaGFyICpzY3JhdGNoID0gYnVmOwogCkBAIC02NTgsNyArNjU4LDcgQEAKIHsKIAlzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKnVkOwotCXN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkOworCWNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkOwogCiAJLyogV2Ugb25seSBtYXRjaCB1bml0IGRpcmVjdG9yaWVzICovCiAJaWYgKGRldi0+cGxhdGZvcm1fZGF0YSAhPSAmbm9kZW1ncl91ZF9wbGF0Zm9ybV9kYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmggYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAppbmRleCBlZTVhY2RiLi43NDliMjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAJICogcHJvYmUgZnVuY3Rpb24gYmVsb3cgY2FuIGltcGxlbWVudCBmdXJ0aGVyIHByb3RvY29sCiAJICogZGVwZW5kZW50IG9yIHZlbmRvciBkZXBlbmRlbnQgY2hlY2tpbmcuCiAJICovCi0Jc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWRfdGFibGU7CisJY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWRfdGFibGU7CiAKIAkvKgogCSAqIFRoZSB1cGRhdGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIG5vZGUgaGFzIGp1c3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggYmFkNjZjNi4uZGE1Zjg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTkwLDcgKzkwLDcgQEAKIHN0YXRpYyBpbnQgYXJtX2xvY2s2NChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBvY3RsZXRfdCAqIHN0b3JlLAogCQkgICAgICB1NjQgYWRkciwgb2N0bGV0X3QgZGF0YSwgb2N0bGV0X3QgYXJnLCBpbnQgZXh0X3Rjb2RlLAogCQkgICAgICB1MTYgZmxhZ3MpOwotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGFybV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgYXJtX29wcyA9IHsKIAkucmVhZCA9IGFybV9yZWFkLAogCS53cml0ZSA9IGFybV93cml0ZSwKIAkubG9jayA9IGFybV9sb2NrLApAQCAtMzY5LDYgKzM2OSw3IEBACiB7CiAJc3RydWN0IGNvbXBhdF9yYXcxMzk0X3JlcSBfX3VzZXIgKmNyID0gKHR5cGVvZihjcikpIGJ1ZjsKIAlzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0IF9fdXNlciAqcjsKKwogCXIgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IHJhdzEzOTRfcmVxdWVzdCkpOwogCiAjZGVmaW5lIEMoeCkgX19jb3B5X2luX3VzZXIoJnItPngsICZjci0+eCwgc2l6ZW9mKHItPngpKQpAQCAtMzc4LDcgKzM3OSw4IEBACiAJICAgIEModGFnKSB8fAogCSAgICBDKHNlbmRiKSB8fAogCSAgICBDKHJlY3ZiKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJCXJldHVybiAoX19mb3JjZSBjb25zdCBjaGFyIF9fdXNlciAqKUVSUl9QVFIoLUVGQVVMVCk7CisKIAlyZXR1cm4gKGNvbnN0IGNoYXIgX191c2VyICopcjsKIH0KICN1bmRlZiBDCkBAIC0zODksNiArMzkxLDcgQEAKIHJhdzEzOTRfY29tcGF0X3JlYWQoY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc3RydWN0IHJhdzEzOTRfcmVxdWVzdCAqcikKIHsKIAlzdHJ1Y3QgY29tcGF0X3JhdzEzOTRfcmVxIF9fdXNlciAqY3IgPSAodHlwZW9mKGNyKSkgYnVmOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBjciwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfcmF3MTM5NF9yZXEpKSB8fAogCSAgICBQKHR5cGUpIHx8CiAJICAgIFAoZXJyb3IpIHx8CkBAIC00MDAsNiArNDAzLDcgQEAKIAkgICAgUChzZW5kYikgfHwKIAkgICAgUChyZWN2YikpCiAJCXJldHVybiAtRUZBVUxUOworCiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgY29tcGF0X3JhdzEzOTRfcmVxKTsKIH0KICN1bmRlZiBQCkBAIC0yMjQ5LDggKzIyNTMsOCBAQAogICAgCSAgICBzaXplb2Yoc3RydWN0IGNvbXBhdF9yYXcxMzk0X3JlcSkgIT0KIAkJCXNpemVvZihzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0KSkgewogCQlidWZmZXIgPSByYXcxMzk0X2NvbXBhdF93cml0ZShidWZmZXIpOwotCQlpZiAoSVNfRVJSKGJ1ZmZlcikpCi0JCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOworCQlpZiAoSVNfRVJSKChfX2ZvcmNlIHZvaWQgKilidWZmZXIpKQorCQkJcmV0dXJuIFBUUl9FUlIoKF9fZm9yY2Ugdm9pZCAqKWJ1ZmZlcik7CiAJfSBlbHNlCiAjZW5kaWYKIAlpZiAoY291bnQgIT0gc2l6ZW9mKHN0cnVjdCByYXcxMzk0X3JlcXVlc3QpKSB7CkBAIC0yOTc4LDcgKzI5ODIsNyBAQAogICogRXhwb3J0IGluZm9ybWF0aW9uIGFib3V0IHByb3RvY29scy9kZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KICAqLwogI2lmZGVmIE1PRFVMRQotc3RhdGljIHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgcmF3MTM5NF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgcmF3MTM5NF9pZF90YWJsZVtdID0gewogCXsKIAkgLm1hdGNoX2ZsYWdzID0gSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIHwgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiwKIAkgLnNwZWNpZmllcl9pZCA9IEFWQ19VTklUX1NQRUNfSURfRU5UUlkgJiAweGZmZmZmZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggZjNmZDg2NS4uYTUxYWIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCS5ob3N0X3Jlc2V0CT0gc2JwMl9ob3N0X3Jlc2V0LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHNicDJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHNicDJfb3BzID0gewogCS53cml0ZQkJPSBzYnAyX2hhbmRsZV9zdGF0dXNfd3JpdGUKIH07CiAKQEAgLTI3NSw3ICsyNzUsNyBAQAogc3RhdGljIGludCBzYnAyX2hhbmRsZV9waHlzZG1hX3JlYWQoc3RydWN0IGhwc2JfaG9zdCAqLCBpbnQsIHF1YWRsZXRfdCAqLCB1NjQsCiAJCQkJICAgIHNpemVfdCwgdTE2KTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHNicDJfcGh5c2RtYV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgc2JwMl9waHlzZG1hX29wcyA9IHsKIAkucmVhZAkJPSBzYnAyX2hhbmRsZV9waHlzZG1hX3JlYWQsCiAJLndyaXRlCQk9IHNicDJfaGFuZGxlX3BoeXNkbWFfd3JpdGUsCiB9OwpAQCAtMjg1LDcgKzI4NSw3IEBACiAvKgogICogSW50ZXJmYWNlIHRvIGRyaXZlciBjb3JlIGFuZCBJRUVFIDEzOTQgY29yZQogICovCi1zdGF0aWMgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBzYnAyX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBzYnAyX2lkX3RhYmxlW10gPSB7CiAJewogCSAubWF0Y2hfZmxhZ3MJPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfCBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAogCSAuc3BlY2lmaWVyX2lkCT0gU0JQMl9VTklUX1NQRUNfSURfRU5UUlkgJiAweGZmZmZmZiwKQEAgLTE0MTMsOCArMTQxMyw3IEBACiAJCQkgICIoZmlybXdhcmVfcmV2aXNpb24gMHglMDZ4LCB2ZW5kb3JfaWQgMHglMDZ4LCIKIAkJCSAgIiBtb2RlbF9pZCAweCUwNngpIiwKIAkJCSAgTk9ERV9CVVNfQVJHUyh1ZC0+bmUtPmhvc3QsIHVkLT5uZS0+bm9kZWlkKSwKLQkJCSAgd29ya2Fyb3VuZHMsIGZpcm13YXJlX3JldmlzaW9uLAotCQkJICB1ZC0+dmVuZG9yX2lkID8gdWQtPnZlbmRvcl9pZCA6IHVkLT5uZS0+dmVuZG9yX2lkLAorCQkJICB3b3JrYXJvdW5kcywgZmlybXdhcmVfcmV2aXNpb24sIHVkLT52ZW5kb3JfaWQsCiAJCQkgIG1vZGVsKTsKIAogCS8qIFdlIHdvdWxkIG5lZWQgb25lIFNDU0kgaG9zdCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQgdG8gYWRqdXN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCA2NzlhOTE4Li5kMjg3YmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAgKiBFeHBvcnQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2xzL2RldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogICovCiAjaWZkZWYgTU9EVUxFCi1zdGF0aWMgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCB2aWRlbzEzOTRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHZpZGVvMTM5NF9pZF90YWJsZVtdID0gewogCXsKIAkJLm1hdGNoX2ZsYWdzCT0gSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIHwgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiwKIAkJLnNwZWNpZmllcl9pZAk9IENBTUVSQV9VTklUX1NQRUNfSURfRU5UUlkgJiAweGZmZmZmZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGYxZTgyYTkuLjUxMzBmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtOTI3LDggKzkyNyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzayA/IHNlcnZpY2VfbWFzayA6Ci0JCSAgICAgICBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwlzZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2sgPyBzZXJ2aWNlX21hc2sgOiB+Y3B1X3RvX2JlNjQoMCk7CiAJc2VydmljZV9pZCAmPSBzZXJ2aWNlX21hc2s7CiAJaWYgKChzZXJ2aWNlX2lkICYgSUJfU0VSVklDRV9JRF9BR05fTUFTSykgPT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQgJiYKIAkgICAgKHNlcnZpY2VfaWQgIT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpKQpAQCAtOTU0LDcgKzk1Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtLmxvY2ssIGZsYWdzKTsKIAlpZiAoc2VydmljZV9pZCA9PSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCkgewogCQljbV9pZC0+c2VydmljZV9pZCA9IGNwdV90b19iZTY0KGNtLmxpc3Rlbl9zZXJ2aWNlX2lkKyspOwotCQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJfSBlbHNlIHsKIAkJY21faWQtPnNlcnZpY2VfaWQgPSBzZXJ2aWNlX2lkOwogCQljbV9pZC0+c2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrOwpAQCAtMTEzNCw3ICsxMTMzLDcgQEAKIAkJCWdvdG8gZXJyb3IxOwogCX0KIAljbV9pZC0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwotCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBjbV9jb252ZXJ0X3RvX21zKAogCQkJCSAgICBwYXJhbS0+cHJpbWFyeV9wYXRoLT5wYWNrZXRfbGlmZV90aW1lKSAqIDIgKwogCQkJCSBjbV9jb252ZXJ0X3RvX21zKApAQCAtMTU0NSw3ICsxNTQ0LDcgQEAKIAljbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyID0gbGlzdGVuX2NtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXI7CiAJY21faWRfcHJpdi0+aWQuY29udGV4dCA9IGxpc3Rlbl9jbV9pZF9wcml2LT5pZC5jb250ZXh0OwogCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQgPSByZXFfbXNnLT5zZXJ2aWNlX2lkOwotCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAogCWNtX3Byb2Nlc3Nfcm91dGVkX3JlcShyZXFfbXNnLCB3b3JrLT5tYWRfcmVjdl93Yy0+d2MpOwogCWNtX2Zvcm1hdF9wYXRoc19mcm9tX3JlcShyZXFfbXNnLCAmd29yay0+cGF0aFswXSwgJndvcmstPnBhdGhbMV0pOwpAQCAtMjg5OCw3ICsyODk3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAljbV9pZC0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwotCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBwYXJhbS0+dGltZW91dF9tczsKIAljbV9pZF9wcml2LT5tYXhfY21fcmV0cmllcyA9IHBhcmFtLT5tYXhfY21fcmV0cmllczsKIAlyZXQgPSBjbV9hbGxvY19tc2coY21faWRfcHJpdiwgJm1zZyk7CkBAIC0yOTkyLDcgKzI5OTEsNyBAQAogCWNtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXIgPSBjdXJfY21faWRfcHJpdi0+aWQuY21faGFuZGxlcjsKIAljbV9pZF9wcml2LT5pZC5jb250ZXh0ID0gY3VyX2NtX2lkX3ByaXYtPmlkLmNvbnRleHQ7CiAJY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCA9IHNpZHJfcmVxX21zZy0+c2VydmljZV9pZDsKLQljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAKIAljbV9mb3JtYXRfc2lkcl9yZXFfZXZlbnQod29yaywgJmN1cl9jbV9pZF9wcml2LT5pZCk7CiAJY21fcHJvY2Vzc193b3JrKGNtX2lkX3ByaXYsIHdvcmspOwpAQCAtMzc4OSw3ICszNzg4LDcgQEAKIAlyd2xvY2tfaW5pdCgmY20uZGV2aWNlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjbS5sb2NrKTsKIAljbS5saXN0ZW5fc2VydmljZV90YWJsZSA9IFJCX1JPT1Q7Ci0JY20ubGlzdGVuX3NlcnZpY2VfaWQgPSBfX2NvbnN0YW50X2JlNjRfdG9fY3B1KElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKTsKKwljbS5saXN0ZW5fc2VydmljZV9pZCA9IGJlNjRfdG9fY3B1KElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKTsKIAljbS5yZW1vdGVfaWRfdGFibGUgPSBSQl9ST09UOwogCWNtLnJlbW90ZV9xcF90YWJsZSA9IFJCX1JPT1Q7CiAJY20ucmVtb3RlX3NpZHJfdGFibGUgPSBSQl9ST09UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCmluZGV4IGFlYzljN2EuLjdlNjNjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKQEAgLTQ0LDE3ICs0NCwxNyBAQAogCiAjZGVmaW5lIElCX0NNX0NMQVNTX1ZFUlNJT04JMiAvKiBJQiBzcGVjaWZpY2F0aW9uIDEuMiAqLwogCi0jZGVmaW5lIENNX1JFUV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgQ01fTVJBX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBDTV9SRUpfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIENNX1JFUF9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMykKLSNkZWZpbmUgQ01fUlRVX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE0KQotI2RlZmluZSBDTV9EUkVRX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE1KQotI2RlZmluZSBDTV9EUkVQX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE2KQotI2RlZmluZSBDTV9TSURSX1JFUV9BVFRSX0lEIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE3KQotI2RlZmluZSBDTV9TSURSX1JFUF9BVFRSX0lEIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE4KQotI2RlZmluZSBDTV9MQVBfQVRUUl9JRCAgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE5KQotI2RlZmluZSBDTV9BUFJfQVRUUl9JRCAgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDFBKQorI2RlZmluZSBDTV9SRVFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBDTV9NUkFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBDTV9SRUpfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBDTV9SRVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEzKQorI2RlZmluZSBDTV9SVFVfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE0KQorI2RlZmluZSBDTV9EUkVRX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNSkKKyNkZWZpbmUgQ01fRFJFUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTYpCisjZGVmaW5lIENNX1NJRFJfUkVRX0FUVFJfSUQJY3B1X3RvX2JlMTYoMHgwMDE3KQorI2RlZmluZSBDTV9TSURSX1JFUF9BVFRSX0lECWNwdV90b19iZTE2KDB4MDAxOCkKKyNkZWZpbmUgQ01fTEFQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxOSkKKyNkZWZpbmUgQ01fQVBSX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxQSkKIAogZW51bSBjbV9tc2dfc2VxdWVuY2UgewogCUNNX01TR19TRVFVRU5DRV9SRVEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IDc5MTNiODAuLmQxZmJhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogCUJVR19PTihkZXZpY2UtPnJlZ19zdGF0ZSAhPSBJQl9ERVZfVU5SRUdJU1RFUkVEKTsKIAotCWliX2RldmljZV91bnJlZ2lzdGVyX3N5c2ZzKGRldmljZSk7CisJa29iamVjdF9wdXQoJmRldmljZS0+ZGV2LmtvYmopOwogfQogRVhQT1JUX1NZTUJPTChpYl9kZWFsbG9jX2RldmljZSk7CiAKQEAgLTM0OCw2ICszNDgsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZkZXZpY2VfbXV0ZXgpOwogCisJaWJfZGV2aWNlX3VucmVnaXN0ZXJfc3lzZnMoZGV2aWNlKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNsaWVudF9kYXRhX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29udGV4dCwgdG1wLCAmZGV2aWNlLT5jbGllbnRfZGF0YV9saXN0LCBsaXN0KQogCQlrZnJlZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKaW5kZXggNWM1NGZjMi4uZGU5MjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKQEAgLTMwMSw2ICszMDEsMTYgQEAKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQuY29udGV4dCA9IGNvbnRleHQ7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LnFwID0gcG9ydF9wcml2LT5xcF9pbmZvW3Fwbl0ucXA7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LnBvcnRfbnVtID0gcG9ydF9udW07CisJc3Bpbl9sb2NrX2luaXQoJm1hZF9hZ2VudF9wcml2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+ZG9uZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnJtcHBfbGlzdCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrLCB0aW1lb3V0X3NlbmRzKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmxvY2FsX2xpc3QpOworCUlOSVRfV09SSygmbWFkX2FnZW50X3ByaXYtPmxvY2FsX3dvcmssIGxvY2FsX2NvbXBsZXRpb25zKTsKKwlhdG9taWNfc2V0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmbWFkX2FnZW50X3ByaXYtPmNvbXApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRfcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQuaGlfdGlkID0gKytpYl9tYWRfY2xpZW50X2lkOwpAQCAtMzUwLDE3ICszNjAsNiBAQAogCWxpc3RfYWRkX3RhaWwoJm1hZF9hZ2VudF9wcml2LT5hZ2VudF9saXN0LCAmcG9ydF9wcml2LT5hZ2VudF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X3ByaXYtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2tfaW5pdCgmbWFkX2FnZW50X3ByaXYtPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+c2VuZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5kb25lX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+cm1wcF9saXN0KTsKLQlJTklUX0RFTEFZRURfV09SSygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmssIHRpbWVvdXRfc2VuZHMpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdCk7Ci0JSU5JVF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfd29yaywgbG9jYWxfY29tcGxldGlvbnMpOwotCWF0b21pY19zZXQoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCwgMSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7Ci0KIAlyZXR1cm4gJm1hZF9hZ2VudF9wcml2LT5hZ2VudDsKIAogZXJyb3I0OgpAQCAtNzQzLDkgKzc0Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgSUJfTUFEX1JFU1VMVF9TVUNDRVNTIHwgSUJfTUFEX1JFU1VMVF9DT05TVU1FRDoKIAkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbWFkX3ByaXYpOwotCQlrZnJlZShsb2NhbCk7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAljYXNlIElCX01BRF9SRVNVTFRfU1VDQ0VTUzoKIAkJLyogVHJlYXQgbGlrZSBhbiBpbmNvbWluZyByZWNlaXZlIE1BRCAqLwogCQlwb3J0X3ByaXYgPSBpYl9nZXRfbWFkX3BvcnQobWFkX2FnZW50X3ByaXYtPmFnZW50LmRldmljZSwKQEAgLTc1NiwxMCArNzUzLDEyIEBACiAJCQkJCQkgICAgICAgICZtYWRfcHJpdi0+bWFkLm1hZCk7CiAJCX0KIAkJaWYgKCFwb3J0X3ByaXYgfHwgIXJlY3ZfbWFkX2FnZW50KSB7CisJCQkvKgorCQkJICogTm8gcmVjZWl2aW5nIGFnZW50IHNvIGRyb3AgcGFja2V0IGFuZAorCQkJICogZ2VuZXJhdGUgc2VuZCBjb21wbGV0aW9uLgorCQkJICovCiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBtYWRfcHJpdik7Ci0JCQlrZnJlZShsb2NhbCk7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCQlsb2NhbC0+bWFkX3ByaXYgPSBtYWRfcHJpdjsKIAkJbG9jYWwtPnJlY3ZfbWFkX2FnZW50ID0gcmVjdl9tYWRfYWdlbnQ7CkBAIC0yMzU2LDcgKzIzNTUsNyBAQAogCXN0cnVjdCBpYl9tYWRfbG9jYWxfcHJpdmF0ZSAqbG9jYWw7CiAJc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICpyZWN2X21hZF9hZ2VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZWN2ID0gMDsKKwlpbnQgZnJlZV9tYWQ7CiAJc3RydWN0IGliX3djIHdjOwogCXN0cnVjdCBpYl9tYWRfc2VuZF93YyBtYWRfc2VuZF93YzsKIApAQCAtMjM3MCwxNCArMjM2OSwxNSBAQAogCQkJCSAgIGNvbXBsZXRpb25fbGlzdCk7CiAJCWxpc3RfZGVsKCZsb2NhbC0+Y29tcGxldGlvbl9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZnJlZV9tYWQgPSAwOwogCQlpZiAobG9jYWwtPm1hZF9wcml2KSB7CiAJCQlyZWN2X21hZF9hZ2VudCA9IGxvY2FsLT5yZWN2X21hZF9hZ2VudDsKIAkJCWlmICghcmVjdl9tYWRfYWdlbnQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyByZWNlaXZlIE1BRCBhZ2VudCBmb3IgbG9jYWwgY29tcGxldGlvblxuIik7CisJCQkJZnJlZV9tYWQgPSAxOwogCQkJCWdvdG8gbG9jYWxfc2VuZF9jb21wbGV0aW9uOwogCQkJfQogCi0JCQlyZWN2ID0gMTsKIAkJCS8qCiAJCQkgKiBEZWZpbmVkIGJlaGF2aW9yIGlzIHRvIGNvbXBsZXRlIHJlc3BvbnNlCiAJCQkgKiBiZWZvcmUgcmVxdWVzdApAQCAtMjQyMiw3ICsyNDIyLDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKIAkJYXRvbWljX2RlYygmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KTsKLQkJaWYgKCFyZWN2KQorCQlpZiAoZnJlZV9tYWQpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBsb2NhbC0+bWFkX3ByaXYpOwogCQlrZnJlZShsb2NhbCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKaW5kZXggM2FmMmI4NC4uNTdhM2M2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKHJtcHBfaGRyLT5zZWdfbnVtID09IF9fY29uc3RhbnRfaHRvbmwoMSkpIHsKKwlpZiAocm1wcF9oZHItPnNlZ19udW0gPT0gY3B1X3RvX2JlMzIoMSkpIHsKIAkJaWYgKCEoaWJfZ2V0X3JtcHBfZmxhZ3Mocm1wcF9oZHIpICYgSUJfTUdNVF9STVBQX0ZMQUdfRklSU1QpKSB7CiAJCQlybXBwX3N0YXR1cyA9IElCX01HTVRfUk1QUF9TVEFUVVNfQkFEX1NFRzsKIAkJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKaW5kZXggNzg2M2E1MC4uMTg2NTA0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCkBAIC0zOTUsNiArMzk1LDggQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxKCZwb3J0LT5haF9sb2NrKTsKKwlpZiAocG9ydC0+c21fYWgpCisJCWtyZWZfcHV0KCZwb3J0LT5zbV9haC0+cmVmLCBmcmVlX3NtX2FoKTsKIAlwb3J0LT5zbV9haCA9IG5ld19haDsKIAlzcGluX3VubG9ja19pcnEoJnBvcnQtPmFoX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCBiNDNmN2QzNjguLjVjMDRjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwpAQCAtNjYsMTEgKzY2LDYgQEAKIAlpbnQJCQlpbmRleDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGliZGV2X2lzX2FsaXZlKGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5yZWdfc3RhdGUgPT0gSUJfREVWX1JFR0lTVEVSRUQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHBvcnRfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtODAsOCArNzUsNiBAQAogCiAJaWYgKCFwb3J0X2F0dHItPnNob3cpCiAJCXJldHVybiAtRUlPOwotCWlmICghaWJkZXZfaXNfYWxpdmUocC0+aWJkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiBwb3J0X2F0dHItPnNob3cocCwgcG9ydF9hdHRyLCBidWYpOwogfQpAQCAtNTYyLDkgKzU1NSw2IEBACiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAotCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlzd2l0Y2ggKGRldi0+bm9kZV90eXBlKSB7CiAJY2FzZSBSRE1BX05PREVfSUJfQ0E6CSAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IENBXG4iLCBkZXYtPm5vZGVfdHlwZSk7CiAJY2FzZSBSRE1BX05PREVfUk5JQzoJICByZXR1cm4gc3ByaW50ZihidWYsICIlZDogUk5JQ1xuIiwgZGV2LT5ub2RlX3R5cGUpOwpAQCAtNTgxLDkgKzU3MSw2IEBACiAJc3RydWN0IGliX2RldmljZV9hdHRyIGF0dHI7CiAJc3NpemVfdCByZXQ7CiAKLQlpZiAoIWliZGV2X2lzX2FsaXZlKGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0gaWJfcXVlcnlfZGV2aWNlKGRldiwgJmF0dHIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC02MDAsOSArNTg3LDYgQEAKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwogCi0JaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCiAJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSAmZGV2LT5ub2RlX2d1aWQpWzBdKSwKIAkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopICZkZXYtPm5vZGVfZ3VpZClbMV0pLApAQCAtODQ4LDYgKzgzMiw5IEBACiAJc3RydWN0IGtvYmplY3QgKnAsICp0OwogCXN0cnVjdCBpYl9wb3J0ICpwb3J0OwogCisJLyogSG9sZCBrb2JqZWN0IHVudGlsIGliX2RlYWxsb2NfZGV2aWNlKCkgKi8KKwlrb2JqZWN0X2dldCgmZGV2aWNlLT5kZXYua29iaik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgJmRldmljZS0+cG9ydF9saXN0LCBlbnRyeSkgewogCQlsaXN0X2RlbCgmcC0+ZW50cnkpOwogCQlwb3J0ID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBpYl9wb3J0LCBrb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKaW5kZXggMTEzZjNjMC4uN2Q3OWFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKQEAgLTc2LDcgKzc2LDYgQEAKIHN0YXRpYyB2b2lkIGMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBzdGF0aWMgaW50IGMyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIHZvaWQgYzJfcmVzZXQoc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjMl9wY2lfdGFibGVbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxOGI4LCAweGIwMDEpIH0sCkBAIC0zNDksNyArMzQ4LDcgQEAKIAkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0FERFIpOwogCQkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX0RPTkUpLAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwotCQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQljMl9wb3J0LT5uZXRkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJX19yYXdfd3JpdGV3KDAsCkBAIC00NTcsNyArNDU2LDcgQEAKIAkJICAgICBlbGVtLT5od19kZXNjICsgQzJfUlhQX0ZMQUdTKTsKIAogCXByX2RlYnVnKCJwYWNrZXQgZHJvcHBlZFxuIik7Ci0JYzJfcG9ydC0+bmV0c3RhdHMucnhfZHJvcHBlZCsrOworCWMyX3BvcnQtPm5ldGRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogfQogCiBzdGF0aWMgdm9pZCBjMl9yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTUzMiw4ICs1MzEsOCBAQAogCQluZXRpZl9yeChza2IpOwogCiAJCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCWMyX3BvcnQtPm5ldHN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJYzJfcG9ydC0+bmV0c3RhdHMucnhfYnl0ZXMgKz0gYnVmbGVuOworCQluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBidWZsZW47CiAJfQogCiAJLyogU2F2ZSB3aGVyZSB3ZSBsZWZ0IG9mZiAqLwpAQCAtNzk3LDggKzc5Niw4IEBACiAJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLAogCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwogCi0JYzJfcG9ydC0+bmV0c3RhdHMudHhfcGFja2V0cysrOwotCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKKwluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKIAogCS8qIExvb3AgdGhydSBhZGRpdGlvbmFsIGRhdGEgZnJhZ21lbnRzIGFuZCBxdWV1ZSB0aGVtICovCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpIHsKQEAgLTgyMyw4ICs4MjIsOCBAQAogCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLAogCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CiAKLQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKKwkJCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CiAJCX0KIAl9CiAKQEAgLTg0NSwxMyArODQ0LDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXJldHVybiAmYzJfcG9ydC0+bmV0c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIGMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC04ODAsNiArODcyLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjMl9uZXRkZXYgPSB7CisJLm5kb19vcGVuIAkJPSBjMl91cCwKKwkubmRvX3N0b3AgCQk9IGMyX2Rvd24sCisJLm5kb19zdGFydF94bWl0CQk9IGMyX3htaXRfZnJhbWUsCisJLm5kb190eF90aW1lb3V0CQk9IGMyX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGMyX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyogSW5pdGlhbGl6ZSBuZXR3b3JrIGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpjMl9kZXZpbml0KHN0cnVjdCBjMl9kZXYgKmMyZGV2LAogCQkJCSAgICAgdm9pZCBfX2lvbWVtICogbW1pb19hZGRyKQpAQCAtODk0LDEyICs4OTYsNyBAQAogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmYzJkZXYtPnBjaWRldi0+ZGV2KTsKIAotCW5ldGRldi0+b3BlbiA9IGMyX3VwOwotCW5ldGRldi0+c3RvcCA9IGMyX2Rvd247Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjMl94bWl0X2ZyYW1lOwotCW5ldGRldi0+Z2V0X3N0YXRzID0gYzJfZ2V0X3N0YXRzOwotCW5ldGRldi0+dHhfdGltZW91dCA9IGMyX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gYzJfY2hhbmdlX210dTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYzJfbmV0ZGV2OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBDMl9UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gYzJkZXYtPnBjaWRldi0+aXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCmluZGV4IGQxMmEyNGEuLmY3ZmY2NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCkBAIC0zNjksOCArMzY5LDYgQEAKIAl1bnNpZ25lZCBsb25nIG1lbV9zaXplOwogCiAJdTMyIHJ4X2J1Zl9zaXplOwotCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0c3RhdHM7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYwppbmRleCA1MTE5ZDY1Li5mMTk0OGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYwpAQCAtNzA4LDI2ICs3MDgsMjcgQEAKIAogc3RhdGljIGludCBjMl9wc2V1ZG9fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKIHsKLQlpbnQgcmV0ID0gMDsKLQogCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4gfHwgbmV3X210dSA+IEVUSF9KVU1CT19NVFUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCiAJLyogVE9ETzogVGVsbCBybmljIGFib3V0IG5ldyBybWRhIGludGVyZmFjZSBtdHUgKi8KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGMyX3BzZXVkb19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYzJfcHNldWRvX3VwLAorCS5uZG9fc3RvcCAJCT0gYzJfcHNldWRvX2Rvd24sCisJLm5kb19zdGFydF94bWl0IAk9IGMyX3BzZXVkb194bWl0X2ZyYW1lLAorCS5uZG9fY2hhbmdlX210dSAJPSBjMl9wc2V1ZG9fY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyB2b2lkIHNldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0JbmV0ZGV2LT5vcGVuID0gYzJfcHNldWRvX3VwOwotCW5ldGRldi0+c3RvcCA9IGMyX3BzZXVkb19kb3duOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYzJfcHNldWRvX3htaXRfZnJhbWU7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBOVUxMOwotCW5ldGRldi0+dHhfdGltZW91dCA9IE5VTEw7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBOVUxMOwotCW5ldGRldi0+Y2hhbmdlX210dSA9IGMyX3BzZXVkb19jaGFuZ2VfbXR1OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjMl9wc2V1ZG9fbmV0ZGV2X29wczsKKwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSAwOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAluZXRkZXYtPm10dSA9IDE1MDA7CkBAIC03MzUsNyArNzM2LDYgQEAKIAluZXRkZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CiAJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCW5ldGRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwotCXJldHVybjsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpjMl9wc2V1ZG9fbmV0ZGV2X2luaXQoc3RydWN0IGMyX2RldiAqYzJkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCmluZGV4IDRkY2YwOGIuLmE0YTgyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCkBAIC00NTAsNyArNDUwLDcgQEAKIAlpZiAoKENRRV9PUENPREUoKmNxZSkgPT0gVDNfUkVBRF9SRVNQKSAmJiBTUV9UWVBFKCpjcWUpKQogCQlyZXR1cm4gMDsKIAotCWlmICgoQ1FFX09QQ09ERSgqY3FlKSA9PSBUM19TRU5EKSAmJiBSUV9UWVBFKCpjcWUpICYmCisJaWYgKENRRV9TRU5EX09QQ09ERSgqY3FlKSAmJiBSUV9UWVBFKCpjcWUpICYmCiAJICAgIFFfRU1QVFkod3EtPnJxX3JwdHIsIHdxLT5ycV93cHRyKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTcwMSw2ICs3MDEsOSBAQAogCXUzMiBzdGFnX2lkeDsKIAl1MzIgd3B0cjsKIAorCWlmIChyZGV2X3AtPmZsYWdzKQorCQlyZXR1cm4gLUVJTzsKKwogCXN0YWdfc3RhdGUgPSBzdGFnX3N0YXRlID4gMDsKIAlzdGFnX2lkeCA9ICgqc3RhZykgPj4gODsKIApAQCAtOTM4LDYgKzk0MSwyMyBAQAogCWlmICghcmRldl9wLT50M2NkZXZfcCkKIAkJcmRldl9wLT50M2NkZXZfcCA9IGRldjJ0M2NkZXYobmV0ZGV2X3ApOwogCXJkZXZfcC0+dDNjZGV2X3AtPnVscCA9ICh2b2lkICopIHJkZXZfcDsKKworCWVyciA9IHJkZXZfcC0+dDNjZGV2X3AtPmN0bChyZGV2X3AtPnQzY2Rldl9wLCBHRVRfRU1CRURERURfSU5GTywKKwkJCQkJICYocmRldl9wLT5md19pbmZvKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIHQzY2Rldl9wKCVwKS0+Y3RsIHJldHVybmVkIGVycm9yICVkLlxuIiwKKwkJICAgICBfX2Z1bmNfXywgcmRldl9wLT50M2NkZXZfcCwgZXJyKTsKKwkJZ290byBlcnIxOworCX0KKwlpZiAoR19GV19WRVJTSU9OX01BSk9SKHJkZXZfcC0+ZndfaW5mby5md192ZXJzKSAhPSBDWElPX0ZXX01BSikgeworCQlwcmludGsoS0VSTl9FUlIgTU9EICJmYXRhbCBmaXJtd2FyZSB2ZXJzaW9uIG1pc21hdGNoOiAiCisJCSAgICAgICAibmVlZCB2ZXJzaW9uICV1IGJ1dCBhZGFwdGVyIGhhcyB2ZXJzaW9uICV1XG4iLAorCQkgICAgICAgQ1hJT19GV19NQUosCisJCSAgICAgICBHX0ZXX1ZFUlNJT05fTUFKT1IocmRldl9wLT5md19pbmZvLmZ3X3ZlcnMpKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnIxOworCX0KKwogCWVyciA9IHJkZXZfcC0+dDNjZGV2X3AtPmN0bChyZGV2X3AtPnQzY2Rldl9wLCBSRE1BX0dFVF9QQVJBTVMsCiAJCQkJCSAmKHJkZXZfcC0+cm5pY19pbmZvKSk7CiAJaWYgKGVycikgewpAQCAtMTIwNCwxMSArMTIyNCwxMiBAQAogCQl9CiAKIAkJLyogaW5jb21pbmcgU0VORCB3aXRoIG5vIHJlY2VpdmUgcG9zdGVkIGZhaWx1cmVzICovCi0JCWlmICgoQ1FFX09QQ09ERSgqaHdfY3FlKSA9PSBUM19TRU5EKSAmJiBSUV9UWVBFKCpod19jcWUpICYmCisJCWlmIChDUUVfU0VORF9PUENPREUoKmh3X2NxZSkgJiYgUlFfVFlQRSgqaHdfY3FlKSAmJgogCQkgICAgUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKSB7CiAJCQlyZXQgPSAtMTsKIAkJCWdvdG8gc2tpcF9jcWU7CiAJCX0KKwkJQlVHX09OKCgqY3FlX2ZsdXNoZWQgPT0gMCkgJiYgIVNXX0NRRSgqaHdfY3FlKSk7CiAJCWdvdG8gcHJvY19jcWU7CiAJfQogCkBAIC0xMjIzLDYgKzEyNDQsMTMgQEAKIAkJICogdGhlbiB3ZSBjb21wbGV0ZSB0aGlzIHdpdGggVFBUX0VSUl9NU04gYW5kIG1hcmsgdGhlIHdxIGluCiAJCSAqIGVycm9yLgogCQkgKi8KKworCQlpZiAoUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKSB7CisJCQl3cS0+ZXJyb3IgPSAxOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIHNraXBfY3FlOworCQl9CisKIAkJaWYgKHVubGlrZWx5KChDUUVfV1JJRF9NU04oKmh3X2NxZSkgIT0gKHdxLT5ycV9ycHRyICsgMSkpKSkgewogCQkJd3EtPmVycm9yID0gMTsKIAkJCWh3X2NxZS0+aGVhZGVyIHw9IGh0b25sKFZfQ1FFX1NUQVRVUyhUUFRfRVJSX01TTikpOwpAQCAtMTI3Nyw2ICsxMzA1LDcgQEAKIAkJCWN4aW9faGFsX3BibHBvb2xfZnJlZSh3cS0+cmRldiwKIAkJCQl3cS0+cnFbUV9QVFIySURYKHdxLT5ycV9ycHRyLAogCQkJCXdxLT5ycV9zaXplX2xvZzIpXS5wYmxfYWRkciwgVDNfU1RBRzBfUEJMX1NJWkUpOworCQlCVUdfT04oUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKTsKIAkJd3EtPnJxX3JwdHIrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKaW5kZXggNjU2ZmU0Ny4uMDk0YTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKQEAgLTYxLDYgKzYxLDggQEAKIAogI2RlZmluZSBUM19NQVhfREVWX05BTUVfTEVOIDMyCiAKKyNkZWZpbmUgQ1hJT19GV19NQUogNworCiBzdHJ1Y3QgY3hpb19oYWxfY3RybF9xcCB7CiAJdTMyIHdwdHI7CiAJdTMyIHJwdHI7CkBAIC0xMDgsNiArMTEwLDkgQEAKIAlzdHJ1Y3QgZ2VuX3Bvb2wgKnBibF9wb29sOwogCXN0cnVjdCBnZW5fcG9vbCAqcnF0X3Bvb2w7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlzdHJ1Y3QgY2hfZW1iZWRkZWRfaW5mbyBmd19pbmZvOworCXUzMglmbGFnczsKKyNkZWZpbmUJQ1hJT19FUlJPUl9GQVRBTAkxCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBjeGlvX251bV9zdGFncyhzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2X3ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAppbmRleCAwNDYxOGY3Li5mZjliZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKQEAgLTYwNCw2ICs2MDQsMTIgQEAKICNkZWZpbmUgQ1FFX1NUQVRVUyh4KSAgICAgKEdfQ1FFX1NUQVRVUyhiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkpCiAjZGVmaW5lIENRRV9PUENPREUoeCkgICAgIChHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpKQogCisjZGVmaW5lIENRRV9TRU5EX09QQ09ERSh4KSggXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkQpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfU0UpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfSU5WKSB8fCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORF9XSVRIX1NFX0lOVikpCisKICNkZWZpbmUgQ1FFX0xFTih4KSAgICAgICAgKGJlMzJfdG9fY3B1KCh4KS5sZW4pKQogCiAvKiB1c2VkIGZvciBSUSBjb21wbGV0aW9uIHByb2Nlc3NpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCmluZGV4IDQ0ODljODkuLjM3YTRmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwpAQCAtNTEsMTMgKzUxLDE1IEBACiAKIHN0YXRpYyB2b2lkIG9wZW5fcm5pY19kZXYoc3RydWN0IHQzY2RldiAqKTsKIHN0YXRpYyB2b2lkIGNsb3NlX3JuaWNfZGV2KHN0cnVjdCB0M2NkZXYgKik7CitzdGF0aWMgdm9pZCBpd2NoX2Vycl9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKiwgdTMyLCB1MzIpOwogCiBzdHJ1Y3QgY3hnYjNfY2xpZW50IHQzY19jbGllbnQgPSB7CiAJLm5hbWUgPSAiaXdfY3hnYjMiLAogCS5hZGQgPSBvcGVuX3JuaWNfZGV2LAogCS5yZW1vdmUgPSBjbG9zZV9ybmljX2RldiwKIAkuaGFuZGxlcnMgPSB0M2NfaGFuZGxlcnMsCi0JLnJlZGlyZWN0ID0gaXdjaF9lcF9yZWRpcmVjdAorCS5yZWRpcmVjdCA9IGl3Y2hfZXBfcmVkaXJlY3QsCisJLmVycl9oYW5kbGVyID0gaXdjaF9lcnJfaGFuZGxlcgogfTsKIAogc3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7CkBAIC0xNjAsNiArMTYyLDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZfbXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBpd2NoX2Vycl9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcikKK3sKKwlzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2ID0gdGRldi0+dWxwOworCisJaWYgKHN0YXR1cyA9PSBPRkZMT0FEX1NUQVRVU19ET1dOKQorCQlyZGV2LT5mbGFncyA9IENYSU9fRVJST1JfRkFUQUw7CisKKwlyZXR1cm47CisKK30KKwogc3RhdGljIGludCBfX2luaXQgaXdjaF9pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCA0NGU5MzZlLi44Njk5OTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTE2NzgsNiArMTY3OCw5IEBACiB7CiAJc3RydWN0IGl3Y2hfZXAgKmVwID0gY3R4OwogCisJaWYgKHN0YXRlX3JlYWQoJmVwLT5jb20pICE9IEZQRFVfTU9ERSkKKwkJcmV0dXJuIENQTF9SRVRfQlVGX0RPTkU7CisKIAlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgY3BsX3JkbWFfdGVybWluYXRlKSk7CiAJUERCRygiJXMgc2F2aW5nICVkIGJ5dGVzIG9mIHRlcm0gbXNnXG4iLCBfX2Z1bmNfXywgc2tiLT5sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKaW5kZXggN2I2N2E2Ny4uNzQzYzVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCkBAIC0xNzksMTEgKzE3OSw2IEBACiAJY2FzZSBUUFRfRVJSX0JPVU5EOgogCWNhc2UgVFBUX0VSUl9JTlZBTElEQVRFX1NIQVJFRF9NUjoKIAljYXNlIFRQVF9FUlJfSU5WQUxJREFURV9NUl9XSVRIX01XX0JPVU5EOgotCQlwcmludGsoS0VSTl9FUlIgIiVzIC0gQ1FFIEVyciBxcGlkIDB4JXggb3Bjb2RlICVkIHN0YXR1cyAweCV4ICIKLQkJICAgICAgICJ0eXBlICVkIHdyaWQuaGkgMHgleCB3cmlkLmxvIDB4JXggXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIENRRV9RUElEKHJzcF9tc2ctPmNxZSksIENRRV9PUENPREUocnNwX21zZy0+Y3FlKSwKLQkJICAgICAgIENRRV9TVEFUVVMocnNwX21zZy0+Y3FlKSwgQ1FFX1RZUEUocnNwX21zZy0+Y3FlKSwKLQkJICAgICAgIENRRV9XUklEX0hJKHJzcF9tc2ctPmNxZSksIENRRV9XUklEX0xPVyhyc3BfbXNnLT5jcWUpKTsKIAkJKCpjaHAtPmliY3EuY29tcF9oYW5kbGVyKSgmY2hwLT5pYmNxLCBjaHAtPmliY3EuY3FfY29udGV4dCk7CiAJCXBvc3RfcXBfZXZlbnQocm5pY3AsIGNocCwgcnNwX21zZywgSUJfRVZFTlRfUVBfQUNDRVNTX0VSUiwgMSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKaW5kZXggMTk2NjFiMi4uYzc1OGZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCkBAIC05OSw4ICs5OSw4IEBACiAJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkgewogCQlwbGVuID0gNDsKIAkJd3FlLT53cml0ZS5zZ2xbMF0uc3RhZyA9IHdyLT5leC5pbW1fZGF0YTsKLQkJd3FlLT53cml0ZS5zZ2xbMF0ubGVuID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKLQkJd3FlLT53cml0ZS5udW1fc2dsZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMCk7CisJCXdxZS0+d3JpdGUuc2dsWzBdLmxlbiA9IGNwdV90b19iZTMyKDApOworCQl3cWUtPndyaXRlLm51bV9zZ2xlID0gY3B1X3RvX2JlMzIoMCk7CiAJCSpmbGl0X2NudCA9IDY7CiAJfSBlbHNlIHsKIAkJcGxlbiA9IDA7CkBAIC0xOTUsMTUgKzE5NSwxMiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVEJEOiB0aGlzIGlzIGdvaW5nIHRvIGJlIG1vdmVkIHRvIGZpcm13YXJlLiBNaXNzaW5nIHBkaWQvcXBpZCBjaGVjayBmb3Igbm93LgotICovCiBzdGF0aWMgaW50IGl3Y2hfc2dsMnBibF9tYXAoc3RydWN0IGl3Y2hfZGV2ICpyaHAsIHN0cnVjdCBpYl9zZ2UgKnNnX2xpc3QsCiAJCQkgICAgdTMyIG51bV9zZ2xlLCB1MzIgKiBwYmxfYWRkciwgdTggKiBwYWdlX3NpemUpCiB7CiAJaW50IGk7CiAJc3RydWN0IGl3Y2hfbXIgKm1ocDsKLQl1MzIgb2Zmc2V0OworCXU2NCBvZmZzZXQ7CiAJZm9yIChpID0gMDsgaSA8IG51bV9zZ2xlOyBpKyspIHsKIAogCQltaHAgPSBnZXRfbWhwKHJocCwgKHNnX2xpc3RbaV0ubGtleSkgPj4gOCk7CkBAIC0yMzUsOCArMjMyLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW9mZnNldCA9IHNnX2xpc3RbaV0uYWRkciAtIG1ocC0+YXR0ci52YV9mYm87Ci0JCW9mZnNldCArPSAoKHUzMikgbWhwLT5hdHRyLnZhX2ZibykgJQotCQkgICAgICAgICAgKDFVTCA8PCAoMTIgKyBtaHAtPmF0dHIucGFnZV9zaXplKSk7CisJCW9mZnNldCArPSBtaHAtPmF0dHIudmFfZmJvICYKKwkJCSAgKCgxVUwgPDwgKDEyICsgbWhwLT5hdHRyLnBhZ2Vfc2l6ZSkpIC0gMSk7CiAJCXBibF9hZGRyW2ldID0gKChtaHAtPmF0dHIucGJsX2FkZHIgLQogCQkJICAgICAgICByaHAtPnJkZXYucm5pY19pbmZvLnBibF9iYXNlKSA+PiAzKSArCiAJCQkgICAgICAob2Zmc2V0ID4+ICgxMiArIG1ocC0+YXR0ci5wYWdlX3NpemUpKTsKQEAgLTI2Niw4ICsyNjMsOCBAQAogCQl3cWUtPnJlY3Yuc2dsW2ldLmxlbiA9IGNwdV90b19iZTMyKHdyLT5zZ19saXN0W2ldLmxlbmd0aCk7CiAKIAkJLyogdG8gaW4gdGhlIFdRRSA9PSB0aGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgKi8KLQkJd3FlLT5yZWN2LnNnbFtpXS50byA9IGNwdV90b19iZTY0KCgodTMyKSB3ci0+c2dfbGlzdFtpXS5hZGRyKSAlCi0JCQkJKDFVTCA8PCAoMTIgKyBwYWdlX3NpemVbaV0pKSk7CisJCXdxZS0+cmVjdi5zZ2xbaV0udG8gPSBjcHVfdG9fYmU2NCgoKHUzMil3ci0+c2dfbGlzdFtpXS5hZGRyKSAmCisJCQkJKCgxVUwgPDwgKDEyICsgcGFnZV9zaXplW2ldKSkgLSAxKSk7CiAKIAkJLyogcGJsX2FkZHIgaXMgdGhlIGFkYXB0ZXJzIGFkZHJlc3MgaW4gdGhlIFBCTCAqLwogCQl3cWUtPnJlY3YucGJsX2FkZHJbaV0gPSBjcHVfdG9fYmUzMihwYmxfYWRkcltpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwppbmRleCA0NDQ0N2FhLi5jNTY4YjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKQEAgLTQ2LDExICs0NiwxMSBAQAogI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCiAjaW5jbHVkZSAiaGNwX2lmLmgiCiAKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19SRURJUkVDVAkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX01BRF9TVEFUVVNfVU5TVVBfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9NRVRIT0QJX19jb25zdGFudF9odG9ucygweDAwMDgpCisjZGVmaW5lIElCX01BRF9TVEFUVVNfUkVESVJFQ1QJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9WRVJTSU9OCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9NRVRIT0QJY3B1X3RvX2JlMTYoMHgwMDA4KQogCi0jZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQljcHVfdG9fYmUxNigweDAwMDEpCiAKIC8qKgogICogZWhjYV9kZWZpbmVfc3FwIC0gRGVmaW5lcyBzcGVjaWFsIHF1ZXVlIHBhaXIgMSAoR1NJIFFQKS4gV2hlbiBzcGVjaWFsIHF1ZXVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggNjljMGNlMy4uY2I5ZGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMjcxNSw3ICsyNzE1LDcgQEAKICAqIHRvIHByZXZlbnQgSG9MIGJsb2NraW5nLCB0aGVuIHN0YXJ0IHRoZSBIb0wgdGltZXIgdGhhdAogICogcGVyaW9kaWNhbGx5IGNvbnRpbnVlcywgdGhlbiBzdG9wIHByb2NzLCBzbyB0aGV5IGNhbiBkZXRlY3QKICAqIGxpbmsgZG93biBpZiB0aGV5IHdhbnQsIGFuZCBkbyBzb21ldGhpbmcgYWJvdXQgaXQuCi0gKiBUaW1lciBtYXkgYWxyZWFkeSBiZSBydW5uaW5nLCBzbyB1c2UgX19tb2RfdGltZXIsIG5vdCBhZGRfdGltZXIuCisgKiBUaW1lciBtYXkgYWxyZWFkeSBiZSBydW5uaW5nLCBzbyB1c2UgbW9kX3RpbWVyLCBub3QgYWRkX3RpbWVyLgogICovCiB2b2lkIGlwYXRoX2hvbF9kb3duKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKQEAgLTI3MjQsNyArMjcyNCw3IEBACiAJZGQtPmlwYXRoX2hvbF9uZXh0ID0gSVBBVEhfSE9MX0RPV05DT05UOwogCWRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwogCQltc2Vjc190b19qaWZmaWVzKGlwYXRoX2hvbF90aW1lb3V0X21zKTsKLQlfX21vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwgZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKKwltb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsIGRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyk7CiB9CiAKIC8qCkBAIC0yNzYzLDcgKzI3NjMsNyBAQAogCWVsc2UgewogCQlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKIAkJCW1zZWNzX3RvX2ppZmZpZXMoaXBhdGhfaG9sX3RpbWVvdXRfbXMpOwotCQlfX21vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwKKwkJbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLAogCQkJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKaW5kZXggZGMzNzI3Ny4uZmM3MTgxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwpAQCAtNzcyLDggKzc3Miw4IEBACiAJCQkgIjB4JXgsIG5vdCAweCV4XG4iLCBjc3VtLCBpZnAtPmlmX2NzdW0pOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gMFVMTCB8fAotCSAgICAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gX19jb25zdGFudF9jcHVfdG9fYmU2NCgtMUxMKSkgeworCWlmICgqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gY3B1X3RvX2JlNjQoMCkgfHwKKwkgICAgKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IH5jcHVfdG9fYmU2NCgwKSkgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiSW52YWxpZCBHVUlEICVsbHggZnJvbSBmbGFzaDsgIgogCQkJICAgICAgImlnbm9yaW5nXG4iLAogCQkJICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikgaWZwLT5pZl9ndWlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwppbmRleCA2NGFlZWZiLi4wNzc4NzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCkBAIC00NTUsNyArNDU1LDcgQEAKIAlpZiAoIWFkZHJzKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gYWxsb2NhdGUgc2hhZG93IGRtYSBoYW5kbGUgIgogCQkJICAgICAgImFycmF5LCBubyBleHBlY3RlZCBzZW5kcyFcbiIpOwotCQl2ZnJlZShkZC0+aXBhdGhfcGFnZXNoYWRvdyk7CisJCXZmcmVlKHBhZ2VzKTsKIAkJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSBOVUxMOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCmluZGV4IDE3YTEyMzEuLjE2YTcwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKQEAgLTM3LDEwICszNywxMCBAQAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCiAjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKLSNkZWZpbmUgSUJfU01QX1VOU1VQX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIT0QJX19jb25zdGFudF9odG9ucygweDAwMDgpCi0jZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIX0FUVFIJX19jb25zdGFudF9odG9ucygweDAwMEMpCi0jZGVmaW5lIElCX1NNUF9JTlZBTElEX0ZJRUxECV9fY29uc3RhbnRfaHRvbnMoMHgwMDFDKQorI2RlZmluZSBJQl9TTVBfVU5TVVBfVkVSU0lPTgljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIT0QJY3B1X3RvX2JlMTYoMHgwMDA4KQorI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSCWNwdV90b19iZTE2KDB4MDAwQykKKyNkZWZpbmUgSUJfU01QX0lOVkFMSURfRklFTEQJY3B1X3RvX2JlMTYoMHgwMDFDKQogCiBzdGF0aWMgaW50IHJlcGx5KHN0cnVjdCBpYl9zbXAgKnNtcCkKIHsKQEAgLTc4OSwxMiArNzg5LDEyIEBACiAJcmV0dXJuIHJlY3Zfc3Vibl9nZXRfcGtleXRhYmxlKHNtcCwgaWJkZXYpOwogfQogCi0jZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX0NPTlRST0wJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSUwkJX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTX0VYVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxRCkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFRfRVhUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFFKQorI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfQ09OVFJPTAljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUCWNwdV90b19iZTE2KDB4MDAxMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlMJCWNwdV90b19iZTE2KDB4MDAxMikKKyNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUCWNwdV90b19iZTE2KDB4MDAxRCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFRfRVhUCWNwdV90b19iZTE2KDB4MDAxRSkKIAogc3RydWN0IGliX3BlcmYgewogCXU4IGJhc2VfdmVyc2lvbjsKQEAgLTg4NCwxOSArODg0LDE5IEBACiAJX19iZTMyIHBvcnRfcmN2X3BhY2tldHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUgkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRE9XTkVECQkJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfRVJST1JTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDQwKQotI2RlZmluZSBJQl9QTUFfU0VMX0xPQ0FMX0xJTktfSU5URUdSSVRZX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDIwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9FWENFU1NJVkVfQlVGRkVSX09WRVJSVU5TCV9fY29uc3RhbnRfaHRvbnMoMHgwNDAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfVkwxNV9EUk9QUEVECQlfX2NvbnN0YW50X2h0b25zKDB4MDgwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDEwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJX19jb25zdGFudF9odG9ucygweDIwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUgkJCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0VSUk9SX1JFQ09WRVJZCQljcHVfdG9fYmUxNigweDAwMDIpCisjZGVmaW5lIElCX1BNQV9TRUxfTElOS19ET1dORUQJCQljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfRVJST1JTCQljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUkVNUEhZU19FUlJPUlMJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9ESVNDQVJEUwkJY3B1X3RvX2JlMTYoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMX0xPQ0FMX0xJTktfSU5URUdSSVRZX0VSUk9SUwljcHVfdG9fYmUxNigweDAyMDApCisjZGVmaW5lIElCX1BNQV9TRUxfRVhDRVNTSVZFX0JVRkZFUl9PVkVSUlVOUwljcHVfdG9fYmUxNigweDA0MDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9WTDE1X0RST1BQRUQJCWNwdV90b19iZTE2KDB4MDgwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfREFUQQkJY3B1X3RvX2JlMTYoMHgxMDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX0RBVEEJCWNwdV90b19iZTE2KDB4MjAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHg0MDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMJCWNwdV90b19iZTE2KDB4ODAwMCkKIAogc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnNfZXh0IHsKIAl1OCByZXNlcnZlZDsKQEAgLTkxMywxNCArOTEzLDE0IEBACiAJX19iZTY0IHBvcnRfbXVsdGljYXN0X3Jjdl9wYWNrZXRzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfWE1JVF9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9SQ1ZfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAyMCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwNDApCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfUkNWX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwODApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9EQVRBCQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX0RBVEEJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMJCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHgwMDA4KQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9YTUlUX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9SQ1ZfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwMjApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfWE1JVF9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDA0MCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9SQ1ZfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwODApCiAKIHN0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X2NsYXNzcG9ydGluZm8oc3RydWN0IGliX3BlcmYgKnBtcCkKIHsKQEAgLTkzMyw3ICs5MzMsNyBAQAogCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCS8qIEluZGljYXRlIEFsbFBvcnRTZWxlY3QgaXMgdmFsaWQgKG9ubHkgb25lIHBvcnQgYW55d2F5KSAqLwotCXAtPmNhcF9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigxIDw8IDgpOworCXAtPmNhcF9tYXNrID0gY3B1X3RvX2JlMTYoMSA8PCA4KTsKIAlwLT5iYXNlX3ZlcnNpb24gPSAxOwogCXAtPmNsYXNzX3ZlcnNpb24gPSAxOwogCS8qCkBAIC05NTEsMTIgKzk1MSwxMSBAQAogICogV2Ugc3VwcG9ydCA1IGNvdW50ZXJzIHdoaWNoIG9ubHkgY291bnQgdGhlIG1hbmRhdG9yeSBxdWFudGl0aWVzLgogICovCiAjZGVmaW5lIENPVU5URVJfTUFTSyhxLCBuKSAocSA8PCAoKDkgLSBuKSAqIDMpKQotI2RlZmluZSBDT1VOVEVSX01BU0swXzkgXAotCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoQ09VTlRFUl9NQVNLKDEsIDApIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAxKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMikgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDMpIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCA0KSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLMF85IGNwdV90b19iZTMyKENPVU5URVJfTUFTSygxLCAwKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDEpIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgMikgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCAzKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDQpKQogCiBzdGF0aWMgaW50IHJlY3ZfcG1hX2dldF9wb3J0c2FtcGxlc2NvbnRyb2woc3RydWN0IGliX3BlcmYgKnBtcCwKIAkJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCkBAIC0xMTM3LDcgKzExMzYsNyBAQAogCQlzdGF0dXMgPSBkZXYtPnBtYV9zYW1wbGVfc3RhdHVzOwogCXAtPnNhbXBsZV9zdGF0dXMgPSBjcHVfdG9fYmUxNihzdGF0dXMpOwogCS8qIDY0IGJpdHMgKi8KLQlwLT5leHRlbmRlZF93aWR0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHg4MDAwMDAwMCk7CisJcC0+ZXh0ZW5kZWRfd2lkdGggPSBjcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPnBtYV9jb3VudGVyX3NlbGVjdCk7IGkrKykKIAkJcC0+Y291bnRlcltpXSA9IChzdGF0dXMgIT0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfRE9ORSkgPyAwIDoKIAkJICAgIGNwdV90b19iZTY0KApAQCAtMTE4NSw3ICsxMTg0LDcgQEAKIAkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAKIAlpZiAoY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXIgPiAweEZGRkZVTCkKLQkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXIpOwpAQCAtMTE5OSwxNyArMTE5OCwxNyBAQAogCWVsc2UKIAkJcC0+bGlua19kb3duZWRfY291bnRlciA9ICh1OCljbnRycy5saW5rX2Rvd25lZF9jb3VudGVyOwogCWlmIChjbnRycy5wb3J0X3Jjdl9lcnJvcnMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfZXJyb3JzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfZXJyb3JzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpIGNudHJzLnBvcnRfcmN2X2Vycm9ycyk7CiAJaWYgKGNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID4gMHhGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9CiAJCQljcHVfdG9fYmUxNigodTE2KWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzKTsKIAlpZiAoY250cnMucG9ydF94bWl0X2Rpc2NhcmRzID4gMHhGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9kaXNjYXJkcyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9kaXNjYXJkcyA9CiAJCQljcHVfdG9fYmUxNigodTE2KWNudHJzLnBvcnRfeG1pdF9kaXNjYXJkcyk7CkBAIC0xMjIwLDI0ICsxMjE5LDI0IEBACiAJcC0+bGxpX2Vib3JfZXJyb3JzID0gKGNudHJzLmxvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9ycyA8PCA0KSB8CiAJCWNudHJzLmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7CiAJaWYgKGNudHJzLnZsMTVfZHJvcHBlZCA+IDB4RkZGRlVMKQotCQlwLT52bDE1X2Ryb3BwZWQgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnZsMTVfZHJvcHBlZCA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT52bDE1X2Ryb3BwZWQgPSBjcHVfdG9fYmUxNigodTE2KWNudHJzLnZsMTVfZHJvcHBlZCk7CiAJaWYgKGNudHJzLnBvcnRfeG1pdF9kYXRhID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3htaXRfZGF0YSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfeG1pdF9kYXRhID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3htaXRfZGF0YSA9IGNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF94bWl0X2RhdGEpOwogCWlmIChjbnRycy5wb3J0X3Jjdl9kYXRhID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9kYXRhID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfZGF0YSA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfZGF0YSA9IGNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF9yY3ZfZGF0YSk7CiAJaWYgKGNudHJzLnBvcnRfeG1pdF9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9CiAJCQljcHVfdG9fYmUzMigodTMyKWNudHJzLnBvcnRfeG1pdF9wYWNrZXRzKTsKIAlpZiAoY250cnMucG9ydF9yY3ZfcGFja2V0cyA+IDB4RkZGRkZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfcmN2X3BhY2tldHMgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X3BhY2tldHMgPQogCQkJY3B1X3RvX2JlMzIoKHUzMikgY250cnMucG9ydF9yY3ZfcGFja2V0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCmluZGV4IDkxNzA3MTAuLjc5YjNkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCkBAIC0xNzQ0LDcgKzE3NDQsNyBAQAogCQkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMKaW5kZXggOGUyNTVhZC4uNGIwNjk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jCkBAIC03ODEsMTAgKzc4MSwxMCBAQAogCQlkZXNjcXAgPSAmZGQtPmlwYXRoX3NkbWFfZGVzY3FbZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250XS5xd1swXTsKIAlkZXNjcXAgLT0gMjsKIAkvKiBTRG1hTGFzdERlc2MgKi8KLQlkZXNjcXBbMF0gfD0gX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExKTsKKwlkZXNjcXBbMF0gfD0gY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSk7CiAJaWYgKHR4LT50eHJlcS5mbGFncyAmIElQQVRIX1NETUFfVFhSRVFfRl9JTlRSRVEpIHsKIAkJLyogU0RtYUludFJlcSAqLwotCQlkZXNjcXBbMF0gfD0gX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDE1KTsKKwkJZGVzY3FwWzBdIHw9IGNwdV90b19sZTY0KDFVTEwgPDwgMTUpOwogCX0KIAogCS8qIENvbW1pdCB3cml0ZXMgdG8gbWVtb3J5IGFuZCBhZHZhbmNlIHRoZSB0YWlsIG9uIHRoZSBjaGlwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCmluZGV4IDgyY2M1ODguLjIyZTYwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCkBAIC00MTksNyArNDE5LDcgQEAKIAkJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLwogCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJCSAgICAgICAob2hkci0+YnRoWzBdICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJCQljcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKaW5kZXggOTFjNzRjYy4uNjA3NmNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCSAqLwogCW9oZHItPmJ0aFsxXSA9IGFoX2F0dHItPmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFICYmCiAJCWFoX2F0dHItPmRsaWQgIT0gSVBBVEhfUEVSTUlTU0lWRV9MSUQgPwotCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKElQQVRIX01VTFRJQ0FTVF9RUE4pIDoKKwkJY3B1X3RvX2JlMzIoSVBBVEhfTVVMVElDQVNUX1FQTikgOgogCQljcHVfdG9fYmUzMih3cWUtPndyLndyLnVkLnJlbW90ZV9xcG4pOwogCW9oZHItPmJ0aFsyXSA9IGNwdV90b19iZTMyKHFwLT5zX25leHRfcHNuKysgJiBJUEFUSF9QU05fTUFTSyk7CiAJLyoKQEAgLTU3Myw3ICs1NzMsNyBAQAogCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KIAlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCQljcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CiAKIGJhaWw6OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKaW5kZXggMDE5MGVkYy4uODU1OTExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCkBAIC0yMDksMjAgKzIwOSwyMCBAQAogCiAJbW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKIAlpZiAoIW1tKQotCQlnb3RvIGJhaWw7CisJCXJldHVybjsKIAogCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9LRVJORUwpOwogCWlmICghd29yaykKIAkJZ290byBiYWlsX21tOwogCi0JZ290byBiYWlsOwotCiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCB1c2VyX3BhZ2VzX2FjY291bnQpOwogCXdvcmstPm1tID0gbW07CiAJd29yay0+bnVtX3BhZ2VzID0gbnVtX3BhZ2VzOwogCisJc2NoZWR1bGVfd29yaygmd29yay0+d29yayk7CisJcmV0dXJuOworCiBiYWlsX21tOgogCW1tcHV0KG1tKTsKLWJhaWw6CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCmluZGV4IDgyZDlhMGIuLjdiZmY0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKQEAgLTY2NywxMyArNjY3LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgX19sZTY0IGlwYXRoX3NkbWFfbWFrZV9maXJzdF9kZXNjMChfX2xlNjQgZGVzY3EpCiB7Ci0JcmV0dXJuIGRlc2NxIHwgX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDEyKTsKKwlyZXR1cm4gZGVzY3EgfCBjcHVfdG9fbGU2NCgxVUxMIDw8IDEyKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2xhc3RfZGVzYzAoX19sZTY0IGRlc2NxKQogewogCQkJCQkgICAgICAvKiBsYXN0ICovICAvKiBkbWEgaGVhZCAqLwotCXJldHVybiBkZXNjcSB8IF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSB8IDFVTEwgPDwgMTMpOworCXJldHVybiBkZXNjcSB8IGNwdV90b19sZTY0KDFVTEwgPDwgMTEgfCAxVUxMIDw8IDEzKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2Rlc2MxKHU2NCBhZGRyKQpAQCAtNzYzLDcgKzc2Myw3IEBACiAJCWlmIChvZnMgPj0gSVBBVEhfU01BTExCVUZfRFdPUkRTKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgcGt0LT5uYWRkcjsgaSsrKSB7CiAJCQkJZGQtPmlwYXRoX3NkbWFfZGVzY3FbZHRhaWxdLnF3WzBdIHw9Ci0JCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxNCk7CisJCQkJCWNwdV90b19sZTY0KDFVTEwgPDwgMTQpOwogCQkJCWlmICgrK2R0YWlsID09IGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCkKIAkJCQkJZHRhaWwgPSAwOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwppbmRleCBjZGYwZTZhLi45Mjg5YWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtMTU4NSw3ICsxNTg1LDcgQEAKIAl1NjQgaWJjc3RhdDsKIAogCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKCpwcm9wcykpOwotCXByb3BzLT5saWQgPSBsaWQgPyBsaWQgOiBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwlwcm9wcy0+bGlkID0gbGlkID8gbGlkIDogYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOwogCXByb3BzLT5sbWMgPSBkZC0+aXBhdGhfbG1jOwogCXByb3BzLT5zbV9saWQgPSBkZXYtPnNtX2xpZDsKIAlwcm9wcy0+c21fc2wgPSBkZXYtPnNtX3NsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaAppbmRleCAxMWUzZjYxLi5hZTZjZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaApAQCAtODYsMTEgKzg2LDExIEBACiAjZGVmaW5lIElCX1BNQV9TQU1QTEVfU1RBVFVTX1JVTk5JTkcJMHgwMgogCiAvKiBNYW5kYXRvcnkgSUIgcGVyZm9ybWFuY2UgY291bnRlciBzZWxlY3QgdmFsdWVzLiAqLwotI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9EQVRBCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDMpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9QS1RTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQJX19jb25zdGFudF9odG9ucygweDAwMDUpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfREFUQQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9EQVRBCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9QS1RTCWNwdV90b19iZTE2KDB4MDAwMykKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX1BLVFMJY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQJY3B1X3RvX2JlMTYoMHgwMDA1KQogCiBzdHJ1Y3QgaWJfcmV0aCB7CiAJX19iZTY0IHZhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwppbmRleCA2MDZmMWUyLi4xOWU2OGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwpAQCAtMTQ3LDcgKzE0Nyw4IEBACiAgKiBTbm9vcCBTTSBNQURzIGZvciBwb3J0IGluZm8gYW5kIFBfS2V5IHRhYmxlIHNldHMsIHNvIHdlIGNhbgogICogc3ludGhlc2l6ZSBMSUQgY2hhbmdlIGFuZCBQX0tleSBjaGFuZ2UgZXZlbnRzLgogICovCi1zdGF0aWMgdm9pZCBzbXBfc25vb3Aoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfbWFkICptYWQpCitzdGF0aWMgdm9pZCBzbXBfc25vb3Aoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfbWFkICptYWQsCisJCQkJdTE2IHByZXZfbGlkKQogewogCXN0cnVjdCBpYl9ldmVudCBldmVudDsKIApAQCAtMTU3LDYgKzE1OCw3IEBACiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8pIHsKIAkJCXN0cnVjdCBpYl9wb3J0X2luZm8gKnBpbmZvID0KIAkJCQkoc3RydWN0IGliX3BvcnRfaW5mbyAqKSAoKHN0cnVjdCBpYl9zbXAgKikgbWFkKS0+ZGF0YTsKKwkJCXUxNiBsaWQgPSBiZTE2X3RvX2NwdShwaW5mby0+bGlkKTsKIAogCQkJdXBkYXRlX3NtX2FoKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSwKIAkJCQkgICAgIGJlMTZfdG9fY3B1KHBpbmZvLT5zbV9saWQpLApAQCAtMTY1LDEyICsxNjcsMTUgQEAKIAkJCWV2ZW50LmRldmljZQkgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwotCQkJZWxzZQotCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCi0JCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJaWYgKHByZXZfbGlkICE9IGxpZCkgeworCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCQl9CiAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BLRVlfVEFCTEUpIHsKQEAgLTIyOCw4ICsyMzMsOSBAQAogCQkJc3RydWN0IGliX3djICppbl93Yywgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAogCQkJc3RydWN0IGliX21hZCAqaW5fbWFkLCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQogewotCXUxNiBzbGlkOworCXUxNiBzbGlkLCBwcmV2X2xpZCA9IDA7CiAJaW50IGVycjsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIHBhdHRyOwogCiAJc2xpZCA9IGluX3djID8gaW5fd2MtPnNsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CiAKQEAgLTI2Myw2ICsyNjksMTMgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKIAorCWlmICgoaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQgfHwKKwkgICAgIGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9TRVQgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPICYmCisJICAgICFpYl9xdWVyeV9wb3J0KGliZGV2LCBwb3J0X251bSwgJnBhdHRyKSkKKwkJcHJldl9saWQgPSBwYXR0ci5saWQ7CisKIAllcnIgPSBtbHg0X01BRF9JRkModG9fbWRldihpYmRldiksCiAJCQkgICBtYWRfZmxhZ3MgJiBJQl9NQURfSUdOT1JFX01LRVksCiAJCQkgICBtYWRfZmxhZ3MgJiBJQl9NQURfSUdOT1JFX0JLRVksCkBAIC0yNzEsNyArMjg0LDcgQEAKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfRkFJTFVSRTsKIAogCWlmICghb3V0X21hZC0+bWFkX2hkci5zdGF0dXMpIHsKLQkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkKTsKKwkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkLCBwcmV2X2xpZCk7CiAJCW5vZGVfZGVzY19vdmVycmlkZShpYmRldiwgb3V0X21hZCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKaW5kZXggNjE1ODhiZC4uMmNjYjlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwpAQCAtNjk5LDExICs2OTksMTIgQEAKIAlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmliZGV2ID0gaWJkZXZfcHRyOwogCWludCBwOwogCisJbWx4NF9pYl9tYWRfY2xlYW51cChpYmRldik7CisJaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmliZGV2LT5pYl9kZXYpOworCiAJZm9yIChwID0gMTsgcCA8PSBpYmRldi0+bnVtX3BvcnRzOyArK3ApCiAJCW1seDRfQ0xPU0VfUE9SVChkZXYsIHApOwogCi0JbWx4NF9pYl9tYWRfY2xlYW51cChpYmRldik7Ci0JaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmliZGV2LT5pYl9kZXYpOwogCWlvdW5tYXAoaWJkZXYtPnVhcl9tYXApOwogCW1seDRfdWFyX2ZyZWUoZGV2LCAmaWJkZXYtPnByaXZfdWFyKTsKIAltbHg0X3BkX2ZyZWUoZGV2LCBpYmRldi0+cHJpdl9wZG4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKaW5kZXggYTkxY2I0Yy4uZjM4NWEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCkBAIC03MSwxNyArNzEsMTcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBfX2JlMzIgbWx4NF9pYl9vcGNvZGVbXSA9IHsKLQlbSUJfV1JfU0VORF0JCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORCksCi0JW0lCX1dSX0xTT10JCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTFNPKSwKLQlbSUJfV1JfU0VORF9XSVRIX0lNTV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lNTSksCi0JW0lCX1dSX1JETUFfV1JJVEVdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9XUklURSksCi0JW0lCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU1dCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFX0lNTSksCi0JW0lCX1dSX1JETUFfUkVBRF0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1JFQUQpLAotCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9BVE9NSUNfQ1MpLAotCVtJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19GQSksCi0JW0lCX1dSX1NFTkRfV0lUSF9JTlZdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTlZBTCksCi0JW0lCX1dSX0xPQ0FMX0lOVl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MT0NBTF9JTlZBTCksCi0JW0lCX1dSX0ZBU1RfUkVHX01SXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0ZNUiksCisJW0lCX1dSX1NFTkRdCQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKKwlbSUJfV1JfTFNPXQkJCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTFNPKSwKKwlbSUJfV1JfU0VORF9XSVRIX0lNTV0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTU0pLAorCVtJQl9XUl9SRE1BX1dSSVRFXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKKwlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFX0lNTSksCisJW0lCX1dSX1JETUFfUkVBRF0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9SRUFEKSwKKwlbSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCisJW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19GQSksCisJW0lCX1dSX1NFTkRfV0lUSF9JTlZdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU5WQUwpLAorCVtJQl9XUl9MT0NBTF9JTlZdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xPQ0FMX0lOVkFMKSwKKwlbSUJfV1JfRkFTVF9SRUdfTVJdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0ZNUiksCiB9OwogCiBzdGF0aWMgc3RydWN0IG1seDRfaWJfc3FwICp0b19tc3FwKHN0cnVjdCBtbHg0X2liX3FwICptcXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKaW5kZXggNjQwNDQ5NS4uNTY0ODY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwpAQCAtMTA0LDcgKzEwNCw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKIAkJICAgICAgdTggcG9ydF9udW0sCi0JCSAgICAgIHN0cnVjdCBpYl9tYWQgKm1hZCkKKwkJICAgICAgc3RydWN0IGliX21hZCAqbWFkLAorCQkgICAgICB1MTYgcHJldl9saWQpCiB7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCkBAIC0xMTQsNiArMTE1LDcgQEAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgewogCQkJc3RydWN0IGliX3BvcnRfaW5mbyAqcGluZm8gPQogCQkJCShzdHJ1Y3QgaWJfcG9ydF9pbmZvICopICgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhOworCQkJdTE2IGxpZCA9IGJlMTZfdG9fY3B1KHBpbmZvLT5saWQpOwogCiAJCQltdGhjYV91cGRhdGVfcmF0ZSh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0pOwogCQkJdXBkYXRlX3NtX2FoKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSwKQEAgLTEyMywxMiArMTI1LDE1IEBACiAJCQlldmVudC5kZXZpY2UgICAgICAgICAgID0gaWJkZXY7CiAJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydF9udW07CiAKLQkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApCisJCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKSB7CiAJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKLQkJCWVsc2UKLQkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCX0KIAotCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCWlmIChwcmV2X2xpZCAhPSBsaWQpIHsKKwkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCX0KIAkJfQogCiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFKSB7CkBAIC0xOTYsNiArMjAxLDggQEAKIAlpbnQgZXJyOwogCXU4IHN0YXR1czsKIAl1MTYgc2xpZCA9IGluX3djID8gaW5fd2MtPnNsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CisJdTE2IHByZXZfbGlkID0gMDsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIHBhdHRyOwogCiAJLyogRm9yd2FyZCBsb2NhbGx5IGdlbmVyYXRlZCB0cmFwcyB0byB0aGUgU00gKi8KIAlpZiAoaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9UUkFQICYmCkBAIC0yMzMsNiArMjQwLDEyIEBACiAJCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOwogCX0gZWxzZQogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCWlmICgoaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQgfHwKKwkgICAgIGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9TRVQgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPICYmCisJICAgICFpYl9xdWVyeV9wb3J0KGliZGV2LCBwb3J0X251bSwgJnBhdHRyKSkKKwkJcHJldl9saWQgPSBwYXR0ci5saWQ7CiAKIAllcnIgPSBtdGhjYV9NQURfSUZDKHRvX21kZXYoaWJkZXYpLAogCQkJICAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfTUtFWSwKQEAgLTI1Miw3ICsyNjUsNyBAQAogCX0KIAogCWlmICghb3V0X21hZC0+bWFkX2hkci5zdGF0dXMpIHsKLQkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkKTsKKwkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkLCBwcmV2X2xpZCk7CiAJCW5vZGVfZGVzY19vdmVycmlkZShpYmRldiwgb3V0X21hZCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwppbmRleCBiOTYxMWFkLi5jYTU5OTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAppbmRleCAxM2E1YmIxLi4wNGIxMmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwppbmRleCBhMDFiNDQ4Li41MjQyNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTEwMyw2ICsxMDMsNyBAQAogc3RhdGljIHZvaWQgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0YXRpYyBpbnQgc2VuZF9tcGFfcmVxdWVzdChzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitzdGF0aWMgaW50IHNlbmRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX25vZGUgKik7CiBzdGF0aWMgaW50IHNlbmRfc3luKHN0cnVjdCBuZXNfY21fbm9kZSAqLCB1MzIsIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBzZW5kX3Jlc2V0KHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyBpbnQgc2VuZF9hY2soc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTExMyw4ICsxMTQsNyBAQAogc3RhdGljIHZvaWQgYWN0aXZlX29wZW5fZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogc3RhdGljIHZvaWQgcGFzc2l2ZV9vcGVuX2VycihzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIHN0YXRpYyB2b2lkIGNsZWFudXBfcmV0cmFuc19lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKik7Ci1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwKLQllbnVtIG5lc19jbV9ldmVudF90eXBlKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyB2b2lkIGZyZWVfcmV0cmFuc19lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpOwogc3RhdGljIGludCBoYW5kbGVfdGNwX29wdGlvbnMoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAogCXN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRpb25zaXplLCBpbnQgcGFzc2l2ZSk7CkBAIC0xMjQsNiArMTI0LDggQEAKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X2Nvbm5lY3RfZXJyb3Ioc3RydWN0IG5lc19jbV9ldmVudCAqKTsKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X3Jlc2V0KHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CiBzdGF0aWMgdm9pZCBjbV9ldmVudF9tcGFfcmVxKHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CitzdGF0aWMgdm9pZCBjbV9ldmVudF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHUzMiByZW1fbm9kZSk7CiAKIHN0YXRpYyB2b2lkIHByaW50X2NvcmUoc3RydWN0IG5lc19jbV9jb3JlICpjb3JlKTsKIApAQCAtMTk2LDcgKzE5OCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgc2VuZF9tcGFfcmVxdWVzdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJldDsKIAlpZiAoIXNrYikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgInNrYiBzZXQgdG8gTlVMTFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTIwNiwxMSArMjA3LDI3IEBACiAJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsICZjbV9ub2RlLT5tcGFfZnJhbWUsCiAJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgU0VUX0FDSyk7CiAKLQlyZXQgPSBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIHNrYiwgTkVTX1RJTUVSX1RZUEVfU0VORCwgMSwgMCk7Cit9CiAKLQlyZXR1cm4gMDsKKworCitzdGF0aWMgaW50IHNlbmRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCit7CisJc3RydWN0IHNrX2J1ZmYgICpza2IgPSBOVUxMOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihNQVhfQ01fQlVGRkVSKTsKKwlpZiAoIXNrYikgeworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkZhaWxlZCB0byBnZXQgYSBGcmVlIHBrdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHNlbmQgYW4gTVBBIHJlamVjdCBmcmFtZSAqLworCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCAmY21fbm9kZS0+bXBhX2ZyYW1lLAorCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsIFNFVF9BQ0sgfCBTRVRfRklOKTsKKworCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMTsKKwlyZXR1cm4gc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIHNrYiwgTkVTX1RJTUVSX1RZUEVfU0VORCwgMSwgMCk7CiB9CiAKIApAQCAtMjE4LDE0ICsyMzUsMTcgQEAKICAqIHJlY3ZfbXBhIC0gcHJvY2VzcyBhIHJlY2VpdmVkIFRDUCBwa3QsIHdlIGFyZSBleHBlY3RpbmcgYW4KICAqIElFVEYgTVBBIGZyYW1lCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTggKmJ1ZmZlciwgdTMyIGxlbikKK3N0YXRpYyBpbnQgcGFyc2VfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTggKmJ1ZmZlciwgdTMyICp0eXBlLAorCQl1MzIgbGVuKQogewogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lOwogCisJKnR5cGUgPSBORVNfTVBBX1JFUVVFU1RfQUNDRVBUOworCiAJLyogYXNzdW1lIHJlcSBmcmFtZSBpcyBpbiB0Y3AgZGF0YSBwYXlsb2FkICovCiAJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiVGhlIHJlY2VpdmVkIGlldGYgYnVmZmVyIHdhcyB0b28gc21hbGwgKCV4KVxuIiwgbGVuKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltcGFfZnJhbWUgPSAoc3RydWN0IGlldGZfbXBhX2ZyYW1lICopYnVmZmVyOwpAQCAtMjM0LDE0ICsyNTQsMjUgQEAKIAlpZiAoY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSAhPSBsZW4pIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIG5vdCByaWdodCIKIAkJCQkiIGNvbXBsZXRlICgleCArICV4ICE9ICV4KVxuIiwKLQkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKLQkJcmV0dXJuIC0xOworCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLAorCQkJCSh1MzIpc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSksIGxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBtYWtlIHN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXggc2l6ZSAqLworCWlmIChsZW4gPiBNQVhfQ01fQlVGRkVSKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiVGhlIHJlY2VpdmVkIGlldGYgYnVmZmVyIHdhcyB0b28gbGFyZ2UiCisJCQkJIiAoJXggKyAleCAhPSAleClcbiIsCisJCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsCisJCQkJKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogY29weSBlbnRpcmUgTVBBIGZyYW1lIHRvIG91ciBjbV9ub2RlJ3MgZnJhbWUgKi8KIAltZW1jcHkoY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZiwgYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSksCiAJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSk7CiAKKwlpZiAobXBhX2ZyYW1lLT5mbGFncyAmIElFVEZfTVBBX0ZMQUdTX1JFSkVDVCkKKwkJKnR5cGUgPSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUOwogCXJldHVybiAwOwogfQogCkBAIC0zODAsNyArNDExLDcgQEAKIAogCW5ld19zZW5kID0ga3phbGxvYyhzaXplb2YoKm5ld19zZW5kKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfc2VuZCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIG5ld19zZW5kLT50aW1ldG9zZW5kID0gY3VycmVudHRpbWUgKi8KIAluZXdfc2VuZC0+cmV0cnljb3VudCA9IE5FU19ERUZBVUxUX1JFVFJZUzsKQEAgLTM5NCw5ICs0MjUsMTEgQEAKIAogCWlmICh0eXBlID09IE5FU19USU1FUl9UWVBFX0NMT1NFKSB7CiAJCW5ld19zZW5kLT50aW1ldG9zZW5kICs9IChIWi8xMCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZF90YWlsKCZuZXdfc2VuZC0+bGlzdCwgJmNtX25vZGUtPnJlY3ZfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CisJCWlmIChjbV9ub2RlLT5yZWN2X2VudHJ5KSB7CisJCQlXQVJOX09OKDEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY21fbm9kZS0+cmVjdl9lbnRyeSA9IG5ld19zZW5kOwogCX0KIAogCWlmICh0eXBlID09IE5FU19USU1FUl9UWVBFX1NFTkQpIHsKQEAgLTQzNSwyNCArNDY4LDc4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgbmVzX3JldHJhbnNfZXhwaXJlZChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCit7CisJc3dpdGNoIChjbV9ub2RlLT5zdGF0ZSkgeworCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOgorCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s6CisJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOgorCQlzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcmVhdGVfZXZlbnQoY21fbm9kZSwgTkVTX0NNX0VWRU5UX0FCT1JURUQpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JlY3ZfZW50cnkoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1MzIgcmVtX25vZGUpCit7CisJc3RydWN0IG5lc190aW1lcl9lbnRyeSAqcmVjdl9lbnRyeSA9IGNtX25vZGUtPnJlY3ZfZW50cnk7CisJc3RydWN0IGl3X2NtX2lkICpjbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCXN0cnVjdCBuZXNfcXAgKm5lc3FwOworCXVuc2lnbmVkIGxvbmcgcXBsb2NrZmxhZ3M7CisKKwlpZiAoIXJlY3ZfZW50cnkpCisJCXJldHVybjsKKwluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopcmVjdl9lbnRyeS0+c2tiOworCWlmIChuZXNxcCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJaWYgKG5lc3FwLT5jbV9pZCkgeworCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCisJCQkJInJlZmNvdW50ID0gJWQ6IEhJVCBBICIKKwkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgIgorCQkJCSJ0byBkbyEhIVxuIiwgbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkLAorCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKKwkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOworCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOworCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKKwkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgorCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgIgorCQkJCSJ0byBkbyEhIVxuIiwgbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkLAorCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKKwkJfQorCX0gZWxzZSBpZiAocmVtX25vZGUpIHsKKwkJLyogVElNRV9XQUlUIHN0YXRlICovCisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwl9CisJaWYgKGNtX25vZGUtPmNtX2lkKQorCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7CisJa2ZyZWUocmVjdl9lbnRyeSk7CisJY21fbm9kZS0+cmVjdl9lbnRyeSA9IE5VTEw7Cit9CiAKIC8qKgogICogbmVzX2NtX3RpbWVyX3RpY2sKICAqLwogc3RhdGljIHZvaWQgbmVzX2NtX3RpbWVyX3RpY2sodW5zaWduZWQgbG9uZyBwYXNzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHFwbG9ja2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBuZXh0dGltZW91dCA9IGppZmZpZXMgKyBORVNfTE9OR19USU1FOwotCXN0cnVjdCBpd19jbV9pZCAqY21faWQ7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOwogCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgKnNlbmRfZW50cnksICpyZWN2X2VudHJ5OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZSwgKmxpc3RfY29yZV90ZW1wOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Rfbm9kZSwgKmxpc3Rfbm9kZV90ZW1wOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZV90ZW1wOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Rfbm9kZTsKIAlzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUgPSBnX2NtX2NvcmU7Ci0Jc3RydWN0IG5lc19xcCAqbmVzcXA7CiAJdTMyIHNldHRpbWVyID0gMDsKIAlpbnQgcmV0ID0gTkVUREVWX1RYX09LOwotCWVudW0gbmVzX2NtX25vZGVfc3RhdGUgbGFzdF9zdGF0ZTsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGltZXJfbGlzdDsKIAlJTklUX0xJU1RfSEVBRCgmdGltZXJfbGlzdCk7CkBAIC00NjEsNyArNTQ4LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9ub2RlLCBsaXN0X2NvcmVfdGVtcCwKIAkJCQkmY21fY29yZS0+Y29ubmVjdGVkX25vZGVzKSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9ub2RlLCBzdHJ1Y3QgbmVzX2NtX25vZGUsIGxpc3QpOwotCQlpZiAoIWxpc3RfZW1wdHkoJmNtX25vZGUtPnJlY3ZfbGlzdCkgfHwgKGNtX25vZGUtPnNlbmRfZW50cnkpKSB7CisJCWlmICgoY21fbm9kZS0+cmVjdl9lbnRyeSkgfHwgKGNtX25vZGUtPnNlbmRfZW50cnkpKSB7CiAJCQlhZGRfcmVmX2NtX25vZGUoY21fbm9kZSk7CiAJCQlsaXN0X2FkZCgmY21fbm9kZS0+dGltZXJfZW50cnksICZ0aW1lcl9saXN0KTsKIAkJfQpAQCAtNDcxLDU0ICs1NTgsMTggQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9ub2RlLCBsaXN0X2NvcmVfdGVtcCwgJnRpbWVyX2xpc3QpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBuZXNfY21fbm9kZSwKIAkJCQkJdGltZXJfZW50cnkpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfY29yZSwgbGlzdF9ub2RlX3RlbXAsCi0JCQkmY21fbm9kZS0+cmVjdl9saXN0KSB7Ci0JCQlyZWN2X2VudHJ5ID0gY29udGFpbmVyX29mKGxpc3RfY29yZSwKLQkJCQlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5LCBsaXN0KTsKLQkJCWlmICghcmVjdl9lbnRyeSkKLQkJCQlicmVhazsKKwkJcmVjdl9lbnRyeSA9IGNtX25vZGUtPnJlY3ZfZW50cnk7CisKKwkJaWYgKHJlY3ZfZW50cnkpIHsKIAkJCWlmICh0aW1lX2FmdGVyKHJlY3ZfZW50cnktPnRpbWV0b3NlbmQsIGppZmZpZXMpKSB7CiAJCQkJaWYgKG5leHR0aW1lb3V0ID4gcmVjdl9lbnRyeS0+dGltZXRvc2VuZCB8fAotCQkJCQkhc2V0dGltZXIpIHsKKwkJCQkJCSFzZXR0aW1lcikgewogCQkJCQluZXh0dGltZW91dCA9IHJlY3ZfZW50cnktPnRpbWV0b3NlbmQ7CiAJCQkJCXNldHRpbWVyID0gMTsKIAkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlsaXN0X2RlbCgmcmVjdl9lbnRyeS0+bGlzdCk7Ci0JCQljbV9pZCA9IGNtX25vZGUtPmNtX2lkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKLQkJCQkJInJlZmNvdW50ID0gJWQ6IEhJVCBBICIKLQkJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggc29tZXRoaW5nICIKLQkJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCi0JCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKLQkJCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRDsKLQkJCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7Ci0JCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLAotCQkJCQlxcGxvY2tmbGFncyk7Ci0JCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwotCQkJfSBlbHNlIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywKLQkJCQkJcXBsb2NrZmxhZ3MpOwotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgotCQkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgotCQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nICIKLQkJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCi0JCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKLQkJCX0KLQkJCWlmIChjbV9pZCkKLQkJCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7Ci0KLQkJCWtmcmVlKHJlY3ZfZW50cnkpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UKKwkJCQloYW5kbGVfcmVjdl9lbnRyeShjbV9ub2RlLCAxKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywgZmxhZ3MpOwogCQlkbyB7CkBAIC01MzMsMTIgKzU4NCwxMSBAQAogCQkJCQkJbmV4dHRpbWVvdXQgPQogCQkJCQkJCXNlbmRfZW50cnktPnRpbWV0b3NlbmQ7CiAJCQkJCQlzZXR0aW1lciA9IDE7Ci0JCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CiAJCQkJCWZyZWVfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJCQkJYnJlYWs7CiAJCQkJfQorCQkJCWJyZWFrOwogCQkJfQogCiAJCQlpZiAoKGNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9UU0EpIHx8CkBAIC01NTAsMTYgKzYwMCwxMiBAQAogCQkJaWYgKCFzZW5kX2VudHJ5LT5yZXRyYW5zY291bnQgfHwKIAkJCQkhc2VuZF9lbnRyeS0+cmV0cnljb3VudCkgewogCQkJCWNtX3BhY2tldHNfZHJvcHBlZCsrOwotCQkJCWxhc3Rfc3RhdGUgPSBjbV9ub2RlLT5zdGF0ZTsKLQkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CiAJCQkJZnJlZV9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKIAkJCQkJJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKGxhc3Rfc3RhdGUgPT0gTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEKQotCQkJCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7Ci0JCQkJZWxzZQotCQkJCQljcmVhdGVfZXZlbnQoY21fbm9kZSwKLQkJCQkJCU5FU19DTV9FVkVOVF9BQk9SVEVEKTsKKwkJCQluZXNfcmV0cmFuc19leHBpcmVkKGNtX25vZGUpOworCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssCiAJCQkJCWZsYWdzKTsKIAkJCQlicmVhazsKQEAgLTcxNCw3ICs3NjAsNyBAQAogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9DTV9CVUZGRVIpOwogCWlmICghc2tiKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRmFpbGVkIHRvIGdldCBhIEZyZWUgcGt0XG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgTlVMTCwgMCwgZmxhZ3MpOwpAQCAtNzc4LDE0ICs4MjQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmh0ZTsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7Ci0JX19iZTMyIHRtcF9hZGRyID0gY3B1X3RvX2JlMzIobG9jX2FkZHIpOwogCiAJLyogZ2V0IGEgaGFuZGxlIG9uIHRoZSBodGUgKi8KIAlodGUgPSAmY21fY29yZS0+Y29ubmVjdGVkX25vZGVzOwogCi0JbmVzX2RlYnVnKE5FU19EQkdfQ00sICJTZWFyY2hpbmcgZm9yIGFuIG93bmVyIG5vZGU6ICVwSTQ6JXggZnJvbSBjb3JlICVwLT4lcFxuIiwKLQkJICAmdG1wX2FkZHIsIGxvY19wb3J0LCBjbV9jb3JlLCBodGUpOwotCiAJLyogd2FsayBsaXN0IGFuZCBmaW5kIGNtX25vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbiBJRCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9jb3JlLT5odF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbV9ub2RlLCBodGUsIGxpc3QpIHsKQEAgLTg3NSw3ICs5MTcsOCBAQAogc3RhdGljIGludCBtaW5pX2NtX2RlY19yZWZjbnRfbGlzdGVuKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKIAlzdHJ1Y3QgbmVzX2NtX2xpc3RlbmVyICpsaXN0ZW5lciwgaW50IGZyZWVfaGFuZ2luZ19ub2RlcykKIHsKLQlpbnQgcmV0ID0gMTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3RlbXAgPSBOVUxMOwpAQCAtOTA0LDEwICs5NDcsNjAgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF90ZW1wLCAmcmVzZXRfbGlzdCkgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3RfcG9zLCBzdHJ1Y3QgbmVzX2NtX25vZGUsCi0JCQkJCXJlc2V0X2VudHJ5KTsKLQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQlzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOwotCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCQkJcmVzZXRfZW50cnkpOworCQl7CisJCQlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrID0gY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyOworCQkJaWYgKE5FU19DTV9TVEFURV9GSU5fV0FJVDEgPD0gY21fbm9kZS0+c3RhdGUpIHsKKwkJCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCQl9IGVsc2UgeworCQkJCWlmICghbG9vcGJhY2spIHsKKwkJCQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQkJCQllcnIgPSBzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQkJCQlpZiAoZXJyKSB7CisJCQkJCQljbV9ub2RlLT5zdGF0ZSA9CisJCQkJCQkJIE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJCQlXQVJOX09OKDEpOworCQkJCQl9IGVsc2UgeworCQkJCQkJY21fbm9kZS0+c3RhdGUgPQorCQkJCQkJCU5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJCQlyZW1fcmVmX2NtX25vZGUoCisJCQkJCQkJY21fbm9kZS0+Y21fY29yZSwKKwkJCQkJCQljbV9ub2RlKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXN0cnVjdCBuZXNfY21fZXZlbnQgZXZlbnQ7CisKKwkJCQkJZXZlbnQuY21fbm9kZSA9IGxvb3BiYWNrOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9hZGRyID0KKwkJCQkJCQlsb29wYmFjay0+cmVtX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPQorCQkJCQkJCWxvb3BiYWNrLT5sb2NfYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fcG9ydCA9CisJCQkJCQkJbG9vcGJhY2stPnJlbV9wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmxvY19wb3J0ID0KKwkJCQkJCQkgbG9vcGJhY2stPmxvY19wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQkJCQljbV9ldmVudF9jb25uZWN0X2Vycm9yKCZldmVudCk7CisJCQkJCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisKKwkJCQkJZXZlbnQuY21fbm9kZSA9IGNtX25vZGU7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPQorCQkJCQkJCSBjbV9ub2RlLT5yZW1fYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9CisJCQkJCQkJIGNtX25vZGUtPmxvY19hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0KKwkJCQkJCQkgY21fbm9kZS0+cmVtX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPQorCQkJCQkJCSBjbV9ub2RlLT5sb2NfcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5jbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCQkJCQljbV9ldmVudF9yZXNldCgmZXZlbnQpOworCisJCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLAorCQkJCQkJCSBjbV9ub2RlKTsKKworCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9jb3JlLT5saXN0ZW5fbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05NjgsNiArMTA2MSw3IEBACiAJaWYgKGNtX25vZGUtPmFjY2VwdF9wZW5kKSB7CiAJCUJVR19PTighY21fbm9kZS0+bGlzdGVuZXIpOwogCQlhdG9taWNfZGVjKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CisJCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMDsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCkgPCAwKTsKIAl9CiAKQEAgLTk5NCw3ICsxMDg4LDcgQEAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YgZmwpOwogCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBodG9ubChkc3RfaXApOwogCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7Ci0JCXByaW50aygiJXM6IGlwX3JvdXRlX291dHB1dF9rZXkgZmFpbGVkIGZvciAweCUwOFhcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlwX3JvdXRlX291dHB1dF9rZXkgZmFpbGVkIGZvciAweCUwOFhcbiIsCiAJCQkJX19mdW5jX18sIGRzdF9pcCk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0xMDU3LDggKzExNTEsNiBAQAogCQkJY21fbm9kZS0+Y21faWQpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmY21fbm9kZS0+cmVjdl9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2spOwogCiAJY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyID0gTlVMTDsKIAlhdG9taWNfc2V0KCZjbV9ub2RlLT5yZWZfY291bnQsIDEpOwpAQCAtMTEyNiwxMCArMTIxOCw3IEBACiBzdGF0aWMgaW50IHJlbV9yZWZfY21fbm9kZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUsCiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHFwbG9ja2ZsYWdzOwotCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgKnJlY3ZfZW50cnk7Ci0Jc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2NvcmUsICpsaXN0X25vZGVfdGVtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwogCiAJaWYgKCFjbV9ub2RlKQpAQCAtMTE1MCwzOCArMTIzOSw5IEBACiAJCWF0b21pY19kZWMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCkgPCAwKTsKIAl9Ci0JQlVHX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X2NvcmUsIGxpc3Rfbm9kZV90ZW1wLCAmY21fbm9kZS0+cmVjdl9saXN0KSB7Ci0JCXJlY3ZfZW50cnkgPSBjb250YWluZXJfb2YobGlzdF9jb3JlLCBzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5LAotCQkJCWxpc3QpOwotCQlsaXN0X2RlbCgmcmVjdl9lbnRyeS0+bGlzdCk7Ci0JCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQlpZiAobmVzcXAtPmNtX2lkKSB7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXA6IEhJVCBBICIKLQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgdG8gZG8hXG4iLAotCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCk7Ci0JCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRDsKLQkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKLQkJCW5lc3FwLT5pYnFwX3N0YXRlID0gSUJfUVBTX0VSUjsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCX0gZWxzZSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwOiBISVQgQSAiCi0JCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyB0byBkbyFcbiIsCi0JCQkJbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkKTsKLQkJfQotCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7Ci0KLQkJa2ZyZWUocmVjdl9lbnRyeSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCisJV0FSTl9PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKKwlpZiAoY21fbm9kZS0+cmVjdl9lbnRyeSkKKwkJaGFuZGxlX3JlY3ZfZW50cnkoY21fbm9kZSwgMCk7CiAJaWYgKGNtX25vZGUtPmxpc3RlbmVyKSB7CiAJCW1pbmlfY21fZGVjX3JlZmNudF9saXN0ZW4oY21fY29yZSwgY21fbm9kZS0+bGlzdGVuZXIsIDApOwogCX0gZWxzZSB7CkBAIC0xMjY2LDggKzEzMjYsNyBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9maW5fcGt0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQlzdHJ1Y3QgdGNwaGRyICp0Y3BoKQorc3RhdGljIHZvaWQgaGFuZGxlX2Zpbl9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUmVjZWl2ZWQgRklOLCBjbV9ub2RlID0gJXAsIHN0YXRlID0gJXUuICIKIAkJInJlZmNudD0lZFxuIiwgY21fbm9kZSwgY21fbm9kZS0+c3RhdGUsCkBAIC0xMjc5LDIzICsxMzM4LDMwIEBACiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0xBU1RfQUNLOwotCQlzZW5kX2ZpbihjbV9ub2RlLCBza2IpOworCQlzZW5kX2ZpbihjbV9ub2RlLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TSU5HOwotCQlzZW5kX2FjayhjbV9ub2RlLCBza2IpOworCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKKwkJLyogV2FpdCBmb3IgQUNLIGFzIHRoaXMgaXMgc2ltdWx0YW5vdXMgY2xvc2UuLgorCQkqIEFmdGVyIHdlIHJlY2VpdmUgQUNLLCBkbyBub3Qgc2VuZCBhbnl0aGluZy4uCisJCSogSnVzdCBybSB0aGUgbm9kZS4uIERvbmUuLiAqLwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDI6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDsKLQkJc2VuZF9hY2soY21fbm9kZSwgc2tiKTsKKwkJc2VuZF9hY2soY21fbm9kZSwgTlVMTCk7CisJCXNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBOVUxMLCAgTkVTX1RJTUVSX1RZUEVfQ0xPU0UsIDEsIDApOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9USU1FX1dBSVQ6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9UU0E6CiAJZGVmYXVsdDoKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJFcnJvciBSY3ZkIEZJTiBmb3Igbm9kZS0lcCBzdGF0ZSA9ICVkXG4iLAogCQkJY21fbm9kZSwgY21fbm9kZS0+c3RhdGUpOwotCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xMzQxLDIzICsxNDA3LDM1IEBACiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlkcm9wX3BhY2tldChza2IpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJCYWQgc3RhdGUgJXNbJXVdXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCWRlZmF1bHQ6CiAJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUgdHlwZSkKKworc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCi0JaW50CXJldDsKKwlpbnQJcmV0ID0gMDsKIAlpbnQgZGF0YXNpemUgPSBza2ItPmxlbjsKIAl1OCAqZGF0YWxvYyA9IHNrYi0+ZGF0YTsKLQlyZXQgPSBwYXJzZV9tcGEoY21fbm9kZSwgZGF0YWxvYywgZGF0YXNpemUpOwotCWlmIChyZXQgPCAwKSB7CisKKwllbnVtIG5lc19jbV9ldmVudF90eXBlIHR5cGUgPSBORVNfQ01fRVZFTlRfVU5LTk9XTjsKKwl1MzIgICAgIHJlc190eXBlOworCXJldCA9IHBhcnNlX21wYShjbV9ub2RlLCBkYXRhbG9jLCAmcmVzX3R5cGUsIGRhdGFzaXplKTsKKwlpZiAocmV0KSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZGlkbid0IGxpa2UgTVBBIFJlcXVlc3RcbiIpOwotCQlpZiAodHlwZSA9PSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEKSB7CisJCWlmIChjbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQpIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXNbJXVdIGNyZWF0ZSBhYm9ydCBmb3IgIgogCQkJCSJjbV9ub2RlPSVwIGxpc3RlbmVyPSVwIHN0YXRlPSVkXG4iLCBfX2Z1bmNfXywKIAkJCQlfX0xJTkVfXywgY21fbm9kZSwgY21fbm9kZS0+bGlzdGVuZXIsCkBAIC0xMzY2LDE4ICsxNDQ0LDM4IEBACiAJCX0gZWxzZSB7CiAJCQlwYXNzaXZlX29wZW5fZXJyKGNtX25vZGUsIHNrYiwgMSk7CiAJCX0KLQl9IGVsc2UgewotCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCWlmICh0eXBlID09IE5FU19DTV9FVkVOVF9DT05ORUNURUQpCi0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9UU0E7Ci0JCWVsc2UKLQkJCWF0b21pY19zZXQoJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUsCi0JCQkJCU5FU19QQVNTSVZFX1NUQVRFX0lORElDQVRFRCk7Ci0JCWNyZWF0ZV9ldmVudChjbV9ub2RlLCB0eXBlKTsKLQorCQlyZXR1cm47CiAJfQotCXJldHVybiA7CisKKwlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CisJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CisJCWlmIChyZXNfdHlwZSA9PSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUKSB7CisJCQkvKkJJRyBwcm9ibGVtIGFzIHdlIGFyZSByZWNlaXZpbmcgdGhlIE1QQS4uIFNvIHNob3VsZAorCQkJKiBub3QgYmUgUkVKRUNULi4gVGhpcyBpcyBQYXNzaXZlIE9wZW4uLiBXZSBjYW4KKwkJCSogb25seSByZWNlaXZlIGl0IFJlamVjdCBmb3IgQWN0aXZlIE9wZW4uLi4qLworCQkJV0FSTl9PTigxKTsKKwkJfQorCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKKwkJdHlwZSA9IE5FU19DTV9FVkVOVF9NUEFfUkVROworCQlhdG9taWNfc2V0KCZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlLAorCQkJCU5FU19QQVNTSVZFX1NUQVRFX0lORElDQVRFRCk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCQlpZiAocmVzX3R5cGUgPT0gTkVTX01QQV9SRVFVRVNUX1JFSkVDVCkgeworCQkJdHlwZSA9IE5FU19DTV9FVkVOVF9NUEFfUkVKRUNUOworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ7CisJCX0gZWxzZSB7CisJCQl0eXBlID0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRDsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RTQTsKKwkJfQorCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWNyZWF0ZV9ldmVudChjbV9ub2RlLCB0eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgaW5kaWNhdGVfcGt0X2VycihzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNDY1LDggKzE1NjMsNiBAQAogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwotCQljbV9ub2RlLT5hY2NlcHRfcGVuZCA9IDE7Ci0JCWF0b21pY19pbmMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKIAkJaWYgKGF0b21pY19yZWFkKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCkgPgogCQkJCWNtX25vZGUtPmxpc3RlbmVyLT5iYWNrbG9nKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgImRyb3Agc3luIGR1ZSB0byBiYWNrbG9nICIKQEAgLTE0ODQsNiArMTU4MCw5IEBACiAJCX0KIAkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl9ueHQgPSBpbmNfc2VxdWVuY2UgKyAxOwogCQlCVUdfT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7CisJCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMTsKKwkJYXRvbWljX2luYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOworCiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOwogCQlzZW5kX3N5bihjbV9ub2RlLCAxLCBza2IpOwogCQlicmVhazsKQEAgLTE1MTgsNiArMTYxNyw3IEBACiAJaW5jX3NlcXVlbmNlID0gbnRvaGwodGNwaC0+c2VxKTsKIAlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJLyogYWN0aXZlIG9wZW4gKi8KIAkJaWYgKGNoZWNrX3N5bihjbV9ub2RlLCB0Y3BoLCBza2IpKQogCQkJcmV0dXJuOwpAQCAtMTU2NywxMCArMTY2Nyw3IEBACiAJdTMyIHJlbV9zZXE7CiAJaW50IHJldDsKIAlpbnQgb3B0aW9uc2l6ZTsKLQl1MzIgdGVtcF9zZXEgPSBjbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW07Ci0KIAlvcHRpb25zaXplID0gKHRjcGgtPmRvZmYgPDwgMikgLSBzaXplb2Yoc3RydWN0IHRjcGhkcik7Ci0JY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtID0gbnRvaGwodGNwaC0+YWNrX3NlcSk7CiAKIAlpZiAoY2hlY2tfc2VxKGNtX25vZGUsIHRjcGgsIHNrYikpCiAJCXJldHVybjsKQEAgLTE1ODAsNyArMTY3Nyw3IEBACiAJcmVtX3NlcSA9IG50b2hsKHRjcGgtPnNlcSk7CiAJcmVtX3NlcV9hY2sgPSAgbnRvaGwodGNwaC0+YWNrX3NlcSk7CiAJZGF0YXNpemUgPSBza2ItPmxlbjsKLQorCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwpAQCAtMTU4OCw3ICsxNjg1LDYgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQljbV9ub2RlLT50Y3BfY250eHQucmVtX2Fja19udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKLQkJY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtID0gdGVtcF9zZXE7CiAJCWlmIChjbV9ub2RlLT50Y3BfY250eHQucmVtX2Fja19udW0gIT0KIAkJICAgIGNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bSkgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJyZW1fYWNrX251bSAhPSBsb2Nfc2VxX251bVxuIik7CkBAIC0xNTk3LDMxICsxNjkzLDMwIEBACiAJCQlyZXR1cm47CiAJCX0KIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ7CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJaWYgKGRhdGFzaXplKSB7CiAJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIGRhdGFzaXplOwotCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsIE5FU19DTV9FVkVOVF9NUEFfUkVRKTsKLQkJIH0gZWxzZSB7IC8qIHJjdmQgQUNLIG9ubHkgKi8KKwkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYik7CisJCX0gZWxzZSB7IC8qIHJjdmQgQUNLIG9ubHkgKi8KIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCSB9CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0VTVEFCTElTSEVEOgogCQkvKiBQYXNzaXZlIE9QRU4gKi8KLQkJLyogV2UgZXhwZWN0IG1wYSBmcmFtZSB0byBiZSByZWNlaXZlZCBvbmx5ICovCisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJaWYgKGRhdGFzaXplKSB7CiAJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIGRhdGFzaXplOwotCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsCi0JCQkJTkVTX0NNX0VWRU5UX01QQV9SRVEpOworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKIAkJfSBlbHNlCiAJCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQljbV9ub2RlLT50Y3BfY250eHQucmVtX2Fja19udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAkJaWYgKGRhdGFzaXplKSB7CiAJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIGRhdGFzaXplOwotCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiLCBORVNfQ01fRVZFTlRfQ09OTkVDVEVEKTsKKwkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYik7CiAJCX0gZWxzZSB7IC8qIENvdWxkIGJlIGp1c3QgYW4gYWNrIHBrdC4uICovCiAJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMTYzMiwxMyArMTcyNywyNCBAQAogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCXNlbmRfcmVzZXQoY21fbm9kZSwgc2tiKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQljbV9ub2RlLT5jbV9pZC0+cmVtX3JlZihjbV9ub2RlLT5jbV9pZCk7CisJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQlkcm9wX3BhY2tldChza2IpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9GSU5fV0FJVDI7CisJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9TRU5UOgogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjoKIAljYXNlIE5FU19DTV9TVEFURV9UU0E6CiAJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ6Ci0JY2FzZSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s6Ci0JY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKIAljYXNlIE5FU19DTV9TVEFURV9VTktOT1dOOgogCWRlZmF1bHQ6CiAJCWRyb3BfcGFja2V0KHNrYik7CkBAIC0xNzQ4LDYgKzE4NTQsNyBAQAogewogCWVudW0gbmVzX3RjcGlwX3BrdF90eXBlCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX1VOS05PV047CiAJc3RydWN0IHRjcGhkciAqdGNwaCA9IHRjcF9oZHIoc2tiKTsKKwl1MzIgICAgIGZpbl9zZXQgPSAwOwogCXNrYl9wdWxsKHNrYiwgaXBfaGRyKHNrYiktPmlobCA8PCAyKTsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAicHJvY2Vzc19wYWNrZXQ6IGNtX25vZGU9JXAgc3RhdGUgPSVkIHN5bj0lZCAiCkBAIC0xNzYwLDEwICsxODY3LDEwIEBACiAJCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX1NZTjsKIAkJaWYgKHRjcGgtPmFjaykKIAkJCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX1NZTkFDSzsKLQl9IGVsc2UgaWYgKHRjcGgtPmZpbikKLQkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfRklOOwotCWVsc2UgaWYgKHRjcGgtPmFjaykKKwl9IGVsc2UgaWYgKHRjcGgtPmFjaykKIAkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfQUNLOworCWlmICh0Y3BoLT5maW4pCisJCWZpbl9zZXQgPSAxOwogCiAJc3dpdGNoIChwa3RfdHlwZSkgewogCWNhc2UgTkVTX1BLVF9UWVBFX1NZTjoKQEAgLTE3NzQsMTUgKzE4ODEsMTYgQEAKIAkJYnJlYWs7CiAJY2FzZSBORVNfUEtUX1RZUEVfQUNLOgogCQloYW5kbGVfYWNrX3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOworCQlpZiAoZmluX3NldCkKKwkJCWhhbmRsZV9maW5fcGt0KGNtX25vZGUpOwogCQlicmVhazsKIAljYXNlIE5FU19QS1RfVFlQRV9SU1Q6CiAJCWhhbmRsZV9yc3RfcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7CiAJCWJyZWFrOwotCWNhc2UgTkVTX1BLVF9UWVBFX0ZJTjoKLQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJaWYgKGZpbl9zZXQpCisJCQloYW5kbGVfZmluX3BrdChjbV9ub2RlKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTkyNSw3ICsyMDMzLDcgQEAKIAkJCQlsb29wYmFja3JlbW90ZW5vZGUtPnRjcF9jbnR4dC5yY3Zfd3NjYWxlOwogCQkJbG9vcGJhY2tyZW1vdGVub2RlLT50Y3BfY250eHQuc25kX3dzY2FsZSA9CiAJCQkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl93c2NhbGU7Ci0KKwkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7CiAJCQljcmVhdGVfZXZlbnQobG9vcGJhY2tyZW1vdGVub2RlLCBORVNfQ01fRVZFTlRfTVBBX1JFUSk7CiAJCX0KIAkJcmV0dXJuIGNtX25vZGU7CkBAIC0xOTgwLDcgKzIwODgsMTEgQEAKIAlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKm1wYV9mcmFtZSwgc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCWludCByZXQgPSAwOworCWludCBlcnIgPSAwOwogCWludCBwYXNzaXZlX3N0YXRlOworCXN0cnVjdCBuZXNfY21fZXZlbnQgZXZlbnQ7CisJc3RydWN0IGl3X2NtX2lkICpjbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CiAKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgIiVzIGNtX25vZGU9JXAgdHlwZT0lZCBzdGF0ZT0lZFxuIiwKIAkJX19mdW5jX18sIGNtX25vZGUsIGNtX25vZGUtPnRjcF9jbnR4dC5jbGllbnQsIGNtX25vZGUtPnN0YXRlKTsKQEAgLTE5ODksMTIgKzIxMDEsMzggQEAKIAkJcmV0dXJuIHJldDsKIAljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAKLQlwYXNzaXZlX3N0YXRlID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUpOwotCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKLQlpZiAocGFzc2l2ZV9zdGF0ZSA9PSBORVNfU0VORF9SRVNFVF9FVkVOVCkKKwlpZiAoIWxvb3BiYWNrKSB7CisJCXBhc3NpdmVfc3RhdGUgPSBhdG9taWNfYWRkX3JldHVybigxLCAmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSk7CisJCWlmIChwYXNzaXZlX3N0YXRlID09IE5FU19TRU5EX1JFU0VUX0VWRU5UKSB7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBzZW5kX21wYV9yZWplY3QoY21fbm9kZSk7CisJCQlpZiAocmV0KSB7CisJCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJaWYgKGVycikKKwkJCQkJV0FSTl9PTigxKTsKKwkJCX0gZWxzZQorCQkJCWNtX2lkLT5hZGRfcmVmKGNtX2lkKTsKKwkJfQorCX0gZWxzZSB7CisJCWNtX25vZGUtPmNtX2lkID0gTlVMTDsKKwkJZXZlbnQuY21fbm9kZSA9IGxvb3BiYWNrOworCQlldmVudC5jbV9pbmZvLnJlbV9hZGRyID0gbG9vcGJhY2stPnJlbV9hZGRyOworCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0gbG9vcGJhY2stPmxvY19hZGRyOworCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0gbG9vcGJhY2stPnJlbV9wb3J0OworCQlldmVudC5jbV9pbmZvLmxvY19wb3J0ID0gbG9vcGJhY2stPmxvY19wb3J0OworCQlldmVudC5jbV9pbmZvLmNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQljbV9ldmVudF9tcGFfcmVqZWN0KCZldmVudCk7CiAJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKLQllbHNlCi0JCXJldCA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TSU5HOworCisJCWNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgbG9vcGJhY2spOworCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAzMSw2ICsyMTY5LDcgQEAKIAljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgogCQlyZXQgPSAtMTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfTElTVEVOSU5HOgogCWNhc2UgTkVTX0NNX1NUQVRFX1VOS05PV046CiAJY2FzZSBORVNfQ01fU1RBVEVfSU5JVEVEOgpAQCAtMjIyNywxNSArMjM2NiwxNSBAQAogCWludCByZXQgPSAwOwogCiAJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgTkVTX0NNX1NFVF9QS1RfU0laRToKLQkJCWNtX2NvcmUtPm10dSA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVTX0NNX1NFVF9GUkVFX1BLVF9RX1NJWkU6Ci0JCQljbV9jb3JlLT5mcmVlX3R4X3BrdF9tYXggPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogdW5rbm93biBzZXQgb3B0aW9uICovCi0JCQlyZXQgPSAtRUlOVkFMOworCWNhc2UgTkVTX0NNX1NFVF9QS1RfU0laRToKKwkJY21fY29yZS0+bXR1ID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NFVF9GUkVFX1BLVF9RX1NJWkU6CisJCWNtX2NvcmUtPmZyZWVfdHhfcGt0X21heCA9IHZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB1bmtub3duIHNldCBvcHRpb24gKi8KKwkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjQ5MCwxMiArMjYyOSwxNCBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2OworCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKIAogCW5lc3ZuaWMgPSB0b19uZXN2bmljKG5lc3FwLT5pYnFwLmRldmljZSk7CiAJaWYgKCFuZXN2bmljKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKKwluZXNpYmRldiA9IG5lc3ZuaWMtPm5lc2liZGV2OwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJuZXRkZXYgcmVmY250ID0gJXUuXG4iLAogCQkJYXRvbWljX3JlYWQoJm5lc3ZuaWMtPm5ldGRldi0+cmVmY250KSk7CkBAIC0yNTA3LDYgKzI2NDgsOCBAQAogCX0gZWxzZSB7CiAJCS8qIE5lZWQgdG8gZnJlZSB0aGUgTGFzdCBTdHJlYW1pbmcgTW9kZSBNZXNzYWdlICovCiAJCWlmIChuZXNxcC0+aWV0Zl9mcmFtZSkgeworCQkJaWYgKG5lc3FwLT5sc21tX21yKQorCQkJCW5lc2liZGV2LT5pYmRldi5kZXJlZ19tcihuZXNxcC0+bHNtbV9tcik7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LAogCQkJCQluZXNxcC0+cHJpdmF0ZV9kYXRhX2xlbitzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwKIAkJCQkJbmVzcXAtPmlldGZfZnJhbWUsIG5lc3FwLT5pZXRmX2ZyYW1lX3BiYXNlKTsKQEAgLTI1NDMsNiArMjY4NiwxMiBAQAogCXUzMiBjcmNfdmFsdWU7CiAJaW50IHJldDsKIAlpbnQgcGFzc2l2ZV9zdGF0ZTsKKwlzdHJ1Y3QgbmVzX2liX2RldmljZSAqbmVzaWJkZXY7CisJc3RydWN0IGliX21yICppYm1yID0gTlVMTDsKKwlzdHJ1Y3QgaWJfcGh5c19idWYgaWJwaHlzYnVmOworCXN0cnVjdCBuZXNfcGQgKm5lc3BkOworCisKIAogCWlicXAgPSBuZXNfZ2V0X3FwKGNtX2lkLT5kZXZpY2UsIGNvbm5fcGFyYW0tPnFwbik7CiAJaWYgKCFpYnFwKQpAQCAtMjYwMSw2ICsyNzUwLDI2IEBACiAJaWYgKGNtX2lkLT5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIgIT0KIAkJCWNtX2lkLT5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkcikgewogCQl1NjR0ZW1wID0gKHVuc2lnbmVkIGxvbmcpbmVzcXA7CisJCW5lc2liZGV2ID0gbmVzdm5pYy0+bmVzaWJkZXY7CisJCW5lc3BkID0gbmVzcXAtPm5lc3BkOworCQlpYnBoeXNidWYuYWRkciA9IG5lc3FwLT5pZXRmX2ZyYW1lX3BiYXNlOworCQlpYnBoeXNidWYuc2l6ZSA9IGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gKworCQkJCQlzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKTsKKwkJaWJtciA9IG5lc2liZGV2LT5pYmRldi5yZWdfcGh5c19tcigoc3RydWN0IGliX3BkICopbmVzcGQsCisJCQkJCQkmaWJwaHlzYnVmLCAxLAorCQkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFLAorCQkJCQkJKHU2NCAqKSZuZXNxcC0+aWV0Zl9mcmFtZSk7CisJCWlmICghaWJtcikgeworCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJVbmFibGUgdG8gcmVnaXN0ZXIgbWVtb3J5IHJlZ2lvbiIKKwkJCQkJImZvciBsU01NIGZvciBjbV9ub2RlID0gJXAgXG4iLAorCQkJCQljbV9ub2RlKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJaWJtci0+cGQgPSAmbmVzcGQtPmlicGQ7CisJCWlibXItPmRldmljZSA9IG5lc3BkLT5pYnBkLmRldmljZTsKKwkJbmVzcXAtPmxzbW1fbXIgPSBpYm1yOworCiAJCXU2NHRlbXAgfD0gTkVTX1NXX0NPTlRFWFRfQUxJR04+PjE7CiAJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsCiAJCQlORVNfSVdBUlBfU1FfV1FFX0NPTVBfQ1RYX0xPV19JRFgsCkBAIC0yNjExLDIzICsyNzgwLDIwIEBACiAJCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfVE9UQUxfUEFZTE9BRF9JRFhdID0KIAkJCWNwdV90b19sZTMyKGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gKwogCQkJc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpOwotCQl3cWUtPndxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX0ZSQUcwX0xPV19JRFhdID0KLQkJCWNwdV90b19sZTMyKCh1MzIpbmVzcXAtPmlldGZfZnJhbWVfcGJhc2UpOwotCQl3cWUtPndxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX0ZSQUcwX0hJR0hfSURYXSA9Ci0JCQljcHVfdG9fbGUzMigodTMyKSgodTY0KW5lc3FwLT5pZXRmX2ZyYW1lX3BiYXNlID4+IDMyKSk7CisJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsCisJCQkJCU5FU19JV0FSUF9TUV9XUUVfRlJBRzBfTE9XX0lEWCwKKwkJCQkJKHU2NCluZXNxcC0+aWV0Zl9mcmFtZSk7CiAJCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfTEVOR1RIMF9JRFhdID0KIAkJCWNwdV90b19sZTMyKGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gKwogCQkJc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpOwotCQl3cWUtPndxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX1NUQUcwX0lEWF0gPSAwOworCQl3cWUtPndxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX1NUQUcwX0lEWF0gPSBpYm1yLT5sa2V5OwogCiAJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5pcmRfb3JkX3NpemVzIHw9CiAJCQljcHVfdG9fbGUzMihORVNfUVBDT05URVhUX09SRElSRF9MU01NX1BSRVNFTlQgfAogCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUpOwogCX0gZWxzZSB7CiAJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5pcmRfb3JkX3NpemVzIHw9Ci0JCQljcHVfdG9fbGUzMigoTkVTX1FQQ09OVEVYVF9PUkRJUkRfTFNNTV9QUkVTRU5UIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX0FMU01NKSk7CisJCQljcHVfdG9fbGUzMihORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSk7CiAJfQogCW5lc3FwLT5za2lwX2xzbW0gPSAxOwogCkBAIC0yNzQ5LDIzICsyOTE1LDM1IEBACiBpbnQgbmVzX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBjb25zdCB2b2lkICpwZGF0YSwgdTggcGRhdGFfbGVuKQogewogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrOworCiAJc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlOwogCiAJYXRvbWljX2luYygmY21fcmVqZWN0cyk7CiAJY21fbm9kZSA9IChzdHJ1Y3QgbmVzX2NtX25vZGUgKikgY21faWQtPnByb3ZpZGVyX2RhdGE7CisJbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CiAJY21fY29yZSA9IGNtX25vZGUtPmNtX2NvcmU7CisJY21fbm9kZS0+Y21faWQgPSBjbV9pZDsKIAljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsgcGRhdGFfbGVuOwogCi0Jc3RyY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUua2V5WzBdLCBJRUZUX01QQV9LRVlfUkVQKTsKLQltZW1jcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA+IE1BWF9DTV9CVUZGRVIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCXN0cmNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLmtleVswXSwgSUVGVF9NUEFfS0VZX1JFUCk7CisJaWYgKGxvb3BiYWNrKSB7CisJCW1lbWNweSgmbG9vcGJhY2stPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCQlsb29wYmFjay0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBwZGF0YV9sZW47CisJCWxvb3BiYWNrLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsKKwkJCQlwZGF0YV9sZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwkJY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCX0KKwogCWNtX25vZGUtPm1wYV9mcmFtZS5yZXYgPSBtcGFfdmVyc2lvbjsKIAljbV9ub2RlLT5tcGFfZnJhbWUuZmxhZ3MgPSBJRVRGX01QQV9GTEFHU19DUkMgfCBJRVRGX01QQV9GTEFHU19SRUpFQ1Q7CiAKLQljbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKLQotCXJldHVybiAwOworCXJldHVybiBjbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKIH0KIAogCkBAIC0zMjc0LDEzICszNDUyLDU2IEBACiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5yZW1fcG9ydCk7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ucmVtX2FkZHIpOwotCi0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YSAgICAgICAgICAgICAgICA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7Ci0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gICAgICAgICAgICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKKwljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CiAKIAlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKIAlpZiAocmV0KQotCQlwcmludGsoIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgY21fZXZlbnRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaXdfY21faWQgICAqY21faWQ7CisJc3RydWN0IGl3X2NtX2V2ZW50IGNtX2V2ZW50OworCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlpbnQgcmV0OworCisJY21fbm9kZSA9IGV2ZW50LT5jbV9ub2RlOworCWlmICghY21fbm9kZSkKKwkJcmV0dXJuOworCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisKKwlhdG9taWNfaW5jKCZjbV9jb25uZWN0X3JlcXMpOworCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiY21fbm9kZSA9ICVwIC0gY21faWQgPSAlcCwgamlmZmllcyA9ICVsdVxuIiwKKwkJCWNtX25vZGUsIGNtX2lkLCBqaWZmaWVzKTsKKworCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVBMWTsKKwljbV9ldmVudC5zdGF0dXMgPSAtRUNPTk5SRUZVU0VEOworCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLmxvY19wb3J0KTsKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLmxvY19hZGRyKTsKKworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ucmVtX3BvcnQpOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLnJlbV9hZGRyKTsKKworCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisKKwluZXNfZGVidWcoTkVTX0RCR19DTSwgImNhbGwgQ01fRVZFTlRfTVBBX1JFSkVDVEVELCBsb2NhbF9hZGRyPSUwOHgsICIKKwkJCSJyZW1vdmVfYWRkcj0lMDh4XG4iLAorCQkJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIsCisJCQljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIpOworCisJcmV0ID0gY21faWQtPmV2ZW50X2hhbmRsZXIoY21faWQsICZjbV9ldmVudCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAKIAlyZXR1cm47CkBAIC0zMzQ1LDYgKzM1NjYsMTQgQEAKIAkJY21fZXZlbnRfY29ubmVjdGVkKGV2ZW50KTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJDTSBFdmVudDogQ09OTkVDVEVEXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fRVZFTlRfTVBBX1JFSkVDVDoKKwkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAorCQkJCShldmVudC0+Y21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkpCisJCQlicmVhazsKKwkJY21fZXZlbnRfbXBhX3JlamVjdChldmVudCk7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiQ00gRXZlbnQ6IFJFSkVDVFxuIik7CisJCWJyZWFrOworCiAJY2FzZSBORVNfQ01fRVZFTlRfQUJPUlRFRDoKIAkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAogCQkJKGV2ZW50LT5jbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCmluZGV4IGZhZmEzNTAuLmQ1Zjc3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzksNiArMzksOSBAQAogI2RlZmluZSBORVNfTUFOQUdFX0FQQlZUX0RFTCAwCiAjZGVmaW5lIE5FU19NQU5BR0VfQVBCVlRfQUREIDEKIAorI2RlZmluZSBORVNfTVBBX1JFUVVFU1RfQUNDRVBUICAxCisjZGVmaW5lIE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QgIDIKKwogLyogSUVURiBNUEEgLS0gZGVmaW5lcywgZW51bXMsIHN0cnVjdHMgKi8KICNkZWZpbmUgSUVGVF9NUEFfS0VZX1JFUSAgIk1QQSBJRCBSZXEgRnJhbWUiCiAjZGVmaW5lIElFRlRfTVBBX0tFWV9SRVAgICJNUEEgSUQgUmVwIEZyYW1lIgpAQCAtMTg2LDYgKzE4OSw3IEBACiAJTkVTX0NNX1NUQVRFX0FDQ0VQVElORywKIAlORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQsCiAJTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZELAorCU5FU19DTV9TVEFURV9NUEFSRUpfUkNWRCwKIAlORVNfQ01fU1RBVEVfVFNBLAogCU5FU19DTV9TVEFURV9GSU5fV0FJVDEsCiAJTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMiwKQEAgLTI3OCwxMyArMjgyLDEyIEBACiAJc3RydWN0IG5lc190aW1lcl9lbnRyeQkqc2VuZF9lbnRyeTsKIAogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgcmV0cmFuc19saXN0X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICByZWN2X2xpc3Q7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgICByZWN2X2xpc3RfbG9jazsKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICAqcmVjdl9lbnRyeTsKIAogCWludCAgICAgICAgICAgICAgICAgICAgICAgc2VuZF93cml0ZTA7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgbXBhX2ZyYW1lOwotCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltORVNfQ01fREVGQVVMVF9NVFVdOworCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltNQVhfQ01fQlVGRkVSXTsKIAl9OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX3NpemU7CiAJc3RydWN0IGl3X2NtX2lkICAgICAgICAgICAqY21faWQ7CkBAIC0zMjYsNiArMzI5LDcgQEAKIAlORVNfQ01fRVZFTlRfTVBBX1JFUSwKIAlORVNfQ01fRVZFTlRfTVBBX0NPTk5FQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9BQ0NFUFQsCisJTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9FU1RBQkxJU0hFRCwKIAlORVNfQ01fRVZFTlRfQ09OTkVDVEVELAogCU5FU19DTV9FVkVOVF9DTE9TRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKaW5kZXggZGE5ZGFiYS4uMGZiOGQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggNWQxMzlkYi4uNTJlNzM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0yNTQsNiArMjU0LDcgQEAKIAl1MzIgYWRhcHRlcl9zaXplOwogCXUzMiBhcnBfdGFibGVfc2l6ZTsKIAl1MTYgdmVuZG9yX2lkOworCXUxNiBkZXZpY2VfaWQ7CiAJdTggIE9uZUdfTW9kZTsKIAl1OCAgZnVuY19pbmRleDsKIApAQCAtMzU2LDYgKzM1NywxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwluZXNhZGFwdGVyLT52ZW5kb3JfaWQgPSAoKCh1MzIpIG5lc2FkYXB0ZXItPm1hY19hZGRyX2hpZ2gpIDw8IDgpIHwKKwkJCQkobmVzYWRhcHRlci0+bWFjX2FkZHJfbG93ID4+IDI0KTsKKworCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChuZXNkZXYtPnBjaWRldi0+YnVzLCBuZXNkZXYtPnBjaWRldi0+ZGV2Zm4sCisJCQkJIFBDSV9ERVZJQ0VfSUQsICZkZXZpY2VfaWQpOworCW5lc2FkYXB0ZXItPnZlbmRvcl9wYXJ0X2lkID0gZGV2aWNlX2lkOworCiAJaWYgKG5lc19pbml0X3NlcmRlcyhuZXNkZXYsIGh3X3JldiwgcG9ydF9jb3VudCwgbmVzYWRhcHRlciwKIAkJCQkJCQlPbmVHX01vZGUpKSB7CiAJCWtmcmVlKG5lc2FkYXB0ZXIpOwpAQCAtMTYzNiw3ICsxNjQ0LDYgQEAKIAluZXN2bmljLT5wb3N0X2NxcF9yZXF1ZXN0ID0gbmVzX3Bvc3RfY3FwX3JlcXVlc3Q7CiAJbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm5lc3ZuaWMtPm5pYy5zcV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmbmVzdm5pYy0+bmljLnJxX2xvY2spOwogCiAJLyogc2V0dXAgdGhlIFJRICovCkBAIC0yMjYxLDYgKzIyNjgsOCBAQAogCiAJCWlmICgrK2hlYWQgPj0gYWVxX3NpemUpCiAJCQloZWFkID0gMDsKKworCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MgKyBORVNfQUVRX0FMTE9DLCAxIDw8IDE2KTsKIAl9CiAJd2hpbGUgKDEpOwogCWFlcS0+YWVxX2hlYWQgPSBoZWFkOwpAQCAtMjU0MSw3ICsyNTUwLDcgQEAKIHsKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBuZXNfdm5pYywgbmljX2NxKTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKIH0KIAogCkBAIC0yNjIyLDkgKzI2MzEsOSBAQAogCQkJCQkJfSBlbHNlCiAJCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKHNrYikKLQkJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfQorCQkJCWlmIChza2IpCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJbmVzbmljLT5zcV90YWlsKys7CiAJCQkJbmVzbmljLT5zcV90YWlsICY9IG5lc25pYy0+c3Ffc2l6ZS0xOwogCQkJCWlmIChzcV9jcWVzID4gMTI4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBiYzBiNGRlLi5mNDFhODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC02MSw2ICs2MSw3IEBACiAJTkVTX0NRX0FDSyA9IDB4MDAzNCwKIAlORVNfV1FFX0FMTE9DID0gMHgwMDQwLAogCU5FU19DUUVfQUxMT0MgPSAweDAwNDQsCisJTkVTX0FFUV9BTExPQyA9IDB4MDA0OAogfTsKIAogZW51bSBpbmRleGVkX3JlZ3MgewpAQCAtODc1LDcgKzg3Niw2IEBACiAJdTggcmVwbGVuaXNoaW5nX3JxOwogCXU4IHJlc2VydmVkOwogCi0Jc3BpbmxvY2tfdCBzcV9sb2NrOwogCXNwaW5sb2NrX3QgcnFfbG9jazsKIH07CiAKQEAgLTExNDcsNyArMTE0Nyw2IEBACiBzdHJ1Y3QgbmVzX3ZuaWMgewogCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKIAl1NjQgc3FfZnVsbDsKLQl1NjQgc3FfbG9ja2VkOwogCXU2NCB0c29fcmVxdWVzdHM7CiAJdTY0IHNlZ21lbnRlZF90c29fcmVxdWVzdHM7CiAJdTY0IGxpbmVhcml6ZWRfc2ticzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNTdhNDdjZi4uZWNiMWY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTExMSw3ICsxMTEsNyBAQAogCW5lc19uaWNfY2VfaGFuZGxlcihuZXNkZXYsIG5lc2NxKTsKIAogCWlmIChuZXNjcS0+Y3Flc19wZW5kaW5nID09IDApIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIGNsZWFyIG91dCBjb21wbGV0ZWQgY3FlcyBhbmQgYXJtICovCiAJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncytORVNfQ1FFX0FMTE9DLCBORVNfQ1FFX0FMTE9DX05PVElGWV9ORVhUIHwKIAkJCQluZXNjcS0+Y3FfbnVtYmVyIHwgKG5lc2NxLT5jcWVfYWxsb2NzX3BlbmRpbmcgPDwgMTYpKTsKQEAgLTQwMCw4ICs0MDAsNyBAQAogCWlmIChza2JfaGVhZGxlbihza2IpID09IHNrYi0+bGVuKSB7CiAJCWlmIChza2JfaGVhZGxlbihza2IpIDw9IE5FU19GSVJTVF9GUkFHX1NJWkUpIHsKIAkJCW5pY19zcWUtPndxZV93b3Jkc1tORVNfTklDX1NRX1dRRV9MRU5HVEhfMl8xX0lEWF0gPSAwOwotCQkJbmVzbmljLT50eF9za2JbbmVzbmljLT5zcV9oZWFkXSA9IE5VTEw7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQluZXNuaWMtPnR4X3NrYltuZXNuaWMtPnNxX2hlYWRdID0gc2tiOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRGVhbCB3aXRoIEZyYWdtZW50cyAqLwpAQCAtNDUzLDcgKzQ1Miw2IEBACiAJdTMyIHdxZV9jb3VudD0xOwogCXUzMiBzZW5kX3JjOwogCXN0cnVjdCBpcGhkciAqaXBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2ICp3cWVfZnJhZ21lbnRfbGVuZ3RoOwogCXUzMiBucl9mcmFnczsKIAl1MzIgb3JpZ2luYWxfZmlyc3RfbGVuZ3RoOwpAQCAtNDgwLDEzICs0NzgsNiBAQAogCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmbmVzbmljLT5zcV9sb2NrKSkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCW5lc3ZuaWMtPnNxX2xvY2tlZCsrOwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9Ci0KIAkvKiBDaGVjayBpZiBTUSBpcyBmdWxsICovCiAJaWYgKCgoKG5lc25pYy0+c3FfdGFpbCsobmVzbmljLT5zcV9zaXplKjIpKS1uZXNuaWMtPnNxX2hlYWQpICYgKG5lc25pYy0+c3Ffc2l6ZSAtIDEpKSA9PSAxKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSB7CkBAIC00OTgsNyArNDg5LDYgQEAKIAkJCX0KIAkJfQogCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC01MzEsNyArNTIxLDYgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAJCQkJbmVzX2RlYnVnKE5FU19EQkdfTklDX1RYLCAiJXM6IEhOSUMgU1EgZnVsbC0gVFNPIHJlcXVlc3QgaGFzIHRvbyBtYW55IGZyYWdzIVxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpAQCAtNjU2LDE3ICs2NDUsMTMgQEAKIAkJCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGhvZmZzZXQpOwogCQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG5ob2Zmc2V0KTsKIAkJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CisJCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOworCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQl9CiAJfQogCiAJYmFycmllcigpOwpAQCAtNjc2LDcgKzY2MSw2IEBACiAJCQkJKHdxZV9jb3VudCA8PCAyNCkgfCAoMSA8PCAyMykgfCBuZXN2bmljLT5uaWMucXBfaWQpOwogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTAxMiw3ICs5OTYsNiBAQAogCSJQYXVzZSBGcmFtZXMgUmVjZWl2ZWQiLAogCSJJbnRlcm5hbCBSb3V0aW5nIEVycm9ycyIsCiAJIlNRIFNXIERyb3BwZWQgU0tCcyIsCi0JIlNRIExvY2tlZCIsCiAJIlNRIEZ1bGwiLAogCSJTZWdtZW50ZWQgVFNPIFJlcXVlc3RzIiwKIAkiUnggU3ltYm9sIEVycm9ycyIsCkBAIC0xMTI5LDE2ICsxMTEyLDE3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAl1MzIgbmljX2NvdW50OwogCXUzMiB1MzJ0ZW1wOworCXUzMiBpbmRleCA9IDA7CiAKIAl0YXJnZXRfZXRodG9vbF9zdGF0cy0+bl9zdGF0cyA9IE5FU19FVEhUT09MX1NUQVRfQ09VTlQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzBdID0gbmVzdm5pYy0+bmVzZGV2LT5saW5rX3N0YXR1c19pbnRlcnJ1cHRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxXSA9IG5lc3ZuaWMtPmxpbmVhcml6ZWRfc2ticzsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMl0gPSBuZXN2bmljLT50c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzW2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bGlua19zdGF0dXNfaW50ZXJydXB0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5saW5lYXJpemVkX3NrYnM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHNvX3JlcXVlc3RzOwogCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAogCQkJTkVTX0lEWF9NQUNfVFhfUEFVU0VfRlJBTUVTICsgKG5lc3ZuaWMtPm5lc2Rldi0+bWFjX2luZGV4KjB4MjAwKSk7CiAJbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQgKz0gdTMydGVtcDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbM10gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKIAogCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwKIAkJCU5FU19JRFhfTUFDX1JYX1BBVVNFX0ZSQU1FUyArIChuZXN2bmljLT5uZXNkZXYtPm1hY19pbmRleCoweDIwMCkpOwpAQCAtMTIwOSw2MCArMTE5Myw1OSBAQAogCQluZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzICs9IHUzMnRlbXA7CiAJfQogCi0JdGFyZ2V0X3N0YXRfdmFsdWVzWzRdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzZdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbN10gPSBuZXN2bmljLT5zcV9sb2NrZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzhdID0gbmVzdm5pYy0+c3FfZnVsbDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbOV0gPSBuZXN2bmljLT5zZWdtZW50ZWRfdHNvX3JlcXVlc3RzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zeW1ib2xfZXJyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTFdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTJdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfb3ZlcnNpemVkX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTNdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc2hvcnRfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE1XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfb2N0ZXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNl0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTddID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxOV0gPSBtaF9kZXRlY3RlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjBdID0gbWhfcGF1c2VzX3NlbnQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIxXSA9IG5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIyXSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIzXSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjRdID0gYXRvbWljX3JlYWQoJmNtX2Rpc2Nvbm5lY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjVdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RlZHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNl0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjddID0gYXRvbWljX3JlYWQoJmNtX3JlamVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOF0gPSBhdG9taWNfcmVhZCgmbW9kX3FwX3RpbW91dHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOV0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMF0gPSBhdG9taWNfcmVhZCgmc3dfcXBzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMxXSA9IGF0b21pY19yZWFkKCZxcHNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzJdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMzXSA9IGNtX3BhY2tldHNfc2VudDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzRdID0gY21fcGFja2V0c19ib3VuY2VkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNV0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM2XSA9IGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM3XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzhdID0gY21fcGFja2V0c19yZXRyYW5zOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szOV0gPSBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQwXSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0MV0gPSBjbV9iYWNrbG9nX2Ryb3BzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0Ml0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDNdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0NF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDVdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VsX2Ryb3BwZWRfcGt0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ2XSA9IGF0b21pY19yZWFkKCZjbV9yZXNldHNfcmVjdmQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0N10gPSBpbnRfbW9kX3RpbWVyX2luaXQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ4XSA9IGludF9tb2RfY3FfZGVwdGhfMTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDldID0gaW50X21vZF9jcV9kZXB0aF80OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MV0gPSBpbnRfbW9kX2NxX2RlcHRoXzI0OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1Ml0gPSBpbnRfbW9kX2NxX2RlcHRoXzMyOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1M10gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTRdID0gaW50X21vZF9jcV9kZXB0aF8yNTY7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU1XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTZdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1N10gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5zcV9mdWxsOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnNlZ21lbnRlZF90c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc3ltYm9sX2Vycl9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9vdmVyc2l6ZWRfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3Nob3J0X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfZGV0ZWN0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfcGF1c2VzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fZGlzY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0ZWRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVqZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJm1vZF9xcF90aW1vdXRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZzd19xcHNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfYm91bmNlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZWNlaXZlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2Ryb3BwZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZXRyYW5zOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfY3JlYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9iYWNrbG9nX2Ryb3BzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9sb29wYmFja3MpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19jcmVhdGVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fYWNjZWxfZHJvcHBlZF9wa3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVzZXRzX3JlY3ZkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX3RpbWVyX2luaXQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfNDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMjQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8zMjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogfQogCkBAIC0xNTY4LDYgKzE1NTEsMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5lc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbmVzX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXNfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0IAk9IG5lc19uZXRkZXZfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXNfbmV0ZGV2X2dldF9zdGF0cywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmVzX25ldGRldl90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbmVzX25ldGRldl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgCT0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyLAorfTsKIAogLyoqCiAgKiBuZXNfbmV0ZGV2X2luaXQgLSBpbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlCkBAIC0xNTc2LDcgKzE1NzIsNyBAQAogCQl2b2lkIF9faW9tZW0gKm1taW9fYWRkcikKIHsKIAl1NjQgdTY0dGVtcDsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBOVUxMOworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuaWNfcXBfbWFwICpjdXJyX3FwX21hcDsKIAl1MzIgdTMydGVtcDsKQEAgLTE1ODgsMjIgKzE1ODQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibmVzdm5pYyBldGhlcmRldiBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCW5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm5ldGRldiA9ICVwLCAlc1xuIiwgbmV0ZGV2LCBuZXRkZXYtPm5hbWUpOwogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmbmVzZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQltZW1zZXQobmVzdm5pYywgMCwgc2l6ZW9mKCpuZXN2bmljKSk7Ci0KLQluZXRkZXYtPm9wZW4gPSBuZXNfbmV0ZGV2X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gbmVzX25ldGRldl9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gbmVzX25ldGRldl9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gbmVzX25ldGRldl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gbmVzX25ldGRldl90eF90aW1lb3V0OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHU7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IE5FU19UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gbmVzZGV2LT5wY2lkZXYtPmlycTsKIAluZXRkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKQEAgLTE2MTEsMTIgKzE1OTcsMTEgQEAKIAluZXRkZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0hJR0hETUE7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJm5lc19uZXRkZXZfb3BzOwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmbmVzX2V0aHRvb2xfb3BzOwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJm5lc3ZuaWMtPm5hcGksIG5lc19uZXRkZXZfcG9sbCwgMTI4KTsKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAiRW5hYmxpbmcgVkxBTiBJbnNlcnQvRGVsZXRlLlxuIik7CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JbmV0ZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCiAJLyogRmlsbCBpbiB0aGUgcG9ydCBzdHJ1Y3R1cmUgKi8KIAluZXN2bmljLT5uZXRkZXYgPSBuZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKaW5kZXggZTY0MzA2Yi4uY2M5MGMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCmluZGV4IDZmM2JjMWIuLmEyODIwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggNGZkYjcyNC4uN2U1YjViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC01NTEsNiArNTUxLDcgQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKIAlpbnQgaSA9IDA7CisJaW50IHJjOwogCiAJLyogZnJlZSB0aGUgcmVzb3VyY2VzICovCiAJaWYgKG5lc2Ztci0+bGVhZl9wYmxfY250ID09IDApIHsKQEAgLTU3Miw3ICs1NzMsOSBAQAogCW5lc21yLT5pYm13LnJrZXkgPSBpYmZtci0+cmtleTsKIAluZXNtci0+aWJtdy51b2JqZWN0ID0gTlVMTDsKIAotCWlmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSB7CisJcmMgPSBuZXNfZGVhbGxvY19tdygmbmVzbXItPmlibXcpOworCisJaWYgKChyYyA9PSAwKSAmJiAobmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgIT0gMCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJCWlmIChuZXNmbXItPm5lc21yLnBibF80aykgewogCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNmbXItPm5lc21yLnBibHNfdXNlZDsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCX0KIAotCXJldHVybiBuZXNfZGVhbGxvY19tdygmbmVzbXItPmlibXcpOworCXJldHVybiByYzsKIH0KIAogCkBAIC0xMzYwLDggKzEzNjMsMTAgQEAKIAkJCQkJTkVTX1FQQ09OVEVYVF9NSVNDX1JRX1NJWkVfU0hJRlQpOwogCQkJbmVzcXAtPm5lc3FwX2NvbnRleHQtPm1pc2MgfD0gY3B1X3RvX2xlMzIoKHUzMiluZXNxcC0+aHdxcC5zcV9lbmNvZGVkX3NpemUgPDwKIAkJCQkJTkVTX1FQQ09OVEVYVF9NSVNDX1NRX1NJWkVfU0hJRlQpOworCQkJaWYgKCF1ZGF0YSkgewogCQkJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5taXNjIHw9IGNwdV90b19sZTMyKE5FU19RUENPTlRFWFRfTUlTQ19QUklWX0VOKTsKIAkJCQluZXNxcC0+bmVzcXBfY29udGV4dC0+bWlzYyB8PSBjcHVfdG9fbGUzMihORVNfUVBDT05URVhUX01JU0NfRkFTVF9SRUdJU1RFUl9FTik7CisJCQl9CiAJCQluZXNxcC0+bmVzcXBfY29udGV4dC0+Y3FzID0gY3B1X3RvX2xlMzIobmVzcXAtPm5lc3NjcS0+aHdfY3EuY3FfbnVtYmVyICsKIAkJCQkJKCh1MzIpbmVzcXAtPm5lc3JjcS0+aHdfY3EuY3FfbnVtYmVyIDw8IDE2KSk7CiAJCQl1NjR0ZW1wID0gKHU2NCluZXNxcC0+aHdxcC5zcV9wYmFzZTsKQEAgLTE4ODQsMjEgKzE4ODksNzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHJvb3RfMjU2CisgKi8KK3N0YXRpYyB1MzIgcm9vdF8yNTYoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwKKwkJICAgIHN0cnVjdCBuZXNfcm9vdF92cGJsICpyb290X3ZwYmwsCisJCSAgICBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqbmV3X3Jvb3QsCisJCSAgICB1MTYgcGJsX2NvdW50XzRrLAorCQkgICAgdTE2IHBibF9jb3VudF8yNTYpCit7CisJdTY0IGxlYWZfcGJsOworCWludCBpLCBqLCBrOworCisJaWYgKHBibF9jb3VudF80ayA9PSAxKSB7CisJCW5ld19yb290LT5wYmxfdmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwKKwkJCQkJCTUxMiwgJm5ld19yb290LT5wYmxfcGJhc2UpOworCisJCWlmIChuZXdfcm9vdC0+cGJsX3ZiYXNlID09IE5VTEwpCisJCQlyZXR1cm4gMDsKKworCQlsZWFmX3BibCA9ICh1NjQpcm9vdF92cGJsLT5wYmxfcGJhc2U7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQluZXdfcm9vdC0+cGJsX3ZiYXNlW2ldLnBhX2xvdyA9CisJCQkJY3B1X3RvX2xlMzIoKHUzMilsZWFmX3BibCk7CisJCQluZXdfcm9vdC0+cGJsX3ZiYXNlW2ldLnBhX2hpZ2ggPQorCQkJCWNwdV90b19sZTMyKCh1MzIpKCgoKHU2NClsZWFmX3BibCkgPj4gMzIpKSk7CisJCQlsZWFmX3BibCArPSAyNTY7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAzOyBpID49IDA7IGktLSkgeworCQkJaiA9IGkgKiAxNjsKKwkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdID0gcm9vdF92cGJsLT5wYmxfdmJhc2VbaV07CisJCQlsZWFmX3BibCA9IGxlMzJfdG9fY3B1KHJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdLnBhX2xvdykgKworCQkJICAgICgoKHU2NClsZTMyX3RvX2NwdShyb290X3ZwYmwtPnBibF92YmFzZVtqXS5wYV9oaWdoKSkKKwkJCQk8PCAzMik7CisJCQlmb3IgKGsgPSAxOyBrIDwgMTY7IGsrKykgeworCQkJCWxlYWZfcGJsICs9IDI1NjsKKwkJCQlyb290X3ZwYmwtPnBibF92YmFzZVtqICsga10ucGFfbG93ID0KKwkJCQkJCWNwdV90b19sZTMyKCh1MzIpbGVhZl9wYmwpOworCQkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2ogKyBrXS5wYV9oaWdoID0KKwkJCQkgICAgY3B1X3RvX2xlMzIoKHUzMikoKCgodTY0KWxlYWZfcGJsKSA+PiAzMikpKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAxOworfQorCiAKIC8qKgogICogbmVzX3JlZ19tcgogICovCiBzdGF0aWMgaW50IG5lc19yZWdfbXIoc3RydWN0IG5lc19kZXZpY2UgKm5lc2Rldiwgc3RydWN0IG5lc19wZCAqbmVzcGQsCiAJCXUzMiBzdGFnLCB1NjQgcmVnaW9uX2xlbmd0aCwgc3RydWN0IG5lc19yb290X3ZwYmwgKnJvb3RfdnBibCwKLQkJZG1hX2FkZHJfdCBzaW5nbGVfYnVmZmVyLCB1MTYgcGJsX2NvdW50LCB1MTYgcmVzaWR1YWxfcGFnZV9jb3VudCwKLQkJaW50IGFjYywgdTY0ICppb3ZhX3N0YXJ0KQorCQlkbWFfYWRkcl90IHNpbmdsZV9idWZmZXIsIHUxNiBwYmxfY291bnRfNGssCisJCXUxNiByZXNpZHVhbF9wYWdlX2NvdW50XzRrLCBpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQsCisJCXUxNiAqYWN0dWFsX3BibF9jbnQsIHU4ICp1c2VkXzRrX3BibHMpCiB7CiAJc3RydWN0IG5lc19od19jcXBfd3FlICpjcXBfd3FlOwogCXN0cnVjdCBuZXNfY3FwX3JlcXVlc3QgKmNxcF9yZXF1ZXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7Ci0JLyogaW50IGNvdW50OyAqLworCXVpbnQgcGdfY250ID0gMDsKKwl1MTYgcGJsX2NvdW50XzI1NjsKKwl1MTYgcGJsX2NvdW50ID0gMDsKKwl1OCAgdXNlXzI1Nl9wYmxzID0gMDsKKwl1OCAgdXNlXzRrX3BibHMgPSAwOworCXUxNiB1c2VfdHdvX2xldmVsID0gKHBibF9jb3VudF80ayA+IDEpID8gMSA6IDA7CisJc3RydWN0IG5lc19yb290X3ZwYmwgbmV3X3Jvb3QgPSB7MCwgMCwgMH07CiAJdTMyIG9wY29kZSA9IDA7CiAJdTE2IG1ham9yX2NvZGU7CiAKQEAgLTE5MTEsNDEgKzE5NzAsNzAgQEAKIAljcXBfcmVxdWVzdC0+d2FpdGluZyA9IDE7CiAJY3FwX3dxZSA9ICZjcXBfcmVxdWVzdC0+Y3FwX3dxZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCS8qIHRyYWNrIFBCTCByZXNvdXJjZXMgKi8KLQlpZiAocGJsX2NvdW50ICE9IDApIHsKLQkJaWYgKHBibF9jb3VudCA+IDEpIHsKLQkJCS8qIFR3byBsZXZlbCBQQkwgKi8KLQkJCWlmICgocGJsX2NvdW50KzEpID4gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIDRLQiBQYmxzIGZvciB0d28gbGV2ZWwgcmVxdWVzdC5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9IGVsc2UgewotCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50KzE7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocmVzaWR1YWxfcGFnZV9jb3VudCA+IDMyKSB7Ci0JCQlpZiAocGJsX2NvdW50ID4gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIDRLQiBQYmxzLlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQ7CisJaWYgKHBibF9jb3VudF80aykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKworCQlwZ19jbnQgPSAoKHBibF9jb3VudF80ayAtIDEpICogNTEyKSArIHJlc2lkdWFsX3BhZ2VfY291bnRfNGs7CisJCXBibF9jb3VudF8yNTYgPSAocGdfY250ICsgMzEpIC8gMzI7CisJCWlmIChwZ19jbnQgPD0gMzIpIHsKKwkJCWlmIChwYmxfY291bnRfMjU2IDw9IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKQorCQkJCXVzZV8yNTZfcGJscyA9IDE7CisJCQllbHNlIGlmIChwYmxfY291bnRfNGsgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkKKwkJCQl1c2VfNGtfcGJscyA9IDE7CisJCX0gZWxzZSBpZiAocGdfY250IDw9IDIwNDgpIHsKKwkJCWlmICgoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpICYmCisJCQkgICAgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiAobmVzYWRhcHRlci0+bWF4XzRrcGJsID4+IDEpKSkgeworCQkJCXVzZV80a19wYmxzID0gMTsKKwkJCX0gZWxzZSBpZiAoKHBibF9jb3VudF8yNTYgKyAxKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkgeworCQkJCXVzZV8yNTZfcGJscyA9IDE7CisJCQkJdXNlX3R3b19sZXZlbCA9IDE7CisJCQl9IGVsc2UgaWYgKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7CisJCQkJdXNlXzRrX3BibHMgPSAxOwogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKHBibF9jb3VudCA+IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgMjU2QiBQYmxzLlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgLT0gcGJsX2NvdW50OwotCQkJfQorCQkJaWYgKChwYmxfY291bnRfNGsgKyAxKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKQorCQkJCXVzZV80a19wYmxzID0gMTsKIAkJfQorCisJCWlmICh1c2VfMjU2X3BibHMpIHsKKwkJCXBibF9jb3VudCA9IHBibF9jb3VudF8yNTY7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQl9IGVsc2UgaWYgKHVzZV80a19wYmxzKSB7CisJCQlwYmxfY291bnQgPSAgcGJsX2NvdW50XzRrOworCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIFBibHNcbiIpOworCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwlpZiAodXNlXzI1Nl9wYmxzICYmIHVzZV90d29fbGV2ZWwpIHsKKwkJaWYgKHJvb3RfMjU2KG5lc2Rldiwgcm9vdF92cGJsLCAmbmV3X3Jvb3QsIHBibF9jb3VudF80aywgcGJsX2NvdW50XzI1NikgPT0gMSkgeworCQkJaWYgKG5ld19yb290LnBibF9wYmFzZSAhPSAwKQorCQkJCXJvb3RfdnBibCA9ICZuZXdfcm9vdDsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gcGJsX2NvdW50XzI1NiArIHVzZV90d29fbGV2ZWw7CisJCQl1c2VfMjU2X3BibHMgPSAwOworCisJCQlpZiAocGJsX2NvdW50XzRrID09IDEpCisJCQkJdXNlX3R3b19sZXZlbCA9IDA7CisJCQlwYmxfY291bnQgPSBwYmxfY291bnRfNGs7CisKKwkJCWlmICgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgeworCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCisJCQlpZiAodXNlXzRrX3BibHMgPT0gMCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KIAogCW9wY29kZSA9IE5FU19DUVBfUkVHSVNURVJfU1RBRyB8IE5FU19DUVBfU1RBR19SSUdIVFNfTE9DQUxfUkVBRCB8CiAJCQkJCU5FU19DUVBfU1RBR19WQV9UTyB8IE5FU19DUVBfU1RBR19NUjsKQEAgLTE5NzQsMTAgKzIwNjIsOSBAQAogCX0gZWxzZSB7CiAJCXNldF93cWVfNjRiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BBX0xPV19JRFgsIHJvb3RfdnBibC0+cGJsX3BiYXNlKTsKIAkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0JMS19DT1VOVF9JRFgsIHBibF9jb3VudCk7Ci0JCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9MRU5fSURYLAotCQkJCSgoKHBibF9jb3VudCAtIDEpICogNDA5NikgKyAocmVzaWR1YWxfcGFnZV9jb3VudCo4KSkpOworCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfTEVOX0lEWCwgKHBnX2NudCAqIDgpKTsKIAotCQlpZiAoKHBibF9jb3VudCA+IDEpIHx8IChyZXNpZHVhbF9wYWdlX2NvdW50ID4gMzIpKQorCQlpZiAodXNlXzRrX3BibHMpCiAJCQljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9XUUVfT1BDT0RFX0lEWF0gfD0gY3B1X3RvX2xlMzIoTkVTX0NRUF9TVEFHX1BCTF9CTEtfU0laRSk7CiAJfQogCWJhcnJpZXIoKTsKQEAgLTE5OTQsMTMgKzIwODEsMjUgQEAKIAltYWpvcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1ham9yX2NvZGU7CiAJbmVzX3B1dF9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKIAorCWlmICgoIXJldCB8fCBtYWpvcl9jb2RlKSAmJiBwYmxfY291bnQgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHVzZV8yNTZfcGJscykKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCWVsc2UgaWYgKHVzZV80a19wYmxzKQorCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCX0KKwlpZiAobmV3X3Jvb3QucGJsX3BiYXNlKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCA1MTIsIG5ld19yb290LnBibF92YmFzZSwKKwkJCQkgICAgbmV3X3Jvb3QucGJsX3BiYXNlKTsKKwogCWlmICghcmV0KQogCQlyZXR1cm4gLUVUSU1FOwogCWVsc2UgaWYgKG1ham9yX2NvZGUpCiAJCXJldHVybiAtRUlPOwotCWVsc2UKLQkJcmV0dXJuIDA7CiAKKwkqYWN0dWFsX3BibF9jbnQgPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCSp1c2VkXzRrX3BibHMgPSB1c2VfNGtfcGJsczsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE2NSwxOCArMjI2NCwxNCBAQAogCQlwYmxfY291bnQgPSByb290X3BibF9pbmRleDsKIAl9CiAJcmV0ID0gbmVzX3JlZ19tcihuZXNkZXYsIG5lc3BkLCBzdGFnLCByZWdpb25fbGVuZ3RoLCAmcm9vdF92cGJsLAotCQkJYnVmZmVyX2xpc3RbMF0uYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywgaW92YV9zdGFydCk7CisJCQlidWZmZXJfbGlzdFswXS5hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCBpb3ZhX3N0YXJ0LAorCQkJJm5lc21yLT5wYmxzX3VzZWQsICZuZXNtci0+cGJsXzRrKTsKIAogCWlmIChyZXQgPT0gMCkgewogCQluZXNtci0+aWJtci5ya2V5ID0gc3RhZzsKIAkJbmVzbXItPmlibXIubGtleSA9IHN0YWc7CiAJCW5lc21yLT5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfTUVNOwogCQlpYm1yID0gJm5lc21yLT5pYm1yOwotCQluZXNtci0+cGJsXzRrID0gKChwYmxfY291bnQgPiAxKSB8fCAoY3VyX3BibF9pbmRleCA+IDMyKSkgPyAxIDogMDsKLQkJbmVzbXItPnBibHNfdXNlZCA9IHBibF9jb3VudDsKLQkJaWYgKHBibF9jb3VudCA+IDEpIHsKLQkJCW5lc21yLT5wYmxzX3VzZWQrKzsKLQkJfQogCX0gZWxzZSB7CiAJCWtmcmVlKG5lc21yKTsKIAkJaWJtciA9IEVSUl9QVFIoLUVOT01FTSk7CkBAIC0yNDU0LDggKzI1NDksOSBAQAogCQkJCQlzdGFnLCAodW5zaWduZWQgaW50KWlvdmFfc3RhcnQsCiAJCQkJCSh1bnNpZ25lZCBpbnQpcmVnaW9uX2xlbmd0aCwgc3RhZ19pbmRleCwKIAkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24tPmxlbmd0aCwgcGJsX2NvdW50KTsKLQkJCXJldCA9IG5lc19yZWdfbXIoIG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbi0+bGVuZ3RoLCAmcm9vdF92cGJsLAotCQkJCQlmaXJzdF9kbWFfYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywgJmlvdmFfc3RhcnQpOworCQkJcmV0ID0gbmVzX3JlZ19tcihuZXNkZXYsIG5lc3BkLCBzdGFnLCByZWdpb24tPmxlbmd0aCwgJnJvb3RfdnBibCwKKwkJCQkJIGZpcnN0X2RtYV9hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLAorCQkJCQkgJmlvdmFfc3RhcnQsICZuZXNtci0+cGJsc191c2VkLCAmbmVzbXItPnBibF80ayk7CiAKIAkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAicmV0PSVkXG4iLCByZXQpOwogCkBAIC0yNDY0LDExICsyNTYwLDYgQEAKIAkJCQluZXNtci0+aWJtci5sa2V5ID0gc3RhZzsKIAkJCQluZXNtci0+bW9kZSA9IElXTkVTX01FTVJFR19UWVBFX01FTTsKIAkJCQlpYm1yID0gJm5lc21yLT5pYm1yOwotCQkJCW5lc21yLT5wYmxfNGsgPSAoKHBibF9jb3VudCA+IDEpIHx8IChjdXJfcGJsX2luZGV4ID4gMzIpKSA/IDEgOiAwOwotCQkJCW5lc21yLT5wYmxzX3VzZWQgPSBwYmxfY291bnQ7Ci0JCQkJaWYgKHBibF9jb3VudCA+IDEpIHsKLQkJCQkJbmVzbXItPnBibHNfdXNlZCsrOwotCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7CiAJCQkJa2ZyZWUobmVzbXIpOwpAQCAtMjYwNywyNCArMjY5OCw2IEBACiAJY3FwX3JlcXVlc3QtPndhaXRpbmcgPSAxOwogCWNxcF93cWUgPSAmY3FwX3JlcXVlc3QtPmNxcF93cWU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQlpZiAobmVzbXItPnBibHNfdXNlZCAhPSAwKSB7Ci0JCWlmIChuZXNtci0+cGJsXzRrKSB7Ci0JCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7Ci0JCQlpZiAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IG5lc2FkYXB0ZXItPm1heF80a3BibCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgNEtCIFBCTHMoJXUpIGhhcyBleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKLQkJCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwsIG5lc2FkYXB0ZXItPm1heF80a3BibCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBuZXNtci0+cGJsc191c2VkOwotCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgMjU2QiBQQkxzKCV1KSBoYXMgZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCi0JCQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCwgbmVzYWRhcHRlci0+bWF4XzI1NnBibCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCW5lc19maWxsX2luaXRfY3FwX3dxZShjcXBfd3FlLCBuZXNkZXYpOwogCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1dRRV9PUENPREVfSURYLAogCQkJTkVTX0NRUF9ERUFMTE9DQVRFX1NUQUcgfCBORVNfQ1FQX1NUQUdfVkFfVE8gfApAQCAtMjY0MiwxMSArMjcxNSw2IEBACiAJCQkiIENRUCBNYWpvcjpNaW5vciBjb2RlcyA9IDB4JTA0WDoweCUwNFhcbiIsCiAJCQlpYl9tci0+cmtleSwgcmV0LCBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZSwgY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGUpOwogCi0JbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywKLQkJCShpYl9tci0+cmtleSAmIDB4MGZmZmZmMDApID4+IDgpOwotCi0Ja2ZyZWUobmVzbXIpOwotCiAJbWFqb3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlOwogCW1pbm9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWlub3JfY29kZTsKIApAQCAtMjY2Miw4ICsyNzMwLDMzIEBACiAJCQkJIiB0byBkZXN0cm95IFNUYWcsIGliX21yPSVwLCBya2V5ID0gMHglMDhYXG4iLAogCQkJCW1ham9yX2NvZGUsIG1pbm9yX2NvZGUsIGliX21yLCBpYl9tci0+cmtleSk7CiAJCXJldHVybiAtRUlPOwotCX0gZWxzZQotCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobmVzbXItPnBibHNfdXNlZCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQlpZiAobmVzbXItPnBibF80aykgeworCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNtci0+cGJsc191c2VkOworCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSA0S0IgUEJMcygldSkgaGFzICIKKwkJCQkJImV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAorCQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsLAorCQkJCQluZXNhZGFwdGVyLT5tYXhfNGtwYmwpOworCQl9IGVsc2UgeworCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKKwkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCA+IG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSAyNTZCIFBCTHMoJXUpIGhhcyAiCisJCQkJCSJleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKKwkJCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwsCisJCQkJCW5lc2FkYXB0ZXItPm1heF8yNTZwYmwpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJfQorCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsCisJCQkoaWJfbXItPnJrZXkgJiAweDBmZmZmZjAwKSA+PiA4KTsKKworCWtmcmVlKG5lc21yKTsKKworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCmluZGV4IDZjNmI0ZGEuLjVlNDhmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTEzNCw2ICsxMzQsNyBAQAogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqaWV0Zl9mcmFtZTsKIAlkbWFfYWRkcl90ICAgICAgICAgICAgaWV0Zl9mcmFtZV9wYmFzZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgc3RhdGVfd2FpdHE7CisJc3RydWN0IGliX21yICAgICAgICAgICpsc21tX21yOwogCXVuc2lnbmVkIGxvbmcgICAgICAgICBzb2NrZXQ7CiAJc3RydWN0IG5lc19od19xcCAgICAgIGh3cXA7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgIHdvcms7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggYTE5MjU4MS4uZGE2MDgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtNDQ2LDExICs0NDYsMTEgQEAKIAkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJnByaXYtPmxyby5scm9fbWdyKTsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaWYgKHVubGlrZWx5KGliX3JlcV9ub3RpZnlfY3EocHJpdi0+cmVjdl9jcSwKIAkJCQkJICAgICAgSUJfQ1FfTkVYVF9DT01QIHwKIAkJCQkJICAgICAgSUJfQ1FfUkVQT1JUX01JU1NFRF9FVkVOVFMpKSAmJgotCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkKIAkJCWdvdG8gcG9sbF9tb3JlOwogCX0KIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9wdHI7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhaW5fdHhfY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggMGJkMmE0Zi4uNDIxYTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTY2MCw4ICs2NjAsMTIgQEAKIAogCXBhdGggPSBfX3BhdGhfZmluZChkZXYsIHBoZHItPmh3YWRkciArIDQpOwogCWlmICghcGF0aCB8fCAhcGF0aC0+dmFsaWQpIHsKLQkJaWYgKCFwYXRoKQorCQlpbnQgbmV3X3BhdGggPSAwOworCisJCWlmICghcGF0aCkgewogCQkJcGF0aCA9IHBhdGhfcmVjX2NyZWF0ZShkZXYsIHBoZHItPmh3YWRkciArIDQpOworCQkJbmV3X3BhdGggPSAxOworCQl9CiAJCWlmIChwYXRoKSB7CiAJCQkvKiBwdXQgcHNldWRvaGVhZGVyIGJhY2sgb24gZm9yIG5leHQgdGltZSAqLwogCQkJc2tiX3B1c2goc2tiLCBzaXplb2YgKnBoZHIpOwpAQCAtNjY5LDcgKzY3Myw4IEBACiAKIAkJCWlmICghcGF0aC0+cXVlcnkgJiYgcGF0aF9yZWNfc3RhcnQoZGV2LCBwYXRoKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKKwkJCQlpZiAobmV3X3BhdGgpCisJCQkJCXBhdGhfZnJlZShkZXYsIHBhdGgpOwogCQkJCXJldHVybjsKIAkJCX0gZWxzZQogCQkJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKQEAgLTEwMTYsMTggKzEwMjEsMjIgQEAKIAlwcml2LT5scm8ubHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQkgPSBpcG9pYl9vcGVuLAorCS5uZG9fc3RvcAkJID0gaXBvaWJfc3RvcCwKKwkubmRvX2NoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CSAJID0gaXBvaWJfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3QsCisJLm5kb19uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXYsCit9OworCiBzdGF0aWMgdm9pZCBpcG9pYl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXYtPm9wZW4JCSA9IGlwb2liX29wZW47Ci0JZGV2LT5zdG9wCQkgPSBpcG9pYl9zdG9wOwotCWRldi0+Y2hhbmdlX210dQkJID0gaXBvaWJfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAkgPSBpcG9pYl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJID0gaXBvaWJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCSA9ICZpcG9pYl9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJID0gJmlwb2liX2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3Q7Ci0JZGV2LT5uZWlnaF9zZXR1cAkgPSBpcG9pYl9uZWlnaF9zZXR1cF9kZXY7CiAKIAlpcG9pYl9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggMTI4NzYzOS4uMTNkNzY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JZGVidWdfc2NzaSgidGFzayBkZXEgW2NpZCAlZCBpdHQgMHgleF1cbiIsIGNvbm4tPmlkLCB0YXNrLT5pdHQpOworCWlzZXJfZGJnKCJ0YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwgY29ubi0+aWQsIHRhc2stPml0dCk7CiAKIAllcnJvciA9IGlzZXJfc2VuZF9jb250cm9sKGNvbm4sIHRhc2spOwogCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkvKiBTZW5kIGRhdGEtb3V0IFBEVXMgd2hpbGUgdGhlcmUncyBzdGlsbCB1bnNvbGljaXRlZCBkYXRhIHRvIHNlbmQgKi8KIAl3aGlsZSAoaXNjc2lfdGFza19oYXNfdW5zb2xfZGF0YSh0YXNrKSkgewogCQlpc2NzaV9wcmVwX2RhdGFfb3V0X3BkdSh0YXNrLCByMnQsICZoZHIpOwotCQlkZWJ1Z19zY3NpKCJTZW5kaW5nIGRhdGEtb3V0OiBpdHQgMHgleCwgZGF0YSBjb3VudCAlZFxuIiwKKwkJaXNlcl9kYmcoIlNlbmRpbmcgZGF0YS1vdXQ6IGl0dCAweCV4LCBkYXRhIGNvdW50ICVkXG4iLAogCQkJICAgaGRyLml0dCwgcjJ0LT5kYXRhX2NvdW50KTsKIAogCQkvKiB0aGUgYnVmZmVyIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHBhc3NlZCB3aXRoIHRoZSBjb21tYW5kICovCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCWdvdG8gaXNjc2lfaXNlcl90YXNrX3htaXRfdW5zb2xfZGF0YV9leGl0OwogCQl9CiAJCXIydC0+c2VudCArPSByMnQtPmRhdGFfY291bnQ7Ci0JCWRlYnVnX3Njc2koIk5lZWQgdG8gc2VuZCAlZCBtb3JlIGFzIGRhdGEtb3V0IFBEVXNcbiIsCisJCWlzZXJfZGJnKCJOZWVkIHRvIHNlbmQgJWQgbW9yZSBhcyBkYXRhLW91dCBQRFVzXG4iLAogCQkJICAgcjJ0LT5kYXRhX2xlbmd0aCAtIHIydC0+c2VudCk7CiAJfQogCkBAIC0yMjcsMTIgKzIyNywxMiBAQAogCWlmICh0YXNrLT5zYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewogCQlCVUdfT04oc2NzaV9idWZmbGVuKHRhc2stPnNjKSA9PSAwKTsKIAotCQlkZWJ1Z19zY3NpKCJjbWQgW2l0dCAleCB0b3RhbCAlZCBpbW0gJWQgdW5zb2xfZGF0YSAlZFxuIiwKKwkJaXNlcl9kYmcoImNtZCBbaXR0ICV4IHRvdGFsICVkIGltbSAlZCB1bnNvbF9kYXRhICVkXG4iLAogCQkJICAgdGFzay0+aXR0LCBzY3NpX2J1ZmZsZW4odGFzay0+c2MpLAogCQkJICAgdGFzay0+aW1tX2NvdW50LCB0YXNrLT51bnNvbF9yMnQuZGF0YV9sZW5ndGgpOwogCX0KIAotCWRlYnVnX3Njc2koInRhc2sgZGVxIFtjaWQgJWQgaXR0IDB4JXhdXG4iLAorCWlzZXJfZGJnKCJ0YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwKIAkJICAgY29ubi0+aWQsIHRhc2stPml0dCk7CiAKIAkvKiBTZW5kIHRoZSBjbWQgUERVICovCkBAIC0zOTcsMTQgKzM5NywxNCBAQAogc3RhdGljIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9pc2VyX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsCiAJCQkgIHVpbnQxNl90IGNtZHNfbWF4LCB1aW50MTZfdCBxZGVwdGgsCi0JCQkgIHVpbnQzMl90IGluaXRpYWxfY21kc24sIHVpbnQzMl90ICpob3N0bm8pCisJCQkgIHVpbnQzMl90IGluaXRpYWxfY21kc24pCiB7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKIAlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uOwogCi0Jc2hvc3QgPSBpc2NzaV9ob3N0X2FsbG9jKCZpc2NzaV9pc2VyX3NodCwgMCwgSVNDU0lfTUFYX0NNRF9QRVJfTFVOKTsKKwlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmlzY3NpX2lzZXJfc2h0LCAwLCAxKTsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm4gTlVMTDsKIAlzaG9zdC0+dHJhbnNwb3J0dCA9IGlzY3NpX2lzZXJfc2NzaV90cmFuc3BvcnQ7CkBAIC00MjMsNyArNDIzLDYgQEAKIAlpZiAoaXNjc2lfaG9zdF9hZGQoc2hvc3QsCiAJCQkgICBlcCA/IGliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLT5kbWFfZGV2aWNlIDogTlVMTCkpCiAJCWdvdG8gZnJlZV9ob3N0OwotCSpob3N0bm8gPSBzaG9zdC0+aG9zdF9ubzsKIAogCS8qCiAJICogd2UgZG8gbm90IHN1cHBvcnQgc2V0dGluZyBjYW5fcXVldWUgY21kX3Blcl9sdW4gZnJvbSB1c2Vyc3BhY2UgeWV0CkBAIC01OTYsNyArNTk1LDcgQEAKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5zZ190YWJsZXNpemUgICAgICAgICAgID0gSVNDU0lfSVNFUl9TR19UQUJMRVNJWkUsCiAJLm1heF9zZWN0b3JzCQk9IDEwMjQsCi0JLmNtZF9wZXJfbHVuICAgICAgICAgICAgPSBJU0NTSV9NQVhfQ01EX1BFUl9MVU4sCisJLmNtZF9wZXJfbHVuICAgICAgICAgICAgPSBJU0VSX0RFRl9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKaW5kZXggODYxMTE5NS4uOWQ1MjljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCkBAIC05Myw3ICs5Myw3IEBACiAKIAkJCQkJLyogc3VwcG9ydCB1cHRvIDUxMktCIGluIG9uZSBSRE1BICovCiAjZGVmaW5lIElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFICAgICAgICAgKDB4ODAwMDAgPj4gU0hJRlRfNEspCi0jZGVmaW5lIElTQ1NJX0lTRVJfTUFYX0xVTgkJMjU2CisjZGVmaW5lIElTRVJfREVGX0NNRF9QRVJfTFVOCQkxMjgKIAogLyogUVAgc2V0dGluZ3MgKi8KIC8qIE1heGltYWwgYm91bmRzIG9uIHJlY2VpdmVkIGFzeW5jaHJvbm91cyBQRFVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCmluZGV4IGUyMDljYjhkLi45ZGU2NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAlpZiAocmVzdW1lX3R4KSB7CiAJCWlzZXJfZGJnKCIlbGQgcmVzdW1pbmcgdHhcbiIsamlmZmllcyk7Ci0JCXNjc2lfcXVldWVfd29yayhjb25uLT5zZXNzaW9uLT5ob3N0LCAmY29ubi0+eG1pdHdvcmspOworCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoY29ubik7CiAJfQogCiAJaWYgKHR4X2Rlc2MtPnR5cGUgPT0gSVNDU0lfVFhfQ09OVFJPTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggMzE5YjE4OC4uZWE5ZTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC00MDEsMTMgKzQwMSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsdXJlOwogCi0JaXNlcl9kYmcoInBhdGgubXR1IGlzICVkIHNldHRpbmcgaXQgdG8gJWRcbiIsCi0JCSBjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUsIElCX01UVV8xMDI0KTsKLQotCS8qIHdlIG11c3Qgc2V0IHRoZSBNVFUgdG8gMTAyNCBhcyB0aGlzIGlzIHdoYXQgdGhlIHRhcmdldCBpcyBhc3N1bWluZyAqLwotCWlmIChjbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUgPiBJQl9NVFVfMTAyNCkKLQkJY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1ID0gSUJfTVRVXzEwMjQ7Ci0KIAltZW1zZXQoJmNvbm5fcGFyYW0sIDAsIHNpemVvZiBjb25uX3BhcmFtKTsKIAljb25uX3BhcmFtLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSA0OwogCWNvbm5fcGFyYW0uaW5pdGlhdG9yX2RlcHRoICAgICA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggZWQ4YmFhMC4uN2E3YTAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtOTQsMTEgKzk0LDggQEAKIHN0YXRpYyBpbnQgZXZkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIGludCBldmRldl9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDZmMjM2NjIuLjQyMjRmMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMTU5LDEyICsxNTksOSBAQAogCiBzdGF0aWMgaW50IGpveWRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IGpveWRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHZvaWQgam95ZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKaW5kZXggZTUwMDQ3Yi4uNzdjZmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCkBAIC0zLDcgKzMsNyBAQAogICoJQmFzZWQgb24gZHJpdmVycy91c2IvaWZvcmNlLmMKICAqCiAgKglDb3B5cmlnaHQgWWFlZ2FzaGkgVGFrZXNoaSwgMjAwMQotICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOAorICoJQWRyaWFuIE1jTWVuYW1pbiwgMjAwOCAtIDIwMDkKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw3ICsyOSw3IEBACiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19wYWQgKnBhZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwYWQtPmRldjsKLQl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXMgPSBtcS0+cmVjdmJ1Zi0+YnVmOwogCiAJYnV0dG9ucyA9IH5sZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShyZXMgKyA4KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCAzNTU2MTY4Li5lYTI2MzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0xMywxMSArMTMsMTEgQEAKIGlmIElOUFVUX0tFWUJPQVJECiAKIGNvbmZpZyBLRVlCT0FSRF9BVEtCRAotCXRyaXN0YXRlICJBVCBrZXlib2FyZCIgaWYgRU1CRURERUQgfHwgIVg4Nl9QQworCXRyaXN0YXRlICJBVCBrZXlib2FyZCIgaWYgRU1CRURERUQgfHwgIVg4NgogCWRlZmF1bHQgeQogCXNlbGVjdCBTRVJJTwogCXNlbGVjdCBTRVJJT19MSUJQUzIKLQlzZWxlY3QgU0VSSU9fSTgwNDIgaWYgWDg2X1BDCisJc2VsZWN0IFNFUklPX0k4MDQyIGlmIFg4NgogCXNlbGVjdCBTRVJJT19HU0NQUzIgaWYgR1NDCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBzdGFuZGFyZCBBVCBvciBQUy8yIGtleWJvYXJkLiBVc3VhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCmluZGV4IDIyZjE3YTUuLjVhYTIzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFNFR0EgRHJlYW1jYXN0IGtleWJvYXJkIGRyaXZlcgogICogQmFzZWQgb24gZHJpdmVycy91c2IvdXNia2JkLmMKLSAqIENvcHlyaWdodCBZQUVHQVNISSBUYWtlc2hpLCAyMDAxCi0gKiBQb3J0aW5nIHRvIDIuNiBDb3B5cmlnaHQgQWRyaWFuIE1jTWVuYW1pbiwgMjAwNywgMjAwOAorICogQ29weXJpZ2h0IChjKSBZQUVHQVNISSBUYWtlc2hpLCAyMDAxCisgKiBQb3J0aW5nIHRvIDIuNiBDb3B5cmlnaHQgKGMpIEFkcmlhbiBNY01lbmFtaW4sIDIwMDcgLSAyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgTlJfU0NBTkNPREVTIDI1NgogCi1NT0RVTEVfQVVUSE9SKCJZQUVHQVNISSBUYWtlc2hpLCBBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0VHQSBEcmVhbWNhc3Qga2V5Ym9hcmQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTExNSw3ICsxMTUsNyBAQAogCQkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CiAJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIDApOwogCQkJfSBlbHNlCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hcGxlX2tleWI6ICIKKwkJCQlkZXZfZGJnKCZkZXYtPmRldiwKIAkJCQkJIlVua25vd24ga2V5IChzY2FuY29kZSAlI3gpIHJlbGVhc2VkLiIsCiAJCQkJCWNvZGUpOwogCQl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAkJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAxKTsKIAkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBsZV9rZXliOiAiCisJCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSBwcmVzc2VkLiIsCiAJCQkJCWNvZGUpOwogCQl9CkBAIC0xNDAsNyArMTQwLDcgQEAKIHsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptYXBsZWRldiA9IG1xLT5kZXY7CiAJc3RydWN0IGRjX2tiZCAqa2JkID0gbWFwbGVfZ2V0X2RydmRhdGEobWFwbGVkZXYpOwotCXVuc2lnbmVkIGxvbmcgKmJ1ZiA9IG1xLT5yZWN2YnVmOworCXVuc2lnbmVkIGxvbmcgKmJ1ZiA9ICh1bnNpZ25lZCBsb25nICopKG1xLT5yZWN2YnVmLT5idWYpOwogCiAJLyoKIAkgKiBXZSBzaG91bGQgYWx3YXlzIGdldCB0aGUgbG9jayBiZWNhdXNlIHRoZSBvbmx5CkBAIC0xNTksMjIgKzE1OSwyNyBAQAogCiBzdGF0aWMgaW50IHByb2JlX21hcGxlX2tiZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXYpOwotCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1hcGxlX2RyaXZlciAqbWRydjsKIAlpbnQgaSwgZXJyb3I7CiAJc3RydWN0IGRjX2tiZCAqa2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CiAKLQlpZiAoIShtZGV2LT5mdW5jdGlvbiAmIE1BUExFX0ZVTkNfS0VZQk9BUkQpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwltZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CisJbWRydiA9IHRvX21hcGxlX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKIAlrYmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNfa2JkKSwgR0ZQX0tFUk5FTCk7Ci0JaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICgha2JkIHx8ICFpZGV2KSB7CisJaWYgKCFrYmQpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCisJaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaWRldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9pZGV2X2FsbG9jOworCX0KKwogCWtiZC0+ZGV2ID0gaWRldjsKIAltZW1jcHkoa2JkLT5rZXljb2RlLCBkY19rYmRfa2V5Y29kZSwgc2l6ZW9mKGtiZC0+a2V5Y29kZSkpOwogCkBAIC0xOTUsNyArMjAwLDcgQEAKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOwogCWlmIChlcnJvcikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CiAKIAkvKiBNYXBsZSBwb2xsaW5nIGlzIGxvY2tlZCB0byBWQkxBTksgLSB3aGljaCBtYXkgYmUganVzdCA1MC9zICovCiAJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCBkY19rYmRfY2FsbGJhY2ssIEhaLzUwLApAQCAtMjA3LDEwICsyMTIsMTIgQEAKIAogCXJldHVybiBlcnJvcjsKIAotZmFpbDoKLQlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKLQlrZnJlZShrYmQpOworZmFpbF9yZWdpc3RlcjoKIAltYXBsZV9zZXRfZHJ2ZGF0YShtZGV2LCBOVUxMKTsKKwlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKK2ZhaWxfaWRldl9hbGxvYzoKKwlrZnJlZShrYmQpOworZmFpbDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCA1YzhhMWJjLi5lMTQ4MGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0yMTksNiArMjE5LDggQEAKIAkJICBwZGF0YS0+c2Nhbl90aW1pbmcsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKIAlpb3dyaXRlMTYoMCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7CiAJaW93cml0ZTE2KEtZQ1IyX0lSUV9MRVZFTCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOworCisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCXJldHVybiAwOwogIGVycjU6CiAJZnJlZV9pcnEoaXJxLCBwZGV2KTsKQEAgLTI1MywxNyArMjU1LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfa2V5c2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzaF9rZXlzY19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7CiAKLSNkZWZpbmUgc2hfa2V5c2Nfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHNoX2tleXNjX3Jlc3VtZSBOVUxMCisJdmFsdWUgPSBpb3JlYWQxNihwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJdmFsdWUgfD0gMHg4MDsKKwllbHNlCisJCXZhbHVlICY9IH4weDgwOworCisJaW93cml0ZTE2KHZhbHVlLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9rZXlzY19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gc2hfa2V5c2Nfc3VzcGVuZCwKK307CiAKIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfa2V5c2NfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2hfa2V5c2NfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9rZXlzY19yZW1vdmUpLAotCS5zdXNwZW5kCT0gc2hfa2V5c2Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNoX2tleXNjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAic2hfa2V5c2MiLAorCQkucG0JPSAmc2hfa2V5c2NfZGV2X3BtX29wcywKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKaW5kZXggOTcwNWYzYS4uNGYzOGU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwpAQCAtMTcsNyArMTcsNyBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBTRVJJTwogCXNlbGVjdCBTRVJJT19MSUJQUzIKLQlzZWxlY3QgU0VSSU9fSTgwNDIgaWYgWDg2X1BDCisJc2VsZWN0IFNFUklPX0k4MDQyIGlmIFg4NgogCXNlbGVjdCBTRVJJT19HU0NQUzIgaWYgR1NDCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBTLzIgbW91c2UgY29ubmVjdGVkIHRvIHlvdXIgc3lzdGVtLiBUaGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggZWY5OWE3ZS4uMTdmZDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtNDAzLDEyICs0MDMsOSBAQAogCiBzdGF0aWMgaW50IG1vdXNlZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbW91c2VkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1vdXNlZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggMDZiYmQwZS4uYjAzMDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC01OCwxMCArNTgsOCBAQAogc3RhdGljIGludCBzZXJpb19yYXdfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzZXJpb19yYXcgKnNlcmlvX3Jhd19sb2NhdGUoaW50IG1pbm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKaW5kZXggMWJkODk2MC4uZmVhNWI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYworKysgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCkBAIC0yNTcsOSArMjU3LDkgQEAKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkgICAgICAgImFjdDIwMDBfaXNhX3JlY2VpdmU6IEludmFsaWQgQ0FQSSBtc2dcbiIpOwogCQkJCQl7Ci0JCQkJCQlpbnQgaTsgX191OCAqcDsgX191OCAqYzsgX191OCB0bXBbMzBdOwotCQkJCQkJZm9yIChpID0gMCwgcCA9IChfX3U4ICopJmNhcmQtPmlkYXQuaXNhLnJjdmhkciwgYyA9IHRtcDsgaSA8IDg7IGkrKykKLQkJCQkJCQljICs9IHNwcmludGYoYywgIiUwMnggIiwgKihwKyspKTsKKwkJCQkJCWludCBpOyBfX3U4ICpwOyBfX3U4ICp0OyBfX3U4IHRtcFszMF07CisJCQkJCQlmb3IgKGkgPSAwLCBwID0gKF9fdTggKikmY2FyZC0+aWRhdC5pc2EucmN2aGRyLCB0ID0gdG1wOyBpIDwgODsgaSsrKQorCQkJCQkJCXQgKz0gc3ByaW50Zih0LCAiJTAyeCAiLCAqKHArKykpOwogCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWN0MjAwMF9pc2FfcmVjZWl2ZTogJXNcbiIsIHRtcCk7CiAJCQkJCX0KIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggMWI1YmY4Ny4uM2U0NjhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJbGlzdF9kZWwoJm1wLT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaW1pbm9yX2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JaWYgKG1wLT50dHlza2IpIGtmcmVlX3NrYihtcC0+dHR5c2tiKTsKKwlrZnJlZV9za2IobXAtPnR0eXNrYik7CiAJbXAtPnR0eXNrYiA9IE5VTEw7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+aW5xdWV1ZSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+b3V0cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCmluZGV4IGMyOTIwOGIuLjUwZWQ3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKQEAgLTIzOSw2ICsyMzksNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkICpjYXBpX2RyaXZlcl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaykKIHsKIAlyZWFkX2xvY2soJmNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmY2FwaV9kcml2ZXJzLCAqcG9zKTsKQEAgLTI1MCw2ICsyNTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjYXBpX2RyaXZlcl9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKaW5kZXggMDAxN2U1MC4uOWNhODg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogbWVudWNvbmZpZyBJU0ROX0RSVl9HSUdBU0VUCi0JdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IChpc2RuKSIKKwl0cmlzdGF0ZSAiU2llbWVucyBHaWdhc2V0IHN1cHBvcnQiCiAJc2VsZWN0IENSQ19DQ0lUVAogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscApAQCAtMTEsMTEgKzExLDExIEBACiAJICBvbmUgb2YgdGhlIGNvbm5lY3Rpb24gc3BlY2lmaWMgcGFydHMgdGhhdCBmb2xsb3cuCiAJICBUaGlzIHdpbGwgYnVpbGQgYSBtb2R1bGUgY2FsbGVkICJnaWdhc2V0Ii4KIAotaWYgSVNETl9EUlZfR0lHQVNFVCE9bgoraWYgSVNETl9EUlZfR0lHQVNFVAogCiBjb25maWcgR0lHQVNFVF9CQVNFCiAJdHJpc3RhdGUgIkdpZ2FzZXQgYmFzZSBzdGF0aW9uIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiBpbnRlcmZhY2Ugb2YgdGhlIEdpZ2FzZXQKIAkgIGJhc2UgZm9yIGNvbm5lY3Rpb24gdG8geW91ciBzeXN0ZW0uCkBAIC0yMyw3ICsyMyw3IEBACiAKIGNvbmZpZyBHSUdBU0VUX00xMDUKIAl0cmlzdGF0ZSAiR2lnYXNldCBNMTA1IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBHaWdhc2V0IGJhc2UgdmlhIERFQ1QKIAkgIHVzaW5nIGEgR2lnYXNldCBNMTA1IChTaW51cyA0NSBEYXRhIDIpIFVTQiBERUNUIGRldmljZS4KQEAgLTMxLDcgKzMxLDYgQEAKIAogY29uZmlnIEdJR0FTRVRfTTEwMQogCXRyaXN0YXRlICJHaWdhc2V0IE0xMDEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTRE5fRFJWX0dJR0FTRVQKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gdGhlIEdpZ2FzZXQgYmFzZSB2aWEgREVDVAogCSAgdXNpbmcgYSBHaWdhc2V0IE0xMDEgKFNpbnVzIDQ1IERhdGEgMSkgUlMyMzIgREVDVCBkZXZpY2UuCkBAIC00OCw3ICs0Nyw2IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFVTQiByZXF1ZXN0cyB3ZSBvbmx5IGtub3cgZnJvbQogCSAgcmV2ZXJzZSBlbmdpbmVlcmluZyAoY3VycmVudGx5IE0xMDUgb25seSkuIElmIHlvdSBuZWVkCi0JICBmZWF0dXJlcyBsaWtlIGNvbmZpZ3VyYXRpb24gbW9kZSBvZiBNMTA1LCBzYXkgeWVzLiBJZiB5b3UKLQkgIGNhcmUgYWJvdXQgeW91ciBkZXZpY2UsIHNheSBuby4KKwkgIGZlYXR1cmVzIGxpa2UgY29uZmlndXJhdGlvbiBtb2RlIG9mIE0xMDUsIHNheSB5ZXMuCiAKLWVuZGlmICMgSVNETl9EUlZfR0lHQVNFVCAhPSBuCitlbmRpZiAjIElTRE5fRFJWX0dJR0FTRVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDE4ZGQ4YWEuLjgzMWRkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtNDYsNiArNDYsOSBAQAogLyogbGVuZ3RoIGxpbWl0IGFjY29yZGluZyB0byBTaWVtZW5zIDMwNzB1c2ItcHJvdG9rb2xsLmRvYyBjaC4gMi4xICovCiAjZGVmaW5lIElGX1dSSVRFQlVGIDI2NAogCisvKiBpbnRlcnJ1cHQgcGlwZSBtZXNzYWdlIHNpemUgYWNjb3JkaW5nIHRvIGliaWQuIGNoLiAyLjIgKi8KKyNkZWZpbmUgSVBfTVNHU0laRSAzCisKIC8qIFZhbHVlcyBmb3IgdGhlIEdpZ2FzZXQgMzA3eCAqLwogI2RlZmluZSBVU0JfR0lHQV9WRU5ET1JfSUQgICAgICAweDA2ODEKICNkZWZpbmUgVVNCXzMwNzBfUFJPRFVDVF9JRCAgICAgMHgwMDAxCkBAIC0xMTAsNyArMTEzLDcgQEAKIAl1bnNpZ25lZCBjaGFyCQkqcmN2YnVmOwkvKiBBVCByZXBseSByZWNlaXZlIGJ1ZmZlciAqLwogCiAJc3RydWN0IHVyYgkJKnVyYl9pbnRfaW47CS8qIFVSQiBmb3IgaW50ZXJydXB0IHBpcGUgKi8KLQl1bnNpZ25lZCBjaGFyCQlpbnRfaW5fYnVmWzNdOworCXVuc2lnbmVkIGNoYXIJCSppbnRfaW5fYnVmOwogCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIGxvY2tzIGFsbCBmb2xsb3dpbmcgKi8KIAlpbnQJCQliYXNzdGF0ZTsJLyogYml0bWFwIChCU18qKSAqLwpAQCAtNjU3LDcgKzY2MCw3IEBACiAJfQogCiAJLyogZHJvcCBpbmNvbXBsZXRlIHBhY2tldHMgZXZlbiBpZiB0aGUgbWlzc2luZyBieXRlcyB3b3VsZG4ndCBtYXR0ZXIgKi8KLQlpZiAodW5saWtlbHkodXJiLT5hY3R1YWxfbGVuZ3RoIDwgMykpIHsKKwlpZiAodW5saWtlbHkodXJiLT5hY3R1YWxfbGVuZ3RoIDwgSVBfTVNHU0laRSkpIHsKIAkJZGV2X3dhcm4oY3MtPmRldiwgImluY29tcGxldGUgaW50ZXJydXB0IHBhY2tldCAoJWQgYnl0ZXMpXG4iLAogCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCWdvdG8gcmVzdWJtaXQ7CkBAIC0yMTI3LDYgKzIxMzAsNyBAQAogc3RhdGljIHZvaWQgZ2lnYXNldF9mcmVlY3NodyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAkvKiB0aW1lcnMsIFVSQnMgYW5kIHJjdmJ1ZiBhcmUgZGlzcG9zZWQgb2YgaW4gZGlzY29ubmVjdCAqLworCWtmcmVlKGNzLT5ody5iYXMtPmludF9pbl9idWYpOwogCWtmcmVlKGNzLT5ody5iYXMpOwogCWNzLT5ody5iYXMgPSBOVUxMOwogfQpAQCAtMjE0MCw2ICsyMTQ0LDEyIEBACiAJCXByX2Vycigib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAwOwogCX0KKwl1Y3MtPmludF9pbl9idWYgPSBrbWFsbG9jKElQX01TR1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghdWNzLT5pbnRfaW5fYnVmKSB7CisJCWtmcmVlKHVjcyk7CisJCXByX2Vycigib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KIAogCXVjcy0+dXJiX2NtZF9pbiA9IE5VTEw7CiAJdWNzLT51cmJfY21kX291dCA9IE5VTEw7CkBAIC0yMjkyLDcgKzIzMDIsNyBAQAogCXVzYl9maWxsX2ludF91cmIodWNzLT51cmJfaW50X2luLCB1ZGV2LAogCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCiAJCQkJCShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgJiAweDBmKSwKLQkJCSB1Y3MtPmludF9pbl9idWYsIDMsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKKwkJCSB1Y3MtPmludF9pbl9idWYsIElQX01TR1NJWkUsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKIAkJCSBlbmRwb2ludC0+YkludGVydmFsKTsKIAlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfaW50X2luLCBHRlBfS0VSTkVMKSkgIT0gMCkgewogCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IGludGVycnVwdCBVUkI6ICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKaW5kZXggYWMyNDVlNy4uMzA3MWE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCkBAIC0zODksOCArMzg5LDcgQEAKIAogc3RhdGljIHZvaWQgZ2lnYXNldF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9Ci0JCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCiAJLyogYWRhcHRlZCBmcm9tIHBsYXRmb3JtX2RldmljZV9yZWxlYXNlKCkgaW4gZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgKi8KIAkvL0ZJWE1FIGlzIHRoaXMgYWN0dWFsbHkgbmVjZXNzYXJ5PwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKaW5kZXggZmJhNjFmNi4uZDc4Mzg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCkBAIC0yNzgsMTcgKzI3OCwxNyBAQAogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCiAJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbGluZV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogc3RhdGljIGludCBnaWdhc2V0X2JhdWRfcmF0ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAjZW5kaWYKIApAQCAtNTc3LDcgKzU3Nyw3IEBACiAJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MTksIDB4NDEsCiAJCQkgICAgICAgMCwgMCwgJmJ1ZiwgNiwgMjAwMCk7CiAjZWxzZQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKaW5kZXggODQzMThlYy4uMzNjZTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICAgICAgIHBDLT54YnVmZmVyWzVdID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAgOCk7CiAgICAgICAgIHBDLT54YnVmZmVyWzZdID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAxNik7CiAgICAgICAgIHBDLT54YnVmZmVyWzddID0gKGJ5dGUpKHJ4X2RtYV9tYWdpYyA+PiAyNCk7Ci0gICAgICAgIHBDLT54YnVmZmVyWzhdID0gKGJ5dGUpRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFOworCXBDLT54YnVmZmVyWzhdID0gKGJ5dGUpKERJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRSAmIDB4RkYpOwogICAgICAgICBwQy0+eGJ1ZmZlcls5XSA9IChieXRlKShESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkUgPj4gOCk7CiAgICAgICAgIHBDLT54YnVmZmVyWzEwXSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IDRjYzk0ZjIuLjMxZjkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtMTE5NCw3ICsxMTk0LDggQEAKIC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZvciBlYWNoIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotYnl0ZSBjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIGNoOwogICB3b3JkIGk7CkBAIC0xNDExLDcgKzE0MTIsOCBAQAogICByZXR1cm4gMjsKIH0KIAotYnl0ZSBjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIGksIEluZm87CiAgIHdvcmQgUmVqZWN0OwpAQCAtMTU2NywxMyArMTU2OSwxNSBAQAogICByZXR1cm4gMTsKIH0KIAotYnl0ZSBjb25uZWN0X2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJjb25uZWN0X2FfcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgaTsKQEAgLTE2MjgsNyArMTYzMiw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJkaXNjb25uZWN0X3JlcyIpKTsKICAgaWYocGxjaSkKQEAgLTE2NTUsNyArMTY2MCw4IEBACiAgIHJldHVybiAwOwogfQogCi1ieXRlIGxpc3Rlbl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBsaXN0ZW5fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIGJ5dGUgaTsKQEAgLTE3MDQsNyArMTcxMCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBpbmZvX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBpbmZvX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIGk7CiAgIEFQSV9QQVJTRSAqIGFpOwpAQCAtMTgxMywxMyArMTgyMCwxNSBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgaW5mb19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgaW5mb19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImluZm9fcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgYWxlcnRfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGFsZXJ0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvOwogICBieXRlIHJldDsKQEAgLTE4NDksNyArMTg1OCw4IEBACiAgIHJldHVybiByZXQ7CiB9CiAKLWJ5dGUgZmFjaWxpdHlfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGZhY2lsaXR5X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm8gPSAwOwogICB3b3JkIGkgICAgPSAwOwpAQCAtMjU5OSwxMyArMjYwOSwxNSBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZmFjaWxpdHlfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGZhY2lsaXR5X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiZmFjaWxpdHlfcmVzIikpOwogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvID0gMDsKICAgYnl0ZSByZXE7CkBAIC0yODM5LDcgKzI4NTEsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICBBUElfUEFSU0UgKiBuY3BpOwpAQCAtMjk1NCw3ICsyOTY3LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKIApAQCAtMjk3NCw3ICsyOTg4LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBuY2NpOwpAQCAtMzAzMCw3ICszMDQ1LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgd29yZCBpOwpAQCAtMzA4Niw3ICszMTAyLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRhdGFfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGF0YV9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIE5DQ0kgICAqbmNjaV9wdHI7CiAgIERBVEFfQjNfREVTQyAgICpkYXRhOwpAQCAtMzE2Myw3ICszMTgwLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRhdGFfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgZGF0YV9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbjsKICAgd29yZCBuY2NpOwpAQCAtMzE5Niw3ICszMjE0LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIHJlc2V0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIHJlc2V0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBuY2NpOwpAQCAtMzIzNyw3ICszMjU2LDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIHJlc2V0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIHJlc2V0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKIApAQCAtMzI2MSw3ICszMjgxLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfdDkwX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM190OTBfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICBBUElfUEFSU0UgKiBuY3BpOwpAQCAtMzI5NSw3ICszMzE2LDggQEAKIH0KIAogCi1ieXRlIHNlbGVjdF9iX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBzZWxlY3RfYl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvPTA7CiAgIHdvcmQgaTsKQEAgLTg2ODksNyArODcxMSw3IEBACiAvKiBzZW5kIGEgcmVxdWVzdCBmb3IgdGhlIHNpZ25hbGluZyBlbnRpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgc2lnX3JlcShQTENJICAgKiBwbGNpLCBieXRlIHJlcSwgYnl0ZSBJZCkKK3N0YXRpYyB2b2lkIHNpZ19yZXEoUExDSSAqcGxjaSwgYnl0ZSByZXEsIGJ5dGUgSWQpCiB7CiAgIGlmKCFwbGNpKSByZXR1cm47CiAgIGlmKHBsY2ktPmFkYXB0ZXItPmFkYXB0ZXJfZGlzYWJsZWQpIHJldHVybjsKQEAgLTg3ODksNyArODgxMSw3IEBACiAgIGRidWcoMSxkcHJpbnRmKCJzZW5kX29rIikpOwogfQogCi12b2lkIHNlbmRfZGF0YShQTENJICAgKiBwbGNpKQorc3RhdGljIHZvaWQgc2VuZF9kYXRhKFBMQ0kgKnBsY2kpCiB7CiAgIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhOwogICBEQVRBX0IzX0RFU0MgICAqIGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKaW5kZXggZjBlMTRkZi4uNjQxYTljZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwpAQCAtNTYsOCArNTYsOCBAQAogc3RhdGljIGludCBIRkNfY250Owogc3RhdGljIHVpbnQgZGVidWc7CiBzdGF0aWMgdWludCBwb2xsLCB0aWNzOwotc3RydWN0IHRpbWVyX2xpc3QgaGZjX3RsOwotdTMyCWhmY19qaWZmaWVzOworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGhmY190bDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhmY19qaWZmaWVzOwogCiBNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIEtlaWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCmluZGV4IGJhNjkyNWYuLjljNDI3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KICNpbmNsdWRlICJoZmNzdXNiLmgiCiAKLWNvbnN0IGNoYXIgKmhmY3N1c2JfcmV2ID0gIlJldmlzaW9uOiAwLjMuMyAoc29ja2V0KSwgMjAwOC0xMS0wNSI7CitzdGF0aWMgY29uc3QgY2hhciAqaGZjc3VzYl9yZXYgPSAiUmV2aXNpb246IDAuMy4zIChzb2NrZXQpLCAyMDA4LTExLTA1IjsKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKIHN0YXRpYyBpbnQgcG9sbCA9IERFRkFVTFRfVFJBTlNQX0JVUlNUX1NaOwpAQCAtOTc0LDcgKzk3NCw3IEBACiAJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGZpbGxfaXNvY191cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKIAkgICAgICB2b2lkICpidWYsIGludCBudW1fcGFja2V0cywgaW50IHBhY2tldF9zaXplLCBpbnQgaW50ZXJ2YWwsCiAJICAgICAgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpCkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogCiAKIC8qIEhhcmR3YXJlIEluaXRpYWxpemF0aW9uICovCi1pbnQKK3N0YXRpYyBpbnQKIHNldHVwX2hmY3N1c2Ioc3RydWN0IGhmY3N1c2IgKmh3KQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaAppbmRleCAwOTg0ODZiLi40M2VmZTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmgKQEAgLTE5OCw3ICsxOTgsNyBAQAogfTsKIAogLyogc3RyaW5nIGRlc2NyaXB0aW9uIG9mIGNob3NlbiBjb25maWcgKi8KLWNoYXIgKmNvbmZfc3RyW10gPSB7CitzdGF0aWMgY2hhciAqY29uZl9zdHJbXSA9IHsKIAkiNCBJbnRlcnJ1cHQgSU4gKyAzIElzb2Nocm9uIE9VVCIsCiAJIjMgSW50ZXJydXB0IElOICsgMyBJc29jaHJvbiBPVVQiLAogCSI0IElzb2Nocm9uIElOICsgMyBJc29jaHJvbiBPVVQiLApAQCAtMzE2LDcgKzMxNiw3IEBACiAjZGVmaW5lIEhGQ19NQVhfVEVfTEFZRVIxX1NUQVRFIDgKICNkZWZpbmUgSEZDX01BWF9OVF9MQVlFUjFfU1RBVEUgNAogCi1jb25zdCBjaGFyICpIRkNfVEVfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX1RFX0xBWUVSMV9TVEFURSArIDFdID0geworc3RhdGljIGNvbnN0IGNoYXIgKkhGQ19URV9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfVEVfTEFZRVIxX1NUQVRFICsgMV0gPSB7CiAJIlRFIEYwIC0gUmVzZXQiLAogCSJURSBGMSAtIFJlc2V0IiwKIAkiVEUgRjIgLSBTZW5zaW5nIiwKQEAgLTMyOCw3ICszMjgsNyBAQAogCSJURSBGOCAtIExvc3QgZnJhbWluZyIsCiB9OwogCi1jb25zdCBjaGFyICpIRkNfTlRfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX05UX0xBWUVSMV9TVEFURSArIDFdID0geworc3RhdGljIGNvbnN0IGNoYXIgKkhGQ19OVF9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfTlRfTEFZRVIxX1NUQVRFICsgMV0gPSB7CiAJIk5UIEcwIC0gUmVzZXQiLAogCSJOVCBHMSAtIERlYWN0aXZlIiwKIAkiTlQgRzIgLSBQZW5kaW5nIGFjdGl2YXRpb24iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYwppbmRleCA3YzU2YzQ0Li4wMjVhMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYwpAQCAtMjQsNyArMjQsNiBAQAogY29uc3QgY2hhciAqbGxpX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi41OS4yLjQgJCI7CiAKIGV4dGVybiBzdHJ1Y3QgSXNkbkNhcmQgY2FyZHNbXTsKLWV4dGVybiBpbnQgbnJjYXJkczsKIAogc3RhdGljIGludCBpbml0X2Jfc3Qoc3RydWN0IENoYW5uZWwgKmNoYW5wLCBpbnQgaW5jb21pbmcpOwogc3RhdGljIHZvaWQgcmVsZWFzZV9iX3N0KHN0cnVjdCBDaGFubmVsICpjaGFucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKaW5kZXggZGVkOWQwYi4uNGZhYjE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwpAQCAtMzYxLDEyICszNjEsNiBAQAogCiBpbnQgbnJjYXJkczsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmwxX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmwyX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmwzX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICp0ZWlfcmV2aXNpb247Ci0KIGNoYXIgKkhpU2F4X2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbikKIHsKIAljaGFyICpyZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jCmluZGV4IGNmMDgyNjYuLjIwZDc2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSAiaGZjXzJiZHMwLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqaGZjc19yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMTAuMi40ICQiOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKaW5kZXggZThkNDI5Zi4uZjg1MjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKQEAgLTEyMSw2ICsxMjEsMTUgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CitleHRlcm4gaW50IG5yY2FyZHM7CisKK2V4dGVybiBjb25zdCBjaGFyICpsMV9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICpsMl9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICpsM19yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqdGVpX3JldmlzaW9uOworCiAvKiBpbmNsdWRlIGwzZHNzMSAmIG5pMSBzcGVjaWZpYyBwcm9jZXNzIHN0cnVjdHVyZXMsIGJ1dCBubyBvdGhlciBkZWZpbmVzICovCiAjaWZkZWYgQ09ORklHX0hJU0FYX0VVUk8KICAgI2RlZmluZSBsM2RzczFfcHJvY2VzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCmluZGV4IGExNDIwNGUuLjMxN2YxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKQEAgLTE4LDEyICsxOCwxMiBAQAogICoKICAqLwogCi1jb25zdCBjaGFyICpsMV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuNDYuMi41ICQiOwotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKK2NvbnN0IGNoYXIgKmwxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi40Ni4yLjUgJCI7CisKICNkZWZpbmUgVElNRVIzX1ZBTFVFIDcwMDAKIAogc3RhdGljIHN0cnVjdCBGc20gbDFmc21fYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCBhMTBkZmE4Li41NTY5YTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC00OCw4ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqU2VkbGJhdWVyX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4zNC4yLjYgJCI7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpTZWRsYmF1ZXJfVHlwZXNbXSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKaW5kZXggNDg1ODEzMy4uM2NhMGJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgImlzYWMuaCIKICNpbmNsdWRlICJoc2N4LmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqdGVsZXMwX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xNS4yLjQgJCI7CiAKICNkZWZpbmUgVEVMRVNfSU9NRU1fU0laRQkweDQwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCmluZGV4IDVkYzlmMWEuLmU5ZjViYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJoc2N4LmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogc3RhdGljIGNvbnN0IGNoYXIgKnRlbGVzM19yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTkuMi40ICQiOwogCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jCmluZGV4IDQ0ZDljM2QuLmYxYmJjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jCkBAIC00MSwxMSArNDEsMTEgQEAKIAogc3RhdGljIHVfaW50ICpkZWJ1ZzsKIHN0YXRpYyBMSVNUX0hFQUQoaWNsb2NrX2xpc3QpOwotREVGSU5FX1JXTE9DSyhpY2xvY2tfbG9jayk7Ci11MTYJaWNsb2NrX2NvdW50OwkJLyogY291bnRlciBvZiBsYXN0IGNsb2NrICovCi1zdHJ1Y3QJdGltZXZhbCBpY2xvY2tfdHY7CS8qIHRpbWUgc3RhbXAgb2YgbGFzdCBjbG9jayAqLwotaW50CWljbG9ja190dl92YWxpZDsJLyogYWxyZWFkeSByZWNlaXZlZCBvbmUgdGltZXN0YW1wICovCi1zdHJ1Y3QJbUlTRE5jbG9jayAqaWNsb2NrX2N1cnJlbnQ7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhpY2xvY2tfbG9jayk7CitzdGF0aWMgdTE2IGljbG9ja19jb3VudDsJCS8qIGNvdW50ZXIgb2YgbGFzdCBjbG9jayAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIGljbG9ja190djsJLyogdGltZSBzdGFtcCBvZiBsYXN0IGNsb2NrICovCitzdGF0aWMgaW50IGljbG9ja190dl92YWxpZDsJCS8qIGFscmVhZHkgcmVjZWl2ZWQgb25lIHRpbWVzdGFtcCAqLworc3RhdGljIHN0cnVjdCBtSVNETmNsb2NrICppY2xvY2tfY3VycmVudDsKIAogdm9pZAogbUlTRE5faW5pdF9jbG9jayh1X2ludCAqZHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jCmluZGV4IGYyYjMyMTguLmJiZDk5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jCkBAIC0xNTIsOCArMTUyLDcgQEAKIAl1X2xvbmcJCQlmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lci0+ZGV2LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnRpbWVyLT5saXN0KTsKLQlsaXN0X2FkZF90YWlsKCZ0aW1lci0+bGlzdCwgJnRpbWVyLT5kZXYtPmV4cGlyZWQpOworCWxpc3RfbW92ZV90YWlsKCZ0aW1lci0+bGlzdCwgJnRpbWVyLT5kZXYtPmV4cGlyZWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRpbWVyLT5kZXYtPndhaXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCmluZGV4IDViYTJhODcuLmUwNzVlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYworKysgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKQEAgLTM0Nyw4ICszNDcsNyBAQAogCQlpZiAoZGV2LT5yZWFkX2ZyYW1lKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAicGNiaXRfcmVjZWl2ZTogVHlwZSAwIGZyYW1lIGFuZCByZWFkX2ZyYW1lICE9IE5VTExcbiIpOwogCQkJLyogZGlzY2FyZCBwcmV2aW91cyBxdWV1ZWQgZnJhbWUgKi8KLQkJCWlmIChkZXYtPnJlYWRfZnJhbWUtPnNrYikKLQkJCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOworCQkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKIAkJCWtmcmVlKGRldi0+cmVhZF9mcmFtZSk7CiAJCQlkZXYtPnJlYWRfZnJhbWUgPSBOVUxMOwogCQl9CkBAIC02MDEsOCArNjAwLDcgQEAKIAlkZXYtPndfYnVzeSA9IGRldi0+cl9idXN5ID0gMTsKIAogCWlmIChkZXYtPnJlYWRfZnJhbWUpIHsKLQkJaWYgKGRldi0+cmVhZF9mcmFtZS0+c2tiKQotCQkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKKwkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKIAkJa2ZyZWUoZGV2LT5yZWFkX2ZyYW1lKTsKIAkJZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDc0MjcxMzYuLjU1NmFlY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0yMjMsNCArMjIzLDcgQEAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgaW5pdGlhbGlzZWQgaW4gdGhlIE9OIHN0YXRlLgogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29tbWVudCAiaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KSIKKwlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMKKwogZW5kaWYgIyBORVdfTEVEUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZyBiL2RyaXZlcnMvbGd1ZXN0L0tjb25maWcKaW5kZXggNzZmMmIzNi4uYTNkM2NiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL2xndWVzdC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIExHVUVTVAogCXRyaXN0YXRlICJMaW51eCBoeXBlcnZpc29yIGV4YW1wbGUgY29kZSIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBFWFBFUklNRU5UQUwgJiYgIVg4Nl9QQUUgJiYgRlVURVggJiYgIVg4Nl9WT1lBR0VSCisJZGVwZW5kcyBvbiBYODZfMzIgJiYgRVhQRVJJTUVOVEFMICYmICFYODZfUEFFICYmIEZVVEVYCiAJc2VsZWN0IEhWQ19EUklWRVIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgbW9kdWxlIHdoaWNoIGFsbG93cyB5b3UgdG8gcnVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21jYS9tY2EtYnVzLmMgYi9kcml2ZXJzL21jYS9tY2EtYnVzLmMKaW5kZXggZWYyZGJmZS4uYWRhNWViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCisrKyBiL2RyaXZlcnMvbWNhL21jYS1idXMuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAKIAltY2FfZGV2LT5kZXYucGFyZW50ID0gJm1jYV9idXMtPmRldjsKIAltY2FfZGV2LT5kZXYuYnVzID0gJm1jYV9idXNfdHlwZTsKLQlzcHJpbnRmIChtY2FfZGV2LT5kZXYuYnVzX2lkLCAiJTAyZDolMDJYIiwgYnVzLCBtY2FfZGV2LT5zbG90KTsKKwlkZXZfc2V0X25hbWUoJm1jYV9kZXYtPmRldiwgIiUwMmQ6JTAyWCIsIGJ1cywgbWNhX2Rldi0+c2xvdCk7CiAJbWNhX2Rldi0+ZG1hX21hc2sgPSBtY2FfYnVzLT5kZWZhdWx0X2RtYV9tYXNrOwogCW1jYV9kZXYtPmRldi5kbWFfbWFzayA9ICZtY2FfZGV2LT5kbWFfbWFzazsKIAltY2FfZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBtY2FfZGV2LT5kbWFfbWFzazsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmICghbWNhX2J1cykKIAkJcmV0dXJuIE5VTEw7CiAKLQlzcHJpbnRmKG1jYV9idXMtPmRldi5idXNfaWQsIm1jYSVkIixidXMpOworCWRldl9zZXRfbmFtZSgmbWNhX2J1cy0+ZGV2LCAibWNhJWQiLCBidXMpOwogCXNwcmludGYobWNhX2J1cy0+bmFtZSwiSG9zdCAlcyBNQ0EgQnJpZGdlIiwgYnVzID8gIlNlY29uZGFyeSIgOiAiUHJpbWFyeSIpOwogCWlmIChkZXZpY2VfcmVnaXN0ZXIoJm1jYV9idXMtPmRldikpIHsKIAkJa2ZyZWUobWNhX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggMzViZGE0OS4uYmZlZmQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtNjAsNiArNjAsNyBAQAogfTsKIAogc3RydWN0IGRtX2NyeXB0X3JlcXVlc3QgeworCXN0cnVjdCBjb252ZXJ0X2NvbnRleHQgKmN0eDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX291dDsKIH07CkBAIC0zMzUsNiArMzM2LDE4IEBACiAJaW5pdF9jb21wbGV0aW9uKCZjdHgtPnJlc3RhcnQpOwogfQogCitzdGF0aWMgc3RydWN0IGRtX2NyeXB0X3JlcXVlc3QgKmRtcmVxX29mX3JlcShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywKKwkJCQkJICAgICBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIChzdHJ1Y3QgZG1fY3J5cHRfcmVxdWVzdCAqKSgoY2hhciAqKXJlcSArIGNjLT5kbXJlcV9zdGFydCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXFfb2ZfZG1yZXEoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsCisJCQkJCSAgICAgICBzdHJ1Y3QgZG1fY3J5cHRfcmVxdWVzdCAqZG1yZXEpCit7CisJcmV0dXJuIChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICopKChjaGFyICopZG1yZXEgLSBjYy0+ZG1yZXFfc3RhcnQpOworfQorCiBzdGF0aWMgaW50IGNyeXB0X2NvbnZlcnRfYmxvY2soc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsCiAJCQkgICAgICAgc3RydWN0IGNvbnZlcnRfY29udGV4dCAqY3R4LAogCQkJICAgICAgIHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKQEAgLTM0NSwxMCArMzU4LDExIEBACiAJdTggKml2OwogCWludCByID0gMDsKIAotCWRtcmVxID0gKHN0cnVjdCBkbV9jcnlwdF9yZXF1ZXN0ICopKChjaGFyICopcmVxICsgY2MtPmRtcmVxX3N0YXJ0KTsKKwlkbXJlcSA9IGRtcmVxX29mX3JlcShjYywgcmVxKTsKIAlpdiA9ICh1OCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKShkbXJlcSArIDEpLAogCQkJIGNyeXB0b19hYmxrY2lwaGVyX2FsaWdubWFzayhjYy0+dGZtKSArIDEpOwogCisJZG1yZXEtPmN0eCA9IGN0eDsKIAlzZ19pbml0X3RhYmxlKCZkbXJlcS0+c2dfaW4sIDEpOwogCXNnX3NldF9wYWdlKCZkbXJlcS0+c2dfaW4sIGJ2X2luLT5idl9wYWdlLCAxIDw8IFNFQ1RPUl9TSElGVCwKIAkJICAgIGJ2X2luLT5idl9vZmZzZXQgKyBjdHgtPm9mZnNldF9pbik7CkBAIC0zOTUsOCArNDA5LDkgQEAKIAkJY2MtPnJlcSA9IG1lbXBvb2xfYWxsb2MoY2MtPnJlcV9wb29sLCBHRlBfTk9JTyk7CiAJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oY2MtPnJlcSwgY2MtPnRmbSk7CiAJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhjYy0+cmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRyB8Ci0JCQkJCSAgICAgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAotCQkJCQkgICAgIGtjcnlwdGRfYXN5bmNfZG9uZSwgY3R4KTsKKwkJCQkJQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCQlrY3J5cHRkX2FzeW5jX2RvbmUsCisJCQkJCWRtcmVxX29mX3JlcShjYywgY2MtPnJlcSkpOwogfQogCiAvKgpAQCAtNTUzLDE5ICs1NjgsMjIgQEAKIHN0YXRpYyB2b2lkIGNyeXB0X2RlY19wZW5kaW5nKHN0cnVjdCBkbV9jcnlwdF9pbyAqaW8pCiB7CiAJc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MgPSBpby0+dGFyZ2V0LT5wcml2YXRlOworCXN0cnVjdCBiaW8gKmJhc2VfYmlvID0gaW8tPmJhc2VfYmlvOworCXN0cnVjdCBkbV9jcnlwdF9pbyAqYmFzZV9pbyA9IGlvLT5iYXNlX2lvOworCWludCBlcnJvciA9IGlvLT5lcnJvcjsKIAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmaW8tPnBlbmRpbmcpKQogCQlyZXR1cm47CiAKLQlpZiAobGlrZWx5KCFpby0+YmFzZV9pbykpCi0JCWJpb19lbmRpbyhpby0+YmFzZV9iaW8sIGlvLT5lcnJvcik7Ci0JZWxzZSB7Ci0JCWlmIChpby0+ZXJyb3IgJiYgIWlvLT5iYXNlX2lvLT5lcnJvcikKLQkJCWlvLT5iYXNlX2lvLT5lcnJvciA9IGlvLT5lcnJvcjsKLQkJY3J5cHRfZGVjX3BlbmRpbmcoaW8tPmJhc2VfaW8pOwotCX0KLQogCW1lbXBvb2xfZnJlZShpbywgY2MtPmlvX3Bvb2wpOworCisJaWYgKGxpa2VseSghYmFzZV9pbykpCisJCWJpb19lbmRpbyhiYXNlX2JpbywgZXJyb3IpOworCWVsc2UgeworCQlpZiAoZXJyb3IgJiYgIWJhc2VfaW8tPmVycm9yKQorCQkJYmFzZV9pby0+ZXJyb3IgPSBlcnJvcjsKKwkJY3J5cHRfZGVjX3BlbmRpbmcoYmFzZV9pbyk7CisJfQogfQogCiAvKgpAQCAtODIxLDcgKzgzOSw4IEBACiBzdGF0aWMgdm9pZCBrY3J5cHRkX2FzeW5jX2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luY19yZXEsCiAJCQkgICAgICAgaW50IGVycm9yKQogewotCXN0cnVjdCBjb252ZXJ0X2NvbnRleHQgKmN0eCA9IGFzeW5jX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgZG1fY3J5cHRfcmVxdWVzdCAqZG1yZXEgPSBhc3luY19yZXEtPmRhdGE7CisJc3RydWN0IGNvbnZlcnRfY29udGV4dCAqY3R4ID0gZG1yZXEtPmN0eDsKIAlzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvID0gY29udGFpbmVyX29mKGN0eCwgc3RydWN0IGRtX2NyeXB0X2lvLCBjdHgpOwogCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gaW8tPnRhcmdldC0+cHJpdmF0ZTsKIApAQCAtODMwLDcgKzg0OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQltZW1wb29sX2ZyZWUoYWJsa2NpcGhlcl9yZXF1ZXN0X2Nhc3QoYXN5bmNfcmVxKSwgY2MtPnJlcV9wb29sKTsKKwltZW1wb29sX2ZyZWUocmVxX29mX2RtcmVxKGNjLCBkbXJlcSksIGNjLT5yZXFfcG9vbCk7CiAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cGVuZGluZykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCBmMTQ4MTNiLi4zNmUyYjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC0yOTIsNiArMjkyLDggQEAKIAkJCQkJICAgICAoUEFHRV9TSVpFID4+IFNFQ1RPUl9TSElGVCkpOwogCQludW1fYnZlY3MgPSAxICsgbWluX3QoaW50LCBiaW9fZ2V0X25yX3ZlY3Mod2hlcmUtPmJkZXYpLAogCQkJCSAgICAgIG51bV9idmVjcyk7CisJCWlmICh1bmxpa2VseShudW1fYnZlY3MgPiBCSU9fTUFYX1BBR0VTKSkKKwkJCW51bV9idmVjcyA9IEJJT19NQVhfUEFHRVM7CiAJCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoR0ZQX05PSU8sIG51bV9idmVjcywgaW8tPmNsaWVudC0+Ymlvcyk7CiAJCWJpby0+Ymlfc2VjdG9yID0gd2hlcmUtPnNlY3RvciArICh3aGVyZS0+Y291bnQgLSByZW1haW5pbmcpOwogCQliaW8tPmJpX2JkZXYgPSB3aGVyZS0+YmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwppbmRleCA1NGQwNTg4Li5mMDEwOTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCkBAIC03MDQsNyArNzA0LDggQEAKIAljaGFyICpuZXdfbmFtZSA9IChjaGFyICopIHBhcmFtICsgcGFyYW0tPmRhdGFfc3RhcnQ7CiAKIAlpZiAobmV3X25hbWUgPCBwYXJhbS0+ZGF0YSB8fAotCSAgICBpbnZhbGlkX3N0cihuZXdfbmFtZSwgKHZvaWQgKikgcGFyYW0gKyBwYXJhbV9zaXplKSkgeworCSAgICBpbnZhbGlkX3N0cihuZXdfbmFtZSwgKHZvaWQgKikgcGFyYW0gKyBwYXJhbV9zaXplKSB8fAorCSAgICBzdHJsZW4obmV3X25hbWUpID4gRE1fTkFNRV9MRU4gLSAxKSB7CiAJCURNV0FSTigiSW52YWxpZCBuZXcgbG9naWNhbCB2b2x1bWUgbmFtZSBzdXBwbGllZC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTA2Myw3ICsxMDY0LDcgQEAKIAogCXIgPSBwb3B1bGF0ZV90YWJsZSh0LCBwYXJhbSwgcGFyYW1fc2l6ZSk7CiAJaWYgKHIpIHsKLQkJZG1fdGFibGVfcHV0KHQpOworCQlkbV90YWJsZV9kZXN0cm95KHQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwNzEsNyArMTA3Miw3IEBACiAJaGMgPSBkbV9nZXRfbWRwdHIobWQpOwogCWlmICghaGMgfHwgaGMtPm1kICE9IG1kKSB7CiAJCURNV0FSTigiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZGV2IGhhc2ggdGFibGUuIik7Ci0JCWRtX3RhYmxlX3B1dCh0KTsKKwkJZG1fdGFibGVfZGVzdHJveSh0KTsKIAkJdXBfd3JpdGUoJl9oYXNoX2xvY2spOwogCQlyID0gLUVOWElPOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA1MWJhMWRiLi44ZDQwZjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC01MjUsOSArNTI1LDEyIEBACiBzdGF0aWMgdm9pZCBkZWNfcGVuZGluZyhzdHJ1Y3QgZG1faW8gKmlvLCBpbnQgZXJyb3IpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaW9fZXJyb3I7CisJc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGlvLT5tZDsKIAogCS8qIFB1c2gtYmFjayBzdXBlcnNlZGVzIGFueSBJL08gZXJyb3JzICovCi0JaWYgKGVycm9yICYmICEoaW8tPmVycm9yID4gMCAmJiBfX25vZmx1c2hfc3VzcGVuZGluZyhpby0+bWQpKSkKKwlpZiAoZXJyb3IgJiYgIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkpCiAJCWlvLT5lcnJvciA9IGVycm9yOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvLT5pb19jb3VudCkpIHsKQEAgLTUzNywyNCArNTQwLDI3IEBACiAJCQkgKiBUaGlzIG11c3QgYmUgaGFuZGxlZCBiZWZvcmUgdGhlIHNsZWVwZXIgb24KIAkJCSAqIHN1c3BlbmQgcXVldWUgbWVyZ2VzIHRoZSBwdXNoYmFjayBsaXN0LgogCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW8tPm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7Ci0JCQlpZiAoX19ub2ZsdXNoX3N1c3BlbmRpbmcoaW8tPm1kKSkKLQkJCQliaW9fbGlzdF9hZGQoJmlvLT5tZC0+cHVzaGJhY2ssIGlvLT5iaW8pOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCQlpZiAoX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKQorCQkJCWJpb19saXN0X2FkZCgmbWQtPnB1c2hiYWNrLCBpby0+YmlvKTsKIAkJCWVsc2UKIAkJCQkvKiBub2ZsdXNoIHN1c3BlbmQgd2FzIGludGVycnVwdGVkLiAqLwogCQkJCWlvLT5lcnJvciA9IC1FSU87Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpby0+bWQtPnB1c2hiYWNrX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CiAJCX0KIAogCQllbmRfaW9fYWNjdChpbyk7CiAKLQkJaWYgKGlvLT5lcnJvciAhPSBETV9FTkRJT19SRVFVRVVFKSB7Ci0JCQl0cmFjZV9ibG9ja19iaW9fY29tcGxldGUoaW8tPm1kLT5xdWV1ZSwgaW8tPmJpbyk7CisJCWlvX2Vycm9yID0gaW8tPmVycm9yOworCQliaW8gPSBpby0+YmlvOwogCi0JCQliaW9fZW5kaW8oaW8tPmJpbywgaW8tPmVycm9yKTsKKwkJZnJlZV9pbyhtZCwgaW8pOworCisJCWlmIChpb19lcnJvciAhPSBETV9FTkRJT19SRVFVRVVFKSB7CisJCQl0cmFjZV9ibG9ja19iaW9fY29tcGxldGUobWQtPnF1ZXVlLCBiaW8pOworCisJCQliaW9fZW5kaW8oYmlvLCBpb19lcnJvcik7CiAJCX0KLQotCQlmcmVlX2lvKGlvLT5tZCwgaW8pOwogCX0KIH0KIApAQCAtNTYyLDYgKzU2OCw3IEBACiB7CiAJaW50IHIgPSAwOwogCXN0cnVjdCBkbV90YXJnZXRfaW8gKnRpbyA9IGJpby0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgZG1faW8gKmlvID0gdGlvLT5pbzsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSB0aW8tPmlvLT5tZDsKIAlkbV9lbmRpb19mbiBlbmRpbyA9IHRpby0+dGktPnR5cGUtPmVuZF9pbzsKIApAQCAtNTg1LDE1ICs1OTIsMTQgQEAKIAkJfQogCX0KIAotCWRlY19wZW5kaW5nKHRpby0+aW8sIGVycm9yKTsKLQogCS8qCiAJICogU3RvcmUgbWQgZm9yIGNsZWFudXAgaW5zdGVhZCBvZiB0aW8gd2hpY2ggaXMgYWJvdXQgdG8gZ2V0IGZyZWVkLgogCSAqLwogCWJpby0+YmlfcHJpdmF0ZSA9IG1kLT5iczsKIAotCWJpb19wdXQoYmlvKTsKIAlmcmVlX3RpbyhtZCwgdGlvKTsKKwliaW9fcHV0KGJpbyk7CisJZGVjX3BlbmRpbmcoaW8sIGVycm9yKTsKIH0KIAogc3RhdGljIHNlY3Rvcl90IG1heF9pb19sZW4oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCAyOWU4ZjE1Li5mZWMxZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMTY4Myw3ICsxNjgzLDcgQEAKIAogc3RhdGljIGludCBkc3RfZ2V0X3R1bmluZ19hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXJldHVybiBkc3RfYWxnbzsKKwlyZXR1cm4gZHN0X2FsZ28gPyBEVkJGRV9BTEdPX0hXIDogRFZCRkVfQUxHT19TVzsKIH0KIAogc3RhdGljIGludCBkc3RfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IDg0MzQwNzcuLjhkY2IzZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC0xMjkwLDkgKzEyOTAsNiBAQAogCQlkcHJpbnRrKCIlcygpIEZpbmFsaXNlZCBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOwogCQlkdHZfcHJvcGVydHlfY2FjaGVfc3VibWl0KGZlKTsKIAotCQkvKiBSZXF1ZXN0IHRoZSBzZWFyY2ggYWxnb3JpdGhtIHRvIHNlYXJjaCAqLwotCQlmZXByaXYtPmFsZ29fc3RhdHVzIHw9IERWQkZFX0FMR09fU0VBUkNIX0FHQUlOOwotCiAJCXIgfD0gZHZiX2Zyb250ZW5kX2lvY3RsX2xlZ2FjeShpbm9kZSwgZmlsZSwgRkVfU0VUX0ZST05URU5ELAogCQkJJmZlcHJpdi0+cGFyYW1ldGVycyk7CiAJCWJyZWFrOwpAQCAtMTcxNyw2ICsxNzE0LDEwIEBACiAJCQlmZXByaXYtPm1pbl9kZWxheSA9IChkdmJfb3ZlcnJpZGVfdHVuZV9kZWxheSAqIEhaKSAvIDEwMDA7CiAKIAkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfUkVUVU5FOworCisJCS8qIFJlcXVlc3QgdGhlIHNlYXJjaCBhbGdvcml0aG0gdG8gc2VhcmNoICovCisJCWZlcHJpdi0+YWxnb19zdGF0dXMgfD0gRFZCRkVfQUxHT19TRUFSQ0hfQUdBSU47CisKIAkJZHZiX2Zyb250ZW5kX3dha2V1cChmZSk7CiAJCWR2Yl9mcm9udGVuZF9hZGRfZXZlbnQoZmUsIDApOwogCQlmZXByaXYtPnN0YXR1cyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCBiNTVkOWNjLi4zMjUyNmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfZmNwX29wY29kZSh1bnNpZ25lZCBpbnQgb3Bjb2RlLAotCQkJCSAgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKKwkJCQkgICAgY29uc3QgdTggKmRhdGEsIGludCBsZW5ndGgpCiB7CiAJc3dpdGNoIChvcGNvZGUpIHsKIAljYXNlIEFWQ19PUENPREVfVkVORE9SOgkJCWJyZWFrOwpAQCAtMTM1LDEzICsxMzUsMTQgQEAKIAljYXNlIFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MOglyZXR1cm4gIlJlZ2lzdGVyUkMiOwogCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfTE5CX0NPTlRST0w6CQlyZXR1cm4gIkxOQkNvbnRyb2wiOwogCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfVFVORV9RUFNLOgkJcmV0dXJuICJUdW5lUVBTSyI7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0syOgkJcmV0dXJuICJUdW5lUVBTSzIiOwogCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfSE9TVDJDQToJCQlyZXR1cm4gIkhvc3QyQ0EiOwogCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDoJCQlyZXR1cm4gIkNBMkhvc3QiOwogCX0KIAlyZXR1cm4gIlZlbmRvciI7CiB9CiAKLXN0YXRpYyB2b2lkIGRlYnVnX2ZjcChjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyB2b2lkIGRlYnVnX2ZjcChjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKIAl1bnNpZ25lZCBpbnQgc3VidW5pdF90eXBlLCBzdWJ1bml0X2lkLCBvcDsKIAljb25zdCBjaGFyICpwcmVmaXggPSBkYXRhWzBdID4gNyA/ICJGQ1AgPC0gIiA6ICJGQ1AgLT4gIjsKQEAgLTI2Niw3ICsyNjcsMTAgQEAKIAljLT5vcGVyYW5kWzBdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMDsKIAljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKIAljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKLQljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfVFVORV9RUFNLOworCWlmIChmZHR2LT50eXBlID09IEZJUkVEVFZfRFZCX1MyKQorCQljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfVFVORV9RUFNLMjsKKwllbHNlCisJCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s7CiAKIAljLT5vcGVyYW5kWzRdID0gKHBhcmFtcy0+ZnJlcXVlbmN5ID4+IDI0KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFs1XSA9IChwYXJhbXMtPmZyZXF1ZW5jeSA+PiAxNikgJiAweGZmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jCmluZGV4IGE2N2QxNzcuLjJkYTU1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2FsZ28uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9hbGdvLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCX0KIAogCWlmIChyYW5nZSA+IDApCi0JCWludGVybmFsLT5zdWJfcmFuZ2UgPSBNSU4oaW50ZXJuYWwtPnNyY2hfcmFuZ2UsIHJhbmdlKTsKKwkJaW50ZXJuYWwtPnN1Yl9yYW5nZSA9IG1pbihpbnRlcm5hbC0+c3JjaF9yYW5nZSwgcmFuZ2UpOwogCWVsc2UKIAkJaW50ZXJuYWwtPnN1Yl9yYW5nZSA9IDA7CiAKQEAgLTE4NSw3ICsxODUsNyBAQAogCXRpbWluZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfUlRGKTsKIAogCWlmIChsb2NrID49IDQyKSB7Ci0JCWlmICgobG9jayA+IDQ4KSAmJiAoQUJTKHRpbWluZykgPj0gMTEwKSkgeworCQlpZiAoKGxvY2sgPiA0OCkgJiYgKGFicyh0aW1pbmcpID49IDExMCkpIHsKIAkJCWludGVybmFsLT5zdGF0dXMgPSBBTkFMT0dDQVJSSUVSOwogCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLT5BTkFMT0cgQ2FycmllciAhIik7CiAJCX0gZWxzZSB7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJaW5kZXgrKzsKIAkJZGVyb3RfZnJlcSArPSBpbmRleCAqIGludGVybmFsLT5kaXJlY3Rpb24gKiBkZXJvdF9zdGVwOwkvKiBuZXh0IGRlcm90IHppZyB6YWcgcG9zaXRpb24JKi8KIAotCQlpZiAoQUJTKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCisJCWlmIChhYnMoZGVyb3RfZnJlcSkgPiBkZXJvdF9saW1pdCkKIAkJCW5leHRfbG9vcC0tOwogCiAJCWlmIChuZXh0X2xvb3ApIHsKQEAgLTI5OCw3ICsyOTgsNyBAQAogCQkJbGFzdF9kZXJvdF9mcmVxID0gZGVyb3RfZnJlcTsKIAkJCWRlcm90X2ZyZXEgKz0gaW5kZXggKiBpbnRlcm5hbC0+ZGlyZWN0aW9uICogaW50ZXJuYWwtPmRlcm90X3N0ZXA7IC8qIG5leHQgemlnIHphZyBkZXJvdGF0b3IgcG9zaXRpb24gKi8KIAotCQkJaWYoQUJTKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCisJCQlpZihhYnMoZGVyb3RfZnJlcSkgPiBkZXJvdF9saW1pdCkKIAkJCQluZXh0X2xvb3AtLTsKIAogCQkJaWYgKG5leHRfbG9vcCkgewpAQCAtNDAwLDcgKzQwMCw3IEBACiAJCWlmICgoaW50ZXJuYWwtPnN0YXR1cyAhPSBDQVJSSUVST0spIHx8IChzdGIwODk5X2NoZWNrX2RhdGEoc3RhdGUpICE9IERBVEFPSykpIHsKIAogCQkJZGVyb3RfZnJlcSArPSBpbmRleCAqIGludGVybmFsLT5kaXJlY3Rpb24gKiBkZXJvdF9zdGVwOwkvKiBuZXh0IHppZyB6YWcgZGVyb3RhdG9yIHBvc2l0aW9uICovCi0JCQlpZiAoQUJTKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCisJCQlpZiAoYWJzKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCiAJCQkJbmV4dF9sb29wLS07CiAKIAkJCWlmIChuZXh0X2xvb3ApIHsKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCiAJaWYgKGludGVybmFsLT5zdWJfZGlyID4gMCkgewogCQlvbGRfc3ViX3JhbmdlID0gaW50ZXJuYWwtPnN1Yl9yYW5nZTsKLQkJaW50ZXJuYWwtPnN1Yl9yYW5nZSA9IE1JTigoaW50ZXJuYWwtPnNyY2hfcmFuZ2UgLyAyKSAtCisJCWludGVybmFsLT5zdWJfcmFuZ2UgPSBtaW4oKGludGVybmFsLT5zcmNoX3JhbmdlIC8gMikgLQogCQkJCQkgIChpbnRlcm5hbC0+dHVuZXJfb2Zmc3QgKyBpbnRlcm5hbC0+c3ViX3JhbmdlIC8gMiksCiAJCQkJCSAgIGludGVybmFsLT5zdWJfcmFuZ2UpOwogCkBAIC03NzEsNyArNzcxLDcgQEAKIAlpbnQgaTsKIAogCWkgPSAwOwotCXdoaWxlICgoMSA8PCBpKSA8PSBBQlMobnVtYmVyKSkKKwl3aGlsZSAoKDEgPDwgaSkgPD0gYWJzKG51bWJlcikpCiAJCWkrKzsKIAogCWlmIChudW1iZXIgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2Rydi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMKaW5kZXggMTA2MTNhYy4uYTA0Yzc4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMKQEAgLTc5NCw3ICs3OTQsNyBAQAogCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfRElTQ05UUkwxKTsKIAlvbGRfc3RhdGUgPSByZWc7CiAJLyogc2V0IHRvIGJ1cnN0IG1vZGUJKi8KLQlTVEIwODk5X1NFVEZJRUxEX1ZBTChESVNFUUNNT0RFLCByZWcsIDB4MDIpOworCVNUQjA4OTlfU0VURklFTERfVkFMKERJU0VRQ01PREUsIHJlZywgMHgwMyk7CiAJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRElTUFJFQ0hBUkdFLCByZWcsIDB4MDEpOwogCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSwgcmVnKTsKIAlzd2l0Y2ggKGJ1cnN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9wcml2LmgKaW5kZXggMjQ2MTllMy4uODIzOTViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X3ByaXYuaApAQCAtNTksMTAgKzU5LDYgQEAKICNkZWZpbmUgTUFLRVdPUkQzMihhLCBiLCBjLCBkKQkJCSgoKGEpIDw8IDI0KSB8ICgoYikgPDwgMTYpIHwgKChjKSA8PCA4KSB8IChkKSkKICNkZWZpbmUgTUFLRVdPUkQxNihhLCBiKQkJCSgoKGEpIDw8IDgpIHwgKGIpKQogCi0jZGVmaW5lIE1JTih4LCB5KQkJCQkoKHgpIDw9ICh5KSA/ICh4KSA6ICh5KSkKLSNkZWZpbmUgTUFYKHgsIHkpCQkJCSgoeCkgPj0gKHkpID8gKHgpIDogKHkpKQotI2RlZmluZSBBQlMoeCkJCQkJCSgoeCkgPj0gMCA/ICh4KSA6IC0oeCkpCi0KICNkZWZpbmUgTFNCKHgpCQkJCQkoKHggJiAweGZmKSkKICNkZWZpbmUgTVNCKHkpCQkJCQkoKHkgPj4gOCkgJiAweGZmKQogCkBAIC0xNjgsMTAgKzE2NCwxMCBAQAogCXUzMgkJCWZyZXE7CQkJLyogRGVtb2QgaW50ZXJuYWwgRnJlcXVlbmN5CQkqLwogCXUzMgkJCXNyYXRlOwkJCS8qIERlbW9kIGludGVybmFsIFN5bWJvbCByYXRlCQkqLwogCWVudW0gc3RiMDg5OV9mZWMJZmVjcmF0ZTsJCS8qIERlbW9kIGludGVybmFsIEZFQyByYXRlCQkqLwotCXUzMgkJCXNyY2hfcmFuZ2U7CQkvKiBEZW1vZCBpbnRlcm5hbCBTZWFyY2ggUmFuZ2UJCSovCi0JdTMyCQkJc3ViX3JhbmdlOwkJLyogRGVtb2QgY3VycmVudCBzdWIgcmFuZ2UgKEh6KQkJKi8KLQl1MzIJCQl0dW5lcl9zdGVwOwkJLyogVHVuZXIgc3RlcCAoSHopCQkJKi8KLQl1MzIJCQl0dW5lcl9vZmZzdDsJCS8qIFJlbGF0aXZlIG9mZnNldCB0byBjYXJyaWVyIChIeikJKi8KKwlzMzIJCQlzcmNoX3JhbmdlOwkJLyogRGVtb2QgaW50ZXJuYWwgU2VhcmNoIFJhbmdlCQkqLworCXMzMgkJCXN1Yl9yYW5nZTsJCS8qIERlbW9kIGN1cnJlbnQgc3ViIHJhbmdlIChIeikJCSovCisJczMyCQkJdHVuZXJfc3RlcDsJCS8qIFR1bmVyIHN0ZXAgKEh6KQkJCSovCisJczMyCQkJdHVuZXJfb2Zmc3Q7CQkvKiBSZWxhdGl2ZSBvZmZzZXQgdG8gY2FycmllciAoSHopCSovCiAJdTMyCQkJdHVuZXJfYnc7CQkvKiBDdXJyZW50IGJhbmR3aWR0aCBvZiB0aGUgdHVuZXIgKEh6KQkqLwogCiAJczMyCQkJbWNsazsJCQkvKiBNYXN0ZXJjbG9jayBEaXZpZGVyIGZhY3RvciAoYmluYXJ5KQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMKaW5kZXggZmYzOTI3NS4uMWVkNWE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCkBAIC00MjcsMTEgKzQyNywxMSBAQAogCXN0YXR1cy0+cmVmY2xvY2sJPSAyNzAwMDAwMDsJLyogSHoJKi8KIAlzdGF0dXMtPmlxc2Vuc2UJCT0gMTsKIAlzdGF0dXMtPmJhbmR3aWR0aAk9IDM2MDAwOwkvKiBrSHoJKi8KLQlzdGF0ZS0+YmFuZHdpZHRoCT0gc3RhdHVzLT5iYW5kd2lkdGggKiAxMDAwOwkvKiBNSHoJKi8KKwlzdGF0ZS0+YmFuZHdpZHRoCT0gc3RhdHVzLT5iYW5kd2lkdGggKiAxMDAwOwkvKiBIegkqLwogCXN0YXRlLT5yZWZlcmVuY2UJPSBzdGF0dXMtPnJlZmNsb2NrIC8gMTAwMDsJLyoga0h6CSovCiAKIAkvKiBTZXQgZGVmYXVsdCBiYW5kd2lkdGguCSovCi0JcmV0dXJuIHN0YjYxMDBfc2V0X2JhbmR3aWR0aChmZSwgc3RhdHVzLT5iYW5kd2lkdGgpOworCXJldHVybiBzdGI2MTAwX3NldF9iYW5kd2lkdGgoZmUsIHN0YXRlLT5iYW5kd2lkdGgpOwogfQogCiBzdGF0aWMgaW50IHN0YjYxMDBfZ2V0X3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKaW5kZXggMTcwNzIwYi4uYjE1MGVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCkBAIC01OTAsNyArNTkwLDcgQEAKIAlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCB2YWwgPSAweDBhOwogCi0JaWYgKHN0YXRlLT5jb25maWcubm9fdHVuZXIpIHsKKwlpZiAoc3RhdGUtPmNvbmZpZy5kaXNhYmxlX2kyY19nYXRlX2N0cmwpIHsKIAkJLyogTm8gdHVuZXIgYXR0YWNoZWQgdG8gdGhlIGludGVybmFsIEkyQyBidXMgKi8KIAkJLyogSWYgc2V0IGVuYWJsZSBJMkMgYnJpZGdlLCB0aGUgbWFpbiBJMkMgYnVzIHN0b3BwZWQgaGFyZGx5ICovCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKaW5kZXggZmRiYjg4Zi4uMjI4N2JhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCkBAIC0zOCw2ICszOCw5IEBACiAKIAkvKiBzZXQgaWYgcGFyYWxsZWwgdHMgb3V0cHV0IGlzIHJlcXVpcmVkICovCiAJaW50IHBhcmFsbGVsX3RzOworCisJLyogc2V0IGlmIGkyY19nYXRlX2N0cmwgZGlzYWJsZSBpcyByZXF1aXJlZCAqLworCXU4IGRpc2FibGVfaTJjX2dhdGVfY3RybDoxOwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMzUzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1pMMTAzNTNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCmluZGV4IDRkMzUzMDguLjM5MzYyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogCXN0cmxjcHkodi0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsIGRldi0+bmFtZSwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIkkyQzolcyIsIGRldi0+ZGV2LmJ1c19pZCk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksCisJCSAiSTJDOiVzIiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA2NmM3NTVjLi5jZTk4ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC04MDMsOSArODAzLDEwIEBACiAJCXJldHVybiAoLUVOT0VOVCk7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAoLUVOT01FTSk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3g4OF9kZXZfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwppbmRleCAyYWM3MzhmLi5mMTMyZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwpAQCAtNDQ4LDkgKzQ0OCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gImVtMjh4eC1hdWRpby5jOiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzICIKIAkJCSAiUmVjaGJlcmdlclxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5yXSwgIkVtMjh4eCBBdWRpbyIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnJdLCAiRW0yOHh4IEF1ZGlvIiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRldi0+c2xvY2spOwogCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJFbTI4eHggQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IGU1NjRhNjEuLjQ4ODkyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMTAyLDcgKzEwMiwxMSBAQAogCX0KIAogCS8qIFRlc3Qgc29tZSByZWdpc3RlcnMsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZWlyIGV4YWN0IG1lYW5pbmcgeWV0ICovCi0JaWYgKG01NjAyX3JlYWRfc2Vuc29yKHNkLCAweDAwLCBwcm9kX2lkLCBzaXplb2YocHJvZF9pZCkpKQorCWlmIChtNTYwMl9yZWFkX3NlbnNvcihzZCwgMHgwMCwgcHJvZF9pZCwgMikpCisJCXJldHVybiAtRU5PREVWOworCWlmIChtNTYwMl9yZWFkX3NlbnNvcihzZCwgMHgwMiwgcHJvZF9pZCsyLCAyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG01NjAyX3JlYWRfc2Vuc29yKHNkLCAweDA0LCBwcm9kX2lkKzQsIDIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChtZW1jbXAocHJvZF9pZCwgZXhwZWN0ZWRfcHJvZF9pZCwgc2l6ZW9mKHByb2RfaWQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBjNzUwZDNkLi44YjBiNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC05OTAsMTAgKzk5MCwxMCBAQAogCWlmICghZW5hYmxlW2Rldm51bV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCkpOwotCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTQUE3MTM0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggMDc3NmVjZi4uYjUzNzBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTg2MCw2ICs4NjAsNyBAQAogCS5kZW1vZF9hZGRyZXNzID0gMHgxZT4+MSwKIAkubm9fdHVuZXIgICAgICA9IDEsCiAJLnBhcmFsbGVsX3RzICAgPSAxLAorCS5kaXNhYmxlX2kyY19nYXRlX2N0cmwgPSAxLAogfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCmluZGV4IDVhZWNjYjMuLjA3NmVkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCkBAIC01NCw3ICs1NCw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvdXIgc3RydWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSNkZWZpbmUgTUFYUkVHUyA2NAorI2RlZmluZSBNQVhSRUdTIDI1NgogCiBzdHJ1Y3QgQ0hJUFNUQVRFOwogdHlwZWRlZiBpbnQgICgqZ2V0dmFsdWUpKGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggY2Y5ZDRjNy4uOGE0Yjc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMzQsNyArMzQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZ2NGwyX2Rldi0+bG9jayk7CiAJdjRsMl9kZXYtPmRldiA9IGRldjsKIAlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKLQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXYtPmJ1c19pZCk7CisJCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAJZGV2X3NldF9kcnZkYXRhKGRldiwgdjRsMl9kZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCmluZGV4IDRlYTVmYTcuLjg2NjZlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKQEAgLTY4LDYgKzY4LDcgQEAKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19CVDg1NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19CVDg2NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19LUzAxMjcgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgQXZlck1lZGlhIDYgRXllcyB2aWRlbyBzdXJ2ZWlsbGFuY2UgY2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tY3AtY29yZS5jCmluZGV4IDYwNjNkYzIuLjU3MjcxY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIGludCBtY3BfaG9zdF9yZWdpc3RlcihzdHJ1Y3QgbWNwICptY3ApCiB7Ci0Jc3RyY3B5KG1jcC0+YXR0YWNoZWRfZGV2aWNlLmJ1c19pZCwgIm1jcDAiKTsKKwlkZXZfc2V0X25hbWUoJm1jcC0+YXR0YWNoZWRfZGV2aWNlLCAibWNwMCIpOwogCXJldHVybiBkZXZpY2VfcmVnaXN0ZXIoJm1jcC0+YXR0YWNoZWRfZGV2aWNlKTsKIH0KIEVYUE9SVF9TWU1CT0wobWNwX2hvc3RfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwppbmRleCA2ODYwYzkyLi5mZWE5MDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwpAQCAtNDkyLDcgKzQ5Miw3IEBACiAKIAl1Y2ItPmRldi5jbGFzcyA9ICZ1Y2IxeDAwX2NsYXNzOwogCXVjYi0+ZGV2LnBhcmVudCA9ICZtY3AtPmF0dGFjaGVkX2RldmljZTsKLQlzdHJsY3B5KHVjYi0+ZGV2LmJ1c19pZCwgInVjYjF4MDAiLCBzaXplb2YodWNiLT5kZXYuYnVzX2lkKSk7CisJZGV2X3NldF9uYW1lKCZ1Y2ItPmRldiwgInVjYjF4MDAiKTsKIAogCXNwaW5fbG9ja19pbml0KCZ1Y2ItPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZ1Y2ItPmlvX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKaW5kZXggODRkNWVhMS4uYjQ1N2EwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCkBAIC0xMzgzLDYgKzEzODMsMTEgQEAKIAkJCXdtODM1MC0+cG93ZXIucmV2X2dfY29lZmYgPSAxOwogCQkJYnJlYWs7CiAKKwkJY2FzZSAxOgorCQkJZGV2X2luZm8od204MzUwLT5kZXYsICJXTTgzNTEgUmV2IEJcbiIpOworCQkJd204MzUwLT5wb3dlci5yZXZfZ19jb2VmZiA9IDE7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZGV2X2Vycih3bTgzNTAtPmRldiwgIlVua25vd24gV004MzUxIENISVBfUkVWXG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGM2NGU2NzkuLjFjNDg0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0xNjIsNyArMTYyLDcgQEAKIGNvbmZpZyBTR0lfWFAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBjb21tdW5pY2F0aW9uIGJldHdlZW4gU0dJIFNTSXMiCiAJZGVwZW5kcyBvbiBORVQKLQlkZXBlbmRzIG9uIChJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yIHx8IElBNjRfU0dJX1VWIHx8IFg4Nl82NCkgJiYgU01QCisJZGVwZW5kcyBvbiAoSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMiB8fCBJQTY0X1NHSV9VViB8fCBYODZfVVYpICYmIFNNUAogCXNlbGVjdCBJQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUiBpZiBJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yCiAJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SIGlmIElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIKIAlzZWxlY3QgU0dJX0dSVSBpZiAoSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1VWIHx8IFg4Nl82NCkgJiYgU01QCkBAIC0xODksNyArMTg5LDcgQEAKIAogY29uZmlnIFNHSV9HUlUKIAl0cmlzdGF0ZSAiU0dJIEdSVSBkcml2ZXIiCi0JZGVwZW5kcyBvbiAoWDg2XzY0IHx8IElBNjRfU0dJX1VWIHx8IElBNjRfR0VORVJJQykgJiYgU01QCisJZGVwZW5kcyBvbiAoWDg2X1VWIHx8IElBNjRfU0dJX1VWIHx8IElBNjRfR0VORVJJQykgJiYgU01QCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwppbmRleCA2NTA5ODM4Li5jNjdlNGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCkBAIC0zNiwyMyArMzYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91di91di5oPgogI2luY2x1ZGUgImdydS5oIgogI2luY2x1ZGUgImdydWxpYi5oIgogI2luY2x1ZGUgImdydXRhYmxlcy5oIgogCi0jaWYgZGVmaW5lZCBDT05GSUdfWDg2XzY0Ci0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jZGVmaW5lIElTX1VWKCkJCWlzX3V2X3N5c3RlbSgpCi0jZWxpZiBkZWZpbmVkIENPTkZJR19JQTY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9zbi9zaW11bGF0b3IuaD4KLS8qIHRlbXAgc3VwcG9ydCBmb3IgcnVubmluZyBvbiBoYXJkd2FyZSBzaW11bGF0b3IgKi8KLSNkZWZpbmUgSVNfVVYoKQkJSVNfTUVEVVNBKCkgfHwgaWE2NF9wbGF0Zm9ybV9pcygidXYiKQotI2Vsc2UKLSNkZWZpbmUgSVNfVVYoKQkJMAotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KIApAQCAtMzgxLDcgKzM2OSw3IEBACiAJY2hhciBpZFsxMF07CiAJdm9pZCAqZ3J1X3N0YXJ0X3ZhZGRyOwogCi0JaWYgKCFJU19VVigpKQorCWlmICghaXNfdXZfc3lzdGVtKCkpCiAJCXJldHVybiAwOwogCiAjaWYgZGVmaW5lZCBDT05GSUdfSUE2NApAQCAtNDUxLDcgKzQzOSw3IEBACiAJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgZ3J1X3N0YXRlKSAqCiAJCQkgICAgICBHUlVfQ0hJUExFVFNfUEVSX0JMQURFKTsKIAotCWlmICghSVNfVVYoKSkKKwlpZiAoIWlzX3V2X3N5c3RlbSgpKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgR1JVX0NISVBMRVRTX1BFUl9CTEFERTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cC5oIGIvZHJpdmVycy9taXNjL3NnaS14cC94cC5oCmluZGV4IDdiNGNiZDUuLjIyNzUxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHAuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwLmgKQEAgLTE1LDE5ICsxNSwxOSBAQAogCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2lmZGVmIENPTkZJR19JQTY0CisjaWYgZGVmaW5lZCBDT05GSUdfWDg2X1VWIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CisjZGVmaW5lIGlzX3V2KCkJCWlzX3V2X3N5c3RlbSgpCisjZW5kaWYKKworI2lmbmRlZiBpc191dgorI2RlZmluZSBpc191digpCQkwCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX0lBNjQKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4JLyogZGVmaW5lcyBpc19zaHViMSgpIGFuZCBpc19zaHViMigpICovCiAjZGVmaW5lIGlzX3NodWIoKQlpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKQotI2lmZGVmIENPTkZJR19JQTY0X1NHSV9VVgotI2RlZmluZSBpc191digpCQlpYTY0X3BsYXRmb3JtX2lzKCJ1diIpCi0jZWxzZQotI2RlZmluZSBpc191digpCQkwCi0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfNjQKLSNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgotI2RlZmluZSBpc191digpCQlpc191dl9zeXN0ZW0oKQogI2VuZGlmCiAKICNpZm5kZWYgaXNfc2h1YjEKQEAgLTQyLDEwICs0Miw2IEBACiAjZGVmaW5lIGlzX3NodWIoKQkwCiAjZW5kaWYKIAotI2lmbmRlZiBpc191dgotI2RlZmluZSBpc191digpCQkwCi0jZW5kaWYKLQogI2lmZGVmIFVTRV9EQlVHX09OCiAjZGVmaW5lIERCVUdfT04oY29uZGl0aW9uKQlCVUdfT04oY29uZGl0aW9uKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYwppbmRleCA4OTIxOGY3Li42NTc2MTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAogCS8qIHRoaXMgdGhyZWFkIHdhcyBtYXJrZWQgYWN0aXZlIGJ5IHhwY19oYl9pbml0KCkgKi8KIAotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShYUENfSEJfQ0hFQ0tfQ1BVKSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihYUENfSEJfQ0hFQ0tfQ1BVKSk7CiAKIAkvKiBzZXQgb3VyIGhlYXJ0YmVhdGluZyB0byBvdGhlciBwYXJ0aXRpb25zIGludG8gbW90aW9uICovCiAJeHBjX2hiX2NoZWNrX3RpbWVvdXQgPSBqaWZmaWVzICsgKHhwY19oYl9jaGVja19pbnRlcnZhbCAqIEhaKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IDJiMTE5NmUuLmU5NGU5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKIAogCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGFza2xldCwgYXRtY2lfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBwZGV2LT5kZXYuYnVzX2lkLCBob3N0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCmluZGV4IGZiMjkyMWYuLjBjNDRkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKCFncGlvX2lzX3ZhbGlkKG9tcy0+Z3Bpb3NbaV0pKQogCQkJY29udGludWU7CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0IDwgMCkgewogCQkJb21zLT5ncGlvc1tpXSA9IC1FSU5WQUw7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCmluZGV4IGY0YTY3YzYuLjJkYjE2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwpAQCAtNzkzLDggKzc5Myw3IEBACiAJCQkgICAgICBob3N0LT5tZW0tPnN0YXJ0ICsgaG9zdC0+c2RpZGF0YSk7CiAKIAlpZiAoIXNldHVwX29rKSB7Ci0JCXMzYzI0MTBfZG1hX2NvbmZpZyhob3N0LT5kbWEsIDQsCi0JCQkoUzNDMjQxMF9EQ09OX0hXVFJJRyB8IFMzQzI0MTBfRENPTl9DSDBfU0RJKSk7CisJCXMzYzI0MTBfZG1hX2NvbmZpZyhob3N0LT5kbWEsIDQsIDApOwogCQlzM2MyNDEwX2RtYV9zZXRfYnVmZmRvbmVfZm4oaG9zdC0+ZG1hLAogCQkJCQkgICAgczNjbWNpX2RtYV9kb25lX2NhbGxiYWNrKTsKIAkJczNjMjQxMF9kbWFfc2V0ZmxhZ3MoaG9zdC0+ZG1hLCBTM0MyNDEwX0RNQUZfQVVUT1NUQVJUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCBiYzMzMjAwLi42ZmRlMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC0xMjAsMTMgKzEyMCw2IEBACiAJICBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvLCBtZW1vcnkgYmV5b25kIHRoZSBtZW09eHh4IGxpbWl0LCBudnJhbSwKIAkgIG1lbW9yeSBvbiB0aGUgdmlkZW8gY2FyZCwgZXRjLi4uCiAKLWNvbmZpZyBNVERfUFMzVlJBTQotCXRyaXN0YXRlICJQUzMgdmlkZW8gUkFNIgotCWRlcGVuZHMgb24gRkJfUFMzCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgYWxsb3dzIHlvdSB0byB1c2UgZXhjZXNzIFBTMyB2aWRlbyBSQU0gYXMgdm9sYXRpbGUKLQkgIHN0b3JhZ2Ugb3Igc3lzdGVtIHN3YXAuCi0KIGNvbmZpZyBNVERfTEFSVAogCXRyaXN0YXRlICIyOEYxNjB4eCBmbGFzaCBkcml2ZXIgZm9yIExBUlQiCiAJZGVwZW5kcyBvbiBTQTExMDBfTEFSVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKaW5kZXggZTUxNTIxZC4uMDk5M2Q1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCkBAIC0xNiw0ICsxNiwzIEBACiBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCkJKz0gYmxvY2sybXRkLm8KIG9iai0kKENPTkZJR19NVERfREFUQUZMQVNIKQkrPSBtdGRfZGF0YWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTTI1UDgwKQkrPSBtMjVwODAubwotb2JqLSQoQ09ORklHX01URF9QUzNWUkFNKQkrPSBwczN2cmFtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvcHMzdnJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wczN2cmFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMWU5YmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9wczN2cmFtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NjggKzAsMCBAQAotLyoqCi0gKiBwczN2cmFtIC0gVXNlIGV4dHJhIFBTMyB2aWRlbyByYW0gYXMgTVREIGJsb2NrIGRldmljZS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KLSAqIEFkZGVkIHN1cHBvcnQgUlNYIERNQSBWaXZpZW4gQ2hhcHBlbGllciA8dml2aWVuLmNoYXBwZWxpZXJAZnJlZS5mcj4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotCi0jaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KLSNpbmNsdWRlIDxhc20vcHMzLmg+Ci0KLSNkZWZpbmUgREVWSUNFX05BTUUJCSJwczN2cmFtIgotCi0jZGVmaW5lIFhEUl9CVUZfU0laRSAoMiAqIDEwMjQgKiAxMDI0KSAvKiBYRFIgYnVmZmVyIChtdXN0IGJlIDFNaUIgYWxpZ25lZCkgKi8KLSNkZWZpbmUgWERSX0lPSUYgMHgwYzAwMDAwMAotCi0jZGVmaW5lIEZJRk9fQkFTRSBYRFJfSU9JRgotI2RlZmluZSBGSUZPX1NJWkUgKDY0ICogMTAyNCkKLQotI2RlZmluZSBETUFfUEFHRV9TSVpFICg0ICogMTAyNCkKLQotI2RlZmluZSBDQUNIRV9QQUdFX1NJWkUgKDI1NiAqIDEwMjQpCi0jZGVmaW5lIENBQ0hFX1BBR0VfQ09VTlQgKChYRFJfQlVGX1NJWkUgLSBGSUZPX1NJWkUpIC8gQ0FDSEVfUEFHRV9TSVpFKQotCi0jZGVmaW5lIENBQ0hFX09GRlNFVCBDQUNIRV9QQUdFX1NJWkUKLSNkZWZpbmUgRklGT19PRkZTRVQgMAotCi0jZGVmaW5lIENUUkxfUFVUIDB4MTAKLSNkZWZpbmUgQ1RSTF9HRVQgMHgxMQotI2RlZmluZSBDVFJMX1RPUCAweDE1Ci0KLSNkZWZpbmUgVVBMT0FEX1NVQkNICTEKLSNkZWZpbmUgRE9XTkxPQURfU1VCQ0gJMgotCi0jZGVmaW5lIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX09GRlNFVF9JTgkweDAwMDAwMzBjCi0jZGVmaW5lIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUX05PVElGWQkweDAwMDAwMTA0Ci0KLSNkZWZpbmUgTDFHUFVfQ09OVEVYVF9BVFRSSUJVVEVfRkJfQkxJVCAweDYwMQotCi1zdHJ1Y3QgbXRkX2luZm8gcHMzdnJhbV9tdGQ7Ci0KLSNkZWZpbmUgQ0FDSEVfUEFHRV9QUkVTRU5UIDEKLSNkZWZpbmUgQ0FDSEVfUEFHRV9ESVJUWSAgIDIKLQotc3RydWN0IHBzM3ZyYW1fdGFnIHsKLQl1bnNpZ25lZCBpbnQgYWRkcmVzczsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci19OwotCi1zdHJ1Y3QgcHMzdnJhbV9jYWNoZSB7Ci0JdW5zaWduZWQgaW50IHBhZ2VfY291bnQ7Ci0JdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZTsKLQlzdHJ1Y3QgcHMzdnJhbV90YWcgKnRhZ3M7Ci19OwotCi1zdHJ1Y3QgcHMzdnJhbV9wcml2IHsKLQl1NjQgbWVtb3J5X2hhbmRsZTsKLQl1NjQgY29udGV4dF9oYW5kbGU7Ci0JdTMyICpjdHJsOwotCXUzMiAqcmVwb3J0czsKLQl1OCBfX2lvbWVtICpkZHJfYmFzZTsKLQl1OCAqeGRyX2J1ZjsKLQotCXUzMiAqZmlmb19iYXNlOwotCXUzMiAqZmlmb19wdHI7Ci0KLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHBzM3ZyYW1fY2FjaGUgY2FjaGU7Ci0KLQkvKiBVc2VkIHRvIHNlcmlhbGl6ZSBjYWNoZS9ETUEgb3BlcmF0aW9ucyAqLwotCXN0cnVjdCBtdXRleCBsb2NrOwotfTsKLQotI2RlZmluZSBETUFfTk9USUZJRVJfSEFORExFX0JBU0UgMHg2NjYwNDIwMCAvKiBmaXJzdCBETUEgbm90aWZpZXIgaGFuZGxlICovCi0jZGVmaW5lIERNQV9OT1RJRklFUl9PRkZTRVRfQkFTRSAweDEwMDAgICAgIC8qIGZpcnN0IERNQSBub3RpZmllciBvZmZzZXQgKi8KLSNkZWZpbmUgRE1BX05PVElGSUVSX1NJWkUgICAgICAgIDB4NDAKLSNkZWZpbmUgTk9USUZJRVIgNwkvKiBub3RpZmllciB1c2VkIGZvciBjb21wbGV0aW9uIHJlcG9ydCAqLwotCi0vKiBBIHRyYWlsaW5nICctJyBtZWFucyB0byBzdWJ0cmFjdCBvZmYgcHMzZmJfdmlkZW9tZW1vcnkuc2l6ZSAqLwotY2hhciAqc2l6ZSA9ICIyNTZNLSI7Ci1tb2R1bGVfcGFyYW0oc2l6ZSwgY2hhcnAsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzaXplLCAibWVtb3J5IHNpemUiKTsKLQotc3RhdGljIHUzMiAqcHMzdnJhbV9nZXRfbm90aWZpZXIodTMyICpyZXBvcnRzLCBpbnQgbm90aWZpZXIpCi17Ci0JcmV0dXJuICh2b2lkICopIHJlcG9ydHMgKwotCQlETUFfTk9USUZJRVJfT0ZGU0VUX0JBU0UgKwotCQlETUFfTk9USUZJRVJfU0laRSAqIG5vdGlmaWVyOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX25vdGlmaWVyX3Jlc2V0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCWludCBpOwotCi0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQl1MzIgKm5vdGlmeSA9IHBzM3ZyYW1fZ2V0X25vdGlmaWVyKHByaXYtPnJlcG9ydHMsIE5PVElGSUVSKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlub3RpZnlbaV0gPSAweGZmZmZmZmZmOwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fbm90aWZpZXJfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQl1MzIgKm5vdGlmeSA9IHBzM3ZyYW1fZ2V0X25vdGlmaWVyKHByaXYtPnJlcG9ydHMsIE5PVElGSUVSKTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTsKLQotCWRvIHsKLQkJaWYgKCFub3RpZnlbM10pCi0JCQlyZXR1cm4gMDsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2luaXRfcmluZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCi0JcHJpdi0+Y3RybFtDVFJMX1BVVF0gPSBGSUZPX0JBU0UgKyBGSUZPX09GRlNFVDsKLQlwcml2LT5jdHJsW0NUUkxfR0VUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUOwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fd2FpdF9yaW5nKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgdGltZW91dF9tcykKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOwotCi0JZG8gewotCQlpZiAocHJpdi0+Y3RybFtDVFJMX1BVVF0gPT0gcHJpdi0+Y3RybFtDVFJMX0dFVF0pCi0JCQlyZXR1cm4gMDsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKLQotCWRldl9kYmcocHJpdi0+ZGV2LCAiJXM6JWQ6IEZJRk8gdGltZW91dCAoJTA4eC8lMDh4LyUwOHgpXG4iLCBfX2Z1bmNfXywKLQkJX19MSU5FX18sIHByaXYtPmN0cmxbQ1RSTF9QVVRdLCBwcml2LT5jdHJsW0NUUkxfR0VUXSwKLQkJcHJpdi0+Y3RybFtDVFJMX1RPUF0pOwotCi0JcmV0dXJuIC1FVElNRURPVVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzM3ZyYW1fb3V0X3Jpbmcoc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiwgdTMyIGRhdGEpCi17Ci0JKihwcml2LT5maWZvX3B0cikrKyA9IGRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzM3ZyYW1fYmVnaW5fcmluZyhzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2LCB1MzIgY2hhbiwKLQkJCQkgICAgICB1MzIgdGFnLCB1MzIgc2l6ZSkKLXsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIChzaXplIDw8IDE4KSB8IChjaGFuIDw8IDEzKSB8IHRhZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzM3ZyYW1fcmV3aW5kX3Jpbmcoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQl1NjQgc3RhdHVzOwotCi0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweDIwMDAwMDAwIHwgKEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUKSk7Ci0KLQlwcml2LT5jdHJsW0NUUkxfUFVUXSA9IEZJRk9fQkFTRSArIEZJRk9fT0ZGU0VUOwotCi0JLyogYXNraW5nIHRoZSBIViBmb3IgYSBibGl0IHdpbGwga2ljayB0aGUgZmlmbyAqLwotCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9hdHRyaWJ1dGUocHJpdi0+Y29udGV4dF9oYW5kbGUsCi0JCQkJCSAgIEwxR1BVX0NPTlRFWFRfQVRUUklCVVRFX0ZCX0JMSVQsCi0JCQkJCSAgIDAsIDAsIDAsIDApOwotCWlmIChzdGF0dXMpCi0JCWRldl9lcnIocHJpdi0+ZGV2LCAiJXM6JWQ6IGx2MV9ncHVfY29udGV4dF9hdHRyaWJ1dGUgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQotCXByaXYtPmZpZm9fcHRyID0gcHJpdi0+Zmlmb19iYXNlOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2ZpcmVfcmluZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXU2NCBzdGF0dXM7Ci0KLQltdXRleF9sb2NrKCZwczNfZ3B1X211dGV4KTsKLQotCXByaXYtPmN0cmxbQ1RSTF9QVVRdID0gRklGT19CQVNFICsgRklGT19PRkZTRVQgKwotCQkocHJpdi0+Zmlmb19wdHIgLSBwcml2LT5maWZvX2Jhc2UpICogc2l6ZW9mKHUzMik7Ci0KLQkvKiBhc2tpbmcgdGhlIEhWIGZvciBhIGJsaXQgd2lsbCBraWNrIHRoZSBmaWZvICovCi0Jc3RhdHVzID0gbHYxX2dwdV9jb250ZXh0X2F0dHJpYnV0ZShwcml2LT5jb250ZXh0X2hhbmRsZSwKLQkJCQkJICAgTDFHUFVfQ09OVEVYVF9BVFRSSUJVVEVfRkJfQkxJVCwKLQkJCQkJICAgMCwgMCwgMCwgMCk7Ci0JaWYgKHN0YXR1cykKLQkJZGV2X2Vycihwcml2LT5kZXYsICIlczolZDogbHYxX2dwdV9jb250ZXh0X2F0dHJpYnV0ZSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCi0JaWYgKChwcml2LT5maWZvX3B0ciAtIHByaXYtPmZpZm9fYmFzZSkgKiBzaXplb2YodTMyKSA+Ci0JCUZJRk9fU0laRSAtIDEwMjQpIHsKLQkJZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogZmlmbyBmdWxsLCByZXdpbmRpbmdcbiIsIF9fZnVuY19fLAotCQkJX19MSU5FX18pOwotCQlwczN2cmFtX3dhaXRfcmluZyhtdGQsIDIwMCk7Ci0JCXBzM3ZyYW1fcmV3aW5kX3JpbmcobXRkKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnBzM19ncHVfbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2JpbmQoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQotCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsIDAsIDEpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHgzMTMzNzMwMyk7Ci0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIFVQTE9BRF9TVUJDSCwgMHgxODAsIDMpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgRE1BX05PVElGSUVSX0hBTkRMRV9CQVNFICsgTk9USUZJRVIpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMHhmZWVkMDAwMSk7CS8qIERNQSBzeXN0ZW0gUkFNIGluc3RhbmNlICovCi0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweGZlZWQwMDAwKTsgICAgIC8qIERNQSB2aWRlbyBSQU0gaW5zdGFuY2UgKi8KLQotCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBET1dOTE9BRF9TVUJDSCwgMCwgMSk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweDMxMzdjMGRlKTsKLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsIDB4MTgwLCAzKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIERNQV9OT1RJRklFUl9IQU5ETEVfQkFTRSArIE5PVElGSUVSKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIDB4ZmVlZDAwMDApOwkvKiBETUEgdmlkZW8gUkFNIGluc3RhbmNlICovCi0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAweGZlZWQwMDAxKTsJLyogRE1BIHN5c3RlbSBSQU0gaW5zdGFuY2UgKi8KLQotCXBzM3ZyYW1fZmlyZV9yaW5nKG10ZCk7Ci19Ci0KLXN0YXRpYyBpbnQgcHMzdnJhbV91cGxvYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBzcmNfb2Zmc2V0LAotCQkJICB1bnNpZ25lZCBpbnQgZHN0X29mZnNldCwgaW50IGxlbiwgaW50IGNvdW50KQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0KLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgVVBMT0FEX1NVQkNILAotCQkJICAgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfT0ZGU0VUX0lOLCA4KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIFhEUl9JT0lGICsgc3JjX29mZnNldCk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBkc3Rfb2Zmc2V0KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIGNvdW50KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsICgxIDw8IDgpIHwgMSk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKLQotCXBzM3ZyYW1fbm90aWZpZXJfcmVzZXQobXRkKTsKLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgVVBMT0FEX1NVQkNILAotCQkJICAgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfTk9USUZZLCAxKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOwotCXBzM3ZyYW1fYmVnaW5fcmluZyhwcml2LCBVUExPQURfU1VCQ0gsIDB4MTAwLCAxKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIDApOwotCXBzM3ZyYW1fZmlyZV9yaW5nKG10ZCk7Ci0JaWYgKHBzM3ZyYW1fbm90aWZpZXJfd2FpdChtdGQsIDIwMCkgPCAwKSB7Ci0JCWRldl9kYmcocHJpdi0+ZGV2LCAiJXM6JWQ6IG5vdGlmaWVyIHRpbWVvdXRcbiIsIF9fZnVuY19fLAotCQkJX19MSU5FX18pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHMzdnJhbV9kb3dubG9hZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IHNyY19vZmZzZXQsCi0JCQkgICAgdW5zaWduZWQgaW50IGRzdF9vZmZzZXQsIGludCBsZW4sIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCi0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIERPV05MT0FEX1NVQkNILAotCQkJICAgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfT0ZGU0VUX0lOLCA4KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIHNyY19vZmZzZXQpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgWERSX0lPSUYgKyBkc3Rfb2Zmc2V0KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIGxlbik7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCBsZW4pOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgbGVuKTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsIGNvdW50KTsKLQlwczN2cmFtX291dF9yaW5nKHByaXYsICgxIDw8IDgpIHwgMSk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKLQotCXBzM3ZyYW1fbm90aWZpZXJfcmVzZXQobXRkKTsKLQlwczN2cmFtX2JlZ2luX3JpbmcocHJpdiwgRE9XTkxPQURfU1VCQ0gsCi0JCQkgICBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVF9OT1RJRlksIDEpOwotCXBzM3ZyYW1fb3V0X3JpbmcocHJpdiwgMCk7Ci0JcHMzdnJhbV9iZWdpbl9yaW5nKHByaXYsIERPV05MT0FEX1NVQkNILCAweDEwMCwgMSk7Ci0JcHMzdnJhbV9vdXRfcmluZyhwcml2LCAwKTsKLQlwczN2cmFtX2ZpcmVfcmluZyhtdGQpOwotCWlmIChwczN2cmFtX25vdGlmaWVyX3dhaXQobXRkLCAyMDApIDwgMCkgewotCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBub3RpZmllciB0aW1lb3V0XG4iLCBfX2Z1bmNfXywKLQkJCV9fTElORV9fKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2NhY2hlX2V2aWN0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgZW50cnkpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgcHMzdnJhbV9jYWNoZSAqY2FjaGUgPSAmcHJpdi0+Y2FjaGU7Ci0KLQlpZiAoY2FjaGUtPnRhZ3NbZW50cnldLmZsYWdzICYgQ0FDSEVfUEFHRV9ESVJUWSkgewotCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBmbHVzaGluZyAlZCA6IDB4JTA4eFxuIiwgX19mdW5jX18sCi0JCQlfX0xJTkVfXywgZW50cnksIGNhY2hlLT50YWdzW2VudHJ5XS5hZGRyZXNzKTsKLQkJaWYgKHBzM3ZyYW1fdXBsb2FkKG10ZCwKLQkJCQkgICBDQUNIRV9PRkZTRVQgKyBlbnRyeSAqIGNhY2hlLT5wYWdlX3NpemUsCi0JCQkJICAgY2FjaGUtPnRhZ3NbZW50cnldLmFkZHJlc3MsCi0JCQkJICAgRE1BX1BBR0VfU0laRSwKLQkJCQkgICBjYWNoZS0+cGFnZV9zaXplIC8gRE1BX1BBR0VfU0laRSkgPCAwKSB7Ci0JCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBmYWlsZWQgdG8gdXBsb2FkIGZyb20gIgotCQkJCSIweCV4IHRvIDB4JXggc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCi0JCQkJZW50cnkgKiBjYWNoZS0+cGFnZV9zaXplLAotCQkJCWNhY2hlLT50YWdzW2VudHJ5XS5hZGRyZXNzLCBjYWNoZS0+cGFnZV9zaXplKTsKLQkJfQotCQljYWNoZS0+dGFnc1tlbnRyeV0uZmxhZ3MgJj0gfkNBQ0hFX1BBR0VfRElSVFk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2NhY2hlX2xvYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBlbnRyeSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXN0cnVjdCBwczN2cmFtX2NhY2hlICpjYWNoZSA9ICZwcml2LT5jYWNoZTsKLQotCWRldl9kYmcocHJpdi0+ZGV2LCAiJXM6JWQ6IGZldGNoaW5nICVkIDogMHglMDh4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCi0JCWVudHJ5LCBhZGRyZXNzKTsKLQlpZiAocHMzdnJhbV9kb3dubG9hZChtdGQsCi0JCQkgICAgIGFkZHJlc3MsCi0JCQkgICAgIENBQ0hFX09GRlNFVCArIGVudHJ5ICogY2FjaGUtPnBhZ2Vfc2l6ZSwKLQkJCSAgICAgRE1BX1BBR0VfU0laRSwKLQkJCSAgICAgY2FjaGUtPnBhZ2Vfc2l6ZSAvIERNQV9QQUdFX1NJWkUpIDwgMCkgewotCQlkZXZfZXJyKHByaXYtPmRldiwgIiVzOiVkOiBmYWlsZWQgdG8gZG93bmxvYWQgZnJvbSAiCi0JCQkiMHgleCB0byAweCV4IHNpemUgMHgleFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBhZGRyZXNzLAotCQkJZW50cnkgKiBjYWNoZS0+cGFnZV9zaXplLCBjYWNoZS0+cGFnZV9zaXplKTsKLQl9Ci0KLQljYWNoZS0+dGFnc1tlbnRyeV0uYWRkcmVzcyA9IGFkZHJlc3M7Ci0JY2FjaGUtPnRhZ3NbZW50cnldLmZsYWdzIHw9IENBQ0hFX1BBR0VfUFJFU0VOVDsKLX0KLQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2NhY2hlX2ZsdXNoKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IHBzM3ZyYW1fY2FjaGUgKmNhY2hlID0gJnByaXYtPmNhY2hlOwotCWludCBpOwotCi0JZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogRkxVU0hcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JZm9yIChpID0gMDsgaSA8IGNhY2hlLT5wYWdlX2NvdW50OyBpKyspIHsKLQkJcHMzdnJhbV9jYWNoZV9ldmljdChtdGQsIGkpOwotCQljYWNoZS0+dGFnc1tpXS5mbGFncyA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBzM3ZyYW1fY2FjaGVfbWF0Y2goc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBhZGRyZXNzKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IHBzM3ZyYW1fY2FjaGUgKmNhY2hlID0gJnByaXYtPmNhY2hlOwotCXVuc2lnbmVkIGludCBiYXNlOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JaW50IGk7Ci0Jc3RhdGljIGludCBjb3VudGVyOwotCi0Jb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgKGFkZHJlc3MgJiAoY2FjaGUtPnBhZ2Vfc2l6ZSAtIDEpKTsKLQliYXNlID0gKHVuc2lnbmVkIGludCkgKGFkZHJlc3MgLSBvZmZzZXQpOwotCi0JLyogZnVsbHkgYXNzb2NpYXRpdmUgY2hlY2sgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FjaGUtPnBhZ2VfY291bnQ7IGkrKykgewotCQlpZiAoKGNhY2hlLT50YWdzW2ldLmZsYWdzICYgQ0FDSEVfUEFHRV9QUkVTRU5UKSAmJgotCQkgICAgY2FjaGUtPnRhZ3NbaV0uYWRkcmVzcyA9PSBiYXNlKSB7Ci0JCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBmb3VuZCBlbnRyeSAlZCA6IDB4JTA4eFxuIiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIGksIGNhY2hlLT50YWdzW2ldLmFkZHJlc3MpOwotCQkJcmV0dXJuIGk7Ci0JCX0KLQl9Ci0KLQkvKiBjaG9vc2UgYSByYW5kb20gZW50cnkgKi8KLQlpID0gKGppZmZpZXMgKyAoY291bnRlcisrKSkgJSBjYWNoZS0+cGFnZV9jb3VudDsKLQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiB1c2luZyBlbnRyeSAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBpKTsKLQotCXBzM3ZyYW1fY2FjaGVfZXZpY3QobXRkLCBpKTsKLQlwczN2cmFtX2NhY2hlX2xvYWQobXRkLCBpLCBiYXNlKTsKLQotCXJldHVybiBpOwotfQotCi1zdGF0aWMgaW50IHBzM3ZyYW1fY2FjaGVfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCi0JcHJpdi0+Y2FjaGUucGFnZV9jb3VudCA9IENBQ0hFX1BBR0VfQ09VTlQ7Ci0JcHJpdi0+Y2FjaGUucGFnZV9zaXplID0gQ0FDSEVfUEFHRV9TSVpFOwotCXByaXYtPmNhY2hlLnRhZ3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHMzdnJhbV90YWcpICoKLQkJCQkgICBDQUNIRV9QQUdFX0NPVU5ULCBHRlBfS0VSTkVMKTsKLQlpZiAocHJpdi0+Y2FjaGUudGFncyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIocHJpdi0+ZGV2LCAiJXM6JWQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSBjYWNoZSB0YWdzXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGV2X2luZm8ocHJpdi0+ZGV2LCAiY3JlYXRlZCByYW0gY2FjaGU6ICVkIGVudHJpZXMsICVkIEtpQiBlYWNoXG4iLAotCQlDQUNIRV9QQUdFX0NPVU5ULCBDQUNIRV9QQUdFX1NJWkUgLyAxMDI0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwczN2cmFtX2NhY2hlX2NsZWFudXAoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQotCXBzM3ZyYW1fY2FjaGVfZmx1c2gobXRkKTsKLQlrZnJlZShwcml2LT5jYWNoZS50YWdzKTsKLX0KLQotc3RhdGljIGludCBwczN2cmFtX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLQotCWlmIChpbnN0ci0+YWRkciArIGluc3RyLT5sZW4gPiBtdGQtPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0KLQlwczN2cmFtX2NhY2hlX2ZsdXNoKG10ZCk7Ci0KLQkvKiBTZXQgYnl0ZXMgdG8gMHhGRiAqLwotCW1lbXNldF9pbyhwcml2LT5kZHJfYmFzZSArIGluc3RyLT5hZGRyLCAweEZGLCBpbnN0ci0+bGVuKTsKLQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKLQltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHMzdnJhbV9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2ID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGludCBjYWNoZWQsIGNvdW50OwotCi0JZGV2X2RiZyhwcml2LT5kZXYsICIlczolZDogZnJvbT0weCUwOHggbGVuPTB4JXp4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCi0JCSh1bnNpZ25lZCBpbnQpZnJvbSwgbGVuKTsKLQotCWlmIChmcm9tID49IG10ZC0+c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobGVuID4gbXRkLT5zaXplIC0gZnJvbSkKLQkJbGVuID0gbXRkLT5zaXplIC0gZnJvbTsKLQotCS8qIENvcHkgZnJvbSB2cmFtIHRvIGJ1ZiAqLwotCWNvdW50ID0gbGVuOwotCXdoaWxlIChjb3VudCkgewotCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBhdmFpbDsKLQkJdW5zaWduZWQgaW50IGVudHJ5OwotCi0JCW9mZnNldCA9ICh1bnNpZ25lZCBpbnQpIChmcm9tICYgKHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSAtIDEpKTsKLQkJYXZhaWwgID0gcHJpdi0+Y2FjaGUucGFnZV9zaXplIC0gb2Zmc2V0OwotCi0JCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCi0JCWVudHJ5ID0gcHMzdnJhbV9jYWNoZV9tYXRjaChtdGQsIGZyb20pOwotCQljYWNoZWQgPSBDQUNIRV9PRkZTRVQgKyBlbnRyeSAqIHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSArIG9mZnNldDsKLQotCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiBmcm9tPSUwOHggY2FjaGVkPSUwOHggb2Zmc2V0PSUwOHggIgotCQkJImF2YWlsPSUwOHggY291bnQ9JTA4eFxuIiwgX19mdW5jX18sIF9fTElORV9fLAotCQkJKHVuc2lnbmVkIGludClmcm9tLCBjYWNoZWQsIG9mZnNldCwgYXZhaWwsIGNvdW50KTsKLQotCQlpZiAoYXZhaWwgPiBjb3VudCkKLQkJCWF2YWlsID0gY291bnQ7Ci0JCW1lbWNweShidWYsIHByaXYtPnhkcl9idWYgKyBjYWNoZWQsIGF2YWlsKTsKLQotCQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCi0JCWJ1ZiArPSBhdmFpbDsKLQkJY291bnQgLT0gYXZhaWw7Ci0JCWZyb20gKz0gYXZhaWw7Ci0JfQotCi0JKnJldGxlbiA9IGxlbjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwczN2cmFtX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQkgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBwczN2cmFtX3ByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0JdW5zaWduZWQgaW50IGNhY2hlZCwgY291bnQ7Ci0KLQlpZiAodG8gPj0gbXRkLT5zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChsZW4gPiBtdGQtPnNpemUgLSB0bykKLQkJbGVuID0gbXRkLT5zaXplIC0gdG87Ci0KLQkvKiBDb3B5IGZyb20gYnVmIHRvIHZyYW0gKi8KLQljb3VudCA9IGxlbjsKLQl3aGlsZSAoY291bnQpIHsKLQkJdW5zaWduZWQgaW50IG9mZnNldCwgYXZhaWw7Ci0JCXVuc2lnbmVkIGludCBlbnRyeTsKLQotCQlvZmZzZXQgPSAodW5zaWduZWQgaW50KSAodG8gJiAocHJpdi0+Y2FjaGUucGFnZV9zaXplIC0gMSkpOwotCQlhdmFpbCAgPSBwcml2LT5jYWNoZS5wYWdlX3NpemUgLSBvZmZzZXQ7Ci0KLQkJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0KLQkJZW50cnkgPSBwczN2cmFtX2NhY2hlX21hdGNoKG10ZCwgdG8pOwotCQljYWNoZWQgPSBDQUNIRV9PRkZTRVQgKyBlbnRyeSAqIHByaXYtPmNhY2hlLnBhZ2Vfc2l6ZSArIG9mZnNldDsKLQotCQlkZXZfZGJnKHByaXYtPmRldiwgIiVzOiVkOiB0bz0lMDh4IGNhY2hlZD0lMDh4IG9mZnNldD0lMDh4ICIKLQkJCSJhdmFpbD0lMDh4IGNvdW50PSUwOHhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKLQkJCSh1bnNpZ25lZCBpbnQpdG8sIGNhY2hlZCwgb2Zmc2V0LCBhdmFpbCwgY291bnQpOwotCi0JCWlmIChhdmFpbCA+IGNvdW50KQotCQkJYXZhaWwgPSBjb3VudDsKLQkJbWVtY3B5KHByaXYtPnhkcl9idWYgKyBjYWNoZWQsIGJ1ZiwgYXZhaWwpOwotCi0JCXByaXYtPmNhY2hlLnRhZ3NbZW50cnldLmZsYWdzIHw9IENBQ0hFX1BBR0VfRElSVFk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQotCQlidWYgKz0gYXZhaWw7Ci0JCWNvdW50IC09IGF2YWlsOwotCQl0byArPSBhdmFpbDsKLQl9Ci0KLQkqcmV0bGVuID0gbGVuOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwczN2cmFtX3Byb2JlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcHMzdnJhbV9wcml2ICpwcml2OwotCWludCBzdGF0dXM7Ci0JdTY0IGRkcl9scGFyOwotCXU2NCBjdHJsX2xwYXI7Ci0JdTY0IGluZm9fbHBhcjsKLQl1NjQgcmVwb3J0c19scGFyOwotCXU2NCBkZHJfc2l6ZTsKLQl1NjQgcmVwb3J0c19zaXplOwotCWludCByZXQgPSAtRU5PTUVNOwotCWNoYXIgKnJlc3Q7Ci0KLQlyZXQgPSAtRUlPOwotCXBzM3ZyYW1fbXRkLnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHMzdnJhbV9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwczN2cmFtX210ZC5wcml2KQotCQlnb3RvIG91dDsKLQlwcml2ID0gcHMzdnJhbV9tdGQucHJpdjsKLQotCW11dGV4X2luaXQoJnByaXYtPmxvY2spOwotCXByaXYtPmRldiA9ICZkZXYtPmNvcmU7Ci0KLQkvKiBBbGxvY2F0ZSBYRFIgYnVmZmVyICgxTWlCIGFsaWduZWQpICovCi0JcHJpdi0+eGRyX2J1ZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAotCQlnZXRfb3JkZXIoWERSX0JVRl9TSVpFKSk7Ci0JaWYgKHByaXYtPnhkcl9idWYgPT0gTlVMTCkgewotCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogY291bGQgbm90IGFsbG9jYXRlIFhEUiBidWZmZXJcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3ByaXY7Ci0JfQotCi0JLyogUHV0IEZJRk8gYXQgYmVnZ2lubmluZyBvZiBYRFIgYnVmZmVyICovCi0JcHJpdi0+Zmlmb19iYXNlID0gKHUzMiAqKSAocHJpdi0+eGRyX2J1ZiArIEZJRk9fT0ZGU0VUKTsKLQlwcml2LT5maWZvX3B0ciA9IHByaXYtPmZpZm9fYmFzZTsKLQotCS8qIFhYWDogTmVlZCB0byBvcGVuIEdQVSwgaW4gY2FzZSBwczNmYiBvciBzbmRfcHMzIGFyZW4ndCBsb2FkZWQgKi8KLQlpZiAocHMzX29wZW5faHZfZGV2aWNlKGRldikpIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IHBzM19vcGVuX2h2X2RldmljZSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIG91dF9jbG9zZV9ncHU7Ci0JfQotCi0JLyogUmVxdWVzdCBtZW1vcnkgKi8KLQlzdGF0dXMgPSAtMTsKLQlkZHJfc2l6ZSA9IG1lbXBhcnNlKHNpemUsICZyZXN0KTsKLQlpZiAoKnJlc3QgPT0gJy0nKQotCQlkZHJfc2l6ZSAtPSBwczNmYl92aWRlb21lbW9yeS5zaXplOwotCWRkcl9zaXplID0gQUxJR04oZGRyX3NpemUsIDEwMjQqMTAyNCk7Ci0JaWYgKGRkcl9zaXplIDw9IDApIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IHNwZWNpZmllZCBzaXplIGlzIHRvbyBzbWFsbFxuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2Nsb3NlX2dwdTsKLQl9Ci0KLQl3aGlsZSAoZGRyX3NpemUgPiAwKSB7Ci0JCXN0YXR1cyA9IGx2MV9ncHVfbWVtb3J5X2FsbG9jYXRlKGRkcl9zaXplLCAwLCAwLCAwLCAwLAotCQkJCQkJICZwcml2LT5tZW1vcnlfaGFuZGxlLAotCQkJCQkJICZkZHJfbHBhcik7Ci0JCWlmICghc3RhdHVzKQotCQkJYnJlYWs7Ci0JCWRkcl9zaXplIC09IDEwMjQqMTAyNDsKLQl9Ci0JaWYgKHN0YXR1cyB8fCBkZHJfc2l6ZSA8PSAwKSB7Ci0JCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzOiVkOiBsdjFfZ3B1X21lbW9yeV9hbGxvY2F0ZSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3hkcl9idWY7Ci0JfQotCi0JLyogUmVxdWVzdCBjb250ZXh0ICovCi0Jc3RhdHVzID0gbHYxX2dwdV9jb250ZXh0X2FsbG9jYXRlKHByaXYtPm1lbW9yeV9oYW5kbGUsCi0JCQkJCSAgMCwKLQkJCQkJICAmcHJpdi0+Y29udGV4dF9oYW5kbGUsCi0JCQkJCSAgJmN0cmxfbHBhciwKLQkJCQkJICAmaW5mb19scGFyLAotCQkJCQkgICZyZXBvcnRzX2xwYXIsCi0JCQkJCSAgJnJlcG9ydHNfc2l6ZSk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogbHYxX2dwdV9jb250ZXh0X2FsbG9jYXRlIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWVfbWVtb3J5OwotCX0KLQotCS8qIE1hcCBYRFIgYnVmZmVyIHRvIFJTWCAqLwotCXN0YXR1cyA9IGx2MV9ncHVfY29udGV4dF9pb21hcChwcml2LT5jb250ZXh0X2hhbmRsZSwgWERSX0lPSUYsCi0JCQkJICAgICAgIHBzM19tbV9waHlzX3RvX2xwYXIoX19wYShwcml2LT54ZHJfYnVmKSksCi0JCQkJICAgICAgIFhEUl9CVUZfU0laRSwgMCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogbHYxX2dwdV9jb250ZXh0X2lvbWFwIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWVfY29udGV4dDsKLQl9Ci0KLQlwcml2LT5kZHJfYmFzZSA9IGlvcmVtYXBfZmxhZ3MoZGRyX2xwYXIsIGRkcl9zaXplLCBfUEFHRV9OT19DQUNIRSk7Ci0KLQlpZiAoIXByaXYtPmRkcl9iYXNlKSB7Ci0JCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzOiVkOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19mdW5jX18sCi0JCQlfX0xJTkVfXyk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWVfY29udGV4dDsKLQl9Ci0KLQlwcml2LT5jdHJsID0gaW9yZW1hcChjdHJsX2xwYXIsIDY0ICogMTAyNCk7Ci0JaWYgKCFwcml2LT5jdHJsKSB7Ci0JCWRldl9lcnIoJmRldi0+Y29yZSwgIiVzOiVkOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19mdW5jX18sCi0JCQlfX0xJTkVfXyk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VubWFwX3ZyYW07Ci0JfQotCi0JcHJpdi0+cmVwb3J0cyA9IGlvcmVtYXAocmVwb3J0c19scGFyLCByZXBvcnRzX3NpemUpOwotCWlmICghcHJpdi0+cmVwb3J0cykgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogaW9yZW1hcCBmYWlsZWRcbiIsIF9fZnVuY19fLAotCQkJX19MSU5FX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF91bm1hcF9jdHJsOwotCX0KLQotCW11dGV4X2xvY2soJnBzM19ncHVfbXV0ZXgpOwotCXBzM3ZyYW1faW5pdF9yaW5nKCZwczN2cmFtX210ZCk7Ci0JbXV0ZXhfdW5sb2NrKCZwczNfZ3B1X211dGV4KTsKLQotCXBzM3ZyYW1fbXRkLm5hbWUgPSAicHMzdnJhbSI7Ci0JcHMzdnJhbV9tdGQuc2l6ZSA9IGRkcl9zaXplOwotCXBzM3ZyYW1fbXRkLmZsYWdzID0gTVREX0NBUF9SQU07Ci0JcHMzdnJhbV9tdGQuZXJhc2UgPSBwczN2cmFtX2VyYXNlOwotCXBzM3ZyYW1fbXRkLnBvaW50ID0gTlVMTDsKLQlwczN2cmFtX210ZC51bnBvaW50ID0gTlVMTDsKLQlwczN2cmFtX210ZC5yZWFkID0gcHMzdnJhbV9yZWFkOwotCXBzM3ZyYW1fbXRkLndyaXRlID0gcHMzdnJhbV93cml0ZTsKLQlwczN2cmFtX210ZC5vd25lciA9IFRISVNfTU9EVUxFOwotCXBzM3ZyYW1fbXRkLnR5cGUgPSBNVERfUkFNOwotCXBzM3ZyYW1fbXRkLmVyYXNlc2l6ZSA9IENBQ0hFX1BBR0VfU0laRTsKLQlwczN2cmFtX210ZC53cml0ZXNpemUgPSAxOwotCi0JcHMzdnJhbV9iaW5kKCZwczN2cmFtX210ZCk7Ci0KLQltdXRleF9sb2NrKCZwczNfZ3B1X211dGV4KTsKLQlyZXQgPSBwczN2cmFtX3dhaXRfcmluZygmcHMzdnJhbV9tdGQsIDEwMCk7Ci0JbXV0ZXhfdW5sb2NrKCZwczNfZ3B1X211dGV4KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZkZXYtPmNvcmUsICIlczolZDogZmFpbGVkIHRvIGluaXRpYWxpemUgY2hhbm5lbHNcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQlyZXQgPSAtRVRJTUVET1VUOwotCQlnb3RvIG91dF91bm1hcF9yZXBvcnRzOwotCX0KLQotCXBzM3ZyYW1fY2FjaGVfaW5pdCgmcHMzdnJhbV9tdGQpOwotCi0JaWYgKGFkZF9tdGRfZGV2aWNlKCZwczN2cmFtX210ZCkpIHsKLQkJZGV2X2VycigmZGV2LT5jb3JlLCAiJXM6JWQ6IGFkZF9tdGRfZGV2aWNlIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0X2NhY2hlX2NsZWFudXA7Ci0JfQotCi0JZGV2X2luZm8oJmRldi0+Y29yZSwgInJlc2VydmVkICV1IE1pQiBvZiBncHUgbWVtb3J5XG4iLAotCQkodW5zaWduZWQgaW50KShkZHJfc2l6ZSAvIDEwMjQgLyAxMDI0KSk7Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2NhY2hlX2NsZWFudXA6Ci0JcHMzdnJhbV9jYWNoZV9jbGVhbnVwKCZwczN2cmFtX210ZCk7Ci1vdXRfdW5tYXBfcmVwb3J0czoKLQlpb3VubWFwKHByaXYtPnJlcG9ydHMpOwotb3V0X3VubWFwX2N0cmw6Ci0JaW91bm1hcChwcml2LT5jdHJsKTsKLW91dF91bm1hcF92cmFtOgotCWlvdW5tYXAocHJpdi0+ZGRyX2Jhc2UpOwotb3V0X2ZyZWVfY29udGV4dDoKLQlsdjFfZ3B1X2NvbnRleHRfZnJlZShwcml2LT5jb250ZXh0X2hhbmRsZSk7Ci1vdXRfZnJlZV9tZW1vcnk6Ci0JbHYxX2dwdV9tZW1vcnlfZnJlZShwcml2LT5tZW1vcnlfaGFuZGxlKTsKLW91dF9jbG9zZV9ncHU6Ci0JcHMzX2Nsb3NlX2h2X2RldmljZShkZXYpOwotb3V0X2ZyZWVfeGRyX2J1ZjoKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwcml2LT54ZHJfYnVmLCBnZXRfb3JkZXIoWERSX0JVRl9TSVpFKSk7Ci1vdXRfZnJlZV9wcml2OgotCWtmcmVlKHBzM3ZyYW1fbXRkLnByaXYpOwotCXBzM3ZyYW1fbXRkLnByaXYgPSBOVUxMOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcHMzdnJhbV9zaHV0ZG93bihzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBzM3ZyYW1fcHJpdiAqcHJpdjsKLQotCXByaXYgPSBwczN2cmFtX210ZC5wcml2OwotCi0JZGVsX210ZF9kZXZpY2UoJnBzM3ZyYW1fbXRkKTsKLQlwczN2cmFtX2NhY2hlX2NsZWFudXAoJnBzM3ZyYW1fbXRkKTsKLQlpb3VubWFwKHByaXYtPnJlcG9ydHMpOwotCWlvdW5tYXAocHJpdi0+Y3RybCk7Ci0JaW91bm1hcChwcml2LT5kZHJfYmFzZSk7Ci0JbHYxX2dwdV9jb250ZXh0X2ZyZWUocHJpdi0+Y29udGV4dF9oYW5kbGUpOwotCWx2MV9ncHVfbWVtb3J5X2ZyZWUocHJpdi0+bWVtb3J5X2hhbmRsZSk7Ci0JcHMzX2Nsb3NlX2h2X2RldmljZShkZXYpOwotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHByaXYtPnhkcl9idWYsIGdldF9vcmRlcihYRFJfQlVGX1NJWkUpKTsKLQlrZnJlZShwcml2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwczNfc3lzdGVtX2J1c19kcml2ZXIgcHMzdnJhbV9kcml2ZXIgPSB7Ci0JLm1hdGNoX2lkCT0gUFMzX01BVENIX0lEX0dQVSwKLQkubWF0Y2hfc3ViX2lkCT0gUFMzX01BVENIX1NVQl9JRF9HUFVfUkFNRElTSywKLQkuY29yZS5uYW1lCT0gREVWSUNFX05BTUUsCi0JLmNvcmUub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gcHMzdnJhbV9wcm9iZSwKLQkucmVtb3ZlCQk9IHBzM3ZyYW1fc2h1dGRvd24sCi0JLnNodXRkb3duCT0gcHMzdnJhbV9zaHV0ZG93biwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBzM3ZyYW1faW5pdCh2b2lkKQotewotCXJldHVybiBwczNfc3lzdGVtX2J1c19kcml2ZXJfcmVnaXN0ZXIoJnBzM3ZyYW1fZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHBzM3ZyYW1fZXhpdCh2b2lkKQotewotCXBzM19zeXN0ZW1fYnVzX2RyaXZlcl91bnJlZ2lzdGVyKCZwczN2cmFtX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHBzM3ZyYW1faW5pdCk7Ci1tb2R1bGVfZXhpdChwczN2cmFtX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIGRyaXZlciBmb3IgUFMzIHZpZGVvIFJBTSIpOwotTU9EVUxFX0FMSUFTKFBTM19NT0RVTEVfQUxJQVNfR1BVX1JBTURJU0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDA0M2Q1MGYuLjcyOWY4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTU1MSw1ICs1NTEsMTUgQEAKIAogCSAgVGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBtYXBfcmFtIGRyaXZlci4KIAotZW5kbWVudQorY29uZmlnIE1URF9WTVUKKwl0cmlzdGF0ZSAiTWFwIGRyaXZlciBmb3IgRHJlYW1jYXN0IFZNVSIKKwlkZXBlbmRzIG9uIE1BUExFCisJaGVscAorCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBhY2Nlc3MgdG8gdGhlIERyZWFtY2FzdCBWaXN1YWwgTWVtb3J5IFVuaXQgKFZNVSkuCiAKKwkgIE1vc3QgRHJlYW1jYXN0IHVzZXJzIHdpbGwgd2FudCB0byBzYXkgWSBoZXJlLgorCisJICBUbyBidWlsZCB0aGlzIGFzIGEgbW9kdWxlIHNlbGVjdCBNIGhlcmUsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKKwkgIHZtdS1mbGFzaC4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggNmQ5YmEzNS4uMjZiMjhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC02MSwzICs2MSw0IEBACiBvYmotJChDT05GSUdfTVREX09NQVBfTk9SKQkrPSBvbWFwX25vci5vCiBvYmotJChDT05GSUdfTVREX0lOVEVMX1ZSX05PUikJKz0gaW50ZWxfdnJfbm9yLm8KIG9iai0kKENPTkZJR19NVERfQkZJTl9BU1lOQykJKz0gYmZpbi1hc3luYy1mbGFzaC5vCitvYmotJChDT05GSUdfTVREX1ZNVSkJCSs9IHZtdS1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwppbmRleCA3NzExMzljLi5lOTAyNmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKQEAgLTQxLDkgKzQxLDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKIAotc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqZmxhc2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm87CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwpAQCAtMTE0LDE1ICsxMTMsMTUgQEAKIAkJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWlmIChpbmZvLT5ucl9wYXJ0cykKQEAgLTE0MSw5ICsxNDAsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfZmxhc2hfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGluZm8tPm10ZCAmJiBpbmZvLT5tdGQtPnN1c3BlbmQpCkBAIC0xNTEsMTcgKzE1MCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mby0+bXRkICYmIGluZm8tPm10ZC0+cmVzdW1lKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgcHhhMnh4X2ZsYXNoX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHB4YTJ4eF9mbGFzaF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvICYmIGluZm8tPm10ZC0+c3VzcGVuZChpbmZvLT5tdGQpID09IDApCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CkBAIC0xNzIsMTEgKzE3MSwxMyBAQAogI2RlZmluZSBweGEyeHhfZmxhc2hfc2h1dGRvd24gTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGEyeHhfZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2ZsYXNoX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAicHhhMnh4LWZsYXNoIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHB4YTJ4eF9mbGFzaF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YTJ4eF9mbGFzaF9yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2ZsYXNoX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBweGEyeHhfZmxhc2hfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF9mbGFzaF9yZXN1bWUsCiAJLnNodXRkb3duCT0gcHhhMnh4X2ZsYXNoX3NodXRkb3duLApAQCAtMTg0LDEyICsxODUsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9weGEyeHhfZmxhc2godm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcHhhMnh4X2ZsYXNoKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9weGEyeHhfZmxhc2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3MzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMKQEAgLTAsMCArMSw4MzIgQEAKKy8qIHZtdS1mbGFzaC5jCisgKiBEcml2ZXIgZm9yIFNFR0EgRHJlYW1jYXN0IFZpc3VhbCBNZW1vcnkgVW5pdAorICoKKyAqIENvcHlyaWdodCAoYykgQWRyaWFuIE1jTWVuYW1pbiAyMDAyIC0gMjAwOQorICogQ29weXJpZ2h0IChjKSBQYXVsIE11bmR0IDIwMDEKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXBsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisKK3N0cnVjdCB2bXVfY2FjaGUgeworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsJCS8qIENhY2hlICovCisJdW5zaWduZWQgaW50IGJsb2NrOwkJLyogV2hpY2ggYmxvY2sgd2FzIGNhY2hlZCAqLworCXVuc2lnbmVkIGxvbmcgamlmZmllc19hdGM7CS8qIFdoZW4gd2FzIGl0IGNhY2hlZD8gKi8KKwlpbnQgdmFsaWQ7Cit9OworCitzdHJ1Y3QgbWRldl9wYXJ0IHsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCWludCBwYXJ0aXRpb247Cit9OworCitzdHJ1Y3Qgdm11cGFydCB7CisJdTE2IHVzZXJfYmxvY2tzOworCXUxNiByb290X2Jsb2NrOworCXUxNiBudW1ibG9ja3M7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7Cit9OworCitzdHJ1Y3QgbWVtY2FyZCB7CisJdTE2IHRlbXBBOworCXUxNiB0ZW1wQjsKKwl1MzIgcGFydGl0aW9uczsKKwl1MzIgYmxvY2tsZW47CisJdTMyIHdyaXRlY250OworCXUzMiByZWFkY250OworCXUzMiByZW1vdmVhYmxlOworCWludCBwYXJ0aXRpb247CisJaW50IHJlYWQ7CisJdW5zaWduZWQgY2hhciAqYmxvY2tyZWFkOworCXN0cnVjdCB2bXVwYXJ0ICpwYXJ0czsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKK307CisKK3N0cnVjdCB2bXVfYmxvY2sgeworCXVuc2lnbmVkIGludCBudW07IC8qIGJsb2NrIG51bWJlciAqLworCXVuc2lnbmVkIGludCBvZnM7IC8qIGJsb2NrIG9mZnNldCAqLworfTsKKworc3RhdGljIHN0cnVjdCB2bXVfYmxvY2sgKm9mc190b19ibG9jayh1bnNpZ25lZCBsb25nIHNyY19vZnMsCisJc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYXJ0aXRpb24pCit7CisJc3RydWN0IHZtdV9ibG9jayAqdmJsb2NrOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJaW50IG51bTsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwlpZiAoc3JjX29mcyA+PSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuKQorCQlnb3RvIGZhaWxlZDsKKworCW51bSA9IHNyY19vZnMgLyBjYXJkLT5ibG9ja2xlbjsKKwlpZiAobnVtID4gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5udW1ibG9ja3MpCisJCWdvdG8gZmFpbGVkOworCisJdmJsb2NrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtdV9ibG9jayksIEdGUF9LRVJORUwpOworCWlmICghdmJsb2NrKQorCQlnb3RvIGZhaWxlZDsKKworCXZibG9jay0+bnVtID0gbnVtOworCXZibG9jay0+b2ZzID0gc3JjX29mcyAlIGNhcmQtPmJsb2NrbGVuOworCXJldHVybiB2YmxvY2s7CisKK2ZhaWxlZDoKKwlyZXR1cm4gTlVMTDsKK30KKworLyogTWFwbGUgYnVzIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciByZWFkcyAqLworc3RhdGljIHZvaWQgdm11X2Jsb2NrcmVhZChzdHJ1Y3QgbWFwbGVxICptcSkKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCisJbWRldiA9IG1xLT5kZXY7CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCS8qIGNvcHkgdGhlIHJlYWQgaW4gZGF0YSAqLworCisJaWYgKHVubGlrZWx5KCFjYXJkLT5ibG9ja3JlYWQpKQorCQlyZXR1cm47CisKKwltZW1jcHkoY2FyZC0+YmxvY2tyZWFkLCBtcS0+cmVjdmJ1Zi0+YnVmICsgMTIsCisJCWNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpOworCit9CisKKy8qIEludGVyZmFjZSB3aXRoIG1hcGxlIGJ1cyB0byByZWFkIGJsb2NrcworICogY2FjaGluZyB0aGUgcmVzdWx0cyBzbyB0aGF0IG90aGVyIHBhcnRzCisgKiBvZiB0aGUgZHJpdmVyIGNhbiBhY2Nlc3MgYmxvY2sgcmVhZHMgKi8KK3N0YXRpYyBpbnQgbWFwbGVfdm11X3JlYWRfYmxvY2sodW5zaWduZWQgaW50IG51bSwgdW5zaWduZWQgY2hhciAqYnVmLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJaW50IHBhcnRpdGlvbiwgZXJyb3IgPSAwLCB4LCB3YWl0OworCXVuc2lnbmVkIGNoYXIgKmJsb2NrcmVhZCA9IE5VTEw7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCV9fYmUzMiBzZW5kYnVmOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCXBjYWNoZSA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ucGNhY2hlOworCXBjYWNoZS0+dmFsaWQgPSAwOworCisJLyogcHJlcGFyZSB0aGUgY2FjaGUgZm9yIHRoaXMgYmxvY2sgKi8KKwlpZiAoIXBjYWNoZS0+YnVmZmVyKSB7CisJCXBjYWNoZS0+YnVmZmVyID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGNhY2hlLT5idWZmZXIpIHsKKwkJCWRldl9lcnIoJm1kZXYtPmRldiwgIlZNVSBhdCAoJWQsICVkKSAtIHJlYWQgZmFpbHMgZHVlIgorCQkJCSIgdG8gbGFjayBvZiBtZW1vcnlcbiIsIG1kZXYtPnBvcnQsCisJCQkJbWRldi0+dW5pdCk7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dEI7CisJCX0KKwl9CisKKwkvKgorCSogUmVhZHMgbWF5IGJlIHBoYXNlZCAtIGFnYWluIHRoZSBoYXJkd2FyZSBzcGVjCisJKiBzdXBwb3J0cyB0aGlzIC0gdGhvdWdoIG1heSBub3QgYmUgYW55IGRldmljZXMgaW4KKwkqIHRoZSB3aWxkIHRoYXQgaW1wbGVtZW50IGl0LCBidXQgd2Ugd2lsbCBoZXJlCisJKi8KKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+cmVhZGNudDsgeCsrKSB7CisJCXNlbmRidWYgPSBjcHVfdG9fYmUzMihwYXJ0aXRpb24gPDwgMjQgfCB4IDw8IDE2IHwgbnVtKTsKKworCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaKTsKKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgIlZNVSBhdCAoJWQsICVkKSIKKwkJCQkJIiBpcyBidXN5XG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCQllcnJvciA9IC1FQUdBSU47CisJCQkJZ290byBvdXRCOworCQkJfQorCQl9CisKKwkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCWJsb2NrcmVhZCA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmxvY2tyZWFkKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWdvdG8gb3V0QjsKKwkJfQorCQljYXJkLT5ibG9ja3JlYWQgPSBibG9ja3JlYWQ7CisKKwkJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCB2bXVfYmxvY2tyZWFkLCAwLAorCQkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKwkJZXJyb3IgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJCQlNQVBMRV9DT01NQU5EX0JSRUFELCAyLCAmc2VuZGJ1Zik7CisJCS8qIFZlcnkgbG9uZyB0aW1lb3V0cyBzZWVtIHRvIGJlIG5lZWRlZCB3aGVuIGJveCBpcyBzdHJlc3NlZCAqLworCQl3YWl0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCShhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCB8fAorCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpLCBIWiAqIDMpOworCQkvKgorCQkqIE1URCBsYXllciBkb2VzIG5vdCBoYW5kbGUgaG90cGx1Z2dpbmcgd2VsbAorCQkqIHNvIGhhdmUgdG8gcmV0dXJuIGVycm9ycyB3aGVuIFZNVSBpcyB1bnBsdWdnZWQKKwkJKiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVhZCAoYnVzeSA9PSAyKQorCQkqLworCQlpZiAoZXJyb3IgfHwgYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpIHsKKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMikKKwkJCQllcnJvciA9IC1FTlhJTzsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJY2FyZC0+YmxvY2tyZWFkID0gTlVMTDsKKwkJCWdvdG8gb3V0QTsKKwkJfQorCQlpZiAod2FpdCA9PSAwIHx8IHdhaXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCQljYXJkLT5ibG9ja3JlYWQgPSBOVUxMOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQllcnJvciA9IC1FSU87CisJCQlsaXN0X2RlbF9pbml0KCYobWRldi0+bXEtPmxpc3QpKTsKKwkJCWtmcmVlKG1kZXYtPm1xLT5zZW5kYnVmKTsKKwkJCW1kZXYtPm1xLT5zZW5kYnVmID0gTlVMTDsKKwkJCWlmICh3YWl0ID09IC1FUkVTVEFSVFNZUykgeworCQkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJWTVUgcmVhZCBvbiAoJWQsICVkKSIKKwkJCQkJIiBpbnRlcnJ1cHRlZCBvbiBibG9jayAweCVYXG4iLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBudW0pOworCQkJfSBlbHNlCisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIHJlYWQgb24gKCVkLCAlZCkiCisJCQkJCSIgdGltZWQgb3V0IG9uIGJsb2NrIDB4JVhcbiIsCisJCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIG51bSk7CisJCQlnb3RvIG91dEE7CisJCX0KKworCQltZW1jcHkoYnVmICsgKGNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpICogeCwgYmxvY2tyZWFkLAorCQkJY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCk7CisKKwkJbWVtY3B5KHBjYWNoZS0+YnVmZmVyICsgKGNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpICogeCwKKwkJCWNhcmQtPmJsb2NrcmVhZCwgY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCk7CisJCWNhcmQtPmJsb2NrcmVhZCA9IE5VTEw7CisJCXBjYWNoZS0+YmxvY2sgPSBudW07CisJCXBjYWNoZS0+amlmZmllc19hdGMgPSBqaWZmaWVzOworCQlwY2FjaGUtPnZhbGlkID0gMTsKKwkJa2ZyZWUoYmxvY2tyZWFkKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7CisKK291dEE6CisJa2ZyZWUoYmxvY2tyZWFkKTsKK291dEI6CisJcmV0dXJuIGVycm9yOworfQorCisvKiBjb21tdW5pY2F0ZSB3aXRoIG1hcGxlIGJ1cyBmb3IgcGhhc2VkIHdyaXRpbmcgKi8KK3N0YXRpYyBpbnQgbWFwbGVfdm11X3dyaXRlX2Jsb2NrKHVuc2lnbmVkIGludCBudW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCWludCBwYXJ0aXRpb24sIGVycm9yLCBsb2NraW5nLCB4LCBwaGFzZWxlbiwgd2FpdDsKKwlfX2JlMzIgKnNlbmRidWY7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwlwaGFzZWxlbiA9IGNhcmQtPmJsb2NrbGVuL2NhcmQtPndyaXRlY250OworCisJc2VuZGJ1ZiA9IGttYWxsb2MocGhhc2VsZW4gKyA0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlbmRidWYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9zZW5kYnVmOworCX0KKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+d3JpdGVjbnQ7IHgrKykgeworCQlzZW5kYnVmWzBdID0gY3B1X3RvX2JlMzIocGFydGl0aW9uIDw8IDI0IHwgeCA8PCAxNiB8IG51bSk7CisJCW1lbWNweSgmc2VuZGJ1ZlsxXSwgYnVmICsgcGhhc2VsZW4gKiB4LCBwaGFzZWxlbik7CisJCS8qIHdhaXQgdW50aWwgdGhlIGRldmljZSBpcyBub3QgYnVzeSBkb2luZyBzb21ldGhpbmcgZWxzZQorCQkqIG9yIDEgc2Vjb25kIC0gd2hpY2ggZXZlciBpcyBsb25nZXIgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwLCBIWik7CisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCQllcnJvciA9IC1FQlVTWTsKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgd3JpdGUgYXQgKCVkLCAlZCkiCisJCQkJCSJmYWlsZWQgLSBkZXZpY2UgaXMgYnVzeVxuIiwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJZ290byBmYWlsX25vbG9jazsKKwkJCX0KKwkJfQorCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKworCQlsb2NraW5nID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCBNQVBMRV9GVU5DX01FTUNBUkQsCisJCQlNQVBMRV9DT01NQU5EX0JXUklURSwgcGhhc2VsZW4gLyA0ICsgMiwgc2VuZGJ1Zik7CisJCXdhaXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaLzEwKTsKKwkJaWYgKGxvY2tpbmcpIHsKKwkJCWVycm9yID0gLUVJTzsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJZ290byBmYWlsX25vbG9jazsKKwkJfQorCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpIHsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQl9IGVsc2UgaWYgKHdhaXQgPT0gMCB8fCB3YWl0ID09IC1FUkVTVEFSVFNZUykgeworCQkJZXJyb3IgPSAtRUlPOworCQkJZGV2X3dhcm4oJm1kZXYtPmRldiwgIldyaXRlIGF0ICglZCwgJWQpIG9mIGJsb2NrIgorCQkJCSIgMHglWCBhdCBwaGFzZSAlZCBmYWlsZWQ6IGNvdWxkIG5vdCIKKwkJCQkiIGNvbW11bmljYXRlIHdpdGggVk1VIiwgbWRldi0+cG9ydCwKKwkJCQltZGV2LT51bml0LCBudW0sIHgpOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQlrZnJlZShtZGV2LT5tcS0+c2VuZGJ1Zik7CisJCQltZGV2LT5tcS0+c2VuZGJ1ZiA9IE5VTEw7CisJCQlsaXN0X2RlbF9pbml0KCYobWRldi0+bXEtPmxpc3QpKTsKKwkJCWdvdG8gZmFpbF9ub2xvY2s7CisJCX0KKwl9CisJa2ZyZWUoc2VuZGJ1Zik7CisKKwlyZXR1cm4gY2FyZC0+YmxvY2tsZW47CisKK2ZhaWxfbm9sb2NrOgorCWtmcmVlKHNlbmRidWYpOworZmFpbF9ub3NlbmRidWY6CisJZGV2X2VycigmbWRldi0+ZGV2LCAiVk1VICglZCwgJWQpOiB3cml0ZSBmYWlsZWRcbiIsIG1kZXYtPnBvcnQsCisJCW1kZXYtPnVuaXQpOworCXJldHVybiBlcnJvcjsKK30KKworLyogbXRkIGZ1bmN0aW9uIHRvIHNpbXVsYXRlIHJlYWRpbmcgYnl0ZSBieSBieXRlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciB2bXVfZmxhc2hfcmVhZF9jaGFyKHVuc2lnbmVkIGxvbmcgb2ZzLCBpbnQgKnJldHZhbCwKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwl1bnNpZ25lZCBjaGFyICpidWYsIHJldDsKKwlpbnQgcGFydGl0aW9uLCBlcnJvcjsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwkqcmV0dmFsID0gIDA7CisKKwlidWYgPSBrbWFsbG9jKGNhcmQtPmJsb2NrbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQkqcmV0dmFsID0gMTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJdmJsb2NrID0gb2ZzX3RvX2Jsb2NrKG9mcywgbXRkLCBwYXJ0aXRpb24pOworCWlmICghdmJsb2NrKSB7CisJCSpyZXR2YWwgPSAzOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9idWY7CisJfQorCisJZXJyb3IgPSBtYXBsZV92bXVfcmVhZF9ibG9jayh2YmxvY2stPm51bSwgYnVmLCBtdGQpOworCWlmIChlcnJvcikgeworCQlyZXQgPSBlcnJvcjsKKwkJKnJldHZhbCA9IDI7CisJCWdvdG8gb3V0X3ZibG9jazsKKwl9CisKKwlyZXQgPSBidWZbdmJsb2NrLT5vZnNdOworCitvdXRfdmJsb2NrOgorCWtmcmVlKHZibG9jayk7CitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CitmaW5pc2g6CisJcmV0dXJuIHJldDsKK30KKworLyogbXRkIGhpZ2hlciBvcmRlciBmdW5jdGlvbiB0byByZWFkIGZsYXNoICovCitzdGF0aWMgaW50IHZtdV9mbGFzaF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwlpbnQgaW5kZXggPSAwLCByZXR2YWwsIHBhcnRpdGlvbiwgbGVmdG92ZXIsIG51bWJsb2NrczsKKwl1bnNpZ25lZCBjaGFyIGN4OworCisJaWYgKGxlbiA8IDEpCisJCXJldHVybiAtRUlPOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCisJbnVtYmxvY2tzID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5udW1ibG9ja3M7CisJaWYgKGZyb20gKyBsZW4gPiBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbikKKwkJbGVuID0gbnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4gLSBmcm9tOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU87CisJLyogSGF2ZSB3ZSBjYWNoZWQgdGhpcyBiaXQgYWxyZWFkeT8gKi8KKwlwY2FjaGUgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLnBjYWNoZTsKKwlkbyB7CisJCXZibG9jayA9ICBvZnNfdG9fYmxvY2soZnJvbSArIGluZGV4LCBtdGQsIHBhcnRpdGlvbik7CisJCWlmICghdmJsb2NrKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCS8qIEhhdmUgd2UgY2FjaGVkIHRoaXMgYW5kIGlzIHRoZSBjYWNoZSB2YWxpZCBhbmQgdGltZWx5PyAqLworCQlpZiAocGNhY2hlLT52YWxpZCAmJgorCQkJdGltZV9iZWZvcmUoamlmZmllcywgcGNhY2hlLT5qaWZmaWVzX2F0YyArIEhaKSAmJgorCQkJKHBjYWNoZS0+YmxvY2sgPT0gdmJsb2NrLT5udW0pKSB7CisJCQkvKiB3ZSBoYXZlIGNhY2hlZCBpdCwgc28gZG8gbmVjZXNzYXJ5IGNvcHlpbmcgKi8KKwkJCWxlZnRvdmVyID0gY2FyZC0+YmxvY2tsZW4gLSB2YmxvY2stPm9mczsKKwkJCWlmICh2YmxvY2stPm9mcyArIGxlbiAtIGluZGV4IDwgY2FyZC0+YmxvY2tsZW4pIHsKKwkJCQkvKiBvbmx5IGEgYml0IG9mIHRoaXMgYmxvY2sgdG8gY29weSAqLworCQkJCW1lbWNweShidWYgKyBpbmRleCwKKwkJCQkJcGNhY2hlLT5idWZmZXIgKyB2YmxvY2stPm9mcywKKwkJCQkJbGVuIC0gaW5kZXgpOworCQkJCWluZGV4ID0gbGVuOworCQkJfSBlbHNlIHsKKwkJCQkvKiBvdGhlcndpc2UgY29weSByZW1haW5kZXIgb2Ygd2hvbGUgYmxvY2sgKi8KKwkJCQltZW1jcHkoYnVmICsgaW5kZXgsIHBjYWNoZS0+YnVmZmVyICsKKwkJCQkJdmJsb2NrLT5vZnMsIGxlZnRvdmVyKTsKKwkJCQlpbmRleCArPSBsZWZ0b3ZlcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkqIE5vdCBjYWNoZWQgc28gcmVhZCBvbmUgYnl0ZSAtCisJCQkqIGJ1dCBjYWNoZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sKKwkJCSovCisJCQljeCA9IHZtdV9mbGFzaF9yZWFkX2NoYXIoZnJvbSArIGluZGV4LCAmcmV0dmFsLCBtdGQpOworCQkJaWYgKHJldHZhbCkgeworCQkJCSpyZXRsZW4gPSBpbmRleDsKKwkJCQlrZnJlZSh2YmxvY2spOworCQkJCXJldHVybiBjeDsKKwkJCX0KKwkJCW1lbXNldChidWYgKyBpbmRleCwgY3gsIDEpOworCQkJaW5kZXgrKzsKKwkJfQorCQlrZnJlZSh2YmxvY2spOworCX0gd2hpbGUgKGxlbiA+IGluZGV4KTsKKwkqcmV0bGVuID0gaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXVfZmxhc2hfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlpbnQgaW5kZXggPSAwLCBwYXJ0aXRpb24sIGVycm9yID0gMCwgbnVtYmxvY2tzOworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCisJLyogc2ltcGxlIHNhbml0eSBjaGVja3MgKi8KKwlpZiAobGVuIDwgMSkgeworCQllcnJvciA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwludW1ibG9ja3MgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrczsKKwlpZiAodG8gKyBsZW4gPiBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbikKKwkJbGVuID0gbnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4gLSB0bzsKKwlpZiAobGVuID09IDApIHsKKwkJZXJyb3IgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwl2YmxvY2sgPSBvZnNfdG9fYmxvY2sodG8sIG10ZCwgcGFydGl0aW9uKTsKKwlpZiAoIXZibG9jaykgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCWJ1ZmZlciA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2J1ZmZlcjsKKwl9CisKKwlkbyB7CisJCS8qIFJlYWQgaW4gdGhlIGJsb2NrIHdlIGFyZSB0byB3cml0ZSB0byAqLworCQllcnJvciA9IG1hcGxlX3ZtdV9yZWFkX2Jsb2NrKHZibG9jay0+bnVtLCBidWZmZXIsIG10ZCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZmFpbF9pbzsKKworCQlkbyB7CisJCQlidWZmZXJbdmJsb2NrLT5vZnNdID0gYnVmW2luZGV4XTsKKwkJCXZibG9jay0+b2ZzKys7CisJCQlpbmRleCsrOworCQkJaWYgKGluZGV4ID49IGxlbikKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAodmJsb2NrLT5vZnMgPCBjYXJkLT5ibG9ja2xlbik7CisKKwkJLyogd3JpdGUgb3V0IG5ldyBidWZmZXIgKi8KKwkJZXJyb3IgPSBtYXBsZV92bXVfd3JpdGVfYmxvY2sodmJsb2NrLT5udW0sIGJ1ZmZlciwgbXRkKTsKKwkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGUgKi8KKwkJcGNhY2hlID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5wY2FjaGU7CisJCXBjYWNoZS0+dmFsaWQgPSAwOworCisJCWlmIChlcnJvciAhPSBjYXJkLT5ibG9ja2xlbikKKwkJCWdvdG8gZmFpbF9pbzsKKworCQl2YmxvY2stPm51bSsrOworCQl2YmxvY2stPm9mcyA9IDA7CisJfSB3aGlsZSAobGVuID4gaW5kZXgpOworCisJa2ZyZWUoYnVmZmVyKTsKKwkqcmV0bGVuID0gaW5kZXg7CisJa2ZyZWUodmJsb2NrKTsKKwlyZXR1cm4gMDsKKworZmFpbF9pbzoKKwlrZnJlZShidWZmZXIpOworZmFpbF9idWZmZXI6CisJa2ZyZWUodmJsb2NrKTsKK2ZhaWxlZDoKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJWTVUgd3JpdGUgZmFpbGluZyB3aXRoIGVycm9yICVkXG4iLCBlcnJvcik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCB2bXVfZmxhc2hfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwkvKiBEbyBub3RoaW5nIGhlcmUgKi8KK30KKworLyogTWFwbGUgYnVzIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlY3Vyc2l2ZWx5IHF1ZXJ5IGhhcmR3YXJlIGRldGFpbHMgKi8KK3N0YXRpYyB2b2lkIHZtdV9xdWVyeWJsb2NrcyhzdHJ1Y3QgbWFwbGVxICptcSkKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXVuc2lnbmVkIHNob3J0ICpyZXM7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJX19iZTMyIHBhcnRudW07CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtdGRfaW5mbyAqbXRkX2N1cjsKKwlzdHJ1Y3Qgdm11cGFydCAqcGFydF9jdXI7CisJaW50IGVycm9yOworCisJbWRldiA9IG1xLT5kZXY7CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCXJlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSAobXEtPnJlY3ZidWYtPmJ1Zik7CisJY2FyZC0+dGVtcEEgPSByZXNbMTJdOworCWNhcmQtPnRlbXBCID0gcmVzWzZdOworCisJZGV2X2luZm8oJm1kZXYtPmRldiwgIlZNVSBkZXZpY2UgYXQgcGFydGl0aW9uICVkIGhhcyAlZCB1c2VyICIKKwkJImJsb2NrcyB3aXRoIGEgcm9vdCBibG9jayBhdCAlZFxuIiwgY2FyZC0+cGFydGl0aW9uLAorCQljYXJkLT50ZW1wQSwgY2FyZC0+dGVtcEIpOworCisJcGFydF9jdXIgPSAmY2FyZC0+cGFydHNbY2FyZC0+cGFydGl0aW9uXTsKKwlwYXJ0X2N1ci0+dXNlcl9ibG9ja3MgPSBjYXJkLT50ZW1wQTsKKwlwYXJ0X2N1ci0+cm9vdF9ibG9jayA9IGNhcmQtPnRlbXBCOworCXBhcnRfY3VyLT5udW1ibG9ja3MgPSBjYXJkLT50ZW1wQiArIDE7CisJcGFydF9jdXItPm5hbWUgPSBrbWFsbG9jKDEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRfY3VyLT5uYW1lKQorCQlnb3RvIGZhaWxfbmFtZTsKKworCXNwcmludGYocGFydF9jdXItPm5hbWUsICJ2bXUlZC4lZC4lZCIsCisJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGNhcmQtPnBhcnRpdGlvbik7CisJbXRkX2N1ciA9ICZjYXJkLT5tdGRbY2FyZC0+cGFydGl0aW9uXTsKKwltdGRfY3VyLT5uYW1lID0gcGFydF9jdXItPm5hbWU7CisJbXRkX2N1ci0+dHlwZSA9IDg7CisJbXRkX2N1ci0+ZmxhZ3MgPSBNVERfV1JJVEVBQkxFfE1URF9OT19FUkFTRTsKKwltdGRfY3VyLT5zaXplID0gcGFydF9jdXItPm51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuOworCW10ZF9jdXItPmVyYXNlc2l6ZSA9IGNhcmQtPmJsb2NrbGVuOworCW10ZF9jdXItPndyaXRlID0gdm11X2ZsYXNoX3dyaXRlOworCW10ZF9jdXItPnJlYWQgPSB2bXVfZmxhc2hfcmVhZDsKKwltdGRfY3VyLT5zeW5jID0gdm11X2ZsYXNoX3N5bmM7CisJbXRkX2N1ci0+d3JpdGVzaXplID0gY2FyZC0+YmxvY2tsZW47CisKKwltcGFydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZGV2X3BhcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1wYXJ0KQorCQlnb3RvIGZhaWxfbXBhcnQ7CisKKwltcGFydC0+bWRldiA9IG1kZXY7CisJbXBhcnQtPnBhcnRpdGlvbiA9IGNhcmQtPnBhcnRpdGlvbjsKKwltdGRfY3VyLT5wcml2ID0gbXBhcnQ7CisJbXRkX2N1ci0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCXBjYWNoZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bXVfY2FjaGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjYWNoZSkKKwkJZ290byBmYWlsX2NhY2hlX2NyZWF0ZTsKKwlwYXJ0X2N1ci0+cGNhY2hlID0gcGNhY2hlOworCisJZXJyb3IgPSBhZGRfbXRkX2RldmljZShtdGRfY3VyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9tdGRfcmVnaXN0ZXI7CisKKwltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIE5VTEwsIDAsCisJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisKKwkvKgorCSogU2V0IHVwIGEgcmVjdXJzaXZlIGNhbGwgdG8gdGhlIChwcm9iYWJseSB0aGVvcmV0aWNhbCkKKwkqIHNlY29uZCBvciBtb3JlIHBhcnRpdGlvbgorCSovCisJaWYgKCsrY2FyZC0+cGFydGl0aW9uIDwgY2FyZC0+cGFydGl0aW9ucykgeworCQlwYXJ0bnVtID0gY3B1X3RvX2JlMzIoY2FyZC0+cGFydGl0aW9uIDw8IDI0KTsKKwkJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCB2bXVfcXVlcnlibG9ja3MsIDAsCisJCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCQltYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sIDIsICZwYXJ0bnVtKTsKKwl9CisJcmV0dXJuOworCitmYWlsX210ZF9yZWdpc3RlcjoKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgbWFwbGUgZGV2aWNlIGF0ICglZCwgJWQpIgorCQkiZXJyb3IgaXMgMHglWFxuIiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgZXJyb3IpOworCWZvciAoZXJyb3IgPSAwOyBlcnJvciA8PSBjYXJkLT5wYXJ0aXRpb247IGVycm9yKyspIHsKKwkJa2ZyZWUoKChjYXJkLT5wYXJ0cylbZXJyb3JdKS5wY2FjaGUpOworCQkoKGNhcmQtPnBhcnRzKVtlcnJvcl0pLnBjYWNoZSA9IE5VTEw7CisJfQorZmFpbF9jYWNoZV9jcmVhdGU6CitmYWlsX21wYXJ0OgorCWZvciAoZXJyb3IgPSAwOyBlcnJvciA8PSBjYXJkLT5wYXJ0aXRpb247IGVycm9yKyspIHsKKwkJa2ZyZWUoKChjYXJkLT5tdGQpW2Vycm9yXSkucHJpdik7CisJCSgoY2FyZC0+bXRkKVtlcnJvcl0pLnByaXYgPSBOVUxMOworCX0KKwltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIE5VTEwsIDAsCisJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisJa2ZyZWUocGFydF9jdXItPm5hbWUpOworZmFpbF9uYW1lOgorCXJldHVybjsKK30KKworLyogSGFuZGxlcyB2ZXJ5IGJhc2ljIGluZm8gYWJvdXQgdGhlIGZsYXNoLCBxdWVyaWVzIGZvciBkZXRhaWxzICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2bXVfY29ubmVjdChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQoreworCXVuc2lnbmVkIGxvbmcgdGVzdF9mbGFzaF9kYXRhLCBiYXNpY19mbGFzaF9kYXRhOworCWludCBjLCBlcnJvcjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwl1MzIgcGFydG51bSA9IDA7CisKKwl0ZXN0X2ZsYXNoX2RhdGEgPSBiZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKTsKKwkvKiBOZWVkIHRvIGNvdW50IGhvdyBtYW55IGJpdHMgYXJlIHNldCAtIHRvIGZpbmQgb3V0IHdoaWNoCisJICogZnVuY3Rpb25fZGF0YSBlbGVtZW50IGhhcyBkZXRhaWxzIG9mIHRoZSBtZW1vcnkgY2FyZDoKKwkgKiB1c2luZyBCcmlhbiBLZXJuaWdoYW4ncy9QZXRlciBXZWduZXIncyBtZXRob2QgKi8KKwlmb3IgKGMgPSAwOyB0ZXN0X2ZsYXNoX2RhdGE7IGMrKykKKwkJdGVzdF9mbGFzaF9kYXRhICY9IHRlc3RfZmxhc2hfZGF0YSAtIDE7CisKKwliYXNpY19mbGFzaF9kYXRhID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbl9kYXRhW2MgLSAxXSk7CisKKwljYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lbWNhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJZXJyb3IgPSBFTk9NRU07CisJCWdvdG8gZmFpbF9ub21lbTsKKwl9CisKKwljYXJkLT5wYXJ0aXRpb25zID0gKGJhc2ljX2ZsYXNoX2RhdGEgPj4gMjQgJiAweEZGKSArIDE7CisJY2FyZC0+YmxvY2tsZW4gPSAoKGJhc2ljX2ZsYXNoX2RhdGEgPj4gMTYgJiAweEZGKSArIDEpIDw8IDU7CisJY2FyZC0+d3JpdGVjbnQgPSBiYXNpY19mbGFzaF9kYXRhID4+IDEyICYgMHhGOworCWNhcmQtPnJlYWRjbnQgPSBiYXNpY19mbGFzaF9kYXRhID4+IDggJiAweEY7CisJY2FyZC0+cmVtb3ZlYWJsZSA9IGJhc2ljX2ZsYXNoX2RhdGEgPj4gNyAmIDE7CisKKwljYXJkLT5wYXJ0aXRpb24gPSAwOworCisJLyoKKwkqIE5vdCBzdXJlIHRoZXJlIGFyZSBhY3R1YWxseSBhbnkgbXVsdGktcGFydGl0aW9uIGRldmljZXMgaW4gdGhlCisJKiByZWFsIHdvcmxkLCBidXQgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIHRoZW0sIHNvLCBzbyB3aWxsIHdlCisJKi8KKwljYXJkLT5wYXJ0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bXVwYXJ0KSAqIGNhcmQtPnBhcnRpdGlvbnMsCisJCUdGUF9LRVJORUwpOworCWlmICghY2FyZC0+cGFydHMpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfcGFydGl0aW9uczsKKwl9CisKKwljYXJkLT5tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICogY2FyZC0+cGFydGl0aW9ucywKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5tdGQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbXRkX2luZm87CisJfQorCisJbWFwbGVfc2V0X2RydmRhdGEobWRldiwgY2FyZCk7CisKKwkvKgorCSogV2Ugd2FudCB0byB0cmFwIG1lbWluZm8gbm90IGdldCBjb25kCisJKiBzbyBzZXQgaW50ZXJ2YWwgdG8gemVybywgYnV0IHJlbHkgb24gbWFwbGUgYnVzCisJKiBkcml2ZXIgdG8gcGFzcyBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBtZW1pbmZvCisJKi8KKwltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIHZtdV9xdWVyeWJsb2NrcywgMCwKKwkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgY2xlYXIgdG8gZ28gKi8KKwlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwLCBIWik7CisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIGF0ICglZCwgJWQpIGlzIGJ1c3lcbiIsCisJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQllcnJvciA9IC1FQUdBSU47CisJCQlnb3RvIGZhaWxfZGV2aWNlX2J1c3k7CisJCX0KKwl9CisKKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKworCS8qCisJKiBTZXQgdXAgdGhlIG1pbmZvIGNhbGw6IHZtdV9xdWVyeWJsb2NrcyB3aWxsIGhhbmRsZQorCSogdGhlIGluZm9ybWF0aW9uIHBhc3NlZCBiYWNrCisJKi8KKwllcnJvciA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQlNQVBMRV9DT01NQU5EX0dFVE1JTkZPLCAyLCAmcGFydG51bSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJm1kZXYtPmRldiwgIkNvdWxkIG5vdCBsb2NrIFZNVSBhdCAoJWQsICVkKSIKKwkJCSIgZXJyb3IgaXMgMHglWFxuIiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgZXJyb3IpOworCQlnb3RvIGZhaWxfbXRkX2luZm87CisJfQorCXJldHVybiAwOworCitmYWlsX2RldmljZV9idXN5OgorCWtmcmVlKGNhcmQtPm10ZCk7CitmYWlsX210ZF9pbmZvOgorCWtmcmVlKGNhcmQtPnBhcnRzKTsKK2ZhaWxfcGFydGl0aW9uczoKKwlrZnJlZShjYXJkKTsKK2ZhaWxfbm9tZW06CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdm11X2Rpc2Nvbm5lY3Qoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlpbnQgeDsKKworCW1kZXYtPmNhbGxiYWNrID0gTlVMTDsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJZm9yICh4ID0gMDsgeCA8IGNhcmQtPnBhcnRpdGlvbnM7IHgrKykgeworCQltcGFydCA9ICgoY2FyZC0+bXRkKVt4XSkucHJpdjsKKwkJbXBhcnQtPm1kZXYgPSBOVUxMOworCQlkZWxfbXRkX2RldmljZSgmKChjYXJkLT5tdGQpW3hdKSk7CisJCWtmcmVlKCgoY2FyZC0+cGFydHMpW3hdKS5uYW1lKTsKKwl9CisJa2ZyZWUoY2FyZC0+cGFydHMpOworCWtmcmVlKGNhcmQtPm10ZCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKKy8qIENhbGxiYWNrIHRvIGhhbmRsZSBlY2NlbnRyaWNpdGllcyBvZiBib3RoIG10ZCBzdWJzeXN0ZW0KKyAqIGFuZCBnZW5lcmFsIGZsYWt5bmVzcyBvZiBEcmVhbWNhc3QgVk1VcworICovCitzdGF0aWMgaW50IHZtdV9jYW5fdW5sb2FkKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCit7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJaW50IHg7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJZm9yICh4ID0gMDsgeCA8IGNhcmQtPnBhcnRpdGlvbnM7IHgrKykgeworCQltdGQgPSAmKChjYXJkLT5tdGQpW3hdKTsKKwkJaWYgKG10ZC0+dXNlY291bnQgPiAwKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisjZGVmaW5lIEVSUlNUUiAiVk1VIGF0ICglZCwgJWQpIGZpbGUgZXJyb3IgLSIKKworc3RhdGljIHZvaWQgdm11X2ZpbGVfZXJyb3Ioc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1ZikKK3sKKwllbnVtIG1hcGxlX2ZpbGVfZXJyb3JzIGVycm9yID0gKChpbnQgKilyZWN2YnVmKVsxXTsKKworCXN3aXRjaCAoZXJyb3IpIHsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9JTlZBTElEX1BBUlRJVElPTjoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBpbnZhbGlkIHBhcnRpdGlvbiBudW1iZXJcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfUEhBU0VfRVJST1I6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgcGhhc2UgZXJyb3JcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfSU5WQUxJRF9CTE9DSzoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBpbnZhbGlkIGJsb2NrIG51bWJlclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9XUklURV9FUlJPUjoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiB3cml0ZSBlcnJvclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9JTlZBTElEX1dSSVRFX0xFTkdUSDoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBpbnZhbGlkIHdyaXRlIGxlbmd0aFxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9CQURfQ1JDOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGJhZCBDUkNcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIDB4JVhcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBlcnJvcik7CisJfQorfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2JlX21hcGxlX3ZtdShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCW1kZXYtPmNhbl91bmxvYWQgPSB2bXVfY2FuX3VubG9hZDsKKwltZGV2LT5maWxlZXJyX2hhbmRsZXIgPSB2bXVfZmlsZV9lcnJvcjsKKwltZGV2LT5kcml2ZXIgPSBtZHJ2OworCisJZXJyb3IgPSB2bXVfY29ubmVjdChtZGV2KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCByZW1vdmVfbWFwbGVfdm11KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CisKKwl2bXVfZGlzY29ubmVjdChtZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtYXBsZV9kcml2ZXIgdm11X2ZsYXNoX2RyaXZlciA9IHsKKwkuZnVuY3Rpb24gPQlNQVBMRV9GVU5DX01FTUNBUkQsCisJLmRydiA9IHsKKwkJLm5hbWUgPQkJIkRyZWFtY2FzdF92aXN1YWxfbWVtb3J5IiwKKwkJLnByb2JlID0JcHJvYmVfbWFwbGVfdm11LAorCQkucmVtb3ZlID0gCV9fZGV2ZXhpdF9wKHJlbW92ZV9tYXBsZV92bXUpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2bXVfZmxhc2hfbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbWFwbGVfZHJpdmVyX3JlZ2lzdGVyKCZ2bXVfZmxhc2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZtdV9mbGFzaF9tYXBfZXhpdCh2b2lkKQoreworCW1hcGxlX2RyaXZlcl91bnJlZ2lzdGVyKCZ2bXVfZmxhc2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodm11X2ZsYXNoX21hcF9pbml0KTsKK21vZHVsZV9leGl0KHZtdV9mbGFzaF9tYXBfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbiBNY01lbmFtaW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRmxhc2ggbWFwcGluZyBmb3IgU2VnYSBEcmVhbWNhc3QgdmlzdWFsIG1lbW9yeSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkc3VwZXIuYyBiL2RyaXZlcnMvbXRkL210ZHN1cGVyLmMKaW5kZXggMDBkNDZlMS4uOTIyODVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkc3VwZXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRzdXBlci5jCkBAIC04MSwxMyArODEsMTYgQEAKIAogCS8qIGdvICovCiAJc2ItPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKworCXJldHVybiAwOwogCiAJLyogbmV3IG1vdW50cG9pbnQgZm9yIGFuIGFscmVhZHkgbW91bnRlZCBzdXBlcmJsb2NrICovCiBhbHJlYWR5X21vdW50ZWQ6CiAJREVCVUcoMSwgIk1URFNCOiBEZXZpY2UgJWQgKFwiJXNcIikgaXMgYWxyZWFkeSBtb3VudGVkXG4iLAogCSAgICAgIG10ZC0+aW5kZXgsIG10ZC0+bmFtZSk7Ci0JcmV0ID0gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJcmV0ID0gMDsKIAlnb3RvIG91dF9wdXQ7CiAKIG91dF9lcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCA4YjEyZTZlLi4yZmY4ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0yNzMsNyArMjczLDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0NTNTUzWAogCXRyaXN0YXRlICJOQU5EIHN1cHBvcnQgZm9yIENTNTUzNS9DUzU1MzYgKEFNRCBHZW9kZSBjb21wYW5pb24gY2hpcCkiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgKFg4Nl9QQyB8fCBYODZfR0VORVJJQ0FSQ0gpCisJZGVwZW5kcyBvbiBYODZfMzIKIAloZWxwCiAJICBUaGUgQ1M1NTN4IGNvbXBhbmlvbiBjaGlwcyBmb3IgdGhlIEFNRCBHZW9kZSBwcm9jZXNzb3IKIAkgIGluY2x1ZGUgTkFORCBmbGFzaCBjb250cm9sbGVycyB3aXRoIGJ1aWx0LWluIGhhcmR3YXJlIEVDQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwppbmRleCBjZWQxNGI1Li43MjQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwpAQCAtMTI4LDExICsxMjgsMTEgQEAKICAqIFRoZSBiaW5kaW5nIHRvIHRoZSBtdGQgYW5kIGFsbCBhbGxvY2F0ZWQKICAqIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBleGNpdGVfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHVubGlrZWx5KCF0aGlzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgJXMgd2l0aG91dCBwcml2YXRlIGRhdGEhISIsCkBAIC0xNTksOSArMTU5LDggQEAKICAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQogICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzLgogKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqZHJ2ZGF0YTsJLyogcHJpdmF0ZSBkcml2ZXIgZGF0YSAqLwogCXN0cnVjdCBuYW5kX2NoaXAgKmJvYXJkX2NoaXA7CS8qIHByaXZhdGUgZmxhc2ggY2hpcCBkYXRhICovCiAJc3RydWN0IG10ZF9pbmZvICpib2FyZF9tdGQ7CS8qIG10ZCBpbmZvIGZvciB0aGlzIGJvYXJkICovCkBAIC0xNzUsNyArMTc0LDcgQEAKIAl9CiAKIAkvKiBiaW5kIHByaXZhdGUgZGF0YSBpbnRvIGRyaXZlciAqLwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwogCiAJLyogYWxsb2NhdGUgYW5kIG1hcCB0aGUgcmVzb3VyY2UgKi8KIAlkcnZkYXRhLT5yZWdzID0KQEAgLTIxOSwyMyArMjE4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZXhjaXRlX25hbmQiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZXhjaXRlX25hbmQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUgPSBleGNpdGVfbmFuZF9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9pbml0KHZvaWQpCiB7CiAJcHJfaW5mbygiQmFzbGVyIGVYY2l0ZSBuYW5kIGZsYXNoIGRyaXZlciBWZXJzaW9uICIKIAkJRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4Y2l0ZV9uYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZXhjaXRlX25hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCmluZGV4IDU4MmNmODAuLjg5YmY4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAluZGZjLT5tdGQubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMuJXMiLAotCQkJCSAgIG5kZmMtPm9mZGV2LT5kZXYuYnVzX2lkLCBmbGFzaF9ucC0+bmFtZSk7CisJCQlkZXZfbmFtZSgmbmRmYy0+b2ZkZXYtPmRldiksIGZsYXNoX25wLT5uYW1lKTsKIAlpZiAoIW5kZmMtPm10ZC5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwppbmRleCA1YjY5ZTc3Li4zYTQ5NmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwpAQCAtMzYsMTAgKzM2LDkgQEAKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwCW9uZW5hbmQ7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX29uZW5hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtNDksNyArNDgsNyBAQAogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBkZXYtPmRyaXZlci0+bmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X2ZyZWVfaW5mbzsKIAl9CkBAIC04Miw3ICs4MSw3IEBACiAjZW5kaWYKIAkJZXJyID0gYWRkX210ZF9kZXZpY2UoJmluZm8tPm10ZCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtOTYsMTQgKzk1LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ2VuZXJpY19vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBnZW5lcmljX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5wYXJ0cykKQEAgLTEyMCw5ICsxMTgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGdlbmVyaWNfb25lbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZW5lcmljX29uZW5hbmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gZ2VuZXJpY19vbmVuYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ2VuZXJpY19vbmVuYW5kX3JlbW92ZSksCiB9OwpAQCAtMTMxLDEyICsxMzEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19vbmVuYW5kX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdlbmVyaWNfb25lbmFuZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZ2VuZXJpY19vbmVuYW5kX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuYyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKaW5kZXggM2QxMzE4YS4uMWM1MzQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC0xOTcsNiArMTk3LDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbF9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbDFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVsX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICoJZWwxX3Byb2JlMToKICAqCUBkZXY6IFRoZSBkZXZpY2Ugc3RydWN0dXJlIHRvIHVzZQpAQCAtMzA1LDEyICszMTYsOCBAQAogCSAqCVRoZSBFTDEtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KIAkgKi8KIAotCWRldi0+b3BlbiA9ICZlbF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmVsX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmVsX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwotCWRldi0+c3RvcCA9ICZlbDFfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDMuYyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKaW5kZXggNWI5MWE4NS4uNGYwOGJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDMuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMy5jCkBAIC0zNTMsOSArMzUzLDYgQEAKIAogICAgIGRldi0+bmV0ZGV2X29wcyA9ICZlbDJfbmV0ZGV2X29wczsKICAgICBkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlwX3BvbGw7Ci0jZW5kaWYKIAogICAgIHJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogICAgIGlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNS5jIGIvZHJpdmVycy9uZXQvM2M1MDUuYwppbmRleCBhODEwN2Y5Li4yZGUxYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKQEAgLTEzNTQsNiArMTM1NCwxNyBAQAogCXJldHVybiAwOwkJLyogQmVjYXVzZSBvZiB0aGlzLCB0aGUgbGF5ZXIgYWJvdmUgd2lsbCByZXR1cm4gLUVOT0RFViAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVscF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbHBfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWxwX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzIAkJPSBlbHBfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbHBfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWxwX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlbHBfc2V0X21jX2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNTU4LDEzICsxNTY5LDggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRhcHRlciBjb25maWd1cmF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKLQlkZXYtPm9wZW4gPSBlbHBfb3BlbjsJCQkJLyogbG9jYWwgKi8KLQlkZXYtPnN0b3AgPSBlbHBfY2xvc2U7CQkJCS8qIGxvY2FsICovCi0JZGV2LT5nZXRfc3RhdHMgPSBlbHBfZ2V0X3N0YXRzOwkJCS8qIGxvY2FsICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlbHBfc3RhcnRfeG1pdDsJCS8qIGxvY2FsICovCi0JZGV2LT50eF90aW1lb3V0ID0gZWxwX3RpbWVvdXQ7CQkJLyogbG9jYWwgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmZWxwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZWxwX3NldF9tY19saXN0OwkvKiBsb2NhbCAqLwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwkJLyogbG9jYWwgKi8KIAogCWRldi0+bWVtX3N0YXJ0ID0gZGV2LT5tZW1fZW5kID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA3LmMgYi9kcml2ZXJzL25ldC8zYzUwNy5jCmluZGV4IDQyM2U2NWQuLmZiYmFmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDcuYwpAQCAtMzUyLDYgKzM1MiwxNiBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZWwxNl9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbDE2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbDE2X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDE2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGVsMTZfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5pdF9JRF9kb25lLCB2ZXJzaW9uX3ByaW50ZWQ7CkBAIC00NDksMTAgKzQ1OSw3IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLSAJZGV2LT5vcGVuID0gZWwxNl9vcGVuOwotIAlkZXYtPnN0b3AgPSBlbDE2X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZWwxNl9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDE2X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAgCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CS8qIE11bHRpY2FzdCBkb2Vzbid0IHdvcmsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IDhjNjk0MjEuLmZiYjM3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtNTM3LDYgKzUzNywyMSBAQAogc3RhdGljIGludCBtY2FfcmVnaXN0ZXJlZDsKICNlbmRpZiAvKiBDT05GSUdfTUNBICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcAkgCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cyAJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWwzX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01NTMsMTYgKzU2OCw4IEBACiAJfQogCiAJLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlbDNfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggMzlhYzEyMi4uMTY3YmYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC01NjMsNiArNTYzLDIwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjb3Jrc2NyZXdfb3BlbiwKKwkubmRvX3N0b3AJCT0gY29ya3NjcmV3X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjb3Jrc2NyZXdfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gY29ya3NjcmV3X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gY29ya3NjcmV3X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCisKIHN0YXRpYyBpbnQgY29ya3NjcmV3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIsCiAJCQkgICAgc3RydWN0IHBucF9kZXYgKmlkZXYsIGludCBjYXJkX251bWJlcikKIHsKQEAgLTY4MSwxMyArNjk1LDggQEAKIAl2cC0+ZnVsbF9idXNfbWFzdGVyX3J4ID0gKHZwLT5jYXBhYmlsaXRpZXMgJiAweDIwKSA/IDEgOiAwOwogCiAJLyogVGhlIDNjNTF4LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmNvcmtzY3Jld19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmNvcmtzY3Jld19zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZjb3Jrc2NyZXdfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKDQwMCAqIEhaKSAvIDEwMDA7Ci0JZGV2LT5zdG9wID0gJmNvcmtzY3Jld19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9ICZjb3Jrc2NyZXdfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggZmY0MWUxZi4uOGY3MzRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC00MDMsNiArNDAzLDIwIEBACiAJcmV0dXJuIGxlbjsKIH0JCQkJLyogZWxtY19nZXRpbmZvKCkgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWxtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBlbG1jX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsbWNfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbG1jX3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dAkJPSBlbG1jX3RpbWVvdXQsCisjaWZkZWYgRUxNQ19NVUxUSUNBU1QKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKyNlbmRpZgorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgX19pbml0IGRvX2VsbWNfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTU0NCwxNyArNTU4LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZHdhcmUgYWRkcmVzcyAlcE1cbiIsCiAJICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAKLQlkZXYtPm9wZW4gPSAmZWxtY19vcGVuOwotCWRldi0+c3RvcCA9ICZlbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmVsbWNfZ2V0X3N0YXRzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsbWNfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmVsbWNfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7Ci0jaWZkZWYgRUxNQ19NVUxUSUNBU1QKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0jZWxzZQotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLSNlbmRpZgogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCiAJLyogbm90ZSB0aGF0IHdlIGhhdmVuJ3QgYWN0dWFsbHkgcmVxdWVzdGVkIHRoZSBJUlEgZnJvbSB0aGUga2VybmVsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjcuYyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKaW5kZXggMmRmM2FmMy4uYjYxMDczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuYworKysgYi9kcml2ZXJzL25ldC8zYzUyNy5jCkBAIC0yODgsNiArMjg4LDE4IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbWMzMl9vcGVuLAorCS5uZG9fc3RvcAkJPSBtYzMyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtYzMyX3NlbmRfcGFja2V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG1jMzJfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbWMzMl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG1jMzJfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiBtYzMyX3Byb2JlMQktCUNoZWNrIGEgZ2l2ZW4gc2xvdCBmb3IgYSBib2FyZCBhbmQgdGVzdCB0aGUgY2FyZAogICogQGRldjogIERldmljZSBzdHJ1Y3R1cmUgdG8gZmlsbCBpbgpAQCAtNTE4LDEyICs1MzAsNyBAQAogCXByaW50aygiJXM6IEZpcm13YXJlIFJldiAlZC4gJWQgUlggYnVmZmVycywgJWQgVFggYnVmZmVycy4gQmFzZSBvZiAweCUwOFguXG4iLAogCQlkZXYtPm5hbWUsIGxwLT5leGVjX2JveC0+ZGF0YVsxMl0sIGxwLT5yeF9sZW4sIGxwLT50eF9sZW4sIGxwLT5iYXNlKTsKIAotCWRldi0+b3BlbgkJPSBtYzMyX29wZW47Ci0JZGV2LT5zdG9wCQk9IG1jMzJfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBtYzMyX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzCQk9IG1jMzJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbWMzMl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG1jMzJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaKjU7CS8qIEJvYXJkIGRvZXMgYWxsIHRoZSB3b3JrICovCiAJZGV2LT5ldGh0b29sX29wcwk9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IGNkYmJiNjIuLmM1NjY5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMTAyLDggKzEwMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1EUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlEUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIDNjNTl4LzNjOXh4IGV0aGVybmV0IGRyaXZlciAiKTsKQEAgLTk5Miw2ICs5OTIsNDIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9vbXJhbmdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdm9ydGV4X29wZW4sCisJLm5kb19zdG9wCQk9IHZvcnRleF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYm9vbWVyYW5nX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHZvcnRleF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHZvcnRleF9nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX1BDSQorCS5uZG9fZG9faW9jdGwgCQk9IHZvcnRleF9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF92b3J0ZXgsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm9ydGV4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZvcnRleF9vcGVuLAorCS5uZG9fc3RvcAkJPSB2b3J0ZXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHZvcnRleF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB2b3J0ZXhfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSB2b3J0ZXhfZ2V0X3N0YXRzLAorI2lmZGVmIENPTkZJR19QQ0kKKwkubmRvX2RvX2lvY3RsIAkJPSB2b3J0ZXhfaW9jdGwsCisjZW5kaWYKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfdm9ydGV4LAorI2VuZGlmCit9OworCiAvKgogICogU3RhcnQgdXAgdGhlIFBDSS9FSVNBIGRldmljZSB3aGljaCBpcyBkZXNjcmliZWQgYnkgKmdlbmRldi4KICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MuCkBAIC0xMzY2LDE4ICsxNDAyLDE2IEBACiAJfQogCiAJLyogVGhlIDNjNTl4LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gdm9ydGV4X29wZW47CiAJaWYgKHZwLT5mdWxsX2J1c19tYXN0ZXJfdHgpIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBib29tZXJhbmdfc3RhcnRfeG1pdDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmJvb21yYW5nX25ldGRldl9vcHM7CiAJCS8qIEFjdHVhbGx5LCBpdCBzdGlsbCBzaG91bGQgd29yayB3aXRoIGlvbW11LiAqLwogCQlpZiAoY2FyZF9pZHggPCBNQVhfVU5JVFMgJiYKIAkJICAgICgoaHdfY2hlY2tzdW1zW2NhcmRfaWR4XSA9PSAtMSAmJiAodnAtPmRydl9mbGFncyAmIEhBU19IV0NLU00pKSB8fAogCQkJCWh3X2NoZWNrc3Vtc1tjYXJkX2lkeF0gPT0gMSkpIHsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKIAkJfQotCX0gZWxzZSB7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdm9ydGV4X3N0YXJ0X3htaXQ7Ci0JfQorCX0gZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAgJnZvcnRleF9uZXRkZXZfb3BzOwogCiAJaWYgKHByaW50X2luZm8pIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNjYXR0ZXIvZ2F0aGVyICVzYWJsZWQuIGgvdyBjaGVja3N1bXMgJXNhYmxlZFxuIiwKQEAgLTEzODYsMTggKzE0MjAsOSBAQAogCQkJCShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSA/ICJlbiI6ImRpcyIpOwogCX0KIAotCWRldi0+c3RvcCA9IHZvcnRleF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IHZvcnRleF9nZXRfc3RhdHM7Ci0jaWZkZWYgQ09ORklHX1BDSQotCWRldi0+ZG9faW9jdGwgPSB2b3J0ZXhfaW9jdGw7Ci0jZW5kaWYKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZvcnRleF9ldGh0b29sX29wczsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlOwotCWRldi0+dHhfdGltZW91dCA9IHZvcnRleF90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAod2F0Y2hkb2cgKiBIWikgLyAxMDAwOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBwb2xsX3ZvcnRleDsKLSNlbmRpZgorCiAJaWYgKHBkZXYpIHsKIAkJdnAtPnBtX3N0YXRlX3ZhbGlkID0gMTsKICAJCXBjaV9zYXZlX3N0YXRlKFZPUlRFWF9QQ0kodnApKTsKQEAgLTI4ODMsNyArMjkwOCw3IEBACiAJCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoVk9SVEVYX1BDSSh2cCkpKTsKIAl9IGVsc2UgewogCQlpZiAoVk9SVEVYX0VJU0EodnApKQotCQkJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgZGV2X25hbWUodnAtPmdlbmRldikpOworCQkJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSh2cC0+Z2VuZGV2KSk7CiAJCWVsc2UKIAkJCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJFSVNBIDB4JWx4ICVkIiwKIAkJCQkJZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggNGUxOWFlMy4uYTA5ZTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCQljcHcxNl9mKEludHJNYXNrLCBjcF9pbnRyX21hc2spOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJfQogCkBAIC02NDEsOSArNjQxLDkgQEAKIAl9CiAKIAlpZiAoc3RhdHVzICYgKFJ4T0sgfCBSeEVyciB8IFJ4RW1wdHkgfCBSeEZJRk9PdnIpKQotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmY3AtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmNwLT5uYXBpKSkgewogCQkJY3B3MTZfZihJbnRyTWFzaywgY3Bfbm9yeF9pbnRyX21hc2spOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmY3AtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZjcC0+bmFwaSk7CiAJCX0KIAogCWlmIChzdGF0dXMgJiAoVHhPSyB8IFR4RXJyIHwgVHhFbXB0eSB8IFNXSW50KSkKQEAgLTE2MDIsNiArMTYwMiwyOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjcF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJmNwLT5sb2NrKTsKKworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJY3B3MzJfZihNQUMwICsgMCwgbGUzMl90b19jcHUgKCooX19sZTMyICopIChkZXYtPmRldl9hZGRyICsgMCkpKTsKKwljcHczMl9mKE1BQzAgKyA0LCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCWNwdzhfZihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCisJc3Bpbl91bmxvY2tfaXJxKCZjcC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLwogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KQEAgLTE4MjEsNyArMTg0Myw3IEBACiAJLm5kb19vcGVuCQk9IGNwX29wZW4sCiAJLm5kb19zdG9wCQk9IGNwX2Nsb3NlLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBjcF9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBjcF9zZXRfcnhfbW9kZSwKIAkubmRvX2dldF9zdGF0cwkJPSBjcF9nZXRfc3RhdHMsCiAJLm5kb19kb19pb2N0bAkJPSBjcF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwppbmRleCBhNWIyNDIwLi4yOWRmMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5dG9vLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCkBAIC02NDAsNiArNjQwLDcgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CiBzdGF0aWMgaW50IHJ0bDgxMzlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIGlycXJldHVybl90IHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCBydGw4MTM5X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTkxNyw3ICs5MTgsNyBAQAogCS5uZG9fc3RvcAkJPSBydGw4MTM5X2Nsb3NlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IHJ0bDgxMzlfZ2V0X3N0YXRzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODEzOV9zdGFydF94bWl0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcnRsODEzOV9zZXRfcnhfbW9kZSwKIAkubmRvX2RvX2lvY3RsCQk9IG5ldGRldl9pb2N0bCwKQEAgLTIxMjgsNyArMjEyOSw3IEBACiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAkJUlRMX1cxNl9GKEludHJNYXNrLCBydGw4MTM5X2ludHJfbWFzayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2soJnRwLT5yeF9sb2NrKTsKQEAgLTIxNzgsOSArMjE3OSw5IEBACiAJLyogUmVjZWl2ZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYnkgcG9sbCByb3V0aW5lLgogCSAgIElmIG5vdCBydW5uaW5nIHN0YXJ0IGl0IG5vdy4gKi8KIAlpZiAoc3RhdHVzICYgUnhBY2tCaXRzKXsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKIAkJCVJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJCX0KIAl9CiAKQEAgLTIyMTUsNiArMjIxNiwyOSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKKworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7CisJUlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkpOworCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisKKwlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODI1OTYuYyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKaW5kZXggYjI3MzU5Ni4uY2NhOTRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODI1OTYuYworKysgYi9kcml2ZXJzL25ldC84MjU5Ni5jCkBAIC0xMTIyLDYgKzExMjIsMTcgQEAKIHN0YXRpYyBpbnQgaW8gPSAweDMwMDsKIHN0YXRpYyBpbnQgaXJxID0gMTA7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTU5Nl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaTU5Nl9vcGVuLAorCS5uZG9fc3RvcAkJPSBpNTk2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpNTk2X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGk1OTZfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgaTgyNTk2X3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMjMyLDExICsxMjQzLDcgQEAKIAlERUIoREVCX1BST0JFLHByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbikpOwogCiAJLyogVGhlIDgyNTk2LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gaTU5Nl9vcGVuOwotCWRldi0+c3RvcCA9IGk1OTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpNTk2X3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gaTU5Nl90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpNTk2X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAlkZXYtPm1sX3ByaXYgPSAodm9pZCAqKShkZXYtPm1lbV9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBhMmYxODVmLi5mMDYyYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI2LDYgKzI2LDE1IEBACiAjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuCiBpZiBORVRERVZJQ0VTCiAKK2NvbmZpZyBDT01QQVRfTkVUX0RFVl9PUFMKKyAgICAgICBkZWZhdWx0IHkKKyAgICAgICBib29sICJFbmFibGUgb2xkZXIgbmV0d29yayBkZXZpY2UgQVBJIGNvbXBhdGlhYmxpdHkiCisgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMga2VybmVsIGNvbXBhdGlhYmlsaXR5IHdpdGggb2xkZXIgbmV0d29yayBkZXZpY2VzCisgICAgICAgICAgdGhhdCBkbyBub3QgdXNlIG5ldF9kZXZpY2Vfb3BzIGludGVyZmFjZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIElGQgogCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUX0NMU19BQ1QKQEAgLTk2Myw2ICs5NzIsMTQgQEAKIAkgIEVuYWJsZSB0aGUgdmVyaWZ5IGFmdGVyIHRoZSBidWZmZXIgd3JpdGUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBFVEhPQworCXRyaXN0YXRlICJPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQKKwlzZWxlY3QgTUlJCisJc2VsZWN0IFBIWUxJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDLgorCiBjb25maWcgU01DOTExWAogCXRyaXN0YXRlICJTTVNDIExBTjkxMVs1Njc4XSBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgpAQCAtMTA0MCw2ICsxMDU3LDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBuaTY1LgogCitjb25maWcgRE5FVAorCXRyaXN0YXRlICJEYXZlIGV0aGVybmV0IHN1cHBvcnQgKERORVQpIgorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEhBU19JT01FTQorCXNlbGVjdCBQSFlMSUIKKwloZWxwCisJICBUaGUgRGF2ZSBldGhlcm5ldCBpbnRlcmZhY2UgKERORVQpIGlzIGZvdW5kIG9uIFFvbmcgQm9hcmQgRlBHQS4KKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIERORVQgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZG5ldC4KKwogc291cmNlICJkcml2ZXJzL25ldC90dWxpcC9LY29uZmlnIgogCiBjb25maWcgQVQxNzAwCkBAIC0xODI5LDEwICsxODU3LDEwIEBACiAKIGNvbmZpZyBGRUMKIAlib29sICJGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgQ1BVcykiCi0JZGVwZW5kcyBvbiBNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeAorCWRlcGVuZHMgb24gTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgTUFDSF9NWDI3CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0Ci0JICBjb250cm9sbGVyIG9uIHNvbWUgTW90b3JvbGEgQ29sZEZpcmUgcHJvY2Vzc29ycy4KKwkgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVggcHJvY2Vzc29ycy4KIAogY29uZmlnIEZFQzIKIAlib29sICJTZWNvbmQgRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9uIHNvbWUgQ29sZEZpcmUgQ1BVcykiCkBAIC0yMDE5LDE1ICsyMDQ3LDYgQEAKICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGlnYi4KIAotY29uZmlnIElHQl9MUk8gCi0JYm9vbCAiVXNlIHNvZnR3YXJlIExSTyIKLQlkZXBlbmRzIG9uIElHQiAmJiBJTkVUCi0Jc2VsZWN0IElORVRfTFJPCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgbGFyZ2UgcmVjZWl2ZSBvZmZsb2FkLiAKLQotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCiBjb25maWcgSUdCX0RDQQogCWJvb2wgIkRpcmVjdCBDYWNoZSBBY2Nlc3MgKERDQSkgU3VwcG9ydCIKIAlkZWZhdWx0IHkKQEAgLTIyNzMsOSArMjI5MiwxNyBAQAogCiAgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEZTTF9QUV9NRElPCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBQUSBNRElPIgorCWRlcGVuZHMgb24gRlNMX1NPQworCXNlbGVjdCBQSFlMSUIKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTURJTyBidXMgdXNlZCBieSB0aGUgZ2lhbmZhciBhbmQgVUNDIGRyaXZlcnMuCisKIGNvbmZpZyBHSUFORkFSCiAJdHJpc3RhdGUgIkdpYW5mYXIgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBGU0xfU09DCisJc2VsZWN0IEZTTF9QUV9NRElPCiAJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBDUkMzMgogCWhlbHAKQEAgLTIyODUsNiArMjMxMiw3IEBACiBjb25maWcgVUNDX0dFVEgKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFFIEdpZ2FiaXQgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUKKwlzZWxlY3QgRlNMX1BRX01ESU8KIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgbW9kZSBvZiB0aGUgUVVJQ0MgRW5naW5lLApAQCAtMjMwMSw2ICsyMzI5LDcgQEAKIGNvbmZpZyBNVjY0M1hYX0VUSAogCXRyaXN0YXRlICJNYXJ2ZWxsIERpc2NvdmVyeSAoNjQzWFgpIGFuZCBPcmlvbiBldGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTVY2NDM2MCB8fCBNVjY0WDYwIHx8IChQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMikgfHwgUExBVF9PUklPTgorCXNlbGVjdCBJTkVUX0xSTwogCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZQpAQCAtMjQxOSw3ICsyNDQ4LDYgQEAKIAl0cmlzdGF0ZSAiQ2hlbHNpbyBDb21tdW5pY2F0aW9ucyBUMyAxMEdiIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDSEVMU0lPX1QzX0RFUEVORFMKIAlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IElORVRfTFJPCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQ2hlbHNpbyBUMy1iYXNlZCBnaWdhYml0IGFuZCAxMEdiIEV0aGVybmV0CiAJICBhZGFwdGVycy4KQEAgLTI0NTUsNyArMjQ4Myw2IEBACiBjb25maWcgSVhHQkUKIAl0cmlzdGF0ZSAiSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCi0Jc2VsZWN0IElORVRfTFJPCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvCkBAIC0yNjE5LDYgKzI2NDYsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3NmYy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbmV0L2JlbmV0L0tjb25maWciCisKIGVuZGlmICMgTkVUREVWXzEwMDAwCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGFjYTg0OTIuLjk4NDA5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0yMiwxNCArMjIsMTYgQEAKIG9iai0kKENPTkZJR19URUhVVEkpICs9IHRlaHV0aS5vCiBvYmotJChDT05GSUdfRU5JQykgKz0gZW5pYy8KIG9iai0kKENPTkZJR19KTUUpICs9IGptZS5vCitvYmotJChDT05GSUdfQkUyTkVUKSArPSBiZW5ldC8KIAogZ2lhbmZhcl9kcml2ZXItb2JqcyA6PSBnaWFuZmFyLm8gXAogCQlnaWFuZmFyX2V0aHRvb2wubyBcCi0JCWdpYW5mYXJfbWlpLm8gXAogCQlnaWFuZmFyX3N5c2ZzLm8KIAogb2JqLSQoQ09ORklHX1VDQ19HRVRIKSArPSB1Y2NfZ2V0aF9kcml2ZXIubwotdWNjX2dldGhfZHJpdmVyLW9ianMgOj0gdWNjX2dldGgubyB1Y2NfZ2V0aF9taWkubyB1Y2NfZ2V0aF9ldGh0b29sLm8KK3VjY19nZXRoX2RyaXZlci1vYmpzIDo9IHVjY19nZXRoLm8gdWNjX2dldGhfZXRodG9vbC5vCisKK29iai0kKENPTkZJR19GU0xfUFFfTURJTykgKz0gZnNsX3BxX21kaW8ubwogCiAjCiAjIGxpbmsgb3JkZXIgaW1wb3J0YW50IGhlcmUKQEAgLTIyOCw5ICsyMzAsMTEgQEAKIHBhc2VtaV9tYWNfZHJpdmVyLW9ianMgOj0gcGFzZW1pX21hYy5vIHBhc2VtaV9tYWNfZXRodG9vbC5vCiBvYmotJChDT05GSUdfTUxYNF9DT1JFKSArPSBtbHg0Lwogb2JqLSQoQ09ORklHX0VOQzI4SjYwKSArPSBlbmMyOGo2MC5vCitvYmotJChDT05GSUdfRVRIT0MpICs9IGV0aG9jLm8KIAogb2JqLSQoQ09ORklHX1hURU5TQV9YVDIwMDBfU09OSUMpICs9IHh0c29uaWMubwogCitvYmotJChDT05GSUdfRE5FVCkgKz0gZG5ldC5vCiBvYmotJChDT05GSUdfTUFDQikgKz0gbWFjYi5vCiAKIG9iai0kKENPTkZJR19BUk0pICs9IGFybS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmMgYi9kcml2ZXJzL25ldC9hMjA2NS5jCmluZGV4IDdhNjBiZGQuLmQwZDBjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmMKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuYwpAQCAtNTUyLDE4ICs1NTIsMTMgQEAKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHN0cnVjdCBsYW5jZV9yZWdzICpsbCA9IGxwLT5sbDsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfaW5pdF9ibG9jayAqaWIgPSBscC0+aW5pdF9ibG9jazsKLQlpbnQgZW50cnksIHNrYmxlbiwgbGVuOworCWludCBlbnRyeSwgc2tibGVuOwogCWludCBzdGF0dXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlza2JsZW4gPSBza2ItPmxlbjsKLQlsZW4gPSBza2JsZW47Ci0KLQlpZiAobGVuIDwgRVRIX1pMRU4pIHsKLQkJbGVuID0gRVRIX1pMRU47Ci0JCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKLQl9CisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJcmV0dXJuIDA7CisJc2tibGVuID0gbWF4X3QodW5zaWduZWQsIHNrYi0+bGVuLCBFVEhfWkxFTik7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTU4NiwxNSArNTgxLDExIEBACiAJfQogI2VuZGlmCiAJZW50cnkgPSBscC0+dHhfbmV3ICYgbHAtPnR4X3JpbmdfbW9kX21hc2s7Ci0JaWItPmJ0eF9yaW5nIFtlbnRyeV0ubGVuZ3RoID0gKC1sZW4pIHwgMHhmMDAwOworCWliLT5idHhfcmluZyBbZW50cnldLmxlbmd0aCA9ICgtc2tibGVuKSB8IDB4ZjAwMDsKIAlpYi0+YnR4X3JpbmcgW2VudHJ5XS5taXNjID0gMDsKIAogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAodm9pZCAqKSZpYi0+dHhfYnVmIFtlbnRyeV1bMF0sIHNrYmxlbik7CiAKLQkvKiBDbGVhciB0aGUgc2xhY2sgb2YgdGhlIHBhY2tldCwgZG8gSSBuZWVkIHRoaXM/ICovCi0JaWYgKGxlbiAhPSBza2JsZW4pCi0JCW1lbXNldCAoKHZvaWQgKikgJmliLT50eF9idWYgW2VudHJ5XVtza2JsZW5dLCAwLCBsZW4gLSBza2JsZW4pOwotCiAJLyogTm93LCBnaXZlIHRoZSBwYWNrZXQgdG8gdGhlIGxhbmNlICovCiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0udG1kMV9iaXRzID0gKExFX1QxX1BPS3xMRV9UMV9PV04pOwogCWxwLT50eF9uZXcgPSAobHAtPnR4X25ldysxKSAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWMzMjAwLmMgYi9kcml2ZXJzL25ldC9hYzMyMDAuYwppbmRleCAwNzFhODUxLi5lYWM3MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hYzMyMDAuYworKysgYi9kcml2ZXJzL25ldC9hYzMyMDAuYwpAQCAtMTQzLDYgKzE0MywyMiBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gYWNfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGFjX2Nsb3NlX2NhcmQsCisKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWlfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBlaV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlaV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWlfcG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBfX2luaXQgYWNfcHJvYmUxKGludCBpb2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGksIHJldHZhbDsKQEAgLTI1MywxMSArMjY5LDcgQEAKIAllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJmFjX2Jsb2NrX291dHB1dDsKIAllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJmFjX2dldF84MzkwX2hkcjsKIAotCWRldi0+b3BlbiA9ICZhY19vcGVuOwotCWRldi0+c3RvcCA9ICZhY19jbG9zZV9jYXJkOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaV9wb2xsOwotI2VuZGlmCisJZGV2LT5uZXRkZXZfb3BzID0gJmFjX25ldGRldl9vcHM7CiAJTlM4MzkwX2luaXQoZGV2LCAwKTsKIAogCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCA5NTg5ZDYyMC4uMDZhOWYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmMKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh0eF9yYXRpbywgIkFjZU5JQy8zQzk4NS9HQTYyMCByYXRpbyBvZiBOSUMgbWVtb3J5IHVzZWQgZm9yIFRYL1JYIGRlc2NyaXB0b3JzIChyYW5nZSAwLTYzKSIpOwogCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAgICJhY2VuaWMuYzogdjAuOTIgMDgvMDUvMjAwMiAgSmVzIFNvcmVuc2VuLCBsaW51eC1hY2VuaWNAU3VuU0lURS5ka1xuIgogICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9ob21lLmNlcm4uY2gvfmplcy9naWdlL2FjZW5pYy5odG1sXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwppbmRleCA3NzA5OTkyLi5jYjljOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKQEAgLTgzMSw3ICs4MzEsNyBAQAogCWlmIChyeF9wa3RfbGltaXQgPiAwKSB7CiAJCS8qIFJlY2VpdmUgZGVzY3JpcHRvciBpcyBlbXB0eSBub3cgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JpdGVsKFZBTDB8UklOVEVOMCwgbW1pbyArIElOVEVOMCk7CiAJCXdyaXRlbChWQUwyIHwgUkRNRDAsIG1taW8gKyBDTUQwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTExNzAsMTEgKzExNzAsMTEgQEAKIAogCS8qIENoZWNrIGlmIFJlY2VpdmUgSW50ZXJydXB0IGhhcyBvY2N1cnJlZC4gKi8KIAlpZiAoaW50cjAgJiBSSU5UMCkgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgewogCQkJLyogRGlzYWJsZSByZWNlaXZlIGludGVydXB0cyAqLwogCQkJd3JpdGVsKFJJTlRFTjAsIG1taW8gKyBJTlRFTjApOwogCQkJLyogU2NoZWR1bGUgYSBwb2xsaW5nIHJvdXRpbmUgKi8KLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCQl9IGVsc2UgaWYgKGludHJlbjAgJiBSSU5URU4wKSB7CiAJCQlwcmludGsoIioqKioqKioqKioqKkRyaXZlciBidWchIFwKIAkJCQlpbnRlcnJ1cHQgd2hpbGUgaW4gcG9sbFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYwppbmRleCA1NDgxOWEzLi43ZjgzMjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKQEAgLTE3MSw3ICsxNzEsNiBAQAogCiBzdHJ1Y3QgY29wc19sb2NhbAogewotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICAgICAgaW50IGJvYXJkOwkJCS8qIEhvbGRzIHdoYXQgYm9hcmQgdHlwZSBpcy4gKi8KIAlpbnQgbm9kZWlkOwkJCS8qIFNldCB0byAxIG9uY2UgaGF2ZSBub2RlaWQuICovCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgbm9kZV9hY3F1aXJlOwkvKiBOb2RlIElEIHdoZW4gYWNxdWlyZWQuICovCkBAIC0xOTcsNyArMTk2LDYgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50ICBjb3BzX2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBpbnQgIGNvcHNfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjb3BzX2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyB2b2lkIGNsZWFudXBfY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjYwLDYgKzI1OCwxNSBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29wc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICAgICAgICAgID0gY29wc19vcGVuLAorICAgICAgICAubmRvX3N0b3AgICAgICAgICAgICAgICA9IGNvcHNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ICAgCT0gY29wc19zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gY29wc190aW1lb3V0LAorICAgICAgICAubmRvX2RvX2lvY3RsICAgICAgICAgICA9IGNvcHNfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCit9OworCiAvKgogICogICAgICBUaGlzIGlzIHRoZSByZWFsIHByb2JlIHJvdXRpbmUuIExpbnV4IGhhcyBhIGhpc3Rvcnkgb2YgZnJpZW5kbHkgZGV2aWNlCiAgKiAgICAgIHByb2JlcyBvbiB0aGUgSVNBIGJ1cy4gQSBnb29kIGRldmljZSBwcm9iZXMgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCkBAIC0zMzMsMTYgKzM0MCw5IEBACiAJLyogQ29weSBsb2NhbCBib2FyZCB2YXJpYWJsZSB0byBscCBzdHJ1Y3QuICovCiAJbHAtPmJvYXJkICAgICAgICAgICAgICAgPSBib2FyZDsKIAotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gY29wc19zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gY29wc190aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyAJPSAmY29wc19uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWiAqIDI7CiAKLSAgICAgICAgZGV2LT5nZXRfc3RhdHMgICAgICAgICAgPSBjb3BzX2dldF9zdGF0czsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGNvcHNfb3BlbjsKLSAgICAgICAgZGV2LT5zdG9wICAgICAgICAgICAgICAgPSBjb3BzX2Nsb3NlOwotICAgICAgICBkZXYtPmRvX2lvY3RsICAgICAgICAgICA9IGNvcHNfaW9jdGw7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0gICAgICAgIGRldi0+bWNfbGlzdCAgICAgICAgICAgID0gTlVMTDsKIAogCS8qIFRlbGwgdGhlIHVzZXIgd2hlcmUgdGhlIGNhcmQgaXMgYW5kIHdoYXQgbW9kZSB3ZSdyZSBpbi4gKi8KIAlpZihib2FyZD09REFZTkEpCkBAIC03OTcsNyArNzk3LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKIAkJCWRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKyAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKICAgICAgICAgICAgICAgICB3aGlsZShwa3RfbGVuLS0pICAgICAgICAvKiBEaXNjYXJkIHBhY2tldCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaW5iKGlvYWRkcik7CiAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTgxOSw3ICs4MTksNyBAQAogICAgICAgICB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCYWQgcGFja2V0IGxlbmd0aCBvZiAlZCBieXRlcy5cbiIsIAogCQkJZGV2LT5uYW1lLCBwa3RfbGVuKTsKLSAgICAgICAgICAgICAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgICAgICAgICAgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtODM2LDcgKzgzNiw3IEBACiAgICAgICAgIGlmKHJzcF90eXBlICE9IExBUF9SRVNQT05TRSkKICAgICAgICAgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCYWQgcGFja2V0IHR5cGUgJWQuXG4iLCBkZXYtPm5hbWUsIHJzcF90eXBlKTsKLSAgICAgICAgICAgICAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgICAgICAgICAgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtODQ2LDggKzg0Niw4IEBACiAgICAgICAgIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7ICAgIC8qIFBvaW50IHRvIGRhdGEgKFNraXAgaGVhZGVyKS4gKi8KIAogICAgICAgICAvKiBVcGRhdGUgdGhlIGNvdW50ZXJzLiAqLwotICAgICAgICBscC0+c3RhdHMucnhfcGFja2V0cysrOwotICAgICAgICBscC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisgICAgICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworICAgICAgICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAgICAgICAgIC8qIFNlbmQgcGFja2V0IHRvIGEgaGlnaGVyIHBsYWNlLiAqLwogICAgICAgICBuZXRpZl9yeChza2IpOwpAQCAtODU4LDcgKzg1OCw3IEBACiAgICAgICAgIHN0cnVjdCBjb3BzX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgICAgIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogICAgICAgICBpZihscC0+Ym9hcmQ9PVRBTkdFTlQpCiAgICAgICAgIHsKIAkJaWYoKGluYihpb2FkZHIrVEFOR19DQVJEX1NUQVRVUykmVEFOR19UWF9SRUFEWSk9PTApCkBAIC05MTYsOCArOTE2LDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwkvKiBSZXN0b3JlIGludGVycnVwdHMuICovCiAKIAkvKiBEb25lIHNlbmRpbmcgcGFja2V0LCB1cGRhdGUgY291bnRlcnMgYW5kIGNsZWFudXAuICovCi0JbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTk4NiwxNSArOTg2LDYgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiAgICAgIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLgotICogICAgICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjb3BzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgICAgICBzdHJ1Y3QgY29wc19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgICAgICByZXR1cm4gJmxwLT5zdGF0czsKLX0KIAogI2lmZGVmIE1PRFVMRQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpjb3BzX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCmluZGV4IGRjNGQ0OTYuLjc4Y2M3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwpAQCAtMjYxLDcgKzI2MSw2IEBACiAKIHN0cnVjdCBsdHBjX3ByaXZhdGUKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgYXRhbGtfYWRkciBteV9hZGRyOwogfTsKIApAQCAtNjk5LDcgKzY5OCw2IEBACiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgbHRwY190aW1lcjsKIAogc3RhdGljIGludCBsdHBjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmx0cGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW50IHJlYWRfMzAgKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNzI2LDggKzcyNCw2IEBACiAJaW50IGRub2RlLCBzbm9kZSwgbGxhcHR5cGUsIGxlbjsgCiAJaW50IHNrbGVuOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGx0cGNfcHJpdmF0ZSAqbHRwY19wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbHRwY19wcml2LT5zdGF0czsKIAlzdHJ1Y3QgbHRfcmN2bGFwICpsdGMgPSAoc3RydWN0IGx0X3JjdmxhcCAqKSBsdGRtYWNidWY7CiAKIAlpZiAobHRjLT5jb21tYW5kICE9IExUX1JDVkxBUCkgewpAQCAtNzc5LDggKzc3NSw4IEBACiAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMrPXNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiB0b3NzIGl0IG9ud2FyZHMgKi8KIAluZXRpZl9yeChza2IpOwpAQCAtOTA0LDEwICs5MDAsNiBAQAogCS8qIGluIGtlcm5lbCAxLjMueHgsIG9uIGVudHJ5IHNrYi0+ZGF0YSBwb2ludHMgdG8gZGRwIGhlYWRlciwKIAkgKiBhbmQgc2tiLT5sZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGRwIGRhdGEgKyBkZHAgaGVhZGVyCiAJICovCi0KLQlzdHJ1Y3QgbHRwY19wcml2YXRlICpsdHBjX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZsdHBjX3ByaXYtPnN0YXRzOwotCiAJaW50IGk7CiAJc3RydWN0IGx0X3NlbmRsYXAgY2J1ZjsKIAl1bnNpZ25lZCBjaGFyICpoZHI7CkBAIC05MzYsMjAgKzkyOCwxMyBAQAogCQlwcmludGsoIlxuIik7CiAJfQogCi0Jc3RhdHMtPnR4X3BhY2tldHMrKzsKLQlzdGF0cy0+dHhfYnl0ZXMrPXNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbHRwY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbHRwY19wcml2YXRlICpsdHBjX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZsdHBjX3ByaXYtPnN0YXRzOwotCXJldHVybiBzdGF0czsKLX0KLQogLyogaW5pdGlhbGl6YXRpb24gc3R1ZmYgKi8KICAgCiBzdGF0aWMgaW50IF9faW5pdCBsdHBjX3Byb2JlX2RtYShpbnQgYmFzZSwgaW50IGRtYSkKQEAgLTEwMjcsNiArMTAxMiwxMiBAQAogCXJldHVybiAod2FudCAmIDIpID8gMyA6IDE7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbHRwY19uZXRkZXYgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGx0cGNfeG1pdCwKKwkubmRvX2RvX2lvY3RsCQk9IGx0cGNfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBsdHBjX3Byb2JlKHZvaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTExMzMsMTQgKzExMjQsNyBAQAogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQXBwbGUvRmFyYWxsb24gTG9jYWxUYWxrLVBDIGNhcmQgYXQgJTAzeCwgRE1BJWQuICBVc2luZyBwb2xsZWQgbW9kZS5cbiIsaW8sZG1hKTsKIAotCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGV0aGVybmV0LWdlbmVyaWMgdmFsdWVzLiAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbHRwY194bWl0OwotCWRldi0+Z2V0X3N0YXRzID0gbHRwY19nZXRfc3RhdHM7Ci0KLQkvKiBhZGQgdGhlIGx0cGMtc3BlY2lmaWMgdGhpbmdzICovCi0JZGV2LT5kb19pb2N0bCA9ICZsdHBjX2lvY3RsOwotCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+bmV0ZGV2X29wcyA9ICZsdHBjX25ldGRldjsKIAlkZXYtPm1jX2xpc3QgPSBOVUxMOwogCWRldi0+YmFzZV9hZGRyID0gaW87CiAJZGV2LT5pcnEgPSBpcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCmluZGV4IDNmZjlhZmYuLjY0NmRmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJDTkVUKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIDsKIAluZXRpZl9yeChza2IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCmluZGV4IDZiNTNlNWUuLmQ2ZDRhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKQEAgLTk1LDE3ICs5NSwxNiBAQAogRVhQT1JUX1NZTUJPTChhcmNuZXRfZGVidWcpOwogRVhQT1JUX1NZTUJPTChhbGxvY19hcmNkZXYpOwogRVhQT1JUX1NZTUJPTChhcmNuZXRfaW50ZXJydXB0KTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X29wZW4pOworRVhQT1JUX1NZTUJPTChhcmNuZXRfY2xvc2UpOworRVhQT1JUX1NZTUJPTChhcmNuZXRfc2VuZF9wYWNrZXQpOworRVhQT1JUX1NZTUJPTChhcmNuZXRfdGltZW91dCk7CiAKIC8qIEludGVybmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGFyY25ldF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSB1bnNpZ25lZCBzaG9ydCB0eXBlLCBjb25zdCB2b2lkICpkYWRkciwKIAkJCSBjb25zdCB2b2lkICpzYWRkciwgdW5zaWduZWQgbGVuKTsKIHN0YXRpYyBpbnQgYXJjbmV0X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphcmNuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBnb190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIGludCBkZWJ1ZyA9IEFSQ05FVF9ERUJVRzsKQEAgLTMyMiwxMSArMzIxLDE4IEBACiAJLnJlYnVpbGQgPSBhcmNuZXRfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFyY25ldF9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGFyY25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGFyY25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQsCit9OwogCiAvKiBTZXR1cCBhIHN0cnVjdCBkZXZpY2UgZm9yIEFSQ25ldC4gKi8KIHN0YXRpYyB2b2lkIGFyY2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+dHlwZSA9IEFSUEhSRF9BUkNORVQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFyY25ldF9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZhcmNuZXRfaGVhZGVyX29wczsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXJjaGRyKTsKIAlkZXYtPm10dSA9IGNob29zZV9tdHUoKTsKQEAgLTMzOSwxOCArMzQ1LDkgQEAKIAkvKiBOZXctc3R5bGUgZmxhZ3MuICovCiAJZGV2LT5mbGFncyA9IElGRl9CUk9BRENBU1Q7CiAKLQkvKgotCSAqIFB1dCBpbiB0aGlzIHN0dWZmIGhlcmUsIHNvIHdlIGRvbid0IGhhdmUgdG8gZXhwb3J0IHRoZSBzeW1ib2xzIHRvCi0JICogdGhlIGNoaXBzZXQgZHJpdmVycy4KLQkgKi8KLQlkZXYtPm9wZW4gPSBhcmNuZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSBhcmNuZXRfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBhcmNuZXRfZ2V0X3N0YXRzOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNoYXIgKm5hbWUpCitzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIApAQCAtMzcyLDcgKzM2OSw3IEBACiAgKiB0aGF0ICJzaG91bGQiIG9ubHkgbmVlZCB0byBiZSBzZXQgb25jZSBhdCBib290LCBzbyB0aGF0IHRoZXJlIGlzCiAgKiBub24tcmVib290IHdheSB0byByZWNvdmVyIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgogICovCi1zdGF0aWMgaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGNvdW50LCBuZXdtdHUsIGVycm9yOwpAQCAtMzgzLDcgKzM4MCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJQlVHTFZMKERfUFJPVE8pIHsKLQkJaW50IGNvdW50OwogCQlCVUdNU0coRF9QUk9UTywgInByb3RvY29sIG1hcCAoZGVmYXVsdCBpcyAnJWMnKTogIiwKIAkJICAgICAgIGFyY19wcm90b19kZWZhdWx0LT5zdWZmaXgpOwogCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAyNTY7IGNvdW50KyspCkBAIC00NzIsNyArNDY4LDcgQEAKIAogCiAvKiBUaGUgaW52ZXJzZSByb3V0aW5lIHRvIGFyY25ldF9vcGVuIC0gc2h1dHMgZG93biB0aGUgY2FyZC4gKi8KLXN0YXRpYyBpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC01ODMsOCArNTc5LDggQEAKIAl9IGVsc2UgewogCQlCVUdNU0coRF9OT1JNQUwsCiAJCSAgICAgICAiSSBkb24ndCB1bmRlcnN0YW5kIGV0aGVybmV0IHByb3RvY29sICVYaCBhZGRyZXNzZXMhXG4iLCB0eXBlKTsKLQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCX0KIAogCS8qIGlmIHdlIGNvdWxkbid0IHJlc29sdmUgdGhlIGFkZHJlc3MuLi4gZ2l2ZSB1cC4gKi8KQEAgLTYwMSw3ICs1OTcsNyBAQAogCiAKIC8qIENhbGxlZCBieSB0aGUga2VybmVsIGluIG9yZGVyIHRvIHRyYW5zbWl0IGEgcGFja2V0LiAqLwotc3RhdGljIGludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFyY2hkciAqcGt0OwpAQCAtNjQ1LDcgKzY0MSw3IEBACiAJCSAgICAhcHJvdG8tPmFja190eCkgewogCQkJLyogZG9uZSByaWdodCBhd2F5IGFuZCB3ZSBkb24ndCB3YW50IHRvIGFja25vd2xlZGdlCiAJCQkgICB0aGUgcGFja2FnZSBsYXRlciAtIGZvcmdldCBhYm91dCBpdCBub3cgKi8KLQkJCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQlmcmVlc2tiID0gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIGRvIGl0IHRoZSAnc3BsaXQnIHdheSAqLwpAQCAtNzA5LDcgKzcwNSw3IEBACiAJLyogc3RhcnQgc2VuZGluZyAqLwogCUFDT01NQU5EKFRYY21kIHwgKGxwLT5jdXJfdHggPDwgMykpOwogCi0JbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlscC0+bGFzdHRyYW5zX2Rlc3QgPSBscC0+bGFzdGxvYWRfZGVzdDsKIAlscC0+bGFzdGxvYWRfZGVzdCA9IDA7CiAJbHAtPmV4Y25ha19wZW5kaW5nID0gMDsKQEAgLTcyMCw3ICs3MTYsNyBAQAogCiAKIC8qIENhbGxlZCBieSB0aGUga2VybmVsIHdoZW4gdHJhbnNtaXQgdGltZXMgb3V0ICovCi1zdGF0aWMgdm9pZCBhcmNuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBhcmNuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzMyLDExICs3MjgsMTEgQEAKIAkJbXNnID0gIiAtIG1pc3NlZCBJUlE/IjsKIAl9IGVsc2UgewogCQltc2cgPSAiIjsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJbHAtPnRpbWVkX291dCA9IDE7CiAJCUFDT01NQU5EKE5PVFhjbWQgfCAobHAtPmN1cl90eCA8PCAzKSk7CiAJfQotCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJLyogbWFrZSBzdXJlIHdlIGRpZG4ndCBtaXNzIGEgVFggb3IgYSBFWEMgTkFLIElSUSAqLwogCUFJTlRNQVNLKDApOwpAQCAtODY1LDggKzg2MSw4IEBACiAJCQkJCQkgICAgICAgInRyYW5zbWl0IHdhcyBub3QgYWNrbm93bGVkZ2VkISAiCiAJCQkJCQkgICAgICAgIihzdGF0dXM9JVhoLCBkZXN0PSUwMlhoKVxuIiwKIAkJCQkJCSAgICAgICBzdGF0dXMsIGxwLT5sYXN0dHJhbnNfZGVzdCk7Ci0JCQkJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlCVUdNU0coRF9EVVJJTkcsCiAJCQkJCQkgICAgICAgImJyb2FkY2FzdCB3YXMgbm90IGFja25vd2xlZGdlZDsgdGhhdCdzIG5vcm1hbCAiCkBAIC05MDUsNyArOTAxLDcgQEAKIAkJCQlpZiAodHhidWYgIT0gLTEpIHsKIAkJCQkJaWYgKGxwLT5vdXRnb2luZy5wcm90by0+Y29udGludWVfdHgoZGV2LCB0eGJ1ZikpIHsKIAkJCQkJCS8qIHRoYXQgd2FzIHRoZSBsYXN0IHNlZ21lbnQgKi8KLQkJCQkJCWxwLT5zdGF0cy50eF9ieXRlcyArPSBscC0+b3V0Z29pbmcuc2tiLT5sZW47CisJCQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxwLT5vdXRnb2luZy5za2ItPmxlbjsKIAkJCQkJCWlmKCFscC0+b3V0Z29pbmcucHJvdG8tPmFja190eCkKIAkJCQkJCSAgewogCQkJCQkJICAgIGRldl9rZnJlZV9za2JfaXJxKGxwLT5vdXRnb2luZy5za2IpOwpAQCAtOTMwLDcgKzkyNiw3IEBACiAJCX0KIAkJaWYgKHN0YXR1cyAmIGxwLT5pbnRtYXNrICYgUkVDT05mbGFnKSB7CiAJCQlBQ09NTUFORChDRkxBR1NjbWQgfCBDT05GSUdjbGVhcik7Ci0JCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAogCQkJQlVHTVNHKERfUkVDT04sICJOZXR3b3JrIHJlY29uZmlndXJhdGlvbiBkZXRlY3RlZCAoc3RhdHVzPSVYaClcbiIsCiAJCQkgICAgICAgc3RhdHVzKTsKQEAgLTEwMzgsOCArMTAzNCw4IEBACiAJICAgICAgICIoJWQrNCBieXRlcylcbiIsCiAJICAgICAgIGJ1Zm51bSwgcGt0LmhhcmQuc291cmNlLCBwa3QuaGFyZC5kZXN0LCBsZW5ndGgpOwogCi0JbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoICsgQVJDX0hEUl9TSVpFOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoICsgQVJDX0hEUl9TSVpFOwogCiAJLyogY2FsbCB0aGUgcmlnaHQgcmVjZWl2ZXIgZm9yIHRoZSBwcm90b2NvbCAqLwogCWlmIChhcmNfcHJvdG9fbWFwW3NvZnQtPnByb3RvXS0+aXNfaXApIHsKQEAgLTEwNjcsMTggKzEwNjMsNiBAQAogfQogCiAKLQotLyogCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4gIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IKLSAqIGNsb3NlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphcmNuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmbHAtPnN0YXRzOwotfQotCi0KIHN0YXRpYyB2b2lkIG51bGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1Zm51bSwKIAkJICAgIHN0cnVjdCBhcmNoZHIgKnBrdGhkciwgaW50IGxlbmd0aCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCmluZGV4IDMwNTgwYmIuLjA4M2UyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSArIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFICsgc2l6ZW9mKGludCkpOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIAlCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIHNrYiwgInJ4Iik7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUkNORVQpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwogOwogCW5ldGlmX3J4KHNrYik7CiB9CkBAIC0yODIsNyArMjgyLDcgQEAKICAgQlVHTVNHKERfUFJPVE8sICJBY2trbm93bGVkZ2UgZm9yIGNhcCBwYWNrZXQgJXguXG4iLAogCSAqKChpbnQqKSZhY2twa3QtPnNvZnQuY2FwLmNvb2tpZVswXSkpOwogCi0gIGFja3NrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSQ05FVCk7CisgIGFja3NrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwogCiAgIEJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgYWNrc2tiLCAiYWNrX3R4X3JlY3YiKTsKICAgbmV0aWZfcngoYWNrc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYwppbmRleCBlYTUzYTk0Li5kYjA4ZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCkBAIC0xNTEsNiArMTUxLDggQEAKIAlpZiAobm9kZSAmJiBub2RlICE9IDB4ZmYpCiAJCWRldi0+ZGV2X2FkZHJbMF0gPSBub2RlOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJmNvbTIwMDIwX25ldGRldl9vcHM7CisKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJbHAtPmJhY2twbGFuZSA9IGJhY2twbGFuZTsKIAlscC0+Y2xvY2twID0gY2xvY2twICYgNzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwppbmRleCA4YjUxZjYzLi5kYmY0ZGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCkBAIC03Miw2ICs3Miw5IEBACiAJZGV2ID0gYWxsb2NfYXJjZGV2KGRldmljZSk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5uZXRkZXZfb3BzID0gJmNvbTIwMDIwX25ldGRldl9vcHM7CisKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKaW5kZXggMTAzNjg4My4uNjUxMjc1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKQEAgLTE0OSw2ICsxNDksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNvbTIwMDIwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gYXJjbmV0X29wZW4sCisJLm5kb19zdG9wCT0gYXJjbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGFyY25ldF9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQgPSBhcmNuZXRfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGNvbTIwMDIwX3NldF9tY19saXN0LAorfTsKKwogLyogU2V0IHVwIHRoZSBzdHJ1Y3QgbmV0X2RldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYXJkLiAgQ2FsbGVkIGFmdGVyCiAgKiBwcm9iaW5nIHN1Y2NlZWRzLgogICovCkBAIC0xNzAsOCArMTc4LDYgQEAKIAlscC0+aHcuY29weV9mcm9tX2NhcmQgPSBjb20yMDAyMF9jb3B5X2Zyb21fY2FyZDsKIAlscC0+aHcuY2xvc2UgPSBjb20yMDAyMF9jbG9zZTsKIAotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gY29tMjAwMjBfc2V0X21jX2xpc3Q7Ci0KIAlpZiAoIWRldi0+ZGV2X2FkZHJbMF0pCiAJCWRldi0+ZGV2X2FkZHJbMF0gPSBpbmIoaW9hZGRyICsgQlVTX0FMSUdOKjgpOwkvKiBGSVhNRTogZG8gdGhpcyBzb21lIG90aGVyIHdheSEgKi8KIApAQCAtMzQyLDYgKzM0OCw3IEBACiAgICAgZGVmaW5lZChDT05GSUdfQVJDTkVUX0NPTTIwMDIwX0NTX01PRFVMRSkKIEVYUE9SVF9TWU1CT0woY29tMjAwMjBfY2hlY2spOwogRVhQT1JUX1NZTUJPTChjb20yMDAyMF9mb3VuZCk7CitFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX25ldGRldl9vcHMpOwogI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCmluZGV4IDQ5ZDM5YTkuLjA2ZjhmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYwpAQCAtODgsNyArODgsNiBAQAogICovCiBzdGF0aWMgX19iZTE2IHR5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBhcmNfcmZjMTA1MSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTA1MTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMDUxX0hEUl9TSVpFOwpAQCAtMTEyLDggKzExMSw4IEBACiAJCXJldHVybiBodG9ucyhFVEhfUF9BUlApOwogCiAJZGVmYXVsdDoKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNDAsNyArMTM5LDcgQEAKIAlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFKTsKQEAgLTE2OCw3ICsxNjcsNiBAQAogc3RhdGljIGludCBidWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXVuc2lnbmVkIHNob3J0IHR5cGUsIHVpbnQ4X3QgZGFkZHIpCiB7Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBoZHJfc2l6ZSA9IEFSQ19IRFJfU0laRSArIFJGQzEwNTFfSERSX1NJWkU7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiX3B1c2goc2tiLCBoZHJfc2l6ZSk7CiAJc3RydWN0IGFyY19yZmMxMDUxICpzb2Z0ID0gJnBrdC0+c29mdC5yZmMxMDUxOwpAQCAtMTg0LDggKzE4Miw4IEBACiAJZGVmYXVsdDoKIAkJQlVHTVNHKERfTk9STUFMLCAiUkZDMTA1MTogSSBkb24ndCB1bmRlcnN0YW5kIHByb3RvY29sICVkICglWGgpXG4iLAogCQkgICAgICAgdHlwZSwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYwppbmRleCAyMzAzZDNhLi43NDU1MzA2NTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKQEAgLTkyLDcgKzkyLDYgQEAKIHsKIAlzdHJ1Y3QgYXJjaGRyICpwa3QgPSAoc3RydWN0IGFyY2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGFyY19yZmMxMjAxICpzb2Z0ID0gJnBrdC0+c29mdC5yZmMxMjAxOwotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMjAxX0hEUl9TSVpFOwogCiAJLyogUHVsbCBvZmYgdGhlIGFyY25ldCBoZWFkZXIuICovCkBAIC0xMjEsOCArMTIwLDggQEAKIAljYXNlIEFSQ19QX05PVkVMTF9FQzoKIAkJcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8zKTsKIAlkZWZhdWx0OgotCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3Miw4ICsxNzEsOCBAQAogCQkJIGluLT5zZXF1ZW5jZSwgc29mdC0+c3BsaXRfZmxhZywgc29mdC0+c2VxdWVuY2UpOwogCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKGluLT5za2IpOwotCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCWluLT5za2IgPSBOVUxMOwogCQl9CiAJCWluLT5zZXF1ZW5jZSA9IHNvZnQtPnNlcXVlbmNlOwpAQCAtMTgxLDcgKzE4MCw3IEBACiAJCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCXJldHVybjsKIAkJfQogCQlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFKTsKQEAgLTIxMyw3ICsyMTIsNyBAQAogCQkJCQlCVUdNU0coRF9FWFRSQSwKIAkJCQkJICAgICAgICJBUlAgc291cmNlIGFkZHJlc3Mgd2FzIDAwaCwgc2V0IHRvICUwMlhoLlxuIiwKIAkJCQkJICAgICAgIHNhZGRyKTsKLQkJCQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJCSpjcHRyID0gc2FkZHI7CiAJCQkJfSBlbHNlIHsKIAkJCQkJQlVHTVNHKERfRFVSSU5HLCAiQVJQIHNvdXJjZSBhZGRyZXNzICglWGgpIGlzIGZpbmUuXG4iLApAQCAtMjIyLDggKzIyMSw4IEBACiAJCQl9IGVsc2UgewogCQkJCUJVR01TRyhEX05PUk1BTCwgImZ1bm55LXNoYXBlZCBBUlAgcGFja2V0LiAoJVhoLCAlWGgpXG4iLAogCQkJCSAgICAgICBhcnAtPmFyX2hsbiwgYXJwLT5hcl9wbG4pOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQl9CiAJCX0KIAkJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwpAQCAtMjU3LDggKzI1Niw4IEBACiAJCQkgICAgICAgc29mdC0+c3BsaXRfZmxhZyk7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKIAkJCWluLT5za2IgPSBOVUxMOwotCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCWluLT5sYXN0cGFja2V0ID0gaW4tPm51bXBhY2tldHMgPSAwOwogCQl9CiAJCWlmIChzb2Z0LT5zcGxpdF9mbGFnICYgMSkgewkvKiBmaXJzdCBwYWNrZXQgaW4gc3BsaXQgKi8KQEAgLTI2OSw4ICsyNjgsOCBAQAogCQkJCSAgICAgICAiKHNwbGl0ZmxhZz0lZCwgc2VxPSVkKVxuIiwKIAkJCQkgICAgICAgaW4tPnNlcXVlbmNlLCBzb2Z0LT5zcGxpdF9mbGFnLAogCQkJCSAgICAgICBzb2Z0LT5zZXF1ZW5jZSk7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKIAkJCX0KIAkJCWluLT5zZXF1ZW5jZSA9IHNvZnQtPnNlcXVlbmNlOwpAQCAtMjgxLDggKzI4MCw4IEBACiAJCQkJQlVHTVNHKERfRVhUUkEsICJpbmNvbWluZyBwYWNrZXQgbW9yZSB0aGFuIDE2IHNlZ21lbnRzOyBkcm9wcGluZy4gKHNwbGl0ZmxhZz0lZClcbiIsCiAJCQkJICAgICAgIHNvZnQtPnNwbGl0X2ZsYWcpOwogCQkJCWxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxID0gc29mdC0+c2VxdWVuY2U7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpbi0+c2tiID0gc2tiID0gYWxsb2Nfc2tiKDUwOCAqIGluLT5udW1wYWNrZXRzICsgQVJDX0hEUl9TSVpFLApAQCAtMjkwLDcgKzI4OSw3IEBACiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQlCVUdNU0coRF9OT1JNQUwsICIoc3BsaXQpIG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKIAkJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwotCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC0zMTQsOCArMzEzLDggQEAKIAkJCQkJICAgICAgICJmaXJzdCEgKHNwbGl0ZmxhZz0lZCwgc2VxPSVkLCBhYm9ydGVkPSVkKVxuIiwKIAkJCQkJc29mdC0+c3BsaXRfZmxhZywgc29mdC0+c2VxdWVuY2UsCiAJCQkJCSAgICAgICBscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSk7Ci0JCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJfQogCQkJCXJldHVybjsKIAkJCX0KQEAgLTMyNSw4ICszMjQsOCBAQAogCQkJCWlmIChwYWNrZXRudW0gPD0gaW4tPmxhc3RwYWNrZXQgLSAxKSB7CiAJCQkJCUJVR01TRyhEX0VYVFJBLCAiZHVwbGljYXRlIHNwbGl0cGFja2V0IGlnbm9yZWQhIChzcGxpdGZsYWc9JWQpXG4iLAogCQkJCQkgICAgICAgc29mdC0+c3BsaXRfZmxhZyk7Ci0JCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJCQlyZXR1cm47CiAJCQkJfQogCQkJCS8qICJiYWQiIGR1cGxpY2F0ZSwga2lsbCByZWFzc2VtYmx5ICovCkBAIC0zMzYsOCArMzM1LDggQEAKIAkJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwogCQkJCWRldl9rZnJlZV9za2JfaXJxKGluLT5za2IpOwogCQkJCWluLT5za2IgPSBOVUxMOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJaW4tPmxhc3RwYWNrZXQgPSBpbi0+bnVtcGFja2V0cyA9IDA7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNDA0LDggKzQwMyw4IEBACiAJZGVmYXVsdDoKIAkJQlVHTVNHKERfTk9STUFMLCAiUkZDMTIwMTogSSBkb24ndCB1bmRlcnN0YW5kIHByb3RvY29sICVkICglWGgpXG4iLAogCQkgICAgICAgdHlwZSwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCAzZWMyMGNjLi5jYzc3MDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCQlpbnQgbW9yZSA9IDA7CiAKIAkJc3Bpbl9sb2NrX2lycSgmZXAtPnJ4X2xvY2spOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFggfCBSRUdfSU5URU5fUlgpOwogCQlpZiAoZXA5M3h4X2hhdmVfbW9yZV9yeChlcCkpIHsKIAkJCXdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFgpOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZlcC0+cnhfbG9jayk7CiAKLQkJaWYgKG1vcmUgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJaWYgKG1vcmUgJiYgbmFwaV9yZXNjaGVkdWxlKG5hcGkpKQogCQkJZ290byBwb2xsX3NvbWVfbW9yZTsKIAl9CiAKQEAgLTQxNSw5ICs0MTUsOSBAQAogCiAJaWYgKHN0YXR1cyAmIFJFR19JTlRTVFNfUlgpIHsKIAkJc3Bpbl9sb2NrKCZlcC0+cnhfbG9jayk7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZXAtPm5hcGkpKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmZXAtPm5hcGkpKSkgewogCQkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZlcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmVwLT5uYXBpKTsKIAkJfQogCQlzcGluX3VubG9jaygmZXAtPnJ4X2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCmluZGV4IDVmY2UxZDUuLjVmZTE3ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtNDczLDcgKzQ3Myw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcnhfaXJxXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAJcW1ncl9kaXNhYmxlX2lycShwb3J0LT5wbGF0LT5yeHEpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIH0KIAogc3RhdGljIGludCBldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCkBAIC00OTgsMTYgKzQ5OCwxNiBAQAogCiAJCWlmICgobiA9IHF1ZXVlX2dldF9kZXNjKHJ4cSwgcG9ydCwgMCkpIDwgMCkgewogI2lmIERFQlVHX1JYCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIG5ldGlmX3J4X2NvbXBsZXRlXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCBuYXBpX2NvbXBsZXRlXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXFtZ3JfZW5hYmxlX2lycShyeHEpOwogCQkJaWYgKCFxbWdyX3N0YXRfZW1wdHkocnhxKSAmJgotCQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpIHsKKwkJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKICNpZiBERUJVR19SWAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwiCi0JCQkJICAgICAgICIgbmV0aWZfcnhfcmVzY2hlZHVsZSBzdWNjZXNzZWRcbiIsCisJCQkJICAgICAgICIgbmFwaV9yZXNjaGVkdWxlIHN1Y2Nlc3NlZFxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgogCQkJCXFtZ3JfZGlzYWJsZV9pcnEocnhxKTsKQEAgLTEwMzYsNyArMTAzNiw3IEBACiAJfQogCXBvcnRzX29wZW4rKzsKIAkvKiB3ZSBtYXkgYWxyZWFkeSBoYXZlIFJYIGRhdGEsIGVuYWJsZXMgSVJRICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggZjNhMTI3NC4uMzVjZDI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIHsKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgTU9EVUxFTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgTU9EVUxFVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBuZGV2LT5kZXYucGFyZW50LT5idXNfaWQsCisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUobmRldi0+ZGV2LnBhcmVudCksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdDE3MDAuYyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCmluZGV4IDcyZWE2ZTMuLjE4YjU2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCkBAIC0yNDksNiArMjQ5LDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdDE3MDBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IG5ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gbmV0X3NlbmRfcGFja2V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb190eF90aW1lb3V0IAk9IG5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGUgRnVqaXRzdSBkYXRhc2hlZXQgc3VnZ2VzdHMgdGhhdCB0aGUgTklDIGJlIHByb2JlZCBmb3IgYnkgY2hlY2tpbmcgaXRzCiAgICAic2lnbmF0dXJlIiwgdGhlIGRlZmF1bHQgYml0IHBhdHRlcm4gYWZ0ZXIgYSByZXNldC4gIFRoaXMgKmRvZXNuJ3QqIHdvcmsgLS0KICAgIHRoZXJlIGlzIG5vIHdheSB0byByZXNldCB0aGUgYnVzIGludGVyZmFjZSB3aXRob3V0IGEgY29tcGxldGUgcG93ZXItY3ljbGUhCkBAIC00NDgsMTMgKzQ1OSw3IEBACiAJaWYgKG5ldF9kZWJ1ZykKIAkJcHJpbnRrKHZlcnNpb24pOwogCi0JbWVtc2V0KGxwLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9sb2NhbCkpOwotCi0JZGV2LT5vcGVuCQk9IG5ldF9vcGVuOwotCWRldi0+c3RvcAkJPSBuZXRfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X3J4X21vZGU7Ci0JZGV2LT50eF90aW1lb3V0ID0gbmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF0MTcwMF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKQEAgLTgyOCw3ICs4MzMsNiBAQAogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBjaGFyIG1jX2ZpbHRlcls4XTsJCSAvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CkBAIC04NTcsNiArODYxLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmbHAtPmxvY2ssIGZsYWdzKTsKIAlpZiAobWVtY21wKG1jX2ZpbHRlciwgbHAtPm1jX2ZpbHRlciwgc2l6ZW9mKG1jX2ZpbHRlcikpKSB7CisJCWludCBpOwogCQlpbnQgc2F2ZWRfYmFuayA9IGludyhpb2FkZHIgKyBDT05GSUdfMCk7CiAJCS8qIFN3aXRjaCB0byBiYW5rIDEgYW5kIHNldCB0aGUgbXVsdGljYXN0IHRhYmxlLiAqLwogCQlvdXR3KChzYXZlZF9iYW5rICYgfjB4MEMwMCkgfCAweDA0ODAsIGlvYWRkciArIENPTkZJR18wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmggYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCmluZGV4IGFjMTFiODQuLmUxNjU4ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmggYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oCmluZGV4IGM0OTU1MGQuLjJiZjYzYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmgKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJLyogQWxsIERlc2NyaXB0b3IgbWVtb3J5ICovCiAJZG1hX2FkZHJfdCAgCXJpbmdfZG1hOwogCXZvaWQgICAgIAkqcmluZ192aXJfYWRkcjsKLQlpbnQgICAgICAgICAgICAgcmluZ19zaXplOworCXUzMiAgICAgICAgICAgICByaW5nX3NpemU7CiAKIAlzdHJ1Y3QgYXRsMWVfdHhfcmluZyB0eF9yaW5nOwogCXN0cnVjdCBhdGwxZV9yeF9yaW5nIHJ4X3Jpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKaW5kZXggYmI5MDk0ZC4uYzc1ODg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwpAQCAtMTMyNiw5ICsxMzI2LDkgQEAKIAkJCUFUX1dSSVRFX1JFRyhodywgUkVHX0lNUiwKIAkJCQkgICAgIElNUl9OT1JNQUxfTUFTSyAmIH5JU1JfUlhfRVZFTlQpOwogCQkJQVRfV1JJVEVfRkxVU0goaHcpOwotCQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKAorCQkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoCiAJCQkJICAgJmFkYXB0ZXItPm5hcGkpKSkKLQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCQl9CiAJfSB3aGlsZSAoLS1tYXhfaW50cyA+IDApOwogCS8qIHJlLWVuYWJsZSBJbnRlcnJ1cHQqLwpAQCAtMTUxNCw3ICsxNTE0LDcgQEAKIAkvKiBJZiBubyBUeCBhbmQgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIHF1aXRfcG9sbGluZzoKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWltcl9kYXRhID0gQVRfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SKTsKIAkJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lNUiwgaW1yX2RhdGEgfCBJU1JfUlhfRVZFTlQpOwogCQkvKiB0ZXN0IGRlYnVnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYwppbmRleCBmNzJhYmIzLi5iM2JlNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAogI2RlZmluZSBBVEwxRV9QQVJBTSh4LCBkZXNjKSBcCiAJc3RhdGljIGludCBfX2RldmluaXRkYXRhIHhbQVRMMUVfTUFYX05JQyArIDFdID0gQVRMMUVfUEFSQU1fSU5JVDsgXAotCXN0YXRpYyBpbnQgbnVtXyMjeDsgXAorCXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtXyMjeDsgXAogCW1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZCh4LCB4LCBpbnQsICZudW1fIyN4LCAwKTsgXAogCU1PRFVMRV9QQVJNX0RFU0MoeCwgZGVzYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggYzBjZWVlMC4uNDNmYzFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogICogRGVmYXVsdCBWYWx1ZTogMTAwICgyMDB1cykKICAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIGludF9tb2RfdGltZXJbQVRMMV9NQVhfTklDKzFdID0gQVRMMV9QQVJBTV9JTklUOwotc3RhdGljIGludCBudW1faW50X21vZF90aW1lcjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2ludF9tb2RfdGltZXI7CiBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQoaW50X21vZF90aW1lciwgaW50X21vZF90aW1lciwgaW50LAogCSZudW1faW50X21vZF90aW1lciwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludF9tb2RfdGltZXIsICJJbnRlcnJ1cHQgbW9kZXJhdG9yIHRpbWVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCmluZGV4IGJjMzk0NDkuLjlmZTA2YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCkBAIC0yODU0LDcgKzI4NTQsNyBAQAogI2Vsc2UKICNkZWZpbmUgQVRMMl9QQVJBTShYLCBkZXNjKSBcCiAgICAgc3RhdGljIGludCBfX2RldmluaXRkYXRhIFhbQVRMMl9NQVhfTklDKzFdID0gQVRMMl9QQVJBTV9JTklUOyBcCi0gICAgc3RhdGljIGludCBudW1fIyNYID0gMDsgXAorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtXyMjWDsgXAogICAgIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChYLCBYLCBpbnQsICZudW1fIyNYLCAwKTsgXAogICAgIE1PRFVMRV9QQVJNX0RFU0MoWCwgZGVzYyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCA5Yzg3NWJiLi40Mjc0ZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC04MSwyNCArODEsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLy8gcHJvdG90eXBlcwotc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSk7Ci1zdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdTEwMDBfaW50ZXJydXB0KGludCwgdm9pZCAqKTsKLXN0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKLXN0YXRpYyBpbnQgYXUxMDAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7Ci1zdGF0aWMgdm9pZCBhdTEwMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCwgdTE2KTsKLXN0YXRpYyB2b2lkIGF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQogLyoKICAqIFRoZW9yeSBvZiBvcGVyYXRpb24KICAqCkBAIC0xODgsNiArMTcwLDI2IEBACiAjIGVycm9yIE1BQzAtYXNzb2NpYXRlZCBQSFkgYXR0YWNoZWQgMm5kIE1BQ3MgTUlJIGJ1cyBub3Qgc3VwcG9ydGVkIHlldAogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYoZm9yY2VfcmVzZXQgfHwgKCFhdXAtPm1hY19lbmFibGVkKSkgeworCQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOworCQlhdV9zeW5jX2RlbGF5KDIpOworCQkqYXVwLT5lbmFibGUgPSAoTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyCisJCQkJfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFKTsKKwkJYXVfc3luY19kZWxheSgyKTsKKworCQlhdXAtPm1hY19lbmFibGVkID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoKICAqIE1JSSBvcGVyYXRpb25zCiAgKi8KQEAgLTI4MSw2ICsyODMsMTA3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZCBzdG9wXG4iLCBkZXYtPm5hbWUpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfihNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7CisJYXVfc3luY19kZWxheSgxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9yeF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxlX3J4X3R4XG4iLCBkZXYtPm5hbWUpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgfD0gKE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFKTsKKwlhdV9zeW5jX2RlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQKK2F1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7CisKKwlCVUdfT04oIWF1cC0+cGh5X2Rldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgeworCQkvLyBzcGVlZCBjaGFuZ2VkCisKKwkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJY2FzZSBTUEVFRF8xMDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKKwkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAorCisJCS8qIHN3aXRjaGluZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8KKwkJaGFyZF9zdG9wKGRldik7CisKKwkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCisJCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKKwkJZWxzZQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKKwkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7CisJCWF1X3N5bmNfZGVsYXkoMSk7CisKKwkJZW5hYmxlX3J4X3R4KGRldik7CisJCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7CisJCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAorCisJCWlmICghcGh5ZGV2LT5saW5rKSB7CisJCQkvKiBsaW5rIHdlbnQgZG93biAqLworCQkJYXVwLT5vbGRfc3BlZWQgPSAwOworCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7CisJCX0KKworCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOworCQlzdGF0dXNfY2hhbmdlID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXNfY2hhbmdlKSB7CisJCWlmIChwaHlkZXYtPmxpbmspCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKKwkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJfQorfQorCiBzdGF0aWMgaW50IG1paV9wcm9iZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zNTUsOCArNDU4LDggQEAKIAkvKiBub3cgd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSBwcm9wZXIgcGh5ZGV2LCB0byBhdHRhY2ggdG8uLi4gKi8KIAlCVUdfT04ocGh5ZGV2LT5hdHRhY2hlZF9kZXYpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsICZhdTEwMDBfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksICZhdTEwMDBfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKQEAgLTM4MSw4ICs0ODQsOCBAQAogCWF1cC0+cGh5X2RldiA9IHBoeWRldjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgotCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDEyLDQ4ICs1MTUsNiBAQAogCWF1cC0+cERCZnJlZSA9IHBEQjsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGVfcnhfdHhcbiIsIGRldi0+bmFtZSk7Ci0KLQlhdXAtPm1hYy0+Y29udHJvbCB8PSAoTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOwotCWF1X3N5bmNfZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhhcmQgc3RvcFxuIiwgZGV2LT5uYW1lKTsKLQotCWF1cC0+bWFjLT5jb250cm9sICY9IH4oTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOwotCWF1X3N5bmNfZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZV9yZXNldCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmKGZvcmNlX3Jlc2V0IHx8ICghYXVwLT5tYWNfZW5hYmxlZCkpIHsKLQkJKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKLQkJYXVfc3luY19kZWxheSgyKTsKLQkJKmF1cC0+ZW5hYmxlID0gKE1BQ19FTl9SRVNFVDAgfCBNQUNfRU5fUkVTRVQxIHwgTUFDX0VOX1JFU0VUMgotCQkJCXwgTUFDX0VOX0NMT0NLX0VOQUJMRSk7Ci0JCWF1X3N5bmNfZGVsYXkoMik7Ci0KLQkJYXVwLT5tYWNfZW5hYmxlZCA9IDE7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlc2V0X21hY191bmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU0MiwzMCArNjAzLDYgQEAKIHN0YXRpYyBpbnQgbnVtX2lmczsKIAogLyoKLSAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKLSAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYwotICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IGksIGZvdW5kX29uZSA9IDA7Ci0KLQludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOwotCQlpZmxpc3RbaV0uZGV2ID0gZGV2OwotCQlpZiAoZGV2KQotCQkJZm91bmRfb25lKys7Ci0JfQotCWlmICghZm91bmRfb25lKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGV0aHRvb2wgb3BlcmF0aW9ucwogICovCiAKQEAgLTYxMSw2ICs2NDgsNDA1IEBACiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGludGVyZmFjZS4KKyAqCisgKiBXaGVuIHRoZSBkZXZpY2UgcG93ZXJzIHVwLCB0aGUgY2xvY2tzIGFyZSBkaXNhYmxlZCBhbmQgdGhlCisgKiBtYWMgaXMgaW4gcmVzZXQgc3RhdGUuICBXaGVuIHRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLCB3ZQorICogZG8gdGhlIHNhbWUgLS0gcmVzZXQgdGhlIGRldmljZSBhbmQgZGlzYWJsZSB0aGUgY2xvY2tzIHRvCisgKiBjb25zZXJ2ZSBwb3dlci4gVGh1cywgd2hlbmV2ZXIgYXUxMDAwX2luaXQoKSBpcyBjYWxsZWQsCisgKiB0aGUgZGV2aWNlIHNob3VsZCBhbHJlYWR5IGJlIGluIHJlc2V0IHN0YXRlLgorICovCitzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJdTMyIGNvbnRyb2w7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisKKwkvKiBicmluZyB0aGUgZGV2aWNlIG91dCBvZiByZXNldCAqLworCWVuYWJsZV9tYWMoZGV2LCAxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWF1cC0+bWFjLT5jb250cm9sID0gMDsKKwlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOworCWF1cC0+dHhfdGFpbCA9IGF1cC0+dHhfaGVhZDsKKwlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOworCisJYXVwLT5tYWMtPm1hY19hZGRyX2hpZ2ggPSBkZXYtPmRldl9hZGRyWzVdPDw4IHwgZGV2LT5kZXZfYWRkcls0XTsKKwlhdXAtPm1hYy0+bWFjX2FkZHJfbG93ID0gZGV2LT5kZXZfYWRkclszXTw8MjQgfCBkZXYtPmRldl9hZGRyWzJdPDwxNiB8CisJCWRldi0+ZGV2X2FkZHJbMV08PDggfCBkZXYtPmRldl9hZGRyWzBdOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgeworCQlhdXAtPnJ4X2RtYV9yaW5nW2ldLT5idWZmX3N0YXQgfD0gUlhfRE1BX0VOQUJMRTsKKwl9CisJYXVfc3luYygpOworCisJY29udHJvbCA9IE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFOworI2lmbmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKwljb250cm9sIHw9IE1BQ19CSUdfRU5ESUFOOworI2VuZGlmCisJaWYgKGF1cC0+cGh5X2RldikgeworCQlpZiAoYXVwLT5waHlfZGV2LT5saW5rICYmIChEVVBMRVhfRlVMTCA9PSBhdXAtPnBoeV9kZXYtPmR1cGxleCkpCisJCQljb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKKwkJZWxzZQorCQkJY29udHJvbCB8PSBNQUNfRElTQUJMRV9SWF9PV047CisJfSBlbHNlIHsgLyogUEhZLWxlc3Mgb3AsIGFzc3VtZSBmdWxsLWR1cGxleCAqLworCQljb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKKwl9CisKKwlhdXAtPm1hYy0+Y29udHJvbCA9IGNvbnRyb2w7CisJYXVwLT5tYWMtPnZsYW4xX3RhZyA9IDB4ODEwMDsgLyogYWN0aXZhdGUgdmxhbiBzdXBwb3J0ICovCisJYXVfc3luYygpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisKKwlwcy0+cnhfcGFja2V0cysrOworCWlmIChzdGF0dXMgJiBSWF9NQ0FTVF9GUkFNRSkKKwkJcHMtPm11bHRpY2FzdCsrOworCisJaWYgKHN0YXR1cyAmIFJYX0VSUk9SKSB7CisJCXBzLT5yeF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKKwkJCXBzLT5yeF9taXNzZWRfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiAoUlhfT1ZFUkxFTiB8IFJYX09WRVJMRU4gfCBSWF9MRU5fRVJST1IpKQorCQkJcHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKKwkJCXBzLT5yeF9jcmNfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBSWF9DT0xMKQorCQkJcHMtPmNvbGxpc2lvbnMrKzsKKwl9CisJZWxzZQorCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7CisKK30KKworLyoKKyAqIEF1MTAwMCByZWNlaXZlIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9sYXRpbGUgcnhfZG1hX3QgKnByeGQ7CisJdTMyIGJ1ZmZfc3RhdCwgc3RhdHVzOworCWRiX2Rlc3RfdCAqcERCOworCXUzMglmcm1sZW47CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNSkKKwkJcHJpbnRrKCIlczogYXUxMDAwX3J4IGhlYWQgJWRcbiIsIGRldi0+bmFtZSwgYXVwLT5yeF9oZWFkKTsKKworCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07CisJYnVmZl9zdGF0ID0gcHJ4ZC0+YnVmZl9zdGF0OworCXdoaWxlIChidWZmX3N0YXQgJiBSWF9UX0RPTkUpICB7CisJCXN0YXR1cyA9IHByeGQtPnN0YXR1czsKKwkJcERCID0gYXVwLT5yeF9kYl9pbnVzZVthdXAtPnJ4X2hlYWRdOworCQl1cGRhdGVfcnhfc3RhdHMoZGV2LCBzdGF0dXMpOworCQlpZiAoIShzdGF0dXMgJiBSWF9FUlJPUikpICB7CisKKwkJCS8qIGdvb2QgZnJhbWUgKi8KKwkJCWZybWxlbiA9IChzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSyk7CisJCQlmcm1sZW4gLT0gNDsgLyogUmVtb3ZlIEZDUyAqLworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcm1sZW4gKyAyKTsKKwkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBJUCBoZWFkZXIgYWxpZ24gKi8KKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKKwkJCQkodW5zaWduZWQgY2hhciAqKXBEQi0+dmFkZHIsIGZybWxlbik7CisJCQlza2JfcHV0KHNrYiwgZnJtbGVuKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQluZXRpZl9yeChza2IpOwkvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCisJCX0KKwkJZWxzZSB7CisJCQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgeworCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCisJCQkJCXByaW50aygicnggbWlzc1xuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCisJCQkJCXByaW50aygicnggd2RvZ1xuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpCisJCQkJCXByaW50aygicnggcnVudFxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX09WRVJMRU4pCisJCQkJCXByaW50aygicnggb3ZlcmxlblxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCisJCQkJCXByaW50aygicnggY29sbFxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX01JSV9FUlJPUikKKwkJCQkJcHJpbnRrKCJyeCBtaWkgZXJyb3JcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9DUkNfRVJST1IpCisJCQkJCXByaW50aygicnggY3JjIGVycm9yXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTEVOX0VSUk9SKQorCQkJCQlwcmludGsoInJ4IGxlbiBlcnJvclxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1VfQ05UUkxfRlJBTUUpCisJCQkJCXByaW50aygicnggdSBjb250cm9sIGZyYW1lXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQorCQkJCQlwcmludGsoInJ4IG1pc3NcbiIpOworCQkJfQorCQl9CisJCXByeGQtPmJ1ZmZfc3RhdCA9ICh1MzIpKHBEQi0+ZG1hX2FkZHIgfCBSWF9ETUFfRU5BQkxFKTsKKwkJYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfaGVhZCArIDEpICYgKE5VTV9SWF9ETUEgLSAxKTsKKwkJYXVfc3luYygpOworCisJCS8qIG5leHQgZGVzY3JpcHRvciAqLworCQlwcnhkID0gYXVwLT5yeF9kbWFfcmluZ1thdXAtPnJ4X2hlYWRdOworCQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisKKwlpZiAoc3RhdHVzICYgVFhfRlJBTUVfQUJPUlRFRCkgeworCQlpZiAoIWF1cC0+cGh5X2RldiB8fCAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKSB7CisJCQlpZiAoc3RhdHVzICYgKFRYX0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7CisJCQkJLyogYW55IG90aGVyIHR4IGVycm9ycyBhcmUgb25seSB2YWxpZAorCQkJCSAqIGluIGhhbGYgZHVwbGV4IG1vZGUgKi8KKwkJCQlwcy0+dHhfZXJyb3JzKys7CisJCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlwcy0+dHhfZXJyb3JzKys7CisJCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWlmIChzdGF0dXMgJiAoVFhfTk9fQ0FSUklFUiB8IFRYX0xPU1NfQ0FSUklFUikpCisJCQkJcHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhY2tub3dsZWRnZQorICogdGhlIFRYIERPTkUgYml0cy4gIFRoaXMgaXMgYSBtdXN0IGlmIHRoZSBpcnEgaXMgc2V0dXAgYXMKKyAqIGVkZ2UgdHJpZ2dlcmVkLgorICovCitzdGF0aWMgdm9pZCBhdTEwMDBfdHhfYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOworCisJcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF90YWlsXTsKKworCXdoaWxlIChwdHhkLT5idWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKKwkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7CisJCXB0eGQtPmxlbiA9IDA7CisJCWF1X3N5bmMoKTsKKworCQlhdXAtPnR4X3RhaWwgPSAoYXVwLT50eF90YWlsICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOworCQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOworCisJCWlmIChhdXAtPnR4X2Z1bGwpIHsKKwkJCWF1cC0+dHhfZnVsbCA9IDA7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBdTEwMDAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisKKwkvKiBIYW5kbGUgUlggaW50ZXJydXB0cyBmaXJzdCB0byBtaW5pbWl6ZSBjaGFuY2Ugb2Ygb3ZlcnJ1biAqLworCisJYXUxMDAwX3J4KGRldik7CisJYXUxMDAwX3R4X2FjayhkZXYpOworCXJldHVybiBJUlFfUkVUVkFMKDEpOworfQorCitzdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKKwkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KKwkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOworCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50aygiJXM6IG9wZW46IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBkZXYtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOworCisJaWYgKGF1cC0+cGh5X2RldikKKwkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKKworCS8qIHN0b3AgdGhlIGRldmljZSAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBdTEwMDAgdHJhbnNtaXQgcm91dGluZS4KKyAqLworc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisJdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7CisJdTMyIGJ1ZmZfc3RhdDsKKwlkYl9kZXN0X3QgKnBEQjsKKwlpbnQgaTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA1KQorCQlwcmludGsoIiVzOiB0eDogYXVwICV4IGxlbj0lZCwgZGF0YT0lcCwgaGVhZCAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsICh1bnNpZ25lZClhdXAsIHNrYi0+bGVuLAorCQkJCXNrYi0+ZGF0YSwgYXVwLT50eF9oZWFkKTsKKworCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfaGVhZF07CisJYnVmZl9zdGF0ID0gcHR4ZC0+YnVmZl9zdGF0OworCWlmIChidWZmX3N0YXQgJiBUWF9ETUFfRU5BQkxFKSB7CisJCS8qIFdlJ3ZlIHdyYXBwZWQgYXJvdW5kIGFuZCB0aGUgdHJhbnNtaXR0ZXIgaXMgc3RpbGwgYnVzeSAqLworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWF1cC0+dHhfZnVsbCA9IDE7CisJCXJldHVybiAxOworCX0KKwllbHNlIGlmIChidWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKKwkJcHR4ZC0+bGVuID0gMDsKKwl9CisKKwlpZiAoYXVwLT50eF9mdWxsKSB7CisJCWF1cC0+dHhfZnVsbCA9IDA7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisKKwlwREIgPSBhdXAtPnR4X2RiX2ludXNlW2F1cC0+dHhfaGVhZF07CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKKwlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgeworCQlmb3IgKGk9c2tiLT5sZW47IGk8RVRIX1pMRU47IGkrKykgeworCQkJKChjaGFyICopcERCLT52YWRkcilbaV0gPSAwOworCQl9CisJCXB0eGQtPmxlbiA9IEVUSF9aTEVOOworCX0KKwllbHNlCisJCXB0eGQtPmxlbiA9IHNrYi0+bGVuOworCisJcHMtPnR4X3BhY2tldHMrKzsKKwlwcy0+dHhfYnl0ZXMgKz0gcHR4ZC0+bGVuOworCisJcHR4ZC0+YnVmZl9zdGF0ID0gcERCLT5kbWFfYWRkciB8IFRYX0RNQV9FTkFCTEU7CisJYXVfc3luYygpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9oZWFkICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIFR4IHJpbmcgaGFzIGJlZW4gZnVsbCBsb25nZXIgdGhhbiB0aGUgd2F0Y2hkb2cgdGltZW91dAorICogdmFsdWUuIFRoZSB0cmFuc21pdHRlciBtdXN0IGJlIGh1bmc/CisgKi8KK3N0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICIlczogYXUxMDAwX3R4X3RpbWVvdXQ6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOworCXJlc2V0X21hYyhkZXYpOworCWF1MTAwMF9pbml0KGRldik7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBzZXRfcnhfbW9kZTogZmxhZ3M9JXhcbiIsIGRldi0+bmFtZSwgZGV2LT5mbGFncyk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUFJPTUlTQ1VPVVM7CisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIHx8CisJCQkgICBkZXYtPm1jX2NvdW50ID4gTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCkgeworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUEFTU19BTExfTVVMVEk7CisJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXNzIGFsbCBtdWx0aWNhc3RcbiIsIGRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCQl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KKworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKKwkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJc2V0X2JpdChldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpPj4yNiwKKwkJCQkJKGxvbmcgKiltY19maWx0ZXIpOworCQl9CisJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2hpZ2ggPSBtY19maWx0ZXJbMV07CisJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2xvdyA9IG1jX2ZpbHRlclswXTsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX0hBU0hfTU9ERTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHJldHVybiAtRUlOVkFMOworCisJaWYgKCFhdXAtPnBoeV9kZXYpIHJldHVybiAtRUlOVkFMOyAvLyBQSFkgbm90IGNvbnRyb2xsYWJsZQorCisJcmV0dXJuIHBoeV9taWlfaW9jdGwoYXVwLT5waHlfZGV2LCBpZl9taWkocnEpLCBjbWQpOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQgPSAwOwpAQCAtNjIyLDcgKzEwNTgsNyBAQAogCXUzMiBiYXNlLCBtYWNlbjsKIAogCWlmIChwb3J0X251bSA+PSBOVU1fRVRIX0lOVEVSRkFDRVMpCi0gCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CiAKIAliYXNlICA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkciApOwogCW1hY2VuID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcik7CkBAIC04MDYsMjAwICsxMjQyLDI2IEBACiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIHRoZSBpbnRlcmZhY2UuCi0gKgotICogV2hlbiB0aGUgZGV2aWNlIHBvd2VycyB1cCwgdGhlIGNsb2NrcyBhcmUgZGlzYWJsZWQgYW5kIHRoZQotICogbWFjIGlzIGluIHJlc2V0IHN0YXRlLiAgV2hlbiB0aGUgaW50ZXJmYWNlIGlzIGNsb3NlZCwgd2UKLSAqIGRvIHRoZSBzYW1lIC0tIHJlc2V0IHRoZSBkZXZpY2UgYW5kIGRpc2FibGUgdGhlIGNsb2NrcyB0bwotICogY29uc2VydmUgcG93ZXIuIFRodXMsIHdoZW5ldmVyIGF1MTAwMF9pbml0KCkgaXMgY2FsbGVkLAotICogdGhlIGRldmljZSBzaG91bGQgYWxyZWFkeSBiZSBpbiByZXNldCBzdGF0ZS4KKyAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKKyAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYworICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgogICovCi1zdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQl1MzIgY29udHJvbDsKKwlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGksIGZvdW5kX29uZSA9IDA7CiAKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisJbnVtX2lmcyA9IE5VTV9FVEhfSU5URVJGQUNFUyAtIG5pOwogCi0JLyogYnJpbmcgdGhlIGRldmljZSBvdXQgb2YgcmVzZXQgKi8KLQllbmFibGVfbWFjKGRldiwgMSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KLQlhdXAtPm1hYy0+Y29udHJvbCA9IDA7Ci0JYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKLQlhdXAtPnR4X3RhaWwgPSBhdXAtPnR4X2hlYWQ7Ci0JYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKLQotCWF1cC0+bWFjLT5tYWNfYWRkcl9oaWdoID0gZGV2LT5kZXZfYWRkcls1XTw8OCB8IGRldi0+ZGV2X2FkZHJbNF07Ci0JYXVwLT5tYWMtPm1hY19hZGRyX2xvdyA9IGRldi0+ZGV2X2FkZHJbM108PDI0IHwgZGV2LT5kZXZfYWRkclsyXTw8MTYgfAotCQlkZXYtPmRldl9hZGRyWzFdPDw4IHwgZGV2LT5kZXZfYWRkclswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspIHsKLQkJYXVwLT5yeF9kbWFfcmluZ1tpXS0+YnVmZl9zdGF0IHw9IFJYX0RNQV9FTkFCTEU7CisJZm9yKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7CisJCWRldiA9IGF1MTAwMF9wcm9iZShpKTsKKwkJaWZsaXN0W2ldLmRldiA9IGRldjsKKwkJaWYgKGRldikKKwkJCWZvdW5kX29uZSsrOwogCX0KLQlhdV9zeW5jKCk7Ci0KLQljb250cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7Ci0jaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgotCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47Ci0jZW5kaWYKLQlpZiAoYXVwLT5waHlfZGV2KSB7Ci0JCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkKLQkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCQllbHNlCi0JCQljb250cm9sIHw9IE1BQ19ESVNBQkxFX1JYX09XTjsKLQl9IGVsc2UgeyAvKiBQSFktbGVzcyBvcCwgYXNzdW1lIGZ1bGwtZHVwbGV4ICovCi0JCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCX0KLQotCWF1cC0+bWFjLT5jb250cm9sID0gY29udHJvbDsKLQlhdXAtPm1hYy0+dmxhbjFfdGFnID0gMHg4MTAwOyAvKiBhY3RpdmF0ZSB2bGFuIHN1cHBvcnQgKi8KLQlhdV9zeW5jKCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7Ci0KLQlCVUdfT04oIWF1cC0+cGh5X2Rldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgewotCQkvLyBzcGVlZCBjaGFuZ2VkCi0KLQkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOwotCi0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKLQkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAotCi0JCS8qIHN3aXRjaGluZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8KLQkJaGFyZF9zdG9wKGRldik7Ci0KLQkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQotCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCi0JCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCi0JCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKLQkJZWxzZQotCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCi0JCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKLQkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7Ci0JCWF1X3N5bmNfZGVsYXkoMSk7Ci0KLQkJZW5hYmxlX3J4X3R4KGRldik7Ci0JCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OwotCi0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7Ci0JCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAotCi0JCWlmICghcGh5ZGV2LT5saW5rKSB7Ci0JCQkvKiBsaW5rIHdlbnQgZG93biAqLwotCQkJYXVwLT5vbGRfc3BlZWQgPSAwOwotCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7Ci0JCX0KLQotCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOwotCQlzdGF0dXNfY2hhbmdlID0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChzdGF0dXNfY2hhbmdlKSB7Ci0JCWlmIChwaHlkZXYtPmxpbmspCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKLQkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0KLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKLQkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoYXVwLT5waHlfZGV2KSB7Ci0JCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KLQkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOwotCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKLQl9Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiJXM6IG9wZW46IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBkZXYtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOwotCi0JaWYgKGF1cC0+cGh5X2RldikKLQkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKLQotCS8qIHN0b3AgdGhlIGRldmljZSAqLwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCisJaWYgKCFmb3VuZF9vbmUpCisJCXJldHVybiAtRU5PREVWOwogCXJldHVybiAwOwogfQogCkBAIC0xMDIyLDI5OCArMTI4NCwxNSBAQAogCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykKIAkJCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtqXSkKIAkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtqXSk7Ci0gCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKLSAJCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCi0gCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0gCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBNQUNfSU9TSVpFKTsKLSAJCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7CisJCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgorCQkJCQkgICAgIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAorCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOworCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0ubWFjZW5fYWRkciksIDQpOwogCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwotCi0JaWYgKHN0YXR1cyAmIFRYX0ZSQU1FX0FCT1JURUQpIHsKLQkJaWYgKCFhdXAtPnBoeV9kZXYgfHwgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkgewotCQkJaWYgKHN0YXR1cyAmIChUWF9KQUJfVElNRU9VVCB8IFRYX1VOREVSUlVOKSkgewotCQkJCS8qIGFueSBvdGhlciB0eCBlcnJvcnMgYXJlIG9ubHkgdmFsaWQKLQkJCQkgKiBpbiBoYWxmIGR1cGxleCBtb2RlICovCi0JCQkJcHMtPnR4X2Vycm9ycysrOwotCQkJCXBzLT50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcHMtPnR4X2Vycm9ycysrOwotCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgKFRYX05PX0NBUlJJRVIgfCBUWF9MT1NTX0NBUlJJRVIpKQotCQkJCXBzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JfQotfQotCi0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhY2tub3dsZWRnZQotICogdGhlIFRYIERPTkUgYml0cy4gIFRoaXMgaXMgYSBtdXN0IGlmIHRoZSBpcnEgaXMgc2V0dXAgYXMKLSAqIGVkZ2UgdHJpZ2dlcmVkLgotICovCi1zdGF0aWMgdm9pZCBhdTEwMDBfdHhfYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOwotCi0JcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF90YWlsXTsKLQotCXdoaWxlIChwdHhkLT5idWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKLQkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKLQkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7Ci0JCXB0eGQtPmxlbiA9IDA7Ci0JCWF1X3N5bmMoKTsKLQotCQlhdXAtPnR4X3RhaWwgPSAoYXVwLT50eF90YWlsICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOwotCQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOwotCi0JCWlmIChhdXAtPnR4X2Z1bGwpIHsKLQkJCWF1cC0+dHhfZnVsbCA9IDA7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIEF1MTAwMCB0cmFuc21pdCByb3V0aW5lLgotICovCi1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKLQl2b2xhdGlsZSB0eF9kbWFfdCAqcHR4ZDsKLQl1MzIgYnVmZl9zdGF0OwotCWRiX2Rlc3RfdCAqcERCOwotCWludCBpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygiJXM6IHR4OiBhdXAgJXggbGVuPSVkLCBkYXRhPSVwLCBoZWFkICVkXG4iLAotCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCwgc2tiLT5sZW4sCi0JCQkJc2tiLT5kYXRhLCBhdXAtPnR4X2hlYWQpOwotCi0JcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF9oZWFkXTsKLQlidWZmX3N0YXQgPSBwdHhkLT5idWZmX3N0YXQ7Ci0JaWYgKGJ1ZmZfc3RhdCAmIFRYX0RNQV9FTkFCTEUpIHsKLQkJLyogV2UndmUgd3JhcHBlZCBhcm91bmQgYW5kIHRoZSB0cmFuc21pdHRlciBpcyBzdGlsbCBidXN5ICovCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJYXVwLT50eF9mdWxsID0gMTsKLQkJcmV0dXJuIDE7Ci0JfQotCWVsc2UgaWYgKGJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgewotCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOwotCQlwdHhkLT5sZW4gPSAwOwotCX0KLQotCWlmIChhdXAtPnR4X2Z1bGwpIHsKLQkJYXVwLT50eF9mdWxsID0gMDsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLQotCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKLQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOwotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7Ci0JCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7Ci0JCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7Ci0JCX0KLQkJcHR4ZC0+bGVuID0gRVRIX1pMRU47Ci0JfQotCWVsc2UKLQkJcHR4ZC0+bGVuID0gc2tiLT5sZW47Ci0KLQlwcy0+dHhfcGFja2V0cysrOwotCXBzLT50eF9ieXRlcyArPSBwdHhkLT5sZW47Ci0KLQlwdHhkLT5idWZmX3N0YXQgPSBwREItPmRtYV9hZGRyIHwgVFhfRE1BX0VOQUJMRTsKLQlhdV9zeW5jKCk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7Ci0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7Ci0KLQlwcy0+cnhfcGFja2V0cysrOwotCWlmIChzdGF0dXMgJiBSWF9NQ0FTVF9GUkFNRSkKLQkJcHMtPm11bHRpY2FzdCsrOwotCi0JaWYgKHN0YXR1cyAmIFJYX0VSUk9SKSB7Ci0JCXBzLT5yeF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKLQkJCXBzLT5yeF9taXNzZWRfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiAoUlhfT1ZFUkxFTiB8IFJYX09WRVJMRU4gfCBSWF9MRU5fRVJST1IpKQotCQkJcHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKLQkJCXBzLT5yeF9jcmNfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiBSWF9DT0xMKQotCQkJcHMtPmNvbGxpc2lvbnMrKzsKLQl9Ci0JZWxzZQotCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7Ci0KLX0KLQotLyoKLSAqIEF1MTAwMCByZWNlaXZlIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jdm9sYXRpbGUgcnhfZG1hX3QgKnByeGQ7Ci0JdTMyIGJ1ZmZfc3RhdCwgc3RhdHVzOwotCWRiX2Rlc3RfdCAqcERCOwotCXUzMglmcm1sZW47Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCIlczogYXUxMDAwX3J4IGhlYWQgJWRcbiIsIGRldi0+bmFtZSwgYXVwLT5yeF9oZWFkKTsKLQotCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07Ci0JYnVmZl9zdGF0ID0gcHJ4ZC0+YnVmZl9zdGF0OwotCXdoaWxlIChidWZmX3N0YXQgJiBSWF9UX0RPTkUpICB7Ci0JCXN0YXR1cyA9IHByeGQtPnN0YXR1czsKLQkJcERCID0gYXVwLT5yeF9kYl9pbnVzZVthdXAtPnJ4X2hlYWRdOwotCQl1cGRhdGVfcnhfc3RhdHMoZGV2LCBzdGF0dXMpOwotCQlpZiAoIShzdGF0dXMgJiBSWF9FUlJPUikpICB7Ci0KLQkJCS8qIGdvb2QgZnJhbWUgKi8KLQkJCWZybWxlbiA9IChzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSyk7Ci0JCQlmcm1sZW4gLT0gNDsgLyogUmVtb3ZlIEZDUyAqLwotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcm1sZW4gKyAyKTsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBJUCBoZWFkZXIgYWxpZ24gKi8KLQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKLQkJCQkodW5zaWduZWQgY2hhciAqKXBEQi0+dmFkZHIsIGZybWxlbik7Ci0JCQlza2JfcHV0KHNrYiwgZnJtbGVuKTsKLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQluZXRpZl9yeChza2IpOwkvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCi0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgewotCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCi0JCQkJCXByaW50aygicnggbWlzc1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCi0JCQkJCXByaW50aygicnggd2RvZ1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpCi0JCQkJCXByaW50aygicnggcnVudFxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX09WRVJMRU4pCi0JCQkJCXByaW50aygicnggb3ZlcmxlblxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCi0JCQkJCXByaW50aygicnggY29sbFxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX01JSV9FUlJPUikKLQkJCQkJcHJpbnRrKCJyeCBtaWkgZXJyb3JcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9DUkNfRVJST1IpCi0JCQkJCXByaW50aygicnggY3JjIGVycm9yXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTEVOX0VSUk9SKQotCQkJCQlwcmludGsoInJ4IGxlbiBlcnJvclxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1VfQ05UUkxfRlJBTUUpCi0JCQkJCXByaW50aygicnggdSBjb250cm9sIGZyYW1lXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQotCQkJCQlwcmludGsoInJ4IG1pc3NcbiIpOwotCQkJfQotCQl9Ci0JCXByeGQtPmJ1ZmZfc3RhdCA9ICh1MzIpKHBEQi0+ZG1hX2FkZHIgfCBSWF9ETUFfRU5BQkxFKTsKLQkJYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfaGVhZCArIDEpICYgKE5VTV9SWF9ETUEgLSAxKTsKLQkJYXVfc3luYygpOwotCi0JCS8qIG5leHQgZGVzY3JpcHRvciAqLwotCQlwcnhkID0gYXVwLT5yeF9kbWFfcmluZ1thdXAtPnJ4X2hlYWRdOwotCQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBBdTEwMDAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqLwotc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0KLQkvKiBIYW5kbGUgUlggaW50ZXJydXB0cyBmaXJzdCB0byBtaW5pbWl6ZSBjaGFuY2Ugb2Ygb3ZlcnJ1biAqLwotCi0JYXUxMDAwX3J4KGRldik7Ci0JYXUxMDAwX3R4X2FjayhkZXYpOwotCXJldHVybiBJUlFfUkVUVkFMKDEpOwotfQotCi0KLS8qCi0gKiBUaGUgVHggcmluZyBoYXMgYmVlbiBmdWxsIGxvbmdlciB0aGFuIHRoZSB3YXRjaGRvZyB0aW1lb3V0Ci0gKiB2YWx1ZS4gVGhlIHRyYW5zbWl0dGVyIG11c3QgYmUgaHVuZz8KLSAqLwotc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdTEwMDBfdHhfdGltZW91dDogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0JcmVzZXRfbWFjKGRldik7Ci0JYXUxMDAwX2luaXQoZGV2KTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiJXM6IHNldF9yeF9tb2RlOiBmbGFncz0leFxuIiwgZGV2LT5uYW1lLCBkZXYtPmZsYWdzKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCi0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QUk9NSVNDVU9VUzsKLQl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAgfHwKLQkJCSAgIGRldi0+bWNfY291bnQgPiBNVUxUSUNBU1RfRklMVEVSX0xJTUlUKSB7Ci0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QQVNTX0FMTF9NVUxUSTsKLQkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhc3MgYWxsIG11bHRpY2FzdFxuIiwgZGV2LT5uYW1lKTsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwotCi0JCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQlzZXRfYml0KGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik+PjI2LAotCQkJCQkobG9uZyAqKW1jX2ZpbHRlcik7Ci0JCX0KLQkJYXVwLT5tYWMtPm11bHRpX2hhc2hfaGlnaCA9IG1jX2ZpbHRlclsxXTsKLQkJYXVwLT5tYWMtPm11bHRpX2hhc2hfbG93ID0gbWNfZmlsdGVyWzBdOwotCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOwotCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfSEFTSF9NT0RFOwotCX0KLX0KLQotc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlCi0KLQlyZXR1cm4gcGh5X21paV9pb2N0bChhdXAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7Ci19Ci0KIG1vZHVsZV9pbml0KGF1MTAwMF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChhdTEwMDBfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXg4ODc5Ni5jIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCmluZGV4IGE0ZWI2YzQuLjYyZDljOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYworKysgYi9kcml2ZXJzL25ldC9heDg4Nzk2LmMKQEAgLTkzLDYgKzkzLDcgQEAKIAogCXVuc2lnbmVkIGNoYXIJCSBydW5uaW5nOwogCXVuc2lnbmVkIGNoYXIJCSByZXN1bWVfb3BlbjsKKwl1bnNpZ25lZCBpbnQJCSBpcnFmbGFnczsKIAogCXUzMgkJCSByZWdfb2Zmc2V0c1sweDIwXTsKIH07CkBAIC00NzQsNyArNDc1LDggQEAKIAogCWRldl9kYmcoJmF4LT5kZXYtPmRldiwgIiVzOiBvcGVuXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGF4X2VpX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBheF9laV9pbnRlcnJ1cHQsIGF4LT5pcnFmbGFncywKKwkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTczMSwxMiArNzMzLDE5IEBACiAJLyogbG9hZCB0aGUgbWFjLWFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlIGlmIHRoaXMgaXMgdGhlCiAJICogZmlyc3QgdGltZSB3ZSd2ZSBpbml0aWFsaXNlZCAqLwogCi0JaWYgKGZpcnN0X2luaXQgJiYgYXgtPnBsYXQtPmZsYWdzICYgQVhGTEdfTUFDX0ZST01ERVYpIHsKLQkJZWlfb3V0YihFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxICsgRTgzOTBfU1RPUCwKLQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJaWYgKGZpcnN0X2luaXQpIHsKKwkJaWYgKGF4LT5wbGF0LT5mbGFncyAmIEFYRkxHX01BQ19GUk9NREVWKSB7CisJCQllaV9vdXRiKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEgKyBFODM5MF9TVE9QLAorCQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKwkJCQlkZXYtPmRldl9hZGRyW2ldID0KKwkJCQkJZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJfQogCi0JCWZvciAoaSA9IDAgOyBpIDwgRVRIRVJfQUREUl9MRU4gOyBpKyspCi0JCQlkZXYtPmRldl9hZGRyW2ldID0gZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJaWYgKChheC0+cGxhdC0+ZmxhZ3MgJiBBWEZMR19NQUNfRlJPTVBMQVRGT1JNKSAmJgorCQkgICAgIGF4LT5wbGF0LT5tYWNfYWRkcikKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBheC0+cGxhdC0+bWFjX2FkZHIsCisJCQkJRVRIRVJfQUREUl9MRU4pOwogCX0KIAogCWF4X3Jlc2V0XzgzOTAoZGV2KTsKQEAgLTgyOSw3ICs4MzgsNyBAQAogCXN0cnVjdCBheF9kZXZpY2UgICpheDsKIAlzdHJ1Y3QgcmVzb3VyY2UgICAqcmVzOwogCXNpemVfdCBzaXplOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBheF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgYXhfZGV2aWNlKSk7CiAJaWYgKGRldiA9PSBOVUxMKQpAQCAtODUwLDEyICs4NTksMTQgQEAKIAogCS8qIGZpbmQgdGhlIHBsYXRmb3JtIHJlc291cmNlcyAqLwogCi0JcmV0ICA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHJldCA8IDApIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJUlEgc3BlY2lmaWVkXG4iKTsKIAkJZ290byBleGl0X21lbTsKIAl9Ci0JZGV2LT5pcnEgPSByZXQ7CisKKwlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisJYXgtPmlycWZsYWdzID0gcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggZGM1ZjA1MS4uNWM4NDU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTg3NCw3ICs4NzQsNyBAQAogCX0KIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWI0NF9lbmFibGVfaW50cyhicCk7CiAJfQogCkBAIC05MDYsMTMgKzkwNiwxMyBAQAogCQkJZ290byBpcnFfYWNrOwogCQl9CiAKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKIAkJCS8qIE5PVEU6IFRoZXNlIHdyaXRlcyBhcmUgcG9zdGVkIGJ5IHRoZSByZWFkYmFjayBvZgogCQkJICogICAgICAgdGhlIElTVEFUIHJlZ2lzdGVyIGJlbG93LgogCQkJICovCiAJCQlicC0+aXN0YXQgPSBpc3RhdDsKIAkJCV9fYjQ0X2Rpc2FibGVfaW50cyhicCk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZicC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtOTczLDcgKzk3Myw3IEBACiAJCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgbWFwcGluZywgbGVuLAogCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCi0JCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2IobGVuLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJCWJvdW5jZV9za2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LCBsZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKIAkJaWYgKCFib3VuY2Vfc2tiKQogCQkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjkzNGYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZwpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBCRTJORVQKKwl0cmlzdGF0ZSAiU2VydmVyRW5naW5lcycgMTBHYnBzIE5JQyAtIEJsYWRlRW5naW5lIDIiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAorCXNlbGVjdCBJTkVUX0xSTworCWhlbHAKKwlUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBOSUMgZnVuY3Rpb25hbGl0eSBmb3IgU2VydmVyRW5naW5lcycKKwkxMEdicHMgbmV0d29yayBhZGFwdGVyIC0gQmxhZGVFbmdpbmUgMi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvYmVuZXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwY2Q4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSB0byBidWlsZCB0aGUgbmV0d29yayBkcml2ZXIgZm9yIFNlcnZlckVuZ2luZSdzIEJsYWRlRW5naW5lLgorIworCitvYmotJChDT05GSUdfQkUyTkVUKSArPSBiZTJuZXQubworCitiZTJuZXQteSA6PSAgYmVfbWFpbi5vIGJlX2NtZHMubyBiZV9ldGh0b29sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OWRkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpZm5kZWYgQkVfSAorI2RlZmluZSBCRV9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgorCisjaW5jbHVkZSAiYmVfaHcuaCIKKworI2RlZmluZSBEUlZfVkVSCQkJIjIuMC4zNDgiCisjZGVmaW5lIERSVl9OQU1FCQkiYmUybmV0IgorI2RlZmluZSBCRV9OQU1FCQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUyIDEwR2JwcyBOSUMiCisjZGVmaW5lIERSVl9ERVNDCQlCRV9OQU1FICJEcml2ZXIiCisKKy8qIE51bWJlciBvZiBieXRlcyBvZiBhbiBSWCBmcmFtZSB0aGF0IGFyZSBjb3BpZWQgdG8gc2tiLT5kYXRhICovCisjZGVmaW5lIEJFX0hEUl9MRU4gCQk2NAorI2RlZmluZSBCRV9NQVhfSlVNQk9fRlJBTUVfU0laRQk5MDE4CisjZGVmaW5lIEJFX01JTl9NVFUJCTI1NgorCisjZGVmaW5lIEJFX05VTV9WTEFOU19TVVBQT1JURUQJNjQKKyNkZWZpbmUgQkVfTUFYX0VRRAkJOTYKKyNkZWZpbmUJQkVfTUFYX1RYX0ZSQUdfQ09VTlQJMzAKKworI2RlZmluZSBFVk5UX1FfTEVOCQkxMDI0CisjZGVmaW5lIFRYX1FfTEVOCQkyMDQ4CisjZGVmaW5lIFRYX0NRX0xFTgkJMTAyNAorI2RlZmluZSBSWF9RX0xFTgkJMTAyNAkvKiBEb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciB2YWx1ZSAqLworI2RlZmluZSBSWF9DUV9MRU4JCTEwMjQKKyNkZWZpbmUgTUNDX1FfTEVOCQk2NAkvKiB0b3RhbCBzaXplIG5vdCB0byBleGNlZWQgOCBwYWdlcyAqLworI2RlZmluZSBNQ0NfQ1FfTEVOCQkyNTYKKworI2RlZmluZSBCRV9OQVBJX1dFSUdIVAkJNjQKKyNkZWZpbmUgTUFYX1JYX1BPU1QgCQlCRV9OQVBJX1dFSUdIVCAvKiBGcmFncyBwb3N0ZWQgYXQgYSB0aW1lICovCisjZGVmaW5lIFJYX0ZSQUdTX1JFRklMTF9XTQkoUlhfUV9MRU4gLSBNQVhfUlhfUE9TVCkKKworI2RlZmluZSBCRV9NQVhfTFJPX0RFU0NSSVBUT1JTICAxNgorI2RlZmluZSBCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FICAxNgorCitzdHJ1Y3QgYmVfZG1hX21lbSB7CisJdm9pZCAqdmE7CisJZG1hX2FkZHJfdCBkbWE7CisJdTMyIHNpemU7Cit9OworCitzdHJ1Y3QgYmVfcXVldWVfaW5mbyB7CisJc3RydWN0IGJlX2RtYV9tZW0gZG1hX21lbTsKKwl1MTYgbGVuOworCXUxNiBlbnRyeV9zaXplOwkvKiBTaXplIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHF1ZXVlICovCisJdTE2IGlkOworCXUxNiB0YWlsLCBoZWFkOworCWJvb2wgY3JlYXRlZDsKKwlhdG9taWNfdCB1c2VkOwkvKiBOdW1iZXIgb2YgdmFsaWQgZWxlbWVudHMgaW4gdGhlIHF1ZXVlICovCit9OworCitzdHJ1Y3QgYmVfY3RybF9pbmZvIHsKKwl1OCBfX2lvbWVtICpjc3I7CisJdTggX19pb21lbSAqZGI7CQkvKiBEb29yIEJlbGwgKi8KKwl1OCBfX2lvbWVtICpwY2ljZmc7CS8qIFBDSSBjb25maWcgc3BhY2UgKi8KKwlpbnQgcGNpX2Z1bmM7CisKKwkvKiBNYm94IHVzZWQgZm9yIGNtZCByZXF1ZXN0L3Jlc3BvbnNlICovCisJc3BpbmxvY2tfdCBjbWRfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIGNtZHMgdG8gQkUgY2FyZCAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtOworCS8qIE1ib3ggbWVtIGlzIGFkanVzdGVkIHRvIGFsaWduIHRvIDE2IGJ5dGVzLiBUaGUgYWxsb2NhdGVkIGFkZHIKKwkgKiBpcyBzdG9yZWQgZm9yIGZyZWVpbmcgcHVycG9zZSAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtX2FsbG9jZWQ7Cit9OworCisjaW5jbHVkZSAiYmVfY21kcy5oIgorCitzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyB7CisJdTMyIGJlX3R4X3JlcXM7CQkvKiBudW1iZXIgb2YgVFggcmVxdWVzdHMgaW5pdGlhdGVkICovCisJdTMyIGJlX3R4X3N0b3BzOwkvKiBudW1iZXIgb2YgdGltZXMgVFggUSB3YXMgc3RvcHBlZCAqLworCXUzMiBiZV9md2RfcmVxczsJLyogbnVtYmVyIG9mIHNlbmQgcmVxcyB0aHJvdWdoIGZvcndhcmRpbmcgaS9mICovCisJdTMyIGJlX3R4X3dyYnM7CQkvKiBudW1iZXIgb2YgdHggV1JCcyB1c2VkICovCisJdTMyIGJlX3R4X2V2ZW50czsJLyogbnVtYmVyIG9mIHR4IGNvbXBsZXRpb24gZXZlbnRzICAqLworCXUzMiBiZV90eF9jb21wbDsJLyogbnVtYmVyIG9mIHR4IGNvbXBsZXRpb24gZW50cmllcyBwcm9jZXNzZWQgKi8KKwl1bG9uZyBiZV90eF9qaWZmaWVzOworCXU2NCBiZV90eF9ieXRlczsKKwl1NjQgYmVfdHhfYnl0ZXNfcHJldjsKKwl1MzIgYmVfdHhfcmF0ZTsKKworCXUzMiBjYWNoZV9iYXJyaWVyWzE2XTsKKworCXUzMiBiZV9ldGhyeF9wb3N0X2ZhaWw7LyogbnVtYmVyIG9mIGV0aHJ4IGJ1ZmZlciBhbGxvYyBmYWlsdXJlcyAqLworCXUzMiBiZV9wb2xsczsJCS8qIG51bWJlciBvZiB0aW1lcyBOQVBJIGNhbGxlZCBwb2xsIGZ1bmN0aW9uICovCisJdTMyIGJlX3J4X2V2ZW50czsJLyogbnVtYmVyIG9mIHVjYXN0IHJ4IGNvbXBsZXRpb24gZXZlbnRzICAqLworCXUzMiBiZV9yeF9jb21wbDsJLyogbnVtYmVyIG9mIHJ4IGNvbXBsZXRpb24gZW50cmllcyBwcm9jZXNzZWQgKi8KKwl1MzIgYmVfbHJvX2hncmFtX2RhdGFbOF07CS8qIGhpc3RvZ3JhbSBvZiBMUk8gZGF0YSBwYWNrZXRzICovCisJdTMyIGJlX2xyb19oZ3JhbV9hY2tbOF07CS8qIGhpc3RvZ3JhbSBvZiBMUk8gQUNLcyAqLworCXVsb25nIGJlX3J4X2ppZmZpZXM7CisJdTY0IGJlX3J4X2J5dGVzOworCXU2NCBiZV9yeF9ieXRlc19wcmV2OworCXUzMiBiZV9yeF9yYXRlOworCS8qIG51bWJlciBvZiBub24gZXRoZXIgdHlwZSBJSSBmcmFtZXMgZHJvcHBlZCB3aGVyZQorCSAqIGZyYW1lIGxlbiA+IGxlbmd0aCBmaWVsZCBvZiBNYWMgSGRyICovCisJdTMyIGJlXzgwMl8zX2Ryb3BwZWRfZnJhbWVzOworCS8qIG51bWJlciBvZiBub24gZXRoZXIgdHlwZSBJSSBmcmFtZXMgbWFsZm9ybWVkIHdoZXJlCisJICogaW4gZnJhbWUgbGVuIDwgbGVuZ3RoIGZpZWxkIG9mIE1hYyBIZHIgKi8KKwl1MzIgYmVfODAyXzNfbWFsZm9ybWVkX2ZyYW1lczsKKwl1MzIgYmVfcnhjcF9lcnI7CS8qIE51bSByeCBjb21wbGV0aW9uIGVudHJpZXMgdy8gZXJyIHNldC4gKi8KKwl1bG9uZyByeF9mcHNfamlmZmllczsJLyogamlmZmllcyBhdCBsYXN0IEZQUyBjYWxjICovCisJdTMyIGJlX3J4X2ZyYWdzOworCXUzMiBiZV9wcmV2X3J4X2ZyYWdzOworCXUzMiBiZV9yeF9mcHM7CQkvKiBSeCBmcmFncyBwZXIgc2Vjb25kICovCit9OworCitzdHJ1Y3QgYmVfc3RhdHNfb2JqIHsKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyBkcnZyX3N0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBjbWQ7Cit9OworCitzdHJ1Y3QgYmVfZXFfb2JqIHsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOworCWNoYXIgZGVzY1szMl07CisKKwkvKiBBZGFwdGl2ZSBpbnRlcnJ1cHQgY29hbGVzY2luZyAoQUlDKSBpbmZvICovCisJYm9vbCBlbmFibGVfYWljOworCXUxNiBtaW5fZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1MTYgbWF4X2VxZDsJCS8qIGluIHVzZWNzICovCisJdTE2IGN1cl9lcWQ7CQkvKiBpbiB1c2VjcyAqLworCisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7Cit9OworCitzdHJ1Y3QgYmVfdHhfb2JqIHsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGNxOworCS8qIFJlbWVtYmVyIHRoZSBza2JzIHRoYXQgd2VyZSB0cmFuc21pdHRlZCAqLworCXN0cnVjdCBza19idWZmICpzZW50X3NrYl9saXN0W1RYX1FfTEVOXTsKK307CisKKy8qIFN0cnVjdCB0byByZW1lbWJlciB0aGUgcGFnZXMgcG9zdGVkIGZvciByeCBmcmFncyAqLworc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyB7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBidXM7CisJdTE2IHBhZ2Vfb2Zmc2V0OworCWJvb2wgbGFzdF9wYWdlX3VzZXI7Cit9OworCitzdHJ1Y3QgYmVfcnhfb2JqIHsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGNxOworCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gcGFnZV9pbmZvX3RibFtSWF9RX0xFTl07CisJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CisJc3RydWN0IG5ldF9scm9fZGVzYyBscm9fZGVzY1tCRV9NQVhfTFJPX0RFU0NSSVBUT1JTXTsKK307CisKKyNkZWZpbmUgQkVfTlVNX01TSVhfVkVDVE9SUwkJMgkvKiAxIGVhY2ggZm9yIFR4IGFuZCBSeCAqLworc3RydWN0IGJlX2FkYXB0ZXIgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwkvKiBNYm94LCBwY2kgY29uZmlnLCBjc3IgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBiZV9jdHJsX2luZm8gY3RybDsKKworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tCRV9OVU1fTVNJWF9WRUNUT1JTXTsKKwlib29sIG1zaXhfZW5hYmxlZDsKKwlib29sIGlzcl9yZWdpc3RlcmVkOworCisJLyogVFggUmluZ3MgKi8KKwlzdHJ1Y3QgYmVfZXFfb2JqIHR4X2VxOworCXN0cnVjdCBiZV90eF9vYmogdHhfb2JqOworCisJdTMyIGNhY2hlX2xpbmVfYnJlYWtbOF07CisKKwkvKiBSeCByaW5ncyAqLworCXN0cnVjdCBiZV9lcV9vYmogcnhfZXE7CisJc3RydWN0IGJlX3J4X29iaiByeF9vYmo7CisJdTMyIGJpZ19wYWdlX3NpemU7CS8qIENvbXBvdW5kZWQgcGFnZSBzaXplIHNoYXJlZCBieSByeCB3cmJzICovCisJYm9vbCByeF9wb3N0X3N0YXJ2ZWQ7CS8qIFplcm8gcnggZnJhZ3MgaGF2ZSBiZWVuIHBvc3RlZCB0byBCRSAqLworCisJc3RydWN0IHZsYW5fZ3JvdXAgKnZsYW5fZ3JwOworCXUxNiBudW1fdmxhbnM7CisJdTggdmxhbl90YWdbVkxBTl9HUk9VUF9BUlJBWV9MRU5dOworCisJc3RydWN0IGJlX3N0YXRzX29iaiBzdGF0czsKKwkvKiBXb3JrIHF1ZXVlIHVzZWQgdG8gcGVyZm9ybSBwZXJpb2RpYyB0YXNrcyBsaWtlIGdldHRpbmcgc3RhdGlzdGljcyAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKworCS8qIEV0aHRvb2wga25vYnMgYW5kIGluZm8gKi8KKwlib29sIHJ4X2NzdW07IAkJLyogQkUgY2FyZCBtdXN0IHBlcmZvcm0gcngtY2hlY2tzdW1taW5nICovCisJdTMyIG1heF9yeF9jb2FsOworCWNoYXIgZndfdmVyW0ZXX1ZFUl9MRU5dOworCXUzMiBpZl9oYW5kbGU7CQkvKiBVc2VkIHRvIGNvbmZpZ3VyZSBmaWx0ZXJpbmcgKi8KKwl1MzIgcG1hY19pZDsJCS8qIE1BQyBhZGRyIGhhbmRsZSB1c2VkIGJ5IEJFIGNhcmQgKi8KKworCXN0cnVjdCBiZV9saW5rX2luZm8gbGluazsKKwl1MzIgcG9ydF9udW07Cit9OworCitleHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOworCisjZGVmaW5lIGRydnJfc3RhdHMoYWRhcHRlcikJCSgmYWRhcHRlci0+c3RhdHMuZHJ2cl9zdGF0cykKKworI2RlZmluZSBCRV9TRVRfTkVUREVWX09QUyhuZXRkZXYsIG9wcykJKG5ldGRldi0+bmV0ZGV2X29wcyA9IG9wcykKKworc3RhdGljIGlubGluZSB1MzIgTU9EVUxPKHUxNiB2YWwsIHUxNiBsaW1pdCkKK3sKKwlCVUdfT04obGltaXQgJiAobGltaXQgLSAxKSk7CisJcmV0dXJuIHZhbCAmIChsaW1pdCAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5kZXhfYWR2KHUxNiAqaW5kZXgsIHUxNiB2YWwsIHUxNiBsaW1pdCkKK3sKKwkqaW5kZXggPSBNT0RVTE8oKCppbmRleCArIHZhbCksIGxpbWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluZGV4X2luYyh1MTYgKmluZGV4LCB1MTYgbGltaXQpCit7CisJKmluZGV4ID0gTU9EVUxPKCgqaW5kZXggKyAxKSwgbGltaXQpOworfQorCisjZGVmaW5lIFBBR0VfU0hJRlRfNEsJCTEyCisjZGVmaW5lIFBBR0VfU0laRV80SwkJKDEgPDwgUEFHRV9TSElGVF80SykKKworLyogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMgc3Bhbm5lZCBieSB0aGUgZGF0YSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkciAqLworI2RlZmluZSBQQUdFU180S19TUEFOTkVEKF9hZGRyZXNzLCBzaXplKSAJCQkJXAorCQkoKHUzMikoKCgoc2l6ZV90KShfYWRkcmVzcykgJiAoUEFHRV9TSVpFXzRLIC0gMSkpICsgCVwKKwkJCShzaXplKSArIChQQUdFX1NJWkVfNEsgLSAxKSkgPj4gUEFHRV9TSElGVF80SykpCisKKy8qIEJ5dGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byBnaXZlbiBhZGRyZXNzICovCisjZGVmaW5lIE9GRlNFVF9JTl9QQUdFKGFkZHIpCQkJCQkJXAorCQkgKChzaXplX3QpKGFkZHIpICYgKFBBR0VfU0laRV80Sy0xKSkKKworLyogUmV0dXJucyBiaXQgb2Zmc2V0IHdpdGhpbiBhIERXT1JEIG9mIGEgYml0ZmllbGQgKi8KKyNkZWZpbmUgQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3QsIGZpZWxkKSAgCQkJCVwKKwkJKCgoc2l6ZV90KSYoKChfc3RydWN0ICopMCktPmZpZWxkKSklMzIpCisKKy8qIFJldHVybnMgdGhlIGJpdCBtYXNrIG9mIHRoZSBmaWVsZCB0aGF0IGlzIE5PVCBzaGlmdGVkIGludG8gbG9jYXRpb24uICovCitzdGF0aWMgaW5saW5lIHUzMiBhbWFwX21hc2sodTMyIGJpdHNpemUpCit7CisJcmV0dXJuIChiaXRzaXplID09IDMyID8gMHhGRkZGRkZGRiA6ICgxIDw8IGJpdHNpemUpIC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYW1hcF9zZXQodm9pZCAqcHRyLCB1MzIgZHdfb2Zmc2V0LCB1MzIgbWFzaywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCXUzMiAqZHcgPSAodTMyICopIHB0ciArIGR3X29mZnNldDsKKwkqZHcgJj0gfihtYXNrIDw8IG9mZnNldCk7CisJKmR3IHw9IChtYXNrICYgdmFsdWUpIDw8IG9mZnNldDsKK30KKworI2RlZmluZSBBTUFQX1NFVF9CSVRTKF9zdHJ1Y3QsIGZpZWxkLCBwdHIsIHZhbCkJCQkJXAorCQlhbWFwX3NldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCksCQlcCisJCQl2YWwpCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFtYXBfZ2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQpCit7CisJdTMyICpkdyA9ICh1MzIgKikgcHRyOworCXJldHVybiBtYXNrICYgKCooZHcgKyBkd19vZmZzZXQpID4+IG9mZnNldCk7Cit9CisKKyNkZWZpbmUgQU1BUF9HRVRfQklUUyhfc3RydWN0LCBmaWVsZCwgcHRyKQkJCQlcCisJCWFtYXBfZ2V0KHB0ciwJCQkJCQlcCisJCQlvZmZzZXRvZihfc3RydWN0LCBmaWVsZCkvMzIsCQkJXAorCQkJYW1hcF9tYXNrKHNpemVvZigoKF9zdHJ1Y3QgKikwKS0+ZmllbGQpKSwJXAorCQkJQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3QsIGZpZWxkKSkKKworI2RlZmluZSBiZV9kd3NfY3B1X3RvX2xlKHdyYiwgbGVuKQlzd2FwX2R3cyh3cmIsIGxlbikKKyNkZWZpbmUgYmVfZHdzX2xlX3RvX2NwdSh3cmIsIGxlbikJc3dhcF9kd3Mod3JiLCBsZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9kd3Modm9pZCAqd3JiLCBpbnQgbGVuKQoreworI2lmZGVmIF9fQklHX0VORElBTgorCXUzMiAqZHcgPSB3cmI7CisJQlVHX09OKGxlbiAlIDQpOworCWRvIHsKKwkJKmR3ID0gY3B1X3RvX2xlMzIoKmR3KTsKKwkJZHcrKzsKKwkJbGVuIC09IDQ7CisJfSB3aGlsZSAobGVuKTsKKyNlbmRpZgkJCQkvKiBfX0JJR19FTkRJQU4gKi8KK30KKworc3RhdGljIGlubGluZSB1OCBpc190Y3BfcGt0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTggdmFsID0gMDsKKworCWlmIChpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSA0KQorCQl2YWwgPSAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKTsKKwllbHNlIGlmIChpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSA2KQorCQl2YWwgPSAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBORVhUSERSX1RDUCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHU4IGlzX3VkcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1OCB2YWwgPSAwOworCisJaWYgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpCisJCXZhbCA9IChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApOworCWVsc2UgaWYgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDYpCisJCXZhbCA9IChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IE5FWFRIRFJfVURQKTsKKworCXJldHVybiB2YWw7Cit9CisKKyNlbmRpZgkJCQkvKiBCRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0NGFlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMCwwICsxLDg2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaW5jbHVkZSAiYmUuaCIKKworc3RhdGljIGludCBiZV9tYm94X2RiX3JlYWR5X3dhaXQodm9pZCBfX2lvbWVtICpkYikKK3sKKwlpbnQgY250ID0gMCwgd2FpdCA9IDU7CisJdTMyIHJlYWR5OworCisJZG8geworCQlyZWFkeSA9IGlvcmVhZDMyKGRiKSAmIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCQlpZiAocmVhZHkpCisJCQlicmVhazsKKworCQlpZiAoY250ID4gMjAwMDAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkJIjogbWJveF9kYiBwb2xsIHRpbWVkIG91dFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoY250ID4gNTApCisJCQl3YWl0ID0gMjAwOworCQljbnQgKz0gd2FpdDsKKwkJdWRlbGF5KHdhaXQpOworCX0gd2hpbGUgKHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnNlcnQgdGhlIG1haWxib3ggYWRkcmVzcyBpbnRvIHRoZSBkb29yYmVsbCBpbiB0d28gc3RlcHMKKyAqLworc3RhdGljIGludCBiZV9tYm94X2RiX3Jpbmcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwlpbnQgc3RhdHVzOworCXUxNiBjb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzOworCXUzMiB2YWwgPSAwOworCXZvaWQgX19pb21lbSAqZGIgPSBjdHJsLT5kYiArIE1QVV9NQUlMQk9YX0RCX09GRlNFVDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0gPSAmY3RybC0+bWJveF9tZW07CisJc3RydWN0IGJlX21jY19tYWlsYm94ICptYm94ID0gbWJveF9tZW0tPnZhOworCXN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmNxZSA9ICZtYm94LT5jcWU7CisKKwltZW1zZXQoY3FlLCAwLCBzaXplb2YoKmNxZSkpOworCisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwl2YWwgfD0gTVBVX01BSUxCT1hfREJfSElfTUFTSzsKKwkvKiBhdCBiaXRzIDIgLSAzMSBwbGFjZSBtYm94IGRtYSBhZGRyIG1zYiBiaXRzIDM0IC0gNjMgKi8KKwl2YWwgfD0gKHVwcGVyXzMyX2JpdHMobWJveF9tZW0tPmRtYSkgPj4gMikgPDwgMjsKKwlpb3dyaXRlMzIodmFsLCBkYik7CisKKwkvKiB3YWl0IGZvciByZWFkeSB0byBiZSBzZXQgKi8KKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JlYWR5X3dhaXQoZGIpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXZhbCA9IDA7CisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CisJLyogYXQgYml0cyAyIC0gMzEgcGxhY2UgbWJveCBkbWEgYWRkciBsc2IgYml0cyA0IC0gMzMgKi8KKwl2YWwgfD0gKHUzMikobWJveF9tZW0tPmRtYSA+PiA0KSA8PCAyOworCWlvd3JpdGUzMih2YWwsIGRiKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChkYik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogY29tcGwgZW50cnkgaGFzIGJlZW4gbWFkZSBub3cgKi8KKwliZV9kd3NfbGVfdG9fY3B1KGNxZSwgc2l6ZW9mKCpjcWUpKTsKKwlpZiAoIShjcWUtPmZsYWdzICYgQ1FFX0ZMQUdTX1ZBTElEX01BU0spKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogRVJST1IgaW52YWxpZCBtYm94IGNvbXBsXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNvbXBsX3N0YXR1cyA9IChjcWUtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0NPTVBMX1NISUZUKSAmCisJCQkJQ1FFX1NUQVRVU19DT01QTF9NQVNLOworCWlmIChjb21wbF9zdGF0dXMgIT0gTUNDX1NUQVRVU19TVUNDRVNTKSB7CisJCWV4dGRfc3RhdHVzID0gKGNxZS0+c3RhdHVzID4+IENRRV9TVEFUVVNfRVhURF9TSElGVCkgJgorCQkJCUNRRV9TVEFUVVNfRVhURF9NQVNLOworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkiOiBFUlJPUiBpbiBjbWQgY29tcGwuIHN0YXR1cyhjb21wbC9leHRkKT0lZC8lZFxuIiwKKwkJCWNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXMpOworCX0KKworCXJldHVybiBjb21wbF9zdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfUE9TVF9zdGFnZV9nZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2ICpzdGFnZSkKK3sKKwl1MzIgc2VtID0gaW9yZWFkMzIoY3RybC0+Y3NyICsgTVBVX0VQX1NFTUFQSE9SRV9PRkZTRVQpOworCisJKnN0YWdlID0gc2VtICYgRVBfU0VNQVBIT1JFX1BPU1RfU1RBR0VfTUFTSzsKKwlpZiAoKHNlbSA+PiBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfU0hJRlQpICYgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX01BU0spCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlX1BPU1Rfc3RhZ2VfcG9sbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcG9sbF9zdGFnZSkKK3sKKwl1MTYgc3RhZ2UsIGNudCwgZXJyb3I7CisJZm9yIChjbnQgPSAwOyBjbnQgPCA1MDAwOyBjbnQrKykgeworCQllcnJvciA9IGJlX1BPU1Rfc3RhZ2VfZ2V0KGN0cmwsICZzdGFnZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAtMTsKKworCQlpZiAoc3RhZ2UgPT0gcG9sbF9zdGFnZSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwMCk7CisJfQorCWlmIChzdGFnZSAhPSBwb2xsX3N0YWdlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGJlX2NtZF9QT1NUKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisJdTE2IHN0YWdlLCBlcnJvcjsKKworCWVycm9yID0gYmVfUE9TVF9zdGFnZV9nZXQoY3RybCwgJnN0YWdlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyOworCisJaWYgKHN0YWdlID09IFBPU1RfU1RBR0VfQVJNRldfUkRZKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGFnZSAhPSBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZKQorCQlnb3RvIGVycjsKKworCS8qIE9uIGF3YWl0aW5nIGhvc3QgcmR5LCByZXNldCBhbmQgYWdhaW4gcG9sbCBvbiBhd2FpdGluZyBob3N0IHJkeSAqLworCWlvd3JpdGUzMihQT1NUX1NUQUdFX0JFX1JFU0VULCBjdHJsLT5jc3IgKyBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCk7CisJZXJyb3IgPSBiZV9QT1NUX3N0YWdlX3BvbGwoY3RybCwgUE9TVF9TVEFHRV9BV0FJVElOR19IT1NUX1JEWSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycjsKKworCS8qIE5vdyBraWNrb2ZmIFBPU1QgYW5kIHBvbGwgb24gYXJtZncgcmVhZHkgKi8KKwlpb3dyaXRlMzIoUE9TVF9TVEFHRV9IT1NUX1JEWSwgY3RybC0+Y3NyICsgTVBVX0VQX1NFTUFQSE9SRV9PRkZTRVQpOworCWVycm9yID0gYmVfUE9TVF9zdGFnZV9wb2xsKGN0cmwsIFBPU1RfU1RBR0VfQVJNRldfUkRZKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBFUlJPUiwgc3RhZ2U9JWRcbiIsIHN0YWdlKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZW1iZWRkZWRfcGF5bG9hZChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQoreworCXJldHVybiB3cmItPnBheWxvYWQuZW1iZWRkZWRfcGF5bG9hZDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmVfc2dlICpub25lbWJlZGRlZF9zZ2woc3RydWN0IGJlX21jY193cmIgKndyYikKK3sKKwlyZXR1cm4gJndyYi0+cGF5bG9hZC5zZ2xbMF07Cit9CisKKy8qIERvbid0IHRvdWNoIHRoZSBoZHIgYWZ0ZXIgaXQncyBwcmVwYXJlZCAqLworc3RhdGljIHZvaWQgYmVfd3JiX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIsIGludCBwYXlsb2FkX2xlbiwKKwkJCQlib29sIGVtYmVkZGVkLCB1OCBzZ2VfY250KQoreworCWlmIChlbWJlZGRlZCkKKwkJd3JiLT5lbWJlZGRlZCB8PSBNQ0NfV1JCX0VNQkVEREVEX01BU0s7CisJZWxzZQorCQl3cmItPmVtYmVkZGVkIHw9IChzZ2VfY250ICYgTUNDX1dSQl9TR0VfQ05UX01BU0spIDw8CisJCQkJTUNDX1dSQl9TR0VfQ05UX1NISUZUOworCXdyYi0+cGF5bG9hZF9sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwliZV9kd3NfY3B1X3RvX2xlKHdyYiwgMjApOworfQorCisvKiBEb24ndCB0b3VjaCB0aGUgaGRyIGFmdGVyIGl0J3MgcHJlcGFyZWQgKi8KK3N0YXRpYyB2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQkJdTggc3Vic3lzdGVtLCB1OCBvcGNvZGUsIGludCBjbWRfbGVuKQoreworCXJlcV9oZHItPm9wY29kZSA9IG9wY29kZTsKKwlyZXFfaGRyLT5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07CisJcmVxX2hkci0+cmVxdWVzdF9sZW5ndGggPSBjcHVfdG9fbGUzMihjbWRfbGVuIC0gc2l6ZW9mKCpyZXFfaGRyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUoc3RydWN0IHBoeXNfYWRkciAqcGFnZXMsIHUzMiBtYXhfcGFnZXMsCisJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQoreworCWludCBpLCBidWZfcGFnZXMgPSBtaW4oUEFHRVNfNEtfU1BBTk5FRChtZW0tPnZhLCBtZW0tPnNpemUpLCBtYXhfcGFnZXMpOworCXU2NCBkbWEgPSAodTY0KW1lbS0+ZG1hOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zl9wYWdlczsgaSsrKSB7CisJCXBhZ2VzW2ldLmxvID0gY3B1X3RvX2xlMzIoZG1hICYgMHhGRkZGRkZGRik7CisJCXBhZ2VzW2ldLmhpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhkbWEpKTsKKwkJZG1hICs9IFBBR0VfU0laRV80SzsKKwl9Cit9CisKKy8qIENvbnZlcnRzIGludGVycnVwdCBkZWxheSBpbiBtaWNyb3NlY29uZHMgdG8gbXVsdGlwbGllciB2YWx1ZSAqLworc3RhdGljIHUzMiBlcV9kZWxheV90b19tdWx0KHUzMiB1c2VjX2RlbGF5KQoreworI2RlZmluZSBNQVhfSU5UUl9SQVRFCQkJNjUxMDQyCisJY29uc3QgdTMyIHJvdW5kID0gMTA7CisJdTMyIG11bHRpcGxpZXI7CisKKwlpZiAodXNlY19kZWxheSA9PSAwKQorCQltdWx0aXBsaWVyID0gMDsKKwllbHNlIHsKKwkJdTMyIGludGVycnVwdF9yYXRlID0gMTAwMDAwMCAvIHVzZWNfZGVsYXk7CisJCS8qIE1heCBkZWxheSwgY29ycmVzcG9uZGluZyB0byB0aGUgbG93ZXN0IGludGVycnVwdCByYXRlICovCisJCWlmIChpbnRlcnJ1cHRfcmF0ZSA9PSAwKQorCQkJbXVsdGlwbGllciA9IDEwMjM7CisJCWVsc2UgeworCQkJbXVsdGlwbGllciA9IChNQVhfSU5UUl9SQVRFIC0gaW50ZXJydXB0X3JhdGUpICogcm91bmQ7CisJCQltdWx0aXBsaWVyIC89IGludGVycnVwdF9yYXRlOworCQkJLyogUm91bmQgdGhlIG11bHRpcGxpZXIgdG8gdGhlIGNsb3Nlc3QgdmFsdWUuKi8KKwkJCW11bHRpcGxpZXIgPSAobXVsdGlwbGllciArIHJvdW5kLzIpIC8gcm91bmQ7CisJCQltdWx0aXBsaWVyID0gbWluKG11bHRpcGxpZXIsICh1MzIpMTAyMyk7CisJCX0KKwl9CisJcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21ib3goc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtKQoreworCXJldHVybiAmKChzdHJ1Y3QgYmVfbWNjX21haWxib3ggKikobWJveF9tZW0tPnZhKSktPndyYjsKK30KKworaW50IGJlX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZlcS0+ZG1hX21lbTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9ICBjcHVfdG9fbGUxNihQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgZnVuYywgcmVxLT5jb250ZXh0LAorCQkJY3RybC0+cGNpX2Z1bmMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgdmFsaWQsIHJlcS0+Y29udGV4dCwgMSk7CisJLyogNGJ5dGUgZXFlKi8KKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIHNpemUsIHJlcS0+Y29udGV4dCwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBjb3VudCwgcmVxLT5jb250ZXh0LAorCQkJX19pbG9nMl91MzIoZXEtPmxlbi8yNTYpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGRlbGF5bXVsdCwgcmVxLT5jb250ZXh0LAorCQkJZXFfZGVsYXlfdG9fbXVsdChlcV9kZWxheSkpOworCWJlX2R3c19jcHVfdG9fbGUocmVxLT5jb250ZXh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQllcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5lcV9pZCk7CisJCWVxLT5jcmVhdGVkID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX21hY19hZGRyX3F1ZXJ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkciwKKwkJCXU4IHR5cGUsIGJvb2wgcGVybWFuZW50LCB1MzIgaWZfaGFuZGxlKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfbWFjX3F1ZXJ5ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2NtZF9yZXNwX21hY19xdWVyeSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9OVFdLX01BQ19RVUVSWSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+dHlwZSA9IHR5cGU7CisJaWYgKHBlcm1hbmVudCkgeworCQlyZXEtPnBlcm1hbmVudCA9IDE7CisJfSBlbHNlIHsKKwkJcmVxLT5pZl9pZCA9IGNwdV90b19sZTE2KCh1MTYpaWZfaGFuZGxlKTsKKwkJcmVxLT5wZXJtYW5lbnQgPSAwOworCX0KKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlpZiAoIXN0YXR1cykKKwkJbWVtY3B5KG1hY19hZGRyLCByZXNwLT5tYWMuYWRkciwgRVRIX0FMRU4pOworCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX3BtYWNfYWRkKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkciwKKwkJdTMyIGlmX2lkLCB1MzIgKnBtYWNfaWQpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9wbWFjX2FkZCAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfUE1BQ19BREQsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPmlmX2lkID0gY3B1X3RvX2xlMzIoaWZfaWQpOworCW1lbWNweShyZXEtPm1hY19hZGRyZXNzLCBtYWNfYWRkciwgRVRIX0FMRU4pOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9wbWFjX2FkZCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJKnBtYWNfaWQgPSBsZTMyX3RvX2NwdShyZXNwLT5wbWFjX2lkKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfcG1hY19kZWwoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2lkLCB1MzIgcG1hY19pZCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3BtYWNfZGVsICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fTlRXS19QTUFDX0RFTCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+aWZfaWQgPSBjcHVfdG9fbGUzMihpZl9pZCk7CisJcmVxLT5wbWFjX2lkID0gY3B1X3RvX2xlMzIocG1hY19pZCk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfY3FfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLAorCQlib29sIHNvbF9ldnRzLCBib29sIG5vX2RlbGF5LCBpbnQgY29hbGVzY2Vfd20pCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9jcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZjcS0+ZG1hX21lbTsKKwl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9ICBjcHVfdG9fbGUxNihQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgY29hbGVzY3dtLCBjdHh0LCBjb2FsZXNjZV93bSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBub2RlbGF5LCBjdHh0LCBub19kZWxheSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBjb3VudCwgY3R4dCwKKwkJCV9faWxvZzJfdTMyKGNxLT5sZW4vMjU2KSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCB2YWxpZCwgY3R4dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBzb2xldmVudCwgY3R4dCwgc29sX2V2dHMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXZlbnRhYmxlLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGVxaWQsIGN0eHQsIGVxLT5pZCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBhcm1lZCwgY3R4dCwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBmdW5jLCBjdHh0LCBjdHJsLT5wY2lfZnVuYyk7CisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQljcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jcV9pZCk7CisJCWNxLT5jcmVhdGVkID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfdHhxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSwKKwkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2V0aF90eF9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmdHhxLT5kbWFfbWVtOworCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OworCWludCBzdGF0dXM7CisJdTMyIGxlbl9lbmNvZGVkOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0VUSCwgT1BDT0RFX0VUSF9UWF9DUkVBVEUsCisJCXNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJcmVxLT51bHBfbnVtID0gQkVfVUxQMV9OVU07CisJcmVxLT50eXBlID0gQkVfRVRIX1RYX1JJTkdfVFlQRV9TVEFOREFSRDsKKworCWxlbl9lbmNvZGVkID0gZmxzKHR4cS0+bGVuKTsgLyogbG9nMihsZW4pICsgMSAqLworCWlmIChsZW5fZW5jb2RlZCA9PSAxNikKKwkJbGVuX2VuY29kZWQgPSAwOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfdHhfY29udGV4dCwgdHhfcmluZ19zaXplLCBjdHh0LCBsZW5fZW5jb2RlZCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF90eF9jb250ZXh0LCBwY2lfZnVuY19pZCwgY3R4dCwKKwkJCWN0cmwtPnBjaV9mdW5jKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQsIGN0eF92YWxpZCwgY3R4dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF90eF9jb250ZXh0LCBjcV9pZF9zZW5kLCBjdHh0LCBjcS0+aWQpOworCisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXRoX3R4X2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJdHhxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNpZCk7CisJCXR4cS0+Y3JlYXRlZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX3J4cV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSwgdTE2IGNxX2lkLCB1MTYgZnJhZ19zaXplLAorCQl1MTYgbWF4X2ZyYW1lX3NpemUsIHUzMiBpZl9pZCwgdTMyIHJzcykKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2V0aF9yeF9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmcnhxLT5kbWFfbWVtOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fRVRILCBPUENPREVfRVRIX1JYX0NSRUFURSwKKwkJc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+Y3FfaWQgPSBjcHVfdG9fbGUxNihjcV9pZCk7CisJcmVxLT5mcmFnX3NpemUgPSBmbHMoZnJhZ19zaXplKSAtIDE7CisJcmVxLT5udW1fcGFnZXMgPSAyOworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCXJlcS0+aW50ZXJmYWNlX2lkID0gY3B1X3RvX2xlMzIoaWZfaWQpOworCXJlcS0+bWF4X2ZyYW1lX3NpemUgPSBjcHVfdG9fbGUxNihtYXhfZnJhbWVfc2l6ZSk7CisJcmVxLT5yc3NfcXVldWUgPSBjcHVfdG9fbGUzMihyc3MpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9ldGhfcnhfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQlyeHEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+aWQpOworCQlyeHEtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogR2VuZXJpYyBkZXN0cm95ZXIgZnVuY3Rpb24gZm9yIGFsbCB0eXBlcyBvZiBxdWV1ZXMgKi8KK2ludCBiZV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQlpbnQgcXVldWVfdHlwZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXU4IHN1YnN5cyA9IDAsIG9wY29kZSA9IDA7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJc3dpdGNoIChxdWV1ZV90eXBlKSB7CisJY2FzZSBRVFlQRV9FUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9DT01NT047CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fRVFfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9DUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9DT01NT047CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fQ1FfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9UWFE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fRVRIOworCQlvcGNvZGUgPSBPUENPREVfRVRIX1RYX0RFU1RST1k7CisJCWJyZWFrOworCWNhc2UgUVRZUEVfUlhROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0VUSDsKKwkJb3Bjb2RlID0gT1BDT0RFX0VUSF9SWF9ERVNUUk9ZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6YmFkIFEgdHlwZSBpbiBRIGRlc3Ryb3kgY21kXG4iKTsKKwkJc3RhdHVzID0gLTE7CisJCWdvdG8gZXJyOworCX0KKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBzdWJzeXMsIG9wY29kZSwgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPmlkID0gY3B1X3RvX2xlMTYocS0+aWQpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworZXJyOgorCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBDcmVhdGUgYW4gcnggZmlsdGVyaW5nIHBvbGljeSBjb25maWd1cmF0aW9uIG9uIGFuIGkvZiAqLworaW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGZsYWdzLCB1OCAqbWFjLAorCQlib29sIHBtYWNfaW52YWxpZCwgdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2lmX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX05UV0tfSU5URVJGQUNFX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+Y2FwYWJpbGl0eV9mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKKwlyZXEtPmVuYWJsZV9mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKKwlpZiAoIXBtYWNfaW52YWxpZCkKKwkJbWVtY3B5KHJlcS0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9pZl9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJCSppZl9oYW5kbGUgPSBsZTMyX3RvX2NwdShyZXNwLT5pbnRlcmZhY2VfaWQpOworCQlpZiAoIXBtYWNfaW52YWxpZCkKKwkJCSpwbWFjX2lkID0gbGUzMl90b19jcHUocmVzcC0+cG1hY19pZCk7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2lmX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGludGVyZmFjZV9pZCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2lmX2Rlc3Ryb3kgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9OVFdLX0lOVEVSRkFDRV9ERVNUUk9ZLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5pbnRlcmZhY2VfaWQgPSBjcHVfdG9fbGUzMihpbnRlcmZhY2VfaWQpOworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgc3RhdHMgaXMgYSBub24gZW1iZWRkZWQgY29tbWFuZDogdGhlIHJlcXVlc3QgaXMgbm90IGVtYmVkZGVkIGluc2lkZQorICogV1JCIGJ1dCBpcyBhIHNlcGFyYXRlIGRtYSBtZW1vcnkgYmxvY2sKKyAqLworaW50IGJlX2NtZF9nZXRfc3RhdHMoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHMgKnJlcSA9IG5vbmVtYl9jbWQtPnZhOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9FVEgsCisJCU9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MsIHNpemVvZigqcmVxKSk7CisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobm9uZW1iX2NtZC0+ZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+c2l6ZSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0cyAqcmVzcCA9IG5vbmVtYl9jbWQtPnZhOworCQliZV9kd3NfbGVfdG9fY3B1KCZyZXNwLT5od19zdGF0cywgc2l6ZW9mKHJlc3AtPmh3X3N0YXRzKSk7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfbGlua19pbmZvICpsaW5rKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfbGlua19zdGF0dXMgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9saW5rX3N0YXR1cyAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJbGluay0+c3BlZWQgPSByZXNwLT5tYWNfc3BlZWQ7CisJCWxpbmstPmR1cGxleCA9IHJlc3AtPm1hY19kdXBsZXg7CisJCWxpbmstPmZhdWx0ID0gcmVzcC0+bWFjX2ZhdWx0OworCX0gZWxzZSB7CisJCWxpbmstPnNwZWVkID0gUEhZX0xJTktfU1BFRURfWkVSTzsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBjaGFyICpmd192ZXIpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZndfdmVyc2lvbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfZndfdmVyc2lvbiAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJc3RybmNweShmd192ZXIsIHJlc3AtPmZpcm13YXJlX3ZlcnNpb25fc3RyaW5nLCBGV19WRVJfTEVOKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIHNldCB0aGUgRVEgZGVsYXkgaW50ZXJ2YWwgb2YgYW4gRVEgdG8gc3BlY2lmaWVkIHZhbHVlICovCitpbnQgYmVfY21kX21vZGlmeV9lcWQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGVxX2lkLCB1MzIgZXFkKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfbW9kaWZ5X2VxX2RlbGF5ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fTU9ESUZZX0VRX0RFTEFZLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5udW1fZXEgPSBjcHVfdG9fbGUzMigxKTsKKwlyZXEtPmRlbGF5WzBdLmVxX2lkID0gY3B1X3RvX2xlMzIoZXFfaWQpOworCXJlcS0+ZGVsYXlbMF0ucGhhc2UgPSAwOworCXJlcS0+ZGVsYXlbMF0uZGVsYXlfbXVsdGlwbGllciA9IGNwdV90b19sZTMyKGVxZCk7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfdmxhbl9jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2lkLCB1MTYgKnZ0YWdfYXJyYXksCisJCQl1MzIgbnVtLCBib29sIHVudGFnZ2VkLCBib29sIHByb21pc2N1b3VzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfdmxhbl9jb25maWcgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9OVFdLX1ZMQU5fQ09ORklHLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5pbnRlcmZhY2VfaWQgPSBpZl9pZDsKKwlyZXEtPnByb21pc2N1b3VzID0gcHJvbWlzY3VvdXM7CisJcmVxLT51bnRhZ2dlZCA9IHVudGFnZ2VkOworCXJlcS0+bnVtX3ZsYW4gPSBudW07CisJaWYgKCFwcm9taXNjdW91cykgeworCQltZW1jcHkocmVxLT5ub3JtYWxfdmxhbiwgdnRhZ19hcnJheSwKKwkJCXJlcS0+bnVtX3ZsYW4gKiBzaXplb2YodnRhZ19hcnJheVswXSkpOworCX0KKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9wcm9taXNjdW91c19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggcG9ydF9udW0sIGJvb2wgZW4pCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9wcm9taXNjdW91c19jb25maWcgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0VUSCwKKwkJT1BDT0RFX0VUSF9QUk9NSVNDVU9VUywgc2l6ZW9mKCpyZXEpKTsKKworCWlmIChwb3J0X251bSkKKwkJcmVxLT5wb3J0MV9wcm9taXNjdW91cyA9IGVuOworCWVsc2UKKwkJcmVxLT5wb3J0MF9wcm9taXNjdW91cyA9IGVuOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPmNtZF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX21jYXN0X21hY19zZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2lkLCB1OCAqbWFjX3RhYmxlLAorCQkJdTMyIG51bSwgYm9vbCBwcm9taXNjdW91cykKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX21jYXN0X21hY19jb25maWcgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVQsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPmludGVyZmFjZV9pZCA9IGlmX2lkOworCXJlcS0+cHJvbWlzY3VvdXMgPSBwcm9taXNjdW91czsKKwlpZiAoIXByb21pc2N1b3VzKSB7CisJCXJlcS0+bnVtX21hYyA9IGNwdV90b19sZTE2KG51bSk7CisJCWlmIChudW0pCisJCQltZW1jcHkocmVxLT5tYWMsIG1hY190YWJsZSwgRVRIX0FMRU4gKiBudW0pOworCX0KKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiB0eF9mYywgdTMyIHJ4X2ZjKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfc2V0X2Zsb3dfY29udHJvbCAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPmNtZF9sb2NrKTsKKworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fU0VUX0ZMT1dfQ09OVFJPTCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+dHhfZmxvd19jb250cm9sID0gY3B1X3RvX2xlMTYoKHUxNil0eF9mYyk7CisJcmVxLT5yeF9mbG93X2NvbnRyb2wgPSBjcHVfdG9fbGUxNigodTE2KXJ4X2ZjKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9nZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiAqdHhfZmMsIHUzMiAqcnhfZmMpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmxvd19jb250cm9sICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+Y21kX2xvY2spOworCisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9HRVRfRkxPV19DT05UUk9MLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfZmxvd19jb250cm9sICpyZXNwID0KKwkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJKnR4X2ZjID0gbGUxNl90b19jcHUocmVzcC0+dHhfZmxvd19jb250cm9sKTsKKwkJKnJ4X2ZjID0gbGUxNl90b19jcHUocmVzcC0+cnhfZmxvd19jb250cm9sKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+Y21kX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfcXVlcnlfZndfY2ZnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiAqcG9ydF9udW0pCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9xdWVyeV9md19jZmcgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRywgc2l6ZW9mKCpyZXEpKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfcXVlcnlfZndfY2ZnICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQkqcG9ydF9udW0gPSBsZTMyX3RvX2NwdShyZXNwLT5waHlzX3BvcnQpOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5jbWRfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCkBAIC0wLDAgKzEsNjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKy8qCisgKiBUaGUgZHJpdmVyIHNlbmRzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnRzIGNvbW1hbmQgcmVxdWVzdHMgdG8gdGhlCisgKiBmaXJtd2FyZSBpbiB0aGUgQkUuIFRoZXNlIHJlcXVlc3RzIGFyZSBjb21tdW5pY2F0ZWQgdG8gdGhlIHByb2Nlc3NvcgorICogdXNpbmcgV29yayBSZXF1ZXN0IEJsb2NrcyAoV1JCcykgc3VibWl0dGVkIHRvIHRoZSBNQ0MtV1JCIHJpbmcgb3IgdmlhIG9uZQorICogV1JCIGluc2lkZSBhIE1BSUxCT1guCisgKiBUaGUgY29tbWFuZHMgYXJlIHNlcnZpY2VkIGJ5IHRoZSBBUk0gcHJvY2Vzc29yIGluIHRoZSBCbGFkZUVuZ2luZSdzIE1QVS4KKyAqLworCitzdHJ1Y3QgYmVfc2dlIHsKKwl1MzIgcGFfbG87CisJdTMyIHBhX2hpOworCXUzMiBsZW47Cit9OworCisjZGVmaW5lIE1DQ19XUkJfRU1CRURERURfTUFTSwkxIAkvKiBiaXQgMCBvZiBkd29yZCAwKi8KKyNkZWZpbmUgTUNDX1dSQl9TR0VfQ05UX1NISUZUCTMJLyogYml0cyAzIC0gNyBvZiBkd29yZCAwICovCisjZGVmaW5lIE1DQ19XUkJfU0dFX0NOVF9NQVNLCTB4MUYJLyogYml0cyAzIC0gNyBvZiBkd29yZCAwICovCitzdHJ1Y3QgYmVfbWNjX3dyYiB7CisJdTMyIGVtYmVkZGVkOwkJLyogZHdvcmQgMCAqLworCXUzMiBwYXlsb2FkX2xlbmd0aDsJLyogZHdvcmQgMSAqLworCXUzMiB0YWcwOwkJLyogZHdvcmQgMiAqLworCXUzMiB0YWcxOwkJLyogZHdvcmQgMyAqLworCXUzMiByc3ZkOwkJLyogZHdvcmQgNCAqLworCXVuaW9uIHsKKwkJdTggZW1iZWRkZWRfcGF5bG9hZFsyMzZdOyAvKiB1c2VkIGJ5IGVtYmVkZGVkIGNtZHMgKi8KKwkJc3RydWN0IGJlX3NnZSBzZ2xbMTldOyAgICAvKiB1c2VkIGJ5IG5vbi1lbWJlZGRlZCBjbWRzICovCisJfSBwYXlsb2FkOworfTsKKworI2RlZmluZSBDUUVfRkxBR1NfVkFMSURfTUFTSyAJCSgxIDw8IDMxKQorI2RlZmluZSBDUUVfRkxBR1NfQVNZTkNfTUFTSyAJCSgxIDw8IDMwKQorI2RlZmluZSBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0sgCSgxIDw8IDI4KQorI2RlZmluZSBDUUVfRkxBR1NfQ09OU1VNRURfTUFTSyAJKDEgPDwgMjcpCisKKy8qIENvbXBsZXRpb24gU3RhdHVzICovCitlbnVtIHsKKwlNQ0NfU1RBVFVTX1NVQ0NFU1MgPSAweDAsCisvKiBUaGUgY2xpZW50IGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKwlNQ0NfU1RBVFVTX0lOU1VGRklDSUVOVF9QUklWSUxFR0VTID0gMHgxLAorLyogQSBwYXJhbWV0ZXIgaW4gdGhlIGNvbW1hbmQgd2FzIGludmFsaWQuICovCisJTUNDX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiA9IDB4MiwKKy8qIFRoZXJlIGFyZSBpbnN1ZmZpY2llbnQgY2hpcCByZXNvdXJjZXMgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworCU1DQ19TVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyA9IDB4MywKKy8qIFRoZSBjb21tYW5kIGlzIGNvbXBsZXRpbmcgYmVjYXVzZSB0aGUgcXVldWUgd2FzIGdldHRpbmcgZmx1c2hlZCAqLworCU1DQ19TVEFUVVNfUVVFVUVfRkxVU0hJTkcgPSAweDQsCisvKiBUaGUgY29tbWFuZCBpcyBjb21wbGV0aW5nIHdpdGggYSBETUEgZXJyb3IgKi8KKwlNQ0NfU1RBVFVTX0RNQV9GQUlMRUQgPSAweDUKK307CisKKyNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9NQVNLCQkweEZGRkYKKyNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9TSElGVAkJMAkvKiBiaXRzIDAgLSAxNSAqLworI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfTUFTSwkJMHhGRkZGCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9TSElGVAkJMAkvKiBiaXRzIDAgLSAxNSAqLworCitzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5IHsKKwl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMCAqLworCXUzMiB0YWcwOwkJLyogZHdvcmQgMSAqLworCXUzMiB0YWcxOwkJLyogZHdvcmQgMiAqLworCXUzMiBmbGFnczsJCS8qIGR3b3JkIDMgKi8KK307CisKK3N0cnVjdCBiZV9tY2NfbWFpbGJveCB7CisJc3RydWN0IGJlX21jY193cmIgd3JiOworCXN0cnVjdCBiZV9tY2NfY3FfZW50cnkgY3FlOworfTsKKworI2RlZmluZSBDTURfU1VCU1lTVEVNX0NPTU1PTgkweDEKKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9FVEggCTB4MworCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19NQUNfUVVFUlkJCQkxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19NQUNfU0VUCQkJMgorI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVAkJMworI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgIAkJNAorI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlkJCTUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUJCQkJMTIKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUJCQkJMTMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFICAgICAgICAJCTIxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19SWF9GSUxURVIgICAgCQkzNAorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OCQkJMzUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfRkxPV19DT05UUk9MCQkJMzYKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRkxPV19DT05UUk9MCQkJMzcKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfRlJBTUVfU0laRQkJCTM5CisjZGVmaW5lIE9QQ09ERV9DT01NT05fTU9ESUZZX0VRX0RFTEFZCQkJNDEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcJCQk0MgorI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfSU5URVJGQUNFX0NSRUFURSAJCTUwCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19JTlRFUkZBQ0VfREVTVFJPWSAJCTUxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfREVTVFJPWSAgICAgICAgCQk1NAorI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0RFU1RST1kgICAgICAgIAkJNTUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9RVUVSWV9GSVJNV0FSRV9DT05GSUcJCTU4CisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19QTUFDX0FERAkJCTU5CisjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19QTUFDX0RFTAkJCTYwCisKKyNkZWZpbmUgT1BDT0RFX0VUSF9BQ1BJX0NPTkZJRwkJCQkyCisjZGVmaW5lIE9QQ09ERV9FVEhfUFJPTUlTQ1VPVVMJCQkJMworI2RlZmluZSBPUENPREVfRVRIX0dFVF9TVEFUSVNUSUNTCQkJNAorI2RlZmluZSBPUENPREVfRVRIX1RYX0NSRUFURQkJCQk3CisjZGVmaW5lIE9QQ09ERV9FVEhfUlhfQ1JFQVRFICAgICAgICAgICAgCQk4CisjZGVmaW5lIE9QQ09ERV9FVEhfVFhfREVTVFJPWSAgICAgICAgICAgCQk5CisjZGVmaW5lIE9QQ09ERV9FVEhfUlhfREVTVFJPWSAgICAgICAgICAgCQkxMAorCitzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgeworCXU4IG9wY29kZTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzdWJzeXN0ZW07CQkvKiBkd29yZCAwICovCisJdTggcG9ydF9udW1iZXI7CQkvKiBkd29yZCAwICovCisJdTggZG9tYWluOwkJLyogZHdvcmQgMCAqLworCXUzMiB0aW1lb3V0OwkJLyogZHdvcmQgMSAqLworCXUzMiByZXF1ZXN0X2xlbmd0aDsJLyogZHdvcmQgMiAqLworCXUzMiByc3ZkOwkJLyogZHdvcmQgMyAqLworfTsKKworI2RlZmluZSBSRVNQX0hEUl9JTkZPX09QQ09ERV9TSElGVAkwCS8qIGJpdHMgMCAtIDcgKi8KKyNkZWZpbmUgUkVTUF9IRFJfSU5GT19TVUJTWVNfU0hJRlQJOCAJLyogYml0cyA4IC0gMTUgKi8KK3N0cnVjdCBiZV9jbWRfcmVzcF9oZHIgeworCXUzMiBpbmZvOwkJLyogZHdvcmQgMCAqLworCXUzMiBzdGF0dXM7CQkvKiBkd29yZCAxICovCisJdTMyIHJlc3BvbnNlX2xlbmd0aDsJLyogZHdvcmQgMiAqLworCXUzMiBhY3R1YWxfcmVzcF9sZW47CS8qIGR3b3JkIDMgKi8KK307CisKK3N0cnVjdCBwaHlzX2FkZHIgeworCXUzMiBsbzsKKwl1MzIgaGk7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJFIENvbW1hbmQgZGVmaW5pdGlvbnMgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZCAqLworc3RydWN0IGFtYXBfZXFfY29udGV4dCB7CisJdTggY2lkeFsxM107CQkvKiBkd29yZCAwKi8KKwl1OCByc3ZkMFszXTsJCS8qIGR3b3JkIDAqLworCXU4IGVwaWR4WzEzXTsJCS8qIGR3b3JkIDAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCovCisJdTggcnN2ZDE7CQkvKiBkd29yZCAwKi8KKwl1OCBzaXplOwkJLyogZHdvcmQgMCovCisJdTggcGlkeFsxM107CQkvKiBkd29yZCAxKi8KKwl1OCByc3ZkMlszXTsJCS8qIGR3b3JkIDEqLworCXU4IHBkWzEwXTsJCS8qIGR3b3JkIDEqLworCXU4IGNvdW50WzNdOwkJLyogZHdvcmQgMSovCisJdTggc29sZXZlbnQ7CQkvKiBkd29yZCAxKi8KKwl1OCBzdGFsbGVkOwkJLyogZHdvcmQgMSovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxKi8KKwl1OCByc3ZkM1s0XTsJCS8qIGR3b3JkIDIqLworCXU4IGZ1bmNbOF07CQkvKiBkd29yZCAyKi8KKwl1OCByc3ZkNDsJCS8qIGR3b3JkIDIqLworCXU4IGRlbGF5bXVsdFsxMF07CS8qIGR3b3JkIDIqLworCXU4IHJzdmQ1WzJdOwkJLyogZHdvcmQgMiovCisJdTggcGhhc2VbMl07CQkvKiBkd29yZCAyKi8KKwl1OCBub2RlbGF5OwkJLyogZHdvcmQgMiovCisJdTggcnN2ZDZbNF07CQkvKiBkd29yZCAyKi8KKwl1OCByc3ZkN1szMl07CQkvKiBkd29yZCAzKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2VxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOwkJLyogc3dvcmQgKi8KKwl1MTYgcnN2ZDA7CQkvKiBzd29yZCAqLworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQpIC8gOF07CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9lcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgcmVzcF9oZHI7CisJdTE2IGVxX2lkOwkJLyogc3dvcmQgKi8KKwl1MTYgcnN2ZDA7CQkvKiBzd29yZCAqLworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIE1hYyBxdWVyeSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitlbnVtIHsKKwlNQUNfQUREUkVTU19UWVBFX1NUT1JBR0UgPSAweDAsCisJTUFDX0FERFJFU1NfVFlQRV9ORVRXT1JLID0gMHgxLAorCU1BQ19BRERSRVNTX1RZUEVfUEQgPSAweDIsCisJTUFDX0FERFJFU1NfVFlQRV9NQU5BR0VNRU5UID0gMHgzCit9OworCitzdHJ1Y3QgbWFjX2FkZHIgeworCXUxNiBzaXplX29mX3N0cnVjdDsKKwl1OCBhZGRyW0VUSF9BTEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX21hY19xdWVyeSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCB0eXBlOworCXU4IHBlcm1hbmVudDsKKwl1MTYgaWZfaWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfbWFjX3F1ZXJ5IHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwlzdHJ1Y3QgbWFjX2FkZHIgbWFjOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqIFBNYWMgQWRkICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX3BtYWNfYWRkIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBpZl9pZDsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTggcnN2ZDBbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfcG1hY19hZGQgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiBwbWFjX2lkOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqIFBNYWMgRGVsICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX3BtYWNfZGVsIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBpZl9pZDsKKwl1MzIgcG1hY19pZDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgQ1EgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQgKi8KK3N0cnVjdCBhbWFwX2NxX2NvbnRleHQgeworCXU4IGNpZHhbMTFdOwkJLyogZHdvcmQgMCovCisJdTggcnN2ZDA7CQkvKiBkd29yZCAwKi8KKwl1OCBjb2FsZXNjd21bMl07CS8qIGR3b3JkIDAqLworCXU4IG5vZGVsYXk7CQkvKiBkd29yZCAwKi8KKwl1OCBlcGlkeFsxMV07CQkvKiBkd29yZCAwKi8KKwl1OCByc3ZkMTsJCS8qIGR3b3JkIDAqLworCXU4IGNvdW50WzJdOwkJLyogZHdvcmQgMCovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAwKi8KKwl1OCBzb2xldmVudDsJCS8qIGR3b3JkIDAqLworCXU4IGV2ZW50YWJsZTsJCS8qIGR3b3JkIDAqLworCXU4IHBpZHhbMTFdOwkJLyogZHdvcmQgMSovCisJdTggcnN2ZDI7CQkvKiBkd29yZCAxKi8KKwl1OCBwZFsxMF07CQkvKiBkd29yZCAxKi8KKwl1OCBlcWlkWzhdOwkJLyogZHdvcmQgMSovCisJdTggc3RhbGxlZDsJCS8qIGR3b3JkIDEqLworCXU4IGFybWVkOwkJLyogZHdvcmQgMSovCisJdTggcnN2ZDNbNF07CQkvKiBkd29yZCAyKi8KKwl1OCBmdW5jWzhdOwkJLyogZHdvcmQgMiovCisJdTggcnN2ZDRbMjBdOwkJLyogZHdvcmQgMiovCisJdTggcnN2ZDVbMzJdOwkJLyogZHdvcmQgMyovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9jcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1MTYgcnN2ZDA7CisJdTggY29udGV4dFtzaXplb2Yoc3RydWN0IGFtYXBfY3FfY29udGV4dCkgLyA4XTsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX2NxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTE2IGNxX2lkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgVHhRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQkVfRVRIX1RYX1JJTkdfVFlQRV9TVEFOREFSRCAgICAJMgorI2RlZmluZSBCRV9VTFAxX05VTQkJCQkxCisKKy8qIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkICovCitzdHJ1Y3QgYW1hcF90eF9jb250ZXh0IHsKKwl1OCByc3ZkMFsxNl07CQkvKiBkd29yZCAwICovCisJdTggdHhfcmluZ19zaXplWzRdOwkvKiBkd29yZCAwICovCisJdTggcnN2ZDFbMjZdOwkJLyogZHdvcmQgMCAqLworCXU4IHBjaV9mdW5jX2lkWzhdOwkvKiBkd29yZCAxICovCisJdTggcnN2ZDJbOV07CQkvKiBkd29yZCAxICovCisJdTggY3R4X3ZhbGlkOwkJLyogZHdvcmQgMSAqLworCXU4IGNxX2lkX3NlbmRbMTZdOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDNbMTZdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ0WzMyXTsJCS8qIGR3b3JkIDMgKi8KKwl1OCByc3ZkNVszMl07CQkvKiBkd29yZCA0ICovCisJdTggcnN2ZDZbMzJdOwkJLyogZHdvcmQgNSAqLworCXU4IHJzdmQ3WzMyXTsJCS8qIGR3b3JkIDYgKi8KKwl1OCByc3ZkOFszMl07CQkvKiBkd29yZCA3ICovCisJdTggcnN2ZDlbMzJdOwkJLyogZHdvcmQgOCAqLworCXU4IHJzdmQxMFszMl07CQkvKiBkd29yZCA5ICovCisJdTggcnN2ZDExWzMyXTsJCS8qIGR3b3JkIDEwICovCisJdTggcnN2ZDEyWzMyXTsJCS8qIGR3b3JkIDExICovCisJdTggcnN2ZDEzWzMyXTsJCS8qIGR3b3JkIDEyICovCisJdTggcnN2ZDE0WzMyXTsJCS8qIGR3b3JkIDEzICovCisJdTggcnN2ZDE1WzMyXTsJCS8qIGR3b3JkIDE0ICovCisJdTggcnN2ZDE2WzMyXTsJCS8qIGR3b3JkIDE1ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9ldGhfdHhfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IG51bV9wYWdlczsKKwl1OCB1bHBfbnVtOworCXU4IHR5cGU7CisJdTggYm91bmRfcG9ydDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF90eF9jb250ZXh0KSAvIDhdOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZXRoX3R4X2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTE2IGNpZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogQ3JlYXRlIFJ4USAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9ldGhfcnhfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBjcV9pZDsKKwl1OCBmcmFnX3NpemU7CisJdTggbnVtX3BhZ2VzOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbMl07CisJdTMyIGludGVyZmFjZV9pZDsKKwl1MTYgbWF4X2ZyYW1lX3NpemU7CisJdTE2IHJzdmQwOworCXUzMiByc3NfcXVldWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZXRoX3J4X2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTE2IGlkOworCXU4IGNwdV9pZDsKKwl1OCByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBRIERlc3Ryb3kgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFR5cGUgb2YgUXVldWUgdG8gYmUgZGVzdHJveWVkICovCitlbnVtIHsKKwlRVFlQRV9FUSA9IDEsCisJUVRZUEVfQ1EsCisJUVRZUEVfVFhRLAorCVFUWVBFX1JYUQorfTsKKworc3RydWN0IGJlX2NtZF9yZXFfcV9kZXN0cm95IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgYnlwYXNzX2ZsdXNoOwkvKiB2YWxpZCBvbmx5IGZvciByeCBxIGRlc3Ryb3kgKi8KK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKiogSS9mIENyZWF0ZSAoaXQncyBhY3R1YWxseSBJL2YgQ29uZmlnIENyZWF0ZSkqKioqKioqKioqLworCisvKiBDYXBhYmlsaXR5IGZsYWdzIGZvciB0aGUgaS9mICovCitlbnVtIGJlX2lmX2ZsYWdzIHsKKwlCRV9JRl9GTEFHU19SU1MgPSAweDQsCisJQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMgPSAweDgsCisJQkVfSUZfRkxBR1NfQlJPQURDQVNUID0gMHgxMCwKKwlCRV9JRl9GTEFHU19VTlRBR0dFRCA9IDB4MjAsCisJQkVfSUZfRkxBR1NfVUxQID0gMHg0MCwKKwlCRV9JRl9GTEFHU19WTEFOX1BST01JU0NVT1VTID0gMHg4MCwKKwlCRV9JRl9GTEFHU19WTEFOID0gMHgxMDAsCisJQkVfSUZfRkxBR1NfTUNBU1RfUFJPTUlTQ1VPVVMgPSAweDIwMCwKKwlCRV9JRl9GTEFHU19QQVNTX0wyX0VSUk9SUyA9IDB4NDAwLAorCUJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlMgPSAweDgwMAorfTsKKworLyogQW4gUlggaW50ZXJmYWNlIGlzIGFuIG9iamVjdCB3aXRoIG9uZSBvciBtb3JlIE1BQyBhZGRyZXNzZXMgYW5kCisgKiBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzLiAqLworc3RydWN0IGJlX2NtZF9yZXFfaWZfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiB2ZXJzaW9uOwkJLyogaWdub3JlIGN1cnJudGx5ICovCisJdTMyIGNhcGFiaWxpdHlfZmxhZ3M7CisJdTMyIGVuYWJsZV9mbGFnczsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcnN2ZDA7CisJdTggcG1hY19pbnZhbGlkOyAvKiBpZiBzZXQsIGRvbid0IGF0dGFjaCB0aGUgbWFjIGFkZHIgdG8gdGhlIGkvZiAqLworCXUzMiB2bGFuX3RhZzsJIC8qIG5vdCB1c2VkIGN1cnJlbnRseSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX2lmX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIGludGVyZmFjZV9pZDsKKwl1MzIgcG1hY19pZDsKK307CisKKy8qKioqKiogSS9mIERlc3Ryb3koaXQncyBhY3R1YWxseSBJL2YgQ29uZmlnIERlc3Ryb3kgKSoqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9pZl9kZXN0cm95IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBpbnRlcmZhY2VfaWQ7Cit9OworCisvKioqKioqKioqKioqKioqIEhXIFN0YXRzIEdldCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzIHsKKwl1MzIgcnhfYnl0ZXNfbHNkOwkvKiBkd29yZCAwKi8KKwl1MzIgcnhfYnl0ZXNfbXNkOwkvKiBkd29yZCAxKi8KKwl1MzIgcnhfdG90YWxfZnJhbWVzOwkvKiBkd29yZCAyKi8KKwl1MzIgcnhfdW5pY2FzdF9mcmFtZXM7CS8qIGR3b3JkIDMqLworCXUzMiByeF9tdWx0aWNhc3RfZnJhbWVzOwkvKiBkd29yZCA0Ki8KKwl1MzIgcnhfYnJvYWRjYXN0X2ZyYW1lczsJLyogZHdvcmQgNSovCisJdTMyIHJ4X2NyY19lcnJvcnM7CS8qIGR3b3JkIDYqLworCXUzMiByeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9yczsJLyogZHdvcmQgNyovCisJdTMyIHJ4X3BhdXNlX2ZyYW1lczsJLyogZHdvcmQgOCovCisJdTMyIHJ4X2NvbnRyb2xfZnJhbWVzOwkvKiBkd29yZCA5Ki8KKwl1MzIgcnhfaW5fcmFuZ2VfZXJyb3JzOwkvKiBkd29yZCAxMCovCisJdTMyIHJ4X291dF9yYW5nZV9lcnJvcnM7CS8qIGR3b3JkIDExKi8KKwl1MzIgcnhfZnJhbWVfdG9vX2xvbmc7CS8qIGR3b3JkIDEyKi8KKwl1MzIgcnhfYWRkcmVzc19tYXRjaF9lcnJvcnM7CS8qIGR3b3JkIDEzKi8KKwl1MzIgcnhfdmxhbl9taXNtYXRjaDsJLyogZHdvcmQgMTQqLworCXUzMiByeF9kcm9wcGVkX3Rvb19zbWFsbDsJLyogZHdvcmQgMTUqLworCXUzMiByeF9kcm9wcGVkX3Rvb19zaG9ydDsJLyogZHdvcmQgMTYqLworCXUzMiByeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGw7CS8qIGR3b3JkIDE3Ki8KKwl1MzIgcnhfZHJvcHBlZF90Y3BfbGVuZ3RoOwkvKiBkd29yZCAxOCovCisJdTMyIHJ4X2Ryb3BwZWRfcnVudDsJLyogZHdvcmQgMTkqLworCXUzMiByeF82NF9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDIwKi8KKwl1MzIgcnhfNjVfMTI3X2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjEqLworCXUzMiByeF8xMjhfMjU2X2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjIqLworCXUzMiByeF8yNTZfNTExX2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjMqLworCXUzMiByeF81MTJfMTAyM19ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDI0Ki8KKwl1MzIgcnhfMTAyNF8xNTE4X2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjUqLworCXUzMiByeF8xNTE5XzIwNDdfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyNiovCisJdTMyIHJ4XzIwNDhfNDA5NV9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDI3Ki8KKwl1MzIgcnhfNDA5Nl84MTkxX2J5dGVfcGFja2V0czsJLyogZHdvcmQgMjgqLworCXUzMiByeF84MTkyXzkyMTZfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCAyOSovCisJdTMyIHJ4X2lwX2NoZWNrc3VtX2VycnM7CS8qIGR3b3JkIDMwKi8KKwl1MzIgcnhfdGNwX2NoZWNrc3VtX2VycnM7CS8qIGR3b3JkIDMxKi8KKwl1MzIgcnhfdWRwX2NoZWNrc3VtX2VycnM7CS8qIGR3b3JkIDMyKi8KKwl1MzIgcnhfbm9uX3Jzc19wYWNrZXRzOwkvKiBkd29yZCAzMyovCisJdTMyIHJ4X2lwdjRfcGFja2V0czsJLyogZHdvcmQgMzQqLworCXUzMiByeF9pcHY2X3BhY2tldHM7CS8qIGR3b3JkIDM1Ki8KKwl1MzIgcnhfaXB2NF9ieXRlc19sc2Q7CS8qIGR3b3JkIDM2Ki8KKwl1MzIgcnhfaXB2NF9ieXRlc19tc2Q7CS8qIGR3b3JkIDM3Ki8KKwl1MzIgcnhfaXB2Nl9ieXRlc19sc2Q7CS8qIGR3b3JkIDM4Ki8KKwl1MzIgcnhfaXB2Nl9ieXRlc19tc2Q7CS8qIGR3b3JkIDM5Ki8KKwl1MzIgcnhfY2h1dGUxX3BhY2tldHM7CS8qIGR3b3JkIDQwKi8KKwl1MzIgcnhfY2h1dGUyX3BhY2tldHM7CS8qIGR3b3JkIDQxKi8KKwl1MzIgcnhfY2h1dGUzX3BhY2tldHM7CS8qIGR3b3JkIDQyKi8KKwl1MzIgcnhfbWFuYWdlbWVudF9wYWNrZXRzOwkvKiBkd29yZCA0MyovCisJdTMyIHJ4X3N3aXRjaGVkX3VuaWNhc3RfcGFja2V0czsJLyogZHdvcmQgNDQqLworCXUzMiByeF9zd2l0Y2hlZF9tdWx0aWNhc3RfcGFja2V0czsJLyogZHdvcmQgNDUqLworCXUzMiByeF9zd2l0Y2hlZF9icm9hZGNhc3RfcGFja2V0czsJLyogZHdvcmQgNDYqLworCXUzMiB0eF9ieXRlc19sc2Q7CS8qIGR3b3JkIDQ3Ki8KKwl1MzIgdHhfYnl0ZXNfbXNkOwkvKiBkd29yZCA0OCovCisJdTMyIHR4X3VuaWNhc3RmcmFtZXM7CS8qIGR3b3JkIDQ5Ki8KKwl1MzIgdHhfbXVsdGljYXN0ZnJhbWVzOwkvKiBkd29yZCA1MCovCisJdTMyIHR4X2Jyb2FkY2FzdGZyYW1lczsJLyogZHdvcmQgNTEqLworCXUzMiB0eF9wYXVzZWZyYW1lczsJLyogZHdvcmQgNTIqLworCXUzMiB0eF9jb250cm9sZnJhbWVzOwkvKiBkd29yZCA1MyovCisJdTMyIHR4XzY0X2J5dGVfcGFja2V0czsJLyogZHdvcmQgNTQqLworCXUzMiB0eF82NV8xMjdfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA1NSovCisJdTMyIHR4XzEyOF8yNTZfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA1NiovCisJdTMyIHR4XzI1Nl81MTFfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA1NyovCisJdTMyIHR4XzUxMl8xMDIzX2J5dGVfcGFja2V0czsJLyogZHdvcmQgNTgqLworCXUzMiB0eF8xMDI0XzE1MThfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA1OSovCisJdTMyIHR4XzE1MTlfMjA0N19ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDYwKi8KKwl1MzIgdHhfMjA0OF80MDk1X2J5dGVfcGFja2V0czsJLyogZHdvcmQgNjEqLworCXUzMiB0eF80MDk2XzgxOTFfYnl0ZV9wYWNrZXRzOwkvKiBkd29yZCA2MiovCisJdTMyIHR4XzgxOTJfOTIxNl9ieXRlX3BhY2tldHM7CS8qIGR3b3JkIDYzKi8KKwl1MzIgcnhfZmlmb19vdmVyZmxvdzsJLyogZHdvcmQgNjQqLworCXUzMiByeF9pbnB1dF9maWZvX292ZXJmbG93OwkvKiBkd29yZCA2NSovCit9OworCitzdHJ1Y3QgYmVfcnhmX3N0YXRzIHsKKwlzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHMgcG9ydFsyXTsKKwl1MzIgcnhfZHJvcHNfbm9fcGJ1ZjsJLyogZHdvcmQgMTMyKi8KKwl1MzIgcnhfZHJvcHNfbm9fdHhwYjsJLyogZHdvcmQgMTMzKi8KKwl1MzIgcnhfZHJvcHNfbm9fZXJ4X2Rlc2NyOwkvKiBkd29yZCAxMzQqLworCXUzMiByeF9kcm9wc19ub190cHJlX2Rlc2NyOwkvKiBkd29yZCAxMzUqLworCXUzMiBtYW5hZ2VtZW50X3J4X3BvcnRfcGFja2V0czsJLyogZHdvcmQgMTM2Ki8KKwl1MzIgbWFuYWdlbWVudF9yeF9wb3J0X2J5dGVzOwkvKiBkd29yZCAxMzcqLworCXUzMiBtYW5hZ2VtZW50X3J4X3BvcnRfcGF1c2VfZnJhbWVzOwkvKiBkd29yZCAxMzgqLworCXUzMiBtYW5hZ2VtZW50X3J4X3BvcnRfZXJyb3JzOwkvKiBkd29yZCAxMzkqLworCXUzMiBtYW5hZ2VtZW50X3R4X3BvcnRfcGFja2V0czsJLyogZHdvcmQgMTQwKi8KKwl1MzIgbWFuYWdlbWVudF90eF9wb3J0X2J5dGVzOwkvKiBkd29yZCAxNDEqLworCXUzMiBtYW5hZ2VtZW50X3R4X3BvcnRfcGF1c2U7CS8qIGR3b3JkIDE0MiovCisJdTMyIG1hbmFnZW1lbnRfcnhfcG9ydF9yeGZpZm9fb3ZlcmZsb3c7CS8qIGR3b3JkIDE0MyovCisJdTMyIHJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzOwkvKiBkd29yZCAxNDQqLworCXUzMiByeF9kcm9wc19pbnZhbGlkX3Jpbmc7CS8qIGR3b3JkIDE0NSovCisJdTMyIGZvcndhcmRlZF9wYWNrZXRzOwkvKiBkd29yZCAxNDYqLworCXUzMiByeF9kcm9wc19tdHU7CS8qIGR3b3JkIDE0NyovCisJdTMyIHJzdmQwWzE1XTsKK307CisKK3N0cnVjdCBiZV9lcnhfc3RhdHMgeworCXUzMiByeF9kcm9wc19ub19mcmFnbWVudHNbNDRdOyAgICAgLyogZHdvcmRTIDAgdG8gNDMqLworCXUzMiBkZWJ1Z193ZG1hX3NlbnRfaG9sZDsgICAgICAgICAgLyogZHdvcmQgNDQqLworCXUzMiBkZWJ1Z193ZG1hX3BiZnJlZV9zZW50X2hvbGQ7ICAgLyogZHdvcmQgNDUqLworCXUzMiBkZWJ1Z193ZG1hX3plcm9ieXRlX3BiZnJlZV9zZW50X2hvbGQ7IC8qIGR3b3JkIDQ2Ki8KKwl1MzIgZGVidWdfcG1lbV9wYnVmX2RlYWxsb2M7ICAgICAgIC8qIGR3b3JkIDQ3Ki8KK307CisKK3N0cnVjdCBiZV9od19zdGF0cyB7CisJc3RydWN0IGJlX3J4Zl9zdGF0cyByeGY7CisJdTMyIHJzdmRbNDhdOworCXN0cnVjdCBiZV9lcnhfc3RhdHMgZXJ4OworfTsKKworc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHJzdmRbc2l6ZW9mKHN0cnVjdCBiZV9od19zdGF0cyldOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0cyB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJc3RydWN0IGJlX2h3X3N0YXRzIGh3X3N0YXRzOworfTsKKworc3RydWN0IGJlX2NtZF9yZXFfdmxhbl9jb25maWcgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggaW50ZXJmYWNlX2lkOworCXU4IHByb21pc2N1b3VzOworCXU4IHVudGFnZ2VkOworCXU4IG51bV92bGFuOworCXUxNiBub3JtYWxfdmxhbls2NF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9wcm9taXNjdW91c19jb25maWcgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggcG9ydDBfcHJvbWlzY3VvdXM7CisJdTggcG9ydDFfcHJvbWlzY3VvdXM7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1hY2FkZHIgeworCXU4IGJ5dGVbRVRIX0FMRU5dOworfTsKKworc3RydWN0IGJlX2NtZF9yZXFfbWNhc3RfbWFjX2NvbmZpZyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX21hYzsKKwl1OCBwcm9taXNjdW91czsKKwl1OCBpbnRlcmZhY2VfaWQ7CisJc3RydWN0IG1hY2FkZHIgbWFjWzMyXTsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJlX2h3X3N0YXRzICoKK2h3X3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfc3RhdHMgKmNtZCkKK3sKKwlyZXR1cm4gJmNtZC0+aHdfc3RhdHM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKiBMaW5rIFN0YXR1cyBRdWVyeSAqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfbGlua19zdGF0dXMgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmVfbGlua19pbmZvIHsKKwl1OCBkdXBsZXg7CisJdTggc3BlZWQ7CisJdTggZmF1bHQ7Cit9OworCitlbnVtIHsKKwlQSFlfTElOS19EVVBMRVhfTk9ORSA9IDB4MCwKKwlQSFlfTElOS19EVVBMRVhfSEFMRiA9IDB4MSwKKwlQSFlfTElOS19EVVBMRVhfRlVMTCA9IDB4MgorfTsKKworZW51bSB7CisJUEhZX0xJTktfU1BFRURfWkVSTyA9IDB4MCwgCS8qID0+IE5vIGxpbmsgKi8KKwlQSFlfTElOS19TUEVFRF8xME1CUFMgPSAweDEsCisJUEhZX0xJTktfU1BFRURfMTAwTUJQUyA9IDB4MiwKKwlQSFlfTElOS19TUEVFRF8xR0JQUyA9IDB4MywKKwlQSFlfTElOS19TUEVFRF8xMEdCUFMgPSAweDQKK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9saW5rX3N0YXR1cyB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTggcGh5c2ljYWxfcG9ydDsKKwl1OCBtYWNfZHVwbGV4OworCXU4IG1hY19zcGVlZDsKKwl1OCBtYWNfZmF1bHQ7CisJdTggbWdtdF9tYWNfZHVwbGV4OworCXU4IG1nbXRfbWFjX3NwZWVkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBHZXQgRlcgVmVyc2lvbiAqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBGV19WRVJfTEVOCQkJMzIKK3N0cnVjdCBiZV9jbWRfcmVxX2dldF9md192ZXJzaW9uIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHJzdmQwW0ZXX1ZFUl9MRU5dOworCXU4IHJzdmQxW0ZXX1ZFUl9MRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9md192ZXJzaW9uIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1OCBmaXJtd2FyZV92ZXJzaW9uX3N0cmluZ1tGV19WRVJfTEVOXTsKKwl1OCBmd19vbl9mbGFzaF92ZXJzaW9uX3N0cmluZ1tGV19WRVJfTEVOXTsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBTZXQgRmxvdyBDb250cmwgKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX3NldF9mbG93X2NvbnRyb2wgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IHR4X2Zsb3dfY29udHJvbDsKKwl1MTYgcnhfZmxvd19jb250cm9sOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIEdldCBGbG93IENvbnRybCAqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfZ2V0X2Zsb3dfY29udHJvbCB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgcnN2ZDsKK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9nZXRfZmxvd19jb250cm9sIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgdHhfZmxvd19jb250cm9sOworCXUxNiByeF9mbG93X2NvbnRyb2w7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogTW9kaWZ5IEVRIERlbGF5ICoqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9tb2RpZnlfZXFfZGVsYXkgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIG51bV9lcTsKKwlzdHJ1Y3QgeworCQl1MzIgZXFfaWQ7CisJCXUzMiBwaGFzZTsKKwkJdTMyIGRlbGF5X211bHRpcGxpZXI7CisJfSBkZWxheVs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9tb2RpZnlfZXFfZGVsYXkgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBHZXQgRlcgQ29uZmlnICoqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9xdWVyeV9md19jZmcgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIHJzdmRbMzBdOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX3F1ZXJ5X2Z3X2NmZyB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIGJlX2NvbmZpZ19udW1iZXI7CisJdTMyIGFzaWNfcmV2aXNpb247CisJdTMyIHBoeXNfcG9ydDsKKwl1MzIgZnVuY3Rpb25fbW9kZTsKKwl1MzIgcnN2ZFsyNl07Cit9OworCitleHRlcm4gaW50IGJlX3BjaV9mbnVtX2dldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK2V4dGVybiBpbnQgYmVfY21kX1BPU1Qoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CitleHRlcm4gaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIsCisJCQl1OCB0eXBlLCBib29sIHBlcm1hbmVudCwgdTMyIGlmX2hhbmRsZSk7CitleHRlcm4gaW50IGJlX2NtZF9wbWFjX2FkZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIsCisJCQl1MzIgaWZfaWQsIHUzMiAqcG1hY19pZCk7CitleHRlcm4gaW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKTsKK2V4dGVybiBpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfZmxhZ3MsIHU4ICptYWMsCisJCQlib29sIHBtYWNfaW52YWxpZCwgdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCk7CitleHRlcm4gaW50IGJlX2NtZF9pZl9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9oYW5kbGUpOworZXh0ZXJuIGludCBiZV9jbWRfZXFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSk7CitleHRlcm4gaW50IGJlX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLAorCQkJYm9vbCBzb2xfZXZ0cywgYm9vbCBub19kZWxheSwKKwkJCWludCBudW1fY3FlX2RtYV9jb2FsZXNjZSk7CitleHRlcm4gaW50IGJlX2NtZF90eHFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxLAorCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxKTsKK2V4dGVybiBpbnQgYmVfY21kX3J4cV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEsIHUxNiBjcV9pZCwKKwkJCXUxNiBmcmFnX3NpemUsIHUxNiBtYXhfZnJhbWVfc2l6ZSwgdTMyIGlmX2lkLAorCQkJdTMyIHJzcyk7CitleHRlcm4gaW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCQlpbnQgdHlwZSk7CitleHRlcm4gaW50IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJc3RydWN0IGJlX2xpbmtfaW5mbyAqbGluayk7CitleHRlcm4gaW50IGJlX2NtZF9yZXNldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK2V4dGVybiBpbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBjaGFyICpmd192ZXIpOworCitleHRlcm4gaW50IGJlX2NtZF9tb2RpZnlfZXFkKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBlcV9pZCwgdTMyIGVxZCk7CitleHRlcm4gaW50IGJlX2NtZF92bGFuX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsCisJCQl1MTYgKnZ0YWdfYXJyYXksIHUzMiBudW0sIGJvb2wgdW50YWdnZWQsCisJCQlib29sIHByb21pc2N1b3VzKTsKK2V4dGVybiBpbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJdTggcG9ydF9udW0sIGJvb2wgZW4pOworZXh0ZXJuIGludCBiZV9jbWRfbWNhc3RfbWFjX3NldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsCisJCQl1OCAqbWFjX3RhYmxlLCB1MzIgbnVtLCBib29sIHByb21pc2N1b3VzKTsKK2V4dGVybiBpbnQgYmVfY21kX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXUzMiB0eF9mYywgdTMyIHJ4X2ZjKTsKK2V4dGVybiBpbnQgYmVfY21kX2dldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCXUzMiAqdHhfZmMsIHUzMiAqcnhfZmMpOworZXh0ZXJuIGludCBiZV9jbWRfcXVlcnlfZndfY2ZnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiAqcG9ydF9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjRiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworI2luY2x1ZGUgImJlLmgiCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorCitzdHJ1Y3QgYmVfZXRodG9vbF9zdGF0IHsKKwljaGFyIGRlc2NbRVRIX0dTVFJJTkdfTEVOXTsKKwlpbnQgdHlwZTsKKwlpbnQgc2l6ZTsKKwlpbnQgb2Zmc2V0OworfTsKKworZW51bSB7TkVUU1RBVCwgUE9SVFNUQVQsIE1JU0NTVEFULCBEUlZTVEFULCBFUlhTVEFUfTsKKyNkZWZpbmUgRklFTERJTkZPKF9zdHJ1Y3QsIGZpZWxkKSBGSUVMRF9TSVpFT0YoX3N0cnVjdCwgZmllbGQpLCBcCisJCQkJCW9mZnNldG9mKF9zdHJ1Y3QsIGZpZWxkKQorI2RlZmluZSBORVRTVEFUX0lORk8oZmllbGQpIAkjZmllbGQsIE5FVFNUQVQsXAorCQkJCQlGSUVMRElORk8oc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMsXAorCQkJCQkJZmllbGQpCisjZGVmaW5lIERSVlNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgRFJWU1RBVCxcCisJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfZHJ2cl9zdGF0cywgZmllbGQpCisjZGVmaW5lIE1JU0NTVEFUX0lORk8oZmllbGQpIAkjZmllbGQsIE1JU0NTVEFULFwKKwkJCQkJRklFTERJTkZPKHN0cnVjdCBiZV9yeGZfc3RhdHMsIGZpZWxkKQorI2RlZmluZSBQT1JUU1RBVF9JTkZPKGZpZWxkKSAJI2ZpZWxkLCBQT1JUU1RBVCxcCisJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHMsIFwKKwkJCQkJCWZpZWxkKQorI2RlZmluZSBFUlhTVEFUX0lORk8oZmllbGQpIAkjZmllbGQsIEVSWFNUQVQsXAorCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX2VyeF9zdGF0cywgZmllbGQpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmVfZXRodG9vbF9zdGF0IGV0X3N0YXRzW10gPSB7CisJe05FVFNUQVRfSU5GTyhyeF9wYWNrZXRzKX0sCisJe05FVFNUQVRfSU5GTyh0eF9wYWNrZXRzKX0sCisJe05FVFNUQVRfSU5GTyhyeF9ieXRlcyl9LAorCXtORVRTVEFUX0lORk8odHhfYnl0ZXMpfSwKKwl7TkVUU1RBVF9JTkZPKHJ4X2Vycm9ycyl9LAorCXtORVRTVEFUX0lORk8odHhfZXJyb3JzKX0sCisJe05FVFNUQVRfSU5GTyhyeF9kcm9wcGVkKX0sCisJe05FVFNUQVRfSU5GTyh0eF9kcm9wcGVkKX0sCisJe0RSVlNUQVRfSU5GTyhiZV90eF9yZXFzKX0sCisJe0RSVlNUQVRfSU5GTyhiZV90eF9zdG9wcyl9LAorCXtEUlZTVEFUX0lORk8oYmVfZndkX3JlcXMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3R4X3dyYnMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3BvbGxzKX0sCisJe0RSVlNUQVRfSU5GTyhiZV90eF9ldmVudHMpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3J4X2V2ZW50cyl9LAorCXtEUlZTVEFUX0lORk8oYmVfdHhfY29tcGwpfSwKKwl7RFJWU1RBVF9JTkZPKGJlX3J4X2NvbXBsKX0sCisJe0RSVlNUQVRfSU5GTyhiZV9ldGhyeF9wb3N0X2ZhaWwpfSwKKwl7RFJWU1RBVF9JTkZPKGJlXzgwMl8zX2Ryb3BwZWRfZnJhbWVzKX0sCisJe0RSVlNUQVRfSU5GTyhiZV84MDJfM19tYWxmb3JtZWRfZnJhbWVzKX0sCisJe0RSVlNUQVRfSU5GTyhiZV90eF9yYXRlKX0sCisJe0RSVlNUQVRfSU5GTyhiZV9yeF9yYXRlKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfdW5pY2FzdF9mcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9tdWx0aWNhc3RfZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2NyY19lcnJvcnMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9ycyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2NvbnRyb2xfZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfaW5fcmFuZ2VfZXJyb3JzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfb3V0X3JhbmdlX2Vycm9ycyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2ZyYW1lX3Rvb19sb25nKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfYWRkcmVzc19tYXRjaF9lcnJvcnMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF92bGFuX21pc21hdGNoKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF90b29fc21hbGwpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9kcm9wcGVkX3Rvb19zaG9ydCl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfdGNwX2xlbmd0aCl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfcnVudCl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X2ZpZm9fb3ZlcmZsb3cpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9pbnB1dF9maWZvX292ZXJmbG93KX0sCisJe1BPUlRTVEFUX0lORk8ocnhfaXBfY2hlY2tzdW1fZXJycyl9LAorCXtQT1JUU1RBVF9JTkZPKHJ4X3RjcF9jaGVja3N1bV9lcnJzKX0sCisJe1BPUlRTVEFUX0lORk8ocnhfdWRwX2NoZWNrc3VtX2VycnMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9ub25fcnNzX3BhY2tldHMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9pcHY0X3BhY2tldHMpfSwKKwl7UE9SVFNUQVRfSU5GTyhyeF9pcHY2X3BhY2tldHMpfSwKKwl7UE9SVFNUQVRfSU5GTyh0eF91bmljYXN0ZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8odHhfbXVsdGljYXN0ZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8odHhfYnJvYWRjYXN0ZnJhbWVzKX0sCisJe1BPUlRTVEFUX0lORk8odHhfcGF1c2VmcmFtZXMpfSwKKwl7UE9SVFNUQVRfSU5GTyh0eF9jb250cm9sZnJhbWVzKX0sCisJe01JU0NTVEFUX0lORk8ocnhfZHJvcHNfbm9fcGJ1Zil9LAorCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX25vX3R4cGIpfSwKKwl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19ub19lcnhfZGVzY3IpfSwKKwl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19ub190cHJlX2Rlc2NyKX0sCisJe01JU0NTVEFUX0lORk8ocnhfZHJvcHNfdG9vX21hbnlfZnJhZ3MpfSwKKwl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19pbnZhbGlkX3JpbmcpfSwKKwl7TUlTQ1NUQVRfSU5GTyhmb3J3YXJkZWRfcGFja2V0cyl9LAorCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX210dSl9LAorCXtFUlhTVEFUX0lORk8ocnhfZHJvcHNfbm9fZnJhZ21lbnRzKX0sCit9OworI2RlZmluZSBFVEhUT09MX1NUQVRTX05VTSBBUlJBWV9TSVpFKGV0X3N0YXRzKQorCitzdGF0aWMgdm9pZAorYmVfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJjcHkoZHJ2aW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CisJc3RyY3B5KGRydmluZm8tPnZlcnNpb24sIERSVl9WRVIpOworCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgYWRhcHRlci0+ZndfdmVyLCBGV19WRVJfTEVOKTsKKwlzdHJjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpKTsKKwlkcnZpbmZvLT50ZXN0aW5mb19sZW4gPSAwOworCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gMDsKKwlkcnZpbmZvLT5lZWR1bXBfbGVuID0gMDsKK30KKworc3RhdGljIGludAorYmVfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsZXNjZSkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CisKKwljb2FsZXNjZS0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBhZGFwdGVyLT5tYXhfcnhfY29hbDsKKworCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcyA9IHJ4X2VxLT5jdXJfZXFkOworCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoID0gcnhfZXEtPm1heF9lcWQ7CisJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2xvdyA9IHJ4X2VxLT5taW5fZXFkOworCisJY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzID0gdHhfZXEtPmN1cl9lcWQ7CisJY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2hpZ2ggPSB0eF9lcS0+bWF4X2VxZDsKKwljb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfbG93ID0gdHhfZXEtPm1pbl9lcWQ7CisKKwljb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlID0gcnhfZXEtPmVuYWJsZV9haWM7CisJY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9IHR4X2VxLT5lbmFibGVfYWljOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzZXQgaW50ZXJydXAgY29hbGVzY2luZyBkZWxheSAqYXMgd2VsbCBhcyoKKyAqIHRoZSBudW1iZXIgb2YgcGt0cyB0byBjb2FsZXNjZSBmb3IgTFJPLgorICovCitzdGF0aWMgaW50CitiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWxlc2NlKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CisJdTMyIHR4X21heCwgdHhfbWluLCB0eF9jdXI7CisJdTMyIHJ4X21heCwgcnhfbWluLCByeF9jdXI7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9PSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gY29hbGVzY2UtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCWlmIChhZGFwdGVyLT5tYXhfcnhfY29hbCA+IE1BWF9TS0JfRlJBR1MpCisJCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gTUFYX1NLQl9GUkFHUyAtIDE7CisKKwkvKiBpZiBBSUMgaXMgYmVpbmcgdHVybmVkIG9uIG5vdywgc3RhcnQgd2l0aCBhbiBFUUQgb2YgMCAqLworCWlmIChyeF9lcS0+ZW5hYmxlX2FpYyA9PSAwICYmCisJCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPT0gMSkgeworCQlyeF9lcS0+Y3VyX2VxZCA9IDA7CisJfQorCXJ4X2VxLT5lbmFibGVfYWljID0gY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKKworCXJ4X21heCA9IGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoOworCXJ4X21pbiA9IGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19sb3c7CisJcnhfY3VyID0gY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzOworCisJdHhfbWF4ID0gY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7CisJdHhfbWluID0gY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2xvdzsKKwl0eF9jdXIgPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3M7CisKKwlpZiAodHhfY3VyID4gQkVfTUFYX0VRRCkKKwkJdHhfY3VyID0gQkVfTUFYX0VRRDsKKwlpZiAodHhfZXEtPmN1cl9lcWQgIT0gdHhfY3VyKSB7CisJCXN0YXR1cyA9IGJlX2NtZF9tb2RpZnlfZXFkKGN0cmwsIHR4X2VxLT5xLmlkLCB0eF9jdXIpOworCQlpZiAoIXN0YXR1cykKKwkJCXR4X2VxLT5jdXJfZXFkID0gdHhfY3VyOworCX0KKworCWlmIChyeF9lcS0+ZW5hYmxlX2FpYykgeworCQlpZiAocnhfbWF4ID4gQkVfTUFYX0VRRCkKKwkJCXJ4X21heCA9IEJFX01BWF9FUUQ7CisJCWlmIChyeF9taW4gPiByeF9tYXgpCisJCQlyeF9taW4gPSByeF9tYXg7CisJCXJ4X2VxLT5tYXhfZXFkID0gcnhfbWF4OworCQlyeF9lcS0+bWluX2VxZCA9IHJ4X21pbjsKKwkJaWYgKHJ4X2VxLT5jdXJfZXFkID4gcnhfbWF4KQorCQkJcnhfZXEtPmN1cl9lcWQgPSByeF9tYXg7CisJCWlmIChyeF9lcS0+Y3VyX2VxZCA8IHJ4X21pbikKKwkJCXJ4X2VxLT5jdXJfZXFkID0gcnhfbWluOworCX0gZWxzZSB7CisJCWlmIChyeF9jdXIgPiBCRV9NQVhfRVFEKQorCQkJcnhfY3VyID0gQkVfTUFYX0VRRDsKKwkJaWYgKHJ4X2VxLT5jdXJfZXFkICE9IHJ4X2N1cikgeworCQkJc3RhdHVzID0gYmVfY21kX21vZGlmeV9lcWQoY3RybCwgcnhfZXEtPnEuaWQsIHJ4X2N1cik7CisJCQlpZiAoIXN0YXR1cykKKwkJCQlyeF9lcS0+Y3VyX2VxZCA9IHJ4X2N1cjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBiZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXJldHVybiBhZGFwdGVyLT5yeF9jc3VtOworfQorCitzdGF0aWMgaW50IGJlX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IGRhdGEpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGRhdGEpCisJCWFkYXB0ZXItPnJ4X2NzdW0gPSB0cnVlOworCWVsc2UKKwkJYWRhcHRlci0+cnhfY3N1bSA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqZHJ2cl9zdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9od19zdGF0cyAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyLT5zdGF0cy5jbWQudmEpOworCXN0cnVjdCBiZV9yeGZfc3RhdHMgKnJ4Zl9zdGF0cyA9ICZod19zdGF0cy0+cnhmOworCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cyAqcG9ydF9zdGF0cyA9CisJCQkmcnhmX3N0YXRzLT5wb3J0W2FkYXB0ZXItPnBvcnRfbnVtXTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzID0gJmFkYXB0ZXItPnN0YXRzLm5ldF9zdGF0czsKKwlzdHJ1Y3QgYmVfZXJ4X3N0YXRzICplcnhfc3RhdHMgPSAmaHdfc3RhdHMtPmVyeDsKKwl2b2lkICpwID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFVEhUT09MX1NUQVRTX05VTTsgaSsrKSB7CisJCXN3aXRjaCAoZXRfc3RhdHNbaV0udHlwZSkgeworCQljYXNlIE5FVFNUQVQ6CisJCQlwID0gbmV0X3N0YXRzOworCQkJYnJlYWs7CisJCWNhc2UgRFJWU1RBVDoKKwkJCXAgPSBkcnZyX3N0YXRzOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVFNUQVQ6CisJCQlwID0gcG9ydF9zdGF0czsKKwkJCWJyZWFrOworCQljYXNlIE1JU0NTVEFUOgorCQkJcCA9IHJ4Zl9zdGF0czsKKwkJCWJyZWFrOworCQljYXNlIEVSWFNUQVQ6IC8qIEN1cnJlbnRseSBvbmx5IG9uZSBFUlggc3RhdCBpcyBwcm92aWRlZCAqLworCQkJcCA9ICh1MzIgKillcnhfc3RhdHMgKyBhZGFwdGVyLT5yeF9vYmoucS5pZDsKKwkJCWJyZWFrOworCQl9CisKKwkJcCA9ICh1OCAqKXAgKyBldF9zdGF0c1tpXS5vZmZzZXQ7CisJCWRhdGFbaV0gPSAoZXRfc3RhdHNbaV0uc2l6ZSA9PSBzaXplb2YodTY0KSkgPworCQkJCSoodTY0ICopcDogKih1MzIgKilwOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2JlX2dldF9zdGF0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3Qgc3RyaW5nc2V0LAorCQl1aW50OF90ICpkYXRhKQoreworCWludCBpOworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDA7IGkgPCBFVEhUT09MX1NUQVRTX05VTTsgaSsrKSB7CisJCQltZW1jcHkoZGF0YSwgZXRfc3RhdHNbaV0uZGVzYywgRVRIX0dTVFJJTkdfTEVOKTsKKwkJCWRhdGEgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBiZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gRVRIVE9PTF9TVEFUU19OVU07Cit9CisKK3N0YXRpYyBpbnQgYmVfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IGFkYXB0ZXItPnJ4X29iai5xLmxlbjsKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9IGFkYXB0ZXItPnR4X29iai5xLmxlbjsKKworCXJpbmctPnJ4X3BlbmRpbmcgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+cnhfb2JqLnEudXNlZCk7CisJcmluZy0+dHhfcGVuZGluZyA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT50eF9vYmoucS51c2VkKTsKK30KKworc3RhdGljIHZvaWQKK2JlX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVjbWQpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYmVfY21kX2dldF9mbG93X2NvbnRyb2woJmFkYXB0ZXItPmN0cmwsICZlY21kLT50eF9wYXVzZSwKKwkJJmVjbWQtPnJ4X3BhdXNlKTsKKwllY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Cit9CisKK3N0YXRpYyBpbnQKK2JlX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVjbWQpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBzdGF0dXM7CisKKwlpZiAoZWNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbCgmYWRhcHRlci0+Y3RybCwgZWNtZC0+dHhfcGF1c2UsCisJCQllY21kLT5yeF9wYXVzZSk7CisJaWYgKCFzdGF0dXMpCisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQYXVzZSBwYXJhbSBzZXQgZmFpbGVkLlxuIik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncyA9IGJlX2dldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8gPSBiZV9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfY29hbGVzY2UgPSBiZV9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZSA9IGJlX3NldF9jb2FsZXNjZSwKKwkuZ2V0X3JpbmdwYXJhbSA9IGJlX2dldF9yaW5ncGFyYW0sCisJLmdldF9wYXVzZXBhcmFtID0gYmVfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtID0gYmVfc2V0X3BhdXNlcGFyYW0sCisJLmdldF9yeF9jc3VtID0gYmVfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtID0gYmVfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF9zdHJpbmdzID0gYmVfZ2V0X3N0YXRfc3RyaW5ncywKKwkuZ2V0X3N0YXRzX2NvdW50ID0gYmVfZ2V0X3N0YXRzX2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IGJlX2dldF9ldGh0b29sX3N0YXRzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMzJhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKy8qKioqKioqKiogTWFpbGJveCBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKy8qIFVzZWQgZm9yIGRyaXZlciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEZXLgorICogVGhlIHNvZnR3YXJlIG11c3Qgd3JpdGUgdGhpcyByZWdpc3RlciB0d2ljZSB0byBwb3N0IGFueSBjb21tYW5kLiBGaXJzdCwKKyAqIGl0IHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0xIGFuZCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcworICogZm9yIHRoZSBNQUlMQk9YIHN0cnVjdHVyZS4gU29mdHdhcmUgbXVzdCBwb2xsIHRoZSByZWFkeSBiaXQgdW50aWwgdGhpcworICogaXMgYWNrbm93bGVkZ2VkLiBUaGVuLCBzb3R3YXJlIHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0wIHdpdGggdGhlIGxvd2VyCisgKiBiaXRzIGluIHRoZSBhZGRyZXNzLiBJdCBtdXN0IHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGUgY29tbWFuZCBpcworICogY29tcGxldGUuIFVwb24gY29tcGxldGlvbiwgdGhlIE1BSUxCT1ggd2lsbCBjb250YWluIGEgdmFsaWQgY29tcGxldGlvbgorICogcXVldWUgZW50cnkuCisgKi8KKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfT0ZGU0VUCTB4MTYwCisjZGVmaW5lIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLCTB4MSAJLyogYml0IDAgKi8KKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfSElfTUFTSwkweDIJLyogYml0IDEgKi8KKworI2RlZmluZSBNUFVfRVBfQ09OVFJPTCAJCTAKKworLyoqKioqKioqKiogTVBVIHNlbXBob3JlICoqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTVBVX0VQX1NFTUFQSE9SRV9PRkZTRVQgCTB4YWMKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfU1RBR0VfTUFTSwkweDAwMDBGRkZGCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9NQVNLCTB4MQorI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfU0hJRlQJMzEKKy8qIE1QVSBzZW1waG9yZSBQT1NUIHN0YWdlIHZhbHVlcyAqLworI2RlZmluZSBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZIAkweDEgLyogRlcgYXdhaXRpbmcgZ29haGVhZCBmcm9tIGhvc3QgKi8KKyNkZWZpbmUgUE9TVF9TVEFHRV9IT1NUX1JEWSAJCTB4MiAvKiBIb3N0IGhhcyBnaXZlbiBnby1haGVkIHRvIEZXICovCisjZGVmaW5lIFBPU1RfU1RBR0VfQkVfUkVTRVQJCTB4MyAvKiBIb3N0IHdhbnRzIHRvIHJlc2V0IGNoaXAgKi8KKyNkZWZpbmUgUE9TVF9TVEFHRV9BUk1GV19SRFkJCTB4YzAwMAkvKiBGVyBpcyBkb25lIHdpdGggUE9TVCAqLworCisvKioqKioqKioqIE1lbW9yeSBCQVIgcmVnaXN0ZXIgKioqKioqKioqKioqLworI2RlZmluZSBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUIAkweGZjCisvKiBIb3N0IEludGVycnVwdCBFbmFibGUsIGlmIHNldCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFsdGhvdWdoICJQQ0kgSW50ZXJydXB0CisgKiBEaXNhYmxlIiBtYXkgc3RpbGwgZ2xvYmFsbHkgYmxvY2sgaW50ZXJydXB0cyBpbiBhZGRpdGlvbiB0byBpbmRpdmlkdWFsCisgKiBpbnRlcnJ1cHQgbWFza3M7IGEgbWVjaGFuaXNtIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byBibG9jayBhbGwgaW50ZXJydXB0cworICogYXRvbWljYWxseSB3aXRob3V0IGhhdmluZyB0byBhcmJpdHJhdGUgZm9yIHRoZSBQQ0kgSW50ZXJydXB0IERpc2FibGUgYml0CisgKiB3aXRoIHRoZSBPUy4KKyAqLworI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLCSgxIDw8IDI5KSAvKiBiaXQgMjkgKi8KKy8qIFBDSSBwaHlzaWNhbCBmdW5jdGlvbiBudW1iZXIgKi8KKyNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfUEZVTkNfTUFTSyAgCTB4NyAJLyogYml0cyAyNiAtIDI4ICovCisjZGVmaW5lIE1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX1NISUZUCTI2CisKKy8qKioqKioqKiogRXZlbnQgUSBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKyNkZWZpbmUgREJfRVFfT0ZGU0VUCQkJREJfQ1FfT0ZGU0VUCisjZGVmaW5lIERCX0VRX1JJTkdfSURfTUFTSwkJMHgxRkYJLyogYml0cyAwIC0gOCAqLworLyogQ2xlYXIgdGhlIGludGVycnVwdCBmb3IgdGhpcyBlcSAqLworI2RlZmluZSBEQl9FUV9DTFJfU0hJRlQJCQkoOSkJLyogYml0IDkgKi8KKy8qIE11c3QgYmUgMSAqLworI2RlZmluZSBEQl9FUV9FVk5UX1NISUZUCQkJKDEwKQkvKiBiaXQgMTAgKi8KKy8qIE51bWJlciBvZiBldmVudCBlbnRyaWVzIHByb2Nlc3NlZCAqLworI2RlZmluZSBEQl9FUV9OVU1fUE9QUEVEX1NISUZUCQkoMTYpCS8qIGJpdHMgMTYgLSAyOCAqLworLyogUmVhcm0gYml0ICovCisjZGVmaW5lIERCX0VRX1JFQVJNX1NISUZUCQkoMjkpCS8qIGJpdCAyOSAqLworCisvKioqKioqKioqIENvbXBsIFEgZG9vciBiZWxsICoqKioqKioqKioqKiovCisjZGVmaW5lIERCX0NRX09GRlNFVCAJCQkweDEyMAorI2RlZmluZSBEQl9DUV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKy8qIE51bWJlciBvZiBldmVudCBlbnRyaWVzIHByb2Nlc3NlZCAqLworI2RlZmluZSBEQl9DUV9OVU1fUE9QUEVEX1NISUZUCQkoMTYpIAkvKiBiaXRzIDE2IC0gMjggKi8KKy8qIFJlYXJtIGJpdCAqLworI2RlZmluZSBEQl9DUV9SRUFSTV9TSElGVAkJKDI5KSAJLyogYml0IDI5ICovCisKKy8qKioqKioqKioqIFRYIFVMUCBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKyNkZWZpbmUgREJfVFhVTFAxX09GRlNFVAkJMHg2MAorI2RlZmluZSBEQl9UWFVMUF9SSU5HX0lEX01BU0sJCTB4N0ZGCS8qIGJpdHMgMCAtIDEwICovCisvKiBOdW1iZXIgb2YgdHggZW50cmllcyBwb3N0ZWQgKi8KKyNkZWZpbmUgREJfVFhVTFBfTlVNX1BPU1RFRF9TSElGVAkoMTYpCS8qIGJpdHMgMTYgLSAyOSAqLworI2RlZmluZSBEQl9UWFVMUF9OVU1fUE9TVEVEX01BU0sJMHgzRkZGCS8qIGJpdHMgMTYgLSAyOSAqLworCisvKioqKioqKioqKiBSUShlcngpIGRvb3IgYmVsbCAqKioqKioqKioqKiovCisjZGVmaW5lIERCX1JRX09GRlNFVCAJCQkweDEwMAorI2RlZmluZSBEQl9SUV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKy8qIE51bWJlciBvZiByeCBmcmFncyBwb3N0ZWQgKi8KKyNkZWZpbmUgREJfUlFfTlVNX1BPU1RFRF9TSElGVAkJKDI0KQkvKiBiaXRzIDI0IC0gMzEgKi8KKworLyoKKyAqIEJFIGRlc2NyaXB0b3JzOiBob3N0IG1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgd2hvc2UgZm9ybWF0cworICogYXJlIGhhcmR3aXJlZCBpbiBCRSBzaWxpY29uLgorICovCisvKiBFdmVudCBRdWV1ZSBEZXNjcmlwdG9yICovCisjZGVmaW5lIEVRX0VOVFJZX1ZBTElEX01BU0sgCQkweDEJLyogYml0IDAgKi8KKyNkZWZpbmUgRVFfRU5UUllfUkVTX0lEX01BU0sgCQkweEZGRkYJLyogYml0cyAxNiAtIDMxICovCisjZGVmaW5lIEVRX0VOVFJZX1JFU19JRF9TSElGVCAJCTE2CitzdHJ1Y3QgYmVfZXFfZW50cnkgeworCXUzMiBldnQ7Cit9OworCisvKiBUWCBRdWV1ZSBEZXNjcmlwdG9yICovCisjZGVmaW5lIEVUSF9XUkJfRlJBR19MRU5fTUFTSwkJMHhGRkZGCitzdHJ1Y3QgYmVfZXRoX3dyYiB7CisJdTMyIGZyYWdfcGFfaGk7CQkvKiBkd29yZCAwICovCisJdTMyIGZyYWdfcGFfbG87CQkvKiBkd29yZCAxICovCisJdTMyIHJzdmQwOwkJLyogZHdvcmQgMiAqLworCXUzMiBmcmFnX2xlbjsJCS8qIGR3b3JkIDM6IGJpdHMgMCAtIDE1ICovCit9IF9fcGFja2VkOworCisvKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGZvciBldGhfaGRyX3dyYiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUKKyAqIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBhIGJ5dGUgOiB1c2VkIHRvIGNhbGN1bGF0ZQorICogb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZCAqLworc3RydWN0IGFtYXBfZXRoX2hkcl93cmIgeworCXU4IHJzdmQwWzMyXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMVszMl07CQkvKiBkd29yZCAxICovCisJdTggY29tcGxldGU7CQkvKiBkd29yZCAyICovCisJdTggZXZlbnQ7CisJdTggY3JjOworCXU4IGZvcndhcmQ7CisJdTggaXBzZWM7CisJdTggbWdtdDsKKwl1OCBpcGNzOworCXU4IHVkcGNzOworCXU4IHRjcGNzOworCXU4IGxzbzsKKwl1OCB2bGFuOworCXU4IGdzb1syXTsKKwl1OCBudW1fd3JiWzVdOworCXU4IGxzb19tc3NbMTRdOworCXU4IGxlblsxNl07CQkvKiBkd29yZCAzICovCisJdTggdmxhbl90YWdbMTZdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2V0aF9oZHJfd3JiIHsKKwl1MzIgZHdbNF07Cit9OworCisvKiBUWCBDb21wbCBRdWV1ZSBEZXNjcmlwdG9yICovCisKKy8qIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gZm9yIGV0aF90eF9jb21wbCBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUKKyAqIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlCisgKiBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkICovCitzdHJ1Y3QgYW1hcF9ldGhfdHhfY29tcGwgeworCXU4IHdyYl9pbmRleFsxNl07CS8qIGR3b3JkIDAgKi8KKwl1OCBjdFsyXTsgCQkvKiBkd29yZCAwICovCisJdTggcG9ydFsyXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMFs4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzdGF0dXNbNF07CQkvKiBkd29yZCAwICovCisJdTggdXNlcl9ieXRlc1sxNl07CS8qIGR3b3JkIDEgKi8KKwl1OCBud2hfYnl0ZXNbOF07CS8qIGR3b3JkIDEgKi8KKwl1OCBsc287CQkJLyogZHdvcmQgMSAqLworCXU4IGNhc3RfZW5jWzJdOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQxWzVdOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQyWzMyXTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBwa3RzWzE2XTsJCS8qIGR3b3JkIDMgKi8KKwl1OCByaW5naWRbMTFdOwkJLyogZHdvcmQgMyAqLworCXU4IGhhc2hfdmFsWzRdOwkJLyogZHdvcmQgMyAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2V0aF90eF9jb21wbCB7CisJdTMyIGR3WzRdOworfTsKKworLyogUlggUXVldWUgRGVzY3JpcHRvciAqLworc3RydWN0IGJlX2V0aF9yeF9kIHsKKwl1MzIgZnJhZ3BhX2hpOworCXUzMiBmcmFncGFfbG87Cit9OworCisvKiBSWCBDb21wbCBRdWV1ZSBEZXNjcmlwdG9yICovCisKKy8qIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gZm9yIGV0aF9yeF9jb21wbCBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUKKyAqIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlCisgKiBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkICovCitzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwgeworCXU4IHZsYW5fdGFnWzE2XTsJLyogZHdvcmQgMCAqLworCXU4IHBrdHNpemVbMTRdOwkJLyogZHdvcmQgMCAqLworCXU4IHBvcnQ7CQkvKiBkd29yZCAwICovCisJdTggaXBfb3B0OwkJLyogZHdvcmQgMCAqLworCXU4IGVycjsJCQkvKiBkd29yZCAxICovCisJdTggcnNzaHA7CQkvKiBkd29yZCAxICovCisJdTggaXBmOwkJCS8qIGR3b3JkIDEgKi8KKwl1OCB0Y3BmOwkJLyogZHdvcmQgMSAqLworCXU4IHVkcGY7CQkvKiBkd29yZCAxICovCisJdTggaXBja3NtOwkJLyogZHdvcmQgMSAqLworCXU4IGw0X2Nrc207CQkvKiBkd29yZCAxICovCisJdTggaXBfdmVyc2lvbjsJCS8qIGR3b3JkIDEgKi8KKwl1OCBtYWNkc3RbNl07CQkvKiBkd29yZCAxICovCisJdTggdnRwOwkJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMDsJCS8qIGR3b3JkIDEgKi8KKwl1OCBmcmFnbmR4WzEwXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBjdFsyXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBzdzsJCQkvKiBkd29yZCAxICovCisJdTggbnVtZnJhZ3NbM107CQkvKiBkd29yZCAxICovCisJdTggcnNzX2ZsdXNoOwkJLyogZHdvcmQgMiAqLworCXU4IGNhc3RfZW5jWzJdOwkJLyogZHdvcmQgMiAqLworCXU4IHFucTsJCQkvKiBkd29yZCAyICovCisJdTggcnNzX2Jhbms7CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDFbMjNdOwkJLyogZHdvcmQgMiAqLworCXU4IGxyb19wa3Q7CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDJbMl07CQkvKiBkd29yZCAyICovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAyICovCisJdTggcnNzaGFzaFszMl07CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsIHsKKwl1MzIgZHdbNF07Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNzVhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTAsMCArMSwxOTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCitNT0RVTEVfVkVSU0lPTihEUlZfVkVSKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZV9kZXZfaWRzKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgRFJWX1ZFUik7CitNT0RVTEVfQVVUSE9SKCJTZXJ2ZXJFbmdpbmVzIENvcnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnhfZnJhZ19zaXplID0gMjA0ODsKK21vZHVsZV9wYXJhbShyeF9mcmFnX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhyeF9mcmFnX3NpemUsICJTaXplIG9mIGEgZnJhZ21lbnQgdGhhdCBob2xkcyByY3ZkIGRhdGEuIik7CisKKyNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOWEyCisjZGVmaW5lIEJFMl9ERVZJQ0VfSURfMSAJMHgwMjExCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmVfZGV2X2lkcykgPSB7CisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgQkUyX0RFVklDRV9JRF8xKSB9LAorCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMpOworCitzdGF0aWMgdm9pZCBiZV9xdWV1ZV9mcmVlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJnEtPmRtYV9tZW07CisJaWYgKG1lbS0+dmEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgbWVtLT5zaXplLAorCQkJbWVtLT52YSwgbWVtLT5kbWEpOworfQorCitzdGF0aWMgaW50IGJlX3F1ZXVlX2FsbG9jKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJdTE2IGxlbiwgdTE2IGVudHJ5X3NpemUpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSA9ICZxLT5kbWFfbWVtOworCisJbWVtc2V0KHEsIDAsIHNpemVvZigqcSkpOworCXEtPmxlbiA9IGxlbjsKKwlxLT5lbnRyeV9zaXplID0gZW50cnlfc2l6ZTsKKwltZW0tPnNpemUgPSBsZW4gKiBlbnRyeV9zaXplOworCW1lbS0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBtZW0tPnNpemUsICZtZW0tPmRtYSk7CisJaWYgKCFtZW0tPnZhKQorCQlyZXR1cm4gLTE7CisJbWVtc2V0KG1lbS0+dmEsIDAsIG1lbS0+c2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfaGVhZF9ub2RlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+aGVhZCAqIHEtPmVudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfdGFpbF9ub2RlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+dGFpbCAqIHEtPmVudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9oZWFkX2luYyhzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlpbmRleF9pbmMoJnEtPmhlYWQsIHEtPmxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV90YWlsX2luYyhzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlpbmRleF9pbmMoJnEtPnRhaWwsIHEtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGJlX2ludHJfc2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIGJvb2wgZW5hYmxlKQoreworCXU4IF9faW9tZW0gKmFkZHIgPSBjdHJsLT5wY2ljZmcgKyBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUOworCXUzMiByZWcgPSBpb3JlYWQzMihhZGRyKTsKKwl1MzIgZW5hYmxlZCA9IHJlZyAmIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJaWYgKCFlbmFibGVkICYmIGVuYWJsZSkgeworCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwl9IGVsc2UgaWYgKGVuYWJsZWQgJiYgIWVuYWJsZSkgeworCQlyZWcgJj0gfk1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkJIjogYmFkIHZhbHVlIGluIG1lbWJhcl9pbnRfY3RybCByZWc9MHgleFxuIiwgcmVnKTsKKwkJcmV0dXJuOworCX0KKwlpb3dyaXRlMzIocmVnLCBhZGRyKTsKK30KKworc3RhdGljIHZvaWQgYmVfcnhxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCB1MTYgcG9zdGVkKQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBxaWQgJiBEQl9SUV9SSU5HX0lEX01BU0s7CisJdmFsIHw9IHBvc3RlZCA8PCBEQl9SUV9OVU1fUE9TVEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfUlFfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgYmVfdHhxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCB1MTYgcG9zdGVkKQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBxaWQgJiBEQl9UWFVMUF9SSU5HX0lEX01BU0s7CisJdmFsIHw9IChwb3N0ZWQgJiBEQl9UWFVMUF9OVU1fUE9TVEVEX01BU0spIDw8IERCX1RYVUxQX05VTV9QT1NURURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgY3RybC0+ZGIgKyBEQl9UWFVMUDFfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgYmVfZXFfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsCisJCWJvb2wgYXJtLCBib29sIGNsZWFyX2ludCwgdTE2IG51bV9wb3BwZWQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IHFpZCAmIERCX0VRX1JJTkdfSURfTUFTSzsKKwlpZiAoYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9FUV9SRUFSTV9TSElGVDsKKwlpZiAoY2xlYXJfaW50KQorCQl2YWwgfD0gMSA8PCBEQl9FUV9DTFJfU0hJRlQ7CisJdmFsIHw9IDEgPDwgREJfRVFfRVZOVF9TSElGVDsKKwl2YWwgfD0gbnVtX3BvcHBlZCA8PCBEQl9FUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfRVFfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsCisJCWJvb2wgYXJtLCB1MTYgbnVtX3BvcHBlZCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gcWlkICYgREJfQ1FfUklOR19JRF9NQVNLOworCWlmIChhcm0pCisJCXZhbCB8PSAxIDw8IERCX0NRX1JFQVJNX1NISUZUOworCXZhbCB8PSBudW1fcG9wcGVkIDw8IERCX0NRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgY3RybC0+ZGIgKyBEQl9DUV9PRkZTRVQpOworfQorCisKK3N0YXRpYyBpbnQgYmVfbWFjX2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXN0YXR1cyA9IGJlX2NtZF9wbWFjX2RlbCgmYWRhcHRlci0+Y3RybCwgYWRhcHRlci0+aWZfaGFuZGxlLAorCQkJCWFkYXB0ZXItPnBtYWNfaWQpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQlzdGF0dXMgPSBiZV9jbWRfcG1hY19hZGQoJmFkYXB0ZXItPmN0cmwsICh1OCAqKWFkZHItPnNhX2RhdGEsCisJCQkJYWRhcHRlci0+aWZfaGFuZGxlLCAmYWRhcHRlci0+cG1hY19pZCk7CisJfQorCisJaWYgKCFzdGF0dXMpCisJCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGRldl9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2h3X3N0YXRzICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXItPnN0YXRzLmNtZC52YSk7CisJc3RydWN0IGJlX3J4Zl9zdGF0cyAqcnhmX3N0YXRzID0gJmh3X3N0YXRzLT5yeGY7CisJc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzICpwb3J0X3N0YXRzID0KKwkJCSZyeGZfc3RhdHMtPnBvcnRbYWRhcHRlci0+cG9ydF9udW1dOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkZXZfc3RhdHMgPSAmYWRhcHRlci0+c3RhdHMubmV0X3N0YXRzOworCisJZGV2X3N0YXRzLT5yeF9wYWNrZXRzID0gcG9ydF9zdGF0cy0+cnhfdG90YWxfZnJhbWVzOworCWRldl9zdGF0cy0+dHhfcGFja2V0cyA9IHBvcnRfc3RhdHMtPnR4X3VuaWNhc3RmcmFtZXMgKworCQlwb3J0X3N0YXRzLT50eF9tdWx0aWNhc3RmcmFtZXMgKyBwb3J0X3N0YXRzLT50eF9icm9hZGNhc3RmcmFtZXM7CisJZGV2X3N0YXRzLT5yeF9ieXRlcyA9ICh1NjQpIHBvcnRfc3RhdHMtPnJ4X2J5dGVzX21zZCA8PCAzMiB8CisJCQkJKHU2NCkgcG9ydF9zdGF0cy0+cnhfYnl0ZXNfbHNkOworCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAodTY0KSBwb3J0X3N0YXRzLT50eF9ieXRlc19tc2QgPDwgMzIgfAorCQkJCSh1NjQpIHBvcnRfc3RhdHMtPnR4X2J5dGVzX2xzZDsKKworCS8qIGJhZCBwa3RzIHJlY2VpdmVkICovCisJZGV2X3N0YXRzLT5yeF9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9jcmNfZXJyb3JzICsKKwkJcG9ydF9zdGF0cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnMgKworCQlwb3J0X3N0YXRzLT5yeF9pbl9yYW5nZV9lcnJvcnMgKworCQlwb3J0X3N0YXRzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzICsgcG9ydF9zdGF0cy0+cnhfZnJhbWVfdG9vX2xvbmc7CisKKwkvKiAgcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zICovCisJZGV2X3N0YXRzLT50eF9lcnJvcnMgPSAwOworCisJLyogIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMgKi8KKwlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgPSAwOworCisJLyogbm8gc3BhY2UgYXZhaWxhYmxlIGluIGxpbnV4ICovCisJZGV2X3N0YXRzLT50eF9kcm9wcGVkID0gMDsKKworCWRldl9zdGF0cy0+bXVsdGljYXN0ID0gcG9ydF9zdGF0cy0+dHhfbXVsdGljYXN0ZnJhbWVzOworCWRldl9zdGF0cy0+Y29sbGlzaW9ucyA9IDA7CisKKwkvKiBkZXRhaWxlZCByeCBlcnJvcnMgKi8KKwlkZXZfc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9pbl9yYW5nZV9lcnJvcnMgKworCQlwb3J0X3N0YXRzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzICsgcG9ydF9zdGF0cy0+cnhfZnJhbWVfdG9vX2xvbmc7CisJLyogcmVjZWl2ZSByaW5nIGJ1ZmZlciBvdmVyZmxvdyAqLworCWRldl9zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSAwOworCWRldl9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2NyY19lcnJvcnM7CisKKwkvKiBmcmFtZSBhbGlnbm1lbnQgZXJyb3JzICovCisJZGV2X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9yczsKKwkvKiByZWNlaXZlciBmaWZvIG92ZXJydW4gKi8KKwkvKiBkcm9wc19ub19wYnVmIGlzIG5vIHBlciBpL2YsIGl0J3MgcGVyIEJFIGNhcmQgKi8KKwlkZXZfc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfZmlmb19vdmVyZmxvdyArCisJCQkJCXBvcnRfc3RhdHMtPnJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3cgKworCQkJCQlyeGZfc3RhdHMtPnJ4X2Ryb3BzX25vX3BidWY7CisJLyogcmVjZWl2ZXIgbWlzc2VkIHBhY2tldGQgKi8KKwlkZXZfc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSAwOworCS8qIGRldGFpbGVkIHR4X2Vycm9ycyAqLworCWRldl9zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPSAwOworCWRldl9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSAwOworCWRldl9zdGF0cy0+dHhfZmlmb19lcnJvcnMgPSAwOworCWRldl9zdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CisJZGV2X3N0YXRzLT50eF93aW5kb3dfZXJyb3JzID0gMDsKK30KKworc3RhdGljIHZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9saW5rX2luZm8gKnByZXYgPSAmYWRhcHRlci0+bGluazsKKwlzdHJ1Y3QgYmVfbGlua19pbmZvIG5vdyA9IHsgMCB9OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwliZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoJmFkYXB0ZXItPmN0cmwsICZub3cpOworCisJLyogSWYgbGluayBjYW1lIHVwIG9yIHdlbnQgZG93biAqLworCWlmIChub3cuc3BlZWQgIT0gcHJldi0+c3BlZWQgJiYgKG5vdy5zcGVlZCA9PSBQSFlfTElOS19TUEVFRF9aRVJPIHx8CisJCQlwcmV2LT5zcGVlZCA9PSBQSFlfTElOS19TUEVFRF9aRVJPKSkgeworCQlpZiAobm93LnNwZWVkID09IFBIWV9MSU5LX1NQRUVEX1pFUk8pIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayBkb3duXG4iLCBuZXRkZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIHVwXG4iLCBuZXRkZXYtPm5hbWUpOworCQl9CisJfQorCSpwcmV2ID0gbm93OworfQorCisvKiBVcGRhdGUgdGhlIEVRIGRlbGF5IG4gQkUgYmFzZWQgb24gdGhlIFJYIGZyYWdzIGNvbnN1bWVkIC8gc2VjICovCitzdGF0aWMgdm9pZCBiZV9yeF9lcWRfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSAmYWRhcHRlci0+c3RhdHMuZHJ2cl9zdGF0czsKKwl1bG9uZyBub3cgPSBqaWZmaWVzOworCXUzMiBlcWQ7CisKKwlpZiAoIXJ4X2VxLT5lbmFibGVfYWljKQorCQlyZXR1cm47CisKKwkvKiBXcmFwcGVkIGFyb3VuZCAqLworCWlmICh0aW1lX2JlZm9yZShub3csIHN0YXRzLT5yeF9mcHNfamlmZmllcykpIHsKKwkJc3RhdHMtPnJ4X2Zwc19qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIG9uY2UgYSBzZWNvbmQgKi8KKwlpZiAoKG5vdyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgPCBIWikKKwkJcmV0dXJuOworCisJc3RhdHMtPmJlX3J4X2ZwcyA9IChzdGF0cy0+YmVfcnhfZnJhZ3MgLSBzdGF0cy0+YmVfcHJldl9yeF9mcmFncykgLworCQkJKChub3cgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIC8gSFopOworCisJc3RhdHMtPnJ4X2Zwc19qaWZmaWVzID0gbm93OworCXN0YXRzLT5iZV9wcmV2X3J4X2ZyYWdzID0gc3RhdHMtPmJlX3J4X2ZyYWdzOworCWVxZCA9IHN0YXRzLT5iZV9yeF9mcHMgLyAxMTAwMDA7CisJZXFkID0gZXFkIDw8IDM7CisJaWYgKGVxZCA+IHJ4X2VxLT5tYXhfZXFkKQorCQllcWQgPSByeF9lcS0+bWF4X2VxZDsKKwlpZiAoZXFkIDwgcnhfZXEtPm1pbl9lcWQpCisJCWVxZCA9IHJ4X2VxLT5taW5fZXFkOworCWlmIChlcWQgPCAxMCkKKwkJZXFkID0gMDsKKwlpZiAoZXFkICE9IHJ4X2VxLT5jdXJfZXFkKQorCQliZV9jbWRfbW9kaWZ5X2VxZChjdHJsLCByeF9lcS0+cS5pZCwgZXFkKTsKKworCXJ4X2VxLT5jdXJfZXFkID0gZXFkOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAmYWRhcHRlci0+c3RhdHMubmV0X3N0YXRzOworfQorCitzdGF0aWMgdTMyIGJlX2NhbGNfcmF0ZSh1NjQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgdGlja3MpCit7CisJdTY0IHJhdGUgPSBieXRlczsKKworCWRvX2RpdihyYXRlLCB0aWNrcyAvIEhaKTsKKwlyYXRlIDw8PSAzOwkJCS8qIGJ5dGVzL3NlYyAtPiBiaXRzL3NlYyAqLworCWRvX2RpdihyYXRlLCAxMDAwMDAwdWwpOwkvKiBNQi9TZWMgKi8KKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgdm9pZCBiZV90eF9yYXRlX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisKKwkvKiBXcmFwcGVkIGFyb3VuZD8gKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBzdGF0cy0+YmVfdHhfamlmZmllcykpIHsKKwkJc3RhdHMtPmJlX3R4X2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CisKKwkvKiBVcGRhdGUgdHggcmF0ZSBvbmNlIGluIHR3byBzZWNvbmRzICovCisJaWYgKChub3cgLSBzdGF0cy0+YmVfdHhfamlmZmllcykgPiAyICogSFopIHsKKwkJc3RhdHMtPmJlX3R4X3JhdGUgPSBiZV9jYWxjX3JhdGUoc3RhdHMtPmJlX3R4X2J5dGVzCisJCQkJCQkgIC0gc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYsCisJCQkJCQkgbm93IC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpOworCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IG5vdzsKKwkJc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfdHhfYnl0ZXM7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZV90eF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgYm9vbCBzdG9wcGVkKQoreworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisJc3RhdHMtPmJlX3R4X3JlcXMrKzsKKwlzdGF0cy0+YmVfdHhfd3JicyArPSB3cmJfY250OworCXN0YXRzLT5iZV90eF9ieXRlcyArPSBjb3BpZWQ7CisJaWYgKHN0b3BwZWQpCisJCXN0YXRzLT5iZV90eF9zdG9wcysrOworfQorCisvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIFdSQiBlbnRyaWVzIG5lZWRlZCB0byB4bWl0IGRhdGEgaW4gYW4gc2tiICovCitzdGF0aWMgdTMyIHdyYl9jbnRfZm9yX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sICpkdW1teSkKK3sKKwlpbnQgY250ID0gMDsKKwl3aGlsZSAoc2tiKSB7CisJCWlmIChza2ItPmxlbiA+IHNrYi0+ZGF0YV9sZW4pCisJCQljbnQrKzsKKwkJY250ICs9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCXNrYiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OworCX0KKwkvKiB0byBhY2NvdW50IGZvciBoZHIgd3JiICovCisJY250Kys7CisJaWYgKGNudCAmIDEpIHsKKwkJLyogYWRkIGEgZHVtbXkgdG8gbWFrZSBpdCBhbiBldmVuIG51bSAqLworCQljbnQrKzsKKwkJKmR1bW15ID0gdHJ1ZTsKKwl9IGVsc2UKKwkJKmR1bW15ID0gZmFsc2U7CisJQlVHX09OKGNudCA+IEJFX01BWF9UWF9GUkFHX0NPVU5UKTsKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JiX2ZpbGwoc3RydWN0IGJlX2V0aF93cmIgKndyYiwgdTY0IGFkZHIsIGludCBsZW4pCit7CisJd3JiLT5mcmFnX3BhX2hpID0gdXBwZXJfMzJfYml0cyhhZGRyKTsKKwl3cmItPmZyYWdfcGFfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKKwl3cmItPmZyYWdfbGVuID0gbGVuICYgRVRIX1dSQl9GUkFHX0xFTl9NQVNLOworfQorCitzdGF0aWMgdm9pZCB3cmJfZmlsbF9oZHIoc3RydWN0IGJlX2V0aF9oZHJfd3JiICpoZHIsIHN0cnVjdCBza19idWZmICpza2IsCisJCWJvb2wgdmxhbiwgdTMyIHdyYl9jbnQsIHUzMiBsZW4pCit7CisJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGNyYywgaGRyLCAxKTsKKworCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID4gMSAmJiBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGxzbywgaGRyLCAxKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgbHNvX21zcywKKwkJCWhkciwgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CisJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCWlmIChpc190Y3BfcGt0KHNrYikpCisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCB0Y3BjcywgaGRyLCAxKTsKKwkJZWxzZSBpZiAoaXNfdWRwX3BrdChza2IpKQorCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgdWRwY3MsIGhkciwgMSk7CisJfQorCisJaWYgKHZsYW4gJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIHZsYW4sIGhkciwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIHZsYW5fdGFnLAorCQkJaGRyLCB2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJfQorCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgZXZlbnQsIGhkciwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgY29tcGxldGUsIGhkciwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgbnVtX3dyYiwgaGRyLCB3cmJfY250KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCBsZW4sIGhkciwgbGVuKTsKK30KKworCitzdGF0aWMgaW50IG1ha2VfdHhfd3JicyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHdyYl9jbnQsIGJvb2wgZHVtbXlfd3JiKQoreworCXU2NCBidXNhZGRyOworCXUzMiBpLCBjb3BpZWQgPSAwOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3Rfc2tiID0gc2tiOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmYWRhcHRlci0+dHhfb2JqLnE7CisJc3RydWN0IGJlX2V0aF93cmIgKndyYjsKKwlzdHJ1Y3QgYmVfZXRoX2hkcl93cmIgKmhkcjsKKworCWF0b21pY19hZGQod3JiX2NudCwgJnR4cS0+dXNlZCk7CisJaGRyID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CisJcXVldWVfaGVhZF9pbmModHhxKTsKKworCXdoaWxlIChza2IpIHsKKwkJaWYgKHNrYi0+bGVuID4gc2tiLT5kYXRhX2xlbikgeworCQkJaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKwkJCWJ1c2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGxlbiwKKwkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQl3cmIgPSBxdWV1ZV9oZWFkX25vZGUodHhxKTsKKwkJCXdyYl9maWxsKHdyYiwgYnVzYWRkciwgbGVuKTsKKwkJCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOworCQkJcXVldWVfaGVhZF9pbmModHhxKTsKKwkJCWNvcGllZCArPSBsZW47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0KKwkJCQkmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCWJ1c2FkZHIgPSBwY2lfbWFwX3BhZ2UocGRldiwgZnJhZy0+cGFnZSwKKwkJCQkJZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJCWZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJd3JiID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CisJCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIGZyYWctPnNpemUpOworCQkJYmVfZHdzX2NwdV90b19sZSh3cmIsIHNpemVvZigqd3JiKSk7CisJCQlxdWV1ZV9oZWFkX2luYyh0eHEpOworCQkJY29waWVkICs9IGZyYWctPnNpemU7CisJCX0KKwkJc2tiID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CisJfQorCisJaWYgKGR1bW15X3dyYikgeworCQl3cmIgPSBxdWV1ZV9oZWFkX25vZGUodHhxKTsKKwkJd3JiX2ZpbGwod3JiLCAwLCAwKTsKKwkJYmVfZHdzX2NwdV90b19sZSh3cmIsIHNpemVvZigqd3JiKSk7CisJCXF1ZXVlX2hlYWRfaW5jKHR4cSk7CisJfQorCisJd3JiX2ZpbGxfaGRyKGhkciwgZmlyc3Rfc2tiLCBhZGFwdGVyLT52bGFuX2dycCA/IHRydWUgOiBmYWxzZSwKKwkJd3JiX2NudCwgY29waWVkKTsKKwliZV9kd3NfY3B1X3RvX2xlKGhkciwgc2l6ZW9mKCpoZHIpKTsKKworCXJldHVybiBjb3BpZWQ7Cit9CisKK3N0YXRpYyBpbnQgYmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfdHhfb2JqICp0eF9vYmogPSAmYWRhcHRlci0+dHhfb2JqOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmdHhfb2JqLT5xOworCXUzMiB3cmJfY250ID0gMCwgY29waWVkID0gMDsKKwl1MzIgc3RhcnQgPSB0eHEtPmhlYWQ7CisJYm9vbCBkdW1teV93cmIsIHN0b3BwZWQgPSBmYWxzZTsKKworCXdyYl9jbnQgPSB3cmJfY250X2Zvcl9za2Ioc2tiLCAmZHVtbXlfd3JiKTsKKworCWNvcGllZCA9IG1ha2VfdHhfd3JicyhhZGFwdGVyLCBza2IsIHdyYl9jbnQsIGR1bW15X3dyYik7CisKKwkvKiByZWNvcmQgdGhlIHNlbnQgc2tiIGluIHRoZSBzZW50X3NrYiB0YWJsZSAqLworCUJVR19PTih0eF9vYmotPnNlbnRfc2tiX2xpc3Rbc3RhcnRdKTsKKwl0eF9vYmotPnNlbnRfc2tiX2xpc3Rbc3RhcnRdID0gc2tiOworCisJLyogRW5zdXJlIHRoYXQgdHhxIGhhcyBzcGFjZSBmb3IgdGhlIG5leHQgc2tiOyBFbHNlIHN0b3AgdGhlIHF1ZXVlCisJICogKkJFRk9SRSogcmluZ2luZyB0aGUgdHggZG9vcmJlbGwsIHNvIHRoYXQgd2Ugc2VyaWFsemUgdGhlCisJICogdHggY29tcGxzIG9mIHRoZSBjdXJyZW50IHRyYW5zbWl0IHdoaWNoJ2xsIHdha2UgdXAgdGhlIHF1ZXVlCisJICovCisJaWYgKChCRV9NQVhfVFhfRlJBR19DT1VOVCArIGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKSA+PSB0eHEtPmxlbikgeworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCXN0b3BwZWQgPSB0cnVlOworCX0KKworCWJlX3R4cV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHR4cS0+aWQsIHdyYl9jbnQpOworCisJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwliZV90eF9zdGF0c191cGRhdGUoYWRhcHRlciwgd3JiX2NudCwgY29waWVkLCBzdG9wcGVkKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IGJlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChuZXdfbXR1IDwgQkVfTUlOX01UVSB8fAorCQkJbmV3X210dSA+IEJFX01BWF9KVU1CT19GUkFNRV9TSVpFKSB7CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiTVRVIG11c3QgYmUgYmV0d2VlbiAlZCBhbmQgJWQgYnl0ZXNcbiIsCisJCQlCRV9NSU5fTVRVLCBCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiTVRVIGNoYW5nZWQgZnJvbSAlZCB0byAlZCBieXRlc1xuIiwKKwkJCW5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpZiB0aGVyZSBhcmUgQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCBvciBsZXNzZXIgbnVtYmVyIG9mIFZMQU5TIGNvbmZpZ3VyZWQsCisgKiBwcm9ncmFtIHRoZW0gaW4gQkUuICBJZiBtb3JlIHRoYW4gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCBhcmUgY29uZmlndXJlZCwKKyAqIHNldCB0aGUgQkUgaW4gcHJvbWlzY3VvdXMgVkxBTiBtb2RlLgorICovCitzdGF0aWMgdm9pZCBiZV92aWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiB2dGFnW0JFX05VTV9WTEFOU19TVVBQT1JURURdOworCXUxNiBudGFncyA9IDAsIGk7CisKKwlpZiAoYWRhcHRlci0+bnVtX3ZsYW5zIDw9IEJFX05VTV9WTEFOU19TVVBQT1JURUQpICB7CisJCS8qIENvbnN0cnVjdCBWTEFOIFRhYmxlIHRvIGdpdmUgdG8gSFcgKi8KKwkJZm9yIChpID0gMDsgaSA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyBpKyspIHsKKwkJCWlmIChhZGFwdGVyLT52bGFuX3RhZ1tpXSkgeworCQkJCXZ0YWdbbnRhZ3NdID0gY3B1X3RvX2xlMTYoaSk7CisJCQkJbnRhZ3MrKzsKKwkJCX0KKwkJfQorCQliZV9jbWRfdmxhbl9jb25maWcoJmFkYXB0ZXItPmN0cmwsIGFkYXB0ZXItPmlmX2hhbmRsZSwKKwkJCXZ0YWcsIG50YWdzLCAxLCAwKTsKKwl9IGVsc2UgeworCQliZV9jbWRfdmxhbl9jb25maWcoJmFkYXB0ZXItPmN0cmwsIGFkYXB0ZXItPmlmX2hhbmRsZSwKKwkJCU5VTEwsIDAsIDEsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgYmVfdmxhbl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisKKwliZV9lcV9ub3RpZnkoY3RybCwgcnhfZXEtPnEuaWQsIGZhbHNlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGN0cmwsIHR4X2VxLT5xLmlkLCBmYWxzZSwgZmFsc2UsIDApOworCWFkYXB0ZXItPnZsYW5fZ3JwID0gZ3JwOworCWJlX2VxX25vdGlmeShjdHJsLCByeF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShjdHJsLCB0eF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworfQorCitzdGF0aWMgdm9pZCBiZV92bGFuX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhZGFwdGVyLT5udW1fdmxhbnMrKzsKKwlhZGFwdGVyLT52bGFuX3RhZ1t2aWRdID0gMTsKKworCWJlX3ZpZF9jb25maWcobmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYmVfdmxhbl9yZW1fdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYWRhcHRlci0+bnVtX3ZsYW5zLS07CisJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDA7CisKKwl2bGFuX2dyb3VwX3NldF9kZXZpY2UoYWRhcHRlci0+dmxhbl9ncnAsIHZpZCwgTlVMTCk7CisJYmVfdmlkX2NvbmZpZyhuZXRkZXYpOworfQorCitzdGF0aWMgdm9pZCBiZV9zZXRfbXVsdGljYXN0X2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKKwl1OCBtYWNfYWRkclszMl1bRVRIX0FMRU5dOworCWludCBpID0gMDsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCS8qIHNldCBCRSBpbiBNdWx0aWNhc3QgcHJvbWlzY3VvdXMgKi8KKwkJYmVfY21kX21jYXN0X21hY19zZXQoJmFkYXB0ZXItPmN0cmwsCisJCQkJCWFkYXB0ZXItPmlmX2hhbmRsZSwgTlVMTCwgMCwgdHJ1ZSk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwkJbWVtY3B5KCZtYWNfYWRkcltpXVswXSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQlpZiAoKytpID49IDMyKSB7CisJCQliZV9jbWRfbWNhc3RfbWFjX3NldCgmYWRhcHRlci0+Y3RybCwKKwkJCQlhZGFwdGVyLT5pZl9oYW5kbGUsICZtYWNfYWRkclswXVswXSwgaSwgZmFsc2UpOworCQkJaSA9IDA7CisJCX0KKworCX0KKworCWlmIChpKSB7CisJCS8qIHJlc2V0IHRoZSBwcm9taXNjdW91cyBtb2RlIGFsc28uICovCisJCWJlX2NtZF9tY2FzdF9tYWNfc2V0KCZhZGFwdGVyLT5jdHJsLAorCQkJYWRhcHRlci0+aWZfaGFuZGxlLCAmbWFjX2FkZHJbMF1bMF0sIGksIGZhbHNlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZygmYWRhcHRlci0+Y3RybCwgYWRhcHRlci0+cG9ydF9udW0sIDEpOworCX0gZWxzZSB7CisJCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoJmFkYXB0ZXItPmN0cmwsIGFkYXB0ZXItPnBvcnRfbnVtLCAwKTsKKwkJYmVfc2V0X211bHRpY2FzdF9maWx0ZXIobmV0ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisJdWxvbmcgbm93ID0gamlmZmllczsKKworCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPmJlX3J4X2ppZmZpZXMpKSB7CisJCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KKwlpZiAoKG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSA8IDIgKiBIWikKKwkJcmV0dXJuOworCisJc3RhdHMtPmJlX3J4X3JhdGUgPSBiZV9jYWxjX3JhdGUoc3RhdHMtPmJlX3J4X2J5dGVzCisJCQkJCSAgLSBzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldiwKKwkJCQkJIG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKTsKKwlzdGF0cy0+YmVfcnhfamlmZmllcyA9IG5vdzsKKwlzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldiA9IHN0YXRzLT5iZV9yeF9ieXRlczsKK30KKworc3RhdGljIHZvaWQgYmVfcnhfc3RhdHNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQl1MzIgcGt0c2l6ZSwgdTE2IG51bWZyYWdzKQoreworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisKKwlzdGF0cy0+YmVfcnhfY29tcGwrKzsKKwlzdGF0cy0+YmVfcnhfZnJhZ3MgKz0gbnVtZnJhZ3M7CisJc3RhdHMtPmJlX3J4X2J5dGVzICs9IHBrdHNpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICoKK2dldF9yeF9wYWdlX2luZm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBmcmFnX2lkeCkKK3sKKwlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpyeF9wYWdlX2luZm87CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKKworCXJ4X3BhZ2VfaW5mbyA9ICZhZGFwdGVyLT5yeF9vYmoucGFnZV9pbmZvX3RibFtmcmFnX2lkeF07CisJQlVHX09OKCFyeF9wYWdlX2luZm8tPnBhZ2UpOworCisJaWYgKHJ4X3BhZ2VfaW5mby0+bGFzdF9wYWdlX3VzZXIpCisJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIHBjaV91bm1hcF9hZGRyKHJ4X3BhZ2VfaW5mbywgYnVzKSwKKwkJCWFkYXB0ZXItPmJpZ19wYWdlX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlhdG9taWNfZGVjKCZyeHEtPnVzZWQpOworCXJldHVybiByeF9wYWdlX2luZm87Cit9CisKKy8qIFRocm93YXdheSB0aGUgZGF0YSBpbiB0aGUgUnggY29tcGxldGlvbiAqLworc3RhdGljIHZvaWQgYmVfcnhfY29tcGxfZGlzY2FyZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKKwlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm87CisJdTE2IHJ4cV9pZHgsIGksIG51bV9yY3ZkOworCisJcnhxX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBmcmFnbmR4LCByeGNwKTsKKwludW1fcmN2ZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBudW1mcmFncywgcnhjcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JjdmQ7IGkrKykgeworCQlwYWdlX2luZm8gPSBnZXRfcnhfcGFnZV9pbmZvKGFkYXB0ZXIsIHJ4cV9pZHgpOworCQlwdXRfcGFnZShwYWdlX2luZm8tPnBhZ2UpOworCQltZW1zZXQocGFnZV9pbmZvLCAwLCBzaXplb2YoKnBhZ2VfaW5mbykpOworCQlpbmRleF9pbmMoJnJ4cV9pZHgsIHJ4cS0+bGVuKTsKKwl9Cit9CisKKy8qCisgKiBza2JfZmlsbF9yeF9kYXRhIGZvcm1zIGEgY29tcGxldGUgc2tiIGZvciBhbiBldGhlciBmcmFtZQorICogaW5kaWNhdGVkIGJ5IHJ4Y3AuCisgKi8KK3N0YXRpYyB2b2lkIHNrYl9maWxsX3J4X2RhdGEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwKQoreworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CisJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcGFnZV9pbmZvOworCXUxNiByeHFfaWR4LCBpLCBudW1fcmN2ZDsKKwl1MzIgcGt0c2l6ZSwgaGRyX2xlbiwgY3Vycl9mcmFnX2xlbjsKKwl1OCAqc3RhcnQ7CisKKwlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOworCXBrdHNpemUgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgcGt0c2l6ZSwgcnhjcCk7CisJbnVtX3JjdmQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgbnVtZnJhZ3MsIHJ4Y3ApOworCisJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCByeHFfaWR4KTsKKworCXN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2VfaW5mby0+cGFnZSkgKyBwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OworCXByZWZldGNoKHN0YXJ0KTsKKworCS8qIENvcHkgZGF0YSBpbiB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiB0aGlzIGNvbXBsZXRpb24gKi8KKwljdXJyX2ZyYWdfbGVuID0gbWluKHBrdHNpemUsIHJ4X2ZyYWdfc2l6ZSk7CisKKwkvKiBDb3B5IHRoZSBoZWFkZXIgcG9ydGlvbiBpbnRvIHNrYl9kYXRhICovCisJaGRyX2xlbiA9IG1pbigodTMyKUJFX0hEUl9MRU4sIGN1cnJfZnJhZ19sZW4pOworCW1lbWNweShza2ItPmRhdGEsIHN0YXJ0LCBoZHJfbGVuKTsKKwlza2ItPmxlbiA9IGN1cnJfZnJhZ19sZW47CisJaWYgKGN1cnJfZnJhZ19sZW4gPD0gQkVfSERSX0xFTikgeyAvKiB0aW55IHBhY2tldCAqLworCQkvKiBDb21wbGV0ZSBwYWNrZXQgaGFzIG5vdyBiZWVuIG1vdmVkIHRvIGRhdGEgKi8KKwkJcHV0X3BhZ2UocGFnZV9pbmZvLT5wYWdlKTsKKwkJc2tiLT5kYXRhX2xlbiA9IDA7CisJCXNrYi0+dGFpbCArPSBjdXJyX2ZyYWdfbGVuOworCX0gZWxzZSB7CisJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSAxOworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UgPSBwYWdlX2luZm8tPnBhZ2U7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgPQorCQkJCQlwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0ICsgaGRyX2xlbjsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplID0gY3Vycl9mcmFnX2xlbiAtIGhkcl9sZW47CisJCXNrYi0+ZGF0YV9sZW4gPSBjdXJyX2ZyYWdfbGVuIC0gaGRyX2xlbjsKKwkJc2tiLT50YWlsICs9IGhkcl9sZW47CisJfQorCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisKKwlpZiAocGt0c2l6ZSA8PSByeF9mcmFnX3NpemUpIHsKKwkJQlVHX09OKG51bV9yY3ZkICE9IDEpOworCQlyZXR1cm47CisJfQorCisJLyogTW9yZSBmcmFncyBwcmVzZW50IGZvciB0aGlzIGNvbXBsZXRpb24gKi8KKwlwa3RzaXplIC09IGN1cnJfZnJhZ19sZW47IC8qIGFjY291bnQgZm9yIGFib3ZlIGNvcGllZCBmcmFnICovCisJZm9yIChpID0gMTsgaSA8IG51bV9yY3ZkOyBpKyspIHsKKwkJaW5kZXhfaW5jKCZyeHFfaWR4LCByeHEtPmxlbik7CisJCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgcnhxX2lkeCk7CisKKwkJY3Vycl9mcmFnX2xlbiA9IG1pbihwa3RzaXplLCByeF9mcmFnX3NpemUpOworCisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9IHBhZ2VfaW5mby0+cGFnZTsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCA9IHBhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9IGN1cnJfZnJhZ19sZW47CisJCXNrYi0+bGVuICs9IGN1cnJfZnJhZ19sZW47CisJCXNrYi0+ZGF0YV9sZW4gKz0gY3Vycl9mcmFnX2xlbjsKKwkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOworCQlwa3RzaXplIC09IGN1cnJfZnJhZ19sZW47CisKKwkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKKwl9CisKKwliZV9yeF9zdGF0c191cGRhdGUoYWRhcHRlciwgcGt0c2l6ZSwgbnVtX3JjdmQpOworCXJldHVybjsKK30KKworLyogUHJvY2VzcyB0aGUgUlggY29tcGxldGlvbiBpbmRpY2F0ZWQgYnkgcnhjcCB3aGVuIExSTyBpcyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgYmVfcnhfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgdnRwLCB2aWQ7CisJaW50IGw0X2Nrc207CisKKwlsNF9ja3NtID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGw0X2Nrc20sIHJ4Y3ApOworCXZ0cCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2dHAsIHJ4Y3ApOworCisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsIEJFX0hEUl9MRU4gKyBORVRfSVBfQUxJR04pOworCWlmICghc2tiKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAic2tiIGFsbG9jIGZhaWxlZFxuIik7CisJCWJlX3J4X2NvbXBsX2Rpc2NhcmQoYWRhcHRlciwgcnhjcCk7CisJCXJldHVybjsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKKwlza2JfZmlsbF9yeF9kYXRhKGFkYXB0ZXIsIHNrYiwgcnhjcCk7CisKKwlpZiAobDRfY2tzbSAmJiBhZGFwdGVyLT5yeF9jc3VtKQorCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWVsc2UKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJc2tiLT50cnVlc2l6ZSA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBhZGFwdGVyLT5uZXRkZXYpOworCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKHZ0cCkgeworCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPm51bV92bGFucyA9PSAwKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybjsKKwkJfQorCQl2aWQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdmxhbl90YWcsIHJ4Y3ApOworCQl2aWQgPSBiZTE2X3RvX2NwdSh2aWQpOworCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGFuX2dycCwgdmlkKTsKKwl9IGVsc2UgeworCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCX0KKworCWFkYXB0ZXItPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwlyZXR1cm47Cit9CisKKy8qIFByb2Nlc3MgdGhlIFJYIGNvbXBsZXRpb24gaW5kaWNhdGVkIGJ5IHJ4Y3Agd2hlbiBMUk8gaXMgZW5hYmxlZCAqLworc3RhdGljIHZvaWQgYmVfcnhfY29tcGxfcHJvY2Vzc19scm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwKQoreworCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnBhZ2VfaW5mbzsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IHJ4X2ZyYWdzW0JFX01BWF9GUkFHU19QRVJfRlJBTUVdOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CisJdTMyIG51bV9yY3ZkLCBwa3Rfc2l6ZSwgcmVtYWluaW5nLCB2bGFuZiwgY3Vycl9mcmFnX2xlbjsKKwl1MTYgaSwgcnhxX2lkeCA9IDAsIHZpZDsKKworCW51bV9yY3ZkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIG51bWZyYWdzLCByeGNwKTsKKwlwa3Rfc2l6ZSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBwa3RzaXplLCByeGNwKTsKKwl2bGFuZiA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2dHAsIHJ4Y3ApOworCXJ4cV9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgZnJhZ25keCwgcnhjcCk7CisKKwlyZW1haW5pbmcgPSBwa3Rfc2l6ZTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JjdmQ7IGkrKykgeworCQlwYWdlX2luZm8gPSBnZXRfcnhfcGFnZV9pbmZvKGFkYXB0ZXIsIHJ4cV9pZHgpOworCisJCWN1cnJfZnJhZ19sZW4gPSBtaW4ocmVtYWluaW5nLCByeF9mcmFnX3NpemUpOworCisJCXJ4X2ZyYWdzW2ldLnBhZ2UgPSBwYWdlX2luZm8tPnBhZ2U7CisJCXJ4X2ZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKKwkJcnhfZnJhZ3NbaV0uc2l6ZSA9IGN1cnJfZnJhZ19sZW47CisJCXJlbWFpbmluZyAtPSBjdXJyX2ZyYWdfbGVuOworCisJCWluZGV4X2luYygmcnhxX2lkeCwgcnhxLT5sZW4pOworCisJCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisJfQorCisJaWYgKGxpa2VseSghdmxhbmYpKSB7CisJCWxyb19yZWNlaXZlX2ZyYWdzKCZhZGFwdGVyLT5yeF9vYmoubHJvX21nciwgcnhfZnJhZ3MsIHBrdF9zaXplLAorCQkJCXBrdF9zaXplLCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQl2aWQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdmxhbl90YWcsIHJ4Y3ApOworCQl2aWQgPSBiZTE2X3RvX2NwdSh2aWQpOworCisJCWlmICghYWRhcHRlci0+dmxhbl9ncnAgfHwgYWRhcHRlci0+bnVtX3ZsYW5zID09IDApCisJCQlyZXR1cm47CisKKwkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX2ZyYWdzKCZhZGFwdGVyLT5yeF9vYmoubHJvX21nciwKKwkJCXJ4X2ZyYWdzLCBwa3Rfc2l6ZSwgcGt0X3NpemUsIGFkYXB0ZXItPnZsYW5fZ3JwLAorCQkJdmlkLCBOVUxMLCAwKTsKKwl9CisKKwliZV9yeF9zdGF0c191cGRhdGUoYWRhcHRlciwgcGt0X3NpemUsIG51bV9yY3ZkKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpiZV9yeF9jb21wbF9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCA9IHF1ZXVlX3RhaWxfbm9kZSgmYWRhcHRlci0+cnhfb2JqLmNxKTsKKworCWlmIChyeGNwLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZhbGlkKSAvIDMyXSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWJlX2R3c19sZV90b19jcHUocnhjcCwgc2l6ZW9mKCpyeGNwKSk7CisKKwlyeGNwLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZhbGlkKSAvIDMyXSA9IDA7CisKKwlxdWV1ZV90YWlsX2luYygmYWRhcHRlci0+cnhfb2JqLmNxKTsKKwlyZXR1cm4gcnhjcDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYmVfYWxsb2NfcGFnZXModTMyIHNpemUpCit7CisJZ2ZwX3QgYWxsb2NfZmxhZ3MgPSBHRlBfQVRPTUlDOworCXUzMiBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwlpZiAob3JkZXIgPiAwKQorCQlhbGxvY19mbGFncyB8PSBfX0dGUF9DT01QOworCXJldHVybiAgYWxsb2NfcGFnZXMoYWxsb2NfZmxhZ3MsIG9yZGVyKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgcGFnZSwgc3BsaXQgaXQgdG8gZnJhZ21lbnRzIG9mIHNpemUgcnhfZnJhZ19zaXplIGFuZCBwb3N0IGFzCisgKiByZWNlaXZlIGJ1ZmZlcnMgdG8gQkUKKyAqLworc3RhdGljIHZvaWQgYmVfcG9zdF9yeF9mcmFncyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm9fdGJsID0gYWRhcHRlci0+cnhfb2JqLnBhZ2VfaW5mb190Ymw7CisJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcGFnZV9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCXN0cnVjdCBwYWdlICpwYWdlcCA9IE5VTEw7CisJc3RydWN0IGJlX2V0aF9yeF9kICpyeGQ7CisJdTY0IHBhZ2VfZG1hYWRkciA9IDAsIGZyYWdfZG1hYWRkcjsKKwl1MzIgcG9zdGVkLCBwYWdlX29mZnNldCA9IDA7CisKKwlwYWdlX2luZm8gPSAmcGFnZV9pbmZvX3RibFtyeHEtPmhlYWRdOworCWZvciAocG9zdGVkID0gMDsgcG9zdGVkIDwgTUFYX1JYX1BPU1QgJiYgIXBhZ2VfaW5mby0+cGFnZTsgcG9zdGVkKyspIHsKKwkJaWYgKCFwYWdlcCkgeworCQkJcGFnZXAgPSBiZV9hbGxvY19wYWdlcyhhZGFwdGVyLT5iaWdfcGFnZV9zaXplKTsKKwkJCWlmICh1bmxpa2VseSghcGFnZXApKSB7CisJCQkJZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfZXRocnhfcG9zdF9mYWlsKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwYWdlX2RtYWFkZHIgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcGFnZXAsIDAsCisJCQkJCQlhZGFwdGVyLT5iaWdfcGFnZV9zaXplLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXBhZ2VfaW5mby0+cGFnZV9vZmZzZXQgPSAwOworCQl9IGVsc2UgeworCQkJZ2V0X3BhZ2UocGFnZXApOworCQkJcGFnZV9pbmZvLT5wYWdlX29mZnNldCA9IHBhZ2Vfb2Zmc2V0ICsgcnhfZnJhZ19zaXplOworCQl9CisJCXBhZ2Vfb2Zmc2V0ID0gcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKKwkJcGFnZV9pbmZvLT5wYWdlID0gcGFnZXA7CisJCXBjaV91bm1hcF9hZGRyX3NldChwYWdlX2luZm8sIGJ1cywgcGFnZV9kbWFhZGRyKTsKKwkJZnJhZ19kbWFhZGRyID0gcGFnZV9kbWFhZGRyICsgcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKKworCQlyeGQgPSBxdWV1ZV9oZWFkX25vZGUocnhxKTsKKwkJcnhkLT5mcmFncGFfbG8gPSBjcHVfdG9fbGUzMihmcmFnX2RtYWFkZHIgJiAweEZGRkZGRkZGKTsKKwkJcnhkLT5mcmFncGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGZyYWdfZG1hYWRkcikpOworCQlxdWV1ZV9oZWFkX2luYyhyeHEpOworCisJCS8qIEFueSBzcGFjZSBsZWZ0IGluIHRoZSBjdXJyZW50IGJpZyBwYWdlIGZvciBhbm90aGVyIGZyYWc/ICovCisJCWlmICgocGFnZV9vZmZzZXQgKyByeF9mcmFnX3NpemUgKyByeF9mcmFnX3NpemUpID4KKwkJCQkJYWRhcHRlci0+YmlnX3BhZ2Vfc2l6ZSkgeworCQkJcGFnZXAgPSBOVUxMOworCQkJcGFnZV9pbmZvLT5sYXN0X3BhZ2VfdXNlciA9IHRydWU7CisJCX0KKwkJcGFnZV9pbmZvID0gJnBhZ2VfaW5mb190YmxbcnhxLT5oZWFkXTsKKwl9CisJaWYgKHBhZ2VwKQorCQlwYWdlX2luZm8tPmxhc3RfcGFnZV91c2VyID0gdHJ1ZTsKKworCWlmIChwb3N0ZWQpIHsKKwkJYXRvbWljX2FkZChwb3N0ZWQsICZyeHEtPnVzZWQpOworCQliZV9yeHFfbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCByeHEtPmlkLCBwb3N0ZWQpOworCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJ4cS0+dXNlZCkgPT0gMCkgeworCQkvKiBMZXQgYmVfd29ya2VyIHJlcGxlbmlzaCB3aGVuIG1lbW9yeSBpcyBhdmFpbGFibGUgKi8KKwkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsICoKK2JlX3R4X2NvbXBsX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhfY3EgPSAmYWRhcHRlci0+dHhfb2JqLmNxOworCXN0cnVjdCBiZV9ldGhfdHhfY29tcGwgKnR4Y3AgPSBxdWV1ZV90YWlsX25vZGUodHhfY3EpOworCisJaWYgKHR4Y3AtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwgdmFsaWQpIC8gMzJdID09IDApCisJCXJldHVybiBOVUxMOworCisJYmVfZHdzX2xlX3RvX2NwdSh0eGNwLCBzaXplb2YoKnR4Y3ApKTsKKworCXR4Y3AtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwgdmFsaWQpIC8gMzJdID0gMDsKKworCXF1ZXVlX3RhaWxfaW5jKHR4X2NxKTsKKwlyZXR1cm4gdHhjcDsKK30KKworc3RhdGljIHZvaWQgYmVfdHhfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IGxhc3RfaW5kZXgpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSA9ICZhZGFwdGVyLT50eF9vYmoucTsKKwlzdHJ1Y3QgYmVfZXRoX3dyYiAqd3JiOworCXN0cnVjdCBza19idWZmICoqc2VudF9za2JzID0gYWRhcHRlci0+dHhfb2JqLnNlbnRfc2tiX2xpc3Q7CisJc3RydWN0IHNrX2J1ZmYgKnNlbnRfc2tiOworCXU2NCBidXNhZGRyOworCXUxNiBjdXJfaW5kZXgsIG51bV93cmJzID0gMDsKKworCWN1cl9pbmRleCA9IHR4cS0+dGFpbDsKKwlzZW50X3NrYiA9IHNlbnRfc2tic1tjdXJfaW5kZXhdOworCUJVR19PTighc2VudF9za2IpOworCXNlbnRfc2tic1tjdXJfaW5kZXhdID0gTlVMTDsKKworCWRvIHsKKwkJY3VyX2luZGV4ID0gdHhxLT50YWlsOworCQl3cmIgPSBxdWV1ZV90YWlsX25vZGUodHhxKTsKKwkJYmVfZHdzX2xlX3RvX2NwdSh3cmIsIHNpemVvZigqd3JiKSk7CisJCWJ1c2FkZHIgPSAoKHU2NCl3cmItPmZyYWdfcGFfaGkgPDwgMzIpIHwgKHU2NCl3cmItPmZyYWdfcGFfbG87CisJCWlmIChidXNhZGRyICE9IDApIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgYnVzYWRkciwKKwkJCQl3cmItPmZyYWdfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCQludW1fd3JicysrOworCQlxdWV1ZV90YWlsX2luYyh0eHEpOworCX0gd2hpbGUgKGN1cl9pbmRleCAhPSBsYXN0X2luZGV4KTsKKworCWF0b21pY19zdWIobnVtX3dyYnMsICZ0eHEtPnVzZWQpOworCisJa2ZyZWVfc2tiKHNlbnRfc2tiKTsKK30KKworc3RhdGljIHZvaWQgYmVfcnhfcV9jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm87CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhfY3EgPSAmYWRhcHRlci0+cnhfb2JqLmNxOworCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3A7CisJdTE2IHRhaWw7CisKKwkvKiBGaXJzdCBjbGVhbnVwIHBlbmRpbmcgcnggY29tcGxldGlvbnMgKi8KKwl3aGlsZSAoKHJ4Y3AgPSBiZV9yeF9jb21wbF9nZXQoYWRhcHRlcikpICE9IE5VTEwpIHsKKwkJYmVfcnhfY29tcGxfZGlzY2FyZChhZGFwdGVyLCByeGNwKTsKKwkJYmVfY3Ffbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCByeF9jcS0+aWQsIHRydWUsIDEpOworCX0KKworCS8qIFRoZW4gZnJlZSBwb3N0ZWQgcnggYnVmZmVyIHRoYXQgd2VyZSBub3QgdXNlZCAqLworCXRhaWwgPSAocnhxLT5oZWFkICsgcnhxLT5sZW4gLSBhdG9taWNfcmVhZCgmcnhxLT51c2VkKSkgJSByeHEtPmxlbjsKKwlmb3IgKDsgdGFpbCAhPSByeHEtPmhlYWQ7IGluZGV4X2luYygmdGFpbCwgcnhxLT5sZW4pKSB7CisJCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgdGFpbCk7CisJCXB1dF9wYWdlKHBhZ2VfaW5mby0+cGFnZSk7CisJCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisJfQorCUJVR19PTihhdG9taWNfcmVhZCgmcnhxLT51c2VkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3R4X3FfY2xlYW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKipzZW50X3NrYnMgPSBhZGFwdGVyLT50eF9vYmouc2VudF9za2JfbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2VudF9za2I7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSA9ICZhZGFwdGVyLT50eF9vYmoucTsKKwl1MTYgbGFzdF9pbmRleDsKKwlib29sIGR1bW15X3dyYjsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSkgeworCQlzZW50X3NrYiA9IHNlbnRfc2tic1t0eHEtPnRhaWxdOworCQlsYXN0X2luZGV4ID0gdHhxLT50YWlsOworCQlpbmRleF9hZHYoJmxhc3RfaW5kZXgsCisJCQl3cmJfY250X2Zvcl9za2Ioc2VudF9za2IsICZkdW1teV93cmIpIC0gMSwgdHhxLT5sZW4pOworCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGxhc3RfaW5kZXgpOworCX0KK30KKworc3RhdGljIHZvaWQgYmVfdHhfcXVldWVzX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CisKKwlxID0gJmFkYXB0ZXItPnR4X29iai5xOworCWlmIChxLT5jcmVhdGVkKQorCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9UWFEpOworCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CisKKwlxID0gJmFkYXB0ZXItPnR4X29iai5jcTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfQ1EpOworCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CisKKwkvKiBObyBtb3JlIHR4IGNvbXBsZXRpb25zIGNhbiBiZSByY3ZkIG5vdzsgY2xlYW4gdXAgaWYgdGhlcmUgYXJlCisJICogYW55IHBlbmRpbmcgY29tcGxldGlvbnMgb3IgcGVuZGluZyB0eCByZXF1ZXN0cyAqLworCWJlX3R4X3FfY2xlYW4oYWRhcHRlcik7CisKKwlxID0gJmFkYXB0ZXItPnR4X2VxLnE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX0VRKTsKKwliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOworfQorCitzdGF0aWMgaW50IGJlX3R4X3F1ZXVlc19jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCAqcSwgKmNxOworCisJYWRhcHRlci0+dHhfZXEubWF4X2VxZCA9IDA7CisJYWRhcHRlci0+dHhfZXEubWluX2VxZCA9IDA7CisJYWRhcHRlci0+dHhfZXEuY3VyX2VxZCA9IDk2OworCWFkYXB0ZXItPnR4X2VxLmVuYWJsZV9haWMgPSBmYWxzZTsKKwkvKiBBbGxvYyBUeCBFdmVudCBxdWV1ZSAqLworCWVxID0gJmFkYXB0ZXItPnR4X2VxLnE7CisJaWYgKGJlX3F1ZXVlX2FsbG9jKGFkYXB0ZXIsIGVxLCBFVk5UX1FfTEVOLCBzaXplb2Yoc3RydWN0IGJlX2VxX2VudHJ5KSkpCisJCXJldHVybiAtMTsKKworCS8qIEFzayBCRSB0byBjcmVhdGUgVHggRXZlbnQgcXVldWUgKi8KKwlpZiAoYmVfY21kX2VxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgZXEsIGFkYXB0ZXItPnR4X2VxLmN1cl9lcWQpKQorCQlnb3RvIHR4X2VxX2ZyZWU7CisJLyogQWxsb2MgVFggZXRoIGNvbXBsIHF1ZXVlICovCisJY3EgPSAmYWRhcHRlci0+dHhfb2JqLmNxOworCWlmIChiZV9xdWV1ZV9hbGxvYyhhZGFwdGVyLCBjcSwgVFhfQ1FfTEVOLAorCQkJc2l6ZW9mKHN0cnVjdCBiZV9ldGhfdHhfY29tcGwpKSkKKwkJZ290byB0eF9lcV9kZXN0cm95OworCisJLyogQXNrIEJFIHRvIGNyZWF0ZSBUeCBldGggY29tcGwgcXVldWUgKi8KKwlpZiAoYmVfY21kX2NxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgY3EsIGVxLCBmYWxzZSwgZmFsc2UsIDMpKQorCQlnb3RvIHR4X2NxX2ZyZWU7CisKKwkvKiBBbGxvYyBUWCBldGggcXVldWUgKi8KKwlxID0gJmFkYXB0ZXItPnR4X29iai5xOworCWlmIChiZV9xdWV1ZV9hbGxvYyhhZGFwdGVyLCBxLCBUWF9RX0xFTiwgc2l6ZW9mKHN0cnVjdCBiZV9ldGhfd3JiKSkpCisJCWdvdG8gdHhfY3FfZGVzdHJveTsKKworCS8qIEFzayBCRSB0byBjcmVhdGUgVHggZXRoIHF1ZXVlICovCisJaWYgKGJlX2NtZF90eHFfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBxLCBjcSkpCisJCWdvdG8gdHhfcV9mcmVlOworCXJldHVybiAwOworCit0eF9xX2ZyZWU6CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKK3R4X2NxX2Rlc3Ryb3k6CisJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgY3EsIFFUWVBFX0NRKTsKK3R4X2NxX2ZyZWU6CisJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBjcSk7Cit0eF9lcV9kZXN0cm95OgorCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIGVxLCBRVFlQRV9FUSk7Cit0eF9lcV9mcmVlOgorCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgZXEpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgYmVfcnhfcXVldWVzX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CisKKwlxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCWlmIChxLT5jcmVhdGVkKSB7CisJCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX1JYUSk7CisJCWJlX3J4X3FfY2xlYW4oYWRhcHRlcik7CisJfQorCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CisKKwlxID0gJmFkYXB0ZXItPnJ4X29iai5jcTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfQ1EpOworCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CisKKwlxID0gJmFkYXB0ZXItPnJ4X2VxLnE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX0VRKTsKKwliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOworfQorCitzdGF0aWMgaW50IGJlX3J4X3F1ZXVlc19jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCAqcSwgKmNxOworCWludCByYzsKKworCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRTsKKwlhZGFwdGVyLT5iaWdfcGFnZV9zaXplID0gKDEgPDwgZ2V0X29yZGVyKHJ4X2ZyYWdfc2l6ZSkpICogUEFHRV9TSVpFOworCWFkYXB0ZXItPnJ4X2VxLm1heF9lcWQgPSBCRV9NQVhfRVFEOworCWFkYXB0ZXItPnJ4X2VxLm1pbl9lcWQgPSAwOworCWFkYXB0ZXItPnJ4X2VxLmN1cl9lcWQgPSAwOworCWFkYXB0ZXItPnJ4X2VxLmVuYWJsZV9haWMgPSB0cnVlOworCisJLyogQWxsb2MgUnggRXZlbnQgcXVldWUgKi8KKwllcSA9ICZhZGFwdGVyLT5yeF9lcS5xOworCXJjID0gYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgZXEsIEVWTlRfUV9MRU4sCisJCQkJc2l6ZW9mKHN0cnVjdCBiZV9lcV9lbnRyeSkpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogQXNrIEJFIHRvIGNyZWF0ZSBSeCBFdmVudCBxdWV1ZSAqLworCXJjID0gYmVfY21kX2VxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgZXEsIGFkYXB0ZXItPnJ4X2VxLmN1cl9lcWQpOworCWlmIChyYykKKwkJZ290byByeF9lcV9mcmVlOworCisJLyogQWxsb2MgUlggZXRoIGNvbXBsIHF1ZXVlICovCisJY3EgPSAmYWRhcHRlci0+cnhfb2JqLmNxOworCXJjID0gYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgY3EsIFJYX0NRX0xFTiwKKwkJCXNpemVvZihzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsKSk7CisJaWYgKHJjKQorCQlnb3RvIHJ4X2VxX2Rlc3Ryb3k7CisKKwkvKiBBc2sgQkUgdG8gY3JlYXRlIFJ4IGV0aCBjb21wbCBxdWV1ZSAqLworCXJjID0gYmVfY21kX2NxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgY3EsIGVxLCBmYWxzZSwgZmFsc2UsIDMpOworCWlmIChyYykKKwkJZ290byByeF9jcV9mcmVlOworCisJLyogQWxsb2MgUlggZXRoIHF1ZXVlICovCisJcSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKKwlyYyA9IGJlX3F1ZXVlX2FsbG9jKGFkYXB0ZXIsIHEsIFJYX1FfTEVOLCBzaXplb2Yoc3RydWN0IGJlX2V0aF9yeF9kKSk7CisJaWYgKHJjKQorCQlnb3RvIHJ4X2NxX2Rlc3Ryb3k7CisKKwkvKiBBc2sgQkUgdG8gY3JlYXRlIFJ4IGV0aCBxdWV1ZSAqLworCXJjID0gYmVfY21kX3J4cV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIHEsIGNxLT5pZCwgcnhfZnJhZ19zaXplLAorCQlCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSwgYWRhcHRlci0+aWZfaGFuZGxlLCBmYWxzZSk7CisJaWYgKHJjKQorCQlnb3RvIHJ4X3FfZnJlZTsKKworCXJldHVybiAwOworcnhfcV9mcmVlOgorCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CityeF9jcV9kZXN0cm95OgorCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIGNxLCBRVFlQRV9DUSk7CityeF9jcV9mcmVlOgorCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgY3EpOworcnhfZXFfZGVzdHJveToKKwliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBlcSwgUVRZUEVfRVEpOworcnhfZXFfZnJlZToKKwliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIGVxKTsKKwlyZXR1cm4gcmM7Cit9CitzdGF0aWMgYm9vbCBldmVudF9nZXQoc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqLCB1MTYgKnJpZCkKK3sKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVudHJ5ID0gcXVldWVfdGFpbF9ub2RlKCZlcV9vYmotPnEpOworCXUzMiBldnQgPSBlbnRyeS0+ZXZ0OworCisJaWYgKCFldnQpCisJCXJldHVybiBmYWxzZTsKKworCWV2dCA9IGxlMzJfdG9fY3B1KGV2dCk7CisJKnJpZCA9IChldnQgPj4gRVFfRU5UUllfUkVTX0lEX1NISUZUKSAmIEVRX0VOVFJZX1JFU19JRF9NQVNLOworCWVudHJ5LT5ldnQgPSAwOworCXF1ZXVlX3RhaWxfaW5jKCZlcV9vYmotPnEpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGV2ZW50X2hhbmRsZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqKQoreworCXUxNiByaWQgPSAwLCBudW0gPSAwOworCisJd2hpbGUgKGV2ZW50X2dldChlcV9vYmosICZyaWQpKQorCQludW0rKzsKKworCS8qIFdlIGNhbiBzZWUgYW4gaW50ZXJydXB0IGFuZCBubyBldmVudCAqLworCWJlX2VxX25vdGlmeShjdHJsLCBlcV9vYmotPnEuaWQsIHRydWUsIHRydWUsIG51bSk7CisJaWYgKG51bSkKKwkJbmFwaV9zY2hlZHVsZSgmZXFfb2JqLT5uYXBpKTsKKworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiZV9pbnR4KGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGRldjsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJaW50IHJ4LCB0eDsKKworCXR4ID0gZXZlbnRfaGFuZGxlKGN0cmwsICZhZGFwdGVyLT50eF9lcSk7CisJcnggPSBldmVudF9oYW5kbGUoY3RybCwgJmFkYXB0ZXItPnJ4X2VxKTsKKworCWlmIChyeCB8fCB0eCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWVsc2UKKwkJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYmVfbXNpeF9yeChpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXY7CisKKwlldmVudF9oYW5kbGUoJmFkYXB0ZXItPmN0cmwsICZhZGFwdGVyLT5yeF9lcSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiZV9tc2l4X3R4KGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGRldjsKKworCWV2ZW50X2hhbmRsZSgmYWRhcHRlci0+Y3RybCwgJmFkYXB0ZXItPnR4X2VxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSBib29sIGRvX2xybyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCit7CisJaW50IGVyciA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBlcnIsIHJ4Y3ApOworCWludCB0Y3BfZnJhbWUgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdGNwZiwgcnhjcCk7CisKKwlpZiAoZXJyKQorCQlkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV9yeGNwX2VycisrOworCisJcmV0dXJuICghdGNwX2ZyYW1lIHx8IGVyciB8fCAoYWRhcHRlci0+bWF4X3J4X2NvYWwgPD0gMSkpID8KKwkJZmFsc2UgOiB0cnVlOworfQorCitpbnQgYmVfcG9sbF9yeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJlX2VxX29iaiwgbmFwaSk7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2YocnhfZXEsIHN0cnVjdCBiZV9hZGFwdGVyLCByeF9lcSk7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4X2NxID0gJmFkYXB0ZXItPnJ4X29iai5jcTsKKwlzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwOworCXUzMiB3b3JrX2RvbmU7CisKKwlmb3IgKHdvcmtfZG9uZSA9IDA7IHdvcmtfZG9uZSA8IGJ1ZGdldDsgd29ya19kb25lKyspIHsKKwkJcnhjcCA9IGJlX3J4X2NvbXBsX2dldChhZGFwdGVyKTsKKwkJaWYgKCFyeGNwKQorCQkJYnJlYWs7CisKKwkJaWYgKGRvX2xybyhhZGFwdGVyLCByeGNwKSkKKwkJCWJlX3J4X2NvbXBsX3Byb2Nlc3NfbHJvKGFkYXB0ZXIsIHJ4Y3ApOworCQllbHNlCisJCQliZV9yeF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIHJ4Y3ApOworCX0KKworCWxyb19mbHVzaF9hbGwoJmFkYXB0ZXItPnJ4X29iai5scm9fbWdyKTsKKworCS8qIFJlZmlsbCB0aGUgcXVldWUgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJ4X29iai5xLnVzZWQpIDwgUlhfRlJBR1NfUkVGSUxMX1dNKQorCQliZV9wb3N0X3J4X2ZyYWdzKGFkYXB0ZXIpOworCisJLyogQWxsIGNvbnN1bWVkICovCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4X2NxLT5pZCwgdHJ1ZSwgd29ya19kb25lKTsKKwl9IGVsc2UgeworCQkvKiBNb3JlIHRvIGJlIGNvbnN1bWVkOyBjb250aW51ZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KKwkJYmVfY3Ffbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCByeF9jcS0+aWQsIGZhbHNlLCB3b3JrX2RvbmUpOworCX0KKwlyZXR1cm4gd29ya19kb25lOworfQorCisvKiBGb3IgVFggd2UgZG9uJ3QgaG9ub3VyIGJ1ZGdldDsgY29uc3VtZSBldmVyeXRoaW5nICovCitpbnQgYmVfcG9sbF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJlX2VxX29iaiwgbmFwaSk7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2YodHhfZXEsIHN0cnVjdCBiZV9hZGFwdGVyLCB0eF9lcSk7CisJc3RydWN0IGJlX3R4X29iaiAqdHhfb2JqID0gJmFkYXB0ZXItPnR4X29iajsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhfY3EgPSAmdHhfb2JqLT5jcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJnR4X29iai0+cTsKKwlzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsICp0eGNwOworCXUzMiBudW1fY21wbCA9IDA7CisJdTE2IGVuZF9pZHg7CisKKwl3aGlsZSAoKHR4Y3AgPSBiZV90eF9jb21wbF9nZXQoYWRhcHRlcikpKSB7CisJCWVuZF9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwKKwkJCQkJd3JiX2luZGV4LCB0eGNwKTsKKwkJYmVfdHhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBlbmRfaWR4KTsKKwkJbnVtX2NtcGwrKzsKKwl9CisKKwkvKiBBcyBUeCB3cmJzIGhhdmUgYmVlbiBmcmVlZCB1cCwgd2FrZSB1cCBuZXRkZXYgcXVldWUgaWYKKwkgKiBpdCB3YXMgc3RvcHBlZCBkdWUgdG8gbGFjayBvZiB0eCB3cmJzLgorCSAqLworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGFkYXB0ZXItPm5ldGRldikgJiYKKwkJCWF0b21pY19yZWFkKCZ0eHEtPnVzZWQpIDwgdHhxLT5sZW4gLyAyKSB7CisJCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwl9CisKKwluYXBpX2NvbXBsZXRlKG5hcGkpOworCisJYmVfY3Ffbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCB0eF9jcS0+aWQsIHRydWUsIG51bV9jbXBsKTsKKworCWRydnJfc3RhdHMoYWRhcHRlciktPmJlX3R4X2V2ZW50cysrOworCWRydnJfc3RhdHMoYWRhcHRlciktPmJlX3R4X2NvbXBsICs9IG51bV9jbXBsOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGJlX2FkYXB0ZXIsIHdvcmsud29yayk7CisJaW50IHN0YXR1czsKKworCS8qIENoZWNrIGxpbmsgKi8KKwliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlcik7CisKKwkvKiBHZXQgU3RhdHMgKi8KKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X3N0YXRzKCZhZGFwdGVyLT5jdHJsLCAmYWRhcHRlci0+c3RhdHMuY21kKTsKKwlpZiAoIXN0YXR1cykKKwkJbmV0ZGV2X3N0YXRzX3VwZGF0ZShhZGFwdGVyKTsKKworCS8qIFNldCBFUSBkZWxheSAqLworCWJlX3J4X2VxZF91cGRhdGUoYWRhcHRlcik7CisKKwliZV90eF9yYXRlX3VwZGF0ZShhZGFwdGVyKTsKKwliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQpIHsKKwkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gZmFsc2U7CisJCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CisJfQorCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKK30KKworc3RhdGljIHZvaWQgYmVfbXNpeF9lbmFibGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBCRV9OVU1fTVNJWF9WRUNUT1JTOyBpKyspCisJCWFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CisKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLAorCQlCRV9OVU1fTVNJWF9WRUNUT1JTKTsKKwlpZiAoc3RhdHVzID09IDApCisJCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IHRydWU7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBiZV9tc2l4X3ZlY19nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBlcV9pZCkKK3sKKwlyZXR1cm4gYWRhcHRlci0+bXNpeF9lbnRyaWVzW2VxX2lkIC0KKwkJCTggKiBhZGFwdGVyLT5jdHJsLnBjaV9mdW5jXS52ZWN0b3I7Cit9CisKK3N0YXRpYyBpbnQgYmVfbXNpeF9yZWdpc3RlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gJmFkYXB0ZXItPnR4X2VxOworCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOworCWludCBzdGF0dXMsIHZlYzsKKworCXNwcmludGYodHhfZXEtPmRlc2MsICIlcy10eCIsIG5ldGRldi0+bmFtZSk7CisJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHR4X2VxLT5xLmlkKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycSh2ZWMsIGJlX21zaXhfdHgsIDAsIHR4X2VxLT5kZXNjLCBhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCXNwcmludGYocnhfZXEtPmRlc2MsICIlcy1yeCIsIG5ldGRldi0+bmFtZSk7CisJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHJ4X2VxLT5xLmlkKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycSh2ZWMsIGJlX21zaXhfcngsIDAsIHJ4X2VxLT5kZXNjLCBhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKSB7IC8qIEZyZWUgVFggSVJRICovCisJCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCB0eF9lcS0+cS5pZCk7CisJCWZyZWVfaXJxKHZlYywgYWRhcHRlcik7CisJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gMDsKK2VycjoKKwlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkiTVNJWCBSZXF1ZXN0IElSUSBmYWlsZWQgLSBlcnIgJWRcbiIsIHN0YXR1cyk7CisJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlhZGFwdGVyLT5tc2l4X2VuYWJsZWQgPSBmYWxzZTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGJlX2lycV9yZWdpc3RlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBzdGF0dXM7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJCXN0YXR1cyA9IGJlX21zaXhfcmVnaXN0ZXIoYWRhcHRlcik7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJTlR4ICovCisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEobmV0ZGV2LT5pcnEsIGJlX2ludHgsIElSUUZfU0hBUkVELCBuZXRkZXYtPm5hbWUsCisJCQlhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJJTlR4IHJlcXVlc3QgSVJRIGZhaWxlZCAtIGVyciAlZFxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9Citkb25lOgorCWFkYXB0ZXItPmlzcl9yZWdpc3RlcmVkID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmVfaXJxX3VucmVnaXN0ZXIoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgdmVjOworCisJaWYgKCFhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCkKKwkJcmV0dXJuOworCisJLyogSU5UeCAqLworCWlmICghYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBhZGFwdGVyKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIE1TSXggKi8KKwl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgYWRhcHRlci0+dHhfZXEucS5pZCk7CisJZnJlZV9pcnEodmVjLCBhZGFwdGVyKTsKKwl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgYWRhcHRlci0+cnhfZXEucS5pZCk7CisJZnJlZV9pcnEodmVjLCBhZGFwdGVyKTsKK2RvbmU6CisJYWRhcHRlci0+aXNyX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CisJdTMyIGlmX2ZsYWdzOworCWludCBzdGF0dXM7CisKKwlpZl9mbGFncyA9IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8IEJFX0lGX0ZMQUdTX1BST01JU0NVT1VTIHwKKwkJQkVfSUZfRkxBR1NfTUNBU1RfUFJPTUlTQ1VPVVMgfCBCRV9JRl9GTEFHU19VTlRBR0dFRCB8CisJCUJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlM7CisJc3RhdHVzID0gYmVfY21kX2lmX2NyZWF0ZShjdHJsLCBpZl9mbGFncywgbmV0ZGV2LT5kZXZfYWRkciwKKwkJCWZhbHNlLyogcG1hY19pbnZhbGlkICovLCAmYWRhcHRlci0+aWZfaGFuZGxlLAorCQkJJmFkYXB0ZXItPnBtYWNfaWQpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBkb19ub25lOworCisJYmVfdmlkX2NvbmZpZyhuZXRkZXYpOworCisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woY3RybCwgdHJ1ZSwgdHJ1ZSk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGlmX2Rlc3Ryb3k7CisKKwlzdGF0dXMgPSBiZV90eF9xdWV1ZXNfY3JlYXRlKGFkYXB0ZXIpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBpZl9kZXN0cm95OworCisJc3RhdHVzID0gYmVfcnhfcXVldWVzX2NyZWF0ZShhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gdHhfcXNfZGVzdHJveTsKKworCS8qIEZpcnN0IHRpbWUgcG9zdGluZyAqLworCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CisKKwluYXBpX2VuYWJsZSgmcnhfZXEtPm5hcGkpOworCW5hcGlfZW5hYmxlKCZ0eF9lcS0+bmFwaSk7CisKKwliZV9pcnFfcmVnaXN0ZXIoYWRhcHRlcik7CisKKwliZV9pbnRyX3NldChjdHJsLCB0cnVlKTsKKworCS8qIFRoZSBldnQgcXVldWVzIGFyZSBjcmVhdGVkIGluIHRoZSB1bmFybWVkIHN0YXRlOyBhcm0gdGhlbSAqLworCWJlX2VxX25vdGlmeShjdHJsLCByeF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShjdHJsLCB0eF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCisJLyogVGhlIGNvbXBsIHF1ZXVlcyBhcmUgY3JlYXRlZCBpbiB0aGUgdW5hcm1lZCBzdGF0ZTsgYXJtIHRoZW0gKi8KKwliZV9jcV9ub3RpZnkoY3RybCwgYWRhcHRlci0+cnhfb2JqLmNxLmlkLCB0cnVlLCAwKTsKKwliZV9jcV9ub3RpZnkoY3RybCwgYWRhcHRlci0+dHhfb2JqLmNxLmlkLCB0cnVlLCAwKTsKKworCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+d29yaywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwlyZXR1cm4gMDsKKwordHhfcXNfZGVzdHJveToKKwliZV90eF9xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKK2lmX2Rlc3Ryb3k6CisJYmVfY21kX2lmX2Rlc3Ryb3koY3RybCwgYWRhcHRlci0+aWZfaGFuZGxlKTsKK2RvX25vbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CisJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CisJaW50IHZlYzsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmspOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJYWRhcHRlci0+bGluay5zcGVlZCA9IFBIWV9MSU5LX1NQRUVEX1pFUk87CisKKwliZV9pbnRyX3NldChjdHJsLCBmYWxzZSk7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCB0eF9lcS0+cS5pZCk7CisJCXN5bmNocm9uaXplX2lycSh2ZWMpOworCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgcnhfZXEtPnEuaWQpOworCQlzeW5jaHJvbml6ZV9pcnEodmVjKTsKKwl9IGVsc2UgeworCQlzeW5jaHJvbml6ZV9pcnEobmV0ZGV2LT5pcnEpOworCX0KKwliZV9pcnFfdW5yZWdpc3RlcihhZGFwdGVyKTsKKworCW5hcGlfZGlzYWJsZSgmcnhfZXEtPm5hcGkpOworCW5hcGlfZGlzYWJsZSgmdHhfZXEtPm5hcGkpOworCisJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CisJYmVfdHhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CisKKwliZV9jbWRfaWZfZGVzdHJveShjdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqbWFjX2hkciwKKwkJCQl2b2lkICoqaXBfaGRyLCB2b2lkICoqdGNwdWRwX2hkciwKKwkJCQl1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgZXRoaGRyICplaDsKKwlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZlaDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwl1OCAqdmEgPSBwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGxsX2hsZW47CisKKwlwcmVmZXRjaCh2YSk7CisJZWggPSAoc3RydWN0IGV0aGhkciAqKXZhOworCSptYWNfaGRyID0gZWg7CisJbGxfaGxlbiA9IEVUSF9ITEVOOworCWlmIChlaC0+aF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJaWYgKGVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkgeworCQkJdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXZhOworCQkJaWYgKHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpCisJCQkJcmV0dXJuIC0xOworCisJCQlsbF9obGVuICs9IFZMQU5fSExFTjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkqaGRyX2ZsYWdzID0gTFJPX0lQVjQ7CisJaXBoID0gKHN0cnVjdCBpcGhkciAqKSh2YSArIGxsX2hsZW4pOworCSppcF9oZHIgPSBpcGg7CisJaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCisJCXJldHVybiAtMTsKKwkqaGRyX2ZsYWdzIHw9IExST19UQ1A7CisJKnRjcHVkcF9oZHIgPSAodTggKikgKCppcF9oZHIpICsgKGlwaC0+aWhsIDw8IDIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlX2xyb19pbml0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncjsKKworCWxyb19tZ3IgPSAmYWRhcHRlci0+cnhfb2JqLmxyb19tZ3I7CisJbHJvX21nci0+ZGV2ID0gbmV0ZGV2OworCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKKwlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWxyb19tZ3ItPm1heF9kZXNjID0gQkVfTUFYX0xST19ERVNDUklQVE9SUzsKKwlscm9fbWdyLT5scm9fYXJyID0gYWRhcHRlci0+cnhfb2JqLmxyb19kZXNjOworCWxyb19tZ3ItPmdldF9mcmFnX2hlYWRlciA9IGJlX2dldF9mcmFnX2hlYWRlcjsKKwlscm9fbWdyLT5tYXhfYWdnciA9IEJFX01BWF9GUkFHU19QRVJfRlJBTUU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmVfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gYmVfb3BlbiwKKwkubmRvX3N0b3AJCT0gYmVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGJlX3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYmVfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X3J4X21vZGUJPSBiZV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBiZV9tYWNfYWRkcl9zZXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGJlX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gYmVfdmxhbl9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGJlX3ZsYW5fYWRkX3ZpZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBiZV92bGFuX3JlbV92aWQsCit9OworCitzdGF0aWMgdm9pZCBiZV9uZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfVFNPIHwKKwkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082OworCisJbmV0ZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOworCisJQkVfU0VUX05FVERFVl9PUFMobmV0ZGV2LCAmYmVfbmV0ZGV2X29wcyk7CisKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmYmVfZXRodG9vbF9vcHMpOworCisJYmVfbHJvX2luaXQoYWRhcHRlciwgbmV0ZGV2KTsKKworCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnJ4X2VxLm5hcGksIGJlX3BvbGxfcngsCisJCUJFX05BUElfV0VJR0hUKTsKKwluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT50eF9lcS5uYXBpLCBiZV9wb2xsX3R4LAorCQlCRV9OQVBJX1dFSUdIVCk7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYmVfdW5tYXBfcGNpX2JhcnMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOworCWlmIChjdHJsLT5jc3IpCisJCWlvdW5tYXAoY3RybC0+Y3NyKTsKKwlpZiAoY3RybC0+ZGIpCisJCWlvdW5tYXAoY3RybC0+ZGIpOworCWlmIChjdHJsLT5wY2ljZmcpCisJCWlvdW5tYXAoY3RybC0+cGNpY2ZnKTsKK30KKworc3RhdGljIGludCBiZV9tYXBfcGNpX2JhcnMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTggX19pb21lbSAqYWRkcjsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDIpLAorCQkJcGNpX3Jlc291cmNlX2xlbihhZGFwdGVyLT5wZGV2LCAyKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJYWRhcHRlci0+Y3RybC5jc3IgPSBhZGRyOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgNCksCisJCQkxMjggKiAxMDI0KTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlnb3RvIHBjaV9tYXBfZXJyOworCWFkYXB0ZXItPmN0cmwuZGIgPSBhZGRyOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMSksCisJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDEpKTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlnb3RvIHBjaV9tYXBfZXJyOworCWFkYXB0ZXItPmN0cmwucGNpY2ZnID0gYWRkcjsKKworCXJldHVybiAwOworcGNpX21hcF9lcnI6CisJYmVfdW5tYXBfcGNpX2JhcnMoYWRhcHRlcik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKworc3RhdGljIHZvaWQgYmVfY3RybF9jbGVhbnVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmYWRhcHRlci0+Y3RybC5tYm94X21lbV9hbGxvY2VkOworCisJYmVfdW5tYXBfcGNpX2JhcnMoYWRhcHRlcik7CisKKwlpZiAobWVtLT52YSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBtZW0tPnNpemUsCisJCQltZW0tPnZhLCBtZW0tPmRtYSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIG1ib3ggcmVxdWlyZWQgdG8gc2VuZCBjbWRzIHRvIEJFICovCitzdGF0aWMgaW50IGJlX2N0cmxfaW5pdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsbG9jID0gJmN0cmwtPm1ib3hfbWVtX2FsbG9jZWQ7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsaWduID0gJmN0cmwtPm1ib3hfbWVtOworCWludCBzdGF0dXM7CisJdTMyIHZhbDsKKworCXN0YXR1cyA9IGJlX21hcF9wY2lfYmFycyhhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJbWJveF9tZW1fYWxsb2MtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21jY19tYWlsYm94KSArIDE2OworCW1ib3hfbWVtX2FsbG9jLT52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJbWJveF9tZW1fYWxsb2MtPnNpemUsICZtYm94X21lbV9hbGxvYy0+ZG1hKTsKKwlpZiAoIW1ib3hfbWVtX2FsbG9jLT52YSkgeworCQliZV91bm1hcF9wY2lfYmFycyhhZGFwdGVyKTsKKwkJcmV0dXJuIC0xOworCX0KKwltYm94X21lbV9hbGlnbi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpOworCW1ib3hfbWVtX2FsaWduLT52YSA9IFBUUl9BTElHTihtYm94X21lbV9hbGxvYy0+dmEsIDE2KTsKKwltYm94X21lbV9hbGlnbi0+ZG1hID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT5kbWEsIDE2KTsKKwltZW1zZXQobWJveF9tZW1fYWxpZ24tPnZhLCAwLCBzaXplb2Yoc3RydWN0IGJlX21jY19tYWlsYm94KSk7CisJc3Bpbl9sb2NrX2luaXQoJmN0cmwtPmNtZF9sb2NrKTsKKworCXZhbCA9IGlvcmVhZDMyKGN0cmwtPnBjaWNmZyArIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQpOworCWN0cmwtPnBjaV9mdW5jID0gKHZhbCA+PiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9QRlVOQ19TSElGVCkgJgorCQkJCQlNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9QRlVOQ19NQVNLOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiZV9zdGF0c19jbGVhbnVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9zdGF0c19vYmogKnN0YXRzID0gJmFkYXB0ZXItPnN0YXRzOworCXN0cnVjdCBiZV9kbWFfbWVtICpjbWQgPSAmc3RhdHMtPmNtZDsKKworCWlmIChjbWQtPnZhKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGNtZC0+c2l6ZSwKKwkJCWNtZC0+dmEsIGNtZC0+ZG1hKTsKK30KKworc3RhdGljIGludCBiZV9zdGF0c19pbml0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBiZV9zdGF0c19vYmogKnN0YXRzID0gJmFkYXB0ZXItPnN0YXRzOworCXN0cnVjdCBiZV9kbWFfbWVtICpjbWQgPSAmc3RhdHMtPmNtZDsKKworCWNtZC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHMpOworCWNtZC0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBjbWQtPnNpemUsICZjbWQtPmRtYSk7CisJaWYgKGNtZC0+dmEgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuOworCisJdW5yZWdpc3Rlcl9uZXRkZXYoYWRhcHRlci0+bmV0ZGV2KTsKKworCWJlX3N0YXRzX2NsZWFudXAoYWRhcHRlcik7CisKKwliZV9jdHJsX2NsZWFudXAoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7CisJCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IGZhbHNlOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCWZyZWVfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7Cit9CisKK3N0YXRpYyBpbnQgYmVfaHdfdXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBiZV9jbWRfUE9TVChjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gYmVfY21kX2dldF9md192ZXIoY3RybCwgYWRhcHRlci0+ZndfdmVyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gYmVfY21kX3F1ZXJ5X2Z3X2NmZyhjdHJsLCAmYWRhcHRlci0+cG9ydF9udW0pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkZXZfaWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsOworCXU4IG1hY1tFVEhfQUxFTl07CisKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGRvX25vbmU7CisKKwlzdGF0dXMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGRpc2FibGVfZGV2OworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBiZV9hZGFwdGVyKSk7CisJaWYgKG5ldGRldiA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gcmVsX3JlZzsKKwl9CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+cGRldiA9IHBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKworCWJlX21zaXhfZW5hYmxlKGFkYXB0ZXIpOworCisJc3RhdHVzID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJaWYgKCFzdGF0dXMpIHsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBzZXQgUENJIERNQSBNYXNrXG4iKTsKKwkJCWdvdG8gZnJlZV9uZXRkZXY7CisJCX0KKwl9CisKKwljdHJsID0gJmFkYXB0ZXItPmN0cmw7CisJc3RhdHVzID0gYmVfY3RybF9pbml0KGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnJlZV9uZXRkZXY7CisKKwlzdGF0dXMgPSBiZV9zdGF0c19pbml0KGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gY3RybF9jbGVhbjsKKworCXN0YXR1cyA9IGJlX2h3X3VwKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gc3RhdHNfY2xlYW47CisKKwlzdGF0dXMgPSBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoY3RybCwgbWFjLCBNQUNfQUREUkVTU19UWVBFX05FVFdPUkssCisJCQl0cnVlIC8qIHBlcm1hbmVudCAqLywgMCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBzdGF0c19jbGVhbjsKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgbWFjLCBFVEhfQUxFTik7CisKKwlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+d29yaywgYmVfd29ya2VyKTsKKwliZV9uZXRkZXZfaW5pdChuZXRkZXYpOworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmFkYXB0ZXItPnBkZXYtPmRldik7CisKKwlzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gc3RhdHNfY2xlYW47CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCBCRV9OQU1FICIgcG9ydCAlZFxuIiwgYWRhcHRlci0+cG9ydF9udW0pOworCXJldHVybiAwOworCitzdGF0c19jbGVhbjoKKwliZV9zdGF0c19jbGVhbnVwKGFkYXB0ZXIpOworY3RybF9jbGVhbjoKKwliZV9jdHJsX2NsZWFudXAoYWRhcHRlcik7CitmcmVlX25ldGRldjoKKwlmcmVlX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOworcmVsX3JlZzoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZGlzYWJsZV9kZXY6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZG9fbm9uZToKKwlkZXZfd2FybigmcGRldi0+ZGV2LCBCRV9OQU1FICIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGJlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gIGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXJ0bmxfbG9jaygpOworCQliZV9jbG9zZShuZXRkZXYpOworCQlydG5sX3VubG9jaygpOworCX0KKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9ICBhZGFwdGVyLT5uZXRkZXY7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJcnRubF9sb2NrKCk7CisJCWJlX29wZW4obmV0ZGV2KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmVfZHJpdmVyID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLmlkX3RhYmxlID0gYmVfZGV2X2lkcywKKwkucHJvYmUgPSBiZV9wcm9iZSwKKwkucmVtb3ZlID0gYmVfcmVtb3ZlLAorCS5zdXNwZW5kID0gYmVfc3VzcGVuZCwKKwkucmVzdW1lID0gYmVfcmVzdW1lCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiZV9pbml0X21vZHVsZSh2b2lkKQoreworCWlmIChyeF9mcmFnX3NpemUgIT0gODE5MiAmJiByeF9mcmFnX3NpemUgIT0gNDA5NgorCQkmJiByeF9mcmFnX3NpemUgIT0gMjA0OCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkiIDogTW9kdWxlIHBhcmFtIHJ4X2ZyYWdfc2l6ZSBtdXN0IGJlIDIwNDgvNDA5Ni84MTkyLiIKKwkJCSIgVXNpbmcgMjA0OFxuIik7CisJCXJ4X2ZyYWdfc2l6ZSA9IDIwNDg7CisJfQorCS8qIEVuc3VyZSByeF9mcmFnX3NpemUgaXMgYWxpZ25lZCB0byBjaGFjaGUgbGluZSAqLworCWlmIChTS0JfREFUQV9BTElHTihyeF9mcmFnX3NpemUpICE9IHJ4X2ZyYWdfc2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkiIDogQmFkIG1vZHVsZSBwYXJhbSByeF9mcmFnX3NpemUuIFVzaW5nIDIwNDhcbiIpOworCQlyeF9mcmFnX3NpemUgPSAyMDQ4OworCX0KKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYmVfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJlX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChiZV9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5jIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwppbmRleCA3OGUzMWFhLi45YWZlODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKQEAgLTQxNSwxMSArNDE1LDExIEBACiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfUk1JSSkKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmJmaW5fbWFjX2FkanVzdF9saW5rLCAwLAotCQkJUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJmJmaW5fbWFjX2FkanVzdF9saW5rLAorCQkJMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOwogI2Vsc2UKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmJmaW5fbWFjX2FkanVzdF9saW5rLCAwLAotCQkJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKICNlbmRpZgogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CkBAIC00NDcsNyArNDQ3LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKIAkgICAgICAgIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQsIG1kY19jbGs9JWRIeihtZGNfZGl2PSVkKSIKIAkgICAgICAgIkBzY2xrPSVkTUh6KVxuIiwKLQkgICAgICAgRFJWX05BTUUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxLAorCSAgICAgICBEUlZfTkFNRSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxLAogCSAgICAgICBNRENfQ0xLLCBtZGNfZGl2LCBzY2xrLzEwMDAwMDApOwogCiAJcmV0dXJuIDA7CkBAIC00ODgsNyArNDg4LDcgQEAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKIAlzdHJjcHkoaW5mby0+ZndfdmVyc2lvbiwgIk4vQSIpOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZkZXYtPmRldikpOwogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJmaW5fbWFjX2V0aHRvb2xfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm1hYy5jIGIvZHJpdmVycy9uZXQvYm1hYy5jCmluZGV4IDhhNTQ2YTMuLjQ0ZDAxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JtYWMuYworKysgYi9kcml2ZXJzL25ldC9ibWFjLmMKQEAgLTEwNjIsNyArMTA2Miw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgYm1hY19taXNjX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwotCXN0cnVjdCBibWFjX2RhdGEgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gYm1yZWFkKGRldiwgU1RBVFVTKTsKIAlpZiAobWlzY2ludGNvdW50KysgPCAxMCkgewogCQlYWERFQlVHKCgiYm1hY19taXNjX2ludHJcbiIpKTsKQEAgLTEyNDAsNyArMTIzOSw3IEBACiB7CiAJc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cmNweShpbmZvLT5kcml2ZXIsICJibWFjIik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBicC0+bWRldi0+b2ZkZXYuZGV2LmJ1c19pZCk7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSgmYnAtPm1kZXYtPm9mZGV2LmRldikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJtYWNfZXRodG9vbF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNjUwMGI3Yy4uYWQ0NDZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTcsOCArNTcsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuOS4yIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYiAxMSwgMjAwOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjkuMyIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXJjaCAxNywgMjAwOSIKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKQEAgLTE0OTcsNiArMTQ5Nyw4IEBACiAKIHN0YXRpYyBpbnQKIGJueDJfc2V0dXBfcmVtb3RlX3BoeShzdHJ1Y3QgYm54MiAqYnAsIHU4IHBvcnQpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJdTMyIHNwZWVkX2FyZyA9IDAsIHBhdXNlX2FkdjsKIApAQCAtMTU1NCw2ICsxNTU2LDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9zZXJkZXNfcGh5KHN0cnVjdCBibngyICpicCwgdTggcG9ydCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgYWR2LCBibWNyOwogCXUzMiBuZXdfYWR2ID0gMDsKQEAgLTE4NjYsNiArMTg3MCw4IEBACiAKIHN0YXRpYyBpbnQKIGJueDJfc2V0dXBfY29wcGVyX3BoeShzdHJ1Y3QgYm54MiAqYnApCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJdTMyIGJtY3I7CiAJdTMyIG5ld19ibWNyOwpAQCAtMTk2Myw2ICsxOTY5LDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9waHkoc3RydWN0IGJueDIgKmJwLCB1OCBwb3J0KQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCWlmIChicC0+bG9vcGJhY2sgPT0gTUFDX0xPT1BCQUNLKQogCQlyZXR1cm4gMDsKQEAgLTIxNzYsNiArMjE4NCw4IEBACiAKIHN0YXRpYyBpbnQKIGJueDJfaW5pdF9waHkoc3RydWN0IGJueDIgKmJwLCBpbnQgcmVzZXRfcGh5KQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCXUzMiB2YWw7CiAJaW50IHJjID0gMDsKQEAgLTMwMDUsNiArMzAxNSw4IEBACiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJfQogCisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBibmFwaSAtICZicC0+Ym54Ml9uYXBpWzBdKTsKKwogI2lmZGVmIEJDTV9WTEFOCiAJCWlmIChod192bGFuKQogCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYnAtPnZsZ3JwLCB2dGFnKTsKQEAgLTMwNjEsNyArMzA3Myw3IEBACiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTMwNzgsNyArMzA5MCw3IEBACiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTMxMTQsOSArMzEyNiw5IEBACiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYm5hcGktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYm5hcGktPm5hcGkpKSB7CiAJCWJuYXBpLT5sYXN0X3N0YXR1c19pZHggPSBzYmxrLT5zdGF0dXNfaWR4OwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTMyMjYsNyArMzIzOCw3IEBACiAJCXJtYigpOwogCQlpZiAobGlrZWx5KCFibngyX2hhc19mYXN0X3dvcmsoYm5hcGkpKSkgewogCi0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01ELCBibmFwaS0+aW50X251bSB8CiAJCQkgICAgICAgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5ERVhfVkFMSUQgfAogCQkJICAgICAgIGJuYXBpLT5sYXN0X3N0YXR1c19pZHgpOwpAQCAtMzI1OSw3ICszMjcxLDcgQEAKIAogCQlybWIoKTsKIAkJaWYgKGxpa2VseSghYm54Ml9oYXNfd29yayhibmFwaSkpKSB7Ci0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQlpZiAobGlrZWx5KGJwLT5mbGFncyAmIEJOWDJfRkxBR19VU0lOR19NU0lfT1JfTVNJWCkpIHsKIAkJCQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01ELAogCQkJCSAgICAgICBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTkRFWF9WQUxJRCB8CkBAIC01ODQzLDkgKzU4NTUsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBCTlgyX01BWF9NU0lYX1ZFQzsgaSsrKSB7CiAJCW1zaXhfZW50W2ldLmVudHJ5ID0gaTsKIAkJbXNpeF9lbnRbaV0udmVjdG9yID0gMDsKLQotCQlzbnByaW50ZihicC0+aXJxX3RibFtpXS5uYW1lLCBsZW4sICIlcy0lZCIsIGRldi0+bmFtZSwgaSk7Ci0JCWJwLT5pcnFfdGJsW2ldLmhhbmRsZXIgPSBibngyX21zaV8xc2hvdDsKIAl9CiAKIAlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgbXNpeF9lbnQsIEJOWDJfTUFYX01TSVhfVkVDKTsKQEAgLTU4NTQsOCArNTg2MywxMSBAQAogCiAJYnAtPmlycV9udmVjcyA9IG1zaXhfdmVjczsKIAlicC0+ZmxhZ3MgfD0gQk5YMl9GTEFHX1VTSU5HX01TSVggfCBCTlgyX0ZMQUdfT05FX1NIT1RfTVNJOwotCWZvciAoaSA9IDA7IGkgPCBCTlgyX01BWF9NU0lYX1ZFQzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBCTlgyX01BWF9NU0lYX1ZFQzsgaSsrKSB7CiAJCWJwLT5pcnFfdGJsW2ldLnZlY3RvciA9IG1zaXhfZW50W2ldLnZlY3RvcjsKKwkJc25wcmludGYoYnAtPmlycV90YmxbaV0ubmFtZSwgbGVuLCAiJXMtJWQiLCBkZXYtPm5hbWUsIGkpOworCQlicC0+aXJxX3RibFtpXS5oYW5kbGVyID0gYm54Ml9tc2lfMXNob3Q7CisJfQogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKaW5kZXggMTVhNWNmMC4uYTMyOWJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC5oCkBAIC0yNSw2ICsyNSwxNiBAQAogI2VuZGlmCiAKIAorI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQorCisjZGVmaW5lIEJOWDJYX05FV19OQVBJCisKKworI2luY2x1ZGUgImJueDJ4X3JlZy5oIgorI2luY2x1ZGUgImJueDJ4X2Z3X2RlZnMuaCIKKyNpbmNsdWRlICJibngyeF9oc2kuaCIKKyNpbmNsdWRlICJibngyeF9saW5rLmgiCisKIC8qIGVycm9yL2RlYnVnIHByaW50cyAqLwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJ4IgpAQCAtOTIsMTIgKzEwMiwxMCBAQAogCiAjZGVmaW5lIFJFR19SRChicCwgb2Zmc2V0KQkJcmVhZGwoUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19SRDgoYnAsIG9mZnNldCkJCXJlYWRiKFJFR19BRERSKGJwLCBvZmZzZXQpKQotI2RlZmluZSBSRUdfUkQ2NChicCwgb2Zmc2V0KQkJcmVhZHEoUkVHX0FERFIoYnAsIG9mZnNldCkpCiAKICNkZWZpbmUgUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkJCXdyaXRlbCgodTMyKXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19XUjgoYnAsIG9mZnNldCwgdmFsKQl3cml0ZWIoKHU4KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCiAjZGVmaW5lIFJFR19XUjE2KGJwLCBvZmZzZXQsIHZhbCkJd3JpdGV3KCh1MTYpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1dSMzIoYnAsIG9mZnNldCwgdmFsKQlSRUdfV1IoYnAsIG9mZnNldCwgdmFsKQogCiAjZGVmaW5lIFJFR19SRF9JTkQoYnAsIG9mZnNldCkJCWJueDJ4X3JlZ19yZF9pbmQoYnAsIG9mZnNldCkKICNkZWZpbmUgUkVHX1dSX0lORChicCwgb2Zmc2V0LCB2YWwpCWJueDJ4X3JlZ193cl9pbmQoYnAsIG9mZnNldCwgdmFsKQpAQCAtMTUyLDkgKzE2MCw3IEBACiAjZGVmaW5lIFBBR0VTX1BFUl9TR0UJCQkoMSA8PCBQQUdFU19QRVJfU0dFX1NISUZUKQogI2RlZmluZSBTR0VfUEFHRV9TSVpFCQkJUEFHRV9TSVpFCiAjZGVmaW5lIFNHRV9QQUdFX1NISUZUCQkJUEFHRV9TSElGVAotI2RlZmluZSBTR0VfUEFHRV9BTElHTihhZGRyKQkJUEFHRV9BTElHTihhZGRyKQotCi0jZGVmaW5lIEJDTV9SWF9FVEhfUEFZTE9BRF9BTElHTgk2NAorI2RlZmluZSBTR0VfUEFHRV9BTElHTihhZGRyKQkJUEFHRV9BTElHTigodHlwZW9mKFBBR0VfU0laRSkpYWRkcikKIAogLyogU0dFIHJpbmcgcmVsYXRlZCBtYWNyb3MgKi8KICNkZWZpbmUgTlVNX1JYX1NHRV9QQUdFUwkJMgpAQCAtMTg3LDYgKzE5Myw0MyBAQAogI2RlZmluZSBORVhUX1NHRV9NQVNLX0VMRU0oZWwpCQkoKChlbCkgKyAxKSAmIFJYX1NHRV9NQVNLX0xFTl9NQVNLKQogCiAKK3N0cnVjdCBibngyeF9ldGhfcV9zdGF0cyB7CisJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvOworCisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKKworCXUzMiBkcml2ZXJfeG9mZjsKKwl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OworCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOworCXUzMiBod19jc3VtX2VycjsKK307CisKKyNkZWZpbmUgQk5YMlhfTlVNX1FfU1RBVFMJCTExCisjZGVmaW5lIFFfU1RBVFNfT0ZGU0VUMzIoc3RhdF9uYW1lKSBcCisJCQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKKwogc3RydWN0IGJueDJ4X2Zhc3RwYXRoIHsKIAogCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOwpAQCAtMjI4LDIwICsyNzEsMTUgQEAKIAl1OAkJCWluZGV4OwkvKiBudW1iZXIgaW4gZnAgYXJyYXkgKi8KIAl1OAkJCWNsX2lkOwkvKiBldGggY2xpZW50IGlkICovCiAJdTgJCQlzYl9pZDsJLyogc3RhdHVzIGJsb2NrIG51bWJlciBpbiBIVyAqLwotI2RlZmluZSBGUF9JRFgoZnApCQkJKGZwLT5pbmRleCkKLSNkZWZpbmUgRlBfQ0xfSUQoZnApCQkJKGZwLT5jbF9pZCkKLSNkZWZpbmUgQlBfQ0xfSUQoYnApCQkJKGJwLT5mcFswXS5jbF9pZCkKLSNkZWZpbmUgRlBfU0JfSUQoZnApCQkJKGZwLT5zYl9pZCkKLSNkZWZpbmUgQ05JQ19TQl9JRAkJCTAKIAogCXUxNgkJCXR4X3BrdF9wcm9kOwogCXUxNgkJCXR4X3BrdF9jb25zOwogCXUxNgkJCXR4X2JkX3Byb2Q7CiAJdTE2CQkJdHhfYmRfY29uczsKLQl1MTYJCQkqdHhfY29uc19zYjsKKwlfX2xlMTYJCQkqdHhfY29uc19zYjsKIAotCXUxNgkJCWZwX2NfaWR4OwotCXUxNgkJCWZwX3VfaWR4OworCV9fbGUxNgkJCWZwX2NfaWR4OworCV9fbGUxNgkJCWZwX3VfaWR4OwogCiAJdTE2CQkJcnhfYmRfcHJvZDsKIAl1MTYJCQlyeF9iZF9jb25zOwpAQCAtMjUwLDggKzI4OCw4IEBACiAJdTE2CQkJcnhfc2dlX3Byb2Q7CiAJLyogVGhlIGxhc3QgbWF4aW1hbCBjb21wbGV0ZWQgU0dFICovCiAJdTE2CQkJbGFzdF9tYXhfc2dlOwotCXUxNgkJCSpyeF9jb25zX3NiOwotCXUxNgkJCSpyeF9iZF9jb25zX3NiOworCV9fbGUxNgkJCSpyeF9jb25zX3NiOworCV9fbGUxNgkJCSpyeF9iZF9jb25zX3NiOwogCiAJdW5zaWduZWQgbG9uZwkJdHhfcGt0LAogCQkJCXJ4X3BrdCwKQEAgLTI2Niw2ICszMDQsMTIgQEAKIAl1NjQJCQl0cGFfcXVldWVfdXNlZDsKICNlbmRpZgogCisJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF90Y2xpZW50OworCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfdWNsaWVudDsKKwlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3hjbGllbnQ7CisJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzIGV0aF9xX3N0YXRzOworCisJY2hhcgkJCW5hbWVbSUZOQU1TSVpdOwogCXN0cnVjdCBibngyeAkJKmJwOyAvKiBwYXJlbnQgKi8KIH07CiAKQEAgLTQwMSwxMCArNDQ1LDEzIEBACiAjZGVmaW5lIEJOWDJYX1JYX0NTVU1fT0soY3FlKSBcCiAJCQkoIShCTlgyWF9MNF9DU1VNX0VSUihjcWUpIHx8IEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkpKQogCisjZGVmaW5lIEJOWDJYX1BSU19GTEFHX09WRVJFVEhfSVBWNChmbGFncykgXAorCQkJCSgoKGxlMTZfdG9fY3B1KGZsYWdzKSAmIFwKKwkJCQkgICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0wpID4+IFwKKwkJCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkgXAorCQkJCSA9PSBQUlNfRkxBR19PVkVSRVRIX0lQVjQpCiAjZGVmaW5lIEJOWDJYX1JYX1NVTV9GSVgoY3FlKSBcCi0JCQkoKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmIFwKLQkJCSAgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MKSA9PSBcCi0JCQkgKDEgPDwgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MX1NISUZUKSkKKwlCTlgyWF9QUlNfRkxBR19PVkVSRVRIX0lQVjQoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpCiAKIAogI2RlZmluZSBGUF9VU0JfRlVOQ19PRkYJCQkoMiArIDIqSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTKQpAQCAtNDc4LDExICs1MjUsOCBAQAogCXUzMgkJCXNobWVtX2Jhc2U7CiAKIAl1MzIJCQlod19jb25maWc7Ci0JdTMyCQkJYm9hcmQ7CiAKIAl1MzIJCQliY192ZXI7Ci0KLQljaGFyCQkJKm5hbWU7CiB9OwogCiAKQEAgLTUyOCw2ICs1NzIsNyBAQAogCiAJLyogdXNlZCB0byBzeW5jaHJvbml6ZSBwaHkgYWNjZXNzZXMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXBoeV9tdXRleDsKKwlpbnQJCQluZWVkX2h3X2xvY2s7CiAKIAl1MzIJCQlwb3J0X3N0eDsKIApAQCAtNTczLDYgKzYxOCwxMCBAQAogCiAJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOwogCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKIAogCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaTsKIAl1MzIgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG87CkBAIC02NTEsMTkgKzcwMCwyMCBAQAogCXUzMiB0eF9zdGF0X2JtYWNfdWZsX2hpOwogCXUzMiB0eF9zdGF0X2JtYWNfdWZsX2xvOwogCi0JdTMyIGJyYl9kcm9wX2hpOwotCXUzMiBicmJfZHJvcF9sbzsKLQl1MzIgYnJiX3RydW5jYXRlX2hpOwotCXUzMiBicmJfdHJ1bmNhdGVfbG87Ci0KLQl1MzIgamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7CisJdTMyIHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaTsKKwl1MzIgcGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvOworCXUzMiBwYXVzZV9mcmFtZXNfc2VudF9oaTsKKwl1MzIgcGF1c2VfZnJhbWVzX3NlbnRfbG87CiAKIAl1MzIgZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2hpOwogCXUzMiBldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfbG87CiAJdTMyIGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGk7CiAJdTMyIGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfbG87CiAKLQl1MzIgbm9fYnVmZl9kaXNjYXJkOworCXUzMiBicmJfZHJvcF9oaTsKKwl1MzIgYnJiX2Ryb3BfbG87CisJdTMyIGJyYl90cnVuY2F0ZV9oaTsKKwl1MzIgYnJiX3RydW5jYXRlX2xvOwogCiAJdTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKIAl1MzIgeHhvdmVyZmxvd19kaXNjYXJkOwpAQCAtNjc0LDE3ICs3MjQsMTYgQEAKIAl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OwogCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOwogCXUzMiBod19jc3VtX2VycjsKKworCXUzMiBuaWdfdGltZXJfbWF4OwogfTsKIAorI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQk0MQogI2RlZmluZSBTVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKIAkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKIAogCi0jaWZkZWYgQk5YMlhfTVVMVEkKICNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNgotI2Vsc2UKLSNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxCi0jZW5kaWYKIAogdW5pb24gY2R1X2NvbnRleHQgewogCXN0cnVjdCBldGhfY29udGV4dCBldGg7CkBAIC03MzksNiArNzg4LDkgQEAKIAogCWF0b21pY190CQlpbnRyX3NlbTsKIAlzdHJ1Y3QgbXNpeF9lbnRyeQltc2l4X3RhYmxlW01BWF9DT05URVhUKzFdOworI2RlZmluZSBJTlRfTU9ERV9JTlR4CQkJMQorI2RlZmluZSBJTlRfTU9ERV9NU0kJCQkyCisjZGVmaW5lIElOVF9NT0RFX01TSVgJCQkzCiAKIAlpbnQJCQl0eF9yaW5nX3NpemU7CiAKQEAgLTc0NywyMyArNzk5LDI2IEBACiAjZW5kaWYKIAogCXUzMgkJCXJ4X2NzdW07Ci0JdTMyCQkJcnhfb2Zmc2V0OwogCXUzMgkJCXJ4X2J1Zl9zaXplOwogI2RlZmluZSBFVEhfT1ZSRUhFQUQJCQkoRVRIX0hMRU4gKyA4KQkvKiA4IGZvciBDUkMgKyBWTEFOICovCiAjZGVmaW5lIEVUSF9NSU5fUEFDS0VUX1NJWkUJCTYwCiAjZGVmaW5lIEVUSF9NQVhfUEFDS0VUX1NJWkUJCTE1MDAKICNkZWZpbmUgRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRQk5NjAwCiAKKwkvKiBNYXggc3VwcG9ydGVkIGFsaWdubWVudCBpcyAyNTYgKDggc2hpZnQpICovCisjZGVmaW5lIEJOWDJYX1JYX0FMSUdOX1NISUZUCQkoKEwxX0NBQ0hFX1NISUZUIDwgOCkgPyBcCisJCQkJCSBMMV9DQUNIRV9TSElGVCA6IDgpCisjZGVmaW5lIEJOWDJYX1JYX0FMSUdOCQkJKDEgPDwgQk5YMlhfUlhfQUxJR05fU0hJRlQpCisKIAlzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrICpkZWZfc3RhdHVzX2JsazsKICNkZWZpbmUgREVGX1NCX0lECQkJMTYKLQl1MTYJCQlkZWZfY19pZHg7Ci0JdTE2CQkJZGVmX3VfaWR4OwotCXUxNgkJCWRlZl94X2lkeDsKLQl1MTYJCQlkZWZfdF9pZHg7Ci0JdTE2CQkJZGVmX2F0dF9pZHg7CisJX19sZTE2CQkJZGVmX2NfaWR4OworCV9fbGUxNgkJCWRlZl91X2lkeDsKKwlfX2xlMTYJCQlkZWZfeF9pZHg7CisJX19sZTE2CQkJZGVmX3RfaWR4OworCV9fbGUxNgkJCWRlZl9hdHRfaWR4OwogCXUzMgkJCWF0dG5fc3RhdGU7CiAJc3RydWN0IGF0dG5fcm91dGUJYXR0bl9ncm91cFtNQVhfRFlOQU1JQ19BVFROX0dSUFNdOwotCXUzMgkJCW5pZ19tYXNrOwogCiAJLyogc2xvdyBwYXRoIHJpbmcgKi8KIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcTsKQEAgLTc3MSw3ICs4MjYsNyBAQAogCXUxNgkJCXNwcV9wcm9kX2lkeDsKIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcV9wcm9kX2JkOwogCXN0cnVjdCBldGhfc3BlCQkqc3BxX2xhc3RfYmQ7Ci0JdTE2CQkJKmRzYl9zcF9wcm9kOworCV9fbGUxNgkJCSpkc2Jfc3BfcHJvZDsKIAl1MTYJCQlzcHFfbGVmdDsgLyogc2VyaWFsaXplIHNwcSAqLwogCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3BxIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdAkJc3BxX2xvY2s7CkBAIC03ODksMTEgKzg0NCwxMSBAQAogCXUzMgkJCWZsYWdzOwogI2RlZmluZSBQQ0lYX0ZMQUcJCQkxCiAjZGVmaW5lIFBDSV8zMkJJVF9GTEFHCQkJMgotI2RlZmluZSBPTkVfVERNQV9GTEFHCQkJNAkvKiBubyBsb25nZXIgdXNlZCAqLworI2RlZmluZSBPTkVfUE9SVF9GTEFHCQkJNAogI2RlZmluZSBOT19XT0xfRkxBRwkJCTgKICNkZWZpbmUgVVNJTkdfREFDX0ZMQUcJCQkweDEwCiAjZGVmaW5lIFVTSU5HX01TSVhfRkxBRwkJCTB4MjAKLSNkZWZpbmUgQVNGX0VOQUJMRV9GTEFHCQkJMHg0MAorI2RlZmluZSBVU0lOR19NU0lfRkxBRwkJCTB4NDAKICNkZWZpbmUgVFBBX0VOQUJMRV9GTEFHCQkJMHg4MAogI2RlZmluZSBOT19NQ1BfRkxBRwkJCTB4MTAwCiAjZGVmaW5lIEJQX05PTUNQKGJwKQkJCShicC0+ZmxhZ3MgJiBOT19NQ1BfRkxBRykKQEAgLTgwOCwxMiArODYzLDEyIEBACiAKIAlpbnQJCQlwbV9jYXA7CiAJaW50CQkJcGNpZV9jYXA7CisJaW50CQkJbXJyczsKIAogCXN0cnVjdCBkZWxheWVkX3dvcmsJc3BfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVzZXRfdGFzazsKIAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwotCWludAkJCXRpbWVyX2ludGVydmFsOwogCWludAkJCWN1cnJlbnRfaW50ZXJ2YWw7CiAKIAl1MTYJCQlmd19zZXE7CkBAIC04MjYsNiArODgxLDkgQEAKIAlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKIAlzdHJ1Y3QgYm54MnhfcG9ydAlwb3J0OwogCisJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IGNtbmc7CisJdTMyCQkJdm5fd2VpZ2h0X3N1bTsKKwogCXUzMgkJCW1mX2NvbmZpZzsKIAl1MTYJCQllMWhvdjsKIAl1OAkJCWUxaG1mOwpAQCAtODQ4LDcgKzkwNiw3IEBACiAJdTMyCQkJbGluX2NudDsKIAogCWludAkJCXN0YXRlOwotI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TRUQJCTB4MAorI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TRUQJCTAKICNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FECTB4MTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQJMHgyMDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU4JCTB4MzAwMApAQCAtODU5LDggKzkxNyw5IEBACiAjZGVmaW5lIEJOWDJYX1NUQVRFX0RJQUcJCTB4ZTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9FUlJPUgkJMHhmMDAwCiAKLQlpbnQJCQludW1fcXVldWVzOwotI2RlZmluZSBCUF9NQVhfUVVFVUVTKGJwKQkJKElTX0UxSE1GKGJwKSA/IDQgOiAxNikKKwlpbnQJCQltdWx0aV9tb2RlOworCWludAkJCW51bV9yeF9xdWV1ZXM7CisJaW50CQkJbnVtX3R4X3F1ZXVlczsKIAogCXUzMgkJCXJ4X21vZGU7CiAjZGVmaW5lIEJOWDJYX1JYX01PREVfTk9ORQkJMApAQCAtODk4LDggKzk1Nyw2IEBACiAJaW50CQkJZXhlY3V0ZXJfaWR4OwogCiAJdTE2CQkJc3RhdHNfY291bnRlcjsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF94Y2xpZW50OwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMJZXRoX3N0YXRzOwogCiAJc3RydWN0IHpfc3RyZWFtX3MJKnN0cm07CkBAIC05MTEsMTcgKzk2OCwyNyBAQAogfTsKIAogCi0jZGVmaW5lIGZvcl9lYWNoX3F1ZXVlKGJwLCB2YXIpCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBCTlgyWF9NQVhfUVVFVUVTKGJwKQkoSVNfRTFITUYoYnApID8gKE1BWF9DT05URVhUIC8gRTFIVk5fTUFYKSA6IFwKKwkJCQkJCSBNQVhfQ09OVEVYVCkKKyNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJbWF4KGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcykKKyNkZWZpbmUgaXNfbXVsdGkoYnApCQkoQk5YMlhfTlVNX1FVRVVFUyhicCkgPiAxKQogCisjZGVmaW5lIGZvcl9lYWNoX3J4X3F1ZXVlKGJwLCB2YXIpIFwKKwkJCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9yeF9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBmb3JfZWFjaF90eF9xdWV1ZShicCwgdmFyKSBcCisJCQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fdHhfcXVldWVzOyB2YXIrKykKKyNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCiAjZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIHZhcikgXAotCQkJCWZvciAodmFyID0gMTsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQotI2RlZmluZSBpc19tdWx0aShicCkJCShicC0+bnVtX3F1ZXVlcyA+IDEpCisJCQlmb3IgKHZhciA9IDE7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKIAogCiB2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMik7CiB2b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGRzdF9hZGRyLAogCQkgICAgICB1MzIgbGVuMzIpOworaW50IGJueDJ4X2dldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTggcG9ydCk7CiBpbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCk7CitpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOwogCiBzdGF0aWMgaW5saW5lIHUzMiByZWdfcG9sbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgZXhwZWN0ZWQsIGludCBtcywKIAkJCSAgIGludCB3YWl0KQpAQCAtOTkyLDEzICsxMDU5LDEyIEBACiAjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVEX1NISUZUCQkxNgogCiAKLSNkZWZpbmUgQk5YMlhfTlVNX1NUQVRTCQkJNDIKLSNkZWZpbmUgQk5YMlhfTlVNX1RFU1RTCQkJOAorI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQk3CiAKLSNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLCQkwCi0jZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMQotI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVECTEKLSNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkyCisjZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMAorI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0sJCTEKKyNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkxCisjZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQJMgogI2RlZmluZSBCTlgyWF9MT09QQkFDS19GQUlMRUQJCShCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEIHwgXAogCQkJCQkgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRCkKIApAQCAtMTA2MSw5ICsxMTI3LDYgQEAKICNkZWZpbmUgQk5YMlhfTUNQX0FTU0VSVCBcCiAJR0VORVJBTF9BVFRFTl9PRkZTRVQoTUNQX0ZBVEFMX0FTU0VSVF9BVFRFTlRJT05fQklUKQogCi0jZGVmaW5lIEJOWDJYX0RPT1JRX0FTU0VSVCBcCi0JQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVAotCiAjZGVmaW5lIEJOWDJYX0dSQ19USU1FT1VUCUdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9USU1FT1VUX0dSQykKICNkZWZpbmUgQk5YMlhfR1JDX1JTVgkJKEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNSKSB8IFwKIAkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ1QpIHwgXApAQCAtMTEyMCwxMiArMTE4MywxMyBAQAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX1BBUklUWV9FUlJPUikKIAogCi0jZGVmaW5lIE1VTFRJX0ZMQUdTIFwKKyNkZWZpbmUgTVVMVElfRkxBR1MoYnApIFwKIAkJKFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X1RDUF9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFkgfCBcCiAJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgfCBcCi0JCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSkKKwkJIChicC0+bXVsdGlfbW9kZSA8PCBcCisJCSAgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUKSkKIAogI2RlZmluZSBNVUxUSV9NQVNLCQkJMHg3ZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmggYi9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjNmIwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaApAQCAtMCwwICsxLDUyNiBAQAorLyogYm54MnhfZHVtcC5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisKKy8qIFRoaXMgc3RydWN0IGhvbGRzIGEgc2lnbmF0dXJlIHRvIGVuc3VyZSB0aGUgZHVtcCByZXR1cm5lZCBmcm9tIHRoZSBkcml2ZXIKKyAqIG1hdGNoIHRoZSBtZXRhIGRhdGEgZmlsZSBpbnNlcnRlZCB0byBncmNfZHVtcC50Y2wKKyAqIFRoZSBzaWduYXR1cmUgaXMgdGltZSBzdGFtcCwgZGlhZyB2ZXJzaW9uIGFuZCBncmNfZHVtcCB2ZXJzaW9uCisgKi8KKworc3RydWN0IGR1bXBfc2lnbiB7CisJdTMyIHRpbWVfc3RhbXA7CisJdTMyIGRpYWdfdmVyOworCXUzMiBncmNfZHVtcF92ZXI7Cit9OworCisjZGVmaW5lIFRTVE9STV9XQUlUUF9BRERSCTB4MWI4YTgwCisjZGVmaW5lIENTVE9STV9XQUlUUF9BRERSCTB4MjM4YTgwCisjZGVmaW5lIFhTVE9STV9XQUlUUF9BRERSCTB4MmI4YTgwCisjZGVmaW5lIFVTVE9STV9XQUlUUF9BRERSCTB4MzM4YTgwCisjZGVmaW5lIFRTVE9STV9DQU1fTU9ERQkJMHgxYjE0NDAKKworI2RlZmluZSBSSV9FMQkJCTB4MQorI2RlZmluZSBSSV9FMUgJCQkweDIKKyNkZWZpbmUgUklfT05MSU5FCQkweDEwMAorCisjZGVmaW5lIFJJX0UxX09GRkxJTkUJCShSSV9FMSkKKyNkZWZpbmUgUklfRTFfT05MSU5FCQkoUklfRTEgfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0UxSF9PRkZMSU5FCQkoUklfRTFIKQorI2RlZmluZSBSSV9FMUhfT05MSU5FCQkoUklfRTFIIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9BTExfT0ZGTElORQkJKFJJX0UxIHwgUklfRTFIKQorI2RlZmluZSBSSV9BTExfT05MSU5FCQkoUklfRTEgfCBSSV9FMUggfCBSSV9PTkxJTkUpCisKKyNkZWZpbmUgTUFYX1RJTUVSX1BFTkRJTkcJMjAwCisjZGVmaW5lIFRJTUVSX1NDQU5fRE9OVF9DQVJFCTB4RkYKKworCitzdHJ1Y3QgZHVtcF9oZHIgeworCXUzMgkJIGhkcl9zaXplOwkvKiBpbiBkd29yZHMsIGV4Y2x1ZGluZyB0aGlzIGZpZWxkICovCisJc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ247CisJdTMyCQkgeHN0b3JtX3dhaXRwOworCXUzMgkJIHRzdG9ybV93YWl0cDsKKwl1MzIJCSB1c3Rvcm1fd2FpdHA7CisJdTMyCQkgY3N0b3JtX3dhaXRwOworCXUxNgkJIGluZm87CisJdTgJCSBpZGxlX2NoazsKKwl1OAkJIHJlc2VydmVkOworfTsKKworc3RydWN0IHJlZ19hZGRyIHsKKwl1MzIgYWRkcjsKKwl1MzIgc2l6ZTsKKwl1MTYgaW5mbzsKK307CisKK3N0cnVjdCB3cmVnX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBzaXplOworCXUzMiByZWFkX3JlZ3NfY291bnQ7CisJY29uc3QgdTMyICpyZWFkX3JlZ3M7CisJdTE2IGluZm87Cit9OworCisKKyNkZWZpbmUgUkVHU19DT1VOVAkJNTU4CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIHJlZ19hZGRyc1tSRUdTX0NPVU5UXSA9IHsKKwl7IDB4MjAwMCwgMzQxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDAsIDEwMywgUklfQUxMX09OTElORX0sCisJeyAweDMwMDAsIDI4NywgUklfQUxMX09OTElORX0sIHsgMHgzODAwLCAzMzEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg4ODAwLCA2LCBSSV9FMV9PTkxJTkV9LCB7IDB4YTAwMCwgMjIzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTM4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhMzk4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTM5YywgNywgUklfRTFIX09OTElORX0sIHsgMHhhM2MwLCAzLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNkMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2Q4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNlMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2U4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNmMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2Y4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTQwMCwgNjksIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1MjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUyOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1MzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU2OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1OTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTVhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1YzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTVlMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE1ZTgsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTVmMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE1ZjgsIDEwLCBSSV9FMUhfT05MSU5FfSwgeyAweDEwMDAwLCAyMzYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDNiYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNjYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwM2RjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAwLCA1NywgUklfQUxMX09OTElORX0sCisJeyAweDEwNGU4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNGY0LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDAsIDE0NiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc1MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwNzYwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzcwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3ODAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3OTAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDdhMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDdiMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwN2MwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwN2QwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3ZTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4ODAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDkwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MDAwLCAyNiwgUklfRTFIX09OTElORX0sCisJeyAweDE2MDcwLCAxOCwgUklfRTFIX09OTElORX0sIHsgMHgxNjBjMCwgMjcsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjE0MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxNjE2MCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE2MTgwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MWMwLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYyMDQsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTgwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxODAwOCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyMDAwMCwgMjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDA2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgyMDA4MCwgMTM4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAyYjQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYzQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDQwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwYywgOCwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDJjLCAxOCwgUklfRTFIX09OTElORX0sIHsgMHgyMDQ4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNTAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDQwMDAwLCA5OCwgUklfQUxMX09OTElORX0sIHsgMHg0MDE5NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQwMWE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwMWE4LCAxMSwgUklfRTFIX09OTElORX0sCisJeyAweDQwMjAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwNDAwLCA0MywgUklfQUxMX09OTElORX0sCisJeyAweDQwNGI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNGM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0Y2MsIDMsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NDA1MDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDUxMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHg0MDUyMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQwNTMwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNTQwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHg0MjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyMmJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyZDQsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NDI0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTY4LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI4MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAwMDAsIDIwLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAwNTAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAwNzAsIDg4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxZGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAxZWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDFmMCwgNCwgUklfRTFIX09OTElORX0sIHsgMHg1MDIwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDUwMjBjLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjI4LCA2LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4NTAyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MjAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1NDAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDU0MDA0LCAzMzI3LCBSSV9BTExfT0ZGTElORX0sIHsgMHg1ODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDU4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sIHsgMHg2MDAwMCwgNzEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDEyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDEzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTNjLCAyNCwgUklfRTFIX09OTElORX0sIHsgMHg2MDIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYxMDA0LCA1MTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4NzAwMDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NzAwMjAsIDIxNDk2LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDBjLCA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDFjLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDM4LCA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDRjLCAxMDksIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUyMDAsIDMyLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MjgwLCAxMTEwNCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHhhMDAwMCwgMTYzODQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YjAwMDAsIDE2Mzg0LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YzEwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzEwMjgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMTAzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMTgwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGMyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNDAwLCA0OSwgUklfQUxMX09OTElORX0sIHsgMHhjMjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjU2OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHhjMjYwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MDAwLCAxNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJjMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmUwLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweGM0NDAwLCA1MSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NGQwLCAzOCwgUklfQUxMX09OTElORX0sIHsgMHhjNDU3MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGM0NjAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMDAwLCAxOSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMDRjLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGQwMDZjLCA5MSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMWY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAyMGMsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDIyOCwgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4ZDAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDMwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDQwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQ0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQ0MDA0LCAyNTU5LCBSSV9BTExfT0ZGTElORX0sCisJeyAweGQ4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQ4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweGUwMDAwLCAyMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDA1NCwgOCwgUklfQUxMX09OTElORX0sCisJeyAweGUwMDc0LCA4NSwgUklfQUxMX09OTElORX0sIHsgMHhlMDFkNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAyMGMsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMmMsIDE4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4ZTAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAzMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMjAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUyMDA0LCAyMDQ3LCBSSV9BTExfT0ZGTElORX0sIHsgMHhmMDAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGYwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkV9LCB7IDB4MTAxMDAwLCAxMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTAzYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDEwNGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwNTAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTAxMTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxODAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjAwMCwgMTgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwNTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAyMDgwLCAxNywgUklfQUxMX09OTElORX0sIHsgMHgxMDIwYzgsIDgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDI0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDAwLCAyNiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA3NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwODQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDk4LCA1LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTAzODAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAwMCwgNjMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQxMDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MjAwLCAxNywgUklfQUxMX09OTElORX0sIHsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0NTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ5MDAsIDE5MiwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDAwLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMwMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2FjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2RjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNmYywgNzY5LCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDgwMDAsIDMzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MDkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwODBhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwODBhYywgNSwgUklfRTFIX09OTElORX0sIHsgMHgxMDgxMDAsIDUsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgxMjAsIDUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4MjAwLCA3NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwODQwMCwgNzQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4ODAwLCAxNTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDkwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMDAwLCAzNDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1NzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTg4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNTk4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU5YywgMjMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMjA2MTQsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTIwNjFjLCAzMCwgUklfRTFIX09OTElORX0sCisJeyAweDEyMDgwYywgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwYTAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIyMDAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyODAwMCwgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE0MDAwMCwgMTE0LCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDFkNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDQwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQ4MDAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTRjMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE1MDAwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE1NDAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNTgwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNWMwMDAsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxMDAwLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxMDI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2MTgwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwMDAsIDYwLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MGZjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDEwYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDExMCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNjQyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDI1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyNzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjgwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0ODAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NTAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2ODAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDAwLCAyNzAsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4NDU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODgwMCwgMTksIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg5MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4YTAwLCAxMjgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNmEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZhMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE2YzAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNmMwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTZlMDAwLCAxNiwgUklfRTFIX09OTElORX0sIHsgMHgxNmUxMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNmUyMDAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlNDAwLCAxODMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNzAwMDAsIDkzLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDE5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAyMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAyMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTc4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMDAwLCA2MSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEzYywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE4MTAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxODEwMTAsIDEwMjAsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWEwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTgxMDAsIDE5ODQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDFhYTAwNCwgNjY1NSwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDFiMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MjAwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgyMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjAyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjI1ODAwLCAxNTM2LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMjcwMDQsIDEwMjMsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjI4MTAwLCA4NjQwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MjMyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIzODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI0MDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyODAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyODIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmE4MTAwLCA5NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDJhOTAwNCwgNzY3OSwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDJiMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MzAwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgzMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzAyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzI1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyODEwMCwgNTM2LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgzMjg5NjQsIDgxMDMsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgzMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzM4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzQwMDAwLCAyLCBSSV9BTExfT05MSU5FfQorfTsKKworCisjZGVmaW5lIElETEVSRUdTX0NPVU5UCQkyNzcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgaWRsZV9hZGRyc1tJRExFUkVHU19DT1VOVF0gPSB7CisJeyAweDIxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjEyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIxMmMsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MWMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTM4YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE0MDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTQyYywgMTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNjAwLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweGE2MTgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhjMDljLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2IwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzZDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMDIxYywgMTEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDJiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDAxNTQsIDE0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0YWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjI5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjJhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDE2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDFkMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMWUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAyMGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDA5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDExYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzEwMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNTUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyOTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJiNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxNmMsIDgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDFlOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMjBjLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAxNTQsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDIwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMjBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTAzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwODAsIDE2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzAwNCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA2OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwNzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDljLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTA0MDA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDAyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwM2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0NDAwLCA2NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTAxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMWIwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDM2YywgMywgUklfQUxMX09OTElORX0sCisJeyAweDEyMDQwOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjA0MTQsIDE1LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNDc4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDUyYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMjA1N2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1OGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNjA4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTIwODA4LCAxLCBSSV9FMV9PTkxJTkV9LCB7IDB4MTIwODBjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDgyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDgyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4MzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4MzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODcwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODc4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4OTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4YzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhlOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ZjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOTA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDA1YywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDBkMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNDAwZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAyYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDAxNCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MmEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDA4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODAxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAyOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwNTgsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwNzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MjM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODJlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODMwMCwgNjcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4NDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQ0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FfSwgeyAweDE2ZTIwMCwgMTI4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTZlNDA0LCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTU4NCwgNzAsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNzAwYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMGFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE3NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDE4NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYWEwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MWI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MmI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MzM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODBjMCwgMSwgUklfQUxMX09OTElORX0KK307CisKK3N0YXRpYyBjb25zdCB1MzIgcmVhZF9yZWdfZTFfMFtdID0geyAweDFiMTAwMCB9OworCisjZGVmaW5lIFdSRUdTX0NPVU5UX0UxCQkxCitzdGF0aWMgY29uc3Qgc3RydWN0IHdyZWdfYWRkciB3cmVnX2FkZHJzX2UxW1dSRUdTX0NPVU5UX0UxXSA9IHsKKwl7IDB4MWIwYzAwLCAxOTIsIDEsIHJlYWRfcmVnX2UxXzAsIFJJX0UxX09GRkxJTkUgfQorfTsKKworc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMWhfMFtdID0geyAweDFiMTA0MCwgMHgxYjEwMDAgfTsKKworI2RlZmluZSBXUkVHU19DT1VOVF9FMUgJCTEKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFoW1dSRUdTX0NPVU5UX0UxSF0gPSB7CisJeyAweDFiMGMwMCwgMjU2LCAyLCByZWFkX3JlZ19lMWhfMCwgUklfRTFIX09GRkxJTkUgfQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ25fYWxsID0geyAweDQ5YWE5M2VlLCAweDQwODM1LCAweDIyIH07CisKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxCTIKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFbVElNRVJfUkVHU19DT1VOVF9FMV0gPQorCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9CisJeyAweDE2NDBkMCwgMHgxNjQwZDQgfTsKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxSAkyCitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQorCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMWhbVElNRVJfUkVHU19DT1VOVF9FMUhdID0KKwl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmggYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKaW5kZXggMTkyZmE5OC4uZTJkZjIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2Z3X2RlZnMuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDggKzUwLDEwIEBACiAjZGVmaW5lIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMzU4ICsgKHBvcnQgKiAweDNlOCkgKyAoY2xpZW50X2lkICogMHgyOCkpIFwKLQk6ICgweDljOCArIChwb3J0ICogMHgyZjgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDMzNTAgKyAocG9ydCAqIDB4MTkwKSArIChjbGllbnRfaWQgKiAweDEwKSkgXAorCTogKDB4OWMwICsgKHBvcnQgKiAweDEzMCkgKyAoY2xpZW50X2lkICogMHgxMCkpKQorI2RlZmluZSBUU1RPUk1fQ09NTU9OX1NBRkNfV09SS0FST1VORF9FTkFCTEVfT0ZGU0VUIFwKKwkoSVNfRTFIX09GRlNFVCA/IDB4MWFkOCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFRTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAoZnVuY3Rpb24gKiBcCkBAIC04MSw0MyArODMsNTQgQEAKIAkoZnVuY3Rpb24gKiAweDM4KSkpCiAjZGVmaW5lIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjAxMCArIChwb3J0ICogMHg1YjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCi0JMHg1MCkpIDogKDB4NDAwMCArIChwb3J0ICogMHgzZjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDM4KSkpCi0jZGVmaW5lIFRTVE9STV9SWF9QUk9EU19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMzUwICsgKHBvcnQgKiAweDNlOCkgKyAoY2xpZW50X2lkICogMHgyOCkpIFwKLQk6ICgweDljMCArIChwb3J0ICogMHgyZjgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSkKKwkweDUwKSkgOiAoMHg0MDgwICsgKHBvcnQgKiAweDViMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4NTApKSkKICNkZWZpbmUgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MmMwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGI4OCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKLSNkZWZpbmUgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweDNiMzAgOiAweDFjMjApCisjZGVmaW5lIFRTVE9STV9UUEFfRVhJU1RfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHgzNjgwIDogMHgxYzIwKQogI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHhhMDQwIDogMHgyYzEwKQogI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfU0laRSAoSVNfRTFIX09GRlNFVCA/IDB4MjQ0MCA6IDB4MTIwMCkKICNkZWZpbmUgVVNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDgwMDAgOiAweDEwMDApCisJKElTX0UxSF9PRkZTRVQgPyAweDg5NjAgOiAweDEwMDApCiAjZGVmaW5lIFVTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODk4MCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMjk4ICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCi0JKDB4NTQ1MCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxOCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCSgweDUzMzAgKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkxYSArIChmdW5jdGlvbiAqIFwKLQkweDI4KSArIChpbmRleCAqIDB4NCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUyMiArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkyMiArIChmdW5jdGlvbiAqIFwKKwkweDQwKSArIChpbmRleCAqIDB4NCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHgyOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwMCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHg0MCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NTA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDQwKSkpCisjZGVmaW5lIFVTVE9STV9FVEhfUklOR19QQVVTRV9EQVRBX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAyMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCTB4ZmZmZmZmZmYpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhNTAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkOTggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFVTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDI0NDggOiAweGZmZmZmZmZmKQogI2RlZmluZSBVU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NjQ0ICsgKHBvcnQgKiAweGQwKSkgOiAoMHgxOTU0ICsgKHBvcnQgKiAweGI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NzA0ICsgKHBvcnQgKiAweGYwKSkgOiAoMHgxOTg0ICsgKHBvcnQgKiAweGMwKSkpCiAjZGVmaW5lIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMjkwICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCi0JKDB4NTQ0OCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCSgweDUzMjggKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNDA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg1NDA4ICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjQwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTMwOCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhZDQgKyAocG9ydCAqIDB4OCkpIDogMHhmZmZmZmZmZikKKyNkZWZpbmUgVVNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDUwICsgKHBvcnQgKiAweDJkMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKKwkweDI4KSkgOiAoMHg0NzQwICsgKHBvcnQgKiAweDJkMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgVVNUT1JNX1JYX1BST0RTX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRfaWQgKiAweDMwKSkgXAorCTogKDB4NTMxOCArIChwb3J0ICogMHgyNjApICsgKGNsaWVudF9pZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDkwMWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKIAkoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKQEAgLTEzMiwxMiArMTQ1LDE1IEBACiAjZGVmaW5lIFVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgY3B1X2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg5MDA4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpIDogXAogCSgweDE0MDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkpCisjZGVmaW5lIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI5ZjAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkODAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFhTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAogCShJU19FMUhfT0ZGU0VUID8gMHg5MDAwIDogMHgxMDAwKQogI2RlZmluZSBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4OTAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjRhOCArIChwb3J0ICogMHg0MCkpIDogKDB4M2JhMCArIChwb3J0ICogMHg0MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjRhOCArIChwb3J0ICogMHg1MCkpIDogKDB4M2JhMCArIChwb3J0ICogMHg1MCkpKQogI2RlZmluZSBYU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKGZ1bmN0aW9uICogXApAQCAtMTQ5LDIzICsxNjUsMjMgQEAKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxNDA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQogI2RlZmluZSBYU1RPUk1fRTFIT1ZfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyYWI4ICsgKGZ1bmN0aW9uICogMHgyKSkgOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MmMxMCArIChmdW5jdGlvbiAqIDB4MikpIDogMHhmZmZmZmZmZikKICNkZWZpbmUgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjQxOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4M2I3MCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgWFNUT1JNX0ZBSVJORVNTX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjU2OCArIChmdW5jdGlvbiAqIDB4NzApKSA6ICgweDNjNjAgKyBcCi0JKGZ1bmN0aW9uICogMHg3MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjU4OCArIChmdW5jdGlvbiAqIDB4OTApKSA6ICgweDNjODAgKyBcCisJKGZ1bmN0aW9uICogMHg5MCkpKQogI2RlZmluZSBYU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQgXAotCShJU19FMUhfT0ZGU0VUID8gMHgyYWM4IDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/IDB4MmMyMCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGExNDQgKyAocG9ydCAqIDB4MzApKSA6ICgweDE0NTQgKyAocG9ydCAqIDB4MTgpKSkKICNkZWZpbmUgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhjMDAwICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKIAkweDM4KSkgOiAoMHgzMzc4ICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MzgpKSkKICNkZWZpbmUgWFNUT1JNX1JBVEVfU0hBUElOR19QRVJfVk5fVkFSU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI1MjggKyAoZnVuY3Rpb24gKiAweDcwKSkgOiAoMHgzYzIwICsgXAotCShmdW5jdGlvbiAqIDB4NzApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI1NDggKyAoZnVuY3Rpb24gKiAweDkwKSkgOiAoMHgzYzQwICsgXAorCShmdW5jdGlvbiAqIDB4OTApKSkKICNkZWZpbmUgWFNUT1JNX1NQUV9QQUdFX0JBU0VfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDAwICsgKGZ1bmN0aW9uICogMHgxMCkpIDogKDB4MzMyOCArIFwKIAkoZnVuY3Rpb24gKiAweDEwKSkpCkBAIC0xNzgsNyArMTk0LDcgQEAKICNkZWZpbmUgQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUgMHgwCiAKIC8qKgotKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhdG50cyBmb3IgdGhlIEVUSCBmbG93CisqIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGFudHMgZm9yIHRoZSBFVEggZmxvdwogKi8KICNpZmRlZiBfRVZFUkVTVF9NSUNST0NPREUKICNpbmNsdWRlICJtaWNyb2NvZGVfY29uc3RhbnRzLmgiCkBAIC0xOTYsMTggKzIxMiwxOCBAQAogI2RlZmluZSBJUFY2X0hBU0hfVFlQRSAzCiAjZGVmaW5lIFRDUF9JUFY2X0hBU0hfVFlQRSA0CiAKLS8qIEV0aGVybmV0IFJpbmcgcGFybWF0ZXJzICovCisKKy8qIEV0aGVybmV0IFJpbmcgcGFyYW1ldGVycyAqLwogI2RlZmluZSBYX0VUSF9MT0NBTF9SSU5HX1NJWkUgMTMKICNkZWZpbmUgRklSU1RfQkRfSU5fUEtUIDAKICNkZWZpbmUgUEFSU0VfQkRfSU5ERVggMQotI2RlZmluZSBOVU1fT0ZfRVRIX0JEU19JTl9QQUdFIFwKLQkoKFBBR0VfU0laRSkgLyAoU1RSVUNUX1NJWkUoZXRoX3R4X2JkKS84KSkKKyNkZWZpbmUgTlVNX09GX0VUSF9CRFNfSU5fUEFHRSAoKFBBR0VfU0laRSkvKFNUUlVDVF9TSVpFKGV0aF90eF9iZCkvOCkpCiAKIAogLyogUnggcmluZyBwYXJhbXMgKi8KLSNkZWZpbmUgVV9FVEhfTE9DQUxfQkRfUklOR19TSVpFICgxNikKLSNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAoMTIpCi0jZGVmaW5lIFVfRVRIX1NHTF9TSVpFICg4KQorI2RlZmluZSBVX0VUSF9MT0NBTF9CRF9SSU5HX1NJWkUgMTYKKyNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAxMgorI2RlZmluZSBVX0VUSF9TR0xfU0laRSA4CiAKIAogI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0VfTUFTSyBcCkBAIC0yMjksMTUgKzI0NSwxNSBAQAogI2RlZmluZSBVX0VUSF9VTkRFRklORURfUSAweEZGCiAKIC8qIHZhbHVlcyBvZiBjb21tYW5kIElEcyBpbiB0aGUgcmFtcm9kIG1lc3NhZ2UgKi8KLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCAoODApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCAoODUpCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NUQVRfUVVFUlkgKDkwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9VUERBVEUgKDEwMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAoMTA1KQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDICgxMTApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgKDExNSkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgKDEyMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfRk9SV0FSRF9TRVRVUCAoMTI1KQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX1NFVFVQIDgwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCA4NQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZIDkwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1VQREFURSAxMDAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAxMDUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyAxMTAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCAxMTUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgMTIwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0ZPUldBUkRfU0VUVVAgMTI1CiAKIAogLyogY29tbWFuZCB2YWx1ZXMgZm9yIHNldCBtYWMgY29tbWFuZCAqLwpAQCAtMjU0LDEyICsyNzAsMTYgQEAKICNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UxSCAyNQogCiAvKiBNYXhpbWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTEgKDMyKQotI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggKDY0KQorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSAzMgorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggNjQKKworLyogRVRIIFJTUyBtb2RlcyAqLworI2RlZmluZSBFVEhfUlNTX01PREVfRElTQUJMRUQgMAorI2RlZmluZSBFVEhfUlNTX01PREVfUkVHVUxBUiAxCiAKIAogLyoqCi0qIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGF0bnRzIGNvbW1vbiB0byBhbGwgbWljcm9jb2RlIGZsb3dzCisqIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGFudHMgY29tbW9uIHRvIGFsbCBtaWNyb2NvZGUgZmxvd3MKICovCiAKIC8qIENvbm5lY3Rpb24gdHlwZXMgKi8KQEAgLTI3OCwyNSArMjk4LDIyIEBACiAjZGVmaW5lIEVUSF9TVEFURSAoRVRIX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQogI2RlZmluZSBUT0VfU1RBVEUgKFRPRV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKICNkZWZpbmUgUkRNQV9TVEFURSAoUkRNQV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKLSNkZWZpbmUgSVNDU0lfU1RBVEUgXAotCShJU0NTSV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKLSNkZWZpbmUgRkNPRV9TVEFURSAoRkNPRV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKIAogLyogbWljcm9jb2RlIGZpeGVkIHBhZ2UgcGFnZSBzaXplIDRLIChjaGFpbnMgYW5kIHJpbmcgc2VnbWVudHMpICovCi0jZGVmaW5lIE1DX1BBR0VfU0laRSAoNDA5NikKKyNkZWZpbmUgTUNfUEFHRV9TSVpFIDQwOTYKIAogCiAvKiBIb3N0IGNvYWxlc2NpbmcgY29uc3RhbnRzICovCiAKIC8qIGluZGV4IG51bWJlcnMgKi8KLSNkZWZpbmUgSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CisjZGVmaW5lIEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgOAogI2RlZmluZSBIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDgKICNkZWZpbmUgSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CiAjZGVmaW5lIEhDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19VU1RPUk1fU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19DU1RPUk1fU0JfTlVNX0lORElDRVMgNAogCi0vKiBpbmRleCB2YWx1ZXMgLSB3aGljaCBjb3VudGVydG8gdXBkYXRlICovCisvKiBpbmRleCB2YWx1ZXMgLSB3aGljaCBjb3VudGVyIHRvIHVwZGF0ZSAqLwogCiAjZGVmaW5lIEhDX0lOREVYX1VfVE9FX1JYX0NRX0NPTlMgMAogI2RlZmluZSBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TIDEKQEAgLTMzMCwxNiArMzQ3LDE2IEBACiAjZGVmaW5lIEFUVEVOVElPTl9JRCA0CiAKIC8qIG1heCBudW1iZXIgb2Ygc2xvdyBwYXRoIGNvbW1hbmRzIHBlciBwb3J0ICovCi0jZGVmaW5lIE1BWF9SQU1ST0RTX1BFUl9QT1JUICg4KQorI2RlZmluZSBNQVhfUkFNUk9EU19QRVJfUE9SVCA4CiAKIC8qIHZhbHVlcyBmb3IgUlggRVRIIENRRSB0eXBlIGZpZWxkICovCi0jZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfRkFTVFBBVEggKDApCi0jZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfUkFNUk9EICgxKQorI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX0ZBU1RQQVRIIDAKKyNkZWZpbmUgUlhfRVRIX0NRRV9UWVBFX0VUSF9SQU1ST0QgMQogCiAKIC8qKioqIERFRklORVMgRk9SIFRJTUVSUy9DTE9DS1MgUkVTT0xVVElPTlMgKioqKi8KLSNkZWZpbmUgRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IgKDE2MDApCi0jZGVmaW5lIEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUiAoMTAwKQorI2RlZmluZSBFTVVMQVRJT05fRlJFUVVFTkNZX0ZBQ1RPUiAxNjAwCisjZGVmaW5lIEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUiAxMDAKIAogI2RlZmluZSBUSU1FUlNfVElDS19TSVpFX0NISVAgKDFlLTMpCiAjZGVmaW5lIFRJTUVSU19USUNLX1NJWkVfRU1VTCBcCkBAIC0zNTMsMTIgKzM3MCw5IEBACiAjZGVmaW5lIFRTRU1JX0NMSzFfUkVTVUxfRlBHQSBcCiAgKChUU0VNSV9DTEsxX1JFU1VMX0NISVApLyhGUEdBX0ZSRVFVRU5DWV9GQUNUT1IpKQogCi0jZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfQ0hJUCBcCi0gKFRJTUVSU19USUNLX1NJWkVfQ0hJUCkKLSNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9FTVVMIFwKLSAoVElNRVJTX1RJQ0tfU0laRV9FTVVMKQotI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0ZQR0EgXAotIChUSU1FUlNfVElDS19TSVpFX0ZQR0EpCisjZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfQ0hJUCAoVElNRVJTX1RJQ0tfU0laRV9DSElQKQorI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0VNVUwgKFRJTUVSU19USUNLX1NJWkVfRU1VTCkKKyNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9GUEdBIChUSU1FUlNfVElDS19TSVpFX0ZQR0EpCiAKICNkZWZpbmUgWFNFTUlfQ0xLMV9SRVNVTF9DSElQICgxZS0zKQogI2RlZmluZSBYU0VNSV9DTEsxX1JFU1VMX0VNVUwgXApAQCAtMzgzLDEyICszOTcsMTUgQEAKICNkZWZpbmUgWFNUT1JNX0lQX0lEX1JPTExfSEFMRiAweDgwMDAKICNkZWZpbmUgWFNUT1JNX0lQX0lEX1JPTExfQUxMIDAKIAotI2RlZmluZSBGV19MT0dfTElTVF9TSVpFICg1MCkKKyNkZWZpbmUgRldfTE9HX0xJU1RfU0laRSA1MAogCiAjZGVmaW5lIE5VTV9PRl9QUk9UT0NPTFMgNAotI2RlZmluZSBNQVhfQ09TX05VTUJFUiAxNgorI2RlZmluZSBOVU1fT0ZfU0FGQ19CSVRTIDE2CisjZGVmaW5lIE1BWF9DT1NfTlVNQkVSIDQKICNkZWZpbmUgTUFYX1RfU1RBVF9DT1VOVEVSX0lEIDE4CiAjZGVmaW5lIE1BWF9YX1NUQVRfQ09VTlRFUl9JRCAxOAorI2RlZmluZSBNQVhfVV9TVEFUX0NPVU5URVJfSUQgMTgKKwogCiAjZGVmaW5lIFVOS05PV05fQUREUkVTUyAwCiAjZGVmaW5lIFVOSUNBU1RfQUREUkVTUyAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCmluZGV4IGVmZDc2NDQuLjAzYzYyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfaHNpLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMTksMzUgKzExOSwxNSBAQAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX1VNUF9OQ19TSV9FWFRfUEhZX1RZUEVfQkNNNTIyMSAweDAwMDEwMDAwCiAKIAl1MzIgYm9hcmQ7CQkJCQkJLyogMHgxMjQgKi8KLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0sJCSAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9TSElGVAkJICAgIDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX05PTkUJCSAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMCAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDEgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAyRyAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwNEcgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDdHICAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDE1RyAgICAweDAwMDAwMDA2Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMEcgICAgMHgwMDAwMDAwNwotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDNHICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRyAgICAweDAwMDAwMDA5Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMUcgICAgMHgwMDAwMDAwYQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjNHICAgIDB4MDAwMDAwMGIKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDMzRyAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFUMTEwMSAgICAgMHgwMDAwMDAwZAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExRVQxMjAxICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMUExMTMzRyAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFFQTEyMzNHICAgMHgwMDAwMDAxMAotCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVkVSX01BU0sJCSAgICAweGZmZmYwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVkVSX1NISUZUCQkgICAgMTYKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfTUFTSwkgICAgMHhmMDAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01BSk9SX1ZFUl9TSElGVAkgICAgMjgKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfTUFTSwkgICAgMHgwZjAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9TSElGVAkgICAgMjQKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfTUFTSwkJICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfTUFTSwkJICAgIDB4MDBGRjAwMDAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfU0hJRlQJCSAgICAxNgogCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUFKT1JfVkVSX01BU0sJICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfU0hJRlQJICAgIDI0CisKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfTUFTSwkgICAgMHhGMDAwMDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9TSElGVAkgICAgMjgKKwogCXUzMiByZXNlcnZlZDsJCQkJCQkvKiAweDEyOCAqLwogCiB9OwpAQCAtMTk4LDM2ICsxNzgsMjEgQEAKIAl1MzIgcmRtYV9tYWNfbG93ZXI7CiAKIAl1MzIgc2VyZGVzX2NvbmZpZzsKLQkvKiBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KLSNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfTUFTSyAweGZmZmYwMDAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19UWF9EUlZfUFJFX0VNUEhBU0lTX1NISUZUICAxNgorI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLCSAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQJICAgICAgMAogCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX01BU0sgICAgMHgwMDAwZmZmZgotI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCAgIDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfTUFTSwkgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUCSAgICAgIDE2CiAKLQl1MTYgc2VyZGVzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNbMTZdOwotCXUxNiBzZXJkZXNfcnhfZHJpdmVyX2VxdWFsaXplclsxNl07CiAKLQl1MzIgeGd4c19jb25maWdfbGFuZTA7Ci0JdTMyIHhneHNfY29uZmlnX2xhbmUxOwotCXUzMiB4Z3hzX2NvbmZpZ19sYW5lMjsKLQl1MzIgeGd4c19jb25maWdfbGFuZTM7Ci0JLyogZm9yIGV4dGVybmFsIFBIWSwgb3IgZm9yY2VkIG1vZGUgb3IgZHVyaW5nIEFOICovCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLICAgMHhmZmZmMDAwMAotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQgIDE2CisJdTMyIFJlc2VydmVkMFsxNl07CQkJCSAgICAvKiAweDE1OCAqLwogCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLCSAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCAgICAgMAorCS8qICBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KKwl1MTYgeGd4c19jb25maWdfcnhbNF07CQkJCSAgICAvKiAweDE5OCAqLwogCi0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMFsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMVsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMlsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lM1sxNl07CisJdTE2IHhneHNfY29uZmlnX3R4WzRdOwkJCQkgICAgLyogMHgxQTAgKi8KIAotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTBbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTFbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTJbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTNbMTZdOworCXUzMiBSZXNlcnZlZDFbNjRdOwkJCQkgICAgLyogMHgxQTggKi8KIAogCXUzMiBsYW5lX2NvbmZpZzsKICNkZWZpbmUgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNLCQkgICAgMHgwMDAwZmZmZgpAQCAtMjY1LDcgKzIzMCw3IEBACiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMJICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNQkgICAgMHgwMDAwMDQwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2CSAgICAweDAwMDAwNTAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgyNzYJICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNgkgICAgMHgwMDAwMDYwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxCSAgICAweDAwMDAwNzAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEJICAgIDB4MDAwMDA4MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRQkgICAgMHgwMDAwZmQwMApAQCAtMzE5LDYgKzI4NCwxMiBAQAogCiAJdTMyIGNvbmZpZzsJCQkJCQkvKiAweDQ1MCAqLwogI2RlZmluZSBTSEFSRURfRkVBVFVSRV9CTUNfRUNIT19NT0RFX0VOIAkgICAgMHgwMDAwMDAwMQorCisJLyogIFVzZSB0aGUgdmFsdWVzIGZyb20gb3B0aW9ucyA0NyBhbmQgNDggaW5zdGVhZCBvZiB0aGUgSFcgZGVmYXVsdAorCSAgdmFsdWVzICovCisjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRElTQUJMRUQgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0ZFQVRfQ0ZHX09WRVJSSURFX1BSRUVNUEhBU0lTX0NGR19FTkFCTEVEICAgICAgMHgwMDAwMDAwMgorCiAjZGVmaW5lIFNIQVJFRF9GRUFUVVJFX01GX01PREVfRElTQUJMRUQgCSAgICAweDAwMDAwMTAwCiAKIH07CkBAIC0zNzIsNiArMzQzLDExIEBACiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9NQkFfRU5BQkxFRAkJICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgUE9SVF9GRUFUVVJFX01GV19FTkFCTEVECQkgICAgMHgwNDAwMDAwMAogCisJLyogIENoZWNrIHRoZSBvcHRpYyB2ZW5kb3IgdmlhIGkyYyBiZWZvcmUgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBieQorCSAgU1cgKi8KKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVEIAkgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9FTkFCTEVECQkgICAgICAweDA4MDAwMDAwCisKIAl1MzIgd29sX2NvbmZpZzsKIAkvKiBEZWZhdWx0IGlzIHVzZWQgd2hlbiBkcml2ZXIgc2V0cyB0byAiYXV0byIgbW9kZSAqLwogI2RlZmluZSBQT1JUX0ZFQVRVUkVfV09MX0RFRkFVTFRfTUFTSwkJICAgIDB4MDAwMDAwMDMKQEAgLTUxMiw3ICs0ODgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERldmljZSBJbmZvcm1hdGlvbgkJCQkJCQkgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAvKiBzaXplICovCitzdHJ1Y3Qgc2htX2Rldl9pbmZvIHsJCQkJCQkgICAgLyogc2l6ZSAqLwogCiAJdTMyICAgIGJjX3JldjsgLyogOCBiaXRzIGVhY2g6IG1ham9yLCBtaW5vciwgYnVpbGQgKi8JICAgICAgIC8qIDQgKi8KIApAQCAtNjQxLDcgKzYxNywxMCBAQAogCiAJdTMyIHBvcnRfc3R4OwogCi0JdTMyIHJlc2VydmVkWzJdOworCXUzMiBzdGF0X25pZ190aW1lcjsKKworCS8qIE1DUCBmaXJtd2FyZSBkb2VzIG5vdCB1c2UgdGhpcyBmaWVsZCAqLworCXUzMiBleHRfcGh5X2Z3X3ZlcnNpb247CiAKIH07CiAKQEAgLTgyNywxMSArODA2LDcgQEAKIAogCXN0cnVjdCBzaGFyZWRfbWZfY2ZnCXNoYXJlZF9tZl9jb25maWc7CiAJc3RydWN0IHBvcnRfbWZfY2ZnCXBvcnRfbWZfY29uZmlnW1BPUlRfTUFYXTsKLSNpZiBkZWZpbmVkKGI3MTApCi0Jc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxX0ZVTkNfTUFYXTsKLSNlbHNlCiAJc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxSF9GVU5DX01BWF07Ci0jZW5kaWYKIAogfTsKIApAQCAtODYyLDcgKzgzNyw3IEBACiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfQUNUSVZFX01GV19OT05FCSAgICAweDAwMDAwMWMwCiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfQUNUSVZFX01GV19NQVNLCSAgICAweDAwMDAwMWMwCiAKLQlzdHJ1Y3QgZGV2X2luZm8gCWRldl9pbmZvOwkJIC8qIDB4OCAgICAgKDB4NDM4KSAqLworCXN0cnVjdCBzaG1fZGV2X2luZm8JZGV2X2luZm87CQkgLyogMHg4ICAgICAoMHg0MzgpICovCiAKIAl1OAkJCXJlc2VydmVkWzUyKlBPUlRfTUFYXTsKIApAQCAtMTIxMiw4ICsxMTg3LDkgQEAKIAogCiAjZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk0Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk1Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQkxCisjZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk4CisjZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQk1MworI2RlZmluZSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OIAkJMAogI2RlZmluZSBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTCQkJMQogCiAKQEAgLTEyMjEsMTggKzExOTcsMTIgQEAKICAqIGF0dGVudGlvbiBiaXRzCiAgKi8KIHN0cnVjdCBhdHRlbl9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MzIgYXR0bl9iaXRzOwotCXUzMiBhdHRuX2JpdHNfYWNrOwotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBhdHRuX2JpdHNfaW5kZXg7Ci0JdTggcmVzZXJ2ZWQwOwotCXU4IHN0YXR1c19ibG9ja19pZDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCV9fbGUzMiBhdHRuX2JpdHM7CisJX19sZTMyIGF0dG5fYml0c19hY2s7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwogCXU4IHJlc2VydmVkMDsKLQl1MTYgYXR0bl9iaXRzX2luZGV4OwotI2VuZGlmCi0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMTYgYXR0bl9iaXRzX2luZGV4OworCV9fbGUzMiByZXNlcnZlZDE7CiB9OwogCiAKQEAgLTEzMDUsNyArMTI3NSw3IEBACiAgKiBQYXJzZXIgcGFyc2luZyBmbGFncyBmaWVsZAogICovCiBzdHJ1Y3QgcGFyc2luZ19mbGFncyB7Ci0JdTE2IGZsYWdzOworCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUEFSU0lOR19GTEFHU19FVEhFUk5FVF9BRERSRVNTX1RZUEUgKDB4MTw8MCkKICNkZWZpbmUgUEFSU0lOR19GTEFHU19FVEhFUk5FVF9BRERSRVNTX1RZUEVfU0hJRlQgMAogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX1ZMQU4gKDB4MTw8MSkKQEAgLTEzMzYsOCArMTMwNiw4IEBACiAKIAogc3RydWN0IHJlZ3BhaXIgewotCXUzMiBsbzsKLQl1MzIgaGk7CisJX19sZTMyIGxvOworCV9fbGUzMiBoaTsKIH07CiAKIApAQCAtMTQzNCw4ICsxNDA0LDEwIEBACiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAyCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHhGPDw0KQotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyAoMHgxPDw0KQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTX1NISUZUIDQKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHg3PDw1KQorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDUKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7CiAJdTggY2xpZW50SWQ7CiAJdTggc2JfaW5kZXhfbnVtYmVyczsKQEAgLTE0NjAsMTQgKzE0MzIsMTggQEAKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDQpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgNAorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweDc8PDUpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNQogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTE2IGJkX2J1ZmZfc2l6ZTsKLQl1MTYgbWNfYWxpZ25tZW50X3NpemU7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOworCXU4IG1jX2FsaWdubWVudF9sb2dfc2l6ZTsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBtY19hbGlnbm1lbnRfc2l6ZTsKKwl1OCBtY19hbGlnbm1lbnRfbG9nX3NpemU7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOwogCXUxNiBiZF9idWZmX3NpemU7CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKQEAgLTE0NzksMTMgKzE0NTUsNyBAQAogCXU4IF9fbG9jYWxfYmRfcHJvZDsKIAl1OCBfX2xvY2FsX3NnZV9wcm9kOwogI2VuZGlmCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IF9fYmRfY29uczsKLQl1MTYgX19zZ2VfY29uczsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBfX3NnZV9jb25zOwotCXUxNiBfX2JkX2NvbnM7Ci0jZW5kaWYKKwl1MzIgcmVzZXJ2ZWQ7CiAJdTMyIGJkX3BhZ2VfYmFzZV9sbzsKIAl1MzIgYmRfcGFnZV9iYXNlX2hpOwogCXUzMiBzZ2VfcGFnZV9iYXNlX2xvOwpAQCAtMTQ5NiwxNiArMTQ2NiwxNiBAQAogICogVGhlIGV0aCBSeCBCdWZmZXIgRGVzY3JpcHRvcgogICovCiBzdHJ1Y3QgZXRoX3J4X2JkIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKIH07CiAKIC8qCiAgKiBUaGUgZXRoIFJ4IFNHRSBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfcnhfc2dlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKIH07CiAKIC8qCkBAIC0xNjk3LDcgKzE2NjcsNyBAQAogfTsKIAogLyoKLSAqIFRoZSBldGggYWdncmVnYXRpdmUgY29udGV4dCBzZWN0aW9uIG9mIFRzdG9ybQorICogVGhlIGV0aCBleHRyYSBhZ2dyZWdhdGl2ZSBjb250ZXh0IHNlY3Rpb24gb2YgVHN0b3JtCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX2V4dHJhX2FnX2NvbnRleHRfc2VjdGlvbiB7CiAJdTMyIF9fYWdnX3ZhbDE7CkBAIC0xOTA4LDExICsxODc4LDExIEBACiAgKiBUaGUgZXRoIFR4IEJ1ZmZlciBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfdHhfYmQgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOwotCXUxNiBuYmQ7Ci0JdTE2IG5ieXRlczsKLQl1MTYgdmxhbjsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKKwlfX2xlMTYgbmJkOworCV9fbGUxNiBuYnl0ZXM7CisJX19sZTE2IHZsYW47CiAJc3RydWN0IGV0aF90eF9iZF9mbGFncyBiZF9mbGFnczsKIAl1OCBnZW5lcmFsX2RhdGE7CiAjZGVmaW5lIEVUSF9UWF9CRF9IRFJfTkJEUyAoMHgzRjw8MCkKQEAgLTE5NTUsMTEgKzE5MjUsMTEgQEAKICNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NXUl9GTEdfU0hJRlQgNwogCXU4IGlwX2hsZW47CiAJczggY3Nfb2Zmc2V0OwotCXUxNiB0b3RhbF9obGVuOwotCXUxNiBsc29fbXNzOwotCXUxNiB0Y3BfcHNldWRvX2NzdW07Ci0JdTE2IGlwX2lkOwotCXUzMiB0Y3Bfc2VuZF9zZXE7CisJX19sZTE2IHRvdGFsX2hsZW47CisJX19sZTE2IGxzb19tc3M7CisJX19sZTE2IHRjcF9wc2V1ZG9fY3N1bTsKKwlfX2xlMTYgaXBfaWQ7CisJX19sZTMyIHRjcF9zZW5kX3NlcTsKIH07CiAKIC8qCkBAIC0yMDc1LDQ0ICsyMDQ1LDQ0IEBACiAgKiB1c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiB4c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB4c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiB0c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCkBAIC0yMTMxLDIyICsyMTAxLDIyIEBACiAgKiB1c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB1c3Rvcm1fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCkBAIC0yMTYyLDkgKzIxMzIsOSBAQAogICogVGhlIGRhdGEgZm9yIFJTUyBzZXR1cCByYW1yb2QKICAqLwogc3RydWN0IGV0aF9jbGllbnRfc2V0dXBfcmFtcm9kX2RhdGEgewotCXUzMiBjbGllbnRfaWRfNWI7Ci0JdTggaXNfcmRtYV8xYjsKLQl1OCByZXNlcnZlZDA7CisJdTMyIGNsaWVudF9pZDsKKwl1OCBpc19yZG1hOworCXU4IGlzX2Zjb2U7CiAJdTE2IHJlc2VydmVkMTsKIH07CiAKQEAgLTIyMTIsMTIgKzIxODIsMTIgQEAKICNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfWFNVTV9OT19WQUxJREFUSU9OX0ZMR19TSElGVCA3CiAJdTggcGxhY2VtZW50X29mZnNldDsKIAl1OCBxdWV1ZV9pbmRleDsKLQl1MzIgcnNzX2hhc2hfcmVzdWx0OwotCXUxNiB2bGFuX3RhZzsKLQl1MTYgcGt0X2xlbjsKLQl1MTYgbGVuX29uX2JkOworCV9fbGUzMiByc3NfaGFzaF9yZXN1bHQ7CisJX19sZTE2IHZsYW5fdGFnOworCV9fbGUxNiBwa3RfbGVuOworCV9fbGUxNiBsZW5fb25fYmQ7CiAJc3RydWN0IHBhcnNpbmdfZmxhZ3MgcGFyc19mbGFnczsKLQl1MTYgc2dsWzhdOworCV9fbGUxNiBzZ2xbOF07CiB9OwogCiAKQEAgLTIyMjUsNyArMjE5NSw3IEBACiAgKiBUaGUgZGF0YSBmb3IgUlNTIHNldHVwIHJhbXJvZAogICovCiBzdHJ1Y3QgZXRoX2hhbHRfcmFtcm9kX2RhdGEgewotCXUzMiBjbGllbnRfaWRfNWI7CisJdTMyIGNsaWVudF9pZDsKIAl1MzIgcmVzZXJ2ZWQwOwogfTsKIApAQCAtMjIzNiwxMSArMjIwNiwxMSBAQAogc3RydWN0IGV0aF9xdWVyeV9yYW1yb2RfZGF0YSB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTggcmVzZXJ2ZWQwOwotCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCBjb2xsZWN0X3BvcnQ7CiAJdTE2IGRydl9jb3VudGVyOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGRydl9jb3VudGVyOwotCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCBjb2xsZWN0X3BvcnQ7CiAJdTggcmVzZXJ2ZWQwOwogI2VuZGlmCiAJdTMyIGN0cl9pZF92ZWN0b3I7CkBAIC0yMjUxLDggKzIyMjEsOCBAQAogICogUGxhY2UgaG9sZGVyIGZvciByYW1yb2RzIHByb3RvY29sIHNwZWNpZmljIGRhdGEKICAqLwogc3RydWN0IHJhbXJvZF9kYXRhIHsKLQl1MzIgZGF0YV9sbzsKLQl1MzIgZGF0YV9oaTsKKwlfX2xlMzIgZGF0YV9sbzsKKwlfX2xlMzIgZGF0YV9oaTsKIH07CiAKIC8qCkBAIC0yMjY0LDE2ICsyMjM0LDYgQEAKIAogCiAvKgotICogUnggTGFzdCBCRCBpbiBwYWdlIChpbiBFVEgpCi0gKi8KLXN0cnVjdCBldGhfcnhfYmRfbmV4dF9wYWdlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1OCByZXNlcnZlZFs4XTsKLX07Ci0KLQotLyoKICAqIEV0aCBSeCBDcWUgc3RydWN0dXJlLSBnZW5lcmFsIHN0cnVjdHVyZSBmb3IgcmFtcm9kcwogICovCiBzdHJ1Y3QgY29tbW9uX3JhbXJvZF9ldGhfcnhfY3FlIHsKQEAgLTIyODIsMjQgKzIyNDIsMjQgQEAKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEVfU0hJRlQgMAogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwICgweDdGPDwxKQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDEKLQl1OCBjb25uX3R5cGVfM2I7Ci0JdTE2IHJlc2VydmVkMTsKLQl1MzIgY29ubl9hbmRfY21kX2RhdGE7CisJdTggY29ubl90eXBlOworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEICgweEZGRkZGRjw8MCkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NJRF9TSElGVCAwCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ01EX0lEX1NISUZUIDI0CiAJc3RydWN0IHJhbXJvZF9kYXRhIHByb3RvY29sX2RhdGE7Ci0JdTMyIHJlc2VydmVkMls0XTsKKwlfX2xlMzIgcmVzZXJ2ZWQyWzRdOwogfTsKIAogLyoKICAqIFJ4IExhc3QgQ1FFIGluIHBhZ2UgKGluIEVUSCkKICAqLwogc3RydWN0IGV0aF9yeF9jcWVfbmV4dF9wYWdlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1MzIgcmVzZXJ2ZWRbNl07CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CisJX19sZTMyIHJlc2VydmVkWzZdOwogfTsKIAogLyoKQEAgLTIzMTYsMTcgKzIyNzYsMTcgQEAKICAqIGNvbW1vbiBkYXRhIGZvciBhbGwgcHJvdG9jb2xzCiAgKi8KIHN0cnVjdCBzcGVfaGRyIHsKLQl1MzIgY29ubl9hbmRfY21kX2RhdGE7CisJX19sZTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBTUEVfSERSX0NJRCAoMHhGRkZGRkY8PDApCiAjZGVmaW5lIFNQRV9IRFJfQ0lEX1NISUZUIDAKICNkZWZpbmUgU1BFX0hEUl9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBTUEVfSERSX0NNRF9JRF9TSElGVCAyNAotCXUxNiB0eXBlOworCV9fbGUxNiB0eXBlOwogI2RlZmluZSBTUEVfSERSX0NPTk5fVFlQRSAoMHhGRjw8MCkKICNkZWZpbmUgU1BFX0hEUl9DT05OX1RZUEVfU0hJRlQgMAogI2RlZmluZSBTUEVfSERSX0NPTU1PTl9SQU1ST0QgKDB4RkY8PDgpCiAjZGVmaW5lIFNQRV9IRFJfQ09NTU9OX1JBTVJPRF9TSElGVCA4Ci0JdTE2IHJlc2VydmVkOworCV9fbGUxNiByZXNlcnZlZDsKIH07CiAKIC8qCkBAIC0yMzU1LDkgKzIzMTUsOSBAQAogICogZG9vcmJlbGwgZGF0YSBpbiBob3N0IG1lbW9yeQogICovCiBzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgewotCXUzMiBwYWNrZXRzX3Byb2Q7Ci0JdTE2IGJkc19wcm9kOwotCXUxNiByZXNlcnZlZDsKKwlfX2xlMzIgcGFja2V0c19wcm9kOworCV9fbGUxNiBiZHNfcHJvZDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9OwogCiAKQEAgLTIzNzcsMTQgKzIzMzcsMTYgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFlfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUgKDB4MTw8NCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEVfU0hJRlQgNAotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERSAoMHg3PDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA4CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU0gKDB4MTw8OSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTV9TSElGVCA5CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRjw8MTApCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMAogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGNvbmZpZ19mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgKDB4MTw8MCkKQEAgLTIzOTUsMTQgKzIzNTcsMTYgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFlfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUgKDB4MTw8NCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEVfU0hJRlQgNAotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERSAoMHg3PDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA4CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU0gKDB4MTw8OSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTV9TSElGVCA5CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRjw8MTApCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMAogCXU4IHJzc19yZXN1bHRfbWFzazsKIAl1OCBsZWFkaW5nX2NsaWVudF9pZDsKICNlbmRpZgpAQCAtMjQyMiw3ICsyMzg2LDcgQEAKICAqIE1BQyBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiBjb21tYW5kIGhlYWRlcgogICovCiBzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25faGRyIHsKLQl1OCBsZW5ndGhfNmI7CisJdTggbGVuZ3RoOwogCXU4IG9mZnNldDsKIAl1MTYgY2xpZW50X2lkOwogCXUzMiByZXNlcnZlZDE7CkBAIC0yNDMyLDEwICsyMzk2LDEwIEBACiAgKiBNQUMgYWRkcmVzcyBpbiBsaXN0IGZvciByYW1yb2QKICAqLwogc3RydWN0IHRzdG9ybV9jYW1fZW50cnkgewotCXUxNiBsc2JfbWFjX2FkZHI7Ci0JdTE2IG1pZGRsZV9tYWNfYWRkcjsKLQl1MTYgbXNiX21hY19hZGRyOwotCXUxNiBmbGFnczsKKwlfX2xlMTYgbHNiX21hY19hZGRyOworCV9fbGUxNiBtaWRkbGVfbWFjX2FkZHI7CisJX19sZTE2IG1zYl9tYWNfYWRkcjsKKwlfX2xlMTYgZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9DQU1fRU5UUllfUE9SVF9JRCAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1BPUlRfSURfU0hJRlQgMAogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1JTUlZWQUwwICgweDc8PDEpCkBAIC0yNDg0LDExICsyNDQ4LDExIEBACiAgKiBNQUMgYWRkcmVzcyBpbiBsaXN0IGZvciByYW1yb2QKICAqLwogc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2VudHJ5X2UxaCB7Ci0JdTE2IGxzYl9tYWNfYWRkcjsKLQl1MTYgbWlkZGxlX21hY19hZGRyOwotCXUxNiBtc2JfbWFjX2FkZHI7Ci0JdTE2IHZsYW5faWQ7Ci0JdTE2IGUxaG92X2lkOworCV9fbGUxNiBsc2JfbWFjX2FkZHI7CisJX19sZTE2IG1pZGRsZV9tYWNfYWRkcjsKKwlfX2xlMTYgbXNiX21hY19hZGRyOworCV9fbGUxNiB2bGFuX2lkOworCV9fbGUxNiBlMWhvdl9pZDsKIAl1OCBjbGllbnRfaWQ7CiAJdTggZmxhZ3M7CiAjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9QT1JUICgweDE8PDApCkBAIC0yNTQ0LDI0ICsyNTA4LDI4IEBACiAjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMSAoMHhGRkY8PDQpCiAjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMV9TSElGVCA0CiAJdTE2IGNvbmZpZ19mbGFnczsKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEUgKDB4MTw8MCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEVfU0hJRlQgMAotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDEKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwyKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDIKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweDFGRkY8PDMpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAzCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEUgKDB4MTw8MCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRV9TSElGVCAwCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFICgweDE8PDEpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFX1NISUZUIDEKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDIpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAyCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHhGRkY8PDQpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgY29uZmlnX2ZsYWdzOwotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRSAoMHgxPDwwKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRV9TSElGVCAwCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwxKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDIpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMgotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4MUZGRjw8MykKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDMKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRSAoMHgxPDwwKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFX1NISUZUIDAKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEUgKDB4MTw8MSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEVfU0hJRlQgMQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MikKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKIAl1MTYgZHJvcF9mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX0lQX0NTX0VSUl9TSElGVCAwCkBAIC0yNTk0LDI4ICsyNTYyLDcgQEAKIAogCiAvKgotICogVGhyZWUgUlggcHJvZHVjZXJzIGZvciBFVEgKLSAqLwotc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgYmRfcHJvZDsKLQl1MTYgY3FlX3Byb2Q7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgY3FlX3Byb2Q7Ci0JdTE2IGJkX3Byb2Q7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTE2IHNnZV9wcm9kOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IHNnZV9wcm9kOwotCXUxNiByZXNlcnZlZDsKLSNlbmRpZgotfTsKLQotCi0vKgotICogY29tbW9uIGZsYWcgdG8gaW5kaWNhdGUgZXhpc3RlbmNlIG9mIFRQQS4KKyAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0YW5jZSBvZiBUUEEuCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX3RwYV9leGlzdCB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCkBAIC0yNjMyLDIxICsyNTc5LDc5IEBACiAKIAogLyoKKyAqIHJ4IHJpbmdzIHBhdXNlIGRhdGEgZm9yIEUxaCBvbmx5CisgKi8KK3N0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfdGhyX2xvdzsKKwl1MTYgY3FlX3Rocl9sb3c7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Rocl9sb3c7CisJdTE2IGJkX3Rocl9sb3c7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgY29zOworCXUxNiBzZ2VfdGhyX2xvdzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfdGhyX2xvdzsKKwl1MTYgY29zOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX3Rocl9oaWdoOworCXUxNiBjcWVfdGhyX2hpZ2g7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Rocl9oaWdoOworCXUxNiBiZF90aHJfaGlnaDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByZXNlcnZlZDA7CisJdTE2IHNnZV90aHJfaGlnaDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfdGhyX2hpZ2g7CisJdTE2IHJlc2VydmVkMDsKKyNlbmRpZgorfTsKKworCisvKgorICogVGhyZWUgUlggcHJvZHVjZXJzIGZvciBFVEgKKyAqLworc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfcHJvZDsKKwl1MTYgY3FlX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Byb2Q7CisJdTE2IGJkX3Byb2Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcmVzZXJ2ZWQ7CisJdTE2IHNnZV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHNnZV9wcm9kOworCXUxNiByZXNlcnZlZDsKKyNlbmRpZgorfTsKKworCisvKgogICogcGVyLXBvcnQgU0FGQyBkZW1vIHZhcmlhYmxlcwogICovCiBzdHJ1Y3QgY21uZ19mbGFnc19wZXJfcG9ydCB7CiAJdTggY29uX251bWJlcltOVU1fT0ZfUFJPVE9DT0xTXTsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1OCBmYWlybmVzc19lbmFibGU7Ci0JdTggcmF0ZV9zaGFwaW5nX2VuYWJsZTsKLQl1OCBjbW5nX3Byb3RvY29sX2VuYWJsZTsKLQl1OCBjbW5nX3ZuX2VuYWJsZTsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IGNtbmdfdm5fZW5hYmxlOwotCXU4IGNtbmdfcHJvdG9jb2xfZW5hYmxlOwotCXU4IHJhdGVfc2hhcGluZ19lbmFibGU7Ci0JdTggZmFpcm5lc3NfZW5hYmxlOwotI2VuZGlmCisJdTMyIGNtbmdfZW5hYmxlczsKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTiAoMHgxPDwwKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOX1NISUZUIDAKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk4gKDB4MTw8MSkKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk5fU0hJRlQgMQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1BST1RPQ09MICgweDE8PDIpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfUFJPVE9DT0xfU0hJRlQgMgorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19QUk9UT0NPTCAoMHgxPDwzKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19QUk9UT0NPTF9TSElGVCAzCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfQ09TICgweDE8PDQpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfQ09TX1NISUZUIDQKKyNkZWZpbmUgX19DTU5HX0ZMQUdTX1BFUl9QT1JUX1JFU0VSVkVEMCAoMHg3RkZGRkZGPDw1KQorI2RlZmluZSBfX0NNTkdfRkxBR1NfUEVSX1BPUlRfUkVTRVJWRUQwX1NISUZUIDUKIH07CiAKIApAQCAtMjY3NCwxNSArMjY3OSwxNSBAQAogICovCiBzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBfX3Jlc2VydmVkMDsKLQl1OCBjdXJfY29zX3R5cGVzOworCXUxNiBfX3Jlc2VydmVkMTsKKwl1OCBfX3Jlc2VydmVkMDsKIAl1OCBzYWZjX3RpbWVvdXRfdXNlYzsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXU4IHNhZmNfdGltZW91dF91c2VjOwotCXU4IGN1cl9jb3NfdHlwZXM7Ci0JdTE2IF9fcmVzZXJ2ZWQwOworCXU4IF9fcmVzZXJ2ZWQwOworCXUxNiBfX3Jlc2VydmVkMTsKICNlbmRpZgotCXU4IGNvc190b19wcm90b2NvbFtNQVhfQ09TX05VTUJFUl07CisJdTE2IGNvc190b19wYXVzZV9tYXNrW05VTV9PRl9TQUZDX0JJVFNdOwogfTsKIAogCkBAIC0yNzAyLDE2ICsyNzA3LDE2IEBACiAgKi8KIHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyB7CiAJc3RydWN0IHJlZ3BhaXIgdG90YWxfc2VudF9ieXRlczsKLQl1MzIgdG90YWxfc2VudF9wa3RzOwotCXUzMiB1bmljYXN0X3BrdHNfc2VudDsKKwlfX2xlMzIgdG90YWxfc2VudF9wa3RzOworCV9fbGUzMiB1bmljYXN0X3BrdHNfc2VudDsKIAlzdHJ1Y3QgcmVncGFpciB1bmljYXN0X2J5dGVzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgbXVsdGljYXN0X2J5dGVzX3NlbnQ7Ci0JdTMyIG11bHRpY2FzdF9wa3RzX3NlbnQ7Ci0JdTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIG11bHRpY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgYnJvYWRjYXN0X2J5dGVzX3NlbnQ7Ci0JdTE2IHN0YXRzX2NvdW50ZXI7Ci0JdTE2IHJlc2VydmVkMDsKLQl1MzIgcmVzZXJ2ZWQxOworCV9fbGUxNiBzdGF0c19jb3VudGVyOworCV9fbGUxNiByZXNlcnZlZDA7CisJX19sZTMyIHJlc2VydmVkMTsKIH07CiAKIApAQCAtMjcyNywxMCArMjczMiwxMCBAQAogICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBUc3Rvcm0gKHBlciBwb3J0KQogICovCiBzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzIHsKLQl1MzIgbWFjX2ZpbHRlcl9kaXNjYXJkOwotCXUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7Ci0JdTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOwotCXUzMiBtYWNfZGlzY2FyZDsKKwlfX2xlMzIgbWFjX2ZpbHRlcl9kaXNjYXJkOworCV9fbGUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7CisJX19sZTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOworCV9fbGUzMiBtYWNfZGlzY2FyZDsKIH07CiAKIApAQCAtMjc0MywxNyArMjc0OCwxNyBAQAogCXN0cnVjdCByZWdwYWlyIHJjdl9icm9hZGNhc3RfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X211bHRpY2FzdF9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfZXJyb3JfYnl0ZXM7Ci0JdTMyIGNoZWNrc3VtX2Rpc2NhcmQ7Ci0JdTMyIHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkOwotCXUzMiB0b3RhbF9yY3ZfcGt0czsKLQl1MzIgcmN2X3VuaWNhc3RfcGt0czsKLQl1MzIgcmN2X2Jyb2FkY2FzdF9wa3RzOwotCXUzMiByY3ZfbXVsdGljYXN0X3BrdHM7Ci0JdTMyIG5vX2J1ZmZfZGlzY2FyZDsKLQl1MzIgdHRsMF9kaXNjYXJkOwotCXUxNiBzdGF0c19jb3VudGVyOwotCXUxNiByZXNlcnZlZDA7Ci0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMzIgY2hlY2tzdW1fZGlzY2FyZDsKKwlfX2xlMzIgcGFja2V0c190b29fYmlnX2Rpc2NhcmQ7CisJX19sZTMyIHRvdGFsX3Jjdl9wa3RzOworCV9fbGUzMiByY3ZfdW5pY2FzdF9wa3RzOworCV9fbGUzMiByY3ZfYnJvYWRjYXN0X3BrdHM7CisJX19sZTMyIHJjdl9tdWx0aWNhc3RfcGt0czsKKwlfX2xlMzIgbm9fYnVmZl9kaXNjYXJkOworCV9fbGUzMiB0dGwwX2Rpc2NhcmQ7CisJX19sZTE2IHN0YXRzX2NvdW50ZXI7CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfTsKIAogLyoKQEAgLTI3NjUsMTEgKzI3NzAsMzMgQEAKIH07CiAKIC8qCisgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFVzdG9ybSAocGVyIGNsaWVudCkKKyAqLworc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIHsKKwlzdHJ1Y3QgcmVncGFpciB1Y2FzdF9ub19idWZmX2J5dGVzOworCXN0cnVjdCByZWdwYWlyIG1jYXN0X25vX2J1ZmZfYnl0ZXM7CisJc3RydWN0IHJlZ3BhaXIgYmNhc3Rfbm9fYnVmZl9ieXRlczsKKwlfX2xlMzIgdWNhc3Rfbm9fYnVmZl9wa3RzOworCV9fbGUzMiBtY2FzdF9ub19idWZmX3BrdHM7CisJX19sZTMyIGJjYXN0X25vX2J1ZmZfcGt0czsKKwlfX2xlMTYgc3RhdHNfY291bnRlcjsKKwlfX2xlMTYgcmVzZXJ2ZWQwOworfTsKKworLyoKKyAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVXN0b3JtCisgKi8KK3N0cnVjdCB1c3Rvcm1fY29tbW9uX3N0YXRzIHsKKyBzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgY2xpZW50X3N0YXRpc3RpY3NbTUFYX1VfU1RBVF9DT1VOVEVSX0lEXTsKK307CisKKy8qCiAgKiBFdGggc3RhdGlzdGljcyBxdWVyeSBzdHJ1Y3R1cmUgZm9yIHRoZSBldGhfc3RhdHNfcXVlcnkgcmFtcm9kCiAgKi8KIHN0cnVjdCBldGhfc3RhdHNfcXVlcnkgewogCXN0cnVjdCB4c3Rvcm1fY29tbW9uX3N0YXRzIHhzdG9ybV9jb21tb247CiAJc3RydWN0IHRzdG9ybV9jb21tb25fc3RhdHMgdHN0b3JtX2NvbW1vbjsKKwlzdHJ1Y3QgdXN0b3JtX2NvbW1vbl9zdGF0cyB1c3Rvcm1fY29tbW9uOwogfTsKIAogCkBAIC0yNzc3LDYgKzI4MDQsNyBAQAogICogcGVyLXZuaWMgZmFpcm5lc3MgdmFyaWFibGVzCiAgKi8KIHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biB7CisJdTMyIGNvc19jcmVkaXRfZGVsdGFbTUFYX0NPU19OVU1CRVJdOwogCXUzMiBwcm90b2NvbF9jcmVkaXRfZGVsdGFbTlVNX09GX1BST1RPQ09MU107CiAJdTMyIHZuX2NyZWRpdF9kZWx0YTsKIAl1MzIgX19yZXNlcnZlZDA7CkBAIC0yNzg4LDEzICsyODE2LDE1IEBACiAgKi8KIHN0cnVjdCBmd192ZXJzaW9uIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcGF0Y2g7Ci0JdTggcHJpbWFyeTsKLQl1OCBjbGllbnQ7CisJdTggZW5naW5lZXJpbmc7CisJdTggcmV2aXNpb247CisJdTggbWlub3I7CisJdTggbWFqb3I7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1OCBjbGllbnQ7Ci0JdTggcHJpbWFyeTsKLQl1MTYgcGF0Y2g7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcmV2aXNpb247CisJdTggZW5naW5lZXJpbmc7CiAjZW5kaWYKIAl1MzIgZmxhZ3M7CiAjZGVmaW5lIEZXX1ZFUlNJT05fT1BUSU1JWkVEICgweDE8PDApCkBAIC0yODEyLDkgKzI4NDIsMTAgQEAKICAqIEZXIHZlcnNpb24gc3RvcmVkIGluIGZpcnN0IGxpbmUgb2YgcHJhbQogICovCiBzdHJ1Y3QgcHJhbV9md192ZXJzaW9uIHsKLQl1OCBjbGllbnQ7Ci0JdTggcHJpbWFyeTsKLQl1MTYgcGF0Y2g7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcmV2aXNpb247CisJdTggZW5naW5lZXJpbmc7CiAJdTggZmxhZ3M7CiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9PUFRJTUlaRUQgKDB4MTw8MCkKICNkZWZpbmUgUFJBTV9GV19WRVJTSU9OX09QVElNSVpFRF9TSElGVCAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKaW5kZXggYTZjMGIzYS4uMzliYTI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2luaXQuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDEyICsyMiwxNSBAQAogI2RlZmluZSBJTklUX0FTSUMJCQkweDQKICNkZWZpbmUgSU5JVF9IQVJEV0FSRQkJCTB4NwogCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkoMHg1ODAwIC8gNCkKLSNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkoMHgxMDAwMCAvIDQpCi0jZGVmaW5lIFRTVE9STV9JTlRNRU1fQUREUgkJMHgxYTAwMDAKLSNkZWZpbmUgQ1NUT1JNX0lOVE1FTV9BRERSCQkweDIyMDAwMAotI2RlZmluZSBYU1RPUk1fSU5UTUVNX0FERFIJCTB4MmEwMDAwCi0jZGVmaW5lIFVTVE9STV9JTlRNRU1fQUREUgkJMHgzMjAwMDAKKyNkZWZpbmUgVFNUT1JNX0lOVE1FTV9BRERSCQlUU0VNX1JFR19GQVNUX01FTU9SWQorI2RlZmluZSBDU1RPUk1fSU5UTUVNX0FERFIJCUNTRU1fUkVHX0ZBU1RfTUVNT1JZCisjZGVmaW5lIFhTVE9STV9JTlRNRU1fQUREUgkJWFNFTV9SRUdfRkFTVF9NRU1PUlkKKyNkZWZpbmUgVVNUT1JNX0lOVE1FTV9BRERSCQlVU0VNX1JFR19GQVNUX01FTU9SWQorLyogUkFNMCBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkweDU4MDAKKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkweDEwMDAwCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFKGJwKQkoKENISVBfSVNfRTFIKGJwKSA/IFNUT1JNX0lOVE1FTV9TSVpFX0UxSCA6IFwKKwkJCQkJCSAgICBTVE9STV9JTlRNRU1fU0laRV9FMSkgLyA0KQogCiAKIC8qIEluaXQgb3BlcmF0aW9uIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzICovCkBAIC0xNTAsNyArMTUzLDYgQEAKIAogc3RhdGljIHZvaWQgYm54Mnhfd3JpdGVfYmlnX2J1ZihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIGxlbikKIHsKLSNpZmRlZiBVU0VfRE1BRQogCWludCBvZmZzZXQgPSAwOwogCiAJaWYgKGJwLT5kbWFlX3JlYWR5KSB7CkBAIC0xNjQsMjggKzE2NiwyOCBAQAogCQkJCSBhZGRyICsgb2Zmc2V0LCBsZW4pOwogCX0gZWxzZQogCQlibngyeF9pbml0X3N0cl93cihicCwgYWRkciwgYnAtPmd1bnppcF9idWYsIGxlbik7Ci0jZWxzZQotCWJueDJ4X2luaXRfc3RyX3dyKGJwLCBhZGRyLCBicC0+Z3VuemlwX2J1ZiwgbGVuKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ZpbGwoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGludCBmaWxsLCB1MzIgbGVuKQogewotCWlmICgobGVuICogNCkgPiBGV19CVUZfU0laRSkgewotCQlCTlgyWF9FUlIoIkxBUkdFIERNQUUgT1BFUkFUSU9OICEgYWRkciAweCV4ICBsZW4gMHgleFxuIiwKLQkJCSAgYWRkciwgbGVuKjQpOwotCQlyZXR1cm47Ci0JfQotCW1lbXNldChicC0+Z3VuemlwX2J1ZiwgZmlsbCwgbGVuICogNCk7CisJdTMyIGJ1Zl9sZW4gPSAoKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSA/IEZXX0JVRl9TSVpFIDogKGxlbiAqIDQpKTsKKwl1MzIgYnVmX2xlbjMyID0gYnVmX2xlbiAvIDQ7CisJaW50IGk7CiAKLQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyLCBsZW4pOworCW1lbXNldChicC0+Z3VuemlwX2J1ZiwgZmlsbCwgYnVmX2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IGJ1Zl9sZW4zMikgeworCQl1MzIgY3VyX2xlbiA9IG1pbihidWZfbGVuMzIsIGxlbiAtIGkpOworCisJCWJueDJ4X3dyaXRlX2JpZ19idWYoYnAsIGFkZHIgKyBpICogNCwgY3VyX2xlbik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3dyXzY0KHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBsZW42NCkKIHsKLQl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUvNDsKLQl1MzIgbGVuID0gbGVuNjQqMjsKKwl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUgLyA0OworCXUzMiBsZW4gPSBsZW42NCAqIDI7CiAJdTY0IGRhdGE2NCA9IDA7CiAJaW50IGk7CiAKQEAgLTI3NCw2ICsyNzYsOSBAQAogCQlyYyA9IGJueDJ4X2d1bnppcChicCwgKHU4ICopZGF0YSwgbGVuKTsKIAkJaWYgKHJjKSB7CiAJCQlCTlgyWF9FUlIoImd1bnppcCBmYWlsZWQgISByYyAlZFxuIiwgcmMpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJa2ZyZWUodGVtcCk7CisjZW5kaWYKIAkJCXJldHVybjsKIAkJfQogCQlsZW4gPSBicC0+Z3VuemlwX291dGxlbjsKQEAgLTQyNiw1NyArNDMxLDU3IEBACiAKIC8qIGRlcml2ZWQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCByZWFkIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgcmVhZF9hcmJfZGF0YVtOVU1fUkRfUV1bTUFYX1JEX09SRCArIDFdID0gewotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0sIHs2NCAsIDY0ICwgNDF9IH0sCi0Je3s0ICwgOCAsIDR9LCAgIHs0ICwgOCAsIDR9LCAgICB7NCAsIDggLCA0fSwgICAgezQgLCA4ICwgNH0gfSwKLQl7ezQgLCAzICwgM30sICAgezQgLCAzICwgM30sICAgIHs0ICwgMyAsIDN9LCAgICB7NCAsIDMgLCAzfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezE2ICwgMyAsIDExfSwgIHsxNiAsIDMgLCAxMX0gfSwKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCAyNX0sIHszMiAsIDY0ICwgMjV9LCB7NjQgLCA2NCAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7NjQgLCAzICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezY0ICwgMyAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgNDF9LCB7MzIgLCA2NCAsIDgxfSwgezY0ICwgNjQgLCAxMjB9IH0KKy8qIDEgKi8JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0sIHs2NCwgNjQsIDQxfSB9LAorCXsgezQsIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0sICB7NCwgIDgsICA0fSAgfSwKKwl7IHs0LCAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9LCAgezQsICAzLCAgM30gIH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0sIHsxNiwgMywgIDExfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisvKiAxMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKy8qIDIwICoveyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0sIHs2NCwgNjQsIDEyMH0gfQogfTsKIAogLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHdyaXRlIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2RhdGFbTlVNX1dSX1FdW01BWF9XUl9PUkQgKyAxXSA9IHsKLQl7ezQgLCA2ICwgM30sICAgezQgLCA2ICwgM30sICAgIHs0ICwgNiAsIDN9IH0sCi0Je3s0ICwgMiAsIDN9LCAgIHs0ICwgMiAsIDN9LCAgICB7NCAsIDIgLCAzfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezE2ICwgMiAsIDExfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCA5ICwgNn0sICAgezE2ICwgOSAsIDExfSwgIHszMiAsIDkgLCAyMX0gfSwKLQl7ezggLCA0NyAsIDE5fSwgezE2ICwgNDcgLCAxOX0sIHszMiAsIDQ3ICwgMjF9IH0sCi0Je3s4ICwgOSAsIDZ9LCAgIHsxNiAsIDkgLCAxMX0sICB7MTYgLCA5ICwgMTF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgNDF9LCB7MzIgLCA2NCAsIDgxfSB9CisvKiAxICovCXsgezQsIDYsICAzfSwgIHs0LCAgNiwgIDN9LCAgezQsICA2LCAgM30gfSwKKwl7IHs0LCAyLCAgM30sICB7NCwgIDIsICAzfSwgIHs0LCAgMiwgIDN9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKy8qIDEwICoveyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MzIsIDksICAyMX0gfSwKKwl7IHs4LCA0NywgMTl9LCB7MTYsIDQ3LCAxOX0sIHszMiwgNDcsIDIxfSB9LAorCXsgezgsIDksICA2fSwgIHsxNiwgOSwgIDExfSwgezE2LCA5LCAgMTF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0gfQogfTsKIAogLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciByZWFkIHF1ZXVlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9hZGRyW05VTV9SRF9RLTFdID0gewotCXtQWFAyX1JFR19SUV9CV19SRF9MMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMCwKKy8qIDEgKi8Je1BYUDJfUkVHX1JRX0JXX1JEX0wwLCBQWFAyX1JFR19SUV9CV19SRF9BREQwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQwfSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMX0sCkBAIC00OTQsNyArNDk5LDcgQEAKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUI3fSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDgsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOH0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAorLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDksIFBYUDJfUkVHX1BTV1JRX0JXX0FERDksCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOX0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wxMCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTAsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LApAQCAtNTE0LDcgKzUxOSw3IEBACiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE3fSwKIAl7UFhQMl9SRUdfUlFfQldfUkRfTDE4LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOCwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTh9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTksIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE5LAorLyogMjAgKi97UFhQMl9SRUdfUlFfQldfUkRfTDE5LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOSwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTl9LAogCXtQWFAyX1JFR19SUV9CV19SRF9MMjAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMH0sCkBAIC01MzYsNyArNTQxLDcgQEAKIAogLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciB3cml0ZSBxdWV1ZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2FkZHJbTlVNX1dSX1EtMV0gPSB7Ci0Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAorLyogMSAqLwl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMX0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wyLCBQWFAyX1JFR19QU1dSUV9CV19BREQyLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjJ9LApAQCAtNTU0LDcgKzU1OSw3IEBACiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MMTEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDExLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjExfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDI4LCBQWFAyX1JFR19QU1dSUV9CV19BREQyOCwKKy8qIDEwICove1BYUDJfUkVHX1BTV1JRX0JXX0wyOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMjgsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMjh9LAogCXtQWFAyX1JFR19SUV9CV19XUl9MMjksIFBYUDJfUkVHX1JRX0JXX1dSX0FERDI5LAogCQlQWFAyX1JFR19SUV9CV19XUl9VQk9VTkQyOX0sCkBAIC01NzIsNyArNTc3LDEyIEBACiAJCQkgICAgIGJwLT5wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMLCAmZGV2Y3RsKTsKIAlEUChORVRJRl9NU0dfSFcsICJyZWFkIDB4JXggZnJvbSBkZXZjdGxcbiIsIGRldmN0bCk7CiAJd19vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNSk7Ci0Jcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CisJaWYgKGJwLT5tcnJzID09IC0xKQorCQlyX29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEpID4+IDEyKTsKKwllbHNlIHsKKwkJRFAoTkVUSUZfTVNHX0hXLCAiZm9yY2UgcmVhZCBvcmRlciB0byAlZFxuIiwgYnAtPm1ycnMpOworCQlyX29yZGVyID0gYnAtPm1ycnM7CisJfQogCiAJaWYgKHJfb3JkZXIgPiBNQVhfUkRfT1JEKSB7CiAJCURQKE5FVElGX01TR19IVywgInJlYWQgb3JkZXIgb2YgJWQgIG9yZGVyIGFkanVzdGVkIHRvICVkXG4iLApAQCAtNjQ3LDE3ICs2NTcsMTggQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1EUF9USCwgKDB4MTggPDwgd19vcmRlcikpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9YU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9RTV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1NSQ19NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfREJHX01QUywgd19vcmRlcisxKTsKKwkJdmFsID0gKCh3X29yZGVyID09IDApID8gMiA6IDMpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9YU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9RTV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1NSQ19NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfREJHX01QUywgdmFsKTsKIAkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9ETUFFX01QUywgMik7IC8qIERNQUUgaXMgc3BlY2lhbCAqLwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0NEVV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ0RVX01QUywgdmFsKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCmluZGV4IDk3NTViZjYuLjFmMjJjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaApAQCAtMSw3ICsxLDIzIEBACiAjaWZuZGVmIF9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fCiAjZGVmaW5lIF9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fCiAKLS8qIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcC4KKy8qIGJueDJ4X2luaXRfdmFsdWVzLmg6IEJyb2FkY29tIE5YMiAxMEcgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGV4Y2VwdCBhcyBub3RlZCBiZWxvdy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICoKKyAqCisgKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGluaXRpYWxpemUgdGhlIGNoaXAuCiAgKgogICogRm9yIGVhY2ggYmxvY2sgaW4gdGhlIGNoaXAgdGhlcmUgYXJlIHRocmVlIGluaXQgc3RhZ2VzOgogICogY29tbW9uIC0gSFcgdXNlZCBieSBib3RoIHBvcnRzLApAQCAtNDcsMTIgKzYzLDE2IEBACiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMSwgMHgxMDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMiwgMHgyMDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMywgMHgzMDEwMDAwMH0sCi0Je09QX1pSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDQwMTAwMDAwfSwKKwl7T1BfWlJfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNSwgMHgzfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8wLCAweDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMSwgMHgxMjE0MDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMiwgMHgyMjE0MDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMywgMHgzMjE0MDAwMH0sCi0Je09QX1pSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDQyMTQwMDAwfSwKKwl7T1BfWlJfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNSwgMHgzfSwKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMsIDB4MH0sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9DRkNfRkxVU0hfTUVTU0FHRVMsIDB4MH0sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9UUkFOU1BBUkVOVF9GTFVTSF9NRVNTQUdFUywgMHgwfSwKQEAgLTcxLDE1ICs5MSwxNiBAQAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzEsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzIsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzMsIDB4M2Z9LAotCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzQsIDB4MH0sCisJe09QX1dSX0UxLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgwfSwKKwl7T1BfV1JfRTFILCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNSwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNiwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNywgMHgzZn0sCi0jZGVmaW5lIFBSU19DT01NT05fRU5EICAgICAgICAgIDQ3Ci0jZGVmaW5lIFNSQ0hfQ09NTU9OX1NUQVJUICAgICAgIDQ3CisjZGVmaW5lIFBSU19DT01NT05fRU5EICAgICAgICAgIDUyCisjZGVmaW5lIFNSQ0hfQ09NTU9OX1NUQVJUICAgICAgIDUyCiAJe09QX1dSX0UxSCwgU1JDX1JFR19FMUhNRl9FTkFCTEUsIDB4MX0sCi0jZGVmaW5lIFNSQ0hfQ09NTU9OX0VORCAgICAgICAgIDQ4Ci0jZGVmaW5lIFRTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ4CisjZGVmaW5lIFNSQ0hfQ09NTU9OX0VORCAgICAgICAgIDUzCisjZGVmaW5lIFRTRE1fQ09NTU9OX1NUQVJUICAgICAgIDUzCiAJe09QX1dSX0UxLCBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDExfSwKIAl7T1BfV1JfRTFILCBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4MjExfSwKIAl7T1BfV1JfRTEsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NDAwfSwKQEAgLTkyLDEwICsxMTMsMTUgQEAKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDEsIDB4ZmZmZn0sCiAJe09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyLCAweGZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMywgMHhmZmZmfSwKLQl7T1BfWlIsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4MjB9LAorCXtPUF9XUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMSwgMHgwfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMiwgMHgzNH0sCiAJe09QX1dSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMsIDB4MzV9LAotCXtPUF9aUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDdjfSwKKwl7T1BfWlJfRTEsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg3Y30sCisJe09QX1pSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDFjfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX1RfMCwgMHgxfSwKKwl7T1BfWlJfRTFILCBUU0RNX1JFR19BR0dfSU5UX1RfMSwgMHg1Zn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX0lOMiwgMHgzZn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfT1VUMSwgMHg3ZmZmZmZmfSwKQEAgLTExOCw4ICsxNDQsOCBAQAogCXtPUF9XUl9BU0lDLCBUU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCiAJe09QX1dSX0VNVUwsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4MX0sCiAJe09QX1dSX0ZQR0EsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4YX0sCi0jZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDg2Ci0jZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDg2CisjZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDk2CisjZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDk2CiAJe09QX1dSLCBUQ01fUkVHX1hYX01BWF9MTF9TWiwgMHgyMH0sCiAJe09QX1dSLCBUQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBUQ01fUkVHX1RRTV9UQ01fSERSX1AsIDB4MjE1MDAyMH0sCkBAIC0xMjksMTAgKzE1NSwxNiBAQAogCXtPUF9XUiwgVENNX1JFR19FUlJfRVZOVF9JRCwgMHgzM30sCiAJe09QX1dSLCBUQ01fUkVHX0VYUFJfRVZOVF9JRCwgMHgzMH0sCiAJe09QX1dSLCBUQ01fUkVHX1NUT1BfRVZOVF9JRCwgMHgzMX0sCi0Je09QX1dSLCBUQ01fUkVHX1BSU19XRUlHSFQsIDB4NH0sCi0Je09QX1dSLCBUQ01fUkVHX1BCRl9XRUlHSFQsIDB4NX0sCisJe09QX1dSLCBUQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFRDTV9SRUdfUFJTX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfUEJGX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFRDTV9SRUdfVVNFTV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX0NTRU1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVENNX1JFR19DUF9XRUlHSFQsIDB4MH0sCi0Je09QX1dSLCBUQ01fUkVHX1RTRE1fV0VJR0hULCAweDR9LAorCXtPUF9XUiwgVENNX1JFR19UU0RNX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfVFFNX1BfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVENNX1JFR19UUU1fU19XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX1RNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX1RRTV9VU0VfUSwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfR1JfQVJCX1RZUEUsIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX0dSX0xEMF9QUiwgMHgxfSwKQEAgLTE0OSw3ICsxODEsOSBAQAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8yLCAweDh9LAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8zLCAweDh9LAotCXtPUF9aUiwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9aUl9FMSwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHgxfSwKKwl7T1BfWlJfRTFILCBUQ01fUkVHX05fU01fQ1RYX0xEXzUsIDB4M30sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9SRUcwX1NaLCAweDZ9LAogCXtPUF9XUl9FMSwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4ZH0sCiAJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgyZH0sCkBAIC0xNzUsNzUgKzIwOSw3NSBAQAogCXtPUF9XUiwgVENNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgVENNX0NPTU1PTl9FTkQgICAgICAgICAgMTQxCi0jZGVmaW5lIFRDTV9GVU5DMF9TVEFSVCAgICAgICAgIDE0MQorI2RlZmluZSBUQ01fQ09NTU9OX0VORCAgICAgICAgICAxNTkKKyNkZWZpbmUgVENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTU5CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4N30sCi0jZGVmaW5lIFRDTV9GVU5DMF9FTkQgICAgICAgICAgIDE0NQotI2RlZmluZSBUQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNDUKKyNkZWZpbmUgVENNX0ZVTkMwX0VORCAgICAgICAgICAgMTYzCisjZGVmaW5lIFRDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE2MwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Mjd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDI3fSwKLSNkZWZpbmUgVENNX0ZVTkMxX0VORCAgICAgICAgICAgMTQ5Ci0jZGVmaW5lIFRDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE0OQorI2RlZmluZSBUQ01fRlVOQzFfRU5EICAgICAgICAgICAxNjcKKyNkZWZpbmUgVENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTY3CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDE3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgxN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MTd9LAotI2RlZmluZSBUQ01fRlVOQzJfRU5EICAgICAgICAgICAxNTMKLSNkZWZpbmUgVENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTUzCisjZGVmaW5lIFRDTV9GVU5DMl9FTkQgICAgICAgICAgIDE3MQorI2RlZmluZSBUQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNzEKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgzZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Mzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8xLCAweDM3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgzN30sCi0jZGVmaW5lIFRDTV9GVU5DM19FTkQgICAgICAgICAgIDE1NwotI2RlZmluZSBUQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTcKKyNkZWZpbmUgVENNX0ZVTkMzX0VORCAgICAgICAgICAgMTc1CisjZGVmaW5lIFRDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE3NQogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDRkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg0N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4NDd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDQ3fSwKLSNkZWZpbmUgVENNX0ZVTkM0X0VORCAgICAgICAgICAgMTYxCi0jZGVmaW5lIFRDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE2MQorI2RlZmluZSBUQ01fRlVOQzRfRU5EICAgICAgICAgICAxNzkKKyNkZWZpbmUgVENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTc5CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8xLCAweDY3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg2N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzEsIDB4Njd9LAotI2RlZmluZSBUQ01fRlVOQzVfRU5EICAgICAgICAgICAxNjUKLSNkZWZpbmUgVENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTY1CisjZGVmaW5lIFRDTV9GVU5DNV9FTkQgICAgICAgICAgIDE4MworI2RlZmluZSBUQ01fRlVOQzZfU1RBUlQgICAgICAgICAxODMKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg1ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4NTd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8wLCAweDU3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg1N30sCi0jZGVmaW5lIFRDTV9GVU5DNl9FTkQgICAgICAgICAgIDE2OQotI2RlZmluZSBUQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNjkKKyNkZWZpbmUgVENNX0ZVTkM2X0VORCAgICAgICAgICAgMTg3CisjZGVmaW5lIFRDTV9GVU5DN19TVEFSVCAgICAgICAgIDE4NwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDdkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg3N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Nzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDc3fSwKLSNkZWZpbmUgVENNX0ZVTkM3X0VORCAgICAgICAgICAgMTczCi0jZGVmaW5lIEJSQjFfQ09NTU9OX1NUQVJUICAgICAgIDE3MworI2RlZmluZSBUQ01fRlVOQzdfRU5EICAgICAgICAgICAxOTEKKyNkZWZpbmUgQlJCMV9DT01NT05fU1RBUlQgICAgICAgMTkxCiAJe09QX1NXLCBCUkIxX1JFR19MTF9SQU0sIDB4MjAwMDAyMH0sCiAJe09QX1dSLCBCUkIxX1JFR19TT0ZUX1JFU0VULCAweDF9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzQsIDB4MH0sCiAJe09QX1NXLCBCUkIxX1JFR19GUkVFX0xJU1RfUFJTX0NSRFQsIDB4MzAyMjB9LAogCXtPUF9XUiwgQlJCMV9SRUdfU09GVF9SRVNFVCwgMHgwfSwKLSNkZWZpbmUgQlJCMV9DT01NT05fRU5EICAgICAgICAgMTc4Ci0jZGVmaW5lIEJSQjFfUE9SVDBfU1RBUlQgICAgICAgIDE3OAorI2RlZmluZSBCUkIxX0NPTU1PTl9FTkQgICAgICAgICAxOTYKKyNkZWZpbmUgQlJCMV9QT1JUMF9TVEFSVCAgICAgICAgMTk2CiAJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDB4Yjh9LAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCwgMHgxMTR9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18wLCAweDB9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzAsIDB4MH0sCi0jZGVmaW5lIEJSQjFfUE9SVDBfRU5EICAgICAgICAgIDE4MgotI2RlZmluZSBCUkIxX1BPUlQxX1NUQVJUICAgICAgICAxODIKKyNkZWZpbmUgQlJCMV9QT1JUMF9FTkQgICAgICAgICAgMjAwCisjZGVmaW5lIEJSQjFfUE9SVDFfU1RBUlQgICAgICAgIDIwMAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8xLCAweGI4fSwKIAl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzEsIDB4MTE0fSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMSwgMHgwfSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU18xLCAweDB9LAotI2RlZmluZSBCUkIxX1BPUlQxX0VORCAgICAgICAgICAxODYKLSNkZWZpbmUgVFNFTV9DT01NT05fU1RBUlQgICAgICAgMTg2CisjZGVmaW5lIEJSQjFfUE9SVDFfRU5EICAgICAgICAgIDIwNAorI2RlZmluZSBUU0VNX0NPTU1PTl9TVEFSVCAgICAgICAyMDQKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTMwMywxNDMgKzMzNywxNjYgQEAKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAyMCwgMHhjOH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxOCwgMHg0fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAwMCwgMHgyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWFkMCwgMHgwfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhZDgsIDB4NH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjI4LCAweDZ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNjc4LCAweDZ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzY3MCwgMHgyfSwKIAl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDQwMjI0fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKIAl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Y2IwLCAweDgwMjI4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5MzAwMDB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDE4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDk0MDAwMH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4NH0sCiAJe09QX1dSXzY0X0UxLCBUU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2MCwgMHgxNDAyMzB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDR9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSwgMHgzMjRmMDAwMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMzgsIDB4NH0sCi0Je09QX1pQX0UxLCBUU0VNX1JFR19QUkFNLCAweDMwYjEwMDAwfSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzMyNTBjOTR9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzM2M1MGMyZH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhlNGQxOTVlfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA1OCwgMHg0fSwKLQl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweGJjNjE5MWZ9LAorCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTFlMDAsIDB4NWM0MDAyMzJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDY4LCAweDR9LAotCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTE3ZjAsIDB4NWQwMjAyMzJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDc4LCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDA4LCAweDJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MTQwLCAweDIwMDIyNH0sCi0Je09QX1pQX0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDk2MDAwMH0sCi0Je09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjAsIDB4MTQwMjQ0fSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNLCAweDMwY2MwMDAwfSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzZGYwYzMzfSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhkY2UxOTJifSwKLQl7T1BfV1JfNjRfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMWM3MCwgMHg1YzcyMDI0Nn0sCi0jZGVmaW5lIFRTRU1fQ09NTU9OX0VORCAgICAgICAgIDI3NgotI2RlZmluZSBUU0VNX1BPUlQwX1NUQVJUICAgICAgICAyNzYKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjJjMCwgMHgyMDAyMjR9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5YjAwMDB9LAorCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSArIDB4Mzk4LCAweGQwMjQ0fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNLCAweDMyNWUwMDAwfSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM1OTYwYzk4fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgxYWVhMTlmZX0sCisJe09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTQzZDAsIDB4NTc4NjAyNDZ9LAorI2RlZmluZSBUU0VNX0NPTU1PTl9FTkQgICAgICAgICAyOTcKKyNkZWZpbmUgVFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMjk3CiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjJjOCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTZjfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweGZjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDE2Y30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIwMDAsIDB4Mjh9LAogCXtPUF9XUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIxNDAsIDB4Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJjMCwgMHgxMn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ1MCwgMHg2fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM1MCwgMHhmYX0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM1MCwgMHg2NH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODEwOCwgMHgyfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwICsgMHg4LCAweDUwMjM0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTcwLCAweDEyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5YzAsIDB4YmV9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDljMCwgMHg0Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyMCwgMHhlfSwKLQl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM0fSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM5fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTA4LCAweDJ9LAotI2RlZmluZSBUU0VNX1BPUlQwX0VORCAgICAgICAgICAyOTQKLSNkZWZpbmUgVFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMjk0CisjZGVmaW5lIFRTRU1fUE9SVDBfRU5EICAgICAgICAgIDMxNworI2RlZmluZSBUU0VNX1BPUlQxX1NUQVJUICAgICAgICAzMTcKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzQ4LCAweDIwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjViMCwgMHgxNmN9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQzZjAsIDB4ZmN9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQ1YjAsIDB4MTZjfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjBhMCwgMHgyOH0sCiAJe09QX1dSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2NCwgMHgwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjE3MCwgMHhjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDI4LCAweGF9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDEyfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4LCAweGZhfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNGUwLCAweDY0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTEwLCAweDJ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzggKyAweDgsIDB4NTAyM2J9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1YjgsIDB4MTJ9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGNiOCwgMHhiZX0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YWYwLCAweDRjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDgsIDB4Mn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODU4LCAweGV9LAotCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjgsIDB4MjAyMzZ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjgsIDB4MjAyNDB9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MTAsIDB4Mn0sCi0jZGVmaW5lIFRTRU1fUE9SVDFfRU5EICAgICAgICAgIDMxMgotI2RlZmluZSBUU0VNX0ZVTkMwX1NUQVJUICAgICAgICAzMTIKKyNkZWZpbmUgVFNFTV9QT1JUMV9FTkQgICAgICAgICAgMzM3CisjZGVmaW5lIFRTRU1fRlVOQzBfU1RBUlQgICAgICAgIDMzNwogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjYwLCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwICsgMHg4LCAweDUwMjQ4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxYzAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4MTJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAotI2RlZmluZSBUU0VNX0ZVTkMwX0VORCAgICAgICAgICAzMTgKLSNkZWZpbmUgVFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMzE4CisjZGVmaW5lIFRTRU1fRlVOQzBfRU5EICAgICAgICAgIDM0NQorI2RlZmluZSBUU0VNX0ZVTkMxX1NUQVJUICAgICAgICAzNDUKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI2NCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCArIDB4OCwgMHg1MDI0ZH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMWUwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDEwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGM4LCAweDEyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwOCwgMHgyfSwKLSNkZWZpbmUgVFNFTV9GVU5DMV9FTkQgICAgICAgICAgMzI0Ci0jZGVmaW5lIFRTRU1fRlVOQzJfU1RBUlQgICAgICAgIDMyNAorI2RlZmluZSBUU0VNX0ZVTkMxX0VORCAgICAgICAgICAzNTMKKyNkZWZpbmUgVFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMzUzCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjgsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAgKyAweDgsIDB4NTAyNTJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIwMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4MjAyNDh9LAotI2RlZmluZSBUU0VNX0ZVTkMyX0VORCAgICAgICAgICAzMzAKLSNkZWZpbmUgVFNFTV9GVU5DM19TVEFSVCAgICAgICAgMzMwCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4MjAyNTd9LAorI2RlZmluZSBUU0VNX0ZVTkMyX0VORCAgICAgICAgICAzNjEKKyNkZWZpbmUgVFNFTV9GVU5DM19TVEFSVCAgICAgICAgMzYxCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNmMsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTggKyAweDgsIDB4NTAyNTl9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIyMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAzMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE1OCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4MjAyNGF9LAotI2RlZmluZSBUU0VNX0ZVTkMzX0VORCAgICAgICAgICAzMzYKLSNkZWZpbmUgVFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMzM2CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4MjAyNWV9LAorI2RlZmluZSBUU0VNX0ZVTkMzX0VORCAgICAgICAgICAzNjkKKyNkZWZpbmUgVFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMzY5CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzAsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAgKyAweDgsIDB4NTAyNjB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGUwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI0MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFhMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNGN9LAotI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNDIKLSNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzQyCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNjV9LAorI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNzcKKyNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzc3CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzQsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTggKyAweDgsIDB4NTAyNjd9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTE4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI2MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA1MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFlOCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4MjAyNGV9LAotI2RlZmluZSBUU0VNX0ZVTkM1X0VORCAgICAgICAgICAzNDgKLSNkZWZpbmUgVFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMzQ4CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4MjAyNmN9LAorI2RlZmluZSBUU0VNX0ZVTkM1X0VORCAgICAgICAgICAzODUKKyNkZWZpbmUgVFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMzg1CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzgsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAgKyAweDgsIDB4NTAyNmV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA2MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIzMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4MjAyNTB9LAotI2RlZmluZSBUU0VNX0ZVTkM2X0VORCAgICAgICAgICAzNTQKLSNkZWZpbmUgVFNFTV9GVU5DN19TVEFSVCAgICAgICAgMzU0CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4MjAyNzN9LAorI2RlZmluZSBUU0VNX0ZVTkM2X0VORCAgICAgICAgICAzOTMKKyNkZWZpbmUgVFNFTV9GVU5DN19TVEFSVCAgICAgICAgMzkzCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiN2MsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODggKyAweDgsIDB4NTAyNzV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTg4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJhMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA3MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTI3OCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyNTJ9LAotI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICAzNjAKLSNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgMzYwCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyN2F9LAorI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICA0MDEKKyNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgNDAxCiAJe09QX1dSX0UxLCBNSVNDX1JFR19HUkNfVElNRU9VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzEsIDB4NzFkMjkxMX0sCiAJe09QX1dSLCBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF8yLCAweDB9LApAQCAtNDQ3LDM5ICs1MDQsMzkgQEAKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzQsIDB4MH0sCiAJe09QX1dSLCBNSVNDX1JFR19MQ1BMTF9DVFJMXzEsIDB4MjA5fSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX1NQSU8sIDB4ZmYwMDAwMDB9LAotI2RlZmluZSBNSVNDX0NPTU1PTl9FTkQgICAgICAgICAzNjcKLSNkZWZpbmUgTUlTQ19GVU5DMF9TVEFSVCAgICAgICAgMzY3CisjZGVmaW5lIE1JU0NfQ09NTU9OX0VORCAgICAgICAgIDQwOAorI2RlZmluZSBNSVNDX0ZVTkMwX1NUQVJUICAgICAgICA0MDgKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMwX0VORCAgICAgICAgICAzNjgKLSNkZWZpbmUgTUlTQ19GVU5DMV9TVEFSVCAgICAgICAgMzY4CisjZGVmaW5lIE1JU0NfRlVOQzBfRU5EICAgICAgICAgIDQwOQorI2RlZmluZSBNSVNDX0ZVTkMxX1NUQVJUICAgICAgICA0MDkKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMxX0VORCAgICAgICAgICAzNjkKLSNkZWZpbmUgTUlTQ19GVU5DMl9TVEFSVCAgICAgICAgMzY5CisjZGVmaW5lIE1JU0NfRlVOQzFfRU5EICAgICAgICAgIDQxMAorI2RlZmluZSBNSVNDX0ZVTkMyX1NUQVJUICAgICAgICA0MTAKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMyX0VORCAgICAgICAgICAzNzAKLSNkZWZpbmUgTUlTQ19GVU5DM19TVEFSVCAgICAgICAgMzcwCisjZGVmaW5lIE1JU0NfRlVOQzJfRU5EICAgICAgICAgIDQxMQorI2RlZmluZSBNSVNDX0ZVTkMzX1NUQVJUICAgICAgICA0MTEKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMzX0VORCAgICAgICAgICAzNzEKLSNkZWZpbmUgTUlTQ19GVU5DNF9TVEFSVCAgICAgICAgMzcxCisjZGVmaW5lIE1JU0NfRlVOQzNfRU5EICAgICAgICAgIDQxMgorI2RlZmluZSBNSVNDX0ZVTkM0X1NUQVJUICAgICAgICA0MTIKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM0X0VORCAgICAgICAgICAzNzIKLSNkZWZpbmUgTUlTQ19GVU5DNV9TVEFSVCAgICAgICAgMzcyCisjZGVmaW5lIE1JU0NfRlVOQzRfRU5EICAgICAgICAgIDQxMworI2RlZmluZSBNSVNDX0ZVTkM1X1NUQVJUICAgICAgICA0MTMKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM1X0VORCAgICAgICAgICAzNzMKLSNkZWZpbmUgTUlTQ19GVU5DNl9TVEFSVCAgICAgICAgMzczCisjZGVmaW5lIE1JU0NfRlVOQzVfRU5EICAgICAgICAgIDQxNAorI2RlZmluZSBNSVNDX0ZVTkM2X1NUQVJUICAgICAgICA0MTQKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM2X0VORCAgICAgICAgICAzNzQKLSNkZWZpbmUgTUlTQ19GVU5DN19TVEFSVCAgICAgICAgMzc0CisjZGVmaW5lIE1JU0NfRlVOQzZfRU5EICAgICAgICAgIDQxNQorI2RlZmluZSBNSVNDX0ZVTkM3X1NUQVJUICAgICAgICA0MTUKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM3X0VORCAgICAgICAgICAzNzUKLSNkZWZpbmUgTklHX0NPTU1PTl9TVEFSVCAgICAgICAgMzc1CisjZGVmaW5lIE1JU0NfRlVOQzdfRU5EICAgICAgICAgIDQxNgorI2RlZmluZSBOSUdfQ09NTU9OX1NUQVJUICAgICAgICA0MTYKIAl7T1BfV1IsIE5JR19SRUdfUEJGX0xCX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19QUlNfUkVRX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfREVCVUdfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQl9MQl9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1BSU19FT1BfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfQ09NTU9OX0VORCAgICAgICAgICAzODAKLSNkZWZpbmUgTklHX1BPUlQwX1NUQVJUICAgICAgICAgMzgwCisjZGVmaW5lIE5JR19DT01NT05fRU5EICAgICAgICAgIDQyMQorI2RlZmluZSBOSUdfUE9SVDBfU1RBUlQgICAgICAgICA0MjEKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9DTV9IRUFERVIsIDB4MzAwMDAwfSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9FVkVOVF9JRCwgMHgyOH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfRVJST1JfTUFTSywgMHgwfSwKQEAgLTQ5Miw4ICs1NDksOCBAQAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfUEJGMF9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCMF9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1hDTTBfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfUE9SVDBfRU5EICAgICAgICAgICAzOTIKLSNkZWZpbmUgTklHX1BPUlQxX1NUQVJUICAgICAgICAgMzkyCisjZGVmaW5lIE5JR19QT1JUMF9FTkQgICAgICAgICAgIDQzMworI2RlZmluZSBOSUdfUE9SVDFfU1RBUlQgICAgICAgICA0MzMKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9DTV9IRUFERVIsIDB4MzAwMDAwfSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9FVkVOVF9JRCwgMHgyOH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfRVJST1JfTUFTSywgMHgwfSwKQEAgLTUwNiwxMSArNTYzLDExIEBACiAJe09QX1dSLCBOSUdfUkVHX0VHUkVTU19QQkYxX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19CUkIxX09VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfWENNMV9PVVRfRU4sIDB4MX0sCi0jZGVmaW5lIE5JR19QT1JUMV9FTkQgICAgICAgICAgIDQwNAotI2RlZmluZSBVUEJfQ09NTU9OX1NUQVJUICAgICAgICA0MDQKKyNkZWZpbmUgTklHX1BPUlQxX0VORCAgICAgICAgICAgNDQ1CisjZGVmaW5lIFVQQl9DT01NT05fU1RBUlQgICAgICAgIDQ0NQogCXtPUF9XUiwgR1JDQkFTRV9VUEIgKyBQQl9SRUdfQ09OVFJPTCwgMHgyMH0sCi0jZGVmaW5lIFVQQl9DT01NT05fRU5EICAgICAgICAgIDQwNQotI2RlZmluZSBDU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0MDUKKyNkZWZpbmUgVVBCX0NPTU1PTl9FTkQgICAgICAgICAgNDQ2CisjZGVmaW5lIENTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ0NgogCXtPUF9XUl9FMSwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCiAJe09QX1dSX0UxSCwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDIxMX0sCiAJe09QX1dSX0UxLCBDU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCkBAIC01NTAsOCArNjA3LDggQEAKIAl7T1BfV1JfQVNJQywgQ1NETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBDU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBDU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBDU0RNX0NPTU1PTl9FTkQgICAgICAgICA0NDQKLSNkZWZpbmUgVVNETV9DT01NT05fU1RBUlQgICAgICAgNDQ0CisjZGVmaW5lIENTRE1fQ09NTU9OX0VORCAgICAgICAgIDQ4NQorI2RlZmluZSBVU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0ODUKIAl7T1BfV1JfRTEsIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHhhMTF9LAogCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHg0MTF9LAogCXtPUF9XUl9FMSwgVVNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDB9LApAQCAtNTY4LDkgKzYyNSwxNCBAQAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xLCAweDV9LAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yLCAweDM0fSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMywgMHgzNX0sCi0Je09QX1pSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4NWN9LAorCXtPUF9aUl9FMSwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDVjfSwKKwl7T1BfV1JfRTFILCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4N30sCisJe09QX1pSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF81LCAweDVifSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wLCAweDF9LAotCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAorCXtPUF9aUl9FMSwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xLCAweDN9LAorCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV80LCAweDF9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81LCAweDFifSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZn0sCiAJe09QX1dSLCBVU0RNX1JFR19FTkFCTEVfSU4yLCAweDNmfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9PVVQxLCAweDdmZmZmZmZ9LApAQCAtNTk0LDE4ICs2NTYsMjEgQEAKIAl7T1BfV1JfQVNJQywgVVNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBVU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBVU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBVU0RNX0NPTU1PTl9FTkQgICAgICAgICA0ODYKLSNkZWZpbmUgQ0NNX0NPTU1PTl9TVEFSVCAgICAgICAgNDg2CisjZGVmaW5lIFVTRE1fQ09NTU9OX0VORCAgICAgICAgIDUzMgorI2RlZmluZSBDQ01fQ09NTU9OX1NUQVJUICAgICAgICA1MzIKIAl7T1BfV1IsIENDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIENDTV9SRUdfQ1FNX0NDTV9IRFJfUCwgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIENDTV9SRUdfQ1FNX0NDTV9IRFJfUywgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIENDTV9SRUdfRVJSX0NDTV9IRFIsIDB4ODEwMDAwMH0sCiAJe09QX1dSLCBDQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKKwl7T1BfV1IsIENDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19UU0VNX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIENDTV9SRUdfWFNFTV9XRUlHSFQsIDB4NH0sCi0Je09QX1dSLCBDQ01fUkVHX1VTRU1fV0VJR0hULCAweDR9LAorCXtPUF9XUiwgQ0NNX1JFR19YU0VNX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIENDTV9SRUdfVVNFTV9XRUlHSFQsIDB4NX0sCiAJe09QX1pSLCBDQ01fUkVHX1BCRl9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBDQ01fUkVHX0NRTV9QX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1NETV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBDQ01fUkVHX0NRTV9QX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1FNX1NfV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ1FNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DTlRfQVVYMV9RLCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DTlRfQVVYMl9RLCAweDJ9LApAQCAtNjIwLDggKzY4NSw4IEBACiAJe09QX1dSLCBDQ01fUkVHX1hYX0lOSVRfQ1JELCAweDN9LAogCXtPUF9XUiwgQ0NNX1JFR19YWF9NU0dfTlVNLCAweDE4fSwKIAl7T1BfWlIsIENDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyMzh9LAotCXtPUF9TV19FMUgsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjU0fSwKKwl7T1BfU1dfRTEsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjQyfSwKKwl7T1BfU1dfRTFILCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDI3Y30sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzEsIDB4Mn0sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzIsIDB4OH0sCkBAIC02NTcsOCArNzIyLDggQEAKIAl7T1BfV1IsIENDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIENDTV9DT01NT05fRU5EICAgICAgICAgIDU0NwotI2RlZmluZSBDQ01fRlVOQzBfU1RBUlQgICAgICAgICA1NDcKKyNkZWZpbmUgQ0NNX0NPTU1PTl9FTkQgICAgICAgICAgNTk2CisjZGVmaW5lIENDTV9GVU5DMF9TVEFSVCAgICAgICAgIDU5NgogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDd9LApAQCAtNjY2LDggKzczMSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4N30sCi0jZGVmaW5lIENDTV9GVU5DMF9FTkQgICAgICAgICAgIDU1NAotI2RlZmluZSBDQ01fRlVOQzFfU1RBUlQgICAgICAgICA1NTQKKyNkZWZpbmUgQ0NNX0ZVTkMwX0VORCAgICAgICAgICAgNjAzCisjZGVmaW5lIENDTV9GVU5DMV9TVEFSVCAgICAgICAgIDYwMwogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgyOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDJhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mjd9LApAQCAtNjc1LDggKzc0MCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDJifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgyN30sCi0jZGVmaW5lIENDTV9GVU5DMV9FTkQgICAgICAgICAgIDU2MQotI2RlZmluZSBDQ01fRlVOQzJfU1RBUlQgICAgICAgICA1NjEKKyNkZWZpbmUgQ0NNX0ZVTkMxX0VORCAgICAgICAgICAgNjEwCisjZGVmaW5lIENDTV9GVU5DMl9TVEFSVCAgICAgICAgIDYxMAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHgxOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDFhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4MTd9LApAQCAtNjg0LDggKzc0OSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4MWN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDFifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgxN30sCi0jZGVmaW5lIENDTV9GVU5DMl9FTkQgICAgICAgICAgIDU2OAotI2RlZmluZSBDQ01fRlVOQzNfU1RBUlQgICAgICAgICA1NjgKKyNkZWZpbmUgQ0NNX0ZVTkMyX0VORCAgICAgICAgICAgNjE3CisjZGVmaW5lIENDTV9GVU5DM19TVEFSVCAgICAgICAgIDYxNwogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgzOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDNhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mzd9LApAQCAtNjkzLDggKzc1OCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4M2N9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDNifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgzN30sCi0jZGVmaW5lIENDTV9GVU5DM19FTkQgICAgICAgICAgIDU3NQotI2RlZmluZSBDQ01fRlVOQzRfU1RBUlQgICAgICAgICA1NzUKKyNkZWZpbmUgQ0NNX0ZVTkMzX0VORCAgICAgICAgICAgNjI0CisjZGVmaW5lIENDTV9GVU5DNF9TVEFSVCAgICAgICAgIDYyNAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg0OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDRhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NDd9LApAQCAtNzAyLDggKzc2Nyw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NGN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDRifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg0N30sCi0jZGVmaW5lIENDTV9GVU5DNF9FTkQgICAgICAgICAgIDU4MgotI2RlZmluZSBDQ01fRlVOQzVfU1RBUlQgICAgICAgICA1ODIKKyNkZWZpbmUgQ0NNX0ZVTkM0X0VORCAgICAgICAgICAgNjMxCisjZGVmaW5lIENDTV9GVU5DNV9TVEFSVCAgICAgICAgIDYzMQogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg2OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDZhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Njd9LApAQCAtNzExLDggKzc3Niw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4NmN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDZifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg2N30sCi0jZGVmaW5lIENDTV9GVU5DNV9FTkQgICAgICAgICAgIDU4OQotI2RlZmluZSBDQ01fRlVOQzZfU1RBUlQgICAgICAgICA1ODkKKyNkZWZpbmUgQ0NNX0ZVTkM1X0VORCAgICAgICAgICAgNjM4CisjZGVmaW5lIENDTV9GVU5DNl9TVEFSVCAgICAgICAgIDYzOAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg1OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDVhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NTd9LApAQCAtNzIwLDggKzc4NSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NWN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDVifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg1N30sCi0jZGVmaW5lIENDTV9GVU5DNl9FTkQgICAgICAgICAgIDU5NgotI2RlZmluZSBDQ01fRlVOQzdfU1RBUlQgICAgICAgICA1OTYKKyNkZWZpbmUgQ0NNX0ZVTkM2X0VORCAgICAgICAgICAgNjQ1CisjZGVmaW5lIENDTV9GVU5DN19TVEFSVCAgICAgICAgIDY0NQogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg3OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDdhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Nzd9LApAQCAtNzI5LDggKzc5NCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4N2N9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDdifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg3N30sCi0jZGVmaW5lIENDTV9GVU5DN19FTkQgICAgICAgICAgIDYwMwotI2RlZmluZSBVQ01fQ09NTU9OX1NUQVJUICAgICAgICA2MDMKKyNkZWZpbmUgQ0NNX0ZVTkM3X0VORCAgICAgICAgICAgNjUyCisjZGVmaW5lIFVDTV9DT01NT05fU1RBUlQgICAgICAgIDY1MgogCXtPUF9XUiwgVUNNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgVUNNX1JFR19VUU1fVUNNX0hEUl9QLCAweDIxNTAwMjB9LAogCXtPUF9XUiwgVUNNX1JFR19VUU1fVUNNX0hEUl9TLCAweDIxNTAwMjB9LApAQCAtNzM5LDEwICs4MDQsMTYgQEAKIAl7T1BfV1IsIFVDTV9SRUdfRVJSX0VWTlRfSUQsIDB4MzN9LAogCXtPUF9XUiwgVUNNX1JFR19FWFBSX0VWTlRfSUQsIDB4MzB9LAogCXtPUF9XUiwgVUNNX1JFR19TVE9QX0VWTlRfSUQsIDB4MzF9LAotCXtPUF9XUiwgVUNNX1JFR19UU0VNX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFVDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19UU0VNX1dFSUdIVCwgMHg0fSwKIAl7T1BfV1IsIFVDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4MH0sCisJe09QX1dSLCBVQ01fUkVHX1hTRU1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19ET1JRX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFVDTV9SRUdfQ1BfV0VJR0hULCAweDB9LAotCXtPUF9XUiwgVUNNX1JFR19VUU1fUF9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBVQ01fUkVHX1VTRE1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19VUU1fUF9XRUlHSFQsIDB4N30sCisJe09QX1dSLCBVQ01fUkVHX1VRTV9TX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFVDTV9SRUdfVE1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fVVFNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19JTlZfQ0ZMR19RLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19HUl9BUkJfVFlQRSwgMHgxfSwKQEAgLTc1NiwxNCArODI3LDE0IEBACiAJe09QX1dSLCBVQ01fUkVHX1hYX0lOSVRfQ1JELCAweGV9LAogCXtPUF9XUiwgVUNNX1JFR19YWF9NU0dfTlVNLCAweDFifSwKIAl7T1BfWlIsIFVDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgVUNNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxYjAyNWN9LAotCXtPUF9TV19FMUgsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjc4fSwKKwl7T1BfU1dfRTEsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjY2fSwKKwl7T1BfU1dfRTFILCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDJhMH0sCiAJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MTB9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8yLCAweGZ9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8zLCAweDEwfSwKIAl7T1BfWlJfRTEsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKLQl7T1BfV1JfRTFILCBVQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4ZH0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19OX1NNX0NUWF9MRF80LCAweGJ9LAogCXtPUF9aUl9FMUgsIFVDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX1JFRzBfU1osIDB4M30sCiAJe09QX1dSX0UxLCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKQEAgLTc4Nyw1NiArODU4LDU2IEBACiAJe09QX1dSLCBVQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBVQ01fQ09NTU9OX0VORCAgICAgICAgICA2NTkKLSNkZWZpbmUgVUNNX0ZVTkMwX1NUQVJUICAgICAgICAgNjU5CisjZGVmaW5lIFVDTV9DT01NT05fRU5EICAgICAgICAgIDcxNAorI2RlZmluZSBVQ01fRlVOQzBfU1RBUlQgICAgICAgICA3MTQKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHhlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMwX0VORCAgICAgICAgICAgNjYzCi0jZGVmaW5lIFVDTV9GVU5DMV9TVEFSVCAgICAgICAgIDY2MworI2RlZmluZSBVQ01fRlVOQzBfRU5EICAgICAgICAgICA3MTgKKyNkZWZpbmUgVUNNX0ZVTkMxX1NUQVJUICAgICAgICAgNzE4CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDJlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMxX0VORCAgICAgICAgICAgNjY3Ci0jZGVmaW5lIFVDTV9GVU5DMl9TVEFSVCAgICAgICAgIDY2NworI2RlZmluZSBVQ01fRlVOQzFfRU5EICAgICAgICAgICA3MjIKKyNkZWZpbmUgVUNNX0ZVTkMyX1NUQVJUICAgICAgICAgNzIyCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDFlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMyX0VORCAgICAgICAgICAgNjcxCi0jZGVmaW5lIFVDTV9GVU5DM19TVEFSVCAgICAgICAgIDY3MQorI2RlZmluZSBVQ01fRlVOQzJfRU5EICAgICAgICAgICA3MjYKKyNkZWZpbmUgVUNNX0ZVTkMzX1NUQVJUICAgICAgICAgNzI2CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4M2Z9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDNlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMzX0VORCAgICAgICAgICAgNjc1Ci0jZGVmaW5lIFVDTV9GVU5DNF9TVEFSVCAgICAgICAgIDY3NQorI2RlZmluZSBVQ01fRlVOQzNfRU5EICAgICAgICAgICA3MzAKKyNkZWZpbmUgVUNNX0ZVTkM0X1NUQVJUICAgICAgICAgNzMwCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4NGZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDRlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM0X0VORCAgICAgICAgICAgNjc5Ci0jZGVmaW5lIFVDTV9GVU5DNV9TVEFSVCAgICAgICAgIDY3OQorI2RlZmluZSBVQ01fRlVOQzRfRU5EICAgICAgICAgICA3MzQKKyNkZWZpbmUgVUNNX0ZVTkM1X1NUQVJUICAgICAgICAgNzM0CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDZlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM1X0VORCAgICAgICAgICAgNjgzCi0jZGVmaW5lIFVDTV9GVU5DNl9TVEFSVCAgICAgICAgIDY4MworI2RlZmluZSBVQ01fRlVOQzVfRU5EICAgICAgICAgICA3MzgKKyNkZWZpbmUgVUNNX0ZVTkM2X1NUQVJUICAgICAgICAgNzM4CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4NWZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDVlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM2X0VORCAgICAgICAgICAgNjg3Ci0jZGVmaW5lIFVDTV9GVU5DN19TVEFSVCAgICAgICAgIDY4NworI2RlZmluZSBVQ01fRlVOQzZfRU5EICAgICAgICAgICA3NDIKKyNkZWZpbmUgVUNNX0ZVTkM3X1NUQVJUICAgICAgICAgNzQyCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4N2Z9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDdlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM3X0VORCAgICAgICAgICAgNjkxCi0jZGVmaW5lIFVTRU1fQ09NTU9OX1NUQVJUICAgICAgIDY5MQorI2RlZmluZSBVQ01fRlVOQzdfRU5EICAgICAgICAgICA3NDYKKyNkZWZpbmUgVVNFTV9DT01NT05fU1RBUlQgICAgICAgNzQ2CiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC04ODcsNjkgKzk1OCw3MiBAQAogCXtPUF9XUl9BU0lDLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4MWRjZDY1MDB9LAogCXtPUF9XUl9FTVVMLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjR9LAogCXtPUF9XUl9GUEdBLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjQwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDEwMn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHhjMn0sCiAJe09QX1dSX0VNVUxfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MH0sCiAJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDF9LAogCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTAyfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2U4LCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDIwLCAweGM4fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2QwLCAweDV9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAwLCAweDJ9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDAgKyAweDE0LCAweDEwMjc3fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc2MCwgMHg0fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZTIwLCAweDQyfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzczOCwgMHg5fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY4LCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4ICsgMHgyNCwgMHgxMDI5M30sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2OCArIDB4OCwgMHgyMDI3OH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODAsIDB4NDJ9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMTAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDY0MCwgMHg0MH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg5ODAsIDB4Yzh9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZjAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg5NjAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkOCwgMHg1fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIyOCwgMHg0fSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2Q4ICsgMHgxNCwgMHgxMDI4MX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAsIDB4OX0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWM2MCwgMHgyMH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAgKyAweDI0LCAweDEwMmJifSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjgyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4NDAwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjdhfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCArIDB4OCwgMHgyMDI5NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAgKyAweDgsIDB4MTAyYmN9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwICsgMHhjLCAweDN9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4LCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4ICsgMHg4LCAweDIwMjk2fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCArIDB4OCwgMHgyMDJiZH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMTAsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDc0YzAsIDB4MjAyOTh9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg3NGMwLCAweDIwMmJmfSwKIAl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyN2N9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyOWF9LAorCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDI4NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJjMX0sCiAJe09QX1dSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjhjfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmFhfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMjAwMDB9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjNDAwMDB9LAotCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMjljfSwKLQl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAyYmF9LAotCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSwgMHgzMTFjMDAwMH0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSwgMHgzMTA3MDAwMH0sCi0Je09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzNDUwYzQ3fSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzMGUwYzQyfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM4NTYxOTE5fSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzODliMTkwNn0sCi0Je09QX1dSXzY0X0UxLCBVU0VNX1JFR19QUkFNICsgMHgxN2ZlMCwgMHg1MDA0MDI5ZX0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MTMyMjcyZH0sCi0Je09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgyNTAsIDB4NGZiNjAyYmN9LAotI2RlZmluZSBVU0VNX0NPTU1PTl9FTkQgICAgICAgICA3ODcKLSNkZWZpbmUgVVNFTV9QT1JUMF9TVEFSVCAgICAgICAgNzg3CisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjk0fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmQxfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMzAwMDB9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhkMjAwMDB9LAorCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMmE0fSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDNhOCwgMHhiMDJlMX0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNLCAweDMxNGMwMDAwfSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNLCAweDMxYjYwMDAwfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzVlZjBjNTN9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzY1MDBjNmV9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4MzYxMzE5Y2Z9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM3NTkxYTAyfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDcxMTI3NTR9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDI4NjEyN2Q5fSwKKwl7T1BfV1JfNjRfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE4ZWUwLCAweDRlMjQwMmE2fSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxZmY0MCwgMHg0MDE4MDJlM30sCisjZGVmaW5lIFVTRU1fQ09NTU9OX0VORCAgICAgICAgIDg0MgorI2RlZmluZSBVU0VNX1BPUlQwX1NUQVJUICAgICAgICA4NDIKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHhhMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHhhfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTUwMCwgMHgyOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk1MCwgMHgyZX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk2NDAsIDB4MzR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMDAsIDB4NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk1MDAsIDB4NDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5ODAsIDB4MzB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NzAwLCAweDNjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0NzQwLCAweGI0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQ1MCwgMHhiNH0sCisJe09QX1dSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5MCwgMHgwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFkMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjQwLCAweDR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDgwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDIwLCAweDIwfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4OCwgMHg5Nn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ0MCwgMHg3Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWI2MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4MTJjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzE4LCAweDk4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIzOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI3OCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMDAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMDgsIDB4Y30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMDAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzAwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQwMCwgMHgyMH0sCkBAIC05NjYsMjMgKzEwNDAsMjYgQEAKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWYwMCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiNzgsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTA4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQwX0VORCAgICAgICAgICA4MTgKLSNkZWZpbmUgVVNFTV9QT1JUMV9TVEFSVCAgICAgICAgODE4CisjZGVmaW5lIFVTRU1fUE9SVDBfRU5EICAgICAgICAgIDg3NgorI2RlZmluZSBVU0VNX1BPUlQxX1NUQVJUICAgICAgICA4NzYKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNjgwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTI4MCwgMHhhMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkyOCwgMHhhfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTVhMCwgMHgyOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWEwOCwgMHgyZX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk3MTAsIDB4MzR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMTAsIDB4NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk0MCwgMHgxMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk2MDAsIDB4NDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhNDAsIDB4MzB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5N2YwLCAweDNjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YTEwLCAweGI0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjcyMCwgMHhiNH0sCisJe09QX1dSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFkOCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjUwLCAweDR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTAwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZGEwLCAweDIwfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzRlMCwgMHg5Nn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTYwOCwgMHg3Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWJlMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg0YjAsIDB4MTJjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NTc4LCAweDk4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIzYywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGNjMCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxODAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMzgsIDB4Y30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyODAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzgwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ4MCwgMHgyMH0sCkBAIC05OTksNDAgKzEwNzYsNDggQEAKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWY4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZjYzAsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTM4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQxX0VORCAgICAgICAgICA4NDkKLSNkZWZpbmUgVVNFTV9GVU5DMF9TVEFSVCAgICAgICAgODQ5CisjZGVmaW5lIFVTRU1fUE9SVDFfRU5EICAgICAgICAgIDkxMAorI2RlZmluZSBVU0VNX0ZVTkMwX1NUQVJUICAgICAgICA5MTAKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzMCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxMCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DMF9FTkQgICAgICAgICAgODUxCi0jZGVmaW5lIFVTRU1fRlVOQzFfU1RBUlQgICAgICAgIDg1MQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDE4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMwX0VORCAgICAgICAgICA5MTMKKyNkZWZpbmUgVVNFTV9GVU5DMV9TVEFSVCAgICAgICAgOTEzCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzQsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMTAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzFfRU5EICAgICAgICAgIDg1MwotI2RlZmluZSBVU0VNX0ZVTkMyX1NUQVJUICAgICAgICA4NTMKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyOCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DMV9FTkQgICAgICAgICAgOTE2CisjZGVmaW5lIFVTRU1fRlVOQzJfU1RBUlQgICAgICAgIDkxNgorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM4LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDIwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDMwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkMyX0VORCAgICAgICAgICA4NTUKLSNkZWZpbmUgVVNFTV9GVU5DM19TVEFSVCAgICAgICAgODU1CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzJfRU5EICAgICAgICAgIDkxOQorI2RlZmluZSBVU0VNX0ZVTkMzX1NUQVJUICAgICAgICA5MTkKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzYywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DM19FTkQgICAgICAgICAgODU3Ci0jZGVmaW5lIFVTRU1fRlVOQzRfU1RBUlQgICAgICAgIDg1NworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQ4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMzX0VORCAgICAgICAgICA5MjIKKyNkZWZpbmUgVVNFTV9GVU5DNF9TVEFSVCAgICAgICAgOTIyCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNDAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNDAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNTAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzRfRU5EICAgICAgICAgIDg1OQotI2RlZmluZSBVU0VNX0ZVTkM1X1NUQVJUICAgICAgICA4NTkKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA1OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DNF9FTkQgICAgICAgICAgOTI1CisjZGVmaW5lIFVTRU1fRlVOQzVfU1RBUlQgICAgICAgIDkyNQorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTQ0LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDUwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDYwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkM1X0VORCAgICAgICAgICA4NjEKLSNkZWZpbmUgVVNFTV9GVU5DNl9TVEFSVCAgICAgICAgODYxCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNjgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzVfRU5EICAgICAgICAgIDkyOAorI2RlZmluZSBVU0VNX0ZVTkM2X1NUQVJUICAgICAgICA5MjgKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE0OCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA2MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA3MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DNl9FTkQgICAgICAgICAgODYzCi0jZGVmaW5lIFVTRU1fRlVOQzdfU1RBUlQgICAgICAgIDg2MworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDc4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM2X0VORCAgICAgICAgICA5MzEKKyNkZWZpbmUgVVNFTV9GVU5DN19TVEFSVCAgICAgICAgOTMxCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNGMsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwODAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzdfRU5EICAgICAgICAgIDg2NQotI2RlZmluZSBDU0VNX0NPTU1PTl9TVEFSVCAgICAgICA4NjUKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA4OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DN19FTkQgICAgICAgICAgOTM0CisjZGVmaW5lIENTRU1fQ09NTU9OX1NUQVJUICAgICAgIDkzNAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMTA5MSwyOSArMTE3NiwzMCBAQAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMWU4LCAweDB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YzAsIDB4MjQwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHhjMH0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhMH0sCisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhOH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNzAsIDB4ODB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjgwLCAweDR9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MjgwLCAweDI0MH0sCi0Je09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiODgsIDB4MjAwMmJlfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjcwMCwgMHgxMDB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MDAwLCAweDQwMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMDgsIDB4MjAwMmU1fSwKIAl7T1BfV1IsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxM2ZmZmZmfSwKLQl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyYTh9LAotCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyZGV9LAorCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJiMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMwNX0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmI4fSwKLQl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmVlfSwKLQl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZTAwMDB9LAotCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZjAwMDB9LAotCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmM4fSwKLQl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAyZmV9LAotCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjU4MDAwMH0sCi0Je09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMWZhMDAwMH0sCi0Je09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE4MjcwYzk2fSwKLQl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE5MDQwYzdmfSwKLQl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGIyMTAsIDB4NjgyNDAyY2F9LAotCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGI0MzAsIDB4NjdlMDAzMDB9LAotI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICA5NDQKLSNkZWZpbmUgQ1NFTV9QT1JUMF9TVEFSVCAgICAgICAgOTQ0CisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmMwfSwKKwl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMzE1fSwKKwl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg3MTAwMDB9LAorCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg3NDAwMDB9LAorCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmQwfSwKKwl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAzMjV9LAorCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjI5MDAwMH0sCisJe09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMjI2MDAwMH0sCisJe09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDIzNjMwYzhifSwKKwl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDI0NmUwYzhhfSwKKwl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGM5MzAsIDB4NjU0MDAyZDJ9LAorCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGNiYjAsIDB4NjRmMDAzMjd9LAorI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICAxMDE0CisjZGVmaW5lIENTRU1fUE9SVDBfU1RBUlQgICAgICAgIDEwMTQKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwMCwgMHhhMH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCkBAIC0xMTIzLDExICsxMjA5LDEwIEBACiAJe09QX1dSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHg2fSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzAwLCAweGV9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MDQwLCAweDMwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQwLCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MTAsIDB4MzB9LAotI2RlZmluZSBDU0VNX1BPUlQwX0VORCAgICAgICAgICA5NTYKLSNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgOTU2CisjZGVmaW5lIENTRU1fUE9SVDBfRU5EICAgICAgICAgIDEwMjUKKyNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgMTAyNQogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE2ODAsIDB4YTB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MjgwLCAweGEwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTQwLCAweDEwfSwKQEAgLTExMzcsNDYgKzEyMjIsNTMgQEAKIAl7T1BfV1JfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTFjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDU4LCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzMzgsIDB4ZX0sCi0Je09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxMDAsIDB4MzB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNTgsIDB4Nn0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRkMCwgMHgzMH0sCi0jZGVmaW5lIENTRU1fUE9SVDFfRU5EICAgICAgICAgIDk2OAotI2RlZmluZSBDU0VNX0ZVTkMwX1NUQVJUICAgICAgICA5NjgKKyNkZWZpbmUgQ1NFTV9QT1JUMV9FTkQgICAgICAgICAgMTAzNgorI2RlZmluZSBDU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxMDM2CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzBfRU5EICAgICAgICAgIDk3MAotI2RlZmluZSBDU0VNX0ZVTkMxX1NUQVJUICAgICAgICA5NzAKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjA0MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzBfRU5EICAgICAgICAgIDEwMzkKKyNkZWZpbmUgQ1NFTV9GVU5DMV9TVEFSVCAgICAgICAgMTAzOQogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTRjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkMxX0VORCAgICAgICAgICA5NzIKLSNkZWZpbmUgQ1NFTV9GVU5DMl9TVEFSVCAgICAgICAgOTcyCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxMDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkMxX0VORCAgICAgICAgICAxMDQyCisjZGVmaW5lIENTRU1fRlVOQzJfU1RBUlQgICAgICAgIDEwNDIKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1MCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMxMCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DMl9FTkQgICAgICAgICAgOTc0Ci0jZGVmaW5lIENTRU1fRlVOQzNfU1RBUlQgICAgICAgIDk3NAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MWMwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DMl9FTkQgICAgICAgICAgMTA0NQorI2RlZmluZSBDU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxMDQ1CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNTQsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMTgsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzNfRU5EICAgICAgICAgIDk3NgotI2RlZmluZSBDU0VNX0ZVTkM0X1NUQVJUICAgICAgICA5NzYKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjI4MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzNfRU5EICAgICAgICAgIDEwNDgKKyNkZWZpbmUgQ1NFTV9GVU5DNF9TVEFSVCAgICAgICAgMTA0OAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTU4LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzIwLCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM0X0VORCAgICAgICAgICA5NzgKLSNkZWZpbmUgQ1NFTV9GVU5DNV9TVEFSVCAgICAgICAgOTc4CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYzNDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM0X0VORCAgICAgICAgICAxMDUxCisjZGVmaW5lIENTRU1fRlVOQzVfU1RBUlQgICAgICAgIDEwNTEKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1YywgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMyOCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DNV9FTkQgICAgICAgICAgOTgwCi0jZGVmaW5lIENTRU1fRlVOQzZfU1RBUlQgICAgICAgIDk4MAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2NDAwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DNV9FTkQgICAgICAgICAgMTA1NAorI2RlZmluZSBDU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxMDU0CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNjAsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMzAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzZfRU5EICAgICAgICAgIDk4MgotI2RlZmluZSBDU0VNX0ZVTkM3X1NUQVJUICAgICAgICA5ODIKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjRjMCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzZfRU5EICAgICAgICAgIDEwNTcKKyNkZWZpbmUgQ1NFTV9GVU5DN19TVEFSVCAgICAgICAgMTA1NwogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTY0LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzM4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM3X0VORCAgICAgICAgICA5ODQKLSNkZWZpbmUgWFBCX0NPTU1PTl9TVEFSVCAgICAgICAgOTg0CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDY1ODAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM3X0VORCAgICAgICAgICAxMDYwCisjZGVmaW5lIFhQQl9DT01NT05fU1RBUlQgICAgICAgIDEwNjAKIAl7T1BfV1IsIEdSQ0JBU0VfWFBCICsgUEJfUkVHX0NPTlRST0wsIDB4MjB9LAotI2RlZmluZSBYUEJfQ09NTU9OX0VORCAgICAgICAgICA5ODUKLSNkZWZpbmUgRFFfQ09NTU9OX1NUQVJUICAgICAgICAgOTg1CisjZGVmaW5lIFhQQl9DT01NT05fRU5EICAgICAgICAgIDEwNjEKKyNkZWZpbmUgRFFfQ09NTU9OX1NUQVJUICAgICAgICAgMTA2MQogCXtPUF9XUiwgRE9SUV9SRUdfTU9ERV9BQ1QsIDB4Mn0sCiAJe09QX1dSLCBET1JRX1JFR19OT1JNX0NJRF9PRlNULCAweDN9LAogCXtPUF9XUiwgRE9SUV9SRUdfT1VUU1RfUkVRLCAweDR9LApAQCAtMTE5NSw4ICsxMjg3LDggQEAKIAl7T1BfV1IsIERPUlFfUkVHX0RRX0ZJRk9fQUZVTExfVEgsIDB4NzZjfSwKIAl7T1BfV1IsIERPUlFfUkVHX1JFR04sIDB4N2MxMDA0fSwKIAl7T1BfV1IsIERPUlFfUkVHX0lGX0VOLCAweGZ9LAotI2RlZmluZSBEUV9DT01NT05fRU5EICAgICAgICAgICAxMDAzCi0jZGVmaW5lIFRJTUVSU19DT01NT05fU1RBUlQgICAgIDEwMDMKKyNkZWZpbmUgRFFfQ09NTU9OX0VORCAgICAgICAgICAgMTA3OQorI2RlZmluZSBUSU1FUlNfQ09NTU9OX1NUQVJUICAgICAxMDc5CiAJe09QX1pSLCBUTV9SRUdfQ0xJTl9QUklPUjBfQ0xJRU5ULCAweDJ9LAogCXtPUF9XUiwgVE1fUkVHX0xJTl9TRVRDTFJfRklGT19BTEZVTExfVEhSLCAweDFjfSwKIAl7T1BfV1IsIFRNX1JFR19DRkNfQUNfQ1JEQ05UX1ZBTCwgMHgxfSwKQEAgLTEyMTksMTQgKzEzMTEsMTggQEAKIAl7T1BfV1IsIFRNX1JFR19FTl9DTDBfSU5QVVQsIDB4MX0sCiAJe09QX1dSLCBUTV9SRUdfRU5fQ0wxX0lOUFVULCAweDF9LAogCXtPUF9XUiwgVE1fUkVHX0VOX0NMMl9JTlBVVCwgMHgxfSwKLSNkZWZpbmUgVElNRVJTX0NPTU1PTl9FTkQgICAgICAgMTAyNQotI2RlZmluZSBUSU1FUlNfUE9SVDBfU1RBUlQgICAgICAxMDI1CisjZGVmaW5lIFRJTUVSU19DT01NT05fRU5EICAgICAgIDExMDEKKyNkZWZpbmUgVElNRVJTX1BPUlQwX1NUQVJUICAgICAgMTEwMQorCXtPUF9XUiwgVE1fUkVHX0xJTjBfTE9HSUNfQUREUiwgMHgwfSwKKwl7T1BfV1IsIFRNX1JFR19MSU4wX1BIWV9BRERSX1ZBTElELCAweDB9LAogCXtPUF9aUiwgVE1fUkVHX0xJTjBfUEhZX0FERFIsIDB4Mn0sCi0jZGVmaW5lIFRJTUVSU19QT1JUMF9FTkQgICAgICAgIDEwMjYKLSNkZWZpbmUgVElNRVJTX1BPUlQxX1NUQVJUICAgICAgMTAyNgorI2RlZmluZSBUSU1FUlNfUE9SVDBfRU5EICAgICAgICAxMTA0CisjZGVmaW5lIFRJTUVSU19QT1JUMV9TVEFSVCAgICAgIDExMDQKKwl7T1BfV1IsIFRNX1JFR19MSU4xX0xPR0lDX0FERFIsIDB4MH0sCisJe09QX1dSLCBUTV9SRUdfTElOMV9QSFlfQUREUl9WQUxJRCwgMHgwfSwKIAl7T1BfWlIsIFRNX1JFR19MSU4xX1BIWV9BRERSLCAweDJ9LAotI2RlZmluZSBUSU1FUlNfUE9SVDFfRU5EICAgICAgICAxMDI3Ci0jZGVmaW5lIFhTRE1fQ09NTU9OX1NUQVJUICAgICAgIDEwMjcKKyNkZWZpbmUgVElNRVJTX1BPUlQxX0VORCAgICAgICAgMTEwNworI2RlZmluZSBYU0RNX0NPTU1PTl9TVEFSVCAgICAgICAxMTA3CiAJe09QX1dSX0UxLCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NjE0fSwKIAl7T1BfV1JfRTFILCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDI0fSwKIAl7T1BfV1JfRTEsIFhTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NjAwfSwKQEAgLTEyNDksNyArMTM0NSw5IEBACiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzksIDB4Mjl9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMCwgMHgyYX0sCiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExLCAweDJifSwKLQl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIsIDB4NTR9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMiwgMHgyY30sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzLCAweDJkfSwKKwl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQsIDB4NTJ9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzAsIDB4MX0sCiAJe09QX1pSLCBYU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgxZn0sCiAJe09QX1dSLCBYU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LApAQCAtMTI3NCw4ICsxMzcyLDggQEAKIAl7T1BfV1JfQVNJQywgWFNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBYU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBYU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBYU0RNX0NPTU1PTl9FTkQgICAgICAgICAxMDc0Ci0jZGVmaW5lIFFNX0NPTU1PTl9TVEFSVCAgICAgICAgIDEwNzQKKyNkZWZpbmUgWFNETV9DT01NT05fRU5EICAgICAgICAgMTE1NgorI2RlZmluZSBRTV9DT01NT05fU1RBUlQgICAgICAgICAxMTU2CiAJe09QX1dSLCBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8wLCAweDZ9LAogCXtPUF9XUiwgUU1fUkVHX0FDVENUUklOSVRWQUxfMSwgMHg1fSwKIAl7T1BfV1IsIFFNX1JFR19BQ1RDVFJJTklUVkFMXzIsIDB4YX0sCkBAIC0xNTc2LDggKzE2NzQsOCBAQAogCXtPUF9XUl9FMUgsIFFNX1JFR19QUTJQQ0lGVU5DXzYsIDB4NX0sCiAJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfNywgMHg3fSwKIAl7T1BfV1IsIFFNX1JFR19DTUlOVEVOLCAweGZmfSwKLSNkZWZpbmUgUU1fQ09NTU9OX0VORCAgICAgICAgICAgMTM3NAotI2RlZmluZSBQQkZfQ09NTU9OX1NUQVJUICAgICAgICAxMzc0CisjZGVmaW5lIFFNX0NPTU1PTl9FTkQgICAgICAgICAgIDE0NTYKKyNkZWZpbmUgUEJGX0NPTU1PTl9TVEFSVCAgICAgICAgMTQ1NgogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfTEJfRU5BQkxFLCAweDF9LApAQCAtMTU4NSwyMCArMTY4MywyMCBAQAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDQsIDB4MH0sCi0jZGVmaW5lIFBCRl9DT01NT05fRU5EICAgICAgICAgIDEzODEKLSNkZWZpbmUgUEJGX1BPUlQwX1NUQVJUICAgICAgICAgMTM4MQorI2RlZmluZSBQQkZfQ09NTU9OX0VORCAgICAgICAgICAxNDYzCisjZGVmaW5lIFBCRl9QT1JUMF9TVEFSVCAgICAgICAgIDE0NjMKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMCwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0lGMF9FTkFCTEUsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDAsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCwgMHgwfSwKLSNkZWZpbmUgUEJGX1BPUlQwX0VORCAgICAgICAgICAgMTM4NQotI2RlZmluZSBQQkZfUE9SVDFfU1RBUlQgICAgICAgICAxMzg1CisjZGVmaW5lIFBCRl9QT1JUMF9FTkQgICAgICAgICAgIDE0NjcKKyNkZWZpbmUgUEJGX1BPUlQxX1NUQVJUICAgICAgICAgMTQ2NwogCXtPUF9XUiwgUEJGX1JFR19JTklUX1AxLCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfSUYxX0VOQUJMRSwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMSwgMHgwfSwKIAl7T1BfV1IsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AxLCAweDB9LAotI2RlZmluZSBQQkZfUE9SVDFfRU5EICAgICAgICAgICAxMzg5Ci0jZGVmaW5lIFhDTV9DT01NT05fU1RBUlQgICAgICAgIDEzODkKKyNkZWZpbmUgUEJGX1BPUlQxX0VORCAgICAgICAgICAgMTQ3MQorI2RlZmluZSBYQ01fQ09NTU9OX1NUQVJUICAgICAgICAxNDcxCiAJe09QX1dSLCBYQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9YQ01fSERSX1AsIDB4MzE1MDAyMH0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9YQ01fSERSX1MsIDB4MzE1MDAyMH0sCkBAIC0xNjA3LDE1ICsxNzA1LDE4IEBACiAJe09QX1dSLCBYQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKIAl7T1BfV1IsIFhDTV9SRUdfRVhQUl9FVk5UX0lELCAweDMwfSwKIAl7T1BfV1IsIFhDTV9SRUdfU1RPUF9FVk5UX0lELCAweDMxfSwKLQl7T1BfV1IsIFhDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19UU0VNX1dFSUdIVCwgMHg1fSwKLQl7T1BfV1IsIFhDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1VTRU1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19QQkZfV0VJR0hULCAweDd9LAotCXtPUF9XUiwgWENNX1JFR19OSUcxX1dFSUdIVCwgMHgxfSwKKwl7T1BfV1IsIFhDTV9SRUdfU1RPUk1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19UU0VNX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFhDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBYQ01fUkVHX1VTRU1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19ET1JRX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFhDTV9SRUdfUEJGX1dFSUdIVCwgMHgwfSwKKwl7T1BfV1IsIFhDTV9SRUdfTklHMF9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBYQ01fUkVHX0NQX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIFhDTV9SRUdfWFNETV9XRUlHSFQsIDB4NX0sCi0Je09QX1dSLCBYQ01fUkVHX1hRTV9QX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFhDTV9SRUdfWFNETV9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBYQ01fUkVHX1hRTV9QX1dFSUdIVCwgMHg0fSwKKwl7T1BfV1IsIFhDTV9SRUdfWFFNX1NfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgWENNX1JFR19UTV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9YUU1fVVNFX1EsIDB4MX0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9CWVBfQUNUX1VQRCwgMHg2fSwKIAl7T1BfV1IsIFhDTV9SRUdfVU5BX0dUX05YVF9RLCAweDB9LApAQCAtMTYzMywxNCArMTczNCwxNCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19YWF9NU0dfTlVNLCAweDFmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1hYX01TR19OVU0sIDB4MjB9LAogCXtPUF9aUiwgWENNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXX0UxLCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDJjY30sCi0Je09QX1NXX0UxSCwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAzMDJ9LAorCXtPUF9TV19FMSwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAyZDR9LAorCXtPUF9TV19FMUgsIFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWYwMzI5fSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMCwgMHhmfSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMSwgMHg3fSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMiwgMHhifSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMywgMHhlfSwKIAl7T1BfWlJfRTEsIFhDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKLQl7T1BfV1JfRTFILCBYQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4Y30sCisJe09QX1dSX0UxSCwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweGV9LAogCXtPUF9aUl9FMUgsIFhDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX1JFRzBfU1osIDB4NH0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9TVE9STTBfSUZFTiwgMHgxfSwKQEAgLTE2NjMsOCArMTc2NCw4IEBACiAJe09QX1dSLCBYQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgWENNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBYQ01fQ09NTU9OX0VORCAgICAgICAgICAxNDUzCi0jZGVmaW5lIFhDTV9QT1JUMF9TVEFSVCAgICAgICAgIDE0NTMKKyNkZWZpbmUgWENNX0NPTU1PTl9FTkQgICAgICAgICAgMTUzOAorI2RlZmluZSBYQ01fUE9SVDBfU1RBUlQgICAgICAgICAxNTM4CiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTY3Myw4ICsxNzc0LDggQEAKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDEwLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCi0jZGVmaW5lIFhDTV9QT1JUMF9FTkQgICAgICAgICAgIDE0NjEKLSNkZWZpbmUgWENNX1BPUlQxX1NUQVJUICAgICAgICAgMTQ2MQorI2RlZmluZSBYQ01fUE9SVDBfRU5EICAgICAgICAgICAxNTQ2CisjZGVmaW5lIFhDTV9QT1JUMV9TVEFSVCAgICAgICAgIDE1NDYKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNjgzLDggKzE3ODQsOCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfQ01EMTEsIDB4Mn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKLSNkZWZpbmUgWENNX1BPUlQxX0VORCAgICAgICAgICAgMTQ2OQotI2RlZmluZSBYQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNDY5CisjZGVmaW5lIFhDTV9QT1JUMV9FTkQgICAgICAgICAgIDE1NTQKKyNkZWZpbmUgWENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTU1NAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE2OTQsOCArMTc5NSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzBfRU5EICAgICAgICAgICAxNDc4Ci0jZGVmaW5lIFhDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE0NzgKKyNkZWZpbmUgWENNX0ZVTkMwX0VORCAgICAgICAgICAgMTU2MworI2RlZmluZSBYQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNTYzCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTcwNSw4ICsxODA2LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DMV9FTkQgICAgICAgICAgIDE0ODcKLSNkZWZpbmUgWENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTQ4NworI2RlZmluZSBYQ01fRlVOQzFfRU5EICAgICAgICAgICAxNTcyCisjZGVmaW5lIFhDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE1NzIKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNzE2LDggKzE4MTcsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkMyX0VORCAgICAgICAgICAgMTQ5NgotI2RlZmluZSBYQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNDk2CisjZGVmaW5lIFhDTV9GVU5DMl9FTkQgICAgICAgICAgIDE1ODEKKyNkZWZpbmUgWENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTU4MQogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE3MjcsOCArMTgyOCw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzNfRU5EICAgICAgICAgICAxNTA1Ci0jZGVmaW5lIFhDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE1MDUKKyNkZWZpbmUgWENNX0ZVTkMzX0VORCAgICAgICAgICAgMTU5MAorI2RlZmluZSBYQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTkwCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTczOCw4ICsxODM5LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DNF9FTkQgICAgICAgICAgIDE1MTQKLSNkZWZpbmUgWENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTUxNAorI2RlZmluZSBYQ01fRlVOQzRfRU5EICAgICAgICAgICAxNTk5CisjZGVmaW5lIFhDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE1OTkKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNzQ5LDggKzE4NTAsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkM1X0VORCAgICAgICAgICAgMTUyMwotI2RlZmluZSBYQ01fRlVOQzZfU1RBUlQgICAgICAgICAxNTIzCisjZGVmaW5lIFhDTV9GVU5DNV9FTkQgICAgICAgICAgIDE2MDgKKyNkZWZpbmUgWENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTYwOAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE3NjAsOCArMTg2MSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzZfRU5EICAgICAgICAgICAxNTMyCi0jZGVmaW5lIFhDTV9GVU5DN19TVEFSVCAgICAgICAgIDE1MzIKKyNkZWZpbmUgWENNX0ZVTkM2X0VORCAgICAgICAgICAgMTYxNworI2RlZmluZSBYQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNjE3CiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTc3MSw4ICsxODcyLDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DN19FTkQgICAgICAgICAgIDE1NDEKLSNkZWZpbmUgWFNFTV9DT01NT05fU1RBUlQgICAgICAgMTU0MQorI2RlZmluZSBYQ01fRlVOQzdfRU5EICAgICAgICAgICAxNjI2CisjZGVmaW5lIFhTRU1fQ09NTU9OX1NUQVJUICAgICAgIDE2MjYKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTE4MjcsMTAgKzE5MjgsMTIgQEAKIAl7T1BfV1JfQVNJQywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDFkY2Q2NTAwfSwKIAl7T1BfV1JfRU1VTF9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKIAl7T1BfV1JfRlBHQSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0MH0sCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2QwMCwgMHg0fSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDYwLCAweDR9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgxfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDYwICsgMHgxMCwgMHgyMDJmM30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YzgsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0OH0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4NH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YzggKyAweDEwLCAweDIwMzQ4fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDIwLCAweGM4fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjA4MCwgMHg0OH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKQEAgLTE4MzksNjggKzE5NDIsNzMgQEAKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzY4LCAweDB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMWE4LCAweDg2fSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzcwLCAweDIwMmVifSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzcwLCAweDIwMmY1fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgyMH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I5MCwgMHg0MDJlZH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I5MCwgMHg0MDJmN30sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzYzgsIDB4MH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2UyMCwgMHgyMDJmYn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzZDAsIDB4MjAzNGF9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MTgsIDB4MX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzZDAsIDB4MjAzMjF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzRjfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzIzfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmMyMCwgMHgwfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4LCAweDB9LAotCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWM4LCAweDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZjF9LAotCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWI4LCAweDB9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzEwLCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZmR9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzA4LCAweDIwMzUwfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWMwLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDEwLCAweDF9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMDAsIDB4NH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNDAsIDB4MTB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmNTAsIDB4MjAyZjN9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDEwMDMyN30sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWY0OCwgMHgyMDJmZn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4MTAwMzUyfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIwMCwgMHg0fSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODNiMCwgMHgyMDMzN30sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg0MDgsIDB4MjAzNjJ9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJmNX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMzOX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzAxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzY0fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMwNX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzQ5fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMxMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzc0fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgyMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDMwZH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzYwLCAweDgwMzUxfSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhhOTAwMDB9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhhYzAwMDB9LAotCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMzE1fSwKLQl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAzNTl9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSwgMHgzNDRlMDAwMH0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSwgMHgzNDYyMDAwMH0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4ODQwZDE0fSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4MjQwZDE5fSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNlNzExYjM1fSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzZTk3MWIyMn0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgxZGQwMmFkMn0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MjE1NDJhYzh9LAotCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MWMwZDAsIDB4NDdlNjAzMTd9LAotCXtPUF9XUl82NF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDFjOGQwLCAweDQ2ZTYwMzVifSwKLSNkZWZpbmUgWFNFTV9DT01NT05fRU5EICAgICAgICAgMTY1MQotI2RlZmluZSBYU0VNX1BPUlQwX1NUQVJUICAgICAgICAxNjUxCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JhMCwgMHgxMH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzMTl9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDM3Y30sCisJe09QX1pQX0UxLCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YjUwMDAwfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YmQwMDAwfSwKKwl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDMyMX0sCisJe09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzYTgsIDB4YjAzODR9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSwgMHgzMzY2MDAwMH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSwgMHgzNDA2MDAwMH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4YjMwY2RhfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM3OTYwZDAyfSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNiYjExYjA3fSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzYmMzMWFlOH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgyYTI2MjlmNH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MzgyNjI5ZDl9LAorCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MWQ2YzAsIDB4NDUyODAzMjN9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDIwMDAwLCAweDEyNDUzN2UzfSwKKwl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19QUkFNICsgMHgyMjIyMCwgMHgzYmJjMDM4Nn0sCisjZGVmaW5lIFhTRU1fQ09NTU9OX0VORCAgICAgICAgIDE3NDEKKyNkZWZpbmUgWFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMTc0MQorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiYTAsIDB4MTR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjMDAwLCAweGZjfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzIwLCAweDFjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRhOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M0MCwgMHgyNH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0YTgsIDB4MTR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YX0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1MjgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNTQ4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDUwLCAweDZ9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjA4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjY2OCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM3OCwgMHhmY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2ZTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNzg4LCAweDI0fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjU4LCAweDB9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyN2M4LCAweDFjfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDEwLCAweDEwMDMxOX0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4MjR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkNzgsIDB4MjAzMjV9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMDAwLCAweDI4fSwKLQl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODgsIDB4MTAwMzI3fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE0MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWUwLCAweDIwMzg4fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA4LCAweDF9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDF9LAogCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjAsIDB4Mn0sCkBAIC0xOTEwLDMxICsyMDE4LDMzIEBACiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgwfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwOCwgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweGV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWM4LCAweDIwMzVkfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjOCwgMHgyMDM4YX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHgxfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIxMCwgMHg0Mn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjOCwgMHgyMDMyOX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjOCwgMHgyMDMzN30sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMjAsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIxMCwgMHg0Mn0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQyMCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMF9FTkQgICAgICAgICAgMTY4MwotI2RlZmluZSBYU0VNX1BPUlQxX1NUQVJUICAgICAgICAxNjgzCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JlMCwgMHgxMH0sCisjZGVmaW5lIFhTRU1fUE9SVDBfRU5EICAgICAgICAgIDE3NzUKKyNkZWZpbmUgWFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMTc3NQorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiZjAsIDB4MTR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjM2YwLCAweGZjfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzkwLCAweDFjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRlOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2NkMCwgMHgyNH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZjgsIDB4MTR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MjgsIDB4YX0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1OTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNWQ4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjc4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjZmOCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc2OCwgMHhmY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3NTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODE4LCAweDI0fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjVjLCAweDB9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODM4LCAweDFjfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDUwLCAweDEwMDMyYn0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MzgsIDB4MjR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODAsIDB4MjAzMzl9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMGEwLCAweDI4fSwKLQl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkYzgsIDB4MTAwMzNifSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE3MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWU4LCAweDIwMzhjfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTBjLCAweDF9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDA0LCAweDF9LAogCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4Mn0sCkBAIC0xOTQ0LDY4ICsyMDU0LDY4IEBACiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0NCwgMHgwfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwYywgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDgwLCAweGV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWQwLCAweDIwMzVmfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFkMCwgMHgyMDM4ZX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiYywgMHgxfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmMxOCwgMHg0Mn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDMzYn0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDM0Yn0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMzAsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGMxOCwgMHg0Mn0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQzMCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMV9FTkQgICAgICAgICAgMTcxNQotI2RlZmluZSBYU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxNzE1CisjZGVmaW5lIFhTRU1fUE9SVDFfRU5EICAgICAgICAgIDE4MDkKKyNkZWZpbmUgWFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMTgwOQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2UwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGI4LCAweDEwMDM2MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZjAsIDB4MTAwMzkwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0OCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMF9FTkQgICAgICAgICAgMTcxOAotI2RlZmluZSBYU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxNzE4CisjZGVmaW5lIFhTRU1fRlVOQzBfRU5EICAgICAgICAgIDE4MTIKKyNkZWZpbmUgWFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMTgxMgogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2U0LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGY4LCAweDEwMDM3MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzAsIDB4MTAwM2EwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMV9FTkQgICAgICAgICAgMTcyMQotI2RlZmluZSBYU0VNX0ZVTkMyX1NUQVJUICAgICAgICAxNzIxCisjZGVmaW5lIFhTRU1fRlVOQzFfRU5EICAgICAgICAgIDE4MTUKKyNkZWZpbmUgWFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMTgxNQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2U4LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTM4LCAweDEwMDM4MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNzAsIDB4MTAwM2IwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMl9FTkQgICAgICAgICAgMTcyNAotI2RlZmluZSBYU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxNzI0CisjZGVmaW5lIFhTRU1fRlVOQzJfRU5EICAgICAgICAgIDE4MTgKKyNkZWZpbmUgWFNFTV9GVU5DM19TVEFSVCAgICAgICAgMTgxOAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2VjLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTc4LCAweDEwMDM5MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhYjAsIDB4MTAwM2MwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBmMCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DM19FTkQgICAgICAgICAgMTcyNwotI2RlZmluZSBYU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxNzI3CisjZGVmaW5lIFhTRU1fRlVOQzNfRU5EICAgICAgICAgIDE4MjEKKyNkZWZpbmUgWFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMTgyMQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2YwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWI4LCAweDEwMDNhMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhZjAsIDB4MTAwM2QwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTEyOCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNF9FTkQgICAgICAgICAgMTczMAotI2RlZmluZSBYU0VNX0ZVTkM1X1NUQVJUICAgICAgICAxNzMwCisjZGVmaW5lIFhTRU1fRlVOQzRfRU5EICAgICAgICAgIDE4MjQKKyNkZWZpbmUgWFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMTgyNAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2Y0LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWY4LCAweDEwMDNiMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiMzAsIDB4MTAwM2UwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE2MCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNV9FTkQgICAgICAgICAgMTczMwotI2RlZmluZSBYU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxNzMzCisjZGVmaW5lIFhTRU1fRlVOQzVfRU5EICAgICAgICAgIDE4MjcKKyNkZWZpbmUgWFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMTgyNwogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2Y4LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM4LCAweDEwMDNjMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzAsIDB4MTAwM2YwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE5OCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNl9FTkQgICAgICAgICAgMTczNgotI2RlZmluZSBYU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxNzM2CisjZGVmaW5lIFhTRU1fRlVOQzZfRU5EICAgICAgICAgIDE4MzAKKyNkZWZpbmUgWFNFTV9GVU5DN19TVEFSVCAgICAgICAgMTgzMAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2ZjLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTc4LCAweDEwMDNkMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiYjAsIDB4MTAwNDAwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFkMCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DN19FTkQgICAgICAgICAgMTczOQotI2RlZmluZSBDRFVfQ09NTU9OX1NUQVJUICAgICAgICAxNzM5CisjZGVmaW5lIFhTRU1fRlVOQzdfRU5EICAgICAgICAgIDE4MzMKKyNkZWZpbmUgQ0RVX0NPTU1PTl9TVEFSVCAgICAgICAgMTgzMwogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ09OVFJPTDAsIDB4MX0sCiAJe09QX1dSX0UxSCwgQ0RVX1JFR19NRl9NT0RFLCAweDF9LAogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ0hLX01BU0swLCAweDNkMDAwfSwKIAl7T1BfV1IsIENEVV9SRUdfQ0RVX0NIS19NQVNLMSwgMHgzZH0sCi0Je09QX1dCX0UxLCBDRFVfUkVHX0wxVFQsIDB4MjAwMDMzZH0sCi0Je09QX1dCX0UxSCwgQ0RVX1JFR19MMVRULCAweDIwMDAzZTF9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRULCAweDIwMDUzZH0sCi0Je09QX1dCX0UxSCwgQ0RVX1JFR19NQVRULCAweDI4MDVlMX0sCisJe09QX1dCX0UxLCBDRFVfUkVHX0wxVFQsIDB4MjAwMDM0ZH0sCisJe09QX1dCX0UxSCwgQ0RVX1JFR19MMVRULCAweDIwMDA0MTB9LAorCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRULCAweDIwMDU0ZH0sCisJe09QX1dCX0UxSCwgQ0RVX1JFR19NQVRULCAweDI4MDYxMH0sCiAJe09QX1pSX0UxLCBDRFVfUkVHX01BVFQgKyAweDgwLCAweDJ9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRUICsgMHg4OCwgMHg2MDU1ZH0sCisJe09QX1dCX0UxLCBDRFVfUkVHX01BVFQgKyAweDg4LCAweDYwNTZkfSwKIAl7T1BfWlIsIENEVV9SRUdfTUFUVCArIDB4YTAsIDB4MTh9LAotI2RlZmluZSBDRFVfQ09NTU9OX0VORCAgICAgICAgICAxNzUwCi0jZGVmaW5lIERNQUVfQ09NTU9OX1NUQVJUICAgICAgIDE3NTAKKyNkZWZpbmUgQ0RVX0NPTU1PTl9FTkQgICAgICAgICAgMTg0NAorI2RlZmluZSBETUFFX0NPTU1PTl9TVEFSVCAgICAgICAxODQ0CiAJe09QX1pSLCBETUFFX1JFR19DTURfTUVNLCAweGUwfSwKIAl7T1BfV1IsIERNQUVfUkVHX0NSQzE2Q19JTklULCAweDB9LAogCXtPUF9XUiwgRE1BRV9SRUdfQ1JDMTZUMTBfSU5JVCwgMHgxfSwKQEAgLTIwMTMsMjQgKzIxMjMsMjcgQEAKIAl7T1BfV1JfRTFILCBETUFFX1JFR19QWFBfUkVRX0lOSVRfQ1JELCAweDJ9LAogCXtPUF9XUiwgRE1BRV9SRUdfUENJX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBETUFFX1JFR19HUkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgRE1BRV9DT01NT05fRU5EICAgICAgICAgMTc1NwotI2RlZmluZSBQWFBfQ09NTU9OX1NUQVJUICAgICAgICAxNzU3Ci0Je09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNTYzfSwKLQl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNjA5fSwKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MjAsIDB4NTA1Njh9LAotCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNjBlfSwKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNTZkfSwKLSNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTc2MgotI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxNzYyCisjZGVmaW5lIERNQUVfQ09NTU9OX0VORCAgICAgICAgIDE4NTEKKyNkZWZpbmUgUFhQX0NPTU1PTl9TVEFSVCAgICAgICAgMTg1MQorCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDU3M30sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDYzOH0sCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDIwLCAweDUwNTc4fSwKKwl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDYzZH0sCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDU3ZH0sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDIwLCAweDUwNjQyfSwKKyNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTg1NworI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxODU3CiAJe09QX1pSX0UxSCwgQ0ZDX1JFR19MSU5LX0xJU1QsIDB4MTAwfSwKIAl7T1BfV1IsIENGQ19SRUdfQ09OVFJPTDAsIDB4MTB9LAogCXtPUF9XUiwgQ0ZDX1JFR19ESVNBQkxFX09OX0VSUk9SLCAweDNmZmZ9LAorCXtPUF9XUiwgQ0ZDX1JFR19JTlRFUkZBQ0VTLCAweDI4MDAwMH0sCiAJe09QX1dSLCBDRkNfUkVHX0xDUkVRX1dFSUdIVFMsIDB4ODQ5MjRhfSwKLSNkZWZpbmUgQ0ZDX0NPTU1PTl9FTkQgICAgICAgICAgMTc2NgotI2RlZmluZSBIQ19DT01NT05fU1RBUlQgICAgICAgICAxNzY2CisJe09QX1dSLCBDRkNfUkVHX0lOVEVSRkFDRVMsIDB4MH0sCisjZGVmaW5lIENGQ19DT01NT05fRU5EICAgICAgICAgIDE4NjMKKyNkZWZpbmUgSENfQ09NTU9OX1NUQVJUICAgICAgICAgMTg2MwogCXtPUF9aUl9FMSwgSENfUkVHX1VTVE9STV9BRERSX0ZPUl9DT0FMRVNDRSwgMHg0fSwKLSNkZWZpbmUgSENfQ09NTU9OX0VORCAgICAgICAgICAgMTc2NwotI2RlZmluZSBIQ19QT1JUMF9TVEFSVCAgICAgICAgICAxNzY3CisjZGVmaW5lIEhDX0NPTU1PTl9FTkQgICAgICAgICAgIDE4NjQKKyNkZWZpbmUgSENfUE9SVDBfU1RBUlQgICAgICAgICAgMTg2NAogCXtPUF9XUl9FMSwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9aUl9FMSwgSENfUkVHX1VDX1JBTV9BRERSXzAsIDB4Mn0sCiAJe09QX1dSX0UxLCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjA0OSw4ICsyMTYyLDggQEAKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDBfRU5EICAgICAgICAgICAgMTc4NQotI2RlZmluZSBIQ19QT1JUMV9TVEFSVCAgICAgICAgICAxNzg1CisjZGVmaW5lIEhDX1BPUlQwX0VORCAgICAgICAgICAgIDE4ODIKKyNkZWZpbmUgSENfUE9SVDFfU1RBUlQgICAgICAgICAgMTg4MgogCXtPUF9XUl9FMSwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9aUl9FMSwgSENfUkVHX1VDX1JBTV9BRERSXzEsIDB4Mn0sCiAJe09QX1dSX0UxLCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjA2OSw4ICsyMTgyLDggQEAKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDFfRU5EICAgICAgICAgICAgMTgwMwotI2RlZmluZSBIQ19GVU5DMF9TVEFSVCAgICAgICAgICAxODAzCisjZGVmaW5lIEhDX1BPUlQxX0VORCAgICAgICAgICAgIDE5MDAKKyNkZWZpbmUgSENfRlVOQzBfU1RBUlQgICAgICAgICAgMTkwMAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIwODYsOCArMjE5OSw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMwX0VORCAgICAgICAgICAgIDE4MTgKLSNkZWZpbmUgSENfRlVOQzFfU1RBUlQgICAgICAgICAgMTgxOAorI2RlZmluZSBIQ19GVU5DMF9FTkQgICAgICAgICAgICAxOTE1CisjZGVmaW5lIEhDX0ZVTkMxX1NUQVJUICAgICAgICAgIDE5MTUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDF9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMTAzLDggKzIyMTYsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DMV9FTkQgICAgICAgICAgICAxODMzCi0jZGVmaW5lIEhDX0ZVTkMyX1NUQVJUICAgICAgICAgIDE4MzMKKyNkZWZpbmUgSENfRlVOQzFfRU5EICAgICAgICAgICAgMTkzMAorI2RlZmluZSBIQ19GVU5DMl9TVEFSVCAgICAgICAgICAxOTMwCiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjEyMCw4ICsyMjMzLDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzJfRU5EICAgICAgICAgICAgMTg0OAotI2RlZmluZSBIQ19GVU5DM19TVEFSVCAgICAgICAgICAxODQ4CisjZGVmaW5lIEhDX0ZVTkMyX0VORCAgICAgICAgICAgIDE5NDUKKyNkZWZpbmUgSENfRlVOQzNfU1RBUlQgICAgICAgICAgMTk0NQogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4M30sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIxMzcsOCArMjI1MCw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMzX0VORCAgICAgICAgICAgIDE4NjMKLSNkZWZpbmUgSENfRlVOQzRfU1RBUlQgICAgICAgICAgMTg2MworI2RlZmluZSBIQ19GVU5DM19FTkQgICAgICAgICAgICAxOTYwCisjZGVmaW5lIEhDX0ZVTkM0X1NUQVJUICAgICAgICAgIDE5NjAKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDR9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMTU0LDggKzIyNjcsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DNF9FTkQgICAgICAgICAgICAxODc4Ci0jZGVmaW5lIEhDX0ZVTkM1X1NUQVJUICAgICAgICAgIDE4NzgKKyNkZWZpbmUgSENfRlVOQzRfRU5EICAgICAgICAgICAgMTk3NQorI2RlZmluZSBIQ19GVU5DNV9TVEFSVCAgICAgICAgICAxOTc1CiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHg1fSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjE3MSw4ICsyMjg0LDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzVfRU5EICAgICAgICAgICAgMTg5MwotI2RlZmluZSBIQ19GVU5DNl9TVEFSVCAgICAgICAgICAxODkzCisjZGVmaW5lIEhDX0ZVTkM1X0VORCAgICAgICAgICAgIDE5OTAKKyNkZWZpbmUgSENfRlVOQzZfU1RBUlQgICAgICAgICAgMTk5MAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4Nn0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIxODgsOCArMjMwMSw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM2X0VORCAgICAgICAgICAgIDE5MDgKLSNkZWZpbmUgSENfRlVOQzdfU1RBUlQgICAgICAgICAgMTkwOAorI2RlZmluZSBIQ19GVU5DNl9FTkQgICAgICAgICAgICAyMDA1CisjZGVmaW5lIEhDX0ZVTkM3X1NUQVJUICAgICAgICAgIDIwMDUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDd9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMjA1LDEwICsyMzE4LDEwIEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM3X0VORCAgICAgICAgICAgIDE5MjMKLSNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMTkyMwotCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0NPTlRST0wwLCAweGUzODM0MH0sCisjZGVmaW5lIEhDX0ZVTkM3X0VORCAgICAgICAgICAgIDIwMjAKKyNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMjAyMAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0RSQU1fQUxJR04sIDB4MX0sCisJe09QX1dSLCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9DT05UUk9MMSwgMHgzYzEwfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19SUV9FTFRfRElTQUJMRSwgMHgxfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19XUl9SRVZfTU9ERSwgMHgwfSwKQEAgLTIyMjAsNyArMjMzMyw3IEBACiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNywgMHhmZmZmZmZmZn0sCi0Je09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmZmZmZmZmZn0sCisJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMywgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fNCwgMHhmZmZmZmZmZn0sCkBAIC0yMjQ3LDYgKzIzNjAsNyBAQAogCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzEsIDB4ZmZmZjMzNDB9LAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDA1MDAwfSwKIAl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDAzMDAwfSwKKwl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmMDAwODAwMH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTYsIDB4OH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTksIDB4OH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTEwLCAweDh9LApAQCAtMjMyMyw5ICsyNDM3LDggQEAKIAl7T1BfV1IsIFBYUDJfUkVHX1BTV1JRX0JXX1dSLCAweDEwNjQ0MH0sCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfUlFfSUxUX01PREUsIDB4MX0sCiAJe09QX1dSLCBQWFAyX1JFR19SUV9SQkNfRE9ORSwgMHgxfSwKLQl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKLSNkZWZpbmUgUFhQMl9DT01NT05fRU5EICAgICAgICAgMjA0MAotI2RlZmluZSBNSVNDX0FFVV9DT01NT05fU1RBUlQgICAyMDQwCisjZGVmaW5lIFBYUDJfQ09NTU9OX0VORCAgICAgICAgIDIxMzcKKyNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX1NUQVJUICAgMjEzNwogCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wLCAweDE2fSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9OSUdfMCwgMHg1NTU0MDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfTklHXzAsIDB4NTU1NTU1NTV9LApAQCAtMjM0NSw4ICsyNDU4LDggQEAKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9QWFBfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTCwgMHhjMDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX01BU0ssIDB4M30sCi0jZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9FTkQgICAgIDIwNTkKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfU1RBUlQgICAgMjA1OQorI2RlZmluZSBNSVNDX0FFVV9DT01NT05fRU5EICAgICAyMTU2CisjZGVmaW5lIE1JU0NfQUVVX1BPUlQwX1NUQVJUICAgIDIxNTYKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCwgMHhiZjVjMDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCAweGZmNWMwMDAwfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMF9PVVRfMCwgMHhmZmY1MWZlZn0sCkBAIC0yMzc5LDggKzI0OTIsOCBAQAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18wLCAweDB9LAogCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18wLCAweDN9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQwX0VORCAgICAgIDIwOTEKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfU1RBUlQgICAgMjA5MQorI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9FTkQgICAgICAyMTg4CisjZGVmaW5lIE1JU0NfQUVVX1BPUlQxX1NUQVJUICAgIDIxODgKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCwgMHhiZjVjMDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wLCAweGZmNWMwMDAwfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMV9PVVRfMCwgMHhmZmY1MWZlZn0sCkBAIC0yNDEzLDcgKzI1MjYsNyBAQAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18xLCAweDB9LAogCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18xLCAweDN9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQxX0VORCAgICAgIDIxMjMKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfRU5EICAgICAgMjIyMAogCiB9OwogCkBAIC0yNTEyLDcyICsyNjI1LDY0IEBACiAJMHgwMDAwMDIwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDBjMCwKLQkweDAwMDA2MTgwLCAweDAwMDA4MjQwLCAweDAwMDBhMzAwLCAweDAwMDBjM2MwLCAweDAwMDBlNDgwLCAweDAwMDEwNTQwLAotCTB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsIDB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsIDB4MDAwMWE5MDAsIDB4MDAwMWM5YzAsCi0JMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwgMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwgMHgwMDAyNmQ4MCwgMHgwMDAyOGU0MCwKLQkweDAwMDJhZjAwLCAweDAwMDJjZmMwLCAweDAwMDJmMDgwLCAweDAwMDMxMTQwLCAweDAwMDMzMjAwLCAweDAwMDM1MmMwLAotCTB4MDAwMzczODAsIDB4MDAwMzk0NDAsIDB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsIDB4MDAwM2Y2ODAsIDB4MDAwNDE3NDAsCi0JMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwgMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwgMHgwMDAwODAwMCwgMHgwMDAxMDM4MCwKLQkweDAwMDE4NzAwLCAweDAwMDIwYTgwLCAweDAwMDI4ZTAwLCAweDAwMDMxMTgwLCAweDAwMDM5NTAwLCAweDAwMDQxODgwLAotCTB4MDAwNDljMDAsIDB4MDAwNTFmODAsIDB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsIDB4MDAwNmFhMDAsIDB4MDAwNzJkODAsCi0JMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwgMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwgMHgwMDA5YmYwMCwgMHgwMDBhNDI4MCwKLQkweDAwMGFjNjAwLCAweDAwMGI0OTgwLCAweDAwMGJjZDAwLCAweDAwMGM1MDgwLCAweDAwMGNkNDAwLCAweDAwMGQ1NzgwLAotCTB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsCisJMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAorCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCisJMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKKwkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAorCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCisJMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKKwkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAorCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCisJMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKKwkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAorCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKLQkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAotCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCi0JMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKLQkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAotCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCi0JMHhjY2NjY2NjMSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwODAsCisJMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwgMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwgMHgwMDAwODM4MCwKKwkweDAwMDA5NDAwLCAweDAwMDBhNDgwLCAweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLCAweDAwMDBlNjgwLAorCTB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsIDB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsIDB4MDAwMTQ5ODAsCisJMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwgMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwgMHgwMDAxYWM4MCwKKwkweDAwMDFiZDAwLCAweDAwMDFjZDgwLCAweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLCAweDEwMDAwMDAwLAorCTB4MDAwMDI4YWQsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAzNTA4MDQsIDB4Y2NjY2NjYzEsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHg3MDU4MTAzYywgMHgwMDAwMDAwMCwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKIAkweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwKLQkweDAwMDAzNTAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKKwkweDAwMDAzNTAwLCAweDAwMGUwMWI3LCAweDAxMTYwMGQ2LCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAogCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCiAJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLAotCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDcyMDFiYiwgMHgwMTIzMDBmMywgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywKKwkweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCiAJMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LAogCTB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsCi0JMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsCisJMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKIAkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCkBAIC0yNTg1LDQxICsyNjkwLDQxIEBACiAJMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKIAkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAogCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKIAkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCiAJMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjhhLAotCTB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAorCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKIAkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsCi0JMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCiAJMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKLQkweDA0MGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOGEsIDB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKKwkweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAorCTB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAorCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDQwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKKwkweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCiAJMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLApAQCAtMjY0MSwxNiArMjc0NiwyNiBAQAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCiAJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsIDB4MDAwNzAxMDAsIDB4MDAwMjgxNzAsCi0JMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwgMHgwMDAxMDM3MCwgMHgwMDA4MDAwMCwKLQkweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLCAweDAwMDEwMjAwLCAweDAwMDcwMjEwLAotCTB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsCi0JMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwgMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwKLQkweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LCAweDAwMDgwMzgwLCAweDAwMDI4MDAwLAotCTB4MDAwYjgwMjgsIDB4MDAwMjAwZTAsIDB4MDAwMTAxMDAsIDB4MDAwMDgxMTAsIDB4MDAwMDAxMTgsIDB4Y2NjY2NjY2MsCi0JMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAKKwkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhjZGNkY2RjZCwgMHgwMDEwMDAwMCwgMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwKKwkweDAwMDEwMjcwLCAweDAwMGYwMjgwLCAweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLAorCTB4MDAwYjgxMjgsIDB4MDAwMjAxZTAsIDB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsCisJMHgwMDA4MDBmMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwKKwkweDAwMDgwMzM4LCAweDAwMTAwMDAwLCAweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLAorCTB4MDAwMTgyODAsIDB4MDAwZTgyOTgsIDB4MDAwODAzODAsIDB4MDAwMjgwMDAsIDB4MDAwYjgwMjgsIDB4MDAwMjAwZTAsCisJMHgwMDAxMDEwMCwgMHgwMDAwODExMCwgMHgwMDAwMDExOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKKwkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAorCTB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgaW5pdF9kYXRhX2UxaFtdID0gewpAQCAtMjc1MSwxMTk3MyArMjg2NiwxMzQ1NyBAQAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKLQkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAotCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCi0JMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKLQkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAotCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCi0JMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKLQkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAotCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCi0JMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKLQkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAotCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCi0JMHgwMDAwMDAyOCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKLQkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAotCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCi0JMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKLQkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAotCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCi0JMHhjY2NjY2NjNSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwKLQkweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLAotCTB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsCi0JMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywKKwkweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAorCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKKwkweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLCAweDAwMDBhMzAwLCAweDAwMDBjM2MwLAorCTB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsIDB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsCisJMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwgMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwKKwkweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLCAweDAwMDJmMDgwLCAweDAwMDMxMTQwLAorCTB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsIDB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsCisJMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwgMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwKKwkweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLCAweDAwMDI4ZTAwLCAweDAwMDMxMTgwLAorCTB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsIDB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsCisJMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwgMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwKKwkweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLCAweDAwMGJjZDAwLCAweDAwMGM1MDgwLAorCTB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsIDB4MDAwMDAwMjgsIDB4MDAxMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCi0JMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsCi0JMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKLQkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCi0JMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAotCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKLQkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLAotCTB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCi0JMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKLQkweDA1NmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAotCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCi0JMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjhhLCAweDA0MmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFhZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1OGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsCi0JMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwKLQkweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLAotCTB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsCi0JMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwKLQkweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LAotCTB4MDAwODAzODAsIDB4MDAwZDAwMDAsIDB4MDAwMDAwZDAsIDB4MDAwMjgwZDAsIDB4MDAwYjgwZjgsIDB4MDAwMjAxYjAsCi0JMHgwMDAxMDFkMCwgMHgwMDBjODFlMCwgMHgwMDAwMDJhOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4MDAwMDIwMDAKKwkweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwgMHgwMDAwMTAwMCwKKwkweDAwMDAyMDgwLCAweDAwMDAzMTAwLCAweDAwMDA0MTgwLCAweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLAorCTB4MDAwMDgzODAsIDB4MDAwMDk0MDAsIDB4MDAwMGE0ODAsIDB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsCisJMHgwMDAwZTY4MCwgMHgwMDAwZjcwMCwgMHgwMDAxMDc4MCwgMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwKKwkweDAwMDE0OTgwLCAweDAwMDE1YTAwLCAweDAwMDE2YTgwLCAweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLAorCTB4MDAwMWFjODAsIDB4MDAwMWJkMDAsIDB4MDAwMWNkODAsIDB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsCisJMHgxMDAwMDAwMCwgMHgwMDAwMjhhZCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDM1MDgwNCwgMHhjY2NjY2NjNSwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDcwNTgxMDNjLCAweDAwMDAwMDAwLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLAorCTB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsCisJMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywKKwkweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMGUwMjMyLCAweDAxMTYwMGQ2LAorCTB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA3MjAyMzYsIDB4MDEyMzAwZjMsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwZWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLAorCTB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDJmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywKKwkweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMWVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLAorCTB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDU2ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywKKwkweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywKKwkweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmYzLCAweDMxNmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzBiZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMTQsIDB4ZjNjZjNjZjMsCisJMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNywgMHgzMWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYwLCAweDMwN2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweDAwMTAwMDAwLCAweDAwMDcwMTAwLAorCTB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwZjAyODAsIDB4MDAwMTAzNzAsCisJMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwgMHgwMDAxMDIwMCwKKwkweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LAorCTB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsIDB4MDAxMDAwMDAsIDB4MDAwODAxMDAsCisJMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwgMHgwMDBlODI5OCwgMHgwMDA4MDM4MCwKKwkweDAwMGIwMDAwLCAweDAwMDEwMGIwLCAweDAwMDI4MGMwLCAweDAwMDU4MGU4LCAweDAwMDIwMTQwLCAweDAwMDEwMTYwLAorCTB4MDAwZTAxNzAsIDB4MDAwMzgyNTAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCisJMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwKKwkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDA0MDAyMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDE5ZDliMzhhLCAweDIyNzE3NjE4LAotCTB4YTcwMTQzZjgsIDB4YTQzMDMzMzIsIDB4MTAyNjcxMDMsIDB4OTdlMjA0YWYsIDB4YWYwYzBjOGMsIDB4MmZkNzg5MTgsCi0JMHhjZjYwODYyMSwgMHgzODYwNjYxMCwgMHg0MjA2YzQwMiwgMHgyMjQ1MGMwYywgMHhhMDdhZjEwOCwgMHhmZTQwN2I5YSwKLQkweGI2OThhODQyLCAweDc2YzMwMzI4LCAweDNiZjc4MWQxLCAweDM0OTU3MDM1LCAweDI0YTQ1OGE2LCAweDQ1OGQ1ZDgyLAotCTB4YTBkNzE5MWUsIDB4NDQ5NGVmYzksIDB4ZDAxMmQ3ZTUsIDB4NDUzOGQwM2YsIDB4NTEzZjk1MDksIDB4NTQ3ZjQyMDEsCi0JMHgzNDJmYTY4NCwgMHhmOTUwNDlmOSwgMHhhNTdmNTAzOSwgMHg3NzM3NjEyOSwgMHgwMDFlNTQyZSwgMHg2MWFhOGE5MiwKLQkweDAwMDAwMzYwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgxOWQ5NDU4YSwgMHgxMTM4ZmMxOCwKKwkweDU5ODBhMWZjLCAweGQ4MTgxOTk4LCAweDg4MDM5ODgwLCAweDgxYjg4MDNkLCAweDkxYTE4MTkxLCAweGRhZmQ3ODkxLAorCTB4YmY3NjA4NjIsIDB4NmVjMzAzMzAsIDB4MDIxMWU2MjAsIDB4MTA4MjIzOWEsIDB4ZjM1NDAyOWYsIDB4MGY1ZmM4MDYsCisJMHg2NTEyYjMxNSwgMHgzYTI2Mzg2MCwgMHgwNmE3N2VmMCwgMHgyOThkMmFkZSwgMHhjMTEyNDUzNiwgMHgxZTQ1ODZkZSwKKwkweDkzNDc2ZjE5LCAweGNhODkyMmZmLCAweGZmNDA0MWRmLCAweDY1Mjk2MzQwLCAweDIyOWRiZTU0LCAweDA0YTY1ZTg0LAorCTB4ZTRkMWE1YTEsIDB4ZDdmMmExZWQsIDB4NTE5MmZlYTEsIDB4MGRlZTZlYzYsIDB4ZjgwMDNjYTgsIDB4NjA2NTQ5NWMsCisJMHgwMDYwNjU0OQogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX3ByYW1fZGF0YV9lMVtdID0gewogCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4NDk5OTljY2UsCi0JMHgyMDRlNGNjZSwgMHgzMDg0MDkwOSwgMHg0MzUxMTg3OSwgMHg3YzA2MWUxYywgMHgyMDEyNzZmNCwgMHgwNmJmMmFlNSwKLQkweDBlYTJhMTdjLCAweDJkZTQyMTA4LCAweGViZjhmZWE1LCAweDA5MjEzMmZkLCAweGY2MzZjNTQ0LCAweGRhMmY0NWEyLAotCTB4MDVhODU1ZTEsIDB4YTE4MGQwM2IsIDB4NGEwMGVlMDUsIDB4NzgzNmRhYTEsIDB4ZjVhYjE1YmQsIDB4NjJhMjk2OGUsCi0JMHg5NmFkMjI0OCwgMHhiZmNiMTdmZSwgMHgyNGZiZGFkNiwgMHgwMDY2NGU3MywgMHhiYmY3YmRjYiwgMHg5ZmE3ZWZkNywKLQkweGVjZTdkOWRkLCAweGViZGFmN2IzLCAweDdiNWFkN2I1LCAweDVkOGEzZGVkLCAweDE5ZDdlYTYyLCAweGEwZmY4NzNiLAotCTB4YzYzMWIzZWMsIDB4OWYyYzE5YWUsIDB4MjNhNTdjYzgsIDB4NmFkOGNiZDcsIDB4MzEyN2Q0M2IsIDB4MGY2MjNjMTYsCi0JMHg1YjE4OTI2ZCwgMHhiNTlmZGEzMiwgMHg3MWNhMGQzMCwgMHhiYzIwYmU2OSwgMHhlYmUxNjc2NywgMHhjNjU0YzYxMiwKLQkweDliNGFhZGZmLCAweGU4ZjJjOTk0LCAweGYwNzNiOWY5LCAweGYzMGY4MWRjLCAweDU4NTY0YjE5LCAweDYzMDI2NTMwLAotCTB4YWZjYzZjMmIsIDB4OGZiYTgzMGYsIDB4ZmM5YzBmYjEsIDB4N2ZmODczOWIsIDB4ZjYxYjI0YzEsIDB4YmY4NzQyMzMsCi0JMHhhZjNlZGZhMSwgMHg4MTRmNjgyZCwgMHhlZGNkYjM3ZSwgMHgxMjE1NDk0ZSwgMHhkNWRiMTk5MywgMHgxNDBiZDJjNCwKLQkweDljOWFiYWM2LCAweDQ5YjRmZTU0LCAweDYwMjgyZjRmLCAweDI2NTM0ZjZjLCAweDc5MzVmN2Q1LCAweDhkMzQ4Y2E5LAotCTB4OWEwN2U3YTUsIDB4YjM0ZjU0N2MsIDB4ZjdlM2Q3ZjUsIDB4MmI3YzhlMjMsIDB4Y2UwZDE1OTUsIDB4NjhhZTVhZGYsCi0JMHgwNjBiNzE4MiwgMHg2NGNjN2ZlYiwgMHhmOWUwMDU0MSwgMHhhZmVlYzJhMywgMHg1ZjlhZWY4MCwgMHg4NTEyOTg5ZiwKLQkweDgwMmM5OWYyLCAweGY3ZTg2NTM2LCAweDQ1ZmIyZWNmLCAweDhjZTFiNGZlLCAweDM4N2MzZDY1LCAweDY4NDRkYTdmLAotCTB4ZTEzOWIxMjcsIDB4ODc0NTljMjIsIDB4ZTI1YzZiMzQsIDB4NzdiMTlmNzEsIDB4Y2RjMDMyYTQsIDB4Njk5MTgwMmQsCi0JMHhiOWI1OGM5OSwgMHg0ZjJlNmZmYSwgMHg0NGY1Y2M2NSwgMHgwYjlhN2ZiNiwgMHg1ZDBjZGRlNiwgMHgyZWVjNjQ4YywKLQkweGRlMGMxMDU2LCAweGY4MWZmZDAwLCAweGU4MDUyNWI4LCAweDYxNDk3NmExLCAweDRiMjZjZDc4LCAweGQwMTJjZDE1LAotCTB4N2NjZWRkOGIsIDB4YTUzODcwOWIsIDB4ZDQxNDc5YTIsIDB4ZGU2MGVlZmIsIDB4ZTM4M2JkYzcsIDB4OTg4MGM1ZGMsCi0JMHg0NmNjZDhlOSwgMHgzMmE4NjRlNSwgMHhhNWRkODdlOCwgMHhlMmU1MzY4NiwgMHgxNWM1ZmQ4NywgMHgyZmI3MTJlMywKLQkweGQ1MTdmODM5LCAweGY2ZjFhNmViLCAweDA3OGQzMjhmLCAweDdmMTNiOWRmLCAweGNiZTA3NTk3LCAweGFlZjdkNzdkLAotCTB4Nzg4NDIzMzIsIDB4ZTExZjk4NTMsIDB4YzY1Nzc1M2IsIDB4ZGUyNWM3YmEsIDB4N2Q4ZjE2M2UsIDB4YzcwYWFiMmEsCi0JMHg4ZTE1NjdhMSwgMHg2NmRjZmMwYiwgMHgzNjdiNzRlNywgMHhiMThkNGExNywgMHgxNjY2MzgzNSwgMHg5YzYyYjU2MywKLQkweDAzZDk1YTI5LCAweDMwMDBiMjU4LCAweGI1OGNiNWU3LCAweGRkYTBiZDIwLCAweDNhYmY2ODk0LCAweGRmNGFlMDBmLAotCTB4ODUyYTRiMzMsIDB4MGFmMWZhN2EsIDB4ZjIxMTVlNjksIDB4MTBjZjQxYTEsIDB4YjEyNTlmZjUsIDB4OWVmODFkOGEsCi0JMHg3MGNhOTJjZCwgMHhlNzFmM2IxYywgMHg4YjUwZmU4NiwgMHhlODZlZTAwNywgMHhlYzllZGRjYSwgMHg2MTk0ZmRlNSwKLQkweDQ4NTUzZmJiLCAweDM4NThiNWYzLCAweDdhNGZkNGJkLCAweGRmMDM4YzE3LCAweDM4YzBmN2E3LCAweGE1NmIzZWYwLAotCTB4ZmU2OWJhYzQsIDB4ZTFhNjE0ZGUsIDB4MzJjNjdlNzgsIDB4NzBhNmE0NDAsIDB4YThkOTkwOTksIDB4Nzg2N2U0MjQsCi0JMHhmYzgxNjVhZSwgMHgzZjJlMzM2NCwgMHg4YmU2MzVhNywgMHg5ZjczN2UwMCwgMHhkMGQ0N2NkNCwgMHg3ODM1NzlhYiwKLQkweDY5Yzg1YTNmLCAweDI2NmFhMDc2LCAweDAxYjYzMGYzLCAweDUzMDU5M2QwLCAweDdjYThkZDFlLCAweGIzOTE4ZDEwLAotCTB4Y2RhMzczMzEsIDB4OTY2M2ZhMjgsIDB4OTk3YjlmOTksIDB4OWNmMjg2ZDcsIDB4Y2YzZjM0MWIsIDB4YmZkNzM3NmYsCi0JMHgyNzY5ZGNjZCwgMHhkYzNmODJhZSwgMHg4ZTRlN2RjYywgMHhjMGUzOGYzMywgMHgxMmNmMDBkNCwgMHg2ZmMwZWYyMSwKLQkweGFkYmYyYzZhLCAweDVhMTk2MjZkLCAweDkxMzk2MjQxLCAweDVkY2UxYzk2LCAweGI3Njg3YTg5LCAweGY3YzA3M2U0LAotCTB4OTA3YjYwMmYsIDB4NmVmODkwZWYsIDB4MDVkN2E4YmQsIDB4MGQ1ZDg1NTUsIDB4MWUyODIwMjUsIDB4OTU4YWZjN2YsCi0JMHgxZmJhNDA2ZSwgMHgxMDFiNjU2NywgMHhiZjRhMGRmZiwgMHgwZDdjMDNhYSwgMHhhNDNmYWE4ZCwgMHgxN2JmNmQwZCwKLQkweGQ3ZGIxMTE4LCAweDRlMDNiZTJiLCAweDk5YmZiZjE4LCAweGY4YzNkNmY5LCAweDE5N2FlYzRiLCAweGVjM2M5N2Q2LAotCTB4ZDc5OGJkMjUsIDB4N2U0NzJkMWUsIDB4ZWEwNWQzMWQsIDB4ZmJmMDc3MmEsIDB4Mjc2NzgwOGIsIDB4ZWNmMDAxYzIsCi0JMHg5N2Y0ZTNlNCwgMHhkZmVkZmVhMywgMHhiOWY1YjEyYiwgMHg3N2VmMGUzOCwgMHgxNjVjZWVjOSwgMHhlNzBjNGRjYywKLQkweGZjNGVjYzczLCAweGJjMGI0MGI0LCAweDI2N2VlNTgyLCAweDAyYzYyNzI5LCAweDgzY2MzZDlhLCAweGNhYTk2OGY0LAotCTB4NTQzOTRlZmIsIDB4ZTlmN2M2OWYsIDB4ZjljY2Y1ODMsIDB4MDAwMzMyMzMsIDB4NjYxOGQ2NTcsIDB4YjNhNTU3YTIsCi0JMHg3YWY1MDczMSwgMHgxY2I4NDU3NSwgMHgyNWMzZTJmOSwgMHgxMmMwYWNhZiwgMHgwMGFlOWNmMCwgMHgyYTM4OGZiZSwKLQkweGVhN2VjNzVlLCAweGEyMTYzNmU2LCAweGU4NzBlZGM4LCAweDdiMWFmZTM0LCAweDcyMzdkNjQ3LCAweDFmYTUwZjExLAotCTB4ZDA2ZmMwMmIsIDB4MTg2NTMwNmQsIDB4ZmY0NTk1ZjIsIDB4YzYwZmJmYzMsIDB4OTg5Y2JhOGEsIDB4MTcyYTE3ZWUsCi0JMHhlMjBhM2Y2MCwgMHhmNTlmY2I4ZCwgMHgwZjQyMDdmZCwgMHhmODI2MWU4MSwgMHg5NTdlY2JiYywgMHhiNjNjMzA1ZiwKLQkweGMxN2U3YWZlLCAweDA5NTAwMTQ0LCAweDEzZjBjYmMxLCAweDQ1NTJhMmM2LCAweDY2M2RiZDFjLCAweGE1NjFlOTc3LAotCTB4ZmYzYzMxMzgsIDB4NzQwNGYzZDksIDB4MDAxYTdjZDIsIDB4NzUyN2M4YjcsIDB4MWNiNDM1NmUsIDB4YTc3NTNkZjAsCi0JMHhlMDc1ZjIzZCwgMHg1Mjc1YmE5MywgMHhkYjc1MDFjOCwgMHhlZmJkMTczZSwgMHgxMWViY2I1ZCwgMHhlOWY1Y2FiNywKLQkweDBhODNhODQ2LCAweDdmNzQ3MDZjLCAweGIzZTQ3YWZiLCAweDhmNWIzMjlkLCAweGY1ODU4ZWRkLCAweDA5Y2NmNDE4LAotCTB4YzQ5YjNiMDEsIDB4MTc0YWU3ZDcsIDB4ZGJhZGQ2YWYsIDB4NWY3ZTFmN2YsIDB4MmU2MGU1ZDUsIDB4Zjc2ZWFmZTgsCi0JMHg4N2FmOWJhMiwgMHg3NmMzYTJmYSwgMHgzNmVhNGQ4NiwgMHhhMTIzYWIzNSwgMHhkN2M0MzhiZSwgMHgwZTMyYmVhNSwKLQkweDRjOTc3MDVmLCAweGE3OWY0YmViLCAweGEwNzZlMzNiLCAweDI3MjZjOWNmLCAweGQwZjE4MmYzLCAweGI4Y2VlZWUyLAotCTB4M2FhZGY4MGQsIDB4YmYxY2JkYjQsIDB4ZjkyYWRlYWIsIDB4Nzc1M2VkMTAsIDB4ODU5NDNhNmUsIDB4OTcyMWZhZjMsCi0JMHhjOTJkOWFmMywgMHgwZmUwNmJjYywgMHgyOWQxM2JmZSwgMHhlZjBlYmU0NywgMHgxOTNjYzA5NywgMHg3NTg4YmJmNCwKLQkweGFjM2VhMzk0LCAweGFkMTRmNGRiLCAweDRlYmUwNjMzLCAweGNlMzRlOTM2LCAweDEwZmUxYzgwLCAweGVhZWY4MWM2LAotCTB4Mzg3YzkyNWYsIDB4MGIxYjdhYzUsIDB4ZWVmNjNjYTAsIDB4YTBkOWNkNzYsIDB4ZDU5YWZjZTEsIDB4NmJjZTM3NDIsCi0JMHgxNmVkOGFhNSwgMHg3MmVkZTY4NSwgMHg3NWJlMTE3OSwgMHhhZmJjMzk2YSwgMHhhZDRlYmI1ZSwgMHg5YWRmOTE4YywKLQkweDcwY2RjMzJkLCAweDExMWZjOWFkLCAweDcxN2Q4ZjM4LCAweDZmMGJlYzEyLCAweDFhYmQ2MGUxLCAweDQ1ZWEwMWY1LAotCTB4YWVjNmE0MjUsIDB4YTk0OTZmNmIsIDB4MmQ5YWRmNDQsIDB4Zjg5YWYzMzIsIDB4ZjgzZGQzODgsIDB4ZWRkNjhjYWYsCi0JMHg1ZjM3NWVlMCwgMHgwNmRkMDViNywgMHhkYmEwYWFmNCwgMHg1MWQwNWQ2OSwgMHg2Nzg5MmZlOSwgMHhlOTFiN2M3ZiwKLQkweDIwNzRmMDAwLCAweDI1NWNhMDllLCAweGMwZGNmM2UwLCAweGRmZTgxNTRhLCAweDJlM2E2N2UzLCAweGNiZTIxN2JiLAotCTB4Yzc5YjNiMGUsIDB4Y2QzOWFjNjAsIDB4YWMwYWZkOWIsIDB4N2IyYTFkYTMsIDB4ZWY5OWVkMTAsIDB4ZDNmZDg2YjYsCi0JMHg5NjZkYmQ2MCwgMHg4MDI1YjMwMiwgMHhhYTA1YjY1YiwgMHhjZTE1YmFmOCwgMHg4NTdmNzVjNCwgMHg5NDZmNmY1OCwKLQkweDE1YWYzNGJjLCAweDgwOWZjMDU5LCAweDI1ZTk4ZWY3LCAweGMwNDk2NDFiLCAweGNhZjU4NjllLCAweDRiOWUzYzFmLAotCTB4ZmQ0M2RjZmQsIDB4ZmU0ZmQwYTgsIDB4Y2JkMWZiODUsIDB4ZDFmYTk4YTcsIDB4N2U4Y2FiY2IsIDB4NDkzZjUwMTYsCi0JMHg0NzRmZDcxNywgMHg3ODY2NzVmOSwgMHg3ZThkYWJjYSwgMHhjZjFmYThlYSwgMHhmZjRiY2RjNSwgMHg3ODY2MGRjNiwKLQkweGZkNGI1MWJlLCAweGIxZjM0ZWE0LCAweGJhZWI4NjgwLCAweGVkZDYwN2UwLCAweGI2YmRlMTk3LCAweGUzYzI3NTM1LAotCTB4Y2EyZjk2MmMsIDB4ZGNmMWM2MWUsIDB4N2NiMTI1MjAsIDB4YzkyNTMyOTEsIDB4ZmVhOTg3YzQsIDB4ZjQzYWE2NjEsCi0JMHgyY2JhZDNhNCwgMHhlM2RmOGZmNCwgMHg0NzU0YjkyNCwgMHg0YTE3YTRhYSwgMHg5ZTA5M2E0NywgMHhhNDZhNDY4NywKLQkweDJlYmExZTE3LCAweDg3YWUzOTcwLCAweDRiZGEzNjM4LCAweGFiODFhOTBmLCAweDBkN2MzOGY1LCAweDEzMmM0YTcwLAotCTB4MzIwZmIwNGIsIDB4Njk1ZmJlODcsIDB4MWIyODc4ZTcsIDB4N2RmMGI2NzUsIDB4ZDZjMWJlZjgsIDB4ZjUwYTk4NWYsCi0JMHgzZmU5NWIzNiwgMHg5NTllM2NlMiwgMHgyNDk2OWRiOCwgMHg5NzZjNDZiMywgMHhkZWY2ZTBlNCwgMHgwZDkyZGNjYSwKLQkweGI1M2MxOGMxLCAweDRiZmEwNjhmLCAweGRiYjZmZDgzLCAweDVmYzg5OTAzLCAweDBlYmY0YmNmLCAweDE4YWRiZjIyLAotCTB4ZmM3ZDkyYWQsIDB4MjJhZmYzNDIsIDB4MmI4ZmQwNDEsIDB4MjI2NjU3NDcsIDB4YzgyYTFkM2UsIDB4MmFmOGVjNzcsCi0JMHhlMzQ0NWY4YywgMHg3ZmYxYzA2ZiwgMHg0NzdjNjA5OCwgMHhmOGQzMTRkZSwgMHhkMzJhOWNjZSwgMHhjNjE1NGVmOCwKLQkweDI2ZGY3ZTA3LCAweDA3YzYyNWJkLCAweGQ4Yzc1ZGZjLCAweGExYmZjZDRiLCAweDU1MzkxZGYxLCAweGI0NGFmZTM0LAotCTB4NGZjNzYzNGYsIDB4MjdmZjE4MWEsIDB4NWJiYjhjMTIsIDB4OTBkMmViZTIsIDB4Njc1ZGU3ZjksIDB4YjU0ZTdmOWUsCi0JMHg5ZjJhZmU3OSwgMHhkZmU5NWVmZiwgMHgzNDQ5ZjhjNCwgMHhlZmNkN2RmZiwgMHg1NGU3ZjlmMSwgMHg3ODNiZjlmMywKLQkweDdiZTMwM2JmLCAweDEwN2ZmMDA2LCAweGQxMjQ3ZmU3LCAweDMwNmZmM2ZjLCAweGFkNGM3ZmNmLCAweDNlMGVmZTc5LAotCTB4MGZhNTJmZmUsIDB4OGQxYWY4YzUsIDB4MTNlNmFiZmYsIDB4NmE2M2ZlN2MsIDB4MTFkNTdjNjksIDB4YTkxZjIxZjAsCi0JMHhjOTFhOTJhMywgMHhlZDA2Y2Y5ZSwgMHg5NDc0ODIzNCwgMHhkY2IxY2E5ZiwgMHhmMjk3NmVlZSwgMHgyNTBmMGYwOCwKLQkweDNjZmJiZTcxLCAweDFiNGRmODA5LCAweDA0MmM3N2Q0LCAweGFjZmEwNTEyLCAweGNkN2NmMDVlLCAweDUwMzU1MmQ2LAotCTB4ZGU4M2RlMjQsIDB4NWQ0MDI4NWIsIDB4NWYxMzI1ZDAsIDB4ZDA4ZWQ1YjMsIDB4NmY2ZjAwNjUsIDB4ZmFjNDFjOTcsCi0JMHgwYjVmZDU4MiwgMHg3MWRlYjRjOSwgMHhiOWNjMDA3ZiwgMHhjM2ZmM2UwOCwgMHhjN2Q2ZTNkMywgMHgyZTVhY2JjZSwKLQkweDg4OWZiMGVjLCAweGMzODhlNDlhLCAweDYzNjMyYzEzLCAweDZiYmUwMTFiLCAweDY3ZjA5ZDI1LCAweDFlODA0ZmQ0LAotCTB4M2YzZmEwNjUsIDB4ZTU4YTNkMDAsIDB4MzgxZmMyODcsIDB4YTk5NjdhMGUsIDB4NGNkMzcyYjEsIDB4NmY3NzQxZGYsCi0JMHhlZWJjYzExNiwgMHg1MDlmZjAxMCwgMHgyYzRmYmUzOCwgMHhmZjg4NDI5NSwgMHg1MDdhOWZjZiwgMHhiMGI0ZmQ0NSwKLQkweDNlOTAxOTIzLCAweGEwODM0NzA4LCAweDQ3NmVmZjUzLCAweGY4NDRiZDY4LCAweGVlN2UyMmY0LCAweGVjNjQ1MTI0LAotCTB4NWZiZWMyNzcsIDB4ZTliODY2YjQsIDB4ZDQyY2I5YmIsIDB4MWZlZDA5OTYsIDB4YjQ2ZjM1NTgsIDB4NjdiZmYzMGUsCi0JMHg0YzgyNjM4ZSwgMHg5NDdmOWY3ZSwgMHg4ZDk4ZTQ4ZCwgMHgzMThmODFiMiwgMHhmYjI5ZjNhNywgMHgzOWRjYTgyOCwKLQkweGVmYjI2ZWM3LCAweGViOTgwYWVmLCAweGViOTk1NGY3LCAweGRkOTBmNmJkLCAweDYyYzZmNjg2LCAweDdlODNhZDg5LAotCTB4YmYzNDZkZWYsIDB4ZGJiMWM2MzcsIDB4OGM3YjA5ODYsIDB4MDY0Nzc3OGYsIDB4MmM1ZWY3ODcsIDB4OWQ2M2UwMjcsCi0JMHhjZTlmN2FlOCwgMHg2OWUwMzViZiwgMHgyMmNlYzQ3OCwgMHhkMzQ2NWViNCwgMHhjMTY3OGZkMSwgMHgwMmQ3YjI3NCwKLQkweDE1Yjc5ZjNhLCAweDRlZWNmYmRlLCAweDczYzAwNTdmLCAweGUxMzJjM2RmLCAweDc0N2YwYWQzLCAweDA2ZGZiMjVmLAotCTB4Y2Q3NDVjNzYsIDB4ZTc2OGVkMWYsIDB4ODU2M2U3NWEsIDB4ZDY2NWZlZmYsIDB4ZWEyYWU4ZjksIDB4ZWI0MTc5ZmIsCi0JMHg1NjI3Y2U3MywgMHgyYWU4NmE3ZSwgMHhhNjNjN2UxZCwgMHhlZmY4NWQ1ZCwgMHhlMThmMWY4NywgMHhiMzJkOWFhZiwKLQkweGExYzVmNTRjLCAweDE3ZWQ0Y2JiLCAweDdhNjc5OWFkLCAweGIxNjNiMGJmLCAweGVkMDNmZGU5LCAweGYzZWE5YTBmLAotCTB4ZGE5YjBmODIsIDB4ZDlhY2JmZGYsIDB4YzZkZWZlZjQsIDB4ZWZlZjRjYzcsIDB4NTRjYTdhYTksIDB4YWNmMDJiYmYsCi0JMHg3MzlkZmRhOSwgMHg0YmRlOTlkNiwgMHg4OThmMTZmYiwgMHg4YzBkNWU5MiwgMHhmMmJiNDJjOSwgMHg3ZTQzMDc2ZCwKLQkweDkwZGRmODM0LCAweDMyOWE4Zjg3LCAweGU0ZDkzY2E5LCAweGU1MTliMmE1LCAweGI2ZGZlNDE0LCAweGViMGQ5NzliLAotCTB4NjNkMThkZTcsIDB4ZWQwZmY2ZWMsIDB4NGYyODM5OGQsIDB4ZTJiN2JlNTYsIDB4ZjBkZmNhZDMsIDB4NzViYzU0NmYsCi0JMHhjMTZiMjhjOCwgMHhkNzNkNDc1ZiwgMHhlMzY3ZDYyNywgMHhmODY0OGY3OSwgMHgyZTQ5Y2IwNywgMHhiNzJlNTU2YiwKLQkweGNhYjIzYmI1LCAweDU1YWU1ZmQwLCAweDcxOGQ4NTIzLCAweDc5MDE4YWZjLCAweDBmMzQ0YjBlLCAweDNhNzQ1Njg2LAotCTB4ZDViODBkZDIsIDB4MTM3Y2Q3NDQsIDB4NjVmYjNkOWMsIDB4NjUxZWJmMWEsIDB4ZmZkZmY0MTcsIDB4YjJkZjE1NjUsCi0JMHgxYzg4M2VhMSwgMHgxYzc1YjljYywgMHhjODdmZTNjMiwgMHhhNTc0ZjA4NiwgMHhkM2RiZmFkMywgMHg3MWY4NjMzNCwKLQkweDQxNTdmMTA1LCAweDczNGQ0N2U1LCAweDE0ZDEzY2E4LCAweDUzNzhmMmEwLCAweDM0MWY5NTE1LCAweDZkMTk1MjM1LAotCTB4N2JlNTQ2NWEsIDB4ZGYyYTQxNGQsIDB4ZjJhNzZhNmQsIDB4NTQxZDRkYjcsIDB4NDM1YTZiMWUsIDB4NDI5YTZmZTUsCi0JMHhmOTM2ZjY1NCwgMHgyYmYwMWNhOSwgMHgyNjk5M2QwYywgMHhmZjYxNGFlYywgMHhmNTQxMGFjMywgMHgzMjJlNjJkMywKLQkweGYyNGRkZGZjLCAweDc5NDRjYmU4LCAweDVlN2RhZDNjLCAweGU5ZjM3Njg4LCAweDcyYzYwZTYzLCAweGNhY2JlMzEzLAotCTB4Y2FmMTA5MGYsIDB4NTQ1NzY0ZmMsIDB4NGMzOTQwODYsIDB4OTVkZWZhMWMsIDB4YjJlNGU5YzQsIDB4ZjQwYzE5YjEsCi0JMHhmZDk3NjNjNiwgMHg4OGJmMzdjMCwgMHg4NjFiMGFlYSwgMHhiMzdjODdkZiwgMHgwNWZhNzFkYywgMHg3NWU5MTVkZiwKLQkweDdmMzEzYTIxLCAweGEwNmNmMTdmLCAweGZlZTc4OWM3LCAweGVkZmIwNGJkLCAweGQ3MGE3NWMxLCAweGFkMzI4M2NiLAotCTB4YzFiMjJjOTcsIDB4YzE4YWY0ODcsIDB4ZmQzZmFkMWIsIDB4YmU1ZTg1M2IsIDB4YTU0ZWZlMDAsIDB4Y2VlYmY4MWIsCi0JMHhkOGJiN2Y0MSwgMHhhN2ZmNTNhNiwgMHg0MTRjMWQzYiwgMHgwZTQ5ZWUzYywgMHhmNGVhYTg2MSwgMHg1YzFlMGRlMSwKLQkweGRhNjQ5NmVmLCAweGYwNzFlM2Y0LCAweGUxNzU5NDYwLCAweDVkOGI1ZDVjLCAweGY1Y2NiYTI3LCAweDBjZDIxZGQzLAotCTB4YTZmMmJmMWUsIDB4ZDY3Yzg2ZGMsIDB4MGJjN2ViYTQsIDB4NTQ5OWZlOTAsIDB4YzkyY2ZkMWEsIDB4ZTRlM2Y1NTQsCi0JMHgzYWY4ODcxZiwgMHhmODk1MzViNSwgMHg2YTM2ZmMxNCwgMHg0NzBkMWZmNywgMHhlMTA2N2VhMiwgMHg4N2JmNjRlOCwKLQkweGM5MTdjOWVmLCAweDMzN2VmMmZmLCAweDcxNDRmZTUzLCAweGZlYzdiNjI2LCAweDBlZTdhZTM5LCAweGY5MWNlZmY4LAotCTB4OGRkNTBhZjcsIDB4NzJjMjFiN2UsIDB4M2UzNTcxZDAsIDB4MGYxYTZhZGYsIDB4M2UxYWYzYmUsIDB4ZjNiY2I5ZjEsCi0JMHg0ZWMyYWJmMSwgMHhiZGY5ZjhjNCwgMHg3MWY5MDYzOCwgMHhmN2FjZGQyZSwgMHg4NmY1NGQ1MywgMHhiNGRkMmNhZSwKLQkweDIwMWZlMDBlLCAweDUyNGFhY2Y3LCAweDA1NmE1ZjkwLCAweDVhMjlmNGY3LCAweDFkZjAwNGJiLCAweDJlODk3OWIxLAotCTB4NTc2ZjEyMGQsIDB4MDFhYThjZTcsIDB4Y2I0ZGYyMmYsIDB4YjE3YmQ3MWQsIDB4MmYxYTg3NjUsIDB4ZTliMjcxNmUsCi0JMHgxMjUxNTdiMCwgMHg5ZjIzNWZjMywgMHg4ZTIyYTg3ZSwgMHg4ZDFjM2Y5ZCwgMHgzNjhiZDQyNywgMHg2NzMzNGY2ZSwKLQkweDI0ZmU4M2QwLCAweDY2N2EwY2NiLCAweDZkMzQwOWJiLCAweDA3ZTQzZjAwLCAweDc1MzEzOGMxLCAweDIxYzU5ZmEzLAotCTB4NzViYzdmN2IsIDB4ZWRjNmM3YjIsIDB4MDViOGViNjQsIDB4Zjg1MTc0YjIsIDB4YjQ3YWRmYWIsIDB4YzU2ZGU3MWMsCi0JMHhhN2Q3N2Q2MywgMHgwYmU0ODA2YSwgMHg4ODMyNTdmZSwgMHg0N2JmMDM0NywgMHgzMjA1MTU2YywgMHhlNWJkNWZmNCwKLQkweDNmMjdiMjdkLCAweDFmMGIwN2IyLCAweDFhZGU4ZjM5LCAweDc5OTZiZjBhLCAweGRlNjYzOTIyLCAweGUzOGRkNjQxLAotCTB4NWE3MTE3Y2MsIDB4ZGYzYmVmZTAsIDB4ZTNmMTc1ODEsIDB4ZTMwY2VjZDcsIDB4YjQyY2VjZjAsIDB4ODMwMzgxOGEsCi0JMHgzZmE4MzY0YywgMHgzYmYzNmEyMCwgMHhmYjNlMjg2YiwgMHg0MWRiOGRiMSwgMHgwNzg1NTgwYiwgMHhkNjJhYzI5ZCwKLQkweGUwNzY4MjUxLCAweDgxOWI2NjI5LCAweGRlYzUzYTc4LCAweGExOGM0Y2YwLCAweDI1NTkwY2QzLCAweDZlZDAzY2ZhLAotCTB4N2VjMDQzYjYsIDB4YWQxN2Q1MzUsIDB4ZDkyYmQ3MzEsIDB4MzNkNDBjZWMsIDB4MmNlZGFiOTUsIDB4NGNmY2QxMjQsCi0JMHgzYWM4YTdlZiwgMHgzNTg4YmJmNSwgMHhiOWY1YzBhZSwgMHhkZmUzY2VjNSwgMHg4Y2E2NzVmMywgMHg1ZWVhZjgwMiwKLQkweGUzMDRiZTdlLCAweGRjYzhiN2UyLCAweDFiZTIzMDhmLCAweGY4NzE4NzhiLCAweDU0ZWJjM2FiLCAweDdkZmZiYzNmLAotCTB4YWUzYmM0ZTcsIDB4Njg3ZGY4NjcsIDB4YzEwZmFlMDUsIDB4OTM2ZjkyOWQsIDB4YmY3ZTI4NzcsIDB4Nzg1NmZjMmMsCi0JMHg0ODdiZjU4ZCwgMHg1MWMwNDU5YywgMHgxYjhhNDViNywgMHhmMDU3YmQzNywgMHgzZjhmYzFiNywgMHhlYzM2ZjMxMiwKLQkweDFlYjE5N2ZhLCAweGNhMzdmNzYzLCAweDMzMmFhZTIyLCAweDRhN2VlOTE5LCAweDI5NmQwNjc3LCAweGVmZTI5ZWY0LAotCTB4NWYwZTFkYzEsIDB4YWNlZmNjMGIsIDB4ZjIyOTYyYWQsIDB4YzUwZmQ4MTcsIDB4NTlkZGE2MmMsIDB4Zjc5ZTgwNWIsCi0JMHhkMjU3YWY0OCwgMHhhMTEyOTliZSwgMHg3YjU4MTA3ZCwgMHgzNTdkZDg5NCwgMHg4YzUzYzkzOSwgMHg4MzM3NjM3MSwKLQkweGY3MWYzNWY1LCAweDI0MTQ4MmQ1LCAweDlhYWVlMTU4LCAweDZlMzE4YWM5LCAweGZhMDBmYTBkLCAweDdlNTNkMjdiLAotCTB4NGJiYTgyNTgsIDB4OWZkODY0ZWIsIDB4OTcxY2QzMjMsIDB4ZjVjZDc5NzcsIDB4ZjcwM2ZjMDYsIDB4OGEzMmM2N2QsCi0JMHg1NThmMjUxZiwgMHgzMDhjNzgyYywgMHg5ZjZlMWZkNCwgMHhlNDJmYmUyNSwgMHgxZjEzZGUxMSwgMHhhMWM1ODg3YiwKLQkweGI5MTE2YTc0LCAweGU5NDYxOTE4LCAweGYyOTdmMDE5LCAweGYwZTM1ZmQwLCAweGRhMDA3YzUzLCAweGZiNzlkNTJmLAotCTB4NWYwNzExN2EsIDB4ODhkOTc2ZmEsIDB4OTc4OWU3NjEsIDB4MTU4MTljMzUsIDB4ZGQ0Yzc4NjgsIDB4NTE5ZmQzODgsCi0JMHgyNWUyNjg1OCwgMHhhYzJmNTVlOCwgMHhmNTdhMzFiNiwgMHgwN2UwNWI2NSwgMHhhM2Q0MGY0OCwgMHhlMzA0OWYwOCwKLQkweDA0Zjg2MjA0LCAweDU2M2Q1NzFjLCAweGY4NWEwZmNlLCAweDIzODY2ZmUxLCAweGZiZjQ5OThkLCAweGU1ZTA1YjExLAotCTB4Y2RmYzcwNzgsIDB4ZTkwZTY3ZmQsIDB4Njg3ZmUwZmYsIDB4ZmE0MzA1ZmYsIDB4ZmViYzc1ZmYsIDB4YjZkZTVlZWIsCi0JMHg1NGZjMDgyYiwgMHgzZGE3ZTNmZCwgMHg2M2VjY2NjMCwgMHgwN2MzMjNhNSwgMHhkNGRkYWY3NCwgMHhmY2I5NDFlNiwKLQkweDkwN2EwOTQ4LCAweDY0ODcxZmFlLCAweGYyYjNmN2RhLCAweGU0MzE1ZDgxLCAweDI1NDlhZmQzLCAweDQ3YzQzZmM0LAotCTB4ZTI3YzVmMjcsIDB4M2ViN2I0NjYsIDB4YzlkNzY0ZGYsIDB4ODhlMmRmYmYsIDB4ZWIyOTgwMzgsIDB4Zjk3MzE3M2IsCi0JMHg5Zjc4ZTJkOCwgMHg4YTdlNTdkNywgMHg2NWQwZDlmYywgMHg5YmQ1MTdkNiwgMHhkMmYwY2U5ZiwgMHhmZTE0MTVmYSwKLQkweDg3ZmM4NDZmLCAweDI4N2Y4ZGZhLCAweDgxYWM3YjQ3LCAweGIzZGU5M2Y1LCAweDlmZTM4NzdlLCAweGMyZjY0NjE5LAotCTB4ZTg2NTM1M2MsIDB4YWViZjYzN2IsIDB4YTFhNWUwNDEsIDB4NjU0Zjg5ZjMsIDB4ZjkyODk2MTIsIDB4NTVmNmQ2OGIsCi0JMHg1Y2Y4MGZjMiwgMHg5MzY3ZmIxNiwgMHgzM2U0NjRkOSwgMHhjNDJjMWYwMywgMHhlNWY5MDBmZCwgMHg4ZTMxOGJlNywKLQkweDM1ZjFiM2QzLCAweGNiMTQ1NDhmLCAweDlkZWY1YzlmLCAweGZkZjAzZjBlLCAweGNiMTM3YTlmLCAweGM1ZTgyZjUzLAotCTB4YjBkYjdiNTgsIDB4YzI1ZGJjZWYsIDB4Y2JjM2Q5N2YsIDB4ODNjNDdiNWEsIDB4NzVkYWZkNzEsIDB4MWUxMDVmNzYsCi0JMHhmMGRiNmVkNywgMHhhZTMwZTc4MywgMHg3N2MzYjZmMiwgMHhiMzVmZjQxOSwgMHg1Y2RmZDVlZCwgMHhlZDlhZjUwNywKLQkweDdjOTliNGY2LCAweDMxOTQ5YTFhLCAweGY4MDY5NzQ4LCAweDQxODRkOTZmLCAweGU0ZmY1NDNhLCAweDhlM2JkNTU1LAotCTB4ZDg3NDdmM2YsIDB4YjY2YTNkMjAsIDB4YjhkOTU3ZWYsIDB4MWE5OGY4YTEsIDB4YjU0NmFmZGUsIDB4YmYwOTc0MzgsCi0JMHg4NjdlOGU1ZiwgMHgyYTE3ZjJmYywgMHg3ZGUzZmRkMiwgMHgxYjkxMWIxMiwgMHg1ZWViOWYwNywgMHhmMTE5N2IyNSwKLQkweDc0MTQ3NDQ0LCAweGE1OWJhMDFhLCAweDA1ZDAwMzdkLCAweDI3NDFhYmY1LCAweDQyNjNmYmViLCAweDZmM2ZiMWRlLAotCTB4NGJmM2YxMTEsIDB4OTA3ZGM1M2YsIDB4Mzg3YzNhZGYsIDB4YmU5N2FhZmYsIDB4N2M3OWMxZTksIDB4YmU3MjM0YTgsCi0JMHhjMzJkYmU3ZSwgMHhkOTU2ZTMwZiwgMHg5NTNhMTk4MywgMHgwYmQ1NzlmYywgMHg1YjdlMjJkZiwgMHgxOTViZjQ3NCwKLQkweGZlNjBiZjE0LCAweDBhZDkxYjJjLCAweGRmOWMyY2MxLCAweGQzYjdiNWMyLCAweDgwNTkyYWZjLCAweDc5ZWFhZWY4LAotCTB4YWJkNzAyYjksIDB4NjMzNjE0Y2YsIDB4NzhiOTFjN2IsIDB4ODdjNWM4NDQsIDB4ODBmMWMxZWIsIDB4MGI4ODdkZjksCi0JMHhiYzBiZWUwNywgMHgwNmRlNTMyMSwgMHg3YzUyMGY2MywgMHg3ZWM2NWJlNCwgMHhmNTQyNWIwZSwgMHg0ZTljOWNjZiwKLQkweGVmYzMxNWIzLCAweDk2Mjc5NTg1LCAweGVjYWUzNzVmLCAweDFjOWNmYTQ2LCAweDcxODExZmVkLCAweDA0YTYwNmRmLAotCTB4NzNhNDNlMDUsIDB4NzQ3Y2FmZDAsIDB4MWY0ZTA4ZmEsIDB4YzQ0YTU1ZTYsIDB4YTdlZmEwNzcsIDB4ZGY2YzczZTIsCi0JMHg4YWJiZjc2ZCwgMHg3M2IxZGY0ZCwgMHgyZmUzODNiOSwgMHhkYzAzZTMxNSwgMHg3ZWNmNjg0OSwgMHgxZjdmMTE5OCwKLQkweGFjNjJiMzdmLCAweGM1NTc2MDM3LCAweDdjOGM1N2YwLCAweGY4ZGY3OTczLCAweDQzNmY5NzE4LCAweDY2YjM0M2RlLAotCTB4YmQzZmZiZTAsIDB4YmYwN2U1YzksIDB4ZTAwNTdiNDMsIDB4ZjdhMDhjOGEsIDB4NDg5MzZmZmIsIDB4MjQ1ODM4MWYsCi0JMHhiNDZmNWM5ZSwgMHhiZjM2YjkwYiwgMHhlMDA0ZjgzNywgMHgxZGRkNzA1NiwgMHg3ZmVjMTdlMCwgMHhlYzlmZTExOCwKLQkweGYwZDVjYWQ4LCAweDZjYmU4YzVkLCAweDQzM2NmMWMwLCAweDc2ZTQzM2ZiLCAweDg3ZmY5MDkxLCAweGIzZmNiMzE0LAotCTB4MTNlZTVjYjUsIDB4YzI0MTFiZmIsIDB4ZjQzZGFkNGYsIDB4NWU1MGU3ODMsIDB4MWY3MTNlNDEsIDB4YmQ5Yjc2YmEsCi0JMHhjOWZkZTcwMiwgMHhiOWJmODNkNiwgMHg5M2U0ZTQxYiwgMHg2NmE3MjFiMCwgMHhkMzk1NjlmZCwgMHhiMGQ3MWRhYSwKLQkweDA5ZmE3Mjc4LCAweDkzYzQxM2E2LCAweDU3MWU3ODUzLCAweGYxMjhiNTRlLCAweGZlOTU3ZmYxLCAweDgyZjdmMDM0LAotCTB4M2U4NjdmMDUsIDB4YWI0Nzg0NGMsIDB4ZjE1ZWJjM2UsIDB4ZmFhZDNlMTIsIDB4YzliZGZlMTAsIDB4OWZmMjg2NGEsCi0JMHhiZjA2NzdjMSwgMHg2ZWE4ZmY1NSwgMHgwMTlkZWEwYywgMHg2ZWY4MzRiZSwgMHhiZTBkMmY4MCwgMHgzNDJmMTIxYiwKLQkweDNlODg2ZmUxLCAweGYwMGNkOGMzLCAweDdmZWVjNTQ5LCAweDk5ZmNjNzJkLCAweDVmN2MzZGRhLCAweDg0M2JiZTE0LAotCTB4OWY5M2MwNzUsIDB4ODcxZDYxYmIsIDB4ZDZjNWE1NDYsIDB4ZDg3YTk2NDMsIDB4YTk2ZmRlZDIsIDB4MDdkYTU4NTcsCi0JMHg0YjQ2ZjUyYywgMHgwYmY3MTBmYiwgMHgzY2FhMGViYiwgMHg2YTYyMjU0ZiwgMHg4MmNlNWY2ZiwgMHhlZjUzOGM2ZSwKLQkweGQyMWUyOTk1LCAweGMwYWYzMDA3LCAweGI5YWRhNGJjLCAweDY4NjNjYzIxLCAweDUzMzhmMTczLCAweDAyYmFiYTdmLAotCTB4ZGU5ZjU3ZjUsIDB4YjA3YjQxZWYsIDB4NzNlM2M1ZGYsIDB4OWVmZDE1N2QsIDB4ZWMzYjE4ZDQsIDB4ZTkzMjNkZmQsCi0JMHhjZDg4NjhkZiwgMHg4MjJmZTc4OCwgMHg4YmY0NDE4NywgMHg3OWVmNDRiMiwgMHhhY2JhN2RkYywgMHhmOGMzMmNlNSwKLQkweGMzZWM4NzRhLCAweGU2ODJjZDkwLCAweGRmYjgzZDNiLCAweGZmMjdiN2RmLCAweDdjZjAzOTk2LCAweGI2OTkxMWUxLAotCTB4ZmVkMGZhZjMsIDB4ZmIzNDQxNGUsIDB4M2YxOGFjOTUsIDB4N2MxNjIzZWQsIDB4YTM4YzA2ZTYsIDB4ZGFmZWUxZWYsCi0JMHhiYjE2NTU4MiwgMHhiZTIyYWQ4MiwgMHhhYTk2ZDRhOCwgMHhiZmMxMTdhOCwgMHg4ZmJjYzBmYSwgMHg1YWJiZjljMCwKLQkweGQ2YjU1N2Y0LCAweGRlZjhkZWZjLCAweDM3YWJlM2YwLCAweDg0MDdkZjlhLCAweGY5MTY3ZmRmLCAweGYxZDJlZDFkLAotCTB4YmJmNzNjNmMsIDB4MDkzNzhmMTksIDB4MmU1ZDNhZmQsIDB4ZTAwZTY1YmEsIDB4Y2NiMGVmYmYsIDB4ZWY0ZTVmOTAsCi0JMHhhN2ZmMDk5MSwgMHg3MzdkZjJiNywgMHg4YjVmOWY4YSwgMHg3YTRmZGE3YywgMHgwZjUzYzBjZCwgMHg1ODlhODVjYSwKLQkweGZjZWNmNGVmLCAweGQwMjNjOTVkLCAweDNiZDc3NmE0LCAweDY1MDRmZmM1LCAweDBiYjdhZWNmLCAweDk3ZjU4NjdmLAotCTB4ODc3OWNhZGYsIDB4NzUzZjZkMGQsIDB4MmJmNjhiOWYsIDB4NjliOWY2ZmEsIDB4ZWY2ZmIxN2YsIDB4YzExZTczMmYsCi0JMHg4Zjg3NmVmYSwgMHhmZGY2ZmVmMiwgMHhhN2Y5MThiOSwgMHgwYWEzYjk2ZiwgMHg2OGRmNTZmNSwgMHhlY2I2NjdlZSwKLQkweDk0NzE3M2ZkLCAweGEyNTZjOWQ2LCAweGVlNzZlNWRiLCAweGYzZGU5ZWU3LCAweDY5NDllZmVmLCAweDcwYWNjMjU4LAotCTB4NGM5N2RmZmQsIDB4OWY4NmI3NzEsIDB4ZDY1ZTI4YmEsIDB4MjVjZmY3YjcsIDB4YTVmYmY2YjEsIDB4ZWM1ZWE3Y2UsCi0JMHhkOWI5ZjYyMywgMHg1ZjA4MWQ5YywgMHg2OTdmZGYyYSwgMHgxYmI1ZDlmOCwgMHhhMjBmMzE5YSwgMHgwMGZhYmY3MywKLQkweGNmZmE5ZmJjLCAweDNlYTMxNDVmLCAweGVkYzFkYmVjLCAweGY0N2I1ZTlhLCAweDliMjdkYzA1LCAweGI5NjJiNmQwLAotCTB4OGJkNWU4MWQsIDB4NjRmYjgxNDIsIDB4MGIyZjNmNmQsIDB4ZjJmMGYxNmEsIDB4MmYwMWM1MDUsIDB4OGY3ZjFmMTYsCi0JMHg5ZmZmNDhmOCwgMHhmNjg5MGY4MCwgMHhiOGY3NmJiZiwgMHhlNzA5NGU0MywgMHhkZWY3OTdmZCwgMHhjZmIwM2Q0MSwKLQkweGNjNjk3YzQxLCAweDMzNzA5M2Y3LCAweDlhMTcxZGQ5LCAweDZlNTdkNTc3LCAweDYyZTQ1MmRlLCAweGJmZjJiZGU2LAotCTB4ZWRiYmZmMzksIDB4MmFjZjgyNWUsIDB4N2NmOTQzMDcsIDB4ZGY1NDQzZWYsIDB4YmMxMWY2ZTYsIDB4OWJlZmM5MTcsCi0JMHhkZjc0NmFiZiwgMHg1Y2Y3NzQwMSwgMHhmZTg3ZGU3OCwgMHhjOGZkZDJjNywgMHgzYWVlODI3ZCwgMHhmYzM0OTllNiwKLQkweGRmMDQxN2YzLCAweDI3NzNkNTk3LCAweDNkZDM5YmZlLCAweGZiMGRmY2QxLCAweGFmOWI3MWZjLCAweDZjZTMwZjIzLAotCTB4M2FjM2ZkNjgsIDB4Yjc2N2I5YWQsIDB4ZjFlZmQ4NjMsIDB4YjQ3NWIzYjEsIDB4MmZiMTY1MTcsIDB4ODQ2Zjg1NjksCi0JMHgxOTFmZmRjYSwgMHg1ZTMxMjdmNywgMHgzYzg5OWEzNywgMHhkMTBmZWU2ZCwgMHhhZDBjMWQ5NiwgMHg4ZjY0OTU2OCwKLQkweDZlMGFkYTJhLCAweDZlYmUyYjI3LCAweGYxZTVlMDNmLCAweDI4ZmJlNzJiLCAweDM4NGQ4Nzg3LCAweGY2N2FjMDE2LAotCTB4NDM4YTNlMGQsIDB4NTZjMmZjNWIsIDB4YjAyNWY5ODksIDB4NmYyYjk1NTMsIDB4OGE3ZThjM2MsIDB4ZTIyZGFjN2QsCi0JMHg3ZGYyYTYyOCwgMHhmODhhNTcyYywgMHg0ZDU3NWRhMiwgMHg2NDU2OGJmZSwgMHhlNmJjYmJhZSwgMHhlN2Y0NDNiYSwKLQkweDY3N2UxYzY0LCAweDljNjEwYjI2LCAweDgwZTJiZTU5LCAweGYyNjVmOThlLCAweDUwNDk4NTc4LCAweDIwOGViMTc3LAotCTB4NGM4ZTA5ZmEsIDB4YzQ3ZmY3ZjMsIDB4Yjg5OGQzNjQsIDB4MTFlYmRhMmMsIDB4YmU3ZmQ3YjAsIDB4MDdjNTAzNzUsCi0JMHhmZWY4YmQ0ZSwgMHhjZDZmZDhjZCwgMHgwNGU2NjRjZiwgMHg3NTZlZjRiYywgMHg4ZGYyMDhiMywgMHhmZmQxNTIxMiwKLQkweGZkOTRlZWE4LCAweDUyM2M4ZjNjLCAweDNlY2M2YjcyLCAweGQ2Mjc2MWEwLCAweDcwNGRkOGZjLCAweDg0NzBlZjU1LAotCTB4ZDVmN2MyNjYsIDB4NGM1ZjdlYmIsIDB4N2VmMmY2ZWIsIDB4MmY4MzYzYjIsIDB4M2Q0ZjNjNGEsIDB4N2RjNjJkMTgsCi0JMHgwZTcxNmFiZSwgMHhmMWE3NGFjMCwgMHhmNzdmOGYyYSwgMHg4MzllNGVlYywgMHg4NWI0YmFmZSwgMHg4NzU2NDllNywKLQkweDYyM2JiNGVmLCAweGFhYzY0YmYyLCAweGYxMWRhMzc2LCAweDEyODdmMDUxLCAweDdjMjBhOWU1LCAweDg2NzlmOWIxLAotCTB4NDNmM2RhOWQsIDB4NjVkN2MzODksIDB4NjViZTYxMGYsIDB4YmRlZDk2ZjUsIDB4M2VhODc3MTgsIDB4ZDlhMWYwZTYsCi0JMHg1M2U1YjBkNywgMHhmZDRmNmI4YSwgMHg5NDRmMzZmMSwgMHhlNGQ5MmNmYywgMHhmN2YxMGU3NywgMHhkNzQ0YzhiNiwKLQkweGIyM2FjZWZhLCAweGY0NGVhMTViLCAweDhmYzcwZmFkLCAweDJmYzg1YzdiLCAweGRlZjFmOWE5LCAweDYxNDA0MTVkLAotCTB4N2IzNjRmY2QsIDB4YjI3MWFlMzAsIDB4ZmM4NzkzN2IsIDB4OGZlNzJkYmUsIDB4ZWZmMTBjYjcsIDB4ZDc5ZDhmYzIsCi0JMHg3Zjg5M2JiZiwgMHhiNzc0ZmQ4MCwgMHhiNzhmZjE2YSwgMHgxNWZiMjcwYywgMHhiNzg5MmJlMCwgMHg0ZGYwNjVkZiwKLQkweDVlY2ZiNmNkLCAweGNmNjNmOGMwLCAweDQwNWU0ZjhlLCAweGZhZmY2Yjc4LCAweGZlZDAxN2M3LCAweDNhNWNmYjY0LAotCTB4YmMzNDQzZWUsIDB4YmYxNGFmZjgsIDB4MmE1YmJlMzEsIDB4ODdmN2FlZTQsIDB4ZDVlZTI5OWIsIDB4ZjYzNTdlMGIsCi0JMHhjM2Y3YmJkNiwgMHg3YTNmZjQxYywgMHgwMzI1ZmZiNywgMHg3YmE1ZTRmZCwgMHhmOWMwOGZhNywgMHg3NTM5ZGQyZSwKLQkweGJmMjM4YjA0LCAweDFiN2M4OTQ2LCAweDliYjg4OGJhLCAweDNiMDc1ZTk1LCAweDdjOWQ5MjBmLCAweDdlOGRlODBhLAotCTB4MWViZjgwY2EsIDB4MGZmMWUzYWUsIDB4YjdkM2YwYWYsIDB4MGU2ZjhmYzYsIDB4NmYzYmNiZjEsIDB4OTM2YmU1YmQsCi0JMHg1MGZiYjRiMCwgMHgzZmQwNWMwZCwgMHg3OGU4MTM3ZiwgMHg2ZmQwNDVmNSwgMHg1ZmMyNjNlYiwgMHg1M2JmNGY4OSwKLQkweGU5ZDAwN2Y4LCAweDU3ZjBhYWJiLCAweGViM2VmZDA0LCAweGU3ZmRmODVjLCAweGYwZTc1ZGYwLCAweGU0NzlmZTg0LAotCTB4YzQ2NmYwMjIsIDB4ZmQ1N2VmNGYsIDB4MzcyOGFiY2YsIDB4ZjE0NDdlM2IsIDB4NGNkYmE0MTAsIDB4YjZlZjY4OTgsCi0JMHhlZTMwNzJjZiwgMHhmZmJkOTFmYywgMHhlZjU3OWUzZSwgMHhhZDFmZDFkMCwgMHhjOTE2ZmJkZSwgMHhhM2NlZWY0ZiwKLQkweDIyNjQ5ZjE0LCAweDA2Y2JkOThlLCAweDkzYjhmMWZlLCAweGQ4NmI4NWM4LCAweGJkN2VlNmU4LCAweGZkZmEzZmMwLAotCTB4MTczZDBmNWUsIDB4NjNlNzNkZmUsIDB4ZTQ0ZmVmYzMsIDB4ZjJhOWJmZWYsIDB4YWUyMzAyM2MsIDB4MWRmMWI3NWIsCi0JMHhkMjBmM2ZlMSwgMHg3NDgyOWE0YiwgMHg3MWJjZmY3YSwgMHgzYTBmMDM2OCwgMHg2YzcyNjFlMiwgMHg1YzdlMmFmYywKLQkweDI5Y2UyMDY1LCAweGFkYzQ2NWU4LCAweDUwNTNlMjA2LCAweDQ1NzhjNmNmLCAweGM1OGI3YTQ4LCAweGViYmQwN2QxLAotCTB4ZDdhYmRjNzgsIDB4MTk5ZmNlNmUsIDB4Njc4ZjBmYTQsIDB4YTcyYWRhZmQsIDB4NjM4YjhiYTEsIDB4MmZmZTA4NWQsCi0JMHhlYTg4OWY4YiwgMHgwYzczYzUzNSwgMHg4ZDljZjUzYywgMHhhYjRmYzdhZiwgMHgzN2ZhOWUzYywgMHg5MDJjODdlZiwKLQkweDlmMjFmYmFjLCAweDc1ZDYzZjIyLCAweGYzZjJhZmJlLCAweGNiYmNmYzA0LCAweGM4YjdiZWMwLCAweDUxNzllYmY3LAotCTB4OGFjODc4YTYsIDB4ZTNkMjQxZjAsIDB4ZWM2MTdkNTYsIDB4NTVlMTU5OTcsIDB4ZDU0ZjVjMWMsIDB4YTI3NWYxNzcsCi0JMHhhNDNiODc2NywgMHgwNzNkM2Y0MSwgMHhkNzNmMTM3NiwgMHg0NTVmN2Q2ZiwgMHg5NmQwZjMzZiwgMHg5ZWRjYTg5ZiwKLQkweGViODNmMmUyLCAweGZlMDYyODQ0LCAweDE3ZjY5NzllLCAweGNmMWQ3OGYzLCAweDMzOGViNjNmLCAweGQyZjFjMWNjLAotCTB4MzhmZTI3YjAsIDB4MzUzZjViMGQsIDB4MGMxMzUzOGQsIDB4ZjM3ZjNjYWIsIDB4NTQ5ZGUzZmMsIDB4N2Y2Mjc3ZmMsCi0JMHgwY2VkYmIyNywgMHg4NjRlZjNmMywgMHhmNmYxMTllNSwgMHhlYjEzM2Y2NywgMHgwMzVlNzFhNiwgMHhiM2NhNGJkNywKLQkweDMzY2ZjYTNlLCAweDg5MjM3YTRjLCAweDFlOTc5OGYyLCAweDllMGVmMTlkLCAweGUyMGE1YjhiLCAweDY3NjBmNjhjLAotCTB4Y2VkM2U3MzMsIDB4NDI4ZmYwN2YsIDB4YmQxZTc3N2EsIDB4NmE3NWM2NWIsIDB4YzYzN2UyMTcsIDB4YjM3OTJjMmUsCi0JMHhmNDFiYWE3MSwgMHgxNWJiYzk0MiwgMHhhZDVkOTA5MywgMHgzMWYyNjZmYSwgMHgxODdlMDk5YiwgMHgwM2FlMDQ2NywKLQkweDllMGZkMGFkLCAweDI3ZmNjMDJmLCAweDk0ZjY0Nzg0LCAweDY0Nzg0MGNmLCAweGUyYmJhNmRkLCAweGI1ZGE5NWU0LAotCTB4MzZmM2NhMGEsIDB4ZTZlYmI1ZmEsIDB4NzY3NjZlM2MsIDB4ZTlmYjE3YTIsIDB4MGJjOGMyYmQsIDB4M2M0MTQ4YWEsCi0JMHgzYjdkZDY3ZCwgMHgyOTE1OWQyZiwgMHg5OWQ2NzlmYSwgMHhlY2JlODQ4ZiwgMHhlZjAxZjI2OSwgMHg1ODE2NzNmMywKLQkweGJkZjkxMDZmLCAweGQyMGU3YjU1LCAweGIwYWFhMmI5LCAweGFmODBiY2M0LCAweGU0ODNhY2M1LCAweGFhNDc2NmU2LAotCTB4ZGIzMzViYzgsIDB4ZmU3YmQ1MGYsIDB4Nzc1N2RhODUsIDB4MmMzNWY2ZjIsIDB4M2NmMWVkNGMsIDB4MWYyNGM0NDYsCi0JMHgwNzc2MmQxMywgMHg5MTNlZWZlNywgMHhhNjdiNTFkNywgMHhmNjYyNDU4NCwgMHg3YzEzZWY3MSwgMHg5YmE0ZDNkYiwKLQkweGMyMmQ3YmY0LCAweGE5MzllMWE3LCAweDJlYTcxYTZlLCAweDhlMzRkYzNjLCAweGNjZWVhZWQxLCAweDkzMTIyYzc1LAotCTB4NzRhNzU0N2YsIDB4OWRkNWJmMTMsIDB4NjcxYTNiZjksIDB4MzI5YWJlNDAsIDB4ZmI4OTBmMDksIDB4N2I4MjY1MWYsCi0JMHgyNjI5ZmZiMCwgMHhiZmZiMDc3OCwgMHhlNmI1YzY4MSwgMHhlNmNlNjY3NywgMHg1YmFjYzI3MSwgMHhjZTM0MTk3OSwKLQkweDg1MjY1NGJkLCAweGI3NmYwMDVhLCAweDBlMjU4MTZiLCAweDVlZTk5ZjY4LCAweGMzMmFmYjlkLCAweDI4NTM1NmYzLAotCTB4ODc2MWZhM2YsIDB4OGNkZTUwYTQsIDB4NGE3NTlmMzgsIDB4NTgzNjgyZDcsIDB4ZDZkMzlmNmYsIDB4YTMwMzc1M2YsCi0JMHg3MDdmODEzYywgMHgyNzkzMTM1YywgMHgzZTc0MjJjMCwgMHhlNDM3NjhkMywgMHgyMDhmMjViZCwgMHgxNTAxM2YxYiwKLQkweGYyZjgwYjI4LCAweDY4YzExZTQ1LCAweGI0ZjNhNTE2LCAweDNjZmNkZDZiLCAweGNkMmQxOGUwLCAweDEwNmZkZjg2LAotCTB4ZGU3MWJlNzYsIDB4NDBmOWM4NmYsIDB4MGJjMGI5Y2IsIDB4OWI0YzA3OWQsIDB4MThlMGZhNWEsIDB4Mzk2ZjYzMWYsCi0JMHg3OThhOWQzZSwgMHg5Njc3NjllMiwgMHg4M2E1MWY2ZSwgMHhhNjUyYzFkZiwgMHhlOTczN2Q1MSwgMHg5N2E4MmNmOCwKLQkweGY1ZTE2ZmI1LCAweGNmOGU5NzVmLCAweGFiOTU3YTgxLCAweDI0NmJkNzkzLCAweGIzNWZhYmNhLCAweDYwYjRjMTcyLAotCTB4ZTVlODI1ZDEsIDB4MjUyMzAwZGIsIDB4MTFiY2JkMjYsIDB4ZTJhYTcxZTksIDB4N2ExNjNiZGQsIDB4NWZhMTRmMzEsCi0JMHgxNTY1ZjhlNSwgMHgxNGY0NmVkOCwgMHhlZDZjYjc4ZSwgMHhhNzg4ZWRkZCwgMHgzMzY4YjYzMSwgMHhlZmVmOTNlYSwKLQkweGVhMmE3M2ZkLCAweDA5ZDMyZjcxLCAweGQ1NmIzYTNmLCAweDY4ZjA3ZTkxLCAweGU0ZjNiOWNhLCAweGMyZjM1OWMzLAotCTB4YTVkOWZlMGMsIDB4MWMyMjc2MDUsIDB4ZDJjN2YzNmQsIDB4YWFlN2JjMzksIDB4MWZkMTM4MjYsIDB4NmNmMjIzNWMsCi0JMHgwZmM4MWQ5ZSwgMHg3ZWYxZTdlNCwgMHg3NWZiZTBlZSwgMHhlYjBmMjI5OSwgMHgyOWI5YTNmNCwgMHgwZmEzY2VjMywKLQkweDVkYmIzMjFhLCAweDdkNWMwYzRhLCAweGIzZWQzZjRhLCAweGZmN2Q5ZGY3LCAweGM0OWJjYzNlLCAweDc1OWM2YTdhLAotCTB4MzdmYmYwNjUsIDB4OTNjOTBhNWQsIDB4ZTk4MWZmMzksIDB4MGI1ZmM0NjksIDB4ZGUyMTdmMDQsIDB4Zjg3OTMxOWMsCi0JMHhjYWEwZTQ4YiwgMHg4ODc0YzNjZiwgMHg4ZTlhNmVmNSwgMHhiNTgyOTdmMywgMHhiZWFiYjlmMiwgMHg2ODE2OWUzYywKLQkweGNmOTBmNzgxLCAweGJjODg3MWRmLCAweDM0YmU3MTFiLCAweDdiZTMzY2U2LCAweDc5ZWI0Nzg4LCAweDhhOGU4ZGM2LAotCTB4NTU5NzdlMjgsIDB4ZTUwNzI2NzksIDB4YTI3Y2UwNmQsIDB4ZjQ4NTkxZDQsIDB4NjQ3NzllYjMsIDB4OWUyZGJmNGEsCi0JMHg5YzVlYjExZiwgMHhmNzA0NGM3NywgMHgzZTgxOWQ4ZiwgMHg5ZmVmM2YxYywgMHg4MzBlM2JiZCwgMHg0MGJkNWZkYywKLQkweGU3Y2E2MWY1LCAweGE1MjZjYmQ1LCAweDIxNWNmYzJiLCAweDgyMGQwNWQ5LCAweDVjNmQzMmFmLCAweDE4ODdiMDNmLAotCTB4MzlmNmQzZWQsIDB4ZWJmYTNmMjQsIDB4YzlkNGRmN2QsIDB4MzA1ZWM4MGUsIDB4YmVlNmZjOTMsIDB4ZTYzMGRjZTQsCi0JMHhjMjNkZjUxMywgMHhmZDgyOTdjZiwgMHg4ZjdjYTEyMCwgMHg3MTEyOTNkZSwgMHgzZjNlNDg3OSwgMHhlN2U3YzhiNywKLQkweDNjYzk3YjY2LCAweDZmMzlkZjZlLCAweGQzZmE5NDU3LCAweGM4NjA3ZjQ1LCAweDBmOWUwYzY3LCAweGZhZjk5M2VlLAotCTB4MjVlNGQ3ZGUsIDB4ZTBiMzQ2MzgsIDB4MmYxM2I0N2UsIDB4ZDM4ZjNjNzYsIDB4ZjAxN2ZlN2MsIDB4ZjA2MzNiYWYsCi0JMHg4MTFjNzQwZiwgMHg0MjY3MzRmNSwgMHhjNjcwOGUzYSwgMHgxY2Y1YTNhMSwgMHgyMDQ3MTFlYSwgMHg1ODdkZGIxYiwKLQkweDg2MDU2ODc5LCAweDRmZTdhYzVlLCAweDQyY2MxMjk5LCAweGRiZTk1OTNjLCAweDZiM2M3NGEwLCAweGVjNjYyOTg3LAotCTB4MTZlYzk0ZjksIDB4MmY1NzdlODMsIDB4YzMyYmE1ZjMsIDB4OGIxY2Y0NGQsIDB4ZTdiZDVlNzAsIDB4NmRjMjFiNTMsCi0JMHg1MjdiZjFkMCwgMHg4Mjc3YmI3YywgMHhkNjY3YWY5MywgMHg0NGU2MzJmMSwgMHhlZDM4ODE2ZCwgMHg1MDk1OTc4YiwKLQkweDQ5OWY4MDdmLCAweDhmNWNmYzE2LCAweDE0ZTI5YWYzLCAweGZjNTBjMmViLCAweDJmZWQ4ZjVjLCAweDhiZmUzZjAyLAotCTB4YzdlMThmYzEsIDB4YWUzOTA4ZDUsIDB4YTAyNzdkYzEsIDB4YjNiYzFmZjMsIDB4ZGM2MGYyMzMsIDB4M2UyMzU5NzIsCi0JMHhhNjQ5YmM1ZCwgMHg5ZmI0MmRiOCwgMHgyODMxOTU5OSwgMHg2ZGFmOGJmNywgMHg3ZTA3NmZkYywgMHg0NGJjZmM1OSwKLQkweDljNDBiNGZjLCAweDljNDRmZjJmLCAweGVmZTZiMTNmLCAweDkyMDljZTU1LCAweDFlNzBiZDllLCAweDQ2ZjQ4ODVmLAotCTB4ZjNmMzE2Y2QsIDB4N2ZjMjlkYmIsIDB4Y2ExY2IzNzQsIDB4NDdmNzE1Y2IsIDB4YWQ3ZjgyYzgsIDB4MDlhZDNmZjgsCi0JMHg2YTkwNWViOSwgMHhjN2E1Njc2YSwgMHgyOTliNDZlOCwgMHhlYTZiM2MwZiwgMHhkN2U0M2Y0MCwgMHg2ZmJjZGE2NywKLQkweDE3ZWRmYzUxLCAweDIwZjE4Njc2LCAweDI5MzY5MmJmLCAweDI0OThmODgyLCAweDRiN2VjMzRkLCAweGZkMTk3Yzg1LAotCTB4YjY2NjU5OGQsIDB4ZTY4MzcyZWIsIDB4ZWRmOTc5ZjMsIDB4OTc3OWYzZTYsIDB4YjUzNDhjNzUsIDB4OWU0ZDdjYmYsCi0JMHhhMTE1ZmRlOSwgMHhhZmVmNGQyYiwgMHg1NGMxMzJkYSwgMHhjZWJlMTcxZiwgMHhhZWVhZmVkNCwgMHg3YzdkNTMzMiwKLQkweGZiNTM0NmU0LCAweDliNjc4Nzg5LCAweGRmNzRkN2VhLCAweGY5M2Y2YTZkLCAweGZiZDM3Y2Q4LCAweGE2ZDVhMzZiLAotCTB4YjQ3ZmQ3ZjcsIDB4NWFmZjU0YzQsIDB4YjUzMWZmZmYsIDB4ZmFlNDJjOGYsIDB4NjY1MzQwZWIsIDB4N2M5OGYxZjYsCi0JMHhhYTBmMDNlMywgMHgzZjlmMWQzNiwgMHg4YmQzNjg1OCwgMHhmODY3OWY2MywgMHg5NjU4YzViZCwgMHg0ZTlmZDFmOCwKLQkweDNhYTc2N2E0LCAweGQ3NjNiMmIzLCAweDM3NjY1MmY3LCAweDRlYTk5ZmU5LCAweGYwNjQzZDczLCAweDBiZjAwZTRiLAotCTB4NDU5MzdmMTAsIDB4NmRiYzgwZWYsIDB4ZDUxOTM5NDEsIDB4OTgzYjQzNzgsIDB4ZTJlNDZjYTEsIDB4YTc5NDE0ODIsCi0JMHhjNWY5ZjFhNywgMHg5MjM2ZDljOSwgMHg5ZDA4ZmFiMywgMHgwZTczOGY4YiwgMHgxNzM1NmRmZSwgMHhmNzQ4MmVmOSwKLQkweDJlMTk4MGExLCAweGEzMzEwMGNhLCAweDk2MDZlNjBjLCAweDI5MDYwYjBhLCAweDI4Zjk5Y2Q5LCAweGVlYmFkMmVmLAotCTB4MTViZGViMWIsIDB4ZGM5YzA3MWYsIDB4NjE3ODcwMWUsIDB4ZGZkOTM3OWQsIDB4NjQ1ZmVlMjEsIDB4MzEyOTczMWUsCi0JMHhhOGY1OTBmOCwgMHgxZWYwZWVhOSwgMHhkNzdmZTJkNiwgMHhlYjJlN2E2ZCwgMHg2OTc1NGNjNywgMHhmZmNhNGNkMSwKLQkweDNkOTcwNDQ5LCAweDFiNGRmZTczLCAweGIzZDliZjQxLCAweGNmMWE1NDAyLCAweGUyZDhlNmRiLCAweDlkNDVmN2U2LAotCTB4OWRlNzk3MTcsIDB4ZjEwYmJlZDAsIDB4ZmIxOGE1ZmMsIDB4Mzk3NDhhMmUsIDB4MzNjNmY2OTUsIDB4M2Y1NmFmOTgsCi0JMHhlZmZjOWZiNywgMHgzZjU5ODcyYywgMHgyMzdkZDYwYywgMHg5Nzk2M2U3OCwgMHhmOWQ0Mjc5ZiwgMHhkYTliNmI5ZiwKLQkweGRmNzVjMjZmLCAweGI3YzJlNzk4LCAweDdlNjA2NzY3LCAweDdmMDI3NjQyLCAweGU3YzVjNzNjLCAweGQ1NTM0MmYxLAotCTB4OGNmMDBiNGQsIDB4MjU4OWRhMDksIDB4NzNiMmU3ODMsIDB4NjhlNTBkMjIsIDB4ZjkxMThkN2YsIDB4ZTJkOGNmZDQsCi0JMHg3NTlkM2RlNywgMHgwNDdiN2Y3MiwgMHgxM2I0NjgyYSwgMHhjYjNmN2UzNCwgMHgzZDc3Y2FhOSwgMHgyNDU1YjI5OCwKLQkweDdmMjJjZTA3LCAweGJiYmFiZmNlLCAweGY2NWY5Zjg0LCAweDdjM2NmMjY1LCAweGY0MzdlMDlkLCAweGYxNTY4ZTVjLAotCTB4MWNhZGVhMGMsIDB4YjliY2Q3MzAsIDB4MzExOWUxNDMsIDB4MmU0NjYyYjcsIDB4NjYxZDZmYmMsIDB4ZWY1NDY5ZjMsCi0JMHhmMDVjZTg5NywgMHg4NzBkOGNhMywgMHg5NTdmYWRmNiwgMHgwM2Q2YmUwOSwgMHg5MDVlNTJkNywgMHhkYTE4MDVhYSwKLQkweDk5M2NjNmUxLCAweGY2MzAzN2M4LCAweGJiNGIzZTExLCAweGQ2ZDRmYzhkLCAweDA1Y2UwNzJiLCAweGI1NWJmMjMxLAotCTB4ZjdlYzZlOGEsIDB4MDg1OGJjMzMsIDB4OTMyZDY5YzYsIDB4YjQ3M2VmNGMsIDB4MDEwZjA3OGUsIDB4Yzk5ZDk1MWMsCi0JMHhkNjU0OTcxNCwgMHg5NjdlNGNkYywgMHg2OWUxYzk5YSwgMHhkOTYyNDE3ZCwgMHhlM2MzYzExMiwgMHgwZjhlMWVlNiwKLQkweDQyZWE4M2MwLCAweDNmNzNmYjNhLCAweDg2OTMxOWI3LCAweDJhMjk3NWY3LCAweDlkMWNlYjlkLCAweDhkNzE5ZTIwLAotCTB4NWI3ZWJmMDEsIDB4OTcwOWQ5MDYsIDB4NTc5NWUxOWIsIDB4MjFlMGZkM2YsIDB4ODlkOTAzY2MsIDB4ZmRlMTE2MzcsCi0JMHgzZDA0Y2IyMiwgMHg0YjZkZjNjZCwgMHg1ZGNiN2Q5YiwgMHg0ZGU1YWVkMCwgMHhiODAwYzk5OSwgMHgzMGQ4Y2EzNywKLQkweDBhMWM4NzlhLCAweDQxYjdjMWM1LCAweDFhZmI4MDJmLCAweDUzNWU1Yjg0LCAweDE1Y2NmMzRlLCAweDc0MDQ1ZTc0LAotCTB4ZDMyNTc1YzYsIDB4ZTg4MzMxNTYsIDB4Mzg2MzYxOWUsIDB4MzdmYzJiNGYsIDB4N2ZkY2I4YjgsIDB4NzkwYmE1Y2QsCi0JMHhlMzY5YmNhZCwgMHg5MDE3MmM3MCwgMHg5YjVlODFiYywgMHhiYTk3ZmQ4NiwgMHhkMzExZGExMiwgMHhkYmY0NzE1YywKLQkweGE4ZmZlZTg1LCAweDA4N2RkMzlkLCAweDEzNmZkOTRiLCAweDYxNjM2ZDc2LCAweGZhMGNiZGFjLCAweGQ3ZWMxNmYwLAotCTB4OGYyOWNiYTgsIDB4MTdiZjYzMTYsIDB4MTQxYmJiYjIsIDB4ZWU2MTdiNWYsIDB4YjQzMmVkODUsIDB4MGNmZjkwYzcsCi0JMHgzOWU2MGM3YiwgMHhjZmJiYzcwZiwgMHgzMWViZDY2NSwgMHhlYjllN2M3YSwgMHg0YWM5ZWNlMiwgMHhkZGUxZjc2YywKLQkweDEyZjZiODkxLCAweDFiYjI3MWU4LCAweGZhZjhkNWQzLCAweDFlODJmYmVlLCAweDI4Y2FiYTBkLCAweDNlYzEzMDJmLAotCTB4NWM1ZDc3ZDEsIDB4NGZmM2FkYWUsIDB4Yzg1ZGRlYjQsIDB4NjExYmM4ZWYsIDB4MTRlYzA3ZWUsIDB4YTU1ODNmZjIsCi0JMHhhNzU2ZmI0YSwgMHg1OGY3NWQxZiwgMHg2OGZiZTYyMSwgMHg5YmM3OTQ3OSwgMHhjYjUxOWZhOCwgMHgwZjNmMjBkZSwKLQkweGUyMDRmOWYwLCAweGJiNWZjMGMxLCAweGM2OWU3Zjg1LCAweGM1ZDZmMWY3LCAweGNkYTdjMDVhLCAweGQ3MGVjZjg0LAotCTB4N2Y5ZmQ4NDUsIDB4ZjMyOGI5ZmIsIDB4ODE1ZTllNzksIDB4MGZmYmQwNzcsIDB4ZjViODNlOTIsIDB4YjM4YzEyYmQsCi0JMHgzOWZlZGZkNCwgMHg3OWJmZmRlOSwgMHhiOGU2Mzk5YywgMHg4MDJmMTE4MSwgMHg5YzcxNmE3MSwgMHgyYWZmNWJkZSwKLQkweDhhNTFiYWUyLCAweGJjZWNiNjQ3LCAweGFiMDdlZTljLCAweDQ5ZjQzMzJiLCAweDQ1Y2U5M2EzLCAweDdkMTFlNzY2LAotCTB4Zjg3MmVkNGUsIDB4YzM1M2NlMTEsIDB4ZDRlYzVjNzgsIDB4MzA4N2M5YWUsIDB4ZDM0OWYzMmUsIDB4NzNkOGJjZTEsCi0JMHgzYTVlYTc1OSwgMHhmZTg3NjI1YSwgMHg1YTM4ZWQ0ZSwgMHgwZjVlOTBhMiwgMHhmNzhjZGUxMSwgMHhhNWZlZTc3NSwKLQkweGUzNzdmZDA0LCAweGRmMDBjMWZjLCAweDRiYWZlMzM5LCAweGY5ZmMxNmJmLCAweGYxODBmMTY1LCAweDUyNWZkYTc4LAotCTB4Y2Y2OGIzZDgsIDB4ZDZhNWUwMGQsIDB4MmE3ZmY3OWMsIDB4YzQxMmJkZjksIDB4MTNmZmU2MDMsIDB4NDYzYzA0NWUsCi0JMHg4YmI1N2JiYywgMHhhNDVhOWZjNywgMHhjNmUzMTA2MCwgMHg1NGY3NTIyZCwgMHhmZjA2ZDM4YywgMHg0MDczYTMxNywKLQkweDkyNTZiNzk5LCAweGNjM2RmZTk5LCAweGQ2MWFiYzAzLCAweGI3ZGIwY2ExLCAweDNlNjY3ZGIxLCAweDc1MGI5YjFiLAotCTB4MTExZDJiYzcsIDB4MWRkNDlmN2MsIDB4ZWQ0MmJjYTYsIDB4NGIwNDc3NTgsIDB4OGZkZmI0NGYsIDB4NDdmYTg2ZGIsCi0JMHg2ZjJjN2VmYSwgMHg4NmZmMDJkNywgMHgwZmViMGZlMywgMHhmZGYyODE1ZSwgMHgzMzEzMDU4ZiwgMHg0Y2ExMjYzMSwKLQkweDYyZjYxZGY1LCAweDg1MmNlMjFlLCAweDdkM2E2ZGVlLCAweDIyNzVhNjU4LCAweDNkNzM5NjYzLCAweGE4Y2VmZjNmLAotCTB4NWVlZGNjZmUsIDB4OTM5MjM3NWEsIDB4ODFlOWYzOGMsIDB4MTU1NzVjNWMsIDB4ZjYxMWZhNTYsIDB4ZjgxNWQ1YmIsCi0JMHhjMzNmZjkwNCwgMHgwODc4NWRkNiwgMHhmYjFkNzNiZSwgMHg3OWU2MGU2ZCwgMHhlZGEyZjcxYiwgMHg4ZmQ4YWQyYSwKLQkweGJiZmRjNmZiLCAweDM2N2FlZjI1LCAweDljOWY2ZTM0LCAweDI4ZGZlNWM0LCAweGJlMzUyN2JmLCAweGM5NjFmOThkLAotCTB4NjNhN2RiOGYsIDB4YWU3YmViYmMsIDB4MDU0N2JhNDYsIDB4OTk5ZGY5ZmUsIDB4NzAyYjlmZDAsIDB4NzE4NTRiMGYsCi0JMHhjNjZkYTkyNCwgMHg4NzZlYTBkNywgMHg3YmYxZTNmNywgMHhkMDJiNWI1YiwgMHg2MDZhNTc2MSwgMHhiYmRlMGQ5NCwKLQkweDg3YWQ3M2E1LCAweDhkZmMzZGYxLCAweDQ5Yzk2NWY5LCAweDllZjE1YWU3LCAweGU3NDkzNTM4LCAweGI5MDJkMGYzLAotCTB4YmE4MTg3NDgsIDB4NGM3Nzc1MGUsIDB4MmJhOTY5ZGQsIDB4YWJjYzZlYmMsIDB4Mjg1ZmUwZWUsIDB4MGY3ZWIzZWYsCi0JMHhlZjA3ZDdiZiwgMHgzMzdkYzMzMywgMHhlNTBjYjdiYywgMHhlODQ5MzUzZiwgMHhiMTY5OGQwOSwgMHhkYWNlYTFlNywKLQkweDNjNDllOTAyLCAweGU1Yzg1OTNlLCAweDI2NWY4OGM0LCAweDk3ZTIyZjc4LCAweGUyOTFhYzg1LCAweDYwZjEyMzZiLAotCTB4NWJkYTNlNzUsIDB4YjBlNjU0ZGQsIDB4Zjg4ZDJhN2UsIDB4NTFmMzFlNWIsIDB4YTgyYWMwNTksIDB4YTgzYWNiMWMsCi0JMHhhOTg1OTJiYywgMHg1NGRkNjIyYywgMHgyYTdlYjMxNiwgMHhiMTk3NGM3ZCwgMHg1NDdjYzA5YywgMHg4ZjFhZDlhNiwKLQkweGY5N2Q0NzRlLCAweGNiZTkzYjBiLCAweDFlMGYyZGMyLCAweDA1MDhjOTE4LCAweDZhYTViYTI2LCAweDY5ODY3ZTVjLAotCTB4Mjg2NGExYTUsIDB4ODAzODhiNTcsIDB4MTZhOWFlNzEsIDB4MzU0NWU2NjksIDB4ZDA3ZDkwYTAsIDB4OTNlYTY0MjMsCi0JMHhlZTIwYjYzNSwgMHgyYWI5YjI5ZiwgMHhlNzE1YWYzZCwgMHgzZWRmNmI4MCwgMHgyN2U0NzY0MCwgMHhhYTc5ZjhmZSwKLQkweDRiOTQ5MzUzLCAweGViMzI4N2RjLCAweDFhYjU4NmM3LCAweDczZTQxYmUxLCAweDFlYmJlMjJhLCAweGNkYmE4MmUxLAotCTB4MWVlNzRkZDksIDB4ZGZjM2NiZWQsIDB4NzQ1ZjcxOTYsIDB4NDVmNjlkOWIsIDB4YTAyNjUwNmIsIDB4MGMyZWUzNWUsCi0JMHhhNzk4NGIzNSwgMHg5ZjZhNTE1YiwgMHhmMjRkN2M0NCwgMHhjZTFhOTM1MywgMHg5ZTBkYTA5OCwgMHg3OGZhYzQwNywKLQkweGViZGY5MDZkLCAweGMxY2E5ZWJiLCAweGY3OGZmNjdkLCAweGY5ZWI0ZGJmLCAweDM0YjljOWY1LCAweGEzY2ViYTlmLAotCTB4ZmI0ZGMwNmEsIDB4Y2RjYTJhNzYsIDB4ZjYwM2U5YzcsIDB4NmQ4ZGQ5MzcsIDB4OWUwYTVmMmUsIDB4MjVmZmU5M2IsCi0JMHhjMGNhOGZiZiwgMHg3ZTk1ZjdkZiwgMHhjN2JlZWM1NywgMHg3NDUwMjZlMSwgMHgzN2FmNjMyYSwgMHhhYmY5NTI2NSwKLQkweGJmOTUyZjI2LCAweDFmOTlkMjY4LCAweGY2MjNiOTFjLCAweGUxMTEzNmE4LCAweDExZDAyZjRkLCAweGYwZjQ0ZmRlLAotCTB4NjEyNjYzZWIsIDB4MTc5ZTdiMWUsIDB4NzY5MmQzZTcsIDB4ZDQ0NGQ1N2MsIDB4NzdkOTNlM2YsIDB4Nzc2MzhjMTksCi0JMHhmNzg0OWYyZiwgMHhjZTY0YjYyNywgMHg5NTk0N2NhNiwgMHgxZmU3MDRkYSwgMHhjNTE2OWUwMCwgMHg3MTg3NGNlNywKLQkweDY4NzZkMzVmLCAweGQzNzk0MTk3LCAweGI4OWQ5MzE3LCAweGQ2OTZiZmFlLCAweGRmNzE3OWE5LCAweDNhZWRmYzY0LAotCTB4N2Y0MTAzZWUsIDB4ZmVhNTZmYWIsIDB4MDliZmEyZWMsIDB4MThmZjZjNGUsIDB4ZjYwZGEzZjYsIDB4NmZkNDVmYjMsCi0JMHhjMzQ4ZWY3MiwgMHgxODlhODdmNywgMHg3YTUzN2RjMSwgMHhmN2Y2MWE2NywgMHhhZjg1YTJmMywgMHhkZjg0OTg0ZiwKLQkweGJiZGVlMmRiLCAweDM0OTlkMzc0LCAweDY3YmIwN2U2LCAweGU2MWM5OWU2LCAweDczN2FmNTg3LCAweDI4OTVlMzU5LAotCTB4OWE0ZGRmZmYsIDB4ZjkwNGU2ZDYsIDB4YWIxYjcyNTcsIDB4NGRhYzVmNTEsIDB4MDljZGI5YmEsIDB4MzY1M2VmYzYsCi0JMHhmNTRlOTNhMCwgMHgwMDE1ZGFlOSwgMHgxZmFlMzRjNywgMHhiYzM2ZjIwMCwgMHg2NTllZDA2ZiwgMHhmYzNhZjhhMywKLQkweDhlNWVlYmEzLCAweDhlYjhmZWEwLCAweDJkOTY5ZmJmLCAweGZkYTAxMGYyLCAweDlmOWZjN2NjLCAweGFkNTc3NjhlLAotCTB4ZTk2MmY5YzQsIDB4ZDNlZThjZWQsIDB4NTQ0ZjY0NDgsIDB4ZjNhMjQ5OWQsIDB4N2FmZDQ2NzksIDB4ZjMxMTA0YmEsCi0JMHg4ZmI0ODNkOCwgMHg0M2M2NzU1MiwgMHhiZTJlZmFlNywgMHgxY2U5YTczZiwgMHgzNGZlZDBlMCwgMHg5NWYwZWYxYSwKLQkweDI5ZjkzZjA2LCAweGJiNzRiMzZlLCAweGY5NzBjZmM4LCAweGVmYmI2MDQ3LCAweDgzZjk4ZGQ5LCAweDdjNDRlZGJkLAotCTB4MGE4M2Q0MGQsIDB4YWEyM2RiZTgsIDB4NmRmOWZmMzEsIDB4NmU3ZjQwZDMsIDB4YjNkZjA3NTYsIDB4NjU4Zjk4MjksCi0JMHhmNDdlNjdiYywgMHg4OTI0OGY4NywgMHg3ZTNhYjA3YSwgMHhmYjRiMjRmYiwgMHg0ZGZlYTMzYywgMHhlNzg1NmY2YSwKLQkweGJhYzFhZTdiLCAweDVmMmJkYTEzLCAweDA4ZWEwNjM4LCAweDRiMzY1M2RmLCAweGYxOGNjMzdmLCAweDZhZmVhMTFmLAotCTB4YmVkMTY1NzIsIDB4MTJiZjU1ZjUsIDB4YWFlMGVmNDMsIDB4NjY3YmQyZjMsIDB4YWQ2ZGQzZDIsIDB4OTAxMWZkZjAsCi0JMHg2ZWJmNWE3MywgMHhhMTdlYjQ2NywgMHhmNDYyZjlkYywgMHg2ZWIxNGNlMCwgMHhkMmI5OWQ1NSwgMHgzYTQxOGY0NCwKLQkweGZlZTg5YjE0LCAweGVjNjVjODIxLCAweGFkYTJlYjNlLCAweDIxNzNhNGRmLCAweGJjYmM5MzMzLCAweGU3ZTQxNjFmLAotCTB4OWJlNmQ2OWMsIDB4M2ZmZjU3ZjYsIDB4MWMyYjdmMWMsIDB4NGM3MDA0ZmUsIDB4NjM4NjJmZmIsIDB4NDFiYzY5YWMsCi0JMHhmMDRjOGEzOCwgMHg1MWMzZTdmZCwgMHhmMjhlMDA5NiwgMHg1NjFjMTRhZiwgMHhjNzI4YzU3YiwgMHhmNjQyYmRhMCwKLQkweGIwZjM4ZjJhLCAweGI3YjIzNmU1LCAweDE1MTU1MmZiLCAweDM2OTg5N2YzLCAweDUyMDRlYzg1LCAweDhlZWE1ZTE5LAotCTB4ZjE0NmYxZjYsIDB4OGY3Nzk5YWUsIDB4ZjNiNjFlNjMsIDB4OTk1ZGFjMmEsIDB4ZTgyYWZhODAsIDB4ZWQ3ZGMzY2MsCi0JMHhlMDdlZjE2ZiwgMHg3NDA1NjFmOSwgMHgyNzU0ZThkMCwgMHgxNzdiNDdlZCwgMHhmYzYwZDQ1NCwgMHhiMmE3M2JkZiwKLQkweGYxYmQ0YThlLCAweDMzZmZiYzE2LCAweDNjN2ZhMGE3LCAweGI0ZWI3N2RhLCAweDk4ZGIxN2I0LCAweDY5MDVlZjQ5LAotCTB4MjQxZTk3ZGQsIDB4MTNlZTc2YmIsIDB4MmM5NGRhZGIsIDB4Y2Y4ZDliZDQsIDB4MDUyYzFkYTIsIDB4Y2UxZGI1YjcsCi0JMHhlYjllZjc4YSwgMHg1ZjkyN2JhZCwgMHg1NDI5NzVhMiwgMHgzZjQ0YWVjNiwgMHg4NTBhZTQyOCwgMHhkYTNkMjAwZiwKLQkweDIzZDIxZjM0LCAweDdiNTA4OWY3LCAweGM3OTVkNDFlLCAweDgwNjZiZTZjLCAweDZkMGQ0OTU3LCAweDJiZjAwZjU5LAotCTB4OWFmYTE2NGYsIDB4ZjUwODdkZTEsIDB4NTI3ZmI2MWYsIDB4YWIzZGUxMDksIDB4ZDliYzlhMmIsIDB4OGI0OWJmNzgsCi0JMHhiN2Q2OGZiMCwgMHhkZjMxZDRjZSwgMHhiMzBhOWVkOCwgMHhiMGFlNTIwNCwgMHhmNjg1ZGUzNywgMHhkN2U0OWFmYSwKLQkweGUyZDc5Y2RiLCAweDFmNmJlMDdhLCAweDI2N2FmM2FlLCAweDhmMzliNWMwLCAweGM1NTMzOWU1LCAweDQzN2Y1ODdiLAotCTB4MWVhNDZjY2QsIDB4N2Y0YWY3NTMsIDB4NWZiY2Y5OTUsIDB4ODBkZmYzNmYsIDB4NmE5MmZjZWIsIDB4MTU3ZmJmYzYsCi0JMHg4NzliOTVlMywgMHhlZmUxNzgxOSwgMHg1Yzc1MzFiZCwgMHhjMWU2OTQ0ZiwgMHhmNzk4MzRmYSwgMHhiZWI5ZTc4NiwKLQkweDQ3ZmExNDdmLCAweDEzZTYxZjdiLCAweDFjNmUzYjI0LCAweDhjMzI0ZjlmLCAweDI3MTBmNzhkLCAweGY1YTNjZjhmLAotCTB4OGJlYjA0MzUsIDB4NTc4ZmRmMDcsIDB4YjE5NjNjZTgsIDB4NjcxY2UzYmYsIDB4NmMxZGZkYTMsIDB4ZGNlNGY1OGYsCi0JMHg3M2ZmZGEzYywgMHgwOGJlNjJjZSwgMHg2OTY2ZWRlNiwgMHhmMTUwYmY3YywgMHgzOGZjYzM0ZiwgMHhmOGJmMDBmNywKLQkweDhhYThkZTI5LCAweDkyNmQwZmZkLCAweGE5M2ZmZjc5LCAweDM5YjRiYmY1LCAweDdlNjQ1NDllLCAweGQ3MzAyY2VlLAotCTB4MWYzN2NjMWQsIDB4YjY2YTk2ODMsIDB4NTkyODc5ZjksIDB4YjM4N2VmYzQsIDB4ZTQ1N2U4OTEsIDB4NmMzNjgyZGIsCi0JMHg1MTBiMDU3NywgMHg5MDhiMTU3OSwgMHg0NThlM2Y1ZCwgMHg4NjM1N2VhOSwgMHgzOGYxZjMzZSwgMHg3MDBlOTc5NCwKLQkweDk5N2U2NDRkLCAweDY0MmI0N2M3LCAweDY4MTYzYmY0LCAweGJmNjhjZDgxLCAweGZlMTY0YzZmLCAweDZmZGU0OGNhLAotCTB4NzdjMTQ1NGIsIDB4YmUyOTdiYTYsIDB4YzVlNTE5YjEsIDB4NTU5ZWFmYTgsIDB4NDQ4ZGYxNGUsIDB4M2M2OWE1ZjIsCi0JMHhkZWUyMzg4ZSwgMHhmYmRlZjM4MiwgMHg4ZjhjZjUzOSwgMHgzY2U0NjM3OSwgMHhiYjc5ZTM1ZCwgMHhiYTMxYjcwZCwKLQkweDBmNjFhMjhmLCAweGY3OGNhM2Y3LCAweDdlZjMyNGFmLCAweDJmYzQxMjFiLCAweGMxNWZhZTQxLCAweDQ1OWY3Yzc5LAotCTB4NzRiOWVkY2IsIDB4ZDNkZmM5Y2YsIDB4ZGE4ZmIwM2QsIDB4MTc1NDgyMTgsIDB4NmRmYjliNzksIDB4NTEzYjdiMTYsCi0JMHg5MmNmZDkxZSwgMHg4MGYyZmU3OSwgMHgxOGZjMjM1ZiwgMHhjZTkwMzVmMiwgMHhlMDU5N2ZjMiwgMHhiZTZlZTgzMiwKLQkweGM3YjhjMWNmLCAweDRkYzg0ZmExLCAweGM0NGFhNTVmLCAweDA5ODM0MDY4LCAweDA1YjdlOWVhLCAweDRhODAxZWU4LAotCTB4MzVjYTlmMzEsIDB4MWZlODE5YTUsIDB4MTc3ZmQ4MmMsIDB4ZjU3MGI5YzEsIDB4MGUzMDM1MmMsIDB4MjNjZGM5Y2YsCi0JMHg1ZDc4MThiYywgMHhmZTBmZjE2MCwgMHhiY2YxMzFkOCwgMHg5ZWMzMzJmMSwgMHhjMzAzZmMzNiwgMHgwOWZhYjAxZiwKLQkweDcxYmZiZTg5LCAweDQzYTI3ZWVjLCAweGVkMjk2Njc5LCAweDdiMjM3ZWRiLCAweGMwZWIwZDk2LCAweDRmYmM3ZTZkLAotCTB4NzhhZjM4Y2EsIDB4OWZlZWNlYzQsIDB4NjQzOTQ0NWQsIDB4YjNmOWYwMzMsIDB4NTUwZjdlMmUsIDB4NzU0M2RjNDgsCi0JMHgwYzNmOWJkOCwgMHhmZjkxOWJiZiwgMHhiZTU4MTVjNSwgMHhhODZiMGNlNiwgMHg3YjNiNWZiNywgMHgxZmYyNjZmNCwKLQkweDc5ODZiMDk0LCAweGVlMTRhNzE3LCAweGM2NzUxOWZmLCAweGJmMTRjOGNlLCAweGM5YmY3ODE3LCAweDhmZGQwNmZkLAotCTB4ZWZlZTUzNzAsIDB4OWQ3OGJjZTgsIDB4NTczYTBkZmIsIDB4NGVkM2FhN2UsIDB4YjkzNzcyNzksIDB4ZjdiMTY5YzIsCi0JMHhiYjk0ZGM2NywgMHhmODdjZWQzNywgMHgyMzg3ZmMzMSwgMHg3OWMzZGUwMiwgMHg2ODA0ZTQ5ZiwgMHhlMTlmOTE1YywKLQkweDRiOWQyMGRmLCAweDM1YmRmYzRlLCAweDQ3MWFlMzNmLCAweDYxZjIzNzU5LCAweDVkZDdlMGI3LCAweDgzNDUyMDVhLAotCTB4MjE3NjZkYjIsIDB4YWNkYTRmYzksIDB4YmZkZTRlNDksIDB4OTQyNDdmMzksIDB4YzU3YzQ0Y2MsIDB4ZmYwNjQ3Y2MsCi0JMHg1OTA1ZWY1OSwgMHhlODczZjEyYSwgMHgzODZhZTA4OSwgMHhhZmFkMzM2MywgMHhhODg0Zjc4MywgMHg4YWY2YmViNCwKLQkweDI2Nzc0Mzc4LCAweDkwN2FmYTdiLCAweGQxYWM1OTk3LCAweGUyNmZmYjRlLCAweGM5MTY5NTdlLCAweDMxM2Q0NzZiLAotCTB4ZGZiOTZmY2IsIDB4NTU1MWU0NDcsIDB4MmRmMGY1ODgsIDB4NmEwNTFmOTEsIDB4ZTYzZjU1ZjEsIDB4N2QzZjMxNzUsCi0JMHg2M2VlMmRkNywgMHg4ZjYwMmM2MSwgMHhmZDAyM2Y5NywgMHhhZGRhZjQ5YSwgMHhkYmY1Y2MzMywgMHhlYjc1Y2MyYiwKLQkweDFlNDY4NjNkLCAweDdhNGQyYmNjLCAweDVkM2RlYzc2LCAweDg3ZTgxMmQzLCAweGE1ZGIzNTFiLCAweGNkMWEwZmM1LAotCTB4YWUyMzAzZjEsIDB4YzNmOTg3NTcsIDB4ZTNjMmNmYjQsIDB4N2M5ZGQzN2EsIDB4OGI4OGIyZmMsIDB4MzQxYTJmZjYsCi0JMHhiODg2MWQ3NSwgMHgzZGUxOWY1MSwgMHhhZTM1ZDNmNiwgMHg4NDVlMzA2ZiwgMHg1NzRkMDRmNywgMHg0MzZkZmI4YywKLQkweGVmOTM5ZjIyLCAweDY0NTdhNDdiLCAweDdkZmRmYjhhLCAweDU0YWY3NDk5LCAweDFjZTk5MjU3LCAweDM4NjcxMWFiLAotCTB4NDk0ZGUwNWQsIDB4M2I3ZjBmM2QsIDB4YWQ3MGQ4ZDYsIDB4NTRhZmE4MTgsIDB4MDdjODlkMWEsIDB4NWU3OWIzMmIsCi0JMHg4NzFmMjBkNSwgMHhjNzU0ZjE0YywgMHhmZGVlMzUxYSwgMHg4MGZkMDM3MiwgMHhlMjczYzE1ZSwgMHhkYjZmYjEyZSwKLQkweGQ4ZjVmOGFlLCAweDVlYzM4NDc4LCAweGRhN2YyM2ExLCAweDVlZGQ2NWRkLCAweGFiNTVlNWUwLCAweGFiYzcyY2VlLAotCTB4YmYzMDVhMGIsIDB4NDY5NGVjMTcsIDB4ODIyYmViZWQsIDB4ZWQzYjRmZTAsIDB4YWY3OGMzYmUsIDB4ZjM2ZGQzYWYsCi0JMHhhY2RjN2FlMiwgMHhhYjNmNjhkOSwgMHhlYjQ5ZDMyNSwgMHg1NmE5MGFlZiwgMHhlOGQyZjVjNywgMHg2ODU1MTlkNywKLQkweDNjYjVhNzNlLCAweGUwODk3ZmQyLCAweDY2OWZjMTUzLCAweGJlNjMxZmI0LCAweDZmM2ZlYThmLCAweDBkZGE4ZDNjLAotCTB4ZTBlYWZmYjksIDB4NzU2NzE0YjUsIDB4ZmY5NDZkNzksIDB4NzQ2ODE2YTQsIDB4NWZjMTlhOGYsIDB4NmI5YzdlZDYsCi0JMHgyNGZkYjg5NCwgMHhiYTQyN2ZjMiwgMHhkNzk0YTNkYiwgMHhkZmM1YWJkNiwgMHhiYjQ5N2U1ZiwgMHhiOWVlYmNjNCwKLQkweGVhNzc3ODk2LCAweGY4MjMwYTZmLCAweGUwZjUxNGJkLCAweDhmOTAyZWI5LCAweGFiOGMzNDk3LCAweGFiZmQzZThkLAotCTB4NDdjOTJmNTIsIDB4ZTFhZmNmMDYsIDB4MmRhMmRiNzIsIDB4NWZiY2YyNzcsIDB4ODk2OTNkZjMsIDB4NGJjMGQxZjgsCi0JMHg0NzI4M2MyMiwgMHg0ZmRjNTFmZSwgMHhmYWIxNjAxZiwgMHg1NjM1MjljNiwgMHg2OGUxYmVkMCwgMHgxMzhhNmQ4NSwKLQkweDVjZGM1MTRmLCAweDNlMjhiNzRmLCAweDZiZjk1ZmUyLCAweDA3NWM0ZTE1LCAweDljY2FkMzlhLCAweGE2ZGY5ZmI4LAotCTB4ZDE3MjUzNzgsIDB4MzMyMjNjM2UsIDB4ZWFiNTliOGMsIDB4Y2EzMWI5NjYsIDB4NGY3ZWYxYzcsIDB4ODg5OGUzODAsCi0JMHgyN2RmNWE4YiwgMHgzODBiYzgyNSwgMHhjN2Y1ZDYyNywgMHhlZGRiNWZmNywgMHgwMDlmMGYzZiwgMHg0OTFlNjhkZSwKLQkweDdhOGU4YTc5LCAweDc4NzNiNjQxLCAweGVkN2RjNTkzLCAweGM0NGRmYTg5LCAweGU3ZWM0ZjFmLCAweDhhYmJlMGY3LAotCTB4Y2E4ZTc0OWMsIDB4MzhhYjVlM2EsIDB4ZjAwYWQ3MmYsIDB4OWFkYjlkYTAsIDB4YmVlM2UzMGQsIDB4YzlkMTU3YjgsCi0JMHhjNDliMWU4ZSwgMHhhMTdjMzE5YywgMHhmN2EyNGVhNCwgMHgzYzM0YjVhNywgMHgxMzVhYzdiYiwgMHhhNzgxOWRmMCwKLQkweDFmNTUyZWQ3LCAweDk3ZmMyYzA3LCAweDk3OGE1YmZlLCAweDVmZGZmMGM3LCAweDZiZGZmMWUzLCAweDFjZTk3M2M4LAotCTB4MmQ3YmQ4ZmUsIDB4YmZiZTU0OTUsIDB4YzhkNzg1NjcsIDB4ZGI2Njc3YWYsIDB4YzA0YmVkNGMsIDB4YTM3MWUwYjcsCi0JMHgwMzJhMWNlZiwgMHg1MDMxMWNkNiwgMHhmMTg3MDYwNywgMHg3MWNmNTEzYSwgMHg3NGUyMmU3ZiwgMHg3MTRmYjYwZSwKLQkweDU1YmNhNzdmLCAweGMzOWQzYWExLCAweGViZmNlZjgzLCAweGY3NGY2YTM0LCAweGNlYTFkNGQ5LCAweGY2YWEzZjA3LAotCTB4YjBlOThkNGUsIDB4NGJkNTlmM2UsIDB4NmYwMGRkZDMsIDB4N2UwMWY3NDksIDB4OWQzM2E2MWUsIDB4Zjg4YjVlZmYsCi0JMHg4ZGVmMGFkZSwgMHgxYmY3NGUxZSwgMHgyOTk1M2EzZCwgMHhjMjNmZmNjNywgMHhlY2U4M2ZkZiwgMHgxYzYyZjI0ZSwKLQkweGZjNTg3M2I3LCAweGNjNzg4M2RmLCAweDc0MmZlNDZkLCAweDI4YzhmZDg4LCAweDRmYTQ0YmVkLCAweGZmNTFlYmU1LAotCTB4OGZmMjY0ZWUsIDB4OTlhN2UyODYsIDB4YjE2MTc3ZGYsIDB4YzFlZTA2MzcsIDB4Nzc2NDIyNTAsIDB4YzNiYjBhZDQsCi0JMHgyZTY0YmYxOCwgMHhmMjg3YWZmMywgMHhlZWQ2MjRkNSwgMHhjYTcwZmIwNCwgMHgxNWRmZjhjMCwgMHg0NzgwMmRmYiwKLQkweDlmOTZmYjgwLCAweDRmZmI0NTVkLCAweGMyYWY3ZjQ2LCAweDMzZWQ4NGIyLCAweDkyYzVhMjMyLCAweDEzZmMwOTdjLAotCTB4Y2VmYmE2NjYsIDB4NDJkMTljZWEsIDB4ZDk3YjFmZGMsIDB4Zjg4ZTk4MTYsIDB4Y2QxNjM4NmUsIDB4MWJlNzdhYzAsCi0JMHhiYzFlYzkyNywgMHg3MmVlMWUxMCwgMHg3YjlhN2Q3MywgMHg0NzlmNjE5NSwgMHhlYjM4ZDhkNCwgMHhlN2E1ZWRkMiwKLQkweDhiNTcwZjNkLCAweGZkMTg5MGYxLCAweDcyYjc4ODM2LCAweDdlOTBlYmMyLCAweGU4YWYzZmExLCAweGU5MmJlMzFmLAotCTB4M2FlOWYxMmQsIDB4MmM5MTlmNDgsIDB4ZjQ3Y2ZjMzgsIDB4ODljMTYxYzksIDB4MjJhMTJlOWMsIDB4ZTdkYzdmNGUsCi0JMHg1ZDkzNzk4MywgMHhmNTliNzQxZiwgMHg4YWZlZmZjOSwgMHgxMzBkMzdjYywgMHhkMjlmODBkMSwgMHhiZWYzYzRhMSwKLQkweGRlMmNlZjc4LCAweGUzYzRiYjhmLCAweDY5M2ZhZDM1LCAweDFkNDU3YjBhLCAweDQ5ODdjMzE2LCAweGZhODRlODJjLAotCTB4NGJlODhlMmQsIDB4NzUxOGZmNjgsIDB4MGUyZGZkZTMsIDB4Y2ZlYzY5ZTAsIDB4OTBjOGU1YzksIDB4ZjFiOWRhZGYsCi0JMHhlZGM3MzZlNSwgMHhjNzRkZjllMSwgMHhmN2RjMWUyMiwgMHgwM2UzOGU5OCwgMHhiZmMzM2JiZSwgMHgzYWM3N2JhNywKLQkweDNmODY2NGJiLCAweDZlNjIzMDlkLCAweDgzNjgwZTQwLCAweDBmZGExYTc0LCAweGZjODZhYmQ3LCAweDk1NzkzOTgzLAotCTB4ZWQzZmM4NWIsIDB4ZmVlMzJlZTMsIDB4OGM2N2ExYjUsIDB4NmI3MjVlZWYsIDB4OGI4ZmE2OTcsIDB4N2FmMzljODYsCi0JMHhlNDA4ZTUwOSwgMHhjYjJlMTBlYSwgMHhiZGY4Y2IzOSwgMHg1ZWUyYjU3NywgMHgwZjcxMWU5YiwgMHhkZmMyMDdlMiwKLQkweGFmZjczYTYwLCAweDNlYjA3YjhkLCAweGY3YzgxYzI4LCAweGQ2YWYzZjIzLCAweGRlMGVmZmU1LCAweGNhOGVjMzQzLAotCTB4MjdmYTZmOTQsIDB4ZmRjMjlmZGQsIDB4ZDRiZmIzNDMsIDB4MzFiOWVlMjMsIDB4NjZiNmE1ZmMsIDB4MzY3MzZmNzEsCi0JMHg0OTM2ZTdlNywgMHhmNjE2N2ZiYSwgMHhmNzRhMzYzYiwgMHhmMDY0NjcxOCwgMHhhNzM4ZDNmNSwgMHhmNGEzMzJjNywKLQkweDFmMDY1YTdiLCAweDdmYjNlMjI1LCAweDdhODBmMjExLCAweDhmOTcxODJmLCAweGUzMmZlMjU1LCAweGVlYjAwN2Y5LAotCTB4YjVlYzYzMDUsIDB4ZDAxNTFmZjksIDB4OTgwNzliYjksIDB4MGY5N2UyOGYsIDB4NjBiMzI3YjQsIDB4NWYzYjVlMGMsCi0JMHg3MzJmOWY4OCwgMHgyOWRiOGM0MiwgMHg0NTY2NzllZSwgMHg3YzgzNWU3YywgMHhiOWQxZTdjZSwgMHgwZmRjM2UzYywKLQkweGU4ZmU3MGE3LCAweDc3NzlmNzE0LCAweGM0NjRmZTJhLCAweGUxNzVhMjUzLCAweGY2NWU4MGM0LCAweDJiMWYyMzI3LAotCTB4OTliYzFjNWYsIDB4Yzc5YWY1YzYsIDB4ZmJmNDU3YmQsIDB4ZTJjYWJmYjMsIDB4OGYwMDA0ZjcsIDB4N2I2MDdmNDIsCi0JMHgxNzYyYzdhNywgMHhmMGZlYjI1ZCwgMHg0MTliZDY5YiwgMHhiZDIzNGZiYywgMHg0M2ZhZTk3MiwgMHg0OGZlODBiZiwKLQkweGYyYzJmYTIzLCAweGUyYmI0MWVlLCAweDU3YmYzMGM1LCAweGI2YzNjNWVkLCAweGQwZTNlYjE5LCAweGU1Yzg0MGFkLAotCTB4ZGQwYWU5OTUsIDB4ODQ1NTc2NDMsIDB4ZGE4OWZiYWYsIDB4ZjcxMzBjNjUsIDB4NWEzYzBiMGEsIDB4OGZjYjRiZTEsCi0JMHgwOGI3MWZjZiwgMHhmMTk2ZDQzYSwgMHg5ZWYxOTE3YiwgMHg5NDJmOWM3NiwgMHhhZmU4M2UzOSwgMHhkMjBiNGNhNywKLQkweGJjOGJiZmYzLCAweGRhZDE3MTg3LCAweGZlMmYwZTFkLCAweDBlY2Y1MjRlLCAweDg1ZWExNTU3LCAweGFhOGUxZDllLAotCTB4ZmE1MGRhZjUsIDB4OWJmNDJkZjksIDB4ZmY4Y2VjMmMsIDB4NjRiZmZhZTksIDB4MmZlMjdmYWUsIDB4NGJhMDFmNzEsCi0JMHhhZDFjN2JhNiwgMHg3NmU5M2RmZCwgMHhmYTAzNzdkMywgMHhlNWRkODEzYiwgMHgyZDMzZmExMCwgMHg5ZWM1ZDM5OSwKLQkweGFiNGRkN2M3LCAweGYwMjNkZDVjLCAweDY3YzA4Zjc2LCAweDFlNTdiODlhLCAweGFlMjcyMWQ2LCAweDM5YmI0NjQzLAotCTB4MDA5NGZkZTIsIDB4ZWYzZjdiOGIsIDB4ZmE1NzA4NjMsIDB4ZWNmMDNhZTAsIDB4ZmJmNjMyYjIsIDB4N2QzYmY4ZTEsCi0JMHg3NDJiOGE0MSwgMHg4MzkyMzZmZSwgMHhmMjk0ZjZmZCwgMHhmYmY1ODEzOCwgMHg4YzY3YzE2MiwgMHhjOWU4ZWQ5OSwKLQkweGZkMTJiY2QzLCAweGQyNTg2MTFlLCAweDgwN2VkZjcxLCAweDRmN2U2MWRlLCAweGIyNzcwYWYwLCAweGM1YTJjZmIwLAotCTB4ZjczZjkyZjcsIDB4NDhhM2Y1MjQsIDB4MGYxYzUwYWYsIDB4MGRiZjM2NmMsIDB4MGE3ZTg4ZjMsIDB4OWU0YzViNzYsCi0JMHhiZDE2YmRlNiwgMHhiZTY3ODU2MywgMHgxM2I3Y2Y5YiwgMHhhM2Y2MzdmNSwgMHhkZGUzOGI0NSwgMHg1YmFjNjBmZiwKLQkweDg2ZDNiY2M2LCAweDQ5ZTBlNTliLCAweDI2YzcxZjBmLCAweDI1OTc0YmM2LCAweDZlYmEwZjFhLCAweGViZTMwYzc3LAotCTB4ZTYwYmNmMzEsIDB4NDc5ZTEyN2EsIDB4YzgwYjM5ZTgsIDB4ZmFlZTAwZTMsIDB4ZmM2ZmM1ZmIsIDB4NTljZTc4ODgsCi0JMHgxM2QyYjAzZCwgMHg1ZGEwMDc2MywgMHhiMDk1ZWI0ZSwgMHhjNjU1M2JjMywgMHg1ZDg0NGJmNywgMHg4Mjc0ZmE4OCwKLQkweDkwNzcwYjE2LCAweDZkOTc0OTA2LCAweGYxMmI1ZjVjLCAweDQzY2MzNWY1LCAweDliODk3ZWZjLCAweDJmYjQxOWZhLAotCTB4NGZiMTFkYjgsIDB4Mzg5ZDZiY2MsIDB4OGRhYWZhM2YsIDB4MjFiZDkyYjUsIDB4ZTljODY0ZjAsIDB4NmU5YzhiNGUsCi0JMHhlYzM1N2NmNSwgMHg3N2UyNzViNCwgMHhmMTdlOTEyZCwgMHg2MTRhZTFmNCwgMHhmMzFjOTVhZiwgMHg5NWJjYzc4ZiwKLQkweDFmMzQyYWNiLCAweGRkMjVhMWZhLCAweDllNjAwZmIzLCAweGZjMWVlMTRlLCAweDM5NDE5YTYxLCAweDhjZmMxNDJlLAotCTB4YzE4ZGNkZmQsIDB4NmUzY2VmZGYsIDB4ZTZmN2RkOTMsIDB4ODU3ZjA0NTcsIDB4N2NjMGQ4YzcsIDB4ZWJkMThkZWYsCi0JMHg3YWUxZWVmZiwgMHgyZGZjMWQyYiwgMHg1ZmQzODM5NCwgMHg3ODVlYmQxMSwgMHg5ZTAwZTJhYywgMHhiYTA1YWFjMywKLQkweGY4MzBjYWEzLCAweDZmM2MzM2EzLCAweGUxZWQwYmI5LCAweGY2ODdjYzYzLCAweDllNzg2Zjc0LCAweDQ3ZjAxYzZkLAotCTB4M2Y2ZTFhZWYsIDB4ZDVmOWU4MGUsIDB4OTdhMDVmMWMsIDB4MmY5N2E4YzMsIDB4MmU0ZmU2M2IsIDB4YzI5NmJhODIsCi0JMHg3MzY1ZWVmNSwgMHgyOTY3YmYxOSwgMHg1ZmExMGVlYywgMHhmNDg5ZTg2ZCwgMHhlMmE3ZmFkYiwgMHg3MjdkNmYzZSwKLQkweGU2MmJiMzYzLCAweDJlZmI0MGY5LCAweGE4M2I5ZjY4LCAweGRmNTE2YTZmLCAweGYzZGIxMzc4LCAweDc5OTI1MzIzLAotCTB4YzcxZTdiM2UsIDB4ZTY2NGY0Y2IsIDB4YWYzYzAxNzQsIDB4ZGM2NTA2ZTYsIDB4YjJmNTdjYzcsIDB4YWY3ODA5ZGMsCi0JMHg0MGE0YTFmYSwgMHg3ZWY4MTJkMSwgMHgwZTNlMGNmMiwgMHgyZTg0NzJlYiwgMHg0Nzg3OGRjYiwgMHg0NDMzYWZhZSwKLQkweGU0NDMyOGRjLCAweGYxMjQ2NzZmLCAweGU3MGE0NTcyLCAweDk3OWQyNGY3LCAweDFmOWNlOWY3LCAweGUzZjEzYzMyLAotCTB4YmI0NGNiNGMsIDB4M2JkNzFiM2UsIDB4YjdjNjk3OGYsIDB4OTE0YmFlNGIsIDB4OGIzY2VkMmUsIDB4ZGZjNmIyNGYsCi0JMHgxNzQ5NGJhZiwgMHgwNmRiNmFmNywgMHgzZmMxYjVmNSwgMHhjNjc3YzQyNywgMHhmYzYyNjVmOCwgMHg4OTk4Njc0NSwKLQkweDhkMjkxNjdmLCAweGNlOGIzN2M0LCAweDg2MzdjNDI4LCAweDNmZTIyNDVjLCAweDFhZWVmZjYzLCAweDE0YzZlMDQ3LAotCTB4OWZhM2Y3OWMsIDB4MjA5YzYzMTUsIDB4ZGYwZjY1NzcsIDB4ZGZkZmMyMzcsIDB4N2NiMTM2YjksIDB4NDE4MWViMTgsCi0JMHg5ZGYzZDA2ZiwgMHgzZDAwY2YxOCwgMHhhZDBhNjkzZiwgMHhmYzhiY2Y0MywgMHgzMWE3MmU1MywgMHhmMDhmZmE3NiwKLQkweGJiM2IxZGY3LCAweDhlNmJjY2FmLCAweDdhYzBlYmExLCAweDhjZmVlM2U5LCAweDg1MTk1ZDc1LCAweDg5ZTljMDQ5LAotCTB4NzI5OGQ1ZTcsIDB4Y2FlZGZhYTksIDB4ZjE3ODc2MDQsIDB4NWUxZGE5N2YsIDB4ZTQ4MTNkZDIsIDB4NTc4MTAxZjYsCi0JMHhjNDY2YmUyMywgMHg3ODk3ZjBiMSwgMHg4YWIzYmRiOSwgMHgxYTc5MzFmMCwgMHhmZmMwNmY5NywgMHgyMmZmODE1NiwKLQkweDFhN2ZmZjhlLCAweDY0M2RmZmMwLCAweDc5NzA3NDI3LCAweDRiZDY4OGM5LCAweGY0NWYyNGY5LCAweDQ1M2JmMTlkLAotCTB4YTBkZjI3YjksIDB4MjkzZGNlN2MsIDB4YTlkZjdmZGMsIDB4YmU0MDlmZmIsIDB4YmJmMjI1NWMsIDB4YTg4OGNmMjcsCi0JMHg0MDdiNThkZSwgMHgyYWQxN2VmYywgMHgxYWY5YzBmYiwgMHg1OTFiYzdjYSwgMHgwZWNkZmJjYiwgMHgxODk0OTdlZiwKLQkweDg1OTZkMWY5LCAweGY5ODAyY2M3LCAweGY5ZjE1NzY3LCAweDliYjE0ZGFjLCAweDU4NzVhN2Q2LCAweDQ4NWYyZTg3LAotCTB4YmIyZGZhZTEsIDB4NjAxNTIyMmEsIDB4NGEzNzZiN2YsIDB4MTIzN2Y0MGEsIDB4ZjgwOTg3N2YsIDB4MGIyMzY0NjYsCi0JMHhkMGZlZmVjNSwgMHg0ZjFmMWY0OCwgMHgwN2E0ODVmMywgMHhkM2U3MDY4YSwgMHhhNDU1OWI2ZSwgMHhjZjY5NWU4MywKLQkweGEwYjVmNjQ4LCAweDM2MDZhNGM4LCAweGJlZDc5ZjIzLCAweGYyZmNhMTFiLCAweDJiNzZlZmM5LCAweDllNWZjN2U4LAotCTB4Y2Y4MmRmZWEsIDB4NjU3OGY5OGQsIDB4YmVmZDI0N2QsIDB4Y2UxY2JiZjksIDB4MzJmNzYxMGUsIDB4NzFlMWNkMTYsCi0JMHhmZTA0MjdmZiwgMHg4ODdiMGJkNywgMHgyM2RmYTYxZCwgMHg5NGZkYjhkMiwgMHhlOWFjN2NiMSwgMHhmZjBjZTc3NywKLQkweGZhNzNmZDA3LCAweGI1OTk2OTNkLCAweDcwYTc4YTMzLCAweGJjYjE5NmZkLCAweDgzNGJlYzkwLCAweDU3ZTdhNjFmLAotCTB4ZDNlN2M0NmMsIDB4MDEzMTVjNDcsIDB4NWZjODk3ZWYsIDB4NzdmMDUxMTUsIDB4ZDZiYTdmYTUsIDB4OTRmZWY3MTYsCi0JMHhjMDFmNDI0MywgMHhjZWM3ZjYzYywgMHg2YjcyNDJlMywgMHg5ZDI3YjNiNCwgMHg2NzkzNmY5ZiwgMHgwZGRiYjdjNCwKLQkweDNlN2QyYzNlLCAweDBmYmE2ZWVkLCAweGI4NjU1NWIxLCAweGZmZTA2NGVmLCAweDM3OGFkNGYyLCAweGUxOTE5ZTExLAotCTB4NDZlMTEyNzUsIDB4NDljNDY3OGMsIDB4Y2ZjYTM5ZjAsIDB4OWNmOWFhMDcsIDB4NWNmOTQyNWUsIDB4ODJjYzYzYjYsCi0JMHg1NTZjZjk1OCwgMHgyY2ViM2U4OSwgMHhlODZlMTNiZiwgMHhhZTE0ZGU4YiwgMHhhZDQ4ZWZjNywgMHg3MWYyMDNmOCwKLQkweDE0NTNkNzdkLCAweDkxYmM1OWI3LCAweDQyNGMxZWZmLCAweGZlMjQ1Y2ZjLCAweDc4Y2RkZTYwLCAweGY4MGQ1ZGNmLAotCTB4YTNlZjc4MTcsIDB4ZWVjODk2MTQsIDB4ZjdjMzlkYWQsIDB4NzJiNzZhZGYsIDB4MmFhZDY1N2UsIDB4MWI1NzAzZGQsCi0JMHg3ZjQxMWVkZSwgMHg3ZWEzZDQ2MiwgMHhkNWE3NmUxZiwgMHgyZDJlZGQ2YywgMHhhOGViYzE4YywgMHgyN2U1MTBkYSwKLQkweGU0MzZlZTVjLCAweDJiMTllYjg5LCAweGQ4ZGM2M2RmLCAweGM4NzZmYzA1LCAweDllZWFlZGM1LCAweGZmMDdlZTUyLAotCTB4N2FjOTA4M2YsIDB4MDA4MDAwNmIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsCi0JMHhkNTk0N2M3OSwgMHg2Nzc5ZjBiOSwgMHhjYzkzMzI0ZiwgMHgyMTMzZGY2NCwgMHg2MTI2MjIwMSwgMHgwMTE2MTIxMiwKLQkweGEwMDg0OTMzLCAweDI0NTg0ZTA4LCAweDgxZWMzNmM4LCAweDhiZjYyOGFjLCAweDBjMTk3ZTk1LCAweDZmNjJlNDUyLAotCTB4YjkwNTU2YWMsIDB4ZGE1NDQwNzYsIDB4MWEwODA5NjIsIDB4ODhiMGU4MzQsIDB4MTQ4ZDZhZDAsIDB4NDNiMDViMDUsCi0JMHg5MjEwODhhNSwgMHg2ZjE2YjYyOSwgMHg3OWU3YmQ2OSwgMHg3OTk5MzljZSwgMHhmOGIwY2NkZiwgMHhhYmJmN2VkMSwKLQkweDljY2UxYzdmLCAweGYzY2Y2Y2Y3LCAweDI3M2Y2NzljLCAweDJkNjc1YTVkLCAweDJiYTQyMjI5LCAweGNhZTZjMjI5LAotCTB4OWRiZGU0MjQsIDB4OTE0ODhlZTMsIDB4ZTk3Njk4ODQsIDB4NTVhZTUwM2QsIDB4ZDAzNDQ5NmQsIDB4NzQ4M2I1ZjYsCi0JMHg0ZWRhMTZiNiwgMHg2MjkwOWI4OCwgMHg4ZTM1YTI0MiwgMHgxMmNmZDBkZCwgMHg5MmFkYjI2YiwgMHg0OWVhYjEwOCwKLQkweGM4NDhkOWExLCAweGVlYzRmMWIwLCAweGYwYjdlNWE2LCAweGFmYWQwOTVmLCAweDQyNWNmNWE0LCAweGMxZDMzNGVlLAotCTB4MjkzZmEwZTIsIDB4YzkwODk4NzQsIDB4OWM3MDliMzYsIDB4YzMyMTE1NzgsIDB4YWMzOTA5MGIsIDB4MzQ0MzJlMjUsCi0JMHg4YmUwYmIyMSwgMHg4OWFjODQxMSwgMHhlMzk5YzQ3MiwgMHhiMTBmMWU2MCwgMHhmMTk2ZmVkMSwgMHg0MjU4ZjdmNCwKLQkweDViODkxYTZhLCAweDZjZDVmM2EyLCAweGY0MjNhZGRhLCAweDc2ODQ3Mjc3LCAweDY1MjQyMjRhLCAweGQ2ZjM4NGJiLAotCTB4MmQyY2RmNmMsIDB4NWU2N2JmYTAsIDB4MDc1ZmI1ZDgsIDB4YTE5MzU3ZGYsIDB4N2FiM2Y0NjEsIDB4ZDAzYjhkODksCi0JMHg3MTgwY2Y2MiwgMHhmNjFjN2I0OSwgMHg5NjU0ZWIxMywgMHhiZDcwYjg4NCwgMHhlOWI3YzZjMywgMHgwZTM4YjlhYywKLQkweGJmZjRhM2VlLCAweDA3OWY0YWI2LCAweDU2NjZjZmVjLCAweDliMzU3N2UzLCAweGE2NGZlZWI2LCAweDYyNmE5MWYzLAotCTB4ZWZjNTZmZWUsIDB4ZTZjNWRmZjYsIDB4ZmY4OWU4ZDcsIDB4Njc1ODY0ZmIsIDB4YTJlNzViMmUsIDB4YzRiYWZmNWMsCi0JMHgyYWFhZDdmZSwgMHhkZmI0Y2Q3MywgMHg1YjA4ZjhkYSwgMHhiMzhiNmQwYiwgMHg3YWMxODczOCwgMHgwZjNhYTc4ZCwKLQkweDYxOTE4ODUxLCAweGE3M2EzY2E3LCAweDc3ZmViZmQxLCAweGQxODQ4NDc1LCAweDU4YzM4NzdlLCAweDE1YjM1MmZmLAotCTB4NDc1NjNhZTEsIDB4Y2ViYmY4NWMsIDB4ZTNhNTYzOTUsIDB4OGUxN2VlMWQsIDB4NDliOWJkZTMsIDB4YTRlMDFlMzUsCi0JMHgyNzczMjcwZCwgMHgzNzkzZjlkMywgMHhiNDU0OTU2ZCwgMHhlNjQxMWIxZSwgMHgyM2Q2MDIzYSwgMHg1Y2M3YmJkNiwKLQkweDA2MmU2MTU2LCAweDFjMjI3NDM4LCAweDcwNjkzNmVhLCAweDQ3M2ExNWZkLCAweGZmNWNmMmY2LCAweDJhY2M1Mzc3LAotCTB4ZjRjMGY3OWMsIDB4ZmE1ZTc0Y2YsIDB4N2M2ZmQzZmIsIDB4NmJhOWY4ODQsIDB4YjA2ZGVjOTUsIDB4NzQ4ZmQ2ZGUsCi0JMHhhYzAwZjJkMywgMHg3ODkzNTMzZiwgMHhmNjEwMjY0MiwgMHgzZTdiMzNkZiwgMHhlZmU5NTlkMiwgMHhmYzMzNzYxMywKLQkweGE5ZGVlZGQ1LCAweGFlY2I0MDU5LCAweDFhNGJhMzUyLCAweDMwM2M3ODBjLCAweGFlYWNlODA3LCAweDI0YzI0ZjRkLAotCTB4MDY3MzlmYzAsIDB4YTc0OTQzYzAsIDB4Nzg4NDFlMDIsIDB4NDJiZTgxZDMsIDB4ZTgwMjMzZTEsIDB4M2FhYTA4YTgsCi0JMHg2N2E0N2Y3NywgMHhmYTY0ZTY2NywgMHhkZDM0NmI3ZCwgMHg4ZWU4MTFiZiwgMHhkOTE4ODNlZCwgMHhiZWMxMGZlZiwKLQkweGM3ZTkwMmUyLCAweGFmZTYwY2I5LCAweDgwMWRiNzA4LCAweDI4NTE1MTczLCAweGFjMDg1YWQ5LCAweDIzZWUxOGYzLAotCTB4MzFjMTljYjYsIDB4Nzk5NTNkNzAsIDB4MGFiM2Q2YzEsIDB4NjE4Yjg5ZTcsIDB4Mzc4ZDEyZjMsIDB4ZTcxM2U2MWQsCi0JMHhkNjRkNGUyYiwgMHhmZjdmNDI5MiwgMHhmYTU3OGUyNiwgMHg0ZWZkODdiYiwgMHhmY2YyMzlmYSwgMHg2ZGUyNTZlYiwKLQkweDc1YzI1OWFiLCAweDU1YTdhMTA3LCAweDUzZGFjZjgwLCAweGE3YTMwZjFlLCAweDkzZDAwZDRlLCAweDhmYTBiZjU4LAotCTB4YzY2OTM2NTcsIDB4NTZlMzllMDcsIDB4NmJjNzBlYjMsIDB4MWQ3MDZiMzUsIDB4YTI3ZTAwY2YsIDB4ZTc2NWE5NjgsCi0JMHgwNjU1OTlmMiwgMHgxOThmZjIzNywgMHhmOTQ4OGY2MywgMHhlYmY3MmYxNCwgMHhhYmJlNTAzYywgMHhlZDBiNWY5YSwKLQkweGY5YjMyNmVmLCAweDBmNTRhYWQ3LCAweGEzZWQ3ZDQwLCAweGY4ODJkMjQ2LCAweGYwMDkzZmI0LCAweDEyM2QzMDNjLAotCTB4YTU1YjUyZjEsIDB4MzhlOWViNzMsIDB4YjEyNmJmNGYsIDB4MjZlOGNiYmEsIDB4Y2ViNTlmZjQsIDB4MWZhMTBiYTksCi0JMHhiZGIzMGQ4OSwgMHgxZTczNzgwNCwgMHhmNTMzNGRkMiwgMHgzZDJiMjdhNSwgMHhmYmZhNTZmNiwgMHhjZTc2MzY4NCwKLQkweGRiNmExZTA0LCAweGRkMDE1ZDE4LCAweDVjMzliYzIzLCAweGNiNzRmMGZkLCAweGM3YzA4ZGNlLCAweGEzMzMyODlhLAotCTB4MDAyNzRhMDcsIDB4NjE2ZDlhZWYsIDB4MzYwNmIzZTYsIDB4ZTgwNGI3ZDcsIDB4MzdhYjIyZDIsIDB4Y2Y5OTI3YjQsCi0JMHgzNWViZjhlNiwgMHg4M2EwMGZmMCwgMHg4NjQ4YzRlZCwgMHg3NWYwNzVkMiwgMHhlZTcyYTFiZSwgMHgxOWQ0M2MwMiwKLQkweDE0YjU4N2JjLCAweGZhNGY0M2I1LCAweGEyODc1Y2YwLCAweDVmYTY5YWRiLCAweDg0M2IzODBkLCAweDQ3ODk2NTkwLAotCTB4NTVlNzE0YjAsIDB4NDdlZDhmZGIsIDB4YzcwZWZmN2MsIDB4ZDI1MGNiZmIsIDB4YmE3MzBmZjEsIDB4YzM2YTI5YTksCi0JMHhiNjczNThmMywgMHg3MWIxY2YxMSwgMHhjNjY3ZTMzYywgMHg0ZDdlNzI1MywgMHhiZjdjMTNjOCwgMHg4YTljNzFlYiwKLQkweDZhYjFiNjg4LCAweDlmOGFmNzBhLCAweDEyMTZlNjRhLCAweDkxMmU1ZjlhLCAweDhlOGRhMzg4LCAweDgzYTZjNWY3LAotCTB4YmUwMGYzOTEsIDB4ZTM1NWJmNTcsIDB4N2VkOGMzN2UsIDB4ZDBmZTcwNGYsIDB4MWMwMjhkYjUsIDB4NDc1MWJkZTksCi0JMHg0NmY3ZWM4MiwgMHhlMzllMjNjNywgMHg4NmJkZTAxMiwgMHg3YjZiYmVjMywgMHg1MTNmODhmOSwgMHg4YjZkNzE3YSwKLQkweGJkZmYwMWIyLCAweGMzY2E3ZGI4LCAweGVlZWJhMjdmLCAweDUzNjI1YWRhLCAweDM4YjRkOTAzLCAweDcxN2M3ZTkwLAotCTB4OTQyZGI2NjEsIDB4NjRkNTYyN2UsIDB4YmVmMTQ0YmMsIDB4ZTQ2MGVkYWEsIDB4Y2JlZmRhNDgsIDB4ZDQyZTBjNWYsCi0JMHg3Y2RkN2VkMywgMHg1MzVlMTc5ZCwgMHgxZTVjMDEzNywgMHg5ZGM3NjU3ZCwgMHg5NmUzNWVkMCwgMHg3NzhmODA2MiwKLQkweDNmZTlmYjZkLCAweDZmNTdjZjgxLCAweDkzMDgwMDZkLCAweGEzYmM1Zjk2LCAweDU0ZWZkMmYzLCAweGY3ZWNjZGVlLAotCTB4Zjg2NjUxNmQsIDB4OWYxN2NiZWUsIDB4ZGRlMDEzYmMsIDB4ZWQ4MmQ2ZDIsIDB4OGNkYzVlMTcsIDB4ZWNhZjAzZjUsCi0JMHhlOWJmZmI3OCwgMHg0ODhlYjU3NywgMHhlMTc3N2MxYiwgMHg5Nzg4ZmRiNSwgMHgwZWM2YTc1YSwgMHhkNzQ1MGRmYiwKLQkweGNmZGNlY2NmLCAweDg0OWI2NGY4LCAweDMxNTQ4ZGU3LCAweDVhZTgyNWZlLCAweGFmOTdlZmQwLCAweDI4MTExZGNjLAotCTB4OGVkNTZhMWYsIDB4NGZiZTA5NTQsIDB4OTI1ZWRiZDAsIDB4OWNhMDVlNTAsIDB4Njg4YzM3NzgsIDB4ZGZmZWU4YzIsCi0JMHg5NjgxYTVhMywgMHhmYmU1ZWExNSwgMHgyY2U3ODBiNSwgMHhkOTA4Y2ZjNiwgMHhhN2I1ZTQyYywgMHg2ZjdlZmU4NCwKLQkweDc1ZTZjNDQ5LCAweDNlYWVlZTcwLCAweDI2ZTc4ZDk4LCAweDFkMWRkMTgyLCAweDMxYzdjMGM3LCAweDQzNDQzOGMwLAotCTB4MGZiZWIwZWMsIDB4YjJkYjZmZDMsIDB4YTU0N2NlOGUsIDB4OTI0ZWZiMzQsIDB4NDc3NzljNzAsIDB4Y2UwNWJlZGYsCi0JMHg4YzJmNThiZCwgMHhkYTBmMzkzNywgMHg5ZTQxNTMyYiwgMHhmMmQ3ZGY4OCwgMHg2NzBkYWU3NSwgMHhlNzIyZWRmMiwKLQkweGM2NjUzNTM3LCAweDdjNWU1MGI1LCAweGYwMGFhYzM1LCAweDBlZjNhZjUzLCAweDcyZmMwMGIwLCAweDViNDcxZDE5LAotCTB4NmRhZWJmMTgsIDB4MzdhZGFlNWIsIDB4ZTcxYzdmNjIsIDB4YTBhN2NhMTMsIDB4ZTllN2EzY2MsIDB4ZjQ5ZjNkMWMsCi0JMHgwZWRmYWRhYiwgMHhjOTdlZjk4MSwgMHgxOTM4NjRmOCwgMHgzZTk4ZmIwZSwgMHhmMDA0OGNlYiwgMHhkNDZkYzg4YiwKLQkweDdmNWMyMGQ2LCAweDk2MjlkYWMxLCAweGFlODdkYjAyLCAweDQ5NDdlNzYwLCAweDIzMTZiOWI3LCAweGI3M2IxYjg3LAotCTB4NTMyYmJiYzksIDB4ZjRiN2M4YWQsIDB4ZmEwMWZlYjYsIDB4YjNiNTcyNTMsIDB4YmY3ZjQ0YzUsIDB4YTZkMzg1N2IsCi0JMHhlNmY3NzRhNiwgMHg1MzYzNjNmOSwgMHgxYzk1ZmQ2OCwgMHhhYmQyMDg2OSwgMHhkOGYyNjI1YSwgMHhlYTc5YzQ2NSwKLQkweGU3YzhjYTlhLCAweDJkMjNiZDc0LCAweDliYzc1Y2VjLCAweDQyOGVlNjg5LCAweDM0MmE5ZTNmLCAweGY4NDQ2MzQ0LAotCTB4ZDVhZjkwZmIsIDB4N2FmMmU1YWQsIDB4MzEyNzViMmIsIDB4OThhN2QyZjgsIDB4OGVmMTlmYjAsIDB4NjgzYWZmNjgsCi0JMHhlYjExYTMzZiwgMHhmMmZiZjRiZSwgMHhhYWJhM2U0MCwgMHg3NTVhM2U1MCwgMHg4MjBiZGViOCwgMHhmZTU3MTE3ZiwKLQkweDdmM2YzY2VjLCAweDEzOWI3YWEwLCAweDQ3NWUzNWU4LCAweDhmZTMyMzRiLCAweGZiZmM3NDk1LCAweDk2OTVhNTJjLAotCTB4MWYxOTdmMzgsIDB4NzA5NWRhY2UsIDB4NzRlZDBmNWEsIDB4NzYyZGQ3OWMsIDB4OGI2YzhlZmMsIDB4NTBhZmM5OTEsCi0JMHhlMzllYjA3YywgMHhiYmM5MTlmZiwgMHhiNWNjZTgxOCwgMHg3NDBjY2MzNywgMHg3N2E3N2Y1ZCwgMHg1YzFmMjA0MCwKLQkweGIwN2M2MTZiLCAweGY3NGRkMzliLCAweGVmMmY0NjVlLCAweGQ4MmU1NGFhLCAweDZlNWJiYmRmLCAweGE4NzQwY2RmLAotCTB4ZmYwM2M3OTQsIDB4ODY5NTc2MmIsIDB4MmVkYzliOGUsIDB4YzkyZjAxOTksIDB4ZjBjYjI2OWIsIDB4NTViYWY1NDcsCi0JMHhlNWQ2NTdhMCwgMHg1ZjgxNDM0OCwgMHg3ZmNiZWQ0OCwgMHhkN2FkMWI3NSwgMHhiZDQxYmM1MywgMHg5ZjNmMzc3ZSwKLQkweGVmODU0ZjU0LCAweDE3MmJkYmViLCAweGIxMjk3Y2MyLCAweDEyZDRkOTc3LCAweDUzNjM0N2VhLCAweDk2YmViZDY4LAotCTB4N2ZmOWMzMTQsIDB4MzdiZWNkMjYsIDB4OTEyMWY3MDUsIDB4NGYyMGFjOTcsIDB4ZjIwZDVlYTksIDB4ZjUwZjJlMzQsCi0JMHg1NmU3N2FmMSwgMHg4ZTQ5YmZkNCwgMHg4NWJkY2I4ZSwgMHgyN2Q3YWZhOCwgMHhmOWMxYjRjZSwgMHhmNjI3YzNlYSwKLQkweGFmN2Q0MmFlLCAweDBiNmUxYWRlLCAweDY4NGZkZmEzLCAweGZhNjAxZTk3LCAweGY1YjA5MThlLCAweDRmYTg3NjQ4LAotCTB4YzM3NDhmNzAsIDB4ZjgwOTJlN2EsIDB4MzlkYjUyODgsIDB4ZGVlZmU2MDcsIDB4ZGEyZTI3YTMsIDB4NzFkZWRlZmUsCi0JMHhiZDA1Y2YyOCwgMHhhM2Q3NWU5OCwgMHg5OGQ2OGY1YywgMHgyZmNiZDAyNSwgMHhlN2M5ZGIzNiwgMHg2NTk4MjU1NCwKLQkweDA1YmMyMmIxLCAweDY3YjY2YjNjLCAweDVjOWNlMGFhLCAweDlmZjBlZGUyLCAweDQzY2I5ZTM1LCAweDQyZGQ2OWZhLAotCTB4MmQ2N2QyMGYsIDB4ZjU2M2RiZDcsIDB4MDMwNzgyZjYsIDB4MjhmNDI3ZjAsIDB4ODJmYzFkMjUsIDB4YTZmMjdmZDMsCi0JMHg2MjFjMTI0MywgMHhhZWVlN2UyNSwgMHhiYTA2OWUyNiwgMHhhOTM3YmJiZSwgMHhhOGY5MjUzYywgMHg3YzhmZGQ1ZiwKLQkweDZjOGU5NTdmLCAweGI3OGVmYTkxLCAweDhhOGJmMzgzLCAweGYwMDE0NzE4LCAweDQ2ZTk4YWM5LCAweGFhN2YyMDViLAotCTB4YzJhYmI3MDgsIDB4NDIzY2Y0MDIsIDB4ZmEyYTQ1MWMsIDB4MTM3OGY5ZGQsIDB4ZDg3NWZmYzIsIDB4YWNiZDEwNzcsCi0JMHg2Mzk2N2ZiNywgMHgyMmJiYzAyYiwgMHhhN2VkMGMyMSwgMHhmOTVkNWE3YiwgMHg1ZDZkMWZhNCwgMHhlNzA1NWUxNSwKLQkweDIzNjNmMjkyLCAweGVkMzM0ZGYyLCAweGRmOGJiZjRmLCAweGU0NDVmMjMyLCAweGQ3MDVhNGIzLCAweDY2NjJkOWI1LAotCTB4OGEzOGM0ZTMsIDB4NjRiNTgxMWEsIDB4MzkzMDU2MzksIDB4ZGIwNWIyNjYsIDB4M2Y3YzdkY2YsIDB4MjljZmE2MDcsCi0JMHg0YzlkMDE1MCwgMHhmNGY0ZGEzNSwgMHg5MmRmYTdiYiwgMHhiOGRkMjNlNiwgMHhmMzg0YzBhOCwgMHhlYzcxNWNlMiwKLQkweGQ4YWY2NjJlLCAweDUzODhlZTgwLCAweDdkNTZmYTgzLCAweDljMWRjM2EzLCAweGQ3MWQxOGFlLCAweGY0MGJmZDUzLAotCTB4ODg1NzRhNzAsIDB4MjY3NmZhYjcsIDB4ZGRiODIyN2YsIDB4NTAyMjdjMDcsIDB4NGFlNzE1ZGYsIDB4ZDdlMDViOWMsCi0JMHhkZTgyMzc0MCwgMHhkMWJkYjljNCwgMHhjZmNkZDlmMywgMHg3ZmRkMzc0NywgMHhkZTlhN2QyMCwgMHg2ZWI5NzQ2NCwKLQkweGRhMTRiNTk1LCAweDczMTA1NWQ3LCAweGI0YWFiZGEwLCAweGY4NzBhYzgzLCAweDYyZmFkZDY4LCAweDExYzYxYjg0LAotCTB4ZTJjZTJlN2MsIDB4YThmYzBiMzgsIDB4MzVkMWNiN2UsIDB4MmY5Y2I2NDgsIDB4ZjhmOWJmZDUsIDB4NjdlOTZiODAsCi0JMHhjZjFiMGQwNiwgMHgwNzcwOGVlMCwgMHg4MjgxOGZkMiwgMHhhNTg4NTRkYiwgMHg0NDczZjgwYiwgMHgxMmRmNWM5MywKLQkweGRjYjkzZmU1LCAweDY1ZmFjZWY4LCAweDdjMDFhNGFlLCAweGE4ZjJmZDA5LCAweDBiNGZmOWNhLCAweDQ1MjkyZmQ3LAotCTB4YTYyNmY0OTAsIDB4YWYwM2M2NWYsIDB4MjViMDdlMDcsIDB4MjRmYzBkYzIsIDB4NzczODllM2UsIDB4OTdjZjU5MDUsCi0JMHhiYzA5OWNmYywgMHgzZTIzM2IwYSwgMHgxYzlmN2Q5MiwgMHg1MzI0ZjRjZCwgMHg4YjJlZmIzNCwgMHgwYmY2MDE5NywKLQkweGNhYWIwNzllLCAweDQzYTg4Njc5LCAweDhmZDEwMWNiLCAweGM1ZGIwYmFlLCAweDFmZWQ3YTdhLCAweGZjNmY1YjAzLAotCTB4YWNiNjAzYTMsIDB4ZmZhN2MwMGIsIDB4MDg1NmRkNWMsIDB4ZWY1YWNlNzgsIDB4ZmEzN2NjZDEsIDB4NDhmMjExZTcsCi0JMHg3ZWIwM2Y0OSwgMHg5ZmIwNWI5MCwgMHhkZmQwZGNjYSwgMHg3NmU3ZWViNSwgMHhjYjllODI5YywgMHg2MzNhZjlmOCwKLQkweGYyZGRmODIxLCAweDY4ZWFlNzE4LCAweDQ1MTU5ZjVhLCAweGZmMTQzMWVjLCAweDIzZDFkZWIzLCAweGRmMWM5MTNkLAotCTB4NmI0M2IwMDAsIDB4OGZhNWM0MzQsIDB4ZGQ2YWJjMDYsIDB4ZmUzYzAwZGUsIDB4ZmI0MGYwMGQsIDB4MmUwYzk4ZjUsCi0JMHgyZDA3M2QzNSwgMHg2OGUyY2UzMSwgMHg4Y2FiOWUzYSwgMHhjN2EwM2NkOCwgMHgwYmYyOWY3ZSwgMHg1M2M0OTczOCwKLQkweDgxYTRmYzBjLCAweDhlMDEyMzc4LCAweDIzOWM5ODJmLCAweDc1N2FiYmUwLCAweGE5ZDQzYTY3LCAweGYzMGY5MzFkLAotCTB4ZWNjMTFiM2MsIDB4YjU1MWRmMjcsIDB4Yzc4NTIwN2IsIDB4NDdmNzgzNjUsIDB4MmU3YWU5MjMsIDB4YjliMmM4YWYsCi0JMHhkZmE3MzhlOCwgMHhkZjllZmRmYywgMHhlZDJmYWZkMywgMHgxOWNkMjJmOSwgMHgwZGViNTdjMCwgMHhjNjI2ODMyYSwKLQkweDQ4OTZlZjVmLCAweGJlMTA1YjU1LCAweGM5OWEyMzNiLCAweDA5ZGJjY2QzLCAweDY4YjgwNGU5LCAweGFlYjdhODdjLAotCTB4ODAyN2IzMDgsIDB4YmVjNTY3ZGYsIDB4ZTk2Yjg0ZDIsIDB4Y2E1NzBkZjMsIDB4OWU2MDNiODgsIDB4ZmExZmRhMDYsCi0JMHg0YjE5NWMzNSwgMHg4YzgyNDNkYywgMHhmOTAzYzc0YiwgMHg5OTI1NzBkMCwgMHgzY2Q4NjJiOCwgMHgzMTU0MzdjMCwKLQkweGZiZjhjZTRjLCAweGVkMTcxM2E3LCAweGFhNDU1YTdmLCAweGU3ZmJhZDgzLCAweGJiNWYwY2QxLCAweGFjMWYxOTA5LAotCTB4ZDdkZjA3N2QsIDB4ZmNlYzdlZWUsIDB4NmU0ODM2ZmEsIDB4YWYxNjBmYjAsIDB4MTRkNDc5MzAsIDB4Y2ZlOThiYTQsCi0JMHgzNjJkMmZhMCwgMHg0OGFhM2NiYiwgMHg4Zjk0M2ZlMCwgMHg0ZTM0NDYwZCwgMHg2NDdiNTAzNSwgMHhmNDY3OTcxZSwKLQkweGEwMjhjZDNiLCAweGNmMTk5NzU3LCAweGMzOWY5M2ExLCAweDdkZWZlZDc5LCAweGM1ODlmZTAzLCAweDQ1MTg2MjFhLAotCTB4YjA2Zjk5YzcsIDB4YmZhMTRlMWQsIDB4MjYzOGM5ZmYsIDB4YzJjNGM0MTIsIDB4ODNjNGE2ODcsIDB4ZDU5ODRiMWMsCi0JMHhiZDIyNzNhOCwgMHg3ZTgzMzE4ZCwgMHhlYTUxOTEyYSwgMHhhNWFlMjM2ZiwgMHg4ZjUwNjkwZiwgMHg3NGEyN2E0NSwKLQkweGFjNzE4YmEwLCAweDNhMDBiYTA0LCAweGY1OTgzYTA0LCAweGUyNmJlMzIwLCAweDVlN2U1Y2ZiLCAweDU5Zjg3NDk1LAotCTB4OGVjZjdjMDgsIDB4ZjE4MWNiMjksIDB4MzU4ZTUxMmMsIDB4NWUwZmRmNDgsIDB4NmViZmYxOTIsIDB4ZjNmMmZiYzksCi0JMHg0ZGNiYTc0MCwgMHhkZjQ4OTdiNiwgMHg3MGUxM2ZmZSwgMHhkNGU4MjllZiwgMHgyZTVhMmM5MSwgMHhlYTNhNDdmZiwKLQkweDlkZWYxZGEzLCAweDY3NWQzZTA0LCAweGEwZDQ3YTMwLCAweDc2ZDZlYzU3LCAweDI4M2VjNTc5LCAweGQ5NDUwNjBlLAotCTB4ZjA3M2MyOWYsIDB4NzM5NjUxYzMsIDB4MDI0ODI2OTQsIDB4ZTNkNzFkZmQsIDB4MDNiZjAwZGMsIDB4MDM2M2RiOWQsCi0JMHgxNTFhZGNlOSwgMHhlYmEyNzQwZCwgMHgxMGMzOGJjNSwgMHg0OTBiYzdlZiwgMHhkMWYxYzkzNSwgMHgzMWYxMTQ3MSwKLQkweDAxZDc2MGRmLCAweDFkZDgxN2RjLCAweDUxNTliZWI4LCAweDBjYjM2MjllLCAweDZmZWFiOWZlLCAweGY4NzFiZjZmLAotCTB4ZjllN2U3YWYsIDB4NjFkMjhlYjQsIDB4ODNiMDczOTAsIDB4YzMxNTQzYzMsIDB4NjRlOWM2ZjgsIDB4ZDNhN2FmNDYsCi0JMHgyODJlZjU0OSwgMHhmNjkyZDEwNywgMHhkNzhmZGQzYiwgMHgwMDdkNzkwYiwgMHhkNTllMmVmZiwgMHg3OTdlNzAwZiwKLQkweGE3N2Q5ZjNhLCAweDNlMzNlNzljLCAweDdiMThlY2NmLCAweGY2OGJjMDA3LCAweDRmMDBlOGYzLCAweDQxYjk4NzZmLAotCTB4ZWFmY2E2NGYsIDB4OGYxM2E3MDAsIDB4MTU1ZjkwMjUsIDB4MWYwMDA2ZjksIDB4ZjhhNjI5ZWMsIDB4NTc1OWZiYTIsCi0JMHgwMTNmNGJlYSwgMHhkZTlmNjRmYywgMHg3ZDdhYzViYywgMHhkN2MyN2RiYywgMHg5N2U1OWRmNSwgMHhhMWFmY2E4ZCwKLQkweDQ5ZjVmOTMyLCAweDg4NWY5MzM0LCAweDFkMTJiYTI3LCAweDExYjJhYmQzLCAweGVhMTc0ODNmLCAweDViY2ZjNzFiLAotCTB4ZjRlZTBjNjEsIDB4NTFhMzc4OWMsIDB4MWNmMjc5NGUsIDB4YWZmZDdjMDEsIDB4OGY4MjZlMWMsIDB4ZTM5NzBlOWMsCi0JMHhmN2Y3YzVkMSwgMHhlYjQ3M2YyNSwgMHhkZTRjY2RhMywgMHgzMGU5N2NkOSwgMHhlMGU4ZTljZSwgMHhjN2VkNWY3OCwKLQkweDIzOWUzNzQ3LCAweDBjNGU2ZmJkLCAweGE4ZmJiN2E1LCAweDQ0MmJhMGJlLCAweGY1ODdhYzdjLCAweDczNGJiMWY0LAotCTB4NzM4NTdmM2QsIDB4ODk4MGYwZGMsIDB4MjJiYmRjODAsIDB4YTFmMjJiZTYsIDB4OTdjYTkzN2YsIDB4NGU4ZjA2NzQsCi0JMHg4N2FmZDQxZCwgMHgyN2QxZjAxZiwgMHhkNDk1MWE1MSwgMHhkNWEwMjI3NCwgMHg3MWM1NjIxYywgMHg5ZTMzMjhjOCwKLQkweDNlNWViMGIzLCAweGYzODk4OWEyLCAweGVmMzk0N2MzLCAweGM4YWY4ZTI5LCAweDBlNzM0OTE4LCAweDM2MjM2YWYwLAotCTB4YTNlNzM3ZTgsIDB4MjliMzRjYWYsIDB4MWIzMjVjOWQsIDB4Y2YyYTJhNWMsIDB4ZDE5Y2FhYWUsIDB4NzllZmUwMzEsCi0JMHhiYmVhMjhmOCwgMHgwMTllNzRhNywgMHhlZDIwYzZhZCwgMHhjZjBiY2YzYSwgMHhiOWY2ZmU0YSwgMHg3NGJiNTMzZiwKLQkweGVlZWYxY2Y0LCAweDc0YzlmYWVjLCAweGE3Njc3ZmJhLCAweGQ4ZTcwNmRhLCAweDFmYWZmMmI5LCAweGE1YmQwMzBjLAotCTB4NGZlYjZiNTMsIDB4ZDdhZWFlNTAsIDB4OTkxYTNlYzAsIDB4MjU0YTc2N2UsIDB4ZWZjNWZmODcsIDB4YzE4N2VkYzksCi0JMHg1NDBmMGMzMSwgMHgxMzNhNDA5ZiwgMHg1ODU0ZTBmYywgMHhlYmExM2U2NCwgMHhmZDNjNDI1OSwgMHg1MWU3ZWU4MSwKLQkweGVmNGExN2MzLCAweDEwZjcyNWYyLCAweDE4MTYyN2NhLCAweDdkZmQyMmE3LCAweGU4NWRjMGYxLCAweDljNDg1ZTZmLAotCTB4YjllNjJmYzgsIDB4ZTQwYzdmYjQsIDB4Y2FkNjBiYTMsIDB4ZTU1YThiZWIsIDB4YzljZjI1ZjUsIDB4ZGZmZWJkZWIsCi0JMHg0ZWZmYjk3MiwgMHg5ODYzNTM5NCwgMHgwYmE4YmE1YywgMHg4NjNlM2VkZSwgMHg5Nzc3ZTNkMSwgMHhlZTUwODNjNywKLQkweGY5Yzc5NWY2LCAweGUzOTVhNzI4LCAweGFlZTVjM2RlLCAweDFlNDJjYjkwLCAweDg0MzE1YzM3LCAweGUzODhjNzE4LAotCTB4N2MxYzVjNWMsIDB4ZjVmMWY3ZmQsIDB4YTMzMTVjMzcsIDB4M2ZkYmVmN2MsIDB4ZDUzYWU1MTYsIDB4ODEzYmYwYzQsCi0JMHg4OTJiODZjZiwgMHgwYmE4YmJmOCwgMHgyZmRmZDA3ZCwgMHg4Y2EzYzcxNSwgMHhjMjJlN2NkZiwgMHhkZjg1ZmU3ZiwKLQkweDE5ZWZkMDU3LCAweGQwOTIxODg5LCAweGZiOTI3YjVlLCAweGUwZjljYzZiLCAweGYyMDMzYTg3LCAweDM5ZDllMjlkLAotCTB4YTVlZGJjOGUsIDB4NDhmNzljNGIsIDB4M2Y0ZDAwZDIsIDB4ZjcyYjdkM2YsIDB4ODJlMGU5NDEsIDB4ZDU5ZjgwMzcsCi0JMHg3MTYyOThjNiwgMHgzMDY0YzFkZSwgMHg3M2U4MmJjYywgMHg1MTE1YzNjZSwgMHhiMGZmZGYyMCwgMHg1MDIxM2NiMiwKLQkweDZiZjVlYWZmLCAweDQ0N2Q5OGU4LCAweGFmMjY1MTg4LCAweGNkOWU0Mjg4LCAweDJiZjJhNzZiLCAweDAxODhmNTFmLAotCTB4ZWY5Zjk3NDAsIDB4YjlmNDgxOWIsIDB4ODFlMmQ4OTAsIDB4ZTlmNjdiNmUsIDB4ZjdmZmQxZDMsIDB4NTg5OGU1MWQsCi0JMHgzY2Q3MTRjZiwgMHhhOTJmZDMyZCwgMHg2NWU3YTA5MCwgMHg0YTdmOWYzMiwgMHg1NDY3ZDMwNywgMHhmNTE2YmIwNiwKLQkweDlhYjEzYjE1LCAweDY0YTRkMWUzLCAweDEzMGE5NmYyLCAweDE2OGZhZDBkLCAweDVhMWUyMDc1LCAweDIzMzdjNTFmLAotCTB4ZmViYTdmNDEsIDB4ZjMyNGJjZDEsIDB4OWU3MDg5OWQsIDB4MWFhZjMwZjQsIDB4MTEzYjkwZDgsIDB4MzYxMTk2Y2EsCi0JMHg5MjI1OTQyYiwgMHhjMWQ2YzM0MywgMHgzNDk2M2NmMCwgMHgyYWY3YzJhNiwgMHhmNGNkNTc4MywgMHg3ODgyYmEyNSwKLQkweDYzZTYyZmU4LCAweGFmYWYxMzc1LCAweGNlNzk3YTllLCAweDY4ZGRmODIyLCAweGUzYWY3M2MyLCAweGYwNTU3OGViLAotCTB4YzAzMTAzMmYsIDB4Y2Y0NmY1YmUsIDB4ZTI0ZjE4OTcsIDB4OGFjY2FiYTUsIDB4MWZhYmE4NzYsIDB4OWMzZmJiNDEsCi0JMHhkNzk4MTFiNCwgMHg4MmU0YmM2OCwgMHg1OTg5OWFjZCwgMHhmOTk4N2E4MiwgMHgwMjExZTdiMiwgMHg1MmU4Y2Q3YywKLQkweGI2YmU0NjBkLCAweGY0OWFmOTEzLCAweDdiZTA2MmZlLCAweDAzZTY4Zjk0LCAweGFlZDkwZDFmLCAweDJlZmVhMGYxLAotCTB4NWYzNDUyZjgsIDB4NGJlNzBiNWYsIDB4MjFjMTg0NDksIDB4YmU3MWQ4ODYsIDB4MjMxNjliMWYsIDB4YWUzMzhhNWYsCi0JMHg4NmZmYTA5MCwgMHg5N2M4ZjFjOCwgMHhiNGYwMDFlMiwgMHg0NmJjNjYzZCwgMHgxY2UyNjdjNiwgMHg5NTQyN2FmMiwKLQkweDk0ZTQ5ZWJjLCAweDE0ZTQwZGQ3LCAweGUzYzkwM2NhLCAweDA2MzZmYzQ4LCAweGYwMWM5MWVkLCAweGQ4Y2I2ODNiLAotCTB4Y2UxZTk5ZjksIDB4ZWIwZGQ1ZDYsIDB4MTEzOWZiYTMsIDB4OTM3ZmZhYTMsIDB4YmI3MjQ1ZmIsIDB4NDc1YTNlYjUsCi0JMHg0ZjE1MGZkMCwgMHhhOGMxZTYyZCwgMHg2MTg4OWMwNywgMHgyZTY3YzA3YSwgMHg5MGZiNTc2OCwgMHhmZWUwOWVmZiwKLQkweDFkZTNhOTgzLCAweGRmOGExYTE1LCAweDA3Yzk3MmZiLCAweDhmOWU1YTc2LCAweGVmODY5ZTczLCAweGFjNjkxYzY3LAotCTB4YWFmNWE1YWIsIDB4ODc5ZTQ5ZjcsIDB4ZTYyNTA1OTYsIDB4OWYxNGVkOWEsIDB4NmM5YjY2NmIsIDB4MWFmYWQyOGYsCi0JMHg1NzZkMjMxMywgMHgyMmY1MWU5YywgMHhiNjk4ZjIwMiwgMHhhMjI1NTY2ZiwgMHhmYzAxYTNmZiwgMHg2YmZmNzRhZCwKLQkweDNhMDA2ZjQwLCAweDVlZDA0ZmU4LCAweDFhYzg3YWE2LCAweDc5YjdlZDAzLCAweGNlYmNkOTlkLCAweGRmMmE3ZTBhLAotCTB4ZmEwN2YwNTgsIDB4MTZmMzExMTYsIDB4NWMzY2U0MTIsIDB4ZTI4Y2U3YTUsIDB4NTNhODQ1ZjUsIDB4YmU5YzRhM2MsCi0JMHhlMTViZWZjNCwgMHgyZjU2MmNmNywgMHgxZTc2MGExOSwgMHg4M2FiMmZmYiwgMHhjZmYwMjgzMiwgMHhmZGRjZThlNCwKLQkweGE1MWQzZDYxLCAweGNmNWEzOGRhLCAweDdmNDM2MzFhLCAweDYxN2NlMTMxLCAweDlmODc5ODk4LCAweDczZmU5MWJiLAotCTB4YmMwNWVkODAsIDB4NjRmMWRkOWUsIDB4OTc4YzNjNDUsIDB4Y2E3ZTUwNGIsIDB4ZDYyYzBkY2UsIDB4Y2ExODdmNGMsCi0JMHg3M2MwZWRjYywgMHhmZmYxMDc3YiwgMHhmYjk1ZTMwNywgMHg4ZGJjNDdjNywgMHhjZWVmNmRlMSwgMHg2MWQ4ZjE2NiwKLQkweDM4N2VjZjFhLCAweDU5NzkyM2Q3LCAweDg3NzRjYmMwLCAweGE1MTFmZTU0LCAweGVkODM0MmQ3LCAweDgwMmIxZWUwLAotCTB4N2Q4NmExZDQsIDB4ZGUzZjM1MGYsIDB4NzA4ZmYzMDIsIDB4N2MwMzE0N2MsIDB4ZjI4MTk0NmMsIDB4MGNiNjVhMDMsCi0JMHg1OWNjZDliNywgMHhmODE1NmZiOCwgMHg0MmI1YmE5NywgMHg0MGEzZDkxZSwgMHg5MmFkNGRhZSwgMHg3ZDAwZmY1YywKLQkweGUxMWE4YzYwLCAweGU1MzE5N2YzLCAweDc3OTRkNzUxLCAweDNhYjIyYTRkLCAweGQ2YWNjZTUwLCAweGYzZjdmY2M5LAotCTB4NjVmZjk5NjMsIDB4ZWNkOGVjNWMsIDB4MmMwNzk0NTgsIDB4OTYyODM3ZGUsIDB4ZGJhMDA5ZjIsIDB4N2MwMzkyMWMsCi0JMHhlNzFjZTAyMiwgMHhhNTVkNzdjMywgMHhjZTc1MGViZiwgMHg5Y2ZjZWRlNSwgMHhkMTBmYjM0ZiwgMHhjZmNiM2VhMiwKLQkweDhlYWJlMGJiLCAweDY2OWU3NjcwLCAweDc0MDY5MjEwLCAweDIyMzQ5NTMyLCAweGJhNTYzZGZmLCAweDdkZmJjZjE0LAotCTB4NzgwNWE1YzQsIDB4ZTBjNjVhN2QsIDB4NjUzZGQ2MmMsIDB4OThhZjVjYmMsIDB4YTdkNzkwZTYsIDB4MGVmNTI5NTcsCi0JMHg3ZmJjN2IzYSwgMHg3OTRlMTlkZSwgMHgzZmExNjRmYiwgMHg4ZmViOTc4ZSwgMHg1NWNmZmViMywgMHg4NGI1Y2EwYiwKLQkweGNkYmVlYjk3LCAweDU0ZjgzZjAwLCAweDAzZjgxYzZkLCAweGZhMzMyNDNiLCAweDhjMjQzYmMxLCAweDE5NTQzNGZiLAotCTB4NmM2ZmUwZGMsIDB4NWJmMTY3NjgsIDB4ZWZkMDVhYjIsIDB4N2U4MGM3YmMsIDB4MzFkYTU2NTMsIDB4YmVkZjU3MWUsCi0JMHg4MDE0NWE1MywgMHhiNzVhOTRhZiwgMHgyMDdjZmMwNCwgMHhjODI3NTE4NSwgMHg5Yzc3YWUyZiwgMHg4M2Y3YmFkMCwKLQkweDUyYzRmY2JmLCAweDllNzRlMjRhLCAweGUxZGYzYzgzLCAweDE0M2JlNDEwLCAweDM0Y2VlOWZhLCAweDI4ZmZmOTg3LAotCTB4M2M3ZmEzMTUsIDB4MDM2MTFjZDUsIDB4YWFhZDc5YmQsIDB4NmI4NWZkMTAsIDB4YmYzMjRkMjMsIDB4ZjY1NWJhZWUsCi0JMHhmODRlZjgwYSwgMHhjYWZlNDUwOSwgMHg2YzY5M2Q3NCwgMHg0M2E3ZmU2MywgMHhjYzhkOGNjOCwgMHg3NmU2ZTQzZiwKLQkweGQzMmM3NjcyLCAweDZhZmI2OGNiLCAweGNlMjk0ZmY0LCAweDQxMGM1YzZkLCAweDMzMzcxMWI5LCAweDU1ODBmZDA3LAotCTB4ZTA0NTA1MWQsIDB4MDdmMmE1ODcsIDB4YjFkOWQzZmQsIDB4ZTU1ZmVjNTYsIDB4ZDVmZjQwMmMsIDB4MTgxOWM2ZGQsCi0JMHhkOGU4NjgxNywgMHhmNDY4NTlhYywgMHg4MmMzY2ZkMywgMHgwNDQ4MjJlZSwgMHg1ZmFmNWRkMCwgMHhmZDFlOTc2OCwKLQkweDhlNTU1NzQyLCAweGQ1N2QwMDFmLCAweDQ0ZjkzY2VhLCAweDdiZjg5NzRlLCAweDg0YjJmOTI4LCAweGU2NWI1ZGUzLAotCTB4YzI4OGIxOTgsIDB4OWQwM2U3YTUsIDB4YWEzYmVjMGQsIDB4NWViZTIwNDAsIDB4ZmU0MTZiZGIsIDB4OTA0Yzk5YTcsCi0JMHgyNTJlYWZjZiwgMHgzNjdiMjdjOCwgMHgxN2M4YmYzMywgMHg2ODdiZWE5NiwgMHhiNTJkNTkwYiwgMHg4ZWVlMWYyMiwKLQkweDVmZjA4YjFlLCAweDdhODQzYzY2LCAweDRhMjZmNTQ4LCAweDdlN2MwMTRmLCAweGJkNzk1NmQ5LCAweGIyZmIzMDg2LAotCTB4YmExZjdiNzYsIDB4ZjgyNDdlNDQsIDB4Nzk2ZWZkNTUsIDB4ZTRjZDkyM2YsIDB4YjljMzhkYjcsIDB4NDJkMWYzODAsCi0JMHgwNTRhNmQ4NywgMHg5NmNhYmQyYywgMHg2MjQ0ZWNjNSwgMHhmYzVlM2UwNywgMHgwYmZiOGViZSwgMHg4NWNmOTk2NywKLQkweDU5N2I4YjAxLCAweGQ0MWU5NmJhLCAweDY2YWYzYTYzLCAweGNkZjE5OGU3LCAweDkyOGYzZTYyLCAweGZkNzMxNzlmLAotCTB4OWQwZDRlZTcsIDB4Y2ZhZmQwYTcsIDB4M2Y1NjEzMTQsIDB4Mjc1MGVhYTQsIDB4MmRlYmZjYWEsIDB4MWU4NGZkZTIsCi0JMHhjMGE5ZjgyNSwgMHg0MjcwZTk1NywgMHgzYjNhNTM4NiwgMHg4ZmRkZjAyMCwgMHhkMzdjMDNmNCwgMHgyNWNlOTFmMSwKLQkweGM2ODk1NGM4LCAweGVmNjA1ZGYxLCAweDUxZjNlNDhjLCAweDVkMDE3MDdhLCAweDM3MDY1NGI5LCAweGE5MWFlZmQwLAotCTB4MDE4OGU1MTEsIDB4YWU1YTY1ZjQsIDB4NTdjODljOTMsIDB4YTk3NmE4ZGYsIDB4NDgyM2RlMDEsIDB4MzI3Yjk0ZTMsCi0JMHg0Njc2YmY4MSwgMHg5ZDI4OWMwMCwgMHg5ZmE0MGUxYywgMHhkZjQ5ZTIxNiwgMHgwOGU4YzkyOSwgMHhiZjJjYmJkYiwKLQkweDgyNDc0YTBlLCAweDY1M2U3YmVmLCAweGJhMDRjMGZhLCAweDAyYTcxODYzLCAweDNjYjQwOTAyLCAweDNhNDEyZDI0LAotCTB4NWE3YzY3MTksIDB4YWQ3ZmZkMDMsIDB4NzhkM2Y2NjIsIDB4ZmFjMGQ2ZTIsIDB4ZmM3MmNjMmEsIDB4ZDc5NDRiOGYsCi0JMHhhMWY2YjJlZiwgMHhkYmZmOGMwZiwgMHhlNDI3M2MzOSwgMHg4MmVkZGJjOCwgMHhkZjM5MTE2ZiwgMHg5OTU3MjRjYSwKLQkweGUxZjhmYjdkLCAweDhlYWVjMDg3LCAweDEwMzkyMjY4LCAweDlkMWFhM2RmLCAweGY4OTA3ZmFkLCAweDJkZWM0ZjQ5LAotCTB4YzRmN2MzZjcsIDB4ZjdjM2YxMDYsIDB4YWZiZWI5NjgsIDB4YzNmYWFmYTAsIDB4MjdhY2U2MTcsIDB4ZTcxNDNhN2UsCi0JMHhhOGQyMGVlMSwgMHg5MzcwYTQ0ZSwgMHg4ZWYxNjFkZSwgMHgyOGZlODAzYiwgMHg5MDM3MGMzZCwgMHg0ODZmZDA1YywKLQkweDg5NzNmMzExLCAweDZkZTgyMWYzLCAweGM1NDVhZjI4LCAweDIwY2FmYTcxLCAweGEzNWY0MDE5LCAweGJmZDBjM2RiLAotCTB4MTlkMDA3NzksIDB4M2UwMmRiYTUsIDB4NDJkZjkwYWUsIDB4ZGUxOTZmMmYsIDB4YTUzMmFlODcsIDB4NzhlMzk0MmMsCi0JMHgxZjFjODRkZSwgMHg3ZjllZDkyMiwgMHg3MmY0MTMyNCwgMHgwMWU1ZWExNywgMHg4NzEzMTQ3NCwgMHgxMWQyODhmYywKLQkweDcyM2VjZjllLCAweGEwYWVkZTUyLCAweGUzZWY4MTMzLCAweDI1MmNkZjVjLCAweDUzNWY0ODhkLCAweDNkMmM1NjU1LAotCTB4MmY0ZWNjOTUsIDB4NDBkNTRlMzcsIDB4MzMyNmY3ZmYsIDB4NzQwMzFiM2EsIDB4Y2JkZjA1OTgsIDB4MjBkY2E0ZTksCi0JMHg5MGU5MmJhZiwgMHg5YzBhYThjZSwgMHhhMTk3NDk1NywgMHhlODAzMmNlOCwgMHg5OGM3Yzg0YywgMHhhOGQ5ZDNlYiwKLQkweDY3NGU1YmI4LCAweDgyNmVlMmEzLCAweGRhZGYwNGNlLCAweDM3MmU2NjE5LCAweDk2YWVkYzgyLCAweGY5MGMwZTUwLAotCTB4ZWEwNWJiMjAsIDB4NTEzMmViMDMsIDB4YjE2OWRjY2YsIDB4NDZmNmM0MWQsIDB4NjlkNDVlZDYsIDB4NDJkZTQzNTcsCi0JMHg5ZWRlMGFkNiwgMHg3YTg3MjhlOSwgMHhhNzZkMTM0MywgMHg2NzFmMTc0MywgMHgyYmQ5MGQ3OSwgMHhhM2MxN2I1OSwKLQkweGUwNGQwNzhkLCAweGZlYjE3MmM3LCAweDQ2Yjk3ZTZmLCAweGRkZGI0OTFkLCAweGQyZmY3ODZiLCAweDM3YTg3MmQ2LAotCTB4YmZmZDY1YWMsIDB4NjBjODc4ODAsIDB4Yjc3Mjg3YzgsIDB4YWRiN2VmYzAsIDB4YjMzMWI0Y2YsIDB4MjViN2U5OTQsCi0JMHhhNTNiYmY3YywgMHg1ZmIxMDc1ZCwgMHhlNGI3ZWIyYiwgMHhhMDljMjFiMCwgMHhkNmY0Y2NmZCwgMHg0YjNlZjkzYiwKLQkweGM2N2RiMTM2LCAweDc4Zjc3ZTdlLCAweDQ1OGJhNTJiLCAweDVmZWExNzNlLCAweDQzYjU1NGU3LCAweGIwODVhZjkxLAotCTB4ZDZhNTRiM2YsIDB4NTFjNzI4NTQsIDB4ZGRhNTBiYjYsIDB4ZWVhYjViNjAsIDB4NWI2MWUyYzcsIDB4NzE0ZDE0ZTgsCi0JMHhlMjIxN2ZjYywgMHhhZWFmMTA0OCwgMHg5YTY3ZDAwYywgMHgyNDVkOThlMiwgMHgyNjhmOGJiZSwgMHg4ZDkxMWZhOCwKLQkweDQ0MzdiNDI2LCAweDJjZjNjYjljLCAweDg1MGVjMDkxLCAweDUwYmY0MjNkLCAweDU5NzFhZjcxLCAweDhjMmZhODhkLAotCTB4MmVmMTEwY2IsIDB4OWQzZTY2YWYsIDB4YWZkYmUwYjcsIDB4YWZmMzA2YzYsIDB4M2QzMWM3MzQsIDB4YmY4ZjNjZTUsCi0JMHhkZGFiZGY4YiwgMHgxM2JmMmUyYywgMHhlMDE5MjQ4OCwgMHg3MDU3Zjg3YSwgMHgzYzQyNzc1ZSwgMHgxNzI3MDk4YiwKLQkweDY1NzgwZTE5LCAweDcyN2UyN2Y1LCAweDZhNWFkZDYwLCAweDM1NTEyZmJjLCAweGNjMjA1YzZhLCAweDIzY2MyNWQyLAotCTB4M2M0OWQ0OWEsIDB4ZDc3ZDkxNTEsIDB4M2M0MzRlM2YsIDB4ODQwNzk2M2EsIDB4YTJkYzVmZWIsIDB4YzIyMDNjYzMsCi0JMHhjMTM0ZDlmOSwgMHhjN2Y1NDY5ZSwgMHhlMzk1M2RmMywgMHg0ZmUwYTM2OSwgMHhlMDEwYzg0MywgMHhkZTM4ZDM0ZiwKLQkweDNkNTAzM2VlLCAweGFiNzJlNTE4LCAweDVlMzdjMTU2LCAweDIxYjFiZTQwLCAweDZmMmRmZWE0LCAweDZhOTVmMDU3LAotCTB4YWU2MmVmM2UsIDB4M2UyNTJmNzcsIDB4NDljZTRiZDQsIDB4NmZjZjJjNmUsIDB4OGQ3NzdhNjAsIDB4MzVlYTM4ZjEsCi0JMHg5ZTk5MWIzZCwgMHhhOGJjNGI1OSwgMHhjYjc1MmNmNywgMHgzNmNkNDJmOSwgMHg0ZGFlYmQ3OSwgMHg5NzY4NmY1ZSwKLQkweDVjZjI3YmQ3LCAweDg2Y2Y0ZjM4LCAweDRmZTBhMWJhLCAweDAzZWU3ZWFiLCAweDBiNTZkZmY0LCAweGYzOTZlMmZlLAotCTB4MzI1NjQyMTcsIDB4MjBlY2YyZmUsIDB4ZWQyOGU3ZjQsIDB4ZWVmNzZhNzAsIDB4YTFmOGMzOGIsIDB4ZTgyZDY2NzksCi0JMHg1ODIyNzMwNSwgMHg5OGRhODJiZSwgMHg2NGMwN2M4NywgMHgxNDM4M2I0MCwgMHgzOWRhNTAxZiwgMHg4MzIwZWY0MiwKLQkweDJhMGY5ZjgyLCAweGNmMDAwYzY5LCAweGM2Nzc3ODAwLCAweDkyMWVkYjVkLCAweDIxZjAyYmI3LCAweDM5ZmI5MWVjLAotCTB4N2M1MGE2M2UsIDB4OTNiZjNjYzMsIDB4MWNmNzY4ZWMsIDB4MzFmMGNhNWIsIDB4ZTkwMmI4Y2QsIDB4MGM2NWQzZTEsCi0JMHhiYTJlYzIxZiwgMHhhZWM4M2I3OSwgMHg5MDc2MmVmZSwgMHhjZTJlNWZkMiwgMHhiMDlhNzc1NSwgMHg4NzY4YWQ0ZiwKLQkweDI5ODAwMDM2LCAweGYzN2JhZTlmLCAweDlmYTAwYmM0LCAweDM1OGVlZjhhLCAweGMwNGQzODkzLCAweDJhNTYzYzc5LAotCTB4OWU0ZThmZjcsIDB4ZTQyODdhNzAsIDB4MmIwZjZlM2IsIDB4OTNlMDBiZmIsIDB4ZmZhMWM0NzQsIDB4ZDg0MTJlYjAsCi0JMHhlOWZjNmM0NSwgMHhmMmVhZmYzYywgMHhlOGE4Y2NjYSwgMHg4OWJkZDk2YiwgMHgwMDlhNjE5ZCwgMHhjNjhmNmNmZiwKLQkweDRlNzYwOTE3LCAweGU3MDk1NWNmLCAweDQ4MjViYTg1LCAweGZmZGZjOTFjLCAweDg3YzQxODc4LCAweGY5ZGZjZWZiLAotCTB4M2YwM2RmYmQsIDB4ZTMwMjIxN2IsIDB4MzI1Nzk3N2YsIDB4YTZmMmVmN2IsIDB4N2MwNzk4ODEsIDB4MDU0OWM3OTEsCi0JMHhkZTFjOTYxYywgMHhjZTE3YjZmNiwgMHgxYzMxZDM1YiwgMHg3ZjcyNDZhZiwgMHgxZGI2ODdiZCwgMHhlMjYzM2JkNSwKLQkweDNjYWEwZTQxLCAweDJjNTc0NjNhLCAweDFkZjYyMTllLCAweDQyZTk2ZmRhLCAweGMwM2JhNmZlLCAweDBhNGZhY2U0LAotCTB4ZmE0ZWJjYzcsIDB4YjhjMDgwZmIsIDB4ZTMwMjUyNGUsIDB4N2UwZTQyYzMsIDB4MmQ2YWZkY2MsIDB4MTdkOGE1YmQsCi0JMHhjNGI0MmJmMywgMHgzZDYwYjNkOCwgMHhjMWJhYzMxZiwgMHgxNjkxZjQzZiwgMHhiYmY4MzVmOSwgMHhhNTQ4Y2UyMSwKLQkweGVlODk0OTJlLCAweGEzODgxZWJiLCAweDM4ODFiZDZmLCAweGM5OWUyZGJhLCAweGY2OTRhNTgzLCAweDYyY2QzZjMwLAotCTB4Y2VmOTgwMmYsIDB4NzllMWI4ZjMsIDB4MWYzYTc3MWUsIDB4MjM1MGUyYzksIDB4NWYxZjE5ZTMsIDB4ZTQ0ZGZiY2EsCi0JMHhmMTEwZjllNSwgMHhkOWRkZjE2ZSwgMHgzNTYxODM2NiwgMHg5YjFmZWI1ZCwgMHgzNjc1NjE4OSwgMHhmNTY3ZjEyNSwKLQkweDMzOWY5ODhkLCAweDY3YWJlZDhiLCAweDM5ZjMwNWFmLCAweGY4YWFiZjQ1LCAweDhlYjBhNWQyLCAweDE4YzcxNjIxLAotCTB4OWViNjE3MjgsIDB4YTlmYTA1ZDEsIDB4YTgzZjYwN2IsIDB4ZjU3ZGIwNGYsIDB4Y2M1MmIxODQsIDB4Yjk1ZjE1NTcsCi0JMHgzY2UwMWUzNCwgMHhlYzc4OGJjMywgMHg3NTEwOGZhZCwgMHgzM2RmOGUwNywgMHhjMjRmZjE5YSwgMHhmYzc1MTBmZCwKLQkweDViOGE4NWZjLCAweGE1NWUyZjVkLCAweGU2Y2VmYjhjLCAweGVmYjg4OWUzLCAweDk5MTQzNjJjLCAweDczYmVlM2NkLAotCTB4MGE0ZDY0MGMsIDB4OTFkYjlmNmQsIDB4NDhkNWVjYzAsIDB4ZGM1OTAwZDcsIDB4NTM3MTE1ZDcsIDB4ODc0MTc3NzEsCi0JMHhiOGZlNjkzZCwgMHg4ODliYzZlOSwgMHhmZTIwZmU5YiwgMHg3ZjRkYzc5NiwgMHg2ZTI0MWYxMCwgMHhiZmE3OGNhYSwKLQkweGI2NDE3YTBlLCAweDk4MGYwZjFmLCAweGQ0MmFkYzE5LCAweGNmZTBlNWI1LCAweDYwOTBiY2JjLCAweGU5MDE3MzFlLAotCTB4ZDAyOGVjZjcsIDB4ODk2ODhlYjMsIDB4MTM3YzhhZGIsIDB4ZTFlYmUzZjUsIDB4MjJhMWNlMmQsIDB4MzlkZjk5NTYsCi0JMHhkNjAzNTg5YywgMHg5NjhjZTQ5ZiwgMHgwZWUzNTFkNSwgMHhhOTRjMGZjOCwgMHg0ZmY1OTY0ZSwgMHhmYjI3ZWM2YiwKLQkweDkwNjlhMzNlLCAweDU1ZDMzZGFjLCAweGFkNjdhYjI4LCAweDdkZjY0M2JkLCAweDU5MzJkNmZmLCAweDc3NzNlMDdkLAotCTB4Y2RiZmJlY2IsIDB4YmY1NjU5M2QsIDB4N2U0MGZmMGMsIDB4NzY3ZTQ2YTYsIDB4NjVmYmI2ZmIsIDB4MWQxYzk3ZmQsCi0JMHhkZGNhN2U4MiwgMHg5NzEyZmU1YywgMHgyODc3MzNiZCwgMHhmYWMwYTM3MywgMHhjYmU2ZGFmMywgMHhjOTFlMjNjNiwKLQkweDQ1ZjZkMTIzLCAweDIzMTc0ZjFjLCAweDg1ODkzZGQ5LCAweDNmOWZjYzlkLCAweDZjOTk3ZGI4LCAweDJkNzUxYWZjLAotCTB4NDcxOTRmZTIsIDB4YzNiZTI0MmMsIDB4OTZlYTNmOTgsIDB4MzdkMjFlNmMsIDB4N2RiNGI4YWUsIDB4OWViYmY2MzMsCi0JMHhmYWZjMjI3ZSwgMHhiMTRkZTIwNywgMHgyNGM5MTc0OCwgMHg5MmIzZDE5OSwgMHg3MGJkOGMxZSwgMHgwNTE5N2I4MCwKLQkweGEzYjNjMDY0LCAweDIwZjQ2NDhhLCAweDFiODUxYmMzLCAweDZmMmVhOWZhLCAweGQxZGU2MTM3LCAweDcwMGJhMzkyLAotCTB4Mzk0NGZhM2QsIDB4ZTU1OTg0M2QsIDB4MjM5MTEwZjQsIDB4NGQ5MzA3YTcsIDB4ZTFhOGZmOGUsIDB4ZTEyYmZjNzIsCi0JMHhlOWNiYjE2ZCwgMHhmZmU5Nzg4MSwgMHhjYzc3ODBkNywgMHhmY2JkMzk3OCwgMHgxZGRjZTBhYiwgMHgxYzgxZTNjZiwKLQkweGQ5MGU0M2JlLCAweDM3MDg4YzViLCAweGVjMjQzZjk2LCAweGEzYjczZDdiLCAweGNmZGNhYzQ5LCAweDdmYTdmNDI1LAotCTB4MTU3OGYzYzYsIDB4ZDVmODQ3MWYsIDB4YjQyZTQ4ZDcsIDB4NjZlMzdiY2IsIDB4OWVlOTNkYzMsIDB4MWJjZmIwNGMsCi0JMHgzOGYzZjMwOSwgMHg0MWM1MDk1NCwgMHg3YmY4ODRmZCwgMHg4MGExM2YyOCwgMHg2N2FlNTRlYiwgMHhmYTNiMTBkNiwKLQkweGZjNDExN2E1LCAweDJiNjc5NjliLCAweDY3N2ZhMjk3LCAweDFkNjlmMTg5LCAweDk5MzhiZmY0LCAweGM0ZDU2M2U5LAotCTB4N2FmZGZjOGQsIDB4ZGMyNTZmZjEsIDB4MDEyNTJmNDAsIDB4MWMyNTU0N2UsIDB4NjNjOTBlYTUsIDB4ZTVjMzNlMDIsCi0JMHgxMGU5MzI0MCwgMHhmMmM5YzA3MiwgMHgxMmZlZTVmOCwgMHgwMGIyZjEwMiwgMHg1ZWY0MjUzZSwgMHg5ZjgwYmUzMSwKLQkweDdjNjI1ZmUwLCAweGUwNTlmODNkLCAweDE5ZjgyODFjLCAweDQ1ZTM5MWM5LCAweDYzODE1ZmU5LCAweDE4MWExODYwLAotCTB4YzA5MmIxMmYsIDB4YWZkMjhhZjgsIDB4NTBhN2Y3ZTIsIDB4YTdjZTkyYmIsIDB4MjE2Y2M4Y2UsIDB4Y2M0MzZmMTQsCi0JMHgxNWQ3ZjQ3NiwgMHhmMDk5Y2U5MywgMHhhMGE3ZjBiYiwgMHhkMjM2ZTE3ZiwgMHgyOTA4NWZlYiwgMHg4ZjEzYWU5ZiwKLQkweGJjOTJlMjlkLCAweDhkZjY2N2NmLCAweDJlYjg4YWMzLCAweGJmZTdjMzA1LCAweDQ5NDc5ZGE3LCAweGU0ZjdjNDU2LAotCTB4MDFjNjA3MzcsIDB4MmZmNWY1MWQsIDB4NDViZTRlZGEsIDB4N2NhYjUxYzcsIDB4M2Y3ZTgxMzEsIDB4NGY3ZjVmZTEsCi0JMHhlZTdlZTJmMiwgMHg0OGM3ZjYyMywgMHg0ZjUxOWU4MCwgMHhjY2NlYzZkYSwgMHg5NTJlZmYwNCwgMHgzMjUwOTE4YiwKLQkweDU3NjkxNDNmLCAweGY0MWFkOWVhLCAweDRlZThhYWZmLCAweDQ4NmJkZTgwLCAweGQzMzI5YzQwLCAweDc1NzU4ZWRmLAotCTB4ZTY4ZGZhZGYsIDB4YzEzYWZjYmIsIDB4MmNiZDlkY2MsIDB4ZmU3MDkzNWYsIDB4ZDBjM2VjMjcsIDB4N2Q3Yzk4ZjYsCi0JMHgzMzBiOGMwYiwgMHg4MmZiZmEyNSwgMHhjMGRjNzVjMCwgMHgwMzdlNDUzYSwgMHg3ODg0ZTNkYywgMHg5ZjJhMjZjNiwKLQkweGIwNGJjZjUxLCAweDE3NTE1ZWEyLCAweDNiMTNlYTdlLCAweDk5ZDQ1NjdjLCAweDM2ZDdhODFlLCAweDAzMDFhOGU4LAotCTB4N2FlYmY4ZjYsIDB4OTM2Yzk3MTYsIDB4NGMzZmNiZWIsIDB4YTEyZWY5NjAsIDB4YThmM2MwZTEsIDB4ZjVjYzc2MTQsCi0JMHg0NzkxMWRmNCwgMHgxNmUwMTEzNSwgMHg5NDRiM2ViMCwgMHg5ZjgwM2ZlMywgMHg5ZWY0OWRhNCwgMHhmZWZlNTQ5MywKLQkweGNjMmVlYTE1LCAweGFlZGNiYzEzLCAweGY1NGVmYmM2LCAweDFmYzg1ZGEzLCAweGYxYWFmN2VhLCAweGU4Nzc3NTA4LAotCTB4NzU2ZjNlZjEsIDB4OTNkNDQxZmIsIDB4MDMyOTlhYmEsIDB4ODVjOTdhYTIsIDB4ZTZiMzNhNjYsIDB4ZWM1N2YwMWEsCi0JMHgyMDdkOTQzNywgMHg0YzVlOGRmMiwgMHg5ZjMzZmNlMCwgMHgyYmU2MDdlNCwgMHg4YWY4M2U1MSwgMHhkYWY2MGY4YywKLQkweDRhNzliZGFkLCAweDkzZTMwNGFmLCAweDI4ZGNlYTE1LCAweDliZGFlN2I4LCAweGE1ZjFhMjg3LCAweDhmYzAwZTRmLAotCTB4NzIwZjFmNzIsIDB4MWEzN2U0M2IsIDB4NWQwMjViNDcsIDB4ZDRjZTk5ZDcsIDB4MGFiYzYwNjcsIDB4NjRlMWM3NzUsCi0JMHhjOTBhY2Y4MCwgMHgxMmI0NzEwNiwgMHhhODdmYmIzZCwgMHgzNWI3MmY1NywgMHgwMzc1ZDgwNiwgMHgyMDNiNTIxZiwKLQkweGM1N2E3OTVlLCAweGJmNzBkMTgzLCAweDUwM2I4YzU5LCAweDM5M2RlMTUyLCAweGY2N2Q3NjQyLCAweDlmODgyMmZkLAotCTB4YTNhZGIyY2QsIDB4NjY3YWQ5YjUsIDB4MmY3ZTY2NTcsIDB4Y2Y0NTkzYzIsIDB4NzYzYTNiZDcsIDB4YWZkYjRiM2YsCi0JMHg3ZGZlZjMxMSwgMHhlM2ZhMzUxNiwgMHgwYzY0ZDU2MiwgMHhhZjU4ODVkMCwgMHg3ZTI4NTdiOCwgMHg3MGNlZmI4NywKLQkweDVlZmM0ZDdmLCAweGYyMWJlMmQyLCAweDA3MWYyZDAwLCAweGFmZjYyY2ZhLCAweDM3ZGNhNGFmLCAweDg3ZThkMWE0LAotCTB4NmU5YzdkN2IsIDB4ZGQ0NWU4MGQsIDB4NDQzZjI2MDYsIDB4NmIzMTE1OWUsIDB4MzBhZDdjZjAsIDB4YWE3NWYzYjAsCi0JMHgzZDliYjBiZiwgMHhlYWJmYjAyNiwgMHg5ODUxZWNjMywgMHg5YTkxZjVlNywgMHgxN2Y5NWQ4MCwgMHg4MmNhM2RiMywKLQkweGRlYTJiM2ZiLCAweGZhY2NjMmI5LCAweGRlN2NmMzc1LCAweGExOTY5ZjE1LCAweDEyZDcxNjVkLCAweDdjZThjZjNjLAotCTB4NmE5ZmIzMDIsIDB4Nzk2NGE4YWYsIDB4MGYxYWI1NDYsIDB4NWVkNTBiZTYsIDB4OTEzZTYxZDEsIDB4MTQ4ZmZkZjgsCi0JMHhmZTAxYWUwZSwgMHhkOWYzZmNmYSwgMHgwYjVkNjE2MywgMHg3YzBkNmQ4OCwgMHgwNDZkNjBiZiwgMHgyMWU4MDU3MSwKLQkweDg5NThhZjIyLCAweDdjNzFlZmZmLCAweDQ0MzQ1YmQ3LCAweGU3ZWYxODMzLCAweGRkZjVhZTNhLCAweDA3NTRmZjViLAotCTB4OWQxMmVmYmQsIDB4NWM3MWNlYzgsIDB4YTVlYmNiMzksIDB4ZTFjNjA1NzYsIDB4MjU4NWRmOTQsIDB4NmNmYzhhNGEsCi0JMHhlY2FmZGUyZiwgMHg1YmRiMDdjZCwgMHg2MWFlNDA5YSwgMHhiMTVmZDdlNywgMHhlYmIzZjJjYiwgMHg1N2U4N2Y2OSwKLQkweDIyOGM2NTdmLCAweDRiOGY5YjNmLCAweGZkMWFiM2M3LCAweGUwYTE2MDc5LCAweDY2MDRiZGZmLCAweDllNDNkNGRmLAotCTB4ZGZjMDkwZDcsIDB4ZTdmOGZkMTksIDB4NWI3OWU1ODksIDB4N2YzODQ4ZGUsIDB4ZTM1NzZmM2YsIDB4MWY5ZmUzZmQsCi0JMHgxMmRmOGQ1MSwgMHgxMmMzZGQ2NCwgMHhjNTA2ZGMxOSwgMHhkYzVjZjA2OSwgMHhjZGY2MjFlZSwgMHhkZjE3ZTY0MSwKLQkweGUyMDVmYjg5LCAweDdkNzI5YzdlLCAweDczYmNjYmJiLCAweGM2YzNmZDYwLCAweDcyYWVmZjMwLCAweGVjODk0MTljLAotCTB4ZGRlZWIxM2IsIDB4ZjUxZjBjZDEsIDB4NjA3YzUzNmYsIDB4OWZjYjA4ZmUsIDB4NWRlZDFkZGQsIDB4MmNjMGZjOGMsCi0JMHg4ZTdjZjNjNywgMHg3Yjc3ZGRlNywgMHhjYmJlZjFkMywgMHgwZTdlY2M1ZCwgMHhjZDU3MGY0NSwgMHg0ZjgwMDdjZSwKLQkweDQyMzc0ZWQ0LCAweGFhMTkxOTJlLCAweDAxY2M5NDY5LCAweGY0N2FlYmU3LCAweDRhYmI4N2UwLCAweDcwYmVkNzg2LAotCTB4YzU3ZTIxZDcsIDB4ZmZkZjQyYjgsIDB4YzYzNTM5ZjIsIDB4YzYzY2JmZjEsIDB4MWJiMTJkY2YsIDB4Zjc3YzgwYTUsCi0JMHhlYmYzMDkyZiwgMHhhMTJhZDk3ZiwgMHg0OWRmM2Y5ZSwgMHgyZmU1MTM0OCwgMHhhMGQ2YjZmMywgMHhhNWY4Yjg1ZSwKLQkweDAzNjI5ODIxLCAweDdjYTRhZmJmLCAweDIxMjI1ZTY0LCAweGZlNzJkMjc3LCAweDc3NWM3OTZhLCAweDdlM2VmYWUxLAotCTB4N2YyODEyMzksIDB4OTQ0NjkxMTcsIDB4OTY5ZjhiMTcsIDB4ZWIyNmFiZjcsIDB4ODM3YTBjZmYsIDB4M2U4Y2RlMzIsCi0JMHhjZjE3NmE0ZiwgMHhmNzdhZTQ0ZSwgMHhmODE0MzI1MCwgMHg3ZDJmMDNmZCwgMHg4NmI0OGJhNSwgMHg5NGYzZmZhNiwKLQkweDgwNmI2NjlmLCAweGVjYjAxYWFmLCAweGI5NjMzNjZhLCAweDI4YmVkMTNjLCAweDM5YTVjMjkxLCAweDA4OWQ1OWQxLAotCTB4MTg4ZjhjZmUsIDB4NWVkNzJlM2MsIDB4MmUwMGYyNjYsIDB4N2UwMDhlNGYsIDB4ZDMzY2ExMmQsIDB4ZDhmMTY0Y2YsCi0JMHg3MjNkYzIxZiwgMHg5ZWJkMGYwYSwgMHhkNDc1NzVjOSwgMHg3MDkzYzljYSwgMHhmZjg0NmU5NSwgMHg4ZTc5YWYzMCwKLQkweDJkOGRlNTA1LCAweGY2M2RlODExLCAweDYzYzZlMzE3LCAweDIyMmZkNzVlLCAweDc1YmYwMGVjLCAweGMxOTdlZWE1LAotCTB4NTU2ZWIwOGYsIDB4MGQ3MWZhMzgsIDB4Y2UwZjE2N2EsIDB4ODJhYTVlZGEsIDB4ZWRiNzAzZmIsIDB4MWY4M2Y2OTYsCi0JMHg1NTYzYTFhMywgMHgzN2VmZGMwZSwgMHg4ZjMxYzM1YSwgMHg1ZTYzYWEyMCwgMHg2YzYzOTMyNiwgMHhjNzE2ZDg5ZSwKLQkweDJjNjdjMDRlLCAweGViYTM2YmRjLCAweDRlZTk5NzVhLCAweGU5OWE3YzY0LCAweGY2MWNmNTM5LCAweDNmZjU5MjNkLAotCTB4ZWJiMzllZTEsIDB4MjFlZjFhYTgsIDB4YmNiMGQ2NWUsIDB4ZTE4NDQxZmEsIDB4YzEyYmU0NTUsIDB4NWNmYTgxZGMsCi0JMHgyNDFiODUxNywgMHg5MzllZjVkNSwgMHg4ZGEzYzkzNiwgMHgzMDFjNzdjNCwgMHhhOGZiNTBjZSwgMHhjODI2N2UyNywKLQkweDMwNjk5ZjliLCAweGFlYmJkMzRlLCAweDIwY2E5Mjc3LCAweGNjZTQyMzFlLCAweGZjY2NjOTRjLCAweDlkNWY1YzQyLAotCTB4MmM3ZmM0NDEsIDB4ZTljNTUzOWUsIDB4NTNkNzA2NjEsIDB4ZjgzMDQ2NjcsIDB4NzRiNjI3Y2UsIDB4ODFiZjc3ZTgsCi0JMHhkMWU4YWE0NCwgMHg1NmRlNTk5OSwgMHhkMWFiZmI4YywgMHgxMTZmNDA1YSwgMHg3YWQwODk3MSwgMHg0ZTdmNzA0MiwKLQkweDc2MjZjYmZkLCAweDBkZjI1MjFmLCAweDY4MmU0MTgwLCAweDc5ZDZiOTA5LCAweDQzZjljM2RiLCAweDk3ZTYwMGZkLAotCTB4MGVjNGQ5MjUsIDB4YjdmYWIwNzEsIDB4Zjg4NjZlMDcsIDB4YzU5YzNlODcsIDB4MzIxZjI5NTksIDB4ZWYyNzdiYzAsCi0JMHhmYmE2M2M4MiwgMHgxODU2ZmE1ZSwgMHhkYzQyYmY3YiwgMHgwYmRiMzY4NywgMHhjMzYxN2VlMCwgMHhjYzQyZDRlNCwKLQkweGMzZTkzODVmLCAweGI1YmEwODc3LCAweGFmM2M3NGRlLCAweDU0NDhiZjk0LCAweDM4OTg3ZTA2LCAweGE1MGQxZWVmLAotCTB4YWE2NGZhZjMsIDB4M2ZmYWQxNmYsIDB4YmQ1ODFiMTIsIDB4OGFiMTc3OWYsIDB4M2QyNDA3ZDYsIDB4YmM4M2VhY2UsCi0JMHg0YjZlYTBlNywgMHgwZDFlZmE3YSwgMHhmNDJiNjNkYywgMHhmYWQzNTYyZSwgMHhhYzJkYTQ4NCwgMHgzMjRiMDYwZSwKLQkweGNmZDI2Zjg1LCAweGYxZDE3MWVlLCAweDNlYjg1ODJmLCAweDNkZTJmMzYzLCAweDA3MzdmYWQwLCAweDg0ZmQwMmFhLAotCTB4N2YxODkyNjMsIDB4YmVjNjEwYmEsIDB4ZTY0OTkwYmIsIDB4ZTc3ODA2NGUsIDB4ODczZWZmMDQsIDB4NWNmNDJmN2YsCi0JMHg5ZmQxNWZiMSwgMHhmN2VmMDYyNCwgMHg0YjdiOTcxOSwgMHg5MmQwM2RmOSwgMHg4YzM2YjIwOCwgMHg5MTVjOTVjNSwKLQkweDNhODcwZjE0LCAweGVjNWM2MjA2LCAweGNiMzQ2MjQwLCAweGYxN2IzNWRmLCAweDhlMzExMDlkLCAweDRmMThhNzgwLAotCTB4ZTQwY2JiY2MsIDB4YzlmMzExYjAsIDB4ZTJmOTY0YWEsIDB4NzlkMjdlNWMsIDB4ZDkzY2UzNTYsIDB4NzI3Zjc2NzYsCi0JMHhlMDAxNmE3MiwgMHhjMzRkZTI4ZiwgMHhiYzAxYTZmMSwgMHgzMGQ3N2I4OSwgMHhmOTFmMjVhZSwgMHg0M2YwMTBmZCwKLQkweGJmNGFiYTFmLCAweDViYWZmNGNmLCAweDM4NTcyNzQ5LCAweDYxNmQyYzlkLCAweDI1OWY0MGYxLCAweDI0YTllOTBiLAotCTB4NTEzYmJmODIsIDB4MDRjN2RmMjQsIDB4NDkzMWJmMGUsIDB4NWVjZmI2MTYsIDB4Mzg0ODI0YmMsIDB4NjM4NzBiNGYsCi0JMHhlNGMwNzdhYSwgMHg3N2RmOWJiYywgMHhjZjViMTI3OCwgMHgwMDc3ZGVhZCwgMHg3ZWYwZWNiZSwgMHhkYmY2YTFjNCwKLQkweDMwZmRiMGI2LCAweDQ3M2QwMTdjLCAweGE0Zjc1ZWEzLCAweGFiMGJiYzZjLCAweGQzODdmZDE0LCAweDhkZmIwOTAzLAotCTB4M2ZmZWMyY2UsIDB4MTAwZGVmZTQsIDB4NWZiN2E1YjIsIDB4M2ZkMzNlNjYsIDB4ZjcxNTJmNDEsIDB4NGVlYjg5ZTQsCi0JMHhlZDE3ZTgxMiwgMHhjNmRmMGZiZCwgMHhmN2ZhYWRlZSwgMHhkZjExNGY3OSwgMHhkM2VmOTlhNywgMHg5NmU5ZjZjYywKLQkweGVlMzkyYmQxLCAweGVhNmE5ZjRiLCAweGYwYmRjNzRiLCAweGI3MmYxZGVmLCAweDNiMjc4ZjkwLCAweDgzYzZjMWU3LAotCTB4MmYwYTFkNzMsIDB4MzE2ZTkzYTMsIDB4MmE3NThhM2QsIDB4NjcwYmQ5ZTAsIDB4M2MwNGZhYzUsIDB4YmY2MzdjZTEsCi0JMHg4YTVkMzk1YywgMHg5ZDQyZGE3NSwgMHgzOGVmY2NlZiwgMHg1N2ViMjk1ZiwgMHhiZmNiMzBmNywgMHg1ZDM5NTYyNSwKLQkweDU0Y2VlZGQ3LCAweGY0NWJkYzQxLCAweGVlM2UwYTNiLCAweGNiNWZiZjM4LCAweDk4ZTNjNDk5LCAweDQ0MzUyNGE5LAotCTB4YTRjMmRjZGUsIDB4MzBmZWEwYjgsIDB4ZTc2OTVkZmMsIDB4M2U1ODU4ZjUsIDB4ZWZkZWQyYjIsIDB4YzI3NWIzODksCi0JMHgyNWQ3MzQzZCwgMHhhNDdhN2Y3NiwgMHg3MTAxM2ZjMiwgMHg3ZjQ2NWQ5MiwgMHg5MTdjYmYzZiwgMHhmODcxNzdkNywKLQkweGY4YWZmNWY1LCAweDkxNjc3ZWYwLCAweGFiMzVlY2JlLCAweDliZmY5MDhkLCAweGViZjIwZWY0LCAweDA3YjJhOGEyLAotCTB4ZjU3ZDY5MzMsIDB4ZGZjOGZkODYsIDB4YmVjYTUyOGIsIDB4N2NmY2E0Y2EsIDB4YWMwMzg2Y2QsIDB4YWZiMmY2ZmQsCi0JMHhlOTNkNDFmYSwgMHhkODk3YWIyMCwgMHg0ZjdlMDM1ZiwgMHhjNjdiYzFjOCwgMHg4OGY1ZjkyNCwgMHg3MTU5MjYxZiwKLQkweDBhYjk3NTVlLCAweGQ1ZWFkZmRmLCAweGEzZDFkZTVmLCAweDFhZTAyMmZlLCAweGFiZDIyY2FhLCAweDlmYzU4MzFhLAotCTB4ODFlOTdiNWEsIDB4YzM4NjA5YzUsIDB4YTc5MGFkM2YsIDB4YWY3OGVkYzQsIDB4ZjdjNzY2NDYsIDB4YWZmYmIyNDQsCi0JMHg4NmZlZmIzZCwgMHg0ZjllMTlmNywgMHhmMDA0ZmU3MiwgMHgzNWQxMTBkMCwgMHgxZmQ2OTMyNywgMHhlMzBjZjg4ZCwKLQkweGVhOWQ5MjUwLCAweGIwYzdlMDIxLCAweGJhMmNjOTlhLCAweDlkNmJhOTVlLCAweGIyMjVmNDAzLCAweDIwZDA2NmNjLAotCTB4MDc1ZmI5NWMsIDB4ZjBhMmY0ZGUsIDB4OWZlZGViN2IsIDB4YTZjMjkyM2QsIDB4NDYzYWMwNzEsIDB4ZjBkMDNlNzAsCi0JMHg0MzVmMzdmNiwgMHg4MmUxYjJkYywgMHhlMWVhMDZkMSwgMHgwZjBkOGU4OCwgMHhhMjM1YmU4MiwgMHgzMGRmZDdlMywKLQkweDVmZWVjYzM5LCAweDAwOGY3NTg4LCAweDdkZmQxZGJmLCAweGQ3MWViYjc4LCAweGI2ZTNhMjNmLCAweGM4ZmRmMDQ1LAotCTB4MDE2NDc2ZGYsIDB4ZTUzZThjOWQsIDB4ZDBiNjAxNjksIDB4MTQ4ZGVmYjMsIDB4MmZjZGZkZjksIDB4MTg2Zjk5YWUsCi0JMHhlMDI0OGUzMiwgMHg1NGFhMjdmMSwgMHhkZTNjMjE0NSwgMHg4YWI4ZjA2MCwgMHg3MWRkNTFmOSwgMHhkMTc4ZDZjNywKLQkweGRmYmYyN2I5LCAweDhjNzZmNTQyLCAweGUxMjY1ZTgzLCAweDhiZDNmMDM2LCAweDdmNGFjNTdiLCAweGJhNGFjOWUwLAotCTB4NjhmYmZhM2YsIDB4ODA0MTVkMWYsIDB4ODU3MjVjZGUsIDB4N2EwMWZmZGEsIDB4YzhiMTI5NzgsIDB4MjQ4NmU1ZWEsCi0JMHhlNjE1ZjdkOSwgMHhiOGZiNTk0YywgMHhlZDY0ZGJjNCwgMHg2NDBiNTk3NywgMHgyMzM5MDlmNSwgMHhiNDRmZGY2NCwKLQkweGY3ZWFjYTk1LCAweGY2NGJiZjBlLCAweDUyYmRhNTdkLCAweGI0ZjAyZjU2LCAweDcyMWZiZWM5LCAweDdlZGU1ZGE0LAotCTB4MGYwMWE4OWMsIDB4MDc2ZDI3ODUsIDB4NmIzZTJjYTEsIDB4ZDBlMmI3NDcsIDB4YTEwNzhkZjMsIDB4MDYxN2YxMWMsCi0JMHhmNDNmYTUwZSwgMHgwNzZkMmI4ZSwgMHgwZmUxNzdlMSwgMHgxMTU3ZGU1NSwgMHg2YWU5ZDFmZSwgMHhkYzE3NWJhMywKLQkweGExYTg5YTBmLCAweDhiYzkyNWU1LCAweDYyYWQ0NGZjLCAweDMwNWU1NWY3LCAweDZmMDFiYjM5LCAweDA5NGFiZWUyLAotCTB4MTIyOTQzZjgsIDB4NjI1ZWU2MmEsIDB4MzE2N2IyZjcsIDB4NDA0OWQ4N2YsIDB4MTlhN2YwMGMsIDB4OWRlM2Y0MjYsCi0JMHhmYWJlMzZkNCwgMHg0ZWM3MTY3YiwgMHhkYTM3YmUwMywgMHg3N2RiMjU1NywgMHg2Y2E3MTVjOSwgMHhhOTY0YTVkZiwKLQkweDY1Y2I0ZjAyLCAweGMzZjMwYWY1LCAweDI1YzdlZmIyLCAweGRmYjU5MmFlLCAweDgxNWM3ZDY1LCAweGY1NjUyN2E3LAotCTB4MGEwZGI2ODksIDB4ZTA1NjZkM2MsIDB4NzZiMjY3ZTksIDB4ZGMxZGRmNDEsIDB4ZjgzNmY1M2YsIDB4Y2EzOTY4OTUsCi0JMHg3ODBlNTlkYiwgMHgwZmJjZjNiOCwgMHhiM2JjMzFmMSwgMHg3NGYwMWNiNSwgMHhjNDM2YzljNywgMHg1MWM3OTE1NywKLQkweGU4NzJlYzBlLCAweDUwODNjNjkxLCAweDA1ZmRhODdhLCAweDI3MzQwZWZkLCAweGQ5YTg3OTYyLCAweGMzYTlmZThhLAotCTB4MWU1ODM5Y2QsIDB4ZWZlMWI2NjksIDB4OGUxZTZhYmYsIDB4NzZjZGZiZTUsIDB4M2NkMzdmMmMsIDB4NjZjZWNiMWUsCi0JMHhjZDZkOTYwNywgMHhhZWZkZjg2ZCwgMHhkZmU2NzZlNiwgMHhkN2JkZTk4YSwgMHg4MDdlMDY5ZiwgMHgxZWI3OTU2ZSwKLQkweDI3NjQzZWVlLCAweDdlMDQ0ZWM3LCAweGVkZWUxZGQ5LCAweGFlYTNmYTg2LCAweDJmYzA4OWU4LCAweGExMTMwMDA3LAotCTB4Y2JjZjljNzgsIDB4M2RmNjI5YjEsIDB4MGRiZjk0YzksIDB4OTE3NTY2NDksIDB4YjJhNmQwNTcsIDB4NWUxZTgwMTcsCi0JMHgwOWUzMzFiMiwgMHg4ZjIxMWE0ZCwgMHg5YTI0NzJhZCwgMHhhMDZlYWMyZCwgMHhlNjM2NDQ3NSwgMHg2MTNjNjU1YiwKLQkweDU1ZTQyNTRmLCAweDYwNzcyNTEwLCAweDdiZDQyMjdkLCAweDkwZmI1OGMyLCAweDQxMTMxOThkLCAweGYxY2VmZjBmLAotCTB4YmM5ZjdiNjAsIDB4MjBlNDkyYzAsIDB4Y2Y1N2UwZjEsIDB4YmZlMDRkNWIsIDB4YTA3NTc2MzksIDB4OGM3MWUwMDksCi0JMHhhNGVjYjFmYiwgMHg5NjhmM2I0MCwgMHgyZDAyOWFhNSwgMHgwYTkzZDljOCwgMHgzZDk0NDRiZCwgMHhjOWYxZDJhYSwKLQkweGRiNmZiMDcxLCAweGJlNDNjYzM0LCAweDdlODA0YjViLCAweGRlY2M0YjI3LCAweDRmZjVkZjE1LCAweDEzMTdmOWUxLAotCTB4MWQ0ZjY4ZjUsIDB4NjExN2Q5NTcsIDB4N2JlNDkzZGUsIDB4NjRiY2UwMDEsIDB4N2I4NDEwZTMsIDB4MGU5N2M5OGYsCi0JMHhiMWI0NWJmMCwgMHg3Y2UzZDU5MCwgMHg4MGI2NDgyZiwgMHg2N2MxOTZiYSwgMHg4OTgyYzZmYSwgMHgwYTViZGNhZSwKLQkweGUwYzEwNTlmLCAweDY2NmM5ZDUzLCAweDllYzdiNmZhLCAweGE4ODA3YTA2LCAweGQ3YjRhZjFmLCAweDVlM2U3OWMxLAotCTB4YTJmYmM3NmEsIDB4NzY3YTFjYzcsIDB4YmMyNjFkN2UsIDB4ZjYzNDQwZTcsIDB4ZmUwMTY5ZTIsIDB4NWFjOWIzOWMsCi0JMHgyZTE1MzdlYywgMHhmMzVmODE5ZSwgMHg3MzllMzU3ZSwgMHgyOTU1M2MyNSwgMHgzYTQ3MGY0YywgMHg0NjczM2IwMSwKLQkweGM3MDVkYTA0LCAweGI3ZGVlYzU1LCAweDE0Y2NmYmYyLCAweDBjNWQxZjY2LCAweGViNzdlZTBmLCAweGE2Y2JkYmM3LAotCTB4ODdiYWJkZDQsIDB4MjJiM2Q3OGUsIDB4NzFlZTg3MGMsIDB4YWM3ZDQ0MGMsIDB4N2JjMjUxYTcsIDB4MWJlNzNkYjUsCi0JMHhiZDc2YjEyZiwgMHhlMzA0ODM4ZCwgMHg1ZmUxMzM5MiwgMHg4ZWQ1ZmRiNCwgMHgzMWZhZmYwNywgMHgxNWIzZmVmZCwKLQkweDIxOTQzNjExLCAweGJmMDg0MWU2LCAweGIzYzdmOWZiLCAweDNmYTgwYzYzLCAweDU2OWM5ZWNkLCAweDI2NzE3MjA2LAotCTB4MzFjZDczOGYsIDB4ZGMzMWUyNjksIDB4ZTBlOGIxYTUsIDB4YzY4NWJhMDksIDB4ODIxNDM1ODIsIDB4YTU2YzcxNjQsCi0JMHhhOWNjOWUwZSwgMHgwNmJlNWQ0ZSwgMHg0ZmQ5NjVjYSwgMHhmMGFkYTJlYSwgMHgzNWNlZDc3ZSwgMHhkMWQ2YzZhMCwKLQkweGZjOGM1YzIzLCAweDMzNDFmYmNmLCAweDI2ZGNkNzVkLCAweDczZDk5NWI1LCAweDZiZGFhZTVjLCAweDQzM2YyYTZlLAotCTB4OWU3MWVmZDAsIDB4ODA4MTQzMmYsIDB4ODcxNjZhZjYsIDB4YzU5N2U4YjcsIDB4MzI1Yjc0ZTksIDB4OTFlNDEzOGYsCi0JMHhhN2RmNzYzYywgMHgxZGIwMGUzNywgMHhmNjZiYTRlOCwgMHhjNDQyMDMwNywgMHg1Y2VkZTQwOSwgMHhjNzQ0ZmM3ZiwKLQkweGJiYmU1NWU2LCAweDRlY2RlNjIwLCAweDcxZmU3YTYxLCAweGQwNGNhNTFkLCAweDcyNjdlZjI3LCAweGFiZWFiZjIwLAotCTB4ZmVlOThiNDcsIDB4MmFjYzNiZjMsIDB4YWRjZmMzOGMsIDB4Yjg3ODAzZGIsIDB4YThmMWNlZGMsIDB4OWU3MGVkMjUsCi0JMHg3ZGU2YjhhNiwgMHg4YTRhYjk4NiwgMHg5M2Q3OWE3YiwgMHg3MzRlYjY5NywgMHgyY2JjYTA3OSwgMHgwM2NhM2FmMiwKLQkweDVmNzBlNWU1LCAweDQ1YzgzOTZiLCAweDdjNDUxZjIxLCAweGNkNWNkM2QwLCAweGYyMjM3MmY5LCAweDRkY2Q0M2QzLAotCTB4ZWNkYzNmNTgsIDB4ZjM0OGYyYzIsIDB4NWI5N2NlNWEsIDB4ZTZmZGZkYjEsIDB4NzY1ZjM4ZTcsIDB4MGRiY2JlNzMsCi0JMHhhZTY4ZWY3ZiwgMHg2NmVkZjJjMiwgMHgyODk2OTYyNywgMHg3ZTAxNmZjNywgMHhjYzRlMGQ1MywgMHg4Mzc3N2JlZiwKLQkweGViN2M0MDllLCAweGYzMWU4NzcyLCAweDc4ODllODBlLCAweGM4NThmOWUxLCAweGJkZTNkMWE3LCAweDhkNWU2NTNiLAotCTB4ZDJmN2NmOTIsIDB4MjVmN2RmNDMsIDB4ZjRmMzAwZmUsIDB4YmU4MGMzZTYsIDB4OWU5YTExOTgsIDB4MDlhYjExOGUsCi0JMHg5MmRmZDJmOCwgMHhiZTgyMjY5YiwgMHgzNTZhY2M3ZCwgMHg2NTdkM2U4MSwgMHhhNWYyMTM2MywgMHg0OWFiNzY2MywKLQkweDI0ZGZlYjRiLCAweDlkZGFjYzNmLCAweGQ2OWU5MzU2LCAweGMzZTM3YmZmLCAweDM1NjVkZGFjLCAweGRmZmFkMTg1LAotCTB4ZWFjZmJmOTMsIDB4YzQ4MmMyNmUsIDB4ZTdjOGNkMjksIDB4MDg3NDg5NGIsIDB4MjFiOTQ3Y2UsIDB4MTcxNTBjNzMsCi0JMHgxZTk3NWU1NCwgMHgyZTMxNzM4MiwgMHgzODE4ZGU3MSwgMHg1NmM5NzUxNywgMHhhY2JiOGZhNCwgMHg3ZDQxMGVhYiwKLQkweDBkNjZjZTQyLCAweDFiYjZjNTVjLCAweGJmNDM1NjBiLCAweDBkNGFkOGIyLCAweGJhOTMxYmY0LCAweDFiZjQzNTdjLAotCTB4MjZhNGZkOWIsIDB4ZGNmOGRmYjAsIDB4N2VhMWFiOWQsIDB4MDZiMzZkOGYsIDB4Y2UzYWQzZjQsIDB4YTIzOGM0YzcsCi0JMHg5ZjA1ZGEyZSwgMHg4MzVlNzkxNiwgMHgwZjI4MWMzYiwgMHgyODFkZGJmMiwgMHhjYTVjMDQwZiwgMHgwNjNlNTZhNiwKLQkweDc2ODZjNzdlLCAweDNhYzEyY2M5LCAweGMxYmQ0YWE2LCAweGFiOTFjODZmLCAweDI5MWFmNzg3LCAweGZlN2E4ZWJmLAotCTB4YmEyYWQzMDksIDB4ZGZhODA2Y2YsIDB4NTYyN2Y1ODEsIDB4OWRmZTVhZGQsIDB4OTdkNzEyOTIsIDB4ZTdlMDlmN2YsCi0JMHhlNDNkZTQxZCwgMHhiMWQwOWY2NSwgMHgwMDFlMzJmNywgMHg3ZGUzMTRiOCwgMHgyYmJlMTMzNCwgMHhkMDI2OWM0OSwKLQkweDNjYjg5YWIzLCAweDZkMjUwOTVmLCAweDNiZWJjZWRmLCAweGQ5NTc5Yzg1LCAweGRmZDBhN2ZiLCAweDdkYjg1MzczLAotCTB4ZDgzZjk3ZDksIDB4ZmNmNDFkNjAsIDB4ODQzOWVlMmIsIDB4YTFmY2U3NjgsIDB4N2IyY2M1MzAsIDB4YjA4ZWExNWYsCi0JMHhjYmQ3NTU3YiwgMHgzMWU2NTMxYiwgMHg5NjI5ZjMyYiwgMHhmNmMzYjY5MSwgMHgxNDc5YmVjYywgMHhjN2JkODRiNSwKLQkweGFlNGZjY2EyLCAweGFkNWVlYzI3LCAweGQ3Yjk0ZjMyLCAweGZjNjcwYWFlLCAweDBkNzgwYWI0LCAweDI5ODllM2E1LAotCTB4NjU2NGY5MjEsIDB4ZTEzNWYxNGEsIDB4OTEwZjZmMjAsIDB4YjA5NGJkOTcsIDB4ZjkzZWVjM2MsIDB4NWIxZjNjMzUsCi0JMHg4Y2UyMmZiOSwgMHhmMjVkZWY2MywgMHhmZWU1NmNmYywgMHhkZGY0NWQwNCwgMHhiZjgzMmI1ZiwgMHhlYTlmYzE4NiwKLQkweDdkNjAwYjc3LCAweDA0NGQ3MzE1LCAweGZjODE1NmZjLCAweGYwNmJlM2U3LCAweGJiM2YyNTFmLCAweGZhNzI3YzU1LAotCTB4OWY3NjNhZGMsIDB4NmIxZjJmYmYsIDB4YzdjMjA5NGEsIDB4YjI5NzVlNDQsIDB4ZGMyYTdhMTQsIDB4M2VmYzgzMWIsCi0JMHhlYzA2MGY3OCwgMHg5YzEyM2JmYywgMHgzZDk3NDAyZCwgMHg1NWFmYmU2NSwgMHhiMmM2ODc2MCwgMHgyZGJiOTNmNywKLQkweGJiZjAzNWNlLCAweDAzZjk2M2E0LCAweGJjZjZhZjIyLCAweGQwNGJmNWNhLCAweGY5NGE5ZWRiLCAweDZlYmJmMjE1LAotCTB4OGNmNDE2MTAsIDB4ZTA3NWEzYWMsIDB4OGUyYzQzNjcsIDB4ZTQ4ZmQwZjUsIDB4ZWY4MTc1NzgsIDB4MWZjYTg3MzAsCi0JMHhlMWNiOWE3ZCwgMHhlNTkxMjViZSwgMHhmZTZjZjY1NSwgMHgwZmRlODZlNiwgMHgwYThmMDUwYSwgMHhkYzJmMjhmNSwKLQkweDNjM2NiODVmLCAweDk3NjdlNTAyLCAweGZlZjAzYzQ0LCAweDNjNjk1NzZiLCAweDY5NWQyZGVhLCAweGI3OTQwZDNhLAotCTB4NGFlZTJlZGEsIDB4MmJlMzgwMWIsIDB4YTRhZWUzZWQsIDB4ZWYzNjA2ZTEsIDB4ZmU1MGYxZDgsIDB4MTE1Y2U5MjYsCi0JMHg3OTBmYmRjOCwgMHhjZWJiNjEzZSwgMHhlMDM3ZTQzNSwgMHg4NjExMWUxZiwgMHgyNTdiZmE3MSwgMHg0MWMwMTE2ZiwKLQkweDFkNzc1NzY5LCAweGNkNjY1NTlkLCAweGQzNWY2YmVmLCAweGZkODE4ZGZkLCAweDNkNTE5ZWQ1LCAweGFjZGRiZjA2LAotCTB4ZjRkYjVkYmQsIDB4ZWQzYzgxMzUsIDB4MDk1NzRkOTEsIDB4YmNkZjhmZTQsIDB4OWQxOWRkZmQsIDB4YzJiZDA1NmYsCi0JMHgzMjI0MDJkOSwgMHgxM2VhOGJhYywgMHhmY2JkN2ViNCwgMHhiNTEyNGJhNCwgMHhlYzAzMzNkMywgMHg2NmJmZTFmMiwKLQkweDU0YmM0YTc5LCAweGRlN2RlN2RhLCAweDkyZTY1YjRiLCAweDdhOTVjM2U3LCAweDQ0ZGYzMThhLCAweGZiYzQ4ZGVkLAotCTB4OWVmNjJhYWEsIDB4N2E1N2M4ODIsIDB4ZDRmM2RiOGYsIDB4ODI5YjNmNWUsIDB4NzRjZWI4N2UsIDB4ZmRmZWJkOTksCi0JMHg4MjNjZTc0ZiwgMHhmMzBjMjA3YywgMHhmZjZkNWUzMywgMHhmYWQ2MGUzYywgMHg5ZmI4Y2U4NywgMHhkM2Y1NjViYywKLQkweDZiZjk4Mzc3LCAweDVmNjc5ODEyLCAweDU2NTk3NGRiLCAweGVkN2VlMmVmLCAweDJmYmIyZDU2LCAweDM1NGZmYjU0LAotCTB4YzcyYTI1Y2EsIDB4Yzg5ZTIyZDYsIDB4MDEwM2RkMDEsIDB4ZmRiNDk1ZjIsIDB4ODNkZTE3YjksIDB4MDRhYmJmMjksCi0JMHgxZDdjYTE4MCwgMHhmYjRlYzkzOSwgMHg4ODdiNzI1NSwgMHg5ZDU4Nzc5MCwgMHg5NWM0OGZkYiwgMHhlMjcxZWFjMiwKLQkweDdhYjMxZmZiLCAweGE5ZmVmODlhLCAweDRmM2E3NjQ5LCAweGU3Njg5MjY1LCAweDc1ZTM2ZmZkLCAweDMzZDU4Nzk3LAotCTB4NjQ3ZmY3YzUsIDB4YmI1ODliZGYsIDB4NDk4ZWQzN2UsIDB4M2YwNWNlNzAsIDB4ZGZjYWE1MzcsIDB4ZGRmY2EyMDEsCi0JMHhjZDdjNWE5MiwgMHgzYjc5MWE3YywgMHhkZGUyZmZlNywgMHhkZmVmOGE5ZiwgMHg5YzAxZjExNSwgMHg3MzA5MzZkMywKLQkweDZhNTc2YWU3LCAweDMxN2Y1ZmQxLCAweGYwM2YyZGJhLCAweDc3OTE1MDdkLCAweDYxMzcyOGUzLCAweGViZGQ1NDFlLAotCTB4MGI4MGI3MDMsIDB4MWUzYTZkNTMsIDB4NDRjYTdhMGYsIDB4YTE1NGZmOWUsIDB4ZTU5YzYyMzYsIDB4YzdjNjdhZjIsCi0JMHg4Yjc5ZTk0MywgMHhlMTk0ZGU5YiwgMHg3ZjNiNGZhYiwgMHg5MTAzMTc4ZiwgMHg0ZjRiYmU3NCwgMHg5MGY3YjAyNCwKLQkweGVlMzEzYmIzLCAweGU5OTUzODNmLCAweDIyYmVmMGYxLCAweGY5MTVlN2RjLCAweGM0NTliMTVjLCAweGVjNzFmNjBlLAotCTB4NWRlYzYxMWIsIDB4Yzg5ZGIzYzgsIDB4YzFiZjE3NWYsIDB4MWI3NWQ3ZmMsIDB4OWIzY2EyMGUsIDB4ZmZhMmI2YWYsCi0JMHg2NzNmNWM2OCwgMHg0N2M0MmE3MSwgMHgzMDAzOWQ0YywgMHgzNmY0ZGRlZSwgMHg2NzNmYzM5ZSwgMHhjYjljNzk5OCwKLQkweGNmMDgxYjk3LCAweDVmZTE3ZGQxLCAweDk3ZjgxZDdhLCAweGJmZTEzYmZlLCAweDE4MGRlYTliLCAweDg2MTNkYWU3LAotCTB4YzY4MjZjZjYsIDB4MWM0MWIzYWIsIDB4NTc3YjI0ZjMsIDB4ZGI4NzIxNzIsIDB4ZTIzZmNlZDAsIDB4Nzg4N2ZmN2QsCi0JMHhjNTlkYWEzZCwgMHg5NTllNDQ2OSwgMHg1NGExZjc5OCwgMHg4ZjAzODMxMywgMHg3ZTRkZDQ4NywgMHg0M2M0MTQ3ZiwKLQkweDIyNGFmZTA0LCAweGI3ZjgxYjQ4LCAweDFjNmMxZTI5LCAweDgzYzAzNjBmLCAweDJlM2ZiNzgwLCAweDA2NjVmYjQyLAotCTB4YmQ5NTZiOGUsIDB4MWVlMDJiNWYsIDB4ZTkyYjFjZWEsIDB4MTk1YmFjNDMsIDB4M2M2NjU4MjcsIDB4NWRmODBjNTQsCi0JMHg4MTc5OTM3NiwgMHhiZTM4ZDI5NywgMHhmYmNjNWUzNSwgMHg0MTA2NzNmYiwgMHhiOGYwMjhiOSwgMHg1ZGRlMmZiMiwKLQkweGM0ZDc3MWE5LCAweDVmZmRiY2JiLCAweGRjMjU3NzhjLCAweDhmMmQ2NTk0LCAweDdmN2YyOTdiLCAweDJmZjU1NTIxLAotCTB4MzZmZmUzODUsIDB4YzZlY2VhN2YsIDB4YjlmNmIyZmQsIDB4Yzg2ZjQ3NGQsIDB4YTBmYzJhZGYsIDB4YWJiZjJlZmYsCi0JMHg3YTRlYjdmMCwgMHhlMjBhODk2ZCwgMHg3YzdiNGEzMiwgMHg2YmUzYmE1YSwgMHhkZjdiYmZhMCwgMHgwOWVlNDdmYywKLQkweDAwZjU3YzU4LCAweDkwNzkzZmNjLCAweDUxYWJlNWVmLCAweDExZWNmYjdmLCAweDM1NWY0ZjRhLCAweGE5ZDQzZjMyLAotCTB4YWQ2YTVmZmQsIDB4NjNlOTdkNzksIDB4YjExNTE1ZjYsIDB4ZWNkNWQwMDcsIDB4MjBiNDhmYTYsIDB4Y2Q1MzY2YWYsCi0JMHhlYTNjNTgyMiwgMHgzMDllOWNlZiwgMHg4MWYyODQ3ZiwgMHhjNmQxMDMyYSwgMHg1NTVmZjNkMiwgMHhhZTczZGVjNSwKLQkweDM0NGJjMDgyLCAweDZkMjcxZTk2LCAweDFlMjFhNDlmLCAweGQyYjVhZjc4LCAweDMxZThmMWE4LCAweGI3YmYyNDFlLAotCTB4YjllZmU3YWEsIDB4NzY1MmMzNTIsIDB4NTc2ZDU1N2YsIDB4YjRkMzdlNjMsIDB4NzQ4ZTJjZTEsIDB4ZWYwZGIxYmYsCi0JMHhmMjM4Y2UyNSwgMHg2ODQ3YTVlOCwgMHgyYWVkNTkzYiwgMHhlMmI3Nzk2NiwgMHg1NGVmZDE5ZSwgMHhmYTFmMTMzNywKLQkweDdlNjEyYTdiLCAweDFkYzc4OTU0LCAweGVlMzE2Yjk3LCAweDYxZjdlY2E4LCAweDRkNjNmMzJhLCAweGJmMmM0YjUyLAotCTB4NGZjYjJmNjAsIDB4ZWU5MWU3MTMsIDB4OTBiZTg4ZWYsIDB4YmJjM2MxZTUsIDB4NWE4ZDk1YTYsIDB4ZDA3Y2MwY2YsCi0JMHhmZWEzZjYzZiwgMHg1NTdjMzBkMSwgMHg2MWFmZTAzZSwgMHg5ZjQ2NzQ4YywgMHgxYjAzZDdlZiwgMHhmZDgyZmU5YSwKLQkweDU5NThmYzk1LCAweGU5ZGZhOGRlLCAweDQ4MjNlNmIzLCAweDNjNWY0MjJmLCAweGJhYzFlY2Q1LCAweGFiMzUwZmQyLAotCTB4NmUzMDNmZTQsIDB4ZWUyZmUyMzMsIDB4NWU0NzI4MTYsIDB4NjYxODlmYjUsIDB4OTVmNmVlZmQsIDB4OWQ4NGFiYjAsCi0JMHgwNGRiYjRhNSwgMHhiNWVmMTBiZiwgMHhjM2ZjMTQwZCwgMHg3NzdiMTFmMCwgMHhiY2NhYzM1MSwgMHgxNWZmMzkzNCwKLQkweGQ5ZjI5NTdjLCAweDdmOGMzNDgyLCAweDAwNmZmOWNhLCAweDdmZjZjNjFmLCAweGQzZjYxZjE3LCAweGZjMGRhMzdkLAotCTB4ZWNhOTU1MzUsIDB4ZGQyNTczN2QsIDB4ZjkzMjI2ZDcsIDB4NzU3N2E0YTksIDB4MTlmNTFhYjksIDB4M2EwYmJkMjUsCi0JMHgxOWJlY2ZiZiwgMHgyMGIzNzVmZCwgMHgzMWQ3NGY1NiwgMHhmYmMyNDFhYiwgMHhmZjVmMjc1MiwgMHhiYTA2NDNlMSwKLQkweGE3YjZhZTg0LCAweGU4ZjdiMmI0LCAweGZiZWU5MjZlLCAweGU5YjM4MWNhLCAweDk2NzdkZjMwLCAweDljMzNhNDAzLAotCTB4Zjg2NjViZGQsIDB4NDdkNjk0NTgsIDB4YmI0ZDJlOGUsIDB4Yjc5NTFjYjYsIDB4MTdmMThiZmYsIDB4YmU3M2ZmNjQsCi0JMHhjYTI0MWM5YiwgMHhkNDczMDU3YiwgMHhkMzlmMzYyYSwgMHgyMTNlZjJjOCwgMHhjZGM3YWNlZiwgMHg2NzU1NzllZSwKLQkweGQzN2JlMmI2LCAweDEyMmZiODY0LCAweDdkZDJjOGY4LCAweGM1OGViMjZhLCAweDAxNDkzNDM3LCAweDExNzUwOGVmLAotCTB4ZTkyMzI3Y2YsIDB4YjE0NjRiZWYsIDB4Zjk5NDM4NzcsIDB4NGYzY2Y1OTgsIDB4Mzc3MTk5NzMsIDB4YmU1MjEzZGUsCi0JMHgzZGYyMjQwNywgMHhjYTc4ZjllYiwgMHg3ZjQ0ODE3NywgMHhmOTU4MmY3MSwgMHgzNGM2ZDAyZSwgMHg5MGFkN2Y3ZSwKLQkweGY4MzhiMjE0LCAweDM3NTNmOWI1LCAweGZmMDBjOWM4LCAweDY2ZDVmNzcwLCAweGE0YjY3M2I0LCAweGFlNDdmMWZkLAotCTB4NmYzYzdlNTEsIDB4M2U3ZWUzNGIsIDB4YmY2YzVkM2YsIDB4ZmY2YzVkMGUsIDB4NmExNzQ5ZmYsIDB4ZWY3YzU2ZDMsCi0JMHhlMmU5NjZlMywgMHgzZjdkYWIxMSwgMHg4ZjljNWJhYywgMHg5NmZjNzNkZSwgMHg3OGIxY2YxZSwgMHhmOTY3YjgwZiwKLQkweDQ3MWVmOGFiLCAweGUzMDQzN2NmLCAweGMzZjNkNzQwLCAweDZiYjE3NDk0LCAweGJhY2ZhMzNkLCAweGFmMTQ0YzViLAotCTB4ZDBiOTRmMjMsIDB4YjhlMjMwM2YsIDB4MGRiZmVmMTMsIDB4OTkwZWRmN2IsIDB4OTBlMGE0YzYsIDB4MTZlYjBkNDMsCi0JMHgxYmQwODI3YSwgMHhkZjgwZmNmYywgMHgxZDc5ZTE1MywgMHg2ZTM3Y2EzNywgMHhhZmYxYmUzNiwgMHhmYjg4NmI4YSwKLQkweDRmNWFkZDMyLCAweGRiOTAwOWYxLCAweGJlODJjMzdiLCAweDhkMjU3ZDk3LCAweGVmNTBlZGM5LCAweDljYTI1YTZlLAotCTB4NTM0ZjAwNTcsIDB4ZWYxNWRmMzgsIDB4ZDlhODU2NmYsIDB4M2I5N2I5M2IsIDB4NTg5ZmU4ZDUsIDB4ZmVkZjgzZjEsCi0JMHhkZjZiNzlmMiwgMHg1OGZhOTVmMSwgMHg1MDcyZjk4MywgMHgwZDk0NDZmYiwgMHg1ZjJmOTYyYSwgMHhiY2M1NmU1OCwKLQkweGMwN2JiMDJjLCAweDE3ZmMyMTVmLCAweDU4NDdlZmNhLCAweGQxZDNjMmNiLCAweDY5ZDUxZWRlLCAweGM3M2NmNTg3LAotCTB4NWYwYTEzZDYsIDB4MTIzZTRkMGQsIDB4YTg3Y2VlZjgsIDB4MTVmNjFiZjksIDB4OWMwN2U3OWIsIDB4YmRlOTA5OGYsCi0JMHg5Y2Y5OTY3NiwgMHgxYmVmOGZjMSwgMHg2ZGZmOGJhNSwgMHgzNTI0ZmZmYSwgMHhmZTU0NDk3MSwgMHhhNjZlNDllNiwKLQkweDU3YTYxMjRmLCAweDU4OWQyMmNlLCAweDJjM2UyMWNlLCAweDRmZTU4NDlkLCAweDJjMzYyN2NmLCAweGFlZjYxMjE3LAotCTB4NjcwY2ExZjksIDB4OGRlODNhNDksIDB4MGZiZTFmNWEsIDB4YmZmNWU5N2IsIDB4NGNmYmUyZTcsIDB4ODU2YzhlNzcsCi0JMHhlNTViYTg5YywgMHg1NWVhNTZiNywgMHg4ZmJlMDUzZCwgMHhkOGZmMDNhNywgMHgyYjc0ZjdmMywgMHg3YjFiZmZjYSwKLQkweDk0NTA3YWE3LCAweDEwN2E0YTdkLCAweDRhNmZmNmJmLCAweGM0YmVlY2Q1LCAweDVlNTEwN2M5LCAweDFmNTk5YTU0LAotCTB4ZmRmOTg2MzIsIDB4ZTI2NDI2MjcsIDB4Y2RmM2YxZjksIDB4NmY4MmNkODQsIDB4ZWYyYWZjNDIsIDB4ZGZjNThhOGMsCi0JMHg3N2Y4NGE5NywgMHgyYWJkZGE3OSwgMHg4Yjc5NjIzYywgMHhhODZhZGQzMiwgMHg3OWVkNjZlZiwgMHg0NGI3MTY3NSwKLQkweGMyMjM3OWViLCAweDhiNzJmYjU4LCAweDY3ZGRmMjFiLCAweGNiOWUyZjEzLCAweGFlZWQ5MGI5LCAweGJkMTNiZmY2LAotCTB4N2JmOWQ4ODAsIDB4MTI3ZWJlMDYsIDB4YzNhOGJmZWQsIDB4ODliNmYyYzAsIDB4OWJmNjFiMzcsIDB4MTA0OTc2MGYsCi0JMHhlOTk3ZjczYiwgMHhlZTBmYmNlYywgMHhlMGZkZjhjNywgMHhlMTVmYjkzMiwgMHgyNjdlZGUyMSwgMHhlMDEzYWNhMywKLQkweGZiNzRiYmYxLCAweDBkN2NlMGY3LCAweGY3NWNlZThlLCAweDUzZjgxMTU0LCAweGMyZmMwNDU0LCAweDE4Nzg4YzVmLAotCTB4NWZhMjI4ZTMsIDB4MTFlY2I1OTgsIDB4YzQ4NzZlZjgsIDB4ZmI1ZDhiZjIsIDB4ZDJkZGUyZjQsIDB4ZmM3ZjQwZjgsCi0JMHg1NWYyOGNhMSwgMHg3NGRhZGRmMCwgMHhjMTQyOWZjNiwgMHg5NDJlZmUxNSwgMHgyNjFkODgyMywgMHg4MzA2ZDVmMiwKLQkweDQyN2U4ODZlLCAweGVkMDZlZjgyLCAweDQzN2Q1ODkwLCAweDU3N2JkOGZhLCAweGU5NzdkMTFiLCAweGNjMzNmZDAyLAotCTB4ZWMzMWZjZWEsIDB4MTA4ZWIwNjMsIDB4YmZmZmFjMjMsIDB4ZDIxOWJkZjgsIDB4ZWY3MTBlOTgsIDB4NTVlODJmMjUsCi0JMHg0YTdjNWZhMCwgMHgyN2RjMzFjNSwgMHg2M2I1M2RmOCwgMHhlZDRkM2NhMSwgMHg0MGZmMjg1MSwgMHhjZjI4NTFlZCwKLQkweGNhMTQ3YjUwLCAweDBhM2RhOWNmLCAweDM2MmJhMmU1LCAweDE0OTcxYzc4LCAweGNlN2ZkODY3LCAweGJiZjgzY2U4LAotCTB4MzNhNjJmMWIsIDB4YzMyNjc5YjksIDB4Yzc1YjI5ZDksIDB4NjNhZTFkM2UsIDB4YzdmM2E1ODcsIDB4ZWM3NWQxNGYsCi0JMHg4MmFkOTNkOCwgMHhlMGExMmNmYiwgMHg2ZmVmYjNkMSwgMHhmODIwY2VlOSwgMHg5M2RmY2RlYywgMHg2Y2NiZTc4MiwKLQkweGVmZTdmM2U0LCAweGNmZGNhMGQ2LCAweDJlNDZmNzZmLCAweDNkYWVmODBlLCAweGM4Nzg4NzVkLCAweDEyMzY3M2RiLAotCTB4ZjczNmVmYzYsIDB4ZDEyZWQ1YzIsIDB4YjE1MjRlYWQsIDB4MzMwYmZiN2EsIDB4MGI5ZDVkZWYsIDB4MDI3N2IwZmIsCi0JMHhlZWY5ZThmZSwgMHhmZGJmMzI4MCwgMHhmYjg2M2ZiNywgMHg4YzdjNzQxYiwgMHhiZTQ4ZjZjNywgMHg1MzJmNDA2NywKLQkweDZmYjk0M2VlLCAweGZmYmEyZmIxLCAweGM3N2ZkMDc1LCAweDEzYjA3ZTllLCAweDNiMDg2ZmNhLCAweGZiZDhmYjJmLAotCTB4YmJmNzdkYjgsIDB4YWY3YmQ3MGEsIDB4ZjcwNDU3ZGUsIDB4NTZmZGVlMTIsIDB4ZjQxZjM0MWQsIDB4YzIyOTQ2NGMsCi0JMHg5OWQwNTZiYiwgMHhiYTcxYjc4OCwgMHhhZWZhZjgxMiwgMHgxZTM5NWFlNywgMHgwMDE3ZWYxMSwgMHgzYzgyYjUwZiwKLQkweGZhMDkxYWJhLCAweDViOGYyNTYwLCAweGZlY2VlZmI2LCAweDFjYjllZjEwLCAweDNiZjgxMzUxLCAweGU1YTM4MzgxLAotCTB4YzE5ZDRlZTcsIDB4ZjMyODlkY2UsIDB4ODAxY2U5ZjYsIDB4Y2VmYjFkYWYsIDB4OWNmYmMzNjUsIDB4ZjBkOTNmMTQsCi0JMHg0YWJmNWI3NywgMHgxN2YzMmZlZiwgMHg2NmY4OGRlNiwgMHhmZDBmZDAyMywgMHhlMDJlZmYxZSwgMHgwMmI5YjIwYywKLQkweDBkMzNmM2UyLCAweDJkODVkZmZiLCAweGE5OWYzNmNkLCAweGRjZmNmODgwLCAweDk0MzBlOTQ0LCAweDYzOTlhY2YzLAotCTB4ZjIyZjJlMjEsIDB4OTRlNDE3OWEsIDB4NzRhMzg2MWUsIDB4ZjUxMmFkOGYsIDB4MmU2MDUyYjgsIDB4ZGNhMTcyMDEsCi0JMHhlNzFmYzExMCwgMHg0NjI4NzIxNSwgMHg5ODk3MWY1NiwgMHgyZWZlZmIyMiwgMHg3ZGFjOTY2YiwgMHhiMmVkY2U0MiwKLQkweDI2ZmJkZWY2LCAweGRmZmUyMWI2LCAweDdjM2MwMWZiLCAweDQ2NWUyMGZkLCAweDhlZmVjMWY3LCAweDdkZWM0YmQ5LAotCTB4YzczZGJjZGQsIDB4ZDY5ZGJlZWYsIDB4MGQzY2JkMjcsIDB4YzFkYjYzZGYsIDB4MmFlZDI3ZGIsIDB4ZDYyM2JmYzcsCi0JMHhhM2E5ZTE0MywgMHhlMWY5ZDQ4YSwgMHgxNGYzM2Y4ZiwgMHgxM2IwYTYwYywgMHg3OGJkZjc2YSwgMHhiZTY3ZGUxOCwKLQkweDFkNzA5ZGFlLCAweGZiZDQyMGZiLCAweGQyYmZhMmExLCAweGYyZmNhMDNlLCAweDA3MmZjMGM3LCAweDBjZDUzZWJmLAotCTB4MjMxZGExZjEsIDB4NzkwNjQ5YmUsIDB4ZWZjMTk5OTQsIDB4MjFiYjcxODcsIDB4OWVmNGRkMTQsIDB4NjFmYWM5MGYsCi0JMHgyNTI4ZmRlMCwgMHgyOGYyMTBkZCwgMHg0ZTU2NDNhNywgMHgwMWVlYzYzYSwgMHhmYjNmMmNkZCwgMHhiNDMzZjAxMywKLQkweGYwMjQ1ZGMzLCAweGZkMmEwOGVmLCAweGI2NzU4MzY1LCAweGZmMDQxZjBmLCAweGI4NmEwN2NlLCAweDNmN2JkMTA5LAotCTB4NWJmYzMxNmIsIDB4YjI3N2E3ZWQsIDB4NDk2M2YzNzAsIDB4MGJiYmY4YjEsIDB4ZWU3YWUwZjQsIDB4YzE5NTliM2YsCi0JMHg3NmE0YWNlMiwgMHg0NTQ5NjNmZiwgMHhlMmIyNzZmZSwgMHhiMjdiZWM4YywgMHhhYjIzNWE1MiwgMHhkNzk0Y2VhZiwKLQkweDA5YWU5N2Q3LCAweDBmNGExZmVjLCAweDNjZGNmYzViLCAweGVlMGYzMzlkLCAweGZmNDE0OWYxLCAweDdhZWY2MjZlLAotCTB4ZDg1ZjM5NjIsIDB4ZWNmOTA0YjcsIDB4ZjE0YmZkYjksIDB4YmYyYWI5ZWYsIDB4ODFlM2E3YWYsIDB4MDg3MTZmZGYsCi0JMHhkM2Y4MmFmOSwgMHhjZjdiMzUwYywgMHg0Y2JlZDk1NywgMHhiNWJiNjdjYywgMHg2MTRhN2RmMywgMHg2ZjVjNzk4ZiwKLQkweDY5ZmJiOTMwLCAweDkzMjc1Mzk0LCAweDdmNGMxOWViLCAweGM5ZTFiNGJkLCAweDcxMGQ3YzFmLCAweDllY2NiZGE0LAotCTB4NzI2MTY0YmEsIDB4MTdmNzdmMjMsIDB4Y2M3YmY4MmEsIDB4N2QxOWMzODMsIDB4MmFiZDliZTUsIDB4NTNkMzI3YjgsCi0JMHhiYzgyZTExZCwgMHgyNmE1ODZlZCwgMHhkYzFiYjdjYywgMHhhMTg5ZjdjZiwgMHhmYzFmOTA4MCwgMHgxYTdmZDBmNCwKLQkweDBlZmU3ZDI4LCAweGM4MDViZjJlLCAweGI5ZDAxZWUxLCAweDhjZjFmZDY4LCAweDQ5ODcyODQzLCAweGI4NmZjYjJlLAotCTB4OWM3Y2ZiNTUsIDB4YmZhODY0ZWEsIDB4MzE3ZTMxOTQsIDB4Y2I4ZmU4MDcsIDB4NTVjZjQyMmIsIDB4NTdhNDYzYzMsCi0JMHgwMjFmMDE3ZSwgMHhjMGZkNDBiOCwgMHhmMGZiZGY0ZiwgMHgxZTMzZjA2OSwgMHhmYzAyZmM2NSwgMHgwZjUxMzMwNywKLQkweDdlZTUxYmIwLCAweDFlZjYzNjg1LCAweDBiYmQ5NTk4LCAweDQyNDJmMjIyLCAweDg3NjU4ZmYxLCAweDU3NjA3NTVhLAotCTB4ZjFmZTZhZGUsIDB4YzRmOWY1ZjIsIDB4OGYxNDA5YjEsIDB4M2U1OTdiMGQsIDB4ZmU4ZWU1ZjcsIDB4NmY4MDI0NTEsCi0JMHhmMGQ3ZTEyOCwgMHhiN2NmMGE5YywgMHhhODc3NzdhOCwgMHg1MDc5YzNjNywgMHg3MDE2NGJkZSwgMHhiMjAxZTYyNiwKLQkweDE4MWU3OGY3LCAweDIwYzliN2ZkLCAweGE3ZDgxZjk3LCAweDUwZjQ0MTYxLCAweDExNTVhY2YzLCAweDgzM2NjMDZiLAotCTB4OGU1MWU5ZjcsIDB4OThmN2Y1ODksIDB4ZjdkOTFmMzksIDB4NWNkMmU4ZDcsIDB4MjIwYWFlNTYsIDB4YTAxZWE5NGYsCi0JMHhhMDNkMDU4ZCwgMHhmNWJiNDI1MiwgMHg2NTA5N2RlMywgMHgyNThmZmYwMCwgMHhlMjE2YjFlMiwgMHgzYTJmOTgxMCwKLQkweGJmMDcwZDg1LCAweDg5OWRmMTFiLCAweGUwNGQxY2M0LCAweDZlYzI3YWZiLCAweDVhNmZiNjlkLCAweDNmNTdkMDdmLAotCTB4NjNmZjNkZDksIDB4NjlmMjE5OGEsIDB4ODc5ZTE2NDYsIDB4MWY4ZWYwZTksIDB4MTZjN2VmODUsIDB4NDNmODFhNDcsCi0JMHhlYjc4ZjEyNiwgMHgxNzVmMTZjNywgMHg4ZjFmZDVlOCwgMHg2ZmMwOTA4ZSwgMHgwZDVmYzc0OSwgMHg3ZDdkOGJlMywKLQkweDM1YTQ3NWFjLCAweGVkMTdmYTA2LCAweGZiZDNiZTgzLCAweDQyYmRhMjVkLCAweDAyNzRiMmJkLCAweDExNjc4YmM0LAotCTB4NWVmY2Q3N2MsIDB4YzlhM2QzMzUsIDB4MGIzY2VjM2IsIDB4NzUyMGRhYmUsIDB4YzczYmUzNDYsIDB4MzJiYjkzMTksCi0JMHhhNjg0ZmY2OCwgMHhhYjNkYTExZiwgMHg1MWJhMjdjYywgMHg2ZWQ3YmEzZCwgMHg3N2IxMjZkZSwgMHg0ZThjNmMzMiwKLQkweGZjNWQ0N2ViLCAweDdmM2E3NGM5LCAweDQxZWZiNTNkLCAweGRmNmJhYmFmLCAweDI4YTZlZjhmLCAweDdiNWVmOWVkLAotCTB4YmMyZmU5NGEsIDB4N2ZlODNmOGUsIDB4Y2E2ZmIxMDAsIDB4MDA4MDAwNWIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg1OGFkZmYwMCwgMHhlNTU0NzAwYiwgMHhkZWY3M2UxNSwgMHg2NmNkOTI3ZCwgMHg0MjFiMjJmMywKLQkweDI2MGRkZGUyLCAweDliNzA5NjAxLCAweGY1MWU0MzU3LCAweDhjYTQxMDlhLCAweDYzODgzNzZkLCAweGZhZGVhNTZhLAotCTB4NTkwOTIwNDAsIDB4ZDZhMjc1MDksIDB4MDA3MWE2ZTEsIDB4M2I2MzRlYTksIDB4YjMzMDg4YTMsIDB4MjMzMWUxZDIsCi0JMHgzMDU0ZDM1MywgMHgzMmQ3NDBhMywgMHg1ZGE5NjI1NSwgMHg2NmQ0MmQ4YiwgMHg4OGQ0NmI5OCwgMHhmMWE2YzkzNSwKLQkweGExOTg2NjU1LCAweDVlZjdmY2U3LCAweGQ2MDg2Zjc2LCAweGU2Y2NkZDNhLCAweGU3M2VmZmVjLCAweDljZmY4ZjNiLAotCTB4YWEzNmMwMWYsIDB4NWNmYjAxOTUsIDB4OGJkZmYwMTYsIDB4ZWQyYmYxZjYsIDB4OGNhMmMwMjAsIDB4MDZhYzQzYjAsCi0JMHgyN2M4ZjJkOCwgMHhmYjBkYmQ3ZiwgMHg5OTBkZWRkNCwgMHg0N2YxOGI2MywgMHg0NzVmOGUzZSwgMHg1YzgwNTRiMywKLQkweDAwMGVhNTgwLCAweGQ0YzAxNTRmLCAweGJlZThiNGZlLCAweGYwOTdmNTAwLCAweGQ5YjAwMzUwLCAweDgwNDUzZjg3LAotCTB4OWM5NDRlOGYsIDB4OGZmMWM2ZWQsIDB4ODcwM2IwZGUsIDB4OWYxYjI3NWQsIDB4ZGIxMDdjOWUsIDB4ZjlhN2Y2NWIsCi0JMHgwNTllMzQ5YywgMHhlZjhkM2U2YSwgMHgzOGFhOGQyYiwgMHg2YTdlM2VlMSwgMHgyNzA3M2JhNCwgMHhmYjRiYTYwZSwKLQkweGJkYzNmYzcxLCAweGM2MWZjZmE1LCAweGFmZTc4NmY2LCAweGFlY2Q4ODk3LCAweGQ5ODgzYzVkLCAweDBkODg1ZmQ4LAotCTB4M2U2ZGZmZWEsIDB4ZmQ3ZTA3NWIsIDB4ZmQyZTc1ZGMsIDB4OTJlMGUxNWMsIDB4ZjhkMDM3OWYsIDB4Y2U4OTZjYzEsCi0JMHhjYjM5YTU2OSwgMHg3NWVjMmUwMCwgMHhmMDBlNTBjYiwgMHg3ZGNhYzQxOSwgMHg3MzFmMDBjNSwgMHgxYjhmMThlYSwKLQkweGNmODdmM2I3LCAweGIzYzAzYzczLCAweGU0OTRhNTBlLCAweDM3ZmJiOGRlLCAweDc5NDdhYjdmLCAweGU3N2UwZjlhLAotCTB4ZGZjODY1ZTksIDB4NDBiOTMzODYsIDB4NWNmMmMwZmIsIDB4Nzg3ZTAxODYsIDB4MWE3MjhiOTgsIDB4OTcwOGI1ZTcsCi0JMHg2MDA4NWFiYywgMHgwNjcxNThmYSwgMHhiNGY4OTI4NCwgMHhkZWZiNzIxZiwgMHhlMmI4MTk3NywgMHhkMzIwNzNiNywKLQkweGNhMWFlZWQyLCAweDk2NWZiZGY3LCAweDhlODNiNzZjLCAweGQ5YzNkYzMxLCAweDdkMGVmZjY4LCAweDY1Nzk4NjA4LAotCTB4MDlkNWYxMDksIDB4MDgwODAzOWEsIDB4OTc4NDcyOTgsIDB4OWMwODU0MDAsIDB4MTNmZjg0MGMsIDB4NjVmZjg2NGUsCi0JMHhhNDkwZGNmYSwgMHhmOGNmMjIyZCwgMHgxOTQxZTBlOCwgMHg2Y2ZjZTBmMCwgMHg3MDJiZjk3MCwgMHg5N2UzYTJiOSwKLQkweGRmNzRhMjc4LCAweGFkNjZjNDRlLCAweGNkNTAwNTk4LCAweGJkNTkyZGY2LCAweDhiN2ZjOTI0LCAweDE1ZTliMjMwLAotCTB4OTc3YTdmZGMsIDB4ZWY2MjcyNTMsIDB4MGNlZTFiYjgsIDB4YTczZWFlODcsIDB4ZWI2NGNjNTUsIDB4MDUzZWI5ZDcsCi0JMHg3ZmIyNzY1YiwgMHhhZGJmY2Y1MywgMHg1MWM4MTBlZCwgMHgyN2QxNWY1YywgMHhiNDhmZGU1NiwgMHhhZmNiZDBkYiwKLQkweDBjMzVlMWZjLCAweDhmMjc4MWY3LCAweGVlNzg2NjllLCAweDNhMWRlMDc5LCAweGU5ODc5NGY3LCAweGI4ZWI0ZTBmLAotCTB4MjM2ODM4MjcsIDB4ZDZmZGNjMzksIDB4NTZjMGE2YjksIDB4YzczZWZjNDksIDB4YzdmYjM1ZjgsIDB4YWU1YjM5OWUsCi0JMHg0NzYzZmVlMCwgMHhkYTAzOTcxNiwgMHg3YzQyNWRmMywgMHg2N2M0NTllYywgMHhmZTdlM2QzMiwgMHhhNzgzYTQ2MSwKLQkweGYxNTczMmZlLCAweDQ3NmZjZDVjLCAweGNmZGIzNGNmLCAweDFjNzM4ZjZjLCAweGU0ODNiNzkzLCAweDgyOWJmZWMwLAotCTB4OWUyMjhkZTEsIDB4MDk5MDM2MDMsIDB4NGI5ZGQxYmYsIDB4NDIyZDdlMTgsIDB4OWZmNDgzMjgsIDB4ZGZjYWM4ZjgsCi0JMHhmZGNkM2U0YywgMHhmZGNjZmU0ZCwgMHhhNDNkNzljZCwgMHhjMjYxYzQyZiwgMHhjMmNmMmYxMSwgMHhhMjQ1MzlmZSwKLQkweDZmMDlhZTQ1LCAweDQzZDMzY2JjLCAweDNmZDYzZWZkLCAweDE0ZWQ4NTkxLCAweDlmYTM2YjdiLCAweDE3MzZkZmE4LAotCTB4YmY5MDczZDgsIDB4ZWE0ZTM2YjYsIDB4NDJhZmQ2MDMsIDB4MDUzMWEzMTYsIDB4MmZmYzNiYzcsIDB4ZDg0MWI4MWIsCi0JMHhhYjc2NzY4NSwgMHg5MzkwNjc2MSwgMHg1YTNmMjM2ZCwgMHhkZjVkYmEwMywgMHg4YmM3ZmI1YSwgMHg3NmUwMTc5YywKLQkweGZhMDNiMDE4LCAweGY3YmUzOWNiLCAweGUzYTQyZWM3LCAweDEzYjRiZjAzLCAweGJlMTBlODdlLCAweDRlNWZiNDMxLAotCTB4YmNiZjg3N2QsIDB4NGRiOTZhZjgsIDB4YTU4ZDgwNGEsIDB4NWY4MzFiYzYsIDB4MjJjYTA5YjUsIDB4Y2Y4NGNmYjgsCi0JMHgwMTRiZjJhMywgMHgxYjM5MTE5ZSwgMHg4NTA4NTc5YiwgMHhhNWM3MGYzNCwgMHgzYTgxZGExOCwgMHg5MGZhOTRlOCwKLQkweDc4N2M0YjlmLCAweGUxZGZlMTJmLCAweDFmOTM5NTg4LCAweGYxMmVlYjk4LCAweGU3MWZlYjBhLCAweDdkMjNhZjRlLAotCTB4MWU1NjJkODMsIDB4NjQ3ZDQ3NGUsIDB4NDBjYjgwM2EsIDB4NjVjNTJiOWEsIDB4MGNmZDQzYzQsIDB4MjMwMTVjNTgsCi0JMHg5NTE4ZjFmZSwgMHgxZDg0OWNlOCwgMHg4ZjkxMDZkYSwgMHhmZDM3ZWE0NiwgMHhhYWE0ZWQxMywgMHg3YTBjOGY5OSwKLQkweGZjOTNmMzkyLCAweDAxOTVkYjViLCAweGIyYWFjZmRkLCAweDJjYzBjOGY5LCAweGMzMjdmMWZlLCAweDQwNjBmYjBmLAotCTB4ZDYxN2ZkZDAsIDB4N2FlNzEwYjgsIDB4NTkwMDY3MDMsIDB4NjRkZjdmMjAsIDB4M2NiOTM3YjQsIDB4NTRlMzAxMzEsCi0JMHgwNTUyZWJjMiwgMHgxOGZlYmZlNCwgMHhmNWRiMDFlYSwgMHg0NGFiZDhiNiwgMHgwN2ExZWJkMSwgMHgzMTA3NTlmNSwKLQkweDZiMjFiZjdkLCAweDhmNzBlNmZjLCAweGZjMWM3MDNiLCAweGE5MWM1OThiLCAweDhkYmJkNDMzLCAweGQxZTkwMDhiLAotCTB4ZWU4Y2ZkMDUsIDB4ZDEwMmUyZTQsIDB4YTMxNGMxNmYsIDB4NDQ2Y2Y4MzIsIDB4OTc0Njc2MTEsIDB4MTVkMTk4NDMsCi0JMHgyNTc0NjExMCwgMHgwYWJhMzNmNCwgMHgxOWJkMTgwNiwgMHhhMmMyOGNlMiwgMHhmOGIwMWY1OCwgMHg1OGRmMTNmZiwKLQkweGRmNmY5MjFhLCAweDVhNDY1ZmM3LCAweDY2NDQxYjc1LCAweGMzMjk4N2YzLCAweDA3OGRhZmNlLCAweGFmOWFmNTQ2LAotCTB4NTAwYWM3OGYsIDB4NmJhZjhjZmMsIDB4OGNiZjMyZTEsIDB4OGI4OWI5ZDksIDB4ZDcxMWVjOTMsIDB4MjdlYTIxYjksCi0JMHhkYjFhMDhkYSwgMHg1YzMyMDZlNywgMHgxMDQ2ZTdkYywgMHgwNjZlZDQ2ZCwgMHhiZTViYjU5OSwgMHg5YWI1MWUyMiwKLQkweGIzNDI1MzYyLCAweGJiM2NkMmUwLCAweDcwMzQ1YzlkLCAweGFiMmMyNWU5LCAweDE4NWFmYTkzLCAweGQ0ZGI1OTEwLAotCTB4MTQ5ZjIwMWIsIDB4MjdkNmFmZmYsIDB4NTU5ZjExMTQsIDB4ODg5ZjRkNjksIDB4MDNiMjIyMTgsIDB4YzYxYjYxYmQsCi0JMHhhNmNhYWFkNywgMHgyZjZjNjJlZSwgMHhiN2E5M2MwOCwgMHhlZDJhOWJlYiwgMHhmYmQzOWUxMiwgMHg4YzcyZjA4YiwKLQkweGVlMGMyZWFiLCAweDI4NDVjNDZlLCAweGE5MTZhMDE2LCAweDAzOTZmNmUyLCAweGI4NTM5NWZhLCAweDU0ZmYyMjVmLAotCTB4MTBmMTAwZGMsIDB4NDBiOWUzNzMsIDB4YzI1NmQwZmUsIDB4M2UyZGJmZWUsIDB4M2FlZjNmNWQsIDB4ZGEwMGY0OTQsCi0JMHhlNjJiYTc3NywgMHgyZGU3MTExNSwgMHg3NDc5MmRiZCwgMHhlODc3NmUwZiwgMHgyYjliYmVmYiwgMHg2NTA1N2UyZSwKLQkweGFlMzllMjcyLCAweDM4M2NhNDhhLCAweGFkYjFiYWFlLCAweDRmNzc2MjcxLCAweDU3ZWU3OTIwLCAweDUwMjBhZjM4LAotCTB4OWFmM2VkN2QsIDB4ZmM0ODhhZmMsIDB4NDgwNGFiODAsIDB4M2RjNjA1Y2YsIDB4MmY1ODM4M2QsIDB4ZWY5ZDNjNDksCi0JMHhlOTZiZTc2MywgMHgzODNkZGQyNSwgMHhiYzNmYTRmNCwgMHhhNDRiZjY5MCwgMHg5MGI1ZjZlYiwgMHhkMjRkY2ZmMCwKLQkweDk0YjkwMTM1LCAweDI3ZjY2N2M2LCAweDFhMzhiZjdhLCAweDFmMTM3ZGMzLCAweGFlYjhjMWUwLCAweGQzOTRhMDMxLAotCTB4NTZiYzVkYjksIDB4Zjg3YTg5NTQsIDB4MDc3OWRhNjksIDB4NGZiNGRmZTksIDB4MDc3Mjk1MGUsIDB4NDMyN2RiY2EsCi0JMHhiZWVjYzFkNCwgMHhhZjI1NzdjMSwgMHg3N2RhNGUyYSwgMHgwZmRjNWVlMiwgMHg4NzBhYTg3MSwgMHg1YzM4ZWQ5YiwKLQkweDQ5MzkxNmQzLCAweDZmZTk1NmI0LCAweGE3M2ExMWM2LCAweDEyZTlmODllLCAweGJlOTFkNmE2LCAweDM4Y2YzMzI3LAotCTB4MzdmZTYwM2UsIDB4MjMzM2I3NWYsIDB4MzEzZjFkMmUsIDB4ZGU4MTcwZmMsIDB4N2Y4YTQzMGMsIDB4ZjhiODlkNzUsCi0JMHgxZTMwM2ZmOSwgMHgyNDdiNGQ3NiwgMHhlYzdmNWU5YSwgMHgyNmYwNmU5OSwgMHgzYWIzMGFmZCwgMHhmZDMwZGM0YiwKLQkweDE5Yzg2ZWFjLCAweDg1YmNkODEzLCAweGM2ZmNkMmY3LCAweDE0YzUyMzMzLCAweGQxMTg2ZjZmLCAweDQyZGMzMGZhLAotCTB4MDJkOWY4ZTIsIDB4N2I4ZGRlZGQsIDB4ZmI4MmZlNDEsIDB4OGI0MmY3M2EsIDB4YjhjNzRhODAsIDB4MTA4OGY5YmYsCi0JMHg5YjVjYTI3NSwgMHhkYTMwNGYyOSwgMHg3NDNmYjYyYSwgMHhkMDY0OWRhMSwgMHg4ZjkzZDk3YywgMHhlNDM3YWQ3MiwKLQkweDgzZmUxY2VhLCAweDZkM2E4MzAzLCAweDFiYmM5MmEzLCAweGVmZDdmZTBjLCAweGNhNjZmYmI5LCAweGVkNDQzNmZiLAotCTB4ZGY4ZWY4YzksIDB4MzZlODkxZjYsIDB4OTBmZGJiZTIsIDB4MjEyMjlmYjUsIDB4YWM2NWRmYzksIDB4YWJiY2EwZWYsCi0JMHhlYjM3ZjI5OCwgMHhmYzc4MmViYywgMHhiYTk3MTQ1ZiwgMHg5YmZkYWM4NiwgMHg0YzM5ZTkwMiwgMHgwNjNkYzYwZiwKLQkweDlmNzhiZTQ2LCAweGEzZTQ4NzMxLCAweDcxZjM3OWJjLCAweGIyODlkNDQ3LCAweDJkZGJkZTZkLCAweGU4NWRhOGY5LAotCTB4ZGQxYzU4OTEsIDB4NWJiMzI4ZjMsIDB4YzllYzNlNzMsIDB4ZmE2MjM2NjYsIDB4YzAxZDg2ZTcsIDB4YzcxMzYwZjIsCi0JMHgzMjljMDdhNSwgMHg4MWU5NjNlOSwgMHg2MmRmOTYzYywgMHgwYWYyY2U1ZSwgMHhjZWNjMTM4YywgMHgxYzI2MjI5NywKLQkweDk5MGJkZGRhLCAweGNmMWU0MTUzLCAweDk5NzhlMTc5LCAweGNiZjM3OTQ0LCAweDZmNzg2NTViLCAweDMzM2Y5MjQxLAotCTB4MGUxMTZmNmYsIDB4M2VkMDNiMzcsIDB4MWYwMWVmYTYsIDB4NTAzNTdkZTUsIDB4YWUwMzc0ZjYsIDB4ODc2NTNlYWIsCi0JMHg4MzRmOGUyOCwgMHgwYmU5OGZhZSwgMHhlYmJmY2IzYywgMHg2NGZkMmI4NiwgMHgyMzFjYzIwNywgMHg0ZjMxZjg2ZSwKLQkweDJkYzNjMTRmLCAweDI1MzEwMWNlLCAweDc1ZjEzNWNmLCAweDJiNGI3YTFhLCAweGE3OGNiMmNiLCAweGViMmNmMzRiLAotCTB4ZDY4MzZhMzMsIDB4MGYxY2FhZjUsIDB4ZDY5YzUwZDUsIDB4OGJjYTY3ZDcsIDB4YzM0MWYzMmMsIDB4MzA2ZjFjM2YsCi0JMHg1ZGVlZGJlMCwgMHhiN2VjOGE3MSwgMHg2NmZlYjNkMSwgMHg2NTdiMjljMiwgMHg1M2JlNjU4NSwgMHhmZjEwMjYzOCwKLQkweDJjZGE5ZjBkLCAweDg0MjZmYzdhLCAweGNlNTFkMzliLCAweDBmMzFiN2RhLCAweGM2ZWE3M2MxLCAweDRkNmVlM2FkLAotCTB4N2VlNzVhMDUsIDB4YTAxZjI1M2IsIDB4N2I2YjQ0ZmQsIDB4Zjk4N2I0YzAsIDB4MWVkNTNmMzAsIDB4YWU3Yjc4OTIsCi0JMHg1MGY2NDllMCwgMHg3ODJjMGIwMywgMHgwYWViYzRjZiwgMHhmMzA3MWVmZSwgMHg2ZWUxYmE4NywgMHhkODZlNWZjNiwKLQkweDliNWU3YjhhLCAweGM1N2NmNzE1LCAweDdhYzE3MzhhLCAweDExODVjZTJiLCAweGY1ZDdjZTJiLCAweGE4MGQ3MTU4LAotCTB4Nzc4YWRjNTYsIDB4NWZlNjU5ZDQsIDB4Njk2NGRmZGYsIDB4NjU1YWVlOTcsIDB4YmEzMGJmOTksIDB4N2M1ZWQyZGEsCi0JMHhmY2NiNzZlOCwgMHg1OTc3MDMyNSwgMHg2ZDBlOTdjNiwgMHhmNjliOGNiNCwgMHhkZmZmNTMzNSwgMHg2MTllNmQ4OCwKLQkweDVmZjAzYzVmLCAweDUzY2FmZmEyLCAweDk5Y2U1OTBmLCAweDg4ODA3N2E5LCAweDZiZDZmODQwLCAweDU3MDNiYjAwLAotCTB4ZWRmYWJkZWIsIDB4NTc4YWYwN2UsIDB4MGYwMjlkZWIsIDB4ZjUzMzlkZTUsIDB4YTdmYTQ1M2YsIDB4ZmZlODZmMzgsCi0JMHhjNjI5ZDIzMywgMHgxN2JkMzdiOSwgMHhmZDM3MjcxZSwgMHhjZjFlOWE2ZSwgMHhiODg2ODQ1YSwgMHhiMDZkN2E0YywKLQkweGNmZWI3YWIzLCAweDNhNzM3NjYyLCAweDFlZTMwM2M1LCAweDE4ZjcxYjBiLCAweGVjYzFkZmFjLCAweGRiZDNlYzIxLAotCTB4NDkzYTVjNTIsIDB4NWNlMmFjNzEsIDB4YWFmODk5YjgsIDB4NTEyNzIyZDIsIDB4ZDBiOWE4NGMsIDB4ZjM0MTljZGYsCi0JMHgzODdkMTA2NSwgMHhmYWYwMzM5ZiwgMHgzNjA3MmQ1ZSwgMHg3YjYxM2Y4YiwgMHg1YmNmMTI2ZSwgMHgwMzIxNWVkNCwKLQkweDhhNWZkNzI3LCAweDRiMzBiMWY2LCAweGJmOWUwZWM1LCAweDZhZTcxOGRhLCAweDU1YTI3YmY1LCAweDA1MmQ4Mzc2LAotCTB4ZjM1YWM2OTcsIDB4ZmUzMTA4ZmUsIDB4MzE2ZmZjNGMsIDB4ZTdjYzA4ZWEsIDB4M2NmOTQxYzEsIDB4MDVmNjhhZWYsCi0JMHhhNDVmY2I2NiwgMHhhZmNiMDI1ZCwgMHhiZDZmOTYxNCwgMHhhMjc2MjljZSwgMHgyMmYxNWM2YiwgMHg5ZTRhZWI4YSwKLQkweGI4ODgyZjMyLCAweGM4OTJmMjRkLCAweGViNGUzM2YyLCAweDI0MTJhMTIzLCAweDZhNTY1ZDE4LCAweDc1NGNhYjY2LAotCTB4MzBhMzk2MTgsIDB4ZDE5ZjI5MGYsIDB4ZmIxODdhYWEsIDB4MmY0NmFkM2UsIDB4MTI1M2U5N2IsIDB4MTg4MzhhNTQsCi0JMHhkZjM5NDcxNywgMHhmYjVjNGFiNiwgMHg0NWM3ZGQ2NiwgMHhjYTJkNmY3NCwgMHhmZjUwMTc5MCwgMHgzYzhlZjc5NSwKLQkweGFiZTMwYjk0LCAweDQxMmE4YmM2LCAweGIxYzQzZWEwLCAweGRhNjNlMWZhLCAweGRmOGE1OTY0LCAweDdiYjNiMGVlLAotCTB4NmE3YThjMGEsIDB4NTk5MzgxYWQsIDB4OWM2MWRkNGYsIDB4YWM1YjhhM2IsIDB4NzZiZGY4YzcsIDB4NDc4Njc1ZTgsCi0JMHhkNTljN2ZiYiwgMHg5MjZmNjg5ZiwgMHg3YmJmZjcwZiwgMHhlYTgyYTdiZSwgMHgyNTJiOTA0OSwgMHhlYjM3MGViZCwKLQkweDdmZTEwMmFiLCAweDdhY2Q0N2I5LCAweGRiZjM1YWY0LCAweDc1MmMxN2ZkLCAweGVmZDYxYzJlLCAweGFmZWY2Yjk3LAotCTB4Y2E0ZDdiMzIsIDB4ZmEzZmVmYWQsIDB4NzdiYjFhNTgsIDB4NmMyYjFmNDYsIDB4N2ZkYzlhMjIsIDB4MzZiZmVkOTIsCi0JMHgzZWM1OTZmMiwgMHhiYmY5ZWNlZSwgMHhhNDdlZWVjNSwgMHhkNzE5NmJiZSwgMHgwNWVjYTY3MiwgMHgzNDc2YmYyOCwKLQkweDEwMGZjNTdmLCAweGNlMjM4OWJmLCAweDUxMzNhYTFhLCAweGE2MGZkZjVmLCAweDEzZGFjMWQ0LCAweGJjZTljYmE1LAotCTB4M2ZlNzJlZmYsIDB4NWIyM2JlMTksIDB4OTA1YjYwZTMsIDB4ZDZmY2YzOTQsIDB4NmRhZGFjNzMsIDB4Mjk5ZDE4ZDUsCi0JMHg5YTk3NTlhNywgMHgyODdiZjFkNCwgMHhhNjdlYTFiMywgMHg2Y2QyMzliOCwgMHg0MTIzMmNlZiwgMHhiOTFmNmYzZCwKLQkweGRkMTM2ZTcxLCAweDBlODUyM2JmLCAweGY0NGI0ZTliLCAweDRiYWQ3ZTc2LCAweDQ5NThhZjZmLCAweGVjZjc2MTM0LAotCTB4ODQ3NGJhYTAsIDB4N2I0Mzk5MDMsIDB4ZjlmNzlkMTgsIDB4NTE2ZTA3MDEsIDB4NDAzY2E3OTcsIDB4YTY5YTI2NzIsCi0JMHgyOTc3YTczZSwgMHgyODhhZDFjOCwgMHgyYTY2NGM5ZSwgMHg4NzNmNTIwZiwgMHgxNjdlNWZjOSwgMHhmMjg0YjNlMywKLQkweGZhYmMwYmZmLCAweDcwMThjMDZiLCAweGFkNmRkZjYwLCAweDdhNGZkNzk0LCAweDY0N2ZiYjc1LCAweDJhYWQyZGRmLAotCTB4MTk5OTUyZTIsIDB4NDBlYjRhZGUsIDB4OTE3YmQ4ZDYsIDB4OGVmOWFmYzksIDB4ZDUyZjc1NDIsIDB4NGViNzA5MjEsCi0JMHgyNjM5MDdiNywgMHg3NDE5OGVmZiwgMHgyOGQ0ZDUzNywgMHgxZDA2NGJkZiwgMHgzODRhZmJlNSwgMHg0ZWRkODdmMiwKLQkweDdlNjAxZmQ4LCAweDMxNWU1MzIwLCAweGZiYTljYzdkLCAweDhiYzAwZDgxLCAweDcxMWRlZmUzLCAweDNjZjY0NzNlLAotCTB4YmNhNjc5MTcsIDB4OTYzM2IzMDUsIDB4Y2VmYzU3ZmYsIDB4NjEzOGEzMTksIDB4MTRlNGJmYmUsIDB4ZTEwYjNmOGIsCi0JMHhlYzk3OWNmYSwgMHg0YzlmY2VhYywgMHhiZmM4NmIxNywgMHhiMmFmYmQzYiwgMHhhMGE2ZWJiYywgMHg0MGU0YzAzMiwKLQkweDhjN2UyODQ5LCAweGRiZWU3NTFlLCAweDJhNGRmY2M5LCAweDdmZmU5ZDVhLCAweDEwM2I2NzdkLCAweGE2OGM3NTY0LAotCTB4M2JjNjkxZTcsIDB4OGI3NzI5OWIsIDB4N2I5MzM4ZjAsIDB4NDgxMzk3N2EsIDB4ZTM3Yjg5Y2UsIDB4YmJkODg1NGYsCi0JMHg3YzQ0NTQ5MiwgMHhkZjNhZjI4ZSwgMHg3Y2E2YmYyNiwgMHg3ZGM5MWNhNiwgMHhjZDZlZGNiZSwgMHg3YmU0YTJmNywKLQkweGYyMTJmNmQ2LCAweDdmNTFjNDAzLCAweDNiYjgxM2M3LCAweGZlYjJjZjU3LCAweDlhYWJlOTBjLCAweGEwOWRhN2JkLAotCTB4YTIzMWI2MzgsIDB4ZjUyNWE3YmYsIDB4M2JjMGZmZGUsIDB4MGY2MWI3YTQsIDB4NWFkNzYzOGIsIDB4Y2VjZTUzM2YsCi0JMHgwZjBjYzMxMywgMHgyNDg3ZjM5NCwgMHhhNzljOGE1ZiwgMHg3ZWVmMjk4MywgMHgzZWNmYzcxMywgMHhiZWJmMTIxNSwKLQkweDM4YzI4OTdjLCAweDNjNGNkZjdiLCAweGM0NDhiMTc3LCAweDVlYzc5ZGY1LCAweGQyNzY0NzNmLCAweDMzZmZkNDY5LAotCTB4NzM5ZGE5ZGYsIDB4OWFjYzdlYjAsIDB4NmYxYTdkZWQsIDB4Yzk3Yzk0ODUsIDB4NmY5ZmFlNjksIDB4MDRjN2FlYjMsCi0JMHg4ODZjZmM5OSwgMHgwYWYyOTFmYywgMHg1ZTI5MjdiYywgMHg4YmU0Zjc5YiwgMHg2OWMxOWQ0NiwgMHg0ZDc4YjFhZiwKLQkweDZlZmQ5MWU3LCAweDVmNzY1NGUzLCAweDdkMDVlZjk5LCAweDU0NDdkZTFjLCAweDJjZGQyYjk3LCAweDc5ZDcwYjhlLAotCTB4MTdjZmIyMjQsIDB4NzRlMzA2ZDEsIDB4MzRlNGQ4ZmYsIDB4YTMzYzJlZjYsIDB4NTRlNzlkOGUsIDB4ZDkzYjI1M2UsCi0JMHgxZTUzNTZmMiwgMHg2ZjgzYjlkNSwgMHgyN2VhMzJhYywgMHgzNmE5MWVmZCwgMHhjZTlhYjJlYywgMHgxOTQzZmUyNywKLQkweDMyYTkzZWVjLCAweDQ1NzFhYmY4LCAweDBjYmFkZTU4LCAweDE3N2Y0MTU0LCAweDFlMTlkZTMwLCAweDc3NTJjZDdiLAotCTB4YTJiZjA3ZmQsIDB4MTdmMDg0NmIsIDB4MDAwMDE3ZjAKKwkweDQyNGU0Y2NlLCAweDRjMjJmMjEyLCAweDIxYTA4ODEyLCAweDhhODBhZjBjLCAweDIyMDEyNzdmLCAweDI4MjAzOWY1LAorCTB4NDIwMWQ0NTgsIDB4ZDQ4Mzc5MDgsIDB4Y2RlZGFmNGIsIDB4MTExMDI0ODQsIDB4MDU0N2Y0MzUsIDB4NTA4ODc2OGIsCisJMHgzNDBkYTJkMSwgMHgwZWMxNjBkMiwgMHg2ZDdiMTQyMCwgMHhjMGZhZjA2ZiwgMHg0ODBiZjVlYSwgMHhiMTJmMzE0MSwKKwkweGNiYzU3ZTIwLCAweGU3ZGFkNmJmLCAweDI2NGNlNjY0LCAweGFmZGJkODgwLCAweGI0ZmRmZmZmLCAweGVjZTdkOWI4LAorCTB4ZWJkYWY3YjMsIDB4N2I1YWQ3YjUsIDB4NzU5MjNkZWQsIDB4YzdiZjkzMDIsIDB4MDNmYzQ1ZDgsIDB4OGM0ZDRmZTUsCisJMHhmMmMxMDliMSwgMHg4MGY2NjY2NywgMHhjOWIxODcyNywgMHg0NzNhZmViZCwgMHg2ZDU1NjMzYywgMHg5ZGEyM2IxOSwKKwkweDk5ZWMyNThjLCAweDUwMjgxNDIxLCAweDJjMjNkNWZlLCAweGJmZGY4MjUwLCAweGYwOTdjMzY1LCAweDQyMTliNmZmLAorCTB4ZDA5NzdjM2UsIDB4YzNlNjExZTksIDB4MDJkNWU0ZmIsIDB4OTMzYTg3NmIsIDB4ZWEwYzMxOWMsIDB4NGIxOWI5OGMsCisJMHgxMjZiMmM2NCwgMHg0YjIyM2ZhMywgMHhlMGZmODI4ZCwgMHg4ZjM5MjU3MywgMHgyN2ZjMzRiMSwgMHg2MTQ2NzU3NCwKKwkweGM2NzhjMGFlLCAweDVjNTMxZTMyLCAweDM4YTlkMGQ0LCAweDg0M2Y3ODE1LCAweGJjZDJjNjdmLCAweDA3MzFiNzI1LAorCTB4YmMwM2NmNjMsIDB4YmNmMDcxYzksIDB4NjFkZTNhNWEsIDB4YzIyZWVmZTUsIDB4M2FmM2ExZGYsIDB4YWU1OGNkNmEsCisJMHgzMjc3M2UzMCwgMHg0MTY1ODlhNywgMHhmM2UzM2ViZiwgMHgzZDYzNDZhYywgMHg0ZmUzZDk5YiwgMHhlYzNmYzM0NiwKKwkweDhjNTE3ZWNjLCAweGIxMTM4ZjMwLCAweGNiM2MwMThjLCAweDYzMmYwZTU0LCAweDU0NjdiMmJkLCAweDZhOWIxZjEwLAorCTB4MmMzMmEyNTgsIDB4ODUyZjBmNTgsIDB4NTYzMzg3NjUsIDB4ZWQ5NzVlMDMsIDB4ZjgxNjVjMTYsIDB4MmY2YzM5ZmUsCisJMHhiZWQ3ZTYzMSwgMHgxNWVhZDY2YiwgMHhhMzYyNTkzZSwgMHhiNTA0MDRhMSwgMHg2N2VmZjRlNCwgMHgxMWJmY2IxMSwKKwkweDJiMzBmZWYxLCAweGVhNGFiMmEwLCAweGFmODA1NTk1LCAweGZiNzY1YWFhLCAweDY3ZWRmZTk1LCAweDU0ZTg4OTMzLAorCTB4NWJmNmI5MjksIDB4NWFkZWZjNjEsIDB4ZjE4NjZhZTYsIDB4MDJkNTk5OTcsIDB4OTFmYjJmYWMsIDB4N2E4M2U1ZDMsCisJMHgyMTQ3NjM2NiwgMHgzNmQwZmE4MywgMHhjMTE5ODk4MSwgMHg5ZTAwYWZlZiwgMHgwMDdmOTFkYiwgMHhhNTJiMmExZSwKKwkweDc0MDY0MmRlLCAweGIwMmJkZGVjLCAweDg3MWMwY2U2LCAweDc3NmNiYmY3LCAweDBjNjVmMzA2LCAweDY2NThlNzBjLAorCTB4MzJlNzM4MjYsIDB4NzQ4OTNhNDEsIDB4ZDIwNzMwNzEsIDB4ZjMyNGJjYzEsIDB4Y2VhODQyODksIDB4YjBmM2RjNTQsCisJMHg5ZGUyOWY3ZiwgMHhlN2Y0ZWQ4NywgMHgzOGU2MGI0OSwgMHhmMjU3MDBiZCwgMHg1N2EwNjY1MCwgMHg5ZDNhYjViMSwKKwkweGVhNTYzMjY1LCAweGJlNDQyOTY5LCAweDhkZWNiNTM4LCAweDllMDI1ODU1LCAweGY3YzAyNDEzLCAweDA4YTc4YjdjLAorCTB4NTc5OGE5ZmIsIDB4YTc4MGNkOWQsIDB4OGQxODU5ZTYsIDB4ZmYyZGI0M2YsIDB4MGNmODA5MzMsIDB4YzRjNWYzYmEsCisJMHg3NjMxM2YyMSwgMHhmMDRmODQzYywgMHg1YTExZjFjZiwgMHhkZTk4MWM1ZCwgMHhiMDhiMmI5NywgMHgwNWYxMDkxZiwKKwkweDFmMDExNzcyLCAweDI2YTA0MjNmLCAweDU0NGQyOGUwLCAweDI5ZmM1NzNhLCAweGQwYTBkODZiLCAweGMzNTk1YmZhLAorCTB4ZTUwMDY5YzYsIDB4M2YwY2JjMTEsIDB4MDg0M2FjNjEsIDB4MWNiZDRiZTUsIDB4YjBmZjNiYmEsIDB4M2MzMDNiOTQsCisJMHgwNGYzZDNmZiwgMHhhYjdlMTI3NCwgMHgxZmM4YjcwMCwgMHhiZmQ5NzYxNSwgMHhjYTYxZjgxMiwgMHhmN2MwZTZhYiwKKwkweDM2MmEzZjgwLCAweGQ0MGI3ZTBiLCAweGU4ZGJhZjRkLCAweDVlMjZmNzdkLCAweDM3NjVkODBmLCAweDE2ZDc0ZmYyLAorCTB4YmRmMDBiYTgsIDB4MWJmMWZkYTUsIDB4MTU1ZWJmOTEsIDB4M2I3NjMzNTksIDB4ZmE4NGNhMjIsIDB4M2IwNmE0ZTUsCisJMHhjMDc1MGYxYiwgMHg1NzhkYjE0NywgMHhiYmVmMzYyYiwgMHg2OTJmYmYxZiwgMHhmNDFiMzBiMywgMHhmMTdiYjE1NywKKwkweDdkNDIzNzFkLCAweGMzMzM2MWYxLCAweDZiNWIxNTI2LCAweDJmYTgxNGU1LCAweDU4MmQwYmYxLCAweGYwZTAyOWVmLAorCTB4ZmU4OTc2ZjksIDB4YzdiZWQwYWQsIDB4MWIzODllZDEsIDB4YzZiYTczZTgsIDB4NjMzMjljY2EsIDB4YzRmNmY2NzUsCisJMHhhNTY3YzA1OSwgMHhmODg1MWRmZSwgMHhjMTc2ZTk1ZCwgMHhmMjlmNjg4NSwgMHhjOTQzZDZlYSwgMHhiOTE3YWYzOCwKKwkweDhiNmQ5NzdjLCAweDdmMWQ0ZTY2LCAweGFiNjRmN2YwLCAweGJjMWVmODE4LCAweDY0ZjMwNjVmLCAweGQ2NjJlZmQwLAorCTB4YjA3YTg4NTQsIDB4ZDkzYWViNjIsIDB4ZWJlMjBmNjksIDB4ZTM0YThkNzQsIDB4OGJkZmM5ZjQsIDB4NTc3YzBlMzAsCisJMHhjMmUwOGFmOSwgMHg5ODlhNTYyOSwgMHg3YmIwZTUxNywgMHhmM2NlNmRiNywgMHg1NmFmY2UwYSwgMHhiY2UzYjZjZSwKKwkweDZlZDhjYjU2LCAweDJlZmU3ZmIxLCAweGZlYTVjZDU0LCAweGJjMjE3MmNkLCAweDU5YjRkZDJmLCAweGRiOTEwZTJlLAorCTB4OGM4MzZkYjIsIDB4MWFjODZkNzAsIDB4ZDcyMDhkZWMsIDB4ZDc4MDc4NDEsIDB4NTJmNTgzYjIsIDB4MGZhODAzZDQsCisJMHgyMzNjYmYyNSwgMHg4NTJhY2Y4NCwgMHhiMmNiZTI1OCwgMHgxYTczMjI2ZCwgMHhkZGQzODhmOCwgMHgxM2ZjMmVmNywKKwkweDZiZGJlNWYwLCAweDc0ZWFiYzI3LCAweDFhYTdkM2ViLCAweDFhYThjZWRkLCAweGJjZGVhNTFkLCAweGY4ZjgxMTE5LAorCTB4YzAwM2E0NzEsIDB4ODI3ODg0ZDMsIDB4OWYwNmFkNzIsIDB4OTdjYjMyNjMsIDB4OWI4NzdmYTAsIDB4M2NiYjAyYTksCisJMHhkOTk5MzY1ZiwgMHhmNTYzMDY3YywgMHhkMmRkMDdiMCwgMHhkOTk3NTBmNSwgMHhmNTgyZTY1MiwgMHg3YmIxZmE1MCwKKwkweDA0OTNkNDJhLCAweDlmMzg2N2VmLCAweGMyNWJjMTdhLCAweDI0OTZhYmQ3LCAweDk1NzllMDBmLCAweGZjZTBlNmMwLAorCTB4MzBkMDIxOGYsIDB4YzBjOTU1YWYsIDB4YTZmNzgwOWYsIDB4OGJjZjc5NjksIDB4M2M3YjA2ODIsIDB4YjE3ZjhiZDYsCisJMHgzOWZhODMyNiwgMHhhMTk4ZmQ0MywgMHhmN2NiYWM5ZiwgMHgzMjRlMTZhMywgMHg5NjE2YTNmNCwgMHg4ZGZjZmRlOCwKKwkweDU5NWRiMWZhLCAweDM3ODU0ZDNmLCAweDJjMjllMTE4LCAweDA0OTFmYmQ1LCAweGJmNmY1NzY4LCAweDM3YTk3OWIyLAorCTB4NzNjMjM2NGYsIDB4MTNmNTM5NzMsIDB4YmNjNWQ1M2IsIDB4MWFlN2FlMGEsIDB4Yjc3NmIwM2YsIDB4ZWQ5NWVmMDgsCisJMHhiMGQ3NjNiMSwgMHg1MDI4YmU1MCwgMHgwZWRiODAwNSwgMHgxN2NhMTI1MiwgMHgwY2EyOTMzMSwgMHg4ZWViMTg3YywKKwkweDI3YTFkNDMzLCAweDQxNzVlNGY1LCAweDk1ODgxM2ZkLCAweDQ1Mzk3YzY5LCAweDlmOTBiZDI2LCAweDQzZmFhNTYyLAorCTB4ODVlOTBhMjksIDB4NWVmMDZlODcsIDB4OGUyMGViODMsIDB4MmVhMTkyY2QsIDB4MTFhYjQ3N2IsIDB4MTRlMDFhZjgsCisJMHg2MDk2MTI1OCwgMHg3ZmY1MjQxNywgMHhmMWNjZGFiZiwgMHgyMTdhOTA1MCwgMHg1ZjdjMThmYiwgMHg4ZWNkZWE2NSwKKwkweGE2MzVmYTg1LCAweDZmMTE2YmZjLCAweGU1ZWI4MTJlLCAweDYzNTU5MTI4LCAweDIzMGIyOGJiLCAweDIzM2FiNGZkLAorCTB4MDg1Zjc5ZWYsIDB4MDA4NzFhOWUsIDB4YmY2MDg1ZmQsIDB4MTI2ZjY2OGQsIDB4ZGFmOGQ3ZjIsIDB4YzAxMjdjNjcsCisJMHhjYzA4NmFiNywgMHgxMmJhMDUyNywgMHg2MGY4MDk5ZSwgMHhhNDNkNWEzZCwgMHg2OWYxMDkzOCwgMHg0M2JlNDE5MSwKKwkweGZjNjE5N2M3LCAweDA2ZmYxYTFjLCAweGM3MWJhM2M0LCAweGJlM2ZlODRmLCAweDYxOTI3MzI1LCAweDg5N2E2YjdjLAorCTB4MGNhYjdjNjEsIDB4NGZiZjAzZTMsIDB4YzZkNjZkYWQsIDB4YzBkZGZjMDcsIDB4OTlhMTM0ZDgsIDB4OTdhNGI3YzYsCisJMHg2NWFiZjhkMCwgMHgzZjE4NjI1NiwgMHg1YmZjNmZhYSwgMHg4MTllZmU3MCwgMHg4Mzc5OWZlNiwgMHhhNWU5ZmU3MSwKKwkweDdjY2JmOWM2LCAweDVmNmFiM2ZlLCAweGEyOGZjNmQyLCAweDVlMTZjZmY5LCAweDJmNGZmM2UyLCAweGYwYjdmM2U1LAorCTB4NzdjNmZiN2UsIDB4NWVmZmUxZjQsIDB4ODA3N2JmOWMsIDB4OTM1OTJkZjEsIDB4NWExZmYzOGQsIDB4ODViZjljNmUsCisJMHhiYjU0NWY4ZiwgMHhhMTVmMWI1MywgMHgzYjA5MTdmMSwgMHg5Njg3ZmNmOSwgMHhjNWIyZjhkMywgMHg5MjNlNDJlYiwKKwkweGZkYWFhMzUzLCAweDgxYTQ0ZjY4LCAweDFkMjYwYzQwLCAweDA0NzJhNmU1LCAweDFmYTAwNTE4LCAweDA0OTkwYTg2LAorCTB4OWM1MTQzYzcsIDB4MDE0NWNlZWYsIDB4N2Q0MTI5YmYsIDB4NTEyMGZjYzcsIDB4MzUyYWNmYTAsIDB4OWVkYjJmOWUsCisJMHhhNTllYTMyZiwgMHgzNzY4ODlmNywgMHg2ZDQ1M2ZmMSwgMHg2YzM3YWQyMiwgMHgxYzNmYzViZCwgMHgxMzZlZWRlMCwKKwkweDVhMmY1ODdkLCAweGE0NWY5MzdmLCAweGU1ZGI4ZWY1LCAweGYwMDVjNjYwLCAweDFjOWU1ZmY5LCAweGFmM2ExY2Q1LAorCTB4OTM1MTcyZjAsIDB4NDE4NzY0ZjksIDB4YmUzYzM4OGUsIDB4MWFhMjM2MDIsIDB4MjY0NzZiZTAsIDB4OWZhYzEwOTgsCisJMHhjNjBhM2QwNCwgMHg3YTBlM2IyZiwgMHg2NjUzY2IxNCwgMHgwMDljOGY2ZSwgMHg1MGU0Y2IzZCwgMHhmNmU1YTliOSwKKwkweDkzYmQ4Zjg4LCAweDViYmFmMzAzLCAweGM0YTRmZjgzLCAweGI5NzI3ZGYxLCAweDlmZmM0N2UwLCAweDQ2NTRiNzViLAorCTB4MDlhOGI0ZmQsIDB4NzkxMGU5OGMsIDB4ZDRlOGQyYWYsIDB4NmZlMmRiYmIsIDB4NGU5ZjA4MTYsIDB4MjQzZGNmYzQsCisJMHg5N2ZkOGM4YSwgMHhkZTJmZDc2NiwgMHhkZGYwYzgzMCwgMHg0ODZmZTYzYywgMHhkNzBiZjY4MiwgMHhjMmEyMWZjZSwKKwkweGM3MzA3ZmZjLCAweDUzZWQxNjMyLCAweDEzNTQ4NDkwLCAweDM1NGIzMWM5LCAweGE3MzE2ZjgxLCAweDE1Mzk5ZDc1LAorCTB4MzFjY2Y3MmEsIDB4YjlmYWVjMWIsIDB4MDdmZDYzNWUsIDB4Yjc3YWM2MjUsIDB4YTEzNjZmZDksIDB4NjA0NGIxYmQsCisJMHhmYmRmYTE5YiwgMHhmNWVmOGRhYSwgMHg3MTA5MzY3MSwgMHg3OGRhYWU5YywgMHg3ODcyMjc3NywgMHgyYzcyYzNlZiwKKwkweGFlODk1NjNlLCAweDViZmNhYmY3LCAweDg3YWE5ZTFkLCAweGViNDAyY2NkLCAweDQzMDI0NzY1LCAweGM4MTJmYTNhLAorCTB4N2NhYWYzNWUsIDB4ZGVmMGUxZGUsIDB4M2RiYWI2NmYsIDB4M2ZmZGNmMDAsIDB4ZTE5ZjA5MTIsIDB4MWViYzc3ZjAsCisJMHgxZDgxMzZlZCwgMHg0YmUxYjFkNywgMHhlMWI3ZGEzMywgMHhmZjg3MDlmMywgMHhmM2UxMTU4MSwgMHhmN2Q0NjU1MSwKKwkweGNmZTE3ZGYzLCAweGYzODQ5ZjM5LCAweGZlNWI1NTUzLCAweGVkMjExM2EwLCAweDNmYmU1YTJhLCAweDdmMDg0NGU4LAorCTB4NjE5YjZkOTUsIDB4Y2ZmMTJmYTgsIDB4YmM1ZmI0MzUsIDB4ZmRlMWJlNjEsIDB4ODYyNWE2YTIsIDB4OTcxYjBiZjcsCisJMHg3ZGYzZWExYSwgMHg3ZmI0MzIzZiwgMHhlMWFkNDU2MCwgMHg4ZmQ1N2RmZCwgMHhhMGZmZGUxOCwgMHgzZWExOWQ2NCwKKwkweGQwZDFiYmQ3LCAweDliMzk5ZWZlLCAweGFmNGRlZjBkLCAweGU1MTNiYzhmLCAweDkxNWRlZWE4LCAweDU2NzFiYWUxLAorCTB4ZGEzOGY5MzksIDB4YzkxNTY3ODMsIDB4YjRmOGY0ODUsIDB4ZTBlNDg5MjYsIDB4Y2E5MzhkNzQsIDB4NTY3MWI2ZWUsCisJMHhjNTgzZDcyZiwgMHg1ZTljNGMwYywgMHg3MWFmOWNlMSwgMHg0NjY1ZWEzMiwgMHhjMmFmZjNmYSwgMHhlYTBmOWYwNSwKKwkweDg0OWMxMzdmLCAweGNjODM3MTNmLCAweDAyYzJjMDAyLCAweGUzZTNlYjhiLCAweDdkZTQzMTVlLCAweDZmZGU2NWM3LAorCTB4ZDcxZjQxMDAsIDB4MTFkOGJkZmYsIDB4ZjM1NTc5ZjksIDB4MDQ2YWExZmMsIDB4YjcyODIxZmYsIDB4YjlkNzE1MmMsCisJMHgwZjdkNmQxZSwgMHgzMDJlNWY3ZiwgMHhjNjczZTg0ZiwgMHhkNzljOTI1NiwgMHhiOTRjZWI2OSwgMHhmOTQxZjVjYywKKwkweGY0MDJlNGNlLCAweDQwZTVjYmJmLCAweGM2YTVmNTc2LCAweGEyYTQwMTZiLCAweDNjZWI0NDllLCAweGE0MDFmOTAxLAorCTB4NTkyZmMwYzAsIDB4ZGNlZWY5MDYsIDB4OTU1YzEyMjcsIDB4YWY0MDEzYTgsIDB4YzE5ZTYzYWUsIDB4ODEzM2Q0MjYsCisJMHg4ZDc3ZTkwMywgMHg0OWRjMzg0MiwgMHhhMDRiNmY1NCwgMHg2NmIzYmQ3NSwgMHgxMjEzYTBmYSwgMHhlNTQzYzdkMiwKKwkweGE4NzMzNWE3LCAweGE1ZTM1OTNjLCAweDA5NGQ0NGYyLCAweGFhNmJjNzk1LCAweDU5YThlY2E5LCAweDM1YzdlNTQxLAorCTB4YWEzZjJhM2UsIDB4Y2ZmMmE0NjksIDB4MWU1NDRkMzUsIDB4ZTU0MGQ5YWQsIDB4MmE3ZTM1N2IsIDB4NTRkYzZiYmIsCisJMHhiYTJiZjlmNiwgMHhlY2Q3OGRmZSwgMHg4MGFmY2Q1NSwgMHg2N2VhODc5NSwgMHg0M2Q0YjliNCwgMHg3MzkyNzZkYiwKKwkweGY5Y2ExMjU3LCAweDM2NWNlNTE5LCAweDhlNjdlM2RhLCAweDMxOTk2MzgyLCAweGY5YzJiZTMwLCAweGJhM2E2MDZkLAorCTB4ZjYyOTVlYzksIDB4ZjVjN2ZkMDMsIDB4ZTI4YjZmN2YsIDB4ZDg5OWIyNzQsIDB4ZDlhNjcwNzQsIDB4ZTE3ZmMzMjMsCisJMHg3NTQzOTA1YSwgMHgxNjA2NTkwOSwgMHg3YjBjZDcyNCwgMHhlZDYxN2U4NCwgMHg4ZTVkN2E0MywgMHg5YmRkY2M0ZSwKKwkweDcxZTgxMzNiLCAweGU1YmY5OWYyLCAweGRhNzViZjYxLCAweDQwNzUxN2ZhLCAweDA1OTg3NWE0LCAweGJkMjE3NzllLAorCTB4ZWI0NmYwNDIsIDB4OWFhYmVmNWEsIDB4ZmUwY2JmYmUsIDB4ZDdmMGZhYmEsIDB4ZmJmZThlOWUsIDB4ZmVhNTQxNDEsCisJMHg5ODVhYjRjZiwgMHgxM2RjNzg4NCwgMHg2N2U2MDdlZCwgMHhlZjNmMGU2NywgMHg5NjVjNzk0MCwgMHg0NDRmNTI2NCwKKwkweDU2NWU4M2MwLCAweDRhYTg2NGI0LCAweDY2ZDNmYWU4LCAweDEyNjk5ZmFjLCAweDdhZDBiN2E2LCAweDM1OTk4Y2VjLAorCTB4NTU0YWY5MGEsIDB4ZmE0MzBjNGYsIDB4ZjdhOTUxMjcsIDB4NTY0OTJjYjMsIDB4OWViYzgwNGYsIDB4YzMxNTk2ZGUsCisJMHg1ZjNmNmZkNywgMHgxMmM3YjcwNywgMHg0ODVmODJiZiwgMHhmMGRlZmZlZCwgMHgwZThmZDQwYywgMHhlY2FkNjMwZiwKKwkweDAzZWEyYjEzLCAweGVkZjU5Nzc4LCAweGZkMjY3MmZkLCAweDZjNTdlMjk1LCAweGRhMWNmOThmLCAweDdiZjgxNjBiLAorCTB4MTIwN2UyOTEsIDB4YWI3ZWY1ZDUsIDB4NjU5ZjQ0NWEsIDB4NmVkZjNlMzQsIDB4NzNiZTBmMTgsIDB4YzVmNzNlZWEsCisJMHhhZGYxNGJjYywgMHhjNDg2NGVjNCwgMHhmMTY5ZDYxMSwgMHgzNjZkYjJjNiwgMHhjNGFlYjhkNSwgMHg2ZDU1ZWExYSwKKwkweDlkNjFhYWM5LCAweGZjODA3ZmMxLCAweDQyNDE2YWIzLCAweGI4ZDcyOWJlLCAweDFhNTI0N2E4LCAweGRjYWY4MDA1LAorCTB4YWI3ZWE0ZTQsIDB4YzJhZWRlMDQsIDB4ZTE3YjIxZGEsIDB4YTcyYjU3NTEsIDB4OWRmMDQwZGIsIDB4OTRlYzM5YWUsCisJMHhhYzRiZGU0MCwgMHg3YzAyMDFlMCwgMHhhNzIzMmQyNSwgMHg2YWViOWVhMiwgMHg3YjQ0NGJhZCwgMHhmMzNjNGNiMCwKKwkweGY3YzIyNzkwLCAweDhkMDI0ZDNiLCAweGVlNmZjNGI3LCAweDFhYTNhZTM1LCAweDU3ZTgzMDdmLCAweDE2N2U0ZTdmLAorCTB4ZDQ4NjRlNTMsIDB4Y2VkYzRkM2IsIDB4ODBmN2VmMGUsIDB4ZjBlNWVmZDYsIDB4NDhmZGI5NTMsIDB4ZmVjZThkZTEsCisJMHhmYjZjYWE3OCwgMHgxYzkyZjY0MiwgMHg4MmYyZmZjMSwgMHg1N2YxZDI3OCwgMHg0MDFjZjI2ZSwgMHhlZGJhNWE3ZCwKKwkweDlmYTNkOTE4LCAweDBmZDk3ZDlhLCAweGY1M2Y0MjVmLCAweDQ0OTI5ZjlmLCAweDVlN2Q1MjcxLCAweDYxMjkzMDNlLAorCTB4N2M1YTA1OWMsIDB4OWVmN2Y4MTcsIDB4ZmQzZDYxMGYsIDB4NmNjZGRmZWMsIDB4MmVjN2MwMGQsIDB4NmY3ODJiNDAsCisJMHgxMzMzNWZkNiwgMHhhMTdkNDEzMywgMHg1YWQwNWI1NiwgMHhjZmRkNzE0NiwgMHgyYThlZGM0YywgMHhkMTA3MWU2MiwKKwkweGExZTUzNTgxLCAweDRjYzVkOTFkLCAweDVkNGYxMWQzLCAweGI4Yzc2ZGVjLCAweDMyOWMzYTEwLCAweDE2NjdhNGM5LAorCTB4MThlZDFhMzYsIDB4ZjUwZDdmYjAsIDB4ZjU4YzFiYzUsIDB4MTEzMzM2NjIsIDB4N2FmMTQ5ZjUsIDB4MzQwYmYzMzMsCisJMHhmN2ZiYzMzZiwgMHg3ZmUxMmE0ZCwgMHg4NTVlYWIzMSwgMHhmOWE0YWFlYiwgMHgyNjU0MGIyMywgMHgxNTdjMDJhNSwKKwkweDZmMzY3OWJmLCAweDRjNWZjNjNlLCAweGUzZDEwZmRjLCAweDM4ZTI0YjIzLCAweDdlZjFhNWZjLCAweDNmZWYwZGQ5LAorCTB4Zjc3NzFkNjksIDB4OGIwNjQ4OGQsIDB4ODljNjE1N2YsIDB4NmQ3MzBjNTgsIDB4ZmJmMWZkNjUsIDB4ODcwZmUxNmQsCisJMHhmYmFmNWY1NywgMHgzODM0NjljNSwgMHhkYjgyNmRjNCwgMHgyZjdmODExZiwgMHhlYmE2N2M2OCwgMHhkNTQ0NWJlYiwKKwkweDhkZGMxN2UwLCAweDIxYmYxMGY1LCAweGIyZTJkNDQ2LCAweGVlOTExMzIyLCAweDY3ZDVhYTVkLCAweDE0ZjdhMThhLAorCTB4YjRlZGY3YjcsIDB4ZGU4MGVhYjgsIDB4MDY3OTM3M2YsIDB4NGVjODEzODksIDB4ZWQyMTY1YzgsIDB4ZDJmMjZlN2UsCisJMHhhZGUxNGVmMywgMHg5OTViYjQ2MiwgMHgzYjQ1YzgxNCwgMHhlMjE4ZDYxNCwgMHgwN2UzNTk1MywgMHg4YjkxY2EzMSwKKwkweDgzM2I2NmYxLCAweDZmZTgxNDc1LCAweDlmYTBmODQxLCAweGRiOTJmNjU1LCAweGJiYzYyZTU4LCAweGJmYTFkZTQxLAorCTB4ODc4NTFjYzcsIDB4OTRkYmE4MDUsIDB4NTlmZDg2NTYsIDB4N2NmMThjOTIsIDB4YWY1OGQzOWIsIDB4MWQyMDdmYzIsCisJMHgzZjhhMzA0NiwgMHhjMjkwOGY0NSwgMHhhODYwMThmMCwgMHhlMzJlZWQwZiwgMHg4NGU4NTFmMywgMHgyMDFmZGQ5MSwKKwkweDhiMTA3NjNlLCAweDAyNTU2OTQzLCAweDI2Y2Y4YzIyLCAweGZlN2Q5ZDQ5LCAweDdiZmEyNjU2LCAweDJmOGE3ZTFjLAorCTB4MmFlNWZiNDAsIDB4YzVhOTVmNmYsIDB4NTA3Zjk3Y2YsIDB4MTJlZTM4MzAsIDB4M2NlYWE4ZmEsIDB4MjE0MTkwNjgsCisJMHg3ZmJlM2Q3NSwgMHg3MWZlNjI1ZSwgMHgzYTZmNDFkZiwgMHhkMTBkNTU2MSwgMHhkZTRkNzM5YiwgMHhkNDBmNDg2OSwKKwkweDAwOWYwODkzLCAweDc2MGQ3OGUzLCAweDJhMWE5YTYwLCAweGY4YzIwYmU3LCAweDg4ZTFhYWUzLCAweDVkZmQwNjY3LAorCTB4MmRkZWYyNmUsIDB4ZTM4N2Y0MjYsIDB4ZWE0ZmZiYWEsIDB4NDg4MmZmZDcsIDB4ZmVlYWJjZjMsIDB4YmZlYmY1ODcsCisJMHgxNWZmNTIzMiwgMHg5Nzc5NzliZiwgMHhmNGE5ZjgwZiwgMHg4MDNhNGY1NywgMHg1MjY3ZDk5OSwgMHhlODBiYTI1MywKKwkweGMxYjViZTVlLCAweGE5Zjk3MjgxLCAweDVkMjA3M2U0LCAweGQzOGJmMzNmLCAweDE2ZTdjOTIzLCAweGI3NGY5NzUxLAorCTB4ZmYxMWU0MjIsIDB4N2U5ZDFmMTAsIDB4ZDAzYmQxZTksIDB4ZDViNzNhYWUsIDB4NjA3YzUyYWMsIDB4MDE2MDI1OWIsCisJMHg1ZDZjYWNhNiwgMHg5YjYzZTVjMiwgMHhhZmFmMThlNSwgMHhiM2Y5MDJmZSwgMHgyZmE4Y2RhYSwgMHgzMjc4NWY0YSwKKwkweDQwY2RlMzExLCAweDBlN2ZjZDQ5LCAweGI5NTA3ZjkwLCAweDY4ODUyZmU1LCAweDVlYjE1NTc3LCAweGRmZTE3YmQyLAorCTB4ZTNlN2Y4ZTEsIDB4MmY5ODFlYzgsIDB4YWY3ZmY0YzcsIDB4Njk1NWYzZWYsIDB4N2Q2YWE5NzgsIDB4ODQ5MTBiZjQsCisJMHhjZGZjODNhNSwgMHg5YTI1ZjZmMCwgMHg2OGE0ZmZiZCwgMHhkZjM4YTc4ZiwgMHhmOTExMzY0NCwgMHhmMzA3Yzc0YywKKwkweGVlYmY3YjczLCAweDhmNzNhN2M1LCAweDViOWQzYzAxLCAweGU0MjFkZGZlLCAweGQ3MjdmMjg0LCAweDE2NWE2NzdiLAorCTB4ZTczNWZjZmUsIDB4MGRkNGYyYzAsIDB4YWVkNDMxN2EsIDB4Njc2N2Q3ZDYsIDB4ZWNhN2U2OWIsIDB4MzliOTY1ZTEsCisJMHhiMDNmNDBlMCwgMHhlNWQ5YjM3YywgMHhmY2JlYmE0MywgMHhjMTllMmZmYywgMHgxNjA3Y2NiOCwgMHhiZmU4NzBkNywKKwkweGVmODNlNWVjLCAweGIyZjUwMGRkLCAweGRiZjhlNjFkLCAweDIxMTQzNGY4LCAweDJhOTc0ODMxLCAweDZjNjJiYmY4LAorCTB4YmZhNTBlOTAsIDB4NDczYjI4M2UsIDB4OGUzZmU3ZjEsIDB4NmNhM2QyMGIsIDB4OGQ5OTNlYzcsIDB4Mjk4ZjhmZWEsCisJMHgwZWU0ZmIyZCwgMHg1YTVkMDIyNSwgMHgzZmEyMTU4ZSwgMHg1N2UyZjc1MSwgMHhjZmFmZWEzMiwgMHhlMGQ4MTc1ZSwKKwkweGRjZjgwODhjLCAweDYyZWM5MDdjLCAweDUxZDExM2M0LCAweGRkMWY1M2EzLCAweDAxNTdkYWMyLCAweGVhYmY1MDVkLAorCTB4ZmY3ZjBhNzQsIDB4YzdmZTlhMmYsIDB4YzQzOTljZmUsIDB4ODZiY2FmY2YsIDB4YjY3ZjI4ZmIsIDB4MjVmZTcwYjgsCisJMHhjMGU4M2NhZiwgMHhhYTkyOWM3OSwgMHhkYjNmNWYzOSwgMHg3MTg2ZTg5MCwgMHg0NGJlY2M0YiwgMHhiY2ZlNGE5NSwKKwkweDEyMWZiOWU0LCAweGYyM2UyZGJmLCAweDdmOGE0NGMzLCAweDg5YjI3NzMwLCAweDMyNWYwNTZjLCAweGE2ZDE2ZmNlLAorCTB4NjJiZjM0ZDksIDB4MmJiZTI1ZTYsIDB4ZTBmNDU2NzksIDB4ODk1OWUwZmUsIDB4NDExMWRmNGQsIDB4YWUyNDUyMmUsCisJMHg1YjM1NGY4ZiwgMHhhNzY1NGQ3MCwgMHg3ZGMwZTE3MCwgMHhmZjQ1Yjc4NSwgMHgyZGZmOGE1NiwgMHgwZmNhZjhhNSwKKwkweGI2MjBmZGY1LCAweGFkNjdlYThjLCAweDg4NWY0ZTljLCAweGFjMWFiZWZhLCAweGJhZmNhMTNjLCAweGQyM2I3NTY1LAorCTB4ZjcxMGY0ZTcsIDB4NTcxYjhjNjAsIDB4ZTFhN2M5MzEsIDB4ZmQwOGI4NDMsIDB4MGRhNjQ3OGEsIDB4NGU2MWY0ZTYsCisJMHgwZWZiNGYyOSwgMHg3YzE0ZmRmNCwgMHhjZGRiZWQ4ZSwgMHhlMWFlNWI2ZSwgMHgyMzMxNzYzYiwgMHg2ZDcyZmUzOCwKKwkweDBhM2I4MDdjLCAweDg5NTNkNWVkLCAweDk4NDVmZjYwLCAweGFmYTRhMTVmLCAweDg1NTc2MDM3LCAweDdjODg1N2YwLAorCTB4ZjJkZjc5NzMsIDB4NWQ2Zjk3MDgsIDB4YTYzM2ZkZGUsIDB4YmViZmZiZTMsIDB4YmYwN2U1YzMsIDB4ZTAwNTdiNDMsCisJMHhmN2E2MGMwYSwgMHhhNDA5NjZmYiwgMHgxMDJjMmMwZiwgMHg5OGI3YWU0OSwgMHhiZTM2YjkzNSwgMHhlMDA0ZjlkNywKKwkweGVkZGQ3MDk2LCAweDNmZWMxN2UzLCAweDc2NGZmMDhlLCAweGY4N2FmMTZjLCAweDU2NWY0NDJlLCAweGZlOGU3OGUxLAorCTB4YmI3MmU5ZmQsIDB4MDRmZjkzNTgsIDB4NmNmZjI4YzksIDB4ODFmYjk3MTMsIDB4OGYxZjA5ZmQsIDB4YmZmZDk4NGIsCisJMHgxNWU1MDY3OCwgMHhhZmY3MTNlNCwgMHg3YjM2NWZjYiwgMHg2ZjlmZGU3MCwgMHhiZGRlZjAzZiwgMHhiNzlmYTcyMCwKKwkweGQ0NmE3MmU4LCAweDVhNzJlMTlmLCAweDhiMDI3M2IyLCAweDYzOWZhNzI0LCAweDM5MjQ0MjFhLCAweGU1MTFlNzg1LAorCTB4M2UyMGU5NTQsIDB4NGZlOTQ3ZmUsIDB4ODUzNzdmMWQsIDB4ODdkNzRmZTEsIDB4NWMzMWUxMDMsIDB4NzQ1OWZlMWYsCisJMHhmMDg3ZDQ0NiwgMHhkNzk2MWRlNywgMHhiZTc0ZmY5ZiwgMHhmNGFkZjlkMywgMHgyOTQzMTU5NywgMHhhNWYzYTYzZSwKKwkweDdjN2Q3N2NlLCAweGJmNWRmM2E5LCAweDdmMDFhMzc4LCAweDE4MmRlZmUxLCAweDNjYjgwMTgzLCAweDQ3MTRjZGJiLAorCTB4ZjdjM2RmMjgsIDB4NDNiYmUxN2YsIDB4NGYwOWUzYTksIDB4NThjNjVhNmUsIDB4ZjhkNGExZDMsIDB4YWMzZmJhZDAsCisJMHhkZWQ2MTJkZSwgMHg4NGY3NTYxZCwgMHhkNTg2ZjdiNSwgMHhjYmVkMGRhYiwgMHgzY2M4MGVkYiwgMHg2ODYwMjVhZiwKKwkweDg2NzhhZTI3LCAweDEyMjgzMjdkLCAweDVmYjlmYWJmLCAweGVjODVmYWRhLCAweDdhNTBiZTQzLCAweDRhZjM3YmU5LAorCTB4M2M2M2IzZTYsIDB4ZjE0OGFmN2MsIDB4ZjFjMDFlOTEsIDB4NjdhNzE4MmEsIDB4ZjMxZjg2N2IsIDB4M2M2YzFhMjQsCisJMHhmNmEzZDRlZSwgMHg2YzVlZDAzYSwgMHhkZWY1ZTU4OCwgMHhlYTE1NzkwNCwgMHhhZjc5ZmQzZCwgMHg3YWY1Yzc4ZCwKKwkweGQ4OGViZDNjLCAweGQ4ZWRmYjEwLCAweDc2ZjQ5MTFlLCAweDhmNGQ5Zjg3LCAweDhhYzI2N2U0LCAweGMxZDQ3MjQyLAorCTB4ZTNjZjdhMDYsIDB4MjU0NGQzZmQsIDB4NWZjNjA1N2QsIDB4ODYxNzQ0OWEsIDB4ZWY2YThhNzQsIDB4NDE5ZTYwNzEsCisJMHgzYmFjOWVjZiwgMHg0NWYzYzBlNywgMHg4ZGI0OGE2ZiwgMHg3Yjc2ODNkOCwgMHgyZGM3OTIwYywgMHg3N2Y4ODcyNSwKKwkweDUzZGYzMjlmLCAweGJmN2UzMTkzLCAweDQ1NzlmYjg3LCAweDExZWNjMzZiLCAweGE5Zjg5NmI2LCAweGEzMmU1OTU4LAorCTB4ZWNiZjA1M2UsIDB4ODJmZjcxYjgsIDB4ZDZhOTQ1Y2IsIDB4ZTMyNmM5NWYsIDB4ZGM3YmZkN2IsIDB4YmRmYjQ1YzEsCisJMHhiZGYxOGI3NCwgMHgzNDA3OGI1NywgMHg4NjMyNzJlYiwgMHg3MWZjZDE4ZCwgMHhmNGQyOGYxZSwgMHhlNzMxMzRmMiwKKwkweDhmNDAzOWNlLCAweGMzMjJjMzllLCAweDdiMzNmYmZkLCAweDk5YzdhMjQ0LCAweDllYmY3Y2VkLCAweDIzZDdmNmUyLAorCTB4M2U5MmY3N2YsIDB4ODlkNGYxZDQsIDB4YWMwZjI0ZjIsIDB4ZmQ1ZjNhYWYsIDB4OTE4N2JjYWYsIDB4OTg3ZDc2NmYsCisJMHgzYjI4MzNmYiwgMHhmZDkwN2Q3NywgMHhlNmZmYWM1YiwgMHg1OTBmZjRmZCwgMHg1ZTUzZjZmZiwgMHg0OTNlZDFiNywKKwkweGUyNzZlYmNmLCAweDdmYmQ5ZWY3LCAweGViMTg3ZjRjLCAweDlmMTQyZGJiLCAweGFiZmQ3OWVlLCAweDllOWZlNDVjLAorCTB4ZDQxMjk2OTUsIDB4ODA0MzNkNzcsIDB4ZWMxZjY4ZmUsIDB4ODNiNzJhZmQsIDB4YTI3YWQ3ZDYsIDB4OTkyNTFmZGIsCisJMHhmZTdiNDdkYiwgMHg4ZjEwYjFmNiwgMHhlZDBhY2MyNSwgMHg0OWEzZDc4NiwgMHhiMzVlYWE5ZSwgMHg2N2FkM2M1MSwKKwkweGExNzk1N2VmLCAweDlkNzdmZjc2LCAweDdmYjZhNTRmLCAweDczNjc2M2Q5LCAweGIxN2MyMjc2LCAweGVhYTdkZjdjLAorCTB4NWYzZmQ3YjcsIDB4YWQxN2Y5OGIsIDB4ZjA4NWU0ZmIsIDB4YmVlZmNhN2UsIDB4ZGEzZDQ1YzksIDB4NDNkYjkzYjMsCisJMHhlNzhlZTZkZCwgMHg2OGVlN2Y3MCwgMHg2Njk1ZGNmZCwgMHgwYTM3NzNjMCwgMHg5YmFjMGE1NSwgMHhhMDE0Y2YwZCwKKwkweGNiYzdmNGRjLCAweGJjMjcxNDM3LCAweGZjZjQ3YzUyLCAweGMxMGY4MzVmLCAweGRkOWRmNWNkLCAweGRlNzAxNTZmLAorCTB4MjFmYzdmNWYsIDB4MmRkNzg1ZWEsIDB4N2NmYTk3YzQsIDB4MjVhOTZmM2YsIDB4ZjM3MmU1N2IsIDB4OWM3OTk4NzYsCisJMHg3OTlkZmZlNCwgMHg5OTJiODEwYiwgMHgzZmYzMjhmNywgMHgyZDdmYmQzNywgMHhlMTJlODkzOSwgMHhjZjlmZDA3MiwKKwkweGY1NDQzZWY3LCAweDgyMmVlZDk3LCAweGZkZjkwYWY3LCAweGY5ZjI3ZmY2LCAweGVmYmE2YjdmLCAweDJlM2JiYTA0LAorCTB4N2ZmMmVmM2YsIDB4NGMwZjc5ZjIsIDB4ZDdlZjM3ZjcsIDB4N2U2MmFlZTgsIDB4YmVlZmQ1NGIsIDB4YWRiZWY4MjEsCisJMHg0ZmZiNWI5ZSwgMHhjZDAzZWYyZSwgMHhkN2ViYjc1ZiwgMHg5OTRkNWM5OCwgMHhhZjQzOWYxOCwgMHhjNTY5ZDYwMSwKKwkweGMzMTFiMzNlLCAweGNjNDY2Yjg1LCAweDE0Y2VkMTU0LCAweGY1MmJmNmMzLCAweGZiOTlhZjcyLCAweDViZWUyMjRkLAorCTB4MDg2ZjljNjIsIDB4Y2QzMWYzOGYsIDB4M2QyZGEyOGYsIDB4OGE1MjVhMTgsIDB4OTQ5NThlYzksIDB4OTZiZWRjNTUsCisJMHhjMDZlZWQ1YywgMHgxNzZiOWFjYiwgMHg4ODc3MjhiOCwgMHhjNWVhM2Q4ZCwgMHgxNzY0ZGE3YSwgMHhmY2MzYWZjNSwKKwkweGI5ODE3YWM5LCAweGE1NmZiMDA1LCAweDhjMzk2ZjZiLCAweDg0Nzk4ZGZlLCAweGE1Yzk2MDI5LCAweGFiOTYxOGYyLAorCTB4NTlhNGI4YjUsIDB4OGY3ZTBkOTUsIDB4ZGJhYzYzOTIsIDB4NDViYWM2OWMsIDB4MzhjYWNmZWIsIDB4ZTYyNGQ2ZmMsCisJMHgzOGI0ZjhjNywgMHg3OThhYmY3MiwgMHg4OTE4ZTI2ZCwgMHhiMWI3NTAwOSwgMHgxN2ZhMWYyNiwgMHhmN2UzMjQ5NiwKKwkweDFlYzAzMTFiLCAweDVhYmRjZjEyLCAweGUxZjZmNjNjLCAweDFiYmI2YzcxLCAweDQ0ZDIzOGYxLCAweDJlNGE2YjcxLAorCTB4ZmNiOGJjMjUsIDB4OGQ5ZTc4NmIsIDB4NTVkNzg4ZDUsIDB4MDk0Zjg4ZWQsIDB4N2Y2ZTVmZmQsIDB4MzRjY2RmOTEsCisJMHhiYWQyNTk3ZiwgMHhkYzk4NDY5MCwgMHhjZDNiNjMzNiwgMHg5ZDJjYmU0ZiwgMHhjYmQyNWQzOCwgMHgzMzJkM2EzNSwKKwkweDQzYTc0NWQwLCAweGU4MThmYTA0LCAweGRiZjllM2EyLCAweDJlOWMyN2QyLCAweDZmZGZmOGUxLCAweDA3ZmUxMjc2LAorCTB4OTc0ZTk3YTIsIDB4NTBjZGM1MzQsIDB4YmY5YWNkNWUsIDB4NDlmZDE1MzAsIDB4MTg3OWE3YWMsIDB4ZmU2YjMzZWQsCisJMHg2NmVmMTQ4MiwgMHhlYTkzYTQzZSwgMHhmNDJmNDg2MiwgMHhiN2UwMDJkYiwgMHhmM2ZiN2VmZCwgMHg3YWVhMjcxNCwKKwkweDA4MWRkOGU5LCAweDQ1NmZkOTRmLCAweDc1ZmMwNTY2LCAweDAwYjNiNzZmLCAweDY1ZjkyZjdlLCAweDViNGI0M2Y0LAorCTB4MzNmYjhhNDUsIDB4NTc3NzkwMjksIDB4NmVhZmJlYzgsIDB4Y2FmZDk3ZjcsIDB4ZGQyOWYzNGUsIDB4MDZkZmYxNjksCisJMHhmYWVlOTdkZiwgMHhiMGVjOTcyNCwgMHhkN2U0YmQ5NSwgMHgzODEyNWVmOCwgMHhiOTFkN2RkZCwgMHgyYTViYWZiOCwKKwkweDljMjNmZjcxLCAweDllNjU2MjVmLCAweDNiYjlkMDI3LCAweDZkYzYwZTdhLCAweGRmM2M2ZDg0LCAweDFlZTViNGI2LAorCTB4N2Y5MGM1YjMsIDB4OTFkYmQ2NjYsIDB4MjhiZGYwNWUsIDB4YzIxM2JlNTAsIDB4YTllNzlhMTcsIDB4MmY5ZDFkZmIsCisJMHgzNmJlMWMwYSwgMHg3NmYzMWZiMywgMHhlOGVkYjc0YiwgMHhlOTUzZjhjNiwgMHhjMzBiOGI1MSwgMHhiZWRiNTVkMiwKKwkweDI5OGRmZGEwLCAweGQxZDk3YWJmLCAweDY4YjZmZTQxLCAweGYzZjQzZjg4LCAweGM0ODliN2ZiLCAweDE1YWQ5NTFmLAorCTB4OWQ0MDg3ZTQsIDB4MjViMmEyZjgsIDB4NzJlYmZjNzIsIDB4YWZkOTY5ZmUsIDB4MDFmMmVlZjYsIDB4ZmQ3ZWNiMGEsCisJMHg1YmUzMDM4MiwgMHgzYWI3ZGJhNywgMHg3NmRmZmZjOCwgMHgzZjViYjhlOSwgMHg5MWU1YmYzZiwgMHhhN2Y5ZmE0YiwKKwkweGJmZTAxZmYxLCAweGM1ODcyMGRjLCAweDIyMGRiNjQ5LCAweGNiZTAwNDdmLCAweGFkZWY5NDhiLCAweGNiZDk1YmYzLAorCTB4MzhjMzlmNjcsIDB4Y2ZjZWU3NzQsIDB4Y2I3ODQzOWYsIDB4ZTdjYmZiZmYsIDB4YWY2MDlmZDAsIDB4ODhhZGQ0ZGIsCisJMHhhNWRlOTc5NywgMHhkZGZlOWUzOCwgMHg5ZGM3OTkyYywgMHg4MTdjNWZiYiwgMHgxZmRkOWZlMiwgMHg3ZjAxZGY4MCwKKwkweDRhOWVmN2JhLCAweDdiYjI3ZjQ3LCAweDE4ODlkN2M3LCAweDc3YmU1OTJmLCAweGVmOWM2MGRhLCAweDBjYTc1N2YyLAorCTB4ODhmNDExNjYsIDB4ZmFkZjIyNWUsIDB4MWFmZTIwYWYsIDB4YWQwM2FmNGUsIDB4ZTllZmM4MDcsIDB4ZGZhMzdhMDIsCisJMHg2OWI3MTdkOSwgMHgzMDcxZTBhOSwgMHhkOWFmMTZhNywgMHhkZGNlMzkxZSwgMHg3YWQzM2UyZiwgMHg4ZDM3OWRkNywKKwkweDcyZWNkMmM3LCAweGQzODgyYmIyLCAweDFjNzQwM2JjLCAweGRiZjQwNTdkLCAweDdmZTY4OGZlLCAweDE3NWZhNjQ2LAorCTB4YjRlODAzZmUsIDB4Njc3ZThjMmMsIDB4ZmNmZDE3NWIsIDB4M2FkNzdjMTksIDB4NGQzOGMwNjgsIDB4YTZmMDBhZTAsCisJMHgyN2JmZDFjNywgMHhhMzIyN2ZiYiwgMHgyNWZjZWQ3YywgMHg2ZTkwYzVjNSwgMHhiYjQ0YzFiNywgMHg4ZTliM2U1ZiwKKwkweDlhOWYwZmZiLCAweGU3ZTdlZjdiLCAweGM2MmEyYzMyLCAweGJlZjc0YTFiLCAweGZkZDNmMjRmLCAweDUzOGExMWVhLAorCTB4ZGQ5ZTJkMzMsIDB4ZjBmZWZhY2QsIDB4NTM5NmEzZjgsIDB4Y2VjNWI1NTksIDB4ZmUxYTNiZTMsIDB4NzRlM2ZlMzEsCisJMHhjZTJkNzNkMCwgMHg4ZjU4ZjljMywgMHhmNzE0MGNmZiwgMHhkZTc5OTU2OSwgMHhhZmRmMWU4OCwgMHgxNmExZjJkOCwKKwkweDRiZDIwOTRmLCAweDNhNzQ4NDk4LCAweDA4ZmRjOTc2LCAweGUyMmEwZjFkLCAweDFjNjg2MjYxLCAweGFkN2M3MjMzLAorCTB4ZDFhZGRlMmYsIDB4ZjE4N2U5MGIsIDB4MjUzOGJlY2IsIDB4NmUzMGQzZDQsIDB4NjdkZTE3ZTUsIDB4Zjc0MWY0MTEsCisJMHhlY2ZmMWU2NiwgMHhhM2NlNDczNiwgMHhiZjlhZTNkMiwgMHhmZjUzOTcwYSwgMHgyZjMzYzU5NSwgMHhjNWI3ZmYwNywKKwkweDUyNzY1ZjhmLCAweGVhNzhlMWJmLCAweDhmNTkxMGJjLCAweDc1ZjMyZGJmLCAweGM1ZjdhYWZmLCAweGJlNDMwNWNhLAorCTB4N2JjOWI5NDEsIDB4YTJiMWY5MDQsIDB4Y2ZjYzk4ZjUsIDB4NTJmM2YwYTUsIDB4YjUzYjdjZmEsIDB4OTdjZWQxYmMsCisJMHhhZDc3OGE0NCwgMHg3YTQwMzk2YSwgMHhlODVmNWMzYywgMHhmMGUxYTZmYiwgMHhhZGUwZDA5ZSwgMHg0NGViZTM2YywKKwkweDVmYmI0ZWU3LCAweGY3M2E3ZTgxLCAweGFlN2UyNmVmLCAweGUyOGM3ZWRjLCAweGZkYjY4NzZkLCAweDU5MDhlZTVhLAorCTB4ZjA5ZDcxNTcsIDB4ZjlkZmMwODcsIDB4MWU1Y2JlY2EsIDB4ZWM3OWU1YjcsIDB4ZDE5Y2UzZTEsIDB4OWVkNTYxZjQsCisJMHg2ZDU0ZTNjOCwgMHg0ZTMwYzJmZiwgMHhlNjQ1YWY5OSwgMHhjN2E1ZmRlYiwgMHhlZmI5MmQzYiwgMHhiNzRlZmVjMSwKKwkweDc5ZTYxOTliLCAweGE3MTE2ZTllLCAweGY1MTczYTQ3LCAweGVhNmViNmFlLCAweGJkNzA3ZWU3LCAweDIzZmQ3Y2E0LAorCTB4ZjhjYzVjZmMsIDB4MWYyOGEzYjcsIDB4ZTk5MWY5N2UsIDB4NjNjNGM2MWYsIDB4ZmU4Nzg0MDksIDB4OWYzOTZiNWEsCisJMHg5ZGM0ZmViNiwgMHgzZDZlZjQ4YSwgMHhlYjg4YWY3MiwgMHg2ZmM0MmVkNCwgMHhmNzlmOWQ4OCwgMHgzYjE0ZjU0ZSwKKwkweDhmYmM4NWU4LCAweDVkOTFlMzNjLCAweGM0Y2RmNWMzLCAweGZjMDMyNmEzLCAweDVjNjBjZTMwLCAweDFmYTFlYTA3LAorCTB4Zjk4MmE3M2MsIDB4ZTg4ZjA4NmUsIDB4ZjA4ZTljMjgsIDB4YjU0OWFhODgsIDB4NjFlN2ZkMDksIDB4NWU3NDNjNTYsCisJMHhhY2Q3ZWY0MCwgMHhiMDAzY2YxYSwgMHhkODljZTMwYiwgMHgxZTRjZDI0ZiwgMHg4YmJlNGM0NywgMHgzY2ZkM2U5NywKKwkweGJmOTQ3MTRlLCAweGEwNTllNjBlLCAweGYwMmNkMzc4LCAweDdkN2Q5MjdkLCAweGU3ODY0MWM2LCAweGRlNTEyNmJmLAorCTB4NzhjNTk2NzYsIDB4NTU0YmFjNmUsIDB4ZGZkMDI2N2MsIDB4NTk2Y2U0Y2YsIDB4Zjk0OWQ5MzcsIDB4NDI1OGQ3MDcsCisJMHgyMDU4MGZmMywgMHg2ZjUxZjkxNywgMHg1ODdkZWZkNywgMHg3ZTFhNDI3ZSwgMHgxYTg4ZmQwMiwgMHg3ZTVhNTk3YywKKwkweDIxZDYxMGMyLCAweGM5YmQ3ZGEwLCAweDBlMjdjZmNlLCAweGY4NGRlMjU1LCAweGJkOWFmM2ZkLCAweGVjM2Y5ZmE5LAorCTB4ZWMzMTVlNzcsIDB4Y2VlNWUyOWMsIDB4Yzk0ZmM2MjcsIDB4MDVkNDNhNWYsIDB4Y2Y3YWI0ZmMsIDB4OGY1ZmNjMTQsCisJMHg0NzdmMjdiZiwgMHgxMjc5OGFhYSwgMHhlNzgyOWU3ZiwgMHhjODVmZTI1NywgMHhmNTBjOTMxZiwgMHg5YzFmYWIxMywKKwkweGM4ZmZmNTRhLCAweGY1MGU5MzFmLCAweDhkZmYxYTZmLCAweGNhMDRjYmQ3LCAweDNkNTgyZDU3LCAweGViZjIyYTdhLAorCTB4MmNmOWNiNTUsIDB4Y2U1MTg4YzAsIDB4NzViYzQwZWYsIDB4N2JiYTNlNzksIDB4MWZmMzEzOTEsIDB4NWY4ZTY1N2EsCisJMHg0Mzc2YzFlNiwgMHhhNWJjNzEyNiwgMHg0MGVkMWYyOSwgMHg3NTM1MGQzYywgMHhmZTdmMjJkNCwgMHhiMTU3ZWY3YywKKwkweDRjOWMxN2E4LCAweGFjYThmYzI1LCAweGMxZmE0NTVlLCAweDJmMTc0OWEzLCAweDllMTc0NzkxLCAweDkzZWJhNjRmLAorCTB4MDFmNzhhY2QsIDB4Zjk5MWUzODQsIDB4ZTA1Y2U4MjMsIDB4YWQzMzI1MzMsIDB4OThjZjVmM2MsIDB4NzhkNGMwYzcsCisJMHg0NjkxNjdhMiwgMHgxYWQzODQ0ZiwgMHg1OGJmOGY5MiwgMHg1Y2ZjYzlmNCwgMHhhZmE2OTM0YywgMHg5ZTM4YWFhNiwKKwkweDJmMTcyYmUwLCAweGUxZWRmNzVlLCAweDRiZTc1MDdhLCAweGM4Njk1Y2VkLCAweDEwODdjNjc5LCAweDdkZTI5ZjVlLAorCTB4ZmZkMDkyYzgsIDB4MTYxZGUzM2MsIDB4OWY3YzBhY2YsIDB4MWQzZTdjNWMsIDB4OWYzZjViZjksIDB4OTFjZTdlMTgsCisJMHg0OGE2YmQ0OSwgMHg3NmIzNWZmNiwgMHg3ODIwNzFjZSwgMHgyYWVmNTYzZCwgMHg3N2YzMzcxYywgMHg0MTg3OWRjZSwKKwkweGM5MTc0NmJlLCAweDFjY2Q0YzJlLCAweDgyN2M2MmJkLCAweDUyMTVjZmM0LCAweDQ2OTU0MzllLCAweDk3MTMyNGJmLAorCTB4YTMxMGY2NDMsIDB4OGIxZWQ2N2QsIDB4YjliZjQ2ZTAsIDB4ZjQ5NTQxZTcsIDB4NmRkMTVhNzcsIDB4NDRmNTU3ZTQsCisJMHgzZTYwYjQ2NywgMHhmY2MzY2Y1MCwgMHg0YzY2Mjk1YywgMHhkOTBkMWNhMywgMHhiZjQwMTMxMywgMHg1Y2UwZTQwZiwKKwkweDMzOWMxYzk4LCAweDcxYzY3M2FlLCAweGRiM2EyZTdiLCAweDU1M2ZhODNhLCAweGIwMGMwZmViLCAweGUwYjllMGM0LAorCTB4ZTVlYjkxMWUsIDB4YzEyNzFhOWUsIDB4ZjZmOTg0MzEsIDB4YTU3ZWZhZTEsIDB4MThiNTZkZTMsIDB4ZGUwMmZkY2YsCisJMHhlOGJjNDA1ZiwgMHhjMGU1ZmY3OCwgMHhhMzQ1N2JmNCwgMHhlODkxMmJkZiwgMHg3NGZlN2UxNywgMHg2YmZiYzViZSwKKwkweGY4YWE3ZjZjLCAweDE1NzQyYWQwLCAweDg2OWRjZmMzLCAweDZhNGFiNWQzLCAweDc4YWU4OGRhLCAweDY4MmY5ZWUyLAorCTB4MzZlOWQxOWQsIDB4NDEyYjg1N2EsIDB4ZTNhMDY0MWEsIDB4ZThlZmQ4ZWIsIDB4MTA5ODVmM2QsIDB4NGY3ZTlkNWUsCisJMHhmZGVmOTAwZiwgMHhjZjVmMGIwNywgMHg5YzRiYzdjMiwgMHg4ZGUyOTFkMywgMHgxMDYwZmViNCwgMHhjZjU4MjEyZSwKKwkweGY4ZDFlNmI1LCAweGRlM2M0ZDgzLCAweDEwYmRiZmQzLCAweDdmZDAzZTcxLCAweDMwZjJhNWU2LCAweDJmZGU1NTczLAorCTB4NTBmZGZmZTAsIDB4ZjExMGZmYmUsIDB4ZmUyMjIyM2YsIDB4MDNiYzQ2M2YsIDB4ZjZjNjNmZmUsIDB4NGZmZjgwNTcsCisJMHhkZDdmODUyZSwgMHhmNGQzMmZhZSwgMHgyYmVlMTk0MiwgMHhjNWZjZmYwMSwgMHgxMzMxMzMzOSwgMHgxNTE0MmRjNiwKKwkweDViMjVmZmUyLCAweGQyMWY2ZDQ1LCAweDYyNzI1YjdkLCAweGI5MmM4ZjUwLCAweDE5OWY3YWJlLCAweGIzYzk3MGY4LAorCTB4OTE2OWYxMDIsIDB4NzNmZDVlNzYsIDB4Nzg0YjVjZWQsIDB4MWNmMTVmNWUsIDB4Y2JjOWU5MWYsIDB4NDlmOWY3ZTcsCisJMHgzMzZkOTUwZiwgMHhlNDEwYmYzZSwgMHhjN2NhNzRkYiwgMHg5M2YzZjFmNSwgMHhlMTE3MjZhMiwgMHg2OGEzM2ZmOCwKKwkweGQ2MjhhMmZhLCAweDBlOWMyZWQwLCAweDg2NGRhYTQzLCAweDI5ZTRmMDNjLCAweDlmOTBmZDdkLCAweGJlNzI2NDk3LAorCTB4M2ZiNWYxNGYsIDB4MDdjNjE5OTgsIDB4ZjhmYzUyZGMsIDB4YmM2M2UyMDAsIDB4Y2RmYjE1MzAsIDB4ZWY1NmU0ZDcsCisJMHhlMzBhZTg2ZiwgMHgzM2UxOWYzYSwgMHg2YWNiZmI5ZSwgMHgxYmZiOWUzNCwgMHg2ODYyOTRkZSwgMHg0Yzg2Y2Q3ZiwKKwkweGZlOTFmYmMzLCAweGFmZWYwZDZiLCAweDUwZDYzNmRiLCAweDgzNzJkNTFmLCAweGI2ZThmZGExLCAweDRjN2Q0MzAyLAorCTB4ZmI0MzE2ZTAsIDB4MWE2Nzg3NzEsIDB4ZWZkYTEzZWEsIDB4Nzg5ZmI0MzUsIDB4ZmRlMTgxNzQsIDB4ODZhNTFkZjUsCisJMHhiYTdlMzdmNywgMHhhOWJmNTBjYywgMHhlZDBkNWZmNywgMHg1ZWI4OGIwMywgMHg5NDkzNWZkYywgMHg3NDBhZTc4NiwKKwkweDJhNWZlY2JjLCAweGJlN2M1NDliLCAweGU2YTRkYjM0LCAweDc0NGYzZTg2LCAweGNjYjE3MzNiLCAweDM1N2ZhMzczLAorCTB4YjE0Y2JjOTAsIDB4YWU4NWE3MjYsIDB4NmNjY2Y5Y2YsIDB4YWM1MzZiZDAsIDB4NTU4MTdhYzYsIDB4ZTA3NDk3ZTMsCisJMHhjZGZlMjAxNywgMHhhNTVjYTM1NiwgMHgwMjZiY2Y1NiwgMHgyY2E1OWJiMywgMHhkMmY5NDYxOSwgMHg1OGI3NWYyMCwKKwkweGM1YmI3ZWI5LCAweGVkZmE2NTdhLCAweGFhN2Y2YzRlLCAweGVjZTc0MDMyLCAweDQ0NGJlNWMzLCAweGQyYTJjYWY5LAorCTB4Y2NhOWZiNDcsIDB4MWI5NmY5NDUsIDB4NGQzZTQ2NmQsIDB4Y2NhZjQwMWEsIDB4YzNjZjFhYjMsIDB4OWI2MWVhOGIsCisJMHhmZDEzOTA2NCwgMHhkMGE4ZjlmOSwgMHhkYmUyYzJlNywgMHhhMDY3NmYyOCwgMHgwNWE0ZTU3ZSwgMHg3ZDAxNmViNywKKwkweGE5N2IyNzI5LCAweDlhYWY5ZmQ0LCAweDk3OTg4YTYzLCAweDNiZjU5MGY3LCAweGZhMWI0OWZhLCAweDIxMGY0ZmQ5LAorCTB4ZGU5MmJiN2UsIDB4Y2NmMzBhN2UsIDB4OTJmNWU3MmEsIDB4MzE2Yzk0YmYsIDB4Nzc1ODI1ZTIsIDB4NTQ3OWU2MGQsCisJMHg1MDhlN2U0ZSwgMHg1NGRjZmZlNSwgMHhhZTJiNzhkMywgMHgxNzNjZmFmNywgMHgxMTMzMzA3ZCwgMHgwNmQyMDNmMywKKwkweGQ1NWU5ZmYwLCAweDRkNWNmMWU2LCAweGMzNDVhZGM5LCAweDE0ZDUzZmIwLCAweDdhNDViZjdhLCAweGZkMTBhYWEwLAorCTB4MWU1YWExOTgsIDB4YzhhNjUzZjQsIDB4ZDUzZjRhZjksIDB4MGE4YzE5ZmEsIDB4NTUwM2VkMTQsIDB4YWJhMGZiMjEsCisJMHgwNDg3MjNmOCwgMHg5Mzc3ZjhmMywgMHgxN2M4YTdmNywgMHhlN2I3NDYwYiwgMHg2ZWNiNzNmMSwgMHhhYmIyNGNkNywKKwkweGQ3NWY4MjU0LCAweGU3OGFlOTQzLCAweGU5MmJkNDI5LCAweDY2NzMxMjQ5LCAweGYwNjc4N2Y0LCAweDA2NjM2ZjNjLAorCTB4MzM4ZmFmYmMsIDB4ZjdhYTE0YjksIDB4ZTU5ZTM4MGEsIDB4ODIwZDhjYzcsIDB4NWJmZmVhZjEsIDB4ZjdlYWY4MjQsCisJMHgzY2Y5NGY1ZiwgMHhlMjlhYTUxNiwgMHg5OTNjZmFhNywgMHhjN2FmZGZiNiwgMHhjZDI2Y2Y4YiwgMHhkNjNjNDE4YSwKKwkweDZlNzdkYjVmLCAweGFjZmQ2MTg3LCAweDdlYzc2ZGUyLCAweGQzMzdhZWNmLCAweDgyMDVmNWI4LCAweDZmM2ViZGUxLAorCTB4NzQxZGMzNjksIDB4ZTE1ZDJiMWUsIDB4Nzk4NjJlZjMsIDB4MzQ5NmRjMjMsIDB4NzNmZDU3MGUsIDB4YjgyMzRiMDIsCisJMHg0M2QyZjdmZSwgMHg4YWVjYmZlOCwgMHgwZGJjNjE3NiwgMHhlODg5YjFmMCwgMHg2NzM4Y2VlZCwgMHhmMzBmMjdkMiwKKwkweDM0YTQxOGFhLCAweDI1ZmIyMWFmLCAweDk2ZmExZmIyLCAweDRjZGJhZjk1LCAweGY2ODg5NTlkLCAweDQ2MzVmMjU0LAorCTB4NjZmNWM1YjgsIDB4YzUxNzA3ZjIsIDB4ZTBhZjk0MmEsIDB4ZDFhMTU5YWYsIDB4NTVlZjM4ZDUsIDB4OWNlZjMzNDksCisJMHhiZGQ0ZjAwYiwgMHhmZDRjMzIyMywgMHgyZDM0NzY3MSwgMHgxNWRmMDQzZCwgMHhmY2JiNDZiNywgMHhlZjc4ZmVjZSwKKwkweDAxMzg3MjcyLCAweDZlMTBiN2VlLCAweGNkMjE0MzcxLCAweGRjMjFkYTliLCAweDMzZDgxNzNmLCAweGRlNzdjODE5LAorCTB4MTRmZjQ0ZTksIDB4OTc3ZGMzMTMsIDB4ZDNmZmY4NzAsIDB4ZWZjNGUzY2EsIDB4ODc5YTU1NTgsIDB4ZWI3YzU0OWMsCisJMHgxNjU4NDE5NiwgMHhiNTFkZGM5MSwgMHg3ZmNlYjgwZSwgMHhmY2ViZTU2OCwgMHhlYjA4ZDY4NywgMHhmZGVlZTVmYywKKwkweDdlZDM5ZjI4LCAweDZkZDE0YjA4LCAweGVhZGFlY2QyLCAweDE5N2I1MGVjLCAweGVjNDlkNmY0LCAweDMxOGJhZjU3LAorCTB4N2VjNWNlM2YsIDB4M2NjYmI2MDcsIDB4OTcxOWQ5NGQsIDB4MWVkMGNiYjcsIDB4ZWRkM2ZlNDMsIDB4OGQ1YWJmYjEsCisJMHg5ZTg4NjQ3NiwgMHhiM2QzNGFmZCwgMHg5ZWExNWQ1ZiwgMHg0ZWVkODBiZCwgMHg2ODg4MWJkZCwgMHg5MWM4MjRjNywKKwkweDFiMzhkY2Y1LCAweDJhOTU3ZmM3LCAweDFiZTNjYTMzLCAweDZkOWY5ZTIwLCAweDBlMWY2YzhiLCAweGNlNWQwZWI0LAorCTB4ZDY4Y2M4Y2YsIDB4ZWZkNzU0ZjksIDB4YzU2MGRmZGMsIDB4OWMyZmVkMzIsIDB4MjQ3ZmUwZDksIDB4ZTMyOWY3MWIsCisJMHhlZGRlNTE4NywgMHhhZWE0ZmQ0MCwgMHhmMTBkODNmOCwgMHg4ODZkZTNhYiwgMHhjMDRmODhjZCwgMHhmOWM2ZDNhMywKKwkweDY0OGI2OWM0LCAweDFlMDM5NjBmLCAweDBlM2MwNjRkLCAweGQ5MDNmNmM3LCAweGRmYWQ1NzgzLCAweDZlZTc4YzRiLAorCTB4ODM3YzM1YmEsIDB4YmM3MTk3OWUsIDB4Y2UzZWJiYWUsIDB4ZTU0NWI4YzMsIDB4ZTdhNDczZWMsIDB4Mzk5YzdhYWYsCisJMHhmNzQ0NzVjNiwgMHgwMTFjNjFiZiwgMHhkNzdkZGZlNywgMHhiNzcxNmI3ZiwgMHhkNTE3OGEwZSwgMHgwYzRkN2FiZCwKKwkweDBhMmFhN2M2LCAweDk1ODZmNGZhLCAweGE0OTk4NWRiLCAweDU5NzZiYjA3LCAweDU3NjcwOGRjLCAweGVjZTdjZjFjLAorCTB4MTBmMTM1ZGEsIDB4YWYzZTM5YzYsIDB4ODUyOTljMzksIDB4YWY1ZDJkZDgsIDB4NDMzM2M5MWMsIDB4OGYzYjVkN2YsCisJMHgyMDk0NDllNCwgMHhkMTdlMjdlNywgMHhmYzVjNTdkZiwgMHgxMjhmM2NjZiwgMHhjN2QwMjczYywgMHgwZWJlNTY2ZiwKKwkweGY4ZjFiN2FkLCAweGM3OThkM2M5LCAweGY3YjE5YTM2LCAweGZhZjk2M2EzLCAweDFjN2E2ODkxLCAweGUzYmY0NzlmLAorCTB4N2Y3ZWExZjMsIDB4YzdlNTcwNTQsIDB4ZGQyNjJiMDAsIDB4YWI2NjRjNTUsIDB4MDBhNjhkZTUsIDB4NmUwYThmOTYsCisJMHhiZTU1ZTMxMSwgMHg0ZDNjZmM5MSwgMHg5MTFiMTY1MiwgMHg0NzI4ZmQwMSwgMHg4ZTA4MDNkYiwgMHg4ZGQ3YTNhMywKKwkweGE3ZWEyOWRiLCAweDBiMmMzZWVhLCAweGM0MDJlZjE0LCAweDJiYWY1YzdiLCAweDM3ZmM3ZDA5LCAweGExYjM4ZDg3LAorCTB4ZTE0ZDIxNWYsIDB4N2U3N2I3N2EsIDB4MjllZjFmOTQsIDB4OGZiOTM0NGEsIDB4Njc2N2FhODAsIDB4YzU4YzJmMGUsCisJMHhlNjhiN2ZmNywgMHhkMjU4ZjJmMiwgMHg4ZTVjMjY4OSwgMHgzOGEwMzk3MCwgMHg1YTY2OWJkNCwgMHg3MTBkOTZkZiwKKwkweGVmODIyZjI3LCAweGU3ODg0ZDk3LCAweDk4MDVlOTdlLCAweDk2MzljODdkLCAweDA5NjdlM2M3LCAweDAwYjkwNzE0LAorCTB4MTRlNzgxNzgsIDB4YjUzZTAyZmEsIDB4MzMxN2NjNGIsIDB4ODliMGY0MTYsIDB4MGJmMDU1YjksIDB4ZWU0MjkzZWMsCisJMHg2OGZmYzFkOSwgMHg0ZDYwZmM3NiwgMHg0ZDM4ZjZmZiwgMHg0NWUwMzMzZSwgMHhkNWRiMTk3NiwgMHg1YzBjZWUwOSwKKwkweGZjODE3NzRmLCAweGI0ZmEwMzBkLCAweDdjYTk1OGQ1LCAweDE4NGQ0NmFkLCAweGE3YjhmMjA2LCAweGFmZWE4OTI2LAorCTB4MGNhOTM4ZDcsIDB4ZTdhMDhjZDQsIDB4NTQ1YzZiZmIsIDB4YTdiNTM2OGYsIDB4NTUyYzdhZDMsIDB4ZmU4NzliYWYsCisJMHgwYjEyZmRmNSwgMHhiYzIzYjdiZCwgMHg4ZTU2N2JjNCwgMHg5N2Y5Yzg4NywgMHgwMDkzZTYyZSwgMHgzZDM1MmZhZSwKKwkweDM4ZDZmYjUyLCAweGM2YTdhZmUyLCAweGZkMzFkNDAwLCAweDhhZDlmZmJmLCAweDA1NGQ2NDNmLCAweGEzZmE5ODNkLAorCTB4NDE1MzU5YzMsIDB4NzgxMjlmOGUsIDB4MTgxZTAyZmUsIDB4NTUyZTc0OGUsIDB4YjczMjlmMmYsIDB4ZjBhOWEyYzQsCisJMHg0ZGYzMWI2YiwgMHhjOGJjYzI0ZCwgMHg4ZTE1M2ZkZSwgMHhlOGY2Y2M2MSwgMHgxZDRlYTY5ZiwgMHhmZGM3ZjMwOSwKKwkweGY2YzYxNGZlLCAweGM3YWJkZWRhLCAweGZiYTlkODczLCAweDgxOGJhYjNmLCAweGZjNmRjOGY5LCAweDgyODk5ZjNlLAorCTB4N2Q0MDU2YTcsIDB4MGJmMzliMzMsIDB4OThiNTNjOTMsIDB4Mzc3M2Q5Y2YsIDB4YmVmZWUyNzMsIDB4MWI1ZWNlM2UsCisJMHhkYjc2MTNiNywgMHg1MTM5OWRiOCwgMHhlNmMxZmNlMCwgMHg0MTFlNWFjYSwgMHhiYWU4NmU2ZiwgMHhlZjNlZGUxMSwKKwkweDhmNzRkN2MwLCAweDJmYjc4YzBmLCAweDJmNWUzMGQ1LCAweGZhMDcxMWM1LCAweGQ3ZmY3NTJlLCAweGU5NWM4ZWI0LAorCTB4NDkxZjNkNzcsIDB4YzQ4NDdjZmMsIDB4ZTZiYTJiZjMsIDB4ZmRhNjZlMjYsIDB4YmExZjY4NzgsIDB4NDcyM2RhOGYsCisJMHhkMmRlZDdiNiwgMHhlZDA2ODFkNiwgMHg2NTlmYjdiZSwgMHhhNjgzNzJmMCwgMHhmNWM2MjQ1NywgMHgwNWQxNmJmZiwKKwkweDYxYjk0N2JmLCAweDVmZGEzOGRlLCAweDA5ZTJkM2FhLCAweGU1N2EzYTkzLCAweDJmN2U3NmY5LCAweDEzZDQzZTVjLAorCTB4M2MwNDc4NGUsIDB4ZDFhNWQ3MGYsIDB4MWU2MDU1MzMsIDB4NjA0OGZmY2MsIDB4MjgwMjg0MzMsIDB4ZGJjZjM2ZGQsCisJMHhjMmQyNGZkOCwgMHhkMTk3YmU0ZCwgMHg3MTY1ZDg1ZSwgMHhlM2EzZDlhMiwgMHhkOTAzZWVhYiwgMHg2MTIxZmE4YSwKKwkweDhmZGEzMWNmLCAweDY0M2ExM2FhLCAweDhmOTdmN2E0LCAweGNiNzE0ZDdjLCAweDMyNzU3MzNhLCAweDFiMTc2ZGQ1LAorCTB4YmRiNGZlYjAsIDB4OTlkNjIzN2EsIDB4NmZhOWViZWYsIDB4ZDYwYzNmMDAsIDB4MTNlM2UxY2UsIDB4OTBiYjYzZDQsCisJMHgzYjU4MjllOCwgMHg3ZTA2ZWY1NywgMHhmNWU2NjVkOCwgMHg0YjM5MWYyZiwgMHg1Y2NiYjFmYywgMHhlMThkOWYzZCwKKwkweGVmOTg3YWY1LCAweGFhNmY1OGFlLCAweDUyOTA1NDA5LCAweGUxZmQ2NWZiLCAweGI3YWViMDliLCAweDc3ZGE5MmZmLAorCTB4M2Y2ZTU0ZGIsIDB4YTQwY2RlMmEsIDB4ODU1ZDVmN2YsIDB4MmVhNDNkYmEsIDB4ZjJiMzNhZjEsIDB4YzU1ZjlmNTIsCisJMHg3ZjI5YWY4MSwgMHhlNzBmNzJiOCwgMHhjZTFiYzQ0NywgMHhjM2NkZWYxMywgMHg3YThjZTk3NSwgMHhhNGViNTFkNCwKKwkweGQ3MzY3M2I4LCAweDlmMDMwMWQ3LCAweGI3NTNlN2U5LCAweDJhMmNiYzk4LCAweDA4NWVjZjQ0LCAweGNlNDJmZjViLAorCTB4ODRhOGIxZDksIDB4MzhiNGZlOTAsIDB4YmIwMzNhNzYsIDB4NmYxODJiMzQsIDB4MmEyZTY0Y2QsIDB4OTUwZjMxODcsCisJMHhlZTk2ZGJkOSwgMHhiYjJkYjQ0NywgMHg3YTg5ZDVhZiwgMHhmYWQ3M2UyYiwgMHg2OGU4OTc4MCwgMHhkMDllMWZmNCwKKwkweGU4ZmFlMmY0LCAweDAxYTMxYmZjLCAweDc3ODJmNTllLCAweGYxN2E4ODhkLCAweGU3NGFiMzY1LCAweGIyMjQzYTJmLAorCTB4MzViNTNiMzcsIDB4NTMzMGFkOGMsIDB4ZjczYjVjYmQsIDB4NWRlOTVlNmQsIDB4ZWVmNTEyMzMsIDB4MTlhYjkzMjIsCisJMHg0ZjBjYjNkNywgMHgyZmJlMTliZSwgMHhhYWUxOWRkYiwgMHhlN2JjYzE2NSwgMHhjNDk2ZDhiMiwgMHhlZjMwNGFiMSwKKwkweGFhM2ZhZjU5LCAweGI1NDZkOWYxLCAweGQyZjc4NmM5LCAweDk1NDNmYmU4LCAweDcxZDJlYjZkLCAweDdkYjNmYjdmLAorCTB4YmQzYzkwMWYsIDB4N2M0MTk1MWYsIDB4NDQ3YWQxNWMsIDB4YmY2OWRhZjYsIDB4MjlmM2M2NGMsIDB4ZDZmYWQ5OWYsCisJMHhiZWY3NWEzZiwgMHgwYjc0MTk2YywgMHhlYjJmZjVlYSwgMHg3OWI4NzQ0ZCwgMHgwNmY0M2QyMCwgMHgzODM3M2ZlOCwKKwkweGFjNmE4N2M4LCAweDVkYzJmZTU0LCAweGRlOWEyZDdkLCAweGQzMjk1MTA1LCAweGJmYjQ2MDZjLCAweDkxNTZlOTkwLAorCTB4YjlhZGU2OGYsIDB4N2MwYWMxYTYsIDB4OGVhYzgyZjQsIDB4MTc5YjNlNDQsIDB4NWI3YzRiOTUsIDB4YmU3MjJiMTYsCisJMHhkZDA3Yjk2NCwgMHgwZGNmYjY5MiwgMHg2NTM1ZDRmNSwgMHgzYzUzYmVkMywgMHg2ZjY4YzhiZSwgMHg4ODUyNmQ1NCwKKwkweGM4MGVjMDBmLCAweGRjYTgzZTQ3LCAweDdlZTFmMjYwLCAweDRlZGFjOWEyLCAweDQ1ZTc3ZGU3LCAweDM2OGZjZDMxLAorCTB4YWY1YzRmOWUsIDB4NmNkZjNiZTksIDB4ZGNiZGRmMWUsIDB4ZjM5MmM1MzksIDB4NTExZTc0NTEsIDB4ZTUxZmJmYWYsCisJMHg5MTI4YmUyNCwgMHg1NWZmYjQ3YywgMHhlNzQxZGU3MiwgMHgzOGZiYmYxOCwgMHhjODc5YzM1NiwgMHgwNDI4ZTNmZSwKKwkweDc5NGUzZTg3LCAweDU3ZDIxYzcwLCAweDI3ZWMxZmU1LCAweDZiOGRmODNmLCAweDRkZDY3Yjc1LCAweDNiZTVhYzcxLAorCTB4OWIwNWZjYjQsIDB4ZjNmNjMwN2IsIDB4MTgyN2E2YjQsIDB4Nzc4MGIxZmEsIDB4ZWVhZmEzMjksIDB4MWNjZjQwOTMsCisJMHhmOTMzZDNlYywgMHg5MGQzNTMwZCwgMHg2Y2Y3YzFiZSwgMHhiOTBmNDE5MiwgMHhjMWQzYTAyNSwgMHhmYmVlYWQyOCwKKwkweDUxZjZlNDdlLCAweGY1MzNlZDYxLCAweGE5ODZjY2ZhLCAweGYzYzNmYjkzLCAweGI3NTgyZGI0LCAweDFiZTk3YjQyLAorCTB4ZTExZDVmNGIsIDB4YTFmNTczYTMsIDB4ZTNlOWM1ZmQsIDB4ZTlmZDRiZGYsIDB4YjUxYTk3ZmMsIDB4ZjgwZmEwZjAsCisJMHgyN2FjNjBlZiwgMHg3YTdjZjMxZiwgMHhjYTI3MzM2NywgMHg4ZDQ5NjZlMSwgMHgyMWQwODU3MiwgMHgzN2FmOGEzNSwKKwkweDM1YWZlNzI1LCAweGY3ODgzZmUwLCAweDRmZmQwMzVjLCAweGZiMGQzOGQ1LCAweDk2OGI4YjhhLCAweDU0OTg3OWQxLAorCTB4YzdjYzVlOWQsIDB4Y2E2ZDc3Y2YsIDB4ZmUyN2VjMzIsIDB4MTZhZTM4N2YsIDB4NzAwMGY3MGUsIDB4YzMwN2ZkNGMsCisJMHg1ZTMwYzIzMSwgMHgwMzFjOGUxMCwgMHg4NzBiNTc3YywgMHg3YTZiM2IxOCwgMHg4ZjZiZGEwNiwgMHgyODBmMjg5OCwKKwkweDY2YjNlNGQxLCAweDZmZjY1ZGEyLCAweDBjYTc4YTI2LCAweDg4MGYzYzY3LCAweGZiMGRlMzI5LCAweDJjN2I5OWI0LAorCTB4OWVmZTMxZjMsIDB4ZDJjM2IxMjksIDB4YjcyNzk0NTgsIDB4YTlkNzE2YjMsIDB4NWY2NDQ4OWYsIDB4MzlhYjczYzEsCisJMHg3MjZlODcwZSwgMHgyMDRmZmRlMywgMHg2NjVmZDQ5NSwgMHgxZjgyYjdiOSwgMHg4MmZiZTZmMiwgMHg3MGQzM2VmYSwKKwkweGJkZTNlNTk1LCAweGU3YTM5YmEwLCAweGZiOGQxOGRmLCAweGFhMWU3MzY2LCAweGU3OTgzY2MyLCAweDM1MmZmMTk1LAorCTB4OTJiYzgzMzAsIDB4MmMyMGQyMWQsIDB4YWJlMzNiMjUsIDB4NzAxYjg3YTgsIDB4MTQ3MDc2YmYsIDB4ZjYwNDViYjcsCisJMHhlNGUxYzM3MCwgMHhiY2I5ZWY0OCwgMHhmMGYzNWI5ZSwgMHgzNDFiOGMzNCwgMHg4YjVlNzRhZiwgMHhjZGIzNTNmZSwKKwkweGYzMWZiMmRmLCAweGU4NTMxZTc2LCAweDQ3YWNkNmRlLCAweDUwOTk4ZGZkLCAweDY4OTlkNzE3LCAweGZkNjMxNGJkLAorCTB4ZGY3MTlhZGIsIDB4MTc2Y2M5ZmQsIDB4NjhjZDExZGEsIDB4NDdmYjYwYmYsIDB4NTY2YmYyMTQsIDB4ZjBkMzM4ZDUsCisJMHg2ZDNhOTI3ZSwgMHg3NmIyZDgxZCwgMHhjMTc5OGFiMiwgMHg4NzE0OGFmNSwgMHg3MzJhZGRlYiwgMHg3NzNjNWNmNSwKKwkweDhkZDFlZTMxLCAweDUxZWJkNjBkLCAweDA3MWFiOThmLCAweDk0OWViY2E5LCAweDMzOWFlYjhjLCAweDdiNDYzYWQzLAorCTB4YWU2OGM4MGYsIDB4YjFhOGE2NzUsIDB4NmZmMGZhYzEsIDB4M2QyMGZhYzAsIDB4OWRjMWIxYjMsIDB4MmIyZWZkODYsCisJMHg4ODNiZmFkNSwgMHhlMjE3OGE3MSwgMHhlZjY4YmMzNCwgMHhkMmY0ZmIzMywgMHhjYmNjMDZjNiwgMHhmNTgzNmIxMiwKKwkweGFkZGYzMGE5LCAweDM1M2Q3MmNmLCAweGZiNDdmYTE4LCAweGMzZTNlNjBiLCAweDg3N2IwNTdiLCAweGNhNGU3NDRiLAorCTB4NjAzYjYzMDYsIDB4OTk5MWI2N2UsIDB4MGNkN2RmYjQsIDB4MmJlZjExN2EsIDB4ZGZjOTFkZWUsIDB4ZjIzNGZiZWIsCisJMHhkM2VkMTM3MCwgMHg2ZjVjN2I2MCwgMHhiZGJjYzk2YywgMHg1N2RmODMzYywgMHg4YTE1ZGIyMCwgMHgzMDdhYzAzNywKKwkweDE0OWVmMzE1LCAweGYzNzFmZmE2LCAweDhmYjZhNGI4LCAweDAxZjc4NTExLCAweDc1YTNmMDg0LCAweGY3M2EzMmVkLAorCTB4ZGM2NjFkNjksIDB4OGNkMzk3OWYsIDB4MTY3OTg5NzUsIDB4YWEyN2JmYTAsIDB4NDYzN2U3YzYsIDB4ODM0MWY5NmIsCisJMHg2ZGRhMGE1OCwgMHgxMzNlNGRjMywgMHhmY2M5MWJiNiwgMHgwMmM3NWU1NCwgMHg2MjhkOGY2NCwgMHg4ZDFmNTQxZCwKKwkweDFlMTY2MzVlLCAweDQxZDI3MjViLCAweDJkY2M3MWFiLCAweDQ3YWEzOGYyLCAweDcxMzEzYjQ0LCAweGYyNDcxZWFlLAorCTB4NzRiZTQxNGUsIDB4NjE3NjZiNDcsIDB4N2UzZmVmMGEsIDB4ZjdjYTJjYzYsIDB4Y2RlZjY5ZjUsIDB4MzEzZDg2MzMsCisJMHg3ZWI1ZTYwZCwgMHg1MGNlZGRjNiwgMHgyZjVmNGVmYiwgMHg0OGFkZmI3NSwgMHg2OGNiZjk4MywgMHhhMGJkYTIyMSwKKwkweDM2NDU3NWRiLCAweGU1OTg0ZjVlLCAweGM2MTQ3YTdlLCAweDI2Y2RkYjExLCAweDU4YWQ5ZmJjLCAweDZmMTY2MzhiLAorCTB4YmI0NDRmYzgsIDB4NWNkZjY4YWMsIDB4NDRkNzg3YjIsIDB4ZDE2Y2JiNzMsIDB4NzdiMjE5ZmEsIDB4OWFmNzllMTQsCisJMHhmZTdmNzY0ZiwgMHgxODMxMDliYSwgMHhiOWIwNmZhNywgMHhmZTQ3YWU2MiwgMHhkZmJmMjNmZCwgMHhiMWVkNGFmNSwKKwkweDBhNmJjNGU2LCAweGMxOWIxZTUwLCAweDhmZmJjNmFmLCAweGNhZGQ5YTBlLCAweDc1OGJlNDE4LCAweDZjY2VjOGMzLAorCTB4YzdkNmYyOGUsIDB4ZmZjZGJmNDIsIDB4NDFkNTc0ZWEsIDB4ZjczNjY3ZmQsIDB4NGUzODIzZjgsIDB4OGY3ZjE0NDMsCisJMHg2ZjIxMjZmNywgMHgzZmY3ZWRmNiwgMHgxZThjNWMyZiwgMHhmZGYwZmM3OCwgMHg5MWIxODNmZSwgMHg0M2JkZjFlZiwKKwkweGZlZDA1ZmMzLCAweGQ5ZGQ5MGYwLCAweGRjYzRmNjYwLCAweGNiYmRmMDg3LCAweGVhZDY3OWU3LCAweDExMmY1MTg5LAorCTB4ODZiNGZiNjcsIDB4ZDY3NjAzZTcsIDB4ZTY0MDU4YjgsIDB4YmQ2MmQxZjcsIDB4ZGQzZjY4YTQsIDB4MjJkMjVjYWYsCisJMHgwOTdjZGM1MCwgMHgzYTNkMjI2YiwgMHhlZWQ1ODk0YywgMHhjNWU2MzFhNywgMHg0ZGJkMTY5NiwgMHg3OTViNGJlZCwKKwkweDQyZDYzMmZiLCAweGUxN2E3NWVkLCAweDgzMDFiNWJkLCAweGYwY2UzYTFkLCAweGRjZDExZGZkLCAweDc4YWNkZDZmLAorCTB4ZmZmYjQzMWYsIDB4YzRkOTE5OTEsIDB4MTE2N2MwNGYsIDB4MDdlMjJkZjMsIDB4MzFiOTc3ZDgsIDB4MzcxZmFmOWEsCisJMHhmNmM4ZGI2MiwgMHhiODYzZjEyOCwgMHhlMDVjYjg3ZCwgMHhjMjA3YjNlNywgMHg5Mzc5ZDU1MywgMHhkZTBhM2Q2MSwKKwkweDdhZDMyMTlmLCAweDQ5ZjlhZGQ0LCAweGViN2M5Mzg3LCAweDdmZjk4NDZmLCAweDI0NGFmNTlmLCAweDIzYmRkYWE3LAorCTB4NDI1ZjgyNzUsIDB4MzNiZWZhZjksIDB4MmQxYmRlZWMsIDB4YTZiYTY4MGYsIDB4Y2I0M2ZlMjUsIDB4NmIzZWY5ZWYsCisJMHhmZDBkYzM3OSwgMHhmNDAyY2VkYywgMHg5ZWVkNjFkZCwgMHg0OGE0MTQxMiwgMHhhZmQwMTk3OSwgMHgzYWRjMWY0MSwKKwkweGRkYmY1OGMyLCAweDM5ZGZhYzY1LCAweDdkM2RmMjI5LCAweGI0ZDQ2YjZiLCAweGQ2YWE3YmQwLCAweGYzOGU3MDBlLAorCTB4NTc1ZThkMmQsIDB4MGIxMmRmN2YsIDB4MGI3YmViY2YsIDB4Zjk4MTVlZTksIDB4YzE3ZmI0OTQsIDB4MWIxNGZhZjMsCisJMHhkOTFlYTBmMywgMHhmYjQ2Y2ZiZiwgMHhiYzhhNTUyMSwgMHg1NTE2NDMxOSwgMHhiZGUyZWZlMCwgMHg5ZjlkOGFmMCwKKwkweDE3ZmY0MDM3LCAweDk5OGEwNWUzLCAweDk3ZGUwZmI3LCAweDEyNTFmN2M0LCAweDNjNWE0OTNjLCAweDYzMzQ5NWMzLAorCTB4MWI4N2I3ZDQsIDB4MGJjYTJhZmQsIDB4ZGM0NmQ4OTYsIDB4MjdlNjBkNzcsIDB4ZThlZGVmMWEsIDB4MGYzOGZlOGEsCisJMHhjZjk4NjNmZCwgMHhlODRmOGM2YywgMHgzZTdkNWE3MSwgMHgyYzdmMjhmZiwgMHgzOWNmYmI1YSwgMHgzNDZiNmU5YywKKwkweGEzMGJhOGY5LCAweDM5ZDIzZDczLCAweGI5NzNkZjA3LCAweDg3YmI1MmY5LCAweDQzYzEyOWZmLCAweDI2ODk2ODc5LAorCTB4YjNhYzE3MWUsIDB4OWM1MjhlYjksIDB4ZWEwZmYzNDQsIDB4ZjMwNmI4YjQsIDB4NTZlZjVkN2QsIDB4MTA5NWVjYzIsCisJMHhlZDdkMjJmZiwgMHgzOWY1ZjVkNywgMHgzOGYzNzdlNCwgMHgxNTZhMmQ4OCwgMHgzNjBkYzNhZSwgMHhmYWE2NmViZCwKKwkweDAwYTZlNmQzLCAweDVhYWZmZGY5LCAweDgzMWYxODljLCAweDY3MThkZGVmLCAweDQxMWRjZGYzLCAweDA2NWQ1ZDdlLAorCTB4MGU3YmMxNGIsIDB4YjRjYmIwZGUsIDB4NmFiZGQ2ZmUsIDB4ZDhmNWM2NjksIDB4ZGI3NmYzNmQsIDB4YmE0OWYyNDIsCisJMHhmOWQxZWZlYywgMHhmOWZkMDhhNiwgMHhmOTBkZmQwYywgMHhmOGMxZmQ3NiwgMHhmZDc3ODhhZCwgMHhhN2Y2MWJmZCwKKwkweGNlZmYyMjAyLCAweDY5MWJmOTQ5LCAweGExN2IxZmVkLCAweDQyY2JiODllLCAweGY3ZmQ0ZjcxLCAweGU3Y2ZjYTBmLAorCTB4N2E4Y2ZkZDEsIDB4NGUxNDEzN2YsIDB4ZDUxYWNlODcsIDB4OGU1ZDhmOTAsIDB4ZTUwNzM3N2EsIDB4NjdmNDlkYTAsCisJMHg4MzIwY2I0NSwgMHg2OWY1ZDRkZSwgMHg2ODFiZjljNSwgMHg1NzQ4MmNiZiwgMHhiNTIxMmUyZCwgMHgzOGFhNWU5MywKKwkweGJjNjhiZmZmLCAweDM0OWU5MDNiLCAweGY3ZTkxMjRlLCAweDM1NDljNzgxLCAweDM4ZTBlM2U4LCAweGY3NzAwYzkzLAorCTB4YzEzMjY3MWYsIDB4ZGFjMzhmYTEsIDB4OWZlNzBjYTIsIDB4YWUzY2NjZWIsIDB4MzM5ODY2NzIsIDB4MWU4MjM2MjYsCisJMHg4MzcxNGJkMSwgMHg2MGZmNzBjOSwgMHg2MmIyZTQ5ZCwgMHg0ZWNhNzVmZiwgMHgyODdmMzQzNSwgMHhlZjAwNWY3YywKKwkweGYwMjE2NGM1LCAweDg2N2FjMWQ1LCAweGYzMGI3MmMxLCAweDNkNDA1ZTUyLCAweDA3MjIxM2Y2LCAweDYyYTVkOWEyLAorCTB4ZjhjMjYyYmYsIDB4YzYyZWY5ZTksIDB4YmRiOTQ1ZmUsIDB4MzM3MjdkMTAsIDB4OGJkODJkZjIsIDB4N2UzYjU4M2YsCisJMHg0OWVjMGY5NSwgMHg0NzY5ZWNjOSwgMHg5Mzc2NGFiYSwgMHg2YjY4ZjMxMywgMHg0NWM1MTMxNSwgMHg2NGFjOTJlYiwKKwkweGNhMTJhZGZmLCAweGJkNzM5NDU1LCAweDIyNDNhOTVmLCAweDhmN2RmNDM4LCAweDlmMjllNjgxLCAweGMzM2NkMDc3LAorCTB4OWZmYjNiZWYsIDB4NzZhMTRmMWIsIDB4M2I1N2VlZmQsIDB4MGY5M2Q3MzAsIDB4OTM1NDViZmQsIDB4NGU1ZDQ1MGIsCisJMHgyMTI3ZDg1MywgMHg0N2VmMGZmNCwgMHhlYzQ1MjBkYSwgMHg4ZTlkYmMyNywgMHg2Y2U5MDFmZiwgMHgzZDIwNzBlZSwKKwkweDg4YTVlM2JhLCAweDk1MWIxMDc5LCAweDMxMDc5OGVmLCAweDI3MWY0YzJmLCAweGUwMGVjZDFjLCAweDIzODc0MmY3LAorCTB4ZTVmNDgzMjMsIDB4YTVmNTA1NDYsIDB4ZGM5ZmNjZmQsIDB4YjRjYmQyNGUsIDB4N2ZhZmFkZWYsIDB4NTZhOTg0ZTYsCisJMHhiYzZjNGY5ZSwgMHhmZTIwNmY1NywgMHg3ZDYyZjFkMywgMHhmM2M2NDFmMywgMHg3Zjk0YmQ1MywgMHg0ODNjMzk3MiwKKwkweGZiNDNjYjgyLCAweGUyMjk3NjAwLCAweDQyNTgzNmJlLCAweDQ5MzhmYzg2LCAweDM1NGZlNjMxLCAweDYzZTIxZTQ4LAorCTB4NTZkNTRkZjMsIDB4NWI0OTI3ZGEsIDB4OTI3ZGM1NjksIDB4MDYzMzkyZDUsIDB4MzdkZWQ4ZmQsIDB4Zjk4M2ZlYzEsCisJMHhiZTc5M2EzNSwgMHg2YmZmNzg2YSwgMHhiNDY2MWVmMCwgMHhjNDUzMTU3MywgMHgwNmEzNzlmYiwgMHgzNGJhYWZiMCwKKwkweDc3ZDlhY2ZhLCAweGY1MDFmZTY5LCAweDM3NzVjMWUxLCAweDcxNTI0ZTJhLCAweDM5OWIzNWRkLCAweDRiYWQwM2JjLAorCTB4ZTEwM2JmN2EsIDB4ZmM3ZGQxZWIsIDB4MzkyYzFiZjcsIDB4ZmZhZTNmNTYsIDB4NGEzNWUzZTEsIDB4YmMzZTRmMWUsCisJMHg3MDc4MDQ2ZiwgMHhjZDMxYWNkZiwgMHg1NDZkZjg0ZCwgMHhkNWZkMTUyNSwgMHhjYzUxMTFlOCwgMHg2NTZmZWExYSwKKwkweDY3ZjdhMmNjLCAweGNjZjFlM2UyLCAweDhmOGM2YjIyLCAweGUzYTM5NzljLCAweDFkZjJiNzY5LCAweDE4NmYxZGVkLAorCTB4OGY3ZjBlNWYsIDB4N2MyMWU4ZTIsIDB4ZTg0Y2E5ZDksIDB4OTFiYjk3Y2YsIDB4ZmMzODEzMTcsIDB4NWFhNmY3YTEsCisJMHhiYzQ1ODYzMywgMHg3ZjFmYjI3ZiwgMHhkZTRkZjE4NiwgMHhmN2U3NDY2NCwgMHgxOWI5NDMwNiwgMHhlZWQ1NmVmYSwKKwkweGI1YzBhYTQzLCAweGYyZjRmYzBiLCAweGMyYTYxNDdiLCAweGU0NzdlNmZhLCAweGM5Mzk0MDVmLCAweGNmY2ZkZjZiLAorCTB4ZjAyNmI0ZDEsIDB4ZWZiNTFlN2IsIDB4NjI1ZGM3YzMsIDB4MTJjOGZlZTcsIDB4Y2M2NTRhYmIsIDB4ZjEyZmY3NTEsCisJMHhkYjVhMzdmNywgMHg1ZTc4OWNhMywgMHhiMjJlMzViMSwgMHhkNzYzOTMxZiwgMHhiNDlhNjhmMywgMHhiNDFkMDg3MywKKwkweGNmYjdhMTRmLCAweGNkZGNjNzliLCAweDFiM2RjNTBhLCAweDI1N2ZlMGFkLCAweGE5ZmZiNWY0LCAweDgyMDIzZmI2LAorCTB4ZjlkY2UzMGIsIDB4Zjk5YWViZGIsIDB4N2YzZTUxZjksIDB4ZmI2MmFiOGMsIDB4NWM4ZWM0YzQsIDB4NzQwZWZjNDEsCisJMHhmNzBjYzZkYiwgMHgzYjU4NTVkYiwgMHhlN2NlNTFiMiwgMHg3Njk5YmM5YSwgMHg2OGVhYTcxOCwgMHg1YmQ2MjI0NywKKwkweDRlOWQzZWRmLCAweGI3MWQ2ZjdlLCAweDQ3Nzc3YjM3LCAweDNmYTBkYzUzLCAweDc5Zjk2YTdkLCAweGNjMjlmM2YyLAorCTB4ZGQzZmE4MzcsIDB4YWQwMGE1Y2EsIDB4ZDNlN2U1YWIsIDB4Y2QxYzZmOTksIDB4MGI4ZDY3ZGIsIDB4YzJkM2JmYmUsCisJMHhjOGIxYTRkOCwgMHg4ODRmMWMwMCwgMHgzMGY0NDg5ZiwgMHg3YTA2NGRkYiwgMHg2NzVlM2M4MCwgMHg3ODgxZThkNywKKwkweDc2YjdhM2VhLCAweDc2YTc0YmVmLCAweGNkNzFlMGJmLCAweGY3MmE2MTVmLCAweGE1ZmJmNWQ3LCAweGU1Zjc2NzhlLAorCTB4NWI3ZGQwNWIsIDB4MTNmNzM2ZTUsIDB4M2IwYjRmNzgsIDB4ZTZiZTUyMjIsIDB4ZmVmYzI5YzIsIDB4NzcxNjg1YzQsCisJMHgwYjU3ZGEwYywgMHg2YTE0NTNmZiwgMHhmMzkzN2Y2OSwgMHg3ZjBkMjJmZCwgMHhmNzQ1Y2M5ZCwgMHhkYWQ2ZjgwZSwKKwkweDk4NGViZWY4LCAweDU0ZjE5NjdmLCAweGMyM2ZiOGZlLCAweDQ0ZGE4YmY3LCAweDMwNWYxYmNhLCAweGJmNjFmMTQ1LAorCTB4YmYwNWVkNzksIDB4ZTJmOWZkYzQsIDB4NzczYTY4YzYsIDB4YWU3YmYwYmUsIDB4MmRkNzY4OTMsIDB4YzRlNmMyN2MsCisJMHhmZTU5N2JkZiwgMHgzMjdlNjY0MSwgMHhjOWZjYmJmNCwgMHhkZjA3ZDUwYywgMHgyNGYwYWY0NSwgMHgyN2EwNWQ1OSwKKwkweDg4NTNkYjFmLCAweDMwODM0NTdlLCAweDA2MzBiZTdmLCAweDBlYzdjYWZjLCAweDk4YjhjMmFjLCAweGNmOTRjZGY0LAorCTB4ZjQ3ZjUwNmQsIDB4NjE1Njc3YjEsIDB4MThiN2U5YmMsIDB4ZjYzYjI2ZTcsIDB4NjNiNDQyZGQsIDB4ZjRkMDQyNWYsCisJMHhjMWMwM2ZmZCwgMHg1YTRkODc0YiwgMHhhOWFhYzRmZCwgMHg0ZGFmZjJhMCwgMHgyYTI5MzU2OCwgMHg1NjI3NjVmYSwKKwkweGM0ZDkzOWUxLCAweDEzMThmNzM4LCAweGZkOGVmNzhjLCAweDZmZWM0MmIzLCAweGNlYTMxM2MxLCAweGU3Zjc4MDZkLAorCTB4YmVjODE3ZWQsIDB4ZGY2OTNhMDAsIDB4MDE0ZjM3MGIsIDB4YjI3OGJiYmIsIDB4NTgyZDk3NWUsIDB4ODY2NjhmOGYsCisJMHgzMzM5YmUzOCwgMHhkOWRhM2UzOCwgMHg4YjdjN2FhZCwgMHg3MThjZGQ0NSwgMHhkNTA1ZTNmNywgMHgzZmU4MjQ1MywKKwkweGNlYWVhMWMzLCAweGM0ZDhjOTE5LCAweDFiYWFmOWY1LCAweGM0NzZjZmM2LCAweDk4ZjE4Y2RkLCAweDgzN2RiZWQ2LAorCTB4MWYxOGQ1ZjgsIDB4MDNkZTY1NmIsIDB4ZDM3Zjc4NjYsIDB4YjY2ZTQzZTMsIDB4MDdlMzYyMDIsIDB4MzBhOGM2NzksCisJMHgyOWQ2NDFmZiwgMHhmNGRmYTdhYiwgMHg0NDYzZTQxZCwgMHgwZDU5ZjNiZiwgMHg5MzkyMDRmNiwgMHhmNGQyODg0MywKKwkweGMyZGVmYzE1LCAweGUzNGVmOTNlLCAweDFmNTdkYjdjLCAweGMzY2ZjMWQxLCAweDVlMjRmNWU4LCAweDU5MTk1ZDZmLAorCTB4YzMxMmRjNWYsIDB4MmEzNWJhZjksIDB4NGQ2NmZiZjIsIDB4MDNiZTAwM2YsIDB4OGI2ZDdmMTQsIDB4MDhjZjBmZjYsCisJMHgxZjkwMGZlYSwgMHhhNzkyMjRlYiwgMHg4MDdmNWM3NSwgMHg5M2I0Y2QxYywgMHhlZmVjNDZkYywgMHhhYjZiY2FkYiwKKwkweGFiNzlhZjc2LCAweGY4YzY4ZWU0LCAweDMwYzdhZTgyLCAweGNjZTM4NjgyLCAweGZhMGQzYmI1LCAweDAxN2RhZjM5LAorCTB4MzE1MWQ3ZTksIDB4YzljNzg3MmEsIDB4YzUzMDkzZjEsIDB4YjU5ODQ3YTgsIDB4ZGY3NDNiM2QsIDB4M2NkYTc3ZmUsCisJMHhlM2QzYWUzMywgMHg3NDM5MDEzZiwgMHg4ZWY5NjlkZiwgMHg5ZjllNGJmYywgMHg3ZjM4YzcyZCwgMHg5YzFkYmQ4OCwKKwkweDY3OGE1NGM3LCAweGZhMTdlYmY0LCAweGJiZmQ2YTczLCAweDVmMDRhZTcyLCAweDE1ZjA2NWVhLCAweGRjYmFmODRmLAorCTB4MTlmZDgzM2MsIDB4ZmJmZDJmZTMsIDB4YzE3ZGI1OTMsIDB4MjIzYWUzMjYsIDB4YTRmMzg2NDcsIDB4N2Y4MDI3Y2UsCisJMHgyY2ZlODg1MywgMHg5ZWE5ZjRkNiwgMHg2YmJkZDEwNywgMHgwNjRmZTUyNCwgMHgzMWU3ZTVjNywgMHhjNGJmYmU4MSwKKwkweDgxZjI1ZGRmLCAweDk2M2Q0NTNlLCAweGM1NmZiOTI3LCAweDcxZWQ3OWY2LCAweGMwZWZkYTJhLCAweGJmMWFmNTZmLAorCTB4M2E2ZmM4NDksIDB4YWFlMzViOWQsIDB4ZWJiZTY5ZjMsIDB4ZmE0YmIyMDQsIDB4M2FkYTQxZDksIDB4ZDAyNGQ3OWEsCisJMHg5ZTBkOTllZiwgMHg4N2U3MTVlNywgMHg3YmViYTdjMCwgMHhlYjU1YmZlOCwgMHhlN2U3M2M3ZiwgMHhmOWY4ZmI2NywKKwkweGNkMWY5NDNlLCAweDBlYWU2NzlmLCAweDFjM2Q1ZmJhLCAweDczMjg4NWZlLCAweGQ1ZWIyMTA5LCAweGViOGEzNmFiLAorCTB4NWFiYjc4ZWIsIDB4ODVlZGQ3ZmUsIDB4MjVkNzAxZjIsIDB4ZjgzNzdkMDcsIDB4ODRlMWMwNjgsIDB4MWU1MThiNzYsCisJMHg3Y2I1NWY1MCwgMHhiNjY0Zjc0MiwgMHg3ZjBjODliNiwgMHg4ZGU3MDBiMiwgMHhkNzRmMjM3YSwgMHg4Nzk1YmU5MywKKwkweDViYjIyNDBhLCAweDQ5ZDk3YTgyLCAweDM3YWU4YmY2LCAweGIwNmI1NjAzLCAweDJiYjViOWZkLCAweGFmNTFlYjBiLAorCTB4YzdlY2Y3NmEsIDB4YzdjNWEwOGIsIDB4NzM0OGUxMDYsIDB4OTI3N2JiNzAsIDB4ZGRmYzQ1OTcsIDB4NWRiYjFjYjgsCisJMHg4ZjM0MjNkNywgMHhlODBhMmI4ZCwgMHg2ZDJhODU1ZSwgMHhlMWQ0OWQzZCwgMHgzNDUzNzhhMywgMHgxMDQyNzFlMiwKKwkweDdkN2FmYTFmLCAweDE1ZTNhNWE3LCAweDgxOTdiY2VkLCAweGQ4M2FmNTFmLCAweGFjYTY5NTI1LCAweDdlZjhmZjYwLAorCTB4ZTdkZjA4NjYsIDB4ODQxZjM4MzksIDB4ZWFiYmU3ZDMsIDB4MGY4M2MwMjcsIDB4MGQ0M2YwZjEsIDB4Yzc1MDA5ZWYsCisJMHgwNDk4MmQ3YiwgMHhmZGU2MTdlYiwgMHg2YjVjNTBjYywgMHg1NmUwNDIzMiwgMHgxMDRlM2ViOCwgMHg1ZDhmNWM0ZCwKKwkweDA3ZTIyZTQ2LCAweDU4ZjdlZDMxLCAweDQxY2YyNGVjLCAweGU1YmI3MDdjLCAweGU3MTY4NzAxLCAweDNmMjllZWQ1LAorCTB4YTEzOTAyNjgsIDB4Y2YzZTM2N2QsIDB4ZDRjOTVkZWUsIDB4ZGRhZDZjZWYsIDB4NmYyZjRiZGYsIDB4NzQ5NmYyZDYsCisJMHhiNWUyYjE3YiwgMHhmODQ2Y2RkNCwgMHgxY2JiN2Y3OSwgMHg0Nzc5MmYxYywgMHg4ZWQwNjNkZCwgMHg1YzUxZWUxOSwKKwkweGI1ZTQxZmU4LCAweGY5OGZkY2NmLCAweGYwN2JkOTI0LCAweDdjODIwNDA3LCAweGU1YzJkZDllLCAweGMzNGJiODE0LAorCTB4NDNkYjliY2IsIDB4ZDg3NGFkZmIsIDB4YmJmYjM5NzUsIDB4MjhmYjIzY2MsIDB4Y2JhNDU3ZTcsIDB4NWE3MjIxN2QsCisJMHhiZTM4NTBlMywgMHhjNDE2N2U2MCwgMHhhM2Q0NjRhNywgMHg4M2Y3Zjk3YSwgMHhjZjFmYjNjMywgMHgzZTAzOTUyNSwKKwkweDc4ZWI2ZDUwLCAweGJmOTk2ZDZiLCAweDdjNzI4NmQyLCAweDhlNTBiOTk0LCAweDliZTY1YmJiLCAweDMxNWQyMTQ2LAorCTB4YTIxOWNjMTEsIDB4NzlmM2Q2MWYsIDB4ZjAyODc2ZTgsIDB4ZTVmMjBiNjUsIDB4MWExMGM3M2EsIDB4Nzc1MWY4NmYsCisJMHgxZmJjMGU3NCwgMHhjNjEzNzY4ZSwgMHg3ZWVjNWI3ZCwgMHgwZWZjMjNmNCwgMHhlMjA3MmVlZiwgMHgxNGVmNTY3MywKKwkweDhjYWQ0ZmRjLCAweDg1YjVhZWFlLCAweGRmNmJlZjNjLCAweDhmODllZDA2LCAweDFmZWUyMmJkLCAweGY4YzAzZjk1LAorCTB4N2NkYWYxYmQsIDB4MDJjZmE5YTAsIDB4MjBjODU1ZTMsIDB4MGY1NDU5YTcsIDB4NjU1YWRlMjAsIDB4M2VmN2JlZGUsCisJMHg1NjExYTVmYSwgMHhmOTdiZjIyOSwgMHg5NWJlZmQ2MCwgMHg1MzZkZjNmOCwgMHhmZDE3ZDIxYywgMHhjYjkzYjQyNCwKKwkweGVlMWE0ZjQ1LCAweDE2YzFiMjdiLCAweGUwMDNhZTE3LCAweDFmYmYxMDc3LCAweDA2YzkzMWI0LCAweDRhMWVmZmZkLAorCTB4YzRkM2QzZDQsIDB4NmI4ZTc0YTUsIDB4ZmI0MDk2NWEsIDB4OGY3ZmJhNDQsIDB4YTRmZDBiN2EsIDB4NGQxN2JmM2IsCisJMHgzYzJlYzhmYywgMHhkM2UzMGMzOCwgMHg0ZTljZDEwOSwgMHhlYjU1OGZkMCwgMHgxYjFkNmFjNywgMHg0OGZmYmY5NCwKKwkweDhlZmU0OTFmLCAweDE0MWRiZWJlLCAweGUwZTdlYTA0LCAweGQ3MzVkNzRkLCAweGQ4NDFmODg1LCAweDgzZmZlYTFmLAorCTB4YTViNDhjYzIsIDB4MWY5YWZmYzgsIDB4N2M2MWY2NDcsIDB4N2I0NWRkNzAsIDB4Y2UyMWFjNjUsIDB4ZWJlMGQzZTYsCisJMHgwYTNlNDc0OCwgMHgzZWQxNDdiNSwgMHg3ZDY3YjNlZCwgMHgwY2RmNTdmMywgMHhmNGUyNzY3YSwgMHg3MTVlMDA5NiwKKwkweDZlOGFjYjVmLCAweDZmZTgxN2ZlLCAweDM2YjNkODFhLCAweDhkM2VjM2MwLCAweGY4NjYwZTJmLCAweDNkNGZkYzQ0LAorCTB4ZmJhMDVjMzgsIDB4Nzk0NTBmZGMsIDB4ZTA5NWFhNzMsIDB4NWM1YTg5MzgsIDB4MzNjYjUxMjAsIDB4ZTVlMjhjNGYsCisJMHgxZWI4NjIwZiwgMHhhZjg2M2NmYywgMHhiY2E4MzdkNywgMHgxYzg4ZTg5ZSwgMHhiZGFkOTg0NywgMHhlYjg5YTlmZiwKKwkweDkxZjkzNWY3LCAweDY4NGZkMWYzLCAweGVkYWFmNWZhLCAweGZjMjExY2RlLCAweDhlMTNlZWJlLCAweGRkN2RkYTA5LAorCTB4ZTNjNzZmOTQsIDB4ZmUzNDBiZmQsIDB4ZTg4NzNiMDYsIDB4ZjhhYmI0MTQsIDB4ODc2ZTlkN2UsIDB4NGQ5ZjZkOWUsCisJMHhmNzgyMTNmNSwgMHgyYzA0N2JiZCwgMHg5ZjkwNGYzZCwgMHhmMTQ4YWVmNCwgMHg2ZjU4ZTJhMSwgMHg1NWE1ZTYyMiwKKwkweGNiOGU0NTQ0LCAweGY0ZjBkMjBjLCAweDM4YTMwZDU5LCAweGNmZGMyOWVmLCAweGI3YmZlNmNiLCAweDFiMjVmNTg1LAorCTB4MWQ3YmE0OWUsIDB4ZTI5Zjk5NGEsIDB4MWExYjQ1YmQsIDB4YzhhZWJmNjgsIDB4ODBhNzMwMmYsIDB4Yzc4Nzk5ZmUsCisJMHg5NDNhMzU4MSwgMHg3MTBkMTE2ZSwgMHhiNTUyYzVlNywgMHhlNDEzOWIxYywgMHhhZTFkZmM1YiwgMHg5YjI1ZjdkMCwKKwkweDU3ZWExOWM2LCAweDE4MTY5NzZmLCAweDdhODIzYmYyLCAweGJmZWM5MGE3LCAweDNlNzU3ZWYwLCAweDhmNGZiNzBmLAorCTB4ZjEwZDM4ZDcsIDB4ODYxYjA1ZWUsIDB4NzhjZGYyMTcsIDB4NzMyMTdlZGUsIDB4MzYxNzdjZDEsIDB4MTFlZjE5NjYsCisJMHhiMmI4NGM2ZSwgMHgxZWMxODI3YiwgMHg1Mzg0NDVmNSwgMHgzZmE4ZmQyNiwgMHhmN2Y4MGUzZiwgMHgxN2Y3YzQ4NSwKKwkweGUwOGMzYTdjLCAweDdiYzM4YmY4LCAweDhlMDE4YzVkLCAweGM0MzNlNjY4LCAweGRmZjMyNmNmLCAweGY4ZjFiNDI5LAorCTB4ZWY4ZmYwMjMsIDB4N2U0MDc2NTIsIDB4MDdmNTc3Y2MsIDB4MWZjMDFkYWUsIDB4ZmE4N2ZkYzgsIDB4Yjk5Mzc5MDMsCisJMHgwMjRkNjVmZSwgMHg5YzRjZTBlNSwgMHg2NmNmYjQ2YSwgMHg2ZTc1ZjBjNywgMHhjMWI0NGM3NiwgMHg2NzlhMmIzZSwKKwkweDZiNTczNzZjLCAweDc3NmI1NzM3LCAweGE4NGEzOGI5LCAweGExNjQyNjVkLCAweGU5ZmRlMzNlLCAweDcxOTUxZmJmLAorCTB4ZmZjYTZkZmEsIDB4ZWRjMzEwZGMsIDB4NmVhYTlmZDcsIDB4YmJmNDBjNmYsIDB4ZDA3NzNiNTYsIDB4ZWZkYWRlNmYsCisJMHhmNzM1YWQ0YSwgMHg1ZTUyODVlNSwgMHgxZTZmZTZlMCwgMHgwOWRmYzNhYywgMHhmNjAxZGRlOSwgMHhmY2MxZTgzZiwKKwkweDdiYTBkZjY3LCAweDZlZWZmNGJhLCAweGI0MzJkMTVmLCAweGE5NTRmMDA4LCAweDhiYjk3M2M5LCAweDE1ZGNhZmNmLAorCTB4M2Y0MTg3OTAsIDB4YWUxY2U1MjksIDB4ODI3ZDk2YjQsIDB4NWE1ZGYyMTQsIDB4MjJiNzZmMDksIDB4MmZmMDZjYzYsCisJMHhmZmQ1YTI3ZiwgMHg2NTQ5YzYzNSwgMHgxODQwNDk1YSwgMHgzNjUyZWQwNiwgMHhlYzI0MTE2ZCwgMHgwYjU3N2YwZiwKKwkweDY2YTk0OWUwLCAweDkzZGZkMGZlLCAweGVkY2YxOTRhLCAweDZmYzdkYjlhLCAweDA0ZTYxNjE2LCAweDlhNjhkMGYxLAorCTB4NWM2MmEzOTEsIDB4ODVkYTMxMzUsIDB4YWE0N2NjZWIsIDB4NTBmMTBlYjcsIDB4Y2U4MDUxZmUsIDB4YThmYzRjNDksCisJMHhiZGJiNDI1ZCwgMHgyM2Q3NzU1YiwgMHg3MDc4ZWI3ZiwgMHhhZTBhNmE4YSwgMHg3MTFmZDFhMywgMHhmY2ZhOWIzOCwKKwkweDMwYmViZTYyLCAweDQ3NjZhOGY2LCAweGU5NzZlYjM3LCAweDQyZWRjNjYxLCAweDU3MTJhNzVhLCAweDNlZmMzMDhlLAorCTB4YjY5YzYyNjEsIDB4ZWYzMjI0NGUsIDB4MzdkYTg1NGUsIDB4YTMyN2EyMzIsIDB4Y2NhZTI0ZjksIDB4MmM3NmU2NmUsCisJMHgyY2I0ZjdhNywgMHgzZTdjMTZjZiwgMHhiMWM4ZjA2ZCwgMHhkNjQ3ZGY3OCwgMHhiZjg0ODBkYSwgMHgyNmRhZmUzYiwKKwkweDUxZmJjNDUzLCAweGMzZmMzNTlhLCAweGY5YzU5ZTNjLCAweDljYjhmM2U5LCAweDk5ZGJkMDVlLCAweGU4NGY4ODA3LAorCTB4M2QzZDEwZjIsIDB4ZDhjMWRmYjIsIDB4ZmYzZWY0ZTMsIDB4ZTk3YmY4ZDksIDB4OTk3YWNhZmUsIDB4Yzc0ZTRmN2UsCisJMHg2OWVhYjc3ZiwgMHhiNGE2YmM0MSwgMHgzNzA4MTY2YywgMHhkYzdhNzhkYSwgMHg1Y2EzOWYwZSwgMHhlNzhkOTcxZSwKKwkweGZiOTQwNzNhLCAweDE2ODczYjE1LCAweGJkN2RjYTg1LCAweDFjZDlmNDRjLCAweGRiYWZlNzk2LCAweGUxODg3ZmY3LAorCTB4NTg5MGVhZWIsIDB4NGJjNDNlY2YsIDB4OGEzYWRiNjUsIDB4YzJkOTJjZWYsIDB4NDA2N2Y3N2YsIDB4ZmUyMTVjZmMsCisJMHgwN2VlMTI4NCwgMHhmYmUxY2Y5NCwgMHg0YWNmZjk1ZSwgMHg3YWIyZmY0NCwgMHhlNWFjZmJmZSwgMHhiOGYwNzdkYiwKKwkweDBiOTk4ZmNlLCAweGNiNzk0M2Y1LCAweDA3MjhhMTBlLCAweDg3NzMwNzdmLCAweDlmMDQyOGIwLCAweGNhN2VlNWE5LAorCTB4YWVjNmJmODMsIDB4NWJkNzFmY2IsIDB4NzE4ZWZjZTEsIDB4MGU1M2I0NjIsIDB4ZTg3ZWI4ZDksIDB4Yjg3YzU3Y2MsCisJMHhmNjY5ZGMxZiwgMHhjZWJiNjM5NiwgMHhlNjE3NjhlNCwgMHhmZmY4ZTk3NywgMHhlOTliOGVmZCwgMHhhNzdkYjVkYywKKwkweGEzNjU4MDI1LCAweDhhYzkzOWE5LCAweGNhZDcwZWZiLCAweDZlYWJlNDJlLCAweGU5MTI3YmQ1LCAweDVhNzkyNzEzLAorCTB4NzhkOGZiZjEsIDB4YmUxNmFiYmIsIDB4NThkODVhNzUsIDB4M2M3MmI5NTUsIDB4OGZlMzBjNGMsIDB4NzJlNjNmODksCisJMHhmNDNhYTQ5MywgMHgyNGIxODZiYywgMHhlYjlkYWEzNywgMHg2N2Q3MTMyZCwgMHgxZTdjY2M4NywgMHhmNzg3MTkzYiwKKwkweGIzZWUzMTA3LCAweGUzODc4NzI0LCAweGYyOTRkYzY4LCAweGNhMWY5ZDAwLCAweDcwZDNiZDM4LCAweDVmYzgzMGNlLAorCTB4MWI3ZGJmZWUsIDB4MmMzZmZmN2UsIDB4MDAyODRiYTEsIDB4MDAwMDI4NGIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCisJMHg3ZGQ1ZmYwMCwgMHhjNTU0N2M3YiwgMHhiZGRjZjhmNSwgMHgwZGQ5MGFmYiwgMHhkYzNiZjc5YiwgMHgyNDI4MGMxMCwKKwkweDAxMDQ5ZTZjLCAweDg3ODQyNGQ5LCAweDI4MDI2ZTIwLCAweDQ3Nzk2YmM4LCAweGQyMDI2YzkyLCAweDZkZmFkMGZlLAorCTB4ZTUzMTgzMTYsIDB4MTZkNDZiNmIsIDB4ODgyZWE5NDUsIDB4ODM1YWI2OTYsIDB4YjgwZDA2YTIsIDB4NDdkNjIyMjgsCisJMHgyZDhhYTUyMywgMHgyMjIwYTVkYSwgMHhmYjFiNjQ4NCwgMHg2ZmNiNTZjMCwgMHhlYzk5OTljZSwgMHgwZjBkOWJkZSwKKwkweDdjZjlmYjZiLCAweGRjYzk4ZmUxLCAweGU2NzM5Zjc5LCAweDljZTczMzljLCAweGI1MzMxZDk5LCAweDIyOGNhOGNkLAorCTB4Mzg5YWE2YTQsIDB4ZmQyZDM0YmMsIDB4ODRlOTBlZTksIDB4ZjAwYjkwODUsIDB4ODMyMTIyNmYsIDB4ZjEyMTMyNmMsCisJMHhiZDNjYTQ4NCwgMHg1ODJjNTI0ZCwgMHgxYzVhN2ZiZSwgMHgwNTI2MjdkNiwgMHhhZWQ4NGJiZSwgMHhhMGFmOTY4NiwKKwkweDg0MjI1YmE5LCAweGEwZTQyNThjLCAweDMxY2M3ODgxLCAweDJhZThiNDg0LCAweGZkNjhkOTQ3LCAweDdiNDg4NDk2LAorCTB4NjYzYjJkMTMsIDB4NjhkYjQ1NzMsIDB4OWQ2Mzk2N2YsIDB4ZWFiNGFjMDcsIDB4YTMzZTYzOTgsIDB4ZGE0YmY2OGIsCisJMHg0MjY0YzdlOSwgMHgxMjEyMzBkZSwgMHg4YzFkZGI0MSwgMHg2ZGQzZWQ2MCwgMHg0MjIyOTA3NCwgMHgwNzg5MWIyNiwKKwkweDIzM2QxYmJmLCAweGMxZGZkYTE0LCAweGJmYjA4M2ExLCAweGE2ZWFiNzk3LCAweGMzN2I2OTdhLCAweDE5ZDhiMjIwLAorCTB4OWI3NGVmMzIsIDB4NmNhNWRiMGUsIDB4ZThlOTIxZGQsIDB4NWE0OGI4ZjcsIDB4NTEzZjMyMWUsIDB4NTk1YjAxZWYsCisJMHhjYzY3Y2MyNiwgMHg0Mzg0NGVkNCwgMHhhZTNkNTZkZCwgMHgxY2U4YzJhNywgMHhiMDU0NjZiNiwgMHg4ZmU4NjhkZSwKKwkweGU2ZWQ3YmQ2LCAweGZhN2U4YzRmLCAweGJkMmZjN2ZkLCAweGJmNTAyNDZmLCAweGMxYjQ3MjU1LCAweDM3ZGY1YmZjLAorCTB4YTlhMWM5Y2UsIDB4NDkzMmU3ZTcsIDB4NjEzYTY0MjAsIDB4ZjBiZjM2ZmYsIDB4ZGZhMTUxYmUsIDB4NzBhNmVmYTcsCisJMHg3NmVhZjVhMiwgMHhhMzJmZDJlZiwgMHhjNWE5NTc2OSwgMHgyNDI2OGQyMywgMHg4YjZiY2NmMywgMHhkZWZkMjE0OCwKKwkweDc0MTEyMjY2LCAweDU3MzZkZDZlLCAweGZiY2U4ZDkxLCAweDBlNTM1ZGNkLCAweDU4ODQ1MTQ5LCAweDIwZjkzMzlmLAorCTB4YzQyMWYwMTUsIDB4MDZiNGUxOWYsIDB4M2E1MjI1ZTcsIDB4NzIyZmNlMzAsIDB4MTBiM2ZkMmEsIDB4NTVlZjQ2YjIsCisJMHg5NWRkZjA5OSwgMHhiN2ViNDU1OSwgMHhjY2Y4MzBjNiwgMHg0MmUwY2MxZiwgMHgxNTdiZWMyYywgMHgwYjgwOTc1ZiwKKwkweDhjMGE3ZjFkLCAweGRjZTU5MTVmLCAweDI0NTRmZDAxLCAweDMyOWJkODQ2LCAweGFmZjk5ZTYxLCAweGViZGMyOTk5LAorCTB4ODIzZDkyZWMsIDB4NjcyYjhkNTYsIDB4NTc5ZDBjZjAsIDB4NzliODRlNjUsIDB4ZTJmMWMwNmQsIDB4NDRmOGQ5NjMsCisJMHg3MTgwY2ZlZiwgMHhlZmIyZjEwOSwgMHhmOTIxNjkzMiwgMHgzODczZjZjMSwgMHgxZjc3ZTliZSwgMHgzYTg2NGVmYiwKKwkweGQ3ZjM4MjczLCAweDRkODM2ZmUyLCAweGU4NjFmYWMyLCAweGEzYWMxMTZjLCAweGM3Y2Y5OGY2LCAweDBmNTNhY2U4LAorCTB4ZTY3OTk2NzQsIDB4ZDA0M2UyMzAsIDB4ZWFiNmNmY2QsIDB4ZDVmZDE1MzEsIDB4NWZkODhjZDksIDB4NzA4ZjRkOWQsCisJMHgxYTc4MGNkOSwgMHgyYzAzNTM0YywgMHhjYzFiYTY5YSwgMHhjNzg1MGY1ZSwgMHgxZjI2ZjM5YiwgMHg3ZTI5NzI5MiwKKwkweDIwZmEzMTZlLCAweGI0Yjc0MzdkLCAweDQ4ZGZjYTE2LCAweGU4YjdlMzYxLCAweGRmMjE2Yjc0LCAweDM0ODU5NzcyLAorCTB4NmUxZDVlMjEsIDB4Mzc2YmNmOTgsIDB4NmE3ZTIxNDcsIDB4MjZiZDFhZTcsIDB4OWY4ZmNmZGEsIDB4NjNkZTU4OTcsCisJMHg2N2ZhMTJmMSwgMHg3MmY2NmJhZCwgMHgyMmUyNDc2OCwgMHhmZTAyNGZlYywgMHg3MzhjMDc1YywgMHg0YWU5ZmRhYywKKwkweDUxYmY2ZTc5LCAweGI3YTdkZmExLCAweGYwMjdmZGIxLCAweGU4YzZkYjUwLCAweDAxMDdlYzRiLCAweGJkM2MyMGQ3LAorCTB4ZjAyNGZkYWEsIDB4OGRiMDdmMzEsIDB4MTdhNTA1ZDEsIDB4Y2VjZDc3ODAsIDB4MzM0OWRiMDgsIDB4MDEwMmViMWIsCisJMHhlNTU2OGNmYSwgMHg2ZDkzZGJlYiwgMHhmMzA0NDcyNywgMHhkMDA3ZjAzNSwgMHg4MTYyMGVjMSwgMHg3OWYyZDY3OSwKKwkweGVlYjlkM2NlLCAweDY3NTVmZDgzLCAweDUwMzQxZmY2LCAweDBkMWYxNmQ0LCAweDg4MWY3ZWUwLCAweGZmZDY2YjdlLAorCTB4MDE2NGZiM2EsIDB4MGU5M2FiMjEsIDB4YWRmNjJhNjEsIDB4N2Y3YWE4NjEsIDB4NmY3OGU1NmYsIDB4N2JiNjk0ODIsCisJMHg0ZDRkZDM4MiwgMHhjYmVlMWI2MSwgMHhiODBkOTM5YSwgMHgxOTUzMmQ5ZiwgMHgyMzFjYjM1ZiwgMHgxMzNjNTA4ZSwKKwkweGRlYmU0M2YyLCAweDQ1N2RiMTdiLCAweDk5NjRkYjY0LCAweDcxZTJiZGMyLCAweGZhNDRkNmM5LCAweGFiYTQ0ZmNmLAorCTB4YTM2Y2UyMjQsIDB4ZjViNjdkZmQsIDB4MDAyNWE4ZjUsIDB4YzgyZWFmZGYsIDB4MzdhZTk4YTQsIDB4Mzc3N2FkODIsCisJMHgzYjVkM2JlNywgMHhkZTkxYzAyOSwgMHhjYzI0OGMxYiwgMHgzZmI3MmY3YSwgMHgwMTIyM2JlMiwgMHhlYzM4NmIzYywKKwkweDFmMmU5ZWJiLCAweDE3YTUyOWZiLCAweGY2YzFjZWNmLCAweGNmOTJlOGFiLCAweGY2ZWIzZDNlLCAweGJiYmNlOTRmLAorCTB4Y2JiNDRjNzYsIDB4NGU0ZDM2NDAsIDB4N2M0MDlmYTQsIDB4YTUzYjdkODQsIDB4NGM5OTM4OWYsIDB4MzdkZTI4OTUsCisJMHgzNTFlYmRiNCwgMHhmY2ZiYjY4ZSwgMHg4MWYzYTM5NywgMHhmN2NkYmY2ZiwgMHhlNWU3OTlmZCwgMHhiYjk3MDBmNSwKKwkweDc1ZWNmNjdlLCAweDk1ZTM1ZTUwLCAweGNlMzA0ZDYyLCAweDk1ZmZjN2NlLCAweGRlYTlmYjQyLCAweDI2MTAwZjUxLAorCTB4ZDU3Y2JmNGQsIDB4NzRmNWE3ZTgsIDB4ZmJlYzZkZGUsIDB4YTgzNmMxY2UsIDB4ZjcxM2Y5ZjcsIDB4NmVmMDA3NWYsCisJMHhmMmMyNmI2YSwgMHhjMzZjNGYzMywgMHg3YjNmNmJmYywgMHg2ODNmZGY3NiwgMHg5NDY3NWFiZCwgMHg3OTlkZWExZCwKKwkweGE1ZTIzZjdlLCAweGMwNzdhNWQ2LCAweGViYTIwNzdhLCAweDMzZjZiYmNkLCAweGUxMjZkOTdlLCAweDE5NzMyMzdlLAorCTB4MmQ3NDEzMWYsIDB4OWZmM2Y3ZTgsIDB4MmExYjFlMmQsIDB4MTZmN2M0MzcsIDB4ODMzYjk3MjMsIDB4Y2IzOTFjOTgsCisJMHg5OTRkNmZmNywgMHhiM2QyMDVhNSwgMHg4NWNjNDRjZiwgMHhmZThkYmFmNSwgMHhjZjk4NjhlYywgMHgxZjE3NDYyOCwKKwkweGI2ZDQ3ODcxLCAweDJkYjgzMWFkLCAweGY5ZmIxZWQ4LCAweDQ4N2JlZTgwLCAweDllN2QyODczLCAweDZiNGVmNGEyLAorCTB4MDA1MGI4ZWQsIDB4ZWIwYWZkZTMsIDB4MTEyNTdhZDMsIDB4MmYzN2JlMTQsIDB4N2NjMTJlMzgsIDB4MTgzNTQ3MjIsCisJMHhiZjllNzA2YSwgMHhkNTc0ZTU2NCwgMHhlYmM1ZTVhMSwgMHhlOTZhM2QxOCwgMHgwNTliMGJlMCwgMHg5MDdkOGJlYiwKKwkweDRkMzJiYmIyLCAweGIyNjAzZTQxLCAweGQ2Y2UzZTMzLCAweDZhZWQ1Mjk3LCAweGQ3ZWZkMmIyLCAweDY1ZDk3M2FmLAorCTB4NGY5N2M3OGEsIDB4NGE5YzllMWYsIDB4MjExYjNmZjMsIDB4NjVmZTIwMTUsIDB4OGYzOWM5ODksIDB4NWJhOWM3MDUsCisJMHhkMDRlNDY1ZiwgMHhkOWEyZWFmOSwgMHgxMWIwNDk3ZSwgMHgwN2M4YjVmZCwgMHhkN2JhMzFiNiwgMHhmMjA1YmQxMywKKwkweDg5ZjIwMGZhLCAweDA3MmUxNmJhLCAweDEyNzliMDc3LCAweDk2NjMyMDczLCAweGFlNTlkYjE1LCAweDgzY2UwOThkLAorCTB4MzA1OGIzYjYsIDB4MjliOGM4MWYsIDB4Njc4ZWU0MDcsIDB4YzUxZGNhMmUsIDB4MjMzZGYzODgsIDB4ZTRmMTAxZjgsCisJMHhlZTA5Y2MyZSwgMHg3MTFkMDRiNywgMHg4YzEzZmUwMSwgMHg3ZTMwYjUzNCwgMHg0ZmZiNDk1MywgMHg4YTRkMmU4ZiwKKwkweDA5YTYwYTJlLCAweDE2Yjk1ODgzLCAweGYyZjBiNzRlLCAweDkyM2I0NTFmLCAweDNiNWUwMWEyLCAweDYwZjI1NTYzLAorCTB4ZGFmMmJlMjAsIDB4NmU0Y2RkY2QsIDB4ZTkxYzcyYmYsIDB4MDg3NDBkZDAsIDB4YWE0ZWJiZTMsIDB4NjQ3MmY2ZTQsCisJMHhmNzBlOTRhZSwgMHg1YzNhNDcxYywgMHhhYmY4Y2VkZSwgMHhiOGQ0YmRiYiwgMHgyNTliYTY4YywgMHhlZmU2MTczMiwKKwkweDc0MDRmNGU2LCAweDliZjlhNzY0LCAweDdkNzFhM2EyLCAweGQ5ZmNlYmVlLCAweDM5YmFhN2MwLCAweDYxZWY3NWRkLAorCTB4NGU4NmY2ZjQsIDB4YmNmODAxZTcsIDB4MzZlNDdkYjEsIDB4Zjk1YTA3OTAsIDB4MTEzYjU1MjgsIDB4NmY4YTZlZGYsCisJMHhkNjdhMDQ5MywgMHg2N2EwYzNiYSwgMHgzYjEzNTVkNSwgMHg2ZWY3NTdlYywgMHgwODFhMWZiZSwgMHg3Yjc3MDdlZSwKKwkweDJmZTg3MmU1LCAweDVkOWE2ZTM1LCAweDk5MmY1MDk2LCAweGVlZjM0YTljLCAweGZiMDQ1MjVhLCAweGQ5NmI2NTJkLAorCTB4ZDIwYmEwMWUsIDB4MjBhYjkxMmUsIDB4MGRkY2VkNWYsIDB4YWI4ZmFmZWQsIDB4MjA5OWNiYjMsIDB4OTkyN2I2ZjcsCisJMHg0N2ViZmQ2OSwgMHhjZGZiNjMxNCwgMHhmNDI5NGFlOSwgMHhiNjIwYTllNywgMHg3MDZmMjEyNywgMHg5Y2RiM2NhMSwKKwkweGYyMGVkMjNjLCAweDg4ZGFlZGNlLCAweDA2NTExNzdhLCAweGI4OWNhMWQ5LCAweGJlYTE2YmY0LCAweDZjODBiM2RiLAorCTB4ZTNlY2MyOTIsIDB4Y2IwMzkyM2QsIDB4MDhkZTkxYmQsIDB4M2I3YTdlZGEsIDB4ZWRkYzdmZDMsIDB4MTM5ZjFmNmMsCisJMHhhMWE5MTFmMCwgMHhkNzhjMTE3MywgMHg3ODg5ODJmZCwgMHhiZDlkMjBhNCwgMHg5MzBhNjdiOSwgMHg1MDlhMmZiMywKKwkweDc0NmQ5ZWNlLCAweDM0NTQxMzkwLCAweDEwNTY4YzhmLCAweDM1OGUwMmFmLCAweGEwM2E5OWFkLCAweDk5NjY0MjViLAorCTB4ZjhjYjFlNjAsIDB4NGMwZDVhM2MsIDB4Mzk3MzQ0NmUsIDB4OWIyZjc1OTAsIDB4MWZiZTcyYzcsIDB4NzhlYjQ3OTYsCisJMHhhZmZiZTQ2YSwgMHg5YjA1Yzk5NSwgMHhlMGU0MTcyNywgMHg5MjFlM2UzOSwgMHg3Mzk3MDI0NSwgMHhlNWJhZTg3NCwKKwkweGI1MjdkYzNlLCAweGUyZmViMzRmLCAweGRiYmM4ZTRjLCAweGU4NTVlODQyLCAweDZjN2E1YTQ3LCAweDZjYTZlM2UyLAorCTB4MzMwMTIwM2QsIDB4YTU1YWQ5NDksIDB4NTdkN2U3ZGEsIDB4NWQzZDVmMTMsIDB4NzU1YmY1ZTcsIDB4YThiOTg5YmUsCisJMHhmYzgyZGQzNywgMHg2YzkxODM3YywgMHg3N2Y3ZmE5NywgMHg1YmUzMzQ0ZiwgMHgzY2NlYjExNSwgMHhjZGQ3ZTQwOSwKKwkweGZhM2ZkNDE2LCAweDg3MjBlOWY2LCAweGI4ZjQwMjJlLCAweDg0ZGVjOTdjLCAweGVhMTY3MGFiLCAweDA5ZDNiZDY4LAorCTB4ZWRlMDNiNTYsIDB4NWE4ZTFjNDcsIDB4YmRhZmFiN2QsIDB4ZDE5YzBmNDYsIDB4NDMyNWM5ZWEsIDB4NDE4NmU5NjksCisJMHg1NDllMDE3MywgMHhhMTk4Yjc1ZiwgMHhhN2I2OGQ5ZCwgMHg4ZmI2MTJmNSwgMHhmMjEzNjI3YiwgMHhmN2VjMjZhYiwKKwkweGViMWI2OGY2LCAweGQ4NTlkNjI3LCAweGNiMmUyYzAwLCAweDI3Yzk4ZWI5LCAweDdhZGMzZGFiLCAweDllODVhM2QyLAorCTB4MDc0ZjI4YmQsIDB4ODJkYjMzZjQsIDB4YWZjN2UxZmIsIDB4YmQxOTRiNDgsIDB4MDEyODQxNTEsIDB4NDFmZGIyM2QsCisJMHg1Mjc4ZmVlOCwgMHgzZDQ0N2E0MSwgMHhmNGUwZGRjYSwgMHhiNjQ3YTc4NiwgMHhhZjU0ZGM1ZiwgMHhkMjliM2QwMiwKKwkweDI3YTY1YWUzLCAweDRmZGIwODViLCAweGE3MjMyZThjLCAweDdjMDA3OTMyLCAweDE1OWY1NDJiLCAweGVmYmI1NGZiLAorCTB4ZWRmNmZkMDUsIDB4ZWZkY2NiZmIsIDB4MWZiNjA2ZGQsIDB4ODAxYzI5YmIsIDB4ZmNlOGZiZGUsIDB4OWJlNzQ2NjUsCisJMHg0OGZkZDAzNiwgMHhmZGQxMzdjYiwgMHhmZmMyMTRkOCwgMHg5ODFmZTdiNSwgMHgwNDA3OWMyNywgMHg3MzY2M2RiZiwKKwkweDc0NWYwMDc2LCAweDE5YWI3ZjZmLCAweDQ3ZjM5NmM5LCAweGM4M2ZjYmY3LCAweDY1ZGU5OGJlLCAweDVmYjRjYTg2LAorCTB4YTFhZmRkMzMsIDB4ZTBhNjYzZjQsIDB4ZWE2M2U2YjYsIDB4YjkxMTM5MDEsIDB4ODk0N2FkNWUsIDB4MjY2ODgzZjQsCisJMHhkZWIxYmViZiwgMHhhM2QyNDIzOCwgMHg1NWYxYzNkZSwgMHgwMDdkNzNhYiwgMHg0NmY0MWU3YywgMHg2MzI0MTE0YSwKKwkweDEzMWJkMzNkLCAweGRlMDBlNjQwLCAweDQxN2E0N2I2LCAweDIwNDg0ZTNmLCAweGNjYzJlN2FlLCAweDY3ZGYzZjY3LAorCTB4ZmNlMjlmMDIsIDB4ZWFjNTEwOTAsIDB4ZmY3ZGYyZjcsIDB4NGZmN2FmMjksIDB4NGI5Yzg2OWUsIDB4M2EyODNmNzAsCisJMHgwZjIyNzFkNywgMHgzYjQ0OGYyYywgMHgxNzJjMmYzYSwgMHhkNzNiZTlmMywgMHgxMzdjZDk5OCwgMHhiZWRlY2FlZSwKKwkweGMxOGYwNDI5LCAweDNlNzU3NTdkLCAweDVlZWIzN2UwLCAweDI1YTk3ZTlmLCAweDhiOTA4ZTM4LCAweGY5ODFiYTVhLAorCTB4ZjU4MWZjODMsIDB4YjgxYThlNTQsIDB4N2U3ZWViNWUsIDB4NzFkMGQzM2UsIDB4N2I1ZmRmMDQsIDB4YjQ4MmI4YTgsCisJMHgyYmZiZTBkNSwgMHg1NjM1YzdlZSwgMHgyNTIyZmEwMiwgMHg5ZDJjNDcwNywgMHhlMWJlZmQ1NywgMHgwODhkMWY2YywKKwkweGVhZmI0MzY0LCAweDMxNGRkNzU4LCAweDkzMzFkZmI0LCAweGRmYTBmZWY4LCAweGEwOWNlMGFiLCAweDBjNTMxZTI3LAorCTB4ZjVlMGRkZTAsIDB4ZDNmOWUwODcsIDB4OGY3ZmQ2MTgsIDB4ZTk5MWVjZDUsIDB4ZDYyM2I4ZmUsIDB4M2RlZDBkMTUsCisJMHgwM2VlYzQ2NSwgMHhlNTA3NzMzOSwgMHg4OTZmYjAyNywgMHg0ZGY4MDhhZiwgMHgwMTQ3ZjEzZCwgMHg1ZDU4Yzc5YywKKwkweGJmNDAzMWYxLCAweGM5MzY2NzcyLCAweGYyNTdmY2EyLCAweDYzZjdjMmU3LCAweDg0Yjk1MTExLCAweGZiNzFmM2Y2LAorCTB4ODU3OTlmNmYsIDB4Y2FmODVhYjYsIDB4MDNkZjg1YjksIDB4MjIzMTdhZmEsIDB4MThlMmU4MDMsIDB4NTEzYjk3ZDUsCisJMHg4MzA2NTZkZiwgMHg5NDRiZGRiZSwgMHhmYzMwYjZjMSwgMHhjYzBiYTQ1NywgMHgyMGJlYjMzYSwgMHg1NTY2M2Y5OCwKKwkweDdhNDQyZjlmLCAweDZmYzMwYzRkLCAweGUyMTRmOWZkLCAweDA5ZmU4NTg5LCAweDYyN2JiZjllLCAweDFmNWRmNjE0LAorCTB4NTZlYTgyMzAsIDB4Nzg4MzNlN2YsIDB4ZWIxZjdmNjgsIDB4OTg1Yjc1NDgsIDB4MzBjNTM3NzEsIDB4Yzg0ZGRiN2EsCisJMHhmN2U1NzBkNCwgMHgwZjc2NzFmMSwgMHhiMDMwZmI2NSwgMHg3ZjAyZjI0ZCwgMHhlMWJmNWVhYywgMHgwN2U1MzJjZiwKKwkweDNlYWNlYmQ1LCAweGU4MzE2OTRjLCAweDhmMzZkNTZmLCAweGM3ZjM0NzRmLCAweGQxMWY4YzBjLCAweGM1Y2RiMzdmLAorCTB4ZWI0N2I5NDEsIDB4MGUwM2M3ZTksIDB4NGIyMGY0M2MsIDB4MmU1MmUwZjksIDB4YmMzNTk2YjcsIDB4MTNkODI1ZjksCisJMHgzY2M0ZjVhYSwgMHhkY2IzZjY5ZSwgMHg0YTk4M2NlYywgMHgyY2IzM2U4YiwgMHhiZmI2MDI4ZiwgMHgyNWI3M2JmMiwKKwkweDVjNGE1YzgwLCAweDMyZWNjYWQwLCAweGY0MGQ5MjY0LCAweDQzMzFjOTVlLCAweDMxNzkxMGJlLCAweGZhOGY0YjNkLAorCTB4ZTI5ZmUyMzEsIDB4ZTcxODhiZWIsIDB4ODJmN2MwNGMsIDB4ODBmNTA0YzEsIDB4N2E0NWI3MDUsIDB4ZDA3YzIxM2QsCisJMHhhNWExZTFjYywgMHg3ZWI4NGY5YiwgMHg3NjdmZWRhNSwgMHhmZTgxMTk2YywgMHg3MzljYTIzYSwgMHhkYzE2M2U4MSwKKwkweGNmYzU0ZTc2LCAweDUzZmYyNWJhLCAweGFkNWQwMjhmLCAweDY0OWZkYWIxLCAweDQzMzg2NWRkLCAweDYyM2JmZWU4LAorCTB4YzQzYWYzYmMsIDB4Njc1ZTRmNTMsIDB4YTA0Y2ZhZjYsIDB4ODdjNjQwZGYsIDB4MzBlYWNmNjAsIDB4OTQwYTNjZDksCisJMHhhMmNmMTExYiwgMHgyOTFhOWZkZCwgMHhlNjBlY2JlMywgMHgzNjFlOWU5NywgMHgxOTZiZTgxOSwgMHhkZTAzMzdiMSwKKwkweDEyNDRiNTk3LCAweDAzM2YwODRmLCAweGMzZTgxODA1LCAweDNmNjA5ZTdkLCAweDNjZGUzYjRiLCAweGFkZGNmYzBhLAorCTB4MmM5ZDIzZjcsIDB4OGYxMDViMzUsIDB4OWM3YWYzZWUsIDB4NzQzMTY5MDcsIDB4OGE3YjQ1ZjksIDB4OGU1MTIzZmIsCisJMHg5ZTdkNjBkYiwgMHg5ZjQ3YzY3YiwgMHgyNjNmNDkxYSwgMHg3ZWI4ZWZkMiwgMHhmZGYwZWRkNywgMHhlMjI4YzhhMSwKKwkweDRiNzhmYTAwLCAweGYzYTcwZWY2LCAweDgzMmIzNWVmLCAweGVhYmMyODYzLCAweDQ2MGU5NDhkLCAweDczNGUzNzYzLAorCTB4ZDI0M2ZlODgsIDB4NzdmYzZhYWMsIDB4Y2MyNWY1YmMsIDB4NjVkOWI5NjcsIDB4YzJiZTM5MDQsIDB4MzJhN2NmNDEsCisJMHg2NDU3YzllMCwgMHhlZjhhMTUxYiwgMHg5MTg1ZjJmMSwgMHg0NWVmOGY5NywgMHg2YzdmYmY3YywgMHg2NjFmZjRhNCwKKwkweGUxYzdkZDFmLCAweGE1ZWEyM2RmLCAweDcxZjI3ZGIwLCAweDBlN2VhOTA2LCAweDRhNjg2YmQyLCAweDk0M2M3ZGRiLAorCTB4M2U3OWYzZTcsIDB4NjA0YmQ3OWIsIDB4OWY3YzFkZjksIDB4ZWFjYjljN2MsIDB4YzVmMWM3NjksIDB4M2IzNmZlMzAsCisJMHhlMDE1YjFkNiwgMHg4Y2Y5ZGI0NSwgMHgyMmZiMTc0MCwgMHgxNmI3YThiYywgMHhmYzA3N2U1MiwgMHhlYTNhNmQ2ZCwKKwkweGVkYWY5NGFkLCAweGM0ZDk3YWMwLCAweDRjZjU4ZDE3LCAweDAzNDg1NzI4LCAweGNmYjA3YmU1LCAweGNmODQxNDhiLAorCTB4Mjc0YTUyYTYsIDB4ZDdiMDNjYjQsIDB4MDRhZWRiNjQsIDB4YTlmMDJhZjEsIDB4OGM3YjYzYzUsIDB4YzNjOWVmZjQsCisJMHhkNDNlOTI1MSwgMHg2MWU1NDI4ZSwgMHhhM2IzMGM3YiwgMHhkMjdmNjExOCwgMHg5ZTk5MTg5OSwgMHg4NWYxMGMzNiwKKwkweDNlNWYyMjc0LCAweDYwOGM2ZWJlLCAweGY0ZmJhMDc4LCAweDdiZDQxOGI1LCAweGZiYTEzOTdkLCAweDk3YzcwNGU1LAorCTB4MGYxZjY3ZTAsIDB4OGFiNWUzNTIsIDB4NWU2ZGUxZTMsIDB4OGQ4YzUxNmYsIDB4MDA3YjRmYzksIDB4MzFjN2RkZjcsCisJMHgxNjVjN2VhYywgMHgwZjQyNDM5MywgMHhjYjg3MDNmZiwgMHhjODU0OWE0ZCwgMHhkNTUzMzE5NSwgMHgxYzRkYzVmYSwKKwkweDQ0YzUzNzlmLCAweDA4N2ViYzA5LCAweDg4ZjIxNWYzLCAweDM0NWYxN2YyLCAweDVlMGIwZmRkLCAweDIxN2YyMTM1LAorCTB4YjBkOTAzMWIsIDB4NjNiZDY4ZmYsIDB4MmMwYTZlNTgsIDB4ZTQ3MmE1OGEsIDB4MThkZmFhMjYsIDB4MjJkZGIxZjMsCisJMHgzY2VmZGY2OCwgMHg4NWQwNGEzZiwgMHgzZTljODA5NSwgMHgxODUzZDYyNSwgMHhlNTRmN2U0MCwgMHgyOTZiYWUxZCwKKwkweGJhNDM3Y2ExLCAweGQwMzdmZTM0LCAweGQ2OTRjOTNhLCAweGQ4NTYwYzg3LCAweDAzYTY0ZWY5LCAweDIwOGZlZDAyLAorCTB4ZTE0N2Y0MGEsIDB4Yjg1MGU3ZmUsIDB4YzYzYmM3NmIsIDB4MzE5ZmUwZTksIDB4OTZmMTFlOTIsIDB4OWY3MGYyNDcsCisJMHg3NTg1ZmZiZCwgMHg5Y2YyZWQyMSwgMHg1MWQxZWNjZCwgMHhjZWI4ZmZiZSwgMHhlOWZhMDE3NSwgMHhkNDJkZmRiYSwKKwkweDdkMTk4ZmNiLCAweDMwOTZhZGQ5LCAweDYzZGY0NmU1LCAweGYyYzE0OTBmLCAweDNkOTczZmM1LCAweDc2MmZjYTQ2LAorCTB4ZTRmZDc2NzcsIDB4YTVlZWJhNjYsIDB4ODYxZGIyOWQsIDB4NWZlNzdhNWMsIDB4N2EwMzFkZGYsIDB4MGVjMWE3NzUsCisJMHhkZjJhNDZlNywgMHhiY2MzZDVlZiwgMHg3OTFlOTgxYiwgMHg4M2E2YTc0YywgMHg5ZjU1ZGZiMywgMHgxOTYyZDI3MywKKwkweDgzZGVhOGJlLCAweDNiZTA5Y2ZhLCAweDRhZGY3ZTQyLCAweDVjODE1NzdjLCAweDQ2MWM0NjVmLCAweDY2YjRmZjQ4LAorCTB4ZTE0MjBjZDUsIDB4MGViMmMyYjcsIDB4NmJlN2QxZjksIDB4YmMxZWExYTcsIDB4N2NiMDc4OTIsIDB4NGZlMThiNTksCisJMHg0NTYxZjJhMSwgMHhlYWJmM2FhYiwgMHg1NmZlNzU2MSwgMHg2N2RmM2FhZiwgMHgyZjBmMmU3ZiwgMHgzMmM3YTdkZiwKKwkweGQ5NGIzZTNhLCAweGIwM2ZlMDNlLCAweDNkMDVlNGMxLCAweDk4YWY1YjQ4LCAweDNjYTRjYmQ3LCAweDI0ZjgxM2IxLAorCTB4NDc2MGZiOTUsIDB4NDhlMTE3NTgsIDB4NmViZWJlMDQsIDB4YzVlMjY5NmYsIDB4ZTdmNTdjZWMsIDB4MTBkZTIxYWYsCisJMHgzN2E4MjM3ZCwgMHg2YzZmMTJlNCwgMHg2M2NiN2VmZiwgMHhmNDIzODQxNSwgMHhlMDcxZjBhYiwgMHgyY2I2NzFiYywKKwkweGM2MjYzYWZjLCAweDEwNjUzZDBhLCAweDhiYmUyN2Y2LCAweDQ1ZTM4MjdlLCAweGNmZWEzY2UxLCAweDhmOTgwNzliLAorCTB4NWQ5ZmRiMDUsIDB4MWI5YzdlMTksIDB4YTliMWM2ZmEsIDB4N2RiMDY0ZTQsIDB4ZmM2YjkzMWMsIDB4YTNlODJkMWMsCisJMHg3ZTEyN2NmZSwgMHgwN2ExNzkxNywgMHgzMWE1ZGIwNywgMHhkOWE0OGFmZCwgMHhmOTA2NDU0ZSwgMHg4YjYzYjA5NCwKKwkweDIyNDI3MGZkLCAweDNiYjQ2NGU2LCAweGViY2ZjZmRkLCAweDVmYjA1Y2Y2LCAweDA4M2QwMDlmLCAweDY1MTRlM2Y2LAorCTB4NzE0ZTlmOWYsIDB4NjZjNmY3ZDksIDB4ZjcwNjg3ZWIsIDB4OTQxZDc2OGIsIDB4NDNmOGNlYWUsIDB4NThiMmVlZjgsCisJMHg2YjhlMWM2YiwgMHg1NzE4NzYyNywgMHhkYmEyZmJkMCwgMHhlOGJiMDYyYiwgMHg2Nzc4ZmY3YywgMHg1NDZiYTI3OSwKKwkweDMwZjUzZjI4LCAweGU4NTE4OWJmLCAweDljOTUxNjVmLCAweGJjMzkxYTI1LCAweGQ0MmRmZGFjLCAweDk1YmVhOGJiLAorCTB4ZDNlNzRjMGQsIDB4YmQyM2I3YmQsIDB4MDRjZTI0YWYsIDB4YmQ5ZWYzYTAsIDB4ZmY1YzMzYzMsIDB4ZjMxNWZjODYsCisJMHg2MjU5ZTU5OSwgMHg5YmE3OTgyMCwgMHgyYWJmZWU5OCwgMHgxZDU5OWYzZSwgMHg5OWQzZWY0YywgMHhjNzFjMDYxZCwKKwkweDAyNWIxNDQxLCAweDdjZDlhNTFlLCAweGQzZDRmMzI5LCAweGY5YmU4NGZjLCAweDkwOGU5MTgzLCAweDEyZmU3Y2YxLAorCTB4OWRmMGE3YjQsIDB4ZDRiMjUzYzAsIDB4MzZmMzA0OTUsIDB4YmM3NGI4YzEsIDB4ODI0ZGUyMDgsIDB4NWRhYzY5YjQsCisJMHhlNGEyNzQ4MSwgMHgzMDc5YjNkNCwgMHgwZDI2NGYzYywgMHg2NzVmNTA2OSwgMHg5ZDZjY2JmNiwgMHhkMDA5MDY3NCwKKwkweDk4NWUwZmJlLCAweGM2ZmNmMmI3LCAweDU2OGJiZGQ5LCAweDE1OGI3N2MwLCAweGNmOTE4OGY5LCAweGU1MmM0NzYzLAorCTB4MmZlNDY2ODcsIDB4YzliNzU4NjYsIDB4ZmQxY2ZiZTIsIDB4OTRmNTNjNjQsIDB4M2Q4ZmI4MjksIDB4M2JkYTA5NDMsCisJMHgwMjM2OTEwNiwgMHhlNzJjNWFlMywgMHgxYjU4YjAzYywgMHg4ZjkwNDliMSwgMHhlMGZhZjViMCwgMHg2NmNlNzBmYywKKwkweDIzNDZlOGYxLCAweDBiMTlkYzlmLCAweDY3N2E1MjdjLCAweGYyODVlMDI1LCAweDE5ZmY2NjY1LCAweGMzZWY1Y2E4LAorCTB4NzNlMGI3NzMsIDB4NGQ3ZTdjMzEsIDB4MTMyNWNmOWMsIDB4ZTI1ODg3MDYsIDB4YjAxZWYxYzAsIDB4NDA0MTljYWUsCisJMHg0OWQ2NTk4NCwgMHhkNDRiN2VkMCwgMHgyNWVmZjQ1NCwgMHg3OTY5ZTAwMCwgMHg4YWJkNTRlYywgMHhkNTNiYzU2ZiwKKwkweGVhYjljNGY5LCAweDlkNGJiMjdjLCAweDNmOTNkMzM3LCAweGNmOTI4YmU4LCAweDE2MjE3NDk5LCAweGMwMjM1OWNmLAorCTB4ZmNlMDYyZGUsIDB4ZWJjZjk5YTIsIDB4M2Q3NGE0MDgsIDB4ZmQzZTcxZWYsIDB4YmIxM2Y1OGQsIDB4OGVlZWJjZmEsCisJMHhlM2I0MTIzMSwgMHhkMGNkOTgyNSwgMHhkZTU3ZDUzZiwgMHhjYWZhNjU4YiwgMHg5NzI4MWUyNywgMHhmM2NmYzgwMywKKwkweGMwZjliNjI2LCAweDgzN2NkM2FlLCAweDdlOGJiZjY0LCAweDFiMmFiNjZmLCAweDNkNTQ5NGY0LCAweGM3NjYyNGQzLAorCTB4ZjU0YWRiZDEsIDB4ODY1YjdjYjQsIDB4ZTY4OWJlY2QsIDB4MWQ3ZWMxZWIsIDB4ZDViN2YzMGIsIDB4NDlmNjhkM2MsCisJMHgwMjQ3YWIxMywgMHhkYzhmZTBjZCwgMHg4MzY2YzliNiwgMHg4MWU1NzE3YSwgMHg4YmQwNDZjOSwgMHg3NmRiMTA1NywKKwkweGJmYmU4NjEyLCAweGNlODZmYmEyLCAweDUzYzgwOWY3LCAweDVlOWM0OGJjLCAweGYzMjkwZjIyLCAweDdjYmMwZDcxLAorCTB4YzU5ZGZjMDcsIDB4ZTE4YjEzZjIsIDB4NjVmZWNhNWMsIDB4M2E3NWU0NzUsIDB4OTBlMGVlYzAsIDB4NzdkNjJlNTEsCisJMHhhMTZlYmRlNCwgMHhjZWNkNjVlMywgMHhiM2JjM2I0MywgMHgwOTczZjk5YywgMHgzNDYzZjdkZiwgMHg5MDVjNmFmYiwKKwkweDhmM2NiMWNlLCAweDcwNzU4N2U3LCAweDg5OWM2ZWJiLCAweDc0NmQ2YmY5LCAweDM2NjY2Mjg4LCAweDhjNzFmYWMwLAorCTB4ZmM0NGVkZmUsIDB4NWFmMmZiNjMsIDB4ZmQwN2ZjMTIsIDB4NDdmYjA3OTUsIDB4NTgyOTM0M2UsIDB4NzQ2N2RjMWMsCisJMHhiZGIzN2NhOCwgMHgxYmQ2OTZhOSwgMHg4N2VkZjdhMywgMHhhNzhlM2M3ZCwgMHhhMzdkM2M3OSwgMHhiZjk0MDZmNCwKKwkweDYyOGIzYTlkLCAweDZkN2RiMWQ0LCAweDg2MTMwMmNlLCAweDE0YjgwNjUzLCAweDA0ZDA3ZWRiLCAweDdjOTA0Y2ZkLAorCTB4YmQ0YzY2OTgsIDB4NWZhNjA5YmYsIDB4ZDE0N2VkYzUsIDB4MDZlZjQ2NDksIDB4MTJhNjhlYmEsIDB4NzdiNDY3OGEsCisJMHhkODIwZjlmYywgMHg0OTA3ZTVhNSwgMHg4OGU5ZTAwMSwgMHgwNzM5Yzg0MSwgMHg3YTE1ZDM5ZSwgMHgzYTFhZmIxYywKKwkweGZkNDA2Yzk4LCAweDJhOTMyZmZjLCAweGQ1MDEzYmYwLCAweGQyYmJjZThjLCAweGJlMjExNmM2LCAweDc1NWYyYzBmLAorCTB4ZTM2YTNmMjgsIDB4YjMzN2U0NjQsIDB4NmFiZjMyYTYsIDB4NTdiMzVjZmQsIDB4MTBjZTQwOTIsIDB4YmJkMjc3ZTYsCisJMHhiMTBhNmYzMiwgMHhjNDNmMDg5NywgMHg3NzMyMDZmYiwgMHg0NGYzOTg1NywgMHg0ZmQzMWM2ZCwgMHgzYjMwNjZhYiwKKwkweGEzNDZmZDZmLCAweDFkNTM3ZmNhLCAweDMzNWVlY2M3LCAweDhjOGYyNmUzLCAweGZjYzQ3OTQzLCAweDVjNzE3OWE3LAorCTB4NDY0MTFiNmYsIDB4ZTEwYTlmMDAsIDB4YWY1MDQ1MjMsIDB4ODFlZGY0YWIsIDB4OWNiYThjZjgsIDB4OGUzOTk5ZjMsCisJMHhmZGVhMDMwMiwgMHhiZTA4ZGY5YywgMHhmNmM0MWNlZSwgMHhkMjQyM2NmMywgMHg5MzY3YWU4MSwgMHg4N2ZmZTQwNiwKKwkweDdlNDU2ZjRiLCAweDE4ZjExMzczLCAweDk1MWY2ZjAwLCAweDMxMDI3OGIxLCAweGQ1NTM1OWVmLCAweGE3MWNkMjdhLAorCTB4NWNmMzdmM2EsIDB4ZjBjNTFlYWQsIDB4ZTc5ZGM2MjEsIDB4MDk1Nzk3NTIsIDB4NWFhYTc4M2QsIDB4ZmZmMDVlMGYsCisJMHhiOTQ2OGFiZSwgMHhkZDU0Zjg5YSwgMHhlN2UwMjE4NSwgMHhjMDAwZjY2MCwgMHhlODczZjMwYiwgMHgxYmRjNmU5MSwKKwkweGJlYmMzZjk5LCAweDM4OGRlZjNkLCAweDEyNzc2N2Q4LCAweDQ5NzZjZmJlLCAweGIyZmZkMWNiLCAweDgyMTE1YTRiLAorCTB4YWY1YWQ0ZmYsIDB4Yjg2NDcyMDQsIDB4OTg3ZGQ4NTUsIDB4NzkzNGU0ZGUsIDB4YzNkZjgzZjcsIDB4OTExMjgzNTksCisJMHg0OWUzY2ViYywgMHg0OTNjNDAwZSwgMHhhZGJlOTA3ZSwgMHg1NzE2NTY2NSwgMHgzMGI1MWM0MSwgMHhhNDViMzQ5ZiwKKwkweDE2ZmVmNDFkLCAweDY1ZGEzZTVkLCAweDJhYWNhMjViLCAweDBkYTZmYTNiLCAweDEzZDQwNTRhLCAweDQ0YzU1OGY2LAorCTB4NmU5YzZkZjIsIDB4ZDc3NzlkYzIsIDB4YmFmZTMxYzUsIDB4NzE3NjYyNTksIDB4OWUzMzNjY2YsIDB4OWNiM2UzMmIsCisJMHhiYzQxM2YyYSwgMHg5ZDgyOGU0YywgMHgyMjljNjQ3MCwgMHg2M2ZkYTNlYSwgMHg1Yzk1YzFiMywgMHg0NGFmNTM0MCwKKwkweGQyMTcxMTk3LCAweGQxMWIyNjVlLCAweDRmZTFhOGFlLCAweGI0NzZiMWYxLCAweGNlMGZjN2ViLCAweDljZmQzYjQxLAorCTB4MmZiNDNjOGUsIDB4ZmQ4NDRiMTIsIDB4ZmZkODI5MmEsIDB4ZjRkYmQ5OWMsIDB4ZGY1M2E3MTAsIDB4ZGNiZjRkYjEsCisJMHg3YmJiYTQxMiwgMHg4ZDVjYjhlMiwgMHhhZjQwOTEyNCwgMHhlN2JhNzY3ZCwgMHg3YmE3Njg0YywgMHg1ZmZjZTc1YywKKwkweGEzNWFjYmEwLCAweDIxNzFlZDBmLCAweDA3ZGY4YWY0LCAweDM4YWI4YjkyLCAweDljY2ExOGJkLCAweGY5ZDA1NmYzLAorCTB4YjQ2YmJjZjUsIDB4MWQxOWY5YzMsIDB4ZTdmZmI0NmQsIDB4OWRhMzQ0ZjcsIDB4NTA0NTVmNTEsIDB4NjUyYzZkM2UsCisJMHhlYzA3YTQ3YywgMHg5ZjFkNzQ1ZiwgMHhmOWUzNTc0NSwgMHg4YWQ0YTM2MCwgMHg2NjNiYTNmMiwgMHg2YWYxZDIzMiwKKwkweDA3M2MwMWNiLCAweDc0YTU2ZjU3LCAweDU2OWYyMjE4LCAweDZiZTc1MGVmLCAweGRmOWUyNzQ4LCAweDQ3ZWU5ZjZiLAorCTB4MDUxN2M4Y2YsIDB4NTZlZjc2MWYsIDB4ZDRjMzIzYjcsIDB4Y2I4ZjM3N2MsIDB4N2RhNzdjOGIsIDB4N2Q0YzA1NTYsCisJMHg5ZDhiM2RhZSwgMHg4NjQxZTljMywgMHgxZGU4YTNhZSwgMHgyZWVmYjcyMywgMHgwMDhhOWRiMCwgMHg3NDk0ZmI1NiwKKwkweGM3YWRmZDMxLCAweGZiNjY1YTdhLCAweDIyODNjOTlmLCAweDZlNTY4ZTNlLCAweGVkYmQ3MTE1LCAweGUwYmZjYTNhLAorCTB4YjBmNDJhZmMsIDB4MDdmMmMyMjIsIDB4OTI3MjFkNzQsIDB4NDJkZjM4MmUsIDB4N2ZlODRlZGUsIDB4N2MwODRlNDIsCisJMHg1MjEwOTY5NSwgMHhhNzQzZjc0MiwgMHhjOTQzNGZlMCwgMHhlZDM3YzA1MCwgMHgwNDg5ZjcxZiwgMHhkODMxNDM5MSwKKwkweDdkY2UwN2JmLCAweDk0NzhmOGUzLCAweGI3MjAzYzFlLCAweDE3YjMzYTNkLCAweDZhNTlhYmU4LCAweDA2NjkzOTQwLAorCTB4OWJhNjlmM2QsIDB4ODNjYTE3MjQsIDB4MzIzZGFhOTcsIDB4NjkyYzdiYzAsIDB4ZDY4MzM1OTgsIDB4OGNlZTZmMWIsCisJMHgzYTUxMzgwNCwgMHgzZjRhMTIzOSwgMHhiMTk3YzQ0ZCwgMHgxMWQxNTI0YiwgMHhiZjQ1Nzc5NiwgMHg4NDhlOTYxZCwKKwkweGM0N2RmMzNjLCAweDc0ZTk5OGY0LCAweDA1NGZkMGM1LCAweDdhNjg3ZTM4LCAweGM4ZTc2MjQwLCAweGViMWY5NjI5LAorCTB4YmFkYmZkYTEsIDB4NTMyNzQ4NjksIDB4ZjMwZjU3ODksIDB4ZjFhOWIwYWIsIDB4OWQ0OTI1M2YsIDB4YTNmNGE2OWYsCisJMHg3MGMzOGMwZiwgMHgxZjRlNzg3MCwgMHgwODc3MmVhMSwgMHhmY2Q0NDc3ZSwgMHg4NTdjOTMyZSwgMHhjMWY5MTg3YSwKKwkweDVkODBlZmMxLCAweDE5M2Q3MjIxLCAweGQ1MGRmYTAxLCAweDZhMWY3MTQ0LCAweGI4ZWJlMGU5LCAweGYyNmZkZDZmLAorCTB4YmYxODVjNzUsIDB4MTNiNzBmNDksIDB4MmJmYzRiNWYsIDB4ZDNmYTk2OWYsIDB4ZWIxYmY3NTksIDB4N2ExMGE0ZTUsCisJMHg2NWUyZmIxNCwgMHg5MDdmOGIwMywgMHhhOWZlNjU1ZSwgMHhlNTE5MzMxMiwgMHg2NDJhZmEwMywgMHgzZmIxNDU3NiwKKwkweDhjZmEwNWFlLCAweDMxNWRkMjA5LCAweGNmMTE5ZWZmLCAweDE5MDg2Y2U5LCAweGExMzY3NDAyLCAweDUzMjdjMjNkLAorCTB4ZmVmMWU0YmMsIDB4Y2JiYTA1YWUsIDB4ZTIyM2VhMGYsIDB4ZDI1NGQxNWMsIDB4YTUzMmJlOGYsIDB4NzA1ZmQ0MmMsCisJMHhhNDdkMDlkZiwgMHhkMjZiNmE0MCwgMHhiOTFmMDI2NywgMHgxYmU2MDlhNywgMHhlMzQzNGY0MiwgMHg1MTJmODA4YiwKKwkweGRhN2RjMjdhLCAweGNiYWFjZTRmLCAweGYwMjZmNDM1LCAweDUyZTVmNDJlLCAweDM2NzQ4MGQyLCAweGVhNjBhNzViLAorCTB4ZjI4NTVjYWIsIDB4NWIzMmRjYjUsIDB4YWNkZmVkMGYsIDB4MDkzNmY0NjIsIDB4ZWEwYjMxZTgsIDB4ZGNhNWU5YWIsCisJMHhlOTZiY2VhYywgMHgwYmE4OGU5MSwgMHg5ZjRiNTcxZCwgMHgxMGRiZDEwMywgMHg1ZjIxMzdhMCwgMHg2ZjRkMmY2MywKKwkweDc1YmZlM2QzLCAweDdmMWU5YjdhLCAweGQyZDM3YTExLCAweGJiNWZlMDk5LCAweGEwZTU2YzIyLCAweDRiNTdkNzNmLAorCTB4ZGUwYTBmMjgsIDB4ZjkwNGQ2MWQsIDB4YTg5OTc1ZTEsIDB4YjY4YWVmNGYsIDB4ZGY1ZDdlYTMsIDB4M2IwYmNhYzAsCisJMHhiZGM0MzIxZCwgMHhlNWUzYWQ2NCwgMHhjODcyY2U5OSwgMHhlNWE3YWZkNywgMHgyM2EyZWJiNCwgMHhkODY2MmUyYywKKwkweGVmM2NhYzlkLCAweGFkZDc4NmFlLCAweDU4Nzg2N2EwLCAweDZmM2Y5N2ZiLCAweGI5NjhhMzk2LCAweDJmYjc5OWI3LAorCTB4N2M4NzJkNmQsIDB4ZmY2YjBiN2QsIDB4NDZhOWY4MTksIDB4Yjc5YTdjNDMsIDB4N2Q1ZmJlMDksIDB4MWQ5ZGE2NmYsCisJMHgzZWZlOTlhYiwgMHg5Nzc3YWY5MSwgMHhkOGViZGNmNCwgMHg1YmI1OTVhZSwgMHg4ODNjZDA3NSwgMHhlOTlmZjllMCwKKwkweDc1ZjFkN2U1LCAweGQ2Y2FkYzRlLCAweGZhZTI3NzE5LCAweDhiYTUwYWE5LCAweGVhMGYwMTE1LCAweGI1NzRhNzZmLAorCTB4MDZkZmM4YzUsIDB4NGE5NzNmMzgsIDB4NGU5MDY5YWQsIDB4NTIxN2VjYTEsIDB4MjJkZWQ5ODcsIDB4Y2M3ZTY1MGYsCisJMHg3Yjg4NzRlZCwgMHg0NWZkOTllMiwgMHhjZTIwZmZmOCwgMHg5ZjQ0MzJhMCwgMHhkOTllMjdiOCwgMHg4NGJkNDU2MywKKwkweGEwMDE4YTE4LCAweGE4YWM0Nzg3LCAweGE0ZmYwYjVmLCAweDgxMjIyMWVmLCAweDcyMzU4N2JjLCAweGJmYWMyNDNkLAorCTB4MDM1NjRhNzIsIDB4ODY1MzExZWEsIDB4NWZhNTNmMDgsIDB4OWI4ZTk0YmYsIDB4Yzk4YmUxNzcsIDB4M2Y0M2VjZTEsCisJMHhlNjllZTNlMiwgMHg3YTdkMTM3MSwgMHgwNzUzMzdiMiwgMHg4ODBiYjE3NCwgMHhmNDgwMDUyNCwgMHg3ZjQxYWZkZSwKKwkweDQ4N2UwNWRiLCAweGE0M2NhNDI2LCAweGYyY2FmMDA0LCAweGJkN2ZlMzViLCAweDg1M2M2NWE5LCAweGVmNDFhZWFmLAorCTB4MjE5NmExMDEsIDB4Y2NjOWRjNjEsIDB4MWMxYmUyNGUsIDB4NTNmZTdmZDUsIDB4YzQ2N2M0ZjQsIDB4ZmYzNjI2MzgsCisJMHgxZTU0NGQ5NSwgMHg3ZTMxZDEyMywgMHg4ZmUzODczNiwgMHhlOTBhYmY4YywgMHhkM2M3MzY3NywgMHgyYTdmMDVjZiwKKwkweDlmYzAwNTIwLCAweGRkYmM3MGU2LCAweDM0N2FhNjY0LCAweDgzNTZjM2YyLCAweDEzM2M2Zjg2LCAweGNiNmE3MjBmLAorCTB4YmFiYmZhODAsIDB4YWE1N2MzNWMsIDB4YjkyYmI4ZjksIDB4MDkyYjdlZGUsIDB4NGE3MjdlYTAsIDB4N2E3YTYyZjIsCisJMHg2YmRiZDMwYiwgMHhiZjUwNDcyYywgMHhlOTg0NzllOSwgMHg4ZmM0YjVlZCwgMHhiZWQ2OGZmYSwgMHg5ZDUzYjM1OSwKKwkweGU3NTM2YmFmLCAweGY5ZDVkYmViLCAweDhlMGYxYzllLCAweGFlYTViM2QzLCAweGQ1OGFlYzE4LCAweDc2OGJiZjBmLAorCTB4NWZjMTZhZWMsIDB4NDJmZTZhYmMsIDB4NWZjNjcxMTUsIDB4ZWQwNmJhMWUsIDB4NmY5OGRmNTEsIDB4NmY0ZjRkM2MsCisJMHhkMGI4YWFjNSwgMHhmYTljMDJkZiwgMHhiMjJmMzVlYywgMHg2MTM3MTRmOCwgMHhlYjFlODI3NiwgMHg0ZTcwZjk4OCwKKwkweGE0NzkxYTI1LCAweDljNzkyN2U1LCAweDg2ZmIwODlmLCAweDg0NzkyZmUwLCAweDhlN2EyM2M5LCAweDgyNDFkNzdkLAorCTB4ZDdhYjVjN2MsIDB4YmQ3M2M0ZjUsIDB4ODRkMzlmOTcsIDB4ZmEwNzkzZmUsIDB4MzVkM2QwMGYsIDB4NDE2NDQ4MGQsCisJMHhkYjdmNjQzOSwgMHg5ZmM4ODcyNCwgMHhjMDY2ODU3OSwgMHhlZTk5YmU3MywgMHg2Yzk3ODA2NywgMHg1NDU5NzFjOSwKKwkweGNhMDVmMGY0LCAweDdiY2Y4MTk5LCAweGJkMGQ3MmVhLCAweDJkZDZmMzg4LCAweDgxNjY1ZTljLCAweGZmOGU4NTI3LAorCTB4ZTc4MWM5N2IsIDB4MzJiN2MzYmEsIDB4NTk2Mzk5N2EsIDB4ZDFmYWY0ODcsIDB4ZTIyZjQ2NmEsIDB4ZTdlNTc3ZGMsCisJMHg0ZGZjODczYywgMHg3NDdkNzljZSwgMHg1ZWY1NDExMiwgMHgxNzQ5MWU5YSwgMHg4ZmU2N2NlNywgMHgxZDE4OTdhZiwKKwkweGY4N2Q1NWQ0LCAweDgyY2ZlODE4LCAweDI0NmUxYzJmLCAweDNlMTBmYWYxLCAweDY0Y2QzNGQxLCAweDkzNGEzYjA2LAorCTB4YWE4MzlkODEsIDB4YmM1YzdmYTYsIDB4MzhjZjg0MzQsIDB4MTMxMzRhMjIsIDB4ODhlZTU5NDAsIDB4NWQ2Y2ZiNDcsCisJMHg2NjljN2FhNCwgMHg3ZmJiZjNhOSwgMHg0ZmQyZjM4MCwgMHhkNDRlZDEyMywgMHg5NTQxMzBmYiwgMHg3MGViNzdhNCwKKwkweDZiM2VkYjhjLCAweDMxNTI3ZTYwLCAweDc3MDc1NTlmLCAweDdlYzNmM2VlLCAweDA4ZWJmZjVjLCAweDM1OWY5NTNkLAorCTB4NWFjNWY3OTIsIDB4ZTRjNGI2NWEsIDB4NmE3MTg2Y2EsIDB4YjMyMzNlNzQsIDB4NWZhMjc2NjMsIDB4YjAzYjhjNTcsCisJMHhmMjgzZDY1ZCwgMHg5MzFhZjhkNSwgMHgxMDY5MDFjMywgMHhlZmQyZTFjNiwgMHhiNWZlYTFkOSwgMHg0ZjhjODlkMSwKKwkweDJhZWIxMWRmLCAweGNhMGY4ODQ4LCAweGE0M2Y2MTRiLCAweGM2YTQ5NjUyLCAweGMxMjZmZDA0LCAweDM3NjYwNmY4LAorCTB4NWM3MTBiZjksIDB4NjM2MWJlMzIsIDB4YjY5ZTdkODgsIDB4NTY4ZjFiMGYsIDB4ZjVmOGMwOTYsIDB4NjFjZTI5ZjcsCisJMHgxZGEzMDdkZSwgMHhkMzlmMzBlNSwgMHg5YTdiOGZkYywgMHg0NzRlZmRmYiwgMHhjY2UwM2YzMSwgMHg3NTJjZmFiZSwKKwkweGY3MzRmNGYxLCAweDUxOGU5ZTEzLCAweGJkNDQ4N2ZiLCAweDhlY2MwOWE1LCAweDZjZDFiMjcyLCAweGJmMDdhOGRlLAorCTB4MWM2ZjMxM2EsIDB4MjFlYzQ5NDYsIDB4OTNjNjAzNTMsIDB4ZWE3ODYwMmMsIDB4NmRiZDEzZDksIDB4YTVmZjg4NTMsCisJMHhmYmY0YTEyZSwgMHhkODdmOWYzMCwgMHhiYTQzMzc5YywgMHgzMWI4ZjViYywgMHgyM2RmMGVkNCwgMHgwZjc3ZjNiMSwKKwkweDA4OWU5N2E3LCAweGViNzE4YTk2LCAweDBmYmYyYTEyLCAweGU3OTllYzc4LCAweGU1ZjYzYzQ3LCAweDEzYmM4YWM3LAorCTB4YzA5OWVmZmIsIDB4ZmU1ZjZiZjgsIDB4Yjg0ZjJjM2IsIDB4ZjVkODQzZGQsIDB4NjlmN2YyMDcsIDB4ZDA1NDdiZmQsCisJMHgwNDQwNzNiMCwgMHhmZDZiY2ZiMywgMHgzZjA1MGJmMywgMHgwNWY5ZmVlMywgMHhlYzJkMWY5YywgMHg0NTgyN2U2MCwKKwkweDRhOWNkMjY2LCAweDI0NzcxN2NiLCAweDk0NmU3M2IyLCAweDlmZTU1YjI3LCAweDUxNWU0NGY3LCAweGNiYTA4NjNjLAorCTB4M2VjZWY0OWUsIDB4MjEyM2Y2N2YsIDB4ZWUzYWVjZmUsIDB4ZWIxM2FjY2YsIDB4ZGY1ZWFkZGIsIDB4YmFkZjA5MDMsCisJMHg4NDgxZmIzZiwgMHg2ZDZjZmUzMCwgMHhhMDhiYzNkYywgMHhlMjBiMGM0NywgMHhjMThkYWQ2MSwgMHgyZGFlNDJhZCwKKwkweGVmNmY3YjA3LCAweGU4NzE4MjcyLCAweGQ2NWFkZjZiLCAweGI1ZTBmNjA0LCAweDJhMGIwMDNmLCAweGE3ZDQzMWYyLAorCTB4MDc5YzM4ZWIsIDB4NTNiYzU3NWEsIDB4OWQ5NTE0NDcsIDB4NDI1MTEwN2QsIDB4OGFlYzlmZTYsIDB4NDM1MWU1NTEsCisJMHg0ZDAzODkwZiwgMHhiNTUxNGVhZCwgMHhhYTE4NmY0ZiwgMHhmZDY0M2ZhYSwgMHg0Y2YyYWEzNSwgMHg5ZjJhYmU0ZiwKKwkweGFhYWQ3MmQ1LCAweDY1YWQ1NWZlLCAweDg3ZjBmY2FhLCAweGNmZDU1N2FmLCAweGEzMDc0MzIzLCAweDBjOTBlY2ZkLAorCTB4YjU3MjIxYjYsIDB4M2U1NTRhYjcsIDB4YWEyZGU3NzIsIDB4ODY5MTlmZjYsIDB4YmQ2OWUzY2QsIDB4NzlmZTQyZGQsCisJMHg4YWEzOWQxYywgMHgzOWNlNzE4MywgMHhlZDU1NGI2ZCwgMHg2MmI2YTQ5YiwgMHg5ZjQ2ZjAxZiwgMHhiZDY4OTNlNCwKKwkweGNiNWYxYzE1LCAweDYyZmY5OTNiLCAweDU1NmFmYjc0LCAweGQ4YTM2N2ZmLCAweDVmYWQxODNkLCAweGEzMmU3Njk2LAorCTB4OTEyZWQ2MWUsIDB4N2VmZWE0NDcsIDB4ZmI4ZWVhZGEsIDB4YThlZTIxOWIsIDB4ZjI5NmJmYmYsIDB4MzU2ZWRhNGQsCisJMHhmZTgwYmYzZCwgMHg4ZTZmZDVhNiwgMHg1ZDNmNzAyNiwgMHg3NDYxNDkwYSwgMHgwYjBiYTVhZCwgMHg1YmJkN2ZlYSwKKwkweGU2MjdiNDY1LCAweGM2ODdlYzkxLCAweGM0MGNiYzIzLCAweDVmYzdmNGFiLCAweGFlNzY2MTJmLCAweDc2YWRhN2RlLAorCTB4ZjU1OWZmODgsIDB4NDdhNDMyZDYsIDB4MmU5YTkyNTMsIDB4NWQzNTE0MjIsIDB4ZDM1MDhlNDQsIDB4YTZhZWQ1ODUsCisJMHg2YTI1YzE4MywgMHgzZGMyZDAzYSwgMHgwYmE2YTFkYSwgMHg0M2ZmYTdlMiwgMHgyYWUwMmRlMCwgMHg1NTNiMWVlMCwKKwkweDc4NWEzNzRkLCAweGRhMDA5M2U3LCAweGM5NWVkZGQ5LCAweGZjNjEyM2VlLCAweDcwZGJlZGUyLCAweDFmZDI5NzVkLAorCTB4Zjg2YTg5ZjUsIDB4MzQ3MDFjMTYsIDB4MmM2ZTEwNTksIDB4NjFlODRjYmUsIDB4NjhmZmFlMjYsIDB4YWY0MjEzZmQsCisJMHg3YWU0NGI4OSwgMHhmODQ3ZWYxNSwgMHgwZjI1OWExNywgMHhmZTdkNTFlYSwgMHg4NjVmMTJjMiwgMHhhN2Y0MTMyZiwKKwkweDQ0ZWNjMjA2LCAweGYwYzRhNGNlLCAweDNlZmM0Njc2LCAweGMwNTE5ZDkwLCAweDI2MjBmNjc1LCAweDAzODg2YjJmLAorCTB4ODgyYmUxZWQsIDB4YzlkZGY5MGIsIDB4M2VkMTViY2EsIDB4NjNmMmNhYjQsIDB4YWQ5ZWJiZjQsIDB4MzU1MjdhNjIsCisJMHhiZjlmMjJmMSwgMHhhYTAyYjhlMiwgMHhmYjEwOTI4NywgMHg1MjhlMTZhYiwgMHgwMmIzZTQ4NywgMHgyMGYyZTFiZiwKKwkweDc5MDg3NDg1LCAweDEzNzhjMmUwLCAweDYyZTY4NjRhLCAweGFkNDcxZjk1LCAweDMwZGY4MmU3LCAweGJkMDk3Zjg0LAorCTB4ZTAyNzhjNTcsIDB4MTg5YWY4MjksIDB4ZTQxYTQ0Y2YsIDB4MWExN2Q4MjQsIDB4Njg0NjQ3M2UsIDB4M2I2YTQ4ZmQsCisJMHhlMGYzYjA4ZCwgMHgyMmZlMjE2MCwgMHg0NDI2NWRhZCwgMHhlOTkxNmUwZiwgMHhjYzkwZjIzOCwgMHg1N2YxNDIyNiwKKwkweGRkYTA3MzYwLCAweGNlNzQ4OGFmLCAweGU2MjVlZjg3LCAweGMyYmQyNmI2LCAweDkzNTcxM2VkLCAweDgwYzRmYjNlLAorCTB4ZmUxMmVhZjIsIDB4YzkxZTU5ZTgsIDB4N2Y2NjY4ZmYsIDB4NmJmMGI0M2YsIDB4Zjg5ZmU1ZDMsIDB4NWUzYzZkMDMsCisJMHg1NWVmMTA1MiwgMHgwNzhmMGYyZiwgMHhhNzZmZWE3YSwgMHg4NTdkMWZiNCwgMHgwMmViMjNmNiwgMHhjM2Y2YTFiMSwKKwkweDkyMDZmYmJlLCAweDEzNzNkNzFmLCAweDQyNGRkYzcxLCAweDY5MzcxMGY0LCAweDEzM2YzYzliLCAweDRlNTRjNGVjLAorCTB4ZWNjYTQxNDYsIDB4YWI1ZGE0NTgsIDB4OGVkMWViMDcsIDB4MDEyYmEzYWMsIDB4MjEyMWFmYmEsIDB4NjBjY2RhN2UsCisJMHhmZWU1ZTYzOSwgMHg3NDM3MTE3OSwgMHg0MmUyN2QyOSwgMHgzZmM3OGRhMiwgMHhjMjI3NzhiMCwgMHg1ZjM4YTBmOSwKKwkweDEzOWU3NDBlLCAweGNmNzAxNDcxLCAweDIyMjFmYzE2LCAweDkxMzlhODRlLCAweDQ5NzM4MzlmLCAweGY3NGZmNDJlLAorCTB4YjQ0NGE2ZGIsIDB4MjlmZGQwMWYsIDB4YmVjN2VlODUsIDB4ZWYyYzIyYjgsIDB4ZWIzNTFmYjcsIDB4YjIxNDcxMTcsCisJMHg0MmVkMTBiNSwgMHg3YmQ3NDJjYiwgMHg3YTEwZjAxOSwgMHgzZWE4NmZjYiwgMHgxMjM0Zjc4MCwgMHgwZGQ3YTYxNSwKKwkweDAzODFmNjNhLCAweDU1M2IwYjhhLCAweDQ2ZjU5ZTcxLCAweDdiMDE4MDdhLCAweDhlM2M4YmMxLCAweGFmYWQ0ZGFmLAorCTB4ZTNjODliM2YsIDB4ZTczOWY4OTMsIDB4MTgxYWYwNTIsIDB4NGVlZTNjMWYsIDB4ZjUzMmUzZTAsIDB4Mjc3NzExMzAsCisJMHg3ZjQyZjhlMCwgMHhjMTUxZWZiOCwgMHhkOGJjZWZiNSwgMHhlMTNkZjcwNywgMHg3MmUwMmVlMCwgMHgyOWYzYThhZSwKKwkweDNkNmM5N2MwLCAweGVlZjAwMDkyLCAweDgzZWU3Mjg4LCAweGZkNDdlOWZhLCAweDcwNWQyNGE3LCAweDE3NzIxNTVlLAorCTB4YjZmNmNiYzYsIDB4Y2YzZjc4Y2IsIDB4NWJjNTgxM2QsIDB4YzhjOGY3YjksIDB4NGMzYmJhMWEsIDB4NmVhZDM3ZTgsCisJMHhjMmY1MWQ3ZiwgMHg2OGNhNDZhZSwgMHhhNjc2MWVhOSwgMHhiZmE5MGU5MSwgMHgwMzQwYmQ4OCwgMHg0N2NlODFlZiwKKwkweDY4MWYzZDYyLCAweDc1ZTIyZmQ2LCAweDdmN2YzYWU4LCAweDNlZmMzODA5LCAweGU0MmExYzFjLCAweDllZTE4MzUxLAorCTB4OTE5YzVmNTcsIDB4MTU1MTkwM2UsIDB4NzVkYTFmNDIsIDB4YjBmNGU2NmMsIDB4MDEzY2VmNTYsIDB4NGNlZjFkZmQsCisJMHg1NWZkMGNkYiwgMHg1MzA3MWRjOCwgMHgyNGViM2UwMCwgMHhkMTM1N2ZiYywgMHgyNmNiZWVjNCwgMHgyNTc0ZmJmMywKKwkweGRjM2IwNmZlLCAweGIzNGE0ZTM3LCAweGUxYTlmZGUwLCAweGUwOWQ5MWRmLCAweGRkNzhmZTE3LCAweDRmNzAzMTZkLAorCTB4NWMzZmY0NGMsIDB4NGVmZGUxZDIsIDB4ZTRmYjllNDIsIDB4NTdmMDQyOGUsIDB4YTI2ZmIwMmUsIDB4MTYyNjg1YjksCisJMHhkZGY5OTE5NywgMHhlNTE2NWY0OCwgMHg4OTFhYWYyMywgMHg2MWEzZjYxOSwgMHg2YmRlMDM2OCwgMHg2OGNiNDQwOSwKKwkweGM5OTM4Y2I3LCAweDMxM2JhMDI0LCAweDU2MWY3MTZmLCAweGZhZmI4NzdjLCAweDdjNTJlZjcwLCAweDI4MTRkODlmLAorCTB4MGVkMzRiNTgsIDB4ZGQ2MjBmNGUsIDB4MDUwM2NiMTMsIDB4ZmMyMDk2MGQsIDB4MTZhNjVjNDUsIDB4M2MzODViM2UsCisJMHg2NmM2ZjFkYywgMHhjZGJiMTdkMCwgMHg1MmM5ZmNlMiwgMHg5ZjIzZDM2MiwgMHhmYjY2Njc1OSwgMHhlMjU1ZDhlNiwKKwkweGMyYjNlZGZjLCAweGUxMWRkNGI5LCAweGY2MDYzYzE4LCAweDc5MzJmYmRmLCAweGIxN2YyNjkyLCAweGUzNDcwNjM5LAorCTB4YzdkNDE1ZmEsIDB4YmI1OGQ5ZDcsIDB4YmYwNzFlNmUsIDB4NDRiMmEzZWUsIDB4NmY4ZTVmODgsIDB4YTY2ZjFmMGEsCisJMHg1YzczYjEyNCwgMHg4YmVmZjcyZCwgMHgxZjdhYjVlZiwgMHg0MmQ1OGRjNiwgMHhmMDQxNzZiYywgMHg2YmM2OTVmYiwKKwkweDAxZmM3ODhiLCAweDI3YWQxMGUxLCAweGVmNzhkMWZhLCAweDdhYjE3OWRjLCAweDBlNGJmY2FmLCAweDNlYmViZTdiLAorCTB4MGZlMjI3NDksIDB4Y2Y0ZGVmZDEsIDB4MGJlMzYxNWIsIDB4ZjlkODkzNGIsIDB4ZTgwNzE4MmEsIDB4N2RjMzdiYzcsCisJMHg0YTdiODVmMSwgMHhjZTQ1YzkxMywgMHgwZWYzZWVmYiwgMHg4ODlmZGM1NSwgMHg5ZjlmNzczNywgMHhmZDdlNzE4NCwKKwkweDI5ZmRhNWZhLCAweGUxNWM2MDk2LCAweDkyZGZmMDQwLCAweDg2ZTVlNmM4LCAweGQwODJiZjc4LCAweGRlZmIwYWVmLAorCTB4OGYxYzRlMzcsIDB4YzE0N2YzZGYsIDB4YmI0NWZkM2UsIDB4N2ZlYWY3OGMsIDB4NzUzNzQ4NzEsIDB4ZDc3OTk4N2IsCisJMHg1ZGI4MzEyNywgMHg3ZGM3YWYxMywgMHgxYzQ3ZDIzMywgMHgyZjhjYzJkYiwgMHgzNWZiODllYSwgMHg3NmFhOWVlMiwKKwkweGZjY2JiYjdlLCAweDEwZmU2MDhiLCAweGJjNmUxYzQ3LCAweGM0OGU5Y2E1LCAweDMwYzc3N2JjLCAweDk5ZjdiODdjLAorCTB4ZWQwNTllZjAsIDB4NzdiZGUzMTcsIDB4ZTI1N2Y4YzcsIDB4ZjFhOWIwYmUsIDB4ZDdiNzNiN2MsIDB4OWZkZWJlZWMsCisJMHhhNmJjZjc4MSwgMHg0MGMzM2IzMSwgMHg3MjhkZTBmNCwgMHhkOGY1MDRmZCwgMHg0YTY1Njk5YiwgMHgwNmZhYzUzZiwKKwkweGZmYjIxNmM5LCAweDQxMGY0NTJlLCAweDc4NTRlYmI4LCAweDIzNzcwZmVkLCAweGZiZjQ1N2UyLCAweDRmYmU2MWY5LAorCTB4ZTcwMmMzODksIDB4YmU1YzI1YjcsIDB4ODM1MWQ5MmQsIDB4MWYzOGFmZmEsIDB4OGNiMGZlN2QsIDB4MTM5ZjE3ZjEsCisJMHhiY2Y5MjdlNiwgMHhjZmYzYzI1NSwgMHhlYjIxMTc1MiwgMHhmOTVhMWYyOSwgMHg4ODMzNDE2NCwgMHg4NDQ5MjViOSwKKwkweGJlYzMxNzVjLCAweDQ2ZTkwOWRmLCAweGY5N2M5ZmI1LCAweDg3ZWNmZGJkLCAweGFlYWU1NDI0LCAweDU3MjgwZDIwLAorCTB4ZGQ1OGZlNTYsIDB4ZmJkYzlhYWUsIDB4YjQ5ZmQwNjcsIDB4ZGNlMWZiZmUsIDB4YjFkNjI3MmUsIDB4NDc5ZTg5MzksCisJMHgyNjI5ZWY0MCwgMHhkNjFmMjBjNSwgMHgzMTg1ZjkzZSwgMHgxZjc4MTk0YSwgMHg3NzdjYTY5YywgMHhhZmY4MWU5OCwKKwkweDQ2YWVkMzE5LCAweDQ4YmZhNjFiLCAweDQ0OTYzYzcyLCAweGM5MjdiN2YxLCAweDllZDIwZGI1LCAweGJkZmY1OWY3LAorCTB4N2U0Y2JkYjUsIDB4Yjk0MzhkNmMsIDB4MmVmZDY0ZDUsIDB4MDg3OTc1ZjIsIDB4YzBmN2ViZTMsIDB4MWUxNDA5M2IsCisJMHg5N2QzMTMyNiwgMHg3MjBkNzQxMiwgMHg1ZTJkZWExNCwgMHhmMWUzODdhNCwgMHg2MjY2YWE2YiwgMHg3NDA0OWVkZSwKKwkweDI5Y2JmNzFmLCAweGVmY2UzMTUzLCAweDgwMGU5MTk3LCAweDQ3NTJhNmY3LCAweDM2MjVkODFlLCAweDk5N2JiMjU1LAorCTB4YjNmMzEzNjYsIDB4ZjYzMTdmN2IsIDB4MGM4MzcwMzUsIDB4MGNiZmJiNmIsIDB4OGViNmMxY2UsIDB4ZjdiMDNlZmQsCisJMHg3Y2ZlZThiNCwgMHg1YTU3ZTIxMCwgMHg4YmYxNjNhZSwgMHhmZWZmM2EwOSwgMHhlMmYxOTBkNCwgMHhlMDQ5YmQyMywKKwkweDY5MWY4Zjg3LCAweDM4OGYzOGM0LCAweDIxYWYzNGI5LCAweGNkY2E1ZTI0LCAweDllZGJkMTcxLCAweDFlYzI3Njg1LAorCTB4YjYxYmIwODMsIDB4YThiZGUwNDUsIDB4ODE4M2ExZGEsIDB4MTg0MzVjOGYsIDB4MWJkYzQ1OWUsIDB4ZGY1NDIxY2MsCisJMHg4NDcwYTJlZCwgMHhiZjkxNGJhMCwgMHgxOWYyNGRhNiwgMHgxMmZkZjBhMiwgMHhkZWQ0ZTNmNCwgMHgwZjk4NGJlNSwKKwkweDdhZTdlYTcyLCAweGY5ODk4M2Y0LCAweDVjOWFiZGM1LCAweDIxMmVmZTA2LCAweDM2NGJlNjlmLCAweGZhZTM0NzY2LAorCTB4ZmUyMjNjZmMsIDB4NWNkOTdmMzEsIDB4YjhmMzI3NGUsIDB4OTIzZjNmMWUsIDB4YjEyOTdiYzEsIDB4NWJiYjQwNjcsCisJMHg0NzRhMjRjYywgMHhmMmZjZDRiNywgMHg2NzVjMjJiNiwgMHhmNDFhMjE4ZCwgMHgxOWY3ZTEwNSwgMHg2ZjA4Y2Y1OCwKKwkweDY1M2Y3MmZmLCAweGE1OGRmNzY1LCAweDcyNzQzNjQwLCAweDYyZTdjMjg2LCAweGY5YzAzMGZiLCAweGRkOWIzYmIyLAorCTB4ODhjMzIzYmIsIDB4ZWU4Y2ZjMDMsIDB4ODFiN2MzN2QsIDB4ODgzNGMyN2QsIDB4N2YyOWFmZjksIDB4YTNlNDk3MzIsCisJMHg3Mzg2NmQ1ZSwgMHg0NGFmYWRkNCwgMHgyZjIyZjhmMCwgMHhjOGVjNGZiZiwgMHhmYTljZjg4MywgMHg4YzdjYjRhYSwKKwkweGMwMWEzOTEzLCAweDBkYmEzNzc3LCAweGM3ZGMwY2ZlLCAweDU0NDhlZjk0LCAweGYyZGEwZTM2LCAweGI4N2ExOWZkLAorCTB4ZjU0Mjk5YWYsIDB4ZDkyZjlhMzUsIDB4MGZjYjJmNzIsIDB4ZDFkNGFmZjUsIDB4NGYyZDkyZmMsIDB4ZmRkM2QwY2QsCisJMHg3ZmM2YmVlMSwgMHg1YjM1ZjIwYSwgMHhiZTdjYjE3NiwgMHhmMzRjYTU3ZiwgMHg2NTVlNWJjZCwgMHg0OTYwZTFmNSwKKwkweDJkYzFlYzA5LCAweDY4Nzg2NzA3LCAweGI5YTI2N2ZmLCAweGYxZmJiN2JjLCAweGU1ZmJiNTllLCAweDNiNTBiYWUxLAorCTB4ZTMzMjYzNmIsIDB4OWRiODY3NWIsIDB4NTkyNjRjZjgsIDB4MWVmMDA1NWMsIDB4YjJmZWJlMTEsIDB4NWEwZjFkNjQsCisJMHhhYzU0YzU2OSwgMHg0OTI3YjQ1NywgMHhmMzI1ZGJlMSwgMHhmN2U1NmU3MSwgMHg5MjQ2MjdhMywgMHhiN2U2MDg5NiwKKwkweDNjNTE0NGYzLCAweDhlMThlODFjLCAweDkzYWZjNzdlLCAweDZlOWU5ODYyLCAweDM4ZmJlM2YzLCAweDRmMDExZmEyLAorCTB4NzcxODlmZDEsIDB4ZTA2N2M4MzUsIDB4YWM3ODlhY2IsIDB4M2Y4NjY0ZWMsIDB4MWM0NmNlM2EsIDB4ZGQ4Mzk4NjcsCisJMHhjYjRhYWUyYiwgMHhiYzUxZmMwMywgMHhmNGRlMzllOSwgMHg4ZGJiZmNlYywgMHgxYmY2OGZjZCwgMHhhMDcyOGI5ZCwKKwkweDA3ZjhlYzAwLCAweDMzZjVhMmJlLCAweGQyZDZmMzgzLCAweDkzMzI0MTQ5LCAweDMxMzZiNzJmLCAweDNhMjA2YjdmLAorCTB4NjI2OWU5MGIsIDB4YTU2NzdmMjQsIDB4NjY4ZWJkNTAsIDB4ZTRjNjg3MGUsIDB4NDY2ZjdlNjgsIDB4YzI1MTJiYzAsCisJMHgxYzM4OWE3MSwgMHhjZjc4ZmNkMywgMHg1ZGQ3NGFmMiwgMHg3NzVhMWZmMSwgMHhmMDFjYmUwOCwgMHhmNjgxY2E1ZSwKKwkweGY1YjNiN2FiLCAweGNkN2JmMGM0LCAweGQ0MTg4Y2ZlLCAweGY1NTdlZWY3LCAweGE2ODM2Njc3LCAweGI4YzEwOTdkLAorCTB4MTY0Yzc3MzYsIDB4ODIyN2JmYjYsIDB4ZDkzYmYxOTgsIDB4MzMyZWQ3ZGUsIDB4YTBhZGU5OTcsIDB4MmM3NzhhY2YsCisJMHgxMjNhZTc4OCwgMHg3YmVjNDdlYSwgMHhjNThkYTJhZiwgMHgzOWQ3MDY2NywgMHhkM2FmOTBhMywgMHg2MzY5ZDdjNiwKKwkweGU4YWFmNGViLCAweDY0MDkxYzk1LCAweGE3ZjZiNmNjLCAweGY3ZjgzZWUzLCAweDlmMmEzN2Y1LCAweGU3ZGFhN2Y3LAorCTB4N2Q4M2ZhZTEsIDB4ZDY1ZTEwM2QsIDB4ZDZmOTNhNzMsIDB4YTllNjIyZjAsIDB4OWMxZjY3ODEsIDB4ZjAxM2YzMzUsCisJMHhlZDhkZmQ4NCwgMHg1MmU5YTk0NiwgMHg1OTI2YjNjYywgMHhmYjM1OTM5YywgMHg4ZTFiZjMzYiwgMHhkNWRhY2E1NywKKwkweGI5ZTJjZWRkLCAweGViYTZhMjg5LCAweDNhOTlkZGJhLCAweGVkMTAyYjg4LCAweDEwMjdjMTZhLCAweDNkZmZiNDFmLAorCTB4ODllZGNjOWEsIDB4ODA2ZDI0NjksIDB4OTNjN2M0ZjgsIDB4MGRkYWMyOGIsIDB4OWNmNmJiZjEsIDB4ZTJjZDEzZDgsCisJMHg4YWY2YjVkNSwgMHgyNzdiNzg5ZSwgMHg5Y2Y0YWZkYywgMHg4YzBhZWY2MywgMHhjMDZmZDhkMywgMHgyNTljZjRjZiwKKwkweDVmMjgyZWQ4LCAweDljNzNmOWQ0LCAweDNmYjdmNjNmLCAweDdlNjAzMjA1LCAweGU3YjJhNjg1LCAweDQ3ZDUzYjE1LAorCTB4N2U0MzFjYjYsIDB4ZWNiODM4NWQsIDB4N2Y5YTRjYjYsIDB4Yzg4ZmY5MzUsIDB4Y2I1MzBiY2YsIDB4ZmNhNGM4YmUsCisJMHg5ZmIyN2Y3YywgMHg3ZDk2NDdlNSwgMHg1YmYyMTQzMSwgMHg0NGZlYWNmYywgMHhlZmMwZjNjNywgMHg2MzNmYzc4OSwKKwkweGFmNTA3MjUyLCAweDQxNTkyZDc4LCAweDNhZTVjOWI4LCAweDAyNjQ3NDAyLCAweGM3YWU4NjI1LCAweGUzMDlhYWY0LAorCTB4MDc1YzA0ZjYsIDB4YmE0ZDBiNGEsIDB4NmZmNzcwODYsIDB4MDdhM2VlZGYsIDB4ODEyOTU3ZTYsIDB4ZjNiMDE1M2YsCisJMHg1ZjgwM2I3MSwgMHhmNDAzYjJhZiwgMHhkZjdiYjE0NCwgMHg4ZWZmN2IzZCwgMHg0ODNlNWRmNywgMHgxZTAyNzU3NiwKKwkweDE2YmIyM2VhLCAweDVkZmNkMjY1LCAweDFmYTA5ZjkxLCAweDNkZDA3MjRmLCAweGM1MTVmNjAxLCAweGY5ZDAxNjQ2LAorCTB4OWM5YjVkNGEsIDB4ZDU5MTNmYTAsIDB4ZTExZWIzNzYsIDB4NzQ1ZWVkY2EsIDB4ZmMyODE3OGQsIDB4ZjNmN2Q5NWUsCisJMHg2MWIyYTVlZiwgMHhiMThmMzA5YywgMHhlZmQ0MGY5YywgMHhlMDZmZjJmYiwgMHg2MzNmYWRmNywgMHg3YWY5ODNiMSwKKwkweGRiOTZjNzZjLCAweGRiMWFmZjQwLCAweDRjOTdmNmYxLCAweDM5ZmJiMzBlLCAweGMxNjNkZTYyLCAweDk3YmY0OWFlLAorCTB4ZmU3MDliYjQsIDB4NWVhZTNiNjMsIDB4ZmRjN2Y1MDEsIDB4ZTgwYjIzYjYsIDB4NWYzMWMyNjQsIDB4OWU4NWIwMTMsCisJMHhhYWE1MmZiZCwgMHhjZjkwZTVlZSwgMHgzOWQ3MWEyZSwgMHhjMDRkZGZhMCwgMHg1NGFhNTNlMywgMHhmNDc4NDYwZCwKKwkweDg1N2M3ODMyLCAweGYxZGQ2N2YxLCAweDY4ZmQ5Yjg3LCAweDdmZGY1NGZjLCAweGZhM2FmYWEyLCAweDIwYzk3YjkxLAorCTB4YzQzM2Y4M2IsIDB4YmRhZDdhN2QsIDB4NWQyNTY4ZjQsIDB4MjEzZWZkMWYsIDB4YTIxMDY3NDAsIDB4NmYzYzRmNGYsCisJMHg5ODI0OGNhNiwgMHhhYWQxMjUyZiwgMHg1OTM5Yjk3YywgMHg5NmMyYmY1NSwgMHg5MjlmMmFhOSwgMHg3Y2FhYjU3NCwKKwkweGNhYTc5MjlhLCAweDU2MzExZjRmLCAweDdiMDZmZjU1LCAweDYzN2YyYWE5LCAweGZkNTUzNGM5LCAweDJhYTU0NzRhLAorCTB4NTM2YmU3OWYsIDB4ZDQzODJmZDUsIDB4NDIzZjJlYWUsIDB4ZmU0M2MwNjQsIDB4OTBlYmZiNTEsIDB4YTA3NDlkMTYsCisJMHg3NGY4YjVkOSwgMHg4ZTkwZWJjMywgMHg4NzAzMGJmZCwgMHhlZDdjNWVkNiwgMHhlMWQ3YjZmOSwgMHg2YjE3YjBiYiwKKwkweGZiMDkzM2VmLCAweGM1YjJjZGYxLCAweDI3NmYwYzZiLCAweDA1NjdkMjRlLCAweDc1OTAxZmRmLCAweDE4ZDMzZWVjLAorCTB4OTRlYWViYWIsIDB4YTY3ZGUwYTIsIDB4YTYyZjYwODksIDB4N2M1OGE4NDgsIDB4MDBlMzQ3ZWUsIDB4M2Q5ODBiNGYsCisJMHgwNjIwMjhlZCwgMHg2OGFkYmVlMywgMHg2ODZhM2M4NywgMHgyYzBmZTY3OCwgMHhmODFkMjAwZSwgMHg1Y2MwODRkZSwKKwkweDllMjdiYWQ1LCAweDVkZDZhOTc3LCAweGUwZDU2ZTRhLCAweDVmMmE4ZDY5LCAweDU1NWRiYjYxLCAweDA2ZDI0YTdmLAorCTB4ZTUzNGY5NTUsIDB4ZGQzYzFhMDcsIDB4NjBkZmNhYWYsIDB4ZDNjMWEyZGYsIDB4N2U5ZTBkMzYsIDB4ZjQxNzJhYWUsCisJMHg1YWVkYzFkZCwgMHg0NTFlYzBmYiwgMHhjZWZlZjFkMywgMHg3NWMzYzA3MiwgMHg4Zjg4MDNhNywgMHg3MmQ2Y2U5MiwKKwkweDQ3YjVkM2MwLCAweDg1NWYxMGRiLCAweGIwMzk2NzNlLCAweDBkNDNlMmNiLCAweGEzZWE0M2FmLCAweGY3NjgzMWU3LAorCTB4YTYxMjYzNWEsIDB4YjQxNTFhMDcsIDB4MWM2YzFkNmIsIDB4NDZhMWU5ODEsIDB4NzVmZjdlM2IsIDB4ZWZhNjA5NjMsCisJMHg3ZDMwM2EzNCwgMHhhNjJhNzFhZiwgMHg0YzRlOGQ5ZCwgMHhiMGRiMWFkYiwgMHhlZDhkNzNmZSwgMHhkYjE2MmVjYywKKwkweDNhNDVkZWY3LCAweDc1YmEwN2Q4LCAweDgyNzgzNzdlLCAweDc3OTIzZjE3LCAweGVlY2JmMDAzLCAweGM4NmVmZTQxLAorCTB4MzdlYzQ1ZGYsIDB4MjVmOWEyNGMsIDB4YmVlODQ0YzAsIDB4Mzc0ZjI5ZmMsIDB4ODAwMjNhYTQsIDB4Y2ExYzM3NTcsCisJMHgxOGYxODI4YSwgMHgxZTQ3M2E2ZCwgMHhhNDc3ZTFlOCwgMHgzZWExZjg0YywgMHgzN2JiOTA5ZCwgMHhkMTZjOTMzOCwKKwkweDc5YTY2ZjJjLCAweGIzYzYzNjQ0LCAweDgzYTFmODRkLCAweDIwMzNkNzEyLCAweDMzYTlkMDRhLCAweGY3YzgwNmUxLAorCTB4Nzc3MmIwNDQsIDB4NDAxYjg0Y2EsIDB4ZmVjNmZmMGYsIDB4ZmYzZjQ3NzMsIDB4NjEyOTFkZjksIDB4OWNjZmU3ZmMsCisJMHhkNzYwYWM1NiwgMHg3MGQ1ZmMzOSwgMHgzMGUzYzAyYiwgMHg0ODM5NmZiNywgMHg0ZDA5NjE5ZSwgMHgwNjc5ZjU0YiwKKwkweDA3NDdiMzkwLCAweDgwZjBiN2I4LCAweGUwMDliNGFlLCAweGNmYjNhNmQwLCAweGViZWY3OGMxLCAweGI3ZTgwNDBkLAorCTB4NWZlNzYyNGEsIDB4Y2E5NWNmNTEsIDB4MGRjZjQxZTQsIDB4MWQ0ZjNjMjYsIDB4NjA1NjM5ZDEsIDB4NzgxNDk5NWMsCisJMHgzZGJjZTAwYywgMHhkZWUxMTJhNSwgMHgwMDY0MGQ2MywgMHg0ZTI5YmNmYywgMHgzYzBmOGY5NiwgMHhmMjQzZDkyNiwKKwkweDA3OWYwNjA2LCAweGI2ZmM2ZTUyLCAweDM4NThmM2UxLCAweDYyOTEzY2Y4LCAweGNmYjZmYTYzLCAweDgwN2EwZTkxLAorCTB4NzRhOTFmYzgsIDB4M2U3ZWMxZDQsIDB4MGFiOGVhNTIsIDB4NGQzOGNmZWYsIDB4YWQzYWZmNmMsIDB4M2VkMGFiZGUsCisJMHgxMzlhMjhlNCwgMHg5MjE5ZTc2MiwgMHhkMWY3NjA2YSwgMHhkODIyNjJlMSwgMHg3MTkxNmYzYiwgMHgzOWUxNmI5ZiwKKwkweDdiZTk5NTIxLCAweGNlNzAyNzQ4LCAweGU3ODkxNzljLCAweGY2M2EyMzgyLCAweGZlYjY4MTllLCAweGIzZDcwZTAyLAorCTB4ZTNkYmMyODMsIDB4YmQzMmE2MTYsIDB4ZGQ1NjZjYTIsIDB4ZmVkMDJmMzMsIDB4NjA0NWQ2N2EsIDB4ZTFjZTNkZDcsCisJMHgzNGY1OGZhOCwgMHgzNDJhZTg1MCwgMHg4ZTcwZGQzZCwgMHgxY2VjOWI5NSwgMHg5ZGJmZTgyNCwgMHhmMmQxN2YwZiwKKwkweGZiNmUzYTY3LCAweGZkNjhlZmViLCAweGRhNDVkNjRmLCAweGFlZDg4NjUxLCAweGMyZGRmODQxLCAweDM1OGMyZjJiLAorCTB4YjBiNGZlYTMsIDB4ZTQwY2JkMmEsIDB4MDdlZTdjZTIsIDB4MjdkNTY0NWMsIDB4MWY1MDNiYTAsIDB4MTcyNzg0NmQsCisJMHg5YWYyNWI5NywgMHhjYWM5MDQyOSwgMHgzYzIzNGFiOCwgMHhiNjlkNTUyNSwgMHhkNWQyMTlhNiwgMHhjMjM3ZWVjMywKKwkweGEzYjUyOTEzLCAweDFhODMzNTc2LCAweDcwYjc0NzViLCAweGZmM2ZmMjExLCAweDVlNzQ4ZGJiLCAweDBhY2JkNzhiLAorCTB4ZmI4OWNmM2IsIDB4MTQ1NzM1YWUsIDB4ZjdlODIyY2YsIDB4YTIzYjhmMDgsIDB4ZWFmM2MwNDAsIDB4ZDE2ZjBlMjIsCisJMHhkNzg3MTE2ZSwgMHgzZmFlMTQ4OSwgMHgwYjljOTBlNiwgMHg2N2Q2M2Y2YSwgMHgwYjVkZWY0MCwgMHhjMDFlY2RkZiwKKwkweGU3MmVhMGNmLCAweDQ2MDdlM2ZhLCAweGZkZjZhZTM2LCAweGUyZWUzMTEyLCAweDNhZmU3NjU0LCAweDA5OTRhNDYyLAorCTB4NGMyZGU0ZmEsIDB4ZmRjZWU0MGUsIDB4YmEyMmFlZTIsIDB4OWIwZWRjZmUsIDB4MTYxNWUzMGUsIDB4NzgwMGJkZDcsCisJMHg3OGU3NmRlOCwgMHhkODc2OTAzNCwgMHg0YjNjYjM0ZiwgMHgyMjFkZjkzZSwgMHg4Zjc1NGUyNiwgMHhkMmYyNTJmNywKKwkweDBmMmI2OWRlLCAweDdlODU5Nzk1LCAweGJjYTg3OTY3LCAweDk2YjQwOTJjLCAweGYyMTQ1YzgzLCAweDdkNGZmODUxLAorCTB4MmY5Y2Q1OGQsIDB4M2QzZjIwMzcsIDB4ZjMxZWI4ZDAsIDB4OTgzZDFiMDcsIDB4ZTE2YzZhMWUsIDB4Y2IxNWI5N2MsCisJMHg5ODdjNjlkZiwgMHhlNzJmNjVmMywgMHg3YmYxM2JjYiwgMHg0YzVjZTM0NywgMHg1OGJhMzVmNywgMHg5NTE5Y2EzZSwKKwkweGVjYzRmYjBhLCAweDM3YzRmOGMyLCAweGY4MDg5OGI2LCAweDRjM2I3YWU3LCAweDc3NDE5ZjE4LCAweGM2OGY2M2M0LAorCTB4MDk5MWZjNDEsIDB4ZTM2YTcxZWYsIDB4YmU3Y2I0OTAsIDB4Zjc3NjFlOGYsIDB4MDUyNTM3N2IsIDB4MWY4YmU5YzYsCisJMHhjODcxN2QwMiwgMHg5ODc0ZjRjMCwgMHg0YmUwNTYyOCwgMHhlNGZlOGZmOSwgMHgwZmFmZDAwNiwgMHhmNDE1OGEyYiwKKwkweGNkZDQ4MmU5LCAweGFjNTBlZjJjLCAweDdjMmY5YTA2LCAweDhhNWRlNzk0LCAweDIyYWMwNGQ1LCAweDViZTQyMWY1LAorCTB4MzU4YTNkODcsIDB4MWY4YmU2ODIsIDB4N2I5NTg4N2QsIDB4YzdmMzNhMDksIDB4MDZmNWJhM2QsIDB4MjI1OWYwMGYsCisJMHg1MWZkODAxZCwgMHg0NDljY2U2ZSwgMHhkNzk1MDVjNSwgMHg1ZjYwMDdhNSwgMHgzMjVhNDk0YywgMHhjZWM1ZjYwOSwKKwkweDYzZTkwNTE0LCAweDAwZTFiMjlhLCAweGQ4OGZhN2U0LCAweGZhYWI4N2E2LCAweDQ2ZGU0YjBlLCAweDU3MTY1NzY4LAorCTB4OTM3Njg3YTksIDB4ODQ2Y2Q2ZDIsIDB4ZGQ4NzkzNzYsIDB4Mzc2ZDBmYWYsIDB4OGRhZWQ0NzUsIDB4ZGY2MTlmOTAsCisJMHg3NGZkMDdhNiwgMHhmOGIxZjAyNywgMHgyZjIyM2Y2MCwgMHgxNjlmMDVjYSwgMHgzYmEzNzI3MSwgMHg3MjBmMjg5YywKKwkweDBmMjg5ZGRiLCAweDY2Y2E1YzA0LCAweGY2MGRkZTU3LCAweGM5NzZmYWNmLCAweDY2M2NjMTI2LCAweDBhNDE3ZDRiLAorCTB4ODZlODkzMTAsIDB4YmYyOTQ5ZjcsIDB4OTdmNTNlYmUsIDB4NWRiNDBkZDYsIDB4YzVhZmU0M2QsIDB4N2MzNzBmZmMsCisJMHhhNmZiZmNiYiwgMHhmYmZjMzBkNCwgMHg0MWRmYmU0MywgMHhmYmRjNDNkZSwgMHgwZWY2NDY4NywgMHgyZTFjMzNjYywKKwkweGFjNGIxZGY1LCAweDcxMmE4ZWY4LCAweDdhY2Y0MTU5LCAweDk3ZjNjYjllLCAweDlmZTVhNTIwLCAweDdmOGJiNGYxLAorCTB4NzBlNzQwN2YsIDB4NTJhYjM4YzEsIDB4M2ZiMjFmYjksIDB4NjU0OWE4N2YsIDB4OGY3MzVmZmIsIDB4Y2U3MjgwNjQsCisJMHg2ZDUyZWExZiwgMHhlYTNjZjdhYSwgMHg3NmJmYmIwOCwgMHg2ZDNiMzhhOSwgMHhlZTM2Yjg5YywgMHgzYjY5MzU2NCwKKwkweDFmZWNjOGU4LCAweGY3MGI1MjZmLCAweGM3ZmFiMmRjLCAweDZhNzg4YjdmLCAweGRmNzgxYzZkLCAweGUzMTA2YWI5LAorCTB4ZDc4MTczYTcsIDB4NDk2ZWJhNTAsIDB4ZGU0ZjkwMWQsIDB4ZGMzODA5N2IsIDB4ZmQwZTBlMWIsIDB4OWM1ODQzZDYsCisJMHgyNDM4YmY3YiwgMHg1ZGFlZWYxZSwgMHhiM2M1NzExNywgMHhmYzc5OGQ3NywgMHg4MjdkNzZiYiwgMHhhZmFmZmEyZSwKKwkweGNmNWZjMTk1LCAweGJiZjU0ZmUwLCAweDE1N2U2MGM3LCAweGVjMDRhZDhiLCAweGU3ZmNhMTU2LCAweDNmZTExNzc3LAorCTB4NmRmNjdlNWEsIDB4MTc5YmM5ZjEsIDB4NjViYmUxZDcsIDB4ZjNkOGY4NjEsIDB4Yjg5OGY4ZTEsIDB4ODU0ZGFmY2YsCisJMHhmM2Y3MGE5ZSwgMHhkZTEyMWUyMCwgMHg3ZTczODIzOSwgMHgxZjZiYTI2NSwgMHgxNjUzZDNmNCwgMHhjZTBlOWJmOCwKKwkweGRkZWM3MWExLCAweGFlZDE4M2YwLCAweDMyNWRmMGZkLCAweDExMDZiOGIyLCAweGU3NWE3Yzk3LCAweDZkZTgxNWY5LAorCTB4MTlmYTNkZWYsIDB4MTA2ZWIzZjIsIDB4YmM4Zjc0MTYsIDB4OTdhMGYzNDEsIDB4N2NlNmMzZmQsIDB4NDY0N2UwMTMsCisJMHhlZmExOGRmOCwgMHg3ZjE0MGY4ZiwgMHhmZjJlMWJmYiwgMHhkZjZjYTdmYSwgMHg5ZWQ0Mzg4OSwgMHhhMDY2NWY2ZCwKKwkweGZiMTJlZWZkLCAweDU0NzgyMDYyLCAweDcwZmRlM2M4LCAweDI0YjdhNDNmLCAweDk3NjdlNTEyLCAweGRlZjA3YzQ0LAorCTB4MDI2OTU3NzEsIDB4ZTk1ZDJkZWEsIDB4ZGZhNDNkNDYsIDB4MmJiOGI5ZjYsIDB4ZDdmYjFiM2QsIDB4OTJiYjhmOWUsCisJMHhkYzZjY2M0YiwgMHg3ZDIxNTNjOSwgMHgyMTU0ZjkyZiwgMHhmMGRmYmRjOCwgMHhhMzc2Y2JmOCwgMHhiMDNkZTBhNywKKwkweDQwOGQ4ZjBmLCAweDkyOGRmZWZmLCAweGEwZTAxMGJmLCAweGJkNzc1NzNkLCAweGM5NGNhMGI1LCAweGE2YmU3ZmVkLAorCTB4ZWIwNDliZWIsIDB4YmJhZTNkYWIsIDB4ZTk1ZGJlMWIsIDB4ZmQ3NmJiNzksIDB4YjljNDA4ZGYsIDB4MTVmZjViOGYsCisJMHhhZWVmZjc4MSwgMHgxOWRkZmNmYywgMHg1ZTgwYWI5MywgMHgxMjAyNmFlMSwgMHhmNTQ1ZDMxOSwgMHg1NGJmOWEwOSwKKwkweDg5MzlkNmZjLCAweDQzMzNkMzllLCAweDZmMjVlNWNlLCAweDllMmUzOGIzLCAweGZkZTdjZjZhLCAweGVkNWMwOWRlLAorCTB4OTYwZGM3NTEsIDB4NWUzMDhhZmEsIDB4ZTE0N2Y2NDUsIDB4N2IxZDYwYmQsIDB4NzNjNDQzNmYsIDB4ZjNjZmM5YmQsCisJMHgyNDNlYmNmNCwgMHg5ZDcwZWQwZCwgMHhmYWYzYWExOSwgMHhmYTJkMWYxZCwgMHgwODgxZjIxZSwgMHhhNjc4ZWY4YywKKwkweGNjM2M0NGZkLCAweGYxOWQ4ZmY1LCAweDA5NDU3OTNmLCAweGVkYmQ3N2QyLCAweDlkZjQyNDZmLCAweGJkZjVkYWMwLAorCTB4ODZkNzdjYWEsIDB4NzA1NmZiZTAsIDB4NWZmNmFiMWYsIDB4MmEyNWNhMzIsIDB4NGYxMDVhYzcsIDB4ZGFlMzM1ZTQsCisJMHhkYTRhZjkxMCwgMHhlZjA3ZGNmZSwgMHg1NWRmOTRkMSwgMHhiZTUwYzAwMiwgMHhkMDc0Y2YzNiwgMHgzY2ZjOTU3NiwKKwkweDhkZTQ0ODQ0LCAweDkyYWVkYTBlLCAweDY3ODkxZjlmLCAweGU3OGYyYjI1LCAweGIwOWYzZGY1LCAweGZmMjhiYTdjLAorCTB4N2ZhYzRjZTMsIDB4MWM2ZmU4OTUsIDB4NzkxNjRmMmIsIDB4MjJkNWRmZGUsIDB4OTYyMzc4OWYsIDB4MjVmNjhhNjcsCisJMHhjNjIzOWYyYywgMHhhZGVkNjRhZiwgMHhhZGU0ZmVhYywgMHg3YTA5OWNmZiwgMHgzM2Y3ZTA4ZCwgMHhlMDljYjhkMiwKKwkweGZlNTE1MmVmLCAweGJhMmI0Y2VmLCAweGJhOGViYzY4LCAweGYxMDdjYjljLCAweDFkYzU1NTBlLCAweDg1ZGYyMmQzLAorCTB4NjEyNmRjN2QsIDB4OWRlZDYxZWMsIDB4OWZlN2I0MDYsIDB4MGRjYjY5OGQsIDB4ZTIyZjJmYmQsIDB4NTZlNTljN2EsCisJMHg3YmFhZjM4YywgMHg5OTc2Zjg3MSwgMHgxZTgxM2JjNywgMHhlOWZiOWNiMywgMHhmYTBiNjQyYiwgMHg2NWVmN2E2MSwKKwkweDNkMjA3ZTdjLCAweDk3ZmFlNTcwLCAweDU3ZWNmODU1LCAweDQ2ZDNkZmNlLCAweGVmMWQyNTQ3LCAweGYxMTMwZmRjLAorCTB4ZDYxOTAyN2UsIDB4ZWUwMmYxODksIDB4MjdjNDQ5MzQsIDB4MTE2YWJkZTAsIDB4NDU5NzE3NTcsIDB4OGU3ZTcwMWMsCisJMHhiZDgyMjk3YiwgMHgxM2IyN2FhNywgMHg5N2NhZWZmOSwgMHg2ZWJiN2Q5OCwgMHhlZjI4ZWJjYiwgMHhkYTBhY2E5NiwKKwkweGVhMWViZTk3LCAweGU5ZjAwNzVhLCAweDJmNzdiMmI2LCAweDg3ZGZhZTU3LCAweGM1MzFmNGZiLCAweDgxNjBmZGM2LAorCTB4YmNmMGExNTEsIDB4M2RmYzNmYjMsIDB4ODUxN2YxNjksIDB4M2ZmY2JhYmYsIDB4NWRhZDdmMGMsIDB4NWZkN2RjNWQsCisJMHg3ZmYxODU3ZCwgMHgwN2U2NTZkZCwgMHhmZDNjNzNiNiwgMHg3MzE0YTc0OSwgMHhmMDAyM2Q3OCwgMHgzM2EyYjczYSwKKwkweDIwODY1YTNiLCAweDc3OGM0ZWVlLCAweDI5ZGY5MGFiLCAweDZmNTZmMzgyLCAweGRlMDA5NTgzLCAweGRjY2VhNWJiLAorCTB4NWZlMGMzMGYsIDB4OWYzOGFlN2IsIDB4Njk3MTU0NDEsIDB4ZjdjM2ZiM2IsIDB4ZjdkMDRiZTksIDB4ZmE0ZGZmZDMsCisJMHg4ZGZiZDQ0ZSwgMHgxZjFiZjA3NiwgMHgxNWU1ZWY2NSwgMHgxOGM5ZmU3NywgMHg0ZWY0MWYxYSwgMHgwZjA3M2IxYSwKKwkweDMxN2U2NzZlLCAweDJjMTcxNzExLCAweDcxM2MzMmI3LCAweGQ1NWQ1M2ZmLCAweGZmYzFlMzNiLCAweGM0YzNmNjI0LAorCTB4ZmUwNmQyNDgsIDB4NzZkNzRhMDQsIDB4YTA3NmQ3NGUsIDB4NDFiZjQxNmIsIDB4MTc2ZDE0M2YsIDB4ZmE0MWJlMDYsCisJMHg5MTJlMmMyNSwgMHhmZGI3ZTljMywgMHgyNWUxZmFlMSwgMHg3ZmUxZmFlMCwgMHhhOWJiYWUxMywgMHhkYmZlOGMzZSwKKwkweDRlZDAyMjE3LCAweDNmZjM4NWEzLCAweGJjMDU1YzM4LCAweDBlMmZkMzIzLCAweGZmZjRjOGU3LCAweGQzMjM5YzBjLAorCTB4NDM5ZDk1MTUsIDB4ZjkyMDdiYzAsIDB4OTg4ZmM1YTQsIDB4NWE3ZDk4NzcsIDB4ZTlmNjRkZjQsIDB4NGY5YzE5MjMsCisJMHg4ZjE4ZmRlOSwgMHg0YzdiYzVhYiwgMHgyN2JjM2Y3YSwgMHhlZjFjNWZhNCwgMHgzMGZmZjJlYSwgMHhkMzcwYjVkZSwKKwkweDlmZGNiNWE2LCAweDk4NWVmZGFiLCAweGZiYmYyMDNlLCAweDdmZjhlMDU2LCAweGIwYjA0ZmNkLCAweDdjYWFiZjYxLAorCTB4NTRiN2ZhZjEsIDB4ZWYzYzRiZTUsIDB4NDE1Zjk2NWYsIDB4NWJmZmZiZDgsIDB4NTdlMTA1ZmUsIDB4MmFmY2Y5OTgsCisJMHhiNTFmZjgxZCwgMHhjNDM3NDFmMiwgMHhjN2EwMjNmOSwgMHg3YWZlNWYxYiwgMHhmOTMwODdkNCwgMHhiNzhjNmNlYSwKKwkweGU1YWY4ZGJhLCAweGZmN2ZmMThiLCAweGJlOTQ3YmU0LCAweGY2NjA2OGJlLCAweDNmZmI2M2Q2LCAweGZkMzkyODM3LAorCTB4NzllMTY1ZTksIDB4ZDA4NDcxMWQsIDB4ZWZmNWMyZDksIDB4NWFjZjQwMWIsIDB4NTRmYmQ4NDgsIDB4YTYwZmZhZGEsCisJMHhjNjMwN2IzMywgMHgzMGJlNTE0OSwgMHg3MTBjNGNkNywgMHg5ZGNjMWY5NCwgMHhjZjRiZWVjYiwgMHgwYzYzMDcwNSwKKwkweDJkMTczZWE2LCAweDNlMjdhOTlmLCAweGQyYmI4Zjc4LCAweGQwOTlmN2EyLCAweGZmYmVhOWVmLCAweDc1ZWZlMjZlLAorCTB4ZDU1OGI4OTMsIDB4MjFkOTc4M2QsIDB4OWNkZjljNjMsIDB4YmQyZmU2MTIsIDB4Zjc4NmQyYzUsIDB4YmExZGU3ODcsCisJMHg2MGY3ZGNlYiwgMHgxNGY0NmYyZiwgMHg3MTc3YjhiMSwgMHhiYWY3ZjBmZiwgMHgzZTgzZjEyYiwgMHg5YzJhN2EwOCwKKwkweDVmZWUyNGZiLCAweGZmNDA2MzVmLCAweDJhZGRiNmJhLCAweGNhNjY5ZmJlLCAweGQ5YTM4YjEyLCAweGM1MzNlMmMzLAorCTB4M2JlYmE0ZmUsIDB4Zjc2N2NhNjQsIDB4NDhmN2UwNjAsIDB4YmUwYzFiMmEsIDB4NjdhMGI5ZTEsIDB4YmIzZDQ3ZWYsCisJMHgyZTQzNjRiZSwgMHg5MjdlYWZlMCwgMHgxYjk0ZGM3NCwgMHhhZmQ0ZWYzYywgMHhkN2I2MGJmZiwgMHg3YTZkNjdmMiwKKwkweDRmZDVmNmI5LCAweGJkMjEwZjFhLCAweGIxZDE3Mzg4LCAweGI1ZTYxZjQ2LCAweDEzMDVkNmY2LCAweDkzZmQxN2ZmLAorCTB4NmRlMmZmNjMsIDB4NTdkYzc0ODIsIDB4ZDBjNzBmOGUsIDB4M2IxYmZiNzUsIDB4ODI3YjJkZmYsIDB4YmIwODIzYjAsCisJMHgyMTRlZDY4MiwgMHhiZjc4ODhmOCwgMHhlMzZlOTdkMiwgMHhhMjk2YjJlZiwgMHg1OWU4ODNkZiwgMHhjMWVkZjgyYSwKKwkweGQ3ZjlmY2ZlLCAweDI3ZDcxN2U5LCAweDYxZmZlNWQ1LCAweGY0Yjk3Y2ZlLCAweGU0YzQ5YjVmLCAweDhmZWU5NmFhLAorCTB4ZWQwY2ZkNTYsIDB4YjViZTgyY2YsIDB4NjIwMGJmZjQsIDB4MGJmOGU4NTIsIDB4MjdiYzI1ZWEsIDB4YWI1NTc3M2UsCisJMHhjZGY0OWM2MSwgMHhlNWI1N2RlOSwgMHg5YjgzMDY2NCwgMHhiMTVjMmU0NiwgMHgzYzc4NTAzYywgMHgwYmU3OGM4NywKKwkweDBlYzZiYzkzLCAweDg3ODEwZjc2LCAweGVmZDVkM2FmLCAweDQ4YmM1MzAzLCAweGFiOTcxNzE5LCAweGZhZmZmMmVhLAorCTB4YTJlNGUwMzksIDB4ODkxNzI2NmYsIDB4Y2I0ODlmNGEsIDB4ZTU2ZWI3ZTgsIDB4ZmU1NmViMTIsIDB4YjkwZWViOWIsCisJMHhkNjQ4YjRhNywgMHg0MGUzZWYwNSwgMHg4MWM0MzVmYywgMHhmZGQ5NzhmNiwgMHg1NmNjZWFkNCwgMHg1MjAzZGRmYywKKwkweDdlMDI4ODEyLCAweDk5NWVlYjc3LCAweGRlOGU5ZWZkLCAweDc5MGU0ZmExLCAweGY4OGJhZDNmLCAweDVjN2EwMDNlLAorCTB4M2JiZDllMzUsIDB4NzY5YjhkYTQsIDB4ZDVlYTc4ZjMsIDB4YmY3OGRkOTYsIDB4OWEwZWZiNTEsIDB4ZjM3NmNiODgsCisJMHhhMWVmYjRmZSwgMHg5ZGUyZjY4OSwgMHg2ODdiZWQwMywgMHgxYzc4MzI1MywgMHg2N2M5M2U3NiwgMHhlNzE3Mjk3MSwKKwkweGNmMjBkZGEzLCAweGRkMzVmYzQzLCAweDVkYTIzNTVmLCAweDRhYzdjNmUxLCAweDA1YTRmM2VlLCAweGEzMjczMmYxLAorCTB4OTc5OWRmMWYsIDB4YTNiZTcxNzEsIDB4ZDMyZmZmMmUsIDB4ODFkZDZjYWYsIDB4OTRhZWQ4ZjcsIDB4M2E2NDQ3N2UsCisJMHg4MjdmNDBkYywgMHg5YmYxZjcyZiwgMHg2ZmM4NGM1NywgMHgzZGYzM2JjNCwgMHhmN2MxOWU2YiwgMHgyNGJlN2E4NywKKwkweGQ0YmQ5N2U4LCAweGJiMTNlMzNiLCAweDA5YzQzNWQ4LCAweDU2NGRiZDI3LCAweGM3NzFkNzhhLCAweDFiYWY2ODNjLAorCTB4Zjc4NWM0N2IsIDB4ZTNiY2M3NzYsIDB4OTI3Zjg4ODAsIDB4YzMyOWMwNzcsIDB4MjMzZTg1YmMsIDB4ZmYyMDliZjQsCisJMHg3OGQ5ZjdlMiwgMHhmMmU1ZDU5YywgMHgzN2Y1MmJiOSwgMHg4Y2ZjYTdmZSwgMHhiNzVkNWVlMiwgMHhiZjA0NTdjMSwKKwkweDEzZDllMGU3LCAweGExMDNiZjgxLCAweDE5OTNmZjlkLCAweDkzYmU4YmJhLCAweDdhZTUxMWRjLCAweDhiMzRmMDEyLAorCTB4NWVmMTA5Y2IsIDB4ZGVjYzg1NzIsIDB4OTRlZGVmNDksIDB4ZWViODVlZDEsIDB4YWJmYjdlN2YsIDB4ZGI0Yjk1NDcsCisJMHhiZDZkZWExNSwgMHgyMjY1Y2Y2MSwgMHg3YmIxZDdhZCwgMHgwYWU1ZjkyZCwgMHg3OWMyNDljNiwgMHhjMjg3ZWMwZCwKKwkweDdmYWRhODllLCAweDI5N2IyOTRhLCAweGUzNWJlZDAzLCAweGRlZGEzZGYxLCAweDA2N2NkOTg3LCAweGZhZmQ1N2MyLAorCTB4NjAzZjhlMDAsIDB4N2ViZjFmMzksIDB4ZjQyZDkxNmYsIDB4MTlmMzk1OWQsIDB4ZGI0M2U3N2QsIDB4ZGYxMDczMjksCisJMHhmZjE3NGI5NywgMHgzMzJkY2VkNywgMHhhODkxZTI2NSwgMHhiYzkxY2Q3YywgMHg0YzI1ZWY0YywgMHgzYTQwNWRmZiwKKwkweDAyNDQ1ZDMxLCAweGJiMDhiYTk4LCAweGQ4OTRiMGNmLCAweDljNGU1ZDMxLCAweDVjNTVhZTk4LCAweDM3MTgxOTVkLAorCTB4ZjhjMDQ4MTQsIDB4MzlmZjE3ZDMsIDB4ZGNlNmU4MGEsIDB4MjE1YWUzNzUsIDB4ZjJkYmYxNDYsIDB4YmVmNTY5MjMsCisJMHhiZDg1M2M5ZSwgMHgzZmMyZjQ5NywgMHhkOWY0MDc3ZiwgMHhjYjg2M2ZmMywgMHhhMjQ3MWJlMiwgMHgxODQ4NjQxYywKKwkweGE1N2JkMzNmLCAweDU0ZDdiYjMyLCAweDE3ZGM1ZGYyLCAweDMyNWRmZGUyLCAweDk2ZTFmOTg5LCAweGZlZTI2NjI3LAorCTB4YzRjZGYyMDksIDB4ODI2ZjgyNmQsIDB4YjhlNzM5M2YsIDB4ZGNjM2M1OGUsIDB4YzY3YmUxMmEsIDB4NmUxZDdlZWQsCisJMHg5OTE1OWNiMSwgMHhiOWRkZjg1ZSwgMHgzY2FjZGRmNiwgMHgyYmRhMmVhNywgMHhkOGNlN2NkMSwgMHgyNmJlNTYwOCwKKwkweDRmZjcwYmRhLCAweGVlM2YxMjE2LCAweGZiNzBjNWNiLCAweDRiZmI4NjQ0LCAweGRmOGEyZjhjLCAweDgyMjdhMDBiLAorCTB4YmY2ZDEyYTEsIDB4ZWVjY2MzYTIsIDB4MzBmZjEwNTEsIDB4NzBiOWZmZTAsIDB4NGYxNzBhN2UsIDB4ZjFmMTg0MzMsCisJMHhiZjE5NDNkMSwgMHhiNmE2NWQxZiwgMHhlNWU1MGM4NywgMHhkZjY1MjlmNywgMHgwY2I0NzgwNywgMHg4MTBkNjQ3MSwKKwkweDliOWQzMWZhLCAweDNiMDQyYzFlLCAweDlmODA4ZTkwLCAweGI3YjFiM2U2LCAweGI0NTM1ZmEzLCAweDFiMjk1MTdiLAorCTB4OTU5ZmY1MDEsIDB4NjdiZmJjNTgsIDB4NGM2ZmJmMmYsIDB4ZmVhMTA5MDIsIDB4Nzk0YWI1YjEsIDB4MWEyYmQ0MmUsCisJMHg0MGQzZjhjMiwgMHg1MWRmODU3MCwgMHgyZjM5ODY3NCwgMHhkMWQxZjg4YSwgMHhiYjQzNjY3MCwgMHhkMjc3YzEzYywKKwkweDdlNTg5NTllLCAweDZmNWJlM2YyLCAweDVmNDE2OGRjLCAweGUzZjQwNzgyLCAweDQ0ZDcxNTE3LCAweDkxYjQ2ZjE4LAorCTB4ZmZjYzBiMTAsIDB4MWI3ZWZjYTcsIDB4YmIwMGM4NjksIDB4NGNjN2FhZTgsIDB4M2UyZmQwM2EsIDB4ZWUxOGUyYTIsCisJMHg5ZTgxZmNmNywgMHg5OGZkMjFiNywgMHhmZDIxOWI5ZSwgMHg0MzM3M2QyMywgMHg5YjllOWM3YSwgMHhjZjQxM2QyMSwKKwkweDM4YWU5MGNkLCAweGNjYzc4NzZmLCAweDhlMjE4OWM5LCAweGYwYmZkMGI5LCAweDViZTc2OWY3LCAweGQ3ZjE4NDM5LAorCTB4MWFmN2YxYmUsIDB4MTRmYmZjNzEsIDB4MGZiN2MyMTcsIDB4ZmUwODdiZGYsIDB4ZDFiM2VkZGUsIDB4OGI5ODk0ODEsCisJMHhkZWNmNWJkMCwgMHg3NDlmYTNiZiwgMHhmZjA4YjgyMCwgMHgwYTdjYjZhMywgMHg2ZWVlNmJjNywgMHhkY2ZmY2EzZCwKKwkweGNhZDQ3Zjc2LCAweDg3MmI3YTkwLCAweGNlN2RiMTE4LCAweGEwYTMyNzBiLCAweDFmNWI2ZWZmLCAweDVkMTIxZDdjLAorCTB4Y2IxZDRjZjIsIDB4YjlmYzdjYWYsIDB4ODI4ZTM3MWIsIDB4MGZiZTNiZjksIDB4ZjlmNzQxNzQsIDB4ZGI3MzQ4NmEsCisJMHhmYzAwZmI3ZiwgMHgxZmVkMmE1ZSwgMHhhNDdhMjRlMywgMHgyZjNjNjZjMCwgMHg4NWExZDY2OCwgMHhiM2Q3NTg4MywKKwkweGEwOWI5ZGQxLCAweDBjMmZiM2ZkLCAweGJlNTA5NTg1LCAweDAxYmVkODQzLCAweGFkYzI5MjNhLCAweGU3YWUwMzc3LAorCTB4MTBhMDUzNDYsIDB4NzhkZDBiZWUsIDB4YTcxYjBlNDEsIDB4OGE1MjlmN2QsIDB4N2EwNjRlNzAsIDB4Y2FkZGZlNDMsCisJMHgwMjVmNDY1MywgMHg3Zjc0ZGY2ZiwgMHhlMjIzZmI2YiwgMHhhNWUwMTVmZCwgMHhhZmE1YzgwYSwgMHhhYzJmNDBhMiwKKwkweGVkMDRmMWU0LCAweDA2ZmQ4N2JiLCAweDI0MzllOWQ2LCAweGRhYmRmODEzLCAweGZkZWEzMWQxLCAweDQ5ZTM4YmI3LAorCTB4OGQ3YjM5YTQsIDB4YjNkN2MwNGUsIDB4ODMwZDRmN2IsIDB4N2UyOTg5ZjcsIDB4YzU3YmMxODYsIDB4NDU1Yzg2ZGIsCisJMHgzMWVmN2Y0MiwgMHg4Zjk3ZWM2NywgMHhmNTg3MTgzYywgMHhlNzY5ZjdmMSwgMHgxMDE1NmQ5MSwgMHhiY2RmMzMzNywKKwkweGQyNTgwZGZmLCAweDBhZjFkYjQyLCAweDljNTk5Yjg4LCAweDc0ODQxZDI0LCAweDE5Mzk5Mjg5LCAweDdkYzQ2NWUyLAorCTB4NGEyMzY1ODMsIDB4OWE5NmMyMGYsIDB4N2Q0NGFmNjEsIDB4NGM5ODE0YWUsIDB4MzcyODdjODgsIDB4ZDg0N2YyNDcsCisJMHg1NThhM2M4NSwgMHhhNTI0YTdlNSwgMHg1MzRmZWFhYSwgMHhkM2U1NTRiMiwgMHg5NTU0OGM0NywgMHhkODY3NzE4YiwKKwkweDQ2ZjU1NDBiLCAweGMyODYwNGM3LCAweDgzYWU4ZTc5LCAweGE0ZmYwM2JkLCAweDM5ODZmMThjLCAweDdlYjkxYzJmLAorCTB4N2NjZmNkMjQsIDB4NDNiZTBlNmEsIDB4OWYyZjJjZjksIDB4MTdiOTVjZjksIDB4ZTE0M2QxZjAsIDB4ZDUwYWE0NjksCisJMHg2YzFmOTJlOSwgMHhkMzNhMTA3ZSwgMHhmNzZhMTc5YywgMHhhMWQwNzEzZSwgMHhlMTc5YzY1YywgMHg4MTg0ZTcxMiwKKwkweGVkMTY0ZmRlLCAweGNhMDRlN2I1LCAweGJlMDAxZjM3LCAweGQ5YzVmYTM5LCAweDNlZGJmMDM2LCAweDE0Y2JmNjNiLAorCTB4Y2RmZDQ3ODgsIDB4MGNhZWZlMTAsIDB4NDQwYzNmM2YsIDB4NDNmYjdkMzcsIDB4YmNkZDE4NTIsIDB4YzMyNzkzMjUsCisJMHhmMjQ0MGRkMCwgMHhlOTY0M2EzMiwgMHg3ZWVjYzNjYywgMHhiNWYyOTVkZSwgMHhhMWFmODE0ZiwgMHg0MjQzYzBiZCwKKwkweDZiNTc3ZjdmLCAweGI0NmQxYmRmLCAweGIwMzZlNmZmLCAweGMzMmJiZDQ3LCAweDdiYmVhNTBkLCAweDZmZTEyYjkzLAorCTB4NjRlZjQ4MzksIDB4OTNiYmI2ZjksIDB4MDdiYmYwZTMsIDB4YjczNzYxZjQsIDB4Yjg1MjBkZjcsIDB4ZmZiYjU1M2UsCisJMHg2MGMyZTRlZSwgMHg1Yzc3NTkzOSwgMHgyOWRjOWY1NSwgMHgxYmYyYWIzNSwgMHg3YmY5ZDUzMywgMHhkYjQzOWI0YiwKKwkweGFkOGZhNDBmLCAweGQxODk3ODdjLCAweDZlZjcwMzk1LCAweDM3YmZiMGE1LCAweGZmZjNlNjJjLCAweGQ1ODAwOTAxLAorCTB4MDA4MDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4MTliNWZmMDAsIDB4NjU1NDU0MGIsCisJMHhjZWY3YmJmYSwgMHg3ODYwMTkwYiwgMHg3NzQyMTAyOCwgMHg4NDBhNDQ5OCwgMHhiMDI4NTc4OSwgMHhkNzFlYTA4ZCwKKwkweDhmNGMxYWRhLCAweGU1OTM1NjU0LCAweGUwNGQ3OTAzLCAweGUzZDhmNGI2LCAweGI2OGZhZDE4LCAweDY5NWI2ZDA3LAorCTB4OTY1NjM1NmIsIDB4YjEzOWU0ZTcsIDB4MzYyNTQ2NDQsIDB4ZWI0OTViYWUsIDB4NjZhMjU0ZDYsIDB4NDJkODk5ZTQsCisJMHg3YTI2NzA0YywgMHhmNzVhOWQ2ZCwgMHg1ZWZmZmVmYiwgMHg1YjYwMmU2NywgMHhlNzRlZDY5ZCwgMHhmZmZmZWY5ZiwKKwkweDI3ZWY3ZmZiLCAweDcwY2ExNDkwLCAweGY2MDgwMGNlLCAweDk5NzBjY2FjLCAweGQ2ZjcwNjAxLCAweDgwMThlNDFhLAorCTB4ZTJlZmY0ZDMsIDB4ZjliOGRhZjAsIDB4Y2YwMzgzN2EsIDB4M2EzODAwNTcsIDB4MDFjZmUzY2MsIDB4MDMxNDAxZDYsCisJMHg3YjgxMjk1YywgMHg1OTE0ZjNhMiwgMHhmZjYwZTc2MCwgMHgyZmJkZjE2NSwgMHgwMDQ5MDgwMSwgMHhkZThkMTc5ZSwKKwkweGUzODQ1NmVkLCAweDZlNjcwNjVjLCAweGYwOGQ5ZWY4LCAweGQ5MTgwNjRlLCAweGJmZWZmZjcyLCAweDI1ZjVjMjJhLAorCTB4OGMwZWUzYjAsIDB4YmQwZDQzYzQsIDB4NWM3NWQ3OWIsIDB4OWZjZDcxMTQsIDB4NzdkMWQ3MDQsIDB4OTg4MDk2NzksCisJMHg1NTcwNmI4MCwgMHgwMGUyMDdiNCwgMHgzYzYzNmE5YSwgMHg2NzllM2U2MiwgMHgyZTk5MGU4NiwgMHhhNmYxYzgwNCwKKwkweDAxNTI5YmI1LCAweGMwMjI4YThlLCAweDc4MDc0NDM5LCAweGUzZWYxNGEwLCAweDI0NWYwNDFiLCAweGE0ZWYzOWE3LAorCTB4NjdjOGI5ZGYsIDB4ZTdjNzJmY2MsIDB4MzViMDMyNDUsIDB4ZTk5NDMyYmYsIDB4N2VkNzdiYzYsIDB4YmYxY2U3ODcsCisJMHhjZTkxYTIwMywgMHg4ZjRhODAzZiwgMHgyZTVjNGMwMywgMHgxOWJkYmIwNCwgMHgzZjIzM2ZmZSwgMHgxODEyYmQ0ZCwKKwkweGYwNjE5ZjkwLCAweDYwNWFiYTFkLCAweDI1YTljY2Q3LCAweGE3ZTkyYjAwLCAweDA2MWRmYjRjLCAweDE5NmZkODkwLAorCTB4YjI5NTdmNzAsIDB4ZTU3Y2IyYmYsIDB4ZjA4YjEwYTUsIDB4MjA0MGZkNTYsIDB4YTcwZmJkOWIsIDB4N2ZkNWZmZjEsCisJMHhmMTk4Mzc2ZiwgMHhkYTUzZjU3YywgMHg1MzBmNDI3ZCwgMHhmYmU1MmY5MCwgMHg3N2IzZjAzYSwgMHgzZGUyNzdlYiwKKwkweDIzNWVmODUzLCAweDg0OTlmZGRjLCAweDY5NzYzNmVmLCAweGM3MjQ1ZmJmLCAweGUwZTYwZDI0LCAweDM4MjgwMjhmLAorCTB4OTE2ZGIxMmQsIDB4ZjEzNjZiZGUsIDB4ZGY0YWU2ZjcsIDB4ZWEwOTdiYmQsIDB4YzkyNWU5YjEsIDB4ZDFhZGM0NmUsCisJMHgwMGUyZDNkZCwgMHhhODM5ODNmOSwgMHhmMmYxZDRlNCwgMHg3YThjZGE2YiwgMHhhN2MzMGMyYSwgMHhiZGYzNGI3NiwKKwkweGNhMTc1Zjc0LCAweDVlMzE5ZWE4LCAweGUyYzk2MGNlLCAweDVmMWMyY2Y4LCAweDBiZDdjNTczLCAweGY3MzVmMTAxLAorCTB4N2VkMGQwZTgsIDB4MTE0NmNmMDAsIDB4Y2YzYzA4ZTQsIDB4ZjJhZTMxZWQsIDB4MDdmNGMzOWEsIDB4ZmNjNzljMmQsCisJMHg2NjEzMmY5ZSwgMHgxZDc1ZjJlNywgMHgxY2VkMDFkMSwgMHg5OGJmNzAyZiwgMHgwOTNlODAyMSwgMHg2MGI1NDFmMSwKKwkweDVmNGI4ZWRmLCAweGM5MjU3MjRmLCAweDlmMDA0ZmJmLCAweDU4OWVjMDVjLCAweDVjZmQ0MjY0LCAweDdkYTM5ZmMxLAorCTB4OGZlMDI0MzMsIDB4ZTExZDZjOTQsIDB4ZmRjOGE4NTksIDB4N2M3ZmQyOGEsIDB4OGI3N2UwMjMsIDB4NDM0ZjE2N2IsCisJMHhkNzUwZTAwYSwgMHgwY2Q0M2ViMiwgMHgwYzZkOTA2YywgMHhlOGYwMTJkZiwgMHhmMTdkMmY0OSwgMHhhNDE2ZjRjZSwKKwkweDYwNDkzMmYzLCAweDFmMTdkZmY2LCAweDdmMTAxNjFhLCAweGQwYjQ0NTVmLCAweGVmZjdiMDI2LCAweGJlNTVmN2E0LAorCTB4NzRjZWY0ZmEsIDB4OGU2YmUzMzcsIDB4MjZmNTEwNjUsIDB4NGU5MDJlMzgsIDB4NDc5NzhmNDcsIDB4MTgzYWFlNTgsCisJMHg3MTJiZjU1NCwgMHg5YzdmMjE3NywgMHhmYjNlZGQyYiwgMHhkMWRiZjQxMiwgMHgyMjMxNjBhNSwgMHg2ODRiOTdiZCwKKwkweGFiYzMwODM4LCAweDQ5YWI4ZmRjLCAweGFlNTEzM2Q2LCAweGU4ODEzZjgyLCAweDZlMTc5NjZjLCAweGU0YmJmMTkxLAorCTB4OTc0MTdiZDYsIDB4MWQzNzIxMTgsIDB4MmY1NTMzZjcsIDB4ZDNjNzFjYWEsIDB4ZjcyZGUyYTEsIDB4ZDFiZjkwM2IsCisJMHg5ZmIzMDIxZCwgMHhlY2NjYmI0NiwgMHhlNGZjYjFiMywgMHg3ZjEwNGI4MywgMHgwYmIyNWZhMywgMHhlZWIyY2Y0OCwKKwkweDdlNDg0N2JkLCAweDQwM2I2YjFkLCAweGU3NDAxZTc3LCAweDJlYjY2ZWRhLCAweDUyN2Q5OTMzLCAweGQ5OGJlMzFlLAorCTB4NDE0Njg4YWQsIDB4NjA1NmFkN2MsIDB4N2MzNWE3YzYsIDB4MGM3YmU2MWUsIDB4N2MzZjUxYmMsIDB4MzgwNGNlMDYsCisJMHg5ZTdjZWIxOCwgMHhmYmYzNWJmOCwgMHgxMDk2ZmJjZiwgMHhlM2NhMWJiNSwgMHhhZDkwMWY5OSwgMHgzZmE2MWI5ZCwKKwkweDQ2NjAwMGRmLCAweGEzZGI0M2ZhLCAweDNjMzA0ZmJkLCAweDYxMjVhZjY4LCAweDI3YjEzZDdiLCAweDllMGI3MGViLAorCTB4Y2Y1Mzc4OWYsIDB4YzU1Zjc1Y2MsIDB4NDE2ZWE3YzMsIDB4NjhmNmNkNzgsIDB4MDkxM2U3MjYsIDB4ZjNhNTQ5ZTAsCisJMHgzZDdiYTYyNywgMHgxOGE1NjE3OCwgMHhiOTIxNmZlYSwgMHhiN2Q4YzY3NywgMHg0N2YxZjllMywgMHgxM2JiM2ZhNywKKwkweGE3NjdkYWUxLCAweGYyNGM4OWQ5LCAweDdkZTUxOTFmLCAweGRhMDExZDNjLCAweDdkOTUzZTdmLCAweGVmMWMyOTA3LAorCTB4YTUyZmM1MGEsIDB4NTdkYzY2NjcsIDB4MjRjZmU3NGUsIDB4YWE4ZjA5ZGEsIDB4YTM0N2ExYmYsIDB4ZmFmMjgwMWMsCisJMHgxNjc5N2MxMiwgMHg4MjkzYmQzNCwgMHg4N2M0NTA2NywgMHhjNzlkYzRlYiwgMHhkYmNiYjQwNCwgMHhjNDgzYWUwYywKKwkweGZlNDdlYWY3LCAweGY5MGNhODdhLCAweDM3ZTY3YWE5LCAweGZhNDRjZjBmLCAweDBjOWJkZjZhLCAweGFmNTg0ZWY0LAorCTB4NmM0MGUyZTMsIDB4ZGZmYzk3MjAsIDB4OTE1ZmZkYzYsIDB4Mjg4ZWRkNGYsIDB4NzExMWM3Y2IsIDB4NWUyM2ExYTYsCisJMHhhNzc1MzcwMywgMHg4ODhlM2U1YSwgMHg2NWMwNzUzNywgMHg4ZTgyZjUwYywgMHhmYzU3YTlmOCwgMHgxZDc0NWVhYSwKKwkweDIwMWFiYTI1LCAweDg0MjJlM2MwLCAweDA1NTc2NDBjLCAweDc4YTBlMDkyLCAweGM4YzdiYTEwLCAweGNlZDYzZmU0LAorCTB4ZDE5MTY1NDYsIDB4OGI4MjJmNTEsIDB4MjI0MTc5ZTIsIDB4NmZjODUyOTgsIDB4YzE3ZTVjNWQsIDB4NzEzZmE2N2IsCisJMHg5MjY2Y2ExNywgMHhmYmY1NDEzNSwgMHgyMjMzODVhYywgMHhmMWJmYjNlZCwgMHhjZGNmYjIxNSwgMHhjMzlmNjY0NiwKKwkweDhkMmYzYzUxLCAweDM5MWZmM2M1LCAweGMyYmY3ZDllLCAweDg3ZjMwNWY0LCAweGY1YTRmOTMzLCAweDE3Mzg1YWRmLAorCTB4MGFlZjE0MWMsIDB4OWJjMmU0ZGEsIDB4ZjQ1MTZkNzAsIDB4MjljNTJjNzIsIDB4MWRlZTQ5NTgsIDB4YzAzYWVmZjcsCisJMHhlNmY1YjllNCwgMHhiZjc3ODRhMywgMHgwZTBmZTk5OSwgMHgwNTA3Yjk3MCwgMHhmN2Q1Mjc5ZSwgMHhhMDQyOTg1NiwKKwkweGI3N2EyNDJiLCAweGZkZDU3YTMxLCAweGYzODcyZGMxLCAweGUwZmVmODVjLCAweDgwNzkzOTBiLCAweGYyNGNiY2Y2LAorCTB4ZTUwNWZlMGYsIDB4N2ZjNjJhNzMsIDB4M2I1YzM2ZWMsIDB4ODUzYmJmZjcsIDB4N2E1OGUwZjIsIDB4ZDk0NzViZWIsCisJMHgyYzNjMmE3YiwgMHg0ZjU0MzhmMCwgMHhmN2ZlZTA3YywgMHhhMjY0Y2U5OSwgMHg4YjA4YzMxMywgMHhjZDc3MDMwZiwKKwkweDJiOWJmMjYwLCAweGZlOTFjNmU1LCAweGY0YjQyNzgzLCAweDdkNTNhNThkLCAweDdkNGZhNTVmLCAweGNkMzdiZDVmLAorCTB4OGUzOTMyMmEsIDB4OTQ3OWZjMTgsIDB4OTBjYzVmZjcsIDB4YzQ4ZDdjMzUsIDB4Y2RlMmYzZmEsIDB4NzVlMTZmYjQsCisJMHgxMWMyMDI0NCwgMHgzZjQzNTZmNiwgMHgyNjM1YmY1MSwgMHg1ZjQ4ZGI4YywgMHg2ZjYwOGQ0ZCwgMHhhMWVmYjYwMywKKwkweGNmYWI4OWI4LCAweDI5ZjVlNzg1LCAweDAzNzIyYjJmLCAweDc4ZWQwOWE3LCAweDkwNjc2MmIxLCAweDZlZWNjODk0LAorCTB4NWViYjcwMTEsIDB4YWJlZGM0YWMsIDB4ZTgwZjQzYTAsIDB4NzVjNDQ3MmYsIDB4ZmRhMDM1YmYsIDB4YTAzYzc3MGQsCisJMHg1ZGM2NDU3NywgMHg3NGYxNTFjZiwgMHhiYjhmNGZjZSwgMHhhNmM4NGE5ZSwgMHgzMTYyM2RmOCwgMHg5ZTY2YmFiMywKKwkweDdiYjFkMDU1LCAweGY3NGU5MGU5LCAweDQzZWVkY2YwLCAweDFhNzRmMDNiLCAweGNmNDg2ZGVkLCAweDgxNzNhMmUzLAorCTB4NmY1M2U1MTUsIDB4MWY5MWU1ZjAsIDB4MmUzZGRmYTgsIDB4YjBmZWQ4YmEsIDB4ZTkwNTYwNzAsIDB4M2NiZTc0MWIsCisJMHgxYmM0ZWY1NiwgMHgyMzNhYzA0MCwgMHg3N2VlZDkzOCwgMHgyNWY2NWQ1MCwgMHhkNDEyYjhiMCwgMHhlMjI3NGQ0MywKKwkweGRkMTJhYTJkLCAweDNjNzBlNjlkLCAweDUxNjdlMzU0LCAweDVjYTNlZTBlLCAweGY1NWY2ODJiLCAweGEyOWJiNDU3LAorCTB4MzBmZGVkN2MsIDB4YjhmODVhM2YsIDB4NTE1ZGZiOTUsIDB4OThlZWU4YTIsIDB4NTc2ZTVmYzAsIDB4MWQwNmRjZjQsCisJMHg5ZTY3ZjcxMiwgMHhiOTE0Y2I0NywgMHg0NTIyZGQ2MywgMHg0YThkMmRkNiwgMHg5YWM2MGY5YywgMHg1M2YyMTIzYywKKwkweDgyZjUxYmI2LCAweGI3Y2U5OTcwLCAweDAyOGM1Njk3LCAweDlkZmE4YWQwLCAweDVlZmUzZTA1LCAweDUzOWUzNmI3LAorCTB4ZjJjYTU5MGUsIDB4Y2JjYjBlNzIsIDB4YWY3NTE0YjMsIDB4N2E0MGRjMTcsIDB4YzJmZTUxMzUsIDB4MmZjMTJlZjUsCisJMHgwODJiZmFkMSwgMHgxNjAxZDViMSwgMHgwNmE4YWQxZCwgMHgyNzAxY2ViNiwgMHg5YjgxZTc1YiwgMHg5ZGExZjNhZCwKKwkweDgzYTAwYmFkLCAweDlmODI5N2FkLCAweGFmODE3MGFkLCAweGI4M2U1ODBkLCAweGY5ODgzMmRkLCAweDUyYmQ3ZTE4LAorCTB4YjQ1Y2JjYTQsIDB4ZmM3YWUyNjQsIDB4Njc1ZTQ1NzEsIDB4Zjk0NjA3OTcsIDB4OGYyZjlmOTIsIDB4NjE0YWUwNzksCisJMHgyZTRkOWQ3NCwgMHhkZDk5YjM1MywgMHg5MjMxNzJhYiwgMHg1MTc3ZTI3ZCwgMHhiNWExNGRlMCwgMHg5ZGVjMDIwMiwKKwkweGYxOTBjOThiLCAweGViMjBkOTlkLCAweDA3MDJhZTA4LCAweDQ4ZmVlNzgzLCAweDVjMDY5NDc5LCAweDA0ZWU1NzNhLAorCTB4ZDg5YWE5NzIsIDB4NzYyODc2NGUsIDB4NWQzNjRjNTIsIDB4ODdkN2Q2MWMsIDB4NTQxNzFlNTYsIDB4NDlkMjAxYmQsCisJMHgzZWJjNjBmOSwgMHgyY2U4ODMyMSwgMHg1Y2ZjYWU4YSwgMHhkYWYxOTBjNiwgMHgzYTlkZjdiNiwgMHg4NTQ1YTM4YywKKwkweDg0MzYyZDk1LCAweGU1M2Y1OTBmLCAweGYzZTU1OTcwLCAweGQ5MWYwODk5LCAweDliYTlkMjc2LCAweDU5NWU3NjQ5LAorCTB4MTU2M2I3YTgsIDB4MzlkODZlYmEsIDB4MTg0ZGNmMDcsIDB4NGU1MGEzZmMsIDB4NTI4MjRkOTIsIDB4YjE1MTVkNWMsCisJMHg2NzdlODA3OSwgMHg3NGViYWM5NCwgMHhkYmM2NTdlOCwgMHg1NzE5YzU4MCwgMHhkNTlmODAxNCwgMHhlNDY1NjhiMywKKwkweDdlYmMzNTI3LCAweDdhZTE2MzVkLCAweGJkNzA2YmRiLCAweDYwZGE3ZTRhLCAweGM4Y2FjNWYyLCAweDczNzU5YWQzLAorCTB4NmU1ZjI5OTMsIDB4M2ZmN2YwMzAsIDB4YmNlNzJjOWEsIDB4MjIzMjcyODIsIDB4OTg0MTUzM2UsIDB4NDRmNzNjNGYsCisJMHhlNDEwMWMyMSwgMHgxODZiNTY5NiwgMHhmN2MwOGZmZiwgMHg3N2MyMWZjZiwgMHg1ZGViOGE2YiwgMHg1OTRkY2YxNiwKKwkweDUzNGZmYTQwLCAweDY3Njc3OWYyLCAweDI0NWQ4YTU5LCAweDNmODYxNmZjLCAweGQyZDU5MzEwLCAweDUyMDc0NzhhLAorCTB4N2JkMjFmOWMsIDB4Nzc2ZTE4YzEsIDB4NWViOTVhMWYsIDB4MzI5YWI2Y2UsIDB4Mjc1ODFmMWQsIDB4ZmJhZTBmZDgsCisJMHhlMjhmOTc3YSwgMHgwODQ4MjdkMCwgMHhkNTk5ZjNiZSwgMHgzNDc0NDAzNSwgMHg0MjhjODE4OSwgMHhkMTFkZDdkNCwKKwkweDI3NjQwY2M3LCAweGE4MGIxZGFhLCAweDdmYzhhNWJjLCAweDA2YmMwMzliLCAweDk2ZTUxZmU2LCAweDJkOThmNTMzLAorCTB4ZTVjMTA3ZWMsIDB4YTVjYTFlZjgsIDB4ZDJhY2U5YzgsIDB4OGQ0OTcxZTMsIDB4YTVhZDFmN2IsIDB4M2MyYWY2YWUsCisJMHhhMjQxM2MyMSwgMHhhZDBhNDlhNywgMHgxNTM4YmIyMCwgMHgxM2UxOWVmZiwgMHhiOTUzYTdlNiwgMHhhYmYxMmEzZCwKKwkweDZkZWY0ZjY3LCAweDQyNzQxYzY5LCAweGVkMzYxZjg0LCAweDBmYWJlNmY5LCAweGEzNGRkZjUwLCAweDBmNWQzYjY2LAorCTB4MTY5NmRmZmIsIDB4MWFiMDBiZWEsIDB4ZDUxN2M0ZDQsIDB4MWI3NTY3MmYsIDB4OTU1ZmQ0N2QsIDB4Mzk3ZjNlZWQsCisJMHhhZjc4YWJkZCwgMHhmYTcxNDZkZiwgMHgxYjQwZmVlMiwgMHg5ZWMxY2I5NSwgMHgyZmRjNjljMywgMHg2YmZlM2FkNCwKKwkweDkzZTRlN2UxLCAweDc1MDUxMmI5LCAweDkwNWVjYmFjLCAweGFiZTQ0NmJjLCAweDA1MGJlYTk5LCAweGRjN2MyMGY2LAorCTB4NDcxMzc2ODQsIDB4YTliZjc5ZjcsIDB4YmQwZDk1ZjYsIDB4MmZhODE5YWYsIDB4YzQzYzY3YzEsIDB4ZmY0MmFkNmYsCisJMHg1YzM3YWRhYSwgMHhhZDYyZjU0YSwgMHhkNjJmZGI1NywgMHgxM2Q3N2JmNSwgMHhiNDNiNzVkZCwgMHhkOWJmNmFmYiwKKwkweDRmNWY3Y2E0LCAweGVhOGQ5YWY1LCAweDI2YmRlZDNlLCAweGE4ZjMzN2VhLCAweDY3ZWVkM2ZlLCAweGE2ZmQyYTY2LAorCTB4YTk0MGZmOTIsIDB4NzcyYTU3MzMsIDB4ZWIzMzNmODgsIDB4MjM1ZTBjZmYsIDB4NjhmY2Q2ZjIsIDB4NzA0MmRkOGIsCisJMHhlMmNlZDliYSwgMHg2NjA2ZmQ2ZCwgMHhkODdkZWFjNywgMHg0NDZjYzg5YSwgMHg4ZGRhZGJmNSwgMHg1NTY3ZWFjMCwKKwkweDFiNGZmOThlLCAweGZjOGZhNDFkLCAweDVkNTk5M2E3LCAweGFiM2NmNThjLCAweGYwOWUzMDQ3LCAweDIyNjUxZWZlLAorCTB4MTczZGRkYTAsIDB4MTExNGNhMWYsIDB4ZDkzZDczY2YsIDB4NWZiN2FhNzYsIDB4N2Y4MGViNWUsIDB4NGZhNjE3OWQsCisJMHg0YWU3ZjdhZCwgMHhkNDBjYWIzYiwgMHg3ZDg4ZGQ0NywgMHhmNzM1NmUxNCwgMHg0MjY2ZDkzZSwgMHhkMDEzNzliOCwKKwkweDNiMmQyNDBkLCAweGUyYTZlYThlLCAweGU5NzgxMmZkLCAweDUwM2VmMDFkLCAweDFhOTc2YjhlLCAweGJlYjA1MjRmLAorCTB4OTQ0NzkwOGYsIDB4MDllNDA5M2MsIDB4YTJhMzc5ZmEsIDB4MDRlY2U4YjcsIDB4ZmQ4Yzc5Y2QsIDB4NzFmN2NkMWMsCisJMHhlZmRhOTlhNSwgMHg2ZTdmMGUzZCwgMHhmZTczYzUwOSwgMHgwMmUzYmM3ZCwgMHhjMTM2ZmRjZCwgMHhjZDkxZjc2ZCwKKwkweGJjM2ZmMDA0LCAweGIxODhhZTU3LCAweGNkODJiZmMyLCAweDE3ZTcxMjFkLCAweDg4NmZlZTY4LCAweGVjOWZiNzlkLAorCTB4ZGQwYmZjYmIsIDB4NGI3MDNiMTgsIDB4MDE2NTc3NjQsIDB4MmY1MDQ3ODAsIDB4ZTdiNTg2YjMsIDB4MjFkYjA3YzUsCisJMHgxZDQ3ZjExNiwgMHg1Nzk5OGRkNCwgMHgxNmVhODA3OCwgMHg1ZmRkYWNhMywgMHg1NGM1ZGFhZSwgMHg0Mzk5YWE5OCwKKwkweGI3M2I5MTljLCAweDkxMjFkMWZiLCAweDljMDk0NWQ5LCAweDExNzk3MGY3LCAweDVlMGY1OWM5LCAweDQ2ZGNiYzc5LAorCTB4NjZmYmE1NjksIDB4NTk4YmYzMDMsIDB4OGE3NjJkYmQsIDB4NWE5ZDkzNDcsIDB4NjhkNzI3ZjksIDB4ZDJlYTlmZTUsCisJMHg5NTZkM2JjYSwgMHg2ZWU5ZGU1NiwgMHg2ZGNmYmNhZCwgMHhlYWQ3Y2FkNSwgMHhiNmNmY2FkMSwgMHhmZWU2OTY3MSwKKwkweDBkNGFmNmI0LCAweDAyZjM3ZDNjLCAweGJkZjNmZGNkLCAweGNlNzAzNTBiLCAweGY3MzRhYjhlLCAweGQzMmM3NDY3LAorCTB4YWY3N2U3OWMsIDB4NzZhYjljZDYsIDB4MmUwZWQ2MzYsIDB4YjE4ZjM1ZjQsIDB4MDhjNDExMzMsIDB4NTY3YWFiZmQsCisJMHhmZjcwYTBlZCwgMHhmZjNjMWFhZCwgMHgxZjZmZmQ2ZiwgMHhjOGE3ZmZhMywgMHhiZGRlMzFkNywgMHgzNzc0M2IxNSwKKwkweGQxNjVlYmI5LCAweDk5OWRhZTNjLCAweDU5ZWI5NDI3LCAweDljYjZmNmJmLCAweDc3NDMxNTU4LCAweDU0ZTZmYzk1LAorCTB4ZmY5NDFiZjIsIDB4MGUxNmMzOTEsIDB4N2RmNmZkZGIsIDB4OGUwYWNmMTQsIDB4YWU4OGFiMzgsIDB4MWY3YjgwYTIsCisJMHhhMTkyZjM4NSwgMHhiYTM4YWFmNiwgMHgzMmQ5MDBlZiwgMHhlODljOGY4NSwgMHgwMmE1ZTVmZSwgMHg4NTdlMzRlOCwKKwkweDNjYjA5NGYwLCAweDkzYWNmMGFmLCAweGQ5NzJmMGUyLCAweDE2MzZkZTc3LCAweDRiZTljOTZlLCAweGExMjBmM2MyLAorCTB4NmE4NWU3OTQsIDB4MjJlODE0NDcsIDB4ZWNhMTUyZTQsIDB4MjllOTI1MDMsIDB4ZjNhYmY5NjEsIDB4YzAwN2VjMjMsCisJMHg2ODgwZmQ0MCwgMHgyNzU5YjZmMiwgMHg5YmVjNzdhYSwgMHhiOThmNTYyNSwgMHg4NmY2N2Q1OCwgMHhhNTczNjJlMCwKKwkweDA2N2YyNjQ1LCAweDI1ZGZmN2M1LCAweGM0Y2VkZWJiLCAweGI0NGE3NmI4LCAweDEzOWVhY2NiLCAweDU0YzQ2ZDAyLAorCTB4YTRhMzE4OTAsIDB4NzZhZmE5ZTUsIDB4ZWQ4NzFmNTAsIDB4ZmYyYmNkMmMsIDB4YjU2ZDQ3NzQsIDB4NmY5MTk3MjcsCisJMHhiNmYwOTQwOSwgMHg2N2Y1ZmU5OSwgMHhhMjY0OGViYSwgMHhjYjA0MDdmYywgMHhmNmZjNDJmYSwgMHgzMzI3NTlhZCwKKwkweDI1MTk3ZjI4LCAweGNkMDE0NDk0LCAweGU5NDcxYzRmLCAweDI0ZGNjY2ZjLCAweDc4YzNmOTE5LCAweDBmNjUxMDFiLAorCTB4YWI3M2MyODksIDB4OTM5MGZhYzAsIDB4MDhjY2Q4ZjQsIDB4NjdhOGRkZmYsIDB4YmU5NDBiNzksIDB4NWU0NTFhZWMsCisJMHg1NGI2NWY2YSwgMHg0ZjgwM2ZjMSwgMHg3ZTc4YzJhYywgMHg0YzFiZjc0ZCwgMHhjMzI5NzUyZSwgMHg2ZGNhMWNjYSwKKwkweDM3ZmJlMGI3LCAweDUwMTczNTRjLCAweDQyOGUwYTVmLCAweGQ1ZTdlZjNiLCAweGZhNGQyZDNlLCAweGVkNTU3OTI5LAorCTB4YmY3NmNmNmIsIDB4ZDM0ODY1MmUsIDB4YzRjZWMzMmYsIDB4NjM5MWU3MDksIDB4YmU2MTVlZTcsIDB4OWIwM2ZiZjksCisJMHgxYTFlNTlhMiwgMHhlNmNlOTRkOCwgMHg0ZmY3ZTE4YiwgMHg3MWFmZjdiMSwgMHg5M2IxYTNiZiwgMHhkN2RmNWFlYiwKKwkweDllZjVkZmQ4LCAweDgxZTczNDhmLCAweDBkM2U5MGE0LCAweDRhZWMwZmY5LCAweGNhMzU3NzlkLCAweDYzMDVlNDZmLAorCTB4YThhYmY1MDksIDB4NzE1YjM4YjcsIDB4M2RjMGZkZjgsIDB4YmUxMGU3ZDMsIDB4YTdlN2NkZmYsIDB4NmJmZGJlNGMsCisJMHhhNmVlNmNmZCwgMHhlZDZjNzlmMiwgMHhkNjA3MDYxMSwgMHg5NjNhZDgwNiwgMHg1NWJmYjU0ZiwgMHgyMGRmYzM1NywKKwkweDkwZTVlYTliLCAweGQxM2VjOTMwLCAweDFiMzFlNmJjLCAweDY3ZmE4M2VmLCAweDdjYTRhOTRmLCAweGQwNmU5ZmRjLAorCTB4YzM4YjM1ZjEsIDB4MGUyNmE1YTksIDB4NmI0ZjliY2YsIDB4NDhkZTZmNTAsIDB4MDBiZjZkZmQsIDB4NjFlZDAxMGUsCisJMHhlYzdjZTBhOSwgMHgzYWJiZTQ3YSwgMHhhMzZiOTVkOSwgMHgyODc1NzI3YSwgMHhkMGZlODc0ZiwgMHg1NmI4MWY5NCwKKwkweDFlYmU3ZDQwLCAweGZlMjdjYWVmLCAweDUzMDYyYzA1LCAweDU5OWQxODEzLCAweDg5MGMzN2Q0LCAweDYzMDEzYzllLAorCTB4NzY0ZjRkYzEsIDB4M2ZmZDUzNTcsIDB4OGE3M2M5MzQsIDB4YWRhZDc2MzIsIDB4ODNmYTlhYWIsIDB4OGZmNzAzMjEsCisJMHg4NDdjOWU1YiwgMHgxNmI3YzNmOSwgMHhlNzdhNGNkNywgMHgzMWYyNDExMywgMHhmMDQ5N2U3YiwgMHgxNmY2Njc2ZSwKKwkweGY4OGMyYzMwLCAweGFmM2E4MmJiLCAweGZhOWI3ZWExLCAweDVmMTQ2MDliLCAweGRmZjhkYjY3LCAweGFjYzcyYTVmLAorCTB4YWUzYzZkNGIsIDB4MzE2YjQyZGQsIDB4MmNlZWU1ZTksIDB4ZThjYTdiZmEsIDB4NWY5MDIzNjYsIDB4NDg4NzNlMjAsCisJMHg1Y2Y4N2FmOCwgMHg0MGYyMGE3NiwgMHg2ZjU2MGQ3NSwgMHg3ODI4NWZhYywgMHhmOGEzZThkNSwgMHgxNjc1Y2VhMSwKKwkweGJkZWNhY2RiLCAweGQ3OWYxYjI0LCAweGY0NjdkZDI0LCAweGVlZmNiMWI2LCAweDNhNDZhOGNmLCAweGVmNThmNWRiLAorCTB4MTA3MGRmNTAsIDB4ODQ2ZDFjZDgsIDB4N2ExMTYxZTYsIDB4ZmRlMzZjNTksIDB4YzAwOGRjMTcsIDB4ZDFiNzkzY2YsCisJMHhjMGVmNDM3OSwgMHhkZjI3OGEzMSwgMHgyNGFlYmE2NywgMHg3Mjg4MGMzOSwgMHg4NjkzYzUwOSwgMHhkZWFjYmRkOCwKKwkweGVjYzliNjZiLCAweGYxOTdhNDNiLCAweDRlZTE3MThmLCAweDM4MmZjZmQyLCAweGZhNDU1YzBmLCAweDc4MDUzMDZkLAorCTB4MDNjY2FhZGQsIDB4OTFiNzI2Y2YsIDB4NzI4N2ZlZTUsIDB4OWVjYmZjZDksIDB4ZjRhOWY0NDEsIDB4YjZjZGZkMjIsCisJMHg0YTlkYjk4OCwgMHgxZjlkZjg3ZiwgMHhhZTc1MGJmNiwgMHg1YjgzYzJhNSwgMHg5ZjkxNjQzNiwgMHhiY2Y4NWVhMSwKKwkweDViYWUxMjUxLCAweDBmZjdjMTM4LCAweDk2M2VmYTJhLCAweGZlMTBmNGUyLCAweGY3M2U2ZWQ1LCAweGZiNGRkYjBiLAorCTB4Y2Y0OTQ3Y2QsIDB4MjcxNjY2YmQsIDB4NThmZGY2Y2YsIDB4ZjRmNjFiM2UsIDB4OWYyMDc5MzIsIDB4MTE3ZjEyZDcsCisJMHhjOTFiZGU3YywgMHhlMWNmNDhlNywgMHg5ZmU1NzI4NywgMHg5ZDMwNWZjZiwgMHhiODI5MWRmZiwgMHgxOTBjOWJlZCwKKwkweGZkZDg2ZmJmLCAweGJiYjIxMWM2LCAweGRmMWU3NTA2LCAweDE4MzM5ZGE1LCAweDlhZmY2MTI3LCAweDFkMWNkMTMwLAorCTB4NWQ0NDRmYjMsIDB4OWZiZjU0NjYsIDB4OGY3ZWQzYWEsIDB4YTljZDM5MDUsIDB4YTlkZmM5YmIsIDB4YmZmMDcxN2UsCisJMHhiOGY5YTk4YiwgMHg4NDZiZTk0YiwgMHgxZjJjZWJjMCwgMHg4N2YyM2UxMCwgMHhlNTg3ODJmNSwgMHhkMThlNzU0NSwKKwkweDIzZGU2MDI2LCAweDU4NWFiYWRkLCAweDM1Y2U5MDllLCAweGJiOWVjOWRiLCAweGU0ZmQwNmQwLCAweDM0NDczYTA3LAorCTB4ZTk4ZjVmOWIsIDB4YjgzNWJmYTMsIDB4ZDZmYzkxNzYsIDB4NGM5OTUzYmMsIDB4OWJlNzc2N2QsIDB4OGQ3ZTk0MGIsCisJMHhjNTYyYTllNywgMHgzZjA5OGIyZSwgMHhjNzFiOWZkMSwgMHhhMTQ4YjVlYywgMHhmNTg0YzRhZiwgMHg3Yzg1MjY1MCwKKwkweDE1ZTdjNDhmLCAweGQzNjNmY2NhLCAweGVmM2U5YWViLCAweDY4NTkzMmJmLCAweDAwMWUwMDUzLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYWI2NzhhLCAweDMyZWE3ODMwLAotCTB4MzFlOWM4MzAsIDB4NDNkMjRjMzAsIDB4YjcxMmQzODgsIDB4OWZhNjUxNzMsIDB4ODE4MTg1OWQsIDB4ODFiOTg4MTMsCi0JMHg1Zjg4MTc5OCwgMHhiYzMwMzIzMSwgMHhmZjVlMjQ2NiwgMHgzYjA0NjE0NywgMHhlMTgxODA0YiwgMHgwYjZmOTAxMywKLQkweDMyMDg5ZmE0LCAweGIyMDc1YzMwLCAweDAzNzEwMzNmLCAweDg4MDczZjkwLCAweDM1YjEwMDU3LCAweDQ4MGZiZjkwLAotCTB4YTNlMjA0ZGYsIDB4MTg0NWZjNDAsIDB4MDk1ZmY5YmYsIDB4NDIxNTZmYzgsIDB4ZTM0NDNmZTUsIDB4YWZjNDE1OWYsCi0JMHhmOTgwODI1ZiwgMHhiMWU0MDQ3MiwgMHhlNDIyNjllMSwgMHgwYTZkYzdjNywgMHhkZTA0MGVmNCwgMHg2N2NhODZhNiwKLQkweGUwNjA2NTUzLCAweGFhYzU4YTA3LCAweDkxZGJmODQzLCAweDYyODFmM2U0LCAweGY2MTBhYWVjLCAweDg2MDYzOTZiLAotCTB4MWRiOTQwNWYsIDB4N2RjZGQ4NmEsIDB4MGRmZjk0MDMsIDB4OWE4NmFiOTQsIDB4ZjFiOTAwMDMsIDB4MDM2ODUwNTQsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTkxNWM1OGEsIDB4MTlkNDQ0MTgsCisJMHgxODM0NGMxOCwgMHgyMDY4NTYxOCwgMHhiNTg5NjljNCwgMHg5ZmQzMjliOCwgMHg5MGMwYzJjOSwgMHg0MGI5YzQwZCwKKwkweDdjYzQwZjljLCAweGZjMGMwYzRjLCAweDE3ZWJjNDRjLCAweGY1YjA0NTE0LCAweDg0MTgxOTA0LCAweDAyNmZmYzgwLAorCTB4ODVkNzBjMGMsIDB4OGJiZTE4MTgsIDB4MDMwODMwMzAsIDB4ZjE0MDJlZjksIDB4MDFjZTIwMDQsIDB4NThhMDZmNjIsCisJMHgwNDVlOTAwYiwgMHgyYzQwZGRjNCwgMHg3Y2RmOGEyMiwgMHg2YmYyMDI1MSwgMHgzN2Y5NTE4NSwgMHg4NDdiZjhkMSwKKwkweDEwNTdlYmYwLCAweDQ3YWYyZmMxLCAweDE2MWIxZTQwLCAweDNlM2YyMmQxLCAweDNiZDAyOTIyLCAweDAxNWY1ODEwLAorCTB4YzcyNjVmOTUsIDB4MGYyN2QwYzAsIDB4YjhhODdmOGMsIDB4NGJmYzkyMDEsIDB4MGU1Y2JiMjAsIDB4NjA5NmY2YzIsCisJMHhmMjA2Mjg2MCwgMHg5YmIwMTUwZCwgMHgyZjk0MDNlYiwgMHg4NTdkY2EwMSwgMHhjYzAwMDNjYSwgMHg2ODhjYmFjYywKKwkweDAwNjg4Y2JhCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHg0NTU0NzgwOSwgMHhiZWRkNzBiNiwgMHhlOWQzYmI3ZCwKLQkweDg0ODQ5ZDI1LCAweDE2NzRiMDkwLCAweDI2YzQzNTEwLCAweDYzMGEwODQwLCAweDk0NGMyMTI3LCAweDYxNTE1MWE4LAotCTB4ODQwOGVjNDQsIDB4Zjk3MDdkOTAsIDB4MzdkN2Q0NzAsIDB4ZGY5NTAxMmMsIDB4M2UzMGViODksIDB4MGUwYzFhNzQsCi0JMHgxMDM2YTBjMywgMHhjNmMwNmEzMCwgMHg2ODBlODMwMCwgMHg4Y2MwODM3OCwgMHgzNjQ1ODRjYiwgMHg1YzcxMDkyMSwKLQkweDdmOWU2NDY2LCAweGJiNzU1MzlkLCAweDQ4ZTliZGVmLCAweDliZGZmYzc0LCAweDNmNmZlZjM3LCAweDU1NmVhMmJmLAotCTB4NWIzYWFhOWQsIDB4YWE3NTNhOWQsIDB4NDIwNDk0NjIsIDB4MWJlNDI2YWUsIDB4NzFmNGQxZjgsIDB4MTA5MjEwOTEsCi0JMHg2OWYyYmI0ZSwgMHhiOTEwOTYzYSwgMHg5NmJmY2EyNywgMHhmZjZlMGQ1NiwgMHg0MDE5MDRmYSwgMHg1YmU2YjljOCwKLQkweDQyNTRlNjVjLCAweGMxNTEzZDNjLCAweDM5Zjk2OWFiLCAweDRjZGY5ZTdmLCAweGJjYjYwYmNiLCAweDdjZDIzMGVmLAotCTB4MDhkMTE2ZjUsIDB4MTZlZDg2ZTUsIDB4NGFiOWRmNmMsIDB4ZDZiZTQzZjAsIDB4NTVkOGZlZGMsIDB4NDViZGRmMzQsCi0JMHg2ODI4NmIyNCwgMHgyMDY2Y2ViMiwgMHg4ODljODQzOSwgMHhiNDY3ZWMyMiwgMHgyMTIyNDgxYiwgMHhhZDk2MTY2NSwKLQkweDE2NjNiZDVlLCAweDYyZGU1N2Y0LCAweGZlZGExNjI2LCAweDgxZThiMzQ0LCAweDgyYjU4MmZjLCAweGFhZmVkMDlmLAotCTB4NGE2NjViNWYsIDB4ZjllNmYwYTYsIDB4NDVjNTgwODUsIDB4MzcxZjZiZjMsIDB4MmM4NGVjYjksIDB4YTM4MWZlZGEsCi0JMHgxOWM4NDZjMywgMHg5OTcxMTQ1ZiwgMHg4MWU1MWU3MCwgMHhmYzJhNDI0YywgMHhkMzI0YTcxYiwgMHgwNDFiMTVmNiwKLQkweGFmYzI4MWI3LCAweDEzYmU3NTU4LCAweDJjZDE1N2M2LCAweGJjMjkxNzBkLCAweGUyNTY3NWNhLCAweGZlZmFjOTFhLAotCTB4NmQ3ZjQwODYsIDB4MmRiZmIwYzcsIDB4NTdmNDA2NTIsIDB4MTM2ZWUxN2UsIDB4OTI5ZTYxMTEsIDB4ZDM1NWRhMDcsCi0JMHg5NWJjYzA3MSwgMHgxYWY4Y2Y3ZSwgMHgxODQ0NmI4OSwgMHhhMWJmZDU5ZiwgMHgzNTdhZDFmZCwgMHg5ODZlMGIyZiwKLQkweDc4ODE4ZDYyLCAweGFmOWQxYzYxLCAweDYwYmZhNjU5LCAweDliZDVmOTgzLCAweGYzZDVkODQ2LCAweGYzMGFkZDI4LAotCTB4MzZhZmYwYTgsIDB4ZjhjMWIxNGQsIDB4MzJjYTliNTYsIDB4ZDcyYWYwYzMsIDB4NTE1YzQ5M2QsIDB4NGNhZGYxYWEsCi0JMHg5NTU1ZTgxZiwgMHgzZTMzZDNlYiwgMHgwNTRmMTlhMiwgMHgwNmMwNTkyNSwgMHg2ZTliZjY3OCwgMHg3ZWZlMTUxYywKLQkweDdhNDU4ODU4LCAweDM1MTNhZTU3LCAweGYxZTUyOWYwLCAweGZkM2VmY2JiLCAweGJjODNjNTI3LCAweDliNWZlZWNkLAotCTB4MDJkYmE2MWEsIDB4MmJiN2ZkMjcsIDB4YTcxZWI3NGMsIDB4MWNlZWM3NDIsIDB4N2QyNTdjMzUsIDB4Yzc0MWU4MGMsCi0JMHg2MjczZThkMywgMHgwOTJmODRmYSwgMHgyZTdjYTdkMywgMHhiZTMzZDNhNCwgMHhmNGFlOTg5MSwgMHhiM2ZiZjFiOSwKLQkweDU3NGM1Y2JlLCAweDNlOTgzY2Y5LCAweGQ0YzIyYmVmLCAweDdhYzEyYmVmLCAweDMxZDM3YzZiLCAweGYxNzlmMjZkLAotCTB4NzJiZThiZmIsIDB4ZWFmOWQ3NGMsIDB4ZGY3YWZiZjAsIDB4ZjgzNzRjNDIsIDB4YjJmZWZjNjQsIDB4MDFhNjM5NmYsCi0JMHhiZTRkYTc0ZSwgMHhmYjM2OTg5NSwgMHhhYjZmNThmYywgMHgyZGE2MWQ2ZiwgMHg1ZjdlMDBiZSwgMHg5OGU3ZjFjMSwKLQkweDc0OGNmMjQ4LCAweDcxMGYwZWZlLCAweGI4OTM3MjUyLCAweDQ0OWU0ZjYyLCAweDJjMjU3MWYzLCAweGNlNTMzODlmLAotCTB4YTI3Y2QxMzMsIDB4M2UyOWU2OTcsIDB4Nzk4MmFiOTIsIDB4YWU0ZjlhNjYsIDB4MWY0M2U1NjMsIDB4MzQ1MWY5MjQsCi0JMHhlNTY2NTQzZiwgMHhmOTNjMmI2OSwgMHg2YjRmOWExNiwgMHg1NjIzZTU2NCwgMHgzNGQxZjljOSwgMHhjYWNmYzIzZiwKLQkweGNjMTBkYjJmLCAweDY1ZmNkMmI3LCAweGQ1OWU1NjAxLCAweDM0NmMwYTRhLCAweGY5NjQxNTlmLCAweDAyOWViZGVjLAotCTB4Yjc2N2NkM2IsIDB4ODdjZTdjYjMsIDB4ZTY4MzgxNzIsIDB4N2I1ODNhNzMsIDB4MTIwM2RlM2QsIDB4NmQyODRkOTksCi0JMHgzYzhiOTU5ZSwgMHg2ZjM0NDFjNiwgMHgzNzEzNzcyMiwgMHhhMzdjOGJjNSwgMHhlMjgxMzhjNywgMHhmOTYxNzI0MSwKLQkweDU4MjdmOTc2LCAweGMyZTRjOWJlLCAweDM2Nzk3NmYyLCAweDFlNGIzNzk2LCAweDU3MmEzZjJjLCAweGM5YjM3OTYxLAotCTB4OTE3ZmU1ODMsIDB4NTZmY2M1ZWYsIDB4YTZlNThiYzksIDB4ZmFjMzdmZmEsIDB4MmM1ZTRkNWIsIDB4ODY1ZmFhNGYsCi0JMHhjNjQ5MTZmOSwgMHgxYmVhY2JmMiwgMHg0OThiN2ViMSwgMHg5NjI3ZjJjNiwgMHg5OTMzZDJmYywgMHhlZjA0ZmI5NiwKLQkweDhiNjdjMDUzLCAweDQ5Mzk2ZjA1LCAweDI0MDlmZTA3LCAweDY5ZmU1MDk1LCAweGUwNzRjODEwLCAweGM5ODEwN2Q3LAotCTB4MjBmY2QxYzYsIDB4NjA1ZGNhMTMsIDB4MjAwYmNlNTcsIDB4MDAxYmY4YWYsIDB4MWYxN2IyZjksIDB4Y2YzODQ1NDksCi0JMHhjMjg5MWMyMSwgMHhjNzBlMmYxMSwgMHgwMzU3M2JiZCwgMHg1Y2JiYmRjNywgMHhkNDIyZjM4MSwgMHgxZmU5NmM1YiwKLQkweDJiZWVjMDljLCAweDVkZDllM2I1LCAweDA1NzljMGExLCAweDM3ZmJkOGUxLCAweDI2ZWZmNzJmLCAweGJiZjNjNzZhLAotCTB4MGI0ZTA1MmEsIDB4ZGZlZDg5YzIsIDB4ZDNlZDM2NzgsIDB4YmVkMzY3ZTIsIDB4MjA3NjdlMTAsIDB4MzdmYTEyN2UsCi0JMHhiNTc3ZWM5ZSwgMHgzNzdlYzlmOCwgMHg3MDc3OWY4NCwgMHgwN2ZhODMzYywgMHg1YWJiZDM2NywgMHgzNzdhNmNmYywKLQkweGUwM2Y5Zjg0LCAweDZmZjQ4Njc4LCAweDY5ZWZkOTVlLCAweDVlZmQ5M2YxLCAweDIyMWYzZjA4LCAweGMxZmVkNDljLAotCTB4OGI1ZjdlNjksIDB4NDNmN2U2OWYsIDB4ZTEwNGY5ZjgsIDB4YmNkZmVmMGMsIDB4ZTJkNDFlYzYsIDB4MTBjMWVjNjcsCi0JMHgzZjExM2E3ZSwgMHg0ZTBmZjY5NywgMHg3ZTJkNDFmMywgMHhmMDg2MGY5YSwgMHg2NzhlMjVmMywgMHgzNWU2ZmY1NCwKLQkweDNmMTY5MGY2LCAweGYwODUwZjYzLCAweDMzODAwNDQzLCAweGQ5ZTM3ZmJhLCAweDNmMTY5MWZhLCAweGUxMGEzZjViLAotCTB4YzY3MDgyYzcsIDB4MzkzYzZmZjUsIDB4OTNmMTZiMWYsIDB4M2YwODcxZjMsIDB4NDI2NzA4NzEsIDB4ZmQ2Y2UwZmYsCi0JMHhhZDlmOGI1OCwgMHg5M2YwODcxZiwgMHhmNTI2NzA4MiwgMHg3ZjM5NWU2ZiwgMHhlNzI3ZTJkNiwgMHg2NGZjMjFjZiwKLQkweDNlM2M5YzIwLCAweGQ4ZTE0MjFlLCAweGYyZDM4NmZiLCAweDJkM2YxNjg5LCAweDMzZjA4NDlmLCAweGYyMTRlMTBhLAotCTB4NGUwNDVjZjEsIDB4N2UyZDA5ZWUsIDB4ZjA4NDRmNzIsIDB4YWU3MDgzOTMsIDB4OTY5YzFmZTksIDB4YjRmYzVhMTMsCi0JMHhlN2UxMDg5YywgMHg1ZDczODQ2YSwgMHg3Yjk1ZTZmZiwgMHhkYzlmOGI1MiwgMHhhMzNmMGM5MywgMHhjMWI0OTZmNywKLQkweDQwZDc0MzdhLCAweDRjOWI0OGI3LCAweDA4ZjFlZTM4LCAweDY0ZThiZWI0LCAweDI2ZTlkMTc5LCAweDhhODg4NzYwLAotCTB4M2RkYTQxN2QsIDB4ZGI2ZmFkMjIsIDB4MDhmZDliMTAsIDB4ZjkxOWRiNTEsIDB4ZWM3OGMwMzcsIDB4ZGI1MmZhZDQsCi0JMHhkMWI5MzExOSwgMHhkNjJiYmIxYSwgMHhjN2M5YTcxMywgMHhlYTZiMjUxNywgMHg2OWE0OTQyNywgMHhiZjRlMDdjYSwKLQkweGM4M2U1MzRjLCAweGE3YzlhZDliLCAweGE5YTk1Zjk0LCAweDVmMmVhNDNmLCAweGYwYjYxZjkzLCAweDU0ZmQ0ZDVhLAotCTB4M2U0ZDI2ZjksIDB4MzQ0ZmY5N2QsIDB4ZGUzNzg3ZjUsIDB4NjRiZjI5YTUsIDB4ZmNhNjg1NjUsIDB4NGQwMmZmNTIsCi0JMHgzZjc1ZjJmZSwgMHgxNTFmZDRkMywgMHhiZjI5YTQ1OCwgMHg0ZDExZTVhMiwgMHgxM2UwZThmOSwgMHgzZDk4ZmM5YSwKLQkweDhmZWE2YWNmLCAweDI5YTM1ZjZiLCAweGJkNzg3ZjFmLCAweGM3NDI3Y2E2LCAweDUyOWU0ZDI2LCAweDcyZTI3OWMyLAotCTB4Y2Y4MTE3OWUsIDB4MDdlYmIzMDksIDB4MGI5ZWQwOTksIDB4Mzc5ODRkZGEsIDB4NGVkMGRiMjUsIDB4NWNjYmRhMGYsCi0JMHg0ZDFkMjljNywgMHgwMDZiYWYwNiwgMHg4NDg2ODE0ZCwgMHhjOTc5ZGJhZSwgMHg1MDc0OTdlNSwgMHhhNTc3ZGYzYSwKLQkweGZkMjcxMmY3LCAweDdiYzk5ZjdlLCAweGZkODIzMzg1LCAweDkwMmZlOTQ5LCAweDA2NWQ0ODI0LCAweGNiZTVmNTQ4LAotCTB4Zjk3ZmM2MjQsIDB4MWM0NjE3MjksIDB4MGQ2YmVkYTEsIDB4Njk2MjIzZGQsIDB4Zjc5MGNiYmUsIDB4ZjFmOTQwOTQsCi0JMHg3YzgwYzE1OSwgMHgzYTkyMmQxOSwgMHgyNjZkMTdhOCwgMHg0YjJmZjc2OCwgMHg1NjQxNzljZCwgMHgyMWYyZTdmMSwKLQkweDMwODRlZTU0LCAweDM3OTJlNWRjLCAweGU3OGFlYzA5LCAweGMxOTNkZmViLCAweDQyMTg2OGNlLCAweGM4NGM5NWU3LAotCTB4ODJmNzg0YWYsIDB4M2Y2ZDA2NzIsIDB4NGJjOTJjYTQsIDB4ZDQ0ZDk5ZTEsIDB4NmZmNzU3MGUsIDB4NjI2N2ZkYTIsCi0JMHhmZmQwNGRmZiwgMHgzN2ZhM2VmYSwgMHhmYTZhZTVhNywgMHhhZTVhMWE4ZiwgMHg0NGNhM2ZlOSwgMHgzYjUyNzdmYiwKLQkweGVmMTBmZWIzLCAweDRhZTkxMjlmLCAweDBlMTE1ZTQyLCAweGExZTZmZjYxLCAweDMyZmZkOGU1LCAweGE4OGZkZDEzLAotCTB4ZjUwZThmZmIsIDB4ZjFmMjBjZGYsIDB4MTA5ZmY0M2EsIDB4NTc2OWZlNjEsIDB4YjQzZmU3NmEsIDB4MTM3ZjNiNDIsCi0JMHhmYWY2ZmY5YiwgMHhhM2ZlZjMzZiwgMHgwYTZmZmU3MSwgMHgxZmYzNjY3ZiwgMHg2ZmU2YzE1YSwgMHhmZDQzNzA2NiwKLQkweGRmZjg0MjNiLCAweGE3N2ZmMzA5LCAweDRmYTdmOWFmLCAweDU4N2ZjZWQ0LCAweDY2ZmU3Njk1LCAweGY1YmJmZmQ2LAotCTB4MzZmZjc5MjcsIDB4ZTEzZGZmZWMsIDB4YjBmZjliMjQsIDB4NjRkZmVjMmEsIDB4N2Y4MWJhZjYsIDB4NzVkMTI5NGMsCi0JMHgxOTNmZGE3ZSwgMHg0MGQxMTU0YywgMHgwZmRhMTc2MCwgMHgyOGUzMjNhNCwgMHhiMGYyMTMxMywgMHhiOGUzODY5MCwKLQkweGRiZjE5YTJmLCAweGRmOTRkMTE3LCAweDg4YzhiZjUwLCAweDlhYTdlMjFmLCAweDZhNDNlZThjLCAweDZlNTQyY2I4LAotCTB4MWU4MTMzYzgsIDB4MWZiYTcyYzIsIDB4M2E4N2NiOTksIDB4ZmU0NDQ1YTcsIDB4ZmQ5OTRmMjYsIDB4M2I3OGU5YzMsCi0JMHhmMjE5NDQ1YiwgMHhlNDlhOWU3MywgMHg2YjU3N2QwNywgMHg0MDk2NzcyNiwgMHhjMjA5MjMzYiwgMHgxZTllNGZmNywKLQkweDJmM2Q0NmI1LCAweDUxYjczYTdkLCAweDkxYTFkMTNhLCAweDM5MWUzNjJmLCAweGEzYWM4YzlmLCAweDI2MDQyYmUzLAotCTB4OWZjZTE3MTgsIDB4NDIxZGZiYTAsIDB4ZTk0NzExZjcsIDB4OTNkMjAyN2UsIDB4N2U4ZmVkMTIsIDB4NDNmNzRlM2YsCi0JMHg5Yjk2YTRjNCwgMHg2NDQ3NmM3YSwgMHg3NDE5ZmJjZiwgMHhlNTEyYjdmYywgMHhkZTc5YzFlNywgMHhlMTQ1MjI4MSwKLQkweDRmZmUxOTE5LCAweGQwMzU3ZGQwLCAweDk1YTM2ZTYzLCAweDFlM2MzZjIyLCAweDZmOWMxZjNhLCAweDVmZTBhOTc3LAotCTB4ZDJiYzcwMjMsIDB4ZjZmMWI3ZjYsIDB4ZTE0N2M2MDQsIDB4MzZiMjcyY2YsIDB4MGY3MjUxMWYsIDB4Yjc5ZjI4YTIsCi0JMHg2NzAzNWUzMiwgMHg0ZDJmZjEwNiwgMHg1ZjZmZWRhMiwgMHhiNDIyNDNiMSwgMHg3NGExNDFjZSwgMHg5N2UwMDJjOCwKLQkweGM0MTIyNDA3LCAweDAyNDc2NDdkLCAweDQwY2NlNGM5LCAweDBjOWQ3YmUxLCAweGE1ZDM2ZGZlLCAweDM4MmExZGUzLAotCTB4NGYyOGE0YjMsIDB4YWNjZjFkMDksIDB4ZWYxYzQ1ZmIsIDB4YmNiNmFmMGMsIDB4NjNkNWJiNjMsIDB4Y2FlOWEyYzgsCi0JMHg0OTQyMjRjZiwgMHhiNmI5N2I3ZSwgMHg2ZDNhOGVmYywgMHhkYTg1Y2VmZSwgMHgwOThmOWQzYywgMHg1OTUyYjVkNiwKLQkweDg3NGU5ZGZmLCAweGQwYWVmM2NlLCAweDY5YzRlOWJjLCAweDliMmYzNjdlLCAweDM1OTI1Y2JkLCAweDY4NmQ4NDc0LAotCTB4MDM0ZjJmMGUsIDB4MTNjNDEzYjQsIDB4NWRlZjRmYjYsIDB4MjY4MWYyOWYsIDB4MGVhNTZmM2YsIDB4ZmY4YmU3MWUsCi0JMHhkZGZmZmY0ZiwgMHhjOTZkYWZmNCwgMHgxYWFlM2Y4YiwgMHg5YWUwNzU1NywgMHg3YWFhZTNmOCwgMHhkNDZlZWI5NSwKLQkweDY3ZmJlN2U0LCAweDViY2ZlYTY4LCAweDlmMjlhYTU5LCAweDUzNWYzOGRiLCAweDRmZjk3YjNlLCAweGY5NTJmOTM1LAotCTB4M2JmZDRkN2UsIDB4Y2E2YmQ2MTcsIDB4NTg3YmE4ZWYsIDB4Zjk3YjdlNTMsIDB4MGNmYzlhZTMsIDB4ZjUzNTJmZWYsCi0JMHg1YWJlOWI2ZiwgMHg5ZjZjMmU1MywgMHhkNzAzYWMzZiwgMHg0MWIwZWY0ZCwgMHhhM2ZjMGZlMCwgMHgyOTlmMDA5OSwKLQkweGZiZjBhY2ZjLCAweGE2MTI1ZjI5LCAweDRjMmU3YzY3LCAweDUzMGY0MWViLCAweDhkNzg2ZWZkLCAweDRhNmJiNWE1LAotCTB4NTczZTgxODcsIDB4NTRhNGZmZjgsIDB4YTVmNDE0MzcsIDB4ZmFmNTlmOWUsIDB4ZjRhN2NmNTcsIDB4Y2VjOTEyOTcsCi0JMHg4MTJhZDI1MCwgMHhkNjNhYzA5NCwgMHhlNTVlZWRjNSwgMHhjZWJlMzlmYiwgMHhkMzA4YjIxMSwgMHhjYjkzMTMyYSwKLQkweGYyODM0ZGFhLCAweGMxZjIwMzg5LCAweGJlYjY3NTExLCAweDgwODA5MmUxLCAweGNkZTAyMGYzLCAweGE1YmEwMDRjLAotCTB4NGQ0YmI1ZDAsIDB4MzhjZDc0ZDcsIDB4YjExMGVlY2YsIDB4Yzk5MDFhZmYsIDB4OTRkY2IwMDksIDB4ZmY0MDMyNmMsCi0JMHgzN2ExYjZjMSwgMHg3OGYxODI4ZiwgMHgyNWJlNjMzNiwgMHhiM2FkZWQwMSwgMHhlM2Y4YTJiZSwgMHgwOTVmYzA0NiwKLQkweGQzN2NhN2E2LCAweGYzZTEzZDMxLCAweDU3ZGM3YTYyLCAweDVmNTFlOThlLCAweGJlMWRhNjFkLCAweGVjN2U5ODg1LAotCTB4ZDBmZDMxOTMsIDB4M2ZkMzFjYjcsIDB4M2QzMTFhZjksIDB4ZTk4OTViZWMsIDB4ZDMxZjlmNDEsIDB4NTMwNzlmNGUsCi0JMHg1NWZmNGY4NSwgMHhmMGNhM2FlOCwgMHg3M2Q3NGVkZiwgMHgzMjhlYmE2YSwgMHgzODc4ZDkzOCwgMHhmMTg1MWY1ZCwKLQkweDkzOWJiMDQ2LCAweGE3MTkxOGMxLCAweDU2M2M0N2IyLCAweGUwMmVhYmY0LCAweDg5NmE3MGZlLCAweGVmMmIzZjMxLAotCTB4ZDcwNTMxN2IsIDB4N2Y4Yjc2OGUsIDB4OWVlMWU4MjQsIDB4MDExYjdmOTEsIDB4YzM5ZWU0N2UsIDB4ZWQ0ODAxNzQsCi0JMHhmYTdhN2U3YiwgMHhlMjA3ODlmNSwgMHhjY2JkZmI0MSwgMHgzMTg3MTc0ZiwgMHhkMTJkY2JiZCwgMHgwMzE2YWYwYywKLQkweGQ0ZDkyMjI5LCAweGEyZmUxYjVlLCAweGNjNGNhZWZiLCAweGI0MWM0OTFiLCAweGI0NmZiYmY3LCAweDZkNGI4MDQ3LAotCTB4YzVlZmMwNDEsIDB4ZmVkOGJhZjAsIDB4M2JjMDE2NDUsIDB4MzlkN2VjZjEsIDB4YTQzMjhlOTAsIDB4NGRiOGJiMzEsCi0JMHgwNDk0YmI0NCwgMHg3ZTAzNzA1ZiwgMHhlY2Q2N2E0MywgMHg2ZDNmMDI0ZSwgMHgxMzkzNzBmNywgMHhiOGE3YmRkNywKLQkweDlmYzE1YTlmLCAweGZlMGFmMmNjLCAweGFmZTEwZTFlLCAweDk3ZjEwOTMxLCAweDE0YmZjNWYxLCAweDNiYTc4OGZlLAotCTB4NjE1MWE2ZWIsIDB4YmUxMzlkZmMsIDB4MzljYTdmMWQsIDB4MWJiZmJlODksIDB4ZTI3N2UzNDQsIDB4MDU0NGFlY2IsCi0JMHgwOTQzZWRhZiwgMHhlMDJkZTdlZCwgMHhhN2JmMGE3ZiwgMHhjMDE4OTJmOSwgMHhkOTNlYzg3MywgMHg4N2Y3ZjY2MiwKLQkweDRlODBlNzRlLCAweDZhYmMzMGI2LCAweDNkOWViYzFkLCAweGVlYzAzODJmLCAweDcwNjQ5MDVmLCAweDY3ODA4ZjFlLAotCTB4YTQwZWFkMjUsIDB4M2I2YTZkM2EsIDB4ZWY5YjQ1YTksIDB4MDI4YTE0NjksIDB4NjJiOGNmNjgsIDB4ZmQwMjhkYTYsCi0JMHhjZjFlNzRlYiwgMHg4NDk5M2QwMCwgMHg0MTY3MDJhOSwgMHgzYzc5Yzk5MiwgMHhlNGMzZTkxZSwgMHhjYTJjNDM3YSwKLQkweDE0NWYxOWZkLCAweGM3YTFmYmQ2LCAweGYwOWMxN2QxLCAweDMxYzk5YTM4LCAweGY5NTAxZWRhLCAweGY1ZGY3YTRkLAotCTB4ZTM1M2U0ZmIsIDB4MzdlMDRjNWYsIDB4MTdkMmFkMjMsIDB4ZDE0NGJmNjAsIDB4MDM4MWJmZmYsIDB4YmNjNDYyMzIsCi0JMHgyMDM2YjcwMiwgMHhlMDJiZTZjYSwgMHg3ZjRkMDZmYiwgMHgzOTRiOWRiNCwgMHhlZDI2ZmJjMywgMHg0OGMxZTRkYiwKLQkweDRhZmMyODRlLCAweGYwNDY4YTk3LCAweGJlMDM4ZDQ5LCAweGY2YjUzOGI1LCAweDVmMjZhYzUxLCAweGE5YzgzMmRiLAotCTB4MWZlMDk3YjEsIDB4NzI5MjhmNTQsIDB4NTc3YzA4YzEsIDB4Y2JhNmQ5YzUsIDB4ZDAyZTViNjgsIDB4NTM4MjU1ZjEsCi0JMHg2MDU1ZjgwYSwgMHgzYWEzYWFmNSwgMHhmMDE3NWU0YywgMHhhZjViZTJjYiwgMHg0NmNkNDE3MiwgMHg3YzdlYWY5YywKLQkweDFhMzc3ZTk0LCAweGJmOGY3ZDhkLCAweGFmYjllYzUyLCAweDZjN2M4MjI0LCAweGNhYmI3YWUxLCAweDI0MGFmY2MwLAotCTB4ZjljMDc2NGEsIDB4MWQ5MjQ5MTcsIDB4Njg3MWQ5MzcsIDB4ZDA3ZTEwYjYsIDB4NTFmYjQ3MGYsIDB4ZjMzODE1ZTUsCi0JMHhkNmI3NTJmZCwgMHhjZjkxOTU3ZSwgMHhiZjk4MWFjZiwgMHg2ZWVmZGY0MCwgMHhlMmUxMzdlOCwgMHhiMGQ5YWJmOCwKLQkweDViY2MwYTdmLCAweDk2OWFjNzhmLCAweGNhMmYyNmYzLCAweDI3MmZmZDE1LCAweGJmMDU0NzhjLCAweDZlYzk2Mjk1LAotCTB4NThhZmMyOTEsIDB4ZDVmNzA0NzcsIDB4YzQ3OTI0YTcsIDB4MTdhMmRmMDMsIDB4OTZkZjhmN2IsIDB4OWFhYWMyNzQsCi0JMHhhMWRhNGNiNywgMHg3OTcyYmI5ZiwgMHhkYjc1YzQ0NywgMHg5ZjVmNTQwNywgMHgxZTQ0YmRmZSwgMHhhMDVjYmEwMSwKLQkweGEwZTM1NGI1LCAweGU0MzEwNTE2LCAweGJiZjVlZDg0LCAweDYxOGIyYjlhLCAweGZiMGQzZWZkLCAweGU3MmZhYTE1LAotCTB4MzgwNzEyOTAsIDB4NjM0OWNiMWQsIDB4ZTdlN2Q4MGUsIDB4ZjAwOGExODgsIDB4ODdmYzhlNzQsIDB4NGU4YThjNjMsCi0JMHhlMjEzNDQ2NywgMHg0N2VmZGE4OSwgMHhmNmEzZTNkNSwgMHhlZDRmMjZiYiwgMHg4Y2JlNGQ3NywgMHhlNzA4OTRkYywKLQkweDQ5NGY2NWQ5LCAweGZjZTAyZmM0LCAweDEyN2ZlNTM0LCAweDc5Zjc0ODlkLCAweGVjMDFhZWE0LCAweDViMTJjNTlkLAotCTB4MTI3MmVmZDcsIDB4NWYxZDBhNjMsIDB4ZTVjZmFiZjUsIDB4NzlmY2QyOTQsIDB4Y2EyM2Q5OTEsIDB4MzhmY2VjNzksCi0JMHhjMDhhZmUzNiwgMHg5Njg3OTM2YSwgMHg3MzFlNmIxZiwgMHhkYTA0NTVlYiwgMHhmZDYwMWJmYiwgMHhlZTA4Yjc5MSwKLQkweGY4ZGVhZWI1LCAweGQ3ZTNhZWZkLCAweDg3YjE1NzhmLCAweGYzMGI5ZDdhLCAweDEzYWY1NDcxLCAweDc2NDhmZTNjLAotCTB4ODUzM2U3MTEsIDB4NGU4YzYzMWYsIDB4NDUyMzdmOGQsIDB4OTc0NGJmOTcsIDB4N2ZjYmEzMWYsIDB4NDAxZjc5NmYsCi0JMHgyOTVlZjIzNCwgMHhlMzhjNTM3YSwgMHhmZWMzN2M5OCwgMHgyMzc2MzA0ZSwgMHhmODZmN2YzZiwgMHg1ZmUwYmQ0OSwKLQkweDFmYzI4M2YyLCAweGQxMzM5M2FjLCAweDg1MDdlNjNiLCAweGZjNmJkMTlmLCAweDVmODI0NzU3LCAweDViNGJlYWZkLAotCTB4MmE5ZmFhNjUsIDB4NDFkYTc5NWUsIDB4NmQzYTdlYTgsIDB4NTM3NDRjNmMsIDB4NWRhZDU3ZmEsIDB4MzgzZTAwZWEsCi0JMHhjMDFkOTQ2NSwgMHg2MmZkYTdjZiwgMHhiZTgyM2Y5MSwgMHhmMGE4ZDdiYiwgMHg4MDI2Yzc4MywgMHg0OWZlMGRmZiwKLQkweGZmNTk5ZmUxLCAweGFlYjBmNWU4LCAweDcyNTZiMTdmLCAweDlkNmQ1ZmEyLCAweGYyYTY2ODM5LCAweGJmM2NkMzVhLAotCTB4ZmU2MTY0OTgsIDB4M2IyZmNiMDgsIDB4NDViZTQyMmYsIDB4YmYxNTlmY2IsIDB4ODVkMTNhN2UsIDB4MzE0ZTUyZmEsCi0JMHg4ODM4ZmZhMCwgMHhkMzRkN2ZmNiwgMHhkZDYwNTMyNywgMHgyOGRkMjVhZiwgMHhkMDc2ZmE2NywgMHhiODcxNTdmZiwKLQkweDYyOWE5NTNlLCAweDQ2ZTM5NzdhLCAweGIzZGExMTNlLCAweGEzZjM2ZDVmLCAweGZjMDc0NWU3LCAweDA2ZmQwM2FiLAotCTB4ZGNlNWZhZmEsIDB4ZGEzMzJmOGUsIDB4MWFmZWEwMDcsIDB4ZmU4M2M2NGYsIDB4ZmM0MWYwNTIsIDB4NWYxNzhlY2MsCi0JMHhmYzBiMmU3ZCwgMHg3ZTliNjdhNywgMHg3ODU0MTBlZiwgMHgyN2FjZTQ1MiwgMHhhZjU3ZmIzMCwgMHg5N2Q2ZmFiYiwKLQkweGQ1MGU1NDlkLCAweDRmNjJhM2Y2LCAweGZlZjg1YWI4LCAweDU1YTU5NWEzLCAweDE1NzFkMDUyLCAweGFiNTU5M2Q1LAotCTB4M2Y0Y2I3MjUsIDB4YzJmNGJkNTcsIDB4M2Y4MmNmOGIsIDB4Zjc2NjhmZjMsIDB4ZjJiZjBhNzAsIDB4YWYwNzVkYTUsCi0JMHg4ZGNhZjlhNCwgMHgzNjYyODBkMiwgMHgxODkwOWIwZCwgMHhmZDJkNGJhNiwgMHg5ODc2NjE3ZiwgMHg3NzliMTUwZSwKLQkweGQ4YTM1Yzk5LCAweGMyZTMwN2Y3LCAweGI4ZGNhOGY0LCAweGY1NDY0NGMzLCAweDYwNDE0N2M2LCAweDE2YzNhOTg3LAotCTB4MjM4MTJlODEsIDB4MTJmZWMwNTMsIDB4MDliYmZkNWYsIDB4YmI3YTdlZTgsIDB4NDZhNjA2NDAsIDB4NWRlYWU3YzAsCi0JMHg5ZTAxOWY2OCwgMHg0ZTljOGU5MCwgMHhlYWU5YmEyMSwgMHg4MGJhNTJkNywgMHhhNGU4NTczZSwgMHhmYWUyMmYyZiwKLQkweDMyYjllMDA0LCAweDdlNWY5ZjkxLCAweGZlODRlMjFkLCAweGZjYzM3NjY0LCAweGRiYmU1ZmNiLCAweDY5MzhmMzAxLAotCTB4ZmQ3YzYzYWMsIDB4MGY0NGQyZGMsIDB4OTI1Y2I3ZWQsIDB4YjI5ODlkMTMsIDB4ZGZjZmU1ZWYsIDB4NmYzNmZjOGIsCi0JMHhjYzg5YmRmZiwgMHg2NDE5ZTU4ZiwgMHgxZTQ5YjVjMCwgMHhiYjliZjMwNCwgMHg1ZjljMTZlYSwgMHhkZjIyZjExOSwKLQkweDk2MjczZjk1LCAweGRjZmM3ZTgwLCAweDQ2MzY4YTQ4LCAweDhkNGY4YjkwLCAweGI5MzgwZWNjLCAweDc0YjgxYTg2LAotCTB4YjJlOTI3N2UsIDB4ZmYzMzcxODMsIDB4MTRmYzYyMjEsIDB4M2Y0NTNmMjEsIDB4MmU3Y2JkZDksIDB4ZmNjMzgyZDQsCi0JMHg0ZThjNTFlNywgMHg1YzBkMTk2ZiwgMHhhZjE1YThhZSwgMHg2NWE2ZDdlNiwgMHgzMzlmNDBlZCwgMHhlMTAzM2M0MywKLQkweDE4OTZhNWJjLCAweGUxMGY4ZTY1LCAweGRjNTcwYTFiLCAweGQxOTAzODVmLCAweDM5OGNiODg3LCAweGMzYjUxZGJjLAotCTB4ZDQzYmUwMGEsIDB4OTYzYzk3NmYsIDB4ZjIzYjRkMmMsIDB4ZmZiODZhNGQsIDB4NzRmZjc4N2IsIDB4M2Y2MGQxZGMsCi0JMHhiYzhjNGM5ZCwgMHgyOTI4MTgwZiwgMHg3MWQ3NGY3MiwgMHhlNGE5N2YxNSwgMHhkMzdiYzk5YiwgMHgxNWJlNGNjMywKLQkweDU4ZGZmNzc5LCAweDM5N2ZlNTA0LCAweGRhMDdlNGMwLCAweGM3NDhmYWMxLCAweGU1ODgxYzE1LCAweGE4MDlhNjNiLAotCTB4MTgyNGNjMGYsIDB4MjQ5YmFlNDksIDB4NzJkYWQ3MmUsIDB4YjhlODRmODUsIDB4OGE4YzQyOGQsIDB4MWM3ZTAwNWYsCi0JMHhhNmVkMWZlMiwgMHgzYjY4YTdiMiwgMHg4NWFjYmU5NSwgMHhlMWJkMWNmZSwgMHg4ZjNiNzIyOSwgMHg5MDA5ZmZjYiwKLQkweGYyYzNjYmZmLCAweGI5MzE1NjRmLCAweDk1YmVkYmVmLCAweDkyNTUzZjExLCAweDQxNjdjNWZmLCAweGNhN2NhOTVlLAotCTB4YTk1NzkwMmUsIDB4ZTlmZGU2MDQsIDB4M2Y4M2I2ODYsIDB4NjlmMjcyYTEsIDB4YWQ1MzkxNDAsIDB4NjljYmQ0ZmUsCi0JMHgwOTdiYTZmOSwgMHg0ZTVlYTdmMCwgMHg0NzVjMWQzZiwgMHhmZDI5Y2EyMiwgMHgwNzRlNTExZSwgMHhlYTk3ZmM3NywKLQkweDBlN2YwNTRmLCAweDE1M2ZhYjQ5LCAweDFlMTdkODdkLCAweGI3ZjBmYWY1LCAweDUzZTIxNzQ2LCAweGVmZTkwZmFmLAotCTB4Y2RlOWM5MDAsIDB4MjlkZjBhN2YsIDB4ZGJmMTU2ZmMsIDB4NzdhMDYxZWEsIDB4ZjBhOTdjNDIsIDB4MTUyZjg4NWQsCi0JMHg1N2NmZDNiZSwgMHhmOTdkM2Y4YiwgMHhkMTk5ZjA2MSwgMHhmNmJjOTU3MSwgMHg0YTE0OTRmZSwgMHhjMTU2YWFjZiwKLQkweGJiNjE3NjZkLCAweDc4YTc5MGRkLCAweGJmYjMzMGYyLCAweDAwY2E3NzcxLCAweGNiYWZkZTc1LCAweDNkZjU3NDA3LAotCTB4YWU4OTdjYmEsIDB4YWY5NzU3YmUsIDB4YjNmN2Q1ZDMsIDB4OWI0YjQ4N2QsIDB4MDQxZjIwODksIDB4NDVhNWY1MzUsCi0JMHhmYzczODY0NCwgMHhlZTIyNmRlZSwgMHg5OGU4YmJiYiwgMHhhZWZiNjgxYiwgMHg5OTdlYTkwZCwgMHgxNmE1ODNlYSwKLQkweDRlZWZiZmI2LCAweGZlODAzNTMwLCAweDNiNzY3MmVhLCAweDYxNmYyMGUyLCAweDkyYWViNWZlLCAweGNhYWM0NzZlLAotCTB4MmFkMjNjM2UsIDB4ZjBlZGZlYTIsIDB4ZmI0OGEyOTMsIDB4MjJkMTZhMTMsIDB4NWY0ODNhOWUsIDB4YTNiY2VjZTUsCi0JMHg1ZDBkYjQ1MCwgMHg0Njk3N2UwOCwgMHg4MWFlMGRkMSwgMHgzOWI3ZjUzOSwgMHhhYmExYmNlMCwgMHhlOTg2ZmQzNSwKLQkweGI3ZGNmYmY0LCAweGU4NWYwYzQ1LCAweGMxNjQ3NjhhLCAweDMxZWM4OGI4LCAweDBiZWQ1MjBlLCAweDk5ZjkxMTRlLAotCTB4YjMzZTc0ODksIDB4NjBmZWQ5NWIsIDB4NWQ5ZDBhY2UsIDB4NWYyMDU2NDEsIDB4MzFlZWQ5OTQsIDB4ZjZhNDVlODEsCi0JMHg5ZmFkNTFmYywgMHgwNTc3ZjE5ZSwgMHg0YWJlNTc4NywgMHg1N2I0YWU1YiwgMHg0ZDE1OGRmNiwgMHhkZjJmNzJkYSwKLQkweDVjNDk1NjY3LCAweGEzMjY4YzVmLCAweDMwOGYzZWQ5LCAweGFmZDcwOTNmLCAweDBkZTY2Mjg1LCAweGJiZmUyOWQzLAotCTB4ZjgwNDg4ZjYsIDB4NDQ1NWE3YTUsIDB4MTA2Y2Y3ZmMsIDB4MjI2ZmUwZmMsIDB4NGRjYTAyNzIsIDB4YmQ0NmU5MGQsCi0JMHgyY2U5ZTBhNiwgMHg2ZmE5ODVjOCwgMHhjYjc2NzNiZCwgMHhkMDBmMzk0NywgMHgzZjViNTUyYSwgMHg5YTc3ZmFjOCwKLQkweGM3ZmFkZDllLCAweGZlNDA2ZjExLCAweDNmNDM0M2Q1LCAweDE3ZWJiZDIwLCAweDc5ZTBiNzZjLCAweDNiNzZkNzZlLAotCTB4NmQ3NmFmYzYsIDB4MDFmNDM3ZGIsIDB4NzY2NmJmYzgsIDB4YjZiYjM4YzMsIDB4ZmMwNTk5N2YsIDB4NWNjOGI1ZDMsCi0JMHg2YmFiN2EwZSwgMHgyY2Q3ZGIwOCwgMHg1NjY1ZjZkZSwgMHg0YjkzYWUwNywgMHg5MGJmNmU5MCwgMHhhN2FhYmVkOCwKLQkweDg1OGZlYmY1LCAweDU5ZDI5MDAxLCAweGRkYmZmYWMxLCAweGRhOWRmZThhLCAweGE3MTgyZGQ3LCAweGNiZWRiNWRiLAotCTB4ODdlZGFmMWMsIDB4M2YwZDRmOWIsIDB4OTNiMmVmYmYsIDB4N2M2MDliZTksIDB4YmE3Y2VjYjEsIDB4MmYwOThkZjYsCi0JMHhhYmZlZDNkNCwgMHg2Njk4Nzc5YiwgMHgzNzgyZjJkMywgMHhmYTA1OWVmZiwgMHhiMzEzNmJiMCwgMHg4ZWE1M2E2YiwKLQkweDdhN2NlMWU3LCAweDhiZWRkMmNkLCAweDRlZTc4YTI0LCAweDQyNjQ4YTEwLCAweDRkZjBkNDdlLCAweDA5MTk5Y2JlLAotCTB4N2Y0NzdmMmYsIDB4ZjFmMTdmNTMsIDB4N2MxOGZmZGEsIDB4NTNlZjE4MDgsIDB4NDdmNzZhZDUsIDB4YmZlZjMwMDksCi0JMHhlODAxZmM3ZSwgMHhlNDY2ZWQ4MSwgMHg5ZmJlNjU0YiwgMHhlZWQxZWEwNiwgMHgwZmJjZDhiOCwgMHhmZGM3YmNjMywKLQkweDA4NWJjZDJiLCAweDVmZGU2N2Y2LCAweGZiZDM5M2ZlLCAweGUzODVjOTIxLCAweDZmNDFjYmQzLCAweDFmNzZkZjNlLAotCTB4YmJiMjVmZTYsIDB4ZTRmZGJjNzEsIDB4N2ZhNjgxZjcsIDB4YTI2ZmJhMzEsIDB4N2M1Yzc3NzQsIDB4ZTRmZjM5ZGUsCi0JMHhlZTliZWVmMywgMHg3NGUyY2Y2ZiwgMHg4YzdkZTI3NywgMHhlMzhlZmYzNywgMHhlZTdhYWVmYiwgMHhmM2ExZmZkNiwKLQkweGIzNzNlYzU3LCAweDhmM2RhNGExLCAweDY5M2E2ZjhlLCAweDMxNjE4M2I0LCAweDJmNjdhMTIzLCAweDg3OTljNDg0LAotCTB4OGMwMDY1ZmMsIDB4OGFlN2UyNTcsIDB4MzMyZGYxZmEsIDB4MDQ4ZmZkYjEsIDB4NWZiNGM2ZTcsIDB4ZjdjMDhiNzIsCi0JMHg3NDNmNmM3NSwgMHhhZTFmYjczZCwgMHhmNjg2NWMxZiwgMHg2NjFlZjVlOCwgMHg0OTYzMTNhZiwgMHg4ODU4ZGU0OSwKLQkweDQ2ZTM5YWZmLCAweDNlYzkyNzNmLCAweDJkZmM4NWVjLCAweGJiNWU3ODkzLCAweDIwNTc3YzJmLCAweGUzZGE4MTFlLAotCTB4ZGEyZDBmZDcsIDB4MGRlOWY2MDMsIDB4MzM0MThkODMsIDB4ZmE0MDhmNGIsIDB4Y2Y3ZjgzYmUsIDB4NjY1ZmVlZDUsCi0JMHhkYmY5YjU3OCwgMHhiN2YzNmJhNiwgMHg4MmI3Nzg3MCwgMHhiZmZiNDU3MSwgMHg4M2YwNDRiNSwgMHhmMjFhNTM1ZiwKLQkweDM5ZjgwMjU0LCAweDExMTJiOWE1LCAweGE5MTM4ODA0LCAweDg0ZmIwYTViLCAweGVkYjQ0YTViLCAweDc2N2VjMzY3LAotCTB4ZjM4ZjE4NWMsIDB4ZTE1M2JjYTMsIDB4YTQ2YTIxZmMsIDB4NjFiOGY4ODAsIDB4MjRmYTg4ODUsIDB4Zjg0MDUzMmEsCi0JMHhjNjEyYjkyNSwgMHgyODYyN2UxMywgMHgxNzNjMDFjOSwgMHhmMzVmMTk4ZiwgMHgwZGNlMDYzMywgMHhmMWNmOWRmMywKLQkweGQwZWE0NjU1LCAweGJlMTcyMWRlLCAweDBlNjI2NmY5LCAweGRhMDk3M2Y4LCAweDg0M2RmMzRiLCAweGY1ZWQ0NzVjLAotCTB4MzA0Mjg5YjIsIDB4M2NlNWNhOWEsIDB4YjI2MzkxMjMsIDB4OTAyOWNmYzEsIDB4YTczZjFhYTMsIDB4MWZiZjBmMzYsCi0JMHg1Y2UxODYyNSwgMHhmYzVmN2VhYywgMHg3ZmE3NDNmOCwgMHgzNDdmZmNhNiwgMHg5MGNkZGE4MywgMHhmMzNiYjllMiwKLQkweGFhZmIyOWQ3LCAweDFlMTk1YjNiLCAweDdmMDRhYjZiLCAweDUwNTVmMjFhLCAweDdjNTM5ZjUyLCAweDg1ZmU2MjZkLAotCTB4MDYzODNmM2YsIDB4ZTdlZjJhZTUsIDB4N2VkODYyYTMsIDB4Y2NlZDAzMmYsIDB4ZjY2NzZlNWEsIDB4ZjAxOGFlYzgsCi0JMHhhNmI0ZjQ2ZiwgMHgwMmIxZjNmMywgMHgzZjAyMzc4NywgMHhhZGZiZTdlZiwgMHgzZWY5YzAzZiwgMHgwYjI2YmI0ZCwKLQkweGZkZDgyMjhkLCAweDc4ZmQxYmE0LCAweDU5MGI2NGYyLCAweGVlMGUyMTFiLCAweGE3ZTI5MzAzLCAweDFmZmRjM2E4LAotCTB4YTAxY2M0ZmMsIDB4YTNjZGZiMjMsIDB4NTRlMjYzNGQsIDB4ZGQ3MTViNzQsIDB4NmY1NjYzNjksIDB4YThlZmMwM2EsCi0JMHgxZmU4M2NlYSwgMHhlZmVjMmZjNSwgMHgyZGZiYWYwMCwgMHgyMjRhNTMxZCwgMHg5NzFjZjdjYywgMHhmZWI3ZTJkZiwKLQkweDZlYjVmNzhhLCAweDAwOTU0ZDZhLCAweDE2NGQzNzJmLCAweDlmYTZlNzM1LCAweDc1YmVmODk4LCAweGUzMDMxOTBjLAotCTB4MWFlYjdlMmEsIDB4Y2JhMDA0YzcsIDB4ZjcwZGQxMWUsIDB4Y2Y1YjZhYjMsIDB4Y2UxMWJjOWIsIDB4MDRmOGY0OGYsCi0JMHg5N2RmZThmOCwgMHhjZjgwNjVkYywgMHg0MmM3ZmY2MywgMHg4ZmI1OWY2MCwgMHg0MjY0ZTc5ZiwgMHg2ZTI2NzRiYywKLQkweDRmZTAzZGU1LCAweDc1ZTM4MmZhLCAweDc0ODlkOWFhLCAweDRmMzhiOWJlLCAweDY2ZmRhMDRhLCAweGMzNDczYjM2LAotCTB4YWYzMjU2OTEsIDB4YWQxNjE1M2YsIDB4YzExYzEwNzEsIDB4OTJmNTI5ZGEsIDB4MjNiZDU4YWIsIDB4YTQ0ZDY3MjYsCi0JMHgxMjhhMmZmOSwgMHhmYjg1NzlmOCwgMHg5ZmUxNWNiZSwgMHgzZjc5NmU4ZiwgMHg2MWYzMDdiNywgMHhlZWNjOTkzZCwKLQkweDZiZTZmNWQ1LCAweDUzZDFmMjgyLCAweGRmNDFmODI0LCAweGYzMDlmZWMzLCAweGUwM2VlY2M1LCAweDk3MmIwMzNlLAotCTB4NTk3YTYyNmYsIDB4OWUzZDdiZTEsIDB4Y2YwY2NkZDMsIDB4M2MwNWZmNGEsIDB4ZjBjY2QyM2YsIDB4YzE1OWUwYTMsCi0JMHg0YWJjN2VhZiwgMHhhZWFmYWE3ZCwgMHg2ZTIxZmI1NiwgMHgzMmZkMTk2OCwgMHhhZDM1ODdhYywgMHg0MTQwZDM4MiwKLQkweDRjM2IxOGQ1LCAweDJkYjU4NzIwLCAweDY3ZTA0YjhmLCAweDcwNjJlMTlmLCAweGE1OTA3YWU5LCAweDZhOWRkNzNlLAotCTB4NmRlYmU3NjYsIDB4MDJjZDU3ZDksIDB4MDU2Y2Y5M2UsIDB4N2I2ODRiYjUsIDB4MGVmMzljY2YsIDB4MTlmNzc3NTgsCi0JMHhiZGMxZWZkYywgMHg5MTVkZjk0OSwgMHg3ZDE2ZmRhYywgMHg3OWNmODFmNSwgMHgxYWEzNjRlZCwgMHhmMzhlMmE2ZSwKLQkweDA5M2NhYWU2LCAweDU3YjcyNmRjLCAweGFhMDY5MGVkLCAweDM5YWE2OWY4LCAweGVmOTVjYjBlLCAweDZjYWU1NWM5LAotCTB4YzNmYjRlZjgsIDB4OTk4ZmM4NzEsIDB4Njc4N2M0MDksIDB4M2VmMWRhMDYsIDB4YjE3NWVkZGEsIDB4MDNjYjBmOGMsCi0JMHg0Zjk4NGMzYiwgMHg3ZjRhZmFjNSwgMHg3OTdhM2Y0YSwgMHg4ZGFjNTY5YSwgMHhkMDVkOTlmYiwgMHg1MmYwMTgzMSwKLQkweGUzZGUwZTZjLCAweDlkYTdjMDhlLCAweGJiZTQwZTljLCAweGNhMWUxM2FlLCAweDhiZmY1OWI3LCAweDk0N2I4OWQ2LAotCTB4MmE0M2EyNzUsIDB4NmM4OWM1NTEsIDB4YTczZDMzMzUsIDB4NDYwNjI3NWEsIDB4ZDQxNjI3NWEsIDB4MWQwMjA2YmIsCi0JMHgxZjRiNmMxNiwgMHhlMGIyNDIwOCwgMHg0OGM0YzJlZCwgMHgzZWZiYzRlYiwgMHg4ODc4NWU3NiwgMHg5YWVjZGZkZiwKLQkweDJiODlkNzQ2LCAweDM0YzRlYjU0LCAweGJlODlmMjBiLCAweGM0YWNkZjlkLCAweDlkNjQ1ZDYxLCAweDVmZjZlODUwLAotCTB4ODdkZTZmYWMsIDB4N2M4MjIyNzUsIDB4ZDc2YjM2NmYsIDB4NGI1YjViODksIDB4NzViODlkNzEsIDB4NTdiOWE4OWEsCi0JMHhiMTdjZGViMSwgMHg3MTJmMjI3NSwgMHhiNzI1ZTYwNiwgMHhiY2ZmMDIzNSwgMHg0M2UxZWRjZiwgMHhmYTBlYmUzYywKLQkweDM0ZTJmNTgxLCAweGRlODRmZmU4LCAweDdhNWY0NmViLCAweGVhZmViMWZkLCAweDNjMjZmZmY1LCAweGMxN2Q3YTJiLAotCTB4NzgxZWVjMmQsIDB4YzgyNDNlNmYsIDB4NTA2NjBiY2YsIDB4M2YwMDJlYmQsIDB4ZTBiZWJkMzIsIDB4ZDMxN2VlMGUsCi0JMHhkMDEyZDllOSwgMHg3YWQ1NjNiMywgMHhmMWFmYjU5NiwgMHhiNmExNzViMiwgMHgzMzE3ZjUyNSwgMHgxYTRmZjk2OSwKLQkweGFkMTQ3NzI1LCAweGRlYjA5M2ZmLCAweGRkZWI1MWNkLCAweDEzNzdhMGQzLCAweDcyZGRlODIyLCAweDZiM2Y3N2E2LAotCTB4NTNmNjgzMWQsIDB4ODhmYmYzNWYsIDB4Y2ZhYTViZWIsIDB4ZjgxMWRjMzIsIDB4YWI0Y2ZhNjMsIDB4YjFjZTllZTYsCi0JMHhkY2NiYmZkMSwgMHg0ZmIyZjIwYywgMHg0ZmJiNzNjNCwgMHg3N2IwMWRiOCwgMHg4MmM2ZWZmNCwgMHgxNDRhN2E5ZiwKLQkweGE3MWM0ZjFiLCAweDVjOGZhNzY3LCAweDgxZWE5OTNiLCAweDllY2MzOTgyLCAweDIyMjBkZWFlLCAweDk5OWE2YWZlLAotCTB4NDQ2NGQ3ZmMsIDB4M2YzNDVkZmIsIDB4MjZhZmZiMjUsIDB4NjM2ZTU3YzgsIDB4MDY3NDZmZTcsIDB4ZmEyYTc5YzUsCi0JMHg2OGViZWU1NywgMHhlNTcwM2YwMCwgMHgwZmNmMDE2YSwgMHhmMDE5Y2UyMSwgMHhiM2UzOGYzOSwgMHhmYjg5NWRjYywKLQkweDgwZmM3ZDE1LCAweGU2YWQxN2UyLCAweGFlYjdlNmY1LCAweDNlYTlmZjQ2LCAweGUzM2FhMGFlLCAweGFmYjBkM2RhLAotCTB4M2EzMzM2MjgsIDB4ZmMxNjZmMTQsIDB4MWNlMTUzYWIsIDB4ZmRjZjU3NWIsIDB4NTQxYjllMzAsIDB4YzdkZmI0MDcsCi0JMHgxNWNlZjlmMCwgMHg2MTliOTk4MywgMHhlODllZjU1ZiwgMHg4ZGNlYjQ4ZSwgMHhmY2E1ZTNkMSwgMHg3ZWNiYzQxZiwKLQkweGZmYjE5NzhhLCAweDE3ZDJmMWVmLCAweDhmN2RhODFlLCAweDNlM2Q2NGZlLCAweGJkNzE0NWM2LCAweDgyYzY0ZDkyLAotCTB4ZjA2MjdlMWMsIDB4ZGY5MTVlYTAsIDB4NjQyZTMxMTEsIDB4MzVjM2UzY2UsIDB4YTIwYmZlZjcsIDB4NjdkYWJlOTgsCi0JMHhkYzQwMzZmMCwgMHhlMmMzNWNhZSwgMHhkYWFkZTY0NywgMHhlNjkxMmJiOCwgMHg2OGM4MDY2NywgMHg1YmNmNDc3MCwKLQkweDQzODc1ZGE5LCAweDBiYjM3ZWViLCAweDc1OTlmNWQ3LCAweDEzODgwNTFiLCAweGZkZWZjYjljLCAweGM3MWZmYjk0LAotCTB4NThlZTEyZjcsIDB4NWE3OWQ3NDgsIDB4ZDliNjc2N2YsIDB4ZmI5ZmU3MGIsIDB4MzdhOGRkMmQsIDB4MTA1ZGJlMTUsCi0JMHgzYTk3ZWNjNSwgMHhjOTYzOGUzZSwgMHg3ZDcxOTNkZCwgMHgyODljMTE2YSwgMHg1YjBiNDE4ZiwgMHhlMDlkMjhhZiwKLQkweDA5YjY4NzFkLCAweDc0ZTE0ZTVmLCAweDE2ODg3ZTYxLCAweDRhNWFjNzQ2LCAweDI5ZTc5MDM3LCAweDhlYmYzY2FkLAotCTB4MmJiNzgxZDksIDB4NzdlMDgwZjksIDB4Nzc1N2EwMDksIDB4MDg1ZGVjNDgsIDB4OWMwYmM0ODEsIDB4MTFmNWFhMDgsCi0JMHgxMmYyZDVjZSwgMHg3NmRlNzQ1NSwgMHg1YWZmZjE4NCwgMHhmYzFmOGRjMSwgMHg0M2VmYmZmNCwgMHg5ZWY5M2VlNywKLQkweGU1ZmQzMWQ5LCAweDBiNGYwNTc3LCAweDZmZGU3NDc0LCAweDgzMWUyZjY5LCAweDFiODIzM2U3LCAweDhkNjhjN2RmLAotCTB4ZTM4NTczYzUsIDB4MDc5ZGVjOGQsIDB4Y2JkM2I3OTksIDB4NWMzYmVjMDUsIDB4OGRjYWJmMmEsIDB4MWY4ODcwMzAsCi0JMHg5YzYwYjIyZCwgMHhjNjliZjYxZSwgMHhiZGVkMzJlYywgMHhkNzEzNTk0MCwgMHg0ZWUzNWRmMywgMHhkYTNiNDk2YSwKLQkweDMxNzhlMTYzLCAweDgwMjYzN2VmLCAweGI1MTgyNDU3LCAweGM4ZGQ1YzcxLCAweGZjMDAzZmU3LCAweDAyZGZjZGQ3LAotCTB4MzEzOTI0OWYsIDB4YTc2ZWY0NmUsIDB4ZWVjOWRkZjIsIDB4ZGI3Y2YwNmYsIDB4MzM0MzljOTAsIDB4NWIzZjdlMjksCi0JMHhkZDc5ZTIyZSwgMHhjMWQ3MDY2ZCwgMHgxZTZmYTA4OSwgMHhjYmM4MDg5MSwgMHgwZjI1N2I2NywgMHhiOGFjMDc1YiwKLQkweDNiZWU5NGVlLCAweDRhNWVmNzg2LCAweDI5MTFlYzU5LCAweDJmYWQ4ODdkLCAweGZlNzhmOGM3LCAweDBmNmRkNzQ0LAotCTB4NjA0ODQ0ZjgsIDB4NGRmYmM0MWMsIDB4NzQyOGVmNzMsIDB4ZWM2NGRmODEsIDB4MmU3MGE1ZmUsIDB4ZjM4MTczNzYsCi0JMHhlN2EwNDFlMCwgMHg5M2JkZWNjMywgMHg3MDBiY2JhMywgMHg0ZmY3NzY5ZiwgMHhjM2I3OTQwNSwgMHhmZWQwNmU5NCwKLQkweDA3YTk2OTk2LCAweGVmN2VkMjBmLCAweGU3ODA5ZTU4LCAweDA5M2QzMzVjLCAweGQ3YjljMmI3LCAweGRiYTJiZGNjLAotCTB4YmVjZGViNDUsIDB4NzM4MzZlYzEsIDB4NDUyM2E5YWYsIDB4ZTdlMTU1ZTIsIDB4N2U4ZWQyMGUsIDB4M2Y3NTk5OWEsCi0JMHg1ZGM2MDViZCwgMHgzMTQzZDc0ZSwgMHg4NWZkZDIxNSwgMHg0YWJmMjEwMywgMHhiMmI1ZjZjMCwgMHhiMjkwMzRkNywKLQkweGYzY2FmYjRlLCAweGZmYjRiMWE2LCAweGQwMGY1YTMyLCAweGQ1OGFiYjVlLCAweGRjMTI2ZGFiLCAweGQ2NWI3YTEwLAotCTB4Y2JlYTM4ZmEsIDB4MWYwMTI2YjIsIDB4ZjZhNzY4OTYsIDB4ZWI4MzE0NmYsIDB4ZGI3MGEyOGYsIDB4MzRmNmQxNTcsCi0JMHgwM2RhMGYzZiwgMHg1YmQ4YTZkYywgMHg5NmFiM2NlMSwgMHhlN2RiMTM4ZSwgMHg2NDc5ZTNkNiwgMHg4YjQ3NmQxOSwKLQkweDRmZDM3YjQ5LCAweDU1ZmNkZTExLCAweDQ0N2I4MTAyLCAweDhmYTliOWU1LCAweGJkYmMwMmU1LCAweDBmY2ExYjkyLAotCTB4YzYyNWY4ZWQsIDB4ZmRhMmNjOGQsIDB4NjdmMGEyMGQsIDB4ZTg4NTFkOGIsIDB4NzA0MDdiNTcsIDB4ODMyMzNiZTIsCi0JMHg1ZDdlOTAzMywgMHg3MDY4NjEzMCwgMHg2NGZkMGQzYywgMHg0MmU5ZDcxOCwgMHg3MWQ1MTgzNCwgMHgxNjE2YzkwOCwKLQkweGIwYjY1Y2RmLCAweGQ1ZTYwMWJlLCAweDFhYTQyNzIxLCAweDliY2VhZjkwLCAweDRlM2YxZDYwLCAweGY2YTVlZGYxLAotCTB4OGIxMzMxZWIsIDB4OGY5MzY4NmYsIDB4N2E1NDNhOTksIDB4MWQyNWJjNzQsIDB4OTY5Y2Q4ZjUsIDB4OWYyZjNjM2MsCi0JMHhiY2YwNGE0YiwgMHhlY2NmNWJkYywgMHgyZDRiMjM5MSwgMHgzMGVjMDE3ZSwgMHhiZTE0MzljOSwgMHhlMzM1MmRiNywKLQkweGQ4OTdjZWY3LCAweGE0MzlkM2ZhLCAweDI3YTFmZDAzLCAweGVlMDQ0OTU3LCAweDk1NWUyZDM5LCAweGYxZDAwY2ZlLAotCTB4ZjkwOTA2ZTQsIDB4NDI0ZTdjNGQsIDB4MjVlZjM2M2QsIDB4NWI2YjI3ZTYsIDB4YmM5ZWUwYzUsIDB4Y2ZkZWM0YzcsCi0JMHg5ZjlhNzI4MSwgMHhmZjY1MWJmNywgMHg2NTYzZDVhYiwgMHg1M2Q0MGFhZSwgMHgyYmQ0YmQ3YSwgMHg3YWE5ZWZlZSwKLQkweDJmNmNiMDEzLCAweDE0Y2Y3NTdkLCAweDc0MTU1N2Q0LCAweGViNDYwMWRkLCAweDM3MDZhZmE1LCAweGFmNTJiZmEwLAotCTB4NGQ4OTZhYWYsIDB4MTBkOTUzZDEsIDB4M2Q1YTUyMzcsIDB4ZTA0YWQ2NjQsIDB4YzA1ODNiZTMsIDB4YjVmMDdiNzYsCi0JMHg3NTg2OWZjZiwgMHhlMDRlY2FiNywgMHhmOWQxOGQ0YiwgMHg4MmY4YzA4YywgMHg2Y2NjYmM4MCwgMHhjODM5ZjhkZCwKLQkweDBiNGNmOTQxLCAweDAyNzNiYmJlLCAweGIzNzIwMGU4LCAweDU5YzU5ZTIyLCAweGRmMTE0YmY5LCAweGJjZTUxYzRhLAotCTB4NTczZTVhOTUsIDB4Nzg2N2I1Y2UsIDB4YWY1MWUyNDUsIDB4ZTI1NmU1NWYsIDB4ZjQzYmQ1NTEsIDB4ZGE1N2U1MTAsCi0JMHg4MjJkOWRjZiwgMHhmZTQwMjJkZiwgMHhjNzdiZWVjOCwgMHhlMzg5ZGU2MiwgMHg4M2VkYzg1YSwgMHhlN2U0NzYxNSwKLQkweDVmOWZmNzQzLCAweGViM2FmYzBhLCAweGJkODA4MTQxLCAweDAzNmY2NDRlLCAweDJiMzU4N2FjLCAweDY1ZjgxNzA1LAotCTB4ZGFjODNkZTcsIDB4NjFlZGEzY2YsIDB4Yzk3ZTg3ZGMsIDB4YjdmMjhhZjgsIDB4NjZiZmY4MGIsIDB4YjFiYmUzZDUsCi0JMHgwMmUwOTM3ZSwgMHg5NzU2ODdmOCwgMHgyZTUxM2RhMiwgMHg5YmNiMDQ4YiwgMHg4MWZlZTA4ZSwgMHg1ZjE4NTNhZSwKLQkweDg5OGIyNmQ0LCAweDRiMzVmZmMwLCAweDk1MzA0ZWNjLCAweGY4NTIzZTE0LCAweDE3YmYwOGYyLCAweDU5ZGNhMjRkLAotCTB4OWY3NmQzMzcsIDB4ZGU4NDkwMDAsIDB4MTc0ZTI4ZmMsIDB4ZjAyOWViNDIsIDB4ZjhjY2FkNDksIDB4OTI0YmM4ZWMsCi0JMHhlMmU2ZDgxYiwgMHhjM2VlYzk3YywgMHhhYmViZTQ5ZSwgMHg1MzJkZGNmOCwgMHhkNzNjYzEwNiwgMHhiNjg2MzhiMiwKLQkweGIwMjYwNTU1LCAweDA1ZmE0ZTIzLCAweGNkZWY4ZjNjLCAweGI2YTZjNDk3LCAweDdjYmUxNGEzLCAweGZhZmE2MDRlLAotCTB4YmRhODcxNjIsIDB4YTVmMzhlZjgsIDB4YTk5NDdmYzIsIDB4YjU1OTVmNzEsIDB4MGY3MDIyNTcsIDB4NWU4ZmNmNTcsCi0JMHhjNDJiNzAyOSwgMHg0Y2JlOTQwYiwgMHg1YmM3NDNlNywgMHhkYTNmNzBkMCwgMHg2OTFlMGFlYiwgMHg2NWYyMTEzZSwKLQkweGExZWYxNjQ2LCAweDkxYjU0M2M4LCAweGU3N2QwNWM1LCAweDM3ZmFlOWYxLCAweDc5NjFlYzViLCAweDRhZGM1OTEwLAotCTB4YmJmYmY2OTAsIDB4OWM2MDJmMGQsIDB4NDdmNWI5ZGMsIDB4ZTZmYjQ3YWUsIDB4ODAwN2NhMGQsIDB4MTI3NjBkZmYsCi0JMHgxZjg3ZmRjNCwgMHhiMzQ1NTBmNSwgMHg0MjM4YzFlOCwgMHg2NmU3MzA2MywgMHg4OTVkYmVkNSwgMHhjNTdjYTg5NywKLQkweGQ4YWVmODhlLCAweGQzMTdmNjY0LCAweDhmNWIxNWY2LCAweGY1ZjllMTY1LCAweGU3OGM2ZWEyLCAweDY4MGJkNzkwLAotCTB4MjNiOTEzMWYsIDB4NTQ2ZmVlMGIsIDB4ODZkYzU5MTgsIDB4NjQ1ODJlZGUsIDB4YjNhYTdlNjEsIDB4ODNhNzU5YWYsCi0JMHg2M2FjMjZkZCwgMHgwNDU1NjllZiwgMHgyYWNjOTM2ZSwgMHgxNmZkZWViZiwgMHhlNzg3YTk0OSwgMHgzM2E1MzIyOSwKLQkweGYxODY5M2RjLCAweDUyNzFkZmE5LCAweGZlY2UzNWUyLCAweDQ1NWZmMTg2LCAweDVjZjY4NDhiLCAweDlkOGRiYWM1LAotCTB4NzE1NzdmMTAsIDB4ZGNmYjhjZDgsIDB4MzFlNzc1ZGEsIDB4OTVlMGI4OWUsIDB4YWUxZGYwOTcsIDB4MTM1MTE2ZGEsCi0JMHhlZTJiZDU3ZiwgMHhlNzg4OWQ2OSwgMHhkNWNkMzUxYiwgMHhmMzQxYmYxOCwgMHgxMzUxY2U3OCwgMHg3N2ZmMWM4OCwKLQkweGNhOWNmOGIxLCAweDk1NmRiNjU3LCAweDM3MmIwYTI5LCAweGVmODFkYWZmLCAweDc1YWZiNTcyLCAweDc1OTNiZGUwLAotCTB4ZDg3NzFlZGYsIDB4ZjAyOWNlMmIsIDB4MzljNmI3ZjAsIDB4NTA3ZjgxOWQsIDB4NDVhZGZhYzYsIDB4ZDY0NGU3MWIsCi0JMHhjNzQ2YmQzMSwgMHg5ZWU5MTM5NywgMHg3YWRlYzg0MSwgMHgyMWU3ZjNlOSwgMHhhNmVjZjcwZSwgMHhmMTg3OWY0ZiwKLQkweDY3ZTdmZDU2LCAweDA2MWM0M2NmLCAweDgyNzE2ZWQ5LCAweGZlYmI1MjNkLCAweDU0NjM4YzdkLCAweDMwYjJlZGRhLAotCTB4MzdmM2FmZmIsIDB4Y2ZmOGM2YmYsIDB4ZGQ5YTNmY2UsIDB4ZGI3M2FkMDAsIDB4NmY2MGExYzksIDB4NmJmYzZlNzQsCi0JMHhkZTc1YzQyMiwgMHhmZDEwYWRiMywgMHgyOTZjZjczOSwgMHhmODIyNDgxOCwgMHhmODE0OTQwYiwgMHhmODhmZGZkNiwKLQkweGRhYmQzZDUzLCAweDVlMzBkYjlhLCAweDM3YTUxY2U0LCAweGRjNTA4N2U4LCAweGM1OWFhMDVhLCAweGJjNzhiYTAxLAotCTB4NzFjODg2ZGEsIDB4ZDNlMmJkYmUsIDB4NjFiZTZmOWEsIDB4NjZjNWU4MTIsIDB4MzQ1YzE3NjYsIDB4YTUwMGVkNGUsCi0JMHhhMGZkMTVlMywgMHhiOTg3ODZkZiwgMHhiZjRjODkzZSwgMHg0YTBmZjA3MywgMHhmYTNhNjNhNywgMHhmNzNjZGU3ZCwKLQkweDU5NDJjZjU3LCAweDcxOWY3YzczLCAweGUwN2VjMTZhLCAweDBlMjM4OTRkLCAweDE2OWQzYzU4LCAweGJmNGQ5YjkwLAotCTB4YTA0MGI4YzUsIDB4ZjQwYmIxNWIsIDB4YzE0M2U3ZjMsIDB4ZWE0YTdjMmYsIDB4Zjc0M2ZmNDYsIDB4NWJkZTMzMzYsCi0JMHgwODc2ZDhhYiwgMHhjYjczYTdlNSwgMHgyNWQzOGM3ZSwgMHg5M2I3OWUzYywgMHhmZTJjN2U4NCwgMHg2YTdhZmI5MiwKLQkweGJlMmNlYzliLCAweGUyMWZlMzhkLCAweGZjMGU1Y2RmLCAweDE4ZGNlM2NlLCAweDZmZjEyYjFmLCAweDBkYmRjNTdkLAotCTB4ZWZlMzRlOGYsIDB4YmNmOGIwMmEsIDB4NzgwZmE2ZWEsIDB4NWU5ODU5MWMsIDB4ZTlkMDJlNDIsIDB4MTNjNmI3YzgsCi0JMHgwMjcwNzgyYSwgMHhlM2FiYzYxZSwgMHgxN2M3MjMzOCwgMHgzOTdkZTI4NiwgMHhhMDdlODBiZCwgMHg5YTcxNDNhNywKLQkweGUyMTgzZjM0LCAweDIxYzJmY2Y2LCAweDc0MWY0MTEyLCAweDlmZjE2NmFlLCAweDFlZjY5MjlkLCAweDJjM2U5ODY4LAotCTB4YWQxNWQzYWUsIDB4ZmY3ZjUzOTMsIDB4MzYyZjM5ZTIsIDB4OWY4YWVmZmUsIDB4MjY5NzY4ZDgsIDB4ZDNjMTUxYWUsCi0JMHhmNTkxMGJkOSwgMHhmMGI0NDE3OCwgMHg5YTkzZGQ4ZiwgMHgwNWVmZTgyMywgMHhjMDI3NDdlNCwgMHgxMzExZjk3OSwKLQkweDdjNWU3YmMxLCAweDM3ZGNhNGZmLCAweGIzYjRmZWUyLCAweDBiOGM0NWViLCAweGExYjQwODZjLCAweDhiZWJkNzFlLAotCTB4YTI0ZTdlMWEsIDB4ZDEyZGVmMWYsIDB4YjRkNTRmNGMsIDB4ZWNlMjc1YjAsIDB4NDZkZmJiMjYsIDB4ZWI3ZDljZTEsCi0JMHg5YWU3ZTQzNSwgMHgzMjRjNDcwZCwgMHhkZDdiYjc4NSwgMHgyYjhiMTM2NiwgMHhlYjAzZjI2MCwgMHhmZTM1NWY4NCwKLQkweGM4ZWYyZmIzLCAweGRmY2RiZDQyLCAweDMzZjdkMjE1LCAweGRiNTNmNzliLCAweGRhOWZiOTFhLCAweGZkMzVlNzBkLAotCTB4OTMwMWNhNTQsIDB4ZmVmMTc2ZDMsIDB4YjczZDE4Y2UsIDB4ZWQzM2JjMDEsIDB4MTMzYTVlY2MsIDB4ZGQyMjhiMTAsCi0JMHgyZDEyOTk4YiwgMHgyMzczZmRmMSwgMHhmNWQzNzNmMywgMHhiMjU3ZGYxMiwgMHg0NDk0ZjdiMywgMHg1ZmRhMzQ0NywKLQkweDBmNzNkOGY3LCAweGQ0ODAwY2M3LCAweDhiMTI3MTg0LCAweGM1NWM3OWViLCAweGEwMjRlZTQzLCAweGI1ZmI2MmY3LAotCTB4MTRiYmM2MDQsIDB4YzdkYWFiZjAsIDB4MDEyZjRlNGIsIDB4MmE0YTRkYmIsIDB4NjczZWFiMTksIDB4MWE2ZmM2NTEsCi0JMHgxNTdlMjA2MCwgMHgxN2IxZWZmZCwgMHgyN2ZkODQwZCwgMHg2MTgzY2EzMSwgMHg3ZGE3ZDcxYywgMHhhZmY1ODQ2OSwKLQkweGY3ZmNjN2RkLCAweDBjYjFjMmU0LCAweDc0NmVkZWY4LCAweDcwYTc4YWVlLCAweDZlMGIyN2RiLCAweGU2ZjZiZDcwLAotCTB4ZTQzZjA2N2IsIDB4ZGY2OGYwNGYsIDB4N2E1ODg0ODUsIDB4ZGI4ZjVmOTgsIDB4ZGRhMGY2ODAsIDB4MmFkMjc0MTAsCi0JMHg0ZjY5NmVjNCwgMHg4YmFjMGRjMiwgMHgxODg5OGNiOCwgMHhlODcxOGYwMiwgMHhhNmEyZjg4ZiwgMHgwNzNhYmRjMSwKLQkweGQ0MjllNmExLCAweGVmMzUxYjczLCAweDFhZTRjNDI0LCAweDkwMjZlZjc1LCAweGJkNzQxOTAzLCAweDU1N2U3MWIxLAotCTB4ZjY3NjcyZmMsIDB4MDNiNzBhNmYsIDB4Y2Q4ODYzZGYsIDB4YmVjMGY1MjQsIDB4YjQ1ZWVjMmIsIDB4ZWZlNDllMWIsCi0JMHg0OGRmZDA1OCwgMHgyMzg4Njc4OCwgMHgzYmY1NmVkMSwgMHhjZDVmYjQyZSwgMHg1ZmI0MTBmYiwgMHhhM2Q2M2U0ZCwKLQkweDE5MTdjN2NkLCAweDVmNWE0NzhmLCAweGE2MzhmOWUyLCAweDQzYzQzNjg4LCAweGQ5NDFhMTZjLCAweDRmMGYxNWFmLAotCTB4MzYzYjhmMGMsIDB4NTA4M2I4ODEsIDB4ZTMwZDlkN2UsIDB4Yzk3OGE5YzAsIDB4NmNkODc5ZWEsIDB4ZjFkMzcxZGEsCi0JMHg0YzQ0ZjQ2OSwgMHg2MDZjODc2NiwgMHg3NzdjZDRlMywgMHhmMzgwOTcxMiwgMHhkM2JmNjhmNywgMHhkYmYyNmFmMSwKLQkweGFhM2M3OWEzLCAweGRmNDExODkxLCAweDA5ZGFhMmQ5LCAweDA2OGY3ZmM3LCAweDdiOGM0YmRmLCAweDdkMDIyNDg3LAotCTB4Y2I1N2RmMDgsIDB4YzQxMWVlMDQsIDB4ZmVkMDc5ZjAsIDB4ZTA5ZGY1MzUsIDB4NmJmZDYwMWQsIDB4NGVjMTkwZTEsCi0JMHgyYmJmN2RmNSwgMHhjY2I3ZmFmOCwgMHhlODFlZjI1YSwgMHg3NTYxOWM5YiwgMHgzMTNiYzgxOCwgMHhiZGUyNjQ4OSwKLQkweGE4MDFkNmQ1LCAweGU2MTZkMjlmLCAweDJmMzQ2MzkzLCAweGNhYmUzMjM0LCAweDZlNTA0MTU4LCAweDljNTliYTMyLAotCTB4OGQxMjU5MGEsIDB4OGEzOWE4ZjYsIDB4Yjg2Yzk2YzgsIDB4Mjk2NDQ0YzcsIDB4ZjNmMTdhMWIsIDB4MjJkNzI1ZjMsCi0JMHg1YzY1MDUwMywgMHhiNjhkNzk0ZSwgMHgzN2NlZWQ2YiwgMHgwODQ0YTVjYywgMHhiZjg1MTE0MCwgMHgzMWYzZGEzNywKLQkweGEzNzBkZmY0LCAweDFhMzBjOTM3LCAweDc0YjdkZTNlLCAweGRhOTQ2MGU3LCAweDY4MjNjMTRiLCAweGI1ZGRlZTEwLAotCTB4ZTkwYjA4NjcsIDB4MDg5YWY3ODEsIDB4ZjAxNzc3YjksIDB4NGYyODYzNzgsIDB4YmFjZjcwODIsIDB4Zjc5NDNhMzEsCi0JMHhkZjdkNTE0NCwgMHg2N2YyYzY5OCwgMHhiYTVkZWZhMywgMHgzZmJiYzI5YywgMHgzNDZjZTRhNiwgMHg3OWNhMjc4YywKLQkweDA1Nzc5ZTE5LCAweDE3ZmU3MGUzLCAweDcxOTQ1ZjViLCAweDk4ZWE2YzhlLCAweGY5OTYzZDEyLCAweGNmMWRlMTRkLAotCTB4M2RkMGY2ZTEsIDB4ZDc4NzVjNmEsIDB4MTA3Yzk0ZGEsIDB4Y2QyNTExZjcsIDB4NTVhZjUxZmIsIDB4Yjk2M2Y2MDcsCi0JMHgxZDM0ZjIwMSwgMHgyNTMxZGYxNiwgMHhlYjEwOTYyNSwgMHg5MzBiNGJhMywgMHhmZDc4ODUyZSwgMHg5ZDAzMjRkMiwKLQkweDk3NDc4MGU3LCAweDYwZmI4MmVlLCAweGEyM2MzYzYxLCAweGIwZDE4M2MxLCAweDQ5OWVkNzdjLCAweGRmMmMzYzZhLAotCTB4N2Y0ODc2MDUsIDB4YmFjMDMwZjEsIDB4ODlmMmU5N2MsIDB4ZTUzNzlmZmQsIDB4YzQyYjc4OGIsIDB4ZjAxOWU0M2IsCi0JMHg4N2YxYTVkZCwgMHhhMTVmZTg2ZCwgMHg0N2FlMGIzZiwgMHgzZWVhY2UxYywgMHhmYjJhYmZlZSwgMHhjNTI3MGExMSwKLQkweDVmY2MyZTNhLCAweGFmODUzYjRhLCAweDc0OWJlMmZhLCAweGJkOGNiY2UyLCAweDlmZTVhN2FmLCAweDAzMjdhYjYyLAotCTB4N2FiNzBkZTAsIDB4ZTFjNmQ5ZjYsIDB4ZjYzZWYxZmMsIDB4M2RkN2FmNTQsIDB4YWY5ODRjNzksIDB4MDYzYmNkODksCi0JMHhiMzJlZjdlZSwgMHhhYWNhMzVkZSwgMHhjZDRlY2JmMiwgMHhkMWE2MjA1YiwgMHgyYzgxNjZmMSwgMHg5M2U3ODQyNCwKLQkweDhjYjY1MGIwLCAweGYwNGNmM2EwLCAweDdhY2UzMDE4LCAweDA2M2JkNTk5LCAweGVmNGM3MWZhLCAweDg0OTVkMjBlLAotCTB4MzFkZTAwOWEsIDB4MGI5NjE4ODIsIDB4NmQ4NmJmYTUsIDB4NTBkZWJmNmMsIDB4NjIyZmYwNmEsIDB4YzAwMmJkZTcsCi0JMHg4NzQ3ZjMwYiwgMHgxOWJhM2Y4ZSwgMHg0MTFjYjQ3ZiwgMHgzZDY5YThmZSwgMHhhNWEzZjhjMiwgMHgwYmY4MWYzZSwKLQkweDlmNjBjZGNlLCAweDQ3YmE0OGRmLCAweDc5YWZkZDAzLCAweDQ4ZDBhOWI0LCAweGI1OTg3ZmY5LCAweGYyODUyMWJiLAotCTB4MTRkNjQ0ODUsIDB4Nzg4YTVmMTYsIDB4YWY4YzMxZmQsIDB4ZjhmODdkMTcsIDB4NDVmNTc5OTQsIDB4NjkzZGM2ZGYsCi0JMHg3ZWMyNjY4ZiwgMHhjZjAxYWY3MiwgMHg4NWJjMTRiYiwgMHg4YjJiMDdlYywgMHhmNzY0MWMyMywgMHg2YTdlODM0ZSwKLQkweGMzNzYzYjczLCAweGY5ZWQzN2Y0LCAweDcwZGI4YzBmLCAweDA3NjliZGVjLCAweGEzNGM3N2I0LCAweGZiODU3MjE0LAotCTB4MDhiYmRjNmQsIDB4YTQ2ZGNiZGYsIDB4MzE5MDAwZjMsIDB4NzU4NjViYTQsIDB4MzA3YzZmYmQsIDB4MDNlMTA5ZjksCi0JMHhjMDRjOWVlYywgMHg5Nzk0MTFjNywgMHgxMDllZmNmNSwgMHhmZmJjM2I5NSwgMHhkZWNhY2MzYSwgMHg2NTY3OTg2NSwKLQkweGFjMDdlN2ZiLCAweDFkOTk0ZjIyLCAweGM3YjdiMDk2LCAweGRhYWRmYjA0LCAweDlmYWMwNjI1LCAweDdhYTY2OTAwLAotCTB4ZGViMDRiZmUsIDB4MjZhMzU2MDMsIDB4YTdhMTRlNWUsIDB4OTM1NDRmYzIsIDB4ODc3ZGUxNWEsIDB4M2RlZjU4OGMsCi0JMHhiMzg5ZmU1YSwgMHgyOWUwYTlhNiwgMHgxMWYzMWVlZCwgMHg0YTBjOWNmNywgMHhkZDc3OWQ4NywgMHhlNTJhZWIwZCwKLQkweGVkMzUxYjlmLCAweGMwMTY0OTQ2LCAweGY4MWY1MjliLCAweDY4N2QxMjMzLCAweGFlOGM0NWJiLCAweDE3YjA1NjcxLAotCTB4MjA1Y2VlMzYsIDB4N2Y0MmY5YzIsIDB4ZWYwMzlhZTksIDB4MzlmYWQxYzcsIDB4ODliNzUyNTYsIDB4YTE4OWNmYjYsCi0JMHg3OWUzZTQyOSwgMHhhN2NmMjA3ZSwgMHg0M2ZkMzRiMCwgMHhkZmEwNDFiNywgMHhlYmJmNzM1NywgMHgxNzFlNTZiMywKLQkweDA2NWU3NDYwLCAweGNiM2M1M2VmLCAweDI5MzEzYWYxLCAweDQ1MDVkNzFhLCAweDgwNjZjMTZlLCAweDNmMjM2YjczLAotCTB4NGVlYjRlYmYsIDB4MTRkZDAwMzMsIDB4MWI3NjM2MzksIDB4NjhiYTc2ODIsIDB4MDY1ZDE5YTUsIDB4Yzc3ODYzODgsCi0JMHhlYzZkZTc0NywgMHg3YjVjZWY1YiwgMHhhN2JmYmIyOSwgMHhhNzMyZmVmZiwgMHhhZmI2ZjdmMywgMHhhZjc1ZWFiZiwKLQkweDRiYTA2NWY3LCAweDYzYzc1NDc1LCAweGNkN2NkMTM3LCAweGY5ZTE5ZmE1LCAweGNkNmIyMmUwLCAweDNiNzNlYTU1LAotCTB4ZmYxZmFhN2QsIDB4M2E0ZTE3M2IsIDB4ZmNlYzNlYzAsIDB4YzkxNDVjY2EsIDB4MzJiMGVlY2UsIDB4NmY4Zjc3ZmIsCi0JMHhlYzUzYjYzYSwgMHhlODE1MjQyZSwgMHg0MTNkZjU2NCwgMHg1NzY4YTYzMywgMHgxZTU1MDhmZCwgMHhjNjM2NTFkMCwKLQkweDY1NmFmYWMxLCAweDc1YWJhNGZlLCAweDE0N2YwM2Y3LCAweDQyYmQ3ZTY0LCAweGY0MTIzOGQyLCAweDVmZDU4ZTY0LAotCTB4ZTVjMzhiOGMsIDB4NDgxNzE4ZTksIDB4NTFmNjYyYmUsIDB4Y2UwZmZkMTQsIDB4NzlmOTBhOTcsIDB4NzNiMGU3OTgsCi0JMHgzOTdmMmMyNywgMHhlMzkzOGQzMSwgMHgyYTRjN2VhMCwgMHhkYTIzY2ZjMiwgMHhlMjcyYjlmNywgMHg1ZGU4MjM2NSwKLQkweGYwOGE5ZTkyLCAweGU1NzRhMjBhLCAweGQxZGEwOTAzLCAweDMwY2I5MmU0LCAweGE4OTBhYjllLCAweGJlM2EzMWVjLAotCTB4NmZjNjc0OWMsIDB4YmE5NjQ3NTMsIDB4OWZlZmYzMjcsIDB4NmNmYWYzMDEsIDB4ZDYxMzE5YzQsIDB4NjZiOGQ3ZjMsCi0JMHhlYzZiMjdiOCwgMHhlODM3NDY5NCwgMHg1ZGZmZGZlZCwgMHgzYzUyMzNiYywgMHhlMzFiNzhjNSwgMHgxMmJlM2RjNywKLQkweGViMzM5YzM3LCAweDEyZWY5YWYxLCAweGJkNWRkODk2LCAweDlmYzdhYmYxLCAweDNlMGFkZjFlLCAweGZiY2I3OGY1LAotCTB4Y2UzOTNkZDAsIDB4N2EzZjFiZDUsIDB4NTA3NDI4N2MsIDB4YzdjN2FjZjAsIDB4OGE2ZmYwM2IsIDB4Y2QzMjc3YWYsCi0JMHgzYmRhY2VmOCwgMHg3N2RmODY0NiwgMHhkZWM4YjlhOCwgMHhmZGEwZjQ2ZCwgMHg0M2M3Yzg1YSwgMHg0ZmI0NTdlZCwKLQkweDZlZWMxMjBiLCAweGUyOWUxZWM2LCAweDc4ZjBjNGMyLCAweGUzZDU3OGY1LCAweGUzYmY4NzMxLCAweDdjNDQ2MjQyLAotCTB4ZTAzNzc0NDcsIDB4MDE2MWYyOGIsIDB4N2VkMDRjMWMsIDB4NzA5OWI2MGIsIDB4NTc4MjQ4ZmYsIDB4MDZmYzc1MTMsCi0JMHg0N2JlMDYxZCwgMHgxNzk3MzU3NywgMHhkNjM5MmYwNSwgMHgwMGIxOWRiYSwgMHhlNzhhOWNjZiwgMHhhNTdmNTdkNywKLQkweDViMGI2N2I1LCAweDdmMDY5Y2E3LCAweDc3OGM0ZTQwLCAweDg5NDFmODA5LCAweDVmMzg0YTk4LCAweDE1ZjJkNTFkLAotCTB4ZDUzNTk3MWYsIDB4YThlYWY5Y2YsIDB4OTE5OGFmOGUsIDB4MGJjYWNmMTMsIDB4NzRmMmJhOWQsIDB4ODU1MDdlODIsCi0JMHg1NmYzZjRlZiwgMHhmODE1ZWJmOCwgMHg5ZTM3YTEzMCwgMHhiMmNhZmUxNCwgMHg5OTNiZmI3MSwgMHgzODdiMDYwYywKLQkweDMxYjFiNWViLCAweDZiNDk5ZmEwLCAweGMzYmY0NDVjLCAweDIxMjVjM2Y4LCAweDkxNGY5YzM4LCAweDBkZTIwNTBmLAotCTB4ZmZhNjc3N2QsIDB4OWRhYTdhMDMsIDB4M2YyYTgyYWUsIDB4NWJkMTBjYzAsIDB4YTdhMDhiNjAsIDB4YzQ5OTNlMTQsCi0JMHhjODg5MzVlOSwgMHgzNDdmYzAzYiwgMHgxMmZmMTg4OSwgMHg1NTUzZjdiMiwgMHg5OWU2NTdmMywgMHg5ZTYwNTI0MiwKLQkweDRjNWQ1OGFmLCAweDg2NzlmM2JmLCAweDQ3Y2Q0ZGU2LCAweGRlNDRmYmEwLCAweDFiMjhjNGZmLCAweGRkMjBiN2RlLAotCTB4ZmMyMWIzYzYsIDB4MzJiYmUxYTcsIDB4M2MyZTI5YjIsIDB4MjdkNzg5MGUsIDB4YjMwOGViNDMsIDB4N2JlMjY2ZDcsCi0JMHhlNDJmMTRiNiwgMHgxYzc4NmIxYiwgMHhjNDYwOWI1ZSwgMHgzOGY4NTY3NywgMHg5MjhiYWRjZSwgMHg3OWVkNGUyMSwKLQkweGVjMDczYmQxLCAweGRlYzJiM2I4LCAweDMxOWY5YzJjLCAweDM3ZDYwMjM4LCAweDJkNjdmOTdkLCAweDljYTA2YjNiLAotCTB4N2FjMzJiZDYsIDB4MjI5NWZjN2MsIDB4NmY3NDJmZjMsIDB4YTRkN2ZiMzMsIDB4NTI4NzZkZjYsIDB4NDA3NWM2NzEsCi0JMHg3MDg5OWY5MSwgMHg5MDBhZjE1ZiwgMHg4YzBhNjBiNywgMHhjYTU4NmFmYiwgMHg3Y2ZkYmE2OCwgMHhmMmZiZWUzOSwKLQkweGQwOGRiMjVhLCAweDI5OWVhZWNmLCAweDRmOWY5NzE4LCAweDVmYjA0NjNjLCAweGU3YWY3Y2Y1LCAweGViM2YzZDZmLAotCTB4OGZlYzM3ZjksIDB4ZmIwYTFlZTgsIDB4MmZjYWVmOTAsIDB4ZTIxNjlkOGEsIDB4NmY5NGMzOWIsIDB4YzI5YmViNTQsCi0JMHgxZTdmOTQyZiwgMHg4ZDc1YmMwNSwgMHgzMDE5ZTRmZCwgMHhmZDhkZjdhYiwgMHgzN2Q2MTEyYywgMHhkYjBmMGVjNSwKLQkweGEwYzc5ZTFiLCAweGI4ZjY1ZjVlLCAweGJiZmY4NzYyLCAweGYwMzRmYmNkLCAweGNmNzQ5MWEzLCAweDIzNjlmNjgyLAotCTB4ZWZiODA2NWQsIDB4ZjNjZGI2ZmUsIDB4ZWM1NzdjMGMsIDB4MmJlZDhiOTMsIDB4ZTFiYTRlYzgsIDB4OGIzMzdjYTUsCi0JMHgyMDYwMjFkMywgMHhiY2FiZGVmOCwgMHg3NTNkNDA0MCwgMHhhMDk2ZTkwNywgMHgyNGVhM2JiZiwgMHg5Njc1ZmVjZCwKLQkweDA3ZTNmYmE1LCAweGZlYjAzY2UwLCAweGYyMDc4YzEyLCAweDg4OWE5NDQyLCAweDcxNWM1OWVkLCAweDMxZWZiZjAzLAotCTB4ZTAwNDdiYjIsIDB4ZGE4NWNlZjUsIDB4NjRkOGY4ZjYsIDB4Y2Q1ZGY4NGUsIDB4YWZiNjA1OGYsIDB4NDhlOTY1OWYsCi0JMHhhNWI0N2I4MCwgMHhiZWJlYjZiMiwgMHg3YTFlNjU3ZiwgMHhiNTc2ZmFiOCwgMHg3ODIxOWRmYywgMHhiMmFkZDhiNywKLQkweDMxYjU1ZTBiLCAweGRlMzQyNjNiLCAweDAzYmJmODc3LCAweGYwMDZkZjE0LCAweGVhNWViNGQ3LCAweGZmMDIyNDdmLAotCTB4MmEzN2E5MmEsIDB4YWYxOGQzMmUsIDB4OTliNjJmYjIsIDB4ZmY3YTQ3YTcsIDB4YzE0N2U5NDMsIDB4YWVkMjRjZjcsCi0JMHg5MTZmZjNlMCwgMHhlODlhMmZkZSwgMHhjMzdkZmI2NSwgMHg3OWNkNDE1MywgMHg3NDY2OTJiYiwgMHgyZWJiNDY0ZiwKLQkweDFkYTAyMDIzLCAweDMzYzgxNTVkLCAweGYzZDhkNmNjLCAweGNiZGJiZjZjLCAweDI5Nzc4NzllLCAweDBlZjM3ZWEwLAotCTB4ZWEwN2NmNjYsIDB4ZDU1MDVmNzEsIDB4YWIzN2Y2Y2MsIDB4OTkzOThjZTEsIDB4ZWQxMzI0MGYsIDB4MTViZWQwZmMsCi0JMHhlMWFhYTBlMiwgMHgxZTU2M2Y5ZCwgMHhlOWU2YWI4NCwgMHhkN2ZlYWM4ZCwgMHg4N2E2ODViNiwgMHhlOWRmNjAzMywKLQkweDM0ZGM5MjRkLCAweDg2YTFlMmJmLCAweDZhM2ZiYTI4LCAweDQyMTYyNTQ4LCAweDVkN2Y0N2Y3LCAweDE1OTRkMGYxLAotCTB4ZTJjYTU0YjksIDB4YzU4OTAyM2MsIDB4NDI2ZDgzN2MsIDB4NWZjOWY3ZmYsIDB4MDFiMDc4YWYsIDB4N2Y3NGM5ZjYsCi0JMHhlZDUzNjNkNSwgMHg4ZjkyZmI1YiwgMHhlMjE3MzZlMywgMHhlYWZkYWZiMSwgMHg1ZjI1MzFmZCwgMHgwNzdlNTRkYiwKLQkweGEyN2JmZDNkLCAweDdmYzAzMTVjLCAweGY0N2RmMzBmLCAweGMyZWYwYmI1LCAweDkyZTU4MWZkLCAweGRlMjE0MzBiLAotCTB4YmJhNzIyNmIsIDB4YTlmZGNlZDksIDB4M2FjZjc2NTYsIDB4ZWQ5YWY0NWYsIDB4NWQ2ZmRmMjAsIDB4ZTI3ZTAxMTgsCi0JMHhjMzFlNDY3NywgMHg3ZjJiNTk3ZCwgMHhhZmFmNzE2ZiwgMHg4NTIzZWQxYywgMHg2Njc2NzE4ZSwgMHg2OTdiNWZkNywKLQkweDE1ZjYwMzliLCAweDAzZmI4ZGQ3LCAweDY3M2YwZmRlLCAweDlkOTllZjY0LCAweGVjNjkzNWNkLCAweDg1NmM4N2Q4LAotCTB4NDk1ZjAwNzEsIDB4ZDA0NGRhMjksIDB4ZWVjNzEzY2IsIDB4N2NlYjBjM2MsIDB4NTg0M2ViNWYsIDB4ZDAwNDdiZmYsCi0JMHhmZWMyZTRmZiwgMHg2OWRmM2M0NCwgMHhiZjAwZTVkZSwgMHhkZjdlNTljZCwgMHg1YjczNWNmYywgMHhhZDM0NWRlMiwKLQkweDA3MDdmOGRlLCAweGY5ZDJhN2VjLCAweGRiMTljZWZjLCAweGFhOWI3ZGYxLCAweGNiYmUyMjJkLCAweGJjNGRmYjQwLAotCTB4Y2RjN2ZjMWQsIDB4NjExZTczYjMsIDB4ZDdhOTQ0ZGQsIDB4ZDVkZmMyM2YsIDB4NDliZmVjNTAsIDB4YWY5ZmIyNTEsCi0JMHgxMmRmOGE4NywgMHhiYWI4ZTFkZiwgMHgxYzU4ZjQ1OSwgMHg3M2MwZWRiZCwgMHgyYzllZDI3YiwgMHhjOTEwN2EwNiwKLQkweDFhM2UxYzNkLCAweDBiYjQ0ZWM5LCAweGZkMGRmOWY5LCAweDdlZjc4NGVkLCAweDliY2NmM2I3LCAweDdjZGQ5ZmNkLAotCTB4NzM5MTMyMTUsIDB4ZDgwMmU1YzksIDB4Y2MwMWRlNDcsIDB4YjBmNGM3MzksIDB4ZmQ1ZGJmNjIsIDB4YTkzZmQ2OTUsCi0JMHg1YmYzMWZiNywgMHgyMTQ5MmY0NywgMHhkZWY2MGY4OCwgMHgxZmM5Yjc3YiwgMHhlYzJlY2VjOSwgMHg5ZWQxMTI5ZSwKLQkweGM0NzFlNDI0LCAweGY0OTZmNjU3LCAweDRjZmVmMGE5LCAweDI3MDZkYmY2LCAweGNlYzgzYmY0LCAweGY5YjZiMWY4LAotCTB4YTUxZjdjMzMsIDB4ODU2ZjA0ODYsIDB4ZDE2NjlhZjIsIDB4YTZkZjI0MTksIDB4MWVmYzk3OWYsIDB4NTc1NDVlZmUsCi0JMHhiZTAyZTRhYiwgMHgxNWRkNmFlZCwgMHgxNmY5MDU5NSwgMHhiNTVkZmQxMSwgMHgwZTVlMjZmYiwgMHgyYWQ5ZDY3YywKLQkweGI1MjEzYmUxLCAweDgwNzEzZWRiLCAweGY3ZDY1MDFlLCAweDdlZjY1NmNlLCAweDMxZWI1NzQ4LCAweGVkYzBhZWZjLAotCTB4MWNiZjg5NmMsIDB4MDY4ZDlkZDYsIDB4YjlkY2JmYjYsIDB4ZDA1NjZmZmIsIDB4ZTg1ZTZmMGIsIDB4YWQ3ZGM3ODksCi0JMHhiNmY3M2ViMiwgMHgwNTJmMTE3ZiwgMHhiZmU0MzE3NiwgMHg0NGJmZGI1NSwgMHhlMjAwNzg5YywgMHgyNDYzMGE5ZiwKLQkweDNiNjEwYTIyLCAweGZjZmFkN2I1LCAweDI3NjI1OTIxLCAweDdjZTlkN2JkLCAweDA4YzVmNzU4LCAweDM3YzczNWViLAotCTB4ZmMwOGNmZWQsIDB4ZWZiZjVmYWUsIDB4NmE3YjczYjUsIDB4Zjc4NmM5MDgsIDB4YzQyZTVhZjUsIDB4Y2RiZGUyNTcsCi0JMHgxMTczYWI1NiwgMHg1ZDk4NWZmYSwgMHhjY2YzYjVkMiwgMHhmYmUxNTMxMywgMHhkYmRkOTE1ZSwgMHhkZjIyMjBiZiwKLQkweDcyYmRiNWJmLCAweDhkNGQ4NzU4LCAweGQ3YTQwNmY3LCAweDc3Y2U4MzE3LCAweDdmZWI0MWJlLCAweGY5OWEyYmIxLAotCTB4Y2JlZThkYTMsIDB4YzIwNmY3ZDUsIDB4NWYxY2ZkZjUsIDB4YWU3NjY0YzEsIDB4YmJjMzI3MjUsIDB4ZWVkYmRmMzgsCi0JMHgyZWY1ZWVlYywgMHhiNDc2MTNkNSwgMHg4MGE3YmIzYiwgMHhlYWIxMWRmYSwgMHhjNWY0MDk4OCwgMHg1M2M5N2IyMCwKLQkweGFjMDQwZjRjLCAweGU0OTkxNzgwLCAweDZmZGExMGE3LCAweDA3YzkzNDc5LCAweDI3YWVlYWZlLCAweGRiYTM4ODRlLAotCTB4MDA2MGM3YjIsIDB4OWI1ZDhjYmEsIDB4ZWIyZWYxOGEsIDB4ZmNkZmI5ZjksIDB4NTUyOWEzNDAsIDB4ZjNlNjVmYTUsCi0JMHg5MjUzYTM3MywgMHhmNTRlMzQzYywgMHhmNGMxZDkzZCwgMHgxNTVkYTljMCwgMHhmOTNkNDJiZiwgMHgxZTE5MzM0NywKLQkweDFiZmM1ZDYxLCAweDRkOWI2N2Q3LCAweDUwMGRkNGYyLCAweGY3MDFhOGVmLCAweGJmNzczYjFiLCAweDY5ZGUxYmJlLAotCTB4MzVkODdmOWIsIDB4MDM5OWQ2MWEsIDB4NWViNDBmMjAsIDB4MGRmNWRlY2IsIDB4ZjJkYjJmMTAsIDB4NmFlZjQxMjEsCi0JMHg2OGE5NTM0ZSwgMHg0MWJlZmRhMCwgMHg3NjBmY2M1YywgMHhlMGZiODBjMCwgMHg3ODkwZmY5MCwgMHhmYjllNjFlMiwKLQkweGY5YmY2Y2VkLCAweGU2ODMxZWM2LCAweGZlMGRlOTljLCAweDc2NWJlODNlLCAweDMzYjdjMTg5LCAweDNkYTZkNDNmLAotCTB4YjdhMGYxZjksIDB4NmZiZGQ5MDcsIDB4OGY2YjFlMDAsIDB4NWMzODM0NzcsIDB4NjI5OWJmNjEsIDB4YjAzODRkMjcsCi0JMHhmYTI4ZWE2OSwgMHgwZDY3MDljZiwgMHhlYmI3MjA0ZSwgMHhlNjExMWFjMCwgMHg0ODQ1M2FlYiwgMHhkOTdhNDBhYywKLQkweDJlZGUxNDRkLCAweGNlMzdiYzM1LCAweDFjNzQ3ODMyLCAweDJhOWM4MTZmLCAweGVmMmJhN2Y4LCAweGZmMzQ5OWEzLAotCTB4MGUzMWJiNDYsIDB4ZmMxNGE0ZTIsIDB4ZmE1MGYzMmIsIDB4Njc4ODA1NzcsIDB4Yzk0NTBkYjUsIDB4ZmM1YmU5YjMsCi0JMHhlNjljNGFiNywgMHhkZTUxMjcxOCwgMHg5Y2JlNDcyNywgMHhjZmJjZjc2YSwgMHgzYjQ2NDFmOCwgMHg2OGFlZDRmNiwKLQkweGYzMzY0N2I0LCAweDk1MjQ4Yzc1LCAweDI5ZmMwMzBlLCAweGE3ODJmYTc0LCAweGVhZmE3OGNhLCAweDA3NWYzY2ZmLAotCTB4ZjJiYmY0OTQsIDB4MjVjOTdhZjUsIDB4NzdmMGRmMjMsIDB4MzA3MjVjZmEsIDB4YjFlMjFkMmEsIDB4ZWZmMWQyNWEsCi0JMHg1NWUyYThhMSwgMHhhOTNlMDNjZiwgMHg4N2Y4ZDYwMiwgMHgwNjBjM2E1YSwgMHhiMzU1NGZiOCwgMHg2N2M1ODg0ZCwKLQkweGQ3NjlmYTQyLCAweDE4Y2NmODg2LCAweDM5NmJmZTQwLCAweDJiOGU1MDRjLCAweGY5OTRmZGQ2LCAweGUxYmVhOGVmLAotCTB4NzllMTU3ZWYsIDB4M2YwZmM4MzQsIDB4ZDAyNDFlOTcsIDB4ZWFlYjQyNzQsIDB4ZGY4ODI5YzUsIDB4MmFlNDAzYTAsCi0JMHgzNzJhMjc4YywgMHg5YTM1ZDY5MCwgMHhkZmU3NWY4MCwgMHhmYzc5ZDJjMywgMHg0YWZlNzc3YywgMHhkOTY3Y2EyZiwKLQkweDY3YTcxNjJhLCAweDM4ZTJhNDc1LCAweDI1N2U3MWNlLCAweDg4NjRlODg2LCAweDFiYjA2OGUzLCAweDRmYzlmMTM0LAotCTB4ZGQzZGJlNzAsIDB4ZjQxYjY0ZmMsIDB4ZDYyYmY5NGIsIDB4NmNhZmNiNDEsIDB4MTgxOWZjNzksIDB4YTdhZmMyYWUsCi0JMHg1Mzg0MjQ5YiwgMHhmZjNkYWQxZSwgMHg3ODMwNzQ0ZSwgMHg3ZTMwMGU1YiwgMHhlNTI0ZDA5ZiwgMHgxMzQ5ZmJjMywKLQkweDdmMDRlMjY0LCAweDZiNGQxYmYwLCAweDZmZGZkMDQ1LCAweDMyYTczZjAwLCAweGZkNzU4NzM5LCAweGFjNDdhZWQ0LAotCTB4ZWVmNTgzM2YsIDB4ZGY4MDgxODgsIDB4OTQ4OWIzNzksIDB4YzVjOTU0NmYsIDB4NmFhZmQ1Y2UsIDB4NWQ2MmI3ZTQsCi0JMHg2ZmY0NTRmZCwgMHhhMDA5YzQ3NywgMHg1NWI5MTVlNywgMHhlNGQ5YmVmMCwgMHhmZmU1MDZiZSwgMHg0ZmZjOWQ3YSwKLQkweDQxOGJlZDY2LCAweDI3YmQ2ODU4LCAweDU5M2ZmY2I5LCAweDdlOWZlNTQ0LCAweDE1OGE2ZDhhLCAweDUzNjZjZTAwLAotCTB4MjZiNGY3ZTQsIDB4ZmYxZmJlMzksIDB4ZjFlYWY0ODUsIDB4OTI3NTdhNWUsIDB4MWRlN2VkODMsIDB4OWFmZmI0ZTksCi0JMHgzZjcwN2FlYiwgMHhlNzFmMWExZiwgMHgyYjI3Mjc5YiwgMHgwMDJhOTM3YywgMHgwNTI5MWJmZSwgMHgxNDVmMDAzMywKLQkweDY4Y2ZjMGFmLCAweGNkYmU4MmI3LCAweDgyNzdjMzRiLCAweDIyZTNmMzdhLCAweDIzNGRkY2U1LCAweGE2YmQ2MWI3LAotCTB4MDZmN2FmYzgsIDB4ZTRjZTRmMTgsIDB4NWY2MGM1YmEsIDB4YzhjYjE3YzcsIDB4ZWYwNWE3YTcsIDB4YWViYTM4YjAsCi0JMHg4ZTc5MDY5ZCwgMHgzOTQ2MTdhMCwgMHg0MmY5MWU5OCwgMHgxMWRlNmFmMiwgMHg5MjBlM2RlZiwgMHg0ZTVkN2MwYywKLQkweDJmMzA2YTc3LCAweDAyNzA0YWIyLCAweGQ3NzI5NDdkLCAweGUwOWZiZTJhLCAweDRhZWY5NGYwLCAweGZkZTM3YmZlLAotCTB4YmRmY2JkMmYsIDB4Yjg3MThlNTUsIDB4NjQyMDk5OWUsIDB4YWQ5Zjg0NzMsIDB4NDdjODQ0NjcsIDB4NmI4NjIwYjksCi0JMHhlNmRlNDE5MywgMHgyN2VjNzVkMywgMHhiNGVjNzVhYSwgMHhhYWZjODhkNCwgMHhjZTNlZTFlMCwgMHhiMmM0NWZlZiwKLQkweGZjZTcwZjc5LCAweDNmNmMwZDMxLCAweDE3M2YzN2M0LCAweDgxNDY4YzEzLCAweDMwMjhiNWM5LCAweGZlMDExNzc5LAotCTB4NWU1NzVkZTksIDB4NWQ3ZjdjODMsIDB4ZGNhZmJlNjQsIDB4MzNmOTFhYjAsIDB4Zjc4OWM4YjYsIDB4YmEzNDllNDEsCi0JMHg5MTk5YjEyZCwgMHhkMzFmYjFmNCwgMHg4MTdmNmI5ZCwgMHg2M2UwMmJmYiwgMHhlNGJlZmI5MCwgMHg4MGU0MWNhMCwKLQkweDNmN2ZlMDQ0LCAweGZkMTU3ZmU1LCAweDdjYTAzZTE0LCAweGE1NDM4NGYxLCAweGExN2NmNDI3LCAweDc4MjlkZjljLAotCTB4ZmYzYmFjZDksIDB4ZjVjMWM4ZmIsIDB4N2Q1ZDRmM2MsIDB4ZjMyOGExYzQsIDB4M2U3NGRlZjksIDB4YmZjZThiZGIsCi0JMHhjYjBlNzQ2MSwgMHhkMTViZDAxNywgMHg5YzgxOGYxMywgMHhjZTViZWI4ZCwgMHhhYzRlMzE2YywgMHg2Y2QxZjBkNywKLQkweGU0NjhmYjhjLCAweGRlMDE0MGU3LCAweGU3ZGQ2ODVmLCAweDM5ZDdkOWZjLCAweGY3YWIzMmNlLCAweGUwZmUzNTc1LAotCTB4MTk5NWQxYmMsIDB4NmU0MjhmZTYsIDB4NmI1ODJlZDcsIDB4OGRmNDczYzYsIDB4YmNiM2M5ODQsIDB4YmVhZmRhMzMsCi0JMHg1MjM0ZTlhNywgMHhmYWEyOTQwMywgMHgwOWU3ZDAxZCwgMHgyMTA3MGFiOCwgMHgyMjY4NWFlZiwgMHhmODNmNzQxOSwKLQkweDRlZTk2YTQ1LCAweDcxZjlhNzg4LCAweDhhM2M1Y2JiLCAweDQ5YTM2M2NlLCAweGVlMWQ3NjllLCAweDAwZDdkYzBiLAotCTB4MGQ4YTZiZmMsIDB4ODhhZjg4NGUsIDB4ZjAwNTM4ZjUsIDB4MDA0YmEwNDMsIDB4ZWIyZjcwZTQsIDB4ZmJiYTRjNjcsCi0JMHhiYWFmZGM3MiwgMHgxZjQwNjNkYywgMHg1MmY0ZTAxYywgMHhhMWUwYWJlOCwgMHgyZmFlZjVhZiwgMHg5ODYyZGFiYSwKLQkweDcyZjAyNDVjLCAweDk5NzkxZWJkLCAweDRmMDM0ZGNiLCAweDY0NDdhZTJmLCAweDQxYzllNDExLCAweDE4NDQ4YmJjLAotCTB4MDdhNjQ0ZmYsIDB4MjI2NDdhNDMsIDB4Y2ZiZTczYzEsIDB4ZjNlNDdhNzUsIDB4N2M4ZjVlMWYsIDB4YjkyM2QxYWUsCi0JMHgwOGY1MTExZCwgMHhmZjk0NDVmZCwgMHg2OGI5YTY4NCwgMHg5MWMzOTJjZiwgMHg4NjI5NTllZCwgMHhiMDA5YzdhZCwKLQkweDA5N2FkMjhlLCAweGExZmJmYjMyLCAweDUyZGYzODA3LCAweGM0MzhjNDhlLCAweGM2MzMyNmM2LCAweGM4N2EyYjVkLAotCTB4YzNlNDhkMzEsIDB4YzA3NTNiZGYsIDB4YTZiNTBiYmEsIDB4ODI0ZjBmNzksIDB4OTMyNGQ3ZjMsIDB4NGY4M2NlMGIsCi0JMHhmNzQ4ZGQ0YiwgMHhkY2MzNzRkMywgMHgyMjUxZmM4OCwgMHhlODIzYmQwMCwgMHgwYjdlMDIyMywgMHg5OTgzNGZmOSwKLQkweDQ1NmM1ZGRmLCAweDQ4NTA1OTM5LCAweGI5ZGQxZDcwLCAweDU1ZjIzYzc2LCAweDAwOWE3MTc5LCAweDJlYjE1YjdjLAotCTB4YjhmMjgwNTYsIDB4ZTgwMzRlYzksIDB4ZTMxZTY1MmIsIDB4YzY0ODFhMTcsIDB4OTQ4Mzk0MTgsIDB4OGMxYzk1MTgsCi0JMHhjMDQ0ZWI5NywgMHg2Zjc4YjBkNywgMHhjODRiMTQ5MiwgMHhmZjRmMzE2NSwgMHhiOWI3ZWQ1OCwgMHg3ZWQ1ZTY4NCwKLQkweGY2NWY5YTFiLCAweDk3MzZmYzVkLCAweDY1YzlmY2ZkLCAweDczYzliN2UwLCAweDhjYzY0Njc4LCAweDY1Y2RmZjQzLAotCTB4YWMwY2U2OTAsIDB4NmY0YTg5MTMsIDB4ZmI4ZWNjNWQsIDB4Y2I1MmZjYmUsIDB4NDBlNDQzZmQsIDB4YWNlYzdmMmYsCi0JMHhjN2Y0MmU3NSwgMHhkNDdjMDI0ZSwgMHgwNjc4OWYyNCwgMHgxNTNiZTFjMCwgMHgzNjZlZWQxMSwgMHgyZjVjMDE4ZSwKLQkweGQyMDkwZjkwLCAweDlkNDk0MDYzLCAweDQ1MTJmZTA4LCAweDg3MDM1Y2VmLCAweDFlZDQyOGFlLCAweDE0MzNjZTAxLAotCTB4ODViZDAzNzksIDB4Y2UzYzZlZTcsIDB4NzY1NWZjMDEsIDB4OTFmYmQ3ZjQsIDB4OTMxZjIwOGYsIDB4MmI0N2Q2MWQsCi0JMHhkZjExMGQ4YSwgMHhjNjMzYmUxMSwgMHg2N2VhODNmNiwgMHhkNmY1ZmFkMiwgMHhmOGYwZTU5ZiwgMHhlOWU1MTE1ZiwKLQkweDNkOTUxOGNlLCAweGQxZjE2NGY0LCAweGMxMGU3NjQ0LCAweDliYmJlNWRlLCAweDQ1YWJmMWY3LCAweDE5MmVmN2VlLAotCTB4NjE1ZjdlMTAsIDB4NDMyNGQ5YjQsIDB4MTBmMTI5M2MsIDB4NGYxNTUzOTcsIDB4NDEwYWI0MmMsIDB4ZmVhN2M0M2IsCi0JMHg3NDZlNzYwZCwgMHgwMzM3ZmRiZiwgMHhiN2ZhYmZhNiwgMHhiMDU0YTI5MiwgMHg2ZTBjNWJlNywgMHg3YzQxMTk2YSwKLQkweDdiODNjYTA1LCAweDI2N2JjMTE4LCAweDYxNmVmZTAxLCAweDIzY2Q5YjVlLCAweDg4NDNiZjgxLCAweDNkYTBmN2UyLAotCTB4ZGM4ZGYzZGEsIDB4NjgxYmExZWUsIDB4MzM1NmUyZjksIDB4YWViZGNkZmUsIDB4MWVlZmU1M2MsIDB4YjIxZWYxYjgsCi0JMHg3ZGFjZGY4MiwgMHhiOGM0OGU0ZiwgMHgxYmEzNjM0ZCwgMHg4NThkNmNlNCwgMHg1MTYzNWZjMSwgMHg2MDYyYmJlYSwKLQkweDFjZWJlZWJkLCAweDY0YzJlMjdkLCAweGZlMjlmN2Y0LCAweDQxZGQ4OWM1LCAweGQ2OTJmMDExLCAweGUwYjAzMmVkLAotCTB4YjE4ZmQ2MzUsIDB4OTU3Y2UwOWIsIDB4YzcwMGY1ZjMsIDB4OWIzZGU2ZmIsIDB4NzNjNzU4NDQsIDB4ODYyZTM3MjYsCi0JMHg3NjRiY2VmZCwgMHhmM2MwMGFlZiwgMHg3NmI1MTM5NSwgMHgwZWExNThkZSwgMHhiOTI0NmVmZiwgMHg0OTNlZTA4NiwKLQkweDBlZjg4ZjkxLCAweDlhNGMwM2IyLCAweDFlMWRjM2Q4LCAweDllNTczZDUwLCAweGZkODBlY2YyLCAweDExMDk0YzY0LAotCTB4YWUyYTllMDAsIDB4NWYyMDE3ZTcsIDB4Yjg0NzgwNjQsIDB4YmRmYzAwNmUsIDB4MDhiN2ZlNGUsIDB4N2JjZDljMzksCi0JMHhmNzkwMDVmMiwgMHgwNTkzZWQwMSwgMHhmZTZmNjY1NywgMHhlZWZiMDk1ZSwgMHgwNGZlMmNiMSwgMHgwN2VjYWFlOCwKLQkweGIyZjZmZDg3LCAweDUzNGZlMGM5LCAweDYxOGQ2ZmVhLCAweGFmMmFmYzdhLCAweGM0NWMwMGI3LCAweDQyMmYzZTc0LAotCTB4ZmJhNjEzYmYsIDB4YTkyOWUwZGIsIDB4OWI3MmU1ZjEsIDB4Y2Y5YWE1YzksIDB4NTJmMDgyN2MsIDB4Yzc5YzY0M2EsCi0JMHgzY2RlYzNhMCwgMHg2MmQ5Zjc0OCwgMHg0ZjJiZGZiMSwgMHg2NTZlMzEwNSwgMHg3MGMxMWQ2MCwgMHgwN2VkMjE5ZSwKLQkweDUyMWE3ZWQwLCAweDFkMDAyZWQ3LCAweDBiNzllZjM3LCAweDdkYjgzYmM3LCAweDVjYjk0YjI3LCAweDgwZjZlMjZkLAotCTB4MzY3ZGFlMzIsIDB4ZTNlZTVlYjYsIDB4ZTcwZGQxZTcsIDB4N2FmOTdhZDgsIDB4OTJlMzE3OGMsIDB4ZTQzNDc5OTQsCi0JMHgyOGVhOTM3OSwgMHg2ZjEwOTVmYywgMHg3OGVmYjYzMywgMHg0MjYzYjc5YiwgMHgwMTZmMzZmMSwgMHg3N2E3NmFiZCwKLQkweGQzZGUwNmVjLCAweGY3MTIwZGZiLCAweDI0N2E0NTFlLCAweGYxZGI2NDJlLCAweDA4MTc3Yjk1LCAweGNlNTYyN2EwLAotCTB4NTAzN2VjOGMsIDB4ZWU0YWM1ZjQsIDB4YjVjNTU1NzcsIDB4NWFhMzE3YmMsIDB4YzY5NmE3MmYsIDB4ZmE1NGQzNTksCi0JMHg0Y2Y3Njk0OCwgMHgzMzY1YWUzOCwgMHg1Mzc5NmI4ZiwgMHg1MmQ0NmVkMywgMHgwY2QzZjAwYiwgMHg4YzEwZTc5YiwKLQkweDNmN2JmOTViLCAweGQxZGZmOWViLCAweDBhYjFmNjUxLCAweDBjOWQ1MmJlLCAweGRjYzdhZjVmLCAweDhkY2UwZmI4LAotCTB4Y2E0ZTRmMDAsIDB4OTEyZGViYzcsIDB4OWMxM2MzZTMsIDB4MzA2ZjZlMDYsIDB4OGNlZDIxN2UsIDB4NmExZTYwNWYsCi0JMHhiNzAyZWJiYiwgMHg3OGYyYWUzYiwgMHg0ZjhjOGMwYiwgMHhjOTNlNDUzZSwgMHhkZjAxYjdmNSwgMHhkYjkyMmY4ZSwKLQkweDEwODdmZjgwLCAweDhjNDUyN2NlLCAweDFlZmNmNDRmLCAweDdjZTM4Y2VkLCAweGVmMDA0ZGQyLCAweGIxYmRlMTYzLAotCTB4M2ZmMWZhMDgsIDB4MDY3Y2Q4NjMsIDB4ZmYyM2U3YjQsIDB4MGFmODc5NTAsIDB4M2E5NDliZDcsIDB4NDkyM2MyNTEsCi0JMHhjMzhjNTRlNywgMHg3ZTk5NTU4NCwgMHg2OWViOTMxZiwgMHg3YTczN2UwMywgMHhkMzllNTA0YSwgMHgwNzY2NGVhZCwKLQkweGEwZmUzMmE1LCAweDQyNjcwNWVkLCAweDJmZmU5ZTU4LCAweDRmODQyY2U3LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4YjNkYWU4YjksIDB4NjQ5MzI2NjcsIDB4NmYyNjRjOTIsCi0JMHg4MDg0OWFmMiwgMHgzYzg3MDEwOCwgMHg0ZTNkMjg3OCwgMHgwZjc4NjAxZSwgMHgwMjQ4MzUwOCwgMHg0ODA0MmJjMywKLQkweGQyZDA0MTMyLCAweDIwMTk2ZjFlLCAweDgzNTQ4MDg2LCAweGE5NmExZWE1LCAweDVhZjExZTBlLCAweGQ1MjgzNjhhLAotCTB4ZjA5ZDgzNjAsIDB4NDFkMDU4MmEsIDB4Mzk2YjQyZDEsIDB4MGE4YTIzNDEsIDB4ZjQxZWEwMDksIDB4ZmZmZGUzZDAsCi0JMHhjY2NkYWQ3ZiwgMHgyMjg4OTlkZSwgMHhiOWVlZmJmNiwgMHg2MmVjZmQzNywgMHhkYWY2YmRlZCwgMHg4ZmRmZmFmZiwKLQkweGZiMGNkN2I1LCAweDMzZDZjNjBmLCAweDJhMWQ3NmM2LCAweDhjYjk2Yzk2LCAweDc5NGJmYmM1LCAweGM1YTM5OGNiLAotCTB4OGNmM2Q4Y2MsIDB4ZmY0MGI1OTUsIDB4OWRiYmZjMmIsIDB4NzQ2M2NmYjEsIDB4MTYzMDI1OGMsIDB4MmIxODkxNmIsCi0JMHhhNDZmYWM2NCwgMHg1OThkZmE4NSwgMHgxODdhZTRhZSwgMHgxNWQyMzZiZiwgMHg3OWMwNDk2ZCwgMHgyNjA5MGU3NCwKLQkweGVjYzI3ZTE5LCAweGY4NzQzMDY1LCAweDk5OTk3YWYyLCAweGM0YmY1ZTcxLCAweGQ1YWNjNjY0LCAweGJjMjMyMjk2LAotCTB4MmVjNmI1MzcsIDB4N2VmZTYwYjksIDB4MGI3OGNlOTEsIDB4MGIxNzAzY2QsIDB4NzlkMjJkYTAsIDB4MmQ3M2MwZDcsCi0JMHg2NmEzOGVkMSwgMHg2NzkyY2Y3OCwgMHgyNjlkMmRjMiwgMHhjMTVmN2Y0NiwgMHhiMTJkYjU3ZiwgMHgzNWJiYmVhYSwKLQkweDIwMzlkMmM1LCAweGZmODI1ZmQwLCAweDBlZmY4MTQ4LCAweGM2MWIxMzMxLCAweGM1YmYwZDU4LCAweDJjYWVjODk2LAotCTB4NmI1N2NjMGIsIDB4MGU2ODc4ZWEsIDB4ZjM3ZWViZjQsIDB4OTJjMTkxYjksIDB4ODA1ZWI4NmMsIDB4Nzk0M2Y5ZTMsCi0JMHg4MWNkNzM5MSwgMHhkNjJhZGVmNSwgMHg1NWMzOWI3OSwgMHhjZmYxODdhMiwgMHhjNjZlYjk0NiwgMHhmMDhlNDdlNywKLQkweGExZTE5M2VlLCAweDdkOWU2NWUxLCAweGE0MGI2ODdhLCAweGIwNTE3ZGZhLCAweGQ5OTYzNjVlLCAweGFlM2Y0MWI3LAotCTB4NDM0N2I1ODMsIDB4ODc0NGY2MzcsIDB4NDdmYTFhMjMsIDB4YTc4NGIxY2QsIDB4YjQ3NDNmNWIsIDB4NjJmYWMyZTcsCi0JMHhlN2MyNGM5YywgMHgzOGY5NWYwMSwgMHhlNTc3OGIxZiwgMHhkZTIzMDczYiwgMHhlMDBjY2I5NiwgMHg2MWU5MDE3OCwKLQkweDhlM2QzNmJlLCAweGRmMDQ3NTlhLCAweDUzODczMzUxLCAweDQ4ODRjM2ExLCAweDVkMGIyOGM3LCAweDRmNWVmNDY3LAotCTB4ZDc4MDFiMzEsIDB4OTVkMDRjMzcsIDB4NTc5ZTgzNzksIDB4NGNjNWE3NWEsIDB4Y2YxYmFlZTMsIDB4MzA3ZDMwOWYsCi0JMHg3ZmRiNTk5ZSwgMHhlODEzZjhiZCwgMHgzMmRmZjFiYiwgMHhmMDI5ZGRlMSwgMHhkNjE3ZGQxZSwgMHhlZjA5ZjNmZCwKLQkweDk1ZTBiYTI2LCAweDYxZjc1MzNhLCAweGRiNTFmMDA5LCAweDU4NjRkYjI2LCAweDk2NjRhMGMyLCAweGQ4YzcxOWRiLAotCTB4MGVhZGZiOWEsIDB4NWEyNzgzZTQsIDB4OGMxODdiMjQsIDB4YjM2NjBlNjcsIDB4MjU2NDMyMjQsIDB4ZGZmOWQ2MjIsCi0JMHhiNzYxMGNjNywgMHhhYzE3MGI0MCwgMHg2MjkzY2UzMCwgMHhkZTQzNmVmNCwgMHg0MzMzN2ZkOSwgMHgwMmIxZGMzOCwKLQkweGMzZTgwNjhlLCAweDA1MTY1ZDczLCAweDBkZjUwNzMwLCAweDQ1OWZlYWVjLCAweGY4NjFmMTgyLCAweDZhNGI5ODJmLAotCTB4ODA5NzZmNjksIDB4MzA0NjZiNzAsIDB4ZGVlMDAxOTcsIDB4M2YxMzI2ZDcsIDB4ZTExOGQxM2UsIDB4N2ZmOTgzMGQsCi0JMHhlMWUyZTNiYiwgMHhiOWNmZDA5OSwgMHg4MmNiODc1ZiwgMHgzMzk2MDliZiwgMHg0M2E4Zjg5MSwgMHgzOTVhMGFmYSwKLQkweDBmNDAzNGRhLCAweDg0NzJlZGY3LCAweDJkZjE4NjVkLCAweDU4NDNkMTExLCAweGZiNDU2MzBjLCAweDlhZDlmOTg4LAotCTB4YmMwZjMwN2UsIDB4MDQ3YjRkNjcsIDB4M2Y0ZDZmYWQsIDB4ZTIyYzhmOTAsIDB4ZmY5MTdiODMsIDB4NTkxOTQ3ZjcsCi0JMHgwNGJmNWMwYSwgMHg4NmUzODM3MiwgMHg0NjM3OGViMywgMHg3NGU4MDU2NSwgMHg1OWQzZjVhOSwgMHhlZWZkNjE3YiwKLQkweGQ3NmYzZTQ4LCAweDkxZmQyYmRlLCAweGUzZmI5NTdmLCAweDk3YjVjYzU2LCAweDJjNTYzM2U2LCAweGYzOGE3ZWJiLAotCTB4MWQ1ZmQ3MjksIDB4ZTIzNDVlZjAsIDB4ODIzNGIxOWIsIDB4MDcyN2U4OTcsIDB4Mzc4YWJiZTAsIDB4MWNhZmM3MGIsCi0JMHg3NDc1YTdhNSwgMHhhZTNiMDhiMSwgMHg2MGU4YzViYiwgMHgyOWNmMjc0OCwgMHg1ZTBhZGZjZSwgMHg3NDZmMDRlYiwKLQkweDcwOWUxNWI1LCAweDM4OWVmYWMxLCAweGU3Yzc2NjkxLCAweDg1MmY1YWJiLCAweGIzN2RlMGViLCAweDIzMGY1YzYzLAotCTB4ZWVmNGU1ZGQsIDB4ZTIyZTY3NjgsIDB4MWRjZGQyZjMsIDB4ZTc1ZWI4YjksIDB4ZDJlZjg0NDYsIDB4YWVhY2Y3OTEsCi0JMHhkZjVhZWJkYywgMHg3ZDY0ZGY2MywgMHg0OWI5YmQ2ZSwgMHgzZmM5ZTk4YSwgMHhkYTkwM2U1YSwgMHg4NjkwYmZkYSwKLQkweGQ0MzA5YzkwLCAweGU2MGM5ZTViLCAweDZlZWIwMzVkLCAweDQ5YjQzYzFjLCAweDYzNGY0MjQ2LCAweGM2NGY5NDM2LAotCTB4MDY2NzJjMmEsIDB4MzEzZGU4MDUsIDB4MTJkZGI5YzYsIDB4MTg4ZTVmMjQsIDB4MmY1YzBlZTcsIDB4OGYzNTI3YmUsCi0JMHhkZTFjZjlkNiwgMHg1ZTc0NzIxZiwgMHg1ZDc3NDFiZSwgMHhmNDI5N2NlYiwgMHhhZjQ0N2QzYSwgMHg1YTllYjE1YSwKLQkweDAzMjdkOTkzLCAweGUxOTc2Y2ZjLCAweDNlNDUwZTkzLCAweDBiYzI3YmIzLCAweGYwOGJkOGY0LCAweDI3ZWQ4YTc5LAotCTB4YmZjZjQ4NWMsIDB4MTA2YmVkOWEsIDB4YzViZjdhMWYsIDB4ZWZmMDQ1MTksIDB4MTFiMWY3YzcsIDB4YmQ3MTkyNzMsCi0JMHhmZjFkMjM2YiwgMHhmNmZlODY2NSwgMHg4M2YzOGM1NSwgMHgxMjdmNjExNCwgMHhiZjczYjcxNiwgMHhlNGY1MDIzNSwKLQkweDlmZDcxOGM0LCAweGJhODFiZTcxLCAweGQwOWNiMzhiLCAweDc1M2JmMDJmLCAweDc4MWRiOTczLCAweDkyZmJhYzRkLAotCTB4OTdhOGUwOWUsIDB4NThlYmZlNzEsIDB4YWY0MjVmZmYsIDB4ZmUxZDA3YmYsIDB4MDUwNzRjMTYsIDB4N2QwNGEzM2YsCi0JMHg1MDdlMjE0NywgMHgzZmViNzcyMSwgMHhmMDA1MzBlOSwgMHg0ZjUyODEyMywgMHg4ZjljZjZiNSwgMHg4NDBjOGViMSwKLQkweDA3Zjc3ZGI3LCAweGJlNjAzYmZkLCAweDk4M2U1N2JhLCAweGY3NWJmMjg1LCAweGI3MTExODcyLCAweDYzOWJlNWY0LAotCTB4MTdjZjhmOTAsIDB4NzMxNmYyYjEsIDB4YzlmYTdkNGYsIDB4M2ViYjdhY2EsIDB4NGI0ZWIxODcsIDB4MWFkNWU5MzYsCi0JMHhiZWIyMzdlNiwgMHhkYTk3NGZhOCwgMHgxNGZhNDFmNSwgMHg0N2ZiYTYyMCwgMHgzODA5ZmUwYywgMHg5OTQyOTFmZiwKLQkweGJiYmUwMmFkLCAweGM0OWUxZjY0LCAweGE1NjllODQyLCAweGIzMjU2ZDdkLCAweDdmZDgwN2NmLCAweGYwMGU3YThlLAotCTB4NDE3NzY0M2YsIDB4Y2RhNWUxMGMsIDB4M2I1OGZhNGEsIDB4NmFjYWM4ZmUsIDB4ZWY0ZTY5N2IsIDB4MWExOTFkZjMsCi0JMHhiYjQ1ZWU1ZSwgMHhiMDY3MzEyMSwgMHhlNTg4NDk3ZCwgMHhiNDU3MjU3NiwgMHgwODFkMjhhMCwgMHhhMzE3YjllNywKLQkweDc0YjgxZWJjLCAweDY4YWRlZjJlLCAweGI3M2E3ODA2LCAweDBmN2NjZGViLCAweGU2MzljYmYwLCAweDk0MDdmNjVmLAotCTB4NmNjZDRmOWYsIDB4YTFjNzZhMWIsIDB4OGFhZmU1NmYsIDB4MGZkYmM4MGEsIDB4ZmZiNWYwNDYsIDB4ZDFhM2E1ZTAsCi0JMHg2MTNmMTgzNiwgMHg0Zjc4YmVlNywgMHhjMDdlZmUxMCwgMHhlNTVlOWZmNCwgMHgyZjdjMmNkZiwgMHg3ZDMwZmMyMywKLQkweDA3YTQ3ZjQ3LCAweDQ0ZDljM2ZiLCAweDc2MTNiNDFiLCAweDdjZTc4ODFmLCAweDNhNDNhODkwLCAweGViN2ExNzJmLAotCTB4NjQ2OTc4NzcsIDB4MmIwOWJlNjAsIDB4OTQ4Zjg4ZWEsIDB4MTM2NWVkN2UsIDB4ZjUwNWM2ZjMsIDB4OWEyMzdlZjUsCi0JMHg2NmNiZGFiZSwgMHg1ZjcxODVlNiwgMHg0OWUyYTI1OCwgMHg3ZDYxZjQ3ZiwgMHg1MzdjN2Y1MCwgMHgyYmFmNjliYywKLQkweGY0MzIzYjc4LCAweGVmZGEwNjZjLCAweGY5YTFlMWYzLCAweDc3MTg4NDY0LCAweDA5MzIzZWM5LCAweDQ2MDlhM2ZkLAotCTB4YzQyNThlNWYsIDB4MzRiY2M2MzgsIDB4NTdhZWJiNGUsIDB4YTVlY2JhNTcsIDB4MWJlMWRlZmEsIDB4OTZhZTY0NmYsCi0JMHhmNDM0N2MxMCwgMHg5OWMzN2JlYSwgMHhkOTdhZTQwNywgMHhhMWQ5MDM1NiwgMHgzMmZlNTdhMywgMHhmN2U4MWYyZCwKLQkweDY1ODMxNmMxLCAweGZhYjNlMDM1LCAweDdlZDJmYmQ3LCAweDg3YWJmNzBlLCAweGU4MjQ1OTg2LCAweGU1ZjM2MDdmLAotCTB4ZmMyZjFmMjAsIDB4NzVjNGVjYjUsIDB4NTk2NWIwN2YsIDB4M2Y2ODNjZTIsIDB4MDFhYzdlMDYsIDB4MzU2ZTE2MzgsCi0JMHhhZGVhZjVkMCwgMHhiM2Y1ZDJmNywgMHhmZTE3NGY4MiwgMHhlYTEwNjEzYSwgMHhkN2ZiYTNmOSwgMHhhYjNhZTIyNywKLQkweDg3ZjZiMWZmLCAweDFhNzYyZmE4LCAweDQyODY4MzJkLCAweGIyNDNiMzViLCAweGM1YzkwNjk3LCAweDU1YzJhN2UyLAotCTB4NTYzYTlkZmQsIDB4ZDY1MGViOGQsIDB4ZDVkNzI0Y2QsIDB4YTc4MDM2ZmIsIDB4ZGRmNzU2MmEsIDB4NmFmZDk3ZmMsCi0JMHg5NWZjMDVmZiwgMHhmMjA0ZDhhYSwgMHgwOWRkMjY1NywgMHhiYzJiYWVlYiwgMHhiZWUyN2U0NCwgMHhjNzY0MTE4MywKLQkweGM5OTY2OGZmLCAweGZkMGRmMDFmLCAweDAyZGYzZmNmLCAweGU4N2Y5MmZkLCAweDA4NDNlNGVkLCAweGY0MmQxZjNlLAotCTB4YTRjOTYzMzIsIDB4YmM0Y2FhODcsIDB4NGY1YmIyNWYsIDB4OTQ0OTQ0ZmUsIDB4ZjE4NmY4NGMsIDB4ZmY3MGQxZTYsCi0JMHgxZjc4YzQ1ZiwgMHgzN2U0MGRlOCwgMHgzNGRhOGYyNiwgMHg4ZThkYzYxMiwgMHgxM2Y0MzAzMSwgMHg3OGI3YzVmZiwKLQkweDdlZmQwMzAyLCAweGJiZmQ2NWZiLCAweDI5ZWI0MTFkLCAweGQwMDNjZDY2LCAweDA2NjIyOTExLCAweDFlODc3NWNkLAotCTB4ZDQ5ODk3YWYsIDB4OGNlNzQ3ZDcsIDB4NmU3NjhiM2IsIDB4NWQ3ZDQ1YjQsIDB4NTg4NjliOTEsIDB4MDE0MWZmZTAsCi0JMHhmMDc3ZGZmZSwgMHhjM2M2NDdhMywgMHhjODhlYWFmYSwgMHg4NmJiMGZkYywgMHhlMTBkNzk3ZSwgMHg1ZjlkMjNkNywKLQkweGNmMDFkOGFkLCAweDM5NTgxNTFkLCAweDg2ODNlNTdhLCAweDExYWJlNDE0LCAweGZkMGQ1YjEyLCAweDk1ODRhZTBmLAotCTB4MGI4NzkyODUsIDB4YmNhMzZmZTgsIDB4ODBlZmEwMzMsIDB4ZGEyNzdkMDAsIDB4YTNlZDVkMTcsIDB4YjExZTRjMzgsCi0JMHhlMTFmNmFmNCwgMHhlZTdhZTZmZiwgMHgxMWQxZTVlYiwgMHg2YmY3YTQ2YiwgMHg2ZTU2YTBmNSwgMHgzODNkMmZiZSwKLQkweDBjODFlODYxLCAweDRmYjUxNDRmLCAweDRlYzlmYjYzLCAweDdhYjQ1ZmFlLCAweDE0ZjdhYjUxLCAweGQ2ZjBiNGI4LAotCTB4ZjRhOWQ2NWUsIDB4MWI1OGQwZGQsIDB4M2RlODBiOGQsIDB4MWJiZGU5MjMsIDB4OGQxZDVmMTgsIDB4ODE1ZjExMGQsCi0JMHg3OTdjMjY1ZCwgMHhhZTI5ZTk4NiwgMHgwZGUxYmYwMywgMHhiNjZiOTcxYywgMHg0ODAxMTVjNSwgMHg0OGVjOTYwZCwKLQkweGNjMzNlN2Q0LCAweGVlNTBiN2FlLCAweGIwM2I3ZjMyLCAweDFlYmQ4MTk0LCAweDg3NTlhM2I0LCAweGUyNGJhMzdhLAotCTB4MTA2ZWRhZjQsIDB4MDM3M2Y2MmQsIDB4NjIzYmNmZjEsIDB4YmNiMWVkZmQsIDB4YzUwZmYxMGYsIDB4OGEyYmQ5OGQsCi0JMHhmZWIwN2JkOSwgMHg4NGYzMTMzMCwgMHhmN2JkOTFlNywgMHhmMzAyZjIxOCwgMHhhMmUzMWNiZiwgMHg4YzQ1OGQ3MSwKLQkweGRjYjE5ZGM3LCAweDYwMWVjYmVmLCAweDdlNjA1OWQzLCAweDg3NTkyMDM2LCAweDcwMjY1YWY0LCAweDI1YTU3NmIxLAotCTB4N2JmODEzYjcsIDB4NmE2NGNhZGQsIDB4ZTdjNDVmZDEsIDB4NjgyMzdiM2MsIDB4Y2U0YmVmNWQsIDB4NmI3NzI4MjEsCi0JMHg3YTVhN2MwNSwgMHhmZTE1NWI2NCwgMHhmNjBmZjY3NiwgMHg4NzE0MTY4NywgMHg1NmQxZDNkNiwgMHhlOGE3YWQzZCwKLQkweGU4MTkxOWQxLCAweDdlZGZiYzZmLCAweGNmZWEwNjc3LCAweDNmNWUwMWY3LCAweDNkYmQzZmRhLCAweDg0ZmNlYmU2LAotCTB4M2UzYzg1ODcsIDB4OGM0NGVjMjgsIDB4MjY3ZjIzODgsIDB4YzdkODA0ZTQsIDB4YjVmZDEzYjEsIDB4YmZiYTRlOTUsCi0JMHhiNTM5NjU2ZSwgMHhhMGFlNTcxYiwgMHg1OWIxZGRmYiwgMHg5MWU4ZmVmNCwgMHg4MWIzZmJjZiwgMHg2NDFiOWQ3ZSwKLQkweDhjMGIwM2IyLCAweGYwYjFmZWNlLCAweDhlOTM0ZWRlLCAweGVhZjdkMWUyLCAweGNjYmI2NWNkLCAweDVjNTE5ZDc4LAotCTB4ZjFkMWUwYjMsIDB4MTQyZTUwZGIsIDB4ZjU2M2JhMzgsIDB4ZDZkZWVlYjQsIDB4M2ViZDZkOTksIDB4M2FjYjVkZmQsCi0JMHg1ZDFlZDFhMiwgMHgwMDc3YzdlNSwgMHg3ZTAxODkzYiwgMHgzMmJiMjE5YywgMHhjNzE4MDlhZCwgMHgzOGUyMjQ3NCwKLQkweGJmZWZlNGI3LCAweGVlODA4MjgzLCAweDk1NmZmNDBjLCAweGVjY2FmZmY3LCAweDYyMTZiNmM4LCAweGExMDZjMzljLAotCTB4NzA0NGI0NWMsIDB4NzM4NWEzN2IsIDB4ZDlmMzk1YTAsIDB4YzEzNjk1ZGEsIDB4ZmRhODAzMDcsIDB4ZWY2MWY4NTgsCi0JMHhhMTBhOWRhMywgMHhjZjExNmU1NywgMHg2ZTNiMzYxZCwgMHg2NjMwZjdjMSwgMHhkNjkzN2YyNiwgMHhkYTNiZmE4MSwKLQkweDQyNzA4NzkxLCAweGY3ODA1MGJjLCAweGNiZDUyNTg3LCAweGRiZjkwOTA2LCAweGY4MGRmNWMyLCAweDc3MWZkY2E1LAotCTB4MmM3MWM0OGUsIDB4MDQ0ZDIxZGUsIDB4ZjkxMzBjN2EsIDB4MDVmMmRlOWIsIDB4YjRkZTM4NWEsIDB4ZTZkMGY5NzIsCi0JMHhjOTU2OTQxMSwgMHhmOTVhOTQyMywgMHg2YjE2ZmU3YSwgMHg2Yzc3ZTU1MSwgMHgyYTExY2MyZCwgMHhjYWQ1YjA3ZiwKLQkweGMzYjI2NmY1LCAweDdhZGE0NzIxLCAweGQ3MDJiYjk3LCAweGYzMTkxZWJiLCAweGRlY2NlNTI0LCAweDUxYTQ5YTBmLAotCTB4M2Y5OGVkMmQsIDB4YWVmNTI5NDksIDB4NjM0YWZjYzIsIDB4M2QwZTU2YWMsIDB4Yzk1Nzk4ZTEsIDB4M2QxMmU5NzYsCi0JMHhlZmQxMmUzMCwgMHgxYzAyMzIyYSwgMHhlOTEyNjI1YiwgMHg3ZWFjNDk3ZCwgMHhjMGFiZDIxNSwgMHgxNzQ1YTNhNSwKLQkweDRhZjA4ZmVjLCAweDQzMDc5MDRhLCAweDA0N2U4NWYyLCAweDc5NDcwZDA5LCAweDlhZTUxZjFiLCAweDVmOWRmODQzLAotCTB4YzM2OGM2YmYsIDB4NDY0NzkzZmMsIDB4MDI1NjcyZmQsIDB4MzhmZTAxM2UsIDB4YTQyMjIwN2IsIDB4MjI4Zjc3M2YsCi0JMHgxZjcxNTJiNywgMHg0ZjA1ZTkzNCwgMHgwNTBmMDgxOSwgMHgxNjYyZmQ0ZiwgMHhkNGYwNWJjMiwgMHgyODI5N2ExZCwKLQkweDZhYzg3ZjRlLCAweDNkOWRmYzIwLCAweGUyOTMzOGIwLCAweGFjNjE5M2U2LCAweDc5Y2Y1NjVmLCAweDU0NWYwNTFiLAotCTB4NjBiZjdjMDksIDB4YWI3N2NkMGMsIDB4NWJhZmZiYzUsIDB4N2Y4Mjc3NGYsIDB4ZDNkMmE4OTMsIDB4ODEwOWFkYWIsCi0JMHhlZDVkNGM3YywgMHhiM2QzZDI0NSwgMHhmYzNlZGNhYywgMHhiMDcyZGY0YSwgMHg1N2YzZTAwZiwgMHhmMTFkOTlmMywKLQkweGFkOTlmOGJlLCAweGMxN2JhNzk0LCAweDA3NzYzMmQ4LCAweGM3NGVhN2FlLCAweGZmYjAwZjMwLCAweGZiMDdjYmUwLAotCTB4ZGYzODdmYTAsIDB4ODNmZDE0MzYsIDB4ZDkxZmNmYWIsIDB4N2ZkNzg4ZGUsIDB4MjI4NmNkNTUsIDB4MWJiYzUzZmUsCi0JMHg3YzA3Y2MyNSwgMHhmODRjZGUxZSwgMHgxODViN2NmYSwgMHg1YTRiMDU1YiwgMHhlYzY1YWM3NCwgMHhiOWJmYTA0ZiwKLQkweGFmNTBjNzQ2LCAweDZmMGRkNzY4LCAweGIxOTJlODMyLCAweDIzNzQxOWY1LCAweGZmNTFmZDM4LCAweGM2MDc3NDI5LAotCTB4MTQzZDIyMzIsIDB4NTBmZTIxYmEsIDB4ZjZkZmVkOWYsIDB4YzBhZmMxMTIsIDB4NDZjNjI1YjUsIDB4Y2NmYzViZjgsCi0JMHgyN2M4YjFjZSwgMHgxMmFjNmE3ZCwgMHhiODE0NjdlNiwgMHhiODlkYWJiZSwgMHhmN2YzZjY4MSwgMHgzZjY2NmZkNiwKLQkweDY5ZmE0NjVmLCAweDZlZDZhN2VkLCAweGY2M2IzMGNlLCAweDg2YmJmZTkwLCAweGY4MjMxY2ZkLCAweDBmNDIzN2YwLAotCTB4NDFlZDk4ZGIsIDB4MjNiMjUzY2MsIDB4NjhmN2NhM2EsIDB4ZjgyYTUyZTksIDB4N2EyZjI4MzEsIDB4NzkxZDdhYzQsCi0JMHgyYjU2NjFkMSwgMHgxNzliNTdiZCwgMHg3YWU0NmVkZCwgMHg2NmNhZDliNCwgMHg4N2U1MDk0ZiwgMHg5Yjc1NzgwOSwKLQkweDE3Njg4ZGJhLCAweDkwYTRkYmUzLCAweDk5YThlOTdhLCAweDliZDAyNWViLCAweDlmNzI0MWZmLCAweDg2YWY1YTFhLAotCTB4YzQxOWVmYzAsIDB4N2MzYmNkZGIsIDB4NWU1NDcxN2IsIDB4YmEyNDRlNmMsIDB4MGZjZjgwNWQsIDB4NzgxNGY4NTQsCi0JMHhlMGFhZjA1NCwgMHg4OGE2MzFiMywgMHhmMGJiNjVmOCwgMHg3MGM0YjczMywgMHg5OTcwMjk3YywgMHg4ZTcxOTRlMywKLQkweDdhNWYzODBiLCAweDBiZmFmYTJmLCAweGZmODA2NzgxLCAweGJmMWZjMjMyLCAweGVhZjJhOTljLCAweGJlM2QzZTRhLAotCTB4MGIxOTIzZGUsIDB4Y2EzMDJjZDAsIDB4YjljNjY1YmYsIDB4NWM2MDE5NTYsIDB4N2Y2NjQ4ZjcsIDB4MTUzMWZhMTIsCi0JMHg3N2Q0MjI5NiwgMHgzYjdiNmFkNiwgMHhjZjFiZGRlNiwgMHhlMzY2YmNmMSwgMHg0ZDVkZTY1MiwgMHg3ZmZlMzBmMywKLQkweGEzY2E2Y2FlLCAweGU2OWRkZTIyLCAweDU5NDE3NjllLCAweDUzMmJkODFmLCAweDE1YzEyMTVjLCAweGY2MzVmNzExLAotCTB4NDVjYTA2ZWEsIDB4OTMzN2RjNzIsIDB4MTBiOGY0OGIsIDB4NzMxYjdiNzQsIDB4YzcyMTA5ODAsIDB4NDM3OWM1ZjcsCi0JMHhhZjA3MzlkMCwgMHhiN2NlOGI1ZiwgMHhlNWU1Nzg4OSwgMHhjZDQ3Mjk5OCwgMHgwY2I1NmZjMiwgMHg0YjVkZDAwOSwKLQkweGRmOTFiZWNmLCAweGM0Zjc4ZjUxLCAweDA5NzE2ZGNiLCAweDYxYjJmMTNkLCAweDFlODA2ZTgyLCAweGVjMjJjOWQ3LAotCTB4YTRjZWVjYTEsIDB4ZGYzZGVmYjgsIDB4NDQyZTI5M2YsIDB4NTRmZTFmYmUsIDB4YWIxM2Y0ZmUsIDB4ODRkZmFmZWQsCi0JMHg1MzI2YmU3MCwgMHg0ZmM0ZjQ5YywgMHgyNzk4OGMzYiwgMHgwYWQyZjI1NiwgMHg4MTJmZWViYywgMHg3NzNmNDBhMywKLQkweDU2YTNhOTdkLCAweDI2ZDc1ZWI5LCAweDU1ZGM2M2U1LCAweGY5MGFlZmI0LCAweDVmZWQ1ZGM3LCAweGE1ZGM3ZjkyLAotCTB4Zjc5NThmZjEsIDB4ODllYzAzZGUsIDB4MzY1YTMxZjIsIDB4ZGM1ZmZmMTMsIDB4OTk3OGUzYzIsIDB4MTQ2ZGZlZDksCi0JMHg2NDNlZTFjMCwgMHhmMTFiNWU2MCwgMHhiNDBmZjkyZiwgMHhjNDVmZTg1ZSwgMHg2MzNmYzcxNiwgMHhlMTZmNzhhNCwKLQkweGY5ODYxN2UxLCAweDA4Y2M1MmUwLCAweGUxMDViMzFkLCAweGMxMTFkNjJiLCAweDhhZjg0MTZjLCAweGZhYWFiMzJiLAotCTB4YWEzZWNlMDksIDB4ZDllNTQ5ZjEsIDB4YWUyOWZiYWEsIDB4YTlmYmFhODEsIDB4N2VhYTc5ZDUsIDB4YWFhZGZkN2EsCi0JMHhiNzYwOTlmMSwgMHg5ZTU5ZmI4MiwgMHg3ZGYxYWE3MSwgMHhmYWFhYTY5YiwgMHg1NmVmOWFmZCwgMHg4NzFlNjc4ZCwKLQkweDM5ZDYwNzNmLCAweGE2ZjNhYzVmLCAweGUzNTU3M2NkLCAweDYxZjI0Zjk5LCAweDIwODE2NDdkLCAweGM3ZGJjN2YzLAotCTB4YzhmYWMyMWMsIDB4Yjg4ZjkxN2MsIDB4MzU1OGJiZDksIDB4NzU2NjgyZGYsIDB4MDhmMDgxNWUsIDB4OTU2YWFiNzgsCi0JMHhiNzg4NjNkOCwgMHhkNWZiZWFjZCwgMHg1MzFiMWI2ZCwgMHg1NWU0NWRhMSwgMHg3NThjNWY1ZiwgMHg1M2Y5MDkwZiwKLQkweDNhZjdmZDdkLCAweGUzZjQzMmU3LCAweGNlYTcxOTdmLCAweGJlOTM1ZGQzLCAweDQ1YWU5YjllLCAweGM3MGZiYjVmLAotCTB4N2YyMjg4ZWYsIDB4NzllMWUxNjcsIDB4Yzk2MTQ3MjQsIDB4ZGI4NmZhNmEsIDB4N2YxNmJlMjIsIDB4OWFhYzAzOTEsCi0JMHhhZmJmZjBmYiwgMHg1ZDk0NWZjMSwgMHhmYzVhMGZjZCwgMHhjMWY3NTllOSwgMHhjZWFiODA1NCwgMHhhYzdkZDkyYiwKLQkweGI1MTZmZTI3LCAweGI1MzgyNTZlLCAweGVkZTJkM2Y4LCAweGJjZWE3MThmLCAweGQ3NDhkYWNlLCAweDk3MWJkNDVlLAotCTB4MGNjYjk3NWEsIDB4YmM2NWYzZjMsIDB4ZjVhOTc4ZmUsIDB4NmM0NzIxZDMsIDB4N2VmOTc5NDEsIDB4NWZlNWU2YmQsCi0JMHg5NzkxMGI4ZCwgMHhjYjdhYzJlZiwgMHhkNDFiZWMyZCwgMHg4MTdkZjY1YiwgMHg4YjAzMDg3OCwgMHhiMjdhMDA2MywKLQkweGQ1ZDM3NjExLCAweDIwNzg0YWZhLCAweDViZDVhZjBmLCAweGZiN2EwYjRhLCAweGNmYTQ3MTZmLCAweDM1YTk3NTAzLAotCTB4OThiMGY0ZjAsIDB4YWYwODlkYjcsIDB4ZWYxOGI3NTIsIDB4YjdiYzExNzIsIDB4ZTEyMzIwMjAsIDB4YTc1ZjMzM2YsCi0JMHhlMWUwMGYzMiwgMHg3YzY3OWMzZCwgMHhlMzEyMzU5MSwgMHhlZmZiOWRhNywgMHhiNTgwNzhhMSwgMHgwNzNkNzNjNSwKLQkweDFmMWUwZjI0LCAweGZlOTI5N2U0LCAweGE2N2ZjMTZjLCAweDQ4ZmMzZDkwLCAweDcwNGZjM2Q4LCAweDMyMWVjNTNlLAotCTB4NTdiZjk1OWYsIDB4ZTZkZWMzZDgsIDB4YmQxNmVhNTEsIDB4OTk1ZWQyYjUsIDB4NThkZDJmZWEsIDB4Y2ZhMTA5N2YsCi0JMHhkMWRmZjE4ZCwgMHgyM2QyN2NhZSwgMHgwZjhjNjlmZiwgMHhiZGVlMGY4ZSwgMHgzYWY1MTA3NCwgMHgxZTNjM2RlMCwKLQkweDA1MTUxOWQ2LCAweGQ4MGE1MmY2LCAweDhjOGI3ZmNiLCAweDNlZWI3OTI2LCAweDgyNmY3YjJjLCAweGI2NGQxNzBiLAotCTB4YTA2ZTZiMTgsIDB4Nzc4NWEyYmUsIDB4YWI5YWM5OTQsIDB4NmRlM2QyMGYsIDB4MzY1ZWRhOTIsIDB4MjNmZjcxZTYsCi0JMHgxZGZiOWUzMSwgMHgyZmRjY2M5MywgMHhlOWQ2MmMxZCwgMHhlZWViZjhkNiwgMHg4Mjk3MWUyNiwgMHgwNWI3NTQzNCwKLQkweGUzODM4MWY5LCAweDNiZmM2OGEzLCAweDcxODM0NTExLCAweDVjNDU1YjNkLCAweGQxMjU5OGRmLCAweDg5MjUxYWZiLAotCTB4MzEyZGZhZWMsIDB4OWRmZjc0YzUsIDB4NmM1Y2EyYjgsIDB4MGVmNzg5ZmIsIDB4ZGEwODlmNDYsIDB4OGYwZTZjZTYsCi0JMHg1MDEzZWM0ZCwgMHhjNzEwZmZlNiwgMHg0YzViNjIxNywgMHg4Yjc4ZTBlZCwgMHgwNjU4ZWZjOCwgMHg0NDhmYmQyMiwKLQkweGEzNWU2ODM4LCAweDI5ZmNhYjJjLCAweGU3OGJjZGE1LCAweDk5YTc0NDdlLCAweDJhOTM3ZTI5LCAweGU4NDYzYzdmLAotCTB4ODcxN2NjMzEsIDB4MjYzOTMwOTEsIDB4ZTQwYzRlOGMsIDB4ZWEzYzk5OGIsIDB4ZTQ1ZTMxYjgsIDB4ZGM3YTI1ODksCi0JMHg1ZGJjNzQ4MSwgMHhiY2I3YjFkMCwgMHg2NTgwNjNiMSwgMHg0NDM5YmMzZiwgMHgxYzk3ZDhkZSwgMHgxZjZjNmYzMiwKLQkweDc4NjM3OTQzLCAweGQyZWI4ZjUyLCAweDBlOTE4ZmU2LCAweDNjODBkNjkxLCAweGFhYmY4YzRjLCAweGRmNTBkMjZmLAotCTB4M2M3NTY2MzQsIDB4ZTNmOTFlMzIsIDB4MTI3ZjZjYTgsIDB4MTNjNzdmNDEsIDB4YjZlMDA0MzksIDB4N2M3Njc1ZDksCi0JMHhiNjE2ZTQ2NCwgMHgwYmZhMWMzYSwgMHgyZmNhMzYzZCwgMHg4YWZlMjAxOSwgMHhlZmM4MGJjYSwgMHg0ZTJjZjg5MiwKLQkweGQzM2UxM2ZmLCAweGZjM2ZiODEwLCAweGU2M2I2NzFkLCAweDYzNGZmYjkzLCAweGNkZmY1NDU2LCAweDFhMjRiOWFjLAotCTB4MmMyZDg4ZmQsIDB4MjU1MmJjNjQsIDB4ZDE3YzY2ZjgsIDB4M2NlNTE5NWUsIDB4MjVmODFiYTEsIDB4ZTJhYTNkMDQsCi0JMHhiZGJmOGE3NSwgMHhiYzM2ZTkwMCwgMHhmNTA5NzVkYiwgMHg0ODA3YTI4OSwgMHhiNDVjNjE5NSwgMHhiMjdlNDc1ZiwKLQkweGU4OTZmOWY2LCAweDA3YzQyNTkyLCAweDkyNzlkMGRlLCAweGUzODczMzRlLCAweDI5NzM4NDQyLCAweDU3NzgzZmNlLAotCTB4Y2RmNTExODcsIDB4Y2U2ZjQ1NDIsIDB4ZDAzZDMxZDcsIDB4YmY0MTRlZjcsIDB4YmFmMGI3M2IsIDB4ZDVmMmJiMzQsCi0JMHg1ZmUyYjI1NywgMHhhMTlmOWEzMSwgMHgyZDM4NTgzZSwgMHg4Nzc5OGJjYSwgMHgxZTU5NmQ4NSwgMHg1MTI5Y2I4MiwKLQkweDc2ZGRjNTVlLCAweDg1ZmQ4OWNjLCAweDhjMTYwNTA1LCAweDY1N2YxZDczLCAweGU0MDE5OWQyLCAweDc3YWUzMTlhLAotCTB4YTI4Y2VjZjQsIDB4YzY3ZWM4MDcsIDB4YWE2MjlkNTMsIDB4YjM0ZWFiZTAsIDB4ZmQwNGUwOGQsIDB4ZTgxMjIxYmMsCi0JMHhhYWNiNzBiMCwgMHhlMTJmYjhiZCwgMHg1NDY3N2ZhZCwgMHg3NzIxMzg4ZiwgMHhhNmM5YzMwZiwgMHhlNDU2NzIwMywKLQkweDE1NjdhYjYxLCAweGFmMzBmODc5LCAweGYzMTM0Yzc3LCAweGY3ODRiZTc4LCAweDlkZWYwMjlhLCAweGQ2OTg3NmRlLAotCTB4M2NjMGMyNzMsIDB4YWU5N2UwMjYsIDB4ZDBkOTc3M2QsIDB4MzA0YzZkNGYsIDB4NDU3Zjg5ZDksIDB4ZWM5NGViOWQsCi0JMHg4NzhjODA3YSwgMHg0MTBlYmJiZSwgMHg2OTE2ZDE5YiwgMHg1OGViMGY1OSwgMHhhZmRjNjQ2MywgMHgxMWQ4NDVkNSwKLQkweDFkY2QxM2ZmLCAweGY4OTdlMjdhLCAweGYxZTIzZDZlLCAweGY0Njc0MTBkLCAweDRmY2ZjOWVkLCAweDM5Mjc0NDYwLAotCTB4OTZlOWM3NTUsIDB4NDRmYmUzNjksIDB4YmZmOWQ0NzIsIDB4YzFkZDA0OTcsIDB4ZWJjMzRjNmIsIDB4NThkZjIzMTMsCi0JMHg3Y2NlMDM2ZSwgMHhjNzBmZDM3NiwgMHhkZWEyNDdlOSwgMHgxNjc5NjM3YiwgMHhkZDM2NWJmNCwgMHhmYzhmNGUzNSwKLQkweGE3YzZmYTlkLCAweGNmZWEyMDU5LCAweGY3ZTcyYTZmLCAweDY5ZjFiZDA3LCAweDZkNzdmNDM2LCAweGRmZWZjMTlhLAotCTB4NWVjZmJjNDYsIDB4MzhmNzc0ZGMsIDB4NzRiZmViY2MsIDB4ZjlmMDJmNTUsIDB4MTI0MjIwOTcsIDB4YzM5NWJmYWUsCi0JMHhlMmExZjU3NCwgMHg5MmJjNWYwYiwgMHg3YzA2NjY1ZiwgMHg0ZmVkYjM4ZiwgMHgzYWNlZDAyNywgMHhjM2I3ZmE5NSwKLQkweDIzN2ZhYWEwLCAweGRmODA5OGM3LCAweDYyYmUwYmM2LCAweDA3NjRkMWYxLCAweDhkZmEwOWM2LCAweDNmNjhmYmQ3LAotCTB4MjNlNGNlOGMsIDB4MWFjNGRlZmMsIDB4ODAzN2M4MmMsIDB4ZTU1ZjRkYWQsIDB4YzA3ZjdjZjcsIDB4NGJmOWE5YWUsCi0JMHgwMmI2MzA3MiwgMHgyY2Q5MmRlOCwgMHg1NjZiMjdjNCwgMHhkYTM4NTczMCwgMHg1ZGRkNDBmZCwgMHhjY2VlZWJjNywKLQkweGUwNTdlZjg5LCAweDAzZGZkZTUxLCAweGRlYWQyMDJlLCAweDE2ZDcwYzFhLCAweGFiODE0NzlhLCAweDA3OTg2ODZiLAotCTB4OWZiMTQ5ZTUsIDB4NTI1ZDVjMGEsIDB4ZjQ5OGUzZjcsIDB4MGYyZmQ5ZmUsIDB4NzViYTQwNGUsIDB4NDg2Nzc1NDUsCi0JMHg3MDkwZGZkMCwgMHg5NWQ4ZTg5MCwgMHg2NGI4ZmRkMCwgMHgzODFiZWEwZiwgMHg1YTZjY2YxZCwgMHhlZjAzY2UzNiwKLQkweGNlM2IyOGQ5LCAweDE5ODZkY2EwLCAweDI2OTJiZWY5LCAweDNkZTA1MzhjLCAweDNjYjgyNjBmLCAweGJlMDNjZjU4LAotCTB4ZWY5MGZiYjMsIDB4ODdhNDhkZDIsIDB4NzlkNDBiNGEsIDB4NjdjMTZlODksIDB4ZGViODEzY2IsIDB4NWNkNjFkMWYsCi0JMHhkMmY4MGM3ZiwgMHhhYjYyNGJiZCwgMHhjYWZiYmM2MCwgMHg4OWRhMjMyNSwgMHg4ZGE3NmQ4OSwgMHg3NmViNjgwZSwKLQkweGJlYTIzNjlkLCAweGNjM2VjM2FhLCAweDE4YzViNzUzLCAweDEyNzk2ZjUyLCAweGQ0M2Y2MTY0LCAweGY0ODFmMDdlLAotCTB4ZTNjNDBmZmUsIDB4MTJmOTg1YmUsIDB4ZDllZWUyNTUsIDB4ZmIxYTNiMWQsIDB4NTVjMWNjZjcsIDB4YThmNzc2MzIsCi0JMHg1ZDkxYTM5ZCwgMHgwZmVkOWQyYSwgMHg3NTliM2I2MCwgMHg5YTE2NDAxYywgMHg3ZTU1OTJlMSwgMHg0OGVhY2NlOSwKLQkweDU5NWI1Zjk1LCAweGNmZWFhNzFmLCAweDgwZWEwNjZlLCAweDkxNWVjZjVjLCAweDE4MWY4ZWFhLCAweGNmMDBhYmM0LAotCTB4NDNmODE2MGMsIDB4ZTgyZTU2ZmQsIDB4ODM3OTIzMzgsIDB4Y2NhZGY3MWYsIDB4MWQzYzE5NzAsIDB4NmM0ZGYzNDEsCi0JMHgyMmI3YTU1YiwgMHg5ZDkyZjVkYywgMHhkOTg3YWZkNCwgMHg3Yzk5YjlmMCwgMHgzZGVhZDA4NSwgMHhkMWIwZjVjMSwKLQkweDUxODkzY2FkLCAweDdmMjI2ZTU3LCAweDgwZmIwMmJmLCAweGQ5MWE4YWQ3LCAweDBmMTA5MzZiLCAweDZlZWZiYTQ2LAotCTB4NWJiZWU4OTUsIDB4NGI1Nzc3ZGMsIDB4ZWM5NjFkNGEsIDB4ZTMwMTZjZWUsIDB4NDZjNzNkY2MsIDB4ZTExMGI2ZDMsCi0JMHhjZWYwMmJkZiwgMHg0YjNiMmYyZSwgMHg3YWZjMjhmYywgMHgzNmU1NWQ2NSwgMHg3ZDcwYjNiMCwgMHgwNmRiZmE2ZCwKLQkweDhmZjY3NzljLCAweDQ1OTcxNjI0LCAweDUwZWNlYWViLCAweGFmZGQ1MWUxLCAweDE5Zjc1N2FjLCAweDllNjAzMGViLAotCTB4ZjUwYWY2N2EsIDB4YzIwOWUxZjUsIDB4ODM2MjBlOWUsIDB4MjU0NjllNTAsIDB4MmY5MjdhNDgsIDB4ZmQyNGZmZDEsCi0JMHgwMDdjZDdlZCwgMHhmM2IyZTNkZiwgMHg4M2UwMDRmNiwgMHhlYThmYTMxYSwgMHgyZWNiOGY1MCwgMHhlMWY3MmJlYSwKLQkweGI5MjMxZDdhLCAweGU0ODA3ZjAzLCAweDVjZjkyMjU4LCAweDhhNTg3MDYzLCAweDk1YWU4ZmQwLCAweGIyNjc2Zjg4LAotCTB4MmIyMTdmMjAsIDB4NzJmYTllMzAsIDB4MDkzZGZlY2YsIDB4MTM1YTVmZGMsIDB4ZjU0ZTVjZWUsIDB4NjU5MjNkYjAsCi0JMHhkNTJhNWMxYiwgMHgwN2U4ZjQzYiwgMHhlNzQyOTFhZSwgMHg3MDI1OTY0MywgMHg0MThkNzg3OSwgMHhmNTcwMGVmNCwKLQkweGJiNDUyNjQ3LCAweGQ3OGM2NzdlLCAweGZmZWRlZjAzLCAweGY0MWUzOWM3LCAweDAzZTdmYmVmLCAweGVlNTBkODFmLAotCTB4MmYxOWJkYjksIDB4ZjAyNGNkZWMsIDB4ZWJmZmQxMmYsIDB4OTM5NGI3MmYsIDB4NjhjNWJmN2UsIDB4ZWMyZWZkMjEsCi0JMHgxYzJmYTI5MCwgMHhhMWRiNTFiZiwgMHgyODg3NjlmMSwgMHg3OWI0OThmZSwgMHg4YmQ0MDVjMywgMHg3OTFkN2QzOSwKLQkweDA3YmUwMTFiLCAweDFmZmJmOWMzLCAweDcxNzkyZGRjLCAweGVlNWQ0ZTFmLCAweDQ5OWZkMjQxLCAweGRlZjgxZWMwLAotCTB4NDdhMTY0YmEsIDB4YWNmYmQ1NWIsIDB4MjFhZjUwOTIsIDB4YTVjODRjYzMsIDB4MTQ5OGE2ZjcsIDB4MWU5MDc3NmUsCi0JMHhiYWM1N2M5NCwgMHg0OTdlODBhZiwgMHg2OWE5YmRlMiwgMHhlMjU3YzIzNiwgMHhkNzA5MTZlMiwgMHhhYjNjY2U5ZCwKLQkweDQ1Y2Y4ZWQwLCAweGI0MGMyYzIxLCAweDk3Y2ZlZGQ3LCAweGJlN2Y1YTRhLCAweGU0ZjlmYzliLCAweDdiYzUyMzBlLAotCTB4OWRmOGRiYWMsIDB4ZTczZDczZjIsIDB4ZmNkNDMyZmYsIDB4NTNhYTdjYjAsIDB4MmJmMmUyMDcsIDB4YjlhNzk4ZDEsCi0JMHhhZmRmNGY2NywgMHg5YjI0ZGZkZCwgMHhjMWI3NzFkNCwgMHhjN2JiOGVhMiwgMHg5ZmViNTAwZiwgMHhkZWI1NzY4OSwKLQkweGFmYTIzYzk5LCAweGM3MTRmZWVhLCAweDNiZmRkNTIwLCAweGZkNTVmMmNiLCAweDU0ZGJjZWU5LCAweDJmMmFlZmUzLAotCTB4OTJjM2Y1NTEsIDB4MDBmMjY5YzcsIDB4ZTQ0YWJjZWEsIDB4MjU1ZTc1MDAsIDB4YTNjZWFlY2EsIDB4N2RmZTFkODQsCi0JMHgzMTc4MDRiOSwgMHgyZTFkM2M5YSwgMHhjODEzNDNjMCwgMHhjMDZiMDhjNiwgMHgzNjhhMGM4ZSwgMHgyMjM2NzE1MSwKLQkweDZkOGNkYzNmLCAweDFmMzBkMGQzLCAweDFmNTM0OWYyLCAweDFkODc4NzFlLCAweDA3ZDkzN2JlLCAweDc2NjI5OGYzLAotCTB4ZjEwNGIwOTgsIDB4MWM1YmM5NWIsIDB4OWEwMDczMDcsIDB4ZjAzYTllYTgsIDB4MzliZmI1N2UsIDB4MTdkYjg1MzIsCi0JMHhiODI1ZjVhNSwgMHgzNjg0NGY1ZSwgMHgyYTViMTlmNywgMHgxNGZkNjdmNywgMHgxODIyOTg5ZiwgMHgzNDVlOGJmNywKLQkweGM0YTQ1ZjkxLCAweGU5M2NjYWM5LCAweDUwMDc0NTY5LCAweGVmZGVlNDdmLCAweDZiMDliYWEwLCAweDI3Y2MxNjY1LAotCTB4NzkxNDY5M2UsIDB4YmVmOTE3ZDQsIDB4MGVkNmRjZGIsIDB4YmU0ODIzOWQsIDB4ZmFlNDRjZWYsIDB4ZTJjZTE3ZTAsCi0JMHg1ZDdmMzhiMSwgMHg5NDU5NTgxYiwgMHgxYWVmY2RhNywgMHhkNzU5M2ViMSwgMHhmNjhkMWVkNiwgMHg1ZGYzODg2YywKLQkweDAyZWJlNjIzLCAweGQzOWQ4NWQ3LCAweDVkNjA0Nzc3LCAweDcyMmQ3N2U1LCAweDcyY2FmZGM4LCAweDFmZWJjZjIyLAotCTB4ZjJiZDdhMTQsIDB4NTQ3YzQwZGUsIDB4YWZhMDJjMzQsIDB4ZjVmMjc3MmIsIDB4OTIzNzRlNTUsIDB4NDZjMmMxM2UsCi0JMHg3YTBkYmQyOCwgMHgyYWRlNjdiYSwgMHhmMjhjMWVkOCwgMHgwM2JhODAzZSwgMHhkYzZhYjdmNCwgMHgyZTNjNjllYywKLQkweDhkYmQwMGFhLCAweDVjZmEwYzcyLCAweDkxYWQzZjdkLCAweDczZTgwYmY0LCAweDAxMGJmNWQ1LCAweDE1ZmI5ZTdkLAotCTB4MTljMjc3M2MsIDB4ZThmNjVmN2EsIDB4M2YzNzVlMTQsIDB4ZmMyMTJhZTEsIDB4ODhmMDAyZmYsIDB4N2EyZmYyN2UsCi0JMHhmM2UzOGRlMCwgMHgxNjdhZjg1YSwgMHgzNzQ0MWY2OSwgMHgyOTI5YjhlZCwgMHhiNjdjN2ZkYywgMHg0MzNkN2QxNywKLQkweGM5NDlmNWQwLCAweGQ0Y2E4NzlmLCAweGJlMjA4Y2VkLCAweDhkNzI2OTlkLCAweDdhNDdjY2VmLCAweGY1ODhkZTdjLAotCTB4NGJkZmNhODksIDB4ZGZlY2VkMGMsIDB4N2VkMzBmZGEsIDB4MDNjZWUzM2QsIDB4ZDI4ZmI4ODksIDB4OTEyMDcyZGQsCi0JMHgxOGQ1ZGYwMSwgMHg4ZmQwYWI2YywgMHhhM2IwYmUwNywgMHhlYWQ3NTNkZiwgMHg1YjZiZjgyMywgMHg3YWYxZGJmMiwKLQkweDQ3NjRhYjZkLCAweDc1ZGVlYzU1LCAweDkzYWQwYzYxLCAweGJkNjIzNDc1LCAweGUwNWVjOWVmLCAweDc2ZTQ0Y2NhLAotCTB4OGRhMjYwNjQsIDB4OTg1YzA3ZTcsIDB4YzNlN2MxMTMsIDB4ZjkwOTVlYmMsIDB4YzIxMmY0MDAsIDB4Y2Q2MjViYjUsCi0JMHg5ZDcyN2ZkMCwgMHhiNzlkNjQyOSwgMHhmZjdiZTA1MiwgMHg1N2M1MjMzYSwgMHhhZTNjZjAzNSwgMHg0MWZhNjBlMywKLQkweDY4ZjkwOWEzLCAweGMyNGJhYzI3LCAweDFlOWIxYzc1LCAweDM3MmZmMzg5LCAweDE0MmZmNDMwLCAweGZiYTVjZWY4LAotCTB4NGZmYWUxNGYsIDB4MDcwMDg3Y2UsIDB4MmY5OWFmYWUsIDB4MmU0ZmJlMTMsIDB4MDVjODc5MTcsIDB4NThjZmVhMDYsCi0JMHhkZDdlMjQ2NCwgMHg0NmJkZmYzNywgMHhhYzlkZWZjYywgMHg0YmRjZmJlMSwgMHhmOTQ2N2MxNiwgMHgyNDhiMTliZSwKLQkweDhhOTkzZjY1LCAweGQ1N2UxNTlmLCAweDdmOTZhN2YyLCAweGY1NjlmMDdiLCAweDk4ZTlmMWY1LCAweDNhN2NhYmM0LAotCTB4ZDAzY2VkMDQsIDB4ZjIxMjc0N2QsIDB4Y2UyMThmY2YsIDB4YjJiOWY5NDYsIDB4ZjAwNDkwY2YsIDB4ZWM1YTM3NjYsCi0JMHhiMDZiYWZiOCwgMHgxMTIwN2RlYywgMHg3ZTNlYzRmNSwgMHg1NmNkNjg3ZiwgMHhkYjFiZWI4OSwgMHhhOTg3MjhkZCwKLQkweDFlYjY0NjRkLCAweGFlNDRjYmZkLCAweGJkMjA2Njk3LCAweGRkNjk3MTBhLCAweDdiYzUyNDUyLCAweDRiZDQ2Y2ZlLAotCTB4MGVmN2NhNTksIDB4MTNiZTU2MDYsIDB4YWU3YTcxZjMsIDB4OTRiZjA2NmYsIDB4MTA3ZDc1YmMsIDB4MzkxMjlhZGYsCi0JMHg3MDdhMmFiZiwgMHg3NmI5OTE5MCwgMHhhNWJmZGU1MiwgMHhlNzk4MTRjZiwgMHhkYmFmMDM1OSwgMHhmYWY5ODg2NCwKLQkweDMzMWVlZGY1LCAweDA4OWZkYTA1LCAweGUwMjc5OTdlLCAweDBhZjdmYTUwLCAweGNkNGY2N2ZlLCAweDM0NGVmYzIwLAotCTB4NWI4ZmJjNzEsIDB4NzVjMGFiZTEsIDB4OGI1ZDE5MzQsIDB4ODRmZWUxMTIsIDB4ZDA2YmI3OGMsIDB4YmY2NTM1Y2UsCi0JMHg0MmY5NGI5YSwgMHhhNzNiMjM2NiwgMHg0NmZiZTdjNCwgMHgxOTY1YjA3ZSwgMHhlNmZjMzdhYywgMHhmODYzYTIwOCwKLQkweGU0MTY4ZDllLCAweDA1N2VmMGUzLCAweDdjMTBhZTQ5LCAweGNiZWViNGE3LCAweDM5MDJlNjM2LCAweDRkOWNiYmFhLAotCTB4YjI5ZmQyYWQsIDB4ZjY5MWFjZjcsIDB4MTg1ZGI3MjEsIDB4Mzk3MjcyNDMsIDB4Y2YyYmFlOTksIDB4ZjkxMTRhMmQsCi0JMHg1M2RmYjEyYSwgMHg5ZTgyNWZjOSwgMHgwYmM4OGZkNiwgMHhjMGYwNTM4YywgMHgyMTVlMTc3MCwgMHhkMTE0ZjNjMiwKLQkweDM2NTJkOTZiLCAweDM3ZDFhNzk0LCAweGQ2NjdmYWQyLCAweGMwZTY5MzFjLCAweDFjMTk3NzNjLCAweGQ2MTY3MzA2LAotCTB4NzdjN2NhY2YsIDB4NTM3ZWUwZTYsIDB4NzFmZDVjYzYsIDB4Yjk4OTlkOWYsIDB4Y2ZkZmI4OGMsIDB4Y2FmZjdkNDIsCi0JMHhiMWJmZWE2NCwgMHg2M2VkNDZkMiwgMHhkMGNmZTcyNiwgMHg1ZmRmNGNkZSwgMHg0ZGY2OGZkZiwgMHgyY2VhM2ZhNiwKLQkweDFkNzRmNzg2LCAweGI2YmUwODMxLCAweDNhOTRiZTEwLCAweDk5MzZhNWQwLCAweGE1ZmVlMDk5LCAweDM1ZDUxMjVkLAotCTB4NWQ2N2Y4MTUsIDB4NzE1Y2MzZWUsIDB4ZGYxNWZkOGMsIDB4NWRhOWVmMDcsIDB4M2JlOTI2ZjEsIDB4MzE4NWY1N2IsCi0JMHhhZDBkMTcxOCwgMHg3ZDg4ZGQzOSwgMHhjNmNmOGFmNywgMHgwYTcxM2ZhMCwgMHhmNWY5MDdlYywgMHg0YjI3ZGZlMCwKLQkweDE5OGU0N2E4LCAweGM1NWQ3ZjcxLCAweGYzY2QyYjY1LCAweDBjN2JhZWFjLCAweDE1ZTc5N2NhLCAweGE3NGRlYTg5LAotCTB4OTMxODJmNWEsIDB4MDg2MjdkYjgsIDB4OWY1ODE2Y2EsIDB4MTg5NWQ3MDMsIDB4Yjc3MWY4NGIsIDB4ZmE3MWQ1MGQsCi0JMHg0YWI4ZjBlNiwgMHhjMGZiNDNmMCwgMHgxZTkxYTMyZiwgMHhkN2I2MTVhNiwgMHgwZmU3YzM2ZiwgMHg3N2U1MGNjOSwKLQkweGI0Nzc3MTdkLCAweDNkZmU4NDI1LCAweGZlYjJmMzAxLCAweDZhZDgxZDdjLCAweDNkMWI5N2VmLCAweDVjZjBlY2ZkLAotCTB4ZmVmNDJlYjksIDB4OWYwNTU3YTgsIDB4M2UyOWE2MDIsIDB4MTEyOTNmYzAsIDB4NTVmZjk5ZTUsIDB4YWM2MjkyYzIsCi0JMHgyMmY4ZjcxNCwgMHhkYjJiOGU0MCwgMHhiMWVhY2U0YSwgMHhiYmQ4OTdhZCwgMHhiZDhjNzhlYSwgMHhmN2I3ZTQxYiwKLQkweGI0ZGY4N2M2LCAweGY0ZjljM2FkLCAweGUyMDFmNjQxLCAweDA3ZTQxNjQ2LCAweDU0YzhkYzYxLCAweGJjZjBmN2VmLAotCTB4OTI0ZTdhNTIsIDB4YWYzYWM0MmIsIDB4MWY0NzQxY2EsIDB4ZDU3YTAzNjYsIDB4ZjNiYTAxMzUsIDB4NTIwN2RmOTEsCi0JMHg1YWY3N2U3YiwgMHgyOThmY2ExYiwgMHhiNDUxZmJhMiwgMHg4ZWJmYWMxMywgMHg4ZjVhOGNlMiwgMHg5M2Q5ZmZkYSwKLQkweDRmNzhlNWNjLCAweDc3ZWI5NzMyLCAweDEyZjFkNTEzLCAweGEzZWY0NWM0LCAweDE0NWM0MzFjLCAweGEwZGY4NThkLAotCTB4OWQ3YjQ5NzgsIDB4Y2ExMzI1ZTIsIDB4MTA3N2JjMTUsIDB4MTBmOWU3ZDAsIDB4MmU0ZTFmNzAsIDB4M2RmOTA4ZmUsCi0JMHg5ZjEzMzU4MywgMHhlNDczZTAzMywgMHgzZjNhZWQyZiwgMHg5MTUzZjYxMywgMHhkNzI4MTllYiwgMHg1Y2FkYmZjOCwKLQkweDFlZjNiNWFlLCAweDBjZmEyZTRmLCAweGZiODc1OWUxLCAweDhkZTg0MmI1LCAweDZiM2FjNTU3LCAweDk3YzIzMzM3LAotCTB4ZjA5NWIzN2IsIDB4NzY2ZDhlNzQsIDB4OWU1ZjAzMTYsIDB4ZmViMDM4MDMsIDB4NDY3NGU1ZGYsIDB4YzY3ZDYyYzYsCi0JMHg5YWI0OGNlNSwgMHg2ZWEwN2EwMywgMHhiNzNkMDQ3MywgMHhkYzZhNjcyZSwgMHgyNDQ3ZTgxYywgMHhkZjNmYmU3MSwKLQkweDNjNDI2MjVhLCAweGU1Y2NkYWNmLCAweDI5ZGY3OTRmLCAweDk0Mzg4Y2RmLCAweGI3NDM0MmE3LCAweGQzZjcwZWQxLAotCTB4YTM0NzRlZGEsIDB4ZmJiODU3ZGYsIDB4YzM5NDM4Y2UsIDB4NDdmY2UwZGUsIDB4ZWQ3NzVmMTIsIDB4ZTNjNjdiOGEsCi0JMHg4N2Y4NWRmNywgMHhmZWE1NGNmOSwgMHgzM2VkNWVlNiwgMHgwNTc4ZGQ1MiwgMHg3ZjZkZmUyMywgMHgyODc1NmZmMSwKLQkweDIyZGJlN2M3LCAweGNmMzc2ODJkLCAweGEwZjQ4OWVkLCAweDI1N2FlZmZlLCAweDI4OTNhYmNjLCAweDgwYzRmMGVlLAotCTB4ZTg2NzNiNWUsIDB4ZTVmZTQ0OTgsIDB4ZmU4MmQ5NmUsIDB4OGY5NWZiOWQsIDB4NzQ3OTQ1MWYsIDB4OWU4NjE4YmYsCi0JMHhiNmQyNWIxZSwgMHhiZGRhMDJmNiwgMHg2N2IxYjY5YSwgMHg5ZjY4NDNmNSwgMHgxZTU1M2ZmOSwgMHg0N2RjNTc2YSwKLQkweGZmZDI5MTdlLCAweDg5YzlhNTc4LCAweDllYmNmNDdhLCAweGFkMjU4OWViLCAweGJiYmY5MDJmLCAweDIxYTVjYWU0LAotCTB4YjczZWY3NTgsIDB4YTE4NmJmZTcsIDB4ZjFmZjczNWUsIDB4NjdkNDMwZDIsIDB4MWE1YzNmZWUsIDB4MmZkZGY3ODYsCi0JMHhmMjg3ZDY0NSwgMHhjOGE1NTY1NywgMHg1ZWM1N2Y0NCwgMHhhYmQ3MWQ2NiwgMHgwYjFmNDNmMiwgMHg2ODZhYzhmZSwKLQkweDliZmRjMzJlLCAweGQ5YTZjNzg1LCAweGRjYWI3ZjMxLCAweGEzYTdlYzJmLCAweDZmODVmYWZkLCAweDA4MmRjNjk1LAotCTB4YWZjMWFlN2EsIDB4MDVlYmMzMmYsIDB4ZTcyMzRhYzcsIDB4NDc2NWYxMDcsIDB4MmZjOTQxYjIsIDB4MDc1ZTU3NWUsCi0JMHgwNTg3ZWFlZiwgMHgzYWZjNzFlNSwgMHg1YjhjMzg0NywgMHg3ZGYzZDdlNywgMHgxNzkyZDViNCwgMHg1ZmYwMGJlMywKLQkweGRmOTFjZmI0LCAweGNlMjhiNWQ0LCAweDA0ZmM5ZWJiLCAweDA1YzFmOGU3LCAweDVmNjdlZmQ4LCAweDYyYjU0MzZmLAotCTB4ZTQxMzkwM2EsIDB4ZWJmMGNkMjcsIDB4NDdjMDYxN2MsIDB4M2U2MTZkZTUsIDB4ZmFmZGVmZjIsIDB4ZmUxN2Q0ZDMsCi0JMHgxZjBiYWNkMywgMHgyMTQ5NjU0NCwgMHhkZTAzMzNmMiwgMHg1YzdhOGQxOCwgMHhiZjgxYTc5YiwgMHhmMTViODQyOCwKLQkweDVkZWEyYWI3LCAweDM2YmYwOGU5LCAweGZjYmIzMzdmLCAweDY5MGZjYTBlLCAweDdlNTkzN2YzLCAweDAxNjI2ZWJkLAotCTB4NGQ3OWU3ZDYsIDB4OTM3ZjlkNzQsIDB4ZjE0NWU1MDksIDB4YmI3ZTkxNDMsIDB4NjdmZmM4NDIsIDB4OGE3ZTljNDksCi0JMHg3NWY4MzU1YywgMHg3ZjA2OTc0NCwgMHhkYTA3MjliMSwgMHgyZWZlZTJmMywgMHgxZGY4YTczMCwgMHg5ZGRiNDM0NywKLQkweGQwOGYzMGRiLCAweDQ4YWVlNTcwLCAweDFjMzU1ZGFjLCAweDNiZjBjYTlmLCAweGIxNGIyZThlLCAweDc3M2UxZmE5LAotCTB4ZjRkMzBlZTUsIDB4NjhiZjAwZGMsIDB4ODkyN2I3ZGYsIDB4OWY4MGNiZWIsIDB4M2RlZWRhMTAsIDB4OWZmOWU0MjcsCi0JMHgyN2I2ZmY2NSwgMHhmZmNmY2Q1ZCwgMHgyMGZmNmQ1ZiwgMHg5NDk5ZGYwZSwgMHg0Y2Y4NzE0MCwgMHg3MWUxMjc5ZSwKLQkweDI4NmVkNmI4LCAweGY3OTk1OGZhLCAweDllZTc0MTVkLCAweGY5MmNmOGZhLCAweDkzMmYxMDM3LCAweGM5Mzc3ZTNlLAotCTB4ZGFkMmUzNDYsIDB4MWM1MWM0YTYsIDB4OWM1YTdjN2QsIDB4ZmU3M2RjY2QsIDB4Y2ViYjdhYmUsIDB4N2U3M2RiOWEsCi0JMHg3YjczOGZjNSwgMHgxODRjMDcxYywgMHgzZWY4MzhlNywgMHg4OTM0ZjczMSwgMHg3ZTJhZDVmNiwgMHg5MTI5ZGI5ZiwKLQkweDMwYWVlZTNmLCAweDAyOWM3MTc4LCAweGNmMWE3Zjk3LCAweDE4Nzc0ZWFiLCAweGMwNTJlMWJjLCAweGM3ZmM1NDNmLAotCTB4MTJlZGY3YWIsIDB4NDlmYzU3ZGQsIDB4M2JmNDZmYzUsIDB4NWE3NzFlNzksIDB4OThmZmJmMDEsIDB4MDkzMjc1YzksCi0JMHg3MGJlNDFlYiwgMHg5MjM4NWViYSwgMHg3OWNjNjc1ZiwgMHg3N2ZhMTUyMCwgMHgyNDYyNTBmZCwgMHg1NDlmYzJmZiwKLQkweDZmZWI1NGY4LCAweGZiZWI2YzVlLCAweGI3ZTRmYmI1LCAweGU0NTRmZTA4LCAweDFmMjM0MzJjLCAweDEwOGFmZDhhLAotCTB4ZmI0M2FhNzgsIDB4ZmJmNjg3MWQsIDB4YWU1Zjk1MGIsIDB4ZjdlYzE3OWQsIDB4OGU3YTI0YjksIDB4NmYwNWYzZDEsCi0JMHhlMmExOWRlOSwgMHhmZTYyOTVmMywgMHhhMGZkMjA3ZiwgMHgyZmVmZjM0ZCwgMHg5OWQzNzg0MiwgMHhmNmI5ZjY5ZiwKLQkweDg1YmI1NzY2LCAweGZkZGJkMzdmLCAweGNmMjg2Zjg4LCAweGY4OWQ4NDAzLCAweDRlNzNjOTY3LCAweDc5MGNmZmYyLAotCTB4ZjYxN2VhYmUsIDB4ZTFkZDlkZjIsIDB4YzljMWEyZTQsIDB4ZGViOTdmNDgsIDB4ZjdmMjg0NWYsIDB4ZmFjODQzNjcsCi0JMHg3ZjgxMTVmNCwgMHg3YzU1NzM4OCwgMHhhOGRkMjA3YywgMHg1ZGM4YjhjMywgMHg0ZDAzZjNjZCwgMHgyOWQ3YjZiMSwKLQkweGQzMmMzOTdlLCAweDEwMjVlYmZlLCAweGI2ZmZhMjA3LCAweGRhODViMmY4LCAweGExOTNmNDFhLCAweDMxY2NmOTlkLAotCTB4OTk5N2VhMDMsIDB4OWJmODZhZDUsIDB4Y2Y4Yjc3MzAsIDB4YTJmMmNkMmYsIDB4NGFjOTVjZGYsIDB4ZDk1NGFmMjksCi0JMHhmZGMxNmIxNiwgMHgyZDA5NGRjYywgMHgzY2FlNTEwNywgMHhiNmRiNjRkYiwgMHgwNmViZjFlMCwgMHg5ZTI2ZjE4YSwKLQkweGE1OGVhYjZmLCAweGUzNGM5M2ZkLCAweDZiZDY1NDA3LCAweDVmYjU3ZGZkLCAweDEzYzg5YjcwLCAweGZjMWZlNmY1LAotCTB4ZWI5YzNkYTEsIDB4YzkzMjQzOTUsIDB4OTdlNjFkNzksIDB4ZDhjYzYxNmUsIDB4N2I4MmY1YzYsIDB4NGRlNTM4NDUsCi0JMHhiODQzNWUzMCwgMHg3OTIxNWMzZSwgMHhhZDc3MDA0ZCwgMHhkZWExZjcxOCwgMHhhYTI3Zjk0ZiwgMHhiMzkwYzFhNywKLQkweDUxMTMxYjZkLCAweDVkNDM5OTJlLCAweGVhN2RhYTNmLCAweGRhOWJkMjJkLCAweDk3NzU5MjNhLCAweGFkNWQwYmE4LAotCTB4YjA5MzBkMWIsIDB4NjRmMTBiNWYsIDB4MzY5N2ZhMTIsIDB4M2ZjNDY0ZGIsIDB4NDdkYWE3YzAsIDB4MTcwNWY4YTYsCi0JMHhmMTQ3YmQwZiwgMHhiY2RkY2NlNywgMHg3ZWEzZDNmZSwgMHhkNzhlMzRkNCwgMHgwZDNlYzQ4ZiwgMHg3NjcyMWU2ZCwKLQkweGE5MDNjMWU2LCAweDhkZDc2YmI2LCAweDE5OGY1YWVhLCAweGUxZThhZTMwLCAweDhlZmM2ODdmLCAweGYzYWIyNjlmLAotCTB4OWU3YTk5OGMsIDB4OTM2Y2NkYzcsIDB4Y2E5Zjk4MmMsIDB4YmUxYzc4MTQsIDB4ZWFmYzgyMmUsIDB4MWY5ZjdmMzEsCi0JMHhhMTQwZmE4NywgMHgxYzI5ZjlkMywgMHg3ZTRmZTdhZiwgMHgwNDViNDQ1YSwgMHg4NGI3YWVmZSwgMHg3MGZlYmFjMywKLQkweGE5OWJmOTcyLCAweGQ5MzM2ZmJjLCAweDkxZTViOWYwLCAweGRmZjQzZGY0LCAweGJjNDQ4OWVmLCAweGRjNWEwMWZlLAotCTB4MDlkMmY5OTcsIDB4YTQ3Y2M4N2QsIDB4MWZlNWMyOTQsIDB4OTNjZmUxZWMsIDB4MmZkZTFlZDEsIDB4YjA3YWQyZjIsCi0JMHg3YzgxNTE4NywgMHg5YjM5ZjY4ZSwgMHhjMjA5YWU3OCwgMHhlZTYzY2ExNCwgMHhhNmZkZjVlNiwgMHhlYTM4ZDcxNCwKLQkweDZkOWIzMmZmLCAweDQxZDBmZjIzLCAweDgwMTdlNzc5LCAweDM0NWYzMWFmLCAweGY1OGIxNjA4LCAweDU4MjJlN2U3LAotCTB4OWE4YmQ2MDMsIDB4OTJhZjVjMTIsIDB4Njc1MmZkMWMsIDB4ZTc4MjM5NDMsIDB4ZDllNGNlYTksIDB4ODhmYjIzNjksCi0JMHhjZTdhYzMyOCwgMHgyNjQ5YjAxMCwgMHhmN2MwZDdkYSwgMHg3NDE0MGM0NywgMHgxNjM4ODE0YywgMHhjZDAwNDllYiwKLQkweDBmMzdhYzM0LCAweDIxOWQ3NTEyLCAweGYzOGY0YzExLCAweGFkNzA2ODNmLCAweDQ4ZWIxOWJmLCAweDJhZmI3YWVkLAotCTB4ZGM3YjAyMTIsIDB4ZjU5ZWE4OTQsIDB4ZWJjMWM5MjUsIDB4NDk5ZDRhZTIsIDB4NTZmNzhmYTksIDB4M2RmMDkyNjcsCi0JMHhhZjBlMWY3YywgMHg3MjdkODkyYiwgMHhmZDg5M2Q0YSwgMHhhZTQ1NDlkMCwgMHgxOWVhMjMzNSwgMHg2OTQ5YWRjNiwKLQkweDBiZWRiYmVjLCAweGY5ZTc1OWViLCAweGRhYjljNjNiLCAweGMwNDdjZjNhLCAweGExM2YzY2UzLCAweDFmYWUyYmFlLAotCTB4ZTlmMTNjZjAsIDB4MGUyN2FkYjcsIDB4YjgzNzY2NDgsIDB4YTNmMWM1ZmUsIDB4ZjYyMGJiODUsIDB4NWJjNTIyNjIsCi0JMHg2OGNmZjhmZiwgMHg5NzZkYjNiMiwgMHg3NTc2MWVjOCwgMHhlNTNmMzE4NywgMHg5ZTc4M2IxZCwgMHhlZjdmOGRiZCwKLQkweDViNzEwNWQzLCAweGJkOWQ5MDQyLCAweDdiNWJmODQzLCAweGZmODg0YWRiLCAweDIzNGJmOTc3LCAweGIwYmQ3YzcxLAotCTB4NGY4ZWViZTMsIDB4ZDNiZjEzYmIsIDB4YjRmNWY4ZjIsIDB4MWUzMTg3MmYsIDB4ZWJmMmVkODcsIDB4Yjk2ZmQxMGIsCi0JMHgyMmY5NzQ4MSwgMHhjZGZkNDQyOSwgMHg5M2VkYzExNCwgMHg0YjllOGU1NiwgMHhlN2E0ZjllNiwgMHg5NDdmMzk5MiwKLQkweDk3ZjFlNDljLCAweGEzYWYzOTdiLCAweDcwNWU4NDU4LCAweDBmNDkxOTk3LCAweDk0NGY0YzFlLCAweDUyNzlmYzk0LAotCTB4ZWVjYjNhYTgsIDB4OTUxYmIyNmUsIDB4M2ZkYTI0OGIsIDB4OTY3NWRkN2IsIDB4Yjc2MTc2ZDYsIDB4YjJlOWY5MzQsCi0JMHg3YjM3YTQzMSwgMHhkNTA3NWJjYiwgMHgzM2Y3NTVjZCwgMHhlMTNlYzQ1MiwgMHhkZDdmM2NjMSwgMHhmNWExNmM5YywKLQkweDE2ODdlYjVhLCAweGFjYTY0YmExLCAweGUxZDIwNmZmLCAweDViZjdjYTY4LCAweGYzZWFlZDY3LCAweDI3YmZjZWZkLAotCTB4ZGM5Yzg0MjEsIDB4ZmIzZmY5YzAsIDB4NDM5N2U3OWUsIDB4MzgxYmE3ZTksIDB4ZWZjNGRmN2YsIDB4ZjkzZmZmMTcsCi0JMHhmNzlmZTc5ZSwgMHg2NDY3ZTMzZCwgMHhmZmY0M2QyOCwgMHg2ZDAwM2VlYSwgMHgyZmJiNWY5ZCwgMHgwZmVmNWI0MCwKLQkweDgzYzBiYzNiLCAweDFiNGFkNmY3LCAweDlhZDA3ZGJhLCAweDk3MmM1ZmEyLCAweDYzZWI1NTQwLCAweDFkYTEzMjlmLAotCTB4ZDc5MjMwOWQsIDB4OWE5NWQ2YzEsIDB4YzBhNTViYmMsIDB4NWYwNTAwZmUsIDB4MWM3OTUzYTcsIDB4ZTBiZGM5NjEsCi0JMHg2NzNjMDM4OSwgMHg3MWE1ZmMzOCwgMHhjOTFiMjc5OCwgMHgwYWVlMGUyOCwgMHhhNjMwZjVlNywgMHhhMTRjYTRiNywKLQkweDk0OTZmNmZkLCAweDliMzdhMGE5LCAweGU5NWVmOTdhLCAweDZmNWYzMTQxLCAweGFkM2QyNDc2LCAweDIxNGE3MGU4LAotCTB4OTQzYzhlZmYsIDB4ZWEyNTk2YmYsIDB4YmU1Njk2NTIsIDB4NmRlOTk2ZGYsIDB4YmRlOTUzMjksIDB4ODdmNDE0YjYsCi0JMHhlYmYzZjY2MiwgMHhkOGU2M2VkMSwgMHhiMmQ5NzA0YSwgMHg2ODNjNTJhNiwgMHgxZWY4NDJjYiwgMHhlYjVlZjUxMSwKLQkweDk4NTlmZWI4LCAweDVmODJiNjhmLCAweDhkYzBmNTg4LCAweDc4YTQxNzU4LCAweDk0ZTM0MmQ2LCAweGMzZWNjZGY3LAotCTB4YzBjNDdkZTEsIDB4N2FkZmFjMjQsIDB4OTlmYmU2NmUsIDB4NTU0MmYzNTgsIDB4YzE4OGVmM2QsIDB4YTI0NzM5ZDcsCi0JMHhlYTI3NWU3YSwgMHg1ZjNhYTNlYiwgMHg4MjU5OTNlZSwgMHhiOWJmMDE4OSwgMHg2NzU0MmNiYiwgMHhmZmU0NmQ3YywKLQkweDViYmZjMDFlLCAweDY1YmRmNWUyLCAweDFmNjQzZTE2LCAweGM3MDBjZGM2LCAweGM0ZjkzZGIyLCAweDhlZjczM2JmLAotCTB4YzYwNTRiZmMsIDB4MWNmYzM5MWQsIDB4YTU3MTFlOTAsIDB4MTA5YzE3YzgsIDB4NWYyNTBlZjksIDB4ZGViNWQ0YTAsCi0JMHg1MzkyNzkxMSwgMHhiNjgxN2Y5OCwgMHhkMDIxZjMwMywgMHgzNzc0N2Q0YSwgMHhhMTQ5M2VkYSwgMHgxMjIzYzdlYywKLQkweDhlNzkwZmNmLCAweGJlNTBmY2YyLCAweDc4MzdkZWQxLCAweGMwYjQ2NGRmLCAweGFmMWYxY2ViLCAweDllZjkyODViLAotCTB4ZjkzZDYyZWQsIDB4NjE3ZDk2M2YsIDB4MzdlNjk3ZTAsIDB4OWRhMjM2MGUsIDB4OGY0YzZmY2YsIDB4YzM4ODc2YzAsCi0JMHhlZjEyYzNhYiwgMHg3NTNiZjk4YywgMHhmMTQyZmQwYSwgMHhlZTFmNzI1MSwgMHhkNDNiYWM4ZiwgMHgxN2JkNzU0ZCwKLQkweDk5ZmU3NTM0LCAweGZmNzQ4YzdkLCAweDk5YzdlMGI4LCAweDk3ZjUxODdkLCAweDQxYWZkM2Y1LCAweDk0NjYzMWY3LAotCTB4NGY1NTBlNDUsIDB4MThiODg0YWEsIDB4YzRkMzljZTEsIDB4NWRmMDU2ZTEsIDB4ZTA5NWIzZTksIDB4ZTgxZjRlN2IsCi0JMHhhZjM2YzQ2ZSwgMHhmMjg0YWIzYSwgMHgxYTE3MzVlZCwgMHg1ZjczN2ZkMSwgMHg3NmYwNzRiOSwgMHg2ZDE5OTdjYSwKLQkweGVhY2M0ZjE4LCAweDJlZGRlNzUwLCAweDk2ZmRmMmE1LCAweDdiZmM0ODJmLCAweDNkNThjZjRjLCAweDYzZjljN2M1LAotCTB4ZDYzZmM0ZjUsIDB4NWY4YTcwY2EsIDB4OWIyNjA2YWQsIDB4ZmI4NTNmYjEsIDB4ZjE2NTc5NDUsIDB4ZDM2N2Q4MjUsCi0JMHhjYzFmYzk2MiwgMHg1ZDhiNjQzYiwgMHg4M2M4MWI5MCwgMHg0ZjJlYzc1OSwgMHhhYjVkM2M0MCwgMHhkM2U0YWFiZSwKLQkweDQ2MzkzMzFlLCAweDZkYmYzZDIyLCAweGM4ZjZiNTdkLCAweGFhNTdkYTcxLCAweDhiYzE0YmFjLCAweGFkZWQyNzUyLAotCTB4NzNlY2FhYmUsIDB4YWE3ZDk3NzAsIDB4ZDZlMTk3ZGEsIDB4ZmNjMThmNzcsIDB4ZDM5ZWZlNjMsIDB4ZDJjZmIxNDYsCi0JMHhhODE1OWM5MiwgMHhiZWVmZTZiZiwgMHhhNTU3NzU0MCwgMHhiZmFlZWFjZSwgMHgzYzM1N2U0MCwgMHhlNDkwZTc0NywKLQkweDQwNTNmOTAzLCAweGM5NWFlZTRmLCAweDAyMmZhZmViLCAweGMyYjZkODNjLCAweGQ3MDAxZGZhLCAweDZjN2ViMGNiLAotCTB4NzhmZDYwZGIsIDB4MDM5NTk1ZmQsIDB4YjRhZGY1YTgsIDB4ZTU3N2JiNTMsIDB4NmRkZDZhMDgsIDB4ZWI1ZWE4MTcsCi0JMHg3ZjYzZDNlYSwgMHgxZWYzZDUyNCwgMHhmYWYzOWQ5NywgMHg1MjQ3ZjdhOCwgMHg5M2VmNWI1ZiwgMHhjNmJlNzgyMywKLQkweGRmNDBjODdkLCAweDk4OGZiODJiLCAweGI1MTc3ZjQ4LCAweGY4YzRjOWNkLCAweGFlNjNmM2UwLCAweDBlYmI4NDRjLAotCTB4N2M0MTZkZWIsIDB4MGY2MWRlNzEsIDB4Y2UzMTczYzcsIDB4NThlMWVkM2IsIDB4M2Y2ZmNiNjcsIDB4MmZmZGM0NmIsCi0JMHgxMWJmN2E3NSwgMHg3MTAwNjFmMywgMHg3NDRkNmUyYSwgMHhmN2MwYmFlZiwgMHg4NTE1YjZmNywgMHg1OWFmN2UyMywKLQkweGZmZmQ2YjE3LCAweDUzNmZiMTc1LCAweDIwMmFmYjE3LCAweGYyNDdhNDlmLCAweDU2YzczYTljLCAweGMyMzkwZjZjLAotCTB4ODllOTA0MTcsIDB4NGY1ZTRlNzUsIDB4NGQ5Mzk3NTksIDB4OTljOWI4NzIsIDB4NjgzZjNiMWQsIDB4OWUzMjg2YmUsCi0JMHhjZDhlYjBiZiwgMHgzZWJlMGYwOSwgMHhmMzQwY2QzNSwgMHhhMDljZjE1YiwgMHgxNTZmZWYxMCwgMHhlYTA2ZWNmYSwKLQkweDIxM2VkNmVkLCAweDQ3ZjNiNmZjLCAweDQ4ZGRmNDRkLCAweDk5ODVlZWZiLCAweGVhNWZjNDFkLCAweGIyYmFkYzdjLAotCTB4ZmRmODk5ZjksIDB4MTg0NGU3YmQsIDB4NzVmM2M3ZWIsIDB4ZDMxYzdjYWEsIDB4Y2I3YWUzZDQsIDB4ZDMyY2NkY2IsCi0JMHhjZTI5YzIzOSwgMHhiYjQwY2VlYSwgMHgzMTliY2RhZCwgMHhiNzA2Nzc3ZCwgMHg3ZTU0OGVlYiwgMHg5NTI3ODM1ZSwKLQkweGVhM2Q2MDhkLCAweGRlNjU3ZjcyLCAweGZjNjA3MmI3LCAweGQ5MWQzMjhjLCAweDk3M2VhNTBiLCAweDJiNjdhNjU3LAotCTB4NTZmMzNmODEsIDB4OTc1NGJjMTgsIDB4YTY5ZmQzMmIsIDB4NmM2ZTIyZmIsIDB4MjJhNWU0YjAsIDB4NjIzYTlmOWYsCi0JMHg1N2RhODRiNCwgMHhhYTdiMmY2ZCwgMHhiNzllMWIyOSwgMHg1Yzc2NDhkNywgMHg3N2VhYjVkNiwgMHhhM2VkYWQ5NSwKLQkweDE2ZmQ2OTUzLCAweGYxMjRlNTE5LCAweDUzZWZhMzIwLCAweGY4ZjNkNjdiLCAweGQ2M2NlZjdlLCAweGUzMGE1NGRjLAotCTB4ODJjZThlNTgsIDB4Njc5YjUxZjYsIDB4YmY0MzNlNDMsIDB4ZWY4NzliNDQsIDB4NGJiYmY2MTIsIDB4NDhjMWNmZDgsCi0JMHg4ZjljMDRkYiwgMHg3M2NhNGJmYiwgMHg0ZDI5ZmU1YSwgMHhhZjM2YmU5NSwgMHhmZGNhOTA1ZiwgMHhiY2IyODZhYSwKLQkweGRmNDgzOTc1LCAweGY2ODYzYTA5LCAweGQ4YWNhMWE0LCAweDlmMzQxMzk0LCAweGUzNGY1NTJlLCAweDYwZmFjMTFlLAotCTB4OTA3ZDcwN2MsIDB4NzViNTAxZDcsIDB4ZTVjZjQ1NDEsIDB4MDYzMTdmYjcsIDB4ZjQwOWJkZjEsIDB4NzczMWRhMzUsCi0JMHhlNDFmYWYzMiwgMHgwODc0NTJiZiwgMHg0ZTAwNDZmNSwgMHhjOTRkYmViZSwgMHg4ZWI3YmY1NywgMHgwYzVkN2M2NSwKLQkweGY2NzljYmY3LCAweGNiOWY5NDQ4LCAweGRlZTlmMDliLCAweDEzOWZjNDQ4LCAweGI1ZWExZWVjLCAweGNjNmIzOTIzLAotCTB4ZTgyNjhmYTgsIDB4MWRmYmYxMGIsIDB4NWFiYTUzYjcsIDB4ZDI3YWMyNjcsIDB4OGY1N2FmOWQsIDB4ZjIwOWVmYzMsCi0JMHg4NjNkMGZhNywgMHg2MTVlOWY3OCwgMHg3NzgwZmRhMCwgMHgwNjNlNWViZSwgMHgyZmY2MmJhZiwgMHhkNWQ2ZmE3ZiwKLQkweDgwN2Y3ODExLCAweGUxYjcwZjY0LCAweGJjNjJiMmZkLCAweDBmODc3ZTNmLCAweDIyNmNlOTMzLCAweGRjZmEwNzQyLAotCTB4OGY1M2E0N2YsIDB4Yzk5OGYzNzIsIDB4ZjAwYTlkOTUsIDB4NzUxMTRmZTYsIDB4YTc2ZTBhYTYsIDB4MzE0ZGI3YTcsCi0JMHhhYTRmZWUzMCwgMHhmNGJlZTZlYywgMHg3NDFmMjljZiwgMHhlYTlmMmRhOSwgMHhlZmI4NzE0NywgMHhhZjYwMzcyMSwKLQkweDFkODBmN2YyLCAweGIxZDgwYThiLCAweDRhYmY2YWVmLCAweGNmODQyZDUzLCAweDIxOGVjMDViLCAweGJjMjlkNjNjLAotCTB4YmZhNWFmM2UsIDB4MzdiZmQwNGUsIDB4MWU5YmQ0YmIsIDB4ZTc4M2ZiNDYsIDB4NGE3Y2EwYTgsIDB4YjhlZDNkYzksCi0JMHhjMzNlZjMwZCwgMHhmMDk3NWZkMSwgMHhmOTVlOTU5MCwgMHg2ZmQwYTk2ZiwgMHg3M2Y4YmRiMSwgMHg3YWY4MGFmNywKLQkweGZhZDUzN2RkLCAweDJkMzNhOWNmLCAweDUyMWZmZDRkLCAweDk3ZjExMjY3LCAweGUyNTI2ZjUyLCAweDllMDRkN2I1LAotCTB4YTE3NWY2OTUsIDB4NzdmM2JlMzcsIDB4NDM1YzY4MGMsIDB4MGQ2MGM3N2UsIDB4YWNjMzFkZmQsIDB4NDQ4NzNhMTYsCi0JMHg4MGUxOGVmOSwgMHg4Y2VkMTU5MSwgMHhlMmIzZmRjNywgMHg5M2FmMjZiYiwgMHg4ZjAzYTRmYywgMHgzN2YxYjVmZCwKLQkweDkzNWRmOGYxLCAweDgwNjcyNzg0LCAweDc2NDYzYzNkLCAweGFlOGYzOTVlLCAweDllNjNlZGFlLCAweGZiZTE2ZDZmLAotCTB4NDM1YjZiYzAsIDB4OTkxMmViOWYsIDB4Mjk3YmVkYzYsIDB4MzNlYTg3YWMsIDB4OThlZDdmNjIsIDB4ZTQ0ZWEyNWQsCi0JMHg1OTZkN2EzMCwgMHg0ZmJjYjc5OCwgMHg3NGI3OWMxZiwgMHhjYTA5ZmNkYiwgMHhjNTJmNWRiZSwgMHg2NjNjZWE3YiwKLQkweDNhY2I3OTZmLCAweDZhZmMzYmU1LCAweGQxZGY4ZWM5LCAweGQzMWU3NzVjLCAweDdlZTFmN2MxLCAweDRiZTYzY2RiLAotCTB4Y2UzYWVhYTksIDB4YWQwYjE0ODEsIDB4ZDEyNWRjYmYsIDB4OWQyNjRjYjksIDB4ZTdmNjg2YjMsIDB4NDI1OTIyYmYsCi0JMHg5YTNlZWJlZCwgMHhiYzc1ZTVjYSwgMHg2ZDNjODNhOCwgMHhmNGYxZmNlNCwgMHg4YmVkMTJhZCwgMHg5MGVkZWZjNywKLQkweGMyYmY0ZmVlLCAweDNhNzliN2JmLCAweGEzNmY3ZjhmLCAweGVmOTQzZGQ0LCAweGQ0MGU2ZTY4LCAweDNiM2JlODNkLAotCTB4ZTUxYmZiZTUsIDB4ZmJlNTFhN2IsIDB4MjM5YjI5Y2QsIDB4MDdlMjNjZTgsIDB4ZGNjOTJkMGQsIDB4NWYxMGY1ZWYsCi0JMHhmNjFlMmJmZSwgMHgzMGQwZjU4MCwgMHg1ZTRhMWY1NiwgMHhmZDE2YTc3NywgMHhiYjhkMmE2YiwgMHg0NzZmNzFlMSwKLQkweDI5ZmYwODZhLCAweDc4NDhlMzA5LCAweDVlZDQ5OWNmLCAweGE5YjM4NWUzLCAweGZhODE3OGVhLCAweDQ2ZTE3OGRhLAotCTB4NGJlZTNkZDUsIDB4ZGQ3YTM3NjUsIDB4OGRmOTQyMDMsIDB4MmRmZTcwMzcsIDB4OWJmY2YzZGYsIDB4NGQ2ZGQxNDMsCi0JMHgxNWYzZTg3OCwgMHgxZDQ0ZDMyYiwgMHgzODBlNzM1ZCwgMHgyNDVkZjFlYiwgMHg5MjRkZWJiNywgMHg1MWI3MmZlZCwKLQkweGY1NDBkZDNkLCAweDM2YWY0NTc0LCAweDczZjlmMTQ1LCAweDdiNGE3Y2M1LCAweGIzZDcxYTQ3LCAweGY5ZDA4NjRkLAotCTB4ZGM2MmE5YjIsIDB4MjgzMWQ5NDYsIDB4Y2Y0MWRhMGQsIDB4ODM5N2YzYTgsIDB4Y2JmOWQ0NWIsIDB4ZTdkNTVhNWIsCi0JMHhhOWY1MGM4NSwgMHgzZmM5MDNjZiwgMHhhNjFmM2VhNCwgMHgxZjNlYWZkMCwgMHhmNTA5Zjg2NiwgMHgzYjIzMzBmOSwKLQkweGRjYzNlN2Q0LCAweDdjZmFhMWY2LCAweGFiNzQxZjk4LCAweDVmYjc5N2YzLCAweDVlZjlhYTllLCAweDc3Y2ZjYmQzLAotCTB4N2UwZGNlMDIsIDB4NGYzNGM0YWUsIDB4NGU4ZDJlNzMsIDB4ODQ0ZDJlNzMsIDB4Y2QxYTVjZTYsIDB4ZGU2MjI4MzksCi0JMHhjZDFmNGYyYywgMHhmNWVhMzRmOSwgMHg5NzFlYjE1OSwgMHhiOGY1ZmQ3YiwgMHg0NGQ4ZmE2NywgMHgzODZmYWUzZCwKLQkweDU5NDhmNzNlLCAweDZkZmEzODRlLCAweGZmZDM3N2NhLCAweDk3Y2NmODIxLCAweGY0OGI5YWU2LCAweDViMWVhZDcxLAotCTB4YjFkNTdjODcsIDB4ZjMwMzJjMmEsIDB4MjlkNWFlMmUsIDB4ODNmMDNjNzIsIDB4YmU4OTIxZWIsIDB4OWQ1ZTJmOWIsCi0JMHhlNjdiZmI0MiwgMHgzZjI1MGMzNSwgMHhjODM5OGYyOSwgMHg2MzhjYWE0ZiwgMHg1ODczY2YyMSwgMHhkNmY1YzY5ZiwKLQkweDMzMDM3YWRjLCAweDZjY2JlMGM2LCAweGQwYTgxZDQ2LCAweDViMTI0ZDczLCAweDc5OGRlZGNmLCAweDM1NjFmMDIyLAotCTB4YmI1ODdjZTMsIDB4ZDUzNDU4ZWUsIDB4NTlkZDg1YmQsIDB4YWFjMTUxYzQsIDB4YjlkMjE3ZWIsIDB4NWQ3M2RhMGQsCi0JMHgzMThiNTg2YSwgMHhiYzU5ZTYwNSwgMHg0MWU0OWRhMSwgMHg2MjhiY2U3YiwgMHg5ZTYyZGM4NywgMHg3ZGY1MTZkYSwKLQkweDgxNzBkYjM3LCAweDFkNjc4OWNlLCAweGVlMzNiNDQ2LCAweDg2ZmRmNTU2LCAweGIzMmY1MTM0LCAweDhkY2EzYjMzLAotCTB4MTMyOGJlZWIsIDB4MDJjNTk3ZmEsIDB4NDgzNjczMmYsIDB4Y2UwZmFjMTYsIDB4Yjg0ZjY4NmIsIDB4MGVmM2ZhMGIsCi0JMHgyOTZmMTRjOSwgMHhjZTNkNjE3OCwgMHg3M2E1YzllMSwgMHhlYTFlMmZkMiwgMHg0NWYzZmU0NywgMHhjNzA5MmQ5YiwKLQkweGJjNzlhMmI5LCAweGMzNWRlOTIwLCAweDljNjU3YWYxLCAweDVmOWUzODZiLCAweDBhMzI3ZGQ2LCAweGE3NjFmMWJmLAotCTB4NWZjOGViMmYsIDB4MDg2ODFmMDAsIDB4MzYxNjZkZjksIDB4M2JjZjM4MjQsIDB4YzQ0OTYwYzcsIDB4ZGQ4NzhiM2MsCi0JMHhhNjcxNGM5MywgMHg3NTk1N2I4OCwgMHhjNzEwNGRiYiwgMHhlMjFmNjM0NiwgMHhlOTNlYmU1NCwgMHg0NmU4ODkyYiwKLQkweGZjMWJhZDI2LCAweGY4MGY3YzIyLCAweDlhYzcxNDNmLCAweGZhMTU2OTk4LCAweGNkNmQ2NzNmLCAweDNhZmFlODg5LAotCTB4NWY5MDMwMWYsIDB4MmM0Nzc3MzEsIDB4MWI3MzE1ZjksIDB4ZmU3ODhjNGEsIDB4YjE1ZGRjYzEsIDB4Nzk5NjdmYjQsCi0JMHhhZTMxYzcxYywgMHhiYTc4ZTg1NSwgMHgzMjYwZmYyMSwgMHgyNWI3M2JjYywgMHhlOWFiMmVjYiwgMHgxNzEzOGFhNywKLQkweGU4NTY5ZDM3LCAweGJhMGQ3OWQ2LCAweDFiYTI4Njc1LCAweGZkNzU0YmQwLCAweDE3ZTEzNGU1LCAweGZiYjE3YTA4LAotCTB4YmRmYmU4ZTMsIDB4ZmEwN2E1OGEsIDB4NjJlZmJlNjEsIDB4MGVmZDM4N2QsIDB4YzAzOGNmNDUsIDB4NWE2NGY1YzMsCi0JMHgyOWRlMmFiYywgMHg4ZTM1NzNlYiwgMHgyZmJhNzNhMywgMHhiYTI0Mjg2ZCwgMHhmNjU1ZTk2OSwgMHhlMzg2ZjNkZiwKLQkweGFmZWM1NWY3LCAweDhkZmQwYzUxLCAweGY2NmNiZWNhLCAweDViM2ViODU0LCAweGI5NTVmMmUyLCAweGZhMTk2YzY2LAotCTB4N2QwYTZmMzksIDB4OGI4OGJhZjgsIDB4MDQ1YzYxOGUsIDB4MTg5YmZjN2UsIDB4MmRmZjQxMTcsIDB4MDVmZDE3MTEsCi0JMHg0ZjY4MjJlMywgMHg2ZDA0NWM2MiwgMHg0ZmZmMzhhNywgMHgwMDYwMzM5MSwgMHg0MjkzZDdlMiwgMHhkNTVlNGViZSwKLQkweDMxOTNjYmYzLCAweGRmZjY1NjlmLCAweDgwZWExNjZmLCAweGI1M2MxMmU3LCAweDMzYTc0NjkzLCAweGY2YTFkOTM2LAotCTB4YTlhN2NiYTcsIDB4ODMwZWU5ZmQsIDB4ZWQzMjRjNjUsIDB4ODFmNWUyNmIsIDB4NTRkYmNlYjksIDB4NjZkZTk5ZTMsCi0JMHgxYjA3M2NjNCwgMHg0ZWI4MWY5MCwgMHhjNDY2YzdmNiwgMHgwOThjYzczYywgMHgzZmYxYWE3MSwgMHhmNTU1NGE2YywKLQkweDBjNWZhMDJmLCAweGViMjk0ZGYwLCAweDc3N2ViYWFiLCAweDdmNTUyMGM1LCAweDQyNDA2NWNlLCAweDk1YWY3MjNlLAotCTB4ZTIyY2U3OWYsIDB4Mjc5NGNhMjQsIDB4OWYwZGVhMDYsIDB4ZmE0ZjBmZDYsIDB4ZTlmYmMwMTEsIDB4ZDdkZDAzMTEsCi0JMHhlYmExNDNkMiwgMHhjYTNhY2RmYywgMHgwY2RiY2VkZiwgMHgzYjc5ODM2YiwgMHg1YzkxZTc5YiwgMHg4YTIyN2M3ZCwKLQkweGRjNjk4N2NlLCAweDA4ZGFmZjkxLCAweDYxZGU5ZmU4LCAweGE3NjRmZGEwLCAweGMyMWVlMjFiLCAweGVmNGZhYWYzLAotCTB4ZWZjNjg4NDgsIDB4MzI4ZDVjZjIsIDB4YjU5ZTkxZjMsIDB4ZTY1NTllOTAsIDB4NDU1ODY5MmQsIDB4YzczMDdmYmYsCi0JMHhmOTQ3NjYxYiwgMHhmM2RmYjM5ZiwgMHhmZGM3ZDJiOCwgMHgwNjQ1YjQwMSwgMHhlY2I4ZTNlNSwgMHgzZjQ0NDlmNSwKLQkweDdiNzdlMTA3LCAweDNmYzVlNTM4LCAweDA1OGYzMDM0LCAweDFkNzljYmZjLCAweDI1MGZhZTFjLCAweGIzZmQ4MGQ2LAotCTB4ZmZmNGVmZTEsIDB4NmU3MWMwMTEsIDB4MGU5NTczNjIsIDB4NDhmOTI4ZmQsIDB4ZTdjYmU5MDIsIDB4NWI3Yzg2NjUsCi0JMHhlNzQwZDRiMSwgMHg0YjdhMmYwOSwgMHgyNjdkOGFkZSwgMHg3YTcyYTVlNSwgMHgxZDNiZjRjYiwgMHhjZDE4N2I2YywKLQkweDQzODFiYWNmLCAweGRmZjJkYzYwLCAweDVlYjkzZDg0LCAweGZmYThiOWU0LCAweGY1ZGVjMWZiLCAweDhmOTEzZjgyLAotCTB4OGU2NThjM2UsIDB4ZTc5NjAyNTgsIDB4OTYzYTNlMWIsIDB4MDA5ZTc1NDAsIDB4NzA0M2JkM2UsIDB4M2JkNGJmZGQsCi0JMHhiZDgzYTVmYiwgMHgzYmNhYThmYSwgMHhmZGRhZjQ4NCwgMHg1YTU3MjQwOSwgMHhiOTFhNzdiYywgMHgxY2EwZjJkZSwKLQkweDE5N2QwMTQ4LCAweDlkZmUzMzkwLCAweDNkODMzY2Q1LCAweGFhZmE0ZWQxLCAweDU1ZjUwNTIwLCAweGU1MDMwNmU3LAotCTB4MTFkZTk5MTUsIDB4Y2Y3MGViY2QsIDB4ZWYyYjFmMTMsIDB4YzZkYmQ0ZTksIDB4NGQ5ZDdjMjAsIDB4ZTExZGY0NTksCi0JMHhkOTMyMGRkYywgMHgzZTNmZTQzYiwgMHhlYmUzY2JkZSwgMHhlMzBiYjI4ZCwgMHhlNDkzNGY3NSwgMHhjYjVkNzhjMiwKLQkweDBlOTZjYjM3LCAweDk4MTVkZmE3LCAweGQ5MTkzODg1LCAweDRmOWMwZjUzLCAweGE1MDc3NWUxLCAweDNmMGY3OGJmLAotCTB4NzQxNTlmZDcsIDB4MGUwZGE3ZTgsIDB4N2YwMzQ3NWUsIDB4NWY5ZjMyNWYsIDB4MjZiYzc3MzksIDB4ZjBhNzRmZmIsCi0JMHg4NzhiYTY2OCwgMHhmN2UwYzZmYSwgMHhjYjhmNjczOCwgMHhiMzY3NjdjNCwgMHgwMzI1ODc5YiwgMHhlZGQxM2YzZCwKLQkweGU4MjNmNjFkLCAweDczZDEzYzdmLCAweDcwZmQ4ZjQ2LCAweGViYzQ1NGQ3LCAweDBjODZkZDEyLCAweGFiYmExZWZjLAotCTB4NmU4N2JkZWQsIDB4N2EzZWU3ODMsIDB4MzEyNzYwZDYsIDB4ZmE0MDkxNWYsIDB4NDVmNmYxNjMsIDB4N2RmNzVmOTksCi0JMHgzZWYwNTgxMCwgMHg0OGU4Y2YzYywgMHg0YjlmMDA5MSwgMHgzMDYzMmQ2YywgMHgzOTgwYjA3ZiwgMHhmOGUyMWQ4NSwKLQkweDc5ZTBlZGIxLCAweDllMjZjYjBjLCAweDMwYWY3OGQ3LCAweDY3ZWUzZDZhLCAweDViYzlhNzliLCAweDEzYmUyN2JjLAotCTB4YTkyZTkwNWMsIDB4YTJlZDg0ZmMsIDB4ZjljNzRmM2YsIDB4ZjNjNzNkOWIsIDB4ZDJhN2YwNTksIDB4ZmJmMTZlZmYsCi0JMHg1N2RlOGExZSwgMHg2YjBkNzVmNCwgMHg3ZmE5ZjNhNiwgMHhmMDRkOWU5NCwgMHgzNGJjOTIyYywgMHg5YTRmMGVhZSwKLQkweDY1NTUxNTA2LCAweGNkNmFmMWUxLCAweDhhNWU2MTMzLCAweGU5NjA2ZDQ3LCAweGRkODBmYzgyLCAweDZlN2EzNmU5LAotCTB4NDdkOWYxYjEsIDB4MzIxNzZkOTEsIDB4NjY5ZjVmM2YsIDB4NmYwNjQ3ZGMsIDB4YTdhYjNmOTUsIDB4NmNiMmE5YmQsCi0JMHhmY2QyYjA2ZCwgMHg1N2VlM2IwNiwgMHhiNGU0Mjg1YywgMHhmYWYyNTliNiwgMHg2ZWM4M2FmOCwgMHgyY2YzMTAyZSwKLQkweDZiNTM3NjEwLCAweDIzZDg3YTlmLCAweGEwNWExZDhkLCAweDU5YWNiM2IxLCAweDVlMDE1NzZkLCAweDgxNWI5NzNhLAotCTB4MzNhNzBiNTcsIDB4YjBmMDhhMzIsIDB4Y2Y5Zjk5YjgsIDB4MWVmMmU1NTEsIDB4NGI3MDQ0OWMsIDB4MGY2NGEwNzYsCi0JMHg2NzMyMTY3OCwgMHhlM2FlMmM2OSwgMHg2YjhmMWUxOSwgMHhhYmFlZDNlMSwgMHg5ZDYyYmMwNywgMHhlY2FiYjg1YSwKLQkweDAxNzI3YzE3LCAweGRhMGEzZGZmLCAweDg3NTlhOWRmLCAweGJmYWQwZjQyLCAweGNhYTVkMGE2LCAweGQ1NWJmMWMzLAotCTB4ZGYzZDExMjYsIDB4MzIwN2VhYmYsIDB4ZjBhYTA3ZGEsIDB4ZmY4MTZiMGIsIDB4NGU3NzllYTksIDB4NzBiNjdkNDIsCi0JMHhhY2RmZTgxMywgMHhmYzI4ZmYwMCwgMHg0NGI1OThiNCwgMHgzMWQ0YmYyMywgMHhkNDk2MjM1ZiwgMHg3ZTVhZmFjZiwKLQkweGNmMGIzMjM4LCAweGU3NDYzYTY1LCAweDdkNTg1NTQ3LCAweDgwYjE3NGZkLCAweDFmZGZjZjQyLCAweDgwNDFmYjJhLAotCTB4YmU3OGI1YWYsIDB4MTdhZjVkMTYsIDB4MTFkNDRjNmYsIDB4ZDNjMDM5ZTgsIDB4ZmE2NGE3ODIsIDB4OWM2ODI3YWUsCi0JMHgyNDNkN2Y4OCwgMHg4ZjFlZDU0ZiwgMHhkNWNiZWIxMSwgMHhkYzNlN2U3YSwgMHhlYjc0ZTBiNSwgMHg1ZDI5ZWZmOSwKLQkweGZjNWVkZTEzLCAweGY3MGFlZmE0LCAweGY5YmRlOTA3LCAweDQyNjJmZDU5LCAweDlkNjUyOWU5LCAweDcyYmQwOGVmLAotCTB4YjdhZWZiNGQsIDB4YmVjOGM1ZGYsIDB4OGY5ODQ4MjcsIDB4NTc1ZjRkZTksIDB4MDBiZWJiMDksIDB4NjdiNDNjZWQsCi0JMHhlNzQwYmYzNiwgMHhlOWJmYmUyZSwgMHhkNTVmM2EwNSwgMHhkYTAyZWNmOCwgMHhmMzY2NzA5NywgMHhmN2YwODdiYywKLQkweDk4ZWNjZTIzLCAweGUxN2Q3NjQ3LCAweDc3NWQ4YTYzLCAweDg1ZmQ4MzE5LCAweDllNzNjZDkyLCAweGFmYzg1ZmY4LAotCTB4ZGQ1Mzg0Y2YsIDB4NGJiZjZhYjgsIDB4NDdhMDM5YzQsIDB4MzM2ZDljNjEsIDB4MTM2YzliZDcsIDB4ZDEwYmEzZDcsCi0JMHhmZDkyZTVmZSwgMHhkZGM3MDliYiwgMHgwOWJhZTU1NywgMHgzYWU4M2VmOSwgMHhlNmZiYzVkOSwgMHgwN2I3N2ViOSwKLQkweGI3ZWZiZGU2LCAweDJkMGY3NjkxLCAweDc5ZTNlMmQ5LCAweGVkMGY4YjY3LCAweDdmM2RlZDVmLCAweDBiYmY0NTM5LAotCTB4ZWI3OTFmMjUsIDB4ODdiZDhhYzcsIDB4NTc3YWVkZWUsIDB4OTdjYTA2NDIsIDB4ZjJiNWYzYjAsIDB4ZmEwYjBjZDYsCi0JMHhmYzJlYzIwNSwgMHgxNzNkZjFiMywgMHgxNGZlNGRmMSwgMHg0ZGJiZjdjNywgMHg2ZGVmY2YxYywgMHhkYzZmNzhlMCwKLQkweGQzZTI5N2QxLCAweDkyZmE5Yjc3LCAweDhlZWVmNTFmLCAweGY5ZWY4NDdlLCAweGU0ZGYwMWViLCAweDdlZDRkYjQ3LAotCTB4MWJlMDEzNTQsIDB4MzdjNDA0ZTMsIDB4YmY3NzM1YzAsIDB4Y2VkYmUwNGQsIDB4ZjFjNGRkZjEsIDB4NzZmMDM2Y2MsCi0JMHg3YWJjMGY3ZSwgMHhmYmY0ZmNlOCwgMHg4ZWNjM2RmZSwgMHhlMTg3YzE3ZSwgMHgzZTk3ZjIzZSwgMHg5OWQzMjlkYywKLQkweGE1OWY4YTY3LCAweGIxOWYzOWY4LCAweDFmZDFjN2U2LCAweGE4YmRmMDUzLCAweGVhMDg3ZmJmLCAweDdmOGQ4YTk3LAotCTB4MmZiYzQ2OGEsIDB4MjM5M2M5ZGEsIDB4MWNjZGYwM2QsIDB4MDc2ZmU4NDksIDB4MmZkNTdmZGUsIDB4MDg0OGNiMmEsCi0JMHgyMWJlOGJmMiwgMHg5Mzk4ZWE1ZCwgMHhlMWQ3MjNmNiwgMHg4MjQzNjQ3OSwgMHhiZjJiM2RmNiwgMHhlN2RkYTY1YiwKLQkweGM4ZjllMzZjLCAweDk5Mzc2NjMwLCAweGVkMzQ5ZTEwLCAweDE4YjlhZmVmLCAweGJjZmU3YmVlLCAweGY3NTk4NWRmLAotCTB4YWI3NzFjOTAsIDB4MTI2MzRmN2UsIDB4OWNmMDE5ZjMsIDB4ZDEyMmQ2MDIsIDB4ZTVkYTk2N2UsIDB4MTg4YmEzNGIsCi0JMHg0ZjVhM2Y5ZSwgMHhlMGNkYWM3MCwgMHhiYzJiYmQ3NiwgMHhiMmZjODMzYiwgMHhlZjFjNjEzZCwgMHhmM2FhZjE5ZCwKLQkweDZmZGQyNzg5LCAweGI0NTdmOThmLCAweGY5Zjg0N2ZiLCAweDc2M2M5M2M0LCAweDFhNGU2N2NhLCAweDJhYjkzNDMxLAotCTB4MmUwYmFlODgsIDB4YWI4OTczZjMsIDB4ZjJlNjAzMmUsIDB4YzZmZGY3ZjEsIDB4MDU4N2JlZDIsIDB4Y2VhODUzY2QsCi0JMHg0OTZkMDU1ZiwgMHhiZTVlZjhmMCwgMHhjMTliNWJiZiwgMHhiODUzOWJlMywgMHg5NzNjM2NhNiwgMHg5ZDdlZmM0OSwKLQkweGVhOGQxNzM4LCAweDUzOWI4MGI0LCAweDM3M2E0ZWUxLCAweGM5ODI1NGVmLCAweDhiYmFjZmNlLCAweGVmZmRmM2ExLAotCTB4YTY3MDdhMTYsIDB4MTNlZDIwZjksIDB4Y2MzYzc5ODcsIDB4YmZkNmU3OGEsIDB4YWIwMTQwNjksIDB4OGIzYzc1MzAsCi0JMHhlNGVjZjAyMSwgMHhlOTM1ZWVmNywgMHg4MzdmNmI3MCwgMHg3NzczZTQ0NSwgMHgxM2Q3MTU3ZCwgMHhkNTFkMDA5ZSwKLQkweDIzYjliOWU3LCAweDlhM2ZlNzQyLCAweDg3MjU1ZTA1LCAweDYxMGNlYTgzLCAweGJjMDQ3NzMwLCAweDM2MTllN2ZmLAotCTB4NmZlYzVkN2UsIDB4OWU4MDViNjcsIDB4ODVjZjNkNTEsIDB4MGYzM2FlNTMsIDB4YTZiNjBmM2YsIDB4MmI3ZGZlMTgsCi0JMHg3YTg0OGNlMywgMHhmYWE5ZDY0MywgMHg3ZjdlNDYzNSwgMHhjOWM0YzY3YiwgMHhmNjMxNDY5YiwgMHhmN2FjMDMwNiwKLQkweGYxOTRiZjQ1LCAweDhjNGU3ZjM4LCAweDRkNzVmNzE3LCAweGFjYTM3M2M2LCAweGFmODllYWQ4LCAweDQ3OTllYWE2LAotCTB4MzMyNmRiYzcsIDB4NzljNDNiZDYsIDB4ZmUwNDkzNTEsIDB4YmU2MDhmYTYsIDB4ZGY3ZGUwMTgsIDB4ODliOWY1NjEsCi0JMHhiZTc0Zjk3NywgMHg5M2FmMDA5YiwgMHgyMWJhNWNmMSwgMHhjZDljZmU3OCwgMHgzOGY3ODE2MCwgMHg4YzNjYTRjYiwKLQkweDdmNTY2YTRmLCAweDY0Zjc3ODMzLCAweDk0ZGU0Zjk0LCAweDhlOWQ3ZDA2LCAweDllNjNmOWMzLCAweGY5ODk5ODhmLAotCTB4MmNjM2MwNzksIDB4ZTcyZmRiM2QsIDB4NWUyMzdhNzEsIDB4ZWQxYjU2ZGMsIDB4MmE1ZWU4ZjMsIDB4MjUxNDdlZDEsCi0JMHg3YmQwYWYyZiwgMHg0ZjJmMjA2OCwgMHhlMDI5OWM3NCwgMHhhMjlhNzk4MywgMHg2ODYzNzlmMSwgMHg1MGNlMWQ3YSwKLQkweDhhMTZlOGUyLCAweGY5MDg5N2FmLCAweGU1YzhhMjVjLCAweDllNWNiNTBlLCAweDdlODIzYTQ1LCAweGM4ODkzZGM2LAotCTB4MGI0NTMzNTcsIDB4NmJmOWE0ZWIsIDB4NzM5NDdiYzQsIDB4ZjA2NGNmZDMsIDB4MGM5OWU5N2MsIDB4ZmUzODdmNWUsCi0JMHhjY2M3ZGYyZCwgMHg0NTQ2OWNmYywgMHhmOGMzNmIzZSwgMHgyN2ZiY2FmYywgMHhjMzMzYjY4YiwgMHhmMDJiZjM0YSwKLQkweDFmZjFmMzY4LCAweDdlNDM1OTZjLCAweGNjYjdmNTUyLCAweDFiZTkwN2M3LCAweGM2NDk3YmFhLCAweDdhODhmOWVlLAotCTB4NDljMjVmZTksIDB4NWIxYTY2ZWUsIDB4N2I5YmQ1ZmEsIDB4MWRjZTUzOGUsIDB4MDM3ZTYwYWMsIDB4NTUzMDBmYWYsCi0JMHg2Y2I0NzQxZCwgMHgyYjJjNzNhNiwgMHg5YWZiZmUyNCwgMHgxZTUxNDU1ZCwgMHg2YmU2MGM1ZCwgMHg4YWRhNDQwYywKLQkweGU5NzNmMzFmLCAweGZiZTcwOWRlLCAweGVlNjMyYjNiLCAweDYwN2U4NDliLCAweDRmNTFiNDQ1LCAweDdmMzFlY2U3LAotCTB4NDA1NjU2NTQsIDB4YzkxNjM2ZWYsIDB4MDQyMTRlNzQsIDB4NmViMTkzODIsIDB4N2ZlYjA2YjYsIDB4MjNiMGZmYmMsCi0JMHhhMjRiYjI4ZCwgMHg1MWQ3YjNmZiwgMHgwMmJiNGQxZiwgMHg0M2ZlYTdmNCwgMHgwZjEwMWQ5MywgMHhmNzEwMWQ3NSwKLQkweDdjZjRjM2Q5LCAweDhmODIwM2Q3LCAweGZkZTczZjNkLCAweDM3ZjcyODVmLCAweGU1M2FmZWYzLCAweGZmZGUxNmZlLAotCTB4ZThiZjMyOTksIDB4NWZkY2Q0NmYsIDB4NGJmZmI5YTUsIDB4NjI3YzRmZGUsIDB4ZmEwZjY0Y2IsIDB4YTU5Y2M1YWYsCi0JMHhlODk1NmUyYiwgMHgwNWNhMzU3NywgMHhmNmFjNTU5ZiwgMHg3NDJiN2UxMSwgMHhjYzViNzk3YiwgMHg2YjgyYmE3YywKLQkweDc0Y2UyYjhmLCAweDIxMWZhMzk2LCAweGExNDY3NTQ3LCAweGU1OTA5ZTlkLCAweDc1YmI0NzI4LCAweDJiMmJiYTZiLAotCTB4NTNjNWRhMTMsIDB4ZDYxMThmMjQsIDB4Yzk3YjhlY2QsIDB4NDVlYTRjNmUsIDB4YmUwYjk3MWYsIDB4ZjlmMWIyMmQsCi0JMHgzY2MzN2MxNCwgMHhiZjBiMzMwMywgMHg4NDdlM2NmZCwgMHg0ZjM1NDEyYiwgMHhmM2MwZjVmZSwgMHg3OThmNWI2YiwKLQkweDNjY2Y1ZDQ2LCAweGJhZjUyY2JhLCAweDg5ZTgzZjE0LCAweDM4NWRjNzZjLCAweDJlMWVkNjlmLCAweDA2M2RhOWY5LAotCTB4MzVlYzUwZjMsIDB4ZWFlMWZkZjEsIDB4OTg3YzhjOTYsIDB4YmI3M2M5N2YsIDB4ZWZkMGFhMzMsIDB4MWQ0MGZlMTIsCi0JMHgzYzdjYzNkYSwgMHhjM2RiODJlNywgMHhmMjRmZGI4ZiwgMHhkYWJiNzA3ZCwgMHhiZjMwNjM4ZCwgMHgzZGIwNmQwZiwKLQkweGNlMDVlOWFjLCAweGQ4OWQ0YzhhLCAweGQ3OTFiMDQ3LCAweGFiM2I5ZWM1LCAweGQxMmU3YTQ3LCAweDBjNzk5Y2I1LAotCTB4NTJhZGZiZWQsIDB4MTEyN2RmZTgsIDB4ZTVlYTlkY2YsIDB4NjZlNjhlNzcsIDB4OTBkNDNkNzIsIDB4ZWI4Mzk4ZTMsCi0JMHgzNDY0YzkyYywgMHhlODRkNjRiZSwgMHg5YjdmOWE3MywgMHg4NTcyZWRjOSwgMHg4NmYzN2JiMCwgMHg4MDZjOTk0NSwKLQkweGFlZTNjMmU3LCAweGFhYmZiODM1LCAweDFlNTY0YjZhLCAweGE1Njc4NWU2LCAweGZjYzkyZjE3LCAweDM3NmFiY2RhLAotCTB4ZjFiNmFiY2YsIDB4ZDU4NTZhYmMsIDB4Mzc5NDFjYmYsIDB4ZWRiMzNhN2IsIDB4NjMzYTUzNjEsIDB4OTE0ZGZmZTMsCi0JMHg3ODU5MTAzMywgMHhlOTRjMmNiNiwgMHg3NGI5MzliZiwgMHg2MTdiY2YxNCwgMHg0NzEzZGQ3ZiwgMHgzOWI5NDYxZSwKLQkweGZlNjBmMDg0LCAweDA4ZTBmODdjLCAweDU5MWQwYmQ0LCAweGU4MGIzYTkxLCAweDczNjk1OThiLCAweGFjZmU0NjllLAotCTB4ZGEwM2ZlMWMsIDB4MTYxNDUzMmYsIDB4Y2YwZTdmZDUsIDB4Y2M1ZjEzY2YsIDB4NDJhZTczNGEsIDB4ZTYzYzcxMzgsCi0JMHg1ZjQ2NWM0MywgMHgwZWIwNWRjMiwgMHhlZDMyYWJkNywgMHg4OTBkNzU1MywgMHg0ZWZjODU3NCwgMHhlOWUxZTA1OSwKLQkweGViZTEwYjRjLCAweGZkMTk5MDEwLCAweGU1MGUwNTE0LCAweDJmZTdlMGZkLCAweDlkN2NjM2Y3LCAweGUyODY1M2FiLAotCTB4YjRiZTRlNzcsIDB4ODU5OTZkYTIsIDB4ZDJmYmY3ODEsIDB4YmYwNDhmNWMsIDB4ZmFjNzUzYmYsIDB4NGRmMWE4NjMsCi0JMHhjMDU4NzhlMSwgMHgwNmU5MGRiMSwgMHhjYzk0NzNhZCwgMHhkZWYxNDExYywgMHg1NTQ4ZDJkNCwgMHgzODg0ZGE3ZiwKLQkweGQ3Y2UwOGU2LCAweGY1NTU0YjRlLCAweGFhZmEyYmNiLCAweDdmM2RkZmM2LCAweGM0ZmVlYTkwLCAweDdkNDE3ZjMwLAotCTB4YmJkYmJmOTAsIDB4ZTdlMWU0OWYsIDB4NDU0NTQ1OGYsIDB4YmZiY2JlZTAsIDB4MzZmNjdkYjcsIDB4ZDc3NDVlZmUsCi0JMHg3ZDFkYjI1MywgMHhiNjdiNDVkYSwgMHgwMzQ3OGRiZCwgMHhiMzlmYzQ1ZiwgMHg4ZGE0M2NhMCwgMHgxZDFmNjZmMiwKLQkweGQ3M2YxOTkyLCAweGFlMGZhMWMyLCAweGZlNjM5ZDBmLCAweDEwNzdmMTQ3LCAweDI5MDdhYjdhLCAweGNiMTJlZWYxLAotCTB4ODAxZGZhN2UsIDB4M2EwZjVkMWIsIDB4NDFlYTI5OTgsIDB4ZWQwZjJjNzksIDB4YjdmYWM1ZTEsIDB4Njc1NzZmMjgsCi0JMHhiNzNiZWJlNiwgMHg4YjRmOWY5YiwgMHgwNTdmNTNlNywgMHgzZTA3N2VmYywgMHg2NWUxZmU4OCwgMHg0YmI1ZTUwZiwKLQkweGZkNTM0ZjVhLCAweGViOTMyYWFjLCAweGE1YjRiYWU5LCAweGRkOGJmNDdhLCAweDE4MWRhMmQwLCAweDA2MmFmYTAzLAotCTB4Y2VkZmM1ZjgsIDB4N2RjMmVmMDYsIDB4ZGM1MTU5NmMsIDB4OTUzY2JmNWYsIDB4MmJlNDM4YjEsIDB4OTQzOWU3OWUsCi0JMHg1M2JmNGIxOCwgMHg4Y2E5YTRiYywgMHg4ZTVkZDdhZSwgMHg5NzVmZjlhMCwgMHhjZDRmYjRmZCwgMHg3NTQ0OTJmMywKLQkweDk1YTk4OTg4LCAweGM2YmY3MWFiLCAweGVlNGYwOGExLCAweGM0ZWY3ODMyLCAweDg2NTFkZGRmLCAweGM1ZGJhYjc4LAotCTB4OTQ0YzkxZjcsIDB4MGE1ODI4ZGYsIDB4MTk3MzRkNmQsIDB4NjY1MTNmM2QsIDB4MTdmMDI0ODcsIDB4ZmI3MDk3YzYsCi0JMHhiZTZkMTEzYiwgMHg0NmUwZjcxNSwgMHgyYmJiNDdhZCwgMHg3ZmZkN2QxYiwgMHgxOGM2N2E4NSwgMHhlNjI2N2E0NSwKLQkweDdlZjRkZGYyLCAweDNkMTM2NWY3LCAweDg4ZjQyNWRmLCAweDM1YzM4M2ExLCAweGFlOTNiMmZhLCAweDU5ZjBmYzJiLAotCTB4NzdlYWI2NjYsIDB4NGYwOTBjN2YsIDB4OTFmN2YxZTksIDB4YzY4YzFkMGQsIDB4OTAzY2JiOGYsIDB4YWZiZDY1NWEsCi0JMHhmYTc3ZjgwZSwgMHhjMjQzNWI1ZCwgMHhmYTVmYjRhNywgMHg0MmM5NzhkNSwgMHgwZjQ2ODg2ZSwgMHgxZTFmYWE1ZiwKLQkweGE5ZTg0MmMzLCAweGYxMTFlZmFiLCAweDVmZWExODQ4LCAweDcyY2NiZjY4LCAweDMwMTJkYTQ0LCAweDYzZDBlOTllLAotCTB4NGQ5OTg4NWQsIDB4ZmZlNDRmYjQsIDB4MDUzOGNkMDAsIDB4MDA4MDAwNzYsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg3ZGM1ZmYwMCwgMHhkNTU0NzgwYiwgMHgzOTllZjBiNSwgMHg2NjQ5MWU2NywgMHg5OTIxMjcyNiwKLQkweDRjZTIxMDI0LCAweGUwMTAyNDVlLCAweDBmMDgwNDI0LCAweDg2MDI0MGNiLCAweDA4NDAxM2E3LCAweGJjODBlODM0LAotCTB4MmIxMDEwMjUsIDB4MDMzN2U5NWUsIDB4NjBkMjIwNDksIDB4NDU0MDUyODMsIDB4NjhiMDUwM2IsIDB4YWFmOGZmNmQsCi0JMHgwMTMxZjVhOSwgMHhlOTRhMGZlNCwgMHg3YWI3YmQ2MCwgMHg1MjAzNmI2ZiwgMHhlMDhkNDUwNCwgMHhiMTZkY2ZlZCwKLQkweGJkYWQ2YmZlLCAweDMyNjczMjRmLCAweGZkZWRlZDQxLCAweGJlM2VmOWZmLCAweDNlZjY3NTlkLCAweDdhZjZiMWZiLAotCTB4YjMwZmI1ZWYsIDB4Y2I1ZDhhY2EsIDB4MGFmYjE4OGIsIDB4OTMxODEzN2YsIDB4YmIzMDJlOGUsIDB4ZGE2NjMyODYsCi0JMHhiMWVjYzY3ZCwgMHhiMjgxNjYzMSwgMHg5NmJlYTIzYywgMHgwNDZiNGYzMSwgMHgyZTQ5OTVhYywgMHgxOTIzNjMyMywKLQkweDM5NTBiNmZjLCAweGZiYzFkYjBiLCAweDYzMWY3N2NjLCAweDU3NmVjNjRlLCAweDRhNmRmZjE4LCAweGIxODMyYzY1LAotCTB4ZWQwNGRmYmYsIDB4MGZkZTdiNTMsIDB4ODUyZWEwMWIsIDB4OTY4YmMwYjEsIDB4YmJmODYxZTAsIDB4YzcyZmI2NWYsCi0JMHg4OWUxZjUwNSwgMHhlYzM5ZmFhYywgMHg1NTY3MGU0NywgMHhjZGRmYTFkOSwgMHhkYTE1YjI5ZCwgMHgzOTU1OWIzMSwKLQkweDlmZjgwNmVjLCAweDZmODJmZjM0LCAweDhiYTc3ZjM5LCAweDEyYjdmZmNmLCAweGZkZmQ4NGRiLCAweGIwODRjMjc2LAotCTB4N2VkNWU2MDcsIDB4OTIxMTg4ZmYsIDB4MzFkZmE3YWIsIDB4NjNiNTMzMmUsIDB4NTY3NWQ3NGEsIDB4ZDdiYWQ4Y2EsCi0JMHg2MDNiNWMxMiwgMHhjMWZiMzM3ZCwgMHg1ZWJiODAzMywgMHhiYTBmMDRiNSwgMHhhNDMzMzllOSwgMHg2ODM5Njk2MCwKLQkweDhlNzVmYTgwLCAweDhjMmY3Y2FlLCAweDVjN2FmZTVmLCAweDdlODMwZDg4LCAweDE5OTM4ZjVmLCAweGFlNTJmMzhjLAotCTB4YTVlMjBjNmYsIDB4MTU0MWY1ZmMsIDB4ZjI0YzA3MDYsIDB4YTBjYzhiMTUsIDB4M2M5YmE0ZGQsIDB4NWY3OWYxNjMsCi0JMHhhZjVlOGRmMywgMHhmOWM2MDI1NiwgMHgxOGE3Y2VmYywgMHhhZGJiYmRmMSwgMHg1NTI5YjVmYywgMHgyMjYyNDA4NiwKLQkweGM5NTRkNzc0LCAweDE2YzYwOGQ4LCAweDliMGQ5YjVmLCAweDZiOTJkOGMyLCAweDVhZmIwNGYxLCAweDc1YWJmM2Y4LAotCTB4ZGY3MDUzNjksIDB4NDk4NjZlYWUsIDB4NmM5NjNhYzMsIDB4MDE3ZDBjMzYsIDB4NzY1Y2M1ZDYsIDB4MzBmMDBmMzUsCi0JMHhhZGEyYzA3MywgMHg1MzM5ZTYwYywgMHg2NzdhZDIzMiwgMHhkNjBhNDkwZSwgMHg3MWRiZDM0MywgMHg3M2UwYzdiZiwKLQkweDY2NDg2MWQ2LCAweDNkYjk3YTZjLCAweGQ2ZjE4NDYwLCAweGRmYTg1MzVjLCAweDFhMmU2YmRhLCAweDY0YjVlZDZmLAotCTB4YjM1ZGQ3ODIsIDB4ZGFlNGI5NTIsIDB4Yjk2ZTdhNjAsIDB4ODAxZTY0NjYsIDB4MWMwMzVlOTcsIDB4ZGIyNzNjMDAsCi0JMHgzZmQ3MGFiNywgMHg0YTk2ZmViMywgMHgzNWI3Y2YxYywgMHg4YjY3ZDRhMywgMHg4MmIzMTdhNCwgMHg5MmY0MDU3NCwKLQkweGIzZDZkY2JlLCAweDA1ZjZmYWZlLCAweDJmZTg1NTMwLCAweGIyZjQ0YmM1LCAweDg4ZjJjYTE0LCAweDBlODI2NWZhLAotCTB4NTZiNmYxYTIsIDB4YTUzN2ZmZWMsIDB4NWY0MTFhOTcsIDB4M2NhMTZjNGIsIDB4NTRjMWUwMjMsIDB4ODU2ZWE3MTcsCi0JMHg3MTQ5NWNmOSwgMHg2Y2JjNDE0ZCwgMHg2ZmUzODA3OCwgMHg2ZTViYzk4MywgMHg3ODZlZjk4NywgMHhjZWMyYTBjNCwKLQkweGQ5NDczYmIwLCAweDMyZjAwY2FkLCAweGIzM2FkZGVhLCAweDE3NmU4MjJmLCAweDVjYzYxYjVjLCAweGQ3MzlmZWIwLAotCTB4N2RiY2E5NzIsIDB4YWUzMzZmYTAsIDB4NzliNWYxN2YsIDB4YThjMzRmMDIsIDB4MjM2NGQ2NjQsIDB4NDZkOGM1MWIsCi0JMHg0ZTE3NTdkYywgMHhiM2VmOTkyOCwgMHg3NTE3ZGY5OCwgMHg4NWVlZDNhMywgMHg2NTM4YmZmMSwgMHhiODhiZmFhMiwKLQkweDU1MzAyNTJmLCAweDljMDllMDRmLCAweDUxNjgyOTk3LCAweDJlYmNjMDBmLCAweDgxNDA1ODlhLCAweDlmNzNiOGFkLAotCTB4ZGYwMDA1OTEsIDB4NDFmNGExNGIsIDB4YjA3YjVkMDksIDB4MjkxZGU1OWQsIDB4OTJlZDhlZDgsIDB4MDRhOTI3OTgsCi0JMHgyZGViMDlmMSwgMHgwNTdjNjNlMCwgMHhjMjE5MmVmZiwgMHhmZDQyZjdmOSwgMHg5NjViMzMyNywgMHg4MWUwNzMxYiwKLQkweDg2NTUyYTc0LCAweDljZjI3ZTc1LCAweGJlNzgyNGM0LCAweDRlMWJmZDZhLCAweDk1YWIxZTU4LCAweDUwMjk2NDBlLAotCTB4Y2MxMGQxYmYsIDB4M2Q4YzQ5MzcsIDB4ZTJmNmZiMjIsIDB4ZDg1YTNlYmEsIDB4ZDA2NTZmZmEsIDB4ZjNjYjdjZWUsCi0JMHgwZDU3ZGMwZSwgMHgyODcyYWRhZiwgMHgwNTY5ZmIwZiwgMHhlZTYwMDY3YywgMHg2NTUyY2RhZCwgMHgyNmMzNDZkMCwKLQkweGExZWQwZDU0LCAweGEzOWU4ZDZmLCAweGI1ZjU3Y2U5LCAweGFiYTdhMjZjLCAweDJmYTE5Njc1LCAweGRkMDMxZDIwLAotCTB4NDE1YWYzZTIsIDB4ZmQyMTc3ZWYsIDB4YWNlYTY5NDMsIDB4ZTljOGY0MTQsIDB4NWFlYmEzNWYsIDB4NWFhZGNiOTksCi0JMHgwMDMwNjI1YiwgMHhiZmY5OWJmMywgMHhmNTAwZmU4MCwgMHhmMmE4NWY2YiwgMHgyYmJhNDQ0ZSwgMHg1MDc5YTgzMCwKLQkweDMyZmMxMWFjLCAweGUwZjgzYTUzLCAweGNmODNlNDU4LCAweDc4N2FkNDUyLCAweDU3OWFmOTNlLCAweGMxZjNkNzNjLAotCTB4YzY3NGZlNGIsIDB4YmM0YjE5ZjIsIDB4ZDVjNjkwYjYsIDB4ZTgyMmRmZTgsIDB4ZGZmNDg0ZGQsIDB4MmQ4M2RlOGYsCi0JMHhkOWZmZmUwNSwgMHg3N2ZmOWVkZiwgMHhkYjkwZjNmOCwgMHg2YmUyMTZmNywgMHg3ZmNhMWM5YSwgMHgzYjRiMDUyYywKLQkweDk0ZTRkMWQxLCAweGU3ZTkxOTJhLCAweGIzY2ZjYjliLCAweGQ1OWU3ZTQyLCAweDdkYjVjZmM5LCAweGI3ZjBjZmM4LAotCTB4MDRkNzg3ZTQsIDB4ZDg1YTU0M2YsIDB4MmUyMmRlMWQsIDB4N2JkYjY3ZGYsIDB4M2Q5N2ViZmEsIDB4ZWEwYjljZTksCi0JMHg3ODE5NzQzZiwgMHhmMzQzZmY3ZiwgMHhjYTViZjBmZSwgMHg4NmZkN2ZmZCwgMHg0MmFmZmY3MiwgMHg3OWNiNDdlZSwKLQkweDljYTFmZDA2LCAweGMyZDVlY2ZmLCAweGY3ODFlYTIwLCAweGQ0MDVlODE5LCAweGI4MjRhZjdiLCAweDQwM2QwYjBlLAotCTB4MzEzZTIyN2EsIDB4ZDAzZDIzNzgsIDB4NWZlNzdiOTAsIDB4N2YwM2QwZmIsIDB4YTNmZGJjNDMsIDB4M2ZhMzQwN2EsCi0JMHhmZTM0NWY4ZCwgMHg5YTIxZjhkMCwgMHg5ODdlMzQ3ZiwgMHhmMTM1MDNmZSwgMHg0MDFmZGM1ZSwgMHgxZmU0NjFjYywKLQkweGFlMGNmMDM5LCAweDUwOTVkNmEzLCAweGYxYTk3YzhjLCAweDBjMTdkYWQxLCAweGY0YmQ2N2M0LCAweDFlOWJlMDgzLAotCTB4MGJlYmQxM2UsIDB4M2UzNDFmOGQsIDB4NTZhNmY4ZDEsIDB4MjhiMmMzZjAsIDB4YjUyNjM4N2UsIDB4ZGUxNjNjM2UsCi0JMHgxNWY2ZWVkYiwgMHhmODdiNTNiOSwgMHhkMTczY2Q2MywgMHg3YTRmYTE3YSwgMHhjYjRmNDg2MiwgMHhkMjE4ZWE1MiwKLQkweDkxOTQyZDUzLCAweDgzZTk2NGY0LCAweGRmZGQ4YTllLCAweDEyNmU5ZThlLCAweDllOGViZmVkLCAweDZhNjZkYzJhLAotCTB4NGY0ODNmZjcsIDB4MzE5MWVlMTUsIDB4ZmJiMjY5ZTksIDB4NWM1NzY4OWYsIDB4YTk3ZGZiYWQsIDB4YjU3M2U2MGIsCi0JMHhiYmFjZTQxNCwgMHhiZmE2ZGU4NywgMHg5MGRkYjhjNSwgMHg3ZTkxNTc2MywgMHgzYWY5ZTIzYSwgMHg4MzAzY2MzYiwKLQkweDJiZWVkOGY1LCAweGQ0Nzg4NzU2LCAweDY3ZGI1MmU4LCAweDg2NTgwZWNkLCAweGI2ZTUwMDc0LCAweDljMmFlZjZjLAotCTB4YTA3YzQ3NmYsIDB4OTMzN2ZkNjgsIDB4OTZjZmI0NzcsIDB4NTNkOWIwOTQsIDB4ZDYxZGZiODQsIDB4ZWNiZWZmZTksCi0JMHg3MmRmYjVjNSwgMHhkZmRjNmI5ZiwgMHhkZGY4NmU0YywgMHhkMTdiNzRmZiwgMHgyNzJkOGVlZiwgMHg3ZDlkZmYwMiwKLQkweDdmMGU1OTlkLCAweDk0ZjA0N2Y2LCAweGY2MWUzM2Q3LCAweDY2MDI4N2U3LCAweGNiZjIyZjYxLCAweGZlYWQzMmJjLAotCTB4MTkxZTJkMzcsIDB4M2RmYzAzZTUsIDB4MzBmMDQ2OTYsIDB4YzM4MWUxMmIsIDB4MGFlMWQzODEsIDB4ODdmNGU3OTgsCi0JMHg1ODAzZWJiYiwgMHhhMjdjNzkzZiwgMHgwYzc5OGZlOCwgMHg4ZmZkYTdhYywgMHg2ZTE1YmMwZiwgMHhjMmRlZmQyNiwKLQkweDk0ZWJlZmYxLCAweGUwMjM0M2JkLCAweDExZWQ4MDUyLCAweGJjMTQ1OTcwLCAweGM4NzdiNzlmLCAweDdlYTE0YzlkLAotCTB4YTBhZjljODIsIDB4YzIwOTQzN2YsIDB4N2U4MjdmNWEsIDB4NTVmOGU3OTksIDB4YzUyY2YzYzAsIDB4M2VjMDc2YzAsCi0JMHhmMDM5NGJhZCwgMHg2Yjk0NTVjNiwgMHg3MDY2MDY2ZCwgMHhmZDgxZTA0NSwgMHgwNGM5ZWJkZSwgMHgyMGM1NzhiYSwKLQkweDdiMDhmZmUwLCAweGY4NWIxOTcyLCAweGI4NGY4NzAyLCAweGM4MTJkNGZmLCAweGJlMDJmZDE1LCAweDliNzQwOGQ3LAotCTB4MDkxZTBkNWEsIDB4NjY1MzViZmEsIDB4N2JiYjY2MDgsIDB4NWI4NGZiZTMsIDB4N2NkYWFiZDMsIDB4ZGZlYTU1NDAsCi0JMHg2Zjk0ZTY2NywgMHg2ZDFhM2VmNywgMHhiZDM2N2VmNCwgMHg4YjdjYjIxZiwgMHg2NzhmZTdmMSwgMHg3YjBjNjA5ZSwKLQkweDFmODIwZmY4LCAweDYzMTM0YTJhLCAweDRiNzc5ZmQ2LCAweDAxZDdmZjFjLCAweDQ3ODdjNmQ2LCAweGMxZmQ2MDczLAotCTB4NTk3NWZjMTgsIDB4MWEzNjE3ZjQsIDB4ZDZmZjNlMDUsIDB4MzYxNjc0ODIsIDB4NmJmZWY4NmIsIDB4MzI3YmUyMGIsCi0JMHg4Mjc0ZGQ2MywgMHgxM2UzMDM3NCwgMHg3ZmRjN2ZmYywgMHg3Y2M5MzZmNSwgMHg3YzI4OWViOSwgMHg2ZmJkNjhkZCwKLQkweDIwNTdjMGM2LCAweDM3MmNiZjZhLCAweDZlZTlmN2MwLCAweGJlZjNkMGI5LCAweGU4N2VmZjRiLCAweDRlZjVmYjQ2LAotCTB4ZGQwNWYxYWYsIDB4ZDhlOGQ0YWUsIDB4NDRmN2EzYTMsIDB4OTlmNDRiZDksIDB4MDI1MDYyOTgsIDB4YmQ2YjhmNDAsCi0JMHgyZmU4Y2Q3MSwgMHhhOWE3ZjBmNCwgMHg4ZTE0ZjEwYSwgMHg4N2E5ZTNkMywgMHgxNTU1Y2NmZiwgMHg0NDhmYjIzNiwKLQkweGU0MmVlYjdiLCAweGJiYjFhZjVmLCAweDZlYzdlNzNkLCAweDAyOWU2NmJhLCAweGQyOWEyYmMwLCAweDQxZDI3ZWY4LAotCTB4OGQ4MGFlY2IsIDB4MDllYTgyZTgsIDB4Nzc5ODhkY2UsIDB4NDZiNjNmMzQsIDB4ZjhhM2UzYzEsIDB4YzkxZmYwNTcsCi0JMHg4MDA3ZDQwZiwgMHg2Zjk0M2NhNywgMHhhZWNkNjcyOSwgMHhiMzUxM2EwOCwgMHgzMTNlOWUzOSwgMHhhNzk0NmFiMCwKLQkweDhlZGM0OWUxLCAweGQyZjM2NzBjLCAweGZhYTA2ZDliLCAweDFmYmU2Y2IyLCAweGUzODY1MTFlLCAweGE3YTBmMDIzLAotCTB4MmJmYTEwOWYsIDB4M2MyNmViMTEsIDB4ZDZkMTQ4MmQsIDB4MDMzNTUwNWQsIDB4ZTY0ZTE1ZDYsIDB4NzNiMmQzZjUsCi0JMHg3YjMyMDU3NywgMHg2NmZlZThlMCwgMHgwNTU0MTc2NCwgMHhjZmZiMjI4YSwgMHg1ZDc4ODMzZiwgMHhjZGU2ZjAyMCwKLQkweGViMDY3NDFlLCAweDRiNTA3OTM1LCAweDExZjQ0Mjg0LCAweDhiNTA3OTQwLCAweDRkZTg2MWY0LCAweGJkZDllOTFmLAotCTB4ZjUxMDMzZTgsIDB4ODM3NGM3YmUsIDB4YmY3YWIzZjcsIDB4OWY3YTg5ZWYsIDB4Y2RiZTUyOTksIDB4NjZkZjYyZmIsCi0JMHg2NTZiZWQ0NCwgMHg0NDU2YmVkNCwgMHgxYzFhMzVjMSwgMHg0ZDVmYzlkNCwgMHhkYjY5MmYyZSwgMHg3OTg0ZThkNSwKLQkweGU0MDQ3NWRjLCAweGU3YTQ4YjJjLCAweDc3Y2Y0NDUxLCAweDhlZmQxYTI5LCAweGJiN2E4MzNlLCAweDA4Y2I5ZTg3LAotCTB4ZjYyYWRkOWUsIDB4MTc2NjMwMmQsIDB4OTQyYTlmZWEsIDB4ZTA3YjYzYzMsIDB4MDg4NzI4MzksIDB4MTllNTViMWUsCi0JMHhjNmFmYTkxZSwgMHgzZGI5NDJlZCwgMHgzZjZiNDliZiwgMHg2YzJmZGE5ZSwgMHg5OWJiZmFkMCwgMHg2NDdkYjVlYSwKLQkweGQxNTRlZjgxLCAweGMzYjkwYWJlLCAweDYwY2UxMzAyLCAweGY4NTdlYWZkLCAweDNkMDdmNWZiLCAweDBmYzg2ZTY3LAotCTB4ZDk3ODUxMmQsIDB4YTIwNzA1MWYsIDB4MWFmZWVmZGEsIDB4ZjUxMGQ2ZmQsIDB4ZmFhOGU2ZmUsIDB4NWY3ODI4ZTYsCi0JMHg3ZmE0ZGMxNCwgMHgwMzUyZjE3ZiwgMHhhMDYyZTFmMSwgMHg2ODg4ZGMwNywgMHg4ZmE2OGNiZSwgMHhlZGJiYjM4NywKLQkweDZlN2Q2ZTljLCAweGE3N2Q5MWIwLCAweGY1ZTlhYmUzLCAweGUwZmM3ZTFjLCAweGEyYTZhYWNjLCAweGQ2ZmIzODA4LAotCTB4ZGZmNzAwYWEsIDB4MjY5NzQ4MGQsIDB4NzMyMDdmYzYsIDB4ODNkMDEyMDMsIDB4ZjliOTBmYTksIDB4YjJlOGJlODMsCi0JMHhmM2RmNWEyMCwgMHg5ZmUxM2ZmYSwgMHgzMzJmNjgxOSwgMHg0YzcyNWQ5ZCwgMHg5MmVkYzNkMiwgMHg2NzQ1ZWYzNiwKLQkweDQzZTExNjM2LCAweDQyYTlhZTBkLCAweDVlZmE3YTdmLCAweDlmYzBiYWZkLCAweGFhYzJmMDE1LCAweGJiMDhjYzhhLAotCTB4Y2FhMGIwMjgsIDB4YWQ0ZWIxMTMsIDB4YmYyZjk0ZmQsIDB4ZTdiYzcwOTIsIDB4MWQ1NDE3YjMsIDB4NDk5YWZhODIsCi0JMHg5ODNhYmNhMSwgMHgyZjMyNGQ2NywgMHhhODRhNWY0MSwgMHhmODg5ZDdhZiwgMHgyNTU3OTRjZCwgMHg5YWNiZWEyZiwKLQkweDg2ZGU1MGY4LCAweGIyNzU4OGEyLCAweDY3NWM3Y2Q2LCAweGVkMTJmZGZiLCAweGY2MWVhMDRmLCAweDk4YjRmMDA3LAotCTB4OGYwYTIzODEsIDB4MzMxZTY0ZWUsIDB4YzRmYTgxY2IsIDB4YzI0ZjRkYzQsIDB4OTdlZWM3N2IsIDB4N2U5ZWExMzYsCi0JMHgyNzNmNTM3ZiwgMHgzOWM5NDNmYSwgMHg5NjNjZWVkYywgMHgxOTczOTM3OCwgMHg3NzA5ZWRjMCwgMHhkZjZkYmM5MCwKLQkweGEzY2E5OTNlLCAweDk3NWI2NzkyLCAweGQ5ZGJkOGMyLCAweDg1NmNhYWFiLCAweDc4NDg5ZjU4LCAweDY5NzA3ZDNhLAotCTB4ZWZhMDE2ZDUsIDB4N2EyZWQ5MzMsIDB4MzhhYzk3ZGYsIDB4ZGVkZWQwZGIsIDB4NWQ4NzYyNjEsIDB4ZTI5NTJmMzgsCi0JMHg1YTc3OGI0OCwgMHg3Y2UwNzc4YSwgMHhhMjcxMGNiNiwgMHg0N2U0YjlmZCwgMHhhMDMyNTM1NSwgMHg5MzQ2OTJkZCwKLQkweGE3NTQ3NjhhLCAweGY5YzJjOTUxLCAweDM2NGM3NmY5LCAweDA2ZDJmZDYzLCAweGExNmUwNjUxLCAweGZmYmZmNWYyLAotCTB4ZWQwMWRlYTQsIDB4YTgzNzFlYmIsIDB4Y2RmZGExMDcsIDB4MzViZWI0NWYsIDB4NGQxNWUwMGMsIDB4ZDE2ZTJhMzksCi0JMHgyODA3ZTA2YiwgMHg3ZGI5Y2UzMCwgMHhkMDEyODI4MywgMHg3NTcxMDdlNSwgMHhmNmYxNjYyNywgMHhiOGFmZGIwYywKLQkweGFiM2QzYWVlLCAweGNhNGJkYjE0LCAweDAxN2Y2ODU2LCAweDdjZmRhMzllLCAweGEwZTkwMWUxLCAweGIwZTVlNzAxLAotCTB4NDk2MDFiYzcsIDB4MTQ2NGJlMTcsIDB4NjhkMGI5Y2YsIDB4ZWU3YzYyMDksIDB4ZmI3N2NkOWMsIDB4OWY2NzFjM2UsCi0JMHg3NjdkMmQwOSwgMHgxODcyZTBjMSwgMHgxZDlmMGYwMCwgMHgzZDJhYjdiYywgMHhjNDViOWYwMywgMHhiNDliZGVmZSwKLQkweGQ4YjBmMDE4LCAweGE0M2Y0ZGQ4LCAweDcxMjc5NjRmLCAweDdiZWNiM2Y4LCAweDNhYzMwZWFiLCAweDg4MzIzYzJlLAotCTB4NzIyYjU3ZTIsIDB4ODBkOTVkM2MsIDB4Y2Y1Y2MyYWYsIDB4MTA3ZTU4ZTcsIDB4ZWJkNmY1YzcsIDB4NDBlZTk3N2YsCi0JMHg5N2Q3ZmUzYiwgMHhiZTkxMzg5NywgMHhkNmY0MjZmZSwgMHgzODk2ZDc2YiwgMHg1NWQ4NDQ5NywgMHg4OTkxM2ZjYiwKLQkweGJiMzc1ZTBlLCAweDVmN2NlMjM2LCAweDQwNjgxZjhmLCAweGEwZTgxYjNmLCAweDk3YzljNjFmLCAweGU4MDViZjBhLAotCTB4MzFmM2QzNzksIDB4Y2Q3ZmFiZWMsIDB4ZGFiZjY4OTYsIDB4ZGUzYTkwN2YsIDB4NmRlYmEzYTUsIDB4ZGZjOGE3YTQsCi0JMHg5M2Y2ZDgwMCwgMHhhMDAyYmJhZCwgMHgzNjViY2ZkYiwgMHg4ZTUwMGZiMSwgMHg3MTQ3ZWU2ZCwgMHhjODRjYTVkYiwKLQkweDgyZTI2NzgxLCAweGY0YjE1N2U4LCAweGY4YzhmY2Q2LCAweDhhMWYzNzRkLCAweGQ4MGM3ZmY2LCAweDg0N2ZhZjA5LAotCTB4ZmRmN2U4ZjYsIDB4NzYxZmYwMzEsIDB4N2VkZGViNjYsIDB4NDAxZWMzODUsIDB4YmI0M2UyZTMsIDB4NzhmZGM2NWQsCi0JMHhiODVmZjY1ZiwgMHhmZTViZGUwZiwgMHhjMGY0ODliOCwgMHgzNzUzYzdmMiwgMHg0MGI4ZTE3NywgMHg4YjU3MTgzNywKLQkweDFjODJkNzVlLCAweGY0NjM4ZjEzLCAweDg3ODE5N2M1LCAweGZlNzQyYWFiLCAweGJmMjRjM2NhLCAweGZjY2JlMmZiLAotCTB4NzU1NDNjOWYsIDB4NWYzN2Q2YzgsIDB4N2NiODUwYWUsIDB4YzliOGYyOWEsIDB4NjJiNGZjOGIsIDB4YTA2NjVkYTQsCi0JMHhmZTNkMjY0ZiwgMHhjZmM0NjFjNiwgMHgyNTcxZjU4YSwgMHg4YWY4OTgxNiwgMHg1ZmI0MmRjNywgMHg0MDdiNzY5ZCwKLQkweGMzOWY3YTgxLCAweDU5NDEyNzJlLCAweGQ2ZTVjMzlhLCAweGVkMTcxY2JjLCAweDY0YzRiOTczLCAweDBkOTUwOTZiLAotCTB4ODJiZDZmMTgsIDB4MmY4MDBkZTEsIDB4Y2Y3ODdhNmQsIDB4MjNlNzE4NjgsIDB4MWEzNzljMTYsIDB4YzNjNTc3ZjAsCi0JMHgwYmNhZjRlOSwgMHg5OTFkYzUxMiwgMHg4MjY3OTFlYywgMHhiOGM5NWNiYywgMHhmOTNkYTg5YywgMHhmYzIyNzliYywKLQkweGM1NmViMmI5LCAweDU3MDdmNDBjLCAweDNhZTc0ZDA1LCAweGYxOGUwZjg1LCAweGY5YWM3NWQ4LCAweGVhMTg2OTczLAotCTB4YTI3M2ZkNTcsIDB4ZjNkNjI3MDQsIDB4NDlkNjFhZGYsIDB4MzViNmEzNzIsIDB4ZGFlYmZiZjYsIDB4ZTQ2N2NmZjQsCi0JMHgwYzJlNTNkOCwgMHgyZTQzMTg2MSwgMHgyYmIxMGMwMSwgMHgwNjdjYTY3NSwgMHgwMzYxNWM0YiwgMHg5NmY1ODJmZSwKLQkweGJjZDAzN2VmLCAweDgyOTI2YzU3LCAweDc5Nzc5ODE2LCAweDNlMmYxZTNmLCAweDM3ZmQ4N2VmLCAweDBhMDNiYWQzLAotCTB4NzM3NjJiYzAsIDB4MTk4MmIzYmQsIDB4ZjNmODU2ODIsIDB4MjllYmZkOTYsIDB4Yzg0Yzc5N2UsIDB4ZTYwNmM1OTksCi0JMHgyMGZlZmE0NSwgMHgzZjQyY2Q0ZSwgMHg3MWUzZjk3ZiwgMHg0ZjE1ZGY4NCwgMHg0N2I3ZmFhYywgMHgyZGNlYmRlMCwKLQkweGZkMjI1MzMzLCAweDE3NDgyNWVhLCAweDlhY2NiZjFjLCAweDg3Y2ZkM2RjLCAweDg1OWZiZTViLCAweDYzZmU1ZmY0LAotCTB4M2Q2MThmZjAsIDB4MmZkODkyMmIsIDB4YmY3MWI4MTYsIDB4YjY1Y2IyMzIsIDB4YjYyYjc2OWUsIDB4ZGJjZjlmZGUsCi0JMHg3ZTBkN2Y4MSwgMHgyNDA3ZTJmNCwgMHhkMTdiMDc1YSwgMHg3ODEwN2E0MiwgMHhkYmM0ODk1ZCwgMHg2NjkzODZkMiwKLQkweDViZmYxMTczLCAweGRhZmIwYTcxLCAweDM5YmM3Mjg1LCAweGU3ZmJjMTJjLCAweDExYjI1ZWEwLCAweDExOWQwMmZlLAotCTB4YjAzYmYyNzEsIDB4MjM5MjBjYWYsIDB4OGQ1ZjVjM2UsIDB4NmNjNzcwZDEsIDB4OGNjYmE3ZWEsIDB4ODczM2JkN2MsCi0JMHg0NDFiNDNjNywgMHhiZDRiMzhiOSwgMHgwZmNmZTI5ZCwgMHg2ZWFkZDQ1YSwgMHg0YTM0OGZkZSwgMHhiYmZjMDNjYywKLQkweDM5Nzg2MzVhLCAweDJmZDk4MWM2LCAweDU5NTcxNDJkLCAweDg5ZTcxMGQ3LCAweGUyM2Y5MDczLCAweDVkZmEwZTc5LAotCTB4OWNkOTMzMjcsIDB4ZmE3MmZkOGMsIDB4NzJlMmUzNWIsIDB4MmJiZjllMDMsIDB4M2I1YWYzYzMsIDB4NDliNThiOTcsCi0JMHg5N2FlNmY4MCwgMHhmZmU4NDYzZCwgMHg4NzJiZmMzMywgMHhhYzMxOTdmNywgMHhmMWVlZmRlNywgMHg4NWY1M2QwZCwKLQkweGZkNWYxMGMzLCAweDNjZTM1NWU2LCAweGRmMTEyZTdlLCAweDJjMWUzMjAyLCAweGU3ZWVmYjQzLCAweGFiZjQwOGQyLAotCTB4NmM3MDNmMTcsIDB4YmJkOWNhMGEsIDB4ZjA1NjJkOWUsIDB4ZjhiZmM1ZDUsIDB4YmI4OWU5MWQsIDB4YTI3NzNlYzQsCi0JMHgwMzdhOGY5ZCwgMHg3Y2ExNjdlMCwgMHg0NWNiODczMiwgMHg0MmUzYzQ5ZiwgMHg2ODdjMGE0ZiwgMHhkN2Q1YWRmYiwKLQkweGYxZTI2MDNlLCAweDI4ZTc5MDc5LCAweGZjYjc2YTQwLCAweGI1YWRmYTllLCAweDY3Mjg5ZDg3LCAweDhkMzQ1ZjZiLAotCTB4OTRmYzc5NDIsIDB4MmQ5MmZmOTgsIDB4MGJiZmM3MDMsIDB4OTRjNGIzZjQsIDB4NWE1ZWEwYTgsIDB4NDY2OTk4MTMsCi0JMHg4MThiNGQ3OCwgMHg1MmY3OWVlMCwgMHgzZjFlOTBiMywgMHg4MWM5Nzg2ZSwgMHg1YzQxZjI3NCwgMHg0ZmY1MGYyOCwKLQkweGY1MzhmYWQ3LCAweGUxNDAyZTIwLCAweDFiOGZiOTcxLCAweGZjNjIwZWYyLCAweGI2MTJhOTY2LCAweGU5N2VhMDFiLAotCTB4OTQ2NDljYzYsIDB4MjEyYmVmZDMsIDB4ZGZiZmQ2MzMsIDB4ZWMyMjM2ZWEsIDB4MDhmMTk0NTEsIDB4MDRlMWU0N2IsCi0JMHhhYjIyMGM3ZiwgMHhjYTBmZDA1NSwgMHhiZTA2YjU5OSwgMHgzOTllNmI5ZiwgMHhmMTg2Y2U2NiwgMHhmZGMzOTM3ZSwKLQkweGZlN2U0ZjliLCAweGYzOGM3Y2JiLCAweGYzODU2NmQ0LCAweDdlYzA3ZjUxLCAweDNjNDAwZmU3LCAweGZkMjA2ZDNmLAotCTB4YzkxOWY2YmIsIDB4NjdhYzM3MTMsIDB4N2VlMmQ3YmYsIDB4MTZhZDdmMDMsIDB4ODVmNmJjZmIsIDB4YmE0NWVlOTcsCi0JMHg1ZGZiOGI1ZiwgMHg4MDVlOWJkMiwgMHhmM2QzOGY2ZSwgMHg2MTRjMGVlNywgMHg0OGUzZmRmYywgMHgwMmJlOWExNywKLQkweDhjOTRjMWI4LCAweDlmMGUzYTcxLCAweDAyZmNlMWNlLCAweGYzZjgyYmNmLCAweDRiYzkxMTQwLCAweDY3NjgyMzkwLAotCTB4NWY3YmQzNDYsIDB4ZDhiMWZiZmIsIDB4MmM1YjI1YmYsIDB4MTYzZjU3MjQsIDB4YzBmOWRiZmIsIDB4YmZkYzBlOGIsCi0JMHhlYzdlN2U0ZiwgMHhkNGEzOWUwNCwgMHhkOGRhMDczZSwgMHgwNWVlODMxNSwgMHhmYWUxZDYzZSwgMHhiMjdmMzQxZCwKLQkweDdhZTFkNjIzLCAweGVmZWIzZDFkLCAweDZmYzE3M2E2LCAweDlmNWYxOGViLCAweGIyNzVkZWI2LCAweDJmNTZiZjU4LAotCTB4ZDYyY2JmZGUsIDB4N2MwOTg2YjksIDB4ZjM4ODMwYmQsIDB4ZTQyN2UwOTcsIDB4YjRjN2I0NTcsIDB4Zjk5MmY5ZjUsCi0JMHgyNjdkMWFmYiwgMHhmZmI5NzJlNywgMHg5OWZmMjEzNywgMHhmYzQwZWFkMiwgMHg5Y2EyZmVlMCwgMHg5OGYxZmEwMSwKLQkweDAxYjkwOTQ3LCAweDE2NzkzZTRkLCAweDVmYjExZmU2LCAweDczYjNmY2RhLCAweGFlNDAzY2Y5LCAweDdiOTI5Mjc5LAotCTB4YzhkM2IxZjYsIDB4YjczYWM2NTYsIDB4NzhlNWM4NGMsIDB4OTY5OGRiM2MsIDB4ZmJmODA2ZDUsIDB4ODkyYmZjMTgsCi0JMHgyMzk1N2E3MSwgMHg0NmU4ZDNjNiwgMHg2N2ZjYWYxYiwgMHhkZDcwZDM1NSwgMHhmYjA4N2ZkMCwgMHgzZjdkYzZkNywKLQkweDNmNjMyMDkwLCAweDFmY2UzM2VmLCAweGJlMzVmY2RhLCAweDM0NWZhZjJjLCAweGVkODFkOGFkLCAweDE0ZTdiMTNlLAotCTB4ZGQzOWJhZTEsIDB4NTQyYWU3NjYsIDB4ODAyZWQwN2EsIDB4MDY2ZDNkZjcsIDB4MTU5ZjRmOGEsIDB4YzZkOWZjZmUsCi0JMHg4YTRiMWM5NywgMHgyNWRkZTg3YSwgMHhkOTNmOGRlNiwgMHgxYTllN2JkOSwgMHgzM2QwNDVmZCwgMHhmYjdjYjNjZCwKLQkweDZiMDg2OWZjLCAweDRiYTY4ZGYzLCAweDdkMWE2ZjBkLCAweDY0YTljZGIyLCAweGU5ZDM0NGFmLCAweDY2YjNjY2JhLAotCTB4YjlmYTJmMWMsIDB4ODA3Y2I3NjYsIDB4ZmZlNDE1ZjEsIDB4ZjJlM2M2NTQsIDB4NmU3OGVjMGQsIDB4OWY4NjNlODQsCi0JMHhkMWVhOGQ4ZCwgMHhkNzljOWEwZiwgMHgxNGJhZjNmNCwgMHgyZmMyMjVjZiwgMHg0MzcwM2EwYiwgMHg1MzY2ZTczNiwKLQkweGM3Mjk3N2JmLCAweGZkZTAzOWI3LCAweDc0YzNlNzMxLCAweDg3ZDlhYmZlLCAweDkyMTE3ZjM3LCAweGY0OGUzMTEyLAotCTB4NTIyNGJiODIsIDB4N2NiOWFkY2YsIDB4OTZiNmU4OWMsIDB4YmZhMWI3ODUsIDB4ZGY4MWY4YjMsIDB4ZjQ4ZDFjY2QsCi0JMHhjZTg5OTRmOSwgMHg0ZTM3MTY1YiwgMHhiZGRkYTMzNiwgMHhhMzlkZjBlYSwgMHgzNWNmZGY3MCwgMHhhOTc2M2Q3MSwKLQkweDY4OTNlNDYxLCAweDdhNmI5ZjM3LCAweDExNjc3OWQ4LCAweDY1M2U1N2JlLCAweGJjNWYzYzJjLCAweGY1ZjY5OGFiLAotCTB4NGNmMGI4ODMsIDB4OTFlZWJiODQsIDB4NmY3ODQxZDgsIDB4OWI5MWUxZGMsIDB4Y2UzYzAyMTcsIDB4YWUxMjUzN2UsCi0JMHg1MjQzZmRlZiwgMHgzYTA4ZDhjNSwgMHhjZDk0Y2E1OCwgMHg5MzRlZDEwYiwgMHg4YmU0MTUxMywgMHhhYjNjODVmNywKLQkweDVhN2RmMTM3LCAweDUxN2ZlODJlLCAweDQ1ZjNlNzJlLCAweGViY2I3ZjYyLCAweDdjZjFmM2ViLCAweGM4MDBlYmJjLAotCTB4OGQ2M2MwNTEsIDB4YzIxYWQ1ZDksIDB4MjM0ZDVmNzEsIDB4ZDgxZDdmYmIsIDB4NzRjOWU5MDgsIDB4ZDI3NjRkNGUsCi0JMHg2NmIzMzM0YSwgMHg2YjczZDA5NCwgMHg2OTNmM2MwNiwgMHhlYjgzZGYwYSwgMHhiZDhmNzkzOSwgMHg1OGUyMGI3OCwKLQkweDA5NmEzZWJhLCAweDVmODk2ZmI3LCAweGYxYTVhZWMwLCAweDMxNjhlZGJiLCAweDJlODI2NThmLCAweGRlZDNmYmEzLAotCTB4MWViYjQwZWYsIDB4ZmY5ODllZTUsIDB4ZTZhNzg2YTUsIDB4NzRiYWJlYTEsIDB4ZDcxOTJmMjQsIDB4NzFhYmUxZmYsCi0JMHg3Y2RmNjg0ZCwgMHg0YzcyZTI2OCwgMHhhZWVjMWZlYiwgMHgxMWY2OTFmMywgMHgxODNhNWJkOCwgMHgwYzFkMmFlYywKLQkweDZmNWU3NWY0LCAweGJjMjU2ZDhmLCAweGI3YWI5YmRjLCAweGFkM2EzNGFiLCAweDE4OTc5ZjU5LCAweGNiZDAxNzk5LAotCTB4MGE0M2ZlZmUsIDB4OWNmN2ZmOWQsIDB4NjQ0ZThjYmYsIDB4Nzc0MmU0MzEsIDB4ODgwZmQ1ZGMsIDB4M2M2YzY3Y2EsCi0JMHhjZjE4ZmFkYSwgMHhmOWYyZjg0ZCwgMHgyZGRmZGEzMCwgMHhlYjAyYzUxNiwgMHg4ZTc0OGYzYywgMHg0YTJmNGJlNywKLQkweDcyYjdlZWRjLCAweGUyZmYzZmJhLCAweDc3ZmEyMDg4LCAweGUxYzBmZmNiLCAweDIwODZhZGU1LCAweGRmMWVkZDFlLAotCTB4ZjZjMjVkYjUsIDB4NGJlZWMwY2IsIDB4YjNkODQ0MzMsIDB4MDNjZDc3YmIsIDB4NTQ1NzY3ZjIsIDB4NjgwY2I2ZGYsCi0JMHhjZjA4ZTU3ZiwgMHg1YjZhODA3NywgMHgyMjdiMWQ5NCwgMHgxZGI3ZDVjMywgMHg1ZmI2Y2ZmYiwgMHg2MWMwYjhiNSwKLQkweDUzMmFkZjBkLCAweDllMWFkZjExLCAweDc1ZTY3ZjM1LCAweDkyYjI4N2EwLCAweGVhN2RiYzFlLCAweGViZjY0OTVmLAotCTB4Y2E4ZmJmNjUsIDB4MWY2NzBjY2YsIDB4NmM3NDg3MWMsIDB4NWY5MTU0NGYsIDB4YjBmNmRkN2UsIDB4ZmJmNzAwMzQsCi0JMHhlOGViZTI4NSwgMHgyNWI1OGU5NywgMHg5ZmI3YzgyYSwgMHhiOWQxMzdmYSwgMHgxZDdmNjVlNiwgMHg2YjdlZGE5NSwKLQkweDVmOWJiMTcxLCAweDNlZjdhNzY4LCAweGNhZjExYjZkLCAweDM1ZWY3ODM4LCAweGQ3OTBhMjViLCAweDM1ZjczMWM5LAotCTB4ZWVlM2JmM2EsIDB4ZjBkM2EzZjUsIDB4OGZhZWI2YjksIDB4YWJmYmUzZWUsIDB4MjNhM2ZiY2QsIDB4NWQ3MDNhNzcsCi0JMHg3YmY1OGZlZCwgMHg2YmVlMGM2NSwgMHhmNjgyYTI0MiwgMHhkZjkxMGFkOSwgMHg5NzFmNjE3MSwgMHg4OWFkMTcwZiwKLQkweGZkODBjZTRmLCAweDhlN2ZiOGJkLCAweDVjOWM4MTkzLCAweDFlNzczZWQ2LCAweGFhZmU1ZjNlLCAweDVjZmI0MTQxLAotCTB4ODFjYWI1N2QsIDB4Y2IzZjhkZjEsIDB4NGIwNTBlOWQsIDB4ZjM4NDJmNzgsIDB4Y2ExMjgzOTEsIDB4NmM5NWIxYTMsCi0JMHgxYjFmYjYwZSwgMHhmYTBiOTk5MiwgMHhkMzgzMzMxOSwgMHg3MmNiOThjOSwgMHgzZTc4MGYxMCwgMHhiNzE0ZTc4NiwKLQkweDcxNGYxZWI4LCAweGMzZjVmODBiLCAweGJmNjU4ZGZjLCAweDBkMGVmMWUyLCAweDM1ZGY5YWVmLCAweDA0ZGJhYzRlLAotCTB4MmU3NDQ3ZWMsIDB4ZjE5Nzk3OWUsIDB4N2ZlZTFmZTcsIDB4NzdmNjE2N2UsIDB4YzE0OTkwZTksIDB4Yzg3YTdmNzksCi0JMHgwNmFmZmQ0NCwgMHhlMzA4Yzk3ZiwgMHhmZGMyM2M1ZCwgMHhkY2UzODQxMCwgMHhkZmRjYzdjOCwgMHhmZGNhZGQ1OCwKLQkweDI2ZjVkYThkLCAweDM3YjEzOThmLCAweGI0NDc5NjNkLCAweDllMGViZjQzLCAweDU1ZGM3MGI5LCAweDNhMzRkZTgyLAotCTB4ZWJlMWVkNWQsIDB4MGQ3YTBkNWIsIDB4Yjc0ZDFiZDcsIDB4MWI3NWFjNDksIDB4ZThlYmU5ZTIsIDB4ZWRkMjliZjcsCi0JMHgxMzVlOTBkZiwgMHhlODdjYjc1OCwgMHhlOGJlZDdhNiwgMHhmOTEzZTA0NCwgMHhhMzU1ZTkxZCwgMHhmOGZiZDU4NywKLQkweDZiNzI3YTM5LCAweDNiYTQ0NGYxLCAweDc5MzQzZThkLCAweDBhYzQ5ODEyLCAweDliZDY2ZjUwLCAweGRkZTYwMTU5LAotCTB4MmFmMThjMDQsIDB4OWIyYTgxY2EsIDB4N2Y3Mjg0Y2IsIDB4MDU2NzRhNGUsIDB4MWU0OTY1YTIsIDB4Yjk1MmE3OTcsCi0JMHhmZDQ0NjNkMSwgMHg3OTIxNmY1MywgMHg1MjZmMmQxMSwgMHhkZmZjYjhmMiwgMHhlZDA3NDQ4MywgMHgyYTE0ZjI4YiwKLQkweGZjOGVhYzRkLCAweDg1ODRhZDA3LCAweDVjZmQ0NDBjLCAweDlmZmM5MDk1LCAweDUzNzI2ODJlLCAweDY1YjM4M2RlLAotCTB4YjhkNTdmOTgsIDB4NTQ3MjdiZTQsIDB4ZWRlNTA2YzYsIDB4ZTQ4OGYwZTYsIDB4OTdhODI2OTEsIDB4NWQ5YTFmZWIsCi0JMHg5ZTQ1NzAwMSwgMHg0NDVlNjA2NywgMHhhNzBlOTdiZiwgMHhjMGY1YzQwZCwgMHg4YzFlNTc3MywgMHg5N2M1M2RiYiwKLQkweGIzM2FlNTgzLCAweDY3ZjdlNDhkLCAweDliNjFhZTg2LCAweGNmZWQzZGRjLCAweGZmN2Y2YWJjLCAweGI4MWVhZWQ3LAotCTB4ZDRiMmM0ZDMsIDB4Y2QxOTg0MjIsIDB4Y2FlZjJiNWIsIDB4ZTNlNjBjZjMsIDB4NjEyZjlmZTgsIDB4ZTJmMjkxYWMsCi0JMHg1ZGZiZmYwMiwgMHhlN2UwNDNiNCwgMHhkZWZlYzJiNSwgMHg4OTY5ZTgyYSwgMHhmZGMyMTZkNSwgMHhjYmE2NGQ2NCwKLQkweGE4MDU3NmRkLCAweGNhMjZhNjdlLCAweDA0YjMwNzQ4LCAweDg3MmFkYzFkLCAweDQyZmRmMWRhLCAweGIwNWNhMGQ2LAotCTB4ZmZiM2U5OTIsIDB4M2EzNzdlYWIsIDB4MDVkOTk1YTcsIDB4ODdhMDNmYWQsIDB4M2ViMDRjY2YsIDB4OTAwMzY3YTAsCi0JMHgxOTYwMjZkNywgMHgwNmIxMjAwMywgMHg5NWUxOTdlNCwgMHhkODVmZmRmZiwgMHg3NTgwN2Q2ZiwgMHg2YjllMTFjNiwKLQkweDA2N2I5NDE0LCAweDA1N2UzM2U2LCAweDYzODI2ZDY1LCAweDNjMzNjNjE4LCAweDM2NDNkOTJmLCAweDNmMGRjN2Q4LAotCTB4NWZiYTIwNGYsIDB4NTIxN2VjMjUsIDB4YTY1Zjk4YzYsIDB4NzRiMGY1ZjAsIDB4OGY3ZmRlN2UsIDB4ZmQwZmI3YTAsCi0JMHg1ODE3MzcyYywgMHhmNDc2MTNmYiwgMHhiMWU2MTk1MywgMHgxYjM3Y2UyYSwgMHg3OGM2YmRmMSwgMHgwYjgzNmIyYSwKLQkweDgxZGViNGY5LCAweGJmMjdjNTc2LCAweDA5MTQ1NDkwLCAweGM4ZGQ4NDZiLCAweDdlMGFhNTBlLCAweGEwMTM0Mjk3LAotCTB4Nzg1ZGMzYmUsIDB4OGQ0YmY1MTAsIDB4NmVjYjk3YTAsIDB4NjA2ZjdlNDYsIDB4ZmFmMjg1OGIsIDB4NTk2M2Y1ZDgsCi0JMHg5OTVjMDNmNywgMHhmZThhOGI3ZCwgMHhiNzY3ZTVlNCwgMHg3ZDgzMmVlNywgMHgwZWQ4YzBiMiwgMHhlODU0ZTc1OCwKLQkweDZhYTYwY2IzLCAweDczYTI1ODAyLCAweDAzZjUyMGRlLCAweDNjMDcwMWY1LCAweDM4N2VlNmRmLCAweGYzMTlkMzhiLAotCTB4ZmRiNDdhZTIsIDB4NmJkZWYwZDEsIDB4YjQ2ODYwM2YsIDB4NjY1NjhkMmYsIDB4OTBiMWZmNDIsIDB4ZmY5MDU3ZWQsCi0JMHg4Yzk5N2RiNCwgMHhmZmYwM2RjZSwgMHg5Yzc5MTc4NiwgMHg3NTgxODM2MywgMHhmOWFmMThjMywgMHg4ZDc4MGFkMCwKLQkweDRmNmE1ZjIxLCAweDI2NzY0MWJlLCAweDI3NDA1YmIwLCAweDE5ZGZmNjU3LCAweDFkOTVmZjViLCAweGZmZDc2MzMwLAotCTB4OThkODNkNmMsIDB4MzE1ZmY0MjcsIDB4MDM3YjI2MmIsIDB4YWRmZDA2OTcsIDB4NGIyNjZkMTAsIDB4ZDcxOTJlMzUsCi0JMHg5MTU1NmE5MywgMHg5ZTNjMzYxZSwgMHgxZDg2N2E0MywgMHhhMGY0NGRkOSwgMHhmYmZiNjNiNSwgMHg3MzZjOWQxMSwKLQkweDU1ZmY4NDRiLCAweGNjNGNiMDZkLCAweDRmZWI2OWQzLCAweGRhMzM4Yjc5LCAweDVjNzRhOTkyLCAweDk3ZTdhNzRiLAotCTB4OTRhYjdjOWUsIDB4M2ZiZTFiY2IsIDB4MzY5YTdmMzMsIDB4N2U4M2YyODksIDB4NmQ0YTg4M2EsIDB4YmQwNDFiMWUsCi0JMHhlMmJlNzg2OSwgMHhjOTNlNzgxNSwgMHhiYjA2ZDVmNSwgMHgzOTdkZmM5OSwgMHg3OTQ4OTg1MCwgMHgwYjEyMWQ4YywKLQkweGU0ZjczYzAyLCAweDU3ZTIxMzFjLCAweDZkNzRlNzhhLCAweDU3MzIzNzQ5LCAweGM0NTliYzBjLCAweGUyYjljNDdlLAotCTB4ZGVkMjJiOTksIDB4NjhjMjc4MGYsIDB4ZjUxN2NmZDcsIDB4NTFjOTA1MDksIDB4ZTZkZjdjZjUsIDB4YjdjZmU1ODksCi0JMHhmMzgxOWNhZCwgMHg3NWZkYWJiNiwgMHg0Yzc3NmNlMywgMHg5MmJhMjBlOSwgMHg1ZjM4Y2IyZSwgMHhlYjAzMDRjYiwKLQkweDM1MmJlNzg3LCAweDNiOTg3ZGZhLCAweGM2OWIwZjU3LCAweGQ1ZjI0ZTdmLCAweGJmN2EzZTM0LCAweDRkZmQwOTk5LAotCTB4ZmNmZjQ3OGIsIDB4MTdhMTNjYjUsIDB4ZTQ2MTU5MGEsIDB4OWZjMmY2M2UsIDB4MGQ3YzRhY2QsIDB4NzhlZjc5ZGEsCi0JMHg5ODc1ZTc4MCwgMHhlZGM1ZDA1OCwgMHhhZmM3YjQzNSwgMHhiNzQ0MmM3OCwgMHhkZTA0ZTNkYiwgMHgyMWU5YTUwYywKLQkweGE2NTg5ZjY4LCAweDQ3OTI1ZmM3LCAweDk1N2VhZjhmLCAweDdhYTRmYzdhLCAweGFiNDg3OGY1LCAweDY3ZDVkNmNlLAotCTB4ZWFlYjA2ZjgsIDB4ZDEyY2FjMDcsIDB4YzZlYjAzYzEsIDB4YjRkZmRhZWEsIDB4NzYwZTkyNjksIDB4ZGFlOWE2MDcsCi0JMHhkNmNkMzRlNywgMHgwYjJkNzljMSwgMHhlZDA3ZWQ3NSwgMHgyZmFiYTI1YiwgMHhkNWQ2YWUwYywgMHg0MWIyMzkwZiwKLQkweGZkNmQwZjA3LCAweGUxZmI1ZDE3LCAweGY1NzU1YjZkLCAweGJhMWRhMWM1LCAweDBmMWQxMWZhLCAweGUxOTFlMGU5LAotCTB4NDdlZDc1NDcsIDB4NTc1MDdiYmYsIDB4NjlmM2E2M2YsIDB4OGJiOGZkNWQsIDB4OWJlMGU5Y2YsIDB4YjVkNjVlYmIsCi0JMHhhOGVkNzA5ZiwgMHhkZWM4OWUwZSwgMHhiNzJmYjVkMiwgMHg0ZjA3NGVmZSwgMHhkNzQzZmU1NiwgMHgwZmY0OTZmZSwKLQkweDVkNTNmNTc0LCAweGE3ZWFlYjFmLCAweGMxZDU1YzE3LCAweDA5N2Q5ODc3LCAweGVhOTdjOGY5LCAweGNkZWY3NGRmLAotCTB4OGUxZmFlNjIsIDB4OWY5ZTNhMDcsIDB4MDA0MzU0NjIsIDB4ZmM4NWYzZGIsIDB4OGM5Nzc0MTAsIDB4ZGFlZDEzZmEsCi0JMHg3NDg1OTY1YywgMHgxZjFhNTkzYSwgMHgzMzZiYmEyMiwgMHg0NDU3ZThhOCwgMHg2M2Y5MjdlYiwgMHg2NWUzMDdhZiwKLQkweDhhODMyNWVjLCAweGIwNDRhYzcxLCAweGYxODhlNGViLCAweDcwNTYzYzkyLCAweDdlZTA3YjAwLCAweDRlMGU4YTk1LAotCTB4ZGFlYmE2ZjUsIDB4NzRiYjU1YTcsIDB4MDJiZTE5ZjUsIDB4OTU4MGZkNWQsIDB4NTgxZTBlYWEsIDB4N2Y2YmE2NTcsCi0JMHgwZThmMjZkMywgMHg3NTJhMDc3NiwgMHhiYzlhNzNlZCwgMHhhNWFmMzgzYSwgMHhkMDdlZDc1YSwgMHhiZWFlOWYzZSwKLQkweDU3NTJiODMwLCAweDlkNDhlNDNmLCAweGJhZGExZTBlLCAweDc4N2VkNzQ5LCAweDVmNTc0MDViLCAweGQ1ZDI2YTFjLAotCTB4ZDE2OGU4OGYsIDB4ZmJjMzIzYzEsIDB4YmY0N2VkNzQsIDB4OGZkNWQ0MWIsIDB4YWJhMjNjZTksIDB4NTViMTc3MWYsCi0JMHhkNWRjZGYwNywgMHhlMTNmNmJhNiwgMHg0ZjA3NDg1YSwgMHhlZDc1Mjc2NCwgMHg3NDY3YWRjYiwgMHgzZGU1NjRmMCwKLQkweGQyNWJmYjVkLCAweGE3ZWFlYWNmLCAweGVhZTkyZWJhLCAweDdhNjQ3YjM1LCAweGU3ZmFlN2MxLCAweGE5OTkzZWMyLAotCTB4ZmRlZTk3ZmUsIDB4NDMwZjI0YzAsIDB4NjczYzA4ZmEsIDB4YTA1ZGViNTAsIDB4YjliM2YyZmYsIDB4MmQxMzA3M2UsCi0JMHhjNjdiNDI0ZSwgMHhjOTQ1Zjk0YiwgMHg3MjA3YTA5OCwgMHgyMDYwMzEyYiwgMHg1Yjk1NDJiYSwgMHgxNDllZjE0MywKLQkweDUyYTQ1M2QyLCAweDAzNDc5ODVjLCAweGRlODFkZTdhLCAweGY2OGRkYjkzLCAweDlkOGY0MjZkLCAweDg4ZDVmOTk1LAotCTB4N2Q2NzZlNmYsIDB4MzAzODdkMWYsIDB4OTQ0ZGI2NWQsIDB4MGRlNTYzYWEsIDB4Yzc5ZjNmN2UsIDB4ZmJlNTBlMzksCi0JMHhhMmE3ZTQzNiwgMHgxNGVjZjExZiwgMHhiMTU3YjNiNCwgMHhlNzljMzZjMCwgMHhiMTI4YTk2NCwgMHg3MWE4ZTMxMywKLQkweDU2ODUzOGZhLCAweDY0NWViNTRlLCAweDc3ZGQ4NDcyLCAweGIzMjVhZTMyLCAweGZjZmUwNmU0LCAweDI2NjVlYjU0LAotCTB4NTdlODg4OGYsIDB4YjAwYzJmYzQsIDB4ZmQxMTBkZmUsIDB4ODA3ZTA4M2YsIDB4OGI3ZjNlMGMsIDB4NmMwYWY4MWYsCi0JMHgwYWZjODdhNCwgMHhlOWZkYmJjMSwgMHhiYmYxZWYwNCwgMHgyZmU3ZGNhOCwgMHhiZjUxZjJhMCwgMHhmZGZiZjU0YSwKLQkweGUxM2YwNDY1LCAweGY0MWMxMGY3LCAweGQwNzk1MjU3LCAweDg3ZTdhNWVmLCAweDNmMDRkNWZjLCAweDk2MzE3ZTA5LAotCTB4YzY0ZmMwNDcsIDB4NzdmMDY5ZjIsIDB4ZjAxOWZlYjEsIDB4ODVmZTExN2YsIDB4YWI2NTQwM2YsIDB4M2Y5ZTg5YmYsCi0JMHhmODIxNmZlNywgMHg4MjNlZmYwNSwgMHg1MjBmZTk3ZiwgMHg0MjNmZTZkOSwgMHg1NmZlY2JlNSwgMHhkZmM1N2ZhYSwKLQkweGZlNmJmMDQ2LCAweDdmMjFjMTEwLCAweGZkNDdjMTA3LCAweGZiOGY4MjYxLCAweDg0ZjgyNWRmLCAweDBlY2E5M2JmLAotCTB4ZGYyYTQ1ZmYsIDB4ZmQ1MTc3ZjQsIDB4ODIzNWZmMjksIDB4NmY1M2Y2N2IsIDB4ZjNlMzQ2ZmYsIDB4NjU1NzExMjMsCi0JMHgyMTVjNGVjMiwgMHg3MGE1ODdlOCwgMHgyNzM5NzBmYiwgMHhkMDQyYjYwNSwgMHhhODEyNjlhZCwgMHhmYTNmYjQ1NywKLQkweDNjYzQxZmU3LCAweDU3NDg5MWQ2LCAweGE3NTc0NDA1LCAweDFlZmQ4ZGJlLCAweDI1Njk3ZmVkLCAweDliZjcxOWQwLAotCTB4M2M3ODFiZDcsIDB4MjJlZmQzNDYsIDB4ZWZkMzQwNWYsIDB4N2Y3MGY3MzUsIDB4YmJkODExNzUsIDB4NDNmZmZmMTgsCi0JMHhhZjNmYjcxYywgMHhkMDBhOTlkNCwgMHhjNDMxYWI4ZSwgMHg1ZDJmNjhhYiwgMHhkOTMzZmJhOSwgMHhhZmNmMGM0NywKLQkweDc4ZWU0NTgxLCAweDQ3NjA3MmM1LCAweDAzNTZkZjg0LCAweGZkZTExYmVmLCAweDE4YjQ1OTk5LCAweDRjM2FjMzU2LAotCTB4MzMyYTJlNzQsIDB4MzU3YzA0OGYsIDB4MzdlZmEwNzYsIDB4MGY1NjFmYTgsIDB4N2ZjODA2MzQsIDB4ZDFmMzA1YjYsCi0JMHhhMDdkYmI2ZiwgMHg3ZWY0OGMyZiwgMHgwOWQ5NmVhNSwgMHhkMmEyOGZjMiwgMHg0YjRjZTBiOSwgMHhjNjNlNzUyOCwKLQkweDE0NGE0ZTQ5LCAweDFmMGJlYmRmLCAweDc4NWU0NGViLCAweDVkYWZmNTlmLCAweGJjM2I0NGNhLCAweDBmOTJlZmYyLAotCTB4YzliNGU3ZjcsIDB4ODM3MThkNWUsIDB4MWZiOWYyMGYsIDB4NTFiZTQxZmEsIDB4ZTgxZTVlNTcsIDB4ZmNmMzg3M2IsCi0JMHg3NmVlYmQ4YiwgMHgyZmYwYTAyMywgMHhlNGZmNTlkZiwgMHhiZjFlZWVkZCwgMHgzZDc0NTZmOSwgMHg2MmFlNWVjMSwKLQkweDI5ZTUxMzJlLCAweDZlMWJjZjMyLCAweGU2MzZlYWU4LCAweDBiM2U3ODIzLCAweGE2N2I3OTUwLCAweGQ3NWM2M2VmLAotCTB4ZDgyNDE2MDIsIDB4MTU5MmQ2MzcsIDB4ZjNkMTVkNmIsIDB4MDM5MDhiZmEsIDB4ZWEzN2M5N2YsIDB4YmU1OWZlY2EsCi0JMHhmMmYzZTRmZiwgMHg4ZjRlYmNkMCwgMHhkNzFmMjViOSwgMHg2MTZiY2RhNSwgMHgzZmU2OGI5NiwgMHg4MTNkNzU4YiwKLQkweGFiY2JmYmYzLCAweGU0MzA1ZjlmLCAweGZmOGZhNmY0LCAweDYxYjBiYTAxLCAweDMxZGEwNTk4LCAweGM3YThkZjNjLAotCTB4YWZhODFjYzQsIDB4Zjk0MGNmYmYsIDB4ZDQ1ZDFhZDksIDB4ZGYxMDQwNjAsIDB4YmNhMDZjZGIsIDB4MDEzYTFlZmQsCi0JMHgyYmJmNDBmYSwgMHhmMWVlOGJhNSwgMHgwZjI0OWQwMSwgMHgyMzE5M2E0MiwgMHg0ZjYwY2MwNSwgMHhmMzA2MzY5ZSwKLQkweGJjNWU3NDBkLCAweDg0NzE4Y2NjLCAweDFmNDAyOTE1LCAweGMxZDM3ZGQ5LCAweDQwOWY3MTVhLCAweDk1ZjQwZTdiLAotCTB4ZmE3ZGZkODksIDB4ODgwNWQxYWIsIDB4OGRhZjc1YWYsIDB4ZWFiZTIxNzEsIDB4ZTgwZmIwOGQsIDB4YTkyOWJlMjcsCi0JMHg4Yjg1MWYzYywgMHg1MGRjNjk3ZSwgMHg1OTMyNTc4YSwgMHgzNGNlMzE1NSwgMHhkZTViMTJkMywgMHhlOWM0MWY4ZSwKLQkweGE5YmE3NGU3LCAweGU5ZmQ0ODMyLCAweDA3NGE1NWNmLCAweDFkMmI3ZGYxLCAweGMzNzNmN2M0LCAweDQ4ZDcwZmZhLAotCTB4NDdkM2VmMzAsIDB4OTQ3ZGQxMmYsIDB4ZjRkZmYzNWUsIDB4YzQ2ZTYxNjYsIDB4OWRiNWQ3YmMsIDB4MjE4OWUyOWQsCi0JMHhmZThiZTdiZiwgMHhjYzkxYmEzNCwgMHg1YjAxZGY3NiwgMHhlOWJhYmNlNCwgMHhmYmFlMWM3OCwgMHhjNzQwNDkyZiwKLQkweDE3Yzc0NDM5LCAweDk2NzBmY2YwLCAweDFmMzg5NWM1LCAweDA5NDA0ZWNhLCAweDFmYmVlOWRhLCAweDJkZmZlNDJiLAotCTB4NGI5NTJhNjEsIDB4MTVjYTk3OTksIDB4Yjc0OGVkYjAsIDB4MzMyZWMwZGUsIDB4NmIzNTdiZTIsIDB4Y2I2YmU3YTUsCi0JMHgxZDIyNzRlZSwgMHhjOGZhMzcyZiwgMHg5OTgzNWUyZiwgMHhjYjllNzhiNywgMHgwMWQyMmFiYSwgMHg2ZDM1Yjc2ZiwKLQkweGQwMWQyMzc5LCAweGQ3NjVhNzM3LCAweGNlY2Y4YzY0LCAweDAzN2UyZTBlLCAweDg2NDNhYWNiLCAweDBhODc5ODBiLAotCTB4ZTcwYjMxN2MsIDB4NmJhODY5ZDUsIDB4MmZlMzBmZWMsIDB4ZTM2MjY2N2MsIDB4NGIzZTc4MDAsIDB4ZGVjMWZiZTIsCi0JMHhjOWExZmJlMiwgMHgwMzc1ZTg4ZCwgMHg5NDFiY2MxZiwgMHhkMGYyZWI4YSwgMHhhNTQ3MjRiYSwgMHhiNjZhMGY4ZSwKLQkweGE1MjE4ZjMyLCAweDliYmUxZjI3LCAweGZhZWVjYTJmLCAweDVmOTQwMGQzLCAweDA3YzUxNzcyLCAweDQ5NjZiZGQ2LAotCTB4Y2Q1ZTdkYzYsIDB4ZjA2MDNkYjgsIDB4Y2QwZmYxNjgsIDB4ZTc0NDYwMGUsIDB4MTU3OGIxNzcsIDB4ZTgyNDdkZGIsCi0JMHg4YzgxYTNmYSwgMHgwMzIzZmFlOCwgMHgzZDI1ODQzOCwgMHhmMmNiMjlmNiwgMHhmNGU0OTdhNSwgMHhjNjc1ZWJlOCwKLQkweDllMjE4NjY3LCAweGUyZDc5ZjQwLCAweGQwN2Y1NzdjLCAweDhkZDhhZGJhLCAweDg1OTgzZjcyLCAweDY5ZTk4OWY2LAotCTB4ZDZlZjVhOGIsIDB4NTVmNjE1ZTksIDB4ZWI1YzRmNDIsIDB4M2I4ZjEzNDEsIDB4NTBjYmNmNDUsIDB4ZDBiZmUyNzYsCi0JMHg1OTk4YjExZSwgMHg4MDM5Y2YwMCwgMHhlNDI4ZDlhZiwgMHhlMjY2ZmVlNywgMHgyZDQ0N2FhYiwgMHg3OTI2YzdjNiwKLQkweDU1N2NmYzVkLCAweDMxNjlmZmRmLCAweGI5MmY4ZWRmLCAweGY1ODAxYzNmLCAweGY3YTQ5YzYwLCAweDU5NGY1YzM4LAotCTB4MjFjNjdiZTIsIDB4MzQ2NGUxYjksIDB4OWM0MWNlY2UsIDB4OThmMWI1N2YsIDB4ZWQxMzMzYWQsIDB4N2RlM2ZiZjcsCi0JMHhkNWZkYzAzZiwgMHgzZjlhM2RlMiwgMHgzMGZlZTFkOSwgMHg4ZDk5ZWU5NywgMHhmNzQzNTRiZCwgMHhlODU4YzYzNywKLQkweDIyYWRkZjdlLCAweDE5NmI3NjBlLCAweGFhZGQ4MzhmLCAweDQ3YzZiZGM1LCAweGUyYTJiZGM1LCAweGVjN2M2YzJmLAotCTB4OTcyNjk4MzgsIDB4ZWZjOTUzMTksIDB4ZDA3ZjY0MmQsIDB4MTdmMTRmZDYsIDB4ZDJmNjBlNGQsIDB4MzA5MGIwYWIsCi0JMHgxNDVkYTVjNSwgMHhjYjhlZThhZiwgMHgxZTc5OWIxNCwgMHhhZDMwNmI4ZCwgMHhlNGU0MmNjNywgMHg0Zjk3MmY0ZSwKLQkweGQ1NjlmYmRhLCAweGZjZThjMmUwLCAweGQ1Y2IyYjA4LCAweDBlOGExMWY5LCAweGFlOTc1ODFlLCAweDI2ZDM3ZjZiLAotCTB4MWRkZWFlOTcsIDB4ZTdkNWQwMjgsIDB4MzgzYWE5MzQsIDB4ZDc0Y2E1YWYsIDB4OGYzZWQwN2UsIDB4NTYwYzJlMGUsCi0JMHgzOTBmZGFlYSwgMHg0M2MxZDVlMiwgMHhlZDc1YWI1YiwgMHg3NGY5Yjc4NywgMHg5NWExYzVmNSwgMHgxZDExZmFiYSwKLQkweDY0NzgzYTc1LCAweGZkYWU5Mzc4LCAweGJhMDM3N2U4LCAweDRkOWQzMWZhLCAweDE3NzFmYWJhLCAweGNkZjA3NDViLAotCTB4ZWQ3NGZiNWQsIDB4ZWEwYjVjMjcsIDB4YTdiMjI3ZWEsIDB4ZDZlNWY1NzQsIDB4NjRmMDc1NjcsIDB4ZjZiYTU3ZTUsCi0JMHg3NGZkMGI4ZiwgMHhlZWJiN2E0YiwgMHg0OWQ3NTRmOSwgMHgwYmQzN2JkZCwgMHhjN2UwZThjZSwgMHgwZjkxOWY3MSwKLQkweDBmODk5ODE2LCAweGU5ZWZhYTY2LCAweDEwZjI2N2RlLCAweGUzOWI5MzhhLCAweDFkZmRiM2Y4LCAweDNjYTMxNDZmLAotCTB4MTcwYzZmZGMsIDB4NmUzZTlmMjMsIDB4Zjk2Mzc0ZWMsIDB4YjViNWMxODQsIDB4Y2U0OWQwMWYsIDB4ZDYxNDg5ZjgsCi0JMHhiYzU4YWJjZSwgMHgzMzQxY2IxNSwgMHg1ZDUzMThiNiwgMHgwZjczMWZiMCwgMHgzOTNkNDU2YywgMHhlOGRkYTZhNCwKLQkweGQyZTg3ODA0LCAweDg4OWQ1YmIzLCAweDI5MDYzNWY3LCAweGQxYmRmMTBkLCAweDg4ZTU4ZjVkLCAweDc0YTUxM2NkLAotCTB4YjBkOTFmYTgsIDB4ZThlNTFlYjgsIDB4OGIzM2U2ZTgsIDB4MDA3NDk2ZDEsIDB4ZmUzMTg3Y2YsIDB4M2U4ODdiMjUsCi0JMHg2OTE4NjYzNywgMHhjNjQ3MWJkZSwgMHhjZWRjZGU1MywgMHg5ZDE5MzZiMSwgMHg5YzNiOWQ5NiwgMHhkYzBmMTgwZCwKLQkweDA5YTRhM2I5LCAweGJmNjA2ZGNiLCAweDM1OGNjZDA3LCAweGU1OGVmZDgxLCAweDgzZGZiMDBlLCAweDNjNmM4YmUwLAotCTB4ZTQyNGU3ZjMsIDB4NTNhNmU1NDcsIDB4YmYyZTc4ZTksIDB4YWE0N2QyN2QsIDB4NGExNWM1NTEsIDB4YmY0MzhmNzMsCi0JMHgyMmYxYTljZCwgMHgzYjlhNTE1ZiwgMHg0ZWZiNzQxMSwgMHhkZjgwNDllNCwgMHgxNzMwOTIzZiwgMHhlMWEzNzBmMywKLQkweGFkNzg4NzE3LCAweDcyZjdjODA1LCAweGJhZWQxYjhiLCAweGFjMDZmZDVlLCAweGZlMDE3ZWZhLCAweDkyN2FmZDY2LAotCTB4MWU3ODVmYjEsIDB4YWQyMTZmMzMsIDB4ZjdlMWViODAsIDB4ZGU1YThjMGIsIDB4NzE1YmU1M2EsIDB4YjA0YTFjNTMsCi0JMHg5ZTQxMTIzZiwgMHhmMGU5OGYzNSwgMHhjYWJjMDBhZCwgMHhlZTgxOWQ0YSwgMHgyNmZiOGIwOSwgMHhmOGE2YWExOCwKLQkweDI2YWZmNWVlLCAweDJlOWMwM2M0LCAweGU0NTFkYmRlLCAweGZlODAyYmNiLCAweDljYTA2MDZjLCAweGY0OTdhMDhiLAotCTB4ZDA0NzAwYTUsIDB4ZWZjMDVlYzcsIDB4Zjk5ZWRjYjksIDB4MDYzMGVlOTgsIDB4YTYwYjkwNjQsIDB4MTU1NTc4OWYsCi0JMHg1MTZjNzljNiwgMHg3Yjk3MzkzYywgMHgyMjNiN2FjZCwgMHhkYzhkZTQ0ZiwgMHhmNzE0NjA1NywgMHg2OGE4ZTY1ZiwKLQkweGMwNTdkY2ZmLCAweGZlMjNkY2Y1LCAweGU3Y2ZmMzhiLCAweGYzNWRmZjYyLCAweDMyOWUwM2NmLCAweDBmOTg4Njk2LAotCTB4ZjU0ZDk5ZTQsIDB4NjExYTk4YWEsIDB4YjE3NTY3YWEsIDB4ZjE5YmM4ZmMsIDB4NmZiYzA2MTIsIDB4ZWU5Mjc2M2EsCi0JMHg3MDJhYWZhZiwgMHhkNDMyNWUxMSwgMHhmZjc3NWExNiwgMHg2NDZmZDBhNSwgMHgzM2FlNGQ5YywgMHhkYTQwM2U2MCwKLQkweGNlMDMzYWU2LCAweGFhZjE0ZDJmLCAweGFjYzc4ZTc4LCAweGJjZmRkZDRlLCAweDk5N2Y0ZGI0LCAweGE3ZTQxZTdmLAotCTB4YjE1NWVmYzksIDB4NDZiYTY5OWQsIDB4MjIyYjIxOGYsIDB4OTI1YWFhZmIsIDB4NDdjYzYyYzgsIDB4ZmM5ZDZkMmIsCi0JMHg3YWFmYThmYywgMHg3NTliYzk0NywgMHg2MjVhMzc5NCwgMHhkMTExZTE3MywgMHhlYWI2YzVlMywgMHg3YmY2MzEwMywKLQkweDY2ZWZkODk1LCAweDliN2M3ZTg3LCAweGU0MjAzZTc2LCAweDcxODU1NWY0LCAweGY3ZjgyMTNkLCAweDZiMGUyNGVlLAotCTB4NWM1ZGRjZmQsIDB4ZjljMzc2OTIsIDB4Y2U3NDYzZWUsIDB4MzBjZGMxYTksIDB4ZjlhOWUyMGUsIDB4ZDcxNWJiN2EsCi0JMHgwYjc5OGNkZiwgMHhlOTE4MmZhNCwgMHg1NDdlMjc4OSwgMHhhMTg3NjA3MCwgMHhhMmY2M2VmNywgMHhjNGZjYTA0NywKLQkweGNlOGZhNDEyLCAweDgzZjAzZDYwLCAweGEyYWNkOGJkLCAweGRlZmI2NDVkLCAweGRlZWEwMzcyLCAweDg5NDc1Njc0LAotCTB4MTU5MWI2MzcsIDB4MWJiMGYyMWQsIDB4NGY1YWFmY2MsIDB4M2QzZTY5ODcsIDB4OTdkOTMyOWQsIDB4NjJmYWY5NDEsCi0JMHgxYzNkMzUxZiwgMHhhZmE2NmZiZCwgMHhjODcyZDI3MiwgMHhkOTc5ZTJlZSwgMHg2N2ZlNGUxYiwgMHhlZjAyMmY5YywKLQkweDU1N2MxMjNmLCAweGU0MjQ1YWM2LCAweDk1YWNiMTkzLCAweDRjMmNmMWNhLCAweDE3NTg3N2U1LCAweGM4YTYxZTk1LAotCTB4MmE2MjRlNTgsIDB4NGJjYzE1OTUsIDB4NDc1NjE0ZTUsIDB4YTE2YjI1NjUsIDB4YTU2YjFhNzIsIDB4NTMwYjA2NzIsCi0JMHg5NTBhZmUwOSwgMHg1ZjkwYTY1ZSwgMHgzNmY0MWIzNSwgMHg5Nzk5NzM5NiwgMHg4ZWFjNzljYSwgMHgxZDIyOWZjYSwKLQkweDU5YWIzZTAzLCAweDU5MGJjMTBiLCAweGMwNmQ5NTJiLCAweGZhYTU3ODdmLCAweDU4NmY5MDY1LCAweDBkZjIwMmJlLAotCTB4ZTlmY2Q3Y2IsIDB4MmVmYzg2NTQsIDB4YmY0N2NhZTYsIDB4ZTNjYTgwYmYsIDB4MTNjYTk1N2UsIDB4M2IyYTMyZmUsCi0JMHhmNzZhMWVmYywgMHhjYTkyYmZhNiwgMHg5NTJmN2U1MywgMHg1NGQ1ZmRhNywgMHg2YTNlZmQ4NiwgMHgyNTdmYjZmNywKLQkweGViZjhlZjk1LCAweGZmMzdmY2E4LCAweGY1ZGYyYTI2LCAweDc3ZmNhODA3LCAweDc5OTUxMzdmLCAweDM5NzY0NjY2LAotCTB4Y2YxNTA4MmIsIDB4N2U2N2ZjMDYsIDB4NjBiOGY2NjAsIDB4M2MwYWFmMWYsIDB4NTMxOGYzMWUsIDB4ZmY3MDUzMGIsCi0JMHg0ZGYxODY2NCwgMHgyMjMxYzU1YiwgMHg0OGNiOWIwYSwgMHg1YzlhZGRmNywgMHgyODlkZDk0NywgMHgzYjczNGYwNywKLQkweDI3NjY5ZWNkLCAweDcyZDZkMDNiLCAweDYxM2U2MTljLCAweDRhNTNhMTliLCAweDc5M2NiZDgwLCAweGQ2Yjk4ZWU0LAotCTB4YWY5M2QwNDIsIDB4MTUwNDg2YjAsIDB4YWRiYmE1ZTEsIDB4MzA5ZTA3YTAsIDB4MDI3ZWViODUsIDB4OTYwYmM3ZjUsCi0JMHhjZTgyYjVjYywgMHhmYjdmNmIxYSwgMHg0YzM5YTdlMywgMHhiMzhlNjNmNSwgMHhkZmUwMDU3YSwgMHgxYmIxNTkxZSwKLQkweDNjZTEzMGFmLCAweDU3YmVkZTUwLCAweGU2MmU3YWIwLCAweGYyMTU1ZmViLCAweDAwYzM3YzAyLCAweGI3YWQyZGU1LAotCTB4YjE2ZjMxMDUsIDB4MzE2OGU1YjgsIDB4NzUzMWI2MmEsIDB4MzdkNDEyYjYsIDB4MWUyOGVkMTEsIDB4ZThiYjU3ZDAsCi0JMHhjN2JkZWQ3YSwgMHhlMjEyOWQ2YSwgMHg2NGNmZjlhMSwgMHg5Y2NjYjM3ZSwgMHg5ZGM2MzE1MCwgMHg3ZTM1ZmIyMiwKLQkweDc0OTlmMWIzLCAweGRiMjNmMTgzLCAweGRmZDA2ZTE5LCAweDlmY2YyMjhlLCAweGZmZmNjZjUwLCAweGZhNjhmM2E2LAotCTB4ZWM3NTdkMzYsIDB4MDYyZWZhNTksIDB4N2U0MzhhZWIsIDB4ZTVjNDk4M2UsIDB4YTVkODE3NGQsIDB4MGIzNGRmZTgsCi0JMHgzNjRiNzliOCwgMHhiNTA3YTlkOSwgMHhjYmVmYjM3YywgMHg1ZTMwN2Y1NCwgMHhmMDgxZDJiZCwgMHgzNzhhNWM5NiwKLQkweGUyNzkyNzM0LCAweDYzN2RiMTBiLCAweGNjOWRjOTM2LCAweDYzNzk0NjA0LCAweDhhMTNkNTNiLCAweGUzZWY4MjJiLAotCTB4YjJmY2I5MGIsIDB4NzI4NWZjZGQsIDB4ZWZlNWNhMjcsIDB4YWU4ZjBjY2IsIDB4M2JmZWZhNmYsIDB4ZGUwMGI3MWQsCi0JMHgwNTQ2OGQ1YywgMHhlNmYxMmRmNywgMHg3ZTUxMmE3NywgMHhhM2NiMzcwNCwgMHgxOGUzMjEyNCwgMHgxMjc5MmZkNSwKLQkweGFhOWRhNmZkLCAweGY2MWYzZTM5LCAweDBlYTIwMGY1LCAweDFiMjZhY2VkLCAweGZkOTk1OWQ5LCAweGMzNzdjNTQyLAotCTB4Y2YzMjhkNzgsIDB4NmY5NjhhZmYsIDB4OWNiOTBiYjMsIDB4YzM0YmRhMzcsIDB4YzBiNzZlNzQsIDB4NDQ3OGMyZWEsCi0JMHhkOWIwZjI1ZiwgMHhmM2MyY2FlZiwgMHg2ZmJjNjc2NCwgMHgyODdlMDMzMSwgMHg0YTY3NmE3YywgMHhhNzczMjgyMywKLQkweGEzMTNkYjgzLCAweGY2NDgzYTlmLCAweDI3YzhiMzQ0LCAweGQyMzE0YzZkLCAweDI1NmM0OWY3LCAweDQ0NTIwM2NlLAotCTB4Yzg3MzM2YmYsIDB4MzZmOGU3ODUsIDB4YjE2M2UwYTMsIDB4MzIwN2U2OWUsIDB4ZjdiNzVmMjksIDB4ZWZiYTVkM2MsCi0JMHg5ODU1ZDkxNSwgMHg2ZTFjODQ0NywgMHhlZTgxNzExNiwgMHgzZmY0NDZmMSwgMHhjZGM0NDUyMCwgMHg0YTkwOTY2YywKLQkweDRiZmE2OWUzLCAweDNmYzc2ZjFiLCAweDkxNGVkZTM2LCAweDY3OGRhOTI3LCAweDlmNWZhNTFmLCAweGY1YTYxY2RkLAotCTB4YTFmZDg1ZDksIDB4ZDcxM2I3OGQsIDB4ZTMwZjIzMTcsIDB4ZjVjM2M3NmIsIDB4NWEzNzhlNDUsIDB4MjViYjNlYmYsCi0JMHg0YmIzZWI0YywgMHgxZWU5NWVkYywgMHhmMWVjNDc2ZiwgMHg0ZjY3MWFmYSwgMHg1NjljZmU1NCwgMHg3MmU0MmZjZSwKLQkweDc2MzJjYzE1LCAweGQzM2ZmNjBlLCAweDA5ZjllOWMyLCAweGQ5YzVkMzEzLCAweDdlN2EwOTM3LCAweGE2OTc4OGIyLAotCTB4OTkyZTVjMDksIDB4Y2ZiYTY2OWMsIDB4NzE3OWQxMzMsIDB4NmRiNWQyMTcsIDB4OWRjZTkxYjcsIDB4YzgyNzI5NmMsCi0JMHg0ZWQzOTI3ZSwgMHg0MGZjODkzMSwgMHg5ZmNmOGFkNiwgMHgwMmY3ZjAzMCwgMHg3OTk4ZTZhOSwgMHhlMWZjN2IyYiwKLQkweDcxMTFiOWY5LCAweGNlYjUzNGUzLCAweDEzNGZmOTgwLCAweGUzMGMxZDlkLCAweDMzMTRiNmVjLCAweDYyOTZkZmFkLAotCTB4ZmNhMWM2MGQsIDB4Y2Q4MDk5NTUsIDB4ZGI4MDA0YzEsIDB4MGIxYjdjOGIsIDB4OTU0ZTNkNjEsIDB4YzUzMzhiZjMsCi0JMHg5MmYzMDA3YywgMHhkZmExYWFkMiwgMHg4NGZmN2QwOCwgMHg3NzI2NjNhMCwgMHhlZTIyYWJiYSwgMHhjNDViM2NkNywKLQkweGFmOGQ0OWVkLCAweDcyMzdlN2EzLCAweDQxZmY1ZjMwLCAweDRmMzFlN2YwLCAweDhmMGM2YmE3LCAweGRjM2U5YzkzLAotCTB4NTk4N2ZjOWYsIDB4ZDA3YmM2MGYsIDB4YzBmZDNlOGYsIDB4Nzc4MjBhZTAsIDB4ZjVmM2E1OGMsIDB4NGVjNzg3ZDMsCi0JMHhkNjYyN2Y0MSwgMHg4MjQ2Njk4ZSwgMHhlMzAzYWMwZCwgMHgyYzc2YjMxZiwgMHhjY2YzZTIzNCwgMHhkZmZiNDYxYywKLQkweGYyNGNkNjc1LCAweGQ1OGVkNjc1LCAweDRjYmZmZGEyLCAweGM2NjVmNmMxLCAweDZlMzBjZmMwLCAweDkxZWY3NjUwLAotCTB4OGM4YjhjMDQsIDB4MDAzNzNmYjUsIDB4Y2VjNmQzY2IsIDB4YTA3ZGY4OGQsIDB4MWJmNjE1NWIsIDB4NWJiY2Q3MzQsCi0JMHhiMjI4ZWQ5MiwgMHgzNmM4MWVhYiwgMHg0NGY1OWZhMSwgMHg5OWJmM2YyMSwgMHg5ZTI2M2NjMywgMHhiZjI1ZTE4NywKLQkweGYwOTFmYzdlLCAweGZiYjJiYzMxLCAweDcyYWVkNjlkLCAweGI0ZjZjNjNjLCAweDljYjFjNzI5LCAweGRhZjE1MjE0LAotCTB4ZjBlOGFiMzIsIDB4NGE3MmM3MWUsIDB4Y2QwMmFlYjgsIDB4NWI3N2NhZDksIDB4MzE1OTYzOGUsIDB4ZTIwNGY3ZGMsCi0JMHg0NmY3ZjBmNywgMHhjNjE0ZmM5NSwgMHg2ZTZmYmFjOSwgMHhkOTNiZGEzYywgMHgwZjI3NDM1YiwgMHg0NGQ2NWM1MCwKLQkweDk0ZjZjMmY3LCAweDE4MjQ5Yjc5LCAweDZiY2I4ZjZmLCAweDI3YjQzZDQ1LCAweGYyNDhkYjI1LCAweDI1NmVhOTM1LAotCTB4M2M2MDczYWQsIDB4NTFlZTc1YzMsIDB4NDVjOTcxN2MsIDB4YmVjOTc3MjQsIDB4MTFlYzEzN2YsIDB4ZTdlZWZmZGMsCi0JMHgzM2Y5ZmNmMSwgMHgxNTFhZmU4MiwgMHhmODg5MzVhZiwgMHgwMjdjYTE0MCwgMHg5YWNiYjA5YiwgMHgxNTFkMjc5OSwKLQkweDA0Zjc2Y2ExLCAweGM3YjcyZTMxLCAweGMwNzhlNWMzLCAweDZjNTJmZGM2LCAweDU4ZWMwZGJlLCAweGVjNjk5MmJhLAotCTB4OTU1OTRmZDksIDB4NjBjNzc5ZjUsIDB4YjJiZjYwZGUsIDB4MTBiMjg3NjgsIDB4YTZiYzVmZWQsIDB4MGZlODMwOGEsCi0JMHhjNjFkNWRmZSwgMHhlNmRkYTFmNSwgMHgzNmJlMzhhNCwgMHhmYTE0Yjk3ZiwgMHg5YzMzYTA4YiwgMHhjZjViNmNmZiwKLQkweDY3YjhkYTdiLCAweDIzN2U3YWM0LCAweDFmMWVmNGU0LCAweGVmOWI0ZmVmLCAweDQ2MzcyOGRiLCAweDQ2NWRiY2QyLAotCTB4ZTYyNDhmOWMsIDB4NDYzMGViMDMsIDB4MWRhMjI3Y2MsIDB4ZGU3YmFmYWQsIDB4ZjdlNzRkNGMsIDB4ZGY4YzNkNGQsCi0JMHgzOTJlNjU0MywgMHg4YjBlZmQ2MiwgMHgxZTkxMmFkNywgMHhiZjQ4MmEzNCwgMHhmOTQ4ZDU3NiwgMHgyZmRiNzZmYywKLQkweDdhM2YwZjI5LCAweDc5MGExNzFkLCAweDcyODdlYWJjLCAweDM2NWZhMTg4LCAweGU0MzBmNTRkLCAweDFlMmExZmNiLAotCTB4MDE2NGFiYjIsIDB4MGVkYzI5Y2IsIDB4NjI0ZmM3OTMsIDB4Y2FmNTg4YTYsIDB4ZGRhODkzMjksIDB4ZjE4ZjY4MzQsCi0JMHgwOTY1NjljNSwgMHg3NGViZDIyYSwgMHg3MGEwZGFkNiwgMHgyZTc4ZTAzZiwgMHgzMThmMmZjYywgMHgyY2I3NWU1ZCwKLQkweDlmYWFjN2UwLCAweGYwYmI3MmFiLCAweDdiNGI1OTJhLCAweGY3NDVkYTAxLCAweDlkYmNhNzJjLCAweDNhZDMwZDg2LAotCTB4MDVlOWJlNzAsIDB4YTE5M2RiZWIsIDB4ZGYzOWZiZGUsIDB4ZTNjYzU2NzcsIDB4Y2I3NjAzNzIsIDB4OGNkZmJjYmEsCi0JMHg5ZTQ3MDA5NSwgMHgzMGY0ZmI1ZiwgMHhiZGFlODNkMCwgMHg0MzM2NTc0NiwgMHg4NDc2ODJhNSwgMHhhZWZhZTEzMSwKLQkweGVjYmY5ODNjLCAweDJjMWJmYWUwLCAweDQ2MzczNjVjLCAweDVkMTdiYTNjLCAweGZiNmJmYzA5LCAweDRiOWMxZjYzLAotCTB4MWM2ZDk0ZjgsIDB4YjU0YmFjZWYsIDB4ODlmN2M2ZGUsIDB4ODRmZThkZTgsIDB4NmQ4MWVhZjEsIDB4YmViZDFmMzEsCi0JMHg3ZGUyMGE0MiwgMHg3Yjc3N2I0YSwgMHgxYWZiOGE5NiwgMHg5NmQ5NGZiZCwgMHhiODc5NWRhZSwgMHhjYTQ2NzVmZSwKLQkweDJiYzY4ZjBmLCAweGI5YjcxMWQ4LCAweGE0ZDZjZTkxLCAweGE3M2MzZDUwLCAweGU4Y2M2ZjdjLCAweDhhNDdlZWU5LAotCTB4ZTNmN2ViMDUsIDB4Y2EzZmRhZWIsIDB4YmU3OGJiODIsIDB4N2E3OWZlYTksIDB4MDU5YmM5NGEsIDB4NTAwNzE0YTUsCi0JMHhlYmViMzZmOSwgMHhmN2VhMzZmMywgMHgyODNhNjMxNSwgMHgxNjU0ZDNjNywgMHhmZGJmYjkwYywgMHgzOTRiNGU3ZSwKLQkweGJkNmNjMTU4LCAweGJiYTM1NWY3LCAweGU1YjE3ZWNjLCAweGNlNDIxYmZjLCAweGQzMjgyNjY3LCAweGE3Y2U1MDBhLAotCTB4ZjNmZWM5MWEsIDB4MjM1MzFhYTYsIDB4ODMyOWRlZmQsIDB4ZjA5Y2ZlYjksIDB4MzdlNDhkOTIsIDB4Zjc0YWMwZmIsCi0JMHgzODUwZDRkNiwgMHg0OWM0ZWQwMSwgMHgzZWM5MTg1ZiwgMHhkMWQ0ZTM3ZiwgMHgzOTQxYTc4NywgMHg5YjRiMzdmOSwKLQkweDBjZTRkZGIwLCAweDg2ZWQwZTc4LCAweGM0N2Q3NGJlLCAweDg0Yjc2NDlkLCAweDVmNWY5MTBiLCAweGVkOTNhMTY2LAotCTB4NGMzYjFmYTgsIDB4MmRhN2JkZjQsIDB4MjY1MzZjOWYsIDB4NGNhYmZlZTEsIDB4NmQyOWRjYzUsIDB4ZGM2MjE1ZGMsCi0JMHg1ZTAyOWI1ZiwgMHg5OTZlYTc5MiwgMHg1MWU3ZTQxZCwgMHhmNmQyYmZkNywgMHgyODY1Yzc4OSwgMHhmMDM2NTc3ZiwKLQkweGJhZDU3YmI1LCAweDk5OTdkMjNhLCAweGYxNDJjYzQ1LCAweGQyMmFmMGVlLCAweDE5ZTMxYmM3LCAweGE1NmNjYmYyLAotCTB4Y2YwOGJiZjUsIDB4NDY2NGVjYmUsIDB4ZWFiNjZmZTgsIDB4ZjNjNjJkMzIsIDB4Y2U2NzYxMTksIDB4NDRkMzU0NTEsCi0JMHgzZjk1NTUyYywgMHg3M2U3ZjJiNywgMHg5ZjNkMGYxNSwgMHg3M2Y4N2FhYiwgMHg2ZmVmZjcxYiwgMHgzZjYxMDI1MywKLQkweDJkOWI3N2Y0LCAweGRkZmQ4NWQ5LCAweGZkNzk3YWE2LCAweDlmZDUwYjM1LCAweDE3MmZmZjAyLCAweDE3MWFjMTU4LAotCTB4YjdhZTUwNTAsIDB4ZjNmMjM0NWMsIDB4ZDEzYzVmMmYsIDB4YTRhZGEzN2IsIDB4MmJmMzg1YzMsIDB4MzZmZGQyMzUsCi0JMHgzZWU4OTNiMCwgMHg0YmM1NGVmMiwgMHgzMmY3OTFmNywgMHhmODIyMDY1ZiwgMHg2NGQ5ZDJlNSwgMHg2MjljYmY0NywKLQkweDJmNGI3YmE0LCAweGJmMGM4YzdiLCAweDkxYTgxNDAzLCAweDQxNDIzZGY5LCAweDY3NTcyZjQ3LCAweDM2NTRmOWQyLAotCTB4ZWJmNzEzMjIsIDB4NDNiMjU2YmIsIDB4MGZhMGYxMWEsIDB4ZTdmNzU3ZGIsIDB4ZjZlNjQyZmEsIDB4Mjk1MWJlYzMsCi0JMHg2MTYxZGVkNCwgMHgwNzQ4OTVjOSwgMHgzYmNhNjU4NywgMHgxZTc4ZTFmZiwgMHg2NTBmOTQzZiwgMHg3MzVlZDEwNywKLQkweDVkZjllOGQ2LCAweGU5YzQ5ZDJlLCAweGYyMGE2NTQxLCAweDI1NTUwY2MxLCAweGNkZGZhZmJhLCAweGY4OGJhMzU0LAotCTB4N2Q4N2RlOWUsIDB4MmNlZTc1YTUsIDB4MWZhMmJiN2QsIDB4NTU1NDZiYzIsIDB4OTNhMThjZTIsIDB4NmZhNWY1MTcsCi0JMHg4Y2Y4M2M3MywgMHhiM2JlNDc5NCwgMHg5YmVmYmM1NCwgMHhkN2M3MDg3NCwgMHhlMGIwN2NmOCwgMHhmNGFlNGQ0ZiwKLQkweGY1MmE0Mzk2LCAweGE0OWE0ZjYzLCAweDMwNjgwMGVlLCAweGJmZmM4MDBjLCAweDUxY2YwY2NmLCAweDc0Y2IyNDJlLAotCTB4YTk3MDZhZGYsIDB4ZjU4NjUyMWMsIDB4ZTg4NjdkZjAsIDB4NGZlMGIwNzcsIDB4Y2Y5ZTg4ZjksIDB4ZTFlOTBlZjIsCi0JMHhlZWZmMDQ0NywgMHgxZmI5MjE2MywgMHhlOGMyZGJmNiwgMHg4YjQwNmE1YywgMHgzZTc4MWRiZSwgMHhkMTYzOTQwNiwKLQkweDIyYWJmYzdjLCAweGQ0OGYxNjgzLCAweDllMTdhMWUxLCAweGQ5ZDdiMTdkLCAweDVjNDBhZWIzLCAweGM4Y2JhZDNlLAotCTB4NWRlNDI1ZDcsIDB4M2QyYjZkYWUsIDB4ZDU2NDU1Y2YsIDB4MmQ2MmYzODUsIDB4MDdmYWUzNmYsIDB4NDBjMTkyMWMsCi0JMHgzNTJhZmQ4NSwgMHg3ODAxY2VjZSwgMHg3MTI2NDA0NiwgMHg0OTg1OTMzNywgMHhiYWRkN2M1ZSwgMHgyYjVjNDUxYiwKLQkweGViZDE5ZDdhLCAweDQ0YjA2NWJiLCAweGYxY2NjYmViLCAweGNhNmVjOTc5LCAweDMyNmVjOTkwLCAweDE4YzIwMDZkLAotCTB4YmRiMGQ3OGUsIDB4YTM3MTZlM2IsIDB4ZDRmYjNiM2QsIDB4ZTY0MzkwNjAsIDB4MTgyYjU2N2IsIDB4ZTQyMzNlMGYsCi0JMHg4OTJiZTk5MiwgMHg1NmZkZDdkMywgMHhkYTUzNTdhMiwgMHhmYmM4ODI4YywgMHg0Zjg2OTcyYSwgMHhmMzE4MzMzYSwKLQkweDdhYmFiZmJkLCAweDRmOGYxMDcyLCAweGU1YTNmZTExLCAweDdmNDU1ZmRjLCAweGY5ZjUzYTYzLCAweGM2MmVlMzg2LAotCTB4ZTljN2U1NDcsIDB4NWMyNzBkZjMsIDB4MWY5NTFmZWIsIDB4MWY5NTEzOTcsIDB4M2Y1NzQ0MzcsIDB4OTUxMTE5NTksCi0JMHgyYTJlMzcxZiwgMHgwNzVjYWUzZiwgMHhhZTk4MmY0ZiwgMHg5ZDUzM2Y2YiwgMHgyZDZmODNhMywgMHg3ZGFlYWVmYiwKLQkweDVkNGVlNzk1LCAweGJiY2E5Y2ZkLCAweDc5YjdmNTc0LCAweGYzYzFkNmVmLCAweGI1ZDdlZmFiLCAweGQ3YWJlMDVmLAotCTB4ZTU3NzdmZDUsIDB4MjBmNTc0MGYsIDB4OGJjNjYyMmYsIDB4Zjc0YTNjMzEsIDB4NjEzZGQzODYsIDB4MzAxNmEwZmEsCi0JMHgzZDg2MzdiYywgMHg1NzcyMjkyMCwgMHhmNDcxZmVhNCwgMHgxZTRjNWZlMSwgMHg3MWUzZjdjMiwgMHgzYjA5M2ZjZCwKLQkweGM0NTkxYzc4LCAweDgzOGI1OTVmLCAweDdjNWFiMWUyLCAweDlhNzYzNDM2LCAweGI3MjJmZDE1LCAweGJkNDM0ZDQ1LAotCTB4ZjVjYjdlY2UsIDB4NzQzODBiMDYsIDB4ZGY4OWNiNzEsIDB4MWI3NmE0YWIsIDB4ZmNlOWIyOTIsIDB4YjNiMDUxZTMsCi0JMHhlZjMwZjk3ZCwgMHhlOTI3Y2YyMCwgMHgxYzZiMDAxZiwgMHg1MDBkZGJlMywgMHhkN2ZlYmI0MiwgMHgyMjM3Y2NjYywKLQkweDllMmMxZTYyLCAweDNjYjU4NWM3LCAweGU2NGYzMTA3LCAweDhiZjNlMDQ5LCAweDYxZjdjZmUzLCAweGZkMWYzMTNjLAotCTB4MGY5NTJiMzgsIDB4NDE3M2I1M2EsIDB4ZjZiZjYxOTUsIDB4ZjI4MDczMzIsIDB4ZWQ4MzRiMTEsIDB4MDM2Zjk4NjYsCi0JMHhjNTE0NDdjOCwgMHhjNzRlNWUxMiwgMHhiZDRkYjgzOCwgMHg3YWFhM2RlMSwgMHhiM2RkM2E3ZiwgMHgwNTBkMmRiMSwKLQkweDNhYTVkMDRjLCAweDNkMWZkMWU0LCAweDdjZGJlZjAyLCAweGUzMTRlMjhjLCAweDExZmZlYzg3LCAweDQzM2NlMWM2LAotCTB4YmIzZjM0NWMsIDB4ZjdiY2YxY2MsIDB4NzRiOTdmZjYsIDB4OTI2NWU1MTgsIDB4NDVmNWVlOTMsIDB4YjFkZGE3ZDcsCi0JMHg2ZTM3ZjNmOSwgMHhkMTc3YmY1MCwgMHg3NjViZGVmNywgMHhkZjZmZjdhMywgMHhhMjMxYjY3NCwgMHhjYmY5YWZiZSwKLQkweDEzY2NmZWI2LCAweDY2NTkwNzQxLCAweGFkNTVmZGZkLCAweGZhZTEwZWY0LCAweDMzNThkZDdkLCAweDQ5MjcyZmM1LAotCTB4NjA0Mzk5YmUsIDB4ZmVjNmNmYmMsIDB4ZTFkYjdiZjUsIDB4YmUyYjRmYmQsIDB4M2JmZDFkYjgsIDB4ZTdjNWVlNzgsCi0JMHhmYWYwOGVkMCwgMHgyYzk1ZTY2OSwgMHgwNDM5OWU3YywgMHhiM2Q0N2ZlYywgMHhiZTY2MmM3MSwgMHhhZGQwNWY5YywKLQkweDQ1ZDM1NjljLCAweDk5YWE3OWZlLCAweDZiNGU0M2UyLCAweGIwZjNmY2U3LCAweGYxNTE2ZGVmLCAweGNiZjQ2NjgyLAotCTB4NDQ3YmFmMDEsIDB4OGY4YjQ0N2MsIDB4NTlmYTJkZGYsIDB4ZTk0OTRhMjEsIDB4NjYwZTczYTQsIDB4NTI3ZGQwMGQsCi0JMHhjNWVjNWVjZCwgMHg4NjMyOGUwZiwgMHg5MzZjYTM3ZSwgMHhjNWNhNDQyZiwgMHhjNTMzNTRmNiwgMHg0Y2M1MjQwNywKLQkweDMyOTJlNzc5LCAweDI4MjNiZThhLCAweGU3OGZhMzgxLCAweDk4NWI3NjM3LCAweGQ0ZjY4Y2ZjLCAweDkwMGYxNDUxLAotCTB4Y2UyODYzNDIsIDB4YTg4NWIzNjAsIDB4MmZiNmJmM2YsIDB4NzdkZmRlYWEsIDB4YmNkM2NmNWEsIDB4NzU5ZmVlZmEsCi0JMHhjNzcwNGYzZiwgMHgxZTZhMjcxOCwgMHg0N2Q2MWUzOCwgMHhjY2MwNzM4ZiwgMHhkY2I5ZGZiOCwgMHhmMWJlMzMxYSwKLQkweDBkODk5MGUyLCAweDVmOTE1MjQzLCAweDgyZGQ3NzNiLCAweGQ4YmJmYWZjLCAweDMxMmI1OTcyLCAweDgxMTgzZThmLAotCTB4NjQ4Njg3OWYsIDB4ZmU2MDVkMTMsIDB4NWM2MjMwN2MsIDB4ODQ4Zjk3Y2MsIDB4ZGVlODAyODEsIDB4NmFhMGMxMDQsCi0JMHg3MTQyNWEwNiwgMHhhMTNjNzA4MywgMHg2YWNkOWEwNywgMHhhMDg3ZDkzYSwgMHhmNzFmNzBmZSwgMHgwYTdlN2UwOSwKLQkweDUxZmM4ZDY4LCAweDAzZWY4N2UxLCAweDUxZjJjNjNlLCAweGRhNzY0MmJmLCAweDg0M2ZlMDdlLCAweGE4YmJmMDlmLAotCTB4YTgwYmZhMGMsIDB4YTk1N2U4M2MsIDB4OGNiZjkwZmUsIDB4MWVmZDI3ZTAsIDB4MmJmODhmODIsIDB4ZWZkYTdjYTksCi0JMHhmOGNmZTdhNSwgMHg4NWZlMDlhYiwgMHhhYjY1NDdkZiwgMHg3ZjNkMjU3ZiwgMHhmMDQ3NWZjZSwgMHgwNDRkZmUwYiwKLQkweDQyZWQxMmZmLCAweDlhMjdjZjE5LCAweGRmZDk3Y2E4LCAweGY4YWZmNTQyLCAweDlhZmMxMWY3LCAweGM4NjU0ODNmLAotCTB4MWY5ZTg0N2YsIDB4N2MxMmI3ZjUsIDB4ZjA0NmRmZGMsIDB4ZTA4ODdmMDksIDB4OTUwNzdmMGUsIDB4ZjRjM2ZhNmYsCi0JMHg1ZGZmOTRmYywgMHgyNzU4YWZkZSwgMHhmYzY3MjI3OCwgMHg0NWI0OTc4MCwgMHg3OWRhMTc0NiwgMHhjYzk2OGI2OSwKLQkweDZmNzgwMGFlLCAweDZkZjc0Y2I1LCAweDRiZTQwYjlkLCAweDFlMmU4MDA3LCAweGY3ZjI2NTU1LCAweDUyMzRhZWY2LAotCTB4MmJiMzQ3ZGMsIDB4NDg2Y2Q2ZjcsIDB4YjlmYWE3MmEsIDB4MTU5MmRmNTQsIDB4YmVkOTc2NGYsIDB4NzdiYTY2YTUsCi0JMHhlZGM1NWI2ZCwgMHg0NmNjYjY1OSwgMHgzMmM1NmRlZCwgMHg3MmJhM2ZkNSwgMHhjZDhkZDkyZSwgMHhhZTMwMDUzOCwKLQkweDA3ODE4YzMyLCAweDI1YmI2MzI2LCAweGZiZGY5MjQ2LCAweGVmYmFlMmEyLCAweDZmNzlmZDg5LCAweDQ1ZWZjYzg4LAotCTB4MjI1Mzg5MWQsIDB4NWI2YjIxY2YsIDB4YmFmMDc0OTMsIDB4N2NlNTBjYjYsIDB4MjVkY2RkMDQsIDB4OTg5YjYxYzYsCi0JMHhjNDlkZjkxYywgMHgzM2JkZjY0ZiwgMHg3OWQ2MDJhZiwgMHgwZjdiZTQ5NywgMHhmYmE3YzhlNSwgMHgzNDAzY2RjZiwKLQkweGNiYjVhMzMxLCAweGM4ZTRmYzhjLCAweGJlYTdhZDg5LCAweDRiM2ZlNGQ0LCAweGRiZjg4OTNmLCAweGJmODRjYWFiLAotCTB4NjljNmVhYmQsIDB4MmM1ZmU4YjksIDB4MTM3YmU5OTIsIDB4Y2ZlNDhiNjksIDB4YmZlOTlmZDEsIDB4OTk3YmE2NDAsCi0JMHhjNTMyNTViNiwgMHhhMzIyZDkwMywgMHg1YTQ2YzdjMCwgMHg3MzA1ZmY3NywgMHhlOWI5NWVhOSwgMHg5ZGQxYzUxNCwKLQkweDI3ODc4ZWFiLCAweGY4MDJkZGEzLCAweDM4N2RhM2NhLCAweDRmZGY4NDk0LCAweGQ3NzExMGNhLCAweDk0ZjEyOTdkLAotCTB4OWYzZDE2MzcsIDB4ZjhiYmZmMmYsIDB4MTlmODBjZDksIDB4NWYzZjEzMTUsIDB4YTNjZmMyYzYsIDB4N2Y3NWZlZTIsCi0JMHg2ODg1N2RmMSwgMHgzMWRmNjkzYywgMHhjZjdjNTQ3ZCwgMHhjNzkxYjAzYiwgMHhhNWRiYTNlZiwgMHhlNjJhYjg4OCwKLQkweDRmZjdkMTc0LCAweDFmOTI2NTZhLCAweDgxZjA1OWZiLCAweGM1OWQ4MDdjLCAweDdkZTNkZDMyLCAweGIzZWFkMjY0LAotCTB4NzMzZTYwMDcsIDB4MTE0YTdjOGEsIDB4Yzg1NTAzOWUsIDB4MjZjNjUxNDcsIDB4NmZmZWYyNTcsIDB4ODkzZjIzNWEsCi0JMHhiYWY0MDU3NCwgMHhiNzY4NDllYSwgMHg5OWZhNjE3ZCwgMHgwNWZiMjg3YywgMHg3ZjE4ZWQ1YywgMHg5ZmRlOGZiNSwKLQkweDhkZjMxM2UxLCAweGM1YjIxN2E1LCAweDQ0N2JmNjNjLCAweDgxZTYxNGZjLCAweGFhZGIzYjcxLCAweGY5Yzc4NWRkLAotCTB4NTA0NTU5YjgsIDB4NjU3YWNjZWYsIDB4NzdmZDVlMmEsIDB4OTgzMmVkY2QsIDB4MmM1ZmVjYTAsIDB4MmNmMWM3YWYsCi0JMHg4OTNmNGRkZiwgMHgzYzA2YTVlMywgMHgzOGM1NzhkYSwgMHg1M2M1MzdkZSwgMHg2OTE1N2RkNiwgMHhmNzVkZWViMSwKLQkweDRlYmYwZjI1LCAweDEyMjg4ZTBlLCAweGIwMDY3NGY3LCAweDFmMDcyODAxLCAweDljNTI3NTMxLCAweGNiODY3MDNhLAotCTB4ZDMyNmE2NDEsIDB4NzFlOGI4N2QsIDB4OThmYmNhZmEsIDB4NjE5M2YwMjgsIDB4ZDEwZGU3ZTEsIDB4ZjZlYjRkZWYsCi0JMHhlZTU0MDI1YiwgMHhhMmFmZjRmNywgMHhiMmM5YTgzYywgMHgyMzNkMGVmOCwgMHhjNGMzN2I3ZiwgMHgwZGNiNjU3OCwKLQkweDQyMWU2M2NlLCAweDM2ODQwYmY5LCAweDdlODk4OGJlLCAweDdlZjJhNzMyLCAweDliOWZiYzhjLCAweDI3ODI3YWQ5LAotCTB4MGRjMDk0ZGEsIDB4OGI3NjAxY2UsIDB4NTE1NzUwN2UsIDB4OTVjMmM0NWUsIDB4M2RlMTFhYmIsIDB4Y2EyNjViZmIsCi0JMHhiZTRiYjM1NSwgMHg3ZTc3MjQ1ZCwgMHhlNDdmOTEyYiwgMHgzYWFjYjYzNCwgMHg2MmRmZDExNiwgMHgxY2VkMWViMSwKLQkweDhhMzVmMzAyLCAweDg4ZjM5ZWU0LCAweDkxZjAxYWY0LCAweGJkYWRmMDIyLCAweGQxYzQ1MGI3LCAweDZmN2ViYjFmLAotCTB4MTQ0NWU1MTIsIDB4ZmI0MzhjNmYsIDB4MTJiMzJmNmYsIDB4MjE0Y2Q4MWQsIDB4N2YwMjM4YTUsIDB4MGVmZjAzMzYsCi0JMHhlYmZjZjQ0ZSwgMHgxZTVhY2M4YiwgMHgyOGUyNmQ4MCwgMHhmYzY0NDczYywgMHg1MWNhMzBiZSwgMHgzZWFiZjc5OCwKLQkweGQxZGVmZjA3LCAweDBmYTY3N2EyLCAweDE3ZmM3ODA3LCAweDM4M2Y5ZDMyLCAweDdiZjNjNTk3LCAweDUyMzY3ZmQwLAotCTB4MjI2YmNmN2UsIDB4YjU5ZGY4NWUsIDB4MmMzZjc0MTUsIDB4NGZmNDRiMWQsIDB4NzgwNTRmZDEsIDB4ODZhNjY2ZmMsCi0JMHg4ZDlmN2RmMCwgMHhhZjliYzFmYywgMHhlZDIyZTdjOSwgMHhlYzE1MjQxMiwgMHg0NjQ1ZGM2ZiwgMHg1ZDcxZTVmMSwKLQkweGQ4M2VlZWIyLCAweGY2ZmE4Yjk4LCAweGZhMTJmZmIwLCAweGZhOWRlOWI1LCAweGZlNDI2OTc2LCAweGU4ZGE0NzNiLAotCTB4MWY3NjlkMWUsIDB4ZGVlNWY5Y2YsIDB4MTNkMjcyYzIsIDB4MWZmZjI0ZjEsIDB4ZTdlMjY1NTMsIDB4MDc2ZDRhYzcsCi0JMHgyYjc2ZGRiMCwgMHhhMjdlODRiYiwgMHg0MTU1ODE3ZCwgMHg4Y2VlZDAzOSwgMHgxYjZhYjkyNywgMHhmM2Y2NGYxMSwKLQkweGQ2YTNjY2Y2LCAweDY1OWZjMDRlLCAweGRhMGEzYmU0LCAweGJlMmQwMzJiLCAweDdlYmIxODAzLCAweGJjYzY2OGI0LAotCTB4YzcyNDMxZjQsIDB4NWMwM2JlN2IsIDB4MmYwNzdhMDYsIDB4NzMzYzEwMzcsIDB4YmRhNjkyMGYsIDB4ZTlkZjQ4ZDgsCi0JMHg2MzM0NWZkYSwgMHhiNjhjODA0ZiwgMHg1Yjk3OWExNiwgMHg3Y2YzMDY1MiwgMHgzNTc4NmVjMCwgMHg5Yzc2MGRkYSwKLQkweDYzYjQxOGZiLCAweGQwZTAxZWEwLCAweDk0MDFkZjcwLCAweDc1MjllOTQ3LCAweGNkNTc0OGVkLCAweDI5MmJhM2I2LAotCTB4NDI5YTVkMGUsIDB4YWJlNGQ1NzIsIDB4Njg5Y2ExMGIsIDB4OTFhYzRiNTYsIDB4YzlmMWFkZmMsIDB4MWFmYmU1YjcsCi0JMHgzYWZlZjcxMSwgMHg3ZWJhZmZmZSwgMHg0ZGYzZTJmYiwgMHhmYWVmOWM4NSwgMHg3ZTY4MDM4YSwgMHg5YTdmNzQ3ZSwKLQkweDYwYzZmZjVmLCAweDkwYTM3ZWZlLCAweGU2YjM4MWU3LCAweDcwYmY3Mjk4LCAweDY1Mjc5NzI4LCAweDU2NjFlZjIyLAotCTB4YWY3ZDI1NGEsIDB4NTNhMDU2N2QsIDB4YTFkM2ZjYTYsIDB4OWJkODBmZGMsIDB4ODY3Y2E3NmEsIDB4YzIxNjZlYmQsCi0JMHgwMTYwNzlmOCwgMHgyYmE0MGZkNywgMHgyOWIyOWU4OCwgMHgwODZjZDU0ZSwgMHgzYzFjODEyYiwgMHg3MGI5MGQwZiwKLQkweDk3ZTA5YzVmLCAweGQxN2JmZmUxLCAweGE0MThkMGJjLCAweDdkMDVkOGVmLCAweDM5M2RmODcxLCAweDE3ZTc0N2U4LAotCTB4YzU3YjRhZDgsIDB4ZDc3ZWM5YWIsIDB4MWY3OGQwZTIsIDB4NDM5YmJmMWYsIDB4YTA5ODIwYWUsIDB4N2QyMzZhZjYsCi0JMHhiZGZhMjYxZiwgMHhmMGY0YmI5YiwgMHg3ODdhNmI4NCwgMHhlNzdmZDMyMiwgMHg4N2FhZGNhNSwgMHhmODdhMmIyNywKLQkweDZlNDcyMTUzLCAweDlmM2ZkNzQ5LCAweGZkYzNkMmVhLCAweDMzOGMxYzE3LCAweDE0MTVmYmYyLCAweDgyOGVkMmFmLAotCTB4YzYwZWY3ZTEsIDB4MjAwODA2YzUsIDB4ZmNhMTZhNDcsIDB4NmI5ZDAxYTAsIDB4M2YzNDFlNDgsIDB4YmZmODgzMzgsCi0JMHg3YzdkMWFmZiwgMHg2ZGQ1OWQzOCwgMHg5YzYwMzY0OSwgMHg1OWRjZmY1YSwgMHhlZmQ2ODY3NCwgMHgwNzNmZDFhYywKLQkweGZjNjBlODNjLCAweDdkZDIwOWVjLCAweDNjOWY3MGM1LCAweDM4N2ZlNjE0LCAweGU2NTdlNzlmLCAweDc4NjlkZTQ4LAotCTB4NWEwMjYzZTQsIDB4ZmRmOTE1YmIsIDB4ZGI4ZmJlNzYsIDB4ZmUwYjVmNjQsIDB4NGFkYjE2YmYsIDB4YTBhZjI4NTMsCi0JMHhiNWY3YzJjYywgMHhmNzdjNThhYiwgMHhkZjg1MjVhNiwgMHhiY2IzNWVkYiwgMHhhNjdmMGRjOSwgMHhmYmE2Y2M4ZCwKLQkweGZlZGQ2ZGQ4LCAweDJiZTQ4ZmI1LCAweGUyOTFiZTNiLCAweDY0NmI3YmZmLCAweDg2NzZhZWZhLCAweDg1ZWI0MDM1LAotCTB4YzVkMTVjNzUsIDB4NWNiYTM0YTksIDB4NjA0OWNmYzAsIDB4NTg3YWJhM2QsIDB4M2QzZDE1Y2YsIDB4YTg3NDQ0M2MsCi0JMHgzMWY5MGJhZCwgMHhlNDVlYjExMCwgMHhmYjQ0NDBjMywgMHg3MmZiODZmNywgMHg4ZmM4ZGQ3MSwgMHg3MmUzY2Y5MSwKLQkweDBmNzQ0ZDNiLCAweDJmYTdhYzU5LCAweDQyZTRkNGJlLCAweGQ2OGYzODk5LCAweDEwYmVkMmYyLCAweDY5Nzk2YTYzLAotCTB4Njk1ZTQ1MWIsIDB4ODc4ZjQzOWIsIDB4NTEyN2FhMmYsIDB4ZjA4YmUxMWMsIDB4MGM1Zjc4OWMsIDB4MGZiZTQ1M2UsCi0JMHhjN2JlNzNlNCwgMHg4N2JjM2I3MiwgMHhmYWU3YmQ3YywgMHgxZTM4YTllMiwgMHhjNDQwODFjYSwgMHgwODRlMWJmNywKLQkweGVkODdmYzNhLCAweGJiMjg5NmNhLCAweDNmYmZlY2ZiLCAweGFlYzhjZjU5LCAweGViMGExY2FjLCAweDhlNzgxZGFjLAotCTB4ZGYxNzRmZGYsIDB4ZjQyMTNhYjcsIDB4ZTljMDk0YmUsIDB4ZWJiY2FmYTYsIDB4NTZiYzllZmEsIDB4OGE1YmFlMmIsCi0JMHgxMmJiZTNjYSwgMHgwMjBkYWY4NSwgMHg1N2ZiZGE1ZiwgMHhkM2MyNmM5NCwgMHg2YjcyOGU5NSwgMHg0MjYyNzg1ZiwKLQkweDFmMjEzMjNlLCAweGIzMmE3YmYxLCAweDRjNmVjZmNhLCAweDNhNWIxOTU1LCAweGY4NzliOWY0LCAweDc3NTk4ODdkLAotCTB4MDJjZDJkOWQsIDB4ZDdkMGYzNzgsIDB4YjNkM2ZjMzgsIDB4YTY4MDBjMmYsIDB4MmRmY2ZkMWYsIDB4ZjY3YzNmMGUsCi0JMHhmOTE1NGM4YiwgMHhlMWU3M2ZmMiwgMHhlMjFjMjNmNywgMHhhZjliNDVkYywgMHhhMWZhZGUzNiwgMHhiNzU4ZGVkYywKLQkweDIzOGYxY2U5LCAweGJmM2E1ZWM4LCAweGM5N2E3N2FjLCAweGE1MmNmZmNmLCAweDA3ZTc4MWNiLCAweDljYmI1MmViLAotCTB4ZDcyMDZlNGIsIDB4NDBiYTZkZDcsIDB4ZTk4NjBjNzEsIDB4NWYzMGEzNTEsIDB4OWYxMjkxODgsIDB4NTdjN2U1YWQsCi0JMHgxZGUzZjNlYSwgMHhkN2M0ZDU4ZSwgMHg1MDUwMTYxNiwgMHgzZDU5YzVkZSwgMHg3ZDdlN2U3NCwgMHg3M2U2OGJhOCwKLQkweGY5YWI1MzFiLCAweDBmMmJiOWY5LCAweDVkZDY2N2Y3LCAweDVmZjY5ODg2LCAweDhmOTE1MGUzLCAweDY4ZGY0MmNhLAotCTB4ZjJmMjI2NWMsIDB4NzY4OTk0ZTcsIDB4NzExN2Y4Y2EsIDB4OWU4Y2RiOWMsIDB4ZmZmYmQ0NDYsIDB4MmE1MTY2M2EsCi0JMHhiZjJkMDk4YSwgMHgzZGNmNDg2OSwgMHhlNmRmNDNiNywgMHgwZmFjZTRmZSwgMHgyNDU3NWMwYywgMHg1M2YxNzhmMiwKLQkweGNmMzQ1ZGMzLCAweGVhMDAzOGM4LCAweGU1ZjZiZTg1LCAweDNkNTNkMDg4LCAweDM4YTFlMmZiLCAweDg3YjI3ZDY3LAotCTB4ZTVkMjhiZWYsIDB4OTJmYjgyZDgsIDB4NWFkY2U1ZDQsIDB4N2JmYWY3ZDQsIDB4M2UxNDRmZWQsIDB4Y2QzMjg3NWEsCi0JMHg3ZTkwOTY3ZSwgMHhkYTdmMGViZiwgMHg2MDc5NjhmZSwgMHgxZTU3MDZmNSwgMHg4NzE3MmJkOSwgMHg2MDlmZTJlOCwKLQkweGY2YmNiYmU4LCAweDcxOGRmNGQ4LCAweGE3MzYwZDRhLCAweDY0OGUyOTdiLCAweDMwMGI1MTRhLCAweGVmZmViODRmLAotCTB4ZTliY2NjNTIsIDB4Yjc0ZTgyNzMsIDB4YmVlOWUyMzgsIDB4NGNjM2JkNzUsIDB4MWRkYWJkZjcsIDB4NjFkYTE4M2IsCi0JMHhjMjM2ZGI1NiwgMHg4OWEzODU0YiwgMHg4MzVjOWU2MSwgMHhiN2QyYjU5YiwgMHg4MmYyYTIwZiwgMHg3OTBiZWMxYiwKLQkweDY1OWYyYTdkLCAweDhlNGQ1NGMzLCAweGM2ZDY3ZTcxLCAweGRjOTRhYWJiLCAweDc3MmEyZTMwLCAweGEzYWZmZmYyLAotCTB4ZjI0NzdhYWYsIDB4ZWMxZjllMzQsIDB4YjA3ZTUzMzAsIDB4OGJhZTY4OTQsIDB4MjZkYzFmOTUsIDB4NWM3NjhkZWMsCi0JMHg4M2FlMGE1NywgMHhmNWI0YzljNywgMHhhZjNjNWQ1OCwgMHg5YzYzOWYxMSwgMHhkMWYyZWNjYywgMHhhZGEyZTNmZiwKLQkweDg3ZWM0ZGJiLCAweGFhZTJkZWQ2LCAweDI1ZWYyODYzLCAweGY5NDJlYWIzLCAweGZmNzNjNTJhLCAweDQxNDdmNTFkLAotCTB4YzZkNDljODQsIDB4ODlhODdlN2YsIDB4YWUxYjBiZGYsIDB4MmIzNWZjZjAsIDB4N2ViMzE3ZDcsIDB4N2YxOTg4NmIsCi0JMHhmMzU0M2FiZiwgMHhiZjE5YmViNywgMHhkYjMyZjQ2OSwgMHgzNDYxZjNjOCwgMHgzMzZiOWViZSwgMHg5ODFlZDA3YiwKLQkweDdjYTc0YjZiLCAweDgwNDBiOTlkLCAweGRhMjM5MzE3LCAweGJmM2U2NzdmLCAweGU5YWIyOWJmLCAweDFiYmY0NzQ4LAotCTB4ZGZjNWUxMzcsIDB4NGMzNmY4MDEsIDB4ZjZmNGYxMTcsIDB4NmJkZDEzNTQsIDB4M2NjMGRiN2EsIDB4ZTc0NjUyZTgsCi0JMHg0OWJkN2EyMywgMHhiNzlhNzE5MywgMHg4MGRiMzhjZSwgMHgzMWQ4Nzg2YywgMHhjYmU1MDRiZSwgMHgxMzcyOGVlMSwKLQkweDNiMDA2N2RlLCAweGNhMTg2ZTIxLCAweDQ2ZWVhNTk5LCAweGJmMzBlZmJjLCAweDdmYmU5OGE2LCAweGQ3N2ZjNWEyLAotCTB4NDkzMDNkMDksIDB4ZGRiMDM5ZjIsIDB4OWEzZjYzNjcsIDB4ZGU2YzQxNTUsIDB4N2ZkZjQ1OTUsIDB4ODhkZmYxMTQsCi0JMHhiYjQ0ZmQ3NiwgMHhhY2EyNmVkMywgMHhjMDNlZmEyZSwgMHg0NWU4ZTUxNSwgMHg4M2Y2OGI5ZiwgMHhmMWEyMWFmMiwKLQkweGY5MTJmYjg5LCAweDcyNjk4YmZmLCAweDhiM2JmNTAyLCAweGUxMjNiM2IyLCAweDk0OWQ4OWVkLCAweGE5ZTlhZjZmLAotCTB4Y2RmMjNlYTYsIDB4ZjIxMzBkYjYsIDB4NzE0ZmUzNTEsIDB4N2NjNzEwOWUsIDB4NjQ5M2M0NTYsIDB4ZjM3YjcyZjAsCi0JMHgzZjRmZDNjOCwgMHgzN2IxZWNlZCwgMHhhNDNkMDg3NywgMHhkMDUwOTNmNSwgMHgyMjA5OTU0YSwgMHg3OGEwYzRlZiwKLQkweDI1NjRmZTg4LCAweDc1ODAxZTkwLCAweGZiMTk3ZDM2LCAweDYxZGNmODllLCAweDcxNmQ4ZTVjLCAweGY2Yzc0YjZmLAotCTB4M2E2YWI5MTUsIDB4NzlkMTRiZmEsIDB4NTFlZWY1ZGUsIDB4ZjU3ZmM4ZTksIDB4YWFmZDM1NTMsIDB4YWZmOTIzNWEsCi0JMHg3YmZmOWRkZCwgMHg3NWI0MmYzYywgMHhiOWU0NTg5OCwgMHhjNjY5NzQ3YywgMHhlNDFiYjU3MywgMHhmZGM1OWJlZCwKLQkweGM3NDc2ZGM4LCAweGJjYmUzMTU4LCAweGM2MTI1NmNkLCAweGI2NmRkOWYzLCAweGJiNzIxMjk0LCAweDQ3OGYzYzZjLAotCTB4ZjFiMzZmNmIsIDB4Y2E5YjNhYmMsIDB4MWIzNmQ1ZTMsIDB4ZjJkMzdiY2YsIDB4MjdkZGRhNmYsIDB4YmI1YTBmMDgsCi0JMHhmZWY4YzNlMSwgMHhmZjdlNTRkOSwgMHg1MjBkNWUyMSwgMHgxYmQ5MzhiYiwgMHhiOGFjYmNjMCwgMHg2NmY2NDYxNCwKLQkweGM3N2Y5NTljLCAweGM4YzBhMTJmLCAweGY5ZmMzMWFjLCAweGVhMjY2MTgyLCAweDQ5NjY1YjY3LCAweDliNTRlYzk4LAotCTB4ZDg3NjQyZWMsIDB4NGU5MjVlOTYsIDB4MGRmMTEyNzIsIDB4YmJkYmQ2ZTMsIDB4MTlmNzQ1ZjEsIDB4NmI3YzA4NTYsCi0JMHhmM2I3ZDRmZCwgMHhhOWJlZGU3NSwgMHgwOGM1NmU3MiwgMHg4YmJkMTNiNCwgMHhkOWI3NGU5MCwgMHhiZjMxNTg5NiwKLQkweGRlOTdiMjU0LCAweGMzZjViZmIwLCAweGNhN2NiYTBjLCAweDc5OTRmZTllLCAweGQ4MTViZmEyLCAweDUxMmY2NDlmLAotCTB4OGIxMzNmYjAsIDB4ZmEwY2ZmZmQsIDB4YmJmZWJjYzUsIDB4ODE5ODE1ZTcsIDB4NjBlM2RmNDYsIDB4OWU0ZmJiNGMsCi0JMHg2OGNmNGIxZSwgMHg0MzljNTVhNSwgMHgwZmY3YmY0NCwgMHhmYWNkOTVkYiwgMHg5M2Q4MjU3OCwgMHg3NTgzMGQwZiwKLQkweDNiOWU2NmQ1LCAweDcwOWU5MTMxLCAweDVlMzFiMjdiLCAweGQ4NDkxNzdjLCAweGRiYzJiMjg1LCAweDNkZjkxYTM3LAotCTB4NjM3YmVkNGQsIDB4MjcyODlkOWEsIDB4NzNkMGYxZTksIDB4YzNlZjhhN2YsIDB4MzFjNzg1NTUsIDB4YzUxOGRhYWUsCi0JMHhmOWY5YTI1NywgMHhiYTYzYTllYSwgMHg2N2E4MTA3YiwgMHhjNmRlYzIzZCwgMHg4ZjQ4ZWQxMiwgMHgzODk1Y2YxOSwKLQkweDhlZmM2YjVmLCAweDNmMjhiYTc3LCAweGY3N2Y5YWFhLCAweDI5MThhNmM0LCAweGY0MDBjMjVmLCAweGRkYWQ3NDRiLAotCTB4OGE0YWY5ZGYsIDB4MTE1ZDdmNjksIDB4YWI0ODZhZmIsIDB4NmRiZjg5NTEsIDB4YTMyYzQyYTEsIDB4ZjNiZjdiZjksCi0JMHhmM2YyMjE1NCwgMHhmYWRkNjlmZSwgMHg2ZDc1YzE1NiwgMHhmN2U1Y2E0OCwgMHg1NjRlNGYxNywgMHg1ZmMzZDk2MiwKLQkweDcxYzI1Zjc3LCAweGE0ZGRjNzZlLCAweGNmNWM5ZDY3LCAweDNmYmViZmZlLCAweGFmMzRlOGQxLCAweDY2ZGViZDQ0LAotCTB4OTdmN2ZiZDAsIDB4NTBmZGRjODUsIDB4OWFmZDhmZjAsIDB4ZGJiY2Y3NGMsIDB4MjJlZjdjOGIsIDB4ZGU4Yzk4YmQsCi0JMHhmYjA3ZDQ2YSwgMHhiZjkzNjZlYiwgMHg1MDFlMDMyNCwgMHgzMGRmZWVlZiwgMHhjMGFmMmEyZCwgMHgwOGIwZmVmNywKLQkweDMyNmIyZTdlLCAweDFhYTY3N2QzLCAweGJmMjA4ZmMwLCAweGEzMWY2YTJlLCAweGI3ZWRhN2YxLCAweGY5YWJkYjA2LAotCTB4YmZiNjlhMzksIDB4MjE2Y2QzMTMsIDB4NzY0YmI3OTEsIDB4Yjk2NTMzODcsIDB4YjM5OGU1MDEsIDB4ZDlmMDY3ZGEsCi0JMHhlYzk4N2RiMSwgMHhmZGRhYmU4ZCwgMHhhZDNiYzg0YywgMHhiN2ZiMGRiZCwgMHgzYzRhZmNlMSwgMHg4YzRjN2JmYywKLQkweDZiMjRhZWYyLCAweGVjN2ZmZmVjLCAweDgxMGYwYTMwLCAweGNiYWMyYjFmLCAweDgyYWE3NDcxLCAweGVlYzI0YWZkLAotCTB4ZThmOTE0NmQsIDB4ZDVhOTRhZjUsIDB4OTRiZWYxMTMsIDB4MTQ5ZDZhNTQsIDB4N2RmNTJmNDEsIDB4ODc0YTg3YzQsCi0JMHg5NDJiZGI3NywgMHhmY2U1YTdlNywgMHg2MGFmNjg0YiwgMHhiZTRkOWY1ZSwgMHgyMDQ3MWRkYywgMHg2NzVlMjBmZiwKLQkweDQ3ZTM2YTJmLCAweDljZjdiYjlmLCAweGJlM2E3M2IzLCAweGJkOTI5NGFhLCAweGJiMDE4ZjI4LCAweDQzMDdlYzAwLAotCTB4NDg5YmQyZDIsIDB4M2Y3YzlhM2YsIDB4NzQzYzAzNGUsIDB4ZmNhMTY3YmQsIDB4M2YwNWY3ZGIsIDB4ZWM3ZTBhNzYsCi0JMHhkODA1NmU0YiwgMHhiN2RjYmE1MSwgMHg0YmM3MWQ5NSwgMHgyNTI3NDAxZSwgMHhmNTI3NDg4OSwgMHgzOWRkNDY5OSwKLQkweDhiMTY1NjhjLCAweDVmYjBjNjc1LCAweGZjOGY4N2YyLCAweDkwY2JmNjQ2LCAweDE3ZWMzMWUxLCAweGNmMjI0ZmI0LAotCTB4ZjEyZWQxY2YsIDB4YjQ0NWM4NDQsIDB4ZWMzMTNjNGIsIDB4ZjBhMzY2OTcsIDB4ZTc3OWM0ZGYsIDB4YWRhYjkzNjksCi0JMHhmYTcwZjAxMywgMHhjZWZhNDRlNiwgMHhkYmI0NjljZCwgMHhmYjNlYzA0YSwgMHhkYzVjZDllOSwgMHhlZTg2NTk5NCwKLQkweDNiMDg1M2VmLCAweDc2MGMxMTkxLCAweDVlNzA3N2RhLCAweDFhYmJjYzU1LCAweDFjZDZmZmZmLCAweDg4M2YxYmM5LAotCTB4ZmZkMTk3ZTcsIDB4ZmI3NWYyYWIsIDB4NDBiODA3MTksIDB4ZmJjNzZjYmMsIDB4MWY3NDQ1NzAsIDB4ZjlkNjMyYWUsCi0JMHhlOWJhZjdkYSwgMHg4ODk3NDUwNCwgMHg2MDFlMTFjMywgMHg1YmUyMjIxNywgMHg1MTc2ZTJiZCwgMHhhMzBjM2E3MSwKLQkweGU2ZmRlNzc0LCAweGZkYmY2ZWY0LCAweGRhZTI4MWJhLCAweDg4MmM3ZDNiLCAweGI1YmZiOWRmLCAweDdiNTcxZjRjLAotCTB4ZWQ5OWU0NDMsIDB4Y2Y4OGNhNWMsIDB4ODZiNDE2NzYsIDB4NTM0OTVmZDAsIDB4YWJjOWM1MTksIDB4NzNmNmZhM2MsCi0JMHhlM2JmYTMyYSwgMHhkZGJmOGZhYywgMHhjZjQ1MzVlNiwgMHhkNmViYmU5NywgMHhjMDZmYWM1ZiwgMHg5NzE0ZDVlZSwKLQkweDhiOGYxNWViLCAweGZhZDFjMzhhLCAweGYyOTQzZjUwLCAweDQ2YWRiYzc4LCAweDZmNjU1ZjlmLCAweDdkZGY0MTllLAotCTB4MTJhZWFjNjYsIDB4MzRjY2U3ZDcsIDB4ZGE4ZjhjMzIsIDB4Y2ZmM2EzYWIsIDB4MWVjZjAyMDIsIDB4OWUxYTVhMTIsCi0JMHhkODc4ZWZiNSwgMHg3YmZjOGQ4YSwgMHg1NDA5ODFhNCwgMHhlMWMxZTVhZiwgMHgzYTI3MDVmNywgMHg1YjY1ZDY3YiwKLQkweDJjNTNlNjJmLCAweGQ4ODFhY2UyLCAweGYxODlkYWViLCAweDJlNTdjYzQ2LCAweDgzYzQ4MzBhLCAweDMwMmU3MGZlLAotCTB4YTMwZDQ2NGUsIDB4YmFjMjk5ZWYsIDB4ODcwNWU3NzUsIDB4ZDAzNTZmNzcsIDB4MDNlMTQ3ZmYsIDB4M2MyNmVkNzEsCi0JMHg5ODEzY2ZlOCwgMHg1YWZiNDBjZiwgMHg4MDdmM2ZhMywgMHg2OGUwZWE3NSwgMHhlY2ViZmViYiwgMHhiM2JiYzNmOSwKLQkweDU4ZmY3ZTYzLCAweDUwMzhiNTJiLCAweDc2MTBmOGFmLCAweDM4M2E0ODAwLCAweDZjYTc3YzVjLCAweGY2OGExYjI4LAotCTB4MjM3OGFkOGQsIDB4NGM5NWMzZWQsIDB4MGFjYWY3OWUsIDB4YTFiYjlmNjIsIDB4MGRkZjhmOWQsIDB4MzI3YzhhOWEsCi0JMHhhNjc5ZmQxMiwgMHhmMzAyY2VmYiwgMHg2ZjlmOTRjOCwgMHgzNTczZTMyOCwgMHhhNjcyZjNmNCwgMHhkN2M0NjIyYiwKLQkweGIxMzA3ODk2LCAweGJjZmZmMDRhLCAweDFmYTBmNzhhLCAweDhjMDBiMTY3LCAweGRmMTA2M2RmLCAweGJkYzQ5NjlmLAotCTB4MjYwNjJkYTQsIDB4ZDUxNGNjMjMsIDB4YjVlNGYzY2EsIDB4ZTkwNDNjZWYsIDB4OGQ3ZDBmM2IsIDB4OGIwNzdkYTMsCi0JMHhkYTdiZjgwNSwgMHgzN2RmZDEzOCwgMHg3NGZiZDFiYSwgMHg3ZTg5NGQxZiwgMHgzYWUyODJiZiwgMHhlMTdkZjhkYSwKLQkweDE3ZWZhZmJkLCAweDlkZmNiMWZkLCAweDk1M2UzYzkxLCAweGMzNWE3NDQ5LCAweGViYTcxZmI0LCAweDJiNzRkZGM1LAotCTB4NTNiODNjOTMsIDB4MGYwZjRlYWIsIDB4NzczZTdlNDUsIDB4Zjc0YTgyNGYsIDB4MDQ3NWI1NmYsIDB4OGViNDRiYTYsCi0JMHhmNzVmZDk2ZiwgMHg1OTVkZDIzYywgMHg1ODgxZGVmYywgMHhkYmVmZTg5NywgMHgxMTdlOGJhZSwgMHg5MzAxYWNmMiwKLQkweDFhOGU4MTZmLCAweGNmOTFlZjgxLCAweDJlOTMyOTZjLCAweGExMGU3NGM5LCAweGJmOGJjZmJmLCAweDM1ZmQxMTczLAotCTB4Zjk0OTNkMWMsIDB4YmRjNDdiM2IsIDB4YTc1YzZkNzAsIDB4OGEwNDMzZWEsIDB4M2MxMDdlZjAsIDB4ZDA4ZjExOGYsCi0JMHhkZjhjYTVjYSwgMHhmNWU2ZDI4ZiwgMHgzNTA0MDE3ZiwgMHg3ZmUwNWY2YSwgMHgwMDAwN2ZlMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4NDUxNDc4MGIsIDB4NzRmNTcwYjYsIDB4OTkyNGNjZjcsCisJMHhmMjEyNGM5OSwgMHgwMDQ5M2RlMCwgMHgyMTBlMDMxMSwgMHg5OTcwYzA0NCwgMHg0NmEyYzAyNCwgMHgxNDFhMDIwZCwKKwkweDg0OTIwMjc1LCAweDdlODg5NzkwLCAweDMzZmVhZWVjLCAweGE4YTA4OTAxLCAweDE3YWNiOWYxLCAweDM3NjE0MWRkLAorCTB4MGMwNmU4YjIsIDB4NjBlMDM1MTgsIDB4YmEyZWIzMDAsIDB4ZTdjMDQ1YzEsIDB4MzZiYzgwMjYsIDB4YjlmMDQzMjQsCisJMHg5ZDZmNWVjYiwgMHhkZDMzZDU1MywgMHhjN2M0MDk5ZCwgMHhmZmVmN2ZkZSwgMHhhNTVmOWY4ZiwgMHg3MWViYWFiYSwKKwkweGU5ZDRlN2RlLCAweDI3OGYzMjQyLCAweGRmMjEwYTY0LCAweDlmOTY4ZmMxLCAweGY4OTA4NDhiLCAweDIwNmY1OTUwLAorCTB4ODg0MTkyMmUsIDB4NmRmNDY2ZDcsIDB4ODhjZmE2NGMsIDB4NjhlNjdhMjMsIDB4ZDExZDk4NWEsIDB4ZWY0MzU4MzcsCisJMHg5ZWQ1Y2JlOSwgMHgxODY5MzRhNCwgMHgxYzc5MGYyMSwgMHgyM2UyMTI1OCwgMHg1YWI1NGU4NCwgMHgxNmY1MDUyMCwKKwkweGUwOTMzYmE4LCAweDIxM2UzYTdkLCAweDBmZjhlOGZkLCAweDMwZjhlMjQ2LCAweDFhMTg5OTJkLCAweGUwMzExMDY3LAorCTB4ZjlhZDUzN2IsIDB4NDIxZWIwODksIDB4YzNlNjQ3NmEsIDB4MjEzYjE2ZmMsIDB4OWY5ZjdiZmQsIDB4YTdlYjg4OGUsCisJMHhmN2MxMGRlZiwgMHhiNTllZmEyNCwgMHg2NTI5ZWZlZiwgMHgxM2ZkMGU1NywgMHhmNjZkZGZmNiwgMHhmMTA4MTQ2ZCwKKwkweDcxYzdmY2VmLCAweDg2OTllZjU4LCAweDVkMTMwZTM5LCAweGQ5Yjc3NjZmLCAweGJlZWEwNTNmLCAweGI2ODk5ZjZjLAorCTB4YzBmYjZlZTcsIDB4ZTVmZWQxMjYsIDB4ZGEwOTQ0ZGIsIDB4ZjAyMzNiMGQsIDB4ODI3NWNlZmQsIDB4YTY5NWVhMGYsCisJMHhhNGFlNDdkNiwgMHg5MTM2YzBmNSwgMHhmOGQzMGYzYywgMHg0MDkyMDYyZCwgMHg2MTMzNzFjOCwgMHhlYjE1ODczZiwKKwkweDVhYWMxMTQ1LCAweDZkZDc3ZWJlLCAweGEzNDk1ZjMwLCAweGY3ZDA0NDg5LCAweDJlODgzNzhmLCAweDI4ZDkyZmE4LAorCTB4YWY5ZDA4ZjgsIDB4OGMwN2I1ZmMsIDB4YzU3OGU4MDMsIDB4YzIzZWExM2UsIDB4MWYxYmViNDEsIDB4M2VlODNhMzMsCisJMHhkOGZjZWY5NywgMHg3Y2UxNDZkNiwgMHgwZTI2NjNkYSwgMHhhNGEzZWUyMywgMHg1MjkwOGQzZSwgMHgwM2U5OTZkZiwKKwkweDliYTVmYmU4LCAweGJlODAyNzA1LCAweDRlZDlkZDc0LCAweDgzNjk1ZjU4LCAweGUzYTQ1YzNjLCAweDIyOGJhZTJkLAorCTB4ZWU2YzkxOGUsIDB4ZDdjYzA4ZWYsIDB4ZGJlNzE0N2MsIDB4Zjk4MzBmMjYsIDB4NjVkZmNlNGEsIDB4NmVlNTI0MDQsCisJMHhjYTJlOTE5MywgMHhkZjYwM2FlOSwgMHgzZGE3YmNjYSwgMHgwNTNlNzE2YiwgMHhkMjJmZTU5ZSwgMHg4YWJmNjhmOSwKKwkweDZjMjcwNTk3LCAweGRjNDBjMmIxLCAweGQ3Y2U4ZWIwLCAweGIwNWUwYTIyLCAweDhkYWFmZWMwLCAweDdkZWFhYzIzLAorCTB4N2Q4NzZlMTQsIDB4MWJkNmZhOTQsIDB4N2Q2MDViYTcsIDB4Njk0NThkZWIsIDB4ZDcxNmYxYTEsIDB4N2Q3NmE3ZmQsCisJMHhkZDEzNTM2YiwgMHhmM2UzYmQ2OSwgMHg3NDgyODdiNCwgMHg0YTVlYTg0NCwgMHg0ZmU5MGI4OCwgMHg4ZTgxMTlmMiwKKwkweDg1ZTdlNzk1LCAweGUyZjdjNDE4LCAweGNjMzg5MTNhLCAweDNhMTVmMWExLCAweGU5YzA3ZWYwLCAweGYxOTU4Nzc0LAorCTB4MTJkYmM3MDEsIDB4ODQyY2UwM2IsIDB4YzczYjZlYjcsIDB4NTRjODE0YTMsIDB4OGY5NGFmOGYsIDB4N2FlODNlMDAsCisJMHgyYzc2M2Q2YSwgMHg2MTI0ZjcxZiwgMHg4MWM3YTRmOSwgMHgzM2RhN2I3MCwgMHgxZWI1Y2IxMiwgMHhjNjdmM2UyNywKKwkweDc1Y2IwMTMzLCAweGNmOTYxNzFlLCAweGU5NjA2Njc5LCAweGJmNjNlNGYzLCAweDU4MDUzZGU3LCAweGYxYjhmMDZlLAorCTB4MjUzZDZmZjksIDB4YWE3OWQ2NTgsIDB4Y2YyNmY5ZjAsIDB4N2IzNzJjMzIsIDB4NjVmY2Y4YmMsIDB4ZWIyYzJhY2YsCisJMHg2ZTU4YjUzZCwgMHhiMmQxN2MwNSwgMHg3ZWMzZTNjMSwgMHg1ODc1M2RkYiwgMHhmMWVhN2EzNiwgMHg0NjllZWJmOSwKKwkweDM4NzBkNzJjLCAweGI2NDhiMmRhLCAweDczNjBlMTQ0LCAweDNiNDUzYjExLCAweDY1NzNjZDg5LCAweDliMWViNGNiLAorCTB4ZjMwOWVhY2YsIDB4NWE0NmQ5YmMsIDB4M2FkMzcwNGYsIDB4MzI4MGNiODUsIDB4ZDY4OWI2N2YsIDB4ZjZiMTU0MDcsCisJMHgxYzkyZjcyMSwgMHhmMTBmYWQzMywgMHgzNTk0ZjZiMiwgMHg1YTA4OWNhZSwgMHhlZDY1YTk0ZiwgMHg3Mzc5ZDYyMywKKwkweDg0N2Q2OTIyLCAweGRhOGZiNThmLCAweGEyODljZmVjLCAweGFjZjU1MWY1LCAweGM5MTM0YzdkLCAweDE4ZmFkMGI1LAorCTB4ZWZhN2FiM2YsIDB4Njk1YWU1NzMsIDB4ZDU5NWJkM2QsIDB4ZTZmMTNmMzMsIDB4YjMzZDY4ZGEsIDB4YTkzZmJkOGQsCisJMHgyYzNhMjdjMywgMHg1NWIwZjEzZCwgMHgxNDIwMmM3NiwgMHhiOWRlNGQ1NywgMHg5YmNhODkyZSwgMHg1ZGM3NDZhZCwKKwkweDdiYzg0OWM0LCAweDg5MmVmOWRlLCAweGQ5MDY4N2NhLCAweGRlNmRlZDg1LCAweDc0NmVhY2M1LCAweDc3Yjc3YjYxLAorCTB4MmVkZmY2MjksIDB4YWE1ZGIxYmIsIDB4YjdkYjBmYmUsIDB4OWVkOGRkMWIsIDB4ZWQ4MzVkNTAsIDB4ZGIxN2IyOGQsCisJMHg4YTNmNTY0NywgMHgyZjQ2OGRlZCwgMHg1ZWFhNGZiNiwgMHg2NWQ3ZjU4YiwgMHg1NWU3YjYxZiwgMHhhZmZlYzdhZiwKKwkweGZlZDg3ZDFiLCAweDVjOWJmZGY4LCAweDA1ZmQ2OTUzLCAweGU0MWRiZGMxLCAweDVkYzEwYWRlLCAweDllODE1MjQyLAorCTB4ZWU0MDkzZWEsIDB4ZjlmOTcwZDUsIDB4NmQxZDEwMWMsIDB4NDQ2ZmU5YWYsIDB4NmVmYWRjM2UsIDB4YmZjMDBiZTYsCisJMHhmNTA3ZWJmOCwgMHg5ODNlZGZhMiwgMHg4OWJjZTM4YywgMHgxYzc0YzhlMywgMHhhNGUzZTJmMSwgMHgzMzQxMzdiZiwKKwkweDI1N2JmYTRlLCAweDM4MmQzOGNhLCAweGM2ZGY0NDRlLCAweDI0ZGVmYWQ5LCAweDJiZGU3YWVkLCAweDBmZDljNjU1LAorCTB4ZGFjMmI0ZmMsIDB4ZmZhNTdkYjcsIDB4OWViYjRiMzksIDB4ZTMyOTk3M2YsIDB4ODllYjg0N2MsIDB4MWE3YWRiZTksCisJMHhhN2MyZDAzZSwgMHg3YzIwODNlMSwgMHhmMTM4ZTI4ZSwgMHhjNjRmNWI3ZCwgMHgzMjdjMmQ0MSwgMHhkM2UxMDYwZSwKKwkweGVmZjRlMzgxLCAweDA3MGQzOGRiLCAweDM4NjlmMGI1LCAweDk3Y2Y4NDE4LCAweDdkYzE5ZjA4LCAweDIxYzY1N2RiLAorCTB4MGUzMjdjMmQsIDB4NWZmM2UxMDUsIDB4YmVlNDllYjgsIDB4NTNmZGIzOGQsIDB4N2ZiNjdjMmQsIDB4NDk4Zjg0MWEsCisJMHhlZjBjZjU4MCwgMHgzZjMyYmVkYiwgMHhmMzI3YzJkMywgMHhlYzdjMjBiMywgMHg3ZGE1Y2UzOCwgMHg2N2ZiNjcxYiwKKwkweGZmNmNmODVhLCAweGZlOWYwODJjLCAweGJlZThjZTM4LCAweGFmZjMyYmVkLCAweGZlNjRmODVhLCAweDE0OWYwODM1LAorCTB4YjYzM2UwMDEsIDB4ZmM2OWViNmYsIDB4YzY5ZjBiNWMsIDB4YjlmMDgzY2YsIDB4ZGYxOWM3MGMsIDB4Mzg0Y2Y1YjcsCisJMHg4NGNmODVhZSwgMHg2NGY4NDFlMywgMHhmNjI2YmVlMCwgMHhlM2M2OWM2ZCwgMHgxZTM0Zjg1YSwgMHgzMjY3YzIwZiwKKwkweDZmYjkzMzhlLCAweDQyNzA5YWZiLCAweDI3MDk5ZjBiLCAweDhlOTlmMDgyLCAweGViYmI2NGUzLCAweGM3NDY1MTk4LAorCTB4Y2UzZWY2YjEsIDB4ZjBiNDY3ZWIsIDB4MTA0Y2ZkNzksIDB4MzhlM2Q3M2UsIDB4YTkzOGU4ZDMsIDB4NTI2NzFmMTcsCisJMHg5MzNlMTZhNywgMHgyOWYwODMzYSwgMHhlYWFlNzFjMCwgMHg3N2FmMzhkYiwgMHg3YWYzZTE2YSwgMHg4NTNlMTA2NywKKwkweDdkYjVjZTM4LCAweDJlYTRkN2RiLCAweDc1MjY3YzJkLCAweDNiOGNmODMxLCAweGEzNmI5NTUwLCAweDNhMTc1NGVkLAorCTB4OTVjYWZhNDUsIDB4NDA5NzJlMWQsIDB4ZDU5ZGEyZWIsIDB4ODA5M2JiNDUsIDB4ZjYyYTIyNWQsIDB4ODk3NTY5MDYsCisJMHhlNmNiN2RmNCwgMHg4OTA3ZjQ5OCwgMHhiOWM4ZWVkYSwgMHg0YWM3ZTgxMywgMHhkZGI1MzFhZCwgMHg1MjIxM2QxMSwKKwkweGI4YzRlNzYzLCAweGI4ZjUzNTYyLCAweGZkMzQwMzE5LCAweDM0NTNmM2UzLCAweGEzMDU4OWVkLCAweGRkZmRlZDM0LAorCTB4YzBmYTlhZTksIDB4ZmU5YTQ5OTIsIDB4MzQ3MmFiODMsIDB4YWVjYmExZjUsIDB4ZjY0ZmY0ZDYsIDB4YTdhOWEwZGUsCisJMHhkMzU5YmFhZSwgMHg3Y2VkNzg3ZiwgMHg2YjI1ZmI0ZCwgMHg5N2VkMzU0YiwgMHhlYTY4OTZmYSwgMHg0MmZkZDU5NywKKwkweGZkNzQ3ZmQzLCAweGU1ZmI0ZDcyLCAweGRhNmEwZjhkLCAweGQ3MWZmYWM3LCAweDNjYjVjN2Q0LCAweGJlM2ZlOWEzLAorCTB4ZmI0ZDc5ZjUsIDB4NjkzNzg3MTUsIDB4NmRiNjI3ZGEsIDB4M2NhZmQ0ZDUsIDB4Y2VjZWJhZjksIDB4NWY4ZmQ4YjMsCisJMHhkMDIyZWJjNiwgMHg3Zjc2NjEzZCwgMHhmOGY3ZTY3ZiwgMHgxYmFjNDZhZCwgMHg4ZWQwNTgwNywgMHg3MjJkNjVkZiwKKwkweDM1ZjhhMzFjLCAweGQxYzBiNWJlLCAweDcwMTdlMjhmLCAweGY2NDU3ZTBhLCAweGRhNGI5MjgwLCAweDI2N2JmM2U4LAorCTB4ZDNiMTJmYjksIDB4ZGQxOGY3ZTcsIDB4ZDhjM2RiOTcsIDB4MDQxZTk0YTcsIDB4YzNhNTA0OTIsIDB4ZmRiZWE1MDAsCisJMHg2M2QxOTkwMSwgMHgyM2YzYzBjZSwgMHg5NWZiZTlkYSwgMHgxODg4YzA4NiwgMHhiMzEyY2Y1YSwgMHg3NzdlODExYiwKKwkweDhhMmZjYzBhLCAweGY0MTU0OTE0LCAweGY0MTEzNDhiLCAweGNlNDgxZTBiLCAweGEyYWJjMTdjLCAweDI5ODM1NWQ3LAorCTB4NzFhMTBhMWYsIDB4MjRlZWM5NTcsIDB4YWFkZTMzYjAsIDB4MWQ4MmY3NmUsIDB4ZWU5ODMzNTIsIDB4Y2QyMTAwNmIsCisJMHg0YmRmYmI0MiwgMHgwNjA3YjRmZCwgMHhlOWI5MjUxNywgMHhiNTIzMjY3OCwgMHgxYmYzZDVkMywgMHgzODY5ZmNlOSwKKwkweGViZDAwYjdmLCAweDdjN2YzMDdiLCAweDI5NGRmOWNmLCAweDliZjMzNDEzLCAweGU2Njg5NDg3LCAweGZjZTkxYjM3LAorCTB4YWZkZTQyNzYsIDB4YTdlN2M1M2UsIDB4Yzg0NDk4NDgsIDB4Mzg1Mzg0NWYsIDB4MDk0ODY5YmYsIDB4OTE4MGZmY2UsCisJMHhmOWVhMmJmYSwgMHgxZmYzODMyMywgMHhkNjdmZmQ4NiwgMHgyNjUzZmVkYiwgMHhhNDNmZjc2OSwgMHgyMzdmYmI1NCwKKwkweGVhOTFmZmRiLCAweDQ4ZmU3Y2IzLCAweGUxNTFmZmRjLCAweDkwZmZkYjJjLCAweDEzN2ZiNjUyLCAweGJmMzgzNzFiLAorCTB4OTNmZjA4MmQsIDB4MmY2NzdmMzAsIDB4YjM1MjliZjMsIDB4NWExZmZiYjQsIDB4ODliZmRkYTYsIDB4ZmQ1ZGRmY2QsCisJMHg4MmRmOWYyZCwgMHhiZTEzOWZmMywgMHg1YTFmZmI2NSwgMHg0ZDFiZjM4NiwgMHg4ZmQwMjc2ZSwgMHg5NTY0NjA3MSwKKwkweDFkNGZjZThmLCAweDA0NDkwNzYxLCAweDQwZjNhMTcyLCAweGZkMTYzMjM5LCAweDE0ODQ5N2U0LCAweDkxM2RjNzVjLAorCTB4OGFiZWRlOGMsIDB4ZjI4NmY0YTQsIDB4NThmY2NiYzYsIDB4OTk2Yzk1MWYsIDB4YjRlMmVmZDQsIDB4YjY3Mzc4YmUsCisJMHhiNjEyZTQxMSwgMHgyMTY1N2Y1MywgMHg4ZDFkZWE1ZiwgMHg3OTM3ZDIyMiwgMHg0ZTFiZTRkMiwgMHgyOGQ5ZGJkNywKKwkweGM3N2VhMTdhLCAweDIwN2Q5MzkzLCAweGU0NGQyYWZmLCAweDRmNzg3Y2Y2LCAweGZlNzg3ZTIyLCAweDlmYTM1M2Y5LAorCTB4NWY0YmVmNTcsIDB4OGY5NWFjMmUsIDB4MmRmOGE5YjcsIDB4OTBlNTQ3ZTgsIDB4OTgxNjU1OTEsIDB4MWZhOWFlZDcsCisJMHhhMTEwN2VhMSwgMHhkNDI3YzVmZSwgMHgyNDk0MjBjZiwgMHhiZTZjY2E4ZiwgMHgwNGJmYThjZiwgMHgyZmVhMzZmNSwKKwkweGQ1MjEzYjQxLCAweDc1ZTI1ZmI4LCAweGFlOGMzMDdkLCAweDNmMjg5ZjNmLCAweDI2ZjNlZTE3LCAweDllM2EyOTY0LAorCTB4YzhmN2Y4YzQsIDB4ZjgwN2MxMWEsIDB4MTQ1OTdkYjgsIDB4M2Q2ODdlMDUsIDB4NGQzOGRlODUsIDB4ZmIwZmVlOWQsCisJMHg3YzEyYWUwNywgMHg4NjM4MGJjZiwgMHg5MzMzZTAxYiwgMHhiZDYwNDc4ZiwgMHg2NzYwNWViNCwgMHhlOGEyMWNlZiwKKwkweGIwNTE0ZmVmLCAweDhhNDBkNTYwLCAweGIzMzhkMDhiLCAweGE0NGU0Yjg4LCAweDVhNTljZmVmLCAweGEyZTg0MzI4LAorCTB4MmYwNjEwNTUsIDB4MjA1OWZhMDEsIDB4ZTAxMTk3NTMsIDB4NjkyNzhkZTcsIDB4N2FlODM4OWMsIDB4ZjFiM2I2NmYsCisJMHg2M2U0YmE2NywgMHgxNGY1YWE2ZCwgMHgzZTU3NjZjOCwgMHhhMTQxNGY1ZCwgMHgzNTlmZWI4OCwgMHhkMWZlZGI0MywKKwkweDYxOTcyOGNlLCAweDNkNTcyZDBjLCAweGM5Y2NmMzgxLCAweDU0ZGZiNmQ3LCAweDc1Y2ZhZGEwLCAweGVmNTRlYjZiLAorCTB4NmVmN2EwYzksIDB4YTczZmQxMjksIDB4OWNmYmExNjAsIDB4NWQyYjg0MTcsIDB4YWRlNzVkMjgsIDB4NTZiNzBlMWMsCisJMHg1ZTBkNWVjOSwgMHhkYTU1NmRjMSwgMHgyNmUwYTAyMSwgMHg1ZjdjMmZiOCwgMHhmNmZmZDllYywgMHhhMTdhZGE2NSwKKwkweGIwNWY1YjU3LCAweGE3M2UzNzRhLCAweGZmMWNlMzliLCAweDY4M2U4MDQ3LCAweDgzZTgwMjc5LCAweGE3MThmM2MyLAorCTB4ZDU1YzkwOGYsIDB4YzE4ZGM3ZDIsIDB4NTBmYTMwNmQsIDB4NjI1YzcxZjYsIDB4OGViZTM4MjgsIDB4ZGFjMmM3ZDEsCisJMHg1MGY0ZjBhOCwgMHg5NzA3YTQxOCwgMHg3YTE0YmU5YSwgMHhjM2QzOGRiOCwgMHg4YTFlOWNhNywgMHg2YWU5NmFkNywKKwkweDRjYWRmMTJlLCAweGIyZGZlZmEyLCAweGU5ZTIxNzY2LCAweGU4Yzg1MGEwLCAweDNkMGE5N2UxLCAweGMxZTg2OWI0LAorCTB4OGY0MWU5Y2QsIDB4M2QzOGRiYmYsIDB4NDY3M2Y2ZGMsIDB4YjY3YzdhMGYsIDB4NWI2ODdhNzEsIDB4MjkyNjRlN2IsCisJMHhmMTRhZjEzZCwgMHgzYzUzYTlhMCwgMHgzNzZlZjBlOCwgMHg3YzUwM2QwMiwgMHhmOTg3YTU4NCwgMHg4ZGQzN2RjMSwKKwkweGRlMDJmYWQzLCAweDljNWYwM2Q2LCAweDA1M2RiMDFlLCAweDRlMTA0ZWMwLCAweGNmNmE3ZWY4LCAweDY4NGU1NGZlLAorCTB4YzM2YmM1ZWEsIDB4MzFiMmJmZTMsIDB4NmE5OGVlM2IsIDB4NTdmNWU1NWQsIDB4ZjU1MzFkYzUsIDB4NTMzNzVjNWIsCisJMHg5YmU0NWY1MywgMHhiYzVmZTlhYiwgMHhiZWQzNTBiNiwgMHhhNjkxNzZiMCwgMHgzYmFhYzE3ZCwgMHhlZjQyZjUzNSwKKwkweDZmZmQzNWNmLCAweDY5YWQ1NjVmLCAweGI1NmFiNWJmLCAweDkyOTZmZGE2LCAweGI5ZjUzNGM3LCAweGZhNmI1ZmVlLAorCTB4NWViMDU0ZGYsIDB4ZmYyNzNlZDMsIDB4YWNmYjRkNDUsIDB4ZjUzNDViMTksIDB4MzRkN2FlOTksIDB4MmYzYjBkZmQsCisJMHgzMWU4MWViZCwgMHhjMDQ4YTBlYiwgMHg3MWU2MzhmZSwgMHhmNzFmZGQyMCwgMHhhNGYyYzQ4YywgMHg3MTdjODljNywKKwkweGNiMDEzM2RhLCAweDRmY2Q4ZDdkLCAweDdjYmI0OTVjLCAweDI2ODgyODE5LCAweDkxMTY3ZjRjLCAweDJjZjY0MjE4LAorCTB4Y2FhZjU3NzcsIDB4NTA0ZTdkMDIsIDB4Nzk3MWZlZWYsIDB4MTA3N2I1NTEsIDB4MDcwNjUzOTUsIDB4YWQ2ZjM5YzIsCisJMHgxMWM3Zjg5MSwgMHhlMjUyODAyMiwgMHg1MGM0MDdmMywgMHg2ZDFiNTY3YiwgMHgzZGJkZWI4ZiwgMHhiNjE0YWQ2ZiwKKwkweDBhNGRhYjNkLCAweGUzZTU2ZTNiLCAweDYxZWQ0Mzg1LCAweDdlMjEzM2UyLCAweDNlYzEwMzI2LCAweGI5ZjZlMmVhLAorCTB4MjA0Y2JkYmUsIDB4ODRlN2VhZjksIDB4OGZmZTQ3MmMsIDB4NWNmZDMwMzEsIDB4YTI3MjY0NjYsIDB4MWNmZjZiNmMsCisJMHg3ZmJhODM2MiwgMHhlNjg1ZDU0NCwgMHg5NWNjYTdhYiwgMHhhYTkxZjQwOCwgMHhiNWUyZTNlMSwgMHgzY2U0Njk5NywKKwkweDNjNmRlODgxLCAweGNkMzhkOWQwLCAweDU3NzVjNWYzLCAweGQ4ZWJkZTZhLCAweDJiYmFlMjI1LCAweDdkNTA4NjQwLAorCTB4MDdlNDhjM2QsIDB4ZmQ5N2EwMGMsIDB4OGQ2NjQzY2QsIDB4Y2ViYTc1ODYsIDB4MzU1ZTQwMWEsIDB4ZDhmZGEzYzYsCisJMHg3NzExOTllMSwgMHhlNjNjMDI0YywgMHg1M2QyNzk2MywgMHg4ZjcxZTU4MCwgMHg5ZTYzY2IxYiwgMHg3ODhmMmMxMiwKKwkweGYzNmNiMGFhLCAweDMzZjJjMzJjLCAweDRmY2IxNzhmLCAweGZjYjBhYjNjLCAweGU1OGI1M2M4LCAweDJjNWFjZjYxLAorCTB4NTg3YzdhMGYsIDB4NjFkNGYwMWUsIDB4MWVhN2JlZjksIDB4MjM0ZjU2Y2IsIDB4MTcxZTlkOTYsIDB4MjliZjBhOTYsCisJMHhkZGQzZDBmMCwgMHg0ZmE3YWU0OSwgMHg4MDVkZmQwMywgMHgwN2M0ZTJjZSwgMHgwYTBkNTdhYSwgMHg4YWUyNTlkMSwKKwkweDU5YmRhYjg3LCAweGQ2ZjM3MWExLCAweDI0OWQzODlhLCAweDA4NjFlODY4LCAweDgxZTM2NGY4LCAweDVlOWM0YzVlLAorCTB4YWRlN2I3YzIsIDB4OWVkODJmOTUsIDB4MWQ4NzI2ZDUsIDB4N2ZmOWYyYmYsIDB4ZjljZGJkMGQsIDB4YTIxNmY0OTEsCisJMHg3YTNhODFhNywgMHgzZDE4YmQ0YSwgMHg4N2M3MTI0ZCwgMHhjMThlNjllOCwgMHhhNzFmZjRjZSwgMHgxZjYwODdhNywKKwkweDYyOGZmYzYxLCAweGFiYzZlYTMwLCAweDE0NTczYWVjLCAweDczZjM2NzhiLCAweGIyZDE2YTA3LCAweDdiOWYzNjc4LAorCTB4MTVhZTFkMDUsIDB4NDhkZjNmZWQsIDB4YzhmNzczYzAsIDB4Nzg4MDhmYmYsIDB4YWE2MWY3N2QsIDB4ZGY3YjkzMjgsCisJMHg3YTVlOWU5ZiwgMHhmZDBiYmI4NywgMHg1NTFmMjJhMCwgMHhiNjdhZTNhMiwgMHhiODMyNDQ0NywgMHgwY2M4MTg0NiwKKwkweGVhYzg0ZTkyLCAweGNlNzViZmUxLCAweDQ0YmFjMzRmLCAweDlmN2RlMTYyLCAweGYzOTg2NjczLCAweDRmNjcwMjI4LAorCTB4ZWI4NzE3ODksIDB4NjM1N2ViMGEsIDB4Y2ZlM2JjNjAsIDB4Y2ExMzIzZmMsIDB4ZTYxNDg2MzksIDB4Njg4YjM0ZGYsCisJMHgwYmZmMTNkZiwgMHg1MDZmODA0ZSwgMHg0OTljOTkxZiwgMHgwYzBmMDcxMCwgMHgzZWQxZGEzNywgMHhmMGI0NTlmMCwKKwkweDY2N2FkMmYzLCAweDI5YWI3ZTA4LCAweGRmNTE1YThjLCAweGZjMjEyNmQ3LCAweGEyMzU3ZDg2LCAweDc3ZTAxZjdmLAorCTB4MzE3ZjM5MzEsIDB4MGRmN2NlNzgsIDB4ZjNjMDk3ZjgsIDB4NjJmMWYyNjIsIDB4MWNiODkxNzIsIDB4ZmRkMjM3MmYsCisJMHg5ZDFjZWQ3NywgMHhlNDAzYTBmZSwgMHhhZGUxODVlMCwgMHhkN2U5NWY5YywgMHg3ZDI4YmNmMywgMHg0YWVlM2EyZiwKKwkweDc1YjhlODUwLCAweDg4ZjNhMTA4LCAweGVmYzcxZGEyLCAweGM5ODRiODZlLCAweGRiZWVjNTJmLCAweDA1ZjVmMjY2LAorCTB4YjU5MjY3YWYsIDB4ZjljNTNkZTMsIDB4YmJhZjE5NGYsIDB4ZjgxYjA1ZTUsIDB4MGM5MjRiNWIsIDB4ZjA2MTYzZjYsCisJMHhmNWU1OTRhMCwgMHhkYThiNzZjOSwgMHhkNmQ0NmNmZSwgMHgxOTg1NmJiYiwgMHgzYTI3NjhmNSwgMHgwNjhmNjdhMiwKKwkweDFmYjc2MTNkLCAweDNiNzIwNjFiLCAweDljNjU0YjA5LCAweGZiNDY0OTI1LCAweDRlZjcyYTMxLCAweDMzNDZhNWQ3LAorCTB4ZTRjN2NmM2YsIDB4OTQxOGU2YzEsIDB4NjYzZGE3MTcsIDB4YWY1M2ZmZWMsIDB4OTQ3MWI3YTcsIDB4NDBkMjEwZjUsCisJMHgxZTQxOWE4ZSwgMHhkZWQ0YjZkMywgMHhjZjRhZjdmYiwgMHgzYzQ2MTdkMiwgMHhiZjkyNmRmNywgMHg0Y2QwZmIwMiwKKwkweGZjMGVmZmZmLCAweDVkNjEyMjBkLCAweDVlYjJiNzE5LCAweDg3MmU5YWY0LCAweGYzMzU5YmU3LCAweGNhMWNmN2QxLAorCTB4Mjk3N2ViMTksIDB4ODkxYmUyMTcsIDB4OTZlODU3MWMsIDB4NWM2MzhiZWEsIDB4OGJhZTJjOWYsIDB4Y2ZlZDZiYjAsCisJMHhiMmJkNGQxOCwgMHg2MzVkYmZiMSwgMHg1NDFmYzI4ZiwgMHg0MTJhOTJmZSwgMHhlMzI5ZmEwMiwgMHg1OTI1ZDNlNCwKKwkweDdkNzQwOTU2LCAweDEwOTA0MjZmLCAweGZkNjA1NmU4LCAweDQ2NmRjZGNhLCAweDk1Y2UwM2I3LCAweDViN2FkZTE5LAorCTB4NGNkZmM1MWYsIDB4ODk3YzkyODksIDB4NjFjZjE2YjksIDB4OWQyZmVhNGIsIDB4NGNlNjdhMGEsIDB4ODgwNDhhYzMsCisJMHhiYjE2MmMxYiwgMHhmMzBmYzllZiwgMHg3OTMxMmNiZSwgMHgwNzI3YzhiZiwgMHhhNzNkZjZiNCwgMHg1NWM3NDIwZiwKKwkweDk0NWM2MzllLCAweGVhYWI4ZTU4LCAweDhmMTYwNjFkLCAweDAwOWI4ZmQxLCAweDFjNWZjNmUzLCAweGY3OWIxNTNlLAorCTB4NDEzYjA3NGYsIDB4YzY4YWE3MGYsIDB4Y2EzNzQ2YjMsIDB4NjY1ZmZhNDUsIDB4ZmMwYTRlMDgsIDB4MTNmMzE0ZGUsCisJMHg2OTdlM2EyNCwgMHgyZGM2M2I1ZCwgMHgxMWRlY2E0ZSwgMHhiYzgwYmNiZiwgMHg0YjNmYjllYywgMHhkNTI4ZjFkMiwKKwkweDE1YTRiY2JlLCAweDgxM2Y5OWU2LCAweDM3MWM0NDRmLCAweGY4ZTU0YzdkLCAweDA0YzkzZmE5LCAweDRmMzkxMGU0LAorCTB4NDg2MjY1N2IsIDB4MDYzYmZiODYsIDB4ZjkwY2M4NjIsIDB4MTYxYmYzM2IsIDB4NGZiYzAxZTcsIDB4ZTU0N2JmODEsCisJMHhkZjI0MWRlNiwgMHhiNTIwNzg4NiwgMHg5Y2RmZTA5OSwgMHgwMDE5ODYyMSwgMHg3ZGU0MzNhNywgMHgxZTE1MzhkYiwKKwkweDg3MjMyNTcyLCAweDk0ODI5NTMzLCAweGYxYzE0YzFlLCAweGVmYzFmZGRkLCAweGI0ZDQxNTMyLCAweGI5ZTA2MzhhLAorCTB4YzIzZmY4YTQsIDB4NzI0NzE4NzcsIDB4NTBiNzk4MGIsIDB4ODk3YjllYzAsIDB4OTdlODFhYjksIDB4M2YxYTUxZmEsCisJMHg5YTUxZmE4ZCwgMHgzNGEzZjUzYSwgMHg0MzcyMjJmNSwgMHgxNDI1ZTQwMiwgMHg5ZjEzMjkzZCwgMHhiNGQyNzA4MCwKKwkweDg4ZWM5MjhmLCAweDU1NTI2MmM3LCAweGFmZDFmNjAzLCAweGJlNmRmYzc5LCAweGU5MDM0ODlkLCAweDdkNWZjYjNlLAorCTB4ZWU5MGIzMzYsIDB4YzU4OTZhZTcsIDB4ZjU3Mzk0ZmQsIDB4MGUwY2IxNDUsIDB4YTMzZTI1YTUsIDB4N2Y3M2QyY2IsCisJMHhkZGM2MWI0NywgMHg4YzNmMjU0OCwgMHg2ZmNmY2VjNywgMHgwNTFlNjIzNiwgMHhkYzk5NGFiNCwgMHg3ZGU5NDlmNCwKKwkweGEyMGQ4OWZmLCAweGZkMDZjMjJiLCAweGJkNjU3M2U4LCAweGZmN2ZkZmM5LCAweGYyMTJmZGZhLCAweGI0YTNlZTM4LAorCTB4ZmEwMTI2NmUsIDB4YzAyNzkxZWIsIDB4MDlkNzIzZjcsIDB4N2UxODVmMmUsIDB4YWY3NGU0MmEsIDB4MDEzYmE3ZTgsCisJMHhmMTQzZTM3ZSwgMHhmNTc0ZmJhYywgMHg0YWJlMWNkNSwgMHhmYjVkMjlmZCwgMHhmZDJmOTYwZiwgMHhiY2JlNDY4OCwKKwkweDkzZWZiYTI5LCAweDAyNzkzM2M2LCAweDAwYTQxN2YwLCAweDFlMGZkN2YyLCAweGY4YzdhOTNmLCAweDdmMWY4MWFiLAorCTB4NjkwN2YxYjIsIDB4ZmY4ZTllZjksIDB4ZmViYTRmZDQsIDB4YmZkNjNkNjEsIDB4Y2JmYWRjM2UsIDB4YmI2OTdkNWYsCisJMHhkMjk3ZWE5NywgMHgyMzY1M2MzZiwgMHg0OTRlZGY5NCwgMHg4YTRlMDliNSwgMHgyYjhkYjJmNywgMHgzYjkwMmU2ZCwKKwkweDdjMDZkNzkyLCAweGNlMjdjYTcxLCAweDg3MGY0NzA4LCAweDA2YTU3Y2I4LCAweDc4ODA0NTg4LCAweGM3NDlmYzJiLAorCTB4YTFlOWJkM2YsIDB4Zjg5ZWMwZWIsIDB4Yzc2Y2EzNmEsIDB4Yzk5ZDZhMzgsIDB4NWNmNGEyNmYsIDB4OGYyOGIwZDEsCisJMHgzYjdhYzE4YywgMHgxNjcwM2ZhYiwgMHg1MWIyYmZlOCwgMHhkM2E2YTIzZSwgMHg5NTNkZGZkMiwgMHg5NDM1NzkwMCwKKwkweDkyMWEwNjUyLCAweDdmYTNmNGEwLCAweGYzZTFiMTUyLCAweDU0NmY2MGU5LCAweGFiZjIwMDkyLCAweGZmOTgzZGZlLAorCTB4ODdkNDU4OWIsIDB4OWVlOGM2ODUsIDB4NDk5ODE4ZWQsIDB4YWZkOWY3ODAsIDB4YjNhMWUxYjIsIDB4NmFmZTBkYTIsCisJMHhiZTkwMzhjMywgMHgzN2Y3MDk3ZiwgMHgzZjZiMjQ1YSwgMHg4MmI5MjczYywgMHg1NGYyMDE1YywgMHgzMWYxMDc4MSwKKwkweDhiYzU2MzdmLCAweDRlZDMxYWJmLCAweGUxYjFkM2Q3LCAweDA1NDEzNjRmLCAweGVhNGZjNTI3LCAweDliZjA1ZmFlLAorCTB4Y2JiZDFkZDcsIDB4ODdjYTRlZWYsIDB4ZDE1NmJiNmEsIDB4ZWU0NjhlNGYsIDB4YjJiMTM1MjcsIDB4YWVkYmY2NGMsCisJMHg2Y2E0ZjJhNCwgMHhkMmY0ZWNiZCwgMHhiZDJmNjVjNywgMHgyMDY3ZGJmMCwgMHhjOWExZmQ3ZSwgMHhiZjhlOWMzOSwKKwkweDA3M2RhNWY4LCAweGUyZmFkMTI3LCAweDNjYmY3MjJkLCAweDkwOGIwZGI2LCAweDI1NGJjMjEwLCAweDdhNTk3ZmZkLAorCTB4YWZhNTBmMDgsIDB4NDYzYTMxZWMsIDB4YzZmN2U3YjMsIDB4NzhiMWYwODYsIDB4MTkyMzJlY2IsIDB4YjkxZTEzZGQsCisJMHg2ZDhjYmJmNSwgMHhhOTc4MzA5NiwgMHg3NjBlOWY2ZiwgMHhiZjE3OGFkZiwgMHgzYmJjODIzNiwgMHg4OTIwNTNiNSwKKwkweGI5ZTA2MWM5LCAweDg1ZGEwZjdlLCAweDIzYzQyNzAwLCAweDZmMTA1M2M3LCAweDE0OTVmZWJhLCAweDE0NWZhMDJmLAorCTB4MzdkYmU5M2MsIDB4ZTMwMjc5NzEsIDB4OWU5MGQyMzksIDB4Y2U5ZDdlNWYsIDB4Yzk5MWYyNWYsIDB4NzkyZmZiMDksCisJMHhlYzFiMmVmOSwgMHhjNTU0ODRlMywgMHg5NWQ5ZmFlOCwgMHg0YWRmMjAwOSwgMHgxZDgyNmY2NCwgMHhlNGJjZjY0YiwKKwkweGRlOTFiYmI5LCAweDlkZGZmNzhhLCAweGFlOTJlMmMwLCAweDk1ZDQwNmZlLCAweGJmYjBmZWRlLCAweGUwZTZlYjg1LAorCTB4MWI4ODhhZmUsIDB4NTllNGFlZTksIDB4Y2I0N2RmMzEsIDB4NjMzMjI1MmYsIDB4YjhiZTE4NGIsIDB4ZjI3MjY2NTYsCisJMHgyMzU0ZjNjNCwgMHg1MDlkZmRkMCwgMHgyMmZiYzBmNCwgMHg2Mjc3MDNkNywgMHhiZTZlZjNkYywgMHg2MjMxNmExNywKKwkweGMzMzM0YmZkLCAweGMwZDkzMGQzLCAweDJiZDMyY2U1LCAweGYwZGQ3YTQxLCAweGQzOGJlYTAwLCAweDcwODk1ZDgzLAorCTB4ZDIxOTU2YmUsIDB4YzQzN2E4MGYsIDB4MTkxMmQzZmQsIDB4YzE5ZTk4N2UsIDB4Yzk5ZWE4ZjcsIDB4YmZkMGU3ODUsCisJMHg4YzQ1NzY1NSwgMHg3YTg3YmNkMSwgMHgyOTdmOTk0NSwgMHgzYmFlOWY5ZiwgMHgxM2I1ZWMxMiwgMHg4ZmZkZTEwOSwKKwkweGRmMGFjYjlmLCAweDQ1NDJiYjUzLCAweDY2ZmUyYTVmLCAweDM1NjFiZWZjLCAweGRmODU2ZmUzLCAweDQwNjczMzdkLAorCTB4MTgwNzE3ZmIsIDB4YTA3YmMwZmYsIDB4ZmNiYWU5NjcsIDB4NmJiZWQ4ODksIDB4YzBmMjgwYjYsIDB4ZjhlMWZjNDQsCisJMHhmOWNjODM3YSwgMHhkMGFlZGI1YSwgMHgyNGI3NWQwOSwgMHgwNWU4YWI0NCwgMHhmODQ1OGZjNiwgMHg3YTJmNWVhMywKKwkweDkyYTdiZTkyLCAweDlmMzA5NTk3LCAweDBhNzhlN2FkLCAweGZlNzMxNmRmLCAweGY5NmIyMTlmLCAweGVmOGJhYzlmLAorCTB4OTk2NTNlNTMsIDB4MzNlZGZiZWMsIDB4M2Y5NGFmYzAsIDB4NTdlMDBlYmQsIDB4ZmRmNjFmMzksIDB4MDdjZGNkYjcsCisJMHhmYTdjYTY2ZiwgMHg0Zjg1N2FiNywgMHhjZjUzZjJiNSwgMHhlZjViMjVhNywgMHg3YTlmNDAyNiwgMHhhMGRiZmQzZSwKKwkweDRmOTYxMjJhLCAweDdjYjBmM2U5LCAweDdmZWRhODNhLCAweGYwMmE3ZTU0LCAweDQ1ZjgwMmFiLCAweGM4YTdlMDg1LAorCTB4YThlMGRlYzMsIDB4ZDk1Njg3OTcsIDB4ZDIxZTU2MTEsIDB4ZDk5MjAxZGYsIDB4YmExNGZlOTMsIDB4ZjRhZGU4NTMsCisJMHg0MTQzZTVmNywgMHg1MmU5MDRlZSwgMHg1ZDIwYmJhMSwgMHhkZmE3NzQyYSwgMHhmYTdlMTZhZiwgMHhjMTMyNDlmNiwKKwkweDI2YmZlNTc1LCAweGQ2NWNmZmEzLCAweGU5NDJmMmM0LCAweDY2MDc3YjdiLCAweGE4NWM5YzIwLCAweGRlZWQ0OGM2LAorCTB4NzVkNGZkODEsIDB4YWY1ZWFlOWYsIDB4ZDVkMmVmZWIsIDB4ZGRmZDc1ZjMsIDB4YTY5NTdhYmEsIDB4YjM2MzU5N2YsCisJMHhmZGZlMjA5MSwgMHhiMmUyN2U5YSwgMHhiOGQxYzg2NywgMHg2M2VhZjQ3MCwgMHg1OWMzNTk3ZSwgMHhjMmU4MTdhMywKKwkweGU1ZjdjMDEyLCAweDc5MGJjNGU1LCAweDIyMWQ4MTg2LCAweDI4YmEwNWM2LCAweDdlMjA2YjhjLCAweGU3ZDkzOWIxLAorCTB4NjU2MzcyYTUsIDB4NzQzZjhiMDQsIDB4NThiNjAzZDksIDB4NjE4Y2FlNWEsIDB4YjFiYzQwZjUsIDB4ZjI5ZWU0MDYsCisJMHhlMmMxMTAzYywgMHgwMWY5NWQ4YSwgMHg5ZmNhOGM1YiwgMHg1MTEyNmY2YSwgMHhjOGY5Yjc2ZSwgMHgxNjdlNzA4YywKKwkweDQ3YzgyOGQ1LCAweDc2YjdhNDZkLCAweDRkMzVlZTc2LCAweDA2NTkwY2I0LCAweGQxNWFhNTcxLCAweDFkZjgzNjA5LAorCTB4ZTBkOTM3ZDUsIDB4MjlhYmE5ZGMsIDB4ZmEwMmZhZjUsIDB4NDUxZmUxN2MsIDB4OGFlOTdiNGMsIDB4NzU4MThkYjQsCisJMHhlYTRiYWYxMSwgMHg0ZTZmZjJhZiwgMHg1OWQzZWYxMiwgMHg5YTBiN2Y3NCwgMHhjNzczOWY5OCwgMHg0MjNkOWQxYSwKKwkweDE1M2QyMGQ2LCAweDQxMWE5NjU5LCAweGUyN2Y1MjllLCAweDg2YmNmNjg4LCAweDFmMjk0NWYxLCAweGI2OWQ2NGFmLAorCTB4ZDI5Zjc5NWQsIDB4YTVmM2ZhMDEsIDB4NmVlZGI0MWIsIDB4YTA3ZjBmZWUsIDB4MzI1OGM5ZjAsIDB4MmNhM2ZiOTYsCisJMHhmMmU1YzMwZSwgMHhmYWVkMzEzNCwgMHhhZThmOGEwMiwgMHg2ODk4OTExNiwgMHg0NDQ5YmJiZCwgMHgxNjZmNzQ3YywKKwkweDIzNGYxMDdjLCAweGI3ZTQ3OGRlLCAweDc5NDAxMjBhLCAweDAzYTljMGE4LCAweGJiZDhjOWY4LCAweGY2ZDhlYWJjLAorCTB4ODEyZmU2NjksIDB4M2M3ZmI2NmUsIDB4ZDk2OTNmZTYsIDB4MTFjM2ZkYjEsIDB4ZDVmZDQwNmYsIDB4MjYzZTQzNDMsCisJMHhlZWU3ZmIzZCwgMHhmZjczYzA4YywgMHhhNDU2OWRhZSwgMHhlZjFkYWVmNywgMHhkNDI1ZjkwZSwgMHg2MTM5MzM1ZiwKKwkweGJmM2I1ZDlkLCAweGQzZjQwMzFlLCAweDAyNTRkY2I1LCAweDMwNmJhZWYyLCAweGQ4YWVjNzhiLCAweDM2OThmNWYxLAorCTB4MzNmN2FmZDQsIDB4ZmU2NDYxZmQsIDB4M2ZkMzc3NjEsIDB4NDFmYTEzM2UsIDB4NzYwNTc3NDksIDB4ZTQyOGNlYzMsCisJMHgyM2Q3Y2FhNywgMHg2YmJiZGYzMCwgMHg2ZTk5ZDdjNywgMHg5ZmI3NGZjYiwgMHhkMWU3OWUwYSwgMHg1YjA1MjU2NSwKKwkweDJjMzE3ZDYxLCAweDhkZjJhMThmLCAweGQzNTQyZjg5LCAweDc2MWJjYmY5LCAweGY2ZDAxNzE5LCAweDM5ZmYzN2RjLAorCTB4ZDc2OGU0MDYsIDB4NzUwZjY2NTYsIDB4NDFjZjZkY2EsIDB4ZjE5NDQzMWUsIDB4ZTI5OTcyZGMsIDB4OGE5ODEzYWIsCisJMHgzM2JmY2QzYSwgMHhkZjAyZTQ2NiwgMHgzZmNiODRmNCwgMHg1N2Q2M2UzMSwgMHhhZmZjYTQ3OCwgMHg2MmUwODc4MSwKKwkweDMzZWFjZWYyLCAweDZmZWZiMDBiLCAweGUzMThmYjNmLCAweDRiYTQyNjlhLCAweGFiN2ZiZjY1LCAweGU1N2I0NmFmLAorCTB4ZmVjZWZiNjIsIDB4ODJkZjZlN2YsIDB4NzZmYjJmYmYsIDB4ZmJlZjliZmYsIDB4N2FiYmQ3MzgsIDB4ZTc0OWU4M2UsCisJMHhmYWMxZWUzYiwgMHhhZTI3NTY0YiwgMHhlZWY0OGZiNywgMHhmZmM3ZmQ4NSwgMHg3YmZmZWVmYiwgMHhjNTJiN2RlMywKKwkweGZiZTJlZGJiLCAweDVhZmZjZGZlLCAweDM2ZjFmZmJjLCAweDdlM2I3NzhlLCAweDNmZTZmM2Q3LCAweDU3ZGY3ZDcxLAorCTB4NmZmOWJkY2UsIDB4ZjZkZWY3OGUsIDB4YWRmNWQ4YWYsIDB4MDY3YjJhODYsIDB4YTkwMTVmNWQsIDB4MzE2MTgyYjUsCisJMHg5MmRiYmUzNywgMHhkNzZjODBlMSwgMHg4ZjMwZmQ3MywgMHhjMzRiY2UwZSwgMHgyMzAxNGRmOCwgMHg5MDRkMGJmMywKKwkweGZiN2UwNzQ3LCAweDBiODk0MTFjLCAweDFkNzUxZmEyLCAweDFiYWUxZmI3LCAweGM4NzY4MjU0LCAweDk5ODdhZTc1LAorCTB4YjU1NTIwZGQsIDB4YWRmZWQzNjYsIDB4OTg5YzBiMzksIDB4MGZkMjQ5NzMsIDB4N2IzZWExYmIsIDB4ZmQ2YmFmMzIsCisJMHhlMjA0ZjdjOSwgMHg3ZjFkYTgxMiwgMHgyZDM1Y2U1ZCwgMHhlZjVlZDc2MCwgMHhhNWVlZDExMiwgMHgxZmJiZGEyNSwKKwkweDllY2U5OTBjLCAweDNkZmFkMDRmLCAweGZhZGFkZDczLCAweGZhZGEwNTRkLCAweDhkZGUzZTFjLCAweGM2ZmZhZDg0LAorCTB4NzEwN2MxN2MsIDB4MTNmNjUzNTUsIDB4MzU2NzEwZjEsIDB4OTA4OTk0MmQsIDB4NTU0MmY5MGMsIDB4OThiZmMxMmIsCisJMHg3ZjdkYWY5MywgMHhlM2MxZjgxZiwgMHg1MzFjM2M3ZiwgMHg5NzFjMGE0ZCwgMHhiNjQ4NWMyMCwgMHhmYTQ4ZGNlOCwKKwkweGVlYmU0NzAwLCAweDdkNjNkOWQ2LCAweDI0NGNjZjkwLCAweDhkZTM4MzI3LCAweDgzOGM0ZWU1LCAweGU2NWI3ZjczLAorCTB4NTU5NmNiZWYsIDB4YjJjZmMwYWQsIDB4ZmM1NmNmY2UsIDB4NGRlMGRlZTUsIDB4ZTM4ZGZmYjgsIDB4MmZlMDg0YTQsCisJMHhiZmY0NDRiYiwgMHhhZGZmOWQ2NSwgMHhlMmZiZTVlMCwgMHg4ZmUzYzE0MywgMHgzYTk3Y2JjNSwgMHhiOGIyMGNiYywKKwkweGNjYWJmMDA4LCAweDE2YTk4NWZkLCAweGNhMGZhYjI3LCAweGM4ZGU3ODI3LCAweDlmYTkwNWZkLCAweDQyZDM3ODhiLAorCTB4Y2M4YmRmNzksIDB4NWYzODZjZTYsIDB4MzAxNDhmMzMsIDB4MWFmZDcxZGUsIDB4Mzk4M2Y1MTEsIDB4ZTU3NWMwNGQsCisJMHg4ZjMxOTA0ZiwgMHg3ZTQzNzNmOCwgMHg2ZjNiZTAyNiwgMHhiZjE1MTVkYywgMHgwMjcwY2I2MCwgMHhiODcxMTczYywKKwkweGI0MmE5MTE3LCAweGVmZjljOTVmLCAweDg0Y2FjYmJlLCAweGY2ODIwNjczLCAweDIxMTcyMmVmLCAweGFkYmY1MmQ3LAorCTB4NDdmMDRiMjgsIDB4NGIxNTc4NTIsIDB4MGU5ZDFiYzQsIDB4MWM4MTZmNzEsIDB4YjViZGM0ZDEsIDB4NDdmZGY4NzUsCisJMHg4YjljNjg0MiwgMHhiZTRkZWZmNSwgMHg1ZmU1ZDRmYywgMHgzMjNiM2NhOSwgMHgxZTQxZmE4YywgMHg1ODQ5YmI5ZSwKKwkweGFmZjE1NmRjLCAweDcwNjI2ZjZmLCAweDdjMTMyY2FjLCAweDdlNzc0ODI5LCAweGVlNzU1ZjM5LCAweDgzZTcxY2Y4LAorCTB4MGUzYmRlYmYsIDB4YTNmNjY0ZTUsIDB4ZWZkMWEzYTMsIDB4NmZkMDM5NzcsIDB4NDM3ZWU0YTgsIDB4MGQxMWQ3YjcsCisJMHhhNmVlYWU3MSwgMHg5YjNlN2U1NCwgMHg1NWNiNTM2YiwgMHhmZGNmZGNhNSwgMHg3ZTQwYmZlZSwgMHhhNmJiMmQyMSwKKwkweGY4MjJiNTBhLCAweGYxODAyNDcxLCAweDA4ZDRlZjVjLCAweGZlNGMzMWIyLCAweDE5MzFmZmViLCAweDYxNTRmZDM4LAorCTB4NjI3ZTAwMWMsIDB4ZmQ5MWUwMjYsIDB4ZDFhYmU5OGEsIDB4YWRiYzJhYjEsIDB4MzQ5NGY2YjksIDB4ZTAxZTI3YTYsCisJMHgwZTc1NDQ3NywgMHgwYmUxNjNmOSwgMHg3NWMwM2U3ZSwgMHhmNGRiNDQ3ZiwgMHhhZGZiMzBmYywgMHg1NjM4YjEzNSwKKwkweGUyZGY1YmRlLCAweDM0Mzc5Yzc3LCAweDk3MDBjYjI1LCAweDlhOGFhNjFiLCAweDI2NTVmYjczLCAweDIzOGQ5N2VlLAorCTB4Nzk1ZDYwZTMsIDB4OWI2NTVkNmYsIDB4MTE2OTc4MDgsIDB4NjZkZGYwOWQsIDB4YTM1OWQzNjUsIDB4YjA3OWNjM2IsCisJMHgzZTMwOWUxZSwgMHhjYThmZDVjNCwgMHhlNzgwMjJjZSwgMHgwODIzODdkMSwgMHhmMmVmZDFmOCwgMHhmODM0YzY3MywKKwkweDQzMGQyMjZlLCAweDJiODgyZTNhLCAweGI1YzM5YWZlLCAweDcyYzc2NGQzLCAweDFjYjY1ZTU2LCAweDZiNGRlNzRmLAorCTB4YTM4NThmYjAsIDB4N2ZiYzAxZDQsIDB4ZTMyMTE4MjcsIDB4YmQ4Nzg5MjEsIDB4NTAxYmY0YTcsIDB4MWJiNWZhYzYsCisJMHhmNmUxMTVlZCwgMHhlZDgyM2MzZiwgMHhlZjM4OThiZiwgMHhmYmZjMjA5OSwgMHg1MWZiMmRlMSwgMHhlYzA3M2ZhYiwKKwkweGFlM2NhOTgzLCAweDA5YWU4M2QyLCAweDBjZjc0N2YyLCAweDFiZmEwN2MxLCAweGU3YWM2MWZjLCAweGRmODRlZmIxLAorCTB4YmViM2JlNTUsIDB4ODU1OWU5ODEsIDB4ZGU3MGY1ZWUsIDB4Y2NhY2UxY2IsIDB4ZTJjNGRjN2YsIDB4ZmNlMjdmYWYsCisJMHg4MTU5YzBhNSwgMHg0YWJkN2VhZiwgMHhhNmFmMmE3ZiwgMHhkNzUxZTNhOCwgMHgxOTdkOGUzNywgMHgyNjhhOWJlYywKKwkweDQzYTA2ZWMxLCAweDQ2NmQ0ODU1LCAweGM2Y2FjM2UwLCAweDZmMzg2NGM3LCAweGUzNjBlYjk5LCAweDhjN2YyOTEyLAorCTB4ZDNhMDlmM2EsIDB4OWEzYmYyYzQsIDB4MGRiY2FmZDMsIDB4MWFkY2U0ZTgsIDB4ZTI0MmU4MTMsIDB4MGRhY2UzYmEsCisJMHgwNmJiZjBlNCwgMHg3YmUxOWZlNywgMHgyMjdiZWY2YSwgMHg3OTAxNzhkOSwgMHhjZWE3YjFmNSwgMHg4ZjUyNTUzNSwKKwkweDljZWI4YzliLCAweDQzMmQ5NjU1LCAweGIyOTZlY2Y4LCAweDhhYTI3MjVkLCAweGIxNGQzYTllLCAweDFmM2NhZWQ4LAorCTB4ODc0OGU2NTAsIDB4NWMzZTc0ZTcsIDB4MTMxMWY3ODcsIDB4ZDI0MmVmODEsIDB4ZmJmMTViZWEsIDB4NjJhYTViZDQsCisJMHhkNDk2MWQxOCwgMHgzZDYyMzJlZiwgMHhmMzJiZmIxOSwgMHhmOWU4ZjMyOSwgMHgzNjllNzY2OSwgMHg2ZTQxNzhlZiwKKwkweDRiODAyMGRiLCAweGQ0YmZjOTllLCAweDFmNGU4NjE5LCAweDhlZTcyYjMzLCAweGI4NGY1M2RmLCAweGY5OGVkZDI4LAorCTB4MmM0ZjQ4ZmYsIDB4MWI0NGY0NTUsIDB4ZWYyYmI5ZTYsIDB4M2UzMzM1Y2YsIDB4YzQ4OWU5NTcsIDB4NDk2MjdhNzAsCisJMHhmMDExMjNiNSwgMHg2YTQ3NjRiMCwgMHg5MmM5MzAyMiwgMHgwODRiNGUzZiwgMHhmMDNlMjdhNywgMHg0M2UzNzNiMCwKKwkweGFlZWViYmZjLCAweDVjNGY1NGQ5LCAweGIzMTNkMmFlLCAweGY0NGU5MDIzLCAweDk1OWFlNWVmLCAweGU4OGI4ZDczLAorCTB4ZmY2ZjA1MDksIDB4MDNlNmYyYzMsIDB4Zjg2MTEzZDAsIDB4NTZiMzQ2ZmIsIDB4NTRkOGRjNGYsIDB4YzZlMjdhODgsCisJMHhmYmU2YTJkOSwgMHgxN2NkNmJhYSwgMHgwOWQ5MTNkMywgMHgzYjJlYjE3MywgMHhjZmQwYzJhMywgMHgzOWJmZGMwNywKKwkweDYxZmJmM2M0LCAweDZiMTdkMDFlLCAweDliODQ3NmNjLCAweDI2ZjQ2ZjVlLCAweDU1ZjZjN2Q3LCAweDgyNWZmZmFlLAorCTB4OTdkNzIyYjMsIDB4NDNmNzYxY2MsIDB4ODI0M2E0ZjQsIDB4MmU2NGJjZjQsIDB4ZDAwMmViOTUsIDB4NGJlYjkzMjMsCisJMHg0ZTcxZTU2ZSwgMHgwN2NkOWM5ZCwgMHg5NmExOWIzOSwgMHgwYWZkZWNiMywgMHg5NTBiZDMzNywgMHg5YWJmYzk4ZCwKKwkweGFlNmZkYjQ3LCAweGRhNjY5ZDk1LCAweGRjOTBlNmZmLCAweGRkY2I1NGNkLCAweGUxMDk2NjM1LCAweDk2ZWU0M2RjLAorCTB4YWU3YmI5MzAsIDB4NGZkYTFjNjksIDB4NTNlZmVkYmQsIDB4M2NhOTZmMmUsIDB4NDMwY2U2MWIsIDB4YTJmMzA1MWYsCisJMHgxZGRmZGYzNCwgMHhkYTc2ZmIxZCwgMHhlZjJmYzAyYiwgMHhmYjdlNzg4YSwgMHhmNjAzYjczOSwgMHgwMzNiN2Q4ZCwKKwkweDdjNTNlOWVjLCAweGZjYjhkYjNkLCAweDVjZjhmNGViLCAweGM4MWNhOTUzLCAweGQzZDk4M2JkLCAweDg0NDU5YmU1LAorCTB4ZTMwMzQ1NWYsIDB4OTE2MThhZmYsIDB4NGZhZDA3M2UsIDB4Y2YxNmZmNGYsIDB4NjBlZjE3NjEsIDB4MDc3NGIwZTcsCisJMHhmYzJhZDk3OSwgMHhhZGI3N2UyZiwgMHgxNjA1Y2UwNiwgMHgxY2YwMTdhZiwgMHgwMDVmYmUxOSwgMHg3ODczMTY3OCwKKwkweGUzMTczOTE2LCAweGRhZjE0YTM5LCAweGU1M2ZlN2YwLCAweGE2YTJkZmJjLCAweDVmMGYxOGY1LCAweDJiZjZkM2U0LAorCTB4MjlmNTc2MWYsIDB4NGNmMjQ3ZjAsIDB4YWY3OTBmMGMsIDB4YzlmNWJlMDgsIDB4ZWJhMGNmOTAsIDB4ZTc4ZDVjZTcsCisJMHhkYWY1ZTU0NywgMHg3ZWY5MDdlNywgMHhiNGZlOGExNywgMHhlNGZiZTg1NywgMHhkM2JmY2NjZiwgMHgxZWEwZmJjMywKKwkweDEyM2YyNTJlLCAweDVjMjlmYjJlLCAweDcwZjVmZTMyLCAweGQ0MGUwZGU5LCAweDAxZjNjN2JlLCAweDJiMGUzYzNkLAorCTB4NjQ5ZDI1NzIsIDB4NmU3ZTFmMDAsIDB4ZjE1Y2ExNzAsIDB4NDJlMTQzYmUsIDB4YjFlM2JiZTcsIDB4NDBmYjlhZTEsCisJMHhiY2I4NzM4ZSwgMHhmNGQ3NzA2YiwgMHgwMjE1N2U4NywgMHhiNzVlMmJmNiwgMHhhZDAyNGY2NSwgMHg2MzI3YWJjZiwKKwkweDc4YTE3OGUxLCAweDA3MGY1NmFkLCAweDAzODM3ZWY1LCAweGFhYmNmYWY1LCAweGM3ZTQwMjJkLCAweGZiZGZlNDJlLAorCTB4YzMxZWY4OTUsIDB4NWQ2ZTU0N2IsIDB4ZWQzY2Y1NDYsIDB4ZTRkZDIwYmYsIDB4ZmRmMDczODYsIDB4OWI5NDAxMTEsCisJMHg0N2M2ZGQwYSwgMHg4ZTI1ZmIzMCwgMHgwM2EzYTFjYiwgMHgzZjUxNTMwMiwgMHhlNDc2MGEzNSwgMHhkMzA0N2Y0NywKKwkweDcwNGYxNDU3LCAweGM0ZjM0YmJmLCAweGJjNzNhN2FmLCAweDIzNTJiOGIwLCAweGM1MjU2M2MzLCAweGY0ZjNmMDFiLAorCTB4NjNhZjVlMjYsIDB4NGEyZGUwNzYsIDB4MzlmMDVlYmQsIDB4YmJhYjkwMDQsIDB4OGM1Zjc2NjQsIDB4OGUwNGUyNDAsCisJMHg4NDdlOTUwNCwgMHgwNGVjZDVmMywgMHhiNDc3OWUxNSwgMHgyOGRmZmEzMywgMHg4ZjgxZjEzOCwgMHhmMDQzZjdmZSwKKwkweDMzZGQyYmRjLCAweGY0YWZhNjNiLCAweDNlMjljMGFlLCAweGZkZTc4YjQyLCAweGUzNzlhZDExLCAweDliZjljMWZhLAorCTB4NzM3YmM0ZTAsIDB4OWNmMDYyOWEsIDB4YmIyZDU4ZTgsIDB4YmY5NTI1ZmYsIDB4ZjAwYmU3YTcsIDB4ZDFmN2Q0M2IsCisJMHg0Mzg1ODRjYywgMHgwODhjZjM3ZSwgMHg3OWM1MGZjYywgMHhhNjVkOTg1MywgMHg3YmZhNGY5NiwgMHhmZTZmYmU4MCwKKwkweDQ1NjkyNTUxLCAweGM3OTQyYzdiLCAweDA0ZGU3ZWU4LCAweDM0MTBjZGUzLCAweDA5MTA0ZWY5LCAweDA5ZmYzYTAzLAorCTB4N2NkNWJmYzYsIDB4OTI0OWYxODEsIDB4ZWY5NmYzMWQsIDB4ZWRjZjJiYjIsIDB4NWUyY2JiZWMsIDB4Nzk5YzFlNmYsCisJMHhlZjg1MWU2OCwgMHgxM2EyNTViOSwgMHgwYzliYTg1YywgMHgyMDU5ODM4ZSwgMHgwOTk0MWU2ZiwgMHg3ZGI5Y2JmMCwKKwkweDgxZTk4YmIyLCAweDg1M2JkNDI4LCAweGVmYzUxZWVmLCAweDBlNTkwYWQ5LCAweDhmYmMyOTFhLCAweDdjYTM5N2U5LAorCTB4YmQ1MTFmM2QsIDB4MGE1ODgyZWQsIDB4ZjcwZjFmYTksIDB4ZWU3NmNjZTAsIDB4Nzg4MGU2OWEsIDB4OTVmZWM2NGIsCisJMHgyYjM5Y2U3MCwgMHgyMGYwN2VkNywgMHhiYjM1NzNlMCwgMHhhYWM4ZTkwNywgMHhlZWQzZjQ1YywgMHg3ZTQwNTNiYSwKKwkweDA2ZjE0YzNiLCAweDlkOTljZmVmLCAweDlkMjBmMDdjLCAweGYxNTVkNmY3LCAweGNmMzk2ZTc4LCAweDljMjM3ZjE1LAorCTB4MjdkYmNlNjMsIDB4ZGZiNDFkM2EsIDB4MTZhZGViODIsIDB4NjZiY2M3MzgsIDB4MmFkYzQ4YTQsIDB4NWE0YWRjZjgsCisJMHhhZjMzYmUzMSwgMHhiMDM5Y2VlYSwgMHgwZmFhMTJlZSwgMHhmNzI4NjRjNSwgMHhmYTg0NGI0ZiwgMHhhZmRmMDEzYSwKKwkweGYwOGRiYWY0LCAweGRhZWI2NmJkLCAweDNhMGNjNmIzLCAweDA3ZWQxMTdmLCAweGM3NWNhZjYwLCAweDEwNmU1NWZhLAorCTB4NWRmYTkwOWMsIDB4Y2ExOGY0ZDQsIDB4MDIwZGEyY2IsIDB4NGFkMzM0NWUsIDB4MWIzMzVmZWQsIDB4ZTNhNjY3ZDcsCisJMHhlZmEzYWViNiwgMHhiYzMxN2FkMywgMHg4ODZlZTMwZiwgMHgyN2NlMTFiOSwgMHhmMTNhZTkyYiwgMHg3OGQ1MDlmZCwKKwkweGRmNDQ1ZDJlLCAweDc1YTRjZGEzLCAweGRlMzg5ZGMzLCAweDgxMDI3NWEyLCAweDI2NGIwM2VmLCAweDAxMzIzZjI0LAorCTB4M2IyN2RiYzYsIDB4YWVkMGZkYTEsIDB4ZGQ2MTFiNWYsIDB4ZmFmOWQxYjcsIDB4ODgxN2YxZDMsIDB4M2ZhMGQzNmQsCisJMHhjNzYwYTVmOSwgMHg0NmVhODdmYiwgMHgwYmFkZGM2MCwgMHg1NDJmMGMzNiwgMHhlNjNhYzcwZCwgMHgwYzEwM2IxMywKKwkweDY1MWYzYTkyLCAweDRlZmIwNDQ3LCAweDc1NTk2OGI4LCAweGNkYWJlYzBkLCAweDQwNmM5ZjFiLCAweDA0NmIzYWJhLAorCTB4YzI4YzdlM2QsIDB4M2M4NzRkZGIsIDB4MmU3OTY0NmEsIDB4YzZhM2RlY2QsIDB4ZmQxYzk1MzYsIDB4ZGYxNTIyMjgsCisJMHgxYjMxYTNiZiwgMHg5MjE2MjZmMywgMHg3MDliY2M3YywgMHhhNDdiMzM1NywgMHgwZjg0NjU3ZCwgMHhiMmVkNmFlMiwKKwkweDZmM2MwODdkLCAweGU3YzI2OTVlLCAweGZkMzEyZjlkLCAweDBkYjgzOWQzLCAweGQ2MjdkYmUzLCAweDVmYmUwNGM5LAorCTB4ZjUyZWIxNWMsIDB4ODllM2MwNjksIDB4OWJkMjMyY2QsIDB4MWJjYjJjZjgsIDB4YzU4OTdlMjgsIDB4YjFkNzlhYzksCisJMHgzNTJjNGY3MSwgMHhhMGI1N2JiMiwgMHg1ZjhiZDY5ZCwgMHhiNDBhZjI1NCwgMHg1MWM4YWM3MiwgMHgyZjRhNzI4YSwKKwkweDZiNzJmNDk3LCAweDQ2ZDU5M2QxLCAweGYyMWVkOTIwLCAweDk0NzRlOTZhLCAweGVmNTRhNTU3LCAweDkwZjVhMTAwLAorCTB4MzA2YTgzNTcsIDB4NTc5N2FhNmUsIDB4YzhhMmM0OTUsIDB4NWY4ODc0YTksIDB4YmUwZjk2MTYsIDB4ZjFkMDJkNmQsCisJMHg4MTgzZWNhZCwgMHg1ZjZiZmY1NiwgMHhiNzdhMDUzZSwgMHg0OWUwNGFjYywgMHg1YTdmNjQ4NSwgMHg4MDQxNzQ2MCwKKwkweDZkMzVlNjVmLCAweGEwZjgxMmY5LCAweGRlMDQ1ZTY0LCAweGYwMWM3NWM3LCAweDI2YjM3YzAwLCAweDhiYWZjZjBlLAorCTB4NmYwODg1N2MsIDB4NzhiNzJmMjUsIDB4OTVjZTk2YWQsIDB4Yjc1Y2UzZjgsIDB4ZmQ2YTVjNDgsIDB4NWM0NTEyNTUsCisJMHhlZTg3N2VhYSwgMHhlNzRhZjRhMywgMHhmMDUxYmRiOSwgMHg3NDNjYTg4MSwgMHhiYmRlZmI1ZiwgMHhjNzZlYjAzMywKKwkweGY2ZTMyZDc1LCAweGQyMmIxYWMxLCAweDlmOWZhMWYzLCAweDdhZjQwOTVkLCAweDAxMDJiZGRiLCAweGRkNzg5ZDdiLAorCTB4MmIwZmEwMzUsIDB4ODgwZTBhZDYsIDB4Y2JkZjE3MGYsIDB4ZWZhNjJmZGUsIDB4ZmQwZmJhYzMsIDB4YTUxNWQxOWEsCisJMHg3ZmQwMDc2ZiwgMHhmNmM3YmFjNSwgMHg4MjBkZmY2MiwgMHhiNDNmYzYwMywgMHg4OWVkMTBiZSwgMHhiMDQ4YWYxMiwKKwkweGZhM2I0MzdkLCAweDYxNGY1NDBmLCAweDU3YjM1OTllLCAweGFmZmEwMDRjLCAweDA3NjRkZmI4LCAweDIzYTE0OTUzLAorCTB4ZjlkYjJlODUsIDB4ZWNjNDA4N2QsIDB4YmU4YjMzMWMsIDB4MTUxNjBhYjcsIDB4YzUxZTkzZGYsIDB4NGZhODIxMDIsCisJMHhiZDJhNGU4MSwgMHg1ZmRhY2U4YywgMHgzNjQwOWQ5MiwgMHhmNjRiYTcxNywgMHhhZTA5ZmMxZCwgMHhlNzY3YzU1ZiwKKwkweDc0ZWY4NzRjLCAweDA0N2VhOThhLCAweDk3NWU2ZDNhLCAweGUyM2IwNDZiLCAweGZjYzA0Zjg0LCAweDQ5NzQ5ZThhLAorCTB4NGEzYjZhMmMsIDB4MDU2N2NiYTEsIDB4ZDA3YmFmMjYsIDB4N2IwZThlYTMsIDB4NGJhNzFkZDAsIDB4NTEyOGZlODUsCisJMHhiNjU5NWZhMywgMHhmZGYwMjY0ZiwgMHhkZDFlOWViZCwgMHg5MDhkZmQ3MiwgMHgzMmY4NTFmZiwgMHg2ZjVkMGZkZCwKKwkweGQxY2ZjZDZlLCAweDQ4ZTA1NzVlLCAweDJmNTAwOWViLCAweDhmZGU1ODkyLCAweDEyZTUwZmMyLCAweGRlZmIwZmNiLAorCTB4YmZjZGQzZWIsIDB4ODdlNzgyMjksIDB4MmM4ODNmMDEsIDB4ZTc0ZmM5N2YsIDB4MGJmMzdiN2QsIDB4NjY3OTJmOTgsCisJMHg2ODc1ZmI1MywgMHhlOTQxYmNkZiwgMHhkOWJmZTAwMCwgMHg3ZmU4ZmM0YSwgMHg5NTBlNTBmOCwgMHg2Zjk4ODgzNiwKKwkweGU2N2YyNDRkLCAweGFlZGY5NTJjLCAweGZlMmNiZmU0LCAweDVkZTExNTgzLCAweGNiZTRkNWJhLCAweDZlOTdlZmEzLAorCTB4ZjMwNjNhM2YsIDB4MzAwNzk2MTEsIDB4NDliYmM3YmYsIDB4ZGUxZmU3NjAsIDB4ZmRmMDMxYjYsIDB4ZjJjNGE5NTAsCisJMHhjMTc2ZjQ3MCwgMHhlNzE2NDhmMCwgMHhhYTJkNzhlYSwgMHhhMTM2ZWMwMCwgMHg1N2IzZGQ4ZSwgMHg2YzkzN2Y1YSwKKwkweDA3NzVjNTUyLCAweDJmMzhjYTQ1LCAweDYzZTc4N2VkLCAweGI4Njc4YTVlLCAweGE3ZDYwMTFmLCAweGM5NGRkZmJlLAorCTB4OTE3OGU5YmYsIDB4YTM2OTVmZDEsIDB4Njk1Y2Y2OGMsIDB4Yzg0ZTk2ZGQsIDB4NmMzZDJjYzMsIDB4YjJiNzNmNDIsCisJMHhmYzExYWNlZSwgMHhiYzNmZGNkOCwgMHg1NWYzZjc4NCwgMHgzYzlhOGEzNiwgMHg2ZmY5MWViYywgMHgwNGRmYTI3NSwKKwkweGU1MGQ1YmY5LCAweGViNDM3ZTc4LCAweDBmYWY1OGVkLCAweGIxN2EwNzlmLCAweDdmYzVhZDNjLCAweDRiZGRiMWQ4LAorCTB4OTVmOGI4NDEsIDB4YmVmMGQ5ZGYsIDB4MzY4ZGQ2YmUsIDB4ZWVhOWVlZmMsIDB4M2RhN2Y5YzIsIDB4NTdlYWRkZjIsCisJMHhlZGRmMzA1ZiwgMHgwOTQxZmMzNCwgMHg1ZDQ4YmFlYiwgMHg5MzFkNjBiZSwgMHg5OTdkNzQ2YiwgMHhjNGUyNjFmOSwKKwkweGE1ZWI3YjQxLCAweDdjODM5ZjJmLCAweDdmYWQ4ZWVjLCAweDViZDYwZTdiLCAweDllZTc1ZmY2LCAweGIyMWFiYzgzLAorCTB4ZjYwZWMyMzMsIDB4MGZhNmU1NDgsIDB4Nzk1NTlmMzAsIDB4ZDk5MjI0YWYsIDB4ZmUyZjlkN2YsIDB4M2I4MGYzMGUsCisJMHg2MTM5MzQzZiwgMHgyNzFkY2ViNCwgMHhkMWJkODA4NiwgMHgwNGRiZTViOSwgMHhiYTVkZWZjOCwgMHg3M2M2MWE2MywKKwkweDRkY2I2ZTk2LCAweDA1ZTI2MTI0LCAweGViNzQwOTRhLCAweGIyMWU0M2ViLCAweDBkY2Q1ZjFlLCAweDczZmY5OGNkLAorCTB4ZTQxYmUyODYsIDB4YjE3ZjMwNDMsIDB4ODNlNTljYmUsIDB4ZTJkZTc4M2EsIDB4ZGVmOWYwZTYsIDB4MWIxNGYyM2QsCisJMHgxOTNmNWQ2NiwgMHhiMzAzNjJlNCwgMHhhZjlhMmUwYiwgMHhmMWUyODA3OCwgMHg2ZmUwM2VmMiwgMHg0ZjJlNmFmMywKKwkweDBjZWZlM2MyLCAweDU0ZjE0MWZjLCAweDU3Y2RhOTEzLCAweGUxNjFiMmZjLCAweGI2ODE5ZTZmLCAweGYzNWViODg2LAorCTB4ODA3ZGZkMTUsIDB4M2U0ZjkyOWIsIDB4NThmNWQyMmIsIDB4ZDZjZGYwMjQsIDB4Mjg3ZTYzZGYsIDB4MDFjZjJkZTAsCisJMHgyMWNiZjlmMiwgMHgyOTNlMTcxMCwgMHgxMGZlMzAwNywgMHhlZmMyNjFkOCwgMHgxYzc3NGIyYywgMHhkY2U5ZmU0MiwKKwkweGI1ZjMxZmI2LCAweGVlZWJjZjA5LCAweGNiMWZjMTI0LCAweDllYjFlNWMzLCAweDk2NTYwZGNhLCAweDBmZTFjOGU3LAorCTB4MWIwZTkwNzksIDB4OGVmOWU3M2UsIDB4M2M5NThlOGMsIDB4MWZmMmRlYzgsIDB4Zjg1MzIyNWIsIDB4NGYyYzJhN2QsCisJMHhjN2MzN2NiMywgMHg4NDMwYWYzYywgMHhlMDAyNjEyZiwgMHg3OTgyZmRhOSwgMHhlYzFjMGFhNSwgMHhkNDJiODcwMCwKKwkweGYzZTFiY2Y5LCAweGRmNzk4MzRjLCAweDNmODA1ZjFjLCAweDdjYzFkMzkwLCAweDA0MWY1YTVkLCAweGUxM2U5YmY5LAorCTB4MGYyMzA5MTAsIDB4M2NiM2Q3M2EsIDB4ZmMzOTRlZTAsIDB4N2U0YWNjZjcsIDB4NGY5ZWIzNmYsIDB4ZWJjYjdkN2QsCisJMHhiZmZhZDhiZCwgMHgyMjFhN2MyZiwgMHgxZWFlMzgxZCwgMHhjM2U3MWQ0ZSwgMHg5Y2UzZjFjYiwgMHhmN2YwN2ZlZiwKKwkweGZlODI2NTIxLCAweDgxY2Y5M2ZiLCAweGRhMWJjYjFlLCAweDg5OWY3ODhkLCAweGZkZjEzZmUyLCAweDVhNzhmMDc2LAorCTB4ZjMxMTI2YzcsIDB4OWJlYTZiM2UsIDB4ZTVlYjhlNTEsIDB4MjczZjA1NDUsIDB4MWJmN2FmZDEsIDB4NDY4YWRlYmUsCisJMHhiNjNhMjdhNiwgMHgzYTE2N2Q1YSwgMHhhZjViYzc0ZSwgMHg2YzU3M2QyMSwgMHhkM2JjYzc2ZSwgMHgxOGFmNzViZCwKKwkweGNiZTc1NGRiLCAweGFhN2MyN2EwLCAweGJjYmM3N2Y1LCAweDZkY2EwYzZiLCAweDdlOThiZjdlLCAweDliMTQ2MzFlLAorCTB4ZmMyOWIyYTcsIDB4Y2Y5Yjk1M2MsIDB4ZWM1OWU2NmEsIDB4MmRkYTM3YWQsIDB4YjRlZjlmMTcsIDB4YzYwOWJhZTQsCisJMHhlY2NhZGQzYiwgMHhlMmY1ZDNhNSwgMHhmOTk4NWYwYywgMHg0OWJkNzE0ZiwgMHgwZjNiMmQ0OCwgMHhlZjEyZmFhNSwKKwkweDdiYjJiMzU5LCAweDI0NWI0NGQ1LCAweGFkNGI1ZmRhLCAweGY3NDcwZTEzLCAweDc5ODhkMjgzLCAweDc5YWEyYjJmLAorCTB4Y2U3ZGNjOWUsIDB4MGFmN2MwMjQsIDB4ZDYwNGQ1ZWIsIDB4YWJlMDEyYmIsIDB4YmI2NWUzZjIsIDB4MjZkZDgwOWIsCisJMHhhODY3ZTUyNywgMHhmNTk0NTljZiwgMHg4ODE5ZmIxYiwgMHhhNWZmODU0ZiwgMHhlMDg5MTlkNiwgMHgzYmM5MTI3ZiwKKwkweDVkNzFkNjA4LCAweGU4MTJkN2NhLCAweDhiMGY1NmJmLCAweDQ3ZjM5M2RmLCAweDU2ZjNjMTg3LCAweDhlMjdiZWM5LAorCTB4NTUzYWRiOGUsIDB4YjVlODQyNzAsIDB4MzRmYmRkMjcsIDB4MmU5OTg2NzEsIDB4ZjhiMTdkZWQsIDB4NWZkZDFjMGQsCisJMHhmNjgwZDNiNywgMHhiN2UwZDVhMCwgMHgxYWM0MmVkMywgMHgwZTg0OWFkMSwgMHhhNDM4ODNhYywgMHgwMjE0ZmMwNCwKKwkweGY0MWUyMWYzLCAweGZkYzE2Nzk4LCAweGNkNDIzNmM4LCAweDk0ZTdlODUzLCAweDQ0OWZmNzM0LCAweGY3NzQ5MDRmLAorCTB4YzMwMzkwYTEsIDB4Mzg1YWJkMjgsIDB4Mzk3MTJhYmQsIDB4OGU5YmZiMmIsIDB4YWNmNzg2ZGIsIDB4NmE5MWE0YzQsCisJMHg1NjM1ZGYyMCwgMHg0ZjBkZGEzNywgMHhlODY5ZmJmMCwgMHg0MWU0MjQ2ZiwgMHhhNzQ4OTJjNCwgMHgzYTI2ZmVmYSwKKwkweDM4ZmJlNmFmLCAweDFlYTZhZjNhLCAweGUzZDZkMmUzLCAweGMyYzc0ODY2LCAweGJlMzg5N2U5LCAweDA1YTJlOThlLAorCTB4Y2QzMzEwZTEsIDB4Nzk2YmY4YTAsIDB4ZWI0MjEzYzMsIDB4NGUyNzg5OGUsIDB4NmI1ZmI0M2YsIDB4MjgwMWVmYzEsCisJMHhmYmQ1Nzk3YiwgMHhlYmI0NThiMCwgMHhjOGQzZWJhNiwgMHgzNmI0ZTg4OSwgMHg1M2FkODFhZiwgMHgxYzRlZGNmMywKKwkweGE1ZGZlZTAyLCAweGFiZDc0ZTdkLCAweDcxNDYxN2E5LCAweDA5MTEyNzc5LCAweGRjYzU5ZGU0LCAweGJiZmMzODRhLAorCTB4NWZiZWYwMzUsIDB4MDEzODM3ZGEsIDB4NWZiODQzZjAsIDB4Y2Y5MDI1ZWQsIDB4NDFmN2NkMTIsIDB4YjdmNGQ3ZTcsCisJMHhjZDgwNzQ0MywgMHgwYzg3MWRhZiwgMHg0M2JmYWJiMiwgMHhiZmViOWNiZCwgMHgyNWZjOTY1MSwgMHgzMjllOTQ1MSwKKwkweDYyNjE1Njg3LCAweDQ5MTI1Njc2LCAweDliYTVlZmMzLCAweDRhN2NhMWZhLCAweDc5ODM5NjU5LCAweGEzMmQ0MjI3LAorCTB4MDg2YjYxYWIsIDB4MDBiMGNkZjIsIDB4M2ZiYTliY2YsIDB4OTM1MWVkMTIsIDB4ZDIyMzc4OTksIDB4ZTIzNjdiZTEsCisJMHgxNjYxZDM5NSwgMHg3MDQzY2YxZiwgMHhhMWQwMzcyYywgMHhkNjk0NTVhNCwgMHg4MTRkN2JlOCwgMHg4YTQyYzMxYywKKwkweGEyNjg3YTg0LCAweGI5NDY1N2UzLCAweDlmMjhhM2FhLCAweDI3NzRjY2Q2LCAweGY2YzJjNjE5LCAweDNiYjk1ZWRlLAorCTB4NTJmNmI5MGIsIDB4YWExYTA4ODgsIDB4MTk2OWVlZjcsIDB4ZWYwNDIyOGMsIDB4YmRkZTIwZjEsIDB4NmJjNjgwN2IsCisJMHhlYzE1M2E5NSwgMHg2ZDdmOWRmMCwgMHgzMmVlYjA2NCwgMHg5YjVmNzk1MywgMHgzZThmZWFjMiwgMHhkYzI1NzdiNCwKKwkweGNmNmU5MzM3LCAweDQ5ZjYxNDdmLCAweDc4NTFmNmNjLCAweGQ1OGZlNWRlLCAweDliZGRmM2RjLCAweDM5ZDY1MTdlLAorCTB4MTczZjgzNzIsIDB4M2FiZTA1ZWUsIDB4MWRmNWVlYzAsIDB4Nzc3ZTBkNmUsIDB4YTM3ODdhOGYsIDB4ZDFmYmE5NDUsCisJMHhkODZmYzg4ZiwgMHhiY2FkNzI4ZiwgMHgxYmI2M2Y3ZSwgMHhhMWNiNGVhMCwgMHg4MWRjZmU3MSwgMHg0NzJmOWY3NCwKKwkweDc0OTY5YTFkLCAweGExYWYxZDI5LCAweGQ5M2UwOTMwLCAweGQwZWEzNTdmLCAweDMwZWVmODFlLCAweDU3OGY4NzA0LAorCTB4ODIxNDFlZWUsIDB4YzNmY2I0ODMsIDB4ZDU5MzJkM2QsIDB4MGY3MGY4NzAsIDB4ODU3ZDIxZDgsIDB4N2QwZmFiYzMsCisJMHhlYmU4NzA4OCwgMHg2YzVkMjliZSwgMHg5MzVjYmMwNywgMHhkNmZiYzA2ZCwgMHhjMTZjMzhhZSwgMHg0NWZkMGFmOCwKKwkweGUzZTIzZWEwLCAweGJiZTVlZmFjLCAweGExMWZjNTZjLCAweGQzNTRlY2UzLCAweDQyOWVmMjk3LCAweDRkZDFiZDU3LAorCTB4NjI4ZmIxMmEsIDB4ZTk2YTZjZjcsIDB4ZjVjYTJiYTcsIDB4MjVhYmFjMzYsIDB4MzU4Zjc1Y2EsIDB4Zjc4ZmY3MWUsCisJMHg3NmUzNWMwMCwgMHgwYjhlYTczYiwgMHhiOGIxMzVkMSwgMHhlZWZkYzFjNywgMHg1YmYzMmNhMywgMHhmMmYyNTRhMywKKwkweDYyMjVlYzlhLCAweDgxYzljNDBhLCAweGZiNDNlMjE3LCAweDhkZTY1Zjg5LCAweDE5Zjc0MTE4LCAweGRlNjAzMmVmLAorCTB4ZmI4YjI4ZmMsIDB4MmI2M2NjMjAsIDB4NzcyMWY4MDgsIDB4MWVlMjBhZWMsIDB4YmUyMTg4MjcsIDB4ZDlhYmU2NTAsCisJMHg5YWY1ZmNjMSwgMHgzOTZmODM0MiwgMHg2MDE1ZWYzYiwgMHhiNDdkMTBiYywgMHhjMDIzZThlOSwgMHgxZGIxYTNlOCwKKwkweGE5YTJhM2U5LCAweDYzNDdkMTlkLCAweDA2NjQ0ZTc1LCAweDNmMDMzNzNiLCAweGM2MDQ5NmJmLCAweGEyM2JkZTAyLAorCTB4NTEyNjlhYmUsIDB4MTUxYTFmZmEsIDB4OTFiYTAxYTgsIDB4ZTVhNmU3YmQsIDB4M2Q3MDhhNWQsIDB4N2MzZjE2MWQsCisJMHg3YWJlY2E3ZCwgMHg0YjZkNmZjMywgMHhlMDY5NDNjYSwgMHhlMDMzZWU0ZiwgMHgzNzAyOTc3OSwgMHg4NThjNWZhNSwKKwkweDU4YjZjNWU1LCAweGZjMDM1ZmRkLCAweGVkYjQyNzJhLCAweDZkNmZlZDg1LCAweDM2ZjMxZjc5LCAweGQ4NmVmYjZjLAorCTB4NjZkYmVmMDUsIDB4NDIzOTBjNTMsIDB4NWJlZWQ2ZjMsIDB4ZDc2N2Y3OGUsIDB4ZDg3ZGQ4MDYsIDB4MDVlMDI0ZDEsCisJMHgzYzNiZGViZCwgMHhlMTA0ZmYxOCwgMHgxYTRmNzYwMSwgMHhmOTFkYTNjMCwgMHg1ZWZmMTM2NSwgMHg3MDUxYWIyYywKKwkweDFhMWY5ZTgxLCAweDg5MGRlZWM1LCAweGViZjNiMGI0LCAweGQ3MTExNjIxLCAweGNlYzJjNDM5LCAweGJkZjdlMjU5LAorCTB4OTViZjgyMjUsIDB4ZmIwMWJmNzUsIDB4YTY5OTQzYzcsIDB4YmNmZGZmZGUsIDB4YWY4OWE0YmYsIDB4ZTg1NGY4MmIsCisJMHgyOGQyNGE4OSwgMHg0Y2U0N2ZiOCwgMHhhMmQxM2I4YywgMHhhOGQ4OWZhMSwgMHhjYTc4ZDUxNCwgMHg4ODc4OGY3YiwKKwkweDQ3YWEwZWYzLCAweGZmM2RkOGFmLCAweDk0YWJkMDJlLCAweGZjMDBiZTdlLCAweDk2OGRmYjA0LCAweDRhNmUwMDIzLAorCTB4NzBjZmEwN2YsIDB4MGRlZmExZjgsIDB4MWU2MGY5ODcsIDB4ZWNiNjE3YjAsIDB4M2RlMjIyNWUsIDB4NmJjNDdkMWEsCisJMHg0OTFiZGMyNiwgMHg5MTQ2NjdmYiwgMHhmZGY0YWRhYSwgMHg0MjVhNjhjYywgMHgxM2Q3OGUzZCwgMHgyYjIwN2Q3OSwKKwkweDFhNzEzZjUzLCAweDNkN2NmYTA0LCAweGI2NGViYjhmLCAweGM5MzFmY2YwLCAweGQxODZlYTNlLCAweDVjNzY2NzUwLAorCTB4ZWEyNDUyNTYsIDB4ZTE2Zjg1MDUsIDB4YjczODA4MGUsIDB4NzVmOWY4OTYsIDB4MDBjNTIwNGEsIDB4NThmODUzNzgsCisJMHg1NmZjMTgwYSwgMHgyNDUyYjRhYSwgMHgxOGYyMDE4NywgMHg3ZGQwZjFkZSwgMHg5ZGNiYmQ0YiwgMHhkZjY1MmZhYiwKKwkweGNmOWZlYTcxLCAweGMxZjllYmU0LCAweDNkMTdmNWY2LCAweDA5OWVlZmJlLCAweGI3MzcyZGYwLCAweGFkMDM3MjNkLAorCTB4MGU3YTVjNTcsIDB4NDc5NzA3Y2YsIDB4YTE3OTVjNTUsIDB4ZWJmNDJmN2IsIDB4ZGJmY2U3N2YsIDB4NGQ4NzQwNTEsCisJMHg3ZWMyOThkZiwgMHhlMWMzNTUwZiwgMHhjMDI5ZTJkNiwgMHhiZGY5MzJmNywgMHhjOTUxMjQyZSwgMHhiMWU1NTYzMywKKwkweGNiYjcxYjQyLCAweGY4Mjk5NTEwLCAweGZmYWNlZDFjLCAweGY4MDgxMTQwLCAweGYwYjE0YWY0LCAweDllMzI1NDdlLAorCTB4ZTVkMTRlMWYsIDB4OWY4N2ZlYWQsIDB4YzEzMmY5YzUsIDB4NzEyNTAwMzAsIDB4Y2YzNjI4YzksIDB4MzI0ZWNjMzcsCisJMHg5Y2UwZmZkMywgMHgxNzNmMWE2OSwgMHhhZjcyNDc3YiwgMHhkZWYxZDJiMCwgMHgzNTdjZWMyMSwgMHgxOWFhYWUzMywKKwkweGM2YzRjNGVhLCAweGZiZGEyNmNmLCAweDZiMTMzMjBhLCAweGI4YzJjNmE3LCAweGRmMThjOWQxLCAweGRhZWIzNWNhLAorCTB4YzgxMmJkNTMsIDB4OGM5YTkyNjksIDB4ODhkMzg5NzksIDB4N2E2MzNlY2EsIDB4MDhlZWVkMDMsIDB4ZTM5MDJlYmEsCisJMHg3NDJjOGNkNywgMHhlN2VkZTU0ZSwgMHg0ZDQzZmZlOCwgMHgyYTk5ZjZlNCwgMHhjNzJhZTM3ZiwgMHg4ZDU0ZTc1YywKKwkweGY3OGI1MmZkLCAweDlmZTlmZDAxLCAweGYyZTFlZGUyLCAweGZjZTMzZTJjLCAweDc3YzllMmRmLCAweDFlYjNmOWMyLAorCTB4ZTEwZTM5OWUsIDB4MjdhM2FiN2UsIDB4ZDQ3MGY1ZGMsIDB4YWI4MTVkYzMsIDB4OWZkOThlMWUsIDB4ODZjNmE3MzgsCisJMHgyZTFlOTM4MSwgMHg0OGVkNDhkMywgMHhkYzBhNjNkMCwgMHhjNzc5NzBmNSwgMHg5ZGUyZThjYywgMHhhYmRlMTMzNCwKKwkweGUwYzQ4ZWY4LCAweDIzMzUwZWY4LCAweDliYTQxZWExLCAweDAxZWYxMTY4LCAweGY1ZTI4Y2NlLCAweGJhYjA0NzM3LAorCTB4NjRhOGVmODIsIDB4YWUxZWI3YzQsIDB4YzY2NjM4N2EsIDB4NThlM2Y3ZjEsIDB4MmYwMGJkZmYsIDB4ZTIwMmU1MDksCisJMHhjYzliYTE0NywgMHgzMWRkYWFkNCwgMHhlYzUwN2EyYSwgMHgyZTFjNjllYiwgMHhmYjQ2YmVkNCwgMHg4YWRlMzczOSwKKwkweGFmYjAyNjcxLCAweGUwODQyNWE3LCAweGQ2Y2U1Yjk2LCAweGYyZGMzYjk1LCAweGY0YTlmODNjLCAweDcyYmZiYzc1LAorCTB4ZmYzZmUxMGEsIDB4Y2EyZjNjMTQsIDB4Y2UwNTU1ZTQsIDB4ZGFkMWJlNTMsIDB4YTY5YWQzYzksIDB4YzMzODgyOWYsCisJMHg3ZWZiOTM1MCwgMHgxMDgwY2ZhMCwgMHgxNDc1ZTc4MywgMHg3MDc0NDdlZSwgMHhkNzY3YmVkNywgMHhmODcwZjVkNiwKKwkweGIxMzFmYzAzLCAweDNhMTRiYzI3LCAweGUzYzJjMGZiLCAweDIwYzgwMzRlLCAweGJjYzc5N2IwLCAweGYyMGQxMTk2LAorCTB4ODZjNTM0OWIsIDB4NzE1YzRiOGQsIDB4MGUzODNmMzgsIDB4NjNhNDU3YTcsIDB4Y2Y4M2I4ODEsIDB4NDIzZmE5ZWQsCisJMHg1YWEzZWQ4ZSwgMHgzNmM3MjU1MiwgMHg5NmQzZWU4YiwgMHg0YzcyOWVmOCwgMHg4ZTY0ZDNjMSwgMHhiYmM0Yzk4NywKKwkweDkzNGJlMjBiLCAweGQwNDVmNDg5LCAweGVkMGU0ODFmLCAweGU3ZDk1YmJmLCAweGY2MTAzMjQwLCAweGMxYzU4Mzc5LAorCTB4NjdkZjNmZTQsIDB4YmNkNGRmNzAsIDB4ZjhiM2Y5ODQsIDB4MGI2NjU5ZmMsIDB4MDI0MzVmN2UsIDB4Y2UxMDQ3NTIsCisJMHg5MWRmNzgyOSwgMHg1YTFiMThkNywgMHg0ZmJmOTI4NywgMHg2NjExNTQ4NiwgMHg3YmMzY2RjZiwgMHhjODVjMjlhZSwKKwkweDc1YTE1MTc3LCAweDg0ODJhYzk4LCAweDc1ZjBmZGY3LCAweDdiMzNhOTljLCAweDViYWQ4ZjIxLCAweDlkODE0Nzc0LAorCTB4MWJlYzIxZDcsIDB4ZmM5M2ZiODMsIDB4ZTlmZjQwMjMsIDB4ZWUzNWNmZGIsIDB4ZGE3NjgwYWUsIDB4ZjFmYjA4YWYsCisJMHg1OTE2MmZmNSwgMHhjM2IwMjFmYywgMHhiOTNlN2JlNCwgMHhiMjk1M2I3NywgMHg4NTA5ZWEzNSwgMHhmYmUwYjM3ZSwKKwkweGRlODFjYmQ0LCAweGRkNjEwM2ZkLCAweGQxZDU0MDUzLCAweGY2NTllNzcyLCAweDYzNzY0MzFkLCAweGVjZjMwNGJhLAorCTB4ZmY3OTY2ZTksIDB4ODEyNWM0MzksIDB4ZGZhN2FiN2QsIDB4YTFhNzRiZWYsIDB4MDg2MDQ1NzgsIDB4NWQ4YTI5ZjgsCisJMHgxZWVhZDUzNiwgMHg1N2NmYTU2OSwgMHg5YjY2ZWZmMywgMHgwNTE4OGVjZSwgMHhmNGMxZjk3OCwgMHg0ZjRiNDA3NCwKKwkweGJhNTExZDBhLCAweGVjZjAwZjFhLCAweDY5ZmNmOGNhLCAweGNkZGZjNzMwLCAweDdhMDA5NzM4LCAweDQzZGZiMTUxLAorCTB4MDI2YjhhNzYsIDB4M2IzN2E3YWMsIDB4M2RkNTg5N2UsIDB4M2IwMTdhYzUsIDB4MmU2N2IxNWUsIDB4ZGQ5MDg3ZTYsCisJMHg3NGE2NDFkNCwgMHhjYmM3MWI3NCwgMHhjY2FiNzMzYywgMHg2MDBmY2RlZSwgMHg0OGVhZmRmZSwgMHg0NzNiNWVlNSwKKwkweGI3OTFkODI0LCAweDU0ZDk0ZWFkLCAweGQ1ODZlNzA3LCAweDZiN2VmZTJjLCAweDgzZjFhYzk1LCAweDg2ZGQ5MGRkLAorCTB4NjZmYmIzZWYsIDB4NmRhNjVmNmYsIDB4ZmU2MDRjZmYsIDB4ZmI1N2ExN2UsIDB4MzQxMjU4OWMsIDB4OWNmNmVkZjcsCisJMHhjMDM1ZTBkNywgMHgzMTIzYzNiYywgMHhhZjNmNDEzZiwgMHg3OWZhN2Y3ZSwgMHhlNmFkZjNmNSwgMHg2MzZhZDU3ZSwKKwkweGNhYTc0OGVkLCAweDY1NjA1OTJlLCAweGFhZjc1MGY2LCAweGNhZTBlYmM3LCAweGU3ZTBkZWJhLCAweDkzNDgwZjM2LAorCTB4YjVhYmY3NTQsIDB4MDgyYzhlYWQsIDB4MzI4YzZmNzcsIDB4NzllZjAyOWUsIDB4MDBlMmNmYzQsIDB4YzNkZmYyNTUsCisJMHhlNTliODNkZCwgMHhkZTgxZjE2NiwgMHg5ODE2MWRlNiwgMHhlMWEwNzY4YSwgMHhmNjA4YmY0OSwgMHg0MTAwYjBmYywKKwkweGUwMmIzYmZiLCAweGY4ZDAyYzMyLCAweGVlNGZjYzAxLCAweGJkYzAwN2UxLCAweGQ2NWViNDI2LCAweDAxZjk4YmIwLAorCTB4NGZlOGQ1ZjUsIDB4MDI3ZjUxOTQsIDB4Mzg3YWNjZjQsIDB4MTdjMDFlOWIsIDB4NDFmZTg2OTQsIDB4ZmM4NWRmZDAsCisJMHhjZmI4MmNhOSwgMHgxMmMzZmI5MiwgMHg1YWQ0OTdhNSwgMHhmNWEzN2ZkNiwgMHgwOTZhZTM1ZCwgMHg5Mjc3NTVmYywKKwkweGUzNjMyOTRjLCAweDk4ZDdlZmMzLCAweDkzNTU1ZmE5LCAweGY1MDgyMjRjLCAweGY4Nzg1ZWFiLCAweGMwNmJlOWZkLAorCTB4MDk3NThlNWYsIDB4YWQyODdmNzAsIDB4ZjdmYTU4ZDcsIDB4ZjhkZWJmZGQsIDB4YjgxYWZlZjAsIDB4NjVmYTk0NmYsCisJMHg3ZjJhYWNlYiwgMHg3OGZlMzdiNywgMHgwYjkxOGMwNCwgMHgzZGJhNDdmMCwgMHhhMWYwMjM3ZiwgMHg4YTY4YWYxMiwKKwkweDExMWY3Y2UwLCAweDgwNjhiYmE0LCAweDU3Mjc0Mjk3LCAweDdlOGY5YjJmLCAweGU3MjVjNDQ1LCAweDU4OWU0MDg3LAorCTB4MTZmZmM3MTYsIDB4NDZjMzhmMmIsIDB4MTI5ZmY3YjEsIDB4YmY5MDViZGQsIDB4MDIzZjNhZGYsIDB4OGNlZmNiZTIsCisJMHg1Y2ZlOGEzYywgMHhlN2M1OTU5MywgMHhkMDRhNzlmNywgMHhiOWYwNTI3ZSwgMHgzZjcwMmFjYiwgMHhmODEwM2ZjOSwKKwkweGNkZjFkYWVkLCAweDY0OTdlMDcxLCAweDQzZGUwMmM5LCAweDllZmIyNGRhLCAweDc5MDBjZjRjLCAweDgyYmVkYjM0LAorCTB4YTI2YjI5NmUsIDB4NmIxM2JmMTEsIDB4YmMwZmYwOGEsIDB4MzVhNzY1NWIsIDB4OWI0Y2ZiZjEsIDB4YTgxZGVlY2UsCisJMHg2NjFlNjNjZSwgMHg0NTY1ZGRjZCwgMHgzMDhiZjNmYSwgMHhlZWM2NTY3ZSwgMHg3YmVmYTBjMywgMHhmZDIxMmZkMywKKwkweDdmNDAxMmUxLCAweDEzZmJmMzkwLCAweDYxYThmY2YwLCAweDQyZTIwZDhmLCAweDgyN2VmYzFkLCAweDA5Y2QwZDMzLAorCTB4YmU1OTY5ZjMsIDB4ZjAzNjJmZTUsIDB4NzBlN2RlZDcsIDB4ZTJiNTIzMzgsIDB4ZGI2NTRhM2QsIDB4ODNmZmJjNDQsCisJMHgwYjcwOWJjZSwgMHgxNjFiYTdjNCwgMHhmN2VmYjI2NCwgMHg4YTY3NzdkOCwgMHg2N2ZmNGNmZSwgMHgxNjdjYzBmMywKKwkweGM4ZWZjNDM0LCAweGIyNzI3YjE0LCAweGY1ODNlYmQ5LCAweDE4OGI1NTM1LCAweGJiYWM5ZTJmLCAweGJmMGE2YzM3LAorCTB4NWY2ZjRjMzcsIDB4NzEyYWI0OWUsIDB4ODdjYzA0ZTksIDB4ZjM2NzZhNWEsIDB4NTk0ZmM2ZjQsIDB4OWYxMmM0ZGYsCisJMHgyNGIyZGY4YSwgMHhjZmViMDhiZiwgMHhjMDgxMjZmYSwgMHg1YTY3OTcxNSwgMHgwM2M4OWU1MiwgMHhjZWM4OWUzZiwKKwkweDQ0YWMzMGUxLCAweGNhZmRhMzc2LCAweDZmZTg5ZmNmLCAweGJlNDNkYzM3LCAweDZjZGU1NzkzLCAweDRhZWIzNzM4LAorCTB4ZmRmYjY2MjQsIDB4Nzc2MDA5OTcsIDB4ZTBiMWZiYjksIDB4OGEwN2QzMjIsIDB4MWJlNTM3N2QsIDB4NmY1NTdjNmQsCisJMHg4ZDM0ZTZlNywgMHg0MTIwN2ZiZCwgMHhhNzdmYjM3OCwgMHg1NWVlYzAyMiwgMHgwNmZmNjFlYiwgMHg3YmI1ODdhNiwKKwkweGUxMGM3OTA5LCAweGY1MmRiZTkwLCAweDI5NDdiODFhLCAweDNiMDY4ZmZkLCAweDdjMDJkYmNjLCAweDNjZjgwZjExLAorCTB4NTRmY2Y3ODcsIDB4ZDA4ZGZmMTAsIDB4ZGEyMGQxNWUsIDB4OTI3ZWIwZmQsIDB4OTVmMDE5NzEsIDB4NzAyODM3NjIsCisJMHg2Y2RmM2M2OSwgMHg5MWQ3NDMxZSwgMHg1ZjYwZDY3NSwgMHgzMzc4ODc0ZSwgMHhjZmZhMDVmMCwgMHgyZmJjZmVlMywKKwkweDUzNTdmNDBlLCAweDgyNzNjMjQwLCAweGEzYmJiM2FjLCAweDYwZTRhODE2LCAweDNlMDM3OWQzLCAweDViZmNmMzdmLAorCTB4ZDg4MWU3ZGEsIDB4MmRiZGUwY2IsIDB4ZWYxN2U2MDYsIDB4MjhmN2ZiZGUsIDB4OWU2ZjRiOTAsIDB4ODJmMWM2ZWYsCisJMHhiYjRmNDM3NiwgMHg2YjkxZTExOCwgMHg2NzcxODMxNSwgMHhjNDRjNWRiNSwgMHhiNzkwMDNhYywgMHhhYTlhMmQzNSwKKwkweGJiNzdhMTMxLCAweDcyMTNmYjM3LCAweGI0ZjQ5NWJmLCAweDFlYzA3MjFmLCAweDExZDhjMzExLCAweDNlNzRjZTFjLAorCTB4NmY0OGY4MDksIDB4ZTM2ZTVjNTcsIDB4MjRjMWU2ZjEsIDB4NmNhM2VlMWQsIDB4MThiNzFmM2MsIDB4OGE2ZTFmYmYsCisJMHg3ZDQ3MmZiMiwgMHhhZWE1ZWNjYywgMHhiZjFmYTdkZCwgMHgxM2VmOWUwNiwgMHhlNzExZmRkOSwgMHhiN2E3ZTQ0NSwKKwkweGRhMWUyZTc2LCAweDJhNWJlMmE2LCAweDVmNGYxMTM5LCAweGY5ZGIzZmY1LCAweGQ1ZmZlZDA2LCAweDQ3MTY0ODllLAorCTB4YTk5NzljOTcsIDB4ZjUwODc3YmYsIDB4Zjk3ODcxZjcsIDB4MzhmM2IwMDcsIDB4ZDdiODAwZWYsIDB4MmZkYjA3ZTksCisJMHhmYWZjM2QxZCwgMHhjM2RhMWIzYywgMHgxZWEwZTk4MSwgMHgzNzZiYWM0NiwgMHhhYzViZmUwMiwgMHg5MGQ5ZDdmOSwKKwkweDAwYTNlYWRmLCAweDMzOTI1ZTJlLCAweGYzODA0YzkwLCAweDc0MDM5MjdhLCAweDc2MjZhODE1LCAweGI1YjYyN2YwLAorCTB4OTc4MDBjMTgsIDB4OThjOThkOGMsIDB4OWY4OWIzYTcsIDB4YWZhYTJlNTcsIDB4ZThhYjI2MzUsIDB4ZWYzZjExNjIsCisJMHg4NzdiMjkzYSwgMHgxZjllYWFjNCwgMHg3MmY5MzFiMCwgMHg2ZmU5NGY3MiwgMHg0M2UzNGYzMCwgMHhjNjFlMTkxMywKKwkweDMxYjA2Y2RlLCAweGQxOGFmYjdkLCAweGU4NjZjZDdiLCAweGRmODBjNDc3LCAweGZiZGVlZDBkLCAweGNmYjg1ZWZhLAorCTB4Yzc2MWQxNzgsIDB4M2RmZjg4NTgsIDB4YmY2MDczNjIsIDB4NmE5YjdkYzYsIDB4ZjFiN2NmMjAsIDB4NTQ1MmQwMTMsCisJMHgxNDI4NmNhZiwgMHgzN2RlNzQwZCwgMHhlZmM1ODM4OCwgMHgxZmQwMTgwZSwgMHg4OTNkYzYwZiwgMHhmOWY2MGUyYiwKKwkweDFiY2Y1ZjEwLCAweGY5Y2QwNjJkLCAweGRlZmMxYmQ4LCAweDMyNmQ3YmRkLCAweDg5YjEyZmI2LCAweDJkYWRjNzg4LAorCTB4MzdhMDcxMzksIDB4YmJlZWFjNWEsIDB4OGUyZmEwNmQsIDB4MTJjMGQ1YjUsIDB4NjI5Zjc4OTQsIDB4YjAzYzRkYWYsCisJMHhmNGQxOWFmNSwgMHgwNjFkODljZiwgMHg3MWRiYTAzYiwgMHhmNjExNzllMCwgMHg0ODQ5MzhlYiwgMHhkODdhNDA4YywKKwkweDhmM2M3NDZmLCAweDNhMzdiYzdhLCAweDFkNzQ3OGQ4LCAweDJhYmYwMTZmLCAweGZmOWFhN2YwLCAweDdmNWEzNGExLAorCTB4ODU4YTU1YTMsIDB4ZmUwNTJlZmMsIDB4Zjk5NDNlY2EsIDB4YjVjNGY1MWQsIDB4ZTRhYzgyZGUsIDB4Yjg4MTdhZGEsCisJMHgzYTVmOTJiMywgMHg3Zjk0NGVjZSwgMHhkMmU5MDEyZiwgMHg2YTNkNzM2OCwgMHhkYTBlZjY2MywgMHgzMGY3MjdkNywKKwkweGFlMTVlOGJiLCAweGUxNTI0OTQ3LCAweDgyOWY4MDUwLCAweDhiMWI3YWE3LCAweGU5ZWIyYTMzLCAweGRiZGZmZTZkLAorCTB4Y2E1NDllOTgsIDB4OWJkNzRiZWYsIDB4ZTkxNzg3NjQsIDB4MGZjYjFiNjYsIDB4ZTZmZDc4NzcsIDB4NmIyM2M4NTQsCisJMHhjZjdmYzU0YywgMHhmYjY3OTU0OSwgMHg5M2U3YTQ3YiwgMHgxYjA1N2JkYSwgMHhmODA2MGNkYiwgMHg4NzYyYWMwZSwKKwkweDZkZTY4MzEwLCAweDIwZWJlZDFmLCAweDQ4ZjU0OTlkLCAweDA5ODc4ZDdmLCAweGRkNjk3MWYyLCAweDQ4ZWUyYzlkLAorCTB4N2ZiZjBkZTUsIDB4ODFkMWNmMGQsIDB4N2E3OWY4N2YsIDB4MTM5NjgxN2YsIDB4MThhZmQ2OWIsIDB4ZGJmNWYwODgsCisJMHg3MDQyYWY4MCwgMHg2NTAzN2NhMiwgMHhlODExYWQ1NSwgMHg1NjUyZDE3NSwgMHhlOTczZjMxNiwgMHhjOGRkNmI0NSwKKwkweDU4ZWI0NTlmLCAweDViMWVlMTdlLCAweDBjZTdhZTMyLCAweDg4NjI1N2E3LCAweDI3ZjkwMDFjLCAweDY1N2YwZTJlLAorCTB4NmU5Yzc5ZGQsIDB4ZDEzYzM1NGYsIDB4ZmE1MmYzMGMsIDB4NzNlMDEzZmEsIDB4NGY2M2UzNTIsIDB4N2ExNTcyYzMsCisJMHhjNjQxYjUzZCwgMHhiNTIyNGE3MSwgMHg3Y2FkZjZlNywgMHgxODA3NmRiYywgMHgyMGRjNGZiZCwgMHg1ZmZkYzBlNywKKwkweDBlYzRiZDEzLCAweDM2MzdlYzcxLCAweDdlNDExNDZjLCAweDljZjQwMWJmLCAweGY0MWNmOGNjLCAweDBmM2RjOWVkLAorCTB4ZjQwMmZkNDYsIDB4NDA4MWJiNWMsIDB4MjMxNWZjYmMsIDB4ZTJhMmQ5MjksIDB4NWZlYmRkOGIsIDB4Njk2ZmYwZDUsCisJMHgxODM1ZjU1ZCwgMHgxNThiNmY5NywgMHg3YzJiY2U0MCwgMHgxNWZkYzBhYiwgMHhlNDJhZjNhMywgMHhmYzc0ZWJmZiwKKwkweDJmYmQ5NTNmLCAweGRmYjAzYjQ3LCAweDlmZmY5YzEzLCAweDlmZjk0MTk4LCAweDEwZDk4YTNlLCAweGFmMzhjMDIzLAorCTB4MDdkZmMzMTgsIDB4YTQwZmY1ZjcsIDB4NmQ1Y2EwYmYsIDB4YmY1NzIxZWIsIDB4Y2RiNTcyNjYsIDB4YWZlNzRhOTYsCisJMHhlMzFiYjZiOCwgMHg3MWY1YzEwYywgMHhhYTYyNzliYSwgMHgwMmM5Mzc0MiwgMHg2Mjk2YmZjMCwgMHg4YmMwMTg3MCwKKwkweDk5ZTgxNWMyLCAweGRmYjdjZGRhLCAweGQ5NWM4NjkwLCAweDBmMzllMTIyLCAweGY5ZTI0NzNmLCAweDAyNzdjYTFmLAorCTB4ZTQ4NmJmMGEsIDB4NmViN2MyOTksIDB4ZDVkODM0NzMsIDB4ODA1NmFiNTMsIDB4ZTc5NzFmNWQsIDB4MjUzY2ZhNDUsCisJMHg1MmM2ODdiOCwgMHhmODBhNzY3ZCwgMHgzODNjOGMzOCwgMHg1N2M3ZTVjMSwgMHhmNzYyZmJiMiwgMHg3YTAwMGZlZSwKKwkweDIyMWVhMTJlLCAweDEzYWM4N2VjLCAweGE1MTc4MGVjLCAweGRkOGViMWRkLCAweDVhM2MzYWMzLCAweDJiYmY5Y2QwLAorCTB4ZWYwYzFmZjUsIDB4NDFmYjhmNDAsIDB4N2M2MzQ3ODcsIDB4M2M4NDYwM2EsIDB4YTYzZTExZDUsIDB4ODM5MDg4YzcsCisJMHg1NzBjNDBmYywgMHg1YjNlMDAwZiwgMHhjZGQ3ZjU0NCwgMHg0YTc1ZmQyYSwgMHg1NTNhNDVhZSwgMHgzNDc5NzBlMCwKKwkweGM1NWY1ZjkzLCAweDk1ZmY3ZGIwLCAweGUyMTU4NWQzLCAweDJmNzNhYTg1LCAweDAyNDg5MGVhLCAweDYwNTE2N2UzLAorCTB4ZjhjMjJlN2MsIDB4YmE0Y2Y2YTcsIDB4ZGFmZGU5MGEsIDB4MDc2ZWY0ZjAsIDB4ZmUxNjJhZmYsIDB4NDhmNWE3M2QsCisJMHhlYzMzMzE5ZiwgMHgxM2NiMWRmOCwgMHg0NjIyMzM5MiwgMHhiMGY5MWY2MywgMHg1N2YxYmRkYywgMHhmZDAxZDdlOCwKKwkweDQ2ZjdiZjAyLCAweGZmNDAyNWZmLCAweGZiZGQwYzI0LCAweGYwYWJkZDI4LCAweGE1MDFkMGE3LCAweDU1YTI2YjhiLAorCTB4MTc0ZjQxZjIsIDB4MDJhMzc5Y2EsIDB4ZTc3NDU3OTcsIDB4MzM0NzRmOTUsIDB4OTc4MGIwNzksIDB4NjZmMjVlOGUsCisJMHg2MGZjZmQ5NCwgMHg4MWVjOWYzYywgMHhjZjBjZjllNywgMHg3YzAyYmUyMSwgMHg2N2UxZjIyYiwgMHgzZGFmZTExNywKKwkweGFmNmM3NmQxLCAweGU2MDE3NGY5LCAweDczZjJkNGE5LCAweDlmM2U3YWFiLCAweGQxYTVlZWIyLCAweDRiN2NlNjgyLAorCTB4Y2EzNGVlN2YsIDB4NWEyYmJlZTIsIDB4NDhlYTNlNzcsIDB4MzRjN2QxMGIsIDB4ZDkyZWNmNmUsIDB4ZmY3M2MyNjgsCisJMHg3ODAyZDAyZCwgMHhiZGZlY2RkYiwgMHhiYjNkZTU2YywgMHgwYTRmMGQ0NCwgMHg0Y2QxMTVlYSwgMHhlMWY0MmI4ZSwKKwkweGMzMjQ2NjU4LCAweDU1ZjJmZmE4LCAweGM4NmVlMTcyLCAweGFiNTlmOWZmLCAweGRkMzQ2ZjM3LCAweDc3YTMxNmM3LAorCTB4MDdlOGI1ZjYsIDB4ZjE4MmFmMzgsIDB4ZDgzM2NhYWYsIDB4YzYyNDFmMjEsIDB4ZGUyMDE3NjUsIDB4N2MwYTI0ODEsCisJMHgzM2NkOGZiOCwgMHgxOTc5ZDUyZSwgMHhlNzBlYzlmYSwgMHgwZjA3OTAzOCwgMHhmODI5N2M3MywgMHg5YmQwZTA1NSwKKwkweGFmMGRlYjllLCAweGUyN2MzODdiLCAweDhlNWViYjc5LCAweDllZmU3MzE0LCAweDVjNWRmYmMyLCAweGUwNDU3ODhlLAorCTB4MmY3MTFiMjcsIDB4NTlmZDYxMTcsIDB4ZTUwNWZlNGMsIDB4NzNjMTE2NDgsIDB4NzI3NTk3YzksIDB4NWU5ZmU1ZTQsCisJMHg5MWFjYmM4ZSwgMHhjMmRhMTMyMywgMHgwYmZhMTFjYSwgMHgxYmYxZmZjYiwgMHg0YjFkYTIxNiwgMHg2M2I3ODcwZSwKKwkweDNkMzM0Njc3LCAweDkzZmEwZjFjLCAweGIyZjc4YmY2LCAweDM5ODdkZWYzLCAweGM0OGE1MmRkLCAweDBkZGFjOWJjLAorCTB4NTcxM2NjMjYsIDB4MzY2ZDkwZTQsIDB4YWY3ZjgxYzksIDB4MTZmYTA2ZDksIDB4MWY3NmNkN2EsIDB4YzVlNzBjOWUsCisJMHg5YzA3NDY0OSwgMHgwMzkyOWY1ZiwgMHhkNDUzZjc4OCwgMHhmYTQ1YWYwMSwgMHhjN2ZiYzdjOCwgMHgwMjIzYzhjMywKKwkweDQ3ZWYxMmYxLCAweDljZWZkMDgzLCAweDlmMjEzNjI2LCAweDUwNDY5OTJjLCAweDc4ZGVlZTdmLCAweDQ5NTVkMjA1LAorCTB4NzQwMDhhNWUsIDB4MjMxNzVhNWIsIDB4NTRlYzdiNDAsIDB4OTRlNDAxYmIsIDB4OTYyYjhmYjIsIDB4NzFiMGM4MTksCisJMHhkNDA3MDdjOCwgMHg2ZjBhZTQ3MiwgMHhjZGJiZmUxNSwgMHg0OWRjZTM0MywgMHg0NzIxMGM3MiwgMHgzM2ZiM2QxZiwKKwkweDhkYThiYzc1LCAweDIyZjFkNWQ2LCAweGZiZTA3ZjVhLCAweDQ2OGU4YmM0LCAweDc4ODAxZTA3LCAweGFlNmMzZmQxLAorCTB4OTQ3Nzk4NzYsIDB4ZWEyOGZmMjUsIDB4OTEyYWM0YjcsIDB4YzVkNmU0YTgsIDB4NGExZmI3ZWMsIDB4MmUzYzk1MmYsCisJMHgzNGE5NWE0NSwgMHg4MWM0ZDA0ZSwgMHg2MDczYWI2ZiwgMHg1ODJiZjgxYywgMHhlMzgwYzU0ZiwgMHg3ODcwYzM0ZiwKKwkweDdiNTg0NmFmLCAweDFmYTNhZDliLCAweDEzZTQwYjk3LCAweDk3ZThmODgyLCAweGZjNDIyNTVmLCAweDA2M2I5MTQ1LAorCTB4MmZlMmFjN2IsIDB4YTE5NzkwMGIsIDB4MDM3ZmRiZjAsIDB4ZDdiNTdkMWMsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsCisJMHgwMDAwMDAwMCwgMHg3ZGNkZmYwMCwgMHhkNTk0NzgwOSwgMHhlNzdkZjBkNSwgMHgyNGNiMmQ5ZCwgMHg3NjQyYzk5MywKKwkweDAzYmJlYzI2LCAweDRlYjFhYjA5LCAweDA0OTA2MDA4LCAweDhkNDQxMDA3LCAweGIwOTAwOTM4LCAweGQyOTEwMzY0LAorCTB4MjA4MTk2ZDYsIDB4MmIxODhhMDYsIDB4MGViMTU0YjUsIDB4NDU1MWZhMTQsIDB4ZGIxYWI2MWIsIDB4MWE0MDEzYTAsCisJMHhhZDU2MzQxNCwgMHg2MWE1YWZkOCwgMHg4MDg5MWQ5MSwgMHhlNThhZDNmZCwgMHg3YmRjZTczYiwgMHgyNjRlZjMzMywKKwkweGU3OWY2YTAyLCAweGNkY2YwZjBmLCAweGNmN2JkZTVkLCAweDc3M2RmYjNkLCAweDc5NjMyZDQ5LCAweDliMTkyMjNiLAorCTB4ZWQ1MGIzOTAsIDB4Y2NjOWE5MDYsIDB4ODMxYjE2M2MsIDB4NDM2MzJmMWYsIDB4MDg3YTNlNzksIDB4NmI5ODU5ZTYsCisJMHhmMjZiNjMyMCwgMHgwMWRlNzk3NSwgMHg5ZmM3NWQ4YywgMHhhMjY5ZmQzYiwgMHg2NzhlM2UxNSwgMHgzMGQ2ZmU2YywKKwkweGI1MzM0OWViLCAweDdmZTFkNzY3LCAweDI2OGM1ZDc5LCAweDY0OWY1OTVmLCAweDlmYzdkOTNkLCAweDI0YmY4ZjlmLAorCTB4NGMzM2ZmYzEsIDB4MmIxODEyY2YsIDB4ZTFhN2UyNjMsIDB4NzBmZmRmY2IsIDB4ZGZjN2I0MTgsIDB4NTRkZWM2NTUsCisJMHg4MDU2ODlkZCwgMHgxMmRjZGNhNywgMHhkOGNlZGRkNSwgMHgxM2M3ZjkzMywgMHg1MmQ0OTFkYywgMHgyMjNkZGY4NywKKwkweGI5NzE3OGM2LCAweDcxZGViZGUzLCAweDU1ZGU3OThjLCAweDBmYzgxNmQ5LCAweDRhM2QxOTM2LCAweDY0ZTJmYzM0LAorCTB4ZTg4MjZiNzYsIDB4MDY5NDdlMGYsIDB4MDQxOTY3YzUsIDB4NTU0MzdmZjksIDB4ZmU5NzYzMmMsIDB4YzVmNGEzYWQsCisJMHgzMmYyYjg5ZiwgMHg3YThhZmJlMCwgMHhiNDM5NjM5ZCwgMHgxODUwNjhhYiwgMHhkMWNjNjJjYiwgMHgxOWNkNzk5NSwKKwkweDQ3ODVkNThjLCAweDVmZDA2MjBkLCAweGE3NDhiZWNlLCAweDI5MmZjYTAxLCAweDgzMjlhZjY2LCAweDg3MDgwMGQxLAorCTB4YTIzZmMyNDEsIDB4ZDQxYjdkMzUsIDB4ZDg5ODM3NTcsIDB4Y2E1ZWM4NmEsIDB4ZTExOWFjNjEsIDB4ZDlhMjNiZDUsCisJMHgwNzdlM2YwMCwgMHgwZmE2N2UxZCwgMHg2YmNhMDBjYywgMHg2MzBiMmUxZCwgMHhmZjc4YzI5YiwgMHg3YjY0YzI5YiwKKwkweGI0ODMzNDdiLCAweGVjZDE5MmRiLCAweGQ3YTdjMDA0LCAweGY0MGQxNjMzLCAweDY5ODNjNDgxLCAweDAzNmU5MmY2LAorCTB4MWYzMDk5ZjQsIDB4ODAxOGYzM2QsIDB4M2VhZGQ5NGUsIDB4YWRkMmYxMTUsIDB4OTE2M2FlZDUsIDB4YWRmNDcxZmUsCisJMHg0ZGRiZTY4YywgMHg2MDM5ZDc2ZiwgMHhmNzgxM2FmYywgMHg1NDNiNGQ5ZCwgMHhkODczZTAzZCwgMHgxNTZhZGE5OCwKKwkweGY3MjhkMmQyLCAweGE4ZjNjNDU4LCAweDJjNmFhYWVjLCAweGE4ZjdjZDhmLCAweGE1OWY2ODZlLCAweDAwYjNlZDU0LAorCTB4ZTY3OGQ4NWUsIDB4Y2NlNTAyZDgsIDB4ODQ4ZjgzMDcsIDB4MThkNjE2ZmEsIDB4MjM5OGQ5MDUsIDB4MjgyOGNlMmQsCisJMHhkOWM2NzUxZiwgMHgxZGU2MDAzOCwgMHhmNjBhNjJlZCwgMHgxYTMyZDhjNywgMHhjYmE0NWZiZiwgMHgzOGIyZmQ4NSwKKwkweGZkMDA1MmE3LCAweDIzMDdmYjBjLCAweDc2N2VjOGJjLCAweGVjNTY4ZDM2LCAweGYzNWM2ZjAwLCAweGMwMWVjNTE4LAorCTB4ZTI0ZDMwNWYsIDB4ZmVjY2Y1YWIsIDB4NzNkN2VjNTMsIDB4YmE0MGU3NDgsIDB4NzM5OGViZGEsIDB4ZmFlZmI0MjMsCisJMHgyYzMxYmY3MiwgMHhkMmJlZGZjYSwgMHhiNzc4ZDBhYSwgMHg0NmI5ZGRiYiwgMHhkODc5ZjM0NiwgMHg5YzhmZGYwYSwKKwkweDAwNjdkZGVlLCAweGYxY2Y4Njc4LCAweDAzZGEzM2VjLCAweDUxOTczM2U2LCAweDFlMmQyOTdmLCAweDExZDI0NzlhLAorCTB4OGJhNjBlNzcsIDB4Y2ZkNDMxMmQsIDB4YzZiZTMzYTgsIDB4NGJhZWQwMDEsIDB4Y2EwN2NjMTUsIDB4NTQzZjlhZDMsCisJMHg1NTY5YWYxMCwgMHg3MWQyMGFjZCwgMHg4MjVlZDM2NywgMHgzZjc5YjUzNywgMHhlYTExODE0ZiwgMHg3MjAxZGQyMCwKKwkweDhmMzAxNzU1LCAweGNkMWQxNmM1LCAweGExNDViMTYzLCAweDk5YzVlNTc0LCAweDdmYTgyZTg5LCAweDZjNWVlYWM0LAorCTB4Yzc5ZmVhMTksIDB4NjI3NzFjY2EsIDB4YmViZmY0MTUsIDB4N2NmYjViYTksIDB4YjdiYzAyN2IsIDB4Mjc4ODY3YzEsCisJMHhhYjcyZGZkOSwgMHhiMjY5ZmE5MSwgMHhmMzg0N2ZiOCwgMHg3MmRlOWNhYiwgMHg0NzZmNzkwMCwgMHg0OGEzOWZkMywKKwkweDg4ZTIxYTJlLCAweDhlODcwOWJlLCAweDk2MTIzZDEzLCAweDc4YTBjZTAwLCAweDBhODVhMWZkLCAweDg1ZjVhYTgzLAorCTB4MjNhNTMzNDAsIDB4ZGRiODI3OWUsIDB4ODg5OTMxOGUsIDB4Zjg5ZjgwNmYsIDB4MDkzMTFhYzcsIDB4OGM2MmYyZjgsCisJMHg5MWM3MDZiYiwgMHhkOTE0MjdlZCwgMHhiNDVmNTAyMiwgMHhjZjc3YzVlNywgMHg1OThlNjUyZSwgMHhmYmNmMDAzZCwKKwkweDZlYjI3NzhiLCAweDEyZjc3NzQ4LCAweGJiN2I3YmE0LCAweDIxODc4ZjgxLCAweGIzOGIzMTNmLCAweGE0YmJmYjE2LAorCTB4Y2UzOGU5YjAsIDB4Zjk0Mjk4NGIsIDB4OTc5ZTA2NGIsIDB4OTVhYmZhZjgsIDB4ZWIxMWViZTMsIDB4Nzg5NmM1YTQsCisJMHhmMDJiMjc4ZSwgMHhiYzYxNGJmMSwgMHg3YTFlYjA1ZCwgMHhiM2JmY2FkNywgMHhjZDYxN2UwYiwgMHgxZTcwNWY5YywKKwkweGJiNjRiZmE4LCAweGRiZGZhMmRkLCAweDNkNWNlZTlkLCAweDA4Y2Q5M2U3LCAweGRlMTFjOGU3LCAweGMzYjdjODdkLAorCTB4OTBmYjNjZjMsIDB4ZTA5OGQzZmYsIDB4MjdjZTNjOTMsIDB4Y2ZiZWZjYzEsIDB4NDY3ZWEzNmEsIDB4ODg2NTY5OWQsCisJMHhiOTg1MmNmNywgMHhkMzJlZTkwMiwgMHhhMWFlMTBkNywgMHg4OWEzZGZjOCwgMHhiNjFlNDA3ZiwgMHg1MmMzNzhlMywKKwkweDgwMDM1NGFhLCAweDEzYWNjNzEyLCAweGRlYzY3NzU4LCAweDVkYTlkYWI2LCAweDNlZTcwOGU2LCAweGQzYWIzN2U0LAorCTB4MjA3Y2YyNDUsIDB4MmJlNTRhYzIsIDB4YzA3ZjM4MzMsIDB4ZmM0MDdmZjcsIDB4MmVkM2NiMDUsIDB4N2UwMWEzOTQsCisJMHg3ZTQzOGEzOSwgMHg4ZmM4ZWM4YywgMHhiY2YwMTNiZiwgMHg2M2E1ZTQyZCwgMHg2MTNmZWVmZiwgMHgzYWNkNzFmZiwKKwkweDBjOWQwMmE3LCAweDY1ZTkxMjNmLCAweGEyZjg3NGQwLCAweDhmZTExNTJhLCAweDAwZmZjMDYzLCAweDM1OGU2ZGEwLAorCTB4YTUyY2U1MDcsIDB4NWQyMGExY2MsIDB4ODc1YzIyOWIsIDB4MjMwZmQ0YWQsIDB4NDczMmI5YmQsIDB4ZWY4NmFkZTcsCisJMHg4OTNiNDZlNiwgMHgzZWQ4ZGY3ZSwgMHgzNjY2NjdlYywgMHhjMDFmNmZjYywgMHhlMTE1ZmMxZSwgMHhiNmIwN2IwMywKKwkweDZmZjRmNTA4LCAweDNkNDQ2OWZmLCAweGQ3ZjI5NzZhLCAweDM4YTIyNDM0LCAweDQ4YWUzZjgwLCAweGY3YTdlMGJkLAorCTB4NDEwYmQyNzEsIDB4NzNkNjBlZjQsIDB4ZWJmNmY0YzEsIDB4MDM5ZWFkMDUsIDB4ZjRlMDVkN2MsIDB4OWYyMjY3NzAsCisJMHg1MjJmMzVjNSwgMHhlYWQwN2ViOSwgMHhkMWU4Y2ViNSwgMHgzYTA4M2Y0MSwgMHg3ZTcwOGE1YywgMHgwYzVjZjg4MSwKKwkweDdhZTM4ODMyLCAweDU4M2ViMzQ2LCAweDBlMWQ5OWRlLCAweDc2YTQ4OThiLCAweDFjM2I0NWZmLCAweGQxZGYxMzE2LAorCTB4YWRjY2ViMGUsIDB4NDdjMDE1MDcsIDB4NTc2YTgzNzksIDB4OGZkNTBhNjEsIDB4ZmY0ODljZDksIDB4ODcxNGViMTcsCisJMHg0MWE0ZTUwOSwgMHg3MTc4N2UyNSwgMHg0YmQ5Mzg2NSwgMHhiYjY3ZWYwOSwgMHhkYmIxMDdhMywgMHhjZmYyMTUyMCwKKwkweDhlYzlkZGRjLCAweGYxODhjNjU2LCAweGYxODc5MGVkLCAweGQ2Nzk1OTJmLCAweGM1Mjc3NTY4LCAweDE3OTNlODA0LAorCTB4NDMwOGJlMWIsIDB4NjQ0ZmY3M2MsIDB4NjJjNjRlMDMsIDB4MGVkNmE3MGIsIDB4ZjAyOTA4ODMsIDB4NTM3ZjA5YmQsCisJMHg2YjgzYWYxMCwgMHg2OWFjMTQ1NCwgMHg5NTI2OWRlZSwgMHhmYjFkZDZlOCwgMHhmZTVhY2UxYiwgMHhiZDcwMGQ5YywKKwkweGNlYjQ2ZGJjLCAweGY1MzdjODFkLCAweDA1ZWM2NzU3LCAweGI4MjMyYmY4LCAweGY3YjRiZTVkLCAweDMzZTQyZjVhLAorCTB4OTJmNzdmNTksIDB4M2Y3YmQyNjIsIDB4MTMxOTJiMDcsIDB4ZWVkZjFmYTAsIDB4NjFlYjgyNzMsIDB4ZDUzZDY4NTYsCisJMHgyYTc2ODcxZiwgMHg4NTAwMjNkNywgMHg3YTNlZTY1MSwgMHg3MGQ0MjdmNCwgMHgyN2Y1YWE4NywgMHg3YmFhMzk4OCwKKwkweDdmMTA3ZTAyLCAweGJmODRlMThkLCAweDc3MjA5ZWVhLCAweDQ4ZTcwNDE5LCAweGM1YmY3ZmVjLCAweGZjYTA5MmM4LAorCTB4YjYyM2M4MGEsIDB4MDM3ZjcwOTMsIDB4ZTIwNzQ3NzgsIDB4YWE2ZjBmZDEsIDB4ZTA4NDU0ZjUsIDB4NWYwZmQ1MGIsCisJMHgwZTkwNWQzYiwgMHhkMTZhYmZkMCwgMHhiMTJlM2NkMywgMHhiM2QyMDc3MCwgMHg0ODY0ZThjZSwgMHhlMTUxY2Y3ZiwKKwkweDU1YmEwODFmLCAweGQ0YmI5ZTA4LCAweDFiODhmNDMwLCAweDkxZTJmN2U2LCAweDdmN2UwNzU0LCAweDk4NGFmZWE5LAorCTB4NDZmZDEyMmUsIDB4OTc5YzE0ZjcsIDB4ODUxYWQ2OWEsIDB4YzM1ZjcwZjYsIDB4MDMyZGJlOTUsIDB4YzU0ZGJmNDgsCisJMHg0ZTg3MmJmMiwgMHhiZTAzZGNkOCwgMHg4NDY2ZmNkMSwgMHg3ZTc2ODdhNiwgMHg5YWM4ZmE5NSwgMHg2MTUwZmY0MCwKKwkweDdjYzE3ZTdjLCAweGZlMzQzNGE0LCAweGYyNDQxOTRiLCAweDdhMWY1MGM3LCAweDFhYjc5OWQyLCAweGEwNzJiZGU2LAorCTB4OTk3YmE3ZTAsIDB4OTgzZWU1MWQsIDB4YWJhYjQ2ZGUsIDB4NmU0MDI2MjIsIDB4YWFlZDE1ZmYsIDB4OWM3MGI4NDIsCisJMHhjZjM0MjE5NCwgMHg3NDFmOTg4NSwgMHg0MWE2NjY3OCwgMHhjMzFiZjM4NywgMHg3ZjRhNmVkMCwgMHhiMGVmZmQwZiwKKwkweDRlZmY3ZTIxLCAweGZlN2RhZmNlLCAweDNhMGRhZjNkLCAweDNmYmU2OGM0LCAweGY4MDA3MWM2LCAweGFmODAzYWU1LAorCTB4ZWFjMThjMTIsIDB4ZmI3OWMwOGMsIDB4NjJlNTFlODgsIDB4NDhlNmU1N2UsIDB4NjFmMzBhOWYsIDB4NWExNzBjYmIsCisJMHhkNmU4MWVhNCwgMHg0ZmEwN2UxMSwgMHgxOWU3YzIwZCwgMHg0NmUyMzhlZCwgMHhkMjM1ZmVmYSwgMHhkMWY4OGQ1MSwKKwkweDVmZDE1YjM3LCAweGM2YWNmOTg1LCAweDI4YTIzNjdhLCAweDJmZGZlNzExLCAweGY1MDViOWQyLCAweDE4Y2I0YmZjLAorCTB4NTdhNWYzZjEsIDB4NGMxMzc3OTgsIDB4MWQ3ZWZiNzYsIDB4ZDY0NmNiZjEsIDB4OWZiZWY4OGYsIDB4NTcwY2YyZWUsCisJMHgzYWYzYzkyNCwgMHhiOWFiM2I4NCwgMHhiNzdhODc1NiwgMHg0M2FlZDdhNywgMHhiOWI3ZGE3ZCwgMHgzZTIzYTc0ZSwKKwkweDg2MjJmZjcwLCAweDU3OTllNGZjLCAweGZmNWYwMGY0LCAweDM3ZWE1NTZkLCAweDY4NmYwN2U0LCAweGFmNDBlZjdlLAorCTB4OTJmNDgxY2QsIDB4N2MxNmNiNzgsIDB4NDM3ODhkOTAsIDB4YmZhYWQwODMsIDB4ZTNmNjYyZDAsIDB4NTJjM2U4MGQsCisJMHg2M2ZiMWQ2YywgMHhmMTFkMjVhYywgMHhlOWZhZjhkNCwgMHg1ZmQwMmQ1ZSwgMHg2N2E3MWJjNSwgMHhmZTJhNWUyMCwKKwkweDE4MjYyMjYwLCAweGQxYmU4N2YzLCAweGU1OWZlZmM4LCAweDJlNjdmNjg0LCAweGU4NzJhZDJjLCAweDI1N2E5ZmMxLAorCTB4ODVkOTFiYTYsIDB4NDQ2Y2Q2MzIsIDB4NmViY2ExM2YsIDB4YTAxZjQzODEsIDB4NzZmZmE1Y2YsIDB4OGY5Y2QwYzgsCisJMHhhYTFhMWZmZCwgMHhlNzgwNjViMiwgMHg1ZGUxOGUyYiwgMHhkMTNiMDg1OCwgMHhiZmExMmZlZSwgMHg0NzJmYjAwNiwKKwkweGFmY2YxMWQ4LCAweGZmNzM0NTY3LCAweDIwZjY0NmQxLCAweGE1YTFmZGI4LCAweDdhNjMxYzczLCAweGExZGZkZTc0LAorCTB4YmRkMzYxYzEsIDB4OTA3ZTdkZjAsIDB4ODYzNDc0MWYsIDB4MThiNmI1ZGIsIDB4MjE0MTg3NmUsIDB4OGJjZTExM2IsCisJMHgzZDc4YjdiZiwgMHhjODcxNzQ1MCwgMHhmZDBjNTE0NywgMHg2NDFmNWRjYywgMHgyZThmODA3YSwgMHhmZTQ3ZTZiMiwKKwkweDM1NzY3Mjg4LCAweGY5NzFkNjkyLCAweDVjY2EzZjgzLCAweGU1Y2JmMTY2LCAweGRjZjgyMzFkLCAweDcwZWQ3OGVmLAorCTB4ZTdkYTFkOTQsIDB4ZTcxN2RmNmYsIDB4MWRkZmMwMDksIDB4OWRiNTdmNGMsIDB4NWM3MDMzYWYsIDB4N2QzM2UzNDYsCisJMHgwN2E0MmY0YiwgMHgwNGQ5ZTNmYiwgMHhhZmY5YTQzYiwgMHhmOWM3MTViZiwgMHg3NDg3NDEyMCwgMHhkYmY0MjQ1ZSwKKwkweGMwMjhiMGVmLCAweDUyNWZjZWRmLCAweGYzMjQ3YzQxLCAweGU2NjY2ZGU1LCAweGViYzgwZDhkLCAweDA0Yjg4ZDliLAorCTB4NjQ4YjZmMmUsIDB4MzdiNzY4NWUsIDB4N2E0NzEyYzYsIDB4YTMyNTk5MjYsIDB4NWYxNGU5OWUsIDB4ZTBjZjg5MzcsCisJMHg0M2NmODk3MiwgMHhhM2E2Y2Y4MywgMHgyNzU5ZjE1ZiwgMHgxYjZmNzBmZSwgMHhmN2NlZDc2ZiwgMHhkNzRmYzE0YiwKKwkweDdjZWZmM2ZiLCAweDBhZWMzZWE1LCAweDhkODQ1ZGYxLCAweDYzOGFlOWQzLCAweGY3ZjQxNzY0LCAweDFlYmU4ZGYyLAorCTB4ZTRlZDEwZDYsIDB4NGYxODMyZmEsIDB4OGQyYjVmNmYsIDB4ZGY3ZjdlYzAsIDB4MDUwYmNhNjYsIDB4ZmJhNmRlOTcsCisJMHgyMWNhN2U3NiwgMHgxZmMwMmE4MCwgMHg1M2JhYTZkYywgMHg5YzFmYzI2ZCwgMHhiZThhZjkwYywgMHhiYWQxYzY1NywKKwkweGQwOGJmMjVhLCAweDRmMzA3NzdiLCAweDMwNmZjYTIzLCAweGY3N2E0ODdmLCAweGZhZGQwMWIwLCAweDI5NjY3MmEzLAorCTB4MzE4YmI3NDgsIDB4NDIzN2NlNzYsIDB4MDQ3Y2E0MWUsIDB4OWQzODMxZTMsIDB4NTBlZTY0NjAsIDB4NjJhZjgwZWIsCisJMHg5OGMzNWUyNCwgMHgyM2UxZjQwNywgMHhkZjY0MGQxYiwgMHhmOGZiNWYwZiwgMHhmN2UwNGNkZSwgMHhkNjBjMWJkMywKKwkweDljZTQzMGU1LCAweDNlYTVmNjE3LCAweDA2NzNmNTAzLCAweGU0MGFhYzliLCAweDNkN2RkYjRmLCAweDVmNGJlZTUwLAorCTB4MGZjODVkNTAsIDB4OTIzYzM3YTcsIDB4ZjNkMjEzMzAsIDB4MDA2NWJmMjAsIDB4MDM0NmU5NDcsIDB4ZjhkOWNmOTUsCisJMHgxNTlmOTUyOCwgMHg0MmZhNWQ3MiwgMHg5N2Q0N2Y3YywgMHg0ZWFmZjc4NywgMHhmOWNlM2E0MCwgMHg0ODY5ODllYSwKKwkweDZiNDZlZDk3LCAweDk2OTBjMWZmLCAweDYzMWM1MzZkLCAweDZmM2RmMDAyLCAweGJmMjY5ODczLCAweGUwZTZjNzVkLAorCTB4OTk1ZDI0M2MsIDB4NDdhZjZlZTIsIDB4YTZkNTNmMTMsIDB4MWY3MTc2ZmIsIDB4MDRkZmQ2OWYsIDB4YTBhYTcyZmYsCisJMHgzMDI5YzRlMywgMHg1N2ExOGFlZiwgMHg3N2RmYWZjOCwgMHhjOWVjOWMyMCwgMHhmOTJhOTE5YiwgMHhmZmMxYmU4ZiwKKwkweDIwZGI5ZGVmLCAweGRlOTVmYjlmLCAweGEwOWRiZTQxLCAweDY3NDE1OGYzLCAweGI3YTQ1Y2IwLCAweDlmM2NjYzRiLAorCTB4ZmM5ZWJhZmIsIDB4NGE4YjVjY2YsIDB4OTFmNjg2ZjgsIDB4N2JmZWExNjMsIDB4ZjQwZmJkYTIsIDB4NTMyMWNhMmMsCisJMHg4NDhkZDdiMywgMHgwZGEzNjM3NiwgMHhmN2QwZWQwYywgMHgxOWYyZjM3YywgMHhkYjNiYzlkOCwgMHgwMjViYzdmNCwKKwkweGQ1OWEzM2U2LCAweDM4N2Y0MWY2LCAweGNhODIxOTg3LCAweGNmMmM3YTlkLCAweGM3Y2I2YjM1LCAweDJjZmJiOGY2LAorCTB4YWQ2MzBmZmEsIDB4NzdjOTcyZGEsIDB4ZmFiNGQ4OGYsIDB4NzM4MWRmNjIsIDB4ZjMwMDliM2YsIDB4OTJhNDM5MmIsCisJMHg3ZDIzN2NmZiwgMHhhZmMyMmVmYywgMHg1ZGJmM2E0NywgMHgzYmJlMGRiOCwgMHhmODcyYjAyYywgMHg0OTE1ZTlkYSwKKwkweDE0MjM1N2M4LCAweGQzYWNmMTg2LCAweGUzY2I0MmQ3LCAweDY2NWVhNDFmLCAweDdlM2VkZjQwLCAweGU2MzgxNmZhLAorCTB4ZGM1MWU3YjYsIDB4YTBiMTE5ZWYsIDB4ZGZmMDhmM2QsIDB4N2FmYjFlYmMsIDB4OGQ5Yjc1M2QsIDB4ZWQ4MjMzYzcsCisJMHhmY2RjYjA0NiwgMHhmZTQ2ZWNiNywgMHgzZGQyYjdlMCwgMHg4MzdmNGExNiwgMHg1Y2VkODVlOSwgMHg4OWViMDZlZiwKKwkweGUxMjEzYjYwLCAweGJjYjc4NjBhLCAweDBmYjFhNzRkLCAweDE5MWVhMTVmLCAweDhjMjc2ODFhLCAweGMzYmUyNzY0LAorCTB4NmQ4MzcwZjUsIDB4MzBmNWM3NjgsIDB4MmY4NDMxZjgsIDB4YWQzZDMwY2YsIDB4NmFkZmMxYzMsIDB4MjIwMzc2YzQsCisJMHgwMDM5YjFlZCwgMHhiNzZiMGFkMiwgMHgxNjdmYjIwOCwgMHg0MDViN2VmNywgMHhiNmZmYWExYywgMHg4ZGVhMWQ1YSwKKwkweDQxOGNmOGY2LCAweGViOTFhNzFiLCAweDlkODQ3N2Q1LCAweDFjZmExM2E4LCAweGNlYjRhYmQ2LCAweDRlZWUxOGRmLAorCTB4YzliOGUzZDQsIDB4OGM5NmM3NDYsIDB4NDhmOWY4OGUsIDB4Y2ZjY2VmYjQsIDB4YmVhYzdlOTUsIDB4OGZiMWZiODYsCisJMHgzODlhNWQ1OCwgMHhhODkzZWIxOSwgMHg1ZmEyZmI4OSwgMHhkOWVkZjI4ZSwgMHhmY2YzNGUxYiwgMHg0MjBkNzE1NCwKKwkweGU3MzNkNDM5LCAweGY0MDE2ZGRmLCAweGY4NzAzNmE5LCAweDhmODllMTgzLCAweDMxOTI3NmU1LCAweGIyMDdmOTE3LAorCTB4ZDBlOGY2N2MsIDB4ZDU4OTVjN2EsIDB4Njc5Y2ZiNTMsIDB4ZmY0NzRmZWYsIDB4MDdjNmQzZWQsIDB4N2ViZjUxZDIsCisJMHhlZGU3MTQxYSwgMHgxNjllMWU0YywgMHhiMGE0ZmFmMiwgMHgyZTIyMzEyMywgMHgxMWNhMTRmMCwgMHg5ZGRhNDFlNCwKKwkweDU1ZmJlMWRiLCAweDU3MjQ1ZDRiLCAweDlkM2E1ZDNmLCAweDJlOTY2N2QyLCAweGI2MTNmYWExLCAweDlhZGYxYTBjLAorCTB4Nzc1NzY3ZjMsIDB4MzVjOWQzYzAsIDB4ZDk4OWQ5MmEsIDB4MThhZjU3NDYsIDB4NTlhNGVlZjgsIDB4MTM4NWYxNDcsCisJMHhiYjc5OTE1NSwgMHhkMTljYjEyMiwgMHhiM2Y2NzI3YSwgMHgwMjc4YjYxMywgMHg2YzI3N2VlMiwgMHg2NzQzYTI3YSwKKwkweGZkOGY4Y2YzLCAweDljYmRmYTY2LCAweGJkYTE0NGI1LCAweDIzZDdlNzZhLCAweDJkYjVlYzFkLCAweGFjN2ZlMzE2LAorCTB4NTVkYjAxMjUsIDB4YjZiZGNkMmEsIDB4YjdjNzFkMjksIDB4MmM3YzY3MzIsIDB4ZjU5MTk3ZjIsIDB4MGJhOWI5NDcsCisJMHhiODI4ZjZlNywgMHhlNzJjNGE1ZCwgMHgxZmExYmZjMywgMHg4YTdlZmQwYiwgMHg5ZTg0MmI3NiwgMHgyZjNhMGJiMSwKKwkweGIxZWQzOGI0LCAweGM5MjJlZmE0LCAweDgxYjgyNzVmLCAweDcyOGNiZTVmLCAweDYwYjg0Nzc2LCAweGQzMTNkNjVkLAorCTB4N2M3ODVkNjEsIDB4MmFjNWIxNmUsIDB4ZjBhOWMzZjgsIDB4NWZhYjhlNzUsIDB4NWJmODg4NmMsIDB4NjA5ZWYxNjcsCisJMHg3ODExZGUzOCwgMHhjOTAzOGUwZCwgMHg4NjgxYzY1NCwgMHhiY2Y5ZjJjNiwgMHhlMjZhYjM2ZCwgMHgwZWZmMTg0MiwKKwkweDc5ZjlmZjE1LCAweDFiYTNkNzJjLCAweDJhM2M1YmMzLCAweDdjMDNjM2NhLCAweGRiMjVkZTNkLCAweDJiN2M2MGEzLAorCTB4MDczNmJmMjUsIDB4YzU3NzVmZTMsIDB4MmRhNWI4ZjIsIDB4ZWI4ODlkY2YsIDB4YTM0NGU0ZjYsIDB4MzczNmUzMDMsCisJMHhlYTAzOGYyYiwgMHhjMDVmN2M5YywgMHhkNjM4MjNhZCwgMHg3YWMyN2IzNywgMHhjZDA5NWMwMSwgMHhhNDIzMWNlZSwKKwkweDBkMzE3MTUzLCAweGFhYzJlZGY4LCAweGEwZGQyMTk2LCAweDZiMjMyMTFkLCAweDkxNTdiODdmLCAweDkyNjg2YzhiLAorCTB4NDAyOGY0MjksIDB4Njc3Mjg2MWEsIDB4NDU0ZjcyOGMsIDB4NTU5YjBjYmEsIDB4ZmE3MThkNTUsIDB4ZmZiZTMyOTQsCisJMHg3NzcxNTY3MCwgMHg5YzlmMDFiNSwgMHhhNDNjMmI3ZCwgMHhlODIyNWMzZiwgMHhjOWQxOTRjZiwgMHgzNmIzZmE2OCwKKwkweGFjYWUwODFiLCAweDgxOWYzZmNkLCAweGY5YjU5ZjdjLCAweGEwMTJiZDJlLCAweDFhYzc5Njg3LCAweGRmNjdmZTY4LAorCTB4ZTI5NWQ3OWEsIDB4NTg5ODlmMTYsIDB4ZWE3YTEwY2YsIDB4MWU1ZjgyODcsIDB4NjlkODc0MTAsIDB4OGI3ZmNkMGMsCisJMHhhYzZmYmI0NSwgMHg1NTQwNWJjZiwgMHhlMmY5ZjU2OSwgMHg1YjM4ODBkOCwgMHhkMjY1Zjk0NSwgMHhlZDYzOTNlNywKKwkweGZhZjNjZTM0LCAweDgwYzkwM2JhLCAweDMxNjdlN2NmLCAweGU2OGEwNzg3LCAweGYxNDhkZDZkLCAweGJhYzY5ZGQ3LAorCTB4ZTRlZmI4ZjEsIDB4YTQzMWQwYTksIDB4N2YwM2ZlZmIsIDB4N2U4YzkwMzgsIDB4NjBmYjJjZTQsIDB4YmZkYTIzZjQsCisJMHg0YWQyZjQzZiwgMHgwZTdlN2YyYywgMHg0ZmY4OGMxYiwgMHg2MGFkM2VmMiwgMHg2MTlmZTYzYywgMHg3ZmFmODRiNSwKKwkweDY1YjEzMTZlLCAweGJmN2RiNzE4LCAweDIxMGZmYzZlLCAweGM3NGNiZWJmLCAweGNmMDRiZjUwLCAweGU4MzI0NjFiLAorCTB4MTlmNTMxMTIsIDB4ZmQzODIzNzQsIDB4YmE0YTBmNTEsIDB4OTExOTAzMDMsIDB4ODg2ZTkyMWUsIDB4ZWU5MGVkYmYsCisJMHhjMTFhZjJkZiwgMHgyYTlhZTEyZiwgMHhiNmYzZGVlMiwgMHg3YzhmMWY2ZSwgMHg1MzY2NWM5MiwgMHhlMTIwNGUzMCwKKwkweDc5M2Q5MWJhLCAweGQ5ZGJmNjMxLCAweDBlZDBlZjkzLCAweDIyMWIxMmJmLCAweDBlYzIxZDJlLCAweDYxMGQ4OGVmLAorCTB4MmZlZDgzODcsIDB4NjM3NzM4YjMsIDB4ZTFkOTFiYmIsIDB4MzZmZjgyZTEsIDB4N2ZlZDA2YzYsIDB4MDg1OTdlZTAsCisJMHhlZDhkMGRiYSwgMHgxZmRmMGYxMCwgMHhlM2ZmNjIxYiwgMHhkZWYwZjE0NiwgMHg0M2ZmNzJiMSwgMHhjOTdmMGYxYiwKKwkweGFkNmZmNWM4LCAweDI5M2MzZDhkLCAweDEzNzRiYzg0LCAweGI1ZDZlYmUzLCAweGM2N2VkMTFhLCAweGY1MjEyODM1LAorCTB4NTE4YjYyZDksIDB4MWM3ZTFmZWUsIDB4MTI1ZmIwMWIsIDB4ZTA0MzhmYWMsIDB4ZWZiNjI4ZjcsIDB4MTdiN2NkYmIsCisJMHhlOTg5MGQ1YiwgMHg1YmVlODExMSwgMHhkZWIwZWJiZiwgMHgyOWNlMzEwZCwgMHgyMmZiM2Y4MSwgMHhmNmE2ZmI0NiwKKwkweDBhZmE0NjJhLCAweDE0MWU1ZWYyLCAweDM3MTQyOWY0LCAweDkzNGYzOGIwLCAweGJlYzFiYWRkLCAweDFjZDY5ZGQ1LAorCTB4M2VlNDgzZjIsIDB4ZDZhYjU0ZDUsIDB4OTM4YjhjNGYsIDB4MjM5ZjljZWQsIDB4ZDg5ZDY5OWMsIDB4M2MwOTdmODksCisJMHg3MGRiZmNjMSwgMHg0YzQ1YjhkYywgMHhmNzIzMWZiMywgMHgzY2FhZTI2MSwgMHhjZDBiMzE4YSwgMHg2YWY4YTMxMSwKKwkweDMyZjc1OGQ3LCAweDFkNmJiNDAzLCAweDIwOWIxY2M5LCAweGNkNjg1ZDFmLCAweDliNmE3ZDQxLCAweGZkYzQ2OGUzLAorCTB4NzkxNzk1OWEsIDB4MDJlNTdlM2MsIDB4ZmQ0ZTVkZTYsIDB4NzczMmY5ZjAsIDB4MTdjYTJmMzcsIDB4MmUzMDJkZDIsCisJMHhlMWM3MTExMCwgMHg3MmUzODg4OCwgMHgxY2QyNzYwNiwgMHg4ZjBhZTFjNywgMHg5MjkzYjAwYiwgMHgzZTc1YmExZSwKKwkweDFhZGFlODk1LCAweGQwMDU0ZWRhLCAweDc3ZGY0NmQ1LCAweDUwZWZkNzQyLCAweDM3NzFlZDJlLCAweDhjZjcxZmU3LAorCTB4MTliZTA1YmIsIDB4N2M3Mzc3MTgsIDB4NGI0YzE0ZjMsIDB4OGYwNGRmZWMsIDB4MGZmMzg5OTcsIDB4MmNmODBmMWUsCisJMHhmODI2ZWUyYiwgMHhlZTJkZWFlYywgMHg1MDg4MWU4ZiwgMHhhNWRjNWRiZSwgMHhjNDI3NWUyMywgMHg2Yjc3ZDA4NSwKKwkweDQ4N2Q3NWYyLCAweDQ3NzBiMzVmLCAweDIzM2FiYjI4LCAweDdkYmZmMjJlLCAweGEwODY2NDVlLCAweDE3OWQyZGY3LAorCTB4MmQyN2YxNzksIDB4ZGNiM2E0NDYsIDB4MDZmMDkwZjcsIDB4ZTU5MTEzOWYsIDB4MjY0YTBkMTUsIDB4ZjY3MzNmYWUsCisJMHhjMDc1YTM1ZCwgMHhkMzdmYzZhNSwgMHg3OWUzYTAzYSwgMHg0MmVlM2UwZiwgMHg2NzgwMDNlNCwgMHhjZWEwM2FhYywKKwkweDc5NzdmMjA3LCAweGVhNTY5MTliLCAweDIyZmZiMzJhLCAweDRkZjZlMzFiLCAweDUzYjVlNjA2LCAweGVmYjYzMzdiLAorCTB4N2VmYjc4YzcsIDB4NjMzNjU2ZGIsIDB4ZDMxZmFhZGMsIDB4NTQ3YWM0N2IsIDB4YThmZGNlYjksIDB4N2VlMzk0NjgsCisJMHg4ZDViMmE0ZCwgMHhiZWJjYWRmOSwgMHg2MTk3OTk4YSwgMHg4NDdhM2E1YywgMHhmMDAzZDk4ZSwgMHg2NzBjZTMxOSwKKwkweGM2N2MwMGY2LCAweDc5MzRkOWU2LCAweDJmOWU0ZWI5LCAweDI1Nzc4ZGM2LCAweDMyZWZiZTZiLCAweDdkYTY5YmJkLAorCTB4YTY5ZmJiOTIsIDB4MTBjZTY1M2UsIDB4NmFhZDNlNGQsIDB4NTc3ZGE2OTQsIDB4Zjk4MWNmYjAsIDB4OWFkZGNmMGMsCisJMHgyNjZiZGRmNiwgMHg2YjNkZjI2YiwgMHgzZmI0ZDAxZiwgMHhjZDllYWFjZCwgMHg5YzdhNzljNiwgMHhjZTAwM2RjZCwKKwkweGRlY2UwMjU5LCAweGRmMzU4YmViLCAweDBkZDVkN2Y1LCAweGY5MjBhMWYzLCAweGZmZWUxZjE0LCAweDMyNmMxNmNkLAorCTB4ZmE3M2M0NGIsIDB4ZmE2OWU3N2EsIDB4NWU2YWZmM2QsIDB4OWRmODAyOTMsIDB4MTkzODZiNWQsIDB4N2MyMTlmMTgsCisJMHhlYTRiN2UwMCwgMHg4YzFjZjYxNSwgMHg1YjVlYmE1YiwgMHhlOWUxYTczZiwgMHhjZTkwMjk5NSwgMHhlN2NiNmFmNSwKKwkweDgyOWNiZWUxLCAweGRmMmRhZGZjLCAweDgyM2Q3M2FkLCAweDcxZWQ5ZGViLCAweGUyMjhjZTIyLCAweDdmMDNhYzNkLAorCTB4OTdiOGQyNDQsIDB4OTc3OGYwMzcsIDB4YzQxZGU5ZWEsIDB4YjEzYTVhMWYsIDB4NzYyZmM5NmYsIDB4NDRhNjJmYzEsCisJMHhkOTg0YmYyZCwgMHg3YTUyZmNiNSwgMHgxZjMwZTc3MCwgMHg4OGZmODhlYiwgMHhlNDdjNDEzZSwgMHg3ODAxN2Y4MSwKKwkweGY4OTVmODk3LCAweDdjYjQzOGI3LCAweDlkZTE1ZGY1LCAweGRiOTFhZjMxLCAweDNmZjk2ZDBkLCAweGI1ZjFiNGUyLAorCTB4ZTNlZTkxN2UsIDB4ZDRhZWI3YTgsIDB4YmY3MTUyMmYsIDB4N2RmMWU1OGQsIDB4NTdmNTJiZmIsIDB4NmJiMjFkMDcsCisJMHhkYjNhZDdmNiwgMHgxNzE3M2E0ZiwgMHhmYjE3NTcxOCwgMHgzZjcwOTc0OSwgMHgxMzc2MzZmMSwgMHhmZWZiODlmYiwKKwkweGQ5MDBmODg1LCAweDFmODAxYjc3LCAweGI5ODcwOGQ4LCAweGNjMzBmZjdkLCAweGFjMTQ3ZmJmLCAweDc2MGE2NTM3LAorCTB4YjIzOGNiZTMsIDB4ZDc3ZGZlMjcsIDB4NTg3YWY4NmEsIDB4MDg1YzVmZjQsIDB4OTM4N2RjYWYsIDB4ZjllNDcyZTcsCisJMHhlN2M5MTYyMSwgMHgzYzAxZmIyOSwgMHhmMTQzZjFhOCwgMHgwMjJkOWZmYywgMHhmN2RiYWRkNywgMHg5NmY1YTQyZiwKKwkweGM0YzQzZjNjLCAweDdlMTBiZmI5LCAweDNhZWZlOTNmLCAweGZjODkzNWZjLCAweDZlNzhmMDgxLCAweDZkMzEyM2NmLAorCTB4ZjljNDA3ZjcsIDB4M2JjZjY5MmUsIDB4YjdlZTQ3ZWIsIDB4N2IyYTk2NzUsIDB4NmMzZmRhNTUsIDB4OWIxZGMyNTUsCisJMHg1ZTkzZDg0MiwgMHhmZDcyZGZmMSwgMHgxYzQzYTY3NSwgMHhlMDdjNTdiYSwgMHgyYmQxZWJmYSwgMHgwMGFlZDAwNywKKwkweGI5NjJmYmRlLCAweDVhZjYwMmM1LCAweDVmZWJkYmYxLCAweGJmMTE0NDQ0LCAweGJkNTQxZWI2LCAweGIyZTBhMWJkLAorCTB4MDM2ZDFlZDksIDB4Njk4NDM2M2MsIDB4YWI0Yzg4ZWQsIDB4ZjQwM2M5Y2MsIDB4M2RhZjU4YjEsIDB4MTFmNzI3ZTcsCisJMHg2MzY3ZGI4MywgMHgyN2ZkODBmYiwgMHg4ZmUzNGVmOCwgMHhmZGMyMWNhYywgMHg2ZTc4ZWNiNSwgMHhlNDg4YmZkZiwKKwkweDkxMTRjMWZlLCAweDE3NWEwY2FmLCAweGJmNzBkNjU1LCAweGU5ZjgyMzZjLCAweDRjZmQwMTBkLCAweGZiNTBiNzg5LAorCTB4NTMzOTExYTUsIDB4YzA4ZTI5ZTIsIDB4MzMyYmJiZDcsIDB4NTYyN2YyMTQsIDB4MjFmOTBhMmEsIDB4NTM0N2EyNjcsCisJMHg5Y2I4YjVmZCwgMHg2MjNmYzRjOSwgMHhiYmU4Mjk5YywgMHg2ZWRhZmZjMSwgMHgzOGJiMWUxYywgMHgzN2ZiMjM4ZiwKKwkweGU2ZjZmM2M3LCAweDRlOTRkMWY4LCAweGI4OGFiNzg5LCAweGYyMWZiNWIzLCAweDkzODQ2NTQ3LCAweGExYWEzNWZhLAorCTB4YzdhNmE1ZjcsIDB4YjVhZDc5ZjMsIDB4NmEyN2U5MzAsIDB4ODRlM2ZlZTIsIDB4YmYzOGM0ZGUsIDB4ZjlhM2ZiODksCisJMHg3MWZjMTM2MywgMHg3ZjY2YTY3ZSwgMHhmMTEzOGM2OCwgMHg3NzNlODU3ZCwgMHg1M2JhOWVhMiwgMHg3OGIzYmRkMCwKKwkweDc1OGZiM2JmLCAweDc1Mjc2ZTNmLCAweDEyZmJmNzhjLCAweDFkZmJjNjQzLCAweDBmZGUyOGUzLCAweDVlNzFlYTVmLAorCTB4YTQ3ZjcxYzEsIDB4MmZjZDg0NDMsIDB4YjdjNDhmM2YsIDB4ZDQ1NDgzZGIsIDB4Nzc0NmY1NGYsIDB4NWFiYmFlMzUsCisJMHgwZWZmODM3NywgMHgyZGJjN2RjNSwgMHhmMDMwMWZiNCwgMHhhZTA3Nzc1MCwgMHhiMDY2NTZhZiwgMHhiN2U0MTZiZCwKKwkweDdmYTE4YzY1LCAweDViYTJkZjVmLCAweDZiZjUwNjFlLCAweGY1OGFjYzNjLCAweDc1ZjAzNzIzLCAweGJiN2FlOTViLAorCTB4ODA2OWE3MDMsIDB4ODg2NWIwNzUsIDB4OGJhYzFmNWYsIDB4ZDdiYzIxOGYsIDB4YzQ2ZTRjYjcsIDB4ZjczNTgxZmQsCisJMHhhMTlhMWIzMiwgMHgxYjliNTY1YSwgMHgwNmQwZmU4NSwgMHhmOGRkNzIxNiwgMHgwOWIzOTA5NCwgMHhkNDU1N2IzOSwKKwkweGRmZThmMTE3LCAweDUzZDNhMDg3LCAweDBmYTA0ZTgyLCAweDg3OWQyMmQ2LCAweGYwYWZiYWI3LCAweDRmYWUzOGZkLAorCTB4ZmFlMjI1NDgsIDB4MWJjZWJmNzQsIDB4MzczZjNkNmEsIDB4ZjIxZDc3M2EsIDB4ZTg2ZjQwYzEsIDB4MGI1YWMzZjUsCisJMHgxMTc1YjdlNywgMHhkZGE4ZTdhZSwgMHhiNWVlN2UyZSwgMHg1OWRmZWE1NCwgMHhiYTA3YTYzYSwgMHg5ZDc0MTE0ZiwKKwkweGRmOWY4MWIyLCAweDVmYWVkNzYwLCAweGM4OWZhNTU3LCAweDdhODY3ZmE4LCAweDhiNWVmNGE1LCAweGE1NDNlMzE3LAorCTB4ODIxZTE5MGQsIDB4N2EzOGE1Y2IsIDB4Nzg2OGJlYTIsIDB4ZDJmOTg1ZGYsIDB4YzYyYjJjYWMsIDB4NjU3ZjljMjMsCisJMHhlNDNlYTljYSwgMHhiZmFlMzI2MiwgMHhkNDk0ZWNmNCwgMHhlM2M3NjQyNywgMHhiMjY5ZGY2OCwgMHgxNmI1YjdlMCwKKwkweDBkNDczZjNiLCAweGZjMDA4ZTI4LCAweGI2NTg2ZTk3LCAweDdjZWZjZjE3LCAweGZiNDY2YmY0LCAweGQ2ZDQ0NzRiLAorCTB4NTRkOWQ4NjEsIDB4MjE5MmNlNDAsIDB4MjE1OWVhOTgsIDB4ZmVmODJiYzUsIDB4MWZhMmJkZDUsIDB4NWM2MWJmY2YsCisJMHhhOWRjN2ZiMywgMHgzZTY5MDcwZCwgMHg2M2NjMGM0NywgMHhiNGJhM2UwNiwgMHhmYTNiM2VlNywgMHhjZGUzMmJkYiwKKwkweGZiOTNjNzE0LCAweGY3NTU0N2IyLCAweGY0ODQ2NGUzLCAweGRhMDgxNWFkLCAweDU2MTEwZGZkLCAweDQzZmM3ZjhjLAorCTB4ODI0NjVkZjAsIDB4YzdkMjFmN2IsIDB4MDU3YzdjYmQsIDB4NjU5NmMxZGEsIDB4YTNjNDc0YTYsIDB4MWE5Mjc5N2IsCisJMHhkN2JhNzAwNywgMHhkMWVmMzQyYSwgMHg3ODhjOTNjYiwgMHg4YWU2NjE3ZSwgMHg0ZjUwZTNjMSwgMHg5NWNlNjEwZCwKKwkweDI4NzlkZjE4LCAweGQzOTQ4NTk2LCAweDlkN2NmMWYzLCAweDYwNjU1YzU4LCAweDg0OWE2OGM2LCAweDE3MmZlMzExLAorCTB4YmY4YTE0NmIsIDB4MDE1YmZlZTAsIDB4OTg4ZTY3ZDAsIDB4ZjdhYWY5NWYsIDB4ZWMzZjg4YTMsIDB4MWUxODZmZjAsCisJMHg3MzNmZTVjYiwgMHgxZTQ5NGFhYSwgMHhlNDZiY2VjMSwgMHgxOWQ1OGNhNywgMHg3OTlmYTA5MywgMHhkYjM5NjA2YiwKKwkweGYxZmRlYzhkLCAweGMwNDNmZTBlLCAweDNhZjJlZjc5LCAweDViMjU3ZDZkLCAweDdmOWQzOWYzLCAweDViZWZlMDYxLAorCTB4ZWI2ODJlZDAsIDB4ZThmMjk1M2YsIDB4YWJhNDBlNjAsIDB4OGNjNWIxN2IsIDB4MGI0Njg0ZTcsIDB4NTFhZDE0YmMsCisJMHg2NjVmYThhYywgMHhiZjhjNjhhZSwgMHg5YjMzZjIwZiwgMHhiNGYyMDc1NCwgMHhlOGViMGJjNCwgMHg4ZjM5ZDNlZiwKKwkweDY5M2Q0ZGNiLCAweDZlZDk3MDNkLCAweGRjZWQ4MmVmLCAweDJiZmY1YzUxLCAweDJjNzBmNzdhLCAweDNkZDYyODdmLAorCTB4YWRmMWQ3MWMsIDB4OWUxODU4OWYsIDB4MDZkNjM5OWIsIDB4MWVjNjE4ZmUsIDB4YzUxMDZjY2QsIDB4ZDA2Y2FjMWYsCisJMHg1YTNiMDBhNCwgMHg2MDI2YjA2NCwgMHgxNmMzZGZiYywgMHhiN2JlMzIyNiwgMHg3NzljMGU2NSwgMHhmOTBkNzlhNSwKKwkweDA3ZTg5NTgxLCAweDFmOTFmOWYyLCAweDY3MmM1MGY4LCAweDE1ZDdkNmQ1LCAweGVhYzM5ZjNhLCAweDlhMDdlNDBkLAorCTB4ZDY3ODFmODUsIDB4YWUwMDliNWUsIDB4NmUzZDczMTcsIDB4ZGUyZDM5MjAsIDB4Njg3ZTQzMTYsIDB4MjM1YzhhZjEsCisJMHhhZWYxNmZmMiwgMHhlMDQzZDIxOCwgMHg2M2Q4N2UwNywgMHhjNzhlOWY5OCwgMHg0ODFlNjQ1NiwgMHhlYjhiN2U4NCwKKwkweDk2YWExYzMyLCAweGI4ZmY1YTdlLCAweDViYTQ5OGU2LCAweDRiNGZiZjQ3LCAweGU4YTE5M2I3LCAweDk0ZDJmNDA2LAorCTB4ZmYwODI0YTcsIDB4M2Q4YmQwNGUsIDB4NDc3ZTRiMTYsIDB4N2FiNzgyZTEsIDB4Y2I5ZTAxOWEsIDB4ZWU3NDYxNTUsCisJMHg4M2ZmMzNhOCwgMHhiZWQxYzZhNSwgMHhlNjE3NWM5ZSwgMHhkZmFmYjcyNSwgMHhjYWZjZGY2OCwgMHhiNzQ0YTE5YSwKKwkweGZkZTU3YTYwLCAweGI0NzBlNjY3LCAweDE2YWZlYzI3LCAweGExZWM3YTg2LCAweGM5ZTFlY2VlLCAweGMyYjBmZTUwLAorCTB4ZWFhMWViZTUsIDB4YTcyODc5ZjEsIDB4NmY1YzA5NTksIDB4NjYxNGI3YmUsIDB4ZmRlYzY0NjgsIDB4ZWNlNjY2YTUsCisJMHg0YjA3ZDhjNSwgMHg2OGZmOTRhZCwgMHgzZmU1MjI2OSwgMHhmNGE3NmE1ZSwgMHgyODdkYTU5MywgMHg2OGUyMjkzZCwKKwkweDAxODBjZTUyLCAweDI1NDc1Zjg4LCAweDk1MWFmOTcwLCAweDZjZGVlMjIwLCAweDhjYWEyMjUxLCAweDMwN2NmZmJjLAorCTB4YTFjNTY3NTQsIDB4NGQ4YzI3ZDIsIDB4MjcxZWVjNjMsIDB4ZGZjMDIzMjAsIDB4MDQ2ZjdlOTksIDB4ZGYzZGI5MTIsCisJMHg0YjhlYjA2MiwgMHg5NTcxZmY0NCwgMHhkOGJlZmE0MiwgMHgzZGE2YmI3NSwgMHgzYzQ2MjVmOCwgMHg2NGZhY2RmZiwKKwkweDljZTljYmZhLCAweDE5MzhkZDk4LCAweGZjZmVmMGY4LCAweDY5ZmI0ZDU4LCAweGZjOWEyOTM1LCAweGNkM2IwNGU0LAorCTB4Nzc1ZTUyN2IsIDB4ODUwM2Y5NGQsIDB4YTJmOTM1ZmQsIDB4OWUwMjQwMzYsIDB4ZjhkYjMwMmYsIDB4YjdkOGFhZmUsCisJMHhkN2M2Y2M2NywgMHhmNmRlNTZlYiwgMHgyZWYwZDU2YSwgMHhhZjc4MDdkZiwgMHg3ZDUwMzIxZSwgMHg1ZDI0M2QzMCwKKwkweDMxZDdhZDY3LCAweDczMzY4MDM3LCAweGZhMGRjYzNkLCAweDkzM2I1OTNkLCAweDExZmNlYWU0LCAweDk1ZmRkOTBiLAorCTB4MWRkZjMyZGIsIDB4ZGI2M2Y5MDEsIDB4N2ViZmI0MGMsIDB4NWFlYzQ1NmMsIDB4YjYzZTNmZGMsIDB4NDE4YTNlMmQsCisJMHgzMmE5NWVlYSwgMHg3YWMxZmExZiwgMHhlODA1OTFhYiwgMHhjYjE1ZGNiNywgMHg5MTU2ZmNlOCwgMHhmOTQwZTRkNywKKwkweGY5ZWZkYTJmLCAweGQxZGJjYzk1LCAweDUxMjA0NDFmLCAweGJkNTQzZTNlLCAweGU3ZTg4NTNlLCAweDE0YmVmYzI0LAorCTB4ZjkwMmRkZTYsIDB4ZjFhZmEwMzMsIDB4MTZjY2Y4YzgsIDB4ODUxOWQ3MGUsIDB4ZDlmY2MwYWQsIDB4ZmFmNWJmYjAsCisJMHhiMTcxYzAzZSwgMHg4NzQ0YjZhMCwgMHg1MGY1MDFlYiwgMHgxZGNiZTkzYywgMHgyZGJlNDMyYSwgMHhmZGEwNjA1YywKKwkweGE5MWZiOWJiLCAweDk0Y2YzMTFiLCAweGRlOWMyOTIxLCAweDY0NDc5ZDJhLCAweDdmYTg5OTJmLCAweDAyMWMwYWQ2LAorCTB4ZDZmZDE2ZWQsIDB4NzdkNjg5YjQsIDB4MGY3N2U0NGMsIDB4ZmMxNmFlZjQsIDB4MjY3NDdjODksIDB4MDg2MzM5ODYsCisJMHgzZGUwODU1OCwgMHg0NmZjN2VmNywgMHhkM2UzZjdhYywgMHhmZGU3MDgzYiwgMHgzMmI1ZGVhNSwgMHg1Y2ViZjgwMSwKKwkweGU5MTA3Nzg5LCAweDQ5ZTJjN2I1LCAweDdlZjE4MmFlLCAweDk2ZjVjOGQyLCAweGYxNDBlNTA3LCAweDljYmY0YmViLAorCTB4OWQzZTI3MmQsIDB4MzgyNDcwNjksIDB4MjU2NTVmNDgsIDB4YjkzYWJlYTEsIDB4OThlNzQwYzYsIDB4MzUxOWRlOTksCisJMHgzYjNmZDY4OSwgMHgzOGU1OGY4OCwgMHg3MWY2ZjUyNywgMHg5YWM5ZGYwOCwgMHg5NmZiODYwYywgMHhmMjU0NmJjNSwKKwkweDc4ZmY5MDA3LCAweGZmZTcyZjdiLCAweDFiMzc1NWE3LCAweDI4ZDZmZDBlLCAweDIzYTVkNjZlLCAweDYwYjIzY2RmLAorCTB4OWE2MzlkMzgsIDB4YzE0MWQ2MjEsIDB4OTAzM2UwN2EsIDB4N2YyZjc3NTUsIDB4N2UxZWRlN2UsIDB4YjU2NTg2Y2UsCisJMHgxODFkZWZlOCwgMHg3YzE1OGYzOCwgMHhiZmRlNDRiYywgMHhkNjUwMDczYywgMHhkMTQ3NGZlZCwgMHhkNGRjYmVlNSwKKwkweGYwZWQxYTNkLCAweGUyNTUwZmQ5LCAweDZhZGRiM2IzLCAweDNkMDIyNTg3LCAweDBlZjZlODJmLCAweGNmZTQzZWZiLAorCTB4ZTk0ZTc4MTcsIDB4Yjg1NGZmMjEsIDB4YWUwMjY3N2IsIDB4ZDI2Yjc0NTcsIDB4M2U3ODZlOTUsIDB4ZGJkYWM0ZjYsCisJMHhhZjczYmJlMSwgMHhlNjI0MWMxOCwgMHg3ZjQ5ZTI0YiwgMHg2ZTY5N2JjYywgMHg4ZWYzYzBkNywgMHgyZjk3ZjUxZCwKKwkweDM4YmZlZjk5LCAweGU3YzAxNDkzLCAweDM4ZGQ3YjdjLCAweDc3NWMwMGViLCAweGUyMWQ4NGJiLCAweGU2ZTNiMWY4LAorCTB4YmFjNWUwMmEsIDB4YzM0M2MxNGUsIDB4Y2I1MGM0ZWMsIDB4M2Q3NzNjNmEsIDB4MzAyNGM0MTMsIDB4ZWM0Mjc4NGUsCisJMHg3YTEwMWY4ZiwgMHgxMTA5ZmE0NSwgMHhhNjdlNzg1ZCwgMHg3YjM3ZjM4ZSwgMHgwZGJmMjE1NSwgMHhiZmZhMzQ3ZSwKKwkweDk0NGY5YzUyLCAweGViZWE1ZjdhLCAweGZiNGI1NjMyLCAweGY4MTI0N2MxLCAweDhhYjljNjM5LCAweGUwNTVkYTk3LAorCTB4YThhODJlY2UsIDB4NDIwZjJiMTIsIDB4NzkzNTZkOTcsIDB4OTdkNDE5YmQsIDB4NDgwZmQwMzUsIDB4ZmJlNzYyZWUsCisJMHg5ZTU3YzY0MywgMHg2NTJkYjY0NSwgMHg0MTdlN2NjZCwgMHhiYzE5Y2VlZCwgMHgxZDE5Y2QyNSwgMHg3NTg5NGRlZCwKKwkweGY1MWIwYWUzLCAweGZjNjA3MDZmLCAweDY5Yzg1NGE0LCAweGY1ZTJhZDc5LCAweGRkOTA3OWYxLCAweGQ5OGFmMTk0LAorCTB4ZGIwNjZlYzIsIDB4MjhmNjBlYTcsIDB4MGVjZDBlYzgsIDB4NTZhY2IzYjIsIDB4ZGUwMTU3NmIsIDB4YzI0NzFjNDgsCisJMHgyYmE3MGMxYiwgMHg5ODc4NDJjMiwgMHhiZGExNzAwNywgMHgwZjdiNzEyZCwgMHgxNWI4MjQ0YywgMHgwM2IyNTAwNywKKwkweDM1Y2NhNTNjLCAweDAxZTcwNjI2LCAweDQ3N2IzZWY1LCAweGQ1ZTc4MmY4LCAweGNmMzE1ZTAxLCAweDFjNGJiODYwLAorCTB4ZmY3MGZiOWYsIDB4NTE4N2NmMTgsIDB4MWU2ODI5YmMsIDB4ZmVjMTFlOTIsIDB4ODk0YmE0OWEsIDB4YTRiN2UzODcsCisJMHg3ZTdhMjE0MSwgMHgzMjA3ZWVkYSwgMHg3ZTQ5MWI4YSwgMHg5ZDUwMDU4MSwgMHg0NGQ3N2JmNiwgMHhlYmE1NjdkNCwKKwkweGY4NjZmZjQwLCAweGQzZjI0N2Y5LCAweDg1MTc1NjNjLCAweDdjYzE1MmZjLCAweGJlNTA5MzJiLCAweDQ2ZDM3NTdjLAorCTB4ZTFiZWRmYTIsIDB4NDljYTIzN2QsIDB4NTNkN2NkYTEsIDB4NWMyODgzMTcsIDB4YjRiY2QzZmIsIDB4MTA0NGY1ODAsCisJMHhkNzQ0NmY5ZSwgMHg5YzM3OGE2ZiwgMHhiZGM2NWU5NSwgMHgzN2IzNGYwMCwgMHg0MWIwY2VhYiwgMHgxY2UyNzY5YSwKKwkweDYwZTQ4NzkxLCAweGM0NjNjNzhlLCAweGIxMWNjNmY4LCAweDljMTFiZmVlLCAweDZlN2U3YTk1LCAweDc2ZjA4NmZjLAorCTB4NWI3ZDI3ZTIsIDB4NjhiYWYzYjgsIDB4OWZiZjYyZmQsIDB4OTQzYTMzZDUsIDB4YWZmNzZhOWUsIDB4ZGZmYWVjODIsCisJMHgyMTdlM2MwYywgMHhiZDU1ZjFmNSwgMHg1MDI1ZTI5MywgMHgyYWFlZmMyZSwgMHgwNzliOGYyYiwgMHgyY2I0ZjFlOSwKKwkweGMyMjVlM2QyLCAweDRlNzFjYmFlLCAweGYxNDlkZmFkLCAweGY3NjhkOWI3LCAweDVkM2ZjYTAzLCAweGZlZTI5M2I3LAorCTB4NDc2NjU3YzYsIDB4NmE3ZGZmYTEsIDB4NzhiNWNjZmQsIDB4YjZkNGViYmUsIDB4NGJlNzY0OTksIDB4ZGU3NjkzOWYsCisJMHgxZmY0MGM2ZCwgMHhiZDE3ZDc3MiwgMHhkZmU0NjNmOCwgMHg5ZjE0NjFhZCwgMHgxNmVmZDkyZiwgMHhhYmQwMWVlYiwKKwkweDllYmVjZWQwLCAweDhlYjY1MWViLCAweGI0NTJkNWViLCAweDFlYzgwMzg3LCAweDhiNzZjNmY2LCAweDUxYmRkYzRiLAorCTB4YzljYTAyMGUsIDB4ZTk5ZTJlNGUsIDB4ZTgxZWRkZmUsIDB4MTFjYmYxNzcsIDB4YzJhMTBmMGUsIDB4ZGY5MWQzZWEsCisJMHgzZGExZjU2ZSwgMHhmMWY4NWYyYywgMHgwZWU3M2M1MSwgMHgxZmEzZmZmNiwgMHhkOTBmZmI0OCwgMHg5MmY3N2E4ZCwKKwkweGMyNmYyODJlLCAweDFiYWI5N2VlLCAweDI3ZThhZGQzLCAweDVmZjEzYjA4LCAweDM0MzliZmMwLCAweGZlMTA4N2ZlLAorCTB4MDFmZjExOGIsIDB4NmJjNzIwZmIsIDB4MDY2NzllMzgsIDB4MWFjNGZmZTEsIDB4ZGI5NTk3NGUsIDB4ZmFlMTQ3YmEsCisJMHg3NzRkNzhmMSwgMHg2ZjhlYjNmMiwgMHg5ZmY4NDllYiwgMHhjZmYwMWFiNSwgMHgzZjVhNWZlMywgMHg4ZmYwMDZhYiwKKwkweDNmYzQwOGViLCAweGRmYmM1YmMwLCAweGUwZWZmMDJlLCAweDc4ZTFhZmY4LCAweDNhNzg2YjY3LCAweDNkOWUwM2FiLAorCTB4ZjE2MThlNzQsIDB4ZjQwZTRkYWYsIDB4Zjk4NGNlMWIsIDB4YjMzYTlmYzgsIDB4MDFkNTY1NWQsIDB4ODNmNDk4N2UsCisJMHhiZmI1NjBiZSwgMHhlMjRkN2Y0MiwgMHhlNmFmNmU3ZiwgMHgwYTdmYTg0MSwgMHgxNDUzZmU5ZiwgMHg3NmVlNjFkMiwKKwkweDgwZWZhNDFlLCAweDgyZWNlNjdmLCAweGZjN2ZiOGZlLCAweDk1ZTliZjc2LCAweDdlMDFmMTJlLCAweGE5ZDI0ZGQzLAorCTB4ZDkxOGI5ODIsIDB4MWQzZjg2YzUsIDB4ZTI4Mzc1YzEsIDB4Nzg2ZDRmODQsIDB4ZDdkYzQ2OGYsIDB4ZDdkZWQ3YTgsCisJMHg4NTE5MzNjMCwgMHgzODJmOGMzNiwgMHgyNzg0NjZjYywgMHg4YTFlZjgzNSwgMHhmOTFjNjE5YiwgMHg5ZjNmM2Q5ZiwKKwkweGJjZTQ5MGIxLCAweDZkYmU3MzU1LCAweGJhMTlmMzIyLCAweGE3NThmZmEwLCAweGYyYzZmZGQwLCAweDM5NTEzOTQ1LAorCTB4NTVkNGUzMGMsIDB4MmVlOWM3MDQsIDB4NzhmY2U2OGEsIDB4ZmYyM2FhYjksIDB4ZmRjOGNjYjEsIDB4ZjkzZmI5NDgsCisJMHhkZTBmZjBhZSwgMHgyNWQ3YzJlZCwgMHhkMmIxNzVlZiwgMHgxOGMyOTc3NywgMHgxNjRiODFkOSwgMHgyM2VmMTdhMywKKwkweDExMmE3YWMwLCAweDMxZWNmN2M3LCAweDIyOGVkZDExLCAweGQ1N2Y4MDRjLCAweDYwMzZlMjI4LCAweDFmNGY5MTAyLAorCTB4MWY0ZjljNjQsIDB4MzhhMjZjOGMsIDB4NWU1NGFjMzksIDB4ZDBmOGJiNDAsIDB4ZmM4MzkzMTIsIDB4OGE2OGI4ZGEsCisJMHhmNDIwM2VkNywgMHgyYjkxODNkZCwgMHgxZTFmNjg1ZCwgMHgzMTNhMzQ4YSwgMHg3ODNkN2U4NSwgMHgxYTMwY2U4OCwKKwkweDBkZjE4Nzg2LCAweGFmYmE0NmM5LCAweDc5NmU2ODUzLCAweDBmYmU5NzA1LCAweGQ0Nzg5ZTI3LCAweDA2ZGVhMDBjLAorCTB4NTVjNjM3ZWUsIDB4ZDc1ZGQ3ZTAsIDB4YzVkMjNiNjMsIDB4OWM2ZDFmNGYsIDB4NzQzYzMyYTcsIDB4ZTA1NWEzZGMsCisJMHgyOTNhNzE0YiwgMHhiZTgyNjM5ZSwgMHgyYjhlMDFjMywgMHhkY2IxMmY2OCwgMHg5ZGYxZTU2ZSwgMHg4YjI3NDAwZCwKKwkweGU1YzFiZTlmLCAweDAzZjdjM2NjLCAweGUzNWNmMGNhLCAweDY0MTljNjI4LCAweDkzNWZlMTA0LCAweGZhZjIzMzJmLAorCTB4MjZhZmM0ZjAsIDB4ZWM2NmNiYWMsIDB4MTAzZWNjY2YsIDB4M2E4NjU2ZTksIDB4NDVmN2Q3MDQsIDB4OTc4YzVlZDEsCisJMHgyNWYxODNkZiwgMHhlMjdhYTYxYiwgMHhlNjdhYzk5NywgMHgyNmI0ZjFkMSwgMHg4OWNjY2YxMiwgMHg4MTQ0ZDM3OCwKKwkweDk4MjNhOWNmLCAweGVlZjAxYTJmLCAweDc3OGRhODNiLCAweGY5ZDNlN2RkLCAweGVmN2UwMzdhLCAweDkxMWFmYmQxLAorCTB4YmI2Njc1M2YsIDB4YjhlMzBhYzEsIDB4YjgyMTk0ZjIsIDB4N2U1YjI5MmUsIDB4MjVhNmYwNzMsIDB4YTVkN2YzOWEsCisJMHhjZmM3NWU0MiwgMHg4MGZlYjU4NSwgMHgwNDFlMjFjNywgMHhjZGJjNDU2MSwgMHhlYWZkYjNkMCwgMHg4ODA3Y2UxMCwKKwkweGRkOWI0YTk3LCAweDI4MTZlZDQzLCAweDcxOTUwZjE0LCAweGMxZmY0OTM2LCAweDFkMjA3ZGQwLCAweDQxZjAxNDFmLAorCTB4Zjg1MTM1M2YsIDB4YmQzNDMxYmQsIDB4ZjVjYTI2ZmEsIDB4YWJhZDFkNzMsIDB4OWJiOTBiZTcsIDB4OWI2ZGU1MmYsCisJMHgyN2M2ZGU1NiwgMHg4MmJkYTlkYSwgMHhlZGUwMzA3ZSwgMHgyNjc2OTE0MSwgMHhmZjQ0ZTMxNywgMHg1Y2I5MTJlMywKKwkweDc4ZTJkZDY0LCAweDlkMzViMjJjLCAweDc5MDhiN2NlLCAweGZlZjEzNzI5LCAweDg4ZjdmOGU1LCAweDhkYTI0Yzc0LAorCTB4MDBmMDk1ZmEsIDB4N2VjNzFlYmYsIDB4OTAwMWEwNzQsIDB4NTZkNjRmNWYsIDB4ODczNDdmOTMsIDB4MzNiNWM0MDUsCisJMHg1ZjI0ZWRmYywgMHhlYmI3Y2M3NywgMHg0Yzc1ZGQxMSwgMHgxMGIzYWQ4ZCwgMHhjMmY3Y2FmNSwgMHgxZjQ3YTgxYywKKwkweGFjZjVkNjM0LCAweDRlZDhlYzhhLCAweGIyMTRkYmVlLCAweDNkMjMwMzY2LCAweGMyNjFlMjI5LCAweDIzNTU4Y2ZlLAorCTB4YTE0MDdjZTksIDB4NWUwZmVmYzIsIDB4NzQ3OGIxY2EsIDB4MzFhNzE4ZDEsIDB4NjMwYjY5MTAsIDB4ZjEzZjNhMTQsCisJMHhmMjdmYjEzNywgMHg4OWUyZjQ1MCwgMHg1MTg1ZDcyOCwgMHgzM2E2M2Q0NiwgMHhmYmY1MmI1OCwgMHhlOGI3NmI3NywKKwkweDMzZGUxOGZiLCAweDBlNzYzMTU2LCAweDc3Yzg4ZjAzLCAweGE4ZDViOGMyLCAweDhkN2U3ODc3LCAweDRhYTI5YjMzLAorCTB4MjFjNzdmMjIsIDB4ZGVlMWUwMjcsIDB4Y2E3ZjQwNmIsIDB4MDlkZjJmN2YsIDB4NGI3YTVmZmQsIDB4ZTkzYmIzZDQsCisJMHgwYjhmNGJmYiwgMHhmMmU0ZjYzZSwgMHg3ZDY1Y2ZmYywgMHg5MmFmY2YxZSwgMHhmZjNjZjlmNSwgMHhlNDVmZWNhNCwKKwkweDVmYWEwZTlmLCAweDRiZmY1NDE2LCAweDNlYmM1ZjllLCAweDdlODNkZjNmLCAweGQyY2U2OGViLCAweGQyMTRhMzg1LAorCTB4YmU4NDdiNTMsIDB4MjNlZTVjMjgsIDB4ZjZlYTE2ZmMsIDB4ZjMzNDc0ZjIsIDB4ZGM2ZWIyZTksIDB4NmJhMjUzNmUsCisJMHhkNTFmZGEwZiwgMHhmNjgyZDI3MiwgMHgyNzY0ZDVmNywgMHg3MDRmOWZlNSwgMHg3NWM0NGIyZiwgMHg2M2M1MjRkNCwKKwkweGExZmI3ZDQ0LCAweGM0YzFlYzk3LCAweGVkMWZjZTRlLCAweGY4ZTNjMmU5LCAweGJmYTA5MjliLCAweDA1ZmI3ZWExLAorCTB4OGM0ZWFjZmQsIDB4MWM3ZWY1YmYsIDB4ODBhZTFjNDksIDB4MjZmOTllN2UsIDB4MjNhN2ZjZjAsIDB4NDliZTFiM2MsCisJMHhiNTkyYjMzZiwgMHg0ODdmNDhmZCwgMHg4NmJlNzU0OSwgMHhlMzI3NjNmMywgMHhlNjQ1ZTczNCwgMHg4ZDExYzRmZiwKKwkweGU3ODYyN2YxLCAweGYzZjUwMDQ1LCAweDY3YTVkNzk3LCAweDVmZjNmZjQyLCAweDA0YmQzZDdkLCAweGU3NjEyNWZkLAorCTB4Y2M3NGRhMmIsIDB4ZGIzNGY3ODksIDB4MWJlN2E1MTgsIDB4N2RlMjMxM2YsIDB4OGQ1ZDhhYjMsIDB4YWVkMDcxYzYsCisJMHgwMGRjZDIxMiwgMHg5YzA0Y2FiOCwgMHg5M2Y0ZTc2MCwgMHg4MzczZWMwMywgMHgzZDhjMWJkMCwgMHg1ZjM3ZjdjZCwKKwkweDdhNDdhYjNkLCAweDlkZDVkN2NlLCAweGY2ZWQwZTdhLCAweDNlZTQyNTI4LCAweGRkZjE2NmNkLCAweDE3Y2U0ZWQxLAorCTB4ZTg3YTE1ZWYsIDB4MTFiMzlhNmEsIDB4OGM2YmY5ZTcsIDB4YjczZTQwMjEsIDB4NjBmYjkzYmEsIDB4ODU1ZjFjNDksCisJMHgxY2NkZWVjMiwgMHgwMWRiMzE2NiwgMHhlNDNmNDNjZiwgMHgxYjI1NTRmYiwgMHgzYzYwODYzMiwgMHhkMTg0Y2RmOCwKKwkweDZkN2UyNGVmLCAweGM3OTViNTNjLCAweDNjNzgxYjUzLCAweGJjZDZkMGI1LCAweDMzMzc5NDA4LCAweDMxYWQ5NTI2LAorCTB4ODRkOGMxZGYsIDB4MDMzOTQ4NWYsIDB4ZjM2Zjg1OTEsIDB4OWQ1ZjMyNGMsIDB4Yzc5YjI2M2YsIDB4NzY3ZjMwYmIsCisJMHg1MDZiNjNmZCwgMHhiOWMyOWE2ZSwgMHhmMGQwZmIxZiwgMHgxN2E4ZTE4MSwgMHg3NDIyMzI1YSwgMHgzN2U3OTA1NiwKKwkweDQ5OGM4YmUzLCAweDhlZmNiMTQzLCAweDYzOWU1ODcxLCAweDIyMmFmNGIyLCAweDhiZTIzMmZjLCAweGM3NWRlMzM3LAorCTB4M2RiMDVmOTAsIDB4NDZkYzQxYzYsIDB4MzA3ZGZjNWYsIDB4MmFkYmY3MGYsIDB4MGY3NWE3OWQsIDB4ZGE4NzcwOGEsCisJMHhjMDg3ZmE3NywgMHg0YWM5MzFhYiwgMHgxOTkwMTM2OSwgMHg4NzA5MTdmZCwgMHhmOWZjMWYxYywgMHhkZmQwY2Q0NSwKKwkweDgzNDllNWM5LCAweDlmNzFkYjU3LCAweDM0OTBjNzI1LCAweDQ2N2UzZmQ0LCAweGUwNzJmYjgyLCAweGFjNzUyN2Y4LAorCTB4NmUyOTJlMTcsIDB4MDI0YjhlMTYsIDB4NWRlZTAzMGUsIDB4ZDk1ZGJlMDMsIDB4YWMwNjczMmEsIDB4ODk4ZjI2ZjMsCisJMHhjZGVmZTRkMCwgMHhjMGNlNjU4ZiwgMHgyOWJkZWQzOCwgMHhjMmY0ZmM5YSwgMHgwZmY2OWFlZSwgMHhhOWFmZWFjYywKKwkweDY3MzUzMDJmLCAweGIxZjgwNTU1LCAweDFlNDlmYjlkLCAweDYyZDJhNzgyLCAweGVlN2Y0NzA5LCAweGZjNWYwZGVmLAorCTB4ZmZmNDQxZTUsIDB4ZjQwZWFiMzYsIDB4ZDllZWU3NTUsIDB4YTFkYjk3ZjIsIDB4NGUzYzY1ZDUsIDB4M2I0N2YxNDUsCisJMHhjOWNlY2JjNSwgMHhhNzdhMjhmMywgMHhlODVmNzAzZSwgMHhmM2E2NmIyMiwgMHgwM2VkOWQzZSwgMHg3Y2VlNzVjOSwKKwkweDc3M2E3ZWViLCAweDAzZWY1ZGY2LCAweGViMTI0YWY1LCAweDA4NmMyMWRkLCAweDU1Y2JjM2RhLCAweGFlYmM1MTFmLAorCTB4ZWZjZjkyMjIsIDB4OGNjN2ViZTIsIDB4ZmI4YTBmYjgsIDB4ZGY4MWQ3OGEsIDB4ZDEwZmMyZWYsIDB4NTBmMzZjM2YsCisJMHhmZWI3M2IzYywgMHgxZDliZWQxOCwgMHhiYTdhZTQ0OCwgMHgxZTgxNzUyMiwgMHg0MjU1MWRlZiwgMHgxYzY4NzY4YSwKKwkweGUwNjhhYmU4LCAweDM2NDZlNjk3LCAweGJiZWUxNzcwLCAweDFmYjg1ODY2LCAweGIxOTkzNmRlLCAweDFlMmJlNDU4LAorCTB4ODg0YTY5ZGYsIDB4ZjNkNzdiYTEsIDB4YmNhOGYyNmIsIDB4ZmE5YzJkYTIsIDB4MWU2ZDRmN2YsIDB4NWYwOWU3NDcsCisJMHhhMWZmNjg1MywgMHhlNWExZTUyMCwgMHgyOWI4N2U3OCwgMHgxMWUwMzNkYywgMHg3N2UwYjcxOCwgMHhkZTIxZTU3NywKKwkweGYzZjE3NjJhLCAweDlmZWEwNWI1LCAweDVhNDAxNmIzLCAweGRmNDc5YjU2LCAweDQ5YWNhODE3LCAweDQyNjE3ZjAxLAorCTB4MDViZmI3MmUsIDB4YWYyMWYzNjgsIDB4NDZhY2IzMGUsIDB4N2QxYWFiYmIsIDB4M2Q0NzllYmQsIDB4OWU5MGI0NjMsCisJMHg4MDdiNmU4OSwgMHgzMzZjYWZjNiwgMHgyNGY3ZjdkMywgMHhkMGQ3N2Y3MSwgMHhkYjFhZTFjMiwgMHhjOTcyYTJlNiwKKwkweGJhOTM1MzBmLCAweDg2MGZkNjY5LCAweDdjN2FjZGY4LCAweGMyZDBjMzk3LCAweDZkZGRmZGE4LCAweGYzOTUyOGZkLAorCTB4YWZjZmJiN2QsIDB4MjFhZTNlZTksIDB4MTRiOGVhZmUsIDB4NzFkYmY3OTgsIDB4OTBkYzk1OGEsIDB4YTU3YzNkMjAsCisJMHgwYjM0Nzg2YSwgMHhjN2RhYTdhMSwgMHhmNGU3ZTM2OSwgMHhkY2ZjNmQ0YywgMHg3MzhhNjE1ZSwgMHgzMWMwMTI3ZSwKKwkweDNkMTZiMWYxLCAweDQ4YjEwN2VlLCAweDM1ZjExNWIzLCAweDdiNjBjNDcxLCAweGE5N2M4MDQ5LCAweDIyMzdlZjdiLAorCTB4ZGVlYjBjN2QsIDB4MzY5ZGEyMzcsIDB4NTAxYjlhNDEsIDB4MzNjZTJlNWYsIDB4MDVlOWViMDQsIDB4MmY0ZjUyNDksCisJMHgxZGRhNTRhMywgMHhmOTA2NzU3NiwgMHg4MmFjMzNhOSwgMHhjY2ZjODUwMSwgMHg3ZTU0ZmExMCwgMHgxYTZiNGNkZiwKKwkweDFlNmVlM2EwLCAweGM1MzQ3ZmM3LCAweDQ1ZjUwMmJkLCAweGJlOWIwZTczLCAweDczNjZmNDgzLCAweDdjYzNlZTNhLAorCTB4OWQwM2YwNTcsIDB4ODlmOTBhY2QsIDB4NzUxZTc0MmQsIDB4MGViYjA4ZTIsIDB4MDRhYmZmZTMsIDB4NmY4ZTUyNWMsCisJMHhhMmM1OGYzNCwgMHg1YjJhN2JmZCwgMHg3N2JlZmQ4MiwgMHg0ZWNkOWRlNywgMHg0N2YxYWZlOCwgMHgwZjY4OTk5OSwKKwkweDI1Y2ZiOGU0LCAweGNjMjk3YmYxLCAweGQ3MGQ3YWRhLCAweDQ0NmY5NTgzLCAweDBiZGU1MWQ4LCAweGZiODYzMTcwLAorCTB4YjQ0YzdiOWQsIDB4ZGE3MjgxNGUsIDB4YzM3Y2E4Y2YsIDB4ODllZjA5YjQsIDB4N2FjMTQ2NTQsIDB4N2RjZmM2MTUsCisJMHg3Yzg3Y2MzMywgMHg5ODY2ZjhkYywgMHhlZjQ2ZWQxZSwgMHg0ODczZjc3NCwgMHg3YjM3ZGNjZiwgMHhhMWY1YzE4ZiwKKwkweDY3YTRjMWIzLCAweDlmMzhmN2U0LCAweDA5ZGIzZDI3LCAweDViZDIzN2JjLCAweGU1MjY3Y2MxLCAweGU1YzM1ZGQzLAorCTB4NjlmMDQ4YTUsIDB4YjczZjkwYjEsIDB4NTUyYmEzOTAsIDB4YWYwZTQ4NWQsIDB4ZTM0MDA2M2MsIDB4Y2E2M2U5M2UsCisJMHgyN2U4NWRjMCwgMHg3ZWY0MmRkOCwgMHgwMmNiOTQ5MywgMHg3OTQxMGY1YywgMHgzYTE4ZmY0MSwgMHg4ZGZkMmJmZiwKKwkweDZiMmMzOTYwLCAweGU1YmY1MmIzLCAweGVmMjE3NjZkLCAweGI5NGJjYTM2LCAweDYzNzIxNjJiLCAweDJjYzY3ZTEyLAorCTB4NTNiYmU3YzEsIDB4NWUyMGVmZGMsIDB4ZWU0MWFhMGEsIDB4M2YxZjY4YTMsIDB4Y2ZjOWU1MGIsIDB4ZjIyYjQ2MzcsCisJMHg2MjRkZjAxNywgMHg1NGZjODA0OSwgMHhkMGNmZGUzNywgMHhiOWM1MzEzZiwgMHg0MTY2NmY4OCwgMHhjYzlmZTgxYSwKKwkweGFjNGZmNzZlLCAweGZlMDAxMmUzLCAweDc0MzIyYjg5LCAweDlkYTlkZjc4LCAweGU2ZjlkYjdmLCAweDhmN2ZmOGU2LAorCTB4NDhlMjk3OTAsIDB4NjdmNDRmNWYsIDB4MGU2MTU1MGQsIDB4Mzk3ZTg3M2MsIDB4MmNmN2VmOGUsIDB4YjhmMWM1NWMsCisJMHg0NWNhZTBkMCwgMHgyZmUxNjJmZiwgMHhhMTk3OGExNSwgMHg2OTdhODFkZiwgMHg2MzJhOTFkOCwgMHhmZWU1MWM2MCwKKwkweDBlY2M0MWI2LCAweGQ2ZDI5ODc4LCAweDEzMzdkMjgzLCAweDBmMTE0N2RjLCAweDA0ZDM2ZDQ1LCAweGEzN2QwNmJlLAorCTB4NGVhMWM1ZmQsIDB4NzgzMjQ3MWUsIDB4MTk4ZDhlNGQsIDB4YWI3MjQ3MTgsIDB4NjkzM2U3NDgsIDB4ZTA0Y2ZhY2MsCisJMHgxZDdhZGU3ZSwgMHhiZWU0YzNjNSwgMHg5OTJiOGNhMywgMHg4MDdjYmNmMCwgMHg1ZjQyZmQxZCwgMHgzN2VmNGU5YiwKKwkweDcyOTljNzA0LCAweGIwYmZkZGI4LCAweGJmNzY0MGQ5LCAweGMzY2ZmMWFjLCAweDJlN2Y1MDc0LCAweGVkMDVkOWMzLAorCTB4Nzc3YTk3YzksIDB4YmNmNWYyMWIsIDB4MGQ1N2RlYzksIDB4ZTRmZjlmOTAsIDB4NzY5MWE4Y2UsIDB4ZjRlYjNlM2YsCisJMHg0NzY4OWViZSwgMHgxODhmMDBlYiwgMHhhMzViYWFlZiwgMHhiZmI5NzllNiwgMHhjOWY3YzExMywgMHg3ZTRiN2YzOCwKKwkweDc5ZjNlNjBlLCAweDlmODhkZDZkLCAweGM4OTk1NGFlLCAweGJlMDE1ZDBlLCAweDQ4NzYwMTY1LCAweGU3YTkxZGRhLAorCTB4N2M5MWZkYTUsIDB4ZmFlN2FlNWQsIDB4ZGEzMjNjYWIsIDB4YjQwOGM5ZWIsIDB4Mzk1YzkzM2IsIDB4Zjg3ZDc3YzgsCisJMHhkZGJmMWE3OSwgMHgxNDc2YjRkOSwgMHgzOGE1YzFjYSwgMHhlZDI4YjczYSwgMHhiYzFjYjA0NiwgMHhkMzFjMTRiNiwKKwkweDhlZWQxZDVlLCAweGNmNTJlYmQ0LCAweGZhMzViYjRiLCAweGZlNzcyZmU1LCAweDhhNTVjZDE1LCAweGUwMzI0MDdiLAorCTB4YjczZDZlZWIsIDB4MmRlYjc3NWYsIDB4ZTM2MzNmYzQsIDB4NmY5MWU5MjYsIDB4MWU4ZjVlNmUsIDB4OThmNDdhMTMsCisJMHg3NDU2OGY0NiwgMHgyNzA2MDc2MiwgMHg3NDFjOWFkZiwgMHg0Y2YzZWQxNSwgMHgzZDQ0N2ZkYywgMHhhM2RmZDgxZiwKKwkweGUwYzdhMzI5LCAweDczMjdjNjNjLCAweGMxNWRmYjNiLCAweDFmZmU5OWRkLCAweGZhNmI3YzlmLCAweDg4YjI1ODdmLAorCTB4ZmY0MGRkZjcsIDB4ZmQ3MzI2MTcsIDB4OTllZmFjMWYsIDB4NzNhN2JmOTUsIDB4MmY1ZjRmNjksIDB4MGNhMzgzZGEsCisJMHhjMWRhMDNlYywgMHgxNmZiMDg4NiwgMHg1ZWM4MGY2MSwgMHhiZjdiNDc4NCwgMHg0ZDVjMWVjZSwgMHg3ODg4NTk5YiwKKwkweDFlMGY2MTBhLCAweGY2MTZmZTRhLCAweDk0YTFmMjQwLCAweDUyMjcyOTFiLCAweDQ4ZTU4MjJlLCAweDlmODRjNWNhLAorCTB4ZTkxMTNhYzIsIDB4NTdiZjFlZjQsIDB4NmNmN2FlNTAsIDB4N2I0NmZkYTMsIDB4Y2Y5NDYwYzQsIDB4OTc2ZTNmNzYsCisJMHhjMWQ2ZjI0MiwgMHhmMWY5MDg0ZSwgMHg2ZWQ2OGJjYiwgMHhmMjkwYjk0OCwgMHg1Y2E3ZTUyMiwgMHgyMGVjYzVjOCwKKwkweGQ2YTdkOGI5LCAweGY3MGEzMzNkLCAweDZiZGQ5MmNiLCAweDcyZmRlMzkzLCAweGQ4MjNiNjUyLCAweDU3Y2E3NDNlLAorCTB4YjM2NDU5MTgsIDB4ZjIxOGFhZTMsIDB4ODFhNDM5NTUsIDB4NDRlYTY1N2MsIDB4YmU0OTllMWUsIDB4ZDk2OGJmMzUsCisJMHg2ZmQzZjI0ZCwgMHhmNGZjZmJmZSwgMHhlOWY4NGU5YiwgMHgzZjBkYmU3ZiwgMHgzZjYzZjQ3NSwgMHgzYzAzYjJjZSwKKwkweGRmNDBiMjU3LCAweDZkZjlmODY2LCAweGZiOGMzYmMyLCAweDdhZjlkZDBmLCAweDA0OTdkNjAwLCAweDhkMzE5Mzc3LAorCTB4YWUxMzNlZTIsIDB4MmY4YTJhYjMsIDB4NzQ5NGJlMGEsIDB4NmNjMGZlOTYsIDB4OTMzODc3MTEsIDB4ZTEwNzdhZTIsCisJMHg4MmMwZjVjNSwgMHg0NDdiZDM5YiwgMHhiMzVjNTM2NywgMHhiMzI3ZDcxMSwgMHgwM2Y0MGQyMSwgMHg5YjdmZjMzYSwKKwkweGJkZWY1MTZmLCAweDNlNzQ5MzcxLCAweGZiOWRmYzk2LCAweDQzOTJjNzhkLCAweGIxYzc4ZGZiLCAweGI1ZDI5YmZjLAorCTB4Zjg4OTk3MjAsIDB4MzAwYjhmZGUsIDB4MjllMTM4ZGUsIDB4MGFjYjY3OTEsIDB4NDZkMzhmMTAsIDB4M2M5ZmZhYzgsCisJMHhmYTgxZWNlOSwgMHgzOGI4Yzk4MSwgMHg1M2RlMzljNSwgMHhmNGIzZGU0NSwgMHgzZjY4MThmMCwgMHg4ZmU2MTllMSwKKwkweGQ4ZmQ0MzliLCAweGI4ZjZlOGVjLCAweGVkZmNjMjg4LCAweDNiMWZlNzk1LCAweDUxZTg4NmJjLCAweGRkY2NlNWNiLAorCTB4M2ZmYmU3YTIsIDB4NzkwNTlmMjIsIDB4NDQ3ZTQwNGIsIDB4NmYwMzdlNTAsIDB4NjE2ZmE1MWYsIDB4OTA0NWU3ODEsCisJMHg5YzIxOTQ5ZiwgMHhmZjAwYWVjZSwgMHg3ZmRmODYwMSwgMHg1NTg1ZWQwNSwgMHhhOGQ3MTg2MSwgMHhkNmY4ZGI4YywKKwkweGY1NmJkNDE1LCAweGI1NDVlZDBhLCAweDE0ZDU4MWUzLCAweGZiYzU1MzM4LCAweDczNWY5NGI5LCAweGMyM2UwOWQ4LAorCTB4YmU3OGJiMDMsIDB4OTNlZDRhNGYsIDB4MzdlOGJkMWUsIDB4YTFiZGRjZTAsIDB4YjlkMjcxNGUsIDB4Yjc4YTExODMsCisJMHg3YzQ3NDY1YiwgMHhkYWQxNDlmNywgMHg2YmQxZmMyNywgMHgxZTc4NjdiZiwgMHg2ZmJlNTZlZiwgMHg4ZGQ2Y2ZiZiwKKwkweDZlOTlmN2JlLCAweGIyZmJmYzYxLCAweGZlN2Y5ZjQzLCAweGVmZTcwYTVlLCAweDIxZDE1OTMxLCAweGE4YTVjN2ViLAorCTB4MzcxMTFmYmMsIDB4NjhhMWYxYTAsIDB4N2JlODVkNGEsIDB4YjhjNTEzYjAsIDB4NDI1ZmI4Y2QsIDB4MjRmNmRjZjgsCisJMHgyOGQ5YjdlMiwgMHg5M2YyZmRmMSwgMHgxOTYzNzdjOCwgMHg2MGNmYzRkMywgMHg5ZmRmY2E3YywgMHg4ZDQxNzJmMiwKKwkweDE5ZDc0ZjllLCAweDliYWZhZjg0LCAweGE5MTQ4MGVmLCAweGYyZjhmZGJmLCAweGY0Y2JkMTA0LCAweDg0NzZmODM1LAorCTB4ZmI1ZGI3YzAsIDB4ZThlYmVmYmQsIDB4ZjdjM2FjMzUsIDB4NDhlNzZmODIsIDB4Zjg2YTc2M2UsIDB4MjJlZjVhM2QsCisJMHg1MzhlOGNmZSwgMHg1NzQ3ZThhYywgMHhlMGQ2YzJiOCwgMHg5ZjJmYzE3YSwgMHg2Y2JlMjdiZiwgMHgxZDAzZmI5NiwKKwkweDAyYjVlZmU0LCAweDg5MGFiZjk0LCAweDRmZWJjZjQ3LCAweDc0YmFmY2EyLCAweDNjYjllZGVkLCAweDczMzVmM2I2LAorCTB4NTJiYzAxZjYsIDB4N2ZiZTBmYzgsIDB4MjdmYWY5ZTQsIDB4N2MwOTJlMzEsIDB4ZDc5NGY1NDEsIDB4MmMxZGMwMDcsCisJMHhmOTQxNzU4ZiwgMHgxNWY5MjBlYywgMHgwM2ZhNDdmMiwgMHhhOWUwMDFlZCwgMHhiOGI3ZWEyNywgMHgwMDdiNDY2MywKKwkweGQwNGNmYzlmLCAweDI3YjhhMmU5LCAweGZiOWEzY2RhLCAweDc4ZGRjZDkzLCAweGZiODUyM2JhLCAweDdjMDljZjhmLAorCTB4OWJlZDEyNmUsIDB4OTBmMDAzYzMsIDB4MWYxZmUxYWEsIDB4ZTYwMjViYWUsIDB4M2ZiYTc4NGQsIDB4OTNmYmNlNGUsCisJMHg2M2QwN2M4MiwgMHhiZjVlMzZjZCwgMHgyN2EzZTUyZCwgMHg3Y2ZlZDkzZCwgMHhhNmFmN2Y3MCwgMHg3ODgwNTI3YywKKwkweGYxZmZmN2YxLCAweGVlMjNmNDYxLCAweDkxZGI3ODE3LCAweDI3YjBlNDcyLCAweGMxMzlkMDUyLCAweGYwMjE0ZWZmLAorCTB4NTE2M2JkMDcsIDB4NzRhMWZjOGUsIDB4NzYxZjhmZTQsIDB4ZDA0ZjRmZTQsIDB4Nzc0ZWY0ZjcsIDB4M2E3YmRmNjcsCisJMHhmYTBjZWY3ZSwgMHhlYTNkZTE5ZSwgMHhkMDVlZmY5YiwgMHhhZTg4M2YyZCwgMHgxZDc0NDE3OSwgMHg5NDJmOTQxMywKKwkweGZmNDZhZjc5LCAweDVjNWNiZDRhLCAweDA5ZTNmNGZmLCAweDU0ZGYxODcxLCAweDlmYmYzOGU4LCAweGJkOTM0ZjlmLAorCTB4ZmM5NTZmOTksIDB4ZjIzMGU2N2IsIDB4Y2Y5ZjlmYWIsIDB4ZDcyNzllMTIsIDB4Y2U3OWJhMDksIDB4Nzg3YTg5M2QsCisJMHg1MWUxZWExMiwgMHhkNDE0ZmNmZSwgMHg1ZjNmOTQ0MywgMHg3ZTYxZmI4MCwgMHhlYTgxNzU3YiwgMHhlZDkxYWJlZiwKKwkweDdhZmQ5MjJmLCAweGVmZWM4NTYwLCAweDNhNGJjYTMzLCAweGIyMjVjZjMyLCAweGJkMGJmNzc3LCAweGE0YWQzY2MzLAorCTB4ZjAzNWU3ZjcsIDB4ZmU3ZDNmZWYsIDB4MmI1ZmMzZjMsIDB4Nzg0MWI1MGYsIDB4Zjc5NDEwZDksIDB4Nzc1ZmI1MDQsCisJMHgyMmI2ZmIwMywgMHg4MmM3ZmJlOCwgMHhlNTA0ZDdlYSwgMHg2YmU1MDdkNywgMHhjZDE3ZGZiNCwgMHg4YjBlNDg1MiwKKwkweGM5ZmRmMDQ2LCAweGU2MGNiOTYwLCAweGRhNTIyZjhmLCAweGY2ZWQ2M2UzLCAweGZmMjQ4OTVjLCAweDEzNTcyMzRlLAorCTB4ZmFmZTc5YWEsIDB4YTgyOWZmZjMsIDB4YTdjODBjODksIDB4YjIxZTg5YjAsIDB4YzA1YTMwZWYsIDB4YjlkMDQxZmQsCisJMHhjMWY4MTUxZSwgMHhiY2RlODlkMCwgMHhlY2RlOTlkOCwgMHg3OWVmNmMxMywgMHhkN2YwM2ZmZCwgMHhkMjJmZGEyNCwKKwkweDU0ZmIyNWY4LCAweDk1NTFiZTZkLCAweGJiYmQ0NzcwLCAweDVmNjAzMjI4LCAweGUyMjY1OTk1LCAweGZkZjNiYWJhLAorCTB4NjM4OTg4OWIsIDB4MjJmYzAzNTIsIDB4Njc0NGY4NGYsIDB4ZmI2NTNjYzAsIDB4NTc1ZDVmNzEsIDB4ZDRmOGJjNzEsCisJMHg3MTliODlmMCwgMHhkOGI0Njg3ZiwgMHgxNGYxYjRkNywgMHhmNjhhYTVlYywgMHg2ZmM0NTJiYSwgMHg1ZDM5ZTFjNiwKKwkweGViZWUxNzZjLCAweDBmZDAzMGI5LCAweDcwYmQ3NTYyLCAweDUyM2Y4ZDllLCAweGQ1NTBiYmY5LCAweDUzYzAxZjQwLAorCTB4NzlkM2IzMTEsIDB4ZWE3ODk5ZDMsIDB4NDdkNDNiYmUsIDB4MGRmOTJmNDcsIDB4NDdlZmI3N2MsIDB4ZDNiNDEyZWEsCisJMHhkMmM0OTc0NywgMHhhOTQ1YTYzOSwgMHgxN2RjZWZkYywgMHgzNjYxMzVkZCwgMHgxZTIzMWJlNCwgMHhmOGRiN2QyNiwKKwkweGY3NGE1OGM0LCAweGFkOTVjZWFhLCAweDM1M2FlODU2LCAweDVmNjQ2Mjc5LCAweDNjMjY4ZmFjLCAweDRmYzQzNjM5LAorCTB4OWRmYzA2NWMsIDB4MzgyNzZhOTksIDB4NDI2YjM2ZGMsIDB4YWJkYmZhM2QsIDB4MDg1ZmI0MGQsIDB4ZmM0NTdlMmQsCisJMHgzMDY5YTRmMywgMHg5NjhiYjdhZSwgMHhiMGZkYTdmNSwgMHgxYTRmOWZlMiwgMHg4YWIwZjc4NywgMHgzZWQwMzcxZiwKKwkweDRhY2U4YjQ5LCAweGVhZjcyMjcxLCAweDZhMmU3NGIxLCAweDdhOTEwYWQ2LCAweGNkZjRhMmVlLCAweDFhYmFmY2ZmLAorCTB4YmViNTY5ZWYsIDB4MGVmYmQwYTAsIDB4N2JhZDVjNzcsIDB4OWI5ZTEwNjcsIDB4Zjc0ZWU5YWMsIDB4NzU4MGRlMmUsCisJMHgzZWZiOWUwMCwgMHgxN2I3YmViZSwgMHgwODlmMjFjZiwgMHhhNDczYTJhYiwgMHg4YmVlOWVkMCwgMHhiZmIzNWU5NSwKKwkweGRiMGIzMTNiLCAweGQwZTVkNmFiLCAweGEzOTQxNGZlLCAweDk1NmE3Y2ZmLCAweDQxZWYwOWJhLCAweGMyNTk0NTE1LAorCTB4YTlmNmZjZjEsIDB4NzVjNTE4YWYsIDB4YTI2ZTNkNGUsIDB4NDc4ZTIyNzcsIDB4OGZhYzY3YmEsIDB4ZThiOGZiYTMsCisJMHg4YTUzYjNlOSwgMHgzYzAxNGEzZCwgMHg2N2QwZGE0YywgMHg5NjEyNjI2MiwgMHhmYjdkMDQ5YiwgMHgxZTAxMTU0NCwKKwkweGZjZWQ3NDhhLCAweDI0YTRmNjQzLCAweGE1MjdlNzg2LCAweDA1Yjg5OWY2LCAweDk3ZWE3MWU2LCAweGQ4N2NlOWJkLAorCTB4ZTRlNzU0YzEsIDB4MmZkN2MwNTQsIDB4NTI1MzljZDIsIDB4NmU1ZTExZTMsIDB4MGZmY2RlYjcsIDB4ZTNmYzhmZGYsCisJMHhlNDA0ZTI4NSwgMHgzOTUyODdhZiwgMHg1NmQxYmY1ZiwgMHhiZWY4MTA5YywgMHgzZDQ1Yzk3NywgMHg0NjliYzFmMSwKKwkweDI3N2EyMmZiLCAweGMxNGQzYzMwLCAweDQxZjAzNjc1LCAweDY3Y2RjNjJjLCAweGYwMGI3NTg5LCAweDIxOWQ5MmYzLAorCTB4YTllMWFiZmMsIDB4ZjFhYmQxMmEsIDB4NDhkOWYxYTcsIDB4MGY1ZjNmNWYsIDB4MTlmNTE3N2YsIDB4NWYyMDM3YWQsCisJMHgyZDczMjFiMSwgMHhhNjkzYjlkYSwgMHgwZjQ0ZWMyNSwgMHg5MWZlN2VkNiwgMHgzYzIzMGJlZCwgMHg3OTg1YjYxOSwKKwkweDdlMzAzMmMzLCAweGZjODcxY2VhLCAweDdhZWIxMmNkLCAweGM4MDRiNjRkLCAweDc3ZmY2OGExLCAweGZiZTczZjBmLAorCTB4ZWI4ZjY4NzcsIDB4ZmU3YmJmYmUsIDB4OWZiODEyZDcsIDB4NDY5N2RiMjEsIDB4NWNlODNjNTksIDB4ZjQ1OGI2OWMsCisJMHhmYWEzOGY0OCwgMHgzY2YwYTdhNSwgMHgwNjBiYzk1YSwgMHgyZjI1MDNiMiwgMHg4YWQ2M2ZjNCwgMHgwNmY4MDdmYSwKKwkweGYzYzE2YmUzLCAweDgxYWE2M2ZhLCAweDkzM2EzMWM3LCAweGFkMThjZjRiLCAweDEzMzFiMjVjLCAweGM5OWRiZTcxLAorCTB4ZGM4NmNkNjUsIDB4M2IyMzliODksIDB4MmI1MmNiOTcsIDB4NWVlMzRmZDcsIDB4OTY1MWVmZTAsIDB4NzFlOGI1MGUsCisJMHgwYmY0NzM3ZiwgMHg3YmExNmQ2ZiwgMHg4NmMyMGI3NCwgMHhkMjg5YmRlMCwgMHhhZjQ0NGMxNywgMHg2M2M1OGIxNiwKKwkweDEzZWYwZGJkLCAweDkwMzFmNDU4LCAweGVkY2E5YjNlLCAweDlmOTBiZDY5LCAweGNkZTk5NTVjLCAweDdiYTUyODQzLAorCTB4ZjBkZjcyMTIsIDB4OWU2NzkyZWMsIDB4ZTc5N2UzYzUsIDB4NzBkYTc3OTgsIDB4Mjc2NWRmYzAsIDB4YmJjYmQzZTcsCisJMHgwNjNmOGE1NCwgMHgxZjk2MjNlZiwgMHg2MWNjNjlkYywgMHg3ODhmYjEzNywgMHgzMmMzZmQ4MywgMHhkZmRlMjJkNiwKKwkweGYwN2RmZDBkLCAweGE5YWJlMWZlLCAweDA2ODdmYmMxLCAweDJhNWU0ZmJhLCAweDM3NzMwZmY2LCAweGU5NzcwNDI4LAorCTB4M2ZjZjdlMTIsIDB4OGRjNzk2MzcsIDB4ZmEwNTJlNGYsIDB4MWVkZTY5MWIsIDB4MGYzYzEwZWIsIDB4Mjk0ZWVkY2QsCisJMHhmODY2YmM1MywgMHgwYjBkYWVmNSwgMHgxM2Q5OGUyOCwgMHg2ZTcxODRmMSwgMHg4OWUyNmVmMSwgMHhhZTNhNDczMCwKKwkweDA4NWU0YmYzLCAweGZlOTZmYzIzLCAweDdlNWZlZTZhLCAweGZhZjc4NTk5LCAweGQ3MDJlMjBhLCAweDJmOTFmYmQ1LAorCTB4ZGUxOTdlMzgsIDB4OWNmZDk0MWYsIDB4N2E2M2Y2NWUsIDB4NDVmNzMxYTcsIDB4N2NjMzFmNTgsIDB4YWJkODYzNGEsCisJMHhiZDIwNjdmNywgMHg5ZjcxZDI5MiwgMHg1ZDJiYjY1MywgMHhiYzVlYTNmZSwgMHg2MWFmYWMxZCwgMHg0YWI0NWQxZCwKKwkweGVjYzdlZmU1LCAweDA0MWQ5MTM2LCAweDAxNjQ0ZjU5LCAweGFkNjcyY2Y3LCAweDcyMzQ2ODM4LCAweDg3MTJjNjNiLAorCTB4ZWVkYWZmMDksIDB4MWM3NjlmYmYsIDB4NmVlYWYxZWEsIDB4MjY4N2I4YTUsIDB4NTFlZjI3ZjEsIDB4ZmJmOGU5MTUsCisJMHg4NTNhODU3NCwgMHgyNjgxNTdlZSwgMHg5NzQ5N2JhMywgMHg3YjVmYjk1MywgMHg2NzlmOTUzYSwgMHhkMDc3NGEyOCwKKwkweGI1ZjI5Y2ZkLCAweDBjZjJjNzI2LCAweDdkZmI0ZmRlLCAweDk1ZGY1ODRmLCAweDY4NGI5YWViLCAweDI2ZjdmMzNmLAorCTB4YWU1NGFiOGEsIDB4NDU4NjczMDgsIDB4M2IxN2YzZjEsIDB4NmFmOWQwMDYsIDB4NTFmMDExYmQsIDB4ZTJmYWU3NjYsCisJMHhhNTZmOThiMiwgMHg3NDVkZDI3ZCwgMHg4ZWNmNDE5ZiwgMHhkY2JlYTFlOCwgMHg3OTYzZjVjMiwgMHg5MjNkZTAwYywKKwkweDE4NmU4YTMzLCAweGU4Yzc2N2JlLCAweDliZjYyNGRjLCAweDdjNjAyODM0LCAweDNmNDM5NDQ1LCAweGJmN2YyOGY2LAorCTB4ODM1NjNhNGQsIDB4ZGY2YzFiNzEsIDB4MzFlMjEwNzcsIDB4ODQ3NGRhNzYsIDB4ZTQ5NTE1ZWYsIDB4NzZiNDkwMTksCisJMHhhZjdkZmEwNCwgMHhkZWI4OTlhOCwgMHg2ZmI1NWEyZSwgMHhmOWRmZWExYywgMHg4ZGUzMDdkYiwgMHhlYWY0NTYwOSwKKwkweGU2M2Y2NDA3LCAweDg4YjdmYTBiLCAweDkwYzU2NzczLCAweDIyYjY3N2M3LCAweGI5M2NiOGQyLCAweDhhMmYxZTU1LAorCTB4ZWYzNDUzNDgsIDB4ZjJmYWM5MTAsIDB4YmYxZTA2NTUsIDB4OGE4ZjNkMDcsIDB4YzdkOTdjYTUsIDB4YTViOTZmZDQsCisJMHg2ZmY1MDEzOSwgMHgzMGMzNmVmOSwgMHg2OTUxZDNkNCwgMHg5NzhiMmU1YywgMHgwMTFmNjVhNSwgMHg0NDM2MmFiZSwKKwkweDY1ODNiYmQzLCAweGU2MjMwMjllLCAweGNhMTU2YWNiLCAweDRmOGJiZmZiLCAweGJmM2QzZTQ3LCAweGU0MjhiNWUyLAorCTB4YmU2MTEzOWYsIDB4NWE5NzY4OWUsIDB4ZTgzOTg0MTcsIDB4Yzc5NWExZGUsIDB4ZThhZmNlZWIsIDB4NjY5NWY3NDksCisJMHhmODJkOWI1OSwgMHg0NWFjYzE5ZSwgMHhiZmE4NmRkZCwgMHg0NjdkNWE4ZiwgMHg5NzVhM2ZhYywgMHhkM2JjYzNhMSwKKwkweGJjYzZjZDZhLCAweGU1MWI3ZjUzLCAweDJkZjM4YmNmLCAweGE1N2M4M2Y0LCAweDZkOTczYTcwLCAweGJmYzQ2N2RiLAorCTB4Y2M0NDMyNGYsIDB4MWYyYmUyZjcsIDB4NGZmOGMyZjQsIDB4MmY3MzdhNzksIDB4MDdjMDJiYjQsIDB4Y2YxMDUyYmQsCisJMHg5NzY0MjkyZiwgMHhmM2YxYjYyYiwgMHgyYTBmOTJlZSwgMHhlZTQwMGY5MCwgMHhhODNlMDllNiwgMHhmN2RhZjVkOCwKKwkweDkwMmExZTUxLCAweGYyM2E0M2ZlLCAweDdlZjNmMDExLCAweDcxYjFkZjJhLCAweGVmZGZlMzFjLCAweDc2OTEzZTQ3LAorCTB4MGMyYmYyMGMsIDB4ZjFkZjhjMzYsIDB4YTcxYTY2N2MsIDB4ZTE4Zjk0M2YsIDB4ZmMwMTllZTUsIDB4MzlmYjVkMWMsCisJMHg3NDFjOGQwNCwgMHgxYTU3NWY0NiwgMHhjYmM1ODdiNywgMHg1ZDZmYTQ0YywgMHg1YTFlNWM2OSwgMHg0MjhlZWQ1NiwKKwkweDY1N2M1ZGZhLCAweDY3ZGMwMWRmLCAweDU2MDFkZjI5LCAweDFlNDIxZWRhLCAweDcxMmEzZTA0LCAweDNmMDQ1MWZlLAorCTB4Mzg5NTE3ZjksIDB4ZmNmZjI4ZGYsIDB4Yzg1ZWY5ZGIsIDB4ZjNlMzI1NjEsIDB4ZDRhZGYzOTMsIDB4N2FjYmY5OGIsCisJMHhjMTI0ZmRmMSwgMHhlMDRjNjUyZiwgMHgyZTZmNTc2YiwgMHg1MGNlNDI3NywgMHgwZWJkZTk4ZSwgMHg0ZGI3M2YzMSwKKwkweGY3ZTUwZWZiLCAweDIyZGNmY2M1LCAweDI4YmFkNjY1LCAweDE3ZDIwZmM0LCAweDEwM2UwZmY1LCAweDA0ZmE5NDY5LAorCTB4YmVkYzVjOWEsIDB4NGJmMWNlOTEsIDB4NTdmODQ5N2EsIDB4ZGY0MDM4MDksIDB4N2U2YzYzMzksIDB4ZjI3NGI2M2EsCisJMHhlMDk1NjQ0ZSwgMHg3NzhmNjM5YiwgMHhmYzA3YWY0OSwgMHhjZjRhZGY5ZCwgMHhlYWJmMTE2YywgMHg3YzkzYzYwMywKKwkweDdkY2JjNzIzLCAweDM4ZGRkMjc5LCAweDg3ZGZlODZmLCAweDhmNzFjYmZkLCAweGQ4ZjQyMjdhLCAweGU1YzY1MWNmLAorCTB4ZTUyZmMyNDMsIDB4YTFmYWI3MzIsIDB4NjE0NzA3YmIsIDB4ZWU5NjhiYmIsIDB4OWNkZTcwMDMsIDB4YWNkMmFiOGUsCisJMHhmZDEzYmRmNCwgMHg1OWRlZjgwNSwgMHhmYWRjNTBhZiwgMHgxZmU3NTg5OCwgMHhhOGI1ZmM3YiwgMHg3ZTdlMDFlMiwKKwkweDI3N2M0MjdmLCAweDMwN2YwY2Y5LCAweDZkZTEyNjNlLCAweDcwMzhmMWIyLCAweDBmNTJkYzMwLCAweDlmNzNiODQ5LAorCTB4MmM2ZWVmYjgsIDB4YmVlM2YwOTcsIDB4NGE5ZjIwNTEsIDB4OTU3ZTRhM2MsIDB4Zjk4MmY1ZjcsIDB4ZGE0ZTc4OTYsCisJMHhmZTczYjU0ZiwgMHg0NjNkNGNhZSwgMHg5NDNhNzdlNywgMHhmYzI3ZjcwNywgMHg1Y2UyMTNhMiwgMHhlMzNjNmI3OSwKKwkweDg5MTVmZjcxLCAweDhhZjczNWZiLCAweGI0MGM4YjE4LCAweGMwOGVkMjNmLCAweDgwN2QxYWNmLCAweGE3YmY2OWZkLAorCTB4OGIzY2U3MTYsIDB4ZDY5MGJiNzQsIDB4YzczZmZhOGQsIDB4ZDAzOThjZWEsIDB4ZTY5OWQ5NmYsIDB4OWRjZWY4NzEsCisJMHhiOGVmNDNmNCwgMHgzMWEzNTNlYSwgMHg5ZjhiYjU1ZSwgMHg1MmZjOTM3NywgMHhjOTNmNjE3NiwgMHhmZmI4Yjk0MSwKKwkweDgzZWFiNDU0LCAweGVmYzhlMTgyLCAweGJlZDAzNWJmLCAweDYzZTNkMTRlLCAweGNmZGZlODhkLCAweDE4NzMzMmRkLAorCTB4NDFlZjAxYTIsIDB4YmIzZjVlYTAsIDB4YmYyNjY4NzksIDB4OTg0ZDYwNTksIDB4MzYyMWY3ODYsIDB4MDFlZDMzM2YsCisJMHhhZjU1OWYyOCwgMHhkODBkYmJkMiwgMHhkMTZmY2EwZiwgMHg1ZjE0OTlhMywgMHg1MmQ2MTEzZCwgMHhmOGZkMGEzMCwKKwkweGY0NTZhODFmLCAweDMyZGY2ZmUzLCAweDdmNmMzMWY0LCAweDBjNmJhNWJiLCAweDM5YjFiNjNkLCAweDdkNGVmMjk2LAorCTB4ZTkwN2Q5MzQsIDB4ODA3M2NhZjcsIDB4YzdkZWUyZDUsIDB4M2ZkZTg0NWYsIDB4ZTIyYTllZGMsIDB4MmY3NTVmZmMsCisJMHhkZDZmOGZkYywgMHhhY2VmNDYxOCwgMHg3NWVkMWExNCwgMHg0ZjZmMWMzZSwgMHg1NDY3NWExNywgMHgyM2VhZjExYSwKKwkweGJmMjU1YmRkLCAweDk5OTE4ZTZjLCAweGI5NTA4NjkzLCAweDBmY2EwOTM5LCAweDQ1MWY5YTFhLCAweDUxZjA3MjNiLAorCTB4M2Y3YzYwY2IsIDB4ODZkN2E5OTIsIDB4OWE3ZjczMTUsIDB4NmFjNjNiZWYsIDB4NzA5MTJkZGYsIDB4MGZjNjI0N2MsCisJMHhkZjdlNGZlZSwgMHgxYjA4ZWI4NCwgMHhlZmE0NGZkZCwgMHhlZGY4YWVjZiwgMHg2NzgzYjQzNCwgMHhlMWI0ZjZiNywKKwkweDA5ZWY0ZmJjLCAweGE3MDNmYmEzLCAweGNmNzdkYTBkLCAweDU3ZGVmNTZlLCAweDc5Mjk3ZGYwLCAweDlhNzRmNTZmLAorCTB4ZmM5MzhmZDYsIDB4Mzc3YmMzN2UsIDB4ODM5ZWQzN2YsIDB4YTViOWQxYmMsIDB4ZGQxOTRiMGIsIDB4OGQzOTdlZmIsCisJMHgyMjYzZjdkMSwgMHhlNzg5ZGFiZSwgMHg0ZDZhNGIwOCwgMHg3MzA3YmM1NiwgMHhmNzFlZjkxMiwgMHhmY2FiNzZiMywKKwkweGNiOTlhNWZlLCAweDk5ZGRjOWMxLCAweGU0YjdiZjc0LCAweDUyNWYzYzZmLCAweDNlZjE3OGE3LCAweDlmYTdmZWYyLAorCTB4YjMwYWYzYTAsIDB4YWJjNGNmYzEsIDB4ZjNmZWVkMDksIDB4YTFhN2E3YmEsIDB4Yjg3NjVjMzgsIDB4ZmU3ZGUyNTcsCisJMHhmOWY5NWJjYiwgMHgzMmVmMGU4YSwgMHgyMDc5ZGMxYywgMHhkZmI5ZGVjOSwgMHhjYmZiNWRmYywgMHg5ZjExMGUzMiwKKwkweDJmY2ZiZGFlLCAweDRmZDcyY2YxLCAweDhjM2YwMjZmLCAweGRiYzdlMjE4LCAweDkwZTc0YjY3LCAweGE5NjE3Y2JmLAorCTB4Y2E0YmQyOWIsIDB4MjNiN2I1YjEsIDB4ZTlhMjViMWYsIDB4ZWIxZmMwYmUsIDB4YmRmMTUxOWYsIDB4ODM1ZGYyYTgsCisJMHg3ODNhZTFhZiwgMHhiZDM0NjQ1NCwgMHhkMmQ5ZjI5MywgMHg3YThmYjQyNSwgMHhhNTE1Njk2MSwgMHgwZTMyZGU5MiwKKwkweDQ2YWVjNzc3LCAweGZhYjNlZWZhLCAweDlmYmMwNmNjLCAweGI0NjQ0NmZiLCAweDkwYjYwM2IwLCAweGRlZWNlZDc0LAorCTB4YjlkNzljYjEsIDB4NGFmYTcwMWYsIDB4OWQ2ZGNmYjgsIDB4NmFmMzg1MTksIDB4NjFiNjNlN2MsIDB4MjIzNWQyMjQsCisJMHg1ZjdlOGFkYSwgMHg3MjQ3MzhhOSwgMHhhYmY3M2Q2YSwgMHg3ZmEzOThjZiwgMHgzZGY0MGY5MywgMHgwMjRhNjFiMywKKwkweGJiMzczN2JlLCAweDU4NjlkZWYxLCAweGIxNDdiMjVlLCAweGIxYzA3YWUyLCAweGFlMTQ1MjY3LCAweGI3ZDUzZWRiLAorCTB4YThmZGUxNDQsIDB4N2JjYmQ3NGYsIDB4M2JmYTVlNTUsIDB4ZDhmMmEzNTQsIDB4Y2EzZjZjMTQsIDB4MGNmNjY3YTcsCisJMHg3YzhkNzViZSwgMHg5ZTgyZjIzMiwgMHg4NzllYmZlZSwgMHg1YzkzOGE3MiwgMHgwOTM4YTcwYiwgMHhiOWUyYzRmYywKKwkweGYzYWZkOTkxLCAweDNhZmI0YWY4LCAweDZlZjNhYzU3LCAweDM0N2VmMzE3LCAweDMxZjcyNmRkLCAweDA0NzczY2E4LAorCTB4NjFiZDNmMmYsIDB4ZWZlYzQ0ZTcsIDB4MTU4MzY2ZWMsIDB4YjM2Y2ZlZTEsIDB4MDc5ZmZhODEsIDB4YzAxZDMzZWIsCisJMHg1ZjJiNjY3YiwgMHhkNzFlNjBmNywgMHhmMmI3NjdjYiwgMHgzYWJjY2RmNSwgMHg1ZjI5YmViZSwgMHhmYmYyNzA2MCwKKwkweGNjN2U1YWEyLCAweGVmNDc2ODBkLCAweDVlZjI3NGZiLCAweDlmMjczY2M4LCAweDk3YjAzY2RmLCAweGJlNjBkZjM4LAorCTB4NzQ3NTYxOGQsIDB4OWU5YmVjOGYsIDB4ZGJlNjBkMTcsIDB4ODU1ZjkyZjksIDB4ZDdlNzY4N2UsIDB4ZTA0NGY4Y2UsCisJMHhmOTFkZTUxMywgMHhiY2MzZjI1NSwgMHhkZWRmN2NmNSwgMHgwNzM4Mzc1NiwgMHg0N2YyNGVmOSwgMHhkNTU5M2JmMCwKKwkweDU3ZGZjNjQ2LCAweDdiZDM4NWQ0LCAweGVkMjI5M2I4LCAweDUzMGZiNDA2LCAweDIwYzY1YWUyLCAweGU3NGUzZTVhLAorCTB4YWI5YTgwN2UsIDB4MzdiZGUyNzMsIDB4ZjkwYTZkNTYsIDB4NzQ4YWNlY2UsIDB4NzQ0NTU3ZWUsIDB4ZGVlZmM0NjUsCisJMHhjZjNmMmI3NCwgMHhjOTdmZWUyOSwgMHg4NjkyMjYxNCwgMHg4NDUyN2I3NiwgMHgzNDNiMGJlZCwgMHhhZWZkM2E3OSwKKwkweGNmYzBmNDdiLCAweDNkYjc2ZTkzLCAweGQ4YzFkZGRhLCAweGVlMGJkMzJmLCAweDI2N2NjM2QxLCAweDc3NzZkYTY1LAorCTB4YmZmM2ZjODMsIDB4YjdmM2MwOWEsIDB4MjAxYTg2ZDksIDB4Nzg5OTRjYmYsIDB4ZDdjODE4Y2YsIDB4NGE5ZjNiYTcsCisJMHhlY2U3MTgwZiwgMHgzODY5MmU5NiwgMHgxOWZmMjgzZiwgMHhiYmM1ZDc5NiwgMHhhNTY5OGU3ZiwgMHg0OTc2MGZiOCwKKwkweDI0YjQxZDY5LCAweGZkZmVkZmMzLCAweDdmYTM5NjNkLCAweDJkZjNmYmI0LCAweDE4ZWU5NjA2LCAweDdmMDk3OTgwLAorCTB4ZGQyNWI0ZTgsIDB4ZjhmNGFiZjksIDB4OGNjNWU1OGUsIDB4ZjVlNzRlM2QsIDB4MGUxZWZjM2MsIDB4MDljY2I4ZmMsCisJMHhmMzhhNGY3OCwgMHg5N2JjYjE1YiwgMHgyZjc0MTM1MywgMHg5ZmVmYzFjNywgMHhmMjUyZmJjOSwgMHhmZjVmNTQzZSwKKwkweGI3MGRiMjdkLCAweDkyZWM5ZjcyLCAweDJhMWRmZjgxLCAweDBmYmRhOWM1LCAweDg5ZmMzNGE2LCAweGY2YTlmOWRlLAorCTB4YTIzMDk2YjAsIDB4NGQ5ZWY2ODMsIDB4Nzc1M2JlMzksIDB4YTIwYmRkMWIsIDB4NmY0Yzg3ZmIsIDB4NTczMzdkMjcsCisJMHhhYzY4M2JmYSwgMHgyOWRmZjk4NywgMHhmY2ZjODk2MCwgMHgxZjgyYTNjMSwgMHgzZDY1MmY0ZiwgMHg5ZmU4ODA3YSwKKwkweGNhMzliNzdmLCAweDk4NWM3MDBlLCAweGZhODVlYmU4LCAweGZkZGMzMjIwLCAweGU5ZDdjNDI3LCAweDBiYTlkNTBkLAorCTB4YWExZWYwZTMsIDB4ZWQwZjkxYzksIDB4N2RmOTc4Y2YsIDB4YjdlMTMyY2UsIDB4NDJmMWNkYjIsIDB4M2JiZWE4MmYsCisJMHg0NjUzNWRhMSwgMHg4NzY4NGRkZiwgMHg3NTdjMTdkZSwgMHhmZTk3YzMyMSwgMHgxOTJiZDQyMywgMHhlZDA0OWQ3YywKKwkweGRlNWQzY2U4LCAweGIxZTJiYmYyLCAweDRmZWQ4NWRkLCAweDcwMGQ5OGY0LCAweGJjMDYwMDliLCAweGZhMWUzNWE3LAorCTB4ZjdhMzYxMWMsIDB4ZmI0YTk4YWEsIDB4N2VmZTVlY2YsIDB4YTI3OTllOTIsIDB4ZDVlZWY4NmMsIDB4M2VlMmU5MzMsCisJMHg5NDEzZGQxMSwgMHhlZmY4OTI3NCwgMHgxYTE4MTc0MCwgMHg5OTlkNTlmZCwgMHhiZWVlMTAxOSwgMHhmZGZkMDM2YywKKwkweGY5MWY0OTJmLCAweGRkYzJlMmNlLCAweDc3NDJmZTNjLCAweGUzMWU0NTI0LCAweGUyY2RhNzQ4LCAweGIwNzU5ZmVmLAorCTB4YmY5MTZmOGIsIDB4ZDFlOTYyMGEsIDB4MzMwZDlmZTgsIDB4MTFjOWRiNDMsIDB4ZjVkODhkMWIsIDB4ZmYyZjZkNzcsCisJMHg5MmZjMmU5ZCwgMHhlMDcwNmNjMSwgMHhhMmE1OTIzYiwgMHhkMGI1NThjZCwgMHgyZDViZWY4ZSwgMHg3YmQzMzc4YywKKwkweGU4NWYwYjI1LCAweDk2YzFmYzRlLCAweGI2MDU5MGZjLCAweDg5NjIxYjYzLCAweGE4NjY1NjVmLCAweGY1YjlmZjg0LAorCTB4MmExZGRlOGMsIDB4ZjNhNjRmYTgsIDB4MzZmNWY5OTQsIDB4MTJkYWEzNGEsIDB4NmZlY2ZjYTksIDB4N2FlMmM5ZGUsCisJMHhlMGE3ZDM4OSwgMHhhNjhjYmE3ZiwgMHhkM2ZmNGI3MywgMHhkOWQ2NTI5YiwgMHg2NjkxYTc3YiwgMHhmMGJiY2ZiYSwKKwkweDBiNmJiNzIwLCAweGM3YmZjYWE3LCAweGJiYWZlZmMyLCAweGM4YWUzODA0LCAweGI5MGI4YTFhLCAweGU3NTNkYzNhLAorCTB4ZjBiYTU3ZWYsIDB4ZTc3ZTAwYmUsIDB4Njc3ZDUwMzQsIDB4ZmM0YTU3ZWYsIDB4ODJkZDA0OWEsIDB4N2E5Y2IzZGYsCisJMHhkZTkxMzMzMCwgMHg1OWVmMTQ3ZiwgMHg5YWVkMTc0ZSwgMHhjZWIzYmRjNSwgMHg0ZmJjYjVkZSwgMHg2YTIyN2JiNCwKKwkweGRkZjIxMzVjLCAweGM4Njk2Nzc0LCAweDllZjUyZDc3LCAweGNmZmEwNzMwLCAweDdhNDhkNDg2LCAweDM3M2VlMTQ3LAorCTB4ZjU5YTk3ZjgsIDB4ZjExZThiNGMsIDB4YmY5YjJkMzAsIDB4YmE3NTM5NzMsIDB4ZmQ5MGRlYjYsIDB4NDM3M2U5MzksCisJMHg5Mjc3ODc3NiwgMHg0ZDhmYTgwYywgMHhlY2ZiNmQyZSwgMHhmNTBlYzJhZSwgMHhmNmJmN2Q2NSwgMHgyMzU0ZDE1ZCwKKwkweGJlM2Q0ZmQ5LCAweDY5ZjkwYjNiLCAweGY0NTE1ZGUyLCAweGJmZmZkMTBmLCAweGZmMTBiNGVjLCAweGI4M2JjNDliLAorCTB4MTEyYjJjY2QsIDB4YmVhZGMyZjUsIDB4ZGJmZmZiMjcsIDB4ZWZjMWIxZmIsIDB4MDNiZjA2YzQsIDB4NDJlYjdmZGIsCisJMHhkZDYwN2U0ZCwgMHg2ZmVkMzUwZiwgMHhhOWFlNWZhYiwgMHhhZDViZWMxZiwgMHhmYTZjY2ZhOSwgMHhiNDNmMjY5OSwKKwkweGZiNGQzOWY5LCAweDY5MzY0N2UxLCAweGJjYjY0N2VhLCAweGZkYmZhOWE0LCAweGZlNGQwZWNjLCAweDY4M2ZkNjhlLAorCTB4YjZkOWRmZGEsIDB4NjFjZjkzNTcsIDB4ZTdkYTY4ZWYsIDB4ZTRkMDNmOWEsIDB4NTdmZjVhYzcsIDB4YzRhZWZlZDMsCisJMHhmMWZhOWExMywgMHhmYTlhZjNmNiwgMHg2OGFlN2QwOSwgMHgyZjhlMDVmMiwgMHgzNzNmZWQzNSwgMHg0NTc3NTdiYSwKKwkweDBjZWEyMmJmLCAweDQzM2FhZGYxLCAweGY5NDRmODYxLCAweDY2MjlhNmU1LCAweGJhNmIwN2Q0LCAweGY4MjQ3ZDBhLAorCTB4ZDNiMGI5NmYsIDB4N2JhMzA3YWMsIDB4NmNkNTYzYWMsIDB4M2Q1ZmYxMWYsIDB4YzFhMGJiZmYsIDB4ZGU3ZjRmNzYsCisJMHgxZmY4YzRlNSwgMHg2YmRmOGQ3YiwgMHg1MjdmMDY4YiwgMHg4YzdlMzAxZiwgMHhmZjAyY2NkMywgMHg5ZTZjNWRlZSwKKwkweDc3OGY5MzU1LCAweDc3ZGE2YTI1LCAweGQ0ZDc2ZTk5LCAweDY4ZmJiOTI3LCAweDM4ZTY1M2VhLCAweGFhYjRmOTM0LAorCTB4NWRmNjlhMTEsIDB4ZjkzNTM4OTcsIDB4YTY5ZTRmMGMsIDB4OTcxYWY3N2QsIDB4NzZiM2RmMjYsIDB4ZWY3ZGE2YmEsCisJMHg3ZDRkNmVmNSwgMHg0ZDFjZWY1ZiwgMHg1NWFkZmY3ZCwgMHhiYWMwZmM5YSwgMHhiN2Y2OWEyNSwgMHhmNTM0N2JkNSwKKwkweDlhMzU3ZDgzLCAweDVhYTZjY2ZhLCAweGYzNjg3ZTRkLCAweGUxZmI0ZDdhLCAweGZhOWFiYzQ3LCAweDM1NWIyZDkxLAorCTB4YTk5ZmI3ZjUsIDB4NjhlZmU0ZDMsIDB4YmZiNGQ3YWQsIDB4YzlhN2NkYjMsIDB4OWE4M2IwZTcsIDB4ZjdlNmI5ZjYsCisJMHhkNmIxZjkzNSwgMHhlZmVkMzQ0ZiwgMHhhOWE2M2M0YSwgMHhhYjNmNmYxZiwgMHhjZTdlOTdhOSwgMHg2YjlmM2U4NCwKKwkweDUzZGY4NWNiLCAweGU2OTdmOGUwLCAweDZlZjdmNmZiLCAweDFmNzQyODc3LCAweDZlZDc1Y2VhLCAweDk2YzU3ZGYyLAorCTB4MjRmZDE1MzAsIDB4NmM5OWM1MTcsIDB4ZjUxMTEwNzgsIDB4YjcyN2RlMTUsIDB4ODUzOWYzZjEsIDB4MjM4YWFmMTQsCisJMHg5NDRjODg3ZiwgMHg4MTBiY2YxZCwgMHhhYjg1MTBkZiwgMHhmNDBjOGNiNiwgMHhmZWZjMjNhYiwgMHhjY2Y1ZWE1YiwKKwkweGRhZGZmNzliLCAweGQ1ZGNmZjg0LCAweGYyODhiZWVlLCAweGZiNmVhZjMxLCAweDk4OWY3YTM4LCAweDFjMjI1Njc5LAorCTB4NzdiZmZkZjIsIDB4OTU2ZGRlODMsIDB4MTlmMzc4ZTksIDB4MTdmMDBmYTYsIDB4YTZkNTg2MGYsIDB4Mzg5YWY5MGUsCisJMHgwNWYzNzhjMSwgMHhiNmMxZWY4NiwgMHgyMmUyMmJmNywgMHgxN2JkYzdmOCwgMHgxNmJmZjQwNiwgMHhmN2Y4MTdkNiwKKwkweDlhOTc2YjIzLCAweGZmYzc2ZmU5LCAweGYyOTVhOTZjLCAweDUyMjY5NmViLCAweDNhMDBmZmZlLCAweDAwNDdiZjI5LAorCTB4MDAwMDQ3YmYsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDU1NDc4MGIsIDB4ZWVkZDcwOTYsCisJMHg5ZDI0OGZkYiwgMHg3Nzc1NzlkMCwgMHg0OTNjZGM5ZSwgMHhmMDlkMDg0OCwgMHgzYTNlMDBkOCwgMHhjMDQwNjAyMSwKKwkweDQ5MDQzNWU2LCAweDQxYThjMWE0LCAweGY4ODFiYTQzLCAweGJiNzU3NDRmLCAweGIyMDIxMDMxLCAweDEwZDE5MWIzLAorCTB4MDE4NmMxOTUsIDB4MDk5ZDE5NjQsIDB4MDlkMWEzMmUsIDB4ZTA5YWYwOWEsIDB4MWM2MDRjM2EsIDB4MzcxOWQ5YzUsCisJMHg4ZWUyYTNhMCwgMHhjZmUzMWUxMCwgMHg3ZmMzOGZlZSwgMHg5MzdiYTljZSwgMHgzODBlOWRiZSwgMHhmN2ZmM2FmZSwKKwkweGI0ZmJmYTNmLCAweGFiNzU1NTM4LCAweDczOWQ1NTRlLCAweDJhYWEzY2VhLCAweDg5ODk1ZWFkLCAweGRlNmQ2MzIyLAorCTB4ZjM5ZjRhMWMsIDB4Yzk5ODk5ZGEsIDB4MzE2ZjM2ZDgsIDB4MGViZGRiYzEsIDB4NzJkZWZkODIsIDB4OWQ3YTc3NGEsCisJMHg1YmNiYmY5NCwgMHhhZjFlZjA0MSwgMHhkZWJkZDI4YiwgMHg3OWY3NGExYSwgMHg5MmZlNTQzZCwgMHg5ZmUwODFiNywKKwkweGI2OTQ3ZDdhLCAweGZmMjk5YjdiLCAweGMxMGI2ZjE1LCAweDA0NmRiYzA3LCAweDUzZjVlYWJmLCAweDRiZGRlMWRhLAorCTB4NzZkZTFiZTksIDB4NzZmNGVmMmEsIDB4YjdhNmZjMTAsIDB4NmYyZWUwOGIsIDB4YmM4N2MxMGYsIDB4ZjExZjA0YmQsCisJMHg5OGY4MjY5ZSwgMHgxZWQyOGZiNywgMHhiZTk0NjdlZiwgMHhmMmE3ZWRlZCwgMHgwOTU3YmM3NywgMHhkYmJmOGViZSwKKwkweGNkMmFmYzE5LCAweDI2MzFlNDlmLCAweDdhZTY5NzMwLCAweGM5Y2NjMjFlLCAweDAwZjYzMjI2LCAweGZmODI0YmZlLAorCTB4Y2M4ODQ2ZTIsIDB4OGNmZGQ4YzIsIDB4YjBkNzNlZmYsIDB4OTQxMzc2OWEsIDB4M2ZmMmZlNzcsIDB4NzRjNjAyODUsCisJMHgxZjhkOGNhNSwgMHhmNjYyNjkwZiwgMHhjNjM0YzZjZSwgMHhlNjc1YjAyNiwgMHhkMzE4NzI0ZiwgMHg2M2Q3NTc0MCwKKwkweDRlMDlmYjA3LCAweGQ2MTkxMzE5LCAweDJkNzVkZmMzLCAweDU4YzdkZmZlLCAweDk0YmZmYzNjLCAweDgzNGM3OGU1LAorCTB4MTQwOTUzNjksIDB4NTViZWZiNDIsIDB4MWE3NzdmODIsIDB4M2UyMGQ3NTUsIDB4YmYxYzhkYWIsIDB4OTUxMzVhNjksCisJMHhmODJjM2U1NywgMHg1NTYzMDIwZCwgMHg4YmU5ZjMyMiwgMHg1ODdkZmIxOCwgMHhjMTFiMDE1NCwgMHgyZThmMjVkOCwKKwkweDIxNzJjNDQ3LCAweDA0ODMwZWRjLCAweDQ0M2E4ZmY4LCAweDJjNWQ3ZTBlLCAweDlkYTViMThlLCAweGQyOWIxZDg2LAorCTB4ODRhYWYxMDYsIDB4ZmRmMDM1ZWYsIDB4MGMxYTU2MmIsIDB4M2EzZDY0YWIsIDB4MWRmMjAzYzQsIDB4OWVjNjE4ZGEsCisJMHg0YmE2YjhiNywgMHg4YTYwZmY5MCwgMHhmNjg3YTdjNiwgMHhlZDlmYzk5OSwgMHgyZGVjNjQ4YywgMHhlNjA2NmI4YiwKKwkweDc3ZGNmMjVmLCAweGMwN2YxYjBjLCAweDdlYzZjZjZjLCAweGUyYmExYjY2LCAweGZkZmY0MTE3LCAweDlkZjZiNWM3LAorCTB4ZTFmM2YwZDIsIDB4NmM2NzI5NmUsIDB4ZGZjYTBkZGMsIDB4MDJlYzk3M2MsIDB4YTJmZmNhM2MsIDB4OWZmY2UxNzUsCisJMHhmODU2NDVkMCwgMHg0OTJmMDFmMywgMHgxYTRhNzhlMCwgMHhlYWRiM2E1NSwgMHg3Y2Y4ODI1YSwgMHg0N2I5ZTkxOSwKKwkweGU1Zjg1MzAzLCAweGFjZjZhYjZkLCAweGFlNTUyMTgxLCAweDgyZTExYWNhLCAweDI1ODJlZWVmLCAweGNkOGMxOTYzLAorCTB4NDE4ZTkyNjUsIDB4MzhlNjdjZjksIDB4MmQ0ZDA2OWEsIDB4MTc4MjJlNjQsIDB4NmZhNTFmMzEsIDB4YjFhYWJiYzUsCisJMHg0ZmNjYzU5ZCwgMHgyMWIyNmJiMCwgMHg4MmI4ZDQzNSwgMHg3OGNiNzJmMSwgMHg5NDdjNjViOSwgMHhhYmFiNzFmNCwKKwkweDIwZTVlMzhlLCAweGJhNGM0ZWJjLCAweGE1YzcxYjIzLCAweDU1OTZmNWUwLCAweDU4NzM3YWEyLCAweGVmYzQ3NmZmLAorCTB4M2YxNzgzY2IsIDB4ZDI4NjMyMTEsIDB4MTc0MDc3YzcsIDB4ZWIxZTY4MjYsIDB4NzNhYzNkMzEsIDB4ZjdkMThlYTMsCisJMHg3ZTA4OGY4ZCwgMHgyZTg1NmJhNCwgMHhiNzkxOTkyYSwgMHgwYmU0MThmYiwgMHhmNDAyNzQ4MSwgMHhkMmZjODQ1MSwKKwkweDkyMzczYTlmLCAweDA5NDllNGU4LCAweDkyNzA3YzFhLCAweDBiMWZhN2Q2LCAweGIzZjhkNGUzLCAweDg3ZDEyZDA1LAorCTB4MWVmYzAwNWUsIDB4NDhmYTAzODgsIDB4ZWEwZTllMWYsIDB4ZTAwZDIxOWEsIDB4NjdhZmEwMWYsIDB4YWZmM2JkYjAsCisJMHhjZTBlNWRmZiwgMHg0OWNkZmI5NywgMHhhMzU3Y2UxMiwgMHhlODAxZDYwNiwgMHhkNmI2ZjdkOCwgMHg5OTkyNWJiZSwKKwkweDk0ZWQ2MDE0LCAweDZiYTQ3ZTMxLCAweDczZWRkYTI2LCAweGIxN2FlMGM3LCAweGRmYTg0ZWE1LCAweGZiMGQ2NWFkLAorCTB4ZmJmNjg3ZjMsIDB4YjQxN2FlMmEsIDB4MmJhNmMyN2YsIDB4OWNiYjUzZjcsIDB4OWZmMjk1Y2YsIDB4NjNjNWZhZTIsCisJMHg1ZWFkZWJjYSwgMHgxNmFkNjlmNSwgMHhlODcxM2ZmMCwgMHgxMzFhNWU5YywgMHg2ZjBkMWM2MiwgMHhlMDA2NjZlNywKKwkweDMzMzhlZWVmLCAweGU0NDI2MWRkLCAweDQ1ZTdmMmZhLCAweDk0OWZlNjBlLCAweDFmYTE0NGU5LCAweGI1ZDIzZWFkLAorCTB4MTc4ODE0YzMsIDB4ZjllODE3ZWYsIDB4ZDEzNzQ0ZTcsIDB4NDQxOWNmNDAsIDB4ZTBmODlmY2YsIDB4NjkwNjM5ZDMsCisJMHhmYjQ4MjJjNCwgMHgyMGJhNmE2MCwgMHhkNjYwYmQ3NSwgMHg2NzJjZGQyMywgMHg5OWFiNGE3NiwgMHg2MDA3ZDI5MywKKwkweDlkN2U5MWY5LCAweDM4ZjRhN2JlLCAweDc2YjIwZmVmLCAweGJlMmJhZmNhLCAweDdjZjQ4MmQ3LCAweDhhOTVjNmJmLAorCTB4YTVlYjJkNzAsIDB4MmZlYjM3N2MsIDB4MmRmY2MxYjMsIDB4ZDQ3YjVlNmMsIDB4NmZjZjU4MDYsIDB4MDI1YTZhNzksCisJMHhmZjNjZWZjYywgMHhjZTk4YTNiMiwgMHhlMjdjMjVkZCwgMHg3YTNmODg5MywgMHhjMTNlYWYxMCwgMHhmYTExM2ViMywKKwkweDkyYTVmYmJmLCAweDNmOTA0OWY1LCAweDg1ZDdjYjQ3LCAweDE3NWYyYmZkLCAweDhmMDQ3ZTQ1LCAweDk3YTFmODFiLAorCTB4ZTM0MWNiOGYsIDB4YWI5NTQ2ZDIsIDB4MDlmMmExZjgsIDB4OWRhMDEwZTYsIDB4ZmYwNjgzZmUsIDB4ZmUwMGI0Y2UsCisJMHhkZmU4N2UyOCwgMHg4OThlNTA5MywgMHg3YWUwZjdmZCwgMHhjNDM0ZGZiYiwgMHgwODNmN2FlMCwgMHgyOWM3MWJlMiwKKwkweDgwNmIxODM4LCAweDJhZDY5MGZlLCAweDg4MmE4ODYzLCAweGUxNjIxZmRlLCAweGI5ZjdhYzc2LCAweGE3OWZkZjRjLAorCTB4Y2ZlZmEyMzAsIDB4NDA2MGU2MDUsIDB4YTY3NDE3YmYsIDB4NWFlNTAxNjYsIDB4MDQ1NmNiYWEsIDB4YmU2MGFjZjgsCisJMHg2ZWU1MDYyNiwgMHgzODA1NGJjZCwgMHhkNzI1MjM0ZiwgMHgxZmQ3NDRhNywgMHhhNjE1MzdiNSwgMHhhN2Y3ZmNhMSwKKwkweGY3ZmYyODBhLCAweDY5OGRlYzE5LCAweDVkODRmZGFhLCAweGUzMjE0MDhmLCAweDNmOWYzODYxLCAweDBlYzc3NmMwLAorCTB4M2UyODRiYzUsIDB4MTQ0MjlmZjYsIDB4ZjMzZDA2NjMsIDB4YmY4ODhiMTksIDB4ZWJlNDQ0ZDksIDB4NTdmMTNkNDQsCisJMHgwNjZkNGUyMywgMHgzYzk0ZTNmNiwgMHg5ZmVkYTFhNiwgMHhmOWVkZjE5MCwgMHhlZjc0NGI0YSwgMHgxNmVjZjE4MywKKwkweGY3YzNmNTQyLCAweDYwZjg0MzJiLCAweDJjM2YyNDNmLCAweGE3ZDFmYThjLCAweGZhNTYzZTcxLCAweDY0YmVhNjYzLAorCTB4NmE3NWQwMjcsIDB4ODY5NzRiODQsIDB4YzcxNmMxODIsIDB4Y2I5OThiZTUsIDB4NGZiNDllOTcsIDB4ZTY3ZDcxMzMsCisJMHhjOGE4ZGU0YywgMHhkZDhmNmE2NSwgMHgwOWQxZTVjNiwgMHhmODQzZTQ5ZCwgMHgxZDlhNDk0NCwgMHg5YzgwZDcyNCwKKwkweDk3ZjhhYmJkLCAweGJiOGYxMWE3LCAweDJkMmVhNjhjLCAweGRkMTZlY2E0LCAweDdkOTRmYTlmLCAweGZmNzA3ZDMwLAorCTB4N2ZkOTRiYmQsIDB4ZWZmYmUxNmYsIDB4ZWZiNTk5MWMsIDB4ZjFiYWJiMTIsIDB4M2FlY2M2N2IsIDB4ZmQ5NzJmYzQsCisJMHg2ZDhmOTk1ZSwgMHhmMjJhZGZiOCwgMHgwYjdlYzg3MSwgMHhmOWM1ZWIwMywgMHg4MzJiMjUxMywgMHhjN2MwYjU3NCwKKwkweGRjMjUzYWJmLCAweDM2YzQ3YzhmLCAweGY0ZjhkMmU3LCAweGZlMGNmY2IyLCAweDU4YzE1YWRlLCAweDEzYzY1MWE2LAorCTB4MTk3MDRiZmUsIDB4MjBjZTY2NTksIDB4NTY2MzU0OWMsIDB4OWIxZTI5YzEsIDB4MDZjOGZlYWEsIDB4ZTY5ZTU1NDksCisJMHg2Nzk1NTFjYiwgMHg3MDU1ZGIzNCwgMHhhYWIxNGI1NiwgMHg4NzM2YThmZSwgMHg5N2Y1Y2UwYSwgMHhlZGU3ZWFhYiwKKwkweDMxZTBhYTc1LCAweGZhYWExNWVkLCAweGFhNWMzYjYzLCAweDFhYWVjMmYyLCAweDFlYjhmOTU1LCAweGQwOWUwYThmLAorCTB4ZmZhYWEwZGIsIDB4YWE3ZGE3NzcsIDB4Y2Q3ZDQ5ZjIsIDB4OWYyOWYyYWEsIDB4NWJlMGE4YjUsIDB4ZjU1NGRiZmIsCisJMHg1N2VhYmY2ZiwgMHg3ZmIwOTc5NSwgMHgzNTRmOTU1NiwgMHhkM2MxNTdlZSwgMHhlYWFiYWZjYywgMHgxNmZiODBiZiwKKwkweGI2MWRjZmYwLCAweDBjZmU1NTZlLCAweGJiZWFiOGU5LCAweGFhNGU3MzNiLCAweDc1ZTQxN2UwLCAweDI3MGUyZGY2LAorCTB4ZTcyZDY4YmUsIDB4ZmI2Y2QxZmIsIDB4NTg3NmFhMDcsIDB4ZmViZTY4ZTcsIDB4N2I2ZjNjNjEsIDB4NTEwYjFmY2YsCisJMHhmNGQ3NmU0ZSwgMHg0YWRkMjFhNywgMHhmMjIyNzM1YSwgMHhkY2YxNjY3MSwgMHgyYzY2NDA0MywgMHgxNGFhYjFkYiwKKwkweGY5NGU1YmM1LCAweDFkMzA4NzUzLCAweDhhNWZkY2VkLCAweDcxNWY5MjZjLCAweDA1YTYxMGYyLCAweGQwYTU4YmFlLAorCTB4NDRkN2IzMWMsIDB4YzhiNGM2MWYsIDB4OGFkNTM4NTMsIDB4M2RjYzM0YTgsIDB4ZGY0NGU5OGMsIDB4NTcyOGE5YWEsCisJMHgzZjVjNzg1ZiwgMHgyYTI4ZjkxYSwgMHgwNzRmYTE0NiwgMHg4MjdkNjdkMSwgMHg3ZWI5Zjg4NiwgMHhmMjhmYzliMSwKKwkweDI0YzUzMmM3LCAweDk2MTM5MDMyLCAweGIxZDY1YTFmLCAweDlhOGI0YzAyLCAweDFhZjY2ZDMxLCAweGZhMGY1Zjk5LAorCTB4YmE1MTk3ODAsIDB4ZmU2NjZiYzksIDB4YWY2NzIwNmMsIDB4OTNmYWUwOGQsIDB4NDNhNzk1ZjcsIDB4NDRhYjIzM2IsCisJMHhlNjk5YWEzMywgMHg0ODI1OGY1MSwgMHhlNWY1YmVkMCwgMHg3NjVkOWM5NiwgMHhiMGVkZDZjNiwgMHg0MmU1ZDdjZiwKKwkweGM1OWUxOWZmLCAweDRlMDFhMjNiLCAweDMwMDU4ZTYzLCAweDIzOTgxNjdmLCAweDI1YjE5OTM2LCAweGZhNzZkZjNiLAorCTB4OTdjMjg3ZjIsIDB4MjQ0ZDlkMzMsIDB4NWNmNmM0MTcsIDB4NzY5NGZmZDQsIDB4NmU3ZTk2MzcsIDB4ZGYyMTk4ZDcsCisJMHgxMWU3NGJmNywgMHhmMWFkZjc5OCwgMHhjMjFkZjRlMSwgMHhhNzVmOTkyNSwgMHhiNjBiNDc1ZCwgMHhmNjllZjkwYiwKKwkweDRjZmM3YzEwLCAweDk3N2ZkZjFhLCAweDBhN2Q3M2E0LCAweDY2ZWI4NDg3LCAweGFjYzZjYmU1LCAweDgwOGNhN2EwLAorCTB4YTkzYWRjYjksIDB4ZjBlYTBjZTEsIDB4YTAyN2Q5YTIsIDB4ZTBkNzYyN2MsIDB4ODkyYjkwN2IsIDB4ZTA4MzI5NTgsCisJMHg0ZTAxYzNkYiwgMHg2YzYyNTg0MCwgMHhjN2ViOTY3ZiwgMHhjNWQ1YWZkOCwgMHhmYTAwZDlkOCwgMHhjMzUxYTg0OSwKKwkweGNmOWU2MTViLCAweGEzZTIwZTY2LCAweDg5ZjFhYTViLCAweDhmZGQwNjMwLCAweGY0M2I3NjlkLCAweGM2MGFhZGIzLAorCTB4M2Q1NmYwMGIsIDB4N2E5NDM3ZDcsIDB4ZjY4YzM0YTMsIDB4ZjhkMzJmZjcsIDB4Y2RhZWNlN2UsIDB4ZjQ5ZWEzYjcsCisJMHhlNzllM2NhNSwgMHgzZThiZmRiYywgMHhlYjdiNDRjZSwgMHgzNTg5YTUyYSwgMHhmMjA1YzExZSwgMHhiNGU5NWFjZCwKKwkweGFlOWVhMGZiLCAweDg0MjNlNjExLCAweDM0OGJmMmRlLCAweDFkZDdiZTkxLCAweGEwOTA0NDdlLCAweDEyNjlhN2RlLAorCTB4N2U5NTg5YzEsIDB4MGQ1Mjc3MWEsIDB4YmY4MDFiYjQsIDB4NjYwOWY0NGQsIDB4ZTYzZGI3YzgsIDB4OWIzZjEwMTMsCisJMHhmMDY3NjlkOSwgMHg4ODVhMzMxZCwgMHgzY2M4ZDdmZSwgMHhjYmY4NmI2MSwgMHgwZjQxOGZhMiwgMHg3NjlkNzlkMywKKwkweDEzYmJhN2FjLCAweDI3MWYzM2U4LCAweGI4NjY2M2Q0LCAweDQ3ZTNjOTRlLCAweGEzZWIxMGIwLCAweDBkM2U4NmE0LAorCTB4OWY0MGRjNzMsIDB4ZDQ3ZDRhOGYsIDB4ZGRjNWZiNDMsIDB4ZTgwYjI5MjYsIDB4YTZjNTg1ZmIsIDB4ZGEyMTFkOGEsCisJMHg5ZjllNTRmYiwgMHhmZWVhMzEwZCwgMHgxZjNlNWEyZCwgMHg2Y2JlZGM4YSwgMHhmMGE4ZWJlNiwgMHhhNjY4OWFmMSwKKwkweDUyNmJlMzkyLCAweDg0NmY1YmM2LCAweGM4Y2RiNWFmLCAweDZlZjgwMTVjLCAweGQwY2M3ZTg1LCAweDU1YWJlMWJlLAorCTB4ZTgzZjFjNjYsIDB4NGZlYTRlZDAsIDB4Yzc2NGYyZTQsIDB4NmVjODcyOGYsIDB4MjFjNzVlMGEsIDB4M2Y5NDA4ZjQsCisJMHhhM2U5MDhhMiwgMHg3YzA4ZGZjZiwgMHhkYmQyYTg2OCwgMHhmZWIyNmY1MSwgMHg3YjgwOTM0MywgMHgxMTZiMjI3MywKKwkweDUzNThiZTUwLCAweGRjNDQ3YWNhLCAweGFlNTc0NGQ3LCAweDc5M2U4NDMzLCAweGQ2NTRiYTMzLCAweDgzOWZkOTRmLAorCTB4M2Q3NzRiZDcsIDB4OWMxMmZkZTMsIDB4MzFkNTdmZWYsIDB4MWY1NmM3ZDQsIDB4MDU3MThmOGYsIDB4M2E0YzUzZDAsCisJMHhkNjYyY2JhNywgMHg5OGZlNDVhMiwgMHhiZDI5ZGFjYywgMHg3YTUyZjU4NSwgMHhkNGE3ZWIxYiwgMHhhNjIyY2NjMSwKKwkweDY5NGVjY2E1LCAweDNhNTI3MzE5LCAweDJkMjg3OTlkLCAweGNlOTQyZDY3LCAweGNlOTRlZDY0LCAweDgyOTRiZDYyLAorCTB4OTNhOTQzM2QsIDB4OWFlZWM5OTksIDB4YTYzN2ZiMDcsIDB4ZDI5Mzk4MGIsIDB4YTUwZjMxZWYsIDB4N2U5Y2U5OTksCisJMHhjMTBiNTgyYiwgMHg0YTc2YjM3NywgMHgyNGVmODAzYiwgMHg4YzAxZmEzZCwgMHg5YzgyNzY5NCwgMHg5MDRkZjRjMywKKwkweDc5NzY5ODczLCAweGEzNjUyNjI1LCAweGQyODcyMDFmLCAweGE1M2I1ZTIzLCAweDk0YzViY2M3LCAweDU0MWQ3OGY2LAorCTB4Mzk2ZjZkZWYsIDB4OWQ3OGVmYTUsIDB4NTZmMDllOTQsIDB4NzVlYmRhNTAsIDB4ZGU1M2JkNTEsIDB4ZjVkZjRhMWEsCisJMHhjZjdkMjg3YSwgMHg2OWU5NDBkYiwgMHhkZmQyOGZhZiwgMHgxZDI5OWI3OSwgMHhjNjdlMDdhNSwgMHgyYmU5Y2RmOSwKKwkweGY1M2U3ZDQ0LCAweDAyNDNiZDIzLCAweGU1OTFlY2Y5LCAweGU2ODc2MWQyLCAweGI4ZjFkYzk5LCAweDQwNjYxYTZlLAorCTB4MjM1YjI4M2EsIDB4NzM1OWZkMjAsIDB4YTQzZjBlMzQsIDB4MGI1NjcyOWIsIDB4ZTFiYTQyZjcsIDB4MGNkZmQ3MDQsCisJMHgwZmQyNDhkNiwgMHg4MmY1NmRhZCwgMHgwODc2ZWQwNCwgMHg1ODA4ZGE3ZCwgMHhhOWU5ZTljYiwgMHg5ZjIwOGQ3MywKKwkweGJhZDkzYTRiLCAweDE5YzIzYjA4LCAweGVlODExOTRmLCAweGZkM2NlODc2LCAweDY0YmNhMDNiLCAweDA4ZDczNGE3LAorCTB4YzhlNGQ2N2IsIDB4OGZiMWZmNTMsIDB4ZTkzZTU0YzMsIDB4MDMzNDZiMDgsIDB4ZmIzZDJiM2MsIDB4ZTM4MTM4YTksCisJMHg3YmVmYzI4MSwgMHhhZWU2NzMzYiwgMHgyNTNjNDRjZCwgMHgzNGM1ZjNjMiwgMHhiZjUxMmMzMCwgMHhmYTQ0YzQ3ZSwKKwkweGQ5ZGI2MTc1LCAweDkzYzAwZDQyLCAweDY4NDU0YzFhLCAweGViZDQwNjE3LCAweGFlMWZiYTQyLCAweGYyYjk3MDVlLAorCTB4OTY1NWI2ZGQsIDB4MGQ4NzljNDYsIDB4MGU1YTgwOWYsIDB4N2QxOWE5NTksIDB4ZDVmM2FiODUsIDB4NWViZTZhZWQsCisJMHg4MzdiNGNmZiwgMHgwOWViMDNmZSwgMHg3ZjZmNjgzNywgMHg3ZDMyYTM5NiwgMHgzYTdlZmZjMiwgMHhkZDZmYTYwZiwKKwkweDZiZjY4ZmY1LCAweDhlNjQwZmM4LCAweDU3NzRmZGMxLCAweGZkMzM5NzM0LCAweDA0ZWU5ZmEwLCAweGM4YzU3N2JjLAorCTB4MWE0Y2M2ZjAsIDB4NWM0M2NhMTcsIDB4ZDI5YjBkYjcsIDB4Nzc4MDNlZmQsIDB4MWY1NzM5ODUsIDB4ZDQ3ZmYyYzcsCisJMHhkMTQyNzdkOCwgMHhhNmQ3NzBhZSwgMHhjOTMzODI1YywgMHhjNjIxYjEzZiwgMHg4ZjkzMTM5MywgMHg5N2RmM2NmYSwKKwkweDBkMWY5MzVhLCAweGJmZjgwMjkzLCAweGFmY2I5ZDM5LCAweGU5NWNiN2FkLCAweDQ0NzY4MWRkLCAweGMxNjU4NmIzLAorCTB4OTc5YjNiNzcsIDB4NzY4MWNjNmYsIDB4ZjQxOWJjN2UsIDB4ZGM0NzgwMDcsIDB4MGIzMWJkNWEsIDB4NmEzN2QzY2EsCisJMHgxOTY1NmEyNiwgMHg3OGZjNzg4NywgMHg0ZDllZjU3MywgMHg4ZjI1NWZhOCwgMHg3Njg2Yzk4ZSwgMHg5OTc5NjQzMywKKwkweGI4NTdkYjFhLCAweDU1YmNlODA2LCAweDk1YTdiNmFmLCAweDdlNjQ5ZmY0LCAweGNlNjY4NmE5LCAweDk1NGQ2YzgyLAorCTB4M2ExZGY0ZWQsIDB4ZGZiODExNTYsIDB4ZWZjNjRjZmQsIDB4ZDUzYzU5NTcsIDB4NTdmZGNlZGQsIDB4ZmVlMTkxODYsCisJMHgyNWZjNjAyNywgMHhjM2JmYjkyMywgMHhmZTQ4Y2ViMiwgMHg3ZmYyNGIwZSwgMHhjYTAzYmM5ZCwgMHg3NjM0ZGIyZCwKKwkweDZiNDRlOTU0LCAweGVhMWQ1YWVkLCAweDNiNTk4YmZiLCAweDgxMGVlM2YyLCAweGUxNGJlZjdmLCAweDBhMjgyMTdhLAorCTB4ZWMwMzczZTksIDB4ZDNkZWFkZjIsIDB4ZmMwMzMyOGIsIDB4OWYwYWI2ODQsIDB4Yzk3YmY2ODAsIDB4MGZhMTVhYzgsCisJMHgwN2U0OWZmNywgMHgyZGZiYjQwNSwgMHgxNWMxMmUxNSwgMHg4NzgxZjY4OSwgMHhiOTY1Y2ZjYSwgMHhmODBlOTI3ZSwKKwkweGZiZTEyYWQ5LCAweGI5OTJmZDQwLCAweGExNWQ3MDEyLCAweGQyNzY4YWRmLCAweDYwNTE1OGYzLCAweGY4YjNhNzdmLAorCTB4M2IwN2FjM2MsIDB4NzVkNWY0OTksIDB4NzgyYmMyN2EsIDB4OTc2NTRlYmUsIDB4OTVmNmMwMWUsIDB4ZmYyZTBjNzUsCisJMHhhYmI3MDY3ZSwgMHg1ZDAxM2Q3NywgMHhlMjRjMWYyMCwgMHhkZDg5ZjM3NiwgMHhjZTNmYTQ4OSwgMHhhMDc3MGQ2OSwKKwkweGE5ZTI3NGZkLCAweDZmMDQ2NWQxLCAweDNkNDBlYzk5LCAweGM5ZWVjNGYyLCAweGIzOWQzMWQzLCAweDNiZDUyNjY1LAorCTB4YjQxZWIwMjEsIDB4Yjk2Y2U3ODcsIDB4ZDRmY2M0NWIsIDB4ZGIwYmMwMGMsIDB4N2EyN2EzM2IsIDB4NDFlNWIzOWMsCisJMHhjYjQ3ZmJmOSwgMHhlMzU4YmNiMCwgMHg5MWRhMDlmYiwgMHgyMmZiOGRjNSwgMHgxYzllNGVkMCwgMHhhNjEyNGFmOSwKKwkweGY1N2QzNDI3LCAweDVkZmZkMGRkLCAweGRjMmJmNjY2LCAweGUzMWI5ZDllLCAweGZlMWNiMWZlLCAweDc0YTlmNzMxLAorCTB4YmZkN2VhMWQsIDB4ZjVhNzRmNGIsIDB4YzQxY2NmOWMsIDB4ZWM4MzUwMDcsIDB4ZjZmNjViYmEsIDB4OGE0ZDA2MWUsCisJMHgzZmRlZDZkZCwgMHhlNjVjY2MxNSwgMHhjMTFmMzBlOCwgMHg1ZWNiYjRiNCwgMHhkNjU3ZDM4NiwgMHhlOTgyM2NlMywKKwkweDE5NGY1ZWY0LCAweGE3ZTUyZmFhLCAweGJhNjA4ZTViLCAweDNiZjVkNzI0LCAweGZmMTc5ZjljLCAweGJjYWY3YmUxLAorCTB4YzdjOGYwMDgsIDB4MDdhOGNkZWIsIDB4MzdkMTNlNjUsIDB4ZWJmOTI3NjMsIDB4MjFmOTBjNzQsIDB4NDVhNzkyNmIsCisJMHg3NDZjMDQ4YiwgMHg3ODdjYTBjNiwgMHg4MzUxNjlmNiwgMHhhZDIxYjlmYiwgMHhjMzYxMGMyNSwgMHhiNDFhZTk3ZCwKKwkweGI3NDU3NzBiLCAweGIzYjhkMGQ0LCAweGUzY2UxOWMyLCAweDIxMGZiMGRiLCAweDNiNDU2NDVkLCAweDgwOWY5MDYzLAorCTB4M2UxZDY5MmYsIDB4MTBkM2U5OTMsIDB4NjM0NzMxZWQsIDB4MWZjZjE4N2UsIDB4ZTFjZTE3YTgsIDB4NWFmNTAzZjMsCisJMHgyN2VhMDRjMiwgMHgxM2ZiMjA0NiwgMHhiZmRjMDZkNCwgMHhkZGZlZjI2ZCwgMHgzODA5M2NjNiwgMHhjZjQ4ZDYxZiwKKwkweDY0ZWJmNDBlLCAweDY3ZmU3MDk1LCAweGIwMmU5YzkxLCAweGZhNDRkMzdhLCAweDk2Y2Q5Yzg0LCAweGI4OWRjZjE2LAorCTB4ZTg5NzU2MGUsIDB4M2JhNDBiZWIsIDB4ZjQwNzA2ZDgsIDB4MTk4Mjc0OTEsIDB4MDU1YmQ3ZGEsIDB4MjE5YzgzMGUsCisJMHg3ZTg3ZjBiYywgMHg0MmM5OGIwYywgMHhiZjgyOGQ3YSwgMHgwYmRhMDJiNSwgMHgxYzcwMzNkMCwgMHhkZjgzNGNmMywKKwkweDliMTc3NDI5LCAweDQyMzVjN2MxLCAweDY1YWNiZmE2LCAweGRmMDUzZGJjLCAweDlmMmUwY2I4LCAweDgzNDk2ZjAxLAorCTB4N2M2NTY4ZjgsIDB4MDA5YTFjNjAsIDB4ZDFlYTAyN2MsIDB4NjZmMDA2ZjgsIDB4MDVkMjFiNzYsIDB4YTc4MTdhNDgsCisJMHhjNzAzMTI0YywgMHg4NDcxYWQ1ZiwgMHg3YTY0NWRhMSwgMHg0ZmU4ZmJmNSwgMHgwMjM5NDI4OSwgMHhmNzUzZmU3OCwKKwkweDY5ZjIyMzI0LCAweDMyNzIzOGYwLCAweDQ2ZGYwOGQyLCAweDZmNTE4N2QwLCAweGZjZTJlOTlmLCAweDExZTk1OGRiLAorCTB4MTg0MjNlYzgsIDB4M2EyYzlmYzcsIDB4MzU2ODFmZDAsIDB4MDE3NDE2YWQsIDB4ZjMyNmI1ZTMsIDB4YTU2NjdhN2QsCisJMHhjYWU1MWJhNywgMHgzYjA4ZTJjYywgMHhhYzlkZjdkMiwgMHhmMzk5OWQ3ZCwgMHhjMDRjOTFmNywgMHhmODFiMTQ2ZiwKKwkweDQxYzRkODk5LCAweDRmNDdmMGJkLCAweDk3MTI3YmJmLCAweDk3YjU5OTM0LCAweGY5ZmVlMmU0LCAweDcwYjNmZGY4LAorCTB4M2EzZWI2ZmQsIDB4NGZmMTA3YjMsIDB4M2JhYTc5Y2MsIDB4NWU3NDFhMDYsIDB4MTk3ZGQ3OTQsIDB4NmNhNGViZjcsCisJMHgxYzBlM2YxMywgMHhlMDA3OTI0NywgMHg4ZDQ0YmY0MCwgMHg0MWU4MWNiYSwgMHg2NTc0MmIwNSwgMHg3MWEyMWExMywKKwkweGU0NDRkMWJmLCAweDdhODE5Y2NmLCAweGU0ODY5NDRhLCAweDYxMjljODNiLCAweDMzZmQ0ODQxLCAweGY5ZTRhZTg4LAorCTB4YWVlN2Q2NTcsIDB4Mzc1YTRjOGMsIDB4MDNhZjg5YWIsIDB4MTcxYmI3ZWIsIDB4NTU4M2NhNDYsIDB4NmRmYTA5ZDYsCisJMHgwMTFmMzYwNCwgMHhhNjU4ZGY3NCwgMHhkNzY4MGJmNSwgMHhhYzI4ZmQ2MiwgMHg5MTlkZTJjZiwgMHg4NzY5ZDc0MywKKwkweDAzMzk5YTRlLCAweDFhYzNmNGU1LCAweDc0MzY2ZWYzLCAweDdlZGM4MTVlLCAweGMzZWQ3YTRiLCAweGY5MGU1NDcxLAorCTB4N2RmYzkxYTIsIDB4NDM2YWY4MDEsIDB4YjhmNWVhYzEsIDB4YWM2ZGZkNTksIDB4YjQ4Y2VlNmIsIDB4Yzk4OWY5YTEsCisJMHgzZWUyNjYwYiwgMHg2OGNiNTg5YiwgMHg0N2NiODNmZCwgMHg1NzVlYTYzZCwgMHhhM2M3MzdiMiwgMHhiYmY5ODhmZiwKKwkweGNlN2FjMWJlLCAweDg2NTVkZTRjLCAweGJhZjA3Y2ZhLCAweDFhOTc3NDJhLCAweDEwNWY3YTFiLCAweGE2NWYzOTMzLAorCTB4OTU0ZmQ4NDYsIDB4OTIyMTVlOTMsIDB4MTE0Y2UwOWUsIDB4YTJlZDAzZTMsIDB4MWY3YzE5MGQsIDB4MTMzNWZkYmEsCisJMHgyM2VjNDNlZCwgMHg1Y2I3MWZhMywgMHg5M2VmNTc3YiwgMHhhNTBlYjBiOSwgMHhhZTY4MzQ1NywgMHgxY2VmYTNiMCwKKwkweDQ4NGNlMWZhLCAweGRkZWFmZGE3LCAweGY1MGFmZmQ1LCAweDFhNjU3ZGE2LCAweGIwNmZmOTg3LCAweDEwZTgxOWJlLAorCTB4OWQ4MGY1ZjEsIDB4MmZkYWYwMDEsIDB4YTNhMGI0ZjYsIDB4ZDk5MmIxYTQsIDB4ZmE1NWRmNzEsIDB4ZjNmNzIzZDksCisJMHg0OWRmOWQwYiwgMHg2NDU3MzVmMiwgMHg4MjBlNDkzYiwgMHgyZjQwMWU2NSwgMHg3ZTg5NjkwMCwgMHg1NjczMTk3OCwKKwkweDY4ZGQ5MGI2LCAweDU5MDdjY2NkLCAweGY2YmQ2ZThkLCAweGZlNWZiNDI1LCAweGVmZDBjZjQ5LCAweGQyNDJhZjM4LAorCTB4ZTdmOGMwOTUsIDB4NjViYTRhNTUsIDB4NTkxN2M3ZTgsIDB4ZjMxMWVhMzksIDB4M2Y5NGVjMmIsIDB4ZjNjZWQyYmYsCisJMHg0MTdmM2M4ZCwgMHgxN2YyODM4NSwgMHhiZTc4M2E1NCwgMHgzZTYxZjIwOSwgMHg3YmY4NTYxNiwgMHg0MmVlZDBiZCwKKwkweDQxYTQ4YzUzLCAweDkzYTU3ODNmLCAweDUwMzU1Zjk3LCAweDBmNjAzYmY5LCAweDg3YzkwMjY0LCAweGRlNDlmOTg3LAorCTB4ZTFhNjdjYjcsIDB4Yjg0ZjEyZjEsIDB4MGQ1YzAwNWYsIDB4MTIzZDQ1OTEsIDB4MWE3ZGRmY2UsIDB4ODYyNDE2N2IsCisJMHgwMTk5OTExNCwgMHhlOWMyYjY3ZSwgMHhmM2Y5NDJkNywgMHgxMzgwOWZjYywgMHg2YWY1NDZmOSwgMHhiZmU0MzY2NywKKwkweDcxOWEyYzkxLCAweGMwMzg2ZjdjLCAweGFiZjljNjZlLCAweGU5ZGU2OTE1LCAweDM1MWJmMDA3LCAweGQ4Y2YxNGM5LAorCTB4N2RhZGZiMjEsIDB4NjdlNDhjMmIsIDB4ZmM4NzVkMDUsIDB4YTI0NTZjYWMsIDB4ZjJmMGM3YWMsIDB4N2VjZGNiNmQsCisJMHgwZTQwYzdkNCwgMHhkZmY2M2FkMiwgMHgwMDFlOTIyNywgMHgxY2VkZjBmMiwgMHhjYTVlOGJkNCwgMHg0ODQ5ODdiNCwKKwkweGIzN2U2YWI3LCAweGExMmYyZjU0LCAweDE5OTkyYWY2LCAweDk1NTlmMmVkLCAweDk3YzZiZGJjLCAweGVhMGQ3ZTM0LAorCTB4MzM3OWE2NTUsIDB4ZjcxYTBlOTEsIDB4YWZkYTNiMzIsIDB4MmE5ZjU2Y2YsIDB4OWI3ODQ1OGIsIDB4ODdlNWNlZGQsCisJMHg1NjM0MmU1YSwgMHhlMTJlMzk2ZiwgMHg3MzFhM2M3OCwgMHg3ZWU3ZDUxNiwgMHhlOTRmNDZhZCwgMHhjODMwYWQyZSwKKwkweGQyZGViNGNmLCAweDJhMThmY2EwLCAweGQ4M2RlYzZmLCAweGE5NTU0MjRlLCAweGIzZDQxMzdkLCAweDhmZDEzOGMwLAorCTB4ZjNjZjRkYmQsIDB4MTQ4OGY3N2QsIDB4OGI1NGIwNjcsIDB4NDE4MmU2NWQsIDB4YTc5MTRlZmUsIDB4MTg3YzgyZDAsCisJMHhjNTQ1ZjI0NSwgMHg1MjVmYTM1ZiwgMHhmOTkyM2ZjMywgMHhjNDVkZjgxNCwgMHgzMTc2Zjk3MSwgMHg1ZDk1YzkzYiwKKwkweDI3MjA3YWVhLCAweDUyYWYyODM1LCAweDY3ZjlkNGRhLCAweDJmYzUwNGIyLCAweGUwODc5YWE1LCAweGI4N2FiNjc5LAorCTB4ZTcxZTBiZGMsIDB4YzJiYWI4ZTAsIDB4MzRiOGQxNDYsIDB4ZDcyODVjN2MsIDB4NzRkNzNmMjAsIDB4MmI3M2YyODgsCisJMHhhMTI0YmI0NSwgMHg4NTNmNmJiYywgMHg5MmY1MWZlMywgMHg5ZTAwYmFjOCwgMHgxMzM0NWQ1NSwgMHg2NmQ2NjllOSwKKwkweDY2NDNiOTBkLCAweDBiOTI1ZWIzLCAweGUyYjcxYjM3LCAweDY3MWUwOGRmLCAweDY0MzZmOGYwLCAweDFjZGY2OTY4LAorCTB4MWJkNzA3ZDAsIDB4N2Q2YzFmNDksIDB4YjhjMWE0YzQsIDB4ZTE1YmU4MjIsIDB4OTczODU3ZTgsIDB4MDk5ZTFhNTUsCisJMHg1MzIyMzBmMywgMHg2YmFmZDdkNiwgMHgzNDY5M2NiOSwgMHhhY2VhOWQxMSwgMHhmYTA0ZTU4ZiwgMHhhNWQxODQxZiwKKwkweGVlYmViMDIzLCAweDcyYmNlYzdhLCAweDY4ZTkxYjhhLCAweGFjNzJjMWRjLCAweDkzNjM5NjU4LCAweDJhN2M2MGZhLAorCTB4OTMzODczZmYsIDB4ZDZmN2U2MDIsIDB4N2MxNTE4ZmUsIDB4NTU0NGQ1ZmIsIDB4MmUxMDEyZmQsIDB4OGQ1M2U1ODEsCisJMHg2OWYyYWE3OSwgMHhmODJhNzFlNiwgMHg1NTE0ZGIwZSwgMHg1NGQyMTlmZCwgMHhjZTY3N2MxNSwgMHhiM2ZhYWE5ZCwKKwkweGYwNTVmM2VkLCAweDU0NGJjNTVkLCAweGVlM2FlN2Y1LCAweDJmY2Y5NTU1LCAweGJlNTU0ODdmLCAweDA1NDZiOWQwLAorCTB4N2JmOGFhMmYsIDB4YWVjNWZkNTUsIDB4OTJmOTU1NDYsIDB4ZTU1NTI3OWEsIDB4OTI5M2Y2YzEsIDB4M2Y3MjY2OTYsCisJMHhlNzliNTZjZiwgMHg4YmU0ODNhNCwgMHgwZTQ2NzA0YiwgMHgxNGE5NjdhZCwgMHgzZGQ3MDNmYiwgMHg1M2ViODIyYSwKKwkweGU1MWFmNWMxLCAweGUwNDE3OGY1LCAweDQ4ZmViMWZkLCAweGUyOWRmMjBkLCAweDkxZWQ2MzdmLCAweGQ3NWNmZjJhLAorCTB4M2VjNmM5ZTQsIDB4ZWM3MmZhMTMsIDB4YjJkZDIzZWYsIDB4YzUxZmRjMTMsIDB4YzUzYmZjZmMsIDB4MDRmZGQ1N2YsCisJMHg1NmY2ODNkNCwgMHg3MTViYTY0NywgMHhhYmJmNDNiZiwgMHhmOWZkMGY0YiwgMHhiN2JmZTQzNSwgMHhiNDBiZDczNiwKKwkweGU3YWU2ZTBmLCAweDdhYWI5NTdlLCAweGMwMGQ4YWU2LCAweDdlZjM4NTgzLCAweDgyOGU3OGU1LCAweDcwNDQ3MzI3LAorCTB4Y2YxODYwZmYsIDB4OTVmYjI2ZGYsIDB4NTJiZjQzOWUsIDB4YjAzZjYzMzYsIDB4MTc3ODdlMjgsIDB4YWM1MDliYjUsCisJMHg0NjdmYTFmNywgMHg3YTA4ZjZhOCwgMHg2NjJlNWI5NCwgMHgwNzI4NDgzNiwgMHg5N2ZmNTM5NywgMHg1ODIzZWMyYiwKKwkweGQyNTY3OTg4LCAweDM5OGRhZjU2LCAweGJkNWI3ZGEwLCAweGM2MWVhZDZmLCAweDY5Mzk5NzU2LCAweGJjZDBiM2NiLAorCTB4MWZjOGMzY2QsIDB4OTRlNjY4ZjMsIDB4ZTc4MTZiMmQsIDB4YTI1MzIxZmYsIDB4ZjkxMDQ5NzUsIDB4Zjc1ZjNmM2MsCisJMHhkMDNkYjljNiwgMHhhNTk1NmI1ZiwgMHg3MDZhZTUwOCwgMHhmM2JiOTI3OSwgMHg5NDFiYjFlMiwgMHhkNWYyYmYzZiwKKwkweGQxYmZlZTBmLCAweDY3MWQ3NWY3LCAweDg3Y2EwMjlhLCAweDI0NTY4YmY1LCAweDFkMDA0NzMyLCAweDdlZDA4NjQ4LAorCTB4NzRjODFmZjksIDB4MjdhYzllZTUsIDB4NWEzM2Q2M2YsIDB4Y2ZjODkzZDcsIDB4ZDdmZjI2MTcsIDB4ZGRmMGJkYzQsCisJMHgzZGNhZTk3OSwgMHhmZTQzYTdhOCwgMHhlYTFmMzAwZiwgMHhjZjllYmNkMSwgMHgyOWU3NDRiYywgMHhiZjQwZjM1MiwKKwkweDJjM2JmZDQ3LCAweDk0MWVkZDM0LCAweDk1YWQxN2RiLCAweDVhMDdlOGZkLCAweGQwOTdhOTFkLCAweDdlMzI0ZmNlLAorCTB4MGVlYTdlNDYsIDB4ODNhYmI3MWQsIDB4MDdlN2Y3ZWQsIDB4YjI3NmVkZWMsIDB4ZWRjYmY3YmYsIDB4YWQ1Mzk2ZWMsCisJMHg4Y2NmN2Y5OSwgMHhlNDVhMjYzZSwgMHhmOTg4NDBmOCwgMHgwOWI1NDZkMCwgMHhhYjEyYWYyOCwgMHhmOTAyNGZjNSwKKwkweDRmNTIzYmEyLCAweDQ5OGIwNDdlLCAweDZhOTgzYmY2LCAweGM1MDE3ZTU0LCAweDc5MWRkMDZmLCAweDZmNzQ4MGJmLAorCTB4N2U0MTVhZTksIDB4NjAxN2Y0N2EsIDB4NzVlNTA3N2IsIDB4MjQxN2Y2MDksIDB4ZThiNGZmMTksIDB4YjUxYmQ4ZTMsCisJMHgyM2YyMDZjZiwgMHgwNGZkMTA4NCwgMHgyN2Y4YTFlMSwgMHhhM2YxZmI4MiwgMHhjY2ZiODEzZSwgMHgyN2QyNzBjYSwKKwkweDM5N2RjNzgyLCAweDY2NTBlNGIzLCAweGZmNDhmMjNjLCAweDdlNTAzYmM5LCAweDdlZDFkMjlmLCAweDg0YmQxYzM4LAorCTB4MWZjY2UxNDksIDB4MjY2ZjdlZDAsIDB4NzIyM2VmYjcsIDB4OTFmOTU0NjIsIDB4MGZlNjQ0ZjYsIDB4NjRiMzVmZjQsCisJMHgzMjExMjdmMywgMHg0OGNjNWIwYywgMHg1MWM2ZGY3ZCwgMHhiY2RiZGZkOCwgMHhiYjNhMTNiZiwgMHhkODQxZjQ4ZCwKKwkweDdiZmVkMGY2LCAweGVlZTdlNjRmLCAweGFiNjk0NjVjLCAweDAxYjc5NzZjLCAweDljZmE2MzFmLCAweGQ5ZmE0Y2Q3LAorCTB4ODQzZmUwMzYsIDB4NGEyNTdiYjcsIDB4NGExY2RlZmQsIDB4NTRlZDdhNzcsIDB4NGM1YmNiYmUsIDB4ODNhZjFlZjAsCisJMHg3MmRlYmRlMCwgMHg5ZDc5Zjc0YSwgMHhiNzkyZmY5NCwgMHg3YTlmZTA4MiwgMHg3YmI2OTQ1ZCwgMHgxNWZmMjg2YiwKKwkweDAzZTA4N2FmLCAweDVmODIwNmRlLCAweDQ0NTA3ZDQ1LCAweGE1MzM3NTNmLCAweGE4NWI3ODZmLCAweDQ2ZGJkM2JjLAorCTB4M2Y1ZTliZjAsIDB4YmRkZTVkYTUsIDB4ZGJjODdmOTQsIDB4NmYxMWYwNGUsIDB4YmNjN2MxMDcsIDB4NzhmNzA0NWQsCisJMHhkYjdkMjg3YiwgMHhlZmY5NGJkYiwgMHhkYzEzNGY3OCwgMHhiMTkzOGYyYiwgMHhmYTJmNWVlNiwgMHg4NGEyNWMyYiwKKwkweGFlYjNkZGZhLCAweGQ3ZWEzMzZhLCAweDMzMWE2NWI2LCAweDk3MzZmMzhhLCAweDM5ZmEwNTY2LCAweDc4ZjI1NWI2LAorCTB4ODY5NTZkOWYsIDB4ODdhMDQwZmMsIDB4YjM5ZjUxZmEsIDB4ZjhmYTdiMmQsIDB4NDA1ZjJhMzQsIDB4NDliMTViZTUsCisJMHhhYmFjNGEzMCwgMHg1NmNhZmViOCwgMHgxNTllYTllYSwgMHg3N2MxMDIwZiwgMHhmZDJiNmFkYiwgMHhiMjViODA1YSwKKwkweGJhZGNhOWMzLCAweGVkYmIyNDRhLCAweDNhMjc4ZDc5LCAweDI0NWRlYjliLCAweGFlM2FhZGJmLCAweDEwNzQyODNmLAorCTB4MjJlOWZiMjEsIDB4OTc0YTQ0YjIsIDB4YTNmYzczNjUsIDB4MjNlZjQyMzIsIDB4ZmM0YTU5MTksIDB4YzcwN2I5YTQsCisJMHhmMTgyYWI2NywgMHhmNTU1YmUyMSwgMHg1YTVmOGM0NiwgMHg0OWYxODNlZiwgMHgzYWFlM2ZhNCwgMHhjMzI0NzgwNCwKKwkweGMwN2YxMTc4LCAweDZjYzJmYzg3LCAweGFkOTdkNzE5LCAweGFmMDhlYjU1LCAweDk0ZjM2NWU0LCAweGRhMzQ2Nzc4LAorCTB4ZmE5ZTZkZTksIDB4YTU2Zjg0YjksIDB4MzZjZDdlNDgsIDB4ZmJlOGExZDcsIDB4ZTdjYTRlNTAsIDB4ZTFmMWFjN2MsCisJMHg1MGZlN2Y0ZSwgMHhmMDgyMzI3YywgMHhkZGI4YzZkZiwgMHhkMmZhMGM5MCwgMHgwMGUzMTBmZSwgMHhjN2E5NDc4YiwKKwkweDE5OGY3OGZkLCAweDI2ZjFmYTQzLCAweGIyNjI3YWNiLCAweDNkOGZmOWMwLCAweDZkZmYxMjJjLCAweGMxZjdhMDY3LAorCTB4N2U4MWNmNzcsIDB4NTAzOTQzZTcsIDB4ZmExNTZmYmEsIDB4NzJjZDFlYWIsIDB4M2MwMmNjNGQsIDB4M2Y4ZDI0N2UsCisJMHg1MzFjMDIyNCwgMHhhZjRmZGJjZSwgMHgxZWEwZjcxNywgMHhhZTdkZWIwZCwgMHgzZTM3ZjIwOSwgMHhiNjg5ZDliOCwKKwkweDY5NjZlYzcxLCAweGRiNWJiMjJkLCAweGQwMTM1N2IyLCAweGE4MmM5NWZmLCAweGNiNDk0N2Q3LCAweDNiYjYzYzY1LAorCTB4ZDVjZjdiNzgsIDB4YjY0ZmU0OGIsIDB4NzY5MDNhYWUsIDB4ODY1YmY3ODQsIDB4ZmE4ZTI2ZmQsIDB4NjFiYTE4N2QsCisJMHgxYTQ4MTYzMiwgMHg1NWM5MTkxNCwgMHgyZmVjNDVlMiwgMHhlNWNkYTFlYywgMHg2NmZjNWZkOCwgMHgyMTVmZDI4NywKKwkweGU3NzVmN2Y2LCAweDY1ZTNlNDY5LCAweGJjMDg1NzU2LCAweDM3Mjc5Mzg2LCAweGIzOGIyMzkzLCAweDhlNDhlMzIyLAorCTB4OTQyNGIxMjQsIDB4YjhlYmNmMjMsIDB4ZTQ5ZGYyZGMsIDB4ODYxZDI0ZmEsIDB4MWZiNDM0OTksIDB4YzRhZTdlMjUsCisJMHhlOGUzODNkMywgMHgyNDNkMzIzNSwgMHg2MWM3NDIxOSwgMHhmZGU4MGQ1NywgMHhkZGI3YWEzZSwgMHhlNzQ5YzliMSwKKwkweDBiM2UzMDRiLCAweDZjNzVhYjQ1LCAweGVhZjNhZTA1LCAweGRhZjM3MDkyLCAweGE0YTBmNDEwLCAweDAxOGU1MDViLAorCTB4NDY4YmRmZGYsIDB4YjliM2I1MjMsIDB4ZTFhM2I3OWMsIDB4NTZjYWRjZWQsIDB4MzI2MjVjMTEsIDB4NmJjODQyZmIsCisJMHg2ZTVhN2QyNSwgMHg0ZTJjODFlNywgMHhiZTBmNDliNywgMHhhZTE4ZjFiNCwgMHgzYTNhZGJlZiwgMHhjNjljZjQxMywKKwkweDA0ZWQxMWJmLCAweGM5MmQwOWRmLCAweGZiNmQ0NGQ3LCAweDc4MDEzZDhlLCAweDc5ZTNjYjM1LCAweGI1Y2ZlZjRlLAorCTB4N2I0MGZmMjMsIDB4OTE1NzI4ZjksIDB4N2ZjOWYyNWYsIDB4Y2MwNTY2YzEsIDB4NWFkZGYyYmIsIDB4YTNmZDhmZDksCisJMHgyOWEyMWI2YiwgMHgyZWI1NWNiZSwgMHgzNmEzZjUwYywgMHhiMDdhMjQ2NiwgMHg4NWQxM2NlYSwgMHg0NTYwZjQwMSwKKwkweDFmNDEwY2JhLCAweDRhZjRiMmZiLCAweDMyNTRkNTNjLCAweDdjMzJlMzExLCAweDcyOGE5ZTVmLCAweDU4M2VmMDA5LAorCTB4ZTFmYjQ1MWQsIDB4ZGVlZjY1ZDQsIDB4NWJlMDE2MzksIDB4ZDQ3Njg4YWUsIDB4ZTVhYjllY2IsIDB4ZmQyNzEzZTcsCisJMHgyNmU3NDM1MSwgMHhkYjljN2NkZSwgMHhiN2ZkYjc3ZCwgMHg3YmY0MWViMiwgMHhiM2U5YzgyNywgMHg3YTQxZTc2OCwKKwkweDc3YjMzMzRiLCAweDUyZGNiYWMxLCAweGNkZmYyMjZkLCAweGIzYzU1N2FkLCAweGI5MWE3NjgxLCAweDdkYTNjN2E0LAorCTB4NTMzNWZkYzEsIDB4ODAzY2ExZmEsIDB4YTY3ZDI2ZmUsIDB4YWEzMzBmYWUsIDB4YTEyMzNkNDUsIDB4YWI2ZjlkNGYsCisJMHgxYTY2NzAzYSwgMHhjYjU2ZDNmNCwgMHhmNmJiNmUzZiwgMHg3ZDg0NzFmZSwgMHg5M2YyMWFmNSwgMHhmNDI5ZjUwMCwKKwkweDRkZmU0MDkzLCAweGU3ODA5N2QxLCAweDE5MWEzNzE2LCAweDMyZWI3M2M5LCAweDQxZTUxOWEzLCAweGU0OWMyNWI3LAorCTB4MTM2MmRiNWYsIDB4MzIxYmExZTksIDB4OWVhMTg3NTcsIDB4OGZhYWE4NmMsIDB4ZGVhNDc0YzYsIDB4YTc3ZDAzYjcsCisJMHg3ZGZmYmJkZCwgMHhlNDgxMmQ5ZSwgMHg4MTdmM2YyZCwgMHhmYTBjNTk4NCwgMHhhZTdhYmRjMCwgMHhiNmZhZjhlNCwKKwkweDc5NDRjYjRjLCAweGMzZjJhMWE5LCAweDhiN2RmZmJiLCAweGFjMDc3ZDBmLCAweDM0OTBmMDg1LCAweDdlMGY5MTJjLAorCTB4ZTI5YmJlMDAsIDB4MmZkZjAyZDQsIDB4NDQ0ZTY3NDAsIDB4YWJhZTc0ZjgsIDB4NDI0M2U1MDcsIDB4OGIxYmFmOWMsCisJMHg1NmNlOWFiNiwgMHhjYWUyZjlkMiwgMHg1ZDMzZTIzOCwgMHgzMWU5ODdiNSwgMHgxOGM4YjJiZiwgMHg5ZjBhZTdjOCwKKwkweGZmZmNiNWZjLCAweGJiZTcxY2I0LCAweDU5YjgxYzk5LCAweGY3ZTMzN2JiLCAweGJlNzNhNTlmLCAweDM2OWVjZTE5LAorCTB4MTU0ZjIzMGMsIDB4OWFjZjE4ZmIsIDB4NGI2YzhhNjMsIDB4N2Q1OWVhZmIsIDB4ZjZlYWZkNDgsIDB4YzU2N2NlNmMsCisJMHg2NDNlN2U3YSwgMHg3MmY0YzU0ZSwgMHhmYWY4YzM4YSwgMHg5NmM3M2M0NCwgMHhhOWY5Y2Q5MywgMHg3MTQ5MTJjZCwKKwkweGQ2NzRiNmUyLCAweGRmMDM3MTg1LCAweGY3ZjcwZDcyLCAweGRhZmZmMWM0LCAweDNmYzlkMzJhLCAweGEyNzgyYWQ0LAorCTB4M2U3ODE5N2QsIDB4ZWI4Njk1YzIsIDB4MTQ3MzA2ZDcsIDB4YTZiN2ZkMDksIDB4ZmNjZWI5NzIsIDB4YWJjNjMzMWUsCisJMHg0MDlhOWRhMSwgMHhmM2RlYzFmYywgMHg5MTk4ZTlhOSwgMHgwYmZlNGMzZSwgMHhhNDllZjEyZCwgMHhhM2I3ZjAwZiwKKwkweDE3ZmQxYzVmLCAweGRhZGRkZmMxLCAweGJmNmY4NmFmLCAweDk4NGI4NmFhLCAweDM1NGYwNTRlLCAweDY2NjllMWFhLAorCTB4ZTZjOTZjMzUsIDB4MzYxZGZhN2EsIDB4NDkwY2ZlNzUsIDB4MWNhNzI3MGQsIDB4NzNmMGQzMDksIDB4N2YwMWE2ZWQsCisJMHhiYmYwNDRiMywgMHhhMDdlMDE5OSwgMHgwMTc2OWEwZCwgMHhhZmE1MjVlNywgMHhhZGIyZmM5NiwgMHg5M2RmZGNhOSwKKwkweDczZjZhZjVjLCAweGI1OTZiMjI0LCAweDZkZjkwMjMxLCAweGZjYjZmOTU0LCAweDczZmEwMjU1LCAweDdjZWFkNTZjLAorCTB4OGMxNTA3OTgsIDB4YmZmNDhhY2IsIDB4OWY5NWQ3MjQsIDB4MDJlOTcxOGQsIDB4NGIzYWVlN2UsIDB4YzVjZGU5ZWIsCisJMHgyMzhiNjg3NSwgMHhjZjkzNGEzZSwgMHgxZmRkMGQwNSwgMHg5NWI4ZDBiNywgMHg3YzBmOTA3NiwgMHhmYTQ1ZTMwMSwKKwkweGU2MmY4NDBmLCAweGM3NjcyNmJhLCAweDA1ZjAzZTczLCAweDdkZjk5N2VlLCAweGE1MDNlNDNhLCAweDQxZjhlMWJmLAorCTB4Mzk2MmM3ZTEsIDB4YWI5Y2EyNmUsIDB4YTViNzIyYjksIDB4OTdhOWFiOWMsIDB4MDQ3NWM3Y2YsIDB4OTJiOWM3OWQsCisJMHg4MWU3NDY1YywgMHgwOWFlZjRhZSwgMHhjODc3YzUwZiwgMHhjZTZjYmU2NywgMHg5NDZlOTg3NywgMHhkZjIwZDdjZiwKKwkweGVmOWNmNGY5LCAweGQ1ZjBkZjMwLCAweGZkMjg2NzJhLCAweGFmYmNiY2YwLCAweGNjMzdiNDNjLCAweGY4YzA3MWZjLAorCTB4YWI0N2I2NTYsIDB4ODI0Nzc3NjAsIDB4ZDNiY2YwMzksIDB4NzQwZmY4NDMsIDB4M2EzMzM3YmEsIDB4MGYyYjVhNDcsCisJMHhiZjMzOGJlNywgMHhlOTA4ZDNkYiwgMHgwYjk3NWE1YiwgMHhkNjY1NjdkNywgMHgzMzhmM2Q1OSwgMHhmZTUxZWJmNSwKKwkweGRmZjc5NzllLCAweDM4ZGQ4MjBkLCAweGRiOTRjMDVhLCAweGJiNjY4ZGE1LCAweGNjYmRmZDExLCAweDU3ZjJhMTlmLAorCTB4ZDU4NzdlMjgsIDB4MzFhY2QyMmIsIDB4MDE4OGZmODAsIDB4NGNkMzgyM2YsIDB4MzNlMzRkZTcsIDB4MzUxMThmYzksCisJMHgyYjM3NzFkNSwgMHhjY2Y3M2MwNCwgMHhhMjA0NmY5OCwgMHg1NTRlODVkYywgMHg2NThmYzc5MCwgMHg5N2QwZmQ5NywKKwkweDAzNWUzODNjLCAweGNlMDJhYmZhLCAweDBmNDQxOTIzLCAweDM1NzNiOTIzLCAweGU3MDE0OTk1LCAweGZmNjU1YmNhLAorCTB4OWIxZjAwYzUsIDB4N2Y2MDk3OTYsIDB4Nzg5NmNjM2YsIDB4ZDY3OTg2M2MsIDB4ZGE5ZmZmNzIsIDB4NmFiODY2NWYsCisJMHhkODMzYjU1MywgMHhkZmFhYjI3ZSwgMHg3MjJmZDk1NiwgMHhmZWQ1ZjZmMywgMHhmNGQ1YzMzNywgMHgwZWNmZGE2MSwKKwkweGIyMWNkZjZhLCAweGQ1NzZjMWZkLCAweDExYWZiYzdlLCAweDNlNDM2ZjFmLCAweGI1ZmZjZTE4LCAweDFiYTc5NjVmLAorCTB4ZjQ1ZTllNmMsIDB4ZDgxOGU5N2YsIDB4MDYwNzE0OTUsIDB4NmE4ODk4ZmEsIDB4YzM2OWZmMjMsIDB4NWQ1Mzc5ZjksCisJMHhhNjBmZGFiMiwgMHgxZjkyN2U2MywgMHg5MGQ2NDdjZiwgMHgzZTYwNDhmYywgMHg5ODU5ZGY4YSwgMHg0N2Q3ZjI4NywKKwkweGJiZjFlNzRkLCAweDEzNzFiOTYwLCAweDg3OThjMTc5LCAweGZkMDBkZWExLCAweDNmNTdmMmE5LCAweDQ2ZDNmN2MyLAorCTB4M2M0MmVlYzEsIDB4ZmZmM2M3ODMsIDB4ODlhYmRkOGEsIDB4ZmE0YmRmMWMsIDB4NjRiODRhNzMsIDB4ZGJkZTgxYjgsCisJMHhlMzI1NzVlYSwgMHgzZGMyMWJmNywgMHhmZWViMTgzNSwgMHg3NjJlYmIzYywgMHgxYjNkZTgzZCwgMHg3YzA4YzYzMCwKKwkweDcxYmIzNTc2LCAweGZiODRjZmJlLCAweGY1OGZhNzI0LCAweDI3YTIxYTcxLCAweDFkOTZkZGNiLCAweGIyN2EwMGRhLAorCTB4YTg2OTVkZTgsIDB4ZjIzNDVhZjcsIDB4YTFmYzJmMzksIDB4NjViZDZjYmYsIDB4ZmQxMGE2ZTcsIDB4MDI5YmZhMmIsCisJMHg4ZjAwMmI1YiwgMHg5NTZkYmEwMCwgMHhmZTgxZTZmNSwgMHhkMGVlMjQ5NiwgMHgzMTYzYjQwNiwgMHgzZmE5MGFiOCwKKwkweGQyYTM1Y2U1LCAweGViMzdkMzVmLCAweGY3ZWNhYjZmLCAweGRlYjNmYTUyLCAweDU1OWYxZWEzLCAweDU5ZjFhMWVmLAorCTB4ZTk0N2ZkZTUsIDB4MmY4ZTJiNmYsIDB4YjRkZDVmMDQsIDB4MWU4ZWQ5M2YsIDB4N2FhOTZmZTgsIDB4ODc4MzU2N2MsCisJMHg3MmQ1NjdjNiwgMHg3ZjQwZTFmZiwgMHhiZmFjZGY0ZCwgMHg5MzFlZjkzNiwgMHhlMWQzZTY0ZCwgMHgwZTM3ZmRjZSwKKwkweDFhNzZhYjljLCAweDI5YjRhZTUxLCAweDdmNzk0MGZlLCAweGJmYjQxNGJiLCAweDM3Zjc5NmFkLCAweDcxNGJmYmU1LAorCTB4YmRkZmU0ZTksIDB4MThkZjMzZDQsIDB4ZmRjMzVmNmEsIDB4MjQ3YWM5OGMsIDB4MjY0OGY1OTMsIDB4Y2YwODkxZWIsCisJMHgzZWE2N2E5OSwgMHhmMGIwZTgxZSwgMHgyMmY5YjZjNSwgMHgxZTczZTNlYywgMHgxNTNlMzMzYSwgMHhmNjJmMTllMCwKKwkweDVmNjExN2NmLCAweDk5ZTJmMzlhLCAweGM5ZjA0OTAzLCAweGNjYmUyZmNiLCAweGU2Nzg3ZmNiLCAweDliOTQzMjRhLAorCTB4MmZjZGVmN2MsIDB4OTYyYTM4MDMsIDB4ZGUwYWM3ZWYsIDB4OGRiN2JmNGEsIDB4YmJhMzdhZTIsIDB4YmZlZTczZTEsCisJMHhmYjhhZjkwNCwgMHg4N2FhNjM1NiwgMHg0MmYxN2ZhMSwgMHgzMmQ0N2Y3MiwgMHhlOTRlZWZhOCwgMHgzMTBmMmNiNywKKwkweDZlZWE0YTJmLCAweDQ2N2U0ZjM4LCAweGZmMjg3OTE0LCAweDQwYmZlMWU2LCAweGVlNTNjZmI0LCAweGVmYWI5NDY3LAorCTB4NmQ0NTQ0NjcsIDB4OGMyZmZkMjIsIDB4ZWYyOGNkZjksIDB4YmEwZThjMjIsIDB4MjhkNmY4NGYsIDB4NjQyYzFmYmUsCisJMHgzNzZlMGFmNiwgMHgzOWYyNTk0OCwgMHgzMWNmYmEwZCwgMHhkNzZlNThiZiwgMHhiMWNmY2I3YywgMHhiMWM2YTE3YywKKwkweGRmZDllZDFlLCAweDQ3OGFhYTRlLCAweDE3Mzk1OGY1LCAweDdmNzgzNzk3LCAweDFiZjVkNzcyLCAweGJlMGUxZjljLAorCTB4MjNlNzM5M2YsIDB4MjNjMmViODEsIDB4M2JhNWJmYjgsIDB4YjlmN2UyNTcsIDB4YTg4NmZjMDIsIDB4OWYzNzBlZjcsCisJMHg3ZGI4YTNiNSwgMHgwZTlmMzgzZiwgMHgwZTMxOWYzZSwgMHhmZWU2OWYzZSwgMHhmZWIwYjVhOCwgMHhjYjdlZThlZSwKKwkweDVkOWZjNDEzLCAweGM4NmJlNzIxLCAweDVmY2QwNmJjLCAweGQ4YTYyOGZkLCAweGI3YTQ1YTc5LCAweDMyYjdjZDliLAorCTB4YzFmOWNhYWYsIDB4YTJjYTQxNDYsIDB4Nzk0ZmVhZmQsIDB4MzE4M2ZkMmEsIDB4OGUyYTE0YmIsIDB4YjgxOWY0ODMsCisJMHg0ZTZkZWFiZiwgMHg1ZDE5ZmU4NiwgMHhjZjA3M2Q5YywgMHg0NWZlMzc5NSwgMHhkZTVjZjIxYiwgMHhkNjNlNzk2ZSwKKwkweGI5ZDM4NTQ2LCAweDNkMjhjNmNlLCAweDUxZGRkYmQ5LCAweDk3ZmExOTMzLCAweDlhNzRkMzQ1LCAweDcyYThiMjk3LAorCTB4OGRhOTZmM2EsIDB4OGY2OGVkNjUsIDB4ZDcyMzlmMDYsIDB4Y2U5YmI4OGUsIDB4NjhhZDY5MDEsIDB4NzAzYTQwNDEsCisJMHhhNDYxZDkyZSwgMHhlOGI5ODlmOCwgMHhjNWM4ZTc4NiwgMHg4ZjIzOWQ5YiwgMHg5MWNmYzk5OSwgMHg3NDI1ZTk0NywKKwkweGVhNDViNDU5LCAweDdmMjM5ZTQzLCAweGY3ZGYxNDZjLCAweDcxM2M3MWJiLCAweDI3OGMzZjg4LCAweGEyMWM3MDZkLAorCTB4MzFkMWM3OTksIDB4ZjVmMjAyM2YsIDB4N2YyMzE3NjYsIDB4YzdkZTNjYmEsIDB4ZWE1MDc1ZTQsIDB4ODYxZWNjMWIsCisJMHhiN2FiNDBmMiwgMHg2OGE3YTg0YiwgMHg2MTNlZjljMywgMHg0ZTU4NjliMCwgMHhmN2M4YmYwOCwgMHhmYmU4ZTk0NywKKwkweDM0Y2Q3MjRmLCAweGQ3MjMxYWFmLCAweDVhZmNlN2NiLCAweDdhNGZlOTA4LCAweDRmZTI5NDc1LCAweGMzNjc0ZDBhLAorCTB4MGQzY2M5ZDEsIDB4ZjBhNzQ3M2YsIDB4OWU5MzAyZTEsIDB4MzAyZGY3Y2UsIDB4MGZkMTRhZDksIDB4ZWYwODAwYjIsCisJMHhmYTgwOThiMywgMHhmN2UyMmRiNywgMHgwZGJiNDU4MSwgMHg1MzM3ZTdlOSwgMHg2ZmY5ZmY2ZSwgMHhiOWY5YmExOCwKKwkweDQzMzUzZTdjLCAweDRlZTNmNzQ3LCAweDhmNjFjYzA5LCAweGQ1N2U3YTE5LCAweDg2OWU4Y2U5LCAweDY2YmI5YTZlLAorCTB4ZWM4NzU5OWQsIDB4ZWZmMmUyZjcsIDB4ODY3YjYxMTUsIDB4MTY3NTUzZTMsIDB4Nzc5ZmVjODksIDB4YTg1Y2ExNDYsCisJMHgwZjFmNWI0ZSwgMHg0MmNhYTJmMCwgMHg5NGRmZGQxZCwgMHgwOGVlNDRlMywgMHhkMTlmYzcyZSwgMHhhMjhlNGViYSwKKwkweDUxZTdkMTc4LCAweDYyNDc0OGE1LCAweGEzZTIyYTdmLCAweGVhMDI4OWM0LCAweDllMmEzN2JkLCAweGQ3ZTFjZGVhLAorCTB4MThkZWEwYzUsIDB4N2Y2N2QzOTQsIDB4MWViNDYyZWYsIDB4MTI3YTUwYjYsIDB4MzAyYzRmZGEsIDB4MDdjYjIzNmUsCisJMHhmMzAyYTNiNCwgMHgwMTYyN2VkMSwgMHgyZjJjMjdlYiwgMHg5MDg1ZjZiNiwgMHg2MDlhNGExNywgMHgwZDUyOTJkYiwKKwkweGQwOTA5ZTdjLCAweGZmOTJhOTQyLCAweGVlNWI0M2FjLCAweDU3YWViMTBmLCAweGM2ZmQ3NWU1LCAweDYwMWI0Yzc2LAorCTB4OGVkMDcxM2IsIDB4MmFlNWZiMDEsIDB4ZDUxN2RiY2UsIDB4NjFlMzJjYTcsIDB4MTc2NTc1NDgsIDB4ZTliMThlYzksCisJMHg4ODkzM2UxNSwgMHgxZTYxMDZiZiwgMHg0NWZiMDRhZiwgMHhkNWIwZGU3NSwgMHhmYmExNGJlYiwgMHg2ZDM4ZjJmZSwKKwkweGEzNDZkNjJiLCAweDFjNTUwMzFkLCAweGJjZGI5ZjQ4LCAweDk5NjUyOTZkLCAweGNlYzhlMzgzLCAweDhkMTNlOTkxLAorCTB4MTdhODg5YjYsIDB4NWM3MjVmZjMsIDB4OTdmNDBjY2IsIDB4NzQzNDliMjQsIDB4NTMyNjAxM2UsIDB4NmU2MTJmNzUsCisJMHgzOGI0ZjQ1OSwgMHhjY2RkNDUzNCwgMHgyZWQwOTI2ZSwgMHgzZjNkMjVlZiwgMHhmODk2YmFlMSwgMHg2MmYwZTEyMCwKKwkweGE0YWI3MTg2LCAweGVmMDE3NmI4LCAweDIzZjQwZDAzLCAweDk3YWU2ZmRmLCAweDVjNTdiOWUzLCAweDA0OGUzNDY1LAorCTB4Y2VmZWMwZWIsIDB4ZjM4ZDBlYzgsIDB4NzQ3OTQ1Y2QsIDB4NTE4ZTY5ZTUsIDB4ZTVkNThmYzIsIDB4ZGNmYzcxYzksCisJMHhlMWQ1ZmRjMiwgMHgzYWU4MDk3ZSwgMHg0MDU3YjZhOSwgMHgzODBjMDEzOCwgMHg1YzI3YzVmNCwgMHg0MjZiNGM2ZiwKKwkweDA0NWFmMjc5LCAweDZkYjU4YmY5LCAweGYyMDdjYzk5LCAweDQ1NzQ1NTI3LCAweGZiM2NlMGU1LCAweGM5YTZmZmE1LAorCTB4ZGYwYjA3OTAsIDB4OWMyMDdjYWQsIDB4YTEzNmIzZjQsIDB4MjVkOTA2NjUsIDB4Mjg1ODY5ZjcsIDB4MWM5OGNmM2YsCisJMHhjODI4YzdlZSwgMHg2MDlmZmNlMSwgMHgxZWE5NGQ2YiwgMHg0NGQzZTk4NywgMHhjZjk3NWYzNywgMHgxZGIzOTA2NywKKwkweDlmMTFkOWY0LCAweDFjNThmYTJkLCAweDc1OWE3YmQ0LCAweDliNzNlOWExLCAweDdlYzBlZmRjLCAweDE4NWZjZjIxLAorCTB4N2Y5MTE5NzMsIDB4M2I5MzgyYjUsIDB4ZGJlZWY3MzksIDB4Y2U4MmNmYjcsIDB4NTVlNzQ2MTMsIDB4OGQ3YWM5MzYsCisJMHg0ZTQ0NGVkMiwgMHhkODQ2MTUzYiwgMHg0NWNmMGMxZCwgMHhkZjA3NjYwYSwgMHg5YjNlY2MwNywgMHhmOWFiZDYwZiwKKwkweDdiNDg2ZDJiLCAweDc5MWNjMWViLCAweGIyNmI0OTFmLCAweDRjYjJmZDYxLCAweDk0ZmQwZGJiLCAweDFhNTVmN2MxLAorCTB4NzBkYTI2ZDMsIDB4MGM2NzFhN2QsIDB4NzAzMWE5ZDAsIDB4Y2I0ZWU4NWYsIDB4NTNjZjFmN2UsIDB4MmM3NDdhOTksCisJMHg3MDU5MWNmMCwgMHgyMTczYzdhYSwgMHg5NzI4MzdiMSwgMHgxZDM3OTdjZiwgMHg5YjQyZTdlMiwgMHg3OGJkNDU0YywKKwkweDE0YzlhMTBlLCAweGZlYzc0NDU3LCAweGE5OWNmYzRjLCAweDNhNjRkZjUyLCAweDY0ZGVmMjQ2LCAweDEzNTZmMWU3LAorCTB4YTIwMjBmZWUsIDB4M2JhMWU3YzcsIDB4ODNjZDE4ZWQsIDB4MGU1YTZmNTIsIDB4N2IyNmFiOTcsIDB4NWJmYmMzMTcsCisJMHhkNTNmNzZlMSwgMHgzZTlkMTMwYiwgMHgxNjFmZTAwZCwgMHg0ZmZlZThjNywgMHg1NWYzOTE5OCwgMHgzMThmYWMwNCwKKwkweDdlOTVlZjgwLCAweGQxZDFjYjZmLCAweDE3MjUzNWJjLCAweDdlMTA5NmY1LCAweDY3MDRkZTIyLCAweDFiMjJiNjRkLAorCTB4ZGYzOGRiZWQsIDB4YjQ2MzZmZDAsIDB4YWY5Y2RmNDIsIDB4NWJlNzk3MWYsIDB4M2U1MWE3NjksIDB4NDM0ZjdhZmYsCisJMHg1OGIyZmNjZSwgMHhkNzM5MTNmNCwgMHhhNmJiNjBlNCwgMHg4M2I0NDZlNSwgMHg2ZmUzOTFiNCwgMHg2MTg2ZGVkOCwKKwkweDI4NWU2YmRiLCAweGYyMzhmN2I3LCAweGM4YjIzNjg1LCAweDUwZTllZDhjLCAweGMzYTA4NDVlLCAweGZlNzZlNDY3LAorCTB4MzBlZGUzNTcsIDB4OTdkZjc0YjMsIDB4OWYzMDVhNjAsIDB4YTNkZTk0MmQsIDB4YTM4YzQ2YTQsIDB4ZGRmYTFiOGYsCisJMHhlYmJmOTYzNywgMHg5MDI0N2VkNCwgMHhmYzcxN2JiZiwgMHgxZWNmOTMyYiwgMHhlZTFjYTEyYiwgMHhkYjJlZGEzZiwKKwkweDYxOWQ4YTI3LCAweDJlZGVkYjkxLCAweDNlZTg3YmYwLCAweGVmNGVkYzIxLCAweDg3NzZjODM2LCAweDBmM2Q0YzI1LAorCTB4Zjk0MWY3ODMsIDB4ZTBhZTVjM2EsIDB4YzcyZWU2ZTcsIDB4MDQ2YjhhMzEsIDB4NzdlNWYzZjMsIDB4YjQwZThhM2UsCisJMHg3M2VmNTA0ZiwgMHgwNGJiNzM2NCwgMHgxYzRiYjQ1MywgMHg2MTBkOWZiMiwgMHg5ZGEwMWJmNCwgMHg4MGZkZjBhMiwKKwkweGZhNDJiNzVmLCAweDNmMDA1YmE3LCAweDBkNmZjODAzLCAweDdiMjQyYmI0LCAweGM5MGRiZTg4LCAweGU3Yzg2OTdkLAorCTB4MDUzYmYyYTksIDB4NWNkN2Y2NDMsIDB4NDc4NWE3MmUsIDB4ZmU0MzRiM2YsIDB4NGZlYjhiMmUsIDB4Zjk4MmVmYzAsCisJMHhhZTQ3ODVmYywgMHg1ZTc4ZTAyNiwgMHhjZTcwMzE5OCwgMHhhYjQzZTI4NiwgMHg3YmYzYTcxNywgMHgxY2ZmYzdkOSwKKwkweGZlZDEwYWVkLCAweDQ1N2ZlZWNkLCAweDg2YjRkZDlkLCAweDVjZTVjMGY0LCAweGRmNWJmYzBmLCAweDhjYmVkYjA3LAorCTB4ODIxZDlkZWIsIDB4Y2RhNGVmZGEsIDB4NWZlNzdhZTUsIDB4N2FjYzdkZTQsIDB4MmRmN2E0NTUsIDB4MmViOTY1Y2UsCisJMHgwYWI2MWYyMCwgMHg3ZjI4ZTVlNiwgMHhlN2UxMWY1MywgMHg1ZTNmNTZlNiwgMHgyMTAzZDlmZiwgMHhlZDE4NDFmOCwKKwkweDgwNGU3M2ZhLCAweGFjZGM1YzNkLCAweGEzNWEzZjI3LCAweDhkYzQ3ZDI5LCAweGFmYzMxY2UyLCAweDcxY2I4N2IzLAorCTB4MWU0YjdkNzksIDB4MjRmM2YyMzUsIDB4NWIxN2FlMmUsIDB4MzlkM2Y3NWMsIDB4MjNmM2UwOTUsIDB4MjQzYmQ1YzMsCisJMHhiZWE1M2RjYiwgMHg3OTQ3ZGIwMSwgMHhmZTQ3OWE2MiwgMHgyMzY4NGI4MCwgMHg5NjRkYmZhMCwgMHg3Njc4YzE3YiwKKwkweGYzYzg2NGUyLCAweDEyYjkwNDYzLCAweDE4NDU2ODc1LCAweGVkOTNhYmI2LCAweDNmOGFlZGIxLCAweGU4YzhhMmEzLAorCTB4Yjc1ZWY4MDgsIDB4MWE1OGM4YjgsIDB4OGM4ZDJmNDAsIDB4NmUwZGRmOWYsIDB4MDFkY2NlZmYsIDB4YWZhNTVhN2QsCisJMHg0NTlmNzBlOCwgMHhmODljNTBkZiwgMHg0MzM5MDFhNywgMHhjYWI4NjU4YSwgMHgwZmZhNTE4ZSwgMHg3MDE2M2YzZSwKKwkweGYzOGMyYzVlLCAweDVhNjdiNzI5LCAweGU4MThkY2YxLCAweDk2MmI2YmI3LCAweDZkZjljNDhmLCAweDU4MmY1ZDE1LAorCTB4M2ZmYTFlNjEsIDB4ZTczOWQwMzAsIDB4ZWNiZTY1MGYsIDB4Yjg3MmY5OTMsIDB4NDNiMWYzZjUsIDB4ZjYzMThjYTAsCisJMHg5NzgyM2IwNCwgMHhjNjRlODBkNiwgMHg2OGZlNDA4ZiwgMHhmYjk0ZDRjYywgMHg1Y2IzOGM0MywgMHhmZDA4NjcxZSwKKwkweGFmZGNkNmZhLCAweGU2OTc1ZmE3LCAweDUxYWZkMDg2LCAweGM1MDQ3NjdmLCAweGQ0NjEwMjFmLCAweGY0MjExZDliLAorCTB4ZWM4MjEzZWIsIDB4ZWRjZjkwMGYsIDB4MWQ0OWQwOWMsIDB4MjcwZjMwN2QsIDB4NmY2MTFkNmUsIDB4OTE5ZWU4OTQsCisJMHhmNjA0NWVjMywgMHgzMjY3OGJjMywgMHgyMzlmNmY1MSwgMHgyM2M3YmMwYywgMHg2MDhjMzFkYiwgMHgyMjE2MjNiMCwKKwkweDY3OTk3MzVlLCAweGM1MDIwM2RmLCAweDQ4ZWU1YTUxLCAweDVjMDRlZWEzLCAweGE3YWQ5YjhmLCAweDM3MTFmYjI0LAorCTB4ZGM2MTNhYzIsIDB4YjJkYWY1YTEsIDB4MGNlMmExMTksIDB4Mjc0MDM4ZmYsIDB4ZWYwMmJhMjgsIDB4MDQyYWMwMDcsCisJMHhjNDg2OTVjNCwgMHg2M2UyODJjYiwgMHgzODE5NGUxOCwgMHg1YTFkYWJmZiwgMHg3NTYyYWVmZiwgMHgzNWUzNmFmYywKKwkweGFjMzBiZmVlLCAweDA0MjdmZTYwLCAweDJlYWExZjNjLCAweDBiYWU1ZjlmLCAweGUyYTljZjhlLCAweGJhOWQwYjVhLAorCTB4ODg3YzdjNjAsIDB4NmY4Y2IyNmYsIDB4MjkwN2I2Y2EsIDB4NDUyZDNlMGUsIDB4NjRhY2ZkZTQsIDB4YzcwN2NmNjQsCisJMHhiZDg1MGNiZCwgMHhjM2VhMmQwZSwgMHhmN2Y0OGMxNSwgMHg5ZTM2M2Y2MCwgMHg1ZWZmMjUxNywgMHgwOWNmNjMwNSwKKwkweDdkNWFkZTc0LCAweDU5ZTllNGRmLCAweDFjZmJmOGU3LCAweDhmZDhlNTJkLCAweDUwYzM1MzJkLCAweGFmYmUwZTNmLAorCTB4ZjA5YmM0YTAsIDB4N2RlMDRjOTgsIDB4MjJkZGU1NjksIDB4ZTEwZDYyY2IsIDB4NTNiNzdjYzcsIDB4ODc5N2UyYjksCisJMHg0YjEyYTZmYSwgMHg1NWVlYjljMCwgMHhkZDNlYTA2YywgMHgxZTg1ZjJhMywgMHg1OWQ2ZDZmNywgMHgxYzRmZWYxNCwKKwkweDgyZWMyOWVmLCAweGEzM2IyNGEyLCAweDY2YWE0ODc5LCAweDNjYzAwNzY0LCAweDg2ZmFlMmE4LCAweGNlMzQ1ZDk0LAorCTB4YzU4YzM1NGIsIDB4YWFhMDM4ZjIsIDB4NzA3NjAxM2MsIDB4YmYxODRmYTQsIDB4ZTMwZmNlMmEsIDB4NzZjMWMxNTQsCisJMHg0ZGVjY2RlNywgMHgwZGU2NGE0MywgMHhmY2NkZjllNSwgMHg1ZTM5MDY4ZCwgMHg2NDZlNDZmOCwgMHg2MzNiZTkxYywKKwkweDc3ZDQxOGQ4LCAweGE2OWY4YjJjLCAweGViMDRiOGY1LCAweDM0NTk3ZTgxLCAweDAzYzU0Mjg0LCAweDY4ZmI0MzM3LAorCTB4NWY5MGJhMDcsIDB4YzRkZmQxZTIsIDB4MzBjYWVmNTQsIDB4YzlmNzQ4ODcsIDB4YjM4ZTYyODQsIDB4ZjFlNGViMTAsCisJMHhmYzQ2N2NlMSwgMHg5NTA3MDg2ZCwgMHg5ODU5ZjgwYiwgMHhiY2UwNzA2YywgMHhjMzAwMGMxYiwgMHgzMzNkMDU5MCwKKwkweDU2YmU0MDI2LCAweDE1YWYzN2Y2LCAweDMzMzA4ODk4LCAweDRmZGM4ZGRiLCAweGUzNmJiY2E4LCAweDg2NmQ3N2E3LAorCTB4ZmY3NDA3ZWIsIDB4Y2ZlYzMwYmUsIDB4ZmE1M2JmYzcsIDB4ZGI4ZWYyMTksIDB4ZmIyN2JlMGQsIDB4N2RmYzFjY2QsCisJMHg5NTFkZjkxOSwgMHhmZjliODdmZSwgMHhmYjZkZGVlMSwgMHgyNzc3ZDRjMywgMHgzMjY3YmY3MCwgMHgyMGU1NmJkMSwKKwkweDRjYmMxMmJkLCAweDFlZmM0N2E2LCAweDRhYmRjMmU1LCAweDBjNzdhZGIxLCAweGZiM2MzN2RlLCAweGZkMWQ4NDcwLAorCTB4ZjBlMzAzZTAsIDB4ZWZlNWE5ZGQsIDB4ZWQ3NWZkZDEsIDB4OTM2MWUwMGQsIDB4OGMwZmJlNDgsIDB4YWZlZjZlNGIsCisJMHgwMmZkMTcxZCwgMHhiYzA2ZGFlNCwgMHg0ZmU3ODQzNCwgMHgyNzlkMTkyYSwgMHhjZjRhYjhiMCwgMHgwMDBlNzQ4OSwKKwkweDEzOTJhMGM2LCAweDQwMTNlZjAxLCAweGYxMGUxYjdiLCAweGYxNWJhZjczLCAweGIwNzEwYjlkLCAweGQwMmJkNDVmLAorCTB4NDI1NWIwNmUsIDB4NDgzYjA4N2UsIDB4YmYxOWFiNDksIDB4ZDVlMGFjMWYsIDB4MWEzZDA3YTgsIDB4ZjVjMzUyZTksCisJMHgzZWE2ZDllOCwgMHhlOTM1Y2YxMSwgMHhlNDQ1ZmFlMiwgMHgyZTY4ZTcxZiwgMHgzN2U4MDdjNywgMHgwYmY5ZDE5ZSwKKwkweGNlN2M5MjZkLCAweGRmYzRhNDcxLCAweGZiZTRjYjRkLCAweDg0Y2ZkMjliLCAweGZlNTkxYWQxLCAweDQ3ZmJkMmY3LAorCTB4ZDU0ZTIzYjMsIDB4ZjJjNjc2NGIsIDB4NDQyZmM1ZjYsIDB4MTFlY2ZjZmYsIDB4MDBkM2VhYTcsIDB4ZTE2N2Q4MmUsCisJMHgyYmE5ZDI3MCwgMHhlY2M2NjY2OSwgMHhkMTBiYWNmYiwgMHhlZjNiM2Y5ZiwgMHg4MDc0OTVkNCwgMHg3OGQ5ZjY4YiwKKwkweDQ2NDYxNGY5LCAweDA5N2RmOGNlLCAweDMxOWZkMTBiLCAweGQ1NTliNDYxLCAweGQ3Mzg1YmZlLCAweGQ1M2NkZmYxLAorCTB4Y2YyMTM0MWEsIDB4NWEzNmRmNjMsIDB4ZThjOTRmMzksIDB4ZjNiM2FkM2UsIDB4MmUzMWE3OTcsIDB4NDdmNjU0ZTksCisJMHhkZjQ4MmU4NywgMHhkZTBiMjI4MSwgMHg3MTdmOTMyMywgMHg5ZDBmMTQ1MSwgMHg5ZGQ5ZDMyOSwgMHgxNDUyZWVmOCwKKwkweDY4YmIyZGZhLCAweGZhMGQ0NzdlLCAweDZiZmU5ZmU5LCAweDQzODJmNGZjLCAweGNjY2E5Nzc5LCAweDFiZmY4MTJhLAorCTB4MmMyYjk4MWIsIDB4OTllZTgwMjMsIDB4OWY5ZDczNDMsIDB4ODFiOGE2MDMsIDB4ZmZkMjhmODIsIDB4Njk2MGJjMTAsCisJMHhiYzQwOThjNSwgMHgwYTNiNTFiNiwgMHgwZDBhMTc1ZSwgMHhjNzA1ODdhNCwgMHhmZDA4MmU4NywgMHg1NDljZjFkYiwKKwkweDJmZDZjZmM0LCAweDEwYmE3NWMyLCAweDAwMmE5ZmQ5LCAweDllYjc5ZTFjLCAweDdjNDJlZGQ2LCAweDFlYzE3NmZmLAorCTB4M2FmOGViMDAsIDB4YTIyYmVmNTYsIDB4ZDZhM2ZjNzUsIDB4MDI3YTNkNTEsIDB4ZGZjNWRiYmUsIDB4ZTM5NjY4NmYsCisJMHhiYmM2NGY1MCwgMHgwMTlmNjg3YywgMHgzMmI5ZDFkZCwgMHhmYzllOGE1ZiwgMHgwNWUzNjU0OCwgMHhiMDNmYTA0NywKKwkweGNiZjczNDZlLCAweDY5ZDM5MjVjLCAweDQ5Y2YxNjg2LCAweDAxZjc0YmEwLCAweGZhODVhZDgxLCAweGY1OTc2YmVlLAorCTB4ZWVjYzlmYTgsIDB4M2Q0N2EzM2MsIDB4MTljMGVlYmEsIDB4YWQ0YmRlM2QsIDB4YTlkYTE4NDMsIDB4ODQ3N2E2ZGIsCisJMHgzMmZlZmZkMiwgMHg5N2YyYWI1YSwgMHhkMWQ3NzYyOSwgMHhlOGY1ZWM5NCwgMHgxNmFiYWI3NywgMHhlYWRlMWVlOCwKKwkweDZlMWZiOWQ3LCAweDI1MWMzMmY1LCAweGIyZGY3NzYzLCAweDU1YjhmYzlmLCAweDk4ZjVlZWNlLCAweDQ3N2Q2NTJlLAorCTB4YzU4OGRkZjEsIDB4ZGNlYWFkMmUsIDB4MDg5YTkyYzAsIDB4Y2FiZTNjNTUsIDB4OTc4MmFiMTMsIDB4YzBlYWMwYjYsCisJMHgyMWI0YmIzZSwgMHhjMzFkZjU0OSwgMHhlZjgyY2Y1ZCwgMHhkMGZlMGUyOCwgMHhkNzkwYWZmZSwgMHg3MzZkYjE3MSwKKwkweDE2YmJmYTJmLCAweGNjN2FkNGJiLCAweDYyYjVjZWVjLCAweDExZWRlMjBjLCAweGZlY2UxYWVjLCAweDg0Yjc3ZTEyLAorCTB4MDBkMjEwOGYsIDB4N2RlNjBhYmQsIDB4YTNkNzA3NWEsIDB4NjQ4YzJhZWEsIDB4MGMyMjU0OWYsIDB4YWI1OTVhZjMsCisJMHg3MzkzZTNmNSwgMHg1NGY0NTM0NywgMHhhODEwZWVlZSwgMHhiYjk3MmRkYywgMHg1NzZlMDQ2YiwgMHhhOTc1ZjJjYiwKKwkweDgzOTJlMzhjLCAweDc1ZDFhNzI3LCAweDM3YTM5ZjUyLCAweGE1ZGYwMDMzLCAweDg4ZTdlNTE1LCAweDQzN2Q2NTFlLAorCTB4YzQ4NTU3MTksIDB4MjkwZDhkZjUsIDB4ZGRiMGU5ZWYsIDB4NTgxN2RmYTUsIDB4NGI4ZDFhNmMsIDB4YTkyZDQ3YTUsCisJMHgxZTU1YzM1MSwgMHhkNTllOTA1ZCwgMHhiZGY5NDNhNywgMHhmZjlkNDFiNCwgMHhiZWYyZDFmMywgMHg5MGYyYzc5ZSwKKwkweDJkMThkZTlmLCAweDA3MTg5Zjg4LCAweGJjYTUzZmUxLCAweDgxZWYwMjc3LCAweDBmM2FkMjVkLCAweGVhZDY3ZDIyLAorCTB4ZGY3MDBhYmIsIDB4MTE3NWE0YmIsIDB4N2U0Mzk0YWMsIDB4YjhhZmRmMWQsIDB4Y2UwMWEyYmUsIDB4NzUxYmVmYzMsCisJMHhhN2RlMzMwZSwgMHg4ODE0YWRmNSwgMHgwMGIwOTc2ZSwgMHhiMDZkMjdiZCwgMHhhMWRhYzEzZSwgMHg3NzIyYmY3MCwKKwkweGU0ZjU5Y2MzLCAweDk4MjgzZDBmLCAweDEzMjg2ZjUxLCAweDgzZGUyMjFkLCAweDhmYzYxYzZmLCAweDgzZTY1MTdlLAorCTB4MWYyZmFjMTMsIDB4MjI0NmNhZjEsIDB4OWVjYTc1ODUsIDB4OTlmNjgyM2YsIDB4Zjk5NmI3ZWMsIDB4M2Q5NDhlMzAsCisJMHhjNGJmMjA0ZSwgMHg0MzcxODA5ZCwgMHhjOTIyYTYxMSwgMHgzN2IwMzk5MSwgMHhhZDlhNDE4NCwgMHhmOTIwYWY2ZCwKKwkweGU2NmY1NjNlLCAweDU4ZGE2MmVmLCAweGZjNzBiY2EwLCAweGJlNzAxMzMzLCAweDBiYjI3NTEwLCAweGZkZTg3YjkzLAorCTB4OWI2ZDM5YmQsIDB4Y2M1Y2EyMmYsIDB4M2QxNDcwY2MsIDB4MTkzZGY4MDUsIDB4ZjI3ZmZiYzYsIDB4MTZiZmMxNzUsCisJMHgzZmNiYTlkYSwgMHgwYWQzZjI0NiwgMHhkNmZkODFlNCwgMHhkYTM5NjRkOSwgMHg1YWNmZjZhMSwgMHhjMTIxYWU1MSwKKwkweDdlYTdjYWNjLCAweDMyZjg5NDEzLCAweGMzZWQxNWQwLCAweDlmYTRhNTVkLCAweDlmN2VlNTU4LCAweGRkYjg5NDJkLAorCTB4MmU3Y2EwZmMsIDB4ZTJkNmY5OGQsIDB4ZDFiZWZhZjksIDB4ZjQ5NWYyOGMsIDB4Y2FhYmZiMWIsIDB4NWUyODMxMDQsCisJMHhlNjFhMzc1MCwgMHg0ZmFkYTU3OSwgMHg1YmU5ZGU3NSwgMHhlOTAxYmY2YywgMHgxODdkYjgyYywgMHgzOTVlMmFiZSwKKwkweDhhMmQ3YjRkLCAweGNjMWQ3N2VlLCAweGZlZThkZWIwLCAweDNlYThkNjk0LCAweDg3MzNhNGI3LCAweDUzYmJkZDA3LAorCTB4ZjZkOTlmY2IsIDB4Nzc3YmEwYTQsIDB4ZWVmNzQxMTksIDB4ZGRlZTgyZjIsIDB4MmRmOWVmYTksIDB4YmEwOTRlNzQsCisJMHhlN2JlYTc3NywgMHg1NGNkYjA2NywgMHhlNjkzMGZkNSwgMHg5Yzg4ZTBhOSwgMHgyM2Y1NTViYiwgMHhlN2Q1Y2JlZCwKKwkweGJjZmY4ZWFlLCAweDc3Yzc0ODQyLCAweDJlN2Q3ZDA2LCAweGUwNjY4Nzk4LCAweGMxOThlMjhkLCAweDBhMmYyNDdkLAorCTB4M2UxYTQzMmEsIDB4Njk4NGNjMmUsIDB4MGJhMWExNzMsIDB4OTEzOWE0ZTksIDB4ZTM4NmU3ZGIsIDB4YTBiYWRiMGYsCisJMHg5Nzg4ZTMxZCwgMHhmYzZmZTg4YywgMHg0NTJmZTA4OSwgMHg5ZjI4YzRmYiwgMHgxOGZkMTk1MywgMHhhZjMzZWQ1MywKKwkweDUyYmU3MDE1LCAweDVjZjJkYmQyLCAweDdkNjFmM2IzLCAweDQ5NGFmN2YyLCAweGRlZTAxZGZjLCAweDQ2M2ViOGQxLAorCTB4ZjkwMzZjN2MsIDB4YWY3ZTU1ZTYsIDB4NDc2Y2FjNzgsIDB4NWYzY2VkMjgsIDB4MGYzNTMyNTgsIDB4Y2M3ZmNmYmUsCisJMHhlY2UyODMzMSwgMHhmMDdlZmMxZCwgMHhhNzhmM2Q0ZSwgMHhlN2U1NWVmOCwgMHhmYTNiZjM1YiwgMHhmZTAwOGUzNCwKKwkweGY1Yzc5OTNlLCAweGE1OWM2NzkwLCAweGViYTkxZjE0LCAweGY5MTY1ZDg0LCAweDFlYWNlZGE5LCAweDc1ZDQ2NWVmLAorCTB4N2VlMTQ3NzYsIDB4YWIzY2UwNTYsIDB4NjBjOWJmNDcsIDB4ODljZmJjYmUsIDB4YWY2OGUxZmQsIDB4NzQzZGFjZmYsCisJMHg5ZTZkNmQzYywgMHg5OGUzZjg5ZSwgMHgxZWFiZDcyYywgMHg5MWJiNzJkNiwgMHhiOWUxNjYzOSwgMHg1NzVlNDU3MSwKKwkweGFiZTNlN2VkLCAweGU3ZTdhODVhLCAweDFkMWEzMTYwLCAweDljODM2ZTQyLCAweGMzOTZhYjNlLCAweDcwN2VmNTBlLAorCTB4Y2EzZDdmOGIsIDB4YWFkZjkwMGUsIDB4NGMxNzRiN2EsIDB4MTJiN2JiMjcsIDB4MzFmMjM2ZTQsIDB4Nzk3NTczYzgsCisJMHgxN2M5MTM3MiwgMHg3Y2FhZTc5MCwgMHgzYzgwZGU3NywgMHhkZjBlYmZjZiwgMHg0MjZhNzY5ZCwgMHg4MTcwZjM4ZSwKKwkweGRhNzhmMzQ4LCAweGZmZTY5NTM1LCAweGY0NDc5ODE5LCAweDY0MzMzZGE3LCAweGRlN2NmOGRlLCAweGM2NWViZTZjLAorCTB4Yjc1ODBmYjUsIDB4MmViZjdhZTAsIDB4ZjJmNmViZTAsIDB4N2RmYWYyMzAsIDB4MGE3NzVkNzksIDB4NGMyODQ1YmQsCisJMHhhMjcwY2VkZCwgMHg2MzQ2MjVkYiwgMHgzODdiOWUwOSwgMHgxMzY1ZjI5NiwgMHg3ZWFhZTFjNiwgMHhmZDNkZDAyZSwKKwkweDZlM2VlYjdmLCAweGJmNWZmZDQxLCAweGZkMDVhOGZmLCAweGEzZjZlZTYxLCAweDU5NGRiMDE2LCAweDhiNWE0ZWFkLAorCTB4ODVkMDNjN2EsIDB4YmE5ZWY1MWQsIDB4N2ZjMjJlOGUsIDB4NmViOGZiNjUsIDB4MjFkOTVmY2MsIDB4ZWUzZGZiZDAsCisJMHhkM2E3MTcwMywgMHgxMzVmNTkzOCwgMHgwZTc3MGJjNiwgMHhmMjhmZDc4MywgMHgzN2JlZmViOCwgMHgzMDdlZTI0ZiwKKwkweGZiODlmNDE3LCAweGRmODMwMWZkLCAweDgwMWQyMDJmLCAweDVlYmM0MjVjLCAweDM1ZTVmMDE3LCAweGIxYTM3M2I2LAorCTB4ZjUxZTk0MjIsIDB4MWY3Y2YyNmYsIDB4ZTg2N2E4ZDksIDB4ZWY4NWFmYWYsIDB4NTJjNzFjNzEsIDB4NDg4ZGU5OGUsCisJMHhiMjA1ZmI0NywgMHgyN2VkZGRiNSwgMHhmYjYwNDYxNywgMHhmYTg2M2FmNSwgMHgxN2RmODI4NSwgMHhlMjFmYmQyOSwKKwkweGQ2YTgzZmY4LCAweDM1ODBhN2ExLCAweGJlNjk2YjU2LCAweDUyZDdhODNmLCAweDc0ZmJkYTNiLCAweGMxNWUyZjA0LAorCTB4YWUxYzU1Y2YsIDB4MDkyOWE4ZmUsIDB4NTZhMGZkZGEsIDB4NTMwYzdiYTAsIDB4MzFmM2ZiZWYsIDB4ZTBhZjE3ODQsCisJMHgzZDMwNWFmYSwgMHg0YzFhZjQyYiwgMHgzYmY0YzE5ZiwgMHhiZTZiNGU4NCwgMHhjOTFlOWQxOSwgMHhlNGQ1ZWY5MywKKwkweGU3ZGMwMmIxLCAweDU5YTdkZDYxLCAweGUxMWU3ZTkxLCAweGFlMmJlM2Y3LCAweDdmYTFkNjFkLCAweDZjYzliZDMzLAorCTB4MzFlMDAyN2YsIDB4MGI3YWZmNWEsIDB4YmNjMzg5Y2EsIDB4ODc3NmIwYmMsIDB4NzQ4ZGU1YzAsIDB4NTI2MWYyMzcsCisJMHhiZGExOWViMywgMHg5NzFlN2VmYiwgMHg3YWUzZWY0YiwgMHhmYWQwZTNjNSwgMHgzMWFmOGMwNSwgMHhlNTFkMzdiMSwKKwkweDRmMWM5YTUyLCAweDJhYzc0NTdhLCAweDkwNWM1M2Y2LCAweGFmMzE5YmNiLCAweDk2ZWY1NGQ5LCAweGJkNzFlNTM3LAorCTB4NDA4MzkxNDMsIDB4ZTRmZGFlZTYsIDB4YzQ0ZjZkOTcsIDB4Y2IyZjE0N2IsIDB4ZTU1MzQxZTcsIDB4ZmEzMmIyZjYsCisJMHhmNDg1Y2ZhNywgMHg2NzJmNGNhYSwgMHhmODE0M2M2NCwgMHg2Y2ZmNGNiMiwgMHgxZjY4Y2ZkYiwgMHg1OWM3MmQ5ZiwKKwkweGQxNzQzNjY2LCAweDgzM2NjYzc5LCAweDg3OTQ1M2ViLCAweGFiZGY1MmIzLCAweDM5YWU3ZGM1LCAweDNhN2NlZGZkLAorCTB4MjUzNzhkNjcsIDB4YzlmYmUyMjYsIDB4ZDI3ODc3ZmMsIDB4NjBkNmRiYTcsIDB4OWMzNzJmZGMsIDB4ZTBlYzMxZDYsCisJMHgzODFlNzQ1MywgMHgzNWJjNmIyYywgMHg0OTQzOWM1NCwgMHg3YTI1NTdkZCwgMHg2YWVlYjA4ZiwgMHgzYzBhYTUzYSwKKwkweDdkMzlkMGY3LCAweDE3MDFkOTFmLCAweDVjOWYxM2E3LCAweDJkZGVhOWI1LCAweDdiYzY1NGZjLCAweDVkM2VmMjhjLAorCTB4ODBmM2Y3MjcsIDB4OGI4YjE2OWMsIDB4ZjMyOWViMDYsIDB4MWM2NTllODAsIDB4MmVkNjU4NmYsIDB4YWIzNWFmNWEsCisJMHg3NWE5MjE1OCwgMHhjZWZlMjllYywgMHgwMTQ5ZWQ2NiwgMHhhNDU4YmRkZiwgMHgzMDRjZTg3MywgMHg2MDhkZWZkZiwKKwkweGZjOGIxZjI1LCAweDM2NTcyNDFkLCAweDc0OGM0ZGM2LCAweGQ3ODRmYjJmLCAweGQ3YWY3MDRjLCAweGFmMjlmMDQ2LAorCTB4NjFhZGU5NDQsIDB4Njg3Yzg4Y2UsIDB4NGYxMWUxNjcsIDB4ZTFkYmNlMTYsIDB4ZGUyNzU2OTQsIDB4OGVmMGJjNTcsCisJMHgzMzZiYTY0ZSwgMHhkMzJlMmZiZiwgMHgyZDRlZTVkYSwgMHhlYjljNjIzMywgMHhjMmUzZTgwMCwgMHg1Y2Y3ZmUyMCwKKwkweGRkZmJhNDRkLCAweGEwZmVjM2JmLCAweGJmMGQ5NTlmLCAweGFmNjc3OTIxLCAweGVkMWQzOGI5LCAweDMzZGFjMmEyLAorCTB4MWJiYjA4NGQsIDB4ZjUxZDNjZmUsIDB4ZmY2MTBmODksIDB4ZjQxZWJkMjAsIDB4NzI4MDliN2IsIDB4ZDNiZDI0ZTQsCisJMHg4NjM1Nzk1ZCwgMHhkMzU5NzlkYSwgMHhjYmY5MWQzZiwgMHhmNzQwYTZmNywgMHhiOGVjM2U2ZiwgMHhmZGYyYjdhOCwKKwkweDc4NzNkYzg5LCAweGYyZmQxYzJmLCAweGI5YTNmMmIzLCAweGQ0MmNlOTFjLCAweDI0M2FmYWQwLCAweGRkZWIzYmQ1LAorCTB4MGEyYmZmYTMsIDB4MjBkOGMzZDcsIDB4N2UwYTdhZmQsIDB4Yzg2NWEzZGYsIDB4ZmI0YTliYmYsIDB4ZTQyMWNjYTMsCisJMHhkZmY0NjllZiwgMHhiMDcxZjM2NSwgMHgxNWU1YTFlYywgMHg5ZTE2NWY3YSwgMHhlOTkwYWM5MywgMHgzY2JjYjgzOCwKKwkweGExM2ZjMDdmLCAweGViZWZjYTczLCAweGExZmUwMTA4LCAweDNmZGZjNjJhLCAweDJiYTdiYjA1LCAweGFhYjhmODFjLAorCTB4NjdmOTJhNzMsIDB4MGRjMjNjYWEsIDB4ZDFjMzMzZmQsIDB4ZWI0ZGQ3ZTEsIDB4MjhjZmY3MTgsIDB4ODE4ZGRhMzAsCisJMHgxYmI0NGQ3ZSwgMHgxZjdmYWE5OSwgMHgyNTJiMDc3ZiwgMHg3NGY3ODZmMywgMHgxNDg5N2RkYywgMHg2NjZiYWZjZiwKKwkweDc5NWFlZjE0LCAweGU3YTUzNDc1LCAweDIxMjBkZjVmLCAweGZiYzMxOGZmLCAweDZiN2VlOTViLCAweDhjZWM4NmI2LAorCTB4ZmViNTNlOTUsIDB4Y2I4MGE1MzMsIDB4N2MwNTI5ODUsIDB4NjBmOTVjZGUsIDB4MDFiMGU1MmYsIDB4YTJlYzA5N2IsCisJMHg1ZGI5ZjM3YiwgMHhhOTg4NzUxNCwgMHg3Y2UwYTVlYywgMHhmMjhjOTdiMiwgMHgxMzEwMWQzZCwgMHhlMDQyNTdhZSwKKwkweDY5NDE0NzdkLCAweGNhOTc3ZTBkLCAweGQ5Y2U4ODVhLCAweDcyZmVmYzNiLCAweGU0ZDczOGYwLCAweGY4NTUzZTczLAorCTB4MzVmMjMxN2EsIDB4ZTcwNzZmZDIsIDB4ZTc3NmUwZWIsIDB4NDFhYzk0MTUsIDB4NGMzOGRhM2UsIDB4ZTY1Y2FiN2MsCisJMHg4YzZkOTVmYiwgMHgxNmRkY2JlNiwgMHgwNWY0ZjM0MywgMHgwMjk2NzM2YiwgMHg3ODAxN2U1ZCwgMHgwYmQyM2RlMCwKKwkweDM0NDQ2NzRlLCAweGU1YzE3ZjdjLCAweDNkZjNjMDhjLCAweDZiYTgxYzhhLCAweDM2ZWZhNzBiLCAweGM1OGJjZTY2LAorCTB4NDhjZGEzNzMsIDB4ZjlkZWQwZjcsIDB4OWM0NmE5OGUsIDB4MzhkYTdiZTcsIDB4N2RmZDI5ZmYsIDB4MTYzOGI1ZDgsCisJMHhhZTgyNjlmOSwgMHhmMjg3NmY1ZiwgMHg1MTMzY2VlNCwgMHg3ODRkZjdhOCwgMHhmMjJjN2U3ZCwgMHhmZTc4NzBlMSwKKwkweGNmMTkxOGZkLCAweDFlMTJjNDg2LCAweDcwYmQ4Nzk3LCAweDAwNGY2Y2EyLCAweGJhMjdlZTdlLCAweDg3ZmE5ZGU4LAorCTB4NmZkMTE4MWEsIDB4NTZmZmFiZjcsIDB4YmU3YzdjODcsIDB4ZmI4Y2MyMzMsIDB4MjMwNzE3ZTYsIDB4MGJjYWJkZTgsCisJMHgzZGU4MWE2ZiwgMHg3ZGY5NWE5YSwgMHg3ZDc0MmZkNSwgMHg3Y2JmNDg3MywgMHgyMmY3NGI1ZCwgMHg0N2ZlNmZkZCwKKwkweGZiYTNmMjJiLCAweDNiOWQwMzU1LCAweGMzNzNhODdjLCAweDZhZjdkYzQ1LCAweGMzOWM2NzNiLCAweDVmNmI1Njc3LAorCTB4YzNmMmRiZmEsIDB4ZDI1NDg2Y2EsIDB4M2ZmODE0OGIsIDB4YmUyNzQ2YmMsIDB4ZTQ1ZTdiZjMsIDB4OGVhMWUyNzIsCisJMHhmNzdkMjE3ZiwgMHgwYjk3NmJhMSwgMHgxN2NhN2NmMCwgMHg0NGM3ZmYwNywgMHhiN2VlNmI5NCwgMHg3OTQ0NGYyZSwKKwkweGU1YzVmZWU2LCAweDdlZWU1ODg5LCAweDRhMTNjMjJkLCAweGMwNWViOTVmLCAweDdlY2EzZWZkLCAweGE4YWVmNjk5LAorCTB4OTBhZDBmZjIsIDB4NWQ2ZDIzZTksIDB4M2QwN2JkMGIsIDB4N2IwMmU0ZTEsIDB4MTMwZmJiZTAsIDB4YWM0ZTM0YjIsCisJMHg2NWI3ZTEzZiwgMHg3YzA1ZjdiMSwgMHhhNDU3YWViNywgMHg5M2Y4ZTMzOCwgMHgwMWQ1MTE2NSwgMHg4MTRmNzk3NCwKKwkweDdlMmZmMTRlLCAweDkzMGViZjIzLCAweGYwMTljN2RmLCAweDc3ZjJmNGUzLCAweDhhZjYzNjdmLCAweDFhYTM3ZGZjLAorCTB4ODNhMWVlODEsIDB4NWVlNDMyZmUsIDB4OGFmZmFkMWEsIDB4ODhkZjdhNTgsIDB4YzczYmNlODksIDB4OGIzODQ3OGMsCisJMHgzZTYyMDVkZSwgMHgwMGNjZDFlMywgMHhhZjcxNjkzZCwgMHg3NDAwY2JhNiwgMHhlODY5ZDE1NCwgMHg1N2JlZmQyMiwKKwkweGFjYjA0MzNjLCAweGYxNzNkZDNmLCAweDIxMzRjOGQzLCAweGU3MjY3Zjg0LCAweGUzOTQzNGQ0LCAweGY4MWE3ZWMxLAorCTB4OGFkZTIyNDUsIDB4NzFlOTU1YmUsIDB4YzFmZTIwYTUsIDB4MTVhNTliZmUsIDB4Mjg3ZjkwNzcsIDB4ZDY5MzdmZDgsCisJMHg4ZjY2NmEyYiwgMHhlOWRmZjdjNywgMHhmNzhjMmYzYSwgMHg4YmYyMjM2OSwgMHhmYWUyODdhMiwgMHhmZmMxMDgxZCwKKwkweDM5NzBjNjZiLCAweGJhZDVmMGE2LCAweDVkZmYxZTVlLCAweGNjNmE1YmQ3LCAweGU2NTZiNDg0LCAweDlkYjAwM2FiLAorCTB4NzVmZGEwZmEsIDB4YTM3N2YzOWQsIDB4YjVkZDYxMWYsIDB4NjA2MzExNDUsIDB4M2JiZGQ2YmUsIDB4ZmM4MTNkOGYsCisJMHg2NjM1MmU2ZiwgMHhlZWQ3NzdlMSwgMHgxZmNjMmUzMCwgMHhmZWUwOTdhNCwgMHhmMmUxOGNhNiwgMHgxODRmNDA3MiwKKwkweDk3Y2JkZjY2LCAweGVkNWJmYWYxLCAweGU0NjMzOTdmLCAweDg3ZmY2Y2YzLCAweDg3NjA3ZmVmLCAweGVkYzMxZDhmLAorCTB4NGZkYzI1ZjAsIDB4ZTBmMGVkYzIsIDB4Yzc5MTQzN2QsIDB4NzkyZWJiNGEsIDB4NjNjYTg3OWQsIDB4YzA0ODc3ZmUsCisJMHhlYzc5MjY1ZSwgMHhiZDUxMjMxYSwgMHhiMWI5Y2VlNCwgMHhiYmJmNDc2NCwgMHgwZDMyNTYyMCwgMHhiNDQzM2Y2ZCwKKwkweDg3ZjI2MjZiLCAweDcxZThhZmI2LCAweGE4ZTM5ZjZlLCAweDg3MWNlZDExLCAweDE3NDlmYjk2LCAweDk5YmVmNDA4LAorCTB4OWRiOWY3YTIsIDB4ZWVlM2U5MDIsIDB4ZWIxZjlkNGEsIDB4MmVmNTc4MjksIDB4ODVkNTdlZTAsIDB4NGMzZjlkMGUsCisJMHgxNTBmZDQxOCwgMHhkY2EwNzFmZCwgMHhhMmI5NTAyZSwgMHg2MzdhMmE0ZiwgMHg3MWZiOTNhZiwgMHhlNWU3OGMxNywKKwkweDE2Yjk4NmI3LCAweGQ4N2Q3Y2UxLCAweDEzZjk0NjE1LCAweGM2N2NmMTI2LCAweDAwOTM0NzljLCAweDgxM2RmNDVlLAorCTB4ZmFjYmZmMTEsIDB4YzFhNzQyYTQsIDB4Y2VhNWU2ZmEsIDB4ZDdiZTFiOGMsIDB4NGZhNjRkYjMsIDB4ODM1MmNmODUsCisJMHhiZmQ5NDNmOCwgMHhkZDM5ZjM5YSwgMHgxZGZlZTFkNywgMHg3ZmY3ZmI4YiwgMHhlMGYyZjRhYSwgMHg3ZWZmNjE3NiwKKwkweDQ2NmZmMTA4LCAweDFmYmUxMjFkLCAweDE5ZDE1YmZmLCAweDRhZmYzZWNhLCAweDVlZmUwYmQ2LCAweDIzZGViZjU5LAorCTB4NzJhZjg4MjUsIDB4N2RiODc2NGUsIDB4NmZkNjRlYjUsIDB4Y2U2ZjJiODYsIDB4YmNmYzdhZmYsIDB4ZGZkZjFlNDcsCisJMHg4ZTc3OWY4YSwgMHg5ZjQzYmZmOSwgMHhmNTBiZDAxZCwgMHg0Nzc5YzdhMSwgMHhjNjRmYzk0MSwgMHg2Yjg2YmNjMCwKKwkweDczOWU3NDNkLCAweDFlY2RmN2I4LCAweGIwNTVmNTk1LCAweDdjNzQ1NTczLCAweDQxYWY0NTM0LCAweGMzNWRjOGJiLAorCTB4ZDFjZDAzZmQsIDB4N2VjOWFmZDIsIDB4ZjdhNWFlMzksIDB4ZWY5MjFlNTcsIDB4ZDU3ODNlNzMsIDB4ZWEyZDY5NGMsCisJMHhkOTJlOTBjOSwgMHhkOWRlOTI3YiwgMHhjNmEzNTI1ZCwgMHhiNzdkMTliZiwgMHgzNGFhZmRmOCwgMHhiMTU3ZWI4YSwKKwkweDU1MmJmMjMyLCAweGYxOWI0Njc1LCAweDdjNzM3ZmJjLCAweDJiZTQzMWZiLCAweGI0YWQ2ZWRmLCAweGM2ZmViMDNiLAorCTB4MjM3ZDcyZDEsIDB4NDRkNWI3ZjcsIDB4NjE4ZmRmZDMsIDB4OTU0MDdhNDEsIDB4NTdkZjU4MjcsIDB4NjQ1MzA1ZWIsCisJMHhmYTcwZDEzZiwgMHhjM2JhMmZjMSwgMHhkMWU5NWNiOCwgMHgzOWQ3OWYxMiwgMHhkMDU1ZGZmOSwgMHhlMGI5NzI3NywKKwkweGJmMjMwODZlLCAweDg4NmJkYTA5LCAweDgyMGQ2N2Q3LCAweDVmM2RkZjFmLCAweDRjZmJkNzI5LCAweDEzZmYyNWVjLAorCTB4Y2FhMGQzYzUsIDB4MmNhN2NlYjksIDB4ZDRkZmIyMGUsIDB4YmI5NWEzZjEsIDB4MzM3MjRiN2UsIDB4NzMxNDhlMzgsCisJMHgwZDBiOGU0MCwgMHhkMjI2OGRjNCwgMHg2MDk1OTA3OSwgMHhiYzlmZTI0ZiwgMHg1ZGQyNGI3MiwgMHgxZjgwZmYzOCwKKwkweDcxZGM5M2YzLCAweDk3MzBmY2E4LCAweGZiMjIzZTdhLCAweDNjZWJjOTczLCAweDdlMjQzM2ZlLCAweGM3OTMzY2Q0LAorCTB4OTVkZGYwOGYsIDB4YTVjODdlMTAsIDB4YzUxZDhmMjMsIDB4YjM3NGEzYmYsIDB4Yzc1ZDUxYjgsIDB4MzI0N2JhNDksCisJMHhkMjA4ZmY0NCwgMHg1MThkYWUzYiwgMHg4YTQ3MTlmYiwgMHhiMjNiOGZkYywgMHg3ZmEzMzA1MywgMHg4ZjNjYTQ2YSwKKwkweDljMzFiNzdmLCAweDdmZTllYWY0LCAweDc5NDU4ZWE4LCAweGY5ZDNhY2EwLCAweGNmNWU3Y2I5LCAweDA0YTU3MDdmLAorCTB4MDdmODliYmYsIDB4ZTMwNjFjZDEsIDB4ZjUwN2M1ZmEsIDB4YjBlMjQ5YmYsIDB4YmJmMDk0NjQsIDB4NjNiNDA4ZmEsCisJMHg3NTYxZmZjZSwgMHgyZmViY2UwNCwgMHgyZmJmYzUyMCwgMHgzMTY5ZGFmMSwgMHgyYmQyM2ZhNCwgMHgwZmQ4MmRjYiwKKwkweGJmYzgwYmEzLCAweDQ1YTVmYjJjLCAweDA3MjMwZmQ4LCAweGRmYzEzOWZkLCAweDZiYmY5NzZkLCAweGZjODUzMzA2LAorCTB4ZjhmM2FmOTgsIDB4NmI4MjczN2UsIDB4YTZjZmMxMjYsIDB4YTYxZWZlMzMsIDB4ZmZjZWZjODMsIDB4ZmU4ZDc0MDIsCisJMHgyYzE4M2NhMiwgMHgxYTdmOWZjNiwgMHhiYzYxZDZjZSwgMHhmNWRlMzlhOCwgMHhiM2QxZjEzNiwgMHgwOGY5MDkxYSwKKwkweDkzMzhhN2JlLCAweGZiNDRiZjZmLCAweGM2MTk0ZTIzLCAweGZjZjQwYTczLCAweDBjZWE0NjVkLCAweGJjYjQ2YmQ2LAorCTB4Yzc2MDA5OGUsIDB4YjAwOTNjNjIsIDB4ZTZmMTgwNTksIDB4NTNhZTM5M2MsIDB4NmM0NGNlMTAsIDB4NmI5ZDQ5ZmYsCisJMHhmOTk3YmUxMywgMHg1ZjY4Yjc2NCwgMHg4ZjYwNGM0YiwgMHg4M2JmNzdjNSwgMHg4MzgyNGJlMywgMHgzODk1YzVjNywKKwkweDFmMWYxMjkzLCAweDYwMjRjZTJlLCAweGVlOWMwNTNmLCAweDg3MTViOWY4LCAweDI1NzM3MTgwLCAweGU3YmVjNDllLAorCTB4NjM1NzIwYTQsIDB4ZjdjZTg3YjEsIDB4NDhjODUzM2YsIDB4NzE4YjdmYWUsIDB4MjFmOTI1OWUsIDB4YzgzNTQ4ZTIsCisJMHhkNWNmMjQ2MywgMHgzOTRkYzU3MSwgMHhmZTlkMTBhZiwgMHgzZGM0ZjFiNSwgMHgxY2I3ZDg2MywgMHgxM2YzZTJmZiwKKwkweGU4ZjhmNzhjLCAweGI3YjIxNjRiLCAweDUxZWZmYWJlLCAweDVlNzZjZmI0LCAweDQyZjBmZGE2LCAweDhmYmU0MWJmLAorCTB4ZWNmZGM3ZDAsIDB4MmZmMjNhOWQsIDB4MmRiYjAwNWMsIDB4M2Q5ZjYwM2UsIDB4M2RkYmNmOWEsIDB4ZTg5NTM5ZDQsCisJMHg1OTZmNDBmZiwgMHgyZjNmZDYwNCwgMHg3NzdjNmZlNywgMHg0OGQ5ZmNjMSwgMHhiZDIyYmQ5NywgMHhlM2U3OGIwNywKKwkweGQwM2IwZWQwLCAweGJkNDA0ZTJiLCAweDk3NWM1YmU1LCAweGIxMDk4ZmVmLCAweGQwZjBjNjJlLCAweGNiZTQ0Y2VmLAorCTB4YzA1Zjk0N2MsIDB4MDdlYTYzZTksIDB4ZDc3MmZlZGMsIDB4NTk4YTM4ZjMsIDB4NzJlZTBiOTYsIDB4NjNjMWM5M2QsCisJMHhmMTQxMTYyOSwgMHhjNTQzNWI5ZiwgMHhhN2VmNWU1OSwgMHg4NTZhYTM3ZCwgMHhiZTFjZjc0MCwgMHhhM2E1OWM3MSwKKwkweDgyYjdkZTViLCAweGQzZTVkM2ZjLCAweGU3MGU2ZTQ5LCAweDliODgwZWI3LCAweDE1YjdjYWFiLCAweDIzODc5YzBjLAorCTB4ODE1NDc1ZmYsIDB4ZTMxZGM2OTksIDB4YjNjMTJjMjksIDB4YmZmOGNhODcsIDB4NzNiODc1YzUsIDB4ZmIzYTA4NmMsCisJMHg2OTVmZGIxNiwgMHg5ZmRiNmVmZiwgMHhiNmRkZjc5MiwgMHg2ZTNiZTZiZiwgMHg3N2RlNmQ3ZiwgMHhmMWRlZTcxYiwKKwkweGY1N2ZlMzFkLCAweGNjZmY2ZTNiLCAweGFmM2YzYzc3LCAweDczZmZmZmU1LCAweDcwNzAwMzAwLCAweDVjZjgzZjljLAorCTB4ZGZiYzcwNDAsIDB4MWYzZWZjNzAsIDB4MzYxMDZkOTYsIDB4NmE0MTc3ZjcsIDB4NDJiNTdhOGMsIDB4NDYyZDUxMDAsCisJMHgwODc3YTJlZiwgMHg3MWUyNGQ2NiwgMHg0NjY1OGRiMCwgMHhmMDYxMGVmZiwgMHg1ZjMyODA3YywgMHgxZGI5MGI0YiwKKwkweGU4YmZjZTYxLCAweDRlNzk4NThiLCAweGM1OTZmNDc1LCAweDEyNmM5ZmEyLCAweDgyZmQ4NzdmLCAweDEzMmFjZWZjLAorCTB4MThjZWY0Y2QsIDB4ZmJjMDRjZDQsIDB4YTE2MWNkZjEsIDB4NzI2MWFhZTMsIDB4MjNlZGMzN2IsIDB4ZGM5NjE3Y2YsCisJMHhmZTllMzYzMSwgMHhmYmM4NDM2YywgMHhmZWM4MmYxZCwgMHgyMzA3NzM0NywgMHhhNTEzMjRiZiwgMHhhZmQ0Nzk4NCwKKwkweGQwZmE4MDk0LCAweDNmM2MyMzg4LCAweDc2Mzk4YmFhLCAweGRhNTI1ZTEwLCAweGE1MDdiMjNjLCAweDhiNmZjNDM0LAorCTB4OTk4ZGVmMWMsIDB4ZmU4NjlkOTksIDB4MGJkMDE4ZTgsIDB4MTRmODFlMzEsIDB4OGUyOTA1YzYsIDB4NGE3YWE2NjUsCisJMHhlNThjMWY3ZiwgMHgzMWQxNmRmZCwgMHhlNTViZWU4MSwgMHhhYzRjZjNmMiwgMHg5ZTJhYTBmOSwgMHhlYmFlOGVmNywKKwkweGM1MDI2NWUzLCAweGZlMjM5NmYzLCAweGU1NzRkMmJmLCAweDg5OTM0Y2VmLCAweGZmMzdlNjE4LCAweDhjZTI5OTgwLAorCTB4NDhiZDI2MjcsIDB4ODk1Njc3N2YsIDB4ZjMzMWFkZWYsIDB4NmVkMTg3MmEsIDB4MWNkNjNjMDYsIDB4YmJmNDQ3MWMsCisJMHhmN2E0ZDBlNCwgMHg3NzMzZTlmMSwgMHg3NTBmNjhhNiwgMHgxN2YxNTE0ZiwgMHgxZGZkOTY5YywgMHg4OTQwYmY4YSwKKwkweGY2NWVmZDZiLCAweGZlODg3YzkzLCAweDIyMWZiYTE3LCAweGFiMWRlYTUxLCAweDI3ZjdiNmY5LCAweGZjMTBkOGVmLAorCTB4ZmVlMDQ1YmYsIDB4YjhhZmRmMjEsIDB4ZGU5YzY4N2YsIDB4NmU3ODExOWUsIDB4YWYzY2IzNzIsIDB4ZGM3OGJhY2IsCisJMHhlY2Y3ZjE0MiwgMHhlZTMzYzc5MywgMHgwMTk3NmQxMSwgMHg0ZDcxZDJmNiwgMHhjZmI4ZjQ2MywgMHgwOTRhNmI4ZiwKKwkweGUxYzBiNGM3LCAweGYwN2RlMGQ3LCAweDM1ZmJkNWM1LCAweGEyODVmYWNhLCAweGIyYjFkNmEzLCAweDlmYTdhMzFmLAorCTB4MTJmZjdhZTIsIDB4NjBmZmU3MTQsIDB4MzBiZjNmMmMsIDB4ZjFlMzkwYWYsIDB4MDgyNGQ4MDEsIDB4MWIxMmM5YWYsCisJMHg3MTFjN2Q1MSwgMHgyYTFiNTk4YiwgMHg3NjA1NTQ5ZSwgMHhhY2I5ZTIzMSwgMHhjY2FkZTM5OSwgMHgzNDk3NTU3NywKKwkweDczMzlmYjE1LCAweGQzMDliZmI0LCAweGE5YjQ5YWEyLCAweGJkYWY2ZmU0LCAweDliZmE4NGQ4LCAweDYzZTVkYWZiLAorCTB4NGNiZjkzYjcsIDB4NzEzZGExMmYsIDB4ZWZkYTlmNGYsIDB4YTVhMzBhYjYsIDB4ZmQyNzg0ZjEsIDB4MGNkZjVhOWQsCisJMHg3MWUzZWM5MSwgMHg5ZmEyNDQzMywgMHhiMjMwYWE5OCwgMHg0Yzc0NjM1ZiwgMHgyZTc4NDI2YiwgMHhjYThhOGJkNywKKwkweGNjMjJhNmUzLCAweDNlOTM0NDE2LCAweDQ1MjNkNDU4LCAweGU4M2Y5N2RmLCAweDUxOTk4YjA3LCAweDc0ZjM4ZjFmLAorCTB4ZTJhYWY4YjMsIDB4Y2MzNWJiNGYsIDB4ZTdhZTFhZjEsIDB4NWQ1ZjFiNWYsIDB4NzRiYmNlZjksIDB4OTcxOTU0YWUsCisJMHg5YzRhMmYzMiwgMHhhYWY4Yjg3NCwgMHg1ZGMxY2U3MiwgMHgyZTc1NDU3ZSwgMHg0ZmY2MmRjMywgMHhiOGUzZmY0NywKKwkweGYyZjQ2NzgzLCAweGZlMzM0YjM5LCAweGZlMjU2MTFkLCAweDhiZjVlZTNhLCAweGUyNTU3NzE0LCAweDQ1Y2Y2ZWFjLAorCTB4M2JlMWFiZDIsIDB4MGUzZjdlM2QsIDB4MDYyMTNmOTYsIDB4ZjFlMjE3ZGYsIDB4OWVmMTU3ZDcsIDB4ZmZlZjFlOTQsCisJMHhkNGJlZTk5OSwgMHhjNWZkZjIxYiwgMHhlNjNmMTg0ZSwgMHhhMWNkZTliZiwgMHhhNzZiY2JiNCwgMHg5OGI3OTBmNCwKKwkweDQ1ZTc3NzUyLCAweDM4N2VkNzhhLCAweDUzZWYxZDU2LCAweGI0OTc3OWUyLCAweGQ1NjMzM2NlLCAweDBlMDkyM2U3LAorCTB4YzM2OWY3OGUsIDB4ZGRjNmJmYjksIDB4OTdiZmEzYTMsIDB4NDhjNzdlZTEsIDB4NzNhNGJiZjIsIDB4ZmFlYmRkMTksCisJMHgyNDZiYTRmMiwgMHhmMTg3NWRlMiwgMHgzOGJhMDBiNiwgMHhlMTg3YjBlZiwgMHg5ZGU3NjEzYiwgMHhiMzhjMzBmNiwKKwkweGE3M2VlYjhkLCAweDc1MmZmM2M3LCAweGZkMWVhZjYyLCAweDEyNzE4MDYxLCAweDFmNzQ0ZDFlLCAweGY3Y2ZjOGI4LAorCTB4ZGZkMDk2NzYsIDB4NWM2OWJhZTMsIDB4MTM2ZmUzYWMsIDB4ZTU5ZmZiMTcsIDB4MDAyMTAxNDEsIDB4MDAwMDIxMDEsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgxN2I1ZmYwMCwgMHg2NzUzNGM1ZCwgMHhiN2I3N2NmNCwgMHgwYmRmOTZlNSwKKwkweDcyMjIzZjJhLCAweGEyOTg2MmMxLCAweGE3NDBjMmRjLCAweGFjNzQxNjMxLCAweDRhOGE1YzEzLCAweDY2YjUwMTAyLAorCTB4MmQwOTkyMmUsIDB4Y2JjMmNjZDksIDB4MDE4OTNhZDIsIDB4YjhiMmMzZGQsIDB4MjZhOWYzNjQsIDB4ODdiNmU4ODMsCisJMHg2ZWFkOTNmYSwgMHg4NDBiMGI1NSwgMHhjM2UyMmUyNSwgMHg1MmM5NzE5YywgMHhiYTMzMzMwZCwgMHhkOGRjNjI4MSwKKwkweGRmMzlkODVjLCAweGQ4YmRiNWJkLCAweGE0ZGEyY2JkLCAweGRmM2YzZDM5LCAweGZmZjlkZjM5LCAweDA3MzAwMDBhLAorCTB4Yjk1NmU3ZGEsIDB4Zjg0Y2U3MDYsIDB4ZmZjNmNmYTUsIDB4NGZhNDNkMGYsIDB4YmRkZGUzOGMsIDB4MTcyNmViNGIsCisJMHgzZWJiZjFjNCwgMHgwMzY5MzVjOSwgMHhjZTljNWRmOCwgMHhmNjAwMmI5NCwgMHgxYzVhY2U4NywgMHhhY2NmMWYwNCwKKwkweGVkZmMyMTc2LCAweDRhYjVkZmMyLCAweGQyZjc4MDNhLCAweGVlMjAyZDRjLCAweDk2YTY2NmZkLCAweGQyYWZkZWY4LAorCTB4NGZlOTAyN2EsIDB4OGVkNzdiZGIsIDB4NzAwNDVlOTcsIDB4MTA2YjQxOTYsIDB4YzEyZTU1ZjksIDB4YjhlMDgyNzEsCisJMHg0NTQ2ZmFjMywgMHgyNWMwNmU1YywgMHg4MGZjZTkzOCwgMHhlODliMzRhZCwgMHhkOWE1NWNjNywgMHhmNWY0MTM3YiwKKwkweDAwNjc0NTM5LCAweGRhYWYzOWU5LCAweDA5ZjQ4OWFjLCAweDA2YTAxOWJiLCAweGMxNWMwY2U5LCAweDU1NmJmNjI0LAorCTB4N2ZkZmRiODEsIDB4NGE0ZjJhZDIsIDB4ZGJmMTFjN2EsIDB4ZTAzNmNjMWQsIDB4M2M4MTUwZGUsIDB4ZjdjNzFlNTksCisJMHhmYzAyOGZkMywgMHhkNDIyNjY2ZSwgMHhiOWU5NzQwMiwgMHhkNzcyNjRiOCwgMHgzYmFmYThhYSwgMHg1MjgxNmEzZiwKKwkweDVjNWI0Y2EyLCAweGRmNWUzMGFiLCAweDEyYWNmZDRiLCAweGJlZmNmODYwLCAweDE3MDU2OGUyLCAweGEwMTcyMDk1LAorCTB4ZTAzNzNmNGQsIDB4YjE5YzViZGMsIDB4M2Q3ZmMwMTAsIDB4NDY5OGNhMDUsIDB4NGFkZjkxMTMsIDB4MmE4ZTE0M2YsCisJMHhhNzY5ZGEyMiwgMHhiNmU1Nzg1ZiwgMHg0YzI3ZjdmYywgMHhjZGJhMTFhYiwgMHhiZGMyNjhmZSwgMHhjMzgyOWRkYSwKKwkweDJlZWRjOTlhLCAweDc5MjBjZTZkLCAweDIxMmZjZTMxLCAweGI3NGJkM2E1LCAweDUxY2MyMmFkLCAweGY0MTNlNDI4LAorCTB4MDI1YWMyMTcsIDB4MzZhZGE4ZDIsIDB4MDQwNmVmNmUsIDB4N2NhMWIwN2UsIDB4YTQ4ODUzOWIsIDB4NzBkNjlkYTAsCisJMHg2ZjUwMDQ0YSwgMHhkZjA0NTM5NSwgMHhjZDdiMDg4YiwgMHg3YzQ2MTI4MSwgMHgyYmU3MjZmMSwgMHhiZjExMzY2ZiwKKwkweDA0MmFhZTRmLCAweGNiZTdlM2Y0LCAweDA5NDE3OTE2LCAweDM0NjRkZmJmLCAweGYzYWE4ZTIxLCAweDNjNTJmZWQzLAorCTB4OTUzMTc2YWYsIDB4MzRlZjZhZGMsIDB4NDE5M2YxZjIsIDB4ZTNkNmVlN2UsIDB4ZmMzNDMzYjIsIDB4NWZmNzIxNzIsCisJMHhjYjllMDEzNiwgMHg4ZTM4MDMxZCwgMHgxOGY2Nzc3NiwgMHg3NTZlZWRjZiwgMHgzZjc0NjFkZSwgMHgzMzdmYTBmOCwKKwkweDkwNGQ4MWNhLCAweDZiZGU4OTA3LCAweDNiM2FhMzk0LCAweDAwMWZmMThkLCAweDQzZDYyNjcwLCAweDBkNDFkNTM3LAorCTB4ZTdlMWM2NDEsIDB4NDVkNTEzZTgsIDB4NTgyYTA2MTUsIDB4YmYzNzNmMTEsIDB4Zjk3NDQ2N2UsIDB4ZjA2MmZhZjksCisJMHg1MTE3ZjEwYywgMHhkODBkNTY3ZCwgMHgwMjRkYmYyOCwgMHhmNWUxMDE5NCwgMHg5ZjQxMmQ5MiwgMHg5ZWI5MTU1ZiwKKwkweGZjMDE2NTBmLCAweGRlMTdkNzI4LCAweDdlMzBjODNlLCAweDkxNWY4ZjdkLCAweDRhNmU1MDVhLCAweGQyY2E5N2FlLAorCTB4MzJmN2I4ZTMsIDB4NDAxNjUzZDYsIDB4MDM2Y2YwZjUsIDB4OTg1OGZiYzUsIDB4Nzk0ZDE1ODEsIDB4MjhiZWYxZjMsCisJMHg2ZWIxN2Q1NywgMHhiYzRlYWQ5YywgMHgzMWRmZTZhNywgMHgzYTQ0ZjljYywgMHgwZDlhODFkNSwgMHg2MTIwNWY5YSwKKwkweDU4MTdmY2JjLCAweDU1ZWQxMDYwLCAweDQ5MWMzZDM1LCAweGIyYjlmOGEzLCAweGVjODUzMmQ1LCAweDIzYTUwZWQ4LAorCTB4NmIxMjZkZWUsIDB4M2MyZWUxMTgsIDB4MTYwZWY4NDAsIDB4ZjZlN2YwOTAsIDB4MDA1YjlkMmIsIDB4ZDhiNzU0ZWQsCisJMHg1YmRjNTJhZiwgMHgxNWFhY2MzYSwgMHg0MGRhZGU4OCwgMHg1MDU5NmJmNCwgMHhmZjEyMjkzNywgMHhjNGE5N2JjNCwKKwkweDU1YWE2NzJmLCAweDllYjNiZTIxLCAweDQ0NWY4ZGY4LCAweGFkZTdhYTQ0LCAweDc4NjVhNTE0LCAweDhkMjhjYmI3LAorCTB4ZWFjMWIzN2QsIDB4NTUxZjUwMGUsIDB4ZjQxMWEzMzcsIDB4MzU4NzQ3NmYsIDB4ODRiNWZlNDAsIDB4Y2U5MGNkOWIsCisJMHhiZWEwNDFlYiwgMHhlZGNmNWI3YiwgMHgzMjhmNDViNywgMHgwOTlmNDhhMywgMHg1ZjkxNjc1NywgMHgxNmQzY2MwYiwKKwkweGVhMzU2MTE1LCAweDc4NDFjODJlLCAweGIwMDViZWUxLCAweGI0ZTJiYzFmLCAweDczYjk0NjQ1LCAweDA1YWM0YzNlLAorCTB4YzQ5ZjRiZTAsIDB4ODMyN2M4NjEsIDB4ZDdjMDM5NjMsIDB4YzMwZTdjYmUsIDB4MmZkMzg1M2UsIDB4OGMzOWNhZmEsCisJMHg0NzBlNTRmOCwgMHhhODM1NmI3YywgMHg5NTllM2NjYSwgMHhkZDAyZmJlMSwgMHg3MDU5YTcyNywgMHg3ZTZmOWIyNSwKKwkweGY5NjIzZWJkLCAweDI5ZWYwYmFhLCAweGJhM2U3YmE2LCAweDkzOTYyZWVhLCAweDVhMjBjN2M4LCAweDZhZDYxNDJjLAorCTB4NjczMGM5ZmQsIDB4MDZjM2U3NWUsIDB4ZTg4MWUzYjIsIDB4NjBhNzNhNjEsIDB4NDYwZDYxYmUsIDB4ZWYzMDg0MjEsCisJMHhhYTZmZWJiZiwgMHhkOTZmOWI1MiwgMHhmMTkzYjgwMiwgMHgwNGZhZjQ2NywgMHgzY2QwMjI4NywgMHhmYWQyNGI3YSwKKwkweDVmYzU3ODdmLCAweDQ4NTI5ZTNjLCAweGYzMWViMmI5LCAweDQxMzcxOWU2LCAweGQ0OGZkMjBhLCAweGJlN2Y3MzZiLAorCTB4NGYxOGViOWUsIDB4YzBkZGI4YzAsIDB4Y2Y5YzEyNzgsIDB4Y2JmOGI1NmYsIDB4NzRhZDFmMjgsIDB4YTdlNzI0OGYsCisJMHgwYWM0ZmFmNCwgMHhiNDMyYmIzMCwgMHg0ZmJjMzI5YywgMHg2MDBlNmM0NywgMHg4ZjMwYjIyMCwgMHg0OTE2MjExZCwKKwkweDE5ZGYzZWM1LCAweDI0NDc3NGRlLCAweDk2ZTBjM2Q4LCAweGQ3M2M3ZTcxLCAweDQ2ZTZkODdkLCAweGI2ZjM4OWE1LAorCTB4ZjkyNjhkMzMsIDB4ZDU0YTVjMTMsIDB4MzQ1OTJjZTIsIDB4ZjZkNTZmZDgsIDB4OGI1ZDkzNWEsIDB4YjU2ZTBjNzMsCisJMHg5NDcxNzU2YiwgMHhmYmViMDU5YSwgMHgzODE2NzllOCwgMHhhOWU3ZmQ4OCwgMHg3MzRlYmIxOCwgMHhkMDAxY2YyYywKKwkweDkzYzdjMzhiLCAweGQxMzExZTlmLCAweGVmOTkwZjNjLCAweGQ4ZTM5OTNkLCAweDBjOGE3OTFmLCAweDM3OTQzOTFkLAorCTB4NDFmNjI2MGMsIDB4MjQwNzdlODEsIDB4NjM5NDZkYzAsIDB4NmU2MTFjOTEsIDB4MTkyZGNhMjUsIDB4OWY3ZDI1OWYsCisJMHgyZjZlMTVkOCwgMHgwMTkwNTc3NywgMHhmZTA0NTBiYSwgMHg0NjVmMzQ4MywgMHgxYTc3NTAyZCwgMHg2MzlkNzdlZCwKKwkweDNiZmE5MDcwLCAweGY3MDUwMmUwLCAweDFiZjFlOGZkLCAweGRkMjE0Zjg3LCAweGI0Yzk4ZTczLCAweDU3ODNiYThlLAorCTB4MTZlZjllZjksIDB4NzhmZjc4MjcsIDB4YmMyZDc3YzIsIDB4MzUzNzgzMWUsIDB4MDIzOTg4N2EsIDB4NDAzYWYyNDksCisJMHg2ZWVkMWRmYiwgMHg2ZTY4N2Y0NiwgMHgwNTMwMWY3NCwgMHhjMzZlZDA1MiwgMHhiZGFmYWQzOSwgMHg0MTQwNGIwZSwKKwkweDFkZThhYzdjLCAweGU3OWRmMDkxLCAweDFjZDFlNDE5LCAweGE1MTYyNjUzLCAweDE5ODBmZjExLCAweGFmZGMyNTAyLAorCTB4ZmQ4NGJhYTYsIDB4ZmM4NTVmODQsIDB4ZDhjZmVkOGUsIDB4ZjRjMGYxZmUsIDB4NmJkNTIxNTgsIDB4MGEyMzUzMjcsCisJMHg4Y2I3M2ZkZiwgMHg5MjJmMDVmYiwgMHhlZDJmZGYxYiwgMHhjZDMzNjFhMSwgMHgwNjQzZGMxYiwgMHg4NjhlZGRiOSwKKwkweDcxM2YzNDNiLCAweDRiZTkxOGNmLCAweGY5ZTdkZjBlLCAweDUzYWYyODgwLCAweDdlMDYyZmRjLCAweGUxNjMzZDhkLAorCTB4NTgwOTJjNmQsIDB4Mzg3MzE1MDksIDB4Y2E1NTM2Y2YsIDB4NmVhZGRmM2MsIDB4MWYxOGRjYzYsIDB4OTE3NTcwNDksCisJMHhjOTkxNzA5ZiwgMHhjN2U3NmYzNCwgMHhmNWFlZDFhYiwgMHg0MTlmYTM0MSwgMHhjODc3ZTYyZiwgMHhkMGM3ZDVhMiwKKwkweGEzZjAxNjNhLCAweDk0YTIyMzdjLCAweDdiOGJhMWY3LCAweDFjZmQwY2ZjLCAweDQwYWE2MmFhLCAweDhjMjEyMGYxLAorCTB4M2UzZDE2YzcsIDB4NmUxZjgwMmYsIDB4NzBhOWZjNGIsIDB4ZTAxYWFlNmMsIDB4MmI2MWFjMzUsIDB4NWVhMzUzZDYsCisJMHg2ZTAxMDAwZiwgMHhkNGUzZjlhNywgMHg4ZTIzYmQwOCwgMHgyYWY5ODM5YSwgMHhmOWY4OTc3ZiwgMHhlMDU1Njc3ZCwKKwkweGU4MTRkNGZjLCAweDZiYWZkNjQ5LCAweDZhYjM3NWVjLCAweGYzM2RjOTBkLCAweDdiMmVkM2Y3LCAweDQ3ZDNmNzkyLAorCTB4M2IyMjc2ZjgsIDB4MjQ0Y2VkN2IsIDB4MmJiZTMwYmYsIDB4MTVlZmJmYTksIDB4NDExY2NiNWQsIDB4YjVjOTgxZjQsCisJMHg1OTc1Y2U4ZiwgMHhiZWE5YWIyMiwgMHgxY2RjOTgxZiwgMHhlZTkxZjE4ZiwgMHg4YjgyZmRhMSwgMHg5MWY1MTZlZiwKKwkweDg3Y2Y4YzAwLCAweGNjNjdlNTIzLCAweGEyNzY5Nzk0LCAweDEyNWJlZWM3LCAweGU5YjhlMzk3LCAweDBhYTFmYzY5LAorCTB4YTFlZmRhY2YsIDB4ZmRhNzlhY2EsIDB4MTdmYTg2N2UsIDB4N2Y1N2NmYWIsIDB4MWRiY2IyNmUsIDB4YTQ5N2Y5YTIsCisJMHhlN2QyN2U3ZSwgMHg5OTEyYzAxZiwgMHgzODkzY2JmNywgMHg2NDg3YjY4MywgMHhhYTNjNzVlMCwgMHhhNjdlZjVlZiwKKwkweGM4N2I0OGZjLCAweDA2MTk5ZGZmLCAweGVkNWNmODk1LCAweDdmZjRkMGNmLCAweGMxOGJlYmE2LCAweDliZjYxZDUxLAorCTB4ZjZmOWI5MzUsIDB4ZmMzOWY0MjcsIDB4OGE3MWM5OGIsIDB4YTRmMmJkZWUsIDB4ZGY4MjRhMDAsIDB4YTBhOTgyYWIsCisJMHgxOTVkZjgyNCwgMHhmNmUwMzFjYSwgMHg3YzgzNjJjOCwgMHg4MWE5NzhmNSwgMHhjMmIxMzM1ZiwgMHhiZDczNWZjMCwKKwkweDE0YmY4MGNhLCAweDVmOTA2NzVkLCAweDAxYmQ2YmZmLCAweGM1YmQzMGRmLCAweGNmZjFiZjIwLCAweGQ2M2MwNjZkLAorCTB4Yjk1ODc1YmYsIDB4NDkzNmU3ODksIDB4MGFlNDFiYWYsIDB4MTU3ZThkM2IsIDB4MmFmZDE4ZjUsIDB4MTVmYTM1ZWUsCisJMHgzN2UyNWJkMywgMHhkZmFjYjdmYSwgMHhmNjRlNWZlOCwgMHhkZTg1NWM4MywgMHg5MWZjZmZhMSwgMHgyMDYwZmI0OSwKKwkweDM0ZjNjMzNjLCAweDEzMDI5ZDM1LCAweGE4YzQ0NzM0LCAweDY2YzIxZmI2LCAweGYwYTYxN2JlLCAweDg0YTJlMmZmLAorCTB4ZDdhNzJjM2MsIDB4MDkxOWRhM2YsIDB4YjlkMmIzMmYsIDB4MmIzNjlkMGYsIDB4NTEyZWRiYmQsIDB4ZmUzZTYwMGQsCisJMHgyZTc2ZDcwNSwgMHgwMDBlZTAxNywgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjc2VtX2ludF90YWJsZV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlNzMzZmYwMCwgMHg1MWY4NjA2MiwgMHgzOWZiYzEwZiwgMHg3MTZlMTgxOSwKLQkweDAxNDNmODIyLCAweGQ5NDMzMTE3LCAweDEwMTdmYTQwLCAweDYwNjQ2M2JmLCAweGJjNDhjZjc4LCAweDA0MGUzNTdlLAotCTB4MDMzYjJmN2IsIDB4M2UyMDBhYzMsIDB4ZmVmMDNlYzAsIDB4Yzk1YzQ4MWEsIDB4NGViYjNmNGQsIDB4NjIyZWQxZDAsCi0JMHgwNjdlMmVmMCwgMHgwYzAyM2Q4NiwgMHgxMDgyNTkwYywgMHg1NDQxN2ZmZSwgMHgwOGZjZGRmOSwgMHg2NTE4OThiNiwKLQkweGY1MDEyOTc2LCAweDkzMzIwMDAzLCAweDAzODAwOWQzLCAweDAwMDAwMzgwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlM2UzZmYwMCwgMHg1MWY4NjA2NiwgMHhiOGQzYzEwZiwgMHg3MjM2MTgxOCwKKwkweDAxNDNmODIxLCAweDY4NDMzM2I3LCAweDA2MDYxNjNlLCAweGM3N2UyMDAxLCAweDllZjBjMGM4LCAweDM4MzMwNDkxLAorCTB4MjA3ZWVjMTAsIDB4Mjc4ODBhYmIsIDB4N2RjZjUwNzEsIDB4ZTUyZjExNDMsIDB4NWY1ZDlmYTEsIDB4MTUzZDc2YTAsCisJMHg4MzdmNzgxOCwgMHgwMzEwODNiMCwgMHgwMzMwOWI4MywgMHg4NDA4YjQ4MywgMHg1NTA0NWZiZiwgMHhjMTA4NTFkZSwKKwkweDk5NDEyZTdlLCAweGZhODE5ZjVkLCAweGJiZWI4ZDAxLCAweDAwMDM4MDMxLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhlZWNkZGQ4ZiwKLQkweDIxMDc5YjI2LCAweDA4NmUzYzIxLCAweDRiYzYwYTIyLCAweDliYWRlMTAyLCAweDg4YjQ2MjA0LCAweDdkNjA4YTg5LAotCTB4ODQyMDE4MmQsIDB4OTZkMjIyNDcsIDB4ZWRmN2VkN2UsIDB4NWFiMTEwNjIsIDB4NjhkYjE1MWIsIDB4MzQxMDVkYjEsCi0JMHgwNjBiMjhkYSwgMHgyZGYwOTgwYywgMHhhYTU2OTRhMCwgMHhkMWY1OGRmMSwgMHg5MGNiYzhhMCwgMHhmODdlODc4NCwKLQkweGNlN2ZlYjY5LCAweDdiYmJiOTk5LCAweDdjNDg2ZWVmLCAweGZlZmRmYmY0LCAweDczMGVjZmU5LCAweDMzOTlkZWU3LAotCTB4OWNlNzM1ZTcsIDB4YzkyYjMzMzksIDB4MjEwY2IxMDIsIDB4YmJmODFiZTQsIDB4MjJhZDkwOWMsIDB4YTQ2YzY0MjEsCi0JMHhlNWEyMmFlYywgMHg3OWZjNDIxOCwgMHg4MTI2YzA4ZSwgMHhhZmFlZDA5MCwgMHg0MjM0OTA4ZSwgMHg1NGNkMzY0ZSwKLQkweGVjODRkOWFkLCAweDJlODQ3M2NlLCAweDAzMjdlZGE3LCAweDZkMmIwMTg1LCAweDc2ZjZkZTJmLCAweDRiZWI0NGEyLAotCTB4YjQxMjg5YjYsIDB4ZjFkOTc2NWIsIDB4NDI3NWNlZmIsIDB4ZDZkNWVhMDAsIDB4ZDEyNjA3YjYsIDB4OTEzNmY3N2EsCi0JMHg5MzVkYTA2YywgMHhkMjQyZDM5MCwgMHgyMzYyMzkwOSwgMHg2MTc1NGZlYywgMHg1NTlkYmU3ZCwgMHg3ZGRmYWM5NywKLQkweGQ5NTc4YzJiLCAweGZhNzYyNTZjLCAweGQxMjY5MWZkLCAweDliNjVmNTAzLCAweGUzYTEwMDg0LCAweDhmNzFkOTJkLAotCTB4YjdmNjgwMzIsIDB4ZWQwNDIwMjAsIDB4N2E2ZmFkMmEsIDB4ODQ1ZDUxNTAsIDB4ZmRlYmI1ZGMsIDB4MjEyNzc2YzQsCi0JMHhhMjM2N2MyNywgMHhjYThmMzgyYSwgMHhhYTQyMjhlMCwgMHgwNjRhNWIwMiwgMHgxYWFiZWZkMCwgMHhmYjQyY2QwNSwKLQkweGFhNzc1YWFmLCAweDZhYWJlMDEzLCAweDY5MTAyZjkyLCAweDFjMWE4YjdmLCAweGM2YzExZDQ0LCAweDc4YzA4NmZlLAotCTB4YmM3MDNiN2IsIDB4MTgzMGYyNmQsIDB4M2JlYmYyYWYsIDB4M2NjMjIyMTUsIDB4Yjc3YzBmNjUsIDB4ZjMwMWMyODQsCi0JMHhlMTNkYzdkNiwgMHg3NGYxYzdhYiwgMHg5YTc5MmU3YywgMHg1YmRmNDc4ZSwgMHhjMWEwOWNmYSwgMHg4ODVhOTcxNCwKLQkweGRjZThlMDE3LCAweDg0ZmQ5ZjYxLCAweDUyYjdlNjEzLCAweDllOGFlZTE5LCAweDMwZWQ5Y2M3LCAweDdhYzBhYThmLAotCTB4ZjAwOWM0YTUsIDB4OGZlNjU3YWQsIDB4YThiN2Y0OGEsIDB4Zjg0NmY3ZTEsIDB4N2JmYTczZWEsIDB4ZTVjZGRhYTMsCi0JMHhlOTQ1MWYwOSwgMHg4YWJkNDhmMCwgMHhmNjkwNGYxMCwgMHg1MjgwYTQ0YiwgMHhmOWU0NDk3ZSwgMHhkMjMyNDIwNywKLQkweDQ4ODM1MTdiLCAweDdmYTQ1YjU0LCAweGZhNDI3OTRhLCAweDliN2ZmZmQxLCAweGMxZTI5M2ZlLCAweDZjMGFlYWRmLAotCTB4NmRkMDhlY2EsIDB4MTY2ODFiOTksIDB4Mzc2OWRiYTEsIDB4NWRkNGEzYTcsIDB4NWViZmRkMTAsIDB4YTBmNDAwM2UsCi0JMHhkY2Y5ZDRmMCwgMHhjYmU0M2U1OCwgMHg0ZmFkNzJjMCwgMHhkNmZkYmM0NSwgMHg3YWNiMDIzNywgMHgxZmNmODY5ZiwKLQkweDcyYzc4ZGYzLCAweGU1ODNjZjlkLCAweDU4YTU3YzFmLCAweGY4NjU3YzA2LCAweDZjZGYwNmRlLCAweGJjZmEzNzJjLAotCTB4NWY0OWZjZjgsIDB4YmUwZDk2MjUsIDB4OGNmZTdjMWEsIDB4OGQ5NjA1NmYsIDB4N2YzZTNmM2UsIDB4Y2IwNmI3Y2UsCi0JMHhjYjBlYWZhMCwgMHg1YTJmNDBhZCwgMHhmODAyZjkzNiwgMHgwMzVmNzZkZSwgMHgyMGJlY2Q5NiwgMHg2YmU5ZGYzZSwKLQkweDhlN2VmMmM2LCAweGE0YzljNGM3LCAweDQ4NzhhMjUwLCAweDI1MzcxMGY0LCAweGVlOTk0OTNiLCAweDNkNjk5NDI5LAotCTB4ZDNkNThjYTUsIDB4MmExN2Y2NmYsIDB4YTVlZTllYjQsIDB4MDE5NzhhNzUsIDB4NTY4NTQzOGIsIDB4YzM1MDFmNWEsCi0JMHg5MmZmMDdkYSwgMHg3ZDY4ZDkxNCwgMHgwZmI1OWZiMCwgMHg2NDUzZGZiZCwgMHg3NWExZjVhNywgMHgzYWY4N2RhYywKLQkweGFkMDI1MTdmLCAweGY2YjAwZjBmLCAweDQ1NDMxYjhiLCAweDM4YmY1YTBlLCAweDViNzNkYWM4LCAweGQ2OTNiMTQ4LAotCTB4OWVhYzQzNzMsIDB4ZWM1M2MwNzcsIDB4MzZiY2Y1YTIsIDB4YzBmODJmNTYsIDB4ZWI0ODljNWYsIDB4ZmJlY2VkMDUsCi0JMHg1MTAxMWQ4OSwgMHg2MWQyYzY3NSwgMHg0ZWRlYWNhYiwgMHhmOWQ2YWQyOCwgMHgxMzQ4ZjRhZiwgMHhlZjUxNWQ2OCwKLQkweDhmYzUxYTI0LCAweDk0OGY1YWZmLCAweDdiMjFmMTQ5LCAweGJmZTQzZGIwLCAweDE0OWJkYjA5LCAweGUxYmZiNjBmLAotCTB4NzZmYWMwYWYsIDB4ODdlZDhiZDksIDB4NWQ1ODRiZmQsIDB4MTdmYjYyZjEsIDB4YmQ2MjlmZmUsIDB4YmI2M2Y2NTksCi0JMHhkNThmYTU2ZCwgMHgwZmI2M2YxNSwgMHhmYjA2Yjk1OCwgMHhiMDA3MjlkZiwgMHgwN2NhZDQ3ZCwgMHgxMmE3N2RiMSwKLQkweDU2ODdmNmMwLCAweDRhOTllNjNkLCAweGY3ODJiNWViLCAweGI0OGZjMGI3LCAweGMwMzkyNGFjLCAweDMyOGNjMTRmLAotCTB4MDVhYjRmY2EsIDB4ZjdmODFiMzIsIDB4MjhlOTgwYmYsIDB4NTRjZWFlNWYsIDB4ZmViNzBlNTAsIDB4OTAwOWUwYWQsCi0JMHg4MzRiZmM1ZiwgMHg3ZjI3ZmNmYSwgMHhmZmRmOGQ5NSwgMHg2OTkxZmIxMSwgMHhmZGVmNjIzZiwgMHhkZTNhYmRlNCwKLQkweGFiZGU0ZmQwLCAweDBkM2Y3YTk1LCAweGJkYWQ1ZWYwLCAweDdkNmNmZDZmLCAweDllMTFhMjc1LCAweDdlZjRhYjU3LAotCTB4YWUzYzIwYjYsIDB4ZWYyYmNkYmUsIDB4Nzg0NmM5YjUsIDB4ZjdhYzViNWUsIDB4NDllMTEzYjMsIDB4NGQzYzFiZWUsCi0JMHhkM2YxMWI2ZiwgMHgzZjE4NzZmNCwgMHg3ZTllMTE3YiwgMHhjYzY3ODM3ZCwgMHg4Y2ZjNDYzYiwgMHg5ZjhjMjc3OSwKLQkweDY2NGZkODAzLCAweDdhNjlmYWRmLCAweGE2OWY4OGM3LCAweDc5ZjhjMjc3LCAweGE4MzVlNzFiLCAweGYzMWFmMzZmLAotCTB4NjMzZjExYWUsIDB4ZTdlMzBkZGUsIDB4YmIyNzg0MjMsIDB4ZmY2Y2ZkNmYsIDB4ZWQ5Zjg4ZDAsIDB4NzNmMTg2MWYsCi0JMHhhMGI5ZmIxNCwgMHhmODJhZjM2ZiwgMHg4MjlmODhjOCwgMHhlOWY4YzI4ZiwgMHhlYTJlN2VjNiwgMHgzZmRiM2Y1YiwKLQkweGZiNjdlMjMyLCAweDdjZmM2MTQ3LCAweGQyNWNmZDg5LCAweGZjMTU3OWI3LCAweDgyOWY4OGMzLCAweDYzZjE4NDdmLAotCTB4ZDE5ZmEwMTEsIDB4ZjlhNzgzN2QsIDB4OWE3ZTIzNTMsIDB4YzdlMzBkM2YsIDB4ZWQ4Y2ZkODEsIDB4OGZlMzNjMWIsCi0JMHhmZTMzZjExOCwgMHg2OTNmMTg0OCwgMHg0MjdkZDAwMiwgMHgzZTY5ZmFkZiwgMHhmMzRmYzQ2MiwgMHgwNjdlMzA5MSwKLQkweGZhNTMzZjYxLCAweDQ3ZjFhZjM2LCAweDdmMTlmODhkLCAweGUxOWY4YzM0LCAweDJhNDJhZjM4LCAweGExMGYwMGY3LAotCTB4ZWU3YWI4ZmQsIDB4MjM0OWU3NjcsIDB4MGM5ZTc2N2UsIDB4ZWM1MmU3ZTMsIDB4MjdlZDFhNjcsIDB4MjY3ZWY3YTcsCi0JMHgzM2YxMWE3NiwgMHg5ZjhjMzNiMSwgMHg5NWNmZDhmMSwgMHg2NzY3ZWI3ZCwgMHgzYjNmMTFhNywgMHgyOWY4YzMzYiwKLQkweGRkNWNmYzQ0LCAweGVjNGQ3OWI3LCAweDYyNjdlMjMyLCAweGZlNGZjMzE3LCAweDg5YzUzNTViLCAweDg1YWU5ZGI0LAotCTB4OTkzZjQ4OWEsIDB4MDhmMWUxZDQsIDB4NTliYTJlYjQsIDB4MDQ2Yjc0NWQsIDB4Yjc1MTEyZWMsIDB4NDc5YjQ4MzcsCi0JMHgxYjNiZGZhNCwgMHg0NTdlZjM5MywgMHhhMjhlZWRhMiwgMHg4Yjk3OTg3MiwgMHg3NmQxNjM1YSwgMHgwNGY4ZDI0NywKLQkweGVjOTM5ZDgzLCAweDUzZDQzMTQ5LCAweGRlMTgwNzRiLCAweGQ0MzY1N2VmLCAweGY2N2ZkZWQwLCAweDRjZjY4NmM1LAotCTB4OWVhMTllNmYsIDB4ZjBkMTM5NTUsIDB4MjI5YWEwZmUsIDB4OGFjODdkNDMsIDB4NjdlZjBjYWIsIDB4ZDQzNWFmZmIsCi0JMHhkOGZjZDY3MywgMHg3NTA1ZmVmMCwgMHgxN2VkMGQ3MywgMHhkYTE5NTdkNiwgMHgzMzJjMGEyZiwgMHhmYzM2NDdkNCwKLQkweDRiZmRlMTg3LCAweGRhMTk3NzgyLCAweDk1ZmU2ZDJmLCAweGU4NzQ3ZGExLCAweDdmM2Q0MzIxLCAweGY3ODY2M2ZmLAotCTB4MzA2ZGI2YzcsIDB4ZjgzYjhmYjQsIDB4NDI3ZGExOGMsIDB4N2Q0MzU2ZmIsIDB4MjY5ZGIxZDIsIDB4M2VlOWNmM2IsCi0JMHg0NWQ3OTIzMiwgMHhlY2MyN2JlMCwgMHhlZDA1NGNmZSwgMHhjMTRiOTBiZCwgMHg4OWMwMzJiYSwgMHhkNzZlZmM3NiwKLQkweGE1MzBmNTdjLCAweDc2ZTdiMmFmLCAweDE3ZDI4ZDM1LCAweGJhZTg0YTY4LCAweGYyYTAzODVlLCAweGZjZmE3NmMyLAotCTB4MTdiZDEzYTcsIDB4OWZmM2U5YmEsIDB4ZGQ0YmRlMmEsIDB4Y2E1M2VjNzEsIDB4ODBjOTAyMGYsIDB4Njk0MGI1NTIsCi0JMHg2NjQ3YmY2ZSwgMHhmNTk0NThmYywgMHhmNDQzZjBmNSwgMHhmNzRiNmFmYiwgMHhiNzVhNjRmMCwgMHhjMGY1ODU4OCwKLQkweDJjMTA3ZmJmLCAweDIyMDlhN2M4LCAweDEyZjc4MWE5LCAweDgyZmQwNGFjLCAweDllMGJiMjdiLCAweGViZjE0N2YwLAotCTB4MGU1NDQxOWEsIDB4NmJiZjQ4ODUsIDB4ZDgwNjZmNjQsIDB4YmU1NjFiMTksIDB4NjQzYjA3ZWUsIDB4YWYzYTIwZjUsCi0JMHgyMTNjODQwMSwgMHgwZmYyMWViYywgMHg5YTBmZGZhMywgMHhmZGE1ZTE5ZiwgMHhhNzZhMTU1OSwgMHhkMGFmOGY0NywKLQkweGY4ZTE0N2YxLCAweDczZmUzMDBkLCAweDFkNmY4YzNkLCAweGJlMzBkZTNhLCAweDYxYTU3MDZkLCAweGM3NDI5YjdjLAotCTB4NjA3YjUzNzcsIDB4N2M3YzdiZTUsIDB4ODQ4OTg0NGEsIDB4ODdiYzJmM2MsIDB4NTcwNzViZTMsIDB4MjhmN2Y4ZTIsCi0JMHgxZTg5NWZkNCwgMHg3ZTNjMjEzZiwgMHgyZWNiYzgzMywgMHg5YzZjN2YxOCwgMHg2ODlkMGZmOSwgMHgyYWUwZmY5YywKLQkweDM2MTVmY2UzLCAweDBmMmIzZGZmLCAweDcwMTNmMWYxLCAweDQzODU3YmZlLCAweGFiODNmZTZjLCAweGFjYWRmY2Q4LAotCTB4ODlmOGYwZGYsIDB4ODdlZmZjNjEsIDB4ZDNkYWJmZjksIDB4MWIyNjczZmMsIDB4YjE2NDNmZTcsIDB4MzY1NmZlNzEsCi0JMHg4ZjJiMWJmZSwgMHgzODlkZjFmMywgMHg3MWMyOWJmZSwgMHg4YjIxZmYzNiwgMHhlYWM1N2M3MSwgMHg5NDdmODBkNSwKLQkweDAwOWE4NGFjLCAweGE0MGM5ZjFkLCAweGIwM2ZhOThhLCAweGNhMDcxZDBiLCAweGE5OTQyOTExLCAweDMwYjVmOTA5LAotCTB4NjlmOGUxMTQsIDB4MmZiN2UzMDIsIDB4YTFiZjI4MTIsIDB4NzNlM2YxYmUsIDB4YWQ5YWEwMTIsIDB4OWM1ZGZhODAsCi0JMHgxNjM1MTdkNywgMHhiMDk3YTAyYSwgMHhmMzJiZmE5ZCwgMHhjZDE1YTgzOCwgMHg1OTM3ZjIyMiwgMHg0MDVjMGQ2YiwKLQkweDE2NmNlZGUxLCAweDU4YWY1MGZkLCAweGZhMDAyNTNiLCAweDZlNGFkYWFmLCAweDI0ZWY4MzJiLCAweDlmZTc4MjEyLAotCTB4ODZjOTcyM2UsIDB4Y2I5OTc5ZTgsIDB4OTFmMjc1NzksIDB4MGI3OTI4ZjYsIDB4NjQ0NTUxZmIsIDB4NmY4NTBkNDQsCi0JMHhkOGMxMzAxYSwgMHhlYTYzZmQ0OCwgMHg1ZmVhMTEwNywgMHgwY2ZkNDA3YywgMHgxM2YyNTk0MiwgMHgxMWY3OGQ5OSwKLQkweGRlYTA5N2Y1LCAweDY4MjVmZDRlLCAweDdlMjU2NDI3LCAweDJiN2JiYjQ3LCAweGM2NWZjMjgzLCAweDYyNThmZmUxLAotCTB4Y2RmMWZhZjIsIDB4ZTU0ZmMwNDIsIDB4OGY5ZjhiZjMsIDB4YjZmNTNmNDYsIDB4ZjQ4YTBlMTUsIDB4ZmM3MzFjMDgsCi0JMHg5ZDNhODZhOSwgMHhkNGU4MWY5NywgMHhkODFhYzNiZCwgMHg1NTdlMjAyMCwgMHg4YTM5NTdjMCwgMHhhZmI3MjEyNiwKLQkweDhlYjhhMmM5LCAweDI1MmVmZmJjLCAweGZkNDUyNjdiLCAweGY3MjNjNDBkLCAweGIyZGZlZmE3LCAweGE2ZTQxODVjLAotCTB4NThmNGNlZTMsIDB4ZTEzYWQ4ZjMsIDB4NWNhMGIyYzksIDB4NzhjYjJjOTMsIDB4MWE2ZGFlNDIsIDB4NDgxZWQzMmQsCi0JMHhiOGZlNDdiOSwgMHhlYmRjNmEzZCwgMHg5OWY1OGQ0YSwgMHhhNzdhYzY2NSwgMHgxNDJkOTFlYywgMHg4MTcyY2VhZSwKLQkweGNlZmRhN2FjLCAweGQ3NmM2ZDlhLCAweDUyNWE3MWM3LCAweDc4Zjk5ZDE4LCAweGJlMGNlOTY1LCAweGMxZTY1MDU5LAotCTB4NzlkMjM3NjMsIDB4YWI3ZDliYjYsIDB4YmI3ZDUzYzMsIDB4YTA1ODVkNGMsIDB4MDExZmJmYTcsIDB4ZjBkM2ZhYmEsCi0JMHhkOWJiMWZiZCwgMHhjZWYwY2RiYywgMHgzMjllNmQ5NiwgMHg3M2Q5Y2YzYSwgMHhiN2YwMDBjNCwgMHhlZmJmZmUxOSwKLQkweGI5MmM3ODcyLCAweGIwZjM1Y2I0LCAweGYzYjEyYzRjLCAweGEzN2ZjMzMxLCAweGEwOWYzY2Q3LCAweDRkZjBlYjBjLAotCTB4OGNlN2U2OTUsIDB4ZmE3MDhlNmYsIDB4NDFmYzBjN2YsIDB4MWZjMGEzY2IsIDB4OWNjM2ZlMTQsIDB4OTU3YTIyM2YsCi0JMHhkNWI1NDdmMSwgMHhhMWY4MDMzYiwgMHgyMDkxNTFmYiwgMHhkY2JmMzk1ZCwgMHg1ZTY1ZjljMCwgMHgwODJmOTE5ZCwKLQkweGM3NDBjYWYxLCAweGJjODViMzA1LCAweGMxZjE0NTVmLCAweDBiMDdjZTJjLCAweDczN2M4ZGVhLCAweDk5Y2JmMTBiLAotCTB4ZTM3MmU4NzEsIDB4Njc3N2Y1ZGEsIDB4ZmJmM2IxYTgsIDB4NGRjZGYzOTAsIDB4ZmM0NmVmZjcsIDB4ZDE5M2NlYzQsCi0JMHhhNzRlNTZlOSwgMHhlZDhjNmE1YiwgMHhkZWJhNzAzNywgMHhiYjNhZTljMiwgMHhhOTk3YzFmZSwgMHg1NjNmMjBmYSwKLQkweDdiYzgzMjAzLCAweDdhNzQyZmY1LCAweGU5ZTgxYmI2LCAweGMzMzRmNGU1LCAweGU3YTcyYjc5LCAweGY0NjczZmFkLAotCTB4Y2VkYmMzMzQsIDB4N2Y1ZWQ5ZTksIDB4NjM0MzI2NDYsIDB4NzdjMzM1ZTEsIDB4Zjk5ODhhZGIsIDB4MzljZjQwMjgsCi0JMHhhY2Y0ZjhmZSwgMHgzZDRjMmU2ZSwgMHg0OTdjZjUxYywgMHhjM2Q0Y2FmMCwgMHhhOGI2NzI1MSwgMHg1ZjUwZGNhMSwKLQkweGYwZDFiODE4LCAweDM5ZmE4MmZlLCAweDc1NzlmNjg2LCAweGI3ZWQwZDBiLCAweDUwYzNiOWFmLCAweGI5ZmZlMzlmLAotCTB4NTZkYmZkZTEsIDB4ZGZiNDM0YWMsIDB4YTFhZjczNTIsIDB4MDdjYWE2ZmQsIDB4YmQxYmY1MGQsIDB4OWZkZTFhOGYsCi0JMHhhMWJkN2IzNSwgMHhkM2Q5NjY3ZCwgMHg0YWViZjY4NiwgMHhlNWVhMThiNywgMHhmNzg2MWQ5ZSwgMHg4NzBiNWQ4NSwKLQkweGVhYmFlM2I0LCAweDg4N2Y2M2ZkLCAweDQ1NjdiZTI3LCAweDNiZWIzNTNlLCAweGY2MWUyZjVkLCAweDg4ZmNmOGE5LAotCTB4Yzc5NjA0NmYsIDB4M2YzZTFhN2MsIDB4ZTU4ZjFiZTEsIDB4NzRkZmQwNGEsIDB4NjBlY2IwNWQsIDB4NzM0M2Y1NjUsCi0JMHhlMmEzYjg4NiwgMHhkYWM4OWYxZSwgMHhiZGIzZDA2MCwgMHg3ZGZkNDNlOSwgMHg3ZmEzZGViMywgMHgxNGVjZjE1OSwKLQkweDkwMmM1Y2JkLCAweGJiMDc1ODMyLCAweDNmYWQxZGI4LCAweDQ5ZDdjNTNmLCAweGI5NDJlZTQyLCAweGI5MzBhYzVjLAotCTB4YjMzNWJjNWQsIDB4M2Q0MjI0ODgsIDB4NGUyNmJjMzQsIDB4Y2YyYzI2N2MsIDB4MzNlNzAxNDEsIDB4MDBjNzJlYWYsCi0JMHg5MWZhODJlNywgMHhlMDM2ZjgyNiwgMHhmOTAzMGIzOCwgMHgxYThiZTc4NiwgMHhlYmJlMTkyNiwgMHg3YzIyMmRkOCwKLQkweDI3YzY0MTRiLCAweGI2NTY3MmMwLCAweDg1ZjAwMmM3LCAweGVlYmUwZWY2LCAweGIzZDc4MDEyLCAweDRiZWIwMmQ3LAotCTB4ZTdiNDNmNzMsIDB4YTlhNTdjM2EsIDB4NzNjMDI1ODcsIDB4N2NjNzk2MTksIDB4ZTIzY2IxYjMsIDB4ZDg3OTYyZjMsCi0JMHhjN2U1ODk1NywgMHhkYjJjMWFiZSwgMHhmY2IwMmI3ZCwgMHhmMmM3ZTdjOCwgMHgyYzFhZGYwMywgMHhjM2FiZWVmZiwKLQkweDFlYWZhMGYyLCAweDAxN2M3N2NiLCAweDM1ZjJkZjJjLCAweDJmODZmOTYwLCAweGFmOWI2NTg4LCAweDlmNGVjYjE5LAotCTB4NWU1ZDRiMDcsIDB4NDg2NWY4YTIsIDB4ZThiZjE0NjYsIDB4OGZkNzRmZmEsIDB4OWNiZjM4YzcsIDB4Yzc4OTdlMDAsCi0JMHg3YzhjMWIxNywgMHg0MWFlNTQ3MSwgMHg0M2ViMzBiZSwgMHhmYWNjMWQzMywgMHhjM2YyYmJlZiwgMHhkYmIzMGI1OCwKLQkweDQ0M2YyZmJlLCAweGEyNjU5ZGU4LCAweGY0NmY0ZTc3LCAweGJkMTQ2MjI2LCAweDBjZGM1YWM3LCAweGZiZWY0ZTFlLAotCTB4ZjYzOGRlMDAsIDB4YjhiMDI1ZmEsIDB4ODNiMjhiZjcsIDB4ZmYxNjBlM2MsIDB4NmE3YTcxZTUsIDB4MmZmOGIyMDEsCi0JMHhiZTk2YmIxZiwgMHg1MmY2ODZkYiwgMHhlM2U4MDQ2MCwgMHg3N2ZlMjNkMywgMHg0ZmI3YzQzOCwgMHg2NzUyYjQxZiwKLQkweDk5ZjllN2FhLCAweDFlMjNkN2U5LCAweDg2ZmQwNzg4LCAweDI4YmEwMWY5LCAweGRiYjZjN2U0LCAweGVkNWUxODEzLAotCTB4ZTg0YTUyMTYsIDB4MDVlZjcxN2EsIDB4NDc3MzZhNGYsIDB4MjkyMjVkNjEsIDB4MmI0MDdkZjAsIDB4OTdlOWM1NzcsCi0JMHhkZjgwYTBkYSwgMHhlYjVhZjBkZSwgMHhmYTE3MjJmYSwgMHg1N2Q4ZjIzYiwgMHhiNThlNTAwNSwgMHg2MTM0M2IzMCwKLQkweDMwZjY4OGFmLCAweDAxYTEzZDA5LCAweGRlZmFjMzdlLCAweGRjNDA2NWFhLCAweGM1MDJmYmI4LCAweGMwNzFlYjhkLAotCTB4OWY5ZmM0NjksIDB4ZjgyMjBiZDYsIDB4YThlMjk3YmIsIDB4YmFiM2Q3MGQsIDB4YjBkZmM0MGMsIDB4ZjY2Nzg2MmYsCi0JMHhlOWJkN2YwMSwgMHgzOWYwZGVjOSwgMHhkZmUwMzAzNywgMHhmNGRlY2Y4MiwgMHg4YjdhNmY1NywgMHg5YWU3ZDQ3OCwKLQkweDc2YmJmY2U5LCAweDJiZjc5MjVkLCAweDUwZDRmNDE1LCAweDgwZjRmZmU2LCAweGM3YmY3ZDZmLCAweGYwMjU0ZjBjLAotCTB4ZjNiZWQ4ZjEsIDB4Y2ViYTU3NzEsIDB4MDk4MzZkYzcsIDB4OTA2ZGU3MWQsIDB4ZTlmZmRhMTcsIDB4ODA5MzBiYTYsCi0JMHhiNDFmYjQyZSwgMHg3MWI3YmJiYiwgMHhiYTE3YjlmYiwgMHhmNjM2Y2M5ZSwgMHgyZmU1Y2Q1NywgMHg0MjkyNWZkYywKLQkweGI4ZTk0Yjg0LCAweDQ5MjE0NTJlLCAweGJkMTYxZDc0LCAweDFiZjQ0NDJiLCAweGY4M2Y3NmI0LCAweDVhMWNiYmUzLAotCTB4ZDhmZTBhYWQsIDB4MmE0MzU3ODksIDB4ZGJmNDY4ZjQsIDB4MjI3ZmVmNGYsIDB4NjU5YmZjMTEsIDB4ZTFmNzE2MTksCi0JMHhjYmQ0NzQzOCwgMHhiNzZjYzEyNSwgMHg2ODBmZGEzMywgMHhkNzRmZDYzNiwgMHhmNDQxYTUwOSwgMHhlYmE0ZDQ5MywKLQkweGMwNzU4MTJmLCAweDBjM2MzZWVkLCAweDk2MDY3MmY0LCAweDMyY2IzZjdhLCAweDU0ZTFmNzE0LCAweDIzZDMzZmE0LAotCTB4NjdhOGM5OGQsIDB4Zjg2Y2Y4NGUsIDB4NDcwZDBmZGUsIDB4ZTA0NGZkNGYsIDB4ZDA5ZjIyNjgsIDB4ZGYxNDgxZWYsCi0JMHg3ZWZjZjRlNCwgMHg5ZDIwNzI4ZiwgMHg0ODVlMjA1NSwgMHhjMDJmZTQ1YSwgMHhmZmQzYjM3ZiwgMHhmZDBhMTliZSwKLQkweGZiZDc1ODRhLCAweDdlOGEwZWFkLCAweGJjZjBhNWViLCAweGZkMWUzMGQxLCAweDMyZjdkNTRlLCAweGU1OWViYmUxLAotCTB4NzQ0NzIyNGQsIDB4ZGI3NGE3N2UsIDB4MTc1YmY3YzIsIDB4NDZkZGQ4MzUsIDB4NTBkOTMwYmIsIDB4NzRjZTZlYWYsCi0JMHhmODQ0ZWMxYiwgMHg5NWMyMTgwNywgMHhiNzdjMDQ4MiwgMHg5NzVkYjM5OCwgMHg3YzAzNWNlNCwgMHhlMzA0M2Y3NCwKLQkweGY2MDVkZjgwLCAweGJiNWIxMmRlLCAweDRjNTE1NWUyLCAweGU3MmY4MGRhLCAweDVlZjlkNzhlLCAweGQ1M2VmNTlkLAotCTB4OTE1ZmM3NGYsIDB4ZjkxN2M4MDksIDB4MTA1NTQyOWEsIDB4YTBhZThmZTksIDB4YjdlYjQyYzQsIDB4YTZkY2RhZjMsCi0JMHhiZDYxZDM0NSwgMHhmNjYxNmUzYSwgMHg0YjI5MDU3OCwgMHg5MmIzN2YwNCwgMHg3YzQwMTVkNCwgMHg5NGIxMjRmMiwKLQkweDI0OWU1YzgyLCAweDQ3ZTYyNDZmLCAweGEyZmJlMWM5LCAweGJlZGNmMDgyLCAweDUzMTc2OGM2LCAweDVmNTBkOTdmLAotCTB4Y2ZhYzZmNTAsIDB4YzNhNmQ3MjcsIDB4YjVmY2YyYmUsIDB4YTAwODA5MzIsIDB4YWZlZDhjMmYsIDB4MTY4ZTRjODgsCi0JMHhiMGQ1OWE5MCwgMHhkOTk1YWZiZSwgMHg0ZGQ3MzYzYSwgMHhkZjBhMmNhNCwgMHgyZjFlMTc5MiwgMHgxZmViNDM5OCwKLQkweGQzMWVjYzhiLCAweGE2MTc0NWY3LCAweDgyYWJmODMwLCAweDZkMGYxNWViLCAweGZmMjlhNGZmLCAweGU4NzlhYTA2LAotCTB4YjBkNTgxZjcsIDB4MDliN2Y5NWUsIDB4OTYzNTI2ZGEsIDB4N2UxNmRmN2UsIDB4ZmFmYWJjMzMsIDB4Y2IzZmIzMWYsCi0JMHgyMGQyNThlMSwgMHhlYzcxMDI3OCwgMHgwZWJlNmU4MCwgMHg0ZDJlN2FlYiwgMHgwOGUyMWI3MiwgMHhlMmEzZDQyYSwKLQkweDlmOTlkZjBjLCAweDlmODE4OGQyLCAweDM2YmQxN2VlLCAweDFmZTMxZmE5LCAweGE5MDRhN2YwLCAweDlmN2VmMTViLAotCTB4ZmE2MjMzZmUsIDB4ZmVjNjkzNGYsIDB4YTQwZmZkODAsIDB4ZmExODE3ZmQsIDB4Zjg1MDdmNTcsIDB4M2ZjMGM1ODcsCi0JMHg0YmZmNWUyYSwgMHhiYjc2Nzg1ZSwgMHhhYTkzZWE5ZiwgMHgxMjI0OGZjZCwgMHg5NzFlM2ViYSwgMHg0YTM1ZDJlYSwKLQkweGVlOWJjNWRmLCAweDFmM2EwNDRlLCAweGMwODlmYzkzLCAweDYyMDNjN2FmLCAweDdhY2UyMDY5LCAweGU5ZDI1NzM1LAotCTB4MTAwYTcxZWQsIDB4ZDI3ZjgyYzcsIDB4NzMzYzRmZmUsIDB4NWZmN2ZhMWYsIDB4MThkZDkyNmMsIDB4ODZiMDZhOWYsCi0JMHg5NzFlNTRhYywgMHg0ZTljMmQzNiwgMHg4ODdlYjE3MiwgMHgyNTM5ZWZkNSwgMHhjOGQ5YmQ0MiwgMHgzZDRmNTU3ZiwKLQkweDBhZjkwZTkyLCAweGJjNzg1Mzk0LCAweGVjZjY4NDI2LCAweDk2OWY4ZGQyLCAweGJhNDRiYWUwLCAweGRmY2M4ZTUxLAotCTB4NTJlN2Y4YzEsIDB4NTFjZGZmNTAsIDB4MjlkYjYyOTIsIDB4NTc3N2U4OWMsIDB4Mzc1NGJjNzMsIDB4NGM0YTc3ZGQsCi0JMHhhM2I1N2Y4NCwgMHhiZjdlNmMzZiwgMHhkN2E1ZGI5MiwgMHgyM2I0YWU0OSwgMHhlMzI3MDRkNCwgMHg4N2QwMzhjOCwKLQkweDgwNDgzZTNhLCAweDBiZTJhNWQ5LCAweDFjNDJlNzhmLCAweDJiZTM2M2IyLCAweDllMTQ0Mjg5LCAweDFkM2EzOTc0LAotCTB4M2I4ZmZkYmMsIDB4NmRmNTllZDUsIDB4NjhiMzk1MjcsIDB4YWY1ZjQ3ZmIsIDB4NGY2ZTY2ZDQsIDB4YjE3MmIwYjcsCi0JMHg0NDljNGExYywgMHhmNWUyZTBmNSwgMHg4ZmE3ZTZiMiwgMHhjNGZiM2YxNywgMHg1YzQxOGY5MywgMHg3NmFiM2RmMCwKLQkweGQxN2ZlZDAxLCAweDMzYmYyZmIzLCAweDZkMTdkNjkxLCAweGIzYTZkMzkxLCAweGY0ODUzODY5LCAweGU5YWE1ZDA4LAotCTB4MjJmMjJiN2YsIDB4ZmU3YWE4NzQsIDB4ODRiZDQ1NjUsIDB4NGE2NWZmM2QsIDB4YjY4YjFlODQsIDB4MjVjODU2ZWMsCi0JMHgwZTI4ZjhiMSwgMHg5ZGRhNTZlZSwgMHgzYzEyZTg3MSwgMHg4MWY2MDI1NCwgMHgxNTNmYzJmOCwgMHg1ZGYxZmJhMCwKLQkweDFkOWZlOTAyLCAweDVmZWI5ZjA3LCAweGYwMWZmNWM2LCAweDc0ZTQ3NDg0LCAweGY0Y2RkMzBhLCAweDBiYTUzNTdlLAotCTB4NGU5ZDZiZTgsIDB4NWNiMWY2ZTYsIDB4ZWE3ZjQwYmYsIDB4ZTdlN2U0MjgsIDB4NTRmYzUyNzYsIDB4YzFhYWRkZmUsCi0JMHhiYjlmMmJmYywgMHg3MWU2MTEzMywgMHg3YzYxYWE1NCwgMHhlOWRkZjhmZCwgMHhhNTZlM2ExZSwgMHg2Mzc3NGZlYywKLQkweGZlNTc5ZWM5LCAweDZmYzgyN2UxLCAweDQ5ZmY1ZTBiLCAweDg4NjdjNjNhLCAweDZiODJkMzI3LCAweGU2MTMzZjhmLAotCTB4NGNkZDZmMzcsIDB4ZTI3Y2RmOWMsIDB4N2NhYmJlNDUsIDB4ZmQwMzJjNWMsIDB4NGE0NGI5ZjcsIDB4OGI5MWM0YjcsCi0JMHhlM2IzMTI4MywgMHgwNmEwNmU4ZSwgMHg1MWRmOWQxOCwgMHg3ZTYwYWNiYSwgMHhlNjIyMWJjYSwgMHgwNzcyMTEyOSwKLQkweDA5ZmZmOTAxLCAweDEwYjUwYjlmLCAweDhkYjlmZWIwLCAweGE0YjM2OWQxLCAweGNhZDQ2MWZiLCAweDhkZDdlNjhjLAotCTB4N2QwMWI0ZjcsIDB4ZjRmMjBjNGUsIDB4NmE4YjdkODcsIDB4M2UzOWY5MjIsIDB4YmY2ODZmODQsIDB4ZmFkM2ViZTIsCi0JMHg1NTUwZmEzMywgMHhhM2JmYzA1YiwgMHgzYzMxN2NlYiwgMHg2NGRiZjc4NywgMHhmMGQ3M2Q4ZiwgMHgzYjI2ZjkxZCwKLQkweDNlNzJmZTMyLCAweDAxM2I4NTNlLCAweGU5YTNlN2Q2LCAweDQ5NTRlZGYxLCAweGRhZjg3NDE2LCAweDQ1N2YxNDQ4LAotCTB4Zjc5MzM3YzksIDB4ZjkzMmY3OGQsIDB4NTAzZGU1ZDYsIDB4NjdlZDBhNWUsIDB4MDNmMjYyZGYsIDB4NDdmYWMxZGYsCi0JMHhjN2Y1MGFlMSwgMHgwYmQ3ZGRmNiwgMHgyNGFjMGZhOCwgMHgzN2FlNGYxNCwgMHg4ZGFlNWNjYSwgMHg1MDlmM2FlZCwKLQkweDI5MjEyNWI4LCAweGZmYTA1ZjhhLCAweGVlM2ZjNDE0LCAweDRiNWZjYzU3LCAweDk3ZDI4YmJmLCAweDYyNWUzMGQ1LAotCTB4ZGNiYTdmNmMsIDB4ZmZmMmUwMmUsIDB4YzhmZmM4MjYsIDB4NzU5M2ZjODgsIDB4YjY3YmVlNGMsIDB4MTdhOGZjOWYsCi0JMHgyNzgxY2IxNywgMHhhNTc5MDMxZiwgMHg0MTU3ZTlmMiwgMHg5ODMyZTU1ZSwgMHg3YjhkNjdmNywgMHg5NTMxZjlkZiwKLQkweGJhODJjZjkzLCAweGE3ZjUxYTljLCAweGI3MmI0ZTU5LCAweGU0ZjEyNThlLCAweDQ2YTczM2Y0LCAweDdkMjljYWUyLAotCTB4OWQ0ZTU3MWUsIDB4ZmZjN2M4ZWQsIDB4Yzc1M2ZhNTcsIDB4ZmMyNjU3ZGYsIDB4MjdiMGZhZTksIDB4NjFmNTlhM2MsCi0JMHgzZTIyYTRiZCwgMHhmZTkwZmFjZCwgMHg2MjBhNDViZCwgMHgzYmU3NGZmOSwgMHhmZWFhZGY5ZCwgMHhlODA4NjRiNCwKLQkweGVhNWYzMDlkLCAweDRiZTYxNzdjLCAweGUyNjJlZjlkLCAweDk5ZmMwNmExLCAweDE4ODY1ZmRiLCAweDgxNmI4NTEwLAotCTB4ZjAzMmZlYWQsIDB4ODA5YTZjMjMsIDB4ODc2MTdlNzIsIDB4NmNlZWYzMDUsIDB4YmZmNDA0NjMsIDB4NTg0YmQ0NDYsCi0JMHgxZWUyZGQ3ZiwgMHg4Y2U4NzYwYiwgMHhmNjdjMmY0OSwgMHhlZGVkZjI3MywgMHhiZTVhZWZmZiwgMHgzMDdiNjNlMCwKLQkweDg2MWNhMDNiLCAweDc0ZDE0YmUwLCAweGUwYzJkNzFjLCAweDAyNDAzZWFjLCAweDc4MWY1MTQzLCAweDdmMjhiMmM0LAotCTB4Zjc5NzBlNzksIDB4OWFkODNlMTcsIDB4ZWMyYzc4MGYsIDB4OGVkNDk1MWEsIDB4ZmEzMDcyN2EsIDB4NmY1Y2Q1OTMsCi0JMHg0OWFiZjY5YywgMHhiNzRmNGZhMCwgMHg3OGJmYTBlNCwgMHg4YWU4YmY3YSwgMHgzNGY3ZmY5NywgMHgyMDlmZWZhNywKLQkweGFlY2I0NjNlLCAweGE0NGVhNDhkLCAweGJhNDVkNmZjLCAweDZmZjA2ZWQxLCAweDcxNGQ5MWI0LCAweGNiYTZhZmY2LAotCTB4NWY3ZTJmNGMsIDB4MDFmZDAwN2MsIDB4ZGJkYjRmMWYsIDB4ZDhlMmNhNGIsIDB4ZjlmMmI3YjEsIDB4MjVmM2Q4Y2UsCi0JMHhiNzE3OGZhZSwgMHhiZDgwYjdhYywgMHg4YjQ2ZjE3NCwgMHg0MWJmZWZjMSwgMHg0NzlkN2NlNiwgMHg2N2FmODBmMiwKLQkweGM2YmJiMWVjLCAweDhiZjcxZTAwLCAweDU2NDllNDFhLCAweGJjNTI5Y2I3LCAweGYzNDJmYzcxLCAweGIwN2ZhMWZjLAotCTB4ZGQ5M2VlYjcsIDB4Y2EyZjRmYzgsIDB4MGYwMWRiYzEsIDB4MTFiNDllMmYsIDB4YTFkYjJmZDgsIDB4MDc4YTJkZDQsCi0JMHg4MzBhOWRlNywgMHg0NjYxYzc3MywgMHgyZjBhMWY5NywgMHg1MGNlNWQ4NSwgMHgzNjczYzQxMSwgMHg1OGRiZTQxMiwKLQkweGYzZTQxMzNhLCAweGIwMjQwZGQzLCAweDJkZTgxYjMyLCAweGMxMjM3YWIyLCAweGNhMGE1N2JjLCAweDc3YzMyN2FmLAotCTB4YTM1ZWQzNWYsIDB4ZTZjMmYzZTQsIDB4ZTgxMjdmMmQsIDB4MDQ1YjRiN2IsIDB4MmZiNjg1YjcsIDB4ZTAxNWRhOTUsCi0JMHg2NGU2ZWE5NywgMHg2OGQ4ZjQxMSwgMHg3NGZmY2Y1NSwgMHgxNDdkNzI1ZiwgMHg0YjI3ZGRmZiwgMHgxM2JkOTc4OCwKLQkweGYwMDliYzVmLCAweDIxNDNhNjcyLCAweDc5ZWZjZmIwLCAweDY4ZjMxYmE5LCAweDIzZTRiNGNmLCAweGFmMzRmNWJmLAotCTB4YjJlNDdkZTcsIDB4NDNmNDEyYTksIDB4M2E2NjVmMTAsIDB4MzA0YzZhOGUsIDB4N2IxNTI3ZDQsIDB4MzM1YzAwMDcsCi0JMHhiNWNiZWRhYywgMHgyYmI3NzgzOCwgMHhhMWZkZWVjYywgMHhiMmI3YjNlNCwgMHg5NmZiZjJjZiwgMHhiMTVlYmYyZSwKLQkweGZlZWY4YTJjLCAweGZkYmYyYjFlLCAweGIyZWZjOWUzLCAweDk4N2Y2YTk1LCAweDljZDZiMmY3LCAweDY1Y2Y4MGZlLAotCTB4YzVmYjkxN2YsIDB4N2Q2N2FiZTMsIDB4Y2NkYzJmY2MsIDB4OWFiYjY1ZjMsIDB4MWE1ZWZjYTgsIDB4NTQ0ZGJmMjUsCi0JMHgwMWM0ZTM3ZSwgMHhlNTgxZmE1ZiwgMHhkZjkwNTlmNywgMHgyYmJkZjAzOCwgMHhmMmU4ZmEzMywgMHgwODcyZGI5YiwKLQkweGM5YjczN2U1LCAweDc5MzNjODYyLCAweDdkNzZlNjU1LCAweGY0MmJmMjhmLCAweGVhMGQzZWJiLCAweGEzODhlNmIyLAotCTB4MTAwZjAxYWYsIDB4ZTNjY2RjYzcsIDB4YzgwZTMwZmMsIDB4NzFiOGE0YjEsIDB4NjM5NTdkOWUsIDB4OGU1OWJmZGYsCi0JMHg5ODIzNmQ5NywgMHg2ZjRiMTMxNywgMHg3NmNiYzcyNiwgMHg4MDE2Mzk1MCwgMHg5NzhlNGNlZSwgMHhjZTM5NTJiNSwKLQkweDExZGY5NThlLCAweGJlY2JmMjMxLCAweGRmNjIxYTVmLCAweGZmNjczNzU3LCAweDVlM2E2NmVlLCAweDZjZDY0NzllLAotCTB4ODhiY2ZkZjQsIDB4OTY4ZDhmM2MsIDB4NzA5MTQ5NjcsIDB4YmNmMjMxYmUsIDB4YmNmMjZmYmYsIDB4OTUzM2NiOGQsCi0JMHgxYzVhYTFkMywgMHhjNjJkNmFiYSwgMHgyNzE3YWNmYywgMHgxZTdjNmQxYywgMHgyMjZmZjJmOCwgMHg1YmFmNDlmYSwKLQkweGVhZmI1ZDk4LCAweDgwNjNhMzg0LCAweDc4NzBhNjJmLCAweDc0M2E3MDg2LCAweDdmZDhmY2ZhLCAweGQzNDdjNGM5LAotCTB4NWY4YTRlNDEsIDB4ZTQyZGZiYWEsIDB4MjhkOTJmMzUsIDB4NGI4N2QwMTMsIDB4MWZhMTBlOWIsIDB4ZThhYjhlNmEsCi0JMHhiZTM5OTU3NiwgMHg3MzExZWJhMiwgMHg4MzUxNjU5YywgMHhjN2M3OWViMSwgMHgxMWRiMTcyZiwgMHhhODlhZjI1ZSwKLQkweDc3YzM4YTZkLCAweGI5YzEzZDc5LCAweGU3MWRlZWJmLCAweGJkOWMwODk4LCAweDc5ZjQ3ZGM1LCAweDNlOTcwNmY0LAotCTB4OTcwYTMxYWYsIDB4MWYyNGQxOTcsIDB4OGYxNDg5ZTIsIDB4YmZmZTJmMjgsIDB4MmE4NzE4OGEsIDB4OTBjMGJjMmIsCi0JMHhlYjkxM2ZlZiwgMHhjMmJhZmNjOSwgMHg5NDRiMDg2MiwgMHhmODBlM2U0MywgMHhlYzc3ZjU1MSwgMHhiMWIyN2Q4MywKLQkweDMwM2NkNTA3LCAweGI0NGQyN2E3LCAweDdhOWZjMTdhLCAweGYyOGRkZWRhLCAweDA5NjVkM2FjLCAweGJjMGRjYmE3LAotCTB4ZDQwNzE3OWYsIDB4NTViZjAxMTQsIDB4NTg2ZTBiMzcsIDB4NWY0M2FhNzcsIDB4YmQ4NmI5ZTIsIDB4MDI1MTdlOGYsCi0JMHg1NWIwYjQ3YywgMHgwZjkxNWI3MCwgMHhlN2UwMjk0ZiwgMHgxN2Y1ZDA5NSwgMHhlNWJmMjlmOCwgMHgwYmJkZGExNCwKLQkweGY4NDUwYjViLCAweDAxMGVlMTdlLCAweGMzN2JkMjEzLCAweGI2ZTk1ZjRmLCAweDU5ZTNkMzg4LCAweDcwMDlkZjgwLAotCTB4OGQ3NWIzNzYsIDB4NTdiN2E3YzMsIDB4ZmMwMzdlNGIsIDB4NWI5ZDhmYzUsIDB4NTZlMGM1OWQsIDB4ZGUwNDZhYWQsCi0JMHhlNzc4NjFiMSwgMHgzZWFmMzg4OCwgMHhiZGUzYWJjMiwgMHg5ODk3NzgzNywgMHhlNGRhZjhlOCwgMHgyMjBmMTgzMywKLQkweGYyN2RjOTJkLCAweDVjNmRiZTZiLCAweGExYjQ5YWFhLCAweGE3YzdhNjdmLCAweGYzYmQxN2VlLCAweDk1MWI4ODY0LAotCTB4OGUzMTkyMGEsIDB4ZWRmMThkZGIsIDB4OGZmZmEwMWYsIDB4ZjgzZmQ3Y2UsIDB4NmViYTIxMTcsIDB4MDlmMWI5ZmQsCi0JMHg2N2M5ZjdjNCwgMHhiYTAwY2QwZSwgMHgyNDUxN2EyYywgMHhjZTk3NGEzNiwgMHhlMTA5MTc0NiwgMHgwMTQwNDgzZSwKLQkweDg5MzU1NDNhLCAweDQ4Zjc4YzFlLCAweDVjZWI4MmExLCAweDY1YThmOGQxLCAweDQyZWNkOGY4LCAweGQ1YjU1ODNkLAotCTB4YmY0ZTk4MWEsIDB4NDlmZWRhYWYsIDB4OWQzM2Q4MmUsIDB4Y2JlZjc1NzcsIDB4MTlmZmJmMDIsIDB4Zjg5OGU1MDEsCi0JMHgxZjYxNzNkYiwgMHhmYjYyNGFhOCwgMHg2ZWZjNjYzYiwgMHhkOGZhZDg1NCwgMHgxYjMxYzNiMSwgMHg2MDY4NDFlNCwKLQkweDgyYWE4YmU3LCAweDk0NmI2NGIzLCAweDQ1N2JmYzNkLCAweDdiZTk3MWM2LCAweDdmZTZkNzk4LCAweDMwYmNjMDVhLAotCTB4NWNmYTJmODAsIDB4ZDM2ZjllOGIsIDB4NGJmMzM0ZjEsIDB4MDBlNTlhYWEsIDB4NmFhYTUzOWMsIDB4NzEwOWQyZDgsCi0JMHg1NjgzYWE5MiwgMHgxYmFhZDc1YywgMHhiNzVjNjE0ZSwgMHhhOGIzZjM3OCwgMHg0NTliYWI3ZiwgMHhlMzFjOWY4MywKLQkweDIxODgzNjlmLCAweDRkNTdmODJiLCAweDRlY2UzMDRiLCAweDFlYjA4N2ViLCAweGU5YTcxZjhjLCAweGI0NWE4ZmNkLAotCTB4MWZiYjc1YjksIDB4YTdmOWU0ZTQsIDB4NTI5Y2YxMTIsIDB4ZjQ0NGE2ZGIsIDB4MWZjZTFiNTMsIDB4NDdmMThhMWYsCi0JMHhkNzllZjc4MywgMHhmOWMxM2QxZiwgMHgzMThhNmZlMywgMHg1MjFhNDc5ZSwgMHhmMGE1NGZkMSwgMHhiMWM1OTQxNSwKLQkweGZmN2NjM2Q3LCAweDgwN2ZlN2VjLCAweGQ2Yzc2OTc4LCAweGYwMDBmZWNmLCAweDk5ZDdmZTJlLCAweGUyODJmYzNmLAotCTB4YmJiMmVjOTEsIDB4M2Y1NWZmNDEsIDB4OWJjNjM2ZjMsIDB4NzI4ZWVmZjQsIDB4ZjRmOWQ1YmQsIDB4ZWJhNzE4NTMsCi0JMHg0MWFhY2Y3YywgMHg0N2FkOWQ2ZiwgMHhhYWJjNDMwNywgMHhlOTk3Y2I3MywgMHg2ZjJjOWY2MCwgMHhkNmY2ODY5ZCwKLQkweGZkYzU2ZGYyLCAweDQwZmIxYzQ5LCAweDAzNmY4MTJmLCAweDlhMTM4ODdkLCAweDY5YjdiNWU5LCAweGYzODA2MGVmLAotCTB4NmMzN2E1MjQsIDB4MGJlMzg2MDksIDB4NWUyYzI1YzEsIDB4NDJiOGYyYTMsIDB4NmM3OGZjNjMsIDB4ZTlhMTFjNGMsCi0JMHg4Y2E2NmJiYSwgMHg1NGQ2NTI4MSwgMHhjMjc4ODdkMiwgMHg5NzhlOTQ1YiwgMHg4ZDdlODFmNiwgMHg4OWVmNmZjYywKLQkweDFmZTEyNzdlLCAweGQ1YjI0ZTk0LCAweDliY2ZiZjQ4LCAweDMxZjFmZGU2LCAweGVkNGE2YjY4LCAweGVhMTA5ZTMxLAotCTB4NzhmNGRlMDMsIDB4Yzc4YTFiZWYsIDB4ZGFmOTA1NmQsIDB4ZGY4YzI3ZmEsIDB4ZDNhNmRkMDAsIDB4ZmIzZTc2ODksCi0JMHg5Mzg4NjBmOSwgMHg2ZmJiOTMxZiwgMHg1NmQ1N2RjNSwgMHg1Nzk3ZWUyYiwgMHhmMjhiYmViNSwgMHg3NWVkYjlkMywKLQkweDhmMDkzN2I0LCAweGYwOTI3NmJiLCAweGYxOTM4YjFmLCAweDhkZWFkM2RjLCAweGUwODcxNjJlLCAweDg1Mzg4N2Y4LAotCTB4NzljZjg4OWEsIDB4YjFmMTgyM2MsIDB4MjllOGE3MWUsIDB4NzU4NTcxM2UsIDB4NjUyM2NmMjgsIDB4MWIyNTk0NzEsCi0JMHgyOTg4NTdkZiwgMHg4ZjhjMjNlZSwgMHhkMTNkZjNhYywgMHgxYjgzYzc0OSwgMHgzYTJlMzBmMCwgMHgwZTNmMTZkZSwKLQkweDcyY2I4ZTE0LCAweDIwZmQwMTdhLCAweGE3OGUxNmNlLCAweDg4NDBmYWQxLCAweDc3ODQwNGFmLCAweGQwN2QxYzQ5LAotCTB4ZTljNTllYjksIDB4ZmU2MzY1M2EsIDB4MmMzZTg0NDksIDB4YTI2NDU2ZmUsIDB4ZGVjZjNlYjMsIDB4ZTBkZWE3ZDYsCi0JMHhjOWY4YjZmZiwgMHg2Yzc5YzU4NywgMHhiZTNhOWUyYywgMHhlN2M3YWY4ZSwgMHhiN2VmODU1OSwgMHg5ODIxNWE1ZiwKLQkweDgwMmE2ZmY3LCAweDFkMzQ5NzFmLCAweDUxM2YyMDUyLCAweGY5ZjRjNzVmLCAweGJjM2I3MDc2LCAweGYzMTExOWUzLAotCTB4ZjcwNzU3NmIsIDB4ZWIzNzFlYTIsIDB4ZGU3MGE1OGIsIDB4M2ZiYzBlMjEsIDB4NmQyZWYwZTMsIDB4Yzc0NGViNjYsCi0JMHg0OWMwNTc1NiwgMHhiM2Q4ZTlmYiwgMHg2OTc5ZjkwMywgMHg0ZmM1MjFlMywgMHhmMGQ3ZGJmYiwgMHg0NmZjYzJiYywKLQkweDRlYjAzZjI2LCAweGVmZTBhMjA0LCAweDJlNzc2ZTc4LCAweGJiMzIyZjhiLCAweGRkY2UzY2RmLCAweGQzYTc5ZTU2LAotCTB4ZWE5YzdmMTIsIDB4NzE4NjUzYzYsIDB4MGE4M2Y5MTYsIDB4ZmYzZTk3Y2IsIDB4Y2YyNDI3NzgsIDB4NDRlZmU4MmMsCi0JMHg1ZjIwNGM5YiwgMHgyYzUwNDRmMiwgMHg1OTNmYjc4ZCwgMHhkYzc5OTU2OSwgMHg3NDk1OGViYSwgMHgyNWYzYzRiZCwKLQkweDQ0OWU3NjJlLCAweGRlMzA1MTRjLCAweGZlMzVkY2IxLCAweDk0MWE1MjYwLCAweDUwN2UwYThhLCAweDVmYjY0YWVkLAotCTB4NWE5ZmZiNWIsIDB4MzZiYmQwMDYsIDB4Yzc4YzA2ZjksIDB4ZWJmMDk5ZDYsIDB4YzIxNzczNGUsIDB4ZDRmNzEzMzksCi0JMHhhZWMwMzFiMiwgMHhlYzkzN2Q2NiwgMHg1ZmUwMThiMSwgMHhhZmVkMmFlZSwgMHhkMTU3Mzg1MiwgMHgyNzVjZTA3ZSwKLQkweGVmM2MzNDkxLCAweDk0OTYyNjIyLCAweGI3NDQ3Y2MyLCAweDEzOGY2ZGM1LCAweDY1OWQ5MzA3LCAweDE3ODUxYmM0LAotCTB4OWYzYzZkZDksIDB4NTdjZWJlNDIsIDB4OWY3ZDFmYTEsIDB4NmRhZGIxNzUsIDB4M2RiYTM2MWYsIDB4YzQ5NWYwMDIsCi0JMHhhZjBiZDVmNywgMHhiYmJjZTM3NywgMHg1ODBkMDUxYSwgMHhkNTYzYWE5YywgMHgwNWYyY2U5ZCwgMHhkYWU4ZGQ2MCwKLQkweDJlNGI5NDlhLCAweDg3ODkwZmM1LCAweGZlMGUyN2FlLCAweGJkZGM2ODVjLCAweGFhZDFmNDFiLCAweGE2NDllMjQ0LAotCTB4YWFiMTQ2NzIsIDB4NGU3MDM5OGEsIDB4Yzg0ZGI0NjcsIDB4ZjUzZDNlMDEsIDB4NWZiNDhiZWEsIDB4NjA0ODhiN2IsCi0JMHhhOWNiYmY4YiwgMHg5Mjc5MGJlNywgMHhlNDFjY2U0MSwgMHgwMTBiY2M3ZSwgMHgzNTI2ZmU1NiwgMHg1ZjM5YTcwMiwKLQkweGU5MmJjMDg0LCAweGQzYmM3MzkxLCAweDM5YzYyNzQ0LCAweGQxMTNhZjRlLCAweGM1YzkxNTlmLCAweGZjY2M5YmJmLAotCTB4ZjgwMDEyNzMsIDB4ODhiMjdhZjksIDB4NGExYTc5YzMsIDB4YzE0MmJmNzgsIDB4N2YwNWRhM2MsIDB4NDQyMGJlNzksCi0JMHhmMWEyMWQxOCwgMHhmNDZhNWE5NSwgMHg4OWVkZWIxNywgMHg0MzZmYjBiOSwgMHhjODM2OWVmYywgMHhmZGUwYWU0YiwKLQkweDllMzMyYmY1LCAweGU3ZTJhMWYzLCAweGNmNTJmYjA3LCAweDdlNmNmZmQzLCAweDdmZDA3ZWM5LCAweGE4ZjlkZTE1LAotCTB4MzZjZmZiZDcsIDB4ZGIzMjAzOWUsIDB4ZTQyZjA4ZWYsIDB4N2JiOTUwMGQsIDB4ZTdiNTg4NGMsIDB4NWMxZTViMmIsCi0JMHhiMWUwZjkwZCwgMHgwNDY0ZjNmYiwgMHg5MTU0MWJlNCwgMHhhMWYyMGQwNCwgMHgwNzdkZjZjZCwgMHhmMWM4NGRlOCwKLQkweGUwMjcxMjcxLCAweGQ5N2Q2N2IxLCAweDg3ZGI3ZTBiLCAweDk4ZjI2ZWZmLCAweDBiNTdlMmYzLCAweDJlOGRmYmMxLAotCTB4ZjA1OGRmZGMsIDB4M2Y1MWRiOTcsIDB4Zjg4YzMzNTksIDB4ZmM0NmFiYjUsIDB4ZjE5ODQ2M2EsIDB4NGJiM2M0NjgsCi0JMHhiMjhkZTIzMywgMHg3ODdjZTA3OSwgMHgzYzZmMWE0ZSwgMHhiM2M2NjU1ZiwgMHgwZTFkYTg0NCwgMHhkMDQwNGFmNiwKLQkweGY5MzFmZTgwLCAweDExZWJjZDBmLCAweGE2ZmNkZWVlLCAweDhmNWYxYjM0LCAweDVmZTk1ZTM4LCAweGE5OWQyZDk5LAotCTB4NTMzYjgwNmMsIDB4OTg1Y2ExMGEsIDB4MTljYjI4ZTUsIDB4ODNkZmUwMTIsIDB4ZjEyYjAyZDIsIDB4N2U4NWNkMmIsCi0JMHg4ZjlmMDY0OSwgMHg3M2JlYzE1MCwgMHgwMDg5MWM4MCwgMHgwNDcyODZhZiwgMHhjZjQwMjgyNywgMHg2ZTA3YzgzYiwKLQkweDdjODVhN2EwLCAweGQ5MTliZTQyLCAweDJjZWYzZDMzLCAweDVjZDBlOTdmLCAweGUwM2FkNWZhLCAweGFlNTE0YmRmLAotCTB4MTRhOTM5ZDgsIDB4MDZjZGE4MTIsIDB4YjBkY2Q1MzksIDB4MzY3ZDA3NmUsIDB4ZjM4MjQyYjUsIDB4MThhZDQ0ZTYsCi0JMHhkZGNjZTcwNiwgMHhjNzkwM2U1OCwgMHg0NTFhZWZkZSwgMHgxODJjNWYzMCwgMHhmYTBlOWIzYSwgMHgyOTFlN2FhOSwKLQkweDgwZjdmZDAzLCAweGZjMDMzZGQyLCAweGNjZWRmYmRiLCAweGFlYzhiOTRmLCAweGE1ZmYzZWEwLCAweDljYWZkZjVkLAotCTB4YTljYjk3ZmEsIDB4YzhiNTc2M2MsIDB4ZWJjMzljMmEsIDB4YmI2NGQ5NmEsIDB4MjJjZGVhMDAsIDB4NGVhZWY3OWUsCi0JMHhjNjA4YmJhZSwgMHgxOTkxNmNlZiwgMHhjMGI2MTU1YywgMHhiN2M3ZTAwNSwgMHg3NDFlYjhjYSwgMHhmM2M2NGM1NiwKLQkweGFkYmI2MTJjLCAweDc2MTNlZDg1LCAweDc4OTI3Y2I1LCAweGVmM2U5NDdiLCAweDIyZjg3ZTZjLCAweDZhM2MzMzg4LAotCTB4NzkzZmJmODksIDB4OWRmMmNkYmQsIDB4ZmFmMGQ0ZmMsIDB4M2Y5MzE0ZGIsIDB4ZTU4ZGJkNzEsIDB4OTQzMDNjNGYsCi0JMHhmOTY5NjNjZSwgMHgzMzBlYmU2OSwgMHhlOWM0OTg3OSwgMHhhYmZjZDJmYywgMHg1YWRiZmU3MCwgMHhlNzRmM2ZhOCwKLQkweGZjZGUyMjUxLCAweDNjZTg0YmEzLCAweDMxMmRiYzI3LCAweGQzM2M0YWZkLCAweGEzYjNhNGU3LCAweDBlZmVmMDNjLAotCTB4M2UwMDY1YTIsIDB4MDIyMTRjMjYsIDB4Zjc4NGYzYzgsIDB4OGZlYmVlMDgsIDB4N2U4Zjk5YTksIDB4OTQ4OThiZDUsCi0JMHg0YzVmMjljZiwgMHgwYjdjYTE2ZCwgMHg4OWMzYWU3YSwgMHgzNmQ4ZmJmNiwgMHhjOTk3YzBjOSwgMHhjMTdiYmQ1MywKLQkweDkwNzcxY2NmLCAweDc3MWRiZWEwLCAweDllM2VkOGQwLCAweGE3MWM0NDA0LCAweGQyN2NmOGRkLCAweGM2YmQ2MzMxLAotCTB4MTIzM2Y3YzYsIDB4ZjdmMDNhNDksIDB4ODQ0NWFmZGEsIDB4Njg5YmFiYWIsIDB4YmI3ZWQxNzcsIDB4ZmRlMDA2MmEsCi0JMHhlMTY3NWQwMiwgMHhiZjJkMTQ5NCwgMHhhZGUzNGIxNiwgMHg4YzZkMmJmMywgMHgwODU1MWUyZiwgMHhjZThmMmZhZSwKLQkweGMxM2VlMjc3LCAweDk4NTVmOTllLCAweGNmYzVmZDI3LCAweDlkZTI0M2JkLCAweDRiZDI4YmJiLCAweGRkZmY2YzQ5LAotCTB4YTc4MTQ0OTMsIDB4NjA0YWJkN2MsIDB4OGNjYmFlZjgsIDB4NGJkMjk3ZGUsIDB4YmU3NThmOWQsIDB4NzMzOWY5ZDYsCi0JMHg1ZTM3ODI3ZSwgMHhjZWMzOGFkZSwgMHhmOWEyOWRlYywgMHhmYzA1MDQyMywgMHgwMTAyNWRiMiwgMHhlNWRlNzZiYywKLQkweDliNWZlNDM1LCAweDJiYjkzZjRiLCAweDZlYTllMDBiLCAweGI2NzY4MzNlLCAweDFlN2UyNWFkLCAweDIyNWIwNmQ0LAotCTB4ZjJlZWZiZjMsIDB4OGQ3Yzg0YWYsIDB4MDRhMTUyOWYsIDB4YmY3M2Q4ZmQsIDB4NWFhZmQxNmIsIDB4ODg1MzQxMDMsCi0JMHhlNmVhZDllYiwgMHg3OWE3YjllMCwgMHhlMjAxYjIzNiwgMHhlNjVkNTJiMCwgMHhmYmUwMmViNSwgMHg1MzU3MmJlMiwKLQkweGIzMmIxZjc4LCAweDk1MWY5ZDIwLCAweGJmZGY4NDM1LCAweDJmOGMxMDg0LCAweDA3N2U0YzQ4LCAweGEzZWIyMGNlLAotCTB4ZGEzNTdmY2YsIDB4YjQ2ZDliMGEsIDB4MWI5YjY2ZGYsIDB4NmFmNTRmZmIsIDB4ZmRhZmMwMDIsIDB4YzExMjdmZjMsCi0JMHg2NzNhZTk5ZSwgMHhlMDBlM2E0NSwgMHhkZGZlOGZmZSwgMHhhZjY2MzY5YiwgMHg2Y2Y3NjJkZCwgMHg5NTI3ZmUwNSwKLQkweDlhMWYyODY5LCAweDQ4YWQ1MTM3LCAweDE0YTA3Mzg1LCAweDRmZTI3MWVmLCAweGUyOWE1ZGJhLCAweGMyOGRiYWE1LAotCTB4ZTBiNGUyOTMsIDB4NzhmMTEwYmUsIDB4OTc5ZWI3NTQsIDB4NTE3YmY4NDAsIDB4MDI0MjQwZjIsIDB4NWQwNWJjODEsCi0JMHg0MjJkMGE5ZiwgMHg3ZmY5NDVjOCwgMHgwMjE5Y2Q4YywgMHg5MmE1MjMzZiwgMHg2MDgyOWJjZSwgMHg1ZmQ2MzYyNywKLQkweDNlMTFkNDliLCAweDkwNzk4NmM3LCAweDIwMGIyZjk0LCAweGRlNjA5ZGY5LCAweDQxNWEyNDAzLCAweGQ1OWViYWZmLAotCTB4NjRhYWYzZjUsIDB4ZDU2NmZhODIsIDB4OTZhMDUyODMsIDB4NmE0ZWIzZjYsIDB4MjRmYzQzYjcsIDB4YzExNmEzZGIsCi0JMHhhNDhhNzM1NiwgMHg0MWJhZjllMiwgMHgxZDFlNGM5NSwgMHg4NzI3OGYzOSwgMHhlYzJhMTVlZCwgMHhkZTI1ZmZhMywKLQkweGVmOGUyZjE2LCAweDhiNzU3Y2U2LCAweGUwM2VmYmRkLCAweGY3N2Y3NzNiLCAweDM0NmIzMDFlLCAweDdiNGYxYjNiLAotCTB4NzlmNjg2ZDksIDB4M2I3MDZmNTgsIDB4YmJhZjg0YWMsIDB4ZmI2NTNlMTMsIDB4Mzk3NDI0YzYsIDB4NzFlODYzZTYsCi0JMHhhMGRlYjM3YSwgMHgwOGE2ZjA3MiwgMHg0NGE5ZjU3MiwgMHg4Nzk0M2NmMCwgMHg0ZjQwYWZmZSwgMHgxZmQyODhjOSwKLQkweDY4MmM5ZDdjLCAweGI2OGJkOWFlLCAweDJmNmEzODliLCAweDU3YTRlM2YwLCAweDhjNzNlY2YwLCAweGMwNzcxOTFlLAotCTB4N2VmMDBiNWIsIDB4ZTY2MWZkNTcsIDB4MmEyMWQxODcsIDB4YTMzZTljOGYsIDB4ZWMxNzM4NTQsIDB4ZmRhMWQ3MGUsCi0JMHg5MzdkMjY1ZiwgMHgzZmE2M2U1NiwgMHhjZjljYjVkYSwgMHhlNWQ1ZjhjYywgMHg3OWVmMmNkYSwgMHg1NmJkYjQyYiwKLQkweDQ4ODAzNWVjLCAweDg0NDM4ZjMwLCAweDBlNmExYzA4LCAweDIyMDNhM2U4LCAweDg1NWRmN2Q4LCAweDVjMjg1Zjk0LAotCTB4MjhlZTQxMWIsIDB4MGQ5ZjI2YmYsIDB4YjM3YzA5NWMsIDB4M2IwYWU1YjYsIDB4NWU3N2M3YzgsIDB4ZWJmNDQyM2YsCi0JMHg3ZmUzYjhhOCwgMHg3NjgxZGU4OCwgMHgwODk4M2Y5NiwgMHhmYmJhNTg3OCwgMHg0MjNmNWYyYywgMHg1ZDMwZTc0OCwKLQkweGM3NDQ3Y2E5LCAweDM3YmU3NDQzLCAweDE3MmViOWYzLCAweDM5NDA3MGI1LCAweDAwOWI5ZDg3LCAweDEwNDI4OGZhLAotCTB4ZWIyNTZiMDksIDB4ZThhNzYwZGMsIDB4ZDg2ZDc1ZjYsIDB4N2NjNjRkOWUsIDB4MzY2ZWU1ZWYsIDB4ZGJhY2FkNWUsCi0JMHhlNjBkOWFlNSwgMHhkNDU1ZGNiYiwgMHgyZWZiN2NmZiwgMHhmZmE4ZTdkNSwgMHg1ZDJmOTUxMiwgMHg3ZmEzNzUyZCwKLQkweDIxNGU3ZDU2LCAweDgxZWZkNDgxLCAweDdhM2ExNmFmLCAweDQ1NWYwMWJhLCAweGY4YjE3ZWY2LCAweGQ0NzIwODFhLAotCTB4ZjljYmZmZWYsIDB4Y2Y5ZTZjZGMsIDB4M2U2NDZhM2QsIDB4YzVmNzg4OTMsIDB4MGExN2FhNzYsIDB4NjRjZmFjZWUsCi0JMHhjYWRlNDE3YywgMHg3ZTBiZTY4OCwgMHhmOTI3YjFkZSwgMHgxYmU1NGYxZSwgMHg3OTE4YzdkYywgMHg4NGYxYzkzNiwKLQkweDk2YzcyYTE2LCAweGU0ZDYzOTU4LCAweDQ4MjdiYzMyLCAweGJlYTA3NTZiLCAweDU5ZjVjYjMzLCAweDA3NmFhZjNlLAotCTB4YTI0ZGZiYzMsIDB4OWYzMDY3ZjcsIDB4NjBmNzRiNmEsIDB4OTU1Y2JiZTAsIDB4YzBhNzRlYTQsIDB4ZTg4YjM2ZTYsCi0JMHg1NGI2OTAwNywgMHhiYjEyM2FjMywgMHhkYzU5ZmJiZSwgMHg3YTA3YWY4YSwgMHhhNjY4NTI5YywgMHhiM2U3NGQ3YywKLQkweDBiYmRlZWM5LCAweGNkZDZhNWU0LCAweDU4Mzg0YWZjLCAweGEzNzA3NjA0LCAweDNjMzc3YmNkLCAweDEyZDg1MDc3LAotCTB4ODhjNzVjZTAsIDB4ODM4YjM2NTAsIDB4ZDQ3MjBjODQsIDB4NGMzOGRjOTMsIDB4NDkwYzExNzIsIDB4ZTlmOTNlYjgsCi0JMHhkMDgxNzRmYSwgMHhmNmM1M2MzMywgMHhkNTJmMDY2NCwgMHgwYzdmNjAxNiwgMHhiMDZjMjAyYywgMHhmOWYzMDRhNSwKLQkweGYzYjJlNjA2LCAweGQ4ZjMwM2Y4LCAweGQ4NGY1OWZkLCAweDkxYjliYWQ5LCAweGQ5N2EwN2FmLCAweDA3NWIyYjY4LAotCTB4ZTIyNTkzNzgsIDB4Nzc3ZGU2YjcsIDB4ODg1NDAxYjgsIDB4N2JiMjZlMGIsIDB4NmNmZTgzMWUsIDB4NDc5YzFlYTUsCi0JMHgwMjY4OWI5NiwgMHgyOTJjYTNlNSwgMHg1M2ZlYzAyOCwgMHg2MDU1NjJjYSwgMHhkNmMyNDBmMSwgMHg3ZjY5MjgxMywKLQkweDQyZDVkMzU5LCAweDIwYjI4ZjU4LCAweDA3ZGUwMDk3LCAweDljOGUyNjNiLCAweGVmZTVkYWI0LCAweDhlNmFjNzE3LAotCTB4Yjk1YmEzYjEsIDB4ZTg1M2VjMWMsIDB4YjNhNzUzN2MsIDB4M2M3MGU0M2MsIDB4ZjgwZjgyODYsIDB4ODBkZDc0ZWQsCi0JMHg5Y2ZjZWQ5MywgMHg5M2Y4MzVlNSwgMHg3ZWNkOWUxOSwgMHhlNjBjMTAxNSwgMHhkZGZhZjEyNSwgMHgyOWVjOTEwYSwKLQkweDJkZjhmN2U4LCAweDg2YzU5ZGYwLCAweDY4ODM4ZjdlLCAweDA3OGJkMDQxLCAweGNlNWNlY2VkLCAweDAzNWI0MTZhLAotCTB4ZGQ0OGRmZjUsIDB4NDBiN2I4MzYsIDB4MjYwN2ViZTcsIDB4ZjQ0OWFiNWYsIDB4YTcyOWM0OTUsIDB4YTUxN2MxNzMsCi0JMHhmMDI2ZmU3YywgMHhkM2U0ZTc1YiwgMHgwY2UxNTdjMywgMHg3ZTMzMDdiYSwgMHhiYzg2ODhmMywgMHhjZDZlOWQ0NywKLQkweDc2NmU4MWIyLCAweGViNDQ3Mzg4LCAweDdlODI5NzYxLCAweGEwOTBhNzdiLCAweGI5ZDM5ZjgxLCAweDBhNzA2MDUwLAotCTB4MmExNzllMzYsIDB4NWMyZmUzMTksIDB4ZmRmYWU5Y2YsIDB4ZTliY2Q4MmIsIDB4OGZmMWYzMDcsIDB4NmM1NjdiYzYsCi0JMHhkMWUwMGQ5YSwgMHgxYjlmMGZlMSwgMHgzMWViOWQzMiwgMHhjOGM5ZmI5ZiwgMHgzMjYzYzcwOSwgMHg0Y2FiNGYzMSwKLQkweGM4NTJiYjgxLCAweGRhMDcxNmU5LCAweDRjODlkNTU1LCAweGQwZmNjZGFlLCAweDc5YzI5NDFmLCAweDdjNTBjYmNlLAotCTB4ZWRmNDA5N2QsIDB4ODMyNGQ3MmYsIDB4Y2I3ZmVkMWUsIDB4YWZhMDQ0ZTEsIDB4ODI1ZDBmMTksIDB4ZDgzZWY0N2YsCi0JMHgxYzliZmFiNywgMHgyZjViN2Y3NywgMHg5NDA2MzIzMywgMHg5MTk5OWQ4MywgMHhmZWE1ODE5OSwgMHhjNTI5ZGViYywKLQkweDI2YTVlZjhkLCAweDZiYjhjZjdjLCAweDQ2ZGJlNTgwLCAweDAyNmE2YmYxLCAweGY3YTRlZmVkLCAweDI4M2M3NzhkLAotCTB4ZjcxOGRkZWUsIDB4Zjg2MDRmYWUsIDB4M2M3NDU3YWUsIDB4NjcyMDQ5YWEsIDB4YzQ5NmJhOTEsIDB4YjMyNzc5Y2UsCi0JMHg4Y2RjMWM3YiwgMHhiNjdkNmI5ZSwgMHg3ZThhNDk3MiwgMHg0Njc2ODNjZiwgMHhmMmI5ZTIzZiwgMHg2YjAyNTA0NiwKLQkweGY5MDliMjY1LCAweGY0NjVjNTlhLCAweGU4YWE1YzdjLCAweDE5OTJmZDE4LCAweDhkZjViZjVjLCAweGZmN2Q4NzJlLAotCTB4OWM2NDg0ZGMsIDB4ZDNiNWQ5ZWYsIDB4NzI3NGJjNzAsIDB4YzUzODdkOTcsIDB4OGIzMmZjZWIsIDB4OTM5YWYxMDYsCi0JMHgwODllZmY3MywgMHg2NmU2ZmY0NywgMHgzYzEwMTViNSwgMHgxYWIzNWE2MiwgMHgxNmZmYWVmYywgMHg5NDA5YjliZCwKLQkweDU0ZjU2OTRlLCAweDNlMzJhNTExLCAweDc0YTNiOTAwLCAweDEzZjcxMmI5LCAweGU2ZTI1OGU3LCAweDYwNGQ4ZGRmLAotCTB4NzZhN2Y1N2UsIDB4OTE5YjhlMzcsIDB4MjJiY2I4MzEsIDB4MTAzZWJhM2YsIDB4MjNmM2E0ZTksIDB4OGFjY2MzOTUsCi0JMHg2MTczOTEzMSwgMHgyNGE2M2Y5NCwgMHgyZWE3OTFjNCwgMHg3ZWMzMzQ5OSwgMHhkMzBmYWU4MCwgMHg3ZDc1ZmUzOCwKLQkweDFhNDNjYmFjLCAweGVmZWMxOWM4LCAweGE4ZmQ1MTk1LCAweDdmMjg3M2QzLCAweDkwZTMxZDM1LCAweGZjYjQyN2Y4LAotCTB4ZjNiMDRiZjksIDB4YTExNGE3MTMsIDB4YmZmMmEzYmUsIDB4MDQ2NWU1MDYsIDB4ZDA3NmRmZDMsIDB4YzdmMTUxYTcsCi0JMHgwNzc3ZDZhZSwgMHg4N2RlYmVjMSwgMHgwNWM2NzlmZiwgMHg5MGZmM2JmYiwgMHgzZmEwNWRiYSwgMHg0ZGYyZmQ4ZiwKLQkweDdjMTFlNDE3LCAweDg3MTY0YmY4LCAweDFmZTRkNWI4LCAweDllOTgxMzc5LCAweGNkOTQyNjBmLCAweGU2ZGQ3OTgyLAotCTB4Mzc4MTY3ZmIsIDB4MGFjOTJmOGEsIDB4OTBiMTVmYjYsIDB4ZjNjNmJiMmUsIDB4YmNmM2M2ODMsIDB4ZjNlNjgyNGIsCi0JMHg3N2VjN2ViYiwgMHg4ZTNmMTQ4OSwgMHhjM2E3MDhmZSwgMHg0YWY1YzZjMiwgMHg3YmUzMGE5NiwgMHg4ZjNkMDIxNywKLQkweDU4ZWZmZjcxLCAweDQzNjdiYjEzLCAweGUzNmU2Nzg3LCAweGEyN2MwNTY4LCAweGY5NThiNDdmLCAweGNjOWI3NmJlLAotCTB4NzRjZjA1ZDYsIDB4NzJmMmE3ZDgsIDB4ZGNlMTk5YmMsIDB4ZmQ4MWNiYjcsIDB4NDQ0NDdiY2QsIDB4MWQwZTY0YmYsCi0JMHhhZmQ1MDU2YiwgMHg2Nzk2MTZkZSwgMHhiY2M3OWU2YiwgMHgzODEyZDUwZiwgMHg1ZWVmM2YyZiwgMHg3ODVkZmQwMSwKLQkweDlkNzQ5N2ZmLCAweDA3YjhhZWYyLCAweGYzY2NiM2Y3LCAweDYwM2ZkZjM0LCAweGZiYTRiNzNlLCAweGZkMzgwYjQ5LAotCTB4ZTUxNzg4MmIsIDB4YTIwZjI2MmYsIDB4OWIzYmVkODUsIDB4ZjdhNzdhZTMsIDB4ZmU2MDM4ZTcsIDB4M2Y3MDI1ZjcsCi0JMHg4MzhjODBhMywgMHhmYmFkODc3YywgMHgyZjlkMjY4NywgMHg5ZjgzYWFjZiwgMHhmM2MxM2VkNywgMHgwOGY5OGYzMywKLQkweDU0MTJiMzk2LCAweGU1YmEyZTc2LCAweGFiZTAxMmY1LCAweGYwNWJjZGE1LCAweGFiNmY5NmJlLCAweDFjYjQ5NjZmLAotCTB4ODkzMWZjNGYsIDB4MWY2YTFkZTgsIDB4MjFmZTA3YWUsIDB4Mzc2MGMxNWUsIDB4NDY3ZjVkMmUsIDB4YzMyYzdlNjEsCi0JMHhmOWZjY2RjMywgMHhkYzVmMzBjZCwgMHg3MmY3NjUyNywgMHgzZTU4YmNkYywgMHhjYjlmN2QxYiwgMHg3Y2M2MDlkMywKLQkweGY5ZjA4ZWViLCAweDI1OGYzNjczLCAweDlmNDgxZjdjLCAweDY3OWY5OTlmLCAweDVlNzhiMDI1LCAweGQ1ZjJjNmM1LAotCTB4NmI5NGU4MDMsIDB4ZTYwZThmNWIsIDB4ZGYzMDBhZTcsIDB4MzMxN2U3NWEsIDB4NjUyMDJjM2YsIDB4MTQ0Mjk5MjUsCi0JMHg4ZDdlNWJkZCwgMHhhOWY0ZWE3MCwgMHhlN2MzOWJhOCwgMHhmYmUwY2ZlMywgMHhlNzEwMTk2ZiwgMHhjYzBmOGRlOSwKLQkweGRiOTRlZWY0LCAweDlhN2M4MzA3LCAweGMzZDlkZGU5LCAweDA5YWRmMGY5LCAweDUwYWZkZDZjLCAweGZmYTAyNTNkLAotCTB4ZDViMjkxZTYsIDB4ZTNiYjI4ZWUsIDB4ZWZiNzU0OTgsIDB4MWIzNzIwMTcsIDB4YWQ0NmRmMTksIDB4N2IzOGNjYTcsCi0JMHg3OWY1YzY0NSwgMHgwZmVkNGI5OSwgMHgxZDIxMGNmNywgMHhiZGZlYzAyNiwgMHhlOWVmMGZkNSwgMHg3OWYxMWNlMywKLQkweGUwMTI2MWI0LCAweDEzY2IxNGI5LCAweGQ4NmQzMmJlLCAweGZjZmI0OGIwLCAweDQyMjRjZjQ3LCAweDA0NmJiNTNjLAotCTB4YTc0Yjc4YzEsIDB4YzdlZjA4Y2IsIDB4ZjNjMjIyMDksIDB4NjJjM2E3MzEsIDB4ZWY1ZmVkYTksIDB4ZDhkOWNlODMsCi0JMHg0NzA5Nzk4NiwgMHg5YWYxZTZiZSwgMHhmMWE1YWRhZiwgMHhiZTRmZjllNiwgMHg5ZjdlMTFmZSwgMHg2ZTVjYWRjYSwKLQkweDM2ZTFmZjc0LCAweDViNWJiNzRlLCAweGRjZjNiZWQ4LCAweDBmNDhlNTc1LCAweDA3MjBmZGYzLCAweDE2NDk3NzA0LAotCTB4MWMxYmNhZWQsIDB4Y2RmZDAwYWQsIDB4NWRhNzk5ZjQsIDB4NmJmNDFjNzEsIDB4ZmRjODlkMGMsIDB4OThiZDJmOWMsCi0JMHgyZjUxNTM0ZiwgMHg0Y2MyN2M2MiwgMHg5Yjg3MGFiZiwgMHgzNWFiY2RlNSwgMHhlYTJkNmZlOCwgMHhlNTVkY2Y0MSwKLQkweGFmYWU3YTYwLCAweDYzY2YzMWYzLCAweDdhODA5MzRlLCAweDgyZmYwY2NmLCAweDBmNTcyYjhkLCAweDM2N2YzMDIwLAotCTB4ODQ3OWQ4YmYsIDB4ZTE5ZWEyMDYsIDB4NTVlN2Q0ZjMsIDB4NDczYzM0NDEsIDB4ZDM4ZmIzMWEsIDB4Y2U4OTM5N2UsCi0JMHg3MmQ4NWNhYiwgMHgyZWMxZTYzYiwgMHgyYzI3ZjNhNSwgMHgxYmYxODNkZSwgMHg1ZTFkN2UxZCwgMHhjNDRhM2NmMywKLQkweGYxMDZkOTBlLCAweDA2ODIxNWQ2LCAweGRlZjYzNmZhLCAweDVlZTE4ZjE2LCAweGJiMGQzOWE4LCAweDhlZmQwMjA3LAotCTB4MjFhYmVkNDgsIDB4MmZjNDdiZmUsIDB4ZjVkNmZmYTAsIDB4YjQ0NWMxMDEsIDB4ZmI4MDhkNmIsIDB4YWZkMjNkNWUsCi0JMHhmNGVkZTU4NSwgMHgwNTFhYzc0YywgMHg1OGFhMzllZSwgMHhlM2E1YzQyNywgMHg2ZDQyZmE4MiwgMHg1OWRlOTQ1OCwKLQkweDFiNTJiODE4LCAweDg4Mzc4MDY2LCAweDFhOGIxYzc5LCAweGE3Y2YwZGNhLCAweGI4ZmE4YzM4LCAweDM1MjM3OTM3LAotCTB4NzRkMmYzZjEsIDB4NGRlNWQyZjksIDB4ODcwYWJmOTcsIDB4NTJmZmUyY2EsIDB4MzY1NjVmNjAsIDB4ZDEwN2U5ZTgsCi0JMHhmNjdhYTBjZiwgMHhjMzhiMDc2YSwgMHg3ZDIzNzAzYywgMHg2N2EzZTk2NSwgMHg3OWZjNzEwYywgMHhlNjdkMTllMywKLQkweDc5ZjFkMzg5LCAweGM1MDNlYjRmLCAweGNlZGY0MTgzLCAweGVkZjUxODcyLCAweDNlOGY5ZGY3LCAweGY0MmU1ZDBmLAotCTB4YzJlNTk5ZjksIDB4ZmUzZDdmOGMsIDB4MTk4M2E2NjUsIDB4ZDgxNzAwZmYsIDB4MWQ1YTA3ZmIsIDB4OTAwNGJiODEsCi0JMHhiZmE3MDY3NywgMHg3NjcwOGVkNSwgMHg3MDY5MTQ2NiwgMHg3YzAwZTU5ZSwgMHhkMmRjZjU0MCwgMHhmZDYzMWZjYywKLQkweGI5NmNiMTI2LCAweGVlMzRmZDAzLCAweGYzZjE2OTA3LCAweDBmZjZjMjZkLCAweGZlYzQ2M2I3LCAweDFlMzAxMTk2LAotCTB4YzgzNDEzMTEsIDB4MmNiMzE3MGIsIDB4YmNlOTViMzUsIDB4MWNiNDIxYzQsIDB4OWFjMWU5MDUsIDB4ZWI5ZmU3MDgsCi0JMHhlMTEzMmY4YSwgMHg3ZTVhODZkZSwgMHhjMmQ2YmEzZSwgMHhmZGU5NmRjZSwgMHg3NWIwNzFhZCwgMHgzOTc3MmY0OSwKLQkweDY4M2I1NmNhLCAweDZiNWYyN2ZmLCAweDc4YjA3MDJiLCAweDM4MTlmYTJmLCAweDkzZWUxMTRmLCAweGQ4MzE3ZWE0LAotCTB4Y2MxMzJmYjMsIDB4MjM0YmNkNGYsIDB4MGViZTgxN2IsIDB4ZjIwZjE5ZTIsIDB4ODUyMzhjZmQsIDB4ZmI2NTVmOWYsCi0JMHgwYjJmZjQ2YywgMHg3OTZhY2Q0YSwgMHhmOTA4ZDU1ZSwgMHhhNjA3N2RmZCwgMHg1YTcwM2RjMSwgMHg2Y2NlZTU5MiwKLQkweGYxYzI3ZjVhLCAweDU5NjdhYjNhLCAweGE5YmI2NGNlLCAweDgzNzhlZGZmLCAweGNlNWE0N2Q1LCAweGE3ZjVhNTBjLAotCTB4M2FiMjZmMWMsIDB4MDU1MTA4NmMsIDB4YWRlM2I0ZjMsIDB4MzA1MWZlNjksIDB4M2ZkZjliOGUsIDB4ZjIwOTE5ZTAsCi0JMHg1Zjk4NTkyMCwgMHgzMDUxZWQyYiwgMHhhM2VmYWNmZSwgMHgyYzA2YTJhZiwgMHgwMGNmYWZmOCwgMHhiYTlmODJmZiwKLQkweDBlNGZlOGIyLCAweDc5MTVlZjg4LCAweGJmMWZkODU0LCAweGZkYjY4MjFmLCAweGUzYTk3YmJlLCAweGYwNTg3NDU1LAotCTB4MDEyODBhNWUsIDB4M2UzODViZmYsIDB4MjY5MGJhNzUsIDB4MjNjODQ4Y2YsIDB4NDhjZjQxMjQsIDB4ZTVkODc3ZDgsCi0JMHhkZDAxMzZmMCwgMHg1ZGI0MGZmMywgMHhmNGQ0NzIwNiwgMHhmMDBiZGZjNiwgMHhhYzIxY2NmZSwgMHgyOGNhN2M5ZiwKLQkweGM5ZTZkZjcwLCAweDhmYWQwNjE3LCAweGU1ZGJiZmRlLCAweGY0MDFkYzI4LCAweDNiNDA2NGExLCAweGU0ZGQ1MDQxLAotCTB4ZDQxNzZhNjYsIDB4Yzk1ZTNmNTIsIDB4NjhjNDdmMDEsIDB4N2U3MTM3ODcsIDB4NmNhMTJkN2IsIDB4YzBkOWYyMzcsCi0JMHg4ZTFmZDMxMCwgMHg4ZmQwYmRiMiwgMHgyZGE0NTcyZSwgMHhhNzdjNGZhNSwgMHg0MTEwYWVlNCwgMHgzNTY0YTYzZiwKLQkweDcyMGI5YzFmLCAweDljZWNkZmY4LCAweDYwZjFlMGFjLCAweGYwZTZkYmZlLCAweDNmNmMyMGZkLCAweGU5ZmIwMWRkLAotCTB4OTIzNWFmYTAsIDB4NzFlNzRmZTEsIDB4MjM4ZjE2MDUsIDB4ZmU1MTA1NjksIDB4ZmQwNzlmMDUsIDB4MzdkYzJhN2UsCi0JMHhmNmMxY2UzMiwgMHg0NGJjZTk1YiwgMHgxMzQ2MWY1OCwgMHg4ODdjY2IxNSwgMHg2YTAwZTQxMywgMHg0OWRmNThiZCwKLQkweDQxN2YwNzgyLCAweGNlYzg3ZmZiLCAweDAzNWI3NGZjLCAweDJjNWRjNDMxLCAweDVmN2ViNjRlLCAweDdkZDk5MmU4LAotCTB4NWFmMDcyMmQsIDB4YTcwOWUzZDAsIDB4NzhmNDFiODgsIDB4ODQ4YWUzZDcsIDB4ZmI5MjE4ZjksIDB4YjA5ZmI4NDcsCi0JMHhkZTAwNDJjZiwgMHgxYjgwZTRhNywgMHgxN2RkZDllMiwgMHgxMjA2ZWE0OSwgMHhkMzhiYWZlOSwgMHgyMWY3ZWY1YiwKLQkweGUyMDhiZDQ1LCAweGNjNWNhMzFkLCAweDkwYWE3OGJlLCAweGY3NjhmZTYwLCAweGZiMDAyNTcxLCAweGI2NTkyOTRjLAotCTB4ZmFiZjY4OWEsIDB4ZWY3YjA3MmIsIDB4Y2ZhMmE0ZDYsIDB4ZDZjMTFlODEsIDB4OGZlMzAyMDQsIDB4NDQwZDQ1ZGIsCi0JMHgzNTNmODc0YSwgMHgxZjgxZDllNiwgMHgyODhlMDMzNiwgMHhlZWFjNTIxZSwgMHg5NGJmYTAzYiwgMHg2Y2RlMTQzMywKLQkweGZjNDFlZTdjLCAweDI0ZThlYTRhLCAweDU3ODlkZjhhLCAweGJmYjg1NTM5LCAweGYwN2IyOWUxLCAweDdiOWZjYzJhLAotCTB4MjRmNzgyZDYsIDB4NzJiNDU2NmQsIDB4YWQzZTZmYTgsIDB4ZjM1ZTIxYmEsIDB4MDEzMDc2NTQsIDB4MDVhY2YzZTcsCi0JMHhhMTM5YjNlNywgMHgxNDY1ZTJmYiwgMHg2MDhkNWZlZSwgMHgyMGU0YmY3ZSwgMHhlNDA1MmQ5MiwgMHg4M2JkNDhhOCwKLQkweDMyNzA0ZjNlLCAweGMyY2FiODdkLCAweDkzOGE2OGU0LCAweDAyNDNjZmM5LCAweGRlMGYzZjFkLCAweGQxZjk0NDJiLAotCTB4YmFiYTFiZjMsIDB4N2U4ODc5ZDksIDB4YzA4OWI3ZDcsIDB4YmFlNTA5YzcsIDB4YzExMjFlM2YsIDB4NDY1YzllOGYsCi0JMHhlYzljZmQ3MCwgMHgzYTJhMDM5NCwgMHgxY2U3MWU5ZiwgMHgwOGNiZmY0YSwgMHhmYjJlMWY1YiwgMHg1ZmM2MzE2MCwKLQkweDgyZGUwNTI5LCAweGViZDgwYmRmLCAweGYwNTJmN2U0LCAweDM5Y2I5ODdkLCAweGVkMjE0YzlmLCAweDUzZTdhYzIyLAotCTB4NDQyZDExY2UsIDB4OWNmY2JiYzcsIDB4OWYzZDc3MTQsIDB4NTI3ZGZiYzYsIDB4N2QxMjUyMjAsIDB4MmFhY2YwYWYsCi0JMHgxMjE1ZGYwMSwgMHhhZDNiN2FlMywgMHhjNDM4ZTRiZSwgMHhhNjZkOGI3YiwgMHgyMzVlYjBlNywgMHhmNDA5MWUzYywKLQkweGIxYjczNGQ3LCAweGFmOTNhNDdkLCAweGUwYzk4MzRmLCAweDNkMWFiY2U4LCAweDFjNGQzZTZlLCAweDBiZGEyOGY1LAotCTB4NzgwNjhhYTUsIDB4YmNmNGUyZDksIDB4N2U0NGZiMGIsIDB4MmY5ZTI2ZWEsIDB4OGZhNGYzM2UsIDB4Mzg4ZDNmZTUsCi0JMHg3MmYxODA5NywgMHhlMDRlOWZjYSwgMHhlYmViOGI4YiwgMHhlZjNhNzZmYywgMHhmZWIxODc4YiwgMHhhZjQxMGY4MSwKLQkweDVhNzhmODVjLCAweGY3ZjllODJhLCAweDRiZDFiZWI5LCAweGJmODBlZjlkLCAweGJmOGM0OWRjLCAweGU0NDY5N2RjLAotCTB4YzQ5MjE0YjMsIDB4MGRlNDQ2YzYsIDB4ZDlmYTBlZjgsIDB4OGE2ZTA3MjksIDB4YTkyZjdlN2IsIDB4MGZkOWQ0YTgsCi0JMHg0ZWQwNDFlNiwgMHgzNmQzMmZiZSwgMHgxZjRjZTQxYiwgMHhlMzI3MDFlNywgMHg3YWI5NzM2YiwgMHgxMGRkYjJlNSwKLQkweGNlN2ZmNzA3LCAweDAzYTk4YmQ2LCAweDVhMWU2MWNlLCAweDYyNDg4ZmQ4LCAweGQ2YWQ1NjdjLCAweGYyMDMzNzVkLAotCTB4YzYzMjljNjIsIDB4ZjlmOWQzYmIsIDB4Yzk3ZTY4YWIsIDB4OWQxN2UyOGMsIDB4Y2M5ZDNhZWYsIDB4YTdmOWQ2OGYsCi0JMHg5ODliYzc3OCwgMHgzOWZjNWZkZiwgMHgxMjZjZWUyMSwgMHhmZTc1MDdiNiwgMHhmOGNmY2NiOSwgMHg2Y2ZkYjJmMCwKLQkweDdmOGRlODlkLCAweGE5ZWVkZDNjLCAweGY4NjMxZWEwLCAweDliZTMzZjY2LCAweGY4MWZjYTIyLCAweGYwM2QxMGZiLAotCTB4OTY2Zjk5OGYsIDB4NWYzN2NhZjUsIDB4OTY3ZTAyMjcsIDB4Nzc5ZjE2YjcsIDB4NjdkOWE1OWYsIDB4OTczMzkzY2MsCi0JMHhmM2YxMWMxMywgMHg2MjRkOWYyOCwgMHhhOTQzYjFmYywgMHhlODJlNTFmYiwgMHgxYTJkYWI4YiwgMHgxNWNhMDNlOCwKLQkweDNlNTJkNzU5LCAweGRmYTA5MWRmLCAweDAzOTM1YTdiLCAweGQzMTIyZGY1LCAweGFjNWE1YjNmLCAweDM4YjY3ZmE4LAotCTB4Njc4YzVlYmQsIDB4NjhmM2IwNjUsIDB4NDNiNmYyNDQsIDB4YzAzNmI0MWUsIDB4ZjNkZjQ2YTYsIDB4OGQ5M2E1N2MsCi0JMHgxMzQzOTQxMywgMHhmNDFkODI4ZSwgMHhmMWZmNDYxNywgMHg4ZGMxZTc1NywgMHg4MmIzMjQzMCwgMHgzMWNjNjFkMSwKLQkweDBkOThiZDY1LCAweDhmODUzYmU5LCAweDAwYmQ3ZjAwLCAweDU3N2U4MzNhLCAweDczYzE1ODdkLCAweDJiMGY0YmZlLAotCTB4ZDg1ZjE3YTgsIDB4YzQwOTdhZjUsIDB4Y2I3Y2Y0OGQsIDB4MmY1ZjNiNzEsIDB4ZWYwNTFhMjksIDB4OWM3YjNlMzMsCi0JMHg4ZWJkNjNlYiwgMHgyN2EwZTdhOSwgMHg0ZWE2Zjc0ZCwgMHg5OTdmNGMyMCwgMHgwMzJkM2RlZiwgMHhiNDhkYzlmZSwKLQkweDlkMDNlZjliLCAweGQ2MWU0NTQ1LCAweGI1ZGI2YjlkLCAweGNjMTZhMDY5LCAweDBhY2U4MWY3LCAweGZmZjY4NTVkLAotCTB4Njk5ZTgzY2MsIDB4N2RjZTM1MmUsIDB4NmUxZjljYTAsIDB4YzFkYjZkMjAsIDB4NGZkZjM1MjUsIDB4NmRlN2Q3NDksCi0JMHhhZjkzZmYzMCwgMHgyZjg4MTQ4NCwgMHg5MTlhOTUwNiwgMHg5YWVlYmVlYywgMHhiYTNmZDAxYywgMHhjNTFmZTFkYywKLQkweDExYzNmMDViLCAweGJmNjhmYjg2LCAweDVmYmVmM2U0LCAweDA4YmRkODkzLCAweGJmZWUwYWVkLCAweGVmYjA5YWZjLAotCTB4N2FkZDdjODIsIDB4ZGRlMmM5ZDMsIDB4YmI5ZmNiNzksIDB4N2U2MWY0MDksIDB4YjlmNzA3YTUsIDB4OWY5ODkzNGEsCi0JMHhiMjEyMWJmYywgMHgzNGJkMDBlNSwgMHg0MWM4ZTMwOSwgMHgyYTNlMmQ1OSwgMHg1MjIzZGU0NCwgMHgwZjM4MDhkOSwKLQkweDQyNWZiM2I1LCAweGI5YWY4YzNlLCAweGMxMzhlZmJjLCAweGY3YmE5MGFlLCAweDI2ZTM3N2MzLCAweGRlODNlNWU2LAotCTB4OTU1ZThlNzYsIDB4MGU5OGViMGEsIDB4NzRhYjg1MzcsIDB4ODcwMjMzOTMsIDB4YmU1ZWQ3MGUsIDB4MzlhZTY4Y2UsCi0JMHhlMWZjYzBlZiwgMHhjZDQzZDAzYiwgMHhlMGQ4OGU4NywgMHg4MjBmOWQ3YiwgMHhmZDE4YTdhZCwgMHhlODAxZjhhMywKLQkweGUxMDdlMTFmLCAweDc4ZWJhODM2LCAweDg3ZTcwN2Y4LCAweGZjNmRmZjJmLCAweGYxNTlmZDQwLCAweGZlMDBmYzNjLAotCTB4ZTJmN2UyNjAsIDB4ZTY4OWZmODcsIDB4ZmRhZjZhMDcsIDB4YWY2NTE5ZDMsIDB4YTc5NjE1MDUsIDB4M2U3NWQ3YTUsCi0JMHhjNDI4ZTQ1OCwgMHg2MDg1MzRmNywgMHg2NWQ5MDViZSwgMHhlMmRmYmY2NywgMHhmMDM4YzY0ZCwgMHg0NjM2NmVmMywKLQkweDA2NDc4N2Q3LCAweDc2ZTIyZjgzLCAweGUzNzkzMGE1LCAweDBlOGY1ZGY3LCAweDhlNTc2ODA5LCAweDY2ZTEwYWE2LAotCTB4YTIwNmUzYjQsIDB4YmUzOGQ0M2UsIDB4ODA0MTExYzgsIDB4MTczMGFjN2IsIDB4Y2JlYzBiMzcsIDB4YzVjODJhNTAsCi0JMHgxMGY0ZWI2OCwgMHhjNzU2ZmZmMCwgMHgxZjYwNTk2NSwgMHhlNzI2MzllNiwgMHgxZjZkN2YwMCwgMHg1ODE1ZmNiMSwKLQkweGE4MGZiNmIyLCAweDFhYTM3ZTdjLCAweGJkNzQ5ZmIxLCAweGFiNzc5N2I3LCAweGM1YzQzZjhmLCAweDBmNzJlMWY4LAotCTB4N2EwMTRmM2IsIDB4NWQwZTFhM2IsIDB4MDA1OTAzZmYsIDB4Y2IzNDIxMGUsIDB4ZjUwMzhkZjIsIDB4ZTgzYjRiNzUsCi0JMHhlMjgzODA3MywgMHg5YTQwYjc3NSwgMHhiNDI4M2VjMCwgMHhjMThhZDI3OCwgMHg5MjE3ZWJjZSwgMHhkNmFlY2UwMCwKLQkweGJjNDMwNzJmLCAweDlmY2I3YTY4LCAweGQzYmMwMjBmLCAweGNkMjY3ZGY1LCAweGI2NjRjZmI4LCAweDQ3N2I3NWEzLAotCTB4N2I3NDJiZjcsIDB4ZDA4OGEyNDgsIDB4Yjc2ODI2ZWQsIDB4Yjg2ZWU3ZjAsIDB4YWZkNjFiMWYsIDB4NzFjZjBkOTAsCi0JMHhiZDVhNzQzZSwgMHg1N2U1YzNjOCwgMHhjZTk4ZjNhMiwgMHg2OTBkNzFlNywgMHhkN2M4Yjg0MywgMHg5OTMzN2NkZiwKLQkweGM3MDY2N2QyLCAweDI0ZmRmNGM3LCAweGVkMGI5MDk0LCAweGYxNGQ1Yzg0LCAweGZjNDRiNTcwLCAweGFiOWM3NDQ5LAotCTB4MWM3YzgxMzUsIDB4OGNkNzI3YzUsIDB4ZWZlMWQ2MzcsIDB4M2Y0OGY0YjIsIDB4NWU2ZmJkYmQsIDB4ZTI5OTI2MWYsCi0JMHhkY2I3ZGZmMSwgMHhhYmU3NjNlZiwgMHhlNzYzZWFmZiwgMHgxNTBlMjc2NywgMHhhODJjMTJmZCwgMHhiOWQ5MzNlMywKLQkweGMzYzMzNzU5LCAweDdhZmUyNTdlLCAweGM5OGI4OGY1LCAweDdiNGI0NGYxLCAweGRjMWI5YzJlLCAweDVjMmJmM2JkLAotCTB4ZmNlY2Y3MWYsIDB4MTNiMDFkZWEsIDB4MDg5NzFjMjcsIDB4M2M0ZTAxZTQsIDB4ZjcwOTI2M2UsIDB4ZTA2N2M3M2QsCi0JMHg2ZmRlOWQzZSwgMHgwZTRkYTdmNSwgMHhmZjIzOWVjMiwgMHhlZjgyZjdlOCwgMHgxNDc4ZjBhMywgMHhlNTg2Y2Y4MCwKLQkweDNkMGYxZDhiLCAweDNkOWRmZDBjLCAweDNjZTg5MTJjLCAweDNiYzUxMmYzLCAweDI1NjllMjBjLCAweDdkZjg3ZWZjLAotCTB4ZjQ5N2IzMDIsIDB4NWVmYzdkZjYsIDB4NTk3MmZmZTYsIDB4OWI2YjdlZjgsIDB4NjI1ZWZkYzQsIDB4ZDVmM2EyOGQsCi0JMHhlNTI0ZjM1NCwgMHhmNTdhZTg0NSwgMHg1MmUzZDJiMSwgMHhlMDdkMmM2ZSwgMHgwZjlkNjNlZiwgMHhkYzY3OTNjZiwKLQkweDU3OWZhOTViLCAweDIzZjhlM2FlLCAweGYzYzNkZjdiLCAweGRkMzQ1NzAwLCAweDdlN2Q4MTIxLCAweDNjNDg4NjQ1LAotCTB4YTk1ZWUzNTEsIDB4MmEzZTBmNTIsIDB4OGI4ZjcxZWUsIDB4NzZlYWU1ZTcsIDB4MWZhN2RlY2EsIDB4ZjcwNjkxOWUsCi0JMHg3YTk4ODg1OSwgMHhlNWIyZGQ1NSwgMHhiN2E4NWM5NSwgMHg3MWNmNzE4OSwgMHg0NTdiZjE5YiwgMHhmMDEyMWRjYiwKLQkweDI2MmUxN2ZmLCAweDNmOGRiZDFmLCAweDI3Y2E2MmYxLCAweDA5ZGQwMjk3LCAweDA0MGFmM2IzLCAweDdkMzMyMzk0LAotCTB4N2RmY2VjZjcsIDB4OWVhOGZiNmEsIDB4ZmQxM2RkZjEsIDB4YjE3ODc0Y2QsIDB4MmZmNzA4YTMsIDB4OTk4N2EzN2EsCi0JMHg3OWQxNzc2ZiwgMHg0MmZjZTlmYSwgMHg2YTdlOWU3NCwgMHhiOWYxZWQ4ZiwgMHgyZjkyZmViMSwgMHhiZjNhZWIwMywKLQkweDkxM2ViNzU2LCAweGNlOWNmNjBhLCAweDE5NTJkM2E3LCAweGYxZDg0Y2RmLCAweDQ2NzEyYTcwLCAweGRiYzY2NWU4LAotCTB4NjZmZDM5NWYsIDB4MGNlNjZkMTEsIDB4ODI2ZGNmZmEsIDB4ZTE3ZDQyZTYsIDB4Y2Y5MDZkMjcsIDB4OWM2MWM2NTIsCi0JMHhkYTA5NTZmNSwgMHhjZmU3ODQxZiwgMHg1OWIxZDc5YiwgMHhkN2JjMjhlMiwgMHhkOTdiZDdiYSwgMHhhMGNhMTU4NywKLQkweDE1ZWJjZDZlLCAweDdjMGUxN2RjLCAweDRhYTc1ZTZkLCAweDcwNDlkNDBmLCAweGI0ODk1OGFkLCAweDZlMzFlOTljLAotCTB4OTk3MGViYTcsIDB4MjkzNmZjZTksIDB4MDRmNDc5YzMsIDB4Y2MwZjk5YTcsIDB4YjlmNmVhZjAsIDB4YzUzOTRmN2UsCi0JMHhkYTE0YjRjNywgMHgyMTZhYjVkZiwgMHgxZDY2MmZjZSwgMHg2OWU5NzhlNiwgMHg1ZTY5ZWRmZCwgMHg3ZmZjNGQ0NywKLQkweGQ3ZDRkOGU2LCAweGM5M2RiZDAwLCAweGU2NmU5OTliLCAweDk0N2Y1ZDc2LCAweDU4NzkwMGMwLCAweGY5MWVjMWZhLAotCTB4ZjQ4ZTk1YzIsIDB4MTBhNzM5MmQsIDB4MGYxYmVjMGYsIDB4YTI0ZjkzYjQsIDB4N2QzMjIxZDYsIDB4OWRkYmYyMDgsCi0JMHgyN2FjZjY2ZSwgMHhjZTdhNWI3ZSwgMHgxMWE5YmM0MiwgMHgxZjliOTNiZSwgMHhlZGRmMDA3NCwgMHhiMDFjZWE5MCwKLQkweDU5YzUzM2FmLCAweGYxNDQ5YjVlLCAweGEyZDNmNTM1LCAweDc0YmNmMWViLCAweGM4NDA4NWJiLCAweGE5Y2I1YTZjLAotCTB4YTg0NzEwYmQsIDB4OWYzMDQ4M2UsIDB4Nzc2NWE4YmEsIDB4NGJlOWYwMzEsIDB4NTFmYTFiNTIsIDB4NzkwOTY3NWQsCi0JMHg2Y2NlY2EzMCwgMHg4MDc1YTk2ZSwgMHhjNjljZDYxZCwgMHg0YmVkMDNjZSwgMHhjZGJjODYyNiwgMHhiZjE5MTI0NywKLQkweDNkM2UxZjM2LCAweGZkYTcxM2MzLCAweDhlYmY2ZjAwLCAweDcxNzJkMjc4LCAweGZjNjE3NjVkLCAweDA1OGQ2NGEzLAotCTB4ZDA1NTNmZTcsIDB4YmIwMzRlNWUsIDB4MGY3NjQ2ZTUsIDB4YjhlYjU3NjMsIDB4YmMyOGQzOTcsIDB4YTMyNGI3OWQsCi0JMHg3Y2Q2OTk5ZSwgMHg0YTZlMWRjZiwgMHhmMzNmZTA4OCwgMHgxY2Y3NzlmMSwgMHhkZjQwZGI0MSwgMHhhYzM1NTEyYiwKLQkweGUzNjQ1NDk3LCAweDdmYjhmOGJlLCAweDFkMzc1ZWE1LCAweGQxOTRhZmRhLCAweDJlMjY5OWJmLCAweDc1MWUyMDk2LAotCTB4MDNjODQzMzIsIDB4ZDBhNzcxN2YsIDB4YTc3ZTEyYmUsIDB4YzZjZTVmY2QsIDB4MmE3ZjZlMjEsIDB4NGM2ZjlmZjgsCi0JMHhiZjhkMWQ0ZiwgMHhmNWVhYTI2ZCwgMHg2YmY3ZjAwYiwgMHg1YjRmYzk4OCwgMHg2ZWNjZWRiZSwgMHgzZTVmNmQyYiwKLQkweGM3N2NjMDUzLCAweGUyMmNlZTY5LCAweDkyOWZlMjhmLCAweGY5OWU5NDM1LCAweGZhNWIyZjk0LCAweDVmNWYwMTE3LAotCTB4NjczYzZhNTcsIDB4NDFjY2IzMzUsIDB4NjNmMWQxMDIsIDB4YzJjMzJkYzEsIDB4YjVlNzhmYjMsIDB4N2VmYzBiNzYsCi0JMHg1N2U3MmU1OSwgMHgzNTlmN2U3MSwgMHg1ZGYwZDUzYiwgMHg2Njc2NjEzOSwgMHhkZDkxMzZmNSwgMHg3ZWM4NTI1NywKLQkweGFmOTc1MTI3LCAweGJjMzk3MTFmLCAweDM3YzdmYjhhLCAweDcwMGNiMzdhLCAweDBkMjg4NzRjLCAweDY5MzMzNGZkLAotCTB4ZDc1ZGRhMjgsIDB4ZTVjNzZkOWMsIDB4ZTBmYzVjYjksIDB4NzhlODliYWQsIDB4ZjI2MTFhM2YsIDB4YWJjNWM1NmIsCi0JMHhkODMyMmY5MCwgMHhjODRjY2E3ZSwgMHg2ZjQxMTIyZSwgMHg2NmJiZGYxYSwgMHg0NzFlYjFiYywgMHgyN2FiY2Y4ZSwKLQkweGIzMzA3ZDc0LCAweDliZmRjNDU1LCAweGNmMTQ4NTk5LCAweGQzYjE4OTAyLCAweDE4YmVhZGJmLCAweDg2NWVkMTY3LAotCTB4ZTdiNWQwNzgsIDB4MDRiYmY4M2MsIDB4ODNlMmZhMzEsIDB4MmZhNGVmZDIsIDB4MzgzMmEwNWUsIDB4ZDJmNWNhOWUsCi0JMHgwZmRmZWU0NCwgMHg2ZjQwODMyMiwgMHgxZjFiMTM0YywgMHhhMmVhM2UwNiwgMHgwZTM1YTZlYiwgMHg4ZWViZTkxZiwKLQkweDUwOTdlZmVlLCAweDIxYmUwNjM5LCAweDhmMTg2OTFkLCAweDAzMmU3NjlkLCAweDdmNzQ0OWYzLCAweGE4NDdhYzNmLAotCTB4YjFjNWEyNWQsIDB4Y2M0YmVlOTcsIDB4MTMwN2RjMzEsIDB4NzY1MTJiZDYsIDB4ZmRmMDVjODksIDB4ZDQ2OTkyZWQsCi0JMHgwMGYyNTUxZSwgMHg5ZmM0ODFiZSwgMHhlMzBjZmE4ZiwgMHg3MDkwMjU5MiwgMHg4Y2MxZjEwMiwgMHhhOWU3MTg1MywKLQkweDhhZmZhODk2LCAweDRjMTNmM2ViLCAweDA5N2ZkMWNmLCAweDMwZjkxMTI5LCAweDljN2EyYmRiLCAweGRiYTQ5YWQ5LAotCTB4MDkzZTQ2NTMsIDB4OTdhZjFiYzcsIDB4ZjNhM2VlMzEsIDB4MTNlMDA5NDksIDB4MTE3YWZmZTQsIDB4ZjFiZDNhZTMsCi0JMHg2ZjdlM2U4ZCwgMHhmYWEyMTJmYywgMHgwZjM4NDkyOCwgMHhmYmY5NzBiZiwgMHhiY2YyZmNiNiwgMHhjOGMzMjdjZSwKLQkweDg5ZjBiZWIwLCAweGJmM2ExZmNlLCAweGE2MDlkOGM0LCAweGViNGY1MDc4LCAweGU5ODk0YmNkLCAweGQ2OWVkZjg4LAotCTB4Yzg0Nzk3OWIsIDB4YjM3YmQ3YTgsIDB4MzEyNjc2NmIsIDB4NzQ0YWVlM2QsIDB4NWQ1NzdmNjMsIDB4NzYwOWQzMzQsCi0JMHgxMWViOTU4ZCwgMHhjNzBhZGQ3ZCwgMHg5ZjE5ZWFiNSwgMHg1NzNlZGNiYywgMHg2YWEzZmQ4MiwgMHgxMWQ5MWZkMCwKLQkweDYwZjFlODNhLCAweGFlOTcyZjlkLCAweDljZmYxODIxLCAweDY3NTZmNWNlLCAweDU2MDc4YjJiLCAweDcwMDMxNTRmLAotCTB4ZTViOGEyODQsIDB4OWQ1OTg3YzEsIDB4ZDNhMmNiZGQsIDB4MjdjZTZhZjcsIDB4MDk2ZWQyODUsIDB4MWFmMzc3N2UsCi0JMHhiZTIwZDA0ZCwgMHhjNGYxZTFlNCwgMHg4MDk0ZTcxOSwgMHhhZmFiMWQ5YSwgMHhjNzVmYmE3NCwgMHgwYmJmMDdiZiwKLQkweDIzYzZiZmRlLCAweDFjNGJhODA0LCAweDNiYWVjZmEzLCAweDE4OGFlY2M3LCAweGNmYmMyYTdiLCAweDg5MWU2MmFiLAotCTB4ZWI0ZTVmOTksIDB4ODY0MjFmNzQsIDB4MGFlZDNiZmMsIDB4NzZmY2U5MjEsIDB4NmY3ZGZlODUsIDB4MWUwNjRlNzQsCi0JMHg2NWVlN2EwNiwgMHgxZDgwYWVmNywgMHhlMmJlNzQwZiwgMHgzYWZkODQ5YywgMHhjY2YxOGM5MywgMHhiZjc5MWRiMywKLQkweGJmOTNkZjQxLCAweGNkYWZiZTZmLCAweGM2ZGU5ZjNjLCAweDE3Zjc0NmZmLCAweDhmYTBmZmI4LCAweGNlYzQ5NTdiLAotCTB4MjdkNzliYzcsIDB4ZDc1ZTljN2QsIDB4OTliZGZlMjMsIDB4ZTI5M2MzN2UsIDB4M2ViYTdkZGIsIDB4ZDczZmMxOGUsCi0JMHhhZmQxM2RkNywgMHhlYmFkN2QzNywgMHhiZWI3N2ZjNSwgMHhkN2Q3ZmJkNiwgMHhiMzVjN2QxMywgMHg4ZmM5ZWYxZSwKLQkweGVhZjJmNWQ0LCAweGRmOGMxNmY1LCAweGZhZmVlMTRjLCAweDllMmYxZTE0LCAweDZjZTJjNDk5LCAweGVlZGViOGIzLAotCTB4MDE2NmRjZmEsIDB4YjMyODJlYmIsIDB4NmVmZjMwZmQsIDB4MzZhMWM2MjcsIDB4ZDBmNjYyZWYsIDB4NzI0ZTNjOWIsCi0JMHg5YzYyMjBiNywgMHgxNmIxZWVlNCwgMHgxN2Q0ZGJkNCwgMHg0Yjc5ODdjYSwgMHg4MDhjODQ0NSwgMHgyYzAxZGNmZCwKLQkweDg1MjhkZjRlLCAweDZiZWY1MGNhLCAweDZmNzM4MTEyLCAweGVmZGZlYWFmLCAweGZkMDRkZmYxLCAweDcwZjFmZGRmLAotCTB4YTNjNjJkNGIsIDB4YzdlMDZkNDMsIDB4NzA5M2NiOGYsIDB4YWFkOTJjNWYsIDB4YjNiYWZjNjIsIDB4MDNmNzhhZDUsCi0JMHhkOWY4ZWQ3NSwgMHhmOWZhMTk2ZSwgMHg1YWUwNjg5YywgMHgwZDZhZDRiZSwgMHgxZTgxNGJlZiwgMHgxMDFlMjY5OSwKLQkweGFiYTMzZjIxLCAweDU5ZmRlMDliLCAweDhhODc2NzkzLCAweDQyOWIzZmMxLCAweDBlMjE2YWRhLCAweGY5NjE1MTMwLAotCTB4M2QzYzY2ZTgsIDB4Y2MzMWY3Y2EsIDB4N2RlMTE0ZmIsIDB4OWY2NjU2ODksIDB4NzY0NGJiMTUsIDB4ZmI0ZjU4MGYsCi0JMHhlNjBhY2QxMiwgMHgyZmI2Zjc1NywgMHhhMDk2Nzg1MSwgMHgyZmIzMTY5ZCwgMHhkMmY0Y2NkMSwgMHg5ODk3ZGRiNywKLQkweGRmODdiODA4LCAweDlmZjlkMzY3LCAweGMzZDIyN2ViLCAweDg1NjZjNGZlLCAweGJmNzU2N2VkLCAweGJmYjAxMzJlLAotCTB4YjhiNGIxYzksIDB4ZjZkZWEzNzEsIDB4NGFlYzc2MjksIDB4MWQzZGMwZjAsIDB4NGRlZmY5OWIsIDB4YzAzNWQ4ZWMsCi0JMHhmY2Y2ZTZhMywgMHg3NzdiNmU3ZSwgMHhjZGE0YTgxMSwgMHg5ODRhZDc4ZCwgMHhiOWUzYzZmNywgMHgxOWEwYjhlMSwKLQkweDY2ZmYxY2FmLCAweGM4MTU2ZTdjLCAweDA3YzQwNzJhLCAweGUwYTliNDViLCAweGJmYjhmNTE3LCAweDcxYzFlZGQzLAotCTB4NWQ0NzhhZmEsIDB4NDkxZjM2NGUsIDB4NmY5ZjAwZjAsIDB4MDNjMDMyM2UsIDB4ZmMwMDNmZTMsIDB4YWI1OTcxMGEsCi0JMHg5M2YwMTVmYiwgMHg5ZDNlMWM3NywgMHg4YWJjZmI4MCwgMHhhNGJmMDU0NywgMHhiMWE2ZDkzYiwgMHhlZjhjODk3MywKLQkweDAzYzM5OTgzLCAweDlhYmQwZmIwLCAweDg0ZTZmOWYzLCAweDRjOGViZmVlLCAweDYxYWZkZThiLCAweDM5ZmEzM2ZiLAotCTB4NjA4NTVhZmYsIDB4YzJkZjg4M2UsIDB4NzhjYzQxZjIsIDB4ZWI2NmU0MWIsIDB4ZWJjNGU2YjUsIDB4YTY5Yzg5YzMsCi0JMHgzNWYyZjE4YSwgMHg3Zjk2NjJiNSwgMHg4MDdlN2U2MCwgMHhmMDM5NzdmMywgMHg3MTQ3ZWQwMSwgMHg4OTU2YjgzMywKLQkweGFlZmY4NDY1LCAweGNlZjU4MTI4LCAweGJmZTVhZjVjLCAweGM2N2I0Mzg3LCAweDFjZDU2NWRmLCAweGVkMmEzMzk2LAotCTB4NjdkMjc4ZTMsIDB4NDBlZmMwNTcsIDB4M2I5NmY5NmIsIDB4MmY3MGRjNzMsIDB4ZjJjYTUwODMsIDB4YjJmOTJjM2MsCi0JMHhjNDkzYzg0NiwgMHhkNjk1M2E1MiwgMHgwZWNiOTIyYiwgMHhiODgzZjUyNiwgMHhlNDBkNzNiMSwgMHg0NzllNDMzMywKLQkweDJmNDQ1YTVlLCAweDBhZDc0N2RjLCAweDJlMjQ1ZTViLCAweGJmMTJiMGViLCAweDNkNzBlYzFkLCAweDc5ZTc5ZmNmLAotCTB4ZmJlYmI1MmMsIDB4M2VlY2VkZDEsIDB4ODZmZThhZWEsIDB4ODUwZTRlNzMsIDB4YmZiZjQ3N2UsIDB4OWEzZGVhZGUsCi0JMHhhMTRjZjk4NCwgMHg3ZGQyOTU0NCwgMHg3ODY5OGVmOSwgMHg3NmUyOTA3ZiwgMHgzZTQ3N2NlMywgMHhmODAzMjkzZiwKLQkweGQ5ZjVjMjgxLCAweGZmNWMzMWZmLCAweGM4MmUwZjFiLCAweDNhNzE4MTZmLCAweDA2MmM4ZWI2LCAweDA4NzIzMWZkLAotCTB4ZDA4YjU5OWMsIDB4N2M0MWFhODcsIDB4YmMxMjBmNmUsIDB4MDFmZmYxMmYsIDB4NTEyODA5YzIsIDB4MDAwMDgwMDAsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YmI1ZmYwMCwgMHhkNTU0NzQwZCwgMHg3OWJmZmY5ZCwgMHhiZTRjZGVmMywKLQkweDIxMjY0Y2RmLCAweDAxMmYwODQyLCAweDFjNDI0MjQyLCAweDYxZjA4MDYyLCAweGM0NDQzZTFkLCAweDYwMmEwMzIwLAotCTB4NDNlMTk2ZWIsIDB4OWExYWY5MDksIDB4N2FiNzZlYmEsIDB4MjkwNDkzMGUsIDB4YjY5M2RiMDIsIDB4YjY1NGU1NmUsCi0JMHgyOGJiNTYwZSwgMHg4MjYwOWQ4OSwgMHgwNGVjMjY4MSwgMHg2ZWI1MDMxNCwgMHg1YjYwNDA0MCwgMHg2YTQ0NTQ3NywKLQkweGJiOGQzMjQzLCAweGIyOWVlYzU0LCAweGY3YmRmZmZmLCAweDYwYzMzMzI1LCAweDM5MmRkOWU5LCAweGRkZjczNzM5LAotCTB4N2ZmZGVlZmIsIDB4Zjc1ZmZlZmMsIDB4NTk1YzAwM2UsIDB4YzlhMDAzOTIsIDB4ZTdiNzNhYTYsIDB4MDAxYWE4MDIsCi0JMHg2ZGJjZGM2NCwgMHhhMDU1NjA1MiwgMHgzMjRlNDAxOCwgMHg2MzI0MGE2ZCwgMHhkNGRhNjY5YiwgMHg2NjhhNmQ4NiwKLQkweDlhYTllMzYyLCAweDcwODA1YWNlLCAweDZjMTRiMmNlLCAweGYyY2U3MGI0LCAweGM2ZWZiYzI5LCAweGMzNGI5NjU2LAotCTB4ZmRlYzMyYzEsIDB4NDVmMzhhNWQsIDB4ZTFkOTBhOWMsIDB4ZmVjNDllMGYsIDB4MzkxNDhmZmIsIDB4NDJmZjYzYjcsCi0JMHhhNDA5NmE2MiwgMHhlN2YyYWMwMSwgMHgzZmIwODUzNSwgMHgxYjFmZTJkNSwgMHg2OWNlYmE0NCwgMHgxYTZkMmM5ZSwKLQkweGZlMmRkN2MwLCAweDdiZTMyMDg5LCAweDY4NTI5YmM5LCAweGYwMDVjOTdkLCAweGJhYjYzYjFkLCAweDIyOTQ4ZjA2LAotCTB4ZDVkMDJlN2QsIDB4NjBhMzAwZjEsIDB4MDhhOTc2YjcsIDB4ZWI4MmE5MDAsIDB4MDVmNmYxZTksIDB4NTgwNzRjMmIsCi0JMHg4ZWZmMTMzOSwgMHhmMTkyMTdkOCwgMHg1M2QyMjY3OSwgMHg3NDFiOWZjZSwgMHhiNDA1ZmVlMCwgMHgzMGNmNDFiZiwKLQkweDVkYWQ5MDFkLCAweGVmZjYwMjRhLCAweDk2ZWZmNjNhLCAweDhmYjgxODUxLCAweGRmOTMxM2Y3LCAweGJmOGI2MTIyLAotCTB4YTJmZDdmZDQsIDB4YmZjM2VmYzksIDB4ZGI5ZjY4MDcsIDB4NzkyYmI2NjksIDB4YzQzNjc0Y2QsIDB4ZWJmOTk5ZjYsCi0JMHhlYjExOTk0NiwgMHgzZTdjMWZjMywgMHg2NTA5MmY4ZCwgMHg5MDE1ZDU5ZCwgMHhmMzNlZmQ4YSwgMHhkOGFiMjE0NywKLQkweGY0Njc3ZjA3LCAweGUzMjdlNjdhLCAweDQ1Y2UzMzdiLCAweDgxNzVjNzNmLCAweGQ2MmQ5ZmU4LCAweDBjYmYwNzJkLAotCTB4YTE5OThmMjgsIDB4NjFiMzc5ZTgsIDB4NWM2NDFmZTcsIDB4ZThlNWY2NzcsIDB4MTRiNDBiZTcsIDB4MzQ2N2UzMDcsCi0JMHhmOGNlYmU4YywgMHhiZDcwYWE0MywgMHg2ZjVmMmI3YSwgMHgzNGJjOWRlOCwgMHhjZDliZmQ0MCwgMHhiYjk0NTMyOCwKLQkweDhlNTBjYmFhLCAweDc3ZmE3NWVkLCAweDY2ZmI0MDE3LCAweDcwMGY5NzljLCAweGI1OTViMzYwLCAweGViNmI0ZTUzLAotCTB4Y2RjZWZlODgsIDB4ZTAxNTIwMDgsIDB4ZDYyY2U2ZDAsIDB4OThjNjlhYWEsIDB4NTYxYTcyOWMsIDB4M2VjNDQ5NDMsCi0JMHg5MGM3ZGYxYSwgMHgyZTM5ZDBlMywgMHg4MmExYTljNywgMHg1ZjYwZTZlNywgMHhhZmMwNTVlOSwgMHg0YjM5ZjA4ZiwKLQkweGI4MDg2OWM4LCAweDk1MzQ4NzljLCAweGYxZmE3OWM5LCAweGM0MTFkZDlmLCAweDEzMmM5NjQ3LCAweDI1ZmMxMWU4LAotCTB4MTdhMDg5ZTgsIDB4MGE5M2Y0OGMsIDB4ZDk3ZDUxZWMsIDB4ZDVjZjhmZDAsIDB4ZGZlYjg1OTcsIDB4NzE0ZmQ2MjEsCi0JMHgwNzVhOGU4ZSwgMHhhMTEzZjhmYywgMHg4NWY2NDNiZiwgMHg3MWYyMTJiZCwgMHgwNTY1NzI0NywgMHg5ZTU2OTNmMSwKLQkweGQ5NmViNTE3LCAweDQyN2FiMTNiLCAweGQzY2JlMWMxLCAweDIwOWZjODkwLCAweGM2OWZhNjllLCAweDMzZjk4OGYxLAotCTB4MDA5MjNlMWMsIDB4ZmEyNmZmOTQsIDB4NGNiMzQwMzksIDB4NjJlYjM0NzYsIDB4NmYyN2YzZjQsIDB4Yzk5YmI3YTYsCi0JMHg5YjllNGExMywgMHhlNWViZjhlMywgMHhjYjQ1NzM2OSwgMHhiNDUxN2QzMywgMHhkMWRjMzMzYywgMHgyYWI1MWNmMiwKLQkweDc5Yjc2ZTVhLCAweGE2MzJlNWEyLCAweGY4ZDQ3MjcyLCAweDUxYTU0ZGQ4LCAweDk5ZGY3MWZkLCAweGQ3M2YzNTE1LAotCTB4M2ZhYTJmMzcsIDB4YThlMmRiN2UsIDB4OTc5YjEzZjksIDB4ZWQyN2Y1NDcsIDB4ZmNkNDdhZmEsIDB4YThkYWZmNDIsCi0JMHg1NWJkYTJmMSwgMHgyOWZmYTRiNywgMHg3OWE4ZmE4MSwgMHg1N2QzNWUyNCwgMHhjZWY2ZmZlOCwgMHhmM2VkNDZlZiwKLQkweDJmZmZkNmI3LCAweDljN2ZmNDYzLCAweGQyMzRkOTdjLCAweGY0NDdmYTE3LCAweGYyNGE4MzhiLCAweGQ5OWYwOTM2LAotCTB4OTNmMjU2OTAsIDB4YWZiN2FlYjYsIDB4YmU5NzY4NDksIDB4ZTg4ZmJhNzksIDB4NjcwNjJkZjAsIDB4MmIzZDhlMTMsCi0JMHg2YmYyMjViYiwgMHgyNmQ0NTA2MywgMHg0YzViMWJmNCwgMHhmZWZlNDk1MCwgMHg2YWQzMjZmYiwgMHg5ZDg4ZjI3NywKLQkweGI2MjRkNzFmLCAweDk4MmFmM2ZlLCAweGYzZDFlYzEzLCAweGNjOGYxNzk2LCAweDE0ZDNkYTMzLCAweGY4OGRhNjFmLAotCTB4ZjQ1YmFmZDksIDB4M2RmMjEwYTYsIDB4MTQ3ZWU2NTUsIDB4ZjI2OWViZmQsIDB4YTdhNDE3YWYsIDB4OGE5OTcyMTQsCi0JMHg4YTc4YTdjMywgMHhlZDU5YmM1OSwgMHgwZTA2ZDZjNiwgMHhiNGRiMWVhOSwgMHg1ZmFlYmYxMSwgMHg1MDVjZTU0NywKLQkweDk4ZmYyZmZkLCAweDNiMjEzZmU4LCAweGRmZmE0NjVmLCAweDg2ZGM4MTI1LCAweDg5YmI1NmJmLCAweGMzNjFmM2VjLAotCTB4OWE3YWU5NmYsIDB4MjFhZTgyMmQsIDB4MDQ4ZmE1ZTQsIDB4ZDBkM2Q2NmMsIDB4ZmFkMGMzZTcsIDB4OWRhZmNjZjEsCi0JMHg0ODA1YTZmZiwgMHhjZTU1ZTdmZiwgMHhiMmZmMzE4ZiwgMHgwOTlmNmJmMCwgMHhmZTRmZDZiZiwgMHhiYzY0N2YyYywKLQkweDUyOGZjZjcyLCAweDdjZTc1Yzc0LCAweDQ0MGEyYzAxLCAweGU0MmMyOWM4LCAweDU4ZDA2NjA0LCAweDc1Y2Q5OWJjLAotCTB4ODc2YWExNzYsIDB4YmZhZTE4ZjIsIDB4NDRkODdkZjIsIDB4MTNmY2FjZmIsIDB4ZWY3YzhhNmMsIDB4ZGVjMjlhY2YsCi0JMHhiMzI2YjNmYiwgMHg1OTM2MDU3NiwgMHgxODE1ZTcyOCwgMHhhY2E1NmNjYiwgMHg1ZGIwOTQxZiwgMHhlNDBhMGJkYSwKLQkweGU0ZjMyYzAxLCAweGY3OTQyNDJhLCAweDAzYTY3OWMwLCAweGEyOTJiNGI3LCAweGMxMDdiZGYxLCAweDNmZmY5MGFkLAotCTB4MTRkYWNkZmIsIDB4Y2ViYzM3OWEsIDB4NGZkZDRmZGIsIDB4OGE4MTVkMzgsIDB4N2RmZjYxYjYsIDB4NDRjOTRmOWIsCi0JMHg1M2JlMTA3ZiwgMHhmNzExZjE2MiwgMHhmNzczZDJiMSwgMHhhNjllNjMyMywgMHgzYzE2NzMzOCwgMHhiZWEwY2U1NywKLQkweGFkOTM4Mzk2LCAweDYwMGJhYzY3LCAweDE3MzNmMjhmLCAweGUzYTYwODU0LCAweDE2MGJiZTNhLCAweDQ3NDhjYmZmLAotCTB4NDU2MWIyM2QsIDB4OGY3N2Q0ZmQsIDB4YjA2NDdlNjIsIDB4M2ZhZDhmZWEsIDB4YzdhYjc5YzYsIDB4OWM1MmM2ODQsCi0JMHhhN2Y1NTBiZSwgMHhjM2YzZDI3YywgMHgyMGFmZDBiYiwgMHgzZDEyNGI2ZiwgMHgxMThjYjYxOSwgMHhmZjVmOWMzOSwKLQkweDYzOGQwYTc5LCAweDg2N2E2NWJjLCAweGNiZTcxNjdkLCAweGQ4ZmI3ZTRjLCAweDcxYmNjNjdiLCAweDZkYTNiOWI2LAotCTB4NWM3MmU3MjQsIDB4Zjg4ZGU2NjQsIDB4YjAwYTVhMzMsIDB4YTk1NDlmOTQsIDB4MTc3ZTlmZmUsIDB4MGExMzg0ZTksCi0JMHhjYmMwY2Y1YiwgMHhmYTk3ODE0NiwgMHgyNDU0N2Q1YywgMHg4NjUzZWE1ZSwgMHhmMDhhMzJmMSwgMHhjY2IyZmY1MiwKLQkweDNiYmVhNmVjLCAweDk3MjgwZmMxLCAweGRlNzcwMjMzLCAweGZiNWVkNzdkLCAweDllMWQ0ZWFlLCAweGI4OGM3Y2VmLAotCTB4OWYyNzExZDEsIDB4OGM3NDZlMjAsIDB4NmUyMjlmN2IsIDB4ZDkwZGZmYTgsIDB4ZmRlODk1M2QsIDB4YTljN2U3NzgsCi0JMHhjMWY3NWExZSwgMHg1MDdiYTM1YiwgMHgwNmZkOWYwYSwgMHhjNzM4ZjdjOSwgMHg5ZDBjMTBmYiwgMHhiZGJhN2U2NSwKLQkweDFkMjFmNzUwLCAweDNiNWMwZmYzLCAweDVkNWNmOTRiLCAweDYwYjc0NWJiLCAweDc0MmQ4YWZmLCAweDdmOWE3OWVjLAotCTB4NWY5YTAyNTAsIDB4NGU2MDRjMTcsIDB4ZjI1ZGFlYWIsIDB4NTU3OGUwMjcsIDB4MzFkNmRiNjcsIDB4NTk2YWFmZDgsCi0JMHhjMzYxNDY1NiwgMHhiYmMxMGE5YiwgMHhlNGJmN2M2OCwgMHg0YmYxYzQ2ZiwgMHgxNzI1ODM5YiwgMHg4N2JhZTAyNywKLQkweDc1YTI1ZGFlLCAweDc1ZjEwZTA3LCAweGU2MGU2ZjJmLCAweGIwMzAwZTUzLCAweGI0MDdjZDdmLCAweDA1YmI0ZDVlLAotCTB4YjFiZjI4MTIsIDB4YjQzMWQ1MDUsIDB4YTAxNDliNWYsIDB4M2YwMzJhZmQsIDB4Y2FmZDY5NTAsIDB4YTA0ZDk2OTcsCi0JMHg2ZjdhYTZmNCwgMHgxMTA5YzRjZiwgMHhjMGUwNmI3ZSwgMHgzOTQ3NTU0OSwgMHg2MGZmYjY1NSwgMHhjNjU3OThhMSwKLQkweGUxOWY5N2MzLCAweGEzN2ZlMGQ3LCAweDFjZGYyN2JmLCAweDZmZjEzZmU5LCAweGYwOTNkOTFmLCAweGYyMTZiZmJmLAotCTB4YmUzNWQ1NWYsIDB4N2U4OWM0ODksIDB4ODk3OWUzYTUsIDB4ODRkNTk1ZjksIDB4NWI4NzBiYTcsIDB4ZGE0YmZiN2YsCi0JMHg0ZWJmZTBlZiwgMHhkOTQwZGMyNCwgMHhkYzFiYzlhZCwgMHhlYjE3MTYzZSwgMHhmOTcwM2VjNCwgMHg0MjlkZDUzZCwKLQkweDQ1MmU1M2YyLCAweGZmM2U3M2ZiLCAweDQzNWRjZDkwLCAweDJhOTg2MWZiLCAweGM0ODQ0NGQ4LCAweGQwZGI4N2U0LAotCTB4OTNlNDgwMWUsIDB4NDNlY2M4OWIsIDB4NmJhYjBlNGUsIDB4ZDFlZjllOTAsIDB4YWNjN2E0MDQsIDB4ZDhiNWQ1ODUsCi0JMHhmMzE3NjZkZiwgMHg5N2ZlYWNmMiwgMHhhZmE0NmY3MywgMHhmMjY2NjZjMywgMHgyNzgxZTZiMSwgMHhlZDE4NmZkMiwKLQkweDNhNDcxYTdlLCAweGE2N2RlNjhlLCAweDRlYmM3MDg2LCAweDZlMTJhY2JmLCAweDUzYmY4MmViLCAweGRiZGZhNDc1LAotCTB4NTc0MmUxZjksIDB4MzYwMmY3OWMsIDB4OTMxNGFmZWUsIDB4ZDk0ZjcyYmIsIDB4NGJkNDdkODgsIDB4ZjA4OTIxOGQsCi0JMHhjZTkyNzA3ZSwgMHgyZjliNThmMiwgMHg0OGViZThjNCwgMHhmOThmODlkMCwgMHgzZDM3N2UwNywgMHhlZmRlYjExNCwKLQkweDI2MTMxZjExLCAweDdlZWJmNDhjLCAweDQyODk2MWYxLCAweGMzZmQ3YjcyLCAweGM4Y2E3MzEyLCAweGU0Y2M4MWYzLAotCTB4M2E1YzdmNGEsIDB4M2E3OGJjNzgsIDB4ZjY5OTdkZDUsIDB4ZDE2MDNkYWQsIDB4MTNiZTE5MWIsIDB4NzdjMjQxOWMsCi0JMHgzZDEzOTI1NywgMHg2ZDViZTEzNSwgMHhmN2M0OGIyYywgMHhiYWVlOGNjMywgMHg0ODg5ZDkyZSwgMHg2NWNlYmE4NywKLQkweDNmMzYwNjllLCAweDkwNmE0OWM1LCAweDA4ZmFlNzNiLCAweDY2ZTZiMjY3LCAweGMxZmY4NDc4LCAweGE1NDcxMGZkLAotCTB4YTNmYTM3ZjQsIDB4Y2ZjZjM2OTUsIDB4ZTRlNjdmNDksIDB4YmM0OGM0ZTAsIDB4Mzk0Mjk5ZDUsIDB4Y2ZlOTEyOGQsCi0JMHhjMjM3M2NkMywgMHg5ZjY0ZTRmZSwgMHg3OTIwZThkZSwgMHg3ZDY1M2JhNiwgMHg4OThhN2Y0NCwgMHgwZjQwNjVlYiwKLQkweDhlMjlkYWE1LCAweDUwZjVjNjZkLCAweGRmYzEwMzFlLCAweGI3ZmM5MmE1LCAweDkyYjNhZTc2LCAweGE2Yzc3ZmRkLAotCTB4NTU1OTNkMzEsIDB4ZmY2MWFlOWYsIDB4YmU0N2Q0ZGIsIDB4NGFlZWE5YjcsIDB4OTk2ZGFiYjIsIDB4MGQ3NjQwODksCi0JMHhlZjg2NzZkOSwgMHgwMWQ3ODRiZiwgMHhiZDU0NTdiMiwgMHhiOGEwMWUwMiwgMHgzNmYwMjAzYSwgMHhmZjk4MTYzMCwKLQkweDcwOGZkY2E1LCAweDM3YmU1MzI2LCAweGEzYzhjYzllLCAweDY3NmYzY2QxLCAweDA4YzVjOTRmLCAweGFlMGUwNzdlLAotCTB4NGE3ZDEyNzQsIDB4MzIxZjdmMjIsIDB4Zjc2MzVlMzksIDB4YzM4MTRmZmQsIDB4OWI2YjRkYTcsIDB4ZTFjNDQ2ZTcsCi0JMHgxNWJmNzlkOCwgMHgwMGU0MzQ3OCwgMHhhYjE2NWY2NiwgMHg4Y2YxMzEwNywgMHhkYjNhZGY4NywgMHgxZmU0MzNiYywKLQkweDBiYmJiNjlmLCAweDg5OWIwZmM4LCAweGFlYTNjMjMwLCAweGU3MDNhNWM2LCAweGNkZTkwN2ZmLCAweGM4NWM3Zjk4LAotCTB4MWEzYzU1NTUsIDB4MjE0ZGY1YzksIDB4MzM3NTQ1NTcsIDB4ZWI2MWEzMzksIDB4ZmNjM2M3NjQsIDB4ZWQ3MWE5ZTUsCi0JMHhkZmMxMGJlYywgMHhiZDY4ZGNiNiwgMHgyYWJiY2VjNywgMHhiZTRjNTNmOCwgMHhlNzQ0YjVhYywgMHhjZGQ5OTk2MSwKLQkweGZhNjYxZWEwLCAweDA2MGRlNjM3LCAweDc3ZmQ3MWFmLCAweDhiYmY3ZTdkLCAweDA1NzczY2VjLCAweGFmNjdlN2MzLAotCTB4MTFjYTk2MTQsIDB4Y2RiMzhlZWIsIDB4ZmZlMjJmZmIsIDB4OGEwZjAzMTMsIDB4MGVlODhiMmYsIDB4ZGViMWYwYzUsCi0JMHhmODkyZmVlNiwgMHhjODNiZjIzNiwgMHg0ZTEyZGM3NiwgMHg0ZTA3ZDQ0MCwgMHgzZWIwZWYxMSwgMHhhYmUzMzAyOCwKLQkweDI0ZTg5MDgzLCAweGYyMjZkZWZmLCAweDE5YjgzMzYwLCAweGE5YzA5MjRlLCAweDA1ZDc3YWIzLCAweGZjOGQ5YWJmLAotCTB4NjA5OGY1MzUsIDB4OWI1Mzc2M2IsIDB4ODEzOWNhMjQsIDB4OWNjZDYwOGQsIDB4MjI4YzliMmEsIDB4NTJjNTY1YzIsCi0JMHgwYzhjODhhZiwgMHhmNmVkNTNjNywgMHhiZDIwYjc3YiwgMHhmMzI3YzEwNywgMHhmZWJhMzliYSwgMHg5MmU0OTcwNSwKLQkweDM3ZGVlYjIyLCAweGJkZDdlMmFiLCAweDY0NGQzZGJiLCAweGVlYTk3ZmQ3LCAweGFkMzQxOTlkLCAweGZhZmVkMzUxLAotCTB4MWQ4Mjc3ZmEsIDB4MTgyMmU4ZjMsIDB4ZGIyN2EzY2UsIDB4YTA1NDQ2NzUsIDB4MTAyZmUzODAsIDB4N2IzM2Y0NGMsCi0JMHhmMDlmNTRjNCwgMHgxYTdlNGZkYiwgMHg5MjJiZjllNSwgMHhhNTUzY2UyOSwgMHgwZGFiMDI4MSwgMHg3OGVlYzRhMCwKLQkweGRhMzY1YjY2LCAweDNmY2UwNGQ3LCAweGVmZTg5YmY1LCAweDBjNjc5ZTVlLCAweDRlNmZkM2Q3LCAweGZhMjc3OTY2LAotCTB4OTNkNTk5MjEsIDB4NDYyNWEwOWEsIDB4MWY5ODY1NmYsIDB4ZDg4ZDNhNDEsIDB4ZTBmMWVhYTMsIDB4Yzk1MzJmYjEsCi0JMHhmNWRhYjZlZiwgMHg4NGJkMjc3ZiwgMHhmOTQwY2I4ZiwgMHhhNDM5ODI1YiwgMHhkNWQ4ZTJkYSwgMHgzMTYzY2EwMSwKLQkweGNlZGM3OTBmLCAweDlkYWM2YmNmLCAweGZiOGZjYjkyLCAweDUwMTc3NTViLCAweGI0ZDA0ZjdjLCAweDdkODQ3MmE5LAotCTB4MzYyNWQ4MTUsIDB4ODVkOGY2YWYsIDB4YzdmMzE1MWMsIDB4NTI3N2E2MmIsIDB4OWFmZDcxOGIsIDB4NzRhOWZkOGUsCi0JMHhmZTdkNTNhYywgMHhlZDRhNzRkNCwgMHgwYTllY2Q4YiwgMHg0Y2ZiY2UzYiwgMHhhNTZmOTNkYSwgMHhiZjliNzBiYywKLQkweDA4MTNlNDg0LCAweGJjNTFhNWU2LCAweDlmMDY2MjlkLCAweDdhNDZmNGI5LCAweDU5NGFiYmJjLCAweGNiYjc1NTkxLAotCTB4NWQyOWRhY2UsIDB4YmNhMDZjNzcsIDB4ZmNlNDFiZDQsIDB4MGUwYTFlZDIsIDB4ZWIwMjc2MTUsIDB4ZDkzNjc0MGYsCi0JMHhiZmVmM2Q2OSwgMHhmZjI2OGY3NSwgMHg1NjAzMmZiNCwgMHhmNTc4ZmY5MSwgMHg3ZGZjYzk4YiwgMHhmZTY5OTgzMywKLQkweGUwNGRiYjFhLCAweGYzYTI2ZmRjLCAweGRjZTI3ZGE3LCAweDEzMGJlMDZhLCAweDNmZWM2NzliLCAweGFjYWU3M2E1LAotCTB4ODM4YTBlMjEsIDB4MGZjODQ3Y2QsIDB4NTg1OTc0MjQsIDB4MTJmMDk1MWUsIDB4NjE3NDc5NzAsIDB4MzhlNzQ3N2UsCi0JMHg4YTAxZWY4NywgMHg3MDM2ODM0MywgMHg5YWRlMzg0YSwgMHg0Zjc5NjYxOCwgMHhiZmEyZGJiOCwgMHg5YWRjOTEyOCwKLQkweDU1YmNlYzgxLCAweDIxNGFmNWU1LCAweGYyN2Y3MjAyLCAweGJmNjM3M2M4LCAweGU4ZTdhZTg0LCAweGUxNzA4OThjLAotCTB4NjA5N2I4YTIsIDB4OTMzYjg2NmUsIDB4YzI5ZGU1MjMsIDB4NzNiNDZlZTgsIDB4MDYyNmI1M2MsIDB4OTc5NGM5NGQsCi0JMHg5MTc4MDQ0ZiwgMHgyNzQyMzVkMSwgMHgzYTBkN2RiMCwgMHg2ZjdmOTkwYiwgMHg5ZTk3YzM1NSwgMHgzNGJhMzA3NCwKLQkweDcwMjE0MWMyLCAweDkyNmJhMTNhLCAweDQxMmRmZTRlLCAweDEyM2UzMTczLCAweDkzZTlkZDM0LCAweDViY2JhNDZlLAotCTB4ZGExNzg5ODIsIDB4NjExYmY3Y2QsIDB4YWVjOThlZDgsIDB4N2QyMzg5YmQsIDB4NmI0MmRhMmIsIDB4ZjgzNWM3MWUsCi0JMHgyMGIzM2UxNiwgMHgwZTRmYTIzYiwgMHhmZGU0N2NhNiwgMHgzZWY3ZWNlNywgMHg5ZDliMjViMywgMHg1NDY0ZjkxNywKLQkweDI5YjYxMjc1LCAweDY3NTNlMjc2LCAweDc0ZDdhMjdjLCAweDM5NzI5NDY1LCAweDQ5NGU1MTM4LCAweDNjM2UzZTU2LAotCTB4NGM5ZTcxMWYsIDB4Y2YzZTY0ZmQsIDB4MTY5MmQxNjksIDB4MDE3YjMyZTcsIDB4MmYyMzE3YjIsIDB4NWUwYTVjN2IsCi0JMHhiNWVkMGJiYSwgMHhiNGVlMDdmZiwgMHhkZmFiZTQ2MiwgMHgxNjg5ZTQ3NCwgMHgzNWZiZjc5YywgMHhmNjIwZmM4MSwKLQkweDE3OWVhOTRmLCAweGZjNmY5ZjA5LCAweDI5OGVlZDY2LCAweDE1NWI2ZmU0LCAweDlkZjkwNTY3LCAweDJjODdlZjkwLAotCTB4ZDE1NTdkZmYsIDB4MWRkODQ3YjcsIDB4MDkzMzg3NjQsIDB4NzhmYmIxYmYsIDB4OTBmZTM3Y2YsIDB4ODNjMWRiZjIsCi0JMHhjOWQ1NmU5MiwgMHg4ODczODZlZiwgMHg0ZmFlYmFlZSwgMHhkZWU3ZjI1NSwgMHg3Y2IyMWY4MywgMHhlN2JhNmU3NiwKLQkweGFmZWEzYjM1LCAweDNlNjFiM2JjLCAweDM0MjY3NWM5LCAweDJlYmY5MTM3LCAweDIwNDE3OTEyLCAweGExOTNmYjhiLAotCTB4MzYyZmY5ZDMsIDB4YjRlMWU4NDQsIDB4N2IwODM3YjAsIDB4ZWE3YzUxYzYsIDB4OTg3YWY2MTIsIDB4M2I2YzRlZWEsCi0JMHg0ZjFlMWU3YSwgMHhiYTg4NzdlYiwgMHgwMWFmNzhkOCwgMHhiOTIxOGM4ZSwgMHhhYzliYzIzNywgMHg3ZTM3OGUxZCwKLQkweDU5YzIyMmYzLCAweDZhZWI1OWQxLCAweDc3ZmNjNDU3LCAweDdhYmYzY2VkLCAweGJkZjNjZWQ3LCAweDM3OWVlOWY1LAotCTB4M2RkNTNlNDksIDB4YzRhOWE5MWYsIDB4MGU0MGM1ZTcsIDB4YWMwMTkzZDUsIDB4N2UzOGI1OGYsIDB4NjM3ZWQ4NjQsCi0JMHgwZTZiYzllYywgMHg3YmRmMzRhYiwgMHg0MTVmOTgxOSwgMHg0MzQ5NmY3ZCwgMHhkYjNiZWRmZCwgMHgzZTBkNzkzOSwKLQkweGE0OWQ0MGVmLCAweDllNzA5ZTUxLCAweDhhMWQ4N2Q3LCAweDZmY2QwYzdiLCAweDg0YjU3MzM4LCAweDIyMDFkOGZjLAotCTB4ZGFiOWU5MDIsIDB4ZTQ4ZTNkNWQsIDB4OTc5ZmY4ODYsIDB4MDZkNjc2NDgsIDB4NzYxOWFmY2MsIDB4OGE3NjRjNWEsCi0JMHhmZTEzMTdlZiwgMHhjODVmYThjYiwgMHhkYWFiNzJmYywgMHg2NWQ5OThiNywgMHgyZWM4MDk4NywgMHgxZWNjZmYxMSwKLQkweGM1MWFmZjEwLCAweGVkMGQ2MmUzLCAweDg5M2ZiZDgxLCAweDlmNmI3OWQ5LCAweDU4ZjJjNWM5LCAweDU5MTNlYmY0LAotCTB4ZDQwM2RlN2YsIDB4YTA1YmVkNmYsIDB4MjEzNzNiMzEsIDB4NWVjOTRiOWUsIDB4M2FkODQ3ODMsIDB4YTQ4OTgwMDEsCi0JMHg5MWRjMDkzYSwgMHhmNjA1MDNlNywgMHhjMzM3YTY1NCwgMHhmNjE3NGU1ZiwgMHhkM2QwMjgxYiwgMHg5MjQ3Yzg5YywKLQkweDQ3ZDk0NzJjLCAweDdkZTQ5YzQ0LCAweDNmNWQ0NzExLCAweDllNjdjN2ZhLCAweGZiNGY4MzlkLCAweDQ0ZDA5YzQ0LAotCTB4ZmRjNzNjN2MsIDB4YWM0NWI3ZmUsIDB4ZDY2YjdmYWEsIDB4YzdjYTE2ZDIsIDB4ZjFiMzJkN2YsIDB4MjI3Y2UyYzMsCi0JMHg0NDcyNzAyOCwgMHhkYzUwNGY5YywgMHg2ZjNmNTFkMCwgMHg2OWQ3NzM4YSwgMHgxZmExNzdkOCwgMHgzNGRhZWU5ZCwKLQkweGYyYWE3MjlmLCAweGE5NDdjZDQ1LCAweGNjMGVlNTlkLCAweGNlNzE1NGE3LCAweDBhYTNiZWFhLCAweGMyMjJmMzM3LAotCTB4N2I5MWZiNWYsIDB4ZjdlNGNjOGIsIDB4YWVmYWYzY2UsIDB4MDdmMGNiZmQsIDB4OWUxY2EyYWYsIDB4OGZmMjhjMzgsCi0JMHgxZDkwYTcxMywgMHhhZmNjM2Y4NiwgMHg4ZGQ2NDBjNiwgMHhlMTkyODNlMywgMHg0YmRlNzY0NywgMHg5NzY4MWM3OCwKLQkweDQ4NDhmYTQ3LCAweGZhOWIwMjFkLCAweDlmZGJlOTE5LCAweDlmZGY2MWYxLCAweDQ3NGFjYWVlLCAweDc4NzExZTc5LAotCTB4OWU1MWQyYjIsIDB4Y2NiZjI3ODMsIDB4MzhlY2IzMjQsIDB4OWJhYjExZmQsIDB4MTE1NzU1ZGIsIDB4MGYzZGE3ZTEsCi0JMHgzODM4Y2Q0YiwgMHg3M2YzYTczNSwgMHhmNDRiMzI5NCwgMHhjZWQxOGFmOSwgMHgzMDcxZTc0ZSwgMHgyNDNiMDdkZiwKLQkweDlhY2IxNzU2LCAweDc2ZTZlYTlmLCAweGZlNjJhNWQ5LCAweDJiN2MxOTczLCAweDExYmY5MzY2LCAweDgyOGY4MWU3LAotCTB4MWZjMmU3ZjgsIDB4YTI2M2NmZDQsIDB4MmJlNTI4ZmIsIDB4N2IxZWI3MTgsIDB4YWYzOTg5NTYsIDB4M2MyMjY0ZGIsCi0JMHhlMDkyZTg2ZCwgMHhlNTdiYzgyNywgMHgxNzcxZDhlZSwgMHhjNDZhNWJjYiwgMHhmNzNiMWIzYSwgMHhmYTgzMWIxYywKLQkweDdhMjk3YWFjLCAweDJiZTUwZDVlLCAweGMwM2M5Y2VjLCAweDE2OWFjZmVhLCAweDQ5OWYzYTI1LCAweDc4Y2I3OTE3LAotCTB4MGI3OTRmMTgsIDB4MDdmOTg5ZTIsIDB4MTZiZDBjYzUsIDB4ODc0NWVmYzQsIDB4NmI0YzkwYTcsIDB4MDljYjg5OWYsCi0JMHhjYmIzMmFmZCwgMHhiNGJmOTE0MiwgMHgyOGZlZTNjZSwgMHhjY2ZjMDU3YywgMHg4ZTA2ZjY2ZSwgMHhiM2RkMjJhNiwKLQkweGI0OWQ3MjVhLCAweDFmMzMyY2M3LCAweGNiOTlkNTlmLCAweGZkOTgwY2UyLCAweDQ0NTQzMmYyLCAweDkwYjNjYmI5LAotCTB4ZDczZWQzZTUsIDB4NDc5NDJjZTksIDB4YTA5M2YwYTUsIDB4OGRhZWYzZjEsIDB4OTE0YWFmODIsIDB4NDdmNDZkY2YsCi0JMHhmYzEzM2RkMywgMHg4NmNmYjQ0ZCwgMHhhODMzOTJiZCwgMHgxMjgwZjlkMywgMHg4YWYzYWYzNywgMHg5ZDc2NmE3NSwKLQkweDdiYzc0NjNjLCAweDc5ZTg4MWI1LCAweDZmMWYyMTVlLCAweGZkZjNmNDY3LCAweGQ1ODEzNmMwLCAweDM0N2NlMmU5LAotCTB4ZjlkODcyMDcsIDB4ZDVhZGVmNzgsIDB4Nzg1N2JmNTMsIDB4YWM0YTcxN2UsIDB4MTY2ZjhjNjMsIDB4ZjI0M2E5YjgsCi0JMHg3ZTM1YmY0OCwgMHhhOWI4NGZkOSwgMHgzY2E5N2M5NCwgMHgzNWU0ODViZiwgMHgwMzNhZjc0OCwgMHhhMGZlM2EyZiwKLQkweGY5MGJkNjNjLCAweDYxNzgxM2FjLCAweGI1ZmJlMTdjLCAweGRkM2YyNWJiLCAweDE5ZGZhZDJiLCAweDgxYTNmZjRkLAotCTB4MGYwOTBiMzUsIDB4NmNhYWI4YjEsIDB4NWI3ZTU4NTEsIDB4Y2E1NDliMDUsIDB4NTU3MTYzNmYsIDB4NjY5NzhjMzUsCi0JMHgyYzU4ZTI5NSwgMHhkMjNjZWE5ZSwgMHg3OWU2ZTg0ZCwgMHhlZTk1ZmZmOSwgMHhjZWM4MjU2YSwgMHg1OWZmYWE3ZCwKLQkweGZlODhmYTcyLCAweDc0YTk2ZmY2LCAweDdkYTM3OGZlLCAweDE5NTZmZDcwLCAweGZkN2MxMTM4LCAweDZmM2NmY2I1LAotCTB4NGMzMjdmZTAsIDB4OTQ1ZGZhNjYsIDB4NTA3NThiN2UsIDB4YTZkZDNlNzQsIDB4MzIxOGZiNzIsIDB4MDM2MmYzZjMsCi0JMHgyZmVmYjEzZiwgMHgzZGY4ZjkxNCwgMHg1N2I1ODBiYiwgMHhhNTRmM2YzYSwgMHhiZWMxZGZmMywgMHhhZDYwNTRhMSwKLQkweDNmYzUxMTY5LCAweGYwODg0ZmVhLCAweDc5ZDJmYjNiLCAweGViMzViODlkLCAweGJlNTNlZmUzLCAweGUyOWI0ZjdlLAotCTB4NmEwZTRjYzQsIDB4OGE2ZTJhYzYsIDB4ZGY2MzM1ZDMsIDB4MTExMDljY2EsIDB4NzlkMmRhNTcsIDB4ZGI0Zjc5ZmQsCi0JMHg3NDA5OGRhMywgMHhlNDhhZjBjZSwgMHhlYzFiZjMyNCwgMHhkNDIzZmJmYSwgMHhjZTQ4YjVmNywgMHhiMWZlZjg4OSwKLQkweDY3NzdhMWJlLCAweDkyYjIzZTkzLCAweGRlN2FkM2E2LCAweDVhOGJiYmVlLCAweGM1ZWM3ZmIxLCAweDc1OTE5YzNiLAotCTB4ZTczYjMxZTUsIDB4MGFiMTllZWYsIDB4YTNmZDliOGIsIDB4NDE1NjdlOTMsIDB4M2RhZTgwZTcsIDB4MGZmYjhlY2MsCi0JMHg5ZDkyYWViZCwgMHg5MDRhYjYwZiwgMHhjYjFkMWI4NSwgMHg4ZjlhZmEzYSwgMHgyNzAzOWNlYSwgMHhlN2M2NGE1NSwKLQkweDQzNTQ5ZmI3LCAweDVjMGY5MTVmLCAweGM4MmI3MmMxLCAweDU1OWI0OWNlLCAweDFkZGM2YmFhLCAweGNhMjFhODlmLAotCTB4OTBmYTVlOGYsIDB4NzU1NTNmOWQsIDB4NTQ4ZmNjNGEsIDB4M2FmZDk2ZWQsIDB4ZmJiNDc5ZmUsIDB4NTQ3MDk1MGQsCi0JMHhhOGMxMjJkNywgMHg4NTcxYzhkYywgMHhhM2JmOTM4ZCwgMHhkYzJkYTdmZSwgMHg1Y2Y4MWE3ZiwgMHhlMDY4ZjAyYiwKLQkweDVhZWJjMGQzLCAweDZkZDY2N2UxLCAweDYzZTNjNjhiLCAweDFhM2FkYWUwLCAweDY1YjQ3ZmRmLCAweGNkNzk0YThkLAotCTB4ZmRmMWNkYTMsIDB4MzZhZmUxOGMsIDB4ZmU4OGZkNTAsIDB4ZThhZWMzN2YsIDB4NzE4NzFiNzksIDB4Mzg3ZTYzZTgsCi0JMHgxYmY1OWZkNiwgMHg0Mjg0MmMzOCwgMHg3MDUwZTFjMiwgMHhlMjMzMzhlZCwgMHhhYWM5ZWFmZSwgMHg1ZWU3MTA3MSwKLQkweGI3MTExZGU0LCAweDMzNzliODhkLCAweDdlNzQwZWI5LCAweGYzYmM1MmFlLCAweDZlYWMyYjY2LCAweGI3ZmY2NmYwLAotCTB4YWI5Mzg5MWEsIDB4YmIwYjI3MDIsIDB4NTNmNGMwZmUsIDB4ODBiM2Q1ZDEsIDB4OWUwMjViZjYsIDB4OTJlZjkyMWEsCi0JMHhmMjhkMjRhZSwgMHhiNzEwOGFlMCwgMHgxNjVkYzVkYiwgMHhmYTIyNWZiZiwgMHgyZGNlMmM0YywgMHhkMjE2YzA4MSwKLQkweDBiNjFlMGZmLCAweDI0M2M3NzNmLCAweDg0MDg3Y2IxLCAweGU0MjBkYjFmLCAweDc3Yzg0MWJkLCAweDYzNTlkNjAzLAotCTB4ZTYyZjI5NGEsIDB4ODJjNmY0NzUsIDB4YTUyOGM3M2QsIDB4NmJjZjEzYWYsIDB4MjU0ZDFmOGUsIDB4ZWUwNjJmMzksCi0JMHhiODA3MTY2NywgMHg2NWY0MzE5ZiwgMHhlMzFiODljNCwgMHhhNDliZjg2MSwgMHgwYjJlZWFlZiwgMHhmNzA4ZjdkMCwKLQkweDVmNzMzZjA5LCAweGU5MTlmYTBiLCAweGJjMWZiYjQ2LCAweGM1ZTE4OTJkLCAweDhkZTljMWQ3LCAweGVkNzU4YjhkLAotCTB4MGU0ZGYzZDEsIDB4ODkwZTVmOWUsIDB4MTFjZjM2YmMsIDB4MzA4YWFmYWQsIDB4N2FlMzE1MjQsIDB4ZTlkOTc1OGIsCi0JMHg5OWY1NmY2NywgMHgxMmRlZmY2OSwgMHhmNWQzZGQ4OSwgMHgzY2QzZTNlYSwgMHg5YzM4ZjQ3MSwgMHhkZDdjOGI1NywKLQkweGYzYTUyZmU4LCAweGQwMWY5YzJkLCAweGViMjM5MzlhLCAweDllMGU5ZGYxLCAweDk0Y2Q1NzdmLCAweDg4ZmYyNDdkLAotCTB4Njk2OTY1ZmEsIDB4NjVmYWRjNmUsIDB4YmZlNzAzYTYsIDB4ZTc2ZWJkOWQsIDB4YzVmYWM4ZDQsIDB4NzA5ZjI3YjUsCi0JMHgxZmFjYmRmOCwgMHg3ZjkyOTQ1NSwgMHg2NGZlZTE2OCwgMHg0ZGQ3MWNhMCwgMHg1ODFjN2NhMywgMHhiMTZkZWI3ZSwKLQkweGYwY2VhOWY4LCAweGVmMjg4ZTIyLCAweDQyNzA4N2JhLCAweGRkMjVkOWY2LCAweGZjYzEzODRkLCAweGNkMTI2ZWZmLAotCTB4NDM3YWJhMzIsIDB4NjI3NTk3ZmUsIDB4OTdlNWM2M2MsIDB4YzMwM2Y4MmQsIDB4OWMwOWYxZGQsIDB4YThkYjk0NmYsCi0JMHg1MTgwZjU3OCwgMHhjMTdkZDQwNywgMHg3OWUzNGRmMywgMHhlYWM0Mzk5ZCwgMHg4OTJlYmE4MSwgMHhjOGZkYjZlMSwKLQkweGE0NWM5Y2I1LCAweDhmZmJiMDc3LCAweGZkYjA2YjM5LCAweGEzOGYwNzA3LCAweDFmMDJmM2VkLCAweDU3MjA3N2QxLAotCTB4ZjM3MWFkNWIsIDB4MmRiZjYxY2EsIDB4NTI3NjYxNmQsIDB4NTkzMjg0YTcsIDB4ZjMxMDcxZGUsIDB4M2Y1ODE5YmIsCi0JMHhkNThjZmE5YywgMHgxMjQ3ZWQwZiwgMHhmNmI5ZDM1NiwgMHgzOGNmNWFjMCwgMHhkNGY0MmJlZCwgMHgzZjJjOGQwMCwKLQkweGFjMmQ4NDZkLCAweDMyMjVmY2E1LCAweGYxYTBkYjlmLCAweDEzMWU0YWVmLCAweDRmZmE4ZWYxLCAweGMzMWZhZTIxLAotCTB4OGQyYjVmYjksIDB4NWI3YzE3ZTcsIDB4ZmEzNzRiNjcsIDB4ZDRhZmMzMDMsIDB4MTc1N2JjMGEsIDB4Mjk0YWQ5ZWYsCi0JMHg1MzllNmM1NywgMHgzMzA4ZWMyYiwgMHg2MmRmMTY3OCwgMHgwZTlkOWJmMywgMHg5YzA4YmY5MSwgMHg2NDRhOWMzNiwKLQkweDcxZTBlYWY5LCAweDVkMzNhMzU5LCAweDQ3NGZlYjk0LCAweDc5ODZmZTUzLCAweDczOWM1ZTdhLCAweDJlMDRjZmNjLAotCTB4NjVmZGM1ZmIsIDB4ZTRjY2I5NDMsIDB4NWJjOTlhNjYsIDB4Zjk0MjFmMjMsIDB4OWUwY2JjMzEsIDB4YmU1M2Y2NGMsCi0JMHg4ZGY4NzQ1ZiwgMHhmNTdmZDIzYywgMHg2OTE3OWM1ZSwgMHgwZjNmYTg3NywgMHhjZmM3YWVmYiwgMHg0ODFiNWM3MCwKLQkweGM2MzI3NzYyLCAweDZmYzNiZWY4LCAweDM1OWMyNjRjLCAweDlmMzJmYTljLCAweGJlNWFlNWViLCAweDdkMzliOGVhLAotCTB4YmM0OTJiNDYsIDB4YmM0OTM1OGUsIDB4ODczMGVkOGUsIDB4ZjI3ZWE5NTIsIDB4ZmVkZDk0MWUsIDB4N2ExYTdkMDgsCi0JMHg0NzYxMTdmZSwgMHhmYWY1ZTY2MCwgMHhmYWNlODcxZSwgMHgxNzFjNWQwZCwgMHhlMmRlNmVhNiwgMHg3OWY4MmJmZSwKLQkweGJmZjZjMjhkLCAweGUyMWU3YzYxLCAweDFhZTIyYmU1LCAweDdiYTg1ZDEwLCAweGI4NjYxMmFmLCAweDMxMzQ5ZWYzLAotCTB4ODcyN2JjN2EsIDB4YmJlMzIzMzIsIDB4NDUxZGQ2OGYsIDB4MDZhMWFmN2UsIDB4MDI0OTFmOTgsIDB4YzdlOGIzZjIsCi0JMHhkZWY3NTQ3YywgMHhlNTgxMmU3NywgMHg3NmYyYzc0YiwgMHg5NWJmMzA1NCwgMHhhZGY5MDMyNywgMHg0ZDU1NGUyNywKLQkweGY5MGY4YzhhLCAweDI3ZTc5OTBlLCAweGNhMmM4NzI0LCAweGZiZTU5ZTU2LCAweGMyMzQzOTBiLCAweDczZWY1MTcyLAotCTB4Y2U5MmJmMWMsIDB4NTI3NTgwZTUsIDB4NmM3MWQ5MzcsIDB4ZjlhYjc0OWQsIDB4MDViNzQzNmUsIDB4N2JkODFjZTgsCi0JMHgxM2JlYzJjMSwgMHg4MWJkZGFiOSwgMHg4NWYwZTFkNSwgMHgxOWY5MTI2NywgMHhhNzZlNzhmMCwgMHgxYmMzODlmNiwKLQkweGFiZjNkMTI2LCAweGNlZGUzNzg3LCAweGM2YTUyZmNlLCAweDIzZTVmOGE4LCAweDJmMjhiMmZhLCAweGUzYTk5MzNhLAotCTB4OTlmNzZkNzgsIDB4YzJhZDYwNGMsIDB4NjQ3ZWE3ZTgsIDB4YzFkNzdhZmMsIDB4NGY2MGQ3ZTMsIDB4OTBhNzNiMDIsCi0JMHgwMGUzOGYyMCwgMHg1YmFkNDQyNiwgMHhjYjE2ZmVkMywgMHg2NTNhNmEyMywgMHg4YzFlMjQ1NywgMHhmMDcwM2VmNywKLQkweGMyMjNlYWZjLCAweDkwMTNmMTAxLCAweDZkY2Y0YzVjLCAweDdjZTlhZGJjLCAweGFkNTNkMTlkLCAweDFiMWU5ODA0LAotCTB4ZGUzZTE0NWEsIDB4MmZjYzViY2EsIDB4YjAzZTFkMTksIDB4MzZmZTg4ZmIsIDB4ZjdlNmJmM2EsIDB4MDJiY2VjMWEsCi0JMHgxOGZiMzI2NywgMHg2ZmY0MjgyYSwgMHhlOGFmZmVjNywgMHhjODc1Y2ExMSwgMHhkY2ZlMDI2ZiwgMHg5YjgzZWVjMiwKLQkweDExYTdjNzdhLCAweDVmN2E4N2VlLCAweDE3OGJjNDc3LCAweDA4M2RkMGVmLCAweDk3MjI3YTkyLCAweGUzYjExN2Q3LAotCTB4MzlmODMyN2IsIDB4ZGNmMzg5YzIsIDB4ZWI5ODlkOGYsIDB4OWZjZjE0OTksIDB4YWYxZTYwZjksIDB4ZWYyMTI1YjcsCi0JMHhiYzUxNjU3NiwgMHgzMjE3YjRmYiwgMHhkZWNmMzlmOCwgMHhlMjA5ZGY2YywgMHg4MTJkYmZhNywgMHhkYmY1YTdkZCwKLQkweGZjZThiOWY4LCAweGU5Y2RjN2ZkLCAweGE1ZGI3NzE0LCAweGFhM2YxNDY5LCAweDQwNWZkZTBiLCAweDJmZDhmOGY3LAotCTB4NzgyYjdlNjMsIDB4ZDYxYmRkOTAsIDB4NzQyZGI0YjYsIDB4MmVhM2ExYzUsIDB4YzVmMWZiODMsIDB4YzhmYmZjNmEsCi0JMHg3YmY4YzVkYiwgMHhmNTEwY2NlMCwgMHhlZTEzMGVkMSwgMHhhMjg1NWVmNywgMHg4Njc5Njc2ZCwgMHhmNDM2ZjkyYiwKLQkweGZmMGJmN2JmLCAweDg1MTJjMGZiLCAweDgxZWYyNWU1LCAweDA3N2JmMGFlLCAweDU0YjAzZjdlLCAweDg1ZmJkMWY4LAotCTB4MWU1YTVlNWYsIDB4ZWQ5NzI3ZWQsIDB4N2VlOWE3ODYsIDB4YmUyYjk5NjAsIDB4YWM0ODdlMWYsIDB4NmM1YzFjYmYsCi0JMHg0NTE2MDdkZCwgMHhlNDQ4N2JjZiwgMHhhM2I5MGY3NywgMHgxMGNhNGY5ZiwgMHhmMjFmMzdmZSwgMHgzMDA2ZmZjOSwKLQkweGViYmU5MDFlLCAweDVjNTgxMzBiLCAweGM0Y2E2ZmJkLCAweGIxYzE3OWI4LCAweGZkZWVjMGNkLCAweGJmZmRjNTdiLAotCTB4YzI4NmY3YTEsIDB4M2FiYzU5ZjcsIDB4MzVmZTczZDEsIDB4MDlkYmYzMWIsIDB4NWVlNzE3OTAsIDB4MTk1ZTI0NmIsCi0JMHhkNzIwZmVmNiwgMHhhODJmYjhiNywgMHg4NjhkMzhkNSwgMHhlNTYwYWZkZSwgMHg2NTJlNzkxMywgMHg5MGIxN2RlOCwKLQkweDA0ZGVmNTdmLCAweGFmOWVmMjJkLCAweGVhOGI2MDM2LCAweGQzNmYzYjdiLCAweGY5Zjg0NjJlLCAweGY0NmY4MTZhLAotCTB4NzNjOGU2ZmQsIDB4NjdiMjlkOGEsIDB4MGJkZDA2NzEsIDB4M2U1OWZiNTgsIDB4YjhiMDFjOGQsIDB4MDhlNTdjODUsCi0JMHgxMTJjNzJiZSwgMHg2ZGNhZThmMSwgMHg3N2UyZTI2YiwgMHg4ZmJiM2Y4NCwgMHg2YjA3N2RmYiwgMHhjYzJkMGE3YiwKLQkweDkyMDM2YWVlLCAweDZhYTNlZTlmLCAweGFjOWViYzgzLCAweGM5ZWJjMDVkLCAweDU3OWU3NmZjLCAweGYyNTA3OGFlLAotCTB4YmVlNjI0YmIsIDB4MDY3ZDEzNGUsIDB4Nzk1YTk2N2UsIDB4MzI3MDM2ZmMsIDB4MWY4MTJmMmMsIDB4N2U3OGE3MWEsCi0JMHhiMWU3ODhiZiwgMHg3ZDA0OWEzOCwgMHg3NzljZTkwYiwgMHhkMjcyNGJhNSwgMHg3OGIxNzFmNywgMHhlYTZhYmU1YSwKLQkweDZmOWVlNDViLCAweDliYzQxZjg2LCAweDE2MzI3ZTQyLCAweGYwY2YzZjQ3LCAweDFhNjMyYjdjLCAweDRjNTcwYmFiLAotCTB4MTQ0Zjc1YzEsIDB4Yjg0MzlhN2UsIDB4ZGQ4OWJiYTksIDB4ZGI3YTE0ZWMsIDB4NDEzYmVjOWIsIDB4YmY2NmJlZjEsCi0JMHg1ZmRmMDdiOCwgMHg3OTIyMTlkOCwgMHhmN2NiMDJmNCwgMHg1YjdkNmRmYSwgMHhjYzFlNzllYiwgMHg4MzZiYzFlZSwKLQkweGRlZmE0ZTA5LCAweGM5MmJiNmI1LCAweGY2ZmQ0MDk5LCAweDU0YzljNDg2LCAweGNlYzk3NjFmLCAweGI0NTdlYzI0LAotCTB4ZjI0MDVjOWYsIDB4ZGZlMzI4YWMsIDB4NjFhOWQ0NjUsIDB4YjRhZTZmOTYsIDB4NWU5MmI2NzksIDB4YTI3YjM4OTcsCi0JMHgzYTBkYmZlZSwgMHg1OGYzODY2ZiwgMHgwOTAyZjZiZiwgMHhlNzZmZTMyNywgMHhlMGM4NWU2ZiwgMHhmOGZlYWVmMSwKLQkweDcxOTM5OWU3LCAweGNmMzZlOWFiLCAweGYwN2JhMjZlLCAweGJhNTU1N2FkLCAweDdlNGVmMzI2LCAweDRlYmE2MTYzLAotCTB4NmYzNjc0ZjMsIDB4MTZjZjRiNDksIDB4ZTgzNTdlM2EsIDB4ZWUzNDNiMGYsIDB4MzY3ZjE1NWYsIDB4NmY4YjIzY2IsCi0JMHg4NjkwN2JlZCwgMHg1MDk3NmY4MywgMHg3M2QwM2NkZSwgMHhjMDhkNDRiYywgMHhmYTNkN2Y3NywgMHg2YmZhMzhlNywKLQkweDViYjA5MzAwLCAweDY5MjU2YjMzLCAweGI4NmZjOGI5LCAweDhmYmI3YjFkLCAweDQxYjlkMjY2LCAweDMxNmZkOTNmLAotCTB4Mjk1MjY3YjUsIDB4YmRiNmQ2MmUsIDB4ZjI5MTNhOTcsIDB4MWFkZTBlOGMsIDB4OTJlOTVkZWIsIDB4ODczMDNjZDksCi0JMHg4OTRhMWZmMiwgMHg0NjY5ZWZhNCwgMHg1ZjAwOTVkZiwgMHhmZjk0MjAwNywgMHhmMWM4OTRjMCwgMHhmYjZmZmZhNiwKLQkweGFlMzg0MTNmLCAweGVjYTI4NmI1LCAweDU2MTM5MGRmLCAweDQ3NTYzZWVkLCAweDdiYjBiNjFlLCAweDg5MjdiYTc1LAotCTB4OTJlYTllZmMsIDB4MmMwY2Y1YzAsIDB4Njc0ZWM4NmUsIDB4NzhmMGJkZDIsIDB4ZjBjY2M1NGEsIDB4MTBjZGY1MDgsCi0JMHg5ZWU5ZGIzNCwgMHhlZmYzMjgzNiwgMHhmZjk5YjJjYywgMHg5ZmY2MmU5ZSwgMHhkMGY2MGU2MSwgMHhjNTMzOTZmNywKLQkweGU4MmNlMmJkLCAweDA2YmVmMzYzLCAweDQwYmFkNjYxLCAweDBmM2I1MzMzLCAweGI3MmRhYzljLCAweDMyYTNlZjA2LAotCTB4OTAxMDM4YWYsIDB4NGNjMWZmNDksIDB4OTU5MmVkYjMsIDB4ZjEwMDdmN2QsIDB4MzcyMjNkZjQsIDB4ZTQzMjVjMzMsCi0JMHgxM2ZkZDMyMSwgMHg5NjJmNWVmZiwgMHg4ZjAyZWI5ZiwgMHhlZmRjNWMzMywgMHhkZjQxMmE1MCwgMHg4MDQzOTY1OSwKLQkweDA5ZGY3N2RkLCAweDFkZWY3MTIxLCAweDU4ZDk4ZjlmLCAweGQ3N2RkMWE3LCAweDg5M2I2ODlkLCAweDM2N2UxZTRjLAotCTB4MjNmMTBlN2YsIDB4NzQyN2UzYzcsIDB4MmMzMzUzMWYsIDB4MjkzZTg4ZDAsIDB4OWViYTY5OTgsIDB4MGM3Y2ViNzQsCi0JMHgzNzViMDI2NiwgMHhlMDc4NWQ3NSwgMHhmYjkxYjJjOSwgMHhkYmQ3Njc0MiwgMHg1MGJiZThlNywgMHhkZjYyZTVjOSwKLQkweGM5YWQzYThkLCAweDA0OTc1NjQxLCAweDdlYzNmZGNkLCAweDM5MjAwZjJjLCAweDY2NjI2ZDczLCAweGY3NzdjOGM2LAotCTB4M2RmNjAxZTAsIDB4Zjc3N2VjNDUsIDB4Y2NlNWVlYzQsIDB4OGNiNGVmOTEsIDB4ZmFmNzNmZWYsIDB4YzQyNmViOTcsCi0JMHhkNTg3MmFjNywgMHg0YTNlMjMyOSwgMHhkMDc3MzlhZCwgMHhjZDM5ZTBmOSwgMHg4ZDM5OTg5MywgMHg5OTZkMDNiZSwKLQkweGZiMzExNmM4LCAweDUzYmNiMWE3LCAweDVjMDkyYWUwLCAweGU0YmZjNGU1LCAweDA3ZmJiZTMyLCAweDM4OWYxNzg2LAotCTB4ODI2NWY2YmYsIDB4OTI1MmFlOWYsIDB4OTE1ODdjMzAsIDB4NDM4ODFkYWUsIDB4NWZhMTlkYWIsIDB4ZTE1OWVmYTcsCi0JMHhlNTNhZjlhOSwgMHg1NjZkNWJiNywgMHgxNjZmZTUyNywgMHg4NDY5MzdhMiwgMHhmZjJiMjZkZSwgMHg3ZWY4YzFlZSwKLQkweDRkOGU1NjJiLCAweDY2M2U4MzI4LCAweGNiMmI0ZTdmLCAweDYyOGZkNzhiLCAweDZiOGYzNGY3LCAweGIyN2ZiZjljLAotCTB4ZmQxMGE2NzgsIDB4MWJjY2E3OGYsIDB4ZDE2ZWY5NDUsIDB4YjE2NGU2MmYsIDB4MzBlNTFiZmMsIDB4ZTk4MzkwYzcsCi0JMHg4MGU3ZmZjNiwgMHgzYzkxOTc3YywgMHg4MTdmZmY2MywgMHg4MDJhMmZjMSwgMHg3MjEzNDY4MSwgMHg0OGQ3ZjgzNCwKLQkweDVjNmYxNDNmLCAweGJmNDMxZmE4LCAweGQ5NzIyMzc5LCAweDU3ZjljODkxLCAweGYxOGY0YmU4LCAweGVjOWQ1ZGVjLAotCTB4ODM2Zjk2MzQsIDB4Y2YwNWZmYmYsIDB4MTA3ODUwNzMsIDB4MDAxMDc4NTAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzBiLCAweDczM2VmN2I1LCAweDk5OTMzMzFlLAorCTB4NDIwZjI2NGMsIDB4MDg0ZjAwNDIsIDB4MjE4NDJhMjAsIDB4Mzg4ODA4NDAsIDB4OGQwNjkwMDksIDB4ODgwODA4OWEsCisJMHg0MjAxMDBjYSwgMHhhOTExMzI0OCwgMHg2NzZkNWU5NywgMHg2YWQxMTQyMiwgMHhhMzZkMmQxYiwgMHg0MTAxZGE5NywKKwkweDE4MGQ0NWEzLCAweDFkMDM0MGU4LCAweDVhYmM0MTRjLCAweDViNGEwYThkLCAweDNjMzE0MWI1LCAweGU4Nzg0OTBhLAorCTB4ZWY1YmQ2YzUsIDB4MzNlZjZiNWUsIDB4NDI2NjczOTksIDB4ZmRkZmI2YTIsIDB4N2YxN2RmYmUsIDB4ZWNmYjM2ZmUsCisJMHg3YjVlZjY3MywgMHg3YjVhZmZhZCwgMHgyMzFmYjVlZCwgMHhkMzEzYzY1OSwgMHgwNTdjODQxNSwgMHg3MjEzZDc3ZiwKKwkweGY0ODQyNDQ4LCAweDBiM2I0ZWViLCAweDEwOGUzYTY4LCAweGIwMzk4ZTdmLCAweGI0MjQyMDU1LCAweDI0ZWRlZmVmLAorCTB4NGRiMzkwODUsIDB4MjY3MzU1YjMsIDB4OThjN2ZiMjEsIDB4ZjJkM2Q3NDMsIDB4ODBmYzgxYjMsIDB4ZGQ0Zjk2OTksCisJMHhkMTIxYzQ3OSwgMHg1MTRlZDU3YywgMHgzZWQzNzI4MiwgMHhiMWRmN2UyYiwgMHhkZTQwMDg1MSwgMHhmMWZkNmU2YiwKKwkweGI1ZGYzNGI1LCAweDY5OWIyNDUzLCAweDM3NjQyNGQ1LCAweGRhNDI1NDkxLCAweGE5ZmQ4NDJkLCAweDZhNWY5OGYxLAorCTB4NGRhYWQ5NjUsIDB4ZjY4MmVmZmIsIDB4NjI2NjgzY2EsIDB4MzdiN2RmYTUsIDB4YWZjODZlODksIDB4MDgwNDJhZGMsCisJMHhmNzZhYWY2ZCwgMHg1YTAwY2E4MywgMHhkMDgwYjJkZiwgMHg3ZTY5NTU2OCwgMHgxYThhNjNlYiwgMHhmYjAzYzg0ZiwKKwkweGIzNjhlY2ZlLCAweDY3ZGE3MjEzLCAweGZkODJhYTIxLCAweDQ5MWM2ZjI4LCAweDdiNjA0NTQ4LCAweDdkZmEwMGUxLAorCTB4NjVjMTM2YzUsIDB4NmM1N2Y1YTIsIDB4ZjQwMWQ3M2MsIDB4YzNjOTM0NTUsIDB4OGFkZjVhNDQsIDB4NDc1MTFiMDYsCisJMHgyMmJmYjZiMCwgMHgwN2NiNWVkMCwgMHg3OTRlZGVkOCwgMHhmZTU3YjQyOCwgMHgxMTBhM2RlNSwgMHgxYmIyOWZhMSwKKwkweDc0YTJhYmJlLCAweDc2YjViZjQwLCAweGIxZWFmYjRmLCAweDU1OWY4ZDNkLCAweGU4ZjZkMWNmLCAweDBhMmZkNTdiLAorCTB4YjU2MmU4MmUsIDB4OGU4MDc4ODksIDB4YjlkNmRkOGUsIDB4N2ZhMWRiNGYsIDB4ZjhmMGNhYjUsIDB4ZGMyYzdlYzgsCisJMHgwOGE4ZmQwNSwgMHhlZDBhNTI2YywgMHg2NTI2ZGY0MCwgMHhmYWVlYzhlOSwgMHg4N2ZjMzQ1NiwgMHhhY2ZhYmU5ZSwKKwkweDcyODg5ZWZlLCAweDQ3ZGE3YTYzLCAweDNiYmMzYTU5LCAweGJiODg0MTVmLCAweGE0NGJkNjkxLCAweGFhM2E1MjgwLAorCTB4NDIwN2Y5ZmIsIDB4YTFlMzIxMjIsIDB4OTZhODkxN2UsIDB4ZTRhOWZhZWUsIDB4MjNmZTA3MTEsIDB4MGY5NDlmZjQsCisJMHg4MWYxYmRmZSwgMHg3MmRkOTlhZCwgMHg5OTA0ZTk1YiwgMHhiY2VkY2I3NSwgMHhlYTUxY2I5MywgMHg1ZmFjOGRjYSwKKwkweGYyMGM3ZjRiLCAweGY5ZDRmNGEwLCAweGVlM2U5ODljLCAweDgzNzRjMzRiLCAweGZkYmU0NTRmLCAweGQzMDIzN2RjLAorCTB4OWYwYjlmN2EsIDB4YzNjYmU5M2YsIDB4OGRjZmEzNzQsIDB4MjJiZTUzZTksIDB4MTJiZTAzNGMsIDB4NmZiMzZmN2MsCisJMHg3YzViYTYyZSwgMHg4Y2ZlN2MxZSwgMHgwNmQzMWNhZiwgMHg3ZjNlMGQ1ZiwgMHhkMzFhYjdkZSwgMHgzZTNmM2U2ZCwKKwkweDFlYjdkMTdmLCAweDFkNWY0NmQzLCAweDVlNDAzYmE2LCAweDA1ZjI2ZDM0LCAweGJlNWRiZGYwLCAweGJlODM0YzA2LAorCTB4YzdiZTdjNDYsIDB4MTFmNGM0MTcsIDB4NjRjNzQ3Y2UsIDB4M2U1MTJmOTIsIDB4NDljNGRjMzgsIDB4OGE5MjRlYzUsCisJMHhjZDMyZjlkZCwgMHg3Y2IwOTUyNywgMHg3Y2ZlMWRlYSwgMHgzZDUzZTY4NSwgMHgzMmY5NGYzNCwgMHg2Zjk0MzJhMCwKKwkweDM1MDFmOWE2LCAweGZkZjA3Y2FjLCAweGYzNDJjMGE0LCAweDdjYWNmZDgzLCAweDAyZWUyM2M4LCAweGE5MGZjZDJiLAorCTB4MzdjM2U1NjMsIDB4NjhlMjBiZmEsIDB4OTU4MDc4N2UsIDB4NTQyZGJkNWYsIDB4YWJmOWEzNjAsIDB4NzY3OTU5MWIsCisJMHhhNzZhOTkzMywgMHhjYjEwZWNmOSwgMHg5ZWUxYmNlNywgMHgzOWYzNGYxYSwgMHhmYjlmMmNhZCwgMHg4M2FhN2Y4MSwKKwkweGQ4ZGI3M2U2LCAweDA0Y2U5M2Y3LCAweDJkMWVkNTQ0LCAweGJhYjIxZDg3LCAweDZkNTk1MDk4LCAweDRiNzBjZmY0LAorCTB4NTE1ZTY5MTMsIDB4Y2EyZTIxZWYsIDB4NmVhZGZmMWYsIDB4NDNmMjlkMjksIDB4Yzg3OTYzNzYsIDB4OWJjYjFmM2YsCisJMHhiZjk2MzcxNCwgMHhmY2MzMmZlMywgMHhlNTgzZDkyZSwgMHgyYzU1ZmRjNywgMHhmY2IwNzhhZiwgMHg5OGJkZmY3MywKKwkweDJjN2VjYTBmLCAweDU4ZmFkNGI3LCAweGY5NjNmMTVlLCAweDU4ZjVkYTgwLCAweDgwMzkxZWZmLCAweDFmNmIyM2U1LAorCTB4NGEzZGYyYzMsIDB4NWYxZmNiMDAsIDB4MWE3YmE0ZmIsIDB4M2MxMWFmY2QsIDB4ZDIzYzA3M2YsIDB4MDE2NDljYjQsCisJMHg0YWQzMWE5ZSwgMHgwOWQ2OWUyOCwgMHhmN2UwMmU2NCwgMHg4YTNhMDAwNywgMHgwYWU5NzVjYiwgMHgzZjhlZTFlYSwKKwkweGZhMGQzZWU0LCAweDkwMjk3ZjhiLCAweGMzY2NmYTVmLCAweGFmZmRmODk5LCAweGQ2OTkxZWIwLCAweDRmNWVmNjIzLAorCTB4YmE3OTliY2UsIDB4MmNkZTcyN2EsIDB4ODA2OWVhZDcsIDB4ZmI1OGQ2ZjcsIDB4Mzc4ZWNmNTYsIDB4NzllOWU5MjcsCisJMHg2N2FiNDJiMywgMHhkZjEzZDIzYiwgMHhiY2U1N2ViNywgMHhjZjRmNTkzNSwgMHgzZDVhOTU1YiwgMHhjNDllOTA3YiwKKwkweDc0ZDNkMWJlLCAweGE2OWZjZjQ0LCAweGI0ZmU2MTIzLCAweGZhZmQzZDIwLCAweGY3YjhjZjQ2LCAweGY3MTlmY2Y0LAorCTB4NmYzZjk4NWUsIDB4N2RlOTNkNjAsIDB4M2RlOWE3YWIsIDB4ZGU5YTdmM2QsIDB4MDhlN2YzMGIsIDB4ZGY1MDZiZjYsCisJMHg3ZGVlMzVmYSwgMHhiZGM2N2YzZCwgMHg0N2NmZTYxZiwgMHhkZjY2NGY0OCwgMHhhMWY1ZDllYSwgMHgzZWJiM2Y5ZSwKKwkweDA0ZTdmMzBjLCAweDZmYWMzM2Q2LCAweDQ4ZmRjYWZkLCAweDhmZGM5ZmNmLCAweGMyZTlmY2MyLCAweDViZWFhZTdhLAorCTB4ZDIzZWJiM2QsIDB4NDdkNzY3ZjMsIDB4ODE3Y2ZlNjEsIDB4NWJlYThjZjUsIDB4YTJmZjcyYmYsIDB4NWZlZTRmZTcsCisJMHgwOTMxZmNjMiwgMHhiZTk4Y2Y1MCwgMHg1NGZjMTNkMSwgMHhhN2UwOWZjZiwgMHhiMGQ4ZmU2MSwgMHhhMzdkZjE5ZSwKKwkweGNmNWRhZjI3LCAweDMwZjZiYzlmLCAweDkwMDQ1MjdmLCAweGQ1YmVjNGZiLCAweGYzZDc2YzEzLCAweGU2MWVkODI3LAorCTB4ZTdhYzIwY2YsIDB4MmJmNWJlYmEsIDB4M2Y5ZTg0ZWYsIDB4ZmNjMjI3NzksIDB4Y2FmZDhlMTksIDB4ZjQwZjdhYTcsCisJMHg3YzRmNWExMCwgMHgzOWVjZjVjZiwgMHg5ZWNmZTdhYiwgMHg4Y2ZlNjFiMywgMHhkM2E2N2FjNiwgMHhhZjdhYjI3YSwKKwkweDllODc1MjY3LCAweGMyM2E5MzNmLCAweDdhYzNjOWZjLCAweDllYWRmNDY2LCAweGZlN2ExZDNkLCAweGYzMDhlOWVjLAorCTB4NzNmOTFmMjcsIDB4MzVmYWRmNTMsIDB4OWZjZjUzYTksIDB4M2Y4YzlkNDksIDB4NGNkNzBmNjMsIDB4M2E3MmQwNzUsCisJMHhmYTQ0YmExNiwgMHhkYzY3YjVjOSwgMHg0NWU2ODE2ZSwgMHg0ZThiY2IyNywgMHg0NGJmMDExNywgMHhkMjBkZmNkNCwKKwkweGY3ZTkxNmVhLCAweDM5ODk2ZGY2LCAweGJmNDg5MzBmLCAweGZhMTRhMGEzLCAweGIxYmQ0ZjE1LCAweDIxMjNiZjQ4LAorCTB4ZTdlNzRlMmYsIDB4NzQ5M2JhMjQsIDB4MDFhMmU0ZjksIDB4OTVmYmY3YmEsIDB4Zjc5NWQxMGMsIDB4YWViNTdiOWYsCisJMHhhMzkzZGQzYywgMHg0Zjk0NjdjYiwgMHhhODNmYmRkMiwgMHhiZjk3NDBhNiwgMHhiYTBkZjU2MiwgMHhiN2ZkMzNmNywKKwkweGViNTlmMmVhLCAweDNmYmRkNzZmLCAweGFlOTE2ZWFjLCAweDBhZmFjYWZjLCAweDgxNTVmOTVkLCAweDM1ZmNiYTk1LAorCTB4N2JhZWZmMGQsIDB4MDNlMzU0N2YsIDB4YzFkMWYyYmEsIDB4NjNlNTc1ODcsIDB4ZjJlYjhmNDIsIDB4YTkzZDBmNjMsCisJMHhlYjdjN2Y3YiwgMHg4NGY5NWQ2NiwgMHhjYWViY2ZhMywgMHhkMGVkYjYyNywgMHhiOTNkYWZlNSwgMHhkOWU3ZTBjNywKKwkweGYwZDdlZDlkLCAweDI3YjgwOGJjLCAweDU3NGZlZmNjLCAweGM1MGJkZmQwLCAweDA2NTc5ODJiLCAweGRmOGZkMWQ4LAorCTB4M2Q1NGJmMWYsIDB4YmNhYmU1NGUsIDB4YTE0ZDU4YjIsIDB4MTI5OTA1ZjIsIDB4MGZlN2FlM2EsIDB4OGRiMmJmMjgsCisJMHg5Mjc3YmYzZSwgMHg3ZDI3NGFlNywgMHgxOWUyYWY3ZSwgMHg5ZmUxOGNlZCwgMHgyNDA4M2M1MiwgMHgwNGQ1NTIwZCwKKwkweDQxZmNiMWE5LCAweDIwYjFlMTk5LCAweGM3ZTFjYmUzLCAweDUzNWVmN2U4LCAweDlhNDRmMGQ3LCAweGQ3ZTYyZmVmLAorCTB4MTI5ZTVlMDMsIDB4MzhkMzg4NGMsIDB4N2JjMGQ0OTEsIDB4ZjM4MjY2NzEsIDB4NzMzMzA3ODIsIDB4ZTA0N2Y2OWYsCisJMHhhYTIwZmQ3NSwgMHhiZDc3NDI4NywgMHgxYTRmNjVlYiwgMHg2YjliMTlmOCwgMHgxZjgzZjZkZiwgMHhlZDEwNmViMiwKKwkweDllNDIwMGQ3LCAweGY5MGVkZTE2LCAweDA3ZWZkMjg3LCAweGQwZjM0ZDJkLCAweGY1MGFjY2ZhLCAweDU3ZGIyM2QzLAorCTB4YjEyM2ZiNjgsIDB4ZmY2ODA2ZmQsIDB4MzdkYTFlYzUsIDB4YjVkM2M5MGYsIDB4YWU1YzE5NmYsIDB4ZDBhMmRmNmIsCisJMHgxZmQ0OWRmNiwgMHg2ZjIzZmRhOCwgMHgxMjYxMGE5ZiwgMHg3ZjBiMmYyMSwgMHg4M2NkZjZjNCwgMHgwN2ZkYjFjYiwKKwkweDg5NWYzYTE1LCAweGRjMmUzZjZjLCAweDc3ZjQxMDdlLCAweDNlM2ZiNDFmLCAweDRjODdmZjQ2LCAweDcwN2ZmN2QyLAorCTB4MGFmZmJlODUsIDB4YjUyYmZmZWIsIDB4NzFmYjc4YzcsIDB4ZTExNmZmZDgsIDB4ZTBmZmViMTgsIDB4MzM3ZmQ2MGEsCisJMHhiZWRjMzdhYiwgMHg0M2ZmY2MyMywgMHg3YjM3ZmZkMCwgMHg2NGQ2N2ZlYSwgMHhhOGFmZmY3ZCwgMHhjY2RmZjdkNCwKKwkweGY2YTc3ZmRhLCAweDhlZGY2ZjE0LCAweDljMmJiZmVkLCAweGEyYmZmZDYyLCAweGNjNTdkYjEyLCAweDQ3ZTAxNzFlLAorCTB4MDlhYjg4YzksIDB4NDBjOWY2ZDAsIDB4MDNmYTk4NmEsIDB4OTAzYjY4NWMsIDB4YTBhMjQ4OGUsIDB4NjE1MWU0MjYsCisJMHg2ZjcxZDIwOCwgMHhlN2RiYzMxYywgMHg2ODZmMTQ3MSwgMHg5Y2Y4ZmM2ZiwgMHhjYjY1YTgwNCwgMHg4ZTJlZjNhNSwKKwkweGYyZGIxNWY1LCAweDU4NGJiMDE1LCAweDRiMmJlNzRlLCAweDQxNjVhOTM4LCAweDM2NGRmMTExLCAweDI4YzMwMzk4LAorCTB4ZDE0MTFkYmQsIDB4MGRiMmY5MGYsIDB4ZmVjMDA1ZDcsIDB4NDE2NGNkNzksIDB4OTEyNzdjMDksIDB4ZjRmZjNjMTAsCisJMHg0NzM2YTM2NywgMHgyZTk4Y2JmNiwgMHhkYmRiOTNhOSwgMHgzYzJkZjQyMiwgMHgyMzIwMmE4ZiwgMHhkMzdkMjg2YSwKKwkweGJiZTMwNDAxLCAweDc5ZDMxZmYzLCAweDhiZjNhMTEwLCAweDgzM2NlODBmLCAweDIyN2U0ODUwLCAweGEyM2VmNmIzLAorCTB4YjdjODI1ZjMsIDB4OTQxMmY5ZDEsIDB4ZGY4YjUyMTMsIDB4YTcwZWVhZDEsIDB4Mzg0YmZhNTEsIDB4NGM0YjFmZmQsCisJMHg0M2JlM2Y1ZiwgMHg3ZWE5ZjgwOCwgMHgzMWJkZmU3ZSwgMHhiMDVkNGYzOCwgMHhkZTk5NDZkYSwgMHg3ZjQyYzc0ZCwKKwkweGZiNGYyZWIyLCAweDc1MzkwN2U1LCAweDM2MDczNmVkLCAweDE1NWZjODBiLCAweGFhOGE1NWY4LCAweGY1ZTJjODQ5LAorCTB4ZGRkNzk0MTksIDB4YzU0ZmJmZWYsIDB4N2Y1OTRlOWUsIDB4ZmRjYjcxMWIsIDB4YWU3N2ZiZTksIDB4NjkzOTA2MTIsCisJMHhlNmRkYjNiYiwgMHhiODRlMzYxYywgMHhkN2E4NGMzMywgMHg0Nzk0YzMyNCwgMHg2MzRkYWRjOCwgMHgyOTAzNWE2NCwKKwkweGI3MWZjYjc1LCAweGIzM2JiNDQ1LCAweDVkOWY5ZjQ4LCAweGM4NzdjZmEyLCAweGU5NDRkOTZlLCAweGM4MTUyOGVhLAorCTB4OWNlZjVhMjYsIDB4YWQ3MmZhYjksIDB4ODkyOWJiMWQsIDB4NTdiNzk5YzksIDB4OWJlOGNhOTIsIDB4M2MwZTY5MDMsCisJMHhlNzljYTI3NiwgMHgxYWI3ZDkzYSwgMHgzMmM1ZGUzZCwgMHgzYzgyYzI5ZCwgMHhjODA4ZmRmZCwgMHhlZjgyOWZkNSwKKwkweGZkNjRlZWRkLCAweDU3M2JkMjM2LCAweDY4NGJiOGI2LCAweDE0MmVlNzNmLCAweDIzNmY4MDAzLCAweDY3ZGE3ZmZkLAorCTB4NjliMjliNzMsIDB4MzJhN2ZlYmEsIDB4YzdmNzQ1MzEsIDB4OGYzY2ZmNDgsIDB4MzI4ZDNmYjEsIDB4Y2JmM2MzOGMsCisJMHg2ZTE5Y2Y4ZCwgMHgzZmZjYjlkYSwgMHhmNGQwN2MwNiwgMHhkMjgzZTAwNCwgMHhhM2UzOWM3ZiwgMHg3YzMyYWVkYiwKKwkweDliOWVjZDc4LCAweDRmNWQwZjAxLCAweGNhZTUwNDg4LCAweGM3MWI3MmYxLCAweDNkM2E5MmNiLCAweGM4ZjEwODJlLAorCTB4NzM2NWM3MjAsIDB4MjM4NzljODUsIDB4ZTM4NzMwNzAsIDB4MWViZDU5NjAsIDB4YmYxMjc3MzcsIDB4MmU0MzFlOWMsCisJMHhmYTZjMzZmMywgMHhkZDFhOWE2MSwgMHg2ZTM5MGZiZiwgMHgxZmIyM2ZlNiwgMHg0ZmRkMTNmOSwgMHhiOGJiYTcyNiwKKwkweGQxYWNlZTljLCAweGU1YzZkZjk3LCAweGViOTcyNzdhLCAweDBlYzdmYWRjLCAweDZlNDFmMzUwLCAweGU4MzIwMzU3LAorCTB4NGQzZWY3YmIsIDB4NzkzYTZkOWUsIDB4OGQzY2I4N2EsIDB4ZTVjNWRlNzQsIDB4OThmN2Q3NzksIDB4YjZmNDhkM2MsCisJMHhkNWI2Nzk3MSwgMHg5MGM5OTA1ZiwgMHhmNDhkN2E2OCwgMHhkNTFkNTgyZCwgMHhiOWU0MDUxZiwgMHg5ZTViMWZkMCwKKwkweGYyN2U2MGRlLCAweDU1ZTc4OGYxLCAweDhmOTIzMzhkLCAweDhhZDllODQ3LCAweDdlNWQ1Mjg2LCAweGVlOWU2MDc5LAorCTB4MGJmNTY1ZmQsIDB4ZWE0YmU1NzUsIDB4MTdjYWViOTYsIDB4OTc1YmJmYWYsIDB4OWVmZmU4NWYsIDB4YWIwNWZkZWUsCisJMHg3N2U1NzU2YiwgMHgyYmE0M2NkNiwgMHg5OGZlNWY5ZiwgMHhmM2NmM2YyZSwgMHgzOWZkZWU4NCwgMHhjYWU5Mzc3MywKKwkweGE3M2M5NzY3LCAweGI0NTk5ZjJiLCAweDc1MmY5NzVkLCAweDZmYmRkNmVmLCAweDJkZDU3N2RhLCAweDhlMzdjZjgwLAorCTB4ODlmYzA0ODgsIDB4MzAyNzVjY2YsIDB4NGI5OWY4MmUsIDB4YzczYmMxNzYsIDB4YmFlMjJhN2QsIDB4ZDMwMjM3ZGQsCisJMHhlMjE3M2U5MywgMHgwZjJmYjRmZSwgMHg4YjYwOGVkMywgMHgzYTA5YzYxZCwgMHg4OTI1MmUyZSwgMHg2ZTliY2NkNCwKKwkweDEwM2Y1ZGFlLCAweGUzODI2OWM2LCAweGFjZDMxNmU5LCAweDQyNjRmZjVhLCAweDkxNTI2ZDdlLCAweDBhZjVjNWRmLAorCTB4NDQyNThkMDksIDB4ZDM4NmMxODAsIDB4OTQ0NjI1ZDEsIDB4NWU1MmY1YjcsIDB4NzI3ZjBkNGYsIDB4NWI3MTc5NzQsCisJMHhjN2RlZTdlYywgMHg4Y2UxNWUxNywgMHhkNmU5NzcxMSwgMHg3ZTAxOTI1MywgMHhiYmY3Mjc0ZiwgMHgwMjk1ZTU4ZCwKKwkweDRlN2M4OTI5LCAweGQ3YTgwM2M4LCAweDViYjhmOGU3LCAweGFmZmQzMGE5LCAweDQwNWU5MWRjLCAweDBkMGY5MDFjLAorCTB4N2I1Y2I5YWYsIDB4ZmRlNDE0OGQsIDB4M2E1OTI3MDEsIDB4N2Y1NjVlM2QsIDB4MTNiZWNlOGQsIDB4MDNmNmNhODgsCisJMHgzZGQ1OGRiYywgMHhhZDcwZDE1ZiwgMHhmYjMzYmJlZSwgMHgxYWJiYTQ0NSwgMHgxODQ0YzU2YywgMHgzNzVlNGIxNiwKKwkweGI1MGUxZDgxLCAweDBhMzk5ZTBjLCAweDYxYmY3NGU4LCAweGQ4MmE3MTgyLCAweDMzYzJmZDBmLCAweGUzZTRhMmJlLAorCTB4MDRhZmM4MTIsIDB4YjliZTkzZDMsIDB4M2NmYmI2OTgsIDB4OTVmNzFlOTgsIDB4YWZiMWZhNjMsIDB4ZGYzNmQzMDYsCisJMHhmMjNmNGM2YSwgMHhjMGZkMzFmOSwgMHgzZmQzMWViNywgMHgzZDMwZWFmOSwgMHhmNGM3YWJlYSwgMHhkMzAwNWYzZCwKKwkweDRjMDZiZWMzLCAweDYyMzVmMWRmLCAweDYyMGJlYWRhLCAweDYzNzNlMWRhLCAweDZmNWRlOWFhLCAweGM3YzkzYmI4LAorCTB4YmY4MGQzZTEsIDB4NzhlYjM4MTgsIDB4ZmFlZDU1NjAsIDB4M2IzOGRkYzksIDB4ZDZhZmJhNmYsIDB4Y2Y5YmIwM2YsCisJMHg4ZTY2ZjVjNSwgMHgxZTFkNTQ4NywgMHgzMzYwODBiZSwgMHhmMjk3YWNlMiwgMHhiMGUzOTk3YSwgMHg5NzYzZWZhNywKKwkweDZiZmYzNzdiLCAweGM0ZGUzNmYwLCAweDhhNmZjY2ZjLCAweDY1M2M2ZWI3LCAweGQ1OTRmMDE4LCAweDg5ZmE5ZTFiLAorCTB4MzRmMWJiZTMsIDB4N2U2NGU0ZGUsIDB4OGZkM2M3MGYsIDB4ZTYzMTFmYTAsIDB4ODRlMDA1MTUsIDB4ZDdmMDhiZjQsCisJMHhhNzE2MzZkYywgMHhkNDA5ZWJlNiwgMHg2YTcxNjU1MywgMHhmYTFhZjZkZSwgMHg3NWZhMmI2ZSwgMHg2ZTMwMTE4MSwKKwkweGI3ZjExZjljLCAweDNmODcxMGUxLCAweDI3NGNkNDdmLCAweGNmZjczZDdkLCAweGY5OWU5Mzg4LCAweGNkZjljNmVlLAorCTB4YmMxZDAwZDIsIDB4NWI5NzQ2YzYsIDB4YWQ1ZjE4ZTMsIDB4ZTg0NDUyMjYsIDB4YjBkMGY2YjgsIDB4NDY4YjVjNjcsCisJMHg0OTIyNWU2MiwgMHg1NWMwN2RmMCwgMHg1ZWEzMWYxYSwgMHg3ZjAzMmJlYSwgMHg5YWViZTM3YiwgMHhhMWIzY2ZmOCwKKwkweGZmMjdmNmJlLCAweDc4ZTkwYjllLCAweGUzOTdmMzEzLCAweGRiZjQ0NDVhLCAweDE3NjllODQ5LCAweDJlM2MzN2YwLAorCTB4MTA2OTVkOTksIDB4YTYxYWVlZGYsIDB4MDg2ZmQxMzgsIDB4ZjNmY2Y1ZDgsIDB4Mzc2ZTdjZDMsIDB4M2NhMjFlZmYsCisJMHhiNzcxYzU2YSwgMHgzN2Y5MGQyZSwgMHhlOWUxZjNmNCwgMHg2ZjVmZTA3ZCwgMHg3ZTM3YmRmNiwgMHhmODBjMGEyZSwKKwkweDM3YjNmMDk3LCAweDVkOWJkOGZiLCAweGM1ZjU2ZTI0LCAweGU3N2ZlZDIwLCAweDBmMzk1MWJlLCAweDg3MDc2MGFiLAorCTB4MGY1YTc5YjAsIDB4YTVkNmQ2ZmMsIDB4ZmY3Y2Y0OGMsIDB4MzNiOGUyNmIsIDB4ZWI3MWMzNTUsIDB4ZjlkYjQyNjAsCisJMHhmOWNiZWI4OCwgMHg0MDEzMmJhNiwgMHg5YzFlYjQyZSwgMHhlNGVkNzQxZiwgMHg3MjJmN2U3ZSwgMHhhZmE5OWIzZCwKKwkweDJmYWM2YmNmLCAweDY4YzIyMTQxLCAweGEyYmM2ZWRhLCAweDZhNDIwNDkwLCAweDIyYTNjZjQ0LCAweDZkNWM2ZmNlLAorCTB4ZWMxYjg4N2UsIDB4YThkNmI5YjMsIDB4ZmQzYzZmMzAsIDB4MWE4NTQ4NjYsIDB4ZjM4NWYxZjUsIDB4YzA3NjllODcsCisJMHg5YTY1NmMzYywgMHg4NjNjNzljOSwgMHhhYWI0YjUxYywgMHg4ZjY5ZDMzMSwgMHhmNTA0YWY5YywgMHg0Mjc1ZjNmOSwKKwkweGU3Y2UyMzUxLCAweGEzNTk4NGQ0LCAweDNhNzE5YzYwLCAweGJiMDUwZjhmLCAweDU2YTk4NjlmLCAweGM1MzRjYWNmLAorCTB4ZGRkYTljNzksIDB4MDk1OTBkZDMsIDB4NjAxN2ZlNmMsIDB4MjI1YjY0ZjYsIDB4M2VkMzliZGEsIDB4Y2ZmZmJlMGIsCisJMHg3YWE3YTdhNiwgMHg2OTA4N2EzNCwgMHhjMDU4OWYyMiwgMHhhY2IyZDM5ZSwgMHg1MWVmZGY5ZSwgMHgwYThiYTQxZiwKKwkweGIzNDkzN2M0LCAweDM3Y2MzOWZjLCAweGFmZmZmNGFkLCAweDEyYmQ0MDg2LCAweGJkN2FiNWU2LCAweDNjZGZhMjhkLAorCTB4ZDM2ZjllMWEsIDB4NTNiZjQ3YjUsIDB4Zjg1N2I1YjUsIDB4OTNiZDY3YWUsIDB4N2I4NmJiNDgsIDB4Zjk1N2JmMmEsCisJMHgwNjhhZjBmYSwgMHhjN2VmNTNhYiwgMHhkZWYyZWEyNiwgMHhlNzUzYmE2MCwgMHhjMDNmYzJkNywgMHgyNDExYWY3MSwKKwkweDg3MjU1ZmMwLCAweDVmNjRhNzVmLCAweDBjZGE3ODBmLCAweGJmOTg0M2MxLCAweDJhYmRlYzA4LCAweDUxZTI5YjRiLAorCTB4MDE1YTVkNTEsIDB4MzRmMjhiOWYsIDB4ZmU3M2FiZmMsIDB4YTlkNGVkNGMsIDB4N2EwMjY1ZDcsIDB4NTRhNGJlNDYsCisJMHgyMGE5ZjJlNSwgMHg0YzQ0Y2RlMiwgMHhiZjk4YmYzNCwgMHg0NTY5YThiZCwgMHhhNzViOGMzMSwgMHg1MGZlNmM0YywKKwkweDMwMWM0YTQ2LCAweDc1MjcyZTNmLCAweDNkNGYxMGI5LCAweGEwNDU0YzRiLCAweDNiYzk2NzlmLCAweGZhMTFiMThlLAorCTB4YjA1NDRlNzgsIDB4ZjVlYmM1ZDIsIDB4ZGY5ZDNjN2UsIDB4ZWFjYmYyZWIsIDB4ZTRhNWY5ZjUsIDB4MDc1ODU0ZDYsCisJMHgyNjQxYmE1ZiwgMHg4NmVjMDEwMSwgMHhlODk4ZmNiZSwgMHg5MTk3N2FjNCwgMHg2ZTMwNzU5YSwgMHhiYmM3OWNmZiwKKwkweDk0ODkzOTE2LCAweGZhYWJlOTQxLCAweDE3NzMyZmNkLCAweDg5MmUzYTUyLCAweGQ2ZDVmYzZjLCAweDMxMjc5NzcxLAorCTB4MDU2NjJiZmEsIDB4ZmY3ZDM3MTQsIDB4YjdiMWE2OTMsIDB4YmY0NDBiNTEsIDB4NzU4M2FjMGYsIDB4NzEyOTdmNmQsCisJMHhmMmQxMjU2ZCwgMHgxYmY0YmFmYiwgMHg4MWZjZDVlOSwgMHg0ZTY0ZjVhOCwgMHhlMDgzNGE0NywgMHg2M2IwYzQwZSwKKwkweDNkMzAyNDhhLCAweDZhZWVmNmUzLCAweDgzOGJhOWM5LCAweDIyM2U0MmU0LCAweGYxOGRmMjBlLCAweDc4NzQ0Mjk0LAorCTB4MDY3YTJjZGEsIDB4N2UxOWUzNGIsIDB4ZDQ4MjBmMDAsIDB4NGRiZTc4YTUsIDB4ZjU1MTY5ZmQsIDB4ZmJmNTJkNWYsCisJMHg5MDNmZDYyNywgMHhhYmFiOWZkNiwgMHg0YTlmZjczZiwgMHhmYTI4ZDBmZiwgMHg1ZmQ1NjIwYiwgMHg3NjE3OWJmNSwKKwkweGE5M2RhOWY5LCAweDBlNjdlOTc4LCAweDUzYzljNzQyLCAweDhiYWE1ZDUyLCAweGViNzJiNWNhLCAweDlhNmUxZDBmLAorCTB4MGVmYzk0OWUsIDB4ODBhOWViYzAsIDB4ZGU0YjE0NTgsIDB4NzZmMmMzYWIsIDB4YmI4ODA1ZGIsIDB4ZmQ2OTNmYzEsCisJMHgxMWZmOWZhNywgMHhkZjNlMjNjNiwgMHg5ZTMxM2IyYSwgMHg5OTBlNjBkNiwgMHgzNzU2M2VhOSwgMHhkOTI2MmYyZCwKKwkweGYyYzYzZjk4LCAweDIxMTM5ZTBmLCAweGFmZTNkNDFmLCAweGE1OWZkOWUyLCAweDhhMGFmZWMyLCAweDBhNWYxZTE0LAorCTB4YmQ1YjNmYTEsIDB4MWM0MmQzZTUsIDB4ZWExNzQ4OWYsIDB4NjgzYmYxOTEsIDB4ZGExMjUyZmYsIDB4NDI0YTg1YmYsCisJMHgxM2E1Mzk3NCwgMHhjZTVlMDRlMywgMHg4ZmQzNmYxNywgMHhmODBlODljZSwgMHhkZmNlMWI1NywgMHg3Mzk3ZWY4ZCwKKwkweDE0Yjk3NGZmLCAweGEzNmVkMjlmLCAweDI2NDA5ZWZmLCAweGY4ZDQzZDgwLCAweDNmY2MwMjQxLCAweDJmZGNmMzVkLAorCTB4N2E1MThmYjIsIDB4ZGQ3OTZjY2UsIDB4NDlmMDQ0MjEsIDB4OGRmM2EzZDMsIDB4NDdiNTdmOGIsIDB4NzZkZWQ5ZWQsCisJMHhmNDhiM2Q1MCwgMHg0YWYxYjQ4MywgMHhiYWJmNzIwZCwgMHg3Mjk1YTU5OSwgMHhkNTJkNzFjOCwgMHhiMjRkY2FmYiwKKwkweDU3MWY0ZmNiLCAweDMzZjRmMGJlLCAweGYzMWM0MjRmLCAweDMwZDc2NjhmLCAweDE3OGFmZjVhLCAweDg5MzdiYzBlLAorCTB4OTc2YzU3ZTYsIDB4Mzc1OThhNTMsIDB4Yjc2YTQyZWMsIDB4ZmZmNGJjNWMsIDB4NzJkZDM5ZDUsIDB4ODBmOTc4YTgsCisJMHhjZjYyOGVhMiwgMHg5NmVhNGZlZiwgMHhmYmVkOGFjNywgMHg5YTJhMzIxNSwgMHhmNzFiNTMxZiwgMHgxOGY2NmQyYiwKKwkweDU2M2M2OTcyLCAweDlhYzI3ZTA4LCAweDgxNGJmZWU3LCAweDdkYTllMmY4LCAweDE5OWZlOTAyLCAweDBlOWI5ZjgzLAorCTB4N2MwMDFmYTAsIDB4Mzk3MjM5NDIsIDB4Nzg2NmU1ODUsIDB4MDJlNTRiZGYsIDB4OTM5MzVhZjYsIDB4NmU0NmZjYjEsCisJMHg3NTNlYTA0ZiwgMHhjNWY5ZTIyNCwgMHhmMmZkYjQzZCwgMHhkMDVkOTkzZiwgMHhlZjE3ZjJmZiwgMHg0ZTNmNDA3MSwKKwkweGQ3MGMzNTQ4LCAweDJhNjFmY2JmLCAweGQ5NzJhZmQ4LCAweDk0YzRlYTlmLCAweGVhN2YyZjNkLCAweDY1Yjc4OGJiLAorCTB4MTUzNzdmNmYsIDB4OWRjNDQ5ZTMsIDB4YzdiMWMyNmUsIDB4NWJmZDBlOWYsIDB4ZjYzNjcxYjIsIDB4MjBmMTI5NmYsCisJMHgyOTdmY2FlZSwgMHhmYTY4MDQ5NiwgMHhiNjhhNDQ5OSwgMHgwZThiZDBjNywgMHgzNjI3MTdhZSwgMHhmNjhjNDc1MywKKwkweDFmY2MwNGVmLCAweDIzYmY1ZWMxLCAweDQyMmFiZWUyLCAweGZmYTAyNmVlLCAweGExN2RlNWRmLCAweDNmZTYwMjFlLAorCTB4MWQzOTMwYjMsIDB4YWY1YzRjOTAsIDB4ODkxOWI3YTgsIDB4YjYwZjJkZDcsIDB4MGY0ZTdjODIsIDB4NzU4N2Y3NzIsCisJMHhmYzkxMmYxNiwgMHg1N2MyMWY5YywgMHhlZGYxNWViNCwgMHg3Yzk5ZmRlOSwgMHhmMmU1MmE4OCwgMHgzZjM4ZThlZiwKKwkweGZiYzM5ZTE1LCAweDlhZGJiMmFkLCAweDdjOGVmYmFkLCAweGZlZGRkOTk1LCAweGE1M2VkZTJhLCAweGU3YzYwZTNiLAorCTB4ZmRiMWE5MTMsIDB4YTZiMjAxZDUsIDB4OGU5Yzc0ZjcsIDB4N2U4NDU3YzAsIDB4ZjJkZjdkMzMsIDB4NGQ2ZmQzMTAsCisJMHg0NWE1MDNkZiwgMHgzMGYxN2U1MCwgMHgwZWY4MWZkMywgMHg1NzRhM2ZjNiwgMHhlZjk2M2ZhOCwgMHgzZGEwMjU5ZiwKKwkweDU4ZTZmM2EwLCAweGU2NDViZDdhLCAweGQ3MmZhZDdhLCAweDk2ZTk0MjcwLCAweGJjMDg4NDg0LCAweGM4NDlmZDQwLAorCTB4NTk1ZjVjN2YsIDB4MTc3ZTgxYmEsIDB4ZDBiZDJmNjEsIDB4M2ViYTIzOWUsIDB4NzE5NzZmNGQsIDB4ZmEwNTNmZmQsCisJMHhmZWI3NGQ3ZiwgMHhlZjRjOGQ5MywgMHhmYzlmZjY3YiwgMHgwNzIzNmUyYywgMHhmNDEyNzk5ZSwgMHg1ZmE3ZWE5NSwKKwkweDRiOTU3ZDA1LCAweGRkN2ZkZmEwLCAweGVkZGVmMmQ2LCAweGRhZmY0ZjU0LCAweGRlYTllOWE4LCAweGI0ZjUxYTdlLAorCTB4MTI3OGM3N2MsIDB4NmFmZjRmNGIsIDB4N2E5ODkxNzcsIDB4ZDRjNzlmNGEsIDB4ZTIxYjdiNTMsIDB4ZmQ5NGZmZjgsCisJMHgyODk3ZjhkNCwgMHhkOWE3ZjllYiwgMHg2OGY4OWVjMywgMHg0YTJmODdiNCwgMHg2OGQzZjIyYSwgMHg2MWRmZTkwZiwKKwkweDNmOGQxYjkyLCAweGRlMWE3NzBkLCAweDc1NWQ3ZTJhLCAweDMwOWRkODA1LCAweDg1ZGMzNTJlLCAweDJlZTFhOTcxLAorCTB4ZTNhYjdlMmEsIDB4Y2ZmY2IxOWYsIDB4NzRhMjZiMTAsIDB4NGZkNGI3Y2QsIDB4YTU4NDc5ODEsIDB4MmJiY2UwOGIsCisJMHhlYjg4OTY3ZiwgMHgwNDhiOTZhNiwgMHhjODgwYmVmNSwgMHg3ZGYwNmZiOCwgMHhmMDc4Y2Q1MywgMHhmZGZjYTc0MywKKwkweDUyZjdiM2I2LCAweGJmMTNlNzdhLCAweGViZTVkNmNjLCAweGJmZWJmNDY0LCAweGM5YWJlYWZjLCAweDczYjczZmI0LAorCTB4ZWNhN2NlZmUsIDB4NjNjYTg5YmUsIDB4ZTI4NDI0YWUsIDB4MjRmMzlkMjgsIDB4ODI0ODRmZTIsIDB4M2U0MGFjZjgsCisJMHg3ZTYzYTA4ZSwgMHg3ZjBmM2ViOSwgMHhlYmJiNTI1MywgMHhhZmZkZWRlOSwgMHhhNmY5MGYzYiwgMHhiNjNlZGJlOSwKKwkweGE0MmVmNTc2LCAweDI5NzliMTQzLCAweDIwYTU0ZjEyLCAweGVmM2ZjYTU3LCAweDA0MzAyMTM4LCAweDU0OWI1MmVkLAorCTB4N2FhZjMxMTIsIDB4Yjc5ZGRiOWMsIDB4MGYxY2NkYTcsIDB4OWNmZTRiZmUsIDB4ZTcwYzA5NTEsIDB4ZWI3ZTcxODMsCisJMHhiY2ViZjZlNSwgMHhiYjAwNGQ1ZiwgMHgwYjM5YmU3ZSwgMHgwZmU3YWZlNywgMHhiNThmOGUyZCwgMHhlMzg1YjI2ZiwKKwkweDU3NWYwMGVjLCAweDc1MGJiNGU5LCAweDI3N2RjNTIyLCAweGM1ZmY0MmU5LCAweGFkOTJiNzZmLCAweGJlZmRkNjMxLAorCTB4ZTRmODliMmYsIDB4ZmU4ZGNiODMsIDB4NzM2ZTU0ODksIDB4ZDFlNzBlMzksIDB4MjI3MjEzNGYsIDB4YTZlYjM2ZTQsCisJMHg1YTIzOTI1MywgMHg3MWY3ZjAwZSwgMHhkYmViM2NjNCwgMHgwZDcwMTdmMiwgMHhiNmIxNmRmYywgMHg4OGM0OTYxNSwKKwkweGYzODRmZGQ3LCAweDVmMmJjYTZmLCAweDY5ZDVmZWUwLCAweGYwMTJmOWNkLCAweGQ0NWQ5YTcxLCAweGQ0MWUzOWM1LAorCTB4MTkyNDc1ZjQsIDB4Nzk0ZDc0MDksIDB4ZTNhM2Y5NjUsIDB4ODdiZDhlMjksIDB4NTdlYzE3NDQsIDB4NTM5ZjM2ZjUsCisJMHhiYmU2MzEzYywgMHhmZDQyN2U0NiwgMHg5MDFlNDdlMCwgMHgyM2FmYzg5ZCwgMHhlMDEyYzk3MiwgMHg1NmQ5OTFlYiwKKwkweGVmOTZlYjAyLCAweDU4YWFhZTJhLCAweGIzMzc0ZTc0LCAweDUyM2NjODc4LCAweGUxMzhkOWYyLCAweGU2ZmUzZWZmLAorCTB4MTUwZjg5Y2YsIDB4Yjc5YzdlNTAsIDB4ZDFjMGZkYjMsIDB4N2Y3YTYzZjgsIDB4NmEwNDI5ZGUsIDB4YzhhMWMwMDUsCisJMHgwMDQyMjlmMiwgMHhjNDg1NjRlMiwgMHgwMTY0ZThmMywgMHg0OGZhZmRmNSwgMHgyYzFmOTVmYiwgMHhkNWY2MDE3ZCwKKwkweDRlMGIzNzU0LCAweDk2YWYyZDEzLCAweGIxYzAxNGRhLCAweDAyNWRiODM3LCAweDk1NDZmY2ZmLCAweDIwZGUzMWI4LAorCTB4MTU5YThjZDUsIDB4MjAzYWQ3MTEsIDB4OTZhZmM4NGIsIDB4Mjc3ZWRkYmYsIDB4MmNjMmY3ZjAsIDB4ZGNiYTAxMzMsCisJMHg2MDM5Y2YyMywgMHgzY2QwYmZkYywgMHhhN2EwZjUxNiwgMHg0N2MxZmQ3ZSwgMHhhMDkzNGNhNiwgMHgzMGY4ODIxZSwKKwkweGM1MzBhMWUyLCAweDllY2ZjYmE2LCAweGE4YmEwNjRhLCAweGRiOThhNmRjLCAweDkwYzU3MWVlLCAweGUxODUzMmRmLAorCTB4Y2RmNmNmYWMsIDB4N2Q5OWZmZjIsIDB4MWJlZDRjOWIsIDB4NjkxY2I1YzMsIDB4NTEyYjQ2ZGYsIDB4MmM3ZmFkZjYsCisJMHg1NmIyYjZmYiwgMHg1OGI4MGZlZCwgMHgzZmFiMzdiOSwgMHg2YmU1NzVjOCwgMHhiMmM1ZmE0YiwgMHhkOGZhYWY2ZiwKKwkweGJlMzVmZGZjLCAweDIwNzNiYjBmLCAweDIzYTM2ZmI1LCAweDZhNDBkYmVjLCAweDZkYzQ2MmRmLCAweGZmY2QxNWQzLAorCTB4NTliZWM1ZWMsIDB4ZWZmNDc3ZmUsIDB4MzE2ZmIwNTUsIDB4ZDE1MjNiZmEsIDB4ZTZhMmI3ZGIsIDB4NDU2ZmI0NWEsCisJMHg3ZWRkNDUwMywgMHhjZjg1MmNhOCwgMHg2ZmI0N2FlNywgMHgxYjM2N2YwYiwgMHgxNmNiYjJmMywgMHg1N2MwM2YwMywKKwkweDcxYWY2ZmIwLCAweDgwZWQwNzNiLCAweDM4YTQ1YjlkLCAweGRhYmVmZGIxLCAweGRhYmVkMmI5LCAweDNlMjVmZmI5LAorCTB4ZTU2ZTc2NmIsIDB4MjM5ZTc2MjAsIDB4Y2VjYzg3MWEsIDB4NzY2NGNjYWQsIDB4NjY1ZWU1NmUsIDB4NjMwZTU2ZTcsCisJMHhkZjY4Y2U3NiwgMHgxYmVjYTIwYSwgMHgwNDdhYmVmYiwgMHg4YmU3MWVmZCwgMHg4M2I4YmY5OSwgMHg5NWNmMTc5NiwKKwkweDdlZmExNjVkLCAweDVmOWRhYWIxLCAweDY5MWYxOWE4LCAweDEyMjkxNmVmLCAweGRlY2EzOWYyLCAweDM5ZTFjZWI5LAorCTB4ZGRlY2RlOTAsIDB4ODZlZjYwNWIsIDB4MGExYjFkYTIsIDB4YzdjNDY0N2EsIDB4YmE2ZDQzMGQsIDB4YmU0NzcyZmQsCisJMHg0YmY1ZmY2OCwgMHgxMDdmMmZhMCwgMHhiZWZkOWU3MSwgMHhmNjhiY2Q4OSwgMHgxNjNlZDE3ZCwgMHhhNzM3NmVmNCwKKwkweGM5ODU1MWU3LCAweDQ3ZTdjM2IzLCAweDI0NzUzYTdiLCAweDQzYWFmN2QzLCAweDU0NGUzODcxLCAweGJmYWMwOTM3LAorCTB4MTUwMTBiZjcsIDB4NWRiZjgxYzYsIDB4OWRmMmY5YzIsIDB4Nzk3Y2Q5N2IsIDB4ODNmMTk5OGUsIDB4Y2VjODliZmMsCisJMHgyYzE2NTA1ZCwgMHhkY2MzYzA4YywgMHhkNzE4MTU0YiwgMHgwYjExMmI5YywgMHgwZTBiYWZmOCwgMHhmYzBhNzBkZCwKKwkweGQ2OTcwNWQ2LCAweDAwYmJiZmEzLCAweDg5YmVjMzllLCAweDMyZWI2ZGVkLCAweDJlNzdiYjY4LCAweGExZGU3MDE3LAorCTB4MTc5OGVmZWQsIDB4M2Y3YTk3YjYsIDB4ZWM3MzdlNzYsIDB4Mzg1MzFhN2QsIDB4MTNlZTUzM2QsIDB4YTcyZmIwMDIsCisJMHgyZjEwN2RiNywgMHgyMzliZmQ3MiwgMHhjOGJmMjFiNiwgMHhmOGNjNjI1YiwgMHg5ODVlZjZhNCwgMHg5N2M2MmU0ZiwKKwkweDZmY2M1NWFhLCAweGYyODlmMzBlLCAweGY5YTIxNTRkLCAweGJjNWQyNTQ0LCAweDJmOWJiNTMwLCAweGZkYTRlZTc3LAorCTB4YmZiOWU5NGQsIDB4ZjdhMmRmMWEsIDB4M2U3MWI4ZTEsIDB4ZDdiZjgwYjMsIDB4M2UzNDFmMTMsIDB4ZjM5ZmY1NDcsCisJMHhiOGE5ZmE5ZCwgMHg4ZmM4Yzc5ZiwgMHg1Y2NlY2Q0NiwgMHg1ZTgxNDY0MywgMHgzY2YyNmZiZSwgMHhmNDcwMWUzYSwKKwkweDk0MmY5NDlmLCAweDBkZTZkYmNlLCAweGQ5ZTc5ZGQzLCAweDkzNzJmOWM1LCAweDU0YjRkOGU3LCAweDZhNDhmODE1LAorCTB4OTdiNzY3MDAsIDB4NGE5MDNmNmYsIDB4M2I4Yjc3ZmIsIDB4ZTY0MjA3MzMsIDB4NzhhNmZmYjMsIDB4NjJkMGZlMjAsCisJMHhhODNiNDJlZCwgMHhjY2NkMzBlMSwgMHg4ZTU3Zjg3MCwgMHg5YzAzMjNjMywgMHgwOWJjNzBkMywgMHhhZmQ0NGUwYSwKKwkweGYxY2VjMTkwLCAweGNhNWU2NDdkLCAweDZmNWZkMDY3LCAweDE0NGY4ZjkwLCAweDg1OWZhMDlmLCAweDcyMDU3OGRhLAorCTB4YTliY2ZmYTEsIDB4NWJjNWM5OTksIDB4NmU1Y2EwMjMsIDB4ODEwNzVkMjYsIDB4ODIyOWQ1ZWYsIDB4MmFhYjQ0MmIsCisJMHgyMWZmNmUwYywgMHhkNTdhYjdlYywgMHg5ZTgzOWY0YSwgMHhjZGFlMGI5NywgMHhmNGY2MWQ4YywgMHg5NjM4OThkNCwKKwkweDM3MThlMTYyLCAweDliOGM0NjA5LCAweDI0YmRlMDBiLCAweGM2NjhiN2Q4LCAweDFlZmNlZmY2LCAweDNmNDY0N2IzLAorCTB4ZjViOThhNjUsIDB4ZTUzM2QwMDgsIDB4MDliMjY0ZGYsIDB4N2ZlODA2MWUsIDB4ZmEzMDM4MTEsIDB4ZjA3YTUxMzEsCisJMHhhNGZkZjczNSwgMHgyYWZkZmI3MiwgMHhmYzBlYzFjOCwgMHgxZmMwNTJlZSwgMHhmOGQ4ODZmMiwgMHgyNTdiOTVhMywKKwkweDRkZjIxYTc1LCAweDhlOTA0MzkzLCAweDFjOThlMzJmLCAweGM4ZGZhOTYwLCAweDNjYjQ1YmU3LCAweDZmZGUxZmUwLAorCTB4N2VmODY0MTYsIDB4MzI0Zjk1MDYsIDB4ZmE2YTlhMmQsIDB4Nzc4NmEwZTIsIDB4MmZjZDFhYjMsIDB4NDdhNDI3ODgsCisJMHg2ZmIwMGRkOCwgMHhkNTk2ZWI5MSwgMHg0ZjkxYjdjMSwgMHhlZWEyYWMzNywgMHgyN2NkMWE5OSwgMHgwNzYwM2U0ZCwKKwkweDI4YWZjNzJmLCAweDhmZWUwOWZkLCAweDliZWE3ZmI5LCAweDU5OWE0ZmVhLCAweGFjZmIzZmFmLCAweDg2OGZhZjVkLAorCTB4MDE1ZWRhMzgsIDB4NGU2OTBhZWQsIDB4ZjIwZmM1ZDQsIDB4ZDY1ZTZjY2MsIDB4Y2UyMGY1NjIsIDB4NWQ5MzVlYmIsCisJMHhmYjY4ZDU5YiwgMHgwYjk3MTU3MywgMHhjZjIyNTdjYywgMHgwZTg1NGRlZiwgMHhkM2IxYmFjMSwgMHhmYWQxM2U0YSwKKwkweDJjZTE4NDNkLCAweGQ1NzgzYzcyLCAweGY1Zjk0MWVhLCAweDVlMDRmZjU0LCAweDk4ZmU0ZjdmLCAweGI0MGVmZjk2LAorCTB4NTUxNmZiMDcsIDB4ZjFjNjdiN2QsIDB4ZjUyNzhiNDgsIDB4NjY2OWFmZDYsIDB4NjliZTNmNjYsIDB4YmU3NmI0YmYsCisJMHg5NzgzYmFlZSwgMHg0ZGZjNjJiNCwgMHgyY2Q4N2Y1YiwgMHhjMzJlN2U3YSwgMHhkMDQ4YjhmYywgMHhjYTUwNzNhZCwKKwkweDlmZjJmZDcxLCAweGU1NThmZjUwLCAweGZjNDNmNTMyLCAweGZjZjk0NDI4LCAweDMxYTdiNmVhLCAweGY5ZjY3ZDVlLAorCTB4ZmU4MzM3NjMsIDB4NDhhZGY4YWMsIDB4M2E5ZjU0MmMsIDB4MTA5M2M1YjYsIDB4ODBhMjA3ZGIsIDB4MjRkMTUwOWYsCisJMHg5MTE2N2FlMiwgMHgyMzMzYjk0MiwgMHhkNjQyMGNmYywgMHgxNGJjN2UzMCwgMHg2MmE3NzY4ZiwgMHg0YzUwMzk4NywKKwkweGY1ZDhhZmJmLCAweGRkYzQzNjQ5LCAweGY2NjAxZTNhLCAweGM3M2NmZmNmLCAweDFiMmRiZmEzLCAweDI0MmJmYmQ2LAorCTB4OTQ2ZjhlYjYsIDB4OWYxY2JkY2YsIDB4ZTZkYjc2NjcsIDB4MWExNmZkODIsIDB4OGFkNzc5ZDgsIDB4MzliMjM5YzYsCisJMHg2NTUwY2UyMiwgMHg3YjVjNTk5NiwgMHg1OWY3MGRiNywgMHg3MDEzOWZmYiwgMHgxN2QwMzI5ZiwgMHhkYjUyY2U3OSwKKwkweDM5ZTY3OWZmLCAweDgyMmI5NzY2LCAweGNkY2UwMDcyLCAweGVmNmMzNDU2LCAweGM1NzgzODgwLCAweGFmZmEzMzUxLAorCTB4MGE3Mzg2ZGUsIDB4NWY1M2E3ZjgsIDB4MjNmZDAxN2EsIDB4YzVkNDUwNmYsIDB4OGZlMmEzNDEsIDB4MGNjODYyMGQsCisJMHgyYWE2YjNmMSwgMHg3ZjM0MDNiNCwgMHhiMThkZjMwYywgMHhjNWJkZjBlMywgMHhiNGJjNTZjOSwgMHhiMjlmOTc3NywKKwkweGNmY2JjNTcwLCAweDZjZGNmMDNhLCAweGM2MDc1NmViLCAweDFmMmUxYjIxLCAweDM3OGE4ZmZmLCAweGQ5NzQzZTM2LAorCTB4OGU2OWUzNzgsIDB4ZjU5OTVmOGYsIDB4MjFhNDM1ZWIsIDB4OTQ5MGUzMTksIDB4MTg5MmRjYmUsIDB4ZWUzMDhiNzEsCisJMHgyOWVjZjg1ZiwgMHhiMzNiMGY1OCwgMHgwMTRmYWZlMywgMHhiOGZmOTViZCwgMHhlMDdkZDRmMCwgMHgzYWIzZWQ4ZiwKKwkweDNlZjZiYzYxLCAweDEzZDcwNDdmLCAweDczNzZlZmI0LCAweGVlNzhlZjNkLCAweGU5ODc1YzU5LCAweDA1ZDlhM2Y4LAorCTB4M2RlYzc1YjUsIDB4MjNkNjE4MzEsIDB4OTE3ZmI2M2EsIDB4NTVkYjcxMGEsIDB4M2NlM2E3N2IsIDB4YTljZWQ1NmQsCisJMHg3OThjNDlmZCwgMHg2ZTAyOTY4MCwgMHgwNzU4N2QwMywgMHhhNWFiY2EzMiwgMHhkMDMwNjVhOSwgMHgxYmNhOTY3OSwKKwkweGZjNzBiNjVjLCAweGM1OGFiMWI4LCAweDM3MWU1NWUzLCAweGJkN2IxNmRlLCAweGRjNGUyYTJkLCAweGViOTZmMzM0LAorCTB4OTI2ZWZjNjAsIDB4NDNlOTJhNWQsIDB4OTUzMGY4YmMsIDB4YzgzZWU4ZTMsIDB4OWE0M2RiNmYsIDB4YmYyOThmYmQsCisJMHgyYTBmZjBiMywgMHhmMjBkZjdhNywgMHhjOTY5YWNmYiwgMHhiMjg0OWVhZiwgMHhlMzFlZTRhNiwgMHhmMDNlYTFjNSwKKwkweGRiY2Y1YjRkLCAweDZjN2Y3NjYyLCAweGYxZDliZDA2LCAweDgzY2Y4YzZiLCAweDgzNWNlOGRjLCAweGQ5ZjBiYzc0LAorCTB4OWNiMzg4NjAsIDB4YzJlZWJiOTQsIDB4Y2Q3YjMzZmQsIDB4NjJhYTJmYjgsIDB4M2ZhOGZiZWYsIDB4YzZkZjNiMWQsCisJMHhkN2MyMzJmNSwgMHhmODQ4M2FkNSwgMHhmMDgzYWQ4ZiwgMHg0Yjc3OWMzOSwgMHg3MzMzOGIzYywgMHg1YTFjNDNmZSwKKwkweDFlNzNlMDc1LCAweGQ2Mzg2NjZmLCAweGM1M2RkMGUyLCAweDZjMmRkMzlmLCAweGNlYjY5MTNmLCAweGNmZTViNTU4LAorCTB4ZjVjNDMxMGEsIDB4ZDM5MDNjODUsIDB4OGJhZWNiYjEsIDB4MDI3MDdjNmEsIDB4YWU0NDI2MWYsIDB4ZjM4ZWM0YTcsCisJMHhiOGRkZDc4NywgMHhlMDdlNDBiYywgMHg0YmQ3ODU3ZiwgMHhjNDIwN2U2OCwgMHhmYmMyMDNjZiwgMHhlODNkODYyNCwKKwkweDYxZDZjNGQ4LCAweGZiZDhlNDNhLCAweDk1ZjViNTBmLCAweDRmNDE4YjE0LCAweDU3NWI3ZDAzLCAweGFmZmU4ZGU5LAorCTB4MjYxOTFmY2IsIDB4ZjlhM2UzOWIsIDB4ZDhjYmU2NzQsIDB4NDU4MjdjNzYsIDB4NjFmYjc2ZjgsIDB4ZjVhODg1MmEsCisJMHhjZmFjMGI3ZiwgMHg2MDUzMWQzNywgMHg2MzhkYTFmZSwgMHhmMGNmN2Y1YSwgMHhlNzk5ZjI3OSwgMHhiMWVmM2M0NSwKKwkweGVkMDViMWFlLCAweDU0NWVkMWI4LCAweDM0MWYxNjEzLCAweGQzODMzYmQyLCAweGUzNjQxZDViLCAweGYxMWQ5OWM0LAorCTB4ZTdhZDNiMDEsIDB4MTFiYjJiY2MsIDB4OGVkYmQ1Y2YsIDB4ZGY1YTdlMjksIDB4OTU5Nzg2YzEsIDB4NTJmZDg4YjYsCisJMHgyMjA0NGUzMCwgMHhlMmYzM2ZlOCwgMHg3ZWI2NmNmZSwgMHhjNmU1ZTZjNCwgMHg3NmYwZTY3NiwgMHhkYmIxY2RiYywKKwkweGE3M2I2ZWYxLCAweGJmODU2NzZiLCAweDc3ZTc2MTUxLCAweDY5ZGVkZjJlLCAweGVhMDczZGM5LCAweDEzMmFkZDNiLAorCTB4YmE3ZmJmZDgsIDB4YzQwYTJjNTEsIDB4NDU5MjdmNjgsIDB4NGNmMmUyZDYsIDB4ODk3OGU4NmYsIDB4ZDllMzFkZTcsCisJMHg0OTMxNDZmOSwgMHg1NTdhZmY0MSwgMHg4NGQxZGU3YywgMHgxNTE1NDgxNCwgMHg2YTZiMTRlMiwgMHgzNWQyZmVkOSwKKwkweDgxYTU3N2RmLCAweGRlMjRkN2JjLCAweDc1NmRlYjg2LCAweDUzM2FmZTA2LCAweGJmMTBmOTljLCAweDE5MmI0ZTcwLAorCTB4ZGEzNTcwMDcsIDB4NDliNzQ0OWIsIDB4ZjhhYWZmNDcsIDB4MWU3MGZlYTIsIDB4YzdmNzJkN2YsIDB4ZjNjMmU0ODgsCisJMHhiMGEzYTI5NywgMHgzYTIzZmEwOCwgMHg4YzZiNGU0ZCwgMHg1ZWQ5MDVmNSwgMHg3YzExM2M0MiwgMHhmM2ZhOWQ5MSwKKwkweGIxY2JlNDkyLCAweGVkYTNkNDJhLCAweGI0YjRhOWEzLCAweGE3NDJjNDFlLCAweDRiMGFiNzFiLCAweGZjZGRlYzc5LAorCTB4NzdlYzRlNTksIDB4NGYzZTM2ZTcsIDB4OTlkNTEzNzAsIDB4YzE4M2Y2Y2EsIDB4MjNiOWQxYjgsIDB4YzY4YzliMjEsCisJMHhlMjliODkwZiwgMHgwYjlmYzZkMSwgMHgwN2VmZjZkYiwgMHg0MWQ2YjQ3YiwgMHhjZjU0ODlkYywgMHgzMTU1NTcyOCwKKwkweDhlOGRjZTBiLCAweDgwNTkwOGIxLCAweGZlNmY3M2QzLCAweDZkNmJkNjk2LCAweGQwZmU3MTE2LCAweDg1ZjZkNzY5LAorCTB4Y2Y0MTEzYmEsIDB4ZGMxMWU0NmMsIDB4ZmU1MDA3ZmYsIDB4NGU5YmI5MmEsIDB4MDI0MGJlZTMsIDB4ZGY3NmE0YWYsCisJMHhiNDVkMzEyYiwgMHhmY2U3YmNlMywgMHgxMDA3MTY0NiwgMHg5OGJmZDVjOSwgMHgyNDcwZTJjYywgMHhmMWYzZjQwMCwKKwkweGYzYTcwNTY0LCAweDdlZjBhNDNjLCAweDNhZTc4Mjk5LCAweDcyZjZiZDk2LCAweDM5MzA4ODZlLCAweGI5MmJmMjQ0LAorCTB4YjRiZTdmNDgsIDB4ODZjOGVhZGUsIDB4NzdlMjc5NzUsIDB4OTkzOWMyYjcsIDB4YmY1ZjVlMzIsIDB4NTNiOWZkMTIsCisJMHhkMDdlN2VhYSwgMHg0ZjVjMjVkMywgMHhmMGI0YmFmZiwgMHgzMmJmZDgxMCwgMHhlYmI0NTJjZiwgMHhjZmVhZTdmZCwKKwkweDU5ZjcxYWE1LCAweDJmYjBiZDIxLCAweDkzZGRlYThjLCAweGFiYmVmNDQyLCAweGQ2YzdlNmYyLCAweDdhMzk3Y2MxLAorCTB4MDExOTE1ZmYsIDB4NDgyYWM5ZmIsIDB4ZTdjZTBiOWMsIDB4OTdkMDY4YWMsIDB4NzliYjAzZWYsIDB4ZDg5M2IwMTUsCisJMHhlYmVmMTcyZiwgMHhjMzZkYmY5NSwgMHhkYzc5MzE3ZiwgMHgwYWViZjk2NSwgMHhlMmRiZmJjMSwgMHhlY2IyYWUzMSwKKwkweDlmNjhjNWI1LCAweGZlN2E2OWNjLCAweDdmM2Q1NTVhLCAweDdjOGMyMzZkLCAweGRlMzlmM2Q0LCAweDM2OWJlN2E1LAorCTB4Y2Y4OWVjZmYsIDB4ZjNmYTc5MDksIDB4NGIzZTQ2YmUsIDB4MDIxYmM3ODQsIDB4YjUxMTBlMmMsIDB4MDliODJkYmYsCisJMHhkOWYyMzZlOSwgMHgwYjc2ZDdjOCwgMHg3Y2UyZjc1ZiwgMHg5NjI1N2ZhNSwgMHg4MWIyNjY1NCwgMHg4NDI5NzRlZSwKKwkweGEzZDQ2MTdhLCAweDgwNDg3YjBjLCAweDA5NGEwZjdmLCAweGFlNTdlMmQ0LCAweDY5ZWZiNDc4LCAweDE5NDIzZmJjLAorCTB4N2EwNmNlZmIsIDB4MmViZDAyMjQsIDB4ZDEzODIzZDQsIDB4NDZkZTc2MDcsIDB4NWJiNjcwM2UsIDB4OTA5ZjU4NDEsCisJMHg1OWU5YWVhZiwgMHhmZTk0Zjc5ZSwgMHhmYTIyZDhmZSwgMHhlZmMwNDZkNSwgMHg3NjJiZDQ2OCwgMHgwNDg5Mzc2ZSwKKwkweDllODI2NGQ2LCAweDZlMzA5Y2JhLCAweDZhMmNmYTM3LCAweDlmZjcwNDk5LCAweDI4NmNiNTEwLCAweGM0ZTI3YmRjLAorCTB4MWY3Y2M3ZjQsIDB4ODI0OGU3NGEsIDB4NDMxYjgyZmIsIDB4M2VjMTUzMTcsIDB4ZWJhNzM4ZmQsIDB4ZGU3YmIwNjYsCisJMHhlYzA0YTQyNSwgMHg2YzcxY2RlMCwgMHhhNzk4YjI5ZSwgMHhkYzJhYjc3ZiwgMHhlZDdiNGVhZSwgMHg1OWJlZjg3YSwKKwkweDc4NWNlMTU2LCAweGNiNTZmMzY3LCAweDQ1MDdjODMwLCAweDliYzQ3ZmJjLCAweGI0MTU3NzU4LCAweDMzMmNkMWRmLAorCTB4ODEyY2NhYmEsIDB4ZDhiZjEwNjEsIDB4MWRiYjYzMmIsIDB4N2NmMTkzNjUsIDB4NmI2ZmQ4NjUsIDB4M2E0MGZiNjYsCisJMHgyYzcxM2Y5YiwgMHgxZGU3YjA4ZSwgMHgwNTVlOWZjMSwgMHg0YzI3YWNmMSwgMHgwYzlmZjdiMSwgMHhmZGY4OWFiNywKKwkweGZjNzBkZjM1LCAweDdmZGE4YzZkLCAweGY2Y2FkYzM3LCAweDA4NzhmZGM3LCAweGU5NzU0N2VkLCAweDMzMGUzZTc5LAorCTB4Y2I5NmI4N2QsIDB4NmY0YmY3ZjksIDB4NmNlZmZlYzAsIDB4NDcxODU0MTYsIDB4NmUzYmM1MGEsIDB4MzlmYjQ1MWMsCisJMHhlM2M0ODhmMSwgMHgzOTJlMmMzMCwgMHg5YmJmYmY4ZSwgMHgxZjgwZDJiOCwgMHgwMjIzYWYxMywgMHgzZmM0ZjNlOCwKKwkweDM1YjdkYzEyLCAweGNlMjk2NmFlLCAweGEwZWI3ZWFiLCAweDc1ODZjZjM4LCAweGIwNWI4YTUyLCAweGU4ZWM2NzczLAorCTB4OTU2ZjhmYmYsIDB4OWM0Y2I4NzQsIDB4Nzk4MTY5ZTYsIDB4MDRhMzg0ZTYsIDB4YTM4NGVkZWQsIDB4MTIzY2YyZmEsCisJMHgzNjlkYjExMCwgMHg0ZjZiZjNmZCwgMHg1NjA1ZjNlYSwgMHg0OTA3NmY4ZSwgMHhmODZmN2MwNSwgMHgzYWJhNDQ1MiwKKwkweDAxZWI4OGJiLCAweGQ5Njc2ZjVhLCAweGE2ZWZiYzAwLCAweGRhOWMyMmYzLCAweDYyOTdlOWE1LCAweDdlNzFhYzUxLAorCTB4ZjI4MWUwMjYsIDB4ZTA4NTA5ZWIsIDB4NTJjNGYyZjgsIDB4NWZlZmM2M2IsIDB4MDU3MTVhNTksIDB4N2Y5ZmViOGMsCisJMHhhYzQ1NzNjZiwgMHg3NjExZTA3MywgMHhhZmVkODEyOSwgMHhlMjUwMjc3MiwgMHgwYWQ3YWUyOSwgMHhlOTc1ZGY4YywKKwkweGViZjYzMTI1LCAweDcwZDYzODZiLCAweDdkMzllMWFkLCAweGQ2Mjc5YzY5LCAweGFkMGZjNGJlLCAweDU4MjkwZmNjLAorCTB4NjA1MDQyM2EsIDB4MjA0ZmI2NWUsIDB4MDc4ZWQ3YzAsIDB4MzczZDk3M2MsIDB4NjQwZjI3ZTMsIDB4ZTBkZTNkMDAsCisJMHgyZGIzZjQwNSwgMHg5NjNiODJjZCwgMHhlYWNhYjE5ZiwgMHgwN2JlZjM2MCwgMHgxZmIwYjVmYywgMHg5NGFhNWVlZiwKKwkweGFlN2IxZjYwLCAweGFiY2UwMzc3LCAweDJiYTA4NzZlLCAweDViYTk2NzdjLCAweDk3NzBlNzg4LCAweDg4NjZjODU4LAorCTB4ZTk3NTRiNjcsIDB4ZWUwM2M2YjcsIDB4NDc1OGNlYTcsIDB4YzRiMjdkZTksIDB4NDI3ZTcyODQsIDB4ZmVmZDIxNzYsCisJMHhiZTMwNDIyYSwgMHgwM2I1ZTNjMCwgMHgyMjliMjY2ZiwgMHhjMGZmMjNjZiwgMHg5NWIwZmY5YSwgMHhkNWIwZmJkNiwKKwkweGY2NDk3Mjg5LCAweGRmYTAwNGI4LCAweGU1ZmZkZmY1LCAweGJjZWViZDAwLCAweDBlMzk0NjY0LCAweGVkMWZmM2UwLAorCTB4NGY5Y2FkYmIsIDB4NmJkY2UzYTMsIDB4M2NhNGZmMDEsIDB4ZTVjM2Y1MDUsIDB4Yzk2NWE4NzEsIDB4ZTUwMTJmNzAsCisJMHg1NDc1OGM3YiwgMHhmMjRkMmZjZCwgMHhlOTQ2ZGI1MCwgMHhmMDliYjI0OSwgMHg3NmUyMmU3ZSwgMHhkZjZkNGVhYiwKKwkweDQ1ZWZlMTE5LCAweDA5MDkwM2U4LCAweDY5YTVmNjA0LCAweDE2Njg1NGY2LCAweGZmMTRmMTQyLCAweDEwZjYyY2UzLAorCTB4Y2E5MjMzY2MsIDB4MDkyOWJmNjksIDB4ZjU2MTYyNTYsIDB4YzI2NzRhYjUsIDB4OWY3MWFhZTcsIDB4MmU2NWM1M2IsCisJMHhiODIyNmUxYywgMHhkMjM2MGRhZiwgMHg5ZDlhZmQ0MiwgMHhkYWYzZWNkNSwgMHg2NmY2ODI0NCwgMHg2MDUyNjNlZCwKKwkweGEzNjdhZDBkLCAweGY4ODU2NmQ0LCAweDJkNWJhNjQ5LCAweDQ5NDRhZDgwLCAweGJkZTc4YTkyLCAweDdkMzM5NTA3LAorCTB4MzJmZDY1YjQsIDB4NTBhZmVjMzEsIDB4MGZmMzFmNjUsIDB4ZjVhYzQxNzEsIDB4ZmNjMzhmYmEsIDB4ZmMwMGJjZjIsCisJMHhmNWQ0M2VjYSwgMHgyZTM1YjgwYSwgMHg3NWNmNmIyYiwgMHg3OWZlODJjMCwgMHgzZjcwNmVkOCwgMHhiYjhmOTBhYywKKwkweGIxMzUzZjEzLCAweGViYTEwMmZkLCAweGI2OWRiZjcxLCAweDFiYjQ2NjhlLCAweDE1ZGUwZjU0LCAweDk1M2VhZjQxLAorCTB4NzVjZjllMDgsIDB4YjU3MmZmZDMsIDB4ZjYxMTc3MmQsIDB4Yjk5MzhmODMsIDB4ZjQxNjlhYzEsIDB4MmQ5MWM0ZGQsCisJMHg1ZjZiYzc4MCwgMHhhMjM4YmJjNywgMHgzNzg0YzhlYywgMHhkZTgwNmIzYywgMHg4YzNmNmE2ZiwgMHhhMjEzMTg3OCwKKwkweDMzZTVjOGZhLCAweDJhN2I4NTUyLCAweDk0M2NlMTljLCAweGZjZjk1YWI3LCAweDk0OWJkYjhlLCAweGQxZmQ3MWQyLAorCTB4MzMzOGU1YWYsIDB4NmJkMzU3ZjIsIDB4YWNlN2JlYTMsIDB4YjE5OGI1NzYsIDB4YzEzMjAwZDYsIDB4YmExMTBlZDgsCisJMHhjMGIzNTBlOSwgMHg4MjIxYmQxZSwgMHg0Zjk5ZGY3ZiwgMHhiYWU5NDJmMSwgMHhmYzBlZjQxNywgMHgxOTgxOGJmMywKKwkweGNkMGQ5YjgwLCAweDdlODJiMWRmLCAweGEzZjFlMzdjLCAweGIxMWQ3ZTk5LCAweGEyMjdmYWJmLCAweGY2Y2FjM2E3LAorCTB4MGY4MDNiODcsIDB4ZjIyZmZiZDUsIDB4NzI4NDIzZjEsIDB4ZWE5NWNiMGUsIDB4NDQzYzY0NDcsIDB4ZTcxMWJkYzMsCisJMHg4MWFjNWU5YSwgMHhmMGIyMzMwYiwgMHhmOTAxMWM3YywgMHgwYTIzNDI4OCwgMHgzYTM2NGNkNiwgMHg3ZjlhYWY4MSwKKwkweGNmZWMyNmJkLCAweDllYjllMjI2LCAweGRlZDY0ZTU1LCAweGNiZjM1OTFhLCAweGVmZTgxNjVkLCAweGZlODJmOGFhLAorCTB4ZjUxNzViOTcsIDB4OTdmM2EyNWUsIDB4NWUzMGYzODgsIDB4NjdlNzBiYTksIDB4MDkwYTRiZGUsIDB4N2UwYjdmMjQsCisJMHhiOWViNjkwNSwgMHhjNGE1N2UzYSwgMHgwNzU3ZTBjNSwgMHhmZmY4ZDFlOCwgMHg2ZDkzZmIyNywgMHg2YTgzY2ZlYywKKwkweDI1YWU3Zjc3LCAweDUxYjZkZjllLCAweDRmN2I5MGJiLCAweDA1YzMzYTdkLCAweDg5MTY5YzM5LCAweGQ5NWViZTBiLAorCTB4NTFlNzdlOTMsIDB4MmRkNzA2ZmQsIDB4N2EwZDlmNGEsIDB4ZWE5OWIxM2MsIDB4OGY1YTI5YjEsIDB4ZGUwOTcyNWQsCisJMHg2YmRhZTc1YiwgMHhkNDY3N2I0MywgMHg1ZmJjOGJlYiwgMHg3YmUzMWI1ZSwgMHgxMTk5ZTg4ZCwgMHg1MzcxZjMwNywKKwkweDVkYzA2MGQ3LCAweDhiOTI0YWI2LCAweDQxZDliMTI5LCAweGI2YWZhZDkxLCAweDkxYzZlYjI2LCAweDhmZGRmMWU4LAorCTB4MmZmMzUyNzYsIDB4ZjhkMmJmMzUsIDB4ZTRhZmQ4NWUsIDB4Y2YxNjg2ZTMsIDB4ZmYxNDgyMTQsIDB4YzdmN2RmYjQsCisJMHg1ZjAxZTY3OSwgMHhmY2Q5MzhkNywgMHg4MjlhMGUxMywgMHhhYjAzZmNiZiwgMHhjZmEwMGVlNywgMHgwNzEwZmI0NiwKKwkweDQyMjMxYWViLCAweDEyNWUyYzk5LCAweDRmNWJlOWQyLCAweGU4MzM2NWZhLCAweGMyNDg2MzRmLCAweGM3NGZjYzcxLAorCTB4Y2Y0MjYxYjEsIDB4NGI4YmY0ZjQsIDB4YWI1MmY0NjQsIDB4YzBjYTdlMDIsIDB4YWIxYWMyNWMsIDB4N2JhZmI4MjYsCisJMHg0N2JiMzY2MCwgMHhiYjBlNjA2NiwgMHhlM2RmZjFmNywgMHg3ZGNjN2FkOCwgMHhkMGRjNmM3MSwgMHg0YjU4MWZkMiwKKwkweGM5N2U4MWVlLCAweDczOWJmMTEyLCAweDQwZGQzOWJlLCAweGVmMGZjNDJhLCAweDBkZGY3MzhmLCAweGI5MTRiMGZjLAorCTB4NGUxOTFmYjEsIDB4ZGUyODEyZTIsIDB4MDE0NmE0MzIsIDB4NTUyNDM3ZjYsIDB4MWI4YjAyYWEsIDB4NDBlZTM2MTIsCisJMHgyOGNiZWI0YSwgMHhkYzYxZjM1NiwgMHgxNmI2YTBjYSwgMHhjZDE5MjBlMiwgMHg2Y2Y1Y2ZiMSwgMHg1ZGJmOTM4OCwKKwkweGVhMjlhYmJjLCAweDM4ODZjYTNjLCAweDU0MWY2ZmU2LCAweDhiOTM3ZjY4LCAweDcwOTQ3OWQ5LCAweDBmOTI4NmRjLAorCTB4YmY4OGVkZmMsIDB4ZjFkYjNiMGQsIDB4ZjUwZjViMTksIDB4MWIzZTMyMjcsIDB4MzAyMDVmZTcsIDB4ZjNjNDk3ZTgsCisJMHg2NDg4NTQzZiwgMHg5MWY5YzI0ZCwgMHg5OWRmMDRkZiwgMHhiMjNmMzgyYywgMHhkODIzNTcxMSwgMHg1OGUyOTdjZiwKKwkweGUwOWQ3NTVjLCAweDlmZjkwZjVhLCAweGI4MTY1ZDQ4LCAweGZmYzM0NzZmLCAweGVhZGYyNzhmLCAweDhlMmJlODkyLAorCTB4YzM2N2NlZWIsIDB4YzNlYTk1OWMsIDB4OGVhZjIwZjMsIDB4YWY4N2U3YzksIDB4MGQ3NDFlYzUsIDB4OGI3Mzc4NjYsCisJMHg5YWVmZmRiYSwgMHg0ZWIyODJkYywgMHg4Nzg4NTY2ZSwgMHg3OGViZGE0NCwgMHgxZGY3ZTcwNSwgMHhlNjBiOWM0MiwKKwkweDA1Y2IxZDQzLCAweGUxNjBhNzQ2LCAweDdkMjQwM2U3LCAweDQzZGI4NjljLCAweDI3NzgxYzZkLCAweGI3ZTkxMzJlLAorCTB4YmMxOGZmMTEsIDB4YjJlMmNjMWYsIDB4ZmQxYTNkMDAsIDB4ODZhNDczZTEsIDB4NzNjNjllNzMsIDB4ZTE1OTY5YTAsCisJMHhlZTNhNGRiOCwgMHhlMDUxMmQ5MywgMHhiZTcyMmY4ZSwgMHg5N2ZlODZkOSwgMHhkZmY0YzFkNywgMHg2MGZlODc4OCwKKwkweDZlNzMyZTNjLCAweDE1YWJmMjkyLCAweGFlNWZkYmU0LCAweGRiN2IwNDQ5LCAweDBlZTNjZWZmLCAweDBmOTFhZjkwLAorCTB4Y2M3ZjgyOWQsIDB4ZmFkZjU4NDEsIDB4OWY3MzFjODMsIDB4YTVhNjk2ODgsIDB4N2YwNTI4MGQsIDB4MGQzZDJkMzQsCisJMHhiZDc5ZWQ1MywgMHgwNzE5OGE1ZCwgMHhlZWY1Y2QzYywgMHg5ZWI1ZTMxYiwgMHhjM2YzMGM1OCwgMHhiMzlmZDBkMywKKwkweDczZGU3NzllLCAweDYxNzdiYWEzLCAweDhlM2ViYzdjLCAweGQxNWViYmYxLCAweDgwMjZhOGY4LCAweDVkZTc3NTllLAorCTB4OTI3ZWVjMDksIDB4OTBmZjc2NDQsIDB4ODM3M2M5OTMsIDB4NDkyYTUyY2YsIDB4ZDFiOWVmOTEsIDB4ZGM0N2U5MWYsCisJMHgxMTgxZTYzMywgMHhhZDkzMjBkOCwgMHhiZjE2NmI4OCwgMHg1MDY1Y2VkMSwgMHg5N2U0Yzc0MywgMHhiOWZhZThjOCwKKwkweGVjMjk0YzZmLCAweGNjNmQ5MTlmLCAweDMwZGM1ZDJlLCAweDI1NGJkYjFkLCAweDUzODc1ODBmLCAweDMxMmQyZWJlLAorCTB4NzNhZTIwYjksIDB4MWM5ZmQxNzYsIDB4NTE3YzE0NzAsIDB4ZTAyZTZiNDYsIDB4OTFlODg4ZmQsIDB4ZDQzMWUzNmQsCisJMHg2NWI3ZjM4ZCwgMHg4ODQwOTU3MywgMHg5ZWE1MmE0MiwgMHg5NzI2MjQxYSwgMHhiOGVlYjgxOSwgMHhmZjczMTRkMCwKKwkweGU2YzZkZGIzLCAweDRlNzFjZGRmLCAweDA2ZDJkMzRjLCAweDhkOGQ5Njk3LCAweDM5NDQwZmNjLCAweDdhYTQ3ODY5LAorCTB4YWUzNjVlOTgsIDB4YzUzMDljZmIsIDB4NmZiNDBhNDcsIDB4OTk0ZWE3ZDQsIDB4NDBkZDYxMDQsIDB4OWMyOTg3YjMsCisJMHhkNjNkOWFmZiwgMHhmNDA1MjFmNCwgMHg0YjAxZDYwYywgMHhlNGQ0N2RhOCwgMHg5YWJmODQzOSwgMHhmYzRhZjE4YSwKKwkweGZkNWY5YTEzLCAweDhlMDNlNjAyLCAweGRlZDAwYWViLCAweDhmNWZmZDUxLCAweGQ5ODIzMmZhLCAweGQzZDgyYjZmLAorCTB4ZTc2NTM4ODgsIDB4YzEwN2Y3ZGUsIDB4ZGY4N2RmZmEsIDB4ZWIwZjEwYmYsIDB4YmE5MTdmNDAsIDB4OWU3ZWMxZTIsCisJMHg3OGRkZmZiYywgMHhlMWY0MzczOCwgMHg3MTVlMmNmZCwgMHgzNTFlNjE5NywgMHhmYWVjYzZjMSwgMHg2YzkyYjZhMywKKwkweGRmMDJkN2U4LCAweDIyN2FlNzdmLCAweGIzNTY0OTcwLCAweDAxZTU4ZDc1LCAweDVjOWU3MGQxLCAweDU1NGYyZjdmLAorCTB4OWVlMWIyNjMsIDB4NWJkNjNmMWUsIDB4MzJlN2VmYzUsIDB4Y2I5MmExY2EsIDB4NGRiNmY5NjEsIDB4ZWQwYTg2NGEsCisJMHg3ZWI2ZGM3YiwgMHhhMDhmNmU3MCwgMHgxNGQ5M2NiZCwgMHg4ZDExZjM4ZiwgMHhjNmRiNDU5ZSwgMHhmYTc3MzAyOCwKKwkweGFmOTliMzRiLCAweDZjY2FiNzdmLCAweGMzMTc3MDVjLCAweGYzODc5NjdhLCAweGMxZTc0OGNkLCAweDZmYWMzNjdkLAorCTB4ZmVkOGNmYzksIDB4YWRiNDg1OTQsIDB4N2FiZWQ0ZDUsIDB4MGI3OWQ5OWEsIDB4N2M5NjNmNjMsIDB4YTdmNjE2YTgsCisJMHg5MGYyNWJjMiwgMHg3ODYyZjM4MCwgMHg0ZTNhN2VmZiwgMHg4ODNmNTY3OSwgMHg3ZWM2NWVlYiwgMHgzMWNkZWYxYSwKKwkweGU2ZDU1ZjllLCAweGZjYjhjYjUzLCAweGY1MDc4OGNiLCAweDZiNWNlYTJmLCAweDM2OWY1YjMzLCAweDFmY2VmZmM2LAorCTB4ZmY2MWIyY2EsIDB4OTFmZTNjNmQsIDB4NzljMDI2NGIsIDB4ODY4NzFkZTgsIDB4M2VlZTVjMjQsIDB4MWVmYzMzZTUsCisJMHgxYTU3YjgyNiwgMHg4MjNlOTNkMiwgMHg2NTRkYjY2OSwgMHhiZjM0NjRmNywgMHhhYWUwMmY3ZCwgMHhlZjFkYjgzYSwKKwkweGY2YmFmYjE5LCAweDk0ZjlhYWE2LCAweDZiMzBmNjAzLCAweDkxZmE4Nzc2LCAweGE0M2YwMWFiLCAweDk3ZjlkMDRjLAorCTB4MjgyZTliZDUsIDB4ZjhjYmJlNmMsIDB4N2U3ZjA3NzAsIDB4MWIzN2Y0MDcsIDB4M2ZhYjU5ZjYsIDB4N2NlNTRjOWEsCisJMHgzMTdjYTU0NywgMHhiZjMyMWVmMiwgMHhhNmVlN2Y0ZCwgMHhmYWQ1ZmRhZiwgMHgyYjViZjVhOSwgMHhkMWZiZTJhZiwKKwkweGY4NjlkZjhjLCAweDJjNzhlNmNmLCAweDZlYmE1MmRiLCAweDlhZDE2NTAwLCAweGYzMDYyN2JkLCAweDRlNzg2OGYzLAorCTB4MTE5N2MzNDcsIDB4NDk0OGNiM2YsIDB4ODExMGJhNjEsIDB4YjE0N2U2OTMsIDB4Y2IzYzlhNWYsIDB4ZmVmMjE2ZWEsCisJMHhiYWY4ZDNmYiwgMHg4ZmM0MWE1ZSwgMHgxMThkYzM3YSwgMHhkYjcyMWQxZiwgMHgyMzY3ZDA2MCwgMHhiODdhM2EzZSwKKwkweDM2MjdlNDVmLCAweGE5OTQyN2U2LCAweDY3ODg0MmVlLCAweDlkNzYzNzUxLCAweDM5NGZjMjMzLCAweGJjMWRkNTI5LAorCTB4MGI2Y2Y0MGYsIDB4ZjhjNDc5YzMsIDB4ZDdiOTljY2IsIDB4NTdjZjFjNjUsIDB4ZTFmZGFiYzYsIDB4ZGI5NDNkM2UsCisJMHg2MDE3ZDg0NCwgMHg1YTdiYzNmNiwgMHhiNzNlZWQzYiwgMHg3YzA0YTg2YiwgMHhiNGY0YzIyZiwgMHg3NDM1YzRhZiwKKwkweGQyZjk3NzY4LCAweGMwMzgyZTI3LCAweDQxMWNlZThmLCAweDExZDM4ZTMwLCAweDc3ZjdhN2FmLCAweGY5ZTkxMTM2LAorCTB4YTU0Mzk3MWQsIDB4M2Y4ZmZhZDQsIDB4ZDJkYThkODMsIDB4ZGExZGZiOGEsIDB4YTA3MWU0YmYsIDB4YjE0NWNkMmYsCisJMHhmZTI3ZjlmYSwgMHg4NmY3ZTExZCwgMHg0Y2Y1YzVkZCwgMHhlMDJjOTc5YiwgMHg5OWFiYmI3MiwgMHhkYTJmNjdhZCwKKwkweDMwZjI4YTU4LCAweDQzN2FkN2VlLCAweGQwNjYxNjcwLCAweDYzOGQzY2FhLCAweDUxYmY5MDE0LCAweGRmNWM0YjNlLAorCTB4NTE2MDdkYzEsIDB4ZjA4ZjIyNzIsIDB4ZGMxZTAxN2QsIDB4MmY1NjUzYTcsIDB4MjhjM2RjNjIsIDB4OTNiYjdjYmYsCisJMHg2YjU3YTM5ZCwgMHg0MmI3MWU3MCwgMHg3OTBlYmQ4YSwgMHhiNWY0ZGRhNSwgMHhjN2VjNjNmYSwgMHhlZDAxMjZjMiwKKwkweDY1ZmU5MWE0LCAweDBkZDc2YTViLCAweGQ2N2ZkMDIwLCAweDg0N2VlOGJmLCAweGUyNWRhMjA2LCAweDU1ZmFkNGZkLAorCTB4ZmY3ODVjNDYsIDB4NTBmYWQ0NDAsIDB4NzIyNGY1ZGIsIDB4ZTZmMmY1M2YsIDB4YmYyZmI4YzUsIDB4YjA5ZmY2OWEsCisJMHg4NWM2MTIzOCwgMHg3YTM1ZmEzNCwgMHgxNDI4ZmQ4ZCwgMHg4ODE2YzhjZiwgMHg1YzE2YWVlMywgMHhlZmEzOWY2MCwKKwkweGVlZWI3MzI3LCAweGIwZDg1YzNmLCAweGFmYzgyMDdmLCAweDY2ZmI2MjVkLCAweGNlMDJmZGRiLCAweDIwM2YzYjBiLAorCTB4YmQ2MDdkNmMsIDB4M2Q2OWViODAsIDB4ZWQ5OWFmY2EsIDB4OGU1OWVhMDcsIDB4ZTdkYzBhMzUsIDB4ODg1MWI2NTcsCisJMHhmNTY1YzcyOSwgMHgxMWExYWVmOSwgMHg2MDc5NmE3NiwgMHg4ZWE4NmI4NiwgMHgxZmRjNDZkZSwgMHg1NGExYTJiMiwKKwkweDlkODA3Y2Y3LCAweGZkYjg5M2M3LCAweDQ4ZGY0ZGVlLCAweDM4Y2M2MjRkLCAweDlhNWZhNjkzLCAweDk3ZmE2OWJlLAorCTB4M2NkOTU3NmYsIDB4Y2MxYzBhNDcsIDB4ZmViYjA0YzgsIDB4YTg0YmNlMTgsIDB4Y2VkYWJlNWQsIDB4ZDFlNjA3ZDcsCisJMHhiODlmYWE1NywgMHg1ODFmNWJhMCwgMHhiM2U0Yzc5MiwgMHhlN2M2MmM0NCwgMHhjYTU3ZDkzZCwgMHgxZTdkOWQwNywKKwkweDdmZWZkNzY3LCAweGQxZmRiNmY4LCAweDg1ZTlhMWZhLCAweDVlYTMzZmQ2LCAweGM1YWZmOTE4LCAweDMwNzI4Y2Q1LAorCTB4ODJlODFmZjIsIDB4N2IxYmMxZjksIDB4MDQwNzgxNmQsIDB4YTc0Njc3ZDAsIDB4ZTkxNWFmN2YsIDB4NzAyYjQ4ZWMsCisJMHgzZmM4MzljMSwgMHhjZTk0MDdjMCwgMHgzMWRiZjRlYSwgMHg5NDk2MjM1ZiwgMHhjNzVlNzFkYSwgMHhmYWUzNGRlNywKKwkweGUxYzgzZjE2LCAweGFiNGVkNjdlLCAweDQ3M2IyYzdiLCAweGI4MGM5MjU0LCAweDM2ZGI1Mjk4LCAweGY4YTRlMmQzLAorCTB4MjE3NDY0N2MsIDB4ZTUzYTJiZGMsIDB4MTA5OWI2YjEsIDB4YzhmMjVlZmEsIDB4NWZiODQyOTgsIDB4YjZkNmNhN2UsCisJMHhlYTJlMmQ3NywgMHgyZDhlZDVkNywgMHg1N2U1ZmI4NCwgMHhmNjgwZGQ4MCwgMHgxMGRiOTYwNywgMHg4OWU1M2Q1NywKKwkweDk1NzlmMmU3LCAweDVjY2UzZmJkLCAweGNiZGQ5ZjMyLCAweDI5MmJjYWNjLCAweDNjNzQyZDhmLCAweGZjM2MzY2FiLAorCTB4OTU5ZmEwZjcsIDB4MTA0NWM1YWQsIDB4ODg4NGE5YjcsIDB4YWFjZjFkMzcsIDB4MmQ5MDhlZGMsIDB4OTNlNzhkOWIsCisJMHg2Y2RiN2JlOCwgMHhmMDc2NTU5ZSwgMHhjNWFkMmVlYiwgMHhiMGYyYWRmMSwgMHgwZTQ0ZmE4NCwgMHg0NGE4YjhiMSwKKwkweGRmYTU2YWZiLCAweDdlYTM4ZGFkLCAweGRhZWZlNTJmLCAweGU2MGI4YjI0LCAweDFmYjlmNGFmLCAweDkzNmJiNWU2LAorCTB4ZjExYWFhZGMsIDB4N2MxZjkzNWMsIDB4MzVhYzc0MDcsIDB4ZmRmYjc1YjEsIDB4Njg0ZjBkYWYsIDB4YmY3OGNjYmIsCisJMHhjMzI2NDdkZiwgMHg2N2M1YTQzYywgMHg5ZTU4ZDRjMSwgMHg3Y2YxMzhhZiwgMHhjNTg5YmU0NCwgMHhiZmU1OGMzNSwKKwkweDUxMmNlY2QyLCAweGQ1MTcwMDMzLCAweGFmMTYxNDg3LCAweDRmZTA3ZmE2LCAweDE3YTYxMTU2LCAweGViOWQ4NGQ1LAorCTB4ZjA0YzNhYWEsIDB4YTFmNTRiMWMsIDB4MDJjNzNjNDIsIDB4ZDYzZmZjZmIsIDB4NzM1ZmYwZTEsIDB4NTcxYmE1OGUsCisJMHg5MjA1NGY4YywgMHhjMDhhNTkzMCwgMHg1NWJiMzRmNSwgMHg5YmZiMTc5NywgMHg4ODdmNDA0NiwgMHg3MzgyZTcxOCwKKwkweGE5ODY2MjE4LCAweGJmZWQwNzY2LCAweDI5NGQwNTc4LCAweDRiYTcyNDNmLCAweGVhNWFmYjg0LCAweGUxMTE0ZWE2LAorCTB4MzIzNWE5YmUsIDB4NjI2MjNmZGYsIDB4ZjZiNWNjZTcsIDB4YjQ3ZjM4OWEsIDB4NjRiZGI0ZjQsIDB4ZWNmZGM4MDcsCisJMHgzNmI5YWQ1YiwgMHhmMzgxN2ViNiwgMHg2YmJmYWQ2MSwgMHg2MDExMzcwNCwgMHhlMDgwNzVkZSwgMHgxNDljODBmOSwKKwkweGIzZmMwMmQyLCAweGUwMWU3NzExLCAweDEyN2IzZGVkLCAweDM3NWIzN2U3LCAweDkwMTk3ZmE2LCAweDk3YTZjY2JhLAorCTB4NTdmNzhhNTUsIDB4ZmE4NDU5MWYsIDB4ZGQzMDRhZTAsIDB4NmZmMzQ5OTMsIDB4N2NiMTk3ZDksIDB4MjY0MmU5ODYsCisJMHhmNmRiZjA4NSwgMHhjNmJmOTY3MiwgMHhjZDA4NjE3NCwgMHhjZTVmNmJiZiwgMHg0OWMwYjBmMiwgMHhmNjIzYjYwNywKKwkweDQ4ZmY0MjhhLCAweDdkZTM4NzY4LCAweGMwMWFmYjliLCAweGYxNjI2NGI3LCAweDA1MTVlOTE3LCAweDdkYjQ1M2Q3LAorCTB4NDRlOTZiMjEsIDB4MWVmOGYwMGIsIDB4YTc4ODRkZDgsIDB4ZGFmYzE2ZDQsIDB4MDJlYWYxMDYsIDB4M2RmYjBhYjcsCisJMHg4MzdiZjMzNiwgMHhmMWFhNjliZSwgMHg3MDk5YjQ1NSwgMHhmMDI5MDNmZSwgMHg0ZmNlNDNmZiwgMHhjOWE0MmU0ZCwKKwkweDhiZWMwZDdkLCAweDZiZWU4ZDI1LCAweGI0ZWQxZDYwLCAweGY2MDZkM2RkLCAweGFkMWJlYzY2LCAweDM3N2VjMDUzLAorCTB4NWNhN2YzYmQsIDB4MGFmYzlmYmMsIDB4MzdkOGNmNTYsIDB4ZjY5MDljZTgsIDB4MDY2ZmVjZTcsIDB4OGY1YzhhNmQsCisJMHhmZmNmNmQzZSwgMHg2MmEzYmUxNCwgMHg1MDU0ZmY0MCwgMHhhYTBlZTQ5ZCwgMHg0NGRjNmI4NywgMHhiZTYwYjI1NSwKKwkweDM2MmY5ZmFjLCAweGI2OWY2NjExLCAweDgyY2U0YWQ5LCAweDEwYzBjOTVjLCAweGY2NDU1YjhlLCAweDZiYzg0ZTkyLAorCTB4MjZiNDljZjYsIDB4OWI1ZjY5ZjUsIDB4ODQ1YWJkOTIsIDB4MjMyOTM5NzEsIDB4ZDgxMTc0NzgsIDB4N2JiMWRmZmYsCisJMHgxYmI3MDQzZCwgMHgxNGJlNzNmNywgMHhlZDhjZDdiZSwgMHhmZWMxYjEwZiwgMHgxNzdmZDAxMCwgMHhmMmE3ZjM0OSwKKwkweDJmOGIxN2Y4LCAweDg4ZGM5NDkzLCAweDA3ZWYzMDc5LCAweGVjMWE3ZWZkLCAweDYzNjA5ZjM3LCAweGJmNjgwN2ZiLAorCTB4NjNhYmIwNDQsIDB4NThlOThhODgsIDB4ODE2NTY3ODgsIDB4ZGY5ODNkMjgsIDB4ZGU4ZjFhNDMsIDB4ZGM3ZmViNDcsCisJMHg5NjQ5ZTJjYSwgMHgwZjhiYTIwNiwgMHgzOGIzYzc2NiwgMHg4YjA3NGNjYiwgMHg4ZGM5YzYwZiwgMHgxMGZmODJiNywKKwkweGMxMzg4ZTc3LCAweGE1ZmNlODdmLCAweDIyZmVlMTIyLCAweGFlMjM3OWM5LCAweDExMzQxZDhmLCAweDM5NTlmN2EwLAorCTB4OTlmNTg0ZTAsIDB4NzUyNGFiYWUsIDB4YWZhZWU5MzMsIDB4YWI1YmNiOTMsIDB4YmQ0NTcxZjcsIDB4NzM3MmUyMGEsCisJMHg3ZDNmY2MxZCwgMHg3ZWUwOWYzNiwgMHg0YTUzYWVlOCwgMHg5MzRkZDYwMCwgMHg5MTM1MmMzMiwgMHhmOTJiOWZmMSwKKwkweDBiMzkwZjc3LCAweGZlMjFlMzMyLCAweDQwOGUzN2JjLCAweGM1ZjYxM2ZiLCAweGJmMGU0MDk5LCAweDA1NjM5NmRlLAorCTB4M2MwNGJjM2MsIDB4MzI0ODdjYTIsIDB4ZmE4NmVmM2IsIDB4N2E1MDJlOTIsIDB4ZGIzOWYxMzMsIDB4NjNhOTJmMjcsCisJMHgyNzdmMjgxMiwgMHhlMTU3NjBkZCwgMHhhZDY3YTliZSwgMHg3ZWUwMzc4ZCwgMHg3ODRjMTdkMCwgMHg4YTRiZWViZiwKKwkweDJmZjIxNGFiLCAweDYwOWQ1NzlkLCAweDZjY2Q5ZjdmLCAweGJjZmVjMzhjLCAweGJjZmVjMjYwLCAweGY1NzVkNzE0LAorCTB4YzNmNzRhNGEsIDB4NGE3YzU4MjMsIDB4ZWMwOTExYjIsIDB4NTAyYTY0YjIsIDB4NzNjZmE2ZWYsIDB4NDkzY2Q5ZTMsCisJMHhlM2NiZDNiMywgMHgyZTNjZmU5OSwgMHgyMDBmM2MxMCwgMHg3ZjUxZjI5OSwgMHg5ZDNhZmRiNCwgMHhlYmY3MDQ1ZCwKKwkweDJhZDU5YmY0LCAweDRhZTM4ZTAyLCAweDQ4NTFiOGI1LCAweGU0Y2Y3ODg0LCAweGRiN2U4MjEyLCAweGU3OGNiYjY0LAorCTB4MzA3ZjYwNzIsIDB4YzI5YjFiOWMsIDB4MGY5NGVmZWQsIDB4ODEzZDcxMmEsIDB4ZGMzMGUwNGEsIDB4ZTc2MmQ5N2YsCisJMHg3NWYxNjhmNywgMHg0ZTM5ZWJjNSwgMHgyMjZkMjNhZSwgMHg1ZGQ3OTFmOCwgMHgwNzg4MmUyMiwgMHg4YTQ5N2Y1ZCwKKwkweGU3NGU0N2U5LCAweDEwMjMzZWY1LCAweDk3YmU4MTI5LCAweDAwOTU1MTdmLCAweGVmNDRmOTc3LCAweDJmYWY0ZGU3LAorCTB4ZTBlMzA1M2MsIDB4MzllMThiNTQsIDB4OGY0ODg5ZjgsIDB4NGZmN2NmMWIsIDB4NGZlZTFhNzcsIDB4ZDZmM2U3OGUsCisJMHhlNDcwNjRjMSwgMHgxZDZkMzEzZSwgMHhmMjM4YmE2OCwgMHg4YjUzZjQwOSwgMHg2NWYwMTcxNCwgMHgzZWZkZGRiYiwKKwkweDViZmE3YmFjLCAweDM4Yjk3MjY1LCAweGI2M2UzM2UyLCAweGE1YzQ2ZjlmLCAweGExZmY1YzM4LCAweDJlMDNiNGY4LAorCTB4ZjNhZmFlYWUsIDB4YWZiZjY5NWIsIDB4MDdlYWNhMWUsIDB4Yjk1ZDgyMWMsIDB4YzkyOTk3ZjIsIDB4ZjFjZGU3NjAsCisJMHhhOTY4ZGVjYywgMHg5N2MwM2I4NiwgMHhjYmUxODEzMywgMHgzZjViYmEzOSwgMHhlMjY3YzU1NywgMHgwMWJlOWE3YiwKKwkweDNkOWVhMGVlLCAweGFjN2U2MDcyLCAweGQ3OGE2NTc1LCAweGVkZDc4MDU1LCAweGIzZjM4Mjc2LCAweGU2NWJhNTFmLAorCTB4ZWQ2OTllODIsIDB4Zjg2Nzg5ZWMsIDB4NmFlYmE2MzcsIDB4NzU4N2VlNTcsIDB4NmM2N2ZmMWQsIDB4ZTAzNjk4YmMsCisJMHhkZTM5MTI5MiwgMHgzODY0ZTg3ZiwgMHgzMzc1YWFmMywgMHhmM2ZkYTY2ZiwgMHhiZjVjNjVkYSwgMHg4YmU3ZTU0OSwKKwkweDFlOTJmMTIyLCAweDc3MGQxNzgxLCAweGVmMTY3NjFkLCAweDc1MzNmMGQxLCAweDNjMjJiYmY3LCAweDIxMTlmYTlmLAorCTB4OWUxMjRjY2UsIDB4OTlmODY4ODcsIDB4OWMzODY3ZTIsIDB4MTM4ZDg4NzIsIDB4ZGRjN2UxYmQsIDB4ZTYwNjljZTUsCisJMHg4NzM3MGEzMSwgMHgyODBhNmUxOCwgMHhiN2Y3ZjAzZSwgMHgxMThmYzA3YSwgMHg4YWY1NGYzNywgMHgzY2YxMmY5YiwKKwkweDUzYmRhYWZjLCAweDE4NmViYjJmLCAweDdkZjdlOWY0LCAweGI2ODlkMzFhLCAweDhmODJmYmQ4LCAweDU2ZWY3ZTcyLAorCTB4MDZjYzZlZWEsIDB4ODk5MzcxN2IsIDB4NDg5MzdmOWQsIDB4ZTcxNGFkYzYsIDB4N2JiNGUzYmIsIDB4MjBiMjZiZTUsCisJMHhmNjYyNWRiZiwgMHgxOWIzN2I2NywgMHhiYjc2Y2ZlZCwgMHhkNzcxODNjNywgMHhjYjllMGIzNCwgMHgwZGE3OTIyNiwKKwkweDA2YmJmNWY2LCAweGRmYzhkNDU4LCAweGM3MmVmOGQxLCAweDlhMWNhMzYxLCAweGVmZmMwMjc4LCAweGYzZmM5OGQ3LAorCTB4MWI4MWNhNmUsIDB4MTk3YTQ4ZWMsIDB4OTNiOGMzOTMsIDB4ZTIxMTI2Y2EsIDB4ZmRmYzhlNDIsIDB4ZTA0ZmFmODAsCisJMHhjM2MwMmQ0ZSwgMHgyNWVmMDU3MSwgMHhhMGFlM2VhYSwgMHhiZWNkZmM1ZCwgMHhiZTIxMGJiNywgMHg5ZTFmZWRhOSwKKwkweGMyZWRlN2IwLCAweDNlZjA5MTgyLCAweGRjNmJkOWMzLCAweDNjNzk2YWFlLCAweGQyNzYwMTRhLCAweGM0ZmQyZjcwLAorCTB4ZmQyNjc5ZjAsIDB4ODAyNWYyYmQsIDB4NzJlZWVjOWYsIDB4NzNlYjdkZTMsIDB4MWQxNzg0ZTAsIDB4NzM2ZDZlNzcsCisJMHg2MGIzMDc0ZCwgMHg0ZTdkNmZiYywgMHg5YjFmOWQ4OCwgMHgxZDNkZDQ3ZCwgMHg3ZGQ0NjU0YywgMHhiNzBmMWNlYiwKKwkweDcxNWRkNjkxLCAweGRmZmRmNDYyLCAweDE2M2U3Yzc0LCAweGQ3ZmJmMTBmLCAweGMxYzQwYTQzLCAweDZiOWE5NTFiLAorCTB4MjZhMjdjZDgsIDB4YTY4ZmVjMGIsIDB4Zjk0N2Y4NzcsIDB4MDhlMWY4ZDYsIDB4YzNmZjdkZGQsIDB4ODhmM2Y4ZjgsCisJMHgzOGY3NjI0YiwgMHg0ZWI4MjliNSwgMHhkZjYxMjhmOCwgMHhlYjcxZjIzNSwgMHgzOWY3YWUyYiwgMHgwZjljNWVhYiwKKwkweGI5NmM3MGY2LCAweDU3NmRkNzFiLCAweGZlN2M0NTM5LCAweDY0YjIxMjEzLCAweDEyNWNiYzgxLCAweGNhMzQ3N2FlLAorCTB4NDIxM2Q0ZWEsIDB4MmE0NDdiZjcsIDB4ZTVhNzYxMTksIDB4OGRjNWZhN2IsIDB4NzBlZmY2ODUsIDB4ZjAwZTRjNzgsCisJMHg0M2FlYTQyYiwgMHg0OTg0ZGRmMCwgMHg2ZWMxNjMzOSwgMHg0ZGFjYzdkYiwgMHhhMzRjNzE4NiwgMHhiNDU1ZDI5YiwKKwkweDg3NGRkZWQ1LCAweGM3Mjc1NzQ2LCAweDg1OGUxZGM5LCAweGY2NzhjNzI2LCAweGUwYTFkODFkLCAweDdjMGI3NmIxLAorCTB4NzFhMGUxYWYsIDB4ZmYyNjM5ZWYsIDB4ZmM4MDNjMDgsIDB4MmMyMGYxYmIsIDB4MDdjNmJjODAsIDB4ZmNiNTRmMWIsCisJMHhhMTBmMWYzZiwgMHgxZTlmMjA4MSwgMHgwODcxMDBmMSwgMHg0M2MyYjdjNywgMHhjMzU1ZjAxNiwgMHhhZWQ3ZjUwMywKKwkweGZlNjhmZTAyLCAweGY2YzJhMzVhLCAweDBkNzk2YTFkLCAweDdjZjY0NTA3LCAweDEwYTVjZjdjLCAweGY2NDQzZmRjLAorCTB4NmQzOWQ5NTksIDB4NTdhZTIyNGYsIDB4NmQ2NGVjYmMsIDB4M2VkODdlNzQsIDB4NjQ5OGJhOTgsIDB4ZWJmOTgzYjIsCisJMHg4Yzg5ZWZkYSwgMHg1N2U4MDkwOSwgMHhlMTA2YTE4ZSwgMHgwNmUzZjQwZSwgMHg3MTc0M2RhMiwgMHg0MTc2OTE3ZSwKKwkweDcxMzc3YjgwLCAweGY4MDY3OTZmLCAweGQwNjRhMTk3LCAweGUyZTYzMThiLCAweDg3N2ZlMDEwLCAweGY4MDY0YTZkLAorCTB4YzliNjM5ODcsIDB4NWRhZjgwNTksIDB4MGViZDU2MjMsIDB4MDFhZWQ2NDMsIDB4NTE2ZjJmZTUsIDB4Y2QyN2ZkYmIsCisJMHg2YWYwYjVlZSwgMHg3NDZmZjZiNSwgMHhiZDc0ZmIzMCwgMHgwMjBmOWQ5YiwgMHg4NzQ5MWRiYiwgMHgyYzQxZmY2NiwKKwkweDlhMTA4NzQwLCAweDg2Y2FmYTYzLCAweDBkYjliYWY2LCAweDQxZDAzOWVjLCAweDIwNWZiYWY5LCAweGU0MWZlMDRkLAorCTB4NTMyOWRjOWIsIDB4MTdlYmNmYzEsIDB4Y2VjZTgwOTIsIDB4ODYwYzVmYmQsIDB4ZjM3MTY1MzgsIDB4ZGU4MTQ3YWIsCisJMHhkNDNkNmQ2MiwgMHgzNTBmNWZhNSwgMHhiZjlhZDFmYSwgMHgzNDJiY2RhMywgMHhjZjliNDg3ZiwgMHhlNTA0ZGY4MiwKKwkweGQzYjlmY2Q5LCAweDI2YWRkNmNjLCAweDZlNzgyYzg3LCAweGVhZjNmMWY5LCAweGJmYWU2ZTU1LCAweDMxNDdlZDEyLAorCTB4YTQyZGM3ZWYsIDB4ZWVkMmU5MTUsIDB4ZjM5OWI5MWQsIDB4OWQxMGY4YTMsIDB4Mzk0MzY2ODcsIDB4M2U1MTM3MjEsCisJMHgxZGVmYzRkYywgMHhiZmE1YzliOSwgMHhiYzk2ZTE1NywgMHg2ODhlZjdkOCwgMHhiZWY2ZjRmNSwgMHhkNmI4N2M3MSwKKwkweDZkZjQ2ZWIwLCAweDc2M2U0M2QzLCAweGZhN2ZjOGNmLCAweGQyNzczY2Q4LCAweGMxMmZkMTEwLCAweGNlOTc5YTgwLAorCTB4MzI3MDY5ZWUsIDB4NjI1MjFjM2UsIDB4YjlmYjU3OGYsIDB4YjUzMjRlZmUsIDB4ZTViOWMzNjUsIDB4OGVmZTdiZmQsCisJMHg3YjJiZTNlMywgMHhmODFlZmVmZSwgMHg0OTRmMTM4OSwgMHg0ZWI1ZjYwNCwgMHgwMTJlMzUzYSwgMHhkMmYzZTdkNywKKwkweGFiNTkzZDcwLCAweDkzNjlmYmQ3LCAweDg4ZTdiMDhkLCAweDU3NzdlZDFmLCAweGRjN2E1MjBlLCAweGMxNjdkMDBhLAorCTB4MWU2N2I3ZjQsIDB4NzdkNDI5ZmYsIDB4MjI0NGI4ZjEsIDB4MmExNDRkY2YsIDB4YzcxMGExOWUsIDB4YmZiZmU0MmQsCisJMHhmZTYwNTA3MywgMHg5MDdlNTY5MiwgMHhmM2M1ZWVmZiwgMHgyMWIwYjcxYywgMHhjNDhmYmI0MiwgMHg5YmU3MjExYywKKwkweDlhMTkzZGY4LCAweDU5M2E2ZjVjLCAweDhlY2E0YTc0LCAweGZkZmMwZjk2LCAweDVhMGJlMjMzLCAweGYzOTlhMTVjLAorCTB4MTFmY2I0OGYsIDB4YTc3Y2I3Y2YsIDB4ZmMwOTZlZTksIDB4ODlhNGVmZjMsIDB4ZWVkMTFkYzQsIDB4ZTBjZTk1MGMsCisJMHgyZjFjZTIyMywgMHg0YTdlMGMzYiwgMHhiZDNmNzNjYiwgMHhkZTJiOGU5OSwgMHg0YWRjNDQzNywgMHhmZWRlNmRlOCwKKwkweDViZTQzNjdhLCAweDhmZjc5OGM1LCAweDlkZmJmOTE4LCAweGZlZjFiYmU2LCAweDJhMDkyMTkxLCAweGZiNWJkM2QyLAorCTB4MzhhNmFlOTMsIDB4Mjc3MjBkMTksIDB4NjVjYmNmY2MsIDB4ZTUxODc3ZjcsIDB4ZmY5ZWNhZmIsIDB4ZDkxYjZlNDgsCisJMHg5MjdiYmYzMywgMHhiZjBlNTFiZiwgMHhlYjgwNTMzZCwgMHhjM2M5YmQ0ZSwgMHhiNDdkZGI4OCwgMHhiZmRhN2U5ZiwKKwkweDlmYTdlZDEwLCAweGY4YWY2M2ZhLCAweGJkZmY5ODljLCAweDFhZjMwZDJmLCAweDlmN2JiZDVlLCAweDRlN2YwNjRlLAorCTB4NjRmNGU5YzMsIDB4YmI4OTliODYsIDB4ZWM0YzlhN2YsIDB4ZjIzMmYyZGQsIDB4ZjMwNzczZWQsIDB4ZDcxMGU2NmIsCisJMHgzZmU5OWJlYywgMHg3OGFlMGE3NywgMHhkMjdlMTdiNCwgMHg0YWIzZmIwYSwgMHgwZTczOGQzOCwgMHg0MWZmYTIxNywKKwkweGUzMTA3OWY4LCAweDFjNDczNjM4LCAweDdiZGVlNzg5LCAweGExOWJkZGZkLCAweDViOTgzMmY5LCAweGJmMDU3OGUzLAorCTB4MzZiODAyYzcsIDB4NmY0NTUzOGUsIDB4YjJlMDQ5ZDQsIDB4OThhYjRhMTUsIDB4YmE3ZWUzMWQsIDB4Y2U1MTk3NDYsCisJMHhmNjA5NDg0NywgMHg4ZDNhMjdhMywgMHhhYmQyMzAzOCwgMHhlZmRhZTdmOSwgMHg0YzdlNTBjMCwgMHhkZGY1YTI0ZiwKKwkweGZmNjNlNmFhLCAweGNlNjFjNmEyLCAweGRmYzY5ZTk3LCAweDljOTVmYTllLCAweDFjZGVlM2MwLCAweDRlNGUxN2ZmLAorCTB4ZGJkODBiN2IsIDB4ZTUxOWJlOTMsIDB4ZWNkNzJjNjYsIDB4OTAzNDIxNDcsIDB4ZmMxZmE5ODMsIDB4YTkwOTIxOTEsCisJMHg5Nzg1MGZhOCwgMHhlM2E2ZTIxNCwgMHgzZmE4MTkwYywgMHhhZjhhNGVmZiwgMHhlM2RkYmM0MCwgMHhjMjdhY2Y2NCwKKwkweDEzMjVmNTViLCAweGUzNzcyNGYxLCAweDY2M2UwZTRlLCAweDk2ZWRkYzAzLCAweDFmMTA2Y2VhLCAweGJhNWVjZWJkLAorCTB4ZGE2ZjU0MDYsIDB4ZjBiMzA1YTcsIDB4MTMzNjg3OWUsIDB4ZjRkOTkwODEsIDB4MTAyZDczZTYsIDB4MjUxZWYwNDcsCisJMHhhMGEwM2U3OCwgMHhjMDU0ZmY3OSwgMHg1NmE1ZWZlOSwgMHg1ZTc1NDc5YywgMHgwOGIxZTQyNCwgMHhiY2Q4MzMzZiwKKwkweDU4N2UwNmM2LCAweDZmOWQ4NTMwLCAweDc0NDg5ODNiLCAweDI3Zjc5MGZiLCAweDhmMDZiYzMwLCAweDFkZDliZjlmLAorCTB4MmYxMmZjYTMsIDB4MjlkYzQ5OWYsIDB4YzcyZTM4ZDksIDB4NzBhM2ZjNjMsIDB4M2ZmYjA5YmQsIDB4NDgxZDcwNGQsCisJMHg5ZTY1YmYwMSwgMHhjZTg1ZjM4MCwgMHhhNDBlMTNiZCwgMHhlZTNiN2E1MCwgMHgzMzNiNDQ0YywgMHhkZGUwZjgzZCwKKwkweGM2ODgyYTRlLCAweGNmOGIxZWZmLCAweDc4MGExNmJiLCAweGVhYTE0MGNmLCAweDU5NjE3Y2MyLCAweDk4ZGZlZTI2LAorCTB4OTllNDhmZjAsIDB4NDMzZTUwYzUsIDB4NzRjZGY5YzYsIDB4Nzg4MjUyYjEsIDB4MjEzNGQ5ZDQsIDB4N2I4YmU2MDcsCisJMHhmODVhYjY4NCwgMHgyOTdmNWMxZCwgMHhmZDM4ODc2YiwgMHg3Y2ZmMzBjOSwgMHgwYzc5MzhhNywgMHhhYTljNzZmZSwKKwkweGVmZTE4N2U1LCAweDNjYzMxMjAzLCAweDBiY2VkNTZkLCAweDdjYjRjZGZiLCAweGY3MDE2Y2Q1LCAweDY2Nzc0ZWVmLAorCTB4N2UwNDdmMTAsIDB4Nzk1M2Q3MGEsIDB4NmNiOGE1OGUsIDB4YjgwMDVmZWUsIDB4M2ZhNDU5OWUsIDB4YzRiYjM4MzcsCisJMHhlYjkxMDI0NiwgMHhlZjEzODIxNiwgMHhmN2M4M2IyMSwgMHhmYzA5Nzc2OSwgMHhlN2FlN2M1ZSwgMHhjZmJjNzAzNywKKwkweGZiYWM5Yjk5LCAweDNmMzA5NGFlLCAweDY0NTNiYmQzLCAweGIzZTQ3MWY3LCAweGY0ZDZhMWRmLCAweDg3YWU0NmViLAorCTB4ZjFmOWYwMzcsIDB4OGU4NjRmM2MsIDB4ZDI4ODYyOGUsIDB4NWIzZjQwODgsIDB4NjJlNWJlNDcsIDB4YTVjZjBlMWIsCisJMHhlNzg3MDdlMiwgMHgxYzZlZjZkMywgMHg4YWQ3OTg2MSwgMHgxNzExNmI5NSwgMHg2ZjFkNmM2OSwgMHgxMzgyZWMzNiwKKwkweGRmZWE2ZWMxLCAweDlmNGYyNWJiLCAweDk3YzdhMThmLCAweDNkOWExM2I1LCAweGM0NTdiZDk4LCAweGY5ZDljMzc1LAorCTB4ODkwMmNmOTQsIDB4YWViZmQzZjIsIDB4NzI2MDk4YmQsIDB4ZDA3ODgwMWQsIDB4NzhkYzk3YWQsIDB4YmQ5NDRlOGYsCisJMHgxYmU4YTBmOCwgMHg1MGRmOGJkOSwgMHg3YWEzY2MxZCwgMHgxZjAyNjRmZCwgMHg0MTkxMDczNywgMHg4YmE2Mzc2MCwKKwkweDM4MGE3ZWRiLCAweGE2ZTNhNGVhLCAweGI0OGUwNjM5LCAweGVmOWI0NzcxLCAweDA2M2Q1MjE3LCAweDZjMzM5MGRjLAorCTB4YTVmYTY1OWQsIDB4YTRlZmRjMzQsIDB4NzZjM2Y3Y2QsIDB4YWUyNWZhODQsIDB4NmZkMmZlMTgsIDB4Zjc3NGIyMTIsCisJMHg0YWVkODQ3YSwgMHhlNzIyNWY4NCwgMHg2NGJmN2I3ZSwgMHg5NTQ3ZjUzYSwgMHgyMDZmYTAxYywgMHg3YjQ1OGZmMSwKKwkweDQyYzk3MTg2LCAweGYxMDUxOGQ4LCAweDE4NzNiNGMxLCAweDc0NGFmMWU3LCAweGYzZTM4YWZlLCAweGIwMmY4OGQzLAorCTB4Yjc1MjQyN2YsIDB4MTVmZDE4N2UsIDB4ZDYzY2NlMmQsIDB4N2E1M2Y5YTksIDB4OGRlMzg0OWMsIDB4YTU3ZGQ4YjMsCisJMHg4MTBhNGUxYSwgMHhiM2ZmYTA5ZiwgMHhmNGViOGM0NCwgMHhmZGFkMWI4NiwgMHhhMjEyZjBkZSwgMHg1NjRjMDhmNiwKKwkweGZhZTE3ODhmLCAweGYyZjE3NWY3LCAweDE5N2M2ZDE3LCAweDA1ZjY4NjRhLCAweDM0M2UxYTI3LCAweDliYzcxOGJjLAorCTB4ODNjNDM0ZmYsIDB4YmE2ZjFhN2EsIDB4MGU2ZjE5N2EsIDB4YWVkMTkwOGMsIDB4N2NkN2U2ZjcsIDB4ZWFmM2U0ZWEsCisJMHgzN2E2MjcwNCwgMHg3ZjFiMzU1YywgMHhkODJjNjg5NywgMHhmOTM3ZjAxMSwgMHg2YjhlMTViOCwgMHgxYzljMzNkNSwKKwkweGMxMjQ1YjY4LCAweGVjMTc5MWZhLCAweDFjYjc2NjQ3LCAweGZmZjA3OGI0LCAweDgxYzRjNjAwLCAweDAwODAwMGQ1LAorCTB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2NiZGZmMDAsIDB4ZDU1NDdjMGIsIDB4NjdiN2VmYjksCisJMHgzMzI0NzllZiwgMHg0OTkyNjY0OSwgMHgxZDg0M2MzMiwgMHgwOTIxMjEwOCwgMHgxMWJjMjEwZSwgMHgxMTA4NDkzNywKKwkweDg4YTgwY2EyLCAweDFmMDFkNjhmLCAweDRkMDkyMDYwLCAweDZmNTNkNWFkLCAweDUyODEyMTMzLCAweGJkNTgzZDZjLAorCTB4ZjRmNDdiZDYsIDB4NDFlZDU4MzcsIDB4MDEwODc1MGQsIDB4MjY3MDI3ODMsIDB4ZDBmMDk4YTAsIDB4N2FjMGY4MjAsCisJMHg0NTI5NjhkYSwgMHg1YTE4OTIxYiwgMHhmNWNmNmEwZiwgMHhmNmI3ZGY3YywgMHg4MzI2NjY0ZSwgMHg3M2RlZjdhNSwKKwkweGQ2MmU5Zjg3LCAweGY1YWY2YjVlLCAweDVmZjllZmFkLCAweDRhOWI1YWRmLCAweDUwMGE5ZmMwLCAweDk4MjAxNWIzLAorCTB4ZTFmOTUwMDYsIDB4MDY0ODRhODYsIDB4MDEyMDNiZTgsIDB4OTZkNDAzMTQsIDB4ZmUxYjQxYzksIDB4YjFmZGI0YjUsCisJMHgwY2RkNDVjNywgMHg1MWRmODk1NiwgMHhmNWMwMjY2MSwgMHg5NTBiN2UyMCwgMHgwNmU2YzUwZSwgMHhiYzk1ZTY1OCwKKwkweGQ2ODAxNjcyLCAweGUxYmZkZTJlLCAweDYyYTgyNTkyLCAweGY5YWY3YWZkLCAweGU4OWIxZWUzLCAweDVmZmYzNWZiLAorCTB4YjgwMGM4MDMsIDB4MTk3ZjdmNTEsIDB4MmZmYjBmZmQsIDB4MTg2MGE0ZDMsIDB4M2IzNjVkNWYsIDB4OTc4ZGZmYmEsCisJMHhhNjkxM2ZjYSwgMHg2MmQ3MmMwMiwgMHgzZTRmYzM5ZSwgMHgyMmYyYTc5MywgMHhhYzI0YmVjYywgMHg4ZmI3NDQ1NywKKwkweGNmYjkyNjczLCAweGUzMmZmMWQ5LCAweDMyZDdmYzYxLCAweDY1ZjNjNWMwLCAweGFmZjc1MTZmLCAweGM4ZWQ3N2U5LAorCTB4NTIzZDQ4ZjIsIDB4YWNlODAxNjYsIDB4ZGIxOTcxYjcsIDB4N2YwMTZlNWUsIDB4NGQyNTgxYzgsIDB4MDA2NWM0NTAsCisJMHg5ZDBhMDE1MiwgMHg1ODE5OThiOCwgMHgwZDAxNjRiZiwgMHgxMzYzMDhmOSwgMHgzYWI5ZjdlMCwgMHhkZjg2MTMxZCwKKwkweDA3ZTM4ODNmLCAweDhlMzBkYzcwLCAweDM4MDFjODFmLCAweGZhZTRlZjU0LCAweGFlMWVmNTZiLCAweDJmODI5MzVmLAorCTB4ODc3ZmUzYTQsIDB4YjhhOGIwYmYsIDB4ZGZlZGM1OWUsIDB4ZGYzOGZjNTEsIDB4OGYwYTRiZTIsIDB4OTNkNjliM2IsCisJMHg3MTgzMGI0ZiwgMHhmNzNmOWViNCwgMHgwZGUzZmQxNiwgMHhiNmJmZGMzMCwgMHhiZjhiMzNmZCwgMHhmOWViZjJmMCwKKwkweGE3ZTdmMzViLCAweGNkM2YzY2E4LCAweGNmMGMxNWFiLCAweDE4MDE0NGJiLCAweDlhNWNlYjgzLCAweDYzNWZjZDFiLAorCTB4YzZmOTU4OWUsIDB4ZmViOTZmY2EsIDB4NTZmY2FjN2UsIDB4OTBjN2FjYzQsIDB4MzJhMmY0MGYsIDB4ZmZjMzhhOGQsCisJMHhhNmQwMjY0YiwgMHg0MzdlNWU1ZiwgMHhiM2Y4YjFmMiwgMHhkYjIzMDViZCwgMHg3MmM5N2UwMSwgMHg5NzRmMWUxYSwKKwkweGJlMmI3NDE3LCAweDE5OTc0MTQyLCAweGI3NTJiYWY1LCAweDQwZWZkNDBiLCAweGIyYjljYTBhLCAweDQ4ODljMjEzLAorCTB4MmJlN2Y1ZDgsIDB4ZjRhODUxM2UsIDB4OTQ3MWYwNGEsIDB4NmM3YzAzM2UsIDB4MWUxZTViYzgsIDB4ZTQyNWQxN2YsCisJMHhiY2YwZGE2YiwgMHg3NzY0MTQ4YiwgMHgwYjFmM2QxMSwgMHhhOGViMzg4MSwgMHhlYTE0NzFhMSwgMHg2YzM5NjAxZiwKKwkweDE1NWE2MWQ5LCAweDYzNWM3NWMyLCAweDU0N2QzYjgxLCAweGUwMzI4YTI2LCAweDkzN2RiODk0LCAweGY2ZTNjNGQzLAorCTB4ODI2NmM1ZmYsIDB4M2U1ZTAxYWIsIDB4NDgwMjU5OTgsIDB4M2NlYWQ3OWYsIDB4NDIwMTEzMDYsIDB4YmZmN2UwNjYsCisJMHhkZmI5NTI0ZSwgMHgyNDA4MjRlNiwgMHg3NGEwZmNlMCwgMHg5NDVlYzhkYiwgMHhiNDVjODAxMiwgMHgyNWI0NjUzYiwKKwkweDM2NDM4OGQ4LCAweGQ5MWY2MTJiLCAweDgxNTdiZjYxLCAweDJmZGJiNDA2LCAweDA1MGVmNzhkLCAweGM5MTQwNzZlLAorCTB4NGM3MzhmZTYsIDB4N2VmNDU5OGQsIDB4ZjYxZTdiYjgsIDB4YThhNDU1OWIsIDB4Y2I4YmIwZGIsIDB4ZGE4NzdlYWEsCisJMHg5ZDU4MGVmYiwgMHhmZWZmNWVmNCwgMHg2OTk4NzdlZiwgMHgxNzgwYmY5YywgMHgwZWQ3ODQyOSwgMHhlN2RhODE1OCwKKwkweGYyNDFjYzNiLCAweGUzZTQ4YjFmLCAweGZkZWIwOWIyLCAweGVjNTYwMDAzLCAweGI4NTU3ZjNmLCAweGQ3NmU1MDE0LAorCTB4MTNhMzc3NDAsIDB4YzcyNGI5Y2IsIDB4OGQ3YmYyMzgsIDB4ZmVjZTliZDYsIDB4ZTUwYTMxYzMsIDB4ZDM5NzQwYjQsCisJMHg5NTZmZGQwMiwgMHg4ZmQ5OTAxZSwgMHg0MWM5MjY5NCwgMHg1M2Y2MWFjOCwgMHg1YTMyZWFkNywgMHgzYTI1NmM4MCwKKwkweDdhZTFiNDE2LCAweDRiZGFmZGIxLCAweGI0YmY1YzRhLCAweGUxNzcxZjQ4LCAweDkzMjE0MTlmLCAweDdhZDEwODVjLAorCTB4Zjg0ZGE4YmIsIDB4MTRkMDEyYTMsIDB4NmQ0YjI5YzAsIDB4OTdlNGVkMzEsIDB4Y2U0NTllOTAsIDB4Yzk3M2U3ZTgsCisJMHhlZjVlYTI3NywgMHhmODRiZjE4ZSwgMHhmN2JjZDEzMywgMHg4YmJjYzUzYiwgMHhmNzI2YmZlNCwgMHhiNjVmZmFlMCwKKwkweDQzY2RlZjY4LCAweDlhNGUwNzdhLCAweDBlN2M1OWUxLCAweDY3MzJiMWU3LCAweGQwZGE1ZjI0LCAweDk3Mzk4M2FlLAorCTB4MDdmZDhiYjcsIDB4ZTkxNTM1MTMsIDB4YzdmNDk5NzksIDB4OWFkMWY1NDEsIDB4ZmRmMmY1M2EsIDB4OTQwY2Y2YTcsCisJMHhiOTc4Nzc2MCwgMHgxMzAyODU3OSwgMHg3YjRmMWQ1OCwgMHgzZGY5ODYzMiwgMHhmZjNhYWY4MiwgMHgyMmQ5Zjk2MywKKwkweGY5MWQ5MzQxLCAweDViZGRiMGJjLCAweDA0NjVhZTQ2LCAweDhmOTEzYjFmLCAweDgwYzk1ZWY4LCAweDI5NWNmM2M2LAorCTB4NzhmYjBkMWYsIDB4NDZhMjVjZjksIDB4YjlmMmZlZmEsIDB4ZmZjZDFhZDEsIDB4ZmE2YmU5MmEsIDB4M2ZlZmZlYjAsCisJMHhmZTQ4OTgzYiwgMHgyYWE4ZjkxMywgMHgyZTAzMTdhOCwgMHhkNjU5Zjc5YiwgMHhhMWY3YTE1ZiwgMHg2ZGMxMzk1MSwKKwkweGY1ZDE2ZjU4LCAweDgxYzRlNWZjLCAweGVmYzRmOWEzLCAweDY3ZGU0ZGViLCAweGUzNjUxYTY5LCAweGU0ODUxNWM0LAorCTB4OWM5NmI3MzcsIDB4MGQyNDc3YzUsIDB4N2VkMTA3YTQsIDB4NzcwOWQ1MjQsIDB4ZmI0MDE5NjAsIDB4YTQwYjdkMjEsCisJMHgxOTkzZWIwMiwgMHgzNmYzNDA0MiwgMHg5NTM0ZjA2YSwgMHgyOWFiZTYwYiwgMHgxYzQxZWZjNCwgMHhlMzQxZGJiMywKKwkweGU3YTQyOWE5LCAweDMzOGJkN2YwLCAweGY5MjM4NTdkLCAweDBhOGY1MmRlLCAweGQ2YjRmMzg1LCAweDFiMjUzNGRiLAorCTB4OTNiZDVmNjAsIDB4MWVmNTZkZWIsIDB4NTdhZDVmMmUsIDB4MmM3NGRjYjksIDB4OGUyMGMxZjksIDB4MzQ1OWFiNTMsCisJMHg3ZGY4NmQyNSwgMHg4ZmIwYWE1NywgMHg4ODY3ZTgwNSwgMHgwNTIwMDVhZSwgMHgwYjczYTgwMywgMHg1ZWY1ZDYxZSwKKwkweDI0OWI4MjkxLCAweDI3YWUxMzkyLCAweDk3Mjg5ZjgyLCAweDA4ZGM5ZWMxLCAweDRkMjkzNmZlLCAweDM1YjI2NjkzLAorCTB4ZjI4YmJjYjAsIDB4MDYzZWZjNGQsIDB4NTlmM2UwZmYsIDB4ZGNhM2ZiMjMsIDB4NGJhYWVhYTMsIDB4YmFlNjdlNjIsCisJMHg5NjE3MjRiNCwgMHg1MmY4NzQzZiwgMHg2ZTkxNmNhOCwgMHhiODAxN2MzOSwgMHg1YmY1MTJlZSwgMHhmZTM4MGJlNSwKKwkweDc4NDJmMGY0LCAweDc0YzNlMzEwLCAweDE1ZjEwYzE0LCAweGZkMTNiNzdmLCAweDQwMmMzYTMzLCAweGNhODBjMWYyLAorCTB4ZDNhNDU5NzYsIDB4NDkyZTdkYTMsIDB4MzIzZTcwZTcsIDB4ZTBjN2FmOWQsIDB4MzBjYWQ2N2IsIDB4ZTgzZWQxZTksCisJMHgxN2JlMjM0OSwgMHhiNDc2N2NkYiwgMHhjODQzYTQyOCwgMHhmNjZlOTM1NSwgMHg5Y2RlMzg0OCwgMHgyNjU3OGI3NCwKKwkweGE2ZmEyNmQyLCAweDc1ZmU0NDZmLCAweGQ4ODRlM2E0LCAweDYzMjNhM2JmLCAweGE2ZjY4YWFjLCAweDRmYmM2ZjI5LAorCTB4MWNkOWFkNzYsIDB4Y2MyYjgxNjEsIDB4NzExMTNkYmQsIDB4NzE5ZTEzM2MsIDB4OWYyMmJjNTIsIDB4YmRmMjM1ZjYsCisJMHgwMWM5NzdmMywgMHg3Mzg4NmJmNiwgMHg5ZTc1OGZjOCwgMHg3MTg2ZjY0YSwgMHhkOTJlNmI5ZSwgMHg3ZmQyNTZiYywKKwkweGY1ZWQxMTdhLCAweDU0ZjI2MjYwLCAweDVkZDBjZmYyLCAweGQ2YjhlYmM2LCAweDZmOTFkNjI2LCAweGQ4YmIxN2Y2LAorCTB4OWYwZjg1OWYsIDB4NmRmZWY3YzAsIDB4ZTlmYzgwMTAsIDB4Y2ExZmRkMzUsIDB4OWE5NGY0ODAsIDB4OTA3YjMyZjIsCisJMHhlNGQyYzNjZSwgMHhmYzlmMmExNCwgMHg5NzAxNzI1ZCwgMHg4OTdiOTJhNywgMHg3NjRkMDczZiwgMHhhNzdkZTY5NSwKKwkweDQ2Y2UyZDVlLCAweDcyZGVkMTdkLCAweGQ2MWQwMDk4LCAweDBhMWNiNzgyLCAweGExZWEyNzk1LCAweGU1ZjUxYjM4LAorCTB4OTcxYjdhYWQsIDB4NWM5ZGViMjcsIDB4NzBmN2FhOWUsIDB4NDlkYjE4NzksIDB4NzZjNzVlOWYsIDB4YjAzN2I3ZDIsCisJMHhkODVkZWE5ZCwgMHgxYzMxZTU0ZSwgMHhkYmEyY2E5NywgMHg5NmJjNzg5MywgMHhiNDJjOTJkYiwgMHhkMGM5ODM4ZSwKKwkweGZhNGZjYzZjLCAweGI3MGM0ZTE0LCAweDNmZTAxNzgyLCAweGFiNmFmYjFlLCAweDk3OGMyYWVkLCAweDM0YTE3ZjU2LAorCTB4YjNmNGY5MGQsIDB4YWMxNDJhYWYsIDB4ZWUzYzViMWYsIDB4YmI2MGJmYTEsIDB4MWZhNjY3ZjksIDB4OWJkZTkwZGIsCisJMHg4ZjVhMzk0ZSwgMHhhYTllZGQ2MywgMHhmYTQxZDhmYywgMHg5ZDExMmM3OSwgMHhiOWI1OTkyMywgMHhhNjNhNDM0YiwKKwkweGNkMWM2ZjkzLCAweDM2NjBkNzZjLCAweDdhZjRkM2Q2LCAweGQ5NWQ3Y2MwLCAweGE1OTU4MDdjLCAweDQyZTBmOTNkLAorCTB4YWY1OTcxMjUsIDB4NTc3ZjIxYjMsIDB4YTNkZmZkZGEsIDB4YWJiMDI1YmEsIDB4YWEyYWVjYTIsIDB4N2IyNDg4NjMsCisJMHhiNjQxY2M5NywgMHg3YjkyYjFmNywgMHg5NWJiYzYwNSwgMHgxMjdmZmYwZSwgMHhkMTdiMGRiZiwgMHg5MWE0M2ZhNCwKKwkweDQ5YTk5ODdmLCAweGJjYjM3MmUwLCAweGUxYTQ5MzgzLCAweDk1YmY0NmU3LCAweDQ5ZmY0NThlLCAweDI1ZGViYWZhLAorCTB4OThjZDdkYjMsIDB4Yzc0MTY5MmYsIDB4ZmEzNWZiNDgsIDB4OTZhYjM4Y2QsIDB4OWU2NmZjOTEsIDB4NzJhMjZmMmYsCisJMHhlYjhiODU1OSwgMHg5YWIzNTViZSwgMHgxY2NiZmVjOCwgMHg5NGJmN2I5NywgMHg2NWQwN2ZkZiwgMHg1MTJkYmQ2NiwKKwkweDM4OWM1ZmIwLCAweDhlOWJmNDY4LCAweDdiYjg0NjRhLCAweGY4MzEyYmEwLCAweDY5ZjVlOTJjLCAweGQ2MTI2MzdmLAorCTB4OGFiMjc5MTcsIDB4MDMzN2RkNjQsIDB4YjYzYjVkZDcsIDB4ZWJlNTdiNTEsIDB4ZGU1NzZjYWQsIDB4ZjJlMTJmMjQsCisJMHg2OTkwYTg5OSwgMHgyMWQwYmVkOCwgMHgyYTY0YzM3OSwgMHg0YTZhM2ZmMywgMHhlNGE3NzZhMywgMHhkNDJkYjYyNSwKKwkweGE2Mjg5ZGE2LCAweGJiZDk2Y2Y2LCAweGQ1YTdlYTkwLCAweGE3NTEwYTMyLCAweDJlZjM4NTk0LCAweGI5YzViZjYwLAorCTB4YmUxYjVlMjksIDB4ZDBmYzJhNzcsIDB4ODVkZmQyNDUsIDB4MDRkZTQ5YjksIDB4ZjA0YWYzZjIsIDB4N2JhYTFhZTksCisJMHg5NTA2ZGVhZCwgMHg2OTU4ZjFkNiwgMHg0YWEzOGQzMiwgMHg1YmQ2MTM1ZSwgMHgxZmZkMjg2ZSwgMHgyZjg5NDc0NCwKKwkweGRhODkyNDA1LCAweGQ3ZTEwYTVkLCAweGMzZjc3ZjI3LCAweDZiZjYyNzMyLCAweGQ5MDEyNzE5LCAweGRlNzBhOWNmLAorCTB4ODVmZTg4OWYsIDB4MDI2YTg5OWQsIDB4YjM4YjY5ZjksIDB4YjE2YmRlOGMsIDB4NWM0ZGNlNDgsIDB4ZmY1Mjk1ZjcsCisJMHg3ZDU5OGU0MCwgMHg3ZTNkYzcxZSwgMHg0MWUzOWQ5YiwgMHg4YzA1NWJlNSwgMHgzNmRmOGU4MywgMHhlNTQyZTM4NiwKKwkweGE4NGJmMzViLCAweDc4MTI2ZTNjLCAweGNhYWRmMmJkLCAweDQxMzc2ZTBhLCAweGU1NGE5Yzk4LCAweGY3ZTJkZmVkLAorCTB4YjBmZTk3YjYsIDB4MWZlMzhkY2MsIDB4ZGY2MmVmMWIsIDB4NTYyYTcyODIsIDB4ZjYyNGZjMjIsIDB4YmZkZTg5MDcsCisJMHg3N2ZiOWFiZCwgMHg5ZDBmOTk0OCwgMHgwYjE3ZmVjNSwgMHgzOGFjOGE1MiwgMHgyMTNiYjk3ZiwgMHg1OGM1N2ZhYSwKKwkweDQ5N2Q1NDU3LCAweDI1NjJhOGY2LCAweDE2NTY0ZmMyLCAweDZmZDU0NTY0LCAweGIzOGE5NjI4LCAweGU2ZmJmYTIzLAorCTB4NTdkNTQ0MjcsIDB4YjM4YWI5OTQsIDB4NTRkZmZhMjMsIDB4YmVhYTJhMzksIDB4YThhY2E2ZjIsIDB4MWNkMzQyZmEsCisJMHg2MWVhM2ZlMSwgMHhmM2IwOTk3ZSwgMHgyMGQ5NjVmOSwgMHhhOWZjODk4YywgMHgwMzdkZjQ1MywgMHgzYjI2ZWZkYiwKKwkweGE5ZjgxMmVmLCAweDA5Zjg4NWM4LCAweDU1ZDY1MmU1LCAweGQ4Yjk3MWNjLCAweDAwYWZmYmFlLCAweDkyNjY3Yjc0LAorCTB4MmViZjE3ZmYsIDB4ODNkZThmMWMsIDB4NDk5OWZlMjAsIDB4MTZmYzQ4NzgsIDB4MjAxZTIzNzYsIDB4ZGM2MGE0N2MsCisJMHhjY2E3YTA4ZSwgMHgyYmM3MWQxMSwgMHhmZjI3Y2Q0MCwgMHg4NGI5ZDE1YiwgMHg2N2I5NTRmMSwgMHgzMTlhMTk3OSwKKwkweGJkZmEzMWYyLCAweDgxNjFmOTBhLCAweDJlZTg2MjQzLCAweGE1YzczMmVhLCAweGY0NmM2MmI3LCAweGFiYWUwNmZiLAorCTB4MzE2YmU5ZDAsIDB4MDk1MjliZjksIDB4NmViNDA1OGIsIDB4N2FjNjM1YzIsIDB4YjcyZTNhMGMsIDB4OGVmOTBhOWUsCisJMHhkZmZmMTQzMiwgMHhmZDJjNTc1YywgMHg3Zjc5MWIwMCwgMHhhMGQ3NGIxMSwgMHg4ODgxYzc0YiwgMHg3NjA3MThhNywKKwkweGM0M2UzMmE2LCAweDNlMWUzYjlmLCAweDI1NGY3MDMwLCAweGE0NTczN2ZhLCAweGVlNDg3MzdmLCAweGY3OTc4NWU1LAorCTB4OTdiOGM2NmYsIDB4YjhjNjdiYzMsIDB4MmNkMGZiYzYsIDB4ZmJjNmZjZjMsIDB4Mjk1NWNmNDMsIDB4ZDg5ZGYzZmUsCisJMHg3M2NlMjkzZiwgMHhmOWZmMTRiNywgMHgxN2ZkZDE3MywgMHgwM2EzNmEyOCwgMHg0ODI4ZjhlZCwgMHhmYmYxMDBkZSwKKwkweDI0MTBhYWI4LCAweDM1YWQzZDJiLCAweDQzZThiOTUxLCAweDc0Nzg0MmJmLCAweDEzNDBkOWYxLCAweDgzN2FmMzk1LAorCTB4ZmViOGFkYzcsIDB4OTU2NTcyZWIsIDB4MWUwNjBkZjIsIDB4OGNkNzVkOGEsIDB4M2E0ZmIxNTQsIDB4YWJiNTQ5N2EsCisJMHg1MDEyZGVkOCwgMHg2OGJmYjRlZCwgMHhkM2I1NTg3OSwgMHg4MzQ1YWEzZSwgMHg2YTJmZGEwYSwgMHg2OTFiNGQxMywKKwkweDYzZTVhMWJmLCAweDU0OWNmNTg5LCAweDUyZjNlN2UxLCAweGNhMzE4ZTA1LCAweDVlN2Y2NTY3LCAweGI2ZDU5NjJhLAorCTB4OGIwOTQ3OWUsIDB4NjAzMTdjZDQsIDB4OTQ3MDMwMjEsIDB4NDhjMTVlNzAsIDB4MDk1NDc3OWMsIDB4YTNiZTY4M2EsCisJMHhiZTFkMDcwZiwgMHhhNTdlM2YwOCwgMHgyOTE0NmYzOCwgMHhhN2U5M2E1YiwgMHg5MWZhNDVhNCwgMHgxNjgyNWI1MiwKKwkweDM5MTYzN2U5LCAweGFmZjU1MTVkLCAweGM3ZDhhYTljLCAweGJkNDU0NjdiLCAweDE1OWE5ZDc3LCAweDZiZjEwZmQ1LAorCTB4NDZhMGUxMmUsIDB4ZTQyYWU0MGIsIDB4NWU4OTRkNDcsIDB4N2NiMTc3YzIsIDB4ZmQ3ZDE3ZmMsIDB4ZTA5Mzg3NWUsCisJMHhhYWRkOTgxMywgMHg5NzEzOGZlYywgMHg3ZjgyYTViYywgMHhhNDU3Y2ZiMSwgMHg2ZmVhN2Q4YSwgMHg2ZTU4M2Q2OCwKKwkweDM1ZjQxNTRmLCAweGUyMDEzZWM5LCAweDNlOTMzNzEwLCAweDRmNzFkNmM0LCAweGMzYzY4YWJhLCAweDc3YTQzZDkxLAorCTB4MjJlOWJiNWUsIDB4NGVmODZmNDIsIDB4MjlkN2Q1ZWEsIDB4ZTlkZWNmYTgsIDB4YzQ0ZWVmYTYsIDB4OGJhOTIzZmEsCisJMHg2OTllN2Q0NCwgMHhmZmFjMDRjZiwgMHhkNDVjYjUzNCwgMHgzNzRkMzZhZiwgMHgwNTdlMDE3YiwgMHhjMzJiYWY4YiwKKwkweGU3ZGJiYTdhLCAweGZiNzljNTRmLCAweDEyYWQ4ZWNkLCAweDI0YzUxOWUyLCAweDc4N2I5MTQxLCAweDA1ODhmYmZmLAorCTB4MTYwYTI5ZTMsIDB4MjE3MzRjOTUsIDB4ZDhhYjc2YWQsIDB4YTAyNGQ3MmYsIDB4MjVmZWEzZmYsIDB4YWFmYzRhOWEsCisJMHhkY2U0MzA0OSwgMHgxZDcxNDE5MywgMHg5MTM0Y2VlZSwgMHg2ZmY2MzBiZiwgMHg4N2JlMGI3NiwgMHhmY2Q4ZTdlZiwKKwkweGMyNWY0MmI1LCAweGE1ZmEyYWM5LCAweGNhMmZmN2ZiLCAweDllZDhiZDI0LCAweGU3ZjVlNGVhLCAweDIxZTc5OWVmLAorCTB4N2Q3NDg1N2YsIDB4N2ZmZGZhOTcsIDB4M2M1MzZiYTQsIDB4NjJjYzlhYmEsIDB4ZmM5NmRlOWUsIDB4ZjliYjhhNTIsCisJMHhkMjFjNTFlMywgMHhiYjcwYmNiMCwgMHg0MjEzY2ZjZiwgMHhjYjhjMmJhOCwgMHhmNTg0OGYzNSwgMHg0YmM1OTc0NiwKKwkweDkwZmI3ZDM4LCAweDZjYWNhZjdjLCAweGIyMTNmM2Q0LCAweDljOGRlODVkLCAweDFiYjhkYTYyLCAweGZhZWI5ZmNiLAorCTB4M2JjZDE0ZjIsIDB4MTgxOWU2ODMsIDB4MDFmNTFjYjcsIDB4NTZlMzAzOWMsIDB4ZTkzYThhMTQsIDB4MGQxNzJjODMsCisJMHhmODFlZGUxMCwgMHhmNzk3OTI1NiwgMHg3ZTA3NjNjNywgMHhiZmFjMDNmYiwgMHg5N2JlNDc3NywgMHg4OTA3ZjQ3MCwKKwkweDgyYWIzZjgyLCAweGIwN2IxYTEzLCAweGJjMWFjZDNlLCAweDNlNzQ4YzJhLCAweDk2N2ZlNjk0LCAweDZiMzZlMGY0LAorCTB4OWJlYjEyNzAsIDB4OGQxMjYzNjMsIDB4ZmJjMDY5MmYsIDB4ODc3ZjYzMTAsIDB4MzJkNTM4ZmIsIDB4MWZlZTI0NzEsCisJMHg4OGQ4MmYzOSwgMHgxMWNjYjdjZiwgMHg0NWU2MzY3YywgMHhlZTI4ZGE5ZSwgMHgzYzViMzdiYywgMHhmOWMwZTgzNywKKwkweDA2ZmY4ODViLCAweGMwNzQ0MzNkLCAweDAzYzcyNzU4LCAweDQ1YTQ3OTEwLCAweDYxZTQ0M2IyLCAweGJjZTI2MGZmLAorCTB4MWYxOTJkNDksIDB4MzU5Y2Y3ZDYsIDB4Y2ZhZWJlZjEsIDB4ZTY4MDU3ZDgsIDB4OWI5MzNkNTgsIDB4MjczOTllNzgsCisJMHg2YzRjYzkzNiwgMHhkNGNjZmYwMCwgMHhiNmFmNDg1OSwgMHhmYTdkZTdhZCwgMHg3ZGU4ZWU4YywgMHg3ZjRlYWNmYSwKKwkweDliZGYwM2E5LCAweDdjZmM3ZWY1LCAweGRjN2QzY2M4LCAweDI5OTQxMGQ5LCAweDg5ZTljZjVlLCAweGRmNGYzN2VlLAorCTB4MWYzYmNmYTcsIDB4NTRjZGZjZmQsIDB4ODY4ZGJlM2QsIDB4OGU3OTkxZDEsIDB4MzNmZjdkM2EsIDB4MGE0MjdjNzgsCisJMHgzYWY5MjllOSwgMHg1MTZlZjkxOSwgMHgzYTlkOTg2NSwgMHhlYjVhMzdlYywgMHhmOTBlNWZiMSwgMHg4NTk3MWI0NywKKwkweDExNzc5ZGE3LCAweGE4ZjU2ZGZkLCAweDkzZjIxNmQwLCAweDdiMGQyZTFlLCAweDc3MGQzYzJhLCAweDc5ODhkNGMyLAorCTB4ZjgzN2JkNzQsIDB4ZTBiZWY4MzgsIDB4ZGM5ZWI0ZTMsIDB4YmFjN2NmOWYsIDB4NDEwY2QzYjksIDB4NzM5ZDc4NzUsCisJMHg4MjBkM2U3NSwgMHhkM2EwZjNlMCwgMHhkOTllN2NjMiwgMHg2MWU5Y2JmNSwgMHg5OGY1NjQ3YywgMHg1ZjU4OGQ0MCwKKwkweDZhMDg5YTgyLCAweGU3YjUzZjg0LCAweDY1ZDU0NmE2LCAweGNlM2EzZTQzLCAweDlmOGZhZTk4LCAweDM1MWQxZGU0LAorCTB4MGMzNzgxOGUsIDB4NWE5YWJkZjksIDB4NjQzODQ5ZGUsIDB4ZTMxZDYzYmEsIDB4MTNkOTk0OGUsIDB4M2UyZGM2YTIsCisJMHg2NDI3MmIxZSwgMHgyNDc2ZTExYywgMHhkNzA4OWZmMiwgMHg3MGEyNTY5ZiwgMHg4MDc3MmNjNiwgMHgzZmIzMDAzOCwKKwkweGM5NzA2MjU0LCAweDY4ZWM5OTc2LCAweGU3ZThkOWVlLCAweGM4Y2JiNGU2LCAweDg0ZmM3MmVkLCAweGVmOWYzZmE5LAorCTB4ZTlmOWZiZmUsIDB4OTlmOWEyZDIsIDB4Y2ZjZDExNTYsIDB4M2YzNDVmNzQsIDB4ZjM0NTU3MzMsIDB4OWEzZjk0NmQsCisJMHg0ZGQ2NjMyZiwgMHg2YWJmNmE4OSwgMHg3ZDU0NTE2MywgMHhhMzczODNmYywgMHgwMDYxNjdmYSwgMHhkYzRmYWM4YywKKwkweGZmYWEyNGJhLCAweGEyMmJlZGE0LCAweGJhOWY5M2VhLCAweDVlN2ZhYTJkLCAweDdiNTQ0ZDcwLCAweDJiYWFjZWZlLAorCTB4YTg2MTdmOTIsIDB4YjExZmFhMmUsIDB4ZjIwZGY0ZDcsIDB4MWZlZGJhYmYsIDB4ZWZmOWU2YTIsIDB4MzRhMmZmOTYsCisJMHhjYmFmMmYzZCwgMHg0MzhlOTk3ZiwgMHhjN2ZhMWE1YywgMHg0NTM4ZTFhMiwgMHg5M2YyMTVlOSwgMHhiZTM3ZjZhZSwKKwkweGEwNGJmY2EwLCAweDUzYmNlNTQ0LCAweDFiNzgwOTYwLCAweGQ5MDllZGIxLCAweDFiNWY5MTI3LCAweGExMzZhYzgzLAorCTB4YzEzMjY4ZGYsIDB4OGZmN2YyM2EsIDB4ODc5YzRjOWEsIDB4MmFiY2VjMzQsIDB4YWE4YmUwNGQsIDB4OWZmN2UxMzQsCisJMHhmOGE2OWI0NiwgMHhlY2NmZjA2NiwgMHg3ODQ0OWVkZSwgMHhhMDk5MzY0MywgMHhlMjlhZTI5YiwgMHhjNjcxYmY2NSwKKwkweDcxNmJlMTAxLCAweDcwMzQ3OTNlLCAweDc5MzRhYjVlLCAweGE4OTliMmY2LCAweDMyOWJmMjg3LCAweGQxZTUxZmVmLAorCTB4N2Q3MTUwN2UsIDB4M2YxZmM3OGQsIDB4OGI5ZmY5NDEsIDB4ZmE0YTliMGUsIDB4MDNmYWE3MmEsIDB4N2Q3MGI3MTQsCisJMHgyNDYxZTdhMSwgMHgzZWFmNzk1ZSwgMHg0OWY2ODkzYywgMHg2Nzk1N2Q0NiwgMHhiZmVhNjZlMywgMHg5Mzg1OGVlYSwKKwkweGY0M2FmZjY4LCAweDQ5OGU4ZWZjLCAweDg4NzIxMTY1LCAweDM4OGFkZjVjLCAweDY5N2JlOGY4LCAweGM0NjczZjIyLAorCTB4NmFhY2RiODcsIDB4NmJjYTBmNjMsIDB4M2ZmYzJjOWEsIDB4YTVlZjg1YzYsIDB4OTAzZmZhZTEsIDB4OWMwYjM2MWUsCisJMHhiYWQzMzAxNSwgMHhkZTcyNGUzMSwgMHhiYTgwODVkZiwgMHhlMTk0Y2IwZSwgMHg4ZDdlYTQ3OCwgMHg4NGMxZjU0YSwKKwkweDI2ZjlkYzY4LCAweDA4ZmI0NDExLCAweGZmYzcyYTViLCAweGJiN2YwZDViLCAweDM2Zjk4ZjJlLCAweDNmZWU4OGU4LAorCTB4YzE0NGY3NzgsIDB4ZDcyMzZmY2YsIDB4MmM2N2RmOTAsIDB4ZGQwNjFkNjIsIDB4ZmMzZjc1ZTcsIDB4N2I4N2VlYTksCisJMHhlNDQ2ZmZjOSwgMHg3OGVkZDc5YiwgMHhmNWYwODkzYywgMHhhNzgxNWM5OSwgMHhlOGNmZTc4ZCwgMHg0ZDI2N2Q3MiwKKwkweDNiZjVlOWUwLCAweDc5OTE5YzEzLCAweDJiOTBlYWM3LCAweDM2ZGI1ZWFhLCAweDQyMzY3OWNhLCAweGViMWJkNzBmLAorCTB4YWQwYTRiZjAsIDB4M2Y2ZTgzNjMsIDB4YzkzZDlkZDUsIDB4ZjFlMzAxYjcsIDB4ZGM3MGQzYTcsIDB4YmYxNzFkOWEsCisJMHgzN2RlOGZiZCwgMHgzODg4NjQwZCwgMHg2ZWY5ZTAxYSwgMHhkNzE4MGY3OSwgMHg0NDE1ZjJkZiwgMHhkMjk3ZDJlMSwKKwkweDI1ZTU3ZTQ0LCAweDk1Y2IwYmEyLCAweGRmNTEzODU4LCAweDc3NmM2MjU2LCAweGZjYzZmOTUxLCAweDdjM2JiMjcyLAorCTB4YmViMDk2MWUsIDB4ODRjYzEzYWMsIDB4YjNmYjk2ZDMsIDB4NTNmNGM0Y2MsIDB4MmY2NzdkZTAsIDB4OWE1ZjZkMmUsCisJMHgwNGRjZjNjYSwgMHhjNWM1MzMzZSwgMHg5ZDVkYmY3NywgMHhjNjg2ZmQ0NCwgMHg0MzE5YzYzMywgMHgyYmQ0NTliOSwKKwkweDQxOWNjMDU3LCAweDI0NmI5YWY5LCAweDlmMzgwZGM2LCAweGVlZmI5ZThkLCAweGUyOTliMzE4LCAweGJiZGYzMWFmLAorCTB4MGVmMGJmZTAsIDB4ZjAwYWM1ZWEsIDB4ZjhjNmI4ZjIsIDB4N2U1MWE5MDAsIDB4OTBjYjAzZjgsIDB4YmYyNGVkMWMsCisJMHg5ODUzMmViYSwgMHg2Nzc1MzlmMiwgMHhkMWZlN2NhYywgMHhlYmYwMzBkZiwgMHhkZmNlOTAwNywgMHg1N2IxN2Q1NSwKKwkweGJiN2ZiYTQyLCAweGZiNTdlMDdhLCAweDRmYWRmOWYwLCAweGI1YzVkZmExLCAweDg3ZmRkYjY2LCAweGMzY2UyMmQzLAorCTB4OTE3ZGRjY2UsIDB4YzhmMTBjZWQsIDB4MzM5MjRmZjMsIDB4MjVlYWM5N2EsIDB4ZWFhMGY4ZmIsIDB4YmM0ODljYTUsCisJMHg2MTZkMjI3ZiwgMHhiMzA3YmQyNywgMHg0NzllZTJkMywgMHhhYjJiZWVjNCwgMHg2ZWQ5M2Y0OCwgMHg4Njk5YzY1NSwKKwkweGViYTdkZTVlLCAweDkzMGJkZDY1LCAweGQyNWQ3OWY5LCAweGZkNDQ3YWQwLCAweDU3ZjM5OTc5LCAweGJjYWMwNzc1LAorCTB4ZDc0NzdmYmYsIDB4YmYxN2FhODcsIDB4OWY5OTE5OTgsIDB4NTRiZDQxNmIsIDB4NzI3NGE4NzMsIDB4MmE5Y2U3NDksCisJMHhmMWNmNjZmMiwgMHg2ZmQ0YTljMSwgMHgyMWVmZWNhMywgMHhlOTc4MzkzZCwgMHhlZmFhNjRlMywgMHg1ZTRiZjM3OSwKKwkweDY1NzRkYzBmLCAweGYzMjNmN2Y0LCAweDliNWNmOTIyLCAweGY5MmVmMDM0LCAweDU2N2RlYTkzLCAweGE1NTBmMjk1LAorCTB4ZGQ4ZWYyZmIsIDB4NGU5YWY1OGUsIDB4OWViODNiZjQsIDB4MjM5ZWFlMGIsIDB4NmE3ZWQzNGYsIDB4OTc5NDA0YmYsCisJMHhiMDI3MDlhYSwgMHg5NTY5YWY3MywgMHhhYWM3OTQ4MiwgMHg2NWJkZGI2YSwgMHg5YWFiZDYwYywgMHhiYTkzMTc5NywKKwkweDNmMGIyNmQ2LCAweDA1MjJkMzU2LCAweGE3ZjAzYzY5LCAweDc0OGE3ZjMxLCAweDM1N2QyOGRiLCAweGIwMGIxZmVmLAorCTB4MThhOGVmYmQsIDB4Nzg3ZDVjZmYsIDB4NGZmNDU5ZWEsIDB4OWQ5ZjJkN2QsIDB4YjQzNjNhMjMsIDB4NzYzZjM5NTksCisJMHgxOTZjMjkyZSwgMHhkODVlZjM4MywgMHhlYTAyODUyZCwgMHhiOWY2ZGRiMCwgMHg1ZDZhM2VjNCwgMHhjZDBiMzFlOCwKKwkweGU1YjllZWJiLCAweGZiMGYwNGQ5LCAweDkwYjQ5ZGY2LCAweGZhZDc1YzdmLCAweGJjZmViOTU4LCAweDIwZmI4NDU4LAorCTB4OWRmYWM1ZGIsIDB4ZjMyMjkzMWQsIDB4ZmMyMWY3NDksIDB4ODFmOGM4ODMsIDB4ZjcwODA1ZjQsIDB4MDllMzkwODIsCisJMHhkYWFiM2U1ZCwgMHhiYjEyMzYyNywgMHg3ZGVkYWZkMCwgMHhlNmJmNjI1YSwgMHgzYmRmOTM3NCwgMHhmZmRmZWJiOCwKKwkweGZmZGRlNjk1LCAweGZmOTg5MzJmLCAweDdmYzY1N2M1LCAweDRmMTgwNWYwLCAweGMwZjNlOGQ0LCAweGRhMTY1M2Y5LAorCTB4OWFiNGQ2MWYsIDB4MTczYmM1Y2YsIDB4NzdkYmJlZmEsIDB4ZjBjNjdiOTUsIDB4NTcxNjM2ZmUsIDB4Mzg4MGIxNmYsCisJMHhjMTAwOTliNywgMHgzODFlMjllNywgMHg5MWFiMmMwNiwgMHgwNzUxMWY5ZSwgMHgwZTcxNDdhNCwgMHhkZDYwZDY1OCwKKwkweDcxNDY3NjQ2LCAweGM2MDhlM2MyLCAweGI5ZDcxN2RiLCAweGY3MGY5ZTE1LCAweDlkZTMxYjA4LCAweGVkZWFkNjU3LAorCTB4ODU4ZjZhYTUsIDB4OWUzNTcwZjIsIDB4NzVlOTBiNWUsIDB4NzExM2Y4NGQsIDB4NTFmNmRmNWUsIDB4YmY2NzE2YjksCisJMHg3ZTE2ZWQ1YywgMHhjMzAzZDBkMywgMHhhN2QyZWJkZSwgMHg4Nzk4NWRiMCwgMHhjNmM4NjBlMiwgMHg2NmI4NWY3NiwKKwkweGRkNTNlMjgwLCAweGRhMGVkNDdlLCAweDAzZmNiODE3LCAweDZmNjA3NzQ0LCAweDJiZWI0YTgyLCAweGNjYzlmN2RkLAorCTB4ZmU3OTg4OWUsIDB4NTE4N2RiYTQsIDB4YTNmOTc5YWYsIDB4ZTdlMjY2YTksIDB4MmFhNjhmOWUsIDB4ZmJjZmMzNDksCisJMHhlMmViMWMzMiwgMHhkZGFhNTVlNSwgMHg0ZTZmNGUyMiwgMHhiNjhmOWRmNiwgMHgxODZmMDQ4MywgMHhiNzY5YWRlNywKKwkweGRhMDdmOWYzLCAweGUyOGU5NmMxLCAweDc1YjgzYjQ4LCAweGYzZDIwZWRkLCAweDE2OGJkOTc2LCAweGNiNmQzNTAxLAorCTB4M2ZkYzBkZmQsIDB4OTFlMjRiYzksIDB4NDgwNjE2ZGIsIDB4OGZhNzY1MGYsIDB4OGFmZTEzZjUsIDB4Y2ZkNGNkZjMsCisJMHhhZTUyMjY3ZCwgMHhlOTFiN2ZkYiwgMHg0ZjA4ZTI5MSwgMHhkNDZiY2M4YSwgMHhkMTdlN2E5OCwgMHhiNzVjOTEyMSwKKwkweGFmOWEyNjZiLCAweGM5NmZkODA4LCAweGVmMGY1ZjBlLCAweDU0MzM4YTlmLCAweDllMWVjN2RhLCAweGE3YzQwZTUxLAorCTB4Mzg5MDFlOWYsIDB4ZjU0ZTZiNWYsIDB4ZjkyMmNkNmYsIDB4YmZiOTk1MWUsIDB4MDEwYmYwZTUsIDB4OWJlZTk3M2EsCisJMHg5ZjQ0YzUwNiwgMHg0ZTlmZGViMSwgMHhlMzhjODMwYiwgMHgyZjA0MmU2YywgMHhmZjc5YmI0ZCwgMHhkZmQyMWUyZCwKKwkweDYxMWZhNjlmLCAweDg2Zjc2MTdjLCAweDIzNGFmYzgwLCAweGU3Y2EwNmUyLCAweDYxNDIwYmQ4LCAweGQ3MjEyNzFhLAorCTB4M2NlMzJjNTcsIDB4ZjMyNzZlNzksIDB4N2JmNTYyY2IsIDB4NGQ5NDFmMjksIDB4NGQ4NzVjNzUsIDB4ZmEyM2FkZjEsCisJMHhiMTQ0ZWU2YywgMHg2NTdiMWU5ZiwgMHhiMjNlYmE3OSwgMHgxYmNlODU3ZiwgMHhlOTJmOWNmZCwgMHhlZDNkMGIzMywKKwkweDVmMTgwYWJiLCAweDM5OWQxZGYzLCAweGJlMDlhNGQ0LCAweDZiMmU3NmMxLCAweDQ2YTYzYWRiLCAweGYwNDRkYmM2LAorCTB4ZGY3OWU4ZGIsIDB4NDRiYzViZmUsIDB4ZDc1MTM5YmYsIDB4YjY0NDhjZjcsIDB4ZmZmOWQ4OGIsIDB4ZTQ5OWY0OTksCisJMHgzNWIzNWE2ZSwgMHg3YzRjZjg4YiwgMHg3YmY2NDc1MywgMHhmMDY3ZWY1YSwgMHgyZTdmMTQwMywgMHhhYTkyMmJkOSwKKwkweDhkMGZjYmM1LCAweDRlM2M5Nzc3LCAweGVhOWNkZDcyLCAweGYwMTU3NWNiLCAweGMzMDBhY2YxLCAweDc2YjhjNDllLAorCTB4NTdmZmZkODcsIDB4ZTkxZmZmNjQsIDB4ZjhhMmRjZmMsIDB4NGRkZmM0NmQsIDB4ZjE2Y2RkN2EsIDB4N2ZiNjRlYTksCisJMHgwZmYzNGE5ZiwgMHhmYzc0NmZhZCwgMHhmNmU5YjVmNSwgMHhmZjgyNjViYSwgMHg0ZmI3ZDcxYiwgMHgxNTM5OWY1ZiwKKwkweDRiYzY4ZGY1LCAweDRlNjdlZTA2LCAweGZmNDgwNjBlLCAweDc4YTA5MjlhLCAweGVjM2UzZTEzLCAweGRkOTBmNzJhLAorCTB4YzVmNDM5NmQsIDB4YTZmN2IyMzgsIDB4MjgwN2FmMjQsIDB4ZDY2MDc1YWYsIDB4MmRmYmIyMmEsIDB4ZmQ2MzZmYTMsCisJMHhiYzg1ZjRmZiwgMHg5ZTYyMzkyMiwgMHhhZDI1NjkxMywgMHg2OTdlYmZlNCwgMHhjZmUyY2JhYywgMHg0MmZjNzVhNSwKKwkweDVkNjMyM2Q3LCAweGFiZGY2ZWU5LCAweDExYmM4OGVlLCAweDkxNWY3NThjLCAweDlmYmU4MGZlLCAweDE3ZjFlYWYzLAorCTB4ZmY5YzczZjcsIDB4MmY0NDg3ZWIsIDB4ZDZlZTI3OWQsIDB4M2UwMmI3NzEsIDB4NzgzYjFiZDYsIDB4MWE1NWM2NTUsCisJMHgxZjdiYTMxYywgMHhkODI2MWQ4ZCwgMHhlNGE2Y2I0NiwgMHg1ZDM5YzQ1NCwgMHgzNjMyNmNiMiwgMHhiNzBkOWE3ZCwKKwkweDRjNmM3NGU2LCAweGViYmE2ZmVkLCAweGJkMjEzNDk2LCAweDBiMjAyMWZiLCAweGFmOWQxNjdjLCAweGE0ZDI0ZDAwLAorCTB4NmJjNTNjYzgsIDB4MTRmM2YxNTUsIDB4YzkxYmY4Y2YsIDB4OWU1NmZmMmUsIDB4YjRkODRlNjIsIDB4ZjdmMjkyZGEsCisJMHhiYWNlMmJlNywgMHg5ZjNkZjdhMywgMHgyYTI2NTViYSwgMHgzMWY0MmI5NCwgMHg4YTBjNGUxNCwgMHhhNzRjMTdiYywKKwkweGYxMzM1MzdkLCAweDA2N2JmZjEyLCAweDJkZjZjYWQ3LCAweDVjZGFlNWY1LCAweGZiZWU0ZjY4LCAweDhiMWQ2ZGI3LAorCTB4ZDYyZDk3NzYsIDB4ZmE0NmY1NGYsIDB4M2RjMGE3N2IsIDB4ZDc4ZmY5NDMsIDB4NDZlZTMwYTYsIDB4ZmVmMzI3M2YsCisJMHgxMmQzYTlkZiwgMHhjNDYyYjcyMywgMHg4OGY3YzA2YiwgMHgyN2YyYTM1MiwgMHgyNjVmMjNlMSwgMHg0YWVkN2U5MywKKwkweGI5MjJkZjU1LCAweDdjYzk3NDBjLCAweGU5NDEyNDRmLCAweGQ4ZTJiOGIxLCAweDAzYzIzZWQ5LCAweGQzOGJmN2U4LAorCTB4ZDZjNDNlYzUsIDB4NmQxN2NlMjYsIDB4MzE3ZWM2YWEsIDB4MjY5Y2U5YzEsIDB4NzljNWQ4NDcsIDB4NTc5ZmM4YjcsCisJMHg5YzYwZjkxZiwgMHgwNWRjMzEwNSwgMHgwMmU0ZjFkMywgMHhkZWMzN2YxYywgMHhjMzRhNjQ5NiwgMHhmNmYzM2ZhZCwKKwkweDUzOTJiYTRjLCAweGU5MWRmOGEyLCAweGE1NGZmZWI4LCAweGMyMzYzOTFkLCAweDUzODM1YmE5LCAweGYwYTEzZjg5LAorCTB4OTNmMjE0ODQsIDB4OTQwNDBhODUsIDB4ZjFmMTM4YTIsIDB4MTRkZTIyYTksIDB4ODdjNTNjZDcsIDB4M2VkODUwZmYsCisJMHhlNWUxMmQ3ZCwgMHgyZjU4YjBkYSwgMHhhNmM2NjFjZCwgMHg3YWUwMzZiYywgMHgyYTYzNWI1ZiwgMHg2ZmZiNTc4ZCwKKwkweGJmOTM0NjA3LCAweGUwNWQyOTdhLCAweDRkMmYxNzlhLCAweGEwMmJlZjExLCAweDc0YWNmZjUwLCAweDQxZTdhZTk3LAorCTB4NWYwYmU1MTMsIDB4N2Q4Y2YzZDIsIDB4Y2ZkYzRjOTcsIDB4NmRiMGJmOTgsIDB4M2Q0NGVjYTEsIDB4M2Y2ZjA4MjgsCisJMHg3NmNkNzljNCwgMHg0ZGYyNGFhYiwgMHgzZjA0MGU3OCwgMHg3NzE4MTNkYSwgMHgwYzVjMWVkNiwgMHg1ZGZhZTcxNCwKKwkweDdkYjA5NWUwLCAweDZmYzBlMjU3LCAweDBlMDYxZjQ5LCAweDc3M2E1NTU4LCAweDg3NmU3MDRkLCAweDk3N2YxYzU0LAorCTB4MGYyYjRmN2UsIDB4MzFjNWIyMTUsIDB4MmY5OGRjZmMsIDB4OTRlN2ZkYTEsIDB4ZTBiZDI0MTMsIDB4NjUwNGRmZjMsCisJMHg4OGUzNWMzYiwgMHhkMzEyNzdlNCwgMHhkNWViYTI1ZCwgMHg4OWIwYzRhZSwgMHgyNjA2NDVjZSwgMHhlOTg3NWVlMSwKKwkweDc4MTNhNjFhLCAweDNjY2U4MzVlLCAweDJjYmJmYmY2LCAweGUwN2VlNzAzLCAweGE0OWNiYTY2LCAweGU4MjA3OTA3LAorCTB4MmFjOWY2ODQsIDB4YTcwNGQxZjksIDB4NzA0OGViYzYsIDB4MzQ4MGRlYWEsIDB4YTlkYWFlOTIsIDB4NmVkMGZjMDgsCisJMHgzNWU3MjUxZSwgMHg2YmFlZDg3NywgMHgzNmViODcxMywgMHgxMzVkODViNCwgMHhmZjhmM2Y0MCwgMHg4ZjNhMzZkNSwKKwkweDgzOTNhYTFmLCAweGZlZmMzZDk5LCAweDZjMmZlOTJkLCAweGY5Y2IxYTZiLCAweGEyOGM4MGJkLCAweDk0OTk2M2I2LAorCTB4Nzk1NGViNGEsIDB4YjU0NWU4N2QsIDB4MDdjMTIyZjQsIDB4Yjc2N2FmYmEsIDB4ZmVhMWY2ODksIDB4YWEwZWU3YTgsCisJMHhhZjNmNDQzYiwgMHg5MjVmNjlkNSwgMHg4NzQyZjZjNSwgMHhmMDc4NDNkNywgMHhlZTdjMjk3ZSwgMHhkZWQ3YjQ1YSwKKwkweDA1Mjk3Y2M3LCAweGQzNWVhZWI4LCAweGIxOWEwN2ExLCAweDg3NTY5ZmRmLCAweGU5M2VlODcyLCAweDFhZmY1NjczLAorCTB4M2U1N2NmZDIsIDB4MjE0OGYzNWMsIDB4NjY1ZGRiZjksIDB4OWRmOTI1NmYsIDB4MThjZmMwOWUsIDB4NTY2OGJmODcsCisJMHgxZGQ4NDViNywgMHhlMGM4MWQ4YywgMHhmMzMxODBmYiwgMHhmNGQ5OWVkNCwgMHhmZGQ3YzIzMywgMHhjZTk1MjVmYiwKKwkweDAzY2RmYmJkLCAweDlhZWU4OGUzLCAweGU4NWEzZmY2LCAweGZlZWQ2NGJlLCAweDRiNGYxODhmLCAweDlhMWFmZTE5LAorCTB4MDM1Yjc2NmYsIDB4MDM5YjZiZGYsIDB4MWI1ZWY5ZGIsIDB4OWZiZTQzZmEsIDB4N2YwOGYyMTgsIDB4ZTczYTc4MzIsCisJMHgzOTA4ODZkOSwgMHhlYzJlOTEzYywgMHhlM2ZjMDYwZCwgMHhlYmI1NWUyOSwgMHhmNjkwN2FmNiwgMHhlZGVlNThkZCwKKwkweDhkMjI3NWI4LCAweDA3Y2Y1N2JmLCAweGMwMzVlZjE4LCAweGY3YzQzMWExLCAweDk3MWFmMDRkLCAweGEwZmVmM2M2LAorCTB4OTY3YTQxNTIsIDB4NGVlZGFlZmYsIDB4YTNmZmEyMmQsIDB4M2RiZjAyZTksIDB4NjY3MDJlOWEsIDB4ODliZjg2NzYsCisJMHhmMWRmNWRlOCwgMHhkNjk5MjViMSwgMHg4ZTM0MzY3OSwgMHg0NTIxYjlmNiwgMHhmMWM2NzE0ZCwgMHgxYmY2NDMyMywKKwkweGNhYjU0ZjYzLCAweGQ3ZmE4NTgwLCAweDJiZjYwNzllLCAweDE0YTZlZjI4LCAweGVmNGJkZjk0LCAweDhkNTk0ZGI2LAorCTB4NGNhMmY3Y2YsIDB4ZTJhZTI4NTIsIDB4ZWZlMjk0ZmUsIDB4MGM2ZmIzNWUsIDB4ZTc3ODZmZjUsIDB4YzdlNGE5ZjMsCisJMHhlNzRmNDgxZSwgMHg2MDdlN2ZmNSwgMHgxYmUyNzhmZCwgMHgyMjQ5N2ZlYSwgMHg2MDZlZDlkOSwgMHg2OWQ4NjZiZiwKKwkweGJlMjlkOTAxLCAweDVmZmE0MDVmLCAweGY2M2NmNTRjLCAweGRkMmNiYmNiLCAweGY3MmVkODRiLCAweDEyZWM4MDlhLAorCTB4MDFlZDlmZjUsIDB4Zjg0OWRmZjUsIDB4ZjY4OWMwYWUsIDB4NjY0ZmVmYzAsIDB4NmRkNWRmM2IsIDB4YTMyNzE4ZDIsCisJMHhmNWM0OWY1ZiwgMHhiZWE5MWI5MiwgMHhjOWNjYmJhYiwgMHgwNWY3NGU3NiwgMHhjMzVlYzg4YSwgMHgxMDljNzg4NywKKwkweDlkMTIyNGMwLCAweGZjYThiZTA0LCAweGU5OTkzYjg4LCAweGU3ZTVmYzM2LCAweDg2ZTNkMDZlLCAweDc1YzVlMjlhLAorCTB4Y2EzOTY1ZDgsIDB4YTRlMjIyM2UsIDB4ZjQ3MTFiYTgsIDB4OWVkYjMzYzksIDB4ZWU4MTdiNDAsIDB4MGZkYzI4ZDQsCisJMHhmZmJmMGJlZiwgMHhkNTU2M2Q1ZCwgMHg1OTc3M2ViZCwgMHhlZWIzYWUzMywgMHgwN2VkY2M4NCwgMHg1ODVlN2RmNSwKKwkweDdhNDM5M2Q3LCAweDg2ZTI4NjdlLCAweGVmZGM1ZDNhLCAweGIwMzNlN2E1LCAweDY3NWRmNzRlLCAweDA5NGIxYjZhLAorCTB4ZDhhZWNkNjMsIDB4YjljYTk4N2UsIDB4NDEyOTUwYmUsIDB4YmFhYmY5YzgsIDB4OTk4NTliMGYsIDB4YjVmZTkzZTcsCisJMHg5ZjJlYmExZSwgMHg5ZmY1Y2RlZSwgMHg5MjAyNDJiMSwgMHhjMGU1ZmFkOCwgMHhiNWM0NWY2ZiwgMHhmOTEwNzAzZCwKKwkweGUxNGUyNzFmLCAweDEwZmY1ODcyLCAweGNmMDE4ZDZmLCAweGM5N2VmNmM4LCAweDRiYmQyM2YwLCAweDVhZmIxZjQ4LAorCTB4MTIzYWUxZTUsIDB4NGQ4YTgzNTIsIDB4M2ZkMjc3ZjUsIDB4YmFjMDE2ZGQsIDB4OWY3YjQzM2YsIDB4OTljN2UyNTQsCisJMHgzZjQ5ZjdmZSwgMHg5OTdlNGZmYiwgMHhmN2I5NjY0MSwgMHhiN2M3ZDhiNCwgMHhkMjdjYjQ1YSwgMHhiODA5ZDY5ZiwKKwkweGE3YTM4ZGI1LCAweDNjOGJhNWFmLCAweGUyMTViMTRmLCAweGE1N2U0YjllLCAweDAwOWNjMWM3LCAweGZlZjEyMjNjLAorCTB4NTEwNjc2NWMsIDB4NjU1YTE3ZWUsIDB4ZTdmODgyY2QsIDB4Y2U1NjA0M2MsIDB4ZTdhMzdmMjMsIDB4ZmQwMWVmNmYsCisJMHg5NDFmZTFhNywgMHhmNTdhYmRjZiwgMHgxODJiYzIxZSwgMHg2MjdkZWViNywgMHg4OWJmYjljNCwgMHhiYjZkNjlmNCwKKwkweDZiODRmZjA0LCAweGZjNGNmNzVmLCAweDVlNDYwOTdiLCAweDFkYjZiZWViLCAweDNjYTBjNjQ3LCAweGVlOGI5ZWFiLAorCTB4OWVlODYxYjcsIDB4YmRmNzg4N2IsIDB4ZWZhMzlhMWIsIDB4YWU5NTdjMWIsIDB4MzA4OTk2ZTMsIDB4ZWEwYjcwOTEsCisJMHhiMzA3ZmIxMywgMHhkNDU2OWQwMiwgMHhmZDMyNTdkZiwgMHg3ZTVlMTA5ZiwgMHg4NGY4MjRjOSwgMHhmMmVkOTU3ZSwKKwkweDY3MWViNzEzLCAweDFhM2Y4NDRhLCAweDhmN2MwMGI4LCAweGU4Njc2ZjI4LCAweDk5ZDdkZDMwLCAweGE1ZTU5Y2RiLAorCTB4YTIyYWU2MzksIDB4MTY1YjZlN2QsIDB4ODI1MDE5YzcsIDB4OTgzN2RkMzIsIDB4MTljYmY5YWQsIDB4ZDNiNDA3NWYsCisJMHg5ZDY0MmY3NCwgMHg4OWMxMjdlZSwgMHhhM2JmMjg3ZiwgMHg4ZTlkNmJhZiwgMHg0NjBiZWVlNywgMHg4MjA3M2RkMywKKwkweGRhY2YzNDhkLCAweGQxZmVlMjlkLCAweGJmZjE5ZGZhLCAweGM3ZDVhODEzLCAweGM5ZDRmMGQ5LCAweGFjMGU5NDIzLAorCTB4YWJmNzQ1MGUsIDB4ZGI1M2Y5ZDUsIDB4MDViY2ZkMTYsIDB4OWYxODEyNzgsIDB4ZmNjZjdkMTEsIDB4ZmM0M2VmNGEsCisJMHhjNWYwMmNjOSwgMHg0NjM4ZmFkYiwgMHhjMjE5YjVmYiwgMHg3OTIwZDY3ZiwgMHg0MTBkZGYyNCwgMHhiMzdhNDgzOSwKKwkweDBiMjQwYTRlLCAweGQ1OGUwYjdjLCAweDg2NWRmNzQ4LCAweDY1ZjdlOGJlLCAweDczZjlkNmVmLCAweGJjMmZhZTk3LAorCTB4ZmFiZjdjMmUsIDB4ZTc0ODI5MTksIDB4MjRmZjc3ODAsIDB4NDI3YmZlOWEsIDB4MWY0OWNiYWIsIDB4NWQ2YWY1NjIsCisJMHg2ZGYxOTliMywgMHgxMGI0NmMxNSwgMHhhYmQ1OGRiZSwgMHhkOTdkMjFhYSwgMHgxNjM4YTE2ZSwgMHg3ZTM1NGZhYiwKKwkweDBiNzQzMmU5LCAweDRiN2ZmZTVjLCAweDk4NzM3YWY3LCAweGZmZWI0Y2YzLCAweDNjYTVlNGE3LCAweGRmYWRiZGQ0LAorCTB4NzQ1ZTUwYjEsIDB4ZjkwODdkYTQsIDB4YTI3YTE5NTYsIDB4NWRlZmViYWYsIDB4N2M4NmVkY2YsIDB4OTYxNGMwYTcsCisJMHgxNWRhNDU2ZiwgMHhmMWEyODNlZSwgMHg1MGNiNmVmNCwgMHg3Y2YzOTI5ZSwgMHgzODEzOWQ4MywgMHg1MWU4NmUzZiwKKwkweDNhZTUzOGVjLCAweDE0ZmM1ZjJlLCAweGFkYTE3OTcwLCAweGEyZjg0ZWQ0LCAweDJiYzliOGZmLCAweDRjN2Y5Y2E5LAorCTB4NGMzZTQ0MmUsIDB4ZTEwMzIwM2YsIDB4ODlmNmZlOGQsIDB4ZmU5MDA3OGYsIDB4MzdjNTEzYTIsIDB4ZmE3Y2JlNTIsCisJMHhkODNmOGMwOSwgMHhmOGIzYTdiZSwgMHgxMTVmZTQ1NywgMHg3ZDkxYTRlMSwgMHg0ZWNhZWMyZiwgMHhjNzgzYmRmYiwKKwkweDdmZGRmOGUxLCAweDRhZjFlOGJjLCAweGNiYzdjM2YyLCAweDA5NWM2OThhLCAweDc4N2VlOWRiLCAweDFhODcxZTkxLAorCTB4N2JkOTE3OGUsIDB4ZmRkMWUyMjIsIDB4YmVkZjIyMTksIDB4NDdmYmYzYzUsIDB4NzhiMDVmNjksIDB4Zjk0YmQ5YjcsCisJMHhmZjY2YzU4ZSwgMHhhZmE0MDRhNiwgMHhkYmM5MDVlOCwgMHhlOTFkYjM4MCwgMHg4ZDI0ZjQzZSwgMHg1MmE0ZjY4YiwKKwkweGVlZjE2NmJlLCAweGY2YTIxZGVmLCAweGQzMTI1ZGRhLCAweDI4YmVkZmRmLCAweGM3YzUxNzdmLCAweGI4YTVlY2EwLAorCTB4NTc3ZWRmZDcsIDB4NzM4NGJkYzEsIDB4NzA1M2RjMGUsIDB4NDc3Y2M0NTcsIDB4NTk1Zjg1NTIsIDB4ZTM5OTk1N2MsCisJMHhmYjY4ZWY3MSwgMHhjZjI5MmIyZiwgMHhmZjYwZWRhOSwgMHgxZWVhZmJkMCwgMHhiMDU3N2YwYiwgMHhhZTBmMDI0YiwKKwkweGYwZTc4OGYzLCAweGJkMGY4OWFmLCAweDA4NWE0ZWZiLCAweDllYjY5N2U0LCAweGYxYzRmNGI0LCAweDAxNzk0NmNmLAorCTB4Y2U2MTcxYjcsIDB4ZjBiNzZlYmYsIDB4N2ZiZGNhM2QsIDB4NmI3YWQwYjAsIDB4ZjM4OGZiOWUsIDB4MTI2ZDU1NjksCisJMHg2N2FhYTdmYiwgMHg3OTRhYTBlNCwgMHg1OGFmMDM5ZSwgMHg5YTZiM2Y0OCwgMHg4YWNjYzgyNSwgMHgzYjczMzc2YywKKwkweGZmYWE1MWY5LCAweDY1Zjg1OWIxLCAweGU4ZDdlZjQzLCAweGJkZTg2ZTdhLCAweDc0NmIwNzYxLCAweGQ2ZDc3NWZmLAorCTB4MTdiZjNkNjgsIDB4ZjFhMzJkYjQsIDB4NTc5YTdiZmQsIDB4N2JhMDNkZjMsIDB4NWZmN2M3YjYsIDB4NGI1YzFmODYsCisJMHgyYjhjNTJmYiwgMHhlZThhOWY2YiwgMHg3ZTkwZGY3NywgMHhjN2JmZDgwNywgMHgzMjU3YzlmYSwgMHgzY2Q4ZjNmNCwKKwkweDFlZmQyM2M4LCAweGFmMTlhZjBjLCAweDdlN2QzZGEwLCAweGM0M2M2YWIyLCAweGQ3MWUzYmM5LCAweDhmMTE4MGYxLAorCTB4OGUyNmMzMDcsIDB4ZmFmZGIxNjcsIDB4Mjg1YTJlZGEsIDB4ZmU3NmQ2OGUsIDB4Nzk2YmYxOTksIDB4ODcyYzY3ZmIsCisJMHhiZTBlZjZjYSwgMHhmODNkN2FhZiwgMHhhZjFmMTAzNywgMHgwOTNiYjc2ZiwgMHgwOGY2NTc0NywgMHg2ZWQyNWZiYiwKKwkweDZhMjUwNjBkLCAweDdjOTEzNTBmLCAweGVmOGEwZmZiLCAweDRhYWYwMjNiLCAweGY3NDBhMzhjLCAweDdlNzU2YjdmLAorCTB4YjdmOWQ1YWUsIDB4NjM2N2Y3MTYsIDB4YmU4YWRlZTgsIDB4NzcyZmJlZmYsIDB4ZTJiYTExYzcsIDB4ZGYzZmEzNTEsCisJMHg5OTM4NzVkMCwgMHg4NDA0YjhmOCwgMHgxMjEyNWE3ZiwgMHg4NzkwYzlmZSwgMHhjNjQ2NWYxMSwgMHg5MzZmODFkMSwKKwkweDViYjdkNzNjLCAweDUyZjhiZWY5LCAweDZkMmQzZmRkLCAweGM1OTNkZjE2LCAweDUxZmU4YmZhLCAweGRkZmY5MTc2LAorCTB4OGQ4ZGU4MmIsIDB4ZDFhZDM1YTcsIDB4ZDIzMmJiZmQsIDB4ZWEwZmRmZDksIDB4YzMxM2Y4NzgsIDB4YThmMmU4ZGYsCisJMHhlNTNiMDAxYywgMHhiMmE4OTdlNywgMHg3NTZmYzgzNywgMHhlNzdmMzQyYiwgMHg2M2NmODk1NCwgMHgyOTg5ZDUzYiwKKwkweDE5NGJlZWYxLCAweGNlM2E5YmU1LCAweDI4Y2JlYTM3LCAweDQzZmQ4NjRmLCAweGM4OGVlZGNlLCAweDk5OGRmYzdkLAorCTB4Y2Q1NGFmMDIsIDB4Y2YyNDAzOTEsIDB4YjJjZjdkODgsIDB4ZmJiOGFjYTIsIDB4YmE0NGM4MWUsIDB4ZDc3YjE4ZGYsCisJMHhlZTQ1YTY0ZiwgMHgzOTFkYjQ3YiwgMHhmMjNmNjdhNCwgMHhmNzQ5NWUzYywgMHg4NTliNmE4YywgMHg4ZDliZTg3ZiwKKwkweDhlMTBhNmUzLCAweGI1YzVjNjA3LCAweGVkMjBkNmNkLCAweDRmNTE2YTRmLCAweGQyMzA3YmY4LCAweDc2YmZiMjBmLAorCTB4MDdlOTExNjksIDB4OTkxYzFiZWUsIDB4M2E3MmNmNDgsIDB4MmZmNWM0YWEsIDB4OGUzOGMzNmYsIDB4ZmIyZjJmYzMsCisJMHgyYmFhZjU4YywgMHhmOTFiYWM1YiwgMHgxZjZmMTk5NiwgMHg2YTFmZWM2MSwgMHg2YTljMDkyZSwgMHg3YTUxYWYzYywKKwkweGQzNTExZjc4LCAweGI3NDllZTJlLCAweDVjNjJmYTFlLCAweDdmZGJkMjE2LCAweGFkYzYzZmUwLCAweGE2NDE3MmM2LAorCTB4MjVhZGJmODgsIDB4YmVlOThmYTEsIDB4NmNiYmU3Y2YsIDB4OTBlOGYxNzEsIDB4ZDg5YTk3YmYsIDB4M2RjYzZhMGUsCisJMHhmNjU3OGMxOSwgMHg4NTljMmUyMywgMHg0ZmVkZjM3ZSwgMHg3YWQxZGY3OSwgMHhjYTRlZTEyOCwgMHhmMWFkZjVjNywKKwkweDgzN2U3NzhmLCAweDEzNjAxYTljLCAweGQwNGRkYWUzLCAweDllZTEyNWM0LCAweGQ2YjgxYzQ4LCAweGRkMGZlZTI5LAorCTB4YWE0OWM3YWIsIDB4N2Q3YThjM2YsIDB4NTA1ZGY2MmYsIDB4MDNlZWNmMTQsIDB4MjM0OWU2NWIsIDB4MWJmMGRkZWQsCisJMHhhZmJlYmFkNSwgMHg4NWIxZDgyZiwgMHhmMTYzZTA4ZSwgMHg0NzZlYjU1MSwgMHgyZTM5ZmM4OCwgMHgxYmEyZTJjNiwKKwkweGI0ZjVhMzMzLCAweGM2NDRlZGUxLCAweGIyNWRmZGI5LCAweGM4YzQ3MjkzLCAweDI2OGM1ZmQ3LCAweDdlZjg4N2RjLAorCTB4ZWIzYzljNDIsIDB4ZjY1ZWJhYTcsIDB4MGRiZWU3ZWEsIDB4OWJlNjY1YjMsIDB4MGQyODhlNjksIDB4NjNmYzg1MWMsCisJMHhlOTNmZTk3ZCwgMHhjYjFjNTIwOCwgMHgwNGNhZjgzZiwgMHg5ZGZhZmY5MiwgMHgyNDQ1ZTdkMSwgMHhkZmRmM2YzZiwKKwkweGFhZmNiMjBhLCAweDQzM2U3NjQzLCAweDNhNWZkYTMyLCAweGQyMTRjYWY4LCAweGJmYjc4NmIzLCAweGY5NzIxMWNjLAorCTB4YmVlMmM3MjIsIDB4Mjk0NjdkM2MsIDB4NmJmZjYyNDksIDB4NzdmZWM0OTIsIDB4NGM5M2QyYWYsIDB4ZmRkYWFlZmIsCisJMHhmZWYyMmZiMiwgMHhiYmU3MjFiYywgMHg0NTAxZmQ3NSwgMHg2NWQ3ZjNlYywgMHg2ODZmNWNhYSwgMHgzYTYxN2ExNywKKwkweDdmOWM0YTIwLCAweDk4ZjNjOGE1LCAweGVkMTFmZTc5LCAweGRmMmZhODI1LCAweGU4ODBiNzEwLCAweDlhZDdkOTQyLAorCTB4NmFlZjU4MDcsIDB4OWU5ODlhNGYsIDB4MTk4MzkzZGEsIDB4MDVlZjExZDksIDB4ZjI0Y2RjNjgsIDB4ODAxYjBkN2IsCisJMHhjODFkODhmZCwgMHhlZmE1MmViZiwgMHhmNGJlYjEwZiwgMHg1OWM2MDRmZCwgMHg1MjNjMjY0NywgMHg2NGFkY2UyOSwKKwkweGMwZjViZjIwLCAweDIzOTM1NWRiLCAweDNkMDVmZmZkLCAweGMxZjEwM2VlLCAweDA5ZTcyODQzLCAweDg3Y2ViZjMxLAorCTB4Y2Y0MmIwNGQsIDB4YWUzZDA4MTMsIDB4ZWUyYzcxZDIsIDB4OGVjODlhYWYsIDB4NTc1N2Y3NjMsIDB4MGUxYjkzOGEsCisJMHhjN2YyODE1OCwgMHhmOTU4MWZiNSwgMHgwN2U3ZDAzZSwgMHgxZGZlZjJkNiwgMHg5MzI3ZjkyZSwgMHhmZmJmMDE5ZiwKKwkweDM4MWYyYTZhLCAweDNkMzI3NmI4LCAweDdkZTBmY2ZmLCAweDUzZGU3MzU3LCAweGFmOTUxNGRhLCAweDFlN2QxMDA4LAorCTB4Nzk3ZjUxYzIsIDB4OTdjMjc2ZjcsIDB4OTBlMzBhNWQsIDB4ZWZkM2FlYTIsIDB4OWVlYWY5ZDIsIDB4OWI3ZjMzNTYsCisJMHhjNjc3YmQ1OSwgMHhjMjI0ODFlMywgMHhlOTRiNDU0ZiwgMHg5ZDNkOWRiYiwgMHhlMjFmZWIwYSwgMHhkOTQ3MDMyYSwKKwkweDI4OWQ0NzE5LCAweGUzODUxYzY2LCAweDE2NWM4MmY4LCAweDcxYTRhYjFmLCAweDUzMTQ5NDRmLCAweGM5ZGIwOTM3LAorCTB4MWMyNzRkOWYsIDB4NTVjNjE4ZTUsIDB4OWNmZjNkMDYsIDB4ZGZkOWY4MjksIDB4MTNmOWMwOTEsIDB4M2QwODI2MDksCisJMHhiYTI4ZWM4MywgMHhjZWJlYjQzNywgMHg5YjQzNjQzOCwgMHg4NmJkZjUxYywgMHg0Y2VlZGVmMSwgMHhkN2IwYWU3MSwKKwkweGE0OTBiM2QwLCAweDE2ZWQxZWIxLCAweDNkYjY4NmU1LCAweGY1OGViNDE5LCAweDQ5ZWIxMGU2LCAweGI0NTliMzQzLAorCTB4ZDAyNTEyZWYsIDB4ZmUwY2NkZjksIDB4ZmM0MDM4ZDgsIDB4NTA4ZjQ2MzksIDB4YzEyYzRiMmUsIDB4NzdkYjg0YjEsCisJMHhlYTA3OWQwZiwgMHhlMjgyMzlmNywgMHhlNzYzNWQ1ZSwgMHg2ODZlZmU0NCwgMHgzYjhmNzNiMCwgMHg0ZTM5ZmM1ZSwKKwkweGRhNDgzM2U3LCAweGNmYjEyY2QxLCAweGYzYWY2ZDg5LCAweGQxYzY3Yzg4LCAweDFlMmZjMjMzLCAweDFjOWZlODVkLAorCTB4YTAwNjNmY2YsIDB4MjVmYmVjNDQsIDB4ZTZhZDdlNWQsIDB4ODZlNzc4OGEsIDB4ZGYyMjNkMWIsIDB4ZTA2YzczYjQsCisJMHhlZjcxZTkyOCwgMHgzNzNlMDRlZSwgMHhmYzg5NzVlYywgMHg5NzRiNjk2YywgMHhhYzlmZGY0MiwgMHg1MDY2OTU2ZiwKKwkweGZiOWY1YTNjLCAweDgyOWY3ZjFlLCAweDgzZjY2MmY1LCAweDZlN2NmZGUxLCAweGJiYmNkZDVhLCAweGM3NDM4YjVjLAorCTB4MWYxMTFlYjUsIDB4MDFkZmU4OTcsIDB4YmQ1N2QwOGYsIDB4ZDM3ODE0ZmQsIDB4MjNkYTdkZjUsIDB4YWE3MzVlNzQsCisJMHhkZjE0ZWNkMiwgMHg0YWVmODk5OSwgMHhmOWZkZDA2ZiwgMHgxOTliZDc4ZCwgMHhkNTAyOWQzNywgMHhjNDNmY2UyYywKKwkweGRkMzJjNTM5LCAweGZiYTBkZjJmLCAweDNiZGYxMWY5LCAweGU5OWIwMzNmLCAweDdiZjYyMjljLCAweGRmYWZjMzY3LAorCTB4MDJiZjhmYWMsIDB4ZjYzNzFlMzQsIDB4NzU5YmY1YmIsIDB4MmZiMzc4M2MsIDB4NGNhNWY5ZmEsIDB4NDBlNjA3MWQsCisJMHgxMGYzZjkwZSwgMHgxZmJlMTdjNiwgMHg3MWMwOTc5MSwgMHhhNGUxNjk3YSwgMHhiZTgzMzhiOCwgMHhlZmY1NTcwMywKKwkweGU0MzRhOWMwLCAweDFlZjc5MGRlLCAweDFkYTNiZmM3LCAweGRmY2Q3ZTY3LCAweDgwNDk5YzEzLCAweGM1Y2U3MTA5LAorCTB4ZTE5ZmUzODYsIDB4ZjIxMjZlM2YsIDB4YWEyZGNmZDYsIDB4NDM0NjgyOWQsIDB4MDc3MDE3ZWUsIDB4MzMxZjk5MTYsCisJMHhlNzQ2M2VlNCwgMHgzZGYxZmZmZiwgMHgyMjUwNWNhMCwgMHhjYWNmMjVmMywgMHgzYTFlMzFmZSwgMHgzMmY1YjA5ZiwKKwkweDcwMTVjNmZlLCAweDhkNzVjNDFjLCAweGNlMzVkN2QzLCAweDJlZGYxMTFhLCAweDU3MWQ1YThjLCAweDk3ZDc4NzdmLAorCTB4YzQ3MTEwMWEsIDB4OWU0NzY1Y2QsIDB4NzU2MjcxOTUsIDB4ZmJlZmUyNDgsIDB4NWY2MmMzYWEsIDB4ZjYyNjVkNWIsCisJMHgwMmFkMzliNSwgMHg0OWJjYWVhNywgMHhiYjEyNmEwYSwgMHg5ZjQ0ZDNjMywgMHg2Y2NiM2ZhMSwgMHg3YTE4MGYwMiwKKwkweDVkMmZjNDMyLCAweGYwOWRhODdmLCAweDNlM2EwZGMxLCAweGM5YTNkNTg4LCAweGY5NGU1ZGQwLCAweGM5MzQ1YmU2LAorCTB4NDcyYWY3NGIsIDB4NmFiZjNmN2MsIDB4ZWVlNGViZGEsIDB4YTgzZmE3MmYsIDB4MjJlZmZjNmYsIDB4ZjdkMWVhYzQsCisJMHgwZjEyZmUzZCwgMHgwN2JhZDNlNSwgMHhiOGUyMTY1NywgMHgzOGZlZjM0NywgMHhlNmE2ZjQ4ZSwgMHgyZGYzNzYzMiwKKwkweDNiMTM4ODhmLCAweDdjYTM4MTFkLCAweDNmNDVhNGRmLCAweDZiYzk2ZmVmLCAweDc0N2UyMWViLCAweDVlYzdlMzAyLAorCTB4M2E5NmY3NTcsIDB4YmNmOWFiODEsIDB4YzA5YzNhYmYsIDB4Yjc1NjQzZGYsIDB4YjBiYmY5ZGIsIDB4YzQ4NmQ2ZWEsCisJMHhkYjdmZTQyOSwgMHhlYjFkYWY2NSwgMHhjYjI3YWQ5NSwgMHhjNTk1OWY4OCwgMHhhZDRhM2VlMiwgMHhiMzhiZGM1ZCwKKwkweDEwYjdmZGI5LCAweDNiN2JkNzdkLCAweDJkZjljZmEyLCAweGZiYThiZjNkLCAweGY1OGYzZDA2LCAweGEzMDkxYjZiLAorCTB4ZjlmN2ZmYTUsIDB4NWYzYThkOWIsIDB4NjYyZWJhZWEsIDB4ZmVhOWMxNGMsIDB4MjZhZmU2OTAsIDB4ZmQ3ZmVjN2QsCisJMHhkNzFkMGI0NSwgMHhhNTc5NGVkNSwgMHg2ZDg4YWU5YywgMHhlZmRjYThmNCwgMHgyNjhlZTZmYSwgMHhmNDFhZjM0YSwKKwkweGY5M2E2NDc3LCAweDcwNzM1MWY5LCAweDgyZDJlMzJjLCAweGQzMGZiYjJiLCAweGE5OGRmZmIwLCAweDNhZmFhNzE0LAorCTB4MjI1YWE2YmEsIDB4MGViN2JiZjQsIDB4ZjkxYzczZmQsIDB4Yjc0OTgwMzUsIDB4NDk0Yjg1NWIsIDB4MjVlM2ExNWEsCisJMHgwN2I1Yzc2MSwgMHgzZTUwNjcwZSwgMHhiN2VjOTdhMiwgMHg5Mjc3Y2E4MCwgMHhkZWFjYjFiMywgMHgxMjc5MmE3ZCwKKwkweGEyYmQ5NmUxLCAweGVkMTljMjFjLCAweGE1MDNmNzMyLCAweGE0ZTZlNzI3LCAweDMzMzZmYTQ4LCAweDYyNDIxNzdkLAorCTB4OWM5ZTgwMWMsIDB4ZGIyMzBiMWIsIDB4ZGI1ZmZmMWIsIDB4MjdhNGQzZmYsIDB4Mjg5ZWI2ZDUsIDB4ODRmODM3ZmIsCisJMHgzZWZlN2NiYiwgMHhjYWQwNzAzNywgMHhiY2U4MDhmNywgMHhjNzIxMTVjNiwgMHgzNDdmNzQ1NywgMHg2NDRiMzcwYiwKKwkweDdjZTg3M2E3LCAweDNiNDEyMjdhLCAweGJhYTBlZTA1LCAweDk1MjU2MTAyLCAweGIyYzM4YmNlLCAweDk2Mzc3ZmI4LAorCTB4N2Q0Y2Y3ZmQsIDB4Yjg0YTU5ZmUsIDB4Y2VlOWVlODMsIDB4ZTczN2NmZDEsIDB4NWJmNzM3NDIsIDB4NmE1YzAzMDAsCisJMHg4YmVmZTRlMCwgMHhlNWNiYzA0YiwgMHgyOTc4NWI2YywgMHg1MDgyZjFjMSwgMHgwOTlmYmY4OCwgMHg3M2FlMjg2NywKKwkweGU2M2JmZDM2LCAweGU2MWVmMjM4LCAweDBjZTcwMjliLCAweDBlNzRjODdlLCAweGM1MWJlZTI2LCAweGQ3NWJhN2FlLAorCTB4ZjA5YTU5YzcsIDB4ZTgxZDA0M2IsIDB4MDg2Y2VlN2UsIDB4MzVmYmI5ZjEsIDB4YmY5ZmEzZDAsIDB4M2NjNzVmYzcsCisJMHhiOWQxZjdkYywgMHgzYjY4MzVkYiwgMHgyMDhmY2M4OSwgMHhlYjRmOWZmNywgMHhhN2FkZTM5MSwgMHgxOThiMjk2NywKKwkweDlmNDQ5Y2NhLCAweDdkMzBjZTE0LCAweDc1ZjJiZjZkLCAweDRkNmRkM2Y0LCAweDM1ZGY1N2NhLCAweGUyODNmN2QwLAorCTB4NmY0YjczZTEsIDB4ZDNlZjFiZmIsIDB4ZDM0OTYyN2QsIDB4OTdiMWJlZjgsIDB4N2RhNmM3YmUsIDB4MWRlOTU4NGUsCisJMHgwMDEzNjNmMiwgMHhlNmIzZGRmZSwgMHhjNjZmNjQzNywgMHgwN2UwMWFmNywgMHhmYjExZTdiZSwgMHhmNzJkMDZiZCwKKwkweDNkZjBjNjdjLCAweGVkZmVlMzM1LCAweDk1MGFlMGNlLCAweDcyYWM2ZmVlLCAweGFkZGZmOGRiLCAweDliOGRiMjI5LAorCTB4ODdjYTc5NGUsIDB4MjFiZmZjZDIsIDB4NmE0MGZhYmQsIDB4Mjg4M2M0OWUsIDB4NjM4YzE5YzEsIDB4ODNiMmJkNzUsCisJMHgyZmQ2OWIzNiwgMHgyMmY3YzY2OSwgMHhmNDMyZmFjMCwgMHgwMDY0MDFlZiwgMHhiNzYzYjc3ZiwgMHgxZTY5ZWY4YSwKKwkweGE1YjQzZDQxLCAweDc0YWJmNmIyLCAweDJlMWUxYTBmLCAweDZmMmYwOTU1LCAweGY0YmNkOTcxLCAweGU4OTVhZTVkLAorCTB4ZGJkMzBmYjUsIDB4MmZmNzEzNjgsIDB4YjE2YmZiOGMsIDB4MTliNDZjN2MsIDB4OGRhZjRhNzksIDB4NzdjYzc2NzEsCisJMHhmY2RhNzczZSwgMHhiZmU4OWJmZiwgMHg5MzI0YTkzZiwgMHhjYmZlNjA3MCwgMHgzZjdjM2RmMywgMHg3NzU4YzEyOSwKKwkweGMzZWI4ZDg5LCAweDM3MTkxYWY3LCAweDZhN2RkMTM2LCAweDFkMzFhYmE0LCAweGUxZTIxZWY4LCAweGJhMTQ5Y2E0LAorCTB4MjVkOGQ1MWYsIDB4YTYzNzUzZWUsIDB4OWI3ZmQ4MDcsIDB4ZjNmYjEyZmQsIDB4NGVkMmNlYzYsIDB4MGU4MzA3OGEsCisJMHg2ZWFiZGYwYiwgMHhhYTM0Zjk3NCwgMHg0NDIxZDIwNywgMHgzZWY4OWZmZSwgMHg2OWJiZTBkZiwgMHhmZDIxZWY5OCwKKwkweGVkOTE1MDVlLCAweGRlNTE1N2Q3LCAweDRhMWI5YTdmLCAweDYxNjliZGU5LCAweGMwZjExMjZkLCAweGU1MDYxZWY4LAorCTB4NGU5NTE5ZTAsIDB4N2JlZmEzY2YsIDB4ZmJlNGUyODEsIDB4NTAxYzg2MTcsIDB4OWQ5OTU4MzEsIDB4YjkwZDdjYmEsCisJMHhmOGVmOGQzOCwgMHgzYmVhMjUzNSwgMHg4ZjVlNDM3ZSwgMHg5OGI5MGEyNCwgMHg0NGNjMjZlOSwgMHg3MWE1NTc3ZSwKKwkweGYwNjFlNTYzLCAweDhmMDBiZmZkLCAweDMwYjFhZTQwLCAweDAwMzBiMWFlCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHhzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDk0ZjNmZjAwLCAweDUxZjg2MDY2LCAweDI1N2JjMDhmLCAweDc5OWMxODE5LAotCTB4ODk2OGM1NTAsIDB4MTgxOTM5MGIsIDB4MGJmMTAzMGUsIDB4ZGEwMDU2MjAsIDB4YzBjNWNhZWIsIDB4ZmRjNDA2ZTAsCi0JMHg4ODAxM2M0MCwgMHgzZWIxMDBiZiwgMHgwMTgzMDMzNywgMHhkOTAyYTcxMCwgMHg3MzZlNjg1MiwgMHgxN2JhMDI2NCwKLQkweGQ4ODE1ZDg4LCAweDMyYmY4ODFkLCAweDYzN2MzMDMwLCAweDc2N2VkZTIwLCAweDYyM2RhMDIxLCAweDIwMzlmZTA4LAotCTB4ZmQwNGIyZmIsIDB4ZjBkODNmZmMsIDB4ZGFmYTY1NWQsIDB4YzBjMmE4MTcsIDB4MmE4M2EzMTAsIDB4OGZjNjhiMTYsCi0JMHg0NjZmYzFkMywgMHgwMjdjOWEzYywgMHg4ZjExM2YxYSwgMHg1NDczNzE3ZSwgMHgyYTAxOWQ3ZSwgMHg4MTg4YzkzZiwKLQkweDlhOTIwZjYxLCAweDZlZmMwMzdhLCAweDgxYWZjNzQxLCAweDMxMDBkZjdhLCAweDc0NzY5YTAwLCAweDAwMDM2ODVkLAotCTB4MDAwMDAwMDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI0M2JmZjAwLCAweGEzZjBjMGMzLCAweDRhZWY4MTFlLCAweGYxMzAzMDMxLAorCTB4MTJkMThhYTIsIDB4NjA2NGUzZWYsIDB4NjA2MmUwMTAsIDB4ZmJlMjA1MzAsIDB4MzMwYzBjM2MsIDB4MjA0Y2Y0ODAsCisJMHg2MDY2ZTUxNiwgMHgxYWUyMDMxMCwgMHhjNDBkZGUyMCwgMHgxOWY4ODA3YiwgMHgxMDM5ZmM1MCwgMHgxYmUyMDBlZiwKKwkweGJlZmQxMDNjLCAweGZlMGMwYzRjLCAweGM0MDgxYzQwLCAweDk1ZmM0MGMxLCAweDFiZTE4MTgxLCAweDczZjZmMTAzLAorCTB4NGMzMDMzMGEsIDB4MmZmMDQ3MTUsIDB4MjQ5ZmQ5MDMsIDB4YzFmZmU3ZTksIDB4ZTkwYzQzODYsIDB4YTA3MWRmNmIsCisJMHgxMGFjZjM3ZCwgMHg3YjIwNDY3YywgMHg5YWFhMTViZSwgMHhjZGY4NTYwNSwgMHhiZjI2ODg1OCwgMHgxOGJmOGQwOCwKKwkweDAzNzJmZThmLCAweDRkNWFmZTU0LCAweDgxYjViMzM0LCAweGNkNDkwOWU5LCAweDZlZmM0ZDNhLCAweDQwYWFjNzQxLAorCTB4MzEwMWE5ZmYsIDB4NWZmMWFkMDAsIDB4MDAwMzY4Y2EsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweDQ1NTQ3ODA5LCAweGJlZGQ3MGI2LCAweDRlOWRlZjRiLAotCTB4NjI1ODU5MDgsIDB4ODE1MTEwMDcsIDB4MDVlNDJjZTksIDB4NjJkOWIxYzQsIDB4OTcwNjIxZjQsIDB4NjY4NTQ2MTEsCi0JMHg0NDc0OWVjYiwgMHhmOWQxYzFjNiwgMHgxNTM2MTBkMywgMHhjNzEzMzA5ZCwgMHg2MGVjNDRlMCwgMHg4MWEwZDA1MCwKLQkweDYwMjQxMDA5LCAweDNjYzBlYTAzLCAweDY0ZmZlMzFkLCAweGI4MzA2NmRjLCAweGM1YTRjNmIwLCAweGZjYjhkZjBkLAotCTB4NGRkNTRlNzUsIDB4MTFkMzdiZGYsIDB4N2ZlZjk5OWMsIDB4Y2EzZmJmZjMsIDB4ZmI1YmE5NTcsIDB4NTM5Y2VhZDksCi0JMHgyYzkyMmFhNywgMHg0MjIyZTkxMCwgMHhhYjlmODNiZSwgMHg0MDliZjkwOCwgMHg0ZDE3MTkwOCwgMHg2OWU1YTkwOSwKLQkweDI0ZTA1Mjk1LCAweGJmYTJlMDI0LCAweGUxNTIxMzY2LCAweGQzY2I0MjU0LCAweDQzYjI5OTA5LCAweDQ4OTU1ZjBlLAotCTB4Yzg0MjhkZjMsIDB4N2RhNmYzNGMsIDB4NmVlZjJjNTYsIDB4NTNiMGY5NjAsIDB4ZmU1YTExZjEsIDB4ZDNjZDEzNzEsCi0JMHg4ZWU2MDMzZSwgMHhlNWEwYWU4NywgMHhkOTIyMWQ5MSwgMHhiMjhlZGQwOCwgMHgyMTEyNDg5OSwgMHhmZDg0MmRjNywKLQkweDBlN2NkMzY0LCAweDk2NTY4NTIxLCAweDNmZGM2OGFkLCAweGI3MTdkYTA3LCAweGY2OTU4OTk5LCAweDY4YmJiMTU3LAotCTB4NWYzNDE1YzYsIDB4NTAyNjQ4NzQsIDB4MzJkMzYyYTUsIDB4OTdjZDEwNjUsIDB4YzgxNjg0ODQsIDB4ZjM2NjRjZjcsCi0JMHg0MzE0ZWUwYiwgMHgxZWZkNjg5YiwgMHhjZGQyNDc1NywgMHg1NzRlNDIwZSwgMHgyMTQ3ODg1YiwgMHg5MWQ5YzZhNCwKLQkweDQyNjhkMzc0LCAweGYyZGI0MzRhLCAweGIzNjk1ZGEwLCAweDU4MTEzNWUwLCAweDUzOTdhNmM3LCAweDA0NWI1ZDYxLAotCTB4NDg0M2Q5YWYsIDB4ZjEzYjY2ZDksIDB4Zjg3MzYyOGMsIDB4ZGUzYmZlOGUsIDB4YTJhZjg2MmEsIDB4M2FlOThiZTUsCi0JMHg4OGI3ZWQwOSwgMHgxMTExZTZkNCwgMHg3OGE3NWZjNiwgMHg5ZGY4NTE5YywgMHgzOGUzNzZhZSwgMHgwYjYyYmU2YSwKLQkweGFiYjY4NzFkLCAweGMyZjA1NjdjLCAweGM0NGQyYjEyLCAweGVmYzc0MmRmLCAweGY1OWQ2ZGRlLCAweGI3ZDYwMzg0LAotCTB4ODRlOTE5NGMsIDB4YTA1NmFkNzUsIDB4ZGU2ODUxNWUsIDB4ZTYwN2FiNGUsIDB4ZDFlNGE4ZDcsIDB4NDY4NmQyZjIsCi0JMHhiNDc0NzBhNSwgMHgwM2NkYjJiZiwgMHgxZmFhZjNmNCwgMHg5NGQ3ZWM5ZSwgMHhkNWQzZDMxYiwgMHg0NjQ2Nzg4NCwKLQkweGY4ODRhNWYzLCAweDQ0YmY2ODVhLCAweGM3MzMyOTBhLCAweDQwN2ZiZjQ0LCAweDA4MTkwOWUyLCAweDYzYzQ4YmZkLAotCTB4MjE0ZmY2ODksIDB4NDc4M2RmODksIDB4NWUxNGFmZTgsIDB4ODQ0ZWJkYzEsIDB4YzViNzhhYWIsIDB4MjdiYmZhNmUsCi0JMHg2ZWIzYjc4YSwgMHg5MjI5NDc4ZSwgMHg0ZDVmZWRhMywgMHhkMDNjMDIxZiwgMHg5YzAyZDRmOSwgMHhjZjk2YmE2OCwKLQkweDRjOTEzNWNmLCAweDJlZmY2ODkyLCAweGU5MDM3MTFmLCAweDM1MWViN2Y1LCAweDNjYzk5NWFkLCAweDE4NWFjNzQyLAotCTB4YzY5M2UzMWMsIDB4ZWU0MmJjZDMsIDB4N2U0MjVlMjAsIDB4MzdjNzIyYmQsIDB4MjQxZmU2OTUsIDB4NmYzMDM5ZmUsCi0JMHgwNjJmZTRkMSwgMHg5MmQyMTEzYywgMHg0YWJiZjQwMiwgMHhmZDYwYjMyMCwgMHhkMzQ5ODEzZiwgMHg5NGE5NTVmMiwKLQkweDZiZGMyOTNlLCAweDIxM2NlNWE3LCAweDg5ZWU3YzBhLCAweGYyN2MyZjkwLCAweGE3ZWM3NGZlLCAweDY4NTFmYjA4LAotCTB4ZGZjZmMzM2YsIDB4NTcyZjNiOGYsIDB4YWYzYjhmZDcsIDB4MGFhN2VkNTgsIDB4NTg1ZGIxZmIsIDB4MTM3OWI1M2YsCi0JMHgyYmM5ZjNmNCwgMHgxYmI5ZmI1NSwgMHhkODVkNzFmYiwgMHg0ZjU3ZGNiYSwgMHhlYWU3Y2ZkNCwgMHg3ZTI3ZWM3MiwKLQkweDY5Zjg5N2FhLCAweDA3YTU1MTdkLCAweDY5MTNlMWQyLCAweDNlMzlhM2I5LCAweGE1YTI3ZWYzLCAweDgxMmJjOThiLAotCTB4NGI5NDlkZmYsIDB4OTcxMTc0YjQsIDB4NjFkMWQzNmIsIDB4OTc0MTJmYmMsIDB4OGZiOTNkYTcsIDB4MzBmM2NlNWYsCi0JMHg3YzgyY2I4OCwgMHg1MDUyMGNhOSwgMHg2NDFhNGMyZSwgMHgzNWRjZjljMSwgMHhlMTcyODFjOCwgMHg0YmZlMDlhZSwKLQkweDMwMWU3NGRjLCAweDc5YTU0OTM2LCAweDc3MjNmZmM1LCAweGYzYTZiYTBjLCAweGE0MGE0ODE0LCAweGM2YTQxMzFlLAotCTB4ODMzMmQ1ZjIsIDB4NWZjMWU0YzMsIDB4ZGI0NjNjOGYsIDB4OTE5MTRjMDcsIDB4NGViZjM0ZjEsIDB4YWMzOGY0OTgsCi0JMHgyMTMxMTM2MywgMHhhOTIyNmM3YywgMHgzMzM2N2E4MiwgMHgzYWI0Zjk0MSwgMHhhMDg5ZTczZCwgMHg4NjZiNGUwNiwKLQkweGQxMGJmYzUyLCAweGZlYzhkNzdlLCAweDJkYWZhMDE0LCAweGQwMjBlNmU0LCAweDk0YTFhYWRiLCAweGYyMTEwN2M5LAotCTB4NzBhNmYwNzQsIDB4ODdlZGEyNTAsIDB4M2MwMGE2MTYsIDB4NmZlNTBhY2QsIDB4MWQwYWY4ZWQsIDB4ZmY4ZTM0N2YsCi0JMHgwM2JmOGMxYywgMHg3N2Q3MWZjNiwgMHg1Y2IwZjM3YywgMHhiNDk2ZjhkZCwgMHgxNmY4ZGQ2MiwgMHhlOTRmOGU4NSwKLQkweDlkYjkzNzdkLCAweDM3ZTE0ZjhmLCAweDgzZTc5MDgxLCAweGU2ZjhlMWI3LCAweDdmMWM2MmI0LCAweDc1OGE0MmI1LAotCTB4Yzc3YWRiZTMsIDB4ZmRkNjAxN2YsIDB4MWZlYjdmNTIsIDB4ZmViZjQxMzYsIDB4ZmFmZDUyYjQsIDB4YzNmZWI2MTUsCi0JMHhkZjFmMTE2NCwgMHg2M2ZmZWI4NiwgMHg3ZjViMjE3MCwgMHhiZjViMjk1YSwgMHgzYmRiZjU5OSwgMHhmZTE3YWJiZSwKLQkweDhmYmFjMWFmLCAweGUxZmViN2Y0LCAweGJmZWJmNTEzLCAweDdlYmY1Y2E4LCAweDZkZmYxYjMzLCAweDc3YzdjMTUyLAotCTB4MDRlZmY4ZTAsIDB4MmZmYWQ5Y2IsIDB4MTVmMWM3MmEsIDB4NzQwYmRmYjMsIDB4NTViNjBjYTQsIDB4NjRmOGU4ODUsCi0JMHg2NDg4NjUwOCwgMHg0YzNlNTE5NCwgMHg0MjEwMjU0NywgMHg2MTkxZDdkYiwgMHg2Y2JiODcwOCwgMHhiMGJlZWU4YywKLQkweDQ0NzM3YTUxLCAweDUxMDkxZGU1LCAweGFjZjJhMjhlLCAweDU5N2NkMzkyLCAweGU0MDUyNGYzLCAweGI5NTM5NjJjLAotCTB4NzU0Zjg4YjcsIDB4NzQ4ODliNjEsIDB4YTFjY2VhNGQsIDB4YmI3Y2U5OGIsIDB4ZTQyMGM0ZGIsIDB4MTk1ZGQ2MTcsCi0JMHgyM2JmNzExMiwgMHg5ZGEwMGI3MywgMHhmZGYwYzI0NCwgMHg2Y2M3ODdhMywgMHg5OGNiYWVkNCwgMHg4Zjk1YWEyZSwKLQkweDg4ZjhlYTc3LCAweDk5MzgyN2NkLCAweGYzYTJhYThjLCAweDMwNDQwNjliLCAweDRlM2Y5YTJlLCAweGYyYTEyOGU1LAotCTB4NDcyYTdkZjMsIDB4ZDMyMTNkMjEsIDB4MGZmN2U4ZjEsIDB4OGEyNTljYTksIDB4YjE5NjZmOTYsIDB4ZGU0ODNjN2QsCi0JMHg3MjA0OTUxOCwgMHg5NzFjZmQ4MiwgMHgyZjhmYmMxOCwgMHhmZjAwNDIxMSwgMHhhMWRkZDYyZiwgMHg1NDVhN2M4MCwKLQkweDhmNDBhNzZiLCAweGYxYzAyM2NlLCAweDBlNmRkOTE0LCAweDllMTAxNDZkLCAweDJkY2Y4MDFlLCAweGZjODQ4YWM4LAotCTB4OTUzNWEyOTUsIDB4N2VhOGI2ODIsIDB4NmRkZGFlODAsIDB4ODUzMmI0MjQsIDB4NzZiMDVmZDYsIDB4NWQzNzUwZGUsCi0JMHhjY2IzYWRmZiwgMHgxZmVjMjI5OSwgMHg4NGQ4MzdjNCwgMHg5YjA2NGM3YywgMHhkNTk5MDk3MiwgMHg0YzFlNGViYSwKLQkweDkyY2NiNzMzLCAweGI0ZDRlZmRmLCAweGU3ZDdlZDlmLCAweGU3ZDYyZDZmLCAweDZjOTBlNWJiLCAweDQ0YTM3ZDAyLAotCTB4ZGZiNDhkMjAsIDB4ZTVmNGFiZGIsIDB4NDJmMTM4ZWEsIDB4MWYyYmMzMDIsIDB4NmM0OTI3ZWYsIDB4OWE0M2I3YmUsCi0JMHg4OGRkOWYwOSwgMHhkNjZlMzlkNywgMHhlMDRmOWQ1NiwgMHg3MTg0OTkxZSwgMHg0ODFjZWNiZiwgMHhiMTAzZmYxMCwKLQkweGQ2Y2RkZjllLCAweDFjZWY5YzZkLCAweGEwMmJlMmQ5LCAweGI3NzM5OWYzLCAweGNlMzRmMDg4LCAweGRkOWY3M2JmLAotCTB4ZDM0YjFhNjcsIDB4MjA2NTRmZmEsIDB4OGM3YWUzNDEsIDB4ZDRiYjlmZjMsIDB4ZWEzNzFlYjgsIDB4YzY4MmYzNjEsCi0JMHg4YzRlOGNlZiwgMHg5YjY4MTRmNCwgMHg0ZDQzZTAzNCwgMHg2Yjk2OGFiZCwgMHhhMWE4N2MwNiwgMHgzM2NkYjJhZiwKLQkweGQwOTJmOTc1LCAweGEyZmQ1ZDZjLCAweGYyYmE3OWZhLCAweGJhMjViNTQ1LCAweGVlNmIwNWYyLCAweDA1ZTdlNWQwLAotCTB4OWZkNWQ2ZWYsIDB4YWU5OTc0YmIsIDB4ZmJhYWY2ZmMsIDB4MTZiN2U1NzQsIDB4NjdlNWQzYWYsIDB4ZWFlYmQ3ZmIsCi0JMHg1MWFiMzJkZiwgMHgyYmVjMmU1NywgMHhlNTEzYThiOSwgMHg1NGEyZmZhYSwgMHgzNmRmMmJkMCwgMHg5NTQ3YTAxMywKLQkweDM4N2U1NWRlLCAweGU5ODI5ZDU5LCAweGE2MGY2YWU5LCAweDI5NGY4MGNiLCAweGIzNzY5YmZmLCAweGRlNzFiMDM0LAotCTB4MmFlZmMwNDUsIDB4NTVjODRlOWMsIDB4NDY0ZmMwNjksIDB4ZDNjMjM3YmEsIDB4NjdmNGRmNDgsIDB4NDg3ZGFjNzAsCi0JMHg1MjA1Y2I0ZCwgMHg4N2FlNzIwMCwgMHhmN2VhY2ZlZiwgMHgxMjBlNWM3MywgMHg3MmQzMWNiMiwgMHhmOTZkZjE4NSwKLQkweGM0YzlkNGY2LCAweGM4ZjBmOTA1LCAweGZkZmY0NzJhLCAweGQ3MDExNjkyLCAweDFlOGI0MDQxLCAweGQ0YTM3ODA4LAotCTB4NzBlYmMzYWEsIDB4ZjZiYjNjZGQsIDB4MjU3ZTM4OGIsIDB4MDA3OGVlZjAsIDB4MDEzMmMxNTUsIDB4MzA3YzIxZjgsCi0JMHgzMDMxYzZlZCwgMHhjYzcyZGYxZiwgMHhmZGM0MGRiNywgMHg3ZjNhYWJiNywgMHhjMDEyODdjMCwgMHg5M2QzMDBhZiwKLQkweDNkMzBiM2Q1LCAweGY0YzdlZDVlLCAweDRjNjJlYWMzLCAweGMyYWVhZmRmLCAweDI5N2FiM2I0LCAweDgzYWI0N2E2LAotCTB4N2FhNWZlOTgsIDB4NTRlZmE2MGQsIDB4NTZmYTYyZDcsIDB4N2ZhNjNkNzUsIDB4ZGE2MTBlYWUsIDB4NTRjM2VkNWQsCi0JMHgzOTVlZGJhNSwgMHg0YWY1Yzg5OSwgMHgxZGQzZmZhZSwgMHhmOTY3ZjMwMiwgMHg3YmZhNDQ1YSwgMHgzN2EzZjIwNywKLQkweGFjZjFmODA1LCAweGEwOTE4YmUzLCAweGNiN2Q5ZjM3LCAweGVmMmY0MDRjLCAweDdhNDY1ZTBmLCAweGM0YWUxN2U4LAotCTB4NjE0NTdhODcsIDB4YWM4NzBhODgsIDB4MWI1NmU1YmUsIDB4NDRkNTkzYzMsIDB4MWI5NTA5ZjIsIDB4YTRmYzVkZjcsCi0JMHhjYzY4ZmU3NywgMHhkYTAxMjQ0YiwgMHg5ZDMzYmM4NywgMHg0MTFkZmEzMSwgMHhjM2U3NWYxMCwgMHhjNjQ1ZjExMywKLQkweDcxZjE0MGRlLCAweGU1YmZkMWZjLCAweGY4ZTdiZjQwLCAweDI4M2I2NTNlLCAweGMyNDk3ZWUyLCAweDVmMDE3ODRmLAotCTB4ZmVlMWI4MWEsIDB4ZTVjMWQ5MTMsIDB4ZjdlMDc5ZjIsIDB4N2UxNTQwZjEsIDB4YTY4NDY5MWQsIDB4ZDIzNzA0MTMsCi0JMHgzMzU2ZDlkZiwgMHhlZDhlMDA5MSwgMHhmZGExMTBmNiwgMHg4NGY0M2Q5YywgMHhjNWJiZjYwYiwgMHg4N2Y3MjYyOSwKLQkweGE2YTBlMDMxLCAweDZlZTkyZDE1LCAweDY4OWY3Njg3LCAweGQ2Y2ZlN2QzLCAweDI4MmRmOTBhLCAweDM3NzEzZDM3LAotCTB4NzJiYTAxOGQsIDB4MDExYzNmYmIsIDB4NTRjMTRmZjgsIDB4OGE3MTY3ZWQsIDB4MDA3MGZlZTIsIDB4NDVmMThmYzIsCi0JMHgyOWQyM2M3MywgMHhkZWIwZGJiNSwgMHhmZDFlN2IzZiwgMHg0NzlkMTNmNSwgMHhiNjgwZjkyYiwgMHhmODY0NWI0NywKLQkweDNlOTFlZGY5LCAweDUzM2U5NmY4LCAweGVkNGYwMDBhLCAweDlmYjAxN2YyLCAweGVmYmZlOGRiLCAweDEyYmY0MTg2LAotCTB4MDM3ZWQ1ZTYsIDB4ZmNkMDYyMmQsIDB4YWNkZWY4MjMsIDB4ZjNiNjhmMWIsIDB4YjQzMTM2YTgsIDB4MjU1ZTlmZWIsCi0JMHgyN2E1NWM3MiwgMHgwYmZlZGEyYSwgMHhjZTNiNDAzYSwgMHhmZGNiZDZlYSwgMHhkMDNlNWQ3OCwgMHhlZGQ2ZWE5NiwKLQkweGU1MGJmMDAzLCAweDQ4MmM1MjdiLCAweDljZTUyZjQwLCAweGM3MjQ3YTdhLCAweGVmY2U4MTFhLCAweGY0NjFlMDg4LAotCTB4MTU3YWIwMjYsIDB4ZWZjNTRlOTYsIDB4MDBlYzMyNDEsIDB4YWU3ZTYwM2QsIDB4NWI5ZTZmNGEsIDB4Zjk3MmE1ZGUsCi0JMHhlNGM4N2ZkNCwgMHg5YWZmMjg3ZSwgMHhkYTI3MmFjZSwgMHhjNGMwOTUxZiwgMHg3ODBiZjM0NCwgMHhkOTZiN2U2ZSwKLQkweGE3Nzc5MDc0LCAweDVlMWY2YzRjLCAweDYwNWMwYTQ4LCAweGRhOTMxNDk0LCAweDNlNDNkMDFjLCAweGEwN2NhNjI2LAotCTB4ZmZjOThmZmIsIDB4ZWM2OTY1NzYsIDB4MDUyNjExODEsIDB4OGQ2MGIzZTcsIDB4ZmFhNDFmN2UsIDB4NTQ1ZjJlOTMsCi0JMHg5MjE3Y2ZhZiwgMHhjZTgwOTIxYiwgMHgxMjY0ZWIwYiwgMHhmNTFmODAxMiwgMHhjNjI2ODllNSwgMHg2YWE0NDUwZiwKLQkweDJiMGZlYzE1LCAweGRmMzEzZGI4LCAweDc0YzFhNDRkLCAweDFlYmIxNTdlLCAweGU3NDc5OWNiLCAweGM5ODliOTcxLAotCTB4MmViZWQ1NmYsIDB4MmZmMzYwNDksIDB4N2M1NDY5NmQsIDB4ZDY4M2ZjYjQsIDB4NDE1YzlmYWMsIDB4MTU2ODdkYTAsCi0JMHgzYjgyMTlmOCwgMHg0ZjI2ZWYwNCwgMHhkMGZkZmM1ZiwgMHhhYmU3MWJmOSwgMHhlYzdkMWZlZSwgMHg4YThmM2U3YywKLQkweDE0MmY4MmNkLCAweDZmMTkxZjYzLCAweDEzZmVmODEyLCAweDAzNWUzODQ0LCAweDk5ZThkNmViLCAweGE4Mzg3MzM3LAotCTB4ZjI4Njc5ZjksIDB4ZWZmZTQzMGEsIDB4YTI0NGI3YTYsIDB4ODIyM2I3YTMsIDB4NDBkMzY2ZmYsIDB4NWZhMDVmNDYsCi0JMHhmMTQ0NTIwOSwgMHhhN2ZkMjNmZiwgMHg5ZTdmZTlmNCwgMHhiMTNmZGM2OSwgMHhmZmI0MjFmZiwgMHgxNWZmNWQxYywKLQkweDQ3ZmVkNGZmLCAweGRkZmY5OWY0LCAweGQ4YWZmYWIxLCAweDkwNjc3NWI1LCAweGU3ZDI5YmNhLCAweGJhMTE3NjFlLAotCTB4NmE5MjljZmYsIDB4ZmYxNGJjOTMsIDB4YmE1NjliZTUsIDB4NGE0ZTBlODAsIDB4ZjNkMDE3NDEsIDB4MWY5ODkwYTksCi0JMHgzZjU3NjE4YSwgMHgzZTBmNGJkNywgMHgwZjc2MDA4NywgMHgzZmZiNGFmYywgMHgzMzAzZjRmZCwgMHg2MmY5N2Y2MCwKLQkweDdiNDZlYzkzLCAweDZjMzliMzY2LCAweGQ5NWFmY2E2LCAweDhjOWQzMjVhLCAweDk2MzFmY2M1LCAweDA4ODlmZDVmLAotCTB4N2QzZDM2ZjksIDB4NzBmNTNlOTYsIDB4MjhjN2Y4MTIsIDB4M2Y3ZDcwYTUsIDB4NjU1MmZhOGMsIDB4YjA3OTQ3ZDMsCi0JMHgwNDQ4MDRmZiwgMHgwZWQ4Y2NmOSwgMHg4MDk3M2ZjNiwgMHgxMjllNzFmMiwgMHhjZTljYjdkNywgMHgwMGYwZjUxMywKLQkweGY1YTA0Yjg3LCAweGYwNDQ0ZjgxLCAweGU2NGU5MjRkLCAweDJmZDQzNGE3LCAweGM4NGY3YWU2LCAweDRlM2M0Y2U0LAotCTB4NmZmMjNjNTUsIDB4NWU0MGRmZTQsIDB4MjEyMGYwYWEsIDB4YmI4OGY3YTYsIDB4NzYwYjFiMWUsIDB4N2ZkMzU3NmIsCi0JMHg5YzBkMDRiOCwgMHhkYjNiM2U1NCwgMHhlN2YxZTBiMiwgMHhlM2NiZmQzZCwgMHg0NTg3NmU2ZSwgMHg5ZGIwODVkYiwKLQkweDZiZWI4ZGE3LCAweDk3MmQyY2VkLCAweDYzZjAyZWMzLCAweGRlY2EzNzk2LCAweGJlNWNmZDIwLCAweDFmMjc4OWY1LAotCTB4NmRmMjNiMDUsIDB4ZGE2MmY3YjMsIDB4OTdkNmQ5N2YsIDB4ZTY4MTNjZmUsIDB4ODljOWI2Y2IsIDB4MWMzMmQ5ZDMsCi0JMHgyZjE0NTI0MiwgMHg2OTZmZmEwMSwgMHhhNTBmMTQ2NiwgMHhmMTQ5N2ZiZiwgMHhlZmRmNjE4YywgMHhhM2UyODg0ZCwKLQkweDg1N2VkYjZjLCAweDhmMGJlOThjLCAweDk1ZmIyZDI5LCAweGJjMGM0NzRlLCAweDAzY2IxY2I0LCAweGY1ZGM0YWJkLAotCTB4M2Y3ODAyOGQsIDB4YzkyMDRmYjUsIDB4ZDllMDMxZTksIDB4MDdlYTEyZjgsIDB4MjNjNDI3MDAsIDB4ZGUyZjUzYzcsCi0JMHgxNDAzZjUwYywgMHg1NWNmMjAyZiwgMHg5N2NiMTkzYywgMHhmZDAzNzk3MywgMHgzZDIzNDY3OSwgMHhmODNjZmIzZiwKLQkweDdiMzFkZjdkLCAweGNmYzVmZDYxLCAweDc1ODJlOWRlLCAweDE4YWE5MDljLCAweDMyYjYzZjVkLCAweDJkYzc0N2M5LAotCTB4NmU0OTgzOTYsIDB4ZTJmN2Q5NGMsIDB4N2E0MzNmMGQsIDB4NjdmZDdhMmIsIDB4ZjM1ZWNjNDksIDB4NmY3MDlhYTUsCi0JMHhmYWMyYTYwYSwgMHg4Y2RjMzUxNiwgMHg3ZTI0MmJlYiwgMHhjN2UyYmJhNCwgMHg4ZjkwMDJjNCwgMHg3ZjI0NGI5ZiwKLQkweGI4YmUwYzViLCAweDcxN2M2NDU4LCAweGI0NTUyMzYyLCAweGQwNGVmYWU4LCAweGEwZmQwNzZkLCAweDZkMGM1YmZmLAotCTB4MWRjNTdmNDIsIDB4NjdmZmY4MDQsIDB4MmM5YWZmYWEsIDB4MTZlN2ZjYzYsIDB4NGRhZmE3ODYsIDB4YjU0ZjllYWEsCi0JMHgzNmJkMmQzYywgMHhmYzAwZWVhZCwgMHg0YmVhMWU5YywgMHg4MDU3M2YwNiwgMHgwZjBlNDE0OCwgMHhhZmRhM2JlMSwKLQkweDY0YjRmYWY4LCAweDkxZTIxZjg2LCAweGFhM2I3ODcyLCAweGVmODE0YzA3LCAweGY2NDNiZjUwLCAweGRhZWFjNzU5LAotCTB4YTNkMmVmOTEsIDB4ZTNlMTJmZTMsIDB4NjBkYjc5ZDMsIDB4NDQ5MTNlZmYsIDB4YWM2MjViOGEsIDB4ZjJhOGE2NmYsCi0JMHgzNWM3ZGQzZCwgMHg2ZmUxYTVmNCwgMHhmNzRkZWZjNiwgMHhmOTU2ZmUzMSwgMHgxZjMzMzQzZCwgMHg4MzdiM2ZjYSwKLQkweDgzYjQwZmYxLCAweDJiY2U5MWZkLCAweGZiZTU4YzljLCAweDFlNTAxMjZmLCAweDE2Mzg0OTk4LCAweDljYzkzNzVmLAotCTB4MmFlNWY1YWYsIDB4NGI3OWQwOWQsIDB4NWU4NjljNDIsIDB4ODQwNGZmYTAsIDB4MGFiN2ZhM2YsIDB4OGQzYjY4ZWIsCi0JMHg3OGMwMGNiYywgMHhhOWZkYmVhZSwgMHhmOWM0NWI3YywgMHhmOWVhMjNkZiwgMHhiZTMwMzQ5ZiwgMHgwYWJmNWZlZiwKLQkweDJlNTczZWUyLCAweDE0N2M5ZTg3LCAweDY3ZjI5NWY4LCAweDJhZmMwM2QwLCAweGNmYmFjMDE3LCAweGYzZmMxZjM0LAotCTB4OWM5ZjI5NGYsIDB4NTRmOTUxNjksIDB4N2M4ZDNmMmYsIDB4NWM3ZGJjNWEsIDB4YjMzZDNlNGMsIDB4OWYzNjIzMzYsCi0JMHhmOTMxZWZkMiwgMHhkM2UzMmQ3NCwgMHg1M2YyNWJmZiwgMHhjMDNlNWY4NSwgMHhmYzI4ZjJlZiwgMHgxZmQ4Nzk1NCwKLQkweGYwZjI4ZDFjLCAweGUxMDc5MzIzLCAweGY0ODc5NDY5LCAweGQzOTIwZGU3LCAweGJhNTRmZTk3LCAweGY0YWRlOTUzLAotCTB4NDA4YjhhOTksIDB4YTVkMmY0ZWUsIDB4NzRiZDc3NGEsIDB4MWY1ZGQyYTksIDB4N2UwZTg4ZmYsIDB4YTAwNGYyYzYsCi0JMHgwNTI3NGEwNSwgMHgwZGU0OGZiYiwgMHg2ZjJjZjhhNiwgMHhiNDQwZTc2NywgMHhhNzkwY2JkZCwgMHgzNmUxZjI3MCwKLQkweDFlNWY2YTQ2LCAweDg3Y2RhODljLCAweDQzMTZmOTBjLCAweDVmMjE5ZjdkLCAweDM3ZWZhODYwLCAweGY1MGNhYmU0LAotCTB4ZDAzZmNjNDMsIDB4NDgyMTUwNzYsIDB4N2Q1ZDYxMDcsIDB4M2EwOTM5NzksIDB4NTdiNzJmYzEsIDB4ODdhZmZiNDQsCi0JMHg2ZDE1NzljZSwgMHgxZTljZDNkZiwgMHhiMDc5NTIwYSwgMHhlYWVjY2FkMiwgMHgxNTY1NDBjOCwgMHg3NzFlYWZjOCwKLQkweDc5MDA5NWM0LCAweDdiNmJkMzJiLCAweDc4YWUyMjBhLCAweGFjNzg3ZThkLCAweGRiZjk0NDVkLCAweDVhZjkyMjE5LAotCTB4MWY5NDQ1N2YsIDB4OWQ3ZjEwNmEsIDB4ZTY3MmJmYTQsIDB4M2EyNjljNjcsIDB4M2Q4Mjk2ZDIsIDB4YzE3YTJiNTksCi0JMHhlY2I4NWQ0NCwgMHgzY2I4MTcxNiwgMHg1Zjg3ZGE3YSwgMHg1ZjdlOGIzZiwgMHhlM2M0NTg3NCwgMHg2YjliMWU4YiwKLQkweDA0OGJjYzJjLCAweGM2YWE1MjdkLCAweDgyNDkzODJlLCAweDdlMDg5ZGJmLCAweDFmNjY3NmMzLCAweGQwNmI1YzJjLAotCTB4YTQ1YWM4MmIsIDB4MTJjNzQyOGIsIDB4ZDUyMmU0MDUsIDB4ZmJkN2RmZTcsIDB4OTc3ZDE5NGQsIDB4MWI4YWZlZjIsCi0JMHg3YjZhZTVmNCwgMHgzYjAyMzkzOCwgMHg1ZjQ5YjRhZCwgMHhjZTc2ZTdlZSwgMHg2N2JkMmE5MywgMHgxNzk0MGM5MCwKLQkweDdkODBjMDYwLCAweDM0ZWJlNWNkLCAweGIzZjVmNDcxLCAweDBlN2JmYzI4LCAweGU1ZTgwNDg5LCAweGYwODhiYjZjLAotCTB4Y2VjY2RiM2YsIDB4MjA3MDQ5MDksIDB4ODkyNTRkZjIsIDB4ZTE1MzVjYTAsIDB4YTE3YzA1ZDQsIDB4YmE3NzJmZjQsCi0JMHhlNzM1ZmM3NiwgMHg3Y2E1NWExZSwgMHg3ZjYzYmJlNywgMHg5ZGFlZDM0NywgMHgwM2RjOGY2ZiwgMHhhNjZmNWRmOSwKLQkweGQ2ZmE0YmJkLCAweDhhY2ZiMjlmLCAweDdkOWVkOWZlLCAweGU5NGYzYzRlLCAweGRhNmFmYmQ5LCAweDZkZGY5MDNkLAotCTB4N2IzY2MyZjYsIDB4MTYzOTdkZjYsIDB4Yjk2N2E3ZTgsIDB4NTZlNDE4YjksIDB4N2Y4YTUwY2YsIDB4ZmRlY2Q2OWEsCi0JMHhlZTI3NmM3MiwgMHg2ZjEwMmI5MywgMHhkMzBhOGJhZiwgMHg3NmZmZGE3MywgMHg5NDg0NDg1NCwgMHhmZmY2MGFhZSwKLQkweDMzZjQ3NjdkLCAweGEyYjc5ZTA0LCAweGVmNjdhMDdmLCAweGM3N2UzOTk3LCAweDk1M2Q2ZjNmLCAweGM3YTRkY2ZjLAotCTB4ODc2ZDY2NDksIDB4N2YzM2M1ZjksIDB4ZjhjZjYwNzMsIDB4YjljMTk2MjcsIDB4NjU3ZWViNmYsIDB4ZjI5ZjJkMDEsCi0JMHg0MTYzMzdjMiwgMHg2NzZjZjYxZSwgMHhkY2I3NGQ3YSwgMHgwNWNlMDFiOSwgMHhlZWYzNTJmZSwgMHhiOWMyOTkzMiwKLQkweDEwNjI5ODFiLCAweDg2MmJiOTk1LCAweDYyM2EwZTRjLCAweGY0MWJlNWMxLCAweDNjMjg1YzdiLCAweDA2N2ZmZDNlLAotCTB4Zjc5ZTAyMWUsIDB4NDMzYmI3OTUsIDB4ZmRkNjAxMTYsIDB4NDE3N2QxZDUsIDB4MjMzM2VjMGUsIDB4M2RlYmFhNWQsCi0JMHhmNTBjYjJkMywgMHgzYmFkZjM4ZSwgMHhmNWY2NjI0MSwgMHgwYjc1OWNmZiwgMHg3NzU5MGJlMSwgMHg4ZGFmZjQ4NiwKLQkweDA3YTI1ZGVmLCAweDgzZTQ2MmYxLCAweGY3YmU3NGJlLCAweDc1NmZjYzJlLCAweDE3YmU3MTdhLCAweGZmMzNlZjQ4LAotCTB4ODNmZmQ3YzUsIDB4ZTI5ZGJlZjEsIDB4NzVmZTc1ZGQsIDB4YWY4YmZkNTcsIDB4MWZiYzdmYmIsIDB4ZWVmMWMzOWUsCi0JMHhjMGY1NzM4NiwgMHhmY2UwZGYwYiwgMHhhYjljYTg3ZSwgMHhmN2U3MTdmZCwgMHhlYWFmZDZmZSwgMHg3OTMwN2ZlNywKLQkweGY1YTBjOGRlLCAweDAzYWQ0OWYzLCAweDJhNmI4YjE0LCAweGEwY2UxYzBlLCAweDcyMTg3ZmE1LCAweDNiZTYxZTMwLAotCTB4MThjMzlmOTksIDB4MTI1ZmI3ZTcsIDB4YzE2NGZkYjAsIDB4ODkxZDc2ODQsIDB4Yzc1ZGI4MTcsIDB4NWNjMWExZWMsCi0JMHhhNGJjMTg3ZiwgMHhjMTkwZjUxMCwgMHg3YTY0MWU0MywgMHg4M2E5ZTQ4MywgMHhhNDNmYmU3MywgMHhjYzYyZjAyZCwKLQkweGNiN2NjOTAyLCAweDk1Zjc3OTBmLCAweDBiYjdhZjNjLCAweDFmMTAyNzdmLCAweDRlMGU0MTFjLCAweGEwNDNmN2ZiLAotCTB4MjIxOTBlOWYsIDB4NTM0YWZlYTIsIDB4NzQ1ZjViZDQsIDB4ZTVlZmIzZTUsIDB4Yjk3ZWNlOGEsIDB4NjdiN2EzYzYsCi0JMHg3NmY1MTJmMiwgMHhkZmRlNTRjZiwgMHgzZmU2YzIzNCwgMHg0Mjg0MjFjZCwgMHg4NzkzMGUxNCwgMHhmYzExMjZmZSwKLQkweDk2MmY5MzljLCAweDc5ZjM0MDg5LCAweGVjMDJiZmM0LCAweDdkMGVhOTg0LCAweDE5YzE4ZjdmLCAweDU4MGZjNjhjLAotCTB4MTZiYjY5NjQsIDB4YWYxNmRmZmMsIDB4ZDI1ZGZkODAsIDB4NjI3OTQyNjUsIDB4MGU5MDE2YzksIDB4OTg0YmQ1NDYsCi0JMHgxZWU0ZGQ3ZiwgMHg3MTllNzAwNywgMHg3NzMzYWVjNSwgMHhmYTk3ZjAxMywgMHg1MjhmMTYxNCwgMHg1ZmRlZmNjMCwKLQkweDQ0ZGRmNzdmLCAweGYwZTJlMzg4LCAweGFlZmZhMjJiLCAweDAzNmVmZjAzLCAweDdhZThkYjA5LCAweDE4MjQ0OTE3LAotCTB4NGVmZTAwOTcsIDB4ZjNhZmJjODEsIDB4ZjBmM2VhNzcsIDB4NjhhNGUzZjMsIDB4ZGZhYmU3M2YsIDB4YjNmZTFkMWYsCi0JMHhlZTk0NWRkMywgMHhkYmIwYTdkZiwgMHgxYzA4ZTkwZCwgMHg1M2RhZDI1ZSwgMHhlMGNlZDZmZiwgMHg4NDg1NzgxNSwKLQkweDZlZjNiMTg2LCAweDJlNzM0MGIxLCAweGVjY2NhOTc0LCAweGQ5N2Y1ZGVlLCAweGNjZjYwNTllLCAweDcxZDE5ZWE0LAotCTB4YTA0NzFmOGMsIDB4ZmFlMDE5N2UsIDB4ODllMjU5ZTUsIDB4MWY4MDNhZjMsIDB4NzllMWM3ODcsIDB4MTlkMTIxZDcsCi0JMHgwYjZiZGUyYiwgMHg4MTllYjNiNywgMHhmNjlhNTA3MywgMHgxMTVhOTEzNCwgMHg0MTEyN2RmNCwgMHhjOWIwNWRmZiwKLQkweDg4YzUzNjQyLCAweDRkOTQ0ODNiLCAweGUzOWM1Y2ZjLCAweDM5ODhmZThkLCAweGUzNjc4N2UwLCAweGUzNGRhMjJmLAotCTB4OWFlYjc4YjQsIDB4ZGIxYTRhN2UsIDB4ZjNmMDBmMTcsIDB4ZTIxY2U2YmUsIDB4ZDgyZjg1MWYsIDB4MmRkZjAwNzUsCi0JMHg4MmJjY2VkNiwgMHg5MjNiN2MxOCwgMHg4MWM2NmZjMywgMHhiZTllZDBhZiwgMHgwNGQxYmRhYywgMHg5MzU5N2U3YywKLQkweDk2OWU3NzQ5LCAweDNkZmQ3MzI2LCAweGJjYzI2NDkzLCAweDNhYjAxYzY2LCAweDg3MmYwMWIzLCAweGQ5YzQyZjQ0LAotCTB4NTEzZmRhMDUsIDB4ODNjZTMxZmMsIDB4ZmU4NGYwOGMsIDB4OWI3YThmYzEsIDB4ZWQ3ODQ2ZWMsIDB4MDAxNjViOTEsCi0JMHg2YzdjZjc1YywgMHhlZDY3NjAyMSwgMHg2MmNiNmE1NiwgMHgwYTRmZjNjZCwgMHhkMjIyZTc5YiwgMHhmNGQ4ZTc3MiwKLQkweDRlZjgzZDdmLCAweDI3ODQ3MWVhLCAweDQ0ZDJiZDgzLCAweGQyZmJhZjkwLCAweDNlM2E0MTFmLCAweDQwODQ5OWJiLAotCTB4MDM3ZDgzMWUsIDB4MzM2Y2UxNzIsIDB4ODI4MGZkYzEsIDB4ZDNiMDQxZTQsIDB4YTU1ZmJmMjgsIDB4NjkyZmRmYjUsCi0JMHhlYzBjZjZkYiwgMHg4MmVkOTUyMywgMHg5NWNiNWMxYiwgMHhmZTAyYTc1MiwgMHhiYzViNDBiOSwgMHhjMzNiNzIwOCwKLQkweGJhMjFjNmEzLCAweGUxYTRkY2M3LCAweDA5NjRkYjhiLCAweGMyNzA3YmUxLCAweGRjNjE1YjllLCAweDAyMTRiYjRmLAotCTB4YzVlZjlhZmIsIDB4ZmVlNDBiODgsIDB4Yzg1OWVkYTcsIDB4ZWJhZGZkMDcsIDB4ZGFlNGQ1ZjcsIDB4YzNmNDEyYTksCi0JMHgxZTkxOWFlNCwgMHg3NGRiMzc0NiwgMHhmZjQ0MmJmOSwgMHgxOWFmZTAyMCwgMHhkZTI1Y2VlNiwgMHg5NmZiZjgxOCwKLQkweGNiMDVkOWQzLCAweDY3ZmZkMGI3LCAweDU1MGRlZGYyLCAweDAyYzVmOWJlLCAweDJjYmQxZjBkLCAweDIzNTU3ZGIzLAotCTB4Yzk2MzkyZGYsIDB4Mjc4MmM1YjcsIDB4NzhiZWUwMTksIDB4YzA2NGYwZWYsIDB4ZjJjM2UyZWIsIDB4NmRmMjU4YzAsCi0JMHhkZjNiMzU2YiwgMHg4ZmM3OGU3YSwgMHhmOTUyYjRmNiwgMHg3YzhkMjNmNiwgMHgyZGYyYTU2YiwgMHg4YjdmZjljNiwKLQkweGNmNWZmYWFjLCAweGZmNDJkZjIzLCAweDE1YjdmYzNkLCAweGY1OGM1YmU0LCAweDUzZjBlNDFlLCAweGY2ZDhkYmU1LAotCTB4YzZkZjI4NjMsIDB4NzE3NDlhYjYsIDB4ZGNjYmNmOTYsIDB4N2NhZmQ5OWYsIDB4MDRkZTA2MTMsIDB4ZDkyMWQ0ZmEsCi0JMHgzZjQxOGY2YiwgMHhmNmZlYjk1YiwgMHg4MTlmOGYxYywgMHg3ZGNlNDA3MSwgMHhkY2U1MDNmNSwgMHhlNzJhMTczYiwKLQkweGFjZTA5YmZlLCAweDNiYzViOWNhLCAweGY2OWZjNjA4LCAweGU3MjY0M2E1LCAweDcyYTZlZjE2LCAweDY0N2EwMDRlLAotCTB4NWVmMTZlNzIsIDB4MDYzOGZjYzIsIDB4OGZhYTM2ZjksIDB4YmY1ODIzN2MsIDB4MDdkYWNjMzIsIDB4YjkxZmQyZGEsCi0JMHhlOTk3ZjY4ZCwgMHg1YTE2YmQ5MywgMHhlZjJhMzMzZiwgMHhkZGU1NjljNiwgMHhiYmM5ZmQ1NywgMHhlZjI2MTc0MywKLQkweDQ3Nzk3MDc2LCAweDkwMzBkOGU1LCAweGYwZmE0NmFmLCAweDc0ZTNlYmI2LCAweGQxM2Y4Y2Y3LCAweDk3ZTA3YmZjLAotCTB4NjczYzQ1NTcsIDB4Y2VjNGRkN2EsIDB4ZmUzNGZlMDUsIDB4NTdkMDM2NDQsIDB4MzNlNmMyODEsIDB4ZDdmNDYxNDIsCi0JMHhmZWM0MWQ1ZCwgMHhkNmM4YmNhNywgMHhmMTYwZTE1NywgMHg0Y2FkOTViYiwgMHgxNjZjYWMzZiwgMHg2YmZhMWU0MiwKLQkweGYwYWY4NGRlLCAweGFmNjRhOGJjLCAweDdlNjk5MjQwLCAweDI3ZDU5OWE2LCAweDI0ZTdhOTRmLCAweDg2ODY3YTY0LAotCTB4OTZlNjE2MWUsIDB4YTE3NzdmYTEsIDB4YmZlMDJjNDQsIDB4OWRlNDczMmQsIDB4MmNiNjNkMDIsIDB4Y2I3YmY5OTcsCi0JMHhjMzkyZjdmOCwgMHhkZmMwYWI5ZCwgMHhjMDVlYjI1OSwgMHhlZTM1MzI3MywgMHhlY2JmOGQ1MCwgMHhiZWRlNWU3MywKLQkweGM2ODFmZDBjLCAweDNjMTlmMzczLCAweDMzYzY2NjRlLCAweGM2MzFhODQyLCAweDY2ZDk3ZmI5LCAweGE3MWE3ZTdkLAotCTB4Mjc2Mjk5ZTcsIDB4MjZiYzhiYzIsIDB4ZTBjNTM3N2EsIDB4MmY1ZWI1MWYsIDB4Mzg3MTBlOWMsIDB4OWZiODg5MzUsCi0JMHhjMjg5YzJmNiwgMHgxN2RlOTNjZCwgMHhkM2QzMTQ0ZSwgMHg3MGEyOTIzMywgMHhhZTk1NzkyOSwgMHhmNWZmYmIzNywKLQkweGFlMzM3MGFhLCAweDk2NzdmNTViLCAweDgzZmE3ZWYxLCAweDNlZTcwYTgzLCAweDI3NzBlN2ViLCAweGQyNzI4NDI0LAotCTB4OTVhYjhmMDgsIDB4MTY2ODNmNWUsIDB4YmE1MGE3YzQsIDB4ZmMxMzM5NDEsIDB4MGQ3MTg4YTMsIDB4ZDYyZTkzMDUsCi0JMHg4ZWI4NDNkZCwgMHhlZDU2NGZkMywgMHg4YzcwMjlhNCwgMHg3ZGUyMTMzZCwgMHhmZWFkZGNlMSwgMHg2ZTIxOTc4ZSwKLQkweDllNWJkYzZmLCAweGFmNGVkODRjLCAweGMzZjY2MDk4LCAweDZiMTZkYmY5LCAweDRhYTBlNTA0LCAweDg3NDA4ZDg3LAotCTB4ZjBmN2FlMTQsIDB4YWEwY2Y2N2UsIDB4NjE3NjhjOWEsIDB4M2QwNmUwOWIsIDB4MjJiNjEwMjQsIDB4YWUxNDAzNWMsCi0JMHgyMDI0MmY3MCwgMHgyODA2ZmMzMSwgMHgxZGZmMDIzZCwgMHg4MzA1ZmY1YywgMHgwM2MxNWVlMywgMHg3NTNjODBmZSwKLQkweGQwYmMwMmJmLCAweDBjZWQ1OWZhLCAweDgwOTA4MTJmLCAweDExMjZjOTc4LCAweGQ2NTdiYmY0LCAweGMwMzBkZTBiLAotCTB4ZTExMWFkYWYsIDB4ZmE2N2NhYTcsIDB4NDllMmQwZTMsIDB4MmM1MmJmNDMsIDB4OWE0YWM1ZmEsIDB4ZDc4Y2IyZmQsCi0JMHhmZGFlNjE5YiwgMHg4Y2YzZDAzMywgMHg4OGQyNjRhNywgMHg3ZGZmYTZlMCwgMHgyNzlmM2QxZiwgMHhhNzg4YzNmZSwKLQkweGI2YmMzOWM3LCAweDAwMWQzYzAyLCAweGJiZDMwOGI3LCAweDNkZTE1ZmMyLCAweDIwM2NiNTE1LCAweDljZjA3NTA1LAotCTB4ZWZiOWU4ZjIsIDB4MTUzOGQ3ODUsIDB4MjBjNzQwNWUsIDB4ODllN2RhZGYsIDB4MTM2YzJmOTAsIDB4YmVmNDgwYzgsCi0JMHgzMDczODVlYiwgMHhlYzk3YmYyZCwgMHg3ZmZhYzYzZCwgMHgxODkyZjA0YywgMHhiYTYwYmVlYiwgMHg4YjllODdlZSwKLQkweDdmODJkZDI5LCAweDM2YmEzZmJkLCAweGUxNTFhOWMyLCAweGU3YTcyNmZiLCAweGFmMjM1OTNmLCAweGVmM2QwMTY0LAotCTB4NDljZjkwMTUsIDB4M2NlZWJjN2IsIDB4ZjRjMmJmNmIsIDB4NGE1NjJkODgsIDB4OTFkZDc0ZjcsIDB4YTM3N2IyYzMsCi0JMHhkODNjYWZhNywgMHhmNjBiZTFjZSwgMHhkMDFlZjY4MywgMHg4ODEwYjBhNSwgMHhjMTZjZGMwZiwgMHhjNzljMmYzOCwKLQkweDZhOWZhNjMwLCAweDJiNTZmM2U1LCAweDc2NTM3ODE5LCAweDc5ODdmZGZmLCAweDQ3ZTlmZGZmLCAweDhjMGM3ZTZhLAotCTB4NmRjZDcxMDcsIDB4ZDE1MWJjNzQsIDB4ODNmYjhjZjEsIDB4NmY5ZmY3NmEsIDB4Mzk3MmFmNWQsIDB4NGJhZWY3ZjcsCi0JMHhjNjg3ZTcxZCwgMHgwNzQ4MDRjMSwgMHg4NzhkNTVlMiwgMHhjN2Y4MjIzOSwgMHhlNWNmYTBjOCwgMHhhZTNlOTIwYiwKLQkweGQ2ZTVjMjJjLCAweDFmZmZkYzNmLCAweDkyN2ZhZmJmLCAweDRlN2JjNmUyLCAweGVmZDViYTc3LCAweDAyY2ZhNDZlLAotCTB4NDFlN2UxMzcsIDB4N2Q4NGRmMTMsIDB4M2IxZjUzZmYsIDB4OTEzNmNhZjcsIDB4ZmY2MTEzMjMsIDB4YTAxMzJjOTgsCi0JMHg5MTVmNGZhYiwgMHhlOWY5NmZkMSwgMHg3OTY3MTY1NCwgMHgyNTA3YWJmZCwgMHhjZjVjZGQ3MCwgMHhmNWM4YTE2MiwKLQkweGIzYjQwNGUzLCAweGM3YWU4NzVlLCAweDIxNmUxZTgzLCAweGJmMDg5MWJlLCAweDk1NGZiODJjLCAweGM1M2I1NGQxLAotCTB4NzMzYWY5NDMsIDB4NTIwNmE4NzMsIDB4ZTI0ODk0ZWYsIDB4OTM2ZjAwOWYsIDB4ZWI3ODAyNDQsIDB4ZTI5ODBkZjAsCi0JMHgzZjNiZjlhMCwgMHgzMmUwMTkyMiwgMHhiNjAxZmFhMywgMHgwNjQ0M2NjZiwgMHhiZTA5YmQ0MiwgMHg4Y2M2Njg4MSwKLQkweDhkZWNmZDZmLCAweGM2M2NlOTFiLCAweDNkN2EyMmJmLCAweDgzY2NkZWI0LCAweGZhYTEwNzBlLCAweDEzMDZhOGY0LAotCTB4MzVlMDZiZjEsIDB4YzA2YTg0ODEsIDB4NDNmZTM0NmYsIDB4ZWYzMDhkZGYsIDB4NDBlZmFhNjIsIDB4N2I3MTdlZmMsCi0JMHhmMjBiOGQ2MywgMHgwZmI2MDIwZCwgMHgyZTc5ZmQwNCwgMHhmNWFkOWViYSwgMHgwZTVkZTQ5ZiwgMHg4M2Q2ODE3MiwKLQkweGFjMGQwMjZlLCAweGYwNDlhMDVlLCAweDYxNmE0ODQyLCAweGU1MDUzYWZiLCAweDE3ODA5MzQ2LCAweDA0ODZiNmJkLAotCTB4ODZmZDYxNjIsIDB4YWRkZmI0MmMsIDB4MzY3ZGI0MGQsIDB4M2RiNDVmZWMsIDB4YzlmNGRiZjQsIDB4ZGM4MjM3MWIsCi0JMHhmNmM0ZjNhMSwgMHhiNjNjZWNjZCwgMHgwMGYzYjY5MCwgMHg4MWRkMzRiZiwgMHgwODM0OTVmZCwgMHgxNDE5ZWUwNCwKLQkweGE5N2RiMzM3LCAweDBiZDkxNWY4LCAweGQ3ZmJhZGU1LCAweDlkM2I3ZWUzLCAweDBlOWE5NzhlLCAweDJhNzg1MGZiLAotCTB4MTJjOGQ3ZGUsIDB4NmQ4Zjc4ZGMsIDB4NWZjNDUwZmEsIDB4MjNmODYxMGYsIDB4MWM5ODQzODksIDB4ZGI5ZTc4MTMsCi0JMHhmN2RlYWEzZCwgMHhlNDMwZjMyYiwgMHgzMmVmNDI4MywgMHhlN2VkMDA2NSwgMHhkMzAzYjk0ZiwgMHg5ZjU3NDg0ZCwKLQkweDdkYTdhMDI4LCAweGE3ZWRlMTQ4LCAweGM3OWQ3ZWYwLCAweGZkY2MxYzI5LCAweGVjZDRlOTQwLCAweGUxZTZjZDhiLAotCTB4ZGI2MTdlZDgsIDB4NWE3ZjhjMjQsIDB4ZmNmMDBhNDQsIDB4YTY3OGM2N2UsIDB4YTU3NmJlNmYsIDB4YmFmZTA0MzUsCi0JMHgxMGM4ZTRkNywgMHg0YWYwN2VmOCwgMHhkZWVmN2UzMywgMHhmNzcwZTRjYSwgMHhjZmY0NGVkMCwgMHgwOTkwNjg5ZSwKLQkweDY5YTgyZmRjLCAweDljNWU1MTEwLCAweGJjZjE5NjY4LCAweDQ2NGM3YzVhLCAweDk1YjQ1ZGI5LCAweDFiMDcxZmU5LAotCTB4NDAyN2JmNTgsIDB4MzkzZjAzNmYsIDB4ZDE3Y2QzOTQsIDB4ZmJkYjgxMTYsIDB4ZjZhYjRlNGMsIDB4OWQ5YmExNjcsCi0JMHhiNzcyYWJiYiwgMHhjZmJiYWY4MiwgMHg0Y2I3NTQzZSwgMHhjYTM1OTIwMSwgMHg4ZjJlMGFkYiwgMHgwMmE0YTk0YiwKLQkweGRkY2EzMzQyLCAweDc1NzczODBhLCAweGUzMWE1ZjAxLCAweDNiNTExYzgzLCAweGZjMjBlODA2LCAweGU1NzVkMjE1LAotCTB4M2IwMTMyMmIsIDB4MmJhMGY4NDYsIDB4NmE3ZGU2MGYsIDB4ZWU3ZTgwYWYsIDB4MGY4MmVkZjEsIDB4ZGY4YmJkY2UsCi0JMHhmZjUwODczMiwgMHhmYjliY2QwZSwgMHhkZTVmZDgwYiwgMHg1NTA4MTMzNiwgMHhhMDc4MGUzZCwgMHgxY2Q3MmE3MiwKLQkweGU4NmZjYmY5LCAweDViYWY1M2Y3LCAweGQyODQxMjIwLCAweGJiODQzY2NkLCAweGJkOTlkZjFhLCAweDY0NzFjNTg5LAotCTB4MDQ5NzVlYmYsIDB4ZDRjOTJjZjcsIDB4OGEwNzI4MDEsIDB4ZDdlMjQ1ZWEsIDB4ODI1Mzg5YzgsIDB4YjI5ZmM2ZWYsCi0JMHg4ZGFkYzFmZCwgMHg2YTU2Y2NlMywgMHgzZDdmNjEwYiwgMHhkMWYyNjY2YSwgMHhkODg2NDliMywgMHhjY2QyYjIwOCwKLQkweDBmYjUzNGU0LCAweDY0YjJmZTMwLCAweDQ1MjRiYWY3LCAweDdiMjUwNzQzLCAweGY0ODkyNWQ3LCAweDA3MWUyYWZiLAotCTB4MmJmYjAzNTEsIDB4YjBhMjU3NmQsIDB4MDlmNjRhNzEsIDB4MzhjZDQ2ZWUsIDB4YmY2YTNmNmEsIDB4NmVkNjZlY2EsCi0JMHhmNjk2NWVmOCwgMHhjYzA5N2ZkNywgMHhiOWY5ZDcwZiwgMHhkOGMyZjIwMiwgMHhmYmYxOWY0ZiwgMHgzZmY3MjdlOSwKLQkweDc0MDlkNWNmLCAweDg5YWZiOTVlLCAweGZiOWNhNDE4LCAweGRhZTFmNGMxLCAweDU1MzUwMDczLCAweGRlNzIxNWUzLAotCTB4MDY5ZjExMzAsIDB4YjE3ZmI5N2UsIDB4ZGYwNjlmMTEsIDB4ZGYyOGUzYWQsIDB4ZDc1ZGZjNTMsIDB4MDJhYzg0MjYsCi0JMHgxNTI5OGZlNCwgMHgwMzc3OThkOSwgMHhmZjcyNTc5ZiwgMHg3NjU0ZTU3MywgMHhmMTlhZDNiZSwgMHhmYmUwMGFmYSwKLQkweGQyMDJkOWU5LCAweDk1ZmEwOTAzLCAweGFmYTg4OTAxLCAweGI4Y2UyMDc5LCAweDJmYjU5YjI4LCAweDFmODFlZGEyLAotCTB4ZmUzM2Q3NWIsIDB4MDNjMjcyYTQsIDB4NjFiMmE0NzIsIDB4NmZkNjFlNWQsIDB4N2ZkMDNjMTIsIDB4ZDQzY2UzNmIsCi0JMHg0NTczOGE0NywgMHhjNzRkZTU4MiwgMHg2ZTJhM2Y1MCwgMHg3YzA4OTYzYiwgMHgwZWI2Zjk0YywgMHg4OWNhODFmNCwKLQkweDcxYzgzNzY2LCAweGZlNTUxZjk1LCAweDA1Yzc4ZDdlLCAweDBjN2I4YjEzLCAweDAwNjdlM2M0LCAweGNiZWMwZGYzLAotCTB4NGMyYmUyZDcsIDB4MTk5YTA3YWUsIDB4MTk3MjA2M2YsIDB4NTViNmJlYmYsIDB4MDg1ZTE1ODYsIDB4OWYzZjIzN2YsCi0JMHg1NWY4Y2NkOCwgMHgzY2U2ZWM3YywgMHhiNDVjYTdiOCwgMHgxY2E3YzU4OSwgMHg4MGEyOTg2YywgMHgyNDIyN2QzZSwKLQkweDk3ZDM3ZWUwLCAweDZhZGU5OWJmLCAweDgxMWFlZmU0LCAweDU0M2Y3YmVkLCAweDViZjk1NGJmLCAweDczZmE2M2U1LAotCTB4NGU1NzhjMWQsIDB4YjVlZTE0ZjksIDB4ODY3YWY5MTksIDB4M2JlN2YyZGMsIDB4N2ZhZjdjZTksIDB4Y2U4N2FlOTYsCi0JMHhlZjhmY2E3NywgMHhlNDZhNzU3NiwgMHg0MTI3Y2QyNCwgMHg3MTYyNTBiZSwgMHhhOTVjYWEzYywgMHhkN2JjNTg5MCwKLQkweDYxOWY5ZTBmLCAweDdhY2QxYmZjLCAweDczNGFjOGZmLCAweDZlNmI4YjNjLCAweGNmZWU5MTkyLCAweGY4N2Q5ZmM3LAotCTB4ZjNmOTAyZWMsIDB4N2NlYWY5NDIsIDB4MmY4ZWE5ZmMsIDB4YjNmN2Q1ZWUsIDB4YjE5YmQzOTIsIDB4ZDcwYTZlYmYsCi0JMHgxZmViODUzMCwgMHhiOGMwOWY5YSwgMHgzZTlmOGZiMSwgMHg1M2YwMDMzNiwgMHgzOWQyODdiNiwgMHg5M2IzNTdkMCwKLQkweDQ5Y2U0MTg0LCAweDRhYWZkYzIxLCAweGM2MWY0NTViLCAweDljZTE0YWJmLCAweDNlNWE5ZDFiLCAweDY1M2U3MTY2LAotCTB4OWU5MTM5Y2YsIDB4NDM5YmI3NGEsIDB4ZDJmYjY5ZDMsIDB4YzU4YzFmOWQsIDB4MTFlNThiYjgsIDB4M2UwYTQzOGMsCi0JMHg2MGU1ZjVjZCwgMHg4M2UwNThlNywgMHgxYmM1ODk1MiwgMHgwMGMyZTUxOSwgMHhlODY3M2IwYiwgMHgwNTlmNmRkYSwKLQkweGIzMzYxM2ViLCAweDJkYTVmZDdiLCAweGNkNjZjOGI3LCAweDIyY2Q4NGI5LCAweDFjZjBmNWFiLCAweDE4ZTk0ODMwLAotCTB4ZmNjMjU1ZWUsIDB4ZDVjOWY3YjQsIDB4MmRhZWEzMzgsIDB4YjY5NDRlNGMsIDB4OTYwNzY4YzksIDB4MGRkNmRlNmUsCi0JMHg2ZmE1YTM3MSwgMHgxNWRmZDE5OSwgMHhjNjA5ZmNkOCwgMHg2ZTc5NGZjMSwgMHgwMjUzZmEyYiwgMHhmY2VlYTI2ZCwKLQkweGRlYmM0ZmFjLCAweDg2NmMzMTY2LCAweDBhZDZiMzc4LCAweGY5YTNlZjNjLCAweDg5NmY5ODYzLCAweGJlN2FiNzFkLAotCTB4ZTdiMmIyYjgsIDB4NTIwY2VlZjYsIDB4ZmVmZDk2MTAsIDB4OTdjODE3MjksIDB4NWM5YjFkZDMsIDB4ZjliN2I3MTgsCi0JMHhmYjY1ZTNmYiwgMHhkY2I1ZTdjNCwgMHg3OWYxYmRmNywgMHhjYTE3ZTFhNywgMHg4NjJkMTMzOCwgMHgwM2NkYzZmOCwKLQkweGYzYTQ4ZjUwLCAweDcxODgyOWNiLCAweDk3YWJkMWNlLCAweDAzN2NmZDZmLCAweDZkNzc4ZmM0LCAweGU2MDFiMzNmLAotCTB4YTdlZGZlNWIsIDB4ODg3ZTIwMWIsIDB4N2VlMmIzZWMsIDB4MDhmYTc4MTcsIDB4ZWRhYWRmYzYsIDB4N2VlMTYyN2UsCi0JMHg2MTRmMmQ4ZiwgMHhkYmY3NzJkYywgMHhkNmY0MmY2NiwgMHgxYTQ0ZjdiZCwgMHg2Zjc1OGZjNCwgMHhmYzA5MmFmYiwKLQkweDRlZjY0Yjk2LCAweDkyZWViZjQzLCAweDQ5OTI1MzFkLCAweDRkNDJmZDhjLCAweDE3NDM2ZTgxLCAweGM0NmQzNzEwLAotCTB4ODNkNmMxZDcsIDB4MzFmNGU3MTgsIDB4YmZjODM3YzUsIDB4OTZjYjc4ZGUsIDB4ZWFiZjE2MGEsIDB4Y2Q5NjcxZTEsCi0JMHhmYmQzZTNiMSwgMHhkZWI2NTVjNCwgMHgyMDk1ZmQ3OCwgMHhmZTk5NWJmNywgMHhjYWY4ZGU3OCwgMHg3ZjFlMjgzNywKLQkweDZiZjgwMTc0LCAweGIxMDJmZDU2LCAweGZjMzFmN2YxLCAweDc2ZTIxZTMyLCAweGJjZmJmOGY1LCAweDhmZTNkMTc1LAotCTB4ODBlYjU5NDIsIDB4YzMyYmUzN2UsIDB4MzUzNzAwMTcsIDB4YzU5MjdkZmUsIDB4YmUwMTZkNTcsIDB4YzYwY2ZlZDksCi0JMHhhNmRlMDJiMywgMHhmOWZmNjA3YiwgMHgwZGVlMGQzYywgMHg3MzIzOTQ5YywgMHg1ZWQ5M2VmMCwgMHgwOWUyMWJiMywKLQkweDg5YmVmNzRiLCAweGUzYmRkM2ZjLCAweDEzNDNmNDc1LCAweDRkZGU4NzFlLCAweGRjNTg3ZjdhLCAweGQ5ZDdjMGIwLAotCTB4OTk3MTY0ZTQsIDB4YjcxMGZlMWMsIDB4NzdlMTcxZTksIDB4ZThjOTlmMWUsIDB4ZWNkYjhkNTgsIDB4YTc3MzVlMmYsCi0JMHg2YWQ5ZTk4NSwgMHhkMzQ1N2U1YywgMHgzMWZlM2NiYiwgMHgxNzIxMmY4YSwgMHg3YmVjNzRmMCwgMHg3MGE4MTFlZiwKLQkweDFjMzk3MzcwLCAweDFkOGUzZjhkLCAweGE3MWJkYjE3LCAweGY4MDVmMWNlLCAweDM3YTg3ZDgzLCAweDg3ZTY5OGJlLAotCTB4ZThkZmEyNjQsIDB4MWU0MzEyNGQsIDB4YjhiMjM3NzQsIDB4N2Y1OTZlZTUsIDB4MWY4YTMzZGYsIDB4Y2RiYzhmMTYsCi0JMHgwYmExYTdjOCwgMHhkZjNlNDM4YiwgMHg3YzI4N2ZmYywgMHgzM2YyODIzNiwgMHhiYTljMmZiMCwgMHhjNzJkOGViZSwKLQkweGZmN2NlMGRmLCAweDU5NjdkZjc3LCAweGIzZWYxODI4LCAweDYzZDAyN2ZjLCAweDA1MzFlYjQ1LCAweDNiNWVlMGVjLAotCTB4OGJiN2FmOWIsIDB4OWViYmQ1ZmIsIDB4NzU5ZTMxMTYsIDB4OTQ0MWNiNTUsIDB4NTE3OTQ2ZTMsIDB4YzQ1OGVmMDksCi0JMHgwYjcxZWY5OCwgMHhkOGRiYzNkNywgMHhkZGI1ZDEzZSwgMHg3ZWQwNzIxOSwgMHg0NmVjMGViYSwgMHgzZTZjYWU3YSwKLQkweGUwOWM0MGE2LCAweGFmN2Y5YmNiLCAweGM2MjlmM2IwLCAweDg0NGZiMDNmLCAweDdhZWZmMzM0LCAweDE2NThmZjc2LAotCTB4ZjhmY2NkNmYsIDB4ZTMzZTcxYzYsIDB4NjNkYTA0ZTMsIDB4ZmU2ODEzOGYsIDB4NTk0ZTM3NDQsIDB4M2I3MTQ1YjAsCi0JMHg2OWRlM2ZjZSwgMHhmNDBiNzdjOSwgMHhlOTgzYmE3NywgMHhjNDViYTc4MywgMHhiOWY3NThmYywgMHg2NmZiZTRkZSwKLQkweDc0M2Q3YmVmLCAweDQxNzdjNGJmLCAweDEwMWRlYzljLCAweGZkNDM2NWQxLCAweGY3MzM4OTcyLCAweDQ4NDRiOGFkLAotCTB4YTllZjhjMTUsIDB4ODFlM2M2NTksIDB4MDE0ZGU5N2UsIDB4YWYzOGQ3N2MsIDB4OTVkZjMwMjUsIDB4OWY4ZDVmMDAsCi0JMHgwOWZiNzY0NywgMHg0YTcyYTVlOCwgMHgxNWY4MzY0MSwgMHg0OTQ2ZjI4YywgMHgwNjkwOTEzNCwgMHhmOTljNGJmZiwKLQkweGVmM2MxZWM5LCAweDdjMDEwZjA4LCAweDIxMzhjZDFlLCAweDE5ZWZiZjQzLCAweDQ5ZWY1NGZjLCAweDlkMzI1NTY0LAotCTB4YzE0MTdiZGYsIDB4NGJmNjhjYmIsIDB4Njg2MGZlYmUsIDB4ZmY2ZmIzODEsIDB4YWY3ZmRlNmEsIDB4NTUyYmYzYTgsCi0JMHhjMTQ3MjM5YSwgMHg1ODJmMjEyZSwgMHhkYzQxYmUzMSwgMHgxN2Y3YzU2NywgMHhiOGFjMWIwMiwgMHhiZTNiODNkZSwKLQkweGViZjUxMjdjLCAweDlkODRjZGM3LCAweDg1ZWI1MGZiLCAweDliOTE1ZmQyLCAweGM3NjI3MWY1LCAweDA2ZmUxYjk3LAotCTB4YTYzNDMzZmEsIDB4YTA2ZDE3ZTMsIDB4Njg2ZWMxZjUsIDB4ZDM5ZGEzYjYsIDB4MmM2ZTNkYjMsIDB4NWU4YTQ1ZjgsCi0JMHhjODA2NjdiOCwgMHhhMzNiMjJiMywgMHg5MmU3YTJjNywgMHhiZmI0MzU0MywgMHhmZTU5MDNlMywgMHg3OGExZDZmOCwKLQkweGJiNmNiZmRmLCAweDBmMGNlMzEzLCAweDA5NTVkOGVlLCAweDczZjc1MmZiLCAweDUyZmIwMjc2LCAweGNmNWMwYmY3LAotCTB4MWZiZjg2N2YsIDB4YjQ3YjJmNTQsIDB4NDQyNWM2ZjEsIDB4NzFlZjY4ZjIsIDB4OTU5ZTQxOTQsIDB4ZmMxMDdkZTMsCi0JMHgwNDdjZTFjOSwgMHgzOGI2YWFmZSwgMHhmNTQxZmZiYywgMHgxZjNmNWQ1ZiwgMHhiY2JiOTFjYiwgMHg0MWMxYzc0OCwKLQkweDc4NGJkZWVjLCAweDYzMDNjODEwLCAweDRhZmNiNTNkLCAweDhmN2UzMGViLCAweDQ0NzNiNjk4LCAweDQ4OTQwN2ViLAotCTB4MGVkN2NiMjEsIDB4MDNhNGYyNjIsIDB4NjU2YjVmZWIsIDB4Zjc5NmFmZmMsIDB4Y2ZkNTk3ZWQsIDB4ZDVkMzBlYjcsCi0JMHhmMjU3ZGI1MywgMHhmNDhjNDFmNywgMHhlMDU1YjM3YiwgMHgyZTZmYzFmZSwgMHg0NWZlZjU4OSwgMHhmN2UzZjk4YywKLQkweDY4MjQwOTlmLCAweDliNjUzZDAyLCAweDgyMjVkZjE1LCAweGRmMTBmMzdiLCAweGU3NjE1M2JlLCAweDMwYWVlNTVhLAotCTB4ODdiMjNmYmUsIDB4NWI3MmUzY2IsIDB4MTk0M2RmMTgsIDB4ZjUwMWU3YzQsIDB4OWQyYzRmMjEsIDB4NTZiYmUyY2YsCi0JMHhkZTA0YWNiYiwgMHhjMTc4YTljNywgMHg1NzdjMDNlOSwgMHhmOGYyZmNlYywgMHg4ZTIxYjJlZiwgMHhkNDcxOGVjZCwKLQkweDFjZmMyZjE1LCAweDFjYzJhMGU5LCAweDEwZmMwMzllLCAweDFiMjY2NmQ5LCAweDFkYjdjZjgxLCAweGVkN2UwMzRlLAotCTB4MDk2OWMzOTIsIDB4NTc1ZTczZGYsIDB4YmMzNjYyZDEsIDB4NzFkNmMwMWYsIDB4MGFmZWJhYmEsIDB4ZGVhY2U3YjgsCi0JMHg0N2VkMmNhNywgMHg2NTZiM2NjZSwgMHg1ODVmZTg3ZSwgMHg3OGFkNGI3ZCwgMHg2NzdmYWRhZSwgMHhhY2Y1NzRlNywKLQkweGFmNTdiODJjLCAweGM0YjUyZmQ2LCAweGFkNmI4Yjk2LCAweDRmNzYzZmYyLCAweDVlZTdkMWQ4LCAweDQwZWI1YWUyLAotCTB4OTIzYTYzZDAsIDB4NDk1M2VmYzAsIDB4ZTc5MDZlZjUsIDB4ODdkMzliYTUsIDB4ODBlMDlmODAsIDB4ZWU3N2JkNTUsCi0JMHhlOGZkODM4OSwgMHg3YjQxZWM4MCwgMHgzZWVkNTIxYSwgMHg5YmRhYjI3MywgMHhmZjAwOGQyNSwgMHg4OTJjYThjZCwKLQkweGYxYTdhM2FlLCAweDA0NDFjMjkzLCAweGIzYWQwZWUyLCAweDBkYmRjOTYyLCAweGEzYzIzYjU2LCAweGM1ZjY2MmQ0LAotCTB4MGNmOGQ3YmEsIDB4YzEwN2Q3YTcsIDB4YzZjNzFmZTgsIDB4Yzc1MGZlMDMsIDB4NTA4NzIwM2QsIDB4NzliNzBmMGUsCi0JMHgyZWQ0M2Y1OCwgMHg5YjY1ZWY4MiwgMHhkZWU5Njc2NywgMHhiMTZhOTBjNSwgMHg4NDUzZTUxZSwgMHg1M2E5MDk2NywKLQkweDViZjIzNWIyLCAweDY5NjRhZjFkLCAweDA1OTQ5Njc2LCAweGVhZmZhNWRmLCAweDhhMzE1N2E1LCAweDQ0NGMxMjY3LAotCTB4MzBlMjUwYmQsIDB4YmFhOTc1MjYsIDB4NWM5MjA0ZmIsIDB4MjlmODAxNjAsIDB4ODkyZGMwYTQsIDB4YzhiNTJhNDAsCi0JMHg4MmQyMzZlZiwgMHg1YmFhODNhOSwgMHgyYWE4ZmRlYywgMHg2NGYyNzIwMiwgMHgwNDE3YmJlZiwgMHhlZWJjMjhkMywKLQkweDFjMWZiOTQ2LCAweGU5YzVjODRhLCAweDEzZGZmZjcwLCAweGFmYzBkNmU3LCAweGY5YzJlYWNkLCAweGMyMmFhNTk4LAotCTB4Mzc3NGM1ZTQsIDB4ZDA0MjIzZTgsIDB4ZjRhM2JlNGYsIDB4OWY5ZDUzNTQsIDB4N2Y0OGY0MDUsIDB4MGNmZjcwN2MsCi0JMHgzZjNhMGY0ZCwgMHhhZmU1ZmI5NywgMHg3NGEyMGY0MCwgMHhmYjU5ZGVjYSwgMHg1MGQ1MDkzMSwgMHgyOGY4NDMxMCwKLQkweDEzMjc1NWZhLCAweDlhZDgzZWY2LCAweGRlZDY4OGI3LCAweDZmZTcyYmY4LCAweDcyOGZkYzEyLCAweDNmYTI0MWNjLAotCTB4YjEwNzlhMTEsIDB4MjZiNmYyMGEsIDB4Mzg1Y2RiZWUsIDB4NDliODc0NDcsIDB4YmI0MmY0MTgsIDB4MzRlZDg0ODMsCi0JMHg0ZTk2OGM3NSwgMHg5NWRmZjk2YiwgMHgzYTFhZjM0ZCwgMHg5N2Q0NGY3NSwgMHhjYTgyZjkxYiwgMHgyZGI4YzMzNSwKLQkweGVmZGEzZjA4LCAweDNmN2U4NjY3LCAweGQ5ZmJmNDMzLCAweGMyYWJmNWY3LCAweGU4ZDk2MDI5LCAweDU2MDlmNzg1LAotCTB4Yjg3MDE3NTYsIDB4MWMyY2YxYjEsIDB4YTMzZTE0NmUsIDB4NjIzMzdkZTAsIDB4NzlmOTc5YjIsIDB4YzZkNWMyMzgsCi0JMHhmYTg2NjM2NywgMHg2YzgzYWYxNCwgMHgwN2E3MDhlOSwgMHgyMDQ1ZjZlMiwgMHhkNjI0OTY2ZSwgMHg1NzdiYjAxMywKLQkweGE2OWY2YzA4LCAweDRkMGUwNTNmLCAweDIwYjZlMjNiLCAweGM3YzdkZTFmLCAweGY0NjM2NDE5LCAweGVmNWJkZWFlLAotCTB4ZTc4YWRmNWIsIDB4NWJlYTdkMWEsIDB4OGI2ZmFiZmIsIDB4ZGZkOWRmNWQsIDB4ZTczMWVjN2MsIDB4NGNlNTQzZjMsCi0JMHhmZTZmMGJlNSwgMHg3YjYxY2UwOSwgMHg4MjliOGRlNSwgMHg2ZjI3NDczMiwgMHg5YzI4ZDkwNiwgMHg3ZjhmZTIyYSwKLQkweDk4NWY4OWRiLCAweGEyMTk2OGRlLCAweGU4MGQ5ZmM3LCAweDZkOGZkMjk1LCAweDExYmJmZTg0LCAweGNiZDFmZGVmLAotCTB4OWEwZWJlM2MsIDB4NzVkMmE0NzcsIDB4M2Y4Zjk0ZmQsIDB4NjM5ZDg5YjUsIDB4Zjk4NGI2ZGYsIDB4ZTdiOWE4ZGQsCi0JMHhmMmI3ZmE4MywgMHgxNGI1M2ZmYSwgMHgxOGUwZmZhMSwgMHhiNmU5MTc3ZiwgMHhkZTE3YTY3YSwgMHhlNzg4YWY3NiwKLQkweGZkZGU3ZGNkLCAweGZmMjg1ZjgxLCAweDA4NTRiZWRjLCAweGJkNjNkMzg1LCAweGUwOWE0NDYzLCAweDNlNWNkNDdlLAotCTB4MjA1ZGYxYmUsIDB4YWRlNGYxM2YsIDB4MGJiZDYzMTEsIDB4YmQ0Y2U4YzQsIDB4NmY3YzY1NTcsIDB4ZTAyOTIxNjAsCi0JMHhiZmU5M2RlZiwgMHg5MWJhYjI2ZiwgMHhkNjFlNDEwZSwgMHg0YmVlOGU4ZSwgMHg4ZTk0NzVjMSwgMHg3NGE0OWY0MSwKLQkweDcwZWNlNzBjLCAweDNjZTMwNjNkLCAweGYzOGIwYTVjLCAweGU3OGExOGU4LCAweDNiM2NhYTYzLCAweGUxYzRmMWViLAotCTB4ZDM0ZGVhZmUsIDB4NzhiODE3YmQsIDB4NWUzOTI3YmMsIDB4NzNhNWFmMjMsIDB4MmI3YmRkMzYsIDB4MDUzN2IyMzUsCi0JMHhlZTdjOTVlNCwgMHhhNmExZTIzMiwgMHgxZThkNDJhZiwgMHhlYTljYTY4ZiwgMHgxMGNjYzhhMSwgMHgyNzcyODRhNiwKLQkweDljODEwYTQ1LCAweGE0MDVkYzkzLCAweDk5NThmNDA4LCAweDVmNWFhN2QxLCAweDU3YWNiYzQ5LCAweGZlOGQ3YzZmLAotCTB4ODc4ODAxYmIsIDB4M2JlMmU1ZDIsIDB4ZDcyOGM5M2MsIDB4ZTAwYjA1ZWQsIDB4ZjVjYWU4OTMsIDB4ZTk3ZDFkZmEsCi0JMHhhZDk1YjgyMSwgMHg5ZGQ2MDZiYiwgMHgzNTNkNzdkZSwgMHhmYThiZDc4YSwgMHhmN2RlODRmMywgMHgzZjMwMmM2OSwKLQkweGQzNzllY2QxLCAweDBmZmJmMzAzLCAweGE1MWY4MDk5LCAweDI3YmM3YzJmLCAweDY3N2UxNDQzLCAweGRlMzE4MzQzLAotCTB4M2U5YjhjNDMsIDB4ZGY1N2M2MTIsIDB4OWQ1MzVjNDUsIDB4MmJhZGU3ODIsIDB4MmI4OTdiZjgsIDB4ZmU2MTQ3YWEsCi0JMHhlNTllZmU3ZSwgMHhhNjBmNmFhYSwgMHhkZTJjZmMyYSwgMHhjZmM3N2M1YSwgMHg2ZmY1ODIzMiwgMHgyNGZjNzM3MSwKLQkweGZjN2MzODlhLCAweDUyNTkyZmE4LCAweGQwMWNmMGFhLCAweGMzMGFhZWVhLCAweDA4NjQ1OWZiLCAweGRhNjAyN2RkLAotCTB4OWY4NDVhZWUsIDB4ODdlODI2ZTIsIDB4NmYzMWY1YTQsIDB4ZTU0ZDNjODYsIDB4MGY4OGQxZmEsIDB4OGE0NTVkYzksCi0JMHhkZGJlNzk2OCwgMHhjZGMwMjBmZiwgMHg3YmE0MTllYSwgMHgzMjljZDAxZiwgMHgwM2RmN2JlYywgMHhmNWE3YTVlYywKLQkweDcyMjYyZTRjLCAweDI3YzIzMjdhLCAweDY1ZWY2MTUxLCAweDlmZDQ3NGFhLCAweGUzYzM1NTVlLCAweGY2YWUxZjc0LAotCTB4ZGZjMzVhNjIsIDB4Nzc4MWFhODEsIDB4M2Q0ODE0N2YsIDB4ZWRjODFmOTgsIDB4NDcwYTFhYzQsIDB4ZGYwOGZlZjgsCi0JMHg3M2FhNmIzNywgMHg5NzJjZmNiMSwgMHhhYWE2ODk1NywgMHgyNWMwMzJmZCwgMHg2NmZmMzA4MSwgMHhjOTBjOTA2MiwKLQkweDE0MDQyYzIxLCAweGM0ODI1MjdlLCAweDljZjU3OTAzLCAweGU2YzY5ZGQwLCAweDc0NDFlOWNkLCAweGRjNzc4NjRiLAotCTB4NWUwMDhmM2MsIDB4MjZjYjBlZWEsIDB4NGI4YjkzZjAsIDB4NjgxZjI1YWYsIDB4ZTU5YzU5ZTgsIDB4OTliZjA3OGIsCi0JMHhiMDBiZjBlOCwgMHg3ODAwM2RmZiwgMHg0NzU5ZjNhNSwgMHg5NmVmODVlNywgMHhjOTU4N2E3MiwgMHhkMzlhYmVmMSwKLQkweDFmNDA3ZGMzLCAweGQzOTA3ZDM0LCAweGZhZThhZmM1LCAweDY1ZTM1ZjIxLCAweGU2ZDYwMWY3LCAweGM0Yjc3OGIzLAotCTB4Yzc3ZjEzMGMsIDB4ZjFiNDRjMmMsIDB4MTZkZWYxNjQsIDB4MjI3NWQwYTIsIDB4YzUzMDdhOGYsIDB4NWJjOGVhNzcsCi0JMHhmYjE3YTQ2NiwgMHhhMTEzZTI2OCwgMHg0M2JiYWRmYywgMHg4MmM5MWRlYywgMHhlMzM3ZDg1NCwgMHgyNzIzNzdkNSwKLQkweGUzNjdlMjdhLCAweGM0YjBkNTQ1LCAweDk5MTM3M2RmLCAweGYzMTFkMWRkLCAweGVmMWFjNjdkLCAweGVmZDgwYjAxLAotCTB4ZWVjN2NkZmQsIDB4YTRhZmE1ZjUsIDB4ZDllYmQ5ZTMsIDB4ZmUwMWM1YmQsIDB4Njg4YmQ5ODIsIDB4ZjU0ZjUxZGUsCi0JMHg4Y2U1MDI2ZiwgMHhkZTc0MWQyZSwgMHhjNjdkMWE0NSwgMHhiZmZkOGZkZSwgMHg1MWNkN2VkNCwgMHg3YmU3YzUxYiwKLQkweGU0NTE0MWIwLCAweGI4N2ViYWZmLCAweDYxNGJlMDE1LCAweGM3M2YwMWVkLCAweDJhNDE3MmMzLCAweGYxYzNmZmYwLAotCTB4ODczNWZkYjEsIDB4ODNkMjMyNmQsIDB4MWQzMmZiMmIsIDB4M2VjOWQ3M2QsIDB4OTg5ZWU3NmMsIDB4M2FmYmEzYTksCi0JMHhhNjEyNzcyZSwgMHg1NzdkZDA0ZSwgMHg2ZGVmY2NlNSwgMHhiMTJlZWY0YywgMHhiY2MyY2ZmYiwgMHhjNWQxY2U5MiwKLQkweGJjNGE3ZTUxLCAweGE5ZGNiNjIxLCAweGRjMjA5NTkxLCAweGMzMTlhZmRmLCAweGE2NzA1Y2U0LCAweDNlYWJmNGMyLAotCTB4YTdjOTg0NzIsIDB4NmYzMmU0YjMsIDB4NjQ1ZjQzNTAsIDB4ZjAzZDQxMTQsIDB4ZWU4YTk5OGIsIDB4YzAzNWMxZGQsCi0JMHg3ZTVlOTQxZiwgMHgwNTdlZTljZCwgMHhjNTRkMDFmMCwgMHg0ZGQyMGExMSwgMHhkYTEzNzRjMiwgMHg1ZjM4YWJhOSwKLQkweDY4ZjljZmRkLCAweDg3YTNlNzJkLCAweGMyNDY3ZjgwLCAweGRmOGNhZTNiLCAweDA1MWRlMjI0LCAweDhiOGQ0OGZiLAotCTB4YzAyNThmYmQsIDB4OGQ0OWI0ZmYsIDB4ZTg1Y2ZlNmQsIDB4YjMyZGU2YWYsIDB4MzUwZmU3MDAsIDB4MTE3NTJmOTIsCi0JMHg5NzdlMjllNCwgMHhlZjhmMzA3YiwgMHhlZGViMDZlYSwgMHhiYmYxNTg5ZSwgMHg5MjkzZWQ0YiwgMHhjOTVlMTRlYywKLQkweGRmYmY4Njc2LCAweGZlMjE2N2Q0LCAweDMxNmY2ZTJjLCAweGQ4NzI0YmFjLCAweDE5YWZhZWQwLCAweDY1OGUyOTY5LAotCTB4YmRlY2Q4MWYsIDB4NTNiNzRlZjAsIDB4OWZjODBmNzgsIDB4ODE3ZjZiZDAsIDB4NjY2ZWExN2IsIDB4MzdmZGMyMGUsCi0JMHgwNjM5OWY3MCwgMHgzM2IxOGNmZCwgMHgwNDg2NDA3OSwgMHhmZjBkMDhjOSwgMHhkY2Y3ZjFkNywgMHg0NjQ4Mjc4OCwKLQkweGYyYzBlNDY5LCAweGY4MDhmMzhiLCAweDdmZjJmYTc3LCAweDEzNmZmMjNmLCAweDAyMzU3ZjkzLCAweDc4MGM1N2RmLAotCTB4NTUzMWY3NTUsIDB4ZDc4MDQ5ZmUsIDB4YjllNzdkMDEsIDB4ZGQ1Y2EyZjIsIDB4Y2I5OTdiM2QsIDB4M2NiZDYzNmYsCi0JMHg0ZjlkOWRiYiwgMHgyZmM0NmYxMSwgMHg3MGE3MmRmNCwgMHhjZTZiYjNjYSwgMHgwOWM0OTQ5NSwgMHg1ZDk1ZWZiZCwKLQkweDQ2MWQ2MzE1LCAweGY2MTI3N2I5LCAweDkyMjU5MDNmLCAweDU5MDVkZjFmLCAweDE5MWU3OGE4LCAweDhmZTRmMjBmLAotCTB4M2ZhNWZlMmMsIDB4YWYxZDQwZmQsIDB4ZWUzMTVjZTgsIDB4NzJlNzg1ZjMsIDB4YWUyOTlmNzEsIDB4MjBmZTQ1Y2YsCi0JMHhkOGQ3OGRlMCwgMHg3ZTFhMjc0OSwgMHg5ZGJjMDJlNiwgMHhhM2U3ZTdhOCwgMHhlMjA4NzIwZCwgMHhiYzZmZjY1MiwKLQkweDE0ZDlhMWU3LCAweDg4MzcwYjllLCAweGQ3ZmVmZWVjLCAweDZhMjc3ZGRmLCAweGI2NDgxYmUyLCAweGY1M2FmNTA3LAotCTB4YTExM2I0M2QsIDB4NzNkYTVkM2IsIDB4NThkZmMyZWMsIDB4ZjYyZmEwN2QsIDB4MzYxNGNmYjcsIDB4NmJkZmI2YzQsCi0JMHg1M2QwNTdlMCwgMHgxZTgwMWYyOSwgMHg0ODgxZjU0YSwgMHg1Zjg1ZjQxOCwgMHgwOGJkZjE1YiwgMHg2OGRjMWYzNSwKLQkweDU0MGVmOThmLCAweDE5NWE3ZGJlLCAweGRkYmU2N2QwLCAweGM0YTQyNzc3LCAweGZhZmU4MDkxLCAweDhlYTFlNmZlLAotCTB4YTY3YzFjN2IsIDB4MjhmNjRlNzAsIDB4NzBhNWIzOGYsIDB4OWZmM2E5OWYsIDB4ZTNiMjczYjEsIDB4MmM0MjFmZGMsCi0JMHg3OGRiOTRmZCwgMHg3MjlmYTdiOSwgMHgyMTY3OGIxNywgMHhlYWU1ZDhlZSwgMHgzYjcxNGU3YywgMHg3YjQ2ZTE3MCwKLQkweGZkOGM3OTY4LCAweGVmYmYyMTdjLCAweDQ3OWY5MGI3LCAweGQ1M2ZmOGE4LCAweGJhMzEzN2FiLCAweDNmMmZmYjUxLAotCTB4ZGZlMThhMzcsIDB4NTNjMjY3NDAsIDB4M2VhZTkwNjMsIDB4N2ZhMzI0M2QsIDB4NGFlYTc4NGQsIDB4ZjJhNTJmN2MsCi0JMHg5N2ViMDU5YywgMHg0MTVmZGU4YiwgMHg0ZDc5MTYxYywgMHhmM2JiYmE0NCwgMHg4NzNjMzhmMCwgMHhjM2JjMzJlYSwKLQkweGI3ZjM4N2I4LCAweDJiOWUxNjlhLCAweDg1OTllOWQ1LCAweGVjMGEwNWExLCAweDJhZTc4NWNiLCAweGRlMjExZTkxLAotCTB4MTM5N2VlMTEsIDB4OTM0YmY2ZjIsIDB4MTM1NzRlMjQsIDB4Njk5MWZkYTAsIDB4YTJiZDY5Y2IsIDB4NjRiZjQ2NGUsCi0JMHhmZDEyYjA2MiwgMHhlZjc2OGQ4NCwgMHhkYWU0MzFmZCwgMHhlNzQ3YmIxZSwgMHgyY2VhMjgzNywgMHgyMzg5ZmVjNywKLQkweGU3MzUxMjQ4LCAweDdiZjkwYmY1LCAweGQ4ZTc0NWUxLCAweDFkYzQ4NDdiLCAweGNmNDAyOTI0LCAweGU5NDRkZTVjLAotCTB4NmM2ZWZmNTIsIDB4Y2JlMTg5OTcsIDB4Zjg1N2RlYjgsIDB4NWRlOTVmM2EsIDB4ZDY3ZTg0ZWYsIDB4NWViNjYzZmIsCi0JMHg3NTE3Y2ZiZSwgMHhmNWQ2MWFlNiwgMHhkNmIxZjFiYiwgMHg0NGNmNWQxNSwgMHhkZmNlNWY2YywgMHgzMTM3MmRmOSwKLQkweDlmZTVhYmJjLCAweGY0ZDVmMWYzLCAweGI4MmNmNTc4LCAweGY4NGE0MzYxLCAweGExODU5MDNiLCAweGZmNzgxNTNiLAotCTB4M2UyMWIwYTgsIDB4YjNhY2QwNDEsIDB4NWQ1NmZlYTgsIDB4ZmQ2MTQ5NWMsIDB4YWFmZjdjM2MsIDB4MzI5ZTYxYTgsCi0JMHg3YTQ3MjM1ZiwgMHhlY2ZjMTRmMSwgMHhhMjIzNDlhNSwgMHg4MWZjZmE3OCwgMHgxZGNiNjk5ZSwgMHgxYzE0YWZiMCwKLQkweGZlM2IzZTAzLCAweGU3OWNjNTY0LCAweGYwY2JmNDA5LCAweDhlMDk1Mjc2LCAweDcyYjk0MmFkLCAweDNkZDYyYmE3LAotCTB4Nzg4ZGNmOTQsIDB4MWI3OGU3YWIsIDB4MzVhMzI0MTEsIDB4OTdjNTQ2NzIsIDB4NGRmMWZkYjEsIDB4ZjljMTc3NjUsCi0JMHhlY2Y1ZjFmNCwgMHhlNWZlOGY3NSwgMHgxYTdjNmM0YywgMHgzMDc2ZThlMSwgMHg3MWU5YTlmOCwgMHgyZmZiMmZiYSwKLQkweGViOTc4ZTA4LCAweDg1ZmE5YmUyLCAweDBhYmZjNzIzLCAweGQ1M2JmNTI3LCAweDFjMGVhY2FiLCAweGEzN2JiMDk3LAotCTB4MDQxN2I5ZjUsIDB4OGNmOGU4YmYsIDB4YmUyYTRlM2UsIDB4N2U0MWViOTEsIDB4N2MwOTM5NTEsIDB4MDdjOWVhN2EsCi0JMHhlNWRiNmFjNiwgMHg4NDBkMjdkYiwgMHg4NWVkNDg3MSwgMHg2ZmRkOGY5ZCwgMHhmZDQxYTdmNywgMHgyMWVmNjRlMCwKLQkweGQxNWJjYTBmLCAweDVkZDc0MzViLCAweDc3NjhmNzEyLCAweGRmYWI1NzE4LCAweDkzNTY1NmJmLCAweDRhNWZjMTJiLAotCTB4YzEyYjg3ZWQsIDB4MDViNTQzNmYsIDB4ZTZhOGEzZDQsIDB4ODQ3ZDA1ZTAsIDB4N2FjNWYxNTYsIDB4ODM5MjZhMTcsCi0JMHg1NjU2YjNmOSwgMHg5NWJmYTE1NywgMHgwZGM0ODI1OCwgMHhmOGMyM2Q3ZSwgMHg0MmNjOWM5MiwgMHhkMGU0OTdmZiwKLQkweGVjOGEwMWViLCAweDRkYmY4Mzc3LCAweDY1OTFmN2UxLCAweDNkMjZiZmM5LCAweGM0ZDllYzFiLCAweGJlMDZhMDhjLAotCTB4YmM1ODM5NTcsIDB4YzU5NGRhYzQsIDB4Yjc0Mzg4NDEsIDB4Mzg3MTlmODAsIDB4ZWFjZTM3ZmEsIDB4YTUxN2ZiZWMsCi0JMHhkZDI4MDM4NSwgMHhkYTdkY2ZhOSwgMHhlNWNiZTg0NiwgMHhmZTgyMTZjNCwgMHhiYmY0ZDFiNCwgMHg3NDg5MWU3NiwKLQkweDRjN2RiYWRlLCAweGUyYzkxNzBmLCAweDg5MGY3M2MyLCAweDg3MTViZjcwLCAweDcyODJmZDA3LCAweGMzOTczNTc4LAotCTB4ZGMyZWVkY2IsIDB4NjQ1ZDU2N2YsIDB4OGVhMGZiNDIsIDB4MGI3ZWMzZmIsIDB4OGI4NDMwN2UsIDB4ODQzMjc2ODQsCi0JMHgyNTdkNDBkZCwgMHhiMGViODgyZSwgMHhkMDQ0N2FjMiwgMHg3Nzk4YzNkYiwgMHgyMjMyOGJjMiwgMHg0MDI1YjEzZSwKLQkweDA0Nzg5ZTNlLCAweGUxMjAwZmM4LCAweGY2ODdhMDU1LCAweDBiYmNlYTRjLCAweGZkNThhN2JlLCAweDVmYmYwMWIzLAotCTB4MTUxYzc2YTQsIDB4ZTA1YTBmYzAsIDB4NWNlMDA0YmYsIDB4M2MzMzA2MmYsIDB4NjJlM2ZlYjQsIDB4YTVlYTAzMjQsCi0JMHgxMmI3YTJkMSwgMHhjNDExN2E1OCwgMHhlNzM1ZmI0MSwgMHhjZTFkZWMyYiwgMHg5YmVjNWU2OCwgMHg2NGE5NjhiZiwKLQkweGZhZjg2ZjM4LCAweDJmZjk2ZDEyLCAweDA3NjJiZWFjLCAweGY2NTZmYmVjLCAweDA3ZTI0ZDdlLCAweDlhYjljYTAyLAotCTB4MDE3NzNmNWUsIDB4NzFhOWRiZGUsIDB4ZDIzZDdmMzAsIDB4MjFkNWQwMDUsIDB4OTU5ZjRmYjYsIDB4ZTgwOTcxM2MsCi0JMHhmNTk1MWIzZiwgMHg1ZTFlNmVhMiwgMHg3NmUyNWU1ZCwgMHg1M2E1MTM0ZCwgMHhmNGFiOGJmMCwgMHg5OWYyNDIzMSwKLQkweGFlMmU4ZTgwLCAweDc4YjVkZmE1LCAweGMxNWZhMThjLCAweDM5ZmEyMzM4LCAweDQ3ZTc1MDRmLCAweDE1N2E0NWM3LAotCTB4ZmRiMGU1Y2YsIDB4N2IwZjQwZDYsIDB4YTBmZjM2MDQsIDB4MGZlY2NlZDUsIDB4YWYwMTE0MTIsIDB4OTNjMjU1YjMsCi0JMHgzYzdjYjA1NiwgMHhkZGYwN2Y1MSwgMHgzZjU1YjdjZiwgMHhmMmMxNTkzNywgMHhjYzBiOTY2ZSwgMHhjNjZhZTc2NywKLQkweDVmNmVjY2Y5LCAweGU1ZmUwMWRkLCAweDBiYTllZGQ5LCAweGI2NjU5Y2UwLCAweDIwOGZmMmU1LCAweDBlNDcyM2RkLAotCTB4ZmM0ZTQxZDgsIDB4ZjlhM2JkOGMsIDB4Y2EyZjIzZDMsIDB4YmM3NzhhMjAsIDB4NDNlZjExYjEsIDB4NzFmOWNlM2YsCi0JMHg4MGM4ODkwZSwgMHgyYjcxM2Y3ZiwgMHhjMjFlNGZjYywgMHg1ZTI3Y2RmNSwgMHhjMTkxNmY5ZSwgMHgxYzJkYmQ3ZSwKLQkweDlhM2FmOWJhLCAweGQwYzVmZGJiLCAweGNkNWE2MDc1LCAweDA5NzkxNDM5LCAweDcxNmZlNmQwLCAweDVhMmZhMWU3LAotCTB4N2RlNmQ3NmQsIDB4YmI1OWU1OTksIDB4ZGZmODFjMjgsIDB4YjgyYzkwYzEsIDB4MmRiYWU4YWUsIDB4OWQ3NTA3MDgsCi0JMHhhM2UyMjZiNCwgMHhmZGZjNGUxNywgMHhiZDJlMTUyMCwgMHg3YWRmYjZlYiwgMHhmYjBiZjgyZCwgMHgyZGIzNmY5MywKLQkweDcxNjIzZTYzLCAweDQ2NWU2Y2I5LCAweDQ1MDY3ZDM4LCAweGMzOTE1ZWYwLCAweGYyZTgwN2I3LCAweDFkYWY4NzYxLAotCTB4MTJkY2E0ZjgsIDB4MjE4NjkzNDksIDB4NWYyMTg0ZGYsIDB4NGEyZmZhMjksIDB4NzhmODcwYTIsIDB4ODE5MmZmYTgsCi0JMHgwMThlOGYwMCwgMHhiZTY3YTQxNywgMHhkNWZjZTljYSwgMHg4M2Y3ZGVmNCwgMHhiZTk5ZDExMywgMHg2NmMxZjk4NiwKLQkweGI1NWI3YTcwLCAweDliOGM0ZGUzLCAweDdiMzBmOGZjLCAweGY0NDJhOTBmLCAweGZhMGY3ZjVjLCAweDRiMTI0NGJmLAotCTB4NTdkMzU1ZWYsIDB4MmRlNjFmYjksIDB4OWQxZjdhODcsIDB4YzQ4NjczYWQsIDB4ZDVhMzNkZTAsIDB4NjY3YWY3OGUsCi0JMHhmZDNhOGI2NCwgMHhjMGI2NDY3YiwgMHhjNjNhZDdlMywgMHg0YmQzYTRkZSwgMHhlZWJhNzA1NywgMHgxMWM0MGZkYiwKLQkweGIwNTlmYjE4LCAweDU1ZGEzMjc0LCAweDI0ZjcxNTNiLCAweDBkYzFmZjkwLCAweDRjMTZjZThjLCAweDY3MTA4OWY1LAotCTB4ODA4ZDYxM2MsIDB4MWZmMTg4ZmUsIDB4ODc5MDEyNzYsIDB4MDllMmVhMGIsIDB4YjgyZjgzOWMsIDB4YmMxNjcxN2IsCi0JMHhlMWQ5NTA5NywgMHgzOTA0ZWI2OSwgMHhlMGJjMTIxOSwgMHhlZjE2NGI0NywgMHg5ZDI1ZjhjOCwgMHhkODA3YzNkNywKLQkweDNiZjkwYzNlLCAweDlmMGU5ZTYwLCAweDJiZjFhMWM3LCAweDE5NTVjOTc3LCAweGRiZWJhMDZlLCAweDBiOTAzZTFkLAotCTB4YmRmMjZlZjMsIDB4OTIyZDc4MGQsIDB4NzZiNWZiYzIsIDB4M2NkYmJjYzgsIDB4ZjMxZjQwYjksIDB4NGMzZWFjNWEsCi0JMHg1MWIyNDQyZCwgMHgyMjRmMzZiOSwgMHgxNTkzNDgxNiwgMHhkZjIxNTkyMiwgMHhlY2U3ZDRmZSwgMHgzYmFkODZiMCwKLQkweGVjMmM0NmQ5LCAweDgwYWZlMWZiLCAweGFjZGYyZTRlLCAweGE2M2RkNmU4LCAweDUxZmY5ZjQ1LCAweDExOWYzZTliLAotCTB4MGViM2U3ZDYsIDB4ODBiN2YzZTksIDB4ODdkMWEzMWEsIDB4ZTc2NWVjMGUsIDB4ZDg2NzY1ZGMsIDB4MDVlN2MxM2QsCi0JMHg3ZmMwODNkOCwgMHgzN2I5NDY2YSwgMHgwNzNkYWNhNSwgMHgzY2NmNGRjZSwgMHhmOTQxMzRlYiwgMHhmZDk4NmY5ZSwKLQkweGM1NjJkOTE2LCAweGJmZjZjYmY3LCAweDQ0YjYyMzYzLCAweGJhZDRjNzc4LCAweGQ4Y2ZjYTExLCAweGZmYzA3MjVhLAotCTB4ZmM2M2ViNDQsIDB4NDczNWRkMDMsIDB4ZjNiMWZkODIsIDB4MGNjZWQ1MzIsIDB4Y2VjNDljNjEsIDB4N2I5YzU5NmYsCi0JMHgwNDM5OGI2NCwgMHg3NjY3YjFlNywgMHhkMDJjZjUzZiwgMHg4MzJkOTlkZCwgMHg1ZTc5ZWY1MSwgMHhkZmEwOWEwOCwKLQkweGFmMGM3ZGUwLCAweDlkMmU2YzEzLCAweGFjZGIyOWZjLCAweDM4NDZlYmI3LCAweDczZDUzZTk5LCAweGYxMGI5OTRhLAotCTB4ZWJkNDk3NGYsIDB4NDg2OTdkZDcsIDB4NjRlZDFmOWYsIDB4ZDEzZTY3ZjIsIDB4NzM4NzRmN2MsIDB4MTRhYWNmNjYsCi0JMHg0ODI3OGJhMCwgMHg1OTgzZmJjYywgMHg5ZjdmMjY0ZSwgMHhlZDUxNWE3ZSwgMHgzM2JmOTE2YywgMHhkMTQ5M2M0NiwKLQkweGEyN2I0ZjdiLCAweDA2NGIzZmU3LCAweGMwMDAxYzQzLCAweDdiZjQ1ODYyLCAweGI1NWM2MTk5LCAweDdjYjk2ZmZmLAotCTB4ZmE3ZWU0NGYsIDB4YzIyMmFiYzgsIDB4YjE3NTc0ZTcsIDB4NTdiODljZWUsIDB4YTZmNmFkM2YsIDB4MzNlY2Q1NGMsCi0JMHg5M2ZiZjU4NSwgMHhiODVlYTFlNiwgMHhkNmJlNjkzZiwgMHgzMDcyZGIyZSwgMHg3Mzg4NTZlOSwgMHhkZmUxMmNkOSwKLQkweGZkOWYyYTRmLCAweDEyMTM0M2U0LCAweDAyZDhiYmUxLCAweDFmNzI4NWYzLCAweDJmMmQxZmQ4LCAweGQ1MWVhMGI5LAotCTB4NzFiNTMzM2YsIDB4ZTNmNTQ1MjMsIDB4ZjY2YWE2NTIsIDB4OTc0YTFmZDcsIDB4YmI0YWVmYmQsIDB4ZTU3NjdjMTksCi0JMHgxZDc4ZGMxNiwgMHg4MzU5NzdjNSwgMHg2NTZhODVlOCwgMHhmYmZmMzcyZCwgMHg4MzdiODAxOCwgMHhjYjVjZjc4YywKLQkweGJlZjhjOWI3LCAweDBhZjFhMDc5LCAweDM1OTQxM2Y0LCAweGVmODc5ZWJmLCAweGU3OWZhZGU4LCAweDQ4ZTU3OTg1LAotCTB4NDRjYzQwYTQsIDB4OTA0ZGMwZDcsIDB4ODFkZjZjOWUsIDB4ZmQ5NWQ1ZWYsIDB4M2M5MTRlYjUsIDB4N2QzZDVmMzAsCi0JMHgzZjQzN2E1MCwgMHg3MjgwZDUxNywgMHhmMDFlMDA2ZSwgMHg1NGY4YzMyZCwgMHhhZTExYmJmNSwgMHg3YjdkMjEyNSwKLQkweDE3ZmViZTIzLCAweDMzZmEzN2E3LCAweDYzNzc4YjRhLCAweDgzZDMwMWJkLCAweGNhNDg3N2Y4LCAweGEzYjk1Mjk3LAotCTB4M2ZjYTJmYjEsIDB4MzhmOGM1YWMsIDB4NTQyODM4ZTMsIDB4YjBkMGU3MzUsIDB4MWY5MDc5N2YsIDB4MjcxZjdjYWQsCi0JMHhjNzg3MjU4MiwgMHg3OTY3MGU4ZiwgMHhlODBmMzc3YywgMHgxOTdmZDYwYiwgMHhmYjgxZWE5OSwgMHg3YzkwMzc4ZCwKLQkweGMyMTc5ZjQ4LCAweGUzMjI4OTBmLCAweDZjM2JmNDZiLCAweDc3NWYyM2I1LCAweGZjOWYzYmI5LCAweGYzNDNkMDFkLAotCTB4MThjNzNjMTgsIDB4NzY3YmVmYzQsIDB4ZGVmOGMyNzksIDB4MGZmN2ZhYTAsIDB4NWYyY2RjYmEsIDB4ZjhjNTZlZGEsCi0JMHgyYjFmMzM4YSwgMHg0MTk2Y2YyOCwgMHg3ZmQ0MTc1YywgMHhkMTMyNmFkNiwgMHhiNmNjZTY3ZCwgMHg0ZTIxOTMwMSwKLQkweGJkODVhYmIwLCAweDY1YmE3YjJmLCAweDdiZTU2NGMwLCAweGZmMjM0N2Y2LCAweDMxZDZmYmFhLCAweDZmZWU5NWY4LAotCTB4MWI3ZDM4NGYsIDB4MTVkZjAwOWMsIDB4NzkzMjhlMmMsIDB4NTU0NjU1NDAsIDB4ZWRhOTNjMGMsIDB4MGNhYTk1MTIsCi0JMHhiNzIyMWZiMCwgMHg5OTFiYmMzYiwgMHg3MjBlOTNiZSwgMHgwNTNmYWNmZiwgMHhkYzc5ZjllZCwgMHhhZTM3YjE3ZiwKLQkweGQ3ZTgxOWUwLCAweGU4ZmFlYjQ5LCAweGUyNDM4NGJmLCAweDBmYWZhMDQ2LCAweGVlNWRlZjQ0LCAweGI1ZjNkMWUxLAotCTB4YmM3ZWQ5ODUsIDB4MzA1NjRhNGYsIDB4NDQ4MTY2M2IsIDB4NGZkNTEyYzIsIDB4MWZiYzgwMTcsIDB4ODM5NDc5OGIsCi0JMHg4YzA0MWEwYiwgMHg1NmI4NWEyYiwgMHhlZjc4MWViZiwgMHgwMzc3ZmI1NCwgMHg1ZTJmZTE4YSwgMHg5MTM4ODcwZCwKLQkweDFiOGI0YzE2LCAweGIwMjVlNWY0LCAweGZlMzBiODdmLCAweDRiY2ZjZjAzLCAweDcwZTVmNDliLCAweGJkZjQxMDkzLAotCTB4Y2NlZmU2ZjIsIDB4MzlmNmUwYjEsIDB4N2JlN2Q3NTEsIDB4MWY5M2E5YzksIDB4OGY4ZmNhMzIsIDB4NWY1YzAyYzQsCi0JMHg5MDliNTgxOSwgMHg3MDJhZmRmMiwgMHg0MmNhNmU3NywgMHhhNTllZTIwYSwgMHg2NjE2NTIxMywgMHgwNDE4M2JlMSwKLQkweDE2NDVhN2Y2LCAweGIyNjU3NDEyLCAweDgwMDNiYzNjLCAweGM5ZmM4M2FjLCAweGY1ODI1YmRlLCAweDk0ODdlZjY5LAotCTB4YTFlMTI1NGQsIDB4NjEzYWU4YWUsIDB4ZjI3MmRhN2QsIDB4NTk2M2MzMDYsIDB4ZTMxZTEwYmIsIDB4ODIzN2RlOGEsCi0JMHg5NWViNmE3NSwgMHgzNzk3ZjVmMywgMHg4MzdlNzU5YiwgMHg4NGYzODgwYSwgMHhlZmQ2OTUzOCwgMHg3OTdlYmFjYywKLQkweDM3ZGQxY2ZjLCAweGU3ZTI5NTg5LCAweDFiYjk1ZWUxLCAweGZjNTYzNGJhLCAweGE3MGU1MWY5LCAweDRjMmU2Zjg3LAotCTB4MTVmY2JlMDUsIDB4Mzg4MzgxZTgsIDB4M2RhOTczMjAsIDB4MDI3MWMyMGEsIDB4OGU4NWI4MDMsIDB4Y2RlYWNiNjMsCi0JMHg3MmNlNzk2MywgMHhmOWQ0ZmY5NiwgMHgxMGZkNWU1NSwgMHg3ZWM5Mzc2YSwgMHgyMDU4NTczYywgMHhmNzBjYmMxNiwKLQkweGZkYmE2NjlhLCAweDE3ZmMwMjVmLCAweDEyNjk3Yzk4LCAweDI0NmZhN2YyLCAweDY1MmU0N2M2LCAweGIzMjQ3ZmViLAotCTB4MThhYWQyZWEsIDB4Yzc4YWE5ZjYsIDB4NzgyZDBhZGYsIDB4Y2RkYzE3YmUsIDB4NzY2NzNkZjYsIDB4M2JmYWQ2NDQsCi0JMHhlZTRjNWRlMywgMHhjNGU4MWRjNCwgMHgwZWM4ZmU3OCwgMHhhZTExZWYwMSwgMHgzZGUxOGUxNywgMHg3OGQ3ZjViYiwKLQkweDI5Y2ZkODA4LCAweDE3MjA2ZjE0LCAweDA1NjQwYmQ3LCAweGRkOTU2M2JjLCAweDk3OGVmMzNhLCAweDM2ZDk3ZjAwLAotCTB4NWEyYTc3ZDQsIDB4MGUxNTg5MjcsIDB4NzdkMzNmNWMsIDB4NzA4ZDU1ZWMsIDB4NzczYzk4Y2UsIDB4MzNkMDI2NTQsCi0JMHgxYmRjZjc1ZCwgMHg4M2NiYmJlMCwgMHgxODNhYTVlMywgMHgwZjJjYTQxZCwgMHgwZDFlMmZhNiwgMHhmMWRjMTdlMywKLQkweDE4ZGJmMDEyLCAweDRkM2ZkZTFiLCAweDI2NzJiMGE2LCAweGY0MDZiYTYwLCAweGIxOTIxNDk3LCAweGNhNzdlNDFmLAotCTB4ZjgyNjRmNzQsIDB4YjE3NjFmNWEsIDB4YzQ5YTA2NzEsIDB4Y2Y0MTMzYjksIDB4ODRmOTY0Y2EsIDB4NDZkZjA1N2IsCi0JMHhiODc1YWUyNCwgMHhjOTMzNjRmZSwgMHg3N2MyZjk4NywgMHg2MDJkMTNkMCwgMHg4ODc5NjNjZiwgMHg1NTRhNzllMSwKLQkweDNjOWY4YzA2LCAweDRhODlhNTljLCAweDVlODJlMzE4LCAweGNlZGVmMTUxLCAweGI4OTY3M2UyLCAweDI1ZTNjYTA5LAotCTB4NGU0YTRkNWYsIDB4ZTk1ZmVkYTAsIDB4OTUyZDg2YTIsIDB4NTEwY2FmNTMsIDB4MDNiMGUxZjUsIDB4NjIzMjEwZjQsCi0JMHhmNWNmYWIxNCwgMHgyYzE5MjVlMSwgMHg0ZDMxM2RlZSwgMHhiZDU4NTdkNSwgMHg5NzE3ZDkxZSwgMHg3NWYzZjIwNSwKLQkweGU2N2YxN2E2LCAweDljNDFjNWYwLCAweGVjNGExNWRhLCAweDFjNDlkYmI4LCAweDM2NzM4MTRmLCAweGZmZjhkMjEyLAotCTB4YzBiZWIzMDMsIDB4NzM4MTFjN2IsIDB4ZWNkMjEyMmUsIDB4OWIyZWYwMDcsIDB4YmNiMzdlMzYsIDB4MTdiZTAwZjgsCi0JMHgzMDNhNDE1YywgMHg0NWEyYjgwZSwgMHg4NTdhNmYxZiwgMHgyYWI4ZjYyZCwgMHg5OWNlMDc5ZCwgMHg0MmVkMTA0OCwKLQkweGMwMjcxZjBhLCAweGNlMGFiMjI3LCAweDA1N2I4MjcxLCAweGNlMDZhZmY0LCAweDE5YTgyNDI5LCAweDQxMmU3MDNmLAotCTB4Njc5ZGVmOWYsIDB4YWQxM2Y2MTIsIDB4ZGFmNWY0NDcsIDB4MjQ3YWM0YmUsIDB4ZTMwNWQzYjcsIDB4NzEzYmJiNzQsCi0JMHg5MzljMDhiZiwgMHhhZmJhOWRiMCwgMHg0MTRjODRmNCwgMHhkZDZmZWE5OSwgMHhjM2RlNTYxZSwgMHhlYjU1YTNkZiwKLQkweGNmNzVmZGFiLCAweDk3N2RmODUyLCAweDU1ZGJmNjA4LCAweDg1MTEwNTRkLCAweDlmZWRhM2NiLCAweGJjYjM5ZmEwLAotCTB4NDVjMjNmN2QsIDB4N2MyODg3YTUsIDB4ODFhODI0ZWMsIDB4NDc0ZDUyNGYsIDB4ZmI3OTQ0ZDgsIDB4NTg0ZDBmZTcsCi0JMHg0YTUyZmEzZCwgMHgxZjM4MDc1YSwgMHhmNmFlMjcwNywgMHhhMmU1YTQ0ZCwgMHhmNmQ3Yzc0OSwgMHg0NzNlNWVlYywKLQkweDQ5YjBmMmYxLCAweDJiYzhmZWU0LCAweGE4OWQ0ZjU3LCAweGJkZmFmM2M5LCAweGJlM2Y4M2VkLCAweDQ3YjNjYTFhLAotCTB4MWVjYmY2YjMsIDB4Y2IwZmVhYmEsIDB4YTI1Y2E4YTUsIDB4NzAyYjQ4ZWIsIDB4NDMxNmYyNmEsIDB4NjNmMzQxZGUsCi0JMHhhMWI3NzkzNCwgMHg5ZTUwZDEzYywgMHg2MTBmYzg2MiwgMHhlMTljYmJmNSwgMHhjODRiZDEzNCwgMHg1Y2E2ODdkYSwKLQkweDAzZGZjMTJkLCAweDgxY2YwZDRhLCAweGM1NmJmYjliLCAweGVmZTFhYmJjLCAweGIzNjQ1NjJiLCAweGQ5NTgxN2JmLAotCTB4Mzg1OTc4MmUsIDB4NjU1ZjgzMTMsIDB4YTc2Y2Y5ZWYsIDB4YzAzNDYwYjIsIDB4OTA2NWUzYTEsIDB4ODI2ZGU1MDMsCi0JMHg0NzcwZjQxYiwgMHhlNjMwYjZjYiwgMHhkMzQ3OWRhMSwgMHg3YmRkODVhZSwgMHg4NjM5NmYyYSwgMHg3ZmVkZmFlZCwKLQkweGY4ZjkwOTk0LCAweDYzZWY1MWZlLCAweDE1YzVmM2JkLCAweDc4ZmFlOTkxLCAweDE5ZTJmZWYzLCAweDI2ZmUwODhmLAotCTB4M2JlOGI4ZDcsIDB4ZGVkYjVkYmQsIDB4MzdiZGZlOGMsIDB4NTNiYTQ3MmEsIDB4OGU1MTA3N2QsIDB4MDY3ZmVlMWEsCi0JMHgyODhlM2U2MCwgMHhiYzcwYTg5ZiwgMHg3YzU5ZDQ3ZiwgMHgzMWRkZjBiNywgMHhkYjYwNDdlZCwgMHg2NGY5MmZiNywKLQkweDdmOTFlODE5LCAweDBlMzEzOGFkLCAweGZiNzgyYWY0LCAweGRmOGRmNjEwLCAweDYxNGJhMTBhLCAweGY4OTQ3YTFmLAotCTB4NmY3MTg1MmYsIDB4M2Y3OGI4YWYsIDB4NTQ3ZDkxM2MsIDB4ZGUwYzdjZWUsIDB4ODdjZmZkYjUsIDB4N2YwZDVlZTYsCi0JMHhiM2E4ZWVlZiwgMHhhOWZjMjg3MywgMHg1MmFlMjM5ZSwgMHg4MWQxYzdjNCwgMHg0MjkyZjg5ZCwgMHhjYjE5NWM2NiwKLQkweDZhMWNlZDBmLCAweDVkYjdmOWEyLCAweGUyZmU1OWViLCAweDJmMjBjN2NlLCAweGVkNjMyZGM0LCAweDE1MGU3NGM3LAotCTB4MmMzMjYwZGQsIDB4NzI2ZGZjNDcsIDB4M2ZmN2U2YzcsIDB4Y2VhMzM5NzIsIDB4YmVlMWVlZWYsIDB4YTQyZTAwOTcsCi0JMHg3MDM3ZWQ5YywgMHhlNTQyZDBiZCwgMHhkM2QyOWNlOSwgMHg3ODUxMzc1YiwgMHgxZDg1ZjljYywgMHhhZWE2ZGNlNSwKLQkweGZhNjVhZjFiLCAweGUyMDBiMDcwLCAweGJjMzk5MjhkLCAweGI5NDQzZjcxLCAweDkwZGVhMTJlLCAweDQyNjA3YjBhLAotCTB4YjRjZTlmMTQsIDB4MTdlZTBmMGUsIDB4MDM2ZDU1OTcsIDB4Y2U3OTIwN2QsIDB4MWEyZmRjNjgsIDB4YjhhY2JlOWMsCi0JMHg0Mzc0ZDE3MSwgMHhlMmIzNGIyMiwgMHg4YmFlNGNkYywgMHg5NjFmYmMyNiwgMHhmNTEzOGY3YywgMHg3N2YxNWZhNSwKLQkweDIxZGYyOWFlLCAweDVlMzgzODdkLCAweGJiMzE3M2RlLCAweGYzMTczZGVjLCAweDRlNzQxYzJiLCAweDExZGU3ZWMzLAotCTB4MjIyZGViN2MsIDB4MDU2ODI0YTQsIDB4NTBkODk2YmMsIDB4OTFiNWI5MGYsIDB4ZDcyYTE1Y2EsIDB4ZWJiY2Y4ZWIsCi0JMHhmZThhNWRkNiwgMHg1ZmMxNWI4MiwgMHhmYmJlMWEzYiwgMHg0NzQ2MTM1MiwgMHgwY2JhZmNmNSwgMHhlZDQ0Nzc5YSwKLQkweGJlOTliYWIwLCAweGRhN2JlZDU0LCAweDVjYWM4ZDc1LCAweGU5NzU1Yjk1LCAweDVmYmFiZGFjLCAweDcxYjBkNzI1LAotCTB4ZTk3NTdmOTIsIDB4NWQ4NzU4NDYsIDB4OGJmNWU3NjIsIDB4YjhkYzhkNjYsIDB4MWJmZmY3MGMsIDB4MWZjMGUyYjIsCi0JMHg4MmE1ZjNlMiwgMHhjOTYxZmNkZCwgMHg5ZmU4MTMzMCwgMHg4NjFhN2UyYSwgMHhkMTcyYmVmYiwgMHg3M2YyOWZmMiwKLQkweGJkNGYxNTE2LCAweDViMWM2NWY2LCAweGVhOTEwMmY3LCAweDNmYmQ3NDBmLCAweGZkNzFmYjcyLCAweGNiMTg5ZjU0LAotCTB4M2U5OWIzMGUsIDB4NGNkNzQ1OTEsIDB4NTIyNWYwMzQsIDB4ZmVmODM4ZTcsIDB4Njk0ZTA4M2YsIDB4MTQ3ZmVlYjAsCi0JMHhiYzc3N2Y0ZSwgMHhmNzNlZjRmNCwgMHhiZTYxMzI1ZSwgMHhlODRmNGIxNSwgMHhiODcwYmRlZiwgMHhjYjA4NTZmZiwKLQkweGY3OWFkOWM5LCAweGIwNzdlODQ4LCAweGZhNzZiZjMzLCAweGNlNjljN2M3LCAweDUzZGNlN2U3LCAweGJhYTc3YTgxLAotCTB4NzdjZmZiMWUsIDB4NjRkZmMzZTUsIDB4NTFhN2YyMzQsIDB4OGVmYTNjMmYsIDB4M2ZmODJkNjUsIDB4MjgyZDJhOGUsCi0JMHg0YjVlOGY4ZiwgMHg1MWM1ZmVmMCwgMHhhYTk0MWVmZSwgMHhhMmZjZTZkNywgMHhkM2IwMTVlYywgMHg0ODg5YzUzNiwKLQkweGJlMDlmNzFmLCAweDdkYzc4MDU0LCAweGZlZTAxZTk0LCAweGEyOGYxYWI2LCAweGYxNzVjN2VlLCAweDQwODVmNWExLAotCTB4YzY4ZjM3MGYsIDB4ODgxZWVmNzMsIDB4NGI3YTg0OGMsIDB4MmViOGRmOTksIDB4ZjBlZDEzYmUsIDB4MzcxZWYxYmEsCi0JMHgwN2QwMDk5ZCwgMHg1YjMyMzFlMiwgMHg1ZDRmZmY0MSwgMHhiYWIzYTMwNiwgMHgzZWYwY2I5MiwgMHgyMDk3YTUwNSwKLQkweGU4Y2Q5ZmI2LCAweDQxMjY2ZWFlLCAweDc2NmVhMWJiLCAweDk1OWJkMjBhLCAweDlmMzBhYzg0LCAweGE5MjdlOGZlLAotCTB4MTBhM2M1ODYsIDB4N2I1NjM3YzksIDB4NjM4YzFkNmUsIDB4NzY3YjExN2UsIDB4NDEzNzhlZTcsIDB4NDU2YjVkOGYsCi0JMHg4OTUwMTYzZCwgMHhjOWI1MWRlNywgMHgwNzRhNWYzOCwgMHhhYTU3NDhjNSwgMHhkNDliZjY3ZCwgMHgwZjY4ZmRkMCwKLQkweDVmZWVkMTdhLCAweGMzY2RmNGVkLCAweGVlZDJmZmY5LCAweDU4MzdmOTgxLCAweDI2NGIxYWM5LCAweDA1NjQzNTk4LAotCTB4MWYzZTQ5Y2EsIDB4YzYwOGZiNTIsIDB4N2FlNWNjMmYsIDB4NjdjNTdiZTEsIDB4ZmM3ZmEwOWQsIDB4ZmY1MDRlM2MsCi0JMHhlYzBmYTUyZSwgMHg5NTg0ZjlmMCwgMHg3ZWQ3YmZjZiwgMHhmOWE5ZWMwYywgMHg2Mjc3YjJmNywgMHgzZTY5OWFjOSwKLQkweDlkMDVmOWZkLCAweGI5ZjgxMjZiLCAweGM0N2Q0ZmY5LCAweDg3ZTM3NDA5LCAweGZmZTgyZTc2LCAweGZmNzA5Y2JmLAotCTB4YmIyZjdmYzYsIDB4YjQ4MjRhY2YsIDB4ZmI2OGE4ZmQsIDB4YzFkZjgxZmIsIDB4ZjliMjJlNWYsIDB4MjdiYjZhOTMsCi0JMHhmN2EwZmJkNiwgMHg0NGJmNzFjNywgMHhlZDNlMjNlZCwgMHhjNjM4ZWE3OCwgMHhmOGJkYTk3ZSwgMHhjMjhiYzAwMCwKLQkweDhjZjcwYzNkLCAweDdmNjRiZjIyLCAweGRmMzhjMDk3LCAweGEwZjIyNTQ0LCAweGE5Y2Y5Njk1LCAweGVmZTFlMzE2LAotCTB4M2E5N2ZiODgsIDB4N2NlYWJkNzEsIDB4YWU0NzI2ZTcsIDB4YTE4NDdmNDQsIDB4Y2FmNmUzZmYsIDB4YWI2N2YwMWMsCi0JMHg1N2I5MGZmNiwgMHg1YzIxZWY2MywgMHg4NDVlNjg5NCwgMHhiNDExZjg3YiwgMHhlNzdjZmFhMywgMHhlZWQxYjFmNiwKLQkweGIzNWJlNDI0LCAweGRjNmY1ZWI2LCAweGNjMzA0N2JlLCAweDQ3OTVkMzlmLCAweDdlNmYwMDkwLCAweDI4YWYxZTdlLAotCTB4NWVmODM5OTEsIDB4MmFkZTYxOTQsIDB4YmE3Mzc3M2MsIDB4MDhjMmU5NTMsIDB4YzBmZGRkZWYsIDB4MWNlOTUxM2IsCi0JMHg5N2ZhZmQwYSwgMHhjNjRlMTE5YSwgMHhmNGZkZDVmZSwgMHgxZmU1MmIxMSwgMHg4MmY1Nzc0YSwgMHg3ZjVhZjQ4MCwKLQkweGM3ZjcxZGI3LCAweDQ5ZTQ2YjFlLCAweGVmYjhkN2JjLCAweDc3NzdjNDZhLCAweDQxMDNjZDg5LCAweGI1NTI4ZjVhLAotCTB4ZjYzM2NmMWQsIDB4OWU4Y2YzYjEsIDB4ODEyMzlkOTEsIDB4OWFlOWJhOWYsIDB4ZGQzZjE0N2QsIDB4NDE4ZDhhYWYsCi0JMHhkNTA0OWQ0MSwgMHgzNzE1NWU4ZiwgMHhlZjc3ZmQwMiwgMHhiM2Y1ODZiZSwgMHg4OWRlY2VjYywgMHhiZGMzMDgwNiwKLQkweGFhZGZlMGM0LCAweDgxZjM5ZmMxLCAweDAwMmZiZDg5LCAweDZiNDU4ZjdmLCAweGQxYmRjMzc3LCAweGJjYThjY2UyLAotCTB4MTgwMjgxZTgsIDB4NTczZDRkYmYsIDB4MzhlMDk3ZjIsIDB4M2RmMGRhYjcsIDB4ZTA5MzRhODEsIDB4YjJhYmJkMDMsCi0JMHg2N2JjMzJmNCwgMHhkMWRmZjg0MCwgMHhhNTY4ZTU1MSwgMHg5OWEzZGE4OSwgMHgzNGFmYmU1MSwgMHgzMTcyM2ZiZCwKLQkweDQ5MTI5M2YzLCAweGY1YTM0N2UzLCAweGIwM2IwNDVlLCAweDAzYjZiMmRjLCAweDQ5YmI1MWVmLCAweDY4NDNlZmY0LAotCTB4NmI5NWE1ZmMsIDB4ZjMwMzdjY2YsIDB4ZjgzNTZjYWYsIDB4ODNmZTBjMTEsIDB4YTUzZDJkNTIsIDB4ZjUwNGU5NDcsCi0JMHg1MzFmOTA3ZSwgMHg3NzViZGUwOSwgMHhiZjNkYmNmMiwgMHgwMThlZmQwMywgMHhmMDMwY2U3ZSwgMHhkNmQ3N2IwMCwKLQkweGMwNDJkZDk5LCAweGM5MzgxYWFmLCAweGVkMDk5NmY0LCAweDBlYzEwNzhkLCAweDE4ZWZjZjhmLCAweDcwMGRjYjBhLAotCTB4OWVmMTlmM2YsIDB4NzVmNmY4YzksIDB4YWE5NWQ4MjIsIDB4NmJiMWEzYmUsIDB4OGM2MWJkMmYsIDB4NGRmNzY1MzYsCi0JMHhmMTg2NGVjMSwgMHhmMDEzZTEzYSwgMHhjOWY2YzQ4ZCwgMHhmNzQ4MDNmZiwgMHg4MDAwMjNhZCwgMHgwMDAwODAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDk5OTJiY2NlLAotCTB4OTI2NGNjZTQsIDB4MDkyN2RlNGMsIDB4MjcwMTAwODQsIDB4ZDQ1MDA0MjEsIDB4ZTZhMmJjMjEsIDB4YTJkMTAxZGEsCi0JMHgzYzI0MzhiNSwgMHhhMDk5MjExMiwgMHhmN2FkOGI5NSwgMHgyNDg0NDAzMiwgMHgxMTFhMDgwNCwgMHhhMjg0ZTAyOCwKLQkweDE3ZWRhZjYyLCAweDA0YzA2MjJjLCAweDE2YzQ1NDA3LCAweDZiNWVjNWZiLCAweDQ2ZjdmNmQ1LCAweDQ4NWNhMDA4LAotCTB4NmM1Y2IwNDYsIDB4YWQ3YmZjYjUsIDB4NjczMjRmYmQsIDB4ZGU5NTI4OTIsIDB4MWU5ZjdjZGUsIDB4ZWNmYmQ5ZjYsCi0JMHhhZjZiNWFjNywgMHhhNWIzZGVmNywgMHg5MGQ3NGIzMiwgMHg0NGI0NDg0OSwgMHhjODQ4NTQ4OCwgMHhiYjExYTZjMiwKLQkweGZlODQwOTU3LCAweDViNjY3M2I5LCAweDg2MmE3OTA5LCAweDgzYzllMDNjLCAweDMzYzhhYmIyLCAweDcyNTk5MDg2LAotCTB4OWUzYzhjNzEsIDB4YjE3MjIzOTAsIDB4Zjc4NzhlNTksIDB4ZGExZTkxODEsIDB4MDhlM2Y4OGUsIDB4NTVjODQ0OTksCi0JMHhlMDc1YmJmOCwgMHgyNDIwMzY5MywgMHg2MjVkYmZiZSwgMHg4ZDdlNGQ3NiwgMHgwZTc2ZTg2NSwgMHg4M2E3ZmQwMywKLQkweGQ4YjZkMDkwLCAweDhmOTg2ZWMwLCAweGQxNzk2MDI0LCAweDBkMmRmNDZmLCAweDYxM2EzZjM4LCAweDc2ODdkZjNhLAotCTB4ZmU2MDA2NjYsIDB4NDBjOWE0MTUsIDB4NGE1OTA5YjIsIDB4ZDIyMjA2MDIsIDB4OGZlMjI2NzYsIDB4ZGE0ZmEwMjksCi0JMHgxNzNlOTYyYywgMHgyNTEyMzU2ZiwgMHg1NWRmZTA5NywgMHg0MDY1NWZmYSwgMHg2Y2NkMjY1YiwgMHhlMGE1NGI1ZSwKLQkweDkwODYyMTExLCAweGZiMTNhNDI1LCAweGRiNTdiMjU5LCAweDEyMzRlOTZlLCAweDJhZmFkMmI0LCAweGMzNDYwOTEzLAotCTB4NWY1YjU1YjMsIDB4MGYzODQyNGQsIDB4YTM1NWRiNWYsIDB4NDRkMjdmYTYsIDB4MzZkYjg1MDgsIDB4M2I2NjIxMzMsCi0JMHhmOTlkYzljYywgMHhlODdmOWQzOCwgMHhiNzZiYmQ2ZCwgMHg2ODY5Yzg0MiwgMHg4NzBmZDQ5MiwgMHgzOGUyZDg4ZSwKLQkweGE4OTQ3MzgwLCAweDU2ODY3NWMzLCAweGQzNzYwNzQ1LCAweDQ4ZWI3Njc1LCAweGI3MGEzZWM1LCAweGMwZjIzNjRkLAotCTB4NTllY2ZhNmMsIDB4MGQ4NzM4YTksIDB4OWQ4YzcwNDMsIDB4M2MyMDY2M2QsIDB4MmI5OTBlMWIsIDB4NmU3ZjE0MDIsCi0JMHg1NTcwODc1OSwgMHhkNTg5NWZkZiwgMHg0MGNiYjk2MywgMHg3ZDY5NWEyYSwgMHg1ZmRhNmFkMSwgMHhmNTdkN2Y1ZSwKLQkweDdjMmYxNjNkLCAweDcwMTY1MzM3LCAweGJiZTc4MGRlLCAweDBkNjRjZjAwLCAweDNkZWQwNzdlLCAweDcxYThmYzc0LAotCTB4Nzc3ZWE5ZWMsIDB4Y2RmYjVmNjcsIDB4ZmUxNGRmMGMsIDB4OTUyZGZmMzAsIDB4Mjc4MDJkNTEsIDB4MDQ5M2I5MjIsCi0JMHgwNDc1OTQwNywgMHg2M2NmMmVlOSwgMHgwZmVmZDJmMCwgMHhmZDdlNzQwNSwgMHg1ODQ5ZjQwZCwgMHgzMWFkN2Y3YiwKLQkweDk3YjYyY2YwLCAweGU1YTBhZGU3LCAweGI5ZTY5ZjQzLCAweDQ4OWMyODFhLCAweGQwM2U3YmFlLCAweDUxNzNkMmMxLAotCTB4ZjFjMWQwMGEsIDB4ZmY1ZjNmNzMsIDB4ZjE3ZjVhNWIsIDB4YTQ2MjgzNTMsIDB4MzY4MDBiZjUsIDB4MDkwZjFlMjgsCi0JMHhlNzY4NGFkZSwgMHgzYzhhMzdiZiwgMHgzNTJkZGY0YiwgMHhiYjhjMzcxMCwgMHg4MDg4YzBmNCwgMHg4MDdiZjY5ZiwKLQkweGIwZmViMTk2LCAweDFhNTljNzE1LCAweDkwYjZkZGUzLCAweGE1ZjRiM2Y2LCAweDQwYTUxNzc4LCAweGYwM2VhYWYyLAotCTB4ZGY1MDczYzIsIDB4NGIzZDc2NjEsIDB4YzUxYTVkZmIsIDB4YTFlOTcxZTgsIDB4YmU3ZWZjMTQsIDB4ZjAxNGJiZDksCi0JMHhmYzBjNmM5MywgMHg3YmU5MmZjNywgMHhmNWQxOWFmMiwgMHgyNDVjN2QyYywgMHhmZjMwNDVjMSwgMHgwMTY2YWQ4YiwKLQkweDc1ODQ5ZGRhLCAweGFkMjdkMmM1LCAweGVkNWQ2MDEzLCAweGJmYjYzYzc0LCAweGVmZDIxNjkyLCAweGIyMjdkNTRlLAotCTB4OWQzODcxNzUsIDB4ZTkxYTMwZGEsIDB4OGQ5ZThiNzksIDB4NjAyODNmZTcsIDB4Y2Y3YTkzZmIsIDB4M2U1YTI0OGMsCi0JMHg2YmJlNzJmOSwgMHhmNWVhYWQxNSwgMHg0YTA2ODIxOCwgMHg0YjRkYmU3ZiwgMHg4NGIxOTA0ZSwgMHg1ZDk0ZWI5NCwKLQkweDM4NzIyNzAwLCAweGUyYWJlNzFhLCAweDcxNzFiN2MzLCAweDFlZmJkNDI5LCAweDEyNGVlYzdjLCAweGY0ZmVmNDMzLAotCTB4MzEwOTE5YjUsIDB4MGY2YmQzZjUsIDB4ZmQwM2E1MDksIDB4NmFjOGFmNmYsIDB4N2I3MWQyMGQsIDB4NDRiYTQ3ZGEsCi0JMHhlNDUyNzVhYywgMHg1OTkwZmE1MywgMHg4MzNkNmVkYiwgMHg4ZjQzYTg2YiwgMHhmYjVhZjRmYiwgMHhiNDRhZjU4NywKLQkweDViZmMxZjFmLCAweGYwZGQyNzg0LCAweGJjMDE3ZWVhLCAweGMxYzU5Nzg3LCAweDc0N2YxNGNhLCAweDg5NDNiZWJkLAotCTB4N2FjOGFmMDgsIDB4MGJiYmQ1YjMsIDB4MTNmNTUzZjgsIDB4MGFmMWYzZmYsIDB4ZjkwODZmODQsIDB4Yzc4YTY5MTksCi0JMHgxZGU3NDY3ZCwgMHhiYmVmZDEzNCwgMHg1ZjcxNTliNywgMHhiNGE2M2M2NSwgMHhmNzdlMDE3NSwgMHhiNjlkNzBkYiwKLQkweDBhZDE2ZTY5LCAweDU4OTkxZGU1LCAweDMxNDU3MWJlLCAweDg2YzcxNTM5LCAweGFmOTQwOTI1LCAweGE0ZmZhNDRjLAotCTB4NDkxMjJlZmQsIDB4ZGYwMGE5YWQsIDB4ZWRhMzZjZTcsIDB4ODY5Y2JjY2YsIDB4MjQ2NDVjZjgsIDB4Y2ZiYTI2NzUsCi0JMHhlYmMzMjM0OSwgMHhhN2NhMTY5OSwgMHg4ZGNhN2MyOCwgMHhjOTY3Yzg1ZCwgMHhlODA0MDg3ZiwgMHg4NWFiYjY4NSwKLQkweDIwZTk0Yjc2LCAweGUxMDMwNTQ5LCAweDAzNGI3YzA2LCAweDM5NTg0MGI3LCAweGI1YWJjZThiLCAweGZmNzQyNDQ1LAotCTB4ZmFhN2NhMTAsIDB4Y2ZkNTlmZDYsIDB4NjkzZjgwYzcsIDB4MzM3ZjI3YmUsIDB4NTdlOGUxNmEsIDB4NjNlZTJkZjksCi0JMHg1OWM0YThiYSwgMHg1MWY5ZmE2MywgMHgxOGU3YWM0NywgMHgxMmMzZjNlMywgMHg0NDY3N2UwMSwgMHhmMjk5NzJlZiwKLQkweDhmYzRjNWI3LCAweDA0OTJiMWZjLCAweDQ3OGVhOWYxLCAweGJiZTMyZGY5LCAweGUxNzdjNjI2LCAweGZjMGQ3NTE5LAotCTB4OGFkMjQxZjcsIDB4MzgwYWIzN2MsIDB4Zjc3YzYwZDIsIDB4Yzc3N2NhMzEsIDB4MDk3N2NkMGUsIDB4YjgwN2M5YTksCi0JMHhiOGI3ZWVmYSwgMHhmODAzY2UwMCwgMHgyYWVmZTcyZiwgMHg4YzBkMTMxZSwgMHg1OGY4ZGYwZiwgMHhmZDc5MjQ0MCwKLQkweGVhZGQ3ODcwLCAweGNmYTBlNzNlLCAweDA2ZTI0MmU4LCAweGMwZmJlN2ZlLCAweDgwNmU1MjY0LCAweDUxNjQ4N2IyLAotCTB4NGViMGVjZjgsIDB4YWQwMjdlZjksIDB4MGRjNDQ5ZjcsIDB4OTNiYTMzN2MsIDB4ZmJlODViYjgsIDB4ODdlMjY2OWQsCi0JMHgyODI2YTZmZSwgMHhjMGQzOGZkOCwgMHg3OTJmNDJlOCwgMHgyZmFkM2U0OCwgMHhlYTBjZWUyYSwgMHgxM2M0OWY2MCwKLQkweGI1YmRmODE5LCAweGQzYmZmNTkzLCAweDgwMmJiZjRhLCAweGFlZmMwNGVmLCAweGE5MTM3YmVmLCAweGJlZmIwYThkLAotCTB4ZTkxOTkwZjgsIDB4NmI0MWYyZTgsIDB4ZDBmMjg4YzAsIDB4ZmRhMzYxOWIsIDB4NDhkMWZjMjUsIDB4ODczZGJkNjAsCi0JMHg3YmU3YzhhYywgMHgyYjZlNjRmNCwgMHg0OTEwZWY2ZCwgMHg3M2UyMmI0ZCwgMHhkODI3ZjYyZCwgMHgyN2U5ZjEzMiwKLQkweDY4MDQyOWM1LCAweDA1M2RiODU3LCAweGFiMjEzMmI2LCAweDY1NTc1ZjkxLCAweGYyODNkZTc2LCAweDgxNTE5Zjc2LAotCTB4ZDZkOTdjN2QsIDB4NzRjYTFjYjUsIDB4ZTVhN2UyM2MsIDB4ZGIwNTY1MmYsIDB4Y2Q0ZmY2ZjksIDB4ZWY3ZDA5ZmYsCi0JMHgwYzVjNThmMywgMHhhMDdjZGViYSwgMHhhM2Y4YTMxNywgMHg2ZjE0NGM3YiwgMHg0MmM3YzQzMywgMHg1Njc5ZDI4ZiwKLQkweGUwNjQ1OWE1LCAweGZlMzJkM2M3LCAweGI0YmRmZWY0LCAweDNkN2VkOWZjLCAweDlmZGUwMjMxLCAweDY0OTczYTlkLAotCTB4MmEyN2NkMGQsIDB4NWQ5M2ZhMDMsIDB4NjRiYWY0NjEsIDB4ZDU1Y2I2YWYsIDB4ZGFmYjJkYWEsIDB4OWI1NGU1YjQsCi0JMHgxYTI2NzFkNSwgMHgyYWViYTZmNywgMHhiMWEzMjdhNSwgMHgzYTE2ZDNlNiwgMHg0NmFiZTM1ZiwgMHg5NjdmOWJlNCwKLQkweGUwMzY5OWJkLCAweDMxZDBiYTBiLCAweGUzMzFhMzgwLCAweGUwMmY1OGZjLCAweDAxNzNmZGI5LCAweDFiNGE0NjllLAotCTB4YmUwYzc5OWQsIDB4OWIyZWFmYjAsIDB4NzljODY3ZTcsIDB4ZmU5N2NmNDMsIDB4NDcwODc0OTksIDB4OTNjMTg5YjcsCi0JMHg5YjFmMDdmMSwgMHhlZTU3ZGQxMiwgMHhmNWQwOGVjZiwgMHgyNTFkOWEyZiwgMHhlZTM3YzZhZiwgMHhhMDQ1ZjFkMiwKLQkweDg5MWNlMGFmLCAweDlmNmRlYjZmLCAweDVkYjE2MzA5LCAweDU5ODlmMjI1LCAweDU3OWQxZGI0LCAweGI3YzY1NmM1LAotCTB4MThjZTkyOTcsIDB4NTRkNTBmZDgsIDB4MTQ1MTMxYWYsIDB4Nzg2MzZjM2UsIDB4MmExYjUyNTgsIDB4MzY3ZmQyMGEsCi0JMHhjMjQ2NGJkYiwgMHgyNWFmYTUzYywgMHgxZDdmZTAwZiwgMHg4N2E2MWJmNCwgMHhiMWQzNjZkZCwgMHg3MmNkN2JmNiwKLQkweDM2OGUwNmI3LCAweDk2ZDdkOTRkLCAweGVkODc3NzI0LCAweGZmN2MyNTk3LCAweDYwOTA0NTEzLCAweDdhZjk0YjNkLAotCTB4NmY3ODJmN2UsIDB4OTk1NWY4MDMsIDB4ZTg1MzBjYmEsIDB4ZmQ3ZWI3ZjgsIDB4YzVlZmNhMDUsIDB4NzVjNmNhMmIsCi0JMHhkYmQ3MGI4ZiwgMHgxNzU3Yzg4YywgMHhmN2M1ZWEzZiwgMHgzOTliNmZhZiwgMHhjZGI3ZDcxZiwgMHhjZmRjMDBhYywKLQkweDllOTAxNGVjLCAweDAyNWFhNzE3LCAweDViY2ZmYTI2LCAweDViOWY0YzZkLCAweDg0MTNiZjRjLCAweDg0OGM3MDgxLAotCTB4MzMxZGQ5ZGIsIDB4Njc0NzQwOWQsIDB4ZGZjZjFiMDksIDB4NTllNGU0Y2EsIDB4OWIyYmMyOTksIDB4Y2VmZTgxYjUsCi0JMHhlYmJlMzFiNiwgMHgzM2YzM2FkYiwgMHg3NzhiNGZlMCwgMHg2NzkwMmU4YSwgMHgxYWVhYzNhNCwgMHg3ZDNjYTA0ZSwKLQkweGY0MGI0MmU0LCAweDBhNmUyOTc3LCAweDZiYmNkZjZkLCAweDdiZTIyY2JhLCAweGZkODAxM2QxLCAweDZmM2JiOTIzLAotCTB4NWRhNWVmYTUsIDB4NzhkZjUwMTMsIDB4Y2Q5MWE3NjMsIDB4MGU3YTY2ZDMsIDB4ZDdlYjcxZDYsIDB4OTJjN2VhMjIsCi0JMHgyZjQxNzg4ZSwgMHg0N2I4MzY2YiwgMHg3NjU1N2VjMiwgMHhmMDAzM2IzYywgMHhiMjU2NzY3MiwgMHg0MmZmZGIwZSwKLQkweGMzYzAzMjIwLCAweGRlMDEyMmI2LCAweDBmMjQxNjJmLCAweGFkOGFjZmVjLCAweDcyZTFhNTk1LCAweDExMTM2Y2Q5LAotCTB4MWUzMjUzNWYsIDB4ZTBiMmU4NGIsIDB4ZTQwN2JhN2UsIDB4YmE0ZWQ1NTQsIDB4ZDlmYzYwN2YsIDB4YWY3ZmJkMWYsCi0JMHgzZDNmN2MyMywgMHg2MTc0NDQ1YywgMHhiZmM3NzY3MiwgMHg1ZmMxM2QyMCwgMHgzNGY4MDhiMCwgMHhlZWY1YzU4MywKLQkweGJhYjQ2MzJiLCAweDgwNzI2YTJmLCAweDVkNWUyZTVmLCAweGEyMGYyMzkzLCAweDhiZWRmN2JmLCAweDhlMWY3NDFkLAotCTB4NGQ4MzY0MjYsIDB4YjA3NTU3MjAsIDB4ZmQxYWVkMzEsIDB4ZGZiZDI4NzYsIDB4MDM3M2FiOTIsIDB4ZTIyZTRkZGMsCi0JMHgxMzNlOTY3ZSwgMHhhMGJmNTQ4ZCwgMHhhMDI1ZjA3YywgMHgxYTc4Nzg4ZiwgMHg5N2QyM2UxMCwgMHg4NzdkZWQwZiwKLQkweGNkOTI2YmFlLCAweGM3YTA1M2ZiLCAweDA3Y2VlMjBjLCAweGI5MjEyYmJjLCAweDAwNWJhYTk4LCAweGM4MGZkNDYyLAotCTB4YjdkMzIzMGUsIDB4NmRlZmE2MjQsIDB4ODFjZjI3ODksIDB4ZmI4ZWEwYmUsIDB4MWUyZmU4NGIsIDB4MWIxZWMyZjksCi0JMHhjM2U3YjdlZCwgMHg1YzAxOGVhZiwgMHg4ZmNmZDNhYiwgMHhiYmVjZjkwNSwgMHhhMTQxODVmMiwgMHgwYmI0YjVlYiwKLQkweDJlMmRhZmM4LCAweGYxN2EwMTBmLCAweDBiMjJjZmI1LCAweGFjZjlmYWYyLCAweDQwZTRjNWNmLCAweDZhZmViYWU0LAotCTB4Y2ZiNjdhNjMsIDB4NGU3ZWMyMTEsIDB4NmRmZWQ5ZGIsIDB4ZGNmYTMxYjYsIDB4MDAyYTIyYmUsIDB4MjNiYjc1ZmMsCi0JMHhmZjQ5ODY2MCwgMHg3Yzk0ZmJiZCwgMHhjNTM4YTU0NSwgMHhlMTg5YTU3MywgMHg1N2U3YjRkOSwgMHgzYmU4MTE2ZSwKLQkweGExYzNjODIwLCAweGQxZmRiMGFjLCAweDIwMmYzMTViLCAweGRiM2U3MWQyLCAweGYyYzdlZDkzLCAweDkxMmUyOWZlLAotCTB4ZmNmNjU5ZDYsIDB4ZTAwYjJlYWMsIDB4NDE3N2E2ZDQsIDB4MmJhYjhiN2IsIDB4ZDlmN2Q2MDYsIDB4YjAzMTUzOWUsCi0JMHgyMjNkOGFiZSwgMHhmMDIyYmJhZSwgMHhiY2MyYzI3OSwgMHhiYWYwYmU3ZSwgMHhjMDBkZmRlMCwgMHg0YjA0Mzg4YiwKLQkweDZjZjg3ZjM4LCAweDA1ODRhNWNmLCAweDk4Mzk1NDE2LCAweDFjMWMyYzdjLCAweDI5ZTQ0NzJlLCAweDViYjc4MDlkLAotCTB4Mzk3ODYxNmYsIDB4MDA2MzBiZjcsIDB4MzMzOWRlZjgsIDB4ZmM2MTVmOTUsIDB4Yzk5NTljZjYsIDB4MjYzNjkzYjMsCi0JMHg0ZDY5MDkxZiwgMHg1N2QzNzkwNywgMHgwNzU3M2ZiZSwgMHg2NjQ4ZmZlMywgMHg1YTE4NzdlYiwgMHhmZTNmNjFkMywKLQkweGU3ZWRhMGI3LCAweDA5MWQzYWMxLCAweDU5NWVkZTUwLCAweGY5NDM0MTQ3LCAweDVlMTdiOWQxLCAweGZmN2UwNzQ5LAotCTB4YTRhZmIzZDksIDB4MmZjZDg1OTcsIDB4NzlmNTNiZjIsIDB4OWFlZGM2ZGUsIDB4MjZkZGE3YTYsIDB4NTExOTVlM2EsCi0JMHhjMmE2MGJjNywgMHhlMzJlNjU3OCwgMHg0ODVmYzAyNywgMHhkZjc3NzRkZCwgMHhjZjYyYzliZSwgMHhhYjY0ZjZmMCwKLQkweGFmNjBmOTFiLCAweDFkMDBhOGNiLCAweDU2ZjVkZmFhLCAweDgwNGRiOTQ0LCAweGZlNDI2MjE3LCAweDA2MmVkNjU3LAotCTB4ZGI5ZmQwOGQsIDB4ZmEwMWNjM2QsIDB4NDQ3ZGZhYjYsIDB4NDYzOGFlZmYsIDB4ODA5YjQyNGYsIDB4NWU3NDY5NzYsCi0JMHg3N2YxZjkwOCwgMHgyZDRlZjdlNiwgMHg3ZjllMjkzZSwgMHgzMmFlNzgwMSwgMHgxMGE1OGU4NSwgMHhjMDAzMGZhNCwKLQkweDkxNmQ1MGNkLCAweGFjMjUzZTQwLCAweDdhMTVmNDYxLCAweGJmZmE4NzQ0LCAweDAxNjlkOTIxLCAweDRlNmI3NjdlLAotCTB4NmU4ZWFkNTQsIDB4Y2M1NDQ3NDQsIDB4YTdmNTQyNTgsIDB4NmM1Y2U0YjQsIDB4NzQ2NjJmZWYsIDB4ODEyMDRmZWYsCi0JMHg1OTBjMDIzNSwgMHg5NmJmMjAyMywgMHgzYTljNWU5OSwgMHhiNDBkYzg5MSwgMHhkMzNiM2RmOCwgMHhiNWM0OWM1NywKLQkweGJjNDZjYzU1LCAweDUwN2ZlMDBiLCAweDA1Y2FhMWUxLCAweDhmZTAxZmEwLCAweGQyMTMwNGU3LCAweGEwMmVkMDhmLAotCTB4NWFlYTI4OWUsIDB4NDNiZjQxZTcsIDB4NWQ5ZTUzZDEsIDB4M2QxOTUzYjUsIDB4NDlmZjk1ZjUsIDB4ZTc2NDU0ZjQsCi0JMHg5ZTgwM2JmNCwgMHg5M2QyMGFiYywgMHgzZDM4MzRkMywgMHhiYmY5MDIyOSwgMHgwN2JmMTNkYSwgMHgwZTQ0YWNlYywKLQkweGVmOWM0ZGFmLCAweDMxMzExZTg0LCAweDE5MDUwYWJmLCAweGY3OTRiN2FjLCAweDA0YjI2YTU3LCAweDJlMWY5MDQ1LAotCTB4MzBhZWY5ZmQsIDB4ZDUwNzYyN2IsIDB4NDk0ZWMxNmYsIDB4M2U5ZTdkMDIsIDB4NTdjY2Q2NTMsIDB4YjNhNDZmMTAsCi0JMHhlOGRhZWMwYiwgMHg4Zjk0MjYwOSwgMHg5OTlkNzVlYiwgMHg4ZTI0YWZhMCwgMHg3NDA3ZDlhYSwgMHhhZjJmMzg5MSwKLQkweDY3ZGEwZDYwLCAweDA3OTAzNmE5LCAweGJmZDE1YjIwLCAweGQzZDhhMmIwLCAweDJmYTYxNzFkLCAweDJmYTgwODc0LAotCTB4YzZlYTNmNTQsIDB4OTlkYjUzZjcsIDB4NjYxYmUwN2UsIDB4ZDdkNzdkNDAsIDB4Y2YwMWY4MjYsIDB4MDA0MzFlZDUsCi0JMHg4MTdhYTBmNCwgMHgxYmZjMDFmOSwgMHhlZmQ4MGFjYywgMHgxNTY1MzZjZCwgMHhiZmYzNGZkMCwgMHg1ZDNmMmUyOSwKLQkweGY5ODA2ZjQ3LCAweGQ3NDk3YTEzLCAweGJkMDA5ZmFlLCAweDNlZDA1ODU1LCAweGI2MDViNjZmLCAweDc3NzY4MjJkLAotCTB4MDNiYjYxZTcsIDB4ZjhkOTEzN2YsIDB4ZGY4ZTA5YzMsIDB4N2E4YWRmOWMsIDB4MGE2ZGYzN2EsIDB4ZmM3MDAzZjMsCi0JMHgyNzcyY2YzNSwgMHhhODFmNDBkOSwgMHhlNmU3ZWVkMywgMHg5ZDkyNzcxNiwgMHg1MmI1ZWZiZSwgMHhjYWYxZDBjMCwKLQkweDg3ODhjZDFhLCAweDk5YzE5MTY0LCAweGZjOTg5YWM0LCAweDRjMTdjODE5LCAweDg5ODRmNzAwLCAweDRmNGQzMTFjLAotCTB4YjdkM2JlYTMsIDB4ODBhNzI5Y2YsIDB4NmZhZjMyNzIsIDB4ZDBlM2E0Y2UsIDB4M2NmMzU4NzksIDB4OWY3OWEwOTksCi0JMHgzYzdlNWE2YSwgMHgwMjRmZDI4YSwgMHhjNDZlODdmOCwgMHhlYmQwN2UyNiwgMHg1NjRjNjFhMywgMHg0ZjcwYzM3NiwKLQkweDkyNDRlOGU5LCAweDg2Y2VmNmExLCAweGNhYzM5MzY5LCAweGY3ZmY3ZGJjLCAweDY5ZjZlZmZmLCAweGZiNzcyOGE5LAotCTB4NTRkYTYxZWEsIDB4Yjc2NWFiMWUsIDB4OWQ2YmNlOTksIDB4YTI1ZWJmYjUsIDB4NGRhOWFlZmEsIDB4ZDdmYmRmNjAsCi0JMHg4YTlkM2VkZiwgMHgxZDQxNWVlOCwgMHgzNzdhY2VmZiwgMHg0NGNjYTlmOCwgMHhmY2Y4NWUzMywgMHhmNWZlODhhNCwKLQkweGEyOGI3ZmI0LCAweDAyNTY1ZmI2LCAweGEwNTUzZGZkLCAweDczYWVkZjk2LCAweGQyNmRmOWQzLCAweDkwNDNmYjZiLAotCTB4YTBhMWVmZjIsIDB4NGY4YmU3OGUsIDB4ZGM5YzY4NmEsIDB4M2Q1MDE3YWYsIDB4ZGYxZjYwMjEsIDB4ZmJhYzFmYWYsCi0JMHgwNmU5YjRhOCwgMHg3Y2I0NTYzYSwgMHg1NzcyMDBjOSwgMHg4NzNlZjM5NSwgMHhlNDQ3ZmE4MCwgMHhlZjg5N2Q3ZSwKLQkweDU3Y2NlZmQ3LCAweGJhM2Q1MTg3LCAweGJmNDdhMzQ4LCAweGRhYmU0NzY0LCAweDI0YjYwMzM1LCAweDZmOTAzZmI1LAotCTB4MTBmMzFlZmIsIDB4M2VhOGU3ZDAsIDB4ZmE4ZWMwNzIsIDB4NDczM2Y5YzgsIDB4ZWNjZjdkNjgsIDB4NTE0YjFjYmYsCi0JMHg3OWIyZGRhMCwgMHhhZWZhZjdhMCwgMHhiZWI3NDg0OCwgMHhhMDQwNjJiZCwgMHhmYmUyNmI3NCwgMHhjMGYxY2E4NSwKLQkweDllOWZhMTcwLCAweDlkMzk5NDFlLCAweDA3NDRmY2RhLCAweDhjMjFkZjc0LCAweGQ1N2QyM2Y3LCAweDcxNGRkZmE0LAotCTB4M2VlNzEyOTksIDB4YjdlZjhmNjIsIDB4ZmRkNzIzMWIsIDB4MGZkOTlkOTEsIDB4NmRlMmRjYmUsIDB4MWVmZmQwMzksCi0JMHhkMDllODA4MSwgMHg2MTMyN2I5MCwgMHg5ZjRkZGEwMSwgMHhmYjBjMmMyNCwgMHgyOWVkYjJhZSwgMHg1ZWU1Njc4NCwKLQkweGZjNzBhMGZkLCAweDFjMjIyZWM4LCAweGVjYmUwZmFiLCAweDJlNzFiZTA2LCAweGE4NGYyMDIwLCAweDM3ZjUwMjkwLAotCTB4ODU0NTcyZDIsIDB4NTI0MTM0MGUsIDB4MmY3Zjk4MTgsIDB4MzVjYzhmYWMsIDB4N2Q3NGUxOTAsIDB4NDA5YmQwNDEsCi0JMHg5NzdiZGE4ZiwgMHgzNzU4NDZmZiwgMHhhZmEwNGZmZCwgMHhhMTE2N2JiNiwgMHhkNzNlZGQzYywgMHgzMDk5MjE2NCwKLQkweDA4NjViMmNmLCAweDBkY2EzOTA3LCAweDJkYzg2ODcwLCAweGFhNzE4MjRlLCAweDQ1OTBjZDY3LCAweDFjN2FhN2E4LAotCTB4N2EzZjU3ZDQsIDB4ZDMwYzQwNWYsIDB4ZjRkYTFiMDMsIDB4MTRlN2EwMjUsIDB4NTdlZTdkNTEsIDB4ZjY2OWRlNzQsCi0JMHg3NDVjNGJkYiwgMHhmYjg4YTcxZiwgMHhlNWE2MWZmMiwgMHhmMWYwNDMyZCwgMHg2ZTRjMWM0NywgMHhmZjFlMGFkNCwKLQkweDVmZDEwYWY3LCAweDZmZmRjMjQ3LCAweDZmNGM2ZDE5LCAweDY4Mzc2OGJjLCAweGVkMTdhZmZjLCAweGQ5Mzc3ZTEyLAotCTB4YzgxNTM5ZGYsIDB4MTVkNGIwZTcsIDB4OGZiNGZhMGQsIDB4ZmIwNzNmYjgsIDB4Y2EyYzc4OTksIDB4YzYyNzg4YjMsCi0JMHgxNTJiMWM4ZiwgMHgxYzk5MmJmNCwgMHg4MDZmZWI1ZCwgMHhkYTEyYzlmYSwgMHg3YWVhNDQyZiwgMHhhOWVkYzYxMiwKLQkweDA4MWFiODc3LCAweDdlNTAwN2RmLCAweDllZWQwZjM0LCAweGFiZGU3MWY5LCAweDVjNDU0NzQwLCAweDM4MzllZDRmLAotCTB4YWYyY2JmMzMsIDB4N2ZhYWVmNWYsIDB4MGQ1ODFhZDYsIDB4M2NhYWQ0ZmMsIDB4ZjRmYzAyNTEsIDB4MjRmOTA5NGIsCi0JMHhhNzNhODUzMSwgMHhmZjJhN2VkMiwgMHgxYjdlYzc2YSwgMHg3MTUxYmRhMiwgMHhlNmY1ZmU3NCwgMHg4MWQwM2Q0MCwKLQkweDc2YzQ0NWJmLCAweDIwYTZkOThlLCAweDczZDlmM2Y0LCAweDJmZDAxNmQ2LCAweDAyMjY4ZWY1LCAweDE1Y2Q0Yzc0LAotCTB4MWM5ODg3ZjQsIDB4ZjJkMGEyMWUsIDB4NDk3Y2ZmNTQsIDB4YTExMTc5MDAsIDB4YmYwNTRjY2YsIDB4MGUyYmRhMTEsCi0JMHhmMzE2MmJmNCwgMHg1MjljMzFmZCwgMHg2ZTEzMTljMSwgMHg3MWFiZGE4NSwgMHhmMWNkZmFmZCwgMHhmMDQ4ZTZhZiwKLQkweDc0N2JkNTUyLCAweDlkZTdlNjI2LCAweGMwOGEzNzM2LCAweGU4NmQ2NGY4LCAweGNhZmMwZTk4LCAweDdhMDI0ZThlLAotCTB4ODBhYjU1NzAsIDB4YmVlNTU0ZTMsIDB4NjViYjAwNjQsIDB4ZGZkYjJiNDksIDB4NTA2NzZlM2UsIDB4NWU4M2E1ZjgsCi0JMHhjZDE3MWQ5MSwgMHg0NjVhY2JmNSwgMHg1OGYzYTRlZiwgMHg0NWY5YzAwYSwgMHg2ODQyNGY4NiwgMHhiZGI4NmIzYiwKLQkweGQ1ZDk4YWIyLCAweGY3MDMzZmJjLCAweGJmNzE1Nzg3LCAweDU4ODQ5NTExLCAweGQ1NGUzNjNmLCAweDY3ZjM1NjMzLAotCTB4NzFmMjdiMTMsIDB4NmU5ZDA4YjcsIDB4MmY5OWUwMTEsIDB4ZWFiNmZjNjgsIDB4ZTMxYzdhNzMsIDB4NDM0N2IxM2IsCi0JMHg4NmZmNjAzMywgMHhmZjgxN2QyOCwgMHg2YjMwOWI2OCwgMHg3ZDc0OWJkOSwgMHg3MjhmYzZkYiwgMHhhNGU2MGE4MSwKLQkweGMwMTYyNGU0LCAweDE0OGE0YTdiLCAweDlmNmQ4NWVlLCAweDIxYmEwMGNmLCAweDZiZjcwNDI1LCAweGIxMTRkYjc1LAotCTB4NDAwZGM3OGEsIDB4YWU4YzQ4NWYsIDB4YzRmYTgxNjksIDB4M2U1MTcyMDcsIDB4ZmMxZjFmODMsIDB4Yjg3MDc3ZmYsCi0JMHhmZjk4NTkyNiwgMHg5ZmRhYjljZSwgMHg4YzFlNTBmOSwgMHgyNmY2NTllZiwgMHgwYTI2M2Y4YywgMHgxNDg5MTVlMywKLQkweDNlM2I1NjM3LCAweGU1N2ZjMGViLCAweDQwNDdmOTI0LCAweDk1NGIzYWZlLCAweDFhOGY5ODAyLCAweDg5ZDc4YTM3LAotCTB4NDNjYWNjMGYsIDB4YmI2NThlM2UsIDB4YTZlZjcwNGIsIDB4NmNlM2JiY2YsIDB4ZGY2YTJlYjgsIDB4ZTE3Y2MwOTUsCi0JMHgwZGRiODA3ZCwgMHg0ZTI3NDc2MCwgMHg3MTg3YzlhZCwgMHhjZjA0NGUyMSwgMHg4NGEwYTQ5ZSwgMHhjZjJhNjhmZSwKLQkweDZkM2EwNTlmLCAweGFmMDBjYTMzLCAweDNlYjdiNmQyLCAweDZhNWI3OTAwLCAweGU4MjJhZDIyLCAweDRiN2ExMTNmLAotCTB4ZjM1ZGNjNTYsIDB4MmY3YjZlODAsIDB4MzhmNWQ5OWMsIDB4MDNlZWViY2MsIDB4NDdlMjJmMmUsIDB4N2FkYzhmYWIsCi0JMHhjZmNiZDMwYiwgMHg4MGFkMWIzZCwgMHhmMzliYjkxZSwgMHhiMjNmYWE2ZCwgMHg5ODJmYzEzOCwgMHg0N2E5MTkxZCwKLQkweGI1YTcxMjNlLCAweGZmY2FmYTRiLCAweGNkOTIzZDcwLCAweGY3ZTc0ZmNmLCAweGY3N2YxODZjLCAweGI3YWZiYjcxLAotCTB4YzgwYzYyZTIsIDB4ZjQ3ZDU1YWYsIDB4NTE3ZmU1NDYsIDB4YjY1MjllYmYsIDB4ZDgxM2ZhMjcsIDB4NDU3NjdkNjcsCi0JMHhiNTIyM2U4NCwgMHg4NDA1MzhiMCwgMHhkYWVmOTBkOSwgMHhlMmZlM2MwYywgMHhmZjA3Y2U3NiwgMHhmOTA3MmQ4NywKLQkweGEyZTdmMWNmLCAweDE3Mzc0MGZkLCAweDk3YThjZDViLCAweDEwNDMzNjQ5LCAweGIyZmI1NWU2LCAweDgwMTNhMDMxLAotCTB4NzU3ODcyMGYsIDB4ODE4YWI4ZjAsIDB4MzllYzZiYzcsIDB4MDcxNDI4MGEsIDB4ZmJlNDFlMGMsIDB4MmNmNDk3ZmUsCi0JMHg3ODEzMTJhZSwgMHg1ZTVhMzllMSwgMHhjNzg5Mzg3YSwgMHhlZmY2MDg1ZCwgMHhmMDhkMTgzZiwgMHhjNGE1MWE1ZSwKLQkweDdmNGJmZjQyLCAweDllMjA0NzFkLCAweDAzYzc0YmQyLCAweDdiMzdjZjNjLCAweDRkNzgwYTdmLCAweGM5ZmViMjM2LAotCTB4YzU4NTQ2NmIsIDB4MzYzOTgyNzksIDB4MDA5Njg3MGEsIDB4ZTU0ZWZmZDMsIDB4YmEwNjgyZWEsIDB4MTdkMDE2ZWUsCi0JMHgzNTQ2ZGZhMCwgMHhkOWQ2YzJmZSwgMHhjNTg1MjFiYiwgMHgwMTE5NDAwZiwgMHhmYjllYWNiYiwgMHhjYWI4ZDVlOSwKLQkweDJiODdlNjYxLCAweDUzOTNmMWU3LCAweDAzM2QxN2IzLCAweGExNWFiNGExLCAweGI0ZWMwNGE2LCAweGQwNTMwZGNiLAotCTB4ODlmY2JkNmYsIDB4YWYyY2Y4NTksIDB4MTdkYmZhZDMsIDB4YWY3YzFhOTEsIDB4M2Y1NTI3YzYsIDB4MTk3MTE5NzcsCi0JMHhlZmRjZmU5OCwgMHg3ZDUxZDQzZiwgMHg4YTkzYTk0NiwgMHgxMjY2N2U0MSwgMHgwM2M4MzU3OSwgMHgzN2IxNGZjNSwKLQkweGU5NmIzZTgxLCAweDgxNzg5NDEzLCAweDkzYjY5OTQyLCAweDgwNTExZGVhLCAweDNhYjU3NWVmLCAweDVhZmU1Yjk0LAotCTB4YTlkYTFiOWQsIDB4MWM1NmYyZjQsIDB4NTdmZDIzZjMsIDB4NTA5N2YzMWMsIDB4MWM2MDA3NTAsIDB4ZTdhYjU5ZjUsCi0JMHhkZmRlN2VmZSwgMHhjMjBiYTIyYSwgMHhlN2IwMjc1MywgMHgxOTJhNTkzYSwgMHhmZGFiN2U0YywgMHg0YzZiZWFkNSwKLQkweDRlNmY0MDUzLCAweGZiM2ZhMWQzLCAweDE3M2RjMWIyLCAweDFjZjZjNWZkLCAweGI1YWQ1M2M0LCAweGQ1ODRhZWE2LAotCTB4NmNiYTVlZTMsIDB4ZmViMDc5MGUsIDB4OTYyOTg5NjYsIDB4M2YwM2IxNDQsIDB4ZmE2Mzg4ZWQsIDB4MTZkYzI0NDUsCi0JMHg5MWNiNjkzNiwgMHg4MGNhOTA3MSwgMHhiYzRlNWNiNiwgMHg1OWIyOTIyMywgMHg3ZGZjMjBkYywgMHg5NzY3ZTcwNywKLQkweGJjMzkzMjFiLCAweGJiZTAwNjVkLCAweGE1NTdmYWVhLCAweGQyZTliODMyLCAweGFkMmIzM2Q4LCAweDQxZDAyZTc4LAotCTB4MzI4NWY4MTYsIDB4YWFmY2M5ZTEsIDB4ZmYzODI1NzQsIDB4MDIxZDliYWMsIDB4N2NjNDQ3ZDIsIDB4OWU4YzZkNmIsCi0JMHgwZmNjZjVmYywgMHgzZmNlZjdmOSwgMHhlMzY3ZGU3MiwgMHg3NjNlZjgxMiwgMHg1NmJlMjEzYiwgMHg1ZTMwMWIyZSwKLQkweDEyZmVhZDdhLCAweGRmNmI0MzkzLCAweGYxZmY5NWY2LCAweGU3YjMyZGY2LCAweDJmYzY0NWViLCAweGE5N2M4Yzg4LAotCTB4Mzk2YjY2NGMsIDB4MGI5ZWI4MjUsIDB4ZDUwYjdiYzIsIDB4ZjUxZDYwMWIsIDB4OTFmMDAxNjIsIDB4NzA1OTc3YTksCi0JMHgyOTg3ZDUxZCwgMHg1NWY1YTExZiwgMHg4M2E1NzU4ZiwgMHhlZTJlYWY1YywgMHg4MGJjODFjYSwgMHg2Y2MyZjg0OCwKLQkweGQxOWY5NTI1LCAweDZhMGU2NTc2LCAweDUwZGU4MDhmLCAweDBkODc4ZGE3LCAweGQzYmEwMzhjLCAweGVlYzFlMzFjLAotCTB4MmRlZmI1MzksIDB4Y2NmYjVmOTAsIDB4YmZlOGJmMjgsIDB4ZmY2MTE4OGUsIDB4YmU0NGNjMWYsIDB4M2JjNTg5ZjYsCi0JMHhiZTNlZTIxYywgMHhlN2FlZTBhOCwgMHg2MThmNDEzMywgMHhiYjU1NTQ3YSwgMHhjNGY0MDViMSwgMHhmOGIwZGFiMiwKLQkweDUxYWZmYzFhLCAweDc1MjM2ZjFiLCAweDkzYmJmNDc2LCAweDhhZmJlZDY2LCAweDBkZGYxMTFkLCAweDIxMzViZjg4LAotCTB4YmMxOGI2NWUsIDB4NTNiZjYxMjMsIDB4ZjFmMTg0MzksIDB4MDIzYTk1MGIsIDB4NWQxNzJkZjgsIDB4NWQ0ODQwOGIsCi0JMHhmM2Y1NmIzMCwgMHhhZjg2NTYwYiwgMHhmZTU1MGU2OSwgMHhjZjAwNzJiOCwgMHg3ODAxZTU3ZCwgMHg5ZTAwZTU3NiwKLQkweDFiYzQ3NWNiLCAweGUwMTU0ZmRlLCAweDI5NzdlMjk5LCAweDk3ODVmM2M3LCAweDllMDBlNDI3LCAweDkwOWJlZmNmLAotCTB4YTJkZTc4MDMsIDB4YmVjMzcyNmYsIDB4NGI3YjI1OTksIDB4ZDNkZDhlMDAsIDB4NDE1ZmE4M2QsIDB4ZDFmNjEzYmMsCi0JMHg3ZGUzZDJiNSwgMHhmNDY0ZjM3ZCwgMHhmMzkwZGY3OCwgMHg1YmY4YzdmYywgMHg4YjhmOTI4NiwgMHg5NWExZTZmYSwKLQkweDkyODMwZThmLCAweGNjYTBmYzBhLCAweDM5NDZmYzY0LCAweGZhODM3ZjA5LCAweGY0NDY0Y2YzLCAweGVhZmUxYzdmLAotCTB4MWJjYzQ2ZDIsIDB4M2Y1MTE3NjgsIDB4MmMzYmZiNTEsIDB4M2Y0MWIzNzksIDB4ZDM4MWZjM2EsIDB4ZWU4NjE3ZTUsCi0JMHg4YWZjMGFkZiwgMHhlMGZjZmZjNSwgMHgwMmVkNTE2NywgMHhlNDhjYmY1NSwgMHhmYmU2M2ZjNywgMHhmZGMzYjM3YSwKLQkweGQ4M2JmZDk5LCAweGI4ZmZhYWE3LCAweDA1MzFiNzgyLCAweDc3YmQzMTJlLCAweGZlNjJlMDhmLCAweDI3ZjQ1NmUzLAotCTB4OTdjYzc3NTcsIDB4NjlmYzVmYzEsIDB4YWI4ZmY5ODAsIDB4ZmY0N2NlNWYsIDB4ZjVlMDY1NzEsIDB4ZGZjODBhNjAsCi0JMHg3YjA2NDE3NiwgMHgyN2NmNzJhNCwgMHhmZDJjOGIzMSwgMHg3M2I1MmY3NiwgMHg4ODZlODA5YiwgMHhmYTQ3MWI0OSwKLQkweGE2MmE3MDM0LCAweDNlZjM4MmRjLCAweDc2OGVmMzBkLCAweGY3NDAwYzg0LCAweDIzZmVkNGQ1LCAweDUyZDU0OTc0LAotCTB4NWJmNDE4ZTgsIDB4MTdhODIwZWQsIDB4ZWQ2OWI2MTQsIDB4YjgwNTRhNDEsIDB4MDMxZWVkZWUsIDB4ZWRlZGRkZjIsCi0JMHg3NWY4MDA0MiwgMHg5OTliYzE4MiwgMHhhNDhkNzIwYSwgMHhlNDA3MThjYSwgMHhjMzk3NmNmYiwgMHhlOGYzMDFkZCwKLQkweDAzYmI2YjhmLCAweGEzM2NiMDhlLCAweDQ4YjE2ZGFlLCAweGUyN2E1ZGJmLCAweDZkOWY4MTk2LCAweDI2N2U3MmIzLAotCTB4ZjNmYjdmMjEsIDB4MjFhMDViMGUsIDB4NzNmODZmNGMsIDB4OTUwOWU5ODAsIDB4NDQ5MWJlNmEsIDB4ZDdjNTEyODIsCi0JMHgwZmVlMzlhMiwgMHhlZmMwZGYwMSwgMHgzZWZjMTE4MywgMHhhM2M2YWNiYywgMHgzY2ZjNDA5NywgMHhkZTFkZWUyMiwKLQkweDFmOGUyZmFlLCAweGY0ZDZmNzE2LCAweDk1ZjI2YTQzLCAweDViZGM2ZDQyLCAweDc2NjdlZjViLCAweDJiMGZkZDMzLAotCTB4NTdlOWZhMGEsIDB4YmY0YTgzYzUsIDB4ZWQxZmRjZDUsIDB4MTZiOTM4YWIsIDB4MjZkN2Q3ZTgsIDB4MmY1ZjYwYzgsCi0JMHg1ZGZhMzE3NSwgMHhlMzJmZWQ0YSwgMHg5ZGZiODFkOCwgMHgwZGZhNTJiNCwgMHhlZDQzNzdlMywgMHhlNDIyOGZmZiwKLQkweDdiZmY0N2QxLCAweDNiNTA2OGYyLCAweGY4ZGY3NGZkLCAweGViYWJkZjZjLCAweDdkZjdmZDU3LCAweGQ4MTc2Y2ViLAotCTB4NTc1ODhjYmUsIDB4ZTkxYWRkYTQsIDB4Y2VlZDU3NzcsIDB4NWY4N2U1NmIsIDB4YWZjM2YwNDUsIDB4YTFmODhmZmUsCi0JMHg3ZTI4N2UyOSwgMHhmYzZiOGRhOCwgMHg3ZmYwZmNkZCwgMHg0Y2YxYmUzOSwgMHgzYTMxZDNjNywgMHgzMzJhMmFjYSwKLQkweGQ3YTY0ZWZkLCAweGUyZjEzNWI5LCAweGNkYzVhMjE5LCAweGNiMjJhNmUyLCAweGJiOGM4ODk3LCAweGRjNzgzMzJiLAotCTB4ZDdlN2VkOWQsIDB4NWYxMTE2NWYsIDB4NWMzZTNjNTUsIDB4NDE3NTYxZDUsIDB4NjJjYjBhZDMsIDB4YzY0NmNmOGMsCi0JMHhmYjI0MWY0ZiwgMHgyMjhhMDA2NiwgMHg2MTRiYThlMywgMHg3YjdmNjcxZiwgMHg5ZTNmMzUzYywgMHg1Y2U5NDdjNSwKLQkweGExNGYyMTMyLCAweGRmY2I1OGE4LCAweDhhNWNiNzVmLCAweGJiZTE4NmYzLCAweDAyMWE4ZjM4LCAweDQ5YjVkMDgzLAotCTB4ZDg3YjEzZjIsIDB4OTllMzViZmIsIDB4Y2YzYWZkM2UsIDB4NDgxYTcxZTcsIDB4NmNhMWU0MWQsIDB4YzFiYjQ2YjIsCi0JMHg1OGVhNzE4ZSwgMHg5YzRhNTFiZSwgMHg3OGZjNGE2NywgMHg5ZTFjZWZlMCwgMHg3NDRmYmYwNywgMHhlOGNmMmUxNCwKLQkweGY4OWY5MTViLCAweGUwMmUyY2FiLCAweDQ3MWZhYTdmLCAweGY3MDc3ZmVkLCAweDlkMmI1ZTgzLCAweGRkYWYxYmRmLAotCTB4N2ZlNTdkZjcsIDB4NTcyZmJlZDIsIDB4ZTM3YmZiYzcsIDB4NmMyOTViNzYsIDB4MjA4MWZiMzQsIDB4Mzg4MDllZmQsCi0JMHhiYTQwZTY1MywgMHhhMTlmYWExZCwgMHhiYzc5NzdlOCwgMHhlZTNjNTk2NywgMHhjYzU4ZjczYiwgMHhmZTQ2YmQ5ZiwKLQkweDNhMTg1ZDEyLCAweGIyMjJmZTA1LCAweDdmODBhOGRmLCAweDI4MjVmYzEzLCAweGI4OTMxYjE3LCAweDAyMmFlZWJkLAotCTB4MmViZTQzMzgsIDB4MGM3ZDZiZTQsIDB4YjQzNDljZmYsIDB4YjdkOGQ4ZmUsIDB4ZDhmZTk5ZmYsIDB4ZTkwN2ZlNTcsCi0JMHg5ZWM4Mzc4ZiwgMHhlZWNlYjA4ZCwgMHg5MDFjZWUyOSwgMHg3NGFjZWI2ZiwgMHhiZTE3NjBmZSwgMHg3NjhjZjJjMCwKLQkweGVlN2QxOTk4LCAweDkyNWQxODEwLCAweGU0ZDc3MTE1LCAweGFmMTNkOTc3LCAweDg2N2I5ZmU1LCAweDJlZmZmNzljLAotCTB4YTdmZDZjZmYsIDB4YzRiZmNmZjEsIDB4ZTg3NTFmODAsIDB4MmYyY2ZjN2UsIDB4Y2RkM2I4YjcsIDB4Nzc2NDY5ZTMsCi0JMHgwN2RiN2Y5OCwgMHhmYmY0NjZmOSwgMHhlYWJlN2MyMywgMHgyZTVjOWRmYiwgMHg0N2RjMTI1YSwgMHhmZjljMWY4MSwKLQkweGIxMjI2NGQwLCAweDY0MjllNTU0LCAweDYzZGFiMTdjLCAweDc1NDJmOGMxLCAweGE5N2JjYjJiLCAweGZmMjA4YzdlLAotCTB4NjlmZjA2YWUsIDB4NjcxNWY4MWUsIDB4MjZmN2QwMTEsIDB4MDAyN2JjZDksIDB4YjIzZWViY2YsIDB4ZjA1OGM1ZjgsCi0JMHhhMDI2Y2ZiYiwgMHhjODdjZjVkZiwgMHhiZDk2N2ZjYSwgMHg3YmVmNTA5ZCwgMHgxOWUzMGJhYywgMHg2MWNmYjNjZCwKLQkweGQ1ZDE1NWRlLCAweDBhNGI2YjRiLCAweDQ3ZThiZTcxLCAweDRkNDkxODcwLCAweDFhZmU5ZTM4LCAweGQ1OTZmMmNmLAotCTB4NzgzZTk1ZTcsIDB4N2ZhZmQxYmIsIDB4MTFlNTgyYmUsIDB4MTk2ZTFjZmIsIDB4NWZhYTExZmMsIDB4NDRlOTVhM2MsCi0JMHg3ZWY1NTMzZiwgMHg4OTE1YjRhNiwgMHgyN2U0M2Q2YywgMHhkNTRmNDhhOSwgMHg4M2U0YTdmYiwgMHg5YWI0OTRmZiwKLQkweDJkY2Y0MWYzLCAweGVkMDVhM2ZhLCAweDI2OGZmM2JkLCAweGZjYzQ5ZTYzLCAweDk4NTllZjM4LCAweDcwMzBiNWFmLAotCTB4MTlhNWU4MWIsIDB4NzdkMDFjNzQsIDB4MmRiYmVmY2YsIDB4ZjJhZGU2MWYsIDB4M2ZlMDJkYmYsIDB4NThiN2VkYTcsCi0JMHg2MjcxN2ViNSwgMHg5NWRkZjk2MiwgMHhmZWE4YTdjZiwgMHhiN2Y0MTBmMywgMHg2MjQzZWY4NSwgMHgzNTlhMmE2OSwKLQkweGY3NTdiZWM4LCAweGMzYThhMjdiLCAweDYwN2YxM2ZlLCAweGNhYjkzOGMyLCAweDg5ZThiNjBmLCAweGNmZGQ5NGQ3LAotCTB4Y2YxMGZlNDcsIDB4M2MxY2ZiZGUsIDB4MTY3ZGIxNWYsIDB4NjVlMTRmY2IsIDB4ZjBhYTdmMGIsIDB4ZmU5OGVjZGMsCi0JMHgxZmM3OTgwNywgMHhjYmViYTVlMiwgMHg0YjA1OTMwYiwgMHg3NWViM2M3OCwgMHg3ODg3ZmJjMSwgMHg4MDMyY2YxNiwKLQkweDhhMzE0ZTdkLCAweDJiZTg5NjdlLCAweDkyY2U3ZjRjLCAweDU2NDc0ODBkLCAweDNlMzBkZmJhLCAweGY0MDhlOTQzLAotCTB4Y2VhMWM5ZjgsIDB4OWQ3NGIxYTksIDB4OTM4MzlhYzMsIDB4YWY4N2JlMDEsIDB4ZDI0ZjEwZTgsIDB4OWYxODEzYWMsCi0JMHg3OGQ4MTU4OSwgMHhmNTVkOGRkOSwgMHgyMmZmYzAyMywgMHhhMDMzNzdiZiwgMHg4YjkyNjk1MiwgMHhjOTM3ZDQyMSwKLQkweDQwNGU0OWU2LCAweDJlNGQ3YTdmLCAweDdiZmM1NzhjLCAweGVjOTNjYjNkLCAweDQyYmY0Njg4LCAweGNjNTJmYTczLAotCTB4YzhmOWVjOTMsIDB4NDg5Y2ZlODgsIDB4ZmQzZWEwZjksIDB4NDVlNjM1NjQsIDB4MjdmZGI1NjYsIDB4ZmJhYzA5YzYsCi0JMHhkNGRjMGQwNSwgMHgwYjA0ZjhlNywgMHgzYmY5NWY4YiwgMHhjZDZlNjA2NywgMHg1N2YyMDc2NCwgMHgxODhmZTNhOSwKLQkweDI1ZWE5NjlmLCAweDU2YTQzY2UwLCAweDgxOTlkNmVmLCAweGU4MjJhZDdmLCAweDJjZGUxY2U3LCAweDE5NWYwMGViLAotCTB4ZjdhNjJmM2MsIDB4N2FjNzVmZjAsIDB4ZTM1MTRlZDEsIDB4ZDc5NjAxMDIsIDB4MGI1YWVmYTQsIDB4YWFiNDk3ZjYsCi0JMHhlMDNmMTZlYiwgMHg1NzRkYmY2MywgMHg4NWZkMDc5ZCwgMHhkMmNmZDFhYSwgMHhjZjgwNGQxMSwgMHhhZjY1YjQ2NywKLQkweDMzOTY4OWJlLCAweDgzOGM2NGVhLCAweDkyNWExZWY1LCAweGJhNTU3ZTgxLCAweGFjODNlMWNlLCAweGU1ODEzZDMzLAotCTB4MTgxMzM5MjEsIDB4ZDExZDQ4YmQsIDB4ZDI2NzkwM2EsIDB4ZDE4MmUyNjYsIDB4MzJkZDZiMzMsIDB4Y2I4Nzc5ZjgsCi0JMHgyNWI5ZDIxMiwgMHg3MDAyNWJjMSwgMHg4MDdjZTY4ZCwgMHhiOGMyODhhYywgMHg3ZTYyNTVhMiwgMHg4ZjhhZWIxMSwKLQkweDQ0ZTcwMTdlLCAweDAzZjNmMTc2LCAweDllOGYwZjQ3LCAweDdhYmRmZThkLCAweDVmYjgwMDQ5LCAweGM5YmNiMWI2LAotCTB4NzNkYTA5MzksIDB4M2VmMGZkMDcsIDB4NTlhN2Y5OGEsIDB4ZTRjOWZmMWQsIDB4ZmEwYjFkMTcsIDB4M2U4Y2Y0OTcsCi0JMHgwYjQ3N2FhNCwgMHg1ODc3MTFmOCwgMHg3YjZmOThiZCwgMHhjNDUwNmQ3MywgMHhmZGRjOTkzOCwgMHg2NjEyODk2NCwKLQkweGYyNjU2Y2NmLCAweGIzMmY3YWE0LCAweDk3ZWQyM2JmLCAweDU1MjM5MzZmLCAweGQyMzk1YTA5LCAweGU5MjdmZTU3LAotCTB4YWUxMjJiMjcsIDB4NWEyMTJlZDMsIDB4NGY1MjJlN2IsIDB4MDZkZmI0ODksIDB4ZmQxMWRiZTgsIDB4YThhZmE1MGQsCi0JMHhmZGM1Mjc3OSwgMHhkOWJkMzBlMywgMHg3ZTQzZWFhYSwgMHhiMTRlNWU0ZCwgMHg0YzRiOGQ4NSwgMHhkYjI3ZmVkYSwKLQkweGNjOGY5NjY1LCAweGQ2MTI3NGYzLCAweDkwMjRhYjI4LCAweGQwNDZmZjU3LCAweDBiZTZhNzJmLCAweDVlNTk4YmY5LAotCTB4Zjk0NzVmOGYsIDB4OTdjNDI2NWYsIDB4Mjg0ZjMwOWEsIDB4MDEwNTA0ODUsIDB4MDQ1ZDY2ZmQsIDB4N2M4NDRiYmUsCi0JMHhlM2RkZmEyMSwgMHhlZjM4NTkwOSwgMHgyNzU1YzQ5ZCwgMHgwNDU0N2YyMiwgMHhmMjE5Yjc5OCwgMHgzNTJmMzA0YywKLQkweDhjMTE2ZGIwLCAweGM3MDViNzczLCAweGM5OWU0MzMxLCAweDcwMTU0ODM4LCAweDNhN2UwMzZmLCAweDExYzU4MmI1LAotCTB4MDVkY2E5OTIsIDB4YzYxZTRkZmEsIDB4OTczY2QwZTgsIDB4ZjlhODliZTUsIDB4ODdmZTZhMjQsIDB4MGU2Mjg3MGEsCi0JMHg4YjExZTRkZiwgMHhkNWVmODEzMiwgMHg0MDE3ZGUwYiwgMHgxODE3YTljZiwgMHg5ODFiZmM3YywgMHg0NmQ5YTExZiwKLQkweDZlNWE2OGY1LCAweGY5ODUxY2FlLCAweGY1ODRiZDdlLCAweDIxZDBhZmVmLCAweDgwZjlhYTVkLCAweDc2MTVjM2NkLAotCTB4MjI2ZmU1M2UsIDB4ZjljZGVmZWEsIDB4NDA2NGJmMmMsIDB4NWMwNDRhMWUsIDB4NmU5NDNjZDUsIDB4ZjYwM2I3YWIsCi0JMHhlNGM4YjI2ZCwgMHhhMjM3OWFhOCwgMHhmZTE4NDlkMiwgMHhkZTNhNjZmYywgMHhiZmE2MGVmNiwgMHg3MDE4NTcxNywKLQkweGI3OTViZDFkLCAweGI3YjFmZmEzLCAweGNlNDA0NzUyLCAweDE5MWJiNzE3LCAweGI3OGM0NWRkLCAweDA0ODFhZTdkLAotCTB4NjAyOTVmYTEsIDB4OGU3OWZjYzYsIDB4NWZkMzZmZmYsIDB4YzE3MzVlMjksIDB4NjU3NDdiYmYsIDB4MGE2ZWI4YzksCi0JMHg3YTU2MzdlMywgMHgxNjZiZDlmMCwgMHhkN2M4NDU1YSwgMHgwMWU2ODczMSwgMHhmODljZGE0NywgMHg0OWE0M2JhMywKLQkweDRhMTM1NzkwLCAweGVjYzkyODE3LCAweDU0YTBmZTcwLCAweDM3YTA3MmEyLCAweDk0MzFmNDNlLCAweDljN2M0YzVmLAotCTB4NzY4Nzg3OTUsIDB4ZDFmZGI0MDksIDB4ZDhhNTFkYTcsIDB4OTkzMTY4MWUsIDB4OTgyNTNmOTAsIDB4ZWI5NmZkNGIsCi0JMHg0MDY0NmY5MCwgMHhjMGE3YzZiZSwgMHhkNzQ4YWE4NywgMHgwYmY0NGVkYSwgMHhjODU2Zjk3MSwgMHg2Njk5MjFmOCwKLQkweDk0YmYzMDBjLCAweDc3YjFmZTgyLCAweGVlNTEzMjkzLCAweGY2YjM3MjViLCAweGFhN2Q0Mjc3LCAweGI0NjlmZDExLAotCTB4ZGRmZGU5MWUsIDB4YmQ1ODUzZTEsIDB4NTI0ZWYwYzIsIDB4ODM2ZjJjYWQsIDB4OWY4MWY5NzQsIDB4MDUzOTliYmQsCi0JMHhiMDU1ZDJmZCwgMHhmNGZlYTgxZiwgMHgwNTdiYzVhNiwgMHhlODQxN2FmMCwgMHhlMGZiMGU1YywgMHg5YWZmZTlkZCwKLQkweGUxN2RmNDA3LCAweDAxODY0ZmMwLCAweGEwNjk5OWJmLCAweGZjMjBmOTdhLCAweGUzMjc3MWU1LCAweDRiN2FiZDJmLAotCTB4NzlmYjQwOWQsIDB4MTIxNWUyZGMsIDB4ZTg4M2Y5NjksIDB4OTUyMDMzNzksIDB4MTRkYzZlN2MsIDB4MjAwZDFjMDMsCi0JMHhlMDQ0MTdmZSwgMHg3ZjFjZjE3NywgMHg1ZjRjMzliNiwgMHgwOGYzNGRiNCwgMHhjNmI5Zjc5MCwgMHhlZjExZTZjYywKLQkweGJmYThkYzk1LCAweDc3MDhlNzc4LCAweDExYWZmNWQzLCAweDk0NDMzZWI4LCAweDE0M2JiNDU4LCAweDhlZWMxNjI1LAotCTB4YzIxZTJiYTUsIDB4ZWY5MTZmYmMsIDB4OWJhZDQ5ZTcsIDB4N2Y5N2QwNDUsIDB4NGRmOGYyYjcsIDB4ZTVhMWIwZDIsCi0JMHhmNjExNWRmMCwgMHgxMjU0ZmE4NSwgMHg4YjY2M2FkOSwgMHg4ZmEwMThjYSwgMHg2ZmUzNDJiNSwgMHgzZGUwOTM0YSwKLQkweDMxZTliM2EzLCAweDVmMjEwYTJiLCAweDRkNzQ2NjdhLCAweDIyY2RjNjIxLCAweGY3ZDJjN2RmLCAweDIzNjU2MTc5LAotCTB4MTRkNGI3NmIsIDB4M2QyODk3NGEsIDB4NjFkZWNkM2IsIDB4ZjNjYjk3MDAsIDB4ZmIwZTU5M2YsIDB4YmJmMjc5NzcsCi0JMHhjMmJlNDMxZiwgMHhkNmUyN2FiYiwgMHhlMjRkM2VjMywgMHgxZjJhNDM3MSwgMHgzMmM3YmYwMSwgMHgyODZlMmM2YywKLQkweDAzMWE5ZDZmLCAweGVmODY2Y2U1LCAweGUzMDA0OGRiLCAweGQ4NzNhNWQ0LCAweDQ4M2JjMTM5LCAweDZkMTc2ZDY3LAotCTB4NTdhOWQzMzcsIDB4ZWNlOGMyYmEsIDB4YmU1YjQ1MzYsIDB4MmU1YjU3MjMsIDB4ZmYxMTc5ZTUsIDB4YmZiZWQyZTIsCi0JMHhjMDI0ODQ5MywgMHg3ZTI2ZjdmZiwgMHhmZGZjMjIzZCwgMHgxYmVlY2Q4ZiwgMHgwYWFmZmU2MSwgMHgzZmQyOGYyYywKLQkweDg3YThjODg5LCAweGU4M2YwNDNhLCAweDQ5NWZhMzA1LCAweDU5MjZlN2U2LCAweGI5Y2ZkZmJlLCAweDQ0Y2FmMzFkLAotCTB4N2IwOWY1ODIsIDB4MGYyMWJiNGQsIDB4OGIwN2Y1NWYsIDB4OTNiNDdlYmMsIDB4YzhlYzMyOTgsIDB4ODRhZTUwOGYsCi0JMHhlODM3OWUwNCwgMHgzOTA5MThjMCwgMHg3ZTY2NGNiMCwgMHg0MGQ2ZGE1MSwgMHg1ZjMwMzlmYiwgMHg1ODI0Yjg0MSwKLQkweGEwMTZlNDc0LCAweGQyMTM0MmViLCAweDI5OGE1MTc1LCAweDI4ZTBlODBhLCAweDNmMWYyM2E3LCAweDU1ZDJhMzg3LAotCTB4OTAzYzQ0OTEsIDB4OWU4NzQwYmYsIDB4ZjU3N2NmMDMsIDB4ZmZmMDExZjIsIDB4NzgyMzNmZmEsIDB4Mjk5MDhhNGUsCi0JMHhmMjMxZTYxMiwgMHg4NTU5MDhiMSwgMHhiZDM5YTdlNSwgMHhlZGY5NTUxZSwgMHg2ZmM4NDliZiwgMHg3MDFhYjRkZiwKLQkweDE2YmY4OTVmLCAweDQzOWY4MDViLCAweDVmZDY5OTFiLCAweGYzODUxYzZjLCAweGRkMDNmNzUzLCAweDA5MWNjM2JkLAotCTB4ZmRlNjcyZTgsIDB4NDQ5ODNhNGEsIDB4MmFjYWNjYWUsIDB4MzhmODYyYmQsIDB4NDEwZmU0MDEsIDB4NzM4ZDUyM2QsCi0JMHhiZWZhOTlhNSwgMHg0OTc3YzM3MywgMHg3NGJiOWZiYywgMHg4YTRjZGUyYywgMHhkYzlkMWM3OCwgMHgzZjdjYzQ2NSwKLQkweGJmYjQyZjVlLCAweGY3ZTAyNWY1LCAweGRjNGNjNGYxLCAweGI3ODg3Yjc0LCAweDM0NDZlODBiLCAweDRiYTAxNGI4LAotCTB4ZGFlNWNlOTUsIDB4OWQyOWJmNDMsIDB4NzljOWViMDQsIDB4YmI3M2Q3MDQsIDB4ZTRmNTg2NTUsIDB4NmI5YzMyNTIsCi0JMHhhZTNiYTdjNywgMHhmNDYxZmEwMCwgMHhlZmIxNDYyZSwgMHhmYjc5MmFlZiwgMHgzZThjMjkyNiwgMHhlYzU1ZjdlOCwKLQkweGY3ZWQ2OGZiLCAweDNkYmRmYTRlLCAweGZhMThmYmVjLCAweGVmYzBkZTdkLCAweDcyMjIwOTA5LCAweGJmZjNlNzZlLAotCTB4ZWU4OWU3OWQsIDB4YmE4MjlhYjEsIDB4OTE3ZmQwYjEsIDB4MTNiZjQ1ZDIsIDB4YzNmN2Q4MTMsIDB4ZTA3YmU4NjIsCi0JMHg3Y2RhYjlmYiwgMHg2NWQxMzIwYywgMHg4OGRlM2NjMiwgMHhjMjk5OGJmYywgMHhkNzQwNDk2MywgMHhkYWFhOTliNywKLQkweDZmZmY2OGJiLCAweGQ0Y2NmYzcxLCAweGYzODBiZjc5LCAweGNiY2Q2ZjY2LCAweDU3ZmMwMzc5LCAweGJmYmEyNjI1LAotCTB4MDU1ZjYwYjIsIDB4N2FkMjAyZDcsIDB4YjE5Zjc4YTcsIDB4ZGRmZWUzNjUsIDB4MmQ1ZmY0MDEsIDB4NjlkODQ3N2EsCi0JMHg2OWJlODJmOSwgMHhkYzRjYjJkOCwgMHhlMzEzM2IxNywgMHhjNTVmY2UwNywgMHhhMDBlYmFiZiwgMHgzZWE3YTAwMywKLQkweGI3OTg4ODNhLCAweDY3NzIyZjhhLCAweGVkYWMyNjJiLCAweDNjMDg3YWE0LCAweDkwODRiZDU1LCAweGFjOWY5NjFhLAotCTB4OGJhZmY1YTQsIDB4NTMwY2NiMTIsIDB4MGJkMDMwY2QsIDB4ZTNmNGFhZGUsIDB4N2I2OTlkYmUsIDB4OWU5N2YzMTIsCi0JMHgwNGJlZjI0ZiwgMHhjMzdiOWRmMywgMHgzNDEyZTllNywgMHgwMTFmY2U3NiwgMHhkZjNhMjA3ZSwgMHhjZTVmZmQ1ZiwKLQkweDA2YmZkNTU3LCAweDY2N2VlN2U0LCAweDBlZTdlNGQwLCAweDcxZDQ3ZmI1LCAweDg5NTdhMDdkLCAweDgyZGJjNzkwLAotCTB4MzliZWI2ZjksIDB4YWI5YzE3MTYsIDB4NjhiZTQxZjAsIDB4NTA3OWM2MjEsIDB4MzAyNDNhYWYsIDB4OTgyZmQ1N2QsCi0JMHhhZDc0MWViOCwgMHhlOTg0YmM3OSwgMHhmYTdkNTU0YiwgMHhiZDBmMjY5MiwgMHhiYmNkOWYzOSwgMHhmYTgyOTk3OSwKLQkweDZiMDJhYmQ2LCAweDk4NGY5ZmVmLCAweGQ3OGIzNjNlLCAweDVlYjE5NDJmLCAweDZlNmY1N2NkLCAweGU2YjVmZTYxLAotCTB4ZDAyODQ3OTcsIDB4NTBhM2Q1MmYsIDB4YWU1ODkzMWUsIDB4ZmUzMjY1YTcsIDB4OTE0OTNjZGEsIDB4NDRkYzBjZmQsCi0JMHhhZmNmZTg0OCwgMHhmYTY3YTJkZSwgMHhhYjlkNzZkZiwgMHgwYzQxZjMwOCwgMHhmMTYyM2Y1NCwgMHg4NjlmYzY1YiwKLQkweGZkMjNmMWIzLCAweGFhMjc1ZjcwLCAweGMzZjMwMDc2LCAweDQxZmY5NWY1LCAweGIyNTliODdlLCAweDdmNjkzODk3LAotCTB4ZTlkY2YzMGIsIDB4MTc5ODJjZmEsIDB4ZmE1MWM3ZjMsIDB4MjA0OWQxZGMsIDB4MTg2NmFjNGQsIDB4OTFiN2NkZTgsCi0JMHhkOTc0Zjc5YSwgMHg2ODA2OWY0OCwgMHhhNTM0NzczZiwgMHg3ZDBkNmNjZiwgMHg4Y2YxOWQxYSwgMHgyMmJjYzIxZiwKLQkweDFkMjQ0MWY5LCAweDY1NzhjNTY2LCAweGQ2ZDlhN2U4LCAweGQwNmFjN2ZhLCAweDJlOGRkYjM3LCAweGYyY2E3Zjk2LAotCTB4NDBmOTIyZTksIDB4NDgxNjdjZDgsIDB4NTEwZTNlNmMsIDB4MDczOGY5YzQsIDB4ZWNiNWNmOWIsIDB4NGNmYTcwOTMsCi0JMHgwYzNmNmMyNCwgMHgyNTEyNWZiNSwgMHhmNDE2YjdlMiwgMHg5YjFmOTdlZiwgMHhiZDYwMjNiZCwgMHgyZDY2ZmI3ZCwKLQkweGNjMDYyZmIzLCAweDdkMjBiNDViLCAweDhiMmY3M2RkLCAweDk5YTJmODM3LCAweDQzYjg4MzVjLCAweDE2N2YxZDEyLAotCTB4N2E5ZWZmMWYsIDB4ZmNmNzg3NDYsIDB4NGI3NDgwZDAsIDB4Zjk4NDFmYTcsIDB4YjNmNWU2Y2YsIDB4ZGYzMGFiZGEsCi0JMHhmZDM0ZjY2OCwgMHhmZjBkMmVjOSwgMHhlN2JjMjM3NSwgMHgxYzczNzZmMiwgMHgwMmQ4N2FmOSwgMHg3MWI1NGE3MywKLQkweGIzZjdiOTg1LCAweGE0ZGRjNmI4LCAweGJkZjMwZjQ2LCAweDlmYjY4ZTY3LCAweDczZjFhNGI5LCAweDdiOWE5ZmM4LAotCTB4NTRmZGY2YmYsIDB4YzliOWRmNjcsIDB4Nzg4ZjEwMTEsIDB4YmRlMWRiODMsIDB4N2VjMGJmNzQsIDB4ZjE3ZTMzN2EsCi0JMHg3ZTk0NjU4ZSwgMHhhZjM0ZmM0NywgMHhkMzAzZmMwMCwgMHg2Y2Y3MmExMywgMHhiN2U3ZTVhNiwgMHg5YmYyYzI4ZiwKLQkweGQxZjgzZjA5LCAweDJiYmY1MGJiLCAweDIwZDNjYjA3LCAweDA4ZWMwYzE5LCAweDZmMjA4ZmQ4LCAweDNkYmRlZThhLAotCTB4ODZmYjhlOTMsIDB4OGNiYmY3OTksIDB4YTMzYmRiZTUsIDB4NjhiM2NkYmMsIDB4MmNkOGU3M2IsIDB4YzY5YzFiY2MsCi0JMHg0MmVmNGRmOSwgMHgwZGM3N2Y1NiwgMHhmYTFhOTY1NiwgMHhiOTdlODI4MCwgMHg3OWExNTE2OSwgMHhmMjI3ZmY0MCwKLQkweDc5MDA1MGZmLCAweDc4YjJkM2FjLCAweDUxZDVlMGI5LCAweGY4NDM3ZTUwLCAweDRkZDgxZTdjLCAweDA5MTY1NTNkLAotCTB4Y2M5ZDVmZTAsIDB4NzNhMzk5ZmMsIDB4MGE0OGUwODUsIDB4ZGU3NjY5OTcsIDB4NTc1YjE1N2YsIDB4YzkwYmMxNjksCi0JMHgxNWE2M2ZiMCwgMHhiYjQ2N2ViMywgMHg0MzY3ZDRhNiwgMHgyYzQ1ZGQzYiwgMHg2MjliMjRmNywgMHhmYmFhMWY4MCwKLQkweGZiOTM5OTZjLCAweGU0OWViODA3LCAweDE1ZmVmYmUxLCAweDcxYjUyN2Y3LCAweDQ5OGY1ZmI0LCAweDNkMTJjMTcwLAotCTB4ZmI0MTNmMTMsIDB4MzlkODU4OTQsIDB4NTMzYjhmMmMsIDB4NTRlODdmMDIsIDB4ZGM3M2NiMzcsIDB4MDJhYzhhYmEsCi0JMHhjZGViNjQ3ZCwgMHhhZDBkNjk2ZSwgMHg3YTIyNmE5ZiwgMHhjZTk0NmI5MCwgMHg5YjdhMDExZiwgMHhmNGYzZTEzYiwKLQkweDhiMmUyMDE4LCAweDNhNTVjZTk2LCAweGY3ZDJhNTlhLCAweGQzMWQyZDM0LCAweGU3MTNmOWZkLCAweGNmZTc2ZmY4LAotCTB4ZjczNjNhMWEsIDB4N2E1MGYxZDMsIDB4MWQ1NzlkMzksIDB4YjQ5YmJmZWUsIDB4OWM2ZmFhZjIsIDB4MzkxODdkODgsCi0JMHgwMWZjNTBlZSwgMHg2N2Y5YzJmZSwgMHg3MTVhZmNmZiwgMHhiNjQyYTViZiwgMHhjN2VjMzY1OCwgMHg2ZTNmNzUyNiwKLQkweDc0MThmODAzLCAweDI0ZmU3ODlkLCAweGMyOGQ3MDQzLCAweGU4NDM5YjAzLCAweGQyZmNlYTE1LCAweDMwNTkyN2MwLAotCTB4MjdmMDVlNzAsIDB4ZmIxZDdhYTksIDB4OWIxZDgwNzMsIDB4NzdlOWViY2EsIDB4OWZlZjYyNmUsIDB4MDVmZjFkMTcsCi0JMHhkOTZiN2ZlNCwgMHgzNTBhNzY3YywgMHhiZDcwOWY4YywgMHhhYjdmYjU1YSwgMHg2OWI2ZjVkNSwgMHhjNTE0NWJkNywKLQkweGMxM2I3YmNlLCAweGU5M2U4MTRmLCAweGYzN2Q1MWZjLCAweGE4M2MwNmJlLCAweDM5NzFmMWViLCAweGIxZTRjNzNkLAotCTB4ZWVkYWU4MWEsIDB4ZmQyMzk1YjYsIDB4NWZmODlmN2MsIDB4YTBlODdkMDYsIDB4ZTYxODdiYzUsIDB4ZWZlNzU0NzksCi0JMHgyMTYzZmIwMCwgMHg5MjVjNjM3MSwgMHhjZTZiYzdkMiwgMHg5ZDQyZmQzMCwgMHhhYTljMjQ2ZiwgMHg5MTlmZTA4NywKLQkweDRmODQ4OWViLCAweDUxM2FkZTNmLCAweDc3Y2Y1MzlmLCAweDFhZjdhZGY1LCAweDIxZWFhOWQ3LCAweDNmZDY4MzBlLAotCTB4MWNmZWU3NjQsIDB4MDBkZmY3M2IsIDB4MmUzYzgxNDUsIDB4ZDAyZTUxMjUsIDB4MDRiYWE3ZWIsIDB4ODk0YTI3ZDQsCi0JMHg2OTcwZjkwOSwgMHg3NmRmOTMwOSwgMHg1NDM3ZDMwYiwgMHhmZWQ0M2YzOSwgMHg4MjE2ZjViOCwgMHgyOTc0YTlmYywKLQkweGQ4YzllN2UxLCAweDMwZTkyMmJhLCAweDgyM2Q3NDkxLCAweGQ5NDk5ZTc2LCAweDM5ZjYwMGI2LCAweGZmNGEyNWU4LAotCTB4Y2MyZDRiZmMsIDB4YTljNTdiY2YsIDB4ZjFhZWY1Y2EsIDB4Y2FmYmQ3MjAsIDB4ZDc3YWU0MDMsIDB4ZjMzN2UwNzgsCi0JMHhhM2ZjNmQ0NCwgMHgyZmYzMGFmNCwgMHg3YzEwYWZkYSwgMHgxOTNlYmE5NiwgMHg1ZWRkNzIwZiwgMHhmODFlMzVkMiwKLQkweGVlYjFhZGQ2LCAweDFmOWYwMTJmLCAweDM2MWY5OGViLCAweDI0ZmE4ZTEyLCAweGJjNWZlYTlkLCAweGRjOGNmYTI2LAotCTB4ZTk1YzZhM2YsIDB4OTRkNzhiNGQsIDB4MWZkZmJlMzQsIDB4MmNlODQxNzEsIDB4MzhhZTQ2ODIsIDB4Y2RlZmY3OTksCi0JMHhmNGE2M2EwNCwgMHhmMjg5NzI4OCwgMHhjMTU3YWJjNywgMHg4MzdmODM5OCwgMHg1MzJjNzIxYywgMHgwOTJkOWJmOSwKLQkweDJlMDhkYmY4LCAweDhmOGMzZGM3LCAweGRiNzU4YjljLCAweDBkMWM1ODkzLCAweDg3MTBmMmUxLCAweDU3MmU3NGNiLAotCTB4ZDExMGVlMmYsIDB4OWRjZDNmOWYsIDB4ZGNiODM0ZmIsIDB4MjRmNWM3N2QsIDB4OGRkN2ZiODAsIDB4NWYwOTcxNzIsCi0JMHhhNTNhNDVkNywgMHhkMTdmYjQyMCwgMHhlMmM2N2E4YSwgMHgxZTMxY2JiNywgMHg4ZWFiNjIzMSwgMHg3MjcyNjEyOCwKLQkweDczNGEyMDY0LCAweGJkZThjNDdmLCAweDRjNzk0ZDc2LCAweGZkYTZiMjZiLCAweDlhNTk2ZDBkLCAweDI4ZTBmY2ZhLAotCTB4ZTNiOGZkNGQsIDB4ZjhmMjlhMDUsIDB4ZWQzNTFiY2UsIDB4YWM1MDdjMjcsIDB4YmFlYTRmMjksIDB4YTZmZWQzNWQsCi0JMHhjYTZiNjc0ZiwgMHhhYzEyMzAxNCwgMHgwMjgzYjlmYiwgMHg3ZGQ3NGVkOSwgMHhjZDNlZTg3MywgMHg3ZGJkZmZmNywKLQkweDBiODg3MWM2LCAweDMzZjZlMjllLCAweDczM2JiYmYxLCAweGE4MTYxYzI5LCAweDRjYTU3Yzc0LCAweDA4NTA1ZmRiLAotCTB4MDdjMDQ1MGEsIDB4NDY4MmRmZDgsIDB4ODUzY2Q3OTYsIDB4ZGZiYzJlNDIsIDB4N2Q1YTRkODUsIDB4NmQ1NmYxNjIsCi0JMHhmMzdkYTJiOSwgMHgwMzk1ZTA1YSwgMHg4YTZhMjFmMywgMHg2NDZjODhlMSwgMHg3OTM0YzQzZSwgMHg3NWU4MGViZSwKLQkweDJmZDUxMjc2LCAweDkxYzYzMDQwLCAweDFhYzdjODM4LCAweDFiN2ZkZjZhLCAweGIwYzg3M2ZlLCAweDZiM2ZjMzZmLAotCTB4N2E4MGQ1YmYsIDB4N2ZiN2UyZmQsIDB4YWZhNDE0NTUsIDB4ZmUyZDRlOGMsIDB4ZmYxNjhhY2QsIDB4ZmM1YWI5ZDEsCi0JMHhmYzVhNWQ1YiwgMHhlMmQ0NGVjNywgMHhlMmQ2ZTZkZiwgMHg4YjQ0YWUzZiwgMHgxNjhmNzhmZiwgMHhiNTczODlmZiwKLQkweDZhZjI0ZmY4LCAweGExNTI5ZmYxLCAweDhkNWE3ZmM1LCAweDJiMTlkZjE2LCAweGY0Y2NmOGI0LCAweGZmYmRhODNmLAotCTB4MmFmZjAyMjQsIDB4N2JhZWNjZmYsIDB4MTQ5ZWUyMjgsIDB4ZDE4NWQxMWQsIDB4MGI0NzRhODEsIDB4ZTc5ODE1M2MsCi0JMHhjN2U5YmMzMiwgMHhlOTIyNzE5YSwgMHgzYThkZGE4MSwgMHhkYThiODdiYywgMHg2Yjg1ZGI3MSwgMHhiZGNhMGZhNywKLQkweDQ5MWE1ZmQwLCAweGYxMjQ0ZjFmLCAweGIxM2IxODNjLCAweGVlZjk0NTVmLCAweDQwZjgxMjdlLCAweGYyYTE1ZWE0LAotCTB4MWUzOTcwYWQsIDB4YzUwZWZmNmUsIDB4MjdjODA2Y2YsIDB4MjkwZjBmNmUsIDB4MzYxZWMwOWYsIDB4NDNjM2RiZjcsCi0JMHg5MDg3ZTlkMSwgMHg1M2ZhODM4ZCwgMHhlZThiZmEyMywgMHgyZTNjZDk5NSwgMHhlMDQ5YWJjMSwgMHhmMjI1ZmQ1ZiwKLQkweDA0ZTkwZmJiLCAweDdlZjlkMjI3LCAweGUzYTFlYjA4LCAweDFhMzUxODdmLCAweDIwM2YxOGZkLCAweDdmY2ZkNDQxLAotCTB4NzQ4NzE5MDgsIDB4NzEyMDA3YjAsIDB4MTNlNzNlOTksIDB4NWNlNTlmMDUsIDB4N2VlNDJmNWUsIDB4ZGJkOWE3MGUsCi0JMHgxNmE5NzAwNiwgMHgzMDA5MTliZCwgMHg5ZTI3NmE2ZSwgMHhlMjI3MjIxZiwgMHg4NTVlZTlhZSwgMHg5NzZmZTA5MywKLQkweDdmMDZlOTA4LCAweDk4ZjY3ZDNiLCAweDUxOWM3ZDE5LCAweDI4OWI4N2Y5LCAweDk2NzgzMDhlLCAweDUxNzIxNTRkLAotCTB4MzBhMzE1N2YsIDB4ZmJlY2E4MGYsIDB4YjJhNWNhMDIsIDB4Y2VjZjYxZmYsIDB4NDcwN2E2MjQsIDB4NTBhY2Q3M2UsCi0JMHhmNWM0ZDllMSwgMHhmYzBmYTYwMCwgMHhlM2MyOTI3NywgMHg0MTZiYzQzMywgMHhlMDY0YjliOCwgMHhlNjNmYjRmYiwKLQkweGYzMTlmZWZmLCAweDQ5MjVkMTkzLCAweGVjNzhlYzU3LCAweGY4MGNmMTBhLCAweGEyNDFmMzg2LCAweDhjNzNjZDg5LAotCTB4ZTg1NzRjNDQsIDB4OGJjNGQxZmIsIDB4NDljN2RmZmEsIDB4N2FlZTM4NTksIDB4ZDYzMmIyODksIDB4YjdlODI4ZWYsCi0JMHhlZmEzYzYwYiwgMHgwNDVjNWJhNywgMHhkM2EyYmRmYywgMHhhYmZmZDA0NSwgMHhjMzJiMDk5NiwgMHhmNTViYWMxZiwKLQkweDdhNzJhNWViLCAweGNjMjU2M2Q4LCAweGU3ZTExNTdmLCAweDI3MjkxMTRiLCAweDNkMTU3Yzg1LCAweDk0ZWQwZjNiLAotCTB4ZjBiYjMyYjYsIDB4MThjZWFiOTgsIDB4NzkyYTJlYjYsIDB4ZWQ3ZTcwNmQsIDB4YzgxY2Y0ZGIsIDB4OTYxMzNkMmYsCi0JMHg1ZWUxNGUwZiwgMHgzZjFjOTgzMywgMHhhOGUyY2M5ZSwgMHg2ZTlhNTY2YiwgMHgwZjQ5Nzg4NiwgMHhiZTNkMDc4ZiwKLQkweGY4MGNkYzkyLCAweGU2MTcyNTE0LCAweDQxN2RjMTgxLCAweDBkZWZiMGI2LCAweGI2MWY1YTBlLCAweDQ5OGIyNGRmLAotCTB4M2M1YmQ2NTMsIDB4ZGFjNjU5NzgsIDB4MTc0ODM1OTUsIDB4ZDFhZjdlN2EsIDB4NjQ4N2Q0YmEsIDB4MjE3Zjk4NmYsCi0JMHg0YzRmOGY5YSwgMHgxMDI3MjI3ZSwgMHhiZmQyZjJhZSwgMHg1ODEyYTc0ZiwgMHg2NzRiMjhhZiwgMHg5ZmVhZjYzNCwKLQkweGRjMDE0NmFlLCAweGE5M2QzOGFhLCAweGU5M2EzNWYzLCAweGRlZWQ2MTM4LCAweDI1NTdmNGUxLCAweGZlNjAxYTc3LAotCTB4NzQxYzUwZWYsIDB4ZWE0MTNjNDIsIDB4NTZiZGUwNzQsIDB4ZmZiOGU5NzUsIDB4MzdmMGU0ZWYsIDB4OTA4MjE3ZWUsCi0JMHhlMDk0NmZmNywgMHhkMmY0MjY4YywgMHhkMjhlM2NkOSwgMHhmNDc3ZGFlOSwgMHg2YjI1ZTIwNCwgMHg3ZTQ0Y2ZjNywKLQkweGI4ZDdiMDY2LCAweDFlNGYwNWE4LCAweGVjYTE2NzdlLCAweGVhOWUwNDFkLCAweDJlOTRlOGQzLCAweDYxYTNmMzg3LAotCTB4OWUwZWRjYzksIDB4M2UwMDI2NDAsIDB4Y2EwZjk5MDYsIDB4ZjY2NTg3YTcsIDB4NTllM2MzY2QsIDB4M2ZjM2MxYmUsCi0JMHg0YzdmOTgyNCwgMHhhMmJmZDA1NiwgMHgxM2M0Zjg3ZSwgMHgxYjFiZjIxNywgMHhjNmNiZTEwOSwgMHg1MDAzNzQ5NSwKLQkweGE1NjFiNzFiLCAweGE4NzM3ODg5LCAweGE4MzUyMjFjLCAweDM3MTAyNTFmLCAweGZlNjM1MWQyLCAweGZkMzk1NzA5LAotCTB4ZWJmMDUyY2UsIDB4Mzc4N2IwNWMsIDB4MGQ1M2ZmOGMsIDB4MWY0NWFkOTQsIDB4NjFiOTQwNTUsIDB4OTBhZDhiZTQsCi0JMHhiOTgxNjQyYiwgMHgyM2JmMzAzOCwgMHhhMmI2NjcwMCwgMHhlZjdjZmQ0NiwgMHhlZjA3Njg2YSwgMHg0MjVmM2UyMSwKLQkweGFjZjlkM2RmLCAweDgyMWVkMzFmLCAweDBmNjNkMWY2LCAweDUxZjUwYTdkLCAweDliMjlhMDk2LCAweDNmNzUxNzdlLAotCTB4NDViMDQ5NzEsIDB4YjI1Mzg1NWMsIDB4NDg1NmQzZTksIDB4OGUyOGExN2IsIDB4NGY0N2RmZTYsIDB4YzY0NmZkNjQsCi0JMHhiYjJkMTIwMywgMHg5MzIxN2RkOSwgMHhiMTY3OGYwOSwgMHgxZmFhZWM3MywgMHhiYmIyZGUzZSwgMHhjNmY4MThhOSwKLQkweDUzZmQ2ZDMwLCAweDk2NzExZTFjLCAweDQxNjc4ZTk3LCAweGU3NjEyYTdkLCAweDkzZmQ3OTU3LCAweDc5NjZkZWJjLAotCTB4ZTU5OGIzYTksIDB4ZGZiZTY4MWMsIDB4YjU4ZmZiY2MsIDB4NTBiZjE4ZTgsIDB4YjFiNzhmMDgsIDB4ZGViYzRkZmEsCi0JMHgwOTNiZDZhYywgMHhmYWIxYTc4ZiwgMHhiNDZmNWU3YSwgMHhiYTEyZmNiMCwgMHhhZmRmMzVhZCwgMHhkYzI3ZTNlMywKLQkweDMwZGUyM2FmLCAweDg5Y2M3NGZhLCAweGZhMzBkZTIyLCAweDM1ZGE5N2IwLCAweDlkODViZDY1LCAweDI1YTc5NTIzLAotCTB4ZmI1M2JlNmIsIDB4MWI4ZjljN2QsIDB4ZjM0YjM5MzMsIDB4MjhkODY5OWQsIDB4MzRjZWZiNmQsIDB4NzEwZjIzOTQsCi0JMHgwYjUyMWIzOCwgMHhmOWVhZjUzNCwgMHhiM2E3MjI2YywgMHgyNzZiMzI3NiwgMHhmNGQ0NmUzOSwgMHg2MjUxNTE3YiwKLQkweDk5OWZmZjYxLCAweGNiYWRkMmE0LCAweDkwZmI3NDA0LCAweGUyMTEyYjM1LCAweGI5OTU4MWI0LCAweDFmMDE0NGEwLAotCTB4M2Y5OTRmZTEsIDB4NjY3NDc4OWQsIDB4Y2IwNTRhY2QsIDB4YjhiZmRjOTksIDB4MmM0NGU1NjYsIDB4MGI3NGE2ZWYsCi0JMHg3NGFjY2ZmNSwgMHgyZDI3Nzk2MSwgMHg1M2Y5ZjQyYiwgMHg1ODk1MGZkYSwgMHgwN2VkMWI2NCwgMHg3ZWQzNGZjYSwKLQkweGVkMTRmOWUwLCAweGQyNGY5ZTA3LCAweDMzN2VhMGYxLCAweDliY2EwZWZkLCAweGRlNTA3ZjY4LCAweGU1OGRkMmIwLAotCTB4YjA0YjJiZjUsIDB4ODNkMmJmNWMsIDB4ZTcyYjc1ZTUsIDB4OTVmMWYzZTIsIDB4NTlhZTdjNWUsIDB4YmJmNTgxNTksCi0JMHgzYmViODU5MywgMHgyMjQ4NWY3ZiwgMHg5M2JiYjllMywgMHhkZGU3ZjdjNywgMHgxNmRjZjFhYiwgMHhkNDc2ZTBjMywKLQkweDMyZmZjZTAxLCAweDg5ODhlNzg4LCAweGE1YzYzZmQxLCAweDhmNWIxYWQyLCAweGU3MTliZDgwLCAweDZhNDhmODYxLAotCTB4NWI3YWMxYWMsIDB4ZmQ0NzFiMDksIDB4MjRmYzM4OGUsIDB4MzMxZDg4YjUsIDB4NTk1MGZjNjQsIDB4MjMwZGY5OGQsCi0JMHg3MzE3Y2IwOSwgMHhjNDUyODlmYSwgMHg5ZmMyNWZjZiwgMHhiY2ZmNDIxNCwgMHhhYmU1YWI5NCwgMHg3MWY5MTE5OSwKLQkweDk5MjNiM2VhLCAweGIwZTI3OWQ5LCAweGM3MmMzNzFhLCAweDg0MTNkMTM0LCAweGNiOGI1ZTdjLCAweDMzYjFlNzhiLAotCTB4YTljZWQwYWUsIDB4ZTU3YjFjYmQsIDB4NWY4MGEyMTYsIDB4YmZhYjU0YmYsIDB4NjgxNWE3ZGEsIDB4NGFmMTQ0ZjQsCi0JMHhhNTMzYjYzNSwgMHg2NzY5YTdkZSwgMHhkYTY5OTQ3MCwgMHg1Y2M5MmQ5NSwgMHhhNDc4MDRlYiwgMHgxYjE4NzViMCwKLQkweGJkMTAxMTU3LCAweGUzMzc5YjBiLCAweDk5OTM2N2I4LCAweGViZDc0YmJkLCAweDNlZmJmZjQ3LCAweGViOTdhZDgxLAotCTB4N2NjYmNmNGQsIDB4ZTQ0NmE2YmQsIDB4YWM2YzIzYWIsIDB4ZDdlYjEzOTgsIDB4ZmYzYzNmMDEsIDB4YWZkYzU4YWIsCi0JMHg0M2EzM2RjZiwgMHgxMjQ4ZGZmZiwgMHg0NmJlMDFkMCwgMHhmNTBjZjE1MywgMHg5NjE3NDg2MywgMHg0YWVlMDA2ZiwKLQkweDExNDRmOWNiLCAweDg0OGUzY2ExLCAweDdhYTRiZWQwLCAweGIzMjU3ZmQzLCAweDY2MzNkMGI4LCAweDc5YTUwYjg4LAotCTB4MjNmOTY3OWYsIDB4MzkyYjk0NDEsIDB4YWEzOTFmMWMsIDB4OGE1NWI4ZmUsIDB4NGU5ZGE3ZjQsIDB4N2I1NmZiNDYsCi0JMHg1YjhkNDQ5ZSwgMHgyNTE2YjJhZSwgMHgzM2QxM2U4MiwgMHhiNDRmN2U0NCwgMHgxNjliYmVmMywgMHgyNzQ2Mzg1MCwKLQkweGZhYTdjNWNkLCAweDFiYTJiZDdlLCAweDU1ZTU3Y2Y0LCAweDRjZWZhZjBlLCAweDc3YzYwMWU3LCAweDZhZmNlOGMyLAotCTB4MGJiZmE1MzIsIDB4MGM4M2JmNzksIDB4MmMzZDUyMTksIDB4MWFmMGY2ODQsIDB4OTQxZmNhYmQsIDB4ZmQwZmUwNTgsCi0JMHhlNjJjNTc2NSwgMHgyMTI3YjQ3MywgMHhjMTk5NDQ3YywgMHhkZTk1YjllNywgMHg3ZmE5MjQ5YiwgMHhmOTk3ZTI5ZCwKLQkweGU0OWJlNDMyLCAweGJkYjY3Y2YwLCAweDM0ZGQ5NzJiLCAweGM3NWZlYTRkLCAweDVmYjYxNGU4LCAweGYyMmI0OTczLAotCTB4Y2U4NzVjZmIsIDB4YTczNWVjYzUsIDB4MGYzM2JlYzYsIDB4NzljMzcyNmIsIDB4NzExNDcxNWYsIDB4NDhjNDJlNDEsCi0JMHg1ZWU3ODRkMiwgMHhjODg5YmZjNSwgMHhiN2EzYzQ3ZiwgMHgxN2VhODUxMSwgMHg0MDgwNzI1MSwgMHgyZmRhODczZSwKLQkweDhmZTI3NmUxLCAweGMyZmNiZjM4LCAweDJkZTcwZDMyLCAweDk0ZjdhYmE2LCAweGY5YWY1MWI5LCAweDkwYzk3NjQyLAotCTB4YjM0NWYyY2YsIDB4NGYxMjNmMWUsIDB4NjU3M2ViNmEsIDB4NGE1ZTA3ZDcsIDB4NDdmNjhiOTcsIDB4NTE3YTYwYmIsCi0JMHg1Zjc4NGRiOSwgMHgyMDRiYjg5YiwgMHg4M2NlMDJhOSwgMHg5OWQ5YTdlNSwgMHg1YWRmYWE3ZSwgMHhlMGUzZmM0NCwKLQkweDJlMzdhZWQwLCAweGE1ZGFlMDA1LCAweGMyYTlkMDFjLCAweDhhYWJiNjllLCAweDNmMDZlYzMzLCAweDBiODAwOGQ0LAotCTB4MmU1ODczYzAsIDB4NWYyMTcxYzIsIDB4YWI5NWRlZWYsIDB4MTRlZTRlMTAsIDB4NjkzNWU3ODYsIDB4N2NmOWRjMmEsCi0JMHhmNzBkZGI4OCwgMHg1NjZhMmRiYiwgMHgzYWVkNWJlZCwgMHg3ZjE1ZTdkNywgMHgzYjZiZWEwZiwgMHg4YmQzY2M0NSwKLQkweDk4ODVlNzg0LCAweDI4NjI2M2Y3LCAweDMzNDZjYmEyLCAweGE3OWQwY2ZmLCAweGMxMjllNjFiLCAweGJlMDBlM2JjLAotCTB4NThiM2Q3MDQsIDB4NWNlMDA0MzYsIDB4NWFkMDhmNjYsIDB4MzFhOTcxODIsIDB4OTcxZTEyM2EsIDB4NTMzMzlmNTIsCi0JMHgyNzdhZmYxOCwgMHhiNDY3YzY1OSwgMHgwYjRkZGU3MywgMHhlZjk3ODVjNiwgMHhjMzFlYmE0NywgMHgxMjJjNGZkNywKLQkweGJiNzA5M2NiLCAweDVhYmY3MDk1LCAweGYwNjc2YTgzLCAweDNlMjhlYTNjLCAweGEwZmJiZWRmLCAweDJmM2NiMTQ2LAotCTB4MGFkY2U5MGIsIDB4ZDk0MzE3NzksIDB4NjE0YzNmMTEsIDB4M2I3ZWYyZjEsIDB4ZTgwNmEyODIsIDB4ZjMwOWJjNjcsCi0JMHg3Y2Q0MWExYiwgMHgwNTVkZTUxNCwgMHgxM2U5NmJmMywgMHg5YzRjNTFmMiwgMHhkOTU5ZDc0ZSwgMHhmYWVhMDQzZCwKLQkweGJlMzBhNjU2LCAweGEzZTM5MmI5LCAweDIyZWNjNGQ3LCAweDI3ZTRkYjg4LCAweDZmOWY5ZDg0LCAweDU4ZmI0NzJmLAotCTB4YjZmNGYzOGQsIDB4ZDU1MmZjYjMsIDB4NDljOTUwZmYsIDB4MDYwZGY3YTAsIDB4MjIxZGRlODcsIDB4ZGIyYTc3YzYsCi0JMHgwZWY3NjBlZiwgMHhmNzg5M2M3NiwgMHgxNGJlZDIzNSwgMHhkZTcyODdhMCwgMHg2YjRlYmNiZSwgMHhlM2Q4MmYwZiwKLQkweDBjYTUxYjU5LCAweGMxMTdiYmI0LCAweDAzZDlhYjdkLCAweDNiNDhlZGVkLCAweGFlMTRiMWZiLCAweDNlNDhiYWJmLAotCTB4MzU0ZTcxYzQsIDB4YTI4YjFmNjYsIDB4MTI2NDM1ZjMsIDB4MjI5N2JmM2MsIDB4NmVmNzg0YmUsIDB4MDliM2VkNTMsCi0JMHg3OTI0M2JlZSwgMHg0ODhmYmVlYywgMHg2YTkyYmZiYywgMHgxNWVmMzg0MCwgMHg1YTViOGYwOCwgMHg4ZWY3ZmU5MCwKLQkweGVmN2ZmYjY3LCAweDBlNzc4YjkxLCAweDkzZGNmZGE3LCAweDdlYTZlMGMxLCAweGNiMDY0Zjc3LCAweDA2MDdkZDMzLAotCTB4NGFkZjdkMTUsIDB4Zjk2MGM5NDgsIDB4ZGMzOGJiM2MsIDB4OWI5ZjMzYmYsIDB4NTU3M2U1YWMsIDB4YTJjNzVkNmQsCi0JMHgzYjc3ZTQxNSwgMHg4ZjdiZGU4MSwgMHgwZjI2MjVmZCwgMHhlZjA4NDdmNywgMHg4MzNmN2YyZCwgMHgwZGU2MDdjZCwKLQkweDc0ZmJmNDc5LCAweGE3MGJjZjlmLCAweDEyMjk3ZDgzLCAweGZhZWViNzlmLCAweGRhNjk4Y2Y0LCAweDdiYzg1ZDc5LAotCTB4MzY3NmUxMmYsIDB4NTc5ODU2YWYsIDB4NDI2NGYwNGYsIDB4M2FiNDdlNzgsIDB4ODNjNTdkYWYsIDB4ZmQ3Y2VmOWYsCi0JMHg5MTMzZTc3YSwgMHg1MDY4YTdjZSwgMHgyNmZkMWQzOCwgMHgwYzMzZWQzOCwgMHhmODBmOWYzZSwgMHgwZGUzZmU3YywKLQkweGMwYzBlZjc2LCAweGQzZDRlYmZhLCAweGVmYzA0NDc2LCAweDgwN2JjZWM1LCAweDdlZjlkMzVkLCAweDg0N2EwMjkwLAotCTB4NjMwMTNiYjMsIDB4YWQ3ZTFjNGMsIDB4MGIzZTljODUsIDB4YTE3MWRmMzksIDB4MWY3YzQ0NGQsIDB4YTRiY2MwNGQsCi0JMHhmYmQ1ODk1NiwgMHhhYjAyOGJlYywgMHg4ZWJhZmQyOCwgMHg3OTAwYzgyYywgMHg4OGQwZmQ2MCwgMHg4NmY4YzVmNywKLQkweDRiOGIzN2M4LCAweDk3ZDhlYjY1LCAweDg3MGEwYzJjLCAweGU0N2Y1ZTE4LCAweGI3ZjYxOTQ0LCAweDAxMjMwM2ZlLAotCTB4ZjVjYjUwN2UsIDB4YWI3MmY1ZjQsIDB4NTUwMWVlMDksIDB4MDJlNTA4ZTEsIDB4NDIxOWY0ZmEsIDB4MmU1MDVjOGIsCi0JMHg1OGE0YzJmYywgMHhjNzRmMTkwNiwgMHhiMTE0ZGJjNiwgMHhkNGYxZDQ2ZiwgMHg5NzM1MjlhNywgMHgzNzg1ZGRmOSwKLQkweGRlYTNjODQ0LCAweGJjM2RmOTM0LCAweGExNTM2N2FmLCAweDNiZjczYzg0LCAweDRiNTliZmMzLCAweGVmODIxNzJmLAotCTB4ZThjOWRjMjUsIDB4N2EwYTk0YzUsIDB4ZTYzYTcwOTQsIDB4MTNlY2I0N2IsIDB4MDNjZGJmNDIsIDB4YjhiYzE5ZjgsCi0JMHg0NjQ3ZGY3ZSwgMHg4NDBjMjJkMiwgMHgyZjRlMjVkMywgMHhmNWQ0ZmFlYSwgMHhkZWI2ZjNhYiwgMHhkNmYzMDBiYywKLQkweGYxMzAxZjAxLCAweDdhOWQ1NDk4LCAweGQ1ZjIxZTJmLCAweDYwZjcyZTU4LCAweDI2MjcyODVkLCAweDdkMGYyYzRiLAotCTB4ZGQ3ODg0YmMsIDB4M2M0NmYxMzQsIDB4Yzc4ZmIwMjcsIDB4MGM5MzQzOWIsIDB4N2U0M2RlODMsIDB4ZmQ3ZjFmMGIsCi0JMHgwNGVjZmY5NSwgMHhhZWRmZDVmYiwgMHg0NGQ5ZjNjNywgMHg0NWRlNzJlYSwgMHg4ZWY3YzhlOSwgMHg1MmJkZjc4NCwKLQkweGZiODEyYTdhLCAweGI4OWM4ZTY3LCAweGRkN2EwMzE4LCAweDg0N2FhOTRkLCAweDBmYzA0ZGYzLCAweDExNWMzZTQxLAotCTB4ZmY3ZjMwNGIsIDB4MThiMjE3YzQsIDB4NTM5M2ZmNDYsIDB4NzQ5N2FlNDUsIDB4ZmU1ZTQyNzYsIDB4OTc5NjAyYzYsCi0JMHg4MDdhZTE2YywgMHgwNTc3NDRlNSwgMHhmMTMyZGZjYywgMHg0YzIxNDZjNywgMHgxYWE1ZTZjZSwgMHg4NjhkYmJmMSwKLQkweGY2OGI4MjUwLCAweDQ5MTBlYmU3LCAweDJlODFmNTEwLCAweGVmYWI0N2JjLCAweGUwY2M5MWRjLCAweDA1NDg1ZDUwLAotCTB4NDdkYzFlNGMsIDB4OWFkN2VlY2EsIDB4M2UzMGFhOWMsIDB4ODA3ZGU3NGIsIDB4ZjkxYThmYmUsIDB4ZjUwZTVjODUsCi0JMHhhY2JjNzQ4NSwgMHgzMmFkZWZmZSwgMHg3OGQ0NjdjMywgMHhhNmM1OWY3NiwgMHhlMTkzYmZjOSwgMHg4MTU4YWVmZSwKLQkweGFmYjQzZGUwLCAweDc5MzVlYWE0LCAweGU4NjQ5ZmZhLCAweDlkOWRiZjc4LCAweDY1ZjliZmEwLCAweDViMDlmMzA5LAotCTB4NDA5OTBmODMsIDB4YzVmNzU3YWYsIDB4ODZkZDU0ZDMsIDB4ZmRmOGViNzYsIDB4ZTYyNmViYWEsIDB4ODA1Y2UwMDYsCi0JMHg0YTdmYzc0YSwgMHg2MTUyN2FmNSwgMHhiYzVmNzQ3ZCwgMHhhNzU3N2E4NCwgMHg0N2MyMmE2NywgMHhjOTdjODdjZSwKLQkweGVmMTNhNDMxLCAweDA2ODUyMTBkLCAweGFlNGJlNDE5LCAweDZmZDlhNzRlLCAweGVhNmYxYzJkLCAweGE4YTVlYTkzLAotCTB4NjljMjNjZWYsIDB4NjJmNzk1NTksIDB4MzllMDg5OGIsIDB4NjJiMzJiYTMsIDB4ZDMxNTJmNDEsIDB4MjVjZjNkNTQsCi0JMHg2Y2ZmMWMwMywgMHhlMWZhODM5OSwgMHg4ZDJkMzdkOSwgMHhmNTdjZjFlMSwgMHhiM2RhOWE3OSwgMHg3OTdmNDM0MSwKLQkweDAzMzNjYmExLCAweGRlMjIyZmRhLCAweDJlOGZhMGI1LCAweGU3MzUxNjZhLCAweDdkZjJjZmFlLCAweDE0NGFmMGJlLAotCTB4ZjVlOTg2MDksIDB4ODdkZTI3MGIsIDB4NWUxNjQ3ZTcsIDB4YWE0MTIxODksIDB4ZTdlNTlkMjcsIDB4M2NmMmNlN2QsCi0JMHg2NTRmN2Y5ZiwgMHhhZjgxYjJmMiwgMHg3NWVhNGI2NywgMHgwOGFlZmJlYSwgMHgwZmYzYjk3ZSwgMHg3ZTMxOTVjZiwKLQkweGY3MDBlZmY5LCAweDAwY2JhMTJhLCAweDhkZTM2ZTdjLCAweGZlM2NjMTdmLCAweDBmNGVkNGQzLCAweDNhZDM3Y2U2LAotCTB4NmMzMDQ4ZTMsIDB4NTc3NmJlOWMsIDB4N2U5ZWI4NGMsIDB4ZmYzODI4YmMsIDB4MTA1YWY1ZmUsIDB4ZmRhOWE3MGUsCi0JMHg0YzcwY2RmZiwgMHhiZmIxYzBkMSwgMHgxYzBkMmNmZiwgMHg4MzlmZjYwNywgMHg5OTVlOWZlMywgMHg4ZmZkMmRmYiwKLQkweDQ1N2ZhMjFlLCAweDdlZmVmZjMzLCAweDNkYjhlMTg3LCAweDhmOWVjYjQ3LCAweDY4ZTVmYmE2LCAweDU3ZjZmNTcwLAotCTB4YjBlZDVmMjEsIDB4MjcyZmVmMTEsIDB4NzhjNWFkNmQsIDB4MDQxN2U4OWUsIDB4M2YyZDk5Y2YsIDB4OTBjN2U1ZmMsCi0JMHhiNzdjYjY4NywgMHhmNDYzMDVjMSwgMHg1Y2YzNDNlYSwgMHg2MTg3Yzg4MywgMHg3ZGMzZjY0NCwgMHg2ZjczZWEzZSwKLQkweDI3YWUzNjZhLCAweDBhNDliZGYyLCAweDY2NmY5MGM4LCAweDU1ZTQ5NWNhLCAweDlkNjVlODBhLCAweDFmYjhkNTgxLAotCTB4NTQ5ZmM4NGMsIDB4NmZkYWI4M2YsIDB4OWVhODhhNmQsIDB4YWQ3ZGM1NjcsIDB4MTBkMGRiZGUsIDB4N2MwMGVkZWQsCi0JMHhlNmE1MTY3ZiwgMHg4MjM3ZjkxZCwgMHg2N2YyYWQxZiwgMHg4NWVlY2NhMiwgMHhhMjFkYTFiMywgMHhlMjI1YjFmYSwKLQkweDkxYTNiZjQ1LCAweGU1ZTQwODc4LCAweGRmNzg2NWU3LCAweDUzZmVmZTAwLCAweGFmYzAwNmNhLCAweGUzZDk4ZTJkLAotCTB4YjcyM2ZmNDUsIDB4M2I5ODM2ZjcsIDB4N2UzMGFlOWQsIDB4ZTk1NGZiZjcsIDB4ZDZmY2U0ZmEsIDB4ZmUzMzM5MDgsCi0JMHg0YzgyZTdmZCwgMHhlNjFlZmNjZSwgMHhmZTc2MjU1MSwgMHhmMjEzMmNiMiwgMHhiZGY4YmIwOCwgMHhlMzAxOGEzZCwKLQkweGYwYzc4NTA1LCAweGQ1MzJhZmJlLCAweDhjOGJhZjVlLCAweDQwZDlhNzVmLCAweGVlZmQ1NWZmLCAweDA0NGY5MDMxLAotCTB4OTY0NmMyM2EsIDB4Y2QxZTVkYmYsIDB4ODliZmU1Y2EsIDB4OTA3NTczYzMsIDB4ZjAwNzlmYzIsIDB4ZWM1ZDE1NmUsCi0JMHhlMTE5Mzc5ZSwgMHhhMWFmOTE3YSwgMHgxZDMxYjRkNywgMHhlMWNiZDllMCwgMHg3NWZkYjE3YSwgMHg2MmVlNTdiYywKLQkweDdmYzQ3MGRkLCAweGMxM2Y2YmY5LCAweDI1ZjZhMTdiLCAweDBlYTc3Y2YzLCAweDcyOWZjYTJiLCAweGVlMDhhYmEzLAotCTB4Y2M5N2RiMmQsIDB4Mjk1NmNjZjQsIDB4YTYxMDUzMTgsIDB4MmQ0YmFlNzcsIDB4YmU3YWJlNDYsIDB4ZjQwZWI4NmUsCi0JMHg3ZmFlMTU3MiwgMHhhMzYwZmNlNiwgMHg0MjkzZWZlYSwgMHgyZWJiZjA0NSwgMHhiZjgzMGJlNywgMHhkZmI3Zjk0NSwKLQkweGEyNjdiZjhjLCAweDExNjVmMDNiLCAweGQxYjc2ZmRlLCAweDE3ODJmNzg4LCAweDY1YjkxODFmLCAweGNhYWZhZDJlLAotCTB4YTU5ZTYxZDEsIDB4ZTcxOTgwZWUsIDB4ZGQ4MWExNzMsIDB4ODJkZjAzYWYsIDB4OTAzYWFlOWMsIDB4NTJjM2JmODIsCi0JMHgzY2MyMWQxZSwgMHg1NzI4YWFhOSwgMHhjYTQxYzQwZSwgMHhmNzg0ZGMwZiwgMHgzMGRhOWY3YSwgMHhlNWY4MWQzMiwKLQkweDFkMjU3OGM5LCAweDQwZGQzNWVmLCAweDdkZDc0ZTgxLCAweDdiMDQ2M2IyLCAweGNmMDEzZjVmLCAweDQ2Mzc1OWFkLAotCTB4NWZmMzA3N2IsIDB4ZjIyNDcyYTgsIDB4Yzk3ZDllZmUsIDB4MDA2ZDNkZjksIDB4ZDcyNjkxOWYsIDB4MmQzZTVhNmUsCi0JMHhlYjljNThiOCwgMHg4MmI2Njg3OCwgMHg5ZTE3MTY3MSwgMHg5Y2I3MmJkZiwgMHhkYmVmMWFmYiwgMHg3ZWU0ZmU2YSwKLQkweDQ4MWRlZjgyLCAweDE2MWRhYWI3LCAweDk3Mzk1ZTM5LCAweGExMGNmYjMzLCAweDM4N2JmMDc5LCAweGRjMzg2YmU1LAotCTB4YWI5ZjJjMGQsIDB4ODM5Zjk3NWMsIDB4OGRmNzBlNjUsIDB4ZTY1Y2Y3MTEsIDB4YWI3ODMxYTUsIDB4MjQyNzUzY2YsCi0JMHhjYThjMmZiYywgMHg2N2M4NzRmZiwgMHg4OGQ4NzUzZSwgMHhlMzZhNzY3NCwgMHhhYWFmM2M2OCwgMHg2MTRlNTc4ZSwKLQkweDc5N2RkMzIyLCAweDA1OGNhZWQyLCAweDYzNGI4ZWJjLCAweDBkN2NhYWZjLCAweGY3ZDUyZmIzLCAweDI1Y2RiYWU1LAotCTB4ODc1MGU3ODAsIDB4YmQyYmY5ODgsIDB4ZTIwNjI4NzIsIDB4YjUzYjZhMWMsIDB4NzY5ZWI3ZGMsIDB4NjVkNzdmMTEsCi0JMHhjNDExZjI1ZiwgMHgwMjI3YTUzNywgMHhjZDdiYTRmNCwgMHhmN2Q1ZjI4YSwgMHhlMDM3NzE5YSwgMHhmMTIxN2NmMywKLQkweGZlNWM4MzQ3LCAweGNlNGVmZDgwLCAweGVhMjMwZWQxLCAweDMyMWZiZGJkLCAweGZkYzA3NGJiLCAweDNhNTA5NjQ5LAotCTB4N2JlODFmZGMsIDB4NThmOTA1MmQsIDB4MTc2ODVhNmYsIDB4ZWNjZDkzZDMsIDB4YmQ3N2I1NWUsIDB4MmMzYzc4MTMsCi0JMHg5NjQ3ZGY4OSwgMHhlNWQ5ZmEwNCwgMHhmNDEwNzMwZSwgMHhmOGM0ZmEzMywgMHg3MWVjOWY4NiwgMHhkMWMzZmJlMiwKLQkweGY0MzZmYzA0LCAweDUzODU0MDE5LCAweGRmYzRlZmQ4LCAweGZjNGQyMDk1LCAweDdlZmM0ZWZiLCAweDA0NzdiYTc5LAotCTB4ZDllNWU1ZjAsIDB4N2MwYjdmYjQsIDB4MmVlZDhkZGYsIDB4ODA2Zjc5NjcsIDB4ZTY0YmZkMzIsIDB4YmY2MzI1ZTMsCi0JMHg3YzBjZGU2OSwgMHg2NGUxN2MyZiwgMHhjNGQwYTdiZiwgMHhkZWIxM2JlYiwgMHhjMDRlZjQ2NywgMHg0YWQxZmM3NSwKLQkweGU3NTkwNjVhLCAweDU1YmJkZWY1LCAweDc4ODcxNjljLCAweGUxNGRlNzU0LCAweDI0NWVmYThjLCAweDk4ZDI2YTVjLAotCTB4MjNjMmE0N2UsIDB4ZjBmYjJlOTIsIDB4MDNmMzJkZjksIDB4OTdjMDA5YmYsIDB4MzYzYzMzYjQsIDB4M2UzMDM0OGMsCi0JMHhmNTFhM2Y1MiwgMHhhNTFiNTI1YSwgMHhkNTVhMTNjOSwgMHhmNzYxY2VjMSwgMHg5ZTIyYjA2YywgMHhhN2VlZjU3YiwKLQkweGRlODUxZTQxLCAweGFmNzYxM2Q1LCAweGMwMDhkNTE1LCAweGYwNzEzMGJmLCAweGU3OGU3MmZkLCAweGIzZDY1NzA5LAotCTB4MmY3M2EyN2MsIDB4NmY5ZjRkOWMsIDB4Njc4YWYzODEsIDB4NTUxNWU3MzUsIDB4MjRlZDFmM2YsIDB4MTYyOGZjMDYsCi0JMHg5NjUzMTI5NywgMHgxMTZjZjRjNywgMHgzNzdlYzdlNywgMHhjMTVlYTM2NywgMHg2ZmYyMDdkZiwgMHg4NDdlODkxOCwKLQkweDAwZTUwNjUzLCAweGMzNTE4ZWZlLCAweDU1ZDAxZDE4LCAweDFlZjE4YmJkLCAweDlmNWIxMzdmLCAweDdhOGU1ZjdhLAotCTB4N2MyNDRkZWYsIDB4ZDliMmQzNWEsIDB4ZWYxMDkxZWYsIDB4ZjI4NzcwMDMsIDB4ZjAyNGEyNDksIDB4ZmZkZTFhNjAsCi0JMHhhMmZmMDE1NSwgMHhhNjE4YWZhMCwgMHgzZjkxOWI3MywgMHgxODVjYTBkNCwgMHhlMTk2Y2Y3OCwgMHhlODNmN2U1YiwKLQkweDNmYmNiNmZmLCAweGViM2FlMDlkLCAweDkwMThmZTVkLCAweGNjY2E5ZmFiLCAweDUzZDhhM2RlLCAweDZjOGJhZTUwLAotCTB4NjlhNzc4OWQsIDB4NGY2YmM4MTIsIDB4ZDYzYzVhNWIsIDB4NTRmYzNmMjMsIDB4OWYyYWY1NjAsIDB4YTA3ZWIwMWIsCi0JMHhkYTA3ZTgxNywgMHhhNzhlYmVkMSwgMHgzMjE5YmYzMSwgMHg4Y2E3YjgwOSwgMHg4ZjkwMGRmOCwgMHg5ZjI3Y2FhNiwKLQkweDNjZTBlOTIwLCAweDg5NGRiNzZkLCAweGFlZWM3YTAxLCAweGJkODNiNmNmLCAweDEyNTM2NjVjLCAweGMyZThjMjBhLAotCTB4NzNjMTA2ZjcsIDB4MzdkYzBhYTQsIDB4NWY3ZTAxM2MsIDB4ZmMxNjNkYzIsIDB4NWFlY2ZiNzUsIDB4N2NlNDQxN2YsCi0JMHgzNWQyOWE1ZSwgMHg3N2ZlYmMyZiwgMHhlZGZmNGM2OSwgMHg4YTI4ZmJlMiwgMHhkZjkwNjNjMywgMHgyZmJjNDI3OSwKLQkweDc3YWY3OGU2LCAweGZiNDE2Zjc5LCAweGUyZGRhMjMxLCAweDFlOWNiMWFkLCAweGJkMzdkZTIyLCAweGY3OThhZmZhLAotCTB4NGY3YjQzYjEsIDB4NzhmOGNmZGMsIDB4ZjgzNzFlOWYsIDB4MTllMDFiODUsIDB4MTViYWY5ODUsIDB4YWI5ZjE5OWIsCi0JMHhlNzM0YmI3OCwgMHhmM2M2NTY1MSwgMHgxZTVhNTNkNSwgMHg1OGUzZGZjNywgMHgwZTdhN2JiMCwgMHhmMTBiN2M2MSwKLQkweDgyZTNkMmEwLCAweGU4MGU3Nzc0LCAweGEyNmRhMTcxLCAweDYyYTJmYjBjLCAweGE5ZjM4OGFiLCAweGRiNGM5YTk3LAotCTB4NWIzM2ZiZTgsIDB4NTVkZmE4ZjUsIDB4NDk5Y2Y5ZjAsIDB4ZGUyMGM2ZjUsIDB4MjgxOTIyMjQsIDB4ZGU0OGNmZGMsCi0JMHhiNzVmZDQxOCwgMHg4OTFkZGZmMSwgMHhmNzZkMDc1OCwgMHgwODMwNTQ5ZSwgMHhjZjBjNGM3YywgMHg0MWVjOWYwOCwKLQkweDFkNWRlMGU4LCAweGZjMDE2OWUyLCAweGEzY2MxOTdlLCAweGU0YmY0MDQ1LCAweDAzZWYzNDk5LCAweDc2YTZlZTUwLAotCTB4ZGJmZmRlM2IsIDB4NTlmNzg5NTQsIDB4OGNmYmMyNDQsIDB4YjlmNDhiYzksIDB4ODU0N2FmOTgsIDB4MmEzOGU0NjcsCi0JMHg5ZTAxN2IzYywgMHhkZjFkMmZhMCwgMHhmN2NmNzI4ZSwgMHg0YjE0MDg5NCwgMHg0MjVmYjQ4ZSwgMHhjNzRhN2E3YiwKLQkweDgyNmY4ZmY0LCAweGRlYTk5YmY3LCAweGNkOWM4MGEyLCAweDQwMGZlZGZhLCAweGY4ODlkNWNlLCAweDFkNjUyNjdiLAotCTB4NDIyNDA5ZDksIDB4NThkZDgzNWUsIDB4MTg5Y2NlZjYsIDB4YWM5Yzk4NWQsIDB4N2UzMTE2NmYsIDB4NzY2YzNmNTIsCi0JMHg3ZjZjNDJjYywgMHhhZmEwNGVmMSwgMHhhMTJiOGE5MywgMHhlOGRkYWMyMCwgMHg4MTc4YmVmNCwgMHg5YmU1NWYwNiwKLQkweGUzMDMxYWZmLCAweDcxZWEzNDU0LCAweDdhNWUyYTVkLCAweGZmOTA5Y2U5LCAweGJmYTM0NTM2LCAweDg0MzUzN2E4LAotCTB4ZWE3OGFhZmQsIDB4ODNjMDZmYTMsIDB4ZGRiNDRmNGEsIDB4MWYzMmU5NWQsIDB4YThmYzhmYzcsIDB4ZTQ1YmQzM2IsCi0JMHgxNjRlODQxYSwgMHg4NWM3NDkzZCwgMHhmMTVhYjZmZSwgMHgxZDZiYzJmZSwgMHgxZjQ3ODU1NywgMHhjNmJlZjliZSwKLQkweDU3NzFlMDMyLCAweDc1YmZmYTI2LCAweDRjOTg0YWVmLCAweDY2NjliMjdkLCAweDcyZTNlYzNhLCAweGRmYzAyZjJhLAotCTB4M2U4NDJlNTAsIDB4M2IyNDdiYzYsIDB4NmIwZjc4OGMsIDB4MGYyNWU2ZjksIDB4MWZlNTc4YzAsIDB4ZGY1MDc1MWEsCi0JMHg1OGU2Nzg3ZCwgMHg1ZTA0NTc5YywgMHgwN2QyOWMyOSwgMHhjY2RlZjdhMywgMHgwYzJiYmE1MCwgMHhjMDlmNTQ3ZSwKLQkweDI3YWVhZGZkLCAweDBmMzhkZTZjLCAweDdkZTE0ZjZhLCAweDE0OTliZDI0LCAweDYwN2M2MTlmLCAweGJiZDMzYTc2LAotCTB4ODBkOTdiNjgsIDB4YzNlZWNkZjQsIDB4MWNhZjViZTksIDB4NjIzOTVlYjEsIDB4YTQxMWVmYmQsIDB4ZTJmMmUyNmYsCi0JMHg2NDdjMTY3YSwgMHgwNWZiYzFkNCwgMHgwMzkxZGM0ZiwgMHg4NmVlYjVmZSwgMHg2ZWFlYjhhOSwgMHhlYzJjN2JiYiwKLQkweGRhNzRlZWFmLCAweDcyZmMyMGZmLCAweDlkNzQxM2MxLCAweGNlYjBkZjc5LCAweDZiZTIzMzI2LCAweDQzZGE3NWM4LAotCTB4YWMzN2M4YmIsIDB4NTBlOWM3ZDMsIDB4NDk2OWU3NWQsIDB4MmJkZmMxODksIDB4ZjAxMjI4M2IsIDB4M2NkMmY4OTcsCi0JMHg2NTYyNmYxYiwgMHg5ZjI4OWRmYywgMHg2ZjgzZDE5ZSwgMHgzMWU2MzQ3MywgMHhmYmIzYjRmNiwgMHg0MDNlNTVjOSwKLQkweDdhNDZiYmM3LCAweDc0M2QyMWQwLCAweDI2NWIyYjE3LCAweDEwNmQ3ZDAyLCAweGVkOGJjODY1LCAweDViZjcxODZlLAotCTB4ZWVhZjFkZjgsIDB4N2EwY2EyOGQsIDB4ODMzMTc3NDIsIDB4MjgwN2U1MWYsIDB4M2RkM2JiYjcsIDB4YjBmOTYyNzcsCi0JMHhlYThmN2YxZSwgMHhkZjVmZDM1NCwgMHgxZGUxNzNjNywgMHhmYWUwODU3YSwgMHg0MmU3MWIzYywgMHhmODE3Y2U5OSwKLQkweDNkY2I4NTFhLCAweGUzZDU1ZjRjLCAweDllZWJlYmZhLCAweGZmN2E4M2FhLCAweGZjZjAxYmQ2LCAweGFjZjk0MGMzLAotCTB4YTM0NTczODUsIDB4NDQ4N2Q5YTgsIDB4ZGYzYzcwNTIsIDB4YWY3ODI5MTMsIDB4Y2E2NzBhODMsIDB4MWVjMDczNjEsCi0JMHhlNTAxZTE1MiwgMHhlMWZhNjMzOSwgMHhhMGU3ZTNlMiwgMHhmNzYwMmY0MSwgMHgwNjdlNzEyMCwgMHg3MjYyYzlmMCwKLQkweDAwODFjZTAyLCAweDI4ZjM4MzFmLCAweDQ4YWJjOTQzLCAweDQ3YTkxM2ZlLCAweGFmOGZiY2ZkLCAweDY1NzFmOTY4LAotCTB4M2UxOGVmYzQsIDB4MTI1ZTUxMTgsIDB4NDY5NjM3YzEsIDB4ZDQ0NTU3ZDQsIDB4ZTc3Y2Y5NTMsIDB4ZTRlN2ZlNjAsCi0JMHgyYjVmMmQwYywgMHhmZDU0NzBlMywgMHgwNDFiYmRhMCwgMHgyNGNiNDNiNCwgMHhjZmY2MDBjNSwgMHg3Yzk4NTM0YiwKLQkweGU5ODg5NzJlLCAweGVjOTdkYzE2LCAweDQ0OTk0YjdjLCAweGYwMDU4ZDZhLCAweGI3MDg2NWRlLCAweGI1N2Y2ODkzLAotCTB4NDcyZDNiNDYsIDB4ZGI0NDNlMzEsIDB4Y2FjMjE4OTUsIDB4ZTc1NWJmMmEsIDB4ODc4NzAxZjMsIDB4N2VjZWZjZmEsCi0JMHhlMzIxZDI4MSwgMHg4ZmE0MWYxNSwgMHgyOGFmMTgxZiwgMHg3NTdlYjMxMCwgMHg4M2FiZWMwMiwgMHhiZTk1ZGEyMiwKLQkweDIxZmM5OWI3LCAweGYyZGE1ZDVmLCAweDk3ZWUwM2EyLCAweDMwYmNjNmNkLCAweDcwOTFmZDc1LCAweDE0YmI2ZGVjLAotCTB4ZDdlYmJmMDMsIDB4ZTc4MGRjNzMsIDB4ZTNkYWNiOTMsIDB4YjJmZWQxOGEsIDB4N2I4NTA2ODcsIDB4ZGE5ZjVmMGYsCi0JMHgxNWQ0OGY1ZiwgMHg2ZjVjMmIzMywgMHhlMTMxNWQyNiwgMHhkNjVhYTNiZiwgMHhkODI1Njk3NiwgMHg3ZTdlMTRiMywKLQkweDlmOGY4YzMxLCAweDA2MmY4OGVhLCAweGQ3ZmNiMmJiLCAweDdlNzBjNWM5LCAweGRhYTE5NmQ2LCAweDFhY2ZjYWZkLAotCTB4MzQxY2RmNjEsIDB4ZTdhMjNmYTIsIDB4ZjgzYWI5ZWQsIDB4MGFlZGU3YmUsIDB4Zjc4ZTVjZmUsIDB4M2U5Y2Y1YjgsCi0JMHhjN2UzMGU5NSwgMHhmZWU3YjRlOCwgMHg1YjZmZGMwZCwgMHhkNzY0ZmJhZSwgMHgwZmZmYzBjZCwgMHgwOWFlNjYyNSwKLQkweGViOTczN2YzLCAweDdlMWVkMDBhLCAweDA3OWExZjUxLCAweDdlN2FhNmYzLCAweGFhNTdlNDFkLCAweDE0MzJkOGZkLAotCTB4ZjA3MWFmOTYsIDB4MGZlMDJlZWMsIDB4MTVhNjM2YTcsIDB4MzllOTViMDAsIDB4ZGZlZDAyMzgsIDB4ZTVjNzBmOWUsCi0JMHgyNDdmNjhjOCwgMHhiYzJmODBiOSwgMHgzMzk2NTdhOCwgMHhkYWVhYzU3YiwgMHgxZmRmZDk5ZCwgMHhjNjcxMDM4YywKLQkweDhhMTM4MzllLCAweGYzZDA1ZmMwLCAweDJkMmY5YjIxLCAweGI2ODBmZmEzLCAweGE1MWU0M2YzLCAweDRlOGM2ZmRhLAotCTB4ZGQ3OTA0ZDksIDB4YjQ3YWQ3ZTQsIDB4M2FmYTFlMjMsIDB4YjllZTExM2IsIDB4MWUwYzMxODgsIDB4NDFiYjAxOWYsCi0JMHgxYWJjZDc5YiwgMHhhYmRlYWRlNywgMHgyYzU3NjkxZCwgMHg0Zjk2MWUyMCwgMHhhOTdmNjExYiwgMHhkYTQ3NzNmNywKLQkweDY5YTQxNTg5LCAweGQwMzA5NzZkLCAweGI4OGFhNDVlLCAweGZiMDA5ZmM5LCAweDQ1NmJmZDVhLCAweGVmNjRiZjc5LAotCTB4YmVmNmEzNTUsIDB4OWZkZjNmNjIsIDB4NjVjN2U0MjYsIDB4YTAzNjNmNzQsIDB4ZmNjMDI5YmYsIDB4YTBlMjc1N2IsCi0JMHg2NWVmZDc3MSwgMHg5ZTNhZTI2NCwgMHhiY2RiZmU4ZSwgMHg5ZWJjMzBhZSwgMHg0OWM5MTFkNCwgMHg0MGQyN2FlMSwKLQkweGMxODJjZTRjLCAweGU5Y2JjNmVjLCAweGI0MGQ5ZjYwLCAweDFmYTJjZjE3LCAweGJlZmMzY2EzLCAweDZlZDAzMjMwLAotCTB4YzAxYzU5M2MsIDB4MGQ5M2JkYmMsIDB4YzA5ZWZlMjIsIDB4OTE4ZGRhZjUsIDB4OTdiZmFiZGYsIDB4MmMyMGM5ZTAsCi0JMHg2NzcyMTkxZiwgMHgzNzY0ZGZlZCwgMHhjMmFiZTc2YiwgMHhjNzdmY2NkMywgMHhlMmZkYjIyMiwgMHhjYTM3MTYwYywKLQkweDZlMjQ1YWZkLCAweDdhMWRmN2Q4LCAweGRkMTNiZjNjLCAweDFmOTZjNWYyLCAweGViYjY3ZDAwLCAweGUzMDU0Y2U1LAotCTB4MGI3YmY4MmIsIDB4Zjk4OGEwZTQsIDB4YTdlZGJkN2YsIDB4MzkwNDFlNjIsIDB4MWUxYzcwNzMsIDB4ZDc5M2ViMjMsCi0JMHg5MzhjNDUwNywgMHg0YTVkYjRmNCwgMHhlZDBhNzg4MCwgMHhiZWM2ZTMwNywgMHg0MDVjYTc4ZSwgMHhlM2NkNDNiZiwKLQkweGZhZjEwY2QxLCAweDA4ZWVmOWZjLCAweDFmOGYyOGJmLCAweGM5OWNiNGY3LCAweGY5NGVmZTAxLCAweGIwMTlhM2UwLAotCTB4ZTJiZTczM2YsIDB4MTU3NTZjZjcsIDB4ZjlkMWZkMDEsIDB4MWJkZWZlYTEsIDB4YTVmYThjYjgsIDB4ZjQxYzVkYTksCi0JMHgxOWY1YWFmZSwgMHhjZmUzZWI4NiwgMHg4YmYyMDMyNSwgMHhmN2M0NjdkNiwgMHgwOTVhYjNjZiwgMHg3ZWNlNDAxOSwKLQkweGI0YzUxZTViLCAweGMzNTcwYjgzLCAweDRkYmQzM2ZkLCAweGI3N2YwYjgyLCAweGI5NDQ1ZGI5LCAweDNhM2RhMGI1LAotCTB4NGNiYzUwYTAsIDB4NzJjMTYxMWIsIDB4ZWU3NjRlZjksIDB4ZjkzODg2NjMsIDB4MmU2ZmYwN2QsIDB4N2ZhMjIwZGUsCi0JMHhmMmNiNDhmMywgMHg2Nzk4ZjVmNywgMHhlNTgzMjdhMSwgMHg1ZGU3ZjQ2MSwgMHhjNjE0N2MzYywgMHhkYzE0ZmM1OSwKLQkweGM0ZmY0MzEyLCAweDZmZDAwZGZiLCAweDgxMDJkM2U1LCAweGNjODg0YTlmLCAweDc3OTgxOGJmLCAweDE0NGYzNWQxLAotCTB4YzA1ZGU2MDcsIDB4NjkwN2U1ZjksIDB4NDY2ZDE1YmYsIDB4M2MwZmFmZjQsIDB4MWJjODQwZWYsIDB4MjFmN2ZkMDksCi0JMHhiYzZmMGVlNSwgMHg5ZjZkMjhlZiwgMHhmOTYwNjJkYiwgMHgzZTM1NjY3ZiwgMHgwZWY2ODVkNSwgMHhkMGYzYjIwOSwKLQkweGE3NGYwNzNkLCAweDg3N2QxZTAzLCAweGIxZmQwN2ZlLCAweGQyMGZlZDQzLCAweDBlM2NmMmNlLCAweDU3ZGZiMDY2LAotCTB4ZDJmYWZkY2MsIDB4ZGE0MTllOWQsIDB4OGIzY2YyMzcsIDB4MzI3ZjdhYmQsIDB4NWI0N2IxZTgsIDB4ZTgzZjIzMmUsCi0JMHg2Y2ZjYzgzZCwgMHhmYzRmZjY0MywgMHgwYWVmZTY2NiwgMHg1NzBmZDE5YSwgMHgwZWRmMmFkOCwgMHg4M2VhODRmYiwKLQkweGVlZGY1ZWIwLCAweGQzNzdiM2I1LCAweGJkNTVmOWIyLCAweDZmOTVhYTAyLCAweDBiZjcwNWI4LCAweGRmZjA4ZmVjLAotCTB4YzlmNzUyMDMsIDB4NTNhNzFlNWUsIDB4NzkxYTQ3ZjMsIDB4M2Y5YThkYmUsIDB4NDQ5M2U2YTIsIDB4MjdjZDQzY2UsCi0JMHg3YzYxNGM2OSwgMHhmM2MzMmYyMywgMHg5NDViZDAwMSwgMHhlNzdlY2ZjZSwgMHg2OGNmMjIzMywgMHhjOGExYmNhOCwKLQkweDcxOTEwNzczLCAweDhhZTI0MTgyLCAweDQ2YzBhZjJjLCAweGM2YTA2ZTMwLCAweGJlNTQwZDE3LCAweDMxZDY0N2MzLAotCTB4ZDA2NTM3YjMsIDB4MjI3YmZkN2EsIDB4YzU0MzRmZGEsIDB4MWM3NWQ1MWIsIDB4Nzk4NjUxMzksIDB4OGIyZjU1NTYsCi0JMHhiMGJmYWZlOCwgMHhiY2UzY2Y1ZiwgMHhlOTQzOGMyMSwgMHhjODYxN2M0ZiwgMHg3ZWNlN2U0NCwgMHhjYjQ3Yzk1ZiwKLQkweDU5MzdkZWYwLCAweGQyOGVmY2QyLCAweGU3MWUxYzU3LCAweGQ5ZjA3MjMzLCAweDk3OGZiOTIzLCAweGU0N2I3ZWQyLAotCTB4ZjVlODAzMzIsIDB4NGEwYjEzZmEsIDB4OWRlOGRlNDAsIDB4ZDc5ODA2NjUsIDB4YTZjNTEzOTEsIDB4NGQ5YmMwNGMsCi0JMHhiNmIzN2RjMiwgMHg1M2I3MWQ1ZCwgMHgzZmZmZmU4NiwgMHgxZjAxMmE4MCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYjVmZjAwLCAweDU1OTQ1YzBiLCAweGU3NzlmOGRhLCAweDM4MGMyYjlkLCAweGE1MTE3MjgwLAotCTB4MzgwYTBlZTEsIDB4ZGI5NTkwMmEsIDB4OTc4NDI2OGUsIDB4NGQzMmQ0NWEsIDB4ZTU0NTA3NTcsIDB4ZGI2OTgwMzIsCi0JMHhjYmJhZWVlNywgMHg1YWNkNGQ3OCwgMHhiNWFjYThkZCwgMHhiY2MwYzFiZSwgMHgxYTE2M2I2MCwgMHgyNWEzYjYxNCwKLQkweGI2OGI5NTk5LCAweDNmOWI1Yjk5LCAweDAyODZmMzI4LCAweGZmYjlmNTYyLCAweGNmZmViZjZkLCAweDNhZjM5Y2YzLAotCTB4N2U5ODhlZjMsIDB4YmY2N2RmYmIsIDB4ZGU3Mzg3N2UsIDB4NzNjZTdkNzMsIDB4OTMzOWNmM2YsIDB4MTk2ZTM5YTYsCi0JMHg5ZWIxOWZkMywgMHhjYWRiMmQxYywgMHhjODdiM2IxOCwgMHg2MzBkODFiYywgMHhmN2ZjMDdlYywgMHhhY2YyYzY1MywKLQkweDE4MDM2MzEyLCAweDMxOWFiYWZiLCAweDNlNTdkZWFmLCAweDdjODFmYjNmLCAweDAyZDhjMTk2LCAweDMxNjM1OGU2LAotCTB4MzMyMzVhNDMsIDB4YmZkMTkxYWYsIDB4MWQxZmIwMWYsIDB4ZjI4MWVlOWIsIDB4OTg4MzU3ZjksIDB4NWRhZmMyMzcsCi0JMHhiNjNkMTRmNCwgMHg5NDM1N2Y5YiwgMHgzZDQyNDc3OSwgMHgzNjc3YWYxMywgMHg0ZjI4NTIwNCwgMHgxODcyZjFjMCwKLQkweDlkZTkxMmNiLCAweDZlZGYyZDIyLCAweGViZjY5Y2IyLCAweGE2MTNjMmJmLCAweGM1MzU1N2NhLCAweGY5YTc0ZTU4LAotCTB4NDdmOGU1ZjIsIDB4NjM2ZmZjMGMsIDB4OThjOTE2NDYsIDB4OTc2MjdmOTMsIDB4ZGI3NGZjNWUsIDB4OTEzZjQ4NWMsCi0JMHg1ODU2MDkxYywgMHg5ZWQ0ODU1NywgMHhiMTBjMGY3ZiwgMHhlZjU3YmEyNiwgMHgyZDNhZTMzMCwgMHg2M2YyOWJjYywKLQkweDVlNjA4Y2ViLCAweGQ1YWU3MWJmLCAweGY1YTQ2YWJiLCAweDI1NjZlMGY4LCAweDZiZDZmOWI4LCAweDVkN2MzODI2LAotCTB4MzgxMzdkMWQsIDB4ZThlMGFhYzYsIDB4MDU0MTNmZWIsIDB4NGZmYmViYzcsIDB4YWViZmYxYTEsIDB4ZmY0OWJiNGUsCi0JMHhiZmQwNmY0MywgMHg1ZjdmMzU1NSwgMHhlZTM0NDliZiwgMHgwYjBkMGNhYSwgMHhhNGY0ODZjZCwgMHg1ZTAwY2RjMSwKLQkweGNiMjM1NTAwLCAweDFkODBjYzY1LCAweDc5NTY1NGMxLCAweDY2YWQxOWM3LCAweDc1MjU3YjVmLCAweDZjYjE3MWIxLAotCTB4OTQ2ZjdjMTQsIDB4ZmRmMGRjMGIsIDB4MjVhZTY1OTIsIDB4OTg1ZDUyMTksIDB4YTFkYmIxODYsIDB4NzA1ZWNlYmQsCi0JMHgwODZiZjQxNywgMHg0MTcwOGYwYiwgMHg4OWFjMTMzZiwgMHhjMmVmYWViNCwgMHgyODMwMTUxNiwgMHgwOGYwNmVmZiwKLQkweDgzOGYxNWQ5LCAweGZjYzQyYTJjLCAweGYyYzU0MWFhLCAweGUzN2YxYzdhLCAweGI1ZjcwYzczLCAweDBmYzdjOGNhLAotCTB4ZmMzMzJmZDksIDB4YmEzMGVlY2UsIDB4Nzc3ZWExOTMsIDB4Nzk5NmM3Y2IsIDB4MDZkZmNlMzAsIDB4M2VlMGU2MzksCi0JMHhjOTA5ZjMyYiwgMHgzZWUxOTc3OSwgMHg2ZGM3MjZiMywgMHgzZDhjMjE4NSwgMHgwZGFjNjE2ZSwgMHg1MGY2ZGFmMywKLQkweDcyNWVhZjVjLCAweDQwNWRlN2ZjLCAweDA2YWZlYzBmLCAweDc3YzkwZjU2LCAweDI1YWE0NzI2LCAweGNhYmVkN2MzLAotCTB4MDFmOWE3YWEsIDB4NjhiMmM0MzUsIDB4YTUwZDVmNWMsIDB4MDg1NzRkNTUsIDB4ODkxNmQ2Y2UsIDB4YWY3Y2E1ZDYsCi0JMHg3NzA0M2Q2MiwgMHg4ODUxZTU4NiwgMHg3ZDJiNWE5MywgMHgxNmE0NzI2ZiwgMHg3MWU2ZmE2NiwgMHhjY2Y3ZmZhZCwKLQkweDlmZDAwZDJlLCAweDQzM2ZmZjYxLCAweGRhZGQ5ZTExLCAweDkwNmRmYjllLCAweDYwZTQ1YTdhLCAweDExYWVmODdmLAotCTB4ZjA3NjM5NzQsIDB4NTBlZDU5MzcsIDB4ZmFlZDg5NWUsIDB4ZGJkOGY2MzEsIDB4ZjMwY2E5ZTUsIDB4OWMyYzllODYsCi0JMHhmZmI3YzFmNywgMHhlOTBlZDU5MSwgMHg2ZmNiZmI3NywgMHg1MGVkZjJjMywgMHg2ZWY5MGFkZiwgMHhjZGE1NGY3ZCwKLQkweDY2MjRiZmFmLCAweGY5NDY2OTcxLCAweDBmYjE2YWQyLCAweGY3ZGJlNTgxLCAweGYzODgxY2FmLCAweGRjYzFkMDY4LAotCTB4YTU5YzYxYzMsIDB4NDc0ZjIzNjUsIDB4OWZkODNhMjAsIDB4YjViODQ3OGUsIDB4ZWMzZDU4ZTgsIDB4NTRkMzU3NDcsCi0JMHhlNTRhZjkxOSwgMHg0MzA1OGMyNywgMHhmNjE5YmIzZSwgMHg4M2Q5ZjIwNywgMHhmYjAzNWI5OSwgMHg5M2ZmYjk1MywKLQkweDk1NWZiOGU5LCAweDA2OGI3YTM5LCAweGJjMzQxMjk2LCAweGJlMDJiZGNkLCAweDJkMThlNTA3LCAweDJjNTNlMjEyLAotCTB4ZWNjZjVmMWYsIDB4ZmI2MjI1OGMsIDB4YjdkYzA4YmMsIDB4MmEzMTA2MzcsIDB4NDFmOTk3ZmYsIDB4NmJkYmM3MWQsCi0JMHhiYzdiYzBmYywgMHhhYmM2MDFiMiwgMHg0N2VmZGI5MCwgMHhhMTdjMDAzZSwgMHhmMmE1ZjExZSwgMHg2NjhlNmZhMywKLQkweDRmNDZiMTU4LCAweDc4Y2ZlZTI0LCAweGQwZjgxNzFjLCAweDM2OWZhMmM3LCAweGFjMGVlMTZiLCAweGZiZTBmZGQ3LAotCTB4MmRlOGIwNmIsIDB4ZjVjMGUxYzksIDB4YjY4YzYyYjgsIDB4NjhjZmM0N2EsIDB4YmYxNGMyNzcsIDB4YWFjZDdkN2QsCi0JMHg0ZmYwZjZhMSwgMHgyMjFkYmM0MiwgMHhhMDdiYmFlNiwgMHgyMjU4NzE2NywgMHg0NzBlZTVmZSwgMHgzMGQyYTg3YywKLQkweDM2NDNmMjA3LCAweDA3N2E4MDA5LCAweGU2NjE2NWUyLCAweGU5ZWJjYzk0LCAweGQ0MTViMThhLCAweDdiNTZkYmRmLAotCTB4NTdjNzM1YjMsIDB4MzM2OTkzZmYsIDB4ZDA3ZDFkMzMsIDB4YzEyYTYyMjEsIDB4MDQ3OWVmNTMsIDB4NjE1M2Q5ZTcsCi0JMHg3ZDg1NmRiNiwgMHg4MjdlMGJmOCwgMHgzMzRmMmY3NiwgMHg1ODUwZTU3OCwgMHg1NmJjY2U4ZiwgMHgxOTNhM2MwMiwKLQkweDAwNzViYjNjLCAweGQ5YjU3ZmFjLCAweDczYWUxZWYxLCAweGQ3ZTM0M2ZhLCAweDE4M2E1ZTYwLCAweDc4OGM1ZDYxLAotCTB4OGI5ZWQ0NTksIDB4NzI2ZDEyZmIsIDB4M2JlMzgwN2MsIDB4MjJkYjhlOGQsIDB4MDY5Nzg5NjEsIDB4YzFmYjUyM2IsCi0JMHgwOGMyYjM1NiwgMHg5ODU2NmYwZSwgMHhmY2U3ZDg1OSwgMHg3OTdjN2NmOSwgMHg1NGI4NDFhNiwgMHgzNmY0YjgwOCwKLQkweDdjNDNmNjI2LCAweDVmYWQ3YWVkLCAweDc0Zjk4MzE2LCAweGNhMDk1ODY5LCAweGRmMzEyZTg3LCAweDk4OGYyMDczLAotCTB4NzEyZTlmMWYsIDB4NDExN2QzMWYsIDB4NjNiYWQyZmQsIDB4ZWI3ZWI5ZmEsIDB4ZWVjYzYwYWYsIDB4ZmM3ZWI4YzksCi0JMHgzMDFmYjg4YiwgMHhmZmQ3ODVmZSwgMHhhMWFmZGRmOCwgMHhmNzZmY2VhYiwgMHhjMDA0YjBhNSwgMHhhZDIyZTkxMywKLQkweGM3MWRiYmViLCAweDlkZjU4YjY2LCAweGQ2M2ZmNWM1LCAweDg3YTcxM2RiLCAweDA3M2QzOTc1LCAweDg4N2Y5Y2Y0LAotCTB4NTI3YjY5ZjUsIDB4NWQ3ZDZjN2UsIDB4YzI3Y2I2OWEsIDB4YTU5MjdkOGIsIDB4YWVkN2RlM2UsIDB4N2U1OGYxYTIsCi0JMHg0OTdiZTAyYywgMHg5OTA4ZDg1ZCwgMHhlMjBhNTllMywgMHgwNjFiYTk1OSwgMHhhNTViYzNmMSwgMHg4YjNlMDUxZiwKLQkweDVkZWJiZjA1LCAweDE0MTNlMDJhLCAweDVhZjI4NTlhLCAweGZlMzI4ZjgxLCAweGNjZjgwMGE5LCAweGUxZTRmNmQ2LAotCTB4MGIyZjY2M2MsIDB4ZWE3ZTcwZDMsIDB4YmU1MWZjMjYsIDB4MWVhYTU5Y2YsIDB4MzBlMjI1NzcsIDB4MWJmNWNmY2MsCi0JMHg2NmYzNGRjOSwgMHgyYjg2ZmYzYywgMHhmMjFlYmRjYywgMHhiZjk1Y2QwNiwgMHgyMWJkNDU0YywgMHhiZDQzNjM1MywKLQkweGYwMTA0YjYxLCAweGZkOGMxMTgwLCAweDhiY2ZlYzU5LCAweGUxOGMxZmMwLCAweGNiMTZiZTU0LCAweGZiNzg4M2EzLAotCTB4ZWUzNTY3ZTgsIDB4NzBiZWQwOTUsIDB4ZTFlMTMzNmMsIDB4OWI2Njk1Y2IsIDB4MzExNTYzMGMsIDB4ODUzMGFjNjAsCi0JMHg0N2FlY2M3OSwgMHhlNjNkN2ZiOCwgMHg2MWRiZmIxZiwgMHgxZGUyODM5ZCwgMHhmZWIwZjE1MSwgMHhiODlhMTEzOSwKLQkweDFjM2NkMGJmLCAweDljMDMyNzQzLCAweGM3MGU2OGQ4LCAweGMyMDdiODQwLCAweGU4YjMwYTdmLCAweDM2YzY1ZmIwLAotCTB4YTdlZTkwNjgsIDB4ZTY1MmY4NTgsIDB4YTc4ZTljNGIsIDB4YzcwZWJiMzIsIDB4YTgzOTkwN2IsIDB4YmQyZWYxZGUsCi0JMHgxYzFkMDE5ZCwgMHgzMDYwZjQwNywgMHg4Yjk4ODdlZiwgMHgzNzMwNjdjYSwgMHg5Nzk5MzNhNSwgMHhiNTljZmZlYSwKLQkweDAzYTE1ZTUzLCAweGZkMzlmZmMwLCAweDhkOWZmZTM5LCAweGIyNmYwOTkyLCAweGM3YmUwMWUyLCAweDJmMDZiMzgyLAotCTB4N2U0Yzc1ODUsIDB4NjE5OTM1MmUsIDB4MDgwMzM1OWYsIDB4Zjc5YjM3M2UsIDB4YjFjMzg5NjQsIDB4MWRiOGVhY2QsCi0JMHhmMDViZGZkNywgMHhkMDM1NGJlZCwgMHgyNWU4YzY4ZiwgMHgyN2M2YmJmYywgMHg3ODEwMGRjNiwgMHhhMjdjZTNmOCwKLQkweDA5ZTM5N2FkLCAweDA2Mzk4MzkwLCAweGQ4YWY3MGUwLCAweGU1ZWQ3YmQyLCAweDhjYmQ3MDkzLCAweGZlOWU0ODU5LAotCTB4OWU1ZmQwNGMsIDB4YjNmZDY2NmMsIDB4NmRkOTdjNzEsIDB4YTVkOGI5YzAsIDB4YmU0MjQ2OGYsIDB4ZDZjYzhjNjAsCi0JMHg1YmRlM2NjMywgMHhiZWRlNDhjZSwgMHgxMzc2NWMzNywgMHg4NjlmMjBhZSwgMHg3ZThiZjdmNiwgMHhiYTk5OGQyNywKLQkweGNiZDQxZmFhLCAweGRiM2RiZWZmLCAweDIwYzE2OTBiLCAweDdlZWQ5N2RkLCAweDdmYmUzNWY4LCAweDQ4MzBhYWVkLAotCTB4Y2JhOTI0MjcsIDB4MmQzNmIyMjcsIDB4MDY1Mjc1YzIsIDB4ZjNmMWZiOTQsIDB4ZjVkNWIzZmIsIDB4ZTE5OGUwMGUsCi0JMHgyMzI4ZGI5OCwgMHgwZjhjY2RmZCwgMHgxODI2N2ZlOSwgMHg5MGQ4NDNiMiwgMHhiZDFmNjQxZiwgMHg5ZGU5ZWIyOCwKLQkweDBkZGY0NTc0LCAweGVmMTBkOGYzLCAweGIyZmI4Yjk4LCAweDY3YWZiZWY4LCAweDJkMzNiZDIzLCAweGNhMjQ2OGZiLAotCTB4NWQ3Y2EzYTksIDB4MDBkZDAyNWYsIDB4ZDVkM2IyMDYsIDB4N2U4MGQxMjAsIDB4ODgzZTgwY2UsIDB4YjdhMDczZjksCi0JMHhkYWExN2E2MSwgMHhkMDQ1ZTk0YSwgMHg1NzdiZjBiMywgMHg5ZWYyOGRiNSwgMHhlYzcyYzJmOCwgMHhjYmRhZWU3NywKLQkweDRlMDY0NzVhLCAweDZkZjA4NTJiLCAweDM2YjdjMDg5LCAweDhjMTM1NzhkLCAweGIyNTViNGY0LCAweDYyNWM3Y2ExLAotCTB4MGMxYjFiNmEsIDB4MWY1MjViZjAsIDB4NjcxZDgzNmYsIDB4NTY5ZTRkNjUsIDB4YjdiMTdlOWMsIDB4NzViNzFmMzAsCi0JMHhhZDQ1ZTFjMSwgMHgwNTVjNTY5OCwgMHg2Y2JkMDc4YywgMHgxZmY4NWNhZSwgMHg3ZjVkMDc4OCwgMHg3ZGRhNzJmOSwKLQkweDdhYjY3ZTUwLCAweGJlN2Y4ZDE0LCAweDc3ZTM0ZWRhLCAweGZhNTAxNzU2LCAweDM3ZTNiYzdlLCAweDRiN2IwZjM4LAotCTB4MTU4NDZiNDcsIDB4ZTEzMmU1NzcsIDB4MWQwZDdkY2IsIDB4ZTdjODU4ZGEsIDB4ZDIzYjI1ZDksIDB4ZTY3NmRkZTEsCi0JMHg2ZDNkMDM3NiwgMHhiNWI5NzFkNiwgMHhkMjE2ZTQxOSwgMHgyOWNjOThlNSwgMHg1MGNhM2UyZiwgMHhjNzFlMzhhZSwKLQkweDUwOWMxZWYxLCAweGRjZmQ4NzlhLCAweDhiNDhhYTNmLCAweDllZmExZWY1LCAweDFmNzg4OGIxLCAweDhmMGNkZGRlLAotCTB4YmY1ZjAwNTksIDB4Nzg0NGI2ZjQsIDB4ZmQ2MzQ5NzgsIDB4YWU1OWVhMTksIDB4MGJlOTMyMjMsIDB4MmE5ODVhYmQsCi0JMHg3MjdiZGZmNCwgMHg3YjA1ZGI4OCwgMHg2MjZmNzhiYiwgMHhjNWI3ZjIxNCwgMHhiODU0NmIzYSwgMHgwY2ViNWYxZiwKLQkweGJiOWQ2YmUwLCAweDk3ZjY4ZjZmLCAweDllZTE5ZDc3LCAweGJlNDMzZWVmLCAweDRiZTcwNWY0LCAweDVlNjczM2IwLAotCTB4OGU2NWJlNDAsIDB4NzZmZWUxYjYsIDB4ZjQwNGJiMDksIDB4Y2Y5NDYwYzksIDB4NDc0MTdhOTUsIDB4ZGYzMDU3YzAsCi0JMHgxNGU2YzQxOSwgMHhkNWY3M2U0MiwgMHgxNzQ4YjFkOCwgMHg3Y2FhMWUzOCwgMHg3OTQ5ZGYwYSwgMHg1Zjg0YjlmNSwKLQkweDZkZTM3ZDViLCAweGVjZmZjY2Y3LCAweDcyNWZjODA1LCAweDkwM2E1YzZiLCAweGE3OTg5NzUzLCAweDU3NWM0ZGViLAotCTB4ZmE4NmQ5OWQsIDB4MGRhNDlhNjMsIDB4ZWE3ODRhNWEsIDB4OTM0YzNhMjYsIDB4YzBhNWRhYWMsIDB4ZmFiYzc2NTcsCi0JMHgzMDNmYzBlMiwgMHgxYjE4MWJkNCwgMHhkYWRmZGYwNSwgMHhlNzdjNGMxNCwgMHhkNGVkOWQyZCwgMHgyMmZmNmM1MiwKLQkweDUzY2FmZjZmLCAweDA5YjJmY2JmLCAweDQ2MmIyN2QzLCAweDNlZjExMmZjLCAweDVhZTA5YzNlLCAweDIxZDJmYmZjLAotCTB4NjM0MzY3ODgsIDB4YmZhMDFiNjEsIDB4NWU0ODZmNWQsIDB4OTk2MzE2NTMsIDB4YzQ1NjA3MzUsIDB4NmQ4NjdjYzAsCi0JMHg4NDBjZDBlOSwgMHhiNDlkNzg3NCwgMHgyMWExZDMxMiwgMHhmODY1ODcwNSwgMHg5NWJjNWVmZSwgMHgyMWIyMzFlNiwKLQkweDcyNDU4ZTVlLCAweGVjZmVlODE5LCAweGE4N2ZhNGE3LCAweDlhOGM5MmY1LCAweDMyMDc2M2NiLCAweDQ0MzI3ZTlmLAotCTB4N2RjMDVjZjIsIDB4NjI3MjE5NTksIDB4YjYzZmM5MDQsIDB4ZGJkOWZhOTEsIDB4OTllM2Y1MzIsIDB4N2NkMDBlYjQsCi0JMHg3YTQ1ZGU3MCwgMHhiNzBiYzkxYiwgMHhlY2YxMTZhYiwgMHg0NmNkMjM5MiwgMHhlYmExN2FmYSwgMHg0YmRmZGM3OSwKLQkweGNhMWI0ODhlLCAweDU3MWE3ZDhmLCAweGZmNTg5ZGU4LCAweGY5ZDY5Njk0LCAweDUwYjFkZDQ2LCAweDM1ZmJlNDFkLAotCTB4YmUwOTk4ZWEsIDB4MjFlZjBjNTcsIDB4ZDgzMTU5YjksIDB4YzFkYzcwY2EsIDB4ODA1YmRkMmYsIDB4ZGM2Y2E5ZjAsCi0JMHgzOGZkNGI1YiwgMHhlYTA5MzY4ZCwgMHhkMmJkZWM5NSwgMHg4ZDk0NzI4YSwgMHhjNDY0YjY2NywgMHg3ZjllNDZhZiwKLQkweDg2ZGQ5YzYyLCAweGY2YTRiNTcyLCAweDJiNmY5ZTViLCAweDU4MjE3Y2E0LCAweDNmYWM1YTEzLCAweGNmNjllYjhmLAotCTB4ZGFjNTM5MDksIDB4MTE3Zjg4YjMsIDB4ZmI3ZDVhY2EsIDB4YzY3YzA0ZjUsIDB4NWRlMzliZWYsIDB4M2VjYzhiMzEsCi0JMHhlOTcyMDZmOSwgMHg4YzU5ZDIwMiwgMHgxYjZmYjc5ZSwgMHhlMDhlMzMzYiwgMHg0OTcyOGI3MiwgMHgzZDM5ZTdlOSwKLQkweDRlNTA5OTczLCAweGFjZmNiOWVhLCAweGY4ODE3ZTA3LCAweDE3ZmZmZDAxLCAweGQxYzhhZmY2LCAweDZjY2E1OTU4LAotCTB4M2VjNzc1ODQsIDB4YjRhZGIwNjcsIDB4ZDMzOGZhZGUsIDB4MzkyMWFkZmIsIDB4NTU3NWU4YWEsIDB4ODk1ODVmNDIsCi0JMHgzNmZkYTA1NSwgMHg4MDRlNDNiMywgMHhiOTBiZTY3MSwgMHgwY2Q2YjRjYiwgMHgzMTllNDNkNCwgMHhhNDA5YjVkYiwKLQkweGEzZGU4MWQ3LCAweDRjNjY3OTIxLCAweDA2NThiZDQwLCAweDRmZDEyZjNkLCAweGRmODczM2NmLCAweDM2NmIzYzkyLAotCTB4ZmRiMTQzZGIsIDB4MmZlZmQ2YWQsIDB4MzE1N2Y5ZTYsIDB4NDQ0YjQyNGYsIDB4MzFjODU3NDgsIDB4ZjIzZGUwM2IsCi0JMHhhMTI3NzY0ZSwgMHhlYjAzNTdhYSwgMHhlNzkwNzAxYiwgMHg2ZGZhMTIxMywgMHg3YWJhMDU1YSwgMHhmYTk1ODI1MiwKLQkweDdjMTFmODAxLCAweGNhMTllNzYxLCAweDI0M2NhNTA5LCAweGI4NDFlMzliLCAweDQ3ZmE0OGMzLCAweGUxYTJjNDU0LAotCTB4OWFmMGZjOGIsIDB4MTEyM2JkNjksIDB4NWJmZmViMGUsIDB4YmZhODRhZjYsIDB4MWJiMzNmZmQsIDB4YmU3MDI1ZjEsCi0JMHgzZmRjMDk0NSwgMHhiOTg5MGJmMSwgMHg5NzU3ODgzNCwgMHg0NWFmNTRmNSwgMHg4ZmViYmVkNywgMHgzNGE1YWVkMCwKLQkweGVkNzY4NmMzLCAweGQ4MjFlNDNlLCAweGY0OWVhODRmLCAweGU2MTA5NmE5LCAweDk5Njk3YTQyLCAweDdkNDZlOTFjLAotCTB4YTdiNDJkZWMsIDB4ODg2NjFlOTAsIDB4N2M0NjI2ZjYsIDB4NDBjNjY1YmEsIDB4MGQwMzg3ZTIsIDB4ZjM1YzE4MDAsCi0JMHhhZjZmMDM0YSwgMHgyNjQxZjQ1YiwgMHg5NjNjYmZmNiwgMHhjOTRhYzdlNCwgMHhmNDgxMzZiZCwgMHhjYmU0OTkzNSwKLQkweDZhOGZjMTQ5LCAweDY1MzNiY2MyLCAweDljYjlhZjI4LCAweDkzOWM3MGMyLCAweDYxNTY5NzYwLCAweGEyMjA5MmJkLAotCTB4N2IzMDlhYmIsIDB4N2RkN2YyMGMsIDB4ZGYxMzJkZmYsIDB4NzkwZTE5YWIsIDB4ZjIyNWYxMzMsIDB4YjY0Y2Q0YzcsCi0JMHhmZTQxODRjNywgMHgzNTFmYjE2MSwgMHg2N2ZhZWViNSwgMHg2OWM5YmZiMSwgMHgzMjgxYWViNCwgMHhlMmY1NDQ1YiwKLQkweGU5OWYzZjc5LCAweGZkYzczYjc4LCAweGRiZDQ1YWMxLCAweDIwYzUwMjQxLCAweDRlMjg1ZWZjLCAweDJhMDdjODY2LAotCTB4NDRjZWM2MTMsIDB4ZjdlYzUyYmMsIDB4MjhkZjgyZTksIDB4NjMwMzYzZmQsIDB4ZmM2M2VhMmUsIDB4ZjVmOThjZGYsCi0JMHgwN2FiYTQyNiwgMHgyMDFkNGM0YiwgMHg5MmM5ZDgzOSwgMHhiZjY4MjExNSwgMHhiZDkwZTgzZSwgMHgxZTViZDQwNiwKLQkweGQzNWZiM2M4LCAweDdmYjAxMjBiLCAweGIzYzI0Y2ZiLCAweGYyN2VjNTYyLCAweGJkYjg0M2NlLCAweGViNjQ2M2RkLAotCTB4N2Q4NDdmNDksIDB4ZGYxZWJjY2QsIDB4MjI2MzNjMmEsIDB4NTJjN2VkZmMsIDB4ZjM5N2E3MDMsIDB4ZDc0ODJmMzgsCi0JMHg3MTRhM2IwNywgMHhlMzRkNTVkZSwgMHhjYWVkZmMyMywgMHg4NzU3ZjMxOSwgMHhmMThiZGQxMiwgMHgyM2RiNTYyZSwKLQkweDVlYTEyNzRlLCAweDMyYTk0MDUwLCAweGMxNGUzMjllLCAweGVhNWRhMzE0LCAweDgxOGRmNjhmLCAweDQyMzlhYWY0LAotCTB4NzgzMmFkMGYsIDB4NGRmZDIxYTcsIDB4YTMxZTM5MzcsIDB4NjQyZWNhNzEsIDB4N2ZkOGJlYTEsIDB4OWMzZjVhNGEsCi0JMHgzMmZiZjc3ZiwgMHgyNTNkM2M0MywgMHgzMjE0ZjVmNiwgMHg0NWE3YzQ2YywgMHg0YzJmODQyMSwgMHg4ZWJmMWRlNCwKLQkweGY0MWNmZDIwLCAweGM3MzdjMjFhLCAweGRlNTI4NmVmLCAweGNjYzdiN2ExLCAweDFjNWNmYzQ3LCAweGNhNzFmODRjLAotCTB4NzI5ZmJmYzIsIDB4Y2Q3ZTExODYsIDB4ODdmOTVkZmEsIDB4YWE3YmUwMGMsIDB4Nzg3ODRmNTAsIDB4M2YyNjQ1YWEsCi0JMHhjYTk2ZGZjZiwgMHhiOWMwM2Q1ZSwgMHg2N2Q1Y2E2YiwgMHhkNzVkYTA1MywgMHgzNzcyYWZiMiwgMHhlMmJlZGE0MywKLQkweDNmOTQzOGYzLCAweDRjNTQ1NmIzLCAweGNhYjM3NmMyLCAweGZjOGZkZDk2LCAweDNkNzQ0NmY5LCAweDQ0MTA2OWNiLAotCTB4MzViNmUxY2MsIDB4ZDcxMWJlYzEsIDB4ZDVjYTdmZDksIDB4MDNjYmU0N2MsIDB4Y2ZjZjlkY2IsIDB4MDk4M2YyODcsCi0JMHhjZjg4Njc4ZSwgMHgxMTJiZGJlOCwgMHg3ZDZmOTUxZSwgMHg3M2ZhODcxMSwgMHg3YjJiZjM3NywgMHg2ZGZkMjE1YSwKLQkweGZhNzllMzg4LCAweGY4ZGVlMmJlLCAweGIwOTlkOGQ1LCAweGIwYjUyYWJmLCAweGI3M2Y4MDVmLCAweGM0NWUzYTI3LAotCTB4YmNlMzU1ZWYsIDB4YTJlZWQ4MjksIDB4ZTExZjJkYWUsIDB4OWFkZDk2YzYsIDB4YTVhMTdkZGUsIDB4NzY4NDlmN2UsCi0JMHgyNTRiNTA2MCwgMHgwYjNiYjJhNSwgMHg3OTI5ZDFlNywgMHg4NDQ0YTU0MywgMHhiMDBiZTgyMywgMHg2ZjE2OGJlZSwKLQkweGI5ZTIxODY4LCAweGI3Y2JjM2QwLCAweDUzNDdkN2FiLCAweDA3N2UxNDhiLCAweDkxZWU1NzY4LCAweGIzZDIyNmVkLAotCTB4NmY5YzdhZGQsIDB4Mjg3MmZkNjAsIDB4NThiNzdhYTcsIDB4YmMzY2M2NWUsIDB4YTllOWFjM2MsIDB4N2I3ZWY4YmIsCi0JMHgxNzlmYjBiZCwgMHhjNTZmMjQ3NiwgMHhmN2I0YmVmZCwgMHgzYjdmMTQ5NSwgMHg3ZWJkMzAzOCwgMHgxN2ZkN2NiZSwKLQkweDhlMDBiZjExLCAweDg3NDRhMTE3LCAweDUwNjBkNWY4LCAweDNiNWQ3ZmQ5LCAweGQ1Zjg1NDYyLCAweGJkZDUyM2I1LAotCTB4NzYyZjhmZGUsIDB4NmNjMWJlMDksIDB4ODhjOWRjOWUsIDB4MmU0Zjc2ZjcsIDB4OWYwYTU1ZWEsIDB4MTY0ZjQ2NjAsCi0JMHg5ZTY5NmZkOSwgMHgxNDU3YjQyYywgMHgzZDBhYzMzZSwgMHhmNmVlNTQyOSwgMHg3ZGZkNjBhNCwgMHg3ZDlhY2Y2OCwKLQkweDhhZWQ5NmUzLCAweGZkY2Y1ZGFkLCAweDM2NGQyZThlLCAweGM1NmU4N2U2LCAweGNkZWZkMmJjLCAweDU5YmE5N2Q2LAotCTB4YmJhN2NhYWYsIDB4MDlkM2Y5ZDUsIDB4NzNiNjlmZGMsIDB4ODNiMTVlYTcsIDB4MzA0NzYxNjUsIDB4NTY4ZmIyYWIsCi0JMHg1YzExYWZhZSwgMHhlMDU3YWFmZSwgMHgyZTZjNjhmMiwgMHhhZmUwMGRmYSwgMHhlNzM3OWEwNCwgMHhkZGI5M2JlMywKLQkweDIzYjg2ZmJjLCAweDYyYTlmOTE2LCAweDgzMGJlZjlmLCAweDUxY2EwNjdjLCAweGFmMjU2ZjNlLCAweGRlNzAyMWMwLAotCTB4MjBiYWZlMmIsIDB4OTY3YmZkMTYsIDB4NGU1MDhkNDQsIDB4M2Y4ODUxNmMsIDB4MmY5YzRkMmIsIDB4YmU4MWQ0YWQsCi0JMHg0OTc2ODE5YSwgMHg1YWQzYzhjOSwgMHhkMTZjNTdiNCwgMHgxYzFmNWFjNSwgMHg2ZTFlNmMxNiwgMHhiODVkM2E0NCwKLQkweDFmZDFiODY1LCAweDFmNmU1NjFmLCAweGYzMGFkODc5LCAweDZiNWRiOGJjLCAweGQ0YWYyOWMzLCAweDdkNDI5ZmJhLAotCTB4ZDk3NmU1NmMsIDB4ZGRmNDYyZTMsIDB4MTdmYTg3NjgsIDB4NjI4ZjA3Y2QsIDB4Yjg1YjA1YmQsIDB4YmY2OTQyOWYsCi0JMHg3NDRlNzM3MCwgMHg4NzNjZGZiMSwgMHgzM2MzNTc2ZSwgMHgwZmNlYTNkMywgMHgwN2U3NTI2YiwgMHhmMzkxYWVhMiwKLQkweGRjMzc2ZjNmLCAweDNjOGZjZWFiLCAweGZkOWZjZWFjLCAweDEwZDNhM2NiLCAweGQ3NjQ0YWVkLCAweDg3ZWEzMjUzLAotCTB4NDYxZmU3OWYsIDB4ZGY2ZTcxYjksIDB4ZGZlNGExMWIsIDB4MTViOGEyZjksIDB4OWI4NWRlZjUsIDB4N2Q4NjcwZDUsCi0JMHg3MDFmNTA5MywgMHgyZTQ4OTM2ZCwgMHhlOTAzYmE5NiwgMHg2NWJhNmZhMywgMHhkN2UyYjk2YywgMHg5M2M3ZjM0YiwKLQkweGQ1NmFlNjMyLCAweGJmNWY1ZmM2LCAweGQ5YTY3OTkzLCAweDc0YjQ4ZmQxLCAweDIzZDNjOGYxLCAweGUxZGVmZDdkLAotCTB4N2I0N2E0ZDksIDB4MWJkYzcwMjcsIDB4ZGIzMzI5ZDEsIDB4MTY1ZjY4YWQsIDB4ZWVkZmUyOGQsIDB4N2Q5NjNhNWMsCi0JMHg2ZDg4MjIwNSwgMHhmODhmOTYzOCwgMHg0NDg0ZjQ1NywgMHhmNWU4YjZmMiwgMHgyZjkxNzdkNCwgMHgzMTk5ZWM3NywKLQkweDA1NjlkMjgxLCAweGNmYzUwZjA0LCAweGYyNDViMGIyLCAweDMyZGU0MDg2LCAweGZjZWRlMzhhLCAweGMxOWI5MmNkLAotCTB4MzJhZWU3YmMsIDB4YzU0MWZjYTgsIDB4NThmM2Q0MWIsIDB4YmVmZWEzNTAsIDB4ZGZjMGU5YjAsIDB4YzRiZmU4MjUsCi0JMHhlNTFlOTJmOCwgMHg0MzE2Yzk1NiwgMHhmZGNiMWY4MCwgMHg2NWUxZWEwZSwgMHhkOWQ5MThlNywgMHgxODNmNzU2NSwKLQkweGNkNzNmMmZhLCAweGJhZTFkNjU3LCAweGI4ZmFlMTliLCAweDA3ZDNlNzhhLCAweGY4MDY2MzRmLCAweDg1N2VmZWY4LAotCTB4ZmVhMTEyMzMsIDB4MzJiNTM1OWQsIDB4Mzk4MmFkYzIsIDB4OTIyNGIzMWUsIDB4ODYwZGU5OWQsIDB4N2QwMDJjNzksCi0JMHg5MDY5ZjUwOSwgMHgyYmFlYjRiNywgMHgwZGI5ZmI5YiwgMHg0Y2NlNTRmMSwgMHhiNTg1N2U1MCwgMHhiZTFjYTJlNSwKLQkweGUzNjIxOGQyLCAweDVjYjZiMGZlLCAweDQyMTdlNDBiLCAweGMyNTZlMTFlLCAweDljN2MxMjM2LCAweDhlNjU3ZmM4LAotCTB4ZjliZjc2MmYsIDB4ZTdmOTNlZTIsIDB4OGZhZTQ2ZDksIDB4MDNkZWI1M2IsIDB4ZDY3Mjg3MDgsIDB4ZmY3MGVkNGUsCi0JMHg2MTM5ZWJmYywgMHg1MWMzMjc1ZCwgMHhjZjY4MDhkZiwgMHhhZjBmZTQ2YywgMHhkZjY5ZWIzMiwgMHgzMDdlOWFhYSwKLQkweGVjNTc3ZmY4LCAweDUxMmVjNTAwLCAweDU5ZmY2ZGZjLCAweGUyMTA3MGY2LCAweGZlYzk2YWY1LCAweGQ0YzY1MWJjLAotCTB4ZjExNWE3YmQsIDB4NzI0Y2Q0YjgsIDB4Y2U1YWUxZmUsIDB4ZDlkMDZiY2YsIDB4NmNkN2ZkMDIsIDB4ZjM3ZDI3NGEsCi0JMHg4MjllYzk2MSwgMHg0YzliNjVlYiwgMHgxZTgxMDc2NCwgMHhkYjNhYmYxOCwgMHgzZTgxZDdhNywgMHg5ZmExMzJlOCwKLQkweGJkYzgzNGI4LCAweGU3MGZiZjE1LCAweDhjY2Q3OWY2LCAweGRlMTdkMjE0LCAweGU0NWUzYzkyLCAweDM4NjdhZWMzLAotCTB4ZTY0Y2Q0YmQsIDB4NjRmMzUzZjgsIDB4MGNmZjdkMGMsIDB4ZmE4MzFhYTcsIDB4NmE0YmQ3MjIsIDB4M2Q3MmE1MzYsCi0JMHg2MGYzZTY1NiwgMHhmZTIxMGJiZiwgMHhlNjJmMTM1OCwgMHhmMzRhYzAzNSwgMHhjOWY1ZjQ1MiwgMHg4OTczYzcxNiwKLQkweDVlMmNlYjdlLCAweGY0MjQ3YTAxLCAweDk5NWJmYzVmLCAweDk1ODI5ZmExLCAweDNjOTJkYzQ0LCAweGFhNzIxN2FmLAotCTB4OGRjOTkzNjcsIDB4NTJkM2VlZmUsIDB4M2Y5ZTJiNjEsIDB4MTNkZmIzNWMsIDB4MWRjZmRmMzksIDB4ZWEyNmRmNmIsCi0JMHg1OGJjNWY5MSwgMHg0ZmZkNzkzMywgMHgzNTY3YmM3MSwgMHg3ZWYxOTVkNiwgMHg1M2RiYjdmMCwgMHhiZDNmY2Y1MCwKLQkweGY3MDIzNGM5LCAweGNlNzBkNGU5LCAweDcyYzc3M2I3LCAweDI1ZDgwMWJmLCAweGVlOTBhZGY2LCAweGZjYThkNDQ5LAotCTB4YjkxMjdiYWIsIDB4ZDEzZmIwOWQsIDB4M2NlOWU5NGEsIDB4YzkwYzQ3ZWUsIDB4MGNmZjI0MmUsIDB4ZjFmMTE1ZWMsCi0JMHgxN2VjNzVjMCwgMHg4NWY1OGFlZCwgMHhjN2QyN2U0NywgMHhiMGY4MTQ3YywgMHg0ZTdmN2M3MSwgMHg1YzkxMjIzZiwKLQkweDU4YTRmNTg0LCAweDdiZmI5ZjIwLCAweDRlNzVmOTEzLCAweGVjYTJmOTBiLCAweDBlNTFlMDBiLCAweGJmYzE1YmM5LAotCTB4NDlmYzQ1OWUsIDB4MjdmMDE0YzQsIDB4NTFmYzJmYmIsIDB4NjBjM2M3ZTMsIDB4N2YxMDk4ZWYsIDB4MWY2ODNmMDAsCi0JMHgzMjdhZmMxNSwgMHhmMDExZjY5MywgMHhlN2ExZjA4NywgMHhmMDBkZDM0OSwgMHgyODVmNmQ0NywgMHhlNWE5YWRlYiwKLQkweDVkYTA0N2Y2LCAweDMyNzBmODAxLCAweGEwYmNlZmQxLCAweDA0MjdhYzI2LCAweDNjMTRiN2NmLCAweDhlNzc1YTYwLAotCTB4MjA1YTM5ZmYsIDB4ZTZjOWU0MWUsIDB4NGJlZmU0MzQsIDB4ZWExYjIwYTQsIDB4N2Y4NDRiZGQsIDB4NDY3Y2M5N2IsCi0JMHg4YjY1OGRmMywgMHg2OGQ3YTQyNCwgMHgwZWM4OTVlNiwgMHhlYzI2NmQ2NiwgMHgwMDNkMjdlZiwgMHhmYzNhM2Y3MywKLQkweGYzMjM1NWU5LCAweDU4NjM3Yjk3LCAweDhmN2YyYTk4LCAweDNmNTU0NjMxLCAweGZhYWYxMmNmLCAweGJhNzQ2ZjdlLAotCTB4ZWI3OGZiZWEsIDB4NjI3ZTU1NzAsIDB4ZmFhYTFkZGEsIDB4YThjNmQ5ZjcsIDB4MzUxYjNmZjIsIDB4YjI3ZjU1NWUsCi0JMHg2ZjJhYjI3ZCwgMHhjZTJkMTY2NywgMHg2MGJhYTViZiwgMHg2ZjFmZGEyNCwgMHg1ZTkyMTc1NywgMHhkMTk3MDgxMCwKLQkweDViYWY4Mzg2LCAweGVhNDYyMDZkLCAweDAwYjQ1M2I0LCAweDBlZmRkMWJmLCAweDdjODc4OTJlLCAweDE0ZDMzYWZmLAotCTB4ZThjN2UwMmQsIDB4ZTI1NzgzZDgsIDB4ZDVhMjYwMmQsIDB4NDNlZmYxMDUsIDB4ODA0OTVlMGYsIDB4MzA1ZDc0N2MsCi0JMHhjOGM1ZGZjZiwgMHg2NzU4MWYxZSwgMHg5MzMyZTI5ZSwgMHgwOTM2MzBiZiwgMHhlYWVkM2NlMCwgMHhmNjY4NDNhMiwKLQkweGNhN2NiMjdkLCAweDc1YTQ3OGZjLCAweDNmZjMzMjY3LCAweDc1NjZkOGI3LCAweGU1M2Q2MTg0LCAweDU0N2Y1MmJiLAotCTB4ZWZiNTIxNTIsIDB4ZmNmOWNjYmUsIDB4MzkzZmI4MjcsIDB4NzYwYTdhZmYsIDB4YjE4ZmM5MTcsIDB4YWM2YzM0MWMsCi0JMHg1YmU3NGNkMSwgMHg3OGJiYThjYywgMHg3YzBjYWZjZCwgMHg4NjMzYjI1MywgMHg2YTk2YjlmZSwgMHhjMjJkNjdkOCwKLQkweGI3YTk0OGNiLCAweGMxZTk0MmRhLCAweGRmNGE2OGVhLCAweDYyYjJiNmFkLCAweDc1NmI2NzgwLCAweGFiODdhNTFhLAotCTB4YTQ3ZTU0NmQsIDB4MWZhNTE0N2EsIDB4M2QyOWRiNTYsIDB4Njk0MDVkNWEsIDB4YTUyMTc1NWIsIDB4YjM0ZjI4MTIsCi0JMHhiMzZjNmY5MCwgMHgzYzIxZDVhZCwgMHgzM2IwZGE1YywgMHhkOWZlM2UzMCwgMHhlMWYyZGYxNywgMHg1MTlkOTZhZCwKLQkweGZmMmExNWY2LCAweDRkY2Y2NGNhLCAweGIyMGQ3NWEyLCAweDk0NWI5ZjkwLCAweGE5ZmZkYTFmLCAweGU4ZDFmOTE1LAotCTB4ZjVlMTIzNmMsIDB4ZDU5YjczNjgsIDB4NDhmM2NkOTgsIDB4OTk5Nzc1NjcsIDB4ZWJjYTEzNTcsIDB4ZjVlYmZkNjksCi0JMHhmZTQ3MGNmNywgMHhhNjY5ZGEzMCwgMHg1MGJkNDk3YSwgMHhiZGViMGIyZiwgMHhmMmM1YTMxNywgMHhjYTFiN2E0NSwKLQkweDNmMDRlN2NiLCAweDkwMWNkMTBlLCAweDVlOTA5YzcxLCAweGM4MzQzNjdlLCAweDE0NGVmOWMwLCAweDVkZjg1ZmE4LAotCTB4ZjVkNWEzZjEsIDB4ODcwNmYxZjIsIDB4OWRmM2EyMmYsIDB4YzRjZGIzYzEsIDB4MTViOTE0N2YsIDB4YzE4ZGUxMWIsCi0JMHhkMTJlYzVmOSwgMHhlNjg4Nzk1MywgMHgyZWZkMTViOCwgMHgwOWRlZDU1ZCwgMHg4NGUzYWY4OCwgMHg2N2E3MWY5YywKLQkweGE2MGYzODY5LCAweDk0ZjkyMjA5LCAweDFhZGY3ZjI3LCAweGNkYzVmOTBiLCAweDM5OGM3MGQyLCAweGRjMjg2NzE4LAotCTB4OTZhMWY2NDIsIDB4NmZlYjMxZDMsIDB4YjZiOGZhZTIsIDB4YTgxNWY0YWQsIDB4ZDYzMjNjNzcsIDB4MTVhMTFlYjYsCi0JMHg4MTI1OGZiZCwgMHg1NTU3OTU5ZSwgMHhmMjcyODE5MCwgMHhmNDQ4ZGIzOCwgMHgzMWQ0M2YzZCwgMHg2YTZkZjEwZiwKLQkweDQ2YmRkMDA2LCAweDEzZjQwOTIwLCAweGZjNGMxMDVkLCAweDZhN2Y3YmIzLCAweDUzY2RlYTBlLCAweDBjYmRkNjBjLAotCTB4MjkyY2EyZTgsIDB4NGE3ZWYwODcsIDB4NjQ4ZTZiM2YsIDB4NDQ1ZGZjYzEsIDB4YWNhMjUzMjcsIDB4OWUxYjI1N2IsCi0JMHgxOTRjZTQ5ZSwgMHg3MWJmYzc3NywgMHhkMjQ5M2QyZSwgMHg3Y2E5YzdmYSwgMHhjMzFlMzkyMiwgMHg1YzE0NTVmOSwKLQkweGY1ZjlmM2QyLCAweGViZjg5ZTkwLCAweGIzZjEyYjI0LCAweGM5MTkwNzAxLCAweDIxZjE5ZWRmLCAweDdmZDE1ZmM0LAotCTB4NjFmOTE4YjUsIDB4ZWIwNzM1ODYsIDB4NDI3YWU5YzUsIDB4ZmJhMGVlMzEsIDB4NWRjNTJkN2IsIDB4MDdkMGNkNDAsCi0JMHgyZjFlZmNmYywgMHg4Yzc4ZjBiNSwgMHg5YTFiYmM0MCwgMHg1NTRkZTVjYywgMHhhYTAzOGYxMiwgMHgyOTFhMzY4YywKLQkweGNmOWNiOTZkLCAweDMwYTI0ZTI4LCAweGQwMzZlZDA5LCAweDU3OTRmYjFlLCAweGRjYjk5MzgzLCAweGU3YTM1ZjhiLAotCTB4NDk2NDNhZmUsIDB4MTA3YjY1MzAsIDB4OGMyZWYyNTMsIDB4MmM3ZGE5MDcsIDB4ZWNlZTUxNDgsIDB4YzdhNjRlMDAsCi0JMHhlODdmOTQ3NiwgMHg1NDkyZTNmNywgMHhkZjU4ZWRmNSwgMHgxMWQ5OWRmNywgMHg5ZGZiNGE5YywgMHhiZjdlOTM3NSwKLQkweDQzYzYyYjRhLCAweGRjYzA1OTdjLCAweDdlNDA4NGI4LCAweGI4NzI0NWZlLCAweGZiNDExZTcyLCAweDEzN2Y2MmZjLAotCTB4MzI0OTkzZDksIDB4NzFlMDM3ZTAsIDB4ZmM4N2IwNmMsIDB4OGUyNjc1N2YsIDB4OWUxYTQ5ZWYsIDB4NzdmODY5ZDYsCi0JMHg5M2U4MTA3ZCwgMHg3OTBjMWY5MCwgMHgzZWZhNzczYywgMHgxZTQ5ZTFkOSwgMHgwNTk5ZWQ0MCwgMHhhODdiY2JkYiwKLQkweGQwZjMwYzdkLCAweDI4ZjdjYTc4LCAweDlkNDM1ZWY0LCAweDMwNGYyMDQxLCAweGZhNmIyZDFkLCAweGU0OThkYjg0LAotCTB4N2QyMTFmMzEsIDB4ZjkxZjAxNzcsIDB4Nzc1ZjhmZGEsIDB4ZjUyZTg3MDUsIDB4NmM0YWE3ZGYsIDB4Mzc2ZmY2NmYsCi0JMHhlZDI5ZGE5NiwgMHhkODZhOTYyYiwgMHhmZmM0MTFkNywgMHg5MjJhNWYwOCwgMHhiNzM3NzYzNCwgMHg1MDk1ZGYzNywKLQkweDdhNmQ2MDRmLCAweGJiNGE2Yjk0LCAweGJlZWZjMDEzLCAweDA1ZmY3ODA2LCAweDI3YTYxZmY4LCAweGY4ZTFlZjgxLAotCTB4YzNkZjAxOWYsIDB4ZjdjMDZmZjQsIDB4ZjAxNGZjYjAsIDB4ODFkYjRjM2QsIDB4OTdmOTYxZWYsIDB4OWQzMGY3YzAsCi0JMHgxYjI0MzMzNiwgMHg2OWFhYTRlOSwgMHg4NTVhZmIwYywgMHhmZjg3M2FmNywgMHgzMTg5ZGRmOSwgMHhkOWNiZTM3ZCwKLQkweDllZDc2ZTI0LCAweGZiZmJlZjg4LCAweDdjNzEyNzdmLCAweGRmMzc3MTNhLCAweGQ3OTA2ZWI3LCAweGZlMDE5ZmE4LAotCTB4ZGY4NGIyYWQsIDB4ODc3NzZlNTgsIDB4ZWY5ZTczZjAsIDB4ZDc3ZWI4ZDIsIDB4NWZmM2MzMWQsIDB4M2ZhOGU5MjYsCi0JMHhjNjZkODZiYiwgMHhlOWE1ZGZmNiwgMHhlNjQ5ZWYyOSwgMHhmODViYTM3MiwgMHhhOGZmMDEyZiwgMHhjMzFlNjU3ZiwKLQkweDdhYWE0YTg2LCAweDgxNGQyNGVlLCAweGRlZjk4ZmJiLCAweDIzYzdjYzlkLCAweDFjM2Q0NGZjLCAweDBmZGUzMWYxLAotCTB4ODRhZDJiM2YsIDB4ZjE3ODgxOWYsIDB4MjQ5YmEwODUsIDB4NThiYmM3MDMsIDB4MjdjOGYxZTQsIDB4YmU3NDRjYTMsCi0JMHhlM2I1ZjMwYSwgMHhjNDlkNzQ3OSwgMHhmYzNhZjFmMSwgMHhlNzdiNzBkNCwgMHg3ZTg0ZmMzYSwgMHhlNzgwNGUwOCwKLQkweDA5M2ZhNDEyLCAweDM1MjUxZmMwLCAweDQ1Yjc3OTg4LCAweGUwODJmYzg2LCAweGEwYjNhMmRjLCAweDMyMjdlZmZmLAotCTB4NmJkYjE2MDAsIDB4ODRjZThmN2EsIDB4MTBjOGQ4ZjIsIDB4ZTQxZDllMmIsIDB4ZDQ1ZTZlM2QsIDB4ZWJiOGZmMTcsCi0JMHgzNWZmNWRkZiwgMHhmZmFmNTQ3YSwgMHg3MzhiNzViYSwgMHgzNzVkNWI5MywgMHg5N2U0MTNmMSwgMHhmMDdkM2Y4OCwKLQkweDFmYzgyMTg3LCAweDMzZjg3YzcyLCAweDg0OWVkOTI2LCAweDI2NGI3NGZkLCAweGJiODFmYTJkLCAweDAyMmYxYzRkLAotCTB4MWE1ZGZiZDcsIDB4M2YwNTVmYzcsIDB4MThmYzQwYmUsIDB4YmFjM2ZkODAsIDB4YjllYjdkMTIsIDB4ODBhMGZmMzYsCi0JMHgxNDY0MmRmNSwgMHg4ZmI4MTEwZiwgMHg1YmYxNWYwYSwgMHgzOWM5MWRkNywgMHgyNjAxYjgzZSwgMHgwNDFlZmM5MiwKLQkweDcxZmQxYmYyLCAweGM3MGI2NDllLCAweDY3NjcwMWYzLCAweDgxZjk0MjZmLCAweGZmZWEwMjcyLCAweGZhZmRjMzQxLAotCTB4NTZiZWRmMGEsIDB4MjY3M2M5MmUsIDB4MzlmOGE4NjcsIDB4NjdiMDdiNDMsIDB4Y2JlODgxYmYsIDB4YWYyNTYxYWIsCi0JMHg0MzgyNWRhMSwgMHg4ZjU5ZDlmOSwgMHhmNmY1ZjMyNSwgMHhhMGQ2NGY0ZSwgMHg5ZGY1ZDRkZSwgMHgyN2YxNDVkOSwKLQkweGExNGU3YjAzLCAweDU5YjVkNjdkLCAweDZkM2RiOGM3LCAweDNjODEyNDlmLCAweDA1N2U4ZjliLCAweDhkYzVmYTJiLAotCTB4YTE3YjZlNzQsIDB4ZDQzZDk5MWEsIDB4ODUzZTVjZjMsIDB4ZjNkNTYxNzYsIDB4ZTgwMjMzMzIsIDB4OWRiZmU3ZTQsCi0JMHg2MGIyZjg4NiwgMHg3YTgyY2ViZiwgMHg0ZmNkY2FjNywgMHgzYjdjNDYxZiwgMHg1MTU5MjhkMywgMHhjMjM1NzdkZSwKLQkweDQ1N2VhMWIyLCAweDA0ZGI4ODRkLCAweDhmMjFmM2Y1LCAweGY1OWExN2Y1LCAweDhmMWYyYjZlLCAweDE4YTc0Y2Y0LAotCTB4NjU1MzZiZWYsIDB4ZWZhNWZhMDIsIDB4NzA0NzVlNzksIDB4Yzc4M2IwNWUsIDB4NzliM2JjMzEsIDB4OWY2MzlkMDksCi0JMHgwYTJjNGI3MSwgMHhjYmNiZTVkYSwgMHg5ZmQwNjM1YSwgMHgzMzY0YTJmOCwgMHgzOWE3M2I0MCwgMHhlZmRhM2NmZiwKLQkweGNkOTgzYjY1LCAweDNkOGFmZThiLCAweGIyYmU3NDIxLCAweDdmMWQ0NmEwLCAweGE0ZGVlMjUwLCAweDY0YTI3ZDQ3LAotCTB4YWNiY2JhOGIsIDB4OWQ4NzlkNGUsIDB4NmNlYjdlMjEsIDB4M2MzM2M3NTAsIDB4MTVlMjJjOTIsIDB4ZjI3MGQ5ZDIsCi0JMHg5Mzg0ZDYzMywgMHhkM2YwYTAxZSwgMHhmNjMxZDkxYiwgMHgzMjRmOWNjNSwgMHhmYTI0NGRmNiwgMHhkZmZkZTU0OSwKLQkweGU2Njk3ZGM2LCAweGRmMjJjOWY5LCAweGRmNGJmOTAxLCAweGUwNTE3ZGYyLCAweGJmOWNhOTUyLCAweDRmNmNiMGM3LAotCTB4OTlkZmM2MzYsIDB4NTVjNzY4MmMsIDB4Y2ExNTdmMzYsIDB4YTgyY2VlMzAsIDB4Y2ZhMjdlZmQsIDB4NTM4YTY1MzcsCi0JMHhiYjI0ZDc1YSwgMHgyZDE1YmUxMCwgMHgzZTMxOTdhNiwgMHgzMWVmNzJhZiwgMHhlMTA0MzViZCwgMHgwMWU5MDhmZSwKLQkweDFhZDczMmY3LCAweDFhYmNiZmI0LCAweDNjMjM2YjBkLCAweDE1ZmYyMzZhLCAweDIwMmNmN2IzLCAweGM5YjM3MGJmLAotCTB4NmYzZGU3NDIsIDB4MTMzYWRhN2UsIDB4NjYyNTdiZjMsIDB4ZGMxYzdkYzIsIDB4ZTBiMjc4NGUsIDB4NzVjZTk5NzksCi0JMHhiOTNlNmExOSwgMHg3MTkxM2MzZSwgMHgzZDlmNzE1ZiwgMHgxNmJmNjhmZCwgMHgzZWUzYmVlMiwgMHgzZWUzYmVjMywKLQkweGQ4OWZiOGNiLCAweGU2ZWY0NDNlLCAweGNjZWRjMjc4LCAweGZlZjlkYjMzLCAweDJmOWVmYjJhLCAweGRmOTNkMDZmLAotCTB4ZjNlZjk2YjgsIDB4M2ZkN2NmM2QsIDB4YTA3ODQ0MWIsIDB4NjgwZjAyNjMsIDB4ZTE2Y2NmZGYsIDB4YmZkZmFlZmIsCi0JMHhmMTEwM2Y1YSwgMHgwZjAwMzZiNywgMHhmMGQ3MGQ5YSwgMHgxZDc3ZTcwMCwgMHg3ZmVjMDQxZSwgMHgwN2NiZjBhOSwKLQkweGZlZTA0MWUyLCAweDQ0ZjgyYmRmLCAweDEwZmEzYzllLCAweGZlMmNkOWM2LCAweGYxNTcxZjA1LCAweGVmMGVjZDczLAotCTB4YWEwNDc4YWMsIDB4MTFmZjFhOWMsIDB4MzkyY2RkOWEsIDB4MDQ5NjM1ZmEsIDB4YjQyMWJkNzIsIDB4YzBmOTA5YjAsCi0JMHg4NmJiMDlmMSwgMHhmYzA5OWM1MywgMHg5YzUyNDYzMywgMHhkZGVmYzExYiwgMHgwNTNkZmQ1ZiwgMHg3ZTNiYmZlOSwKLQkweGUyMzc5NmYyLCAweDcwM2FmZjY5LCAweGMxNjFkZDFkLCAweDk2ZWU3ZTVjLCAweDFiOTUxMmRjLCAweDUzODAwNmJjLAotCTB4YTQ1MWYwMWUsIDB4ODFiNmY2NDMsIDB4MDdiYTkxY2UsIDB4MzFlOGY0M2MsIDB4NjkzZjc3YzgsIDB4NDhmNmUxYjYsCi0JMHg5NTFmNmU3NiwgMHgxMjc3YmNiNywgMHgzMWFjODZmZCwgMHg5ZmIyYWVjZiwgMHg4ZTUzN2Q4NCwgMHg2ZjdlMTVmNiwKLQkweGVmY2FmYjAwLCAweDdjYjI0ZTNjLCAweDRmM2VlZDQ0LCAweGNhZjVhMDRlLCAweGIyNjZkYjFhLCAweDk1OThlYTgzLAotCTB4ZTNhZjYzY2UsIDB4YmRmODhjZjcsIDB4YTFiYTA3ZTIsIDB4ZjdjMDE2M2UsIDB4ZWI5ZWZjN2QsIDB4MjgzNWNjNjEsCi0JMHhiMTRiZTkwYywgMHhiNDdlMTRiMywgMHgwZjRiZjg1MCwgMHgxYjQ0NzYzZCwgMHgwM2FjZWI4MSwgMHhiNWJlZTNiOCwKLQkweDhmZWExZjAwLCAweGRiOWQzZDdlLCAweDhkZDFmOTJhLCAweGYxMTY3ZmE4LCAweGNlNzhlMDBhLCAweDQ2OWY2OGI1LAotCTB4ZDMzMmZjNDYsIDB4MGYwMjlkN2MsIDB4NjA1ZjExMmIsIDB4MDdkOTY1OWQsIDB4Nzc1ZjUxNDIsIDB4NmNlMWZlMGEsCi0JMHg0OTdmMjEwZSwgMHg4Zjk4ZGIxOSwgMHhlMzA2NTVmOCwgMHg5YmMwZmI3OSwgMHg0ODdiZWRiMiwgMHhkZTE5YmZjZiwKLQkweDY1NWJmYTI4LCAweDNmZGViYWEzLCAweDI1MGM5ZjkwLCAweDAzZjk5MjdlLCAweGZjNjlkZmUwLCAweDM3YzdjNzNiLAotCTB4N2U4Y2U0ZjIsIDB4Y2JkYzA3MTgsIDB4NmU5MGZkYWMsIDB4NTJkNzI0NmYsIDB4ZmIyOTAzMzcsIDB4MzZlZTliZjUsCi0JMHhjZmNhYWQzMiwgMHgzM2U1NTE2ZiwgMHhmYWFhZDEzZCwgMHhhYWFjOWFjMywgMHg2OWJkYzNlZiwgMHgwZjIzZWZhYSwKLQkweDljZjk1NGRiLCAweGZhYWE1MWI2LCAweGFiYjQ5ZmI3LCAweDE3YjQ3N2YyLCAweDc1ZGZlYWE4LCAweGVmOTU1MGFlLAotCTB4ZmNmNTgwY2QsIDB4YmRkNzM5YzgsIDB4ZmVhYTkyZDEsIDB4ZDU0OWFiNzgsIDB4MDQyYTY4M2YsIDB4NjE2OTg5OWYsCi0JMHgzMzVlZjJhYSwgMHhmYThkZDM4NywgMHhlZWE2Y2ZiZCwgMHg3ZjZmYjE1NywgMHhmZmRkNGEzNiwgMHhkZmJhYmI2NCwKLQkweDZkODdkZDViLCAweGEwYjUyNzIwLCAweGI5MDc2ZjZmLCAweGQwNGVlOTg5LCAweDZmYTBiNWNiLCAweDhlNWU4MDM3LAotCTB4MmY0MTU3ZjksIDB4N2EwM2Q0YzcsIDB4MDZiZjk2MzksIDB4MWJlNjM5N2EsIDB4ZmNjNzJmNDEsIDB4MzAyM2IwM2UsCi0JMHg0MDVkNTRkZiwgMHg4NWQ1OWJlOSwgMHg3ODMzN2U1NCwgMHgwZjcxOGFiNSwgMHg4ODhmNzE4YiwgMHhjNGRiMTk3MSwKLQkweGUwNGRmZWU1LCAweDdmNjhhMWYyLCAweGMzNmZiNDU0LCAweDNjM2U0OWY2LCAweGQ2NDgyOGFjLCAweDFkM2EwNTVjLAotCTB4OGY1ZTdlMTMsIDB4YzVmNjVhZTcsIDB4ZDc2OGY5ZWQsIDB4YjMyZmJjZjcsIDB4Y2MyNzQwYWQsIDB4ZGQ1YzNlZTEsCi0JMHgwNDUyZTUxZiwgMHhlYzJmYWYzZiwgMHgwZWZkMDBmOSwgMHgyZDEzN2I5NSwgMHhhZWIwNmU3OCwgMHhmOGEzZTNlOSwKLQkweGI2NTFhYmJkLCAweDZjMWRkZDIyLCAweGZiMTQyYWZhLCAweDE0MTU3OGI5LCAweDllNDI5MWJjLCAweDc3ZjlkZTQxLAotCTB4ZjBmNWY5NDYsIDB4YzdkNWUzMWQsIDB4OTY0NTAxZWYsIDB4ZTQ4Nzk0ZTQsIDB4MjUyNGM1ZDQsIDB4MGU3YmE2ZWYsCi0JMHhmNDdiMGQ4NSwgMHhiNmZlNzRlZCwgMHhlZmJmYmU4NywgMHg2ZmJmYTlkMSwgMHhiNzdkNTVhZiwgMHhmNzNjN2Q2MCwKLQkweGNlYzliYWQ1LCAweGY0YTRkMGJlLCAweGNlZmFhNWU3LCAweGZhOGVjOTI0LCAweGVmZWQ4NWYxLCAweGI3MzhjMWFjLAotCTB4MTE0NTNkOGEsIDB4ZGU1NjdlNzgsIDB4ZGU3MjJjNzAsIDB4ZDJmZmMwOGYsIDB4YzgxOTVkYmUsIDB4YTE5YTJiZDcsCi0JMHhiZmFmYjMzZiwgMHhjODlkNjY4YSwgMHg5MzNiZjlmMywgMHgyMzg3ZTRmNiwgMHgxODkwNmVkZiwgMHg2YzhiOTI4YSwKLQkweDk1MGRjNTIzLCAweDkxM2JkNTM3LCAweGNkYTc5NTJmLCAweDRlMzllMWQ0LCAweGY2MTY0N2I3LCAweDczYzM4ZjNmLAotCTB4YzdkNzE4NWEsIDB4ZTc0MjU3M2MsIDB4ZjI3ZmJmNDEsIDB4ZTMxZmJhMWMsIDB4ZGU1YmJhNjksIDB4YmI3MWM1MDksCi0JMHhkZjg2OWVmMSwgMHhjMjkxM2VmZSwgMHg1MjI3ZGFmNSwgMHg4Yjg3YmRmOCwgMHg2Mjg0ZWY4ZCwgMHhjZjNhYzVmYywKLQkweDVhZWUxYzNiLCAweGEwZmZhZDJmLCAweDRhNDM3N2M4LCAweDY5OTI2ZWYwLCAweDM1NTdhNWZkLCAweDdmNGEwZmI0LAotCTB4ZDRjOGE2Y2YsIDB4ZTRhNmY4Y2YsIDB4NzFkNzVjMTAsIDB4OGRjZjFmMGYsIDB4Y2UzMDA1YzEsIDB4NjJhMmE0ZjgsCi0JMHhlODkxZmY5YywgMHhlOTMyMzkxOSwgMHhkYzZmZGM3NSwgMHgzZDYyNjQzZCwgMHg4ZTc4MTNlYSwgMHhmNWRkOTdkZSwKLQkweDU1YjdlODlhLCAweDlmYmRmN2M0LCAweGYyMmI3YWY0LCAweDExMDUyM2RiLCAweDg4MDY0OWMzLCAweGI4NTMzYjdhLAotCTB4NzdhZjkxOWQsIDB4Mzg5Y2ExMjQsIDB4MWY5MmI2NmUsIDB4NjI0MTQ1NzksIDB4NDFlZmVlMDgsIDB4ZTBiY2IxNGMsCi0JMHg5N2NiZjI2NSwgMHg4ZWYxZjIzNSwgMHgxMTQyZGE1YiwgMHg4ZTM3OGVlZiwgMHg1MTZmNTE5NCwgMHg3MWMzYWJmYSwKLQkweDZmYWNmOGZkLCAweDRmYjQ1Y2RmLCAweDMzNWFlZTI1LCAweDNmZGJlM2Y2LCAweGIxNGVlZTVlLCAweGVlMjNiYjUwLAotCTB4M2Y1MGQzNjMsIDB4NGMxNjllM2EsIDB4OWVhYjQ1ZmEsIDB4Mzc5NzdiOWYsIDB4NzhmNmZkNzAsIDB4ZWNhZDZjNGIsCi0JMHgxNmUxNWU3NywgMHhhNjlkZDFmYiwgMHg2YWVkN2RhMSwgMHgzMzdhODlkMiwgMHg5ZWFhOTllYiwgMHg5ZDU3ZWY4ZSwKLQkweDc3MTYzZTdhLCAweDU3YTg1M2M3LCAweGU5OTQ1ZjNiLCAweGI3NTM4ZWVlLCAweDdmZDcxMjI4LCAweDdlN2E4Yjc2LAotCTB4NGVjZTAyMjUsIDB4ZDIzMjM3OWQsIDB4Y2Q5ZDVmMGYsIDB4NGNjNmU4ZDcsIDB4ZDBhY2RlNzgsIDB4NTNmNjk1ODksCi0JMHg2OWUzYzdkOSwgMHgxZTNiMmY1YywgMHgzOTBiZWZjZCwgMHg1ZTEzZDRmNywgMHg1YjdkZTRmYiwgMHhiMTFkZWEzYywKLQkweDRlZTNjMWZmLCAweDJhZDc2NjZmLCAweDVkOWY4MGZhLCAweGQzYWVkMGM0LCAweDY4ZTYyNDE1LCAweDNmNzI3YzEyLAotCTB4NzlmZWM1MmIsIDB4OTdiNDAwY2EsIDB4MDQwZWM5MGEsIDB4M2YyMTBmNjQsIDB4ZmRjM2VhMDgsIDB4ZWRmZWZmOTAsCi0JMHhiN2I3MWM1OSwgMHhkNDQwZjQxMSwgMHgxMzRkOGM4MywgMHhhZjRhZmVmMCwgMHhlNjA0MDgwZCwgMHhlNzQ1YmJkYiwKLQkweDE5OGJmNjE2LCAweDQyMDVkMmY1LCAweDc1NmIzZDJmLCAweGJlNzhjYWU0LCAweGViNDM1Y2I4LCAweDgxZGQ4MjcyLAotCTB4ODI1ZDhhNzEsIDB4MTNkYTVkZGYsIDB4MDdkMjMzZmYsIDB4YjQxNmNiMGUsIDB4NzBmMWVlNjcsIDB4YzBkOWQ2M2QsCi0JMHg0ZjRhZDJmNSwgMHhhMzQ2ZWZmYywgMHhiM2EwZGRkZSwgMHg1MzVhMDU1OSwgMHgyZmQwYWM1YywgMHhmNWJkMDhjZSwKLQkweDNkMWVmMmNjLCAweDI1ZmIyN2Q5LCAweDVmZjQzNGY2LCAweGNlODliNGQyLCAweDdlODQyYmFiLCAweDkwMzcyMTUxLAotCTB4YjM3MGIwOWUsIDB4YmQwMDJmNWEsIDB4ZGYyZjk1NDUsIDB4MDgzN2E4MWUsIDB4NWQ0NzkwN2YsIDB4NzI3N2Q4YWUsCi0JMHgyMWZkMzVlYSwgMHhkMDExZWQxZCwgMHgwZTkwYTM0YiwgMHhkY2FkNTNhMiwgMHg5M2VjMjY2ZiwgMHgyOGI2OTkyNSwKLQkweDVhNzVmN2E0LCAweDRmYzUwNGViLCAweGRhYWFmMDgwLCAweGNlMjk3YWZmLCAweGIyMGNlZGRiLCAweGY0YjBiZDkxLAotCTB4Zjc2YjgyNGQsIDB4ZTkwZWRjMzcsIDB4OGYwNDY2OGUsIDB4ZGJlMWM2NmUsIDB4YmJmMWM0ZGQsIDB4OGRiOTI3NGEsCi0JMHg5NWQwMWVkOCwgMHhlZTRhMzNmYSwgMHhiYTg3YThlNSwgMHgyZjg5NDM3YSwgMHhmNDgwNTYzMSwgMHhiNzA2NzhiMCwKLQkweDBiZThlZDM3LCAweDg1MGJmNDg1LCAweDI5ZjkxNDBlLCAweDViYmZiYTcxLCAweGY5ODcyZWRiLCAweDU0ZTQ4N2YxLAotCTB4MTM4ZTc3YWUsIDB4NDI0YjNiNzEsIDB4MDZiZjI0NmMsIDB4OWQ5ZWI5MWEsIDB4OGUxOWUyNTcsIDB4ZWMxMDMwZjgsCi0JMHg5ZjlmODM2OCwgMHgyZGQ5YTA3YSwgMHg1MmJhYmQ2MSwgMHhlNDU3MTdlZSwgMHg0NWFkNjRmMywgMHg3ZTJiZmQ4NywKLQkweDRjZmNlNTIyLCAweGI3ODk1ZmU5LCAweDE2ZmY2OWJmLCAweGViZWNkZmU4LCAweDBmZGRlMDFmLCAweGRiMjU3ZGUxLAotCTB4NmUzOWYyNDYsIDB4NmQyZjcyYjIsIDB4YjJhM2QxMTEsIDB4NmY4MDhiOWUsIDB4MWY0NTFmZTgsIDB4NzM5YmVlMGEsCi0JMHg3ZTdjODFjYiwgMHhmNzQ2ZGRmZSwgMHhmOTQzZjJjYywgMHg1YzQ1ZjIzYywgMHg0ZjEwN2U3MywgMHhiZjcyYTRjNywKLQkweDBlNTRjYWNjLCAweDJhOTE2NmI3LCAweDU0OWJlYjdjLCAweGM4NTRkOGZiLCAweGYyM2FhN2I3LCAweDQyZGNhOTUzLAotCTB4ZGFlNGI5ZjgsIDB4YTg4YzgwN2QsIDB4ZWVmODNlZjYsIDB4YmRmODhmZTIsIDB4MGY0MDJiYmIsIDB4YmU3ZTdmYzgsCi0JMHhhOTI2YjI0OCwgMHhlNzhlMjJmNCwgMHhlMzA4YmM1NSwgMHg0NjhjNGUxZiwgMHg2ZGVjYjgzOCwgMHhjZTc4OTE2OSwKLQkweGNlNmJlOWNlLCAweGM5MzU5MzUyLCAweGVjMmU0ZmRmLCAweGM0ZGIwYzJmLCAweGQxNTI5YzczLCAweDRhNTJjNGJlLAotCTB4NGIxYzE1ZjcsIDB4ZDdlOGFkMjMsIDB4NDg3YTQyYWYsIDB4MDdmZTM5YjgsIDB4ZGJmYzNkZTIsIDB4Yzk1NmY4ODIsCi0JMHhkZTdlMzYwYywgMHhhNmRkZjgxZSwgMHg0MTdiM2Q0NSwgMHgwOWM0NWQwMCwgMHg0ODc1YWQzYywgMHhmYjU5OGU3NCwKLQkweGI5ZmI5NmJkLCAweGQ3ZTQ0OTY2LCAweDc5MGExMDdhLCAweDU3YThiN2JjLCAweGEzZTI4NjMyLCAweDlkMmM4NDFlLAotCTB4MTdmNGQ1MDMsIDB4ZTlmZGFmZTcsIDB4YjEwMWVhN2MsIDB4ZGM0NTA3ZmUsIDB4Mjc5ZDIxYzAsIDB4ODczMGZkMWUsCi0JMHhjZGY5ZjgyYSwgMHg3M2ExZTYwYywgMHg4ZGFjNTllMiwgMHg5NWMxMTNkMiwgMHhiOWQ0YmQ3YiwgMHhkMWRhMzA2YiwKLQkweGU0MGMzYTlmLCAweGI1NWRhOWZmLCAweDZiZjkwNDM1LCAweGMxNjU1YjE2LCAweDkzMjAyMzczLCAweGJjOGMzZmVkLAotCTB4NzgxMTllYjEsIDB4YmRjNGE0YmUsIDB4OWVkY2ZiMmEsIDB4ZjExYWI4NWEsIDB4NTFlYzFjZTAsIDB4ZGJlYjg4ZjQsCi0JMHg5N2IyN2Y5NywgMHgxZjNhNjllMiwgMHg0M2RhN2Q3ZCwgMHgxZTliZWQwYywgMHg1YjI4Nzc4YSwgMHhlZTlhM2MzNCwKLQkweDViNThiODU1LCAweDdmNmZhZTVhLCAweGY2NTRmZDk1LCAweGFhYWNjYTBmLCAweDBjYjU4NTdkLCAweDY3NGNmODAyLAotCTB4ZTk1ZWI5M2QsIDB4YzBhOWZiZTYsIDB4MzNkNzRlMzksIDB4ZjIwOTQxMTUsIDB4ZTA1MGY4OGIsIDB4YWY3MDJiM2UsCi0JMHgzZGM0OGI2NCwgMHg2NzQ3NDVhMCwgMHg1Nzg3ZmQ0MCwgMHg0ZmE4YWM2OSwgMHgzN2VmYjc1ZSwgMHg4OWFmMWZkOSwKLQkweDQ4ODZmMjdmLCAweDY4ZGVhNzY0LCAweGZhN2Q5NGJmLCAweDc0MmZiOGI5LCAweDNiYjc4YzMyLCAweGZjOTk3M2Y5LAotCTB4ZmJkYmZmN2QsIDB4NjNhYTRkZjUsIDB4M2JjOTJhN2YsIDB4MWI3NDlmNGIsIDB4YTIzN2E3NDgsIDB4MDM0YjM5Y2IsCi0JMHg0ZTgwMzdlOCwgMHgwZGE1ZDFhZiwgMHgzZmRiZjNmZSwgMHhhMjUwZDJjNywgMHg5ZDdmNjU0NywgMHg1MTdmYjA1NiwKLQkweGQ4ODRiNWZlLCAweGZkZmFlY2RjLCAweGU3MTYzYjQ0LCAweGIxMjhkNjUzLCAweGExNWJhNDE3LCAweDdiYjI3NmQ3LAotCTB4NzAwYmY3MDMsIDB4ZTBmMjhlYzUsIDB4NTUzYTAwZjMsIDB4N2M0NmYxZjYsIDB4Mjc3YmUxNGIsIDB4YmI5ZTVjZjQsCi0JMHhmY2U5OTMxZSwgMHg3YmM5MGJmMCwgMHgyYzdjODJjOCwgMHhkN2RkMzhmZCwgMHhiMTdmZWE1MiwgMHgyM2YwNmRiYywKLQkweDYzMTdjZmQwLCAweGNmNDI3YTc4LCAweGJjOTRmOWUzLCAweGU1ZmI4ODNkLCAweGI4MzE4OGJlLCAweDQ4NWZmZDcwLAotCTB4OWU1MTYzZTksIDB4YzdmZDIxN2YsIDB4YTUxZjNjZmQsIDB4NDY3ZTYyYjcsIDB4ZTQwYjU4ZDQsIDB4M2YxNGU4NGYsCi0JMHg4N2MxMGFkZSwgMHgzYzdmZGNkZCwgMHg1NDcxZjZlMywgMHgzMmVmNjI0ZiwgMHgyZmY1YmY3ZiwgMHhjZjViZjIyNSwKLQkweGYzOGU5NjAxLCAweDVjZmIxZjhiLCAweDlmOTQwMjQxLCAweDcwZTI1NWZhLCAweGFjNWI1ZjNhLCAweDYyZTUwZmVlLAotCTB4YjhmZmY5M2MsIDB4ZDVmNzc2ZGQsIDB4ODY1MTVkMWUsIDB4ZjI2YjljNmYsIDB4NWU2NWRjNmMsIDB4ZjY0YzljNWUsCi0JMHhhZDgwODk0MSwgMHhkYjlkM2MzZCwgMHhjZjdlNmVhOSwgMHhiZDM3OTE1MCwgMHhmYjM3NWY4NywgMHgwYmNmMjdmYiwKLQkweDdjYjVlZTdmLCAweGZlNzE5M2ZhLCAweGI2YzBlYWYyLCAweDlmYjA1MjI3LCAweDBiMmJiZDEyLCAweGFiOWYxYmVmLAotCTB4Y2ExYzQzZmQsIDB4OGY2ZDkyZjUsIDB4Yjk5ZTkwYTcsIDB4ZGEwYTVkNmQsIDB4OWY1YjI1MGIsIDB4M2U1M2IxNDgsCi0JMHg4YWY2NDFkOCwgMHg3M2JiYWY5NiwgMHhhZjJmMWRmNywgMHhlYjZiZDNmNywgMHgzZjllYjlkMywgMHgwZjIwNzhjYiwKLQkweDQzMDljZGY1LCAweDNmNDZhZDJmLCAweDI0YWZmMjc4LCAweGQ2ZjQ0YzhiLCAweGUwZTUxYWI2LCAweGVmOGUzNGVjLAotCTB4N2M0OGM2YWMsIDB4YTJmZGUxOTksIDB4YmVmZWQ4ZmUsIDB4NDdjN2U0M2EsIDB4MTVkMmJlZDIsIDB4MzRlY2JkNDMsCi0JMHgzNjYzYzEyZCwgMHg4Mjg4NmY3MywgMHg2NGFkNmNlZiwgMHhmNWZlNjdhOSwgMHg2MTM5ZDMwNywgMHgxZjQ5MmFkMSwKLQkweDViZTUxZmRkLCAweGUzYjQ3MGQ4LCAweDY4YzJkM2IyLCAweDBlZDc3MzFlLCAweGQ5ZjJjNTZmLCAweDA0Zjk3OGNiLAotCTB4MzhmMWJiODMsIDB4OWU5Y2YzZjYsIDB4ODA0MDY3ZTIsIDB4OWJjN2Y4MjUsIDB4M2I3MWE3NjcsIDB4ODkwNmNlNmEsCi0JMHg5YzY1NmJmNCwgMHg2YjIzNjdlNCwgMHg5ZDk5ZDdmZCwgMHgzOWYzZTQyNiwgMHhlNTIxZjEzNywgMHg2NWE0ZGIxZSwKLQkweDg2OGRkZWM3LCAweDFkNmEwZjdlLCAweGY3YzFhNjc3LCAweDQ5OWNjZmEzLCAweDJlMzMzZTQyLCAweGRhMDY3Y2ZjLAotCTB4Yzc3YWM5MTksIDB4ZWViOGE1MGIsIDB4Y2I4YTA2YWQsIDB4OTU4YWNlY2EsIDB4ODhmZWEwYTMsIDB4OGQzY2M3NDcsCi0JMHg0NTY1OWNlOSwgMHgzZmEyOTQyZiwgMHgzODcxYjM3NSwgMHhmM2U1NmYwZiwgMHgzNTU5MmM1YiwgMHg1M2JlM2Y2OCwKLQkweDg0NWNkMGZiLCAweDhjNjdiOWRiLCAweGFlMmYxZmE0LCAweDNmNjI4ZDRkLCAweDAyYmZlZjYyLCAweDYxNGQ2ZmZiLAotCTB4ZmJkODA3NmMsIDB4N2IwMmVlOTgsIDB4ZWQ0YmVmMWYsIDB4ZmNhNjhlYWUsIDB4OTRhZGFiMWYsIDB4YmYxY2U5YjIsCi0JMHgxZjM4NWIxNiwgMHgyMzdmNTFiOSwgMHgwMmI3OGVjMSwgMHgwYjVlYzkxZiwgMHg3OGZlODFmZCwgMHgxMDdmNmY0NiwKLQkweGE0M2M5OWQ3LCAweGIxM2FlYjYyLCAweDNmNjg2NGFlLCAweDBmN2YxNWRjLCAweGRkN2IyMWMyLCAweDVhYThhZDIzLAotCTB4ZTdlMzQ5OGUsIDB4NWYxYzFmN2EsIDB4ZjFmYTQ3MWIsIDB4NGE5NzhlYjIsIDB4YjQ4NmZiZTEsIDB4ZGVkOGQ5YzIsCi0JMHhkOTMyZTViOCwgMHgzZjM0ZWZlZiwgMHg1ZGUxMWIzZSwgMHhkN2MwZDViMiwgMHhlZTdkZDYyNywgMHgxN2E4OTQ5OSwKLQkweGZiZDc3ZmEwLCAweGFiYTdiMjNhLCAweGI0YmM3NGI2LCAweDFiNzlkMjBlLCAweGUzZmJkMTFlLCAweDc3YWVhZGZiLAotCTB4Y2RjZjk4OTYsIDB4NzA0NmVhZTgsIDB4ZDVkMzlmZjgsIDB4M2Y0NDcxMTMsIDB4MzJhZTgxNWIsIDB4YWFiYTc1ZmUsCi0JMHhlMDljYjY1YSwgMHhlMTVhNWFmNywgMHg5ZmM4MzRlYSwgMHg5MGUyYjlkMywgMHhmZmE1Y2U5ZSwgMHhiNWRjZjA4NCwKLQkweDJiZjgyMjVmLCAweGJmNjk1NWZjLCAweDliZGI4ZDMyLCAweDA2Y2YxYWU1LCAweDdmMDRlZmQyLCAweDNhMmMxNmZkLAotCTB4ZTY4MWVmODQsIDB4ZGZhODI5YjMsIDB4ZTMzNGRiN2UsIDB4YWZiZGQ3NDcsIDB4ZDIzM2JmOWEsIDB4N2ZmNWYwMDQsCi0JMHg3MzQ5NDJjNywgMHgxYjQ0OGVmNSwgMHhjNDU3MmZhYywgMHhkZjdlMDdkZCwgMHhjZTUxYTY5ZCwgMHhlMDVlNDhmMSwKLQkweGFlMmZjOTNmLCAweGQ2MjYwMmEyLCAweDkyZTUxYzJmLCAweDdiNDIwZGU0LCAweGYzZGVlOWFhLCAweDM3OTQ1MGRhLAotCTB4YWQ1MmZiMTIsIDB4ZmQyZmIyMWYsIDB4ZTY4ZGVkZTQsIDB4MTJiNGIzN2IsIDB4ZjhmYWQxZmIsIDB4MzUyN2VkZWUsCi0JMHhlZTQzZjdhYSwgMHhiZDUyMGY2OCwgMHg4ZWNkNzFjNywgMHg5ZDNkMzI4MCwgMHgyYWQ0YzRhMywgMHhiZjE4ZjZmMSwKLQkweDRlOWNkNWQzLCAweGM1ZTdmZGYxLCAweDdkYWVhMjdkLCAweDNmNzEyZjYwLCAweGRlZmQ5MzA5LCAweGRjZGYzODM1LAotCTB4MzY3Yzg1OTksIDB4NmY5NWJkNzAsIDB4Mzg3ZTEyNzYsIDB4NGNiZjFlOWIsIDB4ZjhkMzY0ZjYsIDB4OWJhY2RhZjMsCi0JMHhiNmMwZmZhZiwgMHhlMjY3N2E0ZSwgMHgxNzNkYWViYywgMHg3ZDJlYTJlZCwgMHg0M2VlMTY3YiwgMHg5ZjljNWJlNSwKLQkweGEwZTE0ZmZmLCAweGQ1YWU5Nzk0LCAweDY0OWRiZjczLCAweDRmMmVmYjIxLCAweDc5ZjY0OGJlLCAweDlmNmU2MWQ3LAotCTB4NGNiZjM2NTcsIDB4ODViN2I0ZmMsIDB4MzRhYTQ3ZmIsIDB4ZTg1MWY5NmQsIDB4ZDFkNDU4NGYsIDB4MzdhY2ZjOGEsCi0JMHg5NTRiZGI5YSwgMHhlOGZmOWVlMiwgMHhiNTA3MjE0NCwgMHhmZjc4NzEzZCwgMHg5ZjM4OTJlMCwgMHg3YzM0ZWM1NSwKLQkweGI1ZTkwMDM3LCAweDUyNzFlMzRhLCAweDMwNTY1MGRjLCAweDBiOGY3M2MzLCAweDNlNTBjZjQ4LCAweDFhZmM2OTdiLAotCTB4ZWU3M2YzYzQsIDB4M2Y5MDIzMDEsIDB4OGZmNTkwN2UsIDB4ZmRhN2YyNGEsIDB4OTMyMmQ4MjksIDB4ZTJhYjI5N2UsCi0JMHhjM2FkYWY5YSwgMHgxNGMwZjMyZCwgMHhjMWFiZThhNiwgMHgyYWRlZjhhYSwgMHg2NDY3ZjViZCwgMHhlN2UxMWVlZiwKLQkweDM4NDM1NTVlLCAweDM5MzdiMTNkLCAweDNhYWM1NTNkLCAweGViZjY4ZmEwLCAweDllODJhZmVmLCAweGMyNmYzZDE0LAotCTB4NzQ0MWZlOWYsIDB4ZmI2NGNmZjksIDB4YTMzZjIxN2YsIDB4NWZkODZmZmIsIDB4MjRiNzNmNzQsIDB4YmViOTdhODksCi0JMHg4YjczM2U3MywgMHg2NDBiYWZiMCwgMHgyNGQ1NWVmYSwgMHg2MmVmM2MzMywgMHgxZTc0MjFkMSwgMHg1MjM2YzA1ZiwKLQkweGU2MDRlMDljLCAweGIxN2E0ZDE5LCAweDdjMjlmZGI2LCAweDlmZTI2NTg3LCAweDM3MTg5MWU0LCAweDlkMmU3YTA1LAotCTB4MzkwN2U3MWIsIDB4ZThhZTMwOTIsIDB4NzAxMjQ2ODQsIDB4ZjY0ZjY0ZjUsIDB4ZTkzOTY3OTMsIDB4OTY4ZDRlNWMsCi0JMHgzZDYzOTIyNSwgMHhhN2E0YzEzMSwgMHgzMTVlOWY4YywgMHhmYTdmNWZjYiwgMHg0ZmVkYzQ4NywgMHgyNmY0ODdlOCwKLQkweGY3ZTFlZWU2LCAweDU5M2RiYzQwLCAweDRjNjRlZmZlLCAweDIyZjA1M2ZiLCAweDkzY2M4YjkyLCAweDljNmZjZDNkLAotCTB4YTcxZTc0ZmMsIDB4OWRjZjA1NzEsIDB4ODk1NDlmODEsIDB4ZjkzY2NkZjMsIDB4MGVkMTY3ZmIsIDB4OWY5ZmJjNWEsCi0JMHhjNGQwOWRlYiwgMHhjOTcxNGE3ZiwgMHhjMjU4YWY3OCwgMHgxZWZjYmJmYiwgMHhiYjMwNzMzNywgMHg3MzI3ZTkxZCwKLQkweGE5NWZkZDAwLCAweDhjMzEyZGRhLCAweDM2NmNhYjJmLCAweDRkN2Y0NTZjLCAweDEyM2RhZWE1LCAweGQzNWQ3OWYxLAotCTB4ZTdjNDdhMjcsIDB4Y2NlZjNjMmEsIDB4Yjk3ZmY3ZTQsIDB4Zjc0MmRhZmYsIDB4OGMyY2FiYjksIDB4NTM0NTU3ZTQsCi0JMHg0N2U4YTdlYSwgMHhhNWNjMzhhYiwgMHgxOGY2ODU2OCwgMHhiN2M4ZTlkOSwgMHhjNmYyYmM3MSwgMHgzYjk3NjQzZCwKLQkweDcyZWM5Nzk5LCAweDZmMWE4MzY3LCAweGY2ZmJhMzdhLCAweDViYTdlN2EzLCAweDhjNjJlZjU1LCAweDYzZTljY2RmLAotCTB4OWFjM2M2MWEsIDB4NDNmOTM5YTksIDB4ZDU0NzQ3YzcsIDB4YzliYmRmZmEsIDB4YjVmMGU3NGYsIDB4NTFhYjlkY2IsCi0JMHg5MDRlZTk4ZiwgMHg0YThlZjg2YywgMHgxNTZiOTA3NywgMHgxNGFlNDdlYSwgMHhiZjc0ZDdhZSwgMHgwMTdiMmJiZCwKLQkweGY2NzcxN2YxLCAweDA3N2M0Y2Q0LCAweGUzYjFlYjg2LCAweGNhZDI2ZWQ3LCAweGRmMTlmMzdlLCAweGRkN2ZmZGMyLAotCTB4MWY2NGFjNDEsIDB4MTA2M2JiZWQsIDB4MjlmZGM3ZWUsIDB4MzllOTA1ODUsIDB4ZDFjYzdlZjQsIDB4MjM0ZmQwYmIsCi0JMHhhZTA0ZTllZSwgMHg5ZjBhNjhlMywgMHhkZmY0MTFjZiwgMHgzZGU2Zjg2NCwgMHhmMzk2MzYzMSwgMHgzYzI2ZTYzMywKLQkweDYyZjcxNTZhLCAweGE1MTZmODk0LCAweDU3ODExNmZkLCAweDg5MTdlY2Q3LCAweGM0NmU5ZGZiLCAweDA0YmNmMDVmLAotCTB4YmNmMTMyZTMsIDB4MjI5ZGQzMDQsIDB4NGJjZjEzN2UsIDB4ODhhYWZmMzAsIDB4MTJmM2M0ZGYsIDB4MTJmM2M3MmMsCi0JMHhmODhhMzdjYywgMHhjMTJmM2M0ZCwgMHg2MDk3OWUzYywgMHhkZjg4YTZmYSwgMHhhNTUzODIzYywgMHgxYWU2YjNiOCwKLQkweGE0NTY4YmM0LCAweGZjYmU4MWI1LCAweGZjODBmMDg5LCAweDEzZmQ3NTQwLCAweDNmM2E5MmUxLCAweDhiZmFhMjUwLAotCTB4NWM2YjliZDIsIDB4YjRhN2U4MTksIDB4ZmRjNTc5MDgsIDB4MWQ4M2ViOTQsIDB4MmFmODQwYmYsIDB4MTVjZjBlZjcsCi0JMHhlOTBmYmQzYywgMHg4Y2Y4NWM2OCwgMHhiZDVmNDg1OSwgMHhmOTBjMGRmZCwgMHhjNzc0YWVkMCwgMHhmODc3YWMzMiwKLQkweDliNDkzZGYwLCAweGU4OWEzZjg4LCAweGMzYzRmOGZjLCAweDA1Zjc1NTQzLCAweDVjOGRhNGM3LCAweDMxZjkwZDk1LAotCTB4NmJkYzQ5NjYsIDB4NTBhYzM4ZGUsIDB4NWNmMGZiYjEsIDB4NWIyOGE1YmMsIDB4MDU4MmY5Y2IsIDB4ZDkzY2U0ZjUsCi0JMHgyY2UzOGM1OSwgMHg0NDhkMzE4ZSwgMHhkNTNjM2JmZSwgMHgxZmJhNzhmMSwgMHhiODFmY2ViZiwgMHhhMWY1MDkzMCwKLQkweDUzZjU5ZDU2LCAweDNlYmE5N2Y0LCAweDliYjQzMWQyLCAweDUyOWFiZjE0LCAweGU2M2E5MGNmLCAweDNlMzc2YzE5LAotCTB4MDhkNTcxMmQsIDB4MGM4ODFmZWMsIDB4Y2Y1ZDljZjksIDB4NzY3ZTcwMWEsIDB4ZGZjNGIwNGQsIDB4OTE2YWIwOGQsCi0JMHhmNjIzM2MwZiwgMHhlYjk1YWM3YiwgMHg1NWJkNWVjNSwgMHg3Njc2OGUxYiwgMHg3OGZlOThkMCwgMHhmNjJhZGE3ZSwKLQkweGRmZDhiMGY3LCAweGYxN2Y2MjIzLCAweDk2OWM2OWJjLCAweDhhNjEzNzlmLCAweDJhOTg0ZGU3LCAweGQyYzc1YTcxLAotCTB4Mjc0YTVmMGEsIDB4MjFjNGY2ZjgsIDB4ZGRiZjE1N2MsIDB4MWEzZWU1MDQsIDB4OWVhMWM0ZjMsIDB4ZDdjMDk5ZjAsCi0JMHg5MTlmMDQwNywgMHg3OWViMGFkMiwgMHgyZmRkMGYzYiwgMHhiNGZlMTcyYywgMHhhMGJlNzE0ZSwgMHhlNzY5NTNhYywKLQkweDlkYzdjZjZiLCAweDY3ZjM4YzMyLCAweDEzZGM0ZmQ2LCAweDE4NWNjNDFiLCAweDhkZTUzYWY3LCAweDc1MDdmMjE4LAotCTB4Y2UzZGY5YjksIDB4YzhkYjQwMjksIDB4ZmMxYmQ4YmYsIDB4NzM0NTlkZmMsIDB4N2FmMjk5M2EsIDB4Mjk1YmQ1MTQsCi0JMHhlMTE1OWFmYywgMHgwNzE4Mjk2ZCwgMHg0OWU4MjVkZiwgMHg3NmY3MmJjOSwgMHhkZTQwNDYyYiwgMHhhZmFiOGJlYywKLQkweDgyOTZkMjk4LCAweDkyNWRmNTcxLCAweDU0Nzg4MzQ5LCAweDNmN2Y5NWIxLCAweDIyYWRlODJlLCAweGJjYTdmNDQxLAotCTB4YzRmNDYwODcsIDB4ZWY3NDNlZTEsIDB4ZWYwZTIzN2YsIDB4N2IzN2FkODksIDB4ZWY3ZTcwMTcsIDB4OThmMmY3ZTUsCi0JMHg4NGUzMDUzNywgMHgyOWNmMjUzYSwgMHhkZmFkODc4YywgMHg4YzQxZjkzOSwgMHg3OWQ0ZWQ4NywgMHg4ZWZjYzI1ZSwKLQkweGM0MWY1MzlkLCAweDY5NGVkODc4LCAweGZmOGIyOWNmLCAweDM4OWUwMWY3LCAweGRmYWQ5NzhjLCAweGY3ZTQ0NTM5LAotCTB4ZjM2NjE0YmMsIDB4M2I1ZWViY2IsIDB4MmJmNWRmODUsIDB4ZjE4ODNlYTYsIDB4ZWUwZDEzYjMsIDB4MmY4OGQ1YzMsCi0JMHg2NTc4ZTQ3ZiwgMHgwY2Y3YmRkYSwgMHg5OWJjYTdjMiwgMHg3NzYzZWJlYiwgMHgxYWY4YmRlZiwgMHgyMWJkZTNjYSwKLQkweDU1ZmY2ZTc0LCAweDdiYzEzYzdhLCAweDFiMmJmMzY1LCAweGY2YmFjZjEwLCAweGQ2MGU4OGU4LCAweGQyZjI3YzM3LAotCTB4ODE5ZWE5YWYsIDB4Njg5YjJiOWUsIDB4NmJhMzY0ZjAsIDB4OTc5ZGQ1ZTQsIDB4Mjc3MWMwMWYsIDB4YzFiZTdiMDYsCi0JMHhjYzg2OWZmYywgMHg4YzRjNzlhNiwgMHhlZWZjNzRlMCwgMHgzMTA3YTI5MCwgMHhlZjZiYmQ5ZSwgMHhlZTkwYzdlZSwKLQkweGZjNjNmNjI2LCAweDEzMmVmNWRlLCAweGViZDk0ZmVkLCAweGFlZDBlM2U5LCAweDliNjkwYWVmLCAweGVlNTdmZDhkLAotCTB4ZmRmM2YwMzQsIDB4YmRlOGEzZDcsIDB4ZWU3NDllODgsIDB4YjIxZDJlNmYsIDB4YWJlNTBlMzEsIDB4ZGIxZGNkZTYsCi0JMHhjNjdlOGQ3ZSwgMHg2ZjNhMjY5ZCwgMHhmYWU3MGFhOSwgMHg5YjVjOTk1ZCwgMHhkZmVkMDhmYiwgMHg4MGZlZGJjYiwKLQkweGEyNjFkZWYzLCAweGY0NTJjZmYzLCAweDc0YmU0MGFkLCAweDE3YmYzMjViLCAweDY2YWZjZmZlLCAweGM5ZTQzZWUzLAotCTB4Y2E3ZWU4NWIsIDB4MGQyNjc1MzcsIDB4ZGViOGUxYzIsIDB4ODNlZjBmZGUsIDB4YzhlYjhlYjgsIDB4ZjkxNTJjY2UsCi0JMHg3YzExMTNkMiwgMHhmOWVkYzEzZSwgMHgzN2ZkN2ZiNCwgMHgyZDdjYTFjNiwgMHhmZGU1Zjg4YiwgMHhmMjg5ZWYzOCwKLQkweGNlZDA5N2M2LCAweGY3ZjBhZjYxLCAweDAwZWZjZWNkLCAweGYzYmI0MWI4LCAweDBlOGEzYWY1LCAweDQyMTFkYWVkLAotCTB4YTUzYmI2ZjcsIDB4ZGRmMWIzOGQsIDB4YWYzZDU3MGMsIDB4NDhkYTY5ZDcsIDB4YTdkNTc0ZjAsIDB4NzZiZGY3ZjIsCi0JMHhiMGMzYTc0MCwgMHhmOTU1MjZkZSwgMHhiMjU3ZmFmOSwgMHhiMGJkMGVkMCwgMHhhM2Q5MjI3MywgMHhmNDJiOWUwYSwKLQkweDc4MTc1NjUyLCAweGFmZGY4YzJmLCAweDMzN2YxMzJjLCAweGZkOTk4YjhiLCAweGY2MTc0YWZjLCAweDAyZjVkZjNkLAotCTB4ZDBiZmI1ZjMsIDB4YzhmYmEzYTAsIDB4MGFiNjA2YTUsIDB4N2ExNTcxZTMsIDB4YjdiZDhiMjgsIDB4YTY1N2Q3MDAsCi0JMHg3ZDQxNGRhOSwgMHhmYjY0NzRhNSwgMHhmMzhiYTQ2YywgMHg4NjhjNjYyNiwgMHgzOTA4MWY3YSwgMHg3Y2I4ZDY1NSwKLQkweDM3YmRlYTMyLCAweDQzMWRjZjlhLCAweDU2ZmExZjM4LCAweDRkYjdlMWQwLCAweDc5ZmZiNzI2LCAweGI3ZmE2MDVmLAotCTB4NTBmZDY2NmEsIDB4N2NmZmNiZWIsIDB4ZGM5ZWZhOTEsIDB4MTM4ZjdhMDcsIDB4NzBjYWIzZWQsIDB4NDE0ZTNmY2UsCi0JMHg1ZmUwMDZmZCwgMHhmY2UxMGZiNywgMHg3NTUyY2U2MiwgMHgzYzIxOGNmZCwgMHhkZjUyYjEwZSwgMHg0ZWYyODI5ZSwKLQkweDg4N2QzZmU5LCAweGRhODNlYjg1LCAweDJhMjc3YTc2LCAweDU5NDRkZGIwLCAweGZjNWQ5YmYwLCAweGEzNTk2OWRlLAotCTB4MWRmNzQxZDQsIDB4M2U5MWE0MTAsIDB4NWQxOTk2NzgsIDB4ZTlkMzhjNmUsIDB4NzNhMjFmNmIsIDB4YmRlMDNlYzUsCi0JMHgzNGYxMjE4MiwgMHg4OTgzNTk1ZSwgMHgwNzk3MmRlZSwgMHg3ZWEyODdiNSwgMHgwZjY5MGNlNCwgMHhlYmE3YmQ0NSwKLQkweDhiZGU5OTRkLCAweGFmZWJlZGM0LCAweDFiZTA5ZmY0LCAweDk2MTdmMTRmLCAweDUzNzY3NDdhLCAweDcyYzFlMzVmLAotCTB4ODg1ZTJlZDAsIDB4M2UyODAzN2YsIDB4ZWI0MDkyMWIsIDB4ZTYwYTY5MmUsIDB4ZWQyZGE0ZjcsIDB4ZjAzODZmNzQsCi0JMHhkM2FlMjExZSwgMHg1ZDhmNDdlMiwgMHhmYTQ3MmY0ZCwgMHg4N2IzZTdkYiwgMHg1N2ZmMGJjNCwgMHhmNzRkZDEwNywKLQkweDQzOGNiZjNmLCAweGIwZDMyODNjLCAweDc4NWU3ODU1LCAweDE1ZjdlMjQxLCAweDE1Zjc0ZjIwLCAweGM3NzM4ODJlLAotCTB4NDFjY2VmYjIsIDB4YmUxNzNmODgsIDB4NzcxZDEyNzUsIDB4ZTdjNGVkNDksIDB4ODhhYWJiY2MsIDB4ZGFlOTc0M2YsCi0JMHg0MzQ5Y2Y4OSwgMHhhZTdjNDE3ZiwgMHgzNjdkYWMyYiwgMHhkMGYzMmRmMiwgMHg0YzdiZmMzNSwgMHg0ZmJjNmNmYiwKLQkweGM4ODg2MTczLCAweGY3MjQ2NjBmLCAweDQwZGFlZTA3LCAweGNjYTI2NGZjLCAweGNiZDgxOGUzLCAweDBiZjcwYjNhLAotCTB4MTQyZjc4NzEsIDB4ZWQ2YzYyNzAsIDB4M2JiMjZhODksIDB4OGZkNDU2NzQsIDB4NDI0YTg3NjIsIDB4ZDZmYmQ3ZmYsCi0JMHhhOWU4ZmIyZiwgMHgzNzc3NTk4YiwgMHhmMDk2N2QyMiwgMHg5ZjQwNjI3NywgMHhmNTBkNzg2YSwgMHhmNDkxMTliZSwKLQkweGRjMjA0ZGNlLCAweGZlYmU3Mzk0LCAweDgwNWY3ZmUxLCAweDcxMGE2NGZiLCAweGU3ODIxY2FjLCAweDY0ZWQxOWQ1LAotCTB4OTNiNjAwNTcsIDB4YjZmOTVlZmUsIDB4NmVjYmVjODEsIDB4ZTQzNmNmNWQsIDB4Yzc2NjFkNWYsIDB4YTljZjU4ZTMsCi0JMHgyZDkzNWI2ZiwgMHhmNmZhN2RlMSwgMHg5YmRmM2M1NiwgMHg3YmUzZGNhMCwgMHg1NzViZTM4NSwgMHg5ZWZjY2JjNiwKLQkweDdjMjczODgyLCAweGJlMDNlYzRlLCAweGY4OGI1ODgxLCAweDdlN2RmMTIxLCAweDBmZjVlOWE3LCAweGI1NzRkZjkxLAotCTB4MGU5ZjEyMjUsIDB4NGRmM2E3YTQsIDB4MGE3YmQzNGYsIDB4YmJhZTQxMjcsIDB4OTNmZmVjZmMsIDB4NzlkMGFmNDUsCi0JMHhjMzhjNzRmYywgMHgzZjdmNWYzMCwgMHhhOWZiZjdiNSwgMHgwZGIyMDc2NCwgMHg4Zjg4ZTU3ZSwgMHgyMDdjZWEzNSwKLQkweGJkMmYxMDVjLCAweDExNzAzYTJhLCAweDViYTc4ZmRjLCAweDYzYTNiYmY4LCAweDgyMWRlOGRiLCAweDkwMjlmOTZiLAotCTB4MDdmMmZkOTcsIDB4ZjUwMWYyMDMsIDB4ZWEzYjVlZjEsIDB4MmY1MWM3MGYsIDB4ZjYwZTM4NDAsIDB4N2RiYjIwOWUsCi0JMHg1ZDkzOGYzNywgMHhmMjhkNzIwOSwgMHg5Y2U5ODM3YiwgMHhlNDFiYjM1OCwgMHhiNzJlN2Y1NiwgMHg4Nzk0NWU1MCwKLQkweGFhYmY5MWI2LCAweGNlODFhZjZiLCAweDlmMzQ1NjM3LCAweDAzZjVjMzhkLCAweGE2NWY5MjNlLCAweDQ4OGRmOWJjLAotCTB4MTJiZmU3YjQsIDB4YzdjODAzNzYsIDB4ZDk0YjhhNDgsIDB4ZjY4OTFjZGIsIDB4ZDRlZTUyODcsIDB4N2M0NDUyNzgsCi0JMHgwZmYyMTY3YywgMHhmNjQyYmNhNSwgMHg1NTNkZDBhNiwgMHgzOWRlOGRhOSwgMHg0ZGU3MGFmOCwgMHg2MzJmMjFmNSwKLQkweDljM2FkMTllLCAweGQ2N2JhNzEyLCAweDBhNmJkZmNjLCAweDgyMTNiN2RjLCAweGEwN2YwMTlmLCAweGJjNTcyNzc3LAotCTB4MGEwNWZkYzksIDB4N2MxNTI4M2YsIDB4Njc5NjIwZTUsIDB4MjhiN2ZhNzAsIDB4ZGU3ODQzZTcsIDB4MDdkZjc0ODMsCi0JMHhlMTQwNzg5ZiwgMHhmOTExNmM3YiwgMHhiMTBmOGU3MywgMHhmNjhhYjg3MiwgMHgzN2Y3MmZkNCwgMHhiN2I4YjhmMSwKLQkweDMyMTJiMzNhLCAweGRhZjU5ZGIwLCAweGZjNmI4ZjdkLCAweDVmYzdkMTI4LCAweDEzNDQwZjkwLCAweDhiYTE1ODFmLAotCTB4YmQ5NTc1ODQsIDB4M2FiYmQxMjQsIDB4ZTc5NmIzYTUsIDB4NTBiNjc1NDMsIDB4ZTdiZDA4ZmIsIDB4YWU3MTgyNTksCi0JMHgxNWU3ZWJlNiwgMHg0MzE1NDc4OCwgMHgzNGNhOWMzOCwgMHhkYjJlZWVkYywgMHhjZjM5ZDEyNiwgMHgzZjNmMWQwNSwKLQkweDcxNDM3ZTAzLCAweDJkYzcwYmY0LCAweDliZmE0N2NmLCAweGVmNDJiZmRmLCAweGFjZGYxZjZmLCAweDViZWVlYmZmLAotCTB4MWY5ZTVhMmYsIDB4OTc5ZDA3ZDUsIDB4M2FkNGRkMmQsIDB4NWZkZjVkODAsIDB4M2YzNmEzYTksIDB4Yjk3ZDdhZDIsCi0JMHgyNjBiZWYzMiwgMHg3NTYzOWU2NSwgMHgzMWUxZmMwMywgMHhiZTNlNzk3ZCwgMHhmOGQwYjhmYiwgMHhhZjgzYzJhZiwKLQkweGMxYjM0MmZiLCAweGUwMTc3MjhiLCAweDc3YjVlNzRiLCAweGYyYTQ1ZDVmLCAweGJmYWNkZWFiLCAweDczYTZlNjUyLAotCTB4M2ZjZDFiOGYsIDB4ZGU0YTc1MzAsIDB4MGFkNzE0MTMsIDB4NzQ0ZjU1ZjQsIDB4MzdlMzc0MDYsIDB4MDI0MzYzZGUsCi0JMHg0NTI1MTFmYywgMHgxNTdiZDFiNywgMHhmY2RiYTI4ZSwgMHgyOTgxMTFmZCwgMHgxYTgxY2EzMCwgMHg1MTcwZDk4YSwKLQkweGRiMzg3NDBhLCAweDk0M2MwN2Q2LCAweGI5NDM4OWZhLCAweDgxMzFmNTVmLCAweDk2MjcwM2M3LCAweDIzMWFmZjNmLAotCTB4ZTg2ZDhlM2YsIDB4YzdkZjFiODAsIDB4ZmZmMDQzYjgsIDB4NzE4ZmJlNWIsIDB4YjdhZjMwNGYsIDB4NTc0MTY0ZGYsCi0JMHhiZmZlZjc0YiwgMHg3YmI4M2Y5MywgMHgzZjNhNzliNSwgMHgxOGIzMzA2NywgMHg5ZDFhZGVmOCwgMHhlZmRmZDViOSwKLQkweGI3Yjg4OWZiLCAweGU5OTZmNzgwLCAweGVlOWE3OWZlLCAweDE5NDlmZGM3LCAweDQ5ZmNkNzIxLCAweDA0NjQ2ZmE0LAotCTB4NTc0YWY5ZDMsIDB4NmY5MjE1ZDMsIDB4MTYzOTJkZGQsIDB4NmFlOTA3M2MsIDB4ZGU5MTliNzMsIDB4NWZmOWZlYWEsCi0JMHhiYjg3Mjg5MSwgMHhiOGE2YmU1YSwgMHhjZmVmYWViMCwgMHgzYWQ4YmM1MiwgMHhiMDc3YjcxMSwgMHhiNTViYzQ0OSwKLQkweGJjYjA0MzU5LCAweDdjYWJlMGJiLCAweGE0NWViN2FjLCAweGY3MDI3ZjNlLCAweGUyYTkyYmE3LCAweDlmN2JmMDJmLAotCTB4MWNkMGQ2NjcsIDB4ZGQ2YjNmN2MsIDB4M2UzMGQ5NTMsIDB4NDVjYzZlMzMsIDB4NzM3NjAwN2UsIDB4OWYwZGNhMzgsCi0JMHhmNTFhYzExZiwgMHhlODhiZjE2MywgMHg3MmQyNDg0NywgMHhlOGE2MDIzZiwgMHhlMjRhNDg0NywgMHhhM2NjMDQ3ZSwKLQkweGY0NTMwMTFmLCAweGZhMzk2MDIzLCAweDdlOGYzMDExLCAweDFmYTNjYzA0LCAweDQ3ZThmMzAxLCAweDA4ZmQxNGMwLAotCTB4Yjg4ZGZlNTgsIDB4OGMwZGQxMmYsIDB4Y2QzOWZiOGIsIDB4NjA5N2Y3YzQsIDB4NmZjMDMwZmMsIDB4NzhiZjc4ODksCi0JMHg3NzdmM2Q0OSwgMHhhMDRiZWYwNywgMHg3ZTJlYmJmYywgMHhjZmM0NTFhNiwgMHhmOWQxMzY3OCwgMHhkOTVlZDU1ZiwKLQkweGY3ODQ1Yjg2LCAweDE4Mjk1YzJhLCAweDA4NzNkMzQ3LCAweDdiNTUzZmZkLCAweDJiNzJkYjI0LCAweDc5YTc0Zjk2LAotCTB4ZjljOTZiYWMsIDB4ZDc5NjE2NzQsIDB4NWVmODZjZWIsIDB4ZGYxM2UwMTYsIDB4ZTI4OTVhY2YsIDB4ZWE1YWNhOTgsCi0JMHgyZTM1NWZjOSwgMHhjZGM1M2Y2YSwgMHgwYzQ4MzU1NywgMHgwY2QzYWNmZCwgMHg5MGFlNGVkYywgMHg5ZDA0NzRhMSwKLQkweDVkMWU5Mjk3LCAweGZiMjM2ODYxLCAweDY0YmI3Y2E1LCAweDVjOWZiZmY1LCAweGYxMzJlYTM1LCAweDc4ZGNlNTA5LAotCTB4MmFjNGZmMDEsIDB4YjE2YjI2M2MsIDB4NzlkYWNlNGEsIDB4NjlmZTEzZmMsIDB4OTEzN2M1ZjUsIDB4MTdhN2UyMWUsCi0JMHg2NGYzYzAyZCwgMHhhN2JmOTcyYywgMHg2MDE1MWI3YiwgMHgzNzQ4NDZlMCwgMHg2YjJhN2Y4ZiwgMHhlMzA2YjNkOSwKLQkweDBlMzU2ZWE2LCAweGUyYTFlNWVhLCAweGJmMzg3OGZjLCAweDRjZjA1MThmLCAweDMwYmRlZWYxLCAweDAzNDZlZjVlLAotCTB4ZDJiYjI5ZTksIDB4YmYxMTNiMWQsIDB4ZTRlY2U5MGUsIDB4ZGZiNDM5NmYsIDB4ZTlkNjc2NDQsIDB4N2YyYWE5NGQsCi0JMHg4ODNjOWU0YiwgMHg3NThiMWRmYywgMHhlMWVmYzkxMiwgMHhiNjBmMGVhOSwgMHgxZTYwYTdiYiwgMHg4OWVlNTlmOSwKLQkweDU2M2EyMTBlLCAweDVhOTBkMGYwLCAweDgxZjIxYWY4LCAweGYyNTY5OWM1LCAweGQ4MTllNTZmLCAweDExM2ZhODJmLAotCTB4NTNlY2E1NTcsIDB4ZGU4OTRhZGUsIDB4MzY2MjJlNGQsIDB4YzczMDVmYmEsIDB4NTM4OWRmY2UsIDB4YzM5Yjc1ZGUsCi0JMHg4MjgzOWM3OCwgMHg0OTM3OGI1NywgMHgzNjRlZGRmYywgMHg1YjNjZTA4OCwgMHhjYjRlNzNjMCwgMHhjNzRlZjQ3YiwKLQkweDU3Nzg4MzNjLCAweGJmY2ZjMzRlLCAweDc4ZjNkNzYzLCAweGMyZjhmOTg2LCAweDgxNzdiZTExLCAweDdjOTMyN2Q4LAotCTB4Y2ExZGJiN2QsIDB4ZTI4M2MxMWQsIDB4OGQ2ZjdlYjgsIDB4OGU4YmZlYzIsIDB4MzczZTI4ZTgsIDB4MTRiZWVhMmYsCi0JMHg3MWY5YzkwNywgMHg3OTIwYzcxNCwgMHgwYzNmY2E2NywgMHhhOWZlMzFmZCwgMHhhNDM4NjM4ZSwgMHhlYjg0MWMyYiwKLQkweDI1M2M0NTZlLCAweGQyODM4ZWZmLCAweDk0MjVkNTIzLCAweDI1MWM3ZTJhLCAweGZmN2JiMDZlLCAweGZjNzA3YjFiLAotCTB4NmVmZTJhYmMsIDB4YzVlZjBkZWMsIDB4M2Y3ZGY1MDUsIDB4ZjAyN2I5NGMsIDB4MGUyOWM2MTksIDB4MWYxZmY1YzAsCi0JMHhjNGRiZWY4OSwgMHhlMWI2Njc3ZSwgMHhmNmEyZjNmYSwgMHg0NGFhYmRkMywgMHg5MzNmZmZkMSwgMHhmZWUwY2YwYiwKLQkweDBiOTk0M2Q4LCAweGNjMzllMWRiLCAweDNlNjc4MDQ2LCAweDNmNDI0MDJlLCAweGY3OGVjN2I5LCAweDRiZjY3YTUzLAotCTB4YmU1ZjhhMTYsIDB4NWE2ZTZmOGUsIDB4NTUyMWYxOGQsIDB4NmJiZDEyNDksIDB4MzFiNDFmOWQsIDB4Y2ZmYTEyMmYsCi0JMHgyMWI3ODg0ZiwgMHhlMjZhYWVkZiwgMHg0ODJlZDY3ZSwgMHhlNWRmYmVmOSwgMHgxOGFhZjdhNiwgMHg4MjZhM2Y3ZiwKLQkweDUzZmJiN2Q4LCAweDNhMWY3ZjFjLCAweDUxM2U1N2MwLCAweGNiNzc1NWQwLCAweDdiYjcxZTE1LCAweDFkNmMzZjczLAotCTB4ZjhjNzNmYmQsIDB4MGZmNDFmN2IsIDB4ZTg3MTM1ZTYsIDB4MmFjN2YyNjAsIDB4MTBkYmQzNzgsIDB4MjZmMTE1YjUsCi0JMHg5YmI3ODMyNCwgMHgwZTk4ZWIzNSwgMHhjZDI5MDZmNSwgMHhmYzgwY2M2MSwgMHhhYmNiZTJlYywgMHg3ZDlkNjkyMywKLQkweGY4OTRjNWZiLCAweDk4YmY0MGY2LCAweGJmZmQ3ZjNmLCAweGIwZmY2Yjg4LCAweDQ3YTUxMTdhLCAweGRhNTI5N2FiLAotCTB4ZWZhMmVkNTYsIDB4Y2I2ZTE3MjAsIDB4NmE3ZjM1YjgsIDB4ZmUxZjQ2NGEsIDB4ZjZiNDY2NTQsIDB4ZjQwYWI5MjMsCi0JMHgwMWQ2ZmRjZCwgMHg2YmEwNTNmZSwgMHhkZjVkMWY4ZCwgMHg3NzM2MTJkMywgMHgzNTFkZWEyZCwgMHgxMjhmN2E3YSwKLQkweDk4OTc4Y2UzLCAweDMyZDgwZjg5LCAweDJhYTNmNGZhLCAweGRmOTMzMzcwLCAweDQ2OTk5N2I1LCAweGE2YzdmYzIwLAotCTB4ZjAzNTZhMjUsIDB4NDkwY2NlZmQsIDB4NzQ4NjVlNzUsIDB4M2E0M2ViODIsIDB4NDRlOTE0YzEsIDB4N2NlZmU3ZWIsCi0JMHg5YzI0MGY1MSwgMHgxNzAwZjVjZCwgMHhkYTI2MDFlOSwgMHg4MWNiMzVkNywgMHhlZWY4NDg3ZiwgMHgzZmM1NDU4ZiwKLQkweDBmZjAwNjJlLCAweGE2MWU1ODMwLCAweDA2MmQ1NWZiLCAweDg5NDY4NzdhLCAweGM5MGIxY2I3LCAweGYwN2QxMWQ1LAotCTB4MjdlNzBmMTMsIDB4M2IzYzgzODMsIDB4NjU3ZmJlZTgsIDB4MWVmM2M1MTAsIDB4M2FmYzcxZDIsIDB4YzljNzhlYjQsCi0JMHhmZTQyYjMxNSwgMHg3Y2Y1ZDBkZSwgMHhjY2NiZWU4NSwgMHhmNTM5ZTg4YiwgMHhlZjNmYTgwNywgMHgzM2U5MzMwOSwKLQkweGU0MTY2MjZiLCAweDI1N2MzYmZlLCAweGUwMTA2NTA3LCAweDRiMmM2YjlkLCAweDliZTBiOGMzLCAweDAzYmJjYWE1LAotCTB4ZDAyMWRlZDcsIDB4MjcxY2Y3OGIsIDB4YWE2YTc3ZjAsIDB4NTk1M2ZlODQsIDB4NTRmYTIxNmMsIDB4NmE1NjYxZWUsCi0JMHhiMDZiMWQzZCwgMHgxZTEwZmY1ZSwgMHhmNDY1YTFlZiwgMHhjZDcxYzhjZSwgMHhhOWVlZmU0MCwgMHgxM2UzYjNhMCwKLQkweDFiOWZjOTEyLCAweGM1ZTNkMmI5LCAweDkzZWU3YjdlLCAweDcxZGE3ZGU4LCAweDgzMWRmY2MxLCAweGYzYTE0ZDNjLAotCTB4YWVmZWY4MTUsIDB4N2Q0N2RmODYsIDB4OTAyOWRmMTEsIDB4NWZiOTVmNzEsIDB4OTNlZjc3YzQsIDB4MDViMTY5ZWIsCi0JMHg3ZmI5NWIyMSwgMHhiM2ZiYmY5OCwgMHgwMGZlMTI1MiwgMHhiNzRiNmVmMSwgMHgxZmRkZTAzYiwgMHgzNzRhZWVmMSwKLQkweDA4ZjU5YzJiLCAweGNhZTk4MWYyLCAweDI3ZDY4ZmZiLCAweGE2YTA3Y2YxLCAweGY3Nzg4ODc0LCAweGNmN2ZlMzg3LAotCTB4ZjkwZGEzNjQsIDB4M2U3MGNkNTksIDB4MDRkMjlhZmYsIDB4YWM5NDhmZWUsIDB4Yjk4ZTUxY2IsIDB4MWM2OGMzN2UsCi0JMHg4MzNmYmJkZiwgMHgxZmIyYmJlOSwgMHhhNzJlM2JjYSwgMHg0M2JmMWM0MywgMHg5ZWY4MTFiZSwgMHhlMTUyYjNjYiwKLQkweDRmZDhmOThjLCAweDI3YWY5ZjI2LCAweDQzZTNmMzk5LCAweGI5M2M4NjMzLCAweGM4MzhlMTBkLCAweGY4N2E4MzlhLAotCTB4Yjk2MTUxZGMsIDB4YWM0N2UwMTIsIDB4ODAwY2I5OTYsIDB4YTY5YmU4N2YsIDB4NjlkNjZlNzcsIDB4YmM2MDJiZGQsCi0JMHgyZjcxNWE0MSwgMHgzZGY4MmI1ZiwgMHg4MjM0MTk3NCwgMHg5MGY1ZGJlYSwgMHgyMTdhN2EyZiwgMHg4YWJjYTNiMywKLQkweDZjNWVmNDY1LCAweDg3OWY5MTkyLCAweDI5ODYzYjQzLCAweDk0NjQ2OWJhLCAweDg1ZmI4YzgzLCAweGZlZjFmYThhLAotCTB4N2I5OGEyOGIsIDB4ZDlmZDQ0ODUsIDB4NjczYzRhMzUsIDB4MDIwZWZlMmUsIDB4YjYxNzNmMjMsIDB4ZWQ0MTFkMGYsCi0JMHhkZWRlMWE1ZCwgMHhiNmY0ODVhZSwgMHg1MWRlZmU0NCwgMHg5ZDAzNmFjZiwgMHgzZTNkMTY4MywgMHhhNGUzZTQ5OCwKLQkweGVkZmJlYWIxLCAweDM4ZjA2N2RmLCAweDk4NWQyNTA1LCAweGY5ZDE1NTY5LCAweDc0ZTk1NWRjLCAweGQ1NzczODllLAotCTB4NDNkNDBhOGMsIDB4NzRjMTBkMWMsIDB4ODFmM2FmMWYsIDB4OWRmMGJiOTcsIDB4YmRkOTcyZjEsIDB4NmJiNDEzZTAsCi0JMHgyMTZmMWQzMiwgMHg1OTIwYjk1ZiwgMHgwYTg1ZWY2NywgMHg0NzdjMWY3MywgMHgwZTMxNzE4ZiwgMHg2ZjRiZTRjZiwKLQkweGVkNzBkY2EyLCAweGJhZWY4YTM5LCAweDRjODBmZmRkLCAweGZjNjdlZmVkLCAweDhhYjY2NDdkLCAweDlmNzkwM2JmLAotCTB4MWEzNmIyZWIsIDB4YjQ2ZmJmZmEsIDB4MGVmMjdlNDQsIDB4ZjUwZTI1OTMsIDB4NWZiMTIyYmEsIDB4MTRmZjgyYWQsCi0JMHg4MjljMTlhZCwgMHg3ODdkZjU3NiwgMHg5Yzg3ZGVjZSwgMHgzZDc5MzI5MSwgMHhmNzZkZmJlNSwgMHg2MzVkOTUzMCwKLQkweDk5MGRkZjEwLCAweDI1YjdiZDdjLCAweDZiYzVlZmYyLCAweGExODkxZDBkLCAweGE5YmNlYTk4LCAweDhkODZkYTkwLAotCTB4NjVmMTE4ZmQsIDB4ZGZjYjAyNTIsIDB4MjVmYzcwOGMsIDB4OTg3NjMzZjcsIDB4OTdjZTk3OTgsIDB4YWUwOTMzZWIsCi0JMHhmMWQzZDYwZSwgMHg2ZWEzYWUzOCwgMHg2M2EzYWQyOCwgMHhkZThlMjU4YywgMHg4YWVmMTBiZiwgMHhmZTcwYjdjZSwKLQkweDhmODYzMWQ0LCAweDFlZDJjYTczLCAweGU5YzE5ZTEyLCAweDlkMTdkZjA3LCAweGViZjRiNjI3LCAweGJhOWYyYmE1LAotCTB4NWJjZGVhMWQsIDB4OTI3YmE0NjYsIDB4NGE5OTlmZjMsIDB4MWFiY2NhNzYsIDB4YjI0N2VlOTksIDB4NDVmN2VhMGQsCi0JMHhlMjc0OWU0MSwgMHgwYmRmMDJmYywgMHgxNDE3N2MwZCwgMHhhMGYxMWNmNywgMHg3ODQ0ODM3OCwgMHg5YjRhZGI3NCwKLQkweDdiZGZjZjFlLCAweDAwOWU4MTM2LCAweGRlY2Q4YmRmLCAweDhhMGJkNDI0LCAweDBhZGIyNjZkLCAweDQzNzc4ZmE5LAotCTB4ZTViODA3YmYsIDB4OGNjYmJiZTIsIDB4NTkyMTI2ZmMsIDB4NmUzOGFiOGUsIDB4N2EyMmM2ZDEsIDB4YzMzODMzYTcsCi0JMHhkYmIwZmU0MSwgMHhmZDQ0MWVjMCwgMHg0ZTRjOGVlNywgMHhiYzAwOTMzZiwgMHhiNjgzY2VmNCwgMHg5ZmVkMDYzZCwKLQkweGFmMWMxOTNkLCAweDUyNWI4NTI2LCAweDI2OTc4NGNjLCAweDNiYmJmNzg2LCAweDljMTQ5Njc0LCAweDkzNmFjNzVmLAotCTB4NDk5ZWY1MDYsIDB4MDI3ZTM4MmIsIDB4MjNiNTE4ZGQsIDB4MDU5ZmJlMzAsIDB4MTExZWZkMjEsIDB4ZDcyZDY3ZWQsCi0JMHg3ZTQyZDYxNiwgMHg5MGVkODgxMCwgMHhlMTliYzQ3MCwgMHgwZThmOWY4NCwgMHhmMTE5ZmM3MywgMHhkODZmZGNlZiwKLQkweGYzOWZlNDI4LCAweGYzZTI2YzM2LCAweGI0Y2ZmYjEyLCAweDllZjBlMzZkLCAweGY4ZmFiOWU1LCAweGEwNTcxODExLAotCTB4YzNhM2MzZTAsIDB4ZmQzMjVhYzYsIDB4ODkwMWUwZjEsIDB4NzNkNjFmZjYsIDB4NmQ4ZGU1MTgsIDB4Y2NjOGRjZDgsCi0JMHgwMDdlNTQwMSwgMHg1OGQyNjNmMSwgMHhlNDIxYzUyZiwgMHhlNzg2NGVjOSwgMHg4Y2QxYmRmOCwgMHgxOTdiZTllMiwKLQkweGI1ZGVkN2E3LCAweDBhNmZlMjVhLCAweDAxZjg1MDlmLCAweGVmMWQ4M2UwLCAweGFkZmIyYWM3LCAweDJiZmY4NWYwLAotCTB4NDNlMDA0M2QsIDB4MWJlMTQ1N2MsIDB4ZjA1MTdmMGEsIDB4ODEzM2UxNGIsIDB4YzAxYjM1NzgsIDB4NmEwOGY3N2MsCi0JMHhlMTRjZmM0ZiwgMHhjZDBlYjg2MywgMHg1MTdmMWYwOCwgMHg3NmI3NTlmNiwgMHhhZGZjODY4YywgMHhlNGYzOWY2MiwKLQkweDQwZGZiYjhiLCAweDQ5OTg5NDM4LCAweDE3MDZiOTZmLCAweDEyZTA5MWIzLCAweGY4NGQ2N2E3LCAweDQ3Y2FlYTNlLAotCTB4NDAyY2Y3MGEsIDB4NDE2ZGZjN2MsIDB4MzMxZmVhM2MsIDB4MThmN2Q0NGIsIDB4N2Q0OGJlN2YsIDB4NTJjZTcxN2YsCi0JMHg1OWM1ZmRmNSwgMHg4NDNlM2Y0YiwgMHg1MDg2YTc3ZSwgMHhiZmRjMDRjNywgMHhmMzNkYmY1MywgMHhmZTUwYTdlMiwKLQkweDkwYmRiZjlmLCAweDhiZWNlZGNjLCAweGI4ZTFjZmY1LCAweDNjYzQ4MmNiLCAweDk2YmNmOWRhLCAweGRjYmU0OWU5LAotCTB4ZmMzMGY0MjYsIDB4OTczMmZiODcsIDB4OGEyZDNhNzEsIDB4ZjI4YTNiMGYsIDB4MjljMjJlNmYsIDB4NjExZmRmMGIsCi0JMHg4OWJmY2YwNCwgMHhmNjI1MzlmZCwgMHhmNzM1NjhhNywgMHgyNGI4NzQzYiwgMHg1ZGNjNDNmMiwgMHhhZDc0ZTgyNSwKLQkweDk3ZjI1ZWZhLCAweDM4M2RhYzMxLCAweGY5N2Y3N2QxLCAweGM0YTRkZmNiLCAweGY3MmI1ZDIxLCAweGY5NmIxZDk1LAotCTB4ZTk2OTY2N2QsIDB4MWM1ZmQyNjEsIDB4YWU1MGZiY2EsIDB4OTZhMWY3ODAsIDB4Y2Y3YmYyYjYsIDB4YzRmYmVhZWQsCi0JMHgzZDc2ZDljMSwgMHhiNzE4MjlmOSwgMHgxZGE2ZTZhMywgMHgxYjM1ZjFlNCwgMHhiMjhhMGIyNSwgMHhiYzVlNTE2MiwKLQkweDU3ZGQ1MjU2LCAweGRmOTMyNDdiLCAweGQwY2M2YjE3LCAweGZhMGJiZjcyLCAweDFmMzg5NDljLCAweDdjMDRiZTNmLAotCTB4MTVjZmVlODMsIDB4NWZhZTFjNmYsIDB4ZTc0N2M3ZTAsIDB4Njk3OWYyOGEsIDB4ZjI5NTRhMWEsIDB4NTcxZTBjYzYsCi0JMHgwMzQ0OGMxYSwgMHg0YjRmYWVmZCwgMHg3ZTI3Y2ZkMCwgMHhhOGJmMjU2NywgMHhkYTZlN2Y1MiwgMHgzN2U4MzU4OCwKLQkweDdmMDFiYjk4LCAweGZlZDdjNzlkLCAweDZhNWE5OTM3LCAweDI2ZjQyOGRmLCAweGZjZjgwZGU3LCAweGZjMmEzOGI1LAotCTB4Mzc5YTBlZjMsIDB4YWY2NWQzZDksIDB4ZGYxNTdhZWUsIDB4ZGNmYjJmYmQsIDB4NmNhNjcyNDAsIDB4Y2Y1ZjM4OTgsCi0JMHhhNTRlZTc3MCwgMHg5ZjdlNjNmMywgMHhmN2VjNTJhYSwgMHg4NDVmNWRiOCwgMHhkNTUwOWRhMiwgMHg4NjcxZGZjOCwKLQkweGNhZDMwM2I0LCAweGVmNjQyNTY1LCAweDFlODBkYTU3LCAweGY3OGZhZmMyLCAweGNmZDVmNzdlLCAweGQ5NWZiOTQzLAotCTB4OWY0MWFiMTUsIDB4YTU5ZGY4ODgsIDB4YzhhZmM2Y2EsIDB4ZGVmY2EwZWYsIDB4MmFiYjYwNTIsIDB4NmU1MGZiZTksCi0JMHhmZjk4NWFiZiwgMHhlZGU0MTFlZiwgMHg1NDlkMTFkNywgMHhiOTdiNzMzNSwgMHhmMjE1ZWY2YSwgMHg1ZmVkNTc5YiwKLQkweDYzZThlOTFkLCAweDEzZGZkN2ZkLCAweGU4ZTJhYmIxLCAweGNiODZkOGFiLCAweDA2ZmUwZjc0LCAweDRjOWVlYWYxLAotCTB4ZWRjM2VlZjEsIDB4NTM4YTc2ZWMsIDB4MmI4YTMyZDcsIDB4MmViYmY2YmEsIDB4OGQxZmU0ZWUsIDB4YWNkYWFjOGYsCi0JMHg1ZWEwNzhhMSwgMHg5ZTFmYjVhZCwgMHhmYjhiNzVjNywgMHhiZWY1ODE1MSwgMHhkNzc2ZTRjZCwgMHg3YzIzYTAyNSwKLQkweDQxYmJhMzc3LCAweGVlOWRmM2E2LCAweGFiYmZlZTA2LCAweDE1YmE3ODZjLCAweDgyNTZhNWVmLCAweDVlYzMwY2UxLAotCTB4ZDk1NDNmYmIsIDB4N2ZhMzMzMjgsIDB4MWZjNjFhZGMsIDB4OWU3OGRjNDUsIDB4ZTg0MmJiZTUsIDB4OGY1Mjk4MWQsCi0JMHhmOTg3YWY2NCwgMHgzNGJkODJmNCwgMHhjNzNlNmZjMCwgMHgxYjk1NWUwNSwgMHgyZmI0YjkzYywgMHgwMzg3ZmU2MiwKLQkweDk2ZDI5ZGY0LCAweDJiOWVlOWE3LCAweGZkMjJlYmQ0LCAweDhjYzE4ZmU0LCAweDFjZjU5MzlmLCAweDZlNzY3OWM1LAotCTB4NWFlNzQ5MTksIDB4OTUzZDllYTUsIDB4MDg2Yzc3ZTQsIDB4MGI5NTc4YTYsIDB4ZTliZGY1M2EsIDB4NTNiYzYyNTMsCi0JMHhhZmVlM2M5OSwgMHhiMTI0ZTMxMywgMHhlOTMyYWJmZCwgMHhhNDRmMzhhNywgMHgzYTkyMGJjNywgMHg2OGI0ZTM4ZSwKLQkweDZkYzA1YTc3LCAweGE1NGJhMDlkLCAweDIzYTdhOTdlLCAweDlmZWEwOTM0LCAweGQyOThmYTZkLCAweGQ0YmY1MTJlLAotCTB4NzI4NTk2ZGMsIDB4MzA2MzZjZjMsIDB4ZGIzZDYzZGQsIDB4YjdmYzg3ZjgsIDB4OWU0YmJjNjAsIDB4M2YyNWZkMzEsCi0JMHg3NGIyOTJmYSwgMHg4OGI2M2Y3YywgMHgwOGVlYjhmYiwgMHg0M2M0Y2Y3MSwgMHg4ODZjZTllYiwgMHhhY2JlZDA5NSwKLQkweDlkNWVmMTEwLCAweDZhODdhZjhkLCAweGZmNWQ3ZTg4LCAweDRkNWRlZmRlLCAweGIxNWRlZWJmLCAweGZlYTA0NmVmLAotCTB4YmQ1NzZjNjIsIDB4ZDViZmY2MmIsIDB4ZmYyOGE1N2YsIDB4ZTMxNDJhNDQsIDB4YjljNWU4ZjQsIDB4MTAxZGZmMzAsCi0JMHhlMTNiYTA4YiwgMHhjYzNkOWQ4ZiwgMHg3ZmRlMTBmYSwgMHhkZmYwMWY2NSwgMHhmZmJkMDMwZCwgMHg2NjhmYjQzOSwKLQkweGVjODIzOWZmLCAweDBmZmRmYzRmLCAweDIxZjM3ZmNjLCAweDNkOWIyZjNmLCAweGU4OTVmMDUyLCAweGQ3ZjQxY2Y2LAotCTB4ZmQ3M2M0NzcsIDB4MjgxNmI5YzEsIDB4MGU1YTQwMTEsIDB4ZjgwMmU1ZjgsIDB4ZTYxYWRkMzksIDB4MmNkMGZjODAsCi0JMHgwMjc1M2Y2ZSwgMHhlMTg3ZWJmZSwgMHhlNThlM2NjOCwgMHhmODc3ZDgxNCwgMHgzNWViOGM5ZSwgMHg0Y2VjOGU3ZSwKLQkweGJkZTBhNmYwLCAweDRmMTE0ZWJlLCAweGE2ZjcwY2UwLCAweDE3YmY0MDQ0LCAweGE3Mzg5ZTA1LCAweGRmZmM1Mzc4LAotCTB4ZjU2ZTc0YTksIDB4NDVjZDNjNTIsIDB4ZGY4NzNmMTEsIDB4MWNlNzlmZDEsIDB4YzQ3NWViYzEsIDB4ZGVlOGJhNWIsCi0JMHg4NjEwZGVjNiwgMHg4ZGU2YWFmYSwgMHg4YWMzYzIxMCwgMHgwZDViNGM1NywgMHhhOGQyNzY3ZSwgMHg1ZjBmYWUyYywKLQkweGFkNzdmM2Q0LCAweDdjZjhkYjVkLCAweDUyMzc0MzRhLCAweDdlMDUxNzNmLCAweGE0NmQwNjk3LCAweGY3MTI5ZGY5LAotCTB4M2NmNTRiODMsIDB4ZjQ2M2ExZGYsIDB4MGVjZjdjOWUsIDB4ODVjZjZlZmUsIDB4Mzg3ZGI2OTgsIDB4ZTkxZDg1Y2UsCi0JMHgxMWRhNjcxNCwgMHg0NGQwNWVlZiwgMHg0OTdjNzlkZiwgMHgxNzgzNGVkOSwgMHg0NzdlNzVlNywgMHgyYTAzZGQwOCwKLQkweDNhNjZlZGY4LCAweDMzYWRlYzVmLCAweGNlZmZjODQ4LCAweGNmNzQ2MDBmLCAweDAwZmQ3Y2UxLCAweDI1ZTdkNzkyLAotCTB4Y2YzN2Y5MmIsIDB4ZmQ0MTFmYmYsIDB4YTUyZjU1OTUsIDB4YzA2NTJjZmIsIDB4ODRlZjUwMjYsIDB4YjVmNTAwYjQsCi0JMHhjN2NmZjVmMywgMHg3ZTQyZmQyMSwgMHg2YzFkZTYyZCwgMHgyMTVmZWNlMywgMHgyNjBmNmU5ZCwgMHhjZWMyZjMzYiwKLQkweDlmZmJhNDdmLCAweGUwNjkyOGY3LCAweDlmYjI4OWI5LCAweDU5ZTlmN2NhLCAweDJlOTg2ZWRjLCAweGNiMmIzNGUwLAotCTB4ODMyZGNmYzIsIDB4ZDAyNmNmM2QsIDB4MDM3ZDM4ZmEsIDB4MDAyZWM5OWMsIDB4NzE3N2EyN2EsIDB4MjM5YTc5NGUsCi0JMHhlY2E3ZTgyNSwgMHhjYTNiMTA4ZCwgMHgzNzlkMGVmNywgMHg4NzA0MGZlNSwgMHgzMGJiZjE2MCwgMHhmM2MyZWM4YywKLQkweDJlYzgyMmRiLCAweGZhOWEyZDA3LCAweDkzMmRiZjM5LCAweDM4OTU0M2UyLCAweGFiYTg0OTkzLCAweDEyNjYzZWQxLAotCTB4MmRlNGYzN2MsIDB4NzA2ZWY0NTksIDB4ZTFjNTMwNWQsIDB4YmI3ZTNkOTQsIDB4NjQ0ZWUyODYsIDB4YmQ5Nzc3YWUsCi0JMHhjODkyNmYzYSwgMHhhNjljZjFkYiwgMHg1NmJmNTdlYywgMHg0OWZlNDVlMCwgMHgyOWQ0OGUyNSwgMHhlM2M1NjhmOCwKLQkweGI4YzNmNTc3LCAweDk5NjdmNjViLCAweDY4YWVlM2UyLCAweDIwNjM5Yzc5LCAweDA5NjQ3NjVjLCAweDQ1ZWZiYTNlLAotCTB4ZTAyNzViYTIsIDB4NTAyZWZlMzksIDB4MmYwMzg4YjksIDB4MmNmZGM5ZGYsIDB4N2FlZTZiZTUsIDB4NTFlM2Y4OGUsCi0JMHhkZjM4YzMxZCwgMHg0M2E3OWU4YiwgMHhiNGZlZTFmZCwgMHhkZWQ3YzdlOCwgMHhhMWNiZjU0NiwgMHg0MWZmNmYzZSwKLQkweDliNjdjZDI4LCAweDAzOTJlMjhlLCAweGRiOTZlYmY3LCAweGE1ZmY5NGVmLCAweGQwMWU2NWY2LCAweDA3MzhmYTAzLAotCTB4MWVkYWMyYmUsIDB4NDBmOTFjZmIsIDB4YTJlNmM5ODMsIDB4ZDdiNzFlNTIsIDB4ZTAyY2YzYTksIDB4YzQ0YzE5ZjcsCi0JMHhjNGMzM2ExZiwgMHhmMzU2ODllZiwgMHgzNWYyODFmOCwgMHg3MTQ3N2YxMywgMHhkMmE3YzcwYSwgMHhlZTg1YTYxZCwKLQkweDM2ZTljZmJlLCAweDExNWNmZTBiLCAweDc0ODdlYjYxLCAweDQxZmIwMTU4LCAweGJmMWYwOWY3LCAweGIzNzVlZThiLAotCTB4N2RhOGViM2YsIDB4MTMxZTdhZTAsIDB4ZTFkMWFlZWQsIDB4ZGNmZjFlNmUsIDB4NGJlZjkwMzksIDB4MjRhOWFiZTcsCi0JMHgzOGMyM2E3NywgMHhjOTdjYzM1ZSwgMHhlMzBjZWQ0ZSwgMHg2MDQ4MDUyOSwgMHhlMzg1OGRkYywgMHgwZjE4ZTc0MywKLQkweGQyOWRkZmQ5LCAweDc0M2I0YTFlLCAweDUyZDk1ZGJjLCAweDVlMTc3YmYxLCAweDQ0ZTIzNzFlLCAweDc3YzQ0ZDljLAotCTB4YTFiNDM2NzcsIDB4MzhmYzgxYmUsIDB4NWVhNTA0NzcsIDB4ZWZmNWY4NDMsIDB4OTMxZTAzODYsIDB4YzU5M2Q3N2QsCi0JMHg3ZjEyOWJlNSwgMHg5M2Q2ZWY0MywgMHg0N2EzZDM1ZiwgMHg3YTEwZWE3ZSwgMHhmYWUxYjM5ZiwgMHg3YmEwMzNkZiwKLQkweGM1MTIwZGVmLCAweGU5NTlmZjFkLCAweDk0ZmZjNDQ3LCAweGNhY2YwZTczLCAweGUzOWQxMjVkLCAweGE0N2FhZjk3LAotCTB4N2NiZWYxMTQsIDB4NDg5OWE2ZDEsIDB4Y2EzYWNhMGYsIDB4ZWQwMGFjYjUsIDB4YTY0OTBlYWYsIDB4M2Y1ZDgwZjksCi0JMHhmNWM2NGE2NywgMHhmZGYwMjllMywgMHg1MTNmZDA0YywgMHg4MDY3MjI4ZSwgMHg1OTY1NGVkNiwgMHg2ZDk1M2QxNSwKLQkweGFiOWNmZTg0LCAweDRlMzQwZGE0LCAweGYyNzc2MmJjLCAweGMyNzAyOWY1LCAweDYzOGMxZjczLCAweDM3MDFmYzU0LAotCTB4Y2YzMmJmNWEsIDB4NTdhN2NkMWIsIDB4Nzg4ZWExZjAsIDB4ZTM0NmVmZWIsIDB4MTMyNDdmN2UsIDB4ZmRmMmI5M2YsCi0JMHgzZmUxN2VjOCwgMHgyZmQxYjdhMiwgMHhlMWZkMmE1OSwgMHgxMWQ0MTI3ZCwgMHhjODgzOWZhMSwgMHgwNDZlMzBjZiwKLQkweDNjYzBiYjZmLCAweDgwODdlODUzLCAweGQ1YTZlMzdjLCAweDFhNDNmM2E5LCAweDQ2OGNmOWQ0LCAweDQ1YWIzZTc1LAotCTB4YWJiZGI3OWQsIDB4ZTMxNTlmY2UsIDB4M2I0MjcwMmEsIDB4NmMzZGVmMTgsIDB4ZDAxZmY3MTcsIDB4NGJmYmM2MGUsCi0JMHgxZTYzMDc2OCwgMHhkMTRjNjBlZCwgMHhiNDcyYzYwZSwgMHg3NjhmMzE4MywgMHgwZWQxZTYzMCwgMHgxZGI5ZWFiNiwKLQkweGMxZGEyOThjLCAweDhjMzU5ZTU4LCAweGNiNTljOWMzLCAweDBmYjA5MGZkLCAweDlmOGYzYTc2LCAweDAyNmVmY2ExLAotCTB4OGZhODg1ZDgsIDB4YmQyMjBlOTYsIDB4YThiZTdkMGUsIDB4ZWRmZmY0MzcsIDB4NDc4ODA1ZDUsIDB4ZDQ0NzEwYTYsCi0JMHhjMzhjMWNiMCwgMHg4MzEzNWI2YSwgMHg5M2UyMDNmNSwgMHg2NjRjMjM5YywgMHhhZmI0MzdmNCwgMHhkNTA2YmIzZSwKLQkweDYzYjMwZTkwLCAweGUyNTdkNjEwLCAweGJlOTYyYTk2LCAweGQ2ZWZiZjQzLCAweGU3ZmFkY2JlLCAweDIyN2RmMjlmLAotCTB4ZmJmMjg3YmYsIDB4YmVmODY1NDMsIDB4MmU3ZTRjYmIsIDB4MzkxZGZmMjMsIDB4ZjdhZmIxOWIsIDB4OGNlMzAzYTMsCi0JMHgyMmY4OTVmZSwgMHgzNjhlOGFiYiwgMHg1M2ZlNWMxMiwgMHg3YzgzMTNkNywgMHg0NjFkYWJmZSwgMHgyYmY1Njc3YSwKLQkweDRkOTMxZjcxLCAweGU3N2VhOGI3LCAweGRlNzlkYWYxLCAweGNiOWQxMjkzLCAweDljMmMzZGRjLCAweDA2MWVmN2RhLAotCTB4NzkwZmJiZmQsIDB4ZDBmM2E0YWEsIDB4OWY3N2VmNTksIDB4NDkwNmRlNzgsIDB4YTZkY2UzODMsIDB4Mjc2NDcwZTcsCi0JMHgxYzZmMTE2NCwgMHg0ZWE3N2ZjYSwgMHhmNTE1MzFjYywgMHhhN2Y5YmY3MywgMHhmODU0ODNiYiwgMHg3ODdiNzQzMywKLQkweDBjMzVlZmMwLCAweGQ2MWZkNTU0LCAweDdiZjAxMDk0LCAweGJmZDQ0MzBkLCAweGYyYzBmMDIzLCAweDRmNjc2ODAzLAotCTB4NTU1MjMwZGQsIDB4NmJkMjBhZWYsIDB4MjhkNWNhMzYsIDB4ODVjNTk3ZTIsIDB4MjdjNDA1NzcsIDB4NGY3ZWFhODYsCi0JMHhhN2FlODk2ZiwgMHhiZmE4NzFlMywgMHhjOTBjNmY2NCwgMHhiNzk4NjI4MywgMHhmMzg4YTQ3ZCwgMHg0OWM3YTU4MSwKLQkweGI3YzQzNWFlLCAweDNkZmEyNTZiLCAweGRlNDI3OWIyLCAweGY5NmFhNWIwLCAweGU3ZTVhMjViLCAweDM2NDZmODdhLAotCTB4YmRjZTgzZWEsIDB4ODRmZWY0NTEsIDB4MTYyNThmODIsIDB4ODExYjBmNjYsIDB4NTk2ZGJjZjEsIDB4ZGUxZmI0NWUsCi0JMHhmMTE3Mzk3ZiwgMHg4ZGFlNDJhYSwgMHg3ODFiZGZjMywgMHhjMzZmNzI1NCwgMHhjMjE3YTc4YiwgMHgwMWRlNDRmNywKLQkweDM4ZDYzZmRmLCAweDJmMGYxMTJhLCAweDNhMzljZTFlLCAweGIxN2NlMDBhLCAweDRiN2JhNjQxLCAweGU0NmYzYTcxLAotCTB4ZmYwZmIzMDgsIDB4MjA5Njc0ZTIsIDB4OGRkYWZmZGMsIDB4ZjQxYmZkZmMsIDB4M2VlMWM5NWIsIDB4MThkZGE4ZmMsCi0JMHhmNjY0OTQxMSwgMHg4N2MxNWJhZCwgMHg0MWRlZjRkYiwgMHhhZjVkNzA0YiwgMHgwMmFmNDg5OSwgMHhkM2U0OWEzZCwKLQkweGU5MzJjMzk1LCAweDI0NjMyNTZmLCAweDYyYjllOTE3LCAweDRiN2RjYTlkLCAweDg1YTczZDY1LCAweDc4ZDJjODNkLAotCTB4ZWY4YThmYmYsIDB4NjQwZmQzMTcsIDB4Y2UxZDYxNTksIDB4MTkzOGE2ZWEsIDB4NjFhNmI4ZjksIDB4NjNhNDBjNWIsCi0JMHhjMzc1OGU4YywgMHhhOGVmZTAwNiwgMHhlZjhhN2YyNSwgMHgyMjdkOTQ5NywgMHhmOGVmOGMzMywgMHhkMDllZTZiYSwKLQkweGRjY2Y1MDNiLCAweDgyNGRiM2FkLCAweDVmMWJlM2ZjLCAweDY1OTVmYmE2LCAweGVkMWViNzVhLCAweGI1MWQ5MmQyLAotCTB4NWVlNjhmNzQsIDB4ODJkMjZlZjEsIDB4OWY2NDQ1ZWQsIDB4Yzg4YjY0MmYsIDB4YzRhNzNjY2UsIDB4OTQ3ODBiOWQsCi0JMHg1OGI2OTU4YywgMHg4MjNkZGU2MCwgMHg3Nzg4OTQ2ZiwgMHhmMWY3OTQyYiwgMHhlZmU3NmNhZSwgMHhiODUwM2YzZSwKLQkweGY1ZTc3ZTg3LCAweDkwMmY1MTY1LCAweDljM2Y3YTVlLCAweGZkMDAzNzlhLCAweGY2YzkxZTRkLCAweDFmNGNmNzYzLAotCTB4YzAzZmEwYzQsIDB4YWQ1N2E5ODcsIDB4NzU3MDNlOTQsIDB4OWZiOWQ5MDgsIDB4YTE4NGFmZTAsIDB4YjAwOGM4YmMsCi0JMHhmMWU0M2Y3NywgMHhiYmY4YmQxOSwgMHhlZjc4ZjE0OCwgMHgyYTdmZGJkMiwgMHgzYWRiYzNlZSwgMHhjMDBhODdkYSwKLQkweDc4MjM1MTlmLCAweDkwOWRjMzNjLCAweGRmNTY4ZTE2LCAweDE3MWFhOWY3LCAweGU5ZjdjMmFjLCAweGEwOGU4ZmNjLAotCTB4N2MxODY5YmYsIDB4NjA3Zjk3ZWUsIDB4ZmVhYWEyNTIsIDB4MGQwYzBmNDMsIDB4YmUxMTg3YTAsIDB4NzQyZTc0ZWYsCi0JMHhiNDRlMmFhNywgMHg0YWNiOTk2MiwgMHhlNGYxZjRmNywgMHhkMjFjYmZjZSwgMHgxMzY3ODQ2NSwgMHhkODJiZWQ1NCwKLQkweDc4YmQ1ZjE0LCAweDQ1YmEzYmZlLCAweDdhNmQ3Zjg0LCAweDM0NGE5N2I0LCAweGJhN2Q2ZTNjLCAweGI3OTQ0M2EzLAotCTB4NDQyYzM5NTMsIDB4MjViNzk3NDUsIDB4NzJlNTNlZGEsIDB4ODNlM2M3NTEsIDB4M2E3YjFmODUsIDB4OTdkODlkZmUsCi0JMHgxNjhkODQ1YywgMHhjOWVmZTJlMywgMHhhMWMxZmZhMSwgMHg1NGRhM2JkNiwgMHgzZmMyMjI3MSwgMHhmZGM2OTE1NCwKLQkweDM2YWUxNTQzLCAweDAxZGY5ZTNkLCAweDAwYjFiNWZjLCAweGZjOGRjYTkyLCAweDZmYTgwODVkLCAweGY5ZTcwZDhjLAotCTB4N2ZhZTIzNjUsIDB4YzNmYjBmMmYsIDB4MGYyYWM4NzcsIDB4MmY0ODQ1Y2IsIDB4ZjEyYmRmODEsIDB4MGY5YzAyN2QsCi0JMHhlOTQyNzNmYSwgMHhiZmRlNzE5ZCwgMHhjZmMxNTdlOCwgMHhjMDk0MzhjMCwgMHhiNWYxYjI3ZSwgMHhkZjdhMWM5ZiwKLQkweDlhYTNkZThmLCAweDg5ZWZjODVhLCAweGY5OTMzZDNiLCAweDNjMDBmYmJkLCAweDE1ZmRmODUzLCAweGZkMTJjZjdjLAotCTB4NDNiZTFmZGIsIDB4NWRiYmQ2NzgsIDB4MDBiNzYzNjcsIDB4ZjczYjRhOGYsIDB4ZGZlMjA2NzcsIDB4YmUwZjU4MDIsCi0JMHg1MWEwYjg2ZiwgMHg1ZTI1YjliMiwgMHhmZmYyZTEwZiwgMHhmNDgyZGMwMSwgMHgwMDgwMDAzNiwgMHgwMDAwMDAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDViY2RmZjAwLCAweDY1OTU1ODBkLCAweGYzYmU3ZTlhLCAweDcwMGUwMWM3LAotCTB4MDQyN2U1NDAsIDB4MDk0YTg4MGYsIDB4NDQxMDFkZjYsIDB4MTgyOTNiNTMsIDB4NTRkYTE1OTUsIDB4MDIxZjQ0YTIsCi0JMHg5YTI4MjRmZSwgMHgyZWRiNTJlZCwgMHg0YzczNTBjNywgMHg0YTk3Njg2NywgMHg1N2EzYWIxYiwgMHhiNWFjY2QzOSwKLQkweDhjY2U5YTk4LCAweDdlOTI3YmJiLCAweGE3NzJiMjY4LCAweGE5YWVhZTY5LCAweDY2YjY2M2I1LCAweDNiNDQ4ZGFlLAotCTB4YjViNGQ0NWQsIDB4ZGZiZWZkY2YsIDB4MjNiZWY5YzcsIDB4YjVjY2VkNGMsIDB4ZDcxNzVjM2YsIDB4ZmZmNzllNzMsCi0JMHhlN2RlZmU3ZCwgMHhiYmY3OWU3ZCwgMHhjODkxMzJhMywgMHgxYmVmZTI0ZCwgMHhmZmU1NmZmZSwgMHhkNWEyMTJlYywKLQkweDQ0MWY5ZDA3LCAweGFiZTVhMzBhLCAweGFlMGRlY2ZiLCAweDYwZmQ2NWNiLCAweGNiZjVjNWRhLCAweGMzMmE2M2YxLAotCTB4OWMyODRhMjMsIDB4ZDcwNzcwYzcsIDB4NGQ1ZGM2OWIsIDB4MjdiNTNlZGIsIDB4OTdmMWNhMDMsIDB4MzQ2M2ZjNjksCi0JMHgyODRhODNjMywgMHgxZTNjNWNhNCwgMHhjYThkOTA1NSwgMHgwYzYxZDY4OSwgMHhmMWMwZDExZiwgMHgzZjY4NWQzYiwKLQkweGFmMjE0YmIwLCAweGEwOWQ5YTIyLCAweGQ0MWViOTc0LCAweDYyYmJkZWI3LCAweGM4NjE0ZDNlLCAweGY1ZTZjYzYzLAotCTB4MTE3NDFjMmQsIDB4MWI4ZDEyOTUsIDB4ZTZlNWMyN2YsIDB4MTQ4N2ZkN2UsIDB4YmJmNzBmNzUsIDB4Y2EyMWQwNjUsCi0JMHgxMGU0MWQ1YiwgMHg2YTIxYWNmYiwgMHhmOWJkZjg2NywgMHg5ZGMxZDExNywgMHhlZmViMjY5ZCwgMHg2MGYzNzg2NSwKLQkweGJiMTdlOGJhLCAweGU4N2EyMWNlLCAweDZlODhiOWY0LCAweDc2NDVjMjc0LCAweDc5OGRmZWQzLCAweGEyMmZmMWY1LAotCTB4NzFmZjRjNTMsIDB4MWFmNmU5ZTMsIDB4MGEyNzUxMGYsIDB4N2YwY2I4YjIsIDB4OGZiOTAyNTcsIDB4ODY2ODhjYTgsCi0JMHhjY2ZhMzQ5YSwgMHhiMmVmYzI2NCwgMHhmMjFlNzg2ZiwgMHhhM2QzYTBmMCwgMHg1MTIxNjJlZCwgMHg4ZjBjNjg5MCwKLQkweGM3YWQyMmViLCAweGQyNTkzYzAzLCAweGI4ZTkyYmQ5LCAweDQ4Y2JlOWNlLCAweDk5ZGZlMjJkLCAweDNiZmE1NmM5LAotCTB4MzcyODI5N2MsIDB4NjFkODY5YzYsIDB4YTNkMzFmMjMsIDB4M2QzNjNlY2EsIDB4OGM2OGUzYzIsIDB4YzhiNDNlODMsCi0JMHgzNDVmMDM2YiwgMHgxYmNkYmM3ZCwgMHg0YzQ2ZTdjNywgMHhjZTRkYjRmZCwgMHhiOWY2ZTI3NCwgMHhkODA5NDYxYiwKLQkweDU3NGRlZjEwLCAweDgzNjFiZWI5LCAweGYwYzQyNmJkLCAweGE0NjdlZjgzLCAweDdkMWNiMDU3LCAweDdhMzljOWIwLAotCTB4YzFmMTBmM2UsIDB4YTk3MzUzZGQsIDB4ODA5NTc4MTgsIDB4NWI4YzFmYTcsIDB4YmM1Y2YyMTQsIDB4MjZkNTA2YWYsCi0JMHgzN2ZhZDFlOCwgMHhmOWRhZTRlZiwgMHhlM2I2MjdlNywgMHhmZTc4OGJjOSwgMHg5Mjg3NGQ5NiwgMHg1NTljNzgyYiwKLQkweGY3MmFkZTliLCAweDZkZGQxM2U2LCAweGRlNTRkYWQzLCAweGY3NjUzOWZmLCAweGU1ZTgyZjVlLCAweDg2YTUzZGRkLAotCTB4NTIwMTVkYzcsIDB4ZDhlZTVmMzAsIDB4ZGM0MTk1NTQsIDB4ZGVlYmU1YWUsIDB4NzllM2JkYzcsIDB4ZTk5YzFiYmQsCi0JMHg4ZjlmOTYzNiwgMHgzYjI3NmQ3ZiwgMHgyNzU5Y2ZjYiwgMHhlMjRjYmQwNSwgMHg3ZTUyZjFiMywgMHgxODk1M2VjZiwKLQkweDNmNzk2NGVhLCAweDllMjA1MGFiLCAweDVmZGE1N2NiLCAweDViNzE4Mjk4LCAweDc1ODg4ZTNhLCAweGJkMWRiMmFjLAotCTB4YjVmZmYzMDUsIDB4YzMyZGU3OWIsIDB4OTliZGExYmMsIDB4NGUwZDU3OTgsIDB4ODZkYWJjYzQsIDB4ZDE1YTI5MDksCi0JMHhiMzVhZmNjOCwgMHg3NWQwNDRhMywgMHg5OWY3MDc2ZiwgMHhhODgxNzQ0OCwgMHhiYTdiN2MxYSwgMHg5ZmYwMmRjMywKLQkweDU5YTEzMDc2LCAweDY0NzVmN2Q0LCAweDBlZDlmYzBhLCAweDFkM2Q4MDlmLCAweGJiYmNhMjg1LCAweGRkZjkyYmM4LAotCTB4Yzc1ZmVmZDksIDB4NTBlNzA0ZjMsIDB4N2MwNzliNjEsIDB4NzgzYTE0ZjMsIDB4MDkyYTc3ZmQsIDB4YTgwMjljNmEsCi0JMHhmN2MxNzg2NiwgMHhmZjA0YjMyNywgMHg1ZDg4NzkwYywgMHhhMjdlYWNjZiwgMHg1ZTdjOTMyNiwgMHgyNmE2ZTgzOSwKLQkweDQ1NWVmYzkzLCAweGFlN2MxNmE5LCAweGJlZDJjYjNiLCAweGE5Njc5YmNhLCAweDUyZjMzYWJmLCAweDNlMzVmZDRiLAotCTB4YWViZjA1YmYsIDB4ZmRhNWJhNzAsIDB4MTY1NWVhZjUsIDB4NmI4YWM2ZmMsIDB4MDQxN2VkMmMsIDB4OWJmMDU4MTYsCi0JMHhlZDJkNmJhYSwgMHhiMDY5YWU2ZiwgMHg2OGJhZGZkNCwgMHg1NmJlYTVhNSwgMHg5N2MxNmI1YiwgMHhkMmRiYjhhYywKLQkweDBkYjZiNmZlLCAweDc5MDBmYTk2LCAweDcyNzJjNDFkLCAweDYzZTNmOTk0LCAweGYzMTNmZmJhLCAweGQ3Y2VmMDA1LAotCTB4N2NjYzc4MjcsIDB4ZDZkNzM5OWQsIDB4ZGM4YzMzZDYsIDB4MzJkYzg2MWUsIDB4MDdmNWRlN2YsIDB4ZTQ3YzgzOWUsCi0JMHgzMjFjYTRkOCwgMHg1M2NiMTAwYywgMHhmNTEzZWFhZiwgMHgzMDU2MTRkOSwgMHgyY2JkOWIwZiwgMHhiYjZjNGRjOCwKLQkweDg5OTlmYWQ4LCAweDMxZjMzZWM3LCAweDdmZmQ3MzBmLCAweGY2YzFjOGIxLCAweDYzYjRlNjYwLCAweGJmMTllM2E1LAotCTB4OTE2ZmJmYzksIDB4Y2NjOGVkODMsIDB4MDY3ZDhlMmIsIDB4MTlmZjBkZmMsIDB4NWRjNGRmODksIDB4ZjZmZWYwNjcsCi0JMHhmMjBhMmMzNywgMHg5OTVlNjczYSwgMHgzZDY1NGRiZiwgMHhlYTlkMzdhNCwgMHg3Y2IyMzQ1MywgMHgwZTRkZGY2MiwKLQkweDMwYzA2ZmI5LCAweDMxZTAyM2NiLCAweDE3YzA0Nzk2LCAweDBhOWIxZTU5LCAweDc5NjY1ZTg4LCAweDUwZWJlYzA0LAotCTB4M2IyZmY5NDUsIDB4ZGUzYzA0MmEsIDB4OGRmMDEwMTEsIDB4NGYwMTZhOGUsIDB4ZjgwOGQ0NzQsIDB4MDI0NThlYWIsCi0JMHgxMzQzYmFmZSwgMHhiMWQzN2VmZCwgMHgzYTc3YzA0MiwgMHg2ZmY5NDRkYSwgMHg3YzA1ZGEzYiwgMHhjYTI4MjNhZiwKLQkweGExMTU1N2RmLCAweDgyMDJiY2ZmLCAweDAzMzljMmRkLCAweGY2ZWQ1ZGY5LCAweDJlN2NlZDg0LCAweGY5ZTcxMWQwLAotCTB4ZmFjYWJiMjEsIDB4ZWVkODA0YWQsIDB4ZGYxNGRkMzMsIDB4ZDg2M2FhNjgsIDB4NDQ5MTQ2ZDksIDB4OTFjNDY1ZTgsCi0JMHg4YmY5ODY3YSwgMHgzN2VkYzM5ZiwgMHg3NDFkNDc2YSwgMHgxYjhmMThjNiwgMHgzODFmMTNkZiwgMHgzNDQyYmIwNywKLQkweDMxMjY3YmQ2LCAweDFmYzA3ZTVhLCAweDAzZTUwNGY4LCAweDI1MzlmNTA1LCAweDNlYmQ5ZmNjLCAweGY5ZjA1M2VkLAotCTB4NGRjNjkyZTYsIDB4YWUzNzZjMjksIDB4MDljZGFhZmMsIDB4NDZkYjc5MzksIDB4OGY5Mzg2MmIsIDB4YjIzZTVkNWUsCi0JMHg2MzhjMTQxZCwgMHgyOWI4MTc3ZSwgMHhmMDI2OTI5OCwgMHgwZTYxOGI4MCwgMHg4OGVlYzM5NywgMHgwMTc3ZGUzZiwKLQkweDgxZTQzZTYwLCAweGI5NjNlNTA4LCAweGI2NzBjZGRlLCAweGYxMGE3OTNiLCAweGU1YzM5NGY5LCAweDE0MmYyMTc2LAotCTB4YzI3YWM4NzAsIDB4YjQxZTVjNzgsIDB4YTllNzQ1YTUsIDB4ZGY2MTI0MWEsIDB4ODQ3MTZkNjYsIDB4MWM5MjFmNjAsCi0JMHhjODk1YjYxNCwgMHg3MjI1YzlmNiwgMHhkY2IzZTA1ZSwgMHhlNTg1N2UzZCwgMHg0NzhiNTY2NCwgMHgzMjdlZjIwZCwKLQkweDIyNTVkZWI4LCAweDBjZWMwN2RhLCAweGY3M2RmYzlmLCAweDUxNGMyMjliLCAweGQ0NDRhMTMwLCAweGJkNzJmNThiLAotCTB4YTBkNTQ3NTgsIDB4Y2ZmNDAxNDYsIDB4ZWY0ZTM1MjQsIDB4NDFmNTk2ZWYsIDB4NmJjNTlmZjQsIDB4MzBjMTVmODAsCi0JMHg5Yzc5ZjE4NCwgMHg3Njg5ZDYwMCwgMHgxODVkYjI4OSwgMHhjZTdjMTRlMywgMHhmNDliMjRmMywgMHg5NjQyZmVjNSwKLQkweGRmNjVmYjgzLCAweDlmNjE1MmU5LCAweGU0NGVkMjczLCAweDNmMzFlZWMxLCAweGZlYjlmOWM2LCAweGRiZDlkNGE2LAotCTB4OWE5ZmNjMjMsIDB4MjZiZmVmMzgsIDB4ZjM0YTVmMzIsIDB4ZmY5NDAyYjQsIDB4YzEzZjE5NGEsIDB4NGMxN2U2MGYsCi0JMHhjNDkzNTMxOSwgMHhlN2M2YzRmNiwgMHgzOWY2MzBlNCwgMHgzZjA2MmY5NiwgMHhmNDFiYmEwYywgMHg0OGRiZTU4ZCwKLQkweDRmODkxYWZjLCAweDFhYTlmY2IxLCAweGY0MWJkMjhjLCAweDUxMmY5OTFhLCAweGZmOTUwNWZlLCAweDc1NGNiZTdiLAotCTB4N2FjNmVjZjQsIDB4MmFkYzVhZTIsIDB4N2M2ZGYzZDYsIDB4ZTY5ZmJkYmEsIDB4ODY5MzcwYTUsIDB4ODBjYmRmNDEsCi0JMHg1ZWI0ZjI2NywgMHg1ZDIzNTFlOCwgMHg5YTBiY2YzNSwgMHhlMGM1ZWQ3OSwgMHgwYmJiNmM0ZiwgMHgwM2UzYjQyMywKLQkweDc3OWM1NmY3LCAweDZkMjczZTdkLCAweDhiNWZmOWU1LCAweGEwYTczYTY3LCAweDMzZjFlMDNjLCAweGY2ZWFlNjFmLAotCTB4ODRkYThmYTIsIDB4MjkzNzY3M2QsIDB4ZWE1NGZlMDgsIDB4YjQ1YjlhYWMsIDB4OTU5N2Y4NWMsIDB4MzZiZmFiMWUsCi0JMHg4ZDlhYWJlZiwgMHhlOGRlNzc5OCwgMHhjZDk1ZmYxOCwgMHg2YmQxY2UzMiwgMHhhNmFmNzFmNSwgMHhmNTZlMzEyZSwKLQkweDZiYmI2YjU4LCAweGRhZjBiZjc1LCAweDVkZjk2YjAyLCAweGNiYWZkZDdlLCAweDkxZDgzY2EzLCAweGJhZTU1MjRhLAotCTB4Y2JmMDliNjgsIDB4ZGM3MmJkMmEsIDB4ZTNhZjlkNmMsIDB4MDk5YTc2N2QsIDB4ODBlNjkxYmUsIDB4NzdmMTdhZjEsCi0JMHg3YmQ2MDBhZSwgMHg3ZTA1MDUzNSwgMHhiYzA0ODUwZCwgMHg5YzYyYzI4ZSwgMHgwMWQwZDllYiwgMHgwOWM4OTFiZiwKLQkweDlmZGRjNWJjLCAweDVlOTE2MmViLCAweDg3ZGVkNzZkLCAweDhlNDlmM2RmLCAweGViODUyOTM2LCAweGZiYjVlMzMzLAotCTB4ODliZDE3YTEsIDB4ZTFhZGQ0MzcsIDB4Y2U5NmU2ZjksIDB4NjNiZjQwMmQsIDB4MmZlMTNlOTUsIDB4MTc4ZjczMWMsCi0JMHhkZmU0MGJmZSwgMHg4ZmQ1MTY5OSwgMHgxN2ZlZDk1NywgMHhmOTdhZGFmMCwgMHg4OTdjMDA3YywgMHgxNjAyODdjZiwKLQkweDdjZjg1N2Y2LCAweGUxNmQ3ZTAwLCAweDc5YmY0MjA2LCAweGE2MWM4NTNlLCAweGFmZmQxYjdkLCAweDQ3MjFjZWYzLAotCTB4ZjdmNmM4ZTksIDB4MWIzZjI5YmEsIDB4YmM5Y2IxYWIsIDB4OTJhOTNhOTYsIDB4NTVhNzAxOTIsIDB4YTVhZmJmNjIsCi0JMHg4YzI0ZDg2NiwgMHg3YzU4MDk3MywgMHhmZjM4NjBiOCwgMHhlOGJmOTBjYSwgMHgzMWM4ZjM3YywgMHgxYjNhNjQ2YSwKLQkweGE3YTU4ZDc0LCAweDgxM2ZlNzQxLCAweDQ3MGRjZmFlLCAweGM0OTU1ZWQ3LCAweDNlZTAzNjM5LCAweDMxM2Q5YWIwLAotCTB4ZjY5NDRkNmEsIDB4ODkzODcwMjAsIDB4ZDc3ZTU5MzIsIDB4YTA4N2IyMWQsIDB4ODk2MzFmOGYsIDB4ZDI1ZjE4NTksCi0JMHhiZmE1MGE4OSwgMHhlZjVmNWViZSwgMHgxNjM0MWQ0NywgMHg1M2E3YTZmNCwgMHhiYTVkZjk0NCwgMHhjZmI3MzZjYywKLQkweGQ2NWNmYjEwLCAweDdkZmEyMTVlLCAweDg4YmRhNzE5LCAweDA5MmY5Yzc1LCAweDgyMGY2NDRmLCAweDk5ZDVkYTNlLAotCTB4ZjllNzgzM2MsIDB4MGFiYjU5ZTQsIDB4ZWVjNWJiZmYsIDB4ZDc0MmE2ZGIsIDB4NGZhYmIzNWYsIDB4NTVmNGI4ZjEsCi0JMHhlODQyZWU2ZiwgMHg4NmEzOTNkMywgMHhiOGI0NjdiZCwgMHg3YjhkMWQyNSwgMHgzNTc5NTdjNiwgMHhjOGVmMzhiZCwKLQkweGY1Mjk5YTViLCAweDg1ZTgxNDkwLCAweDhkOGYzZTcxLCAweGYyYzJiYjYzLCAweGUxMjVjYmJiLCAweDc5NzVlNzQ4LAotCTB4MTJhN2RiMDIsIDB4NDlkODVlZDEsIDB4NGZkYzdmODMsIDB4NGUzY2Q5ZTAsIDB4MGZjOGVjMzksIDB4N2UzZjg0MTMsCi0JMHg5ZWYwMjUyZSwgMHg5MjU2ZjMxZiwgMHhiZjY1OWZjNSwgMHg4MWFkZDg1NywgMHhiMzhlOTJkMSwgMHgzMzIzZTI2OSwKLQkweDczZWNhZjE5LCAweDA3ZWI4ODUyLCAweDFiNWRhNTJhLCAweGRkODViOGYwLCAweGQxYjU3YWFjLCAweGE5ZGNmYjAxLAotCTB4NGNiODhiZGIsIDB4ZjQ5OGY3YmUsIDB4NDA5N2RlM2YsIDB4MjZmYzkzM2UsIDB4ZjA1OWE2MTYsIDB4NGIxMmY1MjQsCi0JMHg3YzhhOTRmYiwgMHhlMDZhN2Q0YiwgMHhhOGZkNGIzMiwgMHgzZTBiMTJlYSwgMHhhNTg2NjZhNiwgMHgzOWEyYzY3ZCwKLQkweGJiNGIzYzE2LCAweDdiM2VkMmQ2LCAweDZlMGI0MmM1LCAweDU5NmNhMWQ4LCAweDhiNmQzOTQ0LCAweGI1YzdmZDJkLAotCTB4Y2ZiNGI1MmYsIDB4YTk2MWRlMGIsIDB4NDRlMDYwYTcsIDB4ZDZhZmY3MjEsIDB4YjJkZjhmZmIsIDB4ZTRjZjVhY2UsCi0JMHgyZjQzOTViNSwgMHg5MjhmZGZlNCwgMHhlNjE0ZmJhYiwgMHhkOTY3YjU1ZiwgMHg4NGU1ZTg3YywgMHhlYmFjN2JhZSwKLQkweGM3NjU3ZmIxLCAweGEyOWQ5MDM5LCAweGZmYTYyOGQwLCAweGRkYWIzZWQ1LCAweGUyYjRjYWFiLCAweDhiZmY1ZTk1LAotCTB4YWY1Y2RkNjAsIDB4OWZiMmVlZDUsIDB4YjI5ZTQwYTcsIDB4ZjI5NjFjZGIsIDB4ZGRiYTI1YjEsIDB4YzQ1MzQyOWMsCi0JMHhmOGRiZjg3ZCwgMHhlMTY2NWRhZiwgMHgyZWJkMmM3ZiwgMHhmZTAzODc5NiwgMHhiNDliYjczMCwgMHg5NzA3MmFjMywKLQkweDMwNzJhYzg2LCAweDFjYWI2OWY5LCAweGU1NThmNzE0LCAweDU2MjNmMmUwLCAweGFkODdmMDM5LCAweDY3ZGE1MDcyLAotCTB4MTNiMjgzOTUsIDB4ZjY5ODM5NTYsIDB4MGMwZTU1OGUsIDB4ZDdlNThjZjksIDB4M2U1NTg4ZjQsIDB4ZTUzNDUzNDgsCi0JMHg4YWViZjA4ZiwgMHg4OWY5NTZiMywgMHhiZjUxMGZlNSwgMHg4ZjNjZGZlMCwgMHhmZGU2OGY0MiwgMHgxODVhZmNmOSwKLQkweGZlMjFhZmMzLCAweDc3ZTFiZDMwLCAweDRlNGYwZWNlLCAweDY3ZDU1ZTAxLCAweGY3Y2YxMGE3LCAweGFiY2ZiZTk4LAotCTB4ZjI3OWI3MjcsIDB4NzRlZTllZDksIDB4ZDAyNTc1NjgsIDB4M2FhZTVkNzMsIDB4MGQ1Y2E0YjMsIDB4ODc4ODFkZjQsCi0JMHgxOThmYWZkZCwgMHg1YTU5YzdmZiwgMHgxYTJmZGEwMywgMHgwYmFlNTlmNSwgMHg0ZGFmZDFmMiwgMHgzOWU5N2RjMiwKLQkweDFkZGQ4NDk1LCAweGU3YzcyMDk3LCAweDQ3NThiMjdiLCAweGE4N2IxZWYwLCAweGQyNzFkNzkzLCAweDNlYzBhNWQ2LAotCTB4MmI2YjI3MzcsIDB4YTJmNmZmZDEsIDB4MDc3MDg1MzYsIDB4ZmU4MmEwYTMsIDB4OTcxY2ZmZjUsIDB4MWM3ZWJjMGIsCi0JMHgxNTFlN2I4OSwgMHgyNDE2Y2E0NSwgMHg3ZDYyZWQ0NSwgMHg3YWYzOTczNiwgMHhmN2U4OTZkNiwgMHhiOWViOTUxNCwKLQkweDE5MTJmYWRmLCAweGJkNTI0OGI3LCAweDI5MGYxMTJlLCAweDIwZTIwMGEyLCAweGFkYzhiZDdjLCAweDhlM2QwNjJmLAotCTB4M2QwMjRmYzcsIDB4OWIyYTZkYmEsIDB4N2QzODhhMzgsIDB4ZjA2N2Q4MjksIDB4YTUzZDNiNTUsIDB4ZmUxMTNmNDgsCi0JMHg3ZmVlOGU1ZSwgMHg0ZWZmNTM2NSwgMHgwZWQyNzNhYywgMHg5N2FiOWNiMiwgMHgzMGU0ZGM4NiwgMHhkM2YyN2RkMSwKLQkweGRjNWUwYjVlLCAweDdmNjk2OTkzLCAweGE1OWYxMWY5LCAweGI0MmUxZmRlLCAweGE5ZjY5N2Q0LCAweDQ0ZWNiYzE2LAotCTB4YjRmZGE1ODUsIDB4N2MxNjAyNzcsIDB4ZDJkYWE0N2EsIDB4MzViMzhhZmUsIDB4MjI5YzdjMTYsIDB4NWY3ZmFmZWYsCi0JMHhlM2U5MmY5MiwgMHg3ZGU0NDU2MywgMHhiYTlmZGZkNiwgMHhmNzg4YWI3YiwgMHhlMWFkN2JjOSwgMHgyM2Q3NTM0ZiwKLQkweDRjZTIzNzAxLCAweGRlYzcxY2JhLCAweDQwNGM1Yzg3LCAweGZlYzVjZmYwLCAweGIxODNjZTJmLCAweDZiNDdlOTZlLAotCTB4Mjk0ZmJhZjcsIDB4ZGQzZjUxYzksIDB4ZmYwZGIzZjAsIDB4MDE1NTgyOTUsIDB4ZmRjM2I5ZjMsIDB4ZmJhMmY5ZTQsCi0JMHg2ZDdmODZmMywgMHg4YmQzY2RmOCwgMHg3MjFjZTI3ZCwgMHgyNmNhYmM2ZSwgMHhjOTExYzFlNCwgMHhjN2Q3OWM4MiwKLQkweGZkZjdiMGQxLCAweGJkZTQ0YmU3LCAweGM2ZmQ3NjIxLCAweDlmZTc2MmJhLCAweGVkOTVlYzVlLCAweDcyOWY3MWY1LAotCTB4YzMzNWVkZDMsIDB4NWNiYTMzZjksIDB4NzM1ZjFjMmQsIDB4YjhmOWYyMTQsIDB4Nzk2NzdkNTMsIDB4OWU3ZjdmZGUsCi0JMHhiM2NmYTRjZSwgMHgyZTVjZGU4NCwgMHhiMzY3NWZkNywgMHgzMWEzZjg4OSwgMHg1MmE5OTFjZiwgMHg3ZjM4MGQ1ZSwKLQkweDdlM2JmYjBlLCAweGUzN2RlZWEyLCAweDFmZDg3ODc2LCAweDIxZGRiYzc5LCAweDlmYzcwOGUyLCAweDJjMWI1MTViLAotCTB4MDE0NDNmODAsIDB4ZWY4ZTMzOGMsIDB4N2MwZmUwMDMsIDB4YWUxZmRjMGEsIDB4ZmQxNzZhOTksIDB4YmQ0ODk3Y2YsCi0JMHgxMjY1ZGE4YiwgMHgyNDgwNzk3NiwgMHg1ZGRhMDdmZiwgMHgwYzMxN2VlMiwgMHgxODFjODViZiwgMHhjYzdjNDFmYiwKLQkweDYyZTMyMDUxLCAweDM5OGI4ODgwLCAweDA2MmUzMjFjLCAweDQwMzE3MTFjLCAweGZlNTBjNWM0LCAweGYwMmE4NzVjLAotCTB4MDIxNTFkODMsIDB4MjAyM2JlN2YsIDB4ZDUxZDIzZjAsIDB4YTNiY2ZlMDIsIDB4NzIxYjk0NDYsIDB4ZTMyZjRiMTMsCi0JMHgxZmYwNjYzZSwgMHhhMzczODg2YSwgMHhlNzFlNDYyMCwgMHhlNWY5MjdkZiwgMHhkOWFjZWI1YiwgMHg2ZjljNWJjMywKLQkweDI0YTU2YWEzLCAweGE2ZGJjZjRhLCAweDJkYzg3OTRhLCAweDNiNDA3NDk1LCAweGVkNDhmZmU4LCAweDI5NDVlY2FhLAotCTB4OTAwZWE3ODgsIDB4NDdmYmM1MmYsIDB4NTNmZjg2ZTIsIDB4NmVlODMwZjQsIDB4ZmFhMzU3ZGMsIDB4MjQ2MWY1MjYsCi0JMHhiZmVlMzRiZCwgMHhkMGFjZmJhNiwgMHg4YzdkNThiYiwgMHhiYTU4ZGJkNSwgMHhiZGViM2Y4YiwgMHg4ZDdiZGU1OSwKLQkweGE3YWU4NWY4LCAweGJkMGM1ZjA2LCAweDE2YTQ1Mjc2LCAweDYwNTQyNWY2LCAweGVmN2QwNmFiLCAweGQxZWFiMjRmLAotCTB4YmU5MmE1ZjUsIDB4ODYyM2QwMDMsIDB4NzRkZTdjYTcsIDB4NzY4N2NlMWIsIDB4NTYwN2YwYWYsIDB4OTBjY2I2ZTgsCi0JMHhlYzg3ZTZkMywgMHhmM2UyN2NlMiwgMHhlZDM3ZTNkNiwgMHg3ZGI3NzliNywgMHg2ZWVmOWVhOCwgMHhlMjE1YmZiYywKLQkweDIwMWQ5ZDVjLCAweGRhNWYxZjcxLCAweDczNzY4NGE1LCAweGY1YTA4NmJmLCAweDI1MjExNDdjLCAweGZhZTQ2ZmFlLAotCTB4ZTM1ZmI4MTcsIDB4MzNmM2Q4OTYsIDB4ZjIyMWQ2MjAsIDB4ZTZiNWJjMmMsIDB4NzJmZDZiMmUsIDB4MzNjOTFlZmQsCi0JMHg2MzI3NjBiYSwgMHg5NjU3MGFmMywgMHg0YWEwZTdlYSwgMHg1ZjcyMzdlYSwgMHhkZDEwNWVlMiwgMHhhMTU3MmU5NywKLQkweDg3MzgyOWYxLCAweGNiYjRhZjcwLCAweGNlMzg0NmI4LCAweDIxZjNhZjc0LCAweDhhMmEzZmNlLCAweDBhMTMzZDMzLAotCTB4NzQ2ZTRlNzEsIDB4MTc3YzEzYTgsIDB4Y2Y0MWExY2IsIDB4OWU4MzNjYTEsIDB4ZWFlNzE4NGYsIDB4ZTIzZjc1M2YsCi0JMHg4YmM3Y2Y4YiwgMHg3ZmNmMDU3YiwgMHhiZTc2ZTgyMywgMHhmZjQwYWVjZiwgMHg3YTA4ZjI4NywgMHgzYjQxZjNmYiwKLQkweGU3M2U5OWQ5LCAweGJhMDljNjBmLCAweDdlM2I2MjdlLCAweDk0Y2ZiZTRiLCAweDVmMjhiODc3LCAweGIwMTVjOTQxLAotCTB4YThjNmZiMWYsIDB4NjVkNjYxYzEsIDB4ZmIyMjJkNDAsIDB4ZTFiZjU4OGYsIDB4OTllZTMyNTAsIDB4ZmNjOGNmMmQsCi0JMHhiZDMzY2I0NCwgMHg3YjI2MDVlOSwgMHgxMGVhNWNkOCwgMHhhNmRiYmJmYiwgMHhmZjIyOTRiNSwgMHg4YjlkZGY2MCwKLQkweDVmMWRkZTdiLCAweGNlMDBhNjg2LCAweGIxMmRlM2Q3LCAweDc3YjIxOWZiLCAweDQ3MjExNTMzLCAweDYxM2ZiYzAzLAotCTB4YjExNWFhZWYsIDB4MDQ5N2I2M2YsIDB4OTg5YjdiM2QsIDB4MDJjZTNjOWIsIDB4MzQwNjhmMGEsIDB4OTZkYTAwZjIsCi0JMHgyMzA3YzEwYSwgMHhhZTEwZDAwZiwgMHhiOWI4ZmIxMCwgMHg4MTMzYjk3MywgMHhkZTc2NDQ5YiwgMHg4YmUwOTU1YiwKLQkweDM5MjIwN2U2LCAweGM3ZmUwOGI0LCAweDliODI3OTQ4LCAweGRlMzE1NTA2LCAweDg4NjcwNmY3LCAweGNkMjgxZTcxLAotCTB4YzZkMGZlOTMsIDB4MWZlMTZiZWQsIDB4MzkzNGY2NWUsIDB4NTM4ODg3NDEsIDB4YTc0YjEzOGUsIDB4ZjNjYTk0M2YsCi0JMHgxZDNjMTMyMCwgMHhiYWRmZGQxMywgMHhlN2IwOGEwZCwgMHhjMDJiYTBlYiwgMHg5ZWMyMmJiNywgMHg1ZDY3ZjgxYiwKLQkweGYxMjU1ZTNhLCAweDNjNDkzNzNiLCAweDUxNmNmNGUyLCAweDExN2VlNDUyLCAweDAxM2VjMDJmLCAweDZiZGMxZmIxLAotCTB4MDVmMWU5ZjcsIDB4ZmIxMDAzZWMsIDB4MThlYzM5NDAsIDB4ZTAzMWQ4NzAsIDB4NjFjMDYzYjAsIDB4Yzc2MTAwYzcsCi0JMHg2YTk0YmU1MCwgMHg0M2U3MTE3MiwgMHhhY2QyYTMzZSwgMHhhYTZlODMyNywgMHhjODI1ZjkzNCwgMHhlNDcxOTg2NywKLQkweDkxZWRjYzMzLCAweDIzZDczMGNmLCAweDQ3YWU2MTlmLCAweDIzOGNjMzNlLCAweDhmNmU2MTlmLCAweDQ3MTk4NjdjLAotCTB4MWVkY2MzM2UsIDB4OGUzMzBjZjksIDB4M2RiOTg2N2MsIDB4N2FlNjE5ZjIsIDB4ZjVjYzMzZTQsIDB4NzE5ODY3YzgsCi0JMHhlZGNjMzNlNCwgMHhkNzMwY2Y5MSwgMHg1OGFlZGVkZiwgMHhiM2I3MWRmMiwgMHgzNWRjODZmOSwgMHhmMjEzNDhlZSwKLQkweGE2YWYzNjMxLCAweDdlZmU3MjBmLCAweDM5NzdkN2UyLCAweGEzZTdjMWYzLCAweGViYjcyMTJiLCAweGM5NTQxMzVhLAotCTB4Yzk2YWFlZTcsIDB4M2U0OTFiNzcsIDB4M2UwYWQ3ZjcsIDB4Nzg5MmViZGYsIDB4MWRlMTlhOTUsIDB4MWU0MjJmYzYsCi0JMHhlNjQwYjJhMSwgMHg0NzkxMDAxMSwgMHgwMTFlNDQwMCwgMHg0YTg0NzkxMCwgMHgwMDIzY2M4NywgMHg3MjgwOGYyMiwKLQkweDkxMDAxMWU0LCAweDFlNDQwMDQ3LCAweDA0NzkxMDAxLCAweDAwMTFlNDQwLCAweDNmNDA0NzkxLCAweDkxMDAxMWU0LAotCTB4ZjIzOTQwNDcsIDB4MjNjODgwMDgsIDB4YWYyNGZjYTAsIDB4NjMwNGY5MDMsIDB4MGJhM2YwNWQsIDB4OTYzY2Y3MmMsCi0JMHhjZjNkY2I0MywgMHg0N2UxYzE2YiwgMHg4ZmMzZGI5YiwgMHg4ZmMzZDczNiwgMHg4ZmMzZDczNiwgMHhhM2YwZTMzNiwKLQkweDQ3ZTFlZGNkLCAweGE5NTc3MTliLCAweGZjMTdlODRmLCAweGY4M2Y3MzY5LCAweGI4YmM2NmQzLCAweDYyMTJmODJiLAotCTB4ZmFlZmQ3NDQsIDB4OTE4MDhiZGQsIDB4YzU3MWU1MjQsIDB4NDFlYzY3Y2IsIDB4NGY3YzhjNWEsIDB4NGRjOTVlMjQsCi0JMHg1NDVjZjk1NSwgMHgxOTJiOGI1YywgMHg4NDRiMDZkNywgMHg3ZWExNGZkZSwgMHhmMjJkZjgxYiwgMHgyZDM3Y2NiNywKLQkweGNkZTQyMTRjLCAweDE0YzhiZjhiLCAweDUxM2U0NmY1LCAweGZkZGYzMWZjLCAweGU3Zjg0OTA3LCAweDVkNzI0NWRkLAotCTB4YmM5NTdmNDYsIDB4N2RhMzQwNzYsIDB4NWRiZTFmMTQsIDB4M2I0NmZjZWMsIDB4ZWI0ZDJmNjEsIDB4MWY5YjBiZTAsCi0JMHhiZGZmN2NmOSwgMHgyY2FkOTI5ZSwgMHg4YTZkN2I0ZiwgMHhiMmY3NGZmMCwgMHgxODcwYjU5ZiwgMHhmNzRiMzRiYiwKLQkweGY2ZGFmNjliLCAweDdlZTA0YjFmLCAweGJhOGEwZGZkLCAweGU4OWU4Nzg3LCAweDA5NjczZWEwLCAweDAyNTZkNGU4LAotCTB4ZDRjMjYyM2YsIDB4ZDQ3ZjNkNTQsIDB4NzE2MTYzMzYsIDB4M2M0NmRkNzQsIDB4MDA0NGVkOGYsIDB4ZmQ5OWU3NzksCi0JMHg3OWUyNmFlNCwgMHhiOTA3ZmQ2NiwgMHhiOWNmZTE5YSwgMHg3ZTgxMWZhNCwgMHgwZTRkY2ZiOCwgMHgyNjNkODEyYSwKLQkweGFhN2NiZWY5LCAweGUwYjRmZjNjLCAweDVjNGQxOWRhLCAweGRiNWY3OTNlLCAweDc3Zjg2NjhjLCAweDhmZGZiMjA5LAotCTB4NzQxNjQ4OWYsIDB4YjJhMzYxYmMsIDB4OTlmYmNlYzcsIDB4YmIwMjhmYjksIDB4YmU4NTVkYjksIDB4YmNmYmM5ZWUsCi0JMHhhZjMxMjZhZSwgMHhjZTZjZDVkNywgMHg3NWNhZWZiZiwgMHhhNDVmNzBmOSwgMHg4OGE2NjU0OCwgMHgzYzg0MmJjNSwKLQkweGRlMzc0MTlkLCAweDFmZDg4YmRmLCAweGM0M2VmODliLCAweDFkM2Q1NzY1LCAweDI0ZDBmZGVmLCAweGE5M2RhZDFmLAotCTB4OTFjZDdjMTYsIDB4MjY4N2VmMmMsIDB4MWY4NTViMzksIDB4ZWVjNDE3MmMsIDB4MTZhZGNlMjEsIDB4ZjVhYmU1OWQsCi0JMHg5YTk1YjdmMiwgMHg5ZTc4NGJjZiwgMHgwYmJmNzc1NiwgMHgzNTM1OWJmNCwgMHg2YzM0NmFiNSwgMHgyNzUyNTFmZiwKLQkweDM2YTZlZTQwLCAweGViYzMxYTZjLCAweGQ1MDE0MmQyLCAweGRhYmQwM2VlLCAweDkzZjgxMjVlLCAweGUyMTcwMjM1LAotCTB4MjdkNjJlNTMsIDB4NDE0OWMzY2UsIDB4YTRjODljMjUsIDB4ZGJiODIxYjgsIDB4ZWJmMTlhMzYsIDB4ZTk5YzFiODMsCi0JMHg1NDhmYmY2OCwgMHhmODkzMDNiOCwgMHg3NDQ5NzY3ZiwgMHhjMjc0NDU1ZiwgMHg1ZTQwYWYxNiwgMHg0OTk0NzdhOCwKLQkweDdjNzJkOGZlLCAweDU3ZTJmMjBmLCAweDU4ZjkwNDlkLCAweDYxM2FmMGUwLCAweDhkZmQ2MjZmLCAweGVjMGY3N2Q4LAotCTB4ZWMyYWRjN2YsIDB4MjFkMzlmNTQsIDB4M2ZkZDNhZmMsIDB4YjVjYWYwNmEsIDB4MjlkMWI2N2UsIDB4NDM4NjhmZmMsCi0JMHgzZWEwN2ZlYywgMHhkZTMwZGZjNiwgMHhhMWRmYjA0MywgMHgxZjhlNzE4NiwgMHg3MjBkNGViYywgMHhiN2RhY2I1NSwKLQkweDczODNiYmM1LCAweGE5YmRhMTc5LCAweGYyZTdkNzJjLCAweDAxNTJkZmY3LCAweDBhZWQ5MGJmLCAweDBkZmIyOWVjLAotCTB4Yjk2NTRlNzcsIDB4NTJmNGQ4NmIsIDB4OTE1ZGVlMzIsIDB4NmZlMTAxZTAsIDB4YTFmMWI2N2MsIDB4OTA1ZjE5NjQsCi0JMHg5ZDI2ODlmOSwgMHhhNmZjNDY0ZSwgMHg5MzQ3ZTc1OSwgMHgwM2U1ZWVmZSwgMHhhOTZjNWJiNiwgMHhmMTg2ZWU3MSwKLQkweDJiZDc4MTVlLCAweDNmNTg4YWZjLCAweDliZmJjODkxLCAweDgyYmY1Yzk5LCAweGIxOTViM2Y3LCAweDM2MWFkYmU1LAotCTB4ZmVjNWQyNjcsIDB4YWU2ZmUxYTIsIDB4Yjk1ZGU3ZDIsIDB4YjdkZTI5ZDEsIDB4Mzg5MGEwYWMsIDB4YWM4NjU2MGYsCi0JMHhmZWU5NTdlZCwgMHhhZGE3YWFlNywgMHhjYTk4M2ZlNSwgMHhhMWYyMjc3ZSwgMHhkZmE5ZGY4NiwgMHhkYmQ0ZWU5MywKLQkweDdiZGViYzM0LCAweGRhN2JmMGIzLCAweDUwNzVjODljLCAweDA3ZTkwNmRkLCAweDRkMGE3ZWQxLCAweGI1Y2Y4MDUwLAotCTB4Nzc1ZTMzYzUsIDB4YzMyYWEwMjgsIDB4YmE5YmNkYzgsIDB4OTMxZjM0M2YsIDB4MGMxNzNkMzIsIDB4YjIzYjA4MjYsCi0JMHg4MTEyZjA3MCwgMHgyOTk4MzJkZiwgMHg4NTgzYWRlMCwgMHgxOWIxMWNiMiwgMHg0YWE0NzNlNiwgMHhlM2M3ZGQwOSwKLQkweDQxZmJhNWJmLCAweDI2NWUwZjM3LCAweDE5ODIwN2VhLCAweDU4MDc4ZTQyLCAweDE0YzUzMThlLCAweDE2NWQzZWRkLAotCTB4ZDYxMTdhNTAsIDB4MzZkNGVmOWUsIDB4ZjlmYWUxOGQsIDB4OTVmODQ5YmIsIDB4ZTI1ZmMzZDcsIDB4OWZmMDQ1OGEsCi0JMHg3OTA3YTE0YSwgMHg2ZjlmMTg1NSwgMHgwZjIxMzQ2ZiwgMHg5NzU2YjA3YSwgMHgxMjAzZDY3YiwgMHhlYzIwMjM3NiwKLQkweDEwODJlNTU5LCAweGQyMmM5M2RlLCAweDZmYzBkYmY2LCAweGUwYjVmZTQzLCAweGViZjAwNzI5LCAweDU3Y2I4YTgzLAotCTB4ZTIxNWVlMjQsIDB4NzdjODZjZmUsIDB4MjdkNDFlYWMsIDB4OGYyNmYxZWEsIDB4YzUwZDI3OGMsIDB4NWU1OGIwOWIsCi0JMHhjNWI1MDUxYSwgMHg0N2FmYWUwMSwgMHg5ZDEyZjA2YywgMHhhNGFhNGNiMSwgMHg3N2RmNTkyMiwgMHg5MWJjNWI1MCwKLQkweDM1M2ZiZGNmLCAweGIzNjc1MTFlLCAweGIzZjU3ZTA5LCAweDhhMDdiNzlmLCAweDMyYWEyNzRhLCAweDk0ZGIyN2EwLAotCTB4ZThiZWFkOTIsIDB4OWYyODllN2EsIDB4YmE2NjUwMzMsIDB4ZjVkNTJmMjcsIDB4MDMyZWY1OGEsIDB4ZGY3NThlZjcsCi0JMHhjMzQxOTA5ZiwgMHg2YzA2MDVmOCwgMHhiZjQzM2E2NCwgMHg3NzIyNTNlYSwgMHhmZWVhNGMyOSwgMHg2NGE4MTRhOSwKLQkweGJlOTJkNmQ2LCAweDc5ZmUyNDRmLCAweDNjNzU4YjlkLCAweGRmZjZkMGY3LCAweGZhMDhmMTZlLCAweGQ0ZmNmYzA4LAotCTB4NDU4MzhiMzUsIDB4YWMxZDg2N2YsIDB4NzdkMDFjNTMsIDB4YWRiZTBlYzMsIDB4YjdhMGU3NjgsIDB4M2NjOGVlYWQsCi0JMHhhOGIxMzVmMCwgMHhjNWJlMDVkZiwgMHg2ZGI2ZTdkMiwgMHgzMTI3ZGIzZCwgMHgyNGNiNzIxZCwgMHg1ZDVjZWFmZiwKLQkweDgwYjhmMTRlLCAweGQzZGM0ZTQyLCAweGI5ZTQ4YjFhLCAweGVlNWYwZTQyLCAweGYxMWY5MTEyLCAweGIxOWZiODg5LAotCTB4NmZlMDBmZWYsIDB4ZjQ5NzQzMGYsIDB4YzM2ZmU5MzIsIDB4YTRiOWY2M2YsIDB4ZmYwODBjN2YsIDB4ZTA0ZmVmMTgsCi0JMHg3Zjg3MDMxZiwgMHgxOGZmMDgwYywgMHg4MThmZjBlNSwgMHgwZTA2M2ZjMywgMHhmYzM4MThmZiwgMHhjN2Y4NDA2MywKLQkweDE2ZDg3ZjI4LCAweGYzM2Y3NTM4LCAweDY4NWI1MWYzLCAweGQzOTY2MWZmLCAweGVlNmI0N2M3LCAweDUxZWY5ZTMyLAotCTB4MjM4ZjkyZWEsIDB4NjNmYjEzNDgsIDB4NjI3NjExYjksIDB4N2NiMTNlYzgsIDB4NzJhM2NiYjksIDB4ZjRmZGI0YjQsCi0JMHg1NDdlNWIyMSwgMHg3Y2I2OWE5ZSwgMHhkYzI5ZjNiYSwgMHg4NDFmZDk4MywgMHg5NDViNmIzZSwgMHg5MTk0ZGM3MCwKLQkweDNiODllY2U1LCAweDNjYmU4NDEyLCAweGQ4NGI4ZjcxLCAweDg5ZDczYWRkLCAweDUxNzlkYzk3LCAweGZlZGJiZTdhLAotCTB4Mjc2OTRlYjcsIDB4M2M3YzEzYzMsIDB4NzhiNmUyZWUsIDB4ODlmZjc2MTUsIDB4YWMxYzlhZjIsIDB4MTU0OGIxMzcsCi0JMHhkOWMwMTk3YywgMHhiMjU2Zjg4ZSwgMHhhNWYyODc5NiwgMHg0Y2U1ZTI3NCwgMHg1N2ZmNTc2ZSwgMHg3ZWEyZTdhZiwKLQkweDE3M2NkMWNkLCAweDExYzM2ZmVjLCAweDFmNGNlNmZmLCAweDIxMTM2YmZhLCAweGFmMWUwZGFmLCAweGVhYzVmZTBiLAotCTB4YmNlMmE5OGQsIDB4NzE5MGNmYWQsIDB4OTE0MDk2NWMsIDB4MzFmODMzMDcsIDB4ZGZjNjRjYmIsIDB4ODBlZjc5ZmEsCi0JMHgxMjdiZjQxNywgMHhjMGI5YzgxMywgMHgyZGYyNGVkMiwgMHhiODhjZGY1NiwgMHgyYjVjNmM2MiwgMHg3Mjc5NWYxYSwKLQkweDIyZTIzZTRiLCAweGY0ZWQ0OWEzLCAweGM0MmY0YzVkLCAweGQxMjU1YzNkLCAweGZjNmM0YWI4LCAweDVkNWY0ODYzLAotCTB4MTllNzg5NjQsIDB4N2U5OTRkNzAsIDB4YTllZmQ3NGYsIDB4ZDRmNzQzY2QsIDB4ZjAxOTc5YTIsIDB4YmM1NDFmZTcsCi0JMHg3OTM3M2Y4OCwgMHg2NzRlYjc3YywgMHg4OWNmYTliYywgMHgzZjM0ODgxNywgMHg2MmNhZTdjZCwgMHg4YWZiZmZiYywKLQkweGJkZjgwZjc3LCAweDU2ZWMyZmRlLCAweGViYzI3ODFkLCAweDIxNTFkYTY5LCAweGM0MjliNmY0LCAweGZhYzhkNDcwLAotCTB4ZGVjMWU0YmQsIDB4NWY2MTlmOWMsIDB4ZWIwYjgwZTEsIDB4NWMwNmYyNmMsIDB4YTc3ZjI2NjksIDB4OTgwOTRiYjEsCi0JMHhmODE5ZmRkZiwgMHg4ZTMyNjVlZCwgMHgwN2Q3Yzc1OCwgMHhmNWI2ZWZkMCwgMHg4OGE1YWU3OSwgMHg4M2RiYjI1YiwKLQkweDc0NmI2ZWY3LCAweDcxZmEzMTM5LCAweDYyNWVmMTNiLCAweDBjYmQzZTdlLCAweDdkZTdlYWI5LCAweGJlNjE2ZWMxLAotCTB4NGJmOGQzMTIsIDB4N2U2OWJlMzEsIDB4YjVmYzJmNmUsIDB4NjI0OTY1OTUsIDB4ZWYyZjA2YmMsIDB4MmJkMDBmM2IsCi0JMHgxMDc0YzlkNiwgMHhjZWRmZWE3NCwgMHgzY2M0ZjllMywgMHhlMThkZWU4MiwgMHg3YWM1NTM5MCwgMHhmMTgzNGVmMCwKLQkweDEzOTBkZWM1LCAweGU4ZGQyY2YzLCAweDZkN2VmMTE3LCAweGRiNDc5YzliLCAweDg2MmFlYTkyLCAweGJhZjBlNzNmLAotCTB4MWU3ZWNjNzIsIDB4YjJlNDFkY2IsIDB4ZDFmYTk3MGUsIDB4MGZjMmJkNjIsIDB4YTUzYTYyNmUsIDB4NjM0Y2ZmYzEsCi0JMHgzMTczZDdiZiwgMHhmNWY0MWFiZCwgMHg1YWE1NzUzNywgMHgwN2FlYzZmZCwgMHhhZDRmZTA5ZCwgMHhmMmM0YWU3ZSwKLQkweDhlNWQzMWUxLCAweGNhYmM2ZTk3LCAweDA4ZWZlODQ1LCAweDUzM2VmMGI4LCAweDZmZmRlOWQzLCAweDIyYjdlMzZiLAotCTB4ZmRkYjUyM2YsIDB4ZjE4ZjMzODgsIDB4NGZkMjY1ZWQsIDB4NDY3NDBjN2QsIDB4M2MzZjM4M2MsIDB4ZmE1M2VmMDEsCi0JMHhmNzhiYzZkNywgMHgyZWRlYjViNiwgMHg3YTIxZGZiMSwgMHg4MWY0YzQzZiwgMHgxMWFkZTI1ZiwgMHgwOTM5NjZmNCwKLQkweDUzNWFmZGUyLCAweGQxYmY5NWI3LCAweDcxODkyNGY1LCAweDg0MWJiYTliLCAweDY4NzMyZGZlLCAweDFkNzlhZjJlLAotCTB4YTA5ODVlM2IsIDB4NTk2YTVkMzAsIDB4M2Y5YzE1ZWYsIDB4ZjIxNzJkNWUsIDB4NWJhMWU2NzMsIDB4NzkzZWM1NzMsCi0JMHg5MjczYTA5ZCwgMHhkODg3OWJlYSwgMHg5MDhkY2IwNCwgMHhlYTdlNDM2YiwgMHgxYjNlYTU0YiwgMHg5MzJjMWRmMywKLQkweDY1ODM5Y2YxLCAweGJmZTljN2MzLCAweGI2OWI0ZjRkLCAweDcxMDA1MDM1LCAweDE1NTI0Y2JjLCAweGQ0ZjVkYmU1LAotCTB4NWY0MzRmZDAsIDB4NjUzOGY1NmIsIDB4YTQwNWI2ZTMsIDB4OWYwZGVjOTksIDB4MGRjZjZkZGYsIDB4ZGQwMTlmNDMsCi0JMHhmOWQ2MmM5ZSwgMHg5MTdjZjRjOSwgMHhmN2JhZjE0YywgMHhlNWQ2N2U3NCwgMHhlMzFlZjU1YiwgMHg3NTU3ZGM2MSwKLQkweDEzOWJhZmJkLCAweDI4YjZiMDllLCAweGI3OThkZWRhLCAweDgzZjY0ZDJlLCAweDVlY2U0M2ZjLCAweGY2ODJlOWQ1LAotCTB4ZGQ3YjQ0ZWIsIDB4YTM3NmU5OWUsIDB4ZWM2ZWM4NzEsIDB4YmIwZTk0ZGIsIDB4NzkxMTVmYjEsIDB4YTVkYjc1YWIsCi0JMHg5OWVlYjc1ZiwgMHhmYWRmMTEyNCwgMHhkZjg3NzVmNywgMHg5ZGRiODViOCwgMHgzZDc3Nzg3YiwgMHhhYmFjNmJmNiwKLQkweDQ0ZWQyYzI5LCAweGIwNTNmYjMzLCAweDczZjRjYjFiLCAweDdiNThiM2JmLCAweGM3YTRjY2E3LCAweGNjZjc3ZjRkLAotCTB4ZTJjNWU4NDQsIDB4ZGY5OWZmMWUsIDB4MTg3N2Q4OTIsIDB4NjdiZGU2ZjYsIDB4MGNmNmYxN2UsIDB4MzU3Y2Y0NWYsCi0JMHhjYjc0YjFmNiwgMHgzYzFiMzhiZiwgMHg3ZGM5YmE2NiwgMHgyYTVjMmQ2ZSwgMHg1ZjgxMzlkZSwgMHg2ZTM1N2ZiOCwKLQkweDgxZGU0NDU0LCAweGZmYzI1ZGRhLCAweDJiMWRmODM0LCAweGJmYWMwZDA3LCAweDFjYTg5ZThkLCAweGM5MWZmYzE4LAotCTB4ZTUwZDcyNmYsIDB4MGRmZjI0ZTcsIDB4NjA3MjFiN2UsIDB4MTNlMGRiZjAsIDB4ZjkzNTljZTEsIDB4ZmZiYWM2ZmQsCi0JMHhiMTdiYWZhMCwgMHhlYjVmYmYyZSwgMHg0NTc4Yjc3YSwgMHhkMDk5NmI5ZSwgMHgyMzU3M2NmNywgMHhhZmFmNWVlNCwKLQkweDBmOTZiMjZkLCAweDY0M2JjOWYxLCAweDJmNDMzN2RmLCAweDlmMjQ3YTA2LCAweDY1MzliNjA2LCAweDQ1ZGY3MjFjLAotCTB4YjljNWNhN2MsIDB4Yjk2M2FjNmYsIDB4ZDY2YzZmMWUsIDB4NzRjYjg2ZTMsIDB4OTRmOTk4M2YsIDB4NmE2NjVlNTQsCi0JMHg1M2U0ODRmNywgMHhmZmFmYjNlMywgMHg2MjdkY2ZlYiwgMHg2ZDhlZDI3ZiwgMHhlMmZlMTM4ZiwgMHg4MmZkOWVkMiwKLQkweDFlNWJiNTVmLCAweGJiNzFlNjc0LCAweDc3MTk3MjljLCAweDZkZjNiMjFjLCAweGU3ZTIyZjdlLCAweDc2ZWNiNzhiLAotCTB4Y2E3M2ZmNDIsIDB4ZTU2MmRkMjUsIDB4MDc3ZjRlYmQsIDB4ZTcxNWQwNmIsIDB4ZjczYTYyOGYsIDB4N2JiMGY2OGMsCi0JMHhmNTllNzlmYiwgMHhmMTkzZTM2YiwgMHg2Nzk4YzZhZSwgMHhlMzk0Yjk1ZSwgMHgzNGQ0YjZjNiwgMHhkNmQ4ZDdjYywKLQkweGFiZGMwM2YwLCAweGFiMWZiYjBjLCAweGE1ZTNhNzc3LCAweGYxZTUyYzNlLCAweGFmYTc5N2EwLCAweDE1ZDc3MzUyLAotCTB4MzMyZjljNWQsIDB4Yzk3MmFjZTAsIDB4NzkzMTFmYjcsIDB4M2IyNThlZjEsIDB4ZTIyN2U3YjEsIDB4MDQ5YWM0MWQsCi0JMHg4MmU1ZjkxNSwgMHhmMzA4NDg4MiwgMHg2ZWIxOGU0MiwgMHhiYzQ1ZGIxNywgMHg4OTY4Mjk4NywgMHgxNDc1OGE3YywKLQkweDAyZmY3YzkwLCAweGYzMjY5NDk4LCAweGVmOGNlOTFmLCAweDMwNTc2NWUxLCAweGQ4NGJiN2NjLCAweDIxMDdkM2E4LAotCTB4ZThkM2Q0MzQsIDB4MWZmNjE5NDgsIDB4ZjI0NmI3NmIsIDB4MzRmOTBjMmIsIDB4NTNiNTg5YzYsIDB4Yzk2ZmVkMjMsCi0JMHhlOWRmZGM3NywgMHg1MjVlM2QzYywgMHg3OWJhZTZhOCwgMHg0ZTFmZmFkZSwgMHhmYTNmMTE1MiwgMHgxMmJhN2RiNiwKLQkweDY4NjliZTY0LCAweDE1YWMyY2JmLCAweGI3ZWNjMzY5LCAweDQ2ODNkZTQwLCAweDU1Nzc2ZmRlLCAweGJkZmIzMGZhLAotCTB4ZWJhYzBmMjgsIDB4N2JkNmYxODksIDB4MjVkMjNmMjgsIDB4MTVhNzIzZjMsIDB4ZGZiOGI3M2UsIDB4ZTJmMWI1ZTksCi0JMHgyZmIxOTliZCwgMHg1ZGZmM2UyMywgMHg5NDc3ZTdkZiwgMHg4YjcxZTlhNywgMHhjOWZjMTI0OCwgMHhmZjVkMDRiYSwKLQkweGY5NDcxMmMzLCAweDcxYjk1MzAyLCAweDQ2ZjQ5ZmRlLCAweGY2NGNkMjkyLCAweGZkMzZjM2Y5LCAweDc2YzhhNDNjLAotCTB4MWY2ZjgzMTEsIDB4OWM3Mzg4NGYsIDB4NjQ5ZDNhZWMsIDB4Y2E3YzgyMmIsIDB4ZDZmZDE5ZjUsIDB4ZWQ5M2Q1M2IsCi0JMHhlMjliNzNiMCwgMHhmNjZlZmJjNCwgMHg4ZTIzMzY5YiwgMHgxNTRjMWNkNCwgMHhkYWRiOTlmMSwgMHhlMGVjY2Y0YiwKLQkweDk4ZGI2ZTcxLCAweDVlYmYwYWFkLCAweGU5OTdmM2Y3LCAweDdkNzEyZmY2LCAweDY4NjllNmMzLCAweDBiY2YyM2JmLAotCTB4NTNkOWJlM2YsIDB4MmRmYzQyZTMsIDB4MmI4MTdiYjEsIDB4ZjJiZGY4NWYsIDB4YWJlNDYwMWUsIDB4MDM1NDJiZDYsCi0JMHhmYjBlNWJmZCwgMHhiZGIyYmQwOCwgMHg2NmYzODA1MCwgMHhmZmU5MGVmOSwgMHgxNmQxYjdjZiwgMHg3NWM3M2JlNCwKLQkweDgyY2JjY2Q2LCAweGE4YTlkODdkLCAweDE3NjkyN2YwLCAweDdlZTM1MWRiLCAweDY5MjNiNmM2LCAweDcyY2VjZDRhLAotCTB4OTYyYmViZDAsIDB4MzJmZjFlM2IsIDB4ZWM3NmIxOWMsIDB4N2I4MDI3YTcsIDB4ODE3ZmIxMjcsIDB4YTAzZDYwZmQsCi0JMHhiNGI5NTY0YiwgMHg0ZmJiMjc4ZiwgMHhhMjhhZjkyNSwgMHhiZjUzZmNmNCwgMHhjMmU0MzE3ZiwgMHgyMzM1OWJjOCwKLQkweGYyMGEzM2VlLCAweGY5MGU5NzUxLCAweDYzZjNkMjY4LCAweDBhZTdiYjliLCAweDRkZjc3OWJjLCAweDRlOTczYmUyLAotCTB4NjQ3YmU2MzQsIDB4MGY1NTgzZDMsIDB4NzMzZTU5MDcsIDB4YjUzNDdhNzUsIDB4N2UwMWJkY2UsIDB4NzEzZDhhZDEsCi0JMHhlMzVlZTJhOSwgMHhmZDlhZTYwYywgMHhmN2RkYTZkMCwgMHhjZTVlZWY4YiwgMHhkZjE3OGVlZSwgMHgxNzdhNTRiZCwKLQkweDNlZjJhNjU0LCAweGY1NGFlZDk3LCAweGMyZTc0ZGRiLCAweGRkZmViYTJiLCAweGYyZDczYWQxLCAweDhmMzM0YWZkLAotCTB4N2ZmMWU1ZTksIDB4ZGUyODkzZGYsIDB4YTVkZjE5MmYsIDB4OGVkNmU1NWMsIDB4ZmJlMzRlYzEsIDB4ZjkzZWU5OTQsCi0JMHg2ODk2NGE1ZCwgMHgzZTM2MWJlZiwgMHgxZDMzYzA2ZiwgMHhkMzA3M2JmMiwgMHhkNDM3MzY3NywgMHhkNjk2ZmY3MiwKLQkweDY3MThjOTAzLCAweDk1NmY0M2Q1LCAweGQ3MTA4NTMzLCAweDFhN2MwMzdhLCAweDg3NjZjZWZhLCAweGY5YTZjZWZjLAotCTB4NzdiZmUxYTEsIDB4M2U0MzVjODEsIDB4NGIyMTFjNTcsIDB4NTBiNmYxN2UsIDB4YjU0M2YwOGEsIDB4ZWY5MGI5MzAsCi0JMHhmYzI0YmNkNiwgMHg2YTc2YjNkYywgMHhmODZlYjljNywgMHg0NDc5NDYyNSwgMHg5NGQ5YzNhNywgMHg3ZmYwNWNhZSwKLQkweDcyNDdkZWU1LCAweDljN2M2ZTcxLCAweGJkYmFmMTI0LCAweDc2MTJmZWI3LCAweDRlMzI3YjQ4LCAweDEyMGVkZmZhLAotCTB4NTA2MzZkZmUsIDB4ZjdjNmNiZmEsIDB4MWJhYTQ0NTMsIDB4ZTU3M2YwZjcsIDB4OTViYzYyODksIDB4YzYzODc3ZmEsCi0JMHgxMGJmZDhiYSwgMHhhODNiMWZlNSwgMHhmN2MwZWIxYSwgMHg3N2U3OTAzNSwgMHhmMDY2ZTExZCwgMHg0N2Y2NWRmMywKLQkweDQ1NzhlZjkxLCAweGJiNzdiZjk3LCAweDdiYzRmM2VjLCAweGY4MDQ1NjIyLCAweDFkNzZlZjE1LCAweGQxMWU0MjQ4LAotCTB4ZWNhYWMzZjAsIDB4ZjBlYzA1ZWYsIDB4N2UyOTBlOTcsIDB4NDU4OWMzOWMsIDB4ODYzZGM0MjcsIDB4NmFjOTc4ZjQsCi0JMHg3NWI3OTRhZiwgMHhjYmNlNzMzZiwgMHgyYWZjMmQxZSwgMHgwOGUyZDI1MSwgMHhkN2UzODZiYiwgMHgzNGRmYmExZCwKLQkweDJmZGMxZjg0LCAweGZiMmQ2NWVlLCAweGQyZDA1ZmE0LCAweDA1Zjg0YTczLCAweDdjNjE5Zjg2LCAweGRmNmFiNzQ3LAotCTB4MTgyN2UxMjksIDB4OTQxZjU2ZmQsIDB4MjgzZDY5NzQsIDB4NmQwYTFiY2IsIDB4YTAyNWJjNDYsIDB4YWNiZWUwMTQsCi0JMHhkOTcyN2MwOCwgMHgzODM2NGJmZCwgMHgyNWU2ZjhjYywgMHhiZDAwMGExYiwgMHg1ZmE0M2M3YSwgMHgwYjViZTVmOCwKLQkweDMzZWUyNTdmLCAweDcxZjUxYmFkLCAweGU2OWE3NzE5LCAweDQ2MzY5OTRiLCAweGU1YzVjNzdlLCAweGVmZTgzZGUzLAotCTB4NWFkZmRjYjMsIDB4NTBmYmNhMGYsIDB4OGI2MTM1YjgsIDB4ZGFiYjE3NzgsIDB4NmNlYzAwZTMsIDB4N2NmMzg4ZjUsCi0JMHgxMGFkOWI1NywgMHg0YTAzYzllZiwgMHg4ZWU3ZjA4MiwgMHhjNmI5ZWZlYSwgMHgzYzRkZmFhYywgMHhkNDU5MDRlMiwKLQkweDEzY2I2YmRmLCAweGE3ZjJiOGVmLCAweDE0MTkzY2YxLCAweDhjYmFlZjE0LCAweGZjMmU2N2VmLCAweDE4YTU0N2UzLAotCTB4ZTQ1Yzc2N2YsIDB4OTc4MDIyMDAsIDB4MDk2YzdiNGUsIDB4NTNiMzI1ZjIsIDB4ZjhhMGE1MjIsIDB4OTUxZjg3YTUsCi0JMHgwMGU0NDY3OCwgMHg2MGRlNTBlMiwgMHhlOWNhOTJmNywgMHg2OTVjNDY3ZiwgMHhhZjg5NjJiZSwgMHg2NTY4YWRiZiwKLQkweGUwZWI0MTIwLCAweDZiOGM5Nzc5LCAweGZlN2M4YmY0LCAweDhlNTI2OThjLCAweDdiZTMxY2M2LCAweDVmNTFlZTI0LAotCTB4MzAzZGM0NzgsIDB4Zjg5YjU0NjMsIDB4MjI4YThiYWUsIDB4MTQ3NzY4YTUsIDB4ODIzZTU4N2QsIDB4ZjA4NDI2NWYsCi0JMHhjOTNjOGMzZSwgMHg5ODNjY2YzMiwgMHhhOGVmMTIxZiwgMHgzMGRmMzJkYywgMHhmMDJlOWZkMCwgMHhiNDMxY2UzMCwKLQkweGRhMmRkNGZmLCAweDVkZDFjYWM3LCAweGEwZmRlNGQzLCAweDYzZTY0ZTI2LCAweDM5OWM1NDZmLCAweDliOTMwMGZmLAotCTB4ZmEwYjVkYTcsIDB4OGJkYmU0ZDUsIDB4ZGVmMWUzZmQsIDB4YmYwM2JlNGUsIDB4MGQ2ZGU3YTAsIDB4YmU4ZTc5N2YsCi0JMHg5ZWZkMWNhZiwgMHhkMzI0YmFlNywgMHgwMjUzZmQwMywgMHhlNWRkZjEwMSwgMHgxYWM3NDU3ZCwgMHhmZDAzZmYzMSwKLQkweGQwZmU0MjZlLCAweGE3MzhjNzc4LCAweGFiZGU0MTNmLCAweGU3MTZhOTJlLCAweDUwNzNlMmFiLCAweDU2M2ZiNzFkLAotCTB4MWRlMzBiNjQsIDB4MTZlNDAzZmYsIDB4Yzc3MjY1NzksIDB4NzhiNmQ5ZjgsIDB4Mzk1YjFlZjEsIDB4MzgxN2NhZmEsCi0JMHg5ZmVkYjI2NywgMHhmZWYwYTZmNiwgMHg1MTUyZmZiMywgMHgwN2ViODM2MSwgMHgyNmY2M2NjZSwgMHgzZGMxYmFjMywKLQkweDdkOGZiMWZiLCAweGY2MjM1YWM5LCAweGZhYTA3MjcxLCAweDdlMjRjNjk0LCAweDU2ZTNkYmMwLCAweGU2NDVmOWU1LAotCTB4ZmJiZDFmZjUsIDB4NWIzNGU0OGIsIDB4ZmExNzVkNzQsIDB4Nzg3MzNjY2YsIDB4YzQ1YmEwMmEsIDB4YjUxY2U3YTUsCi0JMHhjYzU2MzhjYiwgMHhmYTY0MmU3YSwgMHg2ZTcwYmJjNCwgMHhjMTdlZTgyNywgMHg1ZWUxMGI2MywgMHhlZjY4ZTczOCwKLQkweDFjZGY1ODNiLCAweDdkYzY3N2JjLCAweDZmM2NlZGMxLCAweDk3YzhlNzNlLCAweDFhZjc4YTkzLCAweDY0ZGY5ZDMwLAotCTB4MWFjMGVkNDcsIDB4ZWY0YTNjZmQsIDB4MDU3OWJkZjQsIDB4ZWQ1N2M5Y2UsIDB4NzMwMzc4ODQsIDB4OTYzZmYwNTIsCi0JMHgxZmMxNmY3ZiwgMHg2OTljZTNjMSwgMHgyYTM2ZGVmMiwgMHg0ZDM4MjZiZiwgMHgwNzI4NjNlOCwgMHgzZWQzMzhmYSwKLQkweGQwYjUzYmZjLCAweDYzOGY0NTM0LCAweGZjMWE3ZTQ5LCAweGYwNjNmODMyLCAweGRkMzNhMGMzLCAweDE0YTVlMjcwLAotCTB4ZjhiN2QwNDUsIDB4M2ZhZTkyODcsIDB4ZTJmZDc0MTAsIDB4NGI1NjI2ZjgsIDB4ZDcwZmU0YmEsIDB4N2ZmZWZhMGEsCi0JMHhmYmM4ZWJhMywgMHgwZDg1ZGY5MywgMHhkZTFlZWZlZCwgMHg3ZjY1OWU1ZiwgMHhkYTVmZmQzZiwgMHhlZmY3ZDA5ZiwKLQkweGQ2MTNiZmJjLCAweDg2NzdhNWZkLCAweDRlNDEyN2UzLCAweDdmMDliMjFlLCAweDI4YmRmNjJhLCAweDk3YjA5MjE1LAotCTB4MTEwNGY2ZjUsIDB4ZTQxMmQ1MzcsIDB4Mjc2YzA2ZjcsIDB4MzQ5ZDgyNWYsIDB4ZWFiOGUzZWMsIDB4OGFmYzMxNDgsCi0JMHg2MzhmNDQ5MywgMHg4ZjViMTE1ZCwgMHg1YTc4ZmYyOCwgMHhiMTkzOTBiZSwgMHg3YzRiMjI3NCwgMHg5NDg4ZTEzNywKLQkweDU0ZWQ2ZmMxLCAweDc2ZGQzYjAyLCAweDg3MzNjOGMwLCAweDdhNTY1ZjYxLCAweDQyZWRkZTQ0LCAweGYyNzQxNmM4LAotCTB4YTFhOWRkZjgsIDB4ZGU3OGNiOWQsIDB4NDQ4YjliZWUsIDB4ZDEwMmU1MWUsIDB4MWYzODIzOTQsIDB4N2YwODI0NTcsCi0JMHg4NDk1M2JiNCwgMHg5ZGFlZWFkZCwgMHhlNzk2ZmMyOCwgMHhjMmU3YjZiZiwgMHg0ZGFmZWQ1ZiwgMHg2ZWRiZjkxMCwKLQkweGZjM2I2NDdmLCAweDNlMDllZWNmLCAweDdmNGRjODM1LCAweGY4NDRkMGExLCAweDZlMDVjMWFiLCAweDAyZjc0ZjMxLAotCTB4YjdiYjA3NjksIDB4ODNmN2M4ZTcsIDB4ZjIwOWZhMTQsIDB4NDhhZThmNDgsIDB4ZWVjMTc5MTAsIDB4YzQyYzgxZGQsCi0JMHhkMjRjM2VjZiwgMHgyZTFmNDM0ZSwgMHhiODczY2JiMSwgMHgxOWNiOGYzYiwgMHhkNGQ0YWMzZSwgMHg2MmJjNjMzNiwKLQkweDZkNDhlZWI5LCAweDc5N2JiM2MyLCAweDM2MDJmODk0LCAweGIyN2U1Yzk5LCAweDZiZTQ0OTNkLCAweGUyMzE3ZDBkLAotCTB4YTc4MmUzZDUsIDB4YzY0ZTgyNzYsIDB4ZWJlZmI2NzcsIDB4NWRkMDY1ZjIsIDB4MGVlZmM4MDksIDB4NzIxYmZhMGQsCi0JMHhiYmE3NWEzNiwgMHhiNzk0YWY3MiwgMHhhYmM3ZjdhMSwgMHgxZTNmYmM0OSwgMHg3N2MwNGJjYiwgMHhhYTcxZjU2YSwKLQkweDMyYmU3NDBmLCAweGViMTJmYjQ1LCAweDdjY2I1Y2VlLCAweDkyZmQ2M2IxLCAweDFkZjEyN2ZlLCAweDk1ZmUzMGUxLAotCTB4ZDM4ZjQyYjMsIDB4ZDQ1ZmRmZTgsIDB4ZjUyM2I0OTMsIDB4ZWQxNmY3YzYsIDB4MjgyZGVmZDYsIDB4NzkxNTM2MzIsCi0JMHhkYzQ3MjEzYiwgMHg5YWJlZjdmZiwgMHg4ZGQ4MGFiOCwgMHhjMTI1ZGY4MiwgMHg0ZmZmMWM2ZSwgMHg4MGVmYjBmYiwKLQkweGJjZjIxNWJjLCAweDI5NmJjNGYwLCAweGZkZmViZGEyLCAweDFmNWZlMTg5LCAweDgzOTQ3ZmY3LCAweGRkZTRlMjczLAotCTB4ZmMwNThjYWYsIDB4YWQyNmE5MmEsIDB4NzBmNWQ3ODIsIDB4NzBmM2U3ZWQsIDB4MTU5ZmJkNzQsIDB4YmNjZGRmMTEsCi0JMHg4ZTY1ZmI1ZiwgMHhmYmRmYjc4OCwgMHhlZmY3OTA4YSwgMHgwMmZmY2ViYSwgMHhiMzhiN2E1ZiwgMHgwMDAwNDBkMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU5NDc4MDksIDB4ZTc3ZGYwZDUsIDB4OTkyNjY2NWQsCisJMHg2YzgxYmM5OSwgMHg0NGQ4NGVhYywgMHg0MjQyNzQwYiwgMHg2MWRiMTAxYSwgMHg4MzExNjg4YiwgMHg5ODE3MDU0YiwKKwkweDI2NGY2NDA4LCAweGRhYzdmNTIwLCAweDAwNDBjZmVmLCAweDhiNDM1MTUxLCAweDAzYjQ1YTM1LCAweDM0MWIwNTA0LAorCTB4MDI0MTgwZDgsIDB4MmQ4MmUwMGUsIDB4NWQ2YWQ4ZDUsIDB4YzhhMGQyZGEsIDB4MWI4MDkzMWEsIDB4Y2VmYzVkZmUsCisJMHhjOWJlZjczOSwgMHg4MjI2NGVmYiwgMHhmNWZmZmZiNSwgMHhmOGY4ZmVmYiwgMHhmNzdiZWU1YywgMHhjZTczZGRiMywKKwkweGUyOGVmNzNkLCAweDhiOTRjNzE4LCAweGZmMTJmYjE4LCAweGRkOThjN2JlLCAweGQ3MWIxOGM2LCAweDIzNTYzMjlkLAorCTB4Y2YyZDRhZDIsIDB4MDNkMDU4Y2QsIDB4YWM2MmNjZmYsIDB4OTc4NWFkZGMsIDB4NjUzNjMzYTcsIDB4NWVmOTFhODcsCisJMHg0ODM3ZTQxMiwgMHg2ZGU0M2I2MSwgMHhkZTU0OWQ3YiwgMHgyM2U3OWViZSwgMHhhMGNmY2Q2ZSwgMHhjODNhYTNmYywKKwkweGRlZGVkMDRiLCAweDUwNjVjMGYyLCAweDY2NDNiOWRlLCAweDkxZGJiMTFiLCAweGMyOTYzNjcxLCAweGUzMDczMWQ4LAorCTB4Y2Y5MDU5N2YsIDB4YzljMGFjNjYsIDB4ZjYxYmU1YjMsIDB4NDVmNmM1Y2QsIDB4ODRlNjc2NGQsIDB4MTU3N2NhZmUsCisJMHhmMjBjYmNjZSwgMHg4NjU1MDc4NSwgMHgyZjM3Y2E1NSwgMHhiZTQzZmFkMywgMHg2MDM1MmMzOCwgMHg5ZjMyNjNiZSwKKwkweDFjYTc2ODVmLCAweDNiZjUwY2RlLCAweDM3MjkyZDNjLCAweDU1M2IxOGI4LCAweDhkNWU2MGU1LCAweDRiNzc2YWIxLAorCTB4MThhM2Y1Y2EsIDB4Y2Y2ZjA5MmIsIDB4ZjUyNTc2YzUsIDB4M2E5NzBmOTIsIDB4OTdlNmM3NjUsIDB4YjZiYWUxZmIsCisJMHg5N2JiM2U0YSwgMHhmMTJkZDJiMSwgMHhjZjkyM2JjYywgMHhmZmY4NGJlMSwgMHhmOTFjYTM1OCwgMHg4NjJmOTQxZSwKKwkweGI3ZTgzMjc1LCAweDMyZTRkNTkwLCAweGFiNWZjNzE5LCAweGYwZGRkZDc5LCAweGQzYTU1NTNiLCAweDdjYmU0NjM4LAorCTB4ZWQwMzhjMmIsIDB4N2M5NjllMmEsIDB4MWIwYWM0YjgsIDB4ZjhjMDM0MGIsIDB4YjM5Y2JiZWQsIDB4N2Q3MGI5MzcsCisJMHg2ZTExYjRjYiwgMHgxYWRkZDc1YywgMHhlNzBjMmJkNiwgMHg3MTdhNzRlZiwgMHg1Y2I0MWI3ZSwgMHhiZjU5MmYyOCwKKwkweGQ1MTgyYjQxLCAweDk2ZTk1ZmRkLCAweGQ1NzlkNmJlLCAweDk4MGQ0ZDBlLCAweDUzZDNhM2NhLCAweDQ3Nzk4YzU1LAorCTB4MTg0YmU3NzQsIDB4YmY0MDM3ZjMsIDB4YjM2YjA5NGMsIDB4ZmY3Zjc3NDYsIDB4OTYzMjI1ODAsIDB4Y2NjYmZkOGMsCisJMHgxZmVlZThlYiwgMHg0M2RmNDkyMCwgMHgwMTNmYzE2ZiwgMHg2ZTNkYTE1ZSwgMHhiNzgxYWI4MiwgMHhkYmZjM2FjNSwKKwkweGIzYjc4ZGRiLCAweGQyYTNjMGJhLCAweGRmZWU2ZDk5LCAweDNjNDAxZjQ4LCAweDEwNmE3Y2MwLCAweDExYWU5MDRlLAorCTB4NjQ0Y2YzZjMsIDB4ZGZlODE0OTMsIDB4YzRiYTY3ZTMsIDB4OTE4ZjVmN2EsIDB4OWYyY2E4ZDYsIDB4NDIwYjU4YzEsCisJMHg3OGNhZmRhMywgMHgxMTZjNmJjOCwgMHg5M2Y2MzFmMywgMHhhOWZlZDkxNSwgMHgwNTlmYmY5MCwgMHg1N2JjZTJlNiwKKwkweGM0MjI4MTQ4LCAweDY5MGQ2MzEzLCAweDI0YWJiZjQ4LCAweGZmZDcxYjM2LCAweDk0MzQ5YzAzLCAweGY0MDdlYWFmLAorCTB4OTlhZjcwMDksIDB4OTY0OWJkOTYsIDB4MzA5M2RjYzQsIDB4YmRjNGYwNWYsIDB4MjE0ZmQ0ZTksIDB4M2Y0MmEzZjUsCisJMHg4ZmRmY2Y0MywgMHhlOTYzOWI5ZSwgMHgzMjJkY2Y0NywgMHg3ZWE0YTlmYSwgMHg0ZmQ2MTc5YywgMHhlYjA0ZWU0ZCwKKwkweDhjNGI3MjdjLCAweDdlYTRlZTdlLCAweDJlYjYxN2RjLCAweGQ2ODk4YWZkLCAweDQ2NTE1Y2Y5LCAweGY1NGUyNGZkLAorCTB4OTdkNDAwYjEsIDB4MmQ2MDdhMGQsIDB4NWRjYTE5N2UsIDB4ZWY2Mzg5ZjUsIDB4OThiYTY2NjUsIDB4ZGZmOTEyYmMsCisJMHhhNjYyNWMwZCwgMHgzODljODQ4YiwgMHhmYTI2MWQwYiwgMHhkMGYyNThmYiwgMHg1YmVjN2U5MywgMHg0NDgzMGYyMiwKKwkweDVmMWEzNTEyLCAweDVjOTFhZmViLCAweDQxZGZkNDk4LCAweGJiZmEzYmY5LCAweDMxZGMyZTQ4LCAweDBlYjE3MDIxLAorCTB4NTliMWMwZjMsIDB4ODE2YmM4M2YsIDB4ZTgzMWViNmYsIDB4YjEyOWU2MWEsIDB4MzZiZDRjMzQsIDB4ZWZjYmEzNGMsCisJMHgyNjFjMzk1NiwgMHg4OGRiZjgwZiwgMHg2ODNlZDAyMywgMHgwODkxMWNlYiwgMHhhNGQyZjVmOSwgMHgzNjVjMjA1ZiwKKwkweDI3YzExYjMzLCAweDU4OTU2NjRlLCAweDQ4Y2VjZTJmLCAweDllOWRkZDNlLCAweDgyNjQyOWJkLCAweDgwNDFlYWQzLAorCTB4ZGZiYmE5N2YsIDB4MGQyMDZhZDUsIDB4YmIyYjZiZTksIDB4YjZmNDg0MjEsIDB4YTdhYzEwNmEsIDB4ODU0ZjYzM2YsCisJMHgxNDg0OGZhZSwgMHgyMGE4M2Y2OCwgMHhkNzY5ZTEwZCwgMHhlM2NkYmY4MCwgMHgyOGZlMzA2YiwgMHgxYzE5ZmYxYSwKKwkweDNmOGUwNzc3LCAweGY2ZjhlN2FlLCAweGYxOTYzOTIxLCAweDJjOGI4MzFkLCAweDE4MzQzYmUzLCAweDE3N2RlODFmLAorCTB4MGY4YzU1YmIsIDB4ZDhjMDliZjAsIDB4Njg1YmExZjMsIDB4MjJlMGZiN2MsIDB4OGQ2ZWZmMWEsIDB4OGZjNjU5MTUsCisJMHgwNWZmMWFlYiwgMHhkZWE1ZjcxYywgMHg4MjY0M2ZkNiwgMHg0YjgzZmQ3NSwgMHhmOGQ3ZWJhYywgMHgwYjY1NWZmYSwKKwkweGI0NzFmOGM1LCAweDE2ODc1ZmZlLCAweDJlMGZmNWYwLCAweGYzYjdlYmUxLCAweGY3YzZiYjdlLCAweDc1ZmZjMTc0LAorCTB4ZGVhZGY3MWMsIDB4YTI3NDNmZDYsIDB4OTUxN2ZkNzUsIDB4ZTc2ZmQ3NTksIDB4Y2FjYmJmZTMsIDB4MWEyZWY4YzUsCisJMHgxOTUwYmRmZiwgMHg2NTQ1ZmY1ZiwgMHgwZjY2YmUzNCwgMHhiNDhlOTBmOCwgMHg2MTk1NzEwMSwgMHgwNDBkOWYxOCwKKwkweDE5MjU0ODg2LCAweDY0NzRhN2U1LCAweGZkYTBjNjFmLCAweGUwODQzNjNhLCAweGE3MWM0NzcwLCAweDgwZTJjZmJiLAorCTB4ZjJkZDVjZGUsIDB4YTM4MTg1OGUsIDB4MDg1NTllNDAsIDB4OWZhZDJmOWEsIDB4YTU5Y2ExYTQsIDB4MGI3YjkwNzIsCisJMHgzNDE3NTRjNSwgMHhiMGRmYjRjOSwgMHg3MGYwZjY3NSwgMHg5MzdiNmY5OCwgMHg4MmZjYzIxYywgMHg2NTg3OTc3NSwKKwkweGJjZDhlZmRhLCAweGIwYTc2YzNjLCAweGYwZmY3ZTA4LCAweGNkMWJkMWExLCAweDE3NGU4YWViLCAweDVhYzdhOGQ2LAorCTB4ZTdjNDdjMmQsIDB4NDZjYzlhMTMsIDB4YTZmY2MyNTYsIDB4ZWI4YzExMjEsIDB4MzkwMzFmY2UsIDB4YmU3ZTQwY2EsCisJMHhkMzE0NzIwZiwgMHgwNzhjMmFlMywgMHg5YzgyOGZkZiwgMHg2Zjk5OWE2NSwgMHgzYzdkZjE5NiwgMHg5OTFjZGVjNCwKKwkweGZmODI3MjgyLCAweGJjMzg1MzFkLCAweGMyOTEyZDhmLCAweGQ2Y2ZmZjA4LCAweDNlNTBkMjJlLCAweDA3ODlhYzJkLAorCTB4MjNjZjc3YTAsIDB4YjlkNGYwMjgsIDB4MjhkZTFlY2IsIDB4MDhiZDNjMTEsIDB4MTU4OTFiOWYsIDB4YTAzM2ZiMTksCisJMHhiNjgwMWZiNSwgMHhhNWFmYjZiMCwgMHhiYzJjMmRkZCwgMHhjZmVhMGQzMiwgMHg0ODNmOTM1ZiwgMHgzY2RmZjU4NywKKwkweGM2NTYzZWRiLCAweDA3Zjk4M2ZkLCAweGQ5OGY4OGQ4LCAweDYzMGU1YjAwLCAweGFhZDcxYmIzLCAweGUzNzMyMDAzLAorCTB4NTZmZGY1NmMsIDB4MDEzOWZiNTMsIDB4MjJlNmZlNmIsIDB4MGQ1ZGJlNmIsIDB4MzdkNDM2YWIsIDB4MDFiNjI1OGEsCisJMHhkMmI1YmRmYSwgMHg5MzhjNmU1YSwgMHg3OGUxZjUyOCwgMHgyMGZkZTMxNSwgMHg1NmY3Y2Y4NSwgMHg2N2UyYzc0YywKKwkweDU3M2FmMDlkLCAweGY5OGQ2ZGU3LCAweDU5NTJlZjA0LCAweGQ2Y2JmNjg0LCAweDRmZjg0NjY0LCAweDlkMDE3YWE2LAorCTB4YmU3YTNiYWYsIDB4M2Y4NzU1NzMsIDB4ZjczM2U2MGYsIDB4MTllMDk5NGUsIDB4YmRkNmZmM2QsIDB4MThkYjdlZjEsCisJMHg1NjNmNmI0OCwgMHhkN2EzMDQ5MSwgMHg3OWZmM2QxMywgMHhhM2Q3YTM0YiwgMHgxZjk2MWU5MywgMHhlOWNlZmU4YSwKKwkweDgyOWU5YTI0LCAweDFlZmE5MzRkLCAweDZmMmJkNTM1LCAweDUxZWZiMmI4LCAweDZlOTU3ZDEzLCAweDE3Yzk2NTk5LAorCTB4ZWE1OGU3ODcsIDB4NWJlNmQ2MTcsIDB4MTRkNjE3Y2EsIDB4YWZlN2NhNWIsIDB4ZTdjOTY0NWUsIDB4ZDRiNGVlODcsCisJMHg5OTc0Yjc5ZiwgMHhjYWQ2ZmNhNSwgMHgzN2U1MmM3YiwgMHhlNGI1YWQxNywgMHhiMTFlMDRlNywgMHhmNjcxYmZkNCwKKwkweDZkYjk0YjA2LCAweDIwZDcyNWVmLCAweDI1YmY1NTFmLCAweDNlMzdkYzMzLCAweDAwN2IxZDc1LCAweDVkNGZjMWY1LAorCTB4NzFmMTBmOGEsIDB4Zjg4ZDJhYTIsIDB4OTc5NTU0ZTAsIDB4NGNhNmY2ZDIsIDB4YzFjYjgwNDcsIDB4MTY3MTU0MDIsCisJMHhhZDA4NmIyZSwgMHg5OTcyODg5ZSwgMHg1ZTJjZmM5MSwgMHgxYTE0MzNiNiwgMHhlNGFkZGEwOCwgMHhiNWM5ZjgyNSwKKwkweDA5MDA4YjFhLCAweDE3NGZhYzRiLCAweGE2Y2E3NzFkLCAweDk0ZjNkNmYyLCAweDY3YTMwMmQ3LCAweDViOTcyY2Y2LAorCTB4NmUwZjdmNjMsIDB4ZTUwOGJmY2MsIDB4MDBmMjZmNGUsIDB4M2VlMDA2ZmUsIDB4ZjdmNjIxZDcsIDB4ODkzMmYyZTgsCisJMHgzM2JmOTllNSwgMHhmY2Y4OWNiNiwgMHg2NWIzOTA5YywgMHg2NTA3OTcxYSwgMHhjYzliZjZjZiwgMHg4YzhmOTgzYywKKwkweGYxYWFmY2E4LCAweDI4YTgwMDFhLCAweDRmM2I1MTI3LCAweDJlMDA3YTQ2LCAweDUwY2JkMGIwLCAweGVkYjc3ZjBiLAorCTB4MTU1ZTY5OTMsIDB4YTNjNjEzMjgsIDB4MjM1YmM5YzgsIDB4MWM4OTljYTEsIDB4NjhkZDdjMTgsIDB4N2VmZjg3OWMsCisJMHgyOWFlZjkwOSwgMHhiNmY1ZjY5OSwgMHg4ZjdkZTlhYSwgMHgzYzlmODgyYSwgMHhjZDU0NGY0YSwgMHg1NTU4ZjRhNiwKKwkweDU1YTNkMjgwLCAweDVmYmU5NDQ1LCAweDZiNjk0OTU1LCAweDBmNGE1MmQ1LCAweGZkMjg4NTU3LCAweDRhNmFkNTUzLAorCTB4YTFhYWFiZGYsIDB4NWFhYTlkZjQsIDB4MTU1MGZmNGEsIDB4Y2FiZGI0YTYsIDB4MGZjMWE5NGYsIDB4NDkzN2YyNWQsCisJMHhhZWMyYWJlOCwgMHhmMjg3OWQ4MCwgMHg1NjVhYzU2NywgMHhlMjE2ZGQ0MCwgMHhmMjFhNWY3MywgMHg2N2Q3NTlmOSwKKwkweDNmMWY1MDIzLCAweGExOWQ4ZWZiLCAweGJjMWJkZmJlLCAweDc3YWRlOWEyLCAweDVmNDlmYTNjLCAweGZlMDMwODI5LAorCTB4M2I5NjdiMzMsIDB4OWM5ZTM4ZTMsIDB4ODE5ZDM2MzYsIDB4Zjg2N2JhM2MsIDB4NDZkYmJlMTMsIDB4OTI0MTVlNTEsCisJMHgzN2M5MGQ4MSwgMHhkZmEzMWRjYiwgMHg3NWYwOGM2MSwgMHg3ZjMxM2MzZSwgMHgwMTZiOThlNywgMHhmZDFlYzcxZiwKKwkweDdiZjYzNjZiLCAweDcxN2ZlYzRlLCAweDg3ZGE2NDA3LCAweDBmOTM2NDU5LCAweDFiODI2NWYxLCAweDNiOWQ2YmVkLAorCTB4MGYzZmJjODQsIDB4ODJlYTNlZmMsIDB4MDY2MGNiNWYsIDB4Mjc0OTA0ZTksIDB4NjhkYjNiZmEsIDB4YjFjMjBhNjcsCisJMHhjNDBjM2UzOSwgMHhkYzFlY2VjZiwgMHg1YzdlNDFlNCwgMHg4ZmQzNjY5YywgMHg5MTgzODBjNiwgMHhlYmE0Mzc5NiwKKwkweGQzZmVmMzJlLCAweGFkOWZjZDY0LCAweDkwMzdhNjkxLCAweDVjMjZmNjNjLCAweDRhZTkxYTNmLCAweDQzMGU4ZmQ3LAorCTB4NmE1MWE3ZmMsIDB4NGQzOGIzZjQsIDB4YmYwMjhmZDMsIDB4MzQzMmRhOWUsIDB4NjFkZmVmODEsIDB4MjdkNjBmYmUsCisJMHg1ZDgyYmQxMiwgMHhkNWZmZjU0OCwgMHgxZmFkZTlmMywgMHgzNThjM2U2MywgMHgyODFjMGZiMiwgMHhlODZjYTAwZiwKKwkweDFlOWRlZGY5LCAweGQxM2U1Nzc4LCAweGNkNWYxMGYyLCAweDJmYTg2N2VhLCAweDVmZmZjMWM0LCAweDE1N2VjMTBlLAorCTB4MDZmZDFiY2EsIDB4ZmQ5MGU0MWIsIDB4ZGViZGY4ZGIsIDB4ZjNiNDFlMzIsIDB4YjYzNzM2MWEsIDB4MTU2ZTlkZWIsCisJMHgyYmEwY2M3NiwgMHgxYTFhNTc5MCwgMHgzYTI3NjRjYiwgMHg5MmJlZWI3NSwgMHg5YjA3Yzk2OCwgMHg3ZDk2ZTlmYSwKKwkweGZjMDFmZjA2LCAweDQxNTI4MjBmLCAweDU0MTMyOWJhLCAweDU2YjhhMWQ0LCAweDIzYmYzMDRiLCAweDJmMDEzZjI4LAorCTB4MmJkNzg5NDEsIDB4MDE2YWI0NzcsIDB4MGI2MzkxMmYsIDB4ZTViNzE5ZWEsIDB4YmRlNzc0MTgsIDB4ZWYyMDhmZjEsCisJMHg2NTQ2ZmU0ZiwgMHhkZmY5NjJmNywgMHhhZTUwNTY2MCwgMHhmNzIwYzUxYSwgMHgyZjlmOTA2YywgMHg5NjM1Yjc3MiwKKwkweDc3Yjk0MGNlLCAweGY5ZjdjNmQyLCAweDgzY2YyYzA1LCAweGFiMTE0ZjQ2LCAweGU3M2Q0NmM5LCAweDhlOWI2NjIzLAorCTB4ZmIxMWZmZjQsIDB4NjRkMzI3OWQsIDB4MWE2Y2Y4NmYsIDB4NmFmZTczYWQsIDB4ZmEwYjNlZWIsIDB4NTg1ZjI1OTksCisJMHhiMDE3Y2Q2YiwgMHhkZTkwNTM2YiwgMHgyY2E5ZDYwYiwgMHg1YTVmMjEyYywgMHg5ZDM2YmRjYiwgMHg5NTY0MmRmYSwKKwkweDQxZGVjOGFiLCAweGJkYzYwNTdiLCAweDAwY2E2NzRkLCAweDczZjk1Zjk4LCAweDQzZTc2NThmLCAweGFlMzYzYmZlLAorCTB4N2JmNjFiYTcsIDB4ZmYzZTFmNzEsIDB4ZTZiMGE0OTIsIDB4MWEwZmYyODcsIDB4MTk3MDdmMzMsIDB4NTVlMWY2YzMsCisJMHg2ZTQyYTcyOCwgMHg3YWNjZGJlNiwgMHhjZWViZWZlMiwgMHhjNmJlN2EzZiwgMHg4ZmMzZDI3ZSwgMHg2ZjIxZTYyMCwKKwkweDE4ZTFmYzkxLCAweDliMzRkYTc2LCAweDEwYWRmNDI0LCAweGJhZTAzN2E1LCAweGJlNmI3YTRkLCAweDJmOTE4MzgwLAorCTB4MTlkZmNhOGYsIDB4ZTlhN2ZmOTUsIDB4ZTg1OTg5MmQsIDB4YzgxNDg4ZWQsIDB4ZmE3MzI1YjcsIDB4NTI0MTdkNDIsCisJMHgzN2MwYjUzYSwgMHg0N2FkM2ZlOSwgMHhkMmZmZTVmZiwgMHhmZjQyMDdmZSwgMHhlZmZlOTZkOSwgMHgzZmY2OTdmYywKKwkweDU3ZmNjN2FjLCAweGZjYmZlYWM2LCAweDQzM2I2ZGI5LCAweDllNGE2ZjIwLCAweDYwYzNjODc5LCAweGQ0YTkzYTFmLAorCTB4ZWYwMGY4YTQsIDB4N2E1NzliNjUsIDB4Mjg0ZTBlOTAsIDB4ZjNkMjBmMjEsIDB4M2QzY2IwYzksIDB4NDZlYzNkMTYsCisJMHhhMjNmMjA3YSwgMHg1ZGExMjVkZiwgMHhmZTg0ZmY4NSwgMHhkZjc1M2Q0ZiwgMHgzZTY3ZGM0YywgMHg2NGVhYWNkYiwKKwkweDQ3YjE2ZDJmLCAweDE1YWZjMGVjLCAweGQ4MzNjNThkLCAweGUxMWZjYTE4LCAweGM4Y2ZiYmY5LCAweGQyYjI2Zjk4LAorCTB4MGY5M2M5NjcsIDB4MGRmZmEwYTUsIDB4MTNkODQ1MjgsIDB4MmE5N2QyMTEsIDB4YzVjYzNlZWEsIDB4M2FjODI4N2QsCisJMHhkYmEyY2Y4OSwgMHhmYWU3ZjhlMSwgMHhkN2NjN2M5MCwgMHhjMzk2N2ExMiwgMHgwZmNmNDkzYywgMHgxYjA0YjgwYSwKKwkweGEzMjMzYmVmLCAweDcyYjU5M2VmLCAweGZkNTQ2ODNmLCAweGQ0ZmZhMTIyLCAweGM3NDlkY2RiLCAweGRmNjI3NGMwLAorCTB4Nzk0MWRmNjEsIDB4ODU4M2MwNjksIDB4YmQ1M2ZlYjksIDB4NDczMWUxZjUsIDB4NzU2ZDNlNjAsIDB4MjY0OGYxYmYsCisJMHg3NjdjMTkzOCwgMHgyZmZlNjFiNiwgMHgyZWY2Zjc5ZSwgMHg5ZDg1ZGI4ZiwgMHg0YzJlZGRkNywgMHg0MjRkYmNlZCwKKwkweDY5ZTY2YjZmLCAweGEwZjExYTk5LCAweDQxYjY1YzVlLCAweDczZTA4NWY1LCAweDRmNGRiNmQ5LCAweGVhNzY4YTNjLAorCTB4NzBkZjc2YmIsIDB4ZGI3NGJmZTgsIDB4MDA5ODdmNGIsIDB4NmFlZGQyZjksIDB4MGNiZTBjZDIsIDB4OGRkMjk0OTcsCisJMHhiZmZjMjA5NywgMHgxZTM3NmM3NCwgMHg5MmY1N2U0YSwgMHhiZmNkMWRlNiwgMHgzNzRmYjhmZiwgMHhlZmI3NGEzZSwKKwkweDllZThkOGQzLCAweGIwZDI5OGYwLCAweGM1NzU2YjRmLCAweDkxYzM0YmMwLCAweGFhYWZkNDVjLCAweGExYWU3ZWI3LAorCTB4YWY3Mjc5M2QsIDB4NjNkMzUyYzQsIDB4NGJjMzczYzAsIDB4OWMyMDI3YTQsIDB4NGYwMjhmMDgsIDB4YWE4Yjc4NWQsCisJMHhhMGJjMDQxZiwgMHgxNGYwMzczYywgMHg5MDgwZmU1ZCwgMHg3NzlmZDgzZiwgMHhkM2YzZDExNCwgMHhmOTVmYTNjZiwKKwkweGQ3MGZiYjNkLCAweGVkZjRmNDVmLCAweDcxYzc1YzFlLCAweGY1ZDM5MmE1LCAweGZjNTMyYjYzLCAweDFhOTE2ZTMwLAorCTB4ZTUyOWQxNGEsIDB4ZmYxZThiZGYsIDB4ZTE1YmQxMjEsIDB4ZTE0YzNmMWIsIDB4OWZiZmEwZjYsIDB4NTBhNmY2OGQsCisJMHhjMmRmNWMzZiwgMHhmYWQwMzdmNSwgMHhlODgwNTgwYSwgMHgzOTMxZThhZSwgMHhhN2U5MGMyZiwgMHgzZGJlOWIwYSwKKwkweGM4NjQ1ZjA2LCAweDZmOGUyZjljLCAweGQ2MGI4NTA0LCAweDEyZWQxYzc3LCAweDRlZmViM2Y0LCAweDdmMjY2ZjBlLAorCTB4ZmM4NjIyYzgsIDB4M2ZjMzQzZmYsIDB4ZmU1MzE2Y2UsIDB4OTNjNzA3NTMsIDB4YmUwOWI2NDMsIDB4NGNjZjZkMDIsCisJMHhiNzc3NzVhZiwgMHgwZDRlN2UyMCwgMHgxZmEyYTdmMiwgMHg5MDk0YzgyZCwgMHgyNWY0ODc4MCwgMHgzMWJmMmJmNCwKKwkweDg3ZTM5NTJkLCAweGQxNmM5NTc5LCAweDI5ODBmNDBlLCAweGI3ZWIxZGY4LCAweDE4ZTc3ZWE4LCAweDY1ZjYzYjRiLAorCTB4NGJmOGY3N2EsIDB4ZWYzMGY4YzQsIDB4OGZiZmRjMzgsIDB4ODZhMmIwYTcsIDB4NTViYmViMTgsIDB4ZjYxZWY4MzYsCisJMHg5OTdkMTM3MSwgMHg3YmYzOWJmOCwgMHhiZjljM2RkZCwgMHhjZjBmN2UwZCwgMHg5ZmU1OGU5YSwgMHgwN2Y5YzliYywKKwkweDA4ZmVlMWRiLCAweDUyYTQ4YWYzLCAweDI1ZWJiZWY5LCAweDE2NzYwNzkyLCAweDc1ZDdjNTg5LCAweDZiNmJlMGFhLAorCTB4MzAyNzQxYjksIDB4MzA0YTQ1NmYsIDB4ZGZmNjBiZDEsIDB4ZmU0ZmUwODcsIDB4ZDA3NTgyYjMsIDB4ODMyZjI0Y2UsCisJMHg2N2E3OWUzOCwgMHgxNmRmMDY3ZiwgMHgyNTFmZmUwYSwgMHhhZDlmZjk1YiwgMHhiYmRmN2NlNywgMHg3ZGEyMTU3ZSwKKwkweDNmMGQ0Y2FlLCAweDJiZjIyOGYxLCAweDhiYzg2N2YwLCAweGUxZTZhYWZjLCAweDFmZDc0ZmJhLCAweGMwNGRjM2Y4LAorCTB4MGMxYmE3YTcsIDB4Y2ZjYWI1M2UsIDB4N2EyZDNlNjgsIDB4ZjQ4NGIzNzYsIDB4YTdhN2NkMTksIDB4ODkxYjQwOGIsCisJMHgzZGYwYTdjNSwgMHhiNTE2OWYyNiwgMHg5Zjk1M2ZmZSwgMHg4ZmFlZmMwNiwgMHgwZjIxOWY4MiwgMHhiNDYzODM3YiwKKwkweGYzNjMzYzNjLCAweGU1YTMzYzEyLCAweGM5YmRmYzIxLCAweDlmZDI3YmIyLCAweGJkMDY3NzQxLCAweGZjYjJmYzk1LAorCTB4MTgxN2YyMjIsIDB4NWRkMDY5NzQsIDB4NzQxYTVkMTcsIDB4NjJmZmMzZDcsIDB4Zjk3NDVmODEsIDB4YTAwNWE0NjAsCisJMHgyYTVkYmM5MywgMHhjZDY1NTVkOSwgMHhkYTBjM2NmYywgMHg4YjIwM2NiZCwgMHg2ZGE3ZTRlMCwgMHgzY2JjZDU4YywKKwkweDBmOWNjOTIwLCAweGEyMWJlNTQ3LCAweGYyYTNmYmVhLCAweDAzZjU1MTc5LCAweDRiNGFmOTUxLCAweDAzYTZiMmZkLAorCTB4NDdmYzIzMWEsIDB4NGJlY2Y1MmMsIDB4YzQxZjY1MWYsIDB4ZmQ4Yzg3YjAsIDB4NDY3OGQ4MjYsIDB4MGM1ZDIxMGIsCisJMHhkZTUwZDRlYywgMHgwNTQxY2JhOSwgMHgxZWUwZmY0NSwgMHgwZWM1ZWM5OSwgMHgxODJhZjE4MCwgMHgzZDNlYTNhNywKKwkweGIxYjkwMjFjLCAweGYwZWRjOWQyLCAweGQzZDNiZDBlLCAweDg5OTVkMjA3LCAweGFjOTlkZjNjLCAweDY3Yjk0MmFkLAorCTB4NzI3NGVmN2MsIDB4NWU0NzQ3M2YsIDB4ZTRkMTI3YTcsIDB4MmNkMjM4YTcsIDB4MGQ2ZWRjOTMsIDB4ZmNiMWU5YjMsCisJMHgxMGEzYjAyMCwgMHg2ZjU5NWJkZSwgMHgzOWZmZGNlNSwgMHg1ZTBkNzY0ZCwgMHg4ZDY4ZjY4YSwgMHg3NzEzNDNlYywKKwkweDNkMWJiMmMxLCAweDY4ZTkyYWU4LCAweDZjY2Q3YTFlLCAweDU1ZjBiZWY4LCAweDNhNTU4ZTk5LCAweDcwNjMzY2UyLAorCTB4NTdlNDJjNWUsIDB4ODllYzk5ZmEsIDB4YjNmNDJjMTMsIDB4NmNjZmU4ODksIDB4ODJjNTc2ZTYsIDB4MDhmYTUxMzUsCisJMHg1NGY0NDM1YiwgMHhhMWEyNWFlMCwgMHhlMDNiMDUzYywgMHg5NzNmYWI3ZCwgMHhlODg5NDVmMywgMHhiNWJkNjhhZiwKKwkweDI3OGY2OGRjLCAweDk1ZGY2ODVhLCAweDAzY2I1OWQ0LCAweDY1ZGEzZWMyLCAweGNiMDY0OWYwLCAweDg2ODMzOTIwLAorCTB4NDJlN2RhMGYsIDB4NDc5MzRmMmUsIDB4ZjAxYjMzNWQsIDB4NjY1MDcxZDEsIDB4YjY3OTllNzgsIDB4OWM3YzI2NTksCisJMHg5N2U3ZTdhZCwgMHhmYzRjOTQyYywgMHg0OTNhYzE1NiwgMHg2YTcwMWExZSwgMHg3YWQyN2U0MywgMHgzYjZkNTc5NywKKwkweDE3N2Q5Y2ZlLCAweDNmY2VjZGQyLCAweGE0MzlmOThlLCAweDFkZGYzYjZkLCAweGNmZjMxYmIxLCAweDhmZjgzZGJkLAorCTB4MjlmZDY3YWMsIDB4MzdlNDlkN2IsIDB4MjZlYmQ4ZWUsIDB4ZjNkOGVmN2EsIDB4NjE3N2MxZGIsIDB4ZmM5ZDk3N2UsCisJMHgzZjdiMWQ3NSwgMHhkN2Y0ODMxZiwgMHg4NDVlZGNiMSwgMHgxMDYzYWVmMiwgMHhmN2FhODdiNywgMHg5NWE2M2U3YywKKwkweDg0MTVkN2Y2LCAweGM2YjJhM2I3LCAweGJmZTZhM2Y1LCAweDMwOTI5NjFlLCAweGRlYTE1NTg1LCAweGY4OWUzN2IwLAorCTB4OTNiY2Y4MjksIDB4N2IxZDBiZmMsIDB4YjgwZWNmM2UsIDB4YTllYjc1ZmUsIDB4MWQzOWU3MTAsIDB4NTlmYjM2NmUsCisJMHhmNzIyNWY5YywgMHg4Zjc3MDc4MywgMHhjZjBjYjRkZiwgMHg2OWY3MWJhMywgMHhjYTdjYTFmMywgMHg4MzFmN2YwYiwKKwkweDU5ZTNiNDcyLCAweGFiYjUwZmFlLCAweDc5ZTM4ZmFkLCAweGUxZmM4NzQ1LCAweGRjZTAxNTMyLCAweDlmZDU0YzhlLAorCTB4MTE5NGZiYjEsIDB4NjJhMzQzOTMsIDB4ZTRlZmU1YzEsIDB4Nzg1MGI5MzcsIDB4NGZiNzBhNjgsIDB4MjFlMWZkZmYsCisJMHg3M2JjYjlmOSwgMHhhZTEyMWQ4NywgMHg3ZmMzOGJmYiwgMHhkN2IwYjk0NCwgMHhhYzY5NzQ0ZSwgMHgzMmMzNzRmNywKKwkweGI3Y2U1N2QyLCAweDdmY2FlMWVlLCAweGQwYjgzYTE3LCAweDBiOTE0Yjc1LCAweDdmZDRmNzU5LCAweDVhZmY3YzczLAorCTB4YTJmY2QyZjYsIDB4OWQyN2EwZjksIDB4ZjI4M2I5ZWYsIDB4OWEzZWRjZGIsIDB4ZmJkMjA1ZWYsIDB4Nzg2OWZmODIsCisJMHhlZWYwMTY3ZiwgMHhhYmJhZmYzOSwgMHhkZGQ3Y2RmZiwgMHg5ZDVmZGUzYiwgMHhlM2FlZjAyYiwgMHg4NWYwN2Y3OSwKKwkweGJlZmNkM2JmLCAweGY0ZGI5Y2FlLCAweDBkZWU5NGRmLCAweDliMTVmZWJkLCAweGE4MGNjZGY3LCAweGI4ZDU5ZDNmLAorCTB4YjJiOGIxNTAsIDB4MTlhYmZmN2MsIDB4YzBjYWZhNTAsIDB4ZGYzODg5MDMsIDB4MzdlNzUxYzksIDB4YzJhNmZhNDYsCisJMHg5MmM5YTZlZCwgMHg5NjQxZWM4ZCwgMHg5MDdiMDkyOCwgMHg4NDAzNTFkYiwgMHg0OTYwMzBmZSwgMHgwMzIxZTkwMSwKKwkweGY1Y2ZkZTA2LCAweDBlYmJjNTA2LCAweDE5NWYxZmNmLCAweGIxNDdkZjNjLCAweDNiZWM2YzE0LCAweDk3ZWJjYzAxLAorCTB4OWVkNWJjOGIsIDB4ZmNjNGI5ZmMsIDB4NjAzYTM0NzgsIDB4YTIwZmY3ZjAsIDB4YTA3MDNiNWUsIDB4YTQyZjdhNGMsCisJMHhlOGJlZWZhNCwgMHg5N2JmY2U5OSwgMHhlN2JiMTY2OSwgMHgwZWQ1YWY0YSwgMHhkYWIyNGRjYSwgMHg3ZjQ1NTM0YiwKKwkweGZmOWYxOGQzLCAweDBlMTQ5NzM0LCAweDBmMjYxYzAzLCAweGZhMTI2OWZhLCAweDU3MGYyNzQ3LCAweDVjZjkwNDk5LAorCTB4ZjY4MTU4MTYsIDB4YjU5NzU0YzUsIDB4YzMzYzA2YmYsIDB4ZTFjZGY3MTksIDB4MzgwZDU3NjgsIDB4ODc5NzU5MGUsCisJMHg5MzI0MWM3MCwgMHg3MGJjZjQ5ZiwgMHhkYzEzNzljNCwgMHgyZjE4YzIzMiwgMHg4NzFmMTRjMywgMHgxZjcyOWY2MywKKwkweGJkODU5ZGY5LCAweDkwNGQ0NzRkLCAweDVhYWI1YzU3LCAweGI0MTU5ZjkwLCAweGM4MWMzOTk3LCAweGU1ZWMzNmNlLAorCTB4ODRjZGUwZGUsIDB4MjE4OGFkZmQsIDB4MDMyYmY4MGQsIDB4ZGFkM2JmNjUsIDB4MDZkZmQ5MWYsIDB4M2UyZWJlNWUsCisJMHg1MzdlM2MwYywgMHg4NTFiYmNiYywgMHg0NWFlODE5NywgMHg3NGViZjIwYSwgMHg2MmZhMTdiNCwgMHgxZjllMGNmZCwKKwkweGRjZTg1MjE4LCAweDU3MGJkODRkLCAweGE0MjkxNzc4LCAweDUwY2MwY2Y3LCAweDhlODU1ZjEwLCAweDFjZjBhYmE2LAorCTB4Njg5M2UxYzQsIDB4ZDliNzE3MWUsIDB4NjQ3MDdmNjgsIDB4OTFmNzA0NDksIDB4ZGZlNTBhYjUsIDB4MTBlM2U5YjAsCisJMHg3YjJmMzNkZiwgMHgwYzlkZjRlZSwgMHg4ZDdlZTZmZCwgMHhmMWU1M2RjNywgMHg3ZGJmOGZmMywgMHg4YzQ0ZTVmOSwKKwkweDJjNzgxNDE3LCAweDQ2YWZmZjg0LCAweDE2N2FmZjNmLCAweDJkMzgwMzg5LCAweGExMjg1ODU0LCAweDI1YmRmYTBmLAorCTB4ZWZjNWJlZjYsIDB4ZGZlM2NkNmQsIDB4ZmJiYTUzNzcsIDB4ZGVmZDVmMzksIDB4M2FiZmNhZTQsIDB4ZDhlNDBlN2QsCisJMHg1ZGYzMDBmYiwgMHhlMWEzMGU5OCwgMHhmZDVkYjMxNSwgMHhhZjBlNjY5ZCwgMHgxZTE2MjFlMCwgMHhlNDJhZTNjMiwKKwkweGUxMzlkMzNjLCAweDlmZmU4MjFkLCAweDk5YjNkM2ZiLCAweGVhNGVkNzY4LCAweGU1YzA5NTE4LCAweDE3YjIzMGViLAorCTB4Mzg1ZWMyODIsIDB4M2UwOWJjY2IsIDB4YTFkN2NhMTcsIDB4NzlmZTc0MDksIDB4OGFjNzc2NTAsIDB4ZWMyYWRjMmIsCisJMHg3YzYyNWZlZCwgMHg3NTFkYTQwOSwgMHhmYjQ2NDZhYywgMHgxZjkyNzU4ZCwgMHg2MGU3NTQzNywgMHhiN2M0NjM5YiwKKwkweDlmODZhYmU0LCAweGZlMGRlMDRhLCAweDhmM2M2Y2U0LCAweDg0MmZlM2UxLCAweGJjNjYwOWE2LCAweGE5MzhjZGI1LAorCTB4MDc4OWU5OGMsIDB4NzRkZjdiZmMsIDB4ZTE0ZGY1MWUsIDB4YzIzZGY2OGIsIDB4MzViM2FiNzcsIDB4ZmM4NjJmMzcsCisJMHg2ZmMwNWRiOCwgMHhjODJmZmVlNiwgMHhmMzY5NzlmZiwgMHhlZmQyMWIwNiwgMHhjYjM2NzVhNSwgMHgyYWE5NmFmOSwKKwkweDZjYjFiMWVjLCAweGU2NmJjZTJjLCAweDBiM2JhNzdlLCAweGY2NTA3MmYxLCAweGIwNjczYzYxLCAweDg4MTY4Y2Y5LAorCTB4MGQxODJlNzEsIDB4ZmQxZmVjNGYsIDB4OWQ1NTViZTksIDB4ZGFiNzZiZjgsIDB4YmFlMTFmMzAsIDB4NDMwNzIzZmIsCisJMHg1Njk3N2EzYiwgMHg5ZTZiMWE1MywgMHg5ZTdjZWMwMywgMHhlZGMzNTkwYiwgMHhmZGZmZDI2MywgMHhjM2E5M2JlMCwKKwkweGY2OGM5OTE1LCAweDdlMTMxZDY3LCAweDYzZmE2ODhmLCAweGI3NjdjNzQ0LCAweGFmZWUzMGIwLCAweDVjYTJhZjY4LAorCTB4NjhjZjViMzgsIDB4ZGM5MDA3N2YsIDB4ZjAzNzc2OGYsIDB4N2VjY2Y3ZmIsIDB4YjY5YjhiOWMsIDB4ODJmNTEyZmYsCisJMHhjNzQ5NjY4YSwgMHhhNTBhODYyMywgMHg2ZDNmNDM1NSwgMHhjNjUxMjliMCwgMHg2YmMzMzg3ZCwgMHhhM2VhYmJjNCwKKwkweGM1ZjEzN2FmLCAweGY4MjE1NTU2LCAweGZiYjA5ODFlLCAweGUzZjcxYzY2LCAweDllYTE4ZDM2LCAweGQzYjE3ZmUyLAorCTB4YzdmOGZiODMsIDB4MDdjNDk5Y2QsIDB4NTdlYmFkYmQsIDB4YTlhYWVjNTUsIDB4OTcyYTM3NDgsIDB4MzBmNGQxODcsCisJMHg5MmNlM2VhYSwgMHhmNDBlNGNiZiwgMHg2OTlhZmU0NywgMHg4YmUyNWQ2ZiwgMHg2YmVmYmY4MSwgMHhiYzE3Mzg5MiwKKwkweGZlMTZmOTQwLCAweGJkYmU0Y2ZmLCAweDgwYjdjODY5LCAweGEzZTI2NzljLCAweGY5MGY1YWJlLCAweGJlNGIxYTk2LAorCTB4YTliYzk2MmQsIDB4N2JjNWY3MDgsIDB4NWUyMmE2ODYsIDB4MjZhYWJmMTcsIDB4ZGI2ZjkyYzcsIDB4ZTczOWY4YWEsCisJMHhiOTRlMjIzMywgMHhkYmU0MTFhMywgMHhhZGYyNGRiNywgMHg4YzViZTQxMSwgMHg1ZmJmOTA3OCwgMHhmZjBiN2NhOCwKKwkweDM2ZGZmMGQ3LCAweGQ2MzE2Zjk0LCAweGY5NTY2YmFiLCAweDA4ZjlhNjM2LCAweDhkMzFiN2M5LCAweGFmM2M0YjM2LAorCTB4N2M5ZjNiNWQsIDB4NDdhZjkyOTMsIDB4ZWFhMGY4ZmQsIDB4M2Y0MThmOGIsIDB4ZmUzZTg0ZGIsIDB4YzQ0Yjg4OGMsCisJMHhlNWNlNTA3MSwgMHg3ZjhkM2E2YSwgMHhlMmVlNzJhMSwgMHhmZjczOTUwYiwgMHhlNDM2NzA0NSwgMHg4YzFkZTJkYywKKwkweGQyN2I5Y2UyLCAweDhiNzM5NzIxLCAweDkzOWM4MTc3LCAweDljYjkxZTkwLCAweDcxODdiYzViLCAweDdjOTQ1Y2JmLAorCTB4YmU0M2Q5MWIsIDB4MTE1ZmFhMzEsIDB4NGQ4M2VkZTEsIDB4MDJkZjBmZTksIDB4YWJmNThkZmQsIDB4MWZkNDA3M2UsCisJMHhjNmVmMmRkYiwgMHhhZTVkZTU5OSwgMHg3YWRjMTBhNiwgMHgxNzgzYmJjOCwgMHgwODc2ZWYyNiwgMHg2YzcyMDc3OSwKKwkweDY4ZDdjYTA4LCAweDViMzVmMGZhLCAweDhmNzdjMWUzLCAweDJiZmY1ZTNmLCAweGNhZGY5N2U0LCAweDg2ZjhkZTc0LAorCTB4YmQwZjlmOGQsIDB4MTY3OGZlMzYsIDB4NjI2M2Q3ZDIsIDB4ZGM4NDhiM2UsIDB4NTEwYWFmNmIsIDB4ZTQ1ZTUzZmYsCisJMHhmMTc3MmJlYiwgMHg0NjhhZjEzOCwgMHhkNDU2MWZhZSwgMHhmYzJmNjE0YiwgMHgxN2MyNzczMywgMHg3OGJmY2UxYSwKKwkweDIxNTJjNDhmLCAweGViY2VjYjNmLCAweGYzOGQyN2IzLCAweGMzMjMzNjMyLCAweDcyMGIwZjQ0LCAweGJmY2ZjOTRhLAorCTB4ZjQwZTYxNDAsIDB4NzJiYTk3ZTMsIDB4NWJmZWEyNGYsIDB4ZmVmZGMzOWEsIDB4ZjE3YmUyYTUsIDB4ZDBhYmFkYWIsCisJMHg4OGZjNWRmZiwgMHg0NmE1ZTc0NCwgMHhlNzExYWI3YywgMHhhMjZlMjNkYiwgMHg3N2Y5MTk3OSwgMHg2NjI3ZTNhMywKKwkweDk5YTliODhhLCAweDFiYzI5NGJmLCAweDk0N2ZjNDYyLCAweDdmZTZiMTZlLCAweDk2NmZmODIyLCAweDYyZjA0YWRjLAorCTB4ZTMzMWNiYWYsIDB4NWQ3YThjMzgsIDB4ZTAyODNhNzAsIDB4N2VkMzI3NTQsIDB4ODAyNzA1ZGEsIDB4MjdiZDM3OWIsCisJMHgzM2QzMDA5YywgMHhlMWJhNTIzMiwgMHg1ODViZmM1MiwgMHhlYmVmNTY2ZiwgMHhiZDE2ZTAzNSwgMHg1ZDdmYzM2ZSwKKwkweDBkZTlmYTJhLCAweDdiOWMwNjBlLCAweDFkYzA1ZmFjLCAweDkzOTIwMmVjLCAweGE3NThmMGQxLCAweDMzYjVmOTc1LAorCTB4ZTgwOTRlMzEsIDB4ZTg0Y2U0ODYsIDB4MTgxNzAwZDcsIDB4NzBkMjZmMmYsIDB4NDc5NzdkY2IsIDB4ZDY2NGZkMDUsCisJMHhlMTgyOWE0YywgMHhhZTMwYjMwYywgMHg2YTBiY2ExYywgMHgwZmRjYmQxNywgMHgxZGVlMzFlMCwgMHg0ZWRjNThlZiwKKwkweDBmNjA5YjJmLCAweDU2ZWMzOWUwLCAweDQxYzkyNzY3LCAweDM1ZGIwZTgzLCAweDE0MWMwN2FlLCAweGJmZGRkZGYwLAorCTB4ZjlkOTMyNzIsIDB4N2E4ZTkyNGQsIDB4MjRlMjMwNDgsIDB4YWUwMTA2YjgsIDB4YTgyOGZmNzgsIDB4ODEwNmZjNzAsCisJMHgwZWZmOTExZSwgMHg4NzE5ZjIzYywgMHg4YmM5MWVlMywgMHg2MzVjOWRmZSwgMHg0MGJjNDJiZiwgMHg4ZTY2Y2NmZCwKKwkweDIyNTg2MDk3LCAweDRlYjE2NGJjLCAweGE4YTk3ZjNhLCAweDg0MTE3Yzk1LCAweDgyMDZkMzVmLCAweGUxOWYyMTlmLAorCTB4OTNjNjY1Y2YsIDB4NTg5NTdlODksIDB4NGM5NTRiZjQsIDB4YThhOTY1ZmIsIDB4ZjM1ZWQzMzcsIDB4OTllN2E0MDcsCisJMHgwMzZjYWE0ZiwgMHhmYmZlMWI4MSwgMHg0ZjNlN2EyYSwgMHg5ZTM0NTAxYywgMHhiNmJjMDRkYSwgMHgwODVkM2MyMSwKKwkweDc3YWU0ZWI3LCAweGZiYTBiZTQ1LCAweDUwNzk0NjUwLCAweDM5ZTA1OTA5LCAweDVmNzNkMWU1LCAweDA2NzFhZjA5LAorCTB4NTE4ZTkwYmMsIDB4Y2JlNzM1YmUsIDB4OTI2ODJmOTgsIDB4OWVmNGRmNTgsIDB4NTBmM2M1ZWIsIDB4ZWYxN2JmMzMsCisJMHg3ZmZiYzIzOSwgMHgxOGIxZjI0YywgMHhiYTYwYmVlYiwgMHg4YjllODVlZSwgMHhiY2YxNmU4MCwgMHg4ZWJhMzdhNCwKKwkweGQyM2I1Mzg2LCAweGU5YmFiN2YzLCAweGU3NjczNWY5LCAweGU3YTQ0Y2ExLCAweDQzZjcxMjNkLCAweGNlNWEyNzM0LAorCTB4MWU3NjNkMzUsIDB4MDlkNWI1ZjcsIDB4ZWVlYjBmNzQsIDB4NmRmNTU1N2MsIDB4Y2I5MGM2ZjQsIDB4N2VkMWVlODIsCisJMHhiYjM3ZGYzMCwgMHhmMTgyMTcwNCwgMHgxNDFjNWJhMiwgMHgxOGYzNDdlZiwgMHhiMzUzZjVjMiwgMHg2NGU2ZGU3YywKKwkweGY1NjdkN2M5LCAweDJlZGJiZmRlLCAweDM3Mjc4Y2M1LCAweDNmMjMyM2Y0LCAweGY4YzNjNzFhLCAweDZmMTgyNmY5LAorCTB4ZDE3OGY3NjQsIDB4MmZlMTgzZmIsIDB4ZmFiYWRmMzgsIDB4YmFkOWJmZGIsIDB4NmViZTcxOGMsIDB4YjU5MDU0M2MsCisJMHhiODhkNWUxMCwgMHhlMDUyMjNhOCwgMHg3M2VhMmE0NywgMHhmYzRiMjVkMywgMHhjODVjY2MxNSwgMHg3ZmRjNmZhZCwKKwkweDdiZGM5NmFhLCAweGE3NGQyY2ZmLCAweGViYjc3NGZiLCAweGU4OWQ3N2M2LCAweGUyNjc0ZjMzLCAweGRiZTI2ZjdjLAorCTB4ZWM3ZmVmYjgsIDB4NTk5OGU3ZTcsIDB4NDRkNmY2MzYsIDB4YWIyNjNmZGMsIDB4ZTNlYWU5MGMsIDB4YTFmOTJhNDMsCisJMHhlM2NhOWUzZiwgMHhlZGY5YWY2ZSwgMHgzZTVkMDUwMSwgMHgzODk4ZjBkNywgMHg4OTM4Y2Q3NiwgMHhiMDM3YWNlYywKKwkweDg3YThmMWViLCAweDA0N2Y5ODNiLCAweGVmMTMyZmMxLCAweGQ1ZDQ2NWVkLCAweDVmMDJmMTRjLCAweGFlMTJkZDhmLAorCTB4YTUzN2Q0YzYsIDB4YzQzNWU5MzMsIDB4MjE5OTI0ZGIsIDB4N2RmYzVhZGUsIDB4N2YyMGI4YTcsIDB4MDMyYzg3ZmIsCisJMHgxZmEwYTA1ZCwgMHgwN2IxZmI1MCwgMHg5YmQ2MzI1OSwgMHgzMzI2NGZlMCwgMHgyN2UzN2M2NiwgMHhmMzA3NWU2ZiwKKwkweGY2NDg3ZjE4LCAweGFjZGVhMTc5LCAweDAzMTcyZTAzLCAweDdhZTQ3YTdkLCAweGUwOTgwYjFiLCAweGFiODU4MTM1LAorCTB4ZmUzNGRmZDEsIDB4OWMzYWZmYTgsIDB4M2JlODExNzcsIDB4YThhNDRmNzgsIDB4MDdiNTQzNzksIDB4NmEyNWViZjMsCisJMHg3MjA1MGMxZiwgMHg2ZDllYjAzZCwgMHhiZjcyNjdiNSwgMHhlYTAxNzI4NSwgMHhmNWMxMzc2MSwgMHg0ZWIwNWViYywKKwkweDcyODg2MWYyLCAweDhhNWFmMzQxLCAweDkzYTgyYTJmLCAweGI2ZTE0MmU4LCAweGJjMWNjNGIwLCAweGZhMDNiMGRmLAorCTB4ZGExZWI2ZGQsIDB4MDVmZWUxNjcsIDB4YmFkZmIxZWQsIDB4ODc1ZTZmMzMsIDB4NDllNjA3NzIsIDB4YjlmOWViZWQsCisJMHhmM2I0MDE3YywgMHgyZGQ0YmYyMiwgMHhkNzhhZmVhMiwgMHhiM2VmMGM0YiwgMHg3ZGYzZDUxNCwgMHhlYTkwZThhOSwKKwkweDdkYzZmMmMzLCAweDNiN2VkMDhmLCAweDk3ZWJjNjAzLCAweDY0NTBmYjhlLCAweGNhMGJkZDJhLCAweDJmYmE3NDk0LAorCTB4Zjg0YzFhMTksIDB4N2YxYzYwZWIsIDB4ZjIyMGZhNmMsIDB4YWJiYzUyMGIsIDB4OThhMGMwOTcsIDB4NjRmZTYzZTMsCisJMHhiM2YyNDIxZiwgMHhlYjRjYjdjMCwgMHg5NmJjZmQwYiwgMHgyMzZlOWM5MywgMHhlNzQzM2FiYSwgMHhkZTAxNDdlZCwKKwkweDFiZjc4MDAxLCAweDQwZTU1ZTIyLCAweGFiNWEwN2NlLCAweGMyZmM1ZjY5LCAweDliOWY5NDNlLCAweDM4YTI0ZDM0LAorCTB4OGYyYzg1OGUsIDB4OGU2NjM4ZTIsIDB4ZWJlNmZhZTcsIDB4ZThjMzNiOTcsIDB4ZWQ1ZDdiZTcsIDB4MGZkZjg4MWMsCisJMHhlZmE3NmU1YywgMHgxY2I4ZGJlZCwgMHg0YWQ0MWY2ZSwgMHhlYmUzZjZmZSwgMHg1OGY3ODY1NSwgMHgyNGNiZDdhYSwKKwkweGFiZDc4ZTJmLCAweDdlNTYzZjc0LCAweDE0MzFjNzhjLCAweGM3ZmFlMzZlLCAweGRmYmNmNTgxLCAweGUxYjdhOGUzLAorCTB4NDM5NjA3YjksIDB4MTFhYjcwYmUsIDB4YjRlNWMwZTcsIDB4ZTgxNjdmNjEsIDB4OTBjMmZlM2MsIDB4ZGQ2MmU1YmIsCisJMHg3NWExZjYzZCwgMHhkOTI0MzRjYiwgMHgyZTViNzk2OCwgMHg4YjA5NzFlNCwgMHgyZDFjYmQ5MCwgMHgxY2YxY2I3NywKKwkweDE5N2M4M2RkLCAweGVhZTYyNzFkLCAweDBlOTA2M2I2LCAweDVkMTA1ZjIyLCAweDE5NTIxYzU3LCAweDA3ZDIzMWRhLAorCTB4OTcxNGI5NmQsIDB4NzNhMjQ3YjYsIDB4OTJjZGYxOGIsIDB4OGExYWUzMWYsIDB4NDk4N2IxZGUsIDB4Y2ZlNzBlZmYsCisJMHgyZmVlMTFmYiwgMHg4NjE5ZGFlZiwgMHgzYzQzMWYyYywgMHhiMWNhOWM4MCwgMHhhN2U5ZmU3NywgMHgxYmU0ZmRmMCwKKwkweDAyMDg4YzBlLCAweGI4MjdjOWJhLCAweDU5YmU3MTFiLCAweDRmM2M3OTliLCAweDUyZWIxYmQ2LCAweDliMmYzZWYwLAorCTB4NDBlNDk3ZGEsIDB4MDJjY2FkNjEsIDB4NTI3MTM5MjYsIDB4MTM3NzVmZjIsIDB4ZDQ3NDFmZGYsIDB4NjY3YzBjNzcsCisJMHhiODA1MzU2OSwgMHhjMWNiN2ViZiwgMHg2NmVmNTVmNywgMHhkODY0NjMxNSwgMHgwNDNkODRlZiwgMHhmNTFmODFmNiwKKwkweDZiNWRlMjliLCAweDFkMTMzNDUzLCAweDliNTllZjE0LCAweDU1ZjdjMzIyLCAweDFhYTYxZTIyLCAweDU3Njg1N2Y3LAorCTB4OGE3MWYxYWMsIDB4MDZmYTRhZjcsIDB4M2Y0NjM4ZDMsIDB4MmVkYWJmNDYsIDB4MWVlODZlZGUsIDB4N2ZkNmY2OWUsCisJMHhkNjhmY2UzMSwgMHhmMjg2YTlmOSwgMHgxZTlmYmEyMiwgMHg0ZmQyZjdlMywgMHhhZGNmZWZjZSwgMHgzOTVlNjA5MywKKwkweGFjMTRjYmFmLCAweDhjYzFmMzllLCAweDFkNzNlNmExLCAweGNhZmMzNTIzLCAweDk4ZGE2ZmQ5LCAweDljYmYwNGRmLAorCTB4YmYzMWM1M2YsIDB4ZTM4ZGRmMDksIDB4N2YwMWVmODAsIDB4NjE0OTM3NTcsIDB4MjNmOTg0YTcsIDB4ZTUxNjc5NWEsCisJMHgwYWYzZTQ3NSwgMHg5OGFlN2ZlMSwgMHgxYWViY2ZjYSwgMHg4MTU4ZGUzMywgMHg0YjIzM2Y3YywgMHhhMTYwN2EyMiwKKwkweDg5MzdkNjgwLCAweGZhMmYzNWY0LCAweDc4YjMwYmZkLCAweDhmNjg0MmZiLCAweDA4ZjhkOGZjLCAweDEzOTA0ZmU3LAorCTB4MTUyMzk0NWUsIDB4NTJlNmQ3ZWIsIDB4OGJjOTNhZmQsIDB4Yzg2ZTM3ZmQsIDB4MjhhNDdkMjcsIDB4NWU1NDY2NDcsCisJMHhhM2Y0ODQ3NywgMHg0OTIzYTZhMiwgMHhiN2MwYzdjOCwgMHhhODFmNTBlYiwgMHg1MWQ3Njg5OCwgMHg2OGZjMWI4ZSwKKwkweGUyZWJmN2YwLCAweGU4NzMyYjNlLCAweGM2N2VmMWEzLCAweDhiZTY0NmZmLCAweDIxZjJkN2MxLCAweGY1ODNkNzJlLAorCTB4Mzk4MzFmOWMsIDB4ZGY1ZjVmOWMsIDB4MmYwYWUyYTYsIDB4OWY4OWJmODQsIDB4ZmNlMTZmOGYsIDB4NDM3NjNmMmEsCisJMHgyZjg3ZGUyZSwgMHhjM2VmY2NkYywgMHg0NTNmNTgxZiwgMHg3OGZhN2Q0MywgMHhhNmZkYTI1OCwgMHhiZDczN2YyNywKKwkweGFiYmY5YTM1LCAweDdkZWZiZTI1LCAweGUwZDJmZDVkLCAweGUxOGY4MzZmLCAweGFmMWM2YWVmLCAweGVmMTRmODBjLAorCTB4ZjVmMzQ2NGYsIDB4MGZlMWI1NGMsIDB4YWY3Y2MzYjcsIDB4MDNkNjFhNzksIDB4ZGRmMjlkZjMsIDB4MjZhZDNkM2IsCisJMHgxNGY5MDkzOSwgMHgzYzI4MTdjYywgMHgyYjkwY2I5ZSwgMHhmYjhmMGFlNSwgMHg4YmYzZGFmYiwgMHhiNzZjM2YxYSwKKwkweDY3N2U0N2ZhLCAweGViZjFlNDRmLCAweGZkZDEyYTc1LCAweDA3YjNmOGY5LCAweDdmMjA1ZDlmLCAweDlkNWYyODVlLAorCTB4ZjE4ZDNmOGYsIDB4N2VkNjNkZTUsIDB4MmRlODI3N2UsIDB4ODA3NmJmYmEsIDB4ZmFlMDA0NmIsIDB4OGEyNmZkNGEsCisJMHhhOWU4ZmRmMywgMHgzZjExMzMyMywgMHhjZTgxYmJhNSwgMHhkZGVhYmU5MSwgMHg0ZTcyODIyYywgMHg1NTdlZDMwOSwKKwkweDNkZDMyOGQyLCAweGIyNDRhNjAxLCAweGY5OWI3M2FmLCAweDk1NmRjNzk4LCAweDdhMjZlMzNlLCAweDFlZDY3OTJhLAorCTB4NGJlZDAxOWUsIDB4ODYzMDdlNzYsIDB4Nzc5NjY4ZTIsIDB4ZTg1YTVjNTIsIDB4ODcyZmExMjksIDB4MWYyMGM3NWEsCisJMHg3ZTNjMjg5NCwgMHgwNDJlNWEyYywgMHhkNzBmZGMxYywgMHgzNjdlMmJiNiwgMHhjMmRhNGZhZSwgMHg2OTI4OGZkZiwKKwkweDliYjU1MWI4LCAweDc0NmUyNWNlLCAweDNhM2Q0NmE4LCAweDFkMDEwZGQ3LCAweDljNWRmZGUzLCAweDAyZGRmOTlmLAorCTB4NmRhYzZlMjMsIDB4MjUxMzk3MmIsIDB4ODFkOTJhNGQsIDB4YjdiNjViMjUsIDB4Yzk3MGZjNjMsIDB4NzdmMjc2M2IsCisJMHhhMTljYjcwNSwgMHg5ZTUzMTBmYiwgMHg5NGZlNDZkOSwgMHgzOTZjOTM2MCwgMHhiNzExZWI3ZiwgMHhkODhlNDViOSwKKwkweGIxYjBlZTMxLCAweDIxMWRjZTljLCAweDBkZjI4NDdmLCAweGNmOTdlM2IxLCAweGZhNTg1ZjE3LCAweDIxOWQ5ZWNjLAorCTB4YWZlOTYxMDAsIDB4N2NhMGY0OWUsIDB4ZDliMmQ1MzksIDB4N2U4NzcwODMsIDB4YmE2ZTMyYmYsIDB4YzM2NjljNDcsCisJMHhhNzE5NWYzZCwgMHgwMWZmMGE3OSwgMHg0MzhmNzM4YywgMHg5YzQ2MzVkOCwgMHhhNGJlOTZlYiwgMHhiMmZjYzI0NywKKwkweDczOWM2MmYzLCAweGRiZTVlOTc0LCAweGVmMWM3ZDNlLCAweDdiM2RiNDExLCAweDZmOWM3MWZhLCAweDdlM2UzZmQ5LAorCTB4ZDhjMWUzMWMsIDB4NzdlZDI3NWUsIDB4YTJkZWE3YzEsIDB4ZGRhMzZjMzgsIDB4YjVkZmIxMjYsIDB4ZTI5MjdkNmYsCisJMHhiNWRmZGJkNywgMHhmNmI3YjBmYiwgMHg2MzA3YzczZCwgMHhmNmZiNjAzYywgMHg2ZmQwNTIyZiwgMHgzNGNmNjRiOSwKKwkweGQ5MmVlYmYyLCAweGM1OTUyNTMxLCAweDE0OGMyZmQ4LCAweDAxN2MzNmU5LCAweGY4ZDFmM2YxLCAweDgwNzhkMDNhLAorCTB4MDIzZWQ2ZTIsIDB4ZWJmY2EzN2MsIDB4Mjg2ZGJiOGEsIDB4NWVjYzcxZTcsIDB4MWY1YjZmMTEsIDB4OGY0MjllZmIsCisJMHhlYmM2ZGFmOCwgMHhlNTFjYjlhZSwgMHgxZmQ3MjM3ZSwgMHhmYjY3MWJjZiwgMHhkYmYxZTAyNiwgMHg3YWJmODAxNywKKwkweDFiMTAyZmMzLCAweDNmZTExZjdmLCAweGEyZmI0ZjAwLCAweGUzNjlmN2YwLCAweDhhM2M1ZmMyLCAweDdiN2Q4ZDY1LAorCTB4NWM4ZGIzOGQsIDB4N2I4Y2RjMDAsIDB4ZmMzODBmMTAsIDB4ODhjOTFjODcsIDB4NWM1MjVmZTcsIDB4ODY2ZGUyMzMsCisJMHg0ZjlmZjcxNywgMHg5MWZkZTMwNywgMHg1Y2U3NmExMywgMHhjN2I4NWZiYSwgMHg2OGJjNjNhZSwgMHg4OWI3OWVjOSwKKwkweGJjNzdkYTdmLCAweDI2Njg3ZTQxLCAweGIzYjQyM2VlLCAweDNmMWUzZmFlLCAweGQ2NzU4OTJlLCAweGFlN2M3OWI5LAorCTB4ZWZjNjNmODAsIDB4NWRmNDNkN2EsIDB4M2E3MmU5YzQsIDB4N2I3N2UyMzYsIDB4OWQ5NWRiOGIsIDB4ZWUzNmNmNWMsCisJMHhmZGQ3OTQ2NywgMHg3NmMzYzQ1MSwgMHg0MWNhNGJlMywgMHhjYWY5MWQzYywgMHgwZTAzNjg3OCwgMHhkZGMzOTBiYSwKKwkweGUzYjFlODcxLCAweDJiZWViYmEzLCAweGZlMjE3YzA4LCAweDhhZWExZjcwLCAweGMwZmM4NzMzLCAweDdhMzdlNGIxLAorCTB4MDc5MGM1OWIsIDB4ZmM3ODFiZWQsIDB4ZmIxYWJiN2EsIDB4OTcxMWIwNWUsIDB4M2U2ODhmZmUsIDB4M2M1ODVmMGQsCisJMHhmZmU2ZjlmYSwgMHg4MWQzZTE3NSwgMHg0ZjcyNGZjYSwgMHgyZGZkYjUzOCwgMHg3NzRmMWNiNiwgMHg5ZWVjZGY0YSwKKwkweDdkMTQ5OTYxLCAweDFjZWJjYTZmLCAweDQ3M2I3MTg3LCAweGJiODNiNDM0LCAweGRlYjE2Y2VjLCAweDZmNTdlMTM2LAorCTB4NzhhNjRhN2IsIDB4MDcwZDU1ZTUsIDB4Y2I0NzhlNDgsIDB4MmY3YzBhOGIsIDB4MzM3Y2M2MjUsIDB4OWEyYjdjYzUsCisJMHhmNmQxM2VmOCwgMHg4MmVjM2JhYywgMHhlZmY2ZGE3ZSwgMHhhOGFlN2EyMiwgMHhkMmYxNDIzZiwgMHg5NWY5NmYyZiwKKwkweDhiOGE2YWQ2LCAweDZjMjI3ZGMwLCAweGQzZGI3ZjlhLCAweGRjOTBjNmZiLCAweDQ0YjJlZjE2LCAweDhjNDkzMzhmLAorCTB4M2Q4ZTZjMTMsIDB4OGNmZWIwNGUsIDB4NTBkMjljNjUsIDB4Y2ViYmE2ODMsIDB4YzUyOWRlM2YsIDB4NzdmNjIzN2YsCisJMHg4M2ViODVhYSwgMHhlOWU0MWFhNywgMHgwZmUzMThlMSwgMHg3N2Q2YWE3MywgMHhhNGJmNjBhMSwgMHhmY2RjNjdmNywKKwkweDEzZDkxOWJkLCAweDEyZTVmYTQ3LCAweDA5M2JjZTc3LCAweDE0NmE5ODQ5LCAweDRjYmQ1NWFmLCAweDg3ZmQ3N2M0LAorCTB4NWRmMTBkMmYsIDB4ZTE4YWJlZWQsIDB4N2MyMjU3N2MsIDB4NTUxZTdlNGQsIDB4NGJkNDMwMGYsIDB4MmNiY2I0ZDUsCisJMHhjYjQ0MmJmNCwgMHhjNmM5MmQxYiwgMHgyZmZjMjZjMiwgMHhmNTRmNGY3MSwgMHg2NDQ3NzlkMiwgMHg3MGYzZTIyMCwKKwkweGZiMTU3MWM2LCAweDlmOTQ0YmZkLCAweDViMGEyZmVhLCAweGZiZjMwYTk1LCAweDJkZjI0ODRiLCAweGRmZDk3ZTgzLAorCTB4ZTc5NDE4M2UsIDB4OTc3ZmQ5ZWUsIDB4ZDk2M2YxMWUsIDB4YjBhYTU3ZTIsIDB4YmI0NjFlNzcsIDB4YTRlMGJkODQsCisJMHhhZjc5MDZmOCwgMHgwOGY5ZGU5MywgMHhmNWE0ZWUzZSwgMHhmOWYxZDgxZSwgMHhmZjVmYTQxMywgMHhiOWY4Y2VjMiwKKwkweDIwMmY1ODBmLCAweGRlNzUwYWFmLCAweDlmMWRmMWM3LCAweGQ0NTdmZTNmLCAweDhjMzFiMTlmLCAweGQ0MzhmODVmLAorCTB4M2VhMWJiNDcsIDB4OGU5Y2VjOWUsIDB4YTBjNjEzNjcsIDB4ODVmMGE0NWYsIDB4M2NhMjY2YmIsIDB4ZjRlNzhjMmIsCisJMHg2YTRjZjg1OCwgMHgzYmZhMWFiOCwgMHhjN2YzY2M5NiwgMHg3N2EyMGRiNiwgMHg3NTlmNGEyNSwgMHg4MWU4ZGM1MywKKwkweGUwNTVjZjFkLCAweDRjZmVkNGJlLCAweGE5N2RjMzNjLCAweGU3YTEwNWZkLCAweDUzYmM1MmZmLCAweGNkN2FhYjU1LAorCTB4NGNjNWUzZjEsIDB4ZjNlZjlhZjEsIDB4MTJkZTYyOTQsIDB4MmZjOGM0YWYsIDB4ZmU4NDdjNDEsIDB4YmEwNGE2YWEsCisJMHhhZmZhMDQwNywgMHhkNDhmOWZhNSwgMHg0NDdjM2JjZSwgMHhmY2ZlYTFjNywgMHgzZmE0NTNmZSwgMHg3YWU4ODNjYSwKKwkweGNlYmRmOTQ2LCAweDM5NWVlMjIxLCAweGQ3NzU3M2I0LCAweDA1OWQ2YTBmLCAweDlmZDM1ZjNjLCAweGFhMTY5M2NiLAorCTB4Zjg1M2IwZmYsIDB4Y2Y3OTQ1OGYsIDB4ODdmZDc5N2UsIDB4ZWVlZWZjODQsIDB4MTBhZmI3ODcsIDB4ZDM0NGQwZWYsCisJMHg2ZmQxNDZlZiwgMHg1ZmJmOTZlOSwgMHg5NTlkZWIxYywgMHhlZmE3ZjMxOCwgMHhjODU4OTQzZiwgMHg3NmNhN2E4NiwKKwkweDg1N2ZiZDI3LCAweDdkZTAyOGVmLCAweDNmMWE5ZDg1LCAweDQ0ZjMyYWQ3LCAweGRkOWI5ZGU4LCAweGM1OTcxZTQyLAorCTB4OWRkZGU4NDUsIDB4NTgxZTYyZmUsIDB4ZDFjY2YzMWYsIDB4OWZiZDM0ZmEsIDB4NjE5MzljZjYsIDB4MGJmOTU5NWMsCisJMHhiYmUyM2Y2ZSwgMHhjN2U3ZTc3YywgMHg3MTg1OWU3ZSwgMHgxNzE0ZjE4OSwgMHhmZmMyZmU1ZiwgMHhiNzI4M2EyMiwKKwkweDNmMjJlNjQ3LCAweGIzYjc2ZTc0LCAweGRiZTdjODhkLCAweGZjOGMxZDVmLCAweDA2NDZhNmRhLCAweGYzOGFmOWY3LAorCTB4YmIwNmYyYmEsIDB4NThiZmZlZjUsIDB4ZGFhYWE5YzcsIDB4YmJiZWYwY2IsIDB4YTRiNmFmNzEsIDB4NTdmMzM5MTcsCisJMHg1ZmEzZDcyNywgMHg3MjVmZmE3MSwgMHhkZjViYmYxMiwgMHgzNTU1M2E3MywgMHg1OWRmMTMzYiwgMHgzODk3ZWEzMCwKKwkweDc3YzVjYjYyLCAweDEzN2M1ZTUxLCAweDcxZWFlZTM5LCAweDljNWRmNTNmLCAweDI1YWM0N2NmLCAweDE1M2VmZDA1LAorCTB4M2NhMzc3YTAsIDB4M2U5MmQ5MmYsIDB4ZmIwNGZkMTAsIDB4MDQzYmM2OWQsIDB4OGZkYzA0ZGUsIDB4YjI1ZWFiZjYsCisJMHhlZjM1MzFhNywgMHg3Y2FhMjczMywgMHhmNDMwY2E5OSwgMHg1NGNjOGNkZiwgMHgxYjFkMWQ2MCwgMHg2N2Y0MTRjZSwKKwkweDljZWE0NzE4LCAweDlkZWU0YjFkLCAweDNhZDNjNjc2LCAweDk4ZjYxYzRhLCAweDA5Y2Y5ZGY3LCAweDhkMGY3YWJhLAorCTB4MWUzZTY0ZmUsIDB4ZWUzMTg3ZjIsIDB4NzI0YzM1N2UsIDB4MmYzODhlZjgsIDB4YmIwMTJiZDUsIDB4NmU5N2JmMDgsCisJMHg3OTY5OTM5OSwgMHhhMWE5NDU3ZiwgMHgwNGE3YzA3YSwgMHg0ZWI2NjJjZiwgMHg2ZmM5MzJjYiwgMHhhNWUyYmM2MywKKwkweDI2NGE5OTU5LCAweDRmZmU1NzdlLCAweGRkY2FiZDE3LCAweDI0YTE2Njc4LCAweDAxMTUwYmQyLCAweDlmYWViNjYzLAorCTB4YTI4ODdlZTUsIDB4N2UxMDM5ZTYsIDB4MTVkM2NiMWEsIDB4ODZhNTQ5MTksIDB4MzU4ZTNkZjgsIDB4NzUwMmVhNTAsCisJMHg1NjUzYmY4YiwgMHg5ZTRlNTBjOSwgMHhlOGY2ZTcxMCwgMHgxYmI0YzJlZiwgMHhkYzkyNzc1ZSwgMHg2YzYyMGQwZiwKKwkweDA3YmUzYTc4LCAweDRkZDA0ZGUxLCAweDEwZjE1M2YwLCAweDU3NjNlNjFlLCAweDE3OTcxOTJhLCAweDkzYjQ3NDMzLAorCTB4N2Q4MDUwYTUsIDB4NWQ1NGY0MDksIDB4ZTkxMzNkMzUsIDB4MThmY2ZlMTEsIDB4MDdhNjQ5MDcsIDB4YmZhM2NmY2MsCisJMHg0MWVhMDVmYywgMHgzZGZjYTc0MCwgMHg3MGIyZWZiZiwgMHhjMzE4ODAzNSwgMHgzYWFmYzk4MSwgMHhlODc3ZjE5OSwKKwkweGNjYzNiZjU2LCAweDcxYTVjNmY2LCAweDY4ZTc3ODkyLCAweDE3MzFjOTFmLCAweDg0ZWJmZWViLCAweDk0NTU4YTNjLAorCTB4ZmYwOWQ1YjcsIDB4NDQ3M2MxYzgsIDB4YTgyMmNlOTcsIDB4NThiYmM2MTcsIDB4ZDc1MjFlMjQsIDB4OTk5NGU1MjgsCisJMHg5MDU5M2RmZiwgMHgzZWE5ZDEzNywgMHhjZDFlNWFkMSwgMHhhMmQ3MjAxNywgMHhmODIwNmRjNiwgMHg0NDlmYmY0MSwKKwkweDU0NDlmYmY1LCAweDU1N2M5ZmJmLCAweDgyOWMwNmJmLCAweDdjM2U4ZDhlLCAweDU1NjU2MmE3LCAweDFmMWI4MDllLAorCTB4MDZlMDIxY2YsIDB4ZWY4OTE5ZjAsIDB4OWM1YjMxZTgsIDB4MTM4NzljNGYsIDB4NmNjNGUzNWMsIDB4ZjAxZjU4ZWMsCisJMHg0ZTk3MWU1YSwgMHg2MTJmYjk3OCwgMHg0MWM2Mjc2ZiwgMHg4NjVhYTRiMywgMHg4OTBhZWY3NiwgMHg5N2YwZDNlZiwKKwkweDYzYjUzMmU3LCAweGYwZjg4M2JhLCAweGI5NGUzMTFlLCAweGMzMGFmMzgwLCAweGJlYTNkNTNmLCAweDFlYWZmNDkzLAorCTB4ZDViZDlkZjUsIDB4ZGY1ZDhiOGYsIDB4ZTI3Y2RiZGQsIDB4YjEyN2NmNjMsIDB4ZTI2YmZlOTcsIDB4NzVmZmY2NjMsCisJMHgwYmM1NTJlNSwgMHhlNzg2YmY2ZiwgMHg0OWYyNWRiNiwgMHhmNTViZDAwNywgMHhkNDM4ZjJjYywgMHhmZDhmMTMzMywKKwkweDcwYmU5NWEzLCAweGQwMzFkMzNkLCAweGE0MzhlZjhhLCAweGI4YjdhMDZmLCAweGQxZWZkNjYxLCAweDdkMWJkMjc0LAorCTB4NDA3NThiZTUsIDB4ZTAwZmQ1ZGUsIDB4N2YxODkzNzAsIDB4ZjczZjFkNmEsIDB4ZjcwOTY1YmUsIDB4ZTg3OTgxZDMsCisJMHg4YjM3ZmFjNywgMHgwYTM5MzdmYSwgMHhjNDcwZGZjOSwgMHhiYWJmZGZjNiwgMHg5MWViOTZhNSwgMHhhNjU4ZmNiNywKKwkweGVmMWVlOWYzLCAweDgwM2ZlMTUxLCAweDJhNWQ2ZWRmLCAweGIxZTkyMzg1LCAweDc1NjJkN2RlLCAweDllNmUzZjc4LAorCTB4YmRmYTNmMTgsIDB4ZTZmMzAwYWEsIDB4YmQ2Mzk2YWUsIDB4ZDJlOWM1NTcsIDB4ZmQxNzU3YjgsIDB4OTYwMmM1NGUsCisJMHhiMzIxZGUyNywgMHhkNGViM2Y3ZSwgMHhjZDY3ZTRiYiwgMHgyYzdkZWVhOCwgMHgxZWU4MTZiNCwgMHg3YmEwNGZmNSwKKwkweGViYzc5NzNjLCAweGUyMTcxNDYyLCAweDQ4NWM3OGQxLCAweDRmM2EyMGNiLCAweGQ5ZGZlNDMzLCAweGRjMDRkZTkxLAorCTB4MzA3Zjk5YWYsIDB4ZWZmM2FlZmYsIDB4YTZmNGFmOGIsIDB4MmExZGVmOWEsIDB4ZWYyY2UyZTcsIDB4YmVhYjU0ZjUsCisJMHhlYTZmOTQzNCwgMHhjMTVmZDAzOSwgMHgwZGNlZDY1NCwgMHgzOTUzNWU2MSwgMHhmY2M0YWRlOCwgMHg3MjQ5YmUxOCwKKwkweGEzMDk0ZDJhLCAweDNjZjQ1NDVjLCAweGFmN2E4ODU2LCAweGE4YzNlZjc4LCAweGQ1NWQyNWFmLCAweDBlYmU2N2E1LAorCTB4NGI4ZTZmZmYsIDB4YmM1Y2JlMjYsIDB4YjZmNzRiZDYsIDB4ZGJjZjhiM2YsIDB4N2IyNGY0ODksIDB4NTcwMTdjNzIsCisJMHhlZDA4N2E0ZiwgMHhjNmFlZWJlMCwgMHg1Y2Y3YTc3NSwgMHhmM2U2YjU0ZiwgMHgxNTdkYmU5MSwgMHg2ZmZjODA4MCwKKwkweDRmY2UwNzNlLCAweGY2ZGY3YmI2LCAweGEzN2VmY2UyLCAweGY0YmJmNDMyLCAweDQ0ZWY4Zjg0LCAweDg2Y2ZjYTE4LAorCTB4ODg3YzUwMDcsIDB4MDQ2MzMwOWMsIDB4YmM0NmJmOGUsIDB4NmFiYWJhNmYsIDB4YWEyYmE1MjQsIDB4YmM3OTQ4OTgsCisJMHhhZjJhOGFkYywgMHhlYTQ0NzM0OCwgMHhhYTc0ZTkxNywgMHgxYTU1NmY3NywgMHhmOTU1NTdlNSwgMHhlYmUwMzUyOCwKKwkweGZiZDBkNWYwLCAweDdjNjE4ZTkzLCAweGYwMmU4NzdjLCAweGYwMTM2NDk3LCAweGU1ZmU5MDBiLCAweDczYTRhYjQ4LAorCTB4MTk1ZWE3NDUsIDB4ZDhkZjc3YzEsIDB4NzA3N2Q4NDAsIDB4YzEwZDdhNTksIDB4ZjkxOWQzNTcsIDB4ZTUzZWExMzUsCisJMHg1NDg3OThlZCwgMHhmODQxOWRhZCwgMHg1NjRhZjQ1MiwgMHhjNTZmZTUwOCwgMHg1YzIyOGUwNywgMHgyZDRiZGU5ZCwKKwkweGQzZGE1YWVmLCAweDdmYmQ0NmM2LCAweDgzNmYwNTFhLCAweGI4NzFiNmRlLCAweDdhNzEyZmRmLCAweGZkZmI4NjhiLAorCTB4ZTMxNzhiNmEsIDB4YjJiZmVlMjIsIDB4ODIyOTVkZWIsIDB4MWM0Mzk4M2IsIDB4ZTdlNmJmZWUsIDB4ZGVlMTNkYjQsCisJMHgwOWJlN2IzMiwgMHhlOWVjZWVlZSwgMHgwNGZiZjcwNCwgMHg3MDE2ZWY5YywgMHhhODc4MTZhZCwgMHg0NmFjZjAxNiwKKwkweGE0N2U1M2I4LCAweDNhNDRmYmM4LCAweGM0N2JkMjlkLCAweDExMmJiN2ZiLCAweDA4Y2E5MDFmLCAweDdkODc4MDc3LAorCTB4MzBjOTg4NTQsIDB4ZjE3OWJhMWUsIDB4NzQxMmVlY2YsIDB4MWZjOGRiYWIsIDB4ZmNmMmJiMmEsIDB4MTI3Yjc3MDgsCisJMHgwNWMzYmI4NywgMHgwNmJhMjA3OCwgMHgzY2IxN2JiOCwgMHg1ZDU0ZjA0NCwgMHg5ZjUwY2UxYywgMHgxNWU0NDFlMywKKwkweDdlMjY3Yjg0LCAweGI4MDBmOGU3LCAweDg3MWY4ZGY3LCAweDA1ODI3MGYyLCAweGU0ZDI1YWNlLCAweDIzZmI4MzBiLAorCTB4MTI0YjdmN2MsIDB4YmYwZDFlN2MsIDB4YWZiZjhkMjQsIDB4NmY3N2YwNmIsIDB4ODhiNTcxZmEsIDB4ZWYxNmFlYjcsCisJMHg1MTFjMjIyNywgMHhlMDA4NzlhZiwgMHg0ZjBlMzRjMywgMHhjOGE0N2RmZSwgMHgxNjRkMjhmYiwgMHhlMDM1N2ZmNiwKKwkweDE2MWZjYjAxLCAweDE5YzIxMGZhLCAweDczYzUxZmQzLCAweDU2YzkzY2ZiLCAweDM4NDU0ZmI5LCAweGYyZWZlMWY1LAorCTB4MWIxMGE0YjAsIDB4Njg3OGNkOTgsIDB4ODVhNWZlMmYsIDB4YzZmMzE3OTgsIDB4NGFkN2FmZjksIDB4NDRhZWIyM2YsCisJMHg3ZGU5MDNiZCwgMHhkZDZkZTkxOCwgMHhjZjBkYWFhYiwgMHg1N2E1ZTQzZiwgMHhjYjY3ZWU1OSwgMHg1ZTg5ZmRiMywKKwkweDQyNDA3ZjgyLCAweGMxM2VlNmJkLCAweDVlOTE2Yjg3LCAweDFlZGM3ZTY4LCAweGUwZTgyOTVlLCAweGVlZmVmMTZlLAorCTB4ZWU3ZTgyM2QsIDB4YTBmY2ZjMTcsIDB4N2UzZTM3NDEsIDB4NzRjZDY0M2YsIDB4OTQ5OGM3MWUsIDB4MjBlZjEzNjEsCisJMHg0ZTM5OTg0NiwgMHhjMGQ3ZDEzMCwgMHhkOTE3OTgzNCwgMHhlOTRhNWUzNiwgMHg4ZWY2NGI5ZCwgMHg3ZTM2Zjg5ZCwKKwkweDdkMjNmMzE0LCAweDY3NzNiZTI1LCAweDliNDNiZjk4LCAweGExZjUwZmQ3LCAweGQ5ZGRlMzQ0LCAweDM5YzRkZTg5LAorCTB4YTIzZDMxNzQsIDB4NjUyMGY3ODgsIDB4YzRiNjRmNmUsIDB4ZGFiNWRmN2MsIDB4N2U4MWRmYjcsIDB4MTNlNmRlOTksCisJMHhhZmE3ZjNlZiwgMHg2YmUyZjE4NCwgMHhmNTQ3NjRkZCwgMHg1OWNkZTQwZCwgMHgyZDU3NzkwOCwgMHhjYjBjNTVkOCwKKwkweGMxNzA3Y2I5LCAweGY0NGQwYmJjLCAweDVmOGJkZjExLCAweDU5NWQ3NTQ3LCAweGY2NGFmNDgwLCAweGE5M2ZhNDM4LAorCTB4Zjg0NGVhMWQsIDB4ZThiZGFjMDIsIDB4Y2Q0ODdhYmYsIDB4YzFmYjg3ZWIsIDB4ZmRiMTg5NDMsIDB4YjllMmIzNzAsCisJMHg3NTkzYzRiZiwgMHhiMDlmYzVhOSwgMHgzYjUzZjU0ZSwgMHhkZTU1YTI3ZCwgMHg0M2ZiMTNhYywgMHhmZTU2YTk5ZiwKKwkweGNiODNmNjMwLCAweGM1OWY3ZjQ0LCAweDBmMTQ3ZTA3LCAweDZlNzI5Njc0LCAweGE0Y2ZjOTJhLCAweDBmZWY2MzZiLAorCTB4YzIxNmFhZDUsIDB4NDdhYTM5ZjcsIDB4ZTUwZWJlNzMsIDB4ZWU2ZjVjNmIsIDB4OWQxODc3MjEsIDB4OGMwZDljODMsCisJMHgyZmZlODhkOCwgMHgzMzk2YmU4MywgMHg4YzQyZTcyZSwgMHhiYWM2OTNlYiwgMHgzZWY0ODY3ZSwgMHg5ZDAxZjcwMiwKKwkweDAxZjcxZWU4LCAweDM0YzNjYmNjLCAweDViOTQ5YmEyLCAweDU4N2ZlNDZjLCAweDVlZWNmODI1LCAweDA0NmI1ZmMxLAorCTB4N2M4MDNkNWYsIDB4ODFkZjAyMzUsIDB4MTNmYTUxZjYsIDB4OTBlYjRmYzEsIDB4MTJkZDIwZmYsIDB4NzhmNWNlOWYsCisJMHg2MTk3YmVmMSwgMHg4Yzc3MmNjNywgMHhhYjFjZjdhNSwgMHgwZmRhMzY1ZCwgMHg2MWVkNzc5NCwgMHhmYjA1ZGExNywKKwkweGY3ZThlYmM2LCAweDdhNTlkZDkxLCAweDU5ZTU4ZGMwLCAweDQzYzAzZjBlLCAweDkxZDJjYzRhLCAweDJmNzMzZTVlLAorCTB4ZTJhYmU4YjgsIDB4ZjRmZDAxNWIsIDB4NzJhMmIwYWUsIDB4OTQ5ZWE0N2YsIDB4NDUxZmRlYzcsIDB4OWVmNDUzYTcsCisJMHhjYjVmYWE4MCwgMHg3MGZkM2ZkMCwgMHhlMTEzYTU1MiwgMHg4ZjNjNzBmYywgMHhjZmNkYWFkMywgMHgzZTAzYjgyNiwKKwkweGUyOWJjNWI2LCAweDVmNjc1MmE1LCAweDFmMWVmNWQ1LCAweDJmNzBmZjc2LCAweDEyZWMxMmVmLCAweDBjMGQ4MmYyLAorCTB4ZjkyNjYxYjEsIDB4N2JkZTJiNTAsIDB4MWIxMGRlNjQsIDB4Y2IxMzkyNjksIDB4ZjQzMmU3ODcsIDB4MGY5NGY1ZWIsCisJMHhjZGNiYzhiZCwgMHg5MGFlNWU1YywgMHg0MzRiY2I2MiwgMHg2NWU0Mzc3ZiwgMHhkMjMxNWNiNCwgMHhiNzRkMTc5NSwKKwkweDVkNTRhN2RjLCAweDY2ZjI0NjNlLCAweGMxZmY2YzY0LCAweGZjZWRlM2VmLCAweGYzZTY2YTFkLCAweDJjZjdhN2U1LAorCTB4ZGVmZDc4MDcsIDB4ODNkNDJmMGMsIDB4ZjdjNTdmMGMsIDB4NWEyN2FjNjIsIDB4Y2FiODllM2UsIDB4ZjQwMzU3ZDgsCisJMHhjZDAyZDAzZSwgMHhhZmY4ZjBmYiwgMHhmYmFkNTdkYywgMHhkNWI5ZTE0MSwgMHg5YzE0MGZhNCwgMHhhOGI0YTFjYiwKKwkweDExZjEzYTc2LCAweDkzMThkM2MzLCAweGZkN2M3YzlkLCAweGRmODgzZDBmLCAweDdjZTJiNWUzLCAweGM2MWFiZDdjLAorCTB4MWI3ZGE0YjgsIDB4MGU2MDdhZWYsIDB4ZTNjMTc1YzAsIDB4ZTM4ZjlkMzIsIDB4MTRkOTBkM2QsIDB4YmNiMmMyZGYsCisJMHhlZjFiYTdhNCwgMHhkZjBmMWUyMywgMHgzMWM3MzFlZSwgMHhlOWQ0ZmMxNCwgMHgzN2JmZmQ0NywgMHgxZjU4MmM3YSwKKwkweDhkNTM3ZmRiLCAweDgzYmI0NGZmLCAweDVkYTI0NmY5LCAweDY3NWRmYTAxLCAweDlmYmZmNTA0LCAweDE4ZGRlOTM4LAorCTB4MThkYTFmMjMsIDB4OGZjNzMzZWYsIDB4ZjE1YmU5MTgsIDB4ZGMyMWNlZDMsIDB4MzNmNzhhZGYsIDB4YWI5ZGQyMTcsCisJMHhmNGQ3OWQwZiwgMHhkYzdjMTdjZSwgMHhjNzMzZTg2MywgMHg0NTQ3ZDI3MywgMHg3ZGMwMzU5YywgMHhjYTdmYzU5NiwKKwkweDA5OGY0OWNmLCAweGY0NzMxODdmLCAweGNhMjcxZTUyLCAweDdiOTRiZGJkLCAweGQzMTMzYzc4LCAweGQzZmY5NzYzLAorCTB4M2Q1MWE0N2UsIDB4YjgyMWI0ZWMsIDB4ZDNkYWYyZmUsIDB4MmZhNWRlYWIsIDB4NjI4MGYzZDYsIDB4NjBiZGM3MTEsCisJMHg3OTc4N2M2MywgMHgyMDU5YmUwYywgMHgxMDJmMDdlZSwgMHg3ZDA2NWRlNywgMHhkMGRmN2YxNSwgMHg0NjVkMzliMywKKwkweGQ0ZjRhZGQzLCAweDFmYTc0NDI1LCAweDVmYzk1NDFmLCAweDg3ZjQwMTViLCAweGQ0ZjQ5ODdhLCAweDY5OGY3YTc4LAorCTB4M2Q5NzEzZDksIDB4ZjljMDBiNzgsIDB4OTUzMjQzOTMsIDB4MTA3MzlkOTcsIDB4ODdmZmI2NWQsIDB4M2JmY2UyOGYsCisJMHhlZmQyYWI3ZiwgMHg3MDcyN2MyNiwgMHhiN2ViYzUxYSwgMHhiYjllZjc4YiwgMHhlZGM1Y2VmOCwgMHg1YzVjMWJkYSwKKwkweGJiOWMxNGFlLCAweDhiYmJlODk3LCAweDM1ZjNjMmFlLCAweDczODJkYmU0LCAweDU2NWU5MDBmLCAweDRlYmRlZjgwLAorCTB4Nzg4Zjc1YzAsIDB4ZTgyMjkyNzksIDB4MWZiNjAyNzcsIDB4ZWExY2JiOTIsIDB4M2U3MmI2MTUsIDB4MTU0MzEzNjEsCisJMHgxMGRlOGZlNCwgMHgwNjM3YmJlZiwgMHhmMmUwZGYzZiwgMHgwYjQ1ZTI1YSwgMHhmZjUwZDc1YiwgMHgyNGMzZjQwYywKKwkweDAyYzg1YzUzLCAweDg1MDdmYmYxLCAweGU1ODRiODc4LCAweDIxYTU4ODdhLCAweGQ2ZjkwOGRmLCAweDc3ZDZmZjRkLAorCTB4ZDY5ZGRiYjAsIDB4YzJlOTFhNzUsIDB4YjA0ZTc1YWUsIDB4ZWJkZDYxZDgsIDB4NzNlNzJlZmMsIDB4YjYxNDZmYTEsCisJMHg3NTc5ZjBlNiwgMHhlM2U3ZTdhZCwgMHg3YmE3YWQ2MywgMHg3ZGE5MTMxZCwgMHhmMWVjNjI3YiwgMHgxZmUzMTdlZiwKKwkweDliYzIyYWFiLCAweGJjNDRhYzViLCAweGJlMTA1YmI3LCAweGQ1ZjdjMzVkLCAweGY2MjdkNjBhLCAweDJhZWI0YzkxLAorCTB4YzRiNTJkYWMsIDB4ZTZkNDE1MmIsIDB4ODU3YWZiZDMsIDB4ZGJiNWYzZWIsIDB4MTc1M2ZiNGMsIDB4OTdmZTQyNWUsCisJMHhjNmViMGQyNywgMHgyZTZiZmRjYiwgMHhhZWE4YmMyMywgMHg3ZTkxM2JiYywgMHg3YzU1M2Q4ZiwgMHhlYzVlN2JjNywKKwkweDg0ZTllMzk3LCAweDQ5NTMxYTE2LCAweDRmNzZlYWYyLCAweGY3NGRmYmFjLCAweDU2YTllMzQ3LCAweDgwZWMwOWUwLAorCTB4MGM5ZTEzMmMsIDB4M2ZiNzQ0ZmMsIDB4OGVmY2I5YjYsIDB4ZTIxY2YwZjcsIDB4NTA5YWZlMTEsIDB4MGEyYmYyZWYsCisJMHhlMWIxZTk3ZiwgMHhkN2EwYTRmNywgMHgwNDBmYTA2MywgMHhkZjdlMDgyZSwgMHhmNWNiYzRiMiwgMHg2ZjgxM2YwYSwKKwkweDc3YzYzZTAzLCAweDA4YzJlN2QwLCAweDM3OTEyN2I3LCAweDRlM2ZiMTkzLCAweDViODNlNzBmLCAweDFlODJmOGY3LAorCTB4Y2Y1ZWM1MjYsIDB4NTllYjVkNmIsIDB4YzdhMDQyY2EsIDB4M2ViOGQ0OWMsIDB4ZWU3YWZiZDEsIDB4MDVjNzIxNjIsCisJMHg0ZjhiYTdhYywgMHhmYTdjMmRmMywgMHgzODViOWFkYSwgMHg5ZmZjMGE5ZiwgMHhkMTBmN2ZkYywgMHhiYzcwYjFmNSwKKwkweDdhNTRlMzBmLCAweDQ4NmJjZjViLCAweGQwNjJlMzA3LCAweDFiMTBiMGMxLCAweDhmN2ZmZDk1LCAweGZlNjg0ZTBlLAorCTB4M2VlMDhmMTEsIDB4ZWUxNWZiMDIsIDB4ZGU0ZmM1ZDMsIDB4YmYzY2M2M2YsIDB4ZmQyN2UyYjcsIDB4OWFhNWY2OWUsCisJMHgwZWE3M2IwYiwgMHhmNDFkZjY0ZCwgMHhmYjI3N2VkMiwgMHg0MzQ5NjFhYSwgMHg2MzNmODE1ZCwgMHhhM2NmMTJmYiwKKwkweDZlOWZhMTlmLCAweGM2Y2ZlMjQ1LCAweDU3OGJkMmM0LCAweGM3MmUwNTU2LCAweGFhZWE4YmYzLCAweDhmZDFjYmEyLAorCTB4OTczZDBhYWEsIDB4Y2U5YjllYTEsIDB4ZDYyMzE3N2YsIDB4Y2RjYzdkN2IsIDB4YWFiMmJiZjEsIDB4OTgzZmNlOTIsCisJMHg5NGY0YzQyMywgMHhkODAwNzdlZSwgMHg0N2YyNGM4OSwgMHg3ZWFiMmUyYiwgMHgxZDAxYTlhNiwgMHg3ODlhZGZmZCwKKwkweDAyNTU0MGE3LCAweGQwYjNkM2FiLCAweDExOTQ5NDVmLCAweDFmZWZjMTMyLCAweGIyZWU3ZTJlLCAweDhlYmY2ZDI2LAorCTB4ZTg3NjFhZTcsIDB4OGU2MGZkMWYsIDB4OGI1OWNhODEsIDB4NjU0NWVjZmYsIDB4OTNjMDVmNDEsIDB4MWM3MzFjZjEsCisJMHgxMjRiZjA2YiwgMHg0NmNmMTNmOSwgMHg1YWNmMTNmOSwgMHhmMzA0OTFlNiwgMHg1YjNiMGFmZSwgMHgxY2U4Nzg3MSwKKwkweDhmYzI2MTUyLCAweDVmMDFlMDJjLCAweDViYmIxZjY4LCAweDFlNWNlYmU3LCAweDYwN2QyMWVmLCAweGIyMzY0NWQ1LAorCTB4ZmYwOWQ2ZWIsIDB4MmZkMGNmZjQsIDB4ZTg1MTcwNGQsIDB4ZTBjMzAxYmMsIDB4YzA5NmJlYjAsIDB4NzNjNGUxZDcsCisJMHhhZGVkMTkwYywgMHhmOGRkZTUwOCwgMHg0ZjRjOTc2MiwgMHg0Zjk4NGExZiwgMHhmMzA5NWU2NCwgMHgxNTY0NTk3ZCwKKwkweDkzMWQwZmRhLCAweDNmMjBlZjVhLCAweGU2OTAzM2EwLCAweGQ2N2ViYzA2LCAweDg0YjBlNWFmLCAweDgxNzkxMmU3LAorCTB4YjVjZTExOGIsIDB4MGJjMzI4NzIsIDB4NzcyMTdmZjUsIDB4YzFiZDYwNjYsIDB4MWY0ZWY0NTAsIDB4Zjc4NDVlOWUsCisJMHhmM2E2MDIxMiwgMHg4ZWI0MjFjZSwgMHgzM2RjYmNlZSwgMHgyNTUyZDE3ZiwgMHg2ZmVmZmNlYSwgMHg1ZmNiOWIxNywKKwkweGM2MmZmYTcxLCAweGY5M2I1NDc5LCAweDFmNDk2MGZiLCAweDU3YmU3NDQ4LCAweDk0ZWU3NWRkLCAweDY0ZjJmYjQ3LAorCTB4ZDEyM2M3MzcsIDB4NDFkNWQyMDUsIDB4NTU5ZDM3YWUsIDB4Yzg3ZDA5YmMsIDB4ZjMzMjNkOWYsIDB4N2MzY2NiNDUsCisJMHhlYzIyYmM5NiwgMHg1M2EwM2FkMSwgMHhlODMyYTczYywgMHhiN2UyOTg2MywgMHhhZjBkMWQyMSwgMHgzYzY2ZWY4MSwKKwkweGZiNzdkMGM2LCAweGYwNzllOGI4LCAweDMxYjlmYTk4LCAweGU4OTcxODNmLCAweGNiOTczZTU1LCAweDdhMjhlM2Y3LAorCTB4ZjlmMTJkZDgsIDB4ZGNlZDhhODcsIDB4MTkyMTY0NmUsIDB4MjBjNzNhZjEsIDB4Y2YwNTY1M2MsIDB4OGZlMzMyMjcsCisJMHg4ZDc3YjVlYywgMHg4MmI2Mjc3MywgMHgwYjllNzVlNywgMHhiOWNmYzZkZSwgMHhhNzMzZTdhMywgMHgzYzE2ZWVmOSwKKwkweGRjZDM5OWVmLCAweDdiOWUzZTZmLCAweGY4YmEyOWNlLCAweGFiNzc0YzQzLCAweDUxZTNmYjlkLCAweDIyNTBmYzVlLAorCTB4YjdhNmY2N2QsIDB4MjFlMzU0NWUsIDB4NDZlNmYxZGQsIDB4YWU2MDlmN2EsIDB4NzNiZmVmOWIsIDB4Zjg4YWE3NTksCisJMHhlMzVkMzAwZiwgMHg1YTYxNTZlNywgMHgyN2NjNmRkZiwgMHhmYTJhMGRmMiwgMHg4NDg5NmUxZCwgMHg3MjFhYjg2ZiwKKwkweGJlMThiZWI3LCAweGI5YmRkNTFhLCAweDQyNWYzYjA3LCAweGY0MWEwNWI0LCAweDMyMWIzYTVjLCAweDVlZjkzNWRhLAorCTB4YWVkZTc5ZTYsIDB4ZjE0ZTBlMGIsIDB4ODM4YTQ3ZmIsIDB4NmViZGQ1ZDYsIDB4NThjMWMxMDcsIDB4N2MyNGQ0MjcsCisJMHhiYzQ5YzE3NCwgMHhhNWMwNjZjZiwgMHgzN2YxZGQ2YiwgMHhmOGZlODU1ZiwgMHgxY2RjZTRkZSwgMHg3OTBmZThjNywKKwkweDU3OWYzYzljLCAweGMxM2U5YzM0LCAweDBiOTM5MDIyLCAweGI5MWZmZWRkLCAweGI3N2FmY2ExLCAweGNiNGMyZWZmLAorCTB4OTU4MzlkMWMsIDB4NTUzN2M0MjEsIDB4MDM5MGFmOTgsIDB4MWMwMGE1MTcsIDB4YjgxNDFhM2UsIDB4ZDFlMTE5MzgsCisJMHhmNDgyZjdkMiwgMHgyZTRlYzNmZSwgMHgxYmE3MGUwZiwgMHgxYmFiNmQ3YSwgMHhjOGJkOWJlOSwgMHhmN2UzNWFmNSwKKwkweDM4ZWQ1NjMyLCAweDAwOGRmZjdlLCAweGU1NWU4ZjlmLCAweGNiOTVjZGVmLCAweDIyZWU2YmRlLCAweDYyY2NiMmZmLAorCTB4N2E0NjIxZDksIDB4MWUwZGY4NTgsIDB4N2JjNGRiNzYsIDB4ZjM5ZDdjZDEsIDB4NzllZjBlMTQsIDB4Y2Y3NGYxOGQsCisJMHhkOTUyZGU2ZSwgMHhiY2ZkYmVmMiwgMHg5NTdlM2NhNSwgMHhhZTYzMmQyOSwgMHgyYjA5ZDhiNywgMHhlY2Y3NWQwNCwKKwkweGQxMWFmZDA3LCAweDNhNWZjY2ZkLCAweGQ5MmRkZTk5LCAweGM4OTNlOWE5LCAweGE3MzhmMWNmLCAweGZkNTNmOWIzLAorCTB4NGZmZGM2MzIsIDB4MWY5MTJkNTgsIDB4NmY1MWZjNjksIDB4ZTdlNDJiNTMsIDB4Yzg3ZDEzODcsIDB4NWNlZmYzYWUsCisJMHg5N2VmODk5YywgMHgzZjcwYjQ1NCwgMHgyOGJjYWE2NywgMHg3ZDIwM2ZlMywgMHhlZmRmM2Y2OCwgMHhlMTA4YmYzMSwKKwkweDVkN2JmMmU0LCAweDM2OWFmM2E2LCAweDQ3NDMzMmI1LCAweGU1ZDViZTdhLCAweDdmOTA3OTQ3LCAweGM0NWRmZmJkLAorCTB4MzBlN2UxYTcsIDB4NDBlN2RkZjYsIDB4Y2UzOGMwMGYsIDB4MzliYzViZmMsIDB4MGRmOTFmNDgsIDB4MGVhNTNmNGUsCisJMHg1YzgxYzRhNiwgMHgwMzk4NTdjYiwgMHgyOThkNTRkMywgMHg5OGUzNGM0ZSwgMHhlNWVjZDMwMywgMHg5ZGFhN2Y0MiwKKwkweDI3ODNmYTQ1LCAweGY3YzM0ZjI3LCAweDlmOWJmM2M0LCAweDE3ZGIxNGZjLCAweDkyN2Q5MTJhLCAweDliZjI5ZTg5LAorCTB4ZWU4MmZkNWYsIDB4MjhmM2Y5YzMsIDB4NWI1YmY3NGUsIDB4MzlkZDhiMzQsIDB4ZmY5YWMxYmEsIDB4OWYzNTkzNzYsCisJMHgzM2U2YjExMSwgMHgwM2YzNWEwZiwgMHg3ZDI2NmQ3MCwgMHgxZTFlZmY3MywgMHg5YTdhNTI5ZiwgMHgxZTdkZWZkZiwKKwkweDNjMjJhMDYwLCAweDNlNDlkOWI2LCAweGNlNmQyOTRlLCAweGQzODc3OGM2LCAweDU4NmRiYjRmLCAweGRjZWZmYmJlLAorCTB4ZWFkY2VlZWUsIDB4ZjcyNTc3YTQsIDB4ZTJjNzE3YmQsIDB4NmExZGYwOTIsIDB4M2YyYzQ2ZTcsIDB4OGQ5MGQ3MWQsCisJMHg0ZmE4NDVmZSwgMHhiYmIwNGI3MSwgMHg3MWJiNDA4ZSwgMHhiZDA2YTVlNywgMHg2OWJlMjk4NiwgMHhmZGY4M2ZlNywKKwkweGY2YWRjZTk0LCAweDljNTFjNjMwLCAweGQzZTRmNWRlLCAweGI3YTc5ZjQ4LCAweGVjN2QyMDBlLCAweGMzNjQyOTc5LAorCTB4NzBmNzQzN2UsIDB4ZjM4ODRmZmMsIDB4ZTk1NGU0NTgsIDB4N2UzZGFiMTYsIDB4MWQwMWU4NDIsIDB4ZTg3OWI1MjcsCisJMHhkNmI4YmExNywgMHhjMjRiZWViYSwgMHhhOGE3N2NkNiwgMHg3ZDMzMWI3ZiwgMHgxMGY4Yzc0ZiwgMHhkYzM0YWFlZiwKKwkweDdlYzUzNzY3LCAweGMxNzNmZGJmLCAweGE1M2Q0ZjE3LCAweDhiMmI3NDE5LCAweDM3OTkxZWY3LCAweGUyYmVmYmE1LAorCTB4ZGI3M2VlZWUsIDB4OGU4MDAzMjUsIDB4NDMxNjExNGEsIDB4NDY5N2JmYmEsIDB4MGY4NWRiOGQsIDB4Mzg5MjdmZDEsCisJMHhhZGZjZWIyZiwgMHg1NTM5ZjA0YywgMHhlZjg5NjQ1NSwgMHhhYWZiZDJlOCwgMHg0ZDUzNjk3YywgMHhlZDQxNTFmYiwKKwkweGQyN2M5NGJlLCAweGRjYTVmNzU3LCAweGNhNjdkYTY2LCAweGI5NDgxZWI2LCAweGRiNmJmYTE5LCAweGViZWZkMGEyLAorCTB4ZTI3OWNkOTUsIDB4Zjg0OTA5ODEsIDB4ZjljMDZlNWQsIDB4ZTdmYTM5NjIsIDB4ZjI1ZTFhZGEsIDB4OGJkMDNkNjAsCisJMHhiZGUzOWFjNywgMHhhNWM3NmIwYSwgMHhlOWYxMzU0ZCwgMHg4MzRiYTVkNywgMHgwZTc0Y2E5ZiwgMHg1YTcyZTc5ZiwKKwkweDQ2MWVmMTcyLCAweDFkZmYyZDY5LCAweDFiODZkMmJlLCAweGUxMWFiYmFlLCAweDRmZGY5ZWJlLCAweDllNTg1NmNmLAorCTB4YjY1M2ZjMGMsIDB4OGZlZjg2ZmQsIDB4YzdjMWVmODYsIDB4M2U3MGY5YzYsIDB4MmQyNGY4ZDksIDB4M2ZhZGJiZGUsCisJMHhlZTc2Zjc0MywgMHg0NGZmNzFiNSwgMHg3YjQ2NWMzNCwgMHhmZGVmN2UzOCwgMHhlNTA4YWI4MSwgMHhhMmY3ZjQxMiwKKwkweDNmYjUyYzZkLCAweGU0N2QwMzY4LCAweDZiZDBlNGM0LCAweGQzOTU0MzM3LCAweDU3MGZlMWFjLCAweDk1OTY1YzUzLAorCTB4MjUzZTgwOWUsIDB4MzczYWI3ZDQsIDB4ZjQ4ZGJlNGIsIDB4YjVmNjc5NzUsIDB4OTdmYjVhYTgsIDB4OTQzYTNjNTEsCisJMHg4YTM3YjRjNywgMHhhMjdlZDZjMywgMHg0N2E1N2NmMSwgMHg2OGY3N2UzMiwgMHhhMjVlOTlhNCwgMHgxMTlkZjVlYiwKKwkweDJhYjdkZmEyLCAweGNkNzIwYTViLCAweDFkOTdlZmE0LCAweGQ4NzhhMWFkLCAweDE5Yzg3MWU4LCAweGMxM2I4YTY4LAorCTB4N2M0YmQxZmQsIDB4MDI3YTE0ZWMsIDB4MjJkOTFjOTMsIDB4Y2YyODdjNWUsIDB4NDhhN2JiZDMsIDB4YTUxMDQwOTcsCisJMHg1ZWE5YjI5NywgMHg2Y2I1ZWI4NCwgMHg0YmNmYTYzYSwgMHg5OTY0MDc5MSwgMHgzM2YyMDNjYiwgMHg3OTI3OGI2ZCwKKwkweDNlYjdhNmQwLCAweGEzYTQ3M2YxLCAweDFlNzRkMWZhLCAweGVmZGM1ZmQ2LCAweGU4NDZmMzZlLCAweDc3ZTM1OGJkLAorCTB4OWU3NGRhNzEsIDB4NTI3NjY5MmYsIDB4OGZlOWQ1M2MsIDB4Y2I5NzkyMzQsIDB4ZWIxMzhlMzAsIDB4ZDliNGVkM2YsCisJMHhiZDNiNWY0MCwgMHg4YzY0ZWZiZCwgMHhlMDZiNmUwYiwgMHg2YTlmOGFlZiwgMHhmYjU5M2JlOCwgMHg5YTM3ZmQ4YSwKKwkweGYxN2Q4ZGVmLCAweGRmMTNmZTA4LCAweDhiZjhmNTRmLCAweGFjZGZiODNkLCAweGE5ZDM3MWUwLCAweDJhMzMyYjdkLAorCTB4NjhjOWUwNjMsIDB4NjY1NWE0OTcsIDB4NzlkMmJkYTAsIDB4OTFiN2NiYWIsIDB4MGFlOTUzZWIsIDB4YzhkM2RkZjksCisJMHhmYzJmOTJhZiwgMHg3OWU5Zjc0OSwgMHhiZWEwNzg3NywgMHhlMWZhZWExYiwgMHhlNTA3M2VmZiwgMHhmYzc3ZTg4ZCwKKwkweGExZGRmNjQwLCAweDFmM2VlZDBmLCAweGEwMTU5MDVmLCAweDAzZjRlM2ZiLCAweDdjZmUzMDM2LCAweGEwMTQ0NTg1LAorCTB4YWZiOGY5YjcsIDB4YzkzY2ExOGMsIDB4MjVlYmY5Y2YsIDB4YjA1YzIzOGEsIDB4N2MxZWJhYzYsIDB4MWZiY2RhZTcsCisJMHgyOTJmZTExNiwgMHhiMGI4YzUwZSwgMHhkNjhiNGEwNiwgMHg3MThiY2I1YiwgMHhiYzUwZjBmZiwgMHg5NGNiYzUxNywKKwkweDE5Y2I1OWQ0LCAweGFkMWY5MDhiLCAweDdiNGJmZWFjLCAweGNhN2RiODJjLCAweDZiZjlmNThjLCAweGEzYjkxNjNjLAorCTB4NTBmOWRjOTIsIDB4OTVmNWEzY2UsIDB4ZDIwMDM3YTIsIDB4MWNmZWM0OWIsIDB4NmQyNzMzYmMsIDB4NGIxZGE0MDEsCisJMHhjODJkYTQyNywgMHg3Y2VlN2JjNCwgMHg4ZWQzMjMxZiwgMHg4ZmJmOThmOCwgMHg0NTk1M2E1NywgMHg3MTc3ZjEwNiwKKwkweGE1OGZlZTE4LCAweDM0NjQ1MmNkLCAweGU0MmMxZGU2LCAweGUzYmZjYjE5LCAweDZlYjgyMGZiLCAweDYzMzEzZGYzLAorCTB4ZjM1ZWI4ZGQsIDB4YzcyNmY2NzcsIDB4MTBjZjcxYWIsIDB4MmYyZTZiZDcsIDB4YWIyODcwMTMsIDB4M2FmYzViYjcsCisJMHg5MGE1ZWExMywgMHg3Zjc4ZGJmYiwgMHg1NWRhOTVhOSwgMHhiNzY5N2UzNCwgMHg1ZmY2MmJmNCwgMHgxMzk5YjdkOCwKKwkweDY4YTEzNWYwLCAweDc5OGI4YzgzLCAweDg3OGU0YmE4LCAweDBmNzU4OTJmLCAweGRmODBiMGU1LCAweGY0MTQzNzQzLAorCTB4MTA3ZDdlNDMsIDB4MDJmZWNmZjUsIDB4OWYyNDM5YzAsIDB4NDU4MDlmODQsIDB4NWM1ZTMwMWMsIDB4Y2E5ZTU3NjYsCisJMHhmY2YzOTdiMywgMHg4YWUwNGYzZSwgMHhhZjYwODFkYSwgMHg4NzNhMDFhOSwgMHhiZGU3MmY5YSwgMHg0NzFiZjc4YywKKwkweDQyNWUwNjI2LCAweGY5YjdjY2JjLCAweGI3YzQyYjA3LCAweDE3ZTQxMWZlLCAweGYwZTFjYTVkLCAweDRiY2FkOGYwLAorCTB4YzVkOTYzMmEsIDB4OTMzZmJmMDIsIDB4M2U1Y2U4MWEsIDB4YTNlZjhiYjQsIDB4ZDU0ZWFjZWUsIDB4OGJmZWY3ZWMsCisJMHhmYjA5NDc5MCwgMHg0ZjVlZTk1YiwgMHhlZTg5MGVlNywgMHgxZDIyM2YxMywgMHg4ZmI2ZmJhMSwgMHg2ODY1ZTk1YywKKwkweDllMDFhN2M3LCAweDIyM2VlZTUwLCAweDVlZjgxNWIxLCAweGFjZTM1NjVlLCAweDllMjEyZjQ1LCAweDc4N2NlMmIzLAorCTB4MzhkZTVmZGUsIDB4ZDE3NzJlNDksIDB4MTViZWI5ZmEsIDB4Y2YwMWI5NWYsIDB4OGRlNzUyODMsIDB4MGU3NDhiMWMsCisJMHgyZDc3OWVlYiwgMHhlM2QwZmY3YywgMHhiOWZhZjFhNSwgMHg5NmQzZGUzOCwgMHg4ZjE3ZDI4NywgMHgxNmYzZjFjMiwKKwkweDM4N2M4NGJkLCAweGExZWU4ZTNhLCAweGRjYWMwMmE3LCAweDhkNWQyODdkLCAweGNiMWE1NDdhLCAweDYwZmE4N2Q4LAorCTB4NThlZjBjZGEsIDB4ZTQzZmI5ZjQsIDB4ZGIyNGUzZTEsIDB4NTBiMzc5ZTQsIDB4ZjNjYjFiY2YsIDB4ZjkyYzdlN2QsCisJMHhhZTExMTIzNywgMHhlZDUyNzFhNSwgMHgxN2NlM2E2YywgMHhlODVlYTNiZiwgMHhjYjgyM2Y0MCwgMHg5NTI5ZWY4NCwKKwkweGVhN2UzODE5LCAweDY5MjY5ZTUwLCAweDNjMGY4YTExLCAweDk5YmRlMDY0LCAweGQxMmRlOWM3LCAweDI1ZTljOTE5LAorCTB4NDU0YTRjNWYsIDB4MWI1MGVlM2IsIDB4YmYyMGQ0MTgsIDB4ZWMzNDBkMGUsIDB4ZjQ4Yjg4Y2MsIDB4NzkyMzYxZjAsCisJMHgyZGY3NjE3ZCwgMHg1ZmY3ZTBjOSwgMHhmYTFiMDY5MiwgMHhhMWQ3YWYwZiwgMHg1MTMyMTNmYSwgMHhmNWMxYmVhZSwKKwkweDdlNWM0ZmYxLCAweGE2NWY1N2YyLCAweDRmYmY4ZWM1LCAweDBhNzhlMDQ4LCAweDYxNjM4YjllLCAweDM4MzhmZjkzLAorCTB4MTNkMjMzZmIsIDB4MmMzY2U3ODMsIDB4ZjAyN2RhNmMsIDB4MWM3MzRkYmQsIDB4N2VkMTU5NzcsIDB4NzI4NDFkZmEsCisJMHgwMWY3NDJkNiwgMHg3MWFjMWJjYSwgMHhjNWM1OTdlNywgMHhmM2EwZDcxZSwgMHgwYjFiMzllMCwgMHgxZTMyMjVmNSwKKwkweDIxZDdmNjg4LCAweGMyZDU3M2E5LCAweDRiMTdiYTI0LCAweDczYzEzYmU3LCAweGM2OTkwYjFhLCAweDYzZWI5ZTBmLAorCTB4MzNjZDc3Y2QsIDB4YWVlOWZhODUsIDB4OWFmNWFjYzcsIDB4MmM3YWE3M2UsIDB4ZTM4M2Q1YTcsIDB4YjRhZGViYjQsCisJMHgyOWNmMDQ4ZiwgMHg2ZmQ4Y2VkNCwgMHg5MGI2YzIzYSwgMHhlZWRjZmMwYSwgMHhlMjFkZTVlNSwgMHg2ZmE4Y2YzYywKKwkweDViM2VkN2Y0LCAweGY4ZGVmNzEzLCAweDU1NmRlOGJiLCAweDJlMDA3ODIwLCAweDIxOWYzNjhmLCAweGYzNTk3NDdmLAorCTB4NDE4YjgyM2UsIDB4ODlmMGRkMGYsIDB4N2MxMzIxNjcsIDB4MjI1YmFhNTIsIDB4NjllZGUwMzYsIDB4N2JiODZlMGYsCisJMHhjOTkwZDgxNCwgMHg4NzFmMDVmYiwgMHg5ZmVkZGQzNiwgMHhiYmY4ZTUwOCwgMHg4ZWJlMjYwZiwgMHg3M2UyZWFjZiwKKwkweGQ5MGYzMzEyLCAweDQyMTcyZTY0LCAweDlkNGY3Nzc1LCAweGZhOGJjYTY4LCAweDliNDNlZDVkLCAweDM0MGE5OGFmLAorCTB4Yjc4YTM1OTUsIDB4MjdjMWU2YmYsIDB4NGU0ZTU5NWUsIDB4ZGYxMTFhOGIsIDB4Y2YzODM5ZGYsIDB4YTIzYmNhNmQsCisJMHg4ZmM4MmVmMiwgMHhhOGY1ZTUzNiwgMHhmMmE4YTRmMiwgMHg0MGZjYThiNCwgMHgxZGNkYmY1ZSwgMHg0MGZiMmMxOSwKKwkweGQ0ZjgzZmRlLCAweDllZmJmODE1LCAweDczMjJmZDZkLCAweDM1OGYwNWYxLCAweGYwMmJiNmYyLCAweGIzY2I3Y2Y3LAorCTB4NTZkM2VmZjgsIDB4YzkzZTRiMzQsIDB4YmEyYjNmMjQsIDB4YjU1YmYzY2UsIDB4MGUxMGEzZjksIDB4MWNhMzJmMmQsCisJMHg3NDkyNmIyOCwgMHgwZDVkZWJkNCwgMHhjNzk0MjNkYiwgMHhiYjUzNWU3NiwgMHg5NjNmNmUwNiwgMHg3NmExMWMzNSwKKwkweGQyM2ZmNmJkLCAweGVmN2M3YzQ2LCAweGRlYTlmN2M4LCAweGQ4OWZjZWY5LCAweDViZWZlYjBjLCAweDc1MWU3NmY1LAorCTB4NGUyYzBhNDQsIDB4N2Y3ZWVlNDgsIDB4ZGJmYjZkYmQsIDB4MGEyZmJmZGQsIDB4ZjlmYmRiZGYsIDB4OGQxYzkwMGYsCisJMHhjNDFlMDdiYSwgMHhmOWJhYjhmOSwgMHhiZGUzODBjNCwgMHg3YmQyY2YyMywgMHhkZDFjN2ZiNCwgMHgwM2FhMTZmYywKKwkweDJjY2U0YmYxLCAweDlmZGRhMDUzLCAweDQzOGY4ZmNiLCAweGI0ZGYwYjdkLCAweDY3ZTM3ZGM1LCAweGRjMTJmODUyLAorCTB4ODE2NTFlOGYsIDB4NWJkYzcwNGIsIDB4YzNlZjg3Y2IsIDB4YWMzODRjOWYsIDB4ZWY4NjNlYjYsIDB4ZjA3ODZmOTUsCisJMHg5ODE0MmJlNSwgMHhlYjc3NjFkZiwgMHhiNzA5ZmMyMCwgMHhmMDZmMDk0ZCwgMHg3ZjJiNzI3YywgMHgxZGZmNDU1MSwKKwkweGEwZjBlN2UxLCAweGM4MzY0MWQ2LCAweGE2YzA5OTNmLCAweGViNzg3ZTUzLCAweDNkN2Y5ODYzLCAweDNmYWYwNGUxLAorCTB4YWM5MDc1YmEsIDB4ZjI3MjA5YTMsIDB4ZGY5MGE5OGEsIDB4ZjdlNmM3YWMsIDB4MzdhZTA0ZGEsIDB4MzY5YmYzMWIsCisJMHg4NDUzZmZkYywgMHhmYmUzMmIwYiwgMHg3NjMzNWUwZCwgMHg1YjlkM2M4MCwgMHg2NmRiNmE3MiwgMHgxZmRjYzc4MCwKKwkweGRiOWM5M2M1LCAweDU1ZGQ3NmRjLCAweDUwODcwNDc5LCAweGE2MTFjNjFlLCAweDdlZDM3ODBhLCAweDIxNWQ3MjQ4LAorCTB4ZWUxZmEyN2QsIDB4ZjFiYTdkODEsIDB4ZTJkYzFlZTksIDB4ZDJlMmZkYTUsIDB4MzdhOGVkY2EsIDB4NDUxZGNlYTQsCisJMHhjN2ExNDVmYiwgMHhkZGM5ZTkyZiwgMHg1MjE5Mzg2OSwgMHgzYWU5MmZhOCwgMHg4ZGIyZWI5NywgMHhlZjUyMjNlMiwKKwkweGY1MWU5MzcyLCAweDAzM2RmOGEwLCAweDBmYTIzYmUwLCAweDM2Y2JjMDk3LCAweDA5NmQ5ZWIxLCAweDgwZjZiZmRjLAorCTB4ZjNmNTFhNjcsIDB4YzQ3ZmU0OWUsIDB4NDJjYTYzMjEsIDB4YzVhN2YyNGUsIDB4ZjM3MmJlOTEsIDB4MjAyYjkwMDYsCisJMHg3OTg5ZDdkNywgMHgwOTdiNWJhZiwgMHg0NjZlMjlmOSwgMHhmYzI4ZjEzZiwgMHg2N2Q3ZWZlZSwgMHhiZmZlYjc1NCwKKwkweGFlZjIwMzJlLCAweGRkNmViYjZlLCAweGYzM2Y3ZjJjLCAweDBkYmFmNmI5LCAweDViOTBkY2JjLCAweDdiNzlkMmViLAorCTB4YWQ0YWJmNjMsIDB4M2VhNGUzZTYsIDB4NWM0NmM5NzgsIDB4MjhjMmJjNDcsIDB4ZWNlMTdiN2UsIDB4ZDE5NzFiMTEsCisJMHhhZDJkN2ZmZSwgMHhmZGZkZjk5ZiwgMHg1YTNmMGVkMCwgMHg3YTg2YzQzYywgMHhjMjlmODFhOSwgMHgxMjU3ZmVlMSwKKwkweDg5MzczZDYwLCAweGYwMzVlZmRmLCAweGI3NGY4YzY0LCAweDkwN2Y1MWUyLCAweDNiNDA3ZjQxLCAweGViNDAzMTM1LAorCTB4MGM2MjdkMDcsIDB4ZmFlMDZlMGYsIDB4MzMxNmQyMDQsIDB4YWQyOTk3YzEsIDB4ZmZmYmYwZTMsIDB4ZmRiNTM4MjAsCisJMHg0ZmY0ZTAyYiwgMHhjOTQ3Nzc5ZiwgMHgwYzM3OTAyMSwgMHg3YTVmMmZmYiwgMHhlZGZmNzJkYywgMHgyM2QxMDEzZiwKKwkweDgwMDA3MDJhLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLAorCTB4NzMzZWYwYjUsIDB4OTk5MmJjY2UsIDB4OTI0YzI2NjQsIDB4ODRlM2M4NDksIDB4NzExMDA4NDAsIDB4ZjA0NDQzMTIsCisJMHg1MTg4ODQzMSwgMHhkNDUwM2I2OSwgMHgyMDcxN2FkOCwgMHg5OTI2MDIzYywgMHg0YjYyZDVhOCwgMHg3OTEyMGNmZiwKKwkweDIyMzQxODA5LCAweDAyODFjMTUwLCAweDA2ZjU1YmM1LCAweDcwMWE4YzQ1LCAweGFmN2E4YTQ0LCAweGI3YWQ4ZWY2LAorCTB4ZmY3ZjZjNTcsIDB4NGE4Zjg4MDgsIDB4ZDJmNWEyMzIsIDB4NWFkN2ZkOTcsIDB4Y2U2NGVmN2IsIDB4YjZiNGE5MjQsCisJMHhkYzNlZjliZCwgMHhkOWNmYjNlZSwgMHhkN2I1ZWQ3YiwgMHhmNmI1YWY2YiwgMHg0Y2Y1YTYxZSwgMHhkOGMwNWMwYSwKKwkweGNlNmEyNTY2LCAweDdjMmM2NGFlLCAweDYxZWRmMTQ4LCAweDY3Y2YwN2YwLCAweGY3ZmIxOTNiLCAweDk1ZDVhMGI0LAorCTB4ZjE5ZmQ4YzksIDB4ZTZjNjBhZWYsIDB4MjcyOWJmN2UsIDB4OGRlZDA2NTgsIDB4NjFjYjE4MjMsIDB4Y2ZiYmY1MmMsCisJMHhkNTAwZGVkNCwgMHg3YTNmNGJiOSwgMHgzZjdjMGY3YywgMHg4Y2E5N2JmNywgMHg0M2VmMDNlOSwgMHhmN2MxOGM4ZiwKKwkweDViNmRiY2VmLCAweGQyODQyZWNmLCAweDc5MzUxOWQyLCAweGY5ODZiY2EwLCAweGVmN2JjMDU2LCAweDI3NDM1ODk4LAorCTB4YmUwZWY3ZjQsIDB4NTU2MzA5N2EsIDB4MzVlNWJiZGYsIDB4ZGJiMTkxMzYsIDB4OTM2MzJhNWQsIDB4ZjhhYjViMTgsCisJMHgyNThhOTg3MywgMHhiYmUwZGIwYiwgMHg2NDRiMmNmMCwgMHg3ZDYzMTE0ZiwgMHgwY2Q4NTMxMSwgMHgyM2I4NzVmZCwKKwkweGI4YzExNzViLCAweGY5OTVkNzFkLCAweDFmNWZkMGMyLCAweGVmODY3ZTYzLCAweGY3YTU0YjJkLCAweDRjM2RkYzNhLAorCTB4NzQ0YmY2YzMsIDB4MGVjMjQwMTcsIDB4MTlmYWExN2UsIDB4NWEzN2UzZDQsIDB4NzgxNGJiMjIsIDB4NzZjMmNlNWUsCisJMHgzZTMyNWY2YywgMHhmM2ZhODYxMiwgMHg3ZjdkMGUzMCwgMHgwZjY0NGE2MywgMHg4ZjgyY2ZiNiwgMHhhMzcxZGVhMCwKKwkweGZlODYxMjM3LCAweDQ3NjIyY2VjLCAweGZhNzYzYTc4LCAweDhjMWMzMjczLCAweDA1YWNhYWU1LCAweDgyMjhlZmUxLAorCTB4MmI1OTk0M2EsIDB4MDcwMWNkZDksIDB4NzEzZmNmZTIsIDB4MGYwMDczOTYsIDB4Njg5OTc3NWYsIDB4M2Q5NWE5M2UsCisJMHhmNDM3ZmY0ZiwgMHg3ZGRiZDZjNywgMHhlMWIwYTA2MywgMHhjZjZmNThhYiwgMHgzYjk5NzgyNiwgMHg2NmY4ODU1OCwKKwkweGI4MDNmYzFhLCAweDg5YzgxZmVhLCAweGNjZTdjM2FjLCAweGIxZWI4NTU3LCAweDQ3OWZlOWRhLCAweDU1MjBmZmYwLAorCTB4YjYxZmY4NDcsIDB4MGFiNjM1YjMsIDB4NjZkNjE1MjgsIDB4MGJmYzAwY2IsIDB4NDNmYjU4NzgsIDB4Mzc2MzBjMDAsCisJMHg5NzgwMDBlMywgMHhkNjcwZDdmZiwgMHgyYmYzYzNhOSwgMHgwN2FkMGE1ZCwgMHg1NTZkZjlmYywgMHhiYzY3Y2Q4YywKKwkweGQ0ZjJmZTdkLCAweDU4ODk5NTc3LCAweDFhNmI1MWFhLCAweGE1NzM1YjNjLCAweGVmNDZjN2JmLCAweGUyOGYzZmIxLAorCTB4MGJmYTBkYTUsIDB4MjViN2YxMzIsIDB4MDliYTQ0ZWUsIDB4ZDg2OTc3ZTIsIDB4YmE5ZGVmZmYsIDB4ZmRmMGViMDMsCisJMHhmODc2NWM0NCwgMHhmYmUwNzRiZSwgMHhmOWEzMTczYSwgMHhmYzM5NTVjZiwgMHg0NzU1MzVhYywgMHhjOGZjNGFmYywKKwkweGQ3YzI0ZWIyLCAweDcxM2Y5MGZlLCAweDcyNGUzOTNjLCAweGZjYmFmN2JmLCAweDAwYmUyMjM3LCAweDBmNzRkMWVmLAorCTB4NzVhNTQ1ZTIsIDB4NjNkNzg2NGQsIDB4NDNiMDZmODksIDB4ZDU1NmRjZmIsIDB4MzNlMDM3N2QsIDB4ZjM0OWNjYjgsCisJMHg5Y2RlZjA5NSwgMHgxNThjYmYxZCwgMHg3NGZmZWUwZiwgMHg4Njk1NzM2YSwgMHhlOWM2NWZmMywgMHgwMmI3MmQ5ZCwKKwkweDYyZjExMmUyLCAweDVkMDNhODE5LCAweDYzZjE2NDJjLCAweGU3ODg2NTI2LCAweDg0NDVmNDVhLCAweGMyNDc1MTdmLAorCTB4MmZkZmY0ZjcsIDB4NDllZjg5YWMsIDB4OTJiYTYxN2UsIDB4MmJhMGJmMDQsIDB4ZGQ3MGQxNWQsIDB4Mzc1ZjBhODIsCisJMHgzNzNlMjU4YiwgMHg2ZTE4MzY1MCwgMHg4MmQ1Y2Y4OSwgMHgyNDVkMjRlZSwgMHhlMjM1N2JlMywgMHg3YzYwZDI3YiwKKwkweGY5M2QyYzdiLCAweDk5NzA2ZmQ4LCAweGRjOTRmMDk1LCAweGZhMTE2MzNmLCAweGYwM2IyMWVlLCAweDE2ZGRkMDBmLAorCTB4ZGQ3YTIxNDUsIDB4NjQ2YTU3NzIsIDB4M2RhN2YyMjUsIDB4MTlmMTE3YmUsIDB4YWQxNTdjM2EsIDB4MTQ5MmVmNzcsCisJMHhkYjJiYzE5ZCwgMHg5NDQxMzAyYywgMHg5YzlkODczMywgMHg0YTdhNGI4ZiwgMHg2MTdhOWY5MCwgMHg5ZjU4N2VjZSwKKwkweDlkZDVkN2RlLCAweGMxMDI0NTYxLCAweGVhZWJmMzU4LCAweGRlZmZhNDJlLCAweGZkZTZhZjY3LCAweDE5ZDU0OGFjLAorCTB4NjE4ODQzZDQsIDB4ZmUxNDM3MTgsIDB4YmMwMzJiNDMsIDB4MmNjNTM0OWUsIDB4ZTAxNzVlMzQsIDB4ZmYwOWMyNTcsCisJMHg0MzVmZTE3YSwgMHhlOGJjODBjNSwgMHhiZjFjMDZjMywgMHg5ODA3Y2I4YiwgMHhlNzFhMTJlMSwgMHgxZDZjMjlkYiwKKwkweDUyNmNkYjhjLCAweDZmNjgyNmZjLCAweGIyM2UzYTVlLCAweDQzNjFjMzkyLCAweDIwMTQ2YTNlLCAweDliNTg5YjM1LAorCTB4ZjdjMDMxNTIsIDB4MjUxM2E2Y2QsIDB4MzZmMTk1YjcsIDB4ODViYmRlMGQsIDB4Zjc4MTc1ZjEsIDB4NWYwMDJhOGUsCisJMHg0YzdkNmRhMywgMHhmYTQ1YmE0NSwgMHhkOGE1ZjY4NywgMHhmZjgwMzQ1ZSwgMHhmOWJmZjVlNiwgMHg3Y2RmYzIxMywKKwkweDhkMTc0OGMwLCAweGIxZTcxOThmLCAweDhhOWU5MTM0LCAweGI1MjRlODA2LCAweGQ1ODllMzkyLCAweDgwMThjOGIwLAorCTB4YTllYTI5ZDcsIDB4OGE4OGIxYjUsIDB4Y2Q1NjVhNzgsIDB4NjZlOTAyNGUsIDB4ODE5OWU5MWUsIDB4ZWNhY2UzZjQsCisJMHgwY2ExZjM2NCwgMHgxMWZjYzA3ZCwgMHhmNzRhN2I4MCwgMHhjMjQ2OTdjZSwgMHg1OGRhZWVmYiwgMHhiNDM3NGUzZSwKKwkweDRlOGJiNmVjLCAweGJlYjAzNDVkLCAweGJhNGJjZTEyLCAweDQxY2NhOTM3LCAweDAwNzdkMWUzLCAweDgzYmY3ZjhhLAorCTB4ZmIzNzFiZGUsIDB4NmVmMmM0ODIsIDB4YTRkMzJlZmEsIDB4ZTBmNmJkMTIsIDB4Y2QxYmU0MjMsIDB4MzhjMGEzOWYsCisJMHgzMjhjOTc5YiwgMHg4MmE2N2FlMSwgMHhiY2I5NDM3YywgMHhhZWVjN2RiMCwgMHg3ZjY3ODQxNSwgMHgwN2I3Y2EwOSwKKwkweDA5Y2U4MGQzLCAweDk0MmFiZTlmLCAweGVhZWVhNTJmLCAweGJmYTBiYjVmLCAweGZmZDVkY2E3LCAweDEzOGUyNThkLAorCTB4NDdmNGUyNzAsIDB4YTY0OGJlOTAsIDB4MjNiZDY0ZTcsIDB4NmUyZWNiZGYsIDB4MGM3MTZmMjksIDB4MTdmMDFlZmYsCisJMHgzNWJlMmRlMSwgMHg0ZDBmY2I5ZCwgMHhmZmEyZmFhMSwgMHg0NzVjZWYzMCwgMHgzNzQ0NjlmMCwgMHgyMjJmNmRiNywKKwkweGRhYzBkYzc5LCAweDU5MWFkZTg5LCAweGJiZjQ4MmM0LCAweDY5YzJjNmM4LCAweGUwOGIxNzQwLCAweDE3Mjg3NGI1LAorCTB4M2QzMmIxNmYsIDB4NDQ5NmZkNjEsIDB4MjE0NmY1OGMsIDB4MzE2MTZlMGYsIDB4N2Q5NmZlZmEsIDB4MmMzNWVkNDksCisJMHgyNmY2ODRlYSwgMHg2MmE2OGIxYiwgMHg2ZjZjNjlkOSwgMHhlZjQxNzE2NiwgMHgzZTI2YjY3ZiwgMHhiZTdjMWQ2NywKKwkweDc3NzU4YjM3LCAweDIwZDQ0NGQ3LCAweDFkYWI3YmNjLCAweGJlMDY1Nzc0LCAweDMzZWI0ZWQwLCAweDVhNGVmOTY1LAorCTB4N2YwYWY0Y2YsIDB4NGZhODNkZDEsIDB4NzZmYjM1NWUsIDB4MjdiZWRkMDEsIDB4ZTdlMjRiZDYsIDB4YmJmNTU3NWUsCisJMHhkNTE0Zjc4OCwgMHhkZjhmZjM0NCwgMHg5Y2ZjMjU2MywgMHhlYjhkYmQwMiwgMHhkZDliOWY3ZiwgMHhkZWNhMWIzYywKKwkweDdhM2JkZDU2LCAweDU1YzlhMjM0LCAweDE4MzlkYjMwLCAweGIzOWVlYmNmLCAweGI4ZGQyMDM3LCAweGI3YzIyNmRkLAorCTB4NjVjYzdlN2MsIDB4ZGRkNTdhYTYsIDB4NTIyYmZmMDIsIDB4MDg4YWJiMjMsIDB4OWU5MTEzZGQsIDB4N2Q0OTQ2YWEsCisJMHg4MmNlMjZjYSwgMHg1NjY2YmJmYSwgMHhlNmY1MDlkNywgMHhlYzQxMWRlYiwgMHgwN2VkMDdhZiwgMHhiOWI4MTdhOCwKKwkweDViNzAyOGRlLCAweDJlYjI3ZTY4LCAweDA2ZTkyYmU3LCAweDUyZmVhMWM2LCAweDg0YTVlMjJlLCAweGM4NWI4YzYzLAorCTB4N2Y4OWI2NDEsIDB4ZTZlZmY0MjcsIDB4NDkzYjI5MjUsIDB4YWZkM2Y2ZmYsIDB4OTZmZDExODksIDB4ZDc4ODJjMDUsCisJMHg3OTVjODRlNywgMHgzNjk1Y2E0ZSwgMHg5YTJiOTcyYiwgMHhhODMyZWU2YiwgMHg5OTQxZjczZiwgMHg5NWUwMWQ2ZiwKKwkweDgzZGU4Mjk1LCAweDRhM2YxYmVmLCAweDVlOWU5MWQxLCAweGVmNWZlOGY5LCAweDlmYjQxOWZkLCAweDViYTJjMGZkLAorCTB4ZDIwMTdkYTEsIDB4NzNkYmFjMTgsIDB4NjA0Nzk3MGEsIDB4OGZkNDMwN2YsIDB4MzhmNmMwOGQsIDB4YjFjMWUzNmUsCisJMHhiNDFjN2Y2NCwgMHhjODQ2ZmIwOCwgMHhlMGI0YzZjZiwgMHg0ZmQwODVkNiwgMHgzZTk5OTNlMywgMHhiY2Y2NjRhMCwKKwkweDVlZThmMjM5LCAweGY3NjQzZjZjLCAweDFiN2U4MWVkLCAweDFiNWUzODUzLCAweGRmNDkxYjlmLCAweDRlMGY2MTNmLAorCTB4NzMzY2MzNzcsIDB4M2M5ZjkxYWQsIDB4MDVlMzcyODEsIDB4Njc3YmQ5MmIsIDB4YzIxMTc0NTksIDB4YWVkM2I2N2YsCisJMHg3MDI3N2JlMCwgMHg0MjUwZTk1ZSwgMHhlYWYzODI5YiwgMHgwNDNkOTI3NiwgMHgxMGIzOWE3YywgMHgzNmI5M2JiZSwKKwkweGUwNGJjZjliLCAweDA5ODZlNGU5LCAweGNkOWIxN2M0LCAweGIzZjBiYzdjLCAweGMyN2ZiZDBhLCAweDAzOTE5ODFjLAorCTB4OTc0ZjEzZjUsIDB4NTM0MDU2ZmIsIDB4YjUxMmMwNWYsIDB4ZWU4NzNkMDAsIDB4YmQ1ZTc2ZTMsIDB4Nzg4MWRmNDksCisJMHgwOTUzODc2MiwgMHhhMTFlYjk1ZSwgMHg2MjY3OGI4ZCwgMHhmMmU5Njg3YiwgMHgxYzdjYTNhZiwgMHhkZTUxY2Y4ZSwKKwkweGQ5YjkwNGIzLCAweGM4MDVlMmNiLCAweDQ2MWFkYjRmLCAweDlmNTE0Njc1LCAweDkxZjM4Zjc0LCAweDU4NWU2NTVhLAorCTB4MTcxYmEwN2MsIDB4OTk5NGY3N2YsIDB4Yzg3ZTM1ZTMsIDB4YmU3Y2Y0NGMsIDB4YjU3Y2UzZmQsIDB4NzA3ZmFlMmEsCisJMHg2NWM4MTA5YywgMHhlNDhmZjkyNiwgMHgxZDVkNDI3MiwgMHhmZWM4Y2VhYSwgMHgyZDk3M2QwYywgMHhmYjYzM2FlYywKKwkweDFkZTBjZWViLCAweGU2YmZhMDZlLCAweDlkZTdmZmZiLCAweDM4ZGY4NDY1LCAweDllZDY0NWM5LCAweGNhNzk3YzQ5LAorCTB4NzQ4YjlmZWMsIDB4NWE4OWFlZWIsIDB4ZjNlODI3ZTYsIDB4ZWFhZjgyMGQsIDB4NjNmZWMyYWQsIDB4MWYyMjRiNTEsCisJMHg2YWFhZjZjYSwgMHg3MmNiZGQyMywgMHg2NzdmYTBiZCwgMHhjMWY3Y2I4YywgMHgxZmMxMjZlZCwgMHgxZWEyYjRkZiwKKwkweDY2NDFjMjliLCAweDFjNDdhODg1LCAweGZkNGViZmQ4LCAweDZhMjBmOTRmLCAweGUxN2E4N2E5LCAweDkxNjVhOGYyLAorCTB4MDA0ZjkxMjgsIDB4Y2MxYjUxZGYsIDB4Mjc1NmQ0ZmIsIDB4MDM0MDZmZTcsIDB4MzI2OGIzZjYsIDB4NDhiOTdkMjMsCisJMHgwMmI1ZmIwNSwgMHgzZDVkZWI5ZiwgMHg5ZmE3MmViMCwgMHhmYWZhNzM3NiwgMHhmMDA1NjAyMywgMHhmNzg5OGYzZCwKKwkweDgyZWY2MGFjLCAweDRkYTY3YjFjLCAweDYwN2VlMjg5LCAweDJlZWIxNmRlLCAweGI1ZjIxMTdiLCAweDdhZTI3NTVmLAorCTB4OGU0ODU3NmUsIDB4NTY5YjZiY2QsIDB4NGJlYTE1YjIsIDB4ZWI0MDVjMGYsIDB4ZDM5OTM2OWYsIDB4OWI4OGQyZTUsCisJMHgyMTE0ZTJmNCwgMHgxMWFkZWIxZiwgMHgzZmRmZDkwYiwgMHgwMWYyMTg1MSwgMHg3NDc2NGZmNCwgMHg1Mzk0N2MyMywKKwkweDI4MGYxODMxLCAweDEwZjQwZGQ3LCAweDVkODNhODQ5LCAweGNiOTNhNTM0LCAweDljZjIwNjU1LCAweDUyNGJkODI1LAorCTB4NjcxY2EzZGUsIDB4OTE5ZmY2NDksIDB4MWY1MmMyM2UsIDB4ZjRjN2I5NzEsIDB4NTI3Yjk0NmMsIDB4MGFlYmRmMmUsCisJMHhhZTQ5Yjk3NCwgMHhmNWM2Y2U4ZCwgMHg3MmU0ZjU4NSwgMHg3ODQyYmY3MywgMHhhNDJkNjI2ZCwgMHhlODFlYTQ0ZiwKKwkweDkxZTg1NzFmLCAweGViOTg2YWQzLCAweDJhMjZlYjJiLCAweGQxMTc3NzVmLCAweDI3NTk0Yjc4LCAweDU3YTkxM2U5LAorCTB4ZDc4M2EzODYsIDB4N2UwZTg0YmYsIDB4ZWQwMDc0ODYsIDB4ZThiMDFmOGQsIDB4ZTM1ZTMwNjUsIDB4OWE2ZDE2NzIsCisJMHg0NGU3NGJjOCwgMHg0ZjVjOGZkMiwgMHhjNDllYjhkYSwgMHhmNDNjZTUzMiwgMHg0YzdlYjI2NSwgMHg3YWM5ODdkNiwKKwkweGY1YzJkYjMwLCAweDY5Njc1YzlkLCAweGU3NGY2NGNmLCAweGU1OTRjMDc2LCAweGZjYzE5NTExLCAweDNmZjlhNjM2LAorCTB4NjAzNDljY2UsIDB4YjJkZTg0ZDcsIDB4YjEwYmY0ZDksIDB4ZTBhMzYwMWUsIDB4ZDM2OWM1YmQsIDB4ZjY4NmNhNmUsCisJMHhjOGZjYzY5MCwgMHg5NzgwYTk1NywgMHhiYjdjZjA5ZCwgMHhiMzZiN2JiMCwgMHgyZDdiZGQzOSwgMHg1YWNkN2U5YywKKwkweDcwM2I5NTgwLCAweGNmYjQ2MjVkLCAweDE3MzI2NzhkLCAweGU3YzRhM2QyLCAweDU3N2MyNzc2LCAweGZkNzFkZjgxLAorCTB4OGRiZGZmZDQsIDB4N2MyNGE1YjUsIDB4OWQ5Y2ZkNWYsIDB4Y2ZlN2VhZTQsIDB4YjI1NjIzM2EsIDB4NmU4NTgyNDcsCisJMHg1N2ViMmZlOCwgMHg3YjUzYjI1NiwgMHgzZTkyNzM5ZiwgMHhkMGZhMTVlZCwgMHhkMTI4ZjY4MywgMHg1ZmFlMmFjYiwKKwkweDIxMjc1ZDcxLCAweDY0OGY1NTM1LCAweDM1Y2FmYjQ4LCAweDRhMDQ1MTIzLCAweGNkYzlhY2ZiLCAweGY2YzFhY2VkLAorCTB4OGEyZjY4OTAsIDB4Y2FlOWNmNWQsIDB4Y2ZjY2ZiNGEsIDB4NjI3NzNkZGQsIDB4Njg2MWUwMWQsIDB4NTg4ZmZmOWYsCisJMHhlOTgxZDBlNywgMHhlNzg3ZGZlNSwgMHhjN2MzODBhMSwgMHg0NzJjMWZiMSwgMHhkZmFhYjU3YSwgMHhmNDA2ZGViOSwKKwkweDFlNWQ0MzM1LCAweGQxZTYwYmJmLCAweGExNzBlZjk0LCAweGZjMjlhYjllLCAweDg0NmYyZmY1LCAweGNjMDc4N2ZhLAorCTB4YmNlYjhhY2MsIDB4MWIxZDdhNjcsIDB4NWRmY2JjMzUsIDB4ZTg5ZjMxMTIsIDB4NWI5N2UwNDksIDB4NGRlYjE5ZjYsCisJMHhhODdhYzY5ZCwgMHhjODJmNThjYiwgMHg0ZjRlN2E3MCwgMHhmYmUxZDkyMCwgMHhkNWI1ZDAzMywgMHg0ZWMxZjJkYSwKKwkweGJjZmFkNzgwLCAweGE3ZDFmNDk1LCAweDA2NzE2MGVlLCAweGZjNTM1YmNhLCAweDVhZDllMjE4LCAweGY0NDRmMWY4LAorCTB4M2ZiYTg0NmYsIDB4MDJiNGIwNTEsIDB4MzhjYWM0ZWQsIDB4M2ZhZjkxZmUsIDB4NzQyYmNmYjcsIDB4MDFiNzgxMGQsCisJMHg4OTliMzFmYywgMHgzYWQ2MGNmMCwgMHg4NWNlNDkyZiwgMHgyYzc4OWYwNCwgMHg4NDVmMGZmZSwgMHg5ZDlhMmZmOSwKKwkweDllOWJiYWUyLCAweGFhNGU2N2Y4LCAweDYwOTI3YjQyLCAweDU3MmRhMTY0LCAweDJkZmI4ODdmLCAweGFlMDk2Zjc4LAorCTB4ZjA1OWU5ZmYsIDB4YjBkNWMwMWUsIDB4NDZjM2ViODUsIDB4YmU0MzRiMTYsIDB4ZDNiYjA2NmQsIDB4NDc3YzRiMDYsCisJMHg1Yjg3NWYwNiwgMHg1MTU1ZTJkYSwgMHg4YzhlZGZmOCwgMHhhNzA4NzFkYSwgMHg4MDJkMjdmNiwgMHhmYjFhYjFmNCwKKwkweGFmOTNiMDRkLCAweGUwN2FlMGNkLCAweGQ3NzY3ZDk2LCAweGRkMWUwMzI5LCAweDJiYTg3YTg2LCAweDkxMmE3NWM3LAorCTB4NjFmYzg0ZmYsIDB4Yjg5NjhhNzksIDB4MDk1NzdhMWYsIDB4NmJmODhiNWUsIDB4YTY1OGY1YjIsIDB4ZmM1N2Y4YzEsCisJMHhmNzkyMzNlOSwgMHhhN2NkOTc4YiwgMHg1ZDgwYzQ3ZCwgMHhiNGY5MjU2ZCwgMHgzZDIwYWVmOCwgMHhkZjJiNjk3ZiwKKwkweDZhZGU5ZTE3LCAweGE3ZWYxMWQ3LCAweGUzZmRmM2I3LCAweGM0NDczY2UyLCAweDg1N2JmZjA2LCAweDhiZGJkYjliLAorCTB4MTk0NTNiZTEsIDB4YmM2NGM3OGMsIDB4NTVmMGZmYmQsIDB4ZjdhM2E0NWUsIDB4ZGMyZjFmMTksIDB4Zjc4ZmVkYzksCisJMHg2MmFmODA1ZCwgMHhmN2Y2MGVmZSwgMHhlZmQ4MTc3ZSwgMHhhYWY5ZTIwYSwgMHgyZTJlNTEwZiwgMHhkMGZhYWVkZSwKKwkweDljODc2MDRlLCAweGJjNTk4ZmU0LCAweDBiNzFjYWZkLCAweGE3ZGZkODFkLCAweDVmYTFhNjIzLCAweGU4OTVjNzY4LAorCTB4MDJmN2MyODksIDB4ODlkN2VlMTEsIDB4YjVjZjAxNWQsIDB4MWQ5MzE3MWQsIDB4OTViYjc0NzcsIDB4ZWRiNmU5YzMsCisJMHhmMTVjNzljNSwgMHg0YWY4OTUyNywgMHhkYTIwYjEzMywgMHhmZjE2MWRjNywgMHhmZDY3ZTQzOCwgMHg3MDMzM2RlMSwKKwkweDk1OWZkZTVkLCAweDFmZjdhMjZiLCAweGYxMGI5ODU3LCAweDg1OTY1ZWUxLCAweDVhMmIxN2NmLCAweDYxYjdmOTAwLAorCTB4ODk5OTkyY2IsIDB4ODY2YTRlZjYsIDB4YWQzNWViNGEsIDB4OGY1Njc5NzAsIDB4N2FlOWY4ODMsIDB4ZGI0ZGEzZDQsCisJMHhmYzcwN2Y4MSwgMHhmMmZmNmZkOSwgMHgzZjIyNGY0NiwgMHg0Y2M1NWVkZCwgMHhjM2NiZjYwOSwgMHhjMjdhMjM1ZiwKKwkweDZiZTAyOGJmLCAweDU3ZDdjMGIxLCAweGFhNmIyYmU1LCAweDEyOTY4YmU0LCAweGVmOGJhMzk0LCAweDBkNzEyOTZlLAorCTB4ZjNmNDU3NjEsIDB4MGY5Y2MzYzUsIDB4Yjg1MGNiZWYsIDB4YzMyZjIwZmYsIDB4NmUxOGNmYjAsIDB4MzUyOGU2NWYsCisJMHhmOWIxNWU5MSwgMHg5NDBmN2Y5OCwgMHhjNjJkYjBkOSwgMHgwYzgxZjdmZCwgMHg2NDBmZGE4ZCwgMHhmYjVmN2I3MCwKKwkweDVlZmI2ZGRkLCAweGNkNGQ3OTg3LCAweDgwY2Y2ZTA4LCAweDk3ZjMyMTdhLCAweDcxZWJiYWUzLCAweGIxOTgzNTU3LAorCTB4YmJiMjYyODgsIDB4NmU1NmMzZDgsIDB4OGVkYzZhYzcsIDB4ZjZjOTljZGUsIDB4OGZkODRiYWUsIDB4OTk3ZjYyNzcsCisJMHg2MmY2MTcyNCwgMHhmZmM3YmQzZiwgMHhkYWYxMGM3OCwgMHg0NGYxZjA1YywgMHhlNzQyMGZiNCwgMHgxZmEwYjMzZSwKKwkweDkwYWRkMWNkLCAweDAyZjg3NzNjLCAweGQ0MjVlOTBjLCAweDI4MmQ4YjNkLCAweDIxYzM5MDFiLCAweGM5MTNkNzFmLAorCTB4MDY1M2ZhZjMsIDB4M2M4NGVmZGYsIDB4ZmRlN2VhNzEsIDB4M2I3ZjljMTEsIDB4YjczZTljZGMsIDB4M2YyMTRiMmQsCisJMHhjNDRmMzZlNCwgMHhiNWZmNDA4ZSwgMHhhNWVkMmE3YywgMHg2N2VmYzIyNSwgMHg1Zjk0ZmRkYiwgMHgyODhlZmE0NSwKKwkweGQ3NTgzMWFlLCAweDM1ZjQ3ZjM5LCAweDMwYTg4ZGNjLCAweDhiYmI4N2NlLCAweDc3ZDlkZmM5LCAweDg1NGY5YTYwLAorCTB4MWZlZWM3MzYsIDB4Nzg4NTE5YWQsIDB4ZjBmYjMyZWEsIDB4MjdhZjg3N2QsIDB4ZTFmN2U3MGQsIDB4Mzg2OTkzZWUsCisJMHgyYWRkODZiZiwgMHhmMjIxYmJjZCwgMHhiMmMyZDY0OSwgMHgzM2YwYjkwMSwgMHhjYTNhZjgyNSwgMHgxYzUyZTYwMSwKKwkweDBmOTRiZTM4LCAweDM0ZmVlZTFmLCAweGZiODM4MTZiLCAweDU2N2Y0ODBiLCAweGE3OTc4ZDBlLCAweDhlN2VkM2RjLAorCTB4Mzk3MTVmZGYsIDB4MWU4Zjk3NWYsIDB4ZWU1MDQ2YjcsIDB4ZmQwNzY0N2QsIDB4M2Y2ZjIwOTYsIDB4Nzc3ZDcyNzIsCisJMHhlZmVlNDMyYSwgMHhkZjUwMGIzYSwgMHgyYTZmZDdmNCwgMHhmODljYTEzNSwgMHhkZmNmOGI4ZSwgMHg0MDJjZTk2MywKKwkweDYyOGRmYzdlLCAweDFhZTk2N2VjLCAweDZjODA4YjEzLCAweDUwMDZiMjVmLCAweGEzZThmMjAzLCAweDQwMjk5ZjQ3LAorCTB4OWVlMWZmNzksIDB4MjdlNjBhNjcsIDB4OWRmYzk3YzAsIDB4NzhlNTdiMmMsIDB4ZmQyNjZmYzIsIDB4MzQ0YjFlYTgsCisJMHhlZjliYzcwZiwgMHhlNTdmNzJiMywgMHhmOTU0N2UzMCwgMHhmZGMyZGIzZSwgMHhhYjNlN2RhMSwgMHhiZjI4NzQ4ZSwKKwkweGYxNDg2YmViLCAweGM3ZGI3ZGEzLCAweGU2ZmYyNDZjLCAweGFjYmYwYjc3LCAweDgzZGEzZmRmLCAweDdkZjkxOGZiLAorCTB4MWUxNWZmNTIsIDB4OTc0YTRmNGUsIDB4ZDQ4M2ZlNDIsIDB4ZTNjOTM4YjIsIDB4N2JkZTU5YmYsIDB4ZTQxMzNkNjAsCisJMHhiZmYzYWMzZCwgMHhkOTM0NWYyMSwgMHgzMjQ2YzdlMiwgMHhlMjBiMGZhMiwgMHhkMGVjZDJjZCwgMHhhZDY1M2Y1MCwKKwkweGJmMTVmNGU0LCAweDJhZmI0NGMzLCAweDgxZDdhZTRiLCAweDkyOGFlY2YyLCAweDMwMTMzNjk0LCAweDZkMjUyN2EyLAorCTB4ZjIwMWM2MjIsIDB4ZmRlOTRiNzMsIDB4ZmJhNzM1NzAsIDB4N2YyMzE2NzAsIDB4NTE2YjBlNWIsIDB4YjhiYjVlNDgsCisJMHgzMjZmM2VkZiwgMHhlYTgzYWQ3MywgMHg5ZWRjMTFhYywgMHgxNmRmMzJmMSwgMHg1ZGQ2OThiNSwgMHhjNDkwZmY0MSwKKwkweDQ4MGJkNDg3LCAweDNmMWYyODNmLCAweDNmNDQ2YzUyLCAweDc2NDJiNzRhLCAweDljZWE2YWE3LCAweDQ3MGVmZDhiLAorCTB4Yzg0NzEzNGYsIDB4YTdhNzNmZmQsIDB4ODkzZmZhZmUsIDB4MTg4ZjI2OWUsIDB4M2E4MjllOGUsIDB4MzZkNzkzZDEsCisJMHgzZjA5M2QzNCwgMHhjZmJmNzlmMSwgMHhiZmRjMDFjMiwgMHhkZDdjMGI2NiwgMHhmYzRlZTQyNywgMHg5YmY0OWIwZSwKKwkweDk5ZGYzODJiLCAweDM2OTliZmEyLCAweGZkNDU1NDQ3LCAweDljN2YzM2UxLCAweDE4N2RmZmU4LCAweDI3ZGM1ZmVjLAorCTB4MGVmZGEwZTUsIDB4ZjM5NWM4ZTUsIDB4MTYzNzVhNzQsIDB4NDE3ZjQxZWIsIDB4ZDIzNmM1ZWEsIDB4NjI5YWY3OGYsCisJMHg2NGFmNjg0NSwgMHg4ZmQ5NmY4ZiwgMHhiNzNkOTE3NCwgMHhlZDI1NjJhYywgMHhhOGRjZjJmZiwgMHg5MmI3NTAwZiwKKwkweDc1NTk3NDFmLCAweDA0ODhkNGUwLCAweGRmMTBlMTdiLCAweGU1ZGYzNGNmLCAweGJiZDNlN2E3LCAweDFhMTA3ZGI5LAorCTB4Mzg3YjIxNmQsIDB4NzE4NGE1ZDQsIDB4OTYwMzliOWQsIDB4NmI0MWRhMDgsIDB4MDk1ZmVlMTUsIDB4M2NlYmIwNmYsCisJMHhhMGFmYTNlZSwgMHg3NDBmY2ZiOCwgMHg0ODhhMTcxZSwgMHg4ZWNmNmZmZiwgMHgzNWJkMjNlZiwgMHg5MWVmYzgzOCwKKwkweGY4M2EzZjFjLCAweDFmYzdjYTg1LCAweDhlZmM2OGMzLCAweGVhYWYxZTcyLCAweGZlZTc1YWI4LCAweDFkN2ViMTE1LAorCTB4NmUzOWZjYjMsIDB4MThkNjA3YjQsIDB4ODVjNjU5ZjksIDB4MTg4MDljZmEsIDB4N2FmZTZmMTgsIDB4YWU0M2FkM2IsCisJMHhkMmNjZjFjYSwgMHgwY2ZmNWM2ZCwgMHg2N2U0MGI5NiwgMHgxNjJjOWFjZSwgMHhmYTZmYzQ0NiwgMHgwNTI0MWNmOSwKKwkweGJiNDU3M2Q2LCAweGNiMzkzNzhjLCAweDc5Njg0NTAyLCAweGI3ZTliYmJmLCAweGJkMDBhNGFmLCAweDhlOWZhMTY2LAorCTB4NjhjMmNhNmYsIDB4OTg3ZjkzZjcsIDB4ZmM3ZGM5ZDcsIDB4YzkwMDA5YTAsIDB4NWNmZmQ2YzUsIDB4NDI2OTczNTcsCisJMHhmMDNmYmM1ZCwgMHg2YjZiZGNmZCwgMHhmNmVmNDhmMiwgMHhhMGQ4MjNiNywgMHg2ZmRkNjU4ZiwgMHgzNTFlMzFkNywKKwkweGJkODFhZWQwLCAweGY4NTJlYjZiLCAweGI1Yzc2MWY3LCAweDNjMDY4ZTU3LCAweGZmZmM3MjI4LCAweDdmNDdlYjVjLAorCTB4YzYxOTlkYTEsIDB4NGI0Zjg0NGIsIDB4ZmQwY2RmZWEsIDB4N2VmOTc0M2IsIDB4Nzg0YWY2YmMsIDB4NTkwYWMxZTEsCisJMHgxZmFkNjZiZiwgMHg2Y2NmYmJlMCwgMHgyYTUwOGZlYywgMHgxYzhhYzdiZSwgMHg2ZGFjZDZlZiwgMHgwZGU3ZDZlYiwKKwkweDI3NjAwNWQ4LCAweDM5OTExYWVjLCAweDdlYWMxZjYwLCAweDg1ZmI2NjdiLCAweGViYWE1NjMwLCAweDVkZWEwYjUzLAorCTB4MWU0M2U3YTksIDB4NjQ4ZmVjODUsIDB4ZTQyMDNkN2UsIDB4NTcyY2RmYzMsIDB4ZjQ3NjQxZjUsIDB4NTcyNDExODEsCisJMHg0YjIwNjY3YiwgMHhlNDgzZmVjMiwgMHg4MDc5Njg3NiwgMHhmNjA3M2RhMSwgMHhkYmMyMTc0OCwgMHhkM2UzZmM3YiwKKwkweGVmN2I0MjJmLCAweDFiMWZkZmVjLCAweGI3N2JlM2E5LCAweDM3YmI0NWNlLCAweGJhMjM0ZTc0LCAweDIzNTNlZDBkLAorCTB4NGRhZGQwMGEsIDB4NzFlODBiZjAsIDB4N2E0ODBiOGEsIDB4NzQxMmVhNWEsIDB4OGMzMzBlZWEsIDB4NTIxYzc0NzMsCisJMHhiZTg5ODUyNiwgMHg4M2FlMGE1YSwgMHhmOGY3Y2NiNSwgMHhlNDM4NDI1ZiwgMHhkZTc5MzJiZSwgMHhmN2MxMWViZiwKKwkweGVhZDJhMTBmLCAweGZmZDgyNWFkLCAweDlkYTE4NTZlLCAweDQ0ZjRhZWIwLCAweDM3ZGEwMmQ2LCAweDMwYjU5YmJkLAorCTB4NWQyNWJiZTEsIDB4OTczZTEyMGYsIDB4ODkwZjMzZWMsIDB4ZTA4ZjVmYzcsIDB4NjdlNmRlNzEsIDB4ZGNhM2Y2OWYsCisJMHg5MGEyMjhmOCwgMHgyMmQwNjg0YywgMHhiZDQwYTc2YiwgMHg5Njg0YzFhMSwgMHhjYzhjYWIyMCwgMHgxY2UyOTFiYiwKKwkweDA2MzYxNjc1LCAweGVkMDQ3N2U2LCAweGRmNjM4NDI2LCAweDcwNTNjMzM3LCAweDgxNGZmMGRlLCAweDhiMDJkYjQ3LAorCTB4YWI2ZTlmNDgsIDB4NGUyODM5YjMsIDB4NTZmZjNhNTQsIDB4YzUyYjgzYzIsIDB4NTc1ODc4OGYsIDB4ZTM4MzlkNWEsCisJMHhlMTlhY2YzNCwgMHhkODA4ZjhhMiwgMHg3Y2RlZDg3MSwgMHgyZmM4YjdkNywgMHhkNzVhZTEyNCwgMHgzYjQ1YWU2NSwKKwkweGI5ZWMwYWE3LCAweGZjZWUwMGE3LCAweDdkNmE2YjhjLCAweGQ1MjNjN2MwLCAweDNiYjdlNWZkLCAweGI0M2U1ZTMwLAorCTB4MjY2ZWZmMWMsIDB4MjUzNjhiYTcsIDB4MjU0NmZlMTAsIDB4YTI1OTQxZjksIDB4OGJiMGIzNWYsIDB4OGQ5ZjhkZGIsCisJMHgyYmUyMThiMCwgMHhmNmUwOGQ5ZiwgMHhkOGUxYTVlYywgMHhjMzlmMjQ3NCwgMHhkYTJhNGY1YSwgMHhmZmU2MjFkMywKKwkweDJjY2ZmNzA0LCAweGQwZjdkMGUwLCAweGU0Nzk3MTNhLCAweDNmYzlkNTY5LCAweGRjZjRmMzY2LCAweDVmYjYyMTdiLAorCTB4ODVmZWQxYWEsIDB4ZTAwZjNkNjksIDB4M2Q2YmJkYjgsIDB4ZjA0Yzc1YmUsIDB4MmFlZmQ2MDEsIDB4YmQ0ZjdkYTMsCisJMHgzMjc4YTgyNywgMHg3ZDcwYmNmOSwgMHhhYWJkOWY3YiwgMHhkMjg4ZmQxYywgMHhhOGZiNWFlZSwgMHg1YWU2ZjQ5ZCwKKwkweDJkN2Y3ZWE3LCAweDY5ZGZkM2NhLCAweDE2YzAxZjNjLCAweDdlODc0ZDhmLCAweDgzM2VmZTk2LCAweDhmNmI1ZGM2LAorCTB4MGZmNWM1YWMsIDB4YmRhOTU0ZWYsIDB4NjA3NDExZDgsIDB4YjliZTRiYmYsIDB4MmJkMjIyNjUsIDB4NTA0YTQ0NzMsCisJMHhlZDNkOWE4ZiwgMHhiNjE4ZTkwYywgMHhiMTJmZTQyYiwgMHhlMzBjMDI3OSwgMHhmM2MzZDNjNCwgMHg0NWY1MDUzNCwKKwkweDFkMzMzZDkyLCAweDVmYjQ1NWZkLCAweGI2YmY5MGYxLCAweDE4YzdmMDVhLCAweDM2ZDM4MmEwLCAweDNmYjY4NTYyLAorCTB4NmZiMDE4OGYsIDB4MWNlM2Y5NWUsIDB4YmI0YTFmMGQsIDB4ZmVlMzY0YzcsIDB4MTRiYTlhZjMsIDB4NWIyZGY2ODYsCisJMHg0MjY2M2YxNSwgMHhjNjI3YmQ3ZiwgMHhlYTZlMGVkMCwgMHhhNjljNjg1NCwgMHhiODJkMjdkMiwgMHg5M2E1Yjk2ZiwKKwkweGVjNDg3N2YzLCAweDA1N2YwMDMzLCAweGYxOGM1NzY4LCAweGEwN2IwYWE0LCAweDU4MzlmYjhkLCAweGM0NDhkOGVjLAorCTB4M2Q3YzYzZjMsIDB4MTJmNzgzMTksIDB4YWQ4Y2FiZmMsIDB4ZjQ0MGYyZTAsIDB4ODY3MTExNjcsIDB4MDI1N2UxMjYsCisJMHgzZWVkNDg0ZCwgMHhlZjViYjQ4ZiwgMHhmM2I3ZmQxNiwgMHg1OWJiOGM1MiwgMHhjNDU1Zjk4OSwgMHhmMDYyYjk2YiwKKwkweDJhZjJjYjg3LCAweDkxZmE3ZGYxLCAweGRmZTQwY2Y4LCAweGZhMTdkMDM4LCAweGIzMmFiNjk3LCAweGNjMjlmZDZlLAorCTB4ZjFhNGViNmYsIDB4YmNjMTM0M2UsIDB4MDU2YTRlNDAsIDB4MDQ1MjA3M2UsIDB4N2Q3NjU3YmMsIDB4ODZlOTAzMzIsCisJMHhkN2UyMzJkNSwgMHg2YTY5YWVlNiwgMHg2ZmM3ODM5MywgMHg0ZWM4NWVkMCwgMHhlZDg5ZDk2ZCwgMHg5Mjk3MzdkOSwKKwkweGM4ZjhjNjdlLCAweDM1ZmU3ODZjLCAweDFjYjNlNzBmLCAweDc5ZDdmNzA3LCAweDYxMTcwZWVmLCAweDQ4ZmQzM2JjLAorCTB4ZTI5ZmQ2ZTAsIDB4OTBhNDE3ZjgsIDB4ZDYxYjM1YmYsIDB4ZTU0MTk5YzYsIDB4Nzk2ZmY0MWEsIDB4YTg4YmY5NTksCisJMHhmNTMzYmQ3ZiwgMHhjNjQ3ODQwYSwgMHgzODJlMzBmNSwgMHgzOGU0OGNhYiwgMHg4YTdjMzNkNSwgMHgzNzk0MTc3ZiwKKwkweDBlMzRkYzc4LCAweDExNmFlZmVjLCAweDcxMWU3YzVlLCAweGQxMTljNDBjLCAweDYyZTM4NzZmLCAweGRlY2IwZjFjLAorCTB4N2U0NmE4OWMsIDB4N2JlN2QwN2UsIDB4YWNiYjRlOTAsIDB4Y2NkN2M0MmUsIDB4NDJkZjk3YWUsIDB4YzZkMzNiN2QsCisJMHg5YWVlMjkzYSwgMHhkM2M0Yjc2NCwgMHgzYTQ0MTliZSwgMHg3YTczM2JlZCwgMHhkNzA4M2RjNywgMHg5NDdkMDc3NSwKKwkweDhmNjQ5MmNmLCAweGI3Mzk3MTVjLCAweDkzZGEzZmNiLCAweGVjM2YyM2FhLCAweGVjMWI3MjEyLCAweDc5N2YxZTQ3LAorCTB4OTMyM2VmOWMsIDB4ZjZlZmM4ZWQsIDB4MjNiNzJmYWYsIDB4Nzc3ZmViZmIsIDB4MTdjMzkyM2IsIDB4MjhmM2MzZGUsCisJMHg4OTBmN2NhNCwgMHhjMzVmNWY3ZCwgMHg1ZmQ0MzRkOSwgMHhhZWQyM2QyYiwgMHhkOGY3Y2E0ZCwgMHhiYTNkZjIyZCwKKwkweGQwZjdjZTg3LCAweDBmZjhmMjc2LCAweGVlNDk0MTg2LCAweGFlMjIyZGJhLCAweDQzY2VmN2U1LCAweDg0YmI4N2ZmLAorCTB4N2IyYmMwZTQsIDB4Mzc0OGMzNTMsIDB4NjRlZDNiNjcsIDB4NGI2ZTY5OTcsIDB4N2I2YWUxMTQsIDB4M2NjMTFhZGEsCisJMHhlMDQ1MzY4OCwgMHg1Nzg4OTBlYiwgMHgyYzFjNDQ1OSwgMHg4MzQ3NDRhMywgMHg0MDI1YTBlMiwgMHhhNGZjM2Y3MiwKKwkweGQyYWJjNzk5LCAweDg1ZWU4ZjIyLCAweDFjZTFlMzdhLCAweGQ0NjJjZjExLCAweDU0ZDlmODdmLCAweDhhNjM3N2MyLAorCTB4MzdmZDhlOWUsIDB4ODYwOGZiZmUsIDB4MTgzZWFhNzEsIDB4MDlmOWQ3MGYsIDB4ODdiYjcwN2IsIDB4N2ZiYzVhZTIsCisJMHhlNzU1ODJmNiwgMHg4OTY4YjNmMSwgMHgzM2IwZjAxYiwgMHg5M2JmZWRjMiwgMHgwNWE4YTZhNSwgMHg4OTkzYmRlNiwKKwkweDMyZjU5ZjNjLCAweGQ5ZTdjNWFlLCAweDhmMjQ2MWI3LCAweDgyMzFhMGNiLCAweGRjYjViMmZiLCAweGUzMmY1NDVmLAorCTB4MWZiOTg3NTUsIDB4YTVjNDVlYWUsIDB4ZjQ1ZWNlNGUsIDB4YjQ1OGE2MDgsIDB4YjhiNTJkMjksIDB4ZGQ3Y2ZiNGYsCisJMHhkZjlmZjIzNCwgMHgyYTJjZmY3OSwgMHhmZDE4ZDdlYiwgMHgzZmQwOGJmZCwgMHgzZjEwM2M1ZiwgMHhmOWY3N2U5NiwKKwkweGY2ZTE2N2NjLCAweGQwZmY4MGYzLCAweGJlOGNmNjA0LCAweGZkNDZhYjQ2LCAweDc3NWNjNDU5LCAweGMzZDAzZWEzLAorCTB4NDMxNzdhYjAsIDB4MWEyNTA2ZDksIDB4MTk2MDBhZjEsIDB4N2FkNmQzZGUsIDB4NTdiZDcwNTIsIDB4NmY0ODk5YjcsCisJMHg3ZTRjZGI4NSwgMHhjYmQyNGY3YywgMHg2N2FlMWVhYiwgMHhiZDcwZjVkZiwgMHhlMDhlYTgwMywgMHgzMzZjYjIzOCwKKwkweGU4ODM3ODhiLCAweDQ1MzMwNTZmLCAweGJjMjkzNGIxLCAweDZhZDJlZDVjLCAweGIyZGZkMjg3LCAweDhiNzMzNmJmLAorCTB4Y2RkYTFhNmQsIDB4NzdmMjI2ZjksIDB4ZDdmMTZlN2YsIDB4YTMzOGJmOTEsIDB4Y2RhOWQ2ODQsIDB4OTZhNmIyZDksCisJMHg3ZDJmMTNiNywgMHhhODA3OGY2ZSwgMHgxYjhkMzJmZCwgMHg0MGNmNGM5NiwgMHg4NzgyZmE3OSwgMHhmMTkyMTdjNywKKwkweDU4ZGRiMGI2LCAweDJjYzM4ZTRmLCAweGY1ZWIxODg5LCAweGE3MzYzODJjLCAweDEyMGRjNzk4LCAweGY0MjBiZjlmLAorCTB4OGFlYmU3YzQsIDB4MTY3ZGJlMDQsIDB4ZmU3MmJiOTQsIDB4ZGUzOGYyMmIsIDB4MWNiY2Y5NGMsIDB4ODc1ZDVmOTUsCisJMHhlMzBhMzA3NCwgMHg3MjU4NDVjYSwgMHg4NGNjMmFiZiwgMHg5OTc1MWZlMCwgMHg0OGZhMjE0NywgMHhjZGNkYjc4MiwKKwkweDk2YmMyOWU5LCAweDVhZmYyMWZiLCAweGZlZTE5M2Y4LCAweGY4MjU5M2QwLCAweGI4YzVlZmQ4LCAweDQyY2JiZDY1LAorCTB4ZjVmM2U4NzEsIDB4MWE2NGE0OTcsIDB4ZjVmZGI3ZjcsIDB4OTZmZWZmYmYsIDB4YWFkN2U3ZWYsIDB4NDVjNmJmMjIsCisJMHg4YmJlNjk3MiwgMHhlMmE0ZTVjZiwgMHhlN2M1MWJkYiwgMHg3MDFmYjAwZSwgMHgwYWQ1NmIxZSwgMHhiZmQzMjM5NCwKKwkweDM0NzlhMGU5LCAweDgyMzkwNjFmLCAweDNkZTVhYzcxLCAweDliZDdhODA1LCAweDMwNGE3YmFiLCAweDVmOGM5MzVlLAorCTB4ZjI5MzU2ODQsIDB4ZWY5YmRlMGMsIDB4ZGEwOGZkODEsIDB4ZjE4YzZiMGQsIDB4NTVmMWMxYjgsIDB4MjY2NjYxN2YsCisJMHhlZTRlN2JlZSwgMHhkN2Y1MTk3ZiwgMHgyZmU5M2I3ZSwgMHhhZDE3YmZmOCwgMHgxNmNmZmZjOCwgMHgzODhiNWM5MSwKKwkweDJlMzE2MzgzLCAweGVlODk0YTE0LCAweGRhMTE3MWY4LCAweDZhOGVkYzMxLCAweDQ0ZWViNmVhLCAweDViN2U3MTNiLAorCTB4ZmYwZjdjNDIsIDB4ZWYxOGRlYjMsIDB4YzgzMjZiNjMsIDB4OGMzYWNlZWYsIDB4NGUxZTFiY2YsIDB4ZmM1MDZlZmEsCisJMHg2NWQ2OWRhZiwgMHgwZTM4MjViMywgMHgxMGY0MWRmOSwgMHg1OTljMWRlNSwgMHhiZWI4NjI2MiwgMHgxMTZmYWFmNSwKKwkweDc2MzNhOTJhLCAweGM2N2U3ZGEzLCAweDQ2NmJkN2M5LCAweDNlM2ZkNGE2LCAweGViZmFiZmIyLCAweDU3ZDlkNjgzLAorCTB4NmY1Y2ViODIsIDB4N2VjNGMxNjIsIDB4NjE5ZDcwOWEsIDB4M2FjNTFiN2QsIDB4ZTJmYTc5OWYsIDB4OGZlNzVjMTIsCisJMHg4MjVjNWZmNywgMHhkY2Q5YmNlYiwgMHgyOWJlNDdlZSwgMHg0MWFmMDc3NSwgMHgzMmJhOWNmYywgMHhlNjE1ZjY0MCwKKwkweDlkMWYyMGVmLCAweDk0ZGUzZDJmLCAweGZkMzc4ZjQ0LCAweDJlYjFlOGUzLCAweDU5MzIxZjMxLCAweGUzZjQzNjNmLAorCTB4M2QxZmE4Y2IsIDB4ZTUwZjNkMTYsIDB4ZjU5YjdjYzEsIDB4ZmM0OWVhMmYsIDB4Njc5ZmQyMWIsIDB4ZTNmZjkyYjMsCisJMHhkZDNmMWZmMCwgMHhkZDE4Zjk0OCwgMHhiMjI3ZDkyYSwgMHhiMDVhYzNiZiwgMHhjM2EzZWQxOCwgMHg2MTdkNzk2ZiwKKwkweGQzZmVmODY1LCAweGI1ZTVmZDg1LCAweDU5ZmEzMGIxLCAweGRhNDBiZWU0LCAweDc4ZjJjOTk3LCAweDAzY2Y5OGI5LAorCTB4OGNkZmZlOTksIDB4M2NlMjFiZjgsIDB4MjBkYzdmZDIsIDB4M2U0NWIxZGUsIDB4NmVlZjc2ZTUsIDB4YzdmZGM3YzUsCisJMHg2ZTRmZTQ5ZCwgMHg4NWNmMzQzZSwgMHgyMjBmZTJmZSwgMHhmY2RjN2ZkYywgMHg4ZmY5Mzk3NCwgMHg4YTVlNDQ5NywKKwkweGViMTkzZTYyLCAweDFmYjg1YzU2LCAweGRkZmJiMjU5LCAweDkwMDNjYzM0LCAweGU3ZDg1ZWZiLCAweGY5NDk5ZmRlLAorCTB4ZWZmZGM2MzUsIDB4Njk5MzkxMDcsIDB4NzAwMDM3OTgsIDB4YTc3MDhmYmYsIDB4YTQxNmUyN2EsIDB4ZmZkODY2ZmIsCisJMHhiMzYwZGU2MSwgMHhmZDg2M2YxNiwgMHhkOTE4N2IzNiwgMHhjNjVkOTUwNSwgMHhlZjhjYTBmZCwgMHg0ODU4MGI2ZSwKKwkweDU2ZWI2ZWVlLCAweGIzYWYyODIyLCAweDNjYTJjMTJjLCAweGNmMmM2YmQ0LCAweDgwNzUzYTc1LCAweGZlOTkyMmNmLAorCTB4MDc3ZTkwMTcsIDB4NWRmZWVhZTIsIDB4YTdmZTk3NTgsIDB4NDRlOWFkOWUsIDB4ZTY2NjNkYmYsIDB4ZGIzY2ExNzcsCisJMHg0Y2YyMTRlYSwgMHhkYmY2ZjkyMywgMHg3NTkxZGQ4NywgMHg2ZmMzNzYwOSwgMHg1ODRlZGMyMywgMHgzNGMxZjMyMiwKKwkweGJkNjBkNTE2LCAweDFmZjFjZDE2LCAweDc5NDZmNWM3LCAweGY3OTI0ZDFmLCAweGFmMTk3NTg5LCAweDQ5NDU4NWJmLAorCTB4OWViMTM1MmYsIDB4YzRiMGJjZmUsIDB4ZjllMzkyZjcsIDB4ZjQzNzA3MTgsIDB4NzVjYTVhYzMsIDB4ZTRkZDkzZjQsCisJMHhhYjljNTFmMCwgMHg2MzU2Y2ZlYiwgMHg5YmVmOTg3YiwgMHg1NTk2MWY4MSwgMHg1Y2FmZDAwYywgMHhjZGJmNDkwNywKKwkweDZhMWQxZmMyLCAweGU5MGFiMTM4LCAweGI4YTVkNDM3LCAweGU4ZGQ3ZjcwLCAweDA4ZGJmNGUzLCAweDliY2MyZmZiLAorCTB4ZDY3N2U2NGQsIDB4MWQxM2NjNjksIDB4ZGQ3ZmZmOGUsIDB4ZmY5Yzc3Y2YsIDB4OWNhYzNkN2YsIDB4NWJmOGM3ZmEsCisJMHgzZjk3ZWZkZiwgMHhmY2U1ZWY5YywgMHg3ZmJlZmZhNSwgMHhlNzBhZGQ5ZSwgMHgyNTc5YTRjYiwgMHhmZDkzNWJlZiwKKwkweDc5ZGY3MmVlLCAweDhiZjBmMmJlLCAweGYxN2M3YzI0LCAweDcwYzdjNjBmLCAweDZiMjUzMGYyLCAweDcyNDJmZGU4LAorCTB4OTZhZmUzNWMsIDB4ZjhlMGZmODcsIDB4MWU4NzIzYzYsIDB4YTg4MTMzNGEsIDB4ZjYxNDUyNTgsIDB4NmZjZWJiNzIsCisJMHg1MGNmMTc4OCwgMHgzNzFlN2UxZCwgMHg0NTNlNzk1NSwgMHg5ZjVkZGM3MiwgMHg5Y2VlZTIyMSwgMHg1YTdhNWY5ZiwKKwkweDEyNmFmNWE1LCAweDQzYTZlMWYxLCAweGRhYmUxZjRlLCAweGYxNGM1OGUwLCAweGU5ZjhlNGQ5LCAweDA2N2ZiNjUyLAorCTB4MWM3MjUxMmUsIDB4YjhmOTExYjUsIDB4YTllM2NiZjgsIDB4M2QzOTY1MTcsIDB4NTY3NDlmMjQsIDB4YzkwYTc5ODQsCisJMHgzOTJmNWE3OSwgMHg0YzExMWQzZSwgMHgzMmVhZWY1OCwgMHg0MTBjMDhkOCwgMHhjYzJkMzZkNywgMHg0ZjllMTIzMiwKKwkweGY0ZjZlMmNiLCAweGM4OWYyMjRiLCAweDA1ZTdlMTZiLCAweGZhYTY3M2VlLCAweDM1ZTMxZjcxLCAweDdjYTc3Y2YxLAorCTB4ZDY3YTYwNGYsIDB4MDJlZjk0MjQsIDB4YzBkZWNmOWYsIDB4NDc5NzgwNGMsIDB4NGYyNDlkY2MsIDB4MWYwZTRkYzIsCisJMHhjN2U5M2ZjYSwgMHgxMGVmZmQ5MSwgMHhhNWYzOGI3MSwgMHgxOTY3NmZmMywgMHhmZWJmYmNlOSwgMHg4NWZiZTI0ZiwKKwkweGRhZmZiZTkyLCAweGMwMTZkZGI4LCAweDE4MWY4MThkLCAweDE4NmJlZmQxLCAweDRjMWEyYTY3LCAweDMzZjVjM2I3LAorCTB4Y2IyZWZkMWMsIDB4NDU5ZWRjMGEsIDB4YTQ0ZmYxNzgsIDB4OTRmM2U2ZmMsIDB4ZjE5NWE5MmYsIDB4NjIyZmU4OTMsCisJMHhmYTNhYWMwNywgMHhmY2UyNmQzNywgMHgyMzlmNWIwYiwgMHhhYWJlZWJmNiwgMHhjZDk3OTQ1OSwgMHg3M2M4OGZjZiwKKwkweDhmZDljMzM2LCAweDlmZjlmYjFiLCAweGY1ZmQ4ZmRiLCAweGM4ZmQ5M2JmLCAweDljNzY4MWRjLCAweDdlNjlhOWU3LAorCTB4ZWQ1ZmZiY2EsIDB4NWY3MWY4MDQsIDB4Yzg3NWE4ZjgsIDB4ZGNmMjJjZjMsIDB4NWRmOTk3YzUsIDB4Y2RjM2Y2ZjYsCisJMHhiMGVmNmFlOSwgMHhlNTYzZmY3MCwgMHgzNGZmOTNlNywgMHgzNGZiZjlmOSwgMHhkZjBlYTNmNCwgMHg3YmU0NTg0ZiwKKwkweDllMjJmY2M2LCAweGY4MjU3NmM2LCAweDllMzE0M2I3LCAweDgwOTJmN2FmLCAweDQ0N2YzZTU3LCAweDZjZjRjNWU4LAorCTB4YTc1YzUxZmYsIDB4NmNkYjhmOGYsIDB4OWU0YzFkMmMsIDB4OWIxNzJlNGEsIDB4MmY4YTBlMDMsIDB4YmNmMjc3MzQsCisJMHg4Y2U1ZTY5NywgMHhmYTMzNzdlNCwgMHhhZmQwY2I0ZiwgMHhiZGExOGIzOCwgMHhmODIzMzUzNywgMHhmNTdlZmMzMywKKwkweDlhYjA4ZWRiLCAweGQ5Zjc3ZThlLCAweGRlYmJlZDBjLCAweGE5ZmViY2UzLCAweDZjNzNmODNiLCAweGExZWYyZDBmLAorCTB4ZWNjNzQ2NzgsIDB4YWFlZjI4OGYsIDB4YWU5ZmNmZWEsIDB4NzgyNGFkYWEsIDB4YjFlMDhmYzksIDB4N2NhZGNmMWEsCisJMHgwZmUzYzU5MSwgMHhiZjQzZmNiMiwgMHg1ZjkzZjEzYywgMHg5ZTA2ZTNmZiwgMHhmOGYyMWQ5ZiwgMHg5MDhmZTg1ZCwKKwkweDNkNTRmMTdlLCAweGU2YTY3ZTQ2LCAweGFiNjhkYzAzLCAweGQ4N2NmOTUyLCAweDllODhmM2Y3LCAweDJiNGMwZjlhLAorCTB4ZWIyOWZmNDcsIDB4OWRhMzk3YjQsIDB4MDcyYmY1NWIsIDB4YmUzZWY3ZWQsIDB4MjRmMjk3MmIsIDB4MGZjMTNkZWEsCisJMHgyYjNhM2U1MSwgMHg1ZGEzNTcyMywgMHhhMGUzMDg1YSwgMHhmZWYxZmJiZCwgMHg2ZTExY2JhYiwgMHhhMzM2ZmYyOSwKKwkweGRmYzYxY2ZmLCAweGM3ZmEzNGVjLCAweGQ5ZTc4ZDk5LCAweDRmOWJkZDJmLCAweDQ3NjJjYmZiLCAweDZmZWM1M2YwLAorCTB4MTFjMzlkYjMsIDB4YTNjZTIzZGUsIDB4MzI3OWJmMDgsIDB4Y2ZiZTRiZmYsIDB4NGUzNDRkNTYsIDB4MTQ2ZGI3ZjYsCisJMHg2MTcyOTcyZiwgMHg2ZDA1OTliMywgMHhlNGYyMDNjNSwgMHhmMjJlOTY3OCwgMHg2MzVlNDQ0YywgMHhhNzllMmNmNywKKwkweDhmMGVlYTIyLCAweDgxZjNiZjMxLCAweDIzOGYyYmNjLCAweGI0YjNjNzNjLCAweGU2MWY5NmFmLCAweDQwMmY5NDE4LAorCTB4MTg3ZTYyZmQsIDB4OWM1ODA1YzUsIDB4ZTdhOTJkZmMsIDB4Y2EzZDFkYjgsIDB4NzI3YTIxNjUsIDB4OWM1MWRmMDIsCisJMHhlZDA5ZTgwNiwgMHhiMWUzNGJmOSwgMHg2YjllNzhlOSwgMHg1MmY0NDc3NCwgMHg3M2UxZjNjNCwgMHgzNjkzYzIyNiwKKwkweGQzOGEzNWViLCAweGJjN2MyYmE0LCAweDZiM2RmNWUyLCAweGM2MWZhMmM3LCAweGI4NjVlNmY1LCAweGFiYmI3YWE0LAorCTB4MzUzYTUxMWEsIDB4NGQ5ZjkwMjMsIDB4NTI5NjhjZmIsIDB4YmZmYWFmMWMsIDB4ZjI5ZjNjY2MsIDB4MTdmOTJhNTAsCisJMHgyOTFhMGEzYSwgMHg2ZGY3YjI5ZiwgMHg0ZTNjZTFhYiwgMHg3NzY2MTk3MiwgMHhhOGU0ZmU1MywgMHhiYzUwNWZhZSwKKwkweDE5NDA3OWMwLCAweDcyNzYyZjMyLCAweGQ2ZjA4M2I2LCAweGEwY2Q4ZTFjLCAweDNkNGI5YjFjLCAweDQzYjU2NzI0LAorCTB4YjUzOGEyYmYsIDB4MDk0MzU2YjYsIDB4N2VjY2RhYzQsIDB4MGI0MzllMTMsIDB4ZWZlNDYwYWYsIDB4MzJlMWQzMWMsCisJMHg4YTE1N2FlMSwgMHhjM2JlOThmYywgMHhhNDE4OTg3ZiwgMHgwZjhjOGFmZCwgMHg5MzdlNzg0NCwgMHhlZTE1NjdiOSwKKwkweDNkMTViNGMzLCAweDNkNzE4Nzk3LCAweGNkNGRiODBlLCAweGJjNWZkODY1LCAweDg3MmRmYzk5LCAweDRmZDIxOTUyLAorCTB4ZGRmMTU3NjEsIDB4Yjg1ZWExNTMsIDB4YjBmMTQ1YzYsIDB4Mjk2ZWU3YmUsIDB4Y2MyYWZmMjQsIDB4ZjMxMGNjNzMsCisJMHhmMzM2Y2EyYywgMHg5YWE1MGZmZSwgMHg5YjY5OWY1MCwgMHhkNTQ3MGY5OCwgMHgwNGQ1NTlkYywgMHg4NzUwODNmNywKKwkweDNjOGE0NjdlLCAweDQ1M2YxOTU1LCAweGE5ZWExNDNmLCAweGQ3ZTBlY2Y0LCAweGZmYjYzZjMwLCAweDE0YjJkMjFjLAorCTB4ZTM0OTBlN2UsIDB4YjJlNzEyZmUsIDB4ZjNjNzFmYjcsIDB4ZmMyYzNiM2QsIDB4YzM5MWU3OWMsIDB4ZGY5MzY2MTMsCisJMHhlMGE2YWQ2ZiwgMHhlNmVlN2MzYSwgMHg2NjM3OTRmOSwgMHg0MmU3MGM5YiwgMHg4NDdmZjAwNiwgMHgxZDQ3NTZmMiwKKwkweDZiZDcwNWZhLCAweGFmZjYxNjMwLCAweDY4YmQzOTk5LCAweGQxM2IzZDZiLCAweDJkMzhiOGJmLCAweDk3YmE3OTQ4LAorCTB4OGE1NTQ1YjUsIDB4M2Q0ZWI5OWYsIDB4ZWMyN2FiNTAsIDB4M2Q3MGI2NzMsIDB4ZWY4ZmJjZDMsIDB4MzVmNzkzY2IsCisJMHg2ZTVmYTY1ZiwgMHgyZGRhMzZjYiwgMHg5MjdmZjVmZCwgMHhmZTgzZjJkZCwgMHhmZGM2ZmZmMSwgMHhmM2VlMzMwYSwKKwkweGU0OTdlZDkyLCAweDNiMjBkZDdkLCAweGUxYmZhOTNjLCAweDhmOTkxOGVjLCAweDBlMzAzZDUyLCAweGQyOWRhN2I3LAorCTB4ZjIxYjBhNGUsIDB4ZTIxZGFhNzUsIDB4ZDhjZGExN2MsIDB4NWMyM2U1ZmYsIDB4YmY5OTVmMzQsIDB4NWY1MmI1OTMsCisJMHhmMWZhNzk4MSwgMHhkN2YyMzAxZiwgMHg3MGEyM2NjOSwgMHgwOWY3Y2YzNSwgMHhlZTc0NmM5YiwgMHgyOWRhY2JkMCwKKwkweDhiMjQ2ODdmLCAweGQzZjkwYTJhLCAweDZkN2NlODdhLCAweGMxMTFlNjM2LCAweDQ3YjJlYjc3LCAweDk5ZGJiZjUxLAorCTB4ZjI0YThkNmYsIDB4NmUxMDU3NTIsIDB4NTA5ZmU2M2IsIDB4ZWI2NDZhYmUsIDB4M2FlNzFjMjIsIDB4Yzc2MzhkMDcsCisJMHgzMDhiOTNmYywgMHgxNWJmYzA4NSwgMHgwNmY0ZWJlNSwgMHgwNWM4NWYxZSwgMHg5YmY0OGM3ZCwgMHhhMWQzOWEzYiwKKwkweGExZTc4ZWJkLCAweDk5MTMzY2M4LCAweDUwZjEyMjE3LCAweDNiOWJmMDJkLCAweGNhMTE1MTc2LCAweGYwNGFiNWMxLAorCTB4OTlhZTcxNTEsIDB4NGUwZGZmY2IsIDB4ZWMxOTVlNzEsIDB4NzljMGNmNmIsIDB4ZmJjNjNlZTQsIDB4Zjg5ODM3MGYsCisJMHhhZjM3NjQ3OSwgMHhmOWQxOGM3NywgMHhmODJmYTA3OSwgMHg3MjhlYmIzOSwgMHgyODMyNzc5ZSwgMHhhZjA5MjUzZiwKKwkweGM5ZTUzZjMyLCAweGU0MTFlMGI0LCAweGNiZjNlNDk3LCAweGQ2MTI0ZTkyLCAweDZmNDdjZThmLCAweGZhZWRjNDNiLAorCTB4Y2QwYjA2ZWEsIDB4MzVjOTZmYTMsIDB4NWJlYzk3ZTQsIDB4ZmZhODYyNjIsIDB4OWNhZGJiYWIsIDB4ZGJjNjkyZWUsCisJMHg1MTYxNjc1NiwgMHhkODhiNTdlYywgMHhmNWNhN2U1MSwgMHgxNmJiMzJmZiwgMHhmZDE0YjVkNiwgMHg2YjVhNDdiZSwKKwkweDM4MDUzYTJmLCAweGEwMWFkYTNlLCAweDc0YWVjZmIyLCAweGY5ZDIxN2FhLCAweGE5MjhiOWQyLCAweGY5ZjJkODllLAorCTB4ZTYwZTVhYjUsIDB4MTQwYmM0ZGIsIDB4YjdlNzk5MjAsIDB4ZWE5MzM0N2UsIDB4YjA3N2YxOTksIDB4Y2YxNmVhZmUsCisJMHhjMzkwMzRkNywgMHgzYmUyNjM3ZCwgMHhmZmZmNzgxNCwgMHhkYmM0N2Y3OSwgMHgxOTczMTY5MSwgMHg4N2ExZjc3YiwKKwkweDVmMWQ4NjY2LCAweDkxZmRkZjQxLCAweDljNzFlNzI1LCAweGM0ZDNiZDQxLCAweGM4YzU1NjdhLCAweDVkZjQyNDVmLAorCTB4NWU4Nzk3MjUsIDB4MjVlYzg1ODcsIDB4NjUzZmM4YWYsIDB4MTUxZjIyMzUsIDB4NWY1MDNiMjMsIDB4NzE0ZTUzOTksCisJMHgwZmQzMDc3YiwgMHg4ZjNkYjBjNCwgMHg3NjgyY2Y5ZiwgMHg2Mzk1ZmZhMiwgMHgyNmRhN2ZiOCwgMHg0OWU1ODJlOCwKKwkweDE4NGY1NGJmLCAweDIyY2FkYmU1LCAweDJmZGY3ZDM3LCAweDIzNTgwZjhmLCAweGM3YzYzZmRjLCAweDBiZTllMzdmLAorCTB4ZjMyNWJlMjgsIDB4ZTU3MzE5NmEsIDB4ZjI4MGI5Y2YsIDB4ZmJmNTBjNmMsIDB4YTYxY2UyZWMsIDB4NzNjN2NhZTYsCisJMHhjMmNkMmJlYywgMHgzNmY1MTVlZSwgMHg4YmM1MzA2NywgMHgwNDNlNDRmMywgMHgyYjhkZWU3YiwgMHg3Yzg2NWJiZiwKKwkweGY3ZTBlNjc0LCAweGJiNWNhMzQ3LCAweDgyZmIwMmNhLCAweGVlZDhlNDIxLCAweGZhYzcyZTFjLCAweDBhMzU4ZWNjLAorCTB4MGNlMzU3N2MsIDB4ZmFjMmYwOGUsIDB4NzczYTk1YmYsIDB4YTgyOTFlMDYsIDB4ODJjZDMxMWIsIDB4Zjg1ODE3NDcsCisJMHg5YWYxMTU1MSwgMHgzZGM0ZTgyOSwgMHhhZWU3YzM4NywgMHg3Nzk4MjgwOSwgMHhjN2NlZDJiYSwgMHg3ZTZhMGNjZCwKKwkweDljMTBmNzNhLCAweDcwMDc1Y2EzLCAweGJjYjg1NGFmLCAweGM5ZDI4Zjg2LCAweGQzZDUyYThlLCAweGEzNjExY2YxLAorCTB4MGFhYWQ3MzgsIDB4ZTc0OTcxYjksIDB4ZjVlZDE1MjYsIDB4MzViZWI3OWYsIDB4ZTAwNmQzNTUsIDB4ODc4ODg1ZmIsCisJMHg3OGM4YTJmZiwgMHhjYmRjYTIzZSwgMHhjZTU5NjJlZCwgMHg5MDBiZjU1NiwgMHhmMGFkNTZmZSwgMHgxMmYzMzZiYywKKwkweGY4ZTljZTdjLCAweDk1NjViNGNhLCAweDU1N2RhNzk4LCAweGZhMjU0YjZhLCAweDRmM2QwNzY5LCAweDA5NjVlNzg3LAorCTB4YWY3ZjJiNzUsIDB4YzAyZjE2ZDEsIDB4ZWQwYmU2NzMsIDB4OGY4ODQ5YzEsIDB4N2JiZGU3Y2YsIDB4M2I4N2NhMjcsCisJMHgwNzc4ZGY3MywgMHgzMGRlMjRmMywgMHhhZjkxMzkwYiwgMHg5OGVlZjU4OCwgMHg3OWViMDY5ZSwgMHhmMjJkZDhhYywKKwkweDBmNDQ2YzNjLCAweDNmNzJjNmM3LCAweGRiMWU3ZjY0LCAweGZhZjI4NTM4LCAweGU3ZTFjZTY2LCAweGIxNjVhZjQ5LAorCTB4OWVmODFlYjYsIDB4M2VkMDE1OWMsIDB4ZDkxMTcyNjMsIDB4ZGU0NTMzOTEsIDB4MDJiNzhjYzUsIDB4OTgxN2U4NjksCisJMHg0MzVjNDM3MSwgMHg1ZDljM2EzOSwgMHhhY2Q3OTU3NCwgMHhjM2YwMjRmNywgMHg3ZWIxYmFkNSwgMHhmZWIxYTk2ZCwKKwkweGZlYjE5ZjM1LCAweDFhN2ZjOThkLCAweGQ5N2Y1ODliLCAweGY0OGQ5ZmVlLCAweGYzYzJiY2Y0LCAweDMwOTdjMzNlLAorCTB4NDdiZGQxMTcsIDB4MzJmZGEzMDksIDB4NzE1Yzk5ZTEsIDB4MjdlNzk3MGUsIDB4NzdkOGFiZmUsIDB4NTE5OTMzM2QsCisJMHhkYjNlZDY3YiwgMHgyMDM3M2MyZSwgMHg2OGFhZDdmZCwgMHhiNjY1ZTA5ZiwgMHhlZjdlMGNjMiwgMHhiOGJiZWEwMywKKwkweDNkMWNmMjIyLCAweDA3NjFkMzE0LCAweDNmNzE3NTZmLCAweDgxNmJiYzJlLCAweGQzY2UwZTdlLCAweDQ2YWEzZjg5LAorCTB4NGU5MDUyZGEsIDB4NzYyNjFjYjIsIDB4YTU1MmYyMzksIDB4MjM5YWVjOGQsIDB4YjllNGVlODIsIDB4MDU4ZDJhZWEsCisJMHg4NjAyY2YzMCwgMHgxYmU1ODM5YywgMHhlODhiZDc2NiwgMHhjODdmMGVhNywgMHg2OWRiZTcxOCwgMHg4YTViZTUxYSwKKwkweDQxNWIxODMxLCAweDVkMDQ4N2Y1LCAweGZmZjI5MTFmLCAweDU3NTg5YTA3LCAweGVmMTg0MGUwLCAweDFlNWNmYWVjLAorCTB4NzQ2NTJlODcsIDB4NjU2Y2ZlNWUsIDB4ZGQyNWQ1MDksIDB4YWUwMWZlNGIsIDB4NDFhMThkMWUsIDB4ZTkyN2Y0NDUsCisJMHgwYjRlYTdmOSwgMHhiZjdhODNkMSwgMHgzNGJiZjg0OSwgMHhlYTU5MDIxMywgMHhiODgwNzA5MiwgMHhjOTNkNDJjOSwKKwkweDcxOTVmZWM4LCAweDZjOWI3Y2JhLCAweDdlZjhmY2Q3LCAweDdlNzU5MzBlLCAweGQ0NGIyYmRlLCAweGFhNmEyOWExLAorCTB4ZjJmY2ZkNDAsIDB4M2I3ZjQ4ZWYsIDB4ODc5YzQxN2MsIDB4ZTc0NmNkMjUsIDB4YTNlMzg2OTMsIDB4NzY3ZjgyNWQsCisJMHg0YjkxZjEyNSwgMHhlOGY4OWFiYiwgMHgzYjkyY2VhNywgMHg5YzZiZWUwOCwgMHhhNWFmZDQyZSwgMHgwY2JhOTczMCwKKwkweDJhMjNmZDJhLCAweDRmY2UzYmYwLCAweDQ3NGY4YTZhLCAweGVkNjZmOWJlLCAweDgyNWFhOWYxLCAweDliZWY4NjljLAorCTB4YzZhOWY3ZjgsIDB4N2RmMGJkZWYsIDB4NjlmN2MyNDYsIDB4ZTBkOTdkZjAsIDB4NmQzYjc3ZWYsIDB4ZWM0NGQzNTEsCisJMHgyMWVmNGFhNywgMHhjOWE1MTg3ZCwgMHhhZGU2MjM1ZSwgMHhhZWVmZjE2NiwgMHhhM2IxNzkxMSwgMHhkNDdkZTBkMywKKwkweDNjYzZhNTViLCAweDY3ZDkzNjEzLCAweGE0ZTRmY2EzLCAweDk0YWI5MmJjLCAweDU3YzgzOWU1LCAweGJhOWFkYjU3LAorCTB4OTdiZmEwN2IsIDB4NjU1ZTNhYzUsIDB4ODJlNjdlMGEsIDB4MmRjZjJmZTcsIDB4NTdmYzhhMzksIDB4OTg2ODhiNmIsCisJMHg4YjJkNzdkNywgMHhlZGM1YzJhZSwgMHhjNDdjMTY5YiwgMHhlMWYyNGM1ZCwgMHg2NjkzZTQ1OSwgMHgwMzM2MzgzNSwKKwkweGVkY2M2N2VhLCAweDIyMmQ2ZmEzLCAweDliY2U3OWZlLCAweDQ5NWUxODM5LCAweGE0NWUxMjI3LCAweDQ5M2ZhNDE3LAorCTB4Zjc3MGM5MmYsIDB4M2JkN2U3YWYsIDB4M2I2ZjExMjksIDB4NGE1ODUxZDgsIDB4MTZiMThhYmIsIDB4ZTdhZDc3OWUsCisJMHg4ODBiY2MwZiwgMHg2NWFkODY2OCwgMHgyZjM1ZGEzNCwgMHhkYzkzMDkyZiwgMHgwMGZkY2FiOCwgMHg5Y2JkNjVlNSwKKwkweDk0NGZmYzFiLCAweDdlMTc3NTY3LCAweGNiZTFhMDUyLCAweDcxNjM3OWRlLCAweGM2ZjAwMGRmLCAweDk1ZTEzN2ZlLAorCTB4YmNhMGUzZjYsIDB4ODYyZDBmZTMsIDB4ZjhlMWUzYmMsIDB4NDIxYjhlNGMsIDB4ZmNjNTUwYmIsIDB4NDc5NDlkZTQsCisJMHhmMGUzOWExYywgMHgxMDkxNzllMSwgMHg1MjU2YzFlNiwgMHhjMmVjOGFmYywgMHg2ZjZlMTRlNywgMHhiMDliMTU4NywKKwkweDNmMzdjZWUzLCAweGFmN2I3MTk5LCAweDMzZGVkZmE5LCAweDk0NzdkN2U0LCAweDZlM2JiODczLCAweDM1ZmRlNWQ1LAorCTB4Yzc5YzVlZGMsIDB4NGIzOTNkYjgsIDB4NTE3NDJmYjQsIDB4ZWZjM2NjYmIsIDB4ODZmZGM5ZDgsIDB4ZDU4ZjRmMWQsCisJMHgwM2IwNWZiMSwgMHhlOTYwN2VjOSwgMHgzMjJjY2VjMiwgMHg3ZjgzOWJkZSwgMHhkZTQwZDY0YSwgMHhiNzMzNjZmOCwKKwkweDdjOTliNzVmLCAweDYyZTc5NDU1LCAweDljZTJmN2UxLCAweDMxOGNmZTkxLCAweGZmNjRmYzdjLCAweDYyOGU2ZTYyLAorCTB4ZDdmNzRmODgsIDB4YzVmZTRlZmYsIDB4M2YzMDc3NTIsIDB4NTg1YmZhMDcsIDB4NGM1MDJmZTYsIDB4MzNmNzE3MDgsCisJMHgxYzNlN2QwMiwgMHhkNmZlOTg2MywgMHhmZWVkMWEzMiwgMHg5YmNiNTlhYiwgMHhjZmEyNjJhNiwgMHhjZmE0MWNlMiwKKwkweGM1OWY0MDA5LCAweDlkMWNmYTA2LCAweDI0ZTVjOTkzLCAweGIzZTkyNWMyLCAweDkzNGIyZTlmLCAweDE3ODJjYWYzLAorCTB4ZWUxZDNmNjAsIDB4YTMzNTVmY2UsIDB4ZjU2ZGRjYmQsIDB4OWU1YWJjZjEsIDB4MDcyYzk4MjcsIDB4YTA1OWUwMTIsCisJMHhhYTNjNzg3MSwgMHhjMjRjZjA0YSwgMHgzOWUxOTM3MSwgMHhhNDQ5M2UxZiwgMHhmOWM2NmNjZiwgMHhjOTdlMzg2MSwKKwkweDU5ZDg1OGQ2LCAweDJmMmZjMDMxLCAweDA4MzU4M2RiLCAweGFjZGYzZjdmLCAweDQxYTNmYmUyLCAweGEyMGVhYjcwLAorCTB4ZTQ2ZmViYWYsIDB4MmE1MDk0NzEsIDB4NGYxODQ3ZDcsIDB4NjdmMTgxYzksIDB4NWZhZmYxODksIDB4ZmFmMGU5Y2IsCisJMHhkZDEwYjE3ZiwgMHg4NDUxZjgwMiwgMHg5ZjY4YjY3ZiwgMHg3OTQ0ZGRkNSwgMHhjYzZiYjM1NCwgMHgwMGVkMTIyNywKKwkweDEzYTliNzE5LCAweDk0ZjFjZGVmLCAweGU2MDU5MTliLCAweDRiYzYzNGNjLCAweGYxZTI2ZWVhLCAweDhiNThlYjlhLAorCTB4N2ViZGUxMTksIDB4M2E5ZmIxOGUsIDB4Y2MxM2ZlYjYsIDB4YzliYmFiMGIsIDB4ZDM5ODNjZjgsIDB4OGIxOTY3MWYsCisJMHhjMmEzOTY3MSwgMHhmYzA3ZDA4ZiwgMHhkM2Y0ZmM4MiwgMHhkZjBmYzVjYywgMHhmNjNiZjQwYSwgMHhlODE1NjU4NywKKwkweDZiMzJiYTc3LCAweDUwNGRlZWM5LCAweGYxYjZmMWZmLCAweGQ2NjlmZjU0LCAweDA2ZjNiZmI3LCAweGExMjhlZmI2LAorCTB4YjkyNjBkN2EsIDB4ZjkwODNlZTEsIDB4ZDU0ZGY1MTEsIDB4YzExNGQ3OGQsIDB4YTJlZDQ3YjgsIDB4MzlmOTViZGYsCisJMHhiMDRhNmYwMiwgMHhlN2JjMTY2MywgMHhmMjhhMzg5ZCwgMHhiYzg0NmIyMSwgMHhkYmM4NWJlOSwgMHhjOWQwYmRhZiwKKwkweGQ2NmY1ZTUzLCAweDkzNThkZmM5LCAweDc5ZjVlZmMyLCAweDJiYmZmY2FkLCAweDY2YjczZjMwLCAweDNjNTdhODk0LAorCTB4NDdlYjFlM2YsIDB4MWVlODRmOTUsIDB4ODcyNmRlODAsIDB4Y2U2ZmY4ODYsIDB4MDlkYTdlZTUsIDB4MWM3NDRhYTUsCisJMHg0MzI2YTVlMCwgMHhlN2M0ZGZmNCwgMHhkMWUyYjMzNSwgMHg5YThmZTQ1YywgMHgwNGNmZGU2YSwgMHhjNWI1YjRkZiwKKwkweDJjZTk5ZWY4LCAweDZkNzM3YmQ1LCAweDI1MGYyODY5LCAweDcwZTdiNTlmLCAweGE5ZWQyY2ZkLCAweDY3ZmJlMDgwLAorCTB4OGRiNmVmZmMsIDB4MzYwMzdlODAsIDB4MGM1Mzg3YzUsIDB4ZGY5NzdlNGMsIDB4ZTdlMGU1NWYsIDB4MjJmZTAyY2IsCisJMHhkM2JjZmQwZCwgMHhiMzdmM2NmZCwgMHgwNzIyYjZkYSwgMHgwZjVmZTdmNywgMHg1ZTcxMmE1YSwgMHg1MWY5NWIyZSwKKwkweDI3ZDI2ZmI0LCAweGY5NDQ5YjRmLCAweDQ2NjYzNmJlLCAweGRmNzQwNzNkLCAweGYxNzg3YzQxLCAweDQ4NjkwNTI3LAorCTB4ZGQyMzBlNmMsIDB4MjU5YWJhNGIsIDB4NDhjNmJkZTksIDB4ZGJhZmMwZDcsIDB4NWNiZjMyNzIsIDB4ZGFlODFiNWUsCisJMHhjM2Q3NDAzZSwgMHhkNzAwYjlkOSwgMHhhOWFlMDk4ZiwgMHgzZmQ1ZmQ0NiwgMHgyNjVmMTI0ZSwgMHhiYzljM2I4ZiwKKwkweDc5NDRiZmMwLCAweDI3NWYwMDNhLCAweDY2MWU1ZmYxLCAweDdmMjMxNWM1LCAweGVjZmU0YmI2LCAweGE2MmMzODQyLAorCTB4MjliMzlkMTgsIDB4ZTllMzdjNTQsIDB4NzYzMGVhNjAsIDB4MWYyZjg0ODYsIDB4ODMxNWFlN2QsIDB4NGQzZmMyZTEsCisJMHhjZmZjN2ZkYSwgMHgzY2YyZmI4MywgMHhmOWRmMGVkMSwgMHg1YzAwYzY1OSwgMHgyNDJiZmUzMCwgMHg3ODcxNTcwZiwKKwkweDVjMmQyYmI2LCAweDVjN2IwOGJlLCAweGU1OWJlN2VlLCAweGYzOGNiYjdjLCAweGU3ZTE0YWFkLCAweDc3ZThiZGRlLAorCTB4Zjk3YmRmMjEsIDB4Y2ZiODdlZjgsIDB4N2NlNDFkNjMsIDB4Y2Y2ZjQyNDIsIDB4MTY5YzA1YjEsIDB4ZWU3NWRiOTgsCisJMHgxYjlmYTI3YSwgMHhiNDY5Zjg1OCwgMHg4MzM5OTY4ZiwgMHg3NGYxMTdmZiwgMHg4NDNlMTRjNCwgMHhjYzg1OWNmYiwKKwkweGEwNTdmMTRmLCAweDEyNzI3NzhmLCAweDZmMDkwZGVjLCAweDg3OWE5ZTMyLCAweGYzYzlhNzkxLCAweGMwY2ZjNjQ5LAorCTB4YmVjOGM1YmEsIDB4ZmFkOGU3OTMsIDB4ZjM5ZTdiZTcsIDB4Yzc4OTc2OTQsIDB4NjU3N2Y0NjIsIDB4ODY1NGZmMDgsCisJMHg0NTIxNDdmMCwgMHhjOTllN2VhMSwgMHgyZmI4N2M1MiwgMHhjODUzZWU5OCwgMHg2Y2M5OThiZSwgMHhkNjY3OTcyNCwKKwkweGUxOWU3ZDcyLCAweGQ0ODdmNmUwLCAweGM3ZjFjM2ZiLCAweDkyMzM5NzE1LCAweDk5MWIzMzU3LCAweGU3YzczNzM4LAorCTB4ZDk4NzRjOTUsIDB4MmMwZWU3YWMsIDB4YWRmNGRhNjcsIDB4ZDFlZjkwMGIsIDB4ZTAwN2QxNGUsIDB4N2VlMGU5OWYsCisJMHgyMTVjZWNlYywgMHgyNGNmNTgzZiwgMHhmNWZkZjNkNCwgMHg2N2JlN2E0MSwgMHhlNDlmY2ExMiwgMHg5ZTY2YzlmYiwKKwkweDhjZDJmZWUzLCAweDk5Y2E4YzczLCAweGExMjc3N2JlLCAweGVkYThjZjllLCAweGNjNzI4NDk5LCAweDczN2JmMmU5LAorCTB4MWZkYzBkMjcsIDB4ZDFjNzhjOTgsIDB4ODcxOTI2YjksIDB4NGNmYTJmM2IsIDB4M2YxOTFmZTYsIDB4YzcwNjczNmIsCisJMHhjZmQyMzhlMiwgMHg1NTg5NDY3MSwgMHgxZTE1NGJlMSwgMHg1ODNmZTg5NywgMHg3NmVjNzQ4NCwgMHhmZjQzNGQxNSwKKwkweGU4MWIxY2M1LCAweGNiYmExODIzLCAweDE3MzBiYzE1LCAweDAwOGZlZGU5LCAweGYxMGU2ZTBmLCAweDc1ZTNjMDU1LAorCTB4MzQ3YmMxMzUsIDB4ZTFlMTJjM2UsIDB4MmI4NzgxMzYsIDB4ZmIzZDVlODUsIDB4ODlmMTRhYjAsIDB4NDNlOTdmMWEsCisJMHhiZDA4NDIxOCwgMHhlMjExNjY2MiwgMHg0NWU5M2Y1NywgMHg1OWQ4YmY3OSwgMHhmOGEyYTAzMCwgMHhiMjRlNjNmZSwKKwkweDVhYmYxNjMzLCAweGIxOTVmMTRmLCAweDRmNGM0YzViLCAweDIyZTM5M2QwLCAweDMyN2I4NjI5LCAweDMwY2JlYzI2LAorCTB4Y2NlODJmZDQsIDB4NjE3ZmJjMzUsIDB4N2I0MzI4ZDcsIDB4YTFiYzc0NzksIDB4MmE1N2EyZmQsIDB4YjE0OWY1MGMsCisJMHgyZmY3ODYyOSwgMHg1MGRhYWI3ZSwgMHgxYWU3YTRiZiwgMHgzZjUzZmJjMywgMHg4M2E4NmQ5OCwgMHhkZTcwZDBjNiwKKwkweGQ4NTU5ZjdiLCAweDY1Zjc5ODM2LCAweGJlMTk2ZmYxLCAweDE5YjZjZGZmLCAweGYzYmM2MGFmLCAweGIyZjdkOGE0LAorCTB4MGE1NjNmYjAsIDB4ZTkyMDU4NzgsIDB4NjM3Y2RjZjYsIDB4YWEyNTUxN2YsIDB4ZjNkZjIxNTQsIDB4NzllYjA1YmYsCisJMHhjMDM0ZjZiZSwgMHgwYmJmNjI1YywgMHhjNGY2OGRkYiwgMHg3YWM2MmRlMiwgMHg1NWE2Zjc0MywgMHhlNzA3MWIyOCwKKwkweGUzNTRiNDc5LCAweDc5YzkzOTU1LCAweDc5YWUzNTFlLCAweDUwY2ZhNDI2LCAweGUzMTdkODJlLCAweDYyZWMxMTEwLAorCTB4OGUxYjMzY2MsIDB4ZmQ2Y2JmY2YsIDB4MmZlOGQ4NGIsIDB4ZmVmZTdmNWIsIDB4ZjVkOTBiMTYsIDB4YWE3ZDVmOGIsCisJMHhhYzhmMGEyYSwgMHhkYmZhZTM1ZSwgMHhhN2ZhZTM3NSwgMHhkZmQ3MWE5NiwgMHg3ZmFlMzNlOSwgMHhmYWUzNjRmYSwKKwkweGY1YzZmZGJiLCAweDVjNmI1MTFmLCAweDcxODBjY2ZmLCAweDhjZWJiM2ZkLCAweDM0MTM5ZmViLCAweDA2YzhmZmFlLAorCTB4YjdlN2ZhZTMsIDB4NzBiYmQ3MTgsIDB4OGIzZDcxOTksIDB4ZWQwZDRiYzIsIDB4ZTUyZmViYzksIDB4ZGI5YWYxNjUsCisJMHg3YTAxZWY4YywgMHgyMDc0MDk0ZCwgMHhhMDQxNjhlOSwgMHhjNjc3ZjI4MSwgMHgzMGNmN2ZiNCwgMHhjMDNkMzI0ZSwKKwkweGY3NDRkMWJlLCAweDZlM2VjMWJmLCAweGY0ZmU3MjliLCAweGZjOGFkMjAxLCAweGYxZjRjOWJkLCAweGVlYzJiOTZmLAorCTB4ZmEwMTc0MTQsIDB4MGFlNTEzYTgsIDB4NjE0ZjE3ZDgsIDB4ZDg1NjM3NTksIDB4ZWRhMTgxZmIsIDB4MTJiZjI5MGIsCisJMHhiZWUyNzlmNSwgMHgzNmI5Mzg3OCwgMHg3ZDg5NGY0OCwgMHgwYTdhYjBmMiwgMHg4MWY2YzlmNywgMHhmNDcwZjI3ZCwKKwkweDhmYjMxYzdiLCAweDRmNWE4ZWM4LCAweDVkMWJhNTdlLCAweGYxNGY4ZTFjLCAweGNmZTgyNWQxLCAweGYyZjQ4MjdkLAorCTB4MzI3MDAwNzEsIDB4ZTcxYzdiYzAsIDB4NGYxZmUzMDMsIDB4OGRmZTQwOTksIDB4ZDkyOGIzNmYsIDB4MTk4MmZmZWQsCisJMHhjZGQ4MzA5NiwgMHhlMmFkYTg5OCwgMHg5NTNhNGYzZCwgMHgyZjZmNDJmNSwgMHg4NThmZmUxNCwgMHhiOTViZTBmNiwKKwkweDk4NTFlZmRjLCAweGM1ZTZlMzg1LCAweDdiMTRiY2U4LCAweGRkNzljNDZkLCAweGUzMDI3MTIzLCAweDRmNzgyMDA4LAorCTB4Y2EwMTFjNjEsIDB4OWJhNzNiNWUsIDB4ZjhhZTUyZDMsIDB4YzA0OWVlOTksIDB4NGFlOWZjZTcsIDB4NmFiNWQ5MjksCisJMHhjZDNkZTUwYSwgMHhmZDIxNDFiZiwgMHg3ODdmZmYzNCwgMHgyY2ZhMTcxOSwgMHg0Y2I5NWNiOSwgMHhkODVkYjNlMiwKKwkweDQ4MmVkYzAzLCAweDE0OWFjM2M3LCAweDA3NDE2Mjc3LCAweGMyZTdjZGUxLCAweGI4ZmU4Njc1LCAweGZjNDdmZjFmLAorCTB4MGFlM2NkN2MsIDB4ZDA2NzI2ZDMsIDB4Njc1YTMzMzEsIDB4MGYzYzZmNWMsIDB4OWMzOGRhYTUsIDB4MGQ5OTliOGYsCisJMHgwNTgxMzlmMSwgMHg1N2JjMGVjOSwgMHhmYmM2ZDEwMywgMHg3YmZiY2YxYiwgMHhkM2ZhMTQ2MywgMHg3Y2ZmZjU1NCwKKwkweGNmZTMwNmFkLCAweDlmZmEyZTM4LCAweGZlODYzZTFkLCAweDYzZWJkNTY2LCAweGY0MWFiZmU4LCAweGJhMTRjMGZjLAorCTB4Y2ViZmEzMjQsIDB4ODdmODdiZjgsIDB4YzI3ZTkxNzgsIDB4YmIyZjQxM2MsIDB4YmRmYjhjOWQsIDB4MjM4NmZjOTIsCisJMHg5OGMwOTA1NSwgMHhlN2U2NjNiZiwgMHgxNmRhYmRjMywgMHhlNjNjOWZiZSwgMHg5ODRkNjM1YiwgMHgzNzY2NjMzNywKKwkweDMyZmJlNzllLCAweDZkZjMwODdiLCAweGM3ZTQyNzRmLCAweDc5MGNiYWMzLCAweDNjYjRlOThmLCAweGI2NTdlZmFlLAorCTB4NzE4NjVjMzYsIDB4MDcxMTVlYTIsIDB4NzgzNWE3YmIsIDB4YWFiN2FlMTksIDB4MGUyZjI4ZjksIDB4Mjc3MjU3ZWYsCisJMHg0MGYxNmY3YywgMHg2YTlmMDI3YiwgMHhkZDQzMDY4ZSwgMHg1ZTEwMDhlYywgMHgxMGI2YjU1NiwgMHgzZGM1OThkZCwKKwkweDZlZjNhYjUwLCAweGZjMTMwNTczLCAweDE0OGUxNzEyLCAweGNjMmQ4NmY2LCAweDk4NGM1OTVjLCAweGMxZjdmMGM2LAorCTB4NTVmMzg2NzQsIDB4YzRlOWRhNWQsIDB4MGJkNWE4N2QsIDB4MmJjYTI1ZmQsIDB4ZmEyNTkwYWQsIDB4YjZiNGQ3YWQsCisJMHg5NGFiZGMxMCwgMHhiMzNiMTA2MCwgMHgzYjUxNjY4ZSwgMHhlMWFhZGJlMCwgMHhiZTc4NTQ1OSwgMHg2NzkyMmFmNSwKKwkweDNlNmRlNzE2LCAweDM4NjdmN2JjLCAweGRhYmQ1OWZjLCAweGM4NzI4OWU3LCAweDg3MjhkMjNmLCAweDVkYjU2ZmVlLAorCTB4ZDk1YWY4OGUsIDB4OTNjNjhjYmEsIDB4NzU2ZjZiNzgsIDB4OGRmNThlNWQsIDB4YmVkMTVlYWQsIDB4YjU0ZGRhODIsCisJMHg3MWY0ODJiYSwgMHg4NjIxNjgxYSwgMHhjN2FkMTY3MSwgMHhiMDNkNzE4OSwgMHgwM2M2MTkzMywgMHgwNDViNWVjZCwKKwkweGUxZWFjODk5LCAweDA1YTNiMmYwLCAweDVkNzMxZjQ0LCAweDhkZjQwNjFjLCAweGJjN2QwM2U1LCAweGZiNGNjY2IzLAorCTB4MWRmM2RiZDMsIDB4YWZlZGZlZjQsIDB4MGZkMTc5OGYsIDB4MWUwMTYwN2MsIDB4Zjk4YWZmNTEsIDB4ZjAyMzhmZjQsCisJMHg4ODcyMTE2NywgMHhmMjAwYzE2OSwgMHgyMzU3MjU5NSwgMHg2Yjg2NzQ3ZiwgMHhkZmUzYWQzNiwgMHhiYmM0OWZkYSwKKwkweDFmMjhjZWM1LCAweDIwZWY5MmQ0LCAweGUxN2NlYmJiLCAweGY3MTQ4ZDBjLCAweDI3YmMwOTUwLCAweDQ0ZjAwZmUzLAorCTB4ODE3NmY0NzIsIDB4ZTJlZmRiYTcsIDB4ZWZkYmJlN2UsIDB4Y2VjNzk0NjAsIDB4ZDU1ZmMxOTYsIDB4MTQ4ZDVkMDAsCisJMHgwNTliMjVmMiwgMHgwNTZmNmNhOCwgMHhlYjgyNTJjMSwgMHgwYjQxNjM2NSwgMHg0OWQ2NzVlOCwgMHhiZmQxZGIyZiwKKwkweGNkN2VlZDgzLCAweDRkZWFhMThkLCAweDU4NTk5ZTM1LCAweGFhN2M5YzZlLCAweGJlZjFkOTFkLCAweDYxOGIzZjRiLAorCTB4YzQ3NGJlODksIDB4NDU4MWFiOTcsIDB4YzUxZmNjZjAsIDB4MWQ3ODNkOGUsIDB4ODlhN2FmMzUsIDB4NWUzYWI0ZjYsCisJMHhlOWVkMTc0ZiwgMHhmN2NmNWUwMSwgMHgyMGQ0YTkzZiwgMHg5N2YxNDk2MCwgMHhkNWM2NDc3YywgMHgyZGJlNTFhMywKKwkweGIyN2NmYzYwLCAweDNiNjBlN2I4LCAweDkxYzJmMjEzLCAweGRiMDZhYjMxLCAweGJlNzQ2MjZmLCAweDUwZmZiNjQwLAorCTB4NGUzOGU3YjQsIDB4Mzk0NjI5YWMsIDB4ZmRmOGM3M2MsIDB4NmM4NzgxNTYsIDB4ZTlmNjg5YzcsIDB4YjYzMTlmMTQsCisJMHhhNjRhZjhjYiwgMHhmNDJiZWNlMywgMHhmZGIxOTk3ZCwgMHhkM2JkZjE0MSwgMHgxZDM2MzY3MSwgMHhjNzFiNDdkYiwKKwkweDUzZGEyMGRmLCAweDA4ZWYzYzFkLCAweDQ3M2YyMWM0LCAweDE1ZWZkYTJmLCAweGM3NmM3NmVkLCAweGVkOGQ0YmYxLAorCTB4MmJmOGM1NmIsIDB4NDNhZDAwOTUsIDB4Zjg4OTlmM2YsIDB4OWQ1NjhlZTQsIDB4ZjY3Y2M5ZWEsIDB4N2UwY2M4ZWEsCisJMHg5OWYwNTk4ZSwgMHhmMjFiMTk2YiwgMHgyM2FiZmNkYywgMHg5YTRjYmU3OSwgMHgwZmY3ZTNkZSwgMHg3YjY1MGYyMSwKKwkweGI4YTM0Yjg2LCAweDEwYjVlYWFmLCAweDQyMWQ1OTFkLCAweGVjM2UwODhlLCAweDhiNGEyMzk3LCAweGY3MTcxMzhmLAorCTB4M2QxOTdmOTcsIDB4OGU3ZWUxMDMsIDB4ZmUwMGFjZjIsIDB4YmVmMzllOTAsIDB4MDRjMTYyNjMsIDB4OThkYjk2NzksCisJMHhlZjA5ODJjMiwgMHgxODY0MTc3YiwgMHhlNTM3NTllYSwgMHhjY2Y3ZGUxYSwgMHg3NzY4NjUxOSwgMHhiNDM3OGU1NCwKKwkweGYxM2U1OGIzLCAweGFlODI2ZGM3LCAweDBjMmFjYTUyLCAweDAyYmVmMmVkLCAweDkyM2U3M2E2LCAweGY0NzliNTc2LAorCTB4Njc3YmMzMTQsIDB4YTQ3NGY1NGIsIDB4Y2I1N2QzZWQsIDB4MzY3Y2FiZmIsIDB4MzliNzBiOTQsIDB4MWYyMzY1NDcsCisJMHgzMjc1YTRmZSwgMHhlZjIwZGYxYSwgMHg4OTc0YTI2YywgMHhjOTQ3NGJkMiwgMHhhMmVhYjY1NiwgMHhjN2Y1NGE1ZSwKKwkweDdhYWYzY2RjLCAweGQ3OGZhYjY1LCAweDZmOWQxODhiLCAweDRiNWFkOTVlLCAweDJmODFjN2Y1LCAweDU2ZDdmY2IxLAorCTB4YTA3Yjk1M2YsIDB4ZmIwZTE2MGUsIDB4NDNhZmY0MTEsIDB4N2ZhMTNiM2YsIDB4ZmQwMjNmYWMsIDB4ZmExZGI5NjMsCisJMHhkMDg3ZjJjNywgMHg4NTZmYjYzZiwgMHgxMGZlYjE3ZSwgMHg4M2U1ODVjMCwgMHg3ZjNlMGZkMCwgMHhmYWM3ZmEwMCwKKwkweGQ1MDBkNmE2LCAweGEzYWQ2YmVmLCAweDIwZDY4NmZhLCAweDM2YjZmNzk1LCAweGFkYjVmM2QwLCAweGRkNWY1NDJkLAorCTB4N2JjYThjYmEsIDB4YWU1NGMzNWEsIDB4ZWQ0MzVkNmMsIDB4MWYzN2ExMTYsIDB4MWYxZmU3MTMsIDB4N2RjZmM2OWIsCisJMHg0NjdmYWYyNywgMHhlZWQ1ZjI5ZSwgMHg0NTA0YThiYiwgMHg5M2M4NjU1ZSwgMHg3ZGMzYzhjOCwgMHgyZjMxYTc3NSwKKwkweDcwNDdmMTEwLCAweDkzMWUzOWQ4LCAweGUwMmIxOGUxLCAweDJiNjJjZjE4LCAweGEwZGNiOTUyLCAweDJlOThlYjM4LAorCTB4YzBhOWRkZGYsIDB4Zjg1YjIzYTcsIDB4YzU3NTE3YmEsIDB4ODFhNzNkYTksIDB4Y2M1NjM3OGYsIDB4MmNjMjc5OTMsCisJMHhlZjFmOGFhZiwgMHg5NTdhZjdjNSwgMHg4ZjJhNzU1OCwgMHg4MzFmOTMzNywgMHg1NTNmMDE3OSwgMHg5MTMzZGNlMiwKKwkweDcwODRjNDc5LCAweDdmNDE5MzY5LCAweDFmYjNjYzI3LCAweDI3MGU2ZTVmLCAweDc4Mjg2ZGUyLCAweDdjNzhmMjJiLAorCTB4ZTRlY2FkNDMsIDB4YjZkNDliZjcsIDB4NTJjZDkxNDcsIDB4YmY3NDJkZmMsIDB4MTAyZWFkODksIDB4MDRmNGEwZDUsCisJMHhjMjRmNzQ4MiwgMHg2MDMzNzNmOCwgMHhlZDcyMDU5MywgMHg4NzRjZTVkYywgMHhiOGQxYWYzMiwgMHg1MDVkY2FmZiwKKwkweGE4ZTdkODYxLCAweGZkMzIzNmU3LCAweGNjYjdlODIyLCAweDE5NGE0ZmI4LCAweDNiZTE5YjdkLCAweDBjZjdkZTViLAorCTB4ZGRjZjE2ZWQsIDB4YjdmOWY2ODYsIDB4MjJmMmFkMTQsIDB4OGEzMjQ3M2UsIDB4YWZkNzU5M2IsIDB4ZDcwMDM5NjAsCisJMHgwNDRkOGVjMiwgMHhiZGUwNTA1NywgMHhmZGY5ZDE1NywgMHhlZmM1ZmJlZCwgMHhmZmZiMDg0NCwgMHgyZjgxMmVjNywKKwkweGQ3ZGE3YWRiLCAweDZhZjM3NThlLCAweDg0ZDg3YTQ5LCAweGE3ZTNlN2ZhLCAweGVlOGU0OWQyLCAweGZlNDRjNDdkLAorCTB4NjIyYzcxZWQsIDB4MDEzMzc5NDIsIDB4YmY2YzQ4Y2MsIDB4NTY3MjZmMDAsIDB4MTUxY2NhZTksIDB4NTc0Y2U1ZWIsCisJMHg4YjExN2ViMSwgMHhlYzA4YmVkMywgMHgxN2E0M2FmZiwgMHhiMTFmZmZiMCwgMHg3ZTRjZmQ0MywgMHhiZjNjYzdmMCwKKwkweGJhN2E0YTJiLCAweDg5NjdhYzQ0LCAweGQxNmQwN2RjLCAweDczYzNmZDkyLCAweDYzNWZjOGYzLCAweDI2ZDYwNzNjLAorCTB4ZGMyYjAxZjYsIDB4ZWYxOGQ5NTUsIDB4ZmYyNjFkZWQsIDB4ZDZmZGU5Y2UsIDB4MWViMDA1ZDQsIDB4MmEzYTljY2UsCisJMHhiYTBkZjNlNSwgMHhkMTczYzg2OSwgMHhiZjJhYmVjYiwgMHg2MjNkMDE2YywgMHgwODY1OTdlNCwgMHg5ZmNhOTlmZiwKKwkweGFhYmJhMTY3LCAweGY4OWM3NDc5LCAweGU1MmNjZGE2LCAweDcyOGU5ZTk4LCAweDRiZWVhMDZjLCAweDNiYTJiYjI3LAorCTB4ODlhM2YwODcsIDB4MWFkYmQ5ZjUsIDB4MzkwMGZjYTQsIDB4ZDM3N2VkNGYsIDB4NTYwZjk4NWMsIDB4Zjc0ZmYyMjIsCisJMHhiNTNhZGViNSwgMHg2NjFmMjEyNiwgMHg1MmRmYTBiNywgMHgzZDQ1YWIxNiwgMHhmMjY2NWE1YSwgMHhhZjI3YTg0NSwKKwkweDFmNjE3ZmMxLCAweDczYzdlZWRkLCAweGYzMDU1YWZhLCAweGM3MWUxOGExLCAweGJhYmNlOWRhLCAweDc5NGE4NWY2LAorCTB4NGI5MWRhNDAsIDB4YjA3NjBlOTgsIDB4ZTE2NTExYzMsIDB4OTk3ZTgxYjIsIDB4NDc3YzgzZjAsIDB4NWNjZmY1YzgsCisJMHhhZDBmMzQzNSwgMHgzZTQ3ZGE0MCwgMHgzM2VjZGRkNCwgMHg3NDg2M2Y4NywgMHg5OTg3NTlmNywgMHg2MzA5ZTViMywKKwkweDkxODNhOTdiLCAweDZhNTQ1YjllLCAweGE2MGFlODg5LCAweDNkZDNiNDIzLCAweDg1MGVkYThiLCAweDFjMjExNWU1LAorCTB4NTBmM2JkZDMsIDB4MjU0YzFmOGYsIDB4NTJkZDRkYmEsIDB4N2JjMzU3NDUsIDB4NzlmNWMxNGMsIDB4MWU5OWM3MDAsCisJMHgxYTQ5YTBmZCwgMHhkMzVlZjA1NywgMHhiNDJlY2IwNCwgMHg1ZTIyYzcxYiwgMHhhNWQxOWM3MCwgMHg2Mjg1Yzc4NCwKKwkweDU3NWFmYmJlLCAweDE1OWU5ZTEwLCAweGVmY2I2OGYzLCAweDg3ODczYmM3LCAweGNmNzhmY2Y5LCAweGU5MGVhMmU5LAorCTB4NzNjZTMxYmYsIDB4MzdmNTY1NDMsIDB4OTVjNmRlZjAsIDB4NzRkODU1MzEsIDB4MzNhZTdjNDYsIDB4NTNjZTI2YzcsCisJMHgzODAyZTAwNiwgMHg1NTM4NDU5ZiwgMHhiZmZjOWI4NCwgMHg4ZjRkN2U3YywgMHhjODE5YmY3MCwgMHhiYjhhNWFiMSwKKwkweGM0YjEzMjRlLCAweGEzMmNhYmI4LCAweGM4Y2RmZTQyLCAweDRlYmMxMTczLCAweDBiYTlkY2VmLCAweGRmYWM0YTJlLAorCTB4YjhmZDc0NDQsIDB4NzYxZmU3YzIsIDB4Y2QyZjNjNmEsIDB4ZmQxM2Q3ZWYsIDB4N2VlNGViYzQsIDB4NDg3ZjljNTksCisJMHhkZmY2ZjAxMSwgMHhlNzllMzZlMywgMHg2YzU4M2E2MSwgMHgwZDJkZTYwYiwgMHgyNWZlMWZiNywgMHhjNGE0Y2EyZSwKKwkweDE4ZTgzMGZkLCAweDY0OWQ1NzE4LCAweDc1OWYzY2EzLCAweDdmNGI4ZjMyLCAweDMzN2NjNzQzLCAweDhhZmNmMTJjLAorCTB4NmFlOWQwNGQsIDB4ZTRhZjMxYTcsIDB4NzdiNzFlNWMsIDB4ZThmNTg5Y2UsIDB4YzZiZTcxYjMsIDB4NTY3OTY0YjgsCisJMHhkZDE3YmRjMiwgMHg5MWZmZTRmNSwgMHg2ZWJlY2M3MSwgMHhmZDJlMGY5ZSwgMHgwOTA0NGI2YiwgMHg3OGU1MWRmNCwKKwkweGE1NTg3YmU4LCAweGVlOTJlNWY4LCAweGExN2RmOTZiLCAweDdiYTAxZTg3LCAweDFkMmZhMTU2LCAweGJjNWVhMWU5LAorCTB4ZThjNmJmNWYsIDB4M2JiMDU5ZWYsIDB4MWY0NTJhYjAsIDB4YzQ1YTU3ZWMsIDB4NDhkN2U0YzIsIDB4ZmIyNTI3ZjYsCisJMHgyNzliN2U5MSwgMHg1NjNlNjlmNiwgMHg5M2NhNzE4ZSwgMHhhNThmOGJlYiwgMHg4OGE2N2VlMCwgMHg5MWRiYjlkMSwKKwkweDhmNzQ5M2VhLCAweGVkZmI1ODMxLCAweDJiMjk0Zjc4LCAweDI0ZjRmN2UzLCAweDA1MjVmYmFmLCAweDNlZjNjMjE2LAorCTB4MWM2M2FlYjksIDB4MzdkODY3ZTQsIDB4YmVmZmYzODksIDB4N2Q3ZWNmMTcsIDB4OTZmM2Y0MGMsIDB4ODFjZTE4YWUsCisJMHgwOTliYTViYywgMHhhZTgxZTM4ZiwgMHhhYzY0ZWNiMSwgMHhhMGZiYTg3NiwgMHg1ZjRkZjNiMiwgMHhhNWMwYmNlZCwKKwkweDY4ZDdkZmM2LCAweDk2MzllYWVhLCAweGNiYmM5M2FhLCAweGZhNzgwN2NhLCAweGFkM2VmZDhlLCAweDRlMjdmODhjLAorCTB4NTc1MTA3YmYsIDB4Yjg0MWUxYzQsIDB4N2VjYmZjZjEsIDB4MTM3MzI3ZDMsIDB4YmU3YzYwZTksIDB4N2M4M2VkYzYsCisJMHhiZjkzNTdkMywgMHhjZWI4NDYzNSwgMHg3NTk5YmQ5NCwgMHgxYzZiODcwZCwgMHgzZDFiZDVjMiwgMHhiNzY4OTU5MSwKKwkweDBmZjZiODQ4LCAweGE1ZmFiZjczLCAweDkzNGYxNTVmLCAweDAxMjBmYThkLCAweDEyZmY1MzRmLCAweDg2NWJmNjllLAorCTB4YzA5NjY3ODYsIDB4ZjI4ZTRmY2YsIDB4YjcwNjQyZmIsIDB4ZDVmZDQ1N2YsIDB4Y2NmNzg0NjEsIDB4NTFlYmIxNjMsCisJMHhiM2JjMDIzYywgMHg1M2RlN2YwOCwgMHgxNTMzMTQ1OSwgMHgxNGFjZWJmOCwgMHhlNDI5NTlmNCwgMHhhOGNlOGY4ZSwKKwkweDE3ZGJkMGIwLCAweGE3NWU3ZTUzLCAweDc3NDNkYmM2LCAweDc5ZTA4YTJlLCAweDBiOGJkZjAyLCAweGUwZGZkMTBhLAorCTB4N2JhNTZlM2MsIDB4Nzk0OTQyOWUsIDB4MmY1Y2IyMjIsIDB4NTczZmIxZTYsIDB4YWIwZjEyMTksIDB4NzhiY2I5ZjMsCisJMHhkNGY5YjVmMSwgMHg1OTZmYmRkZiwgMHhlZDgzY2ExOSwgMHg1ZWY1ZGYyMiwgMHhlZjBkYTc1NywgMHhjNDc4OTVlZiwKKwkweDIxOTQwNTdhLCAweDJhMTE3YzRiLCAweDNmMmI3YmJhLCAweDIxOGVlOWIzLCAweGYxZjEzM2M2LCAweDFiZTI0YmVlLAorCTB4NTcyYzllMzksIDB4YmI3Mjk3ZTQsIDB4ZTJhYTM5NTQsIDB4MmVmYjg3MzksIDB4ZDllZTkzN2QsIDB4MjM1MmFmYmEsCisJMHhlMzM3ZmI5OSwgMHhmZTEyN2Q3ZiwgMHg3ZDY2NmZhMywgMHg4YWNiZDM5ZCwgMHgyYWEzZjQ3YywgMHgwMzdkYTVlZiwKKwkweGZlMjUyMWVhLCAweDlmYzQzMmIzLCAweDBmZjM0ODI1LCAweDNiNjU2ZGJkLCAweDZhNzhjMTk1LCAweGU3MmJmNDE0LAorCTB4ZTEyZmU3MjcsIDB4ODBiNjVlNzYsIDB4N2FlMDk5Y2UsIDB4YzVhYmUwMjAsIDB4YTQ0ZjUyZmIsIDB4ZjM4N2JkMGIsCisJMHhhOTcxM2QyMiwgMHg0Yzg5Y2ZjNiwgMHhlZjVkNjhkMiwgMHhjZTg1M2M5YiwgMHhmOTE3ZWNmNSwgMHgyYzRiZjExNCwKKwkweGMzMmVmZTQzLCAweGY3NmYwMjMzLCAweDBjNDVmYjllLCAweDc3MGRhOWVmLCAweDA1NWVlOTliLCAweGJmNzhmNWE2LAorCTB4N2ExNDc0MDksIDB4OWE3YmEzNWQsIDB4ZjE2YTllODEsIDB4NWYxN2E4ZGUsIDB4ZmI4NjliM2IsIDB4NjZmOTAzZTgsCisJMHgzZTQwZmI4MiwgMHhlNzdkODc5NywgMHg2ZjNhNWFkNCwgMHgyZTY3ZGFmMywgMHg5ZmZlODEzNSwgMHg1ZDg1NTdjZSwKKwkweDM5ZTE4YjEyLCAweGZjMTU4ZDlhLCAweGQ4NDM4MGRjLCAweDRlZDc4ZTAxLCAweDhlZmMyMDM1LCAweDJhYjNkZmM5LAorCTB4NGY3NjdhMDksIDB4ZGJiZTk1YmUsIDB4Zjk2Nzg5NjgsIDB4NDg3NDBlMzAsIDB4ZGZlZTUxNjUsIDB4ZmFlZmZiYTEsCisJMHgzOGJhMGJjZiwgMHg4ZjJiOWExZSwgMHhlOGUwOWQ5MiwgMHgzZGUyZjdlNiwgMHg1YzEzYWY5ZCwgMHg3ODQxZjcwOCwKKwkweDMzZWUzMjllLCAweDU3YjYzZDU3LCAweDA2YTM3OGMyLCAweGY4YmE3N2JlLCAweGUyNGNhNjdhLCAweDc3ZGNkMGY3LAorCTB4Nzg1ZGNmZTksIDB4YzJiYTVlZWYsIDB4NGJlOGZlZTgsIDB4MzkwNmNjMGEsIDB4ZDdjNDVmNWUsIDB4MTYzMmIzYTEsCisJMHhlNWZjODUxYiwgMHhiNmFmMjhkMiwgMHgwZDliN2EzMywgMHgxN2M5N2FlZCwgMHhmNGE5NDdhMywgMHg5NzkxNmFkZCwKKwkweDI5NzI3YWJlLCAweGUzYTQ5OWYxLCAweDU3YzEwNWI5LCAweDAyMzY2ZTkxLCAweDc2NDkzYzVmLCAweDlkMzAyYzRlLAorCTB4YzcyYWUzZjAsIDB4OTVjN2UzZmMsIDB4M2ZiNzFkNTgsIDB4MmZkNDJlMmMsIDB4ODE5MzI2YTUsIDB4MzgwYjhhZGYsCisJMHhlYzEyYzhkZCwgMHhlZTc3YjI1MiwgMHhmNTJjYjQxMCwgMHhjNmM0NWI3ZCwgMHhiN2ZmYmYzMCwgMHhhM2E1NjZlNywKKwkweDI3OTZkYTVkLCAweDBkYmYzY2VkLCAweDA5NWRiNWYxLCAweDM4ZTExN2E0LCAweGJlZDJhNWZmLCAweDRlZDdjNWVmLAorCTB4NmRiOGUwMzQsIDB4ZGJlNDJmMzAsIDB4NThlYTdlN2IsIDB4OWI0OWY2OGYsIDB4MmE3YzRmY2IsIDB4MjZkY2Q3YzcsCisJMHg5ZmJjMWViMSwgMHgyYmZmMTZmZCwgMHhiYjhjNmZlOCwgMHg0NzQ0N2RmOSwgMHg0MzYzNWNhNiwgMHg0Y2Y3ODdmYSwKKwkweGFkN2JjZmQ4LCAweGQ4MWEwYmY4LCAweDA3ZjkwZDRmLCAweGNmNjZiYTE2LCAweGIxMTZlZmMwLCAweDZiYjQyYWUwLAorCTB4ODZhODc1MTcsIDB4MTFlZTE3N2IsIDB4YjllMTYyZjIsIDB4ZDg0ZDE2MTQsIDB4ZmM5YzJjMWYsIDB4YjYzNzNhMmQsCisJMHg4YjFhNWNmMCwgMHg4Zjc1YmQ4MiwgMHg4ZjdkMTczOCwgMHgwYWM0NTczOCwgMHg0NDNiM2QzOCwgMHhkZmU1MTVlOSwKKwkweDI0YmVmN2NjLCAweGNiZjk5NWJkLCAweGRmMzlmM2JkLCAweGI3ZTgwMmIzLCAweDE0YjFlOTQ5LCAweGE3MWIxMGMxLAorCTB4ZWJjZTllZmMsIDB4NjJlYWQ3YmMsIDB4NzgwNDkyZDEsIDB4MDQ3M2NkMDcsIDB4ZDM4YzI2OGIsIDB4MWIzOWRlZmYsCisJMHg3ZDYwNjdjZCwgMHhjYzBlZmQzOSwgMHg3ODc4NDFkNywgMHg3ODRiZDVhZiwgMHg5MWZmYmUxYywgMHhmNDBlM2MwNiwKKwkweGM3ODBjYTNmLCAweGQwOTdmZGMxLCAweDk2YjVlZmY4LCAweDEzZmY0OTdlLCAweDM3NWZlOTg2LCAweGVmZDAzZmMwLAorCTB4ZjdiNzFhNjgsIDB4YTcxZmZjYzgsIDB4ODkxZGRmMDIsIDB4ZjllZGJkZGUsIDB4MzMxZGZjNGEsIDB4MDE3ZWZkMmIsCisJMHhhNmFjZWFlYiwgMHgzMzhmODQ3MywgMHhlNzdhNjczYSwgMHg4M2JkZGZlMSwgMHhlZTc3OWFmOSwgMHg4YzcwZjhiMiwKKwkweGFlN2M3MzNlLCAweDMzM2QwODZmLCAweDc4YzJiOTlhLCAweGM3MmM5NzlmLCAweDdjZDMxNDE3LCAweGI0ZGI5ZjkyLAorCTB4MzJmMzBiODgsIDB4MGI5YWE1NmQsIDB4YzZkMTFmN2YsIDB4NzFiYjkxNjIsIDB4MjM2OTUyZGYsIDB4NDJlMzI3MzksCisJMHhlNTNmZGZiMiwgMHgzYjNjZjJhOSwgMHg2Zjc5MDdjOSwgMHg5NzkxMTJjYiwgMHg1ZTA4ZWM1NywgMHhkNGJlZWI4MSwKKwkweDEzZmNkZWQ0LCAweGQyODNmNmY4LCAweGNjMzczYTM2LCAweDMzZjY5Yjk4LCAweGUxYTM2ZTMyLCAweGEzMTViZjJmLAorCTB4ZjBjMDMwNWYsIDB4N2ExM2NkZmMsIDB4Zjc3ZTA2NzAsIDB4MTgyNzEwNDMsIDB4ZDgyZjUxYzcsIDB4YjViY2M0MWQsCisJMHhiOGRmNjIwZCwgMHhmYWYzMWVjMSwgMHgwZGU2ZTQxMiwgMHhiMzU3ZGEwNSwgMHhlODkzZGExNywgMHhmNzJmZDI3NiwKKwkweGRlZGQzOTQ2LCAweDIyN2U4MDUwLCAweGZjYzRmNjM1LCAweGVkYjdjYzIyLCAweGU5NzZmNzExLCAweDU1Nzc4YTE2LAorCTB4ZmVmYmEzMWUsIDB4ZmY3ZGNiZTYsIDB4OGViY2U0OWEsIDB4ZDFkYTM3N2MsIDB4ODY5NGNlMzIsIDB4NmI2ODc3NzksCisJMHhiZWY3ZTQ2YywgMHg3YWYyYTdkNSwgMHhhMDhjN2ZmZCwgMHhmZmIwMTA3MywgMHhmOTQzMmQ0OSwgMHhmZWU1NWZiMiwKKwkweDNhZGYxMTIwLCAweDY3ZDBlNjJiLCAweGY5NDA1OGRiLCAweGU0MWYyMmY3LCAweDc0NGJmNzZjLCAweDM1ZDllNGFmLAorCTB4ZWJmZDY4NjMsIDB4ZGQzZWY4NWYsIDB4OTczZmI3MGIsIDB4NDNiZWIxZWIsIDB4ZjU2M2QyNGUsIDB4ZGUxNTVmNTYsCisJMHg5NzNmYjg1YiwgMHg1YTlkYWJkYiwgMHhjMTIyYWQzNCwgMHg1NzlkNWQ3ZSwgMHhlM2Y5ZjI0ZCwgMHg4OTRjNjMzNSwKKwkweDBhZWY4ZmYxLCAweGZhNTFiMDc5LCAweDE1NzhiNTM3LCAweGI4Zjk2NzllLCAweGQyMzNmYTMyLCAweGY0ZWMwN2EzLAorCTB4ODNhNjUxM2IsIDB4ZmJhMmFiYmYsIDB4ZTk1YTM3MmQsIDB4MGZhYTAxNzcsIDB4ODc1Y2RiOGUsIDB4OGQzNGMzZmIsCisJMHgwNzRkOTFmMiwgMHg5OWNmMDRlZCwgMHgyZDdlZmM3NSwgMHg1ZGU1MTZmYywgMHhmNDkxYzFkMywgMHhhOWY1NTZmYiwKKwkweDZjMjdjYTcxLCAweDYwOTVmMTRhLCAweGUwZmVhZmRjLCAweGZmZDdiYTU0LCAweDA1NzE4NmU0LCAweDY0NGVmZjI4LAorCTB4YWY3NDA1ZWEsIDB4ZjQzYzA2ZjEsIDB4NjM0M2Y1MDksIDB4MTdiNWYzZjksIDB4ZTc1NTc5ZDMsIDB4NTBlMGQ0YzYsCisJMHg4ZmE5MTA3ZSwgMHhkYWVmZWY5MiwgMHhkYmRlNWI5ZiwgMHg2NzE5Zjg4NSwgMHg3ZGZjYTFmMywgMHhiOGYxZjE0ZiwKKwkweGQ5ZjEyYmVmLCAweGY5MTVjNTNhLCAweGQ3N2FkMmY5LCAweGJjN2RmYTY5LCAweDZmNzc4ZWZhLCAweDQzZGNmNDYyLAorCTB4NzNmNzJiNzQsIDB4MGJkNWUzYzksIDB4MTJkZmI1N2QsIDB4NGJiZjhiOWYsIDB4ZTA1MmJmNTYsIDB4NjI0ZWZjNWQsCisJMHg3ZTljYTliZCwgMHg3ZGUyNGZhZiwgMHhiNzNkZDI2MywgMHgyNGZkMDg0ZiwgMHg2OWFmOTNjYiwgMHhkODIwNWY3NCwKKwkweDFmZTgwNTExLCAweDRhZDg3OTNhLCAweGUzNzI3Njc0LCAweDJlYWYzYTA0LCAweDljMDdhYmM3LCAweDRmMmY4MGI4LAorCTB4NzExM2U4NjQsIDB4ZjIxNjlmNWQsIDB4ZGYyNTdlYWEsIDB4MzBlN2NhYTcsIDB4ZTc3ZjBjN2UsIDB4YTU0ODdlMzAsCisJMHg1NzNlYWViYywgMHg5MmUzMGQzYywgMHhlZjU5M2RmMiwgMHg0YWI3NGY5ZiwgMHgzZmI1OTdiZiwgMHg2ZjVhNDVmNywKKwkweGY0ODYyN2EwLCAweDQ5YzE3YTY0LCAweDgyZjQzYTdhLCAweGU3YWUxNzc1LCAweDhjMmM5NWM3LCAweDViZjBjZmZlLAorCTB4OGVjN2Y3ZmMsIDB4ZmQ5MmIyMWMsIDB4ZWY5Yzc3ZGMsIDB4OWZkZDA3NmYsIDB4ZTAxNzg4ZTYsIDB4MTdhMWExZmQsCisJMHhlYjFjOTI0NiwgMHhlMGVmOGZjYiwgMHhkZjlkYjZmNiwgMHhmMDQ2ZjhhYiwgMHhjZGZmMTE2MiwgMHhlNjExZjcxMSwKKwkweGY5Zjc5ZGEwLCAweGVkMTQ3YjIxLCAweDllMjkyODNjLCAweGJkYmI2NjEwLCAweDJhNzBmY2Y0LCAweDk0MGZmZjQzLAorCTB4Y2E2M2NmMTQsIDB4ZWVmZDJmMDEsIDB4ZGYxNzZiMGMsIDB4M2JmYmU4YzcsIDB4NTE2MzgyMGIsIDB4MGM1OWRmMmUsCisJMHhmYmYwM2JmZCwgMHhlN2RlZjQ1MywgMHg1MjE3ODJhMywgMHg1Y2IxOGEwYywgMHhmNTJlNWUzMSwgMHhhNDJjMWY5YiwKKwkweDVlNjdjYWU3LCAweGVkMmE3YmZlLCAweGVkNDYzZGEyLCAweDYyZjA2YjIxLCAweDljYWZjNzlhLCAweGYzMTBlNzZjLAorCTB4ZWVmN2FhZmMsIDB4NDExODJkMWQsIDB4MDZlMTI4ZWIsIDB4OThkZDkzM2MsIDB4MDViMzk3OGMsIDB4M2I3YmYxMjYsCisJMHg3NGM5MWYxYywgMHg1ZjllYmZkOSwgMHg1ZmZhMWYwMiwgMHgyMWY2YmNlOCwgMHhjNmViOGViZSwgMHg1OTFjYjg1OSwKKwkweDYzZWM4MTNiLCAweGM4NjI5NmQ2LCAweDg4NzE1YjlmLCAweGJiZDBjM2RmLCAweGRjZWI0OWMxLCAweDg0M2ZmNjY3LAorCTB4ODZmZTI4ZmEsIDB4ZWQ3YmYxOTksIDB4M2Y0MDIyYzAsIDB4ZjlhMWU0YzUsIDB4NGY5MTIzZTUsIDB4Y2YyZDY0YmYsCisJMHhkMWU4ZmJiMywgMHgzOWU2MGJmNywgMHhmYmYyNWNmMCwgMHhkMmM5NzM4NiwgMHhhNDlkMDg1ZiwgMHhlMWM2M2ZhMSwKKwkweDk3ZTZkM2QzLCAweDI1NWQ3YjcxLCAweDdhZWZmOGY4LCAweGY0ZWIzNDZkLCAweDBkZTE2YmJiLCAweDcxMWZjOGUzLAorCTB4YTQxZmEyZDIsIDB4Nzc1Yjg3ZGYsIDB4NGFlOTA5ODEsIDB4NzdmMjE3MmQsIDB4YmM5ZjlmMTMsIDB4N2JkZTRiMmYsCisJMHg4YTlmOGM5NSwgMHg3ZjkyNjJjMiwgMHgzMzc4MmM0ZCwgMHg4MjdlYTFkZSwgMHg2MWMyNTllOSwgMHg5MWZmZjc0NiwKKwkweDY5ODRkZjdiLCAweGUyOWY5YTg4LCAweGY0ODVhY2I2LCAweGY2N2JlMGMyLCAweGJiZjI1ZjJjLCAweGY1YmJmZjZjLAorCTB4ZjQyYjVjMmEsIDB4ZDM4Nzk1ZWYsIDB4ZTA3ZWFmNTAsIDB4M2E0NmZiZTIsIDB4NWQ3YThmN2QsIDB4YzM2Y2YzZTUsCisJMHg4M2FmMzAwZiwgMHg0ZTE0YTYwNSwgMHg4NzkyNzZhMiwgMHg1ZGJjMjgxZiwgMHhmMzQxYjljYSwgMHg3ZWMxN2E0NywKKwkweGViZTgzZGYwLCAweDdmZWU0MjlhLCAweDcxMGNhZTYzLCAweGMxNmMyYmM4LCAweDlmYTk0ZDNjLCAweGMyNjY4YTQyLAorCTB4ZGNhN2YzNzMsIDB4ZTNkMjFhN2EsIDB4MTljNWI1YTksIDB4YzYwZjMwMmIsIDB4ZGEyNTY3YWQsIDB4OGNhM2ExZDUsCisJMHg3OGViOGJjZSwgMHhmOGM1ZjhkZiwgMHg4OWZlMzJmYiwgMHg5ZmRiZjdlOCwgMHgyNDNiZjQ2MSwgMHhiNGU0ZjNjMywKKwkweGVkODliOTllLCAweDllYjkwYTczLCAweGY2Mjg1ZjliLCAweGU0NGM4NTk5LCAweDhkZTMyNjU3LCAweGIxNjJmYmFmLAorCTB4ZjA3OTZhZWUsIDB4MjY4N2RhNzIsIDB4NGI3OGI3YmQsIDB4YTQ4N2EwYmEsIDB4N2ZjZmVkZTcsIDB4MWVhMGYyOTcsCisJMHg0OTEzZGUzNiwgMHhlZjE4NWZiMSwgMHg2MTJjNTc4MywgMHg1MzJjNDJlNSwgMHg2MWJkYWYyOCwgMHgwZDczOTcxMywKKwkweGI5MmNjZWFmLCAweDVlZTlkNzhiLCAweGVmM2I2OTg1LCAweDU5ZTNkZmExLCAweDEyY2FlYmIwLCAweGFkMTZlNWM2LAorCTB4MDVjN2E0ODMsIDB4YjQxMmZlMDUsIDB4NTU1YmUyZTMsIDB4YzM0NWYyMTcsIDB4NTFlMDk1MTYsIDB4NTZkNzNlY2QsCisJMHg4YjdhN2U3OCwgMHgwNmJiZWM5OSwgMHhiY2U5Y2YwMSwgMHg5YmFkMWE2MCwgMHhlMDBiMzRjNiwgMHg0YzE2YjRmZCwKKwkweGFiNzVmYjIzLCAweGE0YTFkZGY4LCAweDZmN2JjMDc5LCAweGUwNDMxNTZhLCAweDk5ZDdjNmM3LCAweDA0M2M1M2YwLAorCTB4YTI2MWJjMWQsIDB4YmY4MDVhNzUsIDB4ZWM3MDg5MGIsIDB4NzliZmM4NTQsIDB4MzM3ODNmM2EsIDB4ZmVjMTRmZDYsCisJMHhhYmU5Y2YxZiwgMHg3ZGQwOTY5YiwgMHgzZWY4YzkzNiwgMHg3ZDEyMGI2ZCwgMHg5MWYzMTYyZSwgMHg0NzFlNGNmOCwKKwkweGYxMGZiM2UyLCAweDJiZDJmNjg5LCAweDg1ZWY0ODUzLCAweDYyOTE1NDFlLCAweDlmZGQ4YmQ5LCAweGRhN2NiZWQyLAorCTB4OTlkZjJiYTEsIDB4ODEzN2NmOGEsIDB4OWVhM2EyZGQsIDB4NmZiM2Y1MWQsIDB4YTM1YjllYTMsIDB4ZmU3YThjNTIsCisJMHg5NjJjZTJhMSwgMHhmZjcxYWZhNCwgMHgzOWY1ZmYzOSwgMHgzZDA0YTY2OSwgMHhmMWM4M2VhOSwgMHhhNGU3M2FhNCwKKwkweGNmZjdhNDJkLCAweGViZTkxZDdlLCAweGFhY2JlZTg0LCAweGYxZWY3ODQ4LCAweDgzYjhmZWMyLCAweDM3ZWFiZDYxLAorCTB4YzcwZDIxZmQsIDB4YTY2ZjU4NjksIDB4ZTk3NWM5NzksIDB4N2NhMDc5YzMsIDB4MjA4ZDRmNmIsIDB4YzVlNWY3ZmQsCisJMHg0ZWI5NWZhOSwgMHhlYjhkZjRmZCwgMHhkZTA5ZTkyMCwgMHg5NzQyYWZmYiwgMHhmMjRjMjcxOCwgMHhiMDUxNTRlOCwKKwkweDlkMDQzN2NhLCAweGM2MDA3YTJjLCAweDM4YjZmZWM1LCAweGYzZDJmZWU5LCAweGEzZTI1NzFkLCAweDVmMDViZDdmLAorCTB4NzFkNzFkNTMsIDB4ZDFmOTExNDcsIDB4NzQ2ODZmNGQsIDB4ZmI0NGUwYzgsIDB4YzdjODA1NTUsIDB4ZDAyZmEwZjUsCisJMHhjNGFmNTE2ZiwgMHg2NDdiYTFkZiwgMHgxZWU5NTkwZiwgMHhiNzRkZmFlNiwgMHhkNWUzOGNkYywgMHhiMDlhYjcxZiwKKwkweGFiZTFkNGZkLCAweDQ5NWMxMjI2LCAweDJhNzgwYWViLCAweGZiZGU4YTE4LCAweGJlMDVlMjhhLCAweDNkODFmYzA0LAorCTB4ZTcyZGZjNDEsIDB4YzEzNzAwOTMsIDB4YmEyOWZiMDEsIDB4MDhhZmE4OGYsIDB4MGU0MTMzZDYsIDB4ZWRjODU5YmMsCisJMHg2NWRmNzgyZSwgMHhmN2U2ZmEyMSwgMHhkN2NmZjU2MSwgMHg1NzVmMzQ5NSwgMHg2NGRmN2NkMiwgMHgxN2NjZGY0NCwKKwkweDc4MmNmOWE0LCAweGU3YzI2YWRiLCAweGI2YmZlZTBiLCAweGE3M2RmNzA0LCAweDc5YTc0ZGQ2LCAweDRmZjBjYTlkLAorCTB4NTUzYWZlNDQsIDB4MjEwZmZkMDAsIDB4MGZkYzE3MmYsIDB4MGJmYjJjZjMsIDB4ZDNiNzZjZjMsIDB4Y2YzYjBkN2EsCisJMHhmNjBlZjg4YywgMHg4OWY5ZTYxNywgMHhjZjM5NDNhMCwgMHgwZDNkMzRmNywgMHhjZjQzZjlmMywgMHgyZWZkMGNhYSwKKwkweGM2YzBmY2ExLCAweGJmNGViY2E5LCAweDczMzIxNzEzLCAweDRhNmQwODdhLCAweGRlZGY3Y2E1LCAweDA0ZmJmZTZlLAorCTB4NzhjMDBlNTIsIDB4MjYwZjQ5ZTcsIDB4ZDU1Mzg3YTIsIDB4ZDBjOWU2ZmEsIDB4M2YwN2ZmZGYsIDB4MDBiNzE3MzcsCisJMHgwMDAwYjcxNywgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGNkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZmZiNSwKKwkweDY0OTMyNjY2LCAweDA4MTI0YzkyLCAweDNjOTg0MDgxLCAweDQ5ODQ5MDA5LCAweDc2OGE4ODAyLCAweDAyZDEwNDc4LAorCTB4ODk3OTRmMGQsIDB4NDIxMDA3OTMsIDB4NjliNWEwNWUsIDB4MDI0MGNkNmIsIDB4MzUwZDQ1YTIsIDB4MDFkNDVhMmEsCisJMHgwZGEyYTI4MSwgMHhiYzE1MGEwYSwgMHg0NTYyMmEwMywgMHhiNjhiNTdjNSwgMHg1MTQwMjZlNSwgMHg1ZWEwYzY3OSwKKwkweGZmZDdiNWFlLCAweDRlN2RhZGZhLCAweDU0OTBjZTcyLCAweDdkZmJkZWRiLCAweGRmMWY3Y2ZmLCAweDVhZmQ5ZjY2LAorCTB4ZDdiNWVkN2IsIDB4ZTdiZGFmNWUsIDB4Y2JhYTNkYzIsIDB4ZTRlMjE2ZWYsIDB4ZmY2ZjA1ZGQsIDB4ZjdhNTE3YmMsCisJMHhmYzgxMmVhYSwgMHgwMmNkZGY1OCwgMHgyY2MzOGZmOSwgMHg5MzRhMTRmZSwgMHhmZTcwYTY4YiwgMHhhNTZiOWI2NSwKKwkweGE2ODljNDIyLCAweGExNDFmZGJmLCAweDM2N2Q4NWZjLCAweDBiZjJhMGI3LCAweGNlZjc0NTI5LCAweGVhOGY3ZTQ2LAorCTB4MmZlZDQxNWEsIDB4MjU5ZjY4MGMsIDB4ZDhiOTczODYsIDB4NWRlYWU1NDQsIDB4MmU1MDlhMjMsIDB4Y2FlNjFlMWUsCisJMHgwZGYyZjJhMCwgMHgwOTY0NDI2MSwgMHg2ODU2ZmJmZSwgMHgzYmU5MjM3ZiwgMHg2YmE1MGI1MiwgMHgzNDc4NmY1NSwKKwkweGZkMmY0ZGE1LCAweDZmYTVjOTQ0LCAweDU3OGYzNzU2LCAweGY3MjRhYmYzLCAweGI5N2UzNGRkLCAweGY5ZWQ1ODU1LAorCTB4Mzk5ZWRjYTgsIDB4ZjM4ODQ3MmQsIDB4MDMxMzZkN2IsIDB4MjMzZjMyZDksIDB4YjAzZmNiODcsIDB4NWQ4ZDc5NTIsCisJMHg3YmY4NWFmOCwgMHgwZTZhN2RhZCwgMHhkMmI2ZTI4ZiwgMHgwZmE5OGIzOCwgMHhmYWU5NGE5MSwgMHhlYTYwZWYxOCwKKwkweDkzOGQzMTdmLCAweDhiN2RlMzQyLCAweDBlNWMxZmJmLCAweGU3Y2IwZWRmLCAweDlmYTg4YTBiLCAweGY2NjI2ZDdiLAorCTB4ZjU1ZGQ5NzMsIDB4NGRkYjM0ZjQsIDB4NmQ0NmY2MWQsIDB4NTUzYjU3N2IsIDB4M2NjNjI1ODgsIDB4MjQyMmExZTEsCisJMHg0Nzc5MTRiZiwgMHhhNDMyYmU1NywgMHg3Y2E0MmFiYywgMHhhN2NmYmY0NywgMHgxZjJmMzkxNCwgMHgxZmM2MDM3ZiwKKwkweDEyYzc4NWQxLCAweDJjM2I4ZjBkLCAweDcyZWIxZGY0LCAweDQ0ZDgxMjhmLCAweGJhYjEyZGZmLCAweGZlMDljYmVkLAorCTB4OWI4OGM2ZTcsIDB4NTVhOTRmZDEsIDB4NDdjZGFlMzgsIDB4NWY5ZTBlYmQsIDB4ODYzNDU1ODksIDB4ODdiYmUzZTUsCisJMHhhNmYzZTllYiwgMHhlMmMzMWFmZSwgMHhjZWQxMWYyOCwgMHg4OWJkNTNlMywgMHhkYTllNDM3NiwgMHhhYjlhZTA5YiwKKwkweDRiYTdhM2MxLCAweDRlYmI4NWI3LCAweDdmYTBmM2VhLCAweGE2YjEyZDU1LCAweGJlZWVjZDdjLCAweDdjMDY5M2FlLAorCTB4ZmE3ZmM1MmYsIDB4MzQ0OWJmZDIsIDB4OGJjMDkxZmIsIDB4ZGRkYWFiZmMsIDB4ZTg5MjMwN2EsIDB4Y2RmMTRkYTcsCisJMHgxN2JmNTM3NSwgMHg5ZDFkN2UwZSwgMHgxZjc1ZTZlZCwgMHg5YmViNDQ1OSwgMHg3ZjNlYTZhZiwgMHhiZWRiZTY5OCwKKwkweDQyNmNmNTQ3LCAweGZkZDg2ZmJmLCAweGU3ZmQwYzRhLCAweDZlMGY4YjliLCAweDJmZDVlZmE3LCAweGRkYmI4OWE3LAorCTB4YzUwZmYzNWQsIDB4MTdkZDg1ZTMsIDB4ZmJlOTUzYTMsIDB4MDhmNjQzZjksIDB4YjllNjhjMzEsIDB4OWRhYzdlMzcsCisJMHg1YzQ3NjJlOCwgMHhhZjc4Yjc3YiwgMHhlZjVkZDZkNSwgMHgzNWI1YmNlZiwgMHhkZWExYWE3YSwgMHgzZDFhZDE3OSwKKwkweDI1MmY0MGNkLCAweDhiZDYyZmJiLCAweDVmOWZjNjVjLCAweGVmYzJlZmNkLCAweGM3YmQ3ZDg5LCAweGY0YmRmNGFhLAorCTB4NWFjNmZkZjcsIDB4YzM1ZmJkMjgsIDB4ZjczNmJkZGIsIDB4NmUwOTZiMTMsIDB4Y2YzMDllZmYsIDB4ZmNmYjgyMTYsCisJMHg2ODJkYjMxYiwgMHg3MjhkZmU3ZiwgMHhjYmNkYmQyZCwgMHgyNDRmNWZlOSwgMHg4YjY4ZmM2MywgMHhiYzdkNzdhNCwKKwkweGY3MGI2ZTM1LCAweDdiNjk2YTUzLCAweDhmZGExYWVjLCAweDkzZWJiZmE1LCAweDU1ZDI5MGQyLCAweGNmYzk2YTVlLAorCTB4Yjc2ZjNhYzQsIDB4ZGMwMDJmYjUsIDB4NDZiMTE1ZTcsIDB4ZTdlYWViODksIDB4ZGI5YmI3N2UsIDB4YzlmM2RmOWYsCisJMHgyNzBmZTA2MywgMHg0ZjkwMWRlZSwgMHg0MWY5NGQ2NCwgMHgzZjJhM2ViOSwgMHhhNjQxNTFmZiwgMHg3ZjNkZmE4YiwKKwkweGY4MGY1ZjRmLCAweGZiOWI3NmMyLCAweGJiYjdhNjM2LCAweGY3ZDgzY2EyLCAweGE3MTg3ZjdhLCAweGI5ZWZmZDE2LAorCTB4ZTkwZmE0NjIsIDB4Y2E1ZTEyNDcsIDB4YjhlNGZhZTcsIDB4YWJiZjI1N2UsIDB4ZmI4YjY4ZGYsIDB4MTdlMGQxYmUsCisJMHhiNjc5YjdiZiwgMHhlZmZjYjI1MCwgMHgzMTYyN2Q2OSwgMHg2ZWU3ZWMzZiwgMHg0ZDc0YTFkNiwgMHhmODliNzA5OCwKKwkweGJiODY0YWM5LCAweDIyZWM3ODQ0LCAweDAzMGI5NjRkLCAweDIyODk5NWJkLCAweGM5YjBiZWZlLCAweGYxMTE3ZGZjLAorCTB4YmM1ZjdjMDksIDB4NWNiZGZjZGUsIDB4YTU2ZWFkMzQsIDB4OTgwOTJkZjksIDB4M2ZkYTBiYmYsIDB4NmJlYzA0ZmUsCisJMHg1ZWM1YWZmZCwgMHhmZjdhMDUxNCwgMHg0ZjU0Y2MzNiwgMHg0MGZlMzVmOCwgMHgyNTVmMDkxZiwgMHhjN2MxMWZiNCwKKwkweDgxMDI1MTllLCAweGJiZGY1ODk1LCAweGU4Njc5ZTU0LCAweGE3NzVkZWJjLCAweDIyODdiYjcwLCAweGFiNDE2N2ZmLAorCTB4NWI4ZjVkNjEsIDB4ZjA5MTM1ODQsIDB4MWMyZWRjN2EsIDB4NDdlOGY5ODksIDB4ZjVmYTg1MDgsIDB4NmMwYjBiZWYsCisJMHgwZjc3MjZhMSwgMHgwNGI5MmFmZSwgMHhjMjMxYWY3YywgMHg1YmJlMDgyMiwgMHg0MjdjZTA1ZCwgMHg0OWY3ZDhhYywKKwkweDVkMjlmYTMyLCAweDM1NmRlODUzLCAweGU2YzE3N2MwLCAweGQ0ZTdlODdkLCAweGUyNWRmZGJlLCAweGY4ZWY1NGQ3LAorCTB4NThkMzQwZDgsIDB4ZGRmOGViODIsIDB4MWJhMWE3YWEsIDB4YjFhZjRlYjgsIDB4ZTEwMTQwODgsIDB4MDIyMTJlZTMsCisJMHhmMjdmOTRmMSwgMHg1YTYyZTQ5MywgMHg3Y2I2Y2Y5NywgMHhhNDYyNWM5MiwgMHgzNmNjNDU3ZiwgMHgxMjllYTNkMiwKKwkweGVmM2ViYzI0LCAweGZjZDJlZjYxLCAweDMwNWNkMzhlLCAweDVkN2FkMDlmLCAweDU3ODY2YmViLCAweDJhYjg2N2M3LAorCTB4ODdhM2JiNmEsIDB4NTRmNzQwY2YsIDB4NTU3N2Y1OWUsIDB4ZjdlZmIxNzgsIDB4Y2ZhMDAyZDksIDB4M2M1ZjhkYzgsCisJMHhiOWY0MGYzOCwgMHhhMTRhZTZkNywgMHhhOWY2NmJiMSwgMHgyZGU2OTU1ZSwgMHgwYzgxYThmNiwgMHg0ZjdiNjM5YywKKwkweDljZTA1NzQ0LCAweDUyZTA1M2Q5LCAweGQ5YWVmMzBkLCAweDdjZTExNmEzLCAweDYyZmJiZjM5LCAweGY3MzY2OTQyLAorCTB4NDRlZGM1MzMsIDB4YTAzYzA3ZmIsIDB4ZjhlMDllZGYsIDB4ZjdmZDViOWIsIDB4Y2NkNzlmZjgsIDB4N2Y2NWNlZmYsCisJMHhmODAzNzA5MCwgMHg5OTUzYzZjMCwgMHgwN2M0ZWZlMCwgMHg3OWE2ZTZmZiwgMHhjNmZjY2Y5ZSwgMHhhZDEwYmM4ZSwKKwkweDA0N2Y0MTIzLCAweGUwOWJiNDVmLCAweDJhZjgxMGJjLCAweDhlNWMxMDVhLCAweGQwMzdhYWJkLCAweGE1NDQzYWNkLAorCTB4ZmY0ZjE5ZDgsIDB4MDkxMzdjMzIsIDB4ZjgyZTg0YmUsIDB4OTRhODllMDgsIDB4NTY3MDVkMTEsIDB4MzhlZGRiYmIsCisJMHhhMjM4MmY2NywgMHg2OTRmYzE3MywgMHgxMmYyOTM0MiwgMHgwZGM5ZjNiNCwgMHg0OTNhNWFmZSwgMHhiZjFkN2YxMCwKKwkweDcwY2FlMTY3LCAweDhhNGQwYmM4LCAweDk3YmU4YzI3LCAweGRjZjk1NWVkLCAweDE5MWJkYjJhLCAweDNmMTgxNmMwLAorCTB4ZDJmOWM5YzgsIDB4MTg0MGQ1NDcsIDB4YTNhODI3ZTUsIDB4ZWE5YjMwZmYsIDB4ZjU0N2JlMmYsIDB4ZmIxNDhlZDAsCisJMHgwN2Y2ZGUzNywgMHg4Mzc1ZDYxYiwgMHg4ODFjYTA0ZCwgMHgzNDRiNWMwMywgMHhmZGVjOTZiOCwgMHg4ZDBhNjdlMSwKKwkweDJkZGY3OGIzLCAweGUyY2UzMDA3LCAweDE3MGYxNDA3LCAweGU4ZWRmM2E4LCAweDhhNDNjOTc3LCAweDY3NDA1Nzg4LAorCTB4M2E0NmUzYjYsIDB4Y2U2NGQ4NWIsIDB4MGJhZDEyMmYsIDB4YzFmYzE1NTQsIDB4OWVmMDlkZmMsIDB4OTZmZDQxNWMsCisJMHhkZDczMGVlZiwgMHhhMTAyZjE4ZCwgMHg0YWJjNDJlNSwgMHhmZjY4ZDRmMCwgMHgzYjU4Y2FjZiwgMHhjZmQ1MDBmNywKKwkweDNjNjc2OGRhLCAweGUyMTcwZjljLCAweGI1YWJmNjA4LCAweDBkMjA0MTM1LCAweDFkNjMyNmI2LCAweDZiZjllZmNmLAorCTB4ZTZiMWQ2MzIsIDB4Mjk5NWZmNzcsIDB4Y2ViZjU5YmEsIDB4YWEzN2I0ZmQsIDB4MjE0OGE5ZDcsIDB4YzQ1MTRlYWUsCisJMHhmYmEwYTliNywgMHhiYThhNTM4YiwgMHgyMDFiNmZhOSwgMHg5YjM2YzVmNywgMHhjYTg3OWZiZiwgMHg4YWZjNmMwZiwKKwkweDNkODVjMWY5LCAweDZlYWU4MWJlLCAweGJmNmJiN2U4LCAweDg5MmRjM2ZhLCAweDAyZTE4MzQ4LCAweGQ3MTZmMGU5LAorCTB4MjQyN2Q4MGQsIDB4MzViZTYyMGYsIDB4ZGI0ZjU2OWIsIDB4OTdmMGY5NDQsIDB4NDRiOTM4NmMsIDB4Zjc5Mzg2NGQsCisJMHg0MmM3ZjYwYiwgMHgzZWZhYmY0MywgMHg4MGJlMDZkOSwgMHgwZmU0ODQ3NCwgMHgxY2YyMDFiNiwgMHg3YjlkYWEzZCwKKwkweDRjNzdmNmRiLCAweDllMDZlOGM5LCAweGQ3MWI2ZWEzLCAweDVjMTAwZGIzLCAweGQxNzc1OWVmLCAweDg0NWJkMDVjLAorCTB4YmUwZDFmYzUsIDB4Nzc1ZWJjMmQsIDB4YTJiM2MyMmYsIDB4NWQ0MzU3ZDEsIDB4ODllZjgyYWQsIDB4ZmVkMzg5YTIsCisJMHg0N2QzODVhMiwgMHg1MTM5ZjA4NSwgMHhjMDVjNzg1ZiwgMHg2MjAzMTBiMywgMHhmM2RlM2Y4MSwgMHhjY2JlY2Y4YywKKwkweGFkYWM3ZjM3LCAweGU4MzU3ODIxLCAweDAyMmIxZmM0LCAweGVhZmZlODViLCAweDYzNTA4NzQ2LCAweDQ2YjVlZDIwLAorCTB4Y2U1NDUxYTMsIDB4NTIwNmZiYjQsIDB4ZDUwM2VkYjksIDB4MWRkZTQwYTIsIDB4YzdhN2FmYTAsIDB4YTVmN2ZkODUsCisJMHg3MThjNDY3MywgMHgyZTFmZjZmZCwgMHhhYWZlODg5OSwgMHg4YzIyYTk3NiwgMHhkM2I3M2JmYSwgMHhkNDRlODIyNiwKKwkweDdjMDJmZGE3LCAweDllYzJmZTFjLCAweDU3YjRiZTAyLCAweDZiOTc5MDExLCAweDM1ZWY4ZjI4LCAweDgwZGVhZGEzLAorCTB4YTQ3NzJmMDEsIDB4ZDUwZjE4ZDgsIDB4OWNmMjk5MjksIDB4NGQwZjdhYjYsIDB4YmJjZjdlYTIsIDB4ZWI5MGVjNGEsCisJMHgyNmNiODc2ZCwgMHgyNWIxYmNlMiwgMHhkNzAxZDg5NiwgMHgxZDYzYzNmZSwgMHg1OGI3NTgyOSwgMHhkNTliZWYyYiwKKwkweDhmNzFmNTdiLCAweDU0N2ZkMGI4LCAweDZmMGMwN2VjLCAweDQ0NDViNjYzLCAweGEzYzZiYjUzLCAweGE2NDYwMTYxLAorCTB4MzBhMWYyNDMsIDB4YzE4ZGFmMGQsIDB4Mzc3NzBlZjEsIDB4ZTMxN2UzZWIsIDB4MmEyOGM0OTMsIDB4MDQ0ZWE5ZGYsCisJMHgyNTVjZTc5YywgMHgyZGEzYWMyZSwgMHgwYWVlZTg5NiwgMHg0ZWYzNmY2YSwgMHgwZGZhOWFiYywgMHgwNzhiOGQ4YiwKKwkweGQyNTI2YjdjLCAweDhhYmYzZDc4LCAweGJmMzg2NWFkLCAweGNmYzJmMTIyLCAweDA4YjZiN2ZiLCAweDY1ZmVjNmY5LAorCTB4ZTliZWUzMmEsIDB4MzVjZmRlMjEsIDB4ZDQ3ZTM5MGUsIDB4NTFjZjk1M2UsIDB4ZTM0M2E1NzEsIDB4NGFiYmVmZGIsCisJMHhjOTA1OWM2OSwgMHgwZjQxNDdiZSwgMHhjNDZkZmM5ZCwgMHgzOWZjMDJhYiwgMHhmOTYxNjJjYiwgMHhlNzM1ZjFhYywKKwkweGJkMjFmMDVhLCAweGE0OGE2Y2ZjLCAweDU2M2Q3ZDM3LCAweGMwYmFiMmY1LCAweGU4ZDUxZTNmLCAweGM4YWI5NTczLAorCTB4YTc5ODZmOTEsIDB4YzM0NWI3YWQsIDB4NzgwMzkxNTcsIDB4M2EyZjYxZGEsIDB4OWRhNWYzODQsIDB4M2NkY2UzYmUsCisJMHgwMWNkMzg5MCwgMHg1OWVhODUzZCwgMHg3YWE5Y2ZkMCwgMHhmNDc2MzFkYSwgMHhmYzAxYzMzYiwgMHgzMjU1ZWEyZSwKKwkweDhiMTZlZDAxLCAweDZmZDhkNWRhLCAweDIyYWJkNzhiLCAweDhkYWJlMDY4LCAweGEyZWUzOTM2LCAweDE4MjIxMTRiLAorCTB4MjJlZTM1ZGYsIDB4N2Y2ZTNmNWEsIDB4ZTkwNDVhMjksIDB4OTcwYzZkZGMsIDB4ZTRhMzFhZjUsIDB4NDUyMzc5ZmUsCisJMHhiNTBmOWZlZSwgMHhmOTY5YjRmOSwgMHg3YmFmOTk3ZiwgMHg1Y2ZkN2NjYywgMHg5NmI2MWZlYywgMHg0NmZlZmU0OCwKKwkweGE1NWJmNTBhLCAweGExNDg0ZWI0LCAweGVjNGVhZGY5LCAweGE3YmYwM2IwLCAweDk4MjI1ZGVhLCAweGIyZjc4MDY5LAorCTB4YTA4YmM2NzksIDB4N2FjZWRjNjEsIDB4OWYzYzFjOTcsIDB4MzM3MGY1YWUsIDB4NzVmMzVkZmMsIDB4ZDU0ZTFlMzIsCisJMHg3YjFlMzIyNywgMHg4NGM5M2ZlZSwgMHg1M2ZlYWVjNywgMHhiY2JjNzg0ZCwgMHhmZjFlNGNmZiwgMHg3N2Q2N2Q1NCwKKwkweDg3YjQzZmY0LCAweGY4MjZkZGZlLCAweGU3NGRmYWJiLCAweGRmNmVjNTcxLCAweDNiOTdmMDQwLCAweDk4MGZjNDVkLAorCTB4NTA1Zjg4NmUsIDB4M2RmMTVkYjksIDB4ZGJlNDM1N2UsIDB4ZTQwNGMyOGYsIDB4N2RjMmFmYmUsIDB4ZmUwNjVjODMsCisJMHg2NWNlMGRmMCwgMHg0OTgyZTdkNiwgMHhkMTdlYjdlMCwgMHhlZWNkNjljYywgMHhkZWQwMTM4YiwgMHhmYjAxN2M0ZCwKKwkweDExYWYyZjQ5LCAweGY4MjcwY2VkLCAweDM1ODNlODg1LCAweDdjYjliYWI0LCAweGY0MTA2ZmI3LCAweDRlOGUxZDIyLAorCTB4YTc3NWU2NzksIDB4MjBmYjQyZGYsIDB4YTNkZmRmNmMsIDB4NTgyZjhmYjEsIDB4Mjg3OGE3ZGIsIDB4NDZhYmQ5NmQsCisJMHg3Yzc1ZjcxYSwgMHhiMWE3YTRhYSwgMHg2ZGM4YmUwMywgMHg2OGQ1ZWZhNSwgMHhiNmVmN2M0NywgMHgwMjBlOTc5NywKKwkweGRhYzNhYTdlLCAweDgxZjcwMTczLCAweDhiOTZmZjk3LCAweDdkYWJlNDczLCAweGZiZTIwNzRiLCAweGYyY2ZhYTM2LAorCTB4ZGFiZGJkODcsIDB4NWQyZmU4NjMsIDB4NTE5NmZjYjgsIDB4NTUzM2E5NWQsIDB4ZWZkMGZmZWUsIDB4ZjQzNWY2ZGIsCisJMHg4OWRiMWMwMywgMHgwYjkyMDliZCwgMHgwYTJhZWJhYiwgMHgwZDgzYzY0ZSwgMHhmZjA3ZWY3OSwgMHg1OGI3YzQxMiwKKwkweDVkM2RkYTFmLCAweGVlZjkwMzFkLCAweDI4Nzk5MjQzLCAweDk0OGY3YzNmLCAweDEwMGY4NjFiLCAweGU0MGE0YjAxLAorCTB4ODM2NzBmYmUsIDB4YjA4ZjU0NGYsIDB4NDcwYWEwYmIsIDB4Nzk2MTFkZTQsIDB4YzM4NDYyM2IsIDB4YmZmZDUwYTUsCisJMHhkYmUzOTdmNywgMHhhMWE0MmYyMSwgMHhlODNjNjE3ZCwgMHhmMTY0Y2FmOSwgMHgxYjZkYzllZiwgMHhmMDRmZjY0MiwKKwkweDM0ZWRlYWJkLCAweDNhZGE5NTVlLCAweGZiYzI5YzY1LCAweDdjMTUzZjI4LCAweGRlMmZhZGZiLCAweDA0ZDdmNGQ2LAorCTB4OWMwMWNmYWMsIDB4ZmJjZjA0NmIsIDB4YTk2NTNmNWEsIDB4Y2Y1MDJiYmUsIDB4ZTdiZDY4ZTcsIDB4NzMzN2FhMGEsCisJMHhlODY0ZGY1NiwgMHg3ZTlhYzU0NywgMHg1MjExMjYyNiwgMHg5NDdlNjRhZSwgMHhlNWM4M2IwMywgMHg4M2Q0YjZlNywKKwkweDNlN2M1MjVlLCAweGQ3ZGZjMWUwLCAweDM1ZjljMWUxLCAweGZhMzg0OTM0LCAweDYyNDU1ZTEyLCAweDhkMWE3NTIwLAorCTB4YTJkNTIxM2IsIDB4YzAxNDBmZGIsIDB4ZTM5YjQ0M2QsIDB4OTY1YWZkMzMsIDB4MTkzOWYyYzcsIDB4ZmQxZDAzODgsCisJMHg0YjRlZTNiMywgMHhmYzA2NGVmNSwgMHg2NzBmZmQ3YSwgMHg3NWYxY2JjZCwgMHhmMmU4NmU3MywgMHhiMmRlZGRiYywKKwkweDU3YjY3MDBjLCAweGZjN2Y1OTM5LCAweGVlZDQ0NTAwLCAweDQxNjE1OTg5LCAweDhhN2ExYTM1LCAweGY5ZjQwZDczLAorCTB4MGUwYjkxYTMsIDB4OGM3YzI2ZjYsIDB4NDNjZGYyOGYsIDB4YmM2ZmIzZmYsIDB4Y2FmMjM1N2UsIDB4NzJmNzc4ODEsCisJMHhlYjcxNzNkMCwgMHhjMmVmZDY0OCwgMHhiY2EzMzc3ZCwgMHg5ODFiZTFkMiwgMHgzNzNjNTM0MCwgMHgwNjI4MzdjMCwKKwkweGJjNTE3Yzg3LCAweDk0NTEyNzVjLCAweGZjMmRkNDUzLCAweDQ1NjI5ZTEyLCAweGU1MThkZjhlLCAweGM1M2Y0NzJiLAorCTB4NWQ4ZjIzOTYsIDB4MjNkNjZmODEsIDB4OGQxMDZmNmMsIDB4NzM5ZmI5YmQsIDB4OWRkZTUxNzYsIDB4ZTFlM2FmZmMsCisJMHhmZDhmMzY5OCwgMHgyNWVkNzEzNiwgMHg3NWZlZGY5YSwgMHg4MjA2OWUzMSwgMHgxYmNlZWNiNywgMHhiYTUwZDQxNywKKwkweDEwOTQ1MmQwLCAweGRmNzA0ZDU0LCAweDU3NWQ0YTk2LCAweGY2MDc4YmZhLCAweDljZWU3OTI1LCAweDRlYmI4MzRkLAorCTB4Y2FlYWRiODMsIDB4NTBlN2VlMzQsIDB4Nzk3NDFiYjgsIDB4ZWIwYTE3ZTUsIDB4Zjk0N2ZjODMsIDB4ODFiMWZkMTcsCisJMHg2NjFmMjliYiwgMHg3NGMxZjhiOSwgMHgxNjM5NWI5YywgMHg4ODZjOTNiNiwgMHg3YTQ1YmRhMCwgMHg5YzFhM2JlNCwKKwkweDczYmVkMjhmLCAweDM1ZjdmMWM0LCAweDIxMTg5ZWY4LCAweDY4M2UyN2RiLCAweDUwN2VjMDA5LCAweGFmMGY3NjM0LAorCTB4NGVkNTEzZDMsIDB4MTU2MzRhOGYsIDB4NzIxZGI3MGIsIDB4YjJmMGE5NTAsIDB4MzFkN2ZjZmUsIDB4NGFkN2RiN2YsCisJMHhmNTRlNmFmMywgMHhkZGJjMDdkZCwgMHhmZTQ5NmYxYywgMHgwZGYwZTE4MCwgMHg2Yjc5MGE5ZCwgMHgzZmM3OWNiNCwKKwkweDFlNzkzNzkwLCAweGM2Y2I4NGQzLCAweDZiNTg5OTQyLCAweGNkMzFmYzgxLCAweDUwYjJhNzI1LCAweGJhNjNmYjkxLAorCTB4ZGUzMGRhZjAsIDB4N2FlM2UxNGMsIDB4N2JiNzlkZWYsIDB4MDdiYzRmYTEsIDB4YmVlMDg4NWQsIDB4ZmJmOWY4NTEsCisJMHg3NGUwMTExYywgMHhmZDcyMDg5ZSwgMHhlNzJiNDQ5YiwgMHg3ZDEzN2M3NSwgMHhkMjRiZGNkYywgMHg1NDdkMjdjNywKKwkweGMwNTZmZmM2LCAweGVlNjQ2ZWZkLCAweGM3OWEzYTgwLCAweDY1MDY4N2Q0LCAweGRjZDU3ZWIwLCAweDVkZjNmMTliLAorCTB4ZThkNTRmNzAsIDB4NmZlZmY2ODYsIDB4YmZkODhlYjEsIDB4Njk5ZmE4MzMsIDB4ZGZlYzg0MzcsIDB4ZjVmNWJkZjEsCisJMHhmYjQ3ZjhjYywgMHhhNzQ3NDhlOCwgMHg0YmVjZTRmZSwgMHg1YjRlYjg3OCwgMHg0YmJjZWJkMiwgMHhjMjEyN2Y1OSwKKwkweDhmZDFmMmM1LCAweGE4NWI3ZGI0LCAweDVhMmY0NTNhLCAweGQyNmUyMzlmLCAweDg5OTYwODk3LCAweDYyMjU5NjYzLAorCTB4MTBhZmFmYmUsIDB4M2FkMDE1NmYsIDB4MTU0NjNlYmUsIDB4Y2JkMzVjMGQsIDB4ZmQ2OGE2ZWQsIDB4ZTEzZmU5NGQsCisJMHgwZjViZDgzMywgMHhlMWFmNjA4YiwgMHg5MmYwYWVkNCwgMHg4MjE4ZDVlZiwgMHhiZGJhOGE3YiwgMHgyN2NhOTYzMSwKKwkweGM2YmQyN2Y2LCAweGVmYWVlZmMwLCAweGZkMGFjM2I1LCAweGYzNzQ4NmVlLCAweDY2ZDk0OWY3LCAweDY4YjI2N2ZkLAorCTB4OTRmZTMxNTIsIDB4ZmI3YWU2ZTEsIDB4YjNhMjI3ODEsIDB4ZmVhNTUzZjcsIDB4MjE4ODg2MjIsIDB4MGI3YWYyZGYsCisJMHgxZDNlNzE4YiwgMHgyZmRhMmU5MywgMHg2OTExMWMxMCwgMHgyZWIxOGZiZSwgMHg3NWZmMjdjYiwgMHg1NjE1YzYwMSwKKwkweGI3ZWE5ZjM5LCAweDFkZWJiNjU1LCAweDI4OGI3OTI3LCAweGE3YWM5YzUwLCAweGNhNTMyMjkzLCAweDRhN2ZjODI1LAorCTB4ZDNkMjAzZjIsIDB4Y2Y0ZTZlZjUsIDB4ZjI4Zjc5ZDIsIDB4Y2UxZWY1ZjMsIDB4OWQxNWE0MTcsIDB4NmIyNWJmNDAsCisJMHg3ZDYyYjczZSwgMHhmODk3MGNlZSwgMHg5YTY5NmYyZSwgMHg3NjJhYjAwMCwgMHg1YTQ0MWNiNywgMHg4MDlhMmMxNiwKKwkweGExZDE3NjYzLCAweGVmNDg4M2RhLCAweDZhZGJkNGVjLCAweGUxZDNiZTU5LCAweGQzYTM0NWJlLCAweGZkYTZhMjViLAorCTB4ZTFkNjg3MzAsIDB4ODdhYTNkOTYsIDB4NGRhNjAzZjMsIDB4NzkwYmRjOWYsIDB4YTI3YmU3MWIsIDB4NDQ0YmFhYTMsCisJMHg1NDU3MjQzMywgMHgwMTJmZGVhYiwgMHhkYjZmNzc5NywgMHhkZjlhNzhjMSwgMHgxOGEzZjUyNywgMHhiZGVhY2ZlZSwKKwkweGZhOTlmNzBjLCAweDRhNGU5Yzg5LCAweGU4MWJmYTJiLCAweDY3M2UyYmNjLCAweGY2ZjI2Yzc5LCAweGQ1MTI2YjM2LAorCTB4NWUyYWY0MmYsIDB4YmQ2YmRiZWMsIDB4ZmRhMDEwMjIsIDB4Y2YyNmRlYjcsIDB4MGU3NGY1ODEsIDB4Yzk4ZjFmNjAsCisJMHhhZGU4ZjY5OSwgMHg2N2RhN2MwMiwgMHg2NjcxYTM0YiwgMHgxMGE0YjBkZSwgMHg1NTE5NGNlMywgMHgxYmJkNDU2YywKKwkweDIwMTkyMWJmLCAweGJmNGU4YmE1LCAweGY5ZjVlZThiLCAweDc2ZWI2OTU3LCAweGYxODU2NWVlLCAweDJkMzNiMWQ4LAorCTB4ZjJjMTcyMDYsIDB4OTA3ZDY5NWQsIDB4ZjVkNGJmMTIsIDB4YWRlMDQ4ZGQsIDB4ZTE4NTkyZTMsIDB4YzExYTM4ZWMsCisJMHg2ZWRlODZmYSwgMHhlNjQ4YWVmOSwgMHhkODA3Y2IzYiwgMHhiNzYwYzIwMywgMHgyY2ViNDMzYywgMHg5OWU2ZjIwYywKKwkweDM2ZTI3ZTY3LCAweGUyNjcyYjllLCAweDE4ZmFiZTVhLCAweDkyMmZlZGZjLCAweDczNjQ5MWJmLCAweGJmZjAxMWVhLAorCTB4YTAzY2ZkZmUsIDB4OWM5YWYzOTMsIDB4MjQ0NjdhNGQsIDB4Y2Q2YWJmY2UsIDB4ODRmZTA4YWUsIDB4NjkwODk5ZmMsCisJMHg2Y2Y5MWRjZiwgMHgyZmVjNThkMiwgMHg0ZTFjNDc4YywgMHhmMzJiZmNlOCwgMHg3ZjUyODdkOSwgMHg2ZjFhZWVlZSwKKwkweDhmYzJjYjViLCAweGI5ZmNhMTFmLCAweGEzNmZjNTgwLCAweDY4OWNlOWYzLCAweGYwM2JmZjM5LCAweGI2NGVjZGRmLAorCTB4MTBhOWRkZWIsIDB4Yjc3ZjM4M2MsIDB4OTY3Y2UzZjQsIDB4YzNhODhkNjIsIDB4YmMwMjJiZjksIDB4YjcxNGIzYmYsCisJMHg1NWY4OGViNSwgMHhmNzBmNzNlNSwgMHg0NGJkZmQwMywgMHhlNTQ1MTgzOCwgMHg2NDhiYWQyZiwgMHhjZDkyZjY3ZSwKKwkweGZkMGVhYzczLCAweGZiZmIyYTNkLCAweDNkM2ZiZGNkLCAweDNkZTkxYmJlLCAweGM1M2ZmOTU1LCAweDMxYzVhNGYyLAorCTB4YjU3ZWNiZmUsIDB4ZDNkYTA4NjQsIDB4NTJmYTJlZjksIDB4YThiZjRmN2YsIDB4M2Y2OWMzMDQsIDB4NWZlZjM0ZTcsCisJMHgxYmUwOTdkOSwgMHhkMmNkYTFiNiwgMHhjZGJjZDI4ZiwgMHhhMWQyMDM0YSwgMHgwNDM4NmUwMywgMHg2OTBkZjNiYiwKKwkweGIwNWY2ZTZlLCAweGMyNGQ0NTNkLCAweGY4MTdlYzM2LCAweGVlN2MwN2Y4LCAweGVjODFlNTliLCAweGY2YzdjZmU2LAorCTB4YzE3MjVkMTMsIDB4ZjRlNWE1MTAsIDB4MmMzNTgyNDYsIDB4OGZiZTY4ZjksIDB4ZjNjNGQ3ZjEsIDB4ZmE3N2I1ZDksCisJMHhlNjA0ZjNmYiwgMHhlMDA3MTI0MSwgMHhmODdiYjYyZSwgMHgzN2Y4MGExYywgMHhmOWNmM2Q2MiwgMHhkN2FjM2NiMiwKKwkweDA2MWZmOTE1LCAweDI1ZjM5ZDlkLCAweGJkMmU3MDc4LCAweDU1ZmM3YTQwLCAweGNhY2M3ZmE4LCAweGYzNzE3Y2YzLAorCTB4ZWJiMGQxYmIsIDB4MWM3ZTkwYzQsIDB4NWU0ODdmMGUsIDB4YWZkNDA0ZmIsIDB4N2UxNmUwMWEsIDB4YjFlMDNmNmEsCisJMHgzZjAyMjZlYiwgMHg2ZDc3M2JkNSwgMHgxZDJhN2VlNCwgMHhlNWI5ZTgxZSwgMHg0YzFlMmViYiwgMHhiZDc4OWM4MiwKKwkweDBlODA2NGYwLCAweDJmZmNjYTc3LCAweDJhM2Q3YmM3LCAweGUzN2NiNTRkLCAweGE0N2YzMjk3LCAweGE0NDVmMzg4LAorCTB4YmY1MTVhNzUsIDB4MGY0N2NhNTQsIDB4Njg5ZmU3NjksIDB4YzhmZTY1Y2QsIDB4NWFlZWVkYTQsIDB4MzE1MjVmYWYsCisJMHhmOGE3ZDdjYSwgMHhhZGFlYzJmYiwgMHhkZTc0OWI5ZiwgMHhhYjYxYTU1NSwgMHgyM2ZiNjVkOCwgMHgzMzI1ZTc2MywKKwkweDc5ZTdiZTVlLCAweDJkY2VkNzY3LCAweGVjODdiZmJkLCAweGZkNGUxZmMyLCAweDNiMDM2Y2MwLCAweDNjYmIwNmZhLAorCTB4N2YxMGI3YTcsIDB4ZTdlOGJkMDEsIDB4MGJmYjhkMzQsIDB4ZWY2YTVmZWMsIDB4NTI0ZDNmMDUsIDB4ODQ5ZDljOTUsCisJMHhjMjg3YTQ4ZiwgMHhiZWY4Y2U1OCwgMHg1OThlY2ZlMywgMHgyZWI2ZTdjZCwgMHg0ODQ0ZDU2NywgMHgwNTY3YzgzZSwKKwkweGU1MTg1ZmI1LCAweDViZjMwYmJiLCAweGMyZjM5ZGE4LCAweDFjODZjZWVhLCAweDdiY2EyMzMyLCAweDNhNTdiZTM3LAorCTB4MDczMTkzZGEsIDB4NDVlZjNmM2EsIDB4YjkyNTVhYmUsIDB4NzcyMGNkMmIsIDB4ZDdiZWUzMzksIDB4ZTUxNzU5ZjksCisJMHhiZTdjYzY2ZCwgMHg5MWIxZmQ2ZiwgMHg1MjBjNjcwNCwgMHhhZDIyY2Y1ZCwgMHg5YzdlNWJhMywgMHhmYzA1YmRiYSwKKwkweGM5MzA4MWY4LCAweDk4MGFhMzhmLCAweDBiZjNlOTFmLCAweGRhMTVmZmVkLCAweDMzZTIzZWY3LCAweGUyNzlkMWFmLAorCTB4NzM4ZmRjMjMsIDB4N2FmMmIxOGUsIDB4M2NhOTZhYmUsIDB4YTE3MGU3NDgsIDB4NmM4NDAxMWMsIDB4NzljZTFkOGQsCisJMHg2ZmUxMTQ2ZiwgMHhiZTE1NTNiYywgMHgzZDQ1ZjQ2ZSwgMHgxZTdhZjVhNSwgMHgyYmQwOTlmOCwgMHhiMGFmNTRkMiwKKwkweGZiMWRhYzU3LCAweDViY2VmYmY3LCAweDhkNDdkNmQ1LCAweGJiYTlmOWQwLCAweDM3NzY3MDk3LCAweDViY2YzOTZmLAorCTB4MDFmNDQ3YzIsIDB4ZGYyYWM2NWUsIDB4NWIwZWJlNmYsIDB4YzNhYzQxZDEsIDB4OWYxZTY3MzgsIDB4NTM5Y2UzOGIsCisJMHhjMzA0Zjk4ZiwgMHg0M2RmMTg3ZiwgMHgxZjNhMTllNywgMHhmMjdlZjhlMSwgMHhlMTE1OGZkMiwgMHg3ZGZmNjBiNywKKwkweGRhZmI2NzZlLCAweGQzZWI1YjVlLCAweGVlN2MyNWJmLCAweDgxZWQ5MjVkLCAweGYwMDVlODlkLCAweDY4Y2ZmMDVlLAorCTB4N2JiM2NiM2IsIDB4N2MxZjg0YTMsIDB4ODRkNGVmNjUsIDB4MmY0NWVjMDAsIDB4ZGYwNDRmNDEsIDB4Nzk2NDJkZTgsCisJMHg3N2JmYWNiOCwgMHg3ZjUzOTUwZSwgMHg1ZjY4YzJmZCwgMHgyZjM0NWVjMCwgMHgwNjlmZWI0MiwgMHg3ZDE1ZmI0NiwKKwkweDUyODM3ZGI4LCAweGRhMGU2NmZiLCAweGJlNjQ4OGFmLCAweGY5MjAzNDczLCAweDcwNmM3Mzc4LCAweDliZGY0YTllLAorCTB4YTgxNGNmM2YsIDB4ZDYwNDU0NzcsIDB4ZWRkZWEyYTQsIDB4ZTU0MzVmZDIsIDB4NmZkNDM1NDksIDB4MTIyMTkyZjMsCisJMHhmOTUxZmZjZSwgMHhmM2NlNjhkYywgMHgzMjczOGRmNiwgMHg0Y2ZiNjcxZiwgMHg1ZjZmNTRmMywgMHg2OTdhYWZmOCwKKwkweDUxYmNkNWViLCAweDNkODNmNzk2LCAweDk0MjllNTE0LCAweDliNjNmNGE3LCAweGFiNTczZmFjLCAweDk3NDY5MWY3LAorCTB4MGY5OWNmYjQsIDB4NWE0NGE2ZjgsIDB4ZDJmZGU3NDEsIDB4OTlkMmMyNGIsIDB4YzJmYjc5MjksIDB4NTk0OGYzZWYsCisJMHhlNzI4ZGIwNiwgMHhjMjlmNWM1NiwgMHhjYmQ5YTNmNCwgMHg1YjdjNmI2NiwgMHgxYzBkMGZlZiwgMHhjYjJmMjEyMywKKwkweGI3MGIzOWJmLCAweDY3OWU4Mzg0LCAweDQxYjc4Nzk2LCAweGJlNWEzYmVlLCAweGZiN2EwYTMyLCAweDBjMWE5ZjRjLAorCTB4YTMzOTVjODMsIDB4YWYyOWRiZDAsIDB4YWY1YzYyYTUsIDB4ZDc0Y2I3MWMsIDB4YzBhNTgyZmYsIDB4MGVlZGNiZWIsCisJMHhmN2NiMzc3MSwgMHgzZWEzMDJjMSwgMHg1NTZmYWZhNSwgMHhhMzc4OThjYiwgMHgyNzYxNWNkZSwgMHgyY2YwNDJmZSwKKwkweDlhNmRmNmQxLCAweDdkM2JkN2QzLCAweGViZTlmNDA0LCAweGY0ZmE4ZGUzLCAweGU0MGY2NWE3LCAweGM2ZDJmZWYyLAorCTB4OGRlZjViM2IsIDB4YjkwZTk5M2YsIDB4ZmFhNzIyNmQsIDB4MGY3YTlkNzgsIDB4NTdlNzRkZDYsIDB4MjVkYjk3YTAsCisJMHhmYjZiMDhiZCwgMHhkZjI5OGI0NywgMHgwNzg4N2IzMCwgMHhkMzg5ZWFmNiwgMHgxZDZmNGMxYywgMHgxZjJjZTEyZCwKKwkweGYwOGVjYzM3LCAweGIwZDc2ZWMyLCAweDA2ZWQ4YzJiLCAweDgzZmI2YjM3LCAweDFiYTYyOGY0LCAweGVlMjhiZWZmLAorCTB4ZjMyZWQyYTcsIDB4MzA2NWNmOTUsIDB4MGY2MGJjZGQsIDB4ZTUxNWI5M2MsIDB4N2ZiMzg3MmYsIDB4OGU1YTMyYjYsCisJMHgyNGJiZjk1YiwgMHgyOWJkMmU4ZCwgMHg1ZmIxN2FhYiwgMHgzMmE1ZTk4ZSwgMHhlNWMzMWRjMiwgMHg3YTY3OGZiZiwKKwkweDU3ZGMzNjdhLCAweDdkMTI3YzAwLCAweGQyYmM1ZGIyLCAweDI1OGNjYzFlLCAweGU4ZDMxZmZjLCAweGZiMjM3YTBmLAorCTB4OThhMzZhZjUsIDB4Zjc5Njg1NmUsIDB4ZjU5ZTNjZmQsIDB4Nzk3ZjkyMzgsIDB4NDM3ZGRmM2MsIDB4N2JiM2VmMzksCisJMHgzZWM0MmVmYiwgMHhmMGM5MWU1YSwgMHhmMmM5NzMxYywgMHhiY2IxOTU2MywgMHhiN2RmZTYwZiwgMHhjNWZjMzBmNCwKKwkweGJjZWM4YWM3LCAweDU1ZWQ4ZTVmLCAweDczZmFkZTU5LCAweDlmODQxYTlkLCAweDlhY2ZhNzViLCAweDg2ZGZjNzI1LAorCTB4ZTFiYWE4ZjksIDB4ZDRkZGU0YTMsIDB4NTU5NWZjY2YsIDB4N2U2ZWQwOTMsIDB4NzA1M2VkYzUsIDB4ZjY5YWY2ZGUsCisJMHg0MzY5ZmIyOSwgMHg0YWZjZjNmNywgMHg5N2Q0N2ZiMywgMHhmOThjOWRlZSwgMHg3NjA3NjRkNSwgMHgxZTdlYTQxYywKKwkweDExNmE3MzljLCAweGVlOWZkM2Q2LCAweDNlZjU4NjliLCAweGUxN2Q2ZjZmLCAweGViNzcwNDRmLCAweDVlYjIzZjhhLAorCTB4NmZiNDdkNzQsIDB4ZDg1ZmJlMjYsIDB4NWZhZTFiZjMsIDB4MTZiZmYyYmQsIDB4YjZhZmNlNDEsIDB4Y2ZkMTdhNGEsCisJMHg3ZThkMWFlMywgMHgxZTZmODY0NSwgMHg3Y2FlNTdlYSwgMHhjODgxZjU5ZCwgMHg3ZjkyMjNlYywgMHhmOGZkZmVkZSwKKwkweDViYmRlOWNlLCAweGRkYTg1MDVlLCAweGQ1YmQ4OGQyLCAweDVjODFhYTljLCAweDk0Njc2YjljLCAweDA2OTJiNDYwLAorCTB4ZWQzZDRhN2MsIDB4OGQxODJiYWMsIDB4YTQ1OWYxNzUsIDB4NWI3NGI4OWMsIDB4NGIxODFmODgsIDB4N2ZkOWEwOTEsCisJMHgxNmQyZGRhOCwgMHhmMjQyYmYxOSwgMHgxOWY0MWQ4MiwgMHg3ZDI5N2Y1YSwgMHhmM2RmN2FlNywgMHg5MTY4ODU3YiwKKwkweGRmNzc2M2RmLCAweGY3NWNiNTdiLCAweGZjMzg3MDYwLCAweGIwOWIxOWFlLCAweGZkNzZlN2VlLCAweDc3ZThkMzI2LAorCTB4ODcyZjRkMGQsIDB4YWNmZmNlNTcsIDB4ZWFjZTVmYjYsIDB4YmRiNjY1ZmIsIDB4YjkwMDVlZDMsIDB4N2QzM2ZjZWIsCisJMHhmZTc2NzQ0YywgMHgzZjljYzFjOSwgMHgxMTJiYjRhZCwgMHg1NzdmOTc0YSwgMHg3MjQ2NWE3OCwgMHg2NWI3OGQ3YywKKwkweDA3ZTdlNDI0LCAweGUzNGJlZmI1LCAweGFmODI0NjViLCAweDM4NGU3Y2U5LCAweGZmNTk3MjVhLCAweDg1Yzk2YWNmLAorCTB4NDdmM2FiYmUsIDB4Yzk5MmQ0NTEsIDB4OTkyZDAzZGYsIDB4NDU4MmZmNjgsIDB4OGZmODUzZGEsIDB4M2E3OGE4ZTAsCisJMHhkMmRkZTM2OSwgMHgwY2I3ZTEwZiwgMHgyNmU4N2U0NywgMHgxYTcxZjVlNCwgMHhlOTFmMjVjMiwgMHhhNThmYmU2OSwKKwkweGY5ZTYzYjRiLCAweGJkOWJmNjM5LCAweDdhZDA3ZjU0LCAweDcwN2NhOWJiLCAweDlhZGY5Y2MwLCAweDAzZTdlZDJlLAorCTB4ZmE2ZmUyNDMsIDB4YzNmYmVkYTksIDB4MjEzYzhlNzAsIDB4M2ZkN2Y1YmEsIDB4ZDRmMzhkYTMsIDB4M2M3MTlkNTMsCisJMHgwYWNmYTZhYSwgMHg2ZTFmNGViNywgMHg4MGRiZGYyOSwgMHhmMTNhOGZlZiwgMHhmMTEyNmI3ZCwgMHg2Mzk4YTVlNSwKKwkweDllNWZjZjJhLCAweGZiNDk0ZjY3LCAweGJlNzkwYmNkLCAweGU3MTc5YzI0LCAweGZmODIxNzgxLCAweDY3Y2E1ODg1LAorCTB4Nzg5MmJlNDMsIDB4M2UzYWYzZDUsIDB4ZjJiZmU3NDMsIDB4YjA0OTQ1YTMsIDB4YWU5NDdlZGYsIDB4N2QzY2Y5ZGIsCisJMHhkZTNhOTc0MCwgMHhlZmE0NmMxYSwgMHgyZTNmNDM2NCwgMHg4NTY5MzgyZiwgMHgyYzQ5ZWNkZSwgMHhkYWVjMWFiMywKKwkweGQ4MWNmM2ViLCAweGU0Mzc4YjU3LCAweGQ2NzQ4YzM5LCAweDEwZTBhZGIwLCAweGVjZTIxYzQ5LCAweDIwMDdhYjM2LAorCTB4ZjcwMzU4MzcsIDB4ZDg2ZjdlNDIsIDB4MDVmOGI2YTYsIDB4NTRiYzNiOTcsIDB4YzBmM2FjZmYsIDB4NjhiN2E4ZGIsCisJMHhlNDNlNmM0MywgMHhlMmZkYmQ2ZCwgMHhjYjEyMjNmNSwgMHhkZDBlNzAwYywgMHg5Yzg3NWU2NiwgMHhkODdlNzMxNiwKKwkweDA0ZmU3MzZlLCAweGZmZGU4MGNlLCAweGEwYmNiYjdjLCAweGM4NzA1ZjM5LCAweDgzZTRmZjljLCAweDljODE2NzViLAorCTB4YmRmZjU1Y2IsIDB4M2Y4OWY0MmEsIDB4ZjM4NDM4NGQsIDB4NWUxN2QzZjEsIDB4MmNmYWM2OGMsIDB4NDFkOTRiZmQsCisJMHg3MWExNDllOCwgMHgwYTZlYjQyMiwgMHg1NmZmMDhmNCwgMHhiMmUzZTk4NSwgMHhmODFlOTE3OCwgMHg4MTBmMWU4MSwKKwkweDkzYTQ2MTlkLCAweDY4M2ZlMTBhLCAweGZlYmNiOTRkLCAweGNiMzJkMTE5LCAweDU5NTU3NDRiLCAweDY0ZTBiY2I3LAorCTB4NTdiZjU3NDEsIDB4NDNiM2FjYjYsIDB4YjcxZDBiY2UsIDB4OWMyZmZkYTcsIDB4NmFlYzM3NWUsIDB4ZDk2NGEzYzUsCisJMHhjNTYzNzU1NSwgMHhkNjJkZjgwOSwgMHhmNDAxM2JiZSwgMHg4NTRiZmM1NywgMHhlN2UyOGFlNSwgMHhiZTBhYmQwNywKKwkweGNlNjNiNmRmLCAweDlhY2U5YzBkLCAweGVkZDBmOGM4LCAweDJhZjc4YjdkLCAweGJiY2EyOGMxLCAweDVkYmE0OTQ2LAorCTB4N2Q2MTVlYjgsIDB4MWNkMWE0YmQsIDB4MzZiNjU3NDcsIDB4ZDlhNmRlMjQsIDB4Zjc3OGJlNWMsIDB4OWY4NmZmZmUsCisJMHgxOGYxZGNiZSwgMHgxZTVjMzNjNywgMHgwNTc4MTgyNywgMHhhN2M1NWI3YSwgMHgxNTNkZWQ4MiwgMHgzMzBkYmY5YiwKKwkweDJkNzljYjk3LCAweGJmZTFlN2Q0LCAweGFlZTFlMzk2LCAweGNmM2E1NTkyLCAweGQwYzg5M2I3LCAweDU3NGJmMGY5LAorCTB4ZTEwNjZhNTEsIDB4OGRlNmFhZmQsIDB4YmQ5Yjk0YWEsIDB4NzU5N2VjYzUsIDB4YjBjZTM5ZGEsIDB4OTE4MjIxY2EsCisJMHgyOGExY2YwNCwgMHhkZjQ1ZDdiYiwgMHg2MjhmYWUyZiwgMHgxODUxNjE3OSwgMHg5Y2Y5OWZjOSwgMHg0MzhlNzA4YSwKKwkweGRkYTBjNGY0LCAweDk2NTQ3N2E5LCAweDI1ZTJhYTgzLCAweDU3MWVhYTFlLCAweDU2YzViMDAyLCAweGZjOGE0OGMxLAorCTB4MDRiZjMyMTMsIDB4ZDI1NTI2ZGUsIDB4M2YwMGQ3OGYsIDB4MTc5OGNkZDYsIDB4YWI2ZjUyNGQsIDB4MDNmNzA2YjQsCisJMHhjMGU3OWQyZiwgMHg0YWJkNzMzNiwgMHgzOGQxZTc5YSwgMHhlZmU2NTljOCwgMHhlYjlkYTJkNSwgMHgzNmZlZWNkNywKKwkweDYwZGRmOGNjLCAweDUyN2Q2NWRmLCAweGM4NTU2YmQ3LCAweDdhYTcwNDMzLCAweGIzY2IwNDQ3LCAweDQwMjM5OGM0LAorCTB4ZWYxNGFiNTcsIDB4MjkxNTBlYzMsIDB4ZWZhMGUzOWQsIDB4MmY5NjRlMjUsIDB4ZTc5NDZlZTYsIDB4ODM4YzMzNDcsCisJMHgwZGQ3ODM5MCwgMHhhZTY3Yjk2NiwgMHhiZTA0Y2RlMiwgMHhkNjcwYmFjNCwgMHgxZmRjYTlhNywgMHg2NGU1OGJkZSwKKwkweDRlNDg0Mzk2LCAweDdkYWEzOTY2LCAweDEyZTM5ZDhlLCAweDgyNWFmMzliLCAweDFmOWFjNzkwLCAweDBhZDBmMTQ4LAorCTB4ZjNlNDdmMzIsIDB4OTY3MDllZTgsIDB4NGFhNzlhN2IsIDB4NWQ3OWE3YjksIDB4MzFmZjZlMWYsIDB4MzkwYmViNDAsCisJMHhmOWI5ZTI1YSwgMHhiNzFlMWM5ZSwgMHg4OWRiMmE5ZiwgMHgyMDBmNTIzZSwgMHg3YTEzM2FiOSwgMHg0MWU1YzEwMiwKKwkweDY3NDcyZWI5LCAweGIwNGFmYWM1LCAweDliZmNmYWVlLCAweGUwYTNkYjYzLCAweGYxZTUxMmM3LCAweGQ4NmU0YmRmLAorCTB4ZWQ4NzlkYTIsIDB4ZjAwM2MyZWIsIDB4OGE1NDljNTMsIDB4ZjYwYzVhMGUsIDB4ZTQzMjViYTksIDB4YWM3MjMxZjksCisJMHg4ZjU2YWI3NywgMHg5NjY1MTlmZCwgMHg4MGZmNzdhOSwgMHhkMDdiMjllMCwgMHhlOTQ4NmVlMiwgMHhmNWUxMDc1YSwKKwkweDI3ZmU2MjY2LCAweDgzZTc4NWQ3LCAweDk1OGU0NmVlLCAweDc5NjNhN2Y2LCAweDBlNDc5ZjkyLCAweDczYmYxYzE3LAorCTB4ZWRlZmQ2YmIsIDB4OWE1MzE2MTksIDB4NDhmNDQxMTgsIDB4OTQyYzljZmQsIDB4ZTFhOGVkZjYsIDB4YTQwNzZjNDUsCisJMHhiYmI5YmEzNSwgMHgxOTM1OTAzOCwgMHhiMzJhOWNmMiwgMHg5YWZlZmQxNywgMHhhNGU5ZTA2ZSwgMHhkZTUyZjE4YiwKKwkweGQ5NGNiOTNkLCAweDcyZjJlMTI0LCAweDVmYzhkZmJjLCAweGYwZmRiMzg1LCAweGU4ZGU3NmE0LCAweDM0NzQ0MWViLAorCTB4OGQ3MWNmODIsIDB4ZThkM2FkOWYsIDB4NzRjZjVkNjYsIDB4Yjk4YmEyNjMsIDB4Mzc0MWI3OTAsIDB4ZDhiOWU0NzMsCisJMHhmYWRhNTc0OSwgMHg3YWYwZGQxMiwgMHg0ODVkMTNiNywgMHg2YmUyMTFiYSwgMHg0Yjc0MmZiNCwgMHhkZjQ0M2I3OSwKKwkweDdiYjdkNGVhLCAweDBlODhiN2QwLCAweDZkZThjODllLCAweDA3NDIxN2E4LCAweGYxMTgxYWMyLCAweDI1MmNmYzhmLAorCTB4MmE0NzYyYTMsIDB4NTY0OTA0YjQsIDB4MmNkYzQ3ZTEsIDB4ZDdjNjQ2Y2UsIDB4NGFjMGQ2NWQsIDB4NTViZmE3ODIsCisJMHhhYjAwY2JhZSwgMHg2NTNhM2JhNCwgMHg1Y2Y5MTFmYywgMHhkOWY4OGJkZiwgMHgwYjE3ZmJlMiwgMHg0ZTJmZDUyZiwKKwkweDRhYjc2YzEyLCAweDI2MjZmOTI3LCAweGE0MDlkYjhlLCAweGIwYWEwNzcwLCAweGY2OGE1MGU3LCAweGZmYjIzMWM1LAorCTB4YzQ2ZmEyNjIsIDB4NWU3ZjUxYjMsIDB4ZGNjNjljNGIsIDB4MmE3ZmMyNDYsIDB4ZmI0MDdlNTgsIDB4ZWY2ZTdjZTgsCisJMHg1ZWY2YzhiNywgMHhkMzAzYTUyYiwgMHg1ZjZhM2VlNCwgMHgyYmY4YzYxNSwgMHgyNjQwNzNiZSwgMHg1OGQyNjRlOCwKKwkweDY2MjQ5ZDMzLCAweDRmNDEzOTRhLCAweGJhZGQzMzFiLCAweDdlMDg5MGRjLCAweDk4MzhkMjUwLCAweGYwODY5OWNmLAorCTB4ZDg1ZGFhYTIsIDB4N2Q0OGNmYTcsIDB4NGRmNTc4YTMsIDB4YmUwMDQ3OTMsIDB4ZDgzZGUzNjcsIDB4ZWNhN2E3YzIsCisJMHg0OTRhZmY2MCwgMHg3ZjFmOWNlMywgMHg1YjY1M2QwOCwgMHg5OGRmN2YzOCwgMHg3ODBmN2JlOSwgMHgxN2I4YWQzZiwKKwkweDI1MGZhMmVjLCAweDI3YjE1ZjMzLCAweGNiNWY3YjUyLCAweGEzYmY3M2Q0LCAweGM3N2Y4YTc0LCAweGE2MjM5MGRiLAorCTB4ZmViOTUwY2MsIDB4YjllZDIxMTQsIDB4MzM4ZTUxYTIsIDB4MzViOWZmZDksIDB4M2M5YmZhOTEsIDB4OTRmMGUxNWEsCisJMHhmMjU3NzBiNiwgMHhiNDU1ZjgzMiwgMHhkMWE2M2RmNSwgMHg5OGI4NDM3NywgMHg3MDEzOWNmZCwgMHhjZDRjYzgwZCwKKwkweDI0ODIxZjg2LCAweGU0ZTQ2ZWQ0LCAweGZkNWE5OTAxLCAweGM4MDZjYTMxLCAweGM5YzcwMzQzLCAweDQ3ZDdhN2ZkLAorCTB4MmQzN2U4M2YsIDB4Y2ZiN2VlNTMsIDB4ZTdhNzdkYjQsIDB4YmY1Y2FmMDksIDB4NWI1ODRkNmMsIDB4NWI1MjM0NWEsCisJMHhmM2E1MTA3MCwgMHgwMzllYzZiMiwgMHgyYTk0OTk5ZiwgMHhkZTA3YWMyNiwgMHg0ZDhhYWE3ZiwgMHgzMTdiNmYwYywKKwkweDRjYTg4NWYzLCAweDhmODJmODM3LCAweGZiYTY1OTE0LCAweGVlOTk4MzZkLCAweGI3YjRjNmRiLCAweGI2Zjk0OWRkLAorCTB4N2VkMjM5MmQsIDB4MGJmM2U5YTcsIDB4ODJlNTgyNWQsIDB4ZWY5MjMxYjYsIDB4NjQ4OTZmYjUsIDB4ZDVjYzczZmUsCisJMHhlZDI3MTUxYSwgMHg5N2RmYWM1ZCwgMHhkN2YxMjQ2YSwgMHhlMTdiODZiYSwgMHhkYTc1MmUzNywgMHgyYzdlNzBkYiwKKwkweGZiM2E2MDdjLCAweDQ5OWI0YmZiLCAweGZkNWM0N2JmLCAweDRmN2ViMzVhLCAweDY2NTg3ODdhLCAweGE4N2FmYTM3LAorCTB4MDE5YTBlNWUsIDB4NTVhZDk1MWQsIDB4MzYwNzBlOTgsIDB4OTk3ZGVjNzgsIDB4Y2MyZTI5Y2YsIDB4NGMxOWNjYWYsCisJMHhmMzJmZmYwNywgMHhmMDVjNzM4NCwgMHgzN2ZiN2E2NSwgMHhiMDkxZjc4NCwgMHhiYTBlMGIxZiwgMHhkN2M4M2ExYSwKKwkweDM3MTZlMzBiLCAweDFhN2ViMzE1LCAweGZlNjNlZDk5LCAweGJjMjU1MDM1LCAweGQ0Y2YxZDEwLCAweGVjMTI2ZmU4LAorCTB4ZDY0YmUwYTAsIDB4OTdkOGJlZDYsIDB4ZGY2ODY1YWYsIDB4NGU5OTVjZTMsIDB4YmU3MGViYTYsIDB4NzM2NmQwNmYsCisJMHhiNmJlMDI2NSwgMHg5YzE2ZTE1NSwgMHg0YTU2OTNiNywgMHhlNzdkYTZmYSwgMHhiYjgwYmRjMCwgMHhmYzAyMjJhYywKKwkweDdlZDZiOGUwLCAweGQxNmIwYWZlLCAweDc3ZjdjYTQ2LCAweDFjNTQ2YjA4LCAweGU5OGYyYmU4LCAweGZiZTU5MDNiLAorCTB4ZTlmN2ViMGMsIDB4YzgyOGM0MmYsIDB4ZDc2YmE1MGQsIDB4ZmEzNGI4NDksIDB4ZTMyM2Q2MTAsIDB4NGY5YzY5ZTMsCisJMHhjM2U0YTRiNywgMHg1M2QzYTBhZSwgMHg3NjZjNmIyMCwgMHg1ZDAzMDhlNiwgMHgxZTk4NTBjYywgMHg2MDg3M2U2OCwKKwkweDU1OTc5ZDlmLCAweGZhNzI4ZjkyLCAweDMyZjQxZmJlLCAweDFkMzA2YzY5LCAweDZhODVkODcxLCAweDc2YWJjNzI1LAorCTB4ZTIwZjBhMjQsIDB4M2I0NDNhODcsIDB4MjQxZDIzY2IsIDB4ZWEzZjgwOGYsIDB4MjdlNzQ2N2MsIDB4NDc1ZTE3NDQsCisJMHhlYjdhZDc0MiwgMHgzZDZiNjU3YywgMHhkZTc4NDY4MSwgMHhmNGUwZWY1NiwgMHhiMDk3N2FhOSwgMHg1ZWQ4NGYxMiwKKwkweDY3ZjljODlmLCAweGI2OWNkZGViLCAweGY3ZjE2N2Q0LCAweDljM2RlYWU3LCAweDhhM2Y1OWRmLCAweDdiZDQyZmYzLAorCTB4N2ViYmJmMzksIDB4YWJiZmE3MjIsIDB4ODRlZmUyMmYsIDB4M2E0YmU2MWYsIDB4OTNmOWQxZGYsIDB4OWYzYTVmNGUsCisJMHgwNWFiYTUwYSwgMHgzM2RjNjY4NCwgMHgwZmNjZjZhMCwgMHg3OTg4M2U3NSwgMHhmOGJiZjI1OCwgMHhhOWNlYmU5MywKKwkweDExM2Y5MTRhLCAweGNlYjQ1MGZjLCAweDU0MjhmZjAxLCAweDIyZjMzZWNmLCAweGRjYTNiOWUxLCAweDFkYTFmMWM5LAorCTB4MGVjMWYyNDIsIDB4OGRjZjgzYTcsIDB4MGRkOGJiNjQsIDB4MzJjMzQwZmIsIDB4ODY5ZGRiNmYsIDB4Yjk1ZTc4NzMsCisJMHhiYTA2YWMyMiwgMHg1YzM2YTliZCwgMHg3ZDc0MGQ1OCwgMHgyOWFjNWQ3MywgMHhmZGVlYmYzZiwgMHhmZjUwZmFkNywKKwkweDJkZjE4YjNmLCAweGJiMWNmYWMyLCAweDdmYTNkNGUzLCAweGRmOGZlZmE0LCAweGViMDMzYTcxLCAweDc5NmM3MDRlLAorCTB4MWVkZWUzMDgsIDB4MmFkMWMxYTEsIDB4Y2VkZGJhZTEsIDB4MDhjMGQyZjIsIDB4Y2ZlMTRmYTksIDB4MmQ3Mzg4NjEsCisJMHhmYjdkODk0ZSwgMHgzMWU3MDQzNywgMHhkYTA2MWQ2ZCwgMHhjMTQ2YjM1ZCwgMHg3NTRhYjMyZSwgMHgxZjJhYTRhZCwKKwkweGZiZThiZDYzLCAweDJhZjViNTlmLCAweDdjNjMwYmE5LCAweGZiNmEzNDk2LCAweDRjZmYxOGQ0LCAweDU3ZGUzY2Y4LAorCTB4NzhhNzVjYjAsIDB4ZTkxZjgwODUsIDB4NDFlYzJmZjgsIDB4NzFjNDExOTIsIDB4Njg1MDExYzUsIDB4YWQ5NDg1MWMsCisJMHhhZTE3YjBmOSwgMHhlNDI4ZmQ3OSwgMHgxMGVlYTU3NCwgMHg4NzNlZDVjYiwgMHg4NDI4ZTM5MywgMHhkOGQ2NzZkZiwKKwkweDkwNzc1MjlmLCAweGZlZDY4OWViLCAweGM4YzgzOGE2LCAweGY4M2I1ZWUxLCAweGViMWI2ODA1LCAweDQwNzU5MjU2LAorCTB4MjY4YjlmNjAsIDB4OTRmMWVmODUsIDB4ZDZjYmRmNjksIDB4ZTJmOGE2MjgsIDB4ZTY1NTMzN2IsIDB4YWMzMjg3OGIsCisJMHgxNGNhMGU5YywgMHg4OWE1MTM5YSwgMHg1ZTlkMjljZiwgMHgzYzcwN2Y4OSwgMHg5ZTUzNTk2MywgMHgyZjgxOTE3ZCwKKwkweDRiZGY2ODk3LCAweDc4YTYyY2IzLCAweDMyMTk0M2M3LCAweDk4MTA2YTJlLCAweDY3NzdhNTA1LCAweDMyMTdkYWE1LAorCTB4ZGM3MzczZGYsIDB4MjRiZjVlYmQsIDB4ZWE3NTdmMmIsIDB4ZTg4M2Y0NzAsIDB4OGZmNmFlYTAsIDB4ZGRiOTVhNjQsCisJMHg4NDk3MGNhMSwgMHg1OWU3NDFjNywgMHg3NGU5YzcxNCwgMHg3MmU4MmU3YiwgMHhlZmY4YTdjYywgMHhlYjNmMGM5NSwKKwkweDNlY2YxNTU5LCAweDdiZmMyY2ZkLCAweGUzMGE3ZjE1LCAweDk4NjJhOWYzLCAweDBlYzhkZjY2LCAweGYyY2U5YzhjLAorCTB4OGNhOWQ3OGYsIDB4ZDcyZGZjODQsIDB4N2ZkM2ZjN2YsIDB4NTQ3YzQ2ODksIDB4NTc2OTRlY2QsIDB4NjkwZGI0YTUsCisJMHg2Y2U1ZWRmNSwgMHhkMGY2YWI1NywgMHg5ZjAzODhmZSwgMHg1ZmNkZmIzNSwgMHhkMTRmZjY3ZCwgMHhmODk3YWNhZCwKKwkweDViZjhiNDkzLCAweGRlYWFmNzhlLCAweGMwZTM4Mjc5LCAweGQwYWZiOGY0LCAweDM3Y2EzNTc2LCAweDcxZWFhN2FjLAorCTB4YjYzZmJhMDEsIDB4Zjc4ZDlmNzAsIDB4ODUxZWNkNGQsIDB4NWQ5YTk4ZjUsIDB4ZTdjMDEzMTcsIDB4NGFhZGY2NmEsCisJMHgyNzJlMmVlOCwgMHg1ZTNkNWZiNCwgMHhkNWJmYjc0MCwgMHhjMzlmYjU4OCwgMHhjMzg0NDg3ZiwgMHhmZmFkMGZmOCwKKwkweGFmNTQ2Njc2LCAweDYyMDU0MzUzLCAweDNiNjBhZWQ1LCAweDFjNzA1NTg4LCAweDhlMmQ3MmM3LCAweGMxOTAyM2IzLAorCTB4ZTQ5ZWUxN2UsIDB4YzRmNTlhZWQsIDB4ZWRiZjQ5ZjAsIDB4MTA2M2JhYjAsIDB4ODg0MTdjYWYsIDB4NTNhZGRkODksCisJMHg3ZTc5MjBmYywgMHgwNDdkYTM5ZiwgMHhlZDg1ZjBiZiwgMHgxNzkxY2IyYSwgMHg3ZWYxNDdiNiwgMHhmZjdlZGVhOCwKKwkweDU1ZGJjNDQxLCAweDhkZDg1NjZmLCAweDMwOGUyNTU3LCAweGFhNzdhYWRlLCAweDBmZTA2MWMyLCAweGM1MGJiMDM1LAorCTB4ZDJlNzBjZjcsIDB4NDE2YWEzYTcsIDB4MTQ1YTRiNWYsIDB4YWRmODE2ZWYsIDB4ZGU5OGVlMWQsIDB4MzVkYTc4MDYsCisJMHhkNjFhNWFmYSwgMHg0NWQ3OTIzMiwgMHhmODE0ZmY4MywgMHg1Y2NlNDE5YSwgMHg4ZTdlZjdiMiwgMHhlNzdhYTQxMywKKwkweDZkZjlhZTU5LCAweDUxYjNjNzI0LCAweGNlMDM2ZjBmLCAweGQ4MGExYjMzLCAweDY1YTRiZDRmLCAweDA1Y2IzNTQ3LAorCTB4MTA1ZDIzZGIsIDB4Y2NkYjRlNjksIDB4ZDFiZTI5ZjcsIDB4OTM0NmZiYzYsIDB4NGZjMGNlZDMsIDB4YWFjZmY2ODIsCisJMHg0ZTAzMGYyYywgMHg1YWQzY2JlYywgMHhjZWRlYWIzYywgMHhiM2I2NDgzMiwgMHgwZGZiNzg2OCwgMHhhZTg4ZTdmNiwKKwkweGRhNWE0YmZhLCAweGZlYTlkM2EyLCAweGU3ZGZiYjI3LCAweGVlNDgzOWQ0LCAweDIzY2UyNWUzLCAweDNmNDczOGI5LAorCTB4ZjdjOTE5ZDksIDB4ZjlkOTNlZWQsIDB4ZDEyZjA5ZWIsIDB4YzY1YWU3NzgsIDB4ZmIwYzUyZjQsIDB4MWIyMGUwNmMsCisJMHg0MWI3M2ZkNywgMHgyNWYzMDFjNiwgMHg1YTBmZDYxMSwgMHhiNjY3M2U3OCwgMHgyN2FjMjkyNywgMHg5Zjg0ZGYwMywKKwkweDhmOWYzYjMzLCAweGY2M2VmMGI2LCAweGFiNzE3YmZmLCAweGM4NmIxNWIzLCAweGIyZWI4NDdkLCAweDViZmU4MDQ3LAorCTB4ZWQxMWZiYjUsIDB4N2ZlNWZkOWEsIDB4ZWQ2YWZmYTcsIDB4YTQ1MjliN2IsIDB4M2JlZjIzOGQsIDB4YzIwZTNkMDgsCisJMHhkNTNiZWRhNSwgMHg3OTZlZmJjOSwgMHgyZmVmOWQ5NCwgMHhiZWU2MTgyYywgMHhlOGY4MWU3MSwgMHg1MThlMzI5YiwKKwkweDA0M2Y3N2Y0LCAweDNiYzE2ZmZkLCAweDU5NmY2Y2YxLCAweDQxZjc3MzZlLCAweDM2YzM4YmZlLCAweDI4MmMxM2Y2LAorCTB4YTFmNTFjZjAsIDB4ZWQ5ZDhjN2UsIDB4NzViMTIyNGEsIDB4NmRhZGVjMDQsIDB4YThiZTUyMjksIDB4OTMzYjQzNWMsCisJMHhlODhmZGM1MCwgMHhhY2Y4NGZjZCwgMHg4Zjg0NTgwYywgMHhhNTA3OTNmMiwgMHg1MjNlYmFmMiwgMHhkOWRhZjE2ZSwKKwkweGZiZTQxM2ZmLCAweGMyZWNjNzkyLCAweGZlMmY3YjhmLCAweDVkN2VhNGU3LCAweDBlZmQyYTk5LCAweDUxN2Y2MDhmLAorCTB4Y2MxNzE5NWEsIDB4NGVkZDg3OGMsIDB4NjljYTliYTMsIDB4OWZhMDZlNTQsIDB4NGNjMTRkY2EsIDB4ZWQ2NzRmYzgsCisJMHg3Mjg5MWVkMiwgMHhmOTk1NGRlOCwgMHg0NjgzNWViMiwgMHhmZDA3ZThhNywgMHhjZWI4YTViNiwgMHgyYmJiYmNiMywKKwkweGIwZWY0MDRhLCAweGVkMjUxOGJjLCAweGRmMDliZjIxLCAweGFmMzg2NjE0LCAweGU5MjQxYTZmLCAweDA3ZjM0MWI4LAorCTB4Zjg0OGI3ZmEsIDB4ZjhlNDE3MDAsIDB4NGNhNmY2MjUsIDB4YjhmYWI5YzgsIDB4Nzg5YmEyNGIsIDB4NzhkYWIzYmMsCisJMHhhNDlhMjI0YiwgMHhjNzhiNDRmZiwgMHhkZjFlN2Q0MywgMHhkM2JmZDgyNiwgMHhjYjE4NjRmZSwgMHgxZWZiYTdjYiwKKwkweDlmZTMwMTc5LCAweGM3MzA3MjdlLCAweDA0YTViNDExLCAweGYyZTZlZDE2LCAweGFlZTM4ZTcwLCAweDA4MmMyYTc4LAorCTB4MzI3YjNmNzgsIDB4OWY1OGVkOGEsIDB4ZjYxY2E0ZDksIDB4Y2IwMjU0NTksIDB4MWVhMjg3NjEsIDB4M2FmZTgwNWMsCisJMHhlMDI5ODczNiwgMHhjMjI5OWZhMywgMHgyZGYyODg5ZSwgMHhhODBlNTliZCwgMHgzZjYzYWZhOCwgMHgxN2IxMDU0OSwKKwkweDRlOTRhZmM4LCAweGQ5ZjdkYzg0LCAweDI3NmNjMTk2LCAweDk1MGRlY2ZhLCAweGY3ZDAyOTJmLCAweDEzZWVmODM1LAorCTB4YzY3ZTBiNGQsIDB4M2ZmNGJmZjIsIDB4NmZlYTdlOWUsIDB4YWZmM2JiODMsIDB4ZGIzNjZjNTQsIDB4ZDdmNWY0YzMsCisJMHgyNDE4ZWZjYiwgMHgwYzc3MDNlZCwgMHhjYWM5N2E5MiwgMHg3ZmU5MmU0MSwgMHgzMDc5NmM4YiwgMHhmOTI5ZTc5NSwKKwkweGViMDNhZDAzLCAweDEzMWZiNDdmLCAweGQ2M2Y2ZjYwLCAweDcxNDEyN2IyLCAweGNjYzFjZjAyLCAweGRiZWYwMzVmLAorCTB4N2E3NTllYTQsIDB4NDJmZDhkYmIsIDB4Nzk0NjJmMTUsIDB4ZTc3NGZlZDksIDB4YjBlZjdjMTUsIDB4Nzg3Mjk1NDIsCisJMHhkYmRlNDU4NSwgMHg5OWVlZDBhYiwgMHhiMjY3NDQ1NiwgMHhjZGYwOGI3ZCwgMHgxNmZiNmQ3YSwgMHg4ZTQ3MWI1NSwKKwkweDAxZDZkOWZiLCAweGQ0MTA5ZmQyLCAweGYwZTQyZmYyLCAweDcxNDliODNkLCAweDJjNjllNmUyLCAweDA1Yzg2ZDVmLAorCTB4OGU2ZTJmNWUsIDB4MWE3OWY4ZTQsIDB4ODdiODhiYzcsIDB4NWNmZDlmOGEsIDB4MTE2NjMzZTIsIDB4YWU3NDA3ZWIsCisJMHhkNGFlN2YzMSwgMHg5ZGQ1NzNmOCwgMHg1ZWUwYzc1NywgMHhlNTQ3Nzg4MSwgMHhhZDE3MTJmYiwgMHhiZmUwM2U5ZSwKKwkweDRmN2FmOGExLCAweDVmNGI2M2UzLCAweDQxZjk5NDc4LCAweGM0MTdlZDI1LCAweGZjZDUyZDU5LCAweDUyOWY0YmNiLAorCTB4YmE1YzllNTgsIDB4OTg4N2VhZmEsIDB4MTM2ZGJlZWYsIDB4YjY3MDVmYjgsIDB4ZTM2OGZlZTUsIDB4ZjhkNWVjN2EsCisJMHgwZjdiNTc2NywgMHhmNTRhNWZkNywgMHhhMzM3ZmI2NSwgMHgzNmFkOWUxOSwgMHg1ZDA5ZTAwZiwgMHhmZWRkZWZjNywKKwkweDZhNWZmNTI5LCAweGYyNDJkMTVmLCAweGYzZTVlZTQ1LCAweGRjOGUyOGJmLCAweDk1ZjAyN2Y2LCAweDY3NmNlMWVkLAorCTB4N2JlN2Y1YTMsIDB4MmQ2YzY3NDYsIDB4MzNmZjMwOGIsIDB4YmYzMzg0Y2YsIDB4ZjcyYjEzMzksIDB4OWU3NDI3ZmQsCisJMHhlNzgwZWRmYSwgMHg1ZGIxZjc4NywgMHgwMmU5YmRlZCwgMHg4MGUyZDBlNywgMHhhZTFkNWZiOSwgMHhhZmRmMWFmZCwKKwkweGMwYzRmNzhhLCAweGViNDU1MzRmLCAweDdkNjhmZTgxLCAweGRmZWRjNDdlLCAweGQwZmI3MWIxLCAweDc2OGUzY2Y5LAorCTB4ZjRmYjBjMjMsIDB4OWJhNjQ4OTksIDB4YmFlNGZkMzMsIDB4MTA3Njc5OWMsIDB4YjE2ZDY3OWYsIDB4ZGUwOWRlOTIsCisJMHg2NzRiZTg2NCwgMHgxYjhhNjU2MiwgMHgwYTg3YTAzZSwgMHgzMzg3YTQ5NywgMHgxZWQ4NWE2MywgMHhjMWQ5NDY3MCwKKwkweGI2NGQ5YjY5LCAweGZjZDNhOGFiLCAweDg5N2Y0NGRhLCAweDI2ZDAxZmEwLCAweGI1OGVhOWVjLCAweDgwYzcyMDQ3LAorCTB4ZTdjYzhmY2YsIDB4Y2VmYjg4MzQsIDB4ZDA3Mzc2YTEsIDB4YmViZmNlMjksIDB4ODRkY2YyNTksIDB4Y2YzZTA1NzgsCisJMHhlM2Y2MWI3ZSwgMHg3MzNkZjBiNCwgMHg1NjRmMjY5ZiwgMHg0ZmRjYmY2ZSwgMHhkY2FhNzU4OCwgMHhlYjNmYjBhZSwKKwkweDAyZmU3NjkyLCAweGRkYmE1ZWVhLCAweGE5NzJlODlmLCAweDZlMjJmMTVmLCAweGIyZTM2OTZiLCAweGE1ZmJhMDI1LAorCTB4ODFlNmViYjUsIDB4MmM3OWY1ZWUsIDB4Yjc1ZmVlZDUsIDB4ZDNjMzJhMjksIDB4MjdmYjRlMTYsIDB4NzRmMWYyZmIsCisJMHg4YTU5YWFmYywgMHg1YzI3OWYxZSwgMHg3YjQ1ZjlmYSwgMHgyZGNiMmMzOCwgMHg0ZGIyODhlOSwgMHhhMzY1NWZkNCwKKwkweDQ5Yzc5NmIyLCAweDM5NWJmNWQxLCAweGI4NGYxZDNmLCAweDVlZmIwMmNkLCAweGI5ZGY3NjliLCAweDcwZWJmOWE3LAorCTB4NTI0ZjA0ZjYsIDB4NmQ0ZmU0OTYsIDB4NmY5ZWYyMjksIDB4YmVmMjViZmIsIDB4MGE2ZmM1ZjYsIDB4ODFmZWUyNjIsCisJMHhmYTkxYzgzYywgMHg3ZjA0N2Y3YSwgMHg3MjEwNjgxNiwgMHg5NmU3YzY4ZiwgMHg3MDRlYWVjMiwgMHhmYjMwNmU2NiwKKwkweDliMzZiMjczLCAweDliYjY0M2YzLCAweGNkM2JkOWYzLCAweGU2YmRkY2Y5LCAweDczNTVlN2JjLCAweDdiNzE4NWRlLAorCTB4ZmEwOWUxNzcsIDB4YTEwM2UyMzYsIDB4YmU4NTIzNmYsIDB4ZmE5NGNlZWQsIDB4YjdkMGYyMzYsIDB4YzZkZjQyOTEsCisJMHhjOGRiZTg3NywgMHgxZTQ2ZGY0MywgMHhkMGYyMzZmYSwgMHhkZjQyOTFiNywgMHgxYTM5ZjdjNiwgMHg3YjM1MmE5ZSwKKwkweGUzODFkNjI5LCAweGViODRmNmQ0LCAweDVmYmMwMGYxLCAweDYwNDljYzJlLCAweDUyYWMyYTNlLCAweDI0YjBiZDFmLAorCTB4NGVjN2U1OWIsIDB4MDc1NGQzM2IsIDB4MzhmNDk5ZGIsIDB4N2NhMmI3YTcsIDB4YzM3YWIyZTMsIDB4NzU2NDdiN2YsCisJMHhjNzZlMTRkZiwgMHhkZjlhZTdmNiwgMHg2NTczZmI0OSwgMHhmNjEzYjg3ZSwgMHg5ZjU1ZDY4ZSwgMHgxM2Q4ODZhYywKKwkweDQ0NGRmMjg4LCAweGY2YjYwYmZkLCAweDU1NmZjMGFkLCAweDZmZWMyYmRkLCAweDdlZTE1ZDZmLCAweGZkNzIwN2U3LAorCTB4YzdhMmVlZDgsIDB4ZGNlMzE1MmQsIDB4N2QyNmRmMDMsIDB4N2I2ZmM2NDksIDB4NmEzYjQ2MWMsIDB4YWM0ODVmYTgsCisJMHgzZjIxZTQzNSwgMHhhMWYzOWIzNSwgMHgzNWYwMjA3ZSwgMHgzNTVmNjlhZiwgMHg2ZTNjMWQzMSwgMHhiZTBiZWY2YiwKKwkweDA3NDllMjdmLCAweGExM2FmM2RmLCAweDZjYzRlZGQ5LCAweGJhNjNjYjE3LCAweDhmMjlkZjNjLCAweGMyNmNhM2RkLAorCTB4MmIyNGJkZjksIDB4MWM3N2RiOGUsIDB4ZDNkZDMwY2EsIDB4MmY0YjRkMGIsIDB4ZGFiY2IzZTUsIDB4NThhYjVmOTksCisJMHg4Y2Q5NGUzMCwgMHhhZjU5ZmIxNSwgMHg3M2U2OGM0ZSwgMHhiNjBkMTZlOSwgMHgwZGZmOTA0MSwgMHg0NDBlMGY3MCwKKwkweGU4NjhlODk4LCAweGJmMTBiOGI2LCAweGZkNTMzZjY1LCAweDQzNTNiYjYxLCAweDRjNDM5NmZjLCAweDE2ZDdkM2U1LAorCTB4MTdiNWVmOTgsIDB4MWYyYTZkNWQsIDB4ODc4Y2VmNjgsIDB4OTZmZjQ4NzMsIDB4ZDY0YjlmMDYsIDB4ZTdjY2U4YjksCisJMHg0YmQ2ODZmOSwgMHg4NDdmM2M1NiwgMHgyNWJjNTZiZiwgMHg5YTMyZDNlNSwgMHg3YjQwYjc4NywgMHhmZTFmMjM5ZiwKKwkweGUwMTRlZjM5LCAweDE2YzViY2FmLCAweDU0YmVmMzhiLCAweDlkNDQ4NzNiLCAweGI3MmU1Y2Y5LCAweGFlMmJiZjBhLAorCTB4NWRjYWVlOGIsIDB4ZWQ0YjFiYzIsIDB4MjUzNmI0YmYsIDB4NzFkZDFkMzMsIDB4MTQyNTU5MzQsIDB4MjQ3MjE5MmQsCisJMHhlNTdkMDgzNywgMHg4MjQ2Mjc4ZCwgMHg4ZGQ0YWFhZSwgMHhiZjJhMmVjOSwgMHhjNTZjMDk1NSwgMHg3MWQzZWM0NSwKKwkweGE0YWUxMjNiLCAweGY4YjRmZmYyLCAweDc1YTJjOTFlLCAweGVmMDViNjRhLCAweGJhM2UwZjlkLCAweGJkZTA0ZDIzLAorCTB4OWY2YjEzOTEsIDB4M2NiOGU2OGYsIDB4NmQ5MmZlOGQsIDB4YzFkMDA4YWUsIDB4ZjU5NTI2YzYsIDB4ZDRjZGQ4MTQsCisJMHhkOTNhMmViOCwgMHgwMTFmMTRkOCwgMHg4YzdjYTZiZCwgMHg3MTcyOTdlMiwgMHgwYmRmNDliNCwgMHg5YWExNDdjNSwKKwkweGU2OWI4ZWZkLCAweDJhOTBmMTdiLCAweGYzNmE0MGVmLCAweGY1OTJlZTVjLCAweGFmNmNiYTQ1LCAweGU3ZDdiM2RmLAorCTB4NDdkMzUyN2IsIDB4OTZiZTM2MmIsIDB4M2Y3ZDBiNzksIDB4MmU3Zjc4M2IsIDB4ZDY1Nzg0YWUsIDB4MmY3OWU2ZWYsCisJMHhkYWRmNmNiNSwgMHgxZDdiZDI5NywgMHhkNzk4NWRiZSwgMHg0NWM2YjdmMiwgMHg3Y2UzNDk1ZiwgMHg4N2M2NWRiOSwKKwkweDg5ZjliNWZmLCAweDRmYzRmY2M3LCAweGMyN2E2Y2VmLCAweDg1NDFmYjBlLCAweDFlODc2MDM1LCAweDQ2ZTRmZTVjLAorCTB4YWUxOGUyM2IsIDB4YmY5MWI2ZGIsIDB4Y2M1NmRhMmYsIDB4YmVmZDAwZjYsIDB4N2M3YWE3ZGEsIDB4ZjI4Zjg2YjMsCisJMHgxNzA2Y2FiMSwgMHg2MGZmYjNjZCwgMHgyM2NhNGZjOSwgMHhhMTRiMWM2NCwgMHhkYzM1ZmEzYSwgMHg0ZGI4YjgxMywKKwkweDY2YmNjM2M5LCAweGUzYjBlZDE0LCAweDFhM2JmZjFlLCAweDM3ZGQwOWRmLCAweDE3YTc4NzFkLCAweGFiYmQ4NmY2LAorCTB4ZGYyMGYxNDUsIDB4ODk5OTNlZDMsIDB4MGY0NDcyY2IsIDB4MzliOTJmZDMsIDB4MDg2OTcxOWQsIDB4MGExZmQ1ZWIsCisJMHg4ZTcwYmVkMiwgMHhkN2U4ODc2NCwgMHhjZjY5NTU4NywgMHhhZDEyM2M0MywgMHhkODNkYjk3MywgMHg4NWU0M2E2YiwKKwkweDBmZmJlNTk3LCAweDhkMGU3NDU1LCAweDJlZGU4N2NhLCAweDE2OTQ1NWM0LCAweDc0NGQ1NjhkLCAweGQyM2UzMzVlLAorCTB4MGI2NjBmYjQsIDB4ZmVhMmJlYzMsIDB4YTY3ZTg5NjYsIDB4Njk0OThjZmMsIDB4Y2UzN2ZhYTYsIDB4NjdlMjFhMTgsCisJMHg2NzJhZWZjZSwgMHhlOTk1NzVmZSwgMHhkYmFhOTc1ZCwgMHhlMzg1NmVmZCwgMHhiZjlhYzY3YiwgMHhkMzNiN2E1MywKKwkweGY2YTYwZGQ5LCAweGU5OWE2MjU1LCAweDliMjU5NzVkLCAweDEzM2M2NWRmLCAweDhmYTFkOTk1LCAweDQxZjc2Yjk1LAorCTB4YjRkYWZiNjYsIDB4OWRmY2FkZWYsIDB4YWZkYTYyMjYsIDB4N2YzY2QzMDMsIDB4OGRhNWU3OTQsIDB4MWRiYTA4ZmQsCisJMHg5ZmZlMzY3ZCwgMHgxOTc5ZGRkNiwgMHg4OThmMTlkMSwgMHgzYmQ4NWJmOCwgMHhlNDc5NjY3YywgMHg0MmE5ZWIwOCwKKwkweDY2OTU0M2FlLCAweDkyY2FhYThmLCAweGZmMmFhOGY2LCAweDliZTIzYjExLCAweDI0ZDZmZjA5LCAweDkzNzU0OTQyLAorCTB4YWE0NmY2YzIsIDB4OTM4YTQ4ZWYsIDB4N2RmMWRiZjksIDB4MDc1ZWY5YTcsIDB4ZjI4NGJiZmEsIDB4ZjYzMTZhNDMsCisJMHgzNTc5Njg1NywgMHg0MmU3MWJjZCwgMHhiMDQ3ZWMzNSwgMHg2YmZkZTk4MywgMHgxOWY0ZWFmZCwgMHhiNDNlY2Y3YSwKKwkweDM3NjBkZjFmLCAweDZkOGFlN2VmLCAweDIzZjYwZTNiLCAweDhhMmY0Y2JjLCAweDQ5N2M0M2NkLCAweDViNTRjYjY1LAorCTB4NzRlNWY2NzEsIDB4OGJmZGYzYTYsIDB4N2ZiNjE2ZTUsIDB4ODU3ZTFjNzUsIDB4ZGNhM2FjZTksIDB4ZGRmMTkxZWEsCisJMHhkNTFmMThmZiwgMHgwZDZmNjk1ZSwgMHgzNDQ1YmZhNSwgMHgxNzk5ZjgxZiwgMHgwMTNjNTRlZCwgMHg1ZTAzZDY0NSwKKwkweDQzMmU4MWZhLCAweDBkZDQ5MmYwLCAweDc1M2M3NGJlLCAweDdjYTQyZGUyLCAweDFjMzNmZTMxLCAweDAwNGExMWYxLAorCTB4YmMzMmYyN2MsIDB4ZmFkNDc4ZTgsIDB4MmMxM2U0NWYsIDB4MDEzYzEyNjcsIDB4M2ZhNDI3ODYsIDB4ZmY3NDJhMzEsCisJMHgyMGVmYzJkZCwgMHg4NDUwNmM3NCwgMHgzYzZlZjk0YiwgMHhlZDI0YmI0YywgMHhlNGQzMDMzNiwgMHgyOTc3ZGJiYywKKwkweGIzZWJjODFlLCAweDdiZjk1OTJlLCAweGM5MTRiZDI3LCAweDkzMTlmNTM4LCAweDkzYjNmYmNjLCAweDdlZTQ4YTdlLAorCTB4ODEyOTc5OTksIDB4ZDM2ZmZkZGIsIDB4OGZkMTc3ZDEsIDB4OGQwOTlmZWUsIDB4NWRlZmQ2ZmYsIDB4ZGRhYzFhMmQsCisJMHg0NjIxMWE0YiwgMHhjNDRmZmI3YywgMHg0MDcyZWJhZiwgMHhlNzQ5ZTc0ZiwgMHhmMGQyZTM3OSwgMHhmNmVkNGNlZiwKKwkweDk1MWU1ZTFjLCAweDNlZGFmMWNhLCAweGYzYTg4ZWNkLCAweDRlZDY5ZjYzLCAweGNhOThiNzFmLCAweGVmYTAwNWRkLAorCTB4MTdiMDA5ZmUsIDB4NGI0YzZlYWYsIDB4ZTMxN2JlMzYsIDB4M2I2MzY1NWIsIDB4Nzg4YWYyNmYsIDB4NWRjMzhiNGUsCisJMHg4YTQ3MzgwOSwgMHg0ZDc3Yzg1NywgMHgyN2Q1ZGY4ZSwgMHhlMzg4ZmUwMSwgMHgyNmJkNmNhYiwgMHg3ZmM3ZDc1MSwKKwkweGU0NTkzYzNhLCAweGU5Yzg1ZjIwLCAweGIzNjE3NTg5LCAweDNkNzg3NjhkLCAweGVkMmMxYTZkLCAweDdlMzlmYTM1LAorCTB4N2EzODcyY2UsIDB4YWFkZmY2MzYsIDB4MDUwOGQxNWQsIDB4ZmRlYWJhNWEsIDB4Y2YzYTJlOTEsIDB4OGY3YzU5NTcsCisJMHhlZjdmNjYwZiwgMHg4NWNmM2U0NiwgMHhlYzJlNjM2YiwgMHg1MTNjYmE3MCwgMHgwZmIwYWFiMSwgMHhmZmNhZmRjZSwKKwkweDljMzFlNTc5LCAweGI2MTViZWZiLCAweDlmYTNjODA0LCAweDg0MGFhMDdkLCAweGM2NzlkMGNlLCAweGUxYTdjNDcyLAorCTB4ZGQzZmFlOTIsIDB4MTBmN2M5MTIsIDB4MTc4NDU1M2YsIDB4ZWEyNWE2ZmUsIDB4ZTk5NzVjZmUsIDB4MGIzYmRkNWMsCisJMHg0MWRlZmZlMywgMHhiOGMwOGVlMywgMHgxODg5YWQ4MSwgMHhjNGNmZTNkNywgMHgxOTE1YmViOCwgMHg1N2Q5ZGQzMSwKKwkweGJkNjZiNGY0LCAweGVhYjZmMzk0LCAweGVlY2Q2NGY2LCAweDc5MWVmOTBjLCAweDYyNzBmN2M4LCAweDFlNDdiZTQxLAorCTB4Yzg1MjNkZjIsIDB4NGRiZWY4ZjcsIDB4NmMwYzJmZjMsIDB4N2U4M2NmNjgsIDB4YjIyYjFmZWEsIDB4NzViY2Y5NmEsCisJMHhiZjdlNDE2NiwgMHg4MGYwODk0NSwgMHg3OGEyZGNmZiwgMHhjMWJjNzBmYSwgMHhjNGRlZjk2NiwgMHhkNTc1OTBmMiwKKwkweDQ5ZGE2YmQzLCAweGVkZDAzMzA2LCAweDg0MzkyZTBmLCAweDhjNmU2ZTMxLCAweGM3ZTUzNTg4LCAweGVhOWFmYTM5LAorCTB4NGM1MmJhMTcsIDB4MGUyNWQ3ZTUsIDB4ZWY1Zjk1MzYsIDB4N2ZlNTMzY2UsIDB4YTlhNTc1OTgsIDB4MThjZjY0ZmUsCisJMHhhMzQ3ZmU1MywgMHg5ZmQ1MzdhZSwgMHhjYTZhOWRlYSwgMHhjNzM4OWY0ZiwgMHg1MTY2N2Y1NCwgMHhjNmZjYTliMSwKKwkweGU1NGM0YmQ5LCAweDRjY2I3YzczLCAweDNmZTU3OWY5LCAweGE5YmZkNTM1LCAweGRjYTk4NTc2LCAweDljNTY1YzJiLAorCTB4NzdhMTdiNzcsIDB4ODY1ZmRlMTEsIDB4MmRlOTQ1ZGUsIDB4OGQzODY1NmYsIDB4OWM3YTNhZWIsIDB4Nzk3N2RiYTUsCisJMHg1MDcyNjk0ZSwgMHgzNmRlYTFiZiwgMHhkN2VlMjVkMCwgMHg2ODA3MGU4MCwgMHhjMGJlNjdmNywgMHg3ZTFiZDJiOSwKKwkweGY1MjJhMGM5LCAweDQxN2QyM2RlLCAweDQyZjVhMTM3LCAweDFlNDc0N2NiLCAweDM1YTZlOGI4LCAweDdhMmE3YTJjLAorCTB4YzRmODk1YTYsIDB4MTQwZTJiZTgsIDB4ZjU3ZTUxYTQsIDB4YWQzMzg1NTMsIDB4NWY0NjVmYzQsIDB4NTRmOWUwN2QsCisJMHhiNTNkMzdjYSwgMHgzYjBmOTY0YSwgMHg1MWU1MTE3MCwgMHhmMzIwZGY0ZiwgMHgxYThiMDVkMywgMHg3YWY5MGM4ZiwKKwkweDMxZTY5Zjg2LCAweDZiYTkwN2ZhLCAweGQyNmVkMjNkLCAweGE3NjliYzZkLCAweDgwZjA4ODNkLCAweDAxZTA0ZDc4LAorCTB4MTNlODkwNjksIDB4NGZhMjAxZTksIDB4N2QxMmFmYTQsIDB4NzEwYmE1OTYsIDB4ZTkxM2U4OTAsIDB4ZjEzZmQyMjEsCisJMHg3ZmE0ZjdmZCwgMHhmYTRjM2QyMiwgMHg0OWI3ZDIyNywgMHg4NDdhNDRmZiwgMHhlZmE0NGZmNCwgMHhmNGU2Y2ZkNSwKKwkweGI3MWY3YTgzLCAweDM5N2Q0M2ZiLCAweDZiZWI0N2E3LCAweGY1YzdmYmY5LCAweGI5ZmU5Yzc1LCAweDVkZGZjZmRlLAorCTB4NDMzYjc0NDMsIDB4YmEzMWVkOTAsIDB4N2UxYWFiZmYsIDB4NzZlZGQ4NDcsIDB4ZmQxYWNlZGIsIDB4OWU1NzhhYzIsCisJMHhiMmJmYmFhNywgMHg0NmI0NTZhMSwgMHg1YWI2OWY2MiwgMHhiYTM5NGY2MywgMHhmMzNkOTBmYywgMHg2NTM4YWI1YiwKKwkweDBmNWViZjkwLCAweGUxMGQyNmY3LCAweDk4YmJmYmYxLCAweDhmZGY2YjZmLCAweGYyMDNlOTg5LCAweDUyMGE5ZDY5LAorCTB4OWYyODI5N2QsIDB4MmFiYTVmOTksIDB4MGZjN2Y4ODYsIDB4ODFiNWE5YmUsIDB4NzRiNDNlNWUsIDB4MGJmYjdmN2YsCisJMHg4N2RhNGU4ZCwgMHg4Yzg3MzM3OCwgMHhlYmJiZjJlOCwgMHhmOGNlZWY3ZSwgMHgxZTVmODMxYSwgMHg4ZTNkNmNmZSwKKwkweGYzYzdmNzQ3LCAweDQ3M2UyMTlmLCAweGYxZWI5M2Y3LCAweGVmNmFkNzQxLCAweDcwN2VlOTIzLCAweGVmNDdmZTNkLAorCTB4NjA5MmYwYjcsIDB4MWFjZDc3YmUsIDB4NTEyZGNiMmIsIDB4MzhjNDExNTYsIDB4MzVjZjljN2EsIDB4YzQzYzk2OGUsCisJMHhlOTUzNWMzYiwgMHgzZWI3MzhlNCwgMHgyM2VmMWRmNCwgMHhkZTJmM2Q1MiwgMHgyNWZjZGI5OSwgMHhmMmVkY2ZkNSwKKwkweGU2ZDFmN2JiLCAweDhmM2NlNTQxLCAweGI2M2U0YmMyLCAweGM1YTM1ZWQ3LCAweDQzYmRhMDFkLCAweDc1M2JmMzk2LAorCTB4ZmM4MzExODgsIDB4ZTFkYjI5NDEsIDB4N2RhODU1MWUsIDB4MDAxYzU3N2UsIDB4ZmFjYTQ3ZWEsIDB4ZmU5N2Y0NDEsCisJMHhkZDE3OGQxNSwgMHhjNDA2OGZiNSwgMHg2ZTIxZTRiNSwgMHg5M2I1NDA2YywgMHg4YzM2YzZlMywgMHhiOWJkZjIwOSwKKwkweGRlZDdiMWU5LCAweDRlMjJhYWQzLCAweGQ4YzdlNjM4LCAweGZhYTc0ZjQ3LCAweGVmY2YwMjY2LCAweGYwMGY3M2VlLAorCTB4NWM1YTdlNTAsIDB4NTNhNDZmNWEsIDB4ZWJiNWRlNDMsIDB4NjJlNjdkNjYsIDB4ZTk3Yzc1NWQsIDB4NGJkN2Q3NzgsCisJMHg5ZTIxYjdjNywgMHg1ZGZjZjE4YSwgMHg2ZWJhMTdlYiwgMHhhZmE1ZWJhMSwgMHgyZWE1ZTE1MywgMHg5NzdmMDNmYywKKwkweGZhZDc0ZmFmLCAweGZmZmIzZWMxLCAweGI3MGNmYWNiLCAweGNjN2RmMGI2LCAweDA3ODc0YWIwLCAweDdhZDc3ZDcwLAorCTB4MjYyZWRjZGQsIDB4ZjE3ODNlZTAsIDB4YTQ0MWY3MjUsIDB4NWY3Y2QyNGIsIDB4OGE5NjdmODAsIDB4YzA1YzEzMzEsCisJMHg4MWNkNGI5MSwgMHhkZWI0Mjc5ZCwgMHhlZjU5ZWZmMiwgMHgwNzdhOTBlMSwgMHg3Y2Q2MGFlMiwgMHhiZDc5NzY5ZCwKKwkweDFhZjUyMWRkLCAweDdlZDYwYjYyLCAweDM3NGNlZDJkLCAweGU0M2Q3Y2UyLCAweGVkMWZiMWI2LCAweDFlM2Q3MGNkLAorCTB4YTNjY2ViYzMsIDB4ZjFhNzFjNzUsIDB4OTZhMjQzYTMsIDB4ZDcxMjBmY2YsIDB4ZjFkZjU4ZmMsIDB4Y2I4ZjUyZGEsCisJMHhlZTcyY2M1ZSwgMHg2ZTU5YTc3OCwgMHg1MTRkZjA5YywgMHhkMDlkYzYyMywgMHhkNjhlNDQyYiwgMHg2ODM3ZTFmYywKKwkweDlhMjc1ZWZkLCAweDdiZDBkZmI4LCAweGYyNjgzN2YyLCAweGY5M2RlODY5LCAweGYyNjg4NmU3LCAweDAxNDg4YTY1LAorCTB4M2MyZjFhOWYsIDB4YmRlZDJlMTIsIDB4ZDkyZWYxODMsIDB4MmY0NjkyNmYsIDB4OGM1NTZlNjksIDB4OWYwODNkMDYsCisJMHg1NWYxY2MxNSwgMHg4YjkwNzdiYywgMHhiZjljZmQ3MSwgMHhmZDM4MDQ1ZSwgMHgzZjcyMDhhMSwgMHgyMjkxODk5MywKKwkweDZjMjEyM2ZmLCAweDc5MDM5ZGYyLCAweGY1NWFiMzNmLCAweDJjZTQyN2ZkLCAweGMyZTY1ZWZkLCAweGQ4YWJkZjcwLAorCTB4NGU0NGFmNzcsIDB4MjhmNzhmOTksIDB4NGI4YzE1YzYsIDB4ZTMwM2JiNDcsIDB4MWM5ZjJjZGQsIDB4YmNiMWE0NzAsCisJMHg4YjY1N2Q4NCwgMHg2ZjdmZGFlYiwgMHg2ZTkyZjlkMCwgMHg5MTA2Zjc5NSwgMHgzYTYwZGVlMiwgMHhlOWQ3OTY2ZCwKKwkweDg2ZmU0MWZjLCAweGVkMDIxNWFjLCAweDcxY2RiODI2LCAweDFmZmI3YTM4LCAweDZiMGFjNmJhLCAweGZkZmNjZjQxLAorCTB4ZmE3YmI5ODcsIDB4NjZmM2FlYzMsIDB4YjBmMWEwZWMsIDB4N2IxOWJmODMsIDB4ZjdjYzc4YzUsIDB4MTYzZWQ4Y2QsCisJMHgzOWQ5ODY5OSwgMHhiZDMxNzljZCwgMHhhNzRlNzkzYiwgMHgyNmYxYWVlNywgMHhjZjdjNmIwOCwgMHgxYWYxZDY3OCwKKwkweGNmMWQ0ZjhhLCAweDJmNWUwMmZmLCAweDJmZDc4Nzc0LCAweDM3MjkwYjA2LCAweGEyM2U0YTQ3LCAweGFjMmFiN2UzLAorCTB4MWY2NzFlZjMsIDB4YTU0NDVjNjMsIDB4MzNlOWUyNDMsIDB4Yjg3YjhjODAsIDB4M2NmMTU3NzUsIDB4ZmQxN2E5M2UsCisJMHg3NTQ1ZWY4MSwgMHhkNDNjYjhhMywgMHhjNzM2MjUwZSwgMHhjNzdmNWU3MCwgMHhlZjgzY2NlYywgMHg3YzEyMjc0NiwKKwkweGVhN2MzOWQ3LCAweGQ5Y2JjMjUwLCAweDQ5MjY2MGZjLCAweDBkOTNlMjMwLCAweGZhZWY3YzBkLCAweDA3YWFiM2RjLAorCTB4ZWFhNTdmZjIsIDB4NGYwMWViNWUsIDB4M2Y2NTUzNzksIDB4OTVlNmY4YTAsIDB4YzUwOWY4NjQsIDB4YTNlM2VlZTYsCisJMHhhZjEyMWQyYiwgMHgzMmIzZmViYSwgMHhhN2Y3ODhhZCwgMHhjYTI0MTU3MCwgMHgzZGU0ZDVmNywgMHhlODFlNWQ3MiwKKwkweDhiZTMyNjFmLCAweDNkY2NmYmY1LCAweDIzMjMwN2M5LCAweDFmZWIxZjI0LCAweGJlYWVmOTI2LCAweGYzOGVkNDllLAorCTB4NDhjZmQ0NDksIDB4Zjc0OTUzZTIsIDB4YjAzZWIwNDUsIDB4MWE0ZGU1ZGIsIDB4NzhjYTdmMGEsIDB4NzVhNzkyNjEsCisJMHg5N2EzYmZiZCwgMHg1YWYwM2Y3YywgMHg2OGQwZjk5MSwgMHg2NDNmOGZjYSwgMHhlZjJhMDExMywgMHhmMTRjMmYxOCwKKwkweDk0NmY4NTY0LCAweGZhMTZiYmYyLCAweDQ0YjA5OGZkLCAweGZjMGNhZmQyLCAweDYxMWRkYzIwLCAweDMyMzQ2ZjdhLAorCTB4OGY5NGNlMmIsIDB4ZDUzM2Y0ZjIsIDB4NmE5NTE5OGYsIDB4MGVmNThmMmEsIDB4NGZjNzk1MzEsIDB4N2JlNTM3Y2MsCisJMHhhYTY1NWQxNywgMHg1OGY2NjdkZiwgMHhlZmFmYmU1MywgMHhhNGZkNTMwNiwgMHhiY2E2NjlmMiwgMHhlNDkyOTdjZSwKKwkweDc2YTAzMTI3LCAweGMwZmRhOWFlLCAweGZkNTMxMmJhLCAweGY5ODU3ZjE0LCAweGY3YmY1NGZkLCAweDllMDI1NjQ4LAorCTB4Njk3Zjk0NzcsIDB4YmM4Nzk2NmIsIDB4OTYxMTZhYWYsIDB4OTBlZjVkOTEsIDB4ZGU1YTNhZmMsIDB4NWNlODk5MDcsCisJMHg2NDkxZWZjNCwgMHgwY2NjZmQzNCwgMHg4YThkZmE4ZiwgMHg0NjI5MjY3MywgMHhhZTI0ZjdlMSwgMHg2MGY5OWI3MywKKwkweDNmMzlhMjYxLCAweDJhZjc5NWRlLCAweDJiOWM2ZTk2LCAweGE4MjhmZTM0LCAweDZhOTI5ZTgwLCAweGYzZWZhNmFkLAorCTB4MzQ3YzZhODYsIDB4OWViMmU0NTcsIDB4ZWZlYjVkZmUsIDB4ZmY1YTYyMWIsIDB4NGU1ZDdjNTAsIDB4MDVlN2NmMGYsCisJMHg2ZjllZDJkZCwgMHhmOWVjMTc5YywgMHg5ZWMwYmM0NiwgMHg5ZWMzY2M2ZiwgMHg3YjBmYWM2ZiwgMHhmNjFjYjFiZSwKKwkweGMxNzk2MzdjLCAweDhjMWQzMzIxLCAweDgzYTY2MjM4LCAweGU5OWE4ZTJiLCAweGQwY2ZhNzQwLCAweGQ1YjJiYWY1LAorCTB4YTdjMjFmNGMsIDB4YjA3Zjk0ZjgsIDB4NmE3ZjU3NWUsIDB4ZjVkMDlmYTYsIDB4ZDc4YjA5MjEsIDB4MTE1MzgyNmYsCisJMHhmYmZjYTQ4ZiwgMHg2NDJlYjVlYiwgMHg4N2Q3M2FiZCwgMHhmNmY5MGRmMCwgMHhiZTUwZTBkYSwgMHg0ODc4NWIyNywKKwkweGU0Yjc3ODE1LCAweGQ3OWU2ZDUxLCAweDI3ZTVhZDBkLCAweDdkNWJiNmMzLCAweGFlN2RlNmJmLCAweDVmNDM1NWQxLAorCTB4ODcxZDU3NDksIDB4MWYwNzBmOWUsIDB4ZmZhNDM0N2QsIDB4MDJmOWZiZDcsIDB4ZmUzYjNmYTgsIDB4ZjQxZGIyNjIsCisJMHg0NWRmMmVkMSwgMHhlZTFmMDM2YiwgMHg0OWI3MTVkZCwgMHg3N2JjYmE3YSwgMHhlMzk1MzNmMiwgMHg5YTU5OGUxOCwKKwkweDgyZWJmMDE0LCAweGYwMzZkZjE4LCAweDZiYjM5YmNiLCAweDEzNjdmODE1LCAweDQ1OGVkMTQ1LCAweDhmZjljYjg4LAorCTB4MTdlNDY0YjAsIDB4NzdmNzk0MGMsIDB4ZGYyYjc2NDUsIDB4ZTJmOWQwN2YsIDB4MTcxOTI0ODIsIDB4ZjM1NDMyZDgsCisJMHhkYzY0N2FmMywgMHhhNTQzZjNjZSwgMHhlM2NhMjRkZCwgMHhlMmUzMzhlMiwgMHg4M2JmNzk2YywgMHgwNWU0OTlkNCwKKwkweGUxYzdjMDM5LCAweDQ3YzA0MWYwLCAweDY5ZGY4NWIzLCAweDM5YjliNTZjLCAweDg2ZmZjNDZlLCAweDgzZjdlMDJhLAorCTB4NzJmOTBiMWMsIDB4MzVkZjI2ODAsIDB4MDA3MGU0N2MsIDB4ODVlYjQxZmUsIDB4MWMxZDljZTksIDB4NWJlMjk4NzAsCisJMHg5OTczNmU4NywgMHg4OTJkMzlmMiwgMHg3NmMzZmFhNiwgMHg3OWU1NGRiYiwgMHg3OTUzMmNjMSwgMHgyOThmMjFjMSwKKwkweDI4YzhlMjNmLCAweDhlMmJmZDUzLCAweDJiZjk0ZDdhLCAweGVhOWEyNzViLCAweDkxNjlmZDVmLCAweGRhMjQ5ZjI5LAorCTB4MDc3ZTA2MWYsIDB4M2U4ZjUyMmEsIDB4ZTI1NTM0MzMsIDB4N2UzODJkYzksIDB4YjE5ZGMxNmYsIDB4YTZhN2RlZjIsCisJMHhiYTcyZWI1ZiwgMHhkM2VjZjcxZSwgMHhkZTU0MzllOCwgMHg3MWY3NjgxZiwgMHg1ZjQzNzUxYywgMHgxODdiZTFlMSwKKwkweDEyOWY0ZDBlLCAweGE3YzAzZDY2LCAweGRlNzcyZGM1LCAweGUzOWJmMGEzLCAweGU1NzhmNTk2LCAweGQzNDE3ZDRlLAorCTB4ZGQzOTc0MGYsIDB4MzVlY2FmMTAsIDB4MDgyZjJiYzYsIDB4ZTAzZGZlZWIsIDB4M2RkNmQyZmYsIDB4NzY4MWZlMTQsCisJMHg5Zjg2ZGYzOSwgMHg4OGRlZjlkYSwgMHgzYzI4NTcwZSwgMHhkYTM4YjUzMywgMHhlZmVlOGUyZCwgMHgyNWIyZDhmNSwKKwkweDE0NjUyNTlkLCAweGZlZjQxZGZkLCAweGNhZDNjZDk4LCAweDM2NWZkZDZmLCAweDRmZDVhNzllLCAweDBiZjBkNWY0LAorCTB4ZmJhNTY3YmIsIDB4MzA1YmM3YmIsIDB4YmU2N2NlNGMsIDB4ZDRmMzcyYzUsIDB4MzJjZjhlNmMsIDB4M2JkZjgzYmQsCisJMHg1MWZkZWE1YiwgMHhmM2I3NGFiOSwgMHhlMzIzMTA1YiwgMHhkZDhjNDRhNywgMHg3OWVkZmEwZCwgMHg0NGNmODkzYywKKwkweGZiZTQ2OGJiLCAweGZmOWM1YTQ3LCAweGVlNWI2YjRkLCAweGYzNDU0NDE5LCAweDdiZGE0ZGVkLCAweGU4MWIwMTYwLAorCTB4OTI1OGQyNjEsIDB4ZDg4NGYyYzMsIDB4YjM1NzY1YjYsIDB4YzdhMmU0OTMsIDB4M2Y2Y2FjZWEsIDB4MzVkZGJmZTksCisJMHhjZWI4MjQ4YiwgMHg0OTAzMWJmYiwgMHg0MDdkMDFlZiwgMHhiNGJlODFiNiwgMHg3MWU1NDcyMSwgMHgxYjllYzFhZSwKKwkweDRkZjZmZDgxLCAweGZiM2Q5YzY3LCAweGNlZDA4NDA1LCAweDc1NGZhOTBiLCAweDg3NGM2ZjQzLCAweGFmZmUzY2ZhLAorCTB4ZjE0M2VkZTMsIDB4NDJhZGViYTQsIDB4ZDc0YzMzOGIsIDB4ZDdmMWQyZTAsIDB4ZjBkMDc3NjksIDB4NzA3ZmRmYTcsCisJMHg2ZDE1YjMyZiwgMHg4YTNkZjI3MiwgMHhkMmRiODg4OSwgMHg0NzI1YWZkNywgMHg4NmFkNjVkMiwgMHgzZjAzZDQwZiwKKwkweGExNWVhOWVhLCAweGZiMDMxZDlhLCAweGM3NzA4NzcyLCAweDQzYTFiYWI4LCAweGMyYmZmZDNkLCAweDllZmY4ZThiLAorCTB4YzRmNTU3ZWUsIDB4YzJmOTQyMWYsIDB4ZWFiN2RkNzcsIDB4ZDlmZjRlODksIDB4M2UwNjU3N2IsIDB4YjQ2OGUzMjEsCisJMHg1YmE0MDk3NSwgMHg2NzdkM2ZkOCwgMHg2ZjNmNzk5NCwgMHg4ZDc2OTZjYywgMHhhMmJlZGE3MSwgMHg2Nzk5ZGRmMywKKwkweGY2MDIxN2U2LCAweGFhNTU4NmYxLCAweDM5ZTQyZmM2LCAweGM0NTI5YzVlLCAweDNhOGIxMWVmLCAweGU1MzNjYjE3LAorCTB4Y2ZkNjJmMWEsIDB4YzgwZjg1ZDcsIDB4ZjVhZWUwZjcsIDB4NDU1YzI1MTYsIDB4OWI2NjkyZjksIDB4MTVhMDQ4ZDgsCisJMHhmMzhmYmJmYiwgMHgxYjkzYmY2NiwgMHg0NDllZmU3MSwgMHgzNzI2Y2RjMCwgMHg0OWI0YjcxYSwgMHhiOTRmZWMwOSwKKwkweGM1ZWNiZGZjLCAweDVjN2VmOTRlLCAweDhiZDliYmU4LCAweDJmMTdmZDM1LCAweDg2ZGY2MDJhLCAweGNmZWU2NWZhLAorCTB4OGY2YmNlZDYsIDB4ZTEyYjdjZjAsIDB4MGJhNWJkNjcsIDB4MDJkZThkN2UsIDB4ZTgzMTFkZjIsIDB4ZjNiNGFhYzMsCisJMHg4ZTk2OWM3MCwgMHgyNGZjMzczNywgMHhjMjc5NWRmMSwgMHhjZTE2NDQ2ZiwgMHhiNzZiNDZmMywgMHhmODlkNzQ3MSwKKwkweDlkMmFmZGQ1LCAweDFjYzNjMjdlLCAweDE3MWExZmFmLCAweDRhZmZkNjcwLCAweDFhN2U3Nzc0LCAweGQzZDM3ZmRkLAorCTB4ZGZmNGU4M2UsIDB4YTg1Zjg3N2MsIDB4MWU4OTY5YzMsIDB4ZmYwNDNlMDUsIDB4NTdlOGRiYmYsIDB4ODI0OGYzZjksCisJMHgzMTI3ZmQ5MCwgMHg2YWI0OGZmMCwgMHhiOThkODlmZCwgMHhmNDRmZGRkZCwgMHhmMWM1ZDhhZCwgMHhiZTJjYWIxMCwKKwkweGYyNWM0MGZmLCAweGVmMWZlYTE5LCAweDNjZTVkZWIwLCAweGY4ZmI4MDkwLCAweGQzYmIzNDkzLCAweGU0ZDZmM2U1LAorCTB4N2VmMmQxYjAsIDB4ZTU1Zjg3NDAsIDB4Mjg5OGVlZjUsIDB4MWYxMzczZWYsIDB4YmE3N2Q4MTUsIDB4MDhhYTdmMWYsCisJMHhmYmFhNDJmNiwgMHg0NjZiN2M0OSwgMHgzZjc1ZmUzMSwgMHgxNDcwNzE0OSwgMHg2MWIzMzljMywgMHg0ODRmMGRiMSwKKwkweDdiN2MzZWI2LCAweGNiYmI4NDYxLCAweDQwM2FkMjdmLCAweGU0ZjRlN2M2LCAweGM5N2U5OTQ3LCAweGI4Y2RmZGMzLAorCTB4NzNmNzE1NzQsIDB4Y2E0NTNiMmMsIDB4MmNmNzhkNmIsIDB4ZDkwZDlkMDMsIDB4Njc5ODZjMjYsIDB4ZGZmYmFkYWIsCisJMHgyMzkyOTgxOSwgMHhmODUyZDFmNywgMHhlMjFiN2JkMiwgMHhhYzI4NTY3ZSwgMHg4NDU3MmMwNywgMHg3Y2M0MDcxZSwKKwkweDZjNWZjZjVlLCAweDMyODVmMmQyLCAweDk5MmFjYjdmLCAweGM1ZGVkNTZmLCAweDNiZDlhYWRhLCAweDk4YTQ0ZjMwLAorCTB4ZWRmMGY0MGYsIDB4ZjMwNDNkOWEsIDB4ZTA3OThhNDAsIDB4ZjIxYWY4M2IsIDB4ODNjODZiZTAsIDB4YmUwZjIxYWYsCisJMHgwZDdjMTQ4NiwgMHg1MTQ0NGJkZiwgMHhmZDJhOWU3MiwgMHhmYjBkZTMzZCwgMHhmMTllZmUwMywgMHhmZTA5YjkwNiwKKwkweGZlMWU2MzFlLCAweGY4N2Q2MzFlLCAweGYwZTU4YzdiLCAweGUxY2IxOGY3LCAweGUxZTYzMWVmLCAweDg3ZDYzMWVmLAorCTB4ODc5OGM3YmYsIDB4MWY1OGM3YmYsIDB4MWU2MzFlZmUsIDB4N2Q2MzFlZmUsIDB4ZTU4YzdiZjgsIDB4Y2IxOGY3ZjAsCisJMHhlNjMxZWZlMSwgMHhkNjMxZWZlMSwgMHg1OGM3YmY4NywgMHg2MjlkNzM3ZSwgMHhhY2RkMDdmMiwgMHhiYTUwM2JiZCwKKwkweGEzZTk4ZTNlLCAweDI5MjhiNTM5LCAweDNmZjdkNjg3LCAweGM3ZTdmZjIzLCAweGYzYWM1NGI2LCAweDZlZmMyNWRlLAorCTB4NDc4NDU1NjAsIDB4NDRkMzczYWUsIDB4MjExNmVlYjksIDB4MGU3ZGI5ZDcsIDB4NzZlZGYzYWYsIDB4ZjE5NDJmOTksCisJMHgwM2Y0YTFjMiwgMHg3NGY4Y2FiZiwgMHgwYTQxNTdlOSwgMHhmODUyMGFiZiwgMHhhZmMyOTA1NSwgMHhmZDJhZGUzMiwKKwkweDU3ZTE0ODJhLCAweDU1Zjg3N2MxLCAweDgyYWZjMjkwLCAweGE0MTU3ZTE0LCAweDg1MjBhYmYwLCAweGZjMjkwNTVmLAorCTB4YmYwNzY4MmEsIDB4NTVmODUyMGEsIDB4MTU3ZTFkZjAsIDB4ZTBhYmYwYTQsIDB4MDM4MjMxZmIsIDB4MmUxZDE1ZmUsCisJMHgyNmU5ZjljOCwgMHhkMGU4OTQzZCwgMHg0Y2JhODdhNCwgMHhjNmY5Yzg3OSwgMHg4ZGYzOTBmYSwgMHg4ZGYzOTBlNSwKKwkweDhkZjM5MGU1LCAweGM2ZjljODc5LCAweDhkZjM5MGZhLCAweDg4ZjExYmY5LCAweGVmMjk2ZjcxLCAweGRlNDFkYjFiLAorCTB4OWE3M2U2MzcsIDB4ODZjMWFmZmMsIDB4ZjljMzc5MzUsIDB4NDZiNjkxNTcsIDB4MmUyOThmMjksIDB4OWU3MmViOTIsCisJMHg1OGZmMDU5YSwgMHgxYzkyYjg2YiwgMHg3NjM5MjFlYiwgMHg4ZDY3NmZjNSwgMHg4OWY4OTJiZiwgMHgyYjk3NmYxNiwKKwkweDZmNTgyZGRhLCAweGJhZDM3YmY2LCAweGUzODI4MmY5LCAweDNiZmU3MzgzLCAweDdmNzVjYjkxLCAweGJhZDFmZjJiLAorCTB4YWMxNGVkZTcsIDB4OTBjYjZjMzcsIDB4M2RlZGU5NzAsIDB4ZDUyMmE1YzIsIDB4YmJlNTc3ZWIsIDB4YmUzYTE3YWYsCisJMHhhNWY5OGY1ZSwgMHgyODUyMGUwMSwgMHg5MTA3MTBmMywgMHgxZjMzYmI3NywgMHgyZDViZWRmMSwgMHg1ZDBiOGM4YSwKKwkweDQzNzJlMzI5LCAweGUzNDlhYWU5LCAweDNiMmQ1YjRiLCAweGJiNTA0NDBlLCAweDgzYzU2MmY2LCAweDU2OTkwNzdiLAorCTB4MGY5NmM4NzEsIDB4NDNlNmQ1M2MsIDB4ODljYmE4OWUsIDB4NmI4M2UyZDUsIDB4OTAzYzQyYWYsIDB4N2Y2ZWI3MGUsCisJMHhmN2MxM2UyNCwgMHgwYmI3NDZkZCwgMHg3MzhkMTk3YiwgMHg4ZWMyMTdjZCwgMHg2NDk4NWJkZiwgMHhkYTA0ZjI5NywKKwkweGVhMWNkZjQxLCAweDBjOWJiYzU3LCAweDQ3MzJiZGY0LCAweGZmM2U3YjllLCAweGU4Y2FhYmIyLCAweGI1ZWRkMGZiLAorCTB4ZGQxZWUxNTcsIDB4ZWVkOTA4YTQsIDB4MzM0NzhmMzcsIDB4MmEzNGE3MWUsIDB4YzlmZWYwOWIsIDB4OGJjMmVkZTgsCisJMHhkNGJmYjFmYiwgMHhkZGJhMWVlMCwgMHg3MWUzMmY2NSwgMHg0ZWZmN2M1ZCwgMHg0Mzc4YjdlZiwgMHgyYzE3ZGYzMiwKKwkweDEzZTNhZDE2LCAweGYwYTEyN2Q5LCAweGRlM2FlNmZiLCAweDYyYWY3ZTY4LCAweDBmZTJjNDdlLCAweDJmZmM4ZWMxLAorCTB4NzEyMWMzZGYsIDB4YzNkY2ZiZjEsIDB4NmM3ODY2YjksIDB4YzRkYmUyMjEsIDB4ZTQwZWY5NWUsIDB4YWJjNWUxZTQsCisJMHhiZTVjMTM3YSwgMHhmMjA3N2M4MCwgMHg1ZjZhMmY5YSwgMHhmOTY2ZmNlMywgMHhjZjkzMjQwZSwgMHhjZjhmODY0OCwKKwkweDg1N2U0MWMzLCAweGUyOThmZmRmLCAweGU1ZTk2OGRmLCAweDE1ZTBiZGM2LCAweGRmZDQwNGI2LCAweDBiNTAzYzJlLAorCTB4YWY3OTA5MDYsIDB4YjY1NzlmNTUsIDB4NTcwOTYyMzgsIDB4OTVlMjJmNDAsIDB4MTFmZDAzNzgsIDB4N2EwMTk4ZTcsCisJMHhmOGQ4ZjNjOSwgMHg1NmE5OTA3ZCwgMHg0NmZjMGQ5NywgMHg1ZDhhNzM5NywgMHg3NTQyZWM3MiwgMHhmN2RmMGM3NCwKKwkweDJlMTM5MTBiLCAweGI4ZTZmNjM2LCAweDhlM2Q3ZjhkLCAweDkzZWY4M2E0LCAweGNlMTVkZjJmLCAweGY4OGY4NTcyLAorCTB4YjllNmY4MDcsIDB4NTk3NzE5M2MsIDB4OTFjM2VjYjksIDB4MzhhZWQ0OTYsIDB4ODEyOWQzOTIsIDB4ZjNkZjc4YWQsCisJMHhlODhlZWE3NCwgMHgxMWNiMGE1MSwgMHhkYjVmYzA4NywgMHg3YmU3OWYxYSwgMHg1ZWFiYzU4MiwgMHgxNzEwZmJlMywKKwkweDk2ODgxZjFiLCAweDdmYTRhYWY3LCAweDliYzM0Y2E1LCAweGE4NWE2ZjZlLCAweDE2OTk0ZmFkLCAweDVlYmM3NDNmLAorCTB4ZTc0YmNmYmUsIDB4NzFmN2JmMzAsIDB4NzJjNmQxYjEsIDB4MjhiY2E4NDYsIDB4ODgwZmViODQsIDB4YjQ2ZjJiNzMsCisJMHhjNWQzZGRmMSwgMHgyNzU3OGI2YiwgMHg3NzdlZWU4YSwgMHhjZmUzMmJjNSwgMHgzNDk3NzFiNSwgMHhhODRlMzhkYSwKKwkweDJiNDc3YjVjLCAweDk2NTg3N2Y0LCAweGQyZTg3MjZhLCAweDI3ZWZlNjZkLCAweDRmZTQ0MjcyLCAweGFkNDRmZGZkLAorCTB4YWY1YmYxNGUsIDB4YTgzOTY0Y2MsIDB4ZWU3MWM2ZDYsIDB4Yjk0ODU3ZjMsIDB4MDExMGVjNDgsIDB4YmY5ODY3ZGMsCisJMHhlZjA1OWM2MiwgMHhlNWRmY2M1OCwgMHhkMGRkMjhmNSwgMHg3YzlhM2JkMSwgMHgxMjgzMDkzNCwgMHg4YTVlYTdkZSwKKwkweGVkMzJiZTYwLCAweGNmY2UzZjUyLCAweGU5Yzg5NGJhLCAweGU0YjI5NzhkLCAweGQxMWRhYzc3LCAweGJjYTE2YjRiLAorCTB4MjZiZWZmNWYsIDB4MWM0NGNkMTcsIDB4YjJlNDAxNjUsIDB4MWRkNzRjM2UsIDB4MjIxOGQ3NDQsIDB4NDM1N2UzNTcsCisJMHgzMDJiY2FiYywgMHhmOWIyNGZjMywgMHg3MzRlMjE1NiwgMHhmN2MxNDZkMiwgMHg3ZTQzMjY5MSwgMHg5MGQ5ODJhMiwKKwkweDJmYjAwYWE3LCAweDNlZjkwYTUyLCAweGVmODU0NGM2LCAweGJlMWU0Y2I3LCAweGI0MDdkYjRjLCAweDExZjMwNDJmLAorCTB4MzdjM2Y3N2UsIDB4ZjEwMDZhN2UsIDB4M2I3ZGIzMzcsIDB4N2Q3NzU4MmMsIDB4NmRmY2Y4M2YsIDB4NjRlNjBlZmMsCisJMHg3YmM3NjJiZiwgMHhjZjRkM2U4MSwgMHg3NDNkZTlkNiwgMHhkNDg4MmM1ZiwgMHg2OTRlNjNlYywgMHg4ZmI0ZWFmZiwKKwkweDljN2U1ODAxLCAweGM0NDZmMjI3LCAweDJkODAyZWIzLCAweGIwYjY5ZmIzLCAweDZjYThhYTg0LCAweDFiOWM5ZTU5LAorCTB4OTQyMzYzNzksIDB4NmVkMzdmYWMsIDB4OTE2MmRmMzIsIDB4ZmU0ODlmZjcsIDB4NzE3NTc4ZTMsIDB4ZTUwZmIwYTQsCisJMHhmOTJhZDc4YiwgMHhlMWQ3OTc4OCwgMHhkOGQ4N2FmYSwgMHg3NzdhYzM0OSwgMHhlNzQ5NDFkMSwgMHgwM2VlY2NmZSwKKwkweDVkZjk2MGJkLCAweDRjZmYyNjE5LCAweGY4NGE1YTY4LCAweDEwNWEzZWM2LCAweGZjNjNmYWQzLCAweDVjODRkMGQyLAorCTB4ODg5ZjFkZTEsIDB4ZjlmNWM4NzcsIDB4MDJlMjIwOGEsIDB4ZGJmOTZhZTcsIDB4OGZmMmJkOWUsIDB4Mjc4YzljNmIsCisJMHhlZGNkOGZjZSwgMHgzZmUyMjM3NywgMHgzOGZlNjVmZSwgMHg3ZjFhYjE1ZiwgMHhmMTRkYWEzNywgMHgzZGU1NzM3OSwKKwkweGRmNTgwOWM4LCAweDdlNzZlY2M4LCAweGE2NjY2MGM3LCAweDIxMmY5ZTRiLCAweDcyZGI5Njc2LCAweDg0NWRmMmRkLAorCTB4Njk0YjdiMTAsIDB4ODQ2ZjNjYjYsIDB4OGYzYzlkZDUsIDB4YjY2ZTNhZmQsIDB4M2VmM2VhNTcsIDB4MzNkZjMzNmUsCisJMHg1Y2VhZDNkNSwgMHhiZmY4Mzc2OSwgMHhhMGYxMjdiYSwgMHg3ZmZiZGU0NSwgMHhmMWQ4MTJjNCwgMHhhMDZiZDEyMiwKKwkweGU2MDE2ZmI3LCAweGJkZTIwOGZiLCAweGNmMWY3ZTE5LCAweGEzNDc3ZjRmLCAweGVmNjk0ZjkzLCAweDc0ZjRlODY1LAorCTB4ZGYyMmVlYWMsIDB4ZGE3MTI4OTcsIDB4OWU4MWFhZGQsIDB4N2MyOGQ2Y2EsIDB4NGVhNGIxMWYsIDB4YWRmNjI3ZGUsCisJMHhmY2JkZTQ1MSwgMHg4ZjU3ZWMxZSwgMHhkZjlhZjljZiwgMHgxN2ZjN2E1MSwgMHhjMzUwYjIxMSwgMHg5MWZiN2NlZiwKKwkweDVkMjkxY2Q3LCAweGRkNTNmZGY4LCAweDdmOTI2Y2FmLCAweDZmMTAzMzA2LCAweDljMzZiNzNmLCAweDdhZmU0MWRmLAorCTB4MDE4ZmQxNTgsIDB4ODdiNjY0N2YsIDB4ZjExMjY5ZDcsIDB4MWE5ZmQ0MzQsIDB4YmUyOWZiZTMsIDB4MDcyMzg4OTcsCisJMHhmMDVjNmY2MSwgMHg3ZGY4YjdmMywgMHgyOWJkOWFlMSwgMHhmMTYxZWVmYywgMHg3OGQ1YmNlZSwgMHg2MWViZTU0NywKKwkweDg5NzIzYmJlLCAweDJlOWQ4YjdlLCAweGVhOTBlNDNiLCAweDk3M2U1OGM2LCAweGVlZDFmNDE3LCAweGY2NzY4YmE5LAorCTB4ZjNlYmU5ZTcsIDB4MDc5NGFlNjAsIDB4OWM3MjNjOGEsIDB4NDUzZTlhMGIsIDB4MzU0ZGIzMDgsIDB4N2ZlNzkzZDUsCisJMHhlZGQ0M2VlOCwgMHg5NWY2YTFhMiwgMHhiZTJhZjdkMCwgMHg3YjAyOWVjYiwgMHg1NzYwZGQ4OSwgMHhiNjMxZWRkNSwKKwkweDcwNzNlM2FjLCAweDc3YjdjZjllLCAweGFmOGRiYmZmLCAweDRkNDc3NmViLCAweGE5ZDg1ZDlmLCAweGU4NGY2NmNmLAorCTB4OWQ3ZmI5MDMsIDB4YmQxZDgyZTIsIDB4MTFiZWU5Y2MsIDB4ODc2NWY1ZjEsIDB4MTRmMDg4NmMsIDB4ZjJkY2UyOTMsCisJMHhlNGJiOTJkZCwgMHhiNzI1MjViYiwgMHg5YjNmMzFlNiwgMHhjN2M5MzU4ZiwgMHhiYzUxODdiZCwgMHg5NDAyY2I4ZiwKKwkweGRmYmNmN2M2LCAweDY1N2JhZGU3LCAweDUzZDAxZWMwLCAweGUwZjdjYmQwLCAweDdiNWU1Y2NiLCAweDJhMmU0MTljLAorCTB4ZWY0YzUyNmQsIDB4MTdmOWU4MTgsIDB4NzIxZGE1NzMsIDB4YzAxOWE5M2UsIDB4YTZiNzRkZGYsIDB4ZDA4NmYxZDgsCisJMHgxMDhmMTI3YywgMHg0NmJhZjgzNywgMHhhYTNiN2EyNywgMHg5MzI1NzFjNywgMHhmOTQxYzU1MiwgMHg5ZGMxMTRhZSwKKwkweGZlMzNjNzIyLCAweDkzNDk1MTRlLCAweGFhMDYzZGY5LCAweGZlZGQ3MmNmLCAweGFmZWUyOGRjLCAweDRlZjM0NWQ4LAorCTB4Mzg2MmVhNDEsIDB4YTc4YzBmMDksIDB4M2ZhODdiZjYsIDB4ZWJjMzhmMzcsIDB4ZDgwYzFhNTEsIDB4OGY5ODM3NjAsCisJMHhjZmNhMTY3OCwgMHgxODZjMDU3NSwgMHhiZTUxYTRhNywgMHgyYjViZTI4ZiwgMHg4OWFkZjFjNywgMHgyZTQwZTdiNSwKKwkweDAzZWNiYWIwLCAweGEzNjBmMjhjLCAweGJlNzhjZjdjLCAweDA0MTFmYmY2LCAweDY1Y2JjYjJmLCAweGYzZGMyNzg0LAorCTB4ODY3ZGVmZDIsIDB4ODM1OGFiZTIsIDB4ZDYyOWFjYmYsIDB4YWQzNjVmMmMsIDB4ZTY3ZDYxYjMsIDB4YzM1ZWYwZjQsCisJMHg5NzFkMWE5NywgMHhmYmUxOGUzNCwgMHgyZjU2NjVmNSwgMHg2OWYwOTdkZiwgMHhiMmViZmVmOCwgMHgyN2UxYmJmMCwKKwkweDkwZmNkMzk5LCAweDhkNzkwNTJkLCAweDNjMDk3ZDJmLCAweDgyOWUwNmY3LCAweGQyM2VmYzE5LCAweDY3OGU3MGIyLAorCTB4ZTI2YWUzOWUsIDB4ZmJlMjc2ZjksIDB4ZTQwZmMyMDEsIDB4ZTMxMTU3MTUsIDB4OGZjNGU4OWIsIDB4NjZiMmMwMzgsCisJMHhjMTc2ZmFmMywgMHg2NWRmMjUxMywgMHhmZGU2MmU2ZiwgMHhiM2VhYzhiNywgMHhhYzcwOGNiYiwgMHhmYjgxOWZkZiwKKwkweGRmNjg3MzViLCAweGUxMjdmZGUzLCAweGNjN2RmMWYyLCAweGM4ZGMwZjUzLCAweDM4MDZmYmJmLCAweDhmMjhlNzgxLAorCTB4M2JkZTAyN2IsIDB4YmE2MWJhMjIsIDB4NDE2N2U5ZDYsIDB4ZmFjZmRjODEsIDB4YWNjMzUxNzgsIDB4ZWMzZjBlZDIsCisJMHhmN2E5ZjZiYiwgMHgwNmYzZTQyMCwgMHhmZmQ4NmY1YSwgMHg3NmE3ZGE3YiwgMHg3MWE0MDA1YywgMHhkZGYyNjVlZCwKKwkweGFiN2RkMGJhLCAweDlmN2Q1N2VmLCAweGRmNTZmYmVhLCAweDhhZDk4ZmNmLCAweDE3NGE4OTgyLCAweGJkZjNhMWRmLAorCTB4ZjA2ZWI5ZjYsIDB4Nzc4MzQ5MzQsIDB4ODRhZWI2YWUsIDB4YzE4NTU3ZDcsIDB4OTg2MjM3YWUsIDB4NTNmM2RmZGMsCisJMHhmZDFmZmJjZCwgMHhiZDU0ZGZhMSwgMHgwMzMwNmM3YywgMHhmYWY1M2RmNywgMHhlM2YzYjhmYSwgMHgwM2VjM2I2NCwKKwkweDMwZWE1YmQwLCAweGU1ZmQ2NzRiLCAweGUyNjJkZjVjLCAweGZjOWRhNTFmLCAweDA0YWFmYjYzLCAweDBhMWQ4ZmYwLAorCTB4ZGY5NmUxZmIsIDB4ZTViZWU1MjMsIDB4ZTE3YmM4Y2YsIDB4ZjhiZjk2NjcsIDB4NzdhYTJjZjYsIDB4MGI4ZGMxZmEsCisJMHhjYTJmZjc4YywgMHgyYzVmOTI4MiwgMHhmYzBiNzkyNCwgMHgwZjI2OTE2MywgMHhlNWY0Y2M2YywgMHhlN2VjMzMwZCwKKwkweGM5OWZmYmIyLCAweGRiOThmZWM0LCAweDZmMGE3NzkyLCAweGY5YmNkMWE4LCAweDNmM2ZhM2JkLCAweDU3ODdkMmYzLAorCTB4NWRjZWJiYjksIDB4NmIyNTFlN2QsIDB4M2IxNWI1ZGUsIDB4ZjQ5Mzc4OGQsIDB4MDc1Njc3N2UsIDB4MzhhNTViOWYsCisJMHg2OTUzZThiNywgMHg2MWYzMzE2MywgMHg4ZjdhNDg5MSwgMHhhMWVlYjVkMiwgMHhhOGRjNTBmNCwgMHg1YTU3OWNiMCwKKwkweGZlYTAzMjM3LCAweGQyZWJmMjJmLCAweDhkZjk1M2I1LCAweGY0YmQ3ZDI4LCAweDczZjQ1Zjc3LCAweGE2N2Y4NzU3LAorCTB4MzU3MzRlYjYsIDB4NGMzZDllN2EsIDB4ZTViOWMzZWUsIDB4YmM0NWY2MjksIDB4ZjhlYzUzZmYsIDB4NWEzOWNkYmQsCisJMHhmMzMyOWNmOSwgMHg3MmY1Y2VmNywgMHhkNWZiZjI3NSwgMHg5ZmI4MjdkOCwgMHg1OGVhZjU4NCwgMHhjYmY2OTM2YiwKKwkweDU3YWQ5N2VkLCAweDFkMDJlNDMyLCAweDlkOWFjNThlLCAweDZmNjZhMTcyLCAweGNiYzlhNDVjLCAweDhkOGI1ZWI0LAorCTB4NzFmOGI1ZWIsIDB4Y2ZhNTVlYjksIDB4YmMxN2Y1YmUsIDB4ZDNmMzQ2NTMsIDB4ZWY5M2EzZGUsIDB4ZWNiNDk0MGEsCisJMHhiMzliNzVlMCwgMHg4NTJkOWQ2NiwgMHg1ODY0ZmRlYSwgMHhhOGZlMjk4YSwgMHgwNWNmMzZiNCwgMHgzNWRjZmQzYiwKKwkweDA3ZTA2ZDFiLCAweGYxMjYxOTNmLCAweGYzZjc0YTE2LCAweDFkNjJmOGI1LCAweDE0OGYzOGFmLCAweGFmNDczZjgzLAorCTB4ODNiODNlMGYsIDB4NTk3NWI5YzYsIDB4NzdmMWI0NzgsIDB4M2QxYTAyZWQsIDB4YzZjNmQ2OTcsIDB4ZGFkMmJjNjEsCisJMHg3ZmExN2JlMiwgMHhlODQwZTdlOSwgMHgyZTExM2JmZSwgMHhmNTA5NDVmNywgMHg2Mjc5ZmQ4NywgMHg1NWVmODc4YywKKwkweDM3N2VkN2NmLCAweDQzZmViNDJmLCAweGRhZmRkZDFhLCAweDRjYmZkZjI2LCAweDkyNzk2YzhhLCAweDIyNmEzYmUzLAorCTB4ZTkxM2UwM2MsIDB4OGMwMWFkZTksIDB4ZGMwNjdhMGIsIDB4MmY3YzhiNzYsIDB4ZjViMmJkMzMsIDB4YTI0MWMwNzMsCisJMHgyMGY1YzczYywgMHgxMDViN2JjNSwgMHhiZjI4MTNlZCwgMHg3OWVmMjJjOSwgMHhkZDMyYWFhNSwgMHhhNjA3ZTFhNywKKwkweDVlOGI5NDM3LCAweDVmMWVmY2FkLCAweDIxNTFiYmU3LCAweDliMTc2YWY0LCAweDFmZGRlMGQ3LCAweGVmYzEyZjdiLAorCTB4YTlmNGU5YTYsIDB4YTdkM2EzZjcsIDB4Y2QzZGJmNGUsIDB4OWNmN2Q3NmYsIDB4Y2QxNDg5ZGYsIDB4NDllNTkyY2UsCisJMHgwYmI4ZDA3NiwgMHhiZmM0MWJlZSwgMHhmMzVkZjE2YiwgMHgzNWVmNmJiNCwgMHg0YzM3Y2U3NiwgMHg2NWM3ZGVmZSwKKwkweGZhOTc0ZGYzLCAweDZkZjNjZjUyLCAweDY2ZTg0YzJlLCAweGQ0ZjNhMWJlLCAweDQzMWU4OWY3LCAweDY5NGZlOWRmLAorCTB4MTM5NGZlOTIsIDB4ZDQ2MzlkMGEsIDB4NzBiMmM0ZWUsIDB4ZTdkM2FiOGUsIDB4YmZmNWRiYTUsIDB4OGY4N2JkZWYsCisJMHhmNjY5YzU4NiwgMHhjODI4ZDZhYSwgMHhkZmI1ZjM5NywgMHg5OTQxMTE1MSwgMHg4NmE5ZjdjNywgMHhhZmY5ZmFlZiwKKwkweGYzYTc1ZmJmLCAweGRhYjU5M2U5LCAweGVmNWEyOGY5LCAweDc1MTY3ZWMxLCAweGY1MGY3YzY5LCAweDI4ODlkMzU4LAorCTB4NjI3MzEzYmMsIDB4NmY0Zjg0OGMsIDB4ZGU0ZGFiNzcsIDB4NzY1MTE2NzMsIDB4YmJjZmRlMzcsIDB4ZmUzY2Q2ZTksCisJMHg4ZDg1OTRiZCwgMHhiZDlmNTg3ZCwgMHhmOThkMmVhOSwgMHg1ODdlNGRjMiwgMHgxZWE3NDUxNywgMHg4M2UzNDhiMCwKKwkweGFmMTZiNzkxLCAweGQ3ZjUwMmJlLCAweGMyZWZmMGE3LCAweDRlN2E3NDJkLCAweDQzZjZlN2FkLCAweDIzMTM5MDNkLAorCTB4NTNkYWE3OWIsIDB4ZmE5NjFlNTksIDB4YmIxN2VlODIsIDB4N2M0NTExNTUsIDB4MTI3YzBkNGYsIDB4M2ZiMmNiZmIsCisJMHhlMmNmZTcxZCwgMHg5ODNmNTJmNSwgMHhlMDZiMTE2NCwgMHg1MGQ4MWQzZiwgMHhmODJmYTEzNCwgMHhmYzhhYzNjNCwKKwkweGU2MGQ5YTNkLCAweDBlODZiY2Y3LCAweDdjMDJmYTJhLCAweGJjNWRmNDI2LCAweDVlMmQ2ZDViLCAweGU0ODJhN2U4LAorCTB4MTZkMWQ4MGUsIDB4OWU1ODhiM2EsIDB4OTNlMzQ1YmYsIDB4ZjhkYjlhYzcsIDB4YWYxZDdlYmQsIDB4NzhiZmUwOGYsCisJMHg3ZWM0MmFhNywgMHgxYTI3NmExNCwgMHhmZjA3ZDlhOCwgMHg3YjhmYWYxZiwgMHgwMDgwMDAzZCwgMHgwMDAwMDAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYjVmZjAwLCAweDY1NTQ1YzBiLCAweGNlN2JmOGRhLCAweGMwY2MyYjk5LAorCTB4MTI0NWM4ODAsIDB4ODU4NDhiODcsIDB4ZDc4MGMwMzQsIDB4NTA4MTUxZGEsIDB4YjliYmEwYmIsIDB4NjU4ZTIxYmEsCisJMHg1MDA2NjVjYSwgMHhkNzc3NWRkYiwgMHhhNmExOGNmZSwgMHg0NWZhN2Q2NiwgMHg4MGVkNjVhNiwgMHg3NmMzNmE5NywKKwkweGE4MjgzNDQ4LCAweDU5OTkwYmM5LCAweDZhMzc2MjdmLCAweDViNjNiOTJmLCAweGJhNDAyZGU2LCAweDZkYmZlZGZjLAorCTB4YmNmM2NmN2QsIDB4NTExNzMwZTcsIDB4NmZiZWZkZGIsIDB4Nzk3YmY5ZmMsIDB4OWY1ZWYzZGYsIDB4Y2ZiY2YzZmIsCisJMHg4YzM0NjMzOSwgMHg2MzE4MWI3NSwgMHg0MThlOGIyYSwgMHg4OTQ4NjgzOSwgMHg4ZDhjOTk2NCwgMHg2MTVmNjkwOSwKKwkweGY2YzM4OTRjLCAweGM2NDVkYjI1LCAweDdjZmI0MDQ2LCAweDE5NjJjODkzLCAweGZhMzFkNzJiLCAweDFmYmY4ZjdkLAorCTB4M2MxZjc2MzEsIDB4NDJmM2MzMzcsIDB4MDdkNjM0YTksIDB4Y2MzN2Q3ZmQsIDB4ZDZjOTcyYTAsIDB4ZjFhZTZkYzIsCisJMHgyNTA5MjU4YywgMHg2MDYzOTNiMSwgMHhiNjZhZTNjMCwgMHhjZTI1OGEwNywgMHgyYjMwNzcxOSwgMHg4ZGE0ZDNjYywKKwkweDczYzMyNWQyLCAweGM3MjkyYmI1LCAweDQ5NmY5ZmUwLCAweDBjNDk0M2UzLCAweGQ0Njk5ZGM2LCAweDdiNDM3N2NmLAorCTB4NDE0ZTY5ODEsIDB4YmE1ZjhjMTQsIDB4MzI1YjJhMzMsIDB4NmY1ZGZiZmIsIDB4YzkxYjE4MTEsIDB4NDY3M2E1NTgsCisJMHhjYzYxNGIxYywgMHg2N2UxZGRmMSwgMHgxZmIwYTk0YywgMHhmMzA0ZDM5OCwgMHg3NzA5ZTU3ZiwgMHhhMzhiYTBiYiwKKwkweDgyNDkyZGFlLCAweGIzYWEzYzIzLCAweDdmYTA1OGE3LCAweDZmMzFkODk1LCAweDRlNzNjYzEyLCAweGEwNGRlZjcwLAorCTB4NTMzOGU2ZmUsIDB4ZTVhMWZhYzAsIDB4Y2NjNjNhZTksIDB4ZmYzOThjZTksIDB4Y2YzNDg3Y2YsIDB4M2I4OWUyZTcsCisJMHg4Nzc4YzAxNiwgMHhjZTA0N2Y3MywgMHgxZmY4ZjU1MywgMHg2YzMyMDFmMiwgMHhiMmNmNjg5ZCwgMHg4ZGJjZTFlNCwKKwkweDFjMTI0ZDdiLCAweDU2NjM3Yjc0LCAweGJlZTM5YzA5LCAweGRhNDZjN2M3LCAweGY3OWYyZjMzLCAweGE4YjY2OGI2LAorCTB4ZGJjYmRhMDQsIDB4Njk1N2MxMTgsIDB4ZDQ4ZWU4NWYsIDB4NWVlZGRjMjAsIDB4Njk2MTMxYTYsIDB4Mjg2ODlhNjIsCisJMHg5NTZjNDhjZiwgMHg1MmRiY2EwNywgMHgwNmI5YTJkOCwgMHhlMTBkYmI3ZiwgMHg4OTllZWIwMCwgMHgwMjU0OTJkYywKKwkweDlmN2IxNWVkLCAweDc5NDMzMjQ4LCAweGE1ZWJjOGQ2LCAweDljN2E3ZjdiLCAweGRkZmY0MDQ1LCAweGQ1ZTIwZDVhLAorCTB4MGIxYTYyYWUsIDB4MjVkN2JiOGMsIDB4YjI1MGRjZDgsIDB4MTJjNjY4ZjIsIDB4N2Q2ZWEzMTAsIDB4NTliMTkxOTksCisJMHhhZjlhNzA5NiwgMHg2MzBlN2I2MiwgMHhjMTdkZmViOSwgMHhhYjNmNmE3MywgMHg4ZmI4YzU2MiwgMHhkOTAzZjUzMSwKKwkweDhiZmNhMWNiLCAweGUyMWY3YmNhLCAweDdhYjUyZmYzLCAweGYxMTkyYjhiLCAweGZjYmMyNjYyLCAweDg0NTQ4YjY1LAorCTB4MDVmYmFlZWQsIDB4ZmFjMDU2MzYsIDB4YWMxYTYzN2UsIDB4NmFjOTE2NWYsIDB4ZjRhMTdjNzEsIDB4Y2YwNDliNTcsCisJMHhiMjEwMWM1NywgMHg3ODdiMzBiNSwgMHgxZWU2Yjc2NiwgMHhkMTE2OTEwMywgMHhkMzg5YjU1OSwgMHg3NTc2OGFkOSwKKwkweDdmZTAyMjUxLCAweDJkNDA4YjQ1LCAweDMzNTc5NTBlLCAweDJmMmFiZTFjLCAweDgwZTY2NjRkLCAweGI2YjY1NmZkLAorCTB4OGViMGNjNjgsIDB4MDljZTE5YTMsIDB4NTM5ZTFkZmQsIDB4NWU3OGE1OWEsIDB4N2NiMTg1YjYsIDB4ODlmZTI3YzAsCisJMHhhNTNlNmJmOCwgMHgzZjAwMzdiOSwgMHgyZTFjYWRkNSwgMHhiZWRlNTZjZSwgMHgzYjkwMDMzOCwgMHgxMzYyYjY5OSwKKwkweDI2ZGVhMGQyLCAweDZiM2ViZDUwLCAweGFhMzVmY2MyLCAweGZjZmU3YWMwLCAweDlhNTg2OTM1LCAweDM1NGM0ZTA4LAorCTB4ZjAwMjU0OTAsIDB4YTNkMTk0ZGMsIDB4ZDczYmZjNDEsIDB4NWQ0MmYzY2EsIDB4MGQ1ZWIwMWQsIDB4ZGU0OGU1MTIsCisJMHhmMWMwNmE5ZSwgMHgzY2FmMWE2NiwgMHhkMTQ2YjY3NywgMHg2YzMzYWY3OCwgMHgzNjA5YmIwMywgMHg2MTUwNmQ1MSwKKwkweDQ0MzRlZjU5LCAweDU2YjNiOTYwLCAweDcxNTk1MGNjLCAweDA5MTY2MTczLCAweDE2MTFkZmUwLCAweDYxMjJjNTkxLAorCTB4M2Q1ZWFhY2EsIDB4M2I1MDEyNDAsIDB4ZjY4NDU4NzAsIDB4ODNmYjQ4ZGMsIDB4MGM3MTlmNDgsIDB4MzNlODAyYjgsCisJMHgwNjA1Nzk5MSwgMHhmOWRmZGZmNCwgMHg3ZmNlMmU1OSwgMHgxN2RmMThjYiwgMHg1ZWFlYjYwYywgMHgwMTdlN2QzMywKKwkweDhiMjZjM2QwLCAweDVmNGM4ZTdjLCAweGM4ZjFkMjJlLCAweGIwYWY0MDQzLCAweDZjZDVhN2JmLCAweGNmMDczZTgzLAorCTB4NDJlNmMyNTcsIDB4MDhjMmNjM2IsIDB4Yjk4NGRmY2YsIDB4YWZkZmMwZjcsIDB4Y2UyMjZmMzEsIDB4NTRkZTc0Y2YsCisJMHhjYzlhZjcxYywgMHhjMzVhMjVhNywgMHhmNWY2MDEwNiwgMHg2M2ZiMTQ5YiwgMHgwNTNiOGZiOCwgMHgxMTZjZjhmNSwKKwkweGM1OGQyMDcxLCAweGZlNmFmZDdlLCAweGMyNzk2ZDljLCAweDRmZmMwM2E2LCAweGEzNjdlOGU3LCAweDQwNjJlNjQ1LAorCTB4ZjE1MTlhYTIsIDB4YzE2M2E0MDYsIDB4NjBhYjYzNjYsIDB4MGYzMzA3ZmQsIDB4MmU4MGNiZGQsIDB4MzFkMDFlMWUsCisJMHg1ZWFmOWMyZCwgMHg3ZDNkY2ZjZiwgMHgwMDk0ZWMyMCwgMHgyYThmNDZmZCwgMHhmNDE2NTkxNiwgMHgyOTU4YWIzNywKKwkweDI5OTQzZmY0LCAweDlmZDg1NTdhLCAweDlmZDhkY2U5LCAweGJlNmQwYWU5LCAweDgxOTY1OTBjLCAweDdhODhkMGZjLAorCTB4NzhlZmY1MWIsIDB4Y2EwMTFiZjMsIDB4ZTFlMmU5NDQsIDB4ZTI1NzM4NDgsIDB4M2Q0YjA1MmYsIDB4M2MxYjI5ZjQsCisJMHg4NWZmZjRmZCwgMHg1MzUyZjRiMiwgMHhmY2ExZWZjYiwgMHgxOWJkYTQ3NSwgMHhiMDcyNzc1MSwgMHg1MDFkOTRmOCwKKwkweGEzYzliMGY2LCAweGY5ZjI2NGIzLCAweGYxZGZmNzAyLCAweGEyMjI2ZmFiLCAweGZhYmVmZjQ1LCAweDdiZWY0ZTA3LAorCTB4Y2VhNThhZDksIDB4ZTliOGMwMjIsIDB4OWI1NzkyMWQsIDB4ZmE3ZWY5NzUsIDB4YTllMzYxZTMsIDB4MzllMThmZDQsCisJMHg1YmEyMGRmYiwgMHhlMWZmYjAxMCwgMHhkMzdmNzEwZiwgMHgxNGFmMDY3NSwgMHgxN2Q0ZTM4MSwgMHgzOGZmM2E3YywKKwkweDc1MWQxZTY2LCAweDI4NDY0NmZhLCAweGIxOTEzZWY4LCAweDhjM2NkYzU4LCAweDcwNjhiODFmLCAweDZmYjljMTM3LAorCTB4YTE0ZmY5OTEsIDB4NDg4YjFlYWYsIDB4ZjE5MWU5ZjgsIDB4ZTk5MWMwYTQsIDB4N2U5MTIyYjIsIDB4NWU4YWQ1ZWIsCisJMHg0Y2IzODVmMCwgMHhlOGQ2N2YzZiwgMHg1ZTBjZmYzOCwgMHhmZjM4NmQxMiwgMHhjZGQ2Yjk2MCwgMHg4ZWMxOGE2MCwKKwkweDU3MjdkMjU0LCAweDAwN2ZhNzkyLCAweGQ3NDBjYTc5LCAweGZiNmE5N2JjLCAweGY5MGZjMjMzLCAweDc4ZmMwNzRhLAorCTB4YzAyZjBjOTcsIDB4MjVmOWMzM2YsIDB4NjRiYmZlNzksIDB4MTA2NWRkYjgsIDB4MTI3ZTljMzksIDB4NmU5OTI3MDIsCisJMHhmNjUwYmExNCwgMHg1ODYzOTgyZiwgMHg5ZjFmYjQ2OSwgMHg0N2RkZDdlYywgMHg4ZjA5OTMyMywgMHhlMzgzZmZlMywKKwkweGRmYzIxM2VmLCAweDAxZDYyNzM3LCAweGZmNTFiMTFiLCAweGZjNzg0NTk4LCAweDU3OWZjMDVmLCAweGY4MGJmZWI0LAorCTB4OWZjNTBlZWIsIDB4ZTIzZDdmNTcsIDB4ZDJkMTcxZWYsIDB4MDg4MGZjODQsIDB4MjZkMmExYzgsIDB4MDY1OGY5YzIsCisJMHg5MzJmZmUyMywgMHhlMDliMmNjMiwgMHhmZmU0NzY3YywgMHg4ZmVmODg5YiwgMHhmYzJiZGYyMiwgMHgzN2Q4YTYzZSwKKwkweDQ5ZTRmNTFlLCAweDdkYzE5ZWM2LCAweGI1MGY0NGY5LCAweDEwYTc2NmE3LCAweGJhYzc1ZjlmLCAweGYwMWRiMDEzLAorCTB4ZjExNzM3OWMsIDB4ZTg3NmQ4MmUsIDB4ZmI3ZDJjMjQsIDB4NWRmNTg2NWUsIDB4MWVjYjA2MTUsIDB4NWJiZjZmMzgsCisJMHhmZTYxYTk3NCwgMHg4ZWY3Mjg4NiwgMHhjMzZlYjBhNSwgMHgxNzE2OTk1ZCwgMHhkNTk2MzNiNiwgMHgzY2EwNzI4NiwKKwkweGJlN2E4MmNjLCAweDg1Y2I4YTIxLCAweGE0ZTkwNTg2LCAweDI3N2UwZjg3LCAweDczYzJhZDI1LCAweDM0YjMwODJjLAorCTB4NmM4NmZmNDEsIDB4YTAxMzIzZGYsIDB4NmNkNjMwZGUsIDB4NTdkNzQxNzEsIDB4MWRiZTk2MDUsIDB4ZDFkMWNmYzcsCisJMHgzODczMGQzYSwgMHgzMjNjMzZkZCwgMHgwNTdhOGRkYSwgMHg3YWYzY2ZmNCwgMHgxZTU5M2ZhOCwgMHgwZDljZjBjNiwKKwkweDY4ODRiNjhkLCAweDIyOTdjYmEwLCAweDYxYjNhM2VjLCAweDRlMjRhM2ZmLCAweGQwYzkwZGQ3LCAweGExMzZlNTBlLAorCTB4Mzg3ZGMxNjQsIDB4NmZiZTc4ZGYsIDB4MTdiMDgyZGYsIDB4ZmEyY2MyZjcsIDB4ZDA1OTEwMzQsIDB4YjE5NTcyN2UsCisJMHg0MmE1ZTUwOSwgMHg3M2E1Nzc5NywgMHg3NWM2Mzc3OSwgMHhjOWMyMDc2YSwgMHhkNDY1OWQzNSwgMHg5MzdmZmNjMiwKKwkweGJiODE0YmU5LCAweDU1NmM2MzYwLCAweDBhZmUxZmI0LCAweDcwYzhjNTlkLCAweDdhNzM1NjE3LCAweGU1OTc0ZDczLAorCTB4ZDc3MzM1NjIsIDB4ZTY1ZjA4MGIsIDB4OTZmODA3MGIsIDB4NDI0MTQxNjksIDB4YWRkOTM0NjksIDB4ZTVmYWVmYjgsCisJMHhmNzA5MTc4MCwgMHg1MjdmZTFjZiwgMHg2MTllZTU2NCwgMHgyODQ3ZTdmOCwgMHg0Yzg4ZjMyYywgMHgzMjhmZTQwNCwKKwkweDBjYTNmOWM2LCAweDZmZTkwOGU5LCAweDAwNTFkMDE1LCAweDc1ZGYzMWZkLCAweDY1YzNhNzUxLCAweDZiZjE4MjNhLAorCTB4NzBkMzI1OGQsIDB4M2Y4NWNmYmQsIDB4ODllMzYzZTQsIDB4ODdmMzRhN2YsIDB4MzY1NjY3NWIsIDB4ZjQwYjAzOTcsCisJMHg5ZmQ4OTlmNiwgMHg1MTE0OGVlZCwgMHhmMTMwYWU1ZiwgMHg3ZjY0NGVmNSwgMHhjNWY1MWEzNiwgMHg3OWJkNWZjOSwKKwkweDIzYzc5NjFkLCAweDg2Y2I2ZTRhLCAweDdjMTZkYmZlLCAweGZjZTI4NDVkLCAweDM1M2UwOTZmLCAweDBiNmZlMzllLAorCTB4YjQ2OGZmZmUsIDB4YmY1NmNhNDMsIDB4NDNmZWY0NDksIDB4MTkyODU5ZjcsIDB4YWY0ZTUwMzIsIDB4MTVhNjdkMDQsCisJMHhiMDc0ZTRiMCwgMHg3NDQ2M2VmMiwgMHg4OTZhYzg5MCwgMHhmZDY1ZTM2ZSwgMHg0N2EzMGMwNSwgMHgwMGYzNzUzOSwKKwkweGJjY2E4ZWQ4LCAweDk3NDdmZmYwLCAweGNlODk2Yzc0LCAweGEyYzY5ZjVmLCAweDc0MzNlYTgyLCAweDBiZmQ0MTA5LAorCTB4Y2Y0MWM5NGQsIDB4MTcxZjhkNmYsIDB4MzlhNjdjZjQsIDB4M2IzZWE4M2IsIDB4ZmY1MDUyNjMsIDB4ODJkMzJkZGIsCisJMHg5YzRlNzdlYSwgMHg4ZTdmZDQxOSwgMHhkZDUwNGU2ZCwgMHgxZjI0NGNjNiwgMHg3MzhhZWEzYSwgMHhlMWJiMDEzZiwKKwkweGRjOTJiYWI1LCAweGUzOTc1NDRmLCAweGQwZjZhYTYzLCAweGU4MDViMzdlLCAweDVmM2JkYjI0LCAweDkxZWEwOTM1LAorCTB4NDMyNjU2ODcsIDB4MTFjYjUzN2QsIDB4ZjQzYzRmNWUsIDB4NjZlMDMyNDUsIDB4ZjlkMWNiNzMsIDB4NTNkYmQwMmEsCisJMHg0NWY0M2M2ZiwgMHg2ZDFmZDQwYSwgMHhhN2NmZTJlOSwgMHg0MGEzNjJjMCwgMHgzOWJjYjZhYywgMHg5YWY4MDVkZiwKKwkweDhhZGY2MjliLCAweGE5Nzc5YWY4LCAweGY5OGEyOGY2LCAweGJkY2NkN2Y3LCAweGI5NDI1OTJmLCAweDA2NzQ2NzMwLAorCTB4YzUzNzI3ZWMsIDB4YmYzZTEwZmUsIDB4NzU5ZWY2MmIsIDB4MWZmYjAwOTEsIDB4NDZhYjViN2QsIDB4NWQ5OGJmM2MsCisJMHhhMWU5MTViMiwgMHhmM2E3MjJmZiwgMHg5MTk3ODg1MywgMHg5NjA5N2VmZiwgMHg4YTYxZDkwMywgMHgzYzkyYmQ5YywKKwkweDAzYWRmODU0LCAweDE1MTJjNmY0LCAweGE1NDc0OWMyLCAweGU1NDRjZWI3LCAweDJhNzhiYWExLCAweGQ5OTlkNDhmLAorCTB4NTc2MzgwMTIsIDB4Yzc5NTA2NWQsIDB4N2VkNDJjZWEsIDB4OTUyMjZlYmMsIDB4NTQ2Y2VhMjcsIDB4NGM1NzViYmUsCisJMHgwOTVkNzc2NSwgMHhiMmZmMGE5NSwgMHg2YTBkOTZiZCwgMHgyYTk3NDIyNCwgMHg0ZmNlYjRlYSwgMHg2M2QyNTc4ZiwKKwkweDY5ZDkyODIwLCAweGY5ZDA5ZjA1LCAweDM5YWRiZDRkLCAweDlkNzVjZTliLCAweDY5NTllOTA5LCAweDgxZjlkYTNmLAorCTB4OWRmYTA0NTksIDB4M2QxMWQ1NmEsIDB4OWI3NDM1NGYsIDB4NDc1ZTU2NzUsIDB4MjJmYmI4YjksIDB4YmMxMThhZjMsCisJMHg1ZmIwMmE5ZiwgMHhmZDFiMjc4YywgMHgwMzBlYTk5OCwgMHg4NDFiNGJmNSwgMHhlZmQ4NTk3ZSwgMHhmNzk0MDRjZCwKKwkweDE2MzU2YjUzLCAweDUwOWU2M2I0LCAweGY2MWU5NzMzLCAweDkwZGYxNDZmLCAweDIwZTMxZDcwLCAweDA1ZDg2Y2NhLAorCTB4OTAzYWQ1MTgsIDB4NmJhMDcxNTcsIDB4NjNmNDM5ZjEsIDB4MGY3NzI4M2EsIDB4NDc0NmY1ZjIsIDB4Zjk0NzJlZDcsCisJMHg2MGNjYmEzNCwgMHg5NWYyZTdhOSwgMHgwOGUyNGJlNCwgMHgyZmVlMDI2ZiwgMHhkYTg2YTU3MSwgMHgxOThmNjI4ZCwKKwkweDlkNWY2MGU1LCAweDY5ZDIxNjc3LCAweDBhZTcyYzgxLCAweDMwZWY1YzM0LCAweDgwYmRlNDExLCAweDU3NmRmYjdjLAorCTB4ZWRmM2RhMjIsIDB4ZDAyZjllZGMsIDB4ZmE0NGVjOTYsIDB4ZmU3MTU2YWUsIDB4Zjc3YTMxNjUsIDB4ZDU0NzVjMWUsCisJMHhmNDJjZjE1ZCwgMHhiNDRkODllYiwgMHhjNTY4NDI2YywgMHg2MDY5NjQxZiwgMHgxNGQ2MTdiNywgMHhlZGRjYTI2NywKKwkweGFmODg1YjYxLCAweDEzZmQ1ZWMxLCAweDMzOGZkYmQyLCAweDk5NDVkZjgxLCAweGY4OWU2MDQ4LCAweDRkYTZmMGUyLAorCTB4ZDdhZGRhMDIsIDB4Y2U1ZDIxZTcsIDB4MzAwZjlhZDUsIDB4ZjY1ZjA3ZTAsIDB4ZGNmYmQxMDAsIDB4N2ExZTczNDgsCisJMHhhZmVjYmUwYSwgMHg3Y2NlM2Q3OSwgMHgyNmU3ODA0MCwgMHgwMGJmMzAzNiwgMHhlOWNmNTVlYSwgMHhmMDA0OWY0ZCwKKwkweDE1MTNkM2E5LCAweDRiNjlhZjU0LCAweGMwMTI3ZDMwLCAweDA3Zjg1NWE3LCAweDA5Yjc0N2ZhLCAweDBlYmI5NDJhLAorCTB4MDRhNzJiNzksIDB4YjdjNDA1ZmIsIDB4MGQ3M2Y4YjMsIDB4MDY4MGRmZGYsIDB4ZDk4YmQ4ZWQsIDB4YjA2ZmEyNjYsCisJMHgwZmVmNDk5NywgMHg5YmJhMzRjYywgMHgyMzcxYmY2MCwgMHhhMDU3YjM2YSwgMHhjZTY5OTRmZCwgMHhlYTQ5N2VjMywKKwkweDYzZjQwODgxLCAweDE1NTViZmZhLCAweDE5ZWZjOWJiLCAweDc4YzlmODg4LCAweGQzM2Q3ZDNmLCAweDI4N2I1MTIxLAorCTB4NzBlNmI1ZGQsIDB4Y2QyNmFmN2YsIDB4NTBmMTE5YjAsIDB4NTFkM2FmMWQsIDB4ODhiMTcxZDksIDB4OTI1NjlkOTEsCisJMHg0ZGI5NzY4NiwgMHhkMGNiZmRjMywgMHhiODczN2JmMSwgMHhhZjVlNDkxZSwgMHhhMjQwYjkyMSwgMHgwYjZjYjYwOCwKKwkweGM1ZGQ0YTYzLCAweGY4ZDYzMjI2LCAweGJmMjFiMDhiLCAweDM0YzljMDA3LCAweGM4M2Y2NTYzLCAweDQxNDc2MjM1LAorCTB4MWI3ZjUwNWEsIDB4OGU3YTFmZjYsIDB4OGZmMzFjZjYsIDB4YmI0OTc5NGYsIDB4NWU0YWFkNjMsIDB4Mjk2NWU5MGYsCisJMHgxODNmYTM3MywgMHg3MmFiYzcyYSwgMHhjMGI5NjVhMywgMHg4Yzc0ZmNmMSwgMHg5Y2YxMTFiZSwgMHhlNzdkMDEyNiwKKwkweDUwNGNjOTUwLCAweGIyMzM4NjI2LCAweGQ3NWYxMzM3LCAweDc3M2U5MWJiLCAweGE3ZmQzOWViLCAweDJkZGNiYzg5LAorCTB4MzA5YWZlZjIsIDB4NTc3YTQyZTYsIDB4Yjk0ZDg3ZmMsIDB4NzliOTI5ZjYsIDB4ZTY5NzhmMzQsIDB4OTFiMjVhOTEsCisJMHg4Nzk4MTNhZSwgMHgyNGVjNTdkNiwgMHg0M2Q4MWZhNSwgMHhhYTAyMTI3YSwgMHhkN2M0NzQ4MSwgMHgxNjFjNDk1NCwKKwkweGE2NzIyNzllLCAweDQ0OGNlNTE1LCAweDRmYjFiMGZlLCAweDVmNzdlNDAzLCAweDQwYWFjNDc4LCAweDc4ZTM1NWZjLAorCTB4ZTliOGUwNDMsIDB4ZWYxOTRlMzQsIDB4NGZiMjI1NWMsIDB4MjQ1YzkwNDcsIDB4ODlhNjcyM2EsIDB4NGI1NjJmZTQsCisJMHhmZTgwODhlYywgMHhhMGQ2ZWIxNiwgMHhmNWM2NTM5ZSwgMHgxNGZjMWM4MiwgMHg5MDQ3ZjBmMCwgMHgwODdlNTg4YiwKKwkweGZmZDcxMGYyLCAweDJjNDNjODMzLCAweDEwZjIwYWZmLCAweDNjODI0ZmRiLCAweGYyMDdkMmM0LCAweDA2M2ZkYjEwLAorCTB4YmNlNTg4NzksIDB4ZTQ1NjhkYmIsIDB4NjliNjlhOWYsIDB4N2UyMGQzZWMsIDB4MDE3ZGRiNTAsIDB4YzM2OWRlZjUsCisJMHhhNjQzOTFkMywgMHhlMWU0ZGVhMywgMHhlMWNiYWY5ZiwgMHgyZGVmNDU3ZSwgMHhhMGZkOWYxYywgMHgwMGZmZDFiZiwKKwkweDhhNmI1Y2JhLCAweGVmMWViMmJlLCAweDFlZjliMjM3LCAweDdjYjZkMzgwLCAweDI3ZjQ4NzZlLCAweDFjZDJmYWYwLAorCTB4MjI2ZGQ1MzUsIDB4YjdlMzhlZGIsIDB4ZmFmODZiZTUsIDB4M2UzOTYyMjksIDB4NzlmMzQ1YjcsIDB4YjI0NWQzN2IsCisJMHg5ZTRlYTY5ZiwgMHg5ZTA3MjRiNiwgMHgzZGExNjJkYiwgMHhiZGVmNWZjNywgMHg4ZGI3M2Y4MSwgMHg3YTQzZWRlMiwKKwkweDI1M2U3ZTU2LCAweGVmZjhhNGQ3LCAweDY1MmZkY2U5LCAweGJkMDEyNzY0LCAweGZmNGFmY2QzLCAweDNlNzIyNmY3LAorCTB4NGVlZmVkMGMsIDB4YzNkZDhiMTMsIDB4OTkyZGUzYzAsIDB4ZDAyZjg5NmYsIDB4NDgzZTQ2OWUsIDB4NmE4YmUwMGUsCisJMHg0Mjg1ZjEzMywgMHg1NWZkMGE4NywgMHhhNzM4NzJlNSwgMHgwNzNhNjU2OSwgMHg0M2YwNDJkZCwgMHgzYTcyODMxZCwKKwkweDI1ZjY0ZjRlLCAweGUwYzZjNWMwLCAweDk5MDViYjNjLCAweDAxZjk0MjVmLCAweDBhMDdkNDRhLCAweGEwN2MyODNmLAorCTB4ZjAyMjdiZDAsIDB4M2ZlZDEwOTksIDB4ZjQyMWNkYzcsIDB4Y2E4Zjk0YWEsIDB4MzU4ZWU4ZTcsIDB4ZGFmMDljZmUsCisJMHhkZmExMzZhMSwgMHg4N2NjMzM3NywgMHhjMWM1MTNlMywgMHhmZTQ2ZWY3NywgMHhkMTlhMzU4YywgMHhjODdjMmNmNSwKKwkweDFjOWMzYjUwLCAweGMyZWZmYWViLCAweDU3MGI5MTQzLCAweDcwNjVjNzgwLCAweDVmZjJmMGQwLCAweDM5YzkwMzg1LAorCTB4YmY0OGUzOTQsIDB4ZmRhZGM4YzMsIDB4NWRiMmQxMzksIDB4NDRmN2U5Y2UsIDB4ZDIxZjZkOGUsIDB4NTdhMGJmNTEsCisJMHhhZmQwZGZhMSwgMHhkOWRhYzM2NywgMHg3ZjM5ZjJkYiwgMHgwNTU0NzQyOCwgMHg4OWViMTAzYSwgMHhjYmQ0Y2U3OCwKKwkweDllNzI5ZWU1LCAweDYzMmU3M2ExLCAweGMyZDJmZjI0LCAweDllMjg3Yjc4LCAweGM4MDU3Mzk1LCAweDAxMzljM2JmLAorCTB4YjhjNjFmZjEsIDB4ZDgxZDcxN2QsIDB4NGQ0ZmU4MTcsIDB4M2VkMzM1YzksIDB4NTY3ZTQ3ZmEsIDB4Y2ZmOTk1YjYsCisJMHg2ZjBlNDc3ZiwgMHg4ODk0NGE3ZiwgMHgzMmZkMTQxZSwgMHg4YjQ4MmVkNCwgMHhlOTA2NjRlNiwgMHgzZjQyNjYxZCwKKwkweGZjNGI1M2FmLCAweGU2N2YwNWVlLCAweDNlODcxODI1LCAweDNmZTQ5YjIxLCAweDcxZTMyMGJmLCAweDExNThmZTcwLAorCTB4YWZiZWJiZWQsIDB4NjNkNDJlMGQsIDB4NGUwNmEzN2QsIDB4NmZiZTMwMGEsIDB4NjQzNjE4M2IsIDB4MTM2ZWQ4OTcsCisJMHgwN2RlZWY0MCwgMHhkNGY1MDYzYSwgMHgyYzdiOTAwNSwgMHg3MjczYjE5ZCwgMHg3M2NmYTExYywgMHg3M2ZhMjRmMSwKKwkweGE2MjQzYjM1LCAweDNiNGE1MDAzLCAweGY0ODc5YWJlLCAweDZkNTNiNGI0LCAweGY2ZDBiOGEyLCAweDNkMjE4ZWM3LAorCTB4Y2MxNTZlOWUsIDB4YjVmNDk3NjgsIDB4YmZhMWYxYzIsIDB4ZDZlOGMxYjMsIDB4YTgyMmZmNDMsIDB4MDY2NWZmNjMsCisJMHhkN2NjZGI4ZCwgMHg0MzgzZjhhMywgMHg3ZDUzZWY1ZSwgMHg4NWM2MGE3NSwgMHgxMzUwZWM2NiwgMHgyZjNlOTdkYywKKwkweDNiM2VkMWI5LCAweDBhYTU3ZGJjLCAweDAyZGRhN2ViLCAweDQ1NzE4MzhiLCAweDA0YWVlYWQyLCAweDJkM2U1N2E4LAorCTB4Y2UzMGI0NTgsIDB4OGIzYTI4NjEsIDB4ZTdjYTgyZjEsIDB4ZjMwYmM1OTksIDB4YzkxOGI2NTcsIDB4YTBkYTVkY2YsCisJMHg2MDE3ZDhmZSwgMHhiN2JiOTQ1ZiwgMHgyOWVlZDA2YSwgMHg1ZWRjMTlkZiwgMHgwZWI4M2JiOSwgMHhlZmY5MjJmOCwKKwkweDAwZjY4NjY4LCAweDhlNmRmY2Y5LCAweGNkZWM4NjMxLCAweGVkMWIyYzcxLCAweGUzYzBkNjRkLCAweGJmN2M4YWI5LAorCTB4NzE3NTZlZGMsIDB4Y2I4MmJhMzksIDB4OGNiZWM2NmQsIDB4ZWE1ZjdmNDUsIDB4NjNlOTJhZmMsIDB4OTFjZmFmMDMsCisJMHhmZWEwYTdlYiwgMHgyZjFjNTdmOSwgMHhlNWFhNWMwYSwgMHg2MDRmM2ZiNSwgMHhiNzljMGY1NiwgMHg0MjZmNTNiYSwKKwkweGZkYmFiZmZmLCAweGI3MTgxMWVmLCAweDUxZjMwOWFmLCAweDIyYmQ5ZjdjLCAweGRiZGVkMDk5LCAweDEwYjkyNmQ4LAorCTB4ZmQwZWNlYmUsIDB4NTZlMDExMmUsIDB4OGQzZGUwN2QsIDB4NWY3MDg4ZDksIDB4YWRjYWY2NGUsIDB4ZTMxZWI1Y2MsCisJMHg2NDUxNWVkYywgMHhkZDQ3NDRkZCwgMHhiNjY2YTcxNCwgMHg0ZjM4YTU4MSwgMHg4NGRlYmI1ZiwgMHgyYmY1NDA3NiwKKwkweDhkZGQ3NDFmLCAweGQzMDIwM2Y1LCAweGZiNDcxZTIzLCAweGVlOTY0ZTg4LCAweDJkYTU4NjQwLCAweGZiZTQyNmRkLAorCTB4YmM0MjQ0ZTksIDB4OTEzZDllMjIsIDB4ODg2NWFmODQsIDB4ZTAzM2M0NzcsIDB4MjEyY2YxMWQsIDB4NTFiYzcxM2UsCisJMHgyMjc0ZTZlMywgMHg3M2Y0ZmQ1MSwgMHhkZTBhYmYxYywgMHgxYWNkYTQ4YiwgMHhlNDZjYWY2YywgMHg2M2IxOWU3OCwKKwkweGEyMzBiNmNmLCAweGU5OTMzNTAzLCAweDdhN2VmMDgwLCAweGE2YmJjNzI3LCAweDE0NjY5ZDczLCAweDA4NjM2ZmQyLAorCTB4ODc2YmI0MWQsIDB4NzdmNzAwZTgsIDB4ZTA4NDFkMTksIDB4OGRmMDAyYmYsIDB4MGU5NDIwNzIsIDB4OTNkZmYxNDIsCisJMHhkODA2ZTVjMywgMHg0MjlmYTdkZiwgMHg3ZTA4ZGJmYiwgMHgyM2M3ZjMwMSwgMHgxZWY1NTY0NiwgMHhjYWY1ODE4ZCwKKwkweDk3M2JjZmEyLCAweGY4ZDhmYjQzLCAweDA4ZGE1ODk3LCAweGU0MTU3ZjhhLCAweGU2NmJmYzYyLCAweDVkMTBlYjNiLAorCTB4Yzg1ZWIzM2QsIDB4NTdhOTdhNDYsIDB4ODEzY2Y2ZmIsIDB4NzBhODhiNzEsIDB4MjdmNGUzOGEsIDB4MzJmOWQ5Y2YsCisJMHhmYTIwYmI5YywgMHhkODE2YTQ5YiwgMHg1YTZiY2Q3ZiwgMHhjOTI4ZGViYSwgMHgzNWVjODcxNSwgMHhmMTI5OTc4YywKKwkweGM1MzNjMDc0LCAweDVhMWQ5Y2M5LCAweDJkNmIxNzFlLCAweDczZmEwNWI0LCAweDVjZmMwOWZkLCAweGIyODE5YTg1LAorCTB4YzAxN2U4ZTUsIDB4NjA4ZWI4N2MsIDB4NTU1ZTdlZTMsIDB4MjgxNzhmMDcsIDB4MTI5NTU5N2UsIDB4OGUwZTY4MzcsCisJMHg3N2E2MDgxYiwgMHgyZTQ1NWZhOCwgMHhjNmE1NWY4ZiwgMHgzYjQ2NmNkZCwgMHhiMzAxN2ViYywgMHg0ZDVlYTU4NywKKwkweGNjNzhmMDNmLCAweDc0ZGZiMmQzLCAweDBhZjFmYjQ1LCAweDFiYjE0MjdhLCAweDZlMzgyYjk5LCAweDY1YTljOGExLAorCTB4OGYxZWY5MTMsIDB4NmFiOGUyZmUsIDB4NzZmZGM2MDQsIDB4OGE4Zjg0MGIsIDB4NzA0ZjkwMGUsIDB4ZGFiNzBhZGUsCisJMHhmODAyMTY2ZCwgMHgxOWZmZWU0OSwgMHhlZGMwMWJkMiwgMHhhMGY2YWI4YywgMHgxOWRkMjEyOCwgMHg5OTBlYmY2OCwKKwkweDhlOTFhYjNlLCAweGQ2OTViY2UwLCAweDljZjAyMjM3LCAweDM4YWU1OTBlLCAweDdmMTQ4ZGRhLCAweDhhNWI2NGFiLAorCTB4NjEyYWVlOTAsIDB4ZjQzMGVmM2QsIDB4MGI1Y2Y5NTQsIDB4YTJkNzI5ZjksIDB4YWNjZWM1MjcsIDB4YjdlZTBkNmUsCisJMHhjZTQ4NzczMSwgMHhlMDFlZmY4YywgMHgzOTY0MDFiYiwgMHg5OTJlN2JkNywgMHhmMTIzMzJmZSwgMHg5OTkwNmZkZSwKKwkweDg3OWY5MTIzLCAweGVkYzA5ZmY0LCAweDVjZmU0NTM3LCAweDNjNTgxZGJmLCAweDZlNzFkZTYwLCAweGFjMDU1MzFkLAorCTB4YTY3M2UzN2YsIDB4NGY3OGZhYTAsIDB4OWJmZjUwN2MsIDB4Y2Y0MWNjZGEsIDB4NDExOWJkYjMsIDB4NTk4ZjczY2YsCisJMHhkZDc5ZWE4MiwgMHg0ZmZhODMxMywgMHg1NDE2ZDBmOCwgMHgwZTJiZTQ5ZiwgMHg0Y2U1M2ZlYSwgMHgzMDdkNTA0OSwKKwkweDk1NzNjZTEzLCAweGUzNWJjMWZiLCAweDMzZmVhMDg1LCAweGY5YTBmYWNkLCAweDA1NDQ2NzY3LCAweDMyMGQwN2Q1LAorCTB4NTJiYjY0N2MsIDB4Y2U1Zjc3YjEsIDB4Njg2ZWY2ZTUsIDB4NzZmN2MwYTksIDB4OGEzYWYwNGIsIDB4YzRlNzdlYmYsCisJMHhkOGU2ZjVlMCwgMHhhMWZiZDc4MiwgMHhmYTBiZDk3OCwgMHhjMjdlMDU1NCwgMHhiMTVmYTA3MywgMHgxM2Y4MWRmYywKKwkweDlhMTNmMDJhLCAweGZhYzA5ZmMxLCAweDYwNGZlMDhiLCAweDAyN2YwMWU5LCAweDdmMDI1ZmRiLCAweGUwYWRlYjAyLAorCTB4MjBmZDYwNGYsIDB4NmY1ODNmZjgsIDB4ZjJhNjJiYWIsIDB4NmExMmJhOTUsIDB4YmFmYzE2YmYsIDB4Yzk4Zjc1ZTQsCisJMHhkNzk3MWVlYiwgMHg3NGUxNzdmZCwgMHg1ZGVmOWU0MiwgMHg5YzZlYmU3OSwgMHhkY2ZmY2QyZiwgMHhiYzU2M2M1OSwKKwkweDJkM2NmYzA0LCAweDg3YzZhY2ZhLCAweDVmMGFjMzdlLCAweDA2MmRjNjExLCAweGM2MTg5MmRlLCAweDdkZGQ5OWE1LAorCTB4ZjUwNjJlYWMsIDB4MzM4YTA4ZDksIDB4Yjc4MTkyYjMsIDB4N2Q1MmFlMzEsIDB4YzliNGQ1MjAsIDB4MGZlY2ZhOGMsCisJMHhiZWYzZTJlZiwgMHg3YzhjYzk1NiwgMHhlZmVkYTg3OSwgMHg4NWNmMzgxMSwgMHg1Zjc0NjE0YiwgMHhlZjEwN2E0YSwKKwkweDU0NjFiZjFiLCAweDMxY2YwNGRmLCAweDA1YjMzYTBlLCAweDM3ZTkwODA0LCAweDBiYjdlOTBmLCAweDRkZGQ0YTY5LAorCTB4Y2QyNWJkZjcsIDB4NTNjNDFhMmQsIDB4M2MyOWYyMTUsIDB4MGVhM2NiN2YsIDB4NjM1Y2ZlN2UsIDB4ZjYxMzczZDAsCisJMHhlNTRhYjI4NywgMHhiOWMyMzhhNiwgMHgyZjNlNjUzNiwgMHhmMWE0NzdmNSwgMHhjZjczY2Y3YiwgMHgwNTNmNWUxZCwKKwkweGUyY2I2ZmY1LCAweDVlN2Y3ODExLCAweGVjNWVmY2Q1LCAweGM3YzE1N2JkLCAweGM4NWYwN2U3LCAweDc2Y2FmYmE0LAorCTB4OWZlMGNmOTgsIDB4OTZhZWQ5Y2YsIDB4OGVmZjdjZWIsIDB4NjhhMjk2YjQsIDB4MDJjZDFjNTQsIDB4MDVjNTBiMWIsCisJMHg1ZmVlODViNiwgMHgzOGY2ZGFhYSwgMHg2NTU1NmU1MCwgMHgwMDY2YWRkYywgMHgyNDhmN2U5ZiwgMHhiZGY4MzdjNywKKwkweGI4YzRjMzkxLCAweDIyZjllNzFkLCAweDVmNTdlZjAyLCAweGMzYmQxY2Y3LCAweDM4ZWRmODg2LCAweGY2ZWI4MTFjLAorCTB4ZmU0MTRhYjcsIDB4YjcyYjY4ZDMsIDB4MzU1YjQ3OGYsIDB4YWQwYmJmODQsIDB4NWVmMDIzODcsIDB4MzBlN2EzNzcsCisJMHg0YmNhYmI4NywgMHhkNzI0M2ZlNywgMHg3ODI0YTFmYiwgMHhmZTc0NDliNywgMHhkMDYyNGI4YSwgMHg1NTg2NzYzZCwKKwkweGI2NjY3OWEyLCAweGI5ZTIzNThkLCAweGJkN2MzYzdhLCAweGI3OTlhYjFjLCAweDgyNWUyZGE3LCAweGJmMWUzZmZiLAorCTB4N2IyMjRmMjAsIDB4Y2EzNTA0MTAsIDB4ZWY2NjFiZjEsIDB4Y2FhNDNiNDEsIDB4ZjM4NmQ5MjMsIDB4NzllNDBhZWYsCisJMHg0ZTljZDRiYiwgMHhkZmRiNGFkZiwgMHg3OGY4ZjI4NSwgMHhkMjZjODhmMSwgMHg2OTlmOGExMSwgMHg5MTZmNzZlNSwKKwkweDdhODY5ZWM2LCAweDM2NjBjN2E0LCAweDU4M2Y5ZDIyLCAweGZjNDQ2YTljLCAweGRiMTJjMjFlLCAweGVjNjk3NzhiLAorCTB4ZTZjN2JjMDYsIDB4YmE5OGY1ZWIsIDB4N2FlZTkwMjMsIDB4YjQyNTczNWEsIDB4ZjJmOTk0NzcsIDB4ZTg4Nzc1ZTUsCisJMHgyZTZmMDg3YiwgMHhiYmI5NTNjMiwgMHhmOGYzODBkMSwgMHg3M2RiYzdmMSwgMHg3ZmVhMjZhYywgMHgzY2RlZmRkYywKKwkweDMyN2FhYmI0LCAweGU5MmVjOWMyLCAweGE3ZjIzMGQyLCAweDVkYjk5YWFiLCAweGQ4OTFkM2RjLCAweDkyNGY3ODE4LAorCTB4ZjJmZDk1NjMsIDB4ZGFmMDkxMGMsIDB4ZmI5NmE2ZDcsIDB4MDU4N2JkZGQsIDB4MzlkMzUzZjUsIDB4ZGUwZWVjMmYsCisJMHhlYTdkYzk4ZiwgMHgxZGM3YjQ1MSwgMHhmNTBjNGI0ZiwgMHgxYjVkNDNhMiwgMHg2Y2ZmZTc4YiwgMHhjYWZlZjA2NywKKwkweGQ0M2IzODY1LCAweDAwZDhkOGRlLCAweDBmYjQ3NTdhLCAweGU4ODE4ZGYxLCAweDEzZTE1ZGJjLCAweGMxNTNlMTMzLAorCTB4YjcwNjRmNjMsIDB4ZjllMjdhZTcsIDB4NjVhM2E0YmQsIDB4ZTVmNWQxMGYsIDB4NjRlZWE0ZjEsIDB4N2YxMjFmZjQsCisJMHhlNzc4YTNhOSwgMHhjNTY3ZmNiNSwgMHhhZmYwMDg2ZSwgMHhlYThiZmExOCwgMHgzMTNjZDRlMiwgMHhiYzFmNmZjNSwKKwkweGI2YWI2Yjk2LCAweGFiYmY0NDhlLCAweDFlY2FmYzg0LCAweGFjMmNmNjA2LCAweDNhN2I0NGU5LCAweGI2MWZmMjkyLAorCTB4YWQ4M2JhZTEsIDB4NzZiZmJhNmEsIDB4N2Q2NmRhZWEsIDB4YTBkOTc2MDIsIDB4ZjYwNTE4MDUsIDB4MmQ1M2I4M2QsCisJMHgwY2Q5N2JkZiwgMHg5NTJlZDc2OCwgMHhjY2NmZGFlZCwgMHhmNDA5N2NmNiwgMHg0ODhkNzNhZiwgMHg4NjY0NzNlNywKKwkweDI3ZDMxZjkxLCAweDViY2ZiZGNiLCAweGJiMjRlZjkyLCAweDQyNjQ5OGUxLCAweDg3ODY2ODdmLCAweDY2OGVjMWRiLAorCTB4N2I1NmQ3NmUsIDB4MmE2M2ZmOTIsIDB4NmFjZGVkZGEsIDB4OGE2MGQ0Y2MsIDB4ZWQ5NGUyMWQsIDB4ZGRiMmQzOTAsCisJMHg4MGNkN2E3YiwgMHg0ZTliZmM4NiwgMHg4Yzk2M2Q4MSwgMHhiYjViMmE3OSwgMHgzM2I5ZTExMiwgMHhiM2Q5MTY3MywKKwkweGVjOTlhOTRlLCAweDgzZGI2NTg5LCAweDZmYjAwN2VkLCAweGNmNTVlYTgyLCAweDcyMTdkYTg1LCAweGRjMTNjYjdjLAorCTB4ZGI4N2Y4YWUsIDB4YzY3NjQzYWMsIDB4MGE2N2Y0MzgsIDB4Yzg3MWE5YTUsIDB4NzhjODJmMGYsIDB4OTU5YmZjNTUsCisJMHhiNzk0MmRlMywgMHg5ZTY1NTFiMywgMHgxMDIxYzRhNSwgMHhmYjlkMzU1ZSwgMHg2ZWRmNzAyYiwgMHhmYzg1OTg0NywKKwkweDEwYWY1NThkLCAweGU0YmZmYjVjLCAweDNjN2Y0YzdlLCAweDMzZjQ3ODIzLCAweDM2ZmVkZjBlLCAweDZhMzVlNzRlLAorCTB4NDhmOThkYzEsIDB4MzRiNjQwMzUsIDB4YWY3MDRlOWYsIDB4NmJiMzM4YzEsIDB4MTNlNDgyMzAsIDB4MTdjOGM1NjMsCisJMHg3ZjcwMTYyYiwgMHg1ZjMxODZkNSwgMHg3ZTE1NmIyOCwgMHhiN2FiZDEwOCwgMHg1NDUyN2NhOCwgMHhiMzY4OWM4MCwKKwkweDAyYmY1MGE2LCAweDNlYTNiMzBkLCAweDkwYjQ2OTViLCAweGUzYTMxYjdlLCAweDZhZTE3YTc2LCAweGMzZDIzNjRmLAorCTB4YjVjN2YwMTgsIDB4MzFmOGYxMDEsIDB4ZmIwMTAxODYsIDB4Yzc4MDdlZWQsIDB4YzI3ODk1ZmYsIDB4MWQ0OTk1MWMsCisJMHgxOTFmYTAxNSwgMHg5NWZkNDM1YiwgMHhmMGEyNDFmOSwgMHhkZjlhZDdmMSwgMHhmYzFiZjMwNCwgMHgyM2JjMDNmMywKKwkweDU4NWZkZTExLCAweDkzYjdhNDJkLCAweGZmZjcyOGU2LCAweGNhOTdjNGI1LCAweGJkMDAyZTc5LCAweDYzMTgxYzYxLAorCTB4YzczNzg4MzQsIDB4OWZjODM3Y2UsIDB4ZjVlZWIyNzMsIDB4ODIyOGFlMzgsIDB4ZjcwOGEzZWYsIDB4NWUzMGY1ODMsCisJMHhlNzk2NTFmZSwgMHhiY2JjNzliMSwgMHhmOTE1MmU0ZCwgMHg3YjY3OTBkNSwgMHg5NWY1MGFkZiwgMHg1OTNmZjY3OSwKKwkweDg4OTlhZTQ5LCAweGI0Y2E1NzNlLCAweDljNGNmNjAyLCAweGJiZjkxODZmLCAweGYwODkxZGUyLCAweDAzZjAwNWZhLAorCTB4NWFjMmZiZjIsIDB4NjQxNjljYzEsIDB4YWYzYTcxMmYsIDB4M2NlYzRkZTEsIDB4NDU0ZWY0ZjMsIDB4ZGQ2Y2I4MzgsCisJMHhjNmQ3OTgxOSwgMHg1YTJkN2YzOCwgMHgwNWE3MzdhNSwgMHhiZDIwMDdkZSwgMHgwMjUxZmZhMywgMHgyZmQxZjJmZiwKKwkweDUzNzJiZmUzLCAweDU3OTQ2ZGM1LCAweDhjZDYyYWI1LCAweGM4MzUxN2Y3LCAweGE2ZDcyOTBmLCAweDg3YmE1MGZmLAorCTB4YjdhNDRlZGYsIDB4YTBiNWE2NmEsIDB4MGI2OWE5N2UsIDB4YTE1MTZlN2QsIDB4MDg0ZGZlM2QsIDB4NzRjOTI0NWYsCisJMHhlODE3NjhkYSwgMHg1YmYxYmQ3ZSwgMHg5NWEzOGYxNSwgMHhiYjM3MTQwYSwgMHg0ZTkxMWEwYiwgMHhjYWZkODdlOSwKKwkweDdlNzFiOWE3LCAweGZiYTBiM2NjLCAweDM5MTg4NmFlLCAweGVlODYyYmVmLCAweDlmMjI3ZWUxLCAweGY3OTUyZWZmLAorCTB4YTNlZmU0MGQsIDB4YzYzMjRmNmEsIDB4ZjkzYThlNzEsIDB4ZTYwMmQ1M2QsIDB4NTJkZDdiYTEsIDB4NmY2NTRkZDYsCisJMHgyZjAxZjU3OCwgMHg4ZDFhZWU0ZCwgMHg3NjA3Zjg3ZSwgMHgxYTkxYzUyZCwgMHg1MTE5MzZkNywgMHhiNWIxNjZjZSwKKwkweDAzMWZiYzI2LCAweGZiZWU3OTM2LCAweDFiZGIyYmRjLCAweDk0NjhmN2ExLCAweGM3ZTc5NTlmLCAweDkyYmNjYWYzLAorCTB4ODNhMDNjZjgsIDB4ZjhhMzgwMzMsIDB4NTdjN2NiOWMsIDB4MDIyMDdmYmQsIDB4ZmVmZTdlZTEsIDB4Y2E3ZWYzZmQsCisJMHhiOTAyMGZkMCwgMHhkNjU0ZjMwNSwgMHhiZGQwNjRiNiwgMHg2Nzc1OGI4YywgMHhhYmYxZmJlNCwgMHgxZmMxNTNlMCwKKwkweGYwODM5OWI0LCAweDBlYjk2NzBhLCAweDBkOWYzM2UwLCAweGQzNmU2M2U0LCAweGMwYTlmMGI1LCAweGYwM2Q0OTM5LAorCTB4ZTgyNTA0NjMsIDB4YTE0MzkyMzEsIDB4NWVlMDU2NzgsIDB4M2NkNTZhY2QsIDB4ZWVmYjU2ZmUsIDB4YjNmZmU4MDIsCisJMHhlZDE5YTJiNSwgMHg3ZWYwY2JjYSwgMHhmNTc4ZmMwZCwgMHgyOGQ3OTFmYywgMHgyNTdiM2Y5MCwgMHg1YTc4Mjk3YywKKwkweGZmNTRiY2M4LCAweGZiOGY4YTMwLCAweGYxNDRhMTcwLCAweDdjNjlmZmMzLCAweDRiZDllNDM1LCAweGI3YzJhZWYyLAorCTB4MjU3YTdjYTEsIDB4MmFiNDVjYmUsIDB4Zjg0MzdmODQsIDB4MmQyZjg4NzQsIDB4N2YwMDJmZjAsIDB4YzQxMTU1ZjYsCisJMHgxZDdlMGE4ZiwgMHg1MTkzZjA2NiwgMHgyZDE4NzVmZiwgMHgzZTM5NzY2ZSwgMHhmZGM1ZGZkMSwgMHhlYzBhYjY1NCwKKwkweGYwODdlMTQ5LCAweGUzZmM4ZmFiLCAweGFkMDE3YzUwLCAweDU0MWY1MGQ4LCAweGE5ZjMwNWU3LCAweGM5MmJjNzgyLAorCTB4N2RlZTQ1MmQsIDB4NGQ0N2JjYzQsIDB4NzA2N2RkMDIsIDB4OTY4NWZlM2UsIDB4ZmI5NGU5ZjIsIDB4ZTJkZWU1MGMsCisJMHg2ZmFlM2NkMSwgMHhjMDhmY2I0MiwgMHhhMjdiYzE2ZSwgMHgyMzNkMTk0ZCwgMHhkNWViZGVkMSwgMHg3YmYwZjMyOCwKKwkweDc0ZDY4ZmQ3LCAweGNkN2NjNjhmLCAweGIyZjFhNjhmLCAweDRjZjNjMzU3LCAweDhjMmRiYTk0LCAweDRhM2YwM2M3LAorCTB4NmUxMGJhZDAsIDB4YTZlMzA5MWYsIDB4OTFmMDFkYTMsIDB4NzgzYmNiZjAsIDB4YzY2MzRlM2QsIDB4ZTliODgyZmEsCisJMHhhYWY3YTgyNiwgMHg4M2UxZjg5NSwgMHg1Mzc2ZmNiMiwgMHgwOTgyZDFmOSwgMHg2MDRmZDQwNSwgMHg2NjFlMTA0NywKKwkweDNhZDA5NTgxLCAweDBjNWQxMDgyLCAweGU3ZThmOWZiLCAweDVlZjA3MzYzLCAweDAzZmYzOTQwLCAweGY0OGUzYzc5LAorCTB4NDMxY2Y5MWIsIDB4MDk1ZmY2ZjEsIDB4MDQ1ZjZmMTQsIDB4Zjc4NGMzYWEsIDB4Mjg5ZmQzMDIsIDB4OTNmNjgxNGUsCisJMHhhNmNkNGViZiwgMHhjMTE1Y2FmYiwgMHg0ZGZlYTNlYiwgMHg1NmU1MzhhNiwgMHg0Yjk2ZTc5YSwgMHg5OWM1ZWEwMywKKwkweGU5MGQ3ZGZlLCAweGJjOGI4MmNkLCAweGEwZDhjOTdkLCAweGY0NWI2NjdjLCAweGJiMjdlZTM4LCAweDhmNTEyMzUzLAorCTB4ZjA2ZDdhMjksIDB4NjA0MzdlZDgsIDB4MWNhY2Y1MWMsIDB4OGZhYTFlNzcsIDB4NTAyOTI0N2IsIDB4ZjdiMWJlMmYsCisJMHhhNzljNzRlMSwgMHhiMmNhZTM1YywgMHhmOThmMzAxOCwgMHgxZmI0MjRhOSwgMHg5NDNlZjdjYSwgMHhkZWVkNzY0ZSwKKwkweDlmZThlOThkLCAweDljM2QzNzk0LCAweGI4N2FhMzZlLCAweDE1MjNmYzlkLCAweDdkZjlmNzNmLCAweDBhNmQ3NjkzLAorCTB4OWQ2ZmEzYjAsIDB4NTJmYmVkYzAsIDB4Njg4NTFiZGQsIDB4ZjFiYWNlZGYsIDB4YjcxODc1ZjMsIDB4ODE2YmZiMWYsCisJMHg1OTBiNzBlMiwgMHhiN2Q0M2FmNywgMHhhZjljMTk2NSwgMHhlNDhlODM1OCwgMHhmNzQ3Y2MzZiwgMHhkZGM2N2JhNCwKKwkweGZlZTUxYmJlLCAweGFiYmY4Y2YxLCAweGNkZmVhMDk3LCAweDY1N2NkMTUzLCAweDBlMzliZGNjLCAweDA0MWI2ZmUzLAorCTB4ZmJmOWJmOGEsIDB4ZDc3YmE2OGYsIDB4NGQwNTZiYzUsIDB4NTFlYTBjN2MsIDB4YzdmZDc3OWUsIDB4ZTM4MjI4YmMsCisJMHhiYmIyMWIzZCwgMHgzNTZjYmRiMCwgMHg3NWE1OWY2ZiwgMHgzY2UwZjZiNywgMHhjZjI4Njg0ZiwgMHg0YTY1MTQwYSwKKwkweGY2M2RjMDQ5LCAweDNkZjhmMzFmLCAweDcyY2RhMmRkLCAweGNlYmNiMWJlLCAweDhkYjE2ZGQ4LCAweGEzZmNlNzgxLAorCTB4ZmU1NjdmOGMsIDB4M2I4M2M5MDEsIDB4YjZkY2JjNjUsIDB4ZjEyM2JkZmEsIDB4ZGFhNDZmMzAsIDB4MmI5NDY3ZmUsCisJMHgzYTdlM2VlZiwgMHg0MTU5ZTUwZCwgMHhhNDRjZDlmNCwgMHhmYjFhYjFmMywgMHhlZTc4MTU5MywgMHgyYmM1MmQyNiwKKwkweDUyODk1OWFkLCAweGI5Y2ZmNDFjLCAweDU4NjNkYTdmLCAweGY4YmQ1YTJlLCAweGZiOGMwYWM5LCAweDFmOTFkNzZlLAorCTB4ODU2ZmVjYTYsIDB4NWZkMTE2NjAsIDB4ZDNmOGRjM2QsIDB4Njc2ZTEwN2IsIDB4YTQ3OWU3MWUsIDB4OGZhZjFhMmIsCisJMHhlMmZlNWFiYiwgMHgxZjNjNzViMywgMHgxZDNhZjlmYywgMHg5OWQ0MmY5NSwgMHhiODhlMTk5OCwgMHhlYTllMmVhZiwKKwkweDUzMzNhZmJmLCAweGZhNzNlNmM5LCAweGFlYTZmMjUyLCAweGE1ZWU1ZjM0LCAweGI2NWJjYTMwLCAweDFlNTFkMDZlLAorCTB4ZjZkNmFlN2QsIDB4NmJjMDFlNTUsIDB4YTZjZTBkZWMsIDB4YzZiOWYyOGQsIDB4NTc2Y2Y4YzIsIDB4ODM4NDBjZjIsCisJMHgyZWYyZTM3NSwgMHhlNTRmNjEzNCwgMHhlZGVhZmY3MSwgMHg2NDQ5MGQ5ZSwgMHhmNTNlYWY4NywgMHhjZjNjMDU0YywKKwkweDBlZjkyZmNjLCAweDVlNzZlYmM3LCAweGUxYzE3OGE0LCAweDEwY2E4N2Y2LCAweDVhNGRlNWRlLCAweGRjZjkzZTdlLAorCTB4OGY0ZjFlNjcsIDB4YmNlMzEyN2IsIDB4N2ZjOWE5NmYsIDB4ZWE3OWQ5YWYsIDB4ZGU1MDhkOTksIDB4MjZiOTc5YmIsCisJMHhlODdmZGU5MCwgMHhmNzk1YmY3OSwgMHhiYWJlMmQ3MywgMHg3NWZlMWMxMiwgMHg4OTM4N2FiZSwgMHhmODA5YTdmOCwKKwkweGU3ZGZmMzJhLCAweDZiZDU5YWFiLCAweGYzNzM3ZTA4LCAweGMzZTZjNjRiLCAweDVkYThjZmZlLCAweDY3NGZjODQ5LAorCTB4NzQ0Y2RkYzYsIDB4MDgxNGVhZWUsIDB4NTcxYzhhZmUsIDB4ZjNlNmE3YzYsIDB4ZDEyYWU4ZmIsIDB4NDhlYzk5YjMsCisJMHgwNTdmOGU1OSwgMHhmN2MyMjM5ZSwgMHhkMmNmZjY4ZCwgMHhhYWZlOGVkMSwgMHhjZjU1YzE2ZCwgMHgzZDBlYjA3ZCwKKwkweGU5OWI4YzIyLCAweDllN2QwY2E4LCAweDYyYTdiMWFmLCAweGM4YmU3MTVlLCAweGU3ZDBlN2VkLCAweDcxMmJlN2I3LAorCTB4YzViNzFlNzgsIDB4YTc5MDEwOWYsIDB4NDU4ZDg0ZTIsIDB4MTNmZWEzNDYsIDB4OTcyMDYxYmMsIDB4OWViNzZkOWQsCisJMHgwNmZmYTE1NSwgMHhjMWM3ZTE3ZSwgMHgzOGZiMjg3NiwgMHg2OTVmYWY0MCwgMHhhYjJhZDdiZiwgMHg1Zjk1MWU3MSwKKwkweDUwZjg0ZWVlLCAweDNkMDBkZTY0LCAweGM2MTdjOTNlLCAweDBlZWIwMWJjLCAweGE2ZDAyYmY5LCAweDA0OWVmYmExLAorCTB4Mzc4ODBiOTIsIDB4NmJlYTg3Y2MsIDB4ZjU4NGQ3MWYsIDB4Yzc4ZTFhYjMsIDB4OTdlMDgzYmUsIDB4OTMwY2I4ZjEsCisJMHgzY2U3ZmRmMiwgMHgwYjNlN2VkYiwgMHg3OWU4NmNlNSwgMHg0ZjM5NWZhYiwgMHg3YjY4ZTFmNCwgMHhlNzQwYTJlOCwKKwkweDk1NTY3OTlmLCAweGJmZjNlZDc1LCAweDE2N2NmN2IxLCAweGRhYWNlZmUyLCAweDU3ZmU4Zjk3LCAweDg1OTdjNjlmLAorCTB4OTU3ZWE4NzgsIDB4MTU3ZmYzY2IsIDB4YzU3YjRhMGUsIDB4MTM4ZjBkMDYsIDB4MjNmMjI2MGEsIDB4MTQwYmE1MGIsCisJMHhjNjNiZTgwNywgMHhlZGQ1MDBlMywgMHgwZTllNDhiYiwgMHg0Yzc4ZjA3NiwgMHgxNDVkZDg4ZCwgMHhkYThiZjE4NywKKwkweGNmMjg1ZDUzLCAweDVmYjllMzA2LCAweDI4ZGJmMzA2LCAweGQ2NTUyMWNmLCAweGE0ODFhYTgzLCAweDFlZDcyMDM5LAorCTB4ZWUwN2EyMTksIDB4ZmU0MTllMGYsIDB4MWUzY2UwZDUsIDB4NjU2MWU1MDcsIDB4MmJiNDMzODUsIDB4NDMzZjIxY2UsCisJMHhlNGFhZDk3YiwgMHg2N2U3NDhmNSwgMHg1MDczMjNkYywgMHhmNTlkYmUzZSwgMHhkZjhhNmE4ZiwgMHg5MjZlMWViZCwKKwkweDMwOTU4ZWM4LCAweDRlMDg3OGM3LCAweDRiNzBlNzQzLCAweDI5ODdkMTNjLCAweGIzMzg3MTc2LCAweGQxYWJmNDA1LAorCTB4YmYyNGVmOTgsIDB4OWZiZjM4ZmEsIDB4ZjM4MWI5YWIsIDB4ZjM4NTdiMTMsIDB4MWJlZDczOTMsIDB4Zjk4MGY4OWEsCisJMHg5M2YzMjU3ZSwgMHg3YWNlNGY2MiwgMHg5N2M0MWZmZCwgMHg5ZWRhZTcwZiwgMHg0NzBjYmU0MCwgMHhjNWYzODg1OSwKKwkweGI1MWU1MjQ3LCAweDcyODcxZWYyLCAweDkwZTg2OTFmLCAweDg5NjJmOGZkLCAweDQ5YjRkNzllLCAweDU4ZTVlZjBjLAorCTB4MGFmMjkxYmMsIDB4Y2ExNmQ5OGEsIDB4M2NjNTljYjcsIDB4OGY1ZTc5NTMsIDB4ZjAyOWQxZWYsIDB4NTJlYmY2N2MsCisJMHg4MWExZTYyZSwgMHhkYmY3NGQzZCwgMHgzNGY2NjE0NSwgMHgxNWVhZDNjYywgMHgxZWFlMTkwNSwgMHg3ZDAwOWNlYiwKKwkweGY3M2U3ZWY2LCAweDAyNGFhNzU3LCAweDg0ODFiMWU5LCAweDY2NTNiMjcwLCAweGUyOTY3N2NlLCAweDVhN2U5NTdlLAorCTB4OTgzM2ViOTEsIDB4ZTYyY2VjODcsIDB4N2JjMmM4MWUsIDB4YzgxZGU2NTUsIDB4YTU1NmZiYzIsIDB4YzNkN2JjZGYsCisJMHgzMjJmNDk2YiwgMHhjMDVlNzU4ZiwgMHg3OWYzYTczYSwgMHhiYzBiZjNiYywgMHg1Mjc5MDcxZiwgMHgxNmMzZGYyMywKKwkweDQzNmVkZjRhLCAweDI3NDU2YjdmLCAweDE1ZWM3ZmJmLCAweDNjYzAzZjkzLCAweDE5YzAxNzMzLCAweGYwMWU3YWYxLAorCTB4NjNmZDQzNmEsIDB4ZjIxYjM2NjcsIDB4NmU5MWY4Y2YsIDB4N2Q5YTlmZTQsIDB4YmQ3Y2MzMDIsIDB4MTM2ZDc2ZWEsCisJMHhkNWFhODVjNiwgMHhlN2E0NThiZSwgMHg2YmVmNmQ4ZCwgMHhmMDZiOWU5MCwgMHg4ZTNjNzY1ZSwgMHhkY2JjNzI2NywKKwkweDM1YmY3OTQ0LCAweGY1ZWZjNjI2LCAweDAwZmZhZWRhLCAweDYzY2U3NmUzLCAweDU1M2E4YjVjLCAweDAwM2M1MWVmLAorCTB4NTdhZTM2ZTUsIDB4ZmU0MmRhZDUsIDB4Yzk3OTgzYmYsIDB4MDczNDc3ZmYsIDB4M2M2MGNkZDMsIDB4ZjI4N2U3OGYsCisJMHg3MzdjZTljOSwgMHhkY2NjN2YxMCwgMHgxZTYzZjljZSwgMHg2ODFiNzNlNiwgMHg2NzVmYzUzOCwgMHg1ZDkxYzdjNiwKKwkweGYxYzcxZmUyLCAweGFmY2U5MzYwLCAweDNmYTYzYjQzLCAweGZjN2NhMDQ1LCAweDVhZDczMGZlLCAweGU5NWM4ZmI0LAorCTB4N2ZlOWFlZGMsIDB4YmQyYjA1ZWQsIDB4NWI3M2EzZjcsIDB4M2NmOThjN2YsIDB4NzMzYmRkYjIsIDB4MTQ5NTU2YzMsCisJMHgxZDk5OWZiMCwgMHgxZmQ4ZGUzYywgMHgxMjBmY2FjNiwgMHgyMWQ3ZWRkZSwgMHgyNWI5N2MzZSwgMHhiZTMxZjI2NywKKwkweDc3NzgxOWEzLCAweDQ0ODNjNjBhLCAweDNkMGQxZjFlLCAweDZiOGU1ZDg3LCAweGZkZmM2NzFjLCAweGIzZGY2NTI4LAorCTB4M2NiOTEzMTMsIDB4YTNhMjZlNjMsIDB4NWJiZjM5MmUsIDB4YzY1MWQ3YzksIDB4NTA0MTMyZGYsIDB4OWZiOGQxZWUsCisJMHhmYWFlNTgyNCwgMHhkN2RlMWE1ZSwgMHhkZTJiOWU2MCwgMHgzYmY5NjBkNywgMHhlZjE2MWYzOSwgMHhhMmZlYjA2YiwKKwkweGY3OGIwZjljLCAweGY3OGVkODM1LCAweDk1NmY1ODM1LCAweGJlZjE2MWYzLCAweDVmNzhlYjA2LCAweDcyMmJlNTgzLAorCTB4ZGM3MWVjM2UsIDB4NmRmMWU1MmEsIDB4YTJlOTBhN2MsIDB4OTQ2ZDc5MGIsIDB4MWQxYmRlYmYsIDB4ZGMxNTFmNTIsCisJMHgwODVhMzdiZiwgMHhhODEyOGZhZSwgMHhjNmMyNjliZiwgMHg3OGZmMzBhNywgMHhjNTJmOTI5MywgMHhjM2I0NDZjYywKKwkweGZiZjljMjJhLCAweDdiMDZhOTFhLCAweGYzZjQwNGVjLCAweDQ1ZWQ3NzhiLCAweDliZjgxZTdmLCAweDg4MmI5ZmRlLAorCTB4ZWY0YTUwNWUsIDB4MTk2OGM0OTcsIDB4MjdkYmEzY2EsIDB4ODA0ZjQ3ZDgsIDB4Y2Q4ZWM3ZjEsIDB4NzI0YWRiNDgsCisJMHhlY2Y3NGY1MiwgMHgzMWJiM2ZiZCwgMHg2ZjdhZTI5MiwgMHgyNTgyNGM0OSwgMHhhZWU0NjVhNywgMHg5YTdkNDJiNSwKKwkweDg1ZmEyMDQxLCAweDUxMmE2ZWY5LCAweDY3OTg0Y2ZjLCAweGFiNjJjNzQ2LCAweDEzMDdjYjhhLCAweDkyODVjYmRhLAorCTB4YjNhZTA5NjMsIDB4OGI5ZjQxMjIsIDB4ZDU4OGY4NzIsIDB4NTFmYjgxOWUsIDB4NmEzNDVkZTAsIDB4NDVkYTFhNTksCisJMHgwN2YzNmE1ZCwgMHhiZDc1OWYxOCwgMHg1N2U4NjZhMywgMHhhNTNjNzEyOSwgMHg2OWQ2OTNkZiwgMHg5OWJmYjhmOSwKKwkweDczNmJhOTE5LCAweDM2NjA3ZTcwLCAweDBkMzY3Nzk0LCAweGQ5ZmRjNjZiLCAweDllYTE3MGM0LCAweDg1NTk5N2U0LAorCTB4MDI3ZjIwZjIsIDB4NjZlOTliYTcsIDB4MzU3YjFmNmUsIDB4ZmEzNDU1NjYsIDB4NjJkMzYxZjUsIDB4NGJiNzVlZjAsCisJMHgxOTMxZjNjNiwgMHgzYzY1YzdjZiwgMHg4MTU3M2RlMywgMHg2MTczZGY4YSwgMHg1ODVjZjc4OSwgMHgyZGEzZTY4NiwKKwkweDRkYjEyZmNmLCAweDI0MGY3ODIwLCAweGNkYjNlNjA1LCAweDAwOTdkZjkyLCAweGQ0ZjdhMTBhLCAweGYzMWM3MjljLAorCTB4MzRlZTU5NGIsIDB4Y2FkYzk1ZTYsIDB4OWU2ODc5YzcsIDB4Nzc4ZTM5MmEsIDB4NmY3YzFkNWUsIDB4OGZmMzhjYTgsCisJMHhiZGNlNTQ2NywgMHgxNjZiY2I4OSwgMHhiZjc5ZTFhOSwgMHhlNjE3MzFkNywgMHgzOTdkY2YxNSwgMHg3ZDUwZTI4MSwKKwkweDA2YTVkMTZlLCAweDVlMDVjZmJjLCAweDVlYzY3OTQ3LCAweDhiMmVmZWU2LCAweDc3MzM3Y2U3LCAweGFiZjUxYzdmLAorCTB4Y2VhOWUzOTcsIDB4N2M3NGVlZTgsIDB4ZTY0ZmEzYWYsIDB4ZjA3ZWE1MmYsIDB4ZTQ5NzllM2IsIDB4ODFiYTgxY2MsCisJMHhmM2ExMjNkZSwgMHhhNzc2ZTczOSwgMHg0ZmJkNDE0NywgMHg1ZjQ4OGJkMCwgMHhiY2ZlMjZjZSwgMHg2NzNmZTY0NywKKwkweDdjOWYzYzhhLCAweDI0ZjNhNjFlLCAweDNiZmEzZTIxLCAweGY3YzI0ZTVmLCAweGJjMTkzNzEwLCAweGY3ZmNiOTRiLAorCTB4NjZkYzkzYTYsIDB4NmZjYzc0ZGUsIDB4NGU3ODJmM2EsIDB4YWRmMWJlNjIsIDB4OThhNTI5NmQsIDB4ZWQ1ZTdmNmYsCisJMHhiM2ViMDY3OSwgMHg1ZDc4ZDJkYiwgMHgwYTY5Mzk2OCwgMHg5M2QyM2U3YywgMHhiN2M4Zjk4NCwgMHg2Mjk2YTViNiwKKwkweDkxZjlmMjNlLCAweDU5NDRjZjJkLCAweDk3ZWFlYTAyLCAweGNkNzNlMjRlLCAweDk4YTU2OTgzLCAweGViNWIzYzlmLAorCTB4NzQ4NzU2M2UsIDB4NWY0ZTdiZjMsIDB4NGUwNzdkZmEsIDB4ZGFhYTdjMjMsIDB4N2QzZWZkYjksIDB4MmYwYjgxZGYsCisJMHg2MDNlN2VhMSwgMHg3NTgyYmNhNCwgMHhkZjA5OTIxMywgMHg2ZWNmZWRmNSwgMHg2YmViN2E0NiwgMHg2YzNmMTM1MSwKKwkweDk5ZmY3ZTZhLCAweDJkM2Y1MGRmLCAweDZiNjY1OTg1LCAweGM5MGM1NjNkLCAweGJhMWRiNDk0LCAweDNiMzVmNzFiLAorCTB4ZDYyNWYzZGMsIDB4ODliYzRmMTcsIDB4MDQ3YjMxZjYsIDB4MTNhNWViZTcsIDB4NGY5MTRhNzMsIDB4ZmJlYzBlZmIsCisJMHhkOWIzZWEwNSwgMHhlMmQ4NjA5MSwgMHgxM2QwNWU3ZSwgMHg4ZmY3MmE3ZSwgMHg0MGI4YzAyYiwgMHgwY2JiYjE5ZiwKKwkweDlkZmVhZmU3LCAweGVjMWZlNzk2LCAweDcxOGU5YjhmLCAweGMwOWNmZjgyLCAweDZlMmEzMWYzLCAweGZhODQ5MmQ4LAorCTB4ZjllNTdjNTYsIDB4ZjhjMWJmYmQsIDB4NzRmNGVmZTYsIDB4Y2QxMzUzZGYsIDB4YTk0YWJkZWQsIDB4ZTEzOTdmMzEsCisJMHhjYzVlZDc2ZiwgMHg1ZTdiZTk1YiwgMHgxNWFmZjc0ZiwgMHhlMmIzOTMxOCwgMHgyOTYzYWM3YiwgMHgzZmVhZmYzZSwKKwkweDc4ODY1ZWZmLCAweGVlNzY5NDI4LCAweDc3MmZmNmM1LCAweDQzODQ0NWViLCAweDc5MTZjNjhmLCAweDhmNjFmMjMzLAorCTB4MGFjZWZjOWEsIDB4M2JkMTVlYjksIDB4ZGMyN2VmODIsIDB4OGJmODQ0NTcsIDB4ZmE4NDkyZDksIDB4YWZjNDcyYjYsCisJMHhjZjdkYzBlZSwgMHg4MzNjYjY5NiwgMHg1NjdiMGY3ZSwgMHg2NzBlNzc0YiwgMHhjMWI4MDc5ZiwgMHhkNDdiYjNiOCwKKwkweGZiMDM0OTk4LCAweDVlOTBhYTMwLCAweGNhNWIwYmNlLCAweGY3ZjljNDllLCAweGY1ZTc3ZWYwLCAweGFlOWUwODViLAorCTB4NWMzM2Q3M2QsIDB4ZDQzMWZhMGYsIDB4YWQ4NWU3YzcsIDB4Zjc2N2VkNDEsIDB4N2U4NTliM2MsIDB4Y2RkZmI5ZTksCisJMHhhMTU0ZmYyNiwgMHgyYTVmODU3MywgMHhmNDgzNmI3NywgMHg1ODgyNDkyMiwgMHgzZmNhNWI4YywgMHgwMjE5OGI5MywKKwkweDBlZTc1OWUyLCAweDkyN2JlOGVlLCAweDZiOWZjN2Y5LCAweDAwMzU3YjU2LCAweDViMmQwYWEzLCAweDBhY2RmOThiLAorCTB4ZGUyNjU0M2YsIDB4YWJlNzhjNWEsIDB4ZDFkMzFiMTQsIDB4ZjVjOGE5N2UsIDB4OWM1ZjIxOTUsIDB4M2M1ZDMzZDUsCisJMHhkNjViN2JmNCwgMHg2YmFkOTU1YiwgMHg3YzFkYTBlNiwgMHg0NWZjZmRhNSwgMHhjOTVmNDc5NiwgMHg5YjU1Zjg3YywKKwkweGRmNzgxZGRlLCAweGI1ZmU1YTE4LCAweGE4NGY5OThlLCAweGI1ODVmNWZjLCAweDk1ZTViMjVhLCAweDc4ZDZkZWY5LAorCTB4NTVhZmU4MWMsIDB4NzFmOTczNDcsIDB4ODMzN2ZhMTIsIDB4YWM5M2ZiMWMsIDB4MGFhZDE2ZWYsIDB4MDRlZWZmZWUsCisJMHhhZDU5NGY5ZSwgMHhmZWEzYTVmMSwgMHg3YjdmZTY1MywgMHg4N2RiODk4MiwgMHhjYTNhNWYyYSwgMHhiMzcxZDBhYiwKKwkweGJjZGU1OTI1LCAweGE5YmM5MDIwLCAweGQxNGUxNTZjLCAweGQyMDgyNGZiLCAweDJiM2MzZjU4LCAweGU2MzcyZTc1LAorCTB4ODc4NzBkMTMsIDB4MGYxOTdjZjgsIDB4NzBmMWU2MTIsIDB4ZDY2Y2FhYmUsIDB4NGYzMGY0ZGIsIDB4MDIyZjk4NTUsCisJMHhkMTg3MjVlZCwgMHg1MDc2ODExNywgMHg2YjEyMmJkZiwgMHhhMzE3ZDE5MiwgMHg1ZmUyOWZjYywgMHg1NjUzODk0ZiwKKwkweGZkMzZkNDc4LCAweDcxYzFlYjcwLCAweDg2NWU0ZmQwLCAweDU2MjgwMzdmLCAweDUzN2NlNDRmLCAweGViNGUxNmRlLAorCTB4MWYyZjkzMzEsIDB4Njc3Y2I2ZTksIDB4YTczYzM4ZjAsIDB4ZmIxZjgwMjksIDB4MDZjNTc2ZGEsIDB4ZjcwY2ViZmEsCisJMHhhNzUxZjc0ZCwgMHhmZmZhNmY4OCwgMHgwN2JkMzFmOSwgMHhiNWIyMjk1ZSwgMHg0ZTc5NGY3OCwgMHg0MDgzZWZlMCwKKwkweDM5MDdkZTlkLCAweDU2NzdkZjI3LCAweDQzMDg2ZDdlLCAweDk1ZjczOWZhLCAweDRmYjhmODgzLCAweDdiOWM5MWYwLAorCTB4NzI0NmNkYjEsIDB4MjNlZDRmYWMsIDB4NjI2YmI3MzksIDB4Zjk0N2FmMTEsIDB4YmQ2ZTUwY2EsIDB4MjRhN2YxMzgsCisJMHg3YzEyZmEzZiwgMHhkMjllZjg2NSwgMHgyZjhlYTU2NiwgMHhkMDFkODFjYywgMHhlNDkwYjZkMSwgMHhlNzg5NmNjOSwKKwkweDZhNWRiMDUxLCAweDcxMTM4ZjEzLCAweGUxOTMyZjc4LCAweGRlODZkOGM0LCAweGQ0NDNmMjNhLCAweDNhOTdiNDY2LAorCTB4NDJmNzJhMjcsIDB4MjVmOWZmMWEsIDB4MzFmNTNmM2YsIDB4ZTQ1NmJlZjMsIDB4YzUwMzcyY2YsIDB4NmFiZWMwN2QsCisJMHhjMGVkMDk3ZSwgMHg4YzE2YjEwNSwgMHg0ZGMyODdhNywgMHg4OThjNWZiOSwgMHhlMjI5NjZmZSwgMHg3ZGEzMWRlOSwKKwkweGJjM2NjNGVjLCAweDlmOTFmNGNmLCAweGY2NGVkNDAxLCAweDVhNmJmNTdjLCAweGQ1ZmIzN2YyLCAweDdlNTE3YjAzLAorCTB4NzFmNjhkYjksIDB4MGU5ZTAxMTMsIDB4NTQ3YWY3NGQsIDB4YmVkNDE3NzEsIDB4NjdlZDM0MmUsIDB4MWM5MWJkMjEsCisJMHg5N2Q2ZjRlMSwgMHgwN2JmOGJiOSwgMHg0ZTRmZGYyMiwgMHhmYTAwZjE5MiwgMHg3ZDIyMzU4YywgMHg4N2NmMWMwOCwKKwkweDQwOWZmNmRiLCAweDlkZDdkMzc5LCAweDk0M2E3MjRhLCAweDNkYjZjZTlmLCAweGUzNzI4MTE2LCAweGFlZWZkMDQzLAorCTB4ODdjMDc4ODAsIDB4N2NhNTlmOGIsIDB4MDc5OGY5ODAsIDB4NmIzZGU1MDIsIDB4ZjgzN2NmODMsIDB4MmZjOThmZWQsCisJMHhkYTAzOWI2NCwgMHg4MjFiMWU5MSwgMHg0MTcwYTFlYiwgMHhmMTA2ZjRiYSwgMHg3ZGY2OGI4MSwgMHhjMDFiZjIzZiwKKwkweDc3N2E2YWE3LCAweGE4NjFjMjM1LCAweDUyZWExNzNlLCAweDQ4NTBmZDQwLCAweDJiM2ZhNDNkLCAweGZkYzNmNmUxLAorCTB4ZWJjZDE4MTMsIDB4MjVlZGVkMTgsIDB4Y2YxZjdlM2YsIDB4YmQwN2FkZWYsIDB4ZTEwM2Y1NDYsIDB4ZWUyZDNmNzQsCisJMHhjMzE1YmQwMywgMHg4YmVhMTZmNSwgMHg4YTZlODhhYSwgMHhkMDFkZjU1ZiwgMHg4M2NhYmRkMiwgMHhlMTI1OWZlZCwKKwkweDI5MWU4MWY5LCAweGZlZDU1MzRlLCAweGY3ZmEyYzcyLCAweDY5OTgyNmViLCAweGIxOGZkMDdlLCAweGEwNzMxNzk0LAorCTB4MTFmZDE2M2QsIDB4N2EyMWRkYTUsIDB4MGNmN2U1ZDIsIDB4Mjg3ZTUwYjIsIDB4OWJjOTRlZWQsIDB4NDJlNTc5NGUsCisJMHg1ZjNlMTY3NywgMHg4NzE5Y2IyNywgMHhlYjA5NzUwOCwgMHgxMGUxY2U4YywgMHg3NmIzZGYzOCwgMHgyODdjZTQ4OSwKKwkweGY0Yzk1NmRlLCAweDhiMjFmMjBhLCAweGUxNWUzOWYyLCAweDFlNDUwM2YxLCAweGU1NzJjODU0LCAweDcyNjdiNjEwLAorCTB4ZjcyOTM3ZmUsIDB4ODRjZjc4NTIsIDB4OWM4YzNmN2MsIDB4MjM4MTVhZjgsIDB4Y2VmOGE1YWIsIDB4YmNjZDEzZmQsCisJMHg3OWE3OGYyZSwgMHhlNzg5ZmM3OSwgMHgzZTdhYmRlZCwgMHhjNzEzMjUyYiwgMHg0NWY3OTU5OSwgMHhkNTI4ZjJmZCwKKwkweDBlNTA1ZjJmLCAweDc4MWM5M2M0LCAweGU3MGIxZDUwLCAweGIwNDY3Y2FhLCAweDhhOTBjM2Q0LCAweGQwNDUzNWQyLAorCTB4MmQ1MzJkOWQsIDB4MWFiOGEyMmYsIDB4MmUxYWU3ZTYsIDB4MWQyODU3ZGYsIDB4ZjhlNDRlNDUsIDB4MWZiOTE0YWQsCisJMHhhMDU3Yjk1ZSwgMHg2YTczYTVmYiwgMHhmMjA3NmY3ZSwgMHg1ODBmZGU4NiwgMHgwOGE2YjA1NiwgMHgxOGJlZWZmOSwKKwkweDVmZDAyNmE3LCAweDRiZmNkNmJlLCAweGNiZWI4MjFiLCAweGM1MTRkNzZhLCAweDk1ZTdjMzBkLCAweDhkNzZiNmFiLAorCTB4NTdjZjk3NjQsIDB4OGEyYzZmNjEsIDB4YWVkZTVmMzUsIDB4NWU5Y2ZiZWMsIDB4ZjU3NGU3ZDksIDB4Y2M3ODQwYzgsCisJMHgxMjM0NTM1ZiwgMHg3ZmJhNjVjYSwgMHhkY2ZjMWUxNywgMHg1ZWI1ZGFlNywgMHg1ZDJkNTdjYSwgMHhiN2M0Zjc0MywKKwkweDhhMGRhYTVjLCAweGJlNmI1ZWIzLCAweDdiYTZlNjBhLCAweDNmZWQyYjkwLCAweGRlMDg3NGI0LCAweDMxMmI4YzVlLAorCTB4YzQzZGFmZTAsIDB4MDEzN2MwNjcsIDB4ZjRjYmM1ZWIsIDB4Mjg5ZjE0M2EsIDB4ZmQwNjNjNWYsIDB4M2M1ZjY2NTMsCisJMHgxMTNlMzAyNiwgMHgzMzliZTI1YSwgMHhiODhhZTUyMiwgMHgyYzNlMDRhOCwgMHgwZjAzMGNiMywgMHg4OWQxZmZhNSwKKwkweDNmMWFjZTNjLCAweGE4ZjFkMzkxLCAweDVlM2I1NWQ5LCAweGU5ZDcxNDYyLCAweGE1N2JmOTQxLCAweDIyZmU0Y2Y3LAorCTB4YmYwN2VmZWYsIDB4OWMyMzMyNjcsIDB4OWJkNGViZjcsIDB4ZGZkM2ZlMzAsIDB4ODdjNTBkZjksIDB4ZTYxOWQ3ZmIsCisJMHgwMzA3N2JmMywgMHg1ZGU3ODA0YiwgMHgwMjliZTNmMSwgMHgyNmFiYzBlMywgMHhkYzI0M2I3MSwgMHg5YTlkZWRjYSwKKwkweGUzZDVmNTBjLCAweGExYzY5OTRiLCAweDFiZDkxMmY4LCAweGRmNzRlMTk5LCAweDA1ZjZkN2QyLCAweDhlZmViN2U5LAorCTB4OGJkZTEzM2MsIDB4MGRiYjc1ZjQsIDB4ZmYzNTZmYzgsIDB4YThiMTdmZmMsIDB4M2UzYWZiODcsIDB4YmViNGJjYTUsCisJMHg3Y2EzM2Y2ZiwgMHhkZTcyOGRiNSwgMHgzOTM2YTFlMCwgMHg2Y2RiYWJkZiwgMHhlMmZlZjZjNCwgMHhiZjYxMTdiZiwKKwkweDhmZTk3MjRkLCAweDk4ZjhmMDJmLCAweDgzZjEyYTUyLCAweDNiZjlmZjAwLCAweDRjN2I1M2Q0LCAweDU0YzUxZjFiLAorCTB4MmRiMGNhOTksIDB4N2ZjMGJmMjQsIDB4ZTFiZDQ2OGUsIDB4ZTM5ODJiOGYsIDB4MDRjMzhiODYsIDB4NTRkMjE1YzYsCisJMHgyNTgwYWUzYywgMHhkMmQyMTVjNiwgMHhlYjAxNWM3OCwgMHgxMmMwNTcxOCwgMHg4ZWQ4MGFlMywgMHg2M2FjMDU3MSwKKwkweDE4ZWIwMTVjLCAweGM2M2FjMDU3LCAweGI4YzRiMDE1LCAweDI5N2ZiNjAyLCAweDBmZDFlN2JmLCAweDNkYzc4YjgyLAorCTB4NTdmNzI0MGQsIDB4YzAzMzdlNjIsIDB4YmYyNzY1NmYsIDB4NDdiOTVhYmYsIDB4N2M2MTdiYTIsIDB4ZGZmNTAzY2YsCisJMHhhZDNiNzk2NSwgMHg2NzhlZGU3MiwgMHhkNjA3ZGQyYiwgMHg4ODJjOTAxYywgMHhjNDFmN2MyMiwgMHgzYmY5OGU5NSwKKwkweDFlMzE0NzAzLCAweDU4MjJkMzU0LCAweDdkYjE5OGQ2LCAweDYzNjNlZDNlLCAweGE1MDdkZTQ3LCAweDZkNDdiZWQ4LAorCTB4NGY0NGNkMTEsIDB4ODI4ZDlmMWMsIDB4ZDU3YzhmNWIsIDB4NTdlMjg3YjEsIDB4OTQ5ZDcxMDUsIDB4MmNkMzVmZWYsCisJMHhjZWJiOGMzMCwgMHhkOTNmNzJkMywgMHgwZTZiNDEyOSwgMHgxZDkyYWJkZCwgMHg5Mzc2ZDRlZCwgMHg5Y2Y1NTJmZiwKKwkweGVmN2MwZTYwLCAweDQ1ZTI2NmJiLCAweDdkY2ExMzkyLCAweDg4ZmU1MmY1LCAweGYzN2EzZDM5LCAweDZiM2QyMDkyLAorCTB4Zjg1Nzc5ZTMsIDB4MjljN2VjMjcsIDB4MWQ5Mzc3ZTcsIDB4MmQxNzYwMTIsIDB4NmM2YzdiYzUsIDB4ZjdhNWJlOTcsCisJMHhlMGUwOWM0ZCwgMHg5ZGFlMTA4ZSwgMHhkMWQ5NTU3NywgMHhiNWYzMWViMiwgMHg1NWZlNjg3ZSwgMHhkZWY5MjRlMSwKKwkweDQ3YmY5YjNhLCAweDkyZjhmYzUyLCAweGJkNjAwNzdkLCAweGIyNWEyZGMxLCAweDYwOWY2ZTUzLCAweDFlNTI2ZGJmLAorCTB4MjhkODE5ZTYsIDB4NTNiNDcyZWUsIDB4MjdkNjdlNGYsIDB4OGEwZmFmNWIsIDB4ZDc0YTE0YmIsIDB4ODU2M2RjNTEsCisJMHg3ZGZkMjA1YSwgMHgzYjlmNmFjNCwgMHg0NjcyZTgwOSwgMHg2ZjE0YmRmMSwgMHgyNDZmMTE5OSwgMHhmMGU4NTYzZSwKKwkweDRmYzk2YjQ5LCAweGUzMTVkZTcwLCAweDBhOTg3N2Y5LCAweDM0ZTdlY2I1LCAweGE1Y2Y5YzlmLCAweDVlYjBhOWUwLAorCTB4MmNmN2UzNzAsIDB4YmQwYjMzMTYsIDB4YzAwOGIwM2YsIDB4ZTU1MTcxODcsIDB4MTg4YjFmZmIsIDB4ZTg1MGFmY2YsCisJMHg4MTU2YzU2YSwgMHhiY2JlOGFlOCwgMHg4NGJkZjAxMCwgMHgxMDNkZjg0NSwgMHg2YWY3N2ZkMCwgMHgyODliZmRiOSwKKwkweGM0ZjI3YmYyLCAweGUyOGYzYzRkLCAweGZjYTc2NjNlLCAweDdkNDg2NTkxLCAweGQ3ZDdlOTEyLCAweDBmNmVkMDdjLAorCTB4ZGI4OTJlYmYsIDB4OWMzOGU2ZjcsIDB4MzU3MWYxN2YsIDB4YzYxNzA3ZTUsIDB4Mjc2ZTllZGQsIDB4Zjk0MDVmM2QsCisJMHg2ZWY3ODIxMywgMHhhZjFiZmJlOSwgMHhmMzgzM2YyNiwgMHhiOWFhOGUyNywgMHg5Mjc4MDFkYywgMHhmNDg1ZDU5ZiwKKwkweDNiMWVmMTRhLCAweGNhZWJjNzk1LCAweGJmMjI5Y2E5LCAweDVlZmExNjFmLCAweGNiZTc3ZjQzLCAweGIwYmUzODJkLAorCTB4Zjg0MTYwYzYsIDB4YzAzZGYxNWYsIDB4ZmZiZmFiYjAsIDB4ZWJmMzk0ZTYsIDB4NWM5ZWM1MTIsIDB4NmJlM2MyMzMsCisJMHg1MWUxMDU4MywgMHhlZjQ5ZDcxOCwgMHhmM2NhYTU4OSwgMHhiMjViOWMzZiwgMHg4YjY5ZjEwOSwgMHgxZjVjMmU2MCwKKwkweDAwYjY2OWVmLCAweDQwZjA4YjdjLCAweDNkZDFjNjAyLCAweDY2Y2Y3YzM2LCAweDUxMzA1M2EwLCAweDcyNjVmNTNlLAorCTB4Y2MzYWViNzQsIDB4MTM0OWE5NTMsIDB4MmRhZjE4NGMsIDB4MTg1MmRiMGEsIDB4YTUxN2YzMGIsIDB4NzY3N2QzMjQsCisJMHgxYzc4ZGE2YSwgMHg0ZTRhMGZiNiwgMHg5MmRjNTMwNywgMHg2MmFhYzdjMCwgMHhmMWNmN2UzMSwgMHgzZmI1Y2JlOCwKKwkweGRmY2YyOTNkLCAweGIzZTY1YjNlLCAweDc4MmY4ZWZlLCAweGUzYjVmMTFlLCAweGZiZTliYmI0LCAweGVmNGY0YzFjLAorCTB4ZjYwZmQzYWYsIDB4ZDFjNmZiMzUsIDB4ZTg1NWFmMTQsIDB4YWUzOWIwNjgsIDB4NDVhOGU5MDksIDB4YTVhNTEzZDYsCisJMHg4ZWQxYTllZiwgMHgzN2IzY2M2OCwgMHg5NmNhMWMyMywgMHg0YjE3NWM1YywgMHg0ZTNlMWNlNywgMHg4N2RmZTRhNiwKKwkweGU1MDJjOWM2LCAweGRlNDZmZmVkLCAweDVhYmE4OWZkLCAweDViYWRkZjJhLCAweDlkNzc2NTQ1LCAweGU4MDc5ZThiLAorCTB4YmYwODIzOGIsIDB4N2Q2ZjEwMWYsIDB4ZjEzMGQyN2IsIDB4NDczM2E2NTYsIDB4YmUwNWJlOTIsIDB4OTBlZGYxZTcsCisJMHhiYmYwMmFmOCwgMHgzM2VmYzAxOCwgMHhkOWVlYTIzYSwgMHg4MzQ4ZjY4MCwgMHhjZGY3ODJjNiwgMHhkMmJjZmY5OCwKKwkweGZkZTFmMjQwLCAweDU5YzZjMzQ5LCAweDI4MTlmODE1LCAweGY0YzgzYjJlLCAweGU5ODc4ODM5LCAweDExMmFhOTE5LAorCTB4OTI2ZGZmOWUsIDB4NDRlNzE0MTAsIDB4MjI3M2MxYmUsIDB4N2M4OTYwZGYsIDB4ZjlmOTUyYTMsIDB4YTMwZDY5ZTYsCisJMHg3ZGExOTRlZiwgMHg0MGZiMjJlMCwgMHhiZjVkZjg0ZiwgMHhkNDBhZTQwNiwgMHgyMGE2NjVlZiwgMHg0NDIxNzJiOSwKKwkweGYzMjM4MGFlLCAweGFjNWY3YTMzLCAweDA5MzZjYjQzLCAweGU5Y2ZmY2ZlLCAweDE5Y2E1YzUwLCAweGI4NzhjZTQ2LAorCTB4ZTYxZDE5OWMsIDB4YjNiZTllNzksIDB4Zjk0NjFkNTAsIDB4NDRlZmMwYzUsIDB4ZjIzNzQ3NjcsIDB4YWMyNWJkYmMsCisJMHg0NjFkZDY4NCwgMHgzZTdiZDBkZSwgMHgzODE4OGVmNywgMHhiZmY0MTRmOSwgMHhkOTAzNjFmNywgMHg5NjEzZWIzOSwKKwkweGU0NzdmZmU2LCAweDcxMjc5ZmNkLCAweGRmODEzYzc4LCAweGVkNWQ1MDczLCAweDA1OWIwZTdiLCAweGIxNWQ4ZmJjLAorCTB4YmUyMzY1OTAsIDB4YzQzOWVmOTUsIDB4N2JmMjE4YzEsIDB4MzllZmY1ZmYsIDB4MTIzYzk4OGMsIDB4MGFlMGU3YmYsCisJMHhkYzQzOWVmYSwgMHgzMGU3YmUxNSwgMHg2MTcxYjI2YSwgMHg0NjFjZjdlMCwgMHgzMGIxMWU0ZCwgMHhjNjBlN2JmOCwKKwkweGIyOWRmODg1LCAweDM5ZWZjMWZmLCAweGJiY2U0ZmE0LCAweDM3MGU3YmZjLCAweGEwZmYzNjRlLCAweDNkODAzOWVmLAorCTB4NGZlMzg5OWIsIDB4NjNjNmQ4ZTQsIDB4M2I5ZjI4OTksIDB4ZTNlNWZkZjQsIDB4OTc2NDNkZjIsIDB4YjJjNTJmNjgsCisJMHhhMmE1YzIyOCwgMHhjNTZkZDE3NiwgMHg3M2QxNmRmMiwgMHg1ZjAzYjYzZiwgMHgxNTc4NDQ0YywgMHgwMzdkOTYzZCwKKwkweDUxMjU5NzdlLCAweGYyYmNhMWViLCAweDQ5YjZhZDI3LCAweGI5NmJmZjM4LCAweDNjZjhjOWI2LCAweDJmNWZkZTM0LAorCTB4NzNmNjBmOWYsIDB4Y2QwYmY2MGIsIDB4ZTJlODUzMWYsIDB4MGU1Y2M5YWUsIDB4YTljYjkzY2QsIDB4YzdiZmMzZjUsCisJMHhiZjMyNmYzZiwgMHhiZWQ2YmU0ZiwgMHhlMDc3YmY2MSwgMHhkOWZlY2E3YSwgMHhkYzU2YzU5NiwgMHg0ZWY3ZWMwZiwKKwkweGI3ZWMyN2RjLCAweDg4NjY0YjA0LCAweGY4MGY3YTBlLCAweGM5NzU3YTcyLCAweDJlNzQ2MmZiLCAweDNmYjM4ZjkwLAorCTB4OTUyOGY2ZTEsIDB4MTQ3NzJhZTksIDB4MWVhMzBkZGEsIDB4N2VlMTQ3NzAsIDB4ZTgwZTM1NDcsIDB4ZGY5MDdkZjEsCisJMHg2OGY0MDZiYSwgMHhmNTc2ZmMzZiwgMHg3ZmRiMWU4MCwgMHhkYWY5ZTM2YiwgMHg5ZjZmZjNhMSwgMHhmNDkxZmRjYywKKwkweDdlMzQwM2E5LCAweDRkZGRmYzBjLCAweDE0NDBjMWZlLCAweGU1ZTk2ZGRhLCAweDE0YWUzNDQ3LCAweGY2NmQ0ZjdhLAorCTB4OTM3NjQxMjcsIDB4OGM3YmY4OTksIDB4MDFlNjM2ZGMsIDB4OGMzZDIxOTEsIDB4MWU3OGMxZDksIDB4ZTkwYzQxNjMsCisJMHhlZjFkNGFiOSwgMHhmZGMwZjk1YSwgMHgzOGQxZDIyMiwgMHg4MDNiZWMzNywgMHhhZWRmYWVmZSwgMHhhZjdlMGMxYSwKKwkweGFhZTM0YmQ3LCAweDVlYzAyNWU0LCAweDY0ZWU3YTBiLCAweDk0NzRiZjNjLCAweDVlZDA4ZjJjLCAweDM5ZDllZmM0LAorCTB4NzdkMDhmY2IsIDB4MGI4ZWMwYTYsIDB4NzliZThmOTksIDB4NTk0Zjk0MzAsIDB4ZTZiZmIzYWQsIDB4NjJiZTUzMzMsCisJMHg3N2E1YmY1MCwgMHhmYTNkNjZmZiwgMHg1YmE1ZTViNSwgMHgyZjE3ZTQzNSwgMHhhNThmNTk2OSwgMHgyNjllZjFjMywKKwkweDE5N2Q5MThlLCAweGNiZWMxZmQ0LCAweGZiNjVmYWEwLCAweGY1NDdkOTBjLCAweGM3ZDcxN2ZkLCAweGQwMmViMzBkLAorCTB4MTNhNDU2YzEsIDB4YWE4ZTBlODUsIDB4NGZkMGUzM2QsIDB4YjMwY2VhM2QsIDB4M2MxZGY3ZjAsIDB4MjY5YTVkZjQsCisJMHg1ZGY0YmRmOSwgMHhjYWRkMzlmZiwgMHg1ZDM5NjVmMywgMHgzZjFkZjhjMCwgMHhhOWVhOGU4YywgMHhhZjFkZjJiZiwKKwkweDFjOGE5NTZiLCAweDhkY2VmYTFjLCAweDVlMjhiOTg2LCAweDcyNDhjYjM5LCAweGZmZjY0NmFlLCAweGM4OTg5N2FhLAorCTB4YmFmODUxMWUsIDB4YjUzOWU1NWEsIDB4MThjNWZiMWUsIDB4OGE5YmZlNzksIDB4N2FhYmY3ZDEsIDB4Y2Y5NDUxYzQsCisJMHhjZmFjM2Y0ZCwgMHhhY2ZiYTU0YSwgMHgxNzhmN2FkOCwgMHg1ZGI4MWRlNywgMHgxNWI5ZWZhMCwgMHg1YWI5NzM4NCwKKwkweDllMzg5NjI4LCAweDQ0NDdlNzg1LCAweGE3ODE1ZGZlLCAweDk4NDg3ZTUxLCAweDM3YmZjMTQ3LCAweGJmOTcyNTMwLAorCTB4ZjhjZjEwM2YsIDB4Y2E5OGRiNzcsIDB4MzY5ZGYyMWMsIDB4ZWQ3YTFlMzksIDB4ZWZmMWI0ZWYsIDB4ZjdlN2NkOTIsCisJMHgyNTUxMGQ3MiwgMHhmOWYxY2JhNSwgMHhmOWU4MWI4MiwgMHgxZjUyZWZjMSwgMHgyYWZlZTJiMSwgMHg3MWI0ZWY5NCwKKwkweDRlNjFiZjdiLCAweDU1N2YzZDA2LCAweDNkNDFhZjMwLCAweDVkODA3YWUxLCAweDdhNmQzYmU5LCAweGVmODBmYmU0LAorCTB4Zjg4N2JkYjMsIDB4ZDlmN2Q2YmEsIDB4MWMwZmVmOTQsIDB4MjNjMzcwNWQsIDB4YmQxYzM5N2IsIDB4MzM1NWVmNzgsCisJMHhhZmU0MThjYiwgMHgzYzMxMTdmZiwgMHg1NmMwZDI5ZSwgMHgwMDAwNTZjMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNiM2FmOGEsIDB4MjE3MTY4MzAsCi0JMHg5ZjAxNDNmOCwgMHgzODYwNjY2NCwgMHg4MTY3YzQwZCwgMHg4MTg1OTc5OCwgMHg4MTg5OTdjMSwgMHg3ODg5OGZjMSwKLQkweDEwYzUzM2ZkLCAweDA2MTE0MTZjLCAweDVlMjAzYjA2LCAweGYwYzBjNDJlLCAweGNlMjEwNDRlLCAweDEwYzBjZTI4LAotCTB4MjBjMGNhMmQsIDB4YWZlMTBhMmIsIDB4NjI2NmQyMDQsIDB4NDBmZjcxZDQsIDB4NGMxOTQ2NjMsIDB4MDg5MjA3YjEsCi0JMHg3OTE2MTMzNiwgMHgyNjhjY2M2NCwgMHhjYTg1MjBlZiwgMHg3ZmEwMjE2NywgMHgyNTE3ZjFhMCwgMHgyMmFjYmU1NCwKLQkweDhhODQ2ZTg0LCAweDk3OTM0NTdmLCAweDQzMmJjYTgzLCAweDA5NGRmNWZkLCAweDUwMmFiOWJiLCAweDFhYTAwMDc5LAotCTB4MDM2MDVmODIsIDB4MDAwMDAzNjAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzNzAyNzhhLCAweDQ1ZTM5YzMwLAorCTB4ODM4MWU5ZjAsIDB4NWZkMzI5MTgsIDB4NTBjMGNlYzYsIDB4NDA1NWM0MDEsIDB4M2Y4ODBiYmMsIDB4N2MzMDMyYjEsCisJMHhmZjVlMjU2NiwgMHhkYjA0MjkzNSwgMHgyMTgxODI0OCwgMHg4OGQ3ODgxZSwgMHg0OWE4MzAzMSwgMHhhNDFkYzQyMiwKKwkweDAzMjYxODE5LCAweGIxNTBhMWY5LCAweDVmM2E0MDQ3LCAweDBmNzczMjhhLCAweDgwYTY5YzE2LCAweDg3MmFlNjI5LAorCTB4OTE2M2E3NjAsIDB4NjgxOWM2NDcsIDB4NTBlNTRiZjIsIDB4ZjQwNDk5ZjksIDB4YTJiZTM0MGYsIDB4YTJmZmNhOGUsCisJMHhhMDEzYTEwYSwgMHhlNGQxNTdlMiwgMHgzYmU1NDJiZiwgMHhhNmJhZmVhMCwgMHg0ZWRjZGQ4ZSwgMHhjMzVkZmQzMiwKKwkweGZjMDFhMTAyLCAweDk4NDdiMDk5LCAweDAwOTg0N2IwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGQsIDB4NzMzZWU4YjUsIDB4NDk5OTljY2UsCi0JMHgyMTI2NGNjZSwgMHg2MTAyMTMwOSwgMHg0MGEwMjA5MiwgMHgyMDBjN2UxOCwgMHhmN2YwOWQ3OCwgMHg4MDNhYTU2OCwKLQkweDA3NTE1YTU2LCAweDQzZjIxMDgxLCAweGJkMWY1MjAyLCAweDI0MjY2YmVkLCAweDFiZDU2OGMxLCAweGFiNDVhOGZhLAotCTB4NjhhOTAwNzYsIDB4NjIzNDhlZDEsIDB4YTgwNzQwYTgsIDB4MGRiNmE4NWMsIDB4YzdmNDJhZDYsIDB4YzQwNWFkMWIsCi0JMHg5NmFhNDQ5MCwgMHg2YmI5NGFiZSwgMHhlNjRmYmRhZCwgMHg0MDE5OTM5YywgMHg2ZjVmYjdiZCwgMHg2ZmQ2OTdiZiwKLQkweDY3ZDljZmIzLCAweGRmZDdiNWVmLCAweGI1ZWQ2YjVlLCAweDg5NzYyOGY3LCAweGVjNjUwZWU1LCAweGM3NWRmZTAyLAotCTB4MzE5OTAyZDgsIDB4ZjRhMjc1NzYsIDB4MGQwZWJiYzEsIDB4MDdmOGFkZmUsIDB4Y2NkZDI4MzIsIDB4Mjg2MmIxMmYsCi0JMHgyZjZlMmNmZCwgMHhmYzcwNzI4MSwgMHhkNjVlOTYxOCwgMHhmMzdlMThjOSwgMHg5NTk5MDVmMSwgMHgzMjcxZTYzMiwKLQkweGIwOTQxN2YxLCAweGRhZjJmNWVlLCAweDZkODdiMmI3LCAweGQ1YjI4NDI4LCAweDZjYzY1M2Y3LCAweDY3YWFlZDhjLAotCTB4NDRmNjYxODEsIDB4ZmY1Nzg3M2IsIDB4OTFjMTdlMmUsIDB4ZmE0ODcwY2IsIDB4ODc3NTYwY2IsIDB4YmI4N2MxODcsCi0JMHhiNmUyZTdhNCwgMHg4ZWY1OGM4OSwgMHg3ZTJkODE2MSwgMHg1ZGRlMDcxOCwgMHhjZmZkMDU5YiwgMHgzMTZkZWM2MSwKLQkweDcwNDYwNWU2LCAweDhhNTBiODVjLCAweDRiODIzMWRmLCAweGU3M2FmOGZiLCAweDBlZTc2ODQyLCAweDAwYzU1ZmFkLAotCTB4NzMzNGNmNWUsIDB4YjlhMjZkN2IsIDB4ZjUwZDE4ZWUsIDB4YTVmYTg5OTEsIDB4NmNhNjAzZGEsIDB4ODgxZGUwMGMsCi0JMHhlZDVjMDNmMCwgMHhkNzlhNGVmNSwgMHg4MWJkZWI4ZiwgMHhiNjMwNTc2MSwgMHhmNTQ3ZGVhNywgMHgyYTdlZjU3ZCwKLQkweGU5MjNmNWUzLCAweDAwZmE4MWY5LCAweGIwNTg3M2Q1LCAweGVhYzdmMDkwLCAweDY2Y2EyYzM2LCAweDg1MzZmMWFjLAotCTB4NzQxMmM3ZGQsIDB4OGMzZDY2ZjksIDB4ZmVhMjQ1NzcsIDB4MjIyY2QxYTcsIDB4YTRmZWU0YzMsIDB4MDA0MjNiYjAsCi0JMHgxMzJiYzM2YiwgMHhiY2ExM2EzMiwgMHg3ZjQxZGIxZiwgMHgyODAxOGQwZiwgMHgzZmRhMjZjNiwgMHhkY2U1ZjZiYywKLQkweGNiMTgxMzk5LCAweGRjOTFlYWZiLCAweGJkZTAwMzk5LCAweDQ2YzYxNmM0LCAweGQyYWQ3OGUzLCAweDlkZjAzMWJjLAotCTB4ZGJkMWZiY2EsIDB4ZWI2MzI1ZWIsIDB4ZWQ5YTBmODgsIDB4NjVhZmRmYzksIDB4ZjJjZjAyMTIsIDB4N2U2MGFjMGUsCi0JMHgwZjZiZjQzNywgMHgwNzAxM2JlNywgMHgwNGM2NDRiNywgMHhiOGMzMDY1YiwgMHgxODZiZWM0OCwgMHgxMTFiMzJmYiwKLQkweDM3MGUwMDg5LCAweDhjNzk5NzYxLCAweGYzNDJkMGVkLCAweDVmMWNiYmYwLCAweDkxMjMwYTQ4LCAweDI5OWM0MGMzLAotCTB4MmNhYjY1OGMsIDB4NDcwYTRiMWMsIDB4MmI3MWMxMDMsIDB4NGIwNzMzZmUsIDB4MGY0YmQ1M2YsIDB4N2VmNTcxZjIsCi0JMHhlNzExYjJmNCwgMHhjZWU0ZTUwNywgMHhkZTJjNWIzMCwgMHg3N2ZiZTE5NywgMHhlODYyZDI0MiwgMHhlN2M1ZDliZiwKLQkweDczNjMwMmYzLCAweDEyNDliYzcwLCAweDEyYjk2MTBiLCAweDJkZmExMjk5LCAweDMxMjczMmM3LCAweGU1YzYwYWVlLAotCTB4NjE3M2JhZTEsIDB4NTQ3ZTg0MTYsIDB4Yzc4NTk4NWYsIDB4ZmM4MzdlZjAsIDB4NmM4Y2E2ZmIsIDB4MWI3ZjliOWEsCi0JMHhkYTk0NDNmMSwgMHg0NzRkZGIxYiwgMHg4OGI2ZmNiOCwgMHhlZGM3MDMzZCwgMHgyM2VkODgzZCwgMHhmNmMzMTYzZSwKLQkweDM5YjY2ODJmLCAweDNiNDRiNDViLCAweDZlNDk5ZTFkLCAweDk2OGI2ODViLCAweDE2YzgyZmU4LCAweGU1ZDNmYTliLAotCTB4YmU3Mjc2NGQsIDB4ODFkZWY5ZDMsIDB4ZGE5YzgwOWYsIDB4YzIyOGZiZTEsIDB4MzcwNTk4M2IsIDB4YmRlYmMxMjcsCi0JMHgwN2E1YmU2MiwgMHgzYzA2NDE1ZCwgMHhhMzU0MmVhZCwgMHhhZmE5MjQyZSwgMHgzOWViMGNiNSwgMHgwNjQwNTk0YiwKLQkweGU1ZWI0ZTFhLCAweDA3MDNiOGYzLCAweDNiY2M0OWM5LCAweDM3YzAwM2U3LCAweGZlYzAxZDk0LCAweDA4ZTNlNjBjLAotCTB4ZGEwM2E4YjAsIDB4ODI2Yjc5YWIsIDB4MWY0ZjUwNjUsIDB4MWIwMmQ1Y2MsIDB4MzY3MjYzMWMsIDB4Y2RjNDczYzksCi0JMHg5N2ExYzNmYSwgMHhmYzEzYzdkYSwgMHgwMGRmMTc0OCwgMHgwNjA0ZWY1ZCwgMHg0MWRiYTgzMiwgMHg3ODAyMGNhMSwKLQkweGE4M2I4ZjFhLCAweGU1ZGM4ZmZmLCAweGZkMzNiMTQzLCAweGYxZjU1M2JiLCAweDNlNDE0YjcxLCAweGE2MWZkNzRlLAotCTB4ODNiZWFiYjIsIDB4NjNmYWVlY2EsIDB4MGYxYWE2NTQsIDB4MjZjNmQxMjQsIDB4NjBkZjhjMDMsIDB4NWRjYTI3NDEsCi0JMHgwNzVkMTJhMSwgMHhmZmVlMzdmZCwgMHgyMThmZjMyYSwgMHg4Nzg4MjNmOCwgMHgyZDE2Y2Q3NCwgMHg0ZTY2NWU0MiwKLQkweGY4MTVjZDU5LCAweGUxMmI3YzQ1LCAweDhlNmVmOWJjLCAweGJkYjNjNDVmLCAweDg2NmQwOTUwLCAweDJhZDljZjMyLAotCTB4Nzg2ZDFhYWQsIDB4ZmM0MDc0MGUsIDB4Yjg3YzFlOTcsIDB4MmVhNGYxMDEsIDB4ODU1Y2UzNjUsIDB4NGY5YzJmMjgsCi0JMHg5N2M4OWYxMSwgMHg1ZjM4MWFiYiwgMHgyODRlZmQ2MiwgMHgwMjk1MzlhZiwgMHhlZjFjNWRlZiwgMHg1M2E5ZGFkYSwKLQkweGMwNjA5OWRmLCAweDVjODJjMjlmLCAweDI4YmYzOWFlLCAweDc4Yzc3ZmYwLCAweDdiMzQzYTgwLCAweGJkZTgyNjQ1LAotCTB4YmMwNzdmYmMsIDB4OWU3ZDI2OGUsIDB4OTA2Yjk1YzEsIDB4OWUyYWRlYTEsIDB4MzBkZGViYWMsIDB4YWJkMjdlMjMsCi0JMHg1MDc5ZWRjMCwgMHg5N2NmYWMxZiwgMHhmODg5N2ZmOSwgMHhmYTA0ZGNkOCwgMHhkNTdlZWIwOSwgMHgyMWZiYzJhZiwKLQkweDcwZTBmNWEyLCAweGNhNTQ1Y2M1LCAweDFlZTdjYjViLCAweDYyYmM2MDkyLCAweGE4ZmRlM2Y5LCAweDI5ZDQ4N2RlLAotCTB4ZjQxYTc3NmYsIDB4NjA0MmMxNjUsIDB4ODZjNjIyYmMsIDB4MmYzZjM1YWUsIDB4MzBlYjk4OGMsIDB4ZjMwNDJkODAsCi0JMHgzZjMxNmUyZiwgMHhkOWRjY2UzZiwgMHgyZTE5ZDIyNywgMHg4MDkwNmU0OCwgMHhiZDVhZjM3ZSwgMHg4NDlhNDVlYywKLQkweGY1OGRkZTk1LCAweDBkZDlhZTJjLCAweGY0MjdhMTc1LCAweGRjOTllNGJhLCAweGFkZjk4MTE5LCAweDkwMDU5MmJlLAotCTB4NDQ5MjY5YzYsIDB4ZWZjNTZjNzgsIDB4MTQxZThmODAsIDB4N2U5NmZkZTUsIDB4YWM5OTUyZjQsIDB4MDJlZjUwZDksCi0JMHhmNGM5ODNkZSwgMHhkNjU0YmU1OCwgMHg1NmJjNzQ4YiwgMHhmZDhiZGU5YSwgMHhlNjMxMmJhNiwgMHg1NGJmOTBkNSwKLQkweGZiNmIxM2UyLCAweGYxYTE0OTM0LCAweGEwOGU5NGQzLCAweDE0ZGVlYjhjLCAweGI2YWRlZWJlLCAweDllNTFjNmY3LAotCTB4MDNmOTk3NTYsIDB4MDI4ZjVjMTEsIDB4NGNkZjkyNTEsIDB4NWU1MGIzNTgsIDB4MzYzYzAxM2YsIDB4OTM2M2MzODksCi0JMHhmNTE4OWM2OCwgMHhkYjJiZWIwMywgMHhiYzM4ZTEyMiwgMHhmYTU3ZDVkZiwgMHgwZDRhNDQ1OSwgMHgyZDE5MWZlNywKLQkweDE2OThlYzYyLCAweDNjZmVjNGNlLCAweDcwOWNhNDkyLCAweDU4ZDNlODI2LCAweGIzNmZmNDUxLCAweGMzNzJlYWExLAotCTB4NzUxM2FiZmIsIDB4N2M3MzlkZGYsIDB4NDM3OWM3YzgsIDB4NzcyYmY0Y2QsIDB4N2YyMDE1ZDYsIDB4YjM2Mjg2NTQsCi0JMHg3YTRlN2Y5MSwgMHgwZWRlYmE3ZSwgMHhmNjAyZGVmMywgMHg5ZmY4MDI4MiwgMHg2MWU1MGNlNCwgMHhlYThiMzUzZiwKLQkweGYzMGFhMzg2LCAweGUzMDNhMmUzLCAweDFlYjdiMjZlLCAweDM5ODI0YjA3LCAweDVmZjQ4ODU5LCAweDAxNzVjY2NiLAotCTB4NjdkYmRlMDUsIDB4ZjAzYjcxMmEsIDB4MDFmMjdkYTUsIDB4YWM1YzU3YjIsIDB4YzljN2ViOGUsIDB4MDdiNDMyOTEsCi0JMHhlZjgzMjM5YywgMHg0NTVlZjBjYSwgMHhkZWU3ODA3OSwgMHg3NWMzMmI2MCwgMHhiY2NjMzljNCwgMHg5YjNjODNjZSwKLQkweGI5YjY0YWVhLCAweDVjY2Y0YTllLCAweGY4Y2E1Y2FhLCAweDg0MDY5ZWZhLCAweGIyNjdmYzIyLCAweDk5NWZlMjI4LAotCTB4Zjg0MTI4MWMsIDB4ZjNlNmJjMWUsIDB4YWE2Nzg0N2UsIDB4ODRhNWQ3YzQsIDB4ZGU3MmUyZmUsIDB4YmZiNWVmNDcsCi0JMHgwMDM2MWRjOCwgMHhmOTcyYjc5ZiwgMHhlZTRhZmI1ZiwgMHg4Zjg4MDliMCwgMHg3Mzk3OWE1NiwgMHgwYjkyNmFjNiwKLQkweDczMjNmMTE1LCAweDEzYjkwZmY5LCAweGY4NzhlYmRmLCAweDk2MWJjZjdiLCAweGY0OTc5YTA1LCAweDUwMjdmMzkzLAotCTB4NmYzZTM2M2YsIDB4OWY5ZWEzZjcsIDB4N2UzZGJjZjEsIDB4MzY2YmQ0MWQsIDB4NmRmN2E0NGIsIDB4OWY4NDVjZmIsCi0JMHgzZDc5NDdlZSwgMHhkODgzNTZlZSwgMHg1MDEzY2NmZSwgMHgzYWQ1N2MwNywgMHg4YTljMWUzYSwgMHg2NjVlN2JmOCwKLQkweDBiM2QwODViLCAweDRlY2ZhODZkLCAweDNiNjhmNmU4LCAweDc4YmI5N2FmLCAweGZlZjM2NmI1LCAweDhhZmJmMWRiLAotCTB4N2Q0MzA3NzYsIDB4Zjk3YmIzNWMsIDB4YmVhMTUzMGQsIDB4NjE5ZGIwZmMsIDB4MGQ2ZDlhOTMsIDB4YWZhODIwZWEsCi0JMHhhYzMxNGE4OCwgMHhmNGU3NGNmNywgMHhhMzkyZWM4OSwgMHg4ZjdkYTBkYiwgMHg2NmY3MjNhNywgMHgyNzFkZDcwZCwKLQkweGI4MDA4ZmYzLCAweDM3YjkxZGRkLCAweDQ2NTcxZjAxLCAweGRmOGQ5YjlmLCAweDAyOTBlZTU1LCAweGM3OTgzMTQwLAotCTB4ZjA3OTQzYjYsIDB4NTI1M2NkNWQsIDB4NWM3YzAxYzAsIDB4Zjk5ZDNkYjUsIDB4ODllNWY2MGQsIDB4MWQ3ZTM5MzYsCi0JMHg5M2NjMTljYSwgMHg1OWNiYmY0MSwgMHg0ZmE0NmNlYiwgMHhhYTBkYjZjZCwgMHhkMzlmNDBkZiwgMHhkZjk5MjNmNSwKLQkweDNjZDdhODkxLCAweDc3YzBlMzA1LCAweDAyOTU5ZjJiLCAweDM2OTVjNTM4LCAweGVmNzUzZjZlLCAweGFhZGMyZDc2LAotCTB4ZDQxYWZjZTEsIDB4ZDc5YzZlZTEsIDB4NWJiNjJhM2QsIDB4Y2JiYzVkMWUsIDB4MzZmODQ3ZTUsIDB4N2RlMWIzYWIsCi0JMHhkNTliYTNlNSwgMHhhODVlODM3MiwgMHg2NDBhM2VkYSwgMHhhNmQ3MDBjOSwgMHgyNGUxODFlMiwgMHgwZjAxMjM3YSwKLQkweDg5NTNjMTMzLCAweGVkZDY4NjdhLCAweGE1NzY4YWE4LCAweDJkYWE3Y2ZlLCAweDZhYjFmODkzLCAweDVmZWE2Y2JiLAotCTB4ZDdlNDdiYTcsIDB4Yzg4N2VjOGMsIDB4NTVlMTM3NWUsIDB4MmY2YWRiYTcsIDB4YTA4ZWViZTMsIDB4YTBhZjU5ZGIsCi0JMHg2YTViZDJhMywgMHgxZjJmNWZlYywgMHg1MDM4M2E0NCwgMHhmY2E5N2I1ZiwgMHhjYThmYmQ1NiwgMHhhMjdlZjU4ZCwKLQkweGJmODg0M2NmLCAweGM2NGVkYzExLCAweDk3ZDc2MGU3LCAweDgyN2IyZjIxLCAweGMzZWMwYmNjLCAweGNiMDZlNmIyLAotCTB4MGFjZjUwZWMsIDB4YTJlZTdhZjEsIDB4YzhiZmU0YjAsIDB4ZWMxMmY1ZmMsIDB4MDRlMGM1ZGUsIDB4N2FmZGZhYzEsCi0JMHhmNjNiMDE1MCwgMHg4YWJjMzUyMSwgMHhhNmZjNjAwNSwgMHgwNGNlMDhmZiwgMHg1MjhmZjc3YiwgMHg0YWZhODYzOCwKLQkweGI4MmI4NWI2LCAweDI4N2NjNWRjLCAweGZhYzVlYjc3LCAweDEzZjI1ZGIzLCAweGE5ZTdkNjFlLCAweGJhMWY2ZmE0LAotCTB4MmNhYjc0YWQsIDB4NjM2NmI5ODksIDB4ZjdmYmZjYmQsIDB4YmIzZjUyMTUsIDB4ZmExNTFmYTksIDB4M2Y3NGJlMjksCi0JMHgzNjRmYjdiOSwgMHg3YjdiOTNmNSwgMHgwMWNmZGU4NSwgMHhmMmVkMjdlYSwgMHhmNmU4NzlmYSwgMHhkY2YwY2M2YiwKLQkweGYzZjdhOTVlLCAweGI5ZTNmNTMyLCAweGRlZTU3OWJjLCAweGNmMGNjZDMxLCAweGNmZDRkNTFkLCAweGQyMDE0NWMwLAotCTB4M2ZjZWIyYjcsIDB4YjQzYmQ2MGMsIDB4OGU2NDc3MTcsIDB4NTM0MWZhMzcsIDB4YzBkZmQzNmQsIDB4NTIwZGM1ZjUsCi0JMHg4Y2EzZTQ2NSwgMHg3OTI2NjljOSwgMHg5OTY2MGNjYSwgMHgwY2U2MDNlYSwgMHgwOWNmYjUzMiwgMHgwZmRlOTkxNSwKLQkweDg1OTU3ODVjLCAweDg5ZWYzNTJmLCAweDQwOGVhMjUxLCAweGY2OGI0M2ExLCAweGY0OTUyMGYxLCAweDI3MjBkOTRlLAotCTB4MjBmNzdmYzEsIDB4ZGRjZWY0OGQsIDB4ZTA0Nzg0ZDcsIDB4YTJiMDhlM2EsIDB4MWFiNzczN2YsIDB4ZWE0ZGViMWUsCi0JMHhjYzQ4NzRjNywgMHg4NmRmYTU4NywgMHgzZGZkZjVhNSwgMHg5ZTljMWVjMiwgMHhiN2YwZjFmZiwgMHg1YjVhZmJlMCwKLQkweGE4NGNmMGVmLCAweGZiMmI2YmJmLCAweGJjZjllMjMzLCAweDMyNjlmZmQwLCAweDY5NzZjM2FiLCAweGVmZmE0NjBlLAotCTB4YWRkMmMyOWUsIDB4NWI1ZTAzMTEsIDB4NDhiZjAwODYsIDB4ZWM1YjdlODksIDB4YTNmMjFmNjEsIDB4OTAxYTkzNjQsCi0JMHg1MTBmZDczZiwgMHhmYTA0MWIxOSwgMHgxZmRiMWQ3NCwgMHg5ZWU3MzU4MSwgMHhjNDNlZTUyMSwgMHgyZmZkMDNiZiwKLQkweDhjMmFmOGUzLCAweDc3YzY5YTNmLCAweGI3N2M2MGQ4LCAweDhlZjhmOTJkLCAweGYxYTZjOWEyLCAweGE2MTUwNTlkLAotCTB4OGMyYTlkZjEsIDB4Njk5MWYyMGYsIDB4OWRmMTg5NzMsIDB4YWQ2NjE3ZTQsIDB4OGVmOGQyNzMsIDB4ZmYxYTBhODIsCi0JMHg5ODU1OTUxZSwgMHgxYmViNGZjNiwgMHhjNjBkYTA3ZiwgMHhmZWUzNjIxZCwgMHgxN2Y5YmY0YSwgMHg3ZjllNjM1ZCwKLQkweGZlNzlhNTQxLCAweGExN2Y5ZjJhLCAweDlmOGM1MzJkLCAweDVhMmZmMzQ2LCAweDJmZjNlNWU3LCAweDc3ZjNlNGE4LAotCTB4YzZmYjdlZjAsIDB4N2ZlMWY0ZjcsIDB4MjYzZjhlMDQsIDB4ZTI4ZWY4YzUsIDB4MGZmOWU2NjksIDB4ZGZjZjM2YWQsCi0JMHg2NzFmYzdjMSwgMHg2YmUzMTNjYiwgMHg3NWY4ZmUzNCwgMHhhMWZmM2UzZSwgMHhlYWJlMzRkNSwgMHg4ZjkwMDcwOCwKLQkweGJhYjRmY2Q0LCAweDgzNDNkYTI4LCAweDI0MGRmYjQxLCAweDcyYTQxODFkLCAweGJiOTNmNzI0LCAweGUzODIyMmE0LAotCTB4NzdjZTM0ZWUsIDB4YmYwMWE1MWYsIDB4Y2E3ZDA5NjksIDB4OWUyOWViYTIsIDB4NzRmMDUyYjIsIDB4MzUzMjhlZDUsCi0JMHgwN2JjNWEzYywgMHgwMDk5N2Y3YiwgMHg0Y2JiNjk3NSwgMHgzYTM2Y2Q3YywgMHhiYzAwNTdhMiwgMHhmOTMyZWRkZCwKLQkweDVlMzc0YjNiLCAweDNkNjk5NTFiLCAweDE4MDhmZWU1LCAweGZlN2M3MTkwLCAweGQ5OGY2ZmM3LCAweGI1OTc5YzYyLAotCTB4M2Y2YWQ2NWMsIDB4YWI5MDY5ZDEsIDB4OWQzZWZkM2UsIDB4ZjgwM2FjOGQsIDB4NTM1ZTQ4MzYsIDB4NjllODA0ZmQsCi0JMHgwNmRlYTY3NCwgMHg0OWU1OGM3ZCwgMHhmM2MwMzM4YywgMHhiMzhmNDA3NywgMHg3ZmZkZmQxMSwgMHhkMWI1ZWVlOCwKLQkweDBhMmZhZjMwLCAweDFjMjg0ZmY4LCAweDQ4ZDYyN2RmLCAweDQ3ZmZjNDUxLCAweGE4YTk1NjFiLCAweGE2YjU5NmNmLAotCTB4MDdkM2QxYTMsIDB4NTNhMGFkNDcsIDB4ZDkwNzZlZWYsIDB4M2Y0ZjgwNTUsIDB4MTIxNmU3ZTIsIDB4YmY3ZWM2NDUsCi0JMHgyNDg3MGJlZiwgMHg2Zjk2N2JiMCwgMHg2ZWZhNjAxYSwgMHhmYjM2OGIxMSwgMHhmYjkyZmRhMCwgMHhjMmYxMGYxNywKLQkweGU4NWQ2ZmZjLCAweDFmOTMyZjE4LCAweDkxYjdjYzE4LCAweDFiN2NiMzFjLCAweGRiMGI0ZWY4LCAweGExZjNkODM2LAotCTB4YmI0MmNiNzIsIDB4NTJmOTRmYzksIDB4YjViZjVjZDgsIDB4YjZlZjVjYzIsIDB4Y2YxOGVkNDcsIDB4YjEyMTVlZWEsCi0JMHg2ZGVmZDBjZCwgMHhmZjhiNzY3NSwgMHg2MTU5YzdjMywgMHgwOGYxMTJjYiwgMHg4MTE3ZGUzZSwgMHhlOGYwNzk4NiwKLQkweGUzYzcyYzM2LCAweGY1ZDEyZjYzLCAweDU2ZmYyZjc2LCAweDZiZjZhNzg3LCAweDkwNTQ3MDc2LCAweGU4Mzk5ZDdlLAotCTB4MGU0OGIzNDcsIDB4MmY2MTc3ZjksIDB4ZGUxNWI3OWYsIDB4NjBjZWVkZGIsIDB4ZmRiOWUwMDgsIDB4ZDNlMTMyYWIsCi0JMHhiZWU3N2YwYSwgMHhlYzBkYTBmNCwgMHg3ZjRkY2VkMSwgMHg2ZTdkYTNiMiwgMHhmZTE1OGY5ZCwgMHhlNzVhZDYzYiwKLQkweDdkNzE1NWUzLCAweDNlYjExYzU4LCAweDVhZWM5ODhmLCAweDJmNmRhY2JkLCAweDgxOGVmYWRiLCAweDlmNjI2YTlmLAotCTB4ZTE4ZWZhZGIsIDB4ZjNlZGFhYmIsIDB4ZDExNWY1NGMsIDB4MmZkYTk5MmYsIDB4ZjRkOGI0ZGYsIDB4MGFlYjU5N2UsCi0JMHgyZDI1ZmJkMywgMHhjNWY1NGNhYiwgMHhkYTlhYWY5MSwgMHhjMWI2YjFkZiwgMHhiYWI2ZmVmNCwgMHg2ZmVmNGQ3YiwKLQkweGFhNjBkOGFkLCAweGIwZmMyOTdmLCAweDBiMmRmZGE5LCAweDRiZGU5YjM3LCAweGVkMGM1NmZiLCAweDFlMWFiZDI0LAotCTB4ZWI3Njg3OWEsIDB4NTlmOTA3NzEsIDB4ZjJlYmJmM2EsIDB4MTZlYzBhNzAsIDB4ZGQ4MzRmMmMsIDB4Y2EwMzY1ODIsCi0JMHg2ZGJmYzgyOSwgMHhiNzZiMmYzNywgMHgzNWVhMWUyYywgMHhlZDI3NjFmOCwgMHg0ZjI4MDU3NSwgMHhlMmI3YmU1NiwKLQkweGYwZGZjYWQzLCAweDFkNmM5Zjk3LCAweDhjNmFjYmQyLCAweDNkYmY0MTQzLCAweDI0MzkzZjE2LCAweDFmMWVhMGY0LAotCTB4ZGNiOTU2YWMsIDB4OWJjY2VmNTYsIDB4YjU3ZmZlOGUsIDB4OTc1ZTFmMWEsIDB4OTNlYzRmYzQsIDB4ZjM0NDk4ZTcsCi0JMHhlN2E1Njg2MCwgMHg1YjgwZGQyMCwgMHhkYWFiNzgwZCwgMHhiMzgyNmM1ZSwgMHhlMzRjYmY2YiwgMHgwNWQ5NDRhZiwKLQkweDBhNWYzN2ZkLCAweDg4ZjVjNzFkLCAweDJjMTYwZmM1LCAweDA0ZjA4MzE4LCAweGY2ZjU0MzdmLCAweGJiN2Y1YTFjLAotCTB4N2Q2Y2U3ZWEsIDB4MGJmODhlYzcsIDB4N2VhYTc5NTEsIDB4ZWEyNzk1MjEsIDB4NTNiZTU0YzMsIDB4ZGJlNTQxNWYsCi0JMHg3NjU0NzVmNSwgMHhmMmE1YWZkNiwgMHg5NTA4ZmFjZCwgMHhhMTZmYWJiZiwgMHhhZGY1MzdmMiwgMHhkZmFiMWU1NCwKLQkweGY1ZWJlNTQ0LCAweGViYmIyYTUxLCAweDdjZWE1NDgzLCAweDQzMjdhN2RiLCAweGZlMTU2ZWMyLCAweGI3MjI0ODA1LAotCTB4ZTQ1Y2M1NWIsIDB4OTZiOGJlZGMsIDB4YWNmMWU1MGYsIDB4YjQ3MGQxZjYsIDB4MDMxZWNmY2IsIDB4YzZhNjE3MjIsCi0JMHg1MjFmOTU5NywgMHhjOTA1OTVlMiwgMHgwMjhmMjhhZSwgMHg3ZmY0MDc5ZCwgMHg3NGUzNGFlZiwgMHgxY2Q4ZDk3MiwKLQkweGRlZTM3YTA2LCAweGMwMWZiZTJiLCAweDE1ZDQxMzM4LCAweDQ3ZGY4NTk2LCAweDQ5ZGNmMzAzLCAweDEwN2YwNWZhLAotCTB4M2EyOTc1ZTksIDB4Yzk2ZjYwYjEsIDB4ODljN2EwN2MsIDB4OGE1YWZlNDcsIDB4NDU2Yzg2ZmQsIDB4MjgzODVlZGMsCi0JMHhlMmM5N2FkMywgMHhhZjQ4MDM1YiwgMHhlOTM3OGE0ZiwgMHg0MDJmYmYyNywgMHhhMzkzMzliOSwgMHgwMGEzYWZlMywKLQkweGIyZGYwNGUzLCAweGIzOWZhOTc5LCAweDIwYTYwZTZkLCAweDQ3YTRmNzFlLCAweGY2N2QyNDMxLCAweGFlMGY1NmYwLAotCTB4NzI3ZGFiNzcsIDB4YjMxZjE4ZDQsIDB4YzJiMTM1OTYsIDB4NGY5ODY2YTgsIDB4N2ViOWJiNmQsIDB4YzM5YTU1YjYsCi0JMHg4Y2ZlNjllMywgMHg1ZjIwYzY5YiwgMHg1MGVmYTM3OSwgMHhhNTQ3ZDE1YywgMHg5ZjZhY2ZkZSwgMHhmZWU4ZTM0YSwKLQkweDQ5OTFkYjM4LCAweDIxN2UwYTdjLCAweDg2YWZmYmI1LCAweDA5M2Y1NTIzLCAweDFmZDhkYTM4LCAweDJlMjg3NzAwLAotCTB4YjkzZjhhMTcsIDB4MGY5NGNlNWYsIDB4YjFiYjhjNTQsIDB4NzA4ZmY2M2QsIDB4N2ZjMDc3M2QsIDB4NjU5MWQwMTcsCi0JMHg3ZWY1ZDUwYSwgMHhjNDcyNjM2YiwgMHhlZjlmMTYzMSwgMHhkZjA3OGQzMCwgMHhmYjlmNzVmOSwgMHhmOGM1ZDE0MiwKLQkweGY0Mjc2MTU1LCAweDliNmE4Mjc5LCAweDBlNDQzZThmLCAweDZhMmI5NWYyLCAweGE2OTlmYmQ2LCAweDVlN2I2ZDdhLAotCTB4ZTAwZWI0ZDQsIDB4NTllZTQwM2YsIDB4M2FlMGE0ODUsIDB4YThiODJkNTgsIDB4MjQ1YWQxNDcsIDB4ZWM4YzZmODAsCi0JMHhmMTI2ZmNlNywgMHg0ZWNlMzU3NiwgMHhiZTQ3ZWMzNSwgMHg1NGUyZmM2OSwgMHhhNTZjYjYzZiwgMHgzYmUxNWFmOSwKLQkweGFiZDg3ZjVkLCAweDVjN2UyNDVjLCAweDNiYmQ5ZjI1LCAweGZmYzhiZWQ5LCAweDQ4YmVmOTk2LCAweGQzZGI4ZGI1LAotCTB4YTBmMTE5Y2MsIDB4MTE3Y2NhYmYsIDB4ZTE4YmM2MGYsIDB4MGZjM2ViNGYsIDB4OGUzMDRkZjksIDB4YjNmN2FlYTEsCi0JMHg0ZGVmNmEyMiwgMHhkOTc2NGViNiwgMHgxZDZjOWRiOCwgMHg3YjhjNDViNywgMHhkY2FkZmMyOSwgMHhjZTM2NzQ3MSwKLQkweDk1Yzc4YWRiLCAweGI0YWJlZmVkLCAweGZmYzBhMzFmLCAweGQ0NzgxMzRhLCAweDBlNDYzYmYxLCAweGRmYzBjOGI1LAotCTB4MjJkZmRiOTUsIDB4M2Q5NGYyN2IsIDB4MTc2YmZjMzIsIDB4ZTFmZDViZDEsIDB4YjcxNDdjZDcsIDB4NjExZGU3ZDUsCi0JMHg5ZGNlMzgxZCwgMHhmZjY3ZjE3ZCwgMHg3NTg1YmYyZCwgMHhlZDk3ZGRmMSwgMHhmNjJjYmUzYywgMHg3MDM4NzQzNywKLQkweGY1MDZkMGQzLCAweDY3NzZhMjI1LCAweDliYzUxNTViLCAweDNkNzVkZGRmLCAweDU5NGI2ZmQ5LCAweDY0NGU4M2M4LAotCTB4NDUyZDZiMDUsIDB4YjMwY2YwM2IsIDB4OWQzYzQxY2QsIDB4MjY3YWFmNjEsIDB4NDNiNGU4MTgsIDB4OTc0ZTQ5NTYsCi0JMHgxMGVkOThiNCwgMHhmNTRkNWZiMCwgMHhmNWNjOWJlNSwgMHgxNzNmMzY3MiwgMHg0NmY5NGNmNSwgMHgzNDRhOGIzYiwKLQkweDQ3ZmJkMzNmLCAweDdmZTEyZjY1LCAweDhmNWJhYjM5LCAweDlkYTM3M2ViLCAweGU5ZGRiM2VmLCAweGU4M2U0YTY1LAotCTB4MWUxNzlhZGIsIDB4ZmYzOGM1MmIsIDB4N2ViZTY0OGYsIDB4MTU5M2YxZWEsIDB4YWI4ZWRjNTksIDB4MzE1NjZkOGMsCi0JMHhiNjg3ZmZiZSwgMHhjYTljNWYwOSwgMHg3YWU4ZmJmMCwgMHhjZjIyMWY1YywgMHhmZTZkODE0YiwgMHhhNGZkZjhmZSwKLQkweGQ1ZTE1YmYwLCAweDcxN2VlZmQ3LCAweGNkNDcwMTFjLCAweGJjNjkyOTc2LCAweDg5MmNiZjc3LCAweDYzZjM5ZmY1LAotCTB4YmFhNWUyODYsIDB4NWJlN2Q3NmUsIDB4MjJjOWFmZWEsIDB4MTkzMzJjMWUsIDB4ZWJjNjdlZTksIDB4ZTgzMmQ4OGMsCi0JMHhmMzhlMjA3ZCwgMHgzNDA4ZTlkYiwgMHg3MmMyZmNjMiwgMHhmNjRjOThlOCwgMHgxOTg0YmM0NCwgMHgzMGU1ODVkYSwKLQkweDVlOTJlZjNkLCAweDkzYmI0NzI5LCAweGI0MTJmMTI5LCAweDIxZWQ2MTIzLCAweDNmMDU1NTNlLCAweDEyOWU2OWM4LAotCTB4MzFiYjc3OGMsIDB4Njc3MThiYmUsIDB4ZDYwYjY3OTcsIDB4ZTYyYmJiZDcsIDB4MTZiNTFjNjIsIDB4ZjdmNDAxZjUsCi0JMHg2MWY2Njc4MCwgMHhiMjcwOWZkYywgMHhmODEwNzhkNiwgMHhlZjMzZTFkNywgMHhlNmZjYjgyZiwgMHg3NWVhM2E3YSwKLQkweDAwZjg3N2Q0LCAweDhjMDJmOWY3LCAweDIzZTk1NGUyLCAweDAxZGNlZGNkLCAweDFmNmNmZDczLCAweDVmN2NlMjllLAotCTB4ZjcxYzU4OWMsIDB4MGNiOGI1YzcsIDB4NGFjOWIzZTMsIDB4NTRiZjlmNTcsIDB4ODcxYWZlODQsIDB4NWE2NGVjMWYsCi0JMHg3OTc4ZDZmZiwgMHg3ZTIyOTVmYiwgMHhmNGY4ZTZiZiwgMHg4OTE3NTk4MSwgMHg5MzllZDU0NywgMHhjZWIwZDQ1OCwKLQkweDJhYmQyYWQ0LCAweDM5ZWQ2MWYyLCAweDZhN2Y5ZTg1LCAweGQ1ODdlYWJkLCAweGYzNTdhMGQ2LCAweDkyOWE3MGU1LAotCTB4YzIyOGY1YzMsIDB4NjEzOGMxMjcsIDB4ZTM4MDlmMDMsIDB4ZjljYTM1ZWEsIDB4N2MzZjBiMDgsIDB4OTliMjM4NmEsCi0JMHg5MThmYmY0OSwgMHhlMGM5ZjljMywgMHhmYmZkZDRmOCwgMHhlMjNmZjVmYSwgMHg2MWZmYjRiZiwgMHg5MDlmZmFmZCwKLQkweDE3OWFmZmFjLCAweDgxMTVkOTllLCAweDg3ZjJhMmY1LCAweDMzMDBmNmRmLCAweGQ2OTU3N2IzLCAweGJkZDAwMGRjLAotCTB4MDdiMzViN2EsIDB4MTI5NGYyZTUsIDB4ZGY1ZDIwZjEsIDB4YTI3M2NhOGQsIDB4NTJhMWY4NDksIDB4YTgyZWY5ZDEsCi0JMHgzZmM0YTU0OSwgMHg5ZmE3NDdjNCwgMHhlODBkZTZmZSwgMHhjZGI0N2ZjNywgMHg3ZWZmMjVlZSwgMHgwMGVlMjNiYiwKLQkweGI2ZDk1Y2E2LCAweDc2YzdjYjgyLCAweDdlYmM1YmM3LCAweDlmYzhmYmNmLCAweDdkNjZlZGI1LCAweGI3ZTRmOTUxLAotCTB4N2ViNGZkNzMsIDB4MWJmZjg0NDUsIDB4ZTU2MWZmMjcsIDB4OGQ5YzdmMTMsIDB4ZWIyZDU4ZjYsIDB4ZmQ2N2JkMjUsCi0JMHg5NzNmYzcwZSwgMHg2MmMyZjY0NSwgMHg3YmZmYTMzNSwgMHg1NmIyMWY3ZCwgMHhlZGI2YTVlMCwgMHgzZWUzZWY5YiwKLQkweGU3ZGI2ZDQ0LCAweGU5YTE3MjRlLCAweGZhZDFiZjI0LCAweDA3ZjA4NTVkLCAweGQ5ZGM1NTZlLCAweGM0OWJhZjE0LAotCTB4ZTliZjIxMjYsIDB4ZWU1MTYxNzgsIDB4M2MyZmM4MGYsIDB4OWNmMTgyNTYsIDB4ZjY1ZTI3YWUsIDB4N2M4ZGEzNDgsCi0JMHhkOWRmZjVjYSwgMHhmZGVmOTJkOCwgMHhhZTVhOWZkOCwgMHgxYTNmNDFiYSwgMHhjZWRkNmVlZCwgMHgzZjBiYjdmMywKLQkweGFiMmYwZjY2LCAweGVlMGY3MWVkLCAweGI2NmY1NDFmLCAweGY1NWNiZWQzLCAweGZmYmY1YjMzLCAweDhlNTdjNjA4LAotCTB4NDA1NzAyM2IsIDB4YmNjZjU1ZmYsIDB4NTAzNWZhZjQsIDB4OWVjZTdhYWYsIDB4NDM0Zjk3M2QsIDB4ZjQxMzcyOTMsCi0JMHhkNmZmODVhOSwgMHhhM2QwNGY4ZSwgMHhhOTJmNDdmMiwgMHhjZjhkMGZiOCwgMHhhMDk1OWViZiwgMHhmYjczZDU0YiwKLQkweDNmYTYzNjU1LCAweGY2YzQ2NjNlLCAweDEyNWE5ZGFiLCAweDlhZGVjNGZhLCAweGZjODZmZThkLCAweGU5MTU3OWMyLAotCTB4ODkzZWVlZmYsIDB4ODI0YzJjMGQsIDB4OTEyZmNkY2YsIDB4MjI3ODhjZGQsIDB4ZjU3YTBhN2EsIDB4YmVkMmNmZDEsCi0JMHg3YTQyZTgxNiwgMHg2YjJmNDJkMSwgMHhmZTQyNjliYiwgMHhhNzhjNWZiMSwgMHhmYjNmN2YwMywgMHhmOTc3ZGM2MywKLQkweDc4ODAyMzhkLCAweDJlZjY3OGE4LCAweGE0ZTdjZTBmLCAweGZjZjljNzUyLCAweGNjNWNlNmIxLCAweDQ3YjBhOGIzLAotCTB4ZjI1NGJkNzIsIDB4N2Y4ZjE1ZTcsIDB4Zjk2ZmY4ODUsIDB4NTJlNGFmZDEsIDB4ZjMwNTgzM2MsIDB4NDQzYjY0NmMsCi0JMHhjYjllNzBmMiwgMHhlNjk5YmQxZSwgMHhjNGMyY2U1OSwgMHhjOThmMTU4NywgMHhhMWYwZmY5NCwgMHg5NzNjZTZjMiwKLQkweDE2ZGU0ZTQ0LCAweDhiNzI3MjcyLCAweDRlODU5MjgzLCAweGZiODI0MmUyLCAweGQxY2FhZjEwLCAweDViY2YxNDZkLAotCTB4YWY5MmYxNDUsIDB4NmM0N2ZiZTgsIDB4NzQzZmQ1MzUsIDB4MmJiNTdhNzIsIDB4NGIwYzFmYmEsIDB4OWY3ZjkxODksCi0JMHhlOTAzYTdiOCwgMHg3MDQ4N2E3NCwgMHg2YjgxYzYyMCwgMHhmODExMTI5OSwgMHhiZjQwMmU5MCwgMHgwMzU5ZDFmMiwKLQkweDVmOTg5ZDM5LCAweDgxZGYxNTI5LCAweGNmODE5ZmZlLCAweDNkODc3ZGIxLCAweDdkMzEyYWU4LCAweDI2MTQyZWM3LAotCTB4YzYyMzVmYzYsIDB4ZDBkM2I4MDcsIDB4MGI5OTNkYmUsIDB4Zjk5MjYwZjYsIDB4M2QyNWQ4NjUsIDB4MGNjMWQ0NmUsCi0JMHg3NzkwNjY3YywgMHhkYzRmZmYyZSwgMHg5NzVkZTVjYiwgMHgzOWJjZThmZiwgMHhkNzgzZmVmOCwgMHg3N2UxMWNiOCwKLQkweDVjMDBiZjY4LCAweDdlZjQ4MWYxLCAweGU5MTI0ZGZmLCAweDI3OGIwNzA3LCAweGVjMjdmMzkzLCAweGVmY2RjZTQyLAotCTB4ZjAwMmZjYWQsIDB4ZjcxZWI4MmIsIDB4OTM4ZTBkZjEsIDB4ZmIyMDc0NDUsIDB4N2MyMzdjYjYsIDB4MzhhYmQ0NmYsCi0JMHhiZjdmYTdhZSwgMHgxNzJmMWNiYSwgMHg4YWY3ZTBmYSwgMHhmYTEwMGZjOCwgMHhmNWNhM2Q4MCwgMHgyNDNmNmE0MCwKLQkweDdiNzVlZGMyLCAweGEwOGZmYmY0LCAweDQ2YmM4MmZjLCAweGY2YmYyOGZjLCAweGJkZmZjZTEwLCAweGZmNWYwNzFkLAotCTB4N2JjZGM4MzIsIDB4Y2Q2ZTVkMzEsIDB4YjcyYWQ1N2EsIDB4NjZhZjNiMTUsIDB4M2RmNmU0YzksIDB4Y2E5MmMwMmQsCi0JMHgyYTRmM2MyZCwgMHhmMTI3NWFiNywgMHhhZjViZGZmMywgMHhlZDU0NzhlYSwgMHhlYmFhYmQ2NiwgMHhiNGY4NTRjOSwKLQkweDhhY2RjOWVhLCAweGQ1NmFmMDlmLCAweDFhZjdmMDkzLCAweDhmY2ZlZDJiLCAweGZjZWExZjNhLCAweDlhODNmOTU3LAotCTB4ZmE4ZmE4YTEsIDB4YzNlNzU0ZjgsIDB4ZjlkNTNlM2UsIDB4ZDEzYzVmYjAsIDB4ZmJlYjQ3ODQsIDB4MThkYzYwNWYsCi0JMHhmYmI0MjVmOCwgMHg4MWYzYjNkNywgMHhmODdiZDVhZSwgMHg3NzdjMmNiZSwgMHhhZjgwZWIwOCwgMHg1YWQzNzcyMCwKLQkweDFiNjdlNTBmLCAweDNkNGI1MWViLCAweGI0MWY2OTY2LCAweGY2OTY0M2Q0LCAweGNlYmQ0YjYxLCAweGUzY2EzZWQyLAotCTB4NTUwN2VkNjksIDB4MzcxMzlmOWUsIDB4NjNhZmI3YjUsIDB4YjFjNjM3MTEsIDB4YzcxNGNhZjcsIDB4ZDc5ODAxZWUsCi0JMHgzYjNkZjdjMywgMHhjMjkxYTMwYSwgMHg2ZjViNWU0NCwgMHhmNTFlYmE4ZSwgMHhkN2I3OGY1OSwgMHhhZjYyZjY4MywKLQkweDdhZWZjNzhiLCAweDRjOWViZDQyLCAweGQ2ZjY5ZDgzLCAweDcxZjQ5OTFlLCAweDQ5Y2Q5NDY3LCAweDA1ODI0ZmU2LAotCTB4NjRlYmY0NGQsIDB4YjhmM2RlYTksIDB4ZGRkYTBmN2MsIDB4NTkyY2RlMzAsIDB4NzE4YjU4MmIsIDB4ZjI5OTU2OTgsCi0JMHhkYzM2OTY2NywgMHg4Y2ZjYzFlMiwgMHgzN2M1M2Q5ZSwgMHhjYmU3ODQyZSwgMHg5YjdjYzg4ZSwgMHhmMjU0MTIzMCwKLQkweDI5ZGM3ZTBjLCAweDlhNjg3OTE2LCAweGY3YzdmYjg0LCAweGVjOTdmZDEzLCAweGQyZGQ3ZWUxLCAweDczZjM5M2ZiLAotCTB4NWNhZWY4YTUsIDB4ZGVhMmEzNWIsIDB4NmRlYzdmMDQsIDB4ZGU4M2JlZTMsIDB4OTZhM2M1NGYsIDB4MTdhZTdiZTcsCi0JMHhmZGZkY2Y3YywgMHhlZmNjMjdjYSwgMHhiMDNlMjJjMywgMHg3MWZiZTc0YywgMHhjZmY3MWM2YywgMHhhZTc3ZTUxOSwKLQkweDk2Nzc3YTE2LCAweDg1YzZmYTNjLCAweGMzOWU4NzQwLCAweDM5YmU0MzMyLCAweDNhMjY0N2JiLCAweGY3YzFkZDljLAotCTB4M2VjZTI5ZWYsIDB4OTdiNWY5MDUsIDB4YWY4ZTlkZjQsIDB4MTE4Zjk0MmUsIDB4ZDc1MGY1YTksIDB4ZmQyZmJmZjMsCi0JMHhkZWE5MzQxYSwgMHhlZjkyZGJmNSwgMHhlYmI1ZDk0MiwgMHhiMTE3ZjBmOCwgMHgwNTFiYzJmZSwgMHhkYmZkNjViZiwKLQkweGEyZTdkOGNmLCAweDdkOWU4ZDdkLCAweGVjODdkYTZlLCAweDgyZjNmYmQ5LCAweGI3N2Q2MWFmLCAweGY2NzA4MDIzLAotCTB4MDk3M2ZiZWMsIDB4M2FjZjUxZjIsIDB4YjFlYTA1NDcsIDB4MWZkYzIxOWUsIDB4ZTdmYmRjNmQsIDB4M2Y1YTRlOTIsCi0JMHg5MzdlNzg5YiwgMHg2N2MzZmI5ZCwgMHg0ZGY1ZmNmNywgMHg5ODRiMWIyOSwgMHhmYjA3ZGExNSwgMHhhODdmNjlkMiwKLQkweDhhMmVjN2Y2LCAweGZkZWNmNWFiLCAweGNlZDFhOTczLCAweDU5ZjNhY2ZmLCAweDdiMWJmNjI5LCAweDRlZTE2Y2RjLAotCTB4ZWY5MzJmODQsIDB4MzhiZWQ0ZDMsIDB4ZTYwMzZiNjUsIDB4NTdlZGI0NjMsIDB4MTlmYmMwOTcsIDB4ODI1ZjM5M2YsCi0JMHgyNzY3YjFmYSwgMHhlZGJhN2JiNywgMHg3ZWUzOGY5ZCwgMHgyZmVkNzdkYSwgMHhiZDAzYjNhZSwgMHgwNjM4NTFiYSwKLQkweDNmNTI5YTgxLCAweDkyZDExZTllLCAweGM1M2NlNWUxLCAweDFmMTcyZjBiLCAweGUwYzdmZjNiLCAweGY1N2RhMjQzLAotCTB4YThlZTNkZWEsIDB4ZmY3OWMyNTMsIDB4YTJkZmNkZTUsIDB4MjBlN2Q4M2UsIDB4ZmJlN2Q0YmUsIDB4ZWM4MWFjNWUsCi0JMHhmYmNkNGI5MSwgMHhiY2RkM2ZlOCwgMHhjY2U1ZjhhNSwgMHg3YzFmZjdiYiwgMHhmMjYzNzdkZSwgMHhlNWZkZDVkYiwKLQkweGVmOWYzZmEwLCAweGNmZWE5YmJkLCAweGVmMDQwM2I4LCAweDU3YmJmMjY1LCAweGZkMWM3OTU1LCAweDlmZmU3NDFmLAotCTB4ODEzYmVlOTgsIDB4Y2Y0YjllZWUsIDB4ZjgzZmVjN2IsIDB4ZmRkMzUzYmMsIDB4ZWU4MmVkYzgsIDB4YTk0N2NjNWUsCi0JMHg4Mjc5YzlmZCwgMHhiOWVhOTNlZiwgMHhjZTg3ZmYxYiwgMHhlZmQ3Yjc1ZiwgMHgzMTVhMDViMywgMHhiZDFkM2IyZiwKLQkweGUxZTczYzAxLCAweGUxODJkZjllLCAweGNlNDZmYmMxLCAweDI4ZGRhMmY3LCAweDJiNGJmZDhiLCAweGZiOTUxMTdjLAotCTB4ZjNjNGIyN2QsIDB4MWUxMGQ5ZDYsIDB4NGZjMjYzY2YsIDB4ZDcxMGYzNDIsIDB4MjcyYjQ1NGYsIDB4ZDZkMTU0YmIsCi0JMHg5NGNjZGQ5MywgMHhmMDEwNDc0MCwgMHg3NzU1ZGY3MiwgMHg4N2Q3MjgwNiwgMHhjNjE2M2Y4ZCwgMHgwMTY5ZTBmYSwKLQkweGZjNWI1NzhhLCAweDA1ODkyNmM1LCAweDk1NTdiMDI1LCAweDE4N2YzZWFiLCAweDQ4ZmIxNmZkLCAweDQyNTFkYzViLAotCTB4ZGU1ODViZTUsIDB4NzY5MGUyMjMsIDB4NjdmMjZhYWYsIDB4YmFlNmQxYjQsIDB4M2JhZTZmY2IsIDB4YzY0ZTdmNDQsCi0JMHg1OGZhNzdlMSwgMHhmMmQxZTMxNCwgMHg5OGJjMDc5NSwgMHg1MzhmMjZjZiwgMHhiYjJlYTYxOCwgMHhmZDA0NmI1OCwKLQkweGZjY2Y4NzA2LCAweDczZjQyMmZkLCAweGI0NWJmMTBkLCAweGIwNjBlM2RiLCAweGFkOGVmYmZkLCAweGYzMzgzZjE0LAotCTB4NjAzNzViZjQsIDB4Y2EyZjU1YmYsIDB4ZTk3ODA5Y2MsIDB4NzE2NmUxZGUsIDB4YWEyNTFiZTQsIDB4ZDk1MjNmYTIsCi0JMHhiZTI5MDcyNiwgMHgxNzRiYzRhMiwgMHg3NTBiZjYxOCwgMHg4N2VhYjE3YiwgMHg3MmFiODI2ZSwgMHgxNzNhMjNhNywKLQkweGY1ZGNhZmJlLCAweGI3NWExMjg3LCAweDNkOTJmNWQ3LCAweDBhNWE3OTFiLCAweDNiZTFhMzZjLCAweGIwM2Y3MDRiLAotCTB4YmU3ZTQ5NTIsIDB4ZTc5NTExZTQsIDB4NGVlZDc1MWIsIDB4YmM3ZTg4NWYsIDB4NmJlNzlkYjQsIDB4YjE2ZWM2NTYsCi0JMHgyODc5MGMzYiwgMHhkZWJiNTQxYiwgMHhmMjI4Zjg4ZSwgMHgyY2Y5NDQ5NCwgMHg0ZjMxOWYwOCwgMHhiYjU3Yjc1MCwKLQkweDdjMzg5MjllLCAweGU2MjhmNmVkLCAweDdmNmU1NjdkLCAweDExZTMxYmFlLCAweDAxMWNjNzk1LCAweGI3NmIxYjc0LAotCTB4ZWZmMTRmYmYsIDB4YzY3YzNmMTksIDB4OTc3ZTQ5ZDMsIDB4ZmI0M2YyNmMsIDB4NjVkYjdmZjksIDB4YjZjYWViYTIsCi0JMHhhMTViYjIxYSwgMHgxOTVkZjQ0ZSwgMHgyN2Q2ZmUxMywgMHg3ZWFhNGZmNCwgMHgxZTE3NzdiOCwgMHhkMWZhYTg5NCwKLQkweDc3OGMxZTkzLCAweGU2ZDhlZTljLCAweGZiNzAzZjIxLCAweGZkMzFlM2M1LCAweGJkZDhiZGZjLCAweGMyZmJkZmMyLAotCTB4NTRlM2U0NDksIDB4ZmM2OWRlZmUsIDB4M2Y1MWQ4MDcsIDB4ZjM3ZTJkNTUsIDB4Yzc2NDAxZjYsIDB4YzlhNTljMDIsCi0JMHhmZTc0YzdmNiwgMHhjM2U2N2FhOSwgMHhkOTVlMzFjNywgMHhjN2JkZjNiNSwgMHhiZmVhZWUxMSwgMHhiNDcxZTlmZCwKLQkweDk3M2VkOTQzLCAweDZhMmRmNzE3LCAweGM1MzVmZTlmLCAweGRlZWZmNDc3LCAweGEyNWM3OTU0LCAweDI5MjdhOWZiLAotCTB4ZmUwZGQ2M2UsIDB4YmRkNmY2MzYsIDB4ZmEwMTY0ZjcsIDB4ZmRjZmRkMjMsIDB4ZTdmZDE3MjUsIDB4ZDE2NzdiMzUsCi0JMHhjZjM1OGZmOSwgMHg5MmM4MThjZiwgMHgyMjVlYjFjOCwgMHgyMzJmNDZmZiwgMHhkYmE1NjczZSwgMHg2NDgzYjZjMSwKLQkweGJhMDE5ZjJmLCAweGU3ZDJiZmEzLCAweDc4NmFjN2M3LCAweGZjMmZjNDdjLCAweGUzYzkxZGY3LCAweGY1ZmNmZGExLAotCTB4NWUzNzA1YjYsIDB4NmRiOGY5OGIsIDB4ODNhYTAwZjYsIDB4YWZlZGZhNGIsIDB4NWVjNzNkMDEsIDB4ODg3NzFkMDYsCi0JMHgwYmVjNGNmOCwgMHhjZmRiZjUxNywgMHg1ZTgwM2ZlMCwgMHhmYzc0MmRlNywgMHhmN2Q5NmRiMCwgMHg2ZDc3YzExZSwKLQkweGVkZmE1MjAzLCAweDlmYzBjYmYxLCAweGEyM2Q2ZjFlLCAweDk0MGU5ZDA2LCAweGEwM2Y5ZGI3LCAweDZmZDIwOTc4LAotCTB4ZmJiODRjMmUsIDB4MzAwYjBmOTksIDB4ZGVjYTdkNWUsIDB4YjFlNTNiN2IsIDB4ZDE3ODc1ZWYsIDB4ZmJkY2FkNGYsCi0JMHhmNzUzYzkwNiwgMHg5ZTI5NDdmMywgMHhiM2RjNDRjOSwgMHhmMWZkZjU5YiwgMHhhMWM4OTRmOCwgMHhjZGMyN2RhYiwKLQkweDA3NDE3ZGZkLCAweDNkZjgwNzhjLCAweGZkZjg1Y2Y0LCAweDc4ZjVhZjljLCAweDQwMzhhYTQwLCAweGU0ZjNjMWQwLAotCTB4Y2Q3MDM4ZjQsIDB4N2UxNWJmMTMsIDB4ZDI2ZTgyNzUsIDB4NWJkN2E0NjQsIDB4ZWI1ZjhkMTcsIDB4MWUyMmYwNzgsCi0JMHg1Y2UzMTkyNiwgMHg3ZDJlZTNjOSwgMHhkZDBiMmU3MSwgMHg1ZjU2ZjhmNCwgMHg4M2VhMGIxYywgMHg5NTExOWUzMSwKLQkweDM3MTY0OGRlLCAweGUzY2NkZWVkLCAweDczNzZkZDYzLCAweDRlODI0ZGZlLCAweGQ1MzVlZTNjLCAweGU4ZDM4ZTYxLAotCTB4MmYyNTRkZjMsIDB4NmE1ZWRjYmEsIDB4NGYxNDlmMWUsIDB4YmIwOGQwYTMsIDB4YmFiZTNmYmEsIDB4ZGZhZTRlM2UsCi0JMHhkZTVjNzc2ZiwgMHhmZGNhNzU3ZSwgMHg3NTkyYTU5NCwgMHhjNzM2ZTUzZiwgMHhiYzNmNjhkNSwgMHg1N2NhMzJhNSwKLQkweDBjNzllNWU4LCAweGM4YjliZWZhLCAweDVhN2FlYzE3LCAweGZhYzk3OGE2LCAweGVmZDI0MWQ4LCAweGVmYTFmZDU2LAotCTB4YWRlMTU5YjcsIDB4NmNhZWYwMTMsIDB4ZDc0N2ViZTcsIDB4ODM1NDc3NGUsIDB4ZWMwZWJhN2UsIDB4Yjk1ZWJlMjYsCi0JMHhmZDE1MmRlMywgMHg3ZmRiNDNjZiwgMHg4YjNiNzJhNCwgMHgxZmFlMTFjYiwgMHhiYTdjYzM1MSwgMHhjMjVmZGQ5ZSwKLQkweGRmM2M3YWUzLCAweDM3Y2UzYWQ5LCAweGE5M2VkYzFjLCAweDljN2M5M2RkLCAweDliZWYxZGRhLCAweGM0OGFhOWM2LAotCTB4NzlmZjllNTQsIDB4MmI0ZWYxZjEsIDB4YmZiMDViYzEsIDB4M2E3NjFkZDMsIDB4MjYzYTczY2YsIDB4YmZiNjQ5Y2YsCi0JMHgxNzYxZDhiYiwgMHgyZjJiNDFmNiwgMHhiY2E1MWQ2MSwgMHhiY2ZjYTNlZSwgMHhkMzU3YzRjNSwgMHhjZDdhMGYyOCwKLQkweGM1YmYzOWQxLCAweDQwNmI4YzczLCAweDZjNGVkMWFjLCAweGRhN2NlMDZiLCAweGY5ODI3ZmY2LCAweGEzYjZlZjQ4LAotCTB4ZmQ3MTk2NWYsIDB4MzVmODg1ZGEsIDB4YWZhNThiZDgsIDB4ODM3MGNkZDUsIDB4NWRmZDI4N2UsIDB4YWJiMjIyNjgsCi0JMHgzYTRjZWY1NSwgMHgwZmMxMzM2NiwgMHg3NWM0MGNlMywgMHhjMWZhMDlhMSwgMHg5ZmNjN2RmYywgMHhjZjY0Nzg0MiwKLQkweDhmMDgzOWVjLCAweDVkNzliNWVjLCAweGVkNTJmMjQ5LCAweGNhZjI4ODVhLCAweDVlZWQ3ZWY1LCAweGMzMzhkZTczLAotCTB4NGZkMDg2ZjMsIDB4NWU3YTk1ZjcsIDB4ZjEwMzI4NTEsIDB4Y2RjNzYxZjQsIDB4MzI4Njc0YmMsIDB4Nzc1OTE3YmMsCi0JMHhkOWJkMDk0ZSwgMHhmMTYwMWY1NSwgMHgwODFjZmMxMSwgMHg3ZTQ1NmJkNiwgMHg4MzllYzU3MCwgMHg1NjBmNTFiMywKLQkweDJmZTYyNGM0LCAweGFkYTQ3M2M0LCAweDc2M2YzNzI0LCAweGE1NzNmMjY0LCAweDUxNWRiMzUxLCAweGQ0NTdlN2I5LAotCTB4Yjc4ZGIyYmUsIDB4NmEzMTYyYWYsIDB4OGM0NWU3OGYsIDB4NmM0ZDViZjYsIDB4ZTExZWM1ODIsIDB4ZjIyM2RkZmMsCi0JMHg5NWNmYWE0MiwgMHhmZjIxYjhiMiwgMHg5ZjgyNjdlYiwgMHgyNmJkZWFiYSwgMHhmMDhkNWYzZCwgMHhkNjFhZmI0MSwKLQkweGM0ZDRlMzQxLCAweGQxYzY5ODA2LCAweDliOWNkNWRiLCAweDQ2YWZlYTZhLCAweGFiN2UyMGU5LCAweGY0MmZmNzM5LAotCTB4ZWFiZTRmYmMsIDB4ZDQ4Nzg0N2QsIDB4ZTA5YmU3ZmQsIDB4ODUzZmY0NGUsIDB4ZWIyNDI3YzUsIDB4YjczZDFhN2YsCi0JMHhlNmZhODdlNiwgMHhkZTYzNzhmMywgMHg4ODJjYmQwMiwgMHhlODhjZmVhMiwgMHhkM2NhNzNlNywgMHhiZjgwOGRhMiwKLQkweDNmZjg1YTIzLCAweGRjZjgxZjUwLCAweDYyNWYwYjFiLCAweDMyNmNkZTc4LCAweDcwOWY1OWU1LCAweDBmMDQ3Yzg4LAotCTB4MDQ3Y2YwZjMsIDB4NzU4MzYyMmQsIDB4Y2I2ZDExZjgsIDB4ZjI4YzY5ODYsIDB4OGMzYjRlMGQsIDB4NWUyYzA2ZjksCi0JMHg2ZjQ0N2E4MiwgMHgyNWJkZWZkNywgMHg3ZTMwNjExZiwgMHgxNjUwYWEwMiwgMHhkZTYzMTY3MCwgMHg4ZDA3YWMzZiwKLQkweGIwNWIzY2YzLCAweDlmOWJhOGZlLCAweGJkNjAyYzkzLCAweDYwZmYzMWZiLCAweDBhMDNmMGFiLCAweGRjNThjZTMxLAotCTB4YTdlNGJjZmYsIDB4M2Q5OTI3M2QsIDB4ZDBkNTZjYTMsIDB4OWNiMzYzMDAsIDB4YTAyYTY3MjMsIDB4Mjk2ZmIzMmYsCi0JMHgwYmRmMmU3YiwgMHgzZDliMTk2NiwgMHhiM2QwZjMxMywgMHg5NzFiMmM5ZiwgMHg0YjU4ZjUwNywgMHhjYmZmN2YyNywKLQkweDUwMDU3MWIyLCAweGUyZWFlNjNmLCAweGNhMjRhYmVmLCAweGJlNWI1N2QzLCAweDdkYTIzMzNiLCAweDEzN2QzZDA2LAotCTB4YTRkNGE2NjAsIDB4NDA5Y2IzYTcsIDB4ZGZhMTMzY2YsIDB4MWY5OTcxN2QsIDB4NTU3YTFlZjMsIDB4YzIxNjY3OGUsCi0JMHg3MzI2NDM3NiwgMHg3ZWQ2MGRmYywgMHg3NWZhMWNmNywgMHgwZDlkNmQ0MywgMHhiN2JlNWZhOCwgMHg3NDk5Y2ZmNywKLQkweDIzZjMwZmRlLCAweDZiMWU5Y2YwLCAweGUxMWQyMmYyLCAweDE3MGJlNGQxLCAweGU2YjNhZmM5LCAweDc0ZmNlOTk5LAotCTB4ZWM1YzNiOTUsIDB4ZGYzNjNhMDQsIDB4MjNjZTkyMzksIDB4ZGUzMTUyM2UsIDB4MjZlMzdlODksIDB4NzBmM2I3OTEsCi0JMHgzZjIxYmU1ZiwgMHg5M2I1Nzg5NywgMHg0NGY5ZjdlZiwgMHgwZmQ5ZDc1ZSwgMHgyZWIyMzMwYSwgMHg3ZDZhMWZhMiwKLQkweDA2MjgyNzhiLCAweDVlOTQ3YWI4LCAweGY5ZWZiN2RhLCAweDMxZGJhZGY4LCAweDk5ZWIxMzBmLCAweGM0OTlkNjQ5LAotCTB4N2JlOTRiZjcsIDB4ZjMwNTNlNmIsIDB4MmQ5ZjEzNjYsIDB4Nzg4NjdjMTUsIDB4ZmFmMjFhNzMsIDB4OTUxMWNiOTcsCi0JMHhjNTViZGEwNywgMHg4YmQzMzdmYSwgMHhkNTIyOTdmMywgMHg5ZjUxODVmMiwgMHhiNGM3NGYxYywgMHhkM2M0NWNmMCwKLQkweGNmMjk5Y2U3LCAweDdhNDVjZTc1LCAweDY2NzVjZjVhLCAweGUwMzc0MzM5LCAweGU3ZTU3OTc3LCAweGZhZWU1MDBhLAotCTB4YWQ0YTY5Y2UsIDB4ZWIzZjQ4NzksIDB4ZjRhNjRmYjksIDB4MTlmOTkyZGEsIDB4Y2ZiOWM0NWIsIDB4NzEwZjcwNTQsCi0JMHg3MWMzNmY4NSwgMHhkZmUyN2U4YSwgMHg3ZmU0MTg3OSwgMHg4MDM1NTJlYywgMHhkNzYzYTRhOSwgMHhhNDI4MGM0ZSwKLQkweDQ1ZGU3ODlmLCAweDNjMmJlMGFkLCAweDFlZTc0ZWFlLCAweGNmYjQ2NmVlLCAweDgyOTBlM2RiLCAweGRjZjdkN2U4LAotCTB4NjBiYjI1ZTUsIDB4ZTRiOWQyZjAsIDB4MTdhNGY3NWYsIDB4YTkzZjMwYzYsIDB4ZGE3ZTZiZTcsIDB4NDI3YjA0MGYsCi0JMHhiMjFmMzk0MiwgMHhmMmVlMjMyNywgMHg2NDdlOWM5MCwgMHhjYzhmZDM5MSwgMHhiNzFlNjk3MiwgMHhiZGJmODJlNywKLQkweDhhZjNmYTkzLCAweGNmZDBjMGZlLCAweGVlOWY5YzRkLCAweGRmN2FmOTkxLCAweDM4MjdlZjUzLCAweDdlYzhiMDg2LAotCTB4NzcyZjFmYjQsIDB4ODUzYmFmYmMsIDB4MDNlODI4MWQsIDB4MTE4NmZmZjgsIDB4NjZjNzQwZmYsIDB4M2E0M2FmYWMsCi0JMHhjNzRhNGM4ZSwgMHhiNDc0NjRlNiwgMHhlNDlkYzc5ZSwgMHhmZDg3ZGYwYywgMHg0NDNmMmM5YywgMHhlN2FkNzJlNywKLQkweGM5MTI5OTcwLCAweGU5NTkzYzQzLCAweDNlYjRhYjViLCAweGI5ZDI1YjhjLCAweDNiMjdkZTdiLCAweGQ4ZGZhNzQ2LAotCTB4NGU4OGUzYjUsIDB4ODQzZTdhMDYsIDB4ZjNkZDhjNzAsIDB4ZDZlMTBkYmUsIDB4MjkxZGY4ZTksIDB4YzE0YzFkYjksCi0JMHg4ZmZiYWJjMCwgMHhkM2IwYmI5NywgMHhiZWQyNGUxNiwgMHhmNTI5NmQ2NCwgMHg4MmQ5ZjgwNywgMHhmM2YwMThlMywKLQkweDlmYmZkNjE0LCAweGUxNGYzZjFhLCAweDNmMDMyZmJjLCAweDdlMGU1ZWNmLCAweDRhYWYzZjc0LCAweGVlMTU3MWM4LAotCTB4ZmY5ZDAxNWIsIDB4NWI5ZjlmZTgsIDB4OTZjZWUzMDQsIDB4MTVkM2UyMzUsIDB4ZWY4YTY0ZGIsIDB4NzliOWZiNDIsCi0JMHg1ZmI5MDliOSwgMHgzZjZlYTUzMSwgMHhmMTVjNTc5ZSwgMHhiNGZjNDQ5OCwgMHg3ZmJmOWM1NCwgMHhiN2JmOWM0ZiwKLQkweDJmOTYwM2U2LCAweGJkOWU5MDhjLCAweDk0NjA1ZTc0LCAweDc2ZDU0NmY0LCAweDA5YzNmM2YzLCAweDNjYTAyYWZlLAotCTB4ODllZjcxNWYsIDB4MTU4MDVmN2UsIDB4MjEzNTY3ZmYsIDB4MzY1ZDRiZDcsIDB4ZmQwMmJkZTMsIDB4NjZjZWI3ZTQsCi0JMHg5YmNmMmJjYSwgMHhmOTBmZDdkMSwgMHhmZjliM2VmZCwgMHhmZGQzOGEwZCwgMHg2ZTMwY2VjYywgMHgyN2IyNTQxNCwKLQkweDEzMWYxMWM2LCAweDZmZDg5OWE1LCAweGJkMmY5MDk5LCAweGNkNmJhMWJmLCAweGM0NjE1ZTc2LCAweGI4YjAzZTdjLAotCTB4ZjAzZTdjYzUsIDB4ZjlmMzU2OGEsIDB4Y2M5YjExYzAsIDB4OGNhZjAzZTcsIDB4OGUwN2NmOWEsIDB4NTRkZTNlZGEsCi0JMHhjNmJiMTMxZiwgMHhmYjZjN2VkNCwgMHg1YzdkNTM3NCwgMHhmNmE2ZjNmYywgMHgzN2NmMGUxMywgMHhmOGVlYWZkNSwKLQkweGE0ZmRhOWIyLCAweGRlOWE3NzYzLCAweDM0YWNlOTRmLCAweDZhN2E5ZmJkLCAweDZkN2VhOWI1LCAweGRhOWFiZmVmLAotCTB4ZmQ3MTk3YzcsIDB4ZTQ3ZWEwNzUsIDB4ZmE5ZTYzNTQsIDB4Y2RhYTU1ODEsIDB4MGQ1N2NmOGIsIDB4OGM0Yjc5YjcsCi0JMHhmZTgzNzNjZiwgMHg4MzRiMmMxMiwgMHhkMmE3NjdlOCwgMHg1NzljMzNiMywgMHhmN2FlMzU0ZSwgMHhkMjZlY2M2NSwKLQkweGU2OWMzMzNmLCAweGUyMjVjN2JhLCAweDJmYzAwNTEwLCAweDJlMDFmYzQwLCAweGJjODE1Y2IzLCAweDFlNDBiYWU1LAotCTB4YjVhNmViZjIsIDB4ODNjNzg3MGMsIDB4NDBjYjBjNTYsIDB4Y2IzOTAyNzksIDB4OWM5ZTVkNzUsIDB4OTNiYjYzZTUsCi0JMHhiMWViZTMyYiwgMHgwMDNlZWM5ZSwgMHgyZWY5MTBiNSwgMHhiMjliZjk0MiwgMHhlMzJmZjczOCwgMHhmZTMyMTczZCwKLQkweGMyYTU0NDNmLCAweDVlNGExMTIyLCAweDdjODYwMTY3LCAweGY1Zjc1ZDZmLCAweDhmOGFkZWY1LCAweDI3Yzc4YjgwLAotCTB4MDRmMGZlMWQsIDB4ZGMzZjJjYzUsIDB4NGM1NWYwZGYsIDB4OTJmODBjNTAsIDB4NzZhNjc1YmQsIDB4NDk5Y2ZmMGUsCi0JMHhlZjg5ZjdjNiwgMHhkZmNjOTM0MiwgMHhhNWQ1MzQyZCwgMHg3ZjI5NzNlNSwgMHg3NjVjMTUyOCwgMHg0ZjUxOTJkZiwKLQkweGU3YjM3ZTgwLCAweDdmNTJhNjJkLCAweDk2ZDBiY2RlLCAweDA2ZjA1ZjM0LCAweGMzZjQ2N2Q3LCAweGM5ZmYzY2EzLAotCTB4ODBkZGRmNjAsIDB4ZmQ5MzM5NzQsIDB4Zjc5ODQzZWEsIDB4MmY1MTcyYjYsIDB4MGU3OWUzZjksIDB4ZDQ0ODdlYjMsCi0JMHgzYTJmM2RmOSwgMHhiM2Q2OGYzYywgMHhlYmRlYjhkMSwgMHg0MTk2ZGFlNywgMHg5YTZkZDYyMSwgMHhmM2UzYjJlZiwKLQkweDYxYWYzMTczLCAweGZkM2YwYTcwLCAweGM3OWYzMTAxLCAweDk2YTMyM2ViLCAweGE3MzA2MzIyLCAweDQxNzkzY2U5LAotCTB4ZGEzNjc2YmMsIDB4OWU0NTQzNjEsIDB4ZTRiNjQzZjYsIDB4MmU1NTUzZjksIDB4NDQwY2FlYmUsIDB4ODJmNjhkNDUsCi0JMHhjMTNlZDJhNiwgMHg3OWRmZjI5OSwgMHg1NWFiZjUzMCwgMHhmZjIxNTcwZSwgMHhhM2I2MzlkZSwgMHgwZWEzOWY5NCwKLQkweDNmN2U3OGY4LCAweDc3ZDc1Yjg3LCAweDIxZTg1YTA1LCAweDYwMDU1ZmQ0LCAweGZiMGJmOWI2LCAweDUxNzAzM2MzLAotCTB4YmMyMTRlNjgsIDB4MDViMmNhNmYsIDB4NGFmN2FhMzQsIDB4ZWJmOGRlNzQsIDB4YmVkMDMzMjAsIDB4YzEzMjZmZTksCi0JMHgwYTYwNzRkNywgMHg1YWE5MTVlNSwgMHgyNzQ2NDU5OCwgMHg3ZTQ0YzllNiwgMHhmMGVmYmU4MiwgMHhlNDRkZjY2MSwKLQkweGQ1NWQzNmJmLCAweDkxODhkZTc3LCAweDNhODVhYjNmLCAweDM3MGZkZmIwLCAweGE2ZGM2OWRhLCAweDdkZTk5MmU5LAotCTB4ZWFiYWQ2ODEsIDB4ZGU1MWMwMTAsIDB4NGJmMTRlOTYsIDB4ZTQwZGQzNjUsIDB4MGUzZWE5N2YsIDB4MTJlM2QzNGYsCi0JMHgzYzExMmMxYiwgMHhlMWVlY2UzYywgMHg3YzNjMDBmOCwgMHgyNjcwZjEwNSwgMHg0ZDkxZjg1OCwgMHhhZmJjMzQ5ZiwKLQkweGJjZTk1MGM5LCAweDcxMTQ5MGU4LCAweGZjM2E2ZDhlLCAweDNhMjY5MWMxLCAweGMzMzA4ZGU3LCAweGY2ZmM2ZjJkLAotCTB4M2Y5ODQzYWEsIDB4ODA3YTdjZjIsIDB4MmUzZWE0YTQsIDB4Nzc5ZTZhZTgsIDB4MWJmY2Y2NzMsIDB4MWFlZDA0YmYsCi0JMHgxZTE5OTM1ZiwgMHhjMjc3ZjBmOSwgMHg5MWYzNGYxYSwgMHg3ODI0ZDFhMywgMHhmMDA2ZTlkNywgMHg5NTdlNDM2ZiwKLQkweGY5YTZjZDM3LCAweDJmN2EwYTE2LCAweDNhZTM3YTA3LCAweGU2ODViM2UzLCAweDZkNzNmZDEwLCAweDlkNmJlNzBjLAotCTB4MDdhMTBlYzcsIDB4ODU3OTcxOWUsIDB4Zjk3Mzk2ZmMsIDB4ZjUxZDJkZjMsIDB4NzNkMjA0YzQsIDB4NzNmZmQ4NmQsCi0JMHg3M2Y2OTRhZSwgMHhkZDg5MmI5YiwgMHg1MTdiYTk3NSwgMHgxYzc2MTdhYSwgMHhjYTBlNTJjMiwgMHhkNDI3ZWUwMSwKLQkweGNmZGEzNzBkLCAweGUyN2YxZmEwLCAweDcyY2RmODMyLCAweGIwNGJkN2M2LCAweGUxZDk0YmRmLCAweDY1YTA0YWI1LAotCTB4ZWRhNWUxNzgsIDB4OTBjZmI0MzQsIDB4MGNmYjc1MGYsIDB4ZTcxNDc5ZTYsIDB4OWU4YjBiZjksIDB4YTNmNWU4MzcsCi0JMHg0NDk5ZTZjOSwgMHhlZDhlYmZhZiwgMHg5ZTM5N2U0ZSwgMHhiZDAyN2VkNCwgMHg4ZTY0NzY0ZSwgMHg2NWZmNWM5YSwKLQkweGQ0N2E3MWE0LCAweGY5NDY1NTdhLCAweDk3ZjYyOTg1LCAweGVkYzk2OTZjLCAweGRmZWI1NGM2LCAweGEyOTBmY2E1LAotCTB4YzA3ZWU2ODEsIDB4ODQ3ZjIxNmUsIDB4ZGZiNGFiOTUsIDB4Y2Q4M2Y2NzUsIDB4M2NjNzBlZjcsIDB4ZjI4OGFkMjEsCi0JMHg5M2Y1NTM4MywgMHgwNGM5NzZiZiwgMHgyMmJmY2Y4MSwgMHg5ZGZjNzQxZSwgMHhmMDE1ZTBiMywgMHhlYmE0ZDdmOSwKLQkweGQzZTAzNTY0LCAweDRiMjdjMjY2LCAweGY0N2IwY2JiLCAweDMyYmI5ZmQzLCAweDE2ZWExNzlmLCAweGUwNzU4Nzc4LAotCTB4MTYwNzVhMmQsIDB4ZjE4YTU5YmMsIDB4N2YzNzk1OTcsIDB4YTdjMGViNDQsIDB4MzlhMTY3MWUsIDB4MGZjN2EwOGUsCi0JMHgyMWRmOWM2MCwgMHhmYzE3YmE5ZSwgMHgzYjdkYzQ0ZCwgMHhmOGQ5NWUyOSwgMHgxN2JhMDhmYywgMHhhZWJhNjZhZiwKLQkweDc0OWNlYTRmLCAweDExNzA3MmVlLCAweDJlY2NlN2QxLCAweDNjZTExMDQ3LCAweDY2ZTNjNTkzLCAweDNhNGQ3NjY3LAotCTB4Zjc5OWYxODQsIDB4MTk2NzBmZWEsIDB4ZDllNjdjZTksIDB4ZTg3NmE1YTMsIDB4YTNjZWNjZWYsIDB4ZjdlOTBhYTUsCi0JMHg5ZGRlZTlhOCwgMHgyYWJmMGI5YSwgMHgzZjVlN2Y0NSwgMHg3N2M3ZDBkZiwgMHhkM2ViZTRjZSwgMHgzZjNmODI3NSwKLQkweDVlMzAxZTI5LCAweDBhNTFmYjRmLCAweGJiZWQxODdiLCAweDliNTRiYzNlLCAweDQ5OWMxNWNmLCAweGYxMTRiMzdmLAotCTB4MGViOTc4MDAsIDB4NDNkM2FlZTksIDB4MzMyYjg3OGYsIDB4ZGM2MDY2M2EsIDB4ZmMwYmY3YjYsIDB4MmU4ZGE5M2UsCi0JMHhlMzUyYTcxZSwgMHhjZDc2OTg3NSwgMHhlMzViODc5YywgMHhjNDc1YTY1OCwgMHgzYjUwZWYyOCwgMHhkMmM3MTFkNiwKLQkweGM0MWJkOWQzLCAweDc2NzZhN2VkLCAweDVmYjFlN2U3LCAweDdlZWYyOWVmLCAweDA2ZjU2N2FjLCAweGQwYzc4NzNlLAotCTB4MDZhZmU3NjUsIDB4YmI3YzAzYmQsIDB4NzFmYWRlNzEsIDB4ZjdlOTRmZTgsIDB4ZDk4YWY5NmIsIDB4ZTBiMWMyYzgsCi0JMHhlMjVlNjFiZiwgMHgyZGNiOGE1OCwgMHhlNjA3ZWZjMCwgMHg3MWM0MWVkYSwgMHhmMzczMjVhNSwgMHg2YzVjODE5NiwKLQkweDg3OTRhOGYyLCAweDFjMDhjY2E5LCAweGYzN2MyM2Y2LCAweGVjZWY4MjE0LCAweDE3ZGY5OTYxLCAweDg1YjljZjMyLAotCTB4ZmM2N2JmOWYsIDB4ZmQ5YjkyMWUsIDB4YTdkNGJlYjQsIDB4YzNlM2U3ZTksIDB4MmFmZWI4ODUsIDB4MWE1MTZjYWMsCi0JMHg4NWE3MDdkNCwgMHhkNzMyYzBlZiwgMHgxMGZjMzFkNiwgMHhmNjNhZTc3YywgMHg2MDljMDI5YiwgMHhkMGJmYzFlOSwKLQkweGNhYmIzYWJkLCAweDNmNzFmYjQyLCAweGU0Yjc3N2JhLCAweGM3ZmFjMmRmLCAweDdlODVlYmZkLCAweDQ4ZWZjYmQwLAotCTB4ZWYzMWM3NzUsIDB4ZWJiZWZlYWMsIDB4ZWM3YzYxNjYsIDB4YmEzYWFlM2IsIDB4ODJmZTA1ZjcsIDB4ZTdmNDFmNGUsCi0JMHgzMmNhZGYwYSwgMHg2YTY5MWM2MSwgMHhhMTZiOWNmMywgMHhlM2Y3ODc2ZSwgMHhjZDY5ZmJmMCwgMHg1NzdlZDA0ZCwKLQkweGFmMWYzODY2LCAweDUzNGI3MWMyLCAweGMxMGYwZjlhLCAweGI1YmNhMzNhLCAweGNkMjliNGZhLCAweGZlNjYzMDExLAotCTB4ZTNjYmNkMzUsIDB4MTBiODVhZWQsIDB4Zjc1N2Q0ZTksIDB4YTg2ZGRkNDIsIDB4ODU3NTJkM2IsIDB4ZDU3OWY1ZDcsCi0JMHhlNTBiZmMxYywgMHhjM2RjYWU5NSwgMHhkOWNhMmRlZiwgMHgxYmRmOGYzMywgMHhlZThmM2VkNywgMHgxMzRlNmI4ZCwKLQkweDlhNjM0NDdhLCAweDU4NTYzY2YxLCAweGY4OGJkZjBlLCAweDE5NWU5MmVhLCAweDhmNDhlNWNlLCAweDJmNzhhNjdiLAotCTB4NTljMzllZTIsIDB4MDZlM2M1MWQsIDB4NjJlZWMxZTEsIDB4YmM3OGNiYjQsIDB4NTJmNTgwYjMsIDB4OGFlYmM3YTksCi0JMHg2MWNhODA1OCwgMHg0OGU1NDQyYywgMHg1NWU1NGFkNiwgMHg2OGU1NDYyYywgMHgwOTY1NDFkNiwgMHhjMDMyYTVlYiwKLQkweGUzOTYzMmJjLCAweDZjY2E4MDU5LCAweDU5ZDFkZDViLCAweDY2N2Y0ZmE4LCAweDdjM2E3ZDI3LCAweDgzMDNhYWZiLAotCTB4NDRkZTkxMTgsIDB4Yzc4ZDY2YjcsIDB4NjU2YmQ2ZTksIDB4ZGNiYzFhZDksIDB4M2Y1MGY4MjgsIDB4MzQ4ZDU1NTcsCi0JMHhkYjYyYmUwMywgMHhlODdlYzhmMywgMHhkZWY2MzIxMiwgMHhmNzA0NWIyNiwgMHhmOWEzZDk2MywgMHg5YzVhYmNmNCwKLQkweDdlM2VhZTQ3LCAweGY3Y2RlYzgwLCAweDYwZjNjOTgyLCAweGJiOGJjMDVmLCAweDk2M2VkMzNlLCAweDNlZDY3ZjU5LAotCTB4NDFiZTExYWEsIDB4Mzk0MDVmN2UsIDB4NDE3MDg5NTksIDB4YTBlY2U2ZGQsIDB4NzVmNjk3NzMsIDB4M2VlOTA3YjEsCi0JMHhiNGVjNjdiOCwgMHgxODU1NWFiZiwgMHhiZDQzYjMyYSwgMHhhMDYxNzc2YSwgMHg3YTg3MjBjMSwgMHg2NjU1NzAzZSwKLQkweDk2YmM3NzJjLCAweGY1ODg4ZjM4LCAweGRmODI1YTcxLCAweDI4NmZiNjU3LCAweDc3ZmI3ZGMwLCAweGY1YTcxZmY3LAotCTB4ODVlOTg3ZmUsIDB4YjY5YTlmMzQsIDB4NGRkODZhYTMsIDB4Y2EyYTdlZmIsIDB4N2QzOWJiY2QsIDB4OTdkOTNhZjYsCi0JMHgwNjQwYWVjZCwgMHhmZGU5Nzc5ZSwgMHg0YjZmYmYzOSwgMHg5NGY3ZGZjNywgMHhkZjcxOTc1ZSwgMHgyODNkNzBlNCwKLQkweDVlZTliMDQyLCAweGY5NTFmN2E5LCAweDk1M2Y3YThiLCAweGIyZjdhYjNmLCAweDQ3MDBmODIwLCAweDA0ZGE5ZGVjLAotCTB4MzBjZTRmOWMsIDB4N2JmYmNhMmYsIDB4NDMyYmQ4ZGUsIDB4N2NiZTYyMjcsIDB4ZTYwMWJmOTEsIDB4Y2VmZDk4ZDcsCi0JMHhkZWQwMTNmZCwgMHg3NDAxYzgwYywgMHg3NWVlZWMwYiwgMHhmM2I0MjUxMywgMHhjZjI5ZjM3YywgMHhiYzZkMWVlNSwKLQkweDRmMDA4ZmYzLCAweGU2NzAxMmEzLCAweDZiMmZiOGMwLCAweGEwMmJiNTNiLCAweDI0ZmNmZWJjLCAweGU1ZmZjZTI3LAotCTB4MGZjZDM2ZWMsIDB4ZGRjNjFiZjUsIDB4MjQ3ZGM1ZWMsIDB4MDJlMzZmZTgsIDB4ZmEyZWNmZWEsIDB4ZjZjNGVmMWIsCi0JMHg1YTNmNjJmNywgMHhhMmZkOWZhMiwgMHg2NzdiYmQ3ZSwgMHg1NDNmYmUzNiwgMHhlYmVlMDhjZiwgMHhiMWIyZGE3MywKLQkweGJkMWY3ZmJmLCAweDEzZjE5NWVjLCAweGJhNDc3ZWU5LCAweDE3Y2FjYTJmLCAweDY2Y2I5ZmQ3LCAweGU2Y2JiMDQxLAotCTB4NDE2MDJiOWUsIDB4ZDM5M2M3YTAsIDB4Zjk0MmFlZWIsIDB4ZDFiZmQzNTcsIDB4YTBmZDA0ZWMsIDB4YTI1NWQ2MTQsCi0JMHhiN2E2ZjBiZSwgMHgxZjQxM2IzNCwgMHg5ZDAxYjA2YywgMHhhNTlmNTRiYywgMHhjYzcwMDk1ZCwgMHhiMTgxZmFlNCwKLQkweGE0MzJlNjk2LCAweGM2MmJiMDNiLCAweGFlOGZlMWUzLCAweGZhODIzOTliLCAweDdlZmUxYWUzLCAweGQ3OTE2MGU2LAotCTB4ZjdlM2VkMDAsIDB4ZWQwYjMxYmQsIDB4OTE4YTZhYjIsIDB4NjZlNmI2MzAsIDB4YTQ3OWY3NDYsIDB4Y2UyYTM3YjIsCi0JMHhjMWE4YjNhNSwgMHhiYTYxZmJhZSwgMHg0MmE3ZTQ5ZiwgMHg0YzNlZDA4OSwgMHhiZDBmMzljNSwgMHg1Y2ZlZmNiZiwKLQkweGZkODg3M2E2LCAweGZkZThkM2ZiLCAweDdlNzRhYmUxLCAweDY3OWM1MjBhLCAweGRmMjI3M2NkLCAweDg4MWMxNWMzLAotCTB4ZDc2M2JlZWQsIDB4YjhmNjBmZTcsIDB4NTdkNWYxMTMsIDB4Y2MzZTI4OGYsIDB4ZmZlN2QwNDMsIDB4NDlmZmNkMjgsCi0JMHhlZjFlZjEzNSwgMHhmN2Q4MWNmNSwgMHg3ZmQxMDU5ZSwgMHhlYTI2OTIzZSwgMHhiNzkyMjc5MSwgMHgyZmI0YjM0ZiwKLQkweDM0Y2ZlYmQyLCAweDFmZDY5Y2NmLCAweDEyYjhlZjllLCAweDU3YjQyNzc1LCAweGVhZmEzYmNlLCAweDliMDZkZjA4LAotCTB4N2QyY2JmYTUsIDB4ZmM2OWU3ZmMsIDB4YjQ1OTQyYWEsIDB4NTA1MmY3ZGYsIDB4NzIzYmQwMzEsIDB4YWJlZjE5YTgsCi0JMHg3OGVmNDU0ZCwgMHg5YjliMmZkYSwgMHhhZTIzZmJlMCwgMHg1ZmFkMTk1MCwgMHhiZjVhMzMzNywgMHgwNjAyZWU1MCwKLQkweGUzNGYxODNkLCAweGI5YzU1NWZlLCAweDI0N2EyNjUxLCAweDdhNjI1MGU4LCAweGQyZTQxMjdlLCAweDdjYmI0ZmI4LAotCTB4ZmU3NDVkYzcsIDB4ZTdlNjllMjQsIDB4M2YwOGIwZmQsIDB4YjE2OGY1NTcsIDB4ZmZmNjdmNjksIDB4ZTE2OWYxYzMsCi0JMHhjNzAxNGIyOCwgMHgxYzMzYmZjYywgMHgzZmU0OWE1NywgMHhkMzY4YzcwMSwgMHgzODdlZmZmMywgMHg2MzgwYTQ2NiwKLQkweDFjMTUzZmY2LCAweDJmNDU3YjU2LCAweDJiZGEyZmZmLCAweGNhYmRhMzU3LCAweDlkNmM0MWUzLCAweGY3ZmRjZThkLAotCTB4ZTUyYTJhNjQsIDB4Yzk5MzY5ZWYsIDB4ZTE5NTIwNGUsIDB4ZGY2OGVlYTcsIDB4Y2Q3NzlmMmYsIDB4OGIxYzdiZmMsCi0JMHg2MTVmOWRiMSwgMHhkNDc4Y2EyZCwgMHgxMTY3MTE1NywgMHg4NTdmODdlZSwgMHgwZmNmMDNmNywgMHg4NjgzYTAyYiwKLQkweDFmNjkzYTY0LCAweDU0MzRiZmRiLCAweGZlMDVmYjg1LCAweDU0MzVlNTg1LCAweDU0NmVlYjdhLCAweDU4N2E1ZjcwLAotCTB4ZWZiNDM4ZWYsIDB4NGZkOTZiMzYsIDB4ZGU5MzMzMzcsIDB4MmZiYWQwOGIsIDB4YjZiYjIyYWQsIDB4OWIyNzliZTMsCi0JMHg2MDc4ZGY3MSwgMHg2OGMzZGQ1YSwgMHg5MzkxNGIwNywgMHgyNGE3ODdjZCwgMHhkNmY1Y2Y3YiwgMHhkMTRmZDMyZiwKLQkweGNlOWQxNGJhLCAweDI5M2Y0MmFlLCAweDBlYzY4YWVhLCAweGI1OWEzZDIwLCAweGYwYTNkMjAwLCAweDIyOTZkMTliLAotCTB4ZGFmNzJiYTgsIDB4YWYwMDBkMDIsIDB4YmVkZDE5OTIsIDB4MWU1N2UwMDUsIDB4NGQ3NjRlMTgsIDB4YjYxZmY1MTQsCi0JMHg2ZTg5NDA3ZiwgMHhmYTlkZmNjMSwgMHgxYmI3YzUwMCwgMHhhNWI0N2Q4NSwgMHhmMzE3YWU2OSwgMHgzMDk5ZWQ5OCwKLQkweDdhZTUyMDRiLCAweGQwOTdkZDdiLCAweDc1MzRkNzVlLCAweGFlMGE3M2JkLCAweDAxOTY4MTA3LCAweDAxZjc1ZTVlLAotCTB4YjExNjRmNWMsIDB4NzhhNjY3MjIsIDB4YjQ2ZmViMGYsIDB4MWFmMjBkODEsIDB4NmZlOTdlZWEsIDB4YmFiNzlmMzIsCi0JMHhkNzBkMzgzZSwgMHg4Yzk1ZDVmOSwgMHhmNzA4N2Y3ZiwgMHhkMmNjOWU4OSwgMHhmYmRmYzJmMSwgMHg0ZjVjNzUwZCwKLQkweDdkNDQ4Njk0LCAweGViN2JjYzI2LCAweGY3ZGY1YzYzLCAweGQxZWJhYmE2LCAweDQ0Zjk4N2RlLCAweGMzMWI4ZWM4LAotCTB4NjMwZTkzZTcsIDB4ZjRmZTAwN2IsIDB4YmViNDQ1NzEsIDB4ZjE3ZDYxNDYsIDB4MGE3MWZiZTAsIDB4ZjdkMmY3OWQsCi0JMHg2YzYzOWM4MywgMHhlZDg0MWZiNCwgMHhjMmVhN2VlOSwgMHg3NDJmZGEyMiwgMHgzODgxNjNjZSwgMHg2OWU3MDNlNiwKLQkweDA5NTE3ZjdjLCAweDNiM2NjNGNlLCAweDA0YmYxZjc3LCAweDhhYTZjZTI5LCAweGEyNmQxMmZkLCAweGFkMjA1ZjM5LAotCTB4OTliNDViZTksIDB4ZmNkYTM2OWUsIDB4NWNjYzM5ZGMsIDB4OWRjMGIwNzcsIDB4NjBlYzhmNzQsIDB4MjY4MWJlNGIsCi0JMHhiMDA2ODdmNiwgMHgxNDU3ZTg0MSwgMHg2YzM2MjJkYiwgMHhjYTg1ZGEwNywgMHg3NmRmNzg1MSwgMHhlYzgxMWUzMSwKLQkweDBjNThmYWE0LCAweDMxZTMxNjkxLCAweDBjMWQzZjJiLCAweDMyODJjMDliLCAweDY0ODZhMzhmLCAweDY5OGUzYmY0LAotCTB4MDc5NDdjZTEsIDB4NjZlMjI2OWYsIDB4OGRiZjc4ODMsIDB4MzZmZjYxYTEsIDB4OGZmMTRmY2IsIDB4ZjVlZmI0N2MsCi0JMHhiMzc5YzZmYSwgMHg0YTkxZmUyOSwgMHg4ODlhMjJiZSwgMHhlYzM2ZGVlNywgMHhjZTlhZjdhMiwgMHgxOTEwMDczOCwKLQkweGM2OGU2ZmY0LCAweDZmNmI4MWYzLCAweGQ3NzlmN2UyLCAweDk0N2VlMWVlLCAweGU4YjI3ZWZlLCAweDljNDUzNmI3LAotCTB4MzI3YWU0MTMsIDB4ZDYzZGY5YzIsIDB4NDg1ZWRiMzksIDB4MGU3Y2FjZjcsIDB4NzVmMzU2ZTksIDB4NmI0ZmMzMWIsCi0JMHhkZmI5YzdlMiwgMHg1M2I3YjE2NiwgMHgxNThkYTFlNSwgMHg1ZjlmNGRmZSwgMHhmMjE4ZmMyMywgMHhjMmNlOTAyZCwKLQkweGQyZWE1OTdmLCAweDRmYmU2ZWU5LCAweGEyNDdiZjQyLCAweDRmNGRjODQ3LCAweGE4YzQ0YWI5LCAweGVhMDk4MzQ1LAotCTB4ZTk4NTM3MzksIDB4MzE3MjgyMWUsIDB4NjU0ZGYyOWYsIDB4MmMxZmU4YjksIDB4ODIyNWZmZGQsIDB4NzljNmQ5NzMsCi0JMHg1ZTRiZGUyYSwgMHhlMTMxNzFiZSwgMHg1MmViYzc0NSwgMHhhN2YwN2Y4YiwgMHg4ZDE3MDlkNiwgMHhiNGY2ZTlhNywKLQkweGZlZTgxZmVlLCAweDQ4NGZkNTgwLCAweDQ3ZTdmZGY1LCAweGNjM2EyN2VlLCAweDNlZDE5NWY2LCAweDNjMWFmZmVmLAotCTB4ZTA3NTg2Y2YsIDB4NjdkZTIwYjYsIDB4NDczZmZiYTUsIDB4Zjk4ZWVjZWMsIDB4NzM2NTVjZjgsIDB4MmVjM2Y5ZjAsCi0JMHg1NDU2MGY3ZSwgMHhkODc1ODNkYywgMHhkZjg1OWM1ZiwgMHg3ZjNlMjljZCwgMHgzYjJmOTYyNSwgMHhlZGVhMWE2MywKLQkweDdhM2UzZjk3LCAweDRhMGZmOTAzLCAweDhkM2NjMzRjLCAweGZmZjcwYTMzLCAweGU3NjMzYWY0LCAweDBiZjM4YTY0LAotCTB4N2VlZjVmYmMsIDB4Yjg2N2VlOTUsIDB4NzRmN2YwYmUsIDB4ZmRjNmJkM2UsIDB4M2Y2MzlkMmEsIDB4M2NhNzY2ZDMsCi0JMHhiMTVkZWJiYiwgMHgxZGZkZTM2YywgMHhjZGVlMTdkNywgMHg3NDdlMThiZSwgMHg4MDg4ZTFmZiwgMHg3YmQxNzBmNywKLQkweDU3MWE2MTA1LCAweGI3MDQ3M2U0LCAweDUzZDIxNzRhLCAweGU3Y2Q2ZjdmLCAweDNlOThlY2Q4LCAweGE2NjllNTEzLAotCTB4MmZmOWU5MjYsIDB4Y2Q5N2M4OGQsIDB4ZmM5Mzg3ZjMsIDB4ZTg5YmNmNjQsIDB4ZjM5YmZkZTQsIDB4Yzc5MWIyNGQsCi0JMHg0N2NmZWVhZSwgMHhlZjU5ZmYzYSwgMHhmMTIzNTkyNSwgMHhlMGE5ZWY3MywgMHgxOWI0MDVhYSwgMHgzZGM0ZDFkNywKLQkweGVmM2QyYTI1LCAweDBlODZmMTE2LCAweDU0ZjZmYjFmLCAweGFjNzk5NzkwLCAweDc1ZmI0ZWNlLCAweGZkMTc3ZWUyLAotCTB4NDE3OTk3NWUsIDB4MjI0MmZkY2IsIDB4ZDYyNDJhZmYsIDB4NWU0NDM3YzMsIDB4YTdlNjNjZDUsIDB4Mzc2ODE3ZWYsCi0JMHg3NWJmNTFkOSwgMHg2ZTYwZmI4OCwgMHhmMWJiNjE2MiwgMHg0MjVlYTY3YywgMHhiNmJkMjZiZiwgMHg3ZWI5OGU2MCwKLQkweGI3NWNjODczLCAweGU3YThhM2RlLCAweGRlYjRmY2NkLCAweDg5ZWYxNTNmLCAweDk5OWRmYmQzLCAweGQzZWMzZjQyLAotCTB4YjAzYzVkM2UsIDB4Njc1MDdlMmYsIDB4NzFlODFmOGUsIDB4NDNjYzFhYmYsIDB4MWUxOGZkYTYsIDB4ZTRlNTliZjcsCi0JMHhiYjhmNGZlMywgMHg1NmEzN2Y2OCwgMHgxNmUzMzc1MywgMHhjNWIzZWEwYywgMHhjNjk2N2NmMCwgMHg4YmM2MGRmNSwKLQkweDU5YTI5ZWYwLCAweDZmMWY3ZThhLCAweDgwZTdiZjU0LCAweGY5MDljYmJlLCAweDBkZGM2MzM2LCAweDVlZTkzMGYzLAotCTB4ZGYxZTcwYWIsIDB4YTA3MjExNTcsIDB4MGVjZTE5YzcsIDB4NWU2NDY3ZjMsIDB4NGRiNWJmODQsIDB4YmE5ZWU5YjIsCi0JMHgxM2I4OTVmYiwgMHgwMGZlZTBmOSwgMHhmMDRhYzNjZiwgMHg2ZjE0ZDQ3MSwgMHg0OWE5MzZkNSwgMHhlYmViYjdlZiwKLQkweDllMGFmNDA3LCAweDNlZTA3MjRmLCAweDAxZjdkMDJmLCAweGM2MzVlODI1LCAweDg4N2IzNDIzLCAweGY0Zjc3NmVhLAotCTB4ZjJmMjNmMGUsIDB4ZTM2NjFiMDMsIDB4OTg4ZDEwNTUsIDB4Y2E3NjBjMWYsIDB4Njk1N2RhM2IsIDB4MDNkYjc2N2QsCi0JMHg2MjFlZjE4NywgMHhjN2U2ZGJiNywgMHhiMzQxYjhmNSwgMHhhMzU3YmVkMSwgMHhlZmViNDljZiwgMHg4YmRhYTk3YSwKLQkweGViZjdhNGZjLCAweGFlMDg1NGVlLCAweDA2NTE1YWIzLCAweGFiZmYwOGJiLCAweGRhMzM0ZmUwLCAweDg3ZGYzMWFmLAotCTB4OWUzN2RmZjUsIDB4ZGRmYWVkNDYsIDB4MGE3MDc1YmYsIDB4MTMxZDU5YzUsIDB4MTdiYzAxNmQsIDB4YjFhYzFkNWMsCi0JMHhjZmM5MjQzZiwgMHg5MzZmMWJlYywgMHg1NDlmYjQ5MiwgMHg3NzQ5NGZmOCwgMHhmNTA3YTc3YiwgMHg3Yzk2Yjc0MywKLQkweDJkYzhiYTNmLCAweDNmYzJmYjg5LCAweGIyMmMzY2E1LCAweDVmMzNjM2M0LCAweGVmYzcxZTFmLCAweDhhMWJjZWE1LAotCTB4OGEzZTQ5MGIsIDB4MmI2ZjIwZGMsIDB4Y2NmNTlkYzcsIDB4ZTQ3YzkzZjAsIDB4MmUxYzdjZjIsIDB4YWJkYThkYjcsCi0JMHg2YzM3OWU0ZSwgMHgxNTJkYTdiZSwgMHg0OTc4ZWEzZiwgMHhjOGU1MDc4NSwgMHgzN2U3OGM1ZCwgMHg3ZjcxOTk4NiwKLQkweDQzYzUyZGNlLCAweDRlMzJkNzk0LCAweGI4YWZiYTQ5LCAweDUxYTFlMDU2LCAweGNhYmYxMDA5LCAweGI4OWM4NmQ3LAotCTB4NGY2NDM0MGUsIDB4N2ZmZWUyNzcsIDB4MjhjZmUyYjMsIDB4ODhmMGZiNDQsIDB4ZDY2ZTMwY2MsIDB4OGRjYjM1ZTQsCi0JMHhmYjg4YjY1ZSwgMHg2ZGJhZTc0NSwgMHg3NTU5ZWY0OSwgMHhlZWZmOTJkYSwgMHhiZTZlNWRjZSwgMHg5ZmVjYjQ0ZSwKLQkweDUyZGVlNzQyLCAweGQ0NjgwOWYxLCAweGE1YTVkOTEwLCAweGYzZWYxNzhhLCAweDVlMWNlZDk2LCAweDA0ZmM4YTU3LAotCTB4ZmM1NGRmYmQsIDB4MTc3ZWVmNzEsIDB4NjE5OTNkZmYsIDB4NjU5ZjNhNGUsIDB4OWM0OWFmMWQsIDB4NzgwMjZiYzMsCi0JMHgxYTZkY2VkMCwgMHg2Yzc4NDFkYywgMHhkMTc4YTg5YSwgMHhkM2Y5NzY4ZSwgMHg1ZWQwZDM5OCwgMHhlZjQ4OWNjOSwKLQkweDc4ZDk2YWNmLCAweGE1MzU5MDI2LCAweDRmMWQzYmUwLCAweDlmNmRiOWQ3LCAweDE2YzJmZjhkLCAweDBkZjljYmZlLAotCTB4ZmMwZGNiYzUsIDB4ZmYxOTNhYjcsIDB4OTgzYzg3NWQsIDB4ZGUzN2UxYzMsIDB4ZjI2NGE5YWIsIDB4YmMyYjNmZmQsCi0JMHhkZTNlN2U3YSwgMHg5ZmNjNmU4NywgMHg4NDVmMDUyYSwgMHgxYzhlOGRjNywgMHhlYzBjM2U5YSwgMHgzMDNhYmVkZCwKLQkweDg2ZDc4YzM4LCAweDczZmI4ZTdhLCAweGQxMzNhNzcxLCAweDY0N2RkMWJlLCAweDc1NDI5Mzc2LCAweGRmMDdkZjNhLAotCTB4NmNmN2YxMDUsIDB4MzlmZGM0ZGEsIDB4YzFmM2E4MzUsIDB4NDViZWFhOGYsIDB4OWY1ODVlNjMsIDB4YmIyY2NhZWYsCi0JMHhkYTUxZTcxNywgMHhhYjlmODA3MSwgMHhmOWExY2I2OSwgMHhhZGVmOGI1NywgMHg5YzNkYzZmMCwgMHgyZjFlZTM5ZiwKLQkweDgyYzcxOTk1LCAweDc3ZGZjMDNmLCAweGYzNDhlYjY4LCAweDJkYjcxYzYzLCAweGQ2MzlkYjhiLCAweGY1YmJjZWVmLAotCTB4YjE1Njg3M2MsIDB4ZmI0OWQxZGYsIDB4ZjgzMzM5MTIsIDB4M2JiYmQ0N2EsIDB4ZmVhM2ZjOWQsIDB4ZjdlMDY5ZjgsCi0JMHg4ZGVjNTg2OSwgMHg5NDM2N2JiZSwgMHhkNTFkZDkzOCwgMHhjN2QwZWVjMiwgMHg4MmM0NWQyZiwgMHgyZjRiYmJmOCwKLQkweDI3MTZiMWE1LCAweDg0M2I4N2Q4LCAweDJkZjYzMjFjLCAweDc4MGE1ZmIxLCAweDdjNmZiODA0LCAweDNmZWQxNDcxLAotCTB4MDRiZGZkZTksIDB4Y2ZiNjEyY2IsIDB4OTEyY2VkY2QsIDB4M2ZjMGNmZTQsIDB4NmZiYTY2MzEsIDB4MzlkOWM2YWQsCi0JMHhiZTQ3ZjUxYywgMHg0NmVkZGUxYywgMHg2NzU4ZTMzZiwgMHg1ZWRiZDYyZSwgMHhlMGY2NGQzZCwgMHg3M2YwZjBhNSwKLQkweDUxYzJiZjgxLCAweDU3MWU3ZGJhLCAweDM1ZDY3MThkLCAweGY0NWQ5NWNmLCAweGM2MzU1ZDdjLCAweDUwZmUwYzQzLAotCTB4ZTliMzZmMDIsIDB4YTE3ZWJmNzksIDB4MWZlOGJmM2YsIDB4OGQzOTJiZTMsIDB4YTA5YWU5YzksIDB4NGM4YjNlNGYsCi0JMHgwYTdkMThiOCwgMHgyNWQyM2RlOCwgMHgxZmQzOWEzYSwgMHhkZTYwZjlmNywgMHg2MDdmZDc2NCwgMHgwOWVmMjdkMSwKLQkweDlmNGZmZDdhLCAweGFlMjYzNjZmLCAweDQwZTUzZjAxLCAweGYxODhlNzg5LCAweDlmYmM1YmRlLCAweDZmYzc5NGY3LAotCTB4MTViMjdmNWEsIDB4Y2IzNTUzZjYsIDB4MmM2OTg3YzAsIDB4OGRmYTg0ZTIsIDB4ZDE2N2NlOGUsIDB4ZmFlYmQzZmUsCi0JMHhjN2MxMWJmYiwgMHgzOWZkOGM5YSwgMHhmMmU5MWNiOSwgMHhiOTI4YmQ1YiwgMHhlZGNiN2VkYywgMHgzYzBlZmMyMSwKLQkweGJlZTBmNzE2LCAweGZjNjI4YmM3LCAweGU4MWZkOGI2LCAweDc2YjZiM2JlLCAweDNkNGZlMTk5LCAweDk2MTQ1YzBjLAotCTB4NGU4MjVhYzMsIDB4ZWJlMWZiZmQsIDB4NjBmZjJlOGYsIDB4MGI3MjhlNGUsIDB4NGEzOTQ3ZjksIDB4NmJmZGNiNWYsCi0JMHhkZmU4Y2Y1ZCwgMHhjZmI0NzkxNSwgMHhlZThmMWY2NiwgMHhjOGFjNGU3NywgMHg3NTcyNDM5MywgMHgwNWY0NDMwOCwKLQkweDdiYmRmOTZiLCAweGEyZmYwYjZmLCAweGQzOWZkYzVhLCAweDE4YzdkZmE1LCAweGRlMzM2OTFjLCAweDVhNzZmNWJiLAotCTB4ODdmZDE0NDEsIDB4ZTVmNzg3YjcsIDB4ZWQxYWU2MDksIDB4ZjA1NzZhYWYsIDB4MWJiZWYwZGYsIDB4N2NhNjU0NzYsCi0JMHhjMWJjMGZkNSwgMHg5YTJmZWUwYywgMHg3MTJlYTdmZCwgMHgzZmVlOGVhZiwgMHhmZmRmOGIzNSwgMHg3ZjM5ODM2MiwKLQkweDFkZDI0YjM3LCAweDkxZmZiMGYzLCAweDcyYWY3NDlkLCAweGE3NWYyZTZlLCAweGNjN2Y3M2Y1LCAweGY2NDI1OWQ3LAotCTB4NTRhYmUwYjcsIDB4MGYzOWY3N2MsIDB4ODNkNDBmOTcsIDB4YWQ3Y2E0OTEsIDB4MGRiZjllOWEsIDB4NzBjNDYwZWIsCi0JMHg1M2NlZTg0ZSwgMHhjZjFjZThjMywgMHg3OGEwMTYxMiwgMHg3NDk2OTJlNiwgMHhiZGUwMzExNiwgMHhmOWU0ZjFlZCwKLQkweGJlODQ4YjM1LCAweDRlZjcxMzZmLCAweDVlN2NkMWIzLCAweGYzZTdiZTA5LCAweDFjOTc1YjY4LCAweGJlMGM5ZWVlLAotCTB4ZmI4OWI3MGUsIDB4NjA5NGRiYzUsIDB4ZDUyOWUyM2EsIDB4MDc4ZmExM2EsIDB4M2NhNzRiMDQsIDB4NmYwN2YzODcsCi0JMHhlNmZkNzFhMCwgMHhmYTI1N2Y3MSwgMHhiMjZmZjE3ZCwgMHhjMDAzN2RmOCwgMHhkODI3ZDBhMywgMHg5YjFlMWJmZSwKLQkweGUyYmViZTQ5LCAweGIzZmFhY2Y5LCAweDI0ZmViNGNjLCAweDllOTMzZWYwLCAweDkyN2Q3NjdmLCAweDkyN2QwOTc5LAotCTB4ZjI1MWVmNGQsIDB4M2E3OGNlZDAsIDB4N2I3NWVmYzYsIDB4Y2U2ZGIwZmEsIDB4ZGI3NDI0OTYsIDB4YWFmNGU0MjQsCi0JMHgzZmVlODUxYywgMHg3NmU3MTUxYiwgMHhiOTc2YWE0MCwgMHg2MzllZTI1OSwgMHg3YzJiNDc4MSwgMHhmOWM5YzVkOSwKLQkweGZlMGNhNWUzLCAweDdlNzRmNTdkLCAweDFiZGUzMzRmLCAweGIyODVmMzhmLCAweDc1ZmQwMDIwLCAweGY0MjJkNzRkLAotCTB4NmZlMjVmZmMsIDB4N2FiNDljNjIsIDB4YmY4ZmMzYTcsIDB4ZDNiNWQ3Y2YsIDB4YTI3YTgxNTUsIDB4NjJhM2E3NmIsCi0JMHg3ZTlmZDY4YiwgMHgzYjY2M2NiYiwgMHg0Y2NmOTlmNywgMHhmNThjN2ZiZiwgMHg3MDUxNzRhMCwgMHg1ZmQxY2ZjMiwKLQkweDNlZTk5NzY4LCAweDkyN2Y2YjQ5LCAweGVjZjM0ZGM3LCAweGVjMjllN2QzLCAweGI5YjlhZmIwLCAweGU3NGVjZDNlLAotCTB4ZjExN2IxNzQsIDB4NTcyYWQ0NzUsIDB4MWQzYzg1NDcsIDB4MmQ5MGYyMTUsIDB4NzU4NzZiZWUsIDB4OTJlYjg5YzksCi0JMHgwMjE3ZWVkZSwgMHgyY2MzOTNkZiwgMHhlN2MxN2RlOSwgMHhiMTJlMDJkZCwgMHg3NmJjM2MyZSwgMHgwNGMzZmIwNiwKLQkweDA4Y2U3ZGZjLCAweDdlZGExOWM1LCAweDdlYzAyZjEzLCAweGRjNzhjYWJiLCAweDE2ZmRmYWMwLCAweDk5OGM2N2MxLAotCTB4MzM0OWVhZWQsIDB4YjllNjEyZmQsIDB4YzVlNDk4YjAsIDB4ZmRiZDdjN2QsIDB4YjdiZjE4YTQsIDB4ZDNiOWZmZjgsCi0JMHhkYmM1ZWNmYiwgMHg4MDdiYmZjOCwgMHhmNDlhMmVmZiwgMHg4MWViOGE1MywgMHg2MWI0MTcwZCwgMHhjMThmZDE1ZSwKLQkweDVmZjgzMzhlLCAweDFkZThiMmJmLCAweDBiYWYzYzJiLCAweGVmYzRkYTc4LCAweGViOGQzMjg3LCAweGY1NWQyYjYxLAotCTB4Nzc5ZjRjNzUsIDB4MWNiMzAwZjYsIDB4ZDdmZjgyYzgsIDB4OTY0NzMyOGEsIDB4Yjk3NDNjNjgsIDB4N2Q3YzU5MWMsCi0JMHg1Y2M0ZjllNiwgMHg0OWQyZTI0ZiwgMHgxZTU4NTljZiwgMHhiY2FmNzAwMywgMHg5MGU2ZmM0MywgMHg5NWRjZWY4OCwKLQkweDMxZWYzZTE5LCAweGU5ZGEzZGYwLCAweGJiMDk3ZWI0LCAweDZmZGM0ZGJjLCAweGE4ODlkYmE5LCAweDQ2NmJjNzRmLAotCTB4MGUwMjIzYjgsIDB4NGFkN2Q3MWIsIDB4ZjMwZDdkNzIsIDB4ZTJhN2JmMTAsIDB4ZjYxMjdlYTYsIDB4MjYyYmI3MDYsCi0JMHgxNjZkZmMwYSwgMHhiMjVmNTFlNywgMHgzZmIyMjZiMSwgMHgzOTc0OWUwNCwgMHg5NjYxOTUxZCwgMHg3ZjhjYTJkMywKLQkweGFjZGQzOTBlLCAweGE0NzI3Y2YyLCAweDc4N2QzMjVmLCAweDk0MjdlZDFlLCAweDcxYzE2Mzg3LCAweDQ1NzJjNzk4LAotCTB4NWZhMDBiNDgsIDB4ZmYzMWRhNWEsIDB4MGNmMWU2MDAsIDB4OTQzZjgzZGYsIDB4ZTFlMzkwOTMsIDB4YmZiMTlmODIsCi0JMHgyZGZjMDY0NSwgMHhmMDliNzBjOCwgMHg3ZjhjZjlmNywgMHhmODc3YmIwZSwgMHhkZjM3ZDYzMSwgMHg3ZDdhMGNkYiwKLQkweGU1YzY4NjU1LCAweDk0MmZmYzAwLCAweDlhN2Y4YTgzLCAweGUwMGU4NmY5LCAweGEwNmFhZTM5LCAweDlkMGNhYTNiLAotCTB4OGI2MmRhM2YsIDB4M2VkMGI5ZDcsIDB4NjgwMmM2M2UsIDB4MTZjNzc3NWYsIDB4N2YwMGM2ZGIsIDB4ZjZlMjZmNzQsCi0JMHhkZjllOWY2MywgMHg3YTA1ZjFjOCwgMHhmOTdhODYzOSwgMHhmNGMxNjM4YSwgMHgyNzVmNTBkMSwgMHg0NThhZTNmOCwKLQkweDE0ZTdkZjhjLCAweGNmZDE0NzczLCAweGNlNDRmNWQ2LCAweDcwMzNiZDRkLCAweDdhNjU3N2RmLCAweGYwY2I4MzVkLAotCTB4M2I3ZGFmYmMsIDB4ZTg0YzJmYjQsIDB4MzdkNDZhOWIsIDB4N2RmNmQ0ZmUsIDB4OGQzYTQ2NmIsIDB4ZTIwOWViODcsCi0JMHg3MzNhNTY2NSwgMHg5NzllMDBiYSwgMHhlZTMyMjMwYSwgMHg0NTc0YmU2YiwgMHhlN2JjNzhlMSwgMHg3ODVhNTBmZCwKLQkweDdlZjg2YWY0LCAweDBlM2UxY2QyLCAweGFmNDQ3NzZiLCAweGQyZmYxMjQ4LCAweDg4YWU3NWY1LCAweDdjOGFlNTRmLAotCTB4NWUzNGRjZWYsIDB4NDVmNDJjN2UsIDB4YzFmMzk3ODMsIDB4OWViY2JkYWYsIDB4Y2YxZTQ5ZWIsIDB4MTdlZjExZWEsCi0JMHhkY2VmNWNjOCwgMHgyZWRjOTY1NywgMHhjNjdjNjU4OSwgMHhiMjQwNjNmOCwgMHgxOTYzZTNjNiwgMHg2ZjllZTIzOSwKLQkweGViNWY0MjViLCAweDdjNDI3M2ZjLCAweDJlZGY4ZmE3LCAweDljZmNiNWU2LCAweGU1OWZlMjY0LCAweGNkZjExZDRhLAotCTB4M2QwYTczZjIsIDB4MTUyMmU1ZDcsIDB4NzlmYmU5ZmYsIDB4NzhlMTFkOWIsIDB4YmU3YmQ0MDYsIDB4YzYwOTYxZmUsCi0JMHhlOWVmMGEwZCwgMHhmODQ4ZmJlMiwgMHg1MjUzNDA3YiwgMHgxZWJlODdjYiwgMHgzZDA2ZjRlOCwgMHgwZGYxODZkZiwKLQkweDI3MTNmM2QwLCAweDE4ZjQzYWQzLCAweDljODU5NzVmLCAweDFmZjRlYzFhLCAweGI2NTllZmUwLCAweGQ0NTU1Yzc1LAotCTB4ZGY2YmEwNjAsIDB4ZmVlMDE5N2EsIDB4ZDk1ZDc1OGMsIDB4NTdjNGM5ODAsIDB4ODlkNzllYTcsIDB4YTNlZjJjY2YsCi0JMHgyNWUxZDg1MiwgMHhiYzNiNTc3ZiwgMHhjOTNjNjNiNCwgMHg1NzgxMTJlZCwgMHhjN2E2ZGUzZCwgMHg1MDdiMThiNSwKLQkweDEzZjczMWY4LCAweGU0Y2QyNzdlLCAweGRmZjgwZGYyLCAweDlhM2ZmMDIxLCAweDdkYmJmZmUzLCAweGVjOTViZmY4LAotCTB4MmYyZTU2ODQsIDB4YTUyYjlkYjksIDB4ZmEyZjkyNjIsIDB4YTRkZGZmNGUsIDB4NTJhZmQzYzIsIDB4MmY3OGU3N2UsCi0JMHgxM2ZmZTdmNywgMHhjOTU1NTA4NCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwKLQkweGQ1ZDQ3Yzc5LCAweGNlZmRmOGI1LCAweDMzMjRiNjc3LCAweDVmNjRjY2M5LCAweDI1ODQ5MzA4LCAweDIxMjYxMjZhLAotCTB4MjY1MDQxMDksIDB4YzUxMTYxMDksIDB4ZmIwOTQwNDksIDB4NTE1OTgzYjAsIDB4MmZiNTY5NmMsIDB4NGE0NDQxMDMsCi0JMHg1MDVkOGJkZiwgMHhkMTAxZGE5NCwgMHgxMDFhYzU1YSwgMHg4M2IwNjAzNCwgMHg2Nzk1NjIyYywgMHgwNWIwNTRhNCwKLQkweDIxMDhlZTNiLCAweGYxNmI0M2M5LCAweDNkZGU1YTU3LCAweDk5OWJkZWU3LCAweDAwNjY3N2VmLCAweDdlN2ViZTdkLAotCTB4ZGViOGZmMGYsIDB4ZGVmN2NiYjksIDB4ZmIzZGNlNzMsIDB4M2FiM2M5YmQsIDB4MjEwOTRiMjUsIDB4MGI2MmEyMWIsCi0JMHg5OTk0MWM0OCwgMHhjODRiMTI1ZSwgMHhiZDNlMDk4OCwgMHhlOTA4NDRkZCwgMHg5NTI0MjQ0OCwgMHhhNDIzYWVmZSwKLQkweDQ3NWFlYTBiLCAweDI0MjNjOTMyLCAweGJkMzg5ZWFkLCAweGJlZDE5ZWI0LCAweGZhZDJkMjVmLCAweDg2MzdmODY1LAotCTB4Yzk0YWQzMTAsIDB4ZmU5ZTMwYjksIDB4ZDNiNjk0YmUsIDB4M2ExNjZkZGYsIDB4OWVkMDMxMzAsIDB4MTYwOWViY2MsCi0JMHhkMDI1MjEzYiwgMHg4MjBkMjdjZiwgMHg5MzZmMzZmOSwgMHhiNGJlNzRiNCwgMHg2MjkwODk3NiwgMHgyZjEzMzY1YSwKLQkweDRiOGMwYWM5LCAweDk5ZWZiMDczLCAweDAxNjk1ZTFjLCAweGJiNDhkZmVkLCAweGFjODQ5MTkxLCAweDU5ZTc1NGQzLAotCTB4MTQ5OTY4MTIsIDB4YmZhNTY4ZTMsIDB4MDdiYWIwNmQsIDB4NGZlYTdlYzAsIDB4ZGE2NjdjZjksIDB4MmVhOWM0NjUsCi0JMHg3YjhlOWJhZCwgMHhiNGNjZWFjMiwgMHg2M2Y2MDYyNCwgMHgyNDY5MmQ5NywgMHg1Mzk4OTA4NywgMHgzNjZkOWQ2YywKLQkweGZiMDVkNzMyLCAweDE3NGNmZTIzLCAweGM2M2YyNDBjLCAweDE1YjIxMWY1LCAweDkzMjg5YmQ3LCAweGFiNDZjNDIzLAotCTB4MmY3ZTg3ZDAsIDB4ZDZlZTc1NjksIDB4N2Q2MDUyZjUsIDB4NmVlMjM2NDksIDB4NDk0OTZkYTcsIDB4ODRkM2JkYzQsCi0JMHgyMjkxZDdmZCwgMHg3MDQ4ZDdkYSwgMHg4N2FiNDkzZiwgMHgwNTlmNWQ2YywgMHhkZTcxNzlmMywgMHgzNmQ3MWNhYSwKLQkweGY5MmFiZGY4LCAweGZhNTZhMmJhLCAweDlmMDZjZTdiLCAweGI3MWQzZTc2LCAweDAyNjZiMzc3LCAweDJiY2M1M2VjLAotCTB4MDkxNmQxY2EsIDB4OGM3ZGQxYzcsIDB4N2Q4OWZkODAsIDB4OTI4OWZiYTgsIDB4NWJhZTBmMTAsIDB4YjM0NWQzZjQsCi0JMHg1YmY2ODVmZCwgMHg0Y2M2ZjM4NSwgMHg2ZDBkZjA2MCwgMHgyZjZjNzdmZiwgMHgwY2MyNjVmZiwgMHgxYWZkNmY1OCwKLQkweDAxNDgzMTNkLCAweDc1NjEzZmY4LCAweDRkNzAwMmRkLCAweDAxMjJkZjZiLCAweGE2OGMzZTZjLCAweGYwMmMzNDc0LAotCTB4MjlhMzBmZGQsIDB4NzZiMDE1M2QsIDB4ODdmMzg1M2IsIDB4Nzk0NzRhN2EsIDB4YjQ4YTNhMDEsIDB4YjI5NWZhZmUsCi0JMHhhMGYwZTE3MywgMHhlMjNkMWFmYSwgMHgyYzllOGI2OSwgMHg1ZTBiY2Y2ZCwgMHhkZjVjNmFkZiwgMHhjYjA2OGIyMiwKLQkweDJjZDc1NmEzLCAweGM3NjM0ZjgwLCAweGZiYzA3YWMzLCAweGU4MWY2ZGIyLCAweGNlZjg1N2RkLCAweGVlOTFjMmI1LAotCTB4ZTI5Njk1N2YsIDB4YjI1ZGFlYmQsIDB4NGFlOTI4MTgsIDB4ZTgxMzkyZWQsIDB4ZThkNmJlYTAsIDB4NmZkNDc4MDUsCi0JMHhkNjRiNzQ2NywgMHhhMTgzYmRlOCwgMHhhN2MzYmVkZSwgMHhmN2U5ZWRhMSwgMHhmZDMyMWQzYiwgMHgwZWZiNmViOSwKLQkweDdjMTA1MTY5LCAweDEyYmRlYmQzLCAweDU5YTg2YmFjLCAweDFlOWYyYjljLCAweGZlOGE5NWNmLCAweDQ1Nzg1MTBmLAotCTB4MWMzYmJhNTEsIDB4NWE0NjNjNDUsIDB4M2M5Yjk3NzYsIDB4Yjc2Zjg1MTIsIDB4ZmQwZjVkY2UsIDB4MWM2MzUzYmEsCi0JMHhmNWVmZGExZSwgMHg0ODhmZTMxZCwgMHg3NzlhZGNmNCwgMHhhZTUwN2MxYSwgMHgzMTRkNmNkMywgMHhkNzc1ZjZkMiwKLQkweDQxYWQxZGViLCAweGJhZDM2Nzc0LCAweDZiMzhjMTc2LCAweDhhYjFkOTgyLCAweDIwNmVjYTdlLCAweDljMTMxNjQ1LAotCTB4NDdmZTI1NzcsIDB4YzVjZWNmZGMsIDB4YTMyYzRiNmUsIDB4ZTA4YTQyMjMsIDB4MzE2ZTNjNWMsIDB4ODI4OTNkNjMsCi0JMHhmN2QyOGNiYiwgMHhkNzViMWQ2MSwgMHhlMWU4YzI0ZSwgMHg4MzZiOWM1MiwgMHgyM2UzYmYwNSwgMHgzYWRlM2EwZSwKLQkweDNhOTc5ZDgxLCAweDdlODkxZmJhLCAweDJlZjM2ZWFmLCAweDYyMzkyN2RjLCAweDZmYTdiODQzLCAweDc1YmJmMDk3LAotCTB4YjllMGI3ZGIsIDB4NzNiYjNhY2UsIDB4MmZmYTFlYmYsIDB4MjQ1MWE1MjUsIDB4MWI5Y2NlOTgsIDB4ZDVlZmNmODMsCi0JMHg0MjYyMzVmMCwgMHhhZGU4MWViYiwgMHhmMmExZjM4ZSwgMHgzZTkzNmU1ZiwgMHhhZmRmZGEwYSwgMHhhM2MyMzIyZCwKLQkweGZkYjZmMzZlLCAweDY0N2JmNDY5LCAweGI2MGNiMTI5LCAweDEzZmRiZjYzLCAweDA2YjVmN2Q5LCAweDYwN2ZjNDEyLAotCTB4OWQ2Yzc5OWQsIDB4OGZmODgyOGIsIDB4M2UxODdmZDgsIDB4YWY1ODViZjQsIDB4NDFkNzU0ZTksIDB4NDg3Yzg3YzYsCi0JMHg2YWZkNjI4ZiwgMHg3ZTcwNzZiYywgMHgzYzRmNGUzOCwgMHg5M2RlYmJmOCwgMHgxZGYzYTc2YiwgMHhmOWM2OGVjZSwKLQkweDczODA1ZjA0LCAweGE1ZjljMzVjLCAweDYyMTNkNjg2LCAweDVhMGViOWU4LCAweDllNmY1ODhmLCAweDgyZDNhMmI1LAotCTB4Mzg0MmU4NzAsIDB4ZTJkNjZjMzQsIDB4YWVmNGFiZmEsIDB4Y2U4M2NiNDEsIDB4YjlmOWVmYzMsIDB4ZmJkYTZkNzksCi0JMHhmZGZkM2Y3YSwgMHg4M2JmMmZlNywgMHg5MzY4NjlmOCwgMHg0OGNmYzA5YywgMHgzYmZhM2JkYiwgMHhiZmFjMDFmMiwKLQkweDIxMTI0OTkxLCAweGI3ZmIwODkzLCAweDdhM2JmNzcxLCAweGQyN2RmZDNiLCAweDg2YmY4NjJlLCAweDBiYjQzYjVkLAotCTB4Y2NmYTAxNGMsIDB4MWNkYWZiM2EsIDB4NzY4NmIzYTAsIDB4MDA5Mjg5MDMsIDB4NTgyZWVlN2YsIDB4MDU0ZTlhOGYsCi0JMHg4ZGRmMDQzYywgMHgwOTk4Y2Y4NCwgMHgwZjEyOGY4YywgMHhjZjQ4NWYzZCwgMHg3MzFhYWNlZSwgMHg4YTVmNmY4MCwKLQkweDM1M2EzMGQzLCAweDJkYmJkZmIxLCAweDFmYTAxZWFjLCAweDk3NDAwN2Y3LCAweGQ3OGVkMTU1LCAweDE1NTQ1Y2UwLAotCTB4MDI1NjhlNDksIDB4ZmI4NjNjZWIsIDB4NzA2NGE4NDgsIDB4NzU0ZjVlMGMsIDB4OTk3ZTY0N2UsIDB4ODVlNWNmMTgsCi0JMHg2MzU5OWZkNiwgMHg3ZWFmOWMwZSwgMHhmN2M3Y2ZiZSwgMHhmYzk5NWUwMiwgMHg0OWRmYjFmMCwgMHhiMDNmMmJiNiwKLQkweGQyZGUzNTZlLCAweDBmZjYxMmFkLCAweDAxMTc0ZjQzLCAweDI2Yjk2YTdlLCAweGUzZTgyZmQ2LCAweDBhYjU5YmQ3LAotCTB4ZWFiMDYxZjksIDB4NTU4MzNlNzEsIDB4MDhkYmViOGIsIDB4N2U3MmExZjgsIDB4Y2I5ZDhlYTMsIDB4NWU4Y2FiOGQsCi0JMHhjN2QzMWZlNCwgMHg5ZjI4OTExZCwgMHhmYmQwY2YzNiwgMHg5OWE0M2NhMCwgMHg4N2VkMGY1ZiwgMHhkN2Y3ZDhkMiwKLQkweDQzNzczNDY5LCAweDEzNmFkZDdkLCAweDNhN2M0NTY5LCAweGEwNDRkNjhkLCAweDRiYzQ1ODliLCAweDZiZGVhZDdkLAotCTB4ZmNmY2YzYTAsIDB4ZWFiZmM2NDUsIDB4MDEyZjI2M2QsIDB4YmE5ZWU4M2UsIDB4ODQ5MWM2MTAsIDB4ODA1M2M3MjgsCi0JMHhmZDQxZjczNywgMHg3YTUwZTYxZCwgMHg2ZjYzZDNiMiwgMHg2YTRmYmZhNywgMHhlMDRjZTc2NywgMHhhNDUxZjI4MSwKLQkweDA0YmYyMTJiLCAweGY0ZjAwMzVjLCAweGMwOGRjZTJhLCAweDBiMzhhNWM3LCAweDJjZWU1YmU3LCAweDMzZGQ3NzgwLAotCTB4NzM4ZmRlNTEsIDB4MTMyZWI3ZDksIDB4YTJhYjRiYTAsIDB4ZWE5MWQ0ZGUsIDB4YTgxOGQ4ZmQsIDB4MDBmZmMxZDcsCi0JMHg1MmE3NmMxZCwgMHg4M2FlOTRhZCwgMHg3NjVkMzNhZiwgMHg2ZWZiMDc1ZiwgMHhlYjBmZmEzMCwgMHg0ZjRiNmEyOCwKLQkweDhlYjllMWY2LCAweDJiNzViNzQ0LCAweDk4ZmI0Y2RmLCAweGE1Nzc0M2VhLCAweDM4YTU4MWJjLCAweGE1NmNiYWFmLAotCTB4NzhlNTJlM2MsIDB4OWJjYmMwMWYsIDB4ZDQxZjhjYWMsIDB4NzllM2I3MTUsIDB4MTliOGZiYWMsIDB4MDI2OWIxY2YsCi0JMHg1M2E2NjdlMywgMHhjODRkN2U0YSwgMHhiMmJlYjg0ZiwgMHhjNTU3YzcwMSwgMHgyOTkzOGZiNCwgMHgyNTdlYWJkYywKLQkweDY0NDk1YTU5LCAweDIyNDRiOTdlLCAweDlmYTc5MDJlLCAweDNiMTAzZTZkLCAweGU5N2JlMDBmLCAweDhkZmI4Y2IyLAotCTB4NmM5ZGZiNjIsIDB4ZmJhOGU3NjUsIDB4YTQ3MDBhMTksIDB4MDkzZDY2ZjcsIDB4OWQ2YmRmYjMsIDB4NGI4ZWY4OGYsCi0JMHgwZTNhZjc4MCwgMHg5NWVkZWVlYiwgMHhmNGExM2YyMywgMHhjZTI2NzllMiwgMHhkY2Y3ZmMwMSwgMHhmODNmMjlmNiwKLQkweDdiYmJhZTg0LCAweDliOTQxOGRiLCAweGE0MmVhZDA5LCAweDI4YzRiZTlmLCAweDNmNGE1NmM3LCAweDIwOTkzMjA5LAotCTB4NmFhZmJjNTEsIDB4OGEzYjEwM2YsIDB4YjlmY2ZiOGUsIDB4OGYyMDQ1NjEsIDB4OWU3NWYxMTcsIDB4MDk1ZTUxN2QsCi0JMHhlYmZkNTk3MCwgMHhmNjg2NmUxNywgMHgwZjE0YWYzYSwgMHg5OWZiYmM3YywgMHhmODEzZmQ1ZiwgMHg0ZDZkZDJmYywKLQkweGQ2OTE0OWEwLCAweGY3YTc3ZWU3LCAweGVmMWE3ZWQzLCAweDMzZmJmNjE2LCAweGY3ZTgxNjcxLCAweGRmMGY5M2Y5LAotCTB4NmQ2ZWYwMGMsIDB4YjNmNmM1NmYsIDB4ZmFjMTZlNGYsIDB4ZTE3ZWJmNmIsIDB4ZjIwN2ZmZDUsIDB4ODBlYjE1ZGUsCi0JMHhkYzVmNjc3ZSwgMHg3N2E5Nzg4ZiwgMHhkZmIwOWQ2YiwgMHg3MWJkNzQ0OCwgMHgyN2M2N2VjNywgMHgzOWMzYWU0MSwKLQkweDRiZmM2NWE4LCAweGRmYTBiNWQwLCAweDc3M2Q3ZmNmLCAweGE4N2NiMDY0LCAweDEyMTk1ZDk3LCAweDM4MzY0ZmY0LAotCTB4NWU1MDkyOWUsIDB4MTQzODljYTAsIDB4NzQ1MWI0NDUsIDB4ZDJkM2FmZmYsIDB4NzkyYWNiNDgsIDB4ZTAxZDdlZjksCi0JMHgzM2YxODczOSwgMHg3OTA5MjFhYSwgMHg3ZjQzMWJlZCwgMHhjYzRjN2RiZiwgMHgyZjNiZDQxNiwgMHhjZjA4MzNkZCwKLQkweDNiYTMwYzRkLCAweGNmOTE4ZjNhLCAweDg4Nzk4NDYzLCAweGYzM2VhMDk2LCAweGE4NzVlNjc2LCAweGNkMjk1MmQ3LAotCTB4Y2UxMjQ5ZmEsIDB4MWJhNmU4NzMsIDB4MTdiOWMyYjYsIDB4NmFmOTg1ZWIsIDB4M2FiZGExZjIsIDB4Zjg4OWU0MDMsCi0JMHhlNzVmMWQ3ZCwgMHhkZjI2NjhiYSwgMHg1MzdlNzFjZSwgMHgwNzVhNjE1NywgMHhhM2U3YjllNSwgMHg4ZDNmMDE2YSwKLQkweDJiMTBmZjdhLCAweGQxOGYyZmMwLCAweDI2NTY0M2YxLCAweDk3ZGJlYTg3LCAweDM4NGQxYWViLCAweDk3NzllNzFlLAotCTB4ZjMyODI5ZjIsIDB4OTRmYTc5ZTksIDB4NmJkYTU3OWUsIDB4ZjBlMWU1ZGIsIDB4M2UzMmRmYmQsIDB4NjBjYTRkMTksCi0JMHg3ZDY2ZDMxZiwgMHg2MmZjMDEyMCwgMHg3NTc1OWFmMiwgMHg1OGU3ZDcwOCwgMHg3MDUyYzUzYiwgMHg3NjBhZTk3YiwKLQkweGZiNzRkNDdlLCAweGNmYzRkNWE0LCAweDY5YjczYjBmLCAweGVjMzNhYWJiLCAweDhlMGNiN2M4LCAweDUzZmE0MWMxLAotCTB4YWI3NzUyZGEsIDB4Y2I3ZWZlOTksIDB4YTY0M2I3MGEsIDB4Y2NmN2I3NzQsIDB4YjRlOTcxYjEsIDB4Njk1Y2ViZmUsCi0JMHgyY2FiZDIzOCwgMHgzMWVjNzkzMSwgMHg1NjFhNzdlMSwgMHhlODhmOTI1NiwgMHhjZmM5ZGZiOSwgMHg2ODg1OTI3NSwKLQkweGUwMGEyYzZmLCAweGI0NGI0YWE5LCAweDFmN2Y4NDI2LCAweDc1ODZiNWYyLCAweDYzNmY1ZTVjLCAweGJlYzYyNGViLAotCTB4MWM2NjI5Y2MsIDB4MTZkMWJhNjcsIDB4NjcxZDA3NTgsIDB4MmZiZDYxMzIsIDB4OTA3Y2NlZjMsIDB4OTQ1YTllOGYsCi0JMHhhZTNkNzY4ZiwgMHg1ZmUwYWNmNywgMHgzYjMwNTNjNCwgMHhhODFmYzAzZiwgMHg3YTA2ZTZkZSwgMHg3YjMzZDI0ZCwKLQkweGI1NjNmODA1LCAweGYyZTZmNDE5LCAweDQwOTJkNjIzLCAweGRhY2QxNDk5LCAweDZkOTI3MGQ1LCAweDNiYWU5ZGI0LAotCTB4N2VjNGU2ZGYsIDB4ODU3ODk5ZTQsIDB4MDdjNDhhZmMsIDB4MzdmZTM5MWIsIDB4NDBjNWZlNGEsIDB4NTEzZDllNjcsCi0JMHhjNmViYTAxNiwgMHgxNDQzZmQ5YiwgMHg1Mzg3MDk3NiwgMHg5ZTliYTcwZiwgMHgwZTVlOGMzZCwgMHhkODFlMzQ2OSwKLQkweDM3YWRhMWRmLCAweDQyOTU2OTZjLCAweGFlNTBmMWU1LCAweDQ4NzVhNzlmLCAweGRhNGJjMDE2LCAweGZlMDUxYWU2LAotCTB4MGFiNzVlYTgsIDB4NWM4NmNhZjQsIDB4ZjdmNTE0YTksIDB4YmZiZmU1OGUsIDB4MjkxYmQ2OGUsIDB4YjhkZWEwZGUsCi0JMHhhYTRmOWY4YiwgMHhjNmZmNDJhNywgMHhmMDg1ZWE4ZSwgMHg4OTg0ZjRiZCwgMHhmZDQyNTkwZSwgMHhhZDNhNWM2OCwKLQkweDEyOTNkNjM3LCAweDA3MWJmZjM4LCAweGUzYTRmNzM4LCAweDk0ZjIyNDNlLCAweGQ1MjllNDFkLCAweDI2OWU0MWFiLAotCTB4ZGUzZWEzZTYsIDB4ZmE4NmRlZTgsIDB4NzNkNWM5MzcsIDB4ZjUxMGI3YjksIDB4OTk5NGM2ZjUsIDB4MjE1ZjM4MGUsCi0JMHgyYWNmNjI3YywgMHhlZDFhZjdkNCwgMHhkYTI4OGVkMSwgMHg3NDg3NTI3ZiwgMHg0Yzc3ZDMzNywgMHg3MjQ3YWQ4NCwKLQkweDc3OTI3ZDQyLCAweDczZDYxNzk0LCAweDk0NDdjMDVlLCAweGYwMzlhZWJhLCAweDA2ZGQ5ZWZkLCAweGFmZWRhMWUyLAotCTB4ZjI4ZjE5ZWYsIDB4Zjk4YmQwNWMsIDB4NzVjYTAzMjUsIDB4ODEyMmQ2OWIsIDB4YzVhZTdlNWUsIDB4NGMxYTNlNDksCi0JMHg5Y2I4MWZjOCwgMHhkYmFjZjAxMSwgMHg3MzgxYTU5ZSwgMHhjM2I3OWU3MiwgMHg5NzEyN2IzZiwgMHhjMzZiYjQ4NywKLQkweDY3ZDIxZjQyLCAweDEzZGJkNzNkLCAweDdiYzJjZTBjLCAweGY0MjdmMDgyLCAweDY0MWQzNTI4LCAweGQzNWUxOGRiLAotCTB4ZTA5NDFmMzYsIDB4NzNmMWFiMTAsIDB4NmJlMjUyY2IsIDB4NjViYmViYTIsIDB4YTYzN2M2YjMsIDB4MTlhYmY1MDAsCi0JMHhlOTU3ZjdjOCwgMHg3NDI5NTZjOSwgMHhjNjM2MjFiZSwgMHg1ZGUyYWEyZiwgMHhhYjI3YzA4NSwgMHhjMTFjOTlhNiwKLQkweGRhMmFhOWZjLCAweGQyMGE4OWE5LCAweDE1NzEwOGYzLCAweDI2NzYzZDgzLCAweGNmZjA4Y2M5LCAweGVhYzNkOWI3LAotCTB4NzlmNmExNjUsIDB4Yjc0ZmRhMTQsIDB4NDgwYTc5YjYsIDB4MTU1ZDZkMzYsIDB4OTJlNzBiNWQsIDB4ZjIxMzYzZjIsCi0JMHgwZjFkMGI0ZCwgMHg1MWQ2ZmRmNiwgMHhiZWZiMzI0ZiwgMHhiMTRkZTcxNSwgMHg4ZWY5ZDg1OSwgMHg4MzM3MTU3NywKLQkweGI1YzcyMDNmLCAweGIzMzFjOTgyLCAweDhlN2VkYzIzLCAweDNlMWU4NTVhLCAweDc0MDM1MGE3LCAweDAwZTRkNTMyLAotCTB4YWZlN2YyYmIsIDB4NmU5MWYzNDgsIDB4YzI2MDU0M2MsIDB4MzhhZjcxNzksIDB4MmJkOTkxMzYsIDB4ZTIzYmEwMGUsCi0JMHhkNWJlYTJkNiwgMHg4NmYyZWNkOCwgMHhjNzQ2MmJhNywgMHgwMmZmNTQ4ZCwgMHgxNWQyOWMzZCwgMHg4M2IxYWRlMiwKLQkweGY3NjExZmM5LCAweGQ2MDg5ZjAzLCAweDEyYjljNTc3LCAweDM1ZjgxNmU3LCAweDM3YTA4ZGQwLCAweGY1YWY2ZTcxLAotCTB4ZjNmMGY2N2MsIDB4MWZmNzQzZDEsIDB4YmRlNjlmNGMsIDB4YWZkNzJlOGMsIDB4ZmI0Mzk3YjIsIDB4MDk2MjJhZmEsCi0JMHg3NmQ1NTdiNiwgMHgxZjBlMWQ5MCwgMHg4YzlmZGJhZCwgMHg4MjNjYzJmMSwgMHhiYWIwNmRjZiwgMHhiZDYwZGE2NiwKLQkweGFiNThkZjViLCAweGQ0YmUwMTI1LCAweDIxYTFmN2I4LCAweDhjY2ZkMjU3LCAweGQxOWYzNjVhLCAweGE2MGRlMzFiLAotCTB4YjcwNTIzMWYsIDB4MGY0YjA4YjksIDB4OTU5OGU3ZjAsIDB4ZjcyM2ZkZTEsIDB4Y2Y0YzRjZGEsIDB4NjVmYWI2ZmIsCi0JMHg3YzA1YTQ5ZSwgMHg1ZjMyZmQwOSwgMHhlMzZiZGY3NiwgMHgwOGE1MjVmYSwgMHhlOTkyYjk5MiwgMHhlYmMwNDk5NywKLQkweDhkNmMxZjgxLCAweDExM2YwMmYxLCAweDdhZjUyNjdlLCAweDA5OWNmY2RjLCAweDIzM2IwYWJjLCAweDdmZjU5NjI5LAotCTB4MzU5YjlmOTgsIDB4YmM2M2RmYmMsIDB4ZjA1ZmIyMGMsIDB4ZWUzNWQ4M2MsIDB4NTkxYzg4MGYsIDB4ZGY3MTg4MGUsCi0JMHg3YzRiZGY5NSwgMHgzNTIzYzg0NywgMHg0MWZhYzBmZCwgMHhhYTdlYzE2ZSwgMHg2YmY3MjJmMywgMHgzOGVkY2ZkYiwKLQkweGUxZWYzZDE1LCAweGUwMTZhYmU3LCAweGJjNjI3YTA4LCAweGU3MDBlZmZiLCAweDE5YzQ3MTU5LCAweGViM2ZmMTRmLAotCTB4MjdhNDA2NzcsIDB4MDQzN2RiOTIsIDB4MmQzYWQwZWMsIDB4ODA2YzE4ZjEsIDB4MWZkNzlkNTcsIDB4NzhhNmI3ODQsCi0JMHg2Y2Q3YmUzNiwgMHgxY2Y0YzhmNCwgMHg2Zjc3OGE1YywgMHgxNTNjNzk4NywgMHgzZDAzZTFjNCwgMHg1Zjk0ODdmNiwKLQkweGJlMjRiOWMwLCAweDRkMjdlMDEyLCAweDcwMGIxZmM0LCAweGRiYmFjNWI0LCAweGFlZTUzZTkxLCAweDNiNTNhODRjLAotCTB4ZjNiZTAwYTYsIDB4OWZiMzBjNDgsIDB4YmQ5MGRlZmEsIDB4MmUzYzI5NDMsIDB4M2VmZmZkMTgsIDB4YzJlN2FlOGEsCi0JMHg4Nzg3MWM4YSwgMHhlZjdhNzNjZSwgMHg5OWZmNzc5ZiwgMHhmYmJmM2VmNiwgMHg3ZWMxMDFiMywgMHhlY2EzNDZhYywKLQkweGVhMDdjNmQyLCAweDZkYTkxMjNkLCAweGJiNzdjMzBmLCAweDk4NmZjYzZjLCAweGJiZjA4Mzc1LCAweGJhZGVhMWY1LAotCTB4MGM5OWNhMjIsIDB4ZmIxNTlmN2UsIDB4YTRhZjkzY2EsIDB4YWM1ZDM3Y2YsIDB4M2YyMGRlMjQsIDB4MGYxZDEzNWMsCi0JMHg4ZTJlOWFlMywgMHhlNjQzZGZjMywgMHg3YzgxZjNhNSwgMHg0ZTk4YmE2OCwgMHg3N2Q5YzMzYywgMHgzMGZjNmY4MCwKLQkweGMwZGJmMTllLCAweDNmNmM0Y2Y4LCAweGYzZmE1MWFkLCAweDNjNDVlNWZhLCAweDQyMmVkN2MzLCAweDFmNmI4NDI2LAotCTB4YjVmNmNmMWEsIDB4ZGY5ZDliMmIsIDB4MTc5MjRkYmUsIDB4MmJjNTgzZWMsIDB4ODI5OTNlY2MsIDB4MTlmZDMxNzQsCi0JMHgxNmM1YTVmNCwgMHgwYjEzNGY4ZiwgMHhiMWYyODdmYywgMHhhOWM2ODg2MSwgMHhjYzhmNmE0NiwgMHhmNjhjZjJlMywKLQkweDdhMDY4ZWQzLCAweDFjZjA1OGY1LCAweDljMzlmOWJhLCAweGQ3ZmFmMWQ3LCAweGFjNTg5ZmUwLCAweDc0ZDFjNjI1LAotCTB4Yzc0NmY5OWUsIDB4ZmJmYTc0ZTEsIDB4YjFiMWE2MjcsIDB4ZGUxNjI2MjAsIDB4ZTQwOTI1M2IsIDB4NjZhY2YyNTgsCi0JMHgzMjEyMmZmNCwgMHhhOWZhMDJkNiwgMHg5N2NiNDY0NCwgMHgwZmE0YWU2MywgMHg0NThmNTE2OSwgMHhmMDc0YTI3YSwKLQkweDJmYWVmMTZmLCAweDFkMDIxZDA0LCAweGYxODdiYWNjLCAweDQ5ZmZkMTM1LCAweDE3ZjM4NjliLCAweDFmYmUxZDI1LAotCTB4YzZlZmRmMDEsIDB4ZTgwYWZjNTcsIDB4ZDczOGMxZWMsIDB4N2JkZTcwM2YsIDB4NWZmODJiY2UsIDB4ZmE3ZmU0OGYsCi0JMHhlNWQzYTA3MSwgMHgyNDUzYzc2NiwgMHhjMzg5YmM3NCwgMHg0YmIwYjdiZCwgMHhkZWYxZmUwZiwgMHg0NGM4ZmZlNSwKLQkweGY1ZjNiNDdkLCAweDFiYTdjMDkzLCAweDBjOWYyNjhjLCAweDVkMmVjNTdhLCAweDAzZWM1ZmI3LCAweDMzOWM2MmU0LAotCTB4ZjM4ZTllM2EsIDB4ZmFkYTM4M2MsIDB4OTIwOWE1MjksIDB4ZmRjNzdmNGMsIDB4ZGUxNDRlZDIsIDB4YmMxOTFiNzcsCi0JMHg1Yjc3OGRkZiwgMHhlZTkxMTNlMywgMHg3NTdkODJlNywgMHhiMzhmNjhjMSwgMHhmYmU4YmQwMSwgMHgyNjMyZTNmMSwKLQkweDMyNDNmMDA1LCAweDc0YmM0YWNjLCAweDk5Nzg4MWJlLCAweDAxZWE3NDZmLCAweDJlOWMwYmZlLCAweDM4YWNlNzVjLAotCTB4ODE0NTg5NWYsIDB4ZjJmOTNjODcsIDB4MDc4ZWQ3MGQsIDB4ZDNlYjlmOTksIDB4NzMwZTVmZTAsIDB4Yjg3Mjg2MWUsCi0JMHhkMWZhMTBmYywgMHhhMzFhNzRmMiwgMHg2NDk5ZDNkYiwgMHhhZjI4NGVlOSwgMHg3NzFkMjVhNywgMHg4YmQ3OWIzYSwKLQkweGVmMDg3ZDc4LCAweDM3ZWFjNDk3LCAweDVkM2RiYTcyLCAweGJmYTlmYWMwLCAweGNlZmYyNzczLCAweDYyY2VmMWJiLAotCTB4ZTcxZDEzODAsIDB4NWViZTAzZDMsIDB4YmU4MmYyOGQsIDB4OGRkNmY5NGMsIDB4N2M1ZThjZjEsIDB4NTViZTYwZDYsCi0JMHhmODA0MzdkYywgMHhjNTA5NmY2MSwgMHhmYWNmZGQxYiwgMHgxM2NjYmVmMiwgMHgxOWY2NTdjMCwgMHg1N2VkNWIyYywKLQkweGJlNjRkZmM3LCAweGM3MmQ2ZmFlLCAweDk1OGU1NDFjLCAweGU0ZDhlNDJhLCAweDEwYzcyNjc4LCAweDdhMjU3NDRmLAotCTB4NDIwZDVmYTYsIDB4Yzg3ZDIwZmMsIDB4MWI5ZjhlZDcsIDB4ZTlkYzE5YTIsIDB4NDc4ZGE5NzksIDB4NzdjYmU1NzksCi0JMHg4NmY3ZjEwNSwgMHgwNDRlNzY3OCwgMHhhZDFkMzkzZiwgMHgzOGRmZTNjNCwgMHhmYmM3OWMxZiwgMHg2NjE2ZjFjOSwKLQkweDMyZmEzOWVmLCAweGI2ZDM5ZTYxLCAweGJiZmY3OGYwLCAweDhiMWYxZmFkLCAweDE5NjdiZTgxLCAweDUzYzRlNmZhLAotCTB4ZWE5M2JiN2EsIDB4YzQyMmZhMGQsIDB4MDllYjBjODcsIDB4N2NmMzRmYjEsIDB4ZGNmMzg1N2YsIDB4ODA5OWI3NzQsCi0JMHhlZjg2NmJmYywgMHg1ODllMjIyNSwgMHg3ZDk3Mjk3YywgMHgzZDRmNzI5NywgMHgxZjg2YWZkNCwgMHg1MmE3ZDVmMCwKLQkweGY0YzkyNDNlLCAweDU2M2MzNjQzLCAweDFhYTcxNjc2LCAweDE2ZjNjMTZkLCAweGVlNGZjZmQ1LCAweGZhOGY4NjBmLAotCTB4YmUzOGE3YmIsIDB4ZGE0YmM2ZDYsIDB4MGU4ZjAxNGYsIDB4NzM3MTgwZTIsIDB4M2NjMmY5ZGUsIDB4NzljOWQyOWIsCi0JMHhhMWEzZDE4YiwgMHhiYjJkY2Q3MiwgMHhiYjdlYzNkNywgMHhlYTA2ZjA3ZiwgMHhiZWY0YTdiZCwgMHgzMGE2NmQyMSwKLQkweDEzZGY3YWVkLCAweGY2ODE0ODhmLCAweDNkOTFiZmI5LCAweDc3OGU3YTdhLCAweDYyZmY3NTc1LCAweGJiYmZkZDFhLAotCTB4MzljMDc2NGIsIDB4ZDdmZmRmNzYsIDB4N2Y0MDIzYTMsIDB4YzAzOWQyZTksIDB4NzVmMmEwYWMsIDB4ZDFmNjE2ODMsCi0JMHg1M2I0ZjRjYywgMHhjZmZjMjUxYSwgMHg0NzY5NGY3ZCwgMHg0NmYxYzMzYywgMHgzM2E0MGFmNSwgMHhmMTRlMGZjMSwKLQkweDYyMTJlNWI4LCAweDE1OWZiYTQxLCAweGVhMTViYjFkLCAweDZlNGJlNWZlLCAweDdjZTYzODg1LCAweGE0ZWMzOGUyLAotCTB4ZWVlY2ZmZjAsIDB4NWU3N2U4ODksIDB4MmZjODljNDQsIDB4MWY3NDc5ZTYsIDB4MDVkM2YzMDYsIDB4NDVmNTk0ZWIsCi0JMHhmZDNhY2E2ZCwgMHg5MmVmZDIyMiwgMHg3M2JmZDU0NywgMHhmODY1NzA3ZiwgMHg3OGQxZGFmOCwgMHhkMzlkMjdhNiwKLQkweGNmZGY2Zjg3LCAweDdjYmRiZmRiLCAweDgzNzg4MWJlLCAweDdjODA4MGY0LCAweGQ1ZGZjMDJkLCAweDM5MDIxZWYzLAotCTB4ZDM5MDEyNWMsIDB4NWQzNzNlNDIsIDB4OGYzMDhhOGMsIDB4YjczZjdmMDksIDB4ZGZmYWZjMzgsIDB4ZTlhMzdjZTYsCi0JMHg3OWU1MTVhMiwgMHhmYzA0ZjhlOCwgMHhkODY2NmE5ZCwgMHhlOWI1ZTA0ZiwgMHhjNGYxMmE2MiwgMHgzZjQyZWEwNywKLQkweGMwY2I4YzBjLCAweDJjMDAyYTc2LCAweGY4MDRjNjlmLCAweDBiMDNmMDgwLCAweDIyNDBmZTNhLCAweGRmYjQ1NGM2LAotCTB4YWM3YWU2MWUsIDB4NTJmYzAwYTUsIDB4YTdiYzgwMWYsIDB4Mjc4Zjc2ZjgsIDB4MTJlOWZhYWYsIDB4M2E5N2RkZTcsCi0JMHhhMDFkOWI0NCwgMHgyODNlZjU3MywgMHgwN2Y1OWMzZCwgMHhlMjRmYjlmMSwgMHhhZTc4MDljZCwgMHhmMDYxOTE4NiwKLQkweDczYTc0MTVkLCAweDA3MTU1MDdlLCAweGY3MmZmZWYyLCAweGViMDcyNjU3LCAweDBlN2VmZDYzLCAweGE4OTdiMzNkLAotCTB4MmRjODU1MjQsIDB4ZjM2YjkyYTIsIDB4MmIxY2E4M2EsIDB4MDg2MmJkNDAsIDB4ZjY4ZjhkMzAsIDB4YjkzZTQ3NGQsCi0JMHg4MDkyMzg5MCwgMHgxOWY3N2I4ZSwgMHhmODFmZDEzMiwgMHg1ODk5ZTUyZCwgMHgzY2NmMTRjZiwgMHgxMzM3ZDMxZCwKLQkweGYwZDcwZTUwLCAweDY0ZTk0ZmVmLCAweGU4YzY4ZGZhLCAweGUyZmVhMWQ0LCAweDEyNGI3NjI0LCAweGVlNGM5ODlhLAotCTB4YTVhMmExNTIsIDB4MWQ0NDliZjUsIDB4NDdkNjg3ODgsIDB4MzA0OGNkZjMsIDB4MjZmZmFlOWUsIDB4ZWVmOTkyNWUsCi0JMHgwNjU3MzgxNCwgMHhlYzBjYWVmOCwgMHg2NTAyOWJjOCwgMHgxZDg3NDhlYiwgMHg0YjkyMzFjYSwgMHhmMGMxZDZjYiwKLQkweDY3MzQ4ZTNjLCAweGQxOGQ3ZjQwLCAweDg5ZmQzMzJmLCAweGM2MDkyMGFlLCAweGJhYjFlZjhiLCAweDRjZDdkNzk5LAotCTB4MTE2NzMwYmQsIDB4ZTMzMjZlZmMsIDB4NzVmM2Q3ZjksIDB4N2NhMDQ5MGMsIDB4MjQ2ZGY2MGMsIDB4YzFiN2Q4NDYsCi0JMHhlMzFjZmJlNCwgMHg1NGY0YmM0YiwgMHhmNTJlZDFkOCwgMHgwM2Y0MTM2NCwgMHgwMjc2OTM0NCwgMHhjZTk5MzVkZiwKLQkweDE2YjM2MDdiLCAweDFlYTA5MTYyLCAweGJiZTBiOTY1LCAweDMzN2YwMDhmLCAweDkwYzMzNDc5LCAweDAwOWY1ZGJmLAotCTB4YWRlOTZmN2UsIDB4MjhmZmMwYzUsIDB4ZjM4MDJkM2YsIDB4ZWI1ZGIxMWYsIDB4ZjA1ZTdkNDMsIDB4NWY1ZjFiMjcsCi0JMHhhOTRmZTcyYiwgMHhmZWMyNDA1NCwgMHg3ZTlmY2U2NSwgMHhmYzhjNWU2YSwgMHhmNmI4ODEyOSwgMHgxNGRhN2YwMywKLQkweDUzZjkwMTNiLCAweDdhZTM3MTMyLCAweDE1NjgyN2UyLCAweGE1ZDEyNjdjLCAweDZhZDcyN2FjLCAweDIzYzg3YzU1LAotCTB4ZGQ1MmZhYzEsIDB4ZTQ4ZGRmY2EsIDB4YzkwN2NhMTQsIDB4MWNiOTRhZTcsIDB4MmU0YTc2OGYsIDB4MTU3NDIzZjgsCi0JMHg0NGY1MWNlYywgMHhiNGZkNzhiMSwgMHg5YWNlYjY2OCwgMHhiZmYzMWIwNCwgMHhmZGI4YjE0NSwgMHgyMTAxZjRkNSwKLQkweDAxN2FkNWZmLCAweGI1ZGE1NjI5LCAweDQxM2QzNjhkLCAweGI1MTI1NTNmLCAweDdlYTE4N2E4LCAweGY0YzA5MzUwLAotCTB4ZDAzZGY3ODMsIDB4NWYyMWY3MmUsIDB4MGJmZGMxM2UsIDB4YWFiODI3NTMsIDB4NzdkZjE0YjQsIDB4NGVhMzkxZTYsCi0JMHg3MjRiMmU1YSwgMHhiYTUwMjZkNywgMHhiOWE0N2U5OSwgMHg2YmQ2OWVhMSwgMHgzZWY5MjJkZiwgMHhiMThlMTY1YSwKLQkweGY4YTc2ZGQ0LCAweGVjZGIzYjVkLCAweDZiZWI0ZDU4LCAweDNkZDQ4Y2NkLCAweDk3ZDQwNjg5LCAweGRhNjljODA4LAotCTB4ODI5MzQ1YmUsIDB4ZjAyNjkxZmUsIDB4YjQ3ZTUyYzcsIDB4NDAxMWUyMTYsIDB4ZGEwOTgzMTcsIDB4NTkzZjU0ZDMsCi0JMHhiNmUzYTQ2YiwgMHhkNjU4YjdhYywgMHhkNThmYzFkYiwgMHg4NWZjMGUzNywgMHg2NTg4OGI3ZCwgMHgzZTczMDkyYiwKLQkweDQ3NzNkMTJlLCAweGQ0MjRmY2YxLCAweDRlMjU1ZTI5LCAweDZkZjdlMjZmLCAweGFiMGU3YmYwLCAweDNiMDUyOThmLAotCTB4ZTljYmZkOTAsIDB4ZmMwYjBjYTQsIDB4NGYyY2I5MzcsIDB4NWNiM2E5YTAsIDB4MzllYjQ4OTcsIDB4NGZlODFkNjMsCi0JMHg4YzRmOWMyNiwgMHhlN2UxZGYxMCwgMHg1Y2UwNTQ3MCwgMHhhZjIxN2I2MCwgMHhiODdjZWEwZiwgMHhjYmU2MDkyYSwKLQkweGFlZWUwZTIzLCAweDU4MjM5YzBiLCAweDUwZmU4NWFjLCAweGUwZjFjY2NhLCAweDA5MjM3YzczLCAweDJhZjk4M2ZjLAotCTB4ZGUyM2YzMDMsIDB4NDNiNmYyYzYsIDB4NzZiYzU5YjMsIDB4MWZiN2Q2ODQsIDB4NWUyOGY5Y2UsIDB4ZDMzMmYyMTYsCi0JMHg0M2JlNTUyNSwgMHhlOGM4YmZlOSwgMHgwZWRiYjAzOCwgMHhiMGM5NzUyMCwgMHg0M2NiNTJlZiwgMHg5MWZkZjBhZCwKLQkweDgxZTI3N2FlLCAweDUyMzY4ZGFmLCAweGQ2Y2I0MGZlLCAweDkyYzM4NzMyLCAweDgwZDZmYjgzLCAweDI3NDdhOWZmLAotCTB4MGUzMzkzZTQsIDB4MTE2MDZiNzMsIDB4OWNkNWZiZjQsIDB4OTZkNmE2OTYsIDB4ZmIwYzVlZGYsIDB4ZWMwOTkyZWIsCi0JMHg1YzFjYTIyZiwgMHhjMTM1OTMyOSwgMHg4YmU3ODdmMiwgMHgwOWZiZmE4OCwgMHgyMDdmYmZjYywgMHgyMTM3OWM2MSwKLQkweDc0ZjgyZTI4LCAweDcyODNkNzAyLCAweDhmZjAyZTQ5LCAweDJjZmRmM2EwLCAweGY5Nzc1YmQwLCAweGJmY2U5MTliLAotCTB4ZmY5ZjlkYjIsIDB4NzVjMzljM2IsIDB4M2U3MmVmYTgsIDB4OGJhZGY4MjAsIDB4Mjc0Y2M1ZTcsIDB4YTdjMDFkNGUsCi0JMHgwMWYyOGEyYiwgMHhiZTU2M2Y1YSwgMHgzNGMwZjkwYywgMHhkZmRmYzZlMiwgMHhhNmYwNjBhYiwgMHg3Y2MxZDc4OCwKLQkweGY1MjgyNjUzLCAweGNhNWMzYjhkLCAweGI1NWFiNGZhLCAweDllYmY0MjNlLCAweDc0ZWVmODE0LCAweDQ2YmRiMmI3LAotCTB4OTQxMzk3ZTgsIDB4ZWZhY2U1ZmEsIDB4OWNhMmIyNWYsIDB4ZTFiYTdlNGQsIDB4OTdmMDQwZjIsIDB4ODIyNWQ1NGYsCi0JMHhlNzkzYjBkZiwgMHgxODRhNzRiYiwgMHhmOWUyNmExZiwgMHg5MjFkNGQyZSwgMHhhOWE1ZGYyMiwgMHg4OTAzZGU3MywKLQkweDhkMmVmOTQxLCAweDc3Y2I1NzFkLCAweDA5YzhmYTYxLCAweGY4M2Y3NzlkLCAweGEzMmM0ZmQ1LCAweDM5ZGZhNjNiLAotCTB4MGUyMmYzYzAsIDB4NTE0NDVlNDIsIDB4NzNjY2ZlODAsIDB4NTI5MDlmOTgsIDB4MzNkMWZhMzMsIDB4ZDAwZTMxMmMsCi0JMHg4YTY5ZDdhYiwgMHgyZWI4YWZkMCwgMHhmZmYwYWNkNiwgMHhhY2U1NWZhZSwgMHg5ZmMyN2U4MiwgMHhhNjVjZjIyOCwKLQkweDNiNzM0ODE5LCAweDY0MWQ1M2YzLCAweDhmY2M1Y2Y5LCAweGI0ZjZlNWU0LCAweDdlMTI0MTM3LCAweGM3ZTgzNWUxLAotCTB4YzRkZjlkNTIsIDB4MjRmMjgyNzgsIDB4ZmEyZTY2NzEsIDB4MGIzYjZiMGIsIDB4NGI1ZmMxOGIsIDB4YjFmYTEyZTUsCi0JMHgxYzc2MDliZCwgMHg0NDJlZWI1ZiwgMHhhNjJkZDczZiwgMHg2ODNmMThlOSwgMHg1ZGEyZGNlYSwgMHhjZmQwMGE2OCwKLQkweGM1ZGQwNTVmLCAweGJiYTAxODkwLCAweDRlZDFmZjdlLCAweGRjOGZmYTAzLCAweGEwNmJlYmIyLCAweGFmYmQ3YWFmLAotCTB4MTJlOTI4ODAsIDB4NzcyNDhmN2YsIDB4ZWJiYzcwOTYsIDB4MTdkMzVjMmEsIDB4MWVmNGI4NTEsIDB4ZmVjMDNiZDUsCi0JMHhlMjA1OGFhMywgMHg1NjNkYzVlYiwgMHgxYWRhODNlNCwgMHg0ZDdlZmM4MiwgMHhkOTdlNDEzOSwgMHg0ZmY5ODViYiwKLQkweGJkMmViMzNlLCAweDlhZmVmODE1LCAweGFhNzI4MjZhLCAweGUxMGUzNmM3LCAweDBmNzg4Y2JmLCAweGE1YjhlOTNiLAotCTB4MDUzZDI5OWIsIDB4YjZiYmZmZjEsIDB4YTRmNWViMjksIDB4ZmQ3OGY5MWQsIDB4NDRiYTEwZjYsIDB4NTZmODI0YmUsCi0JMHgzYWNiYjEwMywgMHg1MmVjNmI4OCwgMHg5ODgzMjc4ZSwgMHg3ODcwNzc3YywgMHgzYWJlNzIxNywgMHhhZGIxOGVmYywKLQkweGFlMWY2ZjEwLCAweDJjODVmYzYxLCAweGEwZDdhNDc0LCAweGYyY2IzNGZkLCAweGJhYjAxNDY5LCAweGU5MmJhNWE3LAotCTB4MzNlNmJkNDcsIDB4OGNjNzNiMzIsIDB4ZjlmMDk2N2YsIDB4ODRiZDdjZDUsIDB4NmIzNzQ1ZWIsIDB4MTQ1MGExYTksCi0JMHg3ZjY4NzNkMCwgMHg3NGQ0MWZhYywgMHhjMDlhMjljYSwgMHgzOGY5OGIzYSwgMHhiZTA5NWZhMSwgMHg1ZTU1ZjAyYSwKLQkweGE1MTk0ODQ2LCAweDM5MTM5YmIzLCAweDM2NDliM2JlLCAweDhmY2U5YmUwLCAweDQ2NDEyZTc0LCAweGY3ZTcwZDhiLAotCTB4OGEzNDNkODAsIDB4ODNkMjhmN2YsIDB4YTNjYWU4MDcsIDB4N2U4MTdhMzEsIDB4MjhjZDRhZDcsIDB4NDdhMDhjNGYsCi0JMHhlNGJkNzJkMywgMHhmMmZhZmU0NiwgMHhmNDBjOGY1MiwgMHg0ZjM0OTIzMSwgMHhmODBiMzViOSwgMHhmMDBjNTc2YywKLQkweDE1Mjc0YTFmLCAweGZhMDE4OTg5LCAweGNjYmUyNTY5LCAweDhlODI5MjFkLCAweGZhZGJiZGIwLCAweDEyM2E1ODY2LAotCTB4MWVmN2RmZmMsIDB4MTEyNjBiZDMsIDB4ZWZkMWJmYWEsIDB4ZjRjNGZmM2EsIDB4MTJkMjgzOTcsIDB4YzdhYTEzYTQsCi0JMHhlNWZkMDQxZCwgMHhhZmIzMGQ0ZCwgMHg0MDZkZDIyNiwgMHgxMjhiMmFiZiwgMHg5NDUzZTNmZiwgMHgxMGY2ODlmNSwKLQkweDAxM2NjMGZhLCAweGJkM2MzZjY3LCAweGE0Y2Y1ODVhLCAweGE3M2Y2NTVjLCAweGM5NDQ1ZmUwLCAweDI1YzhiMmJmLAotCTB4NzQzZjA3NjYsIDB4YmZiMDVlZjgsIDB4NWM5MjU2NjMsIDB4OGQ1MjA3ODgsIDB4NGMzODMxY2YsIDB4ZjEzZWE1YmMsCi0JMHhkN2RiZjczYiwgMHhkYmYxODYyNywgMHgzZGI4ZWFmNywgMHhjNmIzYTJhMCwgMHg2Y2U3NjdjMywgMHgxNDdhMDEyMCwKLQkweGQyNDZlMmU3LCAweGY4NTBhNzJjLCAweGYxNjNiZjQ5LCAweDBlODExYjkxLCAweDE5OTQ1ZDI5LCAweDNiZTgxZTQ5LAotCTB4YzNmOTk4YTQsIDB4NzQxMGY5YzQsIDB4MWI2YmNhNTcsIDB4MjQwZDlkMDQsIDB4NmVjZTgxMDMsIDB4N2Y0Mjg4ZWEsCi0JMHg2ZjQwOGRlOCwgMHhmOTBiN2U5NCwgMHgwYjllNDJiYywgMHgyY2I1YmRiZCwgMHhhNGIyYmU4NCwgMHgzOWViOTQxYywKLQkweGFlNDI0ZjQwLCAweDhmMWM5NzBmLCAweDdhMDU5N2RmLCAweGY2ZjUwN2JiLCAweDQzNmE3YTIwLCAweDNkMjg5MjdhLAotCTB4NDQyN2JmYTEsIDB4NTVkYjJhNWUsIDB4N2VmMDI2ZjQsIDB4ZTVhM2ViOWMsIDB4ODVlZDE5YTQsIDB4NGU0Y2QxYTksCi0JMHgzZDk5YWFmYSwgMHhkMjI0ZDk0ZiwgMHg4YzM1ZWJkYiwgMHgxMzg4YWFkZSwgMHgyODljYWRlOSwgMHhhOGQyYTRlOSwKLQkweDkxZTlhYmFjLCAweGE0YTM1MTdlLCAweDliZDIzNzM3LCAweGQxMjM0ZTlhLCAweDM3YTA0MGRiLCAweGFmZTMyZjIxLAotCTB4MTM3YjZmNGUsIDB4ZmYzM2ZmNGQsIDB4ZWRiZDI4NWEsIDB4NzZiOTJjNGQsIDB4NmM3YzEzN2EsIDB4ZDJhNTk0NDcsCi0JMHhhOTdjNzIwNCwgMHhmODYxNzI4NCwgMHg1MGFkNDFkMSwgMHg4NTkwZGExZiwgMHhhYjBlZTdmYSwgMHgzN2I2MDBlMywKLQkweDJlZTJmNmIzLCAweDBlZjkwY2E3LCAweDdiNzgyYjM5LCAweGVhMTJhYjk2LCAweDNiNjkyYjRkLCAweDM4ZTRiYTlkLAotCTB4NzQxODg3Y2IsIDB4NWMyZjZiM2YsIDB4MGNjMDdjZGQsIDB4MWIwZjJmN2UsIDB4YjVmM2Y3YmYsIDB4Zjc2ZDJjNzIsCi0JMHhjYmUzZTVhZSwgMHhkZWExMmFkYiwgMHhmZjhkOGViNCwgMHhjMzI4ZTIwYywgMHhkYmNhOGYyMCwgMHhiNzVmYmYwYSwKLQkweGNjYzFjYjIxLCAweDhlZjdhNjU3LCAweDIxZGRmYmUxLCAweGUzODAzY2VkLCAweDI1YjhkOGRhLCAweDA0ZDE4ZDg3LAotCTB4Y2ZhNjZjZWQsIDB4MzlmN2NjZGUsIDB4NjdkYjMzNjYsIDB4NGNiNzQ3YzIsIDB4YTdiZjgzYjAsIDB4ZDhmYTgzY2YsCi0JMHg1MmZhOWFhNywgMHhlYzExNzNlNCwgMHgyZGE5NzJkNCwgMHhjMGYxY2EwMywgMHhiYmMwNjRiZiwgMHhjZDljOWQ2MywKLQkweGU5NWI2OGUyLCAweDY0NGFiZTI3LCAweDdmMTEwZTdlLCAweDc1NzczODgyLCAweDU1ZjM3ZTkwLCAweDhhMTNmMzIyLAotCTB4ODIzNjQ5N2UsIDB4Y2M3OTEyZmEsIDB4ODg4ODc2OGMsIDB4MjExZWY5OGYsIDB4ZDg0ZjljMTIsIDB4MTQ4YjhjMjMsCi0JMHhkMzlmMWIyZiwgMHhmOGMzZmE4YywgMHhlNjRlMjI4MSwgMHhkZmE3Y2VkNywgMHhjNWZjYmMyZCwgMHg5ODdlNzBiOCwKLQkweGJkMzIyNDdmLCAweGRiOGYwY2U1LCAweDdhOTdkZjhiLCAweDA3N2YzYzU5LCAweGMwMWE0OTEwLCAweGQ2MjZmNzU1LAotCTB4MmIwODQ0YWQsIDB4YmMwMzI5MGYsIDB4NDZjYzdhYjIsIDB4YThlYmM3ZTksIDB4ZDM0NGJmOTEsIDB4NzA4MGY1YWMsCi0JMHhmZjMwOTRjYiwgMHhmMTE3NzI2OCwgMHhhZTg2YzVjNSwgMHhmODk2YmM3ZiwgMHgwODdmMmNmNCwgMHg1NWI4YmZkNywKLQkweDg0NDNmOThmLCAweDM4M2JiNWYzLCAweGMxZThjOGZlLCAweDcyYTdjZTc4LCAweDcxMjRhNTNjLCAweDE5Mzg3ZGJiLAotCTB4MGVlYTdjMGUsIDB4OGQzYmI3OGUsIDB4YTcyNjNhY2QsIDB4ZmUyYTc0ZGIsIDB4N2EwNDkxOTEsIDB4ZmE4OGE2Y2YsCi0JMHhjNTVkYjJiOCwgMHhlZmYyOTY1ZiwgMHhmODdhZTYyZSwgMHhmZTg3ZDIzMiwgMHgxZWI5NGZjMiwgMHhkMzEzNjY3ZSwKLQkweGVkMjJlZmMzLCAweDdkZWMyZmU4LCAweDBkOWRlOThjLCAweDJmNDA3Yjc0LCAweGJlNGFiY2NiLCAweGIyOGNmNzUwLAotCTB4YWNhZWQwZGUsIDB4MGViMTUyMzcsIDB4YTg3NTM3ZjMsIDB4ZjMxZTRlZjgsIDB4NmE2ZWY2YzMsIDB4ZGJmZjA1MjgsCi0JMHhhMjhmNDdkMiwgMHhlMGE5NzdkZiwgMHg5ZjI1NWUzMywgMHhjNjdlZTQyMSwgMHgxZWI5MWU2NywgMHg3YjZhM2ZmZCwKLQkweGQ0ZTlkODVkLCAweDA5MjliZTNlLCAweDk5OTY5MGUzLCAweGNjMzdhMGY1LCAweDBmNzk2MTg5LCAweGY5MWYyOWIyLAotCTB4ZjY4OGQ5ODIsIDB4YTBiZTI0NzIsIDB4NWU4NDgzYjYsIDB4N2YwZmFlNDIsIDB4MzIwNGE4NWUsIDB4ZTA4MjNlYzIsCi0JMHg1ZmVmODJlZiwgMHhiNjUyNWVjMSwgMHhlYzIzZjBhYiwgMHgzZjFjMTk5NSwgMHhlMWZlMjg1MywgMHg3NjEyN2YzYiwKLQkweDlmODYzMmQyLCAweDA4NzVjNGE5LCAweDVkZGVmM2YwLCAweDZlYzIzZjBjLCAweDkyNzZlNmZhLCAweDkzYjYwZTUzLAotCTB4YWQ3NWJkODQsIDB4ZWZkYTkyZjYsIDB4Y2Y1YmNlMmUsIDB4ZGFjZjYxMDAsIDB4MDI2ZDllZDEsIDB4ZGRmZTUzNDAsCi0JMHgxM2M0ZjdiMCwgMHhlZmQwMjQ1NSwgMHg2ODcxMGI1OCwgMHg3MmY1NDE3NSwgMHg2NmI1N2ZhNSwgMHhjODUyZTlkMiwKLQkweGFlODhjYzlmLCAweDQ2ZTAxN2I4LCAweGZmZDExMzNhLCAweGVjMmM5MGQ4LCAweDM0ZmYzNjI3LCAweGUxNzVjZjllLAotCTB4ZGIzOGFjY2IsIDB4MjljNGZjOTUsIDB4ODM2Yjg2ZjMsIDB4NmQ1ZWUzZWMsIDB4NDNkODJjNWYsIDB4ZmMyNDk3YmQsCi0JMHg2MWFkZDQyZSwgMHhmMTgxNTFlMiwgMHhlODdjNzEwYiwgMHhmN2JlYmJmNywgMHg0ZjczZTA2NywgMHhmMTNjNjBjNCwKLQkweDJlY2M5N2MyLCAweDI4NzliMGJjLCAweGUzOWYxNWU2LCAweDg3MDE1NzcxLCAweDc5OWY4NzI1LCAweDcwZTcwZmQ1LAotCTB4MTBlMTgyZTUsIDB4YmM5M2FlYmYsIDB4NmRhNmVkNWYsIDB4OWZlZThjMjMsIDB4ZDNhZGY5YzMsIDB4YmU4Y2Y0ZjgsCi0JMHhlYzQ0NWM1OCwgMHhkM2RmYjIzYiwgMHhmZjRmN2M4MywgMHg3ZGJmOTMxYSwgMHg4OWU2MzQ1MiwgMHgwNDg3ZGZkMiwKLQkweDI3MzY4N2M3LCAweGYwODFmOGIzLCAweGY5MzkwOWM3LCAweGU1NmY1ZTQ3LCAweGEzNWE5ZWY3LCAweDNmOThmZWM0LAotCTB4ZjNiYzUyZTIsIDB4MWZmZjgwMjksIDB4NTdlMGZkNjEsIDB4ZmM4NzQ3N2EsIDB4MTBlNmZjMWMsIDB4OTk1MmE0YjcsCi0JMHhkNzQyZGJhNCwgMHg2ZGY5ZjEwNSwgMHhkZjlmMTBkNywgMHhjNWU0YzQ5OSwgMHhiMDhiNGEzOSwgMHhlNzM2NDViZSwKLQkweDMzYmRmMDhiLCAweDg2NzkwZTNjLCAweGM0Y2ViMWM3LCAweGJlZDZiOGIyLCAweDdjYWNmZWZlLCAweDIyNjc5NzliLAotCTB4YmY0NWQxYzQsIDB4YWU4YzViOGYsIDB4M2VkZTk0MzUsIDB4MzVhZTIxNmMsIDB4MWZkODNlNTQsIDB4ZGU2MzM0MzEsCi0JMHhhZmI2MmNjZiwgMHhjYzU2M2RkZSwgMHhmZWUzMTUxMywgMHgwZTdlNTQ5NCwgMHhkNWFjZjFkNiwgMHg4NWNhMTg3NSwKLQkweDM0N2JjYTZkLCAweGQ0MWZiMGJkLCAweDdhYmVkODM3LCAweGJlMjk1OGEzLCAweGVhYTRhN2Y3LCAweGRlY2Y4MDczLAotCTB4NjdjNDdlZTksIDB4YThhNDdkN2YsIDB4ZGVmZTcwYmIsIDB4NWZjOGZjOWIsIDB4MzQ1YmY3MDksIDB4MjkxOGYzZjAsCi0JMHhmOGI1NzYwZSwgMHgzYzhlM2E5NywgMHgxZTZmOWM1YiwgMHhhNmM1OWU0NywgMHgxYzc5YjMyMiwgMHhhYzkxOGU3OSwKLQkweDczZWRhNzRkLCAweGZmZDE5MzNiLCAweDMzZDYzNGJlLCAweGY2NDcxMTQ0LCAweDc4YTM3Y2M0LCAweGRlYzdhMGJlLAotCTB4ZWMzODgxMDEsIDB4MGUyMGRmNjMsIDB4M2JlOTM5N2IsIDB4NGU1ZWMzOGYsIDB4NTU4NzEzMGEsIDB4MDI1ZmU5YzcsCi0JMHhjMDE3NDFiZCwgMHgwNjE2ZGRjMywgMHhiZWI5MmFiNywgMHgxN2EwZmMxMiwgMHg4ZmNjMTIxNiwgMHg4ZmQ5MjQyZSwKLQkweGVjM2QwNjhjLCAweDkxNzg4ZTg4LCAweGZhM2QzMjZmLCAweDc0NGI3ODZhLCAweGUxNWQ4ODY5LCAweGY2MjY4ZWJmLAotCTB4YmFhNGZkYTAsIDB4NmEzYThhNmQsIDB4ODc3OTQxZTYsIDB4MTRkMzRiZTksIDB4NjczNDA3ZTMsIDB4NWMwZmZhMmIsCi0JMHgzZGEyYmQ3OSwgMHhhOGE0NTNjYiwgMHg1MWJiYWNlNywgMHg1YjcwN2ZkMSwgMHhmNDNlYTI4NSwgMHhmZDE0NWJkMSwKLQkweDI4ZDZmM2FmLCAweDdmZTAxN2VhLCAweGM4YzlhZjkwLCAweDY2Nzg2ZWQ3LCAweDkyZmM2Mjg2LCAweGY1MmM1ZTM3LAotCTB4N2NiOWI2YzEsIDB4OGI3MmU1NmUsIDB4Nzk1ZDljNzgsIDB4MDJmZGNjYTUsIDB4OWY2ZmM4ZmIsIDB4Zjg5Nzk4YWYsCi0JMHgwYTU0OWYyNCwgMHhlZmY2NDk3MSwgMHg4N2JiMmM1YywgMHhjNThiYjBiMSwgMHhkYzc1ODYwNywgMHg2ODRlZjhhNSwKLQkweGEzMmVkMjVjLCAweDkxMjFkNWRlLCAweGY4ZDBhNGM3LCAweDg3Y2VkMmU0LCAweDhhZGU0MmQ3LCAweGZmYTE3ZjVhLAotCTB4YTBjNWI1NzIsIDB4M2U2MzQ0ZWYsIDB4YTk5ZjVhYTQsIDB4YTAyNzM2NGEsIDB4ZDI0NjkxZGUsIDB4ZTlhYjVkMTgsCi0JMHgwZjBmZDRjMiwgMHg0ODUxZjdiOCwgMHhiYTMyM2M4NiwgMHgwYTE3NDE1OCwgMHhhMWY4NTFmYywgMHg3NmMyZWI3ZiwKLQkweDJkMzVlNjMzLCAweGQyMDE2Mzc5LCAweDQ5NDUyMWEzLCAweDI1NzY1MTE3LCAweDJhZTRjNDVkLCAweDUwZWNjMmU5LAotCTB4OTk1YzQxZDIsIDB4ZjBkNDBlOTIsIDB4NzQ5NTNhYjYsIDB4YmZmNGZjNDEsIDB4N2UzYmMwMmIsIDB4ZDQ2ZTkyODIsCi0JMHg3ZDIyMmVmMCwgMHhkODBmMzE4NywgMHhkZjAwMzkyYiwgMHhlYjJmNzg2YSwgMHhiYWZiODJkOCwgMHgzY2I4YmU5YSwKLQkweDM5MTdjNzk5LCAweDc0MWY4NzdjLCAweDZlMTA5YWI2LCAweGY4NDkzZjJjLCAweGVlZGMwYzAzLCAweGJmNGEwOTI2LAotCTB4NTZhYmQwOTgsIDB4OGRiZDczMjUsIDB4ZjJmYzIzY2YsIDB4ZGEwZjI1NmIsIDB4Yjg3MWZkZjEsIDB4MmZhNjVmMzIsCi0JMHg2NmY5ZWMwYiwgMHhhZTQzZmNjMiwgMHhjMzEzOTIwNywgMHhmN2YxMTdmYSwgMHgwMTQ1ZmU0OCwgMHhmZjVjYTlkNywKLQkweGZmMmMyM2FjLCAweGYzMTQ3OGU2LCAweGJkNWM3ZDBiLCAweDhiNDJmZDBjLCAweGQxZWEzMzQ5LCAweDczYzY2YWU3LAotCTB4ZmIwN2ExZmYsIDB4MDIxOWUxYTksIDB4NTI5ZDM1M2YsIDB4ZjkwNDk1N2QsIDB4MWFhMmVmNWYsIDB4MTQyNzI2YjIsCi0JMHhlNGE3NTI5ZSwgMHg1MzNkYzMzMywgMHg4MWU0MjlkMiwgMHg1MDEzZGQ5YiwgMHg4NGU4NTdmYSwgMHgxMmJmMzA1MiwKLQkweDVmOThiMGZhLCAweDMxZjA0ZmMwLCAweGZjMDFhZjMxLCAweDU0MGU3MDMyLCAweDJhZTQ4ZDdjLCAweGM3ZjZhMmYxLAotCTB4OTYzMDMxYzAsIDB4ZWM1YmM3MDYsIDB4YTMzZTM4MjQsIDB4ZmMwNGMzZjYsIDB4ODRmZWQ0MmYsIDB4YWNjMGUxNzgsCi0JMHgzYTA3Yjg1NiwgMHgzZjQ0ZTJkYywgMHg5YWU5MDk1ZiwgMHhmZjBiYmYwOSwgMHhhZTIxZmEwYiwgMHg4ODdlZmQyMywKLQkweDJhZWE3Mjg4LCAweDFlMjlkZGYxLCAweDU2NzhmZmM5LCAweGM0NTc1YzY4LCAweDNlMTgyOTg5LCAweDNjMWQzM2ZhLAotCTB4ODAwZmIyNWEsIDB4MWRlY2Q0NzUsIDB4MTQ3NDA4OWEsIDB4OWM3NDk3ZWEsIDB4MjNjZTg1N2MsIDB4YTFlMmZhNmIsCi0JMHgyODI0MTU1ZiwgMHg1ZjdkYzUwNywgMHg5ZmI4ZmM5NywgMHg4MWYzODkzYiwgMHg4ZGRkZmJlMCwgMHg0Y2RjN2RhNCwKLQkweGY5NTMwN2Y0LCAweGYzMjUwYjE4LCAweGI1MGU5MTViLCAweDdmNDVhZGRlLCAweDA0ZWU4NmIxLCAweDA0OGViZGU4LAotCTB4MDJiMzNiYzUsIDB4NDM5NzU4ZWQsIDB4NDc5YWQ3ZWIsIDB4YzJjNTM5MzMsIDB4M2U1ODA5ZjMsIDB4NGZmY2UxMjgsCi0JMHhlZDkxOTFkOCwgMHgxNmZhZTUzNSwgMHg0OTY2MTY5OCwgMHhjMTA1ZjdmNCwgMHg3NTg2YjhlYiwgMHhiODA5N2M4YSwKLQkweDkwNzEwYTI3LCAweGQ3MDQyOTgxLCAweGM3NmM5NWQzLCAweDRmYTIxYmRmLCAweDZlODRlYmJkLCAweGMxOTk1ZGM1LAotCTB4OWU5MzZlN2EsIDB4Yjc2MDM2MWEsIDB4NzE2MDY0YmYsIDB4ZmVhNTc2Y2QsIDB4ZjRjMjlkMWMsIDB4ZTA3MGM4ZTAsCi0JMHhiYjJhNTlmOSwgMHg4ZjdhNmFlNiwgMHg0YWVhY2ZjOCwgMHhmN2Q2MjhiNiwgMHgzNjJiOWM2MCwgMHhjMDZmN2U4NSwKLQkweDkyYTdmZjQ5LCAweDRhYmUzMDI2LCAweGM0M2NjNmVlLCAweGRlMzIxZDBiLCAweDg5YmM2YWE3LCAweDNkYzY4N2YxLAotCTB4OWVhMTFlMzIsIDB4MTdkZTAzNGUsIDB4MDA3MWRhNWUsIDB4MTZlZWE1ZjUsIDB4N2VhODgwY2EsIDB4N2U4NWI2NzIsCi0JMHhlMDE1ZjA3OSwgMHgyNDZmZGFhZiwgMHgzMWU0NDE3YiwgMHg3ZWUxNDkwZCwgMHgxMDUyMDI4OCwgMHhmMTA1MDc5YywKLQkweGYxYjA5NGZkLCAweDI3ZmNmZWZmLCAweDkzZTczYjY1LCAweDFjNWU3MjU1LCAweGNmZWRhM2RjLCAweDY1ZjZkMTZiLAotCTB4NDdlMTA0ZDYsIDB4YjhhZjhmYmQsIDB4NzNhYTUyNWQsIDB4NzBhMTRmMGQsIDB4NjMyYmEwZmIsIDB4MjU1N2NjMjMsCi0JMHgwMzRlMWU3NywgMHgxYzkwYWNmOCwgMHg2MzFiN2YxMCwgMHgwZDFiZjc2MCwgMHg3MzQ3NzJmMiwgMHhmNDM3OWQ5MCwKLQkweDcxMDVkOTVlLCAweGVlMmJkM2NlLCAweDY5ZmRjMWIxLCAweDQ5NTBlZjMxLCAweGE4ZjBmNzgzLCAweDBmZmVmMTg1LAotCTB4MzZlZTIxOGIsIDB4ZDY5ZWIxY2IsIDB4OWQ5ODFiNjYsIDB4MThiZGY1OTksIDB4NWYzZDBlNWYsIDB4ZmJiM2QzYmYsCi0JMHg2NmVjYmE1ZiwgMHg2N2QwNTdiYywgMHg5NzZmZDE5NSwgMHg0MGIxOTMyMCwgMHhlMmJkNjIxNywgMHgxZGY4YTJkZSwKLQkweGZlNDM1M2VlLCAweDRjN2RmOGE2LCAweGJiZjBkZjZiLCAweGIxNGE2OTY5LCAweDE4N2JkZTJiLCAweGJjMzdkOTUzLAotCTB4YmI4MDE0ZDksIDB4NGM2YWQ3YzgsIDB4ZmQwNWFmZDQsIDB4ZWFjOGM3YTgsIDB4N2E4Yjk5YzQsIDB4M2IyMzBhZTQsCi0JMHgzZGI4YTc1ZiwgMHhiMGIwNmE3NiwgMHhlMGU2N2RhNywgMHgyOGM2YTgzYywgMHg5M2U2MWM2NywgMHhiMDEzMjNiZCwKLQkweDM4YjRiZjNiLCAweDVmYjhhY2UzLCAweGMyYzc5YjBiLCAweGY5ZTFlOWU2LCAweGFiZGUyYmMzLCAweGIxMmQ3YjQwLAotCTB4NTMxZTdjMzUsIDB4YmJkMzBhNDMsIDB4OGFjYTJmZWIsIDB4YWQ3YWE2M2MsIDB4ZWE5MWYzMGYsIDB4YmYxNWVhMmYsCi0JMHhlMmUxNDg3ZiwgMHhmM2VhMDQzMSwgMHgwNzFhMGNjZiwgMHgxYzQwNWJlYiwgMHg4MmZmYTE2YiwgMHgxM2M0MzE3NSwKLQkweDNjODg5N2E0LCAweDdjM2QzNTY2LCAweDY4ZGZmMWNkLCAweDMwZWQxMmQ1LCAweGJhZWMwZmJjLCAweGZlNTdiZjUyLAotCTB4NWZiZDg3MjksIDB4NDY4YTQ4ZjMsIDB4MWU2MWExZTQsIDB4MzAzN2I1MzEsIDB4ZjdlZWE3OWUsIDB4N2NlYTI5ZWYsCi0JMHhlN2RlM2YzMywgMHhkYjM3Y2ZlYywgMHg3N2M1N2U1MywgMHg5NjJmMWExOSwgMHgxYmMxZjIyYiwgMHhkNzE4NzhlOSwKLQkweDJhYWM3MTc4LCAweDRiY2Y5YzFmLCAweDAyOWJiM2U3LCAweGUwOTE2Njc5LCAweDViMzI3NWZmLCAweDkxZTQyMzU3LAotCTB4Y2VmZjA3YzUsIDB4OWRmMDI5ZTgsIDB4ZTYxNzllMDQsIDB4ZjhmMzg1OGYsIDB4Zjc4Yzg3NmMsIDB4YTIzZDlmOWQsCi0JMHhjYzM1YjA5OSwgMHg1YzM5M2JiYSwgMHhlMmQ0NGZhZSwgMHg0N2MxYjkzOSwgMHg3Y2MyNWI5YywgMHhmNzEzZjQ1ZiwKLQkweDNjN2RjNDE5LCAweDU1NzZmYWY1LCAweGZhYzBlN2Y4LCAweDdlNjU4YzQ3LCAweDJmM2NmNTYxLCAweDc1OGFmODcwLAotCTB4N2MzMWIyZWYsIDB4ZjE0YWJlMzQsIDB4MmMyOGY5ODEsIDB4Y2Q5Nzc3NGYsIDB4ODNmOTE4YmYsIDB4NGZlNzg5NDUsCi0JMHg3NjNhZDk5MiwgMHhjNGNmZTJkZCwgMHhjYzg5OWNmYywgMHgwZjQ0OGVhZSwgMHg3ZmRkNThmNywgMHg5YTZlM2Q0NSwKLQkweDQ4ZDU3MjA5LCAweGIyNTliNmE5LCAweGFiYjc5ZDA0LCAweGVlMDA0M2QxLCAweGExYWYwMmIyLCAweGJiNjNkNzcwLAotCTB4NjNmM2Y3OTgsIDB4N2U3ZWRjZWMsIDB4NjE1MzlkOGMsIDB4YThmZTdjMGYsIDB4ZjQwMWY5OGMsIDB4YTBhNDliNDAsCi0JMHgwOWNmZmIzYywgMHhkZTdjMGI4YiwgMHgzZmZlYTEyNiwgMHg0YWM4NGRkZiwgMHg2ZGU2NzdjYSwgMHhlMmZhNjNhYiwKLQkweDc1MzFjMzUzLCAweDlmYmY3ZTA3LCAweDU0Nzk5N2YyLCAweGNiNGNkZGRlLCAweGYxNTQ2YmY5LCAweDA4NTc2ZTYxLAotCTB4ODM3MGJjMzksIDB4MWIyMWRlY2EsIDB4M2NjNjRiZmUsIDB4Mjc5NDY2Y2YsIDB4MWNhZTdmOGIsIDB4YTRkYjc0YmYsCi0JMHhlYTdiZTBjZiwgMHg0YWZhMzYzOCwgMHg3MWZjZmRhOSwgMHg0YmNiZDcwYSwgMHg4M2M4Mjk0OSwgMHg0MmZhOWZiYiwKLQkweDdjOGY2YjFmLCAweDdlNTBjZTFlLCAweGYwMzA2ODNiLCAweGRkOTYyMzVkLCAweDJmMmMxNjJkLCAweDQxYmIzOGE2LAotCTB4ZGQ1M2U4M2UsIDB4N2JkN2MwYmQsIDB4YmFmMDYxZGYsIDB4Yzk4MTdmNTAsIDB4MzliY2I4MGIsIDB4ODRiOWY4MTIsCi0JMHg5MzMwY2VmMiwgMHg4NDFmNzljNSwgMHgyZTE0ZWM3YiwgMHhmYjkzMDMwNiwgMHgzNWZkZGM3MiwgMHg1ZTk1NzE5MywKLQkweDdlMTE4YmE0LCAweGNhMmIxY2NiLCAweGQwMGE0NzIzLCAweGUzNzNjMjdmLCAweDEzZmMwMDI3LCAweGMyNzE4YjlmLAotCTB4N2I5N2Q2YmUsIDB4YzM3ZjA2OWYsIDB4ZThkMTU1ZmEsIDB4NTgxYTM1ZmYsIDB4N2I2NzM5OWMsIDB4YzBlYzA2YjksCi0JMHhmYjQ5NzZlYiwgMHhkNGQxZGZjMSwgMHhkZTE3MmFiOSwgMHhhM2Q5MzAxNywgMHhhZTIxM2YzMSwgMHg5MzE2NWU3MywKLQkweDA5M2JlYzczLCAweDgwMWRhZWFkLCAweDU3YjgwNGNmLCAweDNlYjVkNzQ3LCAweGY4YzI5YmNiLCAweDFhODNkMzM4LAotCTB4MjU3YmNjMzksIDB4M2RjMDdmZmIsIDB4MzIxYmNmNmIsIDB4YTBiYzgzZGUsIDB4ZDdmY2Y5NjUsIDB4OTE1Zjg2MTMsCi0JMHgwZWRmMDUwZiwgMHgyOWJhZjdkNiwgMHg0MGQwYzhkYywgMHhjOTc2ZmFmZCwgMHg3N2M1OGJhNywgMHg1MTVlMzAyNCwKLQkweDM0OTdkYWJmLCAweDZmZDFlNDEzLCAweGU5ZWYxOGI0LCAweDUyZWZkNzVmLCAweDIzYWUyMDJiLCAweGM5NGNkMGU0LAotCTB4NWM0N2ZjYzIsIDB4YzQ0ZTlkOWYsIDB4YWExNzE2M2YsIDB4OWQzMjc0ZTUsIDB4NjMzM2IxZWIsIDB4MTNlNzdjMTgsCi0JMHg5YjhjMjY0NywgMHgxYWIxMjQ2MSwgMHg1NjY2OTQ3YSwgMHhmZWUwOTdiNiwgMHhkMDU2NzRlYSwgMHgyMzdjNDQwNywKLQkweGRlMTExZWIyLCAweGI0ZjhkM2VmLCAweDk0YzdkZDk5LCAweDI0YzA4NmZhLCAweDcyYTdjMTY3LCAweDNhMzdmMzg1LAotCTB4YzY5ZGM5OTUsIDB4NGI4ZmNjMjEsIDB4YzQyNzExMDYsIDB4MWQ1ZjFhZDMsIDB4NzJlYzA1YmEsIDB4ZGI4YjM0NDMsCi0JMHg4NDY0YmU1MiwgMHg4MTBlNTZmNywgMHg1ZWZiYTZiYywgMHg3YjE0NGFmNiwgMHhjN2RjNDMzZiwgMHhlMTBiMzhiNiwKLQkweDRkNTM2MzdlLCAweGI3ZGUxMTQ2LCAweGVmODdkOTNhLCAweGZjZThmNDIwLCAweDI5N2U3ODk5LCAweDRjYTg5MWJmLAotCTB4YjZkMzczYmMsIDB4Y2U5NGI1NWIsIDB4M2VhOGQzMWIsIDB4MzY2YmViNDYsIDB4MGI1NWJjZWQsIDB4ZmRiMmU0ZjcsCi0JMHhmZWI0MzU4YiwgMHg1OGI3YTZmYywgMHg0ZmZlZjVmYiwgMHhhNmYyZmVhMSwgMHhjOGJkYWMxMywgMHhmNWE2NThiZiwKLQkweDYxM2U5YjYzLCAweGE0ZDA2MGVkLCAweDRkOTdmMjExLCAweGU4N2FiN2RkLCAweDVjYWQ2N2ZjLCAweGYxZjg3MWRmLAotCTB4ZGVlMzZhMWUsIDB4N2Y2MDlhYTEsIDB4OGNhOTliZTIsIDB4NjI4ZDlkNWYsIDB4OTE2NmNlZmQsIDB4ZWYwMDM1YjksCi0JMHg1ZmZkZjBkYywgMHgyNGYwZDU0OCwgMHhjNTJjMzY4ZCwgMHg5Mjc4YzU3ZSwgMHgyMmRjN2UxMiwgMHhiZjE5NmUzZSwKLQkweDg2MjYzYTg3LCAweGYxNjI4YmFjLCAweGM1MmM0ZjI5LCAweGExY2VjMWMzLCAweDk4OWI1ZjE4LCAweGYzNzBlMzZhLAotCTB4NjIyNTNiZTMsIDB4MzE0ZjAxMWUsIDB4NWRlZWY4OWYsIDB4YmU1OTk3MjAsIDB4OWU3MDZkNWEsIDB4N2YxY2RkZmEsCi0JMHhmMDZiM2JmNCwgMHhlYzljODMzYiwgMHg0NjRkNjZmZSwgMHhlMjhmZTAyMSwgMHhhNmYxY2I0ZCwgMHg3Yjg5YmMwNSwKLQkweGI1YWYzMGRmLCAweDcwZmZmOTAwLCAweGJjMWY1YmYwLCAweDA1NjdmYjQ0LCAweDkzYTZhZGQ2LCAweGE3YzY1NDk2LAotCTB4YjhiMmI1OTcsIDB4MDczNTlmNjIsIDB4MGM0YzY5ZTksIDB4NThhMmY3N2YsIDB4MWM2MzhmYjksIDB4NWFhNjZmMGUsCi0JMHgwMTA3M2RmOSwgMHhiZjA5NjRhZiwgMHg5OGUxY2FkMywgMHg5MzUyMWZlMSwgMHhmZGY3Y2RmZiwgMHg3N2NmNWYzMCwKLQkweDdjMjBlZmJkLCAweDhhZmRlMTM5LCAweDZkZDcxZDgzLCAweGIxYjFmYjY1LCAweGNmNGE1NGJjLCAweDFlZjNkNDM2LAotCTB4NzY3N2NjNTYsIDB4MTk3YzZhOTUsIDB4NWZiMDkwM2QsIDB4N2Y4ZTBlNWIsIDB4MjA3N2JmOTAsIDB4NzE4MmYzZGUsCi0JMHgzZjRjMDU1OSwgMHhkYzU1YmQwNSwgMHg5YjllMjdkMywgMHhiNGZmYjA0OSwgMHgzYjdlM2VmZiwgMHhkODFiMzdiYiwKLQkweDdjYzVhZGU3LCAweDRmYmUxNjlmLCAweDU3YTdkYjBiLCAweDc4ZTRhZjQxLCAweDczNTRlNjVmLCAweGMzZjcxZDI4LAotCTB4YmNiZTdmYmYsIDB4ZTI5ZjNlMjIsIDB4MGY5Yjg3OWMsIDB4YmMyNDc1Y2UsIDB4ZjFhZWZjMWMsIDB4ODJhOWQ2MjIsCi0JMHg1NTljM2Y2NywgMHg4NGYwMTNlYiwgMHhmMmUzOGRmMywgMHhkNjI5NzQ5NCwgMHhmM2E0NzJmOSwgMHhiZjJkZjU5ZCwKLQkweDM1YzZjZTU3LCAweGY3ZTU4MGZjLCAweGFlOTJiYjEyLCAweDY5NjU3NjFiLCAweGM2MmU3ZTIwLCAweDJlY2YwM2U1LAotCTB4M2ViZGY4MDksIDB4NjA3NmU1NGIsIDB4OTA4OGM5MDYsIDB4MzUyZTc3OGYsIDB4N2YwY2JmYmMsIDB4YmQ4MWRiNTcsCi0JMHhhY2VmOTY1NiwgMHgyNmY0MDdmNiwgMHgxMDljYmEzYSwgMHhlZWNmM2E0NywgMHhmOTUyOGY2ZiwgMHhiMjllMjAyZiwKLQkweDE3MTgxNGQzLCAweGZhY2EyZjkwLCAweGJmMDYzNGM4LCAweDFmNGJmZjUwLCAweDM2MmQyZmRlLCAweDc3NjhiYzU0LAotCTB4MzFlZWJiNTAsIDB4YmZjMDZkY2QsIDB4ZWUyYWUzOGIsIDB4OThmNWEyYzksIDB4YzA2ZGRkMzQsIDB4MmJkMzhiYmYsCi0JMHhmY2EyYzhiZSwgMHg2N2E2OWNkYywgMHhiZTJhMWJmNSwgMHg2M2ZhODZjOCwgMHg4YzdmZDY3YSwgMHhmN2UwNDVmMywKLQkweDZkYmZhM2M0LCAweDhmNDA2YTZjLCAweGIzYjM0ZDg4LCAweDFhOTU1M2ZiLCAweDVmYWJmZjdjLCAweDAxOWRmOTdmLAotCTB4ZDcwMTE3ZjUsIDB4NDFiMTY1NDgsIDB4NGUyZTFjZDMsIDB4ZTgyNjljOTUsIDB4Y2ExM2M1ODEsIDB4OTBlZDdmZTAsCi0JMHg3Y2VkYzRmNywgMHhlNzYxNTZiZiwgMHhmYmIyYzZmNywgMHhmZWZiYmRiNywgMHhiMjI3Zjc4NiwgMHg2OTE5ZGNkMywKLQkweDMxNGQ1ZDc0LCAweDY4YjI3M2RkLCAweGZiY2M3NTdkLCAweDljOTJhZjE4LCAweDNmMDEwZjU0LCAweDY2NDJkZDg3LAotCTB4ZGQ0YWY1ZDEsIDB4MmZhMDVkZWIsIDB4NDYxY2JiOTEsIDB4ZmI5NWMyMmQsIDB4MzE0ZGUwN2QsIDB4NWU1N2JmMGEsCi0JMHhlOTdkY2RmZCwgMHg1ODJlMzNlYywgMHgwN2NlNDhjNywgMHhmYWZkNWU5YSwgMHgzNjczODgyYiwgMHhjMDM5MzU5ZCwKLQkweDczYjIzZTJkLCAweDZmYTAzZGQzLCAweGYzN2NlYzhkLCAweGQ5ODcyNjZiLCAweGVlYjEwZjdkLCAweGEzZDdlMDkxLAotCTB4MTg3NTk3YmYsIDB4M2IyM2ZkNzAsIDB4ZmQwNDViYWYsIDB4MzNhMWZkNDcsIDB4YTZlNGU4MDcsIDB4NjA1NmJlNTMsCi0JMHg1ZWZiYmQwYiwgMHgxZmRlNTc0ZSwgMHg3OThhZWNmZCwgMHg0ZGUzMTE4YywgMHhlODlmMWUwMiwgMHgxNDk5ZTgwOSwKLQkweDc4MzMzNzFlLCAweGFiN2NjMjVjLCAweDZiNjNjNDllLCAweDJiOTdhOGZkLCAweGJkNTBkM2VmLCAweDE3YTZlMzFkLAotCTB4ZmMwM2I0NDgsIDB4YjM1ZWUyZjgsIDB4YjI3ODVmZGEsIDB4ZmU4ZmVlOWEsIDB4NWQxZjUzN2UsIDB4M2NkZTkwNDEsCi0JMHgzMjkxYTJlNiwgMHg5Y2JkNDA5MiwgMHg0YWY1MTU1OCwgMHg3ZmEyYWE2MywgMHhkMTRiMjU5NSwgMHgzYWU1M2UzZSwKLQkweDdiNDRmYjQ1LCAweDI5M2VhMmExLCAweGZmYTJhNDc3LCAweDQ1NzI4ZTZkLCAweDg5YjJmNmZkLCAweGNlZDVmZThhLAotCTB4ZDBiZDQ1NmEsIDB4M2ZlOGFlZDcsIDB4YjI4NzQ4ZmMsIDB4MDE5MTM4ZmQsIDB4MWQyNzQ1MGYsIDB4ZjkyY2EwMDcsCi0JMHhjNzZlODlkOCwgMHgwN2NkMzNkMiwgMHgyNWY5MWNhMCwgMHg1ZmRhODcwMywgMHhmNmM1ZTM3YSwgMHhmMGJiZjAwMywKLQkweGM3ZWZhYTk3LCAweDM0ZTlmZjA4LCAweDg3ZDVlNGQ5LCAweDY4YTY5M2Y3LCAweGYyNWU3OTY5LCAweDM1OTEzZjIzLAotCTB4MmQ4YzdlZWMsIDB4ZTAyZjdkZDYsIDB4MTk4ZmRjNGQsIDB4OGE1MmZlMDMsIDB4ZTdiOWFhODQsIDB4NTlmMGJkZDksCi0JMHgxMjc2NWZjYywgMHg2OWZjMDMxMCwgMHg3Y2ZkMTliYSwgMHhjZmNkNzUyNywgMHhiZGM1OTlmZiwgMHhiYmRmMDAwNywKLQkweGIxNTZhZmE5LCAweGRkMTczMWVmLCAweDkzOTc3ZDhhLCAweDJkM2MyYTY1LCAweDJjYWJkNDU3LCAweDFmZjQ1MDNmLAotCTB4ZDE0YWIyOWYsIDB4OTBmZWQxM2UsIDB4MmIwZjRmMGEsIDB4MzYzOWI3ZWEsIDB4NDViNGYwYTksIDB4MjhkZmE3ODUsCi0JMHg3MGVkZmJkYSwgMHgxNTdhYmZlZSwgMHgxY2I0NGVmYywgMHgwNGFhZWZlZCwgMHhhNjdjZGMzYywgMHhkNjUxZjEwZiwKLQkweDc4MDk1NmQ1LCAweDNiNjRmMWJhLCAweGU3ZDhhYmUyLCAweDU5NzYwNGFhLCAweDAwZjlhNDdhLCAweDdmNmEzZTk0LAotCTB4NWFkN2I4YzEsIDB4ZDgzY2IwNTIsIDB4ZDVmZjQ3NjIsIDB4MmM1Yzk2ZTEsIDB4ZjAzOGI0OGYsIDB4OTRiN2RmZjcsCi0JMHg4YjU2Zjk2MSwgMHg2Y2ZmY2IxMywgMHg1NzY1ODA5OSwgMHhmNmNiMGI4YiwgMHhiZmVjNzY5NiwgMHhmOTgzYTViMywKLQkweGRmZmJlMmJmLCAweDdlMDAxODE1LCAweGJmOGQxZTgxLCAweDNjNTZlZTExLCAweGU0MzRkOGY3LCAweGZlZDEzZDlmLAotCTB4MjZhZmE4MWUsIDB4OTYzNmRlNzcsIDB4ODFlNzhkMzIsIDB4Y2M5ZDgwODksIDB4Y2VlOWEzY2IsIDB4YmY5NGU5ZDEsCi0JMHhhYzFjODVlZCwgMHg0MWZlNDA5MiwgMHgwODU5YzZiYiwgMHhiNGUxZjg3YSwgMHgwZWQxM2YwNSwgMHg1NTgxZTQyMCwKLQkweDk1OGIxNGFlLCAweDhlYjQ4ZGQ1LCAweDY0MzE4NmM4LCAweDE5OWM0ZmMxLCAweDI1MTA1ZTc0LCAweDcwNTg0YzE4LAotCTB4YTM3YmQ0MWIsIDB4YjRkZWZiNTgsIDB4ZjI3OWI3MDUsIDB4NjM3MTA3ZmUsIDB4ZTE3ZTQ4NjcsIDB4NzEzMGI0ZTEsCi0JMHhkOGNmZTdlMywgMHgzOWNmZTBjZCwgMHgxOWE4Njk3NiwgMHhmYjhjNzFlMCwgMHg1MGE0OWNiNSwgMHhlNTk2OGYzNywKLQkweGM4MWQ0MmRhLCAweGJkMmE5M2Q5LCAweGU0NTM5NDQ0LCAweGRlNjFiN2YyLCAweDBlZTM4ZDc2LCAweDQ1YmU2ZmNjLAotCTB4NmI3ZTgwNDcsIDB4OGFlZjY2MjQsIDB4OTlkM2RiN2UsIDB4OWI3YmQwYmQsIDB4ZTNhOWVkMDEsIDB4YmMyMmU3MWEsCi0JMHgzZGY1MjcxNywgMHg0OWVlNzAwMSwgMHhhOWNhM2VmYiwgMHgyNjVmNzM1ZSwgMHhlZDNiYWZjMCwgMHhkODllYWM3YiwKLQkweDA4ZTQ4NGY3LCAweDdjMThlYmFhLCAweGY3YmI0ZmRlLCAweGQ5Y2Y4NmJiLCAweGY4NTA5MmI0LCAweDU4NTlhNmY0LAotCTB4MWNlN2MwZGMsIDB4YWYwMDdhODAsIDB4MzY3NmFmMWYsIDB4ZGNhYzljNjAsIDB4NzFmNjE4MzksIDB4ZTc2MDY1Y2MsCi0JMHhmYmM2NjVkNywgMHgyY2ViNDQxMywgMHhiZmM4MjNiOSwgMHhjM2FlOTc1MywgMHhhMmUxNTM3MSwgMHg2NzM5ZjgxYiwKLQkweGQ1Y2U3OGM4LCAweDlkMjg3Y2YwLCAweDI3NDgxZmQ5LCAweDhmNGU2NzYwLCAweGI4ZTBiYjQxLCAweDU3MzdkZDg2LAotCTB4OWQyNjdmZjcsIDB4MTE3M2Q5YzksIDB4MGRmZDgzZGUsIDB4OTRjNTdiODcsIDB4ZDM3N2U3ODYsIDB4NDQ1NzdhZjksCi0JMHhhZWJkZDRlMSwgMHhmNThmYThhMSwgMHg5Zjc4NGIzNiwgMHhmMzRjZjdiNywgMHg3MDZlZDY3OSwgMHhkYzYwOTA3MCwKLQkweDFmZmMyNjcyLCAweGYzYmU3ZjZkLCAweDkxZmViZjllLCAweDQ1N2Y3ZmY2LCAweDg4NjUwMzhjLCAweGRmODQ3YWU1LAotCTB4NzY3OWRlMGMsIDB4YTdmNTExYmMsIDB4MmEwMzM1ZDksIDB4ZTRjZTJlNDAsIDB4NjYzOWIwNzEsIDB4YzM4NjEyNmQsCi0JMHgzYzNkNTZiNCwgMHg1NGQwYjg5ZCwgMHg5MDQyOTZiOCwgMHhkNmE4NGUyYywgMHg0YjQ1NTNjMywgMHg4NWFmOTYzMywKLQkweDBmNDFhZWYyLCAweDlmMDllMWViLCAweDZiMWRiY2ZhLCAweGEwNmQ4ZDQxLCAweGY5MDRiODQ3LCAweDBiNjhmZjlmLAotCTB4OTVkY2Q3NWQsIDB4NzNkOTlkYjIsIDB4ZWIzYWFlNWMsIDB4ODcxZTUxYmUsIDB4M2NlM2RmYTAsIDB4MDEwMjg2YWYsCi0JMHhkMzY3ZDVlZCwgMHhmYjdmODUyNSwgMHg2MWFmMGU1OSwgMHhjYzdmNWNlOSwgMHgxZWVjZjkyNywgMHg2MDljN2Y1MSwKLQkweGVlZmI5YzM4LCAweDQ0ODc0N2Q5LCAweGRiMjgyMzg4LCAweDJlZjhmZWI5LCAweGZkNTZlNzdmLCAweGVlZjg4M2VlLAotCTB4YzdlZjFjNzMsIDB4NDEzMjk0ZjUsIDB4ZTRjMTljOWYsIDB4MTdlZDQxNDAsIDB4ZmVlODRiYWIsIDB4MWEyZDNhMGIsCi0JMHg2ZGNmZDM4YywgMHhiODc4MGRkOCwgMHhhOGYxYzFkMCwgMHg5ZTcwMWQyMywgMHhiZGU2NzhhNiwgMHhhYTRkMzk4ZiwKLQkweDkzNTdhMTdiLCAweDRiMmU4ZTk3LCAweDJjYmNiMDY1LCAweDgzMmFiYmY2LCAweDVmNTk2NWU1LCAweDQ1YzgyNTViLAotCTB4MmQ3ZDFmMjEsIDB4NmUzZjM5NGIsIDB4YjA3YTNlNDYsIDB4MGZkNjI1NjUsIDB4M2NiMDc4YjcsIDB4ZjM4ZWIyZDIsCi0JMHg3ZjZjMzZlMywgMHhjZTUxZTVhYiwgMHgxZjljYmQ4ZiwgMHg3N2JmODMzZiwgMHhmOTYyZDRiNiwgMHhjYjFiOGI2YSwKLQkweDMzZGNlMzA3LCAweDNlMjI2ZTAwLCAweGM2ZThkNTM5LCAweDliNDNkMWJjLCAweDVmZTIwNDBjLCAweDk4MGQzYTE3LAotCTB4YzQ0ZjQwOTcsIDB4NDAyNzhmMTMsIDB4ZWYwMThkZGUsIDB4NmZmM2E5ZjUsIDB4OWZiZTdjZDQsIDB4YjdkZjQyMWUsCi0JMHgxODllOWM1OCwgMHhmYTAzMzc5NCwgMHhmNGM4YzBlMiwgMHhjZGQ4OGM3NCwgMHhlZGZlOTdjMCwgMHgwZjkwNTdmMSwKLQkweGNkZGJiMzFkLCAweGE0Yjc0ZmEwLCAweDM4YmNhMjc3LCAweDc1OWJiNGU2LCAweGJjNzllZWI0LCAweGVkYmJiNTkzLAotCTB4YWZhZDAzNjYsIDB4ZGFjN2RmNGEsIDB4MTQ3Mzc2M2QsIDB4N2M3ZWFmYWQsIDB4MTJmNzZiMWYsIDB4ZjgzZjIyMGMsCi0JMHhjN2M4NmJmOCwgMHgxMDc0ODljYSwgMHgzMWE1NDdjZSwgMHgxNzE1MmM2YiwgMHgxZjk3NWU1NCwgMHgzZTMxNzM4NCwKLQkweDM4NThkZTY1LCAweDNkNzI1ZjE3LCAweGQ1N2RhMjdkLCAweGNhNGZhODQxLCAweGFiODVhMmRkLCAweGUxNTM0ZWRmLAotCTB4OTE1NzE4MWEsIDB4NzE4NWFkNTAsIDB4YWY5NjMzNjMsIDB4MDZlMzcxODEsIDB4MWUwZGFjM2QsIDB4Yzc2ZjIxMzcsCi0JMHhlYWRmYTgxYSwgMHhmZDA1YTJkOCwgMHhjN2NlNGJmNCwgMHgyZWEyM2NjNCwgMHgxNjlmMDVkYSwgMHgzYWMzNjBmOSwKLQkweDBhMGYyODVkLCAweDBmMjg1YzNhLCAweGE2MmE1YzA0LCAweDdlMDAzZjU2LCAweGM5MGVhNmM3LCAweGE2M2FjMTIyLAotCTB4NzFjMWZkNGEsIDB4ODQ2YmE1YzgsIDB4YmYyOTIyZjcsIDB4OGVmZTk4ZGUsIDB4ZDcxZDE1NzksIDB4YjExYmY1MDQsCi0JMHhhNjU1OTNmZSwgMHg2ZjdmOTRlZiwgMHhkZjIzMGY0ZCwgMHgwZWYzZjA0ZSwgMHhiYmYyMWVmMiwgMHgzYmQ5ZTg0ZiwKLQkweDVjMDM1ZjFkLCAweDliOWVmMDRhLCAweDI0YjVkZjE5LCAweGUzZmEzMzZlLCAweDNkODMzNjQxLCAweGI2OWU3MjA0LAotCTB4MTk2NWU3MGYsIDB4NjQ1M2ZiOTcsIDB4Y2VmODc2ZTcsIDB4YzNmOTkxOGIsIDB4YWJmY2ZjY2IsIDB4Njg0NDRkZWUsCi0JMHg0ZjYxZmNlNywgMHg0YmQ5ODViYSwgMHgwNjg3NWRmYywgMHhkMDdlODZkMiwgMHhhOTk3ZTVhYiwgMHhmOWQ1YTFmMywKLQkweDU5ZmYyMjE2LCAweDRmNTE1ZjlkLCAweGExMzA3YmQ4LCAweGRlZWNjZTc5LCAweGIzOWU0ODZlLCAweDE5YTJhYmIwLAotCTB4NWUwNWFkM2YsIDB4NzhmOGU5NDMsIDB4MDk1N2NmM2EsIDB4YWJjOWMzODUsIDB4Mzg2NGUxYzAsIDB4ODdlYzg0MzgsCi0JMHgyZWVmMzE3OCwgMHg3NGM2ZmYyNCwgMHhkZWFjZjExYywgMHhiMjI3NzExNywgMHgzZjg5MzZmNywgMHg1ZDA0ZmVlYywKLQkweDhkYWZlZTg0LCAweGUwY2I1ZmMxLCAweGIzYmJmNTRmLCAweGI5YWFlNzgwLCAweGFiN2UwMjY2LCAweGM3ZjNmZTYwLAotCTB4MzUxZmYwMmIsIDB4ZjhhZWZiNWYsIDB4MGRiOWI0ZTUsIDB4NTA4MGZkZWMsIDB4MWMzOTc2M2UsIDB4YzJmNzEzMWYsCi0JMHg1M2QwYTVkNSwgMHhlNDFhM2VlMSwgMHgzNDNiYzIwMSwgMHg0YmVmZTc2MCwgMHg4MDY3NDc3NiwgMHhmN2QxNTY3ZSwKLQkweGQwZWMwNjk1LCAweGYzN2VmNjA0LCAweDljZGI5YjIyLCAweGU5MjJlMTQxLCAweGM4ODE3ZTU5LCAweGYxYTMzZGMzLAotCTB4YjZmNDE2ZmMsIDB4YzllNmNkYjQsIDB4YjA4MzJmYTgsIDB4NGFjNzY3YTAsIDB4N2UzZmUwZWIsIDB4ODc4YWVhZDYsCi0JMHhhZmQ3MjQ3MSwgMHgzYTA3N2UwZiwgMHg3YTY5OWU1MiwgMHhhMTdmOTMwNiwgMHg1ZmU0NTEyNSwgMHhmYWY5NmVmNiwKLQkweDhhMmZkZTlhLCAweDc5MmE4ZjA0LCAweDQxZWUxZmI0LCAweDQxOGIyODVjLCAweDExMmRkOWY5LCAweGRiM2ZiYzFmLAotCTB4N2E4NDllNWQsIDB4YmQwMGY3NGIsIDB4ZGFlZmNhMTYsIDB4MzAxZWVlMmUsIDB4ZGI1N2U3MDQsIDB4NjVhOWRkYzcsCi0JMHg3MWRkZjY0NiwgMHhkMGVjYTAxMywgMHgwNzlkMWZiYiwgMHgwNjkxZTBmZSwgMHhjZGJjOTM4YywgMHhjNzI3MGZmMywKLQkweGI3YzNmY2IwLCAweGM5ODBmZGY5LCAweDAwNGE1ZTFmLCAweGY2NTkzOGY5LCAweGExNDgxNTI1LCAweDFiZjc3Njc2LAotCTB4MDVlYzJhYjMsIDB4ZGQzNmY2YTEsIDB4ZWZkODU4ZWYsIDB4OTc2ZWVjZDUsIDB4NjAwNmNiYjEsIDB4ZjVkZmRiNTUsCi0JMHg5MDIyYmYyYiwgMHhlNTZhM2RlNywgMHhlM2Y5MDIyNSwgMHhiYzdiNzNmZiwgMHhhNGY1MTMyYiwgMHg5NTMzZTRhYiwKLQkweDQxNWI3OWY1LCAweDg5NzMxOGZmLCAweDIyOGUzOWU1LCAweDk1MjVjZTJjLCAweDliZjJjOWJkLCAweGRiYjZhOTc4LAotCTB4YmRhODY4ZTcsIDB4YTc2YTFkOWUsIDB4YTVmZDkyY2YsIDB4ZDQyMWVmNTAsIDB4ZDgwOWNmNWUsIDB4Mzc0ZWMyZWIsCi0JMHg0NWJmOTYxMCwgMHgzODA2ZjdlZCwgMHhkZGI5ZTcxNywgMHg4ZjEzMzE0ZSwgMHg3YzNmMjE3OSwgMHhjODdkY2U2ZiwKLQkweDlmMzBhMjE3LCAweDhmOGVmOWUzLCAweDdmYWQ2MTEyLCAweGM1ZmM0YWU5LCAweGJkMDBmNjJiLCAweDIyYmU1OTM3LAotCTB4ZjVmYTc5YzEsIDB4YzEyMGJmMmIsIDB4NzM3NWJjZWYsIDB4OGU5Yjc3M2YsIDB4ZmZhYTQzZGQsIDB4OGE3MjhjYTcsCi0JMHg4MDc1YjVjYSwgMHg5YWYyN2FhNywgMHg3OTIwZWVmZSwgMHhhYmZmZGE0YiwgMHgyOGMzZGUxZiwgMHgzNTg2YWJmZiwKLQkweGI0ZjViYzgxLCAweDdlZDI3NjRjLCAweDIyM2VkY2Q1LCAweGFjNzZmOTFlLCAweDMyOTI3YjczLCAweDI4OWVkNjQ2LAotCTB4ZWFjYmJmZmEsIDB4MTNmZjQ0MDMsIDB4YmJmNDlkOTMsIDB4OWRhMmE5ZDUsIDB4ZDc4ZWJmOGYsIDB4NmM3NmVlODksCi0JMHgwZGYzMTJjZiwgMHg2YjMzNzU2NSwgMHg3MmY4Y2I2ZiwgMHg4MjMxZTgzMiwgMHhlMGNjNmZiZiwgMHg0N2JmOTFmMiwKLQkweDYzZmRmOTQ0LCAweGNjNTc4OTE5LCAweDczYjY1MWJmLCAweDFmZGUyMDc5LCAweGM0ZTFmYWFhLCAweDZlNzBhMzk4LAotCTB4YjVjYzI1ZGIsIDB4ODc1ZmJmYWIsIDB4YjY3M2ZiZmUsIDB4ZjdlMDgyZjYsIDB4OGU5ZTQ1NGEsIDB4Nzk4Y2QyYWIsCi0JMHgwZDJmMGQ1MywgMHgyMjc0MGFkZCwgMHg4MTI3OGY5YiwgMHhlM2M1ZDJkZSwgMHgwOWIyNTVmMSwgMHgzNjE3MmVlMywKLQkweDQ5MWViZTMwLCAweGYyYmM1YmVmLCAweDQyYmUwNTE1LCAweGMwZmJmOWRhLCAweGRmYTQ5ODE4LCAweDY0OTNmZjNiLAotCTB4YTBmMzNlZjYsIDB4ZTgwYmNjMmUsIDB4ZGUwYzdjZTAsIDB4YzM3Yjg0N2IsIDB4MjEyYmZmMjIsIDB4NWVjMTM4ODcsCi0JMHg4YTM5Nzg0ZSwgMHg3MWY5NTNiZCwgMHhjNWRiZjIxNywgMHg3NjdmMzMyZiwgMHgyODAzYTZjMywgMHg3NmNiZTZkZiwKLQkweGM4OWQyN2Y0LCAweGYwMGFiZjc2LCAweDBkNzczMWU5LCAweGNhZjgzOGMxLCAweDNmNWQ3MTU3LCAweGRjNzg1YmIyLAotCTB4MTgyZjJmYWIsIDB4ZTE0Mzg3OWUsIDB4YzBhYmZiZmYsIDB4NGFmZmY3ZmYsIDB4ZmM4MmVmZjgsIDB4YmI3M2UwMzIsCi0JMHg0ZGJlZDBhMywgMHgwZWY1ZmFkNiwgMHg2NDllNmI4OCwgMHhlNzllNWNlZiwgMHhmYWVkMmI3MCwgMHhmODE1ZGYxMCwKLQkweGQzYjMwNjY3LCAweGRjNTgzYWUyLCAweDg5NjVlNDQ2LCAweGMzMzNmZWVmLCAweDFlNzRlY2NjLCAweDc5YTg2OTFmLAotCTB4NDdjNDM0NmIsIDB4YzRjNmZlMDQsIDB4NzdmMDc2OTAsIDB4MzgzODNjNTMsIDB4MDc4MDFjMWUsIDB4OWM0MGVmMDEsCi0JMHgwYWNiOGU4NCwgMHhiMGFlZDc5ZSwgMHgyM2RjMDUwZiwgMHg3ZDM1NjM5ZCwgMHhlM2FiNzU4OCwgMHgwZTk5NzcwNiwKLQkweGVmN2UwMDk2LCAweDg0Nzk4NmZhLCAweGIwYjRjZmRmLCAweGNjN2ViNGY5LCAweGYwMTFmYzEzLCAweDFlMDBjNGNhLAotCTB4ZWY5NDAzNzUsIDB4NDZiYzUxODAsIDB4MjJiOTI4MGQsIDB4ZmZlZDk1ZGUsIDB4YzM1Nzc4Y2IsIDB4ZjNkNjVkNGQsCi0JMHhmN2ZhOTgzOCwgMHhmZjM0MDNhMSwgMHhiZmZjNzBhYiwgMHhkZDlkNWZlNiwgMHgzZWQxNWZiYywgMHhkNzFiZTU3NywKLQkweDdlMTU3ZmU0LCAweDFmOTU3ZmQxLCAweGY1ZmY5MjM2LCAweDE2ZWU5OTJmLCAweDJmYzliYmEwLCAweGZjNDBkMTJlLAotCTB4ZmZiZGY2ZTYsIDB4OGIwMTNiYzgsIDB4NWUzMDNiZjcsIDB4Y2JkZjBmNzQsIDB4ZjZmZmEzMTcsIDB4OWU5NDdkZmUsCi0JMHg3ZTY2NjhiZSwgMHgzZmZiNTNhOSwgMHg0M2YzZDlkNywgMHg0NWY2NjNlOSwgMHhlODgzMzg5OSwgMHg3N2NhZjY2YSwKLQkweDY2OWYyMDc0LCAweDVjMjJjZDUzLCAweGE3MGQ2YTdjLCAweGExMjdjYzI3LCAweDQ4ZDZhMDdjLCAweGZjZjQwOTc0LAotCTB4ZjdiMmQ2ZDcsIDB4MTAyMTZiYTUsIDB4ZTdkMmMzNjMsIDB4YjU5M2VkYTYsIDB4YzdlZjA3YzQsIDB4M2ViNDliNTYsCi0JMHg5NDg3YzYwMywgMHhmYzBkNjFmNywgMHg2ODZhNTk3ZCwgMHhjYWM1ZWUyYSwgMHg5ZWYzMTk0ZSwgMHg3MTYzMjhlZSwKLQkweDc2YTYxOWE1LCAweGZkMzhkZmJjLCAweGY3ZjNlYWM4LCAweGUzNWRkOWMxLCAweGJhNzk2MTI5LCAweDlmZDI3ZWUyLAotCTB4NWUyNGRmMzQsIDB4MzdlNDA2YjQsIDB4MWUyNTlmZjgsIDB4YzNhZTVjODcsIDB4NWM3YWE0MzgsIDB4ZmU3NjAwZWQsCi0JMHhjYjEyY2IyNiwgMHhmMmMzZDgzNywgMHhhNDc5YzRkNywgMHgyODYyM2JmYiwgMHhmMGYzNzk2MiwgMHhiMzc1NmFjZSwKLQkweDAwYjQzN2NlLCAweGE4ZmQ4ZmY0LCAweGFkOTUzNDdmLCAweDM1M2MwMDJhLCAweDMwM2U5NThkLCAweGMwZjQwNDE0LAotCTB4YTI1Zjk1YTYsIDB4YzdlNmEzN2UsIDB4ZmQ1YWYyZWEsIDB4MWNiN2VmNTAsIDB4ZmExMTdhNDEsIDB4MWYxNmE5ZTIsCi0JMHhhOTdlZDVkNiwgMHg4YzdlNjM1OSwgMHg1ZjkxOWM3MSwgMHhkNDcwYmQzMiwgMHgxMTg5ZTcyNSwgMHg2ZjZmNmZmNiwKLQkweGQ4NGIzYjA5LCAweDRlM2I2YTVkLCAweDVlZjEwYmYwLCAweDBiMDBmYjVjLCAweDc3YzZiYjkzLCAweDVhOGZmYmQ4LAotCTB4NDAzNGJlNTYsIDB4NWYwNTc3MjksIDB4ZWY3NjdjYTUsIDB4NGE1ZmU0MDAsIDB4ODdjNDFiZmUsIDB4YzU1ZmZkYjEsCi0JMHhkZjc0MDM4NywgMHg0ZGZmMDBlYywgMHg2ZjdiMDY2ZCwgMHhmNWY3NGQ1ZCwgMHhhYTdlNGMyOSwgMHg5NGFlNWRlOSwKLQkweGQzNTE5ZjUxLCAweDNiZjNhMGJiLCAweDdmZDA1YjlkLCAweGQyYzYwYjM3LCAweDkyNmFjYzc1LCAweGM5ZDU5ZWYwLAotCTB4ZDdiYzFlOTcsIDB4ZGRkMDk3NDgsIDB4ZTI5ZDMzZmUsIDB4NDg2ZmJjM2QsIDB4ZTA3MmExZjcsIDB4YmUyM2I0NjMsCi0JMHg1ZDIwMWNiNSwgMHgzM2ZlZWNkMSwgMHhhODRmNDdjMywgMHhjMGEwYmQxYywgMHhiZDFjYTg0ZiwgMHg1ZmM0YWZmMCwKLQkweGY5Y2ZmZDk4LCAweGYwOTA3Mjc2LCAweGM4YmI3ZjNjLCAweDZiMjM5ZmYzLCAweDI2ZGNmN2Q4LCAweDc5MGEwNzk2LAotCTB4NzY1ZWJkNjgsIDB4NTY2OTZjMmYsIDB4NGQ3ZmJlMWIsIDB4ZTA1OGIyMGQsIDB4YzlmNmNiMjMsIDB4Nzc4YjNkNjQsCi0JMHhkZTgzNTM2OCwgMHhiZTI2ZWEyYiwgMHhlMDQ5NDc3NywgMHg5YmY5NjI0ZiwgMHhmN2IzNDY0YiwgMHg5YTc5ZDQzZSwKLQkweDkxYjNmZjIyLCAweGI0Y2JiYjhmLCAweDU0Nzg4ZjRiLCAweGU2MjQ0M2JkLCAweGQ0NDNiZjUxLCAweDY3ZmM3YTM4LAotCTB4ZjdlN2ZmMTgsIDB4MGZlZmQ1OGIsIDB4ZjllNGNhMGQsIDB4ODhhNDQ1OWYsIDB4Y2NhZmM3YzUsIDB4NWU0MDdhYTcsCi0JMHg3YjhkZjkwNiwgMHhiZGEwYjUyZSwgMHhmNDM5OTc5MywgMHgwMTE5M2MzZiwgMHg4NjY1MTc3YywgMHg5OWE1ZDdlOCwKLQkweDk0YjNkNjU3LCAweGZhNjJmZmVkLCAweGYwZGJjZDkwLCAweDRhNmY5MTNkLCAweGU3MmM4NjFmLCAweDM4Yjc1ODI0LAotCTB4ZjllN2ZkMjcsIDB4Njc5ZTAzMTUsIDB4ZWY3MTNlZjEsIDB4YmRmMWU3ZjIsIDB4MDlhZmRlOGYsIDB4ZTZhZTg3YzYsCi0JMHhjZGQzMTk5ZiwgMHhmNGRkMDNhZSwgMHg0Y2Q1YjdiMSwgMHg5NGVhM2VmMSwgMHgyMzA0ZmQwNywgMHhkZWYxYmI4ZiwKLQkweDljYjc4OGRjLCAweDBhNGM4MTkwLCAweDU4NjRiYTBmLCAweDg0MWJkMGI3LCAweDBiZTAxMTFlLCAweGNmMGI3ZWZjLAotCTB4ZmU1NmI4ZjcsIDB4ZGM0YmZmZjEsIDB4ZTliM2RjNDMsIDB4NGU0YWY5ZDEsIDB4MTNkZWZjODAsIDB4ZWYxZGY2MTUsCi0JMHgyYjlhOTlkNSwgMHg2MGY5ZmZiZSwgMHhlMDM1N2I5YywgMHhiZmU3MGE2OSwgMHgyYWQwMWRlMiwgMHg3YmRiYmQ5OSwKLQkweDNmNDY0YmExLCAweGZkMWY4YWM1LCAweGRiOGZiN2UxLCAweGViNTdlNzQzLCAweDJmOTY0ZDY3LCAweGQyNDdhZTUwLAotCTB4MmMzNDliZDcsIDB4ZDJhOGJlYWYsIDB4NjA1YWY5OGUsIDB4NDJkZjgwZmYsIDB4ZmRkNDMxZjgsIDB4N2UyYmQ5MGYsCi0JMHhmNzc2ODk5ZSwgMHhhYzI3MmVlOCwgMHg5ZWI2NTFlNywgMHg1YTZhZjg0OCwgMHhiZjBhNWZmOSwgMHgzN2VmYTQ0OSwKLQkweGNjYjEyYmVkLCAweDdmMWYzYTBmLCAweGZkMDQ5NGNjLCAweDA2MzUzZTViLCAweDc0YWQ3ZGYwLCAweDBlY2Q3ZmYxLAotCTB4OGYxMzJjOTgsIDB4YmU3MGU1NDQsIDB4MjU3YTY1ZTQsIDB4MmNlNWZhNjEsIDB4MWNlNTg1ZDIsIDB4OWJhNTg3ZDIsCi0JMHhmOWVhYmNiMCwgMHg0MmU1ODFjNCwgMHg2NWQzY2Y3ZSwgMHgwOTkxYmY3NywgMHgxZjVkNTVmZSwgMHhmZTdiNTNiZSwKLQkweGUxZTdiZmE1LCAweDhmMzc1MDNiLCAweGE5NWM4MzZhLCAweGFkOWZjYWVmLCAweDBiN2FhZmQ2LCAweDBkMzhmZWZiLAotCTB4YmZlZWM3ZjgsIDB4MGY1MWRhNjcsIDB4YjM3N2I2YjgsIDB4ZDNjZTcxYmQsIDB4ZGRmYzYxOTksIDB4YjMyZTU5ZmYsCi0JMHhlZTk3MTU3YiwgMHg1YTRkZWY2NSwgMHgzNjMyMThkOCwgMHgyNTc0ZmIxMSwgMHgwOWY5ZTE2NywgMHgyZGU0Y2RmMCwKLQkweDVjNDI2ZjgyLCAweDBkMDNmZjJiLCAweDkzMmZjYjhiLCAweDc1MDVlZmYwLCAweGM0NzgzNWY4LCAweDc5NjUxN2YyLAotCTB4NjJlZmE4NjUsIDB4NTYwZGY5ZWQsIDB4NzE3OTA0YWYsIDB4ZmI1OGEzMjMsIDB4NWRmZTJiNzIsIDB4OGZjNGQ5Y2YsCi0JMHgzYzJlNzJlNywgMHgzZGMzMmI2NSwgMHgwYjk2M2IwOSwgMHg1NGQ0ZmJmOCwgMHhlODk2Y2VlMywgMHg0NjlkNDVmOCwKLQkweGZjNGRjZjk2LCAweDA1YmY2MDgzLCAweGIxODQ5ZjYwLCAweGYyMDZjYjc3LCAweGUzMzY3NDM4LCAweDU0MmFjM2Y3LAotCTB4MGZjZTA1ZmUsIDB4MzMxNWVjMWEsIDB4ZTE3MmQyMDYsIDB4NDgxOTI3NDAsIDB4YWQ5ODdlZTksIDB4MjBjZmZkNmIsCi0JMHg4NmI3NjA2ZiwgMHhjZmFmYmRjMCwgMHhlMzAwZmU0NiwgMHgyZmRjNjIyYiwgMHhlODNhMTVlYywgMHhmMmM0ODJmNywKLQkweDBjZmIzZDhlLCAweGE0ZDRiZGUyLCAweGNiYmQzZjYwLCAweGZkMDMxOTVlLCAweGE4YjYxNDZjLCAweDJiODA0NTFmLAotCTB4NTcyYWJkZmMsIDB4ZTQ0YzdiMTgsIDB4MWQwMzBkYjEsIDB4MDQ4NWZkMTEsIDB4NDE3YTI1ZGYsIDB4ODE5Y2Y1NjIsCi0JMHg0ZDdkYmUzZiwgMHgzZDMwZmExZSwgMHhjMmZlODdhMCwgMHg3ZDgwY2VlZSwgMHg2MjEzZDMwYywgMHg5MmZmZjU4MiwKLQkweGNkMjFhZmRmLCAweDVmMGYxMDk5LCAweDAzNDE4NGYyLCAweDU0N2JjNjdhLCAweDgzM2RjMzFjLCAweDE2N2I1MzNmLAotCTB4MmVkNGQzY2EsIDB4ZDQyZmYyODUsIDB4MDNmMjg1MmUsIDB4Zjk0Mjk3NmEsIDB4YTE0YmI1MTEsIDB4MTBiMTc0NWMsCi0JMHhiZTIyMjRkZSwgMHhkODYyY2U4MSwgMHhhODNiODg4ZiwgMHg5MDNmOWJkNywgMHhiYjA2Y2RjOSwgMHgxZDYyODY3YiwKLQkweDhlYjhmNGZiLCAweDNmNWRhYzE3LCAweGM3NWQxOWZkLCAweDY5MDdiYjBiLCAweDI0NGJiZWUwLCAweGZiZWVmNDc4LAotCTB4ZmU5NWU2NWIsIDB4N2Y4ODhkM2UsIDB4ZjEwN2RiYTgsIDB4ZDJlYzE3ZWYsIDB4ZTgyZmRjYTIsIDB4MGUyZWM3ZjAsCi0JMHg1MDMxNTdlYSwgMHg3N2YzZTM4ZiwgMHhmMzBiMWM3ZiwgMHhlMWZhNThmNywgMHg1NmU4OTRlYSwgMHhiZDU4NmIyNywKLQkweDg0NWU1N2UyLCAweDM5ZGQ4MzZiLCAweGNmNGJmNjAzLCAweDRmZDgzOGY3LCAweDdlMWZjNzQxLCAweGU4M2FmNzBhLAotCTB4ZWRhNzE4ZmMsIDB4ODIzNmZhOTUsIDB4ODdkZWE2N2UsIDB4NWY2MmRmN2EsIDB4NjFlYmZmNzQsIDB4YjNiYjBiZmMsCi0JMHhkZjk0Mjc2MSwgMHhmNjVlNzYxMCwgMHg0Mzc5NzdiMSwgMHhmNzBhYmJmNywgMHhhZmExYmI3MywgMHhkYzJiZWUxOCwKLQkweDliMGU1OTdlLCAweDJmNjBkYTI3LCAweGM1N2Y3ODQ3LCAweDM4ZmVkMGY1LCAweDgxMmJhNzFjLCAweGFlN2I2ZmFmLAotCTB4ZjExMWYzZDUsIDB4NTBmMDAxZWUsIDB4NGJhM2M4M2IsIDB4NTYwZmEwYjEsIDB4Yzc2Njc4ZjMsIDB4ZTM2ZjQxYWUsCi0JMHgzMjIzOTdmZCwgMHgzODVmYmY4MSwgMHg3NzNjYTZjYywgMHgxMjc4ZTEzZiwgMHhiZDNlZmU2NSwgMHhjMmY1ZjAwYiwKLQkweGMxMDc0ZmJlLCAweDNmMTRhMDdiLCAweGM5ZWZlMDgzLCAweDYwZTA2OGZlLCAweGZlN2RmZTQ1LCAweDAzMWZhZmM4LAotCTB4ZjFmZGExZmEsIDB4Mjc0ZTE1ZWYsIDB4NmUyMGFhNWIsIDB4ZmZiOGQzM2YsIDB4YjY2OTZjMTAsIDB4ODgyYTgzZTUsCi0JMHg5MTRkY2ZkYiwgMHhjZjM5NDMwZSwgMHhlMjBlMzU5ZSwgMHg3OWRmMjJmNSwgMHg2MWY5NmU0MSwgMHgzYWI3NGEzOCwKLQkweDJiOGY1MWFhLCAweDI0MTJlNjA3LCAweDMxOGQyYTE3LCAweDIxNjA1MWZjLCAweGY1MTVlMjg3LCAweDhhZTkyOWYxLAotCTB4MzllZDEzZmUsIDB4Yjk0OWY2OGEsIDB4ZmJkYTI4MzcsIDB4ODYzOGExZWYsIDB4MDZjZjdlMDcsIDB4NDM2NWY0NzgsCi0JMHg4M2VlOGQxYywgMHhhN2I1N2RmZCwgMHhjYTc3Y2M2NCwgMHg5NmZjN2RkZiwgMHhmMjdkNjgxYiwgMHg3YmUwNzdkMywKLQkweGY2ZjAyZjZmLCAweGYxMmIzYmM5LCAweDUyZjU5YmVmLCAweDIyYTllYTc4LCAweGExZWNhNjc1LCAweGM5ODMzZjhkLAotCTB4ZmQ0MmY2NTQsIDB4YzMwZjI3YmUsIDB4ZDhkZmQwYmIsIDB4Mjc2MDg4NWUsIDB4OTdhNjExZDQsIDB4ZDQxN2IyNDYsCi0JMHg5YmU1MDI3NiwgMHgzOWJlMDUzZiwgMHgxNmE5YTVlYywgMHg2MTdmMGZjOCwgMHgyMDY5ZDdlNCwgMHhlNDBmYjY5NywKLQkweGZiNzA2NmVmLCAweGY0ZmQxMjIxLCAweGZlYzkxMzlmLCAweDI5ZmRmMDc2LCAweGJmODhmZDM1LCAweGM5Y2EyZDZmLAotCTB4YTEzZGQ4YzcsIDB4M2VkN2NhNmYsIDB4NzY4NmJlMDEsIDB4YWZkYjg3YjksIDB4Y2ZmOTU0YmMsIDB4NmYxZGU5ODYsCi0JMHg5ZWZlMDNkZiwgMHg5NGRjMzJhMywgMHhiNWJmYmZlOCwgMHgwZTVmZmUxOCwgMHhiODU5M2RkMCwgMHgwNGQ0ODFlNSwKLQkweGZhMDNkZGZjLCAweGE3ZjcyMzcwLCAweGViOTAzNjdkLCAweDFmZmJmNTUzLCAweGI0MGUyZDQ4LCAweDI4MWYxNTkzLAotCTB4YTVmYjkzZmEsIDB4OWFmYThhYjUsIDB4NDM3ZDY1MmMsIDB4ZjFlMGRhZjksIDB4YzViMWY0OTEsIDB4YmJkM2NlOGYsCi0JMHg5ZjllZTFmMywgMHgzYWVmZjYxNCwgMHg4MTI3YWZmNiwgMHg0YjdkODdmMywgMHhiYTdlZGY5MCwgMHhiZGZlMTk3ZiwKLQkweDQ2ZmY3NTU5LCAweDAxZjgxZjNhLCAweGIzOTA0NzE3LCAweDk3NGQ0ZjgyLCAweGVhYzIzYmQ5LCAweGVmOGFiZmY2LAotCTB4ZWZkYmJlMzksIDB4OGY2MTQ3YmQsIDB4MzMyZjVlNzksIDB4OWM1ZWZiZjksIDB4MTNhMGFmNWIsIDB4ZjllZWZiM2IsCi0JMHhlOGZmMGY0ZCwgMHhlZDJiODgyYiwgMHg3OWQ1NzY2MSwgMHgwNTFmOTMyYiwgMHhjMGQzM2ViYiwgMHgxNjFlOGJkZiwKLQkweGMwYWJlOGNkLCAweDNkYzBkN2UyLCAweDdlMDZmZjlhLCAweDAwMzM0YzJiLCAweDAwMDAzMzRjLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4MThhZGZmMDAsIDB4ZjUxNDcwN2IsIDB4N2JkYmRiZjksIDB4Nzk3MjRiOTIsIDB4NzEyMTEyNDAsCi0JMHhjMjIwNTcyZiwgMHg0ODQ5YWM5MSwgMHg5MmVhNDkwMywgMHhmMDNlYTQxMCwgMHhhMmEyMTkwMCwgMHg3OTllMGZhZSwKLQkweDJhOTNhODRhLCAweDAyOGQzNjFkLCAweGQ2ZDM2ZDUyLCAweDRmNGUyYTJhLCAweGQxOTU0YTJjLCAweDI1NjJiYzM0LAotCTB4NDA1Njk0NzgsIDB4MmYyYTdiMWQsIDB4NDE5Y2NhNjksIDB4ZWU0MjE5MjMsIDB4OGNjMzhhOGMsIDB4YmY3ZGZhMWQsCi0JMHg1ZWRkY2RkZCwgMHhjOWE3NTUwMiwgMHhmNmZiYmYxZiwgMHhjZmRlZjhmNywgMHgwNTA0OGFmMCwgMHg1NzFhMDE5MiwKLQkweDAyYTYyYTI2LCAweGM4ZGM4MjgwLCAweDAwYjVmYjcxLCAweGJiNGM2MTc2LCAweDk0ZTAwYjNkLCAweDE1NzAwNGM5LAotCTB4YTUwMjlmZDAsIDB4MzAyNzYxMDAsIDB4ZjBlZmRkMzgsIDB4YmRiZjQyM2QsIDB4MjI1ZjFjOTEsIDB4OWU1ZWVmN2UsCi0JMHg3N2RjMjMyMywgMHg0MDU1YTU2MCwgMHg1ZGZkMTJmOCwgMHgzNjFiNWQxNywgMHg3MDk1NjNkZiwgMHhkNDgwMTk3ZiwKLQkweDBmYjkxY2UxLCAweDFkMzAwYWQwLCAweGU3ZjAxNWRmLCAweDMyYTNhNDU4LCAweGU3ODRkYjkyLCAweGY3MTZmYWVlLAotCTB4MjQxMmZjNTUsIDB4ODI4ZjlkMjAsIDB4NzYwNDhmNGUsIDB4MTU3OThmODAsIDB4MDYyNDI3OWUsIDB4OGRmM2M0OWYsCi0JMHgyMmIwNzg0NywgMHgzODEwMDMzZiwgMHg4ZWM3MDc3ZSwgMHgwMDRhYjMzOSwgMHg4MTRmZDM5NiwgMHg4MTU4NzdiZSwKLQkweGMwMDViZjY3LCAweGVmYjQyYmVmLCAweGRmOTdjYmNiLCAweDZmMDg0OTA0LCAweGYyODZmNGIxLCAweDQ5NzBmYmQ4LAotCTB4OTBlMzAzNDMsIDB4YWFkY2VkN2UsIDB4OWQ1YmI3YmYsIDB4NzhjOWZlYjQsIDB4ZmYxZTAxYWUsIDB4YjVmYmM3ODIsCi0JMHhkN2VmNjQxMCwgMHg3YjdkYzBlZCwgMHhmNWY5N2VjYywgMHgwZGZiZDM5ZiwgMHgwYWY3OGNiYiwgMHhiZWY0YzQ4NSwKLQkweDBhMDNmNGE5LCAweGIzZWNmMTJmLCAweGI2YWRmMDg5LCAweGY5YWFmOGFiLCAweGIxYmMzZjZmLCAweDgzN2FmOTE4LAotCTB4NjlmODZkMTcsIDB4NjRjNGRmNjgsIDB4ZDk4ZmUyZjAsIDB4OTFhY2E0MjgsIDB4OGNkYzZjNzIsIDB4ZTE0NWE0OGYsCi0JMHg1Y2ZjN2RjMSwgMHg0NzM3OWQzZiwgMHgxYjRmZTY3MiwgMHg0NDkwNmYyOSwgMHhiNTYxYzkxMywgMHhiYWI3YzU0YiwKLQkweDgwMDU5YmUyLCAweDliNzc1NmY4LCAweGUwMmJiODAxLCAweDEwODNjOGQ5LCAweGRiYTBhNzgzLCAweGEzM2JmM2U2LAotCTB4MmE1ZDg3ZjQsIDB4NWZkZDA1OGYsIDB4YWFmMmNlYTcsIDB4MDFkMTJiNmIsIDB4NDA1ZTJhZWQsIDB4YTY3YTQxYmIsCi0JMHg0NzQ5NjA3MSwgMHgxMzlmMzA3YywgMHhhYzcyZTFiNywgMHhlNDkyYTMzYiwgMHg4MDgzOGM3NCwgMHhiODllYzg1MCwKLQkweDJkZjQ4ZWQ1LCAweGVmYTM5ZjU0LCAweDFmYzU0ODRlLCAweGMyNjY3OTk5LCAweGNiZDM0MGIzLCAweDJmNzdkMmMyLAotCTB4NTE2Zjc4NzIsIDB4NDg4OWEyZjcsIDB4NzVkZjFjMDEsIDB4MWNkNDMxZWYsIDB4MGMzYzE1MmMsIDB4MmM1MDYyZGYsCi0JMHgyOTYzOTdhNCwgMHhhNDY2ZWNiZSwgMHhkZGNmMWU3MywgMHgxYzEyZjNlZCwgMHhmZjEwZTAxOSwgMHhhZTA0OGFiMSwKLQkweDNmZWY2MzhkLCAweDdjZWJlZjQyLCAweGIyZjhiMzFkLCAweGIzNWYxODliLCAweDM3YTg3ZDVkLCAweDVmYzI5YTRlLAotCTB4OGYyOTE4NGEsIDB4ZDBjZDVjYTgsIDB4NTc5N2ViYTcsIDB4NTllYzg2ZGQsIDB4ZDdlNmFmZGYsIDB4MWQzMWJhY2UsCi0JMHg1YzA0YjhmNSwgMHgxNmZiYTQzNiwgMHg2MTBjMGQxZSwgMHhkZmU2Y2I3OCwgMHhlMDMxMjZlNiwgMHg1ZjI4MTllZiwKLQkweGY0NGE5ODJlLCAweDJkMDU4NGZhLCAweDY4Y2ZkZTAyLCAweGQzOTgzNWY5LCAweDU2NjdlNDYyLCAweDhmZDc0ZWZkLAotCTB4ZjQ5MWNmMmUsIDB4ZjlhYmY4YTgsIDB4N2M4NGEwZjIsIDB4OThlNzZkMGUsIDB4YWE4ODM1MWQsIDB4OWY5NDM2OWQsCi0JMHhjNDYyYzNmYiwgMHg0NWU0MTBkZiwgMHhlZmE5ZTkwZSwgMHhlNDkyNzAzYSwgMHgwM2FlYjFkOCwgMHhjZTgwMTZjYywKLQkweGFkNmM1ZDc1LCAweDdjMDMzYmI3LCAweGQ5OGZlMzNlLCAweDgzOGQwOWFmLCAweGMxYTU1YmY4LCAweDc0Nzc1ZjhjLAotCTB4MWM3ZmNhM2YsIDB4MzAzMmNiYmMsIDB4ZjgwMmU3MGMsIDB4MTNiZjdkOTMsIDB4YmYzNTlmOTAsIDB4NjJkOGYyZjgsCi0JMHg3OTQzNzZhMiwgMHhiMjA3ZjMwYSwgMHhmNGEzYWJiOSwgMHg5YzAxNTgxNywgMHg1YjY0N2Y0OCwgMHhjMzJiN2Y4MiwKLQkweGEyN2VhYTIzLCAweGZlZmY2ZGQ5LCAweDcxOWEyNzQ5LCAweDBiMWRmZmJmLCAweDE1ODNkYjMzLCAweDFjZmUwZjRmLAotCTB4MTJkYjM1ZTEsIDB4NTNmYjljOTgsIDB4ZmRhMmM5NDEsIDB4MGFmZDkzYWQsIDB4OGE2ZTU4MWUsIDB4ZGM5MzM0ZjQsCi0JMHg2ZGM1MTMzYiwgMHhmM2Y5ZmZiOCwgMHg4MWRkNWY5MywgMHgyNzU3Y2FmMCwgMHhmOTI2NDQ4YSwgMHhkZjg0NTA5MSwKLQkweGVmYTAxMWIzLCAweDNkZDhiMzNiLCAweGNiYmM1NTkwLCAweDVmZTRmZjM0LCAweDcyOWJmNjllLCAweDRkMzk3ZmRhLAotCTB4ZmViYTNjMjQsIDB4OTBlZjNlY2UsIDB4MzVmNWU1MDAsIDB4Njg1ZGYyMDQsIDB4YTUzOGU3ODIsIDB4ZDcwZjg0Y2YsCi0JMHhlNjljNzY5YSwgMHgzNmFkM2VkMCwgMHg3NWU5Mjc3OSwgMHgzOTdmYjNkNSwgMHg1NGZjODY1ZSwgMHhkM2YzN2NiZCwKLQkweDk1YmU5MDMzLCAweDdhMDU4ZDFmLCAweDExZDdhYTI3LCAweGU0MjkyMGYxLCAweDUxZTAzOGE1LCAweDlmMjY4MGUzLAotCTB4ZmYwZWVkZGEsIDB4YTU3MTMxYTcsIDB4MDBjNTIzYmUsIDB4Zjk2NTc2MzcsIDB4NDc4OThkM2YsIDB4MThjYWEwYjUsCi0JMHgxZjk4ZTdlZSwgMHgzNWZlNjlkNSwgMHgyMGRmOTc4ZCwgMHg0ODQzZDQ3ZCwgMHhiMTEwOTM4ZCwgMHhmMjE1NWQ5MiwKLQkweDIxNzE0NDljLCAweGM5OGQ4NGYyLCAweDNlY2VkZTNmLCAweDJlY2M0YzEwLCAweDUzMjA0Y2ViLCAweDAzNGMyZjdjLAotCTB4YWZmOTI2N2IsIDB4ZmMyZmNhYWMsIDB4OWJhZGU0YzQsIDB4NDJmZDM2NTAsIDB4OTNmZmVlYWEsIDB4YjU4YjRjMTYsCi0JMHgzNzg2OWVjZiwgMHhkYjM3M2VjOSwgMHgzODBlN2Q5OCwgMHgzYzY3Zjk4MCwgMHgyOTBiN2Y5ZSwgMHhmYjMyZmNlYywKLQkweDg2MWZjYzU3LCAweDQ1Y2I0YmYzLCAweGMwYzUxNzMwLCAweGVlMjg5MDVlLCAweDQ1MDliNjE1LCAweGFjZGFlMDBmLAotCTB4OTY0YTY1ZTksIDB4YWRmYzQ0MmYsIDB4OWVlZGY4ZWEsIDB4YjczYzk4ZjcsIDB4ZjA4YTc4M2MsIDB4ZmQzMjc2MWUsCi0JMHhkY2FhN2JjMSwgMHhjNGQ0MWNjMywgMHhmNjY1YTllNiwgMHg3YmZmMzQyZiwgMHg3ZGNmZTBjMSwgMHg5N2M4OWNjZiwKLQkweGRkYmVmZGYxLCAweGVkMDFmMzUzLCAweGQ4M2U1ZWY5LCAweDY3Y2ExY2Y3LCAweGZhNzgzMTMwLCAweDBmM2I1YzYxLAotCTB4ZjI4ZTM4N2YsIDB4NzViZDNjNjIsIDB4ZTAxYTVmMmQsIDB4NDc4ZDRlMDEsIDB4N2UwN2M0NzUsIDB4YmJlYjkxM2YsCi0JMHhlMTgxZjY0MCwgMHhkZTg3YzU4NCwgMHhmYzk4ZDM0ZCwgMHgzMjZmNzlhYSwgMHg2ZmRjM2ZlOSwgMHg0ZTllMmZhNCwKLQkweDNlOWQ3ZGZkLCAweDljZmQ3ZGZkLCAweGViZWFhZGQ5LCAweDlmOTgzNWJjLCAweGNjOWZkZjhhLCAweGVmYWMxODExLAotCTB4ZTYwYTRmOWYsIDB4YmJlOTM4YTcsIDB4OGE5NzNkNGIsIDB4ZDViZDhjNzAsIDB4NmZkNDRmZDAsIDB4MzdlMzFkOGQsCi0JMHhjMzUzNTdkMiwgMHhiZWMwNmQ4OSwgMHg3MTNmMTQyYiwgMHg1ZmI4YzgwZCwgMHgyNmE2Zjk5NywgMHhkMWQ5ZjAzNywKLQkweDc2NjkxNmNlLCAweDY2NjllOTA2LCAweDgyYjczYmNhLCAweGI0OGJkNzZhLCAweDc0M2I3ZGY4LCAweGU1ZmQwMDU4LAotCTB4NjdmNWE5YTQsIDB4M2EwNzVjNzYsIDB4NjM5MTZmN2UsIDB4Y2E3MmFmZTMsIDB4ZjdlYTY5NzQsIDB4MjU0YWJmOGYsCi0JMHgzZjFjNTFlNCwgMHgzYWIyNzJlZiwgMHgzMzliYTI2NywgMHg5MGQ5NzNiMywgMHg1ZjcwZTc0ZCwgMHgyODFkYTAwYywKLQkweDBkYjEzNjlkLCAweGRmNzk5MWU5LCAweDU3YmM2ZTM1LCAweDkzZTQwZDY3LCAweDY0ZjdlODFmLCAweDA3ZGY2NjVlLAotCTB4OTE5NmY3YjgsIDB4YzgxY2MxYmUsIDB4OGE0ZmY1NjcsIDB4M2JhYzM4MTUsIDB4YTBjNTYzYzIsIDB4YmU1MGYyODQsCi0JMHhlMjU3MTYwNiwgMHgwMmQ4NjVlMywgMHg0NzQ4OWQzNSwgMHhmZGQ3N2QwNSwgMHhiOGE0ZWQxMSwgMHhlOWQ0ZDRjYSwKLQkweGM2NWUyNTFjLCAweGJkMzQwN2MxLCAweDlhOTlhNzE1LCAweDhmZjE0NjNhLCAweGU5MWY2OGRiLCAweDVlMGU4MzZiLAotCTB4N2YzNTVmZjUsIDB4YzY3MjY5OTYsIDB4ZDZjN2NmODQsIDB4NWM1YTBkMzMsIDB4MTVkOTI3MGYsIDB4ZGIyZmU5MWUsCi0JMHhiODQwN2E4NywgMHg0MDM4MWNjYywgMHhiNDNkN2EyYiwgMHg0MjY3M2VhMCwgMHhjYmFmN2Q0MCwgMHg2NzI5YmYxOCwKLQkweDc4Zjk2MTJjLCAweDMzMjM4YjJhLCAweGU3YWVmNTM1LCAweDY4ZjQ4MDlhLCAweGViODU3Y2E3LCAweGQzYzgyZTI2LAotCTB4YjA4ODEzZmEsIDB4OTk5NzAyNTUsIDB4NWIzYjE0NTYsIDB4YWQ4ZjgzNjcsIDB4YWQ4OWEwNzMsIDB4YWQ5ZGExNzMsCi0JMHg1YjA3NDAzNywgMHg1YjIwODI2ZiwgMHgwZGEwNGE2MSwgMHhlYjVmZmM1OCwgMHgwYzNjYzNlYSwgMHhhMjZlNWQzZiwKLQkweDE4YmM1YzdjLCAweDg3ZjM0NjlhLCAweDJlYmM5YWI1LCAweGVhOGMwZjJmLCAweDFlNWMzZjI1LCAweDY0Y2U0MDczLAotCTB4MmU0ZTVkNzQsIDB4OWQ5OGYyMTMsIDB4OTFiMTcyZWIsIDB4MDczZGUyM2QsIDB4YWQ2OTMzZjgsIDB4ODc3YjEwODAsCi0JMHg5OWRlOTI1YywgMHhlMDk5ODIwNSwgMHg1YzE4OTAyYSwgMHg1MWU1MWRmZCwgMHhiMmNkOTIxYSwgMHg1NGI5MTQ3NywKLQkweDhmMjc2ZThkLCAweDkxNzE3MjZhLCAweGVhOGQ4ZjBkLCAweDYwNWJhZjZiLCAweGNjMzdhZWIwLCAweGZmMTQ5OWQwLAotCTB4NzIxM2VhNDcsIDB4ODRlMmNlODgsIDB4MGMwNTJmY2EsIDB4MjFmNzdlMTEsIDB4NmJlMzE5OWYsIDB4YjM2NTUxNzEsCi0JMHhmNzRlZTEwNywgMHhlMzE5OWY0OSwgMHg2NTU5NzE2OCwgMHg2YWM0NDU5MSwgMHhkZjYzZjViMywgMHg0NzY1ODQ2YywKLQkweDFmYTAzZTUyLCAweDNiYzgzMWQ5LCAweDg3YmMzZTUwLCAweGZhNTRkMjg3LCAweDdjYTdlMzllLCAweDEwMWZlMzY5LAotCTB4MDc2NTRmYzksIDB4YWRkNTkwNDAsIDB4MTdlNDU1NjgsIDB4YWVlZjM1N2UsIDB4YmE3YWE5NzEsIDB4NGIzZjI2ZDksCi0JMHgwZjZmNTg3ZSwgMHhjM2M4MDkyNCwgMHgwY2VhZDY5YSwgMHhhYzFiODdjYSwgMHg4YzlmYmJlYSwgMHg4OWJlYTYxNSwKLQkweDFlMjFiMTcyLCAweDJmOTQ2MTdiLCAweDA4MWM1N2RjLCAweGI5YTEzODg3LCAweDQ3YTUxZGM1LCAweGYwMWRmZmM3LAotCTB4Nzg0YWY5ZmUsIDB4YWZjYTY1MGYsIDB4MDliZjI5YjksIDB4YzYxYmViMjIsIDB4YjNiYjc5NmIsIDB4OTdjNDRjYjMsCi0JMHhhMzE3MGU5MCwgMHhhOTM4OTQyMywgMHgyNmRjODViOSwgMHhkZTk3YjdjYiwgMHhmNmFhMjcwYiwgMHg3YjZjOTdiNiwKLQkweDc1ZWQ3NDdhLCAweGQzZGRiYjRiLCAweGI3MGY3ZTQ3LCAweDgwMjdiMzdlLCAweDQzM2Y4NmVmLCAweDVkZWY3OGM0LAotCTB4Y2U4ZmJjYjcsIDB4Mzk0MjlhMzUsIDB4NWY5N2E4NDUsIDB4OTJiNjljMjYsIDB4Y2FmNmU4M2QsIDB4MjA5NjkyYTEsCi0JMHhmODEyNmRkZiwgMHhjYTBmY2NhZCwgMHg5Njc1YzM1ZCwgMHhlMWVmNmEyNywgMHhjYTFlZjhhNSwgMHhhYmU3ZDhhMywKLQkweDRhMGZiMmMyLCAweGQyMGU5YTZhLCAweDU3YjcyYTVhLCAweDM5ZTEwZWUxLCAweGYyMzZmNDQyLCAweGZmYTQ2NTkxLAotCTB4YWM4Zjk0YzEsIDB4OWM3ZjMxOWYsIDB4MTY5ZGRhYTAsIDB4MWZmN2JhYTcsIDB4MGFiYzc4NzksIDB4ZGZjNjIwZmEsCi0JMHhiYzVmZjcxYSwgMHg4ZjhjMmZmMCwgMHg5MTRlNDM4ZCwgMHg3YmVkOTc4ZSwgMHg3ZGVhOTlhNiwgMHhjYWIwY2ZkZCwKLQkweGRkMTFjNDMzLCAweGQ5NzY2NmVmLCAweDc3M2IzYzAyLCAweDVmM2E1MmNkLCAweDg3OGY1MWYxLCAweDNkNzVlZmUyLAotCTB4ODMyYTM2YTEsIDB4YzYyN2RkYzMsIDB4ZDdhZmY2YWIsIDB4M2Y3MGRmZTksIDB4NmU3YzRmMjQsIDB4YTY0ODdiNDcsCi0JMHhhN2NhOGIzYywgMHhlZjM3NjgzZSwgMHhhYjdmMjFiNywgMHg2MGQwN2VhOSwgMHhmNmFiZjE4NSwgMHg1OGZmN2E5NSwKLQkweDU2MWZlNDdmLCAweDE5ZjAzYmVhLCAweGE5NWRmODg1LCAweGNiNjJiZmQxLCAweDVkOTEzNzdkLCAweGZiMWJmNGFkLAotCTB4NmNhZmJkNDEsIDB4ZjZkNWNlZDQsIDB4MWYxM2Q3ZjgsIDB4ZTc4ZGRiYjUsIDB4Y2NhZmE5MWEsIDB4ZWIwY2ZhYTcsCi0JMHg3NWQ1MGYzMSwgMHhhYTViZmI3MSwgMHhkOGQ5NWY1OCwgMHgxZmZlZmM2NSwgMHgyNDk1ZjYzNywgMHg4MWJmMmQ2MCwKLQkweGQ3MmU0NzU2LCAweDRlN2YxMGNlLCAweGZkNTllN2Q2LCAweGY1NmRlNDM2LCAweDhiYTJjZGYzLCAweGM4YTc2Y2UwLAotCTB4ZjVkMWViZTIsIDB4YjYxZTdiMTAsIDB4ZDE1YjMxYTQsIDB4NDZlNTc1ZmQsIDB4YzNjN2Q1OGUsIDB4MzY0YmRmZmQsCi0JMHg3ODI4ZTg4OSwgMHhiZGQ1ODMyOSwgMHg3YWIzYWY1OCwgMHhkOTg4MWQwMywgMHg4NmNhMDE2YiwgMHgzZDdiZmI0MywKLQkweDQyNmI5MjI1LCAweGU3NzdhZjNjLCAweGZmNGY1NDg5LCAweDY3MDQ5ZDc1LCAweGY0ZmE1MTJjLCAweGRmOWFiZTdhLAotCTB4M2VhNTY1NTEsIDB4OTNlYzdlZTksIDB4ZWYyMTBlYzgsIDB4MzdiYzcyZTksIDB4ZmMwNWIwZmQsIDB4YWEwNDNmYjgsCi0JMHg5YWNlODYzZSwgMHhmMzNlNWQ1OCwgMHhlNDllNGVjOCwgMHhmZDUxOGZjZiwgMHgwMjY5OTZkOSwgMHgwZTFlNDYyMSwKLQkweGEzMDgwYzYxLCAweDRkMzZmNWY0LCAweGE5NzkwOTdmLCAweGYxNDRmZDg2LCAweGU0ZmRjMzJhLCAweDdlYzM1Y2QyLAotCTB4MmI2OTIzOWIsIDB4MGE0NTAxZTEsIDB4OGUyODRiN2EsIDB4NDhhNGVmYWIsIDB4MjBmNzBjNTMsIDB4NWZiOGZmODQsCi0JMHg0MzcxODlhZSwgMHg2NGMzOWNkMiwgMHgxNWNlMTVjZiwgMHgzNjkwZGU2YywgMHg5ZTc4ZDBiNywgMHg1ZjEzY2I1ZiwKLQkweDg3YjgzM2I2LCAweDY1N2Y5NTdjLCAweGU2NzVlODM2LCAweDdlOWUxMTgwLCAweDEwOTIxZGI0LCAweDM5YThlM2FmLAotCTB4MDBhMTZlNmUsIDB4YzEzNjI1ZDUsIDB4ZDVjYTVkZjgsIDB4NGMwMjYyZWMsIDB4ODYxYmNjMzAsIDB4OTYxY2VlZTUsCi0JMHgwOTQ1ZDkyYiwgMHhmNzIwYzhmYywgMHgxZWExYjk3OCwgMHgzNDM0ZGQ1OCwgMHg0MjJhMjljMSwgMHg3ZDYzMGY1NCwKLQkweGQ0NjdmOTQ2LCAweDI1OWZlNTE4LCAweDdlM2RlNTFiLCAweGQ5ZGU1MTg1LCAweDVmNzk0NjRkLCAweGFiOTQ2MmRkLAotCTB4Y2RjYTMxNWIsIDB4ZTFhNjcxYjMsIDB4NGFmNmM0ZmMsIDB4ZjM3OTNjMDMsIDB4ZDdmMzg2MGQsIDB4ZTAxODE3ZjgsCi0JMHgzNzZmZGJhOSwgMHg3MWQ2OWY5YywgMHhhMGJmNjFhZiwgMHg1ZjYxOTU2YiwgMHhkOWNiYjNiNywgMHhkNTgxYjVjMSwKLQkweDAyNjZmNjcxLCAweGEwZWMxNWQzLCAweDA2NDNmMGU4LCAweGZmN2FmMTdjLCAweDEyYWFmODMxLCAweDQ3YTVjZTUxLAotCTB4NDhjMmRlNTEsIDB4MTQ4NDcwM2IsIDB4NmYxODc4YTAsIDB4NTdmYWYxMDcsIDB4YWFkZmY0ZTIsIDB4OTNmNzkzZTUsCi0JMHhlZTRlM2VjZSwgMHg4ZjQxMmYzYSwgMHhhMGJjZGE3ZiwgMHhiMWZhYzJkYywgMHg1NTY5MGE3ZiwgMHhjYjU2NzQ4OSwKLQkweGFmMmQzZTZiLCAweDY0NGRmNmMxLCAweGE5NzNlMDI0LCAweDBmMTQxOGIwLCAweDNjMmIxYzUyLCAweGJiMjJhYmU5LAotCTB4MWQzNTBlMmMsIDB4ZTRhMGY2NDQsIDB4MzI1NTdiNmMsIDB4NzA0MDk3OWQsIDB4NGI0NzUzOGQsIDB4NTI5NmZlNzQsCi0JMHg3MmIxY2MwZSwgMHg4ZjM2Njc0MiwgMHhhMTcxY2E4YiwgMHhlMzI3Y2FkMiwgMHhmZDZmYjJlMSwgMHg1NGVjYzk2ZCwKLQkweGNmYTdjMzNhLCAweDM1NTJiODdkLCAweDFjOTdjYzZmLCAweDQ3OTE4ZTYwLCAweDRmOWVhOTQ1LCAweDVkNWU4Y2JjLAotCTB4MDg5Y2ZhZWUsIDB4NTJiMDdkZWIsIDB4ZmJiMjZmYmQsIDB4ZDVhM2RjZGIsIDB4OWU2NmUyMzcsIDB4YWIzMjVmZDUsCi0JMHgzMjcxMGVjNywgMHg2YWRkMWY5YiwgMHg3ZDkwZTYwZiwgMHg1ZjkwYzk5ZiwgMHgzMTdjYzVjOSwgMHg1NjA1MTI2OCwKLQkweDM2YTE3MWJmLCAweDhjNGMyYTYyLCAweDZlNTJmMjUxLCAweDlmNTEyZjliLCAweGNkMmFlZDg2LCAweDhiZjIxNzI3LAotCTB4NDY1ZTJiZTcsIDB4YTI1NDJiYmUsIDB4YjdmNGM1YjYsIDB4OTlkZTU3MjcsIDB4NzM5ZTc5NGIsIDB4YmJjMjJmYWQsCi0JMHg5NzNjY2ZlZiwgMHg5ZmNjNzk0MywgMHhmN2EyZWQyYywgMHgxOTIxZTc4NywgMHhkOWM2MTdjOCwgMHg0ODUwNDk5MCwKLQkweDFjNDNjYTA0LCAweGQxY2UyZmViLCAweGZjNjIzMzIzLCAweGU1ODVhMzc2LCAweGFkZmFkMDJiLCAweGU5MzkzNTNiLAotCTB4MGQxMmQ2ZmQsIDB4YjEzZTJmNmYsIDB4OWRmOGUzMDIsIDB4M2M5ODg3NWQsIDB4YjQwNzMzNmEsIDB4NzQ0OWFkM2UsCi0JMHg0ZGY3ZmJlMSwgMHhiZjUyMTY3MCwgMHhhODkxNTIwOSwgMHhmZjdhZTlmNiwgMHgzZWZmOWUzNSwgMHg1N2VmNTU3OSwKLQkweDM2YmU3NzJmLCAweDA3ZDBkZmIzLCAweDUxYjQ4ZWMzLCAweGYzZjE4ZGU3LCAweGVhZGYyOGFjLCAweDI1OGZiZGZiLAotCTB4ZmJkM2ZjYjAsIDB4MWY5YjM2NTgsIDB4NjQxZmRmNDYsIDB4OWIzYjgxNzMsIDB4YzdkODMwM2UsIDB4MWIxZjJkZGQsCi0JMHhlNTFlZWVlYywgMHgyODdlYzMxMywgMHg4ZjE5NjIzZCwgMHg2NGY2ODdmYywgMHhlNTAzYjljZCwgMHhhZGI3N2U3NywKLQkweGQ0NTBmYTg0LCAweDRjNmU3ZjU3LCAweDYyN2ExYzlmLCAweGY3YzI2Y2YyLCAweGM3M2NmOWJmLCAweDE3NTllOGU4LAotCTB4OWQzNGYzNjQsIDB4NGVlYmQzY2YsIDB4MmViNDM4MzIsIDB4M2U3OGQ2YzQsIDB4NWY1NWJlZjUsIDB4M2M4MzdmYWQsCi0JMHhjMjI3ZWEzMywgMHg5YjQ3MTE4ZCwgMHhkNDc5ZDRjMywgMHhkNjY3YmViYSwgMHhjM2NhNGFiOCwgMHhiMzU2ZDkzZCwKLQkweGUxNTI0ZWJhLCAweDBhYmI1MmFjLCAweDZiNGI5OWNmLCAweDQ4ZGNlMmQ4LCAweDA3MGY2YjdkLCAweGQwZjY4NzEyLAotCTB4OTc4NWQ1N2IsIDB4Nzc0NGY4YWMsIDB4NTBmNTZjODYsIDB4YjkxOTVhNWQsIDB4NDgyYjczNDAsIDB4ZTM3OWIxMGYsCi0JMHg0MWQ5NTRkMiwgMHgwNjJjMzlkZiwgMHg5ZDE5NTJiMywgMHgzODNmYTg5MywgMHgwMzVlNTI2YiwgMHgyZjI1MDE4YywKLQkweGY1M2U3MWZlLCAweGFhNDk4MzAxLCAweGY4YmUyN2RkLCAweGU5MDU3Y2RjLCAweDk3YzUyNTdlLCAweDBhNDBmNzRjLAotCTB4OTRlNzYzNTksIDB4ZmE4NTljZmEsIDB4YzI1M2VhNjIsIDB4ZjBjZDc1MGUsIDB4Y2M4ZjhjNzAsIDB4NDc4YTc1YjgsCi0JMHhkM2Q3NTc4ZCwgMHg5YWY1ZWY4YSwgMHhlNDcxMjZkYSwgMHg4MGRhY2YwZiwgMHgwN2U4YTdlNiwgMHg0MzE3ZDUxMiwKLQkweDFmYWE2Y2ZiLCAweDcwOTIwMTk4LCAweGRiNmVjY2ZmLCAweGUzY2Y2NDBiLCAweDVmYWE2NjkwLCAweDdkNjM1YWIwLAotCTB4YjY1YmUxNDEsIDB4N2QwOWM1MDAsIDB4MTFlZTkzM2UsIDB4ZmJjNWU1N2UsIDB4NmMyZDdiZTksIDB4Mjg5ODMwMGUsCi0JMHhkNzdmOTA5NCwgMHhmNTYwMWQyNywgMHg1OTVjODlkNywgMHgxNWY5YjBmMiwgMHg3YTNmMTQ0OCwgMHg2ZWI2ZDhmNywKLQkweDM5OTFlNzUyLCAweGFmZmYxMjBiLCAweDBmMTJiODczLCAweDZhNDIzM2ViLCAweGUxY2RhOTVkLCAweGY5YWJiZTc0LAotCTB4NDNkZjE5YzcsIDB4N2M0MDZkOWIsIDB4N2MxYTVmOWUsIDB4NGVlNmNiY2EsIDB4ZDlkMTBlNjIsIDB4ZDZlOTUyNmIsCi0JMHhkM2Y5ZDVlOSwgMHg3M2JlODhmOSwgMHhlN2Q1YmI2NSwgMHhkNzc5ZDE0OSwgMHgwN2U0NDk4NiwgMHhjZTc1NDcyOCwKLQkweDJmNzc3M2M3LCAweDdkZmVlNTE4LCAweDdjYjJiZWJhLCAweDU1OGY4OGYzLCAweDJkYmNlYTRkLCAweDA3ZjZmN2FhLAotCTB4OGVkZTkxNGYsIDB4YmIxYzU5MzgsIDB4M2U3OGZkZGMsIDB4NjExZmY3ZWIsIDB4ZWYzZTQwZjIsIDB4Zjg2MmZlMjIsCi0JMHg5OTg5ZTI1YywgMHgzZWVmOWUwYiwgMHhmODU3OTRmMSwgMHhiMzg1ZmNlMSwgMHhmODc4ZjlkNSwgMHgwMjM5OGI4NSwKLQkweDc3ZGZhZmRlLCAweGM5ZDkyNGU4LCAweDZlM2MxY2YwLCAweDgzMWI2ZDhlLCAweDY4ZWE2NTdkLCAweDBhY2M2YmYzLAotCTB4NGQ5MmY1MzEsIDB4NmNjMTNmYmYsIDB4OWYyMThmYmMsIDB4ZmM4YmFjZmMsIDB4NWQ4OWViMTEsIDB4Zjk0MjFmNWEsCi0JMHg5ZWI2ZTI5MiwgMHhiMWQ5NzcyZiwgMHhlMmRmNDU0ZiwgMHhiOGIzNmY0MiwgMHg4ZWM5Nzg0ZCwgMHhjYjBhNzNkNywKLQkweGExNWNmYTViLCAweDQ0YmNjMzhkLCAweDU5OWI5NjNhLCAweDc2YWZlNzNjLCAweGJiYTc2NDhhLCAweGQ0ODJmNmQwLAotCTB4MDRhNTlhZDcsIDB4ZWI4ZTNmMzYsIDB4ZTRkYmQ3NmYsIDB4ZDY1ZWM5NDcsIDB4NDE5OTUwN2MsIDB4M2JlNzZmZmQsCi0JMHg5NTdkNjgzNywgMHg2YmE2NGY5YSwgMHhmMDlkMzlmNiwgMHg2NGRlMWYxMywgMHgzNThhNTc5NiwgMHg0ZGVjNGFmYSwKLQkweDMzMjFkNTNjLCAweGY5ZDVlMTQwLCAweDc4OGYzNjgxLCAweDhmZDY2ZGVjLCAweDc3NTcxN2ZkLCAweDFjNzBlYTk5LAotCTB4MDAwMDFjNzAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDc5OTMzMzFlLAorCTB4MzFlNDI0ZTQsIDB4MWU0ZTEwODEsIDB4MDMwODY4MjAsIDB4Yjc4YTg4ODQsIDB4ZjYzMDEwMjcsIDB4ZDU3ODc2ZDIsCisJMHhhZjBlMmQ1OCwgMHg2Yjg2ZjIxMCwgMHg3ZmI2YmQyZCwgMHg3ODQ5MDgwNiwgMHgxMTFmYzFhOCwgMHgyOWUxZDVhZCwKKwkweDMxMWQ4MmY2LCAweDAzODhiNjIyLCAweGJkYWJkMjI4LCAweDU1N2M1ODM3LCAweDBiZDExZmViLCAweDJhNDQ5MDhhLAorCTB4ZTViNWVmNmEsIDB4M2VmNmI1ZWUsIDB4MDk5MzljYzksIDB4YWZkYjdiMDQsIDB4N2NmZGZmZmYsIDB4YzdlY2VlOWYsCisJMHhmNWVkN2JkOSwgMHhmZGFkNmJkYSwgMHg4MTMxYzkxOCwgMHhlNDIzMGRhNCwgMHgwNmZiZmMyMiwgMHgxMDlkOTIyMSwKKwkweDlkMzdhMTMyLCAweGQ3MjEyMGUzLCAweDY2OTI0MjE4LCAweDkyZGRmZDJmLCAweGJhZGM0MjE0LCAweGEzNDliZmUyLAorCTB4ZTRmZWJiYTksIDB4NWY1ZjlhMWEsIDB4YTRhZmYwZWMsIDB4NGQxZjViNGQsIDB4MmQwOTZhNzgsIDB4MmZhMWVmYmYsCisJMHg3Y2QwNGZjMywgMHhhZDc5ZWNmYSwgMHhjZTdlYjRjNSwgMHg1ZDBmYzkyNCwgMHgxMGFiMWExZCwgMHhkOGU3ZWQwMiwKKwkweDUyMDE3NmMyLCAweDkwOTdlNTgxLCAweDkyN2ZhMTMwLCAweDQ1ZjhlOGFmLCAweDlmZThiODg0LCAweDM3ZmU5NzI0LAorCTB4YTViMjFjODksIDB4ZDFlNDNlNjAsIDB4OTkwMjllYTAsIDB4MzEzNjQ4NDYsIDB4N2U2MDU1ZmUsIDB4ZjUwOWZjMzYsCisJMHhkMDY3Nzc0NCwgMHg3NzllNzVlZiwgMHg3ZmVjMTNlNSwgMHhkYjBhNWY4ZSwgMHhmMjczNDdlOSwgMHg0ZGM4NzIwMywKKwkweDZkMDhjNmQzLCAweGZiMWRjNzQ5LCAweGY5MDgzOTVkLCAweGU0OTkwY2MwLCAweGQ4YjY4NzYzLCAweDBmY2E2ZmZlLAorCTB4ZDIxNDc1NGMsIDB4MDgwYjY3ZmUsIDB4NDlkOWY5ZmYsIDB4Y2M4MmRhMzYsIDB4M2JlMWVkYTYsIDB4MWExZjRlMjIsCisJMHhkOTlmNjdjYywgMHhlMGRmYjhlOCwgMHg0MGRmZGRkZiwgMHg1ZmMwYTdmZiwgMHhlNWExMDk0YiwgMHg5ZTBjMWNjYiwKKwkweGM1ZDlkOWU0LCAweDE5ODljZTMwLCAweGJmNDMxNmQ3LCAweDMyMTNhNjczLCAweDlkNGQ1Njg4LCAweDQ0OTBmNjNkLAorCTB4ODkxYWViZjMsIDB4Y2RkYjRlZGYsIDB4Y2YxYzBkMjksIDB4Y2JmOGQ5ODEsIDB4ZTgwMjkzYTcsIDB4NjBlZThlOTcsCisJMHhmZmM0NWY3ZCwgMHg2NGVmMzhlYiwgMHhjYzNmZGUzZSwgMHhmYTEwMmIxZSwgMHg4YTk3ZjY0MSwgMHhhMDcyNWRhOSwKKwkweDRiZDE1M2Y5LCAweDJkMDU2YTQ4LCAweGVlNTMxOTFmLCAweGQwOWE3NjlmLCAweGU2ZTllNGYyLCAweDcyMTM0MGY2LAorCTB4YzQyNTIxMWQsIDB4MWFlYTcyOTMsIDB4YzkxNjc3ZmEsIDB4YWQ0MjI4YmEsIDB4ZWU4YzBiNmEsIDB4NGE2YjBmZTUsCisJMHgyMmY5ZmRmZiwgMHgxMmZhMDFkMCwgMHg2YTFmZDZmYiwgMHhhMGU5ZTk5YywgMHg3YjM3NWFmOCwgMHhmNGQwODc5NiwKKwkweDBmMmNjMGY1LCAweGQ5ZjVlZmUwLCAweGQ2OGYxMGIzLCAweDY3NjY3M2Y2LCAweGZiNWUwMjI3LCAweDA2ZmVlZjFiLAorCTB4ZmEwOGQwM2EsIDB4YjViM2M3M2QsIDB4ZWE0ODkwN2UsIDB4MzlmYmY0MjMsIDB4MzFjM2QxM2EsIDB4OTMwMWRmZmQsCisJMHgwOTY0MjU0ZCwgMHhiMzRkMWIzMCwgMHhkMmE2ZDUyNSwgMHhlODhkNmNmYSwgMHg5NWUzMzg5MSwgMHgzYjY5YjEwMiwKKwkweDI4OTk0OTkyLCAweDBmZjM1MmUzLCAweDI2MzdiYjYxLCAweDcxYzM0YWQ5LCAweGVmMDc3M2U2LCAweGI4MWE1NWM3LAorCTB4NmZhNTBlNjcsIDB4NzUxMjc0ZDYsIDB4MjkxMmJhNTEsIDB4NzVlMmM2YWEsIDB4MWE1NDhhNWQsIDB4ZGRjNzAzOGUsCisJMHg2ODQyNWUxYywgMHhlMWMwY2Y3YiwgMHgwMmQ4NjU3MSwgMHg0NzMyOWZkMCwgMHhmNWMyYzQwYywgMHg0MjY3ODAwMywKKwkweDRjYTI0YTZmLCAweDE4ZjhlNmVlLCAweGZiYmY3MmZkLCAweDMzOGY1MDZjLCAweDhlMDBiYjhmLCAweGVjYWE5MDA5LAorCTB4MGM4ZjBlM2IsIDB4YjIwMTkzN2MsIDB4NDNmYzgyOTYsIDB4ZTAyNDYzYzIsIDB4YjkxZWNjZmIsIDB4ZTUwNzAxMjQsCisJMHgxN2YwYTE4ZiwgMHhhNDJkYWUxNSwgMHgxNDEyZDQ3YiwgMHg0N2VjNTZiMiwgMHgwMzI0YTRmNCwgMHhkZTExNTdiZCwKKwkweDRmNTEyOTBmLCAweDQyMTU3ZTUxLCAweGQ3OGI4NGFiLCAweDEyOWU2YTVjLCAweDM1ZjA2NTM5LCAweDE5M2JhOWYwLAorCTB4NWUxY2JmYzcsIDB4ZTUxOGEwNDgsIDB4ODhkNDMxNTIsIDB4ZTMwN2MwNzgsIDB4ZWQ0ZGY5MmIsIDB4YmFjYmE1MDIsCisJMHg5NDdlZTVkMSwgMHg5MDIxOGE2ZiwgMHhlMTdlNDMzMywgMHgzYmY0NTdkZiwgMHhiZGNjZmYzNywgMHhjYTkxZDI5YywKKwkweGQzMzk2YjkxLCAweDJjZGY4YThmLCAweDhlOTJlYjY3LCAweGM4MjAwOGI1LCAweDBmNDliOTY0LCAweDQwMjQxMjEwLAorCTB4ZWI2ZjAzNzcsIDB4YmM3OGEyYmUsIDB4ZmI1YmJmMDQsIDB4ZTdjODZmZGQsIDB4Yzk5ODMyNjAsIDB4MDUzZjkzMjcsCisJMHg3OWJkMDdmYSwgMHhmMDA3N2VkMywgMHg1ZWRmM2FmNSwgMHg1ZDZiY2MwNywgMHg3YTgyNWVmZSwgMHhlOGM3ZDM4YSwKKwkweDVkYWY5NWQ3LCAweDgxZDZjZTUyLCAweGVlODA4ZDdjLCAweDllYTc0OGMzLCAweGM2YTdkMWYyLCAweGE2NzY3ZTAyLAorCTB4NzQ4YmY3MmEsIDB4MDg5MzNiN2UsIDB4NmI3NWQ5ZWEsIDB4ZDAyYjc4NDgsIDB4YjVlNTk0YjUsIDB4YjVlMTY5NmYsCisJMHg5ZDNiOGU3NCwgMHhkNjk4YmViYywgMHhlZDA2YmNkMywgMHgzYWRiYmVhOSwgMHg2ODg3MGI0OSwgMHg4ZDhiNmI3ZSwKKwkweDg1YWIxZmI1LCAweDMxMWY5YTQ1LCAweDhhMTQ4NDkxLCAweGMyYzU2ZDRmLCAweGJlNWE0ZTk1LCAweDE3ZWFhMzc1LAorCTB4MzRmZDVlYjUsIDB4MmQ2NzI1YTIsIDB4ZGViMmRmYjQsIDB4YmRmMDBhYTYsIDB4M2IyM2FkOGYsIDB4NDQzODQ5ZjMsCisJMHgzOWIxZGZjNywgMHg2OTIzOWJmOSwgMHhmOWIyMTQzZSwgMHhmMjRmZDM4NywgMHhkOTQ1ZmFmOCwgMHgwMjI4NDRhNSwKKwkweDljM2EzMWI0LCAweGFlNWM3OTIxLCAweGE5ZTUwMjA0LCAweDdlY2I3Y2JjLCAweGE0OGViZmZmLCAweDVkMzYzZGYwLAorCTB4NDVhMGFmZjIsIDB4NGNjZmQ2M2IsIDB4NzY5ZTI4ZDAsIDB4M2YwNDgxNjgsIDB4YzBmMDdmNGQsIDB4Y2NlZmNjN2MsCisJMHhkZDAwMjYwYywgMHg5ZjljNmU3NiwgMHhjMGYxNGMwMCwgMHg0NjFiOTllNiwgMHhkMjYxN2I0MSwgMHg2Y2U5MWQ2MSwKKwkweDFmNDdmZmQ2LCAweDAwZWMzYTI4LCAweDllOTk0YjM4LCAweDdlMGQ2YTRmLCAweGJjZjlhMjUzLCAweDg5YjkxMjQ5LAorCTB4YWRjZjIxNGUsIDB4MWZkYmRjMjEsIDB4NGY1ODExYjIsIDB4OGI2ZGU4ZmIsIDB4Y2RkNDRlYmUsIDB4YjRlYjU3NzksCisJMHg1ZDdmODE4ZiwgMHgyMDA5MTYwZiwgMHg4NjM1M2JkYSwgMHg5MjM3NDFlNywgMHhiZWVjOGFmMCwgMHhjODVjZWZlMywKKwkweDVkMjkxM2VhLCAweGJmMmUwZTgwLCAweDk2Njc1OTYyLCAweDQ3NTZmODVhLCAweDNjNzE3MDc5LCAweDFjNzU1YWI5LAorCTB4ODk3YTQ4OGYsIDB4NTc4YmQ2OTAsIDB4NjI0NjlmZmEsIDB4ZjA3YWU5ZjAsIDB4ZTlmNTgxMjgsIDB4ODE2M2U3OGEsCisJMHg3Y2EwNWQyNywgMHg5Y2FiODMwZiwgMHgxYzFlYjllZiwgMHg2MzU3Y2FmNywgMHgyMWIxZjFlMywgMHg3ZmEwMWVlZiwKKwkweDYxNzdjNTIyLCAweDUwZWIwNDI0LCAweDBhMjQ2MTdhLCAweDU3YzllMmZjLCAweDlhMGJiMDM0LCAweGM1YzkzMTA5LAorCTB4N2NmYmQxYTEsIDB4MTMzNzIwMWQsIDB4YWY1ODNlMjIsIDB4ODM3ZThkZDcsIDB4ODE1NjhmYzksIDB4NmZlNjMwZjgsCisJMHhiN2U0ZjdiNCwgMHhjMWZiNTg5MywgMHhmODcyODdhOCwgMHg2OTc4NTNjZSwgMHhjYjg3YmIzOSwgMHg4NDdmNGY1OSwKKwkweDczMjQ0N2FkLCAweDRmNzVjMjFjLCAweDVlNzU2MWUxLCAweGM4NGM3ZDFjLCAweDk3Y2I5NDBhLCAweDgxN2FlMDQ5LAorCTB4ZWRjZGRlYTYsIDB4NmMwNmE3NTEsIDB4NzkwMGRmYWUsIDB4OTEwMjQwYjcsIDB4MTM0ZGRmMzgsIDB4NDJkMjdhZDgsCisJMHhlOWEwNWQ3NCwgMHgxNjJmNDRhMywgMHg2NjRiOWQ3MCwgMHgyZWIyZDdmYSwgMHhiYzlmZDFmNSwgMHgxNmU5MTY1ZCwKKwkweGQ0NjhkZjQwLCAweDg3MzQ4MDNlLCAweDIzY2QzMWY4LCAweDkyNDc0YzAxLCAweDI2YWY0YzU2LCAweDQ5ZjM0YzExLAorCTB4YTQwNWE2M2IsIDB4YWY0MzUzMWIsIDB4NDIyYTg5ZjgsIDB4ZmFjNGM0N2UsIDB4YTRlNzIwYzksIDB4ZTU4YjYzZGEsCisJMHgzMjY0ZDBiYiwgMHgzY2NlM2ViMiwgMHg3Mzc4MmQ5YSwgMHhmOGViZjg5MCwgMHhlNzVmMDIxZCwgMHhmYzhhYTY0OCwKKwkweGYxN2FmODQzLCAweGU4MThiMDZlLCAweGZjMjg1NGM1LCAweGVmY2NkYmJiLCAweDBlYmUyNGUyLCAweDY5M2RlYTM4LAorCTB4ZGQzMzU3ODAsIDB4Y2Q1NDU0OGQsIDB4ZjA2ZDVhN2MsIDB4MWMyNDQ0YTksIDB4YzQxZjMyYzcsIDB4ZDZiOGNjNjMsCisJMHhmYjczNTZmZSwgMHg5YzlmOThjNiwgMHg0OTFmMjNhMiwgMHg1MGNmNjY2ZSwgMHg3MWJkZjQzOCwgMHgwODI4ZDFmMCwKKwkweGFiNDE5ZTdjLCAweDI5YjIzYWRjLCAweGI2NDk0YmJmLCAweDZiOWE1YWM4LCAweGU4NzY0Zjc0LCAweDg5M2YyZjM4LAorCTB4N2NlYjY3NDcsIDB4YmUyYWYwYWMsIDB4YTliM2MxODEsIDB4Y2IwYTllMDcsIDB4YzI5N2ZhM2EsIDB4ZmVhNjRmZjMsCisJMHgxZGIyNGNhNCwgMHg4NmEyMGJkNiwgMHhiYzU2ZGU3MCwgMHg0MmRlZjlmNiwgMHhkMmU0ZmU4ZiwgMHg1N2Q2Njk5MSwKKwkweDAyZDc4YTRhLCAweDA2OWY4NTg3LCAweGUzN2M3ZjY4LCAweGU0N2ZlYTRiLCAweDIxMWJmYWMzLCAweGE5ZWMyYTQxLAorCTB4ZTYwMTAxZjksIDB4MWE0MGFkN2YsIDB4Yzg1ZTI5MTMsIDB4YTBlZGEyNjgsIDB4NmFmNWNkNzAsIDB4Njk4YjhlY2MsCisJMHg5MWY0MTkzNywgMHg3NGM5MGI2NiwgMHhlZTkyY2ZiZSwgMHhlNDNlZDAyMywgMHhmNDFkOTEyNywgMHg2ZGYzNjdiMywKKwkweDdkNjk1YmE1LCAweDYzYjY5ZmFhLCAweDFlNDAwNWZkLCAweDBiNmQxZGFlLCAweDlmZDFiOTQwLCAweGY1MzI5ZTRlLAorCTB4MTEyZWZkNDcsIDB4ZTgzNmUxZjAsIDB4ZTRjM2YxNjMsIDB4MWZiNDM2YjEsIDB4NmZhMjdjOTUsIDB4Yzc1ZjIzODksCisJMHgxZDE1N2NiOSwgMHg5ZWIwZWE3MSwgMHhiMDk0Y2FiOCwgMHg4ZmZhMWIzMywgMHhiNTNlNDMxNCwgMHg1ZDYxZjg5YSwKKwkweGU2Y2RkNDlmLCAweDMwZTFjNjUxLCAweDU5ZmE5ZGU2LCAweDZhN2UwMDQwLCAweGMwM2IzMWY3LCAweDNmZDA0ODU1LAorCTB4NzRkYTMyNTQsIDB4YjRkZDFmZjAsIDB4N2U0MmY1MGUsIDB4NTA1MzE3NTQsIDB4ZDgzZmEyM2YsIDB4NWYzZDllMWYsCisJMHhkMDBiZWQzZCwgMHhiOWQ0N2Q3ZSwgMHg5MmJlMDc2YSwgMHg5ZmEwZTlmYywgMHhjODU2OGY1NywgMHhmOGJkZmE2MCwKKwkweGZmZjYzYjNiLCAweDE4NjJhN2I5LCAweDQ3Y2Y5OTg5LCAweDBiYjFkMTBkLCAweGE2NzBjMWE5LCAweDY3YTYxOGUxLAorCTB4ZWQzMWRhMWIsIDB4ZDMwYjc4NmMsIDB4NTk0YWU5ZmUsIDB4ZWJjZWRhOGUsIDB4YzBkN2UyN2UsIDB4M2YwZjEwMWUsCisJMHhjMDBmMzQ0NywgMHg1Yzc1ZDUxZCwgMHgxMmEyMWMxNywgMHg4MjgwMmViMywgMHhkMzZmZmYwNiwgMHhkYWYwYmNkOCwKKwkweDA4NmJjNDZjLCAweDY3ZDU0ZGU2LCAweGUwMzY3ODc4LCAweDllMDAwYTViLCAweGMyMjIzODg3LCAweDc3ODY3Y2QyLAorCTB4MDFkMDNmYzAsIDB4M2M4ZThiY2EsIDB4NWNmMTAyYjcsIDB4OWUwMmM2NGQsIDB4MGNhNGM5MzcsIDB4MTNlMDNjZjQsCisJMHg4MjdkODlkNiwgMHgwMzgwMGVlZCwgMHhmZTY5ZjNmMiwgMHhjMWZhOGZmYSwgMHhmNzg2NTlmYiwgMHg5ZTI5OTc4YywKKwkweDRiNDk0ZTAwLCAweDhlYWRjNjY0LCAweDkxM2I5NWYyLCAweDI3ZDcxMjBiLCAweGY5OTI3YWJkLCAweGJkZjZiZGQ5LAorCTB4Y2YwMGVmZjYsIDB4YWM4OTQ2OTYsIDB4NjhhNmJjODUsIDB4ZjdiNzExNGEsIDB4MTU4MjRhNDEsIDB4ZGNkZmMxZDMsCisJMHgyOGZkM2U1NiwgMHhlMmI5MGJkOCwgMHg1YTY0ODc1NywgMHgzYTVlYjQzZSwgMHg0ZjIzMTFkOSwgMHhmZDc0NjU1OSwKKwkweGIwYzI3NmE0LCAweGVjZjJlNmU1LCAweDA3NGYzOTkwLCAweGI3MzQ3ZjQwLCAweGM0M2U1Y2M1LCAweDg3YWVmNWM2LAorCTB4YWQxZTQwNzgsIDB4ZThiNjVhZjMsIDB4ZDNmZDcxNTcsIDB4ZWEyNDBkNTUsIDB4MDJmMjYzOTYsIDB4MTc5MWE3YzMsCisJMHg0MjNiMTNiYywgMHg0NmNiN2U3NCwgMHg0YzAzOGMxMSwgMHhiM2Y1YjFiNywgMHg3Y2EzYmUxNSwgMHhkNzRmMmY3MSwKKwkweDUyMzFmYTViLCAweDQ2ZGJhMjY5LCAweDE5M2QzMGM2LCAweGRkYmE3ZDZmLCAweDQ2Y2UzYzU2LCAweDRkYjA2YmZiLAorCTB4NzJhMzY3MWUsIDB4MDQyMjkyZTQsIDB4NWI5Nzc3ZWMsIDB4OTNmOWUzZDEsIDB4OGUxMjZkZDMsIDB4ZWJiNTIwOWYsCisJMHhmYmFiODUyMiwgMHg0YWRmZTIzYSwgMHhlZTRjYmVmMSwgMHgyYzdjODI4ZSwgMHgyMWZjZDYyYiwgMHgzMGZlNDc1MCwKKwkweGQ1MTI2M2NhLCAweDE1ZjY2MjYxLCAweDcwMDI1M2MxLCAweDZjNGE3ODUwLCAweGZiMDQ0ZTM4LCAweDA3MzhhNmU5LAorCTB4Y2M5OTdkZmIsIDB4NGEzNjVkZmEsIDB4ZjYzNzY4MjMsIDB4MzY1NWU3MDMsIDB4ZDgwY2UxMTksIDB4MzRmZDA5MDQsCisJMHgxNTU1OTc0ZSwgMHhhMzRkZjczOSwgMHg5ZjU1NGVkOSwgMHgyNjY3ZmQwNSwgMHg3OGMxNjcwNSwgMHg3ZTZmYjk0NiwKKwkweDE5NjNmYTI5LCAweDJiZjRjY2MzLCAweDAxNjdkNDc3LCAweDIyMDY1NDdmLCAweDRlN2Y4MGQzLCAweDkyNmM1ZjdiLAorCTB4MzZiN2JjZTksIDB4ZjE0NGJmMTAsIDB4NzAyYjllZmYsIDB4NzM1N2Y0MWIsIDB4YjAwOGZkN2IsIDB4NWUwNmRmN2YsCisJMHgzYjJhMDA5OCwgMHhhNWFjN2E4MCwgMHhhMjVmYTU2NCwgMHgxNDg5NzJlNSwgMHhjYTNmMjk5NSwgMHgyNWJmMGYxMywKKwkweDJhMWE0MDE3LCAweDkzOGIzODg2LCAweDQ3N2QzM2Q0LCAweDM1MjI0YmY1LCAweGY1MjMxY2JkLCAweGEyN2UyMThmLAorCTB4NzJkMDNjODAsIDB4NjAyNTZmNTUsIDB4ZGJhODM4MGYsIDB4ZWY4NjMyNzAsIDB4MWU3MzRjOTQsIDB4N2NkOGZhNmMsCisJMHg3MmUzN2E3ZiwgMHgyN2U3OTgyOSwgMHgwOWZlMDM4NywgMHg0OWRkZTlkYSwgMHgyNjkyN2ZjYywgMHhkZTAwMGJmYSwKKwkweGE2ZmZhZjdiLCAweGM0ZmNmMDA2LCAweDY3ZjkzMzY2LCAweDVhNGQ3ZjU2LCAweDc5Njk2ZmZlLCAweGZlZTI2ODEwLAorCTB4ZDVmY2I0YjYsIDB4ODBmMWJjYjQsIDB4OTc5YzU2OTcsIDB4OTQzMmNhNjMsIDB4MjRmMDA1MGIsIDB4YmYwN2Y5MzIsCisJMHhlNDFkNjdiZSwgMHhjZjViZjg3OCwgMHg1NzJmNThkYiwgMHhmODM1YmMzNywgMHhhNzIwZTFjMywgMHhhNDNmODMxZCwKKwkweDA1MmQ1OWM0LCAweDNlNDJmZjkxLCAweDFjMjhiNWYwLCAweDA5OGY5OTkyLCAweDYyMTM0Zjc4LCAweDE4MTc2ZTUyLAorCTB4NWE5YzliZjYsIDB4ZGM5NDc0ODgsIDB4OTg4ZWE5ZDIsIDB4OGZjMGRkZjUsIDB4YzFkZGZjYjIsIDB4ZjQ4NzhlMWYsCisJMHg3OGFkNGM2ZCwgMHgwMTIwYTQ1NSwgMHhkNzY4ZDAzZiwgMHhlMDE4YjcxMywgMHhlMjM0ZWZmYSwgMHgxZmM0NzlhOSwKKwkweGE0NzMzOGE1LCAweDdhNmE3OGIwLCAweGYzMGEyODVlLCAweDA5ZmQ1MjcyLCAweDIzM2RkM2ViLCAweGYwYzU2YjVmLAorCTB4M2IwZmM1ODEsIDB4M2YyMGFkOTQsIDB4NjFiNjhjYjQsIDB4Nzg2NWIzNWMsIDB4ZjkwMjkwZTQsIDB4ZDE0MDZhMGMsCisJMHg1ZGNhNjc3YSwgMHg0YzZkODgyMSwgMHhlMzdjNjNjZCwgMHhkNGY1YjNmNCwgMHg3ZThjM2MzNSwgMHhiZGJmYTE5OCwKKwkweGFkNWUxZjFjLCAweDY3YjNmNTFjLCAweDMxZGVkOWEyLCAweDJiMjcwMWQ2LCAweGRiMzZmNGEyLCAweGE2OTRjZTUxLAorCTB4YmU4MmM1NGYsIDB4OWI1MzlhN2UsIDB4NjllNTFhNzYsIDB4MjMzZmI5YTQsIDB4ZTM2ZWQxZGUsIDB4Yzk2YjhiZjEsCisJMHg1OTM3NjhiNSwgMHhlMWZkMTJlMiwgMHg3MWY4NmJjZCwgMHhkY2JjZDkxMywgMHhmYzE4NDlkMywgMHg1MTg5ZjRlNiwKKwkweGNmZDc5YmM0LCAweDliZDg2NmYwLCAweDliYmYzZTFlLCAweGZjMDQyMzRhLCAweGYzZjg5ZWJlLCAweGViNmYwY2NkLAorCTB4N2ZhMjhiYWYsIDB4MjllYzdlYjcsIDB4ODViZDY3YjQsIDB4Y2UzZjI2MWQsIDB4YTFjYTFlZjgsIDB4NzZjNGZjZmUsCisJMHgxOGY2YTFhOCwgMHgyMzcxMWJjYiwgMHgxOWU5YTc4YSwgMHg2MWViYmQ2OSwgMHhhZGRiYjcyYiwgMHg5MjI3NTM3NCwKKwkweDQ3NjNkMDYyLCAweDgzMTVhNzQ3LCAweDg0YjdiZWRlLCAweDNjYWI0ZWMyLCAweDYyOTc1ODdhLCAweDdlZjJhZGYwLAorCTB4ZGY4NjdjZDQsIDB4N2NkOGNiN2IsIDB4ZDNmNDdiNjksIDB4OTM5ODlkZWYsIDB4ZjI2NmUzMDQsIDB4N2YxMWIwZjgsCisJMHhlYmNiZjFlZSwgMHgyODRmNzhjZCwgMHgyZDg1YzRiNCwgMHg2N2VhYjc3ZSwgMHhjYzRiNTJmNCwgMHg1ZjM5YWJlNSwKKwkweDU3YTcyMjJiLCAweGU4Y2UxOTJhLCAweDRmM2UzMDM1LCAweDg0YmNmODMyLCAweGRmMzI3OWYxLCAweGQxMmY0ODM3LAorCTB4OTIxZDAxMGUsIDB4NGRmZjk5NGEsIDB4NGRmMzdlMmMsIDB4NWU4YzFkMjksIDB4MDBjODhmMzcsIDB4YTlmZWZjM2YsCisJMHg5NzY2M2VkZCwgMHg3MTI2YmEzMCwgMHhjNmVmYmM3ZSwgMHg3MWM4MDIxMSwgMHg0MDI2ODk3MiwgMHhjMzNlNzI3ZCwKKwkweDEzYzUzMjUzLCAweGE1Yzk3N2FjLCAweDRlZjZlZmNjLCAweDUyNWRiMGQ0LCAweDBiNWJhMzA5LCAweDVmZTE0YzdjLAorCTB4ODk4YTc0MDMsIDB4NWI0YjNiMWYsIDB4NmI3ZmEwNzUsIDB4NzQxZDRlZjEsIDB4ZTFjNTMyNTksIDB4ZDRjZjBhMjAsCisJMHhkODFiMGE1MiwgMHg4MDVmYjQ5ZCwgMHhjNTE4NTNkNywgMHg0OTUyNWFiOCwgMHhmY2E1ZDg3MCwgMHg4MmEyNDI3YSwKKwkweDEwZjg4N2NkLCAweGU5NGI2ODZjLCAweDdlNTgyNTNjLCAweDIwYjI2MjY4LCAweGE3ZWY3ZWQwLCAweDgwZjFjMDdjLAorCTB4OGYxNzNjNzEsIDB4Nzg1ZmRmYTMsIDB4ZmRkY2Y1MTIsIDB4YzgzNjRkZjAsIDB4MWNlYmY2YTksIDB4MzZhNTI3OWEsCisJMHhmNzA3ZjgzZiwgMHhmMTA4ZTY5NywgMHhiY2M2ZTdlMiwgMHgyYWNiODNmYiwgMHgzNWY4MTJjNywgMHg5NTcyZmMzMSwKKwkweDE2ZGVlM2M4LCAweDIyNDc1ZGZlLCAweDU3YzgyZTZhLCAweGE1Zjc2ZjQ4LCAweDgzMGZlYWY1LCAweDY1ZTQ3YWZmLAorCTB4ZmVjYmUzMTIsIDB4ODdhMTg5ZjQsIDB4YjIxODI0ZGQsIDB4MWZkNWY3NjUsIDB4ZGVmOGNlOTIsIDB4Nzk0MDE3OWUsCisJMHgyNGVmMDNlYiwgMHg4YTUyYWZjNiwgMHg5MTM2ZmNiOSwgMHg1ZTg2N2ZkYiwgMHgxNDA3OTJkMSwgMHgwMGExMjcyNywKKwkweGQ3MjI3N2FlLCAweDAyZGE0ZjRmLCAweGYwNTRjNTBiLCAweDRlYjhjM2JiLCAweGFlNzRjOGI4LCAweGNhOWYxOTM3LAorCTB4ZTZhNmZmOWMsIDB4NGFlMmJkMzMsIDB4OTc3NmIwODksIDB4OTAzYWE3OGQsIDB4YTgzNGQ2ZGYsIDB4YzY1YTFmYTgsCisJMHg0MzllZDVkZSwgMHg3ODY2YjBmMSwgMHg3M2JlMWY5MywgMHhiOTE5NmI4YywgMHgzY2RiZjY4ZCwgMHgyYjcwNzk3YywKKwkweDMwZmRjMDBjLCAweGFjMjJiZmQ0LCAweDhkNWY4YzgzLCAweDBlMDMzMDdkLCAweDYxZDIxOTkyLCAweDdlMDljYzlmLAorCTB4MjQ2N2UwMTEsIDB4MjQ5MDVmZGIsIDB4ZWI4ZmI1MTIsIDB4NDc5NWRmMWQsIDB4Njk2N2NkZTEsIDB4MGRjMTlmMjgsCisJMHhiNmViYzlmZSwgMHg2ZjljMmFlMCwgMHhhMjk0NmI3ZSwgMHhjOTliY2U5YiwgMHg0MjIxNmFjYiwgMHhlYmNjMjI1YywKKwkweGIyMWU3YzcyLCAweDlmOGViZTMxLCAweDAyNWRmN2Y2LCAweGUxYzRkM2VjLCAweGRiMjJkZGRmLCAweDQ3MmQ1OWE3LAorCTB4N2UwODUwODgsIDB4ZjI4OWVkMWIsIDB4NmE2Y2VhYzksIDB4YTM4MWM3OTcsIDB4ZDU2YmYzOTEsIDB4YzNmODY3MmUsCisJMHg4OWFiN2UxOCwgMHg3NWYyOTkyNCwgMHgxZmMyMzNmYiwgMHg3NzExZmFjNiwgMHg1MTRmYjgwYSwgMHg0MzU4ZDFjZCwKKwkweGNmMDBiMjNhLCAweGY2MWEyOWVmLCAweDQ4ZWI2YjU3LCAweGU5MTc3YzgzLCAweDc4MDI1YjRlLCAweDhiOGYwMzEwLAorCTB4NTI3N2ZkNzQsIDB4OTBiOGM0YmUsIDB4ZDZlYjYwN2IsIDB4ODFhN2YwZTUsIDB4NDA4NWQxMGMsIDB4MGZhOWU0Y2IsCisJMHgxNzhlOTg3OSwgMHg2OWUzMDdkYywgMHhkMmJmMmIyYSwgMHhmNWYwZTM3MSwgMHg0ZDdjYjEwYiwgMHg2YTU5NTdjNCwKKwkweDE0N2Y2YmU1LCAweDEyOWRkYWY5LCAweDlmYjc3YWM1LCAweDhmYzFiNWYxLCAweGFkMWY5Yzg5LCAweGJmOGM2ODdjLAorCTB4ZDZhZmM3OWUsIDB4MzM1ZjNlNzIsIDB4NzA4NTQ5YTEsIDB4OWI1MWRhZGYsIDB4MmNlNjllMzAsIDB4N2MwMTVjZGEsCisJMHgyNWFhMzJkZSwgMHg2NGRlN2MwYywgMHgxN2RmMzVmMCwgMHhkYjJlZmVhMSwgMHhhMzVhZDMxZiwgMHg3MjI2NGViMCwKKwkweGVlZDQ1NmJlLCAweGViN2I5MDA2LCAweDM4OTM1ZDdjLCAweGJlMDUzNGJjLCAweDVmMzliODA2LCAweDkzZjgwN2JmLAorCTB4YWUwOGRkZmQsIDB4MDc2YmQ3YzEsIDB4NDViYWQ3Y2MsIDB4ZmVkMzliNmYsIDB4YzJkOTI3ZmMsIDB4ZjE4OTFlZDcsCisJMHhkN2MwNjdlNywgMHhiMzBhNGYwMCwgMHg5NjNlZGM2MywgMHhkZmVhN2VjYSwgMHgwNmU3ZTljNywgMHg2Yjk5Zjk4OSwKKwkweGU1YWMxY2I5LCAweDFmYjZiMDcyLCAweDIyM2ZmODM5LCAweDlhZmUwM2YzLCAweGM5OGIzMDcyLCAweGU1YTI0MzgxLAorCTB4OGNhZTkzODksIDB4ZDNiMDI1MWYsIDB4OWU3YmM4ZTMsIDB4ZTFiNWZjMjQsIDB4YmM0MzM0ZGUsIDB4MjdmZTNjNzIsCisJMHhiZTg0Y2QzMCwgMHhjZmQyMzRmNCwgMHhlNGMwZTc0NCwgMHg3M2M5OGYzYiwgMHg3NmJlNzI3ZiwgMHhmZTM4N2M2OCwKKwkweGE3ZjQ2NDUzLCAweDI2OTIyZWY4LCAweGZmYmUzOTVjLCAweDcyMTU3MDVhLCAweDQzZjAzNjdlLCAweGI3MjhjNTgyLAorCTB4M2E2NjdhMzEsIDB4ODZhOTJiYzAsIDB4ZDMwNDc5OWUsIDB4MjhhZDc5YTksIDB4ODFiZTg2YTcsIDB4MmJmYTBhNTgsCisJMHgzYmM2MmI2YSwgMHg2OGFkOTk5YywgMHg5OGYzMzk5ZiwgMHgyNGZjMzFiZSwgMHhiODhkN2NlYiwgMHgzM2Q3MTM3OCwKKwkweDAyMjE3OTQ5LCAweDg1M2Q5ZmViLCAweDllYWEzZjcwLCAweGNjOTk1MWY5LCAweGQ1ZTIzMDFmLCAweDE4YThmZDg2LAorCTB4YmJkMGQ0N2UsIDB4NzlhNzlmNzAsIDB4OTdkYTNkNzgsIDB4M2JkNjM3Y2QsIDB4MzZjM2VkZTIsIDB4ZjA3N2VlZmIsCisJMHgzZWQzNWY0ZCwgMHgwZTVhMWFlYiwgMHhiYmM5YWVmZCwgMHhjM2IzYzQ5ZiwgMHhmYjE4Nzk4YywgMHg2ZTNlNGU0NiwKKwkweGE4YjUxZTczLCAweDMyZGY1YzYwLCAweGM3NmFkZWZjLCAweGZlYjI2NzM0LCAweDdhZTdiZTdhLCAweGJiZDFlZTU3LAorCTB4NTQ3NjhmMmMsIDB4NmY5ZjhjNmUsIDB4MDNlMGM3ZTksIDB4YTM0M2U4ODUsIDB4ZTQxODM3MTAsIDB4NGNlNzA5MWUsCisJMHgzZjA0ODQ5YSwgMHg5MjRkYzdkOCwgMHg5MDcyOWQyMCwgMHg1YWE5N2IxZSwgMHhmZjQwMTY4OSwgMHg5Y2JjNjYyNywKKwkweDNkYjJmNjg1LCAweGJjZTQwNmI4LCAweDAzODBhYmU5LCAweDUzYWJhOWUyLCAweDk2YzZmMzVlLCAweGU2ZjE5ZDlmLAorCTB4YTU2Y2MxYjcsIDB4N2VlMmQ1ZGYsIDB4YjE0ODgzOGUsIDB4ZGMyNzYzZmIsIDB4NGI3ZWQxZGIsIDB4ZTljNzM3YzgsCisJMHgwOWFlMTQ5YywgMHhjYzEzYzQwMiwgMHhiZjhmMGFlNSwgMHg3MmU2OTkyOCwgMHhhNDVmYzc5OSwgMHhlNzM5NGIxNCwKKwkweGJlMzRiOTBmLCAweGViOTM3OTVlLCAweDc2MDJkZjE1LCAweDFjYzRlNzRlLCAweDcxM2JkNzE2LCAweDMwNjc0ZjJiLAorCTB4ZGJjNzNlZmUsIDB4YzIzNGYzNzUsIDB4NTM1ZmVlZjUsIDB4ZjZlNTI1MWYsIDB4ZTI5YmVmYzIsIDB4OTkyMmY4YzcsCisJMHgzZWJiNDc2NSwgMHgyYjlkODUyYiwgMHgyNmU3YjEyMCwgMHhhMjZiNWZlMCwgMHhjY2ZjNjI0NCwgMHhmZjk3ODFhMSwKKwkweDYxZDRmMTA4LCAweDA2Y2FiZTBiLCAweGVhMTU2YjNjLCAweGRiNDY1ODYxLCAweGM3OWM2Y2E1LCAweDI4Zjc0MjYzLAorCTB4M2FlNmNmMTgsIDB4MDJmNWZiOGIsIDB4NmE3MmUzNDUsIDB4ZGJmNDBiMTIsIDB4ZWY4NTIxZGIsIDB4M2E1MmMwYmQsCisJMHg5MTA1N2I4ZiwgMHgzN2MwZWNiZiwgMHg4YzI5ZDAyMiwgMHhiMTQ0OGJhOSwgMHgzMDNhNDNkZSwgMHhlNjFiMDg5ZiwKKwkweDUxODdlMGI5LCAweDMzYzQ0YmJmLCAweGM2MWI2MTRjLCAweGY2Y2M3ZThkLCAweDc4ODhkNjQzLCAweDAzYTg4MzZlLAorCTB4ZWRjOWJmYjQsIDB4NDI5N2Y4MmEsIDB4MWFlNzdlODgsIDB4NDBiZTc3ZjgsIDB4YzRjODMxNmIsIDB4YzYwOGIyZTAsCisJMHg3Y2VkYWQ5MywgMHhhMDM5ZDg1MywgMHhhZmZiN2EzZSwgMHg1MjM3ZGY0ZiwgMHg1NDhmODE3MywgMHgxY2U4MzcyYywKKwkweDY5NGVmNTE0LCAweDVmZjJkZjQyLCAweDEyZjM4MTg5LCAweGRjNThhYmM2LCAweDJhNWY1YWNkLCAweGRlNDAxN2U5LAorCTB4MGJjMmU1YWMsIDB4N2UwNTNhN2YsIDB4NjQ2N2FhZjQsIDB4M2NhN2EzZjQsIDB4NDFiZjQ3MjMsIDB4MDQ1YjM1ZjMsCisJMHgwNzZkNTNmNCwgMHg3NzBmZTg5ZCwgMHg1MWYyYzIzZSwgMHhmYjQzYTI4ZiwgMHg4YzA1ZGI3MywgMHhkYmQ5ZDUwNywKKwkweGUyMDFiZGVmLCAweDA0ODhjZjhhLCAweDE5NzA4ZGZkLCAweGUyOWQ4YmVlLCAweDU5ZmIyNjczLCAweDgwMDc5Y2JlLAorCTB4OWExY2I2NmEsIDB4ZWM1N2RmMGIsIDB4NzdkODEzYjcsIDB4ZjE2ZTc5YTgsIDB4ZjlhMDZmYjcsIDB4ZjQ2NGM3YzUsCisJMHhhYzc2NmE1MSwgMHg2NTdmNjA1MCwgMHg0MDg4NTg0OSwgMHhjMTMyNmJiZSwgMHhjNGZiNDNmMSwgMHhiZWRhMGVmMCwKKwkweDM2OWVkYmNiLCAweDJiZmIwZGM3LCAweDQ1NWRhMjBlLCAweGE3YjRmNmUxLCAweGE5ZjRhNmNkLCAweDBkMzUzZjBjLAorCTB4MmRkY2FiYmUsIDB4OThmZmMxZjgsIDB4YTM4ZWNjZjIsIDB4OWFiYmY0MTksIDB4YTczYzA0MjcsIDB4NDVjYmI1NTAsCisJMHg5Y2JhMThiNCwgMHhkZmEzMTM2YSwgMHg5ZDMzZjg4MCwgMHg4YmM1ZjgyNywgMHhjMDM0ZWI0OSwgMHgwZDhlY2Q3YiwKKwkweGI3MTMxNjhhLCAweDkyMzBkMzNjLCAweDdjZGVmNjY4LCAweDFjNzQxM2NkLCAweDkzZWQ1ZGZhLCAweDU4YTYxZjgyLAorCTB4ZTA0MTIzNmIsIDB4OWNlN2NlOGYsIDB4MzBkY2RiNjUsIDB4MDhjYTE1YmYsIDB4NTlhYmNjMGYsIDB4YzM4Yjc2ODEsCisJMHg3ZWMxZjZmMywgMHg4Yjc4NjU3YSwgMHg1N2Q2OGQzMiwgMHgyOTQ1YjIzZSwgMHhhYWE3ZTE4ZiwgMHgyZDEwZDc1ZCwKKwkweDZkNGUzZjg2LCAweGQ0YmY0ZGNlLCAweGFlODY3YjdhLCAweDU0ZjBiMTViLCAweDg4YjdhNjEyLCAweGM0NjY1NjE0LAorCTB4Yzg3NjdiZWMsIDB4NDUzZjljNDksIDB4ZGYwNmZmNTMsIDB4MTgyNzVlODcsIDB4ZWYzZDBhYzcsIDB4NzQxYWJjNDEsCisJMHhiZDMyYTY1YiwgMHhiY2VkZDA2MCwgMHg3NTI4ZTljYSwgMHhiMzg4Y2QxNywgMHhkMDJmN2FhZiwgMHgyYWYxMGVjMSwKKwkweDFiZmJkMzE1LCAweDZjNmU5ODdjLCAweDliM2U5MGQwLCAweGUxNTc3ZjAwLCAweDdiOTYwNmJlLCAweDg4NjI5MTI3LAorCTB4YTI3NTc4OGIsIDB4M2M5ZjUyYzIsIDB4MjE5NjJmNWQsIDB4Zjk2MDEyNGUsIDB4ODI4M2RiYjQsIDB4MWJmOTg5NzYsCisJMHgzODM5MjZlOSwgMHhiNzVjODIwZiwgMHg5NjRjNGZjOSwgMHg0OWJlYmFlOCwgMHg3ZTI1MmUwOSwgMHg3N2I0YmUzYSwKKwkweDYwNzVjOTcyLCAweGM4ZTcwNWE3LCAweDFkOWZiMGE5LCAweGU4ZjE2MGFjLCAweGEyZTQwZjg4LCAweDdjY2JlZjg5LAorCTB4ZDZmMjY2NGIsIDB4N2M2MGExOTQsIDB4OGJmN2QzNjQsIDB4NDFlZGExYjYsIDB4N2QzNjVlMTgsIDB4ZWMyNzdjYmYsCisJMHhlNjdlZDFhYiwgMHgxYWFlNTRjYSwgMHhlZTRmZGE2NSwgMHg5YjQ5ZmJlNSwgMHg0ZmQ0ZDEzYiwgMHhhMzBhZGNkYSwKKwkweDhmZDhjNTlmLCAweDZjZmQ2MDczLCAweDE5YmQ3YjlhLCAweDQ2OTViOTllLCAweDhmZDhmNTNmLCAweDRhZjM2MDY3LAorCTB4MTk5MjYzYmIsIDB4YjFhYTNiOWUsIDB4ZmRkYmY0OWYsIDB4MDY4ODFmNjgsIDB4ZGM3NjkwZmYsIDB4NGVlZjc1MTcsCisJMHhjNDk2YjcxYSwgMHgxZmU0ZDFmMiwgMHgyYTFlNzhjMywgMHg5NDdjYjE1NSwgMHgyNGMxMzEzOCwgMHhiMjdhNDk0ZiwKKwkweDc0YTgzZjI5LCAweDZhN2RhOWIwLCAweDlmNTRjNzIwLCAweDg1YjU3NjVlLCAweGJmYThkZDJmLCAweDhhODE0ZjMxLAorCTB4YWIzOGIxMjYsIDB4YmQ0MTU4MzIsIDB4ODFkODNjNTMsIDB4YmIwNmJiZjksIDB4NzVkY2VmNTEsIDB4YjAyYWYwN2QsCisJMHhkMDU2MDBmNywgMHhjMTI5NzdmMywgMHhiZTFjNmEzMSwgMHgwODEyZjNhMSwgMHgxYjM0Y2ZjNiwgMHgzMmVjN2RhNCwKKwkweDc5MzllZmJlLCAweGRlMjM1N2M4LCAweGQ5ZDdkZmE3LCAweGQxMjQ0N2JhLCAweGYxNGE0M2ZjLCAweGFkZWYzMDIzLAorCTB4OGRlM2IzMzIsIDB4OWQ4MjQzMzgsIDB4Y2U2YmZlYTAsIDB4OGExNmRhMmUsIDB4NTBjYjZiYzEsIDB4NmY0MjJmY2EsCisJMHhkMDcyMmRiZiwgMHg3M2I4ZmMwNywgMHg0YTU3NmZmNSwgMHhhMWE2YmUxNCwgMHg3YTZlMWUwYSwgMHhlMWVkZmU1YywKKwkweDliOTliNTEwLCAweDAwZmI5Njg3LCAweGVhODU3NmZmLCAweDE1ZjFkODhmLCAweDhlM2U3ZTNhLCAweGRmYzYxYmJmLAorCTB4ZDkzYjMzMmIsIDB4NjczZGJlM2EsIDB4NDc3YzY5YTIsIDB4N2M2OTg1NTYsIDB4YTdjNzQyODcsIDB4ZjU2ZmIxZjIsCisJMHg4YTdjN2MzYiwgMHg3OTA5ZWJiZiwgMHhjNzA3N2U1NiwgMHhlMDU1NjdiNywgMHhhOTBhY2RmOCwgMHhkMDlmOGQzMCwKKwkweDkwMDFmZTMzLCAweGNkZmRjMzlmLCAweGYzN2FlNzNmLCAweGNkMmFiM2ZjLCAweGZjZDg1N2YzLCAweDgwZmVhZThmLAorCTB4ZjM4MDlmOGYsIDB4ODBmZTU5N2YsIDB4OTJhYjNmY2QsIDB4ZmFjZWRmY2QsIDB4ZGJkZjE5ZWQsIDB4NjE1N2ZmODMsCisJMHgzN2Y1YWZmZSwgMHhlNjQ5ZGNmZiwgMHgzNmFiMGZmOSwgMHhjNmNlZGZjZiwgMHgyN2Y1NjM3ZiwgMHg4ZTM3N2M3YywKKwkweDA5ZmNhNmZmLCAweDZhYjBmZjliLCAweDA3YjE1ZjFjLCAweGNhNDdjMGZkLCAweGYwN2E4NDkwLCAweGE0NjFhOTlmLAorCTB4YTM1ZDQwNjEsIDB4OTIzYTQwZTMsIDB4YzgzN2E5YzUsIDB4NWRjNzA4MzksIDB4M2VlZjhjMDksIDB4ZTZmY2EwNGYsCisJMHgyNGE3ZDVlZSwgMHhlYTkwMjU0YywgMHhkM2NlNWFjYiwgMHgxNThiYmI1NSwgMHhkMDg0MmZlNiwgMHg0MWM0NTg1ZiwKKwkweGM0NWZiODVkLCAweGI0NmM4Y2Y1LCAweDc4NTM4Nzg3LCAweDIxOGJmNzNiLCAweDc4ZGMyZmM4LCAweGFjNWI5ZTIzLAorCTB4NzdkYzEzYjMsIDB4ZmEzMDU2YTcsIDB4YzBmMWZmMWYsIDB4ZjNiMWFkZTgsIDB4NWE4YmE2YjIsIDB4MTNmZWNiNjUsCisJMHhlZjM4Yzc4MywgMHhhNmFiMjQ1NCwgMHhhNzg4MjlmYywgMHgxMjdjM2Q1MCwgMHg5ZTlhMWZmYywgMHhiNDc4ZTk5NiwKKwkweDgzZjA0M2ZjLCAweDFiOTU4YWFlLCAweDc2OGMyZTc2LCAweGNlOWYyMjc3LCAweGZlMWNiYmViLCAweGY3YzMxMjUzLAorCTB4ZGMwNTNiYTksIDB4YzM3Y2Y4NDcsIDB4ZDlmNDA1NTIsIDB4Yzk5NzU2YTIsIDB4NzRlM2E4NmYsIDB4OGVjZTdlZWEsCisJMHg3OWM2OGRmYiwgMHgxNDUwNWJiZSwgMHhjMWZkZjkwOSwgMHhiYjA1MWQ2ZiwgMHg0MWU2ZjE3MSwgMHgyNzZlZWZhNiwKKwkweDE0NzBkNWUxLCAweDc5ZmFjMTczLCAweGZmM2E1NTQzLCAweGUzZWNjYWRiLCAweGViNmI4YzQ0LCAweDljMWM1ODQzLAorCTB4NDliODgxMGMsIDB4NzkwNmRiNTksIDB4NTJkY2NkMDgsIDB4ZjllYzliMjYsIDB4ZmNlNjgzNWIsIDB4N2NlNjE1NmQsCisJMHg2ZDk2MWNhNywgMHgxMTJjY2Y2MCwgMHhlZmRhMTZjOCwgMHhjYjY1ZWJmNywgMHg4ZTM2MDBiOSwgMHg3NmU2NDk1NywKKwkweGJiZWYxYjI1LCAweGI0MTk4Njk0LCAweDhlOTBmYmU4LCAweGU5MTU2MjgzLCAweGRmNjU1NzNhLCAweGRkZDRmMDFhLAorCTB4YWUyODkzMmQsIDB4YjhhOTFkYzcsIDB4NDU0YTE0MGYsIDB4YjJhODJkYmYsIDB4OWRlMTViNzksIDB4MDBmNDNiMmIsCisJMHg4ZmVlNjc4NSwgMHgxNWE3YzQ0NCwgMHgyZTgzOGVmZSwgMHhmM2VkNDZkZCwgMHg5MDdmY2Q4ZSwgMHg5ZDZjN2UyMSwKKwkweDNiZmUxNThmLCAweGEzZTc1Yjk2LCAweGNjM2ViMDJhLCAweDE5Y2I1OTBiLCAweGE5Zjk1ODlmLCAweDM2ZjE3ZjZlLAorCTB4ZjM3YjNkYjMsIDB4YjVmYjU4YjYsIDB4NTMwY2Q3NmEsIDB4NTZmODQ5N2UsIDB4OWJjNWZiNTMsIDB4MTdlYTk5ZTcsCisJMHhkNTMxMmViNSwgMHg2YTU5NjgyZiwgMHhmZDBiY2ZjYSwgMHg4ZWZlZDRjOCwgMHhmNTRjMmJlNSwgMHg2MzVmYWZkZiwKKwkweDYyYWRiZmFhLCAweDZiN2YyOTgzLCAweGZiNTMyMWYwLCAweDk4YjZjYTViLCAweDQ3MDc2ZGVhLCAweDY4ZTQwNzdkLAorCTB4OWUyMmViZDUsIDB4M2VlMGJkZmQsIDB4OWJkODJmNzUsIDB4ZWUxMmRjMTcsIDB4ZWQ0NDdlNzMsIDB4MzM4MzkwMTUsCisJMHhiNDgxNWVkNCwgMHhmNDc4ZmY3MywgMHgyYzFlYTlhNywgMHhmOWEyNGQ4NywgMHgyZDU1OThjYSwgMHgwOTk3YTA5OSwKKwkweDY1NzJjZmVhLCAweDI0ZDBhYWMyLCAweGQ3YjAxNzhhLCAweDliODg3Y2E5LCAweDA0MWQxMjE1LCAweDBmNzI0Y2NlLAorCTB4MzE4Yjc3MWYsIDB4YTk5NzFkZjUsIDB4N2QwNTRjZGYsIDB4YjE3YWRmN2MsIDB4ZGQ3OTdlMjMsIDB4ZDRjMzc5ZDYsCisJMHhhZjZhN2UzOCwgMHhiMDIxOTJkYywgMHhjZTU5NzVjZSwgMHhiNTY5MTg5ZiwgMHhiMWE3M2NlNSwgMHhlYjgxN2RiZiwKKwkweGU5ODU2YWQ5LCAweDE5YmRlYTgzLCAweDg2NzM2MTkzLCAweGUyMjNlNWZhLCAweGY5ZWM5YjlkLCAweDBkYjAyMjNlLAorCTB4NTNmZWIwNDgsIDB4OTg4NjFmODEsIDB4NzZhYTZiZjYsIDB4ZmJlNDlhZTUsIDB4ZTExMTIxZWMsIDB4NDA5ZDA1YWEsCisJMHg1MjE3ZWFmNSwgMHg3MjAyOGQ2MCwgMHgzNTkyM2QxNiwgMHhhMWMwMzQ2YiwgMHhlZjQwNTVhZiwgMHg3NWM1NGZlYywKKwkweGU5NDM2Y2ZkLCAweDNmYWZkODM2LCAweGY0YzAxMGQzLCAweDRjMzI4NmEzLCAweDMxMDQzNTRmLCAweDAyYTFiMGZkLAorCTB4ZjUwZDkzZDMsIDB4MmMzNDc2OTgsIDB4ODZiZGY0YzcsIDB4MzZlZmE2MTAsIDB4YmJmYTYwYjQsIDB4ZGY0YzU2ODYsCisJMHhlOThjZDg2YSwgMHg0YzYxMGQxYiwgMHg0Yzc0MWIzYiwgMHhkMWU4NzkwZCwgMHgwZjZlMDFiZiwgMHg4NGQ3MWIxYiwKKwkweDJlN2NjM2RiLCAweGU3M2RhOThkLCAweGY3ZmY3MGMyLCAweDExZjNmYmJjLCAweDdmOWZlZjYwLCAweDZjZmI4ZWNiLAorCTB4Y2FjYmUxZmQsIDB4NTFkM2ZkNmYsIDB4M2NhNTdiNDcsIDB4NjM5ZDA4M2MsIDB4ODEzM2JkNmIsIDB4MjM2OWM5ZDEsCisJMHhlYzFjNjRhNSwgMHhjZmY0ZWNmZiwgMHhjNGJjYzdjZiwgMHhmZDg0ZjUyZSwgMHhmYTcxM2MzMywgMHhmYTVkNzg4NSwKKwkweGY0NDRlOWU1LCAweDk0OTk4MmVlLCAweGZlMWVhNzFlLCAweGY3ZTgyMmFmLCAweDYwN2ZhYzAyLCAweDcxMTExYzA3LAorCTB4NmRkMTI2MWQsIDB4OTVkN2EwN2UsIDB4ZTE3ODRkZTIsIDB4MmYxMDU5ZjcsIDB4YmY4M2Q3M2IsIDB4OGI4ODJjZjYsCisJMHhkOGE4YWI1ZCwgMHgzYjM2ZjlmZiwgMHhmOWQyZjg4MSwgMHhjZmJjMmUwMywgMHgzNmQ4ZmU3NSwgMHgzMmUzYzgyZiwKKwkweDNkOGUxODlmLCAweDZiNGQ2MTQ3LCAweGI3NjFkOTIyLCAweGU3MzZlZmM5LCAweGE1MGFiN2NmLCAweDY4OWExZTc4LAorCTB4MDM0N2IzODksIDB4Mzg2MWE5NWYsIDB4ZTBkOWQyMGYsIDB4NjdlOGQ0YzMsIDB4NzFjMTRmOTksIDB4NjVjYWVjY2UsCisJMHg1ZTdlMzM3MSwgMHg0MjRlZWM4MywgMHgyNzdlYTU3ZSwgMHg4NjlmZmZiNiwgMHgwYzdlYmZhNywgMHgyMzY5MDg3OCwKKwkweDVlMDgzODFmLCAweGRiOThiYjcxLCAweGY5N2VmYjdmLCAweDgxNGNmYTQ5LCAweDIwMzkyYWY4LCAweDgyZjYwZTdmLAorCTB4MTE3N2ZlOWQsIDB4NjEyMjY1MWMsIDB4MmViN2U4ZGUsIDB4NjNlYzg2MjIsIDB4NjliNzdjYTAsIDB4NjY5ZGZhM2MsCisJMHg3MzE3ZjRmOCwgMHhlNmI3YzUyZSwgMHgwNDIyMzRmYiwgMHg5YzQ2YmY2OCwgMHg4MGZlMGFhNCwgMHgwMmY1MzBmMywKKwkweDc4OGNhYmM2LCAweDZlZTQ5NzQ5LCAweGM2ZjRjNjExLCAweGJjNzhlYTRiLCAweGExZDFjNmI4LCAweGI5ZDE2OTA0LAorCTB4ZWU0YmRjYjYsIDB4Mzg2OTllOWYsIDB4YWYzOWMyYTYsIDB4MDJhYjQ3MGEsIDB4NjQ0NTRmY2UsIDB4YjllODA5NTQsCisJMHhkMmFiNmQ3MywgMHgxMmFjMWVjMCwgMHgyZjE1ZGZjZiwgMHg2NzY3OWI3ZSwgMHg2MTI1YmQ3MSwgMHg4ZWJjZGJiOSwKKwkweGI0MjBmZTcyLCAweDFkOWNhMzVmLCAweDhhOWY3NDcyLCAweDMxYjU5ZmM5LCAweGVmZGFkYjNiLCAweGY2YzBmYjA0LAorCTB4MWY3NzZhMmQsIDB4ZDY4Mzc2OWYsIDB4ZmJiNTRmMTcsIDB4M2UzMDU1M2YsIDB4NWM1MzExMmUsIDB4N2JkZmMwYzksCisJMHg5ZDgyNjA0YSwgMHhkNzcyYTllMiwgMHg3ZThmNjhmYiwgMHhkYzQ2ODcyNCwgMHhkNGZkMDk3ZCwgMHg5ZjZlN2U3NywKKwkweDg4NzI3Y2U5LCAweGYzMzhjM2I0LCAweDg4ODFmMjI3LCAweDc0M2JjYjc2LCAweDE1ZjhmZDNkLCAweGU0ZGI5ZDk5LAorCTB4ZjY3YjgwZTcsIDB4ZmViZWY5OTUsIDB4ZGY5YjllMDIsIDB4ODRlNzg1NTYsIDB4OGZmN2RlM2UsIDB4MjQyZGZmNjgsCisJMHg4MWQyMmYwMSwgMHgxZDgxMTZiNCwgMHg0YWQ4OGU3OSwgMHhjOGU3NGYwMSwgMHgzMWYxZGU2YiwgMHgzYTk1Yjg3NCwKKwkweDA1ZWY0MDRhLCAweDg2M2I2NjJkLCAweGZjYTZiZmRhLCAweDdjZTZjZGUyLCAweDA2OTk5OTM5LCAweGEzN2NhNGZhLAorCTB4Y2UwMmMyNGMsIDB4YjM3ZjU0Y2YsIDB4MTc3ZWM1NWQsIDB4NTgyNmZhOTMsIDB4OGZlZTI1NTcsIDB4MzQ4OTU3Y2MsCisJMHg5YWQ1ZWE4NCwgMHgzNDU2N2Y2NywgMHhiNDExYzI4ZiwgMHg4OGM4M2YzMywgMHg2NjQ5MmNiZiwgMHg0YTY1NjA3NiwKKwkweGMyN2Q4MTU4LCAweDdmYzZkYTBmLCAweDgzMjAwNmY3LCAweDcxMDRkYzNkLCAweGZjNDg5MjI4LCAweGZjNWY0ODNiLAorCTB4NTZmYzI5NWUsIDB4YmFmNThkNzgsIDB4YzM4ODFjNGYsIDB4ZTIxMmVlMjEsIDB4ZGFkNjAzZWUsIDB4ODZjZjZlMDUsCisJMHhlN2MwM2QzMCwgMHhjNzA1Zjg2ZCwgMHg3NjE1ZjkyYywgMHgyNDUyZGU3ZSwgMHg5Y2ZkZDAyMiwgMHgxMmQ5MDhlYSwKKwkweDg1MWZkZWIxLCAweGJiNWVkYzc4LCAweDcxMDY5NTdmLCAweDdiNmFjMGZjLCAweGRmZGM2ZjZhLCAweDBmNjQ5NzY4LAorCTB4ZTE1OWY5NjIsIDB4ZjczYzcyZDUsIDB4ZjAwYjQ1MjAsIDB4ZWY4ZjIxZGUsIDB4YzQxZjljMmIsIDB4OWMwMTZmMDQsCisJMHhkYzQwZjUyMywgMHgzYTc1Y2UxZSwgMHhkZjIxNWJiZCwgMHhmM2MwYTllNCwgMHhlZjIwNzUxZiwgMHhiYzdiYmZiNCwKKwkweDljNDE4ZWQzLCAweGEzNWE0MWRhLCAweGJiNWZlNTNhLCAweGEwMWZiMmNmLCAweDkwMmVmMzk5LCAweDUwNjdkMDRiLAorCTB4MDlhMmU3ODAsIDB4MjM1Y2I5YzYsIDB4N2UzY2VkY2QsIDB4MmUzMWZlNzMsIDB4NDM4MTc0OGYsIDB4ZGYzOWVlM2UsCisJMHhlMTQ3NzBlNiwgMHgyODk5MDkzYywgMHhiN2YxZWQ5ZCwgMHg2M2RmYzA3MiwgMHg1NmZkYzNmMCwgMHhjYWE3N2Y2OCwKKwkweDdkZjJkN2RhLCAweDllZGYzYmRkLCAweDA5N2M5ZTljLCAweGE1Zjc1NDdkLCAweGViMzFjMjQwLCAweGFkZDQ5ZDQ4LAorCTB4N2RkNjFmMDAsIDB4ZDdmOTYxMjksIDB4NWQxYTliZDYsIDB4ZTZmNDYzNTUsIDB4NTlmMDRhMmIsIDB4MjdhNjA0ZmIsCisJMHg4ZTgxM2UwMSwgMHg2NGRmYmIxMywgMHgwMjcwODdiZCwgMHgyZjQyNjFmOCwgMHgzODZkN2MzZiwgMHg3ZjQ5ODg1MiwKKwkweDhmMDRhN2JmLCAweDZiZTM4M2M1LCAweGQzZWJlZmY3LCAweGJiZTAwOWZmLCAweGYzZmViMWZmLCAweDExZGZmNGZhLAorCTB4Njc5YWZlMGYsIDB4ZDEwYmVjZjcsIDB4MTdmMmI1ZjUsIDB4MTBlMTc4MGYsIDB4NmI1MmM3ZDMsIDB4YWNlZjljMWEsCisJMHgwYmRhYjFkZSwgMHgxNDkxZjk3MiwgMHgzZjVkMDJmMiwgMHhlZjcxOGIwZSwgMHgwYzNiYTZlNywgMHg3MGRkZDNiZSwKKwkweGYzOTZiMDhmLCAweGFmOWY5OWRkLCAweDJmZjgzNmZiLCAweDU1OTBlZjlmLCAweGIyZWMwZjhjLCAweDI5OTRlZDQ3LAorCTB4MzA5NmRiNmIsIDB4N2Y2NWQ4ZjksIDB4ZjE5YmU1OWYsIDB4N2VkZDUzYmMsIDB4N2NhOGJlYjMsIDB4MGQzNDgxZmMsCisJMHhiODg1NTUwZiwgMHhmZjQ1MWNmZiwgMHg3ZmZiNzZhMCwgMHhhYmJiMDM0YywgMHhkZWEzNzQ4ZSwgMHhlMzA3N2ViMywKKwkweGY2OGM5OTdmLCAweGIxMjUzY2MwLCAweDBlNzFiZDZmLCAweGE1ZTM4ZWFiLCAweGRlMWQ2ZGFlLCAweGJiNmJhZjEzLAorCTB4OWExMzM0ZjksIDB4YWQzYmY0MGUsIDB4YmI3MDU1ZGYsIDB4OWYzMGUxZGYsIDB4NDJmMDM0ZGYsIDB4NWZlZWNjYzIsCisJMHgwNTgzYzRmNSwgMHhjZWI4NTNlZiwgMHgyYmM1N2Y2ZSwgMHgyOWYyYzdlNCwgMHgyM2U3N2ZkMywgMHhhNWZiMWUwYiwKKwkweDc1NWNiZmQ2LCAweDZiMThmZDUyLCAweGI0ZWIxYjVmLCAweDJiZmI5ZmI2LCAweDJkNWE1ODA3LCAweDBmZTBiZDQ3LAorCTB4ZjE5MTZmNTYsIDB4OWVmNTdiYmMsIDB4ODYxZjNiNmQsIDB4NzZkYmNjZjgsIDB4N2ZkYTcwZmYsIDB4ZGU5NzllZDUsCisJMHhhYmU2OWViOCwgMHhhNjUzOTI5ZSwgMHhlMWI4NjliMywgMHg5ZjQxYTI5ZSwgMHhmMmRmZmEzYSwgMHhhOGY0YmQ3MSwKKwkweDQ1MjVmYTdjLCAweDdmY2FjZDFiLCAweDk3NGJkYzljLCAweDI5MGVhN2FhLCAweDdjNWY3NDY0LCAweDUyMWM4OTRjLAorCTB4ODViNjdlZDgsIDB4YTdmNzkxM2UsIDB4ZWFiMTVmODEsIDB4ZDAxNDJmODksIDB4MTQxZjFmNWYsIDB4MWM3NjdhNDgsCisJMHgwOTc5NmU3YywgMHgxM2MwNjNlZCwgMHhhYmQzOTNkMiwgMHhmNjk2N2U4NywgMHhhODJlOTQ3NSwgMHhiMmY0MmQxNywKKwkweGFmOThmYmI2LCAweGM0MmZkMDA3LCAweDNmN2YyOWUzLCAweGI3ZDg0YmY5LCAweDBmZGQ5ZGY5LCAweGYyNzhhODc4LAorCTB4OWYzMGJjOWYsIDB4ZTMzZDUyZDMsIDB4NGVhZDlmZjMsIDB4MTUyMGZiODMsIDB4YzU0ZDI4NzIsIDB4M2M1Nzk1OTQsCisJMHhiZmU0MDNmYSwgMHg5MDdmYzdjNSwgMHhlYWM1Y2VjNiwgMHg1NzVjZmMxOSwgMHhkMTczY2MwNiwgMHg5ZTcwNzMyMywKKwkweDdjODgyNGU1LCAweDc2MzNmMTU4LCAweDQ0ODJmY2NmLCAweDIzOGE5ZjRhLCAweGQ4MzlmNzI3LCAweGFiN2E3NjNhLAorCTB4NGYxMTM3MWQsIDB4ZmIwMjQyYzMsIDB4ZTE4OWFmMTgsIDB4NjQwZjE4MWQsIDB4NjA3ZjBkZTcsIDB4NjU5MTNmZWMsCisJMHg2MGUwYmY5OCwgMHgzMGU0NWFmNCwgMHhhNWQxZjFlZSwgMHhiNzdmOTYyNCwgMHg5ZDAzYjczNywgMHhkM2Q1MGNjZSwKKwkweDQ3NWM4ZTIxLCAweDg3YzcxMGE0LCAweDJiZjY5MTcwLCAweGNlOWE5ZjFlLCAweDUyNjgxZGNmLCAweGVhOGVmZjExLAorCTB4MGU1MDI5ZmYsIDB4ZGQ2NWRiZWQsIDB4OGVmYTYwNTksIDB4MWRlZWNjNWMsIDB4M2UzZTRlZmYsIDB4ZWMwMTNiODUsCisJMHhkNDY5ZDNkNywgMHhiZjMzOGMxZSwgMHg5ZDYzMGUwMywgMHgwYzU2NzZhNiwgMHgzYmM4YzU5ZiwgMHg2YmVkZmY5MywKKwkweGYyMWJiYzk4LCAweDBhNTE5ZTFmLCAweDYwOWQ5ZmY1LCAweDgxZGYwNDcyLCAweDhhZTE0MmZkLCAweGExZmQ2M2E2LAorCTB4MDdlYTAyZDksIDB4OTNjNjg5M2IsIDB4OTczMmVkZjMsIDB4OTViZDczNzMsIDB4MTJmYzI4NWYsIDB4N2MzZGM3YWMsCisJMHgyMzI0ZTMwMywgMHgyZGJlZDAxZCwgMHg4ZmJmNDhkZiwgMHhhZTMwYWJkNSwgMHg4NmJmNmZiNywgMHhmYWU2MmYxYywKKwkweDFmNDVhZDYwLCAweDA3NTI0NzkwLCAweDJkNWI3ZmI0LCAweDBjM2U3Nzg3LCAweDM1ZTU0YmYyLCAweGNhZmM4MWE0LAorCTB4MjdjMTVlZjgsIDB4ZjFiYzhmYmIsIDB4OWZiNzJhM2QsIDB4MzViOTBjNDQsIDB4ZGNhYjU1ZWIsIDB4NDA5ZGVjNTYsCisJMHgyN2VkYzllMiwgMHgyYjg5M2Y2ZSwgMHhhZTNjYjRiNywgMHg5MDNiYmFkYywgMHg3YWQ2ZmY5ZiwgMHhkM2UzYzBkNSwKKwkweDdhMWEzYzE2LCAweDVhN2MzZmIyLCAweDFkYjdlNGY1LCAweDQ5M2Q1YzVhLCAweDQ1MjA5ZGZmLCAweGUwZDFmOTdkLAorCTB4MmFmZjgzNDMsIDB4Y2YwNmE1ZmYsIDB4YTlmMGY1MGIsIDB4N2MzZDg3YzEsIDB4OWY2MWYwNmEsIDB4OGYwOWE0NzgsCisJMHhlMWJiZmFkNiwgMHhjMDg1M2E2ZiwgMHhjZmM2MzI3MywgMHhmZGIwMGZhYiwgMHhkMWRkZmE2NywgMHgyZjg4ODUyMSwKKwkweGQyMzk5NzFkLCAweDRhNDg3NDdhLCAweGM5NmMzZTZjLCAweDc1ZWQyYzQ3LCAweDY5NjAzZTRiLCAweGViZTRiNDFmLAorCTB4ZjdhYmVkNGQsIDB4YjlkODUxMWYsIDB4OWRhOWE4OWUsIDB4ZTRhN2ZjYjgsIDB4MDFmMTM4ODMsIDB4NmJhYTFkNjMsCisJMHgwMTA5NTRmYiwgMHhmMWJiYjg3ZiwgMHgwOTI1Nzk3YiwgMHhmZTVlMjA3OSwgMHhmMmYxODhiYywgMHgyNmUzOGEyZSwKKwkweGVlZDc0ZTNhLCAweDYwOGY3YzZjLCAweDU3YzU5M2I1LCAweDJmNmVkNGJhLCAweDkzYWI5M2Q4LCAweDU1M2JiZTU4LAorCTB4NjgzZDAyNjksIDB4NTkzYjc3OTQsIDB4ZDAyYmFmZGMsIDB4YjE4YTRkZWQsIDB4MjAzZmRlZWYsIDB4MDhlZjFlYTIsCisJMHg3ZTc4ZDI5MywgMHhhMTQwZGUyOCwgMHhmZDIwZWRmOCwgMHg4MGZkYjNkNSwgMHg2MWQ3YjAyZSwgMHgzMGFjODRiYywKKwkweGQxNTRlM2YwLCAweGUyMWNiNTlkLCAweGRlMjJhZDM1LCAweGUyYjg1YjZiLCAweDIzOWMyZjE2LCAweGZiOTAzYWU5LAorCTB4YmU1YTMyOWQsIDB4ZGIyMmQ3ZTgsIDB4NTJlOTBjYTYsIDB4ZjgxZjhjNDYsIDB4OWE2ZDA5MTEsIDB4ZjVmZWMwMjQsCisJMHgwNTlmZTQ3YSwgMHhiODVmOTgwNywgMHg3OTdjN2Q3MCwgMHg5NWRmZTRhOCwgMHg0MDU0ZWZiYiwgMHhlZTdmNTJlZiwKKwkweDg3YmVlYzY0LCAweDIzYzU0ZmQxLCAweGZmMDNmMjk2LCAweDE1YTZlNWM4LCAweGRiOTUxZmUzLCAweDFlNDFmNWNkLAorCTB4ZTRlYzE4M2YsIDB4OTJjN2JlZTcsIDB4Yjc3ZmRjYjEsIDB4OWUwZmRlYzUsIDB4YTc3ZmU2MmEsIDB4ZWJhN2QyOGMsCisJMHgzY2UwNDg5OCwgMHgyMjAzZjljMSwgMHg2ZWZjZTdkMiwgMHhlMzAwN2U3NiwgMHhiZjAxZDdmYywgMHhlN2IxMmI3NywKKwkweDdjODJjZWE5LCAweDFlYmZkNTVkLCAweGVmY2NmYjNiLCAweDNlMDZlZThiLCAweGMxNGVmN2RhLCAweDc2N2E2OTRmLAorCTB4N2UyM2RiZGYsIDB4ZGY2N2Y5MDUsIDB4ZjQ4NzdhY2MsIDB4YTBlNTNmNmQsIDB4YmE1NWY3MTMsIDB4ZmY5MDdhMGUsCisJMHg0ZGZmOWViYiwgMHg3ZjkwZGRkNiwgMHhlY2YxOGVjZSwgMHgxNDVmODNhZSwgMHhhZDc1M2YwMCwgMHgxZTgwNTdiNCwKKwkweGVmZTdlMmVjLCAweDQ1ZmYzZDU2LCAweGJmYWUwNzQxLCAweGE5Yzc0ODhkLCAweDlmNGZlNjRlLCAweGVmNWZmMDNmLAorCTB4ZjM4MWZkYzEsIDB4YzBhY2U4MDcsIDB4NDJlODM4YmUsIDB4YTVmYmFhZjksIDB4NWQ2ZmUzMTMsIDB4MTQ1MTdmY2YsCisJMHhhNWZjMjdlYiwgMHhmYmU1YTlmMywgMHg1MjFlNWQ5ZCwgMHg0YmUwMTdiNiwgMHg3NTQ0ZmI2MiwgMHgxYjZlYmFiZiwKKwkweGQzNTEyZmJjLCAweDQwNTk0ODc2LCAweGYwYmNhN2ViLCAweGFmZDAwMmE3LCAweGRkOTk3YjVkLCAweDNjNzcyOWQ0LAorCTB4ODE3OWZiMGEsIDB4Y2EzNDBmMzUsIDB4MjA5ZDVlOTQsIDB4ZmY2OTgzNjQsIDB4MDEyOGRlNmIsIDB4OTc4YmVhMzksCisJMHg3MTVjNjEzZiwgMHhmYzU4ZjhhMCwgMHgwNDNlMGQ3ZiwgMHg0ZjNmZTk5ZCwgMHgyOTg1NGMxOCwgMHhkZWY4ZmYwNywKKwkweDBlMjdhMDNiLCAweDhkMmY5MWRhLCAweDU5MTI3ZWY5LCAweGU1Y2NmNjgxLCAweGZmZjRkZGU2LCAweGU4ODViY2RjLAorCTB4MDNiZGU2NDAsIDB4ZWZlMTNkZTYsIDB4YzBkN2RlNzcsIDB4YmVkNGExYTEsIDB4Y2Y5N2QwNzIsIDB4ZjMwYmJmOWYsCisJMHg4NDdlM2M3YiwgMHhmZWZjODA3NywgMHhmY2Y5ZGZkMiwgMHg3YmVlOThhZiwgMHg5N2JkZGQyOSwgMHg3Zjg3Zjc5ZiwKKwkweDlmZWVmM2U3LCAweGNiOWViZmVlLCAweDc5YzJhZWU5LCAweGZlMTdiYTk4LCAweGE5NWRmMDg0LCAweGZlMTI5MzllLAorCTB4YmZiZGU1YmUsIDB4ZmVmNjFiZjksIDB4MzViZjliNWEsIDB4OTNjZjFiMjcsIDB4NzBiMGMwM2EsIDB4NDBiNjY2N2IsCisJMHhjOGVkNzE3OCwgMHg5ZGQ4MmE5OSwgMHhkNWVmM2Y2MiwgMHg3ZTYwNDg0YywgMHhmN2IwMjg5NSwgMHgxNjUwYzgyMSwKKwkweGNmZGMyNDBmLCAweGY4MGQ2MzgyLCAweGRkOWI4ODBlLCAweDRkZGM5MzNiLCAweGM5MTM3NzY4LCAweGJjNTNhZWRmLAorCTB4YmU3YWJkYWMsIDB4OTExYWNmMWYsIDB4MjEwNTZmNzEsIDB4OGZjOTM5OWYsIDB4YmY4YjZlZjEsIDB4NWQxMDI4ZDksCisJMHg3NGFlZjZhMCwgMHg4MThmMzdmNSwgMHhiNDhmMjNkZiwgMHg5ODA1ZWQ0NSwgMHgzMzY5MGZiZSwgMHhhYWNhNjM4ZiwKKwkweGRjODdmMjYyLCAweDUzYmNlNmY5LCAweGJjZWRlNzMzLCAweGYwNjEwNzNmLCAweDBjMjQ3YzNiLCAweGQ0NzE2Y2YxLAorCTB4ZDNjZTE1NjEsIDB4MDIyNTYzODksIDB4NDkzOGE1NGYsIDB4MGVmYzA4NmIsIDB4N2RmY2NmYmIsIDB4N2VlMTAyNTIsCisJMHhjNzg2NWZlZiwgMHhhNzE2MDQ4YSwgMHhlZDcxODUxMiwgMHg5NDcxZTAzYSwgMHg3OGRjZTMwZCwgMHhlMmYxMWI0OCwKKwkweDA4YmFmN2M3LCAweGYxN2JhZmY3LCAweGY4MGVkNGRhLCAweDY2M2ZjMDk0LCAweGQ1ZmExN2Y2LCAweDEyZDNmYjg0LAorCTB4NjkxYTQyZWYsIDB4NzZlNjlkZDMsIDB4MmNiZThmZGMsIDB4YjI1ZDE4OWQsIDB4OTY5ZDM5YWEsIDB4ZDA2MmU4OTksCisJMHg0YzdkMGUyMSwgMHg3Y2YwMzE3NCwgMHhkMmIxZjRhNSwgMHhlYmZmOGFjNSwgMHhmNzVmMTgxMywgMHgyZTgzMmY0NywKKwkweGVmMWQ2ZTk5LCAweDdmZGNjOWQ3LCAweDEzM2YwMTI4LCAweDgyMDE5OWYyLCAweDdmZGNhYmZiLCAweGJjNzQ1MjkwLAorCTB4N2VhYTI0YTcsIDB4N2UwMDk3YmMsIDB4ZTAxYTk0NWMsIDB4ODZkZWVmMmYsIDB4M2Y3M2E0ZjEsIDB4MDBkYmZmN2YsCisJMHg0NGFmZDU0ZiwgMHhlYmY4YTBlMiwgMHg1MTIxZWRkYywgMHgyYjBhNWVmOCwgMHhiNjU2OWZlMCwgMHg0MDRmYjg4OSwKKwkweGFjZDE2OGE0LCAweGMzNjI3ZDk4LCAweDg1ZmFhODBmLCAweGI5NTNlNzA3LCAweDRlOWUxZWQ3LCAweGY3ZGNhZmJmLAorCTB4NjFkYTAxNDEsIDB4Y2ZkMWJiMmIsIDB4NjA1Y2ZkMDksIDB4MTQ3NTBmNzQsIDB4YTU3MDNlYzAsIDB4MmIxMWZjYzQsCisJMHg2MDQ5YWNiZiwgMHhjZmIzOTZmMSwgMHhhZTIwY2FiOSwgMHhlNzYyZWMyMywgMHhiNzIzMmI3ZiwgMHg3Mzk4ZjZjOCwKKwkweDk5MDRhMTRkLCAweDczOWU5YmM1LCAweDNkMDg1ZWExLCAweDI4ZjllMDIxLCAweGRjZjYyZjgwLCAweDljODdlMWE5LAorCTB4ZjA2MDQyN2QsIDB4OWRmMTk3ZWQsIDB4NGY1ZGNhOTgsIDB4YWE3YzQyNzUsIDB4MWZiYjJkZjIsIDB4NWRiYWY4Y2MsCisJMHhjODdlZTI5ZiwgMHhmMWVjNWY5NCwgMHgyZTFmYTA3NiwgMHg3ZDEyZTI5YSwgMHg0NGJiMDFlMiwgMHhiNmRhOGZlNCwKKwkweDY4NDNmNDFhLCAweDM2YTJmOTFlLCAweDJiZWZmZGMyLCAweDdlYWI1N2Y0LCAweGI4M2VmY2YxLCAweGY0ZjU1NjcwLAorCTB4N2Y4ODVlZTMsIDB4ZTFkZjY5OWQsIDB4YWVjMGI4YzUsIDB4ZmFlN2M3NGIsIDB4MzU5MWZmZjgsIDB4ZDZmZmZmZGMsCisJMHgzYjRmNzY2OSwgMHgwNjdmZmZiZSwgMHhmMTc2YTBmZSwgMHhmYjk2MDlkMywgMHhiMTA2YmJhYiwgMHhiNDQ5MTRmNywKKwkweDcxZWY1MmU4LCAweGYwYjllZDU1LCAweGNmYWZjNDI4LCAweDUxZTRmZGVlLCAweGNmZmFiYjgwLCAweGZjMTQ3ODdmLAorCTB4YTlkMDcyMGEsIDB4YmE4MjdkYzIsIDB4ZjE4ZWJmOWYsIDB4ZGZiYmUzM2UsIDB4ZjlkMDNkNzAsIDB4MmYxOGUzYzQsCisJMHhmYTliN2NlZCwgMHhlNzVmZjQxZiwgMHhjMGIzYTdmMywgMHhlYTdjZWNjZiwgMHg0ZjEwNjk4ZiwgMHhhOWY5ZjNiOSwKKwkweDlkY2U2ZWY4LCAweDI3NDk0Y2NmLCAweDkxODlmNDcxLCAweDA3ODZmZjAyLCAweGQyYjVhZjEwLCAweDExZGI0OGVkLAorCTB4NTFjZTdmZjQsIDB4ZDlmZjgzYmEsIDB4ZDQ4OWQ3MTMsIDB4YzY5OTc4YjAsIDB4ZTNiYjM5ZTMsIDB4YzRmYmM3YzcsCisJMHg3ZDY2ZGE2ZiwgMHg0ODQyYzZlNywgMHgwNjQ2YmY2NSwgMHg0MTM5YzcxMCwgMHgwMDY2MzllOSwgMHhlM2NkZGM3NCwKKwkweDVkNmY5MTc1LCAweDBlNzM4ZTMyLCAweDNhZjRhMGZlLCAweDg1ZTNhMTZiLCAweDNkOGY0NWI2LCAweDgzNmQ3NTBjLAorCTB4NDRlMzhkZmEsIDB4MjMzZjgwMDcsIDB4NDEzZmJlZmUsIDB4ZTQwMTIyZmYsIDB4NjBiZmVmNjgsIDB4MzdlODBjZmMsCisJMHg3M2I4NGU5ZCwgMHhkODJjODVjZiwgMHhlZTQ4ZjhiZiwgMHg4NWVmOGI5ZSwgMHgyMTU3NmYzYywgMHhmY2Y5NTExZSwKKwkweDlkNGYyODliLCAweGY4YzcxY2NmLCAweGYwNzFlMTM2LCAweDhmZjNkMjRlLCAweDk5ZjkyYmM1LCAweDFlZWRiYWNjLAorCTB4NzRlMWZmMTYsIDB4ZTY5MGY4ODAsIDB4MDcxZTcyYzUsIDB4YzQ2ZDdjNjIsIDB4MGI4YmZhODcsIDB4NzNiMTcxOGQsCisJMHg0MGJlYzYyNywgMHg3ODc3ZjZjZCwgMHg2ZTk3YTViYywgMHhkN2EwNDRjMiwgMHhjZmRjOTdmYiwgMHgwMmEwZjAzMCwKKwkweDhkOGRhZTFlLCAweGMzOGZjNjdiLCAweDJkM2RjNGY1LCAweDQyN2EwMzc0LCAweGFlMjdiM2JjLCAweDdiMTNkODQ5LAorCTB4Y2RlMTYxNzUsIDB4Y2VmNDcxNzgsIDB4ZGE1ZTJjMmQsIDB4OGYzZmM3MjksIDB4YWY0MWM0NjUsIDB4OWZlMjU5NzYsCisJMHgzZmM1ODFlMSwgMHgyYjhmMzcyZiwgMHg5NzYwZDNjNSwgMHhmMTVhZmQ4NiwgMHhmOGFiZjY3NSwgMHhhZTViZmRmYSwKKwkweGU4NWY5ZDgxLCAweGRhYWQ3Zjc3LCAweDNkZTYxZjdjLCAweDA1ZGQzODI1LCAweGVmNmQ2YmZiLCAweGE3Y2YwNDJiLAorCTB4MmI3M2IzNzQsIDB4Zjk2N2JlN2MsIDB4M2ZiM2QzZjksIDB4ZDYyZTMxMTcsIDB4ZmE4MjM5MTQsIDB4OGMzZmFhZGQsCisJMHhiYzJiNTdmZCwgMHg2Yjc4NzA3NywgMHhlM2Y1YjNmNywgMHhkODRmNWVlYywgMHg3YjM5ZmI0ZCwgMHhlYmU0MzlmOCwKKwkweDYzZWZkZGRhLCAweGFlZThlZTVjLCAweDk4OGU5NWE3LCAweDhmZDYxNmY1LCAweGNlN2NjYzcwLCAweDgwYTg3OTNlLAorCTB4ZGZlMzc5YzUsIDB4MzE3MWFiMWIsIDB4NDBlZWIzN2IsIDB4NzZlYTcxZmMsIDB4YTcxYTZhN2YsIDB4OTg1MTE0MmEsCisJMHhmMWU5NzAxZCwgMHgyZGZhNDhjZSwgMHg3Njk5ZGZkMCwgMHgzYTRkZGYxOSwgMHhiZWUzMTExMywgMHhjOTcwMWMxNywKKwkweDk1YTExZjdjLCAweDQ3NWQwZmM5LCAweDcxYzA5ZWYxLCAweGYwYTc3Zjc2LCAweDU3M2MwNGI1LCAweGQyZjFlNzdmLAorCTB4YjdmZGUwNzcsIDB4ODM1OGE5M2IsIDB4ODJiNmRmZGQsIDB4NGZkYjY5ZjEsIDB4ZWY0MDIxZjQsIDB4MTNkZmUzYjYsCisJMHgwN2RhZmQ2MSwgMHhmZmIxOGRmOCwgMHg0ZmQ0NGU4YiwgMHg1MGZkNTBmMSwgMHgxMGEwNmVmNCwgMHg3N2FhZDVkOCwKKwkweDY2Y2I3ZGFlLCAweDkzOGU5ZjgyLCAweDIzNDJlYjBlLCAweDgzZWUwN2VkLCAweGJjMzliOWMwLCAweDU2OWRlZTU3LAorCTB4YWE4OGYwMGEsIDB4N2QwYTc1NGQsIDB4ZjliYjIxZTcsIDB4YWZkZTU1N2QsIDB4MjFlZjlhYWMsIDB4NmJjNmFmOTAsCisJMHgyNjZmOGZkMCwgMHhjYzY2NGI4YiwgMHg5ZjE2NTIzMiwgMHg4N2Y3MTkwYywgMHhhYmMyMTNjYSwgMHhhZjdmN2NlOCwKKwkweDI4YmIzNzA2LCAweDhkOWU3YzVlLCAweDc4MTEyZmQ5LCAweDA2YTI2YTI3LCAweDJlNjNkM2Y2LCAweDRiYzFkZTdlLAorCTB4ODNiY2VjYmMsIDB4N2FhMzY0M2IsIDB4ZjZmZjYxZmQsIDB4OWUwODkzMGQsIDB4N2MwNmQ4NjcsIDB4ODE5ZTczZDksCisJMHgyZjgwMGI0NCwgMHhlYTdkNzY4ZCwgMHgzMjFkZTcyZCwgMHg1YTJhMTNlMSwgMHgxNzMzODcyMiwgMHhmZDUwMjVlZSwKKwkweDc3ODY2YWIyLCAweGYxMWZlNDJiLCAweGIyY2RmN2IwLCAweDM4MjFmNzQ4LCAweGRiOGRiMGRmLCAweDE1NjBkOWEzLAorCTB4ZTc3ZGY2ZTcsIDB4NmZiZWViZWMsIDB4NzhhNTMyOTYsIDB4ODUzZjMwZTksIDB4NTM1ZmY1ZDMsIDB4Y2E3YzVjZTEsCisJMHgwZDRmYzUyZCwgMHgyZDg1Njk1MSwgMHhhM2RjMWE2MywgMHg3OGJjNzk0OSwgMHhjZmNkMDY2YywgMHgzNGY0ZmY1ZiwKKwkweGUyZjdmZmFjLCAweGZmMzQ1OWIxLCAweGIyMGU3YjkzLCAweGNmMDEyYWZhLCAweGFlYjBiZWMxLCAweGVmZjAxYTc2LAorCTB4ZDlmYjk2ZDcsIDB4Yjk2NjMzMTQsIDB4NzdmMDA1N2YsIDB4NzdlZWYwMmUsIDB4YWU3MDY5MTcsIDB4ZWZlMTViYTIsCisJMHhkZGEwMDQ2NSwgMHg3ZjBjODlkMCwgMHg5Zjc3ZWU5OSwgMHg5ODY1N2YwMiwgMHhmMDA1NjNhZCwgMHg3ZmNmNjNlYiwKKwkweDE2Zjc4NDkxLCAweDJhYTFmYmY5LCAweGRjZTE1NDY5LCAweDc4OWEyZDE1LCAweGYzZTcxMmYxLCAweGNjZmJiY2ZhLAorCTB4NDk4ZGNiZjUsIDB4M2Y4MTc3YzEsIDB4YmM4ZGU3OWEsIDB4ZWYxZDFhNmYsIDB4MGU3MThhZTEsIDB4ZjJkMDBlNzYsCisJMHg4MjlhYTM0ZSwgMHhlOWM4NWQ3NCwgMHhjYjNkZjg0YSwgMHg4YjNlN2M0NSwgMHgwMmMyOTBjNSwgMHg3ZjVjYWRkZiwKKwkweDU3NTFlZjE5LCAweDFlZjQ1NzhiLCAweGRiYWI4NzM1LCAweDY3ZmJlZmQ1LCAweDMzNzgwMDdmLCAweDAwN2Y4MjkzLAorCTB4M2ZkZjU5ZmMsIDB4YjgxNWM1N2IsIDB4ZTUxOWY1MDAsIDB4NWM3ZGUyNWYsIDB4ZWIzMzNkZTMsIDB4ZWE0NDY4YmIsCisJMHhmYjNlZmI4ZSwgMHg1YTJlZmU1NiwgMHg5YmZlZjA3ZiwgMHg2OWJhMjgzYiwgMHg2ODJmMzlmZiwgMHgzOTUxOGY3YiwKKwkweGYxNTBiMzFiLCAweDMxY2ZkMWMzLCAweGQyZmQwYmNiLCAweDA0MjZjMjIwLCAweDFmYTcxMDc2LCAweGY3ODhjZjNjLAorCTB4YjgyMmVlMWYsIDB4MTc2NWRiNWYsIDB4YmJhZmYwNzQsIDB4N2Q0NTQ5ZmUsIDB4M2E3MGI5OWUsIDB4YWU1ZDVmZmEsCisJMHgzMzljMDhlYywgMHhjMzViYmFlYSwgMHgwMThhM2Q3ZCwgMHhlODY5ZTQwMSwgMHhmODI4YzQ4MSwgMHgzZTFlNTQ4NywKKwkweGU3YzNjOGI3LCAweDhmMzdmZTY2LCAweGRiNTE3NWRiLCAweGE5ZmQ4MWRmLCAweGEwNmEzZmJjLCAweGVkOGJkY2M1LAorCTB4ZWU5ZTk5MTIsIDB4OGUxMGQwNmEsIDB4MDg3NDI0YTEsIDB4OGU4MWZkZDYsIDB4ZWJlNmUzOTcsIDB4NDZjZmE3MzcsCisJMHg5ZWViOWU5YiwgMHhlZTFmZjg4MCwgMHgyOGZmYzE4ZSwgMHhjYzc0YmY3NywgMHhlNjNhMzM3NywgMHhkMWQwZTNiYiwKKwkweDdiZGQ2ZWZhLCAweDY4NThlMGFlLCAweDI4ZmNiYTc3LCAweDdkNjc1ZmJlLCAweGRmNGFjZWFmLCAweDIxZjVhOTNhLAorCTB4ZWQyYjNiNzgsIDB4ZmViOGE3YzAsIDB4YjMxYmY0MTgsIDB4MjlkMjJjN2MsIDB4MDA5MzllODYsIDB4M2UwNzMxOGUsCisJMHgwNmJjMDFiNSwgMHhlN2VjMWYxZCwgMHg5YmE5NzkzYywgMHhmMWQ2NzNhZCwgMHgwNjNhY2FkMiwgMHg5ZmI0ZTMwNywKKwkweGY3NGNkNmU1LCAweDQ1MWMwYTBlLCAweDY5Y2E4OTdlLCAweDg3YzU4ZGJhLCAweGI3ZWZiNmZhLCAweDlkNGI5Y2ZmLAorCTB4NTk1MDJjZjMsIDB4NzNmZjE0YmYsIDB4ZmUwNjRmMDAsIDB4ZmJmMzc1NmYsIDB4N2ZmMTdkZWEsIDB4ZjhhM2I0M2IsCisJMHgzZmU2MWRiZiwgMHhiYmNmZmMwMCwgMHhmYjBkZmUxNCwgMHg4N2ViOGFiZiwgMHhhMjlmZDgyYSwgMHhkYTFmZjQ3YywKKwkweDNhMWNiNGNjLCAweDhkZDEzNGVlLCAweDg3NjRiMDcyLCAweGQ5MzFmN2M4LCAweDNlODY1ZmZiLCAweGZkNWQ3MjU5LAorCTB4YjkxN2I4MjEsIDB4ZjIwMjY3ZTQsIDB4ZmVmZTQyZWIsIDB4ZmRmYzI3ZTUsIDB4YzFiOWViNGIsIDB4ZWExMGIyZjIsCisJMHgxZjlmY2JjYiwgMHhhYTNlYTMwYywgMHhmZjJlNjVkYSwgMHhiYmNmNzc2NywgMHhkZTc4NTk5NywgMHhhZDM1MjQxNywKKwkweDJiNGViZGY3LCAweGI5YmJjZmZlLCAweGI0ZTg1OGRlLCAweGQ3MmY3YmM1LCAweGRiZDY4NzQ4LCAweDMzY2NlNzRjLAorCTB4ODNmNGY0YTYsIDB4YTZjZmEwZmUsIDB4YjhmMTg5YmQsIDB4YzQwOTk1N2YsIDB4YTUyOTc0MTMsIDB4MjAxOWRlMTAsCisJMHhmNDA5NDI4NSwgMHhkN2U1Y2M1YiwgMHg3MmQ4NmZlOCwgMHgxZDlmZmFmMywgMHhjYzQzZGYzMiwgMHg0M2RmMzE2ZCwKKwkweGJlNmFkZTFjLCAweDY2ZDU3ODg3LCAweDUxYzQzZGYzLCAweGM0M2RmMzYxLCAweDMzOGQ3NjZiLCAweGFlNDc0N2U1LAorCTB4YjMxZmI1MzcsIDB4M2YyOWIyN2YsIDB4NTM0ZGZhMzYsIDB4NjZjN2YxZmIsIDB4ZGExM2YyOWEsIDB4N2Y2YTY3YmYsCisJMHg0ZGYzNWJlZCwgMHg1NDc1ZDdmNSwgMHhmODZmZWE5YSwgMHg3ZjI5OTk2OCwgMHg5YjNmZjc2MywgMHgzMTE3NDdkYSwKKwkweDYxYjg3OGZkLCAweDViZGMxMTc5LCAweDc4NzJmMDMwLCAweGExNTM2MmE5LCAweDliMDhlOTdjLCAweDllNWIxMDVhLAorCTB4OTAwNTZiYTYsIDB4N2ZlMGU5MTYsIDB4NTMyZjI3ZjUsIDB4OGEyYTNmMWMsIDB4ODk4YmE3NWQsIDB4NTM2ZmQyNmMsCisJMHhkNDdjZTYxYywgMHg4ZjdkZmU2ZCwgMHgzNTcyMmM5NywgMHhjYjUyN2VhNCwgMHhiYzFkOWEwOCwgMHg2M2NmMGYyNCwKKwkweGM2M2FmOTUzLCAweDAxYjFkYmY1LCAweGEwZGZiN2VhLCAweDliNDZkNTdjLCAweDJmOTU2ZjIwLCAweDlhMDFiZGUzLAorCTB4YWQ4ZmQ4ODYsIDB4MWY5Zjc3YjAsIDB4ZDRmOTlhNzIsIDB4Zjk1ZThmZDcsIDB4MDczOGRiOWQsIDB4NTNmYWNhZDQsCisJMHgyNjRiYzZjYiwgMHgzZmNhMzEzOSwgMHgxNzJkOGMyYSwgMHg3M2M3NGYxNiwgMHhhYmY1ZmQ0MCwgMHhiMzVjMTZmOCwKKwkweDNiYmMxMDdkLCAweGEzNTMwZjNjLCAweDE2Y2NhOWJjLCAweDY3ZGZkY2Y3LCAweDdmZDBiZmVlLCAweDhlYzdkY2RhLAorCTB4N2NmMDBjZmEsIDB4MjZkYWY3Y2UsIDB4N2I1NmJmMzgsIDB4NTFmYTM3N2IsIDB4NWUzMzc2MTksIDB4NWRlY2YzN2EsCisJMHg0NzllMDM2MywgMHhhYzNlNDgxYSwgMHhiNmZkYzZmNywgMHhlYmUxMzQ0NSwgMHhkMTc3Y2UzNiwgMHhlMGQzMzNkYiwKKwkweDNmNjY0MTljLCAweDg3YTE1NWZlLCAweDFiNDdlYmU5LCAweDA0MmNkNzQyLCAweGU5ODcxMWMyLCAweGI0NTY3OTVlLAorCTB4MzlmODFhNmUsIDB4ZWI3OWY4YzMsIDB4ZTdmOGI2NGQsIDB4MGMzYzkyYTAsIDB4NDhhMGU5MmYsIDB4ZGQ1MDVlYzEsCisJMHgyYjljMmY2OCwgMHg0ZjBiZDc3ZiwgMHgwZjY4ZGNjNywgMHgzOGU4NzkyNiwgMHgxN2I0YzdmMywgMHhiYWQ0ZmJiMSwKKwkweDVlZThlNjdmLCAweDk0N2QwZGI4LCAweDAyNmMwZWU1LCAweDkzZTU5MmZkLCAweDE3ZGQ5Njg4LCAweDgzZGJmNDllLAorCTB4Nzg4ZWYwMmQsIDB4ZWZjZGIyNjMsIDB4MDBiNzdjYzYsIDB4NGM3ZmQ5ZTMsIDB4NWUzYTIwYzgsIDB4ODQ0NTlmZTMsCisJMHg3NWYwZjFhZiwgMHhlZWM4M2U3OCwgMHhhYmI4YzdhZSwgMHhjZmMyNGYzMSwgMHhlNjcxMTgwOSwgMHg4OWQ5YmUwYiwKKwkweGFiYzZjZjgwLCAweGUxMDdlZTdiLCAweGRjMTc5MDdiLCAweGY3ZTg3NmMxLCAweGM3MTk0NmMyLCAweDk4MmM5YzZkLAorCTB4NGI3OThkZWEsIDB4Zjc4ZGJmOWIsIDB4NmNkY2IyYmUsIDB4ZGU3NGU1ZGUsIDB4OTMzZGI3MDAsIDB4YThmOGQ1YzEsCisJMHhhZTExMzI0MCwgMHgyOGY0YmRmZiwgMHg1Y2ZiMzVmOCwgMHhjNTA3ZGVmOCwgMHhjN2MwMTBjNywgMHg3M2ZiM2QzOSwKKwkweDNhNzkzMTliLCAweGVlNDE5YWFmLCAweDllZDE2YmFkLCAweDRlYTdlZjg5LCAweDhmYTFlNjM3LCAweGUzM2JkMTM0LAorCTB4ZTJmYzMzMmEsIDB4YzZmZDE5NDYsIDB4M2M2ZTQ5NDUsIDB4ODg2ZTEwZWYsIDB4ZTc5YWZhNzIsIDB4Zjk5YmU0ZGYsCisJMHg1YzI5NWI5ZCwgMHhmODg4NGVhYiwgMHhkMWQ2YjZkZSwgMHhmZDI4ZjRiYSwgMHhlNWNkYmNhZSwgMHhmMTdkNmIwZiwKKwkweGYwNjM0ZTdmLCAweDdiYTdmODUyLCAweDRmMzZkZTQwLCAweDc5ZTNmOWMzLCAweDMxZmY4MDZhLCAweDBkOWMzYzgxLAorCTB4NDUyYzE3ZmMsIDB4MjM2YzE4M2UsIDB4YzdkMzZmYjAsIDB4NzkzMGYwNGUsIDB4ZDk1MWVkOWUsIDB4NzJiZTM1N2IsCisJMHg4NWJlODcyNiwgMHhmZGE3NmNkNywgMHg1ZGZhNzk5NSwgMHhiMGYzNmZmNywgMHg0ZjM2ZmY3NSwgMHg3MmZmNzU5YywKKwkweDk3NTcwN2VmLCAweDU0ODUxZmI1LCAweDM3YjQ0NWQ0LCAweDExMWZhOTA4LCAweDNkNTM0NzZiLCAweDFiZmQwZTU2LAorCTB4YzdmMTMxNzksIDB4ZmY2ZmQwMDUsIDB4NjViZjlhNzYsIDB4ZWRlNWY2NDQsIDB4ODBjZmIwMzQsIDB4ZWNmYjBkMGYsCisJMHhhZWQ5OGY0ZSwgMHgzZmJiZDE4YywgMHhmYmJkMzBmNCwgMHhmNGMwY2Y0MywgMHhmZGExOGZlZSwgMHhlMzQ1ZWZlOSwKKwkweDRhYTkzNWRhLCAweGI0ZjdiZDdjLCAweGFjMWZkZDg3LCAweGU3ODIxNTUzLCAweDBmZDlmYjAzLCAweGRhZTVjOWQ4LAorCTB4ZDZmZWVmM2EsIDB4MWZmOWNiYTUsIDB4NGY4MzJlMzksIDB4ZmNmZWZhY2QsIDB4ZjQxMTJkMzEsIDB4NDIwN2NhNTQsCisJMHg4NmI3NzdkYywgMHgzYzZkYmYyYywgMHhhZDliNmJkMCwgMHhmN2NjMzM3OCwgMHg3OGZlMTY2NywgMHhmNTlmNGQ2OCwKKwkweDE4ZjFjYzJiLCAweDZhYzc4YjhlLCAweDA5OWI0NzhhLCAweDk3M2MzYjhmLCAweGI2YmYwZmIwLCAweGRmMzBhZmJlLAorCTB4ZjhlNGU5ZjMsIDB4MDliZjdhYTYsIDB4ZWIzNzNiYzYsIDB4NmI4ODIyYmQsIDB4MWNmOWNlZDQsIDB4MWVkN2ZlZjUsCisJMHhhZWJjY2NhNywgMHgxZDM5N2UxOCwgMHhhMWUwMDU2NywgMHg3OTlmZDY3MywgMHhlMzAzYWU3YywgMHhiOTllYWI0YSwKKwkweDU4ZTIxMTJhLCAweDdhMGQ5MzM1LCAweGFhN2RmMDQ0LCAweDQ4MzlmOWYzLCAweGVjZmI3Mzk3LCAweDJlNzljMDNhLAorCTB4M2QxMzlkOTksIDB4YTNkYWVmYjcsIDB4YTRmOGY3MTAsIDB4MmM3MjU4ZTEsIDB4NzkzZGNmN2QsIDB4ZmRhNjQ4YmMsCisJMHhiYzdiZGI5ZCwgMHg3NzAzYzI0OCwgMHhkNDNiZDM2MSwgMHg1YjdmMTczNSwgMHhkZWY3NzAxNCwgMHgzN2UxZTg0YiwKKwkweDM2OGY1YjA3LCAweGU1N2M1OTNhLCAweDM3MTczODQxLCAweDZhYmZkYTg2LCAweDdhNjVmMjEyLCAweDI4NWVlZDlhLAorCTB4MWRiZjFkMTcsIDB4Mzk1YzIxZmMsIDB4YTYyZmU2M2YsIDB4ZDA0YWIyNTksIDB4N2VjMTE2MzMsIDB4ZWUzNzNjZDMsCisJMHhjOTcyZjk2NywgMHg5ZGZhNmNjOCwgMHhlMzg3YWQxMiwgMHg2YWY5YzRjYywgMHgwNGVmYzA5OCwgMHhmMTQ0NGViOCwKKwkweGVmM2MwMmY3LCAweDNlZjg2MDc2LCAweDAyYjI0M2YxLCAweGJkZmZjMjllLCAweDc4MDkzYzFhLCAweDA5YWIzYTRmLAorCTB4NzdjNDFhODksIDB4NDcxZTZlOGEsIDB4ZDMwYTY5NTMsIDB4M2FiN2RkYmYsIDB4ODQ4Y2Y3ZjAsIDB4NTNhYWFmMDUsCisJMHgzY2RhZmVhOCwgMHhkZDhlZmQ5MywgMHg5MjBiNjNmOSwgMHg1NTY5MWZjMCwgMHgwZGYyZGU5OSwgMHhiNDYzZTFlYiwKKwkweDZiZTcwNzhiLCAweGU2MjMxNzM3LCAweDQwNTc3Yzc1LCAweDkyMWQxOTU1LCAweDhhNmI2YzMzLCAweGY5Yzc4YzM1LAorCTB4MjVmZTk4ZjMsIDB4M2RmZjFhNTIsIDB4MWViN2NhMjksIDB4MWM0M2E2Y2QsIDB4YzVjZWY4ZDgsIDB4ZmM1MjJiYmYsCisJMHg3ODAzY2ViZiwgMHhmMGZjZGI0NiwgMHhhYmZiOGY0ZSwgMHg5MmNhMzg2ZiwgMHgyOGNjZmI2OSwgMHg5NDVlNWZiZSwKKwkweGMzOWRlMWMwLCAweGZiZWYwN2RlLCAweGQzNDVlMzRlLCAweGQ0YjUxODdkLCAweDI3Yjc0ZWZjLCAweGUyMTRiNGQwLAorCTB4NmRlZmQwZmMsIDB4OGJjZWY4YzksIDB4MzhhMjllYjksIDB4MGJiYjk2OTEsIDB4MGFhZWU1Y2QsIDB4NDdlMThmOWEsCisJMHhmNmQ2NzdlYiwgMHhhZTkyNWY4NiwgMHgzN2Y2MzgzMiwgMHhiZjBmMTAzOCwgMHg3OWZkNTA2YywgMHgzNDBlOGY5NCwKKwkweGIwN2YzMGY4LCAweGRhMzRjMzQxLCAweDBmY2IxMjMwLCAweDJmMzFmODM3LCAweDk4NmNmNGRhLCAweDdmYWZmYTRmLAorCTB4ZWViYjE0OTAsIDB4OWQ1NGVmYzIsIDB4NzVjM2UxOGMsIDB4ZjlhZGU0NzIsIDB4ODhkZjhmODAsIDB4YWYxNWFmODgsCisJMHhkZWZlNDc4ZSwgMHgzYThlOWEzNCwgMHg3MzY3YmQ4NiwgMHhmZWZlYzYzMiwgMHhkMjU3ZjJlOSwgMHgwZDVmMjg0YSwKKwkweGQzYWZkMWY5LCAweGVmYzNjNjRhLCAweDE3ZjNiMDk2LCAweGY2M2E0MTcwLCAweDI1N2FlZTFlLCAweGUwOTNmOWEwLAorCTB4MzRjNjM0NzcsIDB4ZmJjMjg2M2IsIDB4Yzk1YmMxYTQsIDB4ZmQyMzk0NTgsIDB4YmJmMDg5YzUsIDB4NmMzMzdiMGIsCisJMHg5NDlhN2ViNCwgMHgwN2Y4ZWNkNywgMHg2NGRlYWI4MCwgMHhlN2U3YWZlNywgMHg2YzlmMWYzMywgMHhiY2UzYWZkNiwKKwkweDBhNjZmZjRjLCAweDcxYmNlM2M1LCAweDUzN2UwOWY4LCAweDM5YWNmZDAwLCAweDMzMDdiOWM2LCAweGJmNTQ4OTFlLAorCTB4ZWI4YTc2ZTEsIDB4ZGZiM2VmZTYsIDB4Yzc1NDQ4NWYsIDB4ZjdiZGUxZmIsIDB4Y2VjMzVlY2QsIDB4YmVjNWY3YTksCisJMHhmZjk5YmVlNywgMHhlMWUyNDQwZSwgMHgyOTE3NjgyNSwgMHgxMDNiZjYzZSwgMHgwZjdiMGEyOSwgMHg0ZDkzMDQ4OSwKKwkweGU1Y2RlZGVmLCAweDA2MDZjY2ZkLCAweDFmNTdkMDlhLCAweDE1ZmRlNmNmLCAweGZiMGU3OTFkLCAweDg4OTdkZjgzLAorCTB4ZjA4N2VmZjUsIDB4Y2NkOGMzZGYsIDB4MzU3NGQzZjUsIDB4ZWQ0ZGVjNTAsIDB4NWJkNDY3NmQsIDB4Nzc1OWViYmYsCisJMHgwYmQxMjE2ZCwgMHg4OTAxNDNmNiwgMHhlZDA0YmQ4MCwgMHhkNGJiNjk4YSwgMHhkYzAyMDMwZiwgMHhkN2NlMzNlZiwKKwkweGNkZjgwYjNlLCAweDkzZGRmZGVmLCAweGViYzMwMjdkLCAweDhhN2QzYzkzLCAweGQ0NDk0ZWZmLCAweGUzMDc5ODEzLAorCTB4MTIzYzE2ZmIsIDB4Y2E3NjAzZGEsIDB4NjIwNmJiM2UsIDB4OGZlNDc0NTIsIDB4Zjg5NDdlZjgsIDB4ZTcwMWM1M2IsCisJMHhiYzBmNTNmYywgMHhkOWU1ZWVjZiwgMHhiZjM4MTQzYSwgMHg3YzViZDJiOCwgMHg0NTUxYzQxMywgMHhmMzAzM2VhNSwKKwkweDgxNmY0ZWY3LCAweGZhOWU4M2ZjLCAweGRkYTNkODg3LCAweDFmMDEzN2M1LCAweDA2ZjdmM2E0LCAweDAxMDAwNDA4LAorCTB4ZTFhYTA4MGUsIDB4NDNmZDYzOGYsIDB4NjQ2NTRlYjMsIDB4MmJmMmNjOWYsIDB4ODczNjM3YmQsIDB4M2Y1ZjIxMzIsCisJMHhmMjA4ZjgwZiwgMHg3ZGJmYjQ4ZCwgMHhjMDIxYzE0OSwgMHg4NmUxNmU0NywgMHg0MjM3NjNlNiwgMHgwMzdmNjhkZSwKKwkweDU3ODlmZmI2LCAweDNiOGZmZTY1LCAweDRhZjYwZDk4LCAweDc5YTU1ZTRmLCAweDYyNWU0YzRmLCAweGE5NjBlMjc5LAorCTB4MjM5YWJmMzEsIDB4ZDA3M2M0N2YsIDB4M2JkODA3YjUsIDB4NjYwN2E5NWQsIDB4ZDRjZjMwMDgsIDB4ZmYxMDMzZmQsCisJMHhiY2I3ZDVlNywgMHg4NzhjMzQyYiwgMHgwNGViNjA4ZiwgMHhmNDFiOTc4YiwgMHhhNmUxZWUzMCwgMHg3OWY3ODNkOSwKKwkweDlkNjFmODYzLCAweGM0Yzc2Y2Q3LCAweDBmYmMyN2RjLCAweDFmZDNkZGYwLCAweDM2Y2JhZjhmLCAweGY3NGE5ZWY2LAorCTB4YzZlZmQ4OGYsIDB4NTQ3YjAzMGQsIDB4ODZiOWI4ODQsIDB4YTNkYzJlNjksIDB4NzBjMWZlYTcsIDB4OTgzOTVjMTIsCisJMHhjZGUzNWZkNiwgMHhiNTVlM2E0MSwgMHhhOWNkZmIzYiwgMHhhNzVmMmY1YSwgMHg4MDc3Mjk2NCwgMHhmOGI1NGUzZSwKKwkweDNmNWNkOTM1LCAweDdmOGI1MDhmLCAweDM3MmI0ODkzLCAweGYwYjVjMTBhLCAweDhmNjg2YzllLCAweDkzN2RlMmFjLAorCTB4NDcyODE5NWQsIDB4MjI4ZWI5NjcsIDB4NWYzMTgzZjUsIDB4Y2JiZmVmY2QsIDB4NDc2YjgzMmIsIDB4YzQ1OTFlODEsCisJMHg3NjU1NmVmNCwgMHhkZmE2NThhMCwgMHg4ZDk3M2Q1NywgMHhmMDY3MGJiZiwgMHgyNDUyNTU1ZCwgMHhmN2JiOWM2ZCwKKwkweDM3OTFiNzVjLCAweDIxZTQ0NzdlLCAweGVmMDlkNWI1LCAweDVhZmIxOGYyLCAweDY0MzdmYmI1LCAweGM3ZmQzZWMxLAorCTB4M2I0NmRlODcsIDB4MzY2MjQ5NzEsIDB4NzZkMzU5YzIsIDB4NjlkZjgxNWMsIDB4N2NhMzZkYTksIDB4ZDhmYmJmNDcsCisJMHhhM2M3NjNkOSwgMHhjODg3ZjI1ZiwgMHhiZTAyNmZhMCwgMHhjMzY4ZDBmZSwgMHhkOWZkZGRjYiwgMHhmZDUyMmY1NSwKKwkweGVhODVkM2E2LCAweGQzMDM4MzY4LCAweGQ1ZmQ3YTlkLCAweGYwOWMwYWUwLCAweDQ5YzliODJlLCAweDFjZjFlOWY5LAorCTB4ZWFmZTA1NWQsIDB4ZjUxZWI3YmMsIDB4M2E4YWUzZDgsIDB4ZDNhZmY4MGEsIDB4ZTA2NmMzZmIsIDB4OTEyNGFhZTcsCisJMHg1ZjBmZWJmMywgMHg3ZWY4ZjNkNiwgMHhiOWVmY2QzZCwgMHhiZmE2ZWRiNywgMHhhMTYwZGY2OCwgMHg3YmE5ZmVkOSwKKwkweDQxZmM4ZGM0LCAweDAyZGY5MmVkLCAweGI2NmVkNTFmLCAweGIzZmQ2MDg1LCAweGJlZjFkYTM5LCAweDFiZTgyNzczLAorCTB4ZmJlNjVmZDQsIDB4YTYwNTFiOTksIDB4NTg3MzQzMGYsIDB4Zjc3MmZhMWMsIDB4NzRiZTJiMzQsIDB4ZmQ4YzcwOTEsCisJMHhlOTkxMjRiZCwgMHg4NDI5MGFhYiwgMHg1ZjE1NzZmYiwgMHgyZmZlYjE3YSwgMHhiYTY5YzcxZiwgMHgxYzc3ZGEwZiwKKwkweGUzMWJkNjM3LCAweDgzOGVmNzU0LCAweGY2ZmQ1MjdjLCAweDVmY2ZmNDYxLCAweGFmYjBkYWJjLCAweDc3ZmZkNDc1LAorCTB4NjFjZmM1M2UsIDB4ZTg3NGY1MzgsIDB4ZDBkOTQxZTcsIDB4YTRjZmQ0MjcsIDB4MWVlNzg2NzgsIDB4ZjkyNDNlNzksCisJMHg0N2E5NzkwOCwgMHgyZTZkYWNmZiwgMHhmNmZhMDRjOSwgMHg3ZWIzMTNkNiwgMHhiNzRhMjVkMiwgMHgzZTc4MTI5NywKKwkweGM5NzM3Zjc0LCAweDEzZWQzOGE0LCAweDhjNzNlZDJjLCAweDdmYjE0ZmZjLCAweDNhMGYzYzJiLCAweGRhMGVmMzdiLAorCTB4YmQ5M2ZhNWUsIDB4NmRmMDBmMjcsIDB4NGJmYTU5YjAsIDB4ODZkZmM2MzYsIDB4YjdmYzE5ZmQsIDB4NjVmYmJiYzcsCisJMHhhNWU5ZWY3OCwgMHgxMGYxNDBhNCwgMHgyMDY4ZGY2NiwgMHgxNTI0NWI4NywgMHhjMGQxODc3ZiwgMHgzZWJlMWVmMywKKwkweDhkNzk3YzU1LCAweDc4YmRmZjA5LCAweDlmOTUzMDJmLCAweGZiNGNkMDZlLCAweDJlMTc4YmExLCAweDdiM2Y3YmMzLAorCTB4NDE1NjNhZjgsIDB4ZGIzZWVjNDIsIDB4N2RhNmI5MjMsIDB4YzcwZmZmZDAsIDB4YjhhMzg1ZDcsIDB4ZmU0YTM4MWYsCisJMHgzMjhjNzBjNiwgMHgzODVlODFlOSwgMHg1ZmU1NGRmMiwgMHg2OTMxMGUxNywgMHhlYzM2Njk3NiwgMHhhMWIxYWQ1MywKKwkweDBiNjY5MDlmLCAweDZlYzA3MjM5LCAweGY3ZWM1ZmZiLCAweDA3MzQyMDFhLCAweDYxYTg5OWU3LCAweGNlNTdkYTZjLAorCTB4MDc5ZjYwMzksIDB4NDQ4ZTc5YzYsIDB4NDBlMzQ5OGUsIDB4MDU2ZDc0OWUsIDB4OTEzZjUzYWMsIDB4ZTVhMWFmZDAsCisJMHg4NjE5MzkwZSwgMHhmZGUxZDU2ZSwgMHhkODk1MmEyYiwgMHhiMDc1NGU1ZiwgMHhlNmY1MTk4NiwgMHhhYjg3NjI3NywKKwkweGU1YTI1OGE0LCAweGI4NzlkNWUzLCAweGRkOTRlNWVlLCAweGZkZjYwNzU1LCAweGNmZTE3NzM2LCAweGJjOTMxMzU3LAorCTB4NWFiMjdkYTIsIDB4YzdmNjhhNTgsIDB4OWIxN2M0OWEsIDB4M2QzOGRmNjEsIDB4MDIzM2Q5ODEsIDB4NThmOWIxNzksCisJMHgyNjdhYmM0NiwgMHhiZGY3MmRhZiwgMHgzMWM0MTM3OCwgMHhhZWQ0YWViNiwgMHhhYjZlN2YwNiwgMHgwYzM5MWMzMywKKwkweDZlM2RmOWViLCAweGRjYWEzZGZjLCAweGY4MTZlMTc1LCAweDgzNzEwYWJkLCAweDMxNGJkNzBkLCAweDJiNmJiYzI5LAorCTB4NjA3ODE3OWMsIDB4OGJlYzFmODQsIDB4NDBkNzYwYWQsIDB4NWM2ZTM1ZmIsIDB4NDIxYTViZmYsIDB4ZTJhZjJmNjgsCisJMHhmNWY2YzBlYiwgMHhlNzM4NTQ5MywgMHg5Mjk2ZThkYywgMHg5MTZiYmQ2MSwgMHhiODA1NmZlYiwgMHg2NGVmYmE1ZSwKKwkweGQwM2FlM2IzLCAweDQxOTZmZTYzLCAweDgwY2JlZjNjLCAweDcxY2I0ZDc1LCAweDE0ZjVlNThjLCAweDY4NTc1YjE5LAorCTB4MzQ4NWMxODMsIDB4NDRmZmMzZjIsIDB4MzNkNDEyYWQsIDB4NmIwZWQxMjcsIDB4MDRhYjJmNzQsIDB4YmZkNjhlM2IsCisJMHg3YTc4YTBlYywgMHg4NWUzOTkzYywgMHhlOGY0ZTdkNywgMHhhMGNkOTNhNSwgMHhiZDE1YzUwNywgMHhlZjNhMTJmOSwKKwkweDdhNjMzZjFkLCAweDNmZGEwOWVhLCAweGU3NDUyYmJjLCAweDE4Nzc4MjEzLCAweGU4NDk0N2JiLCAweGMxMjQyNTg3LAorCTB4NzRkMGM3NmYsIDB4OWRmYjBlNzQsIDB4YmQxN2FhNWIsIDB4Mzg0OWM3ZTgsIDB4NDkxZjYzNWYsIDB4MGY3ZWM1MTksCisJMHg3YWMzZGExZCwgMHg4MzkxOTA5MywgMHgwY2NhOThmYiwgMHhlMjgzNWVmNiwgMHg2NmZkZTM3MSwgMHhkZDU2NzdlMywKKwkweGIzYTdmOGM0LCAweDY3ZGYyOTc4LCAweDQzZGU1OTcxLCAweDg5NWZhZTcwLCAweDc4NGVlOTliLCAweDRmODYyMTM3LAorCTB4MGI3YmNiMTUsIDB4MDdjYzA5MTIsIDB4Y2Q1NDRiN2IsIDB4ZTQ0OWJmZTUsIDB4ZDg4MzRhZmIsIDB4YjcwZWFkZWYsCisJMHhhMzJlZDA4NSwgMHgzNWU5ODQ1MiwgMHhkOWY2OGEyNCwgMHhmOTgxZDI2OCwgMHhlNjZkZTAzMSwgMHgwZDJjMzVjMiwKKwkweDI3OGQ4ZTJmLCAweGJiZTJjOGJhLCAweGM3ZWMxMTAxLCAweDc4OGQ1YmI0LCAweDQ0ZjVmMDRjLCAweDk2YmZkZWJhLAorCTB4ZmMzNmUzYzgsIDB4NjY1MzhjNzcsIDB4N2Q3ZWUyMTQsIDB4NWZhYjEyNjYsIDB4MGZiYmM4MTUsIDB4MzM4ZGJjZWMsCisJMHhjNjljNjFhNiwgMHhmNThjZWZiMCwgMHgxNmRmYjBkMiwgMHhhYjU3OTg3MiwgMHhjMTdiNWM0MiwgMHgzYTE2ZWJiMCwKKwkweGI2NzUzZTU5LCAweDg4NjhlMGZlLCAweDBiNTNiNjZiLCAweDJmZWUxYjM0LCAweGY5NmFmOGIzLCAweGIwMzRlMmU2LAorCTB4YmExZTE2Y2IsIDB4NGNlNGVkMTUsIDB4OGI2NWQ5OTUsIDB4ODI1MGNlMzYsIDB4ZGFkZWUxYTMsIDB4OGEwN2Y0M2MsCisJMHg4NDQ4NGMzNywgMHg0ZWQ1ODQ3ZCwgMHg4NTc1ZTI3ZiwgMHhmYmUyNjdlOCwgMHhjN2I1MDNiOSwgMHgzNTVkYTZiNiwKKwkweGFiNzFlNDE5LCAweGNhOTAxMjhkLCAweGVlYjI0YmZiLCAweGIxN2MwYjFlLCAweGNjZWQwZjIxLCAweGM2YzEwOWFkLAorCTB4ZDZlZmRhMjQsIDB4YWJmY2Q2N2YsIDB4NGVhN2ZlNjgsIDB4OGMzOGYwYmQsIDB4ZDU4MTNhYjMsIDB4YzA1MWJiYzMsCisJMHgxMmU3M2Q5YiwgMHhjOWJiZTFiNiwgMHgzZDZmOGRmZCwgMHgxMjUyZjA5NywgMHhhOGNhN2Y3YiwgMHg3ZTUzNmZmZiwKKwkweDgwMDA3ZDdjLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYmRmZjAwLCAweGQ1OTQ3YzBiLAorCTB4NjZmZGY4OTUsIDB4NjY2NTc5YmUsIDB4ZjI2M2M5OTIsIDB4YzIxMzA5MjIsIDB4OWU0ZTVlNGIsIDB4MTI0YzIyODAsCisJMHg0Y2I0NDNjMiwgMHhlODIwMmExMCwgMHhhNzkwMzRmMCwgMHhiYWRjNWQ0OCwgMHgzMDA0MGNmZiwgMHg1NzA2YjY1MCwKKwkweDg0ZWEyYjExLCAweGJiYWFjNTYyLCAweDM1MWJhMzQxLCAweGI4ODA4MGVhLCAweGRhNDQ2ZGQ2LCAweDhmZmQxNmQyLAorCTB4NDgxMDE1NGEsIDB4ZmVkMmI1OGEsIDB4MzljZjY1ZGQsIDB4N2NjY2RlZjcsIDB4YjVmMDE5OTMsIDB4M2VmZWI0ZmYsCisJMHhlN2RkZjdlZSwgMHhjZTczZGY3OSwgMHgxMmU5NzNiZCwgMHgyYzYxNGRmYywgMHg1NjMwYTQ5NCwgMHg1MWMxZDhjYSwKKwkweDYxOGNmNThjLCAweDI0ZGVhOThjLCAweDA2NGRjZjA2LCAweDM0ZTJkMjZmLCAweGEzN2VmYWM2LCAweGY1ZTFiYjY3LAorCTB4OTI2ZjY2MTcsIDB4MjVkOGM2YzMsIDB4NzlmYTJlZDEsIDB4YTBiMTk5YWEsIDB4Y2RiM2IxODksIDB4YzExYzE2NmUsCisJMHgzMzY2OTlkOCwgMHgxZjk2NmI5NSwgMHg5ZmEwYzY5OCwgMHhiOTg1MGU5YSwgMHhjNTViMTlmMiwgMHgzZjYzMzZkYSwKKwkweDY5OTIzYmFmLCAweDNkMDE1NWRjLCAweGY0NjQ4ZTBiLCAweDViZmUwOTc3LCAweGQ1MjhmY2JkLCAweGViYzlkZDVmLAorCTB4YWEwZWIyZDcsIDB4NGYzMTkyYmYsIDB4Zjc2YjNjMDcsIDB4MWNkMDU5NWEsIDB4NTFkZjVmYWUsIDB4NGExZjY5YWMsCisJMHhkN2JmNTFkMiwgMHgzYjA2ZmIyNSwgMHg1YmRkOGM5YywgMHgyYWJlZmMzZCwgMHg1ZDU2OWY3OCwgMHhmYWUxZjY2MiwKKwkweDEzZTM4ZTU4LCAweDg3YWZhOGFiLCAweGViZTYzYWY3LCAweDc3YWViMTg4LCAweDQ5ZGU1YzA0LCAweGFjNGU4YTgyLAorCTB4MzJiMWQwZWQsIDB4ZTAzYWQ2YzYsIDB4MWVjNjJlOWYsIDB4NmM3Y2Q4NTAsIDB4MTVmN2Y2YjcsIDB4YzI2MzI5MTksCisJMHg5ZTJhZDZlZCwgMHhmODk4YzcwYywgMHhhOGJjNmE3MCwgMHg4OGQ0ODE2NywgMHhjNDY3ZGFiMiwgMHgzNDVlMzVmNSwKKwkweDBlZjNmYmQyLCAweDYzMDc1ZmIzLCAweDNmZjRjOTFlLCAweDdmYWMyZDcwLCAweDE5NTNlYjI2LCAweDkwOWY1M2NjLAorCTB4Y2Q1ZDhlMzgsIDB4NzEyNThiNTgsIDB4YmE2NzNlMzcsIDB4MDhhMTdkMGMsIDB4NTMzMzMwMzgsIDB4ZjgzMzdlNzEsCisJMHhjNGViZjYyYiwgMHg3MTk0NDc2OSwgMHhlZDQwM2VkOCwgMHhhOThlZDk2NywgMHhjNDczNDAwYywgMHg4MzAzNzM1ZSwKKwkweDkwYjAzN2Y3LCAweGNlMDYwYWNhLCAweDI4ZmRmYTBmLCAweDIzNTlkZmIyLCAweGRkMWJlNWI1LCAweDA5ZWNmMmRhLAorCTB4N2U2MzMyZGEsIDB4OWE0ZmQ3ODIsIDB4MWE0ZWNhOWIsIDB4MDRmZWZkYzIsIDB4MDMxMWQ2YTYsIDB4NTgwMmI3MmUsCisJMHg1ZWVkN2ViMSwgMHgwNDY0ZTA0YiwgMHg5MjNiZWIxZSwgMHhhZWM2ZTUzNSwgMHg4OGM5YzBhYywgMHgxZmYxNmE3MSwKKwkweDEzNWZmMDU5LCAweDU4OWQ3NzVmLCAweGRmNDYwN2Y3LCAweDViYzAwZWFkLCAweDcxMTkwYjNkLCAweDQ2YzE0MGRkLAorCTB4YWNjNjU4ZWYsIDB4N2M0NWU2MTYsIDB4ZjE2ZmQ4MWQsIDB4Y2ZlODEyYjAsIDB4MDBiNzZlNjYsIDB4YWJiYjFiN2MsCisJMHhkZWYwMjU5NSwgMHgzMGVmODc2YSwgMHhlMTk2MjczZiwgMHhmYWYwMzU2OSwgMHgwZTg4MDU4YywgMHgzOWRhOGZlMCwKKwkweDViZWQ5OWJkLCAweGI3MTNlNDE1LCAweGNkZmVkYWFiLCAweGZmMDBkZGU3LCAweDRmMDI5M2RkLCAweDI0YWMzZDk1LAorCTB4MGVhM2FjNDYsIDB4NWUxZTkxZDYsIDB4MDdlYjM5YzcsIDB4NTgyZjg4NjUsIDB4YTVlYzZmY2YsIDB4YTY0NjE3NDgsCisJMHhmM2Q3ODUyNCwgMHg1Y2I1ZTFhZCwgMHg1ZGM2YWYwYiwgMHgxODM3YTIzNiwgMHgxODQ0YmRlNywgMHhjZWE3NjFhNywKKwkweGNlYjI4NDZmLCAweDdlNDQ2M2RjLCAweDNjZTkxN2I5LCAweDFjNzJkZTA2LCAweDZmM2M0YzRhLCAweGUwYzczYzQzLAorCTB4ZmNhY2VkYTcsIDB4MWNjN2U0M2UsIDB4YzcxODFmZTQsIDB4NjUyN2VlYjYsIDB4OGY4MThiMjcsIDB4ZmExNzM3YWEsCisJMHgwNTRkYmVhMCwgMHg1NDcxODZmZSwgMHgwOGE5YmZmOCwgMHg2ZDNiZDljOCwgMHhlOWQwMzI1NSwgMHhjM2U3M2IyOSwKKwkweDdhMmU4OTBkLCAweDBhYmM1MGVlLCAweGU3NWQzNWUyLCAweGQ1ZmE0N2M5LCAweGNjNDNiODI3LCAweDY2YTNmMWMxLAorCTB4Y2I2MDE5NDIsIDB4Zjk2MmMxYWUsIDB4ZWZlODFlYmQsIDB4Y2IxYjk4MjEsIDB4ZjAwOTg0MTYsIDB4Y2JjMmM4NzgsCisJMHhlZmNhMzkyZiwgMHg2ZWUzMDhkZCwgMHgwZGU1ZTY0YSwgMHhkNWI5YmQzZiwgMHgxNmNhMDkzZiwgMHhlNTQzOWU1OSwKKwkweDQxNmQwYzg3LCAweGZmZGRlMDNkLCAweDQ0ZjVjOTgyLCAweDI4ZjdiNTNlLCAweDMyMzA1ZTU4LCAweDRkNGMwNGYwLAorCTB4MjM2NTg0M2YsIDB4NDIyNmE2NWUsIDB4ZjRiNzIwZTcsIDB4OWI3NjlhMmYsIDB4ZWVkMDVlYTAsIDB4YTc4NDI3ZmIsCisJMHhmYjM5ZmY1YywgMHgyNjM2M2NmMSwgMHg0ZDdlN2Y2NiwgMHhhY2RmNzk3ZiwgMHg1M2JmMTgzZiwgMHhmYmY4NzU3NywKKwkweDQxOWRjNGQ0LCAweGMyZTc2ZjNkLCAweGU3YTcyYzc2LCAweDlmZjQzZjAzLCAweDZkODlhMmZlLCAweDA2MjNlMjg1LAorCTB4ZGExNzliNzYsIDB4NjMyYzVkZDUsIDB4ZDQzOTA4YzEsIDB4YjY3OWYwMjMsIDB4NWI3MjQxZDksIDB4Zjk0M2FmYmUsCisJMHhhOWY5MDYzZCwgMHg3ZDcwZTQ4NywgMHhmZTQ2YWE0NywgMHg3ZjVjYjk0YSwgMHg3ZjRkNWFmMSwgMHhjMjdjOGUzOSwKKwkweDQzZGFiZDU3LCAweGUyZmVhZGYyLCAweDEyMWVmYTY0LCAweDczNmNmNGYyLCAweGY4ODllOTI2LCAweGM4ZDIwY2UzLAorCTB4MTMzOGYwZjUsIDB4NzJmOGIwNTksIDB4ZWZhMjRjZTMsIDB4Y2JlNjFjNzIsIDB4MDZiZGI5MjIsIDB4YTQyNDBjZTcsCisJMHg4N2JjODIzNywgMHg3NTBjMmU3MSwgMHg0NjVmMjUyNSwgMHgwMjc2ZDk5ZiwgMHg2N2FjNDU5MSwgMHg2MzM0MWE5YiwKKwkweDA3ZGNkYmZmLCAweGZjMThiZTFjLCAweGI4NDRlNTIwLCAweDFlZGI1MWJkLCAweDgxMWIyM2Y0LCAweDQ4NjNlZGY0LAorCTB4N2FhY2ZmYjcsIDB4ZDRmYTkxY2MsIDB4NTAzOGYwNjYsIDB4OGFmNmE4NmYsIDB4MzQzNzJlMjMsIDB4ODY2NDdlNGQsCisJMHg1MTY5MjgwYSwgMHhkOTdmM2QzOSwgMHhkMWU4ODFiNiwgMHg0MTFmNzA2ZSwgMHgzYWVkZGFmYywgMHhhZmJlMWY5NywKKwkweDQ4M2NlOWI3LCAweDczMGUyZDI3LCAweDUxYmRmMTAwLCAweDcyODFjMWI5LCAweDA3NmJmNjQzLCAweGI4ZjM4ZjMxLAorCTB4N2E0MjFiNjAsIDB4ZDU3YWRlM2QsIDB4MGY1NDg5OGIsIDB4YTkxOTkyNjYsIDB4YzZmN2ZmMWYsIDB4MGYxN2M1ODMsCisJMHgzMWJkOGYxYywgMHhmYTBiODhmMSwgMHg2ZTc0NGI1NywgMHg5MTBiZTAwYiwgMHgxZDA0NzFmYSwgMHhkZjYzZjc0NCwKKwkweDc3OWNjNmE5LCAweGZmMDkzZDc0LCAweDg0MzZmOGI4LCAweGU3ZmUxMTEyLCAweDgxMTliYTZkLCAweDRkMmVmMzE4LAorCTB4OWU5YmJlNTYsIDB4ZGYyNTE0NWEsIDB4M2MzYjdmOTMsIDB4ZDA5NWVkODgsIDB4NDlmMjBhMGYsIDB4YTMyNjk2ZmUsCisJMHg5MGJjMmRmYywgMHgzOTIyZTk1OCwgMHg3M2I1ZWU5ZiwgMHhiNmUzODViMSwgMHg3ZDlhOGVkOCwgMHhlZDk4OGZhNCwKKwkweDNlYmZkOTEzLCAweGI4NDlmZDNlLCAweDY0YWFkZTE4LCAweDA0NjAxZjg4LCAweDRhZTM3YTg2LCAweDQxMmJiMDcwLAorCTB4MTU5N2UyMmYsIDB4ZDNlNTBjYWEsIDB4YTc2ZjNhNDAsIDB4NzdkN2Y0ZjksIDB4ZWIxMWU3NDMsIDB4MGVkZDUxNmYsCisJMHg3NWZkNmJhNCwgMHg5OWNhMzMxZSwgMHhlNjM5OGVmNSwgMHhhYTM3OTQxMCwgMHgyMGY5ZDlhZSwgMHgwMmRlZmE4NywKKwkweGI3ZDYxMjdiLCAweDFjYzhhZDI5LCAweGMxNWE4ZjhiLCAweDJkZjljNDZlLCAweGQ2NjlkNjRkLCAweDFkNjY5ZjIzLAorCTB4ZjdlOGRmZTcsIDB4OWViOTkyNWIsIDB4YjEzZmRkNjgsIDB4OWYxMjUzYzcsIDB4NzlkMjQwN2UsIDB4Y2I5YjhmNTEsCisJMHg1ODU2Yzc1NCwgMHhlN2MwZGU5ZiwgMHgwNzYzODk2YiwgMHhjMWUzN2VjYSwgMHgwYjdlY2I2YiwgMHhhODc1NjljOSwKKwkweDQ0ZjY4MDM5LCAweDU0OWI3OGY0LCAweGJlMDc4Zjc3LCAweGY4Zjk4MjZmLCAweGM3YzM5Y2IxLCAweDNhYTI1NGRmLAorCTB4MTZkNzQzNzYsIDB4NDczMzAyNTcsIDB4NGIzODM3ZDQsIDB4NmMxN2ZlMDgsIDB4ZGYwZjRjNjksIDB4YzYzZDIxMzcsCisJMHhkMzg0OTc5OCwgMHg2OGVmZTRiYywgMHhlOGEyZjkzZiwgMHhjM2I3ZjczMiwgMHg1ZDBkMTBkOSwgMHhjYmEyYzZiNiwKKwkweDRiMzdhODc5LCAweDM5OTlmY2Y5LCAweDkzNDNmZTcyLCAweDhjN2M4ZWJlLCAweDQ5YjI5YmE2LCAweDk3N2M4M2NjLAorCTB4NTg3NmNmMDEsIDB4NjZjYWE3NmYsIDB4ODA3ZDQzZWMsIDB4OTg0NGQ2YjYsIDB4ZTYzNmNkZGYsIDB4MzkzZTk5MDAsCisJMHgzMjY3N2NiNSwgMHhlN2FjYjdhYywgMHgzZjIxOTE4MCwgMHgxZDY5M2E3NCwgMHhmNDdkYTI3NSwgMHg4ZTE0YTZiOCwKKwkweDgzOGE1MzNmLCAweDNkYzc0OTllLCAweGY4MDE0ZjRmLCAweGI4MjRmNjc2LCAweDk5ZDRmODE0LCAweDA2MzBmYTAyLAorCTB4YmMwODhmN2MsIDB4OWZjNmQ2MzMsIDB4ZjIxYzY4NmEsIDB4YjY1ZmFjOGYsIDB4YzM3Njc5ODgsIDB4NmIwMjUwZjMsCisJMHhiMmJkODMzNSwgMHhjNjA3Yzg0ZiwgMHgxNTRmZTdlZSwgMHg5OWM2MTcxOCwgMHhkZGU4Y2FmZCwgMHhmNThhMmY2NCwKKwkweDgwYjUwMjFmLCAweDQzZDNkM2Y1LCAweDc3ZmQxNGUzLCAweDU4NWVkYmMwLCAweGVhZGUwNDdkLCAweGRiYzIyMWNkLAorCTB4NmJkZjQ2ZGIsIDB4ZTNjNjlmMDgsIDB4NzcyYzc0YTEsIDB4ODc5MzNkMWUsIDB4NzBiNjcwZjgsIDB4MjVlZmI1ZmIsCisJMHg2ZWU5MDA2YiwgMHhkM2Q2N2UyMCwgMHgwZTJlZWFmYywgMHg4MWUyZmU2MiwgMHg4MzUzYWI3OCwgMHgyZWViNWZhNCwKKwkweDU4NzdkMWU2LCAweDEyOWNkZmI3LCAweDZjMWIzZWZlLCAweDJlYjAwOTg2LCAweDQyNzBlNjY2LCAweDQ3YzJjNGY4LAorCTB4ODk2YmUwYmIsIDB4YTNlYjUwMGYsIDB4MDgxZjAyZWQsIDB4M2VjNDhmYTcsIDB4NGVlZjFmYTcsIDB4NzgwNjY2ZTMsCisJMHhlZmU2NmIzZiwgMHhkZjI0Njc5OSwgMHhmZTdkMDk4NywgMHgwMDVlNDI1MSwgMHgwZDFmMzNmNywgMHg3YTQ2Y2UwNywKKwkweDkxZTk1ZDUwLCAweGUyY2VhNzdhLCAweGFjM2U2ZmI5LCAweDY3YWJiZDliLCAweDU5NjNjMDRmLCAweGVkMTVhZGE1LAorCTB4NGYyNjY1YWIsIDB4Y2I1ZGRhMTIsIDB4ZWIyYmQzZGUsIDB4YzQ4NDA5ZjMsIDB4M2MwNDJiMDcsIDB4NWRmNzMyY2YsCisJMHgzNmZmM2Y4OCwgMHhjMjA5ZTM4YiwgMHg5N2ZmNzY5ZiwgMHhmOGJjYTNiZiwgMHhhMmJmNjgxZCwgMHg5MzQ2ZWY0YiwKKwkweGNkYTU2OTcxLCAweGY1OTZmZDhmLCAweDg3NmQzYzU0LCAweGFkNWIyYmY3LCAweDJlZmQwNjJlLCAweDA0ZmVlMjliLAorCTB4Zjc2NWJkZWQsIDB4ZjIxYjVjNTksIDB4YTQzOGJmNzEsIDB4NWRmYTBiM2MsIDB4MDNiZTYwZmIsIDB4OWQ3NTgxZTUsCisJMHgwNmVjZDMzNywgMHhlYjdlZTA5MywgMHg2ZGUwMmI0YywgMHg4OTY0YjI5MywgMHg3ZGFjMDg1MiwgMHgxNTE2Y2E3ZiwKKwkweDU3ZmVhY2YwLCAweDI4MTY2N2U1LCAweGMxN2Y3NTVmLCAweDhjNzVmMzE2LCAweDFjYjI4MmJkLCAweGQwZmY1OWVkLAorCTB4ZmVkZjY4OTksIDB4ZjY0NmE3MTIsIDB4N2Y2ZmI3MmUsIDB4Y2EyNzQ0NzksIDB4ODJhNjViYzUsIDB4ZWNlNTE4MGEsCisJMHhjZTYwZDlkNCwgMHhiNzhhNTMyYiwgMHhmNGZjNjE5OCwgMHgwZWExNGYxNCwgMHgzMjkzNWJjNiwgMHhiN2Y2MjY2MSwKKwkweDdmYjFiZWY0LCAweDc3ZGYwOWRkLCAweGE5OWFjY2E0LCAweDQ0ZGUxM2U2LCAweGNhY2NlZjdiLCAweDkyNmVkMGExLAorCTB4NTRiM2NmMmMsIDB4NTY2OTdmNDIsIDB4MjdhN2I2MTYsIDB4MDkwZmJmMDAsIDB4NzdmNjhmOGYsIDB4YmRmZGJmNjcsCisJMHgxY2Q0ZTY2MCwgMHg1MzQ1NGJjMCwgMHhiZmZkMGFhNSwgMHg5NmRiNzI5ZSwgMHgzNjMxNTczMSwgMHg4NzcyODFmZSwKKwkweDk4M2ZjNjA3LCAweDE1YTY2NGIyLCAweDk0NjlkZmYwLCAweGYxNmQ5N2Y1LCAweGNjOWQ1OGMwLCAweGJlMDE4NmY3LAorCTB4YmFmZWYxZmYsIDB4OWZhODY2OTksIDB4NzQyZGVhOTYsIDB4Y2Q1M2ZhYzAsIDB4OTE5OTZmZjcsIDB4NjVmODFkZmIsCisJMHg0ZmJkMTJhNCwgMHgxMjcxNDgyYywgMHg5MDQ2MWNkZiwgMHgzM2ViYWRlNiwgMHhmODJhZmQ3MiwgMHg3MWQzODczZCwKKwkweDk0MjQ3OTdmLCAweDRjZTUxMWVkLCAweDEwZGNlZTVlLCAweDRlOWM3ZTViLCAweDMzYjk3MmU1LCAweDhmNzdmNjIxLAorCTB4ZWYwMDRiOTAsIDB4YjNlOTBlYTAsIDB4OTYxODFhY2IsIDB4YzAyNzk2MWYsIDB4YzQwOWU2NGYsIDB4M2NiOWRiNWYsCisJMHg2MzlhYmUwMSwgMHhkOThlM2UyNywgMHg1ZmU1MzdkZiwgMHhkM2Y1M2I4MCwgMHhlOGFjN2FhOSwgMHgwZDcyOTBiZiwKKwkweDcxYzU2NjY2LCAweDY5NzY0Y2JlLCAweGNmNTk3NWU0LCAweGJmYjc5MjUyLCAweGViN2MxNTRhLCAweDU2NzFmMGUyLAorCTB4MzMwYWU1NmEsIDB4Yjg0NzBjZjcsIDB4YzU4Yjc2YzgsIDB4NGI0N2YzM2EsIDB4ODhkMDUyZmYsIDB4ZTJkNmI5ZmMsCisJMHhhY2Y5YzBjOSwgMHhjMTllNTdkZCwgMHhkNzg3NjMyZSwgMHhmOGQ3MmM1ZCwgMHg5OGViYzI0YiwgMHhmNDA3ZWY0YSwKKwkweDQ0YjlmZDBiLCAweDVmMzFlZWZmLCAweDU3Yzk1ZTA3LCAweDdkMWE1NzgwLCAweGMzM2FkMmJmLCAweDNiZmQ2OWZkLAorCTB4N2VlM2ZiMDMsIDB4YzU3YTAxOWUsIDB4MWI5ZTdiMTgsIDB4NDE1ZWI4NTMsIDB4ZTQyMmViZjgsIDB4NWYyMTRhZGEsCisJMHgzZDkxNmE0MSwgMHhhYmM1ZmU3ZSwgMHg4ZmNkNmY3NiwgMHhmNTAzNzcxYywgMHg3YTdkZjgwZiwgMHg0MTJmZWUwYSwKKwkweDJiMWNhMmJlLCAweGIwYjMzZDUzLCAweDhhNGY1OTdlLCAweGEwNzllZDAzLCAweGRlODI4ZGI3LCAweDg5MzdhNDU0LAorCTB4YTY5NGNlZTcsIDB4NzZlZjVhNzIsIDB4ODYzYmIxYzUsIDB4MzkxM2Y4MWQsIDB4ODNjNTM2YWYsIDB4MjJjNjQ5ZjYsCisJMHhjNDQ5N2U5ZiwgMHg4N2ZjYTRmYywgMHhmZjQ1M2JmZSwgMHgxZjllOWMyNSwgMHhjNWU3YTdlZCwgMHgyZmMyM2ZjOCwKKwkweGRmNDBkY2M0LCAweDVmY2UwNzYzLCAweDA4Y2UzNmMxLCAweDI1ODJmNWZkLCAweDcwOTFmMzgwLCAweDJmZjRiNmZiLAorCTB4YjhiYTg3ZWQsIDB4ZGE5MTJhN2EsIDB4MjYwZjFjNjUsIDB4MjE5ZWEwYmEsIDB4YjlmOWM1YzUsIDB4NmJjNGUzZTMsCisJMHhlOTc1NWY1MSwgMHhlYmUyZTI5OSwgMHgyNjUxYjk0NiwgMHhlN2JmYTRlNSwgMHg3NjRhODU0OCwgMHhiYjJlNTg0YywKKwkweDcyOTE5ZWM4LCAweDg3MzY2ODMzLCAweGJkYmZkZmViLCAweDk0NDZjNjY3LCAweDJmYmUyNmFiLCAweDE0ODNkMzRmLAorCTB4ZTNjZjBhMmYsIDB4MmZhZTE0ZTUsIDB4Mjc5OGY4MjcsIDB4MjQ3ODFkOTYsIDB4MDhlNTJlZDksIDB4NzVlMWUzYWQsCisJMHg1ODYzZWM5NSwgMHhkN2U4NWQ5ZiwgMHhmOTNmMjEwOSwgMHg2NjRjOWViMywgMHhmMGUxM2VjMiwgMHhiNjdiZmE5MCwKKwkweGRjYWZmNDI5LCAweDQ3YTVhNjRmLCAweGE1M2IwNjU5LCAweGVlMTA1NzQxLCAweDg5Y2ZiZjFmLCAweDgyNjNmYmEwLAorCTB4ZjNmMWEyMGUsIDB4YzAxM2U1NWQsIDB4NDg3MDhmYzEsIDB4Yzg3MmUxNGQsIDB4ZWQwNTY1MDksIDB4MTdmNDE1MGIsCisJMHhiNTVjZmZjMCwgMHgzZjM1YmRjZCwgMHgyZTM2ZGU2MiwgMHgxZDdhOWQ4ZiwgMHhlMDU3NjM5NywgMHhmZTU0YjQ4YiwKKwkweDNiMjVlZmJkLCAweDFlMTg3M2YxLCAweDJmZjk4ZWRjLCAweDFkNzZmNzAxLCAweGMxN2RjMWFiLCAweDA5ZjAxZDIxLAorCTB4YWY4ZGEyZDIsIDB4NTk4YmZjZjMsIDB4MjllN2VmZDQsIDB4ZWZmZWI5M2EsIDB4MWJiNzJlNDUsIDB4ZDdjZTNjNjEsCisJMHhiZmQ2M2Y2NCwgMHgzYjVkYTgzYywgMHhkY2RmZGU3ZiwgMHg2NThmNGU1NCwgMHg2ODg1M2RjNywgMHhkYWYzMGNjNywKKwkweDI4NWZiOGRjLCAweGMwNzM5OWViLCAweGRkZTFlNTAwLCAweDRiNmIwMzhhLCAweGMxZGUxZjNhLCAweDRiYTgxNGY5LAorCTB4NjdhZGU1YzAsIDB4YTViNWZiMjIsIDB4YmVmYTNhNzIsIDB4MzhmYzMxZDYsIDB4Y2JjNDU3YTcsIDB4Y2QzZTA4ZTIsCisJMHg3ODcxYjU0ZCwgMHgwODRjZmFjMSwgMHg0NzJiNTU0ZiwgMHg5YmZiZjNlNSwgMHgwMTgwZjc4NywgMHhmMDA3NWJkNiwKKwkweGUxMmRiMTQwLCAweDY0YjFkOWQ2LCAweGY4ZjkwNTgzLCAweDFmMjM3MzM4LCAweGEyNThlZjlmLCAweGRkNzg4YjFiLAorCTB4ZWJiZWM4YzksIDB4ZjAwZjBmOTcsIDB4MTQ3YjQ4NzUsIDB4ZTkwM2IyZTgsIDB4NWNkNGVhZjIsIDB4NzFkODZmMWEsCisJMHg3YzBjNzU4ZiwgMHgxMzc2ODYxZiwgMHhlYzNiOTVmYSwgMHg0YzU3ZGMwMSwgMHg0ZGNkZjU0ZSwgMHhlZGNlNzg0NSwKKwkweDRhMjA2NGFiLCAweGViNGRhYzFhLCAweGZiZWYxMTJkLCAweDdkNDE3N2ViLCAweDdlOWY2M2EyLCAweDM2ZjNjZTJjLAorCTB4YzJiYWI2YzYsIDB4ZmFhOTgxZWIsIDB4NmY1YTFmZDEsIDB4YTAyZDNlMDQsIDB4ZDZlMTEwNzIsIDB4ZmJmNWU0NjksCisJMHhjZjhhMzMxNiwgMHg4Y2ZiZTgzNCwgMHhmN2Y0MWRmOCwgMHhhM2NmYTIyYywgMHgyZmM0MTRiYSwgMHg2ZWQwOWJlZSwKKwkweDczN2JkM2FlLCAweDY3ZDdkYzE0LCAweDA3YThkYzk4LCAweGY0NDIxZjYwLCAweDU0YzJjODdlLCAweDI2ZmZmNDBiLAorCTB4NTc0ZTUxM2MsIDB4OGZkOGVmZTksIDB4NTAyYWFhZjAsIDB4YWUyNDJkZGMsIDB4NjBkYzg1ZGEsIDB4Y2QzN2RjNDEsCisJMHg3YTI1NjI5ZSwgMHgzOWRkNWY2NCwgMHhiZmY1MWFiNCwgMHhmYTA5ZTM5NSwgMHhjYzdlOGIzMSwgMHhmZjMwYTJlNiwKKwkweDJhZWYzYWZkLCAweGZkNDhmZmRhLCAweGE4NTE0ODc2LCAweDhkZDc0MzlmLCAweGIxMTJkZGRlLCAweDUwZmVjMjJmLAorCTB4YWE1MjFmZmUsIDB4ZmE0MGVlNzMsIDB4YjIzYWZiMTcsIDB4N2FjMmQzMGYsIDB4MjI5NWVkMTcsIDB4ZmRkZTI0NWIsCisJMHgzY2ExN2U2MiwgMHg3YjQ4YTNhNCwgMHg3ZWQzZWQxNCwgMHhiMWRmZDY3YiwgMHhkOWM4M2E2NSwgMHg4MjNhMzNmMSwKKwkweGQxNTIwNzNhLCAweDAxZmYzM2YzLCAweGY2MDU1MWQ2LCAweDcwZTAwNWFjLCAweDMzOTcyYTViLCAweGZhZmRmMjg3LAorCTB4MzBkZjljNDQsIDB4M2FiYzNmNTgsIDB4ZDMxYmUwOWMsIDB4OTM4ZjBiNjQsIDB4ZTkwZmZjMmUsIDB4NDgyZmVlNDYsCisJMHhiZmNmZTA0ZiwgMHhlNzNiNzJhNywgMHgxZTVjNjkyNywgMHg5NzhkMjFmZSwgMHhmYjYzMTNkMywgMHhmNTEwYmUyYiwKKwkweDFmOTcxMzU0LCAweGZjYjljYjViLCAweDQxYjdhZThmLCAweGVkYWRmYmY0LCAweDY2OGEzMWRlLCAweGVmNzYwZjdmLAorCTB4Zjc2ZTU0ODYsIDB4ODg1ZmI5MWEsIDB4MGE5NjEzYzcsIDB4ODczYjA2ZmEsIDB4YWJiNjE0ZjAsIDB4ZGE1MDNjNzgsCisJMHhjY2Y0NWZhMSwgMHhmMzcyZjJhMywgMHhiZmU4ZDk3YiwgMHhlNjlmZWRiZiwgMHhiNmY0ODdkZCwgMHhmMjdhMzdmMiwKKwkweGYxMTQ5YzU3LCAweGJlYzk5NTgyLCAweGJmZGM2NGY0LCAweGFiZjZjNDI3LCAweDc1ZDYyNzNjLCAweDFmOTE5OWJhLAorCTB4MWI4YzUzZjgsIDB4ODkzZGVjODIsIDB4YWYyODQzNzEsIDB4MzRlMGY5ZGEsIDB4MmNkNWJmZTQsIDB4ZTVlMGZlNDAsCisJMHg1YzUxMzczYiwgMHg2MTQwNzk3MCwgMHg2OWY3MDUyZSwgMHgxNjI3ZWU1ZSwgMHg0N2JkNThmOCwgMHhkZjRiZjFhZiwKKwkweDkzMTkzNmFlLCAweDc3ZTk4NGM3LCAweDZlMzY5YjQ1LCAweDU4YWJiMzU4LCAweGY2ZjZmZTUzLCAweDQ0MGIyNTY5LAorCTB4ZmNiMGExYzgsIDB4YTNlZjQ2OTksIDB4MWVmNDk1ZmIsIDB4ZDQ3ZWE3NmQsIDB4YzNmOGQyZWMsIDB4NDYxY2VlOTcsCisJMHg5N2Y1OTdlYiwgMHg3N2FkMzczMSwgMHg2NjgxNmI1OSwgMHhmMzk1YWNkZSwgMHg0OWY5YmM0OSwgMHhkNGJiNDViYSwKKwkweDQ2OWU3MzFmLCAweDAwOGZmYmNkLCAweGZmMDhmZWZlLCAweDQzNTNkMmZmLCAweGE5MmQxZTY5LCAweGJhNDBmZmJlLAorCTB4Y2FjM2NmMDksIDB4ZGFiZjFhZmMsIDB4YjAyN2M3MjQsIDB4N2VlMTY2NTYsIDB4ZmYyM2EwNDksIDB4NTA4MWVjZTUsCisJMHg2ZmZmYTcyYSwgMHg3MWQxZjcwZiwgMHhmZWUzMDVmNiwgMHhjYTBiZWViZiwgMHhjYzM5NzEyNiwgMHgwYzM2MTRkYSwKKwkweDZhYTdlMzFlLCAweGEwYmZiNGVkLCAweGE3YzUyYmJlLCAweDYxNmJlYjk1LCAweGE0NWYyZDQ3LCAweGQ0NTE3N2FkLAorCTB4NWRlYTI4YmIsIDB4NjkxMmJmYzksIDB4MjgwNTI5OWYsIDB4MGQ3Zjc4ZDcsIDB4Y2ZmMzhmODIsIDB4YTBiYTM1MWMsCisJMHg2ZTM0ZjhkZSwgMHgzZDM5MTZjNywgMHg2Y2VmNTA5NywgMHg0MzhlMjRiMywgMHg0YjM2Y2E3ZiwgMHg1MmY1MDA1ZSwKKwkweDM4YmFmYWZmLCAweDQ4MzM2ZDFkLCAweDAzM2I4YTNmLCAweDVmZmVkNmUxLCAweDg4YThiNjc3LCAweDBmYjA3ZGM3LAorCTB4ZmU1ODc5MDAsIDB4OGExNjQxZTgsIDB4YWUzNzUzOTAsIDB4MDFjYjNjNTMsIDB4ZWYyMTc2ZGUsIDB4N2Q3Y2RjZWEsCisJMHg3MWEwZWU3NSwgMHg1ZDkzZjQyOCwgMHhkMzk1ZTdjNywgMHgyMzUxNWZiMSwgMHgwOGQ0ZTVkYSwgMHg0MTlhNWY3ZiwKKwkweGMxY2NjZmIzLCAweDhkMjU0ZTMyLCAweDlhOWNlM2NiLCAweGVhMTQzMmEwLCAweGEzZGFlZjY1LCAweDg3NWZkOGE4LAorCTB4YmIzMzdhNDIsIDB4NDExMzAwMDksIDB4ZGMyNWQ5NTcsIDB4YTRiMWI5YmUsIDB4MjYzNjU5NWQsIDB4NWQ1Njg3MGMsCisJMHhlMDA3MThmNSwgMHhlYWRkMzVhNywgMHg4ZjczN2Q0NiwgMHgwZDI0MzdkMywgMHgxODIyNzllNywgMHhmOGZjZWRjNCwKKwkweGRhMmEzZDEzLCAweDdhNzUzZmVmLCAweDYxOWNkMjBhLCAweDhlZjRiODM4LCAweGQ2YTdkNDZjLCAweDZkOWU3YzEzLAorCTB4YWU2M2ZiZmQsIDB4NGRhMjI4NjcsIDB4ZGNkZGFiZmUsIDB4MjNiM2QxOWUsIDB4YTQ4N2RiOGMsIDB4OGMzN2QyYWYsCisJMHhlNzI3YmQyNCwgMHhmNDIyOWU5NywgMHgzZGYzM2E0NSwgMHhhZGZhYTM2NywgMHg2OGM5ZjA4YywgMHg4NjFiZTkzZCwKKwkweDJjZjZlNmVmLCAweDgxNTU3N2M3LCAweGFmYmUwZjc3LCAweGE4YWFiOGNhLCAweDZjMTdkZTA1LCAweGExNGJhYTBiLAorCTB4NjJiYmNiZGQsIDB4ODVjYjgzZmIsIDB4NGM3NTgxM2UsIDB4NzVjOWY1YzIsIDB4YzgyZTQ5NWMsIDB4N2UzODg2N2EsCisJMHhkNjBmYzkwYSwgMHgxZmY3YjExOSwgMHgyZjdkMjIzMCwgMHgyMTZkMzQ3ZiwgMHhhMzZlYjdjZSwgMHgzMDk0OTk5MSwKKwkweGY0ZWE3ZmZjLCAweDY0ZjljNmNlLCAweDA4MmJiNDc3LCAweDkzZGZlOTFiLCAweDFkZmY0YWUzLCAweGZjZmU0NzdlLAorCTB4OTZmOTI4YzgsIDB4ZmU1YzVmZDMsIDB4MmNmN2E3NWYsIDB4MWI2Nzk0OGYsIDB4NjkyNzg0OGQsIDB4YzdlNzg3M2YsCisJMHg2OWQ1ZmRlZCwgMHhlYWJlY2Y1YywgMHhmOWMxMmVmNCwgMHgyNzZkNzQzNCwgMHgzZGFhY2Y3ZiwgMHhmOTYzMWExZiwKKwkweGUyZjlhM2FiLCAweDZhNTQ3MDRhLCAweDZlYTBiZWY4LCAweGViODAzOWJlLCAweDI1NTQ3ZjJmLCAweDY4ZGRhODNhLAorCTB4ZGQ1OTM4YTQsIDB4OWZiOGZiMzMsIDB4NDZlNjFlZTcsIDB4YjFkNzUxMzksIDB4ZTMwZTU5NGYsIDB4NGZiMzNlZDYsCisJMHhkNzAxMTE1OSwgMHgwNTAxNzU0MSwgMHgyZWMyMzNlNywgMHhhZmNiOTBmOSwgMHgzZjQ3YmE2OCwgMHg4NzJkZGEzMiwKKwkweDljNGU1YzJkLCAweDE1ZjliNzJkLCAweDgzNTllYjgwLCAweDlkZWIwZWFmLCAweGZkYmFiMmNkLCAweGJjM2M2MWY5LAorCTB4MTFmYTZmYjksIDB4M2ZiMDM3Y2MsIDB4YjNlMjBhNjcsIDB4ZDMzYmI3NTUsIDB4NDc1YWY1MGMsIDB4NWY0OGRkMTksCisJMHgzNmZhNzUzZiwgMHg1NDUyNWMyMywgMHg0ZmI2Mjc2ZiwgMHhkN2JiYjM0ZSwgMHg4OTk3NWI0MywgMHhmYmJjYTExNSwKKwkweDFmMTg3MGJhLCAweGVmZTMyNzQ1LCAweDg1ZDNmY2UxLCAweDkxZGI4ODcyLCAweDgxM2ZjODQ1LCAweGE3YjRiYjM0LAorCTB4MzYxZGFlNDgsIDB4YzczYzc1ZjAsIDB4OWVmZjdjZjgsIDB4ZTg5MDc5ZWEsIDB4OGQwYTQ4ZjgsIDB4NTQxNzVkOWIsCisJMHg3ZjlkOWZkMCwgMHg2YjkyMzllNiwgMHg5ZDMwZmZiMiwgMHhlNDg5MWU3OSwgMHhiM2NmMmJkZiwgMHg1NmY0ODhjMywKKwkweGY5NTBlNDJiLCAweDhmOTQ3YmEzLCAweDRiZmRlNjIzLCAweDZlOTFmNDMwLCAweGJhMDE5ZmIyLCAweGZkZjdkMWI0LAorCTB4M2VhOGQzMzMsIDB4YmRmMGI5MzMsIDB4ZTE2YWVkNDIsIDB4NzkwODhhZmIsIDB4NDMxMWQ3MjMsIDB4ZjVjM2VjZWUsCisJMHgxY2Y0NGVkOCwgMHhjODI3NzJlNCwgMHhiZTYyOGRmZCwgMHgxNTdjZjhkMSwgMHg5YTdjMWZlNSwgMHhkZTk5ZWEwNiwKKwkweDMxMjNmZDFiLCAweDQ4Nzg3YTJlLCAweGU1MjdmNTAyLCAweGJlZGYzNDQwLCAweGU1MWNlODJhLCAweGZlNDZjZWE1LAorCTB4ZTUyYmIyNWEsIDB4MjJiZDY0ZmMsIDB4MzRmZWM1NjcsIDB4YzEwZjQzODIsIDB4NGE5NzdlYTEsIDB4N2EzMmE5ZWIsCisJMHhjMTExZGU4NywgMHhmZDE2YmYwZiwgMHgwM2Y5YjgxZCwgMHgwN2ZkY2EyMywgMHhhMjVkZmRmZSwgMHg4NTM2ZmFjNywKKwkweGVkYWNmMWUyLCAweGQ0M2NlMzVkLCAweGY0YTdmZTQ3LCAweGUyY2U2NzY4LCAweGYxZGIwMTI2LCAweGE3ODRiYmMyLAorCTB4MmU1YzlkNTksIDB4NTNlZTc3ZDcsIDB4NzRjMmQ5OTcsIDB4YzBlNjdmOWEsIDB4ZjU2NzQ4YWQsIDB4ZmI4NjI2MWQsCisJMHhkZmJmYTAyMiwgMHhlOWEyN2MyMCwgMHhjYTQ3YzI1NCwgMHhiNGY4NzhkZCwgMHg5NDcyZTBjZSwgMHg0N2U0OGRmOSwKKwkweDNlNTRmZDg1LCAweGRjYTQyOWZhLCAweDRlYWE3YmZlLCAweGZiZjgwOWY4LCAweDFjYmM2OTBiLCAweGE3ZGYxZmE2LAorCTB4ZGNiMDhmMDgsIDB4ZTQ1ZjEwYjUsIDB4NjAzYTI5OWYsIDB4NWJiODdkYzYsIDB4NWE3ZjNmMjEsIDB4ZTQ2Nzg3MjUsCisJMHhjNmM3YWFiYywgMHg1NGNlOWI5NywgMHg1MGQ0MzdhMSwgMHg1ODdiMWNkZSwgMHg3ZmNiZjdiZSwgMHg4MTBiZmVkMSwKKwkweGU0MWY3ODZmLCAweGQ0MTBkOWVmLCAweGQxZmU3MmYzLCAweDcyNzdjYmY4LCAweGNlODMxYjdkLCAweDExZDcxYmZlLAorCTB4M2RhNGRmYWQsIDB4YzllNmU5MjAsIDB4OGY0NmFhNWQsIDB4ZWE0NjlkZDgsIDB4NzMxYjBlY2YsIDB4NzI4ZWM3OWMsCisJMHg2MWQ4Y2YxZSwgMHhjNzZjZmFlMCwgMHhlNTAwNzM3YSwgMHg3ODBiOWJjOSwgMHhhMTdkOTk1ZSwgMHg0M2NmODgzMSwKKwkweGY4NzVhNWJhLCAweDFmMzY1MGZkLCAweDViYTc1NWJmLCAweDBkZDZlNTgzLCAweDc4NDJkNjM2LCAweDRiM2EyNGY1LAorCTB4MTkxMjdlOTEsIDB4MWU1YzhmOTcsIDB4OTczY2YwM2UsIDB4NWI3ZTc1NjcsIDB4ZWIzZmMxODAsIDB4NTM5NzczN2MsCisJMHhlMmNkMzlkYywgMHhmMzMzYjhjNiwgMHhiM2NlMzQxZCwgMHhkNzJiYTQwZiwgMHgyZThkZmI3MywgMHg4M2FiM2Y3OCwKKwkweDAzYzQ5ZmYzLCAweDJmYTI1M2M4LCAweGFlMTIwZmM5LCAweGI4NzI3ODYxLCAweGY4OTI3ZTRiLCAweDY3ZjRiYmY4LAorCTB4YTc3Y2JkMDMsIDB4ZGEzZGFhYmMsIDB4NDZkYmRjNzgsIDB4YmU0ZWQ1ZGYsIDB4NzA2YzNhY2YsIDB4Yzc4NjlmYTEsCisJMHg2ZmQxZTIxNywgMHhiM2I3YmFlZCwgMHhiNTFkODI0ZiwgMHg3YTJkZjMzYSwgMHhmZDg1YmU0YSwgMHgyN2JmODZhYywKKwkweDM4MTdiYzA5LCAweDc0YWZiZWI5LCAweDJkYTliYTcyLCAweGFjYmUyMGU5LCAweGZjNDRkOTNkLCAweGU1YzE5YjZjLAorCTB4NTY4NGVkOWEsIDB4Y2ZmNjMzMWUsIDB4YThkYmJkNjIsIDB4NjNiNTk1NWQsIDB4NTQ3N2U2MWEsIDB4NzAzOGFlM2QsCisJMHg2ZTRmMWZiZiwgMHhmY2YwYWVkZSwgMHhiZDc3NGZiOCwgMHg3MmY5ODg5MSwgMHhmMmIwMmJlYywgMHhlMTYyOWUzMSwKKwkweGU0ZWI5ZGViLCAweDVlZWNlMjcyLCAweDdiZDEzODAwLCAweGY2NzJmMTkzLCAweDYzZmE5NWZiLCAweGMyMGE2M2MxLAorCTB4ZmFjMDU2YjMsIDB4MTM5NTMzZWMsIDB4ZWM3ZTg0ZmYsIDB4NjFlZTQ5YmQsIDB4OWVjZmU0YjAsIDB4M2ZlZWU5YjksCisJMHhlZWNmYmNjMSwgMHhmNzQ2ZTI5OSwgMHg5NzhiNWE2NSwgMHg2OWNmYTdlOCwgMHgwMzdlZTM3MSwgMHhmNDBjZjdjNCwKKwkweDc4ZWZhZTE3LCAweDY4NWFmMTIzLCAweGFiZTlmYTc3LCAweGQ3NmU1MDhiLCAweDc5OWU3OThhLCAweGUxMGViZjVlLAorCTB4N2ZjOWUxYjIsIDB4NmJkZjhjOWIsIDB4MDlhYTRhMDMsIDB4ZjhmYmQ5YzcsIDB4YmU2MzY3N2YsIDB4ZjI0NjllZWEsCisJMHhmZDNjYjUxNywgMHgxN2YzMTFiYSwgMHhmZTc2ODE3NCwgMHgwMzkyNmY3ZSwgMHhmOWZlOWRlYiwgMHhlZjA4YzlmNiwKKwkweGZhMTY4ZTk2LCAweGVkZTdlNjdlLCAweGU0ZjAzZTU0LCAweDc3ZjZiZGJmLCAweDEzNzhlM2Y0LCAweGNjZWY1OGRkLAorCTB4MmYwOWZiZjMsIDB4ZjI5NTNlNzUsIDB4ZjVkMWUyZGIsIDB4YjlmYjdkOGUsIDB4OGYzZDQ0YmMsIDB4Y2I5ZjMwN2MsCisJMHg5MmQ3NDkzMSwgMHg3OTNmNGY3ZSwgMHhiZDQ4YzRkYiwgMHgwYWI3ZGYyMSwgMHgwMjZiNGU3ZiwgMHgwOTlmMjNkNywKKwkweGUwYWRhZGZlLCAweDllY2ZjZWYxLCAweGZkYTdjY2I1LCAweDFjMzQzMTgxLCAweDYzNzVjNWY3LCAweDJkZGM1ZDM4LAorCTB4NzFkNzUxZTAsIDB4NDZjMWExODcsIDB4ZGY5ZmE5ZWQsIDB4NzNlM2RmMDIsIDB4MjdlN2QwMmMsIDB4NjQ4NTI5MjMsCisJMHhkN2NhMjVjZiwgMHgwZmFhNTdmOSwgMHhiZmEwMjZmNSwgMHgxZjQ1ZTZlNywgMHhlYjFmMzgyYSwgMHgyZDQzMjY5OCwKKwkweGZlNjlmM2NkLCAweGY5MWQ1NjFkLCAweDZjNmQ2Y2JkLCAweDM4YmZmYjNmLCAweGUwMmVjMjZkLCAweDU5ZGQ5MDdjLAorCTB4MzkyMmUzOWQsIDB4OGIwZjcyNjAsIDB4NmJiMzg3YjAsIDB4MjcxODJkN2MsIDB4Y2ZhZDdlYmUsIDB4YmUzYzA3YWQsCisJMHhiNGU4ZWE3YywgMHg3MjdlNTA0MSwgMHhmODRjNTJhNCwgMHhjZjVjMmJkNywgMHg0ZTM0NmRmOSwgMHg4MWMxZmEzZCwKKwkweDNlMGI3NjhmLCAweGY1MzA3NzQ5LCAweGRjMDM5MjFhLCAweDMyYTU1MDFmLCAweGFhN2U0NmQ1LCAweGY1MTM5MjNlLAorCTB4ZWUwZjQyYWQsIDB4NzM2ZTdlMTEsIDB4NzY0ZGRlNWYsIDB4MjZiYjY3NmEsIDB4ZWQwNjFmNjIsIDB4ZjcyYTM2NmMsCisJMHhmMzEwZmRlNSwgMHhlN2Y4Njc0YSwgMHgxOTcxZGU5MywgMHhhNDY3YmU2OSwgMHhmMjdlNjAzYywgMHg4YjdlNGE3YiwKKwkweGJjYTExYmY2LCAweDU3ZDFmY2MxLCAweDI4NWRlNTlkLCAweDNkMzNlNTFmLCAweGVmZTRiZjhlLCAweDc0YjhmYmUyLAorCTB4MTVjYTE3NGYsIDB4YTM1NTM3YjYsIDB4OTVjOWUyMGYsIDB4ZTc5ZjM3MDMsIDB4MGY5NWZiN2EsIDB4OTAxYjBlODksCisJMHhkZjdjNzEwZSwgMHg1ZWRlOGQ0OSwgMHhlODE1YzI0ZSwgMHg4OTBmYTVmMCwgMHg3MTc3OTcwZSwgMHg1NWQwZGFmOSwKKwkweGQ0ZmRjNDZlLCAweDY5ZDdlMTBlLCAweDc0ODRmNDEwLCAweGJmZThmYjg0LCAweDljNjk5MzNhLCAweGUxYTFjOTg2LAorCTB4MGJjZWE3MjgsIDB4MTJmZjNiYmEsIDB4M2E0M2I3YTcsIDB4MGUwMWY5MWQsIDB4ZGVkZDFlZWQsIDB4OGZkNDBjYTIsCisJMHhmMDk3OGQ0YSwgMHhlNmY4MDBkZCwgMHhhM2RhZjM3NiwgMHhkN2Q1Njc2OCwgMHg2YmYyMzczMCwgMHgwN2UwYTc0MywKKwkweGJlMTE3YmIwLCAweGNiZDU1ZDBkLCAweDY5NDFiZmIxLCAweDBkZGZjOTMzLCAweDQxYjRjOTc2LCAweDYzYTg2ZTUwLAorCTB4ZDk2ZmM4YTUsIDB4NDI1ZTJhYmIsIDB4N2M1ZDYwYmEsIDB4MDM1ZDllM2YsIDB4NGRkMjJjZjYsIDB4OWY1YmJkNWEsCisJMHhkYjhmN2E4ZiwgMHgyYzhmZDdiZCwgMHg3MjNiZjZhMywgMHhmMmU3MTQ1ZCwgMHhmMzhhMzE1NywgMHgxOWZiNDBlZiwKKwkweDY4ZDY1ZGY1LCAweDM2ZmIzZjZlLCAweDVjYzVkZDkyLCAweDY1MzdlNDA5LCAweGQ2MGQ3NTNlLCAweDYyMmZmMDZmLAorCTB4Y2QxMWQ3OTQsIDB4YjQyOTJmYzcsIDB4NTgwODY4MGYsIDB4NTY2ODFmMjksIDB4MWE3ZmI3MTcsIDB4OWYxZjM4YmEsCisJMHg0ZjkxZjA5MywgMHhlNGFkY2Y0MywgMHhjNGMxN2Y4ZiwgMHhkMGZlMTFmYywgMHhjZTlhNWYzNywgMHgyNjhiZWNmNSwKKwkweDM1OWZiM2QyLCAweGIwYzdkODdiLCAweGJjODViN2EwLCAweDZkYWM3MDk3LCAweGRkMjFkN2NiLCAweDA5OTM3NjMyLAorCTB4Y2M0Y2IxZTcsIDB4ZjVjMGNkYTMsIDB4MDNkMGIyNDYsIDB4M2NmOGRiMDUsIDB4NzdlMTc0ZDQsIDB4YTc4OWQ3NGMsCisJMHhlMmU3OWI1MSwgMHhlMTdmOTNmMCwgMHhjODhmMTg5YywgMHgzOWU4NWQyMiwgMHg3OTdlYmExOCwgMHhlZWE0Zjg5MCwKKwkweDlhNWZkZTE5LCAweDY3Nzg1M2M5LCAweGZiNGFiZDA0LCAweDBiMWU5YTI4LCAweGJiZDliOGM0LCAweDRjMjgyYTBlLAorCTB4ZDFjZDc3YjIsIDB4MzVmNWY5ZjAsIDB4ZWIwOGQ4MmMsIDB4MmU5NzdlYmMsIDB4ZDkxYzY1MzgsIDB4OWU0OTBiNGQsCisJMHg1OGIyMzdhZiwgMHhkMjIzMmFmOSwgMHg5NTU2ZmRiOSwgMHhiZjQ0MmRlYSwgMHgzNmNkZDU3NiwgMHhiOTNmYTQ3NywKKwkweGIzYTNjMTJhLCAweDI0NTcxZGEwLCAweDEyZGVkOGZkLCAweDRhOWQxYjhjLCAweDZmMTFiYmI3LCAweGQyNWRkMmUzLAorCTB4NWJkOGQzMGUsIDB4ZGNkZmY3MDMsIDB4Y2RhMWJjMGUsIDB4MWZmNzBlM2YsIDB4ZjMwOWY1ODEsIDB4ZGEwOWFlMjksCisJMHgwZWRjZmM4ZCwgMHhmN2ZiOGY2OCwgMHg5Y2ZlZDdkZCwgMHhiODViZGZlZiwgMHgwNzA0MDJmZiwgMHg2ZjU0OTljOSwKKwkweDlkOGZmYTA5LCAweDVjYjVkZTA1LCAweGIxZGRkOTNmLCAweDkzYWFmM2Q2LCAweGNkYzBlN2FmLCAweDNlZTIxNmI3LAorCTB4OGRhZTYxYjEsIDB4NTc4MWUxZjgsIDB4ZGU5Y2E1OTQsIDB4YmVlMjExNDAsIDB4ODNmOWM3ZGEsIDB4ZTEzYzdmMDEsCisJMHgzYjI0N2EyMiwgMHgxYmM5YTFhYSwgMHg5YzhmNGQ4OCwgMHhhZWMwMWE1ZiwgMHhlODFiM2I0MiwgMHg5M2I3MGQ3MSwKKwkweDEzZjM4YzZkLCAweGJmYjk0YmE3LCAweDY5MTViOTQ3LCAweDhkM2U0YWNmLCAweGJmNDk3YmU2LCAweDM1ZmY3Y2ZkLAorCTB4ODFiY2ZkZjksIDB4ODA3OWUzZjMsIDB4M2Y3YmQyMDMsIDB4ZTljY2JmOWQsIDB4ZTA3YWViN2MsIDB4MTViZWY4NDcsCisJMHg0MjI1YjFmOCwgMHg3ZmVmNDdmZSwgMHgxZmI4OWU3MCwgMHgxZWY2ZjI5MCwgMHgzYTUxNzdhNywgMHg2ZmRkYTFjYSwKKwkweGFiNTBjNjZkLCAweDJmMGQ4Zjk0LCAweDM5N2UxOTZmLCAweDk1OGNjYmJiLCAweGYwMzM1ZmExLCAweDYwZmQyNDZiLAorCTB4NDQ1ZWQ2OGMsIDB4MDllYTNmNGYsIDB4ZmVkOGJhZWIsIDB4NmRkMmJiOGYsIDB4M2YzZmNkZGYsIDB4YWVlNTJmMzAsCisJMHg3OTgxZDJmNCwgMHg3M2E4ZTkyOSwgMHhhZGJiNmYxMCwgMHhhNThmYjQwMSwgMHgzZTdhMjkxZiwgMHg0OTlmMDQ0YiwKKwkweDAzZmRjYTdjLCAweGZlYjAyMWM2LCAweDM3ZWY4MmZkLCAweDg4OGY3YTg5LCAweDg0YmVjNDY3LCAweGYzYTVjMWY4LAorCTB4ZjY3OTQ4N2QsIDB4NmM5MWY0NzEsIDB4YjVmOTdkZjcsIDB4MmY1MjM4ZTQsIDB4OGM4ZGQzNDYsIDB4YWE3YWUwYTMsCisJMHhkN2FmYzRjNywgMHhjZmVjNWZiNiwgMHgyOWY4ZThhMiwgMHg4MDBiNWZjMSwgMHg2ZGRlNzAzNywgMHhjNDE3ZTA4NiwKKwkweDE5ZDg3NzhmLCAweDk5ZjgxM2U1LCAweDcxZTMxNTI3LCAweDdjZTA4ZGFmLCAweDM4NmZiMjM0LCAweGZhNjZiN2I2LAorCTB4OTJiYTQ0YmUsIDB4OGY3YzVkN2UsIDB4MTE1YWFhNzEsIDB4NmJkZGFjYmYsIDB4N2Y5ZTQ0MDgsIDB4ZDE4MzM3YjksCisJMHhiMzc2YmQzOCwgMHg5MWZjMGY1ZiwgMHg4N2RiZTk5YiwgMHhjYzE1ZmRlZCwgMHhmMzNkNDQxZCwgMHgyYjhhMTY4ZiwKKwkweDhhNWI4MTgxLCAweDg1OTFhNmYyLCAweGVmY2UxMTEyLCAweDIwNWVmYjI1LCAweDBjZjdkNWZhLCAweDM5ZTNiZjQ3LAorCTB4ZGYwZTM0MjUsIDB4ZGFmZTEwOWYsIDB4ZmI1ZmMyMTMsIDB4Y2Y3YmQ3N2UsIDB4MTdhZDAyYmUsIDB4ZjE2ZTcyYmYsCisJMHg1ZWNlOTE4ZiwgMHg3ZDIxZTRiNCwgMHhlN2Y0YjA5YywgMHhkZGExMjViZiwgMHg5MmI5ODE3ZCwgMHg2OTBlNzcyZSwKKwkweDU1ZWY1OTkxLCAweDI3NjdmYzIzLCAweDdmZmRiMWVjLCAweDM3M2MwYjZmLCAweDUzMmI3ODhhLCAweGI3YzNlZDE5LAorCTB4MTlmOTcwNjcsIDB4ZTNjNGJmM2UsIDB4YjRlYmVmYWQsIDB4MWNmOTM3ZmUsIDB4ZGZlMWMxOTMsIDB4NTAxY2U3MTksCisJMHhkN2RmMDY2MSwgMHhmY2UxMGU3NCwgMHg1MGFlZDdkOCwgMHhkZDY2YWZiYywgMHg0MWViM2ZmYSwgMHhiNWFjZDQyZSwKKwkweDlmMDllOTA3LCAweDcxYWI4ZWQxLCAweDI4M2E4M2Y4LCAweGI5NzAzMDlmLCAweGNkNzM3ZjA0LCAweDA3ZmQ2MTY1LAorCTB4Yzg0OWQ0ZjUsIDB4YzUwNzdlMzMsIDB4ZmQwYTk2YmYsIDB4Y2RlOWFjYjUsIDB4YTE1ZmExYmYsIDB4NDllNjY1NDYsCisJMHhmMmM3MTg0NSwgMHg5ZjA0MWUxZSwgMHg0ZjJkYjUzZSwgMHhmMmJmZjE0NCwgMHhhM2E2Nzc0NywgMHhkNDU4Y2E3ZSwKKwkweGE2YzFmMjI2LCAweDU1ZmVkMDNhLCAweDJmZTgzNzNjLCAweDZmNjcyZjU5LCAweDEzMjc2NGE5LCAweDFlZGUwMDFkLAorCTB4MjJmNmYwY2MsIDB4ZTI0YTJmMWYsIDB4Nzc0NWMxN2UsIDB4MDhmZTAzNWEsIDB4ZjA1N2I4NzksIDB4N2NmZDM0NjEsCisJMHhjZGJjZTcxMCwgMHgwMTE1MTk5NywgMHhhYTYxNmZlYywgMHhlZmQ0NmZmNywgMHg3MjM0ZTc5ZCwgMHhmYTEyYmNlZCwKKwkweDVmNDgyM2M1LCAweDRmZGRkODc3LCAweDIyZjJlZWYwLCAweDA1ZDI2M2YzLCAweDBlMzE2YmZjLCAweGI3YjFhMjA0LAorCTB4YmFmODY3YjAsIDB4YmVlM2E0N2MsIDB4NWZhMWRmYmMsIDB4ZjBlNGRiYWIsIDB4OTFiYmYwYmIsIDB4ZjE3NmNiYmUsCisJMHhlM2YxNDFlMiwgMHhkMjIzMmU0MCwgMHg4NTQ1YzM0NywgMHhmNzY5NjFlOCwgMHhhZTUxYzc5YiwgMHhhMjIxYTgzNywKKwkweDFiNjZhNTkzLCAweGEyZTFiMWUxLCAweGQ1YTllOWNhLCAweGRiMjQzNjcwLCAweGE0ZDdlZTAzLCAweDYwMzJkMjdhLAorCTB4Mjc3YmZlOWUsIDB4MDkzYzUzMjUsIDB4MTdjMzg5ZjgsIDB4ZTM5YzQ1MmEsIDB4MzdjMzMyZjgsIDB4ZjdlMDAzMjgsCisJMHgzNmYxMzU5MCwgMHgzMDVkN2ZkYywgMHg4ZjMwOTJiYiwgMHhmNDA4ZDFhZCwgMHhlNzc1MzU3MCwgMHg0M2Q4NDczNSwKKwkweGE1YWVjNzJjLCAweGZlYjdlZTgzLCAweDZlNWFmMzg2LCAweGFmNTExOWY2LCAweGQxMzRmMGFmLCAweDQ5NDViMTc5LAorCTB4OThjNzUyYzEsIDB4ZDI0ZmJjNDgsIDB4ZjVmZDFhNWYsIDB4Yzg0OTdlZjEsIDB4M2M4ZGY3OTcsIDB4OWQyMDY0NmYsCisJMHhjZjZjM2M3MywgMHgzOWIyZjUxMCwgMHhjNzlmYmNiZiwgMHhlN2MzOWU2YSwgMHhiYjQyNzgyOCwgMHg3Mjg4ODdmNywKKwkweDE3MGYyODkxLCAweDc5NzlkMmY1LCAweGY3OTdlMDlhLCAweGQxN2FmMWM3LCAweGUzMTUyY2UzLCAweDk5ZTE5OTdjLAorCTB4NzY4MjcwOGMsIDB4YzdkMjIzNDEsIDB4NjczYTE2NmIsIDB4ZmU0MDRhYzQsIDB4OTM1YmJjYTEsIDB4YzgyYzc2NGIsCisJMHg3NzA4NjliOSwgMHg0Yzk4MjcxOCwgMHg2N2E0NGNmNSwgMHg0MWM4MTM1OCwgMHhhOTZmNjdjMCwgMHhiNWIzZTA4YiwKKwkweGUzMDVlODFjLCAweDI4OWFhZjQxLCAweDJiZjEyNDFlLCAweGNmOGQxYWYxLCAweDc3Y2ExOTg1LCAweDE4MWY0ZmNiLAorCTB4NTE5ODVlYmYsIDB4Y2Q3ZTMwM2EsIDB4MTdjMjUwZDgsIDB4ZjM4YzRiZDEsIDB4ZjVmMGYxMWYsIDB4MDNjNzNiNmIsCisJMHgwY2YyZWJmMCwgMHhiMWMxODNkMiwgMHg0OWIzN2M5MSwgMHhiNWNhNTFjMCwgMHg3OGI0MTNmNywgMHhlMzlkM2NmZCwKKwkweGJiZDQ1ZWExLCAweGRhMWY3Njg0LCAweGUyM2VlZWQxLCAweDc4NTNmN2JmLCAweGFlMDJiNGZkLCAweGZlNWRhNDk3LAorCTB4NWYyZTAyNGYsIDB4NTI5ZjZiYTYsIDB4ZDFmYjQ0Y2YsIDB4ZTJmMjE0YmYsIDB4NDdlZTc0Y2IsIDB4OGRkZWJjMDcsCisJMHgwOWZhOTVmMywgMHgxOTMwNGNlNCwgMHhlYmQxNzhmOCwgMHg2YzMzOTIyNiwgMHhkNWU1MWY2MywgMHg4M2ZmYmQ0MCwKKwkweGVhNjQ1YWYwLCAweGY0MTUzNWJiLCAweGRlYzEwZmNhLCAweGJiNTExNjMxLCAweDA2NDcyODRiLCAweDQ4YzdlZmVjLAorCTB4ZDQzM2IwYmEsIDB4MGUxOWFkZGIsIDB4ZjQ5NDFmNmUsIDB4NDhkN2I4ZjEsIDB4MGNhNWFlYmUsIDB4NjU3Mjg3ZTQsCisJMHgyMTBjNjNmYywgMHg2YmYwZTQwYiwgMHhjMTQyYmYyMiwgMHg2MjE0YWViYywgMHgwN2Y2MTc2NywgMHg4Yzk3ZmY3MCwKKwkweGEzZGMzMGQyLCAweGU4MjEzYmM3LCAweDQ1MGNkMWUwLCAweGIyMTViYzI1LCAweGFkZGJjNDQyLCAweDVmNmU3ZWVmLAorCTB4MTM5ZTVkMGMsIDB4NGQ5MzY1ZTcsIDB4ZTdlYzc2YmUsIDB4OTE2ZmRkZWMsIDB4MThjMjdlOWQsIDB4OGI2NmRlMWMsCisJMHg3YzE4ZGRmMSwgMHhmYzI1MjFlYywgMHhmNGE3YjZmZCwgMHg5OGQ1ZTM3ZSwgMHhjMWY2N2U3ZiwgMHg0YmRkNjE5YiwKKwkweDFjNmVmNDdiLCAweDVmM2RlOTcyLCAweGVkMWUzM2JjLCAweGM1MDMxZWVjLCAweDZmZGY0MDZiLCAweDRkZGU3MTUzLAorCTB4YTEzY2FlZGMsIDB4NjdjMWQyZDMsIDB4M2RmNzY5NzcsIDB4OTA3YTBiYWYsIDB4ZGNhNTcyZTcsIDB4MTU3Y2ZhOTEsCisJMHg5Mzc5NzM3MywgMHhjYjFiYjg5MCwgMHgzYjcxZGQxZiwgMHhjZTVkY2I5ZCwgMHgwMDNkODdiYywgMHg2NjZiZDNmNywKKwkweDNiN2M1ZDkyLCAweGNmNWU1MWYzLCAweDM5ZWQ1NmIyLCAweGRhNmQxNWRiLCAweDA3M2JlZGYyLCAweDM5MjVjMzljLAorCTB4ZmQxMDJhYmMsIDB4MmJhNWY4NWUsIDB4ZjNmYmViNjMsIDB4MzMzZjJlODIsIDB4N2FmZGY4OGEsIDB4ZmRmOGNjNTMsCisJMHgwOWZjODVlZiwgMHhiNGZiZDljNywgMHgyZjU3ZmJmMSwgMHg4YzZmYmYxZiwgMHhlZDg3ZGY4YSwgMHgzZGY4ZTg4OCwKKwkweDYxMTNmN2VmLCAweDkxYmY2MDZmLCAweDJhY2ZmYzcxLCAweGEzZTNhZjYyLCAweDU4Yjc2OTBjLCAweDlmMTlmOTM1LAorCTB4MTI1YmIwMGMsIDB4NDVlMzdiZTksIDB4ZDhmOTljNGIsIDB4MmI2N2ZkZTgsIDB4ZDdkMzhmNjMsIDB4NWYzNjhlM2YsCisJMHhlNzllZGMyMCwgMHhiNWZkYzgwOSwgMHg4YmM2OTNhNCwgMHg2NTY3YTQ1OSwgMHhlMWM3ZGE1OSwgMHgzZGY0Mzk3NiwKKwkweGY0YmFiY2ZhLCAweGY4YmU0YjZmLCAweDJjZTY2MTU4LCAweDE3NmQ0N2YyLCAweGYyOWJiYzc2LCAweGJiNDYzZjMzLAorCTB4YmE3MmY5MDgsIDB4NGMxMGI1ZWIsIDB4Mjc4ZmQ5NzEsIDB4ODQ4NzU3MGUsIDB4MWQ3YTI2ZjksIDB4NDI2NzVmNDAsCisJMHg5OGQ4ZjIxMSwgMHhmZDIzNGY2OSwgMHgzYTZlNjZlYiwgMHhmZWU4Mjc5NywgMHhlOGFiYmJkNiwgMHhiZGZmY2Y3YywKKwkweDMyMjMzMmE3LCAweDUzZjcyYTZlLCAweDhmNjk0NjBkLCAweDk2ZmEzNGQ5LCAweDY1ZTNlOTQ1LCAweDFkOTE2ZjVkLAorCTB4NzBkN2Y2MDYsIDB4N2E3ZjNlMTQsIDB4YzNkMjZlZjUsIDB4MWQzNzk5MmIsIDB4ZDVmN2JkZTksIDB4ZTU2ZTc0MTEsCisJMHgzOTYxZWFkYiwgMHg0YmZjOWI5ZiwgMHgzNWJmM2MwYywgMHgzOTg3ZWM4ZCwgMHg3NTM3M2U2MiwgMHg2NzUwM2I3MywKKwkweDFjNjgxOGY2LCAweGQyMzk3MzBmLCAweGU3Y2Q4YjY5LCAweDg1NTQ0MjBiLCAweGYzZmQ3NWYyLCAweDYzMWRlNzQ3LAorCTB4MTVmY2M0OTMsIDB4YmRmMDBmNmMsIDB4NTJkOTNjNGUsIDB4ZGJjZTI2NWYsIDB4MzFlYWUzODQsIDB4ODk5MDI2MGQsCisJMHg2ZTg5OTZjZiwgMHgyOGE3M2UxNywgMHg4M2NmOTU1ZSwgMHg2YjFhNzllMywgMHgzYWZhYzFjYSwgMHhkN2NmNDg3MywKKwkweGM3NDgzMzA5LCAweGEyZjBmZGY2LCAweDM3OTQ1ZGIyLCAweGViNzBiZGNlLCAweGIzNmY3YzBhLCAweDhhMzEzYzkzLAorCTB4MDRjZjRjNzksIDB4NmRmYzg4YjksIDB4Yjc1YzY2NjYsIDB4NGQzYzE2YzksIDB4ZjRmMTMzZjEsIDB4OGY4OGI4NTcsCisJMHhmOTE4NDNmZCwgMHgwNzU4MTI0MSwgMHhkOWI1M2Y5ZCwgMHhiMTcxZjljZSwgMHhiMDUwZTYwZSwgMHgwODVjNzE2YywKKwkweDljZTI3ZWUyLCAweGYzYzdlNmMzLCAweDY3MmYyMGM0LCAweDVmM2ZhMjY1LCAweGM0NGFkNWY5LCAweGVlNjdjODBiLAorCTB4NWRmNzhhMTcsIDB4MTFmM2YyMGQsIDB4ODhhNWRlNDIsIDB4NzkwOGI1ZjksIDB4OGFkY2M1OTcsIDB4ZTQ4MGM3YjgsCisJMHg5NWY2ZmRkZCwgMHgyNjdlZTAzNywgMHhhM2Y3Nzk4ZCwgMHg3MTM4N2JiYywgMHgzMmZkYzUwNiwgMHg5M2U2OGY5OCwKKwkweGM4ZDU0MzNhLCAweDViNTdhNzJkLCAweDQ2YWY5OGNlLCAweGU3MDUzYmNiLCAweGJlZDNlNTk3LCAweDk0MTNiMzM3LAorCTB4YmQwNGE0OTcsIDB4Njk1Mjk3OTksIDB4ZmQxMjM2MWYsIDB4MzcyMTA2MzEsIDB4M2U3ODU5OGUsIDB4Y2YzMTY2YzIsCisJMHg4ODUzMzMzYiwgMHg3ODU5OGU2ZSwgMHhiNmI3YzI1ZSwgMHg3ZGRhZGM1YiwgMHgzZjBhNDM3ZCwgMHhkZDNlN2ZiZiwKKwkweGMwZjFjNjZjLCAweGUxMTNiOThlLCAweDA3Y2M3NjA3LCAweGRmY2UxNjdlLCAweDQxZDI5YzJjLCAweDZmOWIwMjc5LAorCTB4ZTAxYmRjNTQsIDB4NmJiYjY2ZmQsIDB4ZWJhNDBhYmQsIDB4N2Y3MGE5OWYsIDB4YzcyOGVhOGYsIDB4M2NmNjljN2MsCisJMHg0NGYzMWI4NywgMHhmN2JlNDUxYiwgMHhmNmEzOGI2NiwgMHg5YTYzZjIxOSwgMHhiN2Q2M2Q3OCwgMHhlZDk2ZTMxOSwKKwkweGFjMGUxZDViLCAweDM3ZDk1Njk3LCAweGFhZmI4OGNkLCAweDliYjFjYzE1LCAweGFmZjdhMGM1LCAweGJlNjA4ZjgwLAorCTB4ZTAzMmM3M2YsIDB4NjNmNDExNDksIDB4ODViYWUyM2QsIDB4ZWZiZTIwZDYsIDB4ZjAxNzdmYzEsIDB4ZGMzMjk0ZjIsCisJMHg4MmJmZjJiZiwgMHg3NzNhNDJlZSwgMHhkMjdhM2NjOSwgMHg4NWRkOGQ5NywgMHhiYzYwZDg2ZiwgMHhlNDg1Yjk4MiwKKwkweGYyNTZmN2FmLCAweDcyMTMyZmI4LCAweDU3MWNiYzYwLCAweDYxYjVkOWYwLCAweDg1ZWZhN2JhLCAweDViYjQzY2EyLAorCTB4NGNkMzdmZjgsIDB4ODBlYmFlM2MsIDB4OTFjNGNhMjEsIDB4YzY5ZmFjNDMsIDB4ZTRjZGMxZjksIDB4NmJkM2U3MWYsCisJMHhmYjBmZjg1OCwgMHg0ZmY3MGNhYiwgMHhmODZhNjk3MiwgMHg2MGVmOTg3MywgMHhiYmIzMjJhOCwgMHg4ZGVhMGVhNSwKKwkweDkxZmI4MzU3LCAweGNmMTVhZmFmLCAweDU0M2NmMTQyLCAweGU1ZTkyMzdlLCAweDY1Y2Q5ZDFlLCAweDM3M2U3MWQ0LAorCTB4YzNhYmEwMTcsIDB4OTRiODQ3YWIsIDB4NjBiNGI2MzksIDB4NDEyOWQ3M2YsIDB4ZDhjZGU2N2EsIDB4OWZkMzgyZGUsCisJMHhjOTRjZmMyMywgMHg5ZTAwYzY5OSwgMHgwMDk5NmIzNywgMHhjOGJmMjY3OCwgMHhmZmEzMGY5ZiwgMHhhYzJmZmY1YSwKKwkweGNjNzRmMTE4LCAweDI3OWVmNTIwLCAweGI5ZmZlNzg5LCAweDBlZDUzZDY4LCAweGNlOTc1OTNlLCAweGMyMmU3YjMzLAorCTB4Y2YzZjI4ZjksIDB4OGI3NGQwYzYsIDB4YTk5N2ZlZjgsIDB4ZDc5NzQ5NTUsIDB4MzAwZjNjYmIsIDB4ZTVjZjRiMjUsCisJMHg4NzFlMGNlMywgMHhhNjZmOWM2ZCwgMHg3MTQ2ZTViYywgMHg3ZDUzMDMwZiwgMHhmMDhjM2ZmOSwgMHhjNWI4YzhhZiwKKwkweDdmMzYwNmJiLCAweDQ2ZmQ4YzVmLCAweDA3YjcxNjRhLCAweGZkYzBkY2U2LCAweDFmMjI4ZGMyLCAweGNjNGY3ZTQ3LAorCTB4YmZiMjdlZTIsIDB4Mzc3YjRlNjQsIDB4MWUzZGVjOTMsIDB4OTQ5ZGZkNmYsIDB4NDhkOTIzNWYsIDB4ZjIxMTVmOTQsCisJMHg1ZjI0OGZlNSwgMHgyNzhlZGZjYSwgMHg4NWRmYjQ3ZiwgMHgyOWU3OTlmYywgMHg0MGJlZDAzNiwgMHhlZjI5MjFjOCwKKwkweDY4ZWYyMmJkLCAweDEwMThmMzAxLCAweDFlZTIzZDRmLCAweGFiZTVhMzk1LCAweGNjZGQwZTQ4LCAweGY3ZmVmNDdjLAorCTB4MDBmZjNjMTUsIDB4ZmQ4MGQzMDgsIDB4NmI0MzM0ZGQsIDB4NmFmM2NkM2YsIDB4OGZjZjM3Y2IsIDB4M2UzOGFmYjYsCisJMHg3YzBiYjhlNCwgMHhhNDczZWZkYSwgMHg2YjQzM2M5ZCwgMHg4N2ZhMmYyNywgMHhjZjQ5OTJhZiwgMHhmZWEyZmM2NywKKwkweDNlNzBlMGQyLCAweDNlNTQ2MzUxLCAweDI3Yzg4MzUxLCAweDNjMmFlYzZhLCAweDRmOTExNjk0LCAweGYzY2RkOGQ0LAorCTB4YWViYTFhODksIDB4ZWRjNDRmOTQsIDB4YjAyOWFmMjksIDB4ZGUyNGUzMWYsIDB4ZWM5NGQyNWEsIDB4NzI3ZjkxMGQsCisJMHg4YTRmZjMxMCwgMHhhZjZlNzRjMiwgMHgwYzNjZjNiMCwgMHhhMmJjYTFlNiwgMHhjZTk1ODcxYywgMHg4YWVhYjQ1ZCwKKwkweDlhZGI4ZmM4LCAweGRkZjhkNzY4LCAweDU1NzdhZWI3LCAweGJmZTkzZDYxLCAweDQ4NDNmOTk1LCAweGMzZjZiMTM3LAorCTB4NWY3YzU5ZDksIDB4N2VlMTQzYjMsIDB4MzMwMmZmNzQsIDB4MDU5ZDNiZWQsIDB4YzE1YzRkNWUsIDB4ZDFjNzY3YTksCisJMHhhNjZlZjhhZiwgMHgzZjI3ZDY0YiwgMHgyZjgzMGVjOSwgMHgwMTllMThhYiwgMHg4OTc5ZDE4NSwgMHhiNjdhZjZmZSwKKwkweDUxOTBmYzkxLCAweGVhOTljYTcyLCAweDMzODAzOGE2LCAweGY1ZjkyYzY5LCAweDkyMTc3NWU3LCAweDJjZDk5MjNmLAorCTB4Yjg0YTYxZWUsIDB4ZGI3Mzc5ZmYsIDB4NjllYmNjNTUsIDB4OTc1NzZlZWMsIDB4Mzc3NGMyZGIsIDB4NDNlYzRiMzYsCisJMHhmNDhhY2NhYywgMHg3YmQ3ZWZkYSwgMHhiZDdlNDRjZSwgMHgzMGI3OTM2NCwgMHgxOWQ3ZGEwYiwgMHg4YmJmZTQ4MywKKwkweDFmN2E1N2EwLCAweDJlZGU1ZjRmLCAweGUxNTBjNWU4LCAweGU2MDJiMDVkLCAweGQxOGVmYmQ3LCAweDBhNmJmYjhkLAorCTB4Y2ZmZjQxY2MsIDB4N2U0Yzk0YmYsIDB4MjMwZTc1NDksIDB4OWNiMWI1M2QsIDB4ZjQ1ZTkzY2IsIDB4M2UzYWMxOTMsCisJMHhmYWY3ZTY0ZCwgMHhhNDY2YWM2YywgMHg0Y2E3Y2Y1ZiwgMHhjNTVlM2EyMywgMHhlODNkODcwMiwgMHg3NDA1ZGI0NywKKwkweGQyY2Y3OTE4LCAweDhlYjk2ZDFlLCAweGE5ZmU5MDc1LCAweDNkMDA2NjdiLCAweGYyOTQ3YzkzLCAweGY0Yjk5ZWI4LAorCTB4NzQxYjhjMDYsIDB4YTFiM2RiNmEsIDB4Mjg1YzM5NWEsIDB4YmNmMTQ3ZjQsIDB4ZmY5ODJkYTksIDB4ZjJlM2FjNTAsCisJMHgwZjc3MmQ5MSwgMHhmNWZiNDM5YSwgMHgyYzRmOGU0NSwgMHhhMTdmNzIyOCwgMHhlYmFlY2U1YywgMHg3M2QyOWZiNSwKKwkweGExN2FlN2ZlLCAweGFkMWZmNDU0LCAweDNkODU0YWJmLCAweDE3ZTQxOTM3LCAweDdkYTU2ZmVlLCAweDdjYTlmNTA2LAorCTB4Y2ZhZGQ3NTAsIDB4NTllNzg1ZDQsIDB4YmI0OWRhMjIsIDB4ODkwYmVhNTAsIDB4OGMwOWYyYWYsIDB4YmJiNTc5ZTEsCisJMHgxYTdjODRiMiwgMHhiZTIwODZjMiwgMHgxM2UyN2ZhMSwgMHgyOTU4MzcwNSwgMHhmNzFmYmZkNCwgMHhmMThhZDc4NSwKKwkweGE4ZmMxZTgwLCAweDczM2FmZGJmLCAweGIzNmJlOTAwLCAweGQyZmE0NGQyLCAweDNjM2ZmNjhjLCAweGQyM2UyYWI3LAorCTB4ZTM1ZWZmMGIsIDB4NGM3ZDIzZDcsIDB4ZGQzNzRkNjQsIDB4OTkyNmY1MDAsIDB4YjcyOGFjN2IsIDB4MzFmZTRlODAsCisJMHg1ODVhN2U5MiwgMHhhMjlmNmYzMCwgMHg3ZWZhMjNhMSwgMHg5OGVkZjkzNiwgMHg1YWY1MjQ3NCwgMHg5ZWRjZjdmMCwKKwkweDc0YmNjNTk5LCAweDBmZTc5M2NmLCAweGE4M2FlZWRjLCAweGQ4MjY3ZGYwLCAweGVlZDEwNzlmLCAweDkzMzc1YjdhLAorCTB4MmMyNjY0ZTgsIDB4Mzk1NWViMDMsIDB4OWU5ZmY4YjQsIDB4ZGY0NzJkYTksIDB4NWFkMGM1MGYsIDB4NDg3NDQzMjgsCisJMHg5YzU0MDY3OCwgMHg1MWJkZjQ0ZiwgMHg5OGY3MjkxZSwgMHhiM2U1ZWU1NiwgMHhmOGRlNzhhZiwgMHg0MjNmYzM5NiwKKwkweDFkNzU4M2ZmLCAweDBlZjY4OTFiLCAweDhmYzRhYTU4LCAweDI3YjBmNGQxLCAweGI3OGY3YmViLCAweDExOGFjOWVjLAorCTB4N2UxNWU5NmYsIDB4Njg1ODZiZTUsIDB4NDBjYTMzZTUsIDB4Njg3ZjNiN2EsIDB4ODIzMzNlOWQsIDB4YmM3ZjI1MmUsCisJMHgxMzc5ZTA2YywgMHhhZTNjZWJjYSwgMHhjNmNjYzEzNSwgMHgyNTJlMTEwNCwgMHhmOTI4ZmZkYywgMHhkM2E0MWFlMywKKwkweDk1ZmQzMDk0LCAweGE0ODdmNzg5LCAweDA2Y2MxOTdjLCAweGQ3NWRiZDIzLCAweDAxZWEwOTY1LCAweGJmYTI4NTNmLAorCTB4OGFmZTkwNmIsIDB4ZGM4OWY2YzIsIDB4MTg0Y2I0NzcsIDB4OThmOTY3NDAsIDB4NGNmNjBlMTcsIDB4YjQ5NWQyMDEsCisJMHg4ZTk1OGE0ZiwgMHhmZGU3M2MxNiwgMHhiNmY3NGJmYywgMHhlODIzN2NlMCwgMHhjMzg0MmRlYSwgMHg4YWU4MDU1OSwKKwkweGY0MDM2YWZjLCAweDE0N2JmNmFkLCAweDRiZmM0OWRkLCAweDM1OWNiYTdiLCAweDZlNjc3ZWQxLCAweGMxYjNkNzAyLAorCTB4Y2Y0OWRiZWEsIDB4YmEyNGI4ODIsIDB4YTcwZTczN2IsIDB4MjFlNjJhYmIsIDB4NWE2NzJiYmEsIDB4NmIzNGE5N2EsCisJMHgwOTc0ZDFjYiwgMHg3NGI0ZWEyMywgMHg4YmJhMjNlNywgMHg3NDc4ZDdhNiwgMHg0ZWU5MTgzNywgMHgyYmQ0ZGJlYSwKKwkweDQ4ZTdkZGQzLCAweDhmYzVkZjc3LCAweDNlZWU5MDM5LCAweGE3YzY3MmNmLCAweDkzN2E2OGJiLCAweGM1OWY2Y2YyLAorCTB4NzU3Njg5NTEsIDB4ZmE0MjhkNjMsIDB4YTE5ZGY4YTEsIDB4NTExZTU4MmQsIDB4ZjY3NjRmOWYsIDB4ZDkzNzY0YmUsCisJMHhmYzRkOGRkZCwgMHg0NzhmNDk3YiwgMHgwNTMzNzk4ZiwgMHg3Y2Y3YzU2YiwgMHgxYjk2MjU2ZiwgMHhlODc3YzFkNywKKwkweGNmMThmNGJhLCAweDBmN2ExOWFiLCAweGExYjg1ZWZmLCAweGJmYmMwZGU5LCAweGRiY2ZkMWEwLCAweDMzN2E3Y2JmLAorCTB4NmMwYTg3OWQsIDB4ZGJjYmVkMTYsIDB4ZDhkY2IxMmEsIDB4OGE3ZmRiY2EsIDB4MzFhYmFlNzEsIDB4ODJkMDJkYmYsCisJMHg5NmRhYWZlZiwgMHg2ZmRiZTZlZiwgMHgxMTRmZDc2ZSwgMHgzY2E3ZGRlYiwgMHg2YmI1MDZmNywgMHgzZjZlZWRlMywKKwkweGU0NjA0ZTZjLCAweGZhZjZlMDI3LCAweDI5Y2ViMTY0LCAweGQzM2FmOGJiLCAweDg2N2ViZTNlLCAweDQ1NjNlODBiLAorCTB4YjllYzlmOWYsIDB4NjU3NTc0NGYsIDB4ZWNlMmVmMjQsIDB4YjY5NWNiYjMsIDB4NDc0ZTdjMWMsIDB4YmM0N2E2MzksCisJMHg0M2Y1NWJiYiwgMHgzNzc0MWM3OCwgMHgzNjc1NzEwYywgMHhmOGM4ZDNmNywgMHg1NDI5ZTYyMSwgMHg1NzE3ZDg0NywKKwkweDQ0M2I3MzY3LCAweDYxNGY0YmQ2LCAweGZkOGQ3ZTc0LCAweDcyZmU0ZWNjLCAweDNlMGNkZjE5LCAweDA3ZDQxNGM0LAorCTB4OTc2MTQ2YjgsIDB4NGU3NzhjYzQsIDB4YmIyMjY4MmYsIDB4MTk2MGZhNjIsIDB4NGJhOTBjZTcsIDB4NGJjMmRjNjEsCisJMHhlNThiNGY5ZiwgMHhlNmNiMmE0NywgMHg5MTI5ZjNmNiwgMHhkN2RmMjE3NywgMHg0ODc1ZjIwNCwgMHg0ODkwZmIxNywKKwkweDkwZjBmY2U4LCAweGRiOWVkMDc3LCAweGU3MzRjYzk3LCAweGYzZTVmNmRjLCAweGJjZWNkNGYyLCAweDAxY2Q2ZTdmLAorCTB4NTQ5YWVhZjgsIDB4ZTU4YmY3YmMsIDB4ZjJiNzk0MjksIDB4NGMxNjFlODMsIDB4ZmYzODFjNGEsIDB4MWEwYjJhZTksCisJMHhjZjhhMGYyOSwgMHg1MThiNjU3ZiwgMHhlNWMyNTdkYywgMHgzZjgxM2NkYSwgMHhkMTE4NjkzNiwgMHhhNzgxNWNlZiwKKwkweDE3YTE2Y2VhLCAweGNhMzE1OThiLCAweDZmMDI3OWE5LCAweDE5MzczNDNmLCAweDMzNmViZWI4LCAweDc5OGZjOTQ0LAorCTB4MWUzZjI4ZDksIDB4NmJjZjZiOGUsIDB4OTdjOTQ3YmYsIDB4NGFlZTMxMWEsIDB4NjJhZmM3NjEsIDB4ZmQzZmU0N2QsCisJMHhhN2YxZDg0NCwgMHhmYzc2ZTYxZSwgMHhmZTQxZDY2YSwgMHg3MTlmZGVkMywgMHg5NjFlYmUzYiwgMHhlZDEyZjQ4NywKKwkweGFiZGRhZDA3LCAweDY4NzdkNzJkLCAweGRlYTAwZGNiLCAweGFlYzZmZmIxLCAweDg2MzNiOTI4LCAweDFmN2JhNWZiLAorCTB4M2Y0MzJmYWUsIDB4NzdjZWNkNjQsIDB4MjM1ZGZmYzgsIDB4MmI0MDRjZTUsIDB4ZTc0MGMwNjcsIDB4NTFhMWU2NzIsCisJMHhkNmZhYmZlNCwgMHhkODE5ZTNmMiwgMHhmMjY5OTVkNSwgMHg3NmM5ZWY0YiwgMHg1ZTc3Zjg0NiwgMHgwZDJlNzllNCwKKwkweDdhMTFmYjhjLCAweGMxNmYyM2VkLCAweGQyOGIyYzdkLCAweGE1NzJkMTRmLCAweGU5MTVjODUwLCAweDViZjI5MGZmLAorCTB4YzY0MjliY2EsIDB4NzdlYzE0ZjUsIDB4OWI2MGYxZGYsIDB4ZTFlZjNiMjgsIDB4YzRhZmExNmMsIDB4NGRmYTRkZmUsCisJMHg4ODU0N2RhNCwgMHhkN2QyMTFmNiwgMHhiYTIyMjZhOCwgMHhiZjcyN2ViMCwgMHhlODQ3ZDI2ZCwgMHg2NjI1MDVhNSwKKwkweDE5OTE3YmM0LCAweGE2ZTExYmY4LCAweGQ5ZjU4ZGI3LCAweDY4ZjFmNDM0LCAweDgzZjdlNWY2LCAweGY0NTFlZmRhLAorCTB4MGI2M2Y3MjMsIDB4ODRkY2ZkMDUsIDB4ZmYxODE4OTEsIDB4YjgxZjcyMGYsIDB4NWNjZmQzOGEsIDB4ZjQ4NDNkZTYsCisJMHg5Y2Q1ZmJmMywgMHhmMGJlZTQ3ZSwgMHgzZDAzZWY5YiwgMHhhMDdkYzhmYSwgMHhkZDdlNGZkYywgMHhkZDNmNjBmZCwKKwkweDg2M2VjMDU4LCAweGU5NWNiMWU3LCAweGZkZjFlMDE3LCAweDQ1ZDM4NTQ2LCAweDNkZGY5Y2ZkLCAweGYyYzJjNTU2LAorCTB4NzMzMzY4ZTIsIDB4Yjk3MDg2YWIsIDB4OGNjOWE2NjUsIDB4MDMxNjk3N2UsIDB4OTljZDJmZGYsIDB4ZDJkOTdlZjUsCisJMHhiNDEzZjkwOCwgMHhiODQwMWY5NywgMHhmOTI3NmViMSwgMHhkYWFkZWI3NywgMHgzZDJiMzY3MSwgMHhmNzExZmQ3NywKKwkweGM5NWE4ZjU1LCAweDA4ZTE3NGFmLCAweGMyZTU5MzIzLCAweDBmOTQxMWFlLCAweGM3ODE5OWZlLCAweDZlN2NlNTViLAorCTB4YjVmN2JjM2YsIDB4Yjk1YmQ0MTAsIDB4Y2M2Mjk2ZWUsIDB4MDI1NWE4MmYsIDB4YjdjMWQ2MmYsIDB4NzdiZWFjMGYsCisJMHg3NTZiYmY5MSwgMHg2NzJmNzE0MSwgMHhlNDI3YzUwZiwgMHhiYWZkZjFiOCwgMHhjNmM3OTI3ZSwgMHhmNzNmNWMwMywKKwkweGRmOTQwOTI5LCAweDQ3ODdlZjBiLCAweDM4ZmVlOWM2LCAweGRjZWZjYjg4LCAweGI4MDdkZjRjLCAweDViNDdhOTFlLAorCTB4ZjgyN2YzZmEsIDB4MWIzMGI0MTMsIDB4YTdjZTEyOTQsIDB4NzA0ZGU3MDgsIDB4OTg1ZmNiN2YsIDB4MTM3OThhZTcsCisJMHgwNGUyMjMxYiwgMHhiZTY2M2VkMCwgMHhjZjIxNzlkYiwgMHgwMTcyNjE0NywgMHhiYTY1NjdjYywgMHg3ZmQ3MTdhNywKKwkweDRmODVjNDRhLCAweGE5ZTIzODg5LCAweGZjNTcxZTQ0LCAweGZlN2Q3ZjdiLCAweDdhZTIwZGI0LCAweDNiODg5NGU4LAorCTB4YzZkMTRhOWUsIDB4NDRiZDY0OWIsIDB4NmNkOTNjZjEsIDB4NjAzNDZlZjYsIDB4Mzc3OTllYmMsIDB4M2Q3MGZlODIsCisJMHg3Y2EyNmE2NCwgMHg1ZjFjNDU5NSwgMHg2YjI1MmZiZCwgMHgxYWM4MTFlZSwgMHgxMDZhM2U1NCwgMHhkMzk5ZmJiNCwKKwkweGUzMDQxZmFiLCAweDllZDM2ZjJjLCAweGY3MTVlYTgzLCAweGJhMGFmNmRiLCAweGE3ZjBiNWU5LCAweDUwNmIzNzFjLAorCTB4ZDc2YzI4ZjUsIDB4YjNkZjgwYmIsIDB4Mjg5ZTVmZGEsIDB4YmZlYTVlY2IsIDB4YzkxMGJhZjcsIDB4OGZmMmZlYTMsCisJMHgzYTljZTI0MiwgMHhmOGM4OTNmNywgMHg2MWY4YmM0MCwgMHhmYTMwYmM3NCwgMHhiYzc0Njk5YywgMHgzN2U0YjE3ZiwKKwkweDI0NWZlZjExLCAweDZlZTJkNGU0LCAweGQ1Yjg2ZjFlLCAweDgyMGYzNmNjLCAweDY3NzViN2VmLCAweDI2YjhmYzUwLAorCTB4MTM1YzNmZDEsIDB4YmY1YmY3ZWYsIDB4YTQ4NzllNTEsIDB4OWVkY2RlY2YsIDB4Y2ZmOGY4ZmUsIDB4ZjVlM2UyMjIsCisJMHgyZjVhM2UyMiwgMHg1ZGE5ZDdkNywgMHhjZjAxNjRkZiwgMHgzZTNlMzFlZiwgMHg2MDczOTA3OSwgMHg5ZjNhM2M3YywKKwkweDMzYjQ0NWUyLCAweGFjM2M2MTBjLCAweDU1Yjg3MDcxLCAweGQxMmFlYmU5LCAweDM5NjE3YzRmLCAweDM1ZjczY2EzLAorCTB4NDE2YjJkNmYsIDB4MmQ5YWYyM2YsIDB4NjE1NTk2ZTIsIDB4MzgwYmQ3NzcsIDB4ZDM5NzViYzcsIDB4OGQyZTYzYWIsCisJMHhiOTgxM2ViZiwgMHhlNTkzZDYyMiwgMHhjOTk0ZDE0YiwgMHgzM2M4OGY5MiwgMHhhZDkzNTQxZCwgMHgzNGRiOWY2OSwKKwkweGYwN2Y1MzQ0LCAweGVmOWE1MWJhLCAweDRkMjJmZWY5LCAweDFhZjVhMGI5LCAweDZkNjFmZDRkLCAweDg4ZjI5YTE1LAorCTB4ZWE2YmQ3OWQsIDB4NDkyMWIyMTcsIDB4YTIzYjZmZTQsIDB4YmIxMjVmNDcsIDB4ZjM0NzMwMmEsIDB4ODVkZWY0N2QsCisJMHhiMjlmZjY5YSwgMHhhMDkzMWRhNiwgMHg3YjQ1YTc1ZSwgMHg3YmYzMzMyZiwgMHg4NTk0YzY3YSwgMHg3NmM3YTlmMywKKwkweGMzZjRkNTJjLCAweDI5NTA0YTgyLCAweGY2MzNkZjBiLCAweDc5YTdiODk5LCAweDg3OGYwZjc5LCAweDVhYjVkZDVjLAorCTB4YmVhZDRlMzMsIDB4MWQxOGYwOGUsIDB4N2Q2MjJkZWYsIDB4MDg2ZTM3ZTQsIDB4MWIyMGVlMjgsIDB4ZDU1ZGZmMTgsCisJMHhhZWVkNGVkNSwgMHg3OGM4Zjc2NCwgMHgyMjQxYzZjOCwgMHhiMmNkOTdkZSwgMHhkMzQ3NWQzOSwgMHhjM2VjOGQ4NSwKKwkweGU0ZjRiYjBiLCAweGMzNjQyYzdmLCAweGYwNDQ5YTFmLCAweDZiODBiMDMyLCAweDMwMmVmZTIwLCAweGYwYmIxN2VlLAorCTB4Nzk4ZGRkOGMsIDB4YjViZmI3NDUsIDB4Y2E2M2U2OGMsIDB4ZGUwNWQyZDQsIDB4NWViOTE4MWYsIDB4NWQyZDQ4ZWIsCisJMHgzYTVhZGRkOCwgMHhhNWEwOWE0OCwgMHgyNzc4Njg4MywgMHhjMTc0YjQ3YiwgMHhjYmJmZjA0MiwgMHg4Njc1M2JjMCwKKwkweGI3ZmU2ZTk2LCAweGYwODFkY2UwLCAweDViZTE4NmI1LCAweDYyZDNkMDdjLCAweGJjZjFiODIzLCAweDk5OWY2OTM1LAorCTB4MWQxNDNkODQsIDB4NGU3NjkwZDcsIDB4YmJiMDkwNzAsIDB4MmUzMjNmNDUsIDB4OTNmMTU5YjEsIDB4NzcxZmQ1NWQsCisJMHgwYmNjMTA5YywgMHhkNTNkYTNlNiwgMHhjOTVmYjhjNCwgMHg2ZmU1MTA3YiwgMHhiZDI0YmYwYywgMHg5NDk3ZTc4ZiwKKwkweGMwOWI5ZDcwLCAweGYzMmQ2N2Y1LCAweDY2M2VmYzkyLCAweDkzYTRmZWUxLCAweDlmYzhhYmQ1LCAweDkxMzU5MmI0LAorCTB4OWNkOWZkZGQsIDB4ZThlZmMyZTksIDB4Y2E1NzdhYTcsIDB4OWY5MDE4NTMsIDB4OGIyOWY2MDAsIDB4MDZhZWQ3ZjAsCisJMHgxZmVmMWE4YiwgMHhkMmE3ODY4YSwgMHg3OGVkMDRhZCwgMHg0Yjc1OTg2ZSwgMHhmY2EzZTA3ZCwgMHhlZGRlMGYxNSwKKwkweDY4ZmY4OWE5LCAweDUxZTY1ZmVkLCAweGI0OTdlNTIyLCAweDEyNzhlNTg3LCAweGM5YWU1MjllLCAweDQ5YWM0YzcxLAorCTB4MTE3Yzg5OWYsIDB4YzhkOGU3MjUsIDB4ZDY5M2Y4ZTgsIDB4NDFmZDIzOWYsIDB4ZTMyMzhlMzIsIDB4OWJmZWQxNGMsCisJMHg1NWI4YmIwOCwgMHhjMWQyNzE4ZiwgMHhjZTc4MmRmOSwgMHgyMWUxZDhiNywgMHhlYjI5NjEzZiwgMHg0ZmRmMDViOSwKKwkweGE4YjQ3NzMwLCAweGI4YmZlMTJlLCAweDJmZmJmNThhLCAweDJiYWJlYWUyLCAweGYyNmZiNWM0LCAweGYyNDdhMTJiLAorCTB4NjViM2M2MDcsIDB4ZmY5NjFjN2MsIDB4ZjFhMTFmZjEsIDB4OGI5NWM1MjQsIDB4ZjJmMzk4ZjMsIDB4ZDNkMjI3MDgsCisJMHhmYmE2YmY0MCwgMHg4ZmQwMmJmOCwgMHg4YTk3ZDc1ZSwgMHgzMTMwYWFmNSwgMHhmZGRlMjIzZCwgMHhmNWEyMTJhNiwKKwkweDM2Nzk5MGZjLCAweDZmZGI5ZTQ1LCAweDZlZDMxZDYwLCAweGU4MzI3ZjIxLCAweGE3MjdiYzQ5LCAweDU4YmJmYjkzLAorCTB4YWMzZGI0NTcsIDB4MDc1OWJmOTIsIDB4YWZiYTQxMmIsIDB4ZGU3MTExNjUsIDB4MmE3N2YwZmMsIDB4NjU5NjA3ZWIsCisJMHhlYzk1ZDIxZSwgMHg4MmYxYTc4OSwgMHhlMGEzY2E3MiwgMHhjODRjNTNmOSwgMHg4Y2ZmYjk0MSwgMHhmOTkzY2ZiNywKKwkweDRmN2VmMjE4LCAweDk0NTQ3Nzk5LCAweDFjNzVmODIzLCAweDAzZmQ4NzFiLCAweDk0ZTU5NWJmLCAweGY4MDE3ZmEyLAorCTB4YzdlNDg5NTMsIDB4ZmEyNTNjZmUsIDB4YTMxZjgwM2UsIDB4MzFmMzJmZDYsIDB4ZjIxMmY2ZjQsIDB4NWM4YjJkMWIsCisJMHg4NzgwZDdlZiwgMHg5YzdlNWJiNCwgMHhjOGU5ZThjMywgMHgzZWIzZDE3MSwgMHgzZDZmYzRlMSwgMHg0N2E0YjlmOCwKKwkweDY4ZGEzZjkzLCAweGZhMGQwZDg0LCAweDc5MTQ1ZTEzLCAweGJiNWExZDgxLCAweDlkMWM5NmZkLCAweGY3ZGYxYjgwLAorCTB4ZjE1ZTA5NWMsIDB4ZjhmMjIxZjEsIDB4YWViZTNlMDQsIDB4ZjhmMzI2MWQsIDB4MGM5NzFjMjQsIDB4MGQwYWZiODQsCisJMHg4ZmY3ZmI1YywgMHgxMTVmNzBmZCwgMHgyZTEyZWUwYiwgMHg3ZTdiNGFlNywgMHhkYmQyZjg4MSwgMHhiYzIzYTU4ZiwKKwkweDU3N2FhNjE3LCAweGUzZGNmZDYzLCAweDVkMTQ0ZmExLCAweGZhNTU1ZTc4LCAweDdiODc5NGIzLCAweGU3NGY0YmExLAorCTB4ZTNhZTFhZmYsIDB4MjVlMWIwNzIsIDB4ZjM4Njg5M2QsIDB4YjM4YTI2ZGQsIDB4NDFiZDc0ZDYsIDB4NjZkOWUxNzYsCisJMHhmYzA2YjQxMCwgMHg3MjE4MGNiZCwgMHgwOGZjNjVkOCwgMHhiNzhlZjA1MSwgMHhkOWViOTI0ZiwgMHhlNWY2MjM5MCwKKwkweGVmMzJmZDYyLCAweDM5YjlkNjA3LCAweDQ3NWU2NjI3LCAweGRmYjQxYzNmLCAweGY0YWExYzA1LCAweDFjZjA5MjYzLAorCTB4OTJiZTdmNTksIDB4NzkxNzk3ZGEsIDB4M2FmNDVmNWYsIDB4ZmU3ODcyMmEsIDB4ZjdiMzI5ZGIsIDB4YzNlZmVjM2UsCisJMHhkODFkOWM5ZSwgMHhmYmJlOTU1ZiwgMHg2N2MyMzY3MCwgMHhiYmU3NDJhZCwgMHg3OWY4OThhNiwgMHg1ZTcxMmNkYywKKwkweGM5YTg0MjZmLCAweDMzOTllNzhkLCAweDY2N2RmODczLCAweGY3YTQ3ZTIzLCAweGZkZjkxYzYyLCAweGUwYTY3N2I1LAorCTB4ZmZkOTM0MzksIDB4ZTc0NzQ1MDgsIDB4ZWU3YjE5NDcsIDB4YzEyYzdmODMsIDB4MzcyMmU2ZjgsIDB4ZDhiZjZmZGUsCisJMHhiYTJmZWUyNCwgMHgwMDJjMWFjYiwgMHg5MWJhZjIzOSwgMHgxODY1NDdkZiwgMHg2NmU3NDRkMiwgMHhlNGY1OTJmYSwKKwkweGIzZDM0Y2Q3LCAweDcyNzc0OGE5LCAweGFkYmNmMmRlLCAweDAxZjc4ZjdjLCAweDdjYjE1ZTYwLCAweGFmYTVhNTNmLAorCTB4N2JmYTBkNzgsIDB4NzVjODNkMDQsIDB4MmJlY2E5NGYsIDB4ZTE4NWIyNmUsIDB4YTMzY2YzMmYsIDB4ZjgyNTUzZTEsCisJMHgxYjQzZWU0MywgMHhkMDViNWVmMCwgMHhiY2NkZTdiZiwgMHg2ZGFmN2QxYywgMHg1ODc0ZmVmZiwgMHhmNjM2M2RmZiwKKwkweDgzN2ViOGM4LCAweDFlMzQ5M2M1LCAweDZiZGM1MWY5LCAweDI3ODcxN2ZiLCAweGE0NzdkZjg5LCAweGJjZjZhN2JkLAorCTB4YmY5N2I3YzgsIDB4ZGVlZjEyNTMsIDB4NTFjY2ZmOWIsIDB4ODI3Yjk3YmUsIDB4Y2I4NWU1ZTIsIDB4NzA3OGZmYmMsCisJMHg5OTU2NDg2OSwgMHg3MzlkMzU3YSwgMHhkZWFlNWVmNywgMHg4ZmFkZmYyYiwgMHgyOGJlZGZiOSwgMHhkM2RmZjdiZSwKKwkweGJjZWM2YWY5LCAweGNlYjE1ZWM1LCAweDg4NjE3ZTcwLCAweGU3ZjcyOWNlLCAweDdlNTRiZTJkLCAweDFhNDc3YmQ5LAorCTB4MDhkMjNlZjAsIDB4ZjZiY2M4MzgsIDB4YjQ4ZmJjMDYsIDB4ZDBiZjQ2MzgsIDB4ZTU3NmNiOWYsIDB4YzRhYTg3N2IsCisJMHg4ZjMwMWFiYywgMHgzZGYyMzUzMCwgMHgzOGYwYjdhNywgMHgzMDJmMjI2OSwgMHhmYjdjODg5NCwgMHg5ZDNkMmVjYiwKKwkweDExZTVmZmUzLCAweDMxZGQ4Y2RkLCAweGNiOWI5ZGU2LCAweGE5Y2EzMmUxLCAweDBlOGQxZjEyLCAweGUzYjVmYmYyLAorCTB4NzllNzkzZDUsIDB4ZThkOGI5ZTQsIDB4ODQ1Njc1ZjksIDB4NjNmOWM1NmUsIDB4ZjFhYzcyOWUsIDB4M2Y3Y2I5MWMsCisJMHg5OWRkZTcyYiwgMHhmMGQxZjFjMiwgMHg5YmRmODk5YSwgMHhmMjdjZjJhYSwgMHg0YWQwOTRjZSwgMHgxNjg3MTNlMiwKKwkweDFlMDRjM2NmLCAweGU1MGZhZjNiLCAweDk5YjJiOWQxLCAweDhmMTBlZmRjLCAweGZhYTcyNjFlLCAweGM4YmU1MWNhLAorCTB4ZDRjYWVlN2IsIDB4YzExMWM1MjYsIDB4ODdhMjU3OGYsIDB4MWFmNWRjMzAsIDB4YmI4NDBlYmMsIDB4N2VjYmJlOTEsCisJMHg3YzE1MWY0ZiwgMHhkYzM2M2NjYiwgMHhmYTExMmRjZiwgMHg1YTllYzk2ZSwgMHg3ZWU1ODdiMiwgMHgzZDRlZjRlOSwKKwkweDY2OWM2ZmU1LCAweGJhNzJhZTNjLCAweGQwZmRhMTRkLCAweGViNjMxZjUyLCAweDdjYWQyZTQwLCAweGFhMzM3OGEyLAorCTB4YjA5OTI1YWUsIDB4MWVmZTE0OTYsIDB4ZTk2NjFmN2YsIDB4YmFmOGE4YzYsIDB4YmQ0OTVmZDgsIDB4YmU1ZmM3MmEsCisJMHhkNzE3NmI0ZCwgMHg0NjdmNmRiMCwgMHg1MWY0ZTlmYiwgMHhiMDU2M2YyZSwgMHgyYjNmZDIyNiwgMHg1N2Y2ZDAxZiwKKwkweGE3ZDY2N2IzLCAweGJjZThjZjM4LCAweDhmYzIxMTgwLCAweGVjNTcyZDM3LCAweDE5NThjYTU3LCAweDRmMzU4ZmVhLAorCTB4OWZjNDZlN2MsIDB4MTdjNzg5NjAsIDB4NDM0ZmZiZjgsIDB4N2RkZmYxODcsIDB4OGVmZTI3YzIsIDB4Yzk2ZjNlMDgsCisJMHgxNzIwZmNmNSwgMHhmMmVmM2VmZCwgMHhmNWNlYWVmOSwgMHg3ZjQ1YzljZCwgMHg3ZTdjYmJjOSwgMHg3MDJlZWExNywKKwkweDhkMmJiMzNkLCAweGZkOGI1YmY0LCAweGZhZmY5MjJlLCAweGRmZmU1Y2MxLCAweDAwMzVmNzhiLCAweDcxMjY0YzljLAorCTB4NDlhZWJhNmYsIDB4NGRmNjQ4OWYsIDB4NDNlY2U4ODAsIDB4N2U3MzFkZTcsIDB4MjY3NzY1NDAsIDB4ZDNkYTQzZjIsCisJMHhiZjYwNjdkMywgMHgxZWFkYTdjZSwgMHg3MmQ2ZGY1YywgMHgyZmZhMjE0ZiwgMHhmM2YzNTZiNiwgMHg4ZjEzNjZhMSwKKwkweDM5N2UwN2RmLCAweDUzODYwMGYxLCAweGFmNmM3Njg2LCAweGEzOWQxNzQwLCAweGZkMTA3ZjdiLCAweDNmYmFhZDQyLAorCTB4OThiY2M2MWYsIDB4NWYzY2M5ZDYsIDB4ZGExNzVkMzIsIDB4M2M2MjI4M2YsIDB4ODk5MDM1YTcsIDB4NjhlNzdkZjEsCisJMHg5YTRlNmY3ZSwgMHhjYjkwYmNiZSwgMHgzNjI3NmU3ZiwgMHhlODVjNWMwOCwgMHg2MjdmMjAyYSwgMHgxN2ZhNDFhZiwKKwkweDJlNzQyYzNiLCAweDJlZmY4ZWFiLCAweGYxYzYyOGM2LCAweDcwZWFmMzJmLCAweGYxNzY5MTBlLCAweGY5YTY2NmQ5LAorCTB4MWQ1MTg2OWQsIDB4NDg5MGQwNGEsIDB4M2M1MGE4ZjcsIDB4MzA0MzZlYTgsIDB4NjdkNDE2ZmQsIDB4NGYxNGE5NGYsCisJMHg3YjRiZjM5MywgMHhlMzAyYWIzZCwgMHhkZDhmNTI2NiwgMHhiZmI4MzhhMiwgMHgwYmZkZDg0ZCwgMHg3MWUzZmM5OCwKKwkweDllODJmOWI3LCAweGZmN2IwODE2LCAweGY3ODcyYjE2LCAweGMzY2VlNjUyLCAweDJjY2QwYjc2LCAweDc2YWMwNzUxLAorCTB4Mjk0NzY1NGIsIDB4OTBkNmIzYWQsIDB4OGM4NTc2OGMsIDB4NDdiN2M1MWYsIDB4MWFjOWZiNjIsIDB4ZTdlNzYxN2UsCisJMHhlMWJlOTU5ZSwgMHhmNDE5YzlkOCwgMHgzZjg2NWQ0MSwgMHg2OTNjODVkYiwgMHhmZmNmY2UxOCwgMHg4M2NjYTFiMSwKKwkweGQ3ODZjYWYxLCAweDMwZWZkMDQ2LCAweDNjNzgxMjk5LCAweDE5OTZlNDFjLCAweDg0M2ExMWVmLCAweGJkZDYxZWZhLAorCTB4Yzg4YjE1ZWEsIDB4NzM4ODBhNWIsIDB4ZDhkZWZjY2QsIDB4NDUzOTM5YzYsIDB4NzhmMTFlNzQsIDB4NzFmZmRkMWYsCisJMHgyM2NhMTBkZSwgMHg4NDc5MDZmZSwgMHg5MmJlYTYzNywgMHhlMDFmYmJmYiwgMHhkOTBkZWJiZCwgMHhmOTQxZDc2MCwKKwkweDc4OWZlZTc0LCAweDI1Njg0ODc5LCAweDkyOTkxYmRlLCAweDQ3OTc4OTc3LCAweDcyYzEzZTg1LCAweDZjYzI1ZTRlLAorCTB4NTY4NTE3MmEsIDB4M2UzY2ExZWEsIDB4NzE5NzkzMmYsIDB4MzYwNDBhMDMsIDB4NmNmMDZmMzUsIDB4YzkyZGRhM2YsCisJMHg4NzcwMmVjMiwgMHhjMzc3YmNlOCwgMHg5MTc0MjNjYiwgMHgxZTc3NThmZSwgMHg4NDY3Njc5NywgMHgzZTRjZjkzZiwKKwkweGMyMGU2ZGJiLCAweGZhZWM2NDdiLCAweGRlZDI3OTY5LCAweGM5ZjVhMzZlLCAweDJjZjZjYWY1LCAweGZmYmI3NjMzLAorCTB4OTU3ZTcyMTAsIDB4YzUzZGE3MzgsIDB4M2MyZDVhY2EsIDB4MDQ0ZmU3ZmUsIDB4MWVlYzFjM2MsIDB4N2ZjYmYxNDEsCisJMHhmZGUxNGRjZCwgMHg0Zjc0NDIzYiwgMHhmYTI3ZWM4ZiwgMHhiOGU0MWM3NywgMHg3YmZlMTVhYiwgMHhmMmEzZTc1OSwKKwkweGNiOTc3ZWJjLCAweGIzOGMyYmU1LCAweGVhMTljNjkxLCAweGU3OWJlN2UxLCAweGZlMjIxNGU0LCAweGMwYWE2ZjAwLAorCTB4YzlmN2NhOWIsIDB4ZDA3ZTdjZWQsIDB4MTNmZWZlMmYsIDB4ZjQ2Mjg3ZTgsIDB4MGFmYzFmZmIsIDB4ZTc4N2U3ZWEsCisJMHgyNzI3NGQxZCwgMHg1YWFiMzhjNSwgMHgyZmI2ZGM3OCwgMHg2OWU4ODBiOSwgMHhmN2RjNTU4YSwgMHhjNzVkYTI1MiwKKwkweDlmNmUzY2Y4LCAweGM1OTJmM2JhLCAweGFmMDkxZDc5LCAweDY5YzY4NTBjLCAweDA5Y2M3MDExLCAweGY2MzM5ZjBkLAorCTB4YWZmYmFmOWIsIDB4OGVlYjRiZmYsIDB4ZWYwNzk3YzAsIDB4YzVkODM5NmQsIDB4OWYxZTM3ZWYsIDB4ZjQ4NWYxYzcsCisJMHhlMDc2NDI5YywgMHg2NzdmNGQ3NiwgMHg5ZmI1NDdkNiwgMHhhZTVmMjhjMCwgMHhkYTgwYTUyMSwgMHg2ZmVlMmJkZiwKKwkweDYxZDlmNzk1LCAweGRjNzFmY2JiLCAweDU3YmI0NWJlLCAweGZjYzFhN2RlLCAweDFjNjQ1OTkzLCAweDhjZGVmZmIyLAorCTB4NzBiZjcxMGUsIDB4Mjg2ZjNhZmYsIDB4ODg3NGViMTEsIDB4ZWYyMjNhNzUsIDB4Y2ZlN2VjMzMsIDB4NzM3OTdkNjMsCisJMHhiOGU5MDNlZCwgMHhmZGZkZmUxZiwgMHhmZDEyMjk4ZCwgMHg1NjNjZjg2OSwgMHhmMWQ3Yzg3ZiwgMHgxZTU1NzJmMCwKKwkweDFiZGYyNzk3LCAweGEzM2NlNDVlLCAweGU3MGZkOWUwLCAweDc4NDlmOWE4LCAweGJiNTM3ZjIyLCAweDk0YmE1YTMxLAorCTB4ZjQxMWNjZjMsIDB4ZjNiZjgwMzksIDB4ZTI3OGU1YmYsIDB4YmJmYWQ5N2UsIDB4NzMzOGJlNzksIDB4YmViYWU5NjksCisJMHhmOTg3NWYzMywgMHgwN2RkYjIwOSwgMHgzNGEwYzA3OCwgMHgyMWJjMjdlYywgMHg3MzI3ZWM0ZiwgMHhiYzljNGU1OCwKKwkweDMzOWU2ZjQ3LCAweGRlOTE3ZmE2LCAweDdiMjdlZjQ3LCAweGQ5ZWZlNTkzLCAweGJkMWFmZDY5LCAweDM5N2JmZTRlLAorCTB4N2VmYzczZmUsIDB4ZmNhMzZiODMsIDB4N2E4ZjE4M2MsIDB4MTc2ZTE2Y2UsIDB4ZjJkYTJmZDYsIDB4MDM3ZTAyNjMsCisJMHg3OTdkNTRmZCwgMHg1MzEyYmYzOCwgMHgzYmY4ZjNjNSwgMHg0YWYzYWI1YiwgMHg3NzYwYWI2NywgMHhkYzU1MjQ5NCwKKwkweGE2ZTUwZjk5LCAweGZjOTNjNmM3LCAweGYxNTQxOTJlLCAweGYzYzgzZTc5LCAweGUwNGQ4ZjM1LCAweDdjNTc0N2RmLAorCTB4NzljYjA0M2UsIDB4OGE3OTc5MTMsIDB4Zjc5NDc5ZTcsIDB4OWVjY2I0NjAsIDB4MmJiNjE1OWEsIDB4ZDE3M2NjZWUsCisJMHgxZDRhZmFiOCwgMHg0MjY3NmJkZCwgMHg2M2Q2MDYyMywgMHhmOTQ0ZGQ3YSwgMHhmMWFlMTI4MCwgMHg1ZDI2MjU5ZSwKKwkweGJmZjNhYzUzLCAweDAzZDNmNGY3LCAweGMwNGNiZjhmLCAweDFmZDBiYTdmLCAweDIxMDVmYzI4LCAweGU4MmZlMzU1LAorCTB4Y2ZlN2U0NGQsIDB4OTJmZDVmN2IsIDB4OWJkY2Q3Y2UsIDB4MDc5ZjViZTcsIDB4NjdhZDFiZWQsIDB4ZjI4N2NkNmYsCisJMHgxNDA3ZWIwNiwgMHg2MDNjNTNlZiwgMHhjNjFmYTA4NywgMHg2MDhiNjBlNSwgMHhhZGQ5Y2FiZSwgMHhkODlmYjQ1ZSwKKwkweDI1NTliNzZhLCAweDE4ZmYwYWI4LCAweGYwMDdhOWRlLCAweGE3YjVlNTdiLCAweDBmODgzYzdlLCAweDRjNzljNWUzLAorCTB4ZjFhMDcyMTQsIDB4MTVmZGJmYjUsIDB4Njc4ZGM0ZTMsIDB4MWIzNDZlNmMsIDB4N2MzZjc2MjcsIDB4MTM1ZmRhMjcsCisJMHgxYmZlZGZiYiwgMHgzY2ZjYzNkNywgMHg0NGY3OWM5MCwgMHhmYmMyN2ZmNCwgMHg5YTI2NWQwOSwgMHhhYmVlYzRmZiwKKwkweDZiZmQ2MDU2LCAweDQwMmVlYmRmLCAweDQ0ZWViOTNhLCAweDQyYzUwNWIwLCAweDNlZmZhYmVmLCAweDg4MGU3MzQ4LAorCTB4N2NkOTdhN2QsIDB4MzlmMWI4ZDEsIDB4MDEzZjhmMDksIDB4MWUwODkzYTAsIDB4ZjhmMGU3M2YsIDB4Y2VkOWYyOGEsCisJMHgwZTZlOGYzYiwgMHg3YjU0OTM5MSwgMHg3OGVjMGFkZSwgMHg2MDVmM2I4YSwgMHg3YjhjNmUwOSwgMHhkMWZkNzNjOCwKKwkweGQ1ZTNkNTdlLCAweDdmNzgzZWIwLCAweDIwY2MxZjVkLCAweDcyOWU5ZWMyLCAweDI0ODIwY2QxLCAweGM5NjcyZTVjLAorCTB4MzlhNTcyOWEsIDB4Y2FiZjUzNGIsIDB4M2VmOWFmOTEsIDB4Y2QyYWYzM2QsIDB4NDJhZTk5ZjcsIDB4YzhkNjc5NGQsCisJMHgzN2ZhOWE4OSwgMHhlNTM1Y2JiYSwgMHg2YTY2MTNkOSwgMHhhYTdiNTdlYSwgMHg2MGMyZTUzNSwgMHhmMTdlYTY4NywKKwkweGY3ZWQyZTkxLCAweDc4OGY0YzYzLCAweDdlZWUzYTI4LCAweDI3YTU5ZjAzLCAweDJkOWVlNDNkLCAweDA2ZjRkNTNiLAorCTB4ODVmZTI3M2UsIDB4YWZkYTIzODMsIDB4OGVjNWNkN2MsIDB4ZjRiZGYwMzcsIDB4OWY5ZjQ3MmIsIDB4OWJlNjdlOTIsCisJMHgzMTgwYjZmNSwgMHg1MzM5M2ZiNiwgMHg4M2RmMDgyZCwgMHhmM2YxZDdhMCwgMHhmYjI1ZWY1MywgMHg5Mzc4ODBmZSwKKwkweGEwYTZhN2U3LCAweDUwOTAxOTVmLCAweDlmYjlkYjc1LCAweDVjMzJlZmUyLCAweDZlZmRjNDU4LCAweDk0MzExMWM3LAorCTB4N2YyNzZlNGYsIDB4ZDM0MzcxZTUsIDB4NzllNDdmYjMsIDB4ZjcyOGI5MDMsIDB4YWY5YmViYWUsIDB4OGI5NGY3NTksCisJMHhjYmJhY2QzZSwgMHgzYzI4YWFkOSwgMHg1NzI5YTFkZCwgMHhkNGQ2ZWUzOSwgMHg1ZWI5OWU5ZiwgMHg2YmE2N2RmMywKKwkweGI2OWUxNDRiLCAweGJhMzdjYTZiLCAweDUzYzI4ZTFmLCAweDllOWUxNDdiLCAweGY0OTc3Y2QyLCAweDVmZmMyZGRkLAorCTB4MGFkZmExYWYsIDB4M2Q0MjkzOWUsIDB4Yzk4Nzg4OTUsIDB4MWYwOGZhYTcsIDB4MmFkYTdhMTMsIDB4MWNkNzRmMTEsCisJMHg5NTdjMjBlZiwgMHgyODk1YmQwNCwgMHgzNDhlY2IyZSwgMHgyMGNmODFiZCwgMHhkZGIwY2JlYywgMHg3YTRjZTY4MSwKKwkweDkxNzY2YzFlLCAweGYzNzBlYmZmLCAweDY5MWU3YTQ4LCAweGZmZmJkMzc2LCAweGNmNDA5ZTY4LCAweGU4N2IzNTVmLAorCTB4MzNjZDlmZjksIDB4ZWNkM2Q5ZTgsIDB4NzM0NzY3YTUsIDB4YWU3ZmQ1MDcsIDB4Y2ZmYjhiYjksIDB4ZGRlZmZiNTIsCisJMHhjMWJmNDVjOCwgMHgwMWE4NWQ3OSwgMHhjMThlYzYyMywgMHg5ZTllNDk1YiwgMHhjNzlkMDg0ZiwgMHhlYjdmMDZmMiwKKwkweDM0MjBhOWVjLCAweDkwMWQ2N2YwLCAweDllMjA3ZjJmLCAweGZiNGYyZTQ1LCAweDFlMGU3ODYwLCAweDE5ZmRmOGNjLAorCTB4NDNhMzdmMjIsIDB4M2I0NDI5ZTcsIDB4MGZlM2Y0N2MsIDB4MzJlNmE3ZGUsIDB4MzdiZDY5YjYsIDB4MTgzYTdmMTMsCisJMHgxMzI4NjZjYiwgMHg5MGY3ZTliMiwgMHg5M2NmYmMxZSwgMHhhOGIzZDhjMywgMHhmN2JlZTg0YSwgMHhiOTYzNjcwNywKKwkweGU3OWVmYzU3LCAweDI0MWZjN2UwLCAweGM3NWJmYzNiLCAweGUyMDMzZGQ5LCAweGM3MDdhM2VjLCAweDdiM2ZiMzg4LAorCTB4N2Y0NzY1Y2EsIDB4NDZhZmQxY2YsIDB4NDcxZTExZDgsIDB4YzNjYmRmODUsIDB4M2JmODBkMGEsIDB4YTE2YWU1MWMsCisJMHhmMWVjZjUwMSwgMHg1NDIxZTczOCwgMHhlMGM5Nzk1MywgMHg3YmI3NWM1MiwgMHg1ZjkxZTUxZSwgMHhlMWRmYTA2ZiwKKwkweGZkZjBhMzliLCAweGVjOTdhY2FmLCAweGY3YTBmYWUyLCAweGE3ZWQxMzQ2LCAweDJiM2NlOThlLCAweDk1N2EzZjkwLAorCTB4Y2UxMGM3YmUsIDB4MTRmZTNkMzcsIDB4N2I1ZWE5ZTksIDB4YWZjMjFlNWYsIDB4YmNiZGYxZmEsIDB4NGM3YmVjZWMsCisJMHgwZDk0NDc3MSwgMHg4Zjk1M2UxYywgMHg2ZmRiMzkzZiwgMHgzM2UxNWVmYiwgMHgwZDExZDcxYiwgMHgxZDgzYjk5ZiwKKwkweGY0MTE1ZjdjLCAweDIwMWRhMmU0LCAweDNkYWFjN2NiLCAweDJjNTcxNGY1LCAweDc1YzMwY2Y3LCAweDM4OWFmNTFjLAorCTB4ODFlZDdhZmYsIDB4ZjIzN2U0NjEsIDB4ZjA4YmNlOTQsIDB4MzYwY2Y0ZmYsIDB4YTJlN2ZhZDAsIDB4ZTgzZjQ0ZGUsCisJMHhkNjIwN2Q0MiwgMHgxZjllMTVlZiwgMHhhMjNkZWRjYywgMHgyZTY3ZGMxMywgMHhlMGJlZDJiMCwgMHhhM2RmOGU5OCwKKwkweGVlZGY1ZDEwLCAweGNmYTNmYmUyLCAweDljODdkY2UyLCAweGRjNTdiZTI4LCAweDBiZWNmZjU0LCAweDVhZWY1ZmQwLAorCTB4ZWJkZDc1MGIsIDB4NThmNjQxMWQsIDB4MTc0MDEzNmYsIDB4NTRmN2JhNjgsIDB4ZGRmZTM5ZDMsIDB4YTEyMDE2ZTQsCisJMHhmODJkZWYzOCwgMHg2Y2ZlZjgyZiwgMHhmYzVmOWRmNywgMHhiMDdmZWEwNiwgMHgxZDI2ZWFkNiwgMHhmMDQ1MThlMiwKKwkweDJmMmEyODViLCAweGZkOTMzNTRlLCAweDZlNGU3OGI0LCAweDViYzVlYTA1LCAweDU2ZjBiYzQ0LCAweDYxNGU5YWJiLAorCTB4ZThkOTM1NDMsIDB4ZGI5NjdlODAsIDB4MDQwMzM3MGEsIDB4NmFiNGNhZDksIDB4NTM2NGZlMjMsIDB4OWIxZGNlNGQsCisJMHhlODdhYjlmMSwgMHg1OGYyMjM3NiwgMHg5YjdkOThkZCwgMHgwN2FkOGNkMSwgMHhmOTI1MmUxNiwgMHgxOWE3N2ExNywKKwkweDNhZGI3NWU2LCAweGU3ZWY4YmJkLCAweGRhZGFmOWU0LCAweDIyZjc5NDZmLCAweGM4OThmN2U5LCAweGQwMjAwMjRmLAorCTB4YTVjOTM1N2UsIDB4NDk0OWY2NjgsIDB4MTgxZjRlODIsIDB4NjMzMWUyMmMsIDB4ZGE0YmQ4ZDksIDB4ZTQ0ZWQ3NzgsCisJMHhkZjhiYjNhMywgMHgxZTI3MWUxOSwgMHhlYzJlZmRhMSwgMHg3YjhhZGZjNywgMHg0ZmVmYTM5ZSwgMHg1YzNhZTM5MSwKKwkweGNjNzVmZjdjLCAweGY2ODk5NDA4LCAweDA3YWU0MmU0LCAweDdjZmZjZGM2LCAweDdmYWMyOTQzLCAweDQ3NDNiNzVjLAorCTB4ZDViNzBkNzksIDB4Yjg3ODgwYmYsIDB4NjhmMDI1ZDAsIDB4NGZjODVkNjAsIDB4N2M5N2Y5MzcsIDB4NGM0MjFiZjAsCisJMHhmMGRjZTY5YSwgMHhiYmE1ZjQ5NSwgMHhhOTE5NTFjNywgMHhkZTQyNGIyZiwgMHgzOTdkNDhjYSwgMHgxMmFkYWZhMSwKKwkweDhmZDRhMmY1LCAweDIxMWFlNmMxLCAweDhlNDg5YjhmLCAweDQ3NWU2YzFlLCAweDdlY2RjM2U1LCAweDZlNjkxZTdhLAorCTB4OGRiOGYyMTUsIDB4NzlhYWZmYmUsIDB4MDFjNzkwYTcsIDB4ZDJmNzhmMjEsIDB4ZjllNmVlZmIsIDB4ZDlhZDdjZjQsCisJMHhhOTg1Y2Y0NywgMHg2ZTExZDdiZSwgMHhkNzNiOGUzMiwgMHhkY2JjYTNlYywgMHgxODliMGY0MywgMHg3NDJlZjFjNiwKKwkweDAzOGYyODliLCAweDQ3YjFlMjM4LCAweGM5NGYzMGQyLCAweGEzNDRlNzQ0LCAweGU1YTI5NWYzLCAweDc0M2QzZjdjLAorCTB4ZTViN2I4MGUsIDB4ZmVmN2U0NmQsIDB4MTdiNDIzM2MsIDB4YTdhN2M3MDcsIDB4NDc2NWNjYTMsIDB4ZTBmMWY0YjksCisJMHg4ZTg3MjRmMywgMHhiNDc2NWNiYSwgMHgyZTNlNGZhNywgMHhkZDk3MWVjYSwgMHgwZDNmZTUwMCwgMHg3MWZkMjVlZSwKKwkweDliYjJlN2Q0LCAweGUzYzlmY2EwLCAweGRmYmJmY2JkLCAweGY5NDBiNzY1LCAweGZjN2RjMWQzLCAweGQwNTE4MDdiLAorCTB4MmZlMGVjZmYsIDB4MzM5NThlNDgsIDB4NDdmMjIwZTUsIDB4MmE3ZjM5YTUsIDB4ZDdkMDBiYTgsIDB4MmY5MTA3ZTUsCisJMHg5OTJlNjdhNiwgMHg2MGIxN2M4YSwgMHg3MmU4OGJiMCwgMHg0MWZkNmJhNiwgMHhkOTFhY2YyYywgMHgxNTE1ZTJhZSwKKwkweDQ2ZTE1YjFlLCAweDU2OTE1NzZjLCAweGE5YmI2MmFkLCAweGM0NmM3NzM5LCAweDZlODZkMzc2LCAweGNkZGIyMzU3LAorCTB4MjM2ZmIzMTgsIDB4Yjc3MDZmOTYsIDB4MmU5ZjY4YWIsIDB4MWE1NjM5NDAsIDB4ZTU5NjQ3ZWUsIDB4NjVhNzI5NzcsCisJMHhkZGQ1ZGQzZSwgMHhlMzA3ZDI1ZSwgMHgwZmE0YmNiYSwgMHhlNjJhNWMyNCwgMHhmZjQyNmY1NiwgMHhlMjk3NjM2NywKKwkweGE5YTVkZmMwLCAweDI3ZjRhYjk4LCAweDYyZWU2MDMzLCAweDBhOTNkZTAzLCAweDNkZmZmYWYyLCAweDg3YWM3N2FlLAorCTB4Zjk2MjM2NzUsIDB4YWRiNzJhMWEsIDB4ZWRmYTA2ZmYsIDB4ZTJmNjAwN2YsIDB4ODAwMGU4MzEsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgzY2Q1ZmYwMCwgMHhlNTU0NzgwOSwgMHg5ZGNlZTdiNSwgMHg0YzkyNjQyZCwKKwkweGUyNDIwODM2LCAweDk2MjQ5OTY0LCAweDI2YjY0MzJjLCAweDBjNDg2NDEwLCAweGY5MDEzMGVlLCAweDEwMTk2NTQ0LAorCTB4MDQ0ODE2YzIsIDB4N2VhYjE3ZWIsIDB4ZTAxNzFhMTksIDB4ZDE2YjhkNjksIDB4YjVjNDZmYWEsIDB4NjFlNGI2YWYsCisJMHgxZDA5NThkNCwgMHg4N2QyNTJhYSwgMHhiNDEwNTUzYSwgMHg4OGE0NzQ3OSwgMHgxMTkwOTlmMCwgMHhjN2QyNzhkYywKKwkweGY3ZmNlNzNiLCAweDI0Y2VlNjY2LCAweGJlZmQxNDgwLCAweGZmOTM4NjA3LCAweGNmZDlmYmZlLCAweDAwNWZmZmY5LAorCTB4YjNmODUzODAsIDB4MzQ2MDdmMDIsIDB4M2QyNTM4ZmUsIDB4MDQ2ODA0OGMsIDB4ZDFiZjY3ZjEsIDB4MDM5NWIyNmQsCisJMHg4YzA3MzRhYywgMHg0MTJmYTNhMCwgMHg2MDEwYWJhMywgMHg3Njk2MGVhZiwgMHgyNGE0MDAxNCwgMHgwYjdhZmNjMywKKwkweDc0YjA4ZDk2LCAweDVkZTc5NjBiLCAweDA1NDgwMzY4LCAweDIwYmFkYTY4LCAweGRhODU4MTZlLCAweDYwNjZlM2JiLAorCTB4ZTIxNzQ1ZmIsIDB4NTJjZTM4YWYsIDB4ZTA1NDZlMDUsIDB4OWJkNDBhOTMsIDB4NGYzNDg5OWMsIDB4MWZkMjRkOWEsCisJMHg4NTZmYzdjYSwgMHgwNjRhNzg1MCwgMHgzZDlhYjdlOCwgMHg0NDgwMDRiYSwgMHgwZGFjN2I5MywgMHhmYjliZWRjNywKKwkweDg3NTg4MzRlLCAweDMxZDY4OGFmLCAweGViMWViZDZjLCAweDZjMzIwMGUzLCAweGNhMWYxZTU2LCAweDVlNTQxOTgyLAorCTB4Yzg0NmVkMDksIDB4Y2ZmNWI4NDYsIDB4ZGEyMmE0ZmIsIDB4MjMyN2M1OTcsIDB4NWY0MzRlODQsIDB4ZjllYzVmMjAsCisJMHg2M2ZlMTY1NCwgMHhlMDU0M2QwNiwgMHg2ZTAzZTk3YSwgMHg3MGQ3OTk2OSwgMHhlYTU2NjAyMCwgMHg3NDM5NjdmMSwKKwkweDIyNjY3MGVjLCAweDdlZDQ1ZWRlLCAweDE4YmYwNDZmLCAweDdkZmI0M2JmLCAweGJlOGRlMjE1LCAweGJmNjk3NTM3LAorCTB4MGY1YjU0MDMsIDB4MDIzMDQzOGQsIDB4ZDlkZmI4Y2IsIDB4ODU1ZWZlMTIsIDB4ODc4ZjBkZmYsIDB4YzNjMDY3NDksCisJMHgxMGYwYTFhNCwgMHgxYWYwMWZiNSwgMHhkN2RlOGU0MSwgMHhhNjZlY2IwYSwgMHhjMGJlZTQ3MywgMHhkMWZjY2E5ZCwKKwkweGY3MjE4MTA4LCAweGY0NDVmMmE3LCAweGZlMDVkYWZlLCAweDI1ZmYwMmY1LCAweDVhNzRlNzM2LCAweDM4ZmNkZDVmLAorCTB4OGUwMDUzOTAsIDB4NGQ3OTM1NmQsIDB4YTlmZmRjOTksIDB4MTc0NDI5M2QsIDB4MmQ4Mzc1OTMsIDB4NWI1YjNlOWEsCisJMHgwMGRlODM2NywgMHhjZGQ1YWRiMCwgMHgxNGJhZDdkMCwgMHgzZjgwNzZmNCwgMHhmOTczMzZiNSwgMHgyZTE2ZDZhZCwKKwkweDMwZjU2OGVmLCAweDhlYmFkOWRjLCAweGRiNWE1ZmUxLCAweGViNTc3ZWI5LCAweGRiYmYyZTQ2LCAweDZmZTg2NWVhLAorCTB4NWZiZjkxN2QsIDB4ODY2NTdmM2IsIDB4ZmY0ZDEyZGIsIDB4NDVjZWM5ZDUsIDB4N2I5ZThmYzQsIDB4M2U5OTEzYWEsCisJMHhjODUzZjdiOCwgMHhjODFhOWVhYiwgMHhjMzQ0YjY2ZiwgMHg5ZDY1ODMwMSwgMHg4ZjY1YzA5NCwgMHhkOWUxZjcxMSwKKwkweGMzNmRlMzE2LCAweDhjNzNmZDdkLCAweDE5YzY4OWJiLCAweGFkN2UwOWE4LCAweDRhNDM3YzQzLCAweDMwZDBmMTgwLAorCTB4YmU5YWJkZDIsIDB4M2ExYzQ2NGIsIDB4ZTRmNTY2ODksIDB4ZWIwZWZlMTIsIDB4NjQwN2JmM2MsIDB4ZDM5YjU2ZDksCisJMHgzODNlNDdhNSwgMHgxNzU1OGYxYSwgMHg2NTgyZGMwMCwgMHg3OGYzY2UwZiwgMHhmYTg1YWJhYSwgMHg0OGMwN2U0MSwKKwkweDNmYTI5Y2UzLCAweDA5N2M3MTkzLCAweDNhZjA3NzY2LCAweDBlMWNhMjEwLCAweGIxZTgwOGM0LCAweGQxOGYyYzQ5LAorCTB4NDBkZGM4NTAsIDB4NjBmOTlmYmEsIDB4MTkxM2U5ZTAsIDB4Y2IzMzgyYjYsIDB4YThmODcwYzUsIDB4OWUwM2FiOTMsCisJMHg2NTY3YTQzMiwgMHhkNTg0YzNhYywgMHhhNGY4MTI3ZCwgMHg0NjUzODQxMiwgMHhkMzhlMDBkNiwgMHgxM2Q0NmU5NywKKwkweDU2NDQxNDljLCAweDlmYzNjNzUwLCAweDYzMjJkZmM5LCAweDE0Y2JmMTg2LCAweDZiOTRkNDQ4LCAweGVkMzVhM2NkLAorCTB4OWE5OWFjZWIsIDB4NWNmNGJlZmEsIDB4YjRkMmZmMWUsIDB4ZmFlZDM0OGIsIDB4YzU5YTU3NDYsIDB4MjMyZjUzYmMsCisJMHg2Zjc0NjVkOCwgMHgwOTc0ODA1YywgMHg5YjFjOTk1NiwgMHg5OGJkZmViMCwgMHgwNjI4MjJmOCwgMHhiZjFiMTY5OCwKKwkweDMxN2JlMDg5LCAweDM3NmE1ZTE5LCAweDE0YzljMGVkLCAweDkzNGU3ZGMwLCAweDEwOGIyMzdkLCAweGM2ZGI5NzU1LAorCTB4OTllZGM3NmIsIDB4NzZjMzYzNTMsIDB4Njk1N2U2NTcsIDB4MjVjMTIxZDcsIDB4MWRhYmRmYjQsIDB4YTdkZjM0NTMsCisJMHhlOWFlNWU1NywgMHg5M2ZiMzJlZiwgMHhjZWY1YWQwOCwgMHhjNmY3Y2Q3YSwgMHg5ZjQxYWY5NiwgMHhlNWIxMzAwYywKKwkweDAxNGJlODI0LCAweDM0M2FmYmM2LCAweGVjZWU5NGUzLCAweGJmMWZiNGQyLCAweGViMTI2NDFiLCAweDM3OGU3ZDkyLAorCTB4NzQxZjk2MDksIDB4MTUyYWM0Y2EsIDB4MjRkZjliODcsIDB4M2ZhNWY1NTgsIDB4NGUwMWY2ODMsIDB4OWY1MTU5YjAsCisJMHg4M2RjOGE0YiwgMHg5NjNkMDI0NywgMHhjYWU1MjkyNywgMHg4MTJkYjdhMCwgMHhmMjEyNzBlOCwgMHg4OWJmNDhmNSwKKwkweDYzMjFjMjMwLCAweGJmZjJhOTYzLCAweDRjMWYxMDRlLCAweDMyMDAyMDUyLCAweDE2YWJmNjA3LCAweDNhNzk4MDRiLAorCTB4NDU5OGQ3OGIsIDB4MWJlNTA1NmEsIDB4YzkwNmMxZjUsIDB4Mzg0N2E2OTEsIDB4NTA1NDBlNDcsIDB4OGEwNDI4ZjksCisJMHg5NzNhY2EwOCwgMHgyYTZiZjg5ZSwgMHhiMmE1OGYzNCwgMHgwNDY5ZGMwOSwgMHhiZjc0NDgzZiwgMHgyZmRjN2M0ZiwKKwkweGUyYzRkYTA1LCAweGNmYzRjOTgyLCAweDY4ZmYzZjc1LCAweDE3YWM2ZGRlLCAweDVjMjYxYzYyLCAweGZlYmFlZmRmLAorCTB4ZmQ2YjRhOTEsIDB4OTFmNTNmYmIsIDB4N2UyMTZjMzcsIDB4Y2Q3ZWIyNmYsIDB4OGRjYjUyNzgsIDB4N2YxOWM3MmQsCisJMHgyZDZmYjk2YSwgMHg5MmUxNzdjYywgMHg5ZjY4MGRkYiwgMHhhZmZlMzYxMCwgMHhlZDBhNzZjYywgMHg1M2EyM2FkYSwKKwkweGI4YzlmYzIzLCAweDFlZDQyMGJhLCAweGM0MThiZTNhLCAweGJmZWEzMTc3LCAweDA0ZDM1YTdhLCAweDVkZGZkN2MyLAorCTB4NmY1NzZjNGUsIDB4OWUwODcyMTAsIDB4MWM0ZWY1NDUsIDB4Mjk0NjNlYTcsIDB4YTdkNDRmODMsIDB4YjJhMWVkMmEsCisJMHg2YWU5Y2I5ZSwgMHg2ZjY4OTU3ZCwgMHg1ODdiYzc1NywgMHg5NmFkMWZiNCwgMHg1MjJlZjE5NSwgMHg5Y2EyY2RjYiwKKwkweGEwZjdjZWE5LCAweGU1YWExNzI4LCAweDM5NzE3MGZmLCAweDYxM2ZiNDRlLCAweDI5ZWY1NTliLCAweDUzZmZlOTA4LAorCTB4MGYxOGRkYWEsIDB4YTA2ZWM5ZTMsIDB4YzkzMzkwM2QsIDB4MWFiYjQ4MWUsIDB4ZWRhMjFmOTgsIDB4YjE1ZWI2ODUsCisJMHgyMzdmZjMxNywgMHg0NGM1OGM3YiwgMHhkZjYzY2I4ZiwgMHg5MGVlYjkyMSwgMHhmMWJhZTQ4MCwgMHg4YmQzODM3NiwKKwkweGQ0OWU3ZmYzLCAweDEyYzZiNDUxLCAweGI3ZTdkZmMyLCAweDZhYmI3YzA4LCAweGI2MzI5Y2UzLCAweGRlNmFmOTVmLAorCTB4MzkyM2UyMjYsIDB4ODVjOGY3NmUsIDB4NTYzYWRkZjgsIDB4NGVhNzdhYzcsIDB4ZTg4MTM4YjYsIDB4ZmJkMGFmN2IsCisJMHhkODQ4ZmY2YSwgMHg4Njg2ZjJkMCwgMHhiMmY1NTE5ZSwgMHg2Y2MxZjNjNCwgMHhmYWY5YzFmYywgMHhmNGY1MWJlZiwKKwkweDhlNTljMjA2LCAweDkzNzA5NzNmLCAweGRjZjQyOTk5LCAweDk1YWRkNDQ4LCAweGVhMzZmM2Y4LCAweDNkZDIzMzU5LAorCTB4M2E5YzFiMjUsIDB4MWFmMjlmNmMsIDB4ZjFhMjY3ZWEsIDB4YzdkMGJmNDEsIDB4MjRmOGM1YWYsIDB4OGY5NTljMTQsCisJMHg2ZmY2YzliZCwgMHg4ZTUyOGNhMSwgMHhjZjJkN2JmOCwgMHg3Yzg5OTc5ZCwgMHg5ZmNlMzQ3YSwgMHhkMGRiN2M0YiwKKwkweDc1ZDc4ZGIyLCAweGUzY2FkZDhkLCAweDEwNTgzNTgzLCAweGNjZTJjZjhlLCAweDllOTdmYzI4LCAweDNmYTVmZjAxLAorCTB4ODI3MWZlMjYsIDB4NzVjZmE0MDMsIDB4YmViNDc0MjgsIDB4NzhiNzk2ZTUsIDB4ZWY5NWNiYmYsIDB4NDMzMjVmYWMsCisJMHg0NzJjYjhlZCwgMHgzOWM2OGY5NywgMHgwZTFmMDgzMiwgMHg3NDA3NGU4NSwgMHg1ZjA1MGFiNiwgMHhmYWJlMTM1NywKKwkweDEzNzNmYjE3LCAweGY5ZjBlY2IxLCAweDNlZDliYTQ3LCAweDg4OTcyYWVjLCAweDQwNzFjZGVlLCAweGY5MmEzZjc0LAorCTB4NDEwZWY2OGIsIDB4MGVkNjhlZmYsIDB4NWE1YmNiYjYsIDB4ODRiZTE4YmIsIDB4NTViYWQwNzMsIDB4OGQxMGRkN2MsCisJMHhjMDY3ZjlkZiwgMHgxMzFmZmNlZiwgMHgwMWY0YTNiZiwgMHhhZGZiMDNhMywgMHg0ZTNjMDdkYSwgMHgxMTgwZmY4NSwKKwkweDJiNGNmNGMyLCAweDI3ZTIyNWYxLCAweGZhZTI0YmExLCAweDIxMjBiOTNhLCAweDEzOGZhOWEwLCAweDczOGU1MmZlLAorCTB4Y2FlOWYxM2MsIDB4MzdhYWJiMTksIDB4OTg3OTIxNDgsIDB4MzExZDBiMWMsIDB4MGVkN2NjNDksIDB4YzQxZGFmODUsCisJMHgyMmZmMmFkNywgMHgxMWVhOTYzZiwgMHhjNDlkNmZjZiwgMHgzN2UwNDM3ZSwgMHhmM2MwYmZjNCwgMHgzYmJhNzhhOCwKKwkweDg4MWJhZjFhLCAweGFiYzFhNzhlLCAweGM2MDdmZWI2LCAweGM3ZmEyNzZiLCAweGFmODIzN2E0LCAweDY1Mzc3OGM0LAorCTB4NzdmOWUzNDYsIDB4N2M1NTVlMGEsIDB4N2ZlNDUzNmYsIDB4MjM2ZjNjMzgsIDB4N2Y5ZWE3M2MsIDB4YjRjYjZmM2MsCisJMHhmODkxYjhmMSwgMHg0NTNlY2UxZSwgMHhmNzVkNDdkMiwgMHg3ZTVhNzIxMCwgMHgyZDNhNzIyZSwgMHhkZmY4YWFkYiwKKwkweDQ2MTY3N2U4LCAweGEyNmRmZGQzLCAweGY3NDM1OWJiLCAweDUzYzgzMzllLCAweDRmMjk4ZmNmLCAweDg0OGI3ODkxLAorCTB4M2FiODEyOGQsIDB4M2ZkZmQxMmMsIDB4ZGY1NjFjY2IsIDB4NGUzYzE3OWQsIDB4ZjhkNmNlMGEsIDB4NzViZjkzNjcsCisJMHgyOWIzZmM2YiwgMHhmZDY5NjExOCwgMHhlNTM0OWJkOCwgMHg5YWFkZWIzYSwgMHhhZGE2OTdmNiwgMHg2ZTVmZDRkNSwKKwkweGJmYTlhZjViLCAweDRkMDFmZjMyLCAweDYzYzc2YWY5LCAweGQzZTY3ZTExLCAweGU3N2FmYTlhLCAweDczZjUzNDZmLAorCTB4ZWE2YmI3OWIsIDB4NjhmNGI3ZTcsIDB4ZmU3ODE3ZWEsIDB4NzhhYjI5YWEsIDB4MWMwYWRhZGMsIDB4MzU2YjZkMmYsCisJMHg2NWQzZjEyYiwgMHhmZTAzYWIwYywgMHg4YjgzMTI1YSwgMHhkZmQ5MDcwZiwgMHhkN2I3ZjRhYywgMHhhZmIyNGJiMiwKKwkweDMyZDFmZDgzLCAweGMyOTZhYjlmLCAweGNkOWQ4YWFhLCAweGI1ZjQxMjZmLCAweDJkNzg5NTVhLCAweGFkNWJlMThkLAorCTB4M2JlZmQ2MzYsIDB4ZWUxOWYzNWEsIDB4ZjEyODc1NmMsIDB4NWRjMzI1NWEsIDB4NGUyNTRlYWQsIDB4YjQ4YzMxNzMsCisJMHhiYjY2YWYwYiwgMHgzZDIxNjRhNywgMHg0NGJjYmRhNiwgMHhlOTgwYjgwNywgMHhjMTY3Zjg3ZiwgMHg3N2JjNWE1ZSwKKwkweGRjZTI4ZWJjLCAweDhlNWVjYTM1LCAweGZmYjM3ZjU3LCAweGUzYWZlNDM2LCAweDk1MDcyNmNkLCAweDMxMWZiNzdiLAorCTB4ZjlhMzBhZDgsIDB4MzJiN2VlNjUsIDB4NmNmOGMzMzgsIDB4MGQ1ZmNiNmUsIDB4NDVjZDY3ZTQsIDB4MDg2M2JhMGYsCisJMHhhNTlhOWQzOSwgMHhmNzIwN2U2MywgMHhjYzJmNTAwMywgMHgwNTIxODMzNiwgMHhkOWVjYzFmNSwgMHhmODBkYTM5MiwKKwkweDE4OTIwN2JiLCAweDNmNThkY2ZhLCAweDEzM2UwZjRkLCAweDdhMmRlYjk2LCAweDk3OWUyOTlmLCAweDNmYTMzMmU2LAorCTB4MTMyYzRiM2QsIDB4NTBmMDdhNGMsIDB4NzMyNGE0M2QsIDB4N2QwZDdlOWMsIDB4MzgzY2ExYjQsIDB4YmYxOGI4NjUsCisJMHgxYzNmMjJjZiwgMHhlOTZmNWRmYiwgMHhiZGRkOTAzMCwgMHhmYTJmZTc2ZSwgMHhiODdhYzM2ZiwgMHhmMWNlNTNkMywKKwkweDI1NjI1YzNkLCAweDNlNzkyZGZkLCAweDM3MWE5ZGQ2LCAweDM1MjBiY2JjLCAweDVmMTg1MGUxLCAweDRlMTkyNTRmLAorCTB4ZTFkMWY4YTUsIDB4N2FkYzUyNzcsIDB4OWNmMWMxOTMsIDB4MDVkZmJhMmQsIDB4YzlhNzdlY2EsIDB4YzE2ZmZiMTIsCisJMHg0ZGRlNGRkNywgMHg3MTNlNDg1MiwgMHhiODRkM2I3ZiwgMHgwMWUyMjZjZiwgMHhjMWIzNjdkYSwgMHg3ZTQ0NTc5NywKKwkweGIzZjY3NmY2LCAweDE2ZDcyYTliLCAweDJlOWE5ZDExLCAweDE1MzEzZTkxLCAweGE2OWRlMjg1LCAweDhmZDkyZjk2LAorCTB4OTFjZmQ0OGYsIDB4OTBmMTRjZjAsIDB4ZmU2NTZmYzMsIDB4OTNiYWRmZGIsIDB4OGI4ZDQ1ZjksIDB4NWM3ZDViN2EsCisJMHg2YWI4MGIyZSwgMHgzOWEzZTNjMywgMHhhNjRkZmY5MywgMHg0YmVhYTdiOCwgMHgzYzRjZmYxMSwgMHg1M2ZiZGNlOSwKKwkweGQ1YTA3N2RjLCAweDE3ZTUyZmZmLCAweDlhODJiY2Q0LCAweDViY2M4ODY3LCAweGRlNjQ3YWE4LCAweDZlMDk3NWFkLAorCTB4MmM5YWVmZGMsIDB4OTRmMzA2NTEsIDB4NWVhM2E2NzQsIDB4ZGVkZjU1NDAsIDB4OTc2NTE1OWEsIDB4YmQzYWM4ZWYsCisJMHhmZmQ2ZDY3ZSwgMHg2Y2Y5ZmFjMCwgMHg0ZDMxYmZmOSwgMHhiZTQ4ZDVkOCwgMHgwNWUzMzdkZiwgMHhlNTUzYWQwMywKKwkweDlmZmU0OGVmLCAweGZlNzA3ZDQzLCAweGQ3OTI0ZDM5LCAweGY2N2E3YTgzLCAweDQ0YzM3NjkyLCAweDdkZjlkY2U5LAorCTB4ODhhMGU1YjksIDB4YzJlZDIzOGIsIDB4MzYwN2I2ZjcsIDB4MmI1YzliYTYsIDB4OTI2MTdjNzMsIDB4MWU1MDcyNmYsCisJMHg0NzQzYTU0NCwgMHhjZjNhZGQzNCwgMHgxZmNlYjc0MCwgMHg3NmQxNmU5MywgMHg3M2JjZTBmMSwgMHhmMWEwOGJiMywKKwkweDhhY2JkZmNmLCAweGM4M2UyN2YyLCAweGE5MWZiZDNhLCAweGY3ODFmZmFkLCAweDYzNmIxZDZkLCAweGVmNDQ3MmI4LAorCTB4ZWEyNzU5M2MsIDB4MDE2MjdjNDUsIDB4ODBlZmYyMWQsIDB4NzRiOGU2NTcsIDB4M2M3YjY2NjksIDB4MTk1MDMzYzUsCisJMHhiNzdkMjc4YywgMHhmMjA2NWJhYywgMHhkNGVmNDEwZiwgMHg1Y2ZlNDY4ZiwgMHgxZjY3ZjBhMiwgMHg3ZTI0M2VmOCwKKwkweDdlZjcwNTVjLCAweDI1OTgwOTQxLCAweDIyYWU0YmQ1LCAweDA5ZjRiNzNkLCAweGZjNGYwODQzLCAweDI3ZjM5M2FmLAorCTB4Y2I3ZTk0YWIsIDB4ZGE0NjlkMmQsIDB4YjU2N2YyZWYsIDB4MWE3MWQ0ZWQsIDB4MWZjODhhNWYsIDB4MTlmYTVmNTcsCisJMHg3M2YwZGRiMCwgMHhhNzU1NmZkZSwgMHg1OTc3ZGZiNiwgMHg2Mjg3Mjk3MSwgMHgwODRiMTY1OSwgMHhhN2QyNjdlZiwKKwkweDFiYWVjOTQ3LCAweDViMjdjYWMyLCAweDNmMjBiZjM5LCAweDllMDNlMGYzLCAweGM0ZmEyMWIxLCAweDcxZjE0NzY0LAorCTB4ZjllOWY2NWMsIDB4MjNmZjViNTgsIDB4ZjcxY2IxZjMsIDB4ZjllODkxYWMsIDB4YmY3OGY5N2QsIDB4ZWI0NTk5ZGQsCisJMHhhMGYzZjU1NiwgMHhjNGMzNzlkZSwgMHhkY2EwNjc3YSwgMHgzN2E0ZjIyNiwgMHg5ZTJkYWVmZCwgMHgzODA0ZTRmOCwKKwkweDJhMTYxZDg4LCAweDZhODVkMmY5LCAweDM2OWQ3NGJlLCAweGNmYjkzYTVmLCAweDQ5Yjk3OWM3LCAweDcxNmRiZDA3LAorCTB4YmQ4OWY3NDgsIDB4NTVkYmNlMWUsIDB4NTliNzc2ZWQsIDB4NWRkM2ZjYjAsIDB4YTNmYzk5NGUsIDB4NjRiOTZmZjEsCisJMHhkZmVhYjc1YSwgMHg0ODRlZmVhOCwgMHhiZWIwZTU4ZiwgMHhmNjZiYmNlMywgMHhkNTNiZWJkOSwgMHgzMGY2YWEyZSwKKwkweDA2NTYwZWQyLCAweGZlYzk2YmRiLCAweGUzYjZmODRkLCAweDJiZTc4MjRkLCAweGY3NjkxZWFmLCAweDdhMTM4YmRlLAorCTB4NTdjMWE4ZTIsIDB4OGNmYzk3YmUsIDB4Y2YxYzYzZDcsIDB4YWZmYWY0NDEsIDB4YzY3ZTE2Y2IsIDB4MDMwMmNmNGMsCisJMHgxZjA5MWZjYiwgMHg0NTBjZGJjYSwgMHg3NjRmYWU2ZSwgMHhmNTRkOTc1ZiwgMHg5OWQwYmQ4YSwgMHhhM2IyMDY5ZCwKKwkweDIzZGY3Mjc1LCAweGY5NWYxMmQ3LCAweGRlMWJjZTY1LCAweGJmMDdjNzdjLCAweGNjZWRiNWZmLCAweGViMjY4NWY5LAorCTB4ODYzZmY2NzEsIDB4NzQ5YTMzOGIsIDB4YTJmOGE2ZTAsIDB4NGE1NmQ2YTQsIDB4NmRjNTBjN2UsIDB4ZjM1NDQ3OTQsCisJMHg5ZmVkOTE4YSwgMHhjOGFjZDdiMCwgMHhiNTU3M2NlNiwgMHhkOWViNDlkZiwgMHgxYzMzZDYyOCwgMHhiZTVhOWFiZCwKKwkweDg3MzFlNGQwLCAweGJiYTliZjliLCAweDRjMzBiYWRjLCAweDE2Y2E1ZTNlLCAweGRiZDIyZWYxLCAweGEyMWNjODdhLAorCTB4YzVmMmQ5ZjcsIDB4NjVmOGI3ZmYsIDB4MDkxZTBjOWEsIDB4ZTRhMTZjZWQsIDB4MDgyZmZlMTUsIDB4ZjgwZTc4M2YsCisJMHgyMDgzY2UxOSwgMHhmOTU4Mzc0MywgMHgzODIxNmE3YywgMHgxNzAyMmUxOCwgMHhkYmJiN2NjMywgMHg2MDMzN2M0YiwKKwkweGJlMjQ4ZTA4LCAweGJiZjU3ZmVhLCAweGZlOWJlMjAyLCAweDU3YjYyNzhiLCAweDVmM2JmOWMxLCAweDA2ZmZmNDhhLAorCTB4ZmU3OGRiYzYsIDB4ZGJiZTU3ODEsIDB4NzAzOWZjNDMsIDB4ZjRhY2UxODcsIDB4Njc2NGVhYzYsIDB4ZTQ1MWYxMjcsCisJMHg1M2JiY2I3OSwgMHgwMWQ3M2U2NCwgMHg4Yjk2N2FmZCwgMHgwM2U4YWI3YSwgMHgxYjcyYTQ5NywgMHhlNjRjZDhlYiwKKwkweDFjZGU5MDhiLCAweDM3YWFiNGY1LCAweGMyYmY2MDE3LCAweGQ3YWM3NDRmLCAweGI1ZTQ5OTYwLCAweDgwYWVkMzYzLAorCTB4NzBhYzQ1OGUsIDB4YTY1N2E2NzEsIDB4MmZhOGE3NzIsIDB4OTVlODk5NWMsIDB4MTU1ODVjYjAsIDB4NGE2ZmVhMjMsCisJMHhjNTI2NDJmNCwgMHhjYjk2MDE0MywgMHgwZmFjMDBmOSwgMHg4YmQwODAxNywgMHhmNzkzODIzNywgMHg5NjQxOTE4OSwKKwkweDZmMTdmZDg0LCAweDNlNzA5NzM1LCAweGE0MzkwMjE2LCAweDhlMjg4YmZmLCAweGI3NGUyMjFhLCAweDJmNzkwOGU2LAorCTB4YmVmYTEyY2UsIDB4MTc5YjQ2YjgsIDB4Yzk1YjMwZjksIDB4NGE2YmRiMWIsIDB4ZTc1NjEwNzIsIDB4MWQxMmY3MzgsCisJMHgxYmZjOTM4YiwgMHg3Y2EzMmExZSwgMHhhMTM2MGU5MCwgMHg3NTU2N2Q3YywgMHhhYTc3OWYyYiwgMHgzNWVkMWFmZCwKKwkweGNkYmY4NGJkLCAweGUyYmM3MDEyLCAweDlmNzkzNmU5LCAweDIzOGNlNzEzLCAweGYyY2RjZmMzLCAweGE4MDdiNWVkLAorCTB4N2I1YTExZGQsIDB4YzU3OGYwZjksIDB4NDdmNzFjN2UsIDB4ZDc4Nzk1Y2IsIDB4MWJiMTRjNTcsIDB4NDNmMWZiZTcsCisJMHhlNWNiY2YyNSwgMHhlYmU2NzlmZiwgMHhmODBiM2JmYSwgMHg3ZTQzYzE0YywgMHg3ZGRkYTM3MiwgMHgwNDZmZDc5YywKKwkweDlmZmFkMGIwLCAweDQwMTQ3MTE0LCAweDQ3ZTUwNjczLCAweGQyNjUzYzk3LCAweDExZjE5ZjkxLCAweDAzYzg2MzlhLAorCTB4ZGRjNjFiZjgsIDB4ZTMxYmZmMDQsIDB4Yzc3ZjgyNjcsIDB4MjdlMDk5ZjgsIDB4ZmMxMzNmMTgsIDB4MDRjZmM2MDcsCisJMHgxZTNiN2YxNywgMHg4ZDgwMjI4MywgMHg0ZTRiNGUzOSwgMHgzMDFjZTg3OSwgMHgxYzg2YmQ3MiwgMHhmOWMxY2Y4MSwKKwkweDdmM2M4ZGJiLCAweGY4Y2RkZDlkLCAweGViZjdhNDFkLCAweDk5NzNhNWUwLCAweDBiYzE4OWNkLCAweDZmYzM0ZTkyLAorCTB4ZjBkZmRkMDMsIDB4Nzg3MGU5ZjksIDB4MjMyNWNmNTEsIDB4ZTg1M2JmZWIsIDB4NjdhOWQ0NWEsIDB4MTVkNDVmZmIsCisJMHg2YjA4NmY4OCwgMHg5MThlNDE3NywgMHgzOTVmMGJlYiwgMHgxZmUzNGYxOCwgMHhkN2UyMGViNSwgMHhhNzk2ZTEyOSwKKwkweDgyZjk0NGU5LCAweDA4MzMyZDY3LCAweDY3NzY3NWJmLCAweGU1MWJlZDA5LCAweDUxZjY4MzNjLCAweDgzYzFmNWQ0LAorCTB4N2M3OGNiMTMsIDB4NzVhMzY0YWIsIDB4YjhlNTFmMDQsIDB4OTExZjYyMjEsIDB4YjVmNzUwNzgsIDB4ODFiZmQxMzksCisJMHgyNTdlNmZmYSwgMHg3YTgyNzY4YiwgMHgxMGRjODQwNywgMHhlZDQzNDkxZiwgMHhjZmYzMmQ3NywgMHhjY2IwNTM3NCwKKwkweDdlOWRlYjhhLCAweDBhMWU2ZTRhLCAweDI5ZjY3NWZmLCAweDU0NzdlNzhjLCAweGM3Y2Y1MzdlLCAweGU5NTJmZTE1LAorCTB4MWRmMmFlNzYsIDB4NmI5MDFlMzksIDB4NmFlNzdlODQsIDB4YjIzNmE1ZDIsIDB4YzllMzI3NGIsIDB4ZWU1N2FjMmYsCisJMHhlNjc1NzQxOSwgMHhmNGZiNDdiYywgMHg2ZWMxOTRlYywgMHhjOGQ2M2U2MywgMHg1Zjg1NjJkZiwgMHg2ZGQ4NTg1NCwKKwkweDM2YmQxMTc0LCAweDU5Y2ExZjc3LCAweGU0ZmE2MTY0LCAweGIzZjZjNjJjLCAweGJjOWFlYzcyLCAweDg5ZDU2MTY3LAorCTB4ZTE0YTFmYzcsIDB4ZWE5YTU2ZjYsIDB4Y2ViYTc4M2EsIDB4NjBkZmUzOGEsIDB4NmQzNmZlZGUsIDB4OTNmNWFlNjksCisJMHhjZjJjNDRiYSwgMHgxMDc2OTM0ZiwgMHg5Y2NiNjA1YywgMHhlNWEzNjQ5YSwgMHgzN2ZkNzk3YSwgMHg0MWQ5NGZlNiwKKwkweGEzOTU3NTIyLCAweDI5YjlmZDllLCAweGVjYzI2NGE0LCAweDk2MzlhZDQzLCAweGNiMDcxZjBlLCAweDRkNjRkNjc1LAorCTB4MzFiNGQyZjksIDB4ZGI5N2Y2OWEsIDB4NTdmNTM1YjIsIDB4ZDRkMzhmZTYsIDB4ZTU1ZWYzYWIsIDB4MmJiNGQ1MjgsCisJMHg1MTY2MGE0ZSwgMHg2MGZiODc1YywgMHg2NGU3ODBiOSwgMHg3ZGEyNWRhZiwgMHgxYzYyYmVlZiwgMHgzZjNkYTc5NiwKKwkweGNhNmU0MWNiLCAweGRhN2VhNTY2LCAweGQxMmY1YTk2LCAweDY5ZjEwMDYzLCAweDcwZWE4NzQ0LCAweDFmNDdmYWU1LAorCTB4ZTIyMmMxYTIsIDB4NjdlZWM2ODYsIDB4ZTc2ZDM4NzYsIDB4MTMwYzM3MTAsIDB4NzEwMGFjMmYsIDB4ZGM1YzNmOGUsCisJMHhhMDJmMTkxMCwgMHhmNDkwN2NmZSwgMHhkN2FiZjE2NywgMHhkYzcwZGI1OCwgMHgyZTI3NTVjZCwgMHhlZjNlZTFiMCwKKwkweDgyMzhjMWNjLCAweDQ3MTI4ZGVjLCAweDgzM2ZjNzBjLCAweDA0ZDkyMjcyLCAweGYwYzhmNGZmLCAweDAzZmMxMGRjLAorCTB4MWY4NTBiZjAsIDB4M2VmNjljMDUsIDB4ZGYwNTMzZmEsIDB4NGE3ZGJmNWYsIDB4MDdmMzhkZmEsIDB4NTdlZmM1MWUsCisJMHhhZmJlNDQ2MCwgMHg2Zjc4ZThkOCwgMHhkZWE3ZTUwZCwgMHhmOWNlODE5MSwgMHgwM2FlMjRlMSwgMHg3N2U4MWJlYiwKKwkweGIwZjdjNDM5LCAweDQ2YmJlOWU4LCAweDBmNzdmMGE3LCAweDk0YWJhNmI5LCAweDczMWZkZmZjLCAweDcxYWFiZjE0LAorCTB4Y2JhMzVkZmIsIDB4ZjM3MGY1NDIsIDB4NzBmNjlhMjcsIDB4YTZiNzc0YmIsIDB4YjZhNjY3N2MsIDB4YmI5NGVmN2MsCisJMHhlNzBmZmJjMywgMHg1YzZjMzU5NywgMHg5Y2EzNzQ2MCwgMHgzOTJjM2MzNiwgMHg4YmU4NDNiZCwgMHgyOGE0ZjVjMSwKKwkweDA5N2JhMWZhLCAweGRiNDNkYmViLCAweDcxNmQxOTk3LCAweGUxNTdlZGQxLCAweDZjYjc5NDc4LCAweGFhZGVjNjE4LAorCTB4MTkzYWVhN2EsIDB4N2ZhYTg3OWEsIDB4NzFjZjlkNDcsIDB4MDhmYmU3N2UsIDB4Y2RmNjRmNzEsIDB4YzNiMDlhZjMsCisJMHg4ZGI4MjUxZiwgMHgyZmIyN2NlMSwgMHhmNDdiOWM0NywgMHgxZGMwZjYzZiwgMHhlZTc5ZDM1ZiwgMHhlYWJlMjJlYiwKKwkweGEzZjYxNDRmLCAweDlkMzNmM2E4LCAweDA4ZjE2MTBlLCAweGQ2NDU1ZmMxLCAweGQyZWM4ZTgwLCAweDBmNThkMmMwLAorCTB4MmQzNTljYTAsIDB4OGFlOGYzOGIsIDB4N2UwODhmYzksIDB4NWU0ZjFlNjgsIDB4OWEwZjJkYzcsIDB4ZWIxZmNlOTEsCisJMHgzY2JiMWE3NCwgMHg5NjE2YzE0MCwgMHhkOWZkOWVmYiwgMHhmN2U5M2I4YywgMHhlOTJmNzEwMiwgMHgyZmIzZWQ3YywKKwkweGFkN2Q4NDA3LCAweDFlNjM3YTExLCAweGI3NjI5ZmYxLCAweGQzNTY1NTAwLCAweGM3NjgzMDVkLCAweDVlMTBjZjQ4LAorCTB4YmY2YjljYTgsIDB4Yzk4N2ZkZjUsIDB4N2ExMWVmY2YsIDB4MzcwYWYyODMsIDB4YjRlMDVmYjAsIDB4MWQwZGYzNjgsCisJMHhiYmY4ZTcyYywgMHhkNzNlZmMyZCwgMHhiNzhmZWI1OSwgMHhmMzk2OGRkYSwgMHhkODQ2NDdhOCwgMHgyMTg3NzliNSwKKwkweDU3ZmJjNWY0LCAweDVlOWIzZDIyLCAweGQwNWVmOTk3LCAweDA0ZjZhZGIxLCAweDkxMWZkMzA4LCAweDI4ZGE2Yzc4LAorCTB4ZTVhYjljYjMsIDB4Y2JlNTViYTMsIDB4ODMwZjZjYmMsIDB4ZDE4NWY1MTksIDB4ODNhNzA2ZjgsIDB4NTViNTdmZTUsCisJMHhkMjdhYjdjYywgMHg0ZWM4MzMzNywgMHg4YmQ2ZWVhZiwgMHhjZGMzMmY0YiwgMHg1YjA2NGViMywgMHhiNzliM2NkOCwKKwkweDVkOTI5Njk5LCAweDYwM2ZkNzUzLCAweGY3NDlmNDU1LCAweDBhNTM0OTU3LCAweDg0M2I1YzA0LCAweGMwYmY0NTdkLAorCTB4NDE3ZTQyOTAsIDB4ZWNmMWM0YmQsIDB4MzU1MWVlOWUsIDB4MTIzZGE3ODQsIDB4M2MyNTZjZjgsIDB4NWM2NjM1YzQsCisJMHgxYzMxNGNkZiwgMHg1ZTUwYjc3ZCwgMHhmOWYyZDIxNCwgMHhkNzFhYTU5ZSwgMHhhY2VjZjFhYSwgMHhmMjc2NTllZSwKKwkweDVjZWMzZjYzLCAweDA3MjkwN2I4LCAweGNjZDllYzkzLCAweDg3ODJkNzRmLCAweDg5M2RlZWZkLCAweDkzY2E3NGFlLAorCTB4M2ZlZTUzNGMsIDB4ZjYwYzQ5ZWMsIDB4NjdiZGJmOTEsIDB4Zjc0NGFjNTIsIDB4M2JmYzcwMTksIDB4NWY3NTdjNjksCisJMHhmNGFlMGM3YiwgMHg5Mjk3ZGU2NiwgMHg0NGZlNzUyZiwgMHhmNjdiMTUzZSwgMHg2N2FhYTI3MSwgMHhhN2RiZTRlYiwKKwkweGY3ZTc0OTVjLCAweGYxNGFjMDczLCAweGY4NTk3NGVjLCAweDIxNDdmMGQ1LCAweDZkNWVhYWNmLCAweDZjNDlmYzkyLAorCTB4YTYzM2VkYWEsIDB4YTM0ZjExZGIsIDB4ZTRhOTdlNWEsIDB4ZjczNWRiN2QsIDB4YWZkNmNmMDAsIDB4NWZhMzhjMWUsCisJMHg1NjdmOTg5NCwgMHhiMWJjNDQzOSwgMHg0N2YzZmFhYSwgMHg1N2Y5YzVhZSwgMHhmZTRmYmM2MSwgMHhlZGFlYzJkZCwKKwkweDkxN2YwOGZiLCAweDdjNjBmZGYxLCAweDdiZTYyZmY1LCAweGQ3MzNlM2EzLCAweGNkZGZkYTMyLCAweDczZGYxYzc3LAorCTB4NjljNzQ0MmQsIDB4ZWE4MTcxODMsIDB4Y2IxNzNlNWYsIDB4NThhOGQ2ZTcsIDB4ZmMyODdjODUsIDB4ZWU1YjY0N2EsCisJMHg3ZjU4MzVkZSwgMHg2NjA2MmZlNCwgMHhmZDI3MzdkNywgMHg1OGFkZThlYSwgMHg1OGI5ZjliZSwgMHgyNDkxZjNjNiwKKwkweDM5MWQ5MGYwLCAweGViY2YyOWIyLCAweDc0NGIwNmMxLCAweDZmYjI1ZWMxLCAweGNmOGUyNWIwLCAweDMyN2IzZTY5LAorCTB4NTEyZmI3ZWYsIDB4NzZiN2YyN2UsIDB4N2U0ODQzZjYsIDB4N2NjMmU4NmMsIDB4ZTg4ZmY3NDYsIDB4YjlhM2NiZmIsCisJMHhiY2M1YjgxZiwgMHhjYTVjOGEwZCwgMHg1ZmRlMTQyZiwgMHgyNDJmZjU0ZCwgMHhhNTQyN2U3MywgMHg2MzI3ZTFkZiwKKwkweDdkYWMxNDljLCAweDJiMjJiZTA1LCAweDkyZTdkZWIyLCAweDViZGQxMGU3LCAweDY5N2JhMTVjLCAweGY5N2M4NGJmLAorCTB4MDZmNzA4ZDUsIDB4YzdmMmY3ZGEsIDB4ODljM2YzZmYsIDB4MTdkYTlmYjgsIDB4MTU1NWZlYWUsIDB4MDdkOTZmYWUsCisJMHg4NGUzNDBhOSwgMHhkZmI0M2FlOCwgMHhiNjZiNmM3MCwgMHgzZjA1N2Y5MCwgMHhmMThjNWUyYiwgMHgyN2QzMGMxZSwKKwkweDM1MTIzYjJiLCAweGQxYWVhNmU1LCAweDdhNjE4M2RlLCAweDcyOWVmMDY4LCAweDA0ZTdjNGEzLCAweGVkNWM4YThkLAorCTB4ZWRkYmJhMzcsIDB4ZmJhNWQ3OTQsIDB4NzEzZjRjYTksIDB4Y2U4NGI1MWYsIDB4ZjdmZjA4YWIsIDB4OTFmZjE4OTksCisJMHg1ZGEyZjY3YywgMHhmMzU2NjczOSwgMHg0ZTYwYzkzYywgMHgwYjc1YjkyMywgMHg5N2RjMGRmYywgMHgzMWUyODliNywKKwkweGYxNDkzZDlmLCAweDMzYjk4MjNiLCAweGIzZjljMzBhLCAweDljMWJkNTc3LCAweDdiODkzMWU3LCAweDlmNDMzMThmLAorCTB4MTNkYTc3ZWIsIDB4Zjk4MzdkYjksIDB4Njk5ZTRkNGIsIDB4NGQwOWNiNTUsIDB4MDE1NTY3ZmUsIDB4ZDI1MDFmYjAsCisJMHg4OWJkMmI2NiwgMHhiYTE0ODdjZSwgMHg3YWVlOWZkYywgMHhmMWRlZjE4ZCwgMHgxOGJiYWJjMCwgMHhmMmRjNGY5ZiwKKwkweGQzYmJjZDMxLCAweDVkODNmNGMyLCAweDExMTYzYzRhLCAweGJmOTgzNTZmLCAweDY5ZWZlNDUwLCAweGU4N2U3ZjhkLAorCTB4OTQ0NWJkYjEsIDB4Y2FmNDM4ZmYsIDB4ZDNjYTIyYjgsIDB4ODdmZDk0MmUsIDB4ZjdjOTlkN2UsIDB4ODZkZmY2OWMsCisJMHhmN2NlY2I3MCwgMHhiOTFlMmYzOSwgMHgwYzdiYThkZSwgMHg4ZDQzZDA5MiwgMHhiYTY0OGZiNCwgMHhjNzdhZTNmZiwKKwkweGY0MmU3MmNlLCAweDg1MGQ4MWMzLCAweDFmMzUzZjhjLCAweGU4NjQ3MDNkLCAweGE3NWQ1MDc4LCAweDNlYmFiZTNhLAorCTB4ZGRiNTdjNzUsIDB4NWYyMmVjZGYsIDB4MTdmNDZmZDAsIDB4NDE1ZmZkOTEsIDB4ZmI2MTMwZTcsIDB4MTdmNzhmZWEsCisJMHhiYmU4NWEyNSwgMHg0OTEzZjg1NSwgMHhiN2UzMGU1OCwgMHgyYWJjZjU3ZiwgMHhmMDZhN2NmMiwgMHg0N2M5NTY1YywKKwkweGZkYWRkM2VkLCAweGFmZjkxMTk5LCAweDgzMjFlM2FmLCAweDdlZWY1YzNiLCAweDc1MmE3M2NmLCAweGRhZmRlYWJkLAorCTB4ZmQ4NWFiN2UsIDB4MjU3NjkzOWIsIDB4ZTkwZTlmMWYsIDB4MWRlYjBlZDQsIDB4YjdiZmYyM2UsIDB4YzdlNDFjOTgsCisJMHg5MDVjOWEyNywgMHgzNDY5Zjg4YiwgMHg5YWZlZjhmYSwgMHhlNGQxMmZkYSwgMHg3OTkxZWZlNiwgMHgyMzQ0ODFmOSwKKwkweDgxZTViZGQwLCAweGY3ZmNlNTU0LCAweDQyYmQ2MDJiLCAweDljMTZlODcxLCAweGQ3NTZhY2I3LCAweGQyMTJjNWJjLAorCTB4MmNmZWFhODcsIDB4MGJkZjg3MWIsIDB4M2VhOTFlZTgsIDB4ZGYyMDI3ZTQsIDB4ZGI2YjE1OTQsIDB4MmRhM2Y2ODcsCisJMHhhMGFlN2JmZiwgMHg2ZWIyNTk2MywgMHgyNGI5MzhjOCwgMHgxYjY1Yzg1NywgMHg5ZTQyYzg3NCwgMHhhODlkMWQ4NSwKKwkweGJmMGQxZGUwLCAweGFjZDdlZTFjLCAweDQwZmNmNDUyLCAweDA3NDNkOWJjLCAweDhhYjcxM2JiLCAweGY1MTNhYjdiLAorCTB4NTEwNGVkYmUsIDB4MTI0YjQwMGIsIDB4ODlmNDk5NWQsIDB4ZmFiNGJhZjEsIDB4MWNjODZjOWMsIDB4ZDhlM2NiYjYsCisJMHhjODUwNGYyZSwgMHhjY2Q0Yjc3ZCwgMHhmNzQzNWJmNywgMHhjMTMyZmQ1YywgMHhkMGM4MjE4YiwgMHg0MTNkNTYwOSwKKwkweDRiYzMwMzI0LCAweDJhNzBjNWMwLCAweDBjYmMzMzM0LCAweDAxNWUxOWRhLCAweDAyYWYwYzFkLCAweDg5Zjg0MzNmLAorCTB4MWVkODBkYWYsIDB4ZmY2NTZlZGMsIDB4M2EyNWYyZTksIDB4ZDc2NWNiYjIsIDB4Y2Y5N2VkMGUsIDB4M2MzNWYwNTIsCisJMHg1N2NiNTAzZSwgMHhhNjNlM2I5YywgMHg4NzcyZjcyYSwgMHg3Y2Q4Y2JjNSwgMHgyZjE1N2JlNiwgMHhlYzRmZTIyNiwKKwkweDM0ZGUwMzE3LCAweGMwMjA5MzgyLCAweDQ2MjY0Y2UzLCAweGRkNzhhNmNlLCAweDZiN2VmN2M2LCAweGJhZTVjOWMxLAorCTB4NjU0N2M0YjMsIDB4MTc3N2FkYzAsIDB4ZGE5NzgxMGMsIDB4OWU2NGY5YTEsIDB4YjkwMzI3YzIsIDB4ZTk1MWY4YzAsCisJMHg4ZGFlNDhmNSwgMHgzMGRkMmFjYiwgMHg3YjIzNGM1MCwgMHhjODRmNGQxMCwgMHhjNTk2NzVhMCwgMHhhN2E3MWNkNiwKKwkweDVmM2ZiNzIyLCAweDdhOGY1MzM2LCAweDY2YjRhY2I0LCAweDVmOTBhOTBkLCAweGU1MTU0ZWU2LCAweGQzMmYzNTg5LAorCTB4ZjNmYjdkNTEsIDB4NzE3MjhhOTcsIDB4ODFjMWE5NGQsIDB4Y2JkYWU4NWUsIDB4ZmE4MjVlNjYsIDB4MjdkY2FkZDksCisJMHhhMDExYTMzNywgMHhiNjcyNjM3YiwgMHgyYjc2MTczOCwgMHg3MjRkY2FmNywgMHgyZmJhNWFlNiwgMHg1ODBkYmE2NiwKKwkweDAwNjNiOGRmLCAweDIyZDdlY2ZjLCAweGI4YmM5MWI3LCAweGIzN2IxYzQ1LCAweDNhYWZkMDU1LCAweDJlNGI3ZGQ2LAorCTB4MmZiMzMzZDksIDB4Yjg3NDg2ZGUsIDB4MjhkZDZkNzksIDB4MThmNzliYjIsIDB4YTQ5ZmY4YzUsIDB4ODFiZGM2ZGEsCisJMHhjNDk5MzJmOCwgMHhiZjc1NTZiZCwgMHhjMTg5ZWY1OCwgMHhhZGIyNDA3MiwgMHhhZDBjYzk2OSwgMHg1OWM3NWQ0YiwKKwkweGU5ZDc3YmNjLCAweDc3NGZjZGU2LCAweDAyM2QyMDZmLCAweDE1YzcwNzM2LCAweGJlZmIxNDYzLCAweDM0YzRjYjY1LAorCTB4MWQ3MDMwZjQsIDB4MjA0NzVlNTYsIDB4MGI0ZDc3MmUsIDB4ZWU5MWRkNTYsIDB4MWJjNjg0N2EsIDB4Zjg3YzEzODgsCisJMHg3NTI5ZDEwOCwgMHg3NWNiZTg3OCwgMHhjNDNiOTQzZSwgMHhkZmI1ODFmNywgMHhiZDIzZWFiYywgMHgwNDJlMjlmNCwKKwkweGFlNGRmOWM3LCAweDQ3NWE3MWZiLCAweDUxOTAyZTkzLCAweDQ1ZmJmNDhhLCAweDA1MDA3YTJjLCAweDkwOTZiZTIxLAorCTB4MGYxMDczOTgsIDB4MWFmMDRlNmQsIDB4Nzc5NDVlNTksIDB4OTlmOWNhMzYsIDB4OGIwMzE3MmEsIDB4NGZjNDNjNzEsCisJMHg4YjU1Y2I5OSwgMHhjYzU0MjJlZSwgMHg2MDkzN2U2ZSwgMHgxNmJkYmJhNSwgMHgxNzllNjg2YiwgMHg3MjRkM2Q2OCwKKwkweGU0Zjg4MWIwLCAweGM2MDdlMjY4LCAweGM3NmU1OTRmLCAweGY0NTRmZTBhLCAweDllYjZmNzU5LCAweGEyODhjNmRiLAorCTB4YjJlNGMyMGIsIDB4YWY4OWRiNjksIDB4NmY3NDg2ZmYsIDB4NTA3MTY2M2EsIDB4M2UzYzkwZjMsIDB4ZTc5YzQ2YjYsCisJMHg0NmZhMzQ1YSwgMHg1ZDA5ZDM5NSwgMHg5YzM4M2UyNiwgMHhjNWEyZjViOCwgMHgwN2QyNmVkNCwgMHhiN2E0ZDliZCwKKwkweGRhMDZmNzI3LCAweGU4MWU3ZGM4LCAweGM4NDYzYmRlLCAweDdmZDdlYTg5LCAweDdkOGI5ZDIzLCAweGZjOGNjY2Y5LAorCTB4ZjkxMDQwOTEsIDB4ODM5YzVlMjMsIDB4OGFmNGZjNzMsIDB4YWQ1ZjA3MzgsIDB4ZWNhOTNkZTQsIDB4Nzg4YjdkZTEsCisJMHg1NzNiOGQ1NCwgMHhkZTJkYmNmNiwgMHg2ZmYwNzk4NSwgMHgxMjJiYmQwNSwgMHg3MTNlOTY3ZiwgMHg2ZmM0NTVlMywKKwkweGQ0OGJlZjkxLCAweDY5NDliNDc4LCAweDdiZDdhMmI3LCAweGYyMjdlZDM3LCAweGM1MTM1MWJkLCAweGJmYzM0NWEzLAorCTB4YTI3YTZhMzcsIDB4YzhkMWUzOTYsIDB4YjliZDQ2ZjcsIDB4YjE0YWZlNGEsIDB4YTFmOGEwOGYsIDB4YjQzNjk0NGIsCisJMHg4N2M3MGIzZiwgMHhmNzA5YWY0NiwgMHgzNWM5ZmFiNiwgMHhkMzk1MmIwZSwgMHhjN2Q2MGUyZCwgMHhlMTBlM2Q1NywKKwkweDY0ODllMWVkLCAweDllNTUxOWU2LCAweGQ4OTNhZDk3LCAweDVhZjE1NmJmLCAweDQ5YzliY2ZjLCAweDdlN2UyOGViLAorCTB4ZThjZGZiMTQsIDB4ZTk3YjhiZWYsIDB4ZGU5MTNlNGEsIDB4ODM3YmQwMTIsIDB4MmNjMTg5Y2QsIDB4YjliYTY3YmEsCisJMHhmZTQxZGYzYiwgMHg5ZDVhMWZmOCwgMHg2ODQzMGZmMCwgMHg1MDNjNmE3ZCwgMHg0YjU0YmYyNywgMHgyZDhlODdlZiwKKwkweDNmMGIzOGMyLCAweGE2NzllZWFkLCAweGQ1ZTU4Y2NkLCAweDEwNTVlOWViLCAweDEzZjM4NGE1LCAweGRmMmFhZmM4LAorCTB4YzY5NzgzMjksIDB4ZDU0M2VmMDEsIDB4MzkxNTNiMDgsIDB4YzBlOWE1MzcsIDB4MTg4Zjg2MTYsIDB4MGRiMDA4ZGIsCisJMHgyOTMwMGY5MSwgMHg0ZmNkOGJmNCwgMHgzOWM3ZDRkMiwgMHg0ZmY0ZDAyZSwgMHhkNGQyY2NhOCwgMHhmNzg4YzViNywKKwkweGZhNzFlMDMyLCAweGVmNDIyYTBiLCAweDNmOWQxMjQ4LCAweDAwODNmNGQxLCAweGJkMDhhZGZlLCAweDdlMjdiOTE3LAorCTB4NGY3ZTRlZWEsIDB4M2NlMDZmZTIsIDB4MjU2NWYyNDUsIDB4NzkyNmY2OWEsIDB4NWRmYzRjYWIsIDB4NDM1ZWE1ZmQsCisJMHhhNjUyOWZjZiwgMHhiOTU2ZjExYiwgMHg5YzFjZmQxYiwgMHhiNjlmNDI2NywgMHgwMWUwMjYzZSwgMHg1YmIzMTdlYSwKKwkweDk4NGJjOWFmLCAweDg1ZjJkYTZjLCAweDYyOWU0YTc5LCAweGU0ZDU4YzJjLCAweDJlZjEwNjI5LCAweDYxZDhmZWY4LAorCTB4MDU0NWYzMWQsIDB4YmFhYWZjZTQsIDB4MDA2Y2YwOGMsIDB4NmYxYTJkYWYsIDB4NWRmODQwYzcsIDB4MWM1YWM2YzcsCisJMHg0MjZhOTZmNCwgMHhjOTMyY2JjZiwgMHg4YjRiYWE0MSwgMHhiNWIzNTFmZiwgMHhkNmVkMWZmOCwgMHg1MmNjN2JlMiwKKwkweDliZDNiZTJkLCAweGIwYmVmOGI1LCAweDRjZDc4YjQ1LCAweGQ5NmYxNjhmLCAweGRhNjgyNmViLCAweDM0NmJkYmRiLAorCTB4NTc4ZGJjZTUsIDB4ZTQ1ZmRhNjgsIDB4OGYyOWExOWQsIDB4NGQ3YWYxN2IsIDB4ODU4ZWMyZmIsIDB4YWVlMmZhOWEsCisJMHg5NTdhOWFlNSwgMHg4M2UzODZjZiwgMHgxMWQ1YmVmMSwgMHhkZDAzYTZmYywgMHg3NGEwZjg2OSwgMHhmMzM1Y2ZlNywKKwkweDlmZjQ1MGZkLCAweDA1ZThhNzlmLCAweDJiZDdmZTg1LCAweGY4ZGRlNTc2LCAweGI4OTJmN2MzLCAweDdhMTU4YjRlLAorCTB4NTBkZjMwNzAsIDB4ZWU3OGUwNmQsIDB4NmQ3MjViM2QsIDB4YzUwNWU5MWMsIDB4N2IxNGI5ZGUsIDB4ODk0ZjM5MDcsCisJMHgxZDk0NTViMiwgMHhhMmJmNzE3ZSwgMHgzNmFiOWY2NCwgMHgyY2Y3NDZkZSwgMHg4YThhZmRjNCwgMHgwOWI1ZWRjMywKKwkweDFkZTIzZWQ0LCAweDQ5NGFmNGQ2LCAweGY5MWRkZTczLCAweDY3YTY2YjJlLCAweGQxMjA5Y2FkLCAweDNmNzE0NGJkLAorCTB4ODQxZWYyMzEsIDB4ZGVhYjNlZmEsIDB4MjczOWEzMTksIDB4OTZiZGVlMWYsIDB4NzhjMjVmOWEsIDB4MmYxNDhjMDEsCisJMHgzZWZjY2NlOCwgMHg3MjFmZGEzMSwgMHg1ZmQ5OTQ2YywgMHhmNmZmYjM3MywgMHg3OWNkYzk2NywgMHhmZWNjNmJhNywKKwkweGVjZWZlMjBjLCAweDc5ZjVlZWIxLCAweDNhYTNiNzg4LCAweDNkZmQ4ZDg3LCAweDAwZDZmZGU1LCAweDJmZGY4YzZkLAorCTB4M2NhNGNjZjUsIDB4YmI4NjAwZTksIDB4ZGZkNGQ3OTQsIDB4YmQyNjYzYjMsIDB4NWJlNWM0NWIsIDB4YWMyMjE1MDMsCisJMHhlNjhmM2ZhNiwgMHg3MWE0MWZiOSwgMHhiYmQ2NDgwZSwgMHhiYmVmYjE0YiwgMHgyMGNmM2UxMywgMHg3M2EyNjY3YiwKKwkweGZmM2UxMmZlLCAweGZjMmYzODdlLCAweGVlMTQ3YmZjLCAweDQwNmRmNTBmLCAweDc5ZjBmMzY3LCAweDhlMjVjZmVlLAorCTB4YzFhNzNlNTMsIDB4NzdlNGMyYWEsIDB4NGY3OTQxOWQsIDB4YjliNmUyMmEsIDB4YjhkNGJlMGEsIDB4ZmYzMjhlNmQsCisJMHgyOTYyMWMwMSwgMHg1ZGI5ZjNlYSwgMHhhY2JjNjY3ZiwgMHhlMjUzZWI0OCwgMHgxNTg3NjZiZCwgMHhhYzcxYmZjNywKKwkweDdiZWY4NGE1LCAweDIyMWQ0YjM5LCAweGI4ZTM1N2RlLCAweGIxZjdmMjMxLCAweDg3YmE2N2IzLCAweDg4ZWQyMmI1LAorCTB4OTc4NjllMjYsIDB4NTdjYzg3OTIsIDB4NDJjNWU2NDYsIDB4MWZlMzE2ZmIsIDB4NzZjYjFmNTgsIDB4NzRmYWMwZTgsCisJMHhjNjg2M2ZjZSwgMHg4NWY5Y2EzZiwgMHhmYmRhY2RiOSwgMHgzZTViZjNkZCwgMHgwMmRmZjBkMiwgMHhmYTlhMjdjZiwKKwkweDMwZDA0YTQwLCAweDc4MWZmNzA2LCAweDFiZDRmNDc1LCAweGFmZmQ3ZjEwLCAweDllMjgyYTk4LCAweGU0ZjViYTQ1LAorCTB4MGZjNjg3OTUsIDB4ODk3Nzk3ZGMsIDB4YjRjZTFiZjAsIDB4MWQ3OWNmY2YsIDB4NWFmZGNhYmQsIDB4NWJmYjlmNzUsCisJMHhkMDM5NzFmNywgMHhlZmI4ODgxYSwgMHhiZmM0ZDFlNCwgMHgwOWZlMzQyYSwgMHgwZThmYzlmMiwgMHg0MzFjMjM0YSwKKwkweGU3NjY3M2U1LCAweDU3YTkzODhiLCAweGFiZGE3Nzc5LCAweDU1ZWQzYmJjLCAweDJhZjY4OWRlLCAweDk1N2I0MmVmLAorCTB4YmJlYWExNzcsIDB4OWMwOTVlZGQsIDB4OGU2NGJmNzQsIDB4ODE2YTdhZTQsIDB4MGY3NmVmYzQsIDB4OTY5YjNlZDEsCisJMHg1ZGU4OGIwNywgMHg2MDcxNTM2MywgMHhiYmYzMjQ5ZSwgMHg3ZGY0MjNkZCwgMHg0NWJiNzc4OCwgMHg2OWY0OTU5MiwKKwkweDZlZjQzNWVhLCAweGNmMDhmMGY3LCAweGQ5ZDhiMjUxLCAweDUwZDc4OWY5LCAweDI4ZDg3MGJjLCAweGM1ZjRhM2U0LAorCTB4N2JkMjY2NmYsIDB4ZGQ1M2M3YmQsIDB4M2ZiZjg5YzcsIDB4ZjMxZjY0OTUsIDB4OWYxMmViZjMsIDB4NjAzMzgzMmIsCisJMHhlZjE2NzE5YywgMHgxM2NiYmY3YSwgMHhmMzI3MzRlNywgMHgwYTg5YjljNCwgMHhiZDBiZTY0NywgMHg5Y2IwNGE1NiwKKwkweDJlNmY3MmU4LCAweDY4ZGFiYmJmLCAweDM4NTc3N2UyLCAweDc2MTc1MzlmLCAweDdkZjIyMjFmLCAweDRkMWZjOTVjLAorCTB4NmExZmQyM2UsIDB4NWYyMTI3ZGUsIDB4YmJkMzM3OWMsIDB4Y2E2NzVhMzksIDB4NmVmMTI2ZmQsIDB4YTBjZmUwMmUsCisJMHgwZjc0NzY3NywgMHhiZGYyNDVjYSwgMHgxZGUyOWMxYiwgMHhmMGE2ZGU1ZSwgMHhmOTA5MzBmNywgMHg0NWJkM2RjYSwKKwkweGI3YTc3OWEwLCAweDdlYzBlN2IyLCAweGU1YWYyN2QyLCAweDUzZjM5M2I5LCAweDU2YzdlZjQzLCAweDdmNjc2ZmM2LAorCTB4YzZkZjIwYWYsIDB4Nzk3YWUyZjMsIDB4ZWUxN2E4ZmYsIDB4Yzc5Y2ZhMjQsIDB4N2U1NjYxN2MsIDB4ZDdmZmY0NzksCisJMHhmNWJjMzg2MCwgMHg1YTNmZjYyZiwgMHhmNzdhMTk5MCwgMHhhZGRlZjYxNiwgMHhhZjJjM2YyMCwgMHgzNDNmYWVhNywKKwkweDQyZTVlOWNlLCAweGU1YTk3YmNkLCAweDkzZGQ4ZjQzLCAweDc0ODY3MjRiLCAweDU5NDhmOTExLCAweDg4NjMzZjlhLAorCTB4MDVmM2QzZmUsIDB4Nzc0ZmVmZmQsIDB4OTdmOWEwNGQsIDB4NjBiYzhiMzcsIDB4NmZkYTZmODgsIDB4ZGNlODk4ZjksCisJMHgzZWYyMTk2MywgMHg3MjNmZGFiZiwgMHhmNWI3MmI5ZiwgMHg5ZjcwM2UzMCwgMHg2MTdmNjhmMywgMHhmMDhjYmNmYiwKKwkweGJmYjNlZWE1LCAweDA1YTNlZjdiLCAweGRmZGY3M2I2LCAweDZlNzc3ZGY3LCAweDZkNzE4MTFhLCAweDc2Nzk1MGQyLAorCTB4N2U2MTNlYjQsIDB4M2ZlZDQ5OTksIDB4OGZlZGFmNTYsIDB4YjFlNTM5MGUsIDB4ZDFkZTQ4YmIsIDB4ZTI1NGU5NmYsCisJMHhjNGNiYjIxZSwgMHhlZTVkYWExNywgMHgyOTIwZTI1NCwgMHgwMmVkODNiMCwgMHg3MTcyNGJjZCwgMHhmYjYxZTRiNywKKwkweGRhM2JlNmE4LCAweDk0N2ZiNDI0LCAweDYxYWY3MDU3LCAweDY4NWYyMTdiLCAweDc3NWYxMDcxLCAweDQ5ZjllZjIyLAorCTB4NThjZWY0MWUsIDB4YzQ0NzczY2UsIDB4NzU4YjNmZDcsIDB4YmM3ODQ0ZGYsIDB4YTMzNWFmZjksIDB4ZjJkZWZlMjgsCisJMHgzODk0MmI5NywgMHg3MmFiZDg0ZSwgMHg2OWNiM2Y4NSwgMHg0MTQ3ZGE3ZSwgMHg5OTZkZjMwMiwgMHg3MzBhYmViMiwKKwkweDU1YzlmYjMzLCAweDVlNDU5MWUwLCAweGFjOTNjOTQzLCAweGRmZjFjMWRmLCAweDE0MWEwMWZmLCAweDQzZDBhYWFmLAorCTB4MDAwMDQzZDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdXNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYTk4ZjhhLCAweDMyZThmNDMwLAotCTB4MzFlOGE0MzAsIDB4NDNkNGRjMzAsIDB4Y2YxMmQzODgsIDB4YmY0Y2EyZTEsIDB4ODMwMzBiMzAsIDB4MDM4YjEwMjgsCi0JMHg3ZjEwMjRiMSwgMHhmODYwNjQ2MywgMHg3ZWJjNDhjZSwgMHhiYjA0MTE1ZSwgMHg4MTgxODA0NSwgMHgwNzBmYzgwZiwKLQkweDE5MDVmZmQyLCAweDMzMGIzZTE4LCAweGY5MDNmMDMwLCAweDZkZmM4MGIzLCAweDg4MDg3YzQwLCAweDM3NjI4MGMzLAotCTB4MjA2N2Y0ODAsIDB4MDJjNDBmYmUsIDB4MTdjZGY4MjIsIDB4NDE3ZjIwMjQsIDB4MDdmZjk1MDgsIDB4MTA0MmZmOGQsCi0JMHg2MTYzN2ViZiwgMHgwNDk2ZjJmYywgMHg0ZGUxYjFlNCwgMHgwZjhjZGMwNCwgMHhlZjQwYTc3ZiwgMHg2YTg3ZTA0MCwKLQkweDU1N2Q3Y2E4LCAweGEwMmIwNjA2LCAweDg0M2E4NzU4LCAweDdlNDkwOGZmLCAweDQwY2M1MDE2LCAweDkzZTZjMjE1LAotCTB4MDU1MDYwNjcsIDB4NjFhYjFmZjIsIDB4MjgxZjk3MzcsIDB4NWY5NDA2YWYsIDB4MDAwNzM1MDYsIDB4MTVlNWFjNmYsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTg5NDczOGEsIDB4MTgzNTdhMTgsCisJMHgzMjZiMzYxOCwgMHgzMTY4NjgzMCwgMHgyMDMxODgzMCwgMHhhZjg1NjhlNCwgMHg5ZmE2NTM3MSwgMHg4MTgxOTU5YiwKKwkweDgxZjk4ODE3LCAweGQ3ODgxMDU4LCAweDZjMzAzMTMzLCAweGZmNWUyMjYwLCAweGZiMDQ1MTExLCAweGMzMDMyMDllLAorCTB4MTk3ZjIwNTEsIDB4NjYxNGVlOTAsIDB4NjQwNTU4NjAsIDB4MmZlMjAzMWYsIDB4MTA4MGJlNDAsIDB4MTAwYzgzMDMsCisJMHg2MDYxMTVmZiwgMHhjMWQyMDUzMCwgMHhjNDAzNmM0MCwgMHg5YmYxNDVjNywgMHg3YzgwODI3ZiwgMHhiZjJhMDhiYywKKwkweDI3OWY4ZDFiLCAweDI1ZmY1ZjhjLCAweDBmZjJmYzExLCAweGMzNjNjODA4LCAweGM3ZTQxNjMyLCAweDdhMDUyMjQ3LAorCTB4MjkzNzAyMDcsIDB4Y2E4ZmYyYTIsIDB4NTQzYzMwMzMsIDB4NTFkMDYwNjAsIDB4OTE5YmYwODIsIDB4NjI4MGVkZTQsCisJMHhlYzIxZTRjNywgMHhiOGMwOTIyOSwgMHgyOGI1Y2EwNywgMHgyYTc3Mzc2MiwgMHg1MDA0ZmU1MCwgMHgzNDg5NGJjZSwKKwkweDQxZDNkY2Y3LCAweDg0MzRhZmU1LCAweDNlYmMwMGQwLCAweDAzYThlNDE0LCAweDAwMDAwM2E4CiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDUxNDc4MDksIDB4ZjRmNTcwZGEsIDB4NzMyNjRjZjQsCi0JMHgxMDkwOTI2NCwgMHhhNzA5MzBhZSwgMHhlMTVjMzgwYSwgMHgxMDg0Y2EzMCwgMHhhOGVhMjQxNiwgMHgxMzg4YTg4OCwKLQkweDJlNDIxMDgxLCAweGY1NzE3NWQxLCAweDExYzNhN2ZiLCAweDllMzc1OTQxLCAweDFkNDdmYWNiLCAweGEyMmNkYzEwLAotCTB4NjAxODg4MDYsIDB4YjIwMGMxYzAsIDB4MTc2MWJiOGEsIDB4YzM2M2Q3MTUsIDB4MDE5MjFhMGQsIDB4ZTVjNThmMTUsCi0JMHhlYWFkZjdhYiwgMHg0NGNlZWU5OSwgMHhlZmYzZWJhMiwgMHhlM2ZkZmI3ZSwgMHg1NzU0NTNlMywgMHhlZjU1NWJmNSwKLQkweDVkYmQ2ZjVkLCAweDcxMDI0YTMxLCAweDAyZTQyNmY2LCAweGYyMTFjNmZjLCAweDQ5MDg0ODhjLCAweGUzNmQ5Njg5LAotCTB4MTc0OWM3YzMsIDB4OTJjZGU0NDIsIDB4ODg0MGFkNmIsIDB4MzQzZGJhZjAsIDB4ZmIyMTA0NmUsIDB4MzMwMTA5NTYsCi0JMHg1ODc2ODdhZCwgMHhkM2Y1YTEwOSwgMHhjYzA3ZDczNSwgMHhkNDNlYjQxOSwgMHg5YWZhYzFlYywgMHhiZWU3YWMxYywKLQkweDQ4YzNhZWZhLCAweDhhYWZhNWViLCAweDc2MWJhODQ2LCAweGRiMzQ3MjljLCAweDM3MzcyOTA4LCAweDdkMDU3MjNkLAotCTB4MjQ1NTdlMWUsIDB4YzQ1MGU5YWIsIDB4YjI0MGM1MzUsIDB4NDcxZTM5MDgsIDB4YWQxOTZmZDgsIDB4Njg1MjEyYTcsCi0JMHg1NWQyZDU2MSwgMHgzY2MyNjczYiwgMHhjNGNjMWE4YSwgMHg2ZTk0ZTE0MiwgMHgxNWVkN2I5OSwgMHhhZjc3M2ViNCwKLQkweGU5NGJhMDQ0LCAweDc3NTM0YWRhLCAweDEwMTc5ZjVhLCAweDY4YmVhMGVhLCAweDRlMzg4N2M3LCAweDU0NTI3OGRiLAotCTB4NGY5MDg4MzcsIDB4MzVjNDcxZmQsIDB4NGQxZGQ2ODAsIDB4ZTdkMTM3YTksIDB4MTMwZDgxYzUsIDB4N2FmMTdmYTEsCi0JMHhmZGEwNmRjMSwgMHg3ZTc2NmI4YiwgMHhlYjhiZjAwNCwgMHg4NTIyYmVhNSwgMHg0YWQ2YmYzZiwgMHhkOGQ5MDM1YywKLQkweDYzYWMwODE3LCAweGRmMzBiNWNlLCAweGM0NDgzZmQyLCAweGU3NDVlYjRjLCAweGMwMTEzNmVmLCAweGU0ZGFiMTkxLAotCTB4OGZmOGMzYjUsIDB4MTg3NjVjOWEsIDB4NTFjNzE2YTcsIDB4N2JmYTU5ZjAsIDB4YWY3ZDBlM2EsIDB4MGRjMTY1ZWMsCi0JMHgxMDMzMmI0YiwgMHg3NWE3Y2MxZiwgMHhmM2ZhNjU4YiwgMHhhNTU3NTgzNiwgMHhiZmJjM2ZhOSwgMHhmNDEzNDFlNSwKLQkweGQ4MjgxYjliLCAweGZjYzE3MTZjLCAweGMyMjY5OTU2LCAweDk5NTY2YjNjLCAweGUxNDUwNzBhLCAweDUxN2RhZmNkLAotCTB4MmJlM2FmMzMsIDB4YTlmNTc0ZmIsIDB4YTdlNWY1ZGEsIDB4NzM1YThhN2UsIDB4ODg0YzVlYjQsIDB4ZjMwNmNlYTcsCi0JMHgxZmFlOTgwZSwgMHg1NDdlN2QxYywgMHhjZjdhNDQ0OCwgMHgyYjg5MTVhZiwgMHg1MjlmMGEyZSwgMHhlZmNiOWYxZSwKLQkweDFmMDI3ZmQyLCAweGQ2MDdiNzZjLCAweGI1ZTk0NDY2LCAweDhlZmYwOWMwLCAweDkzYWNlYmQyLCAweGNlMThjZmQzLAotCTB4Y2E1N2MzNTIsIDB4NzQwZTgwNDcsIDB4Mjc3ZWQ1M2UsIDB4ZDNmOThmOTYsIDB4ZWZjMjdjYjAsIDB4ZTUzZGJjNDIsCi0JMHg0YWU1ODgxZiwgMHgzZjlmMWJiZiwgMHg2NThkMWZlZCwgMHhlNTgzZGY4ZCwgMHg1ODQ5ZmViMywgMHhlYzVlZmMwNiwKLQkweDFkM2ZkYWI3LCAweDFmN2UzNWNiLCAweDVmYzE3ZjNlLCAweGJmYWQ2NTg0LCAweGYzYWY5ZjAyLCAweGJkNzJjNDJmLAotCTB4MmZlN2M2NWYsIDB4NTk2MTk3ZmIsIDB4NzJjNmFmZTcsIDB4OTYyNTdmYTMsIDB4ZjYwMGZlZjUsIDB4ZDdlOWNjZGIsCi0JMHhlN2MzYWZlMCwgMHg1ODBkZmQ1YiwgMHgyYzIxZmQwNiwgMHg2MmY3Zjg3NywgMHhkNWUzODJiOSwgMHg4YzcyNGQ5MSwKLQkweDBmMGUyZjE0LCAweDIwNzE1MjcxLCAweDFjOWVmOTQ5LCAweGJjOTNkNjg5LCAweDQzM2E5ZWFjLCAweDdhZDEzMWNlLAotCTB4MjlkNjhmYWEsIDB4ODQ5N2JhOWUsIDB4ZGViNGNjNzIsIDB4YTdiNTgyYmQsIDB4YzdjNjQwM2YsIDB4Y2NiYTdhZDEsCi0JMHg3ODU3MzNkYSwgMHgzZDY4NWJjNiwgMHhmN2I1OWFiMywgMHhjN2M3OTFhZiwgMHgwMGZmN2FkMywgMHg3ZDc0YmY2YiwKLQkweGQ2OTViYzY4LCAweGVkNjNhZDJmLCAweGQ3MjQ4MjQzLCAweDQyNDNlYjQ2LCAweDlmNmMzZWFjLCAweGViNGVkNzI3LAotCTB4M2Q1ODlhYzMsIDB4ZDczOTIzZWIsIDB4Y2Q1OWViNDEsIDB4MmRiMWZkZWMsIDB4NWEwNGRjYTEsIDB4ZWQ2NjFiMWYsCi0JMHgxNjZmOWQ1NywgMHg2N2Y4MzE1ZCwgMHg0NTliZTRiMywgMHhmMjAzMmQyOCwgMHgxYmIxOGYxNCwgMHg3NzdjOWJhZCwKLQkweDk3YzUzNzEzLCAweDFjNjNkNTNjLCAweGM5MjNmMTQzLCAweGJlNGJiZWQ4LCAweDRjMWJkYjFkLCAweDI3YmZiNjMyLAotCTB4NTZmYjYyMTcsIDB4MjdlZDgwMjksIDB4ZGY2YzcyZTUsIDB4ZmI2MDBhNmEsIDB4YWM0MmYyYjcsIDB4YjYxMGE1MDcsCi0JMHhiMTJiMmFkYiwgMHhjMjE0ZDA3ZiwgMHg4N2NhZjRmNiwgMHhkNDg3N2RiMCwgMHhjYWVlZWQ4YywgMHg4NzdkYjFjNywKLQkweDFmZGIxOWE5LCAweDk5ZTM1MjViLCAweDBiMGZlYjQwLCAweDJmODFhN2JlLCAweDIyYmUwYjE3LCAweGFkZjgwN2QyLAotCTB4Zjk0YmNkMmUsIDB4ZDMyMDRhYWQsIDB4MDExN2JmODEsIDB4YWFmNmQyNTMsIDB4NDdkNDI2NmUsIDB4N2FjZTNmOWIsCi0JMHg2ZjM4MTQ1ZSwgMHhlMTdhODE3NiwgMHgyMDY1MGYwYiwgMHg4ZTExZTc5YywgMHgxNzg4ZTE0NCwgMHhjOWY1OTM4NywKLQkweGFjOWMwZDY4LCAweDM4MTQ4YTRmLCAweGE1OGUxMWViLCAweDdmMzY3MDczLCAweDlmM2I1NjMyLCAweDM4MTU4YTRmLAotCTB4MTQ5MTkyYWYsIDB4ZWI3M2JkOGUsIDB4YjY1YmZhY2EsIDB4MmI3ZjNlNzYsIDB4YzBlY2UwNTEsIDB4NmU3NjI0ZjksCi0JMHhiNGM3MGQzZSwgMHgxNjM4NjlmOCwgMHgzODliY2ZjMSwgMHhjZGNlOTQ5ZiwgMHgyZDcxZjQ2NywgMHg4ZjFmNDY3ZSwKLQkweGUxMDlhN2UwLCAweDljMWNlYjc0LCAweGZjNWFlMzg2LCAweGUwOGYxYzM0LCAweGQzODQwM2U3LCAweDFhZWI3M2FiLAotCTB4OWY4YjQyN2QsIDB4ZjgyMjI3ZDEsIDB4YzlmODhjMzksIDB4YWQ5YzFjZTgsIDB4ZDlmOGI1YTcsIDB4OWY4MjNhN2EsCi0JMHhiZjRlMTBjZiwgMHg2YzZiYWRjZSwgMHg2MzNmMTZhYiwgMHhmOWY4MjM1YiwgMHg0OTc1ZDcwMiwgMHg2ZDZjZTBlNywKLQkweDZiNjdlMmQ1LCAweGRmM2YwNDZiLCAweDlkYzE5YzIxLCAweDM2ZDhkNzViLCAweGI2YzY3ZTJkLCAweDEyNjNmMDQ1LAotCTB4Y2VkMGNlMDAsIDB4YTVmODI3Y2QsIDB4MmZjMTNmMTYsIDB4NDA0OWY4MjMsIDB4MzczYjIzMzgsIDB4NWE3M2VjOWYsCi0JMHg4YjlmNjRmYywgMHhlMTBkMjdlMCwgMHg5YzFjZTk4YywgMHg3ZTJkMzllMCwgMHhmODIyZTc4MiwgMHg1NzM4NDBjOSwKLQkweGQ5NWQ2ZTc2LCAweDkzZjE2OTVmLCAweDNmMDQ1NWZkLCAweGY3NDAwYTk3LCAweDQyMWYzZTFjLCAweDg2M2JkOGUxLAotCTB4MmQzYmUzYjMsIDB4MTc3Yzc2N2UsIDB4OWM3MGNmYzEsIDB4Y2Y5ZjFlNGYsIDB4ZjU1Y2UwNDUsIDB4YWU3ZTJkMGYsCi0JMHgzZjA0NDdmYSwgMHg3MjY3MDhkOSwgMHhmOGVjZTBlNywgMHgzYjNmMTY4NywgMHg0ZmMxMTFmZSwgMHg5YWViYWUxZSwKLQkweGFhZWJhZGNlLCAweDVjZmM1YTBiLCAweDY3ZTE4MTc1LCAweGRjYmFkMWQ0LCAweDZkNGVkYTA0LCAweGFmYTQ1YmEzLAotCTB4ZjFlZjNiOGMsIDB4M2EyZWI0MDgsIDB4YmE3NDVkNTksIDB4YTIyZGY4MDksIDB4MjY5MDhmZTIsIDB4YjdkZjQ4OGYsCi0JMHhmNjFjNGZhZCwgMHgyNWZiNTExMCwgMHg3NTgyNmZlMywgMHhhNjk3YTlkOSwgMHg0NjEyNGJmNiwgMHhhMGZjNmJjNywKLQkweGE2OTI0ZjQ0LCAweGJiYTkzYzllLCAweDM3OGE3ZmE2LCAweDc1ZGVkMzUzLCAweGY2OWFhNWZhLCAweDlhNjFiZTZlLAotCTB4YjFhMjhmN2EsIDB4MmFiZGZlOWEsIDB4YmRlYTZiYzYsIDB4ZTlhZDVlMTcsIDB4YTBkZjIxOWYsIDB4NzY1OWY3YTksCi0JMHhiZjdmYTZhYiwgMHhlZDM1M2JlYSwgMHg2YjE2NTYwMywgMHgyYzA5MmZkYSwgMHhhYjJmZDRkMCwgMHhmZmE2YTVmZCwKLQkweDlhNDViYWUwLCAweDFlMWJjYmY2LCAweDBkMGZiNGQyLCAweDBmYTlhNjNkLCAweGE2YjRmYmRmLCAweGQ1YTZjOGZmLAotCTB4MDc1MWY2OWEsIDB4YzdkYTY5ZDcsIDB4ZDRkNDZmMzQsIDB4NTViOTM4YWYsIDB4ZjBjYWZmZDMsIDB4YjhmYTlhMWIsCi0JMHhmNGQyZGZhZiwgMHgxZTczOTRhNywgMHg0NWQ3OGNiZiwgMHhmYjgyMGI5MCwgMHgwOTliYjkwMiwgMHhkZDkwYzVmZCwKLQkweDc3NTM3NTg0LCAweGQ4MjdkYjFiLCAweDI5NDc1ZDBiLCAweDlmMDY0ZGRkLCAweDgxMmQwYmFiLCAweGZkZGE4NGU2LAotCTB4MDM0NWVlOWMsIDB4ZGM1ZjI5OWEsIDB4YzAzN2Q2M2IsIDB4NmJkZjlmNDksIDB4OGNlZTVkZjIsIDB4N2U1MDlmZTEsCi0JMHg5NDFhNDgxMSwgMHhmYTk0MDMyZSwgMHhjNjI1MDdmNiwgMHg5YzdiZTNhZiwgMHhiZTg4N2ZlZiwgMHhmNzA4NmU1ZiwKLQkweGJmZjVhNDRmLCAweGMwMDI3MjFiLCAweGQ0MDgyZmRmLCAweDE1N2NhN2ViLCAweGU4MGE5MjJmLCAweDFlMjY2ZjE3LAotCTB4MzMwN2RmZTAsIDB4NTU5NzllYjIsIDB4MTdhY2JjZmMsIDB4MGEyMTUzOTUsIDB4NGJlNDk5NzcsIDB4NWQ2NDNmMDMsCi0JMHhmODMyYmJlNSwgMHhlOGJkNTUyOSwgMHhmMjEzYmFiYSwgMHg0ODZlZjBhMiwgMHhlZmRmNGJlZSwgMHhhM2U2OTg1NSwKLQkweGVhMjZjY2YwLCAweDM3YzdhYmU3LCAweGUxMDdmMWQxLCAweGNmYzA3NWY4LCAweDk0ZmM2MTliLCAweDMzOWJlM2Y2LAotCTB4OGZjNjZiNDcsIDB4OGNkMjJmNGIsIDB4ZTNhMjY3MWYsIDB4YWZiZWE5M2IsIDB4NGY4Zjk4ZmMsIDB4OTA5NjMyODksCi0JMHgzOGM3YzI2ZCwgMHgwOGJkMzliZSwgMHg0NGQwN2ZjNywgMHhmMWVhM2RmNywgMHg4N2UzMjNlMywgMHgzYTdiZmQ2MCwKLQkweDU4ZTY3ZjVhLCAweDhiZDNmYWVkLCAweGIxMzdlYmI1LCAweDc5NTViZmY1LCAweDhmMWY4ZjhjLCAweDM4NWI3ZmViLAotCTB4NWU5ZmQ2YzYsIDB4NjY2ZmQ2Y2MsIDB4M2JlMzIzNzAsIDB4ODI2ZmY4MjIsIDB4ZDFkN2JmZjUsIDB4NmI2NGZiZmEsCi0JMHg0NGJiZGZkNywgMHgxYjMzN2ViYiwgMHhhNzk1YWZmZiwgMHgxYzM2ZjhmOSwgMHgzNGUxNDNmZiwgMHgxMmVmN2Y1YiwKLQkweGY2NjRkZjFjLCAweDRjN2Y4MWI5LCAweDAyMmJlMjNkLCAweDkzZDI3Yzc0LCAweGMwYWVhZTJhLCAweDI4MWM3NDJlLAotCTB4YTY1MTI2MDcsIDB4MjE0OWU0MjcsIDB4NmY3MWU3MTMsIDB4NzNiN2UzM2MsIDB4NTBkZjk0ZjEsIDB4OWNmOGM5MWYsCi0JMHhhM2U2YTgwNCwgMHhjZTMyOWNmYiwgMHhlN2Q3ZjNmYiwgMHg2MTZmNDA5OCwgMHhjY2VmZGQzYiwgMHhkZDlkNTNlMSwKLQkweDkzN2YyMjIwLCAweDdlODFjYzI3LCAweDBkYWRiZTc0LCAweGQ5ZjUwY2EyLCAweDAwMTk1YzRmLCAweDI2NmU1OGZkLAotCTB4M2RlMTc4NzcsIDB4ZjNjMTA5MjMsIDB4NWUwZTRmNjMsIDB4YmU5NzVlYWQsIDB4MWQyZDUzOWMsIDB4MTdjOGQ2NmYsCi0JMHg5ZTNjOGY5YiwgMHhmM2EwYWMwYywgMHgxODI2MDNjYiwgMHhhNzFmYWQxOSwgMHg5OGQ4MjlmYiwgMHgxMmZiYTYxZSwKLQkweDc0NDg0ZjI4LCAweDI4ZmNmYTNjLCAweDAxOTE2ZmRkLCAweGM0YTliOTZhLCAweDc5ZWM4OGY3LCAweGZmOWQyZmI3LAotCTB4M2NmY2EyMzQsIDB4NTFkYmNlYjgsIDB4MjMzYzI4YTQsIDB4MWFmMWZmYzMsIDB4OThmNDAwMjEsIDB4ZjlmNzRkNTMsCi0JMHgzNzJmZjkyYSwgMHgxNzBlZjkzMywgMHgwMmQ1ODEwOCwgMHhmZjdkMmJjNywgMHg4MTNlZmU2NiwgMHgzM2Y4NTFmOSwKLQkweDhmOWRlYzlkLCAweDQ3YjM1Yzc3LCAweGVkZmRkMDcwLCAweDljMGQ2NGNhLCAweDY5NjA0ODViLCAweGI2ZmY3ZDFhLAotCTB4NjIyNTNiMTUsIDB4ZTgyOGJlMDAsIDB4ZTVmODAwYjUsIDB4NzA4NDg5N2UsIDB4NDI5Y2RhOWYsIDB4YTA2NjcxMDYsCi0JMHgwNjRlN2RmMCwgMHhkMmU5ZTZmZiwgMHg5YzE1NjZkMSwgMHhjNzljNTI5OSwgMHhmMzMzZTc0YiwgMHg3YmU3MTEzZSwKLQkweGRlZGI0ZjhiLCAweDMxZWFjM2JjLCAweGNhZTVhMTBjLCAweDQ5NDIyNWNmLCAweGI2OTE1YjdlLCAweDZkMGFmNmZkLAotCTB4ZGE4NThlZmQsIDB4ZWUwZjVkM2EsIDB4ZmQ2NDBiZjMsIDB4YmExY2JhNzMsIDB4ZWIyMzNiY2UsIDB4ZjVhNzBiYTYsCi0JMHhkNjZkYmM1OSwgMHhkMGQ2NDkzMiwgMHg0ZDczNmU5MSwgMHgxMzNkYmM1OSwgMHg0ZjEwNGVkMCwgMHhmNjlmN2VmOCwKLQkweDY4MWYyOWZkLCAweGVhNTc3M2VhLCAweGY4YmU3MWUwLCAweGRmZmZmNGZmLCAweDg2ZjJmZjRkLCAweDU1NDdjNTljLAotCTB4OWJhZDJhZjMsIDB4YWFhOGY4YmMsIDB4ZWJkYWZjZGYsIDB4ODE3OWY1MzUsIDB4ZTdmZDM0NWIsIDB4YjRkMDJjYWUsCi0JMHhhNzllYTljZiwgMHhlY2I1OWY2OSwgMHg0MGJkNGQyZSwgMHhmZmQzNGZiZSwgMHg5YTk1ODU4ZSwgMHg5NjJiZGJmNiwKLQkweDJiNmZkYTZiLCAweGJmNTM1NDdhLCAweDRkNWJmN2M1LCAweGFmYTc5YmZmLCAweDNiMGJiNGQyLCAweDQ2NmVmNWU2LAotCTB4ZGRlYmU5YmIsIDB4ZjRmZTkyOGQsIDB4N2MwMjY2MDcsIDB4YzJiM2YwYTYsIDB4NjlmZDI3ZWYsIDB4NzdlYTdlNTgsCi0JMHg3YTA5NTk2MSwgMHhjMzc3ZWE5OCwgMHhhZjk2NTYxNiwgMHhmYTBkZTgyZSwgMHgxM2ZmZTE1YywgMHhlODNhNDU1MiwKLQkweGViM2YzZDRiLCAweDRmOWVhZmY1LCAweDJjNDdhZmU5LCAweDRiMjk0MzNmLCAweDNiMDVlMjA0LCAweDY0ZmRjNmQ2LAotCTB4ZGMzN2Y5ZTUsIDB4MGNlNzgyY2UsIDB4Yzk4OTg5NjUsIDB4NmVjNmM5NjUsIDB4ZWEwMzg5ZTMsIDB4YjYxNWZlYTEsCi0JMHgzYTkyZTE4ZSwgMHgyMDQxZDcwMSwgMHg3NDAyOWE0YSwgMHg5NzZkNDFlYiwgMHgzNDdkYWU5YSwgMHgyOWQ5NmNmMywKLQkweDIwNjVmOGUyLCAweGRjYzA2MzkzLCAweDYwMTg3Nzc4LCAweGZhNjM1MGZjLCAweDNlNjE4MzhkLCAweGRlYjFkNzllLAotCTB4NTZmZTgyOTAsIDB4ZTJkMjdmOGIsIDB4N2YwMGZkYTMsIDB4ZmE0ZjJjNWUsIDB4ZGM3OTYzYTcsIDB4YThmMmMzZWYsCi0JMHhjM2NiMDhiZiwgMHg5YjJjMGFmZSwgMHhmY2IxMGJmZCwgMHhmOTYzMmZjNCwgMHg5NjE5N2Y5MSwgMHg2MzU3ZjU3ZiwKLQkweDEyYmZkMDc5LCAweDAxZmNmN2NiLCAweDFlZmQ1YjJjLCAweGZkM2UxNTJjLCAweDE4ZWJhMTRmLCAweGFlOWNiZmMzLAotCTB4M2FlOWE4ZGYsIDB4ZjM2NGUwYzYsIDB4MTg3ZDc0ZTEsIDB4NmZjMzFiZTYsIDB4YzhjZTBmZWUsIDB4ZTIzZjk1NDgsCi0JMHhkYjcxOGM5OSwgMHg0ZWNlM2MwNSwgMHhjNzE2MjRjOCwgMHhhNjJmNjNlNSwgMHg2ZmQwOWFlMCwgMHgzZDA0MGMwOSwKLQkweGI3ZTA3NjdjLCAweDdkNGUyMWZkLCAweDRhMjUyMGY2LCAweGQzZWJjNzQ2LCAweDNjNDNhZmQzLCAweGVmZmEwZjEwLAotCTB4OTc0YTAxODUsIDB4OTZlZGY2ZTQsIDB4OGI1Nzg2NzgsIDB4YzMyMjRjODEsIDB4ZWZkZTU5MDgsIDB4ODM5ZGY3MDUsCi0JMHg0OTI0NmViMCwgMHg3ZGMwN2VmMCwgMHg1YzA2M2RiZCwgMHg3ZTAyMGJlYSwgMHhjNWQ3ODYyZiwgMHgwMDQzNzNmNiwKLQkweGZmYTdmMWRlLCAweDE4ZTUwNTllLCAweGUzMDdmMzAzLCAweDRiZjQ0NTFiLCAweDM3NzllODQ5LCAweDY3YTIzN2UwLAotCTB4ODgzNGVlY2QsIDB4OTlmYjg2ZjcsIDB4OWFmNzY4OWMsIDB4NGZlMmQ2YWUsIDB4YmY4MzVhYmUsIDB4NTVmYzExZTUsCi0JMHhmYWZlMjFhNywgMHhjMjhmZmI5ZSwgMHg4Nzg0ZjExZiwgMHg4YTM4MzBkYywgMHhlZjg0NmZiZiwgMHgxZTcyOWZjNywKLQkweDM2ZWYxZmEzLCAweGY4ODNmOGQxLCAweGMxNTUyZGIyLCAweGExM2E1MzZiLCAweGY4MTFmY2UzLCAweDViM2ZjMjlmLAotCTB4ZjAwMTIwM2YsIDB4MTE3MzgxMWMsIDB4N2ZhZjA4ZmEsIDB4ZThmYTBlOWMsIDB4MTZjOWQwMzQsIDB4MGU5Zjc3ODUsCi0JMHhjZmJkZDlkZSwgMHg1ZmVmYzAzYiwgMHg0N2NhMjY5MCwgMHgyOTU5ZTA2MywgMHg2NDMyZWI0YiwgMHg2YTRmZGE5YiwKLQkweDU2Y2ZkNmQwLCAweGQwZWE5MzBiLCAweDRjMjU3MTlmLCAweGQ3ZmEwYzFkLCAweDQwOTUxZjI5LCAweGE5NjFhNjRmLAotCTB4NjY5MDU5YzAsIDB4N2QyODcxYzIsIDB4NGZhZjVjOTgsIDB4ZDRmZmI5NDQsIDB4N2VmZDg3MWYsIDB4MDQ3NDc5ZWEsCi0JMHg3YThmM2EyNywgMHgwZmJlODQ3MiwgMHg0ZmExN2YyYywgMHhlNDNiZmRjNywgMHgyNjE3ZTM1MywgMHhhMDkxYjM4OCwKLQkweDk3ZmMwZTc0LCAweDA1ZmZmYTM4LCAweDQ2MjM3ODM4LCAweGNiNzAyYmFjLCAweDdjZDk0NGViLCAweGFmNWYzYzM5LAotCTB4ZTdiZThmMTksIDB4MmYwNmNlNTIsIDB4M2M5ZjdlNjQsIDB4ODU3MWM5MTgsIDB4YThhOWE5NWYsIDB4NDhkNjE4ODEsCi0JMHhhYzhiNWJlMCwgMHgzNTEyOGZmNSwgMHg2ZTg2ZjJmNSwgMHg4MjVmYzZiMiwgMHg0YTNkNTA3ZiwgMHhmMDIzMDQ4YSwKLQkweDlmNjcwOTRiLCAweDk5NmRhMzM2LCAweDBiZjdlNzQwLCAweDNlODE2MjA4LCAweGQyYmY1ODEwLCAweGNmOTM2NmI4LAotCTB4NzhiMmZjMDUsIDB4ZTgyZTE1ZGEsIDB4ZDVlYjhkNTksIDB4MmZkMjhmY2YsIDB4M2M3NTI4YzMsIDB4ZDllMmY5ZmYsCi0JMHhlNDMxYmQ3YiwgMHhkYmQ3Mjc2MywgMHg1NzE2MDYyNSwgMHgwM2IyNzEyMCwgMHg5YTQ4ZDdjZSwgMHg4ZWMxYjhlYywKLQkweGYwNDViMzUzLCAweDNhM2I3MTgzLCAweDBhMGYwYThlLCAweDI5MDE3OTljLCAweDk5NWZmNWFjLCAweDU4MThiNjVjLAotCTB4ZWUzZjQwYmMsIDB4OTRkYzYxOWYsIDB4NmNhZmUzOGIsIDB4YjA4OWZlZmQsIDB4Y2IxZTNkNmUsIDB4N2M5OGNlMWEsCi0JMHhiZmY0NTcyOCwgMHgxNTFlMjhhYywgMHhmNDQyZmVmYywgMHhlYmE0NTlmZSwgMHg4NDNkYWUyYSwgMHg5MjkzZWFmYiwKLQkweGVmZmVmZmRjLCAweGU3ZWQ4YmQxLCAweDZlM2I0YjZmLCAweDI2NWJhZDU1LCAweDlkY2UzMDRkLCAweGM0NDBmOWEzLAotCTB4NTQ4N2YzNzUsIDB4NWI3YTlmNWYsIDB4NWQwMTBmMjIsIDB4YWE1ZWQzY2UsIDB4ODI4ZjUwNzksIDB4ZmVhMmIyMTgsCi0JMHhmM2Y1OWRmYSwgMHg5ZjdlYzFmMywgMHhmNzA1M2NkYSwgMHhkNzg5YjMyYiwgMHgyMmNhNDEwMSwgMHhmZTA1OWQ1MiwKLQkweDk4NjI2OWY5LCAweDRkM2E3ODA0LCAweGFlMThlY2ZlLCAweGQxMzlkM2EyLCAweGZlYTFmNDg0LCAweGZjZjU2MWZiLAotCTB4YTlhZWZmYTgsIDB4NTM1ZGZmNTMsIDB4YTQzNzI0MmYsIDB4ZTE3OGY5YzIsIDB4MDgwOTEyMTMsIDB4ZmI0ZDNlYjgsCi0JMHg3MDg5ZDE3MSwgMHgyYThhOTJlNywgMHg0YjE2NzdmMCwgMHhlOWRmYWVjYywgMHg1NDFlYzYyNCwgMHhmNmJlOTc5ZiwKLQkweGFkMDE1NjRjLCAweDdmMzIyNzdmLCAweDlkZWYzOTQ0LCAweDM3N2I3NTQ3LCAweGI3NWM1ZWRhLCAweGVkYTFlNGNhLAotCTB4NGY4N2VhNDcsIDB4ZmJjMDgyYmIsIDB4M2ZiMDJhODEsIDB4N2I4MmFiZjIsIDB4N2UzZGFiYWQsIDB4ZjVmY2U4N2YsCi0JMHhhMWZjNTVmMywgMHg3Y2NlZTc3NiwgMHg4MmI1YTUxZSwgMHhjZjgzMTAyNywgMHg2N2M2NDZhYywgMHgzMGY2M2YwYSwKLQkweDhkZjEzNTNhLCAweDcwZmFiYTAxLCAweGFlOWM3ZDVkLCAweGJkZTVhM2ZlLCAweGZiYzhkMTBiLCAweDAwZGY0NDJmLAotCTB4NmY5MzBhNjMsIDB4YzYwOWRmZDgsIDB4OGZmM2YyMzAsIDB4MGVkNjlmODYsIDB4MTQ5ZmYwZmUsIDB4OWNhZDRmN2UsCi0JMHg3ZWUzZjg1MSwgMHhkYjdkZjg1MiwgMHgyYzRhN2ZjZCwgMHhiZGFmYTVmOCwgMHhmYWE2NTliNCwgMHgyNzk1ZjhhOSwKLQkweGE3ZWE4NDFkLCAweDU0ZWFjNjUzLCAweGM5N2ZhNTM3LCAweGUwMGVhNWRhLCAweGQ5NDY5MzgzLCAweDJhN2NmYzAxLAotCTB4YzQwYTRlMjAsIDB4OGM4Yjc3ZDAsIDB4M2RhZmY3MDIsIDB4NmZlMjAxMzYsIDB4ZmYwYTRmZjAsIDB4NWYwZjc1ZDMsCi0JMHg3Mzg3NzEwYiwgMHhjNjI3MjU2YiwgMHgyMWNkNmFkNSwgMHhiMmQzOTUzMywgMHg2NGY5NzlmYSwgMHhiMTBmZDYwOCwKLQkweDQ0Njc4M2ZhLCAweGY5NjgzN2E4LCAweDRmNzdmOGIzLCAweDVmNTBiYWE2LCAweDE4MGMzZGNhLCAweGZmYTEwZTNmLAotCTB4ZDhlNmI2NWYsIDB4ZTVmYmIwNDQsIDB4YTY3MjhjMjQsIDB4ZmZjNjBmN2YsIDB4NTNlZDA5M2EsIDB4N2RhMTI5ODEsCi0JMHg1M2U0NmUzYiwgMHgyYmY2N2RlMSwgMHg4Y2Y4N2ZhZiwgMHhmMjcyODBlOCwgMHg3NDI3ZDAwOSwgMHgwM2YxODRlNywKLQkweGRjNDU3YmZkLCAweDY4ZGJiZjlmLCAweGYzZjE4MmVmLCAweGU4MTQ2NDUxLCAweDI0MmYwNTMxLCAweGYxNzlmY2MwLAotCTB4NDA4NjY3YjUsIDB4Y2Q2NWI1MWMsIDB4ODU0MTBlZGIsIDB4Y2VkZTQ1MmYsIDB4NmU3YWNkZDYsIDB4YmQ2M2FiYWIsCi0JMHg1MWU1NGFkOSwgMHg3ZTJhNDdlZCwgMHhlZjgxYWI4NSwgMHgyY2FjODI0MywgMHhjODBlNDI5MSwgMHgyNTU5MjlhYiwKLQkweGI4ZmE2NWI5LCAweDVmZTdhNWU0LCAweDlhZTIxYTc4LCAweGZkZGQ5ODFmLCAweDJmZjlmYzI4LCAweDJjNmY3ZWVkLAotCTB4MjBkZmNmYWQsIDB4Y2I2N2M5NzUsIDB4NTFhOTA5YjAsIDB4ZmZkMzk0ZmEsIDB4ZDI4YjBlMTcsIDB4NmVkMzc4YTMsCi0JMHg3YjMwNmI5MywgMHg5NDUyNDBmZSwgMHhlYzM3ZjMyZSwgMHhlZGMxOTEzNCwgMHhiNzViOTFmMSwgMHg4YjZjZDRkMywKLQkweDQzYmE5ZjQxLCAweDEzMGZjMTEzLCAweDA0Y2VmYjVmLCAweDQzYjUzZmY0LCAweDYyMzM1ZDIwLCAweDZlZDU3M2UwLAotCTB4NGYwMGQzZjQsIDB4YWY0ZTRmNDgsIDB4ZmQ3NGZkMDgsIDB4NDA1ZDI5Y2IsIDB4YTVlOWViYWYsIDB4ZjQxNTM3ZWYsCi0JMHgwYjgzMGE0YiwgMHhiZjk0MTJmOSwgMHhmOTBhZGU1ZiwgMHhiYjM1N2Y0OCwgMHgyZjQ1MGYwMSwgMHhmNTgwZWRkZiwKLQkweDMwNTYzMDljLCAweDY5NjY3ZjNlLCAweDVmOGU4N2FhLCAweDRlYTljOTI0LCAweGEyZjNkOTJjLCAweGZjOGU3ZjY3LAotCTB4Y2ZmZjc3MzcsIDB4Y2I1YzU5NTMsIDB4YjY4MGNkZDMsIDB4ZWIwNmVlNGEsIDB4MTM3MzUzOWMsIDB4Zjg5MGIzYWUsCi0JMHg5ZThiMGY5MCwgMHgyZmEwYmQxMSwgMHg0OTkyMzRiZiwgMHhjOWM4NjIxYiwgMHg0ZTRlNWNiNywgMHhhNWM0YTZhYywKLQkweGNkNDEzY2ViLCAweGZjZTllNjEwLCAweGM1YWMwYzU5LCAweDE4NWRmYTM4LCAweDVmMzlmYjM3LCAweGIwZThmNTBiLAotCTB4YTMxYzY1ZmUsIDB4YzBkMTkzNTcsIDB4ZWFmNTJlZjUsIDB4ZTZiYmZjZDUsIDB4ZDNhMDI2YzEsIDB4NWQzY2JkYTcsCi0JMHg5Y2E1ZmNlMSwgMHgwZjhlNjUxOCwgMHgyYjg1MDJlMSwgMHhjYWViY2ZlZSwgMHhjNjVjNDRlOCwgMHhmNTFlZmUyYywKLQkweDM5ZTE3MmNiLCAweDNjOTI2ZmY0LCAweGY3OWEyMTk2LCAweGU4OGM4NWM4LCAweGYxZjBmN2Y4LCAweGMxZTNiY2U5LAotCTB4MWE5MTNhOWYsIDB4NDAzMDVmN2IsIDB4YjUwMmVjNTIsIDB4NTMzZTJhZWIsIDB4ZmY5MzNiYzksIDB4YmM5OWNiMzUsCi0JMHhiODFmZjIyYiwgMHg3ZmI0MTI3ZSwgMHgxMWM5ODA3MSwgMHg5MmY2MDdiYywgMHgxNWQ0MmJjZSwgMHgxNTRlNzdkYiwKLQkweDQ5OTgzZjUwLCAweGFmOWM5NjI4LCAweDZiOWNiODkxLCAweDQyZmNmNWRiLCAweDEyMTQ2ZmU3LCAweGUzMDM3YzU0LAotCTB4ZDAxZDIxMjQsIDB4ODI3YzJhOWYsIDB4YTNkMmFmYmUsIDB4YTNhZTMwZTUsIDB4OGU0NTVjM2QsIDB4ZjA3ZDcyZTcsCi0JMHg2YjAzZTgyNSwgMHgxYTkwMWY1NCwgMHhmNjNhMDdhNiwgMHg1M2M0NjU3YiwgMHhlMTc4MTQ4OSwgMHgyYTVmOTA2OSwKLQkweGU0MGJiMmFmLCAweGZhYzJmMjU3LCAweGY4ZGY1YjNmLCAweDZlNTRhZGRlLCAweGU0NTNhYjNlLCAweGY1NTdhYjU2LAotCTB4ZjFiNDViNzIsIDB4NTRmODA0ZTcsIDB4ZjU5ZmI3MmYsIDB4ZTUzMTIwYWMsIDB4Mjk4ZjNlOTYsIDB4ZmY5YjNkYjcsCi0JMHhjMTU1N2EyNSwgMHhkNWE0YmE2MywgMHhlYzllOGFhYiwgMHgzZDdhOWYwOCwgMHg0MmU4YzViOSwgMHgyNGY1ZWFiYywKLQkweDU5MjAxZGZkLCAweGUxNTFmOWVkLCAweDhhZmY4NTQzLCAweDBkZWQyYzVmLCAweGE3YzIyOGZhLCAweGY4NDYxZjBhLAotCTB4ZmQ0M2UxNTQsIDB4ZDQ3OGI1YmEsIDB4OWU3YzYzYjcsIDB4Y2I3NzhiZjIsIDB4NTA3YjEzYmIsIDB4MDUwNDk2YmEsCi0JMHhlZjg1ZDliNywgMHhjNTNhODFlZCwgMHgwYjZkODc5NywgMHhlOGY0ZjdhYSwgMHg3NDA3YWVhMiwgMHg3ZjVkM2FmNSwKLQkweGQ1ZWVhZThmLCAweGVhZTlmN2Y1LCAweDAxZmViYTE1LCAweDY4Njk0ZmI2LCAweDg3ZTQxMTM0LCAweGI0YmZhNjkwLAotCTB4OWY5MGM4ODgsIDB4ZTIyZWRlMTYsIDB4OWQxYjQxYjksIDB4YmY3ZDE1NzMsIDB4NDA0NjdkNmQsIDB4YTk2MWZhYTYsCi0JMHhjM2RiZWQ4NSwgMHhkMDJhYTYyOSwgMHhiMGNlNmQ2NywgMHgxNmVhMDkyMywgMHhmMzZiN2YxNiwgMHgyYTg5MWQ4NiwKLQkweDUwNTBmMWZmLCAweDFjZGM3ZDQ0LCAweGVkNjI5MzIwLCAweDhiYzdhODVmLCAweDFkMjY2YmY0LCAweDkwZjNiM2I1LAotCTB4MTBjNzc4YjYsIDB4YjQ0ZjJmMTgsIDB4Zjg4NDJmYTUsIDB4ODZlOGI1NGMsIDB4OTVkOThlMjMsIDB4NWNlMDNiMzcsCi0JMHhlN2Q4MmRhMiwgMHhmOWY0ZTliYSwgMHgyYzg4M2Y5YywgMHgxOGY2NDIyZCwgMHgwZGY2YTliYiwgMHg1NGZjODkyNywKLQkweDk1ZjkwMGI2LCAweGIzZmU5MDJiLCAweDMxMWY2YzgyLCAweDdlNmM0NTdiLCAweDE1ZWZlNjJlLCAweDgxMzFlZWRhLAotCTB4ZmZmZWE0ZGUsIDB4NWY1Yzc1NjEsIDB4YTM1NDUzODEsIDB4YzI5YzFlN2IsIDB4MmZlZDllZjksIDB4ZGI2OGQ3OGIsCi0JMHhmYTNmN2M3ZCwgMHgwZmRmMGE1ZiwgMHg3ZWQ5NDMyNSwgMHgwODM4YjA5MCwgMHhlMjc5YmJkNywgMHg1M2E2ZWJhMCwKLQkweDE1ZWRiNDNhLCAweGQ5Y2RmMDA5LCAweDM4NzQ4OGEwLCAweDQwMDg1ZWJiLCAweDI5Yzg4YTVjLCAweDI0NjUzZjI4LAotCTB4YzE0ZWZhOGMsIDB4YzdjODBiNTcsIDB4NTBmNThlODAsIDB4NjcxZmFiY2IsIDB4OTRiYjRmZGQsIDB4Yzg3MGZlNmMsCi0JMHhjYjY1YTVmZiwgMHg2ZmZhMGZlNiwgMHhlZjZiZmE4MywgMHhkYTQ4N2ZhNywgMHg2MWRkY2ZmNywgMHhiNmRmNzNjMSwKLQkweDI3Y2M3NjFkLCAweDRlZmVkYjZlLCAweGRmNTBmZGZhLCAweDNjYzM3NjYyLCAweDM1N2M3NmRiLCAweDZkYThmODA0LAotCTB4ZjQwOGI5OTEsIDB4YjYyZjViNTgsIDB4ZmRiYzU5ZmYsIDB4NjhjZDIxYWIsIDB4ZmQyMDk3M2YsIDB4OGIxMzI1NmEsCi0JMHhmZWZmMDRkNywgMHg0YTA1ZDA4OSwgMHgwZmYwMmFiYSwgMHhmOTcyN2U3OCwgMHgyMDgwNGI1NiwgMHg3Y2IyYWZmYywKLQkweDNkNmU5ZmI2LCAweGJmOWNmYzY1LCAweDZmYTY0ZWNkLCAweGIyMjVmOTg0LCAweDZkZjJlYzczLCAweGE0YWY5ZTYzLAotCTB4ZWZkNjk3ZTMsIDB4ZWRhMmNkMzQsIDB4Mzc3ZmFmYjksIDB4Mzc5MWYzMDQsIDB4NTVhN2JmMzIsIDB4Y2UxNjdlNmEsCi0JMHg2ZjQ5MzdiMSwgMHg5ZTI4OTIyZSwgMHhiYTM4NDE1YiwgMHgyOTlkNzIxMywgMHhjNWI2NTcyZSwgMHgxODc3Y2JjMiwKLQkweDNlMmNlYTk3LCAweDdlZDg5MmRlLCAweDFmMWZkZmY0LCAweDk1MTFlNjAyLCAweDM4ODFlZDA0LCAweGNkZmRkNjAxLAotCTB4M2U4MjFmMjcsIDB4YmU0NjYxZDgsIDB4NTlmYmQ2NTQsIDB4MjNmYTI1NWQsIDB4YTlmNzViMTcsIDB4ZDA3YzMxZmYsCi0JMHhhMTBiNzVkOSwgMHhjZTNiYWNjZSwgMHhlZWJkZWZmNCwgMHhjZTE3MjQ0NywgMHhlZDA3MmY0ZiwgMHhiZGZiN2NmOSwKLQkweGVlYzk3ZjU4LCAweDkyNzZmOWM2LCAweGZlOWEwN2RmLCAweDIzN2RmOGMzLCAweGUyZTNiYmE1LCAweGJmZDlmZWViLAotCTB4YTYzYmJhZjksIDB4NzI2NjFmZmIsIDB4MWYyMTNiYmEsIDB4ZWZmNWZjYWMsIDB4NTQzZjdlNzAsIDB4MWZmZGNkY2YsCi0JMHhiZjhhZjdjYSwgMHg5Yjc4MzY2ZSwgMHhhNmZjZTg3MiwgMHgzODNiNmE5MywgMHg5Y2E0YjcxNiwgMHg3M2E5MDdkZCwKLQkweDc0NWY1ZWU2LCAweGZjNGFmOTgxLCAweGJmM2Y1MWZjLCAweGVmYjYyNjk1LCAweDk5N2NlMDkzLCAweDEyNmU0YjhlLAotCTB4ZWQ4ZjdlZjgsIDB4ZmVlNWFlOTMsIDB4MGIzZGI1YzUsIDB4ZDZiZDJmZDEsIDB4NjI3N2ZjYzMsIDB4NDY3MzdhZjQsCi0JMHg2Y2Q4OWU0MCwgMHhjOTQzYzYzNywgMHhhODNlODNiMCwgMHhhZjI1NzRkZiwgMHg3ZjhiZjc2YiwgMHhhMDQ3ODgxNCwKLQkweGU5YjVmOWZlLCAweDlmODJmNjkzLCAweDYzNGY1ZDdhLCAweDQzY2FjY2M4LCAweGUwZWJiZTUwLCAweGY3NmI0N2NmLAotCTB4YjRmOGI3MzMsIDB4NmJhNzliZjUsIDB4Nzg3MTM3ZWIsIDB4YTJiOWMwZDMsIDB4MGFmMzRmZTMsIDB4NGE3Zjg4MDEsCi0JMHg4MTQ4OWViZCwgMHg0NzM0YTg3OCwgMHhmOTAwODIyMiwgMHg2MTRiMTUyNCwgMHg1NzkzNzBkZiwgMHhiMDNkZmVmYiwKLQkweGM1MTkxZGNmLCAweDgyYjhiY2UzLCAweDExNGU3MGY5LCAweDdjNDA1MDM3LCAweDQ0NDJiNzVjLCAweDQ4MzcxMjdkLAotCTB4ZDFkZWY4NDAsIDB4MWUxZGU2MTIsIDB4MDBiMzc4MzMsIDB4NDdjM2Y5Y2YsIDB4ODE5MmZkOTUsIDB4ZTc3YWMzNzMsCi0JMHg5MjE1N2M3MSwgMHhjODc3ZjQwYSwgMHhiMjE3MGJmOSwgMHg0YmVlMjBiMywgMHhlNzlhNWZkMCwgMHhlYTFhZTQyMSwKLQkweDBiNjYxN2I3LCAweDYzYzg3OGExLCAweDYxMzkxMjMxLCAweDA1NDNjNDE4LCAweDBmMTM1ODcyLCAweDc3ZTFkNmQ1LAotCTB4Y2UxNDZhNTUsIDB4YzQ3N2ZhYzUsIDB4Zjk3NTNmOGYsIDB4ODdmZmNhMzcsIDB4NDMzZmVhMjUsIDB4MmNmM2U3ODksCi0JMHhiM2VjYTdhZSwgMHgzYzMyMDhlZSwgMHg4MTA4OTc5NiwgMHg5MGFiZTQ0YywgMHhiMGNmM2VhNCwgMHhmZGZmMTk5OSwKLQkweDI4ZTE4MWVkLCAweDFlYmYzOTU3LCAweDdmZjZjMDljLCAweGEwYmJmMDIzLCAweDllNjdlZTcyLCAweDEwMDk1ZDk1LAotCTB4ZWMxYjM4ZjcsIDB4NzJkMWNmYzMsIDB4ZmMxOGJlMWQsIDB4YmJlZjlmYmMsIDB4MDA3OTAyZmUsIDB4MjA5YjZjYjQsCi0JMHhmZmUwOGI1NCwgMHhmYmM2MzA5MywgMHhiMjE2MDllNCwgMHg1Y2JlNDYzNiwgMHg4NzM5NDk4YiwgMHgyMDdkYzBhZiwKLQkweGEwMmNjNGZjLCAweGE1Y2RmYjIzLCAweGE5MjQyNmFmLCAweDlhZTJiNmU4LCAweGVkMjFjNjUzLCAweGMzYmYwMGU5LAotCTB4N2U0YmNlMzEsIDB4M2NmYjA5NmMsIDB4NGI3ZWViYzAsIDB4OGM2ZjQ0ZjMsIDB4Y2I4M2ZlZjUsIDB4ZGYxYmZlNmYsCi0JMHgzNzYzNzdlMCwgMHhjMDI0MzMwNCwgMHg0NDEzMGRjYiwgMHgzOWVhZjljZCwgMHg4N2UzZjcxMywgMHhhZjMwZTE5MywKLQkweDNiMjYzN2ZjLCAweGY2NWQwMGM2LCAweDRlZjg2ZThhLCAweGM2NzgzY2FjLCAweGNlNzE4YmU0LCAweGMwMjdjN2E0LAotCTB4YzkwMDczYzcsIDB4M2NmODA4NWQsIDB4ODEwYjJiZjIsIDB4ZmMzYmQ2ZmQsIDB4ZTQxMDY3ZGMsIDB4YWRjMjBmNjEsCi0JMHg0Y2UyMDdiZCwgMHgwYjhiMzM2NiwgMHg3MTNiMzBjZCwgMHhlN2U2Mzc5ZSwgMHhkYzc0Mjk0OCwgMHhhMWNlZjU0MSwKLQkweDlkZDVmNDcwLCAweDQ2MDE5ZmY3LCAweDUxMjQyNDZiLCAweDdlOTRmN2IwLCAweGJmNTg0YmRkLCAweDU5NjcyNjQzLAotCTB4MTEzZmY1YWMsIDB4NzMzYWUyYzcsIDB4ZDFkZWZiODksIDB4ZGQxZmJmYzIsIDB4MGY2ZDdlNzIsIDB4MzI3YjA3OGQsCi0JMHhkOGU3N2Q4MSwgMHhjYTA5YWY5ZSwgMHg0MjQ5ZDljNywgMHhlYzNkZjQwMCwgMHgyZjllYjA5ZiwgMHhjNzc5YmRhMCwKLQkweDFiZTVkYWMwLCAweGY4NTY1ZTk4LCAweDExZTc4ZjVlLCAweGY4Y2FjZjFjLCAweDBjN2Q3OTUzLCAweGNmMDUyZjk3LAotCTB4ZjNmNTdlMGEsIDB4N2Q1M2ZhNTUsIDB4OGYxZDRlMzUsIDB4ZTg2MWFlYjgsIDB4Y2IwZjYwY2IsIDB4NDBkMzgyODIsCi0JMHg5YjE5OTU0MSwgMHhlNTg3MjA0ZCwgMHgxMDRhOGYwZCwgMHhjNWM1YmY4ZiwgMHgzMDdiNTJlMCwgMHgzYmZlN2Q0NCwKLQkweGUxY2VjY2MzLCAweDMxNWQ4NzFiLCAweGYzZTRmODEzLCAweGExMmZkNDE1LCAweDlmNjY3YmVmLCAweDdkZGQ4MDcxLAotCTB4MTNmZWUwYzcsIDB4ZmYyOTA3N2MsIDB4YmY2YjI0NTEsIDB4ZTg3ZDVmNDcsIDB4OTA0ZjE2NzcsIDB4NzAzMzcwZDQsCi0JMHhlNDk2Mzc5ZSwgMHhiOTNlMTA0OCwgMHhkNGE3NjRhZCwgMHgzMzRmYzU1NSwgMHhhZWQ4NDljYywgMHhlMjVlZWYzYywKLQkweGU5Y2YwNjFhLCAweGY5MGYzODc4LCAweDNjODEzMzExLCAweDRkNzU0MWYyLCAweDZkZGJmZGY4LCAweDBmOGM4OTE1LAotCTB4OWE3NmVhOGIsIDB4ZmQ4MTllYjAsIDB4NzE5NGYxOTUsIDB4MzUzNGYyZjQsIDB4MzQxZjliNWYsIDB4MjdiOWI3MmIsCi0JMHgxY2RmMjVlMCwgMHg4MzFkYzdiYSwgMHg5NTk4MmY0ZiwgMHg2ODFmODg3MywgMHg2Zjk0M2MyNywgMHhiMjJmZmM4NywKLQkweDc2MjhmNzEzLCAweGFhZjI1OWEyLCAweDM0ZGU0OWYyLCAweGQ5NTczOTMzLCAweGVjYjFhZTg5LCAweDU3NGE4MmM0LAotCTB4ODJjM2EwNTcsIDB4ODJiYTdkZWQsIDB4NDNmODJjOTAsIDB4M2IyYzZhNWUsIDB4OWQ5ZmFlZjEsIDB4YmZjZmJlMmIsCi0JMHg0YTliNmQyMywgMHgyYWU1YzRlZCwgMHg4MmQ1MzEzYiwgMHg2ZjdmYTI3YywgMHg3NjkzYjk4MywgMHhmZmRiYTE0MiwKLQkweDJlZjM3ZDYzLCAweGYyMTg4OWQ4LCAweDRmZTM4YmJkLCAweDgyZDMxM2IxLCAweGE2Mjc2ODA1LCAweGRmMzUxNTRkLAotCTB4ZjMzMzZjNWYsIDB4NzY4NzcxNzgsIDB4MTZmNTI3MjIsIDB4NmI2ZTRiYWMsIDB4OTc3OWZlMGMsIDB4ZjNlZmMzZmIsCi0JMHgwNzE4M2MzYywgMHg1Y2I3YzVlYywgMHg0NmVkZWJmZiwgMHgzNzFkN2E0NywgMHhhMTNiMjMzNSwgMHg3ODQ1ZmZkNywKLQkweDAyZmFmNDU2LCAweDMzOWIyZmVhLCAweDQxMjFmMTYyLCAweDBiNzA1ZTdlLCAweGYwMDJlYmQ1LCAweDBiZWJkMzIzLAotCTB4MzE3MWU3NmUsIDB4ODJmNTllOWQsIDB4ZDZhMTFkOWUsIDB4MzJmZGVjYjMsIDB4ZTUwYmIzMWYsIDB4OTliZjE5MGQsCi0JMHhhZDZmZGI0MSwgMHhiNDcxZGM5NiwgMHhiZDUxYWRmZiwgMHhiYmQ2YTU5YiwgMHg3N2E0NzZkZiwgMHhmZGRlOTg4YiwKLQkweGZkMWMzODNjLCAweGY3ZDY4ZWE3LCAweDU0YjdkNzMxLCAweGM3NzVmNTlmLCAweDMzZTk4ZmUwLCAweDc3ZWY5YWFjLAotCTB4NzM3ZDBjOGUsIDB4OTc5MDI2ZDAsIDB4ZDczYzQ0NzcsIDB4ODBmZGM2M2IsIDB4MWNkZjQzN2QsIDB4ZTllYWYxMDEsCi0JMHhiYmU0NDY3MSwgMHhhZDllOWNiZSwgMHg4MTNjNTI3ZSwgMHgzNjc3MmZlMiwgMHhkNzRiYTdmMywgMHhiMmJmODg4YiwKLQkweDY1ZmYyNjdhLCAweDQ1YzA0MmI1LCAweDdkODcxM2ViLCAweGZjZmE4MjYzLCAweDhlN2NlY2VkLCAweDQ3M2YyMGFlLAotCTB4ZWZmOWZmNDUsIDB4M2M0MTU3MzQsIDB4MDEyYWZlNzgsIDB4MWYyMTE3Y2YsIDB4OTczOWYwMWEsIDB4M2RkMGIzZTMsCi0JMHhmYTJiZjcxZiwgMHhmMWU1ODMzYywgMHg3MmU0ZDU4ZSwgMHhkM2YxODc4NCwgMHhkZjNmZGU1MiwgMHg3MmY4YzYxYywKLQkweGY3MDRlZmZlLCAweDFmM2VkMjJhLCAweGQ1ZWZiNGExLCAweDMxOWY2MGE3LCAweGRjZjc1NmJmLCAweDExY2YxY2JkLAotCTB4NzE4YjVmYTgsIDB4NmQzYWQyZDQsIDB4NGZmNzFlN2IsIDB4NDFhMTg4ZTYsIDB4ZjU3ZjYwOWIsIDB4Y2IxZGQxMjcsCi0JMHgyMmZkMjlkZSwgMHgyN2ZhMjlmOCwgMHhlMjlmYjNmMSwgMHg4NzRmYzQ2NywgMHg5ZGMxNzk5ZiwgMHhhMWZlNWYxOCwKLQkweGUzZTNkMTc4LCAweGJmNWM3MTY3LCAweDQwMjMyMzBjLCAweDNjMTk4ZjFlLCAweGI3ZTQ1ZmE4LCAweDk5MjNjYzQ0LAotCTB4Y2QzZjY4ZmQsIDB4NzEzNzA0M2QsIDB4ZTBjNzc5YmUsIDB4NWYzYzgyYWIsIDB4OWJlNThjYjksIDB4YjBkOWFkY2MsCi0JMHg2N2Q2OTUzYiwgMHgxMGExOTFkNCwgMHg1MmJiOWU5NiwgMHhmNjIzOGY2YiwgMHhmY2M1ZGViZiwgMHgwMjBkOGE4MiwKLQkweGUxY2UxNWU0LCAweDA1MTUwOWRmLCAweDFiN2JjNTFlLCAweGVkNDg1ZjZlLCAweDZiM2ZlZDNkLCAweGU3MDdkOTk4LAotCTB4NjEyZGZiYTMsIDB4ZmYwYTlmZDQsIDB4ZjI2Mzg5MmUsIDB4ZTNjZjg4YjQsIDB4MDRmMGY3NDgsIDB4ODIwZDUzYjQsCi0JMHg2NDMyZTUxMywgMHhkMjhiNzY2MSwgMHg2ODkzZWUwOSwgMHg0NGQ1ZjMxYywgMHg4ZjE2MTc0ZSwgMHgyYzc0NjA2OCwKLQkweGI5MDM3NGE3LCAweGY1ZTQxODllLCAweGRlMGZlNjNhLCAweGNlYzMzYzE2LCAweDI1M2I4MmI1LCAweDQwODUyZjc2LAotCTB4YjlkZjUxOTIsIDB4ZDhhY2ZmNzEsIDB4Y2I2NzM4NDcsIDB4NzdkMTU1NDksIDB4ZmZjNjIxZmIsIDB4M2UzNzA1NmIsCi0JMHhmZWZmZDAwOCwgMHg0MDc2ZmExOSwgMHhlOTlmYzU1NywgMHgzYzE1N2QyYywgMHg3OWQxZDEyZCwgMHg3ZjI5YTViZiwKLQkweDA4ZDc5ZTM4LCAweDIzYTdiYzZlLCAweDBiZTc4ODk4LCAweGJkZDlhYjQ3LCAweGZlNzE4ZjEzLCAweGVjMDVjYmQ3LAotCTB4NjBmN2Q0M2YsIDB4ODcxMzBmNWMsIDB4MTY0OWQzN2MsIDB4NzFjM2ViY2MsIDB4YTY3Zjk5MzMsIDB4ZDY1MDhlZmQsCi0JMHhkMGZkMDFlNCwgMHhkMjcyOTUzYywgMHgzNDU5N2U4NCwgMHgzNGU3Y2NiZiwgMHgyNDlmZGQ4MywgMHg1Zjc5YjUxOCwKLQkweDlmZmI5NDYxLCAweGRmZGJmZTAwLCAweGM1YTQ5ZjA3LCAweGRiYjk3ZGExLCAweGY2MzY5ZWM5LCAweGY0MTkxMTMyLAotCTB4ZjkwOTMyZmIsIDB4ZWI4MzY2ZTgsIDB4MmZkMDZjYmQsIDB4ZTQwNDQ5MGYsIDB4MjM3ZGYzZTMsIDB4MDVkMTlmZGYsCi0JMHg4ZmU0NDVkYSwgMHg5Nzg2Nzc4MiwgMHg4MGE0ODg0MSwgMHg4MjkxMjZlNSwgMHgzYTVkOThmYiwgMHgyYmZmYzdjMiwKLQkweDAxOWVkN2I1LCAweDgzZjA0ODdjLCAweGY4MDE4OWZkLCAweDdiYWE2Y2FlLCAweGUyMGI5ZTY3LCAweDJmZjYyMzI2LAotCTB4MWJiMWYzODUsIDB4YmRlZjlkNzMsIDB4Y2U1Yzc0MDcsIDB4YmMzOTViZWUsIDB4NjlmNzE3MmMsIDB4YTAyNWRmNzcsCi0JMHhmNGE0MWQ5YywgMHg0ZDM3MzgwMiwgMHgzZGVmNzhjZCwgMHg5N2RiYmYzYSwgMHhkNzM5ZTBhNSwgMHgzNGNhNGYwYywKLQkweGIxOWFmNzM4LCAweDY4YmI3NDRmLCAweGQ5ZDc1OWJmLCAweDM2NGU3MDZkLCAweDdjNDhhMDY1LCAweDRlZGNiYzJhLAotCTB4MzM0ZTMwOWEsIDB4OWJhZWUyYTMsIDB4YTg4YTRlNDAsIDB4NTQ3Yjg0M2QsIDB4ZjNmYjgyOGEsIDB4NDZiZDQyYmEsCi0JMHg2NWNiZjdjMCwgMHg5ZDJiYTk5ZiwgMHgzM2NhZDM1ZiwgMHhmYzc0MTFhNiwgMHhkMDBmZGE0MiwgMHhmYWMzNWU1ZCwKLQkweGRjMTFhZjk1LCAweDE4NWJhYTkwLCAweDY0ZjUxNDdjLCAweDJmMDExYWUxLCAweGZlYTI2OGFhLCAweDFiODMxYzZmLAotCTB4OWI3MGEzODgsIDB4YjRmYmU4NmEsIDB4MDdkZTE3M2UsIDB4YTcxMjZiYjgsIDB4Mzk1Njc5YzEsIDB4M2ZiZTI3OWQsCi0JMHgyNWNmMTJiYSwgMHhiNDdiZTkwYiwgMHhiOWFkMzQ5OSwgMHhhYmNkZTEwYiwgMHg2ZjdjMDgxMSwgMHhlMzNhMzQ1NCwKLQkweDZmMDBkMTkxLCAweGY2ODZlNDlmLCAweDE2ZmU3N2Y3LCAweGQyNjY0YWYzLCAweGY4NTFiYWYxLCAweDNjZTZjNGIzLAotCTB4MmZkZGFiOGMsIDB4OTNiZWYxMzgsIDB4ZWU1MTdkZDksIDB4OTFkY2I4ZGEsIDB4YjlkODdkODEsIDB4ZWY5NDQwYjQsCi0JMHhmY2VhOGM3ZSwgMHg5NjE2NDE4NCwgMHhiMGI4NWQwNywgMHhkNWQ2MGFiMiwgMHgxODY0YTcyYywgMHg5OGNlOWY5MCwKLQkweGE1MWY4ZWMwLCAweGZmNTFmNmY4LCAweGU1ODk4OGY1LCAweDQ3Y2EzNDNkLCAweGZkMmFjZDRjLCAweDA3ZDJkOTM5LAotCTB4NDM3NjcxZTUsIDB4Mzk5OWVhMGUsIDB4ZTdlNzhiYzQsIDB4OGZlNjRhYmUsIDB4MDk2YTVhMWMsIDB4NDk4N2UwMDgsCi0JMHhkZTc4NzRjZSwgMHhjZjhjZDRiOCwgMHg3NjYyNWY1YiwgMHgzMzU3YjVhNywgMHhkNDRmNDNjNiwgMHg4N2JlMDQ0OCwKLQkweGU3ZDM1YzVhLCAweDg5ZTNhMDI5LCAweDEzOWUxMmY1LCAweGE4NDhjZjhiLCAweGM0YmVlNmNmLCAweDM1OGQ2NGUyLAotCTB4NWE4OWVlMGMsIDB4OWY3MmRmYTYsIDB4ZTgyMjY5YjksIDB4OTU2YmI5ZWQsIDB4MWVhZDY1NzMsIDB4YTMxNTc0MmIsCi0JMHhjMmM2N2E5ZSwgMHg1ZjVlOTJmNCwgMHg1MTU0ZjVlOSwgMHg3NmQ4YWFmNSwgMHhiMTg5OWVlOCwgMHgyYWNmNTBlZCwKLQkweGMwZWNhZjE2LCAweDliMTM5NzNlLCAweDQxODZhN2EyLCAweDY5NDE0OTVlLCAweDgxMmI5OWFmLCAweDg5Njc2ZjlmLAotCTB4MmRhMTRkZGUsIDB4NzYwOTNlNWYsIDB4Zjc4ZWM0YjcsIDB4OWQxOTk1MDMsIDB4M2Y4YzA5NGYsIDB4MTlmZmU4MDgsCi0JMHg4MjVmMGRjMSwgMHhiMGNkMTQzYywgMHhjNzNmZmRlMCwgMHg0NzIwMWU4MSwgMHhkY2YxOTIyYiwgMHg4MDUwMzBiMywKLQkweDJlZjI1Nzc4LCAweGYyZDRhZWU3LCAweDdkY2U3MmJiLCAweDFlMjQ0ZjhiLCAweGIyMmFmZGI1LCAweGRmYWE4ZjEyLAotCTB4Zjk0NWZmZmIsIDB4NDc3MzhlOTYsIDB4MDhiMDEwODMsIDB4ZTdiNDNmNTAsIDB4ZWViMDIzZTcsIDB4ZTQyZDc5YzQsCi0JMHgzYjBhYzFmZSwgMHhmN2ZiZjVmMiwgMHg3YzBhNTk5ZCwgMHg4MTAxZjMzYiwgMHg2NDRlZGY4MCwgMHhjM2Q4MTU1ZiwKLQkweDBiODI5NWIyLCAweDFmNzNiM2UyLCAweGE1Y2ZlZjYwLCAweGRmYmNjM2VmLCAweDJmZTMyZGZmLCAweDkwMmVlN2NhLAotCTB4NDc5YWIyODMsIDB4MzVmZjYwZjcsIDB4YmZlMDBiODIsIDB4ZmQwMGFhYmYsIDB4MjQ1OTIyODksIDB4MTBlNmJlZDgsCi0JMHhiZGE4MjNlZSwgMHg0NmEzZmNjMiwgMHgzOTA1NGM1OSwgMHg3NjYyNWIyOCwgMHhjMmI3NzljMiwgMHgxZTdmMGE0ZiwKLQkweDkzNTFkZmUyLCAweDFiOTBmNzM4LCAweDAwZTc3YmU5LCAweDE0YmUwYzQ4LCAweDdiMTEwYmE3LCAweDJlNTNmYzBhLAotCTB4ZjQzYjdlMzMsIDB4MTEwNmU0OTIsIDB4YjI3ZjM4YjksIDB4ZmUxNTY3ZWYsIDB4NDZmZjgxMTMsIDB4YjFhZmY5NDQsCi0JMHhmYzA0ZDcyNiwgMHhlMDIwMjI3OCwgMHhmMDJlN2NiOSwgMHhlZmU3ZjAyZiwgMHhiMTBjZjg5NSwgMHg4YmE4ZmRhOSwKLQkweDBmOWVhN2YxLCAweGU1MWZmMWRiLCAweDBhZjNkMDNiLCAweGE4ZmMyYTdmLCAweDQ2YzNjM2U3LCAweDdkZTYwZDMyLAotCTB4YWUwYjUyZjcsIDB4Y2I2YWI3MjMsIDB4Y2U0Yzg1YjQsIDB4YjcyNzNjZjAsIDB4OTA1NGJlZWEsIDB4Y2IyMzQyZWIsCi0JMHg1YWYwNTBmYiwgMHg0Mjc5NjQ2YSwgMHg0NGY1ZTZlZCwgMHg2NzViYTlhNSwgMHg0NzliYTdlNiwgMHgyYTNkOGIzNywKLQkweDYzY2IyMjBmLCAweGRlNzFkMTA5LCAweGU2M2NmZjVjLCAweDc3NWU5ZGQzLCAweDZmZjQ1YWU4LCAweDAwM2U1MWI2LAotCTB4OTNiN2FmZmMsIDB4MDI0M2VlMTAsIDB4ZWI4YThmYTgsIDB4MWJlNjBmNDUsIDB4Mzc1OTQzMWEsIDB4NGFlZmY2YWEsCi0JMHg1N2ZjYzRmZSwgMHhlMmVmODhlYywgMHgzZTQwZTY4ZCwgMHhmMzc4YmY3ZCwgMHg4ZTc4MjE5MSwgMHhkZmY5ODhiZCwKLQkweGZkMDEzYWYyLCAweDBmMzcyMjYzLCAweDhhM2RlZjgxLCAweDQzOGYyYzhkLCAweDYxM2MxN2VmLCAweDk2ZjBmYjYxLAotCTB4ZTBlOWQ2MmQsIDB4ZWNiNTA5YjcsIDB4YmFlMmFmNWUsIDB4MmFiMzI1OWIsIDB4NDViMGZiYmUsIDB4YjllMWZhNTIsCi0JMHgwY2U5NGM4YSwgMHhmY2MzNTVkZiwgMHgyOTRhZjdkNCwgMHhiZjJkMWJmOSwgMHhkYzU3ZmM2NywgMHg1NzNmYTEyMCwKLQkweDE1YTFiYjVjLCAweDBmOGFmM2YyLCAweDViYmY3MTlhLCAweGYzMDY3YjVlLCAweDc5NWY3MzhmLCAweGQ2M2ZkZDg5LAotCTB4YjJmMjZhMjAsIDB4ZDU0M2U1ZGEsIDB4NTFjZTc4OGEsIDB4Nzk4YTVmNTYsIDB4ZTc4ZWI0MWMsIDB4M2M3NTY1MWQsCi0JMHhlNjA3ZThmZiwgMHg2NTdmY2NlYiwgMHhhMjk5NjZmYiwgMHhkZmE2ZmU3MCwgMHhiMDllZjAzOSwgMHhmYzBlYjVhNiwKLQkweGZiZjZhNTRlLCAweGU1ZGIxM2YzLCAweGU3MmRkNTNmLCAweDljZDc0ZmY5LCAweDYzMWZhODIwLCAweDBhN2QzZmU3LAotCTB4OTQ3YjgwZmYsIDB4MjdmY2RhMmMsIDB4MWJmNGNiNTIsIDB4YWM1NjY3OWQsIDB4N2UyMjEzZWYsIDB4M2U1ZjRiZDcsCi0JMHgyZGJiZjkwYiwgMHgxNjdiM2YxYiwgMHg4ZmYyNWRlNiwgMHhiYzg1OWZjZiwgMHgwOWQwMGEwYywgMHhiYWY5NGE3ZSwKLQkweDUxZGYzMTc3LCAweDg1YTBlZjc5LCAweGZmN2U4M2VmLCAweDZkMTdjYzNiLCAweDA2ZWNjMGZkLCAweDRmZGJhZDY4LAotCTB4ZDFmZjgzYTQsIDB4NTQ5YmUxYmEsIDB4NjdiZDAzYzgsIDB4NzdjNjFlN2IsIDB4YjczNTc5ZWUsIDB4NmYxNTg5MmIsCi0JMHg2ZmYwMjVlMywgMHhhYWY5MTNhMCwgMHhkNjM1YmE3YSwgMHhjOGZlNjIzNywgMHhkMDc3NGE2OSwgMHhiNmJjOTExMywKLQkweDJmOTY1MmJhLCAweDZjZjllMmU4LCAweDA3ZTc2M2ViLCAweGFiNWZjYmI3LCAweDJiYmFmMWJmLCAweDMzZDYzZjQxLAotCTB4NzlhMmUxM2YsIDB4M2QyODA3NmMsIDB4MWQwNGVmMmYsIDB4YzU3Y2YzZDcsIDB4MzdiZTZiYmEsIDB4ZmMzNGVkOGYsCi0JMHgyYmViZDI4MywgMHhmMDFmMzY4YiwgMHhjZjM5ZmFjYiwgMHhmNTZkMGQzZCwgMHhiMWU2MWRjOSwgMHgzZjgxM2E4NSwKLQkweGQxYjhmZjI1LCAweDgzYzQzMWUyLCAweDExN2M2ZDFjLCAweDdlODEwN2YzLCAweGQ3ZDAyZWY5LCAweGJjNDNhNjVmLAotCTB4YzYxNGE0ZjgsIDB4YmI3ODQ0YjgsIDB4MmI3YmJmMTksIDB4Y2EzZWZlZGUsIDB4ZmJhYmViNTMsIDB4ZjA5N2JmMzEsCi0JMHgxMjU2ZTAzYywgMHg0ZDdjYjFmOSwgMHg1ZjJhMDMxZSwgMHg2ZmY5Njc2MywgMHgxZjkwMGU5YywgMHg3M2UwNzJlNywKLQkweGY4YzcwNzllLCAweGViOGZjOTVhLCAweDZjNmUyZjI4LCAweGUzOGIyNjdjLCAweGQyZThiY2YxLCAweDNjZjIxZjM1LAotCTB4ODRkZDI4YjMsIDB4NDNhZjQwZDEsIDB4YTg3NzliZGYsIDB4NzgwOWMxZTAsIDB4ZmJjZWE1MTgsIDB4MTg4NzlkOGMsCi0JMHhkMWQ0ZmJjOSwgMHg3YTA5ZTgwZCwgMHg0OWQ3OTIzYywgMHhiZjIxM2RlYiwgMHgxZmJjMjAyZiwgMHg3NWI4OGYyYiwKLQkweDZkMTdjYjE1LCAweDkzZGZiNDk1LCAweGYyYzRlOTQ2LCAweGViYzY0NzQwLCAweGI5ZDAzNmU0LCAweGFkOGJjZmZjLAotCTB4YTllMjg3ZTMsIDB4YzM0YmJjNWYsIDB4NWFiZTBhMzcsIDB4ZWZkNmM3Y2UsIDB4N2Y4NWUzZDMsIDB4ZDlhYjdiZWUsCi0JMHg4MmZiZmU4MiwgMHhmYmUxZTM5YiwgMHgyNjQzZmE4MiwgMHhmMThiZGY4MiwgMHhkZGYyOTU3ZCwgMHhiNWI3OGYxMiwKLQkweDdmMzExM2FjLCAweDExYWVhYWIwLCAweDdmNWViYmY1LCAweDE0NzNmMTk0LCAweGUzOGI3Y2ZkLCAweDZiMmFkZTk5LAotCTB4NjVhM2Y2NjAsIDB4YTM2MDNkYTMsIDB4ZDhkZTVhNzAsIDB4YjY1ZDdjODIsIDB4ZjIwOTkwZmUsIDB4NmVkNGY2YjEsCi0JMHgwM2JjYjEzMiwgMHgzZjYwNDcyNiwgMHhiN2Y5YWEwMiwgMHgwODczYmNiYywgMHg5ZjdlNzNlYSwgMHg4NTljN2U5MSwKLQkweDYwZjI5YzdjLCAweGQ3Y2E3MWVjLCAweDMzOGNkMTlmLCAweDM5MzNhZTVmLCAweGVmMWYxNzZkLCAweDY2ZTdhMzUzLAotCTB4MTM2OWY3ODAsIDB4YWQzZWEzZjMsIDB4ZmFjNTI3MTMsIDB4NzhiNmU2YmUsIDB4YWJhYmVmODksIDB4M2I1MGZjOTksCi0JMHhkOTNhZjc4YSwgMHhhMjRlM2RkOSwgMHhiMmZkMWUyMywgMHgwZmEzZWM3YiwgMHhmNzgwZmRjMiwgMHg0Nzk4NGRkOCwKLQkweGU3OTJiOGIxLCAweDNiOTdmYzVkLCAweGQ4YmRlODBkLCAweGY5ODEzNTdlLCAweGFhZmMwNTJlLCAweGQzOTJmN2Y2LAotCTB4OTM5ZmMwNDcsIDB4ZDQyM2JjZDIsIDB4ZmNjYTMwZTcsIDB4MjQwYzVkNGQsIDB4YjdiZjNlYTAsIDB4ZmIwYWVhNGYsCi0JMHg3Yjk0NjI1MywgMHhjZGFlM2NjMiwgMHg3NjA4Y2FmYywgMHhlMmNmYzliMSwgMHg5MWZjZTRmYiwgMHhjOWJjZjBiZSwKLQkweDRjOWRkY2U4LCAweDEwNGQzNmUxLCAweDZkOWExMGRjLCAweDdlMGNmN2NmLCAweGQxZTBjZTI0LCAweDM5MDk1ZmRlLAotCTB4YjNiZWIwZjgsIDB4ODlmYTAzNmUsIDB4NDljODQzNzYsIDB4YTViYjEwYmIsIDB4YjgzNzBkMjksIDB4YTYzMmUyMmUsCi0JMHhlNjNjZWE2MiwgMHg4ZmU0M2ZhZiwgMHhlN2RmMGJlYiwgMHg1Yjc1MDgzOSwgMHhhOGRiOWZhMSwgMHg2MTIxNmZiOSwKLQkweGZmNzc1MWI0LCAweDk3ZDAzOTAyLCAweGU3MWIxZmRhLCAweDY3NWUyNTU3LCAweDcwYTZmZjY3LCAweDg3NWVmMTliLAotCTB4MTJhNDQxYzQsIDB4ZGQ4NTc3ZDgsIDB4ZTNjNGZlODcsIDB4NWY3ZTBmMGUsIDB4MjEwMzdmNDYsIDB4YzQ4OTIxZGYsCi0JMHhjMWY3ZDViYiwgMHhmNzM1NzFkMCwgMHgzNTcxZDA0YywgMHhiNjhmNDRmNSwgMHg3OGM5M2M5ZSwgMHg0OWJkOTYzNCwKLQkweDI4OThmM2U2LCAweDg5MGYxMGRhLCAweDJmZWUwNjc5LCAweGE1ZmJmMjdiLCAweDk4OWRlNzQ2LCAweDY4MjFkYzQyLAotCTB4Nzk4NmM2YmYsIDB4NjRiYzU0ZTMsIDB4MzY2YzNhZjUsIDB4ZmNlOWJjZWQsIDB4NjEyMjdhMzQsIDB4NjA2Y2IzNTAsCi0JMHg3NzNjZDRmMywgMHhlYjgwOTcxMiwgMHhkMzlmNjhmNywgMHg3ZmVhNmFmOSwgMHhjZGY2ZTc4OSwgMHhlZmEwOGM0OCwKLQkweDg0NGQ3MTZjLCAweDA2YWNmZmUzLCAweGRlOGM0YmRmLCAweDRjYzI1NGE0LCAweDRlOTNjYzI2LCAweDQ4M2ZiZTEzLAotCTB4ZTNhMGViZTAsIDB4MjEzYmZhNmIsIDB4ZDdjNmMwN2EsIDB4OWQzZDIxYzIsIDB4MmYwNmVmZWEsIDB4YzZiMDc2ZTcsCi0JMHhmYTBhM2RlYSwgMHgwNTc3YWIyNiwgMHhhNzY2ZmEyNiwgMHhjM2EzOWUwOSwgMHgwYmIwNWI2OSwgMHg4NWNjYTdlYSwKLQkweGFkMDhlNGI5LCAweGFmOGNkNTBiLCAweDI4MjBhZWZhLCAweDJjYzM3ZDM3LCAweDg5MmM4NThmLCAweDFjZDUzZjQ3LAotCTB4MzBjYjY0NDcsIDB4Yzg4YTFlZjgsIDB4MjUxODMwZDIsIDB4NWM5ZmNmYzAsIDB4OTQxNDBjOGIsIDB4MzVlNTE5NzEsCi0JMHgzYzMwNWVmYSwgMHgxMjg3MzBkZSwgMHgyODlhMGVhMSwgMHg5ZWYxNDNmYywgMHhhYWZjNjFjZiwgMHg4NjY5N2RlYiwKLQkweDc5M2NiMGExLCAweDk0NmNhZWU5LCAweDYyMjA0YmRhLCAweGVmZjRhODY4LCAweDRiMjU3YmRlLCAweDlmN2I4MWY5LAotCTB4MGRkZmVjODgsIDB4YTk1YWI4NzYsIDB4ZGYwZWM1NTMsIDB4NDdjNzU3NmIsIDB4YWEzODllZWEsIDB4NTkzM2FiZWYsCi0JMHhiZmQ4Nzg1ZCwgMHg0MjRmNTk3NCwgMHgwYWYwNGIxZSwgMHg3MTA3ZDA1NiwgMHgzY2YxNGJjZSwgMHhlYjg0OTQyYywKLQkweDUxN2Q5OGJmLCAweDRkNzAzOWU2LCAweDExZjhjNGYzLCAweGY3MGE5ZTJjLCAweDQ3YjNmNjhhLCAweDdiNDZjN2JlLAotCTB4ZDRhNmQ2YmMsIDB4ZjBiZmI4NDMsIDB4YmQ0N2VmZDYsIDB4MWZiNzVhNTYsIDB4YTc1MDBkZGIsIDB4ZTZlNGVmNjUsCi0JMHgyOTEyM2Q4OSwgMHg3OWQ1YWM1NiwgMHg1ZjgwOTc2OSwgMHhhMDY2OTA1YiwgMHg1YWM0YmNlYiwgMHhjMWE4ZGJiZCwKLQkweDNjMWExM2MzLCAweGE2M2QxNzE4LCAweDNmNjNjM2MzLCAweDNjOTcwZjA4LCAweGExZTIxOGZjLCAweDdjYTZlYmIzLAotCTB4ZTk0YWQwMzEsIDB4ODBjNzI1MzcsIDB4M2E4ZDM3ZjcsIDB4MGJmOGMzNjgsIDB4MWVkMDU5ZmQsIDB4M2FhYjM4NzEsCi0JMHhkOTU2OGVmOCwgMHg2ZTM4NTBhNywgMHg5N2YwYTM4MCwgMHg1N2MyOWVmMiwgMHgxZjRkZjExZCwgMHhkZDk0YmNlMiwKLQkweDlmZTVhN2ViLCAweDBjNjdhYjAyLCAweGY1NmIxYmMwLCAweGUwYTViMzFjLCAweGVlYmJmMWZhLCAweGVmMDJiZTI5LAotCTB4NWYyOGU0ODQsIDB4Mzg2ZjliMTMsIDB4NjM1YzI3N2MsIDB4NTViYzczYmQsIDB4OTI5ZGFmMTUsIDB4YTRjYzQwYjMsCi0JMHg1OTA1Y2RmMywgMHg0ZjVkMTkxOCwgMHhkMmQ5NDJjYSwgMHhjNTMzYWU5ZiwgMHhlYzNjYzA2MywgMHgxMjZmYWIxYSwKLQkweDFlOThlMzhjLCAweDQ4ZjU1MTBlLCAweDcwZGYwMDVkLCAweGEzOGU4YzQxLCAweDc2ZDU0N2M4LCAweDJhYWY4ZmI2LAotCTB4YjExNjA0MzAsIDB4ZTAwMTYwZjMsIDB4NTlhM2Y5NDUsIDB4YzY2MTFmYzcsIDB4OTA4NzBkMWYsIDB4ODc4MmNhM2YsCi0JMHg1NDM0N2YxOCwgMHhlN2U3OGY4ZSwgMHhhZThmYjA2YSwgMHg0MGExZTEyNiwgMHg1N2Q2OTlmNywgMHgyOGJkOGNmMiwKLQkweDU1YzM1OGRmLCAweDQ4NWYyODNkLCAweGZjYmNmYWYyLCAweDMzYWYxMDRiLCAweGNmODdkMjYyLCAweDQ3NTc1OTRiLAotCTB4OWJkZWFkZjQsIDB4ZDgyMGYwZjksIDB4ZTAzM2VlNjcsIDB4Mzc4Mjk4NzksIDB4MmI2MmRmYTUsIDB4NjYxY2IzY2IsCi0JMHhmYzAzY2RmNywgMHhkZTZlOGY5NSwgMHhiOGRiZTQwMywgMHhkNzk4Y2ZmNywgMHhjMzc3ZDhlMSwgMHgzMWRmNzg0ZSwKLQkweDE1Yzg1Mjk1LCAweGRmN2FiNzFkLCAweGI3YmZiYzIyLCAweDQwMDNhZTlhLCAweDBjYjA5MDI2LCAweDdjNjNiZDc2LAotCTB4ZTA4OWY5MzAsIDB4NDE5ZWZjMDMsIDB4Mjg0MzhmODAsIDB4NzdmOGViMmYsIDB4ZjBlZTU0NDUsIDB4NTZkZWRhM2IsCi0JMHgwM2MzYmY3NiwgMHg1MjA3OTY1NiwgMHhjOTc5MTU2ZCwgMHg3ZDk0YjBmYywgMHhmZmIwNGQ2NywgMHhjMDYyNWYyYSwKLQkweDBlNTAyOWZlLCAweDA5N2ZhZjUyLCAweDFhYjZhYmY2LCAweDBhNzRmOTM1LCAweGEyN2UxNTVkLCAweGY3MGFkNDlhLAotCTB4ZTg5NTVjNDQsIDB4OWZlNWFlNWIsIDB4MGFhNjZiMjQsIDB4MjNkZWYyOWUsIDB4NGQ5ZGUyN2UsIDB4YWVkNDY1MTksCi0JMHhiYjA2ZWYzYiwgMHhkMGE3Zjk0YSwgMHg1M2QzYjJhYSwgMHhjMDE2NGIwNiwgMHgyODdmODQ1YiwgMHgwZmEyYzY3ZiwKLQkweDMwMzdlZjdkLCAweGZlMDM4YzFlLCAweDBiNWQ4NmMyLCAweGU4NzczODQ0LCAweGUwYjM1ZDJjLCAweDNmZGEzYTFlLAotCTB4MzYyYTRhY2IsIDB4MTJiM2Y3ZDIsIDB4NjRmNTA5NjgsIDB4ZWJjYWVmNWUsIDB4ZTdkOTU4M2QsIDB4YTA0MWI3MjMsCi0JMHhiOGYxNTdjZiwgMHg5ZTU2MmJlYywgMHg1ZTc0NjAzNywgMHhiYzVjZjcwYSwgMHg5ZDlhZjFjMiwgMHhhMGJiNDU2NiwKLQkweGEyOTFhZGM4LCAweDhkYjVjZTBmLCAweDMzM2I3Y2ZjLCAweGJhMDA2OTljLCAweDBjNmM3MjI5LCAweDZhNzY0MjFiLAotCTB4MmU4ZDMyYjQsIDB4YmMzOWU0MDMsIDB4ZTE3OWY3ZTUsIDB4YmQyM2IwYmMsIDB4ZWMyNWY1NzMsIDB4ZjNmZDNmYmIsCi0JMHgxZjlmM2U0NiwgMHhkZDdmNWZlZCwgMHg0NmUwZmJlZSwgMHg1YzY5NmZjMCwgMHhkMDM3MjNmMywgMHg5ZjI1ZDk3YSwKLQkweDkxNzY5YzYzLCAweGY1MGFlY2I1LCAweGQ0YmU5ZTc5LCAweGYzYWRmZmNmLCAweDFmZTAxYzI3LCAweDllNmQ3ZWI2LAotCTB4ZmVjZmNiMTQsIDB4ZGZmY2NhY2EsIDB4ZjhlOWZlYmQsIDB4MjE3N2UyOWUsIDB4YWIyNzQwYTksIDB4NjMzNDJmYmYsCi0JMHg1NWQ1N2U4OSwgMHg4ZTgwZjJhOCwgMHhlYzA5MzFiMiwgMHg5OWM1OTVhYiwgMHgyYmJlZTljNiwgMHhhZWM3Y2U1NCwKLQkweDVmYjhiMTBhLCAweGU4MzNlODE2LCAweGRkODMzNWRmLCAweGYzMzVmZTU3LCAweDdmZThlMjhmLCAweGM3OTRlZTcwLAotCTB4MzJkZWM5Y2YsIDB4NjlkYjE2ZmEsIDB4M2IwOGI3YmYsIDB4YTg0YWNkNmYsIDB4OTNlZjg0NjgsIDB4Y2YwMzM5ODgsCi0JMHhmNjg4NzMyYiwgMHhlNGFjYWZiZSwgMHg4ZjM4MDllYSwgMHg0NzljMGM4NCwgMHhiZGFlOWM2ZSwgMHg0MDM0NmNhYiwKLQkweGNjMGM5ZjdiLCAweDJhMjNjYzU3LCAweDIzY2U4Y2JmLCAweDc4YzEwZmFiLCAweDI5NzAxOTE2LCAweDE5NGQ4NWU2LAotCTB4Yjc5ZmY5NDgsIDB4ZWNjYzBlN2YsIDB4NDI2NzExYjcsIDB4NzY0ZmVmNTQsIDB4YTA5ZGUyZGQsIDB4ZGRhYTViZjEsCi0JMHhmZWRmYzdhMCwgMHg1NjIzYmM0ZSwgMHgzNjc1YzVmZSwgMHhmZDdiOWZjNiwgMHgwM2U0MmY1ZSwgMHhkZTNjZjFlOCwKLQkweGJiYjEyYzI1LCAweDhmNWJlM2RhLCAweDE1ZmUzZDRmLCAweDk4ZjFlYWJjLCAweDQyN2I5MWYzLCAweGU5M2MwYzUyLAotCTB4YmYzZDEyZjEsIDB4YmEwMGFjMGMsIDB4ZDExNDBkZTQsIDB4ZDA3NDI5N2UsIDB4Y2JmNjg5ZTMsIDB4NWY2ZjdlODcsCi0JMHhmOWMxZmI0MiwgMHgwOGMyYjhhYiwgMHg0MzM3MmY3NiwgMHg0NTdmZGMyMCwgMHhjMjJmMzZmZiwgMHgyNTdmY2MxZiwKLQkweDM3NDhlZDVkLCAweGUzZGI1ZTNkLCAweDk3OWY5M2QxLCAweDFlZGY1ZDFhLCAweDM3ZTYxN2MwLCAweDNlNDAwZmI5LAotCTB4YzI0ZGEzNTksIDB4MWM2ODQ5NzEsIDB4YmM3YmU3NTEsIDB4MDRlNGYxMDIsIDB4YmJlZjFlMWMsIDB4YWE0MGM3MWIsCi0JMHg1NzYyYWVmOCwgMHhmZjI4ODhlMiwgMHhlYjVhZmI4YywgMHgyNzA1ZTZlNywgMHgzOWZmMDI5ZSwgMHgwNGI3YzEyYiwKLQkweGNjNDRhNmUyLCAweDhhM2EzY2MwLCAweDNlNWFjM2JmLCAweGNkNmJmY2UzLCAweGY4YTEzZTQwLCAweDBjNDNiNmQ0LAotCTB4NjY0ZmRlMDcsIDB4NWQ0ZTc5ZWQsIDB4ZjRjZjhlYmIsIDB4ZWNmODU3ZWIsIDB4YTYzMDc4MTUsIDB4M2UxNGJlM2QsCi0JMHg3ZWUzNjg5YiwgMHgxM2QyNzc3OSwgMHg1YjIxZTRmYywgMHhkZTgwMjQ0NiwgMHg5OGE0YzEyNiwgMHgwNzUxODhmMSwKLQkweDljMzgxMWJkLCAweDA1MWY5MTVmLCAweDc3M2M4YmUyLCAweGY0MjdmOWY2LCAweDhlYjUxMzU3LCAweDFjYzBmOGFhLAotCTB4MmQ5Yjc3ZDEsIDB4Zjg1MmZlODYsIDB4Yjc0ZTRhZTMsIDB4MTNiYzg5MmIsIDB4MTI1NzRiZTIsIDB4N2Q5MTE3ZTMsCi0JMHhmZDc0NDY0MCwgMHhkZTNjNmNiMywgMHg4MGY0ODNkMiwgMHhiYWIyZWU3NSwgMHhhZjk5N2VkOCwgMHhlYTZlYjIzMywKLQkweGIzZGQwMjU2LCAweDcxZDlmOGY5LCAweDgzNGVmYzM2LCAweDExMmQ4ZDg0LCAweGJkZTI2N2ZjLCAweDI5MjliMjM1LAotCTB4Zjc4OTBmM2EsIDB4ODQxNWU5MjcsIDB4ZjAzMzcxZjksIDB4MTc4YTVjYmUsIDB4OWQxYWMxNzIsIDB4NjA5YjQyYzcsCi0JMHhmODVjN2JjNCwgMHhjNmQ3NGUzYywgMHhiNmRmOTBjOSwgMHgwMDNkZjQ0ZSwgMHhmNjExNmNlYiwgMHgxOWY1YzEwZCwKLQkweGVlYzFmZDQzLCAweDZmM2ZkYmU5LCAweGVkMDY1NWQ4LCAweGY2MjE1ZmI0LCAweDJmOWZmM2UzLCAweDc4NDNiOGIyLAotCTB4M2FiMDM5YmIsIDB4OTRmZjYzYTMsIDB4MDdkYTM1OGEsIDB4ZTFiMjJlNDUsIDB4NDFjYmM4YmIsIDB4Y2MyMmMyY2UsCi0JMHg1M2NmYzgzYiwgMHhjMjI5OWM3NiwgMHgzODg3YTBmZCwgMHhlMTQ2NWM5NywgMHgxMTNiM2VlZCwgMHhhOTczZjlmMywKLQkweDdhN2U4MWJhLCAweGI3ZjNkN2JlLCAweDkwMjc5ZjllLCAweDRmNzg0Y2YwLCAweDM2M2ZjN2NmLCAweGRmZjE0MDBmLAotCTB4OTA3MzdjMjIsIDB4ZWVjYThkZjIsIDB4Zjk0MmZjMjksIDB4NWQxYjc5ZTcsIDB4NjM4OGRiNzcsIDB4ZmRiYjgxNGYsCi0JMHg1M2NmODhjZSwgMHhmZTI5ZWVjMSwgMHhmMTBmZDQ3OSwgMHgzYWZkMDBiYywgMHhmZjE1ZDNmMiwgMHhmN2NkOTM3YywKLQkweGMyMzNmNDEyLCAweDk5ZmJlODdhLCAweGY4MDY1ZDAzLCAweGNkOTBmZTdlLCAweDU3M2MzMmYzLCAweGVkOGI5NmZjLAotCTB4MjMyZWM4MzcsIDB4M2JlNzQ4MTksIDB4Y2VhMWQzOTMsIDB4NTkzZWYwNDAsIDB4ZjY4MDgxNzksIDB4OTYxMjc2ZWMsCi0JMHgyYmRiYmM2MCwgMHg3NmJlY2QyNCwgMHhjOWZjMjVhNiwgMHg1ODdlNzBmZCwgMHg5OWVkMDAzOSwgMHgxNGZhYmUwZiwKLQkweDhmOTY3ZGYxLCAweDEzYmZjNTVjLCAweDBmZWUxODE5LCAweDE2M2JiZWZiLCAweDQzYzdkZjZhLCAweGJkZThhY2MyLAotCTB4YmVkMDlmOWQsIDB4NmUwMDkyZGQsIDB4ODc3YzBhNzMsIDB4ZmI2YjIwNWIsIDB4ZDY1N2M3ZWIsIDB4N2ZhYjg3YTEsCi0JMHg2M2RmOWNhZiwgMHhiYjIyZjcwNCwgMHg5ZmMyZmU1NSwgMHg4ZDhmY2M2YywgMHg3ZTJkZjdjYywgMHgzN2M1MDE4ZiwKLQkweGMxYjNkNWQ4LCAweGM1MGYwMjRiLCAweGY0YTU1ZmUwLCAweDhjN2IyNWM1LCAweGU2ZjVhM2MzLCAweGIxZTllNmVkLAotCTB4YzY1MTE3ZWUsIDB4ODMzZGYwNTEsIDB4ZmNmODI5MzQsIDB4NjVmZjE2MzYsIDB4YzAxYzU4ZmIsIDB4NzM0ODQ0ZjAsCi0JMHg3ZDk0YWY0ZSwgMHhkZmQwMTNjMywgMHhhMDI3NWJlYiwgMHg5NzUyNWQ3ZiwgMHhmMWE1OTg2MywgMHhiODNlZDlmMywKLQkweGY3MGY5ZjlkLCAweGZhZmY0MDVkLCAweGFmY2ZjYzlkLCAweDQyZmRjNGFiLCAweGY3ZGIzZDQ5LCAweDVjZWY4MmFjLAotCTB4MGM4OWYzYmEsIDB4YjIzZmZmNDIsIDB4YTliYzg1OWYsIDB4OTA0N2I4NTIsIDB4NTNlMDg3YjUsIDB4YWNkNTNlZjUsCi0JMHg4OTdkYjI3ZiwgMHhmNjExYjk2OSwgMHhjOTM0YmVhMywgMHg1YWJmZWI0ZCwgMHhmNzQ3MTU1ZSwgMHhjNDE5NTU0ZCwKLQkweDI5YmVlODQyLCAweDI3Y2I1N2YxLCAweGI1NGQxOGFlLCAweDIwNDc5MjczLCAweGIyYWY1ODg5LCAweGZlZmNlOThkLAotCTB4Y2I1N2Y5MzksIDB4ZTM2NTk2YWEsIDB4YWVkZTJiYmUsIDB4MjQ3NmNmZGEsIDB4MmU2ZGU3MWYsIDB4ZmI0NzYzYzQsCi0JMHhiYzEyYzdkOCwgMHgzYzU1NzZjOSwgMHhiM2ZmNGY0MiwgMHhlMDA0YWU3MSwgMHg3ZjdjZTViZiwgMHg1OWMyZjU3ZCwKLQkweDBjYjA2ZmI4LCAweGY5MGU5ZjM4LCAweGVlOWNkOTYxLCAweGIzOGYzYjJlLCAweGRjZjdkOTVhLCAweDAwZjRkNmU1LAotCTB4NDU2YmE5ZTgsIDB4ZDllNjBiOWYsIDB4ZmVmOWM2ZjYsIDB4NmI3ZTQ3MTAsIDB4YjdkYzExZTAsIDB4OGViZGY5MDUsCi0JMHg1ZTQ1ZmNmYiwgMHg2NWZhYmU3NSwgMHg1ZjY3ZTY3NiwgMHgwM2EzNDk3ZCwgMHg4Y2Q3MWRmNiwgMHg2NzdlMGJmYywKLQkweGVlYzhkYTdlLCAweDZkMTk2YjRkLCAweDRmYjlmOGQyLCAweDAzMmVmMmRhLCAweGQxNDk0YWY4LCAweGNlN2U4MjI3LAotCTB4MjBlYmIxMWUsIDB4ZWM4ZWZiZDgsIDB4NzgwZWQ0NDQsIDB4ZTQwM2IwMDQsIDB4M2M1NGZlZmMsIDB4ZWRkZmFhMDcsCi0JMHgwYjY1ZDg4MCwgMHg3NGZkNmVmZiwgMHg5ZGVhNjM3ZCwgMHhmMGRkMmNiNCwgMHhiN2VjMDcxNywgMHhjZmNjZWRiMiwKLQkweGMyNmM2ZDNiLCAweDVlNGE3NDdiLCAweDA3OWVmMTE1LCAweDZkZWE2ZTNhLCAweDlmYWU1ZjEwLCAweDFiMTBmNTk1LAotCTB4MDc2ZDRlMjYsIDB4NDNhZmJmMDksIDB4OGNhZjA3ZjEsIDB4MmVkYzAzOTMsIDB4YmM0ZDcxMmEsIDB4YmQ1YzYzZGYsCi0JMHhkYTM4YjFlOCwgMHhmN2E3ODVmYiwgMHgwZjllM2U2NiwgMHgxYjkyMjE3NCwgMHhkOTIzMjVkZCwgMHgzZjIyN2U4NSwKLQkweDVkYmZhMWU3LCAweDBlZjBhZjcwLCAweGZlYmQ3OTVlLCAweDQwYWYxYmYzLCAweDQyNzZhMjY2LCAweGQ3YzkzZjAwLAotCTB4OThlZjA1ODUsIDB4YjdmYzU2M2UsIDB4ZTM2YjVmNzEsIDB4NTI3ZjdhOTcsIDB4ODNlMzNiYjEsIDB4MjBmNDk3NDMsCi0JMHg4ZGQ3MTc4MCwgMHg1ZWMyMWRmOCwgMHhlOTRkZTYyMywgMHhmMGJjY2RmZCwgMHhjYWZjMGVjNCwgMHgzNjNmOTE0NywKLQkweDAyYjFmN2Q2LCAweDE5ZDk4NzNkLCAweDdmZDc5NjVmLCAweDk0YWVmNzhlLCAweGI4MzRkMDkxLCAweDVlYWNhNmZmLAotCTB4ZjdjODg2NzQsIDB4NmYyNWU5ZTksIDB4NmFjMWRmYzMsIDB4ZTAyZTRhMGIsIDB4ZWVlMGI2ZGYsIDB4NmY1MDIxYjgsCi0JMHg1NjFlMzExMCwgMHg2NWY2NGVmZSwgMHg0MWFkNjdjMCwgMHgyOTFmZWYwOSwgMHgwMWNjN2VkZiwgMHhmM2IxNDBmYSwKLQkweDJmNzY0MWFkLCAweDA4ZjA1YjQ5LCAweGI2ZTA1NzNlLCAweDA2NWYyNDM2LCAweDgxODM2N2Y2LCAweGVkNzczZmVkLAotCTB4ZmEwYWQ2ZjksIDB4NjdmM2Y1ZTEsIDB4YWJkZjcxOTMsIDB4ZmY5ZDY5ZDgsIDB4NzM3N2M0YWIsIDB4YmUyNDYyZWQsCi0JMHg4OTZmZjZhYiwgMHhmMjAwN2Q5OCwgMHgyNDEyZjJhNywgMHg3ZjUxMGEyMiwgMHhmZTlkOWRiNSwgMHg5M2IxMmM4OCwKLQkweDgyM2FmNmY2LCAweDgyMzFlMjdmLCAweDc3ZWRlYjljLCAweGZiM2FkZjA0LCAweGZiOWQ4OGZkLCAweDMwYzhiZDhmLAotCTB4ZTFhZmM3YjgsIDB4ZmM3Y2YyN2MsIDB4NzU2ODMzZWUsIDB4MGNmOGMyMmUsIDB4NzZkYTRmZjMsIDB4MTRkOGZhN2QsCi0JMHg2NDRmYmU3OCwgMHgxNzlmZmRkZiwgMHhkOGRmZWY5MSwgMHhiMzc3YmYzMSwgMHgyYWY3OGQ0ZCwgMHg2ZWI5ZDdhNCwKLQkweGQxYjc1YTY3LCAweGM3NzZlN2ZlLCAweGQxYjU3OGIzLCAweGJiZmE5OTdkLCAweDAwZmY2ODgzLCAweDNiYTg1N2M3LAotCTB4YmI5MmY3M2IsIDB4M2YzYjdkYzMsIDB4YjcwY2ZmZGEsIDB4NDVlYWZmYmIsIDB4YjhkMmY3OTAsIDB4YzM1MDQ0ZjAsCi0JMHg5OTBlNmJmZCwgMHhiMzBjNWY0MCwgMHg3YTYyNWY3YiwgMHg3YTBhY2VhMCwgMHg3YmUzMjY0MCwgMHg1MTZlM2ExMCwKLQkweGZjMGYxOTNjLCAweDRlMjRhZTE1LCAweDc1N2JjM2M4LCAweDc0MDBjMWFmLCAweDAzMzZiMTE5LCAweGYxZDY2NGYzLAotCTB4NzU3OWMxNzMsIDB4OTUwY2E2ZDUsIDB4Y2ZjNzk5N2UsIDB4NzI0YTRlOTUsIDB4ZjllYTkyN2EsIDB4MDNkMzA3NzAsCi0JMHgzZjE3NzcyNywgMHgwM2YyZmE4NywgMHhjMzE3ZTkzMywgMHg5ODNiMjYzZSwgMHg5MjY0ZGJiZCwgMHg3ZTg3YWNhNywKLQkweGVmYjgwZDg3LCAweGViNjdiNWQ4LCAweDZlMGZiODFlLCAweDUwZDc0MWRlLCAweDQxYTczN2IwLCAweDg2YmMyODFlLAotCTB4MjBhYWViN2QsIDB4MjNlMWI2Y2YsIDB4YmY1NDE2YjAsIDB4MGQxMDI5YWYsIDB4YzQ2ZGRjNzQsIDB4MDc2NGUyYzUsCi0JMHg4ZGZmYjgwYywgMHgyNzg5MTdjNCwgMHgyOWY5ZDYxOSwgMHhmNmRiYmZkNywgMHg1MGU3MzQxYSwgMHhhNDNkZjhkYiwKLQkweDM5ZDlkYTFmLCAweDhiM2I3ZWQ0LCAweDNiZGM2ZDUzLCAweDk0NGVmOTNlLCAweGQwMDFkZjQzLCAweDliNDdlNWZmLAotCTB4NjhhZTFjYWIsIDB4OTdmMTRkNWMsIDB4MzhkODFjYzYsIDB4ZTdmZDMwNjUsIDB4MTM4MzE2OTgsIDB4YjAzYWVkYzgsCi0JMHhiYWY1ODQ1YSwgMHgyNWRiNTI0ZSwgMHgxM2ZlNzY5MCwgMHgxYTg5Zjc4NSwgMHgwNjE2YjZkZSwgMHgwZGUzY2U4ZiwKLQkweGZmMDU1MzkwLCAweDNjM2YwMmQ0LCAweDM1YjdkNjg4LCAweGJmMjA5MzE5LCAweGIyYmZjMTRhLCAweDU3N2M2NTBlLAotCTB4YjJhY2YxMWQsIDB4MzY3OTI4YTEsIDB4NTc3YzRmN2UsIDB4Yjg3Y2Y3YjksIDB4YTBmNzI4OTMsIDB4YjZjZTVmMjMsCi0JMHgzZjE5NWE3YiwgMHgzZjUwZTljOCwgMHhmZDFlM2JiOSwgMHg5ZWRjNGQ5MiwgMHhkZTgyYjQ5MSwgMHg0ZTg1M2Y4MCwKLQkweDdmNjYwZTA5LCAweDM0NzRmOTk0LCAweGJmYTczYzdlLCAweGJlNTBmZTUyLCAweDY0YjkyNzVlLCAweDFmN2UxYmU0LAotCTB4YzUwZTRiYTAsIDB4YWUzYzgxZjUsIDB4NzdmODNlODYsIDB4YWU3OTU0NWEsIDB4NDdjMDBlZjEsIDB4ZDQ3ZTM2OGIsCi0JMHhjMDMwNmNkMCwgMHhkYjY1NThmNywgMHg2NmJjNDQ4NSwgMHg2ZGZlOTNhNCwgMHg3NThjY2Y4NCwgMHgwNzBkN2ZjOCwKLQkweDcxNzFjYTA5LCAweGJlMmM1ZGVkLCAweGY4M2Q0MjQ3LCAweDVlNzg1OGJkLCAweGNmYzNmMjBkLCAweGI0MDliYmFkLAotCTB4YjU1YzEzMWMsIDB4MzdlMjA3YjgsIDB4OGFiOTAwZTQsIDB4MGRjYTg5ZTIsIDB4MjZkNTE1OTQsIDB4Zjc3OWQ3ZTAsCi0JMHgzZjJlNzJiMCwgMHhkMmI3OWRmZiwgMHg1ODU5ZjI4NywgMHhmYWZiZjJjMywgMHg3Y2Q4MzIzYSwgMHg0MzEyYmYzOCwKLQkweGZiYzg3NzdjLCAweDdmZGI4ZTc4LCAweDAyMmZkZTY1LCAweGE5ZmFkMmRmLCAweDYxMWJjN2ZhLCAweDk3NWZjYTVjLAotCTB4ZGVlZTIwM2EsIDB4MzA1M2U4ZjAsIDB4NGY1Zjg1NWQsIDB4NGUxMDkxYWQsIDB4N2NmNmJjNTEsIDB4ZDc0ZTcyZmMsCi0JMHg3ZTMwMGY1NywgMHgxYTQ2YjMxZiwgMHg4ZDMxZjcwZiwgMHhlMjEzODk5MSwgMHhhY2Q2ZGJjNSwgMHg2ZjdmNDExNSwKLQkweDYwY2U3ZTAzLCAweGZkNzYwZTcyLCAweGFjODdlZWU0LCAweDc3M2IwNGJmLCAweDJlMjA0MGM4LCAweDhhNDRjOWJkLAotCTB4NjJlNGE4MzYsIDB4MzRkN2FhZDcsIDB4NWI1YzViZjIsIDB4ZGZlMzA1MzksIDB4ZTgwMjQ5Y2QsIDB4MTU2ZTQ1NzksCi0JMHhiOTMyNmZiYywgMHg1ZmZjYTMyNywgMHgwOWZmOTNhYiwgMHgwZTM5ZmRlYywgMHhiOWM3OTc0NiwgMHg4OTNlM2ZmYywKLQkweDk0N2QzZmNhLCAweDAwNTEyNmI4LCAweGIxNGM5YjM4LCAweGY2OWFlOWVmLCAweGEyMmZmOTIzLCAweGQzYjY4ZjU3LAotCTB4NmMxY2QzYWIsIDB4NDNlOGVmNWYsIDB4ZTZiYjJmYzcsIDB4MjNlYmVlMmMsIDB4ZjM3Y2UzZjMsIDB4NmY4NTA0ZjgsCi0JMHg3ZmMwMDQzMiwgMHg1ZjYwYTUzNSwgMHgyYmM1MTdjMCwgMHhhZmZhMzNmMCwgMHgzMjczNmZhMCwgMHhmNmExYmVmMSwKLQkweDM5NDhiOGZjLCAweDZkYzhkMzk3LCAweGYyMjlhZjU0LCAweDdhMDIyYmViLCAweDU4YTg0ZDY3LCAweDcyNzY3ZTBjLAotCTB4N2E3YzhjYmUsIDB4NGVmNWYwNGEsIDB4MTRlZDc2YTIsIDB4YmQwYzczYzgsIDB4ZjRjMWQxMzAsIDB4YTdjOTM5YzgsCi0JMHhmZGJjYWZiOSwgMHhlMDc3NDgzYywgMHg2M2JhMjJlYiwgMHgxYTkxNzU4MywgMHg1MWY0MDljMSwgMHg2YzM1NWRkYSwKLQkweGMzOTRiMTVmLCAweGY1MmI5ZTUzLCAweDJmZjc4ZDFmLCAweDk3ODNjNWRhLCAweDMzM2Q5ODNhLCAweDdmYjA1NmMxLAotCTB4MjIzM2Q5ODAsIDB4MjBiOTQ3OGMsIDB4ODNiYmFiODYsIDB4NzZhM2NkYmMsIDB4MWQ5NTU2ZWMsIDB4MjM1NTI1M2IsCi0JMHhmODc4MmFiZiwgMHg3M2Y3ZTczNSwgMHg1N2RkNmM4OSwgMHg4Mjk2NzlmMSwgMHg2NzNhYTdlZiwgMHhhMzA0MWJhMiwKLQkweDE0NWFlNGMwLCAweDAwOGJiYzk4LCAweGIxZWVkNGZmLCAweGFmZWY5MTkzLCAweGYzZjdjZDg5LCAweGZlNDJhZmQ3LAotCTB4YzRlNDljNGMsIDB4MzcxZTQ4ZWYsIDB4ODM4OTJkYmEsIDB4MDBlM2U5NjIsIDB4ZmVkNmJiOTYsIDB4YzA1OWY3MDYsCi0JMHgxZGY3MjBjNywgMHhjODExNDFjOSwgMHhmZmMxODkwMSwgMHgyYWZmY2EwMSwgMHg0MDdjMjlmYSwgMHg4NzQ1ZTJmOSwKLQkweGY5ZTg0ZjRhLCAweDUzZGYzOTQyLCAweDc3NDliMmYwLCAweGViOGU3ODNlLCAweGJhNWU0NmY5LCAweDUxNTNjODNhLAotCTB4ZTlhM2YzZDYsIDB4Y2U4ZWQyZGMsIDB4NDczYTMwNmYsIDB4YWRlODBiZTUsIDB4ODFkZjg5ZTgsIDB4MmM3NGE1OWMsCi0JMHg5YzEyZmQ2NywgMHg4ZmFhOWYzOCwgMHg0ODVlNjE2NywgMHhhYTI3M2YzNSwgMHhmMzI5ZTNlMywgMHg0MmY1YzAzZSwKLQkweDM1M2NlNzQ3LCAweDFjNWZkZjU2LCAweGQ3NDhmM2JhLCAweGU0N2YyOGEwLCAweGMxNzZiZjcxLCAweGIzOWUzMzVhLAotCTB4OWU0YzIwNmYsIDB4MDFmMTVkZTUsIDB4NGU5ZTc3ZjUsIDB4Mjk0Yzc1MjMsIDB4M2U4MDhmYWEsIDB4Mzg1Njg5MWYsCi0JMHg0MmQ3NzUwNCwgMHhjNzRiZTkxMywgMHhiMDUxOTczZCwgMHg3ZTZkZjIwYiwgMHgwZmU3MjRkNiwgMHg2MGQ4ZWJhNiwKLQkweDgzNWVhNzkyLCAweDY0ZjcwMWZiLCAweGRmMzkzZjgwLCAweDZmNzg4NGUwLCAweDQwMjljN2EyLCAweDAzNDMwMjNjLAotCTB4ZDhmYjg3MjAsIDB4YjhmYmMzMzgsIDB4YWI3ZGMzMmYsIDB4ZjQxYzNkY2IsIDB4MmY0ZTY5YzEsIDB4MWUwYWJlODUsCi0JMHgxZDc3YjIzYSwgMHgwMjVmYjVkMSwgMHhlZGUzYTczZiwgMHgyNmYyM2Q3YSwgMHgzOGU3OWI5NywgMHg0N2FlMmYxZSwKLQkweGM5ZTQxMTY0LCAweDQ0OGI3YzQxLCAweGQzMzY3Zjk4LCAweDkyM2QxMTgzLCAweGQwMWNmMDRkLCAweDllNTVjN2MxLAotCTB4NTA5ZmY1MmIsIDB4NTIxMjM4OGYsIDB4NzQ2NDdhNTQsIDB4NDIzZDRjNzMsIDB4M2ZlNTMxN2YsIDB4ZjQxY2NkNjUsCi0JMHhkOGMxYzk2NywgMHgwMjdhNmNmZSwgMHg2MDI5YzdiMywgMHgxNGJmNjk0NywgMHhkMzNkZmQ5OSwgMHg1MDNlZGNkMywKLQkweGM1N2NjNDhlLCAweDhjNjYzNWVhLCAweGM4N2EyYmUzLCAweDg3OGM5NTMxLCAweDAwZWFjZmJmLCAweGE2YmQwYmJiLAotCTB4MDk1ZTBlZmEsIDB4MjY2OWIzZTcsIDB4OWYxNzljMTcsIDB4Zjc0OGMyOTIsIDB4NWNjMzc0NTMsIDB4MTVlMWZjOGQsCi0JMHhmNDMxZGU4MCwgMHg4NWY4ODExMSwgMHgyYzllZDdmYywgMHg1MTA2MmVmZSwgMHgxMWU0MTY0ZSwgMHhkNmJiYTNiNCwKLQkweDJhYmU0MjhlLCAweDgwMTRjZmNhLCAweDEzNmI4YjZmLCAweDlhNGY2ODA1LCAweGJlODAzNGUwLCAweDZhMzFkNjUyLAotCTB4NDlmYzg4YTEsIDB4ODI0NDYwZTUsIDB4ZTRhMzFlOGEsIDB4ZDVmMDExMGEsIDB4MjY5N2Q5M2IsIDB4ZDZmZGQyMjUsCi0JMHg0Y2ZkNTdhZiwgMHhkMGYxYmYxZCwgMHg2OGI0OGFmYSwgMHgxZmQ2ODZmYywgMHg3Y2ViNzViNCwgMHgyMTM3MjZmYywKLQkweDNmZTQyMGYwLCAweGU0ZjBlYWRjLCAweDU2MzViOGMwLCAweDU5OTQyZTZmLCAweGNlMzAyYjVkLCAweDg4YmNkOWRiLAotCTB4ZTUyZmNiMWYsIDB4MGU0NDRlM2MsIDB4Y2VjYjhiYjQsIDB4NWM2MTc1YWMsIDB4YTdjYzFhNzYsIDB4YTdmMWZiYWMsCi0JMHg3M2RlMWMwMCwgMHg2NmVmZDMxMSwgMHhmNWMyZThmMywgMHgyMDg4ZjkwMiwgMHgyYjc4YmEzZCwgMHgyODk3ODg0NCwKLQkweDM4NGVlNzdhLCAweGY2YTE0NTk0LCAweGExYWU3MDA4LCAweDJkZTgxYmM4LCAweDNjOTVhN2YwLCAweGQ5NWI4ODA4LAotCTB4NDAxZjZlMzEsIDB4YzI3YTgyM2UsIDB4NWEzZWE4YjAsIDB4Nzk4ODZmOTEsIDB4MDRjMmYxNWYsIDB4OWZhYTRmZGIsCi0JMHg5YmVmZjA0OSwgMHg0NzdjYTk3ZiwgMHgyZDNjYTIyOCwgMHhlYmU5NTA0YywgMHhhNzBmZjNjNywgMHg3NjA4ZjNiMiwKLQkweDdjZGRkZmFmLCAweGI5MTZlNzhjLCAweDRiYTAzNGZmLCAweGExODY3ZWY0LCAweGY5MGM5MzY2LCAweDVjNDNjNGE2LAotCTB4YjFmZTU1NGUsIDB4NzY0MjE0MTAsIDB4NTZmZDYzYzgsIDB4ODc0YTFlMjAsIDB4MmM0NTZmYjYsIDB4ZGUzZmZiOWYsCi0JMHhjZmUwMTk0OSwgMHhkNGRjMTgzNywgMHgwYmZjODIzMywgMHg2Zjc3MDc5NCwgMHhkNGE3ZGY4MiwgMHg3MzEyN2JmMSwKLQkweDA5MWU2ZDFhLCAweDFjNDIxZGUyLCAweGEzZGE4ZWZmLCAweDFkMThlNzNkLCAweGRiNGY1ZjRlLCAweGY4Y2QwNzE3LAotCTB4NzJkYWZkYjcsIDB4ZTBhZmJmOTQsIDB4MTU5OGVmYzYsIDB4ZTc3OTBlZmMsIDB4ZDc5ODgxZjEsIDB4ODM3NmFjNjksCi0JMHgzMGI2YWQ5YywgMHgyYzJkYWJmOCwgMHhhMmRhYjc2ZSwgMHgwMDRhZTdiYywgMHg3OWQxZGRiYiwgMHgxZWMyZjY3YiwKLQkweGUyNTNmZjE4LCAweDkwZTFkOThkLCAweDBjYzlmODA4LCAweGM5MmMwY2JiLCAweDBjNjc4ZDhkLCAweDcyYjc1YzEzLAotCTB4ZjFjNzVmMGUsIDB4NDZlZjY5YmYsIDB4ZDY3OWVjMTEsIDB4YjBjNWVhODQsIDB4Zjc2M2Q5ZWYsIDB4NmJmYTAwYmQsCi0JMHhkZmQ2YjY2YywgMHhmM2YwMjExYiwgMHhmNzA0YzllMSwgMHgyNDljOGE0YiwgMHhlMDlkOTMzNywgMHg2YzFlMjRkYSwKLQkweDFhMGE4MGY2LCAweDEzYjNkMjdiLCAweDVlMDk5NWY2LCAweDU1M2MwMDIyLCAweDgwMDZjZmZlLCAweDg0NzhiYTRiLAotCTB4ZGZjMGJhNmIsIDB4ZmI3ZmU1ZWIsIDB4YjRkOWMzOTAsIDB4NzIwMGJjNzcsIDB4ODI2OWE1ZGYsIDB4OWVkNDFhZTAsCi0JMHhmZWMyNTdjZiwgMHg1M2NiMDQ3YiwgMHhmYjJhZmEwMSwgMHg1ZTJmZGVjMiwgMHhhNWYwMDEzYSwgMHhmYWUyNmZmNCwKLQkweDJmOWYwYWZjLCAweDc0YzY0MjE3LCAweDc3MTgyMTNkLCAweDIzNDBmNGNjLCAweGFhMzU0OTVjLCAweGI5MzQ2ZTQ4LAotCTB4NDc5OWViNTQsIDB4NjY4ZjVlMTAsIDB4ZWRkMWQ3MTksIDB4Y2EwNzJmYTAsIDB4MWM0NGI2NjMsIDB4MTBjOWVjNzcsCi0JMHhhZDc0YjdlNiwgMHg0M2Y2OTAyMCwgMHg0MDFkMzU3YSwgMHg0NTU3YWEzZiwgMHhkY2Y0MDA5MywgMHg5YzBkZjdiNCwKLQkweDVkYTZjZjZmLCAweGI1ZjJlNGFjLCAweGNhMDVmYjkxLCAweDk4ZDk4ZWJjLCAweGNmYzYzY2RkLCAweDMzNGVhYmE5LAotCTB4YzEyMDc5YmIsIDB4Y2E0YmY5ODcsIDB4N2M3MmFhM2EsIDB4ZmUxNDE1NjksIDB4MTljYmM4NGEsIDB4Y2U1ZTcxZDEsCi0JMHhiMjkzMDQ5MSwgMHhkNjA4ZmZkZiwgMHg3OWJkM2U1NywgMHgzZWEwZjAwZiwgMHhlZmJhOTA3ZSwgMHg3NTIzZDIzMCwKLQkweGFmOTZkYjIxLCAweDAwNDBiN2RjLCAweDQ2NzJiMTdkLCAweGEyODFmOGVjLCAweGY4ZjI1NjM3LCAweGU1ZmYyYWFiLAotCTB4NGY0ZjVhOTQsIDB4NjZiMjQ4MjksIDB4ZjI5MmY0YWEsIDB4ZmNkMTUzZGUsIDB4ZmYzYzRkOTcsIDB4N2JjZDAzZTUsCi0JMHg4MDVhOTc4MywgMHg3OWIyZWU5ZiwgMHhlNTczYzBjZSwgMHhlM2FkMGJlZiwgMHhkOTQ3Yjc3ZiwgMHhiYWY4MmFjZiwKLQkweDgwZmNjOWMyLCAweDFmZDcwOTAzLCAweGMwMjQ3MzgzLCAweGYxZjI5MzkzLCAweDNjZWM0YjNhLCAweDA2OWRjYmYyLAotCTB4N2UzMDc3ZWUsIDB4NWY4YzRkMjEsIDB4ZmY2YTFkNjAsIDB4YjAwMWJmZWIsIDB4MDBkNzQzMmYsIDB4MDAwMGQ3NDMsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHhjOTMzMjY2NiwKLQkweGU0Y2M5OTI0LCAweDQwMjc1ZTQ5LCAweDIxYzQwYTMwLCAweGViMTQxMDIxLCAweGVmMGMwMTI0LCAweDAyNDE1MDQxLAotCTB4ODA0MjEyMGMsIDB4MmE5NDEzMjQsIDB4ODA2NWJkNmQsIDB4OGQ1MjAzMTgsIDB4OGJkNGI0NWUsIDB4ZDdhNTc4M2EsCi0JMHgyOTQxYjYyMiwgMHg4NGVjMWE4NiwgMHgzYTBiYzE1NywgMHg5NGI2MmEyOCwgMHhhYTU0MTQxYiwgMHhhNWFjNDA5MCwKLQkweGQ3Zjk3Yjk2LCAweDY2MWY3YjVhLCAweDk2MjI2NGNlLCAweGJmZWZiZjYyLCAweDc2N2U5ZmZmLCAweDY3ZDljZmIzLAotCTB4ZmJkN2I1OWYsIDB4NjQ5ZWNmYjEsIDB4MTI1OGM0YWIsIDB4ZGQzYjM3NjMsIDB4ZDhjNjdhNjUsIDB4YzFiNzU4YmUsCi0JMHg4OGQ4YzQ1YSwgMHg1OTZlZGY2MiwgMHhiOTc4NmM2MSwgMHhkYTFlYjc3NywgMHgzYmJmNTY0YywgMHg5NDA2MTEzNiwKLQkweDY4MjZjNzMzLCAweDNkYWMxZGVjLCAweGEzODRkYTBlLCAweGI4MzhjZTFkLCAweGEzNmFkZmRmLCAweGFjZmE2ZTc5LAotCTB4OGMyZGI5OGIsIDB4YWI5ODk1MGQsIDB4OTc2MzEwNjUsIDB4NjBkNmVmZjAsIDB4MzFkNTZhOWIsIDB4MDYyN2YzMDYsCi0JMHhlMzA2MjU0YSwgMHg2Y2I4YzQzNiwgMHhlOTYxYmVmOCwgMHg0MDAxYjJmNSwgMHhmMWQ2NjQ0OSwgMHgwMzYzMWZhYywKLQkweDJiOGQwYWFkLCAweDk2ZWU3NjJjLCAweGE3NTYzZGUxLCAweDhiNzljNjRiLCAweDllZjRhYzYzLCAweDZhNzcxY2M2LAotCTB4MWQzZTdmM2QsIDB4NGU4OTY3OWYsIDB4MzdjMDIyNjksIDB4NWIxOGJmZWMsIDB4ZmI2ZGRkMDMsIDB4MTA2NTI1NGIsCi0JMHg2ZjE0NjdiZSwgMHhjMGI2NzMxOSwgMHgwNTYwNTdmOCwgMHgxMTU5NzBhMSwgMHg5ZjdjMjQ5ZSwgMHgzOWViZWY0NCwKLQkweDRhY2YzYmJmLCAweDEyOWNlYWYwLCAweGE4ZmMzMjRjLCAweGU4NjBjN2M1LCAweDMyZjVhNWYwLCAweDAyYzg5ZmMyLAotCTB4NmQwMDAzMTIsIDB4MjMxMmQ2ZDUsIDB4YzZiZDM3YmMsIDB4ZmU2MWI5MjEsIDB4Zjk1YzYyOWIsIDB4MGU2MzVjZjgsCi0JMHg2ZDBhMWM1YywgMHgwYWI3Y2U4OSwgMHhlNzEwM2I5ZSwgMHhmOTgxNjUzYywgMHhmNjY4YmYxNywgMHhmYTMxMzQ5ZSwKLQkweGQ1ZmYwNGJiLCAweGZhNjgyNGI2LCAweGVmMzRkNjllLCAweDdmNjBiY2M5LCAweDBkMjNmZTMxLCAweDRjY2ZkYmZlLAotCTB4MzU2MzE4NmMsIDB4NDA3YjE2ZmMsIDB4ZWY4Y2RmNzYsIDB4M2M3NTM1YTksIDB4NzVmYTE3M2EsIDB4YzhjYWY4YmYsCi0JMHhhZTBhNDk2MCwgMHg2NTc4ZTAxNywgMHgzZGNjNDE3ZiwgMHhhNzdhZTA5NiwgMHg5OTc3YTRmNSwgMHhiZDI3YTkzNSwKLQkweGRlODI0YTg3LCAweDRhZGU4MTYzLCAweGIyOWY3YTRmLCAweDNiN2EwODI0LCAweGZhYzEwN2RiLCAweGMyNGM1ZGUyLAotCTB4MTM1ZjAxZTcsIDB4ODVkYzNkMzksIDB4Yjc4OGMxYWUsIDB4MzgwMzMyYTUsIDB4NTg3YTQ1NWUsIDB4NTM4ZjRjYWUsCi0JMHhhNzFmY2UxNiwgMHgyYTFlOWMyYywgMHgzOGM2ZTYxZCwgMHg3NWQyYjRlZiwgMHg5NmY1ZWY0NiwgMHhiZWJjM2NiMiwKLQkweGRjYWU4Mjc2LCAweDE2Y2Y4MTE3LCAweGVlMzQyZDU5LCAweDA1ZmNmMWFhLCAweDk5ZTI4N2QzLCAweGZiNmRmZGI1LAotCTB4YzFlZmExMGYsIDB4Zjc4NGNiN2YsIDB4YzAzNzg4NDUsIDB4NTgzZjVjN2IsIDB4Zjg0ZWJmZjcsIDB4NTNmOTE5MjgsCi0JMHgyMDNhZWE2NywgMHhkYjZhM2UwMSwgMHgyNTg2NDU2NCwgMHg5Yzk1NGMwYywgMHg1YjE5MGIyNywgMHg4OWNkYTBmNSwKLQkweDhiNWNmMDdjLCAweGYxODI4OGU0LCAweDZiMTRjOWNjLCAweDIyNTY0MzMyLCAweDc1ZmQ5ZDYyLCAweDExYmIzZTdjLAotCTB4ODM2MGI4NWEsIDB4YTMzNGRlNzEsIDB4Y2VmMjEzNmYsIDB4OGMzM2MwMWUsIDB4MzgwODI0ZjMsIDB4MDAxZmUwMWEsCi0JMHgwNTU1YTc0NywgMHgwZGY3NDljYywgMHg1NTlmZjJlYywgMHhmODUxZmI4MiwgMHg2YTRiOTgyZiwgMHg4MDk3NmY2OSwKLQkweDk5OGFhYjcwLCAweGVmNzAwMGRiLCAweDFmODk5MzZlLCAweGY2OGM2YjlmLCAweDJmZmNjMTQ1LCAweDYwN2YzOTZkLAotCTB4M2ZmYmY0MjYsIDB4YzE2NWMzYTgsIDB4MjdlYjA0ZGYsIDB4NTNhOGY4MzEsIDB4MWNhZDA0YmEsIDB4YzNkM2NhNjcsCi0JMHhlZDFjODc3ZCwgMHg0YjdjNjE5MCwgMHg4YjNlNWM3NCwgMHgzNzY0YWM2NywgMHg5NTViM2YzMSwgMHg3YmMwZjMwYiwKLQkweGQzNDdiNTU2LCAweDgyZTU1NmZhLCAweDFmMTBlNDdjLCAweGQ5Zjg4NjNjLCAweDY5NjQ2YjEzLCAweGU0MWJiZDcwLAotCTB4NjcwZGM3MDYsIDB4Y2M4Y2VmMWQsIDB4YmJhOWQyMDksIDB4YmJkOWNiZjUsIDB4MTg5ZWZkNjAsIDB4MjYyN2FmM2UsCi0JMHhkZTAwYzdjYiwgMHgwNzE3NWRjZSwgMHg1YjhmMWYyMCwgMHhjYTM1Y2YzNiwgMHhkOTI0ZDhjZSwgMHhhZmU5MWViZCwKLQkweGRlNjZmNzNlLCAweDZmODg3MWM3LCAweDVlMDgzMmM2LCAweDg0MWM5ZmEyLCAweGFjZGUzMmVmLCAweGFjNzJiZjFjLAotCTB4YzlkMWQ2OWUsIDB4ZWViODFkYTIsIDB4MjE5M2EzMTYsIDB4MzljN2JjOWQsIDB4YWQ3OGFiN2YsIDB4ZDlkMWJjMTMsCi0JMHgwZGQ0NzQ1NiwgMHg2OGVlN2JlYiwgMHhlZjlmMDM4NiwgMHhlYjM2ZWQ2YywgMHhlMmNiN2RlMCwgMHg3NWMwYmZkZCwKLQkweDcxNWQ5OWM5LCAweGNmODg0MWFlLCAweDA2M2JlYmVlLCAweDA5N2ExZTkxLCAweGZjMWY3N2FmLCAweDc0MWVlNmQ4LAotCTB4ODZkYmViNTUsIDB4N2Q2OTVmY2YsIDB4NDlhNWJkMWUsIDB4M2ZjOWVmOGEsIDB4YjUyMDdjZTEsIDB4Y2E1NWZmYjUsCi0JMHhhODYxMzkyNywgMHhjYzU5YmNiNywgMHhkZGQ2MGFiNywgMHg5MzQ4NzgzOCwgMHhjNjllODQ4YywgMHhjNjRmOTQxNCwKLQkweDBjOWZhYzJhLCAweDJhYmJkMjBjLCAweGYxMDdiNWRlLCAweDhjZDdjYWFjLCAweDg0M2VkNzc4LCAweDVlOTNkZjBiLAotCTB4OGZkY2ViNDAsIDB4ZjM0M2ZjZmQsIDB4YWJiYTBkMGEsIDB4YzhlMWU3NWEsIDB4ZmUxM2Y0ZWIsIDB4NmE3YWM1NmIsCi0JMHgwY2JmMTY0ZCwgMHg4NjZkYjNmMCwgMHhmOTU0M2EyZiwgMHg1ZTEzZGJlYywgMHgwZTMxYzdhMCwgMHgxYmE4ZTNhZiwKLQkweDhiN2JmOWU5LCAweDQzZTIxNTYzLCAweDYyYmFiMDFmLCAweGY4ZTNmZTA5LCAweDM3M2M1NjNlLCAweDIxYmJkNzE1LAotCTB4ODU4ZjY5YzYsIDB4MzA1NzliZjEsIDB4YjQ1MjBmY2UsIDB4ZGM1ODc5ZTMsIDB4NjhiNjNkZDYsIDB4ZjE1NTkzZDQsCi0JMHhkZjM4NTNlZSwgMHhiM2YzYmEwZCwgMHgwMmM3Njg1ZCwgMHhkYzNkZGQyZSwgMHhkNzg2N2MwZSwgMHg3YWRkZGQ2MSwKLQkweGM2NWVhMzgyLCAweGZkNjJhZmY5LCAweDcxZjMyMmU3LCAweGQ5ZmMzYTBmLCAweDU0ZTdhMjFhLCAweGY0MTQ4Y2ZjLAotCTB4NDFmODg5MWQsIDB4ZmZhNWRjODUsIDB4YzQxNGMzYTIsIDB4M2Q0YTA0OGYsIDB4M2U3M2Q2ZGQsIDB4MTBiMjNhYzYsCi0JMHg5ZjFkZjZkZSwgMHhmOTgwZTgwZSwgMHg3NGY4ZGVlYSwgMHhkZDZmY2EzNiwgMHhiODg4YTI2ZiwgMHg3ZDczN2VhMywKLQkweGQ5ZjFmMjNjLCAweGM1YmQzNjEyLCAweDdlOWY1M2QyLCAweGE1ZGViY2IxLCAweDFmZmFlNjA3LCAweGNiZDI1ZjZiLAotCTB4NDQ2MDJjMzUsIDB4YjJkYjVkM2IsIDB4ZDEwZmE1YzQsIDB4ZTkzMTAwYTcsIDB4YzA4NjgzZGQsIDB4NjBmZjljMDQsCi0JMHgwMDU2Y2M5MSwgMHg4NjNiNzVkZiwgMHg3YTA4YjBhNywgMHg1YWRmNmQ1YSwgMHhiOTk1NWNjZSwgMHhmNTEyZmQ4YywKLQkweDhlZDdmMjFjLCAweDk3ODRmMWExLCAweGUzZTkxYjM2LCAweDk3MDdmMWYwLCAweDE5NDZiYjU3LCAweGUwZWY5ZjdhLAotCTB4MWY3NGYzMTAsIDB4Y2MyMTNmM2MsIDB4ODEzMWI5MGYsIDB4YTIzMTk1ZGIsIDB4NDRlOTQ1MDUsIDB4OGY2Y2NmMzgsCi0JMHhkMmUxNzlmNSwgMHhlMmY3ODI5OSwgMHhjY2U5ZTAxOCwgMHhiZDBiNzdiNiwgMHg1ODY3MmZjMCwgMHg1MWQ3YmVlMCwKLQkweDMwYjRiZTdlLCAweDBjMjY3YmY0LCAweDQ1NzBhZjc5LCAweDZlZGU1MDZjLCAweGJmNmJlNjI5LCAweDcxNDNiNWU1LAotCTB4YjA5ZjhjMGEsIDB4MzdhMjc3NzUsIDB4MzBiNzdmMDQsIDB4Zjk5Nzk3ZmQsIDB4Y2JkZjA3MzcsIDB4MWRmNGM3ZDcsCi0JMHhlYzFlOTAwMywgMHgwYWM5ZDNmNSwgMHhlYzc2MTNiNCwgMHhhMDdjZTQ0ZCwgMHg0YmNlOTBlOCwgMHgxNWZhZGU4NSwKLQkweDljMTExYTVlLCAweDNhYjJjMjZmLCAweDYwYzJhOGQ3LCAweDk5ODJmNmJmLCAweGZhZmI0MmY5LCAweDVmNGQxMTgwLAotCTB4NWQwYjA1ZWQsIDB4MjZjNDI3YjcsIDB4YzNlOGZlOTIsIDB4ZjhmZWEwZmEsIDB4YmYwYjc4YjYsIDB4ZTBlZGUyYWUsCi0JMHg2ODU5ZDM5MCwgMHgyMzlhY2ZiZiwgMHg2MmVkYzlmMywgMHg0NDYzYjc1YywgMHgxMzQ3ZmEwYSwgMHhkNmZlZmU4YywKLQkweGYzMThlMzA4LCAweDc1ZjBiOGQxLCAweGVkZGNiOWJkLCAweDNiZGI5NTFhLCAweGNjOGRlMzdjLCAweDFjYWZjOTFkLAotCTB4OWFmZGMwOWYsIDB4Nzk5OTg3NmUsIDB4ZGJlZmFlNDEsIDB4NzQzYjIwNjgsIDB4ZDMwN2UyZTgsIDB4OWY3ZTgxMGEsCi0JMHg1NzU4MzA2ZSwgMHg5ZmFiM2UwMiwgMHhhZmYxOWRkOSwgMHg0ODdhYmY3MCwgMHhmZTgyNTU5NCwgMHgzZmJmOGFhNywKLQkweDY3ODJmMWYyLCAweGZiYWUxNzY0LCAweDI1ZjcwZGQzLCAweDczZjY4M2NmLCAweDgwMWFjN2UwLCAweDAzNDZjMTYzLAotCTB4ZjhkZWFmNWQsIDB4NWE3ZWJhN2QsIDB4Njc4MmU5ZjAsIDB4OWVhMjA2OTIsIDB4NGQ2N2I0M2YsIDB4ZmFiM2FlMzIsCi0JMHgxM2JlMWZiZiwgMHhhMzU2YzVmNSwgMHg2ODEwZTA3NSwgMHhhZTQ4YjY2YiwgMHhiMTcyMjE1MSwgMHhhNmIzMDVlOCwKLQkweGFhYzc1NWJmLCAweGJhZWExZDcxLCAweDdjYmVlNDk5LCAweGJjNzgwMTVmLCAweGJhMGZkYzA5LCAweDhmNjVmZjZhLAotCTB4N2YwMTdmZDYsIDB4ZmRjMDliYzUsIDB4NjE1MzQ5OTUsIDB4ZGQ0NTc1ZGQsIDB4ZGVlZTI3ZTQsIDB4ZmM3NjRkMTcsCi0JMHhmYzk5MTZiNywgMHhiZjkwZmYwMSwgMHhkMDhkZTdmYywgMHhiZDZmZmIyZiwgMHhjMTA4N2M4MywgMHg1ZTg1YTNlNywKLQkweGY0OGYyYzY2LCAweGY3ODk5NTUwLCAweGM5ZTg3NmNiLCAweDk1OGIyODlmLCAweGQwN2VkZjA5LCAweDA4YzhhMzEzLAotCTB4NjFhMzJkMzksIDB4ZTdkNGY3ZGMsIDB4NDZlYjkxZTQsIDB4ZjFkMWI4YzAsIDB4ZTI3ZTg2MDYsIDB4MjY4YmZjZjcsCi0JMHhiN2VmZDAzMCwgMHhkNDdmZDA1ZSwgMHg1MjllYjIxMSwgMHgyM2EzZDRlNiwgMHg5YTBjYzI1MiwgMHhlM2EzYWJlYiwKLQkweDA4ZmY0NzllLCAweDFlYTNkMzI2LCAweGVmNjkzMzJmLCAweGVlM2ZlZThmLCAweGQxYmJkYTM0LCAweDU1NzVlZDU2LAotCTB4Mzk0MzllN2UsIDB4ODM5NDE4MTgsIDB4ZjRmZWZiZGQsIDB4Njc1ODc4YzQsIDB4ZmI5OTQxZDUsIDB4MzNkMDU3NjMsCi0JMHg3MmJhZTE2ZiwgMHg1NjZmZGU5MSwgMHgwZWU3ODE2YywgMHhiYTFjZWMwOSwgMHgxYTQzNjlmOCwgMHhjNGIxNTdmMiwKLQkweGQzZmY0MjU2LCAweDkxZTU1MThiLCAweGQ1NDYyMmU0LCAweDljZTgwYzM3LCAweDQ0ZjNhNDE3LCAweDdkY2JjMmM3LAotCTB4YzVjOThiMTQsIDB4MTFmNzJlNGIsIDB4ZWZhZjZmZmUsIDB4ZWYyZTU5YmUsIDB4ZmJkMjMwNGUsIDB4Yjg2MWY1YzMsCi0JMHhmYTU3N2NmYywgMHhiZDkwYzI3MCwgMHg2YTU4ZGU1OSwgMHgxN2VkOGU3ZiwgMHgwOTllYjk1YiwgMHhmYWUxOGZkNywKLQkweDFjMmI4NTRmLCAweGIyMGJkYWRlLCAweDRmOGRlZjQ2LCAweDUwNWM2ODUwLCAweGZlZTkxOWZmLCAweDNlYjM4YzM1LAotCTB4NjcxMDg4NGIsIDB4N2MyNjdkODEsIDB4MjllOTg3NzksIDB4ZTFmZjAzYmUsIDB4NjQxYjhlMGMsIDB4MDAyNWVjNTEsCi0JMHg2ZmI1ODM1MiwgMHgyNWY1ZWEwYywgMHg1ZTE3NzcxNiwgMHg4NmU5N2VjZiwgMHgwYzE3ZTg1MSwgMHg0M2FjZDJkYywKLQkweDcxMjlkMWZkLCAweDg4MzY2ZDdhLCAweDgyODNmYjE2LCAweDA0NWZkMDcxLCAweGZhMTMxY2RmLCAweDUzYTBlMjAwLAotCTB4MmVmYjY4MTYsIDB4YzMxZjYzMmIsIDB4Y2M0Y2EyZmEsIDB4YmIyMDJlNmIsIDB4MDQxNDM1ZWYsIDB4N2UwMjNmZTcsCi0JMHg4ZDk5YzYwYywgMHg5ZmM3OGMyNSwgMHhlYmZmZGMwOSwgMHhhY2U4YTc5YiwgMHhjYmMzZmYzMCwgMHhjMDkzY2VhZCwKLQkweGE3OTdhYmNmLCAweGYyZjJjYjUyLCAweGZiYmY0ODc0LCAweDZmZDA2ZTA0LCAweGJiYmNlN2M0LCAweGE3NWQ2OWEyLAotCTB4Y2EzZTU3MjQsIDB4YmUwMmMzZTUsIDB4NjJkYzdhNzAsIDB4MzVkYmY5NTMsIDB4OWEyZmQ0MjAsIDB4NWY1OTFhNWYsCi0JMHhkM2QzNmY1ZiwgMHg2NmE3OTJmOCwgMHg3MWRmYTE2NCwgMHgyY2VlZmRhYSwgMHgwMGE3YTNkNCwgMHg0MWRhMDBkZSwKLQkweDliZmUyM2JkLCAweDg0Yzc4NWZjLCAweGVjMjIzZTNjLCAweDI3ODhiYzQ1LCAweDA0ZTQyMjdmLCAweGQ1YjljN2Q4LAotCTB4ZDE3NGViODIsIDB4YTdjYmQ1ZmQsIDB4ZjJmOGZiNTMsIDB4YzYzZjc0NjUsIDB4MTJmYzQzOTYsIDB4NDA5NWUyMzcsCi0JMHhjOWRmYTA1ZiwgMHg4M2Q5MzJiNSwgMHg4MGQ3NDZmOSwgMHg0OWVmNzgwNCwgMHhkMmUyOGU5MywgMHhlNTJkZWI4ZiwKLQkweDlkNzgyY2RiLCAweGZmMzM3YzUxLCAweDUwOWJmMWE5LCAweGI1Y2IyZTJlLCAweGViNmY0NzU4LCAweDc1NzZjNWJjLAotCTB4NzU5NmJjN2EsIDB4YmE1ZGExYzQsIDB4MDBjNzhmY2MsIDB4N2U0MWM5M2IsIDB4NmZiYjJmOWMsIDB4M2M2MTE1YjIsCi0JMHhlMzhjOTFkMywgMHhjMDYwNTIzYywgMHhiYTA2MGExNiwgMHhhYTNmNTBiMiwgMHhlMmQ1N2ZlZiwgMHg4NDk2YzViYywKLQkweDg4MWIwZWYxLCAweGNkMTJkMTcyLCAweDljMzg0ZWVkLCAweDFlZmQwNWEzLCAweGJlMDhhZTVlLCAweDg4ZDZhM2M4LAotCTB4ZGRjNjI0YmUsIDB4ZTgyMmFmNjgsIDB4YjllMjcxOTUsIDB4MzhlNzE2MTMsIDB4NDJkZmQxMWIsIDB4MDNhZDI3N2UsCi0JMHgzOGVlZTVmOCwgMHgwZWJjNDRlNywgMHg2YzY0YzM3MSwgMHgzY2YwYTU4NywgMHg1NThiMjljZiwgMHhlMjUzOGJmMCwKLQkweDlhNmJiOTdlLCAweGE3MWU0MjJkLCAweDM4NDFiY2I3LCAweDNjNmQ2NzFjLCAweDRmOWUxMzhmLCAweDlmMzU1YjUwLAotCTB4ZTdhYzQ3MzAsIDB4MjZhYjA0YWIsIDB4MzBiNGEzY2YsIDB4NDIzY2E0NjcsIDB4ZTM0OGNkOWIsIDB4Mzk0ZTlkNTIsCi0JMHhlZTVkZTk0NiwgMHhmMjNmYmE4NiwgMHg5OTJmOThjYSwgMHg0ZTI4MWNjZSwgMHhkYTViMjMyOSwgMHgzNjkyOGYzMSwKLQkweGYzMDJiN2NhLCAweGUxMDk4ZDJjLCAweDYzMzVlODcyLCAweDViYWZhNTdlLCAweDcxODVlYzk3LCAweDg5NzcwMWM5LAotCTB4MWVkOGUwMTEsIDB4YTVmMDRjOWYsIDB4NDgxNWZhYjAsIDB4MWQ2ZWExYWYsIDB4OWVlODdhMmQsIDB4MDZhNDlmNjgsCi0JMHg1MGE0MzA3YiwgMHg1MDkwNDdlOCwgMHg2NTViY2EzMywgMHhhNDQxZmJhYywgMHhmYWNhYjBmMywgMHhmMzA1NDY1NSwKLQkweGY1MTk1ZTUwLCAweDlkYzk2OWNiLCAweDM4ZmUwMzZkLCAweGEyM2EzN2JkLCAweDliMTNmNzVmLCAweDY5NTJmYmQwLAotCTB4ZWYwYTk2MWYsIDB4Nzg0MGMxNzksIDB4OTNjMmZhMTgsIDB4YTFkZTExYjMsIDB4OTdhNmRjMmYsIDB4NWZmNWUyNDIsCi0JMHhkZjA0MGNkOCwgMHhiMjhiYmRlOSwgMHgzMGZlN2UyOSwgMHhmNGU2ZTU4YSwgMHhlMGEzNzc5YywgMHhkZjAyMTU4YiwKLQkweGYzMjMxYWFmLCAweGRjNjIzM2RkLCAweDkzZTllYjU1LCAweDZiMjRlN2UwLCAweGI2MzNmNGY0LCAweDVkNGNiYzkwLAotCTB4ZDNkMjc5ZWQsIDB4ZjQyOWIwM2YsIDB4YjdkMzdmOWUsIDB4ZjgwM2ViZWMsIDB4ZTY0YWI3ZmMsIDB4N2EyZmJjNDAsCi0JMHhlYmU1MjM3MSwgMHg4Y2I2MzU1ZSwgMHhhOWViODJkZCwgMHgwN2NjMzFkMywgMHg5YmY3ZDllYywgMHg0ZmQwN2Q3ZCwKLQkweGEwODY1NGFjLCAweGY5Zjk3MDdmLCAweGYxMWI5YjgzLCAweGIzNTViZmZhLCAweDM0ZmY4ODIxLCAweGU2MTJlM2RmLAotCTB4MzczMmJlMDUsIDB4ZGFiZWJlMTMsIDB4YzA1NmM1MTQsIDB4NmUxZTE2OTIsIDB4ZTg0M2ZiMTksIDB4MzFkMWFmYWYsCi0JMHhlYmUxMmJkNCwgMHg3NDE5Mzc4NiwgMHgwZGZhZDhhOSwgMHg3ZjRlNjJiYSwgMHhkZDJhN2ZkNCwgMHg0ODhjYjE4MSwKLQkweDg4NmU5NTBmLCAweDdiNjdkNDNmLCAweGYwNDZiZDM2LCAweDhmNmQ3MGFiLCAweDdhMmQ3MGU3LCAweGU0NThlYjcxLAotCTB4MzYzNTNlOTMsIDB4MmEzNGYzMDksIDB4OWRhOGZmNWMsIDB4MzNmNjg2YjgsIDB4MjU3MmU4MjAsIDB4OGUxZWY5ZmIsCi0JMHhlMTlmYjcwYiwgMHhjNTg5NzM3NiwgMHg1ZGM3MTQ3OSwgMHgxNWNlN2VjOSwgMHhlODQ3YjVmYywgMHg4ZjI5ODU2MSwKLQkweDFkOTJiZTYwLCAweDI3ZGU1MWQ0LCAweDZjNzMyZTljLCAweDlmYTNmMjNkLCAweDNmMjJhZWRhLCAweDhiNjZjNTNhLAotCTB4NmNkZDFmOTgsIDB4ZDliNDdhZTQsIDB4ODk0Y2U2YzYsIDB4MDQxMzBmMjAsIDB4NWQ3NWJhYmMsIDB4ODk4YmI0NDYsCi0JMHhiZDQ0NTI2ZCwgMHhmNWMyY2E3NCwgMHhhZmNkZTgxMiwgMHgyM2QzZWU0OSwgMHhmODA4ZDVlYiwgMHhmZjcwZWM5NSwKLQkweDVkZmUyZGZhLCAweGExMjBhYTM4LCAweDVkYmEwYzdmLCAweDNkOWQ0ZjgwLCAweDhmMDI5ZjE0LCAweDdjNTU1ZTJhLAotCTB4ODg0YmUyZmEsIDB4M2YwYjM2NWYsIDB4YTRiYzdiNzMsIDB4YjNhZWUzODksIDB4MTY5Y2UzYWIsIDB4MmY2NjRmN2MsCi0JMHhjZWQxM2FmYSwgMHhlZGY4MDM5ZiwgMHhhNWM0ZGVmOCwgMHg1NzVmOTM0YywgMHhmNTg5ZWFmMywgMHgxNDM4Yzk1ZSwKLQkweDNjYTMwMmNkLCAweGJkZGRiNjVjLCAweGJhZTMwMGMyLCAweGYzYzczMDQ2LCAweGIwYWY4ZmQwLCAweGIzYmVhMDk2LAotCTB4MzFkYTNiNTUsIDB4ODY3OGRlZmYsIDB4OTcxYjM3ZTcsIDB4OWE0YWRmMzAsIDB4NzNmZmYxODcsIDB4MmE3Y2E1ZjcsCi0JMHhlOTY1ZGRlMiwgMHhmNWQ0MTc2OSwgMHg2N2VhYmQ4MSwgMHgyMmU1NzBlNywgMHhhYmQ5YmQ1YywgMHg4NTE3Mjg2YiwKLQkweDE3Mjc2ZmY2LCAweGQ2ZTg5MWM1LCAweDZiZjVjZjE1LCAweGViZGZmMTg0LCAweGUyYjdjZTg1LCAweGY5ZDEyYmY1LAotCTB4MzkwZjUxMGUsIDB4ZmM4NTNmMTIsIDB4NmIzZjk0NGQsIDB4ZTFlZTkwN2UsIDB4OTE4ZTJjZjQsIDB4N2I3Y2IxZmUsCi0JMHgxOWRjYmM0ZiwgMHgyNzZiMmYwOSwgMHhiOGY0ZjJlOCwgMHg4OGVkMTY0ZSwgMHhkYTE2Nzc2NCwgMHhmZmJjZjNiZiwKLQkweGNmNTI3YjQyLCAweDY5ZmMzZmJjLCAweDU2ZTdlN2ZjLCAweDBlYmVkZTNhLCAweGE2NGI3Y2UxLCAweDFmYjllOTM4LAotCTB4NWYzMTE4NzcsIDB4NTVhN2U2YWMsIDB4NGI1ZjNkNzgsIDB4YjlmYTA5Y2MsIDB4NWE5OTZiZjMsIDB4OWI1ZDdhZjUsCi0JMHg1NzcxODg1NCwgMHhlNDhiZWVjOSwgMHg3ZmI2NzcxZiwgMHg2NzcxZmU0ZCwgMHhiZWFjN2Y5OCwgMHg0ZjYwNWVmNywKLQkweGIyZDE4Zjk0LCAweGZjZmZmODg1LCAweGNiY2YxZTA2LCAweDQ4ZTlmOTRjLCAweGRmYjNjMzgwLCAweGYxMGE3Y2MwLAotCTB4YjQwZmY5MmYsIDB4Njc5ZmU4NWUsIDB4ZjFjN2UxY2MsIDB4MWVjOTYyNWIsIDB4OGYzMDM4MmUsIDB4YWM1ZjFjZjAsCi0JMHhiZTA4NGE2MywgMHg0Y2QxOWMxMiwgMHhiZDk3YzEwOSwgMHgyN2U5YTZkYywgMHhjNjY4ZmFiOSwgMHhhYmVmNGNhNywKLQkweGJlZTY5ZmI5LCAweGJkM2Y3MzQxLCAweGNmZDM0MGJhLCAweDMzNDliZmFjLCAweGE5NTk3YjNlLCAweDFkZTM5ZmE2LAotCTB4YWZkZjE5YTcsIDB4M2Y0ZDc2ZTksIDB4Y2Q2ZWY5YjcsIDB4YjhlNmNkZjgsIDB4ZTAwZWE5ZTcsIDB4YzNmYTA2NzUsCi0JMHg3YWM1MmI3YSwgMHg4ZjdmNWJhZiwgMHg5N2U2MzllNiwgMHg5OTJmNThmYywgMHhmOWZkYzgyZiwgMHhiMWZiMzFlNiwKLQkweGYyMjk1MjVlLCAweDE2ZmJkNzEzLCAweGRmOWRlNjY5LCAweGU4MmZjZGFjLCAweDc0YmVkNzU5LCAweDRmOWQ1ZmMwLAotCTB4YmZhMWY4NzIsIDB4ZmVmNmJkNjAsIDB4ODQ4ZGQ2YzIsIDB4ZWQzZTg1Y2YsIDB4NmEyZmM1ZjUsIDB4YTY4N2Y5ZmIsCi0JMHg0YzcxYzQwZSwgMHg3ZjQ0MmFlZiwgMHg2ZDc2ZDdlZSwgMHg3NDhhZTJiZSwgMHg1NTc3NWVmNiwgMHhkNTRhOGU3NCwKLQkweDY4YWNkOWQyLCAweGJmOGUxY2U5LCAweGQ4NWIzYzk4LCAweDM3ZGZmODdkLCAweGExZDYyZmUwLCAweDBhZWY4YmU1LAotCTB4NmJiMDdmN2YsIDB4NjIxYjljZjMsIDB4Y2Y1MWM3ZGMsIDB4OTUyZWI3NzUsIDB4Y2JlYmU2MTksIDB4YmJiMjNkNzksCi0JMHg4M2ZjY2JmNSwgMHg3ZDNjODQ0YSwgMHhmZDNjOGY2ZSwgMHhiYjEwZjYyNywgMHgzYmU5ZTZhNiwgMHgyMzcyZmViMSwKLQkweDk3ZjUxNmZiLCAweDNjNDU3ZmRkLCAweDMxZTU4MTQ0LCAweDhhY2RmZjgwLCAweGY1Y2JhNjFkLCAweDJmMzA3MzE2LAotCTB4ZDRiZmFlMWYsIDB4NWZmN2Y0MTYsIDB4ODNkN2E0ZWMsIDB4ZjA1NWFhNzUsIDB4ZjdmOGIwZjQsIDB4NWFhNzA4NWQsCi0JMHg5ZWVmMThjNywgMHg4OGRlZjA0YiwgMHhmZjgwOGM4MCwgMHhlYTlkN2MyYywgMHg0Yjg3ODAzYywgMHgxMmY4Y2YzOCwKLQkweDUxYzYwYzViLCAweDRiZGNmNzViLCAweDRiNmIwMTcxLCAweDQ4MGVmYWU0LCAweGM0M2UzYTFlLCAweGRhM2QyNTNmLAotCTB4MjM0Y2ZmODIsIDB4ZTQ0YzY4YmIsIDB4MTg5NGQxNzYsIDB4YmYzMWM3MTIsIDB4ZDg1N2JmOGQsIDB4NTFlNmRlYzUsCi0JMHhiNWJkMThlYiwgMHhlYTk5MmVkMiwgMHg4ZjU4NWQzMSwgMHhmYmQ3YTA4OSwgMHhmNjgzZmUyNiwgMHhmOTFlOGJlNSwKLQkweDQ1ODliZWQwLCAweGY3YzI3MTIxLCAweDdlYTFmN2JiLCAweDI2ZTdiYzA3LCAweDYzNjI3YmMyLCAweDQxNGE2ZWMxLAotCTB4OThkM2Y5YmIsIDB4YWViNzkyMzgsIDB4M2FlZmIyMDMsIDB4YTRkZTcwYjgsIDB4MDUwNmRiYzQsIDB4ZjBlMTJkZWIsCi0JMHg5ZGQ5MzQ4ZSwgMHhkZTdkMTBmYSwgMHg2NmVkNjkyNiwgMHg0M2Y3MDE2MywgMHg5ZGI5MTIwYSwgMHhmOGYwYjJhZCwKLQkweDdiZThhYzc1LCAweDRmNzZmY2MyLCAweDQxNGY4ZjEzLCAweDQyZGJhYTFhLCAweDg5YjFjMWZjLCAweDVjZmUzNGIxLAotCTB4NWM1OGM5NzQsIDB4ZGYxMTQ2Y2YsIDB4ZjQ0OGU2MzcsIDB4MjI0OTQ2YmUsIDB4NWYxZTVlZmIsIDB4NzVkNzE2M2EsCi0JMHg4ZTUyNWVjMSwgMHgzZTA0NGFlMywgMHgwNDZmYTJjNywgMHgwZTVmNzM2ZCwgMHgwZGY2MjI4ZiwgMHgxM2ViZjNhOCwKLQkweGI2MTI3YzYxLCAweDRkOGVkNGE1LCAweGM4M2YwYWI0LCAweGZiZDIwMzdhLCAweGRlOTNiNDQ0LCAweDhkNjU5NDZiLAotCTB4OTNiNmE1NWYsIDB4MmViYWY5MTIsIDB4MGEyYWNkYTIsIDB4MjE2OGM5Y2EsIDB4MWU4NDYzMzcsIDB4MTQ3MWZjYzMsCi0JMHhjMjczOTMwOSwgMHhkZTRkNjRlOCwgMHg1MTMxODhmOCwgMHg3YTI1OGRlNCwgMHhiYzc0ODlkYywgMHhiN2IxZDA1NSwKLQkweGNmMzNiMjNjLCAweDY5ZDUwN2JhLCAweGFkNzkxZTc4LCAweGQ1OTFlNzk5LCAweDNjOGY3MzNjLCAweGM0NGM2M2IyLAotCTB4MjFkMjMyM2MsIDB4ODc5NDE2YzYsIDB4ZjU5Nzg5ODUsIDB4OWJlYTA2NzMsIDB4Mjc4ZTljYzYsIDB4MWM3ZjIzYzYsCi0JMHgyM2NmMWQ5MiwgMHgzMWJjYzdlOCwgMHhlMmI3MDBmOSwgMHg5MWYwMzlkMCwgMHg0YWQ4MWIxMSwgMHg3ODE3ZjQzMywKLQkweDE5MzNjYTE1LCAweDJkOGIwZTIwLCAweGMzZWZjYTA4LCAweDlmODQzOTg5LCAweGE2ZmQ0N2MxLCAweGZjM2ZiODdjLAotCTB4ZjMxZGFiOTgsIDB4MzFhNjAzY2EsIDB4NjZmZmFhMWIsIDB4ODcxNjVjZDYsIDB4MTYwNmM0ZmUsIDB4Mjk1OTZlMzEsCi0JMHg2NGJlMzllOCwgMHg5ZTcyOGM5NywgMHgxMmZjMDVkNCwgMHgwNTJiMWU4MSwgMHg1NzhlNDAzZCwgMHg3Nzg3M2QyMCwKLQkweGVlYzliYmI5LCAweGFhNDAzZDA4LCAweDNkYTNlMzBjLCAweGMzOTdmMjNhLCAweDU3MTAzZjlmLCAweDdiZDIzMGY2LAotCTB4YmU3MjJmYjAsIDB4YzM4NWEyZTQsIDB4ZmQ3MThjNjEsIDB4YmMxZmU3MDQsIDB4ZmE4OGMzYWQsIDB4MzdhYTgxNjYsCi0JMHgwZjRjNzUyYiwgMHhlODJhOWRmNCwgMHhhZjAzNzUzNywgMHg5NzhiYjM1MywgMHg5ZmFhYzkyZSwgMHg4NjdlNjhjNSwKLQkweGI0YzE2MGZhLCAweDFmZTYxZjU4LCAweDc4ZTViNDE2LCAweDQ0OTcyZTA5LCAweGRiNGYxNWY5LCAweDE3ZjYxNzYxLAotCTB4YzU2YTFkMGMsIDB4N2JmOWQ3NzgsIDB4NDc5MjdkMjYsIDB4N2FlMzFhMmUsIDB4NTEzZWNmNDcsIDB4Y2ZkOTAwZjUsCi0JMHhkYzViYWE0NCwgMHhhMmVhZjgyZSwgMHg0MTM4MjE0NSwgMHgwMThkYWYzZiwgMHhiMGQ4MmMzYSwgMHg1M2VlMTc2MiwKLQkweDE5ZGZlZjc4LCAweGNhOGUyN2Q1LCAweGIyNzBjMzVkLCAweGNiMzkwMDNiLCAweGIzZDViMDBhLCAweDM4N2MwMjhhLAotCTB4MjY5OWU2OTUsIDB4MGQ3ZWYxZTYsIDB4ZGYwNTM1ZWYsIDB4MDFkYjQ3N2IsIDB4MDM1MWNmNWEsIDB4NWY4MDlhZjMsCi0JMHhhNWRlNzczYSwgMHg5OGRhYmZhMCwgMHhmZjEwNzI2NCwgMHg3MWQ3YmE4YSwgMHgxOTEwZmRkOSwgMHgxZDU3N2QwZiwKLQkweDJkYTMzNjgyLCAweGQ2MDZiYWM2LCAweGI4YzhjYWIxLCAweDc2OGJhYjdmLCAweDVhMjdmZTIwLCAweDJmYzRmNDNhLAotCTB4YzQ3YTVkODksIDB4Njc0MTU5ZTMsIDB4ZGZjOWYxZjQsIDB4Mjc0NDYyNGYsIDB4ZTljNzVkMzksIDB4N2RmMGFkOTYsCi0JMHg3OWI1ZmQyMywgMHg3NTEzNzdjMCwgMHgxOTAyZmU0MiwgMHhjYzYyN2Q3OCwgMHhlMDE1NGIzYiwgMHgyYWViMDNjYywKLQkweDdmNDFlOWM3LCAweDY3N2Y4YzRmLCAweDBmZjQwZTY5LCAweDRlM2Y5YmFlLCAweDMxM2RmYzBmLCAweDczMmY5ZGZkLAotCTB4NWFkZmQ0NDAsIDB4MGZlZmM1NTcsIDB4YmVjYmU3N2MsIDB4NWJhYzBmZDAsIDB4NGNkZmVmYzAsIDB4NTlkZWNmYmMsCi0JMHhmMzBlM2Q1NywgMHhkNjVlZWZmYiwgMHgwN2ZlN2MwYiwgMHg1N2VmMmU2NCwgMHhiYTUxY2FkYiwgMHhjNjcxNDhmYSwKLQkweGNmMzU0NGIxLCAweDFlZjgwY2NjLCAweDhlZWZkYjU3LCAweGE5NzU5ZGEyLCAweDQxYTc3MGY1LCAweDhlNDcwZjUzLAotCTB4OGRiZjAxMzEsIDB4MTJjNTdjMTcsIDB4OGMwZWM4ZTMsIDB4YWYxYmY0MTMsIDB4MThmZWQzZjcsIDB4Zjg0ZmM5OWQsCi0JMHg1ODM1OGViZCwgMHg1YjAwNmY5MSwgMHhmNjE1MmVlYiwgMHhhZWQwN2Y3YywgMHg3MjRiZjk2OSwgMHhlODBjYjYzMiwKLQkweGUyNTYyOTJkLCAweDk4Y2I1NTkzLCAweDNmNzY4Y2RiLCAweGYxZDc4NzU4LCAweGUxNzMzYzNhLCAweGQ0Nzg1NWZiLAotCTB4MGI4MGY3ZjcsIDB4ODViN2FiNDgsIDB4ZTY4MWI1YzIsIDB4MWNlYWUxNTEsIDB4Nzk0NWU1MTIsIDB4MGFhN2VkNTIsCi0JMHhmNWQ0YTc1NywgMHhiN2JmMjYyYywgMHgwMTNmYmRhNCwgMHhkYjE5ZDZlOSwgMHhmZjQxMjU5NSwgMHg0NDIzYTRjNSwKLQkweGFlYTRjZWM3LCAweDQ4NDcyNTY3LCAweGE4ZTljMGRmLCAweDM4YzU3MjdiLCAweDE5ZTdiYzJmLCAweDAyNGJhOWQ5LAotCTB4ZjkxOTQ2ZmMsIDB4OGMyNjkzM2UsIDB4OGYzZGUwNTcsIDB4NThiZGI5MjQsIDB4NzNiZTAzZGYsIDB4MzJlZjkxZjgsCi0JMHg0Njg3YTQ4ZCwgMHgyN2U2ZDUwZCwgMHhjZjljNDkyYywgMHgzYTNiNDU5YSwgMHgzMGZlYjlhYSwgMHg5YjY3YTVmMCwKLQkweDc4YzA1NmM0LCAweDIzNmVjNWNmLCAweDZkODk4OWRhLCAweDY4NGU4YzI3LCAweDMwOWRiNmViLCAweGMzYWFiZWEyLAotCTB4Yjc1M2NjM2UsIDB4NmY1MTE4YzEsIDB4Nzk5MjQ4NmQsIDB4MGZjYzMyOWUsIDB4ZTAzOTliZGUsIDB4YzdkYzQ0YTEsCi0JMHg0NTUxMjk1MCwgMHgwOTFkZGVlZSwgMHhlZjdmYjFhMywgMHhmODI1NWM1YywgMHg4ZWI3MjMyZCwgMHhiOTY2YzdjNiwKLQkweDc2YzIxZmRhLCAweDhiZDhlYjBlLCAweDJkYzMzNDJjLCAweDk5ZDJmYzZiLCAweGJmMWEzMWQ1LCAweDVkYmQ1Njc2LAotCTB4MGNkMzlmZDMsIDB4OWViOTAxZDQsIDB4MWI1ZDJjYjMsIDB4NWI4ODMwM2YsIDB4MmMxOTllMDEsIDB4NmRmYTg3ZjgsCi0JMHg4Y2UzYTBiYSwgMHhkYzAxYjVkNCwgMHg2ZGMzMzJjNywgMHhjYzg0NzZmMCwgMHg4NTZkYjEzNywgMHhkNzcwODZkZSwKLQkweGJmNTIwZTRiLCAweDczZTBhNjVlLCAweGExMGFmOTMzLCAweGViNDM3YmQ1LCAweDc5NWJhMzYyLCAweDg2YWVhMzMyLAotCTB4ZDgxNWZiZmIsIDB4NTQ1NmJjMDcsIDB4NDI0NTNlNGIsIDB4YmVlOTE4M2MsIDB4ZmJhMjU1YTcsIDB4NDdjN2Q2OWUsCi0JMHhjZjMyM2VlMSwgMHgyNmYyODk1MiwgMHgzYzQ0N2RjOSwgMHgxY2VmZWMyNCwgMHg1MWU4MmIwMSwgMHhmMzMzY2UwMywKLQkweGEzYjMxMmZiLCAweGJlZmUxMGRlLCAweGU5OWNmZjBhLCAweDNmODlhN2U1LCAweGFlYWY5Zjg1LCAweDc2MDJiYTczLAotCTB4YzljZmFlMTcsIDB4ZmU4MGM0ZmUsIDB4NjRlZmFjMzUsIDB4ZGE5ZjA2ODcsIDB4NmQ3YWFjZmUsIDB4NmQzMmNlN2YsCi0JMHhmMDkyNmE3ZiwgMHg4MWIyMDdkZiwgMHg5M2QzNGYyOCwgMHg1NWVhM2QyNCwgMHhlNjQ1ZmZiNSwgMHgwMWY5NmZmYiwKLQkweDZiYjJjZDllLCAweDhkNjdmMjI2LCAweGE4ZjU0ZmQxLCAweGZhOWJiMmNkLCAweDVlYjg3ZGVhLCAweGMwZWU0OGM3LAotCTB4OTYzOTIwMWYsIDB4MTk1NzNlNDgsIDB4ZjQxMmQ2OWMsIDB4ZTIyNTZiYTMsIDB4YzQyYzk5ZGIsIDB4OGUwOWM4NWYsCi0JMHhiM2RjYmVhNywgMHhkNzEyNjhmZiwgMHhhZWNjYWIzYiwgMHhkYjE3NTRhNSwgMHhjMTM3NTkyOSwgMHhhNzdhNTFhNSwKLQkweDU1YzBmZDFlLCAweGM4YmNlNDUyLCAweGRlZGM0OTYzLCAweDhhMjBjNWJlLCAweDIwMDZiODA3LCAweDlmNWRhMjkzLAotCTB4YzJmM2VmMWEsIDB4NzZmYzA3N2IsIDB4ZmJmZDE3YWUsIDB4MDdjMDg1MDEsIDB4YjczZGNhMGEsIDB4YmQ4NWUzMzcsCi0JMHgyNWZlMDQ5OSwgMHhlNDAzN2ZmYSwgMHhkZmE0ZTk5NiwgMHg0OTVhMzQ2ZiwgMHhhNDNiMGJiZiwgMHgyZmU3MGJlYSwKLQkweDdjNjg3NmI0LCAweDNmOGE3ZWM2LCAweDdiNWZhZDI2LCAweGZmNjJmNTBlLCAweGM3ODJjZTdlLCAweGNjNDdiZTAxLAotCTB4ZWM4ZmZkZmMsIDB4MmZiODdjOTAsIDB4M2VkMDZlYTcsIDB4YzAyOTlmZDIsIDB4YmFkZWY4MTYsIDB4NWI0N2ExNTQsCi0JMHg1MmFlZmJiNSwgMHgyZTYxYWY1MCwgMHg3YTIwYzI3ZiwgMHhlNTQ5OWE2ZiwgMHg0MWU5Mjc3NiwgMHhiYmFhNWZjOSwKLQkweDQ1MjlmYTA0LCAweDBjYTZmN2JjLCAweGJjOTVmMDg1LCAweDc1YzI0NWE4LCAweDBhZWYzMjY3LCAweDQ2M2ZlM2I0LAotCTB4YjYwYTRjMjEsIDB4OGZjZmVkNTcsIDB4NzlmZGMyOTIsIDB4NjVlNjEyNGIsIDB4MTQ4YzNiNTIsIDB4ZTMyZWIxZWYsCi0JMHhlYmE3OTQzZiwgMHhmMjMyN2YzOSwgMHhiMGZjZjg1OSwgMHgwNzU3YWE3YywgMHg3MThiZjJlMywgMHg3N2I5YWY5OCwKLQkweGRjNmZiZjY3LCAweGI0OWIyNGVmLCAweGFhYzFiNzcxLCAweGU3YzdiYjhkLCAweDQ0Y2ZmNTY5LCAweDRjZWY1Njg3LAotCTB4YjlhN2VlMmUsIDB4NTAzOWM1M2YsIDB4Nzk2YTdmNzMsIDB4ODc3ZmE2YTEsIDB4ZjhjZDY2ZWIsIDB4Njk5N2E2YmIsCi0JMHhlM2E5NTFmYSwgMHhkYTAwZjJjMiwgMHg5ZTRjNGFmYywgMHhlYjEyYmYzNiwgMHhhMjUxZTZkMCwgMHhiYTdhZmMwZSwKLQkweDlhMzE3ODA0LCAweGMwNmUxZGJjLCAweDQ2YzgxMzQzLCAweDQ3NjgyZGIxLCAweGE4OTljNjA2LCAweDY4NWQxYjQ4LAotCTB4MzRkYjYwYjYsIDB4N2M4ZmNhMjQsIDB4Yzc4N2Q0ZDIsIDB4YmUwNzUxZTEsIDB4Nzk4N2VhOWYsIDB4NGM1YmYxNGMsCi0JMHg0OTc4OGE1OCwgMHg4YTYyOTVmMiwgMHg3NTQ0ZDAxOCwgMHhkNDFlMWJkNSwgMHhkM2QzOWJmYSwgMHhlZGE5NWNiOCwKLQkweDk5ZjcyNGIxLCAweGJjMWJhYzY0LCAweDdmNzNhNGE4LCAweDg5ZjE0MDM2LCAweGJmNzE5YTI5LCAweGZjODliYjY4LAotCTB4YmU0ZTM1MjIsIDB4OTQ2NWE3MWMsIDB4MGViYTQwOWMsIDB4ZjU0OWQwN2EsIDB4YWNjYWQ2MTMsIDB4ZGU3YzU3OTgsCi0JMHhkYmE5ZjIyOCwgMHg0MWRjM2VmOSwgMHg2NzNhMWRhZCwgMHg0OTJmN2M4OCwgMHg0OWUwZmFlNiwgMHg5YzU4ZTk1NywKLQkweGFjMGRhZWJmLCAweGZhZDNjYTJjLCAweGE3NTg4YzhmLCAweDhmNmI2YmFjLCAweGVmOTY3YjQzLCAweDc5ODhjOGZhLAotCTB4NjE3NWUwYmIsIDB4ZDE1ZGY0ZTcsIDB4NTVmOTVmNTgsIDB4ZmY3MTFjOGIsIDB4ZjdjYzkyYjIsIDB4N2ExM2VjNmIsCi0JMHg4M2Y3ZDY3ZCwgMHhiMGM5NTFmMSwgMHhiNTllN2VhMCwgMHhjMzJmY2JiNSwgMHg1ZTgxNjdmYiwgMHg0YTZiZjJmMywKLQkweGZhMGQzZDI0LCAweDNjY2YxMzU5LCAweGE3ZWVhNjk5LCAweGMxZWM2YTcxLCAweDAzN2VjNWRkLCAweGVkNmE5ZmQ5LAotCTB4NzhkMzM5ZjgsIDB4NWM3YTA0NWMsIDB4OTFhMzNkN2IsIDB4MWQ2MzBiZjQsIDB4ODE1YmNjMDYsIDB4OGZkY2Q3NWUsCi0JMHhkMjcxMTY0YiwgMHgxMmU4MzY0MCwgMHhhZWEzODFlOCwgMHgyYmI1ZmJjOCwgMHhjNzQ0ZjRkMywgMHhhMjMyZWVhMywKLQkweDRmODA5M2MzLCAweGVjOWY5N2Y0LCAweGQ3OGUzZjgxLCAweDY1ZWRlMTJiLCAweGZhMTA4MWU0LCAweDRmYWI4Zjg1LAotCTB4Y2JmNDdlZTMsIDB4MDdlZGU4YmQsIDB4OTc5ZjdkMDQsIDB4NTRhODA1MDIsIDB4ZTI2OGFlM2QsIDB4YjlhNjk5ZGYsCi0JMHhmNzNmNzE4YiwgMHgxYWFmY2NiZSwgMHhlYjMxNWViMSwgMHg3YjQzMTJkNywgMHgwM2Y2ODdmYiwgMHhiOGNmOGZiNCwKLQkweGVlMzI2Zjc1LCAweGVjYjRmNGFmLCAweDdmYzA2NjRkLCAweDA1NjUwNjM1LCAweDFmYzBmM2ZhLCAweGVhN2ZmNDBlLAotCTB4N2YwNGZkNWEsIDB4M2I2MTRiNmQsIDB4OTU2ZGFmNWUsIDB4M2Q5MmE4MWMsIDB4YTE4ZGNlZGIsIDB4NDY4ZWIyNzUsCi0JMHhkZjNkZmZhYywgMHg5MzIzNWMwYiwgMHg1Yjc1NWZiOSwgMHgwNGYzYzJiMiwgMHhkYTI3Nzg2ZSwgMHgzZTUxNmRmZCwKLQkweDAwZmM4NDlmLCAweGRhZTEwOWZhLCAweGU4NjZiMTIxLCAweDE0ZGFiZjNmLCAweGEwZmJlZWIxLCAweGQ1OWVmN2MwLAotCTB4NmFiMzhhNDYsIDB4Yzc1Yzc5ZTAsIDB4NDY3ZGNjYmUsIDB4NTZkM2YyMTMsIDB4ZWI4NDk3NTgsIDB4MGM0NzdjMzgsCi0JMHhjMGQ0YmZjZSwgMHhlMTUwY2ZkMCwgMHgzODE5OTMzYiwgMHhiMGZmZWI4ZSwgMHhiODFkMDIxMiwgMHgyNjUyYWFiZSwKLQkweDU0Yjg3ZjdjLCAweDlmZTcyM2U0LCAweGI4Yzc0YzZhLCAweDc3ZWY5NmE2LCAweDRkZDk1ZGRmLCAweGFiMGZiZTc5LAotCTB4MzY1NjlmYjksIDB4Mzk3MjQwZGYsIDB4NTdmNzA5NjMsIDB4ZTU1YWY5YzIsIDB4OWYwNWE3ZGIsIDB4Mzg2ZmYzODYsCi0JMHhkN2UwZjZkZiwgMHhkN2UzYWJlYSwgMHhlNmJmMjBjYSwgMHhmYTA3ZGRhMywgMHgzZTQxNGU4ZiwgMHhlZWZmMDFmYSwKLQkweGRkYzVmYTY1LCAweGJiODAxNDg2LCAweDgxZDVhMzZmLCAweGNiMDZiZGZiLCAweDUxOTI4N2JlLCAweGY3ZTZlYzZmLAotCTB4OTQ2Y2Q0ODcsIDB4ZWU1MWZlYjgsIDB4MzdhNWY1YzYsIDB4MDkxYWQ5MTksIDB4ZWRkMzg5ZjksIDB4ODUzNzQxMDEsCi0JMHgxNDMxNDk3NSwgMHhhMmZhMDVmZiwgMHhiZjUxY2E5ZSwgMHhlOWIwMzA4NywgMHhhNzNmMzE1YiwgMHhmMDY3ZmFlNywKLQkweGQ3MWJhOTZiLCAweDZlNmZmMDg0LCAweDU1NWJlNzMyLCAweDMyMzQwZTJmLCAweDA3YWE1NmY3LCAweDAyOTlmNGI0LAotCTB4ZTA2Y2JjZjMsIDB4MzEyYzljZjUsIDB4YWViZjZlNWYsIDB4NWRhMDUzMzEsIDB4ZTRmNWNjOWYsIDB4ZGE4NzAxMGEsCi0JMHg4MGU0Mjc1ZiwgMHhmODRkZGM2NSwgMHhmOGUyNjg5YywgMHg1ZmNjYjcxZiwgMHg5OWY4ZWI4MSwgMHhlYTMwZmRkMSwKLQkweGVmNTkwOWQ1LCAweDZiZGRhMGQ3LCAweDIwZTZmYmVhLCAweDA3MzIxZmNhLCAweGJjNmFlMWY5LCAweGE3YzQ3YmJlLAotCTB4ZjU4M2VlMWIsIDB4MjY4ZmFmOWEsIDB4M2U3NzlhZmEsIDB4MzY3ZTQ1NmUsIDB4NzE0ZDBlZTcsIDB4YjUzZmUwNDcsCi0JMHg2MWM4NWNmNSwgMHhkNWYwM2I2ZSwgMHhhYWQ0N2U4NSwgMHg0ZWJiMjlmZCwgMHg3MjlmNjkxYiwgMHgyNDMxYjlkYiwKLQkweGU4ZDIxNzJmLCAweDUzNWNmYWJhLCAweGMxY2Y5NzFhLCAweDlhYTgzZjYyLCAweGFkYmQwNGNmLCAweDhlMDgyZTJmLAotCTB4NzBjMGYxNTMsIDB4YzIxMTVlNzcsIDB4ZWJkMTAyZjMsIDB4MDg2YzI1YmUsIDB4NGUzZmFiNGYsIDB4NzM1OTlmZWIsCi0JMHhmMzBiOWE1OCwgMHgxYTcwNjVkYywgMHhmN2VmODAyYywgMHhjNjJmYTdlMywgMHgyZTZmMmZmZCwgMHg4NTFkY2M2NywKLQkweGNjNGNlZmZiLCAweDAzZWUxZDdkLCAweGIwM2Y1MmI0LCAweGVmZmE5NTNjLCAweGRkYTg1NzJjLCAweDg0YmQ3MjYyLAotCTB4NGY2M2JhNzgsIDB4YWJlZDJlN2QsIDB4NTVjYTdjY2MsIDB4M2NlOWVmMGEsIDB4MDUzYjEwNjgsIDB4YTgyN2U0NGQsCi0JMHgzNmVlYTFmNSwgMHg3ZWUwOTk5OSwgMHhlYTg5MzZmNywgMHhiM2ZjMmE5ZCwgMHgzNzMzYTQyZiwgMHhlM2RmOTdlOCwKLQkweGRhYzFlMGZiLCAweGRlOTJlZjY1LCAweDFiOWY1NDczLCAweDkwZDI3MTgzLCAweGQ4OGQxMzlhLCAweGYzZmIyY2Y3LAotCTB4OGUyZmY0MTgsIDB4M2U0MTNkODMsIDB4YTU5ZmJmMDMsIDB4MGU0ZmE4NGEsIDB4NWRkZjcxMWIsIDB4Y2QzYjA1YzUsCi0JMHg2YmFlYjJmMywgMHhmNzlkY2EwYywgMHg1MGVhODkwZCwgMHgxOWNmNWJjNywgMHg2MmJkYjg1MywgMHg1ODA2Y2EwOCwKLQkweGZmZTAxMzlmLCAweGViODEzOTIyLCAweDNhMjFiNjkzLCAweGRjYTFkZjRlLCAweGQwZmMxMWFmLCAweDcxZDdjMzdlLAotCTB4MzJkMzBmNDgsIDB4ZjE5YmVkZTUsIDB4NDMzMmZkZjksIDB4ZGE1MzVlYjksIDB4YTA4ZDY3MTUsIDB4YmNjMjhmODcsCi0JMHg3NWMxNWM5OCwgMHg3ZjdlMWI2MCwgMHhlYjliZDFiYSwgMHhlYmE2ZTc4MCwgMHhmYTliZWYyMiwgMHhiZTcyZjkyYywKLQkweGZmMTRlNDgyLCAweDBhYjdlMDI0LCAweDYwYjM2ZmMxLCAweDhhMzZmMTQ5LCAweDIwZDFmYzgzLCAweGNhZGFiM2NmLAotCTB4YWRiMWViNGUsIDB4ZGE0N2Q4OTcsIDB4MTQ3ZDhjZjgsIDB4YzZmN2M3ZTIsIDB4YWRiNmRmODcsIDB4ODM3MmY5YzMsCi0JMHg1OTIzOGM3ZCwgMHg3MTg0NWY4OCwgMHhkZmJjZDMyNCwgMHg5OTRjZjNjYiwgMHgxMWRjNTNmZCwgMHgwZTU5NzlkNiwKLQkweDAzYmZjMDNhLCAweGUzODFkNTdhLCAweGRmOTFkOGE0LCAweDc2N2I1MjA3LCAweGNhMGFjM2M3LCAweGViYmEyOThmLAotCTB4NmMxN2I0MjksIDB4OGVlMjhlODAsIDB4MWZkNmFmNWEsIDB4ZTVjYTk2M2EsIDB4YzBhYTU4ZTEsIDB4N2UzNjhhNWIsCi0JMHg0ZTQ5Mzg4MiwgMHgxYzUyNzFlMSwgMHhlMjQzODQxNiwgMHgxNGViZjBhNywgMHhhZTUwOTkzZiwgMHg4MTAzYmRlMCwKLQkweGEyNDRhZjNlLCAweDI5YTk2YTRmLCAweGFiZTUwOTI1LCAweDAxOWNmODk5LCAweDg1N2YyMzlmLCAweDIyOWVkM2FmLAotCTB4YWU0MmQ5ZjIsIDB4MjM1Y2EwNjcsIDB4Yjk3MmI2ZmYsIDB4M2JiNzlmMGUsIDB4ZjM4ZWM0YjUsIDB4NWM3ZGM2YWUsCi0JMHg2OWM2ZjQxMSwgMHhmNWRhY2ViMSwgMHhiM2NiZTExMiwgMHgzYTc4NGVkZSwgMHg0YWJiZDZjMywgMHgwMGNmMmY4MSwKLQkweGEwMmZiODFjLCAweDQ5OGFlNWQzLCAweGRiOGQ3YWMwLCAweDA0YjM2MzE1LCAweGZhZGQ0MGY1LCAweDc1NmU3YTE4LAotCTB4NzNlZGRiZmYsIDB4YzI5NzlmYTEsIDB4NmI2Y2ZlZjksIDB4M2NmMTA5OTksIDB4M2Y5NzNkN2IsIDB4ZmRjNzdkZjUsCi0JMHg0ZjI4ZWMzMywgMHhhMzJlODY0NSwgMHhiNDY3ZWUwMywgMHgzZjQzODg5ZCwgMHg1NGM3NjhiMCwgMHg2ZjYxY2EzYiwKLQkweDcwYTg2NjcwLCAweGYxNmZiYjJlLCAweDA3ZTczYjQ5LCAweGY1YWE2ZmNjLCAweGJmNGFjZjM4LCAweDc4YmZmMTExLAotCTB4NmRmZTIzMTksIDB4M2E4N2ZlZGYsIDB4NmRiM2UzOTQsIDB4ODdiNDU2MzEsIDB4NzhjNjc2NjcsIDB4YmU3N2ZmNTEsCi0JMHg0OWQzZTUxMSwgMHhlMzc4ODcxNCwgMHgzMTlkYWY0MSwgMHg3ZjIyNGM3NCwgMHhjNTZjODc3MywgMHhjNmYzZDFmOCwKLQkweDNjYTE0ZmU3LCAweGExNDdiNjdhLCAweGI3MTZjN2U3LCAweGVkMGU3YzNkLCAweGQ4ZGI0ZDVlLCAweGRhN2NmYWQzLAotCTB4OTU0ZmZlODcsIDB4Zjc2NWRhODcsIDB4ZmVkNTdhZDMsIDB4MGE0ZGNiZTcsIDB4N2FiM2QxZWEsIDB4YjcxNjI3YWUsCi0JMHhlZmZlNGFiZSwgMHhmOWRkOGJlMiwgMHhiMzNmMGY1OCwgMHg1MGMzNmZmMywgMHhkYjdlNzlhZiwgMHg5OWY1MGMzZCwKLQkweDYxZWVmNWU3LCAweDVhZjNkZjc4LCAweGJmMjQ3ZDRjLCAweGYzYzY5N2M1LCAweGNjYmRhYTQwLCAweGU0ZDdhMjM5LAotCTB4NWQ4NWEyOGIsIDB4MmU2ODY5YzgsIDB4NDU5ZDdkYzcsIDB4MzAzOWE3ODcsIDB4MmZkZWFiOWYsIDB4N2VkMWQ1Y2EsCi0JMHg0NmY3YTJmZSwgMHgzYzg3ZTdkOSwgMHg5N2QwMTBkNywgMHg4N2ExZjVlMywgMHg4NjU0YzU0NywgMHg0MWFhNjVmMiwKLQkweDU1NWUzN2NkLCAweGVhZWYwNzllLCAweDc1ZTQ4NTg3LCAweDE5YTczYTAyLCAweGU4MGVhZGM2LCAweDZhZGFmZWY5LAotCTB4MDZmMTg3YzksIDB4Y2ZlMTJmZjgsIDB4YjlkNTNmOTEsIDB4NDM1YmVlZDAsIDB4ZmM2YjgyN2UsIDB4Y2ZkOGExZTAsCi0JMHg1MDUxYWM3NSwgMHhmNmY2OThhZCwgMHg2Njk3ZjEwZiwgMHgyOGZlNzQwNCwgMHg2ZGU5YTNlMCwgMHhmN2YyN2U1MSwKLQkweGQ0MTNmYTAzLCAweGVjZDQ3ZTE3LCAweGU2YzY5ZjczLCAweDM0ZjIxMTQ4LCAweDQ2OGNlZjc5LCAweGFmOWUxZTNkLAotCTB4ODQ1OGJmODEsIDB4ZGVhZmY1NWIsIDB4YTNmOWUzNGYsIDB4MGVhYjdhOGMsIDB4MzQ1NjY3ZjcsIDB4YjVlMjJiMzAsCi0JMHhmYTY3NWU0NywgMHgwYTJmOTQ2ZCwgMHg4MTI4ZWZjZiwgMHg0ZTdjMjY3NSwgMHgyMmIzYWZlOSwgMHg4YTVmYWFiYywKLQkweDQxMTZkYzc0LCAweDcyYTYyNDBmLCAweGFmOTU0NGJmLCAweGU4OGU4MDg2LCAweDM1MjgxMGQzLCAweDU2MzY4N2Y1LAotCTB4YWIzNmQ3YzgsIDB4NjhmN2JlOGUsIDB4MDliYTliNjgsIDB4MTcwZDBiZjMsIDB4MGMxOThhZWYsIDB4NzIzODY5ZWYsCi0JMHgzZGVmYzMzYiwgMHhhNmE1YWQzYSwgMHhlMmVlN2M1YywgMHgwNjNiYTY2ZCwgMHhmYzI2ZjkwNSwgMHhiODUyYzc3ZCwKLQkweDBiZmEwY2RlLCAweDIxZGZlZDkxLCAweDU5ZmVjZmExLCAweDhhNDBmMDc2LCAweGZmM2RlNDRlLCAweDEwODNiNmVmLAotCTB4Nzg1MjA3OWYsIDB4ZTc5MzNlN2MsIDB4MWU3Yzc4NGYsIDB4YmQ1NDNmNmUsIDB4MDkyYmNlYWMsIDB4Y2JkNGY3M2EsCi0JMHg4MWNmYzlhNywgMHhiMmY0OWEzOCwgMHhiOGQwYWE5NCwgMHg3NjI5YjY4YywgMHg0YzhmYWY4YSwgMHg5ZTk2MmJiMywKLQkweDNiZDNmN2YzLCAweDNkNDFiNjc0LCAweDM5ZmQ1N2U3LCAweGQ3YjlkNzhmLCAweDkzOGY3MTg0LCAweDRjZjMyM2VmLAotCTB4YWRkZjY4OTMsIDB4NWM3OWZmZWEsIDB4OWVlNWY5MTIsIDB4YzcwZjgzMGEsIDB4YTYwNTcwYTksIDB4MWRlYzdjZjEsCi0JMHgyY2NmODM0ZSwgMHhkNTQ0ZmQwNSwgMHhkZjdjYmM4ZiwgMHhkNTdkZDEyMSwgMHhjN2ZkNTRhZiwgMHg3N2U3OGI4MCwKLQkweGY3ZTUwZGE3LCAweDE3ZGM5OGI3LCAweGY3MWYyZWQwLCAweGQxN2FlOTliLCAweDMxOWQ3ZTA4LCAweGFiOGM1ZWQ3LAotCTB4NjI1M2JhZWUsIDB4NWY4NDA3YTQsIDB4Yjg2OWYyYTksIDB4YWRiZTc5ZGYsIDB4YTNlZTM3ZGYsIDB4NTNmODIwZGYsCi0JMHgzMGFjYjM5NSwgMHg1OGVkNTBmOSwgMHhjNzk3MGE1ZSwgMHg4NWUzYjQzYSwgMHhhYWZmYzc2OCwgMHhlN2MzY2ZmMSwKLQkweDQ5NmUzYjA1LCAweDNkMThlN2E1LCAweGJkM2RmNDNmLCAweGZlYmM1MjJiLCAweDBjYTc5MGFjLCAweDNkODE3ZTk1LAotCTB4MjY2ZjA4MjUsIDB4ZDgzZWQwMGIsIDB4N2M2YmVjZGUsIDB4ZGVkNzk3MWEsIDB4YjkwOWU3ZWUsIDB4ZGYzYzkyYjksCi0JMHgzZmNjZjQyNiwgMHg1MmNiOWU0YiwgMHhiNWY4NzdmZiwgMHg1ZWMzZmQ5NywgMHgyY2ZiYzdiZSwgMHgyYTQyNjRiNSwKLQkweGFlNWEzNWUwLCAweGZjYTA5NDBmLCAweDYyMjFhN2ZkLCAweGQ4NWQzYWRkLCAweDM1Nzc4ODZiLCAweDY5OWJkOWY0LAotCTB4ZTQ3YzYxZDQsIDB4ODNmOWU2YTksIDB4NmRlNTA0YTYsIDB4YzgwZTYzOGEsIDB4MzE3YjNmYjQsIDB4YzdlODgzYzQsCi0JMHg0MDkwYmEyZCwgMHhjYmZhMGQ2ZCwgMHhmMTdjY2VkMCwgMHg2NjIzZDUzMCwgMHg2ZmUxNmI1NiwgMHgzZTJlOWNjMiwKLQkweDg3YzcyNGJmLCAweDM2MmNmM2ZlLCAweGIzNGNmMjhhLCAweGI4YWMxMmRhLCAweGE5MjliOWRmLCAweDk1Y2ExZjY1LAotCTB4NmNhYzkzNzcsIDB4NTBiZjFkMGEsIDB4NzllMjZmMWQsIDB4YjQ2OTY1YjgsIDB4Zjk4NTkyYmYsIDB4YzNlYWIzMDMsCi0JMHg3ZmFkN2VmZCwgMHgxYmM4YjM3MCwgMHhiYzI3ZTZmNSwgMHg3YWU2NmVkZSwgMHg3MjRjYmY2NSwgMHhhNmY5ODc1ZSwKLQkweGI2MzMxOTFiLCAweDU5ZTBiZDcxLCAweDc1MjRmM2M2LCAweDdiZTgyYjZkLCAweGZmNzE1YWFjLCAweGYyODA3ZDMzLAotCTB4ODM1ZjU0NTAsIDB4MWVkYmE3YTEsIDB4NjQ3OTQ2NGYsIDB4YTkzZDZkNGUsIDB4NDhmNzg1ZjYsIDB4OTVkNzg2NWYsCi0JMHg1ZWI4ZGI2YywgMHhhMmM4ZDRmMiwgMHhjMjRjMzQ4ZSwgMHg5M2M0MmQ3ZSwgMHgyYTVmZTgyOSwgMHgzYmM0NjRjYSwKLQkweDU3ZDlhNWMwLCAweGNmMDVmYWE2LCAweGY5ZDJiYThiLCAweDFjNTMxZmZkLCAweDJmNDc3MzNhLCAweDcxYTZhNDc1LAotCTB4ZjYyNDhlYmMsIDB4MjNhY2Y0NmYsIDB4YWU5YmRiZWQsIDB4NTQ4ZWI5NWMsIDB4ODBkODdhZDcsIDB4ZWE5NWM1ZjEsCi0JMHg1ZWE0Y2Y0OSwgMHhkZTUxMjdhZSwgMHhmM2NmNWIzMSwgMHg5MjZkZDliYiwgMHhkOTU1ZjMxNSwgMHhjM2RkN2M2ZCwKLQkweDdmOTM0NzU3LCAweDk1OGZlNjNkLCAweDJhMDdkNDc2LCAweGUxNGVjZTlkLCAweGUxZmIzZGY4LCAweDc1YjQyNTk3LAotCTB4YWI3YThmZTAsIDB4ZmFmNWQ2MTksIDB4NGRkZjRiODcsIDB4YTRjNTdkZTcsIDB4NjM0YjczZTAsIDB4M2ZlOWJiZTgsCi0JMHhmODgzMWJkZSwgMHhhNDVhMWQ3ZCwgMHhmNTQ3NmJjZiwgMHhjMTkzZjM5MSwgMHhhOTJiZjU3YywgMHhmOTE2Nzc5NCwKLQkweGMzZDgzZDZhLCAweDI3NWU2MGQ4LCAweDg1NWJiOWZjLCAweDcwODI2YmJlLCAweDNiOWFmMjg1LCAweDI5YmZkZDc4LAotCTB4ZmE4ZTNkY2QsIDB4MzZjYmViM2YsIDB4YTRlODlmOTEsIDB4YzBhYmY0N2MsIDB4MWEzNzk4ZDcsIDB4YmFjNThiMDgsCi0JMHg1OWEzMmZmNCwgMHg5YTkxZDYwMywgMHg5MjZmZGM5MiwgMHhhNzRjZmQxYywgMHhmM2MxMWNhMCwgMHg2ZWYyN2Y1NCwKLQkweDYyM2VjODU1LCAweDNjZWIwYmVhLCAweDg1ODA0NmY5LCAweDdkZjAzYmY2LCAweDNhMDgzNzEzLCAweDhiM2M0MWE2LAotCTB4MzM0MDI1NzEsIDB4MDNkMGViMGQsIDB4M2YyN2JkNDUsIDB4ZmU3MWU5OWEsIDB4MzVlZTBjNDcsIDB4YTk3ZDYzZDcsCi0JMHg0MTU4ZWY1ZCwgMHg0ZmIwZTA0MiwgMHg3NzU5ZWQ4OSwgMHg1ZWJjOWM5MiwgMHhkNDlmZDZhZSwgMHhmNTZmNzliYSwKLQkweDkzZGYwOTI3LCAweGVhOGZmOWNmLCAweDljZmY2MjRkLCAweDc3NjI2NzVhLCAweGI1ZjhhOGJhLCAweDYxOWViOGFhLAotCTB4ODMyYzNhZmMsIDB4ZDJmYWViNWQsIDB4ZDQyMzkyZGYsIDB4NGMyOTRjN2YsIDB4N2FkYTY3ZjgsIDB4NTdiYzlhZTMsCi0JMHhkZWZmNGY4OCwgMHhhOTZkZTMzYSwgMHgxZWZiMWZlYywgMHgwYWRjMDdhNiwgMHgwYzMyMmVmZiwgMHhlNzA5YTFlZSwKLQkweGZhZWUyOTkzLCAweDkxYzRiZmVmLCAweDI2ZWI2ZDlkLCAweDE1ZDlkODdiLCAweDdmOTQwMmM1LCAweGY3NzllMGVjLAotCTB4NTAzZGZlMzYsIDB4NDk2ZmM0MjcsIDB4N2U3Njc2MjEsIDB4NTc3NzlmMGEsIDB4ZmZmMTE5NWIsIDB4MThhOGMwYjYsCi0JMHgwYTU4ZmYxYywgMHgyM2VhYzdhNywgMHhiZmEyYTZkMywgMHg2OWU4MGRlZiwgMHgzYzYzMGViZiwgMHhkMDE2ZGIxZSwKLQkweDcyZGZhMTE3LCAweDlhOTJlOTBkLCAweGQxMmU4OTFhLCAweGNiODUzZWRjLCAweDdmNjEyMWQxLCAweGJhNzJhNTBmLAotCTB4ZTNjODdkOTUsIDB4NWU1MmNmMzAsIDB4YmQwYWIxNWYsIDB4NzVlN2E5ZTAsIDB4Yzk5OTdkZjUsIDB4NGY0ZjlhOTIsCi0JMHhkOTdmNTQ4OSwgMHg2Mzc2NDVkMSwgMHhmNjg5NDJkNiwgMHhmYWRiN2VkNSwgMHg5MTY5MTNjYiwgMHg1YjMzZjFlYiwKLQkweGJmYWU0NDRmLCAweGZkMjE4Zjk0LCAweDNiM2U1YmQ5LCAweDRiN2Q4ZjNjLCAweDBmNjNjODlhLCAweDVmZWM3OWU2LAotCTB4YmQ2OTVhYTUsIDB4MjUyMWZhYjYsIDB4ZmFlYWIyYzgsIDB4YmUxZDIxYWYsIDB4ODc0MDhiNDgsIDB4NWM3ZjM4NmIsCi0JMHhkZjViNzdmYSwgMHg3ZDUyMzBmZCwgMHg2ZmNlMWFmNywgMHhlMTZlZmU0YiwgMHhhN2U5MjI1NywgMHhmM2JmMzg2YiwKLQkweGZkN2Y5ZTNiLCAweDhhZmYzYzc3LCAweDc3ZmYxOGVmLCAweGZmOTg0NGE1LCAweDAxZmRkNWZmLCAweGYwZmZmNWUxLAotCTB4ZmJlMTAyZmQsIDB4Y2MwZWEyMDAsIDB4ODdiZGUyZjcsIDB4N2U1ZGI1YTUsIDB4ZGI3MTRkNjgsIDB4MDdhMDRiYTcsCi0JMHg5ODJmMDlmNSwgMHgxODRlOGVkMCwgMHhhYjYxZWJjMSwgMHgxYjdjOTk0NywgMHgwMWJlZTBhNSwgMHg4MzJjNWYxNSwKLQkweDQxZDYxMWM3LCAweGMwNzZiY2U3LCAweDMwMzM5NjczLCAweGIyZjk4ZWNhLCAweGUwZTI4YzExLCAweDhiYWYzMzRlLAotCTB4NmQzNWJkMzEsIDB4YjdjM2VkMGEsIDB4N2UwZWRkYTYsIDB4ZGYyZjUzNDksIDB4MTc0ZTZkMzMsIDB4NzYyZjYxNzEsCi0JMHhjOTQ2NjQ2NCwgMHhhY2VmYTg2NywgMHhkNWE1ZmI2MSwgMHg2YWVhMjlkNiwgMHgwZmJlNTZkNiwgMHhiNDk1ZTk5NywKLQkweDRhYmRlOWRiLCAweGYxNDNmYTFhLCAweDM4ZjVmODdiLCAweDI0NmU3MzNmLCAweGRiOWM5NGI4LCAweDcyNTQxZTI5LAotCTB4NDQyN2JlMTAsIDB4NmUzNmQ3ZmQsIDB4YTVlNjBlNDAsIDB4NjIxN2UwNmQsIDB4YWM3MWYwNWQsIDB4NmIzYzUyMGYsCi0JMHhmYmVhNzFhNSwgMHhiZjg3ZDg3ZSwgMHg5MzAzMDllZiwgMHhiZGViOWViMCwgMHg2MjczZWY5ZSwgMHg1ZDRkNmE5NiwKLQkweDdmYzFhMGVmLCAweDc1NDRhZTcyLCAweDhjMGZiOTNkLCAweDBmZjNhNDNmLCAweDMwNDczZTdhLCAweGQwNzdlMDMxLAotCTB4MWJkNTJiMzYsIDB4MWZmMTFhZGYsIDB4MjZiYmZjNzksIDB4Y2ZiYmU3NWUsIDB4YzZlYzg3Y2EsIDB4YjhlMDE5YjgsCi0JMHhmMTIxNjc2ZiwgMHgyMzVkY2NlZiwgMHhmOGMwYTgzZSwgMHgyZjNmM2ZhMywgMHgyOTVjNDdhNCwgMHg0NTQ3MDVmMiwKLQkweDE3Y2Q0M2JlLCAweDYzYWRmNWE4LCAweDFjNzI0ZjIyLCAweDc2ZDAyZmYzLCAweDVhMDQzZTYwLCAweDVhZWU4ZmE1LAotCTB4NGZhNTI3ZGIsIDB4ODRmMmZkMDQsIDB4ZGU0M2YzYzQsIDB4NTQzZjNjNDMsIDB4MGJmNDc0NjgsIDB4YjgzOTRmZGQsCi0JMHhiOWFiZTcwZiwgMHg1MGJmNWU3ZSwgMHhjNTliM2RmMywgMHgyMDdmMGE3YSwgMHgyZmMwYTNmYiwgMHg2YzFjNmMyZCwKLQkweGQ4NWYzYjQ0LCAweDZkOGQxOTk4LCAweGMzYTdkM2JlLCAweGNhOGNlZjUyLCAweDdlOTUzYWFkLCAweGI4NjhmODkxLAotCTB4ZmRlYWU3NTgsIDB4N2JkZjU0NWQsIDB4ZmZlZWFjMzUsIDB4M2Y3YzNlYzMsIDB4YzdlMGI3NDMsIDB4ZDQ2MWY2MWYsCi0JMHhiZjU3MmZiZiwgMHhmOGM3ZGQwYSwgMHg1MjM5NTY5MSwgMHhjNDE2Njk1ZCwgMHhkY2U3MDhjNSwgMHg4YWI3MGUyNiwKLQkweGE1N2U1OWVmLCAweDYyNzNkZjBjLCAweGI2MjM1NzZmLCAweDY1MzlkNTA1LCAweDM5YWY3Nzk0LCAweDliZmU4OGQ3LAotCTB4YmVmNzYyZTcsIDB4NjY1ZjI5NWIsIDB4OTg5ZTMwNTQsIDB4YmJjZGExZGQsIDB4ZmU3ODMyZDksIDB4N2Y4OTU1ZmQsCi0JMHhhYjFkZTlhZiwgMHg3MGI4ZjhhNywgMHhjN2Y4OWVhYywgMHhmMTRjY2IzNiwgMHg2NGMwY2RhYiwgMHg3MGE3ZjYwYiwKLQkweDNjYTBhOGJmLCAweDZjZmIwY2IxLCAweDgzZjkwMjVhLCAweDg0OTVmYjA1LCAweDc5ODI4M2Y5LCAweGE1ZDhkYjMwLAotCTB4MmJhNzg4NDksIDB4N2NkNTU5ZDUsIDB4NzM5MzE2ZGEsIDB4ZWZmM2QyM2EsIDB4MWVkNmIzYWQsIDB4NGRmYjQyM2MsCi0JMHg3OGE5NzVkNSwgMHhiZGE1ZWI1MSwgMHg3ZGQ1NTlkNSwgMHgyZmYyOWUwZiwgMHgzYzM0ZmIzNSwgMHg5ODMxYWVmYSwKLQkweDc5ZGMyYzdmLCAweDVmZjYyOGMyLCAweDgyNzM1MzVhLCAweDFkYzJkODc1LCAweGFhZmVhOGU3LCAweGY1M2Q1YmQ2LAotCTB4ODZhZmM4ZTcsIDB4OTI5Y2U4ZTcsIDB4ZmQ3OWNiNmQsIDB4ODFjMDNiNzUsIDB4ZGJhYzJiNmQsIDB4MDZmY2YwMDksCi0JMHgxYjZkOGRkNiwgMHhiZmFmMWJhYywgMHg1YThmM2NiMSwgMHhiNTA3NzJmZiwgMHg1MzE3OTZiYiwgMHg5M2VjMDg1YiwKLQkweGVkYmFjMzY2LCAweDJlZGJhYTM5LCAweGRmNjNkM2VmLCAweDM2ZjVkNTI0LCAweDI4OTVhZWNiLCAweDNmNzUyMWVmLAotCTB4ZmRkNzg3ZWEsIDB4YWY5ZTY4ZTQsIDB4ZDAzN2VjZjEsIDB4ODM5ZTBjNzcsIDB4MjVkZmQyMjYsIDB4MzFiMzczNmQsCi0JMHhiMGVhZjgzZSwgMHhhZWUxMWIzYiwgMHgwODViYmFjMywgMHgzYTc1OWM1ZiwgMHhjNjZlNzhjYywgMHg4Y2MzOTc1OSwKLQkweGY2YzJiNmY1LCAweDBmZGM0NmQzLCAweDE4MGZhNzUzLCAweDkwMDYxZjMxLCAweDQ1OTZlM2E3LCAweDdjNzNiNmNmLAotCTB4ODk1YjZmZGYsIDB4YzU3YmYxMTksIDB4ZmZlYjU4ZmEsIDB4M2RmZDhmYWYsIDB4YTBhY2IxZjUsIDB4MjkxZTkyN2MsCi0JMHgxYjljZTk3MCwgMHgzNGVmZGRiMSwgMHgxM2QxMGZjZiwgMHg5ZWJjNWRhYiwgMHg1ZjdmYmFiMiwgMHhhZTc1YzM5MiwKLQkweDIxOTUwOWJlLCAweGYzOTQzNWYzLCAweDZjNmQ4NWZjLCAweGY1ZTg3MzdmLCAweDFlMDYxOTI1LCAweDQyMzllMDQ3LAotCTB4NDFmZmRlMTEsIDB4OGUzNWRkMWYsIDB4ZjQxZmRkNWYsIDB4OWQ1N2UwODksIDB4ZWZhMjY0M2QsIDB4MmM3N2RhNDksCi0JMHhjNDE4ZWVjOCwgMHgxZjM0M2YwNSwgMHgzMmJjYmFiNywgMHhmN2NmYmYxYiwgMHhiOTYyOGQxZSwgMHhjOWE3NWYzYywKLQkweGJhYjBiMWM3LCAweGI5Nzk2ZjVjLCAweGE3M2FlNTk5LCAweDc1MGJmNjk5LCAweDBlZGRhMTY1LCAweDdkMzE5ZmNmLAotCTB4ZWJiNzE2NTcsIDB4OWU3ZTc0Y2UsIDB4MTU5ZDM3ODMsIDB4YjlmNTFlYjMsIDB4N2JkZjMzZGYsIDB4OGNmYzYxZmQsCi0JMHgwYmQ5MWQ3MiwgMHg1MDU3NGViNSwgMHg4MWNiNjdhZSwgMHgxOTk2MGIzZiwgMHgyYjlmNTQ3YywgMHhmYmEwOWZkNywKLQkweGIwNmM2ZTIyLCAweDlmMjNhNDE2LCAweGI0NjgzZjFmLCAweDNjMmQ1ZTYyLCAweDdmMjhlNjNmLCAweDNjMmZhOWExLAotCTB4MWM5MWE4ZWYsIDB4ZDUyYmFjYjgsIDB4ZTA3ZGQ0ZjEsIDB4NDdkYjVhYjMsIDB4MDg2ZGJlNjMsIDB4MDUxYTZlNmIsCi0JMHhhZmU5MGZjZiwgMHhlOWZlZTJiMywgMHhiZTNjZjU5ZSwgMHhmODQwYmJmZiwgMHgzNjc5ZTEzOSwgMHg0YmY0MzNlNCwKLQkweDcxZjBmM2MyLCAweGUyMGY5Y2U5LCAweDljZmRiOWQyLCAweDBhMmRiNDgwLCAweDE3M2VhM2NlLCAweGQyZjMzZmNlLAotCTB4ZjBiZjc1YjUsIDB4ZmRjNTUzZmIsIDB4ZDU4MmYyODYsIDB4MTNiZTkxZmQsIDB4NDllZDBjNzQsIDB4YTlhOTc5NDMsCi0JMHgzOTdjYzg3ZiwgMHhkYjdmN2NlOSwgMHg0YzFmNTgxMywgMHhmMjBmYWQwYywgMHg1ZDc4NjAzYSwgMHg4NTczZDU1MCwKLQkweDgzMWQ3ZmVkLCAweGZhMDc1ZWY4LCAweDI3OThlZDFhLCAweDBhMGZkNzk1LCAweDhmZDkyOGRmLCAweGE3MDgyMzdhLAotCTB4N2E5NTNmZDgsIDB4MDRlYzdiZjksIDB4NzBjNWQ3YzYsIDB4YTc3NzljZmYsIDB4ODJiOWY5NDQsIDB4OGFlZTVmMDksCi0JMHg4MTczM2U4MSwgMHg3NmJkNDNkZCwgMHgwYjJhZmZiMCwgMHhmYTA5YTNlYSwgMHhjN2FlZmMyMiwgMHhkNzJlOTJlMywKLQkweDM0OWViMDk5LCAweDcxZWFlZGY1LCAweGUxNDE5ZGY4LCAweDIzMGU0MzFkLCAweDMwYThlZTVkLCAweGQ1NDBmZWQwLAotCTB4N2I3ZDRkZWUsIDB4N2Y3ZTE4ZmEsIDB4YmM2OGNhZTMsIDB4Y2MzOTI3OWYsIDB4MmYyZjVlMGEsIDB4YjdlM2ViYzUsCi0JMHhjZTkzMzFmOCwgMHhhMDc0MjIyNiwgMHg0ZjA3MDNjZiwgMHhiNjZlNTFlYSwgMHgxODI1ZGM5OCwgMHgxMTRlMTczZiwKLQkweDZlMGFhNjc1LCAweDliNjhlZmE3LCAweGU3ZTQ2MDYyLCAweGVlZTZlZDY5LCAweDFmMjhhZmNjLCAweDQ4NTZkZGQ0LAotCTB4ZWUzYjIzZjUsIDB4YjQxNDE4N2YsIDB4YzEzYjg1MzcsIDB4M2I1ZWM1OGUsIDB4ZGQyZjM2M2IsIDB4MTFiY2Y4NGEsCi0JMHg2M2MyMThlYywgMHhmNGViYzI5YiwgMHgxMWNmZjRlMSwgMHgyZWNkZWZmNCwgMHhkMTg3YTZmNSwgMHgyYjM5ZTBmZSwKLQkweDZhNTI5ZjI4LCAweDYwYWUzYjRmLCAweGZhMzg2N2RlLCAweGMyMWUxMmViLCAweDM1ZmYyYmQyLCAweGQwOTZmZDBiLAotCTB4NGViNzNmOGIsIDB4ZmJhZjdiZjAsIDB4MzlmZjVhYTcsIDB4ZjRlNmE2NzUsIDB4NjM3NTFkZmYsIDB4ZWI1MmZlMzUsCi0JMHg3NmJjNmE0ZCwgMHhkYTgxZjA0NiwgMHgzZmVkMTU5ZSwgMHgxYTAzN2RmYywgMHgzN2RmODhkNywgMHhkZjdmMjJkOCwKLQkweGNlODViYjMwLCAweDZmYmY1MTI5LCAweDI1NjQ2YmQ4LCAweDNmNzExMzViLCAweGM5ZGVmOGFkLCAweGE0ZmM4NTM3LAotCTB4YmVmZjRmYmQsIDB4Zjg4OTE3ZjEsIDB4Mjc4NDkzYmQsIDB4M2MzZDgwNmIsIDB4M2Q1ZTc2NGMsIDB4ZWRhZWFlYWYsCi0JMHg2ZDZmOWU3MywgMHg2YmMzZmJlMSwgMHhmYjlmMjM1YiwgMHg3N2RhMDM3MiwgMHgyNzI4ZWY3OCwgMHgyYjUxYmQyMywKLQkweGQ5OGVkYmY2LCAweDk3NDRlYTI2LCAweGViZjc5NmYzLCAweDFlOTZmMzQzLCAweGVlYTQ5MDI1LCAweGJjNTFmNWUzLAotCTB4ZjY2M2NkYTcsIDB4NTNhY2I3OTYsIDB4OTZhZmNmYmYsIDB4YWUxZjY4MWMsIDB4NTliNzBmYjQsIDB4MzVlZGQ3ZWMsCi0JMHhlNmZjZTk4ZiwgMHg3OWUxYjk3ZCwgMHhiNWQzZjdjYywgMHg2OTkzOWM3NSwgMHg3NGZmNWE1NiwgMHgzNmU3NDRiNywKLQkweDFhYWU3NDk5LCAweDg2ZmZiN2RhLCAweGNmYjQ4ZDY0LCAweDg3NjEwYmZiLCAweGM4M2E4YmM2LCAweDNmOWM4ZGNmLAotCTB4NDQ5MzdlN2UsIDB4NzdlMGRmZGYsIDB4OWZmNzQ4NzgsIDB4YzNiZmMxYmYsIDB4ZmYwMTc5ZjksIDB4N2JhZDQ3MGUsCi0JMHg1Y2Q3ZGZhOCwgMHhkMDdiYWMxZiwgMHg3N2VhNzdmNywgMHgzNjc3ZWEzOSwgMHg1MzlkNzdlYSwgMHhiOWQzNDdkNiwKLQkweDVhMTg4ZmM1LCAweGViZGZiOTUyLCAweDNhN2NiZTI1LCAweGU4ZmRkMTlkLCAweDQ5MWY1NjI4LCAweDk3YTY4ZjVlLAotCTB4ODQ1ZTlkM2MsIDB4ZGM3OWFlZTMsIDB4NDIzZDI5N2IsIDB4ZTMwYzNiZGMsIDB4MjE4Zjc4NDgsIDB4M2M4NWUyMDMsCi0JMHgzMDVlMjkxNiwgMHhlMjY5MTQ2NSwgMHhjNzg3ZWEwNSwgMHhlZWFhZDcwYiwgMHhjZmMwYTRmMSwgMHg2ZGY3NWMzNSwKLQkweDZiYzZmYzkxLCAweGRmZWJmZjM4LCAweDQ1YWZmY2YxLCAweDczMmFkYmEyLCAweDFmMTdmM2U0LCAweGJlODQ5MGNjLAotCTB4Y2UxNzllZDcsIDB4YzkyZjdjN2EsIDB4YTQ5MzdhZWQsIDB4ZDUzMzcwN2MsIDB4NGY1NDBkZDMsIDB4NTM2YWY1NTcsCi0JMHhiYzdmOWYyYywgMHg2ZGE5YTdjOCwgMHgwYzliNjg5NSwgMHg0YjY1ZjM5MSwgMHg2NDY3ZmRjNCwgMHg5M2U0MzhlNywKLQkweGYzNmEyZjgxLCAweGI0NWI4Mzk3LCAweDViMWJjYmY5LCAweDBjODhlN2I1LCAweDA5Y2Y2YmYxLCAweDNkYWZkYzI5LAotCTB4YTAyOGE2M2YsIDB4Zjg2NjNmM2QsIDB4MzFmOWVkNTEsIDB4ZTdiNDNhMjMsIDB4OTlmY2RjYzcsIDB4NWI5OGZjZjYsCi0JMHhjYmY5YjRiYSwgMHgxZWRjMmY1YiwgMHg4ZmE3MWRmNiwgMHg5YzA5NDc5ZiwgMHg5OTVjZmExYiwgMHhiOWQ4NWU2OSwKLQkweDczYjBiYTM1LCAweGNlYzNhMjZiLCAweDFmM2IwOWFkLCAweGUzOWJjYzQ1LCAweDdlNzYxM2VkLCAweDM2N2Q3NjhkLAotCTB4YmEwZGM3YWMsIDB4ZWZkYzdhZmEsIDB4MWVhMjI4ZmEsIDB4Y2Y4Y2NmZDcsIDB4ZGZkZTUxM2QsIDB4ZmE5YjdlOGMsCi0JMHgwOTdmZjUzZCwgMHhlMTkxM2IzZSwgMHg3MWY0ODE1ZSwgMHg4NzViMWNhZiwgMHgyMmIxZDU3YywgMHgyZWYzMGIyYSwKLQkweDcyNjk5NWVlLCAweGZiODNmMDIyLCAweGE3YmU4OTUxLCAweDQ2OTk1ZDJmLCAweDM1ZTY3YmZiLCAweGE5M2YyMTBjLAotCTB4NGZjOTM5ODAsIDB4MTE2NzY1OWEsIDB4OWNkODc5Y2YsIDB4M2RlY2Y1YzEsIDB4OGM2NjA2ZjUsIDB4NDYyOTk3YzcsCi0JMHgzM2QwYTgxZCwgMHhjMzViMTI0ZCwgMHgyMjY1OGRlZCwgMHhlMzM1NjFmMCwgMHhmYWJiNTg3YywgMHhiZGQ1MWM3MCwKLQkweGM4NTlkZDg1LCAweGViYWFjMTUxLCAweDBlNzlkMDE3LCAweGE4YmRlN2UxLCAweGM2MjNjNjc2LCAweDYzMTZiMGQ1LAotCTB4NjhiYmNjMWEsIDB4NDdjOTNiNmQsIDB4MWUzMDc5ZjgsIDB4ZWExY2Y2YjYsIDB4YjA5NmRhZTEsIDB4N2RiN2Y1ZWIsCi0JMHgxZmY3ZjhjYSwgMHgzYzhiZjQ0NiwgMHgyZmZiZGFhZCwgMHg5OWJhODg2NCwgMHg3ZTUwMzk4MywgMHg5YWM3ZjdkYywKLQkweDE1MmNjZmQwLCAweDU2YmI5OWY4LCAweDcwOWQ2MmIyLCAweGQyN2I0MzVlLCAweGI3OWZkMDVkLCAweDRiYjhhNjVmLAotCTB4NzFlYjBmYzUsIDB4M2EyMGNmNGUsIDB4ZmVmY2ZkNTcsIDB4Y2ZhM2YyNWMsIDB4OGUwYTRhMmIsIDB4YjhmMWM3NzMsCi0JMHg4N2JiZDI0MSwgMHg3NjU5ZjVlMywgMHhlNzNjNzBmNywgMHg1OGMzZWJhYywgMHg5ZDg3ZjZmYywgMHhkZjkzMjBiOCwKLQkweDNlNTBiZTAwLCAweDk2NTY2ZmY5LCAweDlkZWY5YTFmLCAweDYzMjZiMDZiLCAweGVlY2JjNWJlLCAweDUzNzhhNTRkLAotCTB4N2UyYWJmYzQsIDB4Njc4ODI2M2MsIDB4ZjEwZmIwZTMsIDB4NzQ5ZjVmMmEsIDB4OTFmYTIyNDksIDB4ZmYwMmViNjksCi0JMHg3ZTAzZGYwOCwgMHgyNmIzYzUxMCwgMHg3ZTgxNWE2NiwgMHgzOWE1NjlkMCwgMHhkNzYwNWQxOSwgMHgyZmYyMDY0MywKLQkweDQwOTJkOWVlLCAweDBkM2RjNWZlLCAweDFmM2M0NjY1LCAweDA5NmQ5ZWUxLCAweDc5OTY5ZmI0LCAweGJlMzA0NzlkLAotCTB4YTI3OWU5NTUsIDB4MmE1ZjcwYTEsIDB4NGI0ZjdiY2MsIDB4ZDJkNjQzOGUsIDB4ZDEzN2U0ZjEsIDB4MDlkMzUxNzEsCi0JMHg3YjI3N2U5NSwgMHg0OGM5ZGZhMSwgMHg2OWJhMDNmNCwgMHg0MzIxZmZhZSwgMHg2ZTgyMDlmOCwgMHg3ZDNiNDFlYywKLQkweDY0YjE1N2U3LCAweGZmZTYyZTZmLCAweGU5OWJkN2NlLCAweGM2N2EyYmY3LCAweDM3YWU1ZTA1LCAweGM0ZDI2ZjJiLAotCTB4MmU3ZGU1M2YsIDB4YmU3NDc1YzcsIDB4MjJkYWY3NzcsIDB4ZGQzODVmYTIsIDB4ZGU2N2ZmY2EsIDB4OGFmZWZjNzAsCi0JMHhhMTk2M2VmZCwgMHgxZmFiMzFmZiwgMHhjNjNiNzM5YiwgMHhiNzk3MTJjOSwgMHg5NmM2YWI1OSwgMHhhNWYzYmZhMywKLQkweDhiNmZjZmQwLCAweGM2MzBlOTM4LCAweGJmZDdlMDQ5LCAweGY0MTI3MThiLCAweGQyNzExM2RmLCAweDQxMjcxODA3LAotCTB4NDljNjIxZmIsIDB4ZTcxNDllZDAsIDB4MDc3MmFhMDUsIDB4ZmI3YzQwOGMsIDB4YWZiNzkwYjUsIDB4NjM3OGQ0MzMsCi0JMHhkN2U2MmE2OSwgMHhkZGU3ZmZjYSwgMHg1ZjE1OWQyMiwgMHhhMzQ5ZTNmNSwgMHhlYzliMTkzMywgMHhkM2Q3ZmFkNCwKLQkweGViZmQ2OWE3LCAweDRjNzU4MzBlLCAweGQ1ODFkYTJhLCAweDhmNzA1ZWJjLCAweDc4Y2Q2NmViLCAweDk4OGM1N2E2LAotCTB4ODU3OTYwZjcsIDB4OGY2NGViYzEsIDB4M2RlNjIzMTQsIDB4NmJiMDRjNjYsIDB4OTRkOWRmYzYsIDB4MzJkYmU5YWUsCi0JMHg5NGY3NWExNSwgMHhlYjlhN2VmMiwgMHhkNDBjNTc3NywgMHgwMDVlZTdmNCwgMHg1ZGY5MGNjNywgMHg1OWY5MjYyOSwKLQkweGM2MjZlMjJhLCAweGFjNWQzOThhLCAweGY1OTdlYzdjLCAweDAwMWU1M2MzLCAweDY4M2NiZjc4LCAweGY0ZTFmYmEwLAotCTB4Yjk1YWU5NTAsIDB4ZWU3Y2E2NWUsIDB4ZjMxMmY1YmMsIDB4OWIyNzg4MDIsIDB4N2Q3YzkxZTcsIDB4Y2U5NjM0N2UsCi0JMHg1MmRjNjk5MSwgMHhmNDMxNTZmOCwgMHhkMDMxNmM0ZiwgMHgwZDEzYjJmZSwgMHg3Y2YxNDdmNiwgMHg5MjViMTNlYiwKLQkweDNkYmJmMGUyLCAweGZjY2NhMzc3LCAweGE0YWQ3N2E0LCAweGNiNzlkNTc3LCAweGVmZDA1NjFhLCAweDQ1ZjVjYzI2LAotCTB4Y2MwZjUwMzksIDB4NTY3ZGUzZGQsIDB4NGRkZmEzZWQsIDB4NGU1MDY2NWIsIDB4YmYzZWM4OGUsIDB4MTI3M2Y0NDQsCi0JMHgyOTliMzc3ZSwgMHg4MTk5ZmU0ZiwgMHg5MmE3ZjE3OSwgMHhiODcwNzVlNiwgMHgwMzU4OTMzZSwgMHg4ZjliNGZmNiwKLQkweGUwMDA3ODBkLCAweGI5YjEzMzM4LCAweDk1N2U4NzRhLCAweGY0ODkzMDdjLCAweDQzMzIyYmU3LCAweDYyNThhZGJlLAotCTB4MTc4N2YzYTAsIDB4YzQ2ZjI3YmUsIDB4ZDIwYTkzM2UsIDB4ZmE2NWJkMzksIDB4MzliNjBmN2QsIDB4NWQ2N2U2OGEsCi0JMHg2ZTMwMjFjMCwgMHg5ZWEyMmZlOSwgMHg1ZWYyMjM1ZiwgMHg2MGY1ZmZkNCwgMHg5ZmMxMWFkZiwgMHgyNTlmNDdjOCwKLQkweDAxMDI2NzMwLCAweDdmMGZmM2NiLCAweDc1NDQ5YzNhLCAweDdkM2UyMDlmLCAweGZmZWViOGY5LCAweDY0YzZiYmQwLAotCTB4NTRmZWZkMDIsIDB4ZmQyN2NiZTUsIDB4YzkxMjYwZjYsIDB4NGZkZTM4NTUsIDB4ZjJmZWI5MWEsIDB4NDE0ODFjYTIsCi0JMHgzMzk0MTliZCwgMHgzY2Q1ZmRmZSwgMHg0MWQ5MjM4MywgMHgxYTY4NmI3YSwgMHg2YjkzYWRlYSwgMHg2NDY3OTQwZCwKLQkweGFmMWM2NzdhLCAweDdjNDJiZGNiLCAweGE0ZTdiZWFjLCAweGYwODMxOTVlLCAweGExY2E2YzlkLCAweDU5ZWYwY2VmLAotCTB4NDNmZDkzMmIsIDB4N2RlM2UzZmUsIDB4OTcxZmZmOWMsIDB4N2JiZjE4ZGQsIDB4YzYzNzI0OWIsIDB4NzM3Y2UxZWYsCi0JMHhmNGUxOTJkZiwgMHgxMWIzMDQ3YiwgMHhlYTdhMjMyNywgMHhiYzY5YjM4MSwgMHgxN2Y2YTEwZSwgMHgwN2JmZTRlZCwKLQkweGU4NzY4NmMwLCAweDVkMGUwZGE3LCAweDlmN2YwMzQ3LCAweDRlNzM1OGJiLCAweGRmZGY0ZDc5LCAweDljMjNjNzFkLAotCTB4MTdlZmVmY2UsIDB4OWNlOWRmOGYsIDB4OWYxMzIyM2UsIDB4M2NkYmVlOWQsIDB4ZjllODE1MmMsIDB4YjBkNzZlODUsCi0JMHhmOWZmYTAwNywgMHg3YTI3ZWY0NCwgMHhmYmI0NmZhNCwgMHg2MmViYzQzZSwgMHhmYzJjZGFkZCwgMHhlZGIzYmE2ZSwKLQkweDg2NmY0N2UzLCAweGIyZjRmZWU3LCAweGJlNjI0MWMxLCAweGM3ZjQ4OTJjLCAweGIzMGJjZGEyLCAweDIxYmJlOWJmLAotCTB4Nzg3ZGZjYzYsIDB4MjY5OWQxZGUsIDB4MmIxNzNlMDEsIDB4OWYzMDYzMmQsIDB4ODRiOTlmMzAsIDB4NTFmOGUyM2QsCi0JMHg4NmJjZjBiNiwgMHg3M2NmMWQ3NSwgMHhiYjE0NWM3YywgMHg3OWI0ZTMwNiwgMHg4ZjhjNzk2MSwgMHg4ZDgzZjdjNSwKLQkweDZmYzY5Mjk5LCAweGY1Yzk5ODM4LCAweGU3MWQzY2Q3LCAweDM4Yjc4ODZmLCAweGIxYTYzMWJmLCAweDVlZGVhYTAzLAotCTB4MjIwZmJmOGMsIDB4YWE4MGVkMDcsIDB4MzM1ODZiYjcsIDB4YjNmZDZiOWQsIDB4ZmYzNGJlY2MsIDB4YmY0N2M5NDIsCi0JMHgyNzg3NTIyMywgMHgyYWY4YzM1NCwgMHg2YjYzOGYyYiwgMHg1MWYyOGM1ZSwgMHhlNTgwYWE5YywgMHg4ZTBmZjEwYiwKLQkweGU3ODEzZWExLCAweDdlNWYxOTE2LCAweDAxNzdkOTBhLCAweDg2NzVmMDBiLCAweGMxOTNmYjhkLCAweGU5YzgxNTU3LAotCTB4YWNhYTdmNjksIDB4MzQ2YzFiMWIsIDB4ZmI4MWMxYmYsIDB4NzkwODE3MTksIDB4N2M5NjZkYWQsIDB4MjUwNzVlN2UsCi0JMHhjYzVmM2EzYiwgMHhkMWQ4NWYzMywgMHhjM2Q0ZmI3MCwgMHhhM2Q5ODUyZSwgMHg5Nzc2NjFmOSwgMHgyY2VkNmIzNSwKLQkweDc5ZTc0YmMwLCAweGMzODZmMGFiLCAweDI1ODk4YWU5LCAweGU2NmEyYzNjLCAweGRjYWIzZWZiLCAweDA4OTM3ZGJlLAotCTB4MTQwMWM5NmUsIDB4MDJjZjAxZWQsIDB4ODA5NTFhZTYsIDB4Yzc5MTc4ZWIsIDB4ODVmMGUxZTksIDB4YmMwN2FiYWYsCi0JMHg3MGUxOWQ2MiwgMHhkMWNlMzk1NywgMHg1YjM1ZTVmNywgMHhmODU3YzIyNCwgMHg4NDdhNTQzYSwgMHg1ZDJhNzFmYiwKLQkweGJmMWNiY2FhLCAweGQxMTI2ZDU1LCAweGZmNjVkNGYzLCAweDUwZmVkMTkwLCAweDBiNTg2Zjk1LCAweDc5ZTQyZmZjLAotCTB4NWQ2MDhmOTUsIDB4MmRiZjUwOTMsIDB4MzhmYTA3NTgsIDB4MmQzZjI3YTcsIDB4Yzg3MTJkNjIsIDB4ZGZjYzc1MzcsCi0JMHhkM2Y3MjU4OCwgMHg0NzNiOTZmZSwgMHg0ZTc5ZTBlNCwgMHhhOWRjZTk4NywgMHg1NzNmOWIwYSwgMHhlY2E4ODA5NywKLQkweDk2ZmNiNDdjLCAweGUzODc5ZjIwLCAweGJkZjQ0YWZiLCAweDUxMzFmYzVhLCAweDAwZTdhMDY3LCAweDkwNWZmMzVmLAotCTB4OTA5ZmZiZTksIDB4ZjYzZTIyNzEsIDB4N2I1NTdjOTIsIDB4M2ZhYzQ2YmQsIDB4YjlmOWViNTcsIDB4ZDM4MjU3NzIsCi0JMHhjYmJmZTdhMywgMHgwNTc4NDU3NCwgMHhkYzM1YWYzZSwgMHg3ZjVhNTlkMSwgMHhlNTc3ZTgzOSwgMHg1YmQyNDdjNiwKLQkweDA5OGYzYWVhLCAweDdiNDU3MzNkLCAweGM1ZGM3N2FmLCAweDQ5MjdkZWM4LCAweDRkZTlhZjk4LCAweDNiMDk1NzdmLAotCTB4M2VlZDFmM2YsIDB4N2ZhYzlmYjQsIDB4M2M2YmNlOTUsIDB4M2E1NWVlYjUsIDB4ZjJmOGQ1OWYsIDB4ZjBiN2RhN2MsCi0JMHg4Zjc5ZmFjOSwgMHg3YzRmZWZlMiwgMHhkOTFlNjViMiwgMHhhYjRmMDVmOSwgMHgwYzZkZGU3NiwgMHhkNmNhMWZmNSwKLQkweDVmZWU3ZGNmLCAweDM0NWY2ZjkwLCAweDZhYjk1ZDUzLCAweDQxYzQ1YjhmLCAweDljNjE1N2EwLCAweDUxZWI5ZWIyLAotCTB4ZDVlYjhlYjYsIDB4MDcwZjY4MDUsIDB4MGViYzNkOTEsIDB4ZTU1ZmRkYzcsIDB4M2ZmOTBlYmUsIDB4YzlkOTNhZTQsCi0JMHg3ZmI5ZTdmYiwgMHhiZGU2MTNiNSwgMHg4NzE4YTVmZiwgMHhmNTZjOTY5NywgMHhkNWI0YmNmMywgMHhmNmIwZjY4ZiwKLQkweGQzOGUwZmRlLCAweDA3Yzk0YmVmLCAweDZhODFmYmRmLCAweDEzOWUxOWZmLCAweDQyY2UyZWU1LCAweGJmNzYxMzM5LAotCTB4NjU5OGRlNTYsIDB4ZWMyMjNiNDUsIDB4ZGYxYjNmYzQsIDB4YzliZTIwZjcsIDB4ZmVmOGUyYmYsIDB4ZjllMzg5YTgsCi0JMHhlZjFjYjVlMywgMHg1MWZhNWI4ZCwgMHg1MzUxZmFmYywgMHgzZWFiZjIzZiwgMHhmODRiOTJkYSwgMHhmODAzNWNhZSwKLQkweGQxNWFiZjI2LCAweDgwNGQ1NWZhLCAweDEwMWY4YzZmLCAweDNkZDcwMGRmLCAweDZmODExNDdiLCAweDEzNzdjNzA3LAotCTB4Y2I1YjMzYzcsIDB4NzgxZWNhZGIsIDB4ZWJmOWQyZjUsIDB4OTQ3YmZmZjcsIDB4Y2Y4NGZkMDMsIDB4OWZmMjdlY2MsCi0JMHhkMzJhZGIzZSwgMHhkZmFhNjk1OSwgMHg3ZjNkZmFhNSwgMHhhMmNmY2Q2NiwgMHg3YmUyYTY3ZiwgMHgzZTQwODBlMSwKLQkweGM3OGE5N2VhLCAweDc4ODcxNzdmLCAweDI3OTViODVmLCAweDliZTA3YTRmLCAweGJjZTg1MzM5LCAweGJmZWZjYmZkLAotCTB4Y2UyZDI3ZWMsIDB4YmU5M2Y1MGEsIDB4OThlYTVkMjUsIDB4ZDcyYmY2OGIsIDB4Zjk2NjM5ZTEsIDB4ZDVhMmZiMjEsCi0JMHhkZjBiM2ZkZiwgMHg3Y2YwYWQwNywgMHg5ODczMTQ2NSwgMHg0NjRmMDg0YywgMHhiOWI4ZWZmOCwgMHhmZThiZWUxOSwKLQkweGVjZGNmNzJhLCAweGJiOGU0OTdiLCAweDMxYzdiZjM0LCAweDc4MGRmOTg5LCAweDkxNmIwMTllLCAweGVkNGJiZjY4LAotCTB4MjU3MTI1ZDIsIDB4YWQyZGNmMGMsIDB4NjczNjM4MjcsIDB4NjlkZjNiNzEsIDB4M2YyMmNhZWUsIDB4YzcxNDY3NmQsCi0JMHgzNTliYThmYiwgMHgwN2E0ZDFmMSwgMHg0MjNmZjExZCwgMHgzZjIwZTAzZiwgMHhkNzkyNzhkZiwgMHg0OWNlZjk0MSwKLQkweGFiNTI0M2M1LCAweGZmM2FlODQyLCAweGI4ZDczZjAyLCAweDljYzQ4MmVhLCAweGMwOWRmYzc2LCAweDYyMmZiNGIxLAotCTB4ZGExNGYzN2UsIDB4NmQwNTUwMDcsIDB4NWVmOGU4NTksIDB4OWNkYmNmYmUsIDB4YzdhMmYzYzUsIDB4NzgwNTRkNzEsCi0JMHgxZGY4OTM5ZSwgMHgxYTllNzEzYywgMHgzNzAxNzFkNSwgMHgzYTJlY2RjNywgMHg5Mjc4ZWY2ZiwgMHhjOGNmYzFjOSwKLQkweDA3ZGZhNzhiLCAweGMxZTg1YmI4LCAweGI0N2Q5Njk5LCAweGYxZTYxYzhmLCAweDdiOWUxYjMyLCAweDA1MDFhZWZmLAotCTB4ZjFkNGMyYWMsIDB4NzNjNjg2MzIsIDB4YmVmZTNmNTIsIDB4ZmY1Yjg3NDksIDB4ZGYyMmFjMWIsIDB4YmQ5MmVkYmIsCi0JMHgzYTQxM2MyNywgMHhmMzgxY2Y2YSwgMHg4ZmNlNDc0NCwgMHhmZGM1OWFiYywgMHhhNGU5YzkyOSwgMHhjYzE0NDQzYSwKLQkweGRmZWYwZDFkLCAweGViZjBhNTllLCAweGRiM2JmZjYyLCAweGVkOGNmNDAwLCAweDdhOWM5ZTc5LCAweDM5Zjk3OTlkLAotCTB4ZjBhNTM1YjIsIDB4NjcxODliZWYsIDB4YjIxYmQ0MjQsIDB4MzFhZmQzNGUsIDB4OWU4N2ZiZjIsIDB4NWQ3OTNkOWQsCi0JMHgzMGVmNjMwNiwgMHhmNDNmN2FjMCwgMHhmZjhmMTk1MywgMHg3MGZiYzZlNywgMHgzYzY0ZDdkZiwgMHhhZDg2Y2E2ZiwKLQkweDc2ZWFmODllLCAweDc4ZWFmMzNkLCAweDdhYzE2NGRiLCAweDZhNjczODg4LCAweDFkZGZjMDkyLCAweDBmMWZjY2M1LAotCTB4YTAzZmVmYmMsIDB4MmVmMTZmM2QsIDB4MWQ3ZmNlYmYsIDB4OWUzMjc1ZTAsIDB4ZTc4Zjk3NjcsIDB4MmIwNjI5ZDYsCi0JMHgyZTU1YzdiYywgMHg1MmJjNjAxNSwgMHhjMWRiZjJiMywgMHhjMmVjZjFkYiwgMHg0MjQ2ZWJjOSwgMHg3MGUzYTc1ZiwKLQkweDI5ZTc4MGZlLCAweDFlZmU2MjY2LCAweGNmNWIzMGYwLCAweDljMDVjOGY2LCAweDhmMTc4OGRlLCAweDIwN2RhMTRkLAotCTB4ZGEyNDRiNWQsIDB4ZWRlNmEyYWYsIDB4MDkwZjdhNTUsIDB4OGU4OWVkZTYsIDB4MzA3YzA1MzMsIDB4M2UxYzUzNGYsCi0JMHhhZjRjOGM2ZiwgMHhiOGQ0YjIyZiwgMHhlZGUyODViYSwgMHgxNzNlNDJjNSwgMHg0NWI5NzJhYiwgMHg2Yzk2OTcyYiwKLQkweDhmZjQ0NzQxLCAweDQ1MzM2ZjAxLCAweGY5YTRlYjBiLCAweGQ0N2JjNDZiLCAweGQ5Y2RkNzczLCAweDM2NzM3ZTdjLAotCTB4ZjJmZmUzOGYsIDB4NTk4ZmJlNzcsIDB4YWE4ZWY5ZjgsIDB4ZjE0NmQ2N2MsIDB4NGZmN2Q1ZjksIDB4YjY1NDZkMTYsCi0JMHhlMTU1ZTY4ZCwgMHg3ZmQ3Y2YwOSwgMHhmOTE1NjFiYSwgMHg2NzdmZDU0OSwgMHhkZjQ0M2ViZSwgMHgzMjRjNWQ1MCwKLQkweGVhMjI1NTc2LCAweDQ5OTllZmE1LCAweDViMWE2NmVlLCAweDNkMmRlYjcyLCAweDE1ZTdhOWM3LCAweDgxODBiMDU2LAotCTB4YmU0NDBmZDcsIDB4ZDFhM2Q4NGMsIDB4YmZjZTg1YjIsIDB4ZWZmODkwYWMsIDB4YzQ5Njc2NzQsIDB4ZTcyMDc1N2EsCi0JMHhiZjdjY2NjNywgMHgxZmYwNzllNywgMHhjMDE1M2RmMSwgMHhlZjMxZjgxNywgMHgyN2ZiZjhhYywgMHgxMTU4M2ZhMSwKLQkweDdiNjNkNDY3LCAweDczY2ZjY2NjLCAweGIxMDJjMzllLCAweGZkNDEzOTM5LCAweGQzMjI1OGRiLCAweGZiY2M4NzM5LAotCTB4YWZhYzY0ZjQsIDB4MjEzYWMyYWQsIDB4Y2NlNjNmZWYsIDB4ZTg5NGFjYTAsIDB4ZWEzNmY3M2YsIDB4ODExNzY5YTUsCi0JMHg5YmVmYTgwZiwgMHhhOTM4ODRlYywgMHhjZmI4YWY3MywgMHg5ZGYzZDIzNiwgMHhmNjdlMDkwZiwgMHgyN2ZkZTI2ZSwKLQkweDI3OWJmYmQ1LCAweGFiOWRmM2UzLCAweGU0YmZmYmQ1LCAweGYzYTg5ZmZkLCAweDYxZTNmZThiLCAweGRkODQ1N2Y3LAotCTB4ZGZlZjE5ZmYsIDB4MjcyZmRjZjQsIDB4MmQ4ZmQxN2IsIDB4NzE1ZGFjZTUsIDB4Y2ZiZjQ0OTMsIDB4MWJkNDIzZjEsCi0JMHg1NjJiMGZhMCwgMHgxNWNmMDlmYSwgMHgyZGJjNWRiYSwgMHhkMGRkN2U2NSwgMHhjYWFiOGYyYiwgMHhlZDA4ZmQ3NiwKLQkweDMyN2IxYzk1LCAweDkyZjVlZDE2LCAweDY3ZjUyNzFjLCAweDY3NDdiYTY2LCAweDhhNjhiYjQzLCAweGJhYzIzNWU0LAotCTB4ZDkxZjExZDksIDB4ZThiZDQ5OGYsIDB4YmQwOTFmZTUsIDB4ZjlmMGE1NWMsIDB4M2NjMzdjNTQsIDB4ZmU4YmIyOTMsCi0JMHg5Y2ZlNzlmZSwgMHhiYjllNjNkZCwgMHg1ZDllMDZhZSwgMHg2NjkxNGYwOCwgMHhjMGQ1ZjcxZSwgMHg3NjhlNWQ3MywKLQkweGRhMWZkNTFlLCAweDIzZjlkN2QzLCAweDJlZGMyYjg0LCAweDIzYjFmZTJlLCAweGVjNTNmMzFlLCAweGUyOWRmMTJkLAotCTB4NDJhYzk2Y2EsIDB4MmZmMTdmOTgsIDB4YTE1NTY0NzcsIDB4ODJmYzI1ZmYsIDB4NzY4YmI0M2EsIDB4ZGI4MzE3M2MsCi0JMHgzZmRiY2ZjNSwgMHhiNmU1ZmJlNCwgMHg2MGM3MWJiNSwgMHg1MGRhMDAxZCwgMHgwYmQzNThiYiwgMHhiNTZjZGU5YywKLQkweGFmMzhmZmNlLCAweGI0ZjJmZTFiLCAweDU4YjllOTFlLCAweGQzYzlmMmQ3LCAweDkyNmZlNzY4LCAweDU5Nzc3ZTIyLAotCTB4ZGUzYjllMmQsIDB4MzUyNWVmY2IsIDB4ZTAzZjczNjYsIDB4ODdjZWZlYTUsIDB4YjIwYjZmMTAsIDB4YjI5MWU5MTksCi0JMHg3OWNmOTE1NSwgMHhiMWU4NWI3ZSwgMHhlNmZmNjEwYSwgMHgyOTM1OGIwZCwgMHgyM2EyZTc4MCwgMHgwZmI4NTVlZSwKLQkweDRlNDM2YWFiLCAweDk3OGRlNjAxLCAweDk2M2U5NjY3LCAweGQ2Zjk4ZGZkLCAweDZkNmY5ZTJlLCAweDBhZDZmOWUzLAotCTB4MjgyOTYwNWIsIDB4ZjY2NmY2NzEsIDB4MzI5OThmNWIsIDB4YTlmZTBmYzEsIDB4YjIyMDY3MmEsIDB4OTQ3OTZjZjAsCi0JMHg3OTM1M2ZkYSwgMHgwZjllNDhkNCwgMHhjZmNiZmVjMywgMHhlNTBjN2YxZCwgMHg4M2MyM2Y2NiwgMHg4M2UxZjVmOSwKLQkweDc0M2Y1MWEzLCAweGFjZThjNGU0LCAweDI1ZmU0N2EwLCAweDA4OWJlZTYzLCAweGI3ZTFhY2M3LCAweDkyOWE3ZWQwLAotCTB4NzMwMWQ4YTgsIDB4Zjg5ZWZlNzksIDB4NWMzMjVmZTIsIDB4MzhkZDcwOWIsIDB4NmUyNGYzMWUsIDB4MmVlOTNmYTMsCi0JMHg0ZGZiODc1OCwgMHhiYWIzZjY5OSwgMHg5MWRjNjNmMywgMHgyZWZmZjNlYSwgMHhiNjY2ZjBmMCwgMHgzYWZkZGE5NSwKLQkweDA4MjBiMzgwLCAweGYwN2VmYTg3LCAweDYwMDY5N2Y3LCAweGQzMmI5M2JlLCAweDUwZjdlMDg2LCAweDBlNGEzMjI3LAotCTB4ZGYwNTE3NjQsIDB4YmRjMzIyN2YsIDB4ZGY1M2UxMWQsIDB4MDZjNzUyN2YsIDB4NmRmMWM4NjAsIDB4ZDA1NTc4ZTEsCi0JMHgwZGQyMDBmNywgMHhlMDQ4ZDc1YSwgMHhlZmI4OTBiNywgMHg5YTMxNTFmNiwgMHg3NjA5YjRmZSwgMHhlM2NkMGNlNiwKLQkweGY0ZDc0YjRlLCAweGQzZjQ1N2E3LCAweDcyYmJiZjhjLCAweGM0ZmVlNmEwLCAweGZhZDBjMGE4LCAweDc3YjdiZjEwLAotCTB4ZjdjYmM5N2YsIDB4NDZjNmM0ZWYsIDB4M2ZiZGZlZTMsIDB4N2RmOWZkYjYsIDB4Y2VlOWZkZmMsIDB4ZmEwNzY0MTcsCi0JMHg2ZTc3MGJiNiwgMHgxNjhmMWY3YSwgMHhiNWY0MGYzZSwgMHhhMTUyN2U1MywgMHhmNjlmZGE3YywgMHg4MzlmOGNjYiwKLQkweGQ2ODdkNGUxLCAweGMwYjBjZTkxLCAweDYwYTUyMzUzLCAweGViNmRmYjdjLCAweDdiYWQ4YjQ3LCAweGFlMDU3N2U4LAotCTB4ZjNlOGRkNTUsIDB4Mjg3ZjUxNmMsIDB4MWY2ODA1NjAsIDB4NDdiZmQ3Y2YsIDB4MGIzYWJkNzksIDB4MWQ5OWU3NWYsCi0JMHgzYzViOWNmYywgMHhmMDEyZmFlNywgMHgyMGY4NmRmZCwgMHg0MDE3OGJmYSwgMHg5N2ZjODNmMSwgMHg3YWEwOWViNSwKLQkweGFlNmM5YWRiLCAweDk2MzJlYmFmLCAweGY2NGZkMWU4LCAweDY1ZjY4YjQwLCAweDc4YWRlODBjLCAweDNiNDA5YmUwLAotCTB4ZjcwZGJjMWIsIDB4NzJjNGU1YmQsIDB4NTRjMmZkZmYsIDB4OGZlZjliY2EsIDB4ZmQ5ZmY5ZTYsIDB4ZmJmNDA5YzksCi0JMHhjNjliOGJjNywgMHgwYmJhZjVkMiwgMHhkYmZmMzQzMSwgMHhiNWY2ODA3MiwgMHhhODkzNWY3OSwgMHg3ZDMxMzE0ZSwKLQkweGNmNWM0YWQ2LCAweGRmNDQwMWZmLCAweDgwMDA2ZGEwLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAotCTB4N2RjZGZmMDAsIDB4ZDU1NDc4MGIsIDB4Mzk5ZWYwYjUsIDB4NjcwOTFlNjcsIDB4OTkyMTI3MjYsIDB4ZTRjMjEwMjQsCi0JMHg0ZTAxMDI0OSwgMHhhYWYwODA0MiwgMHg5ZTE4MDkwMywgMHg2ODMxMDA0ZSwgMHgwY2ZkZTFkMCwgMHhhZjRhODgwOSwKLQkweDA0ODE5YmY0LCAweGE4NmMxODA4LCAweDNiZDE1MDE0LCAweDZhZDQ4MGE0LCAweGE2YTNlYTZmLCAweGQwMDRjN2Q2LAotCTB4YTBkMjk0MWIsIDB4ZGVmNmI3ZmUsIDB4MjJjMDFiNWIsIDB4ZGEwNDZhMjgsIDB4ZmFkMmRlOWYsIDB4M2VmNmI1YWYsCi0JMHg4MjQ5OWNjOSwgMHhiZjdiN2I3MiwgMHhkYmUzZWY5ZiwgMHhiM2VmNjc1OSwgMHhkN2JkZWIxZiwgMHg2YjRjZmI1ZSwKLQkweDdlZWYyMDc0LCAweGZmOTliMTg1LCAweDFiMjk3YjcyLCAweDk3ZGFkOGM2LCAweDFlNjA5ZTRjLCAweDg1N2JkMmMwLAotCTB4ZDM1Y2EwZWIsIDB4YmViMTk1MzAsIDB4NTM1NmIzMDgsIDB4ZDczMTYzMWMsIDB4MDQ2YzYxZWYsIDB4MmMwMThjYzEsCi0JMHg2NGVjNzI4ZCwgMHg0MzVhNTAzMSwgMHhjM2M2NGZkOSwgMHgzYjQzYWIzMywgMHhlYWFjNjZlYywgMHgzN2JkMTQ3YSwKLQkweDMwMTFkOGJkLCAweGRiYmM3ZDQzLCAweGM2NDhkOGM0LCAweGU5NTNlZDJjLCAweGNiZDdjOWZkLCAweGZjNmJmZWE4LAotCTB4ZmQ2MzFiNzcsIDB4YWY1NGU5ZGMsIDB4NDM4NDk2YzMsIDB4ZGIwNTIyZjIsIDB4YjRmZGE4OWIsIDB4YWNhODQzZWIsCi0JMHhjYTg3M2ViYywgMHgxNDdlNzI3NywgMHg4NGZhYzNlZiwgMHgxN2ZhNTM2YiwgMHg1MjZmMWMwMiwgMHg2NGFjNGE3MSwKLQkweDYyOGQ5OTljLCAweGEzM2I3ZWVjLCAweDQ3YWI1NzdmLCAweGFiYTUzMGM3LCAweDcyZDJjOGRmLCAweGU4MWU2MjVkLAotCTB4NDRkZDc2Y2YsIDB4OGY3NGMwZTUsIDB4NmM2MDRlZTYsIDB4ZDk3NmE2ZDYsIDB4ZWM1MWViOGUsIDB4ODAzNGUxZWEsCi0JMHhjYmRkZjI4YiwgMHg5M2RlYmFmMiwgMHhiYWI3Y2Q4ZSwgMHg3YmZiYzI4NywgMHhkMDNkNThjZSwgMHhlMmNhMGRiZiwKLQkweGM2NGFmYWIwLCAweGRkNzk0ZDNjLCAweDM2ZTUxYmM3LCAweGRiMTkzYWQzLCAweDZjMmNlNTRjLCAweGNiYjNlZjA3LAotCTB4ZWYzODY1ZGYsIDB4NmYzZTU1N2IsIDB4OTEyNjExYjYsIDB4YjYwNjU4Y2MsIDB4YmY3YWU4NGYsIDB4NjBjMWQwMGQsCi0JMHg2ZDk3ODE1ZSwgMHg3N2YwYzNjMSwgMHhkNGFmYmE1MSwgMHg0ZGI0ZmQwZCwgMHg2MDJmZTU2NCwgMHg2YTViNzIzZiwKLQkweDM3MWZlMzk5LCAweDM4Yjc5OWZmLCAweGZlNjI3MWZmLCAweDQ2ZDg5NmJmLCAweGI3ZDdlZmVjLCAweDgxZTZkNmRkLAotCTB4M2MzY2I1NzksIDB4ZWVlNDg0NjIsIDB4Yjc1ZWY3ZWEsIDB4NzZhYmY3OTUsIDB4Y2Y0MDYwZGMsIDB4YjhmYTM3YWEsCi0JMHg2NmZhYzI3NywgMHhkYzIwOGYwMiwgMHhkODJkYmFmMSwgMHg5OWNmNDY5OCwgMHg1YjRiMWUyOSwgMHhhYmVhMDlhMywKLQkweDVlZDkxZDljLCAweGNkZjhiZjE4LCAweDZmZjIxMGE4LCAweDMyNTE5YmNiLCAweDlmN2U3MTgzLCAweGU5MTdiYmU5LAotCTB4YTBlNmZjNTgsIDB4MjYxMzkzMTIsIDB4NDY0ZDlhZjksIDB4ZDAzNjU4M2UsIDB4ZWYzZTFmNzMsIDB4ZjFiZGJlNmQsCi0JMHhkNjljNjAwOSwgMHg1MzVmYzkxMSwgMHgxODgxNGNjYSwgMHgxZDVmNmZlMCwgMHg4Mjg1OTM5NywgMHhlZjVkMTczZiwKLQkweGM4NGZiMDQzLCAweGM0ZWFkNWNmLCAweGFiYjc0ODI5LCAweGIwZDI2MDliLCAweDRjOWI0NThlLCAweDc1ODI1ZjQzLAotCTB4Y2I0M2I3MzEsIDB4ZWNjYzNjMDIsIDB4NzMwYjYwYmYsIDB4Njk5OTVjYTIsIDB4YzQ4NzMzYmQsIDB4ZTlhMDZiMDYsCi0JMHgwNmIxZWI5YSwgMHg5ZWJjYWJmOSwgMHhiZGFmZmQ0NiwgMHhlYjllOTdkZSwgMHhjODQ4YjY3MiwgMHgxOWY5MGQ4NywKLQkweDlmODIyNWUwLCAweDE5N2U0NWVmLCAweDFiODcyNWQzLCAweGUyOGY3ZGQzLCAweDgwZDY2N2ZhLCAweGJlNzhjM2JjLAotCTB4Mjg4NWM5MmQsIDB4NjJmYzVkNDcsIDB4ODBhZjkxNTUsIDB4ODU5NjkyNWYsIDB4Y2I0ZDRkYzksIDB4ZjQyYTk4N2MsCi0JMHg3ZTI1ZWYxZiwgMHg3MTY1MDI1OSwgMHhjMTUyZmQ1OCwgMHg3Yjc4OTEwNywgMHg2NWY5MTZlYywgMHg0OGJmNjhiMywKLQkweDAxOTk2NTA5LCAweDI4ZWE5NjBmLCAweGU3Y2MwYjZkLCAweDBhN2JiYzRhLCAweDBlZmQ2NWUyLCAweDE2ZjViZjhlLAotCTB4ZTYwM2IxNmYsIDB4OTM3MWZlYmIsIDB4OGI2MTk0MDYsIDB4YThlYzM5NDcsIDB4NTg3ZDQ2ODcsIDB4ZjE4NWY1NmQsCi0JMHhjM2ViZmNlZCwgMHgzMGYwMWI5OCwgMHg5NTI2N2FlNywgMHg4M2JlMDFmZSwgMHhkNzg1ZmViOCwgMHgwZDNhMDllNywKLQkweDhiYjk5MmEzLCAweGQ4YzVjY2NjLCAweDFiYWJhNDA2LCAweGU5YzQ1NDI3LCAweGFkNzdlNjJjLCAweDQzZTI3NDdhLAotCTB4NTNiNWZlMzAsIDB4ODhiZmFhMTYsIDB4YTk4MDJkNzgsIDB4ZTM0ZjAyN2EsIDB4OWI0MTJjYmMsIDB4NzVlNjEwNzYsCi0JMHgyYTAyYzJkMSwgMHg3ZWYxNjlkMCwgMHhkZmEwMDU4OSwgMHg0NmZhNTAyNSwgMHhkODNkNTJkMCwgMHgxNDgxZjZjZSwKLQkweGIxNzZjMTZjLCAweDgwNWIxM2NjLCAweGU2ZjU4NGY4LCAweDg2YmUzMWYwLCAweDZkNGM5N2ZmLCAweGZkNDEwZmQ5LAotCTB4OTYxYjMzZTcsIDB4ODFlMDMzOTksIDB4ODY0MTJhNzQsIDB4ODJmZTdlNzUsIDB4YmU3ODI0YzQsIDB4MmU1YmRkNzIsCi0JMHg5NGFiMWU1OCwgMHg1MGFhYTYwZSwgMHhjYzE0YzFiZiwgMHg3YmUyODBiNiwgMHg4NmJkZjY0NiwgMHhiYmQzZTA3YSwKLQkweDA4YWRmZTliLCAweGYwZGM3ZGRhLCAweGFhZTkxM2EyLCAweDBlNDliNWUzLCAweDRkM2Y2MTY1LCAweGNjMDBjZjgwLAotCTB4MmE1ZWE5YmQsIDB4NmMzNDJhMGQsIDB4NWRhMWIyOWYsIDB4NzNmM2FkZmMsIDB4YmFhZjlmMjQsIDB4YmE3ODQxOWUsCi0JMHhmYTFiNmQ1YSwgMHhmMDMxZjIxMiwgMHhmNWQ3M2UyZCwgMHhhZTNhZWFmMSwgMHhiZWZkNzVkNywgMHhjZWJmZjA1NiwKLQkweGQ3MzI5NWQ3LCAweDRjNGE5NTViLCAweDZlMTY5MDMwLCAweDEzYmNjYTZmLCAweDRjNzJlZjkxLCAweGI3MGIxNjVhLAotCTB4OGU4ZjhkMzcsIDB4MzJmODM5NDUsIDB4NWQ2MWFiNWUsIDB4ODM5NzQyZjYsIDB4ODA0OWZjNTcsIDB4YTQ3YjJlYmMsCi0JMHhjN2FlODFjYiwgMHhmM2FlYmQ3NSwgMHgyNmFmNmViZCwgMHgyZjJmZTRmZCwgMHg3OWZjM2JmZSwgMHg4MWQ3Y2QzMiwKLQkweGU2NGQzMDdjLCAweGVjOWE2Yjc2LCAweDFjOWEzZTIwLCAweGZmMjMyNjVmLCAweDc5ZmQ3YjdjLCAweGIzY2ZlODU2LAotCTB4YjZiOWZkMDYsIDB4YzdmOWZkMTcsIDB4ZjM4Nzk0NWIsIDB4ZGE5NjdmNDIsIDB4M2NkZTdkZDgsIDB4M2I2N2RmYWUsCi0JMHg0YTJiZmFiYSwgMHg4MzRiNjQ5ZiwgMHgxMzM0OTQ3ZSwgMHhjZDQ3ZmJiNSwgMHhmM2UzNDk1YiwgMHhmZWYzYjZmOCwKLQkweDZmY2ViMTJmLCAweGQzMDNmYmQyLCAweGE0NmZkNGFjLCAweDFmZDA2NzllLCAweDVmMmZmOWVhLCAweDFkYTIwZGNmLAotCTB4NWQ4MTg4ZjgsIDB4NWFmN2JiNDAsIDB4NjE2MWY3MWYsIDB4NDQ0ZWM4MDcsIDB4NjY2ZjA0YzcsIDB4Yjk5MjdlMDcsCi0JMHhhN2UyMjA3OCwgMHg0ZWUwM2IwNywgMHg4MGVjM2JmYiwgMHhiY2JhNTdjZSwgMHhjYmExZjJlOCwgMHhlOGZjYTQ0MywKLQkweDExZmQzMGYyLCAweGE0MjFlNjJkLCAweDMwZTYyMDBmLCAweDc4MWM4ZmNhLCAweGU5NTFkNzBlLCAweDcyOGY5M2VlLAotCTB4ZjgxMWNiYTksIDB4ZGQ2NzI0NjEsIDB4OWI5MDgzZWMsIDB4ZGEzMTM5MmUsIDB4NzQyZTVkMGIsIDB4YTZlNWQxMzksCi0JMHg1MmM1Yzg1MiwgMHgzY2JhMTcyMSwgMHgxZTlhOTcxYywgMHgzZGVmMGIxYiwgMHg0MzJiZTY5NywgMHhiMWYyZTg3YywKLQkweGJiNDg4NWU2LCAweDMxM2YyYmQwLCAweGYxYTVhN2U0LCAweGE5ZjkwY2Q1LCAweDdlNzBjYTEyLCAweDRmYzJmNWIyLAotCTB4OWY5MTZlZjMsIDB4OWRiZWQyNGEsIDB4OGQzMmIxMWYsIDB4NDBmZjExZmIsIDB4ZDY5OTVhN2UsIDB4MGFiMTVmYjMsCi0JMHhjYTdmZWNmOSwgMHhmZDVhYjhhZiwgMHhjYzM3NDI5YiwgMHhlODIxNmFlNywgMHg3ZTJlYjRkOSwgMHhlMzJlZmU5YiwKLQkweGY4MDY0MzdlLCAweDQ2YjQ1MGQ5LCAweDVhYjY3NWYzLCAweGIwNmIwNDA3LCAweDFhYWNkN2RkLCAweDAxZmJhOGYxLAotCTB4N2RlZTkxNGIsIDB4MjdmNGY4YmIsIDB4ZmU3MWZmNjAsIDB4YzE1YmZkM2EsIDB4ZWRmNzVmZmYsIDB4ZDlkMTFkZjQsCi0JMHhmNTY2ZGYxNiwgMHhkYmJkMjFlNCwgMHgzN2JmZjYwYywgMHg1YmIxZjE3ZiwgMHg2ZmU2ZjNhNCwgMHg0MjQzZTc0OSwKLQkweGZhMGZmYzZmLCAweGQxN2E4NzhiLCAweDFlZmY4NzEzLCAweDg2MmNjZWJhLCAweGZjMjFmYjNmLCAweDNjNjdhZjdiLAotCTB4MDJmYmU3ZDAsIDB4YTJmMzljMGUsIDB4ZDIyYmNjYmMsIDB4M2MxYmRiZWIsIDB4ZTAxZmE4OTksIDB4ODIzNGIxY2YsCi0JMHgwZjA5ZDk4NywgMHg1NmRiM2UwMiwgMHhmZTljZjMwMiwgMHgwMDdkNjc1OCwgMHg4ZjhmMjdlYiwgMHg4ZjMzZWYxMSwKLQkweDNmYjU3NTg5LCAweDViNTFmNjkxLCAweGQ2MGJkYTNkLCAweGFmOGRlZGMwLCAweDBkMGVmNjVkLCAweDc2MDEwYjgzLAotCTB4MTE0NWMxODQsIDB4ZGVkZTAxZjAsIDB4OTUzM2I3MjksIDB4OTcyMDg0ZmMsIDB4NTRkZmU4MmIsIDB4ZmQxNWYzNDAsCi0JMHg5ZTY1ZmUwOSwgMHhjZjAxNTcxMywgMHhkYjEzNTRiMywgMHg4YWFhNzQwOSwgMHg1NWQ2ZjgzZiwgMHgyNmNkNmJkNCwKLQkweGUxODc3MjY2LCAweGViYzk3MDIxLCAweGY2ZmQwMTQ5LCAweDlmYzA0OTlhLCAweDM3YzA3OWI3LCAweDBlMjVmYmI4LAotCTB4YWJmMDc2N2YsIDB4ZmEyYzgwODYsIDB4OGQ2YzdmMDUsIDB4YzlhNWI3NDAsIDB4YmZhMDkxZTQsIDB4NjBhNjQ1MzUsCi0JMHg3Yzc3NWE3YSwgMHg2N2M5ZDY3ZiwgMHg1NGMwN2NmYSwgMHhkNjY3ZGYxYSwgMHgxZjdiNWJmOCwgMHhhN2VmNGRlOSwKLQkweGRiMjFmYmQzLCAweGQ3N2Y4YzJkLCAweGY2MDllNjc4LCAweGQyOWIwZmUwLCAweDI5MmM1ZGI5LCAweDNlYjFlOThjLAotCTB4ZjhlMjVkMmEsIDB4M2ViMDAxYmYsIDB4ZDM5YTNjM2UsIDB4OTFlNWY3YzQsIDB4ZjlkMzYzZWQsIDB4YjM2NjZkYjgsCi0JMHgzNzYzYTdjMCwgMHg1NTliNTlmMiwgMHgxYmIyYjdjNywgMHhiMTk5M2RmMSwgMHhiZTQxM2U0ZSwgMHg0ZTA5ZjE4MSwKLQkweGVhY2E1NDY5LCAweDRmNWNiZTY0LCAweGI2NmViZTA0LCAweDc0ZDMyZmRlLCAweDVmMGJhNjNmLCAweGQ5N2EwODgxLAotCTB4YWJlZjgyNmUsIDB4NmRkYmUwM2QsIDB4MzM3NDNmN2MsIDB4ZGJiOWZkN2EsIDB4NTc2ZjgyZmIsIDB4MzFlYzdjZTgsCi0JMHhlYzhjN2JmMCwgMHg4OThjZmUyNSwgMHhlMDAxYTkzNywgMHhhOGRlYjVjNywgMHg3NDJmZGM3YSwgMHgxOTUyNjdjOSwKLQkweDg4Y2EyZGUxLCAweDRiZjkyZWE3LCAweGM4NTEyYjJlLCAweGZkZjUxMjNmLCAweDdhZmNhMzc3LCAweGI5ZWQ5ZGNkLAotCTB4MGQ3Y2VhM2MsIDB4NWUwMGU3ZWYsIDB4ZjdjNjk1ZDEsIDB4ZGJmN2E1NDcsIDB4YmUyM2M4MWQsIDB4ZTU4MjdhYTAsCi0JMHhjYTQ3NzliMCwgMHgzYzA0NTM2MywgMHg4NTdlNDIzZSwgMHg0MGZlOTFmYywgMHhjYTc4MDA3YiwgMHg3ZjE2ZmQ0MiwKLQkweGUzMGVlYWQ2LCAweDdmMDUzYjkzLCAweGU1NjI2ZTdjLCAweDI2ZGI0ZmE4LCAweDJkYjIzZjcxLCAweGE0MGY5NzlkLAotCTB4MDJjY2I4ZjMsIDB4NzU0Yjk3YzEsIDB4YzMwZThhN2UsIDB4NDI3ZjkxODMsIDB4NWIwOTVmYjgsIDB4N2U2OWUxMzcsCi0JMHg2M2NmMmViYywgMHhiYWMwNjZjYiwgMHg3ZDc4ZTJkYSwgMHhkZGE4ZTM1NSwgMHgzODJlOTQ4MSwgMHg4ZDc1YmZiMiwKLQkweDJmMTBjYjYzLCAweDhhMDdmZDlkLCAweDk5N2RhMGNlLCAweDQwZjZmMDJmLCAweDgxMzM5OGUzLCAweDE3Njc0MTNjLAotCTB4N2ZkYTE5ZDksIDB4NTAwNDdmMDEsIDB4N2YyMjU0MWYsIDB4YzdmM2JhOTgsIDB4ZmM2ZWY0ODQsIDB4ZGY3ODg4MTksCi0JMHhmYmM5Yjk2MywgMHhmN2RmZGRjNSwgMHgyY2NmYmM0NCwgMHhiZWYyYjdmMSwgMHgwODhjZGJhMCwgMHhkMDQ2OTZiYSwKLQkweGFlMDIyNGI1LCAweDQxYTBlMWQwLCAweDc5N2FlYWZmLCAweGFkZWVmMzUxLCAweGVhYzc5ODJlLCAweDU5NjdhMGEzLAotCTB4MmQ0ZjNmMzgsIDB4YWQ1ZmI5NDMsIDB4ZWQzYmZjZWEsIDB4MTc2YmYyMGMsIDB4M2MyNzRmM2YsIDB4ZjlkMjZlY2YsCi0JMHhkNDZlYzY3NSwgMHg4N2E4NjVjMywgMHg3M2MxNzZjNywgMHgzYzExMGY1MCwgMHgxMzEzY2NiMywgMHhlZDY2YWY2ZSwKLQkweDU3NzU3YjQ2LCAweDBlZmVkZTlkLCAweGFkNzc3ZjZhLCAweGVhOTc5ZmRlLCAweGNmNDIzYTc1LCAweDQyZDc0NDY1LAotCTB4M2VjZDVlZGQsIDB4NWVhYmY1ODMsIDB4NGQxZmVmZTMsIDB4OTAyNjczOWYsIDB4Njg3OTEzNzksIDB4ODFjYmMwODgsCi0JMHhkMTEwMzgwOCwgMHhkODM3Y2Y3ZSwgMHhmNzg4ZGFiNywgMHhkN2Q0NDUzNywgMHgyM2ZiYzA0NywgMHhmYmUzM2FlMCwKLQkweDQ4OTg5NzBiLCAweDNmMDIxNzBlLCAweGU1MjIyMTIwLCAweDlhM2Y5MjMyLCAweDljZmQzYmQzLCAweDUyNmU3YjRlLAotCTB4YzgzM2JmYzgsIDB4MGUxYWY0ZDUsIDB4OTVmNzRiMWYsIDB4NzA2MTI5ZDUsIDB4MmUzMmMyZTMsIDB4ZjAxYTMwMTcsCi0JMHg3ZmYxODVhNSwgMHgxMjAzNzNhMCwgMHgxN2E1ODNmMCwgMHgxYmQ0ZDliZCwgMHhkYTQ0ZTY1ZiwgMHg3YmZmNWU3YiwKLQkweGZkMTkzM2ZjLCAweDRiZjA2NjY1LCAweGI4NDY0YjhlLCAweDBlZjMxMjQ1LCAweDkwZDk5ZDU0LCAweDc4NzUwZjg3LAotCTB4YTdlZTE5NmQsIDB4YWUzM2VmYTcsIDB4YTJiM2Y2MGIsIDB4NDk1OTRkN2UsIDB4ZDZjNDVmYjgsIDB4ZDZjMjc5OTQsCi0JMHhmMjlmYjdhOSwgMHgxYzI1YWZkNywgMHhkNWM2YzNlZiwgMHhiZWEwODc2NSwgMHhhYjI4NTI2MiwgMHg1ZTM4Y2IxYSwKLQkweGQwOTRiZDgyLCAweGY4ODk1NzVlLCAweDI1ZDc5NGNkLCAweDhhY2JkYTJmLCAweGZhZDY1MGU4LCAweDM1ODgzZjcwLAotCTB4NWIzYWUzNjUsIDB4M2U4ODk2MWUsIDB4MGZhMDFhODEsIDB4NzMyMTY5ZTAsIDB4MmVjZWQxNWIsIDB4ODMyYjFlNjYsCi0JMHg0YzRiNWNhZCwgMHhmMDIzYzZjYywgMHhhNTg3ZjFkZSwgMHgzZmE3Njg4ZCwgMHg4NWQ3ZDhkYSwgMHgxOWQxYTFmYiwKLQkweDNjNzE3ZjdjLCAweDI5NmJhMDY2LCAweGVlN2QyZGMwLCAweGIyZGI3ZDIzLCAweGM3OTUzMjdkLCAweDBlYjZjZjI0LAotCTB4ZGJmZmIxOTUsIDB4OTI5OTcwZjgsIDB4ODQzMWY1OGIsIDB4MGZlOWFiYTcsIDB4ZjkwNjZkOTUsIDB4OWJiYTUzZjgsCi0JMHg1MzhiZWFmMCwgMHg2ZmU4Y2Q1ZCwgMHg4YzMwYjRlZiwgMHg1MWE2MzM5NywgMHgyZWUxNjkxYywgMHg5YzRlZmU1YiwKLQkweDJlMjFlNmNmLCAweGZkMTczZmY0LCAweDMyNGE2Y2IwLCAweGQ1YjQ1YmI0LCAweGQ1MWZhMWEyLCAweDcxNTM1NjZlLAotCTB4OTM5ZGJlN2UsIDB4YTRiZjU4YWQsIDB4ZGI4MTk0NTYsIDB4NmZmMzdjYTksIDB4NDI3MWFhM2YsIDB4NGNhNzhlZmIsCi0JMHg5ZmI0MjM1YSwgMHhkZGU5YWQ3MCwgMHhhZjJmMDA2MSwgMHg0NDkwZDBjYiwgMHgzMzM3NWM2ZiwgMHhiNzM5YzYxNSwKLQkweDAyNTA1MDdmLCAweDU1MWYzY2JlLCAweGRlMmNmNmZkLCAweGU1ZmI2MTllLCAweDY3YTdkYzM3LCAweDQ5N2I2MjE1LAotCTB4MmZlZDAyZGQsIDB4OWZmNDczYzAsIDB4MWE5MGVjMmYsIDB4YTcyZjM4NGQsIDB4NGIwNGRhMjMsIDB4NDY1N2YwYmEsCi0JMHg1YjBiOWNmMSwgMHhjZjhjNDE2ZCwgMHhmNzdjNTM5ZCwgMHhmNjcxYzdlZSwgMHg2N2QzZDA1YiwgMHhhNzZlNGMxNywKLQkweDlmMTBmMDA5LCAweDI5MmNiM2IxLCAweDA0ZGI5ZjE5LCAweDJlYzY3NzNkLCAweDY4NWYzOTA0LCAweGIyMWZlNGVlLAotCTB4Mzk2MmNiMjcsIDB4MWRhM2ZmMWMsIDB4MWQ2MTg3NjUsIDB4NDQxZjFlMTcsIDB4MTk1ZGFiZjEsIDB4YzAwYzg0OWUsCi0JMHgxZTk5MWRmNywgMHhhM2U3OTYxNywgMHhmMzdhZGRiOCwgMHhlODdkZDI2ZiwgMHhmMmYyZmZjNywgMHg5N2YyMTcyMiwKLQkweGQzY2I4MzNiLCAweGI5MTdkNzFiLCAweDU1Zjk4NTE2LCAweDg5OTczZWNiLCAweGJhYjRkZTBmLCAweGRmN2NlMDM3LAotCTB4YzI2MDFlOGMsIDB4NDFmMDM2N2QsIDB4MmY5MzhjNWYsIDB4ZTAxNmZiMTEsIDB4ZjYyZjhkZTcsIDB4OTdmZDVmZTAsCi0JMHgxZTVhYzdmMCwgMHgzNmVmMTg0OSwgMHhkMjdlZjVmMCwgMHgwMGRmYjQ5ZiwgMHg4N2UzM2YzOCwgMHhjN2MwMDNiYiwKLQkweGIyMzZkYjFmLCAweDliOGMyOGYzLCAweDc1ZGM1MmZhLCAweGUwN2ExMzA5LCAweGVlMjBhOGI5LCAweDUzNTI1OGFiLAotCTB4YTZmYzc4NzYsIDB4ZmI0NTBlNTMsIDB4ODQxYzA1ZGYsIDB4N2I0MWRmZDcsIDB4MmVmZGY3ZGMsIDB4ZjA4ZTFmZjAsCi0JMHhmZGJkMGJmMywgMHg4MDIzYTc3MiwgMHgwZTI3YzVjZSwgMHhmOGY0OGM4NywgMHhmODVmZjY0OCwgMHhlY2I3YmMyZSwKLQkweDgxZDkwYjI5LCAweDZjMjU0ZjY1LCAweDgxNzFjMGVhLCAweDE2YWUzMDZmLCAweDg2N2YyZWI5LCAweGFiZDVkNjg1LAotCTB4NjUyM2IyNWMsIDB4ZmJlMTI5MjUsIDB4YmZhNGMzOTUsIDB4ZTljYjkzN2IsIDB4MGVjYjg3MTksIDB4OTcyZWY1ZTUsCi0JMHg5ZmFlNTVjYiwgMHhmMTY1M2NhNiwgMHgxZjJkM2NhMiwgMHg3MGQ5OTBlOSwgMHhmNTNkMjZjNiwgMHhjZmM0NjFkNiwKLQkweDA1NTE3NWYyLCAweGYyZjg5ODM2LCAweGFmNDQ2Y2E3LCAweGEwMjM4Nzc2LCAweGU5Y2ZiZDQyLCAweDljYTE2MzkwLAotCTB4ZDZmNWMxOWYsIDB4M2YyZTBjYTYsIDB4ZWQ5MzEyYzUsIDB4NjJkNjU0MDUsIDB4Y2MwYWY1YmMsIDB4OTdjMDJmYTcsCi0JMHg3N2I2M2UzNiwgMHgyOWYzOGMzNCwgMHgwZDFiY2UwYiwgMHhlMWUyYmJmOCwgMHgyNWU1N2E3YywgMHg0YzhlZTI4OSwKLQkweDQxMzNjOGY2LCAweDVjNjBhZTVmLCAweDdjOWU1NDRmLCAweGZlMTEzYWQxLCAweDVmZjU2MmFjLCAweDVjMWZiMDQ5LAotCTB4MDY3Y2JkNTEsIDB4MDY1NzBiZWUsIDB4YzVkYWU3MmQsIDB4YjE2YmZjNWUsIDB4NTViM2Q0NWMsIDB4NWJkODExZmMsCi0JMHhmZWZlYmQ2MywgMHhmYTRlZDYxYSwgMHhhMjI5YjJhMywgMHg0ZmY2ZmFiZSwgMHhkNTUzN2UzMCwgMHgzZWJlN2M2YywKLQkweGExN2YxMWMzLCAweDcyNThjMzBmLCAweDVkOGE2MDAxLCAweDMzNjRiNmE5LCAweDA1NzJlYTU4LCAweDVkZDYwY2U0LAotCTB4ZjM0NGMwN2MsIDB4MGE1MWJlNWYsIDB4YzVmZTYwZGEsIDB4ZjhkYzc5N2QsIDB4YzFmMDNmNjMsIDB4NDA3ZjVhMjAsCi0JMHgxZWY5NzgwNSwgMHgzMzk2N2Y2ZSwgMHg3ZjBlZDA1MywgMHgxZDYwN2VkZSwgMHgwYTJmMzFjNSwgMHhjNGQwYjM3ZCwKLQkweGU3ZTdjOGJjLCAweGRjNTRiNGEzLCAweDJhN2IyZmVmLCAweGZjYmNmMDhhLCAweGY2ZmY5NWU5LCAweGJlZDdiYzM4LAotCTB4Zjg3YzY2NzksIDB4ZjkwZWJhZmUsIDB4ZDk5OWUzODMsIDB4ZjlmYWJhZTMsIDB4NTJmN2YzNjQsIDB4ZmY4YTBlNTEsCi0JMHhiMGM5ZjYxOSwgMHhlY2IxZTVkZSwgMHg5MGQzZjNhNywgMHg2ZWE5Yzk2ZSwgMHhmMmRkYWJhNSwgMHhmMzY3MGYyZCwKLQkweDg2Y2ZiMDc2LCAweDIxZGMyZjc1LCAweGNiZDgzYWQxLCAweDIwODdiMjM2LCAweDNlMzg2YWYzLCAweGI0OWVkNDk3LAotCTB4NjMzZGI5NWEsIDB4ZDlmODRiYWEsIDB4ZjVlN2Q0NmUsIDB4N2ZiYzEyNmQsIDB4ODUyNWVhMGUsIDB4MGY2ODE3ZjAsCi0JMHg4N2RmOTc4YiwgMHgzZTkzMjU3ZCwgMHgyYWZhZTFmMSwgMHg2NmZiYTZjYywgMHg1NjFkM2Y1MywgMHgzMzE3ZWY5NCwKLQkweGQ5ZjQ1Yzc4LCAweDJlZTdlZTBjLCAweGE1ZWVkNTRjLCAweDM2YTNmNDM4LCAweGVmMWE0YjZkLCAweGU2MjUxYTQ3LAotCTB4NGFiY2ZiMDEsIDB4M2EzMmRiNzMsIDB4OGRiOWZjYzcsIDB4YjU1NTJiZTIsIDB4MjcyODllNTEsIDB4MmYzYzRiZWQsCi0JMHgzMjU1YmY0MCwgMHhkODcxYWQ5MywgMHgxYWU3NWYyZiwgMHhmMDFmZDczNywgMHhjZjE5NDNmYywgMHgzZjVjMWM2NywKLQkweGJlMDJjNjU2LCAweDY2MzhjZTE1LCAweGZjNGJmZmU4LCAweDk3Zjc4MzJiLCAweGZkZWJhYzNjLCAweDVkNGRmMWNlLAotCTB4MTBjM2I5ZjUsIDB4OTVlNzdkNWYsIDB4OTc5ZTNjZTMsIDB4MTkwMTdlNDgsIDB4OWZhMTE2OGYsIDB4MDIzNGJjZjcsCi0JMHg3NzBiZDdmNywgMHhmYTgyOWYxYywgMHhmMmNmZjU3NiwgMHhlMTc1N2M1NSwgMHg3YjI3ZGY0ZiwgMHhiOWQwNWFiMSwKLQkweGI0N2RmZDFkLCAweDBjZmYwMDFmLCAweDdlNDI1M2NhLCAweDBmOGYxMjdjLCAweGQwZjgxMjlkLCAweDU3ZDdhZGU5LAotCTB4MzhmMGIwZWUsIDB4NTQ3NWU4M2QsIDB4N2Y5Yjk1MjQsIDB4M2E1NmZkNDMsIDB4NmZhODVjZGEsIDB4OGNiNjVmMmIsCi0JMHg2YmZjYmQ0MiwgMHg1ZmI0M2Y5YywgMHhmOGMwNzliNCwgMHgxNjdmODEwZiwgMHhiNDU0NjI1OSwgMHgzMzAyNmI0ZiwKLQkweDY5YWYwOGFkLCAweGY1ZGMxMTMwLCAweGYyMmE0MjVlLCAweGFmYjU2N2UzLCAweGNlNGY5MTM4LCAweGQwYjI4NTQ3LAotCTB4OGJhYzc1MGUsIDB4MDE3MTFhZDIsIDB4N2RjZjhmMmEsIDB4ODhkNTliNTYsIDB4NmEyNTljNzEsIDB4ZjUwNGMzOWIsCi0JMHhjNDY0MzY0YiwgMHg0OGZlYmVhMSwgMHhmZWIxNTkwZCwgMHgzMzM0YTZhMywgMHgxZDU1MWVjMiwgMHgxZTQ3YjA4ZiwKLQkweGEwNjdmMDRlLCAweGZmMDQ5YWJhLCAweDZiNTliZWEwLCAweGYzNWNmNGUyLCAweDNhNmI3MWRjLCAweGFjNTU3NzhjLAotCTB4ZGZlN2YzZjcsIDB4NGY3OGM2Y2YsIDB4MzY1YjZhNjUsIDB4NzdhMDExZGEsIDB4ZjNjNDdmNzYsIDB4YzNiMjI2YjMsCi0JMHgzYzkzOWY2YiwgMHhlOGJhYzM1MSwgMHgwZGU5MTZiZCwgMHhkMDRhYjVmMiwgMHhhZjRiZWQ3OSwgMHhiZjdjODQzYywKLQkweGQwNWRlOTE2LCAweDZmODA1ZjlkLCAweDE3ZjNkMDRmLCAweGZjNjE0ZTBlLCAweDE3YzgxM2ZkLCAweGI4MDJkZGJhLAotCTB4Mzc3MTgyZDYsIDB4MDlhZjg3MmIsIDB4MjVlNzgwM2UsIDB4OGYyMDc5ZmMsIDB4MTFlODI2ZjQsIDB4ZjkyMzM3ZjQsCi0JMHhjNmZhMzdiZCwgMHhiN2ZiNzI2NiwgMHhmNDhkYjM2OCwgMHhlNzI2NmM2YiwgMHgyZjFkZjZmYiwgMHg5ZjdlOTEzYiwKLQkweDZkZmM3ZjNmLCAweDdjYTk0ZjNjLCAweGJiYjJhYzAxLCAweGY4MTdiZTA3LCAweDNiZjVjMmE4LCAweDRmZTRmZTY5LAotCTB4OWQ3YWUxNTQsIDB4ZTRlZmViNWQsIDB4NTU2ZjIxNzMsIDB4NWY0ZmFmOGMsIDB4ZDYyYzk1NmYsIDB4Zjc4YmQ3YWYsCi0JMHhiYzg1MzJlMywgMHg5N2FmODEzMCwgMHgxMmY5NzEwNiwgMHg4YWYyODRmMiwgMHgzZWJlOTk3ZSwgMHg1ZjdmMWM1ZiwKLQkweDRjYTJjZmU3LCAweDYyNjk5ZmNlLCAweDcyNmQ0YzlkLCAweGJlOTA3ZTIyLCAweDdmODA2N2E4LCAweDQyNTFkNjNjLAotCTB4Y2Y5MzQwNmYsIDB4MGZmMzA2N2YsIDB4ZmYzZTk3YTMsIDB4ZDAwZjMxNTIsIDB4YjhkODllNmIsIDB4OWJiNjNhMmUsCi0JMHhjZTllOGFkOSwgMHgzOTMzZjMyZiwgMHg5YWRkOWNkZiwgMHhmODBjZGE5OCwgMHg1OWY2MGNmYiwgMHhmYzAwNjc5NCwKLQkweGE3OGQ4NzJhLCAweDVlM2U4ZGYzLCAweGE2Y2E0ZmYxLCAweGZmYTFiYWUxLCAweDhmYWZmNjEwLCAweDhmYTA1MWZiLAotCTB4YzQ3Y2ZkOGMsIDB4ZjNlODdjYjgsIDB4YjhiMmU1ZDcsIDB4N2NiNGMxNjYsIDB4ZGNmYmI2MjcsIDB4ZWI4NzkxOTEsCi0JMHg2Njk3ZTNlNiwgMHgwN2JlZjRhYSwgMHhkZjc4MDNmZCwgMHgzOGEyNmNkMywgMHhhZmIxNTlmNSwgMHgxNWY1YmIzZiwKLQkweDJlYmNhMmU3LCAweGRlMjI5ZjdlLCAweGFiYjI3ZmMzLCAweGZlNzUzY2ZiLCAweDlhNjdlMzBiLCAweGJiZjZmMTY3LAotCTB4Y2ZhYzIxYTYsIDB4NzUyZjkyMzcsIDB4YzlmY2U5YmMsIDB4ZGY5MDI1MzYsIDB4NTVhN2M5MTIsIDB4MzhhZDY3MjksCi0JMHhkZDczZTQ1ZSwgMHg3MThmMzk3ZiwgMHg1ZmZmOTQxNiwgMHhmZjI0ODI5OCwgMHg2NjQ0ZWNiNSwgMHg3Zjg2NWQ5OCwKLQkweDY1ZDUxYjBhLCAweGIzYWYzNjFmLCAweDUxY2I3YjUxLCAweGJkNzUwNzZlLCAweGFhZWJkYmFmLCAweGM0MjVjZjc4LAotCTB4NzkzMjhmZjcsIDB4ZjU2YWM5MWUsIDB4ZjQyNzM2YzQsIDB4MzZlM2U2MzMsIDB4ZmRkNjBmM2EsIDB4NDJkNzA5YzUsCi0JMHg5NWM2MGM1MiwgMHgwODJiNGE1ZSwgMHgyZTZiNzdiNywgMHhhZGZlMjA5ZiwgMHg3MGRiNmQ2NCwgMHhjNzcwYjNmZiwKLQkweDIzNDczM2ZiLCAweDQyZDhmZTlmLCAweGI3MGIyZmU3LCAweDFmYTJiNjRlLCAweGUyZjBmMmJlLCAweDczZmY0ODUxLAotCTB4NWQ5ZWRjNzUsIDB4MDQ3OTFkYWEsIDB4NzU3M2U4ZmQsIDB4ZTcxNmI5OGYsIDB4NTNjNTdiZTEsIDB4ODVmM2MyYzYsCi0JMHhiZTg5ZjNiYiwgMHg2NmRhYTNlNywgMHg4MGYxZGMyMiwgMHhiZGUxMWFjNCwgMHg2ZTQ3ODc3MSwgMHg3MWUwMWJiYSwKLQkweGI4YjE4MThlLCAweDQ5MGU4ZmNlLCAweGY4YzM2MzI1LCAweDM3NTMwOTYxLCAweDliN2U4ZGRkLCAweDdjYTJhMzFjLAotCTB4NWFmNDI0N2MsIDB4NmJkMzg1OGQsIDB4ZGFmZmUwOTcsIDB4NzljYjkyY2UsIDB4MzY0ZDRkNzEsIDB4MWM3Nzk3OWUsCi0JMHhmODBhN2QwNCwgMHg5YmJhYjBhOSwgMHhlYmVlMzg0MiwgMHhhODBmYjQ4OSwgMHg1MjRiNmQ4MiwgMHg5MzViOWQxYywKLQkweGNhYzJiNGRmLCAweGY0MDVjOWVjLCAweGNmMGM5ZWRjLCAweDFlZGE1YTRmLCAweDdjOWNmNWMwLCAweDE5YmY5MWMwLAotCTB4MThkZDJiNzEsIDB4YmJmYjg4YjUsIDB4ZTdlMDM3MjQsIDB4YmUzYWY4ZDIsIDB4MGJkNDc5ZjQsIDB4NGZlYzhiM2UsCi0JMHhmZDE1YmY3ZiwgMHg2MjdmZDQ3YywgMHg3ZjZhOTdmZSwgMHhkNmVkMGYzYywgMHg3MTU5YTNhNSwgMHg1ZTRmZmViOCwKLQkweDNmNDNhYThmLCAweGQ3MGIxM2U3LCAweGUwZmY3YTY3LCAweGVlMWM3ZDdmLCAweDY1YmY4MTI3LCAweDMyYmZjMTgwLAotCTB4MWY2N2MwYzAsIDB4MmRiNWZkMWIsIDB4MzNhN2FmMzQsIDB4Y2U5NWZlOGQsIDB4YjJlYjE1YWYsIDB4MDRmM2MyNjIsCi0JMHg5OWUzZjliYSwgMHg3NDQ3OTZiNywgMHgwMjg4MGZkOSwgMHgzMThjNWQxNiwgMHhmNmVmOGMwYywgMHg2ZDhiZWJmOSwKLQkweGQ4Mzc4ZmU4LCAweGYzYWMxYjU0LCAweDNjNzdlNDYzLCAweGUyNTk3YTZmLCAweGU3M2IwMGZiLCAweDFlNWY4ZmZmLAotCTB4ZGVmZGM0MTEsIDB4ZjBlNGZmYjIsIDB4MTA1MzI2YjIsIDB4ZWM0ZWE1NTMsIDB4ZmI2MTJlZGUsIDB4MjVmZmUwYTUsCi0JMHhkYmZjYzI5YSwgMHgwMWU3YmIzZCwgMHg5YTJiYjNkYiwgMHhiNDMyNWI2ZiwgMHhlNzk0NzJiZiwgMHgxMmI1NDAzZiwKLQkweDlkYmVkN2UxLCAweGY3ZGZmZWVjLCAweGMxNzhmNTY3LCAweDZiYmM3NGFmLCAweGViYmM0MzRjLCAweDM5ZjdkNmY4LAotCTB4MTQ1ZjAyNmYsIDB4ZWZlMTc0MTUsIDB4ZjIwYWZmMGIsIDB4N2RmYjJmNjcsIDB4M2E2OTdlNTQsIDB4ZTQzOGU4ZmIsCi0JMHg4NjhjNDc2NywgMHhlNmNiZjM3MiwgMHg0OGZlYTRjNywgMHg2ZmYyOTdmNywgMHhhYzc1N2VlMCwgMHhmY2EyYTMxMiwKLQkweDQ4ZGZlMTdlLCAweGZkOTc4Yzg3LCAweDc0ZWE1NGQ1LCAweDEzNjVlM2Q3LCAweGY3YTE2YTVlLCAweGYxMWU2OGJlLAotCTB4ZWY3ODM4ZGEsIDB4ZWI4NjI1MGQsIDB4ZjdjZjBmNmYsIDB4NjQ2ZmE0ODgsIDB4ZWJmZGM3ZGUsIDB4NzNlMjI3NDYsCi0JMHg3ZTlmNWQ3ZCwgMHg5ZjU5ZDM5NywgMHgxNzQ3YTdmNywgMHgyZDVkNzEzYiwgMHg2ZDdkZjY0ZiwgMHg0ZmI3ZDIwYywKLQkweGRhZmU4YThjLCAweDcxZjc5MTcyLCAweDEzZDczZjYxLCAweDQ3MzFlZDE3LCAweDJmOWQwMDY2LCAweDYyZTM5ODFlLAotCTB4YjY5NzM3YTAsIDB4Y2Y4NzlkY2MsIDB4NTI2ZWJkOTcsIDB4NWVkNzVmZDEsIDB4ZmVlMjczMmYsIDB4YmI3MjBmZWEsCi0JMHhkZTEyYzU1MywgMHhlNDdjZTEwYiwgMHg2OTdhODRhMCwgMHg4MzliMjk2YywgMHg2NDg2YzdlZCwgMHhjNjdlODZlNiwKLQkweDMyZmNlMGNjLCAweGM0MWNiMmU2LCAweGUwY2Y5ZjgzLCAweDZlMzNjNTM5LCAweDAzM2M1MzQ0LCAweGJjYzVmNWZlLAotCTB4ZTBiZmE1OGUsIDB4ZWYxZDEwNzEsIDB4OWM2YzdlZmEsIDB4MTAzMGY3NTgsIDB4ZjE3N2UyNDMsIDB4M2Y4OGI4YmMsCi0JMHg4YmMwZTRmZiwgMHg0YmJmYjBiMywgMHhjZTJhMmM4NywgMHgxNjQzOGJmYiwgMHhlYzE1N2ZlYSwgMHhkZTMwY2NhMywKLQkweDVmN2NhM2M1LCAweDFhNTQ3MDgyLCAweDdmZGYzM2NhLCAweGZiZTI2YWFjLCAweDE2NzVjYThmLCAweDNiYTYzNThmLAotCTB4YjU4NzE2NWYsIDB4M2MxZWZkYzMsIDB4MmJiOGUzNzMsIDB4ZmNlYTFmMDUsIDB4ZDdjM2NhYmEsIDB4MWNlYzBhYjcsCi0JMHhmODliZjdhZSwgMHg2ZDM1OTYzNywgMHhjNmY1YmM0MywgMHg3Zjk2ZGZjNywgMHhmYThjYjMzMywgMHg3YjZmOTNhMiwKLQkweDU3ODExN2UzLCAweDViZTQ3Zjk0LCAweGVkNTYyZjlkLCAweDcxZWNlN2U3LCAweDkxMTNmOTRkLCAweGQxM2U3NGZmLAotCTB4MTI2MDRiZjUsIDB4NWE3YjQxY2IsIDB4OTgzOTY1NjMsIDB4NDczMDEzOTcsIDB4Y2ExN2E4NmIsIDB4ZWQwNWI3MTQsCi0JMHhmNmY4OWNjMCwgMHgyM2NmNDQxMiwgMHg0YWJmNWM1OSwgMHgxOThmNjZjNSwgMHg4ZDhkNTFlZCwgMHg3OGI3NDdmNCwKLQkweGM3ZDcxNjc3LCAweDI4M2U2NDIxLCAweDc5NTJjY2VmLCAweGE2YWIyNWJlLCAweDgyNWU4NTdkLCAweGVkMDAzMmUzLAotCTB4Yjg5ZjU5NzYsIDB4NDlhMWJhM2YsIDB4ZDljNmUxZTksIDB4ZDk3NWYwMzIsIDB4MzIwN2I4YjgsIDB4ODdiY2M2MzQsCi0JMHg0NDc4NzI4ZiwgMHhkNDBiNDhkYywgMHhiMzMzZDJjYiwgMHhjY2FlMDA0YiwgMHgwYWM5NGNmMiwgMHhlMWQyZjdlYiwKLQkweDFlYjgwMWM0LCAweDlmMTUzZTc4LCAweDM3ZGUyOGZmLCAweGVhMjQ2YjIzLCAweGY5ZjQ4NTdmLCAweDYxOGVhNjk3LAotCTB4ZGFiYWQzMWIsIDB4ZjFkZDc5OWYsIDB4NWRkZDJmZDEsIDB4YTU4NWJiNzAsIDB4ZWIwODc5NmEsIDB4OWVlNWU1ZjMsCi0JMHhlYzFjY2YyYywgMHgyMmY5ZjIyNywgMHhkZTUyYjZjNiwgMHgzZjVmZTA1YywgMHhmZTA0ZmY0NCwgMHg4ZjQwZWQ3OSwKLQkweDJkNWYwNDNiLCAweGE0MjEyYmIyLCAweDVjYjNhYjMzLCAweGMwMzdmNGVlLCAweDhjNWE2MDE1LCAweDI1OWI3NDhjLAotCTB4MzkwZWU0ZjgsIDB4ZTdlZjgyZDQsIDB4ODJmNTVhYjIsIDB4MDNhMjVjOWQsIDB4NWRlZGY3NWYsIDB4ZDgwNjAzYWYsCi0JMHhlMDNmYmQwNSwgMHhiMDJkMmY4NywgMHgxMzZiZTAzZSwgMHgxMDQ2ZGZiMCwgMHhiMTIwMTMxZCwgMHhlOTk4ZjQwMiwKLQkweDMzZmQ3ZmI1LCAweDYwMTM1YmY2LCAweGU3ODQ1MWVkLCAweDEwYzJmNTBhLCAweGNjZmFjZTBjLCAweGQ5NTk0MzVmLAotCTB4ZTMwYzM5YzcsIDB4MWM1NzllMWQsIDB4YjhlODA1MjEsIDB4YzQzZWY5ZmUsIDB4MWY4NTJiZmYsIDB4YzQ0NTdjYzMsCi0JMHhiZTU0MWJjZiwgMHg0YjFiZTYxZSwgMHhlMDgwZjZmYywgMHhhY2ZjNGZiNywgMHhmMDQ0MTMzYSwgMHgwYmVjNzY3MywKLQkweDcwZjFlNjE5LCAweGM0NjFlZjk0LCAweGE5ZjMxYWZiLCAweDk0NmVmNWQ0LCAweGZhMjcxYWQ3LCAweDU0ZmY5ZjE5LAotCTB4YWMzNTUwZDIsIDB4M2IyNGZlMTEsIDB4NWVlNDIwOTQsIDB4ZjUwNmRkMGEsIDB4OGRiOTY5YWQsIDB4MGFiNjZmNjgsCi0JMHhjNjljYjk3ZSwgMHhkODFjM2Y2OCwgMHgzZmJjYTM2YywgMHhlYTc4ZTM3NiwgMHhhNjk3MDBjMywgMHgzZWUxYWVkZiwKLQkweGI2Y2ZmMmYzLCAweDNhMDUyZTY3LCAweDM4YmQ0MGQ5LCAweGExNTM5ZDYxLCAweGI3NTgyMmNmLCAweGNlODk2MDA1LAotCTB4NGY0NDgzODEsIDB4ZTEzODBmYTgsIDB4YzdiNGI2ZjksIDB4MzE5ZjM5NTIsIDB4NGViNWNhMmYsIDB4ZGRlZjFkMWYsCi0JMHhhMzQzMDFlOCwgMHgzM2I2NjlkZiwgMHg3MzJiZWUwYiwgMHhlNTE1MDFkOSwgMHgyN2NiYTc0ZiwgMHhlMDFiYzA3NiwKLQkweGZlNmUzMjdiLCAweDdmYWMxZjQxLCAweGViN2ZmYjk5LCAweGE2MTNhYzRkLCAweGZiMzc0ZWI4LCAweDlmZjkxNmY3LAotCTB4ODMwMTZlMjAsIDB4ZjhiMDM5N2UsIDB4YTJjM2Q5ZGIsIDB4ZTIxYzU2ODMsIDB4ODFlMmVkOTYsIDB4Y2FmNTFlZTIsCi0JMHgyNTdhZThiZiwgMHgxZjkzZTU5ZiwgMHhmMTg0NGI4MiwgMHg5MzM2OGI5NiwgMHg4Y2I3MGFhNSwgMHg2YmIwNDllYiwKLQkweDlmZWIxN2M4LCAweGMzYmIyMGNhLCAweDg1OTBmYzY2LCAweGZhMDc2M2I3LCAweDRiNmNiZjEyLCAweDJiMGU4ODkzLAotCTB4ZDc5NDRkOWIsIDB4M2ZiOWIzMzgsIDB4OGNkNTQzNzMsIDB4M2E1NGJlZTYsIDB4ZjNkMzI3YWYsIDB4MmRkZTQ3NGIsCi0JMHhkMzg3N2FlNCwgMHg4OTMzZTY2OSwgMHhlODhmMjg5MywgMHhlYTU0NDE5OSwgMHhmODJmNThmMywgMHgxNWYzYzc0ZSwKLQkweDFjYjNjNzJmLCAweDFlMzdkZGM4LCAweDJkNWExM2NmLCAweDNmMjZlODJjLCAweDM1Y2ZkNzg0LCAweGI0YWZkZTExLAotCTB4N2Y5MTk3OWUsIDB4YjEzMDRlZTYsIDB4ZDE0YjAwYmUsIDB4NDk2ZGNmOWMsIDB4MDFlZWU2NjYsIDB4OWY0MTM2YmYsCi0JMHg3MzM0NzcyOCwgMHg2YTBiZWQ4NywgMHhmODhkOWNhMiwgMHhkYTc4MGIxZSwgMHg5NzcwMWY3MCwgMHgyNzI3ZDc2OCwKLQkweGE3NGVkMGNlLCAweDhlODEzY2U3LCAweDMzMTU5NGJiLCAweDlkZGIxZDcwLCAweGJmOTE1YTUzLCAweGMzM2Y1YTFjLAotCTB4YjE0OTM2YjgsIDB4YWJjYzFmMjAsIDB4ZWU2M2QyMzAsIDB4MTk2YzIzNWMsIDB4NWJlOTE1ZmYsIDB4NzNlMzc4Y2IsCi0JMHg1ZjA4Yzc5YiwgMHhjYjk4ZTlkNCwgMHgxOGU5YzM3MiwgMHhmYTBmM2Y4NiwgMHgzNjNjNTdlMSwgMHhkZWU2M2Y4ZSwKLQkweDc5ZTAxZTM3LCAweDdjYzNmODYxLCAweDMyMjkyYjk2LCAweDE0N2I2ZmUxLCAweGFkZTAxN2M3LCAweGE2M2NmOTExLAotCTB4NThiNzg4YzgsIDB4N2Q0ZjExOGYsIDB4NDhmODhkNGIsIDB4OWJkNzFhZjAsIDB4YTg2ZTllNTgsIDB4MzYwZGY2NGYsCi0JMHg1MTVmZjdkNCwgMHg1NDA3ODA2MCwgMHgxZmI0MzU4ZiwgMHgwMTkyNzFiOCwgMHgzMzRjMGI0ZSwgMHg5YmE4Y2ZiNCwKLQkweDFhYjM4MDZkLCAweDFmYjQzNmVlLCAweGExOTE3ZmI0LCAweGNhYjgzNzNlLCAweGU4ZTQzZjUwLCAweGI0M2MwMzdhLAotCTB4ZWQwYzlmZTksIDB4MzE2ZjM3ODcsIDB4NzY4N2U3ZDQsIDB4YjQ0N2VhMWEsIDB4OGYwMGMwZmUsIDB4ZDBjMjdiNmMsCi0JMHg4ZDg3ZjQ3ZSwgMHhlZDMxZmE4NiwgMHhjN2VhMWFjZiwgMHgwMGMxN2M1ZCwgMHhkNTc4ZTg0ZiwgMHhlYmI2ZmVkMCwKLQkweDQ0ZjAwY2M3LCAweDdkYTFhZWY2LCAweDAzN2RmZGIxLCAweDBmZmQ1OTNjLCAweDkzZGJmYjQzLCAweGE3ZWExYmNlLAotCTB4ZDQzMzNmYmEsIDB4NmFiOWNmNGYsIDB4N2Y2YTY3ODAsIDB4YjZhZmI0MzEsIDB4YTM2NTQ2ZmEsIDB4MjY1ZDJhZmYsCi0JMHhjMDU5YWFiOSwgMHhlYjRhZWFlNSwgMHg3MWNhM2IxYywgMHhkZmYwMzY1MSwgMHg3ZmM5ZDYxMCwgMHhkMjllZDBlMywKLQkweDYyYTU4NTdlLCAweDM0YjI2NGZjLCAweGQ5ZjI0NDNlLCAweGRmNzBkMjZjLCAweGU0YWY2OTExLCAweDhjMWViY2NmLAotCTB4NGM1N2IxYWIsIDB4MDYyMzRmNzQsIDB4MzYxYzhlY2MsIDB4MGVjN2FjN2UsIDB4YjgyZWM0MWIsIDB4ODA2YWE5NmYsCi0JMHg4NjQ5YmMxMywgMHg2ZWU1ODlmNiwgMHgyZmIyN2Q0MywgMHg3ZmRmNTBjNywgMHgwNzgwNjY4NSwgMHhkYTE5MTc1NCwKLQkweDMxZThkYzBmLCAweDUyODE2OWMwLCAweDNhOGNmYjQzLCAweDZhY2UwMWFmLCAweDFmYjQzNzI4LCAweGE4NjdkZmI0LAotCTB4MzBhZTBkY2YsIDB4NWEzOTBmZDQsIDB4MzY4NzgwNmQsIDB4MWZiNDM0NmQsIDB4ZDQzMDFjZGUsIDB4MGNlYTg3ZTcsCi0JMHgxYjVhMjNmNSwgMHhiNmM4ZjAwYywgMHhhM2Y2ODZmZCwgMHhlYTFhMGMzZiwgMHgzNTFmYjRjNywgMHhkOGJiOGZkNCwKLQkweDc0Mjc4MDY0LCAweGRmZGExYjM0LCAweDgwNjQzZDc2LCAweDg2OTNiMjI3LCAweDMzZjZjNWY2LCAweGZhYjI3ODA2LAotCTB4ZGJmYjQzNWIsIDB4ZWExYWNlOTMsIDB4MTkyZmJhYTcsIDB4NjRmZjc1ZWEsIDB4YzY1N2NlN2EsIDB4OTk1ZmMyZTcsCi0JMHhmMGQ5ZmRhOSwgMHg4NzkyNjA3ZSwgMHg1ZTA0N2YyMSwgMHg2ZTM1NjkzMCwgMHhhNzY2ZjZjNiwgMHhkZTgxN2YxMywKLQkweGQwOTI4ZjZlLCAweDNlNTJmMWJmLCAweGY0MjYxYzUyLCAweDA0YzY1ZjAxLCAweGU4NTdjNDRjLCAweDVjNTA1N2VhLAotCTB4YWZlMjllMjgsIDB4OThkYzVhNjQsIDB4MWY3NjAzNzcsIDB4YjRlNjdmZTMsIDB4ZmI3N2Y0MzQsIDB4Mjk1ZGY5NzQsCi0JMHhmNmY4OGY1ZiwgMHg2Y2QxZDc3ZSwgMHhkYjZiZjY0NiwgMHhhN2JjYTk0NCwgMHhkOWEzYzMzYywgMHhlYmYyMGUzYywKLQkweGQ5NTNkZjZjLCAweGY4YmZiODA5LCAweGJiZjQxNGQ5LCAweDM2YzBiMjU3LCAweDI5NjRlNzljLCAweGRlMWRhNjJmLAotCTB4OGM2NTFkM2IsIDB4NTRlNWU4NjMsIDB4NmMyZGUwM2IsIDB4MWFhMzI3M2UsIDB4YjI2ZTBhNTIsIDB4YmY2YTlmZGYsCi0JMHhmYjNiZWQ0YywgMHgxMzBkZjExNSwgMHg1ODdkN2ZhYywgMHhiZWMyOGZmZiwgMHhhZGJmMDY0MCwgMHgwNTcyMGZjMSwKLQkweGZjMGZlY2JlLCAweGZjN2JjMTJhLCAweGY1ZWYwNDQ5LCAweGVmZGNhOWJiLCAweDA5ZjJhMWNmLCAweDA3ZjU0NmJmLAotCTB4M2YwNDQ1ZmMsIDB4MWMxMGY3ZWQsIDB4ZDk1Mjk3ZjQsIDB4ZjNkMmY3ZTgsIDB4ODI3MmZlNDMsIDB4MTk3ZWMwOGYsCi0JMHg3ZmIwYTNjYiwgMHhkODU5ZjJjNiwgMHg3M2ZkNjMwNywgMHhmODQ2MmZiMCwgMHg5NTAwZmVhNywgMHg3YTNhZmU0ZCwKLQkweDgxYmY4MmZlLCAweGZiZmM5N2UwLCAweDNmYjlmZTA5LCAweGZmYjM2NTQ4LCAweGZhYWY5NTI4LCAweDM1ZmVhODliLAotCTB4NmZjMTMzN2YsIDB4ODcwNDQzZjgsIDB4MWYwNGFkZmMsIDB4N2MxMWI3ZjMsIDB4YzEyMWZmYzIsIDB4YTlkYmZiNmYsCi0JMHhhNDVmZjU2YywgMHgwNzdmMWRmMiwgMHg1ZmYyOWZkNSwgMHg5ZThiYjgyNywgMHgxMjM4N2Y0NiwgMHhmODhhOWY5ZiwKLQkweGUzN2UxMzJiLCAweDJjM2ZjMTcyLCAweGNiOGJmYjllLCAweGU1YjAyYjM4LCAweDkzMmQ2ZjgyLCAweDc4YzEwZGMwLAotCTB4NDZlY2JmNjAsIDB4ODkxZDdiY2MsIDB4N2M0Mzk1N2MsIDB4ZmM1NmVhNzUsIDB4OThmZGM4ZjksIDB4ZjE5ZjAyNWUsCi0JMHgxMzNhZjRmZCwgMHg3NmU4ZDc4ZiwgMHhlODE3ZTQ1ZSwgMHgwM2M1NTI3ZSwgMHgwMGJiMWY3YywgMHgyNzNjNWZmYywKLQkweGVlMjhjZmY4LCAweGI2YTk1ZWFmLCAweDU3M2ZhMGU0LCAweGYwZDY4YTYxLCAweGY1NGFlNTFjLCAweDYxMGZjODFmLAotCTB4MjIwZGRlNzgsIDB4YjY2YmRmNzIsIDB4ZjZjMzNiODMsIDB4YmVmMDE1NzEsIDB4NGVhZmRlMTksIDB4NTRmOWEzNGQsCi0JMHg5ZDBiNTZiMCwgMHgyM2NjY2FhMywgMHgzM2RkNWM4MSwgMHhmODlkNzdjMCwgMHg0MDM5ODA3YSwgMHg5ODI1NmFmYiwKLQkweGZmMzhmYjhkLCAweGYwNWZkZjAwLCAweGE1ZWE5NWY5LCAweDU0N2UxMzZmLCAweDY3MGZjZThkLCAweDc3MDk0MmRhLAotCTB4YTRlNGZjNjEsIDB4ZGViZmYxNDQsIDB4ZjIyNTUxZjAsIDB4N2ZhZDdiYzgsIDB4ZmEwYTUyZTMsIDB4OTM3ZmE1ZTUsCi0JMHhkMzlmNDg3YywgMHhjNjM5NDcxNiwgMHhmODgzOWMxMywgMHhjODM5ZDRiZSwgMHg1MjYzMjg2YywgMHgzMDQxOGU3ZCwKLQkweGFhMzkzZjlmLCAweDBhMDMzNWVmLCAweDc1OWRmNGZmLCAweGViNGZlZTQ3LCAweDgxZGY0N2RhLCAweDliZjA1MTViLAotCTB4NDJkYjk4Y2IsIDB4ZjNjYzhkNzksIDB4Yjg1ZDVlMTYsIDB4YmUwOGY5OTMsIDB4ZmNhODA1OGIsIDB4MzVjZjhhNWUsCi0JMHgwZmU2MjQ2OCwgMHg4ZGY2MDkwNSwgMHhiNGY2YTViNSwgMHhhNTc5YzhhZSwgMHgyMDdhZTIwZCwgMHg1MGQ5OTA2ZCwKLQkweGI5ZjU0ODRlLCAweDM5M2ZiZmIxLCAweGQzYWYzNDNjLCAweGM2Y2Y2ZTYzLCAweGZhZjNlOTc1LCAweGRmOWJhYTVlLAotCTB4NGYxZDYwOWYsIDB4ZjRmZWZjZTMsIDB4NGMxNzU3ZmEsIDB4ZTNmOWRkMTksIDB4MGExN2MwMWYsIDB4Yzc2ODZmOWEsCi0JMHgwNmE0MWNmMCwgMHhhZmRmMDc2NCwgMHhmMjg5YWVmOSwgMHhhOGJlNzViOSwgMHhiZTIxODBjMCwgMHg3OTQ0YzliNywKLQkweDAyN2M1ZGZlLCAweGIwZmI4MWZjLCAweGY3YmEwZWY4LCAweDAxMzI3YzA3LCAweDhjNmFiOWQ3LCAweDVmODJiMDE0LAotCTB4Y2MxY2RhNzksIDB4ZjJiOWQxMzYsIDB4MTVjNjJiNTIsIDB4N2YwM2M3OTYsIDB4MDdjZWY3YTQsIDB4MDNmZGM1NmIsCi0JMHhkN2YwMzlmZCwgMHgyZmNmNDhlZCwgMHgwNzNhMzE3ZSwgMHhjNmY1NTVmMSwgMHhhYmUyMzcxOCwgMHhjMDc0MGNjNiwKLQkweDkyM2JlMzdkLCAweGI4NTdmM2M2LCAweDBkYzY5N2VhLCAweDkzMjY3OGE1LCAweDRmZTMwZDM1LCAweGViM2Q2ZDMzLAotCTB4N2Y4MmU1ZGIsIDB4NGE1OTI3NGUsIDB4ZjE5ZmQ0ODMsIDB4NDEzZWU1ZmMsIDB4M2QwNGZiYjcsIDB4NjRmYmFmZDcsCi0JMHgzZWYzMDQ4ZCwgMHhkZDEyZWM3ZCwgMHhmZjM2ZTk1ZiwgMHg5ODNjOGY4ZCwgMHg1NWM3YzYxOSwgMHg3OGE3NjdjZCwKLQkweDViZGZkMDdhLCAweGRmM2E3ZjQ0LCAweGVmODc1NjQ4LCAweGFmM2UxMmEwLCAweDQ2NWUzZTRlLCAweDdjMGIxMmZjLAotCTB4N2M3YzQxOWMsIDB4NjcxOWNmMDEsIDB4NzczMWRjZDksIDB4MjgwZWQ5NDEsIDB4ZmJlOTQxMDksIDB4ODFmNjk1NjcsCi0JMHhlNTQ2OTg4YiwgMHg3MmE1ZTYxMiwgMHhmOTFkOTAzOSwgMHg2ZGQ4MWJkNiwgMHg2MmFmN2M0NSwgMHg2ZDdjZjQ0ZCwKLQkweGYyMTc2MmQxLCAweDhmYjMzMmYxLCAweDMwNmJjOWY2LCAweDdkY2YxNzUzLCAweDEyNDk0NzU5LCAweDM2ZWE0YmM2LAotCTB4ZTgwNDk1YmYsIDB4N2JiMGQzOWIsIDB4Njc2ZmM2MzIsIDB4ODViZTE3MDcsIDB4ZDMyMWQ5NjUsIDB4MDU1YmNjMDUsCi0JMHhjZTJlZjhiOSwgMHhiZDU0ZGRhYiwgMHg3ZjhjMWZiNSwgMHhiNzEzNzNmNywgMHhiM2U3ODdmNiwgMHhmNjBmNGUyNCwKLQkweGFlODdhNzJlLCAweDBkZDcyMjM3LCAweGU0OTliMDcyLCAweGViNDNkNjMzLCAweDA2YTU5YzkyLCAweGMyZDhhODM5LAotCTB4YWVmOGE2M2MsIDB4Yjk0ZWY5ZmMsIDB4ZmJmZDVhMjgsIDB4ZTRiZmE4ZmUsIDB4NTQxNzhhMGUsIDB4NDM4YjYxYmQsCi0JMHhkYzYyYWYzYSwgMHhmNDc5MzAxZiwgMHgwN2VlODg3OCwgMHhkNWYzZTIzMCwgMHg3NmMzNWEyYywgMHhmZWJlMGE5ZiwKLQkweGJlMjMwMDc0LCAweDFiMDRkNGZlLCAweGZmMmU4MmMyLCAweDkyZmFhNTk0LCAweGVjYmEzMjBhLCAweGI5Zjk5NTc1LAotCTB4YjAyNzg4NjEsIDB4OWY4OWZiZTcsIDB4Y2I2ZDM3Y2YsIDB4MWZiZDQzNGYsIDB4YzRmZjQ1NGMsIDB4YWI0ZGFjZjIsCi0JMHgxNWQ4MzM0OSwgMHhhZTlmNzVmNiwgMHgxNmEzZDczOCwgMHg5YzhhODcxZSwgMHhlZGU4YTk5NywgMHg2MjNmYTMzZiwKLQkweDllMDBiMmIzLCAweGIzNWM4MDgzLCAweGZkY2YyODUxLCAweDM1NTcyNGFjLCAweDk3OGM1YTg4LCAweGY5YmFmMjRkLAotCTB4ZmZiMWFjMzksIDB4YWRiZTYyZDMsIDB4ZGQ3MWU1N2YsIDB4ZTMwN2FjMDAsIDB4ZTFjN2RkMjYsIDB4ZGQxNmNhNzYsCi0JMHgwZGU5MGUzNSwgMHg5YTcxYTMxNywgMHhlYWQxOTEwNywgMHhlZDI5OGYxYywgMHgzN2JmZTgyOSwgMHg4ZTdlZmI0NCwKLQkweDNmZTNkMWY0LCAweDM1YjJiZWZhLCAweGJhNGM5M2VkLCAweDUyZjYzNjk3LCAweDE4ZjdkZDA1LCAweDgwZmJhMzYzLAotCTB4ZDhiODg4NzcsIDB4MmUzYzQ1MWQsIDB4MDcxZTg3NzYsIDB4MDcxMTFmMWIsIDB4YjBjNzg4OGIsIDB4YzVjNzNkZjEsCi0JMHg5OGNjYmQ3NCwgMHhlNGY5YzE2NiwgMHhkN2Q0ZmZiMiwgMHg1ZDE4ZjE0ZiwgMHhhYmIzNzYwZiwgMHg4YTM2OTBiMCwKLQkweDZlMjliYjU3LCAweGM5OWYxOWQxLCAweDRjZjhmMmI3LCAweGQ1YzUzMjQ5LCAweGVlNGY0MmFkLCAweGE0ZmQ3MmYyLAotCTB4MGU1ODlmYmYsIDB4M2VjMzE4NWIsIDB4MGQzMmNlYzIsIDB4MDBkNTA4ZmIsIDB4MzI0ZWE4MGYsIDB4ZDFiODFmYjQsCi0JMHgwYjRmYTg2ZCwgMHgzM2VhMThlNCwgMHg5YzAzMzRlYSwgMHg2ODY0NTBkNSwgMHhjN2JmNjgzZiwgMHg0YjA2ZTcwMCwKLQkweDFjODdlZDBkLCAweGExZTAxYWY1LCAweGY2ODZlNTRkLCAweDg2N2Q5YmMzLCAweDBhZDBmY2ZhLCAweGQ2ODhmZDQzLAotCTB4YjIzYzAzNmEsIDB4ZmRhMWEzNmQsIDB4ODYwMzBmZTgsIDB4NzVlZDMxZmEsIDB4MTc3MWZhODYsIDB4ODRmMDBjMWIsCi0JMHhmNjg2ZmQ4ZSwgMHgxYTBmNWRiNywgMHgxZmIyMjdlYSwgMHhlZDhiZWExYiwgMHg5M2MwMzMzZiwgMHhkYTE4NWZkNSwKLQkweGQzZWMyNTNmLCAweDg2MmQ0OWVkLCAweDVjNDQwN2U3LCAweGE0ZmJhYTYyLCAweDM5ZTlmZGUxLCAweDUzZjAwYzY3LAotCTB4ODc5NDZmNDgsIDB4ODc5MjU2ZjksIDB4Zjc4M2Y1OTYsIDB4MDdmZDAwNTUsIDB4MTg2YjM3YWMsIDB4ZmRhOTk5ZjMsCi0JMHhhYjJmZDBkNiwgMHg2ZGZjNDdlZSwgMHg1MmNmZTI4ZCwgMHg5NDdjYjZhNCwgMHhlZGNjYTdkYiwgMHg2ZDNlNTg2OSwKLQkweDdkYzE2ZjcyLCAweDg5ZjhjNjZmLCAweDJhY2VmNjE0LCAweGNiMDViODU5LCAweDliMzYzMzQxLCAweDlmNDBkYzEzLAotCTB4YTBiNzA3YjksIDB4NjhhOTBjOTgsIDB4MWUwMGJiMzEsIDB4MTZlY2U0YmEsIDB4OGQ2MWQyMTcsIDB4ZmM0NDRhNDksCi0JMHhjMWFiNDg2ZiwgMHg4OWE2YzQ3MiwgMHg4ZmQ0MTI1MiwgMHg4MzU4NWRhYywgMHhmZDcxNzU3YSwgMHg2MWNiODU5OSwKLQkweGQ4MzdhMzVlLCAweGEwOWRjZDg5LCAweDNlMzBkYTBiLCAweDZmODg3YjI2LCAweGUyOWIwMDM3LCAweDhjOGMzNjNhLAotCTB4NWRiYmZjYTYsIDB4MzcxOTE1NjMsIDB4YmE3NmJiMzMsIDB4Yjg2ZTMxNmEsIDB4MWQ0MTY3NmIsIDB4YWZjMGRiOTYsCi0JMHhhYzYyMGUwZiwgMHgyYzdhZmMwZSwgMHgxZjVmODI3NywgMHgzODZlODU4NCwgMHg5NDU4ODdmMywgMHhhOWUwNzU1MywKLQkweGRmZDczYzI0LCAweGNkNTNlOTNlLCAweGZiMGFlMWFjLCAweGUzMDEzZGNkLCAweDhiNDQyN2Q2LCAweDczN2VjN2JjLAotCTB4N2Y0MjY2MjcsIDB4MGYwMGFiMjgsIDB4ZGNmYTcxZjgsIDB4YmUxZGQyODAsIDB4MmEzYmM0MzYsIDB4MzcyYTE3MDcsCi0JMHhkN2JmYTFhNCwgMHhjMGMwZGZhZCwgMHhjM2UyMjdiOSwgMHhhMjc4MDVmYSwgMHhmNWZhNmRmYywgMHg3ODVmYjA3OCwKLQkweGMzZGU2M2RlLCAweDlmNmUxY2U0LCAweGY1OWFlNDA3LCAweGQ3Y2EwMjNjLCAweDk0M2EyZWUyLCAweDgwYzQ5N2UwLAotCTB4ZDMxZmFiOWUsIDB4ZjgwZTViZWEsIDB4MTM2YWQ1OTUsIDB4ZjcxNjM3ZGQsIDB4NGRhNDMwNTYsIDB4NWYxYmUwNzEsCi0JMHg3MDBmMTZkZiwgMHg2NGVmNzg5MiwgMHg4ZTBlNmY5ZSwgMHg3MmUzODBhYiwgMHg5MjdmOGMyZSwgMHhjNjFjMDA5NiwKLQkweGJmMDBmYjFmLCAweGYzNWQyY2U3LCAweDBlNjdkY2IxLCAweDJjMmZhMGM4LCAweDA2OWE2NWM1LCAweDIwYjkzY2UzLAotCTB4ZmI5ZDM2OWEsIDB4MjJmZjQ2YWMsIDB4ZmM5ZGU0NGIsIDB4ZmJjYzQ3M2MsIDB4ZmQwZDFjYzYsIDB4ZjU4YjlmYTIsCi0JMHg4ZGY3ZWUzYywgMHhmZDgyZDhmZSwgMHg3OTMyYTBhZiwgMHg0MGY5ODg0OSwgMHg1NzlhMjljZiwgMHhjYjBhZDRjMywKLQkweDhjZGEzZmQ3LCAweDA3YzA0ZWY3LCAweDhhM2I0MjZhLCAweGY5ODczN2NmLCAweGI4NzMyYjFiLCAweDVhZjk2MjVmLAotCTB4YTViYWY4YTIsIDB4ODVjNWFiYzYsIDB4NGM5MTZmOGQsIDB4NGZlZDNkZDUsIDB4MTA2NWUyMzcsIDB4NTE4NmFmN2MsCi0JMHg0OWY4ZTViZCwgMHhhYzlmNGZiYSwgMHg1Mjk2OTgzNSwgMHhlNzg2MjEzZiwgMHgzZjg4NGEyMSwgMHg0ZDA1YTdlZiwKLQkweDkyM2UwMDRiLCAweGZmN2MzNmUzLCAweDk4MTJkZmExLCAweDRmYmM3ODdmLCAweGJlNjEzNmFlLCAweDZhYTZlMjQyLAotCTB4NTEyMWUyMTMsIDB4YmU3ODZhZjUsIDB4YzM1ZWRjYzgsIDB4YzZlMjc1ZjksIDB4MWUzZmEzYjUsIDB4NmFmNmYzODEsCi0JMHg5OTYxMDc5OCwgMHhjODdkZjNhZSwgMHg5Y2I1NDQ4ZSwgMHg3MDMyNjJkNywgMHhlYTVlZTJkZCwgMHgxMzE2Yjc1NSwKLQkweGY0M2FjM2RmLCAweGU3ZTc2OTUyLCAweDNiZDViZDViLCAweGE2YTlkZTBiLCAweGM1MDJkN2JjLCAweDRmNTg0NzhkLAotCTB4MDdlNTJiZTUsIDB4MjNiM2UwN2IsIDB4YTkyZmRjMzksIDB4YTNlNzFhNzcsIDB4YzIxN2U3ZTgsIDB4MTk1NTVjNmUsCi0JMHg2ZjQyNWJiNywgMHg2MWNiMWZkYywgMHhmM2ZiOWZiZCwgMHhjZGQ5MTIwYiwgMHg0NGRmYmJlNiwgMHg1YzNhYjFlNywKLQkweGRlMjBlMzBmLCAweGQ4YjQ2ZmVhLCAweDk4ZjU2ZjExLCAweDhiZjY0MTY3LCAweGZhN2FkZDkxLCAweDc3MDczOTg3LAotCTB4NGZmM2JhOWEsIDB4ODkwMDM5MzcsIDB4YmU0MDI5OGIsIDB4MDFhYzFiM2MsIDB4YWRmMjM5ZmMsIDB4Y2E2OWZhMWEsCi0JMHhlODRjY2I4MywgMHg2YWIxMjQwYiwgMHg0NjUyMTg0YSwgMHhjM2NhYjQ5NiwgMHg3MmJmMzI2ZSwgMHhmYTI3ZmYyMywKLQkweDY0YzFmMjhjLCAweDM3ZGQzMjVmLCAweGZkZDU3NDEwLCAweDc0NzRlZTgyLCAweGRlMjA2NjI3LCAweGU1NzllNWRmLAotCTB4ODlkY2QzZWIsIDB4NWY5ZDQ3NDgsIDB4NjNmYzlmZDcsIDB4MGU4YzJmOTQsIDB4MmU3ZTA4MWYsIDB4Y2ExMjBkNjIsCi0JMHg0NGQ2NThlYiwgMHg0NmQ2NzhlNSwgMHgwNzU4NzdlNSwgMHhjYWE2MWU5NSwgMHgxYTYyNGU1OCwgMHg0YmNjMjU5NSwKLQkweDRkNTYxNGU1LCAweGEwNmIyOTY1LCAweGEyNmIxYTcyLCAweGEzNmIwNjcyLCAweDU0NTNmNjEyLCAweGZiNGE5OTdhLAotCTB4NTdlMGQ5YmUsIDB4Nzk5NzM5NjAsIDB4YWFjNzljYTksIDB4N2M4MGJjYTksIDB4NjcyZGY4MGUsIDB4Y2RkZjA0MGQsCi0JMHgwNjZjYTg5YSwgMHg4NDFlZTAzZCwgMHg5NTNiMDk3MSwgMHhjNTllODFhZiwgMHgxMjdmMGRmMiwgMHg5YmJmMjE5NSwKLQkweDk3MTg2ZGI5LCAweDg0ZjJhMWM4LCAweDZkZjJhMzVmLCAweGFkOTUxMTdmLCAweDdiYjUwZjdlLCAweGU1NGE1ZmM3LAotCTB4Y2E5N2JmMjksIDB4MmE3MmZlZDMsIDB4NmEzZWZjZGIsIDB4MDU3ZjllZjcsIDB4YWJmODFmOTUsIDB4ZmYzN2ZjYTksCi0JMHhmNDNmMmE0NiwgMHg3N2ZjYTgwNywgMHg1OTk1MWQ3ZiwgMHgwNmZiNDY1NiwgMHg5ZmNhMTM5NiwgMHgzOTQ4ZjQwZCwKLQkweDgxYjhmNTZmLCAweDFjYjkwNWFlLCAweGU2M2RjNzhmLCAweGE0NzhkYzg0LCAweGZlMzBjY2E3LCAweDI3MWM5NGFhLAotCTB4NjZkYzUxMjYsIDB4ZTc1N2JmYmEsIDB4YTMxNmM2M2UsIDB4ZmRjZDNlM2UsIDB4ODNhMjQ3NDgsIDB4ZTFhNTU0ZmMsCi0JMHhjOGJjYzMwNCwgMHhkNGJiNTM2NiwgMHhjZjZiNjgwNywgMHhlN2I1Y2ZmNSwgMHg4ZDdmMWQ4MiwgMHgxMGQxZjZkNSwKLQkweDA3NjNkZGFlLCAweGE1YjRmNDdiLCAweDUwNDdmYWFkLCAweGYzNzhmZDJmLCAweGNlZDgzYjVjLCAweDNlZjc4ZWIxLAotCTB4NTRjMzk2N2IsIDB4YWIwNGU2M2YsIDB4ZTY3NjAxNTEsIDB4NTc4M2RmNmUsIDB4YTgxZTcwYjIsIDB4YmM3ZTkzZjcsCi0JMHg0Y2U2ZWU2MywgMHgyN2Q3Mjc5YywgMHg1MDBkNzdiMCwgMHg4NTNhZDVmZSwgMHgxYmYyYWZmMiwgMHhhMWEzZTU4ZSwKLQkweDE0YWQ1MzFkLCAweDZiMGJkZGEwLCAweGRlOGFmMTQ3LCAweGViZDY0NWRhLCAweGU5NTkzZGVmLCAweGY1MGYxMDkyLAotCTB4MDFlZGEwN2YsIDB4ZTUwOGM5NGIsIDB4YmMyYzVjNjMsIDB4MWJiN2YzNWYsIDB4MTkzNzQ5OWYsIDB4ZTk5ZGJjM2YsCi0JMHhjYzlkZmQyNiwgMHhmZWU2YTRmMywgMHg5MWU3YzA3ZiwgMHhmYWY5NmRmYywgMHgzYmU4Y2ZmOCwgMHgwYTIzYWMxZiwKLQkweDk2MzFiYmU1LCAweGYwMGU5ZmViLCAweDU1ZmY3MTliLCAweGNkZmFlMDJmLCAweDM3NDdlNGU5LCAweGRmNzM3OWVhLAotCTB4MzFiZWE5OTMsIDB4OGFkMmJiNWEsIDB4OGE0Y2U2ZjAsIDB4N2FjN2Q0ODcsIDB4ZmRiMTczYTIsIDB4NDNkMjc0ZDYsCi0JMHhlNTE4N2QyOSwgMHhkZWQyZWRiZCwgMHg3MjYxZGQ1NiwgMHhlYjk3MzUzZiwgMHgzNWMyNjU1ZCwgMHg4YmVhMzE3NSwKLQkweDhmMGNjOWVmLCAweGVmN2UwN2RhLCAweDAxZGJkNjgzLCAweDY2YWRlZTZmLCAweGNjNTI5ZWZhLCAweGQxNGEwZjg0LAotCTB4YzkzNzA0MmUsIDB4ZjNhMTI0YTMsIDB4M2EyZmQ1MTgsIDB4NWRiYWZiODIsIDB4MWIzYTM1OWEsIDB4NTExMDdhZTgsCi0JMHg5ZDVmZmU4NywgMHg0YTVmZmU0MiwgMHg3ZTNlNTBkZiwgMHhjY2FiNmE1NywgMHhmNTIyZDdmMywgMHhiZTMxNmVkZCwKLQkweDg2ZDg1MWQ5LCAweDZmOWZhZGVmLCAweGE0YmM2Mzc3LCAweGVmNThmZDM3LCAweGY5ZTNlNDBmLCAweGI3ZGEyYmI3LAotCTB4YWMzYzgxOTAsIDB4N2UzZTdkYzgsIDB4MmUxNTM4MmIsIDB4MWU2YmY3MjcsIDB4MTczNjNkY2MsIDB4OGJkNTQzZWYsCi0JMHhmMWFkZDhiYywgMHg4YWRlZmE2NiwgMHgyODNhZTA1MiwgMHg1OGFiZjU4NSwgMHhiM2IyNmU0MywgMHg2MmM3MjE2NiwKLQkweDUyM2JmNTNkLCAweGZiYjhlZjI4LCAweGQ3ZjY4ZDNjLCAweGMyM2NjMWExLCAweDg4YmQ3NGY0LCAweDM3OGU3NDViLAotCTB4Mjk0MWRmYTIsIDB4ZDhhN2FlMmMsIDB4YTc4ZDFhNDIsIDB4YmM3ZDMzZGIsIDB4ZjFiZGZmOWQsIDB4NGY3Yzg5NzYsCi0JMHgyOGM3M2M3ZCwgMHhkNjFjZmFlMywgMHg0MzlmNWEzNiwgMHg3OGZhNDFmOCwgMHgzZDdkNzBiYiwgMHhlMzdjOGRlNCwKLQkweGYwYmViODc4LCAweGQ3MWI0NmYxLCAweGQxYjViMGU3LCAweGY3MTIxY2ZhLCAweGRiYzczYTZiLCAweGJkNzhmM2Q5LAotCTB4MjIzN2IzOGQsIDB4ZjcyZjRmZmYsIDB4ZGMxM2ZmMGEsIDB4MTgwZTc2NDMsIDB4ZjljNmM1MzQsIDB4MzMwYjY5ZjksCi0JMHg5MmJjMDM5YywgMHgxZmYzZWRjYiwgMHg1OTVmMzhmMiwgMHhjOTdhZTM2ZSwgMHhmZGQyYjJlMiwgMHg4YmFlODlhNCwKLQkweDk1YWY5MWJiLCAweDE3M2E2NjNkLCAweDI2ZGZlMjUzLCAweDNjNGU0YjNmLCAweGE3ZGEyNGM1LCAweGZlN2MyNmIyLAotCTB4MTdiZjg5YjQsIDB4OThmNmIwNDgsIDB4NWZkN2IzNjcsIDB4MmMzMzNhMzQsIDB4NTVhODlkYWUsIDB4NmI2ZjMwOWIsCi0JMHhlMTk1YWJhMiwgMHg2ZjEyODAzOSwgMHhmMTJiZjVhNSwgMHhlYTE0NjBmNiwgMHhkODA5OGQ1ZiwgMHhmZTgzZWMxYSwKLQkweDhiZGY1MGM0LCAweDk3NGYzMGI5LCAweDE1YzVlNWM2LCAweGY5ODgzZDZmLCAweGQwZTU4OTU0LCAweDllM2UxODZmLAotCTB4ZTRjYzdjMTYsIDB4YjBiMmI0ZjYsIDB4NzkxZDQyZmIsIDB4NWNiYTFmMWMsIDB4YzM2ZmNlNDcsIDB4YzY4NzhlNjAsCi0JMHhlYTJhZjA0OSwgMHg4ZTNjMzFjZCwgMHgzZjcwZmE3MywgMHg3YWNjYzdkYSwgMHhmYjgzZGEzNCwgMHgwNjNiZDNmYywKLQkweDczYmMxMDk3LCAweDljMDFlNTJjLCAweDBhNzYzYzNlLCAweGVkNjY2YmVlLCAweGQ4MjY2NjljLCAweDNlMzE1YWM0LAotCTB4ZGRlNzZiMzMsIDB4OTI5ZTdjNjYsIDB4MWRmZTg4YzEsIDB4NWZhNGFkNjcsIDB4MjU1Y2VkNjcsIDB4MTRkM2ZmZGEsCi0JMHgwZTY0NWY2YywgMHgxYWUzMDRmYywgMHhlZDFkMGY0NSwgMHhiMTliNzE4MywgMHg2M2ZhMTc4ZSwgMHhiZWRjZGE3OSwKLQkweDc0NzdiZjAxLCAweDg1N2VjYTg3LCAweDczNzc5YmVlLCAweDdkNGQwMzljLCAweDBiNzQ4ZWQ5LCAweDk3N2VjNWM2LAotCTB4ZTY5N2NmY2IsIDB4ZTc4NThmMzAsIDB4ZWUyOTc4OGQsIDB4ZGI2OGZlMzAsIDB4ZmM4MmJjNzEsIDB4NjI4ZWE2OWQsCi0JMHgzNGY3NmUzYywgMHg5Y2IwMjdhYiwgMHhjODRhZDIxNCwgMHg5ZWY1NmMyZCwgMHg1YjRhNzJjMCwgMHhiYmJhMDk3NSwKLQkweDljMzYxZmE1LCAweGI4NjFiMmMwLCAweGRmODg3N2VmLCAweDJhOGUwZmMzLCAweDQ5YzYwNjc4LCAweDY4ZGNlZWZkLAotCTB4YjdkMjc3ZjQsIDB4YTQxZTRlODQsIDB4ZWU4NWIxYjgsIDB4ZjIyZGVkYjksIDB4ZGUzMDQ5ZDYsIDB4OGVkN2I3NWUsCi0JMHg3YzZmNjg3NiwgMHg2YmY0OTliYSwgMHg1YTBhZjU2YywgMHg4NjY4ODBlNywgMHhmYWFiZGNlYiwgMHg2ZmJmZDBhMiwKLQkweGVmNDZlNzE0LCAweDJjNDczMWY4LCAweDdmMzQ3OWVjLCAweGJmZTA5OWZlLCAweDFlZDdhYWFkLCAweDUyYTA3MjRiLAotCTB4ZmMyMjgzYmUsIDB4NDllNjdhYjQsIDB4M2IyODQzNDIsIDB4MWI4YzQxM2MsIDB4M2Q3MGY1ZWUsIDB4N2VmODUwMWUsCi0JMHgwMzZmOWIxOSwgMHg5OGFlOGViZiwgMHgyOWU4YmI5YSwgMHg3ZjMxYjI2YiwgMHhlYzFiZGMxYSwgMHg1MGVkMTY1NywKLQkweDg4M2ZhMjE3LCAweDA2MTE2ZWQ3LCAweDEzYmZjMWZiLCAweDc0M2RiOGM0LCAweDY3M2EyZTI4LCAweDE3MmZlN2QwLAotCTB4N2M2MTdmNDIsIDB4YWQ5ZmYzODYsIDB4OGZhN2JkNzQsIDB4ZjYxNjBlYWIsIDB4NWVkM2YwNDEsIDB4OWY0ZmVmMWYsCi0JMHhiNzYwZWM2ZiwgMHg3MzFiNWVmOCwgMHg5MjNlNzE5YiwgMHhjM2FjMGY5OCwgMHhiMDlmMzYxYywgMHhjZWJlYjQ3NiwKLQkweDg5MmQzMzc5LCAweDMwZjU5ZmRmLCAweGI5OTZhZjdlLCAweDNiZjViMGU1LCAweDQ0YmI1ZTZkLCAweDIyYWNkMDc2LAotCTB4MzMzNDNhZmYsIDB4Mjg3MDRiZGQsIDB4MDRmYmE3M2YsIDB4MWFjOGViOTEsIDB4ZGY2OWUzY2MsIDB4MDUxZjYxOTcsCi0JMHg3OWE2OTllYiwgMHhmN2U1Y2ExOCwgMHg1NWY5MGY1NSwgMHg3OGU1ODBiMiwgMHhlM2M5ODdlZSwgMHhkODRiMzEyNywKLQkweDQ5ZjhlNTdhLCAweGI0MWE2ZWQ0LCAweGI0ZTdmOGM3LCAweGYyMWEzZWEyLCAweDU0ZDY3NGViLCAweGMxN2RmMmFiLAotCTB4NWY5ODRjODksIDB4ZmM4NjYzMTYsIDB4NGZjMDU5NzQsIDB4OTY1MGJmOTYsIDB4NzFhYmM2ZTYsIDB4ZTgzOTJkMGQsCi0JMHg4Y2IwM2QxNywgMHhkNzZhOGNmMiwgMHhmOWM1NmI0ZiwgMHg2YmFjZTUyNiwgMHhlZjdhODM4OSwgMHgyY2VlOWM1NywKLQkweGZiMGRjNzlmLCAweDc5MGQ5MWVmLCAweDAwMmJjOWNiLCAweGY3NWYzZjBlLCAweDA3ZTA2MTE5LCAweGFmOWQ3YjQzLAotCTB4OGFhOTUzMTQsIDB4Y2ZiOTg0N2UsIDB4MzA1OWRkOGQsIDB4ZWRjOWQ5N2YsIDB4NmNiODc4MzcsIDB4ZjJmMTBmNmUsCi0JMHhmMDI1N2M2ZSwgMHhjNjY3ZDNhZiwgMHhhN2MyNGNlMCwgMHhiM2JjNzBhYywgMHgyNzdlY2QwZSwgMHgxYmYxMTNhNywKLQkweGQ1ZTMwOWZkLCAweDNlNjJkODgwLCAweDE0ODk0ZDdkLCAweDhlYTFmYmM0LCAweDAxMmNmNmNlLCAweGE3NDkxYWU5LAotCTB4ZWVjNzViNzQsIDB4OTU3ZjVjMmMsIDB4MjNkYmYyOTksIDB4YzQ3ZTBhZjEsIDB4NjdjODY5OWQsIDB4MWVhOWUyNmIsCi0JMHgzYWJlNTM5ZSwgMHhmNjc1MjI2NiwgMHgxYjA0ZjUyMywgMHhlZDRkZjFlOSwgMHhkZGMxNjA5ZiwgMHhmOGQ2NGYzYywKLQkweGUwYmUyOTNjLCAweDhhNDI5YzlkLCAweGNjOWM2ODQ3LCAweDBkYWNmYWM2LCAweDhjNjJiYTQ2LCAweGEyNzhmNTA5LAotCTB4YjRhMTgyYzYsIDB4YjRlN2E3NWIsIDB4YTYxMmM2ZjgsIDB4Y2VhYmE3NzQsIDB4N2I3ZDI5NzcsIDB4MTBmMmYzZDYsCi0JMHhlYTAzYjA5MywgMHhmM2Q0MWNiNCwgMHhmZmYyNjYwOSwgMHg4NGU2MDliYywgMHhkNmYwN2RmMCwgMHg3MjVmN2NjMSwKLQkweGU5MGEyYmRiLCAweDRlZGU3NjZmLCAweDUwYjRlZmY3LCAweDEzZjQxZjViLCAweDkzMzM1ZDI3LCAweGE5ZDZmZTdmLAotCTB4ODM0ZDhmNjMsIDB4OTZhZmYyNzIsIDB4YzliYjYxZDQsIDB4YmY0NmVkYjAsIDB4MzcyYmU4NjIsIDB4YmYyNjJjNDYsCi0JMHhlNTE3MmRhNSwgMHgzYTE2NTVmNSwgMHhiMWY2ODJkOSwgMHg4MjcxNDJkNSwgMHg1MzZmOWZjZCwgMHgzNWZkMjEyNywKLQkweDdkM2U3MTQ2LCAweGI5ODMyM2RjLCAweDI1YTVmYTlkLCAweDlhN2QyNWUwLCAweDdlNDZiMzI2LCAweDZiZTM3NjVlLAotCTB4M2UzYzRlOWQsIDB4YjJjNzc5NDQsIDB4YWJkZGFmODksIDB4YmQ5MzU3NTUsIDB4MzY2M2M5NGMsIDB4YWRiN2M3OGEsCi0JMHgyMWJjN2IyNCwgMHhjY2JjYTE5YSwgMHg0MWVlOWI1NiwgMHgxNzY1ZjY3OCwgMHhiMzdmNDMzMywgMHgyMTY1YjczNSwKLQkweDNmMDkxZjllLCAweDU5YWE4ZTczLCAweDY5YTk2MjI2LCAweDNmOWRiOWZjLCAweGU4N2FhYjlmLCAweGMzY2Q1Y2Y5LAotCTB4YmY3YzJiOWYsIDB4NjgxYWE3N2YsIDB4Nzc3ZjQzZjMsIDB4ZWM2ZTcxMmEsIDB4Y2JjZDRlZWYsIDB4YThkYmFmZWIsCi0JMHhmZmVjMTRmZSwgMHg0N2I0ZWZkMCwgMHhlYmQ0NTQwNSwgMHhmY2NkMTcwZCwgMHg0ZDE3Y2U3YywgMHgyOTU1YmVmYywKLQkweGZjZTM3NTY4LCAweDRmNzRjZDBhLCAweGJhMjRmYzBmLCAweGY1NGJiZDVmLCAweDdkZWFmZGQyLCAweDA4OGM5N2NjLAotCTB4MzY3MGI1N2UsIDB4YzZhZmQxZjksIDB4ZDVmZWU5OWIsIDB4ZTUzMzFlYWIsIDB4NjQyYTA1ODEsIDB4ZjA1MjFmN2UsCi0JMHgyOWU1YWJkMSwgMHg4ZTk2N2U3NCwgMHhkZDdhNDRjOCwgMHg2NDNmMjc2MywgMHg2MjQ0MWUyYiwgMHhkYzdlZjJmYiwKLQkweDdmZGNjODVlLCAweDllMmEzZmQ4LCAweDJjNmQzYmRhLCAweGUwZjkxNGFlLCAweGYyZjk0Y2IwLCAweGUzY2YxZmRmLAotCTB4ZjRhMWYyOTgsIDB4YWU2YmZhMjAsIDB4Y2JiY2EzMGEsIDB4M2YzODkzODUsIDB4Mzk0NTRjNjgsIDB4YzQ2OWExOTgsCi0JMHg5ODdiMzVmNywgMHhkYzkzNzY2NiwgMHg1NzQwZmJkMywgMHhjMmFlZTc1YSwgMHgyMmZhNGFmNywgMHgyNGQzNDZiYywKLQkweDdkMDYxODJlLCAweDFlZjg1MzUxLCAweDRjY2Y4M2M3LCAweDBhYmJlZmY5LCAweDQ5YmVmYmM1LCAweDVkN2M3MDg3LAotCTB4ZjkwYjA3Y2UsIDB4Nzc0YWY1ZDQsIDB4M2Y1MWE0M2QsIDB4ZGE0OWQ4OGUsIDB4YzMwNjgwNGUsIDB4ZmJmZjI4MDAsCi0JMHhmNTFjZjBhZCwgMHhmNzRjOWM0MiwgMHhjYTE3MDZjNiwgMHg5NzU4NzUyMSwgMHg3ZThiMjdkYywgMHg5NGY5MGIwNywKLQkweDJjZTUxYThmLCAweDdlMTE5MGViLCAweDdlZWZjODVjLCAweDYyZmI5MjE2LCAweGNlOGMwZGJmLCAweDE4MzdmYWNkLAotCTB4YzdjZWMxZGIsIDB4NTIyYzdhODQsIDB4M2YwYmFmOGUsIDB4ZGQwZjEyMzMsIDB4NzllYmVjZjAsIDB4MGFlYjVkOWQsCi0JMHhiYWQzNjU0NCwgMHg0MjVkN2NjYywgMHg1YjJhNjVkZiwgMHgyYWE2NzllOCwgMHgxNzljNmU2YiwgMHhkNzBmNzg2YiwKLQkweDBjOTBmZmRmLCAweGFiZDAyYTBlLCAweGUzMWIzY2QwLCAweDMyMDIzMzNjLCAweGFjOTliYmE5LCAweDM3YzVmNDhkLAotCTB4ODhhYjdiYWQsIDB4MzNhZTQ1NzMsIDB4MDZkYjdkNzIsIDB4NjRiZjVjNGIsIDB4MzdlNGJjZjgsIDB4MzdlNGNiMjUsCi0JMHg2MzAzZDY1OSwgMHhlNTZiYzcwYywgMHgyM2I3OWRkZSwgMHhlZWNlODc1ZCwgMHg1OWRhMDQzMywgMHg2MmE1NTgxZiwKLQkweDdhMTU1YTVjLCAweGM0YjVmMmM5LCAweDNiNjFlYmY5LCAweDcxMjVhYmYxLCAweDdkZjg0ZTQ2LCAweDI0ZGE5MTliLAotCTB4NTFjNTA4NzUsIDB4ODQxYzllYWYsIDB4MmQ3N2M3NzEsIDB4M2Q0OGZmODQsIDB4YzcwODY2MzcsIDB4NjM3Njk4ZjMsCi0JMHg4YmI4ZTQ1ZSwgMHg3Yzc5MTFkMSwgMHhkYmM4YmNjNiwgMHhjODhiZjdhZSwgMHhjODg4Y2JlMywgMHhhODYyMWJlMywKLQkweDg4OGVhYzlmLCAweDE3MWJlM2M4LCAweDZjNTdjNzkxLCAweDRjZTdhNzgwLCAweDliZTNjODhmLCAweDI4ZWY4MDYzLAotCTB4YmVkMGM3YmEsIDB4NTBkOGIzY2MsIDB4YjU3NGE3M2YsIDB4ZWY0ZWZlYTEsIDB4YWVmODA2ZmQsIDB4ZWQwZDg3ZjIsCi0JMHgwYzZhZmJlNywgMHg3OGFjZjdmNSwgMHhmYTBmNTBjNCwgMHg3M2I4YzdhMiwgMHg4N2FlMTBmMSwgMHg2ZDNjOTM2YiwKLQkweDEwMzA4MWY0LCAweGZlMGY2Zjc4LCAweDFkY2FhNDgwLCAweGQ5YzdmNmUxLCAweDU2YTJmZWNiLCAweDdkMjllM2QwLAotCTB4ZTI0ODEyN2YsIDB4OGYxMTY2NzEsIDB4MTBjNDc3MDUsIDB4OWQ4ZDBkYWYsIDB4NTE3ZGM3NjYsIDB4NDQ0YjRkOWEsCi0JMHhjZDdlY2ViYiwgMHg1ODU4MDZlZCwgMHhjNGU2ZjljMywgMHhkZGE5NGIwNywgMHgzYTc0ZDhmYSwgMHhmYzAyNzk4NywKLQkweGMwZTgxZjZjLCAweDc3Y2YyMGRhLCAweDZmMDAxN2U5LCAweGFiZjc5ZTFjLCAweGY1ZGExMjg1LCAweDc4YTU2ZWJiLAotCTB4NTgzY2U3NmUsIDB4NTU3N2Y1MjksIDB4ZjNlYTJmOWMsIDB4NDNmMThmZGMsIDB4ZWNkYmVlMWIsIDB4NTRjZjMyNTQsCi0JMHhlMjhlM2YxZSwgMHhlOTc1MWVlZCwgMHhjMzFhOTZlNywgMHhkNjQ1MWQ3ZSwgMHgxNjRiZTUwMCwgMHgzMGFjNWIwNiwKLQkweDhmZDA1YWRmLCAweDk3ODQ5YWY4LCAweDU1ZGRhMWVjLCAweDNkZTliYjQ1LCAweDEyN2YxYWIwLCAweDk2NTIwZmRkLAotCTB4ZTgxNjAyODQsIDB4YmYyN2VhYjIsIDB4ZjBlM2UxZjgsIDB4MTQ2M2UyYmUsIDB4MjdmODc4YTcsIDB4N2UyMWZjYmYsCi0JMHhjNDNmYzQwNywgMHhjODcxNzQ0ZCwgMHhlZWZiY2YxYywgMHg4NzRiYTdmZCwgMHhiYWM2NWY1MSwgMHg2NDYyNWVlOCwKLQkweDliN2RlMjdkLCAweDI2ZWI3YWJlLCAweDNjMTZmYmY1LCAweDM3YTVkYmY4LCAweDhkZGVmZjdiLCAweGQ1ODZiNzY3LAotCTB4NTk3ZjM2ZjcsIDB4NjEzY2M3ZTksIDB4MzU2YTkwN2MsIDB4Y2JkNWMzZGUsIDB4YWFiZTBiZWYsIDB4ZjhhNTZiMWEsCi0JMHg1N2M5MmNlNSwgMHhlNWZjZjI4ZiwgMHg3MDdhZmZkOCwgMHg0NWY3YmMzYiwgMHg3MTdiYjVjOSwgMHhiZmNmMDc3ZiwKLQkweDFkYTFjZjhmLCAweDk0OGJmNWUxLCAweDNjZjhhOTJiLCAweGZmZjgwODY1LCAweDU4YTM2NzY4LCAweDZmN2NmOThmLAotCTB4OGI3ZWUxMGMsIDB4NDFkMTU4OWMsIDB4MmIwNGYzZmIsIDB4ZjY1Yzg3YzUsIDB4ZWUzZmEzZjksIDB4NDQ3MzU4Y2IsCi0JMHhmNzFlYTBiYywgMHhmN2E3NjBlNSwgMHgxZTg4Zjg4YSwgMHhmNDQxN2YyZiwgMHg5Mjk0NDQ3MywgMHg0MWNlOWYzYSwKLQkweGY3NDAzZDk4LCAweGIxN2Y3NTYyLCAweDhiMzgzYzliLCAweDY1MWJlZTE4LCAweGFlMTBiZTQ1LCAweGFjMTI1YjE3LAotCTB4NTQ5MDFmMTQsIDB4NGI3N2U1MmIsIDB4MmVmYTI4ZWEsIDB4N2QxYjA0YTIsIDB4Mjg3MjQ3M2MsIDB4NjhjZmI0NmQsCi0JMHhmMTQ1MTg0OSwgMHg4NjM0MjkwMCwgMHgxMjhhMGNlMiwgMHg0MGRlZmVhMiwgMHg3ZWUwMjRiYSwgMHg3N2RmYjhjNiwKLQkweDVkNjgyYmQ5LCAweDNhY2ZmN2JkLCAweGViNDlmNzlmLCAweDc5ODg5YzYxLCAweDFmNTg3OGUwLCAweGZjNDFjZTM5LAotCTB4OWJkYTFjMmUsIDB4ZTMxZWY2NjUsIDB4NGM4NmQ3MWIsIDB4NGFmNDhlM2MsIDB4YmVlZmI1YjMsIDB4ZmRmNWU1MWQsCi0JMHg1ZWIyZjU5ZSwgMHgzMDdmOWU2MiwgMHg4NjY3M2YwYywgMHg2MDVmMTNhNCwgMHg2YzMwN2Y3ZSwgMHgwZmUzY2M1YywKLQkweGU4MDM4MTg3LCAweDYwYzEwNzllLCAweDQyZDgwNjZhLCAweGI5Zjg4MzUxLCAweDZmNTc4ZDA1LCAweDNmYzg5MmQ1LAotCTB4NzQ4N2YzMDQsIDB4ZTc5MDhkZmMsIDB4NjFhZjAyM2YsIDB4YzNlYzU3YjksIDB4NjM1YzgzZjcsIDB4MjU1Zjg0ZjksCi0JMHhjODAwZWQzZiwgMHhmYjRmYzIxZiwgMHhmZDA2NTRkZCwgMHhmYTM2NTQzOSwgMHhlNDNmYWEzNSwgMHg4OGY4MjIyZiwKLQkweDUxZjA0M2RmLCAweGNmOTUyOTdmLCAweGZjZjRiZGZhLCAweGMxMzk3ZjM5LCAweGE4ZmJmNTNmLCAweGEwYWZmMjZjLAotCTB4YWJmODJmZTcsIDB4YmZjOTdlMDksIDB4YTM5ZmUwOTEsIDB4ZTc4NTk4NWYsIDB4YmU1NDc1MTMsIDB4ZmFhMDZmZWEsCi0JMHgwOWZiZmNkNywgMHhhNDFmYzM3ZSwgMHg0YTNmZTQzMiwgMHg5YmY5OGZjZiwgMHg2ZmUxM2UwOCwgMHg3ZjZkZjgyNiwKLQkweDdmNTZlMDg4LCAweGY4ZWY5NTJiLCAweDI5ZjllOGRiLCAweGEzMDQ4N2ZmLCAweDQ1ZmVlMjNhLCAweGUwM2YxOWQyLAotCTB4ZDk4MTcxMjUsIDB4ZTI1ZTdlOGQsIDB4NGJiMzQ1ODIsIDB4MmU1N2RlMDAsIDB4ZDc2MTdkZDMsIDB4NDFkMmY5N2MsCi0JMHgzNDI3OGJlMCwgMHhmYjdiZjY5OSwgMHhlZTI5OTg1NiwgMHhmYjk1ZmJhMywgMHgxNmM3ZDYyYSwgMHhhYTVjZmQ1MywKLQkweDI2OGQ0ODZmLCAweDEyZmY2Y2JmLCAweDU3MWZkZDJiLCAweDk2N2Y3MjU2LCAweGJkYTg1NTJkLCAweGZkNTMyZjkyLAotCTB4OTJlNjJiMTMsIDB4NTM4ZjU4ZGYsIDB4ZDkyYWU3MDAsIDB4MTkzMWQ4MWMsIDB4OTMzMjJkZGIsIDB4MTExZmRlZmUsCi0JMHhlM2NhNGRkNywgMHg0ZjI5M2Y3NiwgMHg4ZmFmZjdlNiwgMHhjZmMyMDU0NiwgMHg2MjliMmIyOSwgMHg3MzU1NzAwZCwKLQkweDMwZTNlMDcyLCAweGM2MmQ1OWJlLCAweDFjOTkxYjYxLCAweGNmYzdkZGZlLCAweGFmMzA3ZmY3LCAweDkwZjlkNjA0LAotCTB4MDNjYTRiZTQsIDB4ZTA3MTdjN2MsIDB4OTlkODNjZGMsIDB4YzNiZGIzMzIsIDB4Y2NlNGYyOGEsIDB4OGQ0ZWQ5ZTgsCi0JMHhlYmNmZDNjZiwgMHhmZTIyNGU5MiwgMHhlMTMyNjlmNiwgMHg2MWI2OWY2ZiwgMHgyZmVlMjY1YSwgMHhkZGY0YzgxNiwKLQkweGYyMDVjNDhjLCAweGU5OWZiODU3LCAweGZiYTY1ZjM3LCAweDk5NGFjYWE0LCAweDgxNmM4MWUyLCAweDAzNjNlMDU5LAotCTB4ZmNkZmJiYWQsIDB4MGVhZjU0YjksIDB4NzQ3MTQ1M2MsIDB4NmQxM2NhZDcsIDB4MDE2ZmQxOTMsIDB4MWQxMTY1N2MsCi0JMHgzOWUyYzUwZSwgMHhiYjg4YjI2ZSwgMHhhNjhmOGZlZSwgMHhmOWM4YjZiYywgMHhmMTdiZmY4YywgMHgzM2YwMDliMywKLQkweDhjZmM0N2FhLCAweDRmM2YwOWVmLCAweGZkZTNmYjg4LCAweDIyMjI3N2M0LCAweDk3N2ZhNGYxLCAweDdkZjEwOWY1LAotCTB4MWUwNmMwZjIsIDB4Mzc2YzhmYmYsIDB4NzMxZmNjNDcsIDB4MmUzYmU4Y2UsIDB4OGZlOTMyOTUsIDB4MjNiODJjMDMsCi0JMHhmOTk4ZTMxYiwgMHg3ZTQzZGQzMiwgMHhiM2FhZDI3YywgMHgzZjNlNjEwNywgMHg5MWRkZjNjOCwgMHgyYzlmZWQwNywKLQkweDhlYTE4ZjkxLCAweGZkZTUyYjhkLCAweDFmMjM1YzBmLCAweDdlMDJiZTQxLCAweGRhMDQ3OTVkLCAweGU5M2JiZjZkLAotCTB4N2Q5NDM2NGMsIDB4OGMxNmVlMDMsIDB4MWY0NjNhYmYsIDB4Zjk4OWY2NDgsIDB4MTYxNzY0ZjYsIDB4ODBmYmJmMGEsCi0JMHgyYjRmYzQ0NywgMHg2NTFhM2RmOSwgMHgxM2RjOWVlNSwgMHgzODA1ZGM3YywgMHhiNWY1MmJhZSwgMHgwMzA5ZjhhOSwKLQkweDkzMGVkY2Y3LCAweGY5N2VjYTA1LCAweGNmMWMzYWYyLCAweDQ5ZDI0Zjc2LCAweGUwMjEyZjFjLCAweGM3Y2JjN2QxLAotCTB4OWUyZGJlZjEsIDB4OTI1YmJmNTIsIDB4ZjFiZGQzZDgsIDB4MzdlMWY0ZGUsIDB4NzlmNWMxZTksIDB4N2Y1MTNlZTIsCi0JMHhlMGY1MWZkNiwgMHg4YTc2OTZlMywgMHg3MGNlMDc1MywgMHgzOGI0YzgzZCwgMHgzOTE3YmZiYSwgMHgyN2Y5NmY0ZSwKLQkweDY0OWY4MTAxLCAweDg4NmYzZjFiLCAweGU3NDc2ZjdjLCAweGYwMjAyNWJlLCAweGYyOGNhZmQ4LCAweGUyY2IyNmI0LAotCTB4ZjY4Y2ZhYmIsIDB4NDYyN2ViZGIsIDB4NzI2ZjliYWIsIDB4ZDQwM2YzMWUsIDB4MWVhZmEwYmYsIDB4OWZhMjYzY2UsCi0JMHgxZmJjYTk5NCwgMHgwMjY3ZWYzMywgMHg0NGYwNDc1YiwgMHhlNGRjMGQ0NSwgMHhlODhmNjAxYywgMHgwMGZkOGZjNywKLQkweDdiYmYxZjdlLCAweDE4YWRlZWM1LCAweDQyZDc3Y2I3LCAweGM5MGU3NGI5LCAweGNlZjQ5YmI3LCAweDFmZGEyNWFmLAotCTB4MmIwZGNjYjksIDB4MTdmNTg3OGYsIDB4OWZhOTdjMTQsIDB4NDhkZTYwNDMsIDB4NzlkNzU2NWUsIDB4ZWMwNTUyNDQsCi0JMHhhZGYwYzI5MSwgMHg4OGI4ZjdiZiwgMHhlMzc5M2ZhMywgMHg5YmNhNThhMSwgMHg4NTEwZGZjOCwgMHg2NjNlZGZmZSwKLQkweDJjNTAzZTI3LCAweDBjM2YzNTIxLCAweDdmODk4YTdmLCAweGZlNzIyN2NmLCAweDdhYWNmMmM3LCAweDcxMzI4MDVlLAotCTB4MzIyMzllMTQsIDB4ZjUxOWNmN2UsIDB4NzVmYmNjMjgsIDB4Yjc3ZjkzOWYsIDB4ZDMwN2MxNjksIDB4ZmUzYzAzODcsCi0JMHgwZmU3NGM5YSwgMHhmY2QxYTVhZSwgMHhjYzFmZjZmZSwgMHg4NmY0Njc5NCwgMHg2NzdlMTc4OCwgMHg2M2RkMDk2ZCwKLQkweGY3MTJjMjRiLCAweDA1NGZiOGE3LCAweGE2MjZmYzc4LCAweDlmN2RmMDg1LCAweDA5YzFmYjQyLCAweGUxNzNlNWQ3LAotCTB4MGFiMjA5N2UsIDB4MjJlZTM3ZjYsIDB4YjhmMmY4YTMsIDB4NmY3MGQ5MGUsIDB4NjM0NWNjNmQsIDB4ODRiZmEwN2IsCi0JMHg3NmE0ZGFmYiwgMHhhMTQ0YmI2MywgMHgxNTIzNWRmZiwgMHg3ZThmZmVmYSwgMHhkN2Y1ZDA2ZiwgMHg2NGM1Yjk3ZCwKLQkweGZmNDlhMjI3LCAweDI0YzlhOTNmLCAweDJhMTY0ZmNmLCAweDc2ZGRiMTA3LCAweGZiODRiYjNiLCAweGJiN2NjNzQ0LAotCTB4YzVhMDdhOGEsIDB4NTU3YTRkMTUsIDB4ZmU0ZDExMTksIDB4NjM5NGY2ZjMsIDB4OWZjMDc2ZjYsIDB4MmEwN2U0NmQsCi0JMHg2YzAzMmJmYSwgMHhiYjE4ODNiZSwgMHhhYjczZWRmZSwgMHgyMThkMjVlNywgMHg1ZGY1ZGUzZCwgMHgzYmIwMjJlMywKLQkweGYyODJmOTc4LCAweDlkZWNkNjk5LCAweDE1Nzk4OTljLCAweGQ4ZWVmYTY2LCAweDdhYjczYzdmLCAweDIyNzdmODZmLAotCTB4MzA3NTI0ZDMsIDB4ODRlYzU3Y2YsIDB4ZTBkZmExNTcsIDB4NDE4ZmI5YzAsIDB4MzNlYTA2M2YsIDB4ZDdjNjFjZjAsCi0JMHgyOTIxN2E4ZSwgMHhmOTA1YmFiZSwgMHhiNjM5NWVhYSwgMHg4NWQwZTI4MiwgMHgyZDU3YTRmMSwgMHhlYTEwZWFiZSwKLQkweGMwYWQ3YTg5LCAweGJhZGYyZTFlLCAweGRjYWFkYzljLCAweGQ1Y2UyOTNmLCAweGJmZmU0OWJlLCAweGU0ZGVkZmE5LAotCTB4MmU1Yzk1ZmMsIDB4MDFjNWJkNzcsIDB4Yjc3ZTdkZjQsIDB4NWViZWM0ZmUsIDB4ZGZkZmMyMWUsIDB4ZTA3OWY0MmEsCi0JMHhiZDQ3YjVhYywgMHhkNzI4NjZiZiwgMHhlZjIyNDUxNywgMHgyOTdjNTY2MSwgMHg1NjdlN2Y3ZCwgMHgzY2M2NWRhMCwKLQkweDJlNTBjZjUwLCAweDFjMTJmYjQ3LCAweDJmYjBjZjk0LCAweDdlMzA4NThkLCAweGVkY2Y5ODFlLCAweGUyMGFkOTAzLAotCTB4NTM4YTc0YTcsIDB4ZDRkYTliZDUsIDB4MGE0M2QyMDAsIDB4MmUyZTkxYjksIDB4ZWZlMTg3ZDgsIDB4NmRkZmQ0NzgsCi0JMHhmOTc3ZDIwZSwgMHhmYzI4YmU4MiwgMHg2M2Y0MWUzZSwgMHg4NTI4MTdkOCwgMHhlNGQ1ZTJkZCwgMHg2ODcxZWJiZiwKLQkweDdlMDA4ZWZjLCAweDgyYjY4N2ZmLCAweGNhM2E4MmUwLCAweDliOWRmNGNkLCAweDc0MjZmN2M4LCAweGFlZGJlMTE4LAotCTB4Y2M4OWUxMWIsIDB4NjI5YWJkZjgsIDB4YWM5ZTExYmIsIDB4NDNhMWUxMWEsIDB4ZjZlMmJlZjksIDB4YTlmM2UzMjQsCi0JMHg2ZmRjMjM2ZSwgMHg5OTk0NjM3ZSwgMHg3OGEwZmZkZiwgMHgwYzE0N2U5NSwgMHhiOGMwM2VmZiwgMHg2NDAxN2Y1OCwKLQkweDYwZjdlMjBjLCAweDIxYWZiN2ZiLCAweGU4ZmY1MDdkLCAweDdlZmY5MjBjLCAweGNhZTIyMjZiLCAweDgxOTViMDBjLAotCTB4ZjNlMzZhNzEsIDB4MmQ4NTljYzQsIDB4YWFlZDdlOTgsIDB4ODdiZTIzOTAsIDB4MmNlNzQ2ZDIsIDB4NzNjMzBmODAsCi0JMHhmMjBiN2NmYywgMHg5ZTZjZTFmZiwgMHhkYzMwZDlmZiwgMHhjOGU4NzkzNywgMHhkZTFjNzlhZSwgMHhjZmNlOWIzMywKLQkweDAzNWY1NjJjLCAweDI4Yzc0ZWZkLCAweDM2ZDJlYzk5LCAweDliNzVkMzk5LCAweDM1YmE3MmE2LCAweDU3NzlkMzI3LAotCTB4NjBiNDRhYTIsIDB4NWQ1ZjM2NDUsIDB4NDcyM2M2MWEsIDB4YzkxZTI5OWEsIDB4M2RmOWUyMWEsIDB4ZDNmYWU3ZjQsCi0JMHgyYzYyNDFmOSwgMHhlNzczNDM5ZiwgMHhmYTQ3ZGJmZSwgMHg0MGQ4OWQ5NywgMHgyYWZiMDNlNywgMHg3ODhlZmE2NCwKLQkweGY5NDAzZGIyLCAweDJiY2ViMDUzLCAweGNlOTYzODg2LCAweDM5ZjlmM2I3LCAweDUwZDdhYzBhLCAweDYyYmNlYjBmLAotCTB4MTAxZjk3ZTQsIDB4YTJmNWY0OWQsIDB4ZjBjMjA2YmMsIDB4MDgxYTcyODAsIDB4YmU2OTliOGYsIDB4OTQwNzg4ZTUsCi0JMHg1MWU3ZjBkNywgMHhiYTE2ZWQ5OSwgMHhkM2Q2MmQ0ZiwgMHg3YWVhZGM5YiwgMHg1NzljNDhhMywgMHhkNzZjNzllYiwKLQkweDFlN2E5OGM0LCAweGZmOTEwNmRiLCAweGUyMzRlY2RhLCAweDI0Zjk1YWUxLCAweDZiNWMzMzhhLCAweGViZWQxMzliLAotCTB4MmY0MThlNDksIDB4MmY1YzZjMDQsIDB4ZGUxZGI5NjAsIDB4N2JkZmI5NDMsIDB4MWM1NGUxNjMsIDB4MjA0NGY1MGYsCi0JMHgxNjE0N2JlYywgMHg2ZGZmYTdjMSwgMHhjMjIxYjNiZiwgMHhlZmZiM2YyZiwgMHhmOTE4NmE0NywgMHg5ZTIwOGY5ZCwKLQkweGUzOWMwNzJhLCAweDc3YzVlZGY3LCAweGI2NzgyY2JjLCAweDNlYTVjZjA3LCAweGNiN2FhZjljLCAweGNhZTlhZjFiLAotCTB4YmFlM2I1YmYsIDB4YmZiYzg4YTUsIDB4NWFmODExMmIsIDB4YmZhNWYwMmYsIDB4Mjc0ZDQ1N2YsIDB4MmQ2OTVkM2MsCi0JMHgyNzg2ZjdiNiwgMHgxMzI3ZjQyNiwgMHgzMzJmMTNmYSwgMHhiYjNlMmFjZSwgMHhlYzYzNDEyMSwgMHg5ZmRmZTc5OSwKLQkweDY3MWQwMzI3LCAweDk4NWIzZWFkLCAweGNmOWJmMDBhLCAweGNmYzM5ZWZmLCAweDNmYTk3ZDljLCAweGVjMzYxZDM0LAotCTB4M2RmODc5ZjMsIDB4OWQ4ZjU5OGMsIDB4YTFhMjk2YmQsIDB4ODVkZTI2ZGMsIDB4OGE3MGMzZGYsIDB4YmU3ZDE5NzMsCi0JMHgwOTJmNzhmYSwgMHhmMWI1NTk3ZCwgMHg5MDY3MWUxZSwgMHgzNTc3MjRiZCwgMHgwMWM1MmYyZSwgMHg3MGVmOGNiZSwKLQkweDU1NDJmOWUyLCAweGQxNmI4NzQyLCAweGQ1N2VmNDRkLCAweGZiZjk3YmM2LCAweDBhMzUzZTk4LCAweDVjYjg4OWYzLAotCTB4ZmJmM2Q2Y2QsIDB4ZmRmOThkNGIsIDB4ZDIyYWU3NGUsIDB4NTAxNjM2N2IsIDB4ZDk0NDJmNTEsIDB4ZWViZTc0M2QsCi0JMHgzYTI2ZTYxOSwgMHg3MmI0YzlkYywgMHhjZWVlYmU3ZSwgMHg1YWNjZmE0MiwgMHgzZmQxZWE2ZCwgMHhlN2FhMWQ2YywKLQkweGQ1YmU4NmZiLCAweDJiZGM0Y2I4LCAweGRhMjQ1Mzk4LCAweGM2NWZlM2E5LCAweDdiMzRlZTcxLCAweGYwNWZhMmI2LAotCTB4NDgyY2M2N2YsIDB4Y2Y0MWI3NDAsIDB4NzVkMjFhN2YsIDB4YWRkMGVmNGYsIDB4NzU5Y2ZmZGMsIDB4NDk2ZGM0ZGUsCi0JMHhmZjI3OGYwYywgMHg1NzVmMzg3MSwgMHhlZDAwOWM3OCwgMHhmOTc0NmY0NiwgMHgzYzVkMWJhYywgMHg4OWFkMDcxNCwKLQkweGE4YmE3MGYzLCAweDQ4Y2RjZTFkLCAweGQ3MGVkODk3LCAweGQ3ZGViYzk2LCAweDExM2U4ZGRmLCAweGY4MmFiOGY4LAotCTB4ZTQyYmZkMWUsIDB4OWZjMjZmZDcsIDB4NGYzZDFmNGUsIDB4Y2VlNGM2YWMsIDB4NDBlNjdmMjIsIDB4MTQ3YzQzN2YsCi0JMHhhZjZlMDIzNiwgMHg3NmZlNjdhMywgMHhjODhmN2Q4NywgMHgzOGE1ZTQ5YSwgMHhjYjVlMjU5MywgMHg5YWU2N2NjMSwKLQkweGU2M2Q0OWJmLCAweGUzMGY2Nzc3LCAweDY3NjZmMzdlLCAweGFmMTdkZDM0LCAweGJlZTk1YTcxLCAweDI3NzM4YjVhLAotCTB4YWVjZDNmNDMsIDB4OTRiYzIzNmMsIDB4ZTYxOGViMzgsIDB4YjNhNmQ1ZDEsIDB4MDZlZGZlMjYsIDB4YWQ3MTVlNjMsCi0JMHhlZjVlNmVmMywgMHg5ZGFjYjNlMiwgMHgyZTMxZWJhNiwgMHhiNGU3YjVjZiwgMHg4MTAzYjQxOCwgMHhhZjJlZGZkMywKLQkweGJmZTc2ZTU4LCAweGJkNWJkMjViLCAweGNmMWE2ZTMzLCAweDI5NWE3NjJiLCAweGIxOGE1OGFmLCAweDU3OTRmNzU2LAotCTB4YzdjMTE3ZmMsIDB4NzhiZWI4MmQsIDB4YTc4ZjBmNWMsIDB4YmJiMmViZTksIDB4M2UyM2ZlNzksIDB4ZDU5YTc4YzcsCi0JMHhhZmRmYTNlZCwgMHg5N2ZmZDdkMSwgMHg3YTJlOWNhMSwgMHg5YWJiOWI3YiwgMHhhYzk3ZGVhMSwgMHhhY2Y1MWI5YSwKLQkweDg4NGZiZTI0LCAweDRjMjcyNDc2LCAweGZmZTNlYTVmLCAweGVmODVhODY5LCAweDRhOTUzNTk3LCAweDhkZGI5ZGIzLAotCTB4MzllZWJmNTksIDB4MzBmNDdjM2YsIDB4OWRjOTJkZDMsIDB4Y2RiMzM3Y2UsIDB4OTc0NjZmM2MsIDB4ZDU4YWI5ZWYsCi0JMHg1Y2MzN2U4MywgMHg3YWYyODkyNSwgMHgyZmVhMDJlNiwgMHhmZmI1ODVjNiwgMHgxZWZjNWRjZSwgMHgyMTI1YWNhYSwKLQkweGVlM2ZiZDNmLCAweDA3ZGY5N2I2LCAweDJlOTgzZGYwLCAweGE5YmRlOWUyLCAweGY1OWZiYTE2LCAweDcwNzk4OTllLAotCTB4Yjc5OTE5ZWIsIDB4NGVjNmY1ZTgsIDB4MWRlM2VkYzYsIDB4YTJkNmNlMzMsIDB4NjIwYzY2MzgsIDB4YjBlNDNmNzQsCi0JMHg3OGU3NjJiMywgMHhjY2MzZmU0NiwgMHhhZTYwZDA2MSwgMHhkZTMyNmNhZiwgMHg5ZTVkOThjNywgMHhhZmI2MTZmZiwKLQkweDhmNDA3NjEyLCAweDQ5ZjU1NzE3LCAweDkxZmU1MjBkLCAweDZjMzM5YmU0LCAweDNmOGRjNjI0LCAweDYyNDI1NTlkLAotCTB4ZGY0YTkxZGYsIDB4NGY2YWVjYmQsIDB4ZjZiMGUzNzEsIDB4ZDNmYjQ1ZjMsIDB4MWQ3MWM0NjksIDB4MmI4M2RkZjQsCi0JMHgzZThiYjFlYSwgMHhmMjg3ZDEzNywgMHg4YmYxMjIyMSwgMHg5ZGZmMGE3NCwgMHhhMDdmNWQzNSwgMHhmZTExNjdkZCwKLQkweDQ4ZmMzODc5LCAweDEzZGQzOTRjLCAweGJkNTdlZGQwLCAweGY1NzhlN2E1LCAweGJkMDk4NmFmLCAweDM4YWRjYmE5LAotCTB4MWYzM2IwODcsIDB4NGM5MTM0NWQsIDB4MWVhN2VlNWUsIDB4NjdkOWY2N2QsIDB4ZWE3ZTVkNWQsIDB4ZjQ5ZjYxMGUsCi0JMHg4MzMzYTI3ZSwgMHhmOThkMTk1NCwgMHg1NDlhNTAyYSwgMHhhY2EzZjEwZiwgMHg2MDA1Mjc1NiwgMHhkYWZmZGI5ZCwKLQkweDI3ZjdmZGYzLCAweGYwMWU3OTc1LCAweDJmYjYxMjYwLCAweGIwNzJmYjcxLCAweGRmMTdjYzhjLCAweDA3MmNiYTk2LAotCTB4MzRkYjcyZTUsIDB4OTQ2YWVlZGQsIDB4OWNlZGJlMzcsIDB4YmU3NDM3ZmIsIDB4MWJjZjBlZmEsIDB4OWQ5MDE5NmYsCi0JMHg0YTUxNzk4OCwgMHg1OWJlNDVhYiwgMHhlNDE1YTY1ZSwgMHgzZDEzN2RkNSwgMHgzZmY3MTU2ZSwgMHg2MzFiMWRiNywKLQkweDM2ZjRmOGM3LCAweGNmMGRhMGE1LCAweGYxMjliNzc3LCAweDUzNmRiNDA1LCAweGRlOTAxZTc4LCAweDVlNzg1MTVlLAotCTB4NzhmMWEyOWUsIDB4YmNmMGEyYjcsIDB4YTc3ZjNkMzksIDB4ODRkYmMwNjUsIDB4MDNkZGJkMGYsIDB4OGQxNWFmODIsCi0JMHhkMjg4ZTNkZiwgMHg1ZDlkYTgxYSwgMHhiMmY3ZDJmNiwgMHhlMjhjZjFlYywgMHhmZjk1NzY1MiwgMHhhNjc0NTBlZSwKLQkweDkwN2JkOTk5LCAweDJjYzNiNWQ3LCAweGU1YjYxZjY0LCAweGEyNGRiNDE1LCAweDE0NmVjOWY5LCAweDA1NDk2ZDkzLAotCTB4MTE0N2E0NDksIDB4OGQ3ZWYwZWYsIDB4MzE2ZjEzYTMsIDB4MGE5ZmM3ODgsIDB4ZDRmZGViYmMsIDB4ZGU3NWYwYjQsCi0JMHg0MTc3NzFiYiwgMHgyM2Y0NWY0OSwgMHg1ZjkwODdiZCwgMHhlYzhiMjliNywgMHg3MjQ2ZWY3OCwgMHhiZmI0ZGUxNCwKLQkweDQzMjY2MWU2LCAweDdmNTc2NjNlLCAweDdmNDUwYTk3LCAweDI0ZmVjNTNmLCAweGZkOGE4MTQ3LCAweGJmY2Y1ODU5LAotCTB4ZThiNmY4YmIsIDB4ZWYzZGVmZTcsIDB4ZmEzNjBjYzAsIDB4MjI2MzA4ZGUsIDB4ZDQ5NDI2OGYsIDB4Mjc2MWY5ZDMsCi0JMHg2MzFjZjBmZCwgMHhmZWY3Zjc0NCwgMHhiZDY3N2VkYiwgMHhmZTA5ZGUzMSwgMHhiZjUxNmZlNiwgMHg3YjlkZTY1NCwKLQkweGUxM2QxMjdiLCAweDY4ZDZlNmZlLCAweGJmNzQyZmFlLCAweGZiNzk1NjUxLCAweDBmN2U2NmFkLCAweDlhYmVmZjU1LAotCTB4YjFjYTQ3ZWUsIDB4ZGQ3NDNjNDYsIDB4Yjg3NGUzMDMsIDB4YzgzOGYyYWEsIDB4N2M1MTg1NTUsIDB4YWZhZTUyMjYsCi0JMHhiODZlM2E5ZSwgMHhkODc2ODE0NywgMHgyYzcxZmMyMywgMHgwY2Y0Y2ZkMSwgMHgyZTI5NzNjMiwgMHhhM2RjYmFkZiwKLQkweGViZmQ0NDRlLCAweDFmN2Y3NzI4LCAweGE4YTRhYmJmLCAweDMwYjdjYTY2LCAweDVmMTJmZjAxLCAweDkyNDNkZTc3LAotCTB4YzZjZmY0N2EsIDB4MzU3NGU3MGQsIDB4MjQ2ODU2MjUsIDB4YjcyODRhZTcsIDB4ZTAzZjM5MjcsIDB4NzI4Yjk1M2EsCi0JMHgxZWNiYTA3ZCwgMHgwM2FlYjhhYiwgMHgxMzg5ZGNlNywgMHhiZjVjZTRjMywgMHhiZmY3YTIxZiwgMHgzNTY0ZTRmZSwKLQkweDc0ZGY1ZDdjLCAweDZlNzljMmZmLCAweDhmNjRmZGU3LCAweGZmMWVkYzVkLCAweGQ4YzdkZjZmLCAweDQwYWViMmVhLAotCTB4MzI2Y2RmZmIsIDB4YzM5MWU1ZWEsIDB4ODZkNjNlYjksIDB4NzVlMGY4OGIsIDB4YjNiN2VlOTksIDB4ZTFiNGJlYTEsCi0JMHhkOThiM2Y4MCwgMHhmOTdhOGU1YiwgMHhkZmRmMzU0MCwgMHgxNDk5YjFjYSwgMHg3ZWIwMzk4NywgMHg4MjllNDQ1YSwKLQkweDMwZjBkMDZmLCAweGIzYWEyYzc5LCAweDg1YWJiZTkyLCAweDAzZWQwNzdkLCAweDQ5MWFlODIzLCAweDNhZmU5ZDJmLAotCTB4ZTdlNzI4ZWMsIDB4MjdiZDNhNzIsIDB4OTEyMTJhMjYsIDB4ODlmZTRjMDcsIDB4MDk5OTdlMmIsIDB4ZGNhYjlhZjUsCi0JMHhiMDM5ZjI2NywgMHg4MWQ5MWI3ZCwgMHgxMTVkZGFkZSwgMHhhZjZmNGZmYSwgMHhjZTBhZmY2MCwgMHg3M2UyODBhZiwKLQkweGEwZTc1MDU3LCAweGZjZjZhNDlmLCAweDUxOTc2Y2ZiLCAweGVjN2UwNDk4LCAweGIxZTcyZWIwLCAweDJiZjYyYWE5LAotCTB4YWI3OTNmMDksIDB4NTFhZjZmYzgsIDB4YjA5ZWVkMGIsIDB4NDJkOGE1ZjcsIDB4M2UzMGE0ZmIsIDB4ZGUyNWU5YTksCi0JMHhjN2FlMWZlNCwgMHhlZmI0NDM5YiwgMHg0ODEwZWZkNywgMHg5ZTYwZDdlOCwgMHhlZTVmMjJhMCwgMHg3ZWQwNDc4YywKLQkweDlkZjBkNGEyLCAweGRlZmM3ZDQ1LCAweDVmMzllZGNmLCAweDY5MGI1NTVmLCAweDAxOGYyODFmLCAweDBiZmMwMTdmLAotCTB4ODE5MmVjNTMsIDB4YmUyZDM3NjQsIDB4ZmNjNDRlN2YsIDB4MjhkYWRmOTUsIDB4MjEyM2Y3OWYsIDB4M2U0MmVkOWYsCi0JMHgwMTYzZDM3YiwgMHgyZDJlOGM3NiwgMHhmMDI3NjE2ZSwgMHg0OWYwMDhkMiwgMHg0OWYyMGM0MSwgMHg3MGQ5OGE0ZCwKLQkweDliOTdhM2FlLCAweGUyNmYzYWM0LCAweGJmMGY1NGU3LCAweGMxZTczZjM1LCAweDM5ZjgzZGUxLCAweDlmODRjN2U4LAotCTB4ZTJmZmEzY2YsIDB4ZTg5YmQzMDksIDB4ZjA3YTc4YmYsIDB4NjJjZGVhNzMsIDB4NTNjZTI3ZmYsIDB4Y2RkYzViNGYsCi0JMHhkMzk3ODBlZCwgMHgzYmU4NjIxMywgMHhmODdkMTkzZiwgMHhlOGQzZGYzZCwgMHg3ZjgwMTVmNywgMHg0Y2Q5Y2NmNywKLQkweDUzMmNkNjI0LCAweDg0M2E3N2U3LCAweDA2MDhjOTlmLCAweGNhMjc2ZjNmLCAweGFlZjMxOTQ1LCAweGQ1YmRkZmMyLAotCTB4ZGY4OTg4ZTUsIDB4M2EyNmY5YTMsIDB4ZTBkYzA2Y2YsIDB4M2RlM2I2YmMsIDB4ODdiYTNjYmMsIDB4MzlkM2RhNTcsCi0JMHhmZTRlYjFkZSwgMHhjN2E2MTMwMSwgMHg0MDFmMDhmYiwgMHg1YTM4YjA5ZCwgMHg0NDYwZjhiNywgMHgzMWMzMTAzYywKLQkweDE5YzVmOTlkLCAweGJmNmZkYmRkLCAweGY5ZjhhMjYxLCAweGUyMGIxZjJlLCAweDUxZGMwMmVmLCAweGJkZGY4YzY0LAotCTB4NzZkOWYyMjUsIDB4N2YyNDYxMmQsIDB4NDI5YTcyYmIsIDB4NmEyNDVmZTgsIDB4NjVmMWUyOGMsIDB4MzlmYjYzMWUsCi0JMHhiZGRmOTFhNSwgMHhlZWY5YzYzNiwgMHhlNzIyNWFmNCwgMHhlYmI1ZGY0YiwgMHg3ZmQ3ZDYyNywgMHhmZjhhMmFjZiwKLQkweDIyZmRjNjQ1LCAweDNlYjQ3ZGUzLCAweDNjODUyM2I0LCAweDE4NTRhZmVlLCAweGY1MWNiOGYzLCAweGQ4YmJlODMzLAotCTB4NzE0YWY4NjAsIDB4MzMxNGFlN2QsIDB4YTNhYzM4YzMsIDB4MmRjZjMyM2MsIDB4MjFlY2YwMjAsIDB4NTllM2E2NjUsCi0JMHg5Mjg5OWVmZiwgMHg2YmRmZTY2ZiwgMHhmNTQ2ZGMwZCwgMHg3ZTFkYmU3YSwgMHhhYmEyNzE3NywgMHgzYWNhNWQ2YiwKLQkweDExN2M5ZjMxLCAweGJjZjQwZGNmLCAweGQ3MTg1ZGFlLCAweGJjZThiY2M0LCAweGQwODRkMDM2LCAweGM2MDVjZTFmLAotCTB4ZjQ2MGFlNDksIDB4Yjc1ODU3YmQsIDB4ZjBlMjVjZTEsIDB4ZmEyNjJkOWUsIDB4YTMxZjBmMWQsIDB4MWUwMWExZWYsCi0JMHhjYzE2ZTc4YywgMHg1ODUwZjE0NywgMHgwMzljZTFiZiwgMHgyMzgwNjlkNiwgMHhlNGRmMDFmNywgMHg5M2RlMWZmZiwKLQkweGEyNzdlM2RlLCAweDI3OGY1MmY1LCAweDYxMzM4Yjc1LCAweDJmYTQ4MDA3LCAweGJkZjM4Yjg2LCAweGZhMjg2Y2ExLAotCTB4MDZmZTRhNDEsIDB4MTQ5NWMzYTIsIDB4NzJjYjVmOWUsIDB4ZGJkZjNlN2EsIDB4ZjdlMWZkMDksIDB4NzI4ODdlOTMsCi0JMHgwMTcxODA5MiwgMHgwNGRlZjg2NiwgMHgwZjc0YzhmMywgMHhlN2M0NTRjMCwgMHhlNWViZWE2YSwgMHg0OGM3OTc0MiwKLQkweGNjZDE2ZGJlLCAweGE2ODQ3OThlLCAweGVhMGY2ODgyLCAweDYwMGQ5YjEzLCAweGY4ODUyZWZjLCAweGVlMjRiNzRlLAotCTB4MjgzZmZkM2YsIDB4MDA4MTJiZDQsIDB4MDAwMDgxMmIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4OTA5NWZmMDAsCi0JMHg1MGMzNGIzMSwgMHg5N2JmODUxNCwgMHg0YTM2YWM0NiwgMHgxMDU2ZGFjMSwgMHhhODUwOGEwOSwgMHg3NTVhNTA5NSwKLQkweDk3Mzc1NDMzLCAweDIyMWQwZThjLCAweDM4YmEzODNhLCAweGZjNWQyNTFiLCAweDA5ZjljZTAxLCAweGU2ZTI4NGZlLAotCTB4NDgyYWUwZTYsIDB4MjJiZjgyOTAsIDB4MjZhNjk3ZGUsIDB4Y2JiZDA4MjAsIDB4NzdkZGU3NzksIDB4ZGRmNzNkY2UsCi0JMHgyZThkY2MyYiwgMHg1ZWNhNzU1MCwgMHg3NTYxOTA0NywgMHg0NDQ1MDZkMiwgMHg5YWVhMTE1MiwgMHg0N2UxNzUzNiwKLQkweDNjZDZhNWE0LCAweDdjMjJjMTI4LCAweDRjMTIwOTJlLCAweGVjYmJhYTc1LCAweGZiZDQ1YWIyLCAweDVmZmVkMjQ2LAotCTB4NzNlNGVjNmYsIDB4NzU2OWZkNzMsIDB4MjdlN2NhZDIsIDB4MjJmZjhlYmEsIDB4YmE3N2U4OTgsIDB4MDA4MzlkMTIsCi0JMHhlNGUzZTFkNiwgMHg2NWY2OGZiZCwgMHhjODc3M2QxMywgMHg1Zjk0ZGNhYywgMHhkNTNkYTNlOCwgMHgzOTcwMDc5YiwKLQkweDNhZGYzNzZiLCAweGRiZTIwZDQ2LCAweDBhYThmMzhhLCAweGE1NjcwNDdiLCAweGZkMzk4Zjc0LCAweGVkMzQ3MzdlLAotCTB4YjBhNTZmMmQsIDB4ZWYzN2U2NTcsIDB4YmY4OTY5NWUsIDB4YzIxYjcxYTUsIDB4YzFlYzg0ODEsIDB4YzgxNDQ3YTgsCi0JMHhiZTBkYWFkMSwgMHhiOTQxN2RjZCwgMHgzZTk5Y2I4YiwgMHhiZjA1YzU5MywgMHg2N2ViODFmMCwgMHhmM2JhNzkzMSwKLQkweDg0MTZiZjBmLCAweGNiNjJiY2JmLCAweDVmMWRkN2ZmLCAweDdmNzRmNjhkLCAweDZiN2QyMzhjLCAweGJiOTJmNzJjLAotCTB4NTBhOGRjZTEsIDB4ZDlmNjk1ZjgsIDB4ZjQxMTJlZDUsIDB4NzM4ZGJjZjMsIDB4ZjNlNTY5ZjEsIDB4NzQyYjAwN2UsCi0JMHgwMjUwNTc0NywgMHgwMDAwMDI1MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4YzU1NDdjMGIsIDB4M2Q5Y2Y4YjksIDB4OTI2ZWVjZTcsCisJMHgyMTI2Y2RkZCwgMHgyNmMyYmMyMSwgMHhiODBkNDQwMSwgMHg0MWEwMGM0MCwgMHg5NDUyMGYzNywgMHhhMmExZTFhOCwKKwkweDI0Nzg2YzIyLCAweGY2MjJlZjIxLCAweGRkYmYxZjYyLCAweDUyYzQ4OGYwLCAweGQ0YzUxZjFiLCAweGIwNTE3NjhiLAorCTB4NDAzNjhiZDEsIDB4NWMxNzU4ZDAsIDB4NmQ4YjQ1OWUsIDB4ZDVhMDQ1ZTgsIDB4NWU0MDEzN2EsIDB4YTU0MGIyMDYsCisJMHhjZmZkNDViNiwgMHhkZDljY2RmNywgMHgyNjM2NGU3MywgMHhmNmZmZWY2YSwgMHg5ZmRiZmZmZSwgMHhjY2NjZTYxZCwKKwkweDdjZGYzMzM3LCAweDliZTZiZGYzLCAweDkxYmU2NDg5LCAweGYyMTM4N2Q4LCAweDI1NmVmYzI1LCAweDEwODk1MWU0LAorCTB4OWI0ZTE4OTIsIDB4OWZjNjkzM2MsIDB4ZWRiMTA5OTQsIDB4M2JlYTI0N2UsIDB4OWUwYzg0OTksIDB4ZDE0NjcwNmIsCisJMHg2NDA4NWZhMiwgMHgyMTA2NGI0ZSwgMHg3NThkNjVjOSwgMHg3OTNkZmE0NiwgMHhlOGJjN2Q5MSwgMHg5ODE5YzMwOCwKKwkweGJkYmFlNDdjLCAweDcyMGM4NDA5LCAweDgyNjZmNmQzLCAweDdmZTkyZmJmLCAweGM2MzdiNzNmLCAweDc5Yzg3NDkxLAorCTB4ZTEzMWEyODUsIDB4YmM5YTRhZmEsIDB4ODc3YmZhNDgsIDB4MTQ5YmJlYWEsIDB4NDhkZGE2NzUsIDB4ZmQ1MWZiZmIsCisJMHg5MDg1YjcyMCwgMHg0Njc4YzMxZiwgMHg0MGNiYTk0MiwgMHg3OGI4ZThiMiwgMHhmZDJlNmY1ZCwgMHhhZjBlM2EzZiwKKwkweDI5NWJlOGNkLCAweDFjMWEyMjEwLCAweDI0MjQ0NGIxLCAweGEwNDgyMzI2LCAweDY3OWZiZTlkLCAweDQ5ZDdlZDNjLAorCTB4YWEzNmE3MDgsIDB4NDllNzRhYzgsIDB4MDg5NmI0YzgsIDB4ODA4OTcyZjUsIDB4NzZjZDg4NzgsIDB4NzhlOTdiMjUsCisJMHhlMjJlN2Q1NywgMHgyMjBkNTdiYywgMHgyN2Q2OWRhNCwgMHg2ODRlZDM5MiwgMHg2MWM0OTUzYSwgMHgyMzJkYzdiZCwKKwkweGQ1N2U0MjA2LCAweDA3MTIzZmFlLCAweDE5OWIxYjg1LCAweGRjMTU1ZTI0LCAweDBlMjEwZjA2LCAweGM3YWZjNTEzLAorCTB4OGYyYWU5OGMsIDB4YzRjOWE3OWQsIDB4YWIyMTBkNzEsIDB4NTc0YzBlM2QsIDB4ZmE2MzQ2NzksIDB4ZGIyN2QwZDgsCisJMHhmOWQwMDY3MywgMHhlOWQ4MzIwYywgMHg2MzgzNDg0OCwgMHgxMTkxZGRhNiwgMHgyZGM3Mjc4NiwgMHgwOTM4ZTczMCwKKwkweGFlMjkyNmM5LCAweDJmNWE1NGM0LCAweDRkYzg0MGQxLCAweGYzNDJkYzg0LCAweDE5MDgyMzc1LCAweDUwODRlYzQ5LAorCTB4YmM5MzNkZmMsIDB4MDE5ZGNhMmMsIDB4NDVlNjA3NzksIDB4N2NjMzcxMDMsIDB4MmUwMzMyNjMsIDB4YzYyZGUyOTEsCisJMHgxYzk1Y2Y2OSwgMHgxYmY4ZWZlMSwgMHg3ODVmZGY4MCwgMHhjMWQ2MTUyYywgMHhlZmNjMWI3ZCwgMHhmMGVjZTIxOSwKKwkweDQ2ZGQ5ZTAyLCAweDdmNWEyNmU3LCAweDVlNGNlY2E1LCAweDQ2OGFlMTRhLCAweGFkODMyZWRhLCAweDFlMTA5NGJiLAorCTB4MWZjMDRjZGYsIDB4YzljYzhmZWQsIDB4MzBkN2FjZDUsIDB4YjQyMjQ3MTgsIDB4ZWIwNWRjNzMsIDB4NzViMjcxNjQsCisJMHgxNTc0MDk1YSwgMHhmMmU2MWQ2MSwgMHg3NzY1NTg3NSwgMHgzOGZkMTlkOSwgMHgxMWZhMjQ0OSwgMHhiMWZhNWFlZCwKKwkweDhmZTk2ODY0LCAweGJhOWZiMTdlLCAweGJmNjllNzllLCAweDNiZWQ0MjRkLCAweGJkM2NlOTUzLCAweDRkY2UwYzRiLAorCTB4YTE2MGRiZjQsIDB4MGFmODAwNTEsIDB4ODBjNDI1YmMsIDB4NDFmOTJhZmQsIDB4NjNhMDUyNjUsIDB4MTc5ZTFhYjQsCisJMHhmNmY3ZTljYiwgMHhlZmNmNzMwZSwgMHg1MmUyMDYyZCwgMHgyYTUzNzJlOCwgMHhjZWM0Nzc3YywgMHg2NjI2ZTNhMCwKKwkweDZiNGNlYzQ3LCAweGU5ODdmMWNmLCAweGM5MjVkOTI0LCAweDRjMGVlZjQwLCAweGFjNDcwNDFiLCAweDQ3N2NlMzAwLAorCTB4OWMwNDliMjQsIDB4ZjZhNDcyN2YsIDB4MDhlZGQzZmYsIDB4Mzc3YWUxZjEsIDB4ZGE1NDc1ZjAsIDB4M2QyMDNjNTEsCisJMHg0NjhiMWY3OSwgMHgzNDUwODgzYywgMHgxN2U3MGMzOSwgMHhhZDE3Y2YxYywgMHg0YTQzNGY0NSwgMHg1ODY4ZTM0OCwKKwkweDg3NWY5YTVmLCAweDc5YTY2M2Y0LCAweGIwOWJlNjJiLCAweDNmY2ExZWRjLCAweGFjYzllNThiLCAweGJhNWU1ZDNlLAorCTB4NTVlM2JkMTgsIDB4NmVkYTE3NTksIDB4NDI5MWMyMDMsIDB4Mzg0NDVlNzAsIDB4OWJiZjUwOTYsIDB4OTQyMDNmMzAsCisJMHgxZmQ2MjVmZiwgMHhiN2Y3ZWFjYSwgMHhjZWVkMjUxZiwgMHhmOWMyOWUwZCwgMHgwMDNiMmViZiwgMHhkNmRiYzI5ZiwKKwkweDJlOTRhZGMwLCAweDdjMTA2ZTBlLCAweGVjMGY5YTI2LCAweDc1ZmU0MThjLCAweDlmMGNmZDdlLCAweGQ3NjdlMjg5LAorCTB4ZWEwYjkzMzgsIDB4ODM5OGRmOWYsIDB4ZWZlZGJjZjksIDB4NWU1YTI0ZGIsIDB4MjA5NDVkYjUsIDB4ZDY3OWQ4NmYsCisJMHg1YmYxNDFkNiwgMHhmYzdmNmE2MywgMHhiODNkZmE2NiwgMHg2MDJmMjQ1ZCwgMHg5ZjcxZDM3NywgMHg0OGI0ZTI5ZCwKKwkweDkyZjk2MzNlLCAweGRhYWQ5NjI4LCAweGMwMWU2YmIwLCAweDkxMzM2YjJkLCAweGVhYTcwYTI4LCAweDZmM2JkMmNkLAorCTB4MDNkMmY5YTYsIDB4NTUyYTgxMzIsIDB4ODM4Y2VhOWIsIDB4NGY4OTdlNjksIDB4OGFmYzgxNjgsIDB4M2Y2MDFmOWQsCisJMHgwY2E0YjlkZCwgMHhlMDM5ZjdmNiwgMHg3NTJmOTQ1YiwgMHhlZTkzZGFkYiwgMHg3ZGNiZGZhNiwgMHg3ZWEwMGE1YiwKKwkweDA5YzE2NmY5LCAweDdlYmU1YzRiLCAweGJmMDA4N2Q3LCAweDIxMWU1NWJjLCAweGNkMTVmODUyLCAweGRhYTFjNDMxLAorCTB4MTdkYjc5MmYsIDB4YWRlMzA5ZGYsIDB4OTQyNjQ3N2EsIDB4YWJiMjkxZWQsIDB4MTg5MTE5MGYsIDB4ZTAyMzQ2YTQsCisJMHgxM2QzNmFiNSwgMHhlNzliZTA0NiwgMHgxZmIwMDczYywgMHgyZjU1OWYwNSwgMHhiYjY4N2VkMywgMHgyNzA0ZDdlYSwKKwkweGMwZGFhZDRjLCAweDM3ODVjZGY4LCAweDY4YmNlNmEzLCAweDE5ZDU3OTgxLCAweDM3ZmI0MTQ3LCAweGJkNDIzNTFmLAorCTB4ZWJmMTVmNTIsIDB4ZGYxODBlNTEsIDB4OGMwMTYzMDYsIDB4NjMwNmZkNzMsIDB4NTY2ZjhhODksIDB4MzM1NmZmMzQsCisJMHhlOTRkNTNhZSwgMHhiZDE5ZGQwMywgMHhjZTM5ZTdhZiwgMHgzOTdjOTViNywgMHhkZjQ4NDAxNSwgMHg0MzM4Y2Y5MiwKKwkweDMzOWU4N2M1LCAweDU3ZmQyMWM0LCAweDExYzQ4YjM0LCAweGRmNzgxZjgxLCAweDg3NjBmYmU3LCAweGJlMDNmMTk1LAorCTB4YzBlZDRiNWUsIDB4NzVlYmMyMWEsIDB4NGZkN2NlYzksIDB4ODhjZDY2MGEsIDB4ZTcxZWU3YzAsIDB4Y2I5MWEzZjIsCisJMHg3ZTQxMjc4ZiwgMHgyZTY5ZjRkMCwgMHhmOTcxZDYzZiwgMHhlMjcxZTRkMSwgMHg5MzNkNjdmNywgMHg3MWVmNWQzMCwKKwkweDY3YmNmYTYxLCAweDRmM2VhNjFhLCAweGMxN2JkNjExLCAweDhkZDMwNzMzLCAweDdmN2UzNzFlLCAweDY5ODY1M2M5LAorCTB4YmYxNmE3YjMsIDB4OGU1OWUyYmYsIDB4MTc4ZjY2ZTksIDB4NTllNmJmYmYsIDB4YTc4YjY5ODMsIDB4OWVhZGQzMTEsCisJMHgzZDViNGMyNiwgMHhiYWY3YWMzZSwgMHgzNmQzMTlhNywgMHhmZjdlMGI0ZiwgMHg1MzBkYTdiNSwgMHhlOTgwMjdiZiwKKwkweDlhNWY1ODRlLCAweDk4ZWQzYzA2LCAweGMzMWNmNmVlLCAweDAzYTdhZjc0LCAweDljZjdlZGRiLCAweGM3MmQ3NGMxLAorCTB4ZTQ5YjJkYmIsIDB4MzY2ZjE0NDgsIDB4MTgzOTQxMTcsIDB4OTFjYWU4NWYsIDB4ODhiZTNlNjksIDB4N2FlNjkzZTUsCisJMHg5ZjM0OGM3MywgMHg4YTc5YTZlNCwgMHg4MTk1YzFjNywgMHgwZmNkMTMxYywgMHgyOWU1NjVhZSwgMHg2NmI5MjQzZiwKKwkweGIyZjE0ZjlhLCAweGFlYjViNGYyLCAweDRmOWEyOGRjLCAweGEzZTU2NDZiLCAweGEzNzM3YmQ2LCAweDhmOTQ3ZTY5LAorCTB4MzliNzVmOTUsIDB4ZjM0MzFiOTAsIDB4ZjJiMGI1ZDcsIDB4Njc5MjdlYjEsIDB4MDFiMWY5YTEsIDB4ZDA3ZjFmOTYsCisJMHhmOWE1Njc5NSwgMHg5ZjJjZWRmMSwgMHhjZjM3YTFmNSwgMHgxZDU5ZjM0NiwgMHg1ZDRkZmRhYywgMHg5YTU4YmM4MSwKKwkweGNhYzgyOWJmLCAweGYyNGFiOTZmLCAweDJlNDAwM2VkLCAweGI1Y2Y5ODBiLCAweGQxYzdlNGU0LCAweGU1OWRhZTdjLAorCTB4NGIxNjg2MGIsIDB4YjdmNDA4OGUsIDB4MDg1OGVlNTMsIDB4YjA4NjdjMjIsIDB4N2U1MTI1ZDEsIDB4ZjFkOGQzYjMsCisJMHg2NDdkMTUxMCwgMHg0YmFhZjBhMSwgMHgyMDMzZmNhMiwgMHhmZTUwNDU5MywgMHg5NjNhZjBiMCwgMHgxOTY0OGMwNywKKwkweGJjMmEzZjk0LCAweDY1YmJlNThkLCAweDVjZmY5NjA3LCAweDQ2ZjJjMDM4LCAweDg3ZmY5NjA3LCAweDdiZjMwODcwLAorCTB4ZWY5NjE3NjUsIDB4ZjJjNGZlMTAsIDB4ZmY5NjE3NDYsIDB4Zjk4MTM4NWUsIDB4Y2IxYmIyZmQsIDB4OTYyZTg1M2IsCisJMHhmY2IxYmEzNywgMHg1NzUzZTk0OSwgMHhkZjJmZWQzZSwgMHhkYzJlOWVlMCwgMHg1ZGRiNzIwOCwgMHg2YTU5NzI4NiwKKwkweDU5N2UwNjQ5LCAweDA0ZmZmOWNmLCAweGFmMmQwNjQwLCAweDM5NDQ2NDFmLCAweGFjZjNmM2I4LCAweGQzODE0NTE3LAorCTB4OTdjODAwZjYsIDB4MDVmYTA0YmMsIDB4NDg1YjMzODUsIDB4YzI4MjdkMDQsIDB4NzM4NmZiMTEsIDB4MzQ5MzE3Y2IsCisJMHhhMmY5NmU3MCwgMHgyMGYzODE0YywgMHgxZmVhODljMiwgMHhkYzVmOWQ5YywgMHgxN2NmMWRhNCwgMHgxMjljMGFlNSwKKwkweDdmYjU5NzljLCAweGNiZTViYWYzLCAweGJlNzhlZDZjLCAweGQ0ZTA1NGFjLCAweGZlYjg5YzIwLCAweDRmMjAyNzhkLAorCTB4YzgwOWMwZDQsIDB4ZTU5YzBhYTUsIDB4N2ZiMTI3MDgsIDB4MjcxOTcxZTMsIDB4OGNiOGUwNmIsIDB4NzUzODE0NGIsCisJMHhmZjUwNjcwOCwgMHgzNzhjMDRlMCwgMHhhYzYzYzc2YiwgMHg4NjNjZTA1MCwgMHhiZmQ2MWU3OCwgMHg1MzRjYjk3OSwKKwkweDU1MzFlM2I0LCAweGMyOWU3MDI5LCAweDBmZjZhNGYxLCAweDE2YWI2ZWNlLCAweDIxYWRiYjNmLCAweDM4NDdhY2ZjLAorCTB4YWYzN2ZiMjMsIDB4M2YxNjliNWMsIDB4N2UxMGI2YjksIDB4NmI5YzIxMzYsIDB4Yjc2NzA3ZmIsIDB4ZGQ5ZjhiNGQsCisJMHg1ZTdlMTBiNiwgMHhlOThjZmM0MywgMHg2MzcyYmNkZiwgMHg4ZGM5ZjhiNSwgMHgwZGU3ZTEwZCwgMHhmZWI4Y2YxYywKKwkweGEyNmY2NzhkLCAweDEzN2IzZjE2LCAweDIwMDlmODQzLCAweDM3ZmIxYjljLCAweDJkMjRmYzllLCAweDQyOTNmMjdlLAorCTB4ZTEwNzc5ZjgsIDB4OWMxZmVlNGMsIDB4ZmM1YTQ5YmQsIDB4ZTEwYTRkZWMsIDB4NjcwODBmZTcsIDB4OTVlNmZmNGEsCisJMHg5ZjhiNTAzZiwgMHhmYzIxODFmYywgMHg3MjcwODA3YywgMHhhOTRjY2RkYywgMHhiZGFjNzBhNCwgMHg0YzNmZDljMywKKwkweGMzZmQ5ZjhiLCAweDg5MzlmODQyLCAweDM4NTJhNjcwLCAweDI5YzM3ZGU5LCAweGE3ZTJkMTQ4LCAweDlmODQyNTIwLAorCTB4YjZlNzA4ZjMsIDB4OWZkOWMxZmUsIDB4ZmVjZmM1YTIsIDB4YWU3ZTEwOTQsIDB4ZmEzYjljMjAsIDB4ZTE4MmFmMzcsCisJMHgwYzE0ZmM1YSwgMHg1NWI5Zjg2NywgMHg4NjcyODcxYSwgMHhkODI3NGVjYSwgMHg5YTE5ZGZlNywgMHhjMTMyMTJlMywKKwkweGQxNzk2MjRlLCAweGY3YTAyNGVlLCAweDQzM2U4YTg4LCAweGFkMjI1ZGRhLCAweDM3MWNkOTZmLCAweGQ2YTIzMWZlLAorCTB4MDY4ZDcyNmIsIDB4YWE1NmNmNGEsIDB4OWFmNWE5ZTUsIDB4MWFkMTQ5ZDgsIDB4MTVjZTJhM2QsIDB4NGMyN2M5YWYsCisJMHg5ZmE5YWMxYiwgMHgyOWE2OTQ1OCwgMHgzYWU3MzgxZiwgMHhmNzIwZjk0ZCwgMHg0ODdlNGQ3OCwgMHhmYTlhNGRkOSwKKwkweDM1NzM2YWMzLCAweDZmY2JlMWY5LCAweGY1NGZkNGQ3LCAweGQzZTRkNGNlLCAweGE5YWZkY2Q3LCAweDgxNzFiMjNmLAorCTB4YTY5YWZjYTYsIDB4YjVmOTRkNzIsIDB4ZmM5YWE1YmUsIDB4ZDdkZmNkZjUsIDB4YjJkMzFmZDQsIDB4NDM3ZTUzNDIsCisJMHhmMjlhNjNkYiwgMHgzNTI3ODE3MSwgMHg5ZTA3MDlmOSwgMHhiMWJmZDRkNSwgMHhmOTRkMDVmZCwgMHg2OGFmNjNjNCwKKwkweDZjNzcyN2NhLCAweDNlNmZlNGQ1LCAweGZkNGQ2YmYzLCAweDlhZGRjMTI5LCAweGJkOWZhZGZjLCAweDQzOWZhOWFiLAorCTB4NmZhYjUzZmUsIDB4ZDRkMDNmOWIsIDB4YTEzZjZhOWYsIDB4ZjI0ZWZmMjksIDB4NTUzZDNhMjcsIDB4Y2NhZjFmNmIsCisJMHgzMmFmY2MyMSwgMHgwMWFmZDk4OCwgMHhjNmYzMTFhYiwgMHhhNzY2MTZjMSwgMHgyNzFjNGI1OCwgMHg3NzE4ZmQyOSwKKwkweGEwMGM3NDJmLCAweDAzMzQwM2Y0LCAweGUwY2U1MTc2LCAweGU4M2E2YmIyLCAweGU0ZGRlZmY3LCAweGJmNGVjNmJlLAorCTB4YmVlOGNmN2YsIDB4YmY0MTFlYzEsIDB4OTAyNmY0YTEsIDB4MDYxZDQ4NjQsIDB4OGZlNWY1NDgsIDB4NzNkZThjY2EsCisJMHhkNTFkNWM4NywgMHgxOGQ3ZGI0OSwgMHg2OGUyYTM4MiwgMHhlNzMxMjNmZSwgMHhmOWM3YTAzZSwgMHg4M2VlMDMwNiwKKwkweDQyZDQ5MTY4LCAweDQxMTM2OGJkLCAweGQ0ZDFlOWJiLCAweGFhYmQxN2FjLCAweDE4NjZiMGZkLCAweDMwODQzM2Q1LAorCTB4M2JiMjM1ZGMsIDB4YzMyOGY1MTksIDB4OWJkMDNhZjgsIDB4NzlkMTg3ZWEsIDB4ZDE2NDI2MGQsIDB4YmNiYjcxOGEsCisJMHg2MWZiNjgyMywgMHg4ZmUwYzkyNSwgMHgzZjk5MTkzMCwgMHg5MWJmZDQyNCwgMHhmZDgxOWZmNiwgMHg2YmZlODEyZiwKKwkweDk0ZGZlOTdhLCAweGJmZDM0OTM2LCAweGQzNGNhNTM5LCAweGZiNDhkOWJmLCAweDkwZjIxM2I3LCAweGJmZGUyNmUxLAorCTB4Y2IzNmZkMTksIDB4ZmVjNjRjNTYsIDB4ZDg2NTI5NGQsIDB4NmE0NmEzZmYsIDB4OGZmYmE5NzcsIDB4ODhmZmY1MGUsCisJMHgzMWViZjY4MSwgMHhjN2I5YmIzMCwgMHhkMjZlZDNmYywgMHg1Y2E1M2ZjZSwgMHg5YjIzN2YzYiwgMHgyZTQzNGFmZiwKKwkweGU3MWEzZmVmLCAweDBlNDU2YWJmLCAweDM5NGE3ZjliLCAweGMxODliZjliLCAweDBiNmZmNTBkLCAweGZhMDFiZmUxLAorCTB4ZmQyZjY5ZmYsIDB4YjViM2QyOWIsIDB4YTk1ZTFmZjMsIDB4ZjU4OWJmOWQsIDB4NzZlMTk0ZmYsIDB4ZmIwNWJmZGUsCisJMHg2ZGM1N2E3ZiwgMHgyYmMzZmU2YywgMHhjOWEzN2ZiMSwgMHgzMWZhMDRlZCwgMHhmNWFlODkwZSwgMHg1MGM5ZmVkMSwKKwkweDA0MGQyNTZhLCAweDQwZmRhMTcyLCAweGZkMWUzYTNhLCAweGQyMWE3NzA4LCAweDhiZGYxYzcwLCAweDI1NzZmNDY2LAorCTB4ZjIxYmQyOWEsIDB4YzNiMzJmMzMsIDB4NTI3Mzk0N2QsIDB4ZDM5YWFhYmIsIDB4MWNlNmM1N2EsIDB4MmMzZGYwMjMsCisJMHgzMTY0MjI0ZiwgMHgzNmEyZWExZiwgMHgzYzliZTkxMSwgMHhhNDhkZjI2ZCwgMHgyNmQwYmRlMywgMHhlOGJmMjE3YSwKKwkweGUwM2UyOWU5LCAweDMyMjYzNWFmLCAweDQ5ZGEwOGJmLCAweDNmZGYwMDI0LCAweDE3OThkOWZlLCAweGE3ZDJmM2Q0LAorCTB4NTNlNTFiOGIsIDB4ZGU0NWZjOTEsIDB4OTZiYTMyNWMsIDB4MTAwMmVmOGUsIDB4OWM3ZjJhODEsIDB4MTg2MDcxZGEsCisJMHgxZWVkNDg3ZiwgMHgxMzlmZWQ0MiwgMHgyM2VmZWIzMiwgMHhiZTQxZWY2YSwgMHg2ODdiZGE4MywgMHhlNjNhOTMzOCwKKwkweGRlYmFmMzU3LCAweDVmYzc0MTFmLCAweDBiOWY5NDQ0LCAweDZlMmY3OWU3LCAweDYyNGYwYTI5LCAweDVhZjhmN2ZiLAorCTB4MzFlYjA3YzEsIDB4NDUwYzc5N2YsIDB4YzUzYzc4N2UsIDB4YmU0ZDA0ZGUsIDB4MDdlYWM0YzYsIDB4MmY3YzEzNmYsCisJMHgwZGMzMDgwOCwgMHhlMWMxOTlmOCwgMHhjZDJmMTgxMSwgMHgzNmIzYjFjZiwgMHhiMWRlNzc0NywgMHg3ZGQxYjA1ZiwKKwkweDVkMDg2NmI0LCAweDU5OWMzMDhiLCAweGE0MGYyNWM0LCAweDU2NWVlZmVkLCAweGE3NmI4MzJjLCAweDgxODYxMDVkLAorCTB4YTE2NmIwOWYsIDB4Mzc2ODAyNGMsIDB4MDY0OTEzN2IsIDB4ZGUzYTBlMjcsIDB4ZmUwY2VkZmIsIDB4NTI3Yzk3MGMsCisJMHgyMzliNDdlZCwgMHg3NDQ1NWQ5YiwgMHg0NThhNzMzYywgMHg2OWFjZmYxYywgMHhlZDNmZjJkYSwgMHhjNjE5NzE4YywKKwkweDUzY2Q3NGQyLCAweDQ1ZGRjZmQ4LCAweGU3N2JmMmRhLCAweGI5ZjdmMzY4LCAweDU3MmE3OWI1LCAweDBmYWI5MDY1LAorCTB4NTNiZmU5OTQsIDB4ZGY4MTI0YjQsIDB4MDAxYmY0MzEsIDB4ZTM5MDdjZTMsIDB4ZDk1YWMxZTEsIDB4NmE1NzU5YWIsCisJMHg3Mjk1MWI3NiwgMHgwOWI4ODQ3MCwgMHg4YmRiMGJjZSwgMHg1ZmNmZWIzZCwgMHg3YjE3Y2RhZSwgMHg2Yjg1ZjliNSwKKwkweGRkMzlmMDc0LCAweDdmZWJlMjljLCAweGE2ODNlODFjLCAweDI4M2U4MWE3LCAweGZhNzI0ZjNlLCAweDJkNTVmMzA4LAorCTB4OWExM2RjN2QsIDB4NjUwZmEzMDYsIDB4YjYyNGE3MWUsIDB4MzNkNmE3MDQsIDB4MThkYzU4ZmEsIDB4OGExZTk5MTMsCisJMHg1MmUwZjQ0MywgMHgwZjQyOTdkMywgMHhmYzNkMzhmMywgMHg2OTQzZDM5OSwgMHhlZWFlOTY5MywgMHhjOWQ1YmUyMywKKwkweDZiMDNmZGI0LCAweDFkM2FlMTc3LCAweDNkMTk4YTExLCAweDg3YTE0MGZjLCAweGI4M2QwZDBlLCAweGQ3ZTgzZDM5LAorCTB4ODdhNzFlNmYsIDB4N2EzMDhmNzksIDB4MDc2N2FmZDAsIDB4YTY4ZTg3YTcsIDB4ZWI0OTMyY2IsIDB4MWQ3NGFlYjksCisJMHgwZWJhNzkzNCwgMHhhM2I3NzViYSwgMHg0N2FlOGExZiwgMHgxMDU4N2E0NCwgMHgzODlkMzc5YSwgMHg2NWU0MmZjZCwKKwkweGQzOGJkNjNkLCAweDAxYTc5NjAzLCAweDA5ZTIwOWRhLCAweGFjZjdhN2RiLCAweDI2ODRmOTRmLCAweDc5MTRkYTVmLAorCTB4MzZkYTZiZmQsIDB4ZmFhOTNkYWMsIDB4ZjJmMmQ1NWUsIDB4YmI3ZmI1NWEsIDB4MjY4Yjc5YTIsIDB4YTZmN2M0YmYsCisJMHhkMzY5N2VhNiwgMHg3MTdlNGQyZSwgMHhmYTlhM2JlMywgMHhkMjFjZDcwYiwgMHg3ZmJkOGJlNCwgMHhiZjlmZDRkNCwKKwkweGZlNTM1M2JjLCAweDRkNTllZDYwLCAweDE3NjUwM2Y5LCAweGRjZmJmOTM1LCAweGJmZDRkMzdmLCAweDEzZjA4ZTc3LAorCTB4YTJlZWZlNzUsIDB4ZWJhODlmYTgsIDB4YTcxNjlhY2YsIDB4MGQ3MGNmYzksIDB4ZWMzN2Q0ZDIsIDB4YTAyZWY2YmMsCisJMHg4YmVmODNjNywgMHg0ZjhmZjQwNCwgMHhmZmQxYTc5ZCwgMHg3NjUzYTlmOSwgMHgxZTkzOWQ0MiwgMHg1MzgzZWUwNywKKwkweDllOThkMTllLCAweDlmNzEzOGYxLCAweGMyNGNmMzljLCAweDFlZGI0MmY0LCAweDJhMTVjODBiLCAweGM4ZTA0YjQ3LAorCTB4OTZlNTc0YTYsIDB4MjBkOTM1YmEsIDB4ZGZjYTA5ZDcsIDB4ZDQ2Zjk1OGEsIDB4YjIxMjg3NzksIDB4OGE2Mzk0MTQsCisJMHgyMzI2YzJlZiwgMHg0NDIwNGMwOSwgMHhjN2M0ZTEwMCwgMHhlNTU1MTQxNSwgMHgzNzk0N2QxZCwgMHhkMDkxNDE1MSwKKwkweDIzYjBiY2IzLCAweDI3OWFmN2YyLCAweDIzZGI4NzhiLCAweGY3ODQ3ZjljLCAweDdhMDIxOTM1LCAweGU3MmY3NzUyLAorCTB4MjkwMjk1MjQsIDB4NjQyNzdmNTIsIDB4YWQ4MWYyMDUsIDB4MzRhOTRmNWMsIDB4Yjk1MTdlMzIsIDB4YjEyZTUwNzUsCisJMHhhYTMwM2U0MSwgMHg2YmZhYWJmNiwgMHgyMDZjOWJhMSwgMHg2NmJhNDlkMCwgMHg1ZDM2OTczZiwgMHgwNGY3ZTFhZiwKKwkweDQwODljZmJjLCAweGRmMzQxMzZmLCAweGQ2NmY5YTJiLCAweDI1ZGFlYmI0LCAweDgxYWJiOGUyLCAweGZkYjk1MDk3LAorCTB4NTI3YTI5MmEsIDB4ZDgxNTNlMDQsIDB4MGM2YjMyOTMsIDB4MTRmNWQzOGMsIDB4NTExMmRiZTYsIDB4MzRmMmVjOGYsCisJMHhjN2YzODVhZiwgMHg0YzE2OWU3MywgMHgzMGRhNzhjZiwgMHhhYzA5ZTUzZCwgMHg5M2MwNzM4NSwgMHgxZTk4MDM5ZSwKKwkweGRhNjNiNGY3LCAweGU5ODYzOWUxLCAweDRjMGU5ZTQ3LCAweGMxOWNmNDNmLCAweDIwOWU0ZmY0LCAweDlmM2NjN2E2LAorCTB4NDNjNDdhNjEsIDB4MGU3MDAyN2UsIDB4ZmU5OGNjN2IsIDB4YjRjNzYzYzEsIDB4ZTk4YzkzZGQsIDB4ZmIwZjhmMDUsCisJMHg1ZjVkZjY1MSwgMHhjYjg2Nzc3NCwgMHg3ZjQwNzNlZCwgMHhiYjZjZTgxMSwgMHhjZDZlYWM3OCwgMHhiZDlkMzBkMCwKKwkweGE0MjNmMmI5LCAweDg1Y2YwNTMzLCAweDBmNGUyNjRkLCAweDA4N2ExYTQ5LCAweDIzNzdlZDgwLCAweGU1MWY0YmQwLAorCTB4YzNhNzMyNGQsIDB4MmU0N2RhZGUsIDB4YmZlMTc5YWYsIDB4N2NhZWRlODcsIDB4ZDMwYjdhNGIsIDB4M2QxZDEwZDMsCisJMHg0ZjQ1ZjdhNSwgMHhlOWU5YWExZiwgMHhlNGNlYzE4YSwgMHgxZmE3YTcyMCwgMHg3ZDZiNzNmMywgMHgzYjEyNTFiZiwKKwkweDc3ZTkwY2E3LCAweDgwMGNkYmFlLCAweGRjZmNhNWFhLCAweDk4Njk5MDg0LCAweDVlZmJjNGJmLCAweGEzYjVjMTQ5LAorCTB4MGQxYmU4MWUsIDB4ZThkMmViNzIsIDB4NzM4MjhmYmYsIDB4ZThjNzRiODcsIDB4M2VmNmE3ZTIsIDB4ZjQ5ZDNkM2YsCisJMHhkYTE3Nzc4ZSwgMHhiYTNlMjU0MywgMHhjNjExMDllOCwgMHgxYWYwY2QxYiwgMHhjOGQzMjA2NSwgMHg0NjFhNDI3OCwKKwkweDkwNWNlNGJlLCAweGM0ODk3OTgxLCAweDczOWY3YjQzLCAweDNhZjM4NDQ2LCAweGMwNmI3NTQyLCAweDVkNzg1ZjZmLAorCTB4MTYzMmJkNjksIDB4ZjY3YTlkZTAsIDB4NWU5MDU5MWYsIDB4ZjQ3NWZhZTEsIDB4N2NmNTExMWUsIDB4MDlkMTc4MTIsCisJMHgyNWM5MGRmOCwgMHhmYzE5MzM5MywgMHg0NjkxYzFmMywgMHg2NDA5ZWEzYiwgMHhkZTdmMTZiYSwgMHg2YmY4MzVkYiwKKwkweGNmY2U1NTQ4LCAweDdmMTE5MzFiLCAweDFhOGNhZTIzLCAweGY1ZmMwZmQ0LCAweGMyZmJkZmM1LCAweGY3OTgwMmU3LAorCTB4ZmIzZTAzN2YsIDB4ZjE3ZDhmZTIsIDB4YmM3MmUyNDUsIDB4ZGZlNzQ2ZDYsIDB4ZjhjYzczYmQsIDB4MDdjMDFjYzcsCisJMHhjYWRmMWFiZiwgMHgzYzdlOWM3OSwgMHhiNWY0OTJmOSwgMHg0OTNiYjhlOCwgMHgxNGY2ZTNhMSwgMHgyNGQ4NWI4OCwKKwkweGE1ZmUxMWRhLCAweDYxNjI2YmQ2LCAweGZhNzA0MjVkLCAweGVkZTE0ZjU4LCAweGJkODBhNzNmLCAweDBiNTUzZTdmLAorCTB4ZWYwNzRiMmYsIDB4NmQxNzgxZDIsIDB4NGQyZDc3NjAsIDB4MzI3MGQ4NWUsIDB4NjkyODNhYzIsIDB4ODM1ZDRiNTUsCisJMHhiNjg3YWQ0NSwgMHgxYTk3ZjM2OSwgMHgzODJkNjk4NSwgMHhlY2VjNDcyZSwgMHg2YTI3MjAzMSwgMHg1ZWRmMTgxYiwKKwkweDY3MDJhOThlLCAweGY2MDk3MjY5LCAweDNkMzlhZTczLCAweDNlN2JkOTk2LCAweGM3MzYwZmM2LCAweGU3MzhiZjIxLAorCTB4ZmZmYWMzMjksIDB4MDZmNGYxZWMsIDB4MjEwZjE5NDcsIDB4MTk4NGU0YWQsIDB4NGIyZDMxZjgsIDB4YWY3ZWJkZWYsCisJMHhjNWZkMmNmNCwgMHg3ZWRkZTc4OCwgMHg4OWU4MGFmOSwgMHg5N2RmZmE2NiwgMHgwOTEwNzc2MCwgMHg5YWRjMGFmMywKKwkweGJhNmJkMTE2LCAweGQ2NmZiZTAxLCAweDM5ZGI0N2Y0LCAweDJmZTIzMzk0LCAweGRmNmFiZWQzLCAweDQyOTRlNDQ4LAorCTB4ZDQ1ZTU0YjcsIDB4ZTc4MGJkODMsIDB4ZDQxYTRiOWIsIDB4Y2I1NTU5N2EsIDB4OWFmOTM1NzcsIDB4ZDQxYTQ3YjYsCisJMHhmYzA1NWM3YSwgMHg1MjVmZjI4MywgMHgzNzQwNDgyYiwgMHhiYThjOWM5NSwgMHg4MTFhY2IyNSwgMHg4MjE4YWY4ZSwKKwkweDA4OGY4MDRmLCAweGI5OTU1ZWFjLCAweDlmYTZlOGMzLCAweDc1YjJiN2NlLCAweGU3N2M2ZGViLCAweDg4NTRlNjNjLAorCTB4MzczMzI4M2IsIDB4NTk3MjM5ZTIsIDB4MjBmOWI1Y2IsIDB4YWViN2NlNjcsIDB4NWJmOTAyNGMsIDB4NWVmYTVlMjEsCisJMHhiZmY2ODQ1MSwgMHg1ZjJlMDQ5NCwgMHhjZjU2YTBlNCwgMHgyODQxZjRlNywgMHhlOWJjZDU1YywgMHgxN2MyMTJjZiwKKwkweDk4MTk3N2NkLCAweGI3MGY0NjVmLCAweGJlOTFjYjhkLCAweGY5YmQ1M2YwLCAweDhlY2RjMTUwLCAweDZlYWE3ODllLAorCTB4MjM3NDY4YmIsIDB4Y2JmZmE0NWYsIDB4YzE0OWUzMGEsIDB4ZDQ1NGIxNWYsIDB4OTc3MWQxMjYsIDB4ZmZhMjc3MzcsCisJMHgxZGVjOGNlMiwgMHhlMGFmODNmNSwgMHg2N2U3M2Q5NywgMHhhMzE1M2U0OSwgMHhiNDk3OTc5YSwgMHgyNjBiM2Y0MywKKwkweGUzODg4ZWYxLCAweDFmMjgwZmRlLCAweDk5NWJmYjNmLCAweDU3MjIxZjAwLCAweDc0MmNhZDY5LCAweGM3YmI3MGNkLAorCTB4NjE1OTBjNDAsIDB4NmI0MTY3YmIsIDB4ZmJlMDIxNDUsIDB4ZDFkM2ViZWMsIDB4OGE0NDViZWUsIDB4YTQwZWI4NmMsCisJMHg5Y2VjMGIzMSwgMHg3MTgwYzRmMywgMHgxZmM5ZTc1NSwgMHhlYjU0MTM2YywgMHhlNDY0YjFmMCwgMHgzMDVjYTY3OCwKKwkweDEwMzRiYjg5LCAweGQ4MTA3YmJlLCAweGY1MzlhNjVmLCAweGY4NThlMmVkLCAweDkwNzYyOTJlLCAweDE1Y2EyNWYwLAorCTB4MTdmMTgwYjcsIDB4MmY3N2Q4NzMsIDB4ZmQwMWQ3MzEsIDB4NjM0YTdiNTIsIDB4NGE3YjUxYWYsIDB4OTRmNmE3OTMsCisJMHg2NjQyNWYyNiwgMHg0NTNjNDEyNiwgMHhmMTMyZDNjOSwgMHg0ZDI3ODgwOSwgMHg4ZWM5NDFmOSwgMHhiNTI1MmJlMywKKwkweGZkMWZhMGY1LCAweDE2ZTFmYjljLCAweDg0MzQ4OWQ4LCAweDM3YWE4N2NhLCAweGE2MmFjYjllLCAweDk4OTJlOWYzLAorCTB4MGY4OTRiZmYsIDB4YzU2NTQyNTgsIDB4NWU1ZTVhMjAsIDB4MmNiYTMzZTYsIDB4YTI3N2U3M2QsIDB4OTQzZGMyNzUsCisJMHgxNjNjMDNmMywgMHhkMWJmNzAwNywgMHg4ODZiZTJjNywgMHhhYWUyY2E0MywgMHhmM2VmNWE0ZiwgMHhiYTJhZDgxZiwKKwkweDhmNTA2Y2EyLCAweDliYzY1NzdlLCAweGFmZTdmNWZhLCAweDRmMjEyZjlmLCAweDliY2EzY2UyLCAweDU2MWM2MDY3LAorCTB4M2UwNzc4OGYsIDB4NzA1OWI5MWYsIDB4MjdlYzIyZjksIDB4ZjEzNDE2NTEsIDB4YzMzMjA5MmUsIDB4MWFkN2UyOWYsCisJMHgwZjVmY2JhZSwgMHg2YmRmOTU3OSwgMHgxYmZjYWVhMiwgMHg0NDAxOTdmMywgMHgyNThhNWZjMywgMHg5MTM5NzBmNywKKwkweGJmYzAxM2YxLCAweDdmNzEwNTIwLCAweGM5Zjg2MzdkLCAweDJmNWZlMDNkLCAweDg0NGZmOGRmLCAweGVmYmI1NDNmLAorCTB4ZmY4OWZjMjksIDB4ZTg4ZmYxZDQsIDB4NDhiY2ZlMzEsIDB4NzhkZWFiZjAsIDB4Nzc4ODc1ZjUsIDB4Y2ZkNWZmMmMsCisJMHhiN2VlODQ2YywgMHg5MjYzNTJiMywgMHhlNTdiYWU5MywgMHgxNzM2ZDVhNiwgMHg2YmM5MWRmMCwgMHhkNjcxN2Q4MywKKwkweDQ0OGI0ZTI3LCAweDc5OTdkZjBmLCAweDU5NzExZmRjLCAweGMyYmJmMDA0LCAweDczZmMyOTNmLCAweDRlZjhmY2FmLAorCTB4NmNhZWEzYjAsIDB4NGZlOGVkOTIsIDB4NGMwNTM2NmQsIDB4NWJhYjllOTQsIDB4YjE5MjE0OTcsIDB4Zjk2NGVmOTgsCisJMHhmZDAyMmY0NywgMHhjN2M5YjRkNywgMHhmZTVhNzRkNSwgMHg0MTI1OWZjYiwgMHg5NGE1MTA3YywgMHg0ODY0ODYyMSwKKwkweDU0OWY2ODAzLCAweDAwYjhmYzZmLCAweDEyMWE4ZGY0LCAweDZmYWFmZGM0LCAweDE2N2ZmZDA3LCAweGQ4YjBmMjhmLAorCTB4MWNiM2RiMTgsIDB4ZDA0OTM0MWQsIDB4NWE2YWZkOWUsIDB4YjQ1MTdjN2YsIDB4NjlkYjdhNDEsIDB4YjJkNDZmZTAsCisJMHhiZTkwYmY0NCwgMHgzYmI3MTk1ZCwgMHgwMGViNjQyYSwgMHhjOTEzYWJlNCwgMHgwYWFiZTA0NCwgMHhkOThmODg1ZSwKKwkweDdlNWYyYjFkLCAweDFkMjc2YzY2LCAweGRmYzZkNzU3LCAweGJlMTUwNGRhLCAweDUyZTk3YjE0LCAweGZjNWZjMmNiLAorCTB4MWYzYmQxZGEsIDB4YTNmNzQwYmYsIDB4ZTQ1NWJmNWEsIDB4ZGI4ZGEzOTQsIDB4NTY5NjdlNGIsIDB4YzQxYjAxY2EsCisJMHg5MDZlNTU3MywgMHhiOWZhNWU5ZCwgMHg1ZjE3ZDVmMiwgMHhkOWZjMTY3YSwgMHg0NzM5MzQ3ZiwgMHhhZjE1Zjg1MiwKKwkweDEzNzIzYmVlLCAweDkxNmM1N2NkLCAweDY5YjIxNDA3LCAweGYwYTQ4NDU4LCAweGZmZDBkNGZhLCAweGFmMGY4Zjk2LAorCTB4N2RiNmY5NDcsIDB4ZjYxOGM3NDYsIDB4ZTFmMTg3ZmQsIDB4YjJkOGE5NzUsIDB4ZjRjNjQ4Y2IsIDB4Y2I1ZTQ3YzQsCisJMHgyNTg3NjMyZSwgMHg3NGI0ZmFjMiwgMHhiN2ZlODAxNiwgMHgxYWJmZTVmMiwgMHhkZDlkZWY4MSwgMHhhOTgxOTAyOSwKKwkweDYxYjlmMDExLCAweDgwODdlYTFmLCAweGJlNGY1YzI3LCAweGQzZjVhMTVlLCAweGViYTFhZmQ1LCAweGJmNDY3MjAyLAorCTB4ODU3YWZhNWUsIDB4NWMwMGJmOWMsIDB4ZjRhMWIzODgsIDB4MjFhZmRhZmQsIDB4MjY0ZmVlMGUsIDB4ZWNhMWUwMjcsCisJMHgzMDZjODdiNSwgMHgyZDUyZDM5ZiwgMHg1NmU3ZjNhMywgMHgyYmJmMDEyNywgMHg3NjQ5YmQ5MywgMHhiMmY3ZDk0YywKKwkweGZhNDYxZmU3LCAweDcwZjQzZDJiLCAweGJhNTdmMzEyLCAweDc2NTAxOTA2LCAweDNjYzEwNzdhLCAweDFiYmZhZjE3LAorCTB4ZGM0MjU5ZTcsIDB4Y2Y2NTg3NDgsIDB4OWEzZTQ1ODksIDB4Njk5MTJhN2UsIDB4OTNlYzIyNWIsIDB4OWM5ZjdjNGIsCisJMHgyZTJlODE3ZSwgMHg0NTY5ZTc5ZCwgMHhlNDQxZmMyZSwgMHhlOGJiZTE3MiwgMHhjZjk4N2QwZiwgMHg5ODkwNmE4NSwKKwkweGQ2Y2NkNGZmLCAweGQwNmM4MGViLCAweGZkMTBkMWM4LCAweGU1MTQ3YzZlLCAweGFlNjFiOWM3LCAweDU2ZWU3MDgxLAorCTB4MjgxNzk2MTMsIDB4NTM0M2M0NDcsIDB4NjI3NWIyMDcsIDB4NTFkYjA3NzIsIDB4ZGYwNzkzYjksIDB4ZWNiYjdlYTEsCisJMHg2OWFiMWE4YSwgMHhlOTQ2NzI4NywgMHg5ZmVmMTk3ZiwgMHhmNDFhM2I4ZSwgMHg5MTQ5ZDNiNywgMHg0NmUxOTFlZCwKKwkweDNkNTAwZjg1LCAweGFhNjc0NTQzLCAweGZmZjZjZWZkLCAweGRmYjYwNmM2LCAweDliZWZmZDk1LCAweGZmY2EwZDMxLAorCTB4MjNlZDk4NzIsIDB4OTc3MjA3NjgsIDB4MTAzMDJiOGUsIDB4MTZjZDc3Y2IsIDB4NDg5ODNmOTAsIDB4ZGYzZWQyMjAsCisJMHhhZTdkZjMyOCwgMHgwYmQzZDcyZCwgMHhjNDI0YmYxZCwgMHhmYTA2ZThhYSwgMHg0MDc1Yzc4OSwgMHgzNGYyNWY3OSwKKwkweGEzZTJhZjZkLCAweGFkYWZkMDM1LCAweDFmNjU1YzI3LCAweDcwN2U3Mjk3LCAweGY1YzFmODFlLCAweGQ2NDA3ZTYxLAorCTB4NWUyYmY2MjcsIDB4YmRmNjUyYjQsIDB4NWZlYzJjZjQsIDB4MGViZDVmYmEsIDB4MTE3MmJmZDgsIDB4Y2Q5M2ZmY2MsCisJMHg0ZmRjOGU3YiwgMHgyZDI3ZWRmNywgMHhmMmQ1YmVjYSwgMHgyZGJlZmQ1NSwgMHhjNjMwZmFkYiwgMHhlZGY3ZWI5ZiwKKwkweDQ5NmI0MzI3LCAweGJmNGI3ZGM0LCAweDQzYjdkYzQ3LCAweGY4NDdmZTNiLCAweDI0Yzc4MmFhLCAweDJhYWY5NmEzLAorCTB4N2MzN2IyN2MsIDB4MTZlNGY5ZWEsIDB4ZDU3ODgxZDksIDB4M2JmYTQ5ZjMsIDB4ZDI3YWIyNGMsIDB4MGE4NzQyYTMsCisJMHg0N2ZmOTVmZCwgMHg0N2UwNzBkNSwgMHhlODU1M2EyMSwgMHgwYWE3NDQzMCwgMHhhZGU3ZWExZCwgMHhmY2JlYTNjNSwKKwkweDUyMmRmMDIzLCAweDUzN2EyOTdhLCAweDRhOTVmM2M2LCAweGE2MDM4YjNmLCAweGM5MGZmNmVkLCAweDUwYjk3YzQ0LAorCTB4ZmRjNjkxY2MsIDB4ZjNhODA2NDMsIDB4NDViZTVkM2UsIDB4Y2JhNWRmNTcsIDB4YmJlYWU5MTcsIDB4NGQ1YWY5NzUsCisJMHgzZGI2Y2FmZCwgMHgxMDc0ODI0NiwgMHg5NzEzZDRkMCwgMHgzMTM5M2JmZiwgMHhmYWRkMTIyMSwgMHhmNWExYmY5OCwKKwkweDM5ZWUxMWEyLCAweGQ4ODI1OGQ0LCAweGJjNDE1ZTVlLCAweGRjMTkxZjEwLCAweDUxYjllMjIxLCAweDNkNzFjNTM3LAorCTB4YTczNjM3ZjgsIDB4OGY5NGJjZmEsIDB4N2U2MjhlYWMsIDB4ZDA3YjZlODUsIDB4ZDVkMzRmMTYsIDB4NGMxZjJjNzEsCisJMHgxZjAzZDYzNCwgMHhhMzA3YmU1NCwgMHhiYmIxZGY5OCwgMHg1MzhiNjgyOCwgMHg3ZTlkNWJkOSwgMHg4Nzc4ZjkxMSwKKwkweDBkYmRmMjJmLCAweGRkNzA2OTJhLCAweGQ3Yjk3YTNiLCAweDc1OGY5Y2ExLCAweDYyYzZkYjQ3LCAweDNlMjlkMTdmLAorCTB4YTJhOWM3YTAsIDB4ZjgzOTY1MjUsIDB4Mjc0NTFhYTEsIDB4ZWE4YmVjZTgsIDB4NzljMWI1ZWUsIDB4ZmQzZmI3NTUsCisJMHhmYmY0MzlhZSwgMHgxNjQ0NzdlMiwgMHg0OTc1ZTM4ZSwgMHhkMDc2NTQ4MywgMHg5NzVkZTIxOSwgMHhmMDVjNDAyZCwKKwkweDg1OWZhNDVhLCAweDJkMTc2NjdlLCAweDNmNzkxYjVhLCAweDI1NzZmMzk0LCAweGUwNDY2NTk2LCAweDM5MGVkNGJiLAorCTB4NTFlZjNlYWUsIDB4ZDdhZDk0ZTAsIDB4ZTc0ZmY3N2QsIDB4ZWQxMWE2ZmIsIDB4ZGE4ZGYyZmYsIDB4OWZiNzM3NzIsCisJMHhmY2U0NjQ3ZiwgMHhjNzE5MWM2NywgMHhiZmU2NTdlZCwgMHhhYTdiN2NlMSwgMHgxY2Q3NzE5OCwgMHgwN2RkM2ViYSwKKwkweGY5YTI2MjQ0LCAweGQ3MTE3ZTRiLCAweGMxNjZkMmU3LCAweGUyMzdmZTA3LCAweDU3ZmRjNDRkLCAweGY1NDY4MjRkLAorCTB4ZDgyZTg4N2QsIDB4Y2VmNGQ3NWYsIDB4ZmZiNmJhYzcsIDB4NDAwN2ViMzksIDB4MzA3ZmFmNDcsIDB4ZGE2OWRmZjYsCisJMHg0NzFmZmFmNSwgMHgzN2Y5MDViZCwgMHg0MDdjYTY4ZSwgMHhkYmNmZDY3YSwgMHgwMmYxODUxOSwgMHg0OGFkM2JkZCwKKwkweGRlM2JkZGZmLCAweGU0MDFmOTRiLCAweDYxMzkzNGRmLCAweGZmM2JkZDljLCAweGE5ZTgxNjNhLCAweDBjYTk4NTdiLAorCTB4MzBmNzYwZjgsIDB4Yjk1ZGJmZTYsIDB4M2I2M2FmZTMsIDB4YzJhZWZlNTAsIDB4MWEzNjZjNzUsIDB4ZmZjOTlmOTksCisJMHhkZWUwOGY4ZiwgMHg5ZDNmMjVjMiwgMHgzYzE3ZTgxNSwgMHhkN2U2YmVhZSwgMHhmMDgyM2U1MSwgMHhiZWE1OWFmZiwKKwkweGU3NmRmNDBmLCAweDQzZTNjZDUzLCAweGNlNjRhZGJhLCAweDFjNWYxODU2LCAweDc5YTg3ZjhiLCAweDc1OGJmMjZiLAorCTB4ZDZhYWZmYjQsIDB4YjQ4NWM2NWQsIDB4Y2ZlZGVmM2MsIDB4ZmQxYzYyYzcsIDB4NWQzN2E2NTYsIDB4ODc5ZTNiOTAsCisJMHhjNjZkODdmOCwgMHgyOTk0YWNlZiwgMHgyNmMwMmY5ZSwgMHg1ZGY2NDZhMywgMHhiMDc5MzVhNiwgMHhlNWUyN2E4ZiwKKwkweGY1YTdmNDczLCAweDFhZWYxZjE3LCAweGFmZmQ3ZDk5LCAweGM1YzEwZjhmLCAweDY3ZDU5ZmY4LCAweDdmZGU2MDE2LAorCTB4ZjQwM2U4ZmIsIDB4MmU5MDlhODMsIDB4ZDI3ZWY5OTUsIDB4NGNmYTg3NTIsIDB4ZmIzZWYzNWYsIDB4ZmEwZTg2YmYsCisJMHhkMDIxNmYzYiwgMHg0ZDliNzk5ZiwgMHhmZGViZGFmZiwgMHhlYjgxZDFiOCwgMHgzZDA3ZGZhMiwgMHhmN2M3N2NlOSwKKwkweGQ1YWFmZjMwLCAweDI3ZWRlMzg5LCAweGZkMzY4ZmJkLCAweDViZWViNjNmLCAweGZhZGJiYWU5LCAweGZlNzdmNzllLAorCTB4ZmJkZGU3YzUsIDB4OGYzM2JmYmEsIDB4Y2UxZGJiYWYsIDB4ZmVkZTZiNTMsIDB4NzVmN2M3MWMsIDB4ZmZlOTVjZjksCisJMHhmNDU3YmE1MiwgMHhhZDQzNzZmZCwgMHg2ZjhlOTMzZCwgMHg4MmI0NjkwZSwgMHhlMjVmNzE2MiwgMHgwM2E2NGIyNSwKKwkweDBmMmY3MGEyLCAweDM4M2JmOGMwLCAweDU3NjA4ZDVmLCAweGJmOTg5OTM1LCAweDU4MTgyNGNkLCAweDgyZGRkYWJjLAorCTB4M2I0NDQ3ZTIsIDB4NWZhZTRlZWIsIDB4MGNiNDM5ZGMsIDB4NWQzYjkwZjUsIDB4ODI3ZDQxM2YsIDB4MzllZGI1NDgsCisJMHhlZTdiN2ViNCwgMHg2YWM2Mjc0MiwgMHhkY2M3ZjE5MiwgMHg4NTNkOWY5MCwgMHhlNmY2YjVlNywgMHgxMmUyMDRlZiwKKwkweDY3N2Y3ZWE4LCAweGEwMDNmNGVlLCAweDEyZTVkZWU3LCAweDI5YTYwZjUxLCAweGE3ZWZiZmVhLCAweDkzZWZiMDE0LAorCTB4N2RkMGY2YjQsIDB4ZGVmZTZkNmUsIDB4ZGRmY2RhMzksIDB4ODQzZGRlMWMsIDB4MjI5ZWZmOGQsIDB4NTg3ZTA3YzEsCisJMHg4OTUzY2U1MywgMHgyZDM1OTdlMCwgMHgwYTkwODk5NiwgMHhhYmI1NDY3MSwgMHhiYmI4ZWVjMSwgMHgxOTdlZGI0OCwKKwkweDdmMmE2NzI4LCAweGUzYzUzN2UzLCAweDVjNzg0MzZmLCAweDM5MjE3ODhhLCAweGVkMDNkZTIyLCAweGRjN2M4ZjEzLAorCTB4ZjljN2IzZWQsIDB4NDg5YWNlMjAsIDB4N2JjNzg2NGUsIDB4MzdlODljYWEsIDB4Y2NiOGY2ZTcsIDB4MzU5NmNiZGIsCisJMHg2NTlmYjBlZCwgMHhkOGFlMWQ5ZCwgMHg5YmUxYmRkMywgMHhlMTFjZmI3MCwgMHgyZmYxODVhNCwgMHhjZmI0NDRiYiwKKwkweGFlN2Q5ZDY1LCAweDVkZDdjYmFjLCAweGJmMWQ2NTBmLCAweDA3M2NiYWVkLCAweDc4NjM3MmViLCAweDVjNWE4NjVkLAorCTB4Y2NhYmY2MDQsIDB4OGI3Yzg3ZWQsIDB4MTY4N2U1OTMsIDB4ZThhZTc2MTEsIDB4MDBkMmZhYzMsIDB4ODQ2NmYxMTcsCisJMHg5ODk3ZDFlMywgMHg5Y2UwMmI4YiwgMHg0MDVhM2NjYywgMHg2YjVkYzg3ZiwgMHhlNjBmOTQ0NSwgMHg1NWM3MDEwYywKKwkweGY4YzY0OTM0LCAweDQ1MGQ4ZmUzLCAweDg1ZGViMDU5LCAweDdmNTYyNjEzLCAweDA5YzMwZDlmLCAweGYxYzI1Y2Y4LAorCTB4NTE2YTQyNWUsIDB4YmY1NzI1N2YsIDB4MGIzYjMyZmMsIDB4ZWEwODI1Y2UsIDB4ODQ1YzRiYmYsIDB4YjhlZDQxZGMsCisJMHgxMDIxNmM5MiwgMHgxMjZhZjEwZCwgMHgwNzhlYzZmMSwgMHg4ZTQwYjkzZiwgMHhkYWU0ZmM2YiwgMHg0OTZlZmMzYywKKwkweGFiZTljMzBhLCAweGU1ZmM2ZjdlLCAweDE3ZmU5ZDlmLCAweDI5Yzc2N2U1LCAweDNhNDI3NDkxLCAweGQ0OTdiYjEyLAorCTB4M2Y3Y2Y3NzYsIDB4YTU0ZDYzYzMsIDB4YmE0MzRiZTAsIDB4ZmJlYWM4MGIsIDB4YjY2NjA1ZDMsIDB4ODdlYmZlMGYsCisJMHhlNjRmOTAxMywgMHgyYzRjNzRmYywgMHhlMjY0MDdmMywgMHg2ZTFhYzQ3ZCwgMHgzYWYyNWMzNywgMHg3NjBmYzE2MiwKKwkweGNmY2U5ZmM5LCAweDZhNmNmMzczLCAweDg3YTRhYWJlLCAweDlmZmUxZGI4LCAweGQzNDg5NzEwLCAweDUxYTE3Y2VlLAorCTB4MDQ4YjNiMDQsIDB4Y2RlYmZmZDEsIDB4YzU3YmMyOGYsIDB4Y2NhMzc2ZmEsIDB4NmJhZmJlMDYsIDB4M2YwMDJmZDEsCisJMHhmMmFmZWUxMSwgMHhhNmQyOTQ3OSwgMHg3NWFhZjFiMSwgMHg1OWM3N2I1YiwgMHg3NWNmNmM2OSwgMHhkNTcxZGY4MCwKKwkweGM1YjdkZGY5LCAweDgwZmRkODJmLCAweDFkNTE0M2Q3LCAweGU2MTE0NTA1LCAweGFmZTM4OTNiLCAweGYwZGZmNzcwLAorCTB4N2Y0Y2VhZmUsIDB4OTk3ODBjYWEsIDB4Y2U2YTJmOTksIDB4ZWU2NjlkZjksIDB4MjY0MDk4Y2YsIDB4NzcwYWI4YzAsCisJMHgwYzliNjZkZiwgMHg3NDQwNzJlYiwgMHgxYWQ1N2RjMiwgMHgzYmEzNDVmZiwgMHgxZWIxZjljMiwgMHhmYzFmMDA5ZiwKKwkweDY3NjQyN2YwLCAweGM0ZjNlMDA5LCAweGQ4MDhhMjRmLCAweDczZjFlZmQ1LCAweGNmYjgwY2M5LCAweDFlYWU4MTkxLAorCTB4NzMxZGY4MTcsIDB4Yjg0ZmNjY2MsIDB4NzRjNzZjY2UsIDB4OWM4ZTYxNTYsIDB4NjhjZGZiNDgsIDB4NTA4MzhmYjUsCisJMHhmZWJjYzFiNSwgMHhjYjAzYjMzYSwgMHg0YTc2ZjA4NywgMHhhYzk1YzFiZCwgMHg1ZWQxYTc1ZSwgMHhiZmZlNjkxZCwKKwkweDc5ZjgxMjhiLCAweDkzN2JmMzk5LCAweDc1YmQ3Zjg0LCAweDM1YTlmOWNiLCAweDQxZmEwYjkwLCAweGQxNjdlMmJlLAorCTB4ZmRjMTM1ZDMsIDB4ZTA5YTY5NzEsIDB4ZjYwZGY5MDMsIDB4MDUwYmU2MzAsIDB4NTNkZTFmZDQsIDB4NjRjZmFmZWUsCisJMHg3YmExNTY3MiwgMHhjZGFiOWUzZCwgMHgxZTAyZjdkYSwgMHg4ODdmNzhlNywgMHg2NzgyODdkMywgMHhmMWZhYmYwNSwKKwkweGJmMjlmNTJhLCAweDlmZWQ1NWJhLCAweGRjNmRhYmJhLCAweDU0ZGZhMDZiLCAweDgxYmIwNWZiLCAweDNhOTZhYTgyLAorCTB4NmIwZmIwOGMsIDB4ZTE5MDllZGEsIDB4MDczZWU2N2MsIDB4YTJhNDRiODMsIDB4ODNmOGVhYjEsIDB4MGYxNjY2NzUsCisJMHhjZGZjNjdiMiwgMHgyZTRlODBmMywgMHgyYzgxMzVhZiwgMHgxNzQ1YWUyNCwgMHhkZjg3YzA2ZCwgMHgwZjdmMzgzMywKKwkweGRmZGU2YzcxLCAweDU3ZDM2NDg5LCAweDNjMGZhYmYwLCAweDU5N2NmMmY2LCAweGU3MTUzNzBkLCAweDQ3MzJhYjMzLAorCTB4MDNkYTc3MDYsIDB4ODFlNGJiOTUsIDB4Njc1YTdhMmEsIDB4ZTU3MmM3OGUsIDB4MDc0YWUwZmIsIDB4ZmI0MjBmYmUsCisJMHgxZjc4NzFjMywgMHg0ZmI4MTEzNywgMHg4ZWQyZDE5MiwgMHhhODFmNmNmNywgMHg1ODc0NjM4ZCwgMHg4OGNiYjJkNiwKKwkweDdiY2Q1NGY5LCAweGZhM2Y0YTIyLCAweDUwYmIzNGZkLCAweDMwYmNhZjFiLCAweGUwMjg2M2FmLCAweDU4MTRkMGE1LAorCTB4YTc0MDhjZTYsIDB4NzM5NGEzOTMsIDB4MjcyOWFmY2EsIDB4Yzc2ZTk0NWMsIDB4MjcyNDdmZmUsIDB4YTI3MjI5OTYsCisJMHg5NWUzZTMwMywgMHhlN2RmMDJmNiwgMHgzMDMxMzkyYSwgMHg1YTU4OWM5MiwgMHhlYjA4MThlNywgMHhmYTQ3NzRiMCwKKwkweDRiMjRkODQwLCAweDE0OWE5OWRmLCAweGVmYmM0ZTQ5LCAweDQ3Y2NlNzYxLCAweGVlZjY3ZGY5LCAweGRjNGU1NGQ5LAorCTB4YjMxMzkyYTAsIDB4ZjQ0ZTkwYTMsIDB4ZjY1MTNlZWQsIDB4NDI3MjVmNDksIDB4Y2JmZmI3NTksIDB4OTA3ZGU2ZmMsCisJMHhmN2Y2MTExMywgMHg3MTM5M2ExNywgMHhlNTE4YmY4ZiwgMHg0NWIzM2RjNCwgMHg0ZmFjYmRjZCwgMHgzOTEzOTRmYiwKKwkweDVlNjFmNzQ5LCAweGEwNDRjNjc2LCAweDdkYjlmNzlmLCAweDBiZGY5NDczLCAweDVlNDA3ZTgwLCAweDExZDk0NjY0LAorCTB4ZDFiOTdhNmYsIDB4NTNmZjVmMWIsIDB4ZmZmYWY5N2YsIDB4YmUxNTllMTAsIDB4M2ZkYTk0YmUsIDB4NzQ0OGQ0YTYsCisJMHg5NzllOTA0OCwgMHhiYWY5NDdkZSwgMHhmOGM4ZjQwMCwgMHhiOTA3ZDJmYSwgMHg2N2M3NTM5ZiwgMHg2NmNmODA4YiwKKwkweDZiMmNmOWFhLCAweDcyNjZlZDVmLCAweGY1MmRhNmExLCAweGZjYjRiOTk5LCAweDA5ZDk0NmZlLCAweDMwZmVmMmEyLAorCTB4ZjM1MmNkZGYsIDB4NWVhOGNjZGQsIDB4ZTMxOTZlZjgsIDB4MTNmZDk3YmIsIDB4NmRlYTdmNTAsIDB4ZmNlNjdmN2UsCisJMHgxMWIzZjI5NiwgMHgzMWY0MDhjZSwgMHhlNjhjNmU2NywgMHg3MTg5ZGVkZSwgMHgwNmQ4YzliZiwgMHgxMTNkZTVmYiwKKwkweGU2M2Y3OWNmLCAweDcxYzFjMDdhLCAweDdkMDRjOWJmLCAweDllM2U0OWZhLCAweDJmM2Q3Yzc5LCAweDNlNzk0ODc4LAorCTB4MjJkZTVmYzUsIDB4NmQ1NzRmYTYsIDB4ZDU3ZjExMTYsIDB4NTdmZjZjYWQsIDB4MDczZTBiMzcsIDB4ZmY4YzE3Y2QsCisJMHg1NmQ3OWUxYiwgMHhiNWU3NjBlYywgMHgzOTg1MDY3NCwgMHg3OGFmZjVhYSwgMHhjZTFlYTNhZiwgMHgwODM2MmEwOSwKKwkweGY3MGNkZTc4LCAweGE1OWYwMDFlLCAweGNlMjU5ZjFjLCAweDI5NTczYzBhLCAweGMxZmFkMjZkLCAweDJmNmRhMjFiLAorCTB4MWUxMDFiOTAsIDB4NzhhYmMzZmEsIDB4MTA1MzQyZmQsIDB4N2YwYTFkY2YsIDB4MjAzNzM4MjksIDB4YWJiNmQ0OWYsCisJMHg1OWZiNzExYSwgMHg5YTJhNGZiMCwgMHgwZDlkZGY3NSwgMHgzNzA0YWU3OCwgMHhhZGFmNDFkNCwgMHg3Yjk2ZDE2YSwKKwkweDhiMTdiY2Y4LCAweDE0NmQ4YzgxLCAweGIzM2RmOTNlLCAweGY3NzhmNGYzLCAweGY2NTNmMWU4LCAweDg4NzNmMTJkLAorCTB4OWZmMzI3ZTIsIDB4ZmUyNTlmODcsIDB4ZjA1ZTc4NWQsIDB4YzdhMmYxNzUsIDB4M2YxNDVkNDcsIDB4MzI0ZjE4MWYsCisJMHg2YzdlM2Y2MSwgMHhmMTdmMjE3MCwgMHhiYmUyMmJiZSwgMHgxODllOGI0ZSwgMHhlNTBmNzlhOSwgMHhlZjJmMWNhNywKKwkweDgzZjVkYzE5LCAweDgwYjU1ZWEwLCAweDZmZDc0YWY1LCAweGYzNDQ5N2Q5LCAweDM4Yzg1YjczLCAweDZkMjg2NjM4LAorCTB4OTBlM2NhZDIsIDB4YTA3NTZmZmMsIDB4YmI1YjlmN2MsIDB4ZGFiODgwNDUsIDB4NjBiZWZjYzUsIDB4N2MwOWVmOTksCisJMHhlNWMxZTYzZiwgMHhmYWQzZGU1NCwgMHhkYzliYzcwYiwgMHgyODdlNWU3MCwgMHg1M2ZjODgyYSwgMHg0MDlkZGZhMSwKKwkweGZhNmY5NGJmLCAweDBjNGUzOGY5LCAweDljYTNlNjBlLCAweGI4ZWMxMzZhLCAweDRjNTEwMzJmLCAweDgyNzVkMTZlLAorCTB4NGNmNjZkNzcsIDB4NWYwMTZiZmUsIDB4NmE1ZmU2MTcsIDB4NDM1OGViNjMsIDB4NzVmNjBkZDcsIDB4NWJlNzlmODEsCisJMHg4MGY4M2U5OCwgMHhlNzNiMjJmZiwgMHhkOTkyZWZmNCwgMHg0OTAyMzhmYiwgMHg0NGU3N2U0MCwgMHg4ZjkxNWNmYiwKKwkweDkzOWFlZTcwLCAweDFkZGY1YWE0LCAweDM3ZmU4YzlkLCAweGUwZmM0ZTA5LCAweDM2ZmJmZmEzLCAweGJhY2JkYmViLAorCTB4N2Y0Y2ZhMmEsIDB4ZDNjMTU3ZDcsIDB4MWYzYWRkNGUsIDB4OWMyZjZhOGEsIDB4ODI3MmU3ODAsIDB4ZjIwYmRmMTMsCisJMHhkMTc5ZTFjNywgMHhmZWY2NDZjOSwgMHgxZmFlNDFjZCwgMHhkODA1ZjdlOSwgMHg3OGY3ZWExZiwgMHgyMWMwYzA2NiwKKwkweDE0NWE3YTJlLCAweGJmNjI5NWM2LCAweDUzM2Y0YzY5LCAweDNiZmQyOWYzLCAweDZlMzc1ZjQ4LCAweGEzYjQ4NmE5LAorCTB4N2Y4ZTE2NWUsIDB4MDY2ZWRmNzQsIDB4ZDA0ZDNmYjksIDB4MTlkMTQ5YzQsIDB4MjdmZmJlZTEsIDB4YmVhMzk3YzAsCisJMHgzNjQ5M2UwMiwgMHhjODc5N2NhMywgMHgxOWVlYmVjZSwgMHgxZWYwMjQ2NiwgMHgzMjM1ZTVkYSwgMHgwNmJkZDFkMiwKKwkweGUwNmM5MWM3LCAweDA0Yzk4ZjJmLCAweDgzZTVjN2Y2LCAweDNiOWQxZTM3LCAweGE0NDVjYTAwLCAweDI2ZjdlMjhmLAorCTB4YTU2YjgzNTQsIDB4OTFhYWM1OTgsIDB4NWM5ODQ3ZTIsIDB4ZmZmYmMxM2EsIDB4YWVkNzk1MTMsIDB4YTA5Nzc4NmIsCisJMHg3Y2UyN2IwNywgMHhiNjc0YmY3MCwgMHgwNzU0ZDc3MywgMHgwZjMyNWJmOCwgMHhjZjczODZhZCwgMHgyM2Y2Nzk1OSwKKwkweDFiMWQ2MDQ3LCAweGM3NGZiYmQ4LCAweDlkYTFlNGQ3LCAweDA1NzdkMGY2LCAweGU4Yzc2N2RjLCAweGJiOWMwMTdhLAorCTB4MzkxZWE3NjcsIDB4ZTBmN2M3NDIsIDB4YjczYzQ0OWEsIDB4YmM0YWViOWMsIDB4ZTczMWNlMDcsIDB4MGU5ZDE0MWUsCisJMHg1ZGUxNmY1YSwgMHg3ZjljMGI1NiwgMHgxMjJkMWY0ZSwgMHgwZjJmMGFiNywgMHhlZmY0NzY5MiwgMHhlZWZkYWRjYywKKwkweGNhNGZiMGRkLCAweGY3ODQzY2E4LCAweDg3ZmNjYTljLCAweGZjODQwZWE2LCAweGQ3ZGIwMTdhLCAweGI4NDZkZDc4LAorCTB4NzRkZWQ5ZTcsIDB4ZmI0OTk4ZDEsIDB4MDBmNWExMmYsIDB4NTllYjM1ZGQsIDB4MDI4ZDlhYmQsIDB4ZTI1ODE3YmUsCisJMHg2NGY5MDI3ZiwgMHgxZjAxNDZjOSwgMHhmYWE3NjljNCwgMHhmNWMxOTlhZiwgMHhiZWQxMjk4MSwgMHhmOWE3YjY5ZSwKKwkweDcwMGY2ODUyLCAweDAzZGRjNjM3LCAweDc0MzU5M2U3LCAweDUyN2VkODljLCAweDk3NTM5ZTFkLCAweDk4YjQ3NmQwLAorCTB4MmVmYzZmYjQsIDB4NWViMjViYzIsIDB4YjBhZjcwMjAsIDB4ZTNlYTUyNmMsIDB4NDFkZTAwOTMsIDB4NDdlNTA5ZDksCisJMHgwOGRjZmQ3NywgMHhmYjQ3OWVlMywgMHgyZmUxNDQxYiwgMHg0MmE2M2IxNCwgMHhjMTAzZjI3ZCwgMHgxNTJlZWY4ZSwKKwkweGJhZmI4YjVlLCAweDYyM2JlZjliLCAweDE0ZTJjZDFmLCAweGVmZGNhMjA0LCAweDJhZjFkNDkzLCAweGI4NjlkMTI1LAorCTB4ZDc5NjRhOWYsIDB4M2FiY2MzZDUsIDB4MDZhOTg5YmMsIDB4NDY4YmE3YTQsIDB4MjkyN2UzOTAsIDB4N2Y1NGRkYmUsCisJMHg3MTY0NjEzZCwgMHgyN2JjN2IzMCwgMHhmZTJhMWQ4YywgMHgxZDNhMzJiOSwgMHhjYjZhMmZkYiwgMHg5OGIzM2U0MSwKKwkweDg1M2M2MTE0LCAweDIzZTk4ZWJiLCAweDdjYTNhYjlkLCAweDk0ZWI1N2UwLCAweDdkZjAyOWVkLCAweDdlMTM2YWNmLAorCTB4OTMyYWYwYmYsIDB4NzU4NjE3M2IsIDB4ZjRmYjdmYTAsIDB4YmRjMDk5N2EsIDB4ZDNlYjk1YzcsIDB4OWUzYWMxZDcsCisJMHhlMTNiMmNkZSwgMHg4ZTdjNDBkYywgMHhiZTk0MTFjNSwgMHg3YjY0ZmNjYSwgMHhhN2I4MzNkNiwgMHhjYjdmMTk5YiwKKwkweDAyZWVlZTdiLCAweDk0YTVkYmUwLCAweDdlNzA5OTRmLCAweGUyNTYzZTVhLCAweGY1M2U0NzI4LCAweDRiZTMxNDVjLAorCTB4ZTdhNTdlN2EsIDB4MWI4ZDY1NTMsIDB4NjVhMWNiMjIsIDB4ZDBlNTkxMDUsIDB4MzdlZTdhZDAsIDB4NmI5ZjJjOGQsCisJMHhiYmU5ODU4OCwgMHhmMDc4YzllMywgMHgwZDU3MTY2MywgMHhmNDA0ZDc5YiwgMHg3MGJiMjBmYywgMHhmMzc4MWVkMCwKKwkweGRjODE5ZmQzLCAweDNiZTJiNGFkLCAweDdkOTJkNTY1LCAweDgzZThjMDlkLCAweGViOWZmZjAwLCAweGVjMjlmMmRmLAorCTB4NTFiOWIyODcsIDB4MjlkOTBlZjgsIDB4NDdkODBmNTgsIDB4MWNmMDEzNmIsIDB4OGM1N2M0YmIsIDB4NzllMjU3NzgsCisJMHhmNGI0OWI0YiwgMHhlZjIxZjhhZSwgMHhhNWM0OGI3MywgMHgzMTY1NWY5NiwgMHg3N2FhYTVjNCwgMHg2ZTk0NDdmNCwKKwkweGRiZjMzZjY5LCAweGNhYjAxZjA0LCAweGRjZWEzZmEzLCAweGU2MjY3MGZmLCAweGU1YWUzOGVkLCAweDZiNTgzZjVjLAorCTB4ZmEzZWJhNDUsIDB4NDBkNWM1YzgsIDB4Mjg3ZWYzYjcsIDB4ODlkYmQwMTAsIDB4ZjIwZjVkZDcsIDB4NzA0OWJhYjAsCisJMHhmNGI4OWY4MCwgMHgyOTdkYWM4NywgMHgzZWUzMGY2ZCwgMHg1ZjQ2NzNmYSwgMHhiMDFkY2U5NCwgMHgzZmQ3YWEwZiwKKwkweDZmZWIxZmIxLCAweGZmMDAxYzE0LCAweGQ0NjI4NmU4LCAweDIyYmNjYTI3LCAweDlkOGRmMmMxLCAweDc5NTA0NzY4LAorCTB4N2I2OGYxODUsIDB4ZWMxMjYyYmMsIDB4MjY1NWVhODMsIDB4MTU2MmI4M2IsIDB4YjNlODUyN2EsIDB4NDBhN2JmOTMsCisJMHhiM2IxY2VjYywgMHhiNDY3M2I2OCwgMHg5ZWIyZjkwMywgMHg0MjM5YzUyZSwgMHhmZDAyOWU0OCwgMHhiZDE5NzhkNCwKKwkweDNiMmFiZTc1LCAweDRkZjQ4YjYxLCAweGJkMWVlYzlmLCAweGQwMjI3ZjQyLCAweGZlOTg2NjVmLCAweDMzY2ZhY2Y2LAorCTB4ZjY5ZTNkMDIsIDB4OTE2NzE4MDksIDB4ZjQwYmY0MDcsIDB4OWZlMmIyZjksIDB4MWViNTE2MjEsIDB4ZWE3ZDE3ZDUsCisJMHhmZDA3YjBlOSwgMHhlOTU4Y2JjMSwgMHhlODU0ZmE2MSwgMHhjNzg3NGY1MSwgMHg4YzBmNzIyNSwgMHg1MWQ1YTFmYiwKKwkweGZhYmM4ZjM4LCAweGNlNTllZjM3LCAweGNmOWUxOWY2LCAweDkyM2ZkNWU1LCAweDQ0YmFmYjA0LCAweDBhNDA3MTYyLAorCTB4MTYyNGFiNWUsIDB4NWM2M2Q2MzcsIDB4MDcxOWQ3NGYsIDB4YmE3YzY3ZjUsIDB4MGU4YWNjNzEsIDB4MjBmMWVkYzksCisJMHg0YTNlYTliNywgMHhkZjlmYjQwMiwgMHhlMzExN2U2YywgMHhkMmJmY2YyYiwgMHgzN2VhMjc3OSwgMHgwMDNhNTE2ZiwKKwkweDkyYjY2ZmZjLCAweDNlMjFkYTAwLCAweGFkZTU0N2U0LCAweDEzNjljNjIyLCAweDRiMzU5MDI5LCAweDcxMmJiZjY1LAorCTB4YjJiZjE1MzEsIDB4YjdjYmJlMjIsIDB4YjQ4NTdjOWEsIDB4MjdlYmY5N2QsIDB4YzI1YzYyYzYsIDB4N2I3ZmE2MGEsCisJMHgzOWQ4MTE1ZiwgMHgyYzYzYjc4OCwgMHg5NzJhM2JkYywgMHg1ZThlN2M1OCwgMHgzNDVkZjgyZiwgMHhkZWJiYzNiMywKKwkweDdhMDM5OThjLCAweGRlY2NkMDliLCAweGI5NmYyYzE3LCAweGZjYTkzNjU3LCAweDY1YTJmYmJiLCAweDkzOWUxZWE1LAorCTB4YzMzYWU5NzksIDB4M2UzMDBhZmIsIDB4NGE3NmZiZjUsIDB4Y2JkNzRlNWMsIDB4ZGJjYWZlOGMsIDB4Y2FlN2Q0NjQsCisJMHg4MDVjYjc5YiwgMHg2M2YyY2Q3OCwgMHg2Yjc3YjQyNiwgMHhjMTFhMmY5YSwgMHhkNWZiY2Q5ZSwgMHhjNDFkZWNhYiwKKwkweGE3MTM1MTM2LCAweGFlM2UyM2Q3LCAweDIwOTgwYzU5LCAweDBhYjVhYmFlLCAweGJlNjg3MWNmLCAweDNjMmRmMzEzLAorCTB4YzY2YmVkMWUsIDB4NmFmYzU1NmYsIDB4OGE1ZWViYzcsIDB4YmY2ZDhhYzIsIDB4ODU3YmUxYjQsIDB4Nzg2YzliZWQsCisJMHhhYmY5YWE1ZiwgMHhjNDdiNTVlMywgMHhmMDM0YjVjMywgMHg0ZTNiYjg3OCwgMHg5MThmZTQxMywgMHhjMWNlZTFlMywKKwkweDdkMjEyODNmLCAweDg3OGRhZDE2LCAweGJmOGNjZDIzLCAweDQ1NjY3MWQxLCAweGE0MzUwZjdhLCAweGU5ZmFiZDc3LAorCTB4ZGRjZjEwZjMsIDB4ZTc5M2Y1YjUsIDB4NWY5NWRjNjEsIDB4ZTIxZTdlNWMsIDB4Njg4MmE4NmMsIDB4ZTZhNTNkMDcsCisJMHhmZTMxZjc5NSwgMHgxZjE3Njk1NSwgMHg5N2EwZWRjMywgMHhjM2YxODk3ZiwgMHg3MjY4ZmUxNywgMHgzYjBiYjQwMiwKKwkweGZlODBhNzRlLCAweGRmY2I2MTcxLCAweDc4MmUyMDkyLCAweGU4YTk4ZWQ5LCAweDNkYjY1OWRmLCAweGVkYmRkZjBmLAorCTB4ZmEwNTllY2QsIDB4N2UyM2Y1ZjUsIDB4N2I2ZWJmNTksIDB4M2M2MGY3NWEsIDB4ZWViYTc5ZDAsIDB4NzE0MjI3YzAsCisJMHgyYzU1MmQ4ZSwgMHhlM2MxZDQ3ZSwgMHg4ZTQ3MzcxYiwgMHhjZjExZWYxNywgMHhhZWViM2FkOCwgMHg1YjFmYzAyOSwKKwkweDY3ZDA5ZTk5LCAweGJhNjFlMzVjLCAweDYzZjQzNzllLCAweGY4ZjMzNzFkLCAweGJlM2I5NmQ1LCAweDNjZjFhZTMyLAorCTB4ZDdhZTgzZmMsIDB4N2M2ZDE4YjgsIDB4OGJhZGE3ZTgsIDB4OTQyY2YxN2YsIDB4MWFmNDI2YjUsIDB4MDdlODE4ZDcsCisJMHhmNDc4OTRmZSwgMHhkOTVkYTNjZiwgMHhkZWIwODkzMSwgMHhhNGYxODFmZiwgMHgwZTg1N2ViMCwgMHhhNjlmZDdlMCwKKwkweDhjZjhiZjgwLCAweDQ0YmY0NDFjLCAweGVmMDk4NzcwLCAweDM4ZWY5NjZiLCAweGMyZTlmYjhhLCAweGVmMTg0M2Y2LAorCTB4Zjg1Yzc4NGQsIDB4YjFmYTEyMDUsIDB4MDNlZTVkZjgsIDB4NjU2OGQ5YWEsIDB4MWQ3YzkwZjEsIDB4NjFkMjVlMjAsCisJMHgyZTNjZWZjMywgMHgxMmI1ZDE5MiwgMHg5YzViZDkyZiwgMHgzNDk4YjJlNCwgMHg4YjBiM2VmZSwgMHhmOGRhYWNlNywKKwkweDBjM2Y4ZjAxLCAweDA5MzA5YmFmLCAweDJiZjNhYmQ2LCAweDNjMTU1MGUzLCAweDEzMGYwMWQ4LCAweDkxYzA3MWQ1LAorCTB4NzE0MzUyZTMsIDB4ODM3NWJhYzAsIDB4MWUzZTA0ZjUsIDB4ZjlhNWYzOGEsIDB4ZTllZjEwYTEsIDB4OGE0NjhlMTMsCisJMHg4MWIwYmYyYiwgMHg5MDVmMGZjNSwgMHg1NjhmZGYyMywgMHg2MjZiODJlMiwgMHhkN2Q2ZmI3NCwgMHhiZWUwNzhiZiwKKwkweGYxNzVmMWU2LCAweGExYzYzZjM0LCAweDVmMDUxYmExLCAweGYzMjM1NzVkLCAweDg0NjMyN2Y3LCAweDg1Yjc2NDZmLAorCTB4MGE1NDliZWUsIDB4NGYyY2ZiZmEsIDB4OTk3ZGMwYzQsIDB4YmUyMzRlZDYsIDB4NTVkOGEyOTMsIDB4ZGM1ZGJlN2MsCisJMHg4YWY1ZDZkZiwgMHhmNWEyNzE4OCwgMHhiZjkwN2IyZCwgMHgzNTQ3ZjllYiwgMHg4ZmQxNDczZiwgMHg2ZjFmMjM3NywKKwkweDFmOTMxYjc1LCAweDNlYWQ1YjVkLCAweGI1ZDM4NTBiLCAweGViYTQ0ZGZiLCAweDE4OWRjZGVhLCAweDc5YmZiYWE3LAorCTB4NzU0M2IxOWIsIDB4YzNmMjBjZmUsIDB4ZDc3ZjFhYTcsIDB4MjJjNmJiNmIsIDB4YTJlZmU3M2YsIDB4Y2FkOWZiZTksCisJMHgzZjhkNjNmOSwgMHg5YjM1M2Y3MiwgMHhhOWZhNmEyZiwgMHhlZDE4YjZmMCwgMHgzYmZiYmU5NiwgMHgwNWVlYjkyNywKKwkweDk5ZGFlNzc4LCAweDQ1YWU3NTFlLCAweGQwOGJlNjljLCAweDY0NjJjZmZmLCAweDMyMzc1NzZlLCAweGEzOTUzODNmLAorCTB4OTU5YzNlZjgsIDB4ZGEyNzA3YmQsIDB4NWIyZjUxYTIsIDB4MGM3NDlkNjYsIDB4NjY1ZDIxZGUsIDB4Y2M1YzYyMzUsCisJMHg0NzFlM2FjYSwgMHgzMjY3MjNmMywgMHhlYjRhZjdhYywgMHhiYmM2MDRlZCwgMHhiMmFiZjAxYSwgMHg5YmJiNjVlZiwKKwkweDI3MjczZTgwLCAweGNmYWE2NTE3LCAweDFiZjE5NDYxLCAweDRmODgxODA3LCAweGQzYWQ4ZmJkLCAweDRhN2Q4MjA2LAorCTB4MTg1MGVmMjQsIDB4N2Y2OTlkYzcsIDB4YjYyZTQwOTUsIDB4OWY3Zjk4N2IsIDB4MDIzMTNkNWMsIDB4ZjY0YmI3YmUsCisJMHg2ZTE0MDk3ZCwgMHgwNGUwYmU3YiwgMHhiYTRmNmNkNywgMHg3ZTQzZjA2NywgMHgxZGY2OTcwNiwgMHg0NzUzYmM1ZCwKKwkweDY5Yzk3N2U3LCAweDZhZDEzZDQwLCAweDE1NjlkODA4LCAweDRmNmE4ZDYyLCAweDQxZDcwMzQ2LCAweDVlMTI1MjFjLAorCTB4ODk3OGMwYTUsIDB4MTFlNjNjYzcsIDB4NDZkNDNmNzAsIDB4ZjUwYWRhYTgsIDB4NWRlNjkyOWMsIDB4OTI0OWQ4OTUsCisJMHg3MjE1OWRlZSwgMHg1N2E1MDQ3OCwgMHhjNTU3YTcwYiwgMHhmZjY1Njc1ZiwgMHhmMDNiNzBhNiwgMHgwY2I4OTZmZCwKKwkweGJiZTQwNzUyLCAweDdkNDZlYWQ2LCAweDBiOWIyOWUyLCAweGRmZDIzZmVmLCAweDg4OTM4ODY4LCAweGY1NGVkMTI3LAorCTB4NWZiNDUwYmIsIDB4ZGEzYjdkY2QsIDB4ZTcxZjI2YWYsIDB4YTYxM2U2ZDIsIDB4YzkyMzI3NDksIDB4OGUzZTA0OWIsCisJMHg3ODgyZDEwMiwgMHhlMDZhOWI4OCwgMHg3MGFiYjJmYSwgMHhkYzc4NTI2NCwgMHgxOWM0ODk3MSwgMHgyYzNiZjI4MCwKKwkweDZlODA4Zjc4LCAweDFlN2FhZjJmLCAweGRjNzY4YjE2LCAweDNlMWE3Yzc0LCAweGUxZDE5YjExLCAweDZhNzFiMDM1LAorCTB4MDM4OWRiYmUsIDB4ZTNhNzQ3ZGYsIDB4YWYxYmFlM2QsIDB4NzBiNTZmMjYsIDB4MDkxMTI3N2UsIDB4ZGNjNTlkZjgsCisJMHgyZmZlMzg0ZSwgMHg0YWJkZjA2OSwgMHgyMjRmOGEyYSwgMHgzOGMyNjQ0YywgMHhkZTIxMzBlOSwgMHg4M2NmOTYyNSwKKwkweDZmYTlhZmY2LCAweGViMDFlZjA3LCAweDBjODcwYjVmLCAweGI1ZWZhYmI1LCAweGUwZTVjMGRlLCAweDhhNTE0YjExLAorCTB4YWM5M2VlODUsIDB4YjgxOGI1ZTEsIDB4YjgyYzlkOWQsIDB4NjVhMDRlNGUsIDB4OWZjODAxZmUsIDB4NjFlNzk2ZDIsCisJMHhjOGQwOGE1YywgMHg1YWM0NmFlOCwgMHg0NDY2ZmI4MiwgMHhhZDU1Yzc5MCwgMHhkNTNkNDY4YSwgMHhhOGRlMjY2NCwKKwkweDhlM2Y3MGYxLCAweGQwZjFlNTc4LCAweDNmOWY4ZjhiLCAweDI4MTg1NjM5LCAweGE1MGQ2OTI4LCAweDFmY2VkYTM1LAorCTB4YTYyYzM1Y2MsIDB4NDUwMmQwOGIsIDB4OGIxMGZlMTQsIDB4NWZmNDBjNmIsIDB4NmM5ZGMzM2YsIDB4MWJkMzA3MTgsCisJMHgyODc3YmY1NiwgMHhjMTZiZGFlZSwgMHgxYmE4Njg2MywgMHgxNGMwZmZiYSwgMHgyZWY4MjE2NCwgMHhkZDBlZjEwOCwKKwkweDUxYjg3MjBmLCAweDBlYzY1M2M5LCAweDQ2MzQwNmVmLCAweDMzMmVmMjg3LCAweDY5OGRmN2U1LCAweGRhZjM3ZjJjLAorCTB4N2VmMGY1YTEsIDB4ZThiZGE3NGQsIDB4Yzc4YzBiNjYsIDB4Y2YwZWJmNmMsIDB4OWFmMTAyYzMsIDB4OTM3YmQ1ZjcsCisJMHg0NzM4Y2EyZiwgMHhjMWU0MGM2ZiwgMHgwN2I3YzdmYiwgMHgyM2M1ZmJkOSwgMHhmYzdiYTFhZCwgMHg1OTM3OGYyOCwKKwkweGVkMDA3Yzk0LCAweDQzZDZhMjhiLCAweDVhYWFkN2M4LCAweDAxYjk2MTBlLCAweDllMWQzNGYyLCAweDQyMWJjODEwLAorCTB4NjViZjc5ZTcsIDB4YjVmMjQxNGMsIDB4NzE2YjVlMTQsIDB4YjFjMTNjMzIsIDB4YmY2NjMyZDAsIDB4YjhjM2MxYTQsCisJMHg2MWQ5YmRmYSwgMHg2ZTJiNDgzYywgMHg4NmUxZTFkMCwgMHg4NTg3ODVhZiwgMHg4N2E4NmY2YiwgMHgzYmZhNTVmNywKKwkweDBiMTc0YTZmLCAweDczZDM1ZjAwLCAweGRiOGVmODBjLCAweGY0MTY2M2M0LCAweDE0NWZkMGJmLCAweDY3MGUyM2NhLAorCTB4YmNmNzJmNDMsIDB4YzI4NTNiMTUsIDB4OTdkMzU3MjksIDB4YWJhMTRlZDIsIDB4OWQyNmU4ZGUsIDB4ZWY2M2FmZDgsCisJMHhlN2U5NmE4MywgMHg4N2FlMmRkZiwgMHg4YjMyZGUwMCwgMHg4ODk2ZGQyYiwgMHgwNTc3YzdmMywgMHg4YjhiYmJhNiwKKwkweDc0YzIxM2YyLCAweDA5ZWUyYzRkLCAweDExZmVhZWYwLCAweDVhMWY4MmNiLCAweGU5ZGFmZTU0LCAweDM0YzU0YjM5LAorCTB4MDExZmRlM2EsIDB4M2MzMWI4MjMsIDB4ZGVlNWM0OWYsIDB4OWU3NDUxYTgsIDB4YzYwMzJlODksIDB4YjhiMTFmZDUsCisJMHhkYjNiNDA1NywgMHg2MjAwNjA5YywgMHhmNzEyMjZjYiwgMHhmNzBjNDEwNCwgMHhmYThmZWNhMywgMHhhZjhlY2MxZCwKKwkweDU2ZjgzNjJmLCAweGZjNjBmM2IwLCAweGZhNjExZGJiLCAweDQ3ZDFkMGU4LCAweDViNDdkMTkwLCAweGI1NDdkMjI3LAorCTB4NDdkMTkzYmYsIDB4MzQ2ZTVkNWIsIDB4M2IwMzU3M2YsIDB4YzcwNDkxYmEsIDB4NTkzN2JhYzEsIDB4NjFhNDBiMGEsCisJMHg4MjYyNmU5NCwgMHhiMjM3NDBmNSwgMHhjMjgyYjZmNywgMHgzYWViYzQyOCwgMHhmNThmNWYxOCwgMHhlNjUyZTNlMSwKKwkweDM2ZmFkYmQ1LCAweDcxZmI0ODFlLCAweDA3OTlkODA2LCAweGE2MWU3ODBkLCAweGI3YTk0ZGUwLCAweDQ2ZTJjMmMzLAorCTB4N2VlNmNkZmYsIDB4OTlhOWZhMTEsIDB4OTYxZmIxZDQsIDB4M2Y4MWViNmYsIDB4ZWQ4NzVjNjAsIDB4ZDA1ZGNjZTAsCisJMHhhZTliMzZkZSwgMHg2ZmRjMjM5MCwgMHhmODE1YzFlMywgMHg3ZjIzNzg0ZSwgMHgwNDk2M2JkNywgMHg3YmQ3MjBiZCwKKwkweDNmZGIwN2M3LCAweGRlODA3YzIxLCAweGU4ZjgwMTkzLCAweDBhZjJmZGM0LCAweGRkOTY2N2JmLCAweGNlNDBiODI2LAorCTB4ZWY2MThmMGYsIDB4NjE2ZWJjOTAsIDB4MTZiYmY1NzYsIDB4YWY0Y2E3OTEsIDB4NWJiODNjNDksIDB4N2IyYmZiMDQsCisJMHgyN2ViMDE5NSwgMHg5ZWExOWE0MiwgMHg1ZjVlMmFmZiwgMHg5NWRkZjhkMiwgMHg4OWU4NTU3NSwgMHg3ODE4ZDI3MiwKKwkweDc4ZjllNGNmLCAweGZkMmQxZWY3LCAweGE5YTRjN2M0LCAweDFlZWQyOWUwLCAweDQ1YTI5MGY3LCAweGVlMjY1MDk0LAorCTB4YzgxMGYwNWQsIDB4M2UzZjRhNTUsIDB4NzIzMWJiNGQsIDB4NDQyZGUwMTQsIDB4MjMzZTk0M2YsIDB4Nzc2ZDBmYWQsCisJMHg3YzZiYWQ4OCwgMHg1YjBiZTgwYywgMHhmMTE1MmVmNiwgMHhhZTdlOGU1ZCwgMHg0N2JjMTY2YiwgMHhjNTY3ZWI0OSwKKwkweGI0YWRkYTkwLCAweDRkMmM1NjdkLCAweGYzYzA5ZjIxLCAweDA4N2U3OTAzLCAweDc0M2ZkMzRiLCAweDdkZmEwNDFhLAorCTB4OWVjYmY3MDMsIDB4OTIyNTc4ZTUsIDB4NjM5OWJhZmQsIDB4YjhmNGNmMjAsIDB4OTQxOGU0ZWMsIDB4ODViZWNhMGIsCisJMHg1Y2UwNTQ2NywgMHhkYmU3ZTI1YiwgMHgwMzM0YzE2OSwgMHg4ZmIyOWJhYywgMHg2MDIxYTBhNSwgMHg0ZDJiNDJhNSwKKwkweGNlMjAxODcyLCAweGJiOGY1ZGUxLCAweDdiMGJjZTA4LCAweDVmYjczYmUzLCAweGVhODFlZWNiLCAweGM3Y2U3ZmJmLAorCTB4ZWJmNThkZjMsIDB4MmZiOGY0YmYsIDB4YjdlMDM5ZmUsIDB4ZjhmMWRjY2EsIDB4YmVhZjlhNGMsIDB4NjlmYTMyZjYsCisJMHhkZjU0YzQ1NywgMHg2OGVmNTVmYywgMHhlZWZmYzdlOCwgMHgwMGM0ZGZkNSwgMHgzMzNmZmExZCwgMHgzNTNmYmM0NSwKKwkweGYxZThjYWNlLCAweGI2MGU2NzgwLCAweDA0ZWZlMmNiLCAweDFjNGE4MTkyLCAweDE1Y2UyYWIyLCAweDg2NWViOGNhLAorCTB4ZGY4Njk5NGIsIDB4MDViYWNmNTEsIDB4YTdhYzIwNTksIDB4ZjY4NzhhNTcsIDB4YWU3OGE5MzEsIDB4YWUyZWFiNzgsCisJMHhiYjJmMzk1NSwgMHg4MGZjYzAyNSwgMHg0MmJlYjE1OSwgMHg3NGZhZWZlYywgMHgzZTQ5ZjdmNiwgMHg5OTkyZmE2MywKKwkweGExY2UwZmZlLCAweDMzNzNmMmE2LCAweDVlZmIzMWQ3LCAweDA5NTk4NzEwLCAweDNmMDhmOThkLCAweDVhZmQxNTM2LAorCTB4ZmVmYjQ0MzksIDB4YWY0MGQ2NDEsIDB4ZjRmMjgwNjQsIDB4Njc5Nzg0NTQsIDB4MTNhNzk1ZDYsIDB4NmI5MTViZjQsCisJMHg0ZGY5YzNhZSwgMHgwY2ZkMmEyNSwgMHgxM2EzNDZlNSwgMHhkMWY0ZjFmOCwgMHhmN2Y5ZmU5NCwgMHhlMWJmZjRjYiwKKwkweDg2N2YzMjI2LCAweGNkYjhjZWNhLCAweGJlNTE1ZjcxLCAweGM0Njk2ZjQ2LCAweGZiN2U4NTc3LCAweDUyM2YzOGI5LAorCTB4MjE2M2M1ZmMsIDB4NDExNTE3M2MsIDB4OGYxZTgwM2MsIDB4OTU2MTBlYjksIDB4ZGYxM2QxZDUsIDB4ZjFlOWZjN2EsCisJMHg4ZjUxZTBhZCwgMHg5ZDBmOWNiNywgMHg5ZThlZjFmOSwgMHgyM2UzZDFmOCwgMHg1YmU5N2U3YywgMHg3NTMwZWIwYiwKKwkweDRiZjI4OGI0LCAweGZjNGY3YmMxLCAweGVkZmFmNWIwLCAweDAwOWViNGI1LCAweDBkZjE0MmY0LCAweDMwMTc0Y2Y4LAorCTB4ODYyYjI3YmUsIDB4M2E2YzRmZDMsIDB4MTQwYjM3ZTIsIDB4MGY0ODAxYzAsIDB4NTVlM2Q3OTgsIDB4MDRhY2M3OGYsCisJMHhkNTgxM2VkZSwgMHgxYWY4MGZkZiwgMHhlZDAwZmM4OSwgMHhiMmRkNjUyMSwgMHhjNmY3NmJkMiwgMHhlOGM0ZGU0MSwKKwkweGE3YWJkMTRjLCAweGJkNTBiYzcyLCAweGJjZTZmNTFhLCAweDliZmEyYjQ0LCAweDlhOWVhZjQwLCAweDVlNWJjNjE0LAorCTB4ZGU1NzFiMTUsIDB4NjAwYmNiNDgsIDB4ZmMwYWZlOWYsIDB4MDYwOGIxZDEsIDB4OTViY2M1ZGYsIDB4NTZlMDVmZjAsCisJMHhlMmNhNWYzYywgMHhiN2RmMDU1OSwgMHg5M2Q1YTY3ZSwgMHhjZTBiZmFhNywgMHhkYzNkZmU4MiwgMHgwNTY1NWVlNCwKKwkweDg3MTA4YzdmLCAweGZmMTQ3OWU3LCAweGQ3Zjg3NWM3LCAweGYzNmJiM2I2LCAweDBhZmM3YzdhLCAweDI3YjkzMWZlLAorCTB4YWI3YTE0ZGUsIDB4N2NmZDcyYjMsIDB4ZmEwYTE5MzAsIDB4MzMzN2Q4ZjIsIDB4MTM3ZjgxNjMsIDB4YmY0NDdjN2YsCisJMHg0NTYzYzRjNCwgMHg2ZTljMzgyMSwgMHhlMjA1OWU5MSwgMHhhN2I3N2QwZSwgMHg3NjNlMGI3ZiwgMHgxNTQ5NGE5MCwKKwkweDcyNTNiYjFmLCAweGQ4ZGViM2FmLCAweGViMjk4ZjkzLCAweGM3YWY4NTM1LCAweDA1ZGRlMjE0LCAweDQ0MjlhNjdlLAorCTB4MWVjODRiZmEsIDB4ZmZjZjBkNDgsIDB4YjNmNzJiNzksIDB4NjA0MzIxMGQsIDB4MWM1ODVmOWUsIDB4NzlmM2ZmOGMsCisJMHhkNTRkZTY4NiwgMHg5YjNmZTg0YiwgMHhiNjZkOWZmNywgMHgxMjFiZmRlMCwgMHg3ODQyYmE5NCwgMHg5M2Y3YzM0ZSwKKwkweGYwZjhjNmJjLCAweGJkNjU2NDM4LCAweGQzMDk2YTUzLCAweGZiZTJlNmU3LCAweGU0MmYxNGQ5LCAweDM4ZjA5OGNiLAorCTB4MDkwNTU5YjYsIDB4ZTNlMjBmZGYsIDB4ZjY2Y2RmMzgsIDB4ZDNkYjljNDIsIDB4MmIwZGZiOTIsIDB4ODM4NDNkZjgsCisJMHg1MjdlNzE2MywgMHgzZmM4MTQ2MCwgMHhiNmU1Zjk3ZCwgMHg0ZTUwZDViZCwgMHgzZDYwOTVlYiwgMHg5MTBhZmUzZSwKKwkweDNiODIxZmY5LCAweDUyMTdiZTRjLCAweGU5NTNkNzdiLCAweGExMzk0NmY2LCAweGRjMzY3MWQwLCAweGU4MDFiZDdiLAorCTB4YjhjMjI4M2UsIDB4NjU1Y2ZjZmQsIDB4Y2Y3NjQ1ZTcsIDB4YWJlYzQ1YzEsIDB4ZjZmMGE3YWUsIDB4MDJmNzYyNWQsCisJMHg4MWRiMjhmMiwgMHhlZGZhN2E3YSwgMHg0OWYzNGU4YiwgMHhkM2I0MWU3MCwgMHhjZjIyYWJkMywgMHg1YmZkZjgxYiwKKwkweDY4YmIzZjQ1LCAweGViMGZiZjc1LCAweGUzZWZjMGRlLCAweGJhOGUyZmZhLCAweDFiZTdkNjBlLCAweDJkNjFkNWQzLAorCTB4NDRmNDI5NWQsIDB4ZjQzOGViZTksIDB4ZjFmOTlkZDMsIDB4ZGZjYjUwM2EsIDB4MDQ5Y2JjY2IsIDB4ZTNkMTUxZjIsCisJMHhlYjhhZmFjMywgMHg5YmQ3YTg2MywgMHhlNmRjM2YzZSwgMHg4NTdlYjJlZSwgMHgzNWU4YWYzZSwgMHg2NDIzZDk3ZCwKKwkweGQzNDY0NGFmLCAweGViZTNjZTcxLCAweDJlZGNkNzMzLCAweDQxYzY4YmIzLCAweDg4NmZkMzhjLCAweDczY2JkZTU2LAorCTB4MzkzZTgzNDQsIDB4OTVlZDIxYWYsIDB4YWM1NzM4NjYsIDB4MDdmOTdlNjMsIDB4M2Q4ZDY1NmIsIDB4YmVkYjg2ZWMsCisJMHg2N2JkOWVkOCwgMHhiNmI5N2YzYiwgMHhlZjhhMjNmYywgMHhjZWY4ZjE0MSwgMHg4NjhlZDZhZCwgMHg3ZTE0OTFmZCwKKwkweGJmNjdiN2NmLCAweGM5YzgyZjA2LCAweDMxYTMyMzc5LCAweGFmZGY0ZTdlLCAweDdlZmE3ZTdlLCAweDcwMzVmZGY1LAorCTB4ZDhjMWFhZmIsIDB4ZDJhOWRhMzgsIDB4MTYzNmVjNGYsIDB4Y2Q2OTdkNDcsIDB4MTRmMGNkOTMsIDB4NzNmODZmNWUsCisJMHhkNGI4ODc5YiwgMHhhM2FlNmY3ZiwgMHhhNDRlN2EyMSwgMHg3ODE0NjhmNywgMHhjMmU3YmUwYSwgMHgwZmUwOThjYiwKKwkweDFlZmY5NWE4LCAweDZjZGQ5ZGU5LCAweGY0MTNmMzM3LCAweDYwODhlZmQ2LCAweDg2ODNlYTNlLCAweGU4MjIwM2E3LAorCTB4MDQ4MjIzZjUsIDB4YTBlY2YwZjUsIDB4NjM1MGIwY2IsIDB4Yjk3YjMwMGYsIDB4ZWYwMDNkODcsIDB4NjU3Y2QwYTQsCisJMHgwZjY2MmVlYiwgMHg1ZGExZDRiNCwgMHgwYWVkNDk1MSwgMHhlMDFiM2I5MCwgMHg3Y2MxOTAxZCwgMHgyNzY4MTk0MCwKKwkweDg4NWVlYzg0LCAweDc3ODZjYWFmLCAweDBjNWRiOTMyLCAweDM3YTVhNzRmLCAweDFmMzNmYWIyLCAweDhjMzUzNzRmLAorCTB4OWRkNWJiMDAsIDB4Y2U5MzJmMGMsIDB4YThmYjVkYjQsIDB4ZjU1N2RhOTksIDB4NTA4YTI0YTksIDB4NzZjOGFhZmIsCisJMHg0ZWQ2NzdlZCwgMHhkZTNiZGNhMiwgMHhhNGJiYzAyNSwgMHg2NWE4ZmYzNCwgMHhlY2VkZmY3MiwgMHg4ZmQxYjY5OSwKKwkweGRhODFiZjgyLCAweDU0ZDliNzY3LCAweGZiNmY2Zjc2LCAweDAzOWI2NmUzLCAweGZlZGJkOWYxLCAweGNkMTdiNGU4LAorCTB4ZGY4YTM4MDQsIDB4ZTQyMWYyODIsIDB4YmUyOGZlMDcsIDB4ZjQ0MmEzZmYsIDB4NTM3ODBiMTcsIDB4ZTVmNmU1ZTgsCisJMHg4OGNlZDEwYiwgMHgwYTZhZTZiYSwgMHg3MzY1OTNjNCwgMHhiOGRiNzAzYSwgMHhjMTg2MzY1ZiwgMHg3MDYxODlhOSwKKwkweDM3NmU0YTI2LCAweGZiYmRkM2Y0LCAweDNiZjAyOGVhLCAweDA0ZmEzYmJmLCAweDJiN2U3OWRhLCAweGY0MWZkYmYzLAorCTB4ZTNhOTE1OTQsIDB4MDI2ZDZiZGIsIDB4MTBjMDk3YTcsIDB4ZGM3NzdmZDgsIDB4ZWMwMTI3YjgsIDB4YzA1OTZjOTUsCisJMHhiMmZkNGVmNywgMHg5OWYxZTllZiwgMHhkYjY2OWZjMCwgMHg2NjI5ZDI1NywgMHhmZGUyMzY0ZiwgMHg2MDU0N2YzMiwKKwkweDNkMmFjM2M4LCAweDRkZGZjZmNlLCAweDNmZGM1ZmY1LCAweGRjZmYxZDQ0LCAweGI1YWJjZDZlLCAweGMwMjJmODMxLAorCTB4N2JkY2NlY2YsIDB4ZGU4MGY0MGMsIDB4YWU1ODRlZTQsIDB4MmI5MDA0YjgsIDB4MjRhMWVhZTQsIDB4ZGQ2YTVmM2MsCisJMHg2ODlmMDM2NywgMHhlMGU3N2YxNywgMHhhNDllZWI3YywgMHhkYWFkMzQwNSwgMHhiMDM2OWZmMiwgMHgzZTM4ZWFlMywKKwkweGY4ZWQ0YmNlLCAweDc2ZTU1MzVlLCAweGExMTNkZjExLCAweDAwM2QyNmZkLCAweDg1ZDZlYjdlLCAweDFmZGVlYzU5LAorCTB4YzhhNmFmYmIsIDB4ZWY5ZmYxZDUsIDB4OWNjNDUyMTksIDB4NGNmZjc4ODksIDB4OThhNzM3ZDEsIDB4OWYxODNlYmQsCisJMHgxZGZkOGViZiwgMHhmN2JhMjljYywgMHhlZmU1NmVjOSwgMHhjZmY1ZTk5MywgMHhlMmIyNmM2NywgMHhhOWY4YzMyZiwKKwkweDRmZDY3NjY1LCAweGZiMmJmYjZmLCAweDUzZTIwNGIzLCAweDI5NmNiZmVkLCAweGIzZjhjMjIwLCAweGVmYzI0YjNmLAorCTB4M2RhNDBmZTcsIDB4M2RmNjA4NTUsIDB4MDEyMzlkOTEsIDB4YTJmNjQ0YWMsIDB4YTdjZmNiN2UsIDB4YmMyZjZmZTgsCisJMHg2NzkzYmU3YiwgMHgzY2JkNmVkZSwgMHg2ZTI0NjZlYiwgMHhkMDA0ZDcyYSwgMHg5ODAzZGNjNywgMHgwN2M5OTFkMywKKwkweGY1YmJmZjQ1LCAweDU1ZGZhZDMzLCAweDcyMmIwN2FmLCAweDZlM2ZkNzMyLCAweDc4MDIxMGQ1LCAweGZiYzJjYzc3LAorCTB4OGMyNDA3MTMsIDB4YzllYmQyZjcsIDB4YmQwNTgzNTMsIDB4MjA0ZmMzZTgsIDB4NGQ2ZDZkN2QsIDB4ZmU3YjAxOGYsCisJMHgwMDlmNjBkZiwgMHhjNjVlYjZkZCwgMHg0OWFhODNmNywgMHhjNzc4MWVlMCwgMHhiNDU1YmFhOSwgMHgyNGZjNjAwNywKKwkweDY3ZDg3YWYzLCAweGUwYTEzZThhLCAweDFlZWFlZGE1LCAweDdmZGE1OGYzLCAweDdkODM0NWY2LCAweDc2ZjEwNTA1LAorCTB4NTc2ODJmZjAsIDB4YzFmZGY4NGYsIDB4ZmU2NzkwMDQsIDB4MDdlNzg0YTAsIDB4YzZmNzE3ZDksIDB4NDVmMTU0MmMsCisJMHg3ZTAzNTVmZiwgMHg2ZWVhZmI3ZiwgMHhmYzYwZjdlZCwgMHg4YjZlZDBmNSwgMHg3YmNiZDk4MSwgMHgwNjNkZmZmNywKKwkweDU3ZGJkNGY4LCAweDkwYmMyMTJmLCAweDZmNTNkMTNlLCAweGNmM2JmZDQ2LCAweGQxZmM4NjJhLCAweDg4OTliZDZhLAorCTB4ZGUyMTg3ZDksIDB4MTUyYzZhNmIsIDB4ZmFlZjQyNmIsIDB4NjQ4N2NlNzAsIDB4ZDRmNDk1OTUsIDB4Mjc3ODQyMmIsCisJMHhkMGYwMDkyZSwgMHhmMDU2MWY0MywgMHgzZTMzZDNhYywgMHg3NzNkNzFiMiwgMHhlZjBmMTkxOCwgMHg0ZDVkYjY1ZSwKKwkweGM3N2JjMGE4LCAweDBhZmIxOGZlLCAweDhmNGNjZjk0LCAweGVlN2JkZWVhLCAweGZkZjBlOWM5LCAweDlkZGVjOGEwLAorCTB4N2VlMjJhYjgsIDB4NjJiM2JkZGEsIDB4ZGY2YTg3NzgsIDB4ZWI4YTRlNTIsIDB4YzVkMDY1NzYsIDB4ZmFkMTZmMGIsCisJMHgzMzQ1ZjY1NywgMHhiY2U0YmFmZiwgMHgyMjRmN2Q1ZSwgMHhmMWM3ZGY1YywgMHhjZWNjMTgxNSwgMHhlMTgzYmNlOSwKKwkweGFjNmZhOGJkLCAweGIwZjU3NGNmLCAweDQzNjFmZmY3LCAweDAwNTgzOTNkLCAweGZhZDQ2MmUyLCAweGZmYWMyMzRlLAorCTB4M2U4YWQ5YmYsIDB4MjVhNWZjNjcsIDB4OTc4YmY4MDYsIDB4YjQyMTBlZTQsIDB4OTI2OGIyZGYsIDB4YWMxNTc0MGIsCisJMHgzM2IwNzYyMywgMHgxODMwMWZiNiwgMHgzNzMyNWQ2MCwgMHhjZjVjNjJhNSwgMHg3MzFjZmMyYiwgMHgzMWEzNGI0OSwKKwkweDRiMTc0NTU1LCAweDE5ZDgzOWY4LCAweGFmMTI5YmQ5LCAweDk2MzJiZWZhLCAweGZiMzM5N2YxLCAweDcxODE3ZmNhLAorCTB4OTEzNDdmMWQsIDB4ZDBmNDExOTEsIDB4ZmU0Y2IxODUsIDB4YTc3YTMzNmUsIDB4Yzc3YTg2NmYsIDB4NjhkZjc4MGQsCisJMHhlZjVmZmVlZiwgMHg5NzkzNzc4NywgMHgwMzhjNzMxYywgMHg1ODk0ZTBiZiwgMHgwZWRhMGZiNiwgMHg3MTBmNTJiZSwKKwkweDgyMWY2ZGMxLCAweDY2NzJhMmQ0LCAweGEwNjhiMTYzLCAweDFjNDViZWZkLCAweDk4NzdhZmNjLCAweDkwZDZiZGZkLAorCTB4MTJiODk0M2YsIDB4YzUzNzllNjAsIDB4ZDZmZGJlMzIsIDB4ZGNlNjgzMDEsIDB4YmVmZTJkZWMsIDB4OGNiMWY1ZWYsCisJMHgzMmM2YTUwZiwgMHgwM2Q2ZGFiZiwgMHg3MDBiMDliOSwgMHhjNDQ3YjlmZiwgMHg2NGYwMWY4MiwgMHg0NTZjM2Q0NywKKwkweGU4YTgwZmM1LCAweDZmMGY5MzZmLCAweGZlODYzZTlkLCAweGMxOTc3MjczLCAweDM4ZWRjYjBlLCAweGYzMDg4MmZjLAorCTB4MjQyMTljNzUsIDB4ZjQzZDIwNGUsIDB4YWM2ZjBhMzksIDB4NWQ1YmRlMWEsIDB4YzcxZDFlMGMsIDB4MGFhZmQ4NmUsCisJMHhmZTA0YTlmZSwgMHhiZmNkMDY3MSwgMHg0M2M1MmVkNSwgMHg3ZjgyOTgzYywgMHhmZjRhMWU2NSwgMHhkYWUyMTY4ZSwKKwkweGU0YWRjMTYwLCAweGZlMTVmYWRhLCAweDMxZWZlNTY4LCAweGU1MTNiMDRjLCAweDVkMjAzM2VmLCAweDZlYjliNzZlLAorCTB4NmY3MmM1ODksIDB4ZWNjZmU0MGEsIDB4MzZkMjdhNjMsIDB4NzI0OTRmMmUsIDB4OWZjMDcwZjEsIDB4NzlmMzRlYjIsCisJMHhiN2E3OGNhYSwgMHhlM2U3ZWZmZSwgMHg0YmFmZDI1NCwgMHgwZWM4YWZkNywgMHg3NmNkZDIyZiwgMHhmMGVlNGYxNiwKKwkweDEwZTljYzA2LCAweDhlOTZkNjc3LCAweDE1NGE5ZjdmLCAweDhlM2Y3Yjk3LCAweGZkZjY4Y2ZmLCAweDgzMGViNmMyLAorCTB4NTU4ZmVlMDEsIDB4NTBlMjEwZWYsIDB4YmVhN2VkZGQsIDB4YTkzM2EyMWQsIDB4ZWRhZmU5MDUsIDB4NWM3ZGMxMTgsCisJMHhlNjVkZmNkZSwgMHg5ZjcyYTQ4ZiwgMHhlNzg2ZWJiZiwgMHhmODdmYjBlYiwgMHg4MTIwZmIzOSwgMHgxYmZkOTNhNiwKKwkweGZjNDEwZTU2LCAweGFmYjA2YzA2LCAweGZiYTI3OGMyLCAweDQ2ZGFkMjA2LCAweDkyZWJkMDIzLCAweGU1MmQyYzY1LAorCTB4OWE0YmQ1ZTcsIDB4NGIzZmI4ZGMsIDB4YzQ3OGIzZDYsIDB4NGNhOWIxNjUsIDB4MjU3YTczM2UsIDB4ZjhjMWU4ODYsCisJMHg3YjRkYmFkZSwgMHg1YzFmZjA4ZiwgMHg3ZDZkOWU3ZSwgMHg0YmY0MGY2YSwgMHg4MGZiZWJlOSwgMHg5ZWRhOWI4ZiwKKwkweDU1YzMwNzU4LCAweDQ2ZWNmNWU4LCAweDQ1OTRlMTE5LCAweDNkZjNjZjZiLCAweGI4Y2ZjY2IxLCAweGY3YTMzMGZkLAorCTB4NWNlNTFiYzksIDB4YjI2YzRmNzgsIDB4YmZjMWQ4OTcsIDB4NGRjNmQ2ZmQsIDB4YjdlZmYwMjIsIDB4ZDk1MzllODAsCisJMHg3Yjc5MDczZSwgMHgzMTYzZGY2NiwgMHhkNmY5MDdkZiwgMHg0N2UwMjA2OSwgMHg2NTI0NjZkZiwgMHg2MmZiNTQ1YiwKKwkweDM0Mzc4NmVmLCAweGI5YmNiN2ZiLCAweGViZmEzYTZlLCAweGUwMDVlMjNiLCAweDU1YmVjYWYzLCAweGU4Y2RiZWYwLAorCTB4ZmZmNzBkYmMsIDB4OWZmZGJhOWQsIDB4YzJiN2RhY2YsIDB4NGY3YWQwYmEsIDB4ZDRmZmZkZjEsIDB4ZTlmZmJhMzQsCisJMHg3MThkYjhhNywgMHg2NmQ5YzAwMiwgMHhkY2NlZmM4YywgMHhmZTkwZGY0YiwgMHhhM2I1N2M0MiwgMHgyOTdkNWYwNywKKwkweDZjMWZmOTk2LCAweGVhZmZiNGU5LCAweGZmYTEyZTNiLCAweDRlM2UzNDIxLCAweDJiZTU0ZjM3LCAweDAwMmE5Mzc0LAorCTB4MGFlOTFiZmUsIDB4NTE3YzAwOGUsIDB4NTMzZDAyYmMsIDB4Y2NmZTdhM2QsIDB4MDc5NWRjMGMsIDB4ZTFmZjNjMjQsCisJMHgyZTNjNGJlNywgMHg2YTk0NzcwNCwgMHg5OWY5ODZiZiwgMHg2ZmRkNmZiMiwgMHhmMmIyMzhjMCwgMHg5ZTgyNTc2YiwKKwkweDQ1ZTg1MDlmLCAweGI4MmIzY2ZhLCAweDc5NTNjNzg3LCAweDcxZjYxNjc2LCAweDhlYjA3ZTA0LCAweGVjOGFlM2UzLAorCTB4ZmY3ZGViZWUsIDB4NjVjZjQwYzEsIDB4Zjk4NDYyZDQsIDB4MWQ4MmY1OTAsIDB4NzcyOTQ1ZDYsIDB4YmRlZjY3YWMsCisJMHg5NGYwZTYxZSwgMHgyZGJmODdlZiwgMHhkZTNkODNiZSwgMHhmMGNjM2QyMSwgMHg1YzQyMzQxZCwgMHg5MzFmMjhlYiwKKwkweGM1Yzg0NDYzLCAweGI3MGM0MGZkLCAweGI2N2Q4NjBmLCAweGZiYWZjYTg0LCAweGFjZWJmMjU1LCAweGFhNzQ4OGRjLAorCTB4Y2UyM2UxZTAsIDB4YjFjNGFlYjcsIDB4YzdjZTNmNzksIDB4NWQxZjA3ZTksIDB4ODJmZjBhYTIsIDB4M2Y2YzA5MjQsCisJMHhlN2RiMDI4YiwgMHhiYjNmYzAyMiwgMHg5MGRiYTZlZiwgMHg0Yzg4ZWZkZSwgMHhiN2IwNzZlZiwgMHg0N2VmZTFlMiwKKwkweDhjZmE0MDZkLCAweDdiYzc2NjliLCAweGNlNDk0ZjJmLCAweDdlOGQzOGE4LCAweGVmNzRjM2U0LCAweGNlZDA2N2E2LAorCTB4ZmQ4NWZhMDMsIDB4OTdmZDFiZGUsIDB4MDg5M2ZkMDEsIDB4NzRhM2VmNzQsIDB4ODUzZjVhYWYsIDB4ZmM1ZDI4MGUsCisJMHg3Y2E1ZjAxZCwgMHg3Mjg1ZDNkNywgMHg2NWUwYTkwZSwgMHg3MzFjZWU5YiwgMHhlOWUxOWRhYSwgMHg4ZDUyMDBmZiwKKwkweDgwMDBiNTZlLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYmRmZjAwLCAweGQ1NTQ3YzA5LAorCTB4ZjM3ZGY4ZDUsIDB4MzMzMmM5NjYsIDB4YjI3NjRjOTksIDB4YTAwYzQ5MzAsIDB4ODA0OTBlMmMsIDB4MDg0ZWQ4YjAsCisJMHhjMzg4NGEyMCwgMHg5M2EwZDc1MiwgMHgzNjRiMDkwMCwgMHg5NDU2OTUxMCwgMHg4YjA2MjA4MSwgMHhiNjJkMTUxOCwKKwkweGVmODU4MzIwLCAweDEwNmQxYjQzLCAweDI2ODM1OGE4LCAweDYyMmQxMTEwLCAweGE1N2ZiMWRjLCAweDQxNDU5MDQxLAorCTB4ZWQxZmE4MjIsIDB4ZTczYmY1ODcsIDB4MzMzMzdiZGMsIDB4NmEwMjI2NmYsIDB4ZWZjN2UxZmYsIDB4ZGY3N2RlZTYsCisJMHhjZjdlY2U1ZCwgMHg2ZWM1ZjczOSwgMHg4NDM2MzFkMywgMHhhZTYzMDczMSwgMHg3ZDhjMDFlNiwgMHhmNGJmM2Y4ZiwKKwkweGExMmQ4Yzk3LCAweGNmMzc3M2U3LCAweDgyMjQ3MTVlLCAweGYwZjdjZmQxLCAweDVlNzliYWJmLCAweGM3NzZiZDUwLAorCTB4ZTkxYzU3YWYsIDB4YzVjZmFmZTcsIDB4ZmZlMDUyNWYsIDB4ODk2N2E2NzEsIDB4NDdmMTU1OGMsIDB4ODllZjRjYWMsCisJMHhmYmMwMjViNSwgMHg2Y2Q2OWQxMSwgMHhlMjY2YjQ5OCwgMHgwMzg0NjMxOSwgMHg4MzE5Nzg5ZiwgMHgxYzYzNmZmNiwKKwkweDZmYWEzZTU0LCAweDFmMmJkM2RlLCAweGU5Y2MzMWNhLCAweDliMzlhNjg1LCAweDk5OGYxNTMzLCAweDFiMzYwNWIxLAorCTB4MjdmOTY3YWQsIDB4YjBkZDkzZDMsIDB4YzZjNjQ2ZGUsIDB4YzU5YmJhZTMsIDB4ZDlkZDcyN2MsIDB4OTljNjg1MzYsCisJMHg4ZjczMjllMCwgMHg2NjY3ODM4OSwgMHhhMDdiOWU0ZiwgMHg2NjA3ZjlmZiwgMHg4ODZkOTY0ZiwgMHg3MGExM2ViZiwKKwkweDQwMThlYWJlLCAweDdlYzQ4YzRiLCAweDBjOTg1NTYzLCAweGM5YmY5ZmU2LCAweDMyNjUzM2U0LCAweGM0OWYwNWI2LAorCTB4YTNkYjJhYzMsIDB4ZmQzMjliN2MsIDB4Y2NmNGQ5ZWYsIDB4OTYzM2I3YTUsIDB4NzVhNGNiNmIsIDB4YjE1YWVhYzEsCisJMHg2NDY4NThlZSwgMHhkZmJjYzE5NywgMHg5YmI1OTY2NiwgMHgxZGQ1ZDFlMSwgMHhiMDgxZTJkZSwgMHhlZjQ2MmQ4ZiwKKwkweDM4OTk4OWQ0LCAweDFjMWFmMzk4LCAweDlkNjI5YWZmLCAweDZhNTgwMWVkLCAweDM4YTZjYmFjLCAweDY5OTJkMDA3LAorCTB4Y2Y4ZmI2NWUsIDB4ZWNlZDk3OTMsIDB4ZWVhMWIyY2YsIDB4MmRiOWU2NzAsIDB4ZjgxMjhkOGMsIDB4YzkzMGFkNjIsCisJMHg0MjFjM2Y3MCwgMHhkOWUxYzZmMSwgMHgyMDE3NWUxMywgMHgxNzUwODY3YywgMHhkNWUyN2U3YSwgMHg2NjdkMWJhOCwKKwkweDAxNDRmM2ZmLCAweDc4NjMyZmJmLCAweGQzYzFhZGY5LCAweDFkMGU2NmRiLCAweDU1M2U2MDI3LCAweGNhY2M2NjQ5LAorCTB4NWM1NTRiM2MsIDB4ZGI2NjI4ZmYsIDB4NzczZmYwZTQsIDB4MWMyZTYyOGMsIDB4NTcxODlhN2YsIDB4OGZmYWNiYjYsCisJMHgxMGFlYWZhNiwgMHg3ODg2OWFmYSwgMHgyMmU4OGVhZCwgMHhkMDUzZWFiYSwgMHhiY2MwNzQ2OSwgMHg4YmRkMTk0YywKKwkweGVlOThmYWMxLCAweDgwYWM1ZWRhLCAweGJkNzFlYWJhLCAweDI5NTU0ODAwLCAweGY2YzdlYmUwLCAweGQ3MzM4ZDg0LAorCTB4MDFkOTllMjMsIDB4MGNjOWNiMTMsIDB4Y2RiNTY3ZGQsIDB4ZDFiNmUxYzAsIDB4ZTg2NmZhMzAsIDB4Yjg2NWUwOTcsCisJMHg4MzhiYzAwMywgMHhkZTM1ODVlMywgMHhkYzZiZjg4YSwgMHhkNzg4NjI2OCwgMHhkYzM5NjM2ZiwgMHg2OGQ5NTNhYywKKwkweDQyYjdmNDAzLCAweGM2ZjcyNDdmLCAweDU3MDM5ZWE5LCAweGQ5MzFiZDQxLCAweDllNjA1MGU4LCAweGMyMmU4NjEzLAorCTB4YTBhYjg5ZmIsIDB4YWRjM2U4OGQsIDB4YmM0ZmJlMjAsIDB4ZGY5YWUyM2EsIDB4YTI3N2JiNDAsIDB4OGJjMGU1OGUsCisJMHgwNWIwOGQ1YiwgMHhhN2JmYzNhNCwgMHg0ODI5MzZmOSwgMHgyN2M0MmRhNywgMHhjMWIyYzdmMywgMHhiZWRlNzgyNiwKKwkweGQ1ZDExODY5LCAweDA1MmNlMmFjLCAweGU2Y2U3NmU5LCAweGRiOWYwNTU4LCAweDJhNzRkOGM3LCAweGQ4NjNlZmYzLAorCTB4MTNlODk1NDIsIDB4MTZkZWEwZjgsIDB4ZGU2MThmODAsIDB4ZDVlMTE1M2EsIDB4NmM5M2NlM2IsIDB4MTFlYzY1ODgsCisJMHgyM2UzMzVkYiwgMHgzMmNlODFkMiwgMHhjYzFiMjQ1OSwgMHg1ZjUwNDNkOCwgMHhiNDZiNzAwOSwgMHg0YjE2MTRiYiwKKwkweDBhNzMwNmY1LCAweDIzNjMyMWYxLCAweDBjYWRhZTA4LCAweGQ1MThkNGYwLCAweDYwNDU3NzVkLCAweDdmNWUyY2ZmLAorCTB4ODZlYWYxYTQsIDB4OWVjNjM0ODYsIDB4MjIzNTcxODksIDB4YmIzMDNlOWUsIDB4ODdmOWMxMWYsIDB4NDRhOWQ1MjYsCisJMHg3ZmFlODJlNywgMHgxMjdlY2U4MCwgMHgyYzJlZDRiZCwgMHhlMGYzODc2MiwgMHgwZTY2MGVmNywgMHg0NzkwMWJhNCwKKwkweGY4MDY2ZWI3LCAweDliM2RlODk1LCAweGJkMzU1ZDcwLCAweGMzOGUzZThlLCAweDY1N2NiNmQ1LCAweDdiYTE4NGY0LAorCTB4MjE3ODhlYjksIDB4OGNjN2Q4MTcsIDB4YWVlZjExZjAsIDB4N2VjZGNiNTMsIDB4NjZjNWIzYjksIDB4NTJlZDRjMTcsCisJMHhmY2ZjNWIyNiwgMHg3OWViNzI4NiwgMHg1OTNiOTczMywgMHg5ODIyOWE1MCwgMHg3ZWM3NjJkNywgMHhhYzIzYTIzZSwKKwkweGU1ZmFlNGM3LCAweGRkNjJjYWQxLCAweDNlMTg1Zjc4LCAweGViODkwZDdlLCAweGFjY2Y5NDY3LCAweGYyZmY3ZmU1LAorCTB4MWZkMGExOWIsIDB4OWY4OTU3N2YsIDB4YzRmY2UzNWUsIDB4YzVhM2Y1ZTUsIDB4M2MyMjI2OWYsIDB4YmRmMDkzOTAsCisJMHhlYjFjYzVkYiwgMHhlYWRmM2E5NywgMHg1ZmI5NzQ4YiwgMHgzZWEwOWI2NSwgMHgyYWY0NjRkOCwgMHhlNjZkYjgzMSwKKwkweGYxOGEyNWIwLCAweDk0NWIwZDkwLCAweGE4MjBjYjU2LCAweDJlNjE0YmZmLCAweDdmZTljM2MwLCAweGJmYWU1NGE5LAorCTB4MTMzZTNkZDcsIDB4YTFkOWFmZGUsIDB4N2U4NTJlNzMsIDB4ZjEwYTJkMzUsIDB4ZjMzN2IzODMsIDB4MzcxZDAwNDUsCisJMHgzMTA3NTk0NywgMHhiNzcwYWYxOCwgMHhmNjgwNjVkOSwgMHhjOTA0NGFkMywgMHhkNzAwOWM2NSwgMHgyZmViOTA2MSwKKwkweDgyNjhjYWU4LCAweGMwMmRmNWU3LCAweDVkM2Q1MDdmLCAweGY1YzZhODA4LCAweDZjMzE5ZGVhLCAweDgzYmUxZjgwLAorCTB4MWZiNDdjZGUsIDB4MWJkYTAwZWMsIDB4NGY2N2M4OWQsIDB4OWZmMWYyNDUsIDB4ODFmMGNjOGEsIDB4YmU1MjgzMTAsCisJMHg0YTAxODhlNywgMHg2ZTgyNTk2MSwgMHg2MmM2N2FmNCwgMHg3ODUwNGYwMCwgMHgzMGI1MWNiMSwgMHgzYzA3YTVkYiwKKwkweDM1ZTY3YTJiLCAweDc1NDZiZTAwLCAweDlmMDhhYWI1LCAweDhlODcyZWFjLCAweGU5ZjNmZDk5LCAweDNiZWQxOGJiLAorCTB4MzlkMGVmNGIsIDB4ZDZkNWY0MDMsIDB4N2FhYmNmYmQsIDB4MzFkMGViODAsIDB4OTQyYWY1OGQsIDB4NmY5ZTMxODksCisJMHg0NjIzZGUxMCwgMHg3YjYzZDVkNSwgMHhmNTU3YjE1YywgMHhhNTdjZmY0MCwgMHhlOTA1Yjc2ZSwgMHg0NGU2MWFlYywKKwkweDI0ZjkyYWI5LCAweGMxYjU5M2FlLCAweDgxZWM1OTcyLCAweGRhMTU5NzRlLCAweGI1NzcxYzQ3LCAweGM3ZmQ4MDBkLAorCTB4ZTM4Mjk5YjgsIDB4N2MwZGZkNDksIDB4MGU5MTYyYzYsIDB4NDRjYTVkZTMsIDB4M2ZlODY3MTgsIDB4OGU0N2MxMTgsCisJMHg2OGVmNzViMywgMHhiZTNlZjkwNSwgMHgxOGUyOGM2MywgMHg2YmU3NGExMCwgMHgzOGI3ZTM5OCwgMHhjZTlmNzdhZSwKKwkweDM0NzVmODg5LCAweDk0MDZkNzMzLCAweDYyYmE3ZjEzLCAweGY2NGJjMjBjLCAweGY1Y2IxZGVmLCAweGE3OGY0OGNhLAorCTB4ZWUxNTQ0MDgsIDB4MWRlNzA2MjcsIDB4Yjc2ZmEzN2UsIDB4NmMzM2Q2MDEsIDB4ZDFiNzc3OTYsIDB4ZDk5ZmIwMTEsCisJMHhlZDRiYzY4YywgMHg1MjNlZDJmNCwgMHhiMTBhNzgwZSwgMHhkMmM2YjZjYywgMHhiNzhlMjMzOCwgMHg3ZTgwMGRiNiwKKwkweDFmYjA3NTQ5LCAweDc4ZWY0ZjY4LCAweGE2Yjg0MTRmLCAweDg4Mjg3NWQ3LCAweDc3N2JhZGNmLCAweDNhZDM3YWQxLAorCTB4ZjgyOTc5ZGEsIDB4MTc2MTc5ZWIsIDB4NTYwM2RiNzQsIDB4ZGIyM2VkMWQsIDB4ZjJjZGY1Y2EsIDB4NjY2ZjVjNTMsCisJMHhhZGIyN2FjNywgMHgyYzdkZmUwOSwgMHhkNzI0ZjQyZiwgMHhmNjZiZjhjMSwgMHgxN2VmNzU2NiwgMHgyODk1ZWVlNSwKKwkweDUyZTQwM2U0LCAweGM2OTFhYzZlLCAweGU5ZWFjYmI5LCAweGJkYWJmYjhmLCAweGQyMGY3M2IxLCAweGRmN2JmM2UwLAorCTB4YjQ3ZjEyYjEsIDB4MTM3ZTEzYzQsIDB4Zjg0YTdkZjcsIDB4YmE0ODVjNDgsIDB4MzdkOWFkOTgsIDB4YjE3OTQxNWYsCisJMHhhNjcwMTRhNiwgMHhjYTU5YzI4NCwgMHg3ZWI4MzU4ZCwgMHhmNDViMWZhMiwgMHgyN2NmYTAyNCwgMHhkODgyOWVlZCwKKwkweGNjYTU3YjQwLCAweDIwMTU5ZDFlLCAweDhmN2JlNDk3LCAweDE5ZWU2NjJmLCAweGVkNjE5MGIwLCAweDE2NTk1YmU1LAorCTB4YjE3ZWY3YzksIDB4YzI3ZGYyMDEsIDB4OTEyMmZiYzAsIDB4MmUyYzlhOWUsIDB4NTY5ZmI2MTcsIDB4Y2YzODhkZDgsCisJMHhmYjQyNTgzMywgMHg5NzVlMDYzMywgMHhlMDQwN2FmMCwgMHg1Mjc2M2IzMywgMHg4NzA4NzViNiwgMHhmOGU4MGQ5MywKKwkweDRmZGU0ODk5LCAweDhkZWU4ZjJiLCAweDgzYmIwOWQ1LCAweGUwZWIwYmQzLCAweDA4ZmI4MmY0LCAweGM2NjZiZmI0LAorCTB4NzQ4YzNjNzIsIDB4OWNmNDhhNzksIDB4ZmVlMmE2NGUsIDB4NzZmODE3ODYsIDB4MWIwZWRkMjMsIDB4ZjQ4ZGRkZWYsCisJMHg5ZDA0Y2U5ZiwgMHhhMjc0ZTc4YywgMHg2M2RiZjdhNSwgMHg3MTFkN2NiOSwgMHhkYzIxOGJiYywgMHgwZWU2MTVmMywKKwkweGM2NTRlZjY3LCAweGJlMjliYjcyLCAweDBmZDEzNDYzLCAweGNlMTk0M2YwLCAweDRlYjUzNDM3LCAweDY2ZGNhMDM1LAorCTB4N2ZhODA5YjYsIDB4YTBlYjEzN2UsIDB4YWUwNTc5N2UsIDB4MzY2ZjQ4ZGQsIDB4NzlmODliOTcsIDB4ZTljNmQ5YmUsCisJMHgwN2QzOTMyNiwgMHgxYzI3M2ZiYywgMHgzZTQzNmQzZiwgMHhhM2U3ZTAxYSwgMHg3MzQ3YTQ3OCwgMHgyNmRlM2QyOCwKKwkweDAxMWJmNGUwLCAweDNkZjFkMGRmLCAweGYxZjhlMTc3LCAweDAyOTczYTFkLCAweDYwM2IwYzgzLCAweDNhZTgzMWY2LAorCTB4NDllODAxNmMsIDB4ZjQwNjUzZTQsIDB4Y2ZiNDBiMGYsIDB4OWYyMjE1YjIsIDB4MTUzOTU2YTUsIDB4YjMwMmViYzQsCisJMHhkN2RjMWVmYiwgMHhmOThkOTQ3MiwgMHg1ZjNhY2Y0OCwgMHg2Yzk3YmMzZCwgMHg3ZWZlMTE3MywgMHg2NzY4OWViNCwKKwkweDkwNjg2YzExLCAweDJjNDBmNTlkLCAweDk1NTdlM2I3LCAweGZhN2ViY2ExLCAweDUzY2EyMzViLCAweGJkYmZlNDg3LAorCTB4MDFlNWQxYjksIDB4NTBjN2YxZjQsIDB4MGUxMjNmN2MsIDB4YTczOTVhZGYsIDB4MmU1ZmI3YzUsIDB4ODAzOWNiMDQsCisJMHgwZjhlNWFkNywgMHg3N2M3ZTc2ZSwgMHg3Y2I5NTAyYywgMHgzZDZiOTYwOCwgMHgzZTQ0MjNlMSwgMHhjMWZjM2MwOCwKKwkweGViODRkYWVjLCAweDQwNDVjNmNjLCAweGZhY2QxZGU5LCAweGZhNGY3YjYxLCAweGYzNThjNWY4LCAweDJmNjdiMzRmLAorCTB4OGM1ZjhmYWMsIDB4YzdkNTA4NGQsIDB4ZDdhZTg4YmEsIDB4NzU0NzgwMTUsIDB4NjE1MGVhOGIsIDB4ZWM4YmY1MGIsCisJMHhmYWZmYzQyZSwgMHg3Njg5YzU2NiwgMHg5NTE2ZWVlMSwgMHhmMmZkNjFlOCwgMHg3MjliZDIyOCwgMHg4ZjZlNWZiZCwKKwkweDg0YWVjNDE5LCAweDZiM2ZmMDUyLCAweDVhN2QyNThmLCAweDVmZTYyYjFiLCAweGZjYzBiZjA2LCAweGJhYmM2ZGE3LAorCTB4M2Q3OWU2ZGQsIDB4NmZhZDBlNTAsIDB4ZTExMjI2ZjksIDB4NzE1OTNmZGMsIDB4NGFiYjQxMWQsIDB4ODU4MThmYWIsCisJMHg4NGRmNzgxNCwgMHhkNzA4MjliZiwgMHgzMjJhMGRjMSwgMHhhZDllZjVkNiwgMHhmNmYwOTUyNiwgMHg4YzM3OGUyZSwKKwkweDBhMzNiZTc1LCAweGE2YTdmNWQ2LCAweDdiNDBiYWQxLCAweGFmOGVlY2ViLCAweGViMDVkZDZmLCAweGZhZTY4ZGFmLAorCTB4ZWI5YTM2YjksIDB4Y2ViYmQzZTcsIDB4YmI3YTQxZjcsIDB4OTI3NGUxNzYsIDB4OWVmNGMzN2IsIDB4ZGNlNTAzOGYsCisJMHg3MzBlZmQxYiwgMHg2ZDRhY2MzOSwgMHhkNGUzZmI0NywgMHg2OGZiZTUyZSwgMHhhMjM1YTEwMCwgMHgwYWVkMWU5ZiwKKwkweDA2YTljYTM1LCAweDFjNDQxNWRiLCAweDFmMDAzOWY1LCAweDE0NWI1Zjg0LCAweDA3M2VhZmMxLCAweGQ2OTMyZWY4LAorCTB4ZDlkNzAyNzksIDB4MTRiMjMxNmUsIDB4ZmMwYjNmNjgsIDB4YmFlNGZkODgsIDB4Y2Y3YWM0N2YsIDB4OWE2ZjVmODQsCisJMHhhMGI0NjhlZCwgMHhiZWJmZDUwYiwgMHgxZTIwYmM2ZSwgMHhhMmQ1N2M2MCwgMHg2NjljN2RhNywgMHg2N2M0NGU1MSwKKwkweDEwYzVkMWIzLCAweGMyODNkZWZmLCAweGFiNzgxMDNlLCAweGJhNzczNDExLCAweDBmMDFjODY1LCAweDgxZmQ2ZmVjLAorCTB4N2ZiZTI3MzQsIDB4NDhkOWM3N2EsIDB4NDdlZDE5OWQsIDB4N2Q4NzZhOGYsIDB4NTY1ZGU5YTksIDB4NWJiYjg3ZDQsCisJMHgzOWRlNWVjZSwgMHhjMTliZTQ4MCwgMHhiYjNiZWIwZSwgMHgzM2RkYjBlZiwgMHhjZmVkNDdlMCwgMHhmZDg4YmY2YSwKKwkweDBkY2RlYWQ1LCAweGFhMjI3NjgxLCAweDFhOTQ1MjU5LCAweGRhNWE1MjNhLCAweDIyMGNhOWZlLCAweDBmMjg2M2ZlLAorCTB4NTdjYzE5YmQsIDB4M2U1ZWZiMGYsIDB4NTRkM2QwNTAsIDB4ZDdiZTQwZTYsIDB4Y2RiYjdiZTIsIDB4ZTAwZjYxOWQsCisJMHhiNzM2Y2RkYiwgMHhmMzg1ZDcwMywgMHgzZWQyZTZhNCwgMHhlODNlYjBiMywgMHgwNjc5ZTljZCwgMHgwYzZmZWUxZCwKKwkweGVkMjliZDQzLCAweGI0NGZiOTNkLCAweGZkNzMyM2M3LCAweDVlZjY5M2ZiLCAweGNlNzNmZWY3LCAweDY4YzdkYTBmLAorCTB4NzRlYzgzZGYsIDB4YzUyYzc0MGUsIDB4MjgyZDVhNzMsIDB4MDMzMjA3ODUsIDB4Nzg0YWRmZjcsIDB4YWNmYjE2YTksCisJMHhhYWI3MzA4ZSwgMHhjZGI2MmZiMCwgMHhjYTUzYjI3MCwgMHg3ZGQwYWM4MywgMHhmMzg2OWUwMCwgMHg3ODBmMzg3ZCwKKwkweDM3N2ZjZjEwLCAweDRlMTFlYjNiLCAweGRhMWIwZWZhLCAweDkxYWZiMGFmLCAweDUwNTYwZmI4LCAweGY4NzA4Yzk2LAorCTB4OGM5YWVjYzAsIDB4MjU5OWZlZjIsIDB4ZjRmYWU4OGMsIDB4MTRmN2NjYjMsIDB4YmI0YjdhNmMsIDB4MDM2NmU4OGUsCisJMHhmZmU4ODJiYiwgMHg1Yjk5ZGQwYSwgMHhlYmUyNjZkZCwgMHg3ZTdlZjhiMSwgMHhlNTBlYTM0NywgMHhhMWNmOGU2ZiwKKwkweDc5N2FiOTQzLCAweDQ3NGViMzQ3LCAweDJmMTllMGY0LCAweDBmNTY3NGUwLCAweDU0ZGZlYmViLCAweGJhNDhmZWE3LAorCTB4MmU5ZTE0OTgsIDB4YWJmNmYwNDIsIDB4Yjg0OWJjNDAsIDB4MzBmNDEyOGQsIDB4MzI4NmUxMGEsIDB4YjI3ZjRiYjksCisJMHgzNzBmYzIzMywgMHhiNTRiMGJjMCwgMHg1OGM3OGU4NywgMHhhOWMyMDY2NywgMHg3ZDYzYzVlZCwgMHg5YWJjNjEzYSwKKwkweDhhZGQ4Zjk3LCAweGFiZjlhOTcwLCAweGNjNjE4ODg5LCAweDQxOGYyZjVmLCAweDMwYjJmZmJhLCAweDcyNzM1ZGJjLAorCTB4MGY1YjlkNzEsIDB4M2RhYjc4YzQsIDB4MTU3YmU0OGIsIDB4YmRhMjMwZWIsIDB4YWRkZDcyMDAsIDB4ZDJlYjkwMGYsCisJMHhlODY3ZGI4ZSwgMHhmN2YxYzYyOCwgMHgxMmQ5NTEwZCwgMHhlNzU5ZjM4MCwgMHg0NjE2MjRiMCwgMHgzZjcyYzg1ZiwKKwkweDAwMzk2ZGRhLCAweGUxNTVmNDdmLCAweGZjYzVlNGY5LCAweGRhNDc2ZTE4LCAweGIyNWFmYzgzLCAweDk2NzhiN2RjLAorCTB4ZTdhMThjN2IsIDB4OGUwZGY2ZjEsIDB4YjE0ZTdmMjQsIDB4Yzg3YTFlYzYsIDB4YTc4ZGVkY2UsIDB4ODFjZjVjZWQsCisJMHgzYWUxNzY2MCwgMHhlMmM1ZmQ0ZiwgMHhhOWQzNDJmMywgMHgwY2FkZjdkYywgMHhkYjZhNzRlMCwgMHhhMDVlNzliYiwKKwkweGUzYWM1M2EzLCAweGRmOTA5N2Y2LCAweGI5ZDMzNmJlLCAweGZiZjA3OGFlLCAweDdlMmM0Yjc5LCAweGZiOGFiY2ZlLAorCTB4MmY1NWQ4NTIsIDB4NDA3NTY5YmMsIDB4YmIyZGUyZmYsIDB4ZjAwMWJkZTMsIDB4YmZlOThhYmIsIDB4NGNlYmE2ZWUsCisJMHg4ZmVmOTc5YywgMHgyMGZiM2JlOSwgMHgyNzRiZDgzZSwgMHgxNjUwMWQxMiwgMHgzYzZhZjhiZiwgMHgzNzM4MDNhNywKKwkweDE0ZmY0NTBkLCAweDYzM2Y4ZmU3LCAweDVkZGQ4MDUzLCAweDNkYzZiMGJjLCAweDFmYzAyZjI2LCAweGY5OTIyZTczLAorCTB4MGVmYWViMDIsIDB4YWI4OTFlMjMsIDB4ZmRhOTk5Y2YsIDB4OWUyNWJiNzYsIDB4ZDYyZjRkZTQsIDB4OGY0ZGU1MGIsCisJMHg3ODQ4YmFmMCwgMHgzYzI1ZGI2YSwgMHg5MTNlMGRmNywgMHg5N2M1ZjY4MSwgMHgwN2M1ZDgzZCwgMHhhZjdlYzFlYywKKwkweGRjN2IxNjM3LCAweGY1ZmM3MjYzLCAweGRlYTc3ZGJmLCAweDVlZjMwZWU2LCAweGFjZmYxODhiLCAweGRhMTI3ODczLAorCTB4ZDZjNmM1N2QsIDB4ZTFmOWMyY2IsIDB4MGI1MzM5ZTQsIDB4NTdjZTM3YTcsIDB4N2ZiOGUzNDYsIDB4MWYxYTY3MzksCisJMHhlZGRiNWQ2ZSwgMHgzZmU2OWZiYSwgMHgwYWFiMDdkOCwgMHhmNDRiMGJiMCwgMHhkY2VkMzc5ZSwgMHgzMjZhYjA1ZiwKKwkweDNmMmU2YmQ0LCAweGQ5Y2U4ZTNiLCAweGRjODQ1ZTkyLCAweGRiNzk4YWJiLCAweGY0YjU3ZjkwLCAweGJlZmRmMTIxLAorCTB4NGIyYTViYzQsIDB4NjkzZGJjNDUsIDB4MTFiYTcwNzcsIDB4NDNmOTIwZmMsIDB4Mzk2ZDQ3MGIsIDB4ZTEzY2M4YzEsCisJMHg3NWNmMDNjZSwgMHg3OTkyMzVjMywgMHhiZWRlMWU0MSwgMHhmZTdhNDBjMSwgMHg0ZTFmZjNjZCwgMHgzZjdhMDNjZCwKKwkweDViNjBkNmI2LCAweDVhY2U1MzBhLCAweDUxZWQzYmI3LCAweDM2MGRhN2Y0LCAweDFmYTgxNGQ5LCAweDg2NWViNDczLAorCTB4NGViOTVmN2MsIDB4MWMzZDIzNzUsIDB4ZTI3YjdiNWIsIDB4MDBiZjI4NzQsIDB4NzU4MmFkZmUsIDB4NTAzMDZlNTQsCisJMHg3NzBkYWNmYiwgMHhjMTA5ZmI1MCwgMHgxMmViOTVkNywgMHg3Y2JjYTNmYSwgMHg0NDgxZmRiMywgMHhlZmFjZTNjNCwKKwkweGYxMWViZmVlLCAweGViNjhjNWIyLCAweGFhY2ExODNmLCAweDI2M2RjNTI2LCAweDM2NzNkZTAwLCAweGI3ZDUwNjQ2LAorCTB4ZGMyY2Q4ZTgsIDB4NTMyYmM0ODcsIDB4MWRjZmRkM2MsIDB4ZGM2MzFlYjAsIDB4NmI2M2M0NGYsIDB4MThkNTFmODgsCisJMHg5MmNjZWRjNywgMHg5YWVmYjAyOSwgMHhiZWM5NjcyMSwgMHg4YTI3YmRkZiwgMHg2NjJiYzlmNCwgMHhkNmM4ZWM5NSwKKwkweGI3ZjNmZmMxLCAweGY0NWVhMTJiLCAweDM2NDlkZTlkLCAweDU4ZjNjMDllLCAweGNlODY2NzgxLCAweDhhOGZhMDQwLAorCTB4N2EyZjVlMDgsIDB4Njg3NjRmNTEsIDB4NzgyNTQ1OTEsIDB4MWQ1YzgyYjcsIDB4NjVkZTRhNDMsIDB4N2VmZDBiMWUsCisJMHg0NzUzZGYyMSwgMHhmZDBlMWVhZCwgMHgxODE4YzZjNiwgMHhiNDVmYTFlYSwgMHhhMDY2MjljZSwgMHg0ZTc5N2YyNywKKwkweGMwNjc2OWZmLCAweDk3MzM0NjdlLCAweDQyZTJlZDFlLCAweDVmNmEwODY2LCAweDBhN2Q2NTExLCAweDRjMTg1YWVkLAorCTB4MjhiMGZhOGYsIDB4ZDhmOWY4MjIsIDB4ODEzZGFlY2IsIDB4NWI1OGM0ZjYsIDB4YmZhNGJiNzAsIDB4YmZhMDM4OWMsCisJMHhiMWI5N2VmZSwgMHg4ZmU3Y2Y3YiwgMHg1NjdkODA0YywgMHg5ZWM5NTNlYywgMHhkZTVjOTBiZSwgMHg0MWNhZmI4ZiwKKwkweGRhNTFiZjdjLCAweDI5YmRlZjA0LCAweGY5ZTZmM2EwLCAweDkwNTJjYjYzLCAweDg2MTQwYWJlLCAweGU3NjNhZTdlLAorCTB4NWNlNWYzYzMsIDB4MDE4YzlmNDEsIDB4ZjFmOWZiOWUsIDB4YmIzOWQxM2MsIDB4N2Y2YzhlYmIsIDB4ZWViY2MxNWQsCisJMHhlMmZmYWUzYSwgMHhjYjBmZDllNSwgMHhmNzNiNGVhYiwgMHg4N2Y1Njg2ZiwgMHg1M2ZlN2Y5NiwgMHhmMDc4YTNmYSwKKwkweDBiNWUxOWFiLCAweGU1ODVmZjk1LCAweGZlNWMyZGM5LCAweDU2ODVlNTZhLCAweDY5NzVjODVmLCAweDRlN2Q1YmQ3LAorCTB4Y2YxM2QyMGQsIDB4ZDdlMjc5MDksIDB4ZmU3YTQ2MTcsIDB4NmI4ZjllMzMsIDB4OWU4NDg2ZTIsIDB4MjE5ZWMxOGYsCisJMHhlYTg3Nzk3OCwgMHg3NjBlNWNlOSwgMHg2ZmQ4ZWRkNywgMHg1NzExZDk4MCwgMHg2NjVhNGIwOCwgMHhiOTQ2OGFjYiwKKwkweGRjZjE2NGQ2LCAweDk3ZTAxNzE5LCAweGE4ZDRkZmVhLCAweGVkZDFmOTQzLCAweGZiMDQzMWFmLCAweGY1ZjllNDZkLAorCTB4ZmZiZTM4OWUsIDB4ODc1ZTM4ZjIsIDB4ZmI5ZDJiZjMsIDB4OTI3OTQ0MzcsIDB4MmY2ZjM4ZjUsIDB4N2UzMDMzYTMsCisJMHg4NWZiY2IyNSwgMHhhZjc2OTBmYywgMHg5ZGE1NzdiNCwgMHg3ZDU5ZWQyYiwgMHhiMzY3YjcwMywgMHg3ZTQxZGQ2MywKKwkweDVmYWZkNjMzLCAweGVkMTgzZjkwLCAweGVmNzNlNDc0LCAweGU3ZGEyOGFlLCAweDEwN2I4YTY3LCAweDczMTU2OWYyLAorCTB4YTAxNzE0M2QsIDB4N2MwZGViMDcsIDB4YmNmNWRhZmQsIDB4MTNlYzI3MTYsIDB4NDEzYjI2ZTYsIDB4MWQxY2NmYjYsCisJMHg4ZDZmOWU1ZSwgMHhjMmZmNTNkMywgMHg0MGNhNmZjNywgMHhiNmIzZWUzYiwgMHhjZTUwMzM5YiwgMHhmZmYxYTY3ZSwKKwkweDBmMGZjNGY2LCAweDUwN2Q3ZTBiLCAweGUxNTg5M2U4LCAweGY5MDg3ODI3LCAweGVkYzBlYTA4LCAweGZlZjAyZGFlLAorCTB4ZTI2ZWM1OGEsIDB4YmUyZWRmYWIsIDB4MTc0N2NhOTEsIDB4OGZlN2E0MmYsIDB4ZmNkMjY1YzUsIDB4ZGM3N2MyYjYsCisJMHgyM2E3MDBkOSwgMHgxN2QyNTUyYiwgMHgzZWVlOGQzMywgMHg5MWRlZjBiMSwgMHgxYmY5MWQwOCwgMHhjNzk5ZDcwZSwKKwkweDNiNjMzMzZmLCAweGNjZTVmM2EzLCAweGYyNmMyN2M3LCAweDFmMDFmODA2LCAweGU5MGM3ZGMzLCAweDA5YWY5Zjc5LAorCTB4OWQyYTVlYmMsIDB4MmI0ZWIzNTYsIDB4N2E2ZWFkZWEsIDB4YjdhMjEwM2QsIDB4YTcyZjExZGIsIDB4ZjYyMjY3NTksCisJMHhmYTNhNTVhYiwgMHhmM2ExMjkzNCwgMHhhZjVjYzgzZiwgMHgyMzY2YmY2MSwgMHhkMzdjOGZlYiwgMHg5MmY1YzUxYywKKwkweDAyOWJkZmI2LCAweDllZDBhYjdmLCAweGQ0MzNmMjg1LCAweGNjZTQ2MTVmLCAweDdiNWU4MjNiLCAweGM0ZWY1ZDViLAorCTB4OTMzM2JjOTEsIDB4NTZlYjRlZGQsIDB4M2VmNDRlMjksIDB4YjRlNzA3Y2UsIDB4YzYzOWYxMGYsIDB4OTc1ZmQwODksCisJMHhjNzc1YjU2ZCwgMHhjNzc5Zjg1NSwgMHgxODVjNzFmZCwgMHhmZTRmNWM3ZiwgMHhlZTNhZWQxZiwgMHhkNTcwZTc4OSwKKwkweDI5NjQ4NWZhLCAweGM0Yzc0MmZkLCAweGQ5YzUxNjdlLCAweGU4NDRmYzgyLCAweDBmZTcwZjBmLCAweDQ4ZGUzYWJhLAorCTB4ZDUxMGRiZmIsIDB4YThiOGM1ZTksIDB4M2U3ZTY2ZjcsIDB4NTVlNTFhNGYsIDB4NWE5NWRmZDAsIDB4ZmU4ODU4ZGMsCisJMHg3MWM2N2ZiMCwgMHhiYzdkYTYzZiwgMHhmMWNmMTkyNywgMHg0ZThkOTJiZCwgMHgyYzVjZTNmNCwgMHg3NjY4MGUzZiwKKwkweDQ3ODEzOGYxLCAweGQzNThlYjQ3LCAweDAzZWM4ZGUxLCAweGYwZWM0YWViLCAweDM0YTExYTE0LCAweGY4ZDIyNmM0LAorCTB4MDk2ZWFjNDksIDB4MTFmYTBkZTIsIDB4YTNkYmYyMzAsIDB4NzQzYzhhN2MsIDB4MjEzYzk3NDMsIDB4OTFhNTYxNDcsCisJMHhhZGRiNzdjOCwgMHhiYzNjNTMxZSwgMHg1ZDQ2NzQzNywgMHg1M2VkZmEzZCwgMHhlMjNjNzhhYiwgMHg2ZGU5ZTI4NCwKKwkweDFiOGQwZWNmLCAweDVlMzkzMmNiLCAweGJiODhhZmYwLCAweGQwMzQ2ZmU2LCAweDNlMzdmMmJhLCAweGZjZDFmMTQ2LAorCTB4OTVlYjU3OGQsIDB4MWY5NDM5MDAsIDB4MjdmZWEwNmYsIDB4OWJkMzlkNWUsIDB4ODUxZjE4ZmMsIDB4ODgwZWJmOGYsCisJMHg0NjYyZjRlNywgMHg4YTEwZTExZiwgMHhiZmE1ODY4NywgMHgzMTNmZjE3ZSwgMHhmNjA5ZGNhZSwgMHhlZjNjYjA1MCwKKwkweDIwMjQzZjE3LCAweDBjZmFhMTZmLCAweDNjN2Q3M2M5LCAweGMwN2YyM2Q3LCAweGQzNTgwNTdjLCAweDdjYzg2NjFmLAorCTB4OGZlNDBkODUsIDB4YmU2YzZhZGQsIDB4ZGU1MWUzMDYsIDB4YmM0MzFkMWEsIDB4MmJmOWVmYjcsIDB4Y2Q2NzZiYzUsCisJMHhiNmJjNTA3MCwgMHhjZjdkZmRmYiwgMHgzZmY2YzcyYywgMHgxMTgzNjJjYywgMHg4N2JlMjlmZSwgMHg3Y2NmZjQxNSwKKwkweGM5ZTNjOTFiLCAweGIxMzI2ZWRmLCAweGQ5YTViMDI1LCAweDNjNTMzNzZmLCAweDhlOTU0ZDc4LCAweGVlZDE3Y2ExLAorCTB4ZTgzMjY2MWIsIDB4YTBkYjVjNzgsIDB4NDdmOGUwMmIsIDB4MGVmMTI4MzksIDB4N2M0NDY0MDQsIDB4ZmMyMWJjNDgsCisJMHg2ZTMxOThiNiwgMHg1ZmFkMDJmYywgMHg3ZTgwY2JhZSwgMHhjN2RjMDRmMCwgMHg0ZTkwNmI5NiwgMHgxNWQ5NTU3YSwKKwkweDc1YzgxN2Y0LCAweDRjOWY0ODVkLCAweGZhNjlmZjhhLCAweGMzZDQ2N2U0LCAweDljNWZjNWI3LCAweDc0ODE5ZTFlLAorCTB4NWFjM2Q1YWUsIDB4NzE2NGRiZmQsIDB4MGJiZjYyNTUsIDB4NDIxM2UxZTksIDB4ZDc4OTRkZmUsIDB4N2UzMDQzYzQsCisJMHhjNzZmMDYxNiwgMHhmMDBjMWM4NCwgMHhmZjE5ZGY4ZiwgMHgxZmUzZmMyMywgMHhlMzA5MWNhMSwgMHhjOGM2N2YxZiwKKwkweDlkYTM2ZmU1LCAweDBjMjkzNmRkLCAweGU2MjdiY2JmLCAweDMyZWVhZGQ3LCAweDZmOGNmZWEyLCAweGIzY2FjMjUxLAorCTB4YzY1MWFiNmMsIDB4ZmFlMDU3MTMsIDB4MmI0NGZjNjQsIDB4YjdjMGMzOGYsIDB4ZGU1ZmZiMTEsIDB4N2IwYmJhZDQsCisJMHgxNjVlYzZlNSwgMHgxNWRiZTY4ZCwgMHgzN2I5YzNkZiwgMHgwNDZiM2NjYywgMHgzMDE2M2I5ZiwgMHhlYTNhYTM4YSwKKwkweGE4MmJjOTE4LCAweGIwOTNiOGZiLCAweDAwMjNmMjk1LCAweGI4ZTA0ZjFmLCAweDlkNjM4YTE3LCAweDFkOTIxNWI2LAorCTB4ODY1NmUzMjQsIDB4ZjhmM2UwZDgsIDB4Y2ZkOTc4OWUsIDB4NmZjNDQ3ZjUsIDB4ZTI3YTBmN2EsIDB4YjA1ZDYyNGYsCisJMHg1ZmIwNjdmZiwgMHgxNDE2MDJmYywgMHg5OTcxOTE5ZiwgMHg2MmFmM2FmOCwgMHhjNDc1NDdjYywgMHgzYmRhZGZjOCwKKwkweGYzMDRiM2NlLCAweDMzODZiYTNmLCAweDhmNTA1M2U3LCAweGEyMTViNTI5LCAweDcyY2ZiNTNjLCAweDY2ZmM2MWI2LAorCTB4OWZlZTI5ZjksIDB4Zjk4ZjNlNWYsIDB4NzkwMTJhOTYsIDB4Y2EyYzllMDUsIDB4MDViYzQyMDMsIDB4MGE3NjA3ZmEsCisJMHhhYzUzYjZmOSwgMHg1ZmU0ZjQxYiwgMHg1YWJhZjllMywgMHhhNGY0MDNlMiwgMHg3NTZlODdjNCwgMHhlZDc4NGFhYiwKKwkweDAyYTdhZjBhLCAweDQzZmVkYWYwLCAweGY5MTlmZDc4LCAweGU0OGI5ZGYyLCAweDg1MmYwZmNiLCAweDkxNzFmZTZlLAorCTB4OGM0YmYzNzQsIDB4M2IwOTBjNmYsIDB4NTc4ODY3ZGYsIDB4Njc0MDdjZWQsIDB4YmVmODgzNDcsIDB4NzhkYjNhMDcsCisJMHhmOWQyZjE4OSwgMHhhN2E4OWZlNiwgMHg1ZGZhZTE0MiwgMHg1YzI4NDI3YywgMHhmYWViMTY1NywgMHg1MTY2YmM5MSwKKwkweGQ1N2E3MGNlLCAweDRmZmU2MDk2LCAweDEyZDg5MWU3LCAweDFlN2E1Yzg2LCAweDNiN2JmYWM5LCAweDE5Njc4ODhkLAorCTB4ZDVlYjkxMDcsIDB4ZjZjODhmZTYsIDB4MGYyNTE2OWEsIDB4YmI4NTlmY2YsIDB4ZTAzOWQzY2YsIDB4ZThiZmRiNzQsCisJMHgwNzlhMTAxYywgMHgwZjlkZTdjMiwgMHgzOWZjOGRlNCwgMHhkY2QwMWQ1NiwgMHhhNjc3ZmMwYSwgMHg3NTI3NDhjOSwKKwkweDM3N2UzOTk1LCAweDdiZjdmZDBhLCAweGEwZTdjYzBkLCAweGZmZDgxMWZlLCAweDVmZmJjNjBhLCAweDAzYmNiNGQxLAorCTB4MzA1NzU3ZmQsIDB4NDc5YzU3YmQsIDB4MWRiOWVmOTUsIDB4N2M3YzgzMTUsIDB4ZjI5NTVlYzUsIDB4ZmU2NmQ4YmYsCisJMHgyYzQ1OGViYywgMHg0Yzc0ZmY0MSwgMHgwMjM5OGU4MSwgMHg4YWViMTllMCwgMHg3ODAwOGU2MiwgMHgwN2I3OGRjNiwKKwkweDc5MzllNWQ1LCAweGMxMzc5OGFlLCAweGZkZTgyYmRkLCAweDgyYjMxYmE0LCAweGFlNzhhN2ZhLCAweDNhOWU3YTA4LAorCTB4OWVhODM3MmIsIDB4YTgyMjM3NWUsIDB4YTM4NWVmN2YsIDB4ZGU5OWVhODMsIDB4NjdmYTgzNmIsIDB4YWEwZTRjMzcsCisJMHgxY2RlMzRlNywgMHhhYjE4ZmZkNCwgMHhlYzE0N2M3YiwgMHg1YmZhM2ZiMywgMHhlYmNjM2YwMCwgMHhkNjBjYjhlYSwKKwkweGI3YWM0MzNiLCAweGEwZjI5YWVmLCAweDVhZmQ4MWY3LCAweDUzMzgxZTMxLCAweGNmMTdjOTkwLCAweDAwYWJkZjhkLAorCTB4ZmYwODY3MWMsIDB4MzliZWU1Y2UsIDB4NTVjZmUzNDEsIDB4Njc3ZTg4YWIsIDB4MDQ4ZTFhMzYsIDB4YWNmNDY5ZmEsCisJMHhjMDJhNGY2YiwgMHgzOGE3YzZiOSwgMHhiOTVlYTE1YiwgMHhlY2Y5ZjgyNiwgMHhiZGU4MWIxZCwgMHhmNmUwYmVkOSwKKwkweGViODM5YmI5LCAweGQyOWNkZTgzLCAweGI5MDFlNzlmLCAweDQ2NzJiZjI5LCAweDg3ZGZiMDQyLCAweDk5ODlkMDg1LAorCTB4YjU5OWY0ZTQsIDB4N2FhNWZmZGMsIDB4MjRlODZhZmIsIDB4MjdlYzVmMTgsIDB4ZDA0MzhkZDIsIDB4OTgzOTI5OGQsCisJMHhjMTFkMjI2ZSwgMHhmYWY5NTM3NCwgMHgwNzA4YTFkNiwgMHhmYmEzZmMyZCwgMHgwYmM5ZTg2OSwgMHhmZTAwN2VmZiwKKwkweDdkMzA2NzE2LCAweGZiNGVlMTY5LCAweGVjNTY3NTgzLCAweDk1ZWZkODUwLCAweDZhY2ZiODUwLCAweDJhNzk3ODc5LAorCTB4NjMzYjg1MGIsIDB4MWZkNzIzM2UsIDB4Njg4ZmVkYzEsIDB4ZDk4MWZkZTAsIDB4ODljYTE4ZjMsIDB4YTgxNjNiYjMsCisJMHhlMzYzODcxOCwgMHhlY2ZmM2M3OSwgMHhlZDA3YWY4ZSwgMHgyZjg5ODQ3MywgMHg5N2M0ODRlNSwgMHhmODA0MjVkNiwKKwkweGU5N2M2NDdmLCAweGFmMTljNjM0LCAweDY3MTExNzY0LCAweDg0NGZmZGRjLCAweDhmMDBjODA3LCAweDBiMTFmMzAxLAorCTB4NzFkZDExOWMsIDB4M2M3ZjQ4YzUsIDB4NjUzZjJiNDksIDB4YjllM2ZhMDksIDB4ZmUyYmQyMDQsIDB4YmMzZDZjNzgsCisJMHgwM2U2MzQzZCwgMHhjNjUzYWUzNywgMHg4ZWJlNjRlNSwgMHg5MzBhMmJjYywgMHg4NDk3ZmM5ZiwgMHhiNDBmY2MwNCwKKwkweDc1ZjllMzQ3LCAweDNhN2NmYjRiLCAweDIyYmNjOTc3LCAweGMzMDJmMjI2LCAweDRmYTRmZmQ4LCAweDE0ZDdmMTlhLAorCTB4MjY3NjBiYjIsIDB4MGFmZWJkNzAsIDB4MTc2ZGQ3OGUsIDB4YTkyZmJjODgsIDB4NDcxYTdiZDcsIDB4MmE3YWRmYzYsCisJMHhjNTJhNWQ5NSwgMHgyODk0YmIxMywgMHhmNDYxNTNlNywgMHgzZjA5NDdjYSwgMHhlNjg1YmY1MSwgMHhhODE0N2Y4ZiwKKwkweDM4ZWU2YTQ3LCAweDBiZjUwN2JiLCAweDZjNjNmZGMwLCAweDZmNDA1OGI3LCAweGZkYmQ3ZTJiLCAweGQxMmI2OGJiLAorCTB4YWFlYmQ3NmIsIDB4OWMzNDJmYWYsIDB4ZDhjNDcwODksIDB4MjIyZDhlMDEsIDB4ZTQ0NWFmZGYsIDB4ZDZmNWM5ZmIsCisJMHhmNGJhYTQ0NSwgMHg5YzFlZDg3OSwgMHg4YWUzMjdmZiwgMHhjMjhkZmRkYSwgMHgzYWZlNzFmZSwgMHg5NzY0MTdiYywKKwkweDc2ZTVjZjJjLCAweDg3MDE2OWRiLCAweDI3NmUxNjBkLCAweDlkYjkxMzE4LCAweDFmMzlhYjUwLCAweGZiNzAzNmQ1LAorCTB4YWNkN2E0MGMsIDB4OGM3MTgwOTYsIDB4ZGZlYTE2ODksIDB4NGM2ODVjZGYsIDB4ZGY4NDcxYzQsIDB4NDJhNjc5NjUsCisJMHg0NTcyYzU3NiwgMHg3N2U0N2IyMSwgMHhmY2Y0ZDFiNiwgMHg4Njg1MDljZiwgMHg2ZmZmZTg0NCwgMHg2MDExYWYzMSwKKwkweDE2NjM2NTg4LCAweDkzNDM4ZjVmLCAweGU4OTJmZTE3LCAweDY4YzI1MmZmLCAweDM2ODk4ZDJhLCAweDVkYjY3ZmUxLAorCTB4NmE5MWY0ODEsIDB4NWRhOTE5NzYsIDB4OGFhNzFmMGQsIDB4MWFmYmU0NGUsIDB4YjQ2NGYyMjksIDB4NDI3MTgwNzEsCisJMHhkZmRmYTI2ZSwgMHhlMmQyZWRjNCwgMHhmZTQxODliMSwgMHhmMThjZjdmZSwgMHhkMGFmZGZjMiwgMHg1Mzk0MmVlYiwKKwkweGVmNzgxNGJmLCAweGVhZWZmZmM5LCAweGYxNDc2YjY3LCAweGFmZmZmNWFkLCAweDdmZmVlNDhjLCAweGYxMDgxZjE5LAorCTB4ODVjNzNiZmYsIDB4MWUyM2ZmZjUsIDB4ZmU3ZWVkYTIsIDB4MmRkODkzZTksIDB4M2U1MGQyOWYsIDB4ZWE3YTMwZWQsCisJMHhiNWQ1ZmNmMSwgMHg2ODc4ZWMxZCwgMHhhNGViZTdlZSwgMHg3ZGMwYzBiOCwgMHg2NzNjNGVkOSwgMHhiYjY0Y2YyZCwKKwkweDRiNmY0ODJjLCAweDdmM2I0MzE4LCAweDY5NmVhNzQ3LCAweGU5NWYzYzI0LCAweDNlN2MzNjY1LCAweGJmM2YyZDdjLAorCTB4Mzg3MWFlNTUsIDB4MGU1MjliNzEsIDB4ZmRjODlkNWMsIDB4MWYzODA2ODcsIDB4YmRmMTcyNWIsIDB4MjcxODZkYzksCisJMHhkOTk1Mzk1OCwgMHhiMjM1MGQ1MSwgMHhkYTJiMjJjNiwgMHhkODU5NmI0NSwgMHg0MTY4ZTNmMywgMHg3NzBhMTM0ZiwKKwkweDQyNzZmZTUxLCAweDBmYjdjZjE3LCAweDc2OTNhN2VkLCAweDczZTIyMTdlLCAweDJjZTc5NzU4LCAweDc5NzFjZjhmLAorCTB4Y2YxMTIyNDIsIDB4NWYzYWVkYTksIDB4YjI3ZDczYjgsIDB4YTQ2YWU4YWQsIDB4ZjBiZTgxYWYsIDB4YzI5MTg4ZTcsCisJMHhiYjMyZTY0ZiwgMHgwM2Y4ZTIyNywgMHhkODdjZjFiNywgMHg2NzdmMjk0YSwgMHhmMDFlOThlOCwgMHg3NWUwNDUzZSwKKwkweGQ3OWU1YWNhLCAweGZmN2ZjZWMxLCAweDQ1ZWQyYWJkLCAweDk0MzNlMzQ2LCAweDJkNTM5NTJiLCAweDU1MTNmNDNlLAorCTB4Njk3YTY0YjYsIDB4OTljNTZlNWQsIDB4ZTVhMmYyODMsIDB4MmJkNjM3NmQsIDB4ZTg2ZGYzZjMsIDB4OWRmZDcwOTcsCisJMHg5MWZiNDcyOSwgMHhmY2I4YzlhOSwgMHg1MmEzYjNkMiwgMHg4ZjFlOTA5ZSwgMHg2NGQ0MzhhNywgMHhmMTIzNmY0MSwKKwkweDcyNDA5Y2IwLCAweGMwMzQ2NTdlLCAweDkyZWQ3MmJiLCAweGYzZDc5ODVkLCAweGM1MTkxZmZlLCAweDVkYTgwZTliLAorCTB4NWZiMDcxNDMsIDB4ZTYxNjcwMDEsIDB4YTU2N2E5NjIsIDB4YTY0OGI3ZTQsIDB4NzE4YWE2NzEsIDB4Nzk4MmZmYmMsCisJMHhmZWYzZmMyMywgMHhkYTc1ZTVhYSwgMHhmMzAzMDFjZiwgMHg5ZDFkMDA0NiwgMHgwMzgzNzlkZSwgMHgwOWU1ZWVlZCwKKwkweDkzY2ZlNDExLCAweGFhODNkYTcxLCAweDQyNTIzZWU3LCAweDVjMWFhZWZhLCAweGQxMmQ0ZGRhLCAweDljODNmNDM2LAorCTB4M2E2MWY5ZGUsIDB4YjkzZTRkYzYsIDB4ZWQwNWFjZTcsIDB4YmJlODdmZDgsIDB4N2MyZjk4MmMsIDB4MTZiYmQxN2MsCisJMHg5M2YxYzAxNywgMHg5ZGU1MmE0NSwgMHg4NmY0MmFkZCwgMHg4OTdkZmI4NCwgMHgyNzFmZWUxYywgMHhkYzIxMTdiYSwKKwkweGRkZmM1YjZmLCAweDJhM2NjMGQwLCAweGU4ODEzMGI2LCAweGE1NGZiNjc5LCAweDljYjc1YzkwLCAweDE2OGQxY2RkLAorCTB4YmFiZDc3NGEsIDB4MmVhODJlMzksIDB4ODliNTQwZjUsIDB4YmYzYjg1ZDUsIDB4NjllODI0YmMsIDB4NjMwNmQzNzYsCisJMHhmN2U3MDNhYSwgMHgzOGZhNDJhYywgMHg3NDc0ZTdhZSwgMHhlN2M1OWI3YywgMHhhN2FmZjRjZCwgMHgxMWIwNjliYywKKwkweGI0N2Y4M2VkLCAweGVhMmI1ODk4LCAweDgxODc3ZDMzLCAweDhhYmI0OWU3LCAweDhmMGJhMDE1LCAweDlkNzZiZmMwLAorCTB4YTY4ZTVlN2IsIDB4YzYzZTY2ZjEsIDB4Y2MxOTQ3ZTUsIDB4ZWJlMDEwYjUsIDB4NzI0ZDk5NjksIDB4OTk4ZmJiNDEsCisJMHgyNWM2Mzg5ZiwgMHhhZTY3NWMwMSwgMHhlM2ZhMTg1MCwgMHhjMDIyZmZiMCwgMHhmZGUxNjc5ZiwgMHhhNWZkYTE1ZiwKKwkweDM3OTk2N2RkLCAweGY5NDgwZTU4LCAweDNjZjAyOTU1LCAweDc5ZjgyMWJkLCAweDY5NmZjYjY1LCAweDQzY2MxOTljLAorCTB4Mjc2MDIwNzksIDB4NzM1ZjllNjksIDB4ZDgwYWY1MGMsIDB4NjdlZDQxNDcsIDB4NTE5YjY2ZjYsIDB4MTQ0OTZmOGYsCisJMHg2Y2ExZWRmMSwgMHhmZWYwZjdkOCwgMHgxOGVjODhhZSwgMHg5MjdlMTg0ZiwgMHgzNmM1YzllNSwgMHgxN2NmZDYyMiwKKwkweDdjNzk1MDQ3LCAweDUxNzJhMzMxLCAweGFhZTNhNzIyLCAweDQ0ZWZiNzk2LCAweGM3NjZhOTdiLCAweDczOGUyMzE2LAorCTB4OTY4MWYxYzksIDB4OTk5YmQ2MTMsIDB4ZTg5NmVmNWYsIDB4MWUyMWFmM2QsIDB4MjgyNTJjZDksIDB4ZTFiMzUwNGUsCisJMHgzMmVjOTFhYywgMHhkMTUyOWYwMSwgMHgwMGYwOGE1ZSwgMHgxY2MyZGMzYywgMHg1MDNjZjFhYiwgMHhjN2YwNjU1YSwKKwkweDViZmZlMGU5LCAweDYwYzNiZjcyLCAweGQxZGE4MGJmLCAweGI1MTczOTkxLCAweGI5NGZiOTVmLCAweDVhYmNmOTZmLAorCTB4ZjMwYzdhMDUsIDB4NDU4M2U0YmUsIDB4ZDhjZDFmNDIsIDB4MmY3OTY5MzgsIDB4Y2VmZDUxMDAsIDB4ZmM5ZDE5NjMsCisJMHg3OGY2NDliYywgMHg1MTZiYzA5MSwgMHg4ZjY0ZmRjNCwgMHhlM2Q4ODUxNywgMHhiN2RjM2RlYywgMHhlNjRhYzdhNCwKKwkweGE1YTIzZDI0LCAweGNjMDc0OTNiLCAweDIzZjdhMDZjLCAweDRkZGViZDg0LCAweDEyMGYyZDZmLCAweGNjM2QyNDVjLAorCTB4ZTQ2ODVkNWMsIDB4YzhjNzliZTYsIDB4YjI2ZjRhZWQsIDB4YTMyNmQ3ZjAsIDB4MzBlODE2YmYsIDB4YmEwNjNlYzgsCisJMHhlZDZiYWEwYiwgMHg5ZDBkMmZmMSwgMHhiNDFmMjgxOSwgMHhlN2NjYjg3NiwgMHg2MGU3YzJkNCwgMHg5YTVmY2YyMiwKKwkweGIzOGQ3MGUxLCAweDgwNzNjMDBkLCAweDg1ZjkzOTdiLCAweDEwY2E0NmYxLCAweDNkYzZkYmU0LCAweDZlZGYyMzc3LAorCTB4MGZmMzdjZTQsIDB4OTJiMzBmNDEsIDB4ZjA0OTExM2MsIDB4OWFmNGIzZGMsIDB4ZTc3ZmM0MWEsIDB4ZjIwNjUzMTIsCisJMHg4YTY5NjdiMywgMHgzZGZkMGYxYSwgMHhjMzkyMTRhYiwgMHgxOGE2OTdhMywgMHg5N2QzY2UxMSwgMHg3Yzg3MWUwZCwKKwkweDM0NWNjYjlkLCAweDE2MzhiNGZlLCAweDljMTg2ZWQ2LCAweDc5NDdlNWM0LCAweDYzMTk4MTlkLCAweGY0NDYyOTA4LAorCTB4NTA2YTlmMGIsIDB4OWE4YzJmYzgsIDB4NmJlMDIyNjQsIDB4ZjU1N2MwOTYsIDB4YTRhZGI3OGEsIDB4NmZmMDFjYWYsCisJMHhlMDFmNWUyOCwgMHgyYWVhYjMzZiwgMHhlZTcwMWYwOSwgMHg1MmM3Y2IwOCwgMHg2NmIxNTRhZiwgMHgzYjhjMGE2MywKKwkweGQxMWI2NTY3LCAweDgyNDc5YzMxLCAweDk1YjJkN2ZhLCAweDY2ZWFhZjg0LCAweGQ1ZGQ3YjRkLCAweGI5ZDgzZjg0LAorCTB4YjU4OWNmMTEsIDB4Zjc5ZjgyM2IsIDB4ODI3NjEyNGYsIDB4YmU5MTM5OTMsIDB4MjI1YTc3M2QsIDB4YjQ3MWFmMzAsCisJMHg0YWQ5NGY4MCwgMHg2YjcyODZjNSwgMHg4NGI2YjJmYSwgMHg3ZDNlYTAxYiwgMHhlZDg0ZWFhZiwgMHg4NTg3YzM3NCwKKwkweDFmMjgyM2ZhLCAweDFjZGVjY2VkLCAweDcxOWM1N2YyLCAweDlmYjA5MjM4LCAweDUyZWRjYWM3LCAweDg2MTllZjQ1LAorCTB4M2NlMmQzZWQsIDB4ZDhjZmQwYzMsIDB4NjE4NTkxZjUsIDB4NzNhMWRmN2UsIDB4MTFlNDczMmEsIDB4ZmNhMjBmOTUsCisJMHgzNDFiMWIyYSwgMHgyZmJlYzAyOSwgMHgzMTEyZDgzMywgMHhmMzY1ZTkxZSwgMHhiODNkYzU5MywgMHhkNGY4NDA4OCwKKwkweDdlMjRhYzQ2LCAweDg4N2U0NWE4LCAweDM0YzNmM2YwLCAweGRkYTE3YjhjLCAweDc5NDJhMmYzLCAweDMwNDc2Yzg0LAorCTB4MzQ3MDlmYmQsIDB4OTA5MWMyMjYsIDB4OTAzM2VmYjksIDB4OGE2ZjJlOWMsIDB4Zjk3MWYzYTUsIDB4ZWEyMzIyYjIsCisJMHhiMTZkZjJkNSwgMHhmOWMxMWY2NCwgMHg4NmNiYmRmNCwgMHg2ODc5ZjFmYSwgMHg2NDllZGU1OSwgMHgzOWJjYjcxOCwKKwkweGUzMDZhOWQzLCAweDE5ZGNmNDMxLCAweDBkMzljZWIwLCAweDhlZmUyNDg3LCAweDIzYmY4MGY0LCAweDc4MDdmMGUxLAorCTB4NGYyZjZhMGIsIDB4ZTA0OTcyMTIsIDB4MjM4YTJkOGQsIDB4ZWYzYTVhYmQsIDB4NTgwODljZDUsIDB4NDhiYTk5ZDcsCisJMHhlOWVjOTNjYSwgMHg4YzY2YzQ3YywgMHhlOTAzZmNhMCwgMHhhYmRmMWFiZiwgMHg3OTQ0Y2ZkYiwgMHgwZTU3NjczZSwKKwkweGYxNjlmYzIxLCAweGQzZGZmZTM2LCAweGNiYmRhMTg3LCAweDY4NjE2ZWZlLCAweDY2Y2I0ZDY3LCAweGY2ODY0ZGI3LAorCTB4NmZjZTE0ZGIsIDB4MTlhZmVhZDMsIDB4ZGRjNDc2OGYsIDB4YmQ5ZTVjNDksIDB4ZDVkMDcyMDUsIDB4NDFiN2IxOTcsCisJMHgwZTQwYmEwZSwgMHgxMWYyMGJiZSwgMHg0ZTJmZWZlYiwgMHg4Yjg3ZmFhNiwgMHhiNDdlNTQxZCwgMHg0Nzk1MWZiOCwKKwkweGYyNWZiZjg0LCAweGQxMDIxMDFkLCAweDJlMjQ5MmVkLCAweGM5MjQ5NzE3LCAweDY0ODJmYWY4LCAweGZmYzY2OTM0LAorCTB4M2EyMWRkZmIsIDB4NmM2N2RlMWIsIDB4OWQzNjMwOWIsIDB4YzE1Y2ViYjEsIDB4YTljNmY3ZmEsIDB4ZDNiNWZhYzEsCisJMHg4Yzk3MWI2MCwgMHgwYTE1ZGJlNywgMHhlZWU1YTNkOSwgMHhlMWZkNDE5MSwgMHg3YmM0NjRkYywgMHg5ZTVmYWMyYiwKKwkweDg2ZjQ5ZGJmLCAweGU4MTkzOGMzLCAweGI4ZTJhNmYxLCAweDM3ZDdmZWEwLCAweDlmZDUwNmE0LCAweGZhZDA3MjQ4LAorCTB4MGVjZjhkMjYsIDB4YjRiOWJmNmEsIDB4ZWNiZDUwN2YsIDB4YTQzMTkxOWMsIDB4ZjEwMTQ3NzcsIDB4Njc5MTAyY2YsCisJMHg4ZTc3MDcwNCwgMHhmYmVmMWIxNywgMHhhNGIwZGQ3NSwgMHg1ZmJkNjBiYiwgMHg3M2QwMzNlZiwgMHg1ZTI0M2UyZCwKKwkweDk5NTFhYzY3LCAweGJlOWJjNjA3LCAweDJjMWZlNDA2LCAweDc0ZTM0OGYxLCAweDBlMmZhZmUyLCAweGIyNWNlODU4LAorCTB4N2Y2ZjI5YmMsIDB4MzUwZmQ0MDEsIDB4ZTgwZjI4MTksIDB4NTViOGIyZDAsIDB4NmExZGFmNjgsIDB4MjgzMmIwNGEsCisJMHg2MTU1Y2IzZCwgMHgyYzhjZDhkNywgMHgyZDE1ZGU0MCwgMHhhNmY5NDI1YiwgMHg5MzkzM2U2NSwgMHhlZjc2OTdlYywKKwkweGMwZWViMjkzLCAweDEyMmUyYWYzLCAweGQ1M2RlNGY5LCAweGZlMTBhYWQ3LCAweDY3ZGYwNDVjLCAweGUxNWVlOTIyLAorCTB4ZjEyN2IwNzEsIDB4NGVmNGUxMmEsIDB4MGFlM2FlYmUsIDB4MTNmNTg2NWIsIDB4YjlmNzFmOTEsIDB4NmE3MWQ2MGIsCisJMHgwZTg1NjM2MiwgMHhiZWVhMTVmZCwgMHhjZjlmOTIwNCwgMHhiNmU5MGNhYiwgMHhmMjgxOWU3NCwgMHhhZmJmNjYwYywKKwkweDUzM2FjMDZlLCAweGJlMzk1MzcyLCAweDY2YTNjYTU1LCAweDdjNjg5OGNmLCAweDAyMTQwNWQ2LCAweDZkM2MxNmZkLAorCTB4YWUwMWVhN2EsIDB4ZmI3ZDc4ZmYsIDB4ODIwM2RmNDAsIDB4OGU4ZTkxM2UsIDB4MmM1NzMyYzcsIDB4ZjVhMTU2MmQsCisJMHhjMjc2ZmU3ZSwgMHg4N2VlN2MwNiwgMHhlZTEwNmZhNywgMHhmZGMxYmQ3YiwgMHhlZmUwMTI2NiwgMHgyMGRmMGFmMywKKwkweDEyOGI2ZjkyLCAweDcwYjRhZjg4LCAweGYyZTQ2MjNmLCAweGEwN2M4YmNiLCAweDlmYTZlNWY4LCAweDdlOTI5NmNmLAorCTB4MjY3MDZlOTgsIDB4ZTU2ZTQ5M2EsIDB4M2FkY2EwYTcsIDB4NzY0MGQyYjIsIDB4YWNiYmQzMzAsIDB4M2U4ZjQ4OTMsCisJMHhlNzJjNzQ0ZiwgMHg4Yzc3YTIzOSwgMHg2OTFkZjVjMywgMHg1Zjk4NjRjOCwgMHhhNTUyYmU1MSwgMHgxZmQyMGFmMywKKwkweGU3ZTNlZmVmLCAweDBmNTU4N2Q0LCAweGRiY2MyNGQ4LCAweDUyNTg3OGEwLCAweDNlZGNkZDI4LCAweDVkZTUxODZmLAorCTB4NTk2ZGVkNmEsIDB4ZWFiYzA5N2UsIDB4ZTY0YmIwMDksIDB4ODE3OWU0ZWMsIDB4M2Y1M2JmMmMsIDB4M2VlMDYwNzUsCisJMHgzY2Y5ZjE5NiwgMHg0YWY5NDEwNSwgMHgxZGFmNTk1NSwgMHgyZWM4ZWIzNCwgMHhjMjczYzE4YywgMHhhMjU0Zjc4OSwKKwkweDhkNTkxM2IzLCAweDlmMDE5MzQzLCAweDg2YmI3NTI3LCAweDJmZjUwNWRlLCAweGVhOGY3YTI2LCAweGRhMjIzZWExLAorCTB4ZWI4NDJmZjMsIDB4MGNjYWRkNWMsIDB4ZmFmMzBiMjUsIDB4MDkxYWFmMGYsIDB4YWNmZTdkZWYsIDB4MmU2YzQ5YzEsCisJMHhjZjM5ZmNlYywgMHg0M2ZkZWVjYywgMHgxYmQ4MTVmNiwgMHhlMWRkYjhiZCwgMHhjZmZiYzE0YSwgMHgxYWNkMWQ3MywKKwkweGM3YzM4MDdiLCAweDAwMjA0OTgxLCAweDA1NmFkYjE3LCAweDc4NzYzNzZkLCAweDNjMDFlNTg4LCAweDMxZDc0ZjU3LAorCTB4ZTA3OWUwNGYsIDB4YjFlM2M4YjAsIDB4YTg3M2YzMjQsIDB4MjRhNjFiYjQsIDB4NWQzMzM5NzMsIDB4YmQ5YmU5YzcsCisJMHgwMzdhNzBhYywgMHgwZjUwMmFmYiwgMHgxNzNkYjk0OCwgMHhiZjU1YWFmMywgMHhiYjcyOTAxZSwgMHhmZTUyMzU4YSwKKwkweGRiOTkyMzhhLCAweDFmMTViMzJmLCAweDk4MzVkZGQ5LCAweDJiZmQwMjg5LCAweDU2NjgzYzZjLCAweGYzZTRkOWI1LAorCTB4YjY5OGQyNjUsIDB4N2E2MGZiNDAsIDB4NzMyNzk3MzIsIDB4OGUzZWNmOGMsIDB4M2FjOTViZTQsIDB4ZmQzNTNlZjgsCisJMHgyYWY4MzczZSwgMHhmNTQzMzIzYSwgMHhjMzZkODU0ZiwgMHg2ZjhkM2IzMiwgMHhiNzlmYTI3MCwgMHg3NTZiZjA1MiwKKwkweDI1NmJlMmEzLCAweDUxZWI4NTNiLCAweDI5OWQ1N2U5LCAweDNmNTZhOGY0LCAweDhkMjVlODg1LCAweGQxYTk5YTNlLAorCTB4NTgzMWFjYmIsIDB4ZTk3YWMyY2YsIDB4YWY1Y2IyZGUsIDB4NjhlZTlkNzYsIDB4MGU2MWMxMGIsIDB4NmZmNTBiYWMsCisJMHhhN2I3Yzc4NSwgMHgzOGFkZDY4NCwgMHhlYjIxYTMwMSwgMHgzMWVlNjRhOSwgMHg3ODBmYjhiMSwgMHg1ZDA4ZWFkZSwKKwkweDIxNWY3NjlmLCAweGQ0ZmIxNWViLCAweGY5YzJiYmFlLCAweGJiZTYyYjU1LCAweDA0MjkzNTU0LCAweDI0M2VlZDJmLAorCTB4OWM3NmI0M2UsIDB4OTc4NTRiYzQsIDB4NDVhMmI3YzMsIDB4ZDY3ZTdjMjEsIDB4ZjIzMjFmNmQsIDB4NjFiYTRiNmYsCisJMHhlMDJmZjBjZCwgMHhiMDQ3NDk3ZCwgMHg2Zjk0MTJhZiwgMHgxZTQxYWI5NSwgMHhkM2QyODY2NywgMHg0NTZjZDYxYywKKwkweGFkNjFhOWJhLCAweGRmOTA1M2NiLCAweDFmYWY5YjVhLCAweGI1ODY3ZThlLCAweGE5ZjlkMzZmLCAweGEzOWFkZWQ0LAorCTB4N2E1MDA1OGIsIDB4YmY4ZTU3NzMsIDB4MTdlNzRmY2EsIDB4NWNmYzI3OGEsIDB4ZTlkZGMzZjAsIDB4ZTAxZTlmYTUsCisJMHhlYWEzNzMzNSwgMHhkNDE0MWM4YSwgMHg3YTNmZTQ0ZiwgMHhiY2IzOGUwOSwgMHg2M2ZhMjM1ZSwgMHhlNTNmMDk2NywKKwkweGFiNTlkNjg1LCAweDJlNWZmN2U3LCAweGNmMDE1ZWI4LCAweDBmZGQ3YjlmLCAweDc3NjRmNzI3LCAweDc2MTczZjg1LAorCTB4M2QxYTViZGIsIDB4ZmI4MWIxZmYsIDB4ZmU3Y2E1NWIsIDB4ZmYyMmVmNWEsIDB4M2IwYmI0MmUsIDB4ZTNjNmNlYWMsCisJMHg5ZWI5MWE3ZCwgMHhiZDcyNGY5ZSwgMHgzOTc5ZTg0MiwgMHg1YjM1ZDFjZiwgMHgxMzMwNWUyOSwgMHhmNjgwODBlZCwKKwkweGE1NmY1NmNmLCAweGQ5ZjFhNTc4LCAweGNiYjQ1Njk5LCAweGJlOTlhZThmLCAweDhmNTJmMzBhLCAweGJkMjc0ZDM2LAorCTB4YTk3YmY5NWYsIDB4NDBjNjNkZjcsIDB4NGQ2OGEyN2IsIDB4OTA3YmZhZDksIDB4NTI0NzM3OGUsIDB4ZGRhMmIxNWMsCisJMHgyMDQ1Y2UyMywgMHg2MzlmYTE2NywgMHg2Y2FiOTcwZCwgMHg5NWIzOTczNSwgMHg5MDA3MWZhOCwgMHhmZDhiZWM3ZSwKKwkweGY0ZjBhY2VlLCAweDY4MDg3ZTQ1LCAweGU3NzliZDI3LCAweDc3OWZjZjc0LCAweGZlNzdiOGMyLCAweDI1ZTlkYTI5LAorCTB4NzU1YWQ4NTAsIDB4NWFkYmNmNjQsIDB4Y2Y1NjNmNTEsIDB4ZGUyMGYwZmYsIDB4ZTA3YjAxZDMsIDB4N2I0YjVmZmQsCisJMHgwNjQ1YWEwMCwgMHhlYTMyNWI0ZiwgMHg1NDA3NjEyMSwgMHg2YzMyMWJhYiwgMHhiZDA4Mzc2OCwgMHg3ZjgwMWZmMSwKKwkweGU3Zjg3ODQ0LCAweDExY2JmYzEyLCAweGRiZjEwMWZlLCAweDljMzgxYjRmLCAweDdmZTA2YmE3LCAweGNiYzcyNTc4LAorCTB4MmI2Y2E2ZjIsIDB4NmQzZjJmOWUsIDB4ZWJiYjI2YzgsIDB4ODIxY2E2ZDMsIDB4MDAwNzhjZmYsIDB4MWY1ZmRjZmUsCisJMHgwMDM1Nzc2YywgMHg4MTdjZjFmYywgMHg5NmY1ODdmMCwgMHhmYzA0M2JiNywgMHgwZGZlMWM5ZCwgMHgyNTZjZWUxYywKKwkweGMwODQ2NzJmLCAweDU3Zjk0YmQ5LCAweGU0ZDFmZTc3LCAweDc4ZTIzYjQ0LCAweDU3ZDkyYjY0LCAweGFjYThiN2M3LAorCTB4OTMyZWMwM2UsIDB4YWMzN2QxNzYsIDB4ZGZiNDQ5ZjEsIDB4Zjc2N2ZjMjQsIDB4ZjI4NDE4ZTksIDB4ZDdlMWY0YTcsCisJMHhkOTg3ODhhYywgMHgzMTUwNzg1YiwgMHg5NWNjZmUwNCwgMHhlZWM3ZjE0NCwgMHhhOGVkYmJmOSwgMHhkZDVmMTE2ZiwKKwkweGUyNDVkNDc2LCAweDE5Yjk4NmE5LCAweGQ3OTZjN2U5LCAweDQyMzllMDBlLCAweDQ1YmY3MTcxLCAweGI2NmZiYzhkLAorCTB4MTliZWY4MjMsIDB4ZGE5NTkyZTYsIDB4OGNlMmM1ZDEsIDB4YTRmNWMwODgsIDB4NzlkM2VmNjksIDB4YmViZGM2MTgsCisJMHhkNmVhZjljZCwgMHg1ZGU3YzRmOSwgMHgyNWI5Nzk0MSwgMHhmZTgwZDVhYywgMHhkMGFjZDYzNiwgMHgwNWVhZWQzZCwKKwkweDg2NDJkNjg1LCAweDVhM2FiNTcxLCAweDA5NDUzMzg3LCAweDU2YWVjYmNhLCAweDU2NGY2NDc1LCAweDQ0N2M0NTE5LAorCTB4ODkyNDU1ZTQsIDB4ZGMyOTQ5N2UsIDB4NjI5YzkwMmYsIDB4MjQ3NGYyYTMsIDB4ZGE3MDdkMjMsIDB4N2RlMWY0NjIsCisJMHgyNTVmMzgyYSwgMHg5ZGRlZmNlMywgMHg0MWRiYzIyNiwgMHg1ZmMwMTM1YywgMHgzMzNmMGEzNSwgMHhiN2E0NDJhOCwKKwkweGQzYTcxODViLCAweDI5N2JjYzViLCAweDk3MjcwN2FlLCAweGE3MWZhODc1LCAweGM5MzkzNDJkLCAweGExOGY4ZGNlLAorCTB4NDJjZGQyZjgsIDB4NWU2MmRkZGUsIDB4MzEzZDQ2ZWUsIDB4NjE3NDZjY2QsIDB4MzE3YWUzMDksIDB4MWEzMGQ3ZjksCisJMHgwZGY5ODdhNiwgMHhlZjc0OGNiZCwgMHhmM2EyMzRiMCwgMHhkZjEyM2M1OSwgMHg4ZWY4N2M5NiwgMHg5NWVhNTgwOCwKKwkweDFmYTM4ZTYwLCAweGY2ZGQ3ZTE4LCAweDVlMjg1YzdkLCAweGY2MDlmOGZjLCAweDg1NDZkNzRiLCAweDE3MGM4YmY3LAorCTB4MmU1YzUwNzAsIDB4NjA5YjNmZjIsIDB4Yzc1ODI4ZWMsIDB4NmYwNzE0YTgsIDB4M2ZiOGQ4NzcsIDB4YzllMDJkN2EsCisJMHhiNmFmYzdlMiwgMHhmYzc5Nzk5ZCwgMHhiMWYzMGFiMiwgMHhiYzU4ZjdmOSwgMHg1ZDU0MWYyNCwgMHhjOGNhYmQ1MCwKKwkweDYyNzk0ZjlmLCAweDM0ZWFmMTQzLCAweDhlNjFkZWM2LCAweDJhYjc4ODgxLCAweGVlNzgyMTk0LCAweDYxZjE4YjJmLAorCTB4ZjQzYWVmN2MsIDB4ZDRiMWRiODcsIDB4ZDY0Y2JkMTMsIDB4OTc4ZWFmMzMsIDB4MGUzYjY2MGQsIDB4MjVlM2ZkYzcsCisJMHgyYWJmOWUwMiwgMHgwMDMxYWQ2MCwgMHg4M2Q3ZDZmNywgMHhiNDM3ZjNmZCwgMHgwMmZiNWFlYSwgMHhiN2QzYWY3YywKKwkweGVhN2QyMWI2LCAweDFiMDYxYzIyLCAweGFmMWVlM2NjLCAweGE1MzllMmU0LCAweGFkYzVlOTZhLCAweGE2ODllMmI3LAorCTB4YTBhM2Q1ZTIsIDB4YWNmOWUzYWUsIDB4ZmVlNmJmNWQsIDB4NTk4MDViODksIDB4ZWFiNzZlMTEsIDB4Y2I5YWJiNTksCisJMHg1MmUxMDBlOSwgMHhhOTc4Nzc2YiwgMHhlMjg1M2NkZiwgMHgyMDJlMzIzNywgMHg4NjE4M2ZmMSwgMHgyZGUzYzQwZiwKKwkweDRlMzA3ZDYyLCAweDM3ZGYxNTgzLCAweDdjZDdjNzg2LCAweDhjY2MyZjgxLCAweDE1Y2ZiODQ2LCAweGYyNTczNzdjLAorCTB4YmYzMDUzNWIsIDB4MDQ3ODgyM2QsIDB4MmVkMDU1M2UsIDB4MjJkZGI4MDYsIDB4ZTJmODllY2EsIDB4NDc2ZTE0YTEsCisJMHhjZmMyOTQzZiwgMHhlMjVjZjdlZiwgMHg5NWRjY2M3YywgMHg4Mjc5Nzk0MSwgMHg3YzRkYWE1ZiwgMHg3NWZmMzk3YywKKwkweGM1MzA3Y2EyLCAweGY1Y2JlMzRlLCAweDhhN2ViZDAwLCAweDAyNDBlOGUzLCAweDY5MWViZDIwLCAweDY4ZmIyN2FjLAorCTB4YzM4ODBiMTYsIDB4NDlmYmZhNjUsIDB4NzdhZDBlYmEsIDB4ZjdkZDExY2IsIDB4NjZiYjFhNTgsIDB4NWY5NWU4MjAsCisJMHg4ZTUxM2E0NCwgMHhjZTZjNjJkZSwgMHhmNjg3MzNhOSwgMHg1MmU2NzE5MywgMHhlZmEwNjFkNiwgMHg5OTNmNDkwMywKKwkweDU1NjMzZmQwLCAweDk1MzVlNTMzLCAweGY0MWVmYzJhLCAweDU3OGI0MmU5LCAweGM3ZTI3NjA3LCAweDA2N2JiZTIyLAorCTB4YTc5YzQ2ZWMsIDB4ZmNhMTU2MzQsIDB4NzczMTY5YWYsIDB4OTc1ZjIwOTYsIDB4MmM3YThkNWEsIDB4ZGZmMTE2M2YsCisJMHg4ZDE3NTk1YiwgMHgyYjJkODlmZiwgMHhkZjg2MDZlNiwgMHhlNjMxNTA0ZCwgMHhhNGY4MGIwNywgMHhhZGZiMDVkOCwKKwkweGViYzNmOTQ3LCAweGU0Njk1ZDJiLCAweDRmZjUxMjhkLCAweDY2NWM2MWY3LCAweDAzYTA3OWVhLCAweDc2MmUxZmFhLAorCTB4NWZhN2JjYzEsIDB4OTFkOWNmMTUsIDB4ZmE3ZTdjNjIsIDB4ZGVjZjQxM2UsIDB4ZTlkZTM0ZTMsIDB4NTNmM2U0YzcsCisJMHhmOTBhZjlmYywgMHg3ZjVlMmJmYywgMHhlYTJmOGU1MCwgMHgyZjllNmIwZiwgMHg4MjdmM2NkMSwgMHhmODlmNWJkNywKKwkweGY2OGJkOGFhLCAweGRhNGU2OGViLCAweDkyMTQyM2E1LCAweDM3MjE0NjU3LCAweDEyYjY5NzRhLCAweGJiNzU0YjljLAorCTB4YjU5YTM5NzgsIDB4ZGMyZmYyZWEsIDB4ZGI4YTY0ZWYsIDB4Zjc4MDkyOTgsIDB4NTA1ODhmY2UsIDB4ZDUzM2ZmMGYsCisJMHg3ZTgxNGM2NSwgMHhmZTc5MjY5ZiwgMHg0OTljZTU4NiwgMHg3Mjg4ZDc4YSwgMHhlOTFmM2RmNywgMHhmMjFlOTI4NSwKKwkweGFlNDI4ZDI3LCAweGE2ZTVlYTlmLCAweDgzMWVhNWY3LCAweGYxYzNkZTcxLCAweGJiOWM3NTJmLCAweGU0ZjljNzQzLAorCTB4NGQ3MzhjYzcsIDB4NDczOGM4NmEsIDB4ZmViZWNjN2YsIDB4MjRlMWNhOWMsIDB4NTE3NjkxYzcsIDB4ZTk0YmJhNzEsCisJMHg2NjNhZmM4NSwgMHg3MGJmOTA2NCwgMHgxOGNlYmRlZSwgMHhjYzMxNGJmNCwgMHhjZmQwMDM3NywgMHg5MTljZGE1ZCwKKwkweDdkY2ZlMzA3LCAweDBhOGNjNWVlLCAweGJlODQ5YmI0LCAweDMyYTczOWFmLCAweGRhYTNjODE3LCAweDVmOTUwYTczLAorCTB4YzQ2NDdkYjQsIDB4ZGIzNWIzN2IsIDB4YTBlMzhjZGEsIDB4NDU5NDJkNWYsIDB4MTJhYWViMDEsIDB4YTc3ZDA0ZWIsCisJMHhhN2EwMWM5ZiwgMHg0Mjc0YmQ4ZCwgMHhmM2NjM2M2ZSwgMHhhMTNiOWUzMiwgMHhkNWNlN2M0NywgMHgzZGZkMWYzNSwKKwkweDRhMTFlZmVhLCAweDk3ZjJmOGQ4LCAweDdiMDc3ZjYyLCAweGVlNjExZmI4LCAweDYxNTFlNWM1LCAweGVlMzQ1NzZmLAorCTB4MzkwNjE0ZjMsIDB4ZmFhMmZjNjAsIDB4YmYwMmY5ZjAsIDB4MTUyOGViMTIsIDB4NTBmYTZmZmEsIDB4ZTAwMzg0NGIsCisJMHgxZTNkZTQzYywgMHg5YjU4YWY1ZiwgMHg2MmZlOGI5OSwgMHgwNGU4ZjI2MywgMHg3ZThmNWI4MiwgMHg2N2VlMmVkNiwKKwkweGQ2N2VlMTZkLCAweDAyYzc3YjUyLCAweGJiOTk0ZWZjLCAweGY4ODNlYzU3LCAweGJmMDliMmRkLCAweDJjMDY3YzkzLAorCTB4Mzc4ZWVmMGIsIDB4ODliZjdhYzksIDB4M2Y3MTQ2NjMsIDB4N2VmM2Q2MTgsIDB4ZjIyMGY5OWYsIDB4NmUyOGRlY2QsCisJMHgzNjFiNGVjZiwgMHg0M2U1MGEzMCwgMHhjZWI0NjY2NywgMHg0ZmFjZmMwNiwgMHg0YWY3NzMyYSwgMHhjNmFiZjZjMCwKKwkweGM5YTE3YjYxLCAweGUwOGNhN2QyLCAweGY0MmU4OGNiLCAweGI4ZmVlZTQ5LCAweGZlOGZlYzRlLCAweDM1YjE4ZjExLAorCTB4ODdkODA2ZTEsIDB4ZWU5NTBkZTcsIDB4NDUwNjc4MDMsIDB4Y2JjNWMyN2IsIDB4ZTVjNWVmMmYsIDB4OGQ5N2JiYjksCisJMHgwNzU3YjFlMCwgMHhhZmY1Y2NlYiwgMHg3NjBmY2U0MywgMHgxODBlODJmZCwgMHg5NGQyYzhlZiwgMHgzMDM4MGZjMSwKKwkweDVkNzg1MzFlLCAweGZjZmYwNGFmLCAweGEzM2M5MmIzLCAweGEyM2ZlNzAyLCAweDY4ZjA3ZDYzLCAweDE4ZWJiMTcxLAorCTB4MWQ3MWYwMmUsIDB4Zjc0YTA2YzIsIDB4ODBiN2EwMjgsIDB4MzFlNGRlZjMsIDB4YTlmNTQxZDEsIDB4MTVjYzcxYzUsCisJMHg5YTlkYmZlOCwgMHhiMWJmNTQxYSwgMHhmZmE4M2IzNCwgMHgwN2ZhMzNjZCwgMHhlYTY4OWYzZCwgMHhiMDBiYWZjOCwKKwkweDk3YjY3YjY3LCAweDVhOWYwNGJjLCAweGVkMGEyNThiLCAweGJlNWE0ZmJhLCAweGI0MTZlMGY5LCAweDRlYWEzNzAzLAorCTB4ZWY2NzU5YjQsIDB4NDhjMWY0ZGMsIDB4ZjAwNjc1ZTgsIDB4NDk3ZTQ3MWIsIDB4M2VkMWY5MDcsIDB4N2E3NDc5OTcsCisJMHg3ZTMwM2U5NywgMHg1MDc1OGE3NCwgMHhkNzNjYTJiZSwgMHg2OGRjNmM1ZSwgMHhmMjlkYWRhZSwgMHg3OGFlN2YwOSwKKwkweGUyNWViY2QxLCAweDcyY2I5YmZjLCAweGE5OWUzZjUxLCAweDc5ZmM5ZjdiLCAweGNmYmU2NjM1LCAweGUyMWUyZjUzLAorCTB4YmQ0NDJkZGYsIDB4MzU3Zjc0MDIsIDB4ZTJmNjg4YmUsIDB4YzBmYzEwMzksIDB4MGUzYjQ1ZmYsIDB4ODZjZDljNTEsCisJMHhmN2I0NGRjMSwgMHhmMWU5ZTZkMywgMHg5NDJkNjRmZSwgMHg4MWM2NWZhOCwgMHhiYTAxOGFkYywgMHgwMzYzNjhlOSwKKwkweDQ4ZGU2MWI3LCAweGU1ZGI4NWE2LCAweGJmOTBhNmU3LCAweGY3MTQ2ZjdjLCAweDhjNGRlY2ZiLCAweGNjNDhlZmE1LAorCTB4ZGE4NmI4NmQsIDB4ZDM0NWNlNmIsIDB4MWRhOTZmZjgsIDB4ZmEyZjI4ZTMsIDB4MTNlMjg1MDUsIDB4MmRhNzUzMTMsCisJMHg4ZGVjZmRjNSwgMHgxZGI4MGVmMiwgMHhlN2Y4OWRlNiwgMHhkYzIzYzdhYiwgMHg3YmYxYjY2YSwgMHg3N2Q1MTMwMiwKKwkweDU5NDFlN2YyLCAweGJkMGQ3OGQ1LCAweDdiNjU1MTNmLCAweDYyMWZiMDE1LCAweGUzNDJkZGNlLCAweDAwMWI0NDRlLAorCTB4Y2I1MGVhZWEsIDB4NTU5N2E4MDMsIDB4M2Y5ZjZiNjMsIDB4NWEzMWJjYTAsIDB4OWVkNGRlNDgsIDB4MjZmN2E0OGIsCisJMHhmZGZkNzExNCwgMHgwYzRmMjE3YiwgMHg2MzVkN2M5ZCwgMHhlN2EyNGRjZiwgMHhiZDdjMmU5MiwgMHhmN2YyODJiMiwKKwkweGY1MWIwOTBkLCAweDQzMjFiZGY4LCAweGFmZmQ0MmE3LCAweDRhOWZkNzNkLCAweGZhMzdkZmI5LCAweDJmYmU5MWZkLAorCTB4N2FmODQ4NjAsIDB4YmU4ZGU2MWMsIDB4YzhkOGFmMTEsIDB4ZTNjOGQxMmMsIDB4NjJjMzc1YjMsIDB4ZDU3OTE4NTgsCisJMHg5ZTM5Y2YzZCwgMHhjNzNhNmM2ZiwgMHgzYmZmOGZmMywgMHhlNDE3ZjVjZCwgMHg5ZDQ1OTJjMywgMHgzMTE3OGM3YSwKKwkweGUxMGQ4NDczLCAweGQ4MzA1MjU1LCAweDY3YzAxMTUxLCAweDhjOWJhZWVhLCAweGVhYzMxZjg4LCAweGFmYTg4ZGI3LAorCTB4MDUxNjUwNGQsIDB4ZjkxNmFmM2MsIDB4ZGQ3OTVhNTgsIDB4ZmM4M2U0MjIsIDB4M2ZkNDliOGUsIDB4ZDEwNjc5MmMsCisJMHg0MTM2YWRlNywgMHg5ZThmODJhMCwgMHhkZjJjN2MxNiwgMHgwZTMzYTBlZiwgMHhmNzNiNzFlMCwgMHg3OWE2YjdmMywKKwkweGQxMzk0MmRlLCAweDdjNmVjODUxLCAweDQ3NjdlNDllLCAweDdlNjljNjA2LCAweDllMDNmNWFlLCAweDFiYjIxNDIzLAorCTB4YmVhZjI5M2IsIDB4YzNhMWMwYTQsIDB4ZGQ3YmMwZjgsIDB4ZjNmMzg3N2EsIDB4MjZkMWY2ODUsIDB4Y2E5NmZkZjYsCisJMHg2ZmI4ZTIxNiwgMHgxZDk3ZjJmZCwgMHhlZGFmMTgyZSwgMHhkNDNjYmNlZSwgMHhjZmRlNzIwYiwgMHgwYjdiZjE3YSwKKwkweDFlNzVkNmNjLCAweDJmYjU4N2NmLCAweGVmOTAzYjQ3LCAweDBjZTFlMjI3LCAweDRkM2JhMmUzLCAweDc2ODE2ZTc0LAorCTB4YmVkNDc3OGEsIDB4ZWYwYTdhNmMsIDB4ZTE1YWQ1YmIsIDB4MTdmMzBhZmMsIDB4OGFkOTEyYmQsIDB4NGFmNmRjNzQsCisJMHhjN2Y1MWVhNCwgMHg5ZjNkYmQxZCwgMHg1ZThhN2MyMSwgMHhjZjA2M2JlOSwgMHg5MzE2YWU4YiwgMHhlM2ZkOTE5ZSwKKwkweGI2ZjI0YTNhLCAweDQ4NWVmNTg3LCAweDRjZTk2OTdlLCAweDgxYTdhN2YyLCAweGEwOTk0YmYzLCAweDdmYzE3MmQzLAorCTB4Njc0N2MxMWUsIDB4MGY4ODkyZWIsIDB4NDU4MjJlY2YsIDB4OTE3NTNjNjMsIDB4ZGExYjcwMzIsIDB4N2QwYjBlMGIsCisJMHhlNWYyNGU5NywgMHg0MTFmM2M0NCwgMHhiMWZlYzRmYiwgMHhlYWExOGY3NCwgMHgxZjEwNmM1YywgMHgxNGNiOWY1NiwKKwkweGVkNDcxZGZjLCAweDA1Y2FkZjkyLCAweDdkODQ5ODlmLCAweGI1ZDA0MzMxLCAweDNmMjQ1YmI0LCAweDYyNGY3NGIyLAorCTB4NjI2M2VjMmEsIDB4OTViZGYwM2QsIDB4YzhmOWZlZTIsIDB4MzFiYTdlNGYsIDB4ODBiZTkwZGEsIDB4MDIyYjkyNmUsCisJMHhlZGJlYTdmOCwgMHg4YTc2ODYyNiwgMHg3NDRkZGUyOSwgMHg0MGNhMDMzMywgMHhiNzY2NjUzYiwgMHg5NzFiNjI5ZCwKKwkweDU5MmZlYjA4LCAweDdiYzNhOTk2LCAweDZhNzlmMjliLCAweDdmZDFhNWVhLCAweDI3YzhhYTQ0LCAweGEwZTZiNzMwLAorCTB4OGJhODZiNWQsIDB4OWE3ZGUyNzQsIDB4MWUzY2YxMzMsIDB4ODcwNTdmMzQsIDB4YmI4MzdjZTMsIDB4Zjk4Y2VkMDgsCisJMHgzZmU0Mjg0ZiwgMHhlNTAzZmI0MywgMHg3NTAzZDBkMiwgMHhjYWJmNDBjNiwgMHg1MTA2ZTc0ZCwgMHhiOWNhN2QzYywKKwkweDI2MzRhOGNiLCAweDM4NDcyZTdiLCAweDVlYmI5ZDk0LCAweDhmZDA2YmUwLCAweDcxMGUzZjhhLCAweGMxOTJiZjcxLAorCTB4Yzg2ZTcyNjcsIDB4NDc5MmJmNDQsIDB4NGYxZjNjNDUsIDB4MDM0N2I2NjcsIDB4NTQ2YjdkZTMsIDB4YjhjOThmZjIsCisJMHg5OTMzZjRhNCwgMHg4MDRmZGVmMCwgMHhkZjQ2ZmQzZSwgMHhhM2RmNDE5OCwgMHgwYTlkZmFkMSwgMHhiOTNmZmViOSwKKwkweGJmZmE0MGQxLCAweGExOWRlZGFhLCAweDc5ZmU3ODNhLCAweGY1MDkyYmE2LCAweGE3ODM3YWM5LCAweDY3MzNmNzA4LAorCTB4MDMzOWVmYjIsIDB4YjgzZWU3ZDQsIDB4ZTFkYzNhZDUsIDB4YmViMzY3ODcsIDB4NjlmNTA3MzUsIDB4ZmQxMWMwMzMsCisJMHhkNTJiY2Q1ZiwgMHhmNzZlM2VmMSwgMHgxYTM4ZjM0NCwgMHhjZjQ5NmZhNywgMHg3MzlmM2E1YSwgMHg3M2UwOWIyZSwKKwkweDdhNDRjZWI2LCAweDJkZDAyY2U4LCAweDUyNDNkMDBiLCAweDJmMzk0OGVmLCAweGViYTQ4ZmY1LCAweDVmOTczZDZhLAorCTB4Y2ExOGU2ZDUsIDB4OWRlYmYzMjMsIDB4YTQ0MmVlNDksIDB4MWYzYzdlYmIsIDB4OWU3N2FmZDAsIDB4ZjkwMjM1NWEsCisJMHhlNTNjNzRlMCwgMHgyMWJkNGI1ZCwgMHhjNTg1ZTBmOSwgMHgyNDQ3OTRjOSwgMHgwM2U0OTJmNSwgMHg3Y2E1Y2YyOSwKKwkweGY1MmY3NDk3LCAweGZkM2ZlOGQ2LCAweGMzYmZkNmVmLCAweDNjZDI5M2FmLCAweDdkMDJhNTc3LCAweGZhZTdhYjVkLAorCTB4ODViZDVhZWIsIDB4ZmM2YzY3ZTgsIDB4Y2RkMjNkMjQsIDB4NDNkMWNiYzUsIDB4MGExZThlNDIsIDB4M2QzNWEzOTIsCisJMHhhOTQ1ODFlOCwgMHgxYzVlN2U1MiwgMHg3YzExY2MxZiwgMHhlZGM0ZGUzMywgMHg4MWYzOTQ0OCwgMHg4ZGE2YjVlMywKKwkweGIxZjcwODdlLCAweGQ5ZWI5NTNhLCAweDNkZGQ2YjlmLCAweGE5ZDVmZmM5LCAweDk3ZmYyNjk3LCAweGZjOWM1ZWE0LAorCTB4ZmU1NGVmZmYsIDB4YmNhZDBhOWQsIDB4YTM3MTBmYzcsIDB4ZjNiZDNmYmMsIDB4ODNlYTFmNzIsIDB4MDNmNDBjODMsCisJMHg2ODk2YzFlYSwgMHgwZmExMjZjNywgMHhjNTQ0NWY0OCwgMHgxZjQ4N2VmOCwgMHhmZTllZjYxNCwgMHhmNWUxYTlkZiwKKwkweGZmNmM2NmMxLCAweGQyNDBmYWIxLCAweGM5MWJlNDk3LCAweGI0MmY5MjI3LCAweDYyZjkyNDdjLCAweGJjZTE2ZmMyLAorCTB4OGI3YTc4ODgsIDB4ZDZhYThmZGYsIDB4MGUyODliN2IsIDB4OGMxZTg4ZTksIDB4Yzc2ZGQ5ZmMsIDB4ZGY4ODUzNmQsCisJMHhlMDg0ZjQ0MiwgMHgwNGJmM2YxZiwgMHgxZmM5MGRlYiwgMHhmZjI0NWY5MiwgMHg5OGZlMGI1NCwgMHhmMjQzZjgyOSwKKwkweGY5YjU2ZWM1LCAweDBhOTgxMWQxLCAweDA4ZjllNjkwLCAweDkzZTQ4OGU1LCAweGZhYjVlN2FhLCAweDQyYmE0N2ExLAorCTB4MTk5YjIzNGYsIDB4YWU5MGM3NWYsIDB4YTQwY2ExYWEsIDB4ZmMwZjUzMmIsIDB4ZjUxMmYwNzAsIDB4YTQ4YmJlYzIsCisJMHhmM2ZlYWZhNywgMHgwZjU1ZjRmNCwgMHhhN2U2NzRmNCwgMHgxZGE4NTNkMCwgMHgwM2JlNjFmYiwgMHgxZjM2NzNkNiwKKwkweDlmYTY2ZGU0LCAweDhkZmMyNmRlLCAweDliMjFmYjcxLCAweDQ2ZjYwNzlmLCAweDM1ZWU3ZGYxLCAweDY3ZmY5M2E2LAorCTB4Y2YzY2Y3YzIsIDB4MzMwM2RhNTcsIDB4ZDI0MWJmODUsIDB4MDFkODFlNjksIDB4ZjhmYzQzNjksIDB4YmNjMGYzYzcsCisJMHg4NDdiOTM4YiwgMHg4NzdjNTM2NywgMHgzMzI3Y2YxMSwgMHgwM2I0MGNhMSwgMHg1MzdmYjI3YSwgMHhlZTRkMmVkMywKKwkweDE3ZmU4YTQ1LCAweGI0ODBmM2MyLCAweDFjNmVkZDlmLCAweGFmMWUxNjkwLCAweDAyN2VkMzAzLCAweGEyNjIyNzVlLAorCTB4YjIyYmY5MmEsIDB4MDBhMzVjNGIsIDB4YmE4OTBmM2YsIDB4YzIwOTRmYjcsIDB4ZjkwMmZhZjEsIDB4MmU1NWIyZmMsCisJMHhkNjA3Y2EzZCwgMHhmNDc1ZGRmZCwgMHhjYWE1YmM3NywgMHgzMWZlY2U3YSwgMHg4ZjA5OWViMCwgMHgxZDFmYmYzMiwKKwkweDE1MWQ4ZjllLCAweDUxMWZlZGQzLCAweDcxN2ZiZjk4LCAweDk1ZmVkNjVhLCAweDQ1MWJlN2E0LCAweDllYTc0YWRlLAorCTB4M2Q0NDgzYzcsIDB4ODA5NmVhMWYsIDB4YmVhNjgxN2EsIDB4ZWFiN2Y3OTYsIDB4M2U2MDU5M2IsIDB4OTI4ZGQyMDksCisJMHgwZWVjZjFjYiwgMHhmYTYwMWZiMCwgMHgyZmE4YjNmNiwgMHhmZjQzMGE2YywgMHg4NmZjNmQ0NiwgMHg1Y2EyY2Y1NywKKwkweDZjNTBhMWRiLCAweGRlMGUxYmFhLCAweGZhMDcwNDgxLCAweDA3ZDUzODNlLCAweGM2NWQ3N2VmLCAweDc4ZGJjZGQ4LAorCTB4NDNiNWY2ZmQsIDB4MTMyZjc5NTYsIDB4MWJkYzA2ZTMsIDB4MmUyYjM0MzIsIDB4NTAyODQ3Y2EsIDB4YTE5OTU5N2MsCisJMHg0ZDNkYmVmMCwgMHgxZWI5MTNjYSwgMHgwMjE0Zjc0NiwgMHhhZjk4NjdkZSwgMHg3N2VmMjk3NywgMHhkMTY3NGRlNywKKwkweDRiYTZhZGZiLCAweDUxODZmZjk4LCAweGFjNmZlZmUxLCAweGU0YzZmZDEwLCAweGZlN2Q4NGM3LCAweGUxY2E5YTcwLAorCTB4MzQwNmZjMmYsIDB4Njk0ZDM0M2YsIDB4ZmY5ZjdmMGUsIDB4MWQyZmMxMDksIDB4NzgyMTNmMTgsIDB4ZmU4NTVhNGUsCisJMHg4NGEzMGVlZCwgMHhjMjE1N2JiNywgMHg0MTYzMmM3YiwgMHg5Zjk4MzQ3ZSwgMHhiYWQ3MWJlYSwgMHg3Y2Y0MWE0YiwKKwkweGJjMGQyZWJiLCAweDc3YmY2ODdlLCAweDAzZGIwNWE1LCAweDVmMDY5YmY0LCAweGY3ODAxZmE2LCAweDc3ZGU2MWRkLAorCTB4ZmFkZmJmMDQsIDB4MTI1YWY4NDMsIDB4ZGJhMGJlZjIsIDB4NWQ4ZTkyNTksIDB4YTMxZWY0NDEsIDB4YzY3ZDEzNzcsCisJMHhiNDM2MmJjNCwgMHg5MWRjNmJhMywgMHhlMGJjZjEyYiwgMHgxMmQyY2ZlNywgMHgxMzhjOWI4MiwgMHhiNGRmZjA4NCwKKwkweGM4MDMzMTkyLCAweDZmY2YxMjRlLCAweGViZmM4NTViLCAweGU3Zjc3NWQ2LCAweDFhZTkyOGZjLCAweDVjMDEzNmFmLAorCTB4ZWYwN2Y1YzksIDB4ZWI3NjljYmYsIDB4MDI0ZmY0MmEsIDB4YWE3M2QwNWQsIDB4YWRkNjAzZWIsIDB4NGQ2NmM3ZTUsCisJMHg3Zjg2OTQ3ZCwgMHhmYzkxZmYwNSwgMHg3MDAwN2Q0MCwgMHgxNmY5NDFjYSwgMHgwOGU4Yzg3ZiwgMHgwNDRmOTNhMCwKKwkweDdjODk0ZTljLCAweGRjZDE4ZWYyLCAweGUyYzhlYzllLCAweDNjNjk3N2U1LCAweGEwOTlmNTJlLCAweDllOTI1M2NiLAorCTB4OTBlMDAyYTIsIDB4ZjQzZjQ0MTYsIDB4ZjYwMjIxZjcsIDB4MjliYTcwNGQsIDB4YmRmM2YyNWUsIDB4YmZjMGM1MjUsCisJMHhmY2ZlNzYxZCwgMHg2NmZlZDY3ZiwgMHg1ZmNkMzc5NSwgMHhjZmY3OGVkNywgMHgyMDk2ZjdiNSwgMHhmN2M3YmE1YywKKwkweDc2OGZkYTJlLCAweDZlMDI0ZGM0LCAweDY3YmRhZGRmLCAweGMwODA3N2JmLCAweGJiZmZhMjczLCAweGY0MWY0MGFiLAorCTB4YTQ2YTllM2QsIDB4M2U5NDI1MGYsIDB4MmZhNTBkNWUsIDB4ZmE3ZGU2YWYsIDB4YmQzZDA0M2IsIDB4Nzk1MGI3ZmYsCisJMHhjZmJjZDJlMCwgMHgxNzEwN2JmMCwgMHg1YmMwYmVmZiwgMHhlM2FmMDZiMSwgMHhhMzFkNzgzNSwgMHhiYWNhOTdhOSwKKwkweDRhZmU0ODJmLCAweGUzYmU1Y2I5LCAweGUzMTJmYmUxLCAweGQwYTlhZmQxLCAweDNkM2YyNDc1LCAweDNjZjQ0ODNmLAorCTB4NzdlOTI2ZDcsIDB4NGZkNWMxMTUsIDB4NDdlZDBmY2YsIDB4MmNkYzlkZmEsIDB4ZjQ5MWI1ZTksIDB4YzM5NDI0Y2YsCisJMHgyOWY1ZmMyMywgMHhmZWE4ODcyOCwgMHhjNWM2MDk3MCwgMHg5MWVhZmFmYywgMHg2ZmI3Mjg1NSwgMHgxZmZkOTA2OCwKKwkweDJmMzdmZWE1LCAweGE2YWRlMzkzLCAweDhjOGYxMmU3LCAweGVlZmE0NjNkLCAweGFmYTk3Y2E2LCAweDNmYjkyNzFlLAorCTB4ZWZiZjg1YTcsIDB4ZmVkZGZmNGMsIDB4NDY4N2U0MWYsIDB4NmFkNjVjMGQsIDB4ZmY0ZDVlZWEsIDB4NmZkMDE3ZDUsCisJMHgyZmVmMzRjYiwgMHhhOTVmM2NkMiwgMHhkNGQxYWZhOSwgMHgyZmRmODIxYiwgMHgxZjEwYTE5YiwgMHgzOGYwMTU5NiwKKwkweGI1MmY5NmE1LCAweGVmNGFlMWY0LCAweGY1YmE3M2I2LCAweGZiMjY2MmI5LCAweDI2YWY4ODJlLCAweGI1ZmFmM2Q0LAorCTB4MWE0YjFiZTksIDB4NzVmNTAxY2MsIDB4NWYzODRhOWIsIDB4ZjcwMTZjYzAsIDB4N2FlNjQxOWYsIDB4NDMwN2EwNTUsCisJMHgyMGIzNzIwZiwgMHhkOWI5MDdiZCwgMHhmOWVmYWI0ZiwgMHhhZmUwN2ZmMywgMHgwYTM3MTQyOSwgMHhhYjc2NGJiMiwKKwkweDU1MzZmNWMxLCAweDc1YmJkYmFjLCAweDgxMDE4MmZmLCAweDRiZTdkNWYxLCAweDYzZGQ1Y2YwLCAweDVjZGJjNzFjLAorCTB4MmVkMDI2MzIsIDB4YWUyNWNkNjIsIDB4ZmVjYTdkODAsIDB4NWVmYmJlZTMsIDB4ZWIzY2Y5YzUsIDB4ZDFiMjVjZmUsCisJMHgxMTRmNzE4YywgMHgxMmYzYjRkZiwgMHhmYThhYTVmNCwgMHg2ZmY4NTZiYSwgMHgyZjFlNjFjNiwgMHg1YWEyOTNjNiwKKwkweDA4MGZlNjczLCAweGVlNmIyN2Q4LCAweGJiNmNmYjgzLCAweGI3ZGZlNTViLCAweDAwZmMwN2FiLCAweDgzOThjYTljLAorCTB4MzNhNzUwZjIsIDB4YjZhNWU1MTcsIDB4ZmMyY2M0YzUsIDB4Zjc2Zjc4MmYsIDB4ZDQ0MmVhZGQsIDB4YzYxNzA3ZDMsCisJMHgyYmQzNWU1MSwgMHhiMTdjZmNlOSwgMHhlMjc3YTYzYiwgMHg0NWI3YTg0YywgMHhiNmYyNDZkZiwgMHg1NGIxZmVlZCwKKwkweGNiNWQ1MmVlLCAweDJkOGM2Y2JiLCAweDg5NGFmNzVlLCAweDFlN2M3MmY5LCAweDNiYmE3MDQzLCAweDI1OTJhNWZkLAorCTB4YTZmN2VmNDAsIDB4OGY3ZGU4M2IsIDB4MDNiODk2ZGQsIDB4MGMwN2VkZWQsIDB4MGUwNDM3MTQsIDB4ZTdlODkyNzgsCisJMHgzYzYwZDM0MSwgMHhlOTJkOTc2ZiwgMHhmMmIxNzE0ZiwgMHhjMzhkMjZjNywgMHhmN2U1YTQ3YiwgMHhkMjVlMjgxOSwKKwkweDlmOTFiM2E5LCAweDU4YzBmM2M4LCAweGIxOWE5M2NhLCAweGFiZGU5NDRjLCAweGRmZTU3Y2E5LCAweDdiYzdhYzdmLAorCTB4MTRlYjVkYTYsIDB4NTVjZDRlZmEsIDB4NmRmZjM3NWYsIDB4MWIyYmQ0MTAsIDB4YzY3ZWU5YjIsIDB4OTQ3NGU3Y2IsCisJMHg5YWU5ZmUxNywgMHg1M2NjM2ViZSwgMHg0NzU5MWMzZSwgMHg5ZmQwYTVmOSwgMHg5ZTU2YmJlZSwgMHhjOTJmZWM3NywKKwkweDBkYWFmZWM3LCAweDQyOGUzODUzLCAweDQ3Y2ZkYTNiLCAweGUxNGZhODU3LCAweGFiMzJjZTNkLCAweGJiZjMwYTI1LAorCTB4YzhjNzdlOGYsIDB4M2VmNDczYWYsIDB4ZTZlZjdkMTMsIDB4ZDZlN2IzNTMsIDB4OGY3NGYxMzUsIDB4NzY3ZDJkMDksCisJMHgxNTU4NzE1NCwgMHhmNGRhYzM4MCwgMHgyOWM5MjVmZCwgMHhmODEyNmVkOCwgMHgwMzJkNmZkYywgMHg3NWQzMmYzZSwKKwkweDkzZTkwZmQzLCAweDVmNWU1ODhhLCAweDkyY2RlZWJiLCAweGEzOGZiMDRkLCAweDdjYTVmNDRmLCAweGQ3MGM4NGIxLAorCTB4ZDc4MDc0YmEsIDB4OTNkNzBjZTEsIDB4ZDlmYjhhNTQsIDB4Yzc5YmZjYWYsIDB4NTkzYTVmMjUsIDB4YjVmNDg4OWUsCisJMHhjYmY1ZDA1OSwgMHgwMzEzY2FlNywgMHhjNTQxNmVmZiwgMHhjMWQxM2QyOSwgMHgwMmM3NDYyYiwgMHg1NDY5ZWVmYSwKKwkweDZjZTc4MmJhLCAweGY0Mzg4M2EwLCAweGU3MTBjZjliLCAweDg1ZTdhMDE2LCAweDU3ZDhjMzViLCAweDNkYjlkMzRiLAorCTB4ODRkYmY2ZDYsIDB4YmEyMDhlNTEsIDB4MjllNDk4ZmUsIDB4ZmVhMDM3OWQsIDB4YTQ0N2ZhNjIsIDB4MTY5ODhlZTcsCisJMHg3Nzc1MmU2MiwgMHgxZGRiMjQzZSwgMHgzNDMyNzA0OSwgMHgzMzIyZmE0NSwgMHgxYWVhN2ZkMSwgMHg0ZmYzYTJlNywKKwkweDk2Yzk5ZjczLCAweGZkMTQzZTAwLCAweGZjZjJmMTNmLCAweDNmYTA0ZmRmLCAweGYxM2VmYjllLCAweDYwNGIzZmZlLAorCTB4YWZmNjQzM2MsIDB4NjhiYzVhYjQsIDB4NThiMzFjNWMsIDB4ODM4Zjg4ZjQsIDB4MzE0N2M1ZmEsIDB4OWQ2MmFkM2YsCisJMHhjNTQwZjQ4MSwgMHg1ZDQ1ODRiYSwgMHg2ZTgwN2YyOCwgMHhkZGE2YmZkMCwgMHhjMGMzMjk5NywgMHhjNjNkMThmZCwKKwkweDE5MmYzZjU3LCAweDVlNzgxNjkzLCAweGJiZjI0MTM5LCAweDM3N2NiZTI3LCAweGM2Yzk0NGZkLCAweDY1ZjMzZDAxLAorCTB4YTdjYjhkYTUsIDB4ZjdmOGViNzEsIDB4NTg4NzJiNzUsIDB4N2JiZjc0ZjQsIDB4ZTg5YmFiZGQsIDB4YzhiY2YwMWUsCisJMHg1MTU3YmM1YywgMHhmODQ0Y2ViOSwgMHhiYzU4YjRlYSwgMHhiZWYxMmJiNiwgMHgwYjFmNDU4MSwgMHhhZTc0YTFlNSwKKwkweDBlMTlmNTRmLCAweGNhOTE0N2MyLCAweDU0YjkxMWY0LCAweDE5MGEzZGQyLCAweGYwYjEzYzNmLCAweDFkMzFjN2QxLAorCTB4YmJlNjczZjMsIDB4ZWZjMDE4N2UsIDB4ZTlkMzhiOGMsIDB4ZjkyYTZkOTksIDB4YzRmMWI1MWYsIDB4MWFiN2Q3ZWEsCisJMHg4ODhmZDkwYiwgMHg0NzEwZjYyNywgMHhlMjlkNjJhYywgMHhlM2UxZTJiYiwgMHhlMjM4ZGE4OSwgMHhiZGM1ZDJiZiwKKwkweGEyMzhlZWIzLCAweDUxODdiZTgxLCAweDQ1ODhlMjI5LCAweDdmNWExNTZiLCAweGJkZmU0MmU1LCAweGVlMzhhMjkyLAorCTB4MThiMjNlM2YsIDB4ZWQyZmEwZTgsIDB4YzVjYjZiZGYsIDB4N2ZhZTY5M2MsIDB4OGJlMjk5MmEsIDB4NWVhZjVmODAsCisJMHg5OWZjOGYzYiwgMHg1ZTFjZTk3NSwgMHhiMDNiZTI2NSwgMHgxOTlkMjM4NywgMHg1OGFmZGU3OCwgMHhhZTcwNDkxNywKKwkweDA3ZjY3MjdjLCAweDdkZTNlNDRmLCAweDgxZjE4OWMwLCAweGEwOWI2YmU3LCAweGUxOWYxODBmLCAweGNlMzk2ODNkLAorCTB4ZDBmNzI1YjEsIDB4ZDY4YjY3NzcsIDB4ZjMxOTM5YzMsIDB4NzNkOTYzYjQsIDB4ZGUyMjY1MzcsIDB4ZGUzMDMyNTIsCisJMHgyZTU1ZmIyOSwgMHhlZjBmYmJiZCwgMHhkODZjZTcwNywgMHg5NTBhZDk3NywgMHhiYjZiMGY3ZiwgMHhmMDIxZjQ4OSwKKwkweGI4MGIzMjdjLCAweGQ5NjMzZTJmLCAweGQ3MjM0NmViLCAweGE4NzkyYzY3LCAweGZlMWRiM2IwLCAweGMyOWY2Y2ZiLAorCTB4NDEwNGZjNzMsIDB4MjZiN2I4YWQsIDB4NWJlZjI3ZTEsIDB4ZjdmOGU5OTUsIDB4MGE3NTRiMzYsIDB4ODkwMmMzZGQsCisJMHg3ZTk3Zjc0NiwgMHhhM2ZkYzE5MSwgMHhjZWRjMTk3OSwgMHhkMjcwY2IyZCwgMHg1NWVhOWUzZCwgMHg0Y2QyZTcyNiwKKwkweGJkZjc0ZTNlLCAweDU1ZTczODc1LCAweDI4MmEzYWViLCAweDEzMTdmOWFlLCAweDk3NmE1N2Y5LCAweGFkMjJiYTQ1LAorCTB4ZjllMzFmM2MsIDB4YWQ3Nzk0MDEsIDB4YWEzYzAyMzcsIDB4ZmM2ZTVjMWMsIDB4YWQ2M2QwNDIsIDB4OTRkNWQyNjMsCisJMHgwNzY3YWU5ZiwgMHg1NjA3ZWZmMCwgMHhhYzljYjg1YiwgMHg5YmI4MDU4ZSwgMHg4NmU5MDEzOSwgMHgxOTM5ZjdlMiwKKwkweGI4ZTI1M2U1LCAweGU2MDI4MzI5LCAweDhjM2I0NDU3LCAweGM3ZmFiMGUzLCAweDBkNjNhYmRkLCAweGZlYzFhN2U4LAorCTB4Mzg0MjBmOTcsIDB4MjM3ZjVkYzYsIDB4OTU1OWVmYWUsIDB4YjQ4MDFhZjgsIDB4YmZlZDAwYWEsIDB4M2MzY2Q1NjcsCisJMHhkOGFkOTc3NywgMHhmMGU1MGUzZCwgMHhmMTgzMmRkYywgMHg3YjJiMDU0NiwgMHgyM2QyNWRlZSwgMHgzYmZlMDU3MywKKwkweDM5NWEzZTQ1LCAweDgxYmJmMWQ0LCAweGI5NzA2NDM3LCAweGRmYjk1MWU5LCAweDJmMDEwNmU4LCAweDc5ZjIwNzQ5LAorCTB4ZjcwMzBhZjUsIDB4NDdiYzgzZTMsIDB4ZTRiZDUzMDEsIDB4ZGFiNzFhNDMsIDB4NzI4ODkxZDIsIDB4ODFiYjdhYjgsCisJMHg4Y2RmODdlZSwgMHg5NzM4MDZlYiwgMHg3NTFmNDkyZiwgMHhkY2FhZTgwMCwgMHg1MWRmNDMxMCwgMHgzNDRlZjJhZCwKKwkweDUxYWFiZDYyLCAweGJkZmZiYWExLCAweGQzYTQwYzg0LCAweDYwYmQ5NjJmLCAweDFjMzlmYTQ1LCAweGZhODM5YWQ5LAorCTB4YTQ1ZTZiYTksIDB4ZGEyOWVlOTMsIDB4OGJlZWRmYjgsIDB4YWY3NDM5NjUsIDB4YzNhZDg2NjksIDB4OTk2NWRmODIsCisJMHg4ZWRiMjBiMSwgMHhhZGEwZmM3MiwgMHgwZmNmODhkNSwgMHhiMGVhNjczNiwgMHg0NmQ5YjJlZSwgMHhiZmE1ZGQ2MSwKKwkweDg4NWZlYTkyLCAweDQxZmExNzdjLCAweDllMzg1MmJhLCAweDFiNzY5YWFiLCAweGRkMmZlZmYxLCAweGQ0ZTJlODJiLAorCTB4NDFmNmVmYjMsIDB4NDY3NTUwM2YsIDB4MmZkNDFmNDcsIDB4NTI3ZDA3NDAsIDB4MjhjZmNlMTEsIDB4OWE2YjlmYTQsCisJMHhhNGJjMWU3OCwgMHgwM2E0MWE4MywgMHg4MjM5YmJlMCwgMHhiZGI2NmEwZSwgMHg0M2YyMTc3MCwgMHgzNzNmZTIwZCwKKwkweDllODA4ZTk0LCAweGY5ZmRhOWRiLCAweDdmMThlMzBkLCAweDQ0ZTkxZGJmLCAweDJmYTgzM2VhLCAweGNlM2ZhMDMzLAorCTB4MDU4YmViYzgsIDB4MGM3ZGExZmUsIDB4ZTAwZWY3NmYsIDB4ZjlkZDc1ZjksIDB4ZDA3YzQxMDgsIDB4NjZkNzdlMTMsCisJMHg0YzNlMDRlOCwgMHg4YWQ3NzcyNCwgMHhkOGFlNzZmZCwgMHg5ZGZjNDU2ZSwgMHgxZWY3NzY3YSwgMHgzZjU0Yjc4YywKKwkweDExZGFkYTBmLCAweDNjMDQxZjg2LCAweDU2ZmY3MTZhLCAweDE5ZDkzZjVhLCAweGFiNWZiOGI1LCAweDc0ZGRmZjdmLAorCTB4OTZiMGY4MmYsIDB4ZmRjOWZkZjEsIDB4ZmVjNWVhZDYsIDB4ZmVmMTczZTUsIDB4MmFjZmIxM2EsIDB4YWRiNWUwMjYsCisJMHhjMTNiZTcyZiwgMHhmNGM3Yzg2NywgMHgzZmIxMjFkZCwgMHhiYmY4M2Q4ZiwgMHhmZWM1YmJiYSwgMHg2Y2M5NDQ5YSwKKwkweDBmODQ1NmNkLCAweDBmZTUxN2UyLCAweDI4Y2I4ZmQwLCAweDM5NzQwOWU1LCAweGU1MDM2NWI1LCAweGM5N2M0YmY3LAorCTB4ZDdlZmJmZjUsIDB4OTNmYzJlMmIsIDB4OWQ4ZjEyNTQsIDB4YjZmNzdjM2QsIDB4YTFjOWYwNDUsIDB4NzYzMjkyZmIsCisJMHhkOGJlZmMwMCwgMHgyNDBkOWY0YywgMHhjYzA3ZDU3YSwgMHhjZTQ2ZTkyNywgMHg0OWE3ZjQ1NywgMHg2MWJlZTJkNywKKwkweDVmMWM1NmZjLCAweDFiZDA3YmNlLCAweDBlNzFjN2FkLCAweDcyMWZjZTMyLCAweDhiMmY5MmZkLCAweDNiNWRhN2VhLAorCTB4NGVmZDhhZDgsIDB4NWVkMWIyNTksIDB4M2Y3Yzc4MTEsIDB4YmJlZjQ2YzMsIDB4Zjc4MDZlZDAsIDB4ZjIxNDNiNWQsCisJMHhlNzEyMWY1ZiwgMHhiZGY3NDNmZCwgMHhlMDFmMmQ2MCwgMHhjNTc3ZjdhNywgMHhlMTlkMjViYSwgMHhlNGM5ZmEwZiwKKwkweGI5ZGFmNzdhLCAweDZlYmI1ODNmLCAweGJhZTQ4NzI5LCAweGUxYmZlZThiLCAweGViOTc2YzVhLCAweDIwNTFmOGM3LAorCTB4NGEzODRhOWQsIDB4ZmFmNzk1N2EsIDB4MzQ0Yjc0YjQsIDB4ZGFhYWY1MjcsIDB4YTZkNzdkMzMsIDB4OWRmY2EyMWQsCisJMHg3OGVkNzY5MCwgMHgyYzNhM2VjMiwgMHg5ZWJiY2RmMiwgMHhlNzdkZjk1NiwgMHg0MWVkYzk2NSwgMHgzMzE4OGVmNywKKwkweDI1OWZlYTA3LCAweDE1YjZhZWYzLCAweDQ5YjczYzYyLCAweDUyMWU3YmExLCAweDRhY2ZjMGFmLCAweDkyM2U4MDdkLAorCTB4ZGVmMGMxZjYsIDB4MzZhNTdmM2MsIDB4ZjEwMjc1ZGUsIDB4NjNiYzc1NTksIDB4NDQ5MjdlMWMsIDB4N2Q1N2E1ZGEsCisJMHhhMGM2YWFkZCwgMHhjZjFiNmFmZiwgMHg1Mzc0OTM4MywgMHhmODlkYjI3NSwgMHg5M2RjNWFhMSwgMHhlZWYxNWIyYSwKKwkweGY3NDg2MWM0LCAweGNlMjgxYjRmLCAweDU4ZGY3NjUzLCAweGIzZmJkYTIzLCAweDhhMWY0ZDM3LCAweDEyN2JjMGUwLAorCTB4NmM0ZmRmMjgsIDB4ZTA0NzkyMWMsIDB4ZWJjNGI2NjEsIDB4YzZjNGJlZjEsIDB4YmZjN2FmNDcsIDB4ODc2MzNhNWYsCisJMHhjMWExZGY0YSwgMHhjYjhmOTA3MSwgMHg3ZjIzYzhlZSwgMHhjZWM4ZTFlYiwgMHhhZWQwMjM4OSwgMHg0MzZhYjVmZiwKKwkweGE2ZTQ3ZWJiLCAweGZmYjA4YjIxLCAweDU4ZWY0YjQ4LCAweGM2ZDA3OGZhLCAweGY0YmJhYTM4LCAweGE0MjdhNDMxLAorCTB4MDNmMzJjMWQsIDB4OTBiZGM1ZWIsIDB4YWY5Y2RlZWMsIDB4OGE5Nzc1N2EsIDB4ZWZhYzBiYzgsIDB4YWVmOWYxODMsCisJMHhkZGY0OTEwZCwgMHhhM2EzNTJhOCwgMHhkYmU3MTViOSwgMHg4ZWU3NDQ5OSwgMHgyNTI2Mzg1YSwgMHgyYjllZTlkYiwKKwkweDhjYjM2OWQ5LCAweDk3MjUyMjJjLCAweDQ1MzAyM2RhLCAweGM3NDM3NWY5LCAweDVlNGZhODFkLCAweDE4MzJjM2JmLAorCTB4ZDRjYjhiYmYsIDB4YjljYjQzZjMsIDB4OTBlM2NkN2QsIDB4NjFkZmMxNzEsIDB4ZWFjOGViOTIsIDB4M2I1N2U5Y2QsCisJMHgyZjdmN2M5ZSwgMHg3NGVjMmI5ZSwgMHgzZmRlOTE5ZiwgMHhlYmU5ZWNiMSwgMHhkODllMWY1MSwgMHg3ZGM3NjM5YywKKwkweDQ5MTlkYjFmLCAweDE5OGUwYmY3LCAweDc4ZTdiZjgyLCAweGI0YzJmN2E5LCAweDNkZTRhOWY3LCAweGMxZGVmY2Q3LAorCTB4ZmJhNDljZjYsIDB4YjljYmRlMGIsIDB4OThmMmQyZWMsIDB4NzQ2NjJlNGUsIDB4MDY1Y2ZjNGYsIDB4ZThlNGZlZTMsCisJMHg3ZTYyYjZlZiwgMHhjOWEzNDU2MSwgMHg4ZTY0Zjc4NiwgMHg3YzYzZmQyMCwgMHhkZjRhYmI2YiwgMHhkZmJiYTIwMSwKKwkweGRiMjNhZjgwLCAweDcwM2VlOGYzLCAweDVlYmNjN2M1LCAweGYwZjhhY2QxLCAweGMzZmI3MmZlLCAweGMyZmU1M2Y3LAorCTB4ZjEzN2IwNGMsIDB4M2RiNzc5NmEsIDB4ZWJlMWZhYmQsIDB4MzhjZTBkOTEsIDB4M2JmMWNiM2QsIDB4ZjMzNjY3MDAsCisJMHhlZjkwOGI3YywgMHg3NWJlYmMzYSwgMHhmZmUzOGE0ZiwgMHhmZDJjZmRiZiwgMHgwNzdiZDMxMywgMHhmMDkzNDdkZiwKKwkweDU3YWFlNzk2LCAweDcyMGEyZTgwLCAweDcyZmJmMGZkLCAweDlmYjIyY2YxLCAweDUwZjYyZTRmLCAweGI0Mzk1YTc5LAorCTB4YjNkMjI0NmEsIDB4MTVlZTg2MjUsIDB4NTFlM2I0YmMsIDB4NTM3M2JmMTUsIDB4NzlmMDZkYmQsIDB4MzA4ZjFmM2MsCisJMHg5ZmY3ZDBjNywgMHg5MGJjNWNiZSwgMHgxNzI3OWE4MiwgMHg4YTNmODlkNywgMHgxNWY4NTRiNiwgMHhiNTVlNTQ3YywKKwkweGZiZGU4ZGFkLCAweDBiNWU0NzcyLCAweGQ5N2RlYmRlLCAweDlhYzVjMzFjLCAweDNiZTgyMGFiLCAweDNkYmYxMjk5LAorCTB4ZmI5NjU3ZGQsIDB4MWNkN2ZjZmEsIDB4OWZkZDcyY2YsIDB4YzU2ZTllNmYsIDB4MjFmZGI1N2QsIDB4ZTIzODY1YWUsCisJMHg4NmM2M2EzNywgMHhjOGE1NjA3NiwgMHg4NmJhMzkyZiwgMHgyM2M3ZDlkYiwgMHgxOGFiZmU2MiwgMHhlZDdjN2NmMCwKKwkweDBlZmM0NDk0LCAweGE5YjZjY2QxLCAweGM1N2I2M2Q3LCAweGU3ODZjNTRlLCAweDQ5Y2VlNzAzLCAweDdkY2YzYzU2LAorCTB4ZTJiNGVmYTYsIDB4ZDZjZmFhM2QsIDB4M2U1N2ZiYzgsIDB4MjM3YmJiZmEsIDB4ZDgyOWIzYzYsIDB4OWVhYjQ0N2YsCisJMHg4NDI5MzIzOSwgMHhmYzMyZjQ0YywgMHhjYmVlOWVhNCwgMHhlNGVkMDE3ZSwgMHg0NTFmMzkzZiwgMHg4OWY4MTNmZSwKKwkweDk5OTI3Y2MzLCAweDRiYmY3MjJmLCAweDljNTdmOWY3LCAweDdkOGE0NmZmLCAweGNiYjZmN2I3LCAweDE3YjUwNmY4LAorCTB4NjNmNmYwMTUsIDB4ZDA5NmI3NmIsIDB4NjhkZTRmZGYsIDB4YmZiYWUxYjAsIDB4ZjFhMDY4ZGMsIDB4NGRiOWMwZTcsCisJMHhiZTNkZWIwNywgMHhiMDgzOWY5OSwgMHgxM2U4ZTc4ZSwgMHg2Nzc5Zjk5YiwgMHhlZjNmMzM0ZSwgMHhiODMzY2Y1NCwKKwkweDYwZDJmZGY4LCAweGU4MGEyY2JhLCAweGViMmRkZjQ3LCAweDczMjNiYmUxLCAweDczN2Y3YzVjLCAweDdlZTI3ZjQwLAorCTB4YjFiZjQ0MmYsIDB4OWZlZTk5YWMsIDB4YTkzZTZhNWQsIDB4YWFmZjdlOTYsIDB4NzRkZDE3OTEsIDB4MDhiZDEzZGIsCisJMHgyM2ZmMjJiOCwgMHg5OGJhNGFkZCwgMHhmNWM3ODZiMywgMHgwYjgzY2RlZCwgMHg5ZDI0ZmU5MSwgMHg1ODAzYmY2OCwKKwkweDNiZmM2NDZmLCAweGZhMjhiYWIyLCAweGIzMjRmN2VlLCAweDYyZmE4MGMzLCAweDE4ZTc3YzRhLCAweDA3NWY0ZjA0LAorCTB4OTE2YWFmOTcsIDB4ZTRmNzg1Y2UsIDB4ZWMyOWJkNTgsIDB4MTVkZWM0NzcsIDB4YmMxYTc4ZjIsIDB4N2FiYmY3NGIsCisJMHhjZmY3ZjhkYiwgMHg1OTMxN2RjNCwgMHg0NzRhYmU4MiwgMHhkYTI5M2U3ZCwgMHhiYTAzOGRmZSwgMHhmMmZmYWU3NCwKKwkweGY1ZDAzZDNhLCAweDNiZjY5MWE0LCAweGQ3ODA5ZGIyLCAweDdhZjM1ZmY1LCAweDE2N2I3ZDllLCAweDdkZWYzZmQ0LAorCTB4ZWMzZDNhZjYsIDB4ZjY5NWQyNmYsIDB4MmZhODA2MjEsIDB4NzVjZGYyNTksIDB4YzliOWUwNjMsIDB4M2JkODNhZTEsCisJMHg5YjEzOWU2MCwgMHg3ZjcxZDI5MiwgMHhkYjA4N2VkMCwgMHg4ZTdhMjdhNywgMHhlZTJiNTk2MCwgMHhiYTU2OWQ4ZiwKKwkweGY0Y2MyZDA2LCAweGE3N2I3ZmY3LCAweDBlNGJlMGU1LCAweGMwZDNiZDdmLCAweGE3M2JiYmU4LCAweDg3ZjVjYjdiLAorCTB4ZDcwZTlkMmYsIDB4YTEwOWRlYTksIDB4ZGQ4Y2U1ZWQsIDB4NWU3Y2Y5NDcsIDB4N2UwNzZmN2UsIDB4Nzg4OTExZGMsCisJMHg1ZGQzOGFhZiwgMHhkM2M3YmNiOSwgMHhlM2M3YjlhMCwgMHhlNGQ1ZjdlNCwgMHg3Zjc5MmFmZCwgMHhmZGZmNzJlYSwKKwkweDcyOTdiNWIzLCAweDAwZmZlY2ZmLCAweDRmYjJmMzY5LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAorCTB4N2RlNWZmMDAsIDB4NTU1NDc0MGIsIDB4NTViOWU4OTYsIDB4MmE0OTNlYjcsIDB4NTQ4NDI1NDksIDB4YWE4NGE5MjUsCisJMHhjMDkwMmI3YywgMHgzMTBjN2MyNSwgMHgwNDAzZTU0OCwgMHg2YTI4NTg4OCwgMHhhMjA1YTBkNCwgMHgwMTE0ODI4MCwKKwkweDU1ZjQ3NDFkLCAweDlhN2MzMDYxLCAweDE3OWY4ZWU5LCAweDEwMmQ0NjIyLCAweGRkNzg3MTk1LCAweDg2NmRiMWQxLAorCTB4MzIyMDUzOGYsIDB4YjQwZTlhZmMsIDB4ZDM4Y2ViNjMsIDB4NjhkMWQwMWQsIDB4MzgzMTFiNjMsIDB4NmYzNjBjZjQsCisJMHg0ZGNlN2RlZiwgMHg4MDJhNTZlYSwgMHg2ZjdiZTdiZSwgMHhmNjVlOTdhZCwgMHhlZTczOWY2MSwgMHhmZmIzZWNmOSwKKwkweDVmNWJkZjY3LCAweGE1ZWIyYzE5LCAweDBmMjRjNjY0LCAweGExNTNhYjYzLCAweDYzNTk1YTc0LCAweGZmN2I5NDE5LAorCTB4NjhkMmNmZTksIDB4YWM4MzlhYzYsIDB4YzE4ZjJlM2IsIDB4ZDNmNWEzNWYsIDB4N2NjZjUwNTEsIDB4MmU1MDRiYmEsCisJMHhjZDFhNDg0YiwgMHgxMzk5NjBjNiwgMHg5OTZmZDA2MiwgMHgxMmFlYjE4OSwgMHg2ZDNiMjZlOCwgMHgxMmQ4YzJjYywKKwkweDAxOWRmZTA5LCAweDE5Y2FmOWZmLCAweDk1NmM2NzRiLCAweDQ0ZWRmZTE1LCAweGYwODc0MmI4LCAweDdmNDY2NjgzLAorCTB4M2Y5ODA1OWYsIDB4MWZkOGMwZGYsIDB4MzkyNTc0NGYsIDB4OWQ5ZDhjZjUsIDB4YmIwYzJlMWQsIDB4YmM2NWZiMTgsCisJMHgwMDljZTZjZiwgMHg4ZWNkMWRlZCwgMHhiZWM2MzRhNiwgMHhkNGE0YzM3YywgMHhkMDllZmY0MywgMHg2MGY5MjdkZiwKKwkweGU2N2FhNWZjLCAweDZkOTI4NGVmLCAweDI0ZDhjZTFmLCAweGMzZWEyZjI4LCAweDYxZGZhMDUzLCAweDhkYjZmMTU3LAorCTB4YTljYmJjZjAsIDB4M2Y5ZTBjNjMsIDB4ZmNlNzBhZWIsIDB4ODJjNjc4ZjUsIDB4MzJmMjkzMmUsIDB4MzI3NzdlYTMsCisJMHg5ZjFlZWI4MCwgMHg5ZGZiMWMzZSwgMHhmZTVkN2Q3ZCwgMHg5MzZlYjAzZCwgMHhlYzEyNThjYywgMHg1OThjMDY3YiwKKwkweDAwMzA3ODBlLCAweDA3YzMyZmFjLCAweGI0MGUzNDQyLCAweGJlYTA5MzA3LCAweDBlNzRmNWM1LCAweDJmMzA3YzIzLAorCTB4MGRkOGM4OWIsIDB4MDZlYmVmOGMsIDB4ZjExZmJjMzksIDB4MTk2NDk0YzUsIDB4NmY5YjM3ZjcsIDB4MzI4M2RiMGYsCisJMHgzMzMzYTM4YywgMHg5OGJiYWUwMywgMHg0ZDNmNTg3NSwgMHg4ZWIxOTgwMCwgMHg3ZjYwYzM0YiwgMHgzMjYzYzA2NiwKKwkweDI0Yzc4MDk2LCAweGExZWFhNmM2LCAweGU5YWZhYzEzLCAweDA5OTBmYTk3LCAweDc4ODRkN2Q2LCAweDg1ZDA3MDE0LAorCTB4ZDcyYzdhMjMsIDB4YzU4YmY4YzMsIDB4YmM4ZWNiYmMsIDB4NThjMWM0NmIsIDB4ZWIwN2ZlMTAsIDB4NWRlNjIyNTksCisJMHgzZDc3NzFkYywgMHg5MDkyY2I5ZSwgMHhjMGI3NGNlMSwgMHg3ZmZhMjVmNSwgMHg3MmM3OWQwZiwgMHhmMmZlZWZkMSwKKwkweGUyOWM0NmFkLCAweDdlZGExZGZlLCAweGFmYTZkOWNiLCAweDUyZmNmMGY1LCAweGZkYzQ2ZGQ2LCAweDZhOGNlYjJlLAorCTB4MGNmOWE4ZWYsIDB4OTc3Y2JiZDcsIDB4OTlkZWJlYjYsIDB4YzI3NDg2OTgsIDB4OTdiMWIyYzYsIDB4ZTc0ZDU0ZjQsCisJMHg5OWY0NDhiZCwgMHhjYTc0NmZhYSwgMHg2NmUxOWZiOCwgMHgzNzEzMDRjNSwgMHhmNDQ3OWYzZCwgMHhiMDBjZGVjMiwKKwkweDYzYWM3ZWM4LCAweDhiNGZkMTE4LCAweGIxZTc0ZjRiLCAweDljYzQ5NzY0LCAweDdlYmIxOGUzLCAweDQyNzMxNjU3LAorCTB4NjFhZWZkNTMsIDB4Yzg1ZDI2NTQsIDB4NWZjZmZhYTAsIDB4NTdkZTM2MzksIDB4ZDc1ZTcwMzIsIDB4YzZhYjZhYmYsCisJMHg2YWZmNWRmNSwgMHgzYWVhOTUxMSwgMHg0ZTFkMDQ5YSwgMHg4Njc0OTdkNSwgMHgyY2U3MWQ2MSwgMHg5YjgwMGViMCwKKwkweDgxNjJjMDhlLCAweGQ2NmU5YTdlLCAweDk5ZTExODg3LCAweDU3YmZiMTk5LCAweDU5NmJjNzJjLCAweDQyNGZhNWRmLAorCTB4ZmQ4YTBlNTgsIDB4M2EyNDk3NGEsIDB4MWYzYzY0ODQsIDB4NDMzZDYxZWYsIDB4MDMxZTYyN2EsIDB4Nzk5OTNiYjUsCisJMHhhMDVjYTVjZCwgMHgzOThlYmIxYiwgMHgyNGRmZTA2MywgMHgxOWNlMmZjZSwgMHg4MWVlOWNjZiwgMHhmYzU4Mzk3NiwKKwkweDg3NTg0YWIzLCAweDA5NDFhZTYxLCAweDVjNzM3YjQxLCAweDMzZTQzNmQyLCAweGU1NzRmNDE2LCAweGUyMGQ3M2MzLAorCTB4NGUzOGFlYjksIDB4NTRlZTA5MzcsIDB4MWQyYWYzY2QsIDB4YWRmYTJhZGMsIDB4MTg3NjlhNGIsIDB4YjNjMWIyZTksCisJMHg1MTIxZTg4OCwgMHhjN2FjZDRjOSwgMHg0MDZhNWZhNCwgMHg2N2Q1YjlmYSwgMHg2MjNiYTRmOCwgMHg1ODVmYTIxYywKKwkweDI5NWUwZGM3LCAweDczNzhmYzg0LCAweDUwZGRiNjgzLCAweDQ0YWQ3NWY5LCAweDhlNDdkNDI1LCAweGZiZjZkNWU3LAorCTB4ZDAwM2QyMjksIDB4NzE3ZTEwM2IsIDB4OWMwYzNkMjQsIDB4YzNhM2M1ODMsIDB4MTIyNGYwNzMsIDB4YjljY2NiYmQsCisJMHg1YmUwMTJiOSwgMHhlZTE4MWIwZSwgMHhmN2NmMTRkZiwgMHg5NzMxMGU3OSwgMHgwZjgwZmQ4NiwgMHg4ODc1ZTI2MCwKKwkweDJlNGZhODE3LCAweGM1MzdlMmQ3LCAweGIwZTdjNWEzLCAweDg2N2UyZDNhLCAweGI3ZmJiNTdiLCAweGRhNmFlNDM1LAorCTB4MzUyMzdjMzMsIDB4Y2I4YjU5ZWQsIDB4YmZiNjcwMzQsIDB4YzQ3ZmQzNDIsIDB4ZWMwZDZhZWEsIDB4ZjRkNGNlMGEsCisJMHhhMzdmNWJjZiwgMHhiZDY4MmUwNiwgMHhhOGJmZDM1ZCwgMHhiZGE2ODE3ZCwgMHhhNjlmNzQzOCwgMHgyNjhlZDQ3ZCwKKwkweGY5ZGE1YzBkLCAweDk4ZmZhNjg4LCAweGRhNmI4ZjVkLCAweDZhMzc4NmM3LCAweDdlMWRjN2RhLCAweGU4NGYwMzRhLAorCTB4N2ZlOWEyZGEsIDB4MzRkYjA3Y2QsIDB4NWZiYTkzZWQsIDB4ZGI1ZmI0ZDMsIDB4OWUwNjg2ZjMsIDB4ZDM1YmJiZGMsCisJMHgwMzg1Y2E3ZiwgMHgxZDhhYjgxYSwgMHgzMWFmZjRkMywgMHg0ZjAzNTZmZiwgMHhhNmFiZmViNSwgMHhjN2ZiNzRmZiwKKwkweGNlMTlmNjlhLCAweDY3ZGE2YTNmLCAweGQyZDFiZmI5LCAweDkzOTczYzZiLCAweGE1ZmYyYmQ3LCAweDkzNTllZTc5LAorCTB4NWY1MGRmZWYsIDB4ZGQ5NTRiMzQsIDB4ZWJmNDg2NDEsIDB4MzViYTNlMjQsIDB4MDE4NGE3NGQsIDB4OTcyYTgzZmUsCisJMHgxYzllMWQwNCwgMHhjMTM5MjU2MSwgMHhiNzhlNTlmMiwgMHgzMmIwZTkxNCwgMHg2ZTdjN2M4YywgMHhlMGYyNDQ5NywKKwkweDI4YmQyOGFiLCAweDkxZWJkMWZmLCAweDRhZmQ5ZGEwLCAweDIyNzY1ZTUyLCAweGM0NWQ0MWRkLCAweDMzMWUyOWZjLAorCTB4MzlkNjIzOTMsIDB4ODFhYWNlYWMsIDB4OWFlZDdiODcsIDB4YTcwNmI2ZmUsIDB4ZTdjMzNkYTYsIDB4MmQ2N2I0ZDYsCisJMHhiNjcwMzQ1NiwgMHg3ZmQzNWNiZiwgMHgwNjhmNmFjNCwgMHgzNGViMDU3NiwgMHg3YmQ2ZjNmZCwgMHg2YjQxNzAzNSwKKwkweDUxN2ZhNjgzLCAweDVlZDM0ZmJiLCAweDY5YWM1YTFjLCAweGFmYzNiNTFmLCAweDU3M2I0YjgxLCAweGQ5OGZmYTZiLAorCTB4OGZiNGQ0MTUsIDB4YjRkN2FmMGQsIDB4YWFkYzNiOGYsIDB4YjU3NDI3ODEsIDB4ZjM1ZmZhNmIsIDB4M2VkMzQ4NDEsCisJMHhhNjg3N2JhOSwgMHg0ZTllZGFmZCwgMHg3N2I5M2MwZCwgMHg5NGZmYTY5NywgMHg1YzBkNjEwYiwgMHhmYTY4OGVjNSwKKwkweDZhNGY5OGQ3LCAweDBmZDZhOWUwLCAweGRiYTdmZDM1LCAweDY3ZGE2YjRmLCAweGI0ZDczZjM4LCAweDJjZDA3NmFiLAorCTB4N2FkYWQ3ZjcsIDB4YWY1ZDE3NjEsIDB4N2NmMzU5ZmMsIDB4OTBjM2RhYjAsIDB4NDg2ZjgyM2UsIDB4ZDYxM2IzNGEsCisJMHgzZmUxMDJlYiwgMHg3NzdjZTQ5YywgMHgyOGVkMWU5YywgMHg4YzE0MTgyZiwgMHg0MWFkMjkwMSwgMHg0MjBjOTJmZCwKKwkweDQ4MGFlOTBjLCAweGUyYTYzNThjLCAweDIwYWM0MDI4LCAweGMxNTU0OWI3LCAweDRmNjhjOWYzLCAweDczYWE5MDAwLAorCTB4MWZhMGZjYjksIDB4ZWI1YWQ4MTMsIDB4MWJiMjY2YTcsIDB4ZGY0MDk3MWMsIDB4MjliZmMyNWQsIDB4YTA5NDRiODMsCisJMHg4NWViYWE5ZiwgMHg0ZWExNjZmOSwgMHg3MjZmM2EwMiwgMHg1ODJlM2NmOSwgMHhhZjlkN2RjZiwgMHg2ODYyY2I0ZiwKKwkweDcwNWIwNDI3LCAweDkzMDdhMDFkLCAweDllNmY0MWJiLCAweDc5Nzc2Mzg4LCAweDM3OGYwNjRiLCAweDg5NzgwY2MzLAorCTB4NWM0OGVmOTgsIDB4MzJjY2EzYWIsIDB4Y2MzM2ZjZjQsIDB4ZmY3ZmE5NjcsIDB4YWUzZTA2YjgsIDB4OGE2YmZiMDQsCisJMHhhMGE3ZmYxOCwgMHhmYmIwNjVlZSwgMHgzN2MwMDM1YSwgMHgxNTNkOGMwNSwgMHg0Y2ZjMTJiMCwgMHg1YjcwNGVjMCwKKwkweDdiNjU0OWMwLCAweDk2ZTU0ZGMwLCAweDFkZWQ0MjgwLCAweDVmODI3MjgxLCAweDBlMDg3ODA4LCAweGRjYThlYTA1LAorCTB4ZmQ1MmYwMTYsIDB4YzEwMzQwZjYsIDB4NTQ3YzA0YWYsIDB4YTYyYzA4ZWUsIDB4OWY4MGI1ZjIsIDB4NTYwNjc3ZGEsCisJMHg0MGYzZmMxMywgMHhjMGNlY2E5MCwgMHgyMzdmYWE3YSwgMHg5YmYwNGFkMCwgMHhkZjgyNzY4MSwgMHhkY2E4ODQwYSwKKwkweGU1NDFkODE1LCAweGI1Mjc0MGVlLCAweDIyZWMwZGVmLCAweDk4NDBlZGY4LCAweDMwZTA3MGUwLCAweDVkMDIwN2MxLAorCTB4N2MwYzFmMDQsIDB4NDBhMWYwNDAsIDB4MDM4Nzk1MzcsIDB4MGQxZTU0M2QsIDB4ZjFmYjUyZjQsIDB4MDc4MjA1YzAsCisJMHg1NzZiNGJjZSwgMHgyZTU3NjEzMywgMHhkMmMwNzQxMiwgMHgyZjc5M2RiOCwgMHg4NWY2NTIzZiwgMHhiYjQ2MmQ4ZSwKKwkweDQzYTA5MTc3LCAweDg3OTgzNTQzLCAweGNjODY3NzQwLCAweDJlY2Q2ZGMyLCAweDEzYTA2YTNjLCAweDcxYzlkMTM3LAorCTB4OTZhZjJmYjQsIDB4NDA3MGQwNGUsIDB4MzM1NjBkN2EsIDB4NWE5YmQyMzcsIDB4YzllOTU0YjYsIDB4OTBhZTBjZmUsCisJMHhiYjczMmY0MiwgMHgzMzZmZWI4OCwgMHhiNTM3ZjU1MywgMHg4NTI4M2UzNywgMHgwNzliOWVkMCwgMHhmODExYjI3NiwKKwkweDlmNjEyM2U2LCAweGU1YzcxNDdjLCAweGMxYmYzOWY1LCAweGEzNWY3NjhkLCAweDY2YzBhZjE0LCAweGIyNzdmZTAxLAorCTB4OGMyZmUwM2IsIDB4NWVkNzdmYTQsIDB4OWZiNDU2ZDMsIDB4YzIzNWY1ZDQsIDB4ZTcxODNhMzgsIDB4NWEyZWVjYmYsCisJMHg2YzNiMjM1NywgMHhiZDQwZjVjMCwgMHg3MmZjMGY0NywgMHhlMmRiZTZjNiwgMHgyZmJlYmEwMiwgMHgyMjM0MTc1YiwKKwkweDg1NDI1OTEzLCAweDhjYzY0NGRlLCAweDQ4ZjNkZjc2LCAweGY3ZmNlN2U3LCAweDE3YzFjMjFjLCAweDljNDI5NTU5LAorCTB4Nzg1MzdhZTcsIDB4N2YzMGFkZjgsIDB4YjJiZDExZWYsIDB4NWUzNDM5Y2QsIDB4MDBjZWI3OTYsIDB4ZjY5OTdkZTEsCisJMHhhMDc3M2ZiNywgMHgxN2Y3NWYxZCwgMHhlMWNmMGZiZCwgMHgyMWIxMjE4NCwgMHhlOWRkNzQwNCwgMHgzYWNmODg5MiwKKwkweGQ5NGQzYTVkLCAweDAyZmRmNzY2LCAweGEyNmRmOWQ3LCAweGEwMWQ0ZWZmLCAweDU2ZWJkYmYyLCAweGI2MTJiMmJjLAorCTB4MjBhMmI4ZDQsIDB4ZjA1NWVkMTksIDB4NWY2ODBjMGYsIDB4MDM0ZTYxY2YsIDB4OTg5Yjg3Y2EsIDB4ZWExYzVkZTcsCisJMHhmODIzZTY2NiwgMHg1MmE0MTY1NiwgMHhlMTc2ZjliNiwgMHgyMTYzNmViZSwgMHhhNjE1N2Q4MiwgMHg4YWZiNTg5YywKKwkweDM4M2JkNzVlLCAweDc1MmM3MGQ4LCAweGRkOTBmMjlhLCAweGZiYzcwMDc3LCAweGViNDNkMTM2LCAweDdhNjkzMTNhLAorCTB4NWQ0YmVlMjEsIDB4NDljMzM5OTcsIDB4ZGViMzY2ZmQsIDB4ZGY3ZDcwMTcsIDB4NTNmYWZiZWUsIDB4OWQzMDZmMjksCisJMHg2MWY0ODhmYywgMHgzZmIwNjk4MSwgMHgzNzc5YzIzMywgMHgzOGUwZWYwMywgMHgyMTRiMGZjZCwgMHgzZTk1NzNhNCwKKwkweGE3NGNjMTFhLCAweDdhODUxZmYxLCAweDgwNWU5MjI5LCAweDRiN2ZkMDRlLCAweDkzOTljZGViLCAweDRkZDJmNDQ4LAorCTB4M2U5MjZmZjIsIDB4ZmE3YjA0NjgsIDB4Mjg1NDJlODQsIDB4OGM0ZTg5ZTksIDB4NTE3M2FjMTIsIDB4ZWU0OWQwMWEsCisJMHhjMGYwZjRkMCwgMHhlNDIzMjg3YSwgMHgxN2Q5ZDAyMCwgMHhmZTlmZGUzOCwgMHhlMjM3MWFlMSwgMHg5M2RiZjk2ZCwKKwkweDY2Yjc4ODljLCAweGQwMDc5YzFkLCAweDllYThmMDczLCAweDQ0MjYwNGVjLCAweGQyZGFmZWJiLCAweGIyMDdmOTEwLAorCTB4YzUyOWNjYTIsIDB4NzE3MmUzNzMsIDB4N2VhZDllYmYsIDB4NGRkYzg2M2QsIDB4NzRmNGU1YzgsIDB4MGJhODZlYzIsCisJMHhlZjljYjhkMSwgMHgyZTdkNzZkNSwgMHgyZTdkNDczZiwgMHgxNWE2ZGYzZiwgMHhjM2Q1MmQ5ZiwgMHhmODFjNGZmYSwKKwkweDhkMmNlOGRjLCAweDNmZDU4ZmIxLCAweDgyM2YyODc5LCAweDNhZWY5N2FlLCAweDdlODNjZDNkLCAweGI5MmVlYjE3LAorCTB4YmVhMDcxMzEsIDB4ZDJhYmNjNTAsIDB4ZTg5OGRlOTEsIDB4NWM4OTZhZGIsIDB4Yzc1ZDNmNTcsIDB4YTc1ZDIyZTcsCisJMHgxMWU3NWQwMCwgMHg3NjhhN2Y1ZCwgMHgzMzkzNmNmOSwgMHhiYjI4NTZmOSwgMHgyODYxMzUwMSwgMHhjOTVhMmY3ZCwKKwkweDE0YzA1YzdmLCAweDJmMzIxNzJhLCAweDBjODA4Yjk1LCAweGMxYmQ4ZTkwLCAweGY3ODg4ZDI3LCAweGQ1Mjc1OGZiLAorCTB4Nzc3ZTUwM2YsIDB4YmRmNWQyM2EsIDB4ZDlmOTFmM2EsIDB4ZDUxNzU5NGIsIDB4YjViZDY3MmYsIDB4YWYzN2I0NzgsCisJMHgxZGFlZjM1ZiwgMHhlYjUzN2Q1NiwgMHg0NDkxNTM5MywgMHg3ZmNkMGM2ZiwgMHhkYjM5Y2IxNywgMHg0ZTgzNGZhNSwKKwkweDVjZWM5M2UyLCAweGU0Yjc0N2MwLCAweGU2MTMyMjdmLCAweGQ1Njc3ZGJmLCAweDNmNTA1OTEzLCAweDg1Y2ZjZjViLAorCTB4YTJlN2UzMWQsIDB4N2RlODkxY2EsIDB4ZTAxNDVmMDMsIDB4NzhhNmRmZjMsIDB4YTRmYTVmNjgsIDB4MzQ1ZjBkM2EsCisJMHgxMjNjY2UzZSwgMHhjZmJiZDM4YywgMHg4YWU2ZGExNCwgMHhmYmYyOTNlMCwgMHhmMjg1OTBmZiwgMHgxM2JkZWU0YywKKwkweGRiZjk3YmNmLCAweGVmM2M1NGE2LCAweGZiZDcxOGZiLCAweGFmOGQ0NzkyLCAweDExOWVmYWE4LCAweGUyY2ZkZmJkLAorCTB4ODVmN2VjMTUsIDB4YjIyZmVmYTAsIDB4MTdmN2QxMTksIDB4NjU4YTM4MTIsIDB4Y2IyODc2MDMsIDB4ZjJjYmQ5ZjEsCisJMHg3MmY2ZjQwNiwgMHg4OGQxY2VkZCwgMHg5NWViZDAyNywgMHg3ZGY3MGU3OCwgMHhkNjMyZDlkYywgMHg5NDIwZmE4NSwKKwkweGUxODg3NjgzLCAweGVjZDI5MzM1LCAweDc2MTdlOGQyLCAweDhkODUwMTI5LCAweDdmM2UyMTlmLCAweDE5OGVlMzhhLAorCTB4ZmNhOTJlYmMsIDB4ZWVkMTlmZDAsIDB4ZDA1OTE5MzAsIDB4Y2U3YzQ2NWMsIDB4Njc3ZjIyMjYsIDB4OWFiZjg5MWEsCisJMHgzODc5YjUxMSwgMHhiN2U5ZDc4ZiwgMHg4NGZmMWUwYywgMHhlZmUxZWY1OCwgMHg4NDFkM2ZiOCwgMHhjNTJjYmNmZCwKKwkweDJmZWI4NzlhLCAweDNjYzBmYzUzLCAweDE5ZDI0NzI0LCAweDJlNDc3M2NkLCAweDNlNzU2M2U3LCAweGEwNzZlOTY2LAorCTB4YzEzNDdlOWQsIDB4OGY5ZTNiNzcsIDB4ZmQ1MjQ3MWEsIDB4Y2ZhZWMzYzgsIDB4NjY3Y2YxZjIsIDB4ZTU1MDZjNTcsCisJMHhhZWM3OGQzMywgMHg4NGU5NzJlMywgMHhmODQ0MTljMSwgMHgwMTRiOTU0NCwgMHg2ZjJmZDYwOSwgMHhhN2ZmMjg2ZiwKKwkweDM3MWQ3MDBmLCAweDhjNjEyZDk4LCAweGMzNGFiMDc3LCAweDM1ZmY3ZWQ5LCAweGRmMWY0MDc3LCAweGNhZTNlYWEwLAorCTB4MWE4ZWY4YTgsIDB4MDE4YTYxZjcsIDB4M2VjYzU3ZDcsIDB4ZjE0MWYxNTIsIDB4MGU0ZTU1MWQsIDB4YjFiMGJmZDIsCisJMHg4ODlmYzQyZSwgMHg3OWM3ZjU5NywgMHhjZTNmYjlmZSwgMHg4ZDc5YzNhMywgMHhlNjMyOGU0MiwgMHhmODIzN2I3NywKKwkweGFlMDBkNmQ0LCAweDMwN2ZjNjhiLCAweGZmOGQ3Y2IzLCAweGQ5YzBkNTYwLCAweGZmYTZiYjdlLCAweDRkNGVkNTg4LAorCTB4ZDZlODJiYmIsIDB4NTdhZGU3YjQsIDB4NmI0MTcwMzQsIDB4NTE3ZmE2YjksIDB4MTcwMzQ3YmIsIDB4ZmQzNGVhODcsCisJMHg2YWYwZWQ0NywgMHgwNmNlZDJlMCwgMHhiYjMxZmY0ZCwgMHhiMWY2OWE3YywgMHhmNjlhYzVlMSwgMHgxYWZkODc3MSwKKwkweDZhZDc0Mjc4LCAweDNlNmJmZjRkLCAweDI3ZGE2YTA4LCAweGI0ZDdhZjc1LCAweGFhZDNkYjVmLCAweGI2ZjcyNzgxLAorCTB4Yjk0ZmZhNmIsIDB4NTdiNGQyMTAsIDB4YjRkNWJmYjEsIDB4ZDc1Zjk4ZDcsIDB4ZjFjNjJmYzAsIDB4ZWI1NGU3NzgsCisJMHg5YjllNjgzZiwgMHg4MWFmZGY2ZSwgMHhmMWU3ODg1ZiwgMHgyM2NlMTk5YSwgMHhmOWM1ZTdkYSwgMHgyNzhiNmYwNiwKKwkweDNlZTU5ODdlLCAweGZmZGY2OWE5LCAweDhkY2RjOGM4LCAweDQ3YTEyZmMwLCAweGI2N2ZlNDc0LCAweGM1M2Q3MWQ1LAorCTB4MWQzOWFhMWEsIDB4ZDdiZWYxYzQsIDB4ZTY2YTFmMmIsIDB4YmFmN2QxY2IsIDB4N2E5ZDhlOTAsIDB4NzVmMjI2NmIsCisJMHgwMzljZjk3ZSwgMHhkMGFjNzY0MCwgMHhjNTFhYTJiMywgMHhjOWVlYmI5ZCwgMHhmNDhlNTgwMywgMHg2YzhkNWViZSwKKwkweGYyNzBkMjUzLCAweDdkYTM5NjAwLCAweDE5MDM1NzVmLCAweGNhNzE2NTMzLCAweGY5OTY1ODNiLCAweDcwZDhkNmM3LAorCTB4YmNlN2FiODksIDB4ZTBjNGU1ODMsIDB4YjM5NDFhOGEsIDB4YjE3ZTI2NjAsIDB4M2U3ZGQ2MDgsIDB4ODQ2ZDkyMzgsCisJMHhhYTY1MjU3NSwgMHhkMTBmNWU3MSwgMHgxZDBjYWFlZCwgMHhkYmFhZjlmMSwgMHg0YjM3MTQyYywgMHhhMzIyZDZiZiwKKwkweGU4MWNkZjNlLCAweGVjMTA3OTFhLCAweGQzYTdmNGRjLCAweDY5ZGM2MmQ3LCAweGExZjlkODNkLCAweGMwMTdiMDIyLAorCTB4NTlmMmM3ZWUsIDB4ZTA0M2ViYjAsIDB4YmIwNDZkMWMsIDB4NjA0ZGNiMWYsIDB4NzNmZDYzZjcsIDB4OWMyM2Y3NjAsCisJMHg3YWQ5NzRmZSwgMHhjOWQ1NmU3YywgMHg2MTcyZWE3YiwgMHhjYTBmMTFmYywgMHhkNzUzMzQ1NiwgMHgwZTJiNzUzOSwKKwkweDBmZWM3YWMwLCAweDRiMjhhZDFhLCAweGUyNjdhZThjLCAweGVjOGViMDljLCAweDBhOGViMDY1LCAweDUxMDc4YjQyLAorCTB4MzA1MmVjZmQsIDB4MWMzOTMyMWMsIDB4MmJlY2ZkMDcsIDB4MWRiODFhNzQsIDB4MmViMDQ1ZmYsIDB4OTdjZjhiNTgsCisJMHhhZWRlZTkzZSwgMHhiNmY5ZjYzMCwgMHg4YTE5MzdiMywgMHg1ZDc5OWY2MSwgMHgwMTRkNmRiNywgMHhlNjc5OTczOCwKKwkweGYxZDNiZTAyLCAweDkzZmM2MDJjLCAweDA5Y2Q4Zjc5LCAweDk3ODYwYzk2LCAweDQ4ZmY3YTE0LCAweDJjZWU0OTcyLAorCTB4MTZiNTNlNDYsIDB4ZWI4MTk0N2QsIDB4ODVmZDUwZGEsIDB4M2NlMmIzYTIsIDB4MDgzOWNjOGYsIDB4Nzg3ZTdlZWIsCisJMHgyM2U3NThiYywgMHhhZmYyYWE3MywgMHg3OWNmNWM2NiwgMHhlZjUwZWY5NCwgMHg0NzIxOGNlZiwgMHhmZmU4NTNmZSwKKwkweDJmNWM3OTkzLCAweGU1MTU5ZmMzLCAweDA4OTM4ZDkzLCAweDk0OWQ4MWIzLCAweGYzNzZmMjBjLCAweGQxYTdkNWE0LAorCTB4NDFhZDkwYTcsIDB4YmIyM2U1MDksIDB4MTQ0ZmNmMDgsIDB4NzgyM2M4MjgsIDB4MWU0NGZjNGEsIDB4NTM3OTQ3YjIsCisJMHhlNzMzZTQ1NCwgMHgxZjM2NzhjMSwgMHhmMTkxNGVkOCwgMHg3ODVhYzViMSwgMHgxOWU3OWMzMywgMHgwYzdhYzBjMywKKwkweDMyODJlOTc3LCAweDkyZjBjMWVjLCAweDllNjA1MTU3LCAweDVmYjA3OThlLCAweGI1MWIzNzgwLCAweDhlOTE2NWZlLAorCTB4OWY3MTdkOTEsIDB4Mzc4YmVlYmEsIDB4ZGRhNzY4MjksIDB4ZjBmNWM3OTcsIDB4ZWNiYjgwOTYsIDB4N2ZmYTAzMTMsCisJMHg0MDI3ZDk0YSwgMHhmZDhiOTk0NywgMHhhYmU0MGY5MiwgMHgwNGFiZDFhZCwgMHhkMmUxOWZhMSwgMHgyMjM3ZWZkZiwKKwkweDNhYzVkZjYxLCAweGZkNjM5ZjUxLCAweDI3YmIwODlhLCAweGI4NmI4YzQ3LCAweDE5YmMyN2E0LCAweDZhNGFiZDlhLAorCTB4YmQwNmZjYzQsIDB4NjE4Y2VmZTQsIDB4YzllNjk1NzcsIDB4NDY2NmI5ZmMsIDB4MWU3Nzg2ZWQsIDB4NWYzMDljOTYsCisJMHhiYTQ4NjM2NiwgMHg0YmYxYzY4NywgMHhjMmRiZDQwYSwgMHhiMWFiM2ViYywgMHhmMDA4NWE1MywgMHgzYTRlNzkxZCwKKwkweGFjOWM3NTA3LCAweDA4ZmViMGM1LCAweGEwZTVkOTNjLCAweGVkZTc4NTY0LCAweGM0MjUwNjhmLCAweDU1ZWFkZDgzLAorCTB4ZGFlMjIyNTgsIDB4NTJiZGZjNGIsIDB4ZjU3ZGI0ZjAsIDB4ODY0ZmIyYzQsIDB4OGFiZGJhZTEsIDB4YTU5YmU3MTcsCisJMHhjYWRmOWJmMiwgMHgyYjFmM2Q3MCwgMHhiZDQyYTliZiwgMHhjMzNkMWJmNiwgMHg5YzZmOGNmYiwgMHg4YzVhNzI0YSwKKwkweGE5YTVhODdkLCAweDk3M2NjZjViLCAweDcyOTI2N2YxLCAweDllOTNmMTFlLCAweDJjZTJkZGJjLCAweGYxN2RmZTAwLAorCTB4ZDZjMzRiMzYsIDB4NDc3Njc0MTgsIDB4NzViM2E3MWUsIDB4ZTJkZWFhOTksIDB4NzNkNzQ5ZWIsIDB4ZWFmYWE5M2MsCisJMHgxZmE3MmIxYiwgMHg0Y2FkNmU1NSwgMHhjZTNhYjBlMSwgMHgyNGYxZWNjYSwgMHg4ZjVhODYzNywgMHhmOThlM2RhZCwKKwkweDE5YmJkNjIyLCAweGZkZTJiMWU2LCAweGFjMmI3N2NjLCAweDIxZjAzNzg4LCAweGNjOWYzNGJjLCAweGU3ZDZlOWU1LAorCTB4NDYzN2U0ZGQsIDB4M2UyMGNmZDMsIDB4NWM5YmQxMDAsIDB4MWRkOTc0ODYsIDB4MzFiYTA2NmEsIDB4NjgyYTMzY2QsCisJMHg1YmZlZGEyZiwgMHgyNDcyODQ4YiwgMHgyODRhYjU5MywgMHhiNWQ5NmQ0NywgMHhlN2Q0NjU4NywgMHgxYmQ4YWZiMiwKKwkweDEyYmU4ZWMzLCAweGE5ZTdhODNmLCAweGNmODMyNWRhLCAweDJhYmJmOWNmLCAweDBjMGQ0M2IyLCAweGU1YzliNmU5LAorCTB4YTlmOWUxYjQsIDB4NjQ3NGRhNzQsIDB4ZTIyZmFhNzgsIDB4M2EwYmQ3M2MsIDB4N2FhZDY3MmUsIDB4ZDYwYWQzZTQsCisJMHhlYjI1NjU0OSwgMHhkNjNhZjJhMiwgMHg1OTg3YTU0YiwgMHg5OWFiMmM2NSwgMHhmMzJkNjU0MiwgMHhmOThkMzk1MiwKKwkweGFkNjNhY2E5LCAweDlkNjRjZTU0LCAweDJlYjNkNjU0LCAweGEzYmZjMTJhLCAweGU0YWNjYmQyLCAweDc2MDhkZTg3LAorCTB4OTk3Mzk2MGMsIDB4OTg1YmNhOTcsIDB4NDgyZGNhOWYsIDB4ZmVmMDEzZGYsIDB4ZGJlMDk1YTEsIDB4YmI5NTI3NTksCisJMHg0NTlkZmY4MCwgMHg1MzMxMWYxOCwgMHgzOWU0MTdiOSwgMHgzYzgzNmY5NiwgMHhmMjBjMzJjNywgMHhmOGMyNjlkYywKKwkweDgzY2E5Yjg4LCAweDQzY2E4NTAxLCAweDBmMmE3MjgxLCAweGVmZDQzYzA3LCAweGNhOGVhMDY4LCAweDk1MmYwMWUzLAorCTB4NTQwZDAyMjcsIDB4ZDQ3YzA1NzYsIDB4MzE2MDU0ZWYsIDB4ZmMwNWVmOTUsIDB4NTgxZmJlNTQsIDB4ODEwN2U1NGQsCisJMHgxMmZmOTUyMCwgMHg5MTY1NGY1OCwgMHhlMjBhZTQxMSwgMHgxNjNkZGRkYiwgMHg4ZjljOWFmZCwgMHhlODI3MWU4ZCwKKwkweDg0ZjM0ZmEzLCAweGZkZDFlYmZmLCAweDc4ZjFlMmY3LCAweDgzYmEzYThlLCAweDk0YWVkNWIxLCAweDZlNmQxZTkwLAorCTB4ZTUwNDI3OWQsIDB4NzQ5Mzc3NDYsIDB4NGVlYjk0MzcsIDB4NjRkNjNiNzAsIDB4ZDkzYjI0NGIsIDB4NzI0YWJlZDYsCisJMHhhNGJiYjhjMiwgMHg5YzAyN2Q2ZSwgMHgwZmJjZGVlZCwgMHg0ZjQxOThlNywgMHg2YjY1ZWQ1NCwgMHg3Zjg0MTQxMywKKwkweGU4MTlhNGZmLCAweGRmYzFhYjcwLCAweDdmZGExNWJiLCAweGNlYmZkMmY1LCAweGFlY2U4MzMxLCAweGM3ZjUzYzQ4LAorCTB4ZWQ0YzM4ZDcsIDB4NjZiMjBlOTMsIDB4ZjIwN2MwMmIsIDB4MjY5OTNmNGUsIDB4MTBhMDc1ZjEsIDB4YzdkMmZlM2UsCisJMHhlM2U0ZDY3MywgMHg3OTFjYjkzYSwgMHgzNjhlMDVkNSwgMHg1YjBmMTlmYSwgMHhkYjE4Y2ZjOCwgMHgwZWFjNjY3ZSwKKwkweDJkYWI0OWUwLCAweDQ3MWZlODY1LCAweGY1YjhhM2Y0LCAweGRiYTJmZDUwLCAweDU2M2FlN2Q1LCAweDFlMjMzN2E0LAorCTB4ZWUwYTdkZDYsIDB4NjVlNTEzODksIDB4Y2Y4YzU4ZjcsIDB4YmJhYjhlNDUsIDB4ZmU5OWY5YmEsIDB4ZjY0N2YzMzIsCisJMHg1ZTMzMmU5MywgMHg1NGU3OTE1MSwgMHg3NDAzZmZkZSwgMHg4NmRmNGQxZSwgMHhhZWJmMWY0YiwgMHgzNTk4ZjhhMywKKwkweGY2ZmFmNTE1LCAweDdhNzcyZTE0LCAweGRiNDNlM2IzLCAweDUzZGJkZDYwLCAweDlmMjFiYzA1LCAweDYxMGViNWY2LAorCTB4OGRiYWQ3ZDgsIDB4NmZjNzY0YjksIDB4MWQzNmYzOGYsIDB4ZDFiZmY2YzEsIDB4NjlhMGRiMjksIDB4NjM2ZmJjN2IsCisJMHgxNGY5YzEzMSwgMHhlYTk3NTlhZiwgMHhjYTVlYTM3NywgMHhiMWZhZTA0OSwgMHg5YzQ4ZjFjZCwgMHhmZmZmODIzMywKKwkweGU2ZWVlNDIyLCAweGFkYWViZWNhLCAweGQ3YWQ0ZmU4LCAweDZlNzgwMmIxLCAweDFiMDVmYWRiLCAweDRiY2UzMGRjLAorCTB4MDIyZWMwOWIsIDB4YzJmMjc5MzgsIDB4OWVkMDA1MGQsIDB4NTEzNzQxYmIsIDB4YWUxZTY0MmYsIDB4MGI0ZGE1ZTMsCisJMHhlMTI4ZDk1ZiwgMHgwYjUzMjNiOCwgMHgyMTNjZGM2MSwgMHg3NTg2NzMzZiwgMHg3NDA5NWQ4ZiwgMHhjNmQ0NjZkZSwKKwkweDYzZjVmYTE1LCAweDg1OTdlNzNlLCAweGQwMTljYzMwLCAweDVlMjIzOWJmLCAweDFhYzBkNWIxLCAweDQxNjZmNTIyLAorCTB4MzViNzk3M2UsIDB4NGMzNGJjNDUsIDB4ZDMzY2YxZTEsIDB4ZTNkMGY4ODgsIDB4MTFhYWZmYjAsIDB4YmU5M2ZlM2MsCisJMHg5ZmYxNGNkNiwgMHg5ZTdmYzc3NCwgMHhlOWVkMGU5YywgMHg0ZDA1M2ExZCwgMHg3NGI2ZDk1YSwgMHg5ZWZkMDE4ZCwKKwkweGYyMjc1OGRiLCAweDNmODk1NmUzLCAweDc2ZTZjYzFmLCAweGI5MmMxODMyLCAweDFlZmMyMjczLCAweGYyY2EzN2IwLAorCTB4ZjZhN2UyMjMsIDB4NzE4NGEwODYsIDB4NGIxMWFhOGMsIDB4YTczNzhjMjUsIDB4MzA5M2VlM2IsIDB4ZTBkZTkxZmUsCisJMHhlODg5N2M5MywgMHhmZGE5ZjkyNywgMHgyYjlmMjJhZSwgMHg2ZjY3ZDYxZiwgMHhmNzM1ZTc4NCwgMHgzYzBjYmViMSwKKwkweDgxYjc5ODU3LCAweDU2NjQwOWYyLCAweGVjZGYzOTE2LCAweDI3ODc4ZTIyLCAweGI0M2QyMDY0LCAweDY5MWFkN2RmLAorCTB4OWFmOGQxNWQsIDB4OTkxZWFlZTUsIDB4MWNlMDdjM2YsIDB4Y2NiZmRiYTMsIDB4ZmRiOGU3ZTcsIDB4ZjkwMjk4NzEsCisJMHgxZjhmMTI2MCwgMHg5MzM5Nzg5YywgMHg2ZGQ5ZTVlYywgMHgyM2Y0MWVmMSwgMHhiMjM5M2M0ZiwgMHgyYWE3ZTA5NiwKKwkweDllZmY2ODNjLCAweDFhNjJiOTc4LCAweDlhOWZiMzk2LCAweDQ4NGVmZDQ5LCAweDA1YzYzMGVjLCAweGJiNzUzZjY2LAorCTB4NzkzOWY1OGMsIDB4ZWYxYzJlYjAsIDB4NzFlODkxYjQsIDB4ODlmNzUzZjYsIDB4YzVhOTFmZTcsIDB4ZjA1ZDcyZjYsCisJMHgyZTlmZDBlZiwgMHgwMTJkN2U2ZiwgMHg4OTE1MDVlMywgMHg3OTYxNjQ2ZiwgMHg2YWJkZDc0MiwgMHg4MzdmY2MzZiwKKwkweGQ1MWFmZDk1LCAweGRhNDM3N2I1LCAweDNmYzFkNGRmLCAweDZiOTkzY2U2LCAweDM3OGM3OGMwLCAweGYzY2U5NzNmLAorCTB4ZjAzMWU2MjYsIDB4ZjkyZjA3N2MsIDB4YmEzYjk1YjcsIDB4OGU4YjAxZGUsIDB4NWJkOWQ3NWQsIDB4OWViYWQ3ODMsCisJMHg1ODgzZDY1ZCwgMHgzNDE1ODc1NiwgMHg2MWVkNTlhMywgMHhhNzJjNDFlZiwgMHhkMTZiZjk3NSwgMHhhMGZiYTliYywKKwkweGRkOTYyMGY1LCAweGM0NWU3ZDIzLCAweGVkZmZhYmZmLCAweDA1NWUzNzk2LCAweGFiNjNjNDc4LCAweGU2ODc2OGFjLAorCTB4NjMzZGRlM2YsIDB4MGQyZmM1MWIsIDB4NjBhMWY5MGMsIDB4OGY1NWJmOTIsIDB4YTZmNjZjMDQsIDB4ZjY3ODdjYTIsCisJMHhmYTg3NTkxOSwgMHg4ZDZhZTRkZCwgMHg0Zjc0ZDg0MywgMHg0Y2UzMGVhZSwgMHgxNzVhNTNkYiwgMHhlMjBiYmVkMywKKwkweDI4ZjFlMjE5LCAweDhiYTQyMWU4LCAweDJhNmYxNDgyLCAweDI1ZjAxM2YyLCAweDgyOWRjMzlkLCAweDdlMjk0ZDNlLAorCTB4OGJkNjBhNmIsIDB4N2VmZThlN2IsIDB4ZDg1ZTFjZjEsIDB4NGUzNWFmZGYsIDB4YTU1Mjc5YTIsIDB4MDhjZGM0YTAsCisJMHg0MmVjMjNiNCwgMHg3ZjMzYjc5ZiwgMHg5NmMzZTIwNiwgMHhmMThhZGZlOCwgMHhjZTJhODJhZCwgMHhkMzkxMmNmZiwKKwkweDk5NmY3NjA1LCAweDEwNTA4ZjQ4LCAweDNmZDViZDNlLCAweGU2YzFjZjBiLCAweGUwMWJjZmViLCAweGIwNmEwNzc0LAorCTB4MjVjOTNlZGYsIDB4MzY3ZmVlOTgsIDB4MzkwNjFjNGIsIDB4M2ZjMmViNDMsIDB4NWJhNGU3OGMsIDB4NTFjZWM5ZDIsCisJMHg4MDZiNmZkNywgMHgwZWVjMjJmMSwgMHg5NjhkYzdkYywgMHhiYTU0ZTc4MSwgMHhmNWY2MjBkYiwgMHhlNjBiMjg4NCwKKwkweGY1ZDRmMWYzLCAweDdhZTdjYzZlLCAweGQ0ZWRkNjFkLCAweDYyZjQ3YWUxLCAweDVkMGZiMDNkLCAweGZhMjI3YWM0LAorCTB4ZDdmYWZlZDEsIDB4ZDIzYjE0Y2QsIDB4ODk3ZTYzMDUsIDB4NDcyOWNjOTcsIDB4Y2VhMTdmZWUsIDB4ZDcxYTM3MTMsCisJMHg2MTVmZDZmZiwgMHhlNTA5Mjk1YywgMHg2N2YzYWMwOCwgMHg5MTk5MjdmYiwgMHhmMWY3YTM0ZiwgMHhmYjg4YmU0MiwKKwkweGZlOGNiZDgwLCAweGU3MWY0Y2MzLCAweGJmNDZlNmRmLCAweDBkOTRmZTg0LCAweDQzYmZkYzYxLCAweGQ0NWM2MGY2LAorCTB4MGM5MjY5NjYsIDB4MzliNWZiMTEsIDB4ZDk5ZTllYjgsIDB4NzI4ZmRmZTgsIDB4ODI3OTY2NjUsIDB4OGIzZGY0ODIsCisJMHg3MmI1YWU3NSwgMHgwZjk4M2VmZSwgMHhmZDYyMmJlYiwgMHg3MTM2MTY3ZiwgMHhmZTdjNGVjMCwgMHhlMjRlZjc5OSwKKwkweDY3NTgzYTkxLCAweGNmZWEzMTU1LCAweGJjYTVlZWM3LCAweGNjOGZjZDg5LCAweGNmZWI4YzNjLCAweDNmYjkzZjc0LAorCTB4N2VmNDA2MTUsIDB4M2U3ZGNlMmQsIDB4Nzc2NTZmOGYsIDB4ODdiYzlhYzgsIDB4YzlhY2JmMmMsIDB4YWM1OGM4OGIsCisJMHhkMDdhMDc2ZCwgMHhkOTVkMmFjMCwgMHhhODI5ZDVhNSwgMHgyNTA5NzQ2ZiwgMHg5ZGEwNjczMywgMHhmOTIzYTQ5MiwKKwkweDlhNGE3MjBlLCAweDhkMWVkMzFiLCAweDdmODEyYmEyLCAweGNkZGU3Y2Y1LCAweGIzNzNhN2NmLCAweGIwMzlmODU5LAorCTB4NzM3Y2M1NWUsIDB4N2FhY2Q4YTIsIDB4MzM2ZjMwNGUsIDB4ZDAzMjc5YjAsIDB4M2VhZDczN2QsIDB4OGYxZmExMjQsCisJMHhiMjMyZjFmZCwgMHgyNmY3MGQ5NywgMHhhZGE3M2UwZSwgMHgxOWNjZTcwNiwgMHhkNDFmYTcyOCwgMHgyYWFmMjk1OSwKKwkweDY3YTBhZjBhLCAweDk0ZmM5OWZlLCAweDFkYThkMzA3LCAweGM1MzM2NWVhLCAweGFiZDYyMzNkLCAweGNmNmIwNThmLAorCTB4M2JmZDRhZTMsIDB4MGNjZTc4NTgsIDB4NGNmYWUwZDcsIDB4YTg5OWRjYzcsIDB4MzI5NzMzNjcsIDB4ZjZlOGZmM2EsCisJMHhlN2I1NDdhMiwgMHg3OGVmN2U0YSwgMHg1MGIxYTM4YywgMHhlNzljMDdmOCwgMHg1YWY2Yzc0YywgMHhjZmEzZWZiNCwKKwkweDljYmJhNTU1LCAweGMyZjViMTYxLCAweDJmNWMwNTIzLCAweGE3MjgyNGU0LCAweDkwYWVjOGVhLCAweDY2ZjA0ZWM5LAorCTB4ZmQyM2MzY2IsIDB4YjlmMmVmYTQsIDB4NTdlNTMwMWYsIDB4ZWM0M2QyMTYsIDB4MWYwODczNjMsIDB4M2Y1ZGMyNTUsCisJMHhhODczODYyOSwgMHhmYmExZDNlZSwgMHg3ZTNkZGVjMiwgMHg1MDk5ZTllMCwgMHg3YmY1ZmQ0ZSwgMHhkZmEwYzc0ZCwKKwkweGUzMmNlZmQ0LCAweGViMzc3ZWIwLCAweGEwODE4MTllLCAweGY5MDM2MWUwLCAweDdjYmU2YjhkLCAweDQ0MDMxNWE1LAorCTB4NDE0YzhkY2QsIDB4ZTNjZWFiYmQsIDB4NmVmYWUwMjgsIDB4MjVlNDIxOGYsIDB4YjMyYzVhZjksIDB4ZDkwNzI0NmQsCisJMHhmNDExNGJjNSwgMHhlODllOTAwMiwgMHg2ZjMxYjc4NywgMHg5MWY5MmI2MywgMHg4NjEyZmNiNiwgMHhhY2NkM2M3OSwKKwkweDk3ZDIwZWYzLCAweGUzMGM4ZDY3LCAweDM4MzYzN2FmLCAweGZmYjA1NTBkLCAweDg2OWQxYjFiLCAweDIxOWY3OGY5LAorCTB4MjNiNDNhYjMsIDB4YTg1MDZhNmUsIDB4ODU0NmE2ZmUsIDB4ZmQ3OTliZDcsIDB4ZDUwZjA2ZGMsIDB4ZjBmNDZkY2YsCisJMHg1YmQ0MGI3YSwgMHhkNDI5MGYzMCwgMHg2ZjcxODAxNSwgMHg3NTNhYTRiNiwgMHhlOGQwMWY3OCwgMHg0YzE3ZWRlNSwKKwkweGZjMWM3ZWQ0LCAweDhjMjdjYzAxLCAweGJjOTEwYjhmLCAweGYxZDFlZDZmLCAweDdjN2YyMzdiLCAweDlhYjU4MjQ4LAorCTB4M2IwZWNiMTIsIDB4ZThmNzdmMTEsIDB4Y2MxNzUwMTQsIDB4MmIzMzJkOTQsIDB4NzgzNmNmYzAsIDB4N2Y2ODdhNDMsCisJMHgxMDMyODU4ZSwgMHgzNjE3YmI5MSwgMHg3ZWExMGI3OSwgMHhlMmI2NDNiNywgMHg3YjgzNzZmZSwgMHhjMTQ3Zjk4YiwKKwkweDlkZTEzMmE1LCAweGJkZGUwMGZlLCAweDNhZjc0MWQ4LCAweDNlZmM0NTViLCAweGYxNGNjNGI4LCAweDI4NzViMDY2LAorCTB4NjQ5NmNjZGUsIDB4Yjc4NjNiMGEsIDB4ODZiMDJjNzcsIDB4MzkwMzFlZDAsIDB4N2JkOGU3NDgsIDB4MDA3NjRjOGYsCisJMHg2ZWEzYzNjOCwgMHhlNjc2OGJiNCwgMHhjYTlmMTgyYiwgMHhiN2U1YWE1YywgMHhhYTBiODVmNCwgMHg2NjQ2YmM2OCwKKwkweGJlYmQzZjQ1LCAweGJjZDc4ZjkxLCAweGExZDIxNzUzLCAweDcxYjk2NTVkLCAweGYzNDFkMjI2LCAweDNmYTBhNjBlLAorCTB4NTNjMmVjZmIsIDB4ZWUxMGMzYjUsIDB4M2YyZTE0NTAsIDB4NzlhMTcyYjQsIDB4OWM0NzUzZTEsIDB4Y2ViZjFmYjgsCisJMHg3OWZkNDA1YSwgMHg1ZmQ5YWYxYywgMHgwZDJmNWRiZCwgMHhiNzlkMzNmMCwgMHgwYzdlNDA3MywgMHg2MWNhMzc5NiwKKwkweDVlNjMyNzFjLCAweGMxZjE4MmI1LCAweGM2MjdkODc0LCAweGJjOGMzYmYzLCAweDRjYTc3ODNlLCAweDBiZTkyZGY3LAorCTB4ZjQ3NWIwZTUsIDB4MGI2NzdmMDAsIDB4MWYyM2E2MTQsIDB4ZDE3YzkxMjYsIDB4OWRjOGQ3ZjAsIDB4YzE3OWY4NWEsCisJMHgzMmVmYzBhNywgMHg5ZGI4MmJlZSwgMHhkMTY3M2U1MSwgMHg5MDNmNmQ3NiwgMHg1Nzk0M2E5MywgMHhmYWRhZWRkOSwKKwkweGUzZmE4YjViLCAweDQ0M2MxYTAyLCAweGU3ZTZkOWUzLCAweDlmN2EyZjcyLCAweGM3MGFmYjAzLCAweDc0YmVkMTE1LAorCTB4ZDcyODVmN2MsIDB4NzJkOGJlYTAsIDB4MWI4YmVhODAsIDB4NDRlOWM1NjUsIDB4MGE3OWQ3NzksIDB4NTNiNDVmZjcsCisJMHhlYjgwNjE2NiwgMHg0NGNkOTYxNywgMHhhNGRmYWE3YSwgMHhmNWM4ZjBhMywgMHhjMmU0OGJhYywgMHhjNmFkZjY5NSwKKwkweDE5ZjdhMjNiLCAweGYyZWZiZmJkLCAweGE4OGU1Y2Y1LCAweDY2MTNlMGY2LCAweDFlZGIwN2IyLCAweDllZjBlOGI2LAorCTB4NzhhZGVjMTUsIDB4NTVkYzJiOGMsIDB4NDAyYzFkNTQsIDB4MWRjODQwN2IsIDB4OTczZDI1YzMsIDB4YTIxNmNkMjcsCisJMHg1MWVkODM1MywgMHhhMWZjNjQ3NywgMHgxM2Y1NTQ2NSwgMHhkODZmZDQwNSwgMHg2ZTNjNzU4ZCwgMHg5NjhlZmI0MSwKKwkweGUzMTczZjYzLCAweGU2ZDZlYTRkLCAweDEzZGI1ZGUzLCAweGE2M2Y5NTFmLCAweDcyOWJjN2NkLCAweDdmMmEzMzIxLAorCTB4N2YyYTJmMmMsIDB4N2RhNjk0NmMsIDB4NTQ1Yzc1YWEsIDB4NTFiNWQ4ZmUsIDB4MWEzNTYzZjksIDB4OTY3Yjk2NzgsCisJMHhjYWY1ZmZhNiwgMHg4NmY4MWE0ZCwgMHhmZDM0M2JmMiwgMHhkNmVlNzhlNywgMHg3NzU0ZGZiNCwgMHg2NmZkYTZiZiwKKwkweDdjMGQ0YWVmLCAweDZiNWZjMzZiLCAweDZiZTZkZmZhLCAweGIxZGZiNGQ2LCAweGY2OWEyN2Y4LCAweDJkNDlmZjY4LAorCTB4Zjk3MDE1NzcsIDB4M2ZlZWQ5YmUsIDB4ZDA2YzAxNDksIDB4M2RmNzkxZjcsIDB4MjhkZTk5NmEsIDB4N2I5ZTQ2ZjcsCisJMHhhN2I3MDI1MiwgMHhiOWZkZmJhMiwgMHg4YmZiZDM4MCwgMHgwNThmOWYxMiwgMHgxYzc4OWFlZCwgMHhmMTM1ZDhmMywKKwkweDg1NDU3MGJhLCAweDcxYzYxYmI5LCAweDIxZGY5NTFhLCAweDBlZTI2MmRkLCAweDZiYjZiZmJmLCAweDNmZjZkOWVlLAorCTB4YmM2MGZkMGUsIDB4MWI1Y2M0YTYsIDB4ZmY4YzNiZWEsIDB4MzdiOTQwZmEsIDB4NWY3NDc0ODcsIDB4NGFiZjViNjEsCisJMHg2OWI4M2QyMiwgMHg1Y2FiOGYxNSwgMHhhZjNjNTIzMCwgMHg4ZWFjMWQ3ZiwgMHhkYzQ2ZmJjNiwgMHhlY2ViYTk2YiwKKwkweDJkYTQ3MTEwLCAweDg1NDI0NzE4LCAweGZkNDE5OWU0LCAweDdlZjFjNjU2LCAweGUzNTc0ZDNmLCAweDM3MWEzZThlLAorCTB4YTQxOGRjYTMsIDB4N2U4NWJjZmMsIDB4Y2RjMGUzMDksIDB4N2JjNTY2M2UsIDB4MDJjYjc0OTMsIDB4MDY5YmZmOWEsCisJMHgyNjVkOTkyNSwgMHhiMDE2ZGEyZSwgMHg2N2NjMGYzMywgMHg2MzVjMTU1ZiwgMHg1MjdkYmQ4NCwgMHhiM2Q0ZjdkMCwKKwkweGNmZGRiY2YwLCAweDViZDMxZTI4LCAweDE4NTNlZGYwLCAweGUxNDNlOThmLCAweDIxOWQ3NDA4LCAweGY3M2YzYzczLAorCTB4NWZjZmVlYzAsIDB4ZTZkYWY5ODEsIDB4NWNhMTk3YTUsIDB4NWFjZjZlOGQsIDB4NDNlYmY3YmUsIDB4NmU3ZjY5OTcsCisJMHhkZTFmNWJkOSwgMHgxZmU3Yjk3YiwgMHgyNWJhNzVkOCwgMHgzOGM4N2RhMiwgMHhmMzI2NDM2OSwgMHhlMDAxZDA0NCwKKwkweDgwZmRlNjJjLCAweGY5ZjVjODVjLCAweGM1MjMwYWYyLCAweGZjMDFhZWIxLCAweGJmYmUwMjE1LCAweDg5Y2ZmOGFhLAorCTB4M2ZiOWUwM2IsIDB4NDRlZWZiMzksIDB4NjVlYTFkM2IsIDB4ODQ3ZTg3YWMsIDB4OWZlNTNmZDcsIDB4OWM5MmZjYTMsCisJMHhhM2RmNjA1MSwgMHg5YjE3MWRmZCwgMHg3MjE1Yzc2ZSwgMHg4ZDZkOTViYSwgMHg2YTA3MThiZCwgMHhkMTNhMzQ0YSwKKwkweGJiMzJjZmNmLCAweDA3MTkzZWNhLCAweDdlZTA2ZDc0LCAweGZlZmZiNDc1LCAweGRkYmZiZjVjLCAweDkxNzdmZTQ5LAorCTB4OTQ0YjI3MTgsIDB4OWU3ZjJiN2EsIDB4NGU0YzgzOTksIDB4MzExNGY3MTcsIDB4NmE0ZmExZjAsIDB4NjU1ZTUwOTcsCisJMHg4ZDNmOTQyZSwgMHg4OWZkOGJlNCwgMHhhNDIzOGE0NiwgMHhjMWRjNDQ1YiwgMHgxNzEzNThiMiwgMHhmYjA2ZTM1MCwKKwkweDkwOTVlZjEzLCAweDRiYzNkM2VlLCAweGYxOGY5ZTI4LCAweDVjNmYxYzAyLCAweDExZDY5M2ExLCAweDMyYzgyZjFkLAorCTB4ODZiYWQzZTcsIDB4ZDdmNTlmMWUsIDB4ZTYzMTQ4MjcsIDB4MWE4NzVhODksIDB4Mjc5ZTg4OWYsIDB4ZWEwNGY2ODQsCisJMHg2NGYxNjU5OSwgMHg3YmVmNDQ0ZiwgMHg3OTU1NjE0OSwgMHhkN2U0NzBlMSwgMHg1MWQzOTNkZSwgMHg5MDMyOWY3ZSwKKwkweDVlOGExYzNlLCAweDE0M2NjZjMwLCAweDQyYjRmZTMxLCAweGZlNjNkZmVlLCAweGU2M2Q2NDc4LCAweGUzMjI4Nzg3LAorCTB4ZWY0MWNjZDksIDB4MmEwYzEwMmIsIDB4N2JiMTg0NjYsIDB4NzdjZTExNDMsIDB4YzI3N2NmOTQsIDB4MWVjOWQ4YTAsCisJMHhmZTg3YjUwNCwgMHhkNzIxN2Q1ZiwgMHg5NzMwZDMwMywgMHgxOWYyMzg2ZCwgMHg4MWRiY2JmNywgMHgxMmRjYjFhZiwKKwkweGQ2N2Q5MmIwLCAweGYwODdmYzAxLCAweDk1MjcwMTBiLCAweGNhOWI4MGExLCAweGRhODUwMTZkLCAweDA5Y2EwN2I3LAorCTB4MjFlMDI1N2UsIDB4OGVhMDQ3NzgsIDB4NWUwMmQ3Y2EsIDB4NjgxOWRmYWEsIDB4MDFlN2Y4MjAsIDB4ODE5ZDk1MWYsCisJMHg0NmZmNTRjNSwgMHg5YmYwNGZjMCwgMHhiZjA0ZDU4MSwgMHgwMTYwZjY4NSwgMHg1M2Q3YTljNiwgMHg0YWQwM2JiOSwKKwkweGVkMDM3YmVkLCAweDA4MWRiZjA0LCAweGVjMGUxOTUxLCAweDgxMDNmYWEwLCAweDA2MGY4MjRlLCAweDI4N2MxMTc2LAorCTB4NzBmODI2MTAsIDB4NDc5NTMwZTAsIDB4N2Y1NDVkMDMsIDB4YzEwMWYwM2MsIDB4YzkzZWUzMzcsIDB4MTVkZjU4YWUsCisJMHg0Zjg1NzhjMCwgMHhmNzdkYTI3NiwgMHgxNWExNmZhYywgMHg3Y2ZiNmJlZCwgMHg3OWM1MTU5ZCwgMHgwNGI3NGZiYiwKKwkweDhkMWQxY2UzLCAweGVmMTMxZWZjLCAweDA0MGUzMTIzLCAweGVkMDg2ODc2LCAweDY3ZmNmYjM5LCAweGY2YTU0YzhlLAorCTB4MTliZWQ0YjksIDB4YzRhNzA0ODcsIDB4YWZkYjgyYjYsIDB4ZmE5MTk5NmMsIDB4MGEyMTMwZDksIDB4ZGE1OGViOWUsCisJMHhkYzAzZDIxOCwgMHhlZDRmMTg1YSwgMHhmOTMyMTViNiwgMHhmY2U5Y2Y2ZCwgMHhlZWRjODUyOSwgMHgzMzZkZjkyMiwKKwkweGE1NDFmYjcwLCAweDVjODUzNTgzLCAweGU0MjlhZWRlLCAweDE2MWY1Y2Y3LCAweGNhNGE3M2YxLCAweDllNDdhZDhiLAorCTB4YTZlZDU0MmQsIDB4N2Y3MTg3ZjUsIDB4M2ZiMDc5ZjYsIDB4NTViY2VmNWMsIDB4YjU5N2JjNjYsIDB4NzJiM2EzZGQsCisJMHhjYmRmOTM3YiwgMHhiOGJmNjAzYSwgMHhjNTBmNTg3ZSwgMHg2ZTdjZDk4NSwgMHhhZGU2ZGIyZiwgMHhlNjM5NzVhNSwKKwkweGQ2ZWQ0OGRmLCAweGQwNTM0N2EyLCAweGFmZjc2ZjRmLCAweDZkZWI0MzlhLCAweGQ5YWUyOTk0LCAweDgyOTAzYmVlLAorCTB4ODljZjZjZjcsIDB4ZjBkYjI3N2MsIDB4NjRhODZmNzgsIDB4OGQ5ZTdhZjAsIDB4ZTMwNzdmNWEsIDB4ZWMwMzgzN2UsCisJMHhlYzYzZDdhNSwgMHg0OTZlZDMwMywgMHhjNzExMzBjZiwgMHgzMzFjZDQ3YiwgMHhlODI5ZDc4ZSwgMHhmZTcxMjFkNywKKwkweGM0Y2EwZjYzLCAweGIwMzAyZjdmLCAweDJkYjllMGZiLCAweDUxMDVkZjYwLCAweGI2YmY1NDBlLCAweGJkNTVlMzAyLAorCTB4Mjg5ZGJlODUsIDB4OGU3NzlmMzcsIDB4OWMwMzIwM2YsIDB4Y2ZjN2M3NWEsIDB4ODJiZjI1NWQsIDB4Zjc5YzM0NzYsCisJMHhiZjUwMmRlNywgMHg1ZTRkYmVlMSwgMHg0ZGIwZWE1YywgMHg2ZWM4MzVjZSwgMHhjYWRmZjNlZCwgMHg0Mzk3ZjhjMCwKKwkweDVhOGY5ZWQyLCAweGY5ZjYyZGJlLCAweGI3OGY4NzgyLCAweGYxNGM5NTY1LCAweDM3OGFkYjY0LCAweGJjZjkwNzVkLAorCTB4MzNmZjkxYmIsIDB4YzM4YTNlOGIsIDB4NWNkZTRjMzAsIDB4ODY0NTBlYTcsIDB4MzVmYzllNjMsIDB4ZmY3NzE3Y2UsCisJMHhjZDQyM2FhNiwgMHhkZjNhOGYyNiwgMHg2YWVmOWM1OCwgMHhiMWUyMzRmMSwgMHhjNjJmOWI1YSwgMHgyNzkyODZiYSwKKwkweGJmMjM5MjU3LCAweDgxZWYxNDI5LCAweDk0MmNiMTY0LCAweGI4MTljZjIzLCAweGU0OWUwYWRjLCAweDA1MjUyNGY2LAorCTB4OGYzYzFhNGQsIDB4ZTZhMDJmOWEsIDB4MGJlNzQ0MGYsIDB4MjllMDVlZmMsIDB4ZGU2MmM0Y2IsIDB4NGZkNjdlZTcsCisJMHhkNzNhNDFiZiwgMHhiZDFiM2MxNywgMHg5MmUzNjc5NCwgMHgzNTg3NDkzMSwgMHg3YTEyZDgxOSwgMHhkZTJhYTdlZiwKKwkweDNkMDYyNmJhLCAweDI4NTNlNWE4LCAweDFmYzEwMGM3LCAweDJlNzEzMjE2LCAweDM4ZjhlYTliLCAweDY0Y2UzZTNhLAorCTB4MmFlMDgyYjYsIDB4NDMxODM1OGIsIDB4MzNlNWFiNWUsIDB4MmI3ZjljNjIsIDB4NzU5Yjc0ZTQsIDB4ODcwZGNlZGYsCisJMHgxYThmN2NmMCwgMHg4YjZhMzcyOCwgMHhmZDAxYjQyZSwgMHgzZDA5ZTA4NCwgMHg3ZDRjZDdjOSwgMHgyMjU3ZDZlNywKKwkweDQxMTdmNWQ2LCAweGExOGM1YjlmLCAweDZlODdiYzYyLCAweDUwNGFmMTg3LCAweDk0YmYyMmFlLCAweGQ1ODJmYzUwLAorCTB4N2Q1ZGUwNDcsIDB4MWQ4NDNmZWUsIDB4NzVjNWZjZjAsIDB4M2NmZjc0MjksIDB4ZGExYzZkNmYsIDB4NGNjY2VkNDcsCisJMHhmODMzNjBmNCwgMHhkMDQ2YzY1MywgMHgzMmU5MGQ4MywgMHg4YjM4N2QwNiwgMHhmYzBlMzQ4YywgMHhlMjI2YWE1OSwKKwkweGNiZDcwY2JkLCAweDYwOTcyODM1LCAweDI2MTZmYmRkLCAweDk5YWMzZTkxLCAweDMxYWNkZWZmLCAweGM5ZjY1NzAwLAorCTB4NjViMmNmOTQsIDB4OWNkM2NmMjksIDB4Y2EzYWVmZjQsIDB4MzFmYjc5MTMsIDB4Zjc1ZGY3ZWUsIDB4OWZiZDJkNTAsCisJMHg2N2NhMjE5NCwgMHhiMjgzY2ZkMSwgMHhjMjUzM2Q3MiwgMHgwYjk1MmU3MCwgMHg5OWJmMTQyZCwgMHgxMzNlNDE3YywKKwkweDQ4NTFhN2U5LCAweDE3ZmEzYzdhLCAweDZkNzM1ZTNjLCAweDBmNzlhY2FmLCAweGI2OGY1MjZkLCAweDhmNTQ2MDNmLAorCTB4Yjc0NjQ2NzYsIDB4ZWYzZWRlYjYsIDB4NjE1M2QzY2QsIDB4ZmNhNWY2OWUsIDB4YmY4YmY2ZTEsIDB4NzA3MDgyM2IsCisJMHgyNGUyOGU5NSwgMHg1MDY0ZmJlYSwgMHg0ZGYxNDE5MywgMHhmOTgxOTgzOSwgMHg4Y2NjMWI5YiwgMHhiZTZkYjllNCwKKwkweDYwZjI4YWQ5LCAweGM5M2M3YTdmLCAweDJjZGJmNmJmLCAweGNiYWU4NzY0LCAweDNiNDM4YTZmLCAweDU1NmYzNGQ5LAorCTB4OGMyMzk2MGEsIDB4M2IxOGFkYzEsIDB4MmRkNWU2YmQsIDB4OTEyN2Q5MzcsIDB4NTVmMzU1YmMsIDB4ZWMxY2FjODIsCisJMHhkYzhkYmI4MSwgMHhmNzNlMDljOCwgMHhlNTE5NTRmNCwgMHg5OTY3Y2YyNSwgMHhhNzk2ZWFmNCwgMHhhZGQ4Zjk4MywKKwkweGQ0ZTFkNjk1LCAweGY5YmU0Y2IxLCAweGJhNzZmODdlLCAweGJlYjg5NmI3LCAweDFkYTExYTcwLCAweDdjYTM3OWUwLAorCTB4N2I0MTE1ZDcsIDB4M2Y3MDVhNDYsIDB4OWNiNjZkMzYsIDB4NmI3Y2E0NjksIDB4Zjk4MjMyNGMsIDB4Y2NmZDBiMGQsCisJMHg2NThkZjU4OCwgMHg1NzNlNDhlNiwgMHhmMmZiZTRmOSwgMHg4N2M2M2M3ZiwgMHgwZTU5NWY4NywgMHgyYmRjNjk1YywKKwkweDNlNDE3YmYxLCAweGZjYTE5YmU3LCAweGYyMTBkMzY5LCAweDFmOGZmNTU0LCAweDhiZmNlMDI5LCAweGY1N2E0YjZjLAorCTB4N2RhNjMxOGMsIDB4Y2UyMmFiZjUsIDB4OWU0NmU1NjcsIDB4NjFiYjMyYTcsIDB4YzNkZDFkNWEsIDB4Y2M2NWJiMDQsCisJMHhkYzUxN2JlNywgMHgyN2E3YjUwYiwgMHg3YjcxM2RkMiwgMHhiZGUzMGIyZSwgMHg4ZTgxNzA0MSwgMHhmOGQyN2JjNywKKwkweGI5OGRlZDdmLCAweDkzNmExZjE0LCAweDNjYzEyOWZjLCAweGI5ZjA5N2NjLCAweDAxZGFmY2YwLCAweDdmMzA4OTQ3LAorCTB4ZWI5NzBlNWIsIDB4ZTJiN2U0MmMsIDB4YjM4YzM1N2QsIDB4ZTBmZDcyMzgsIDB4NzRiNTA1ZWYsIDB4YTYxZWM4Y2MsCisJMHg3ODllODVmOCwgMHg4ODhjNjljZiwgMHgxYzVjNjNiNywgMHhjZmQxMTdlMywgMHhjMmQ1ZWU0ZCwgMHhlMTY4MmU1MywKKwkweGMwZDA2NjJhLCAweDNjMmQ2NjM1LCAweDM3ODVhYWQ1LCAweDdkM2I3MTE1LCAweDNmNWI1ZGJhLCAweDFkODVhOWMzLAorCTB4NzRlMzA3ZDksIDB4YzJkZmNmM2MsIDB4ZjA0OWUyMjIsIDB4NDQ3ZTVlZjcsIDB4NjhkZDY4MWMsIDB4NzY1ZjNlZmUsCisJMHhjYjhhNTJmNywgMHg3OGYwZTViNiwgMHgzNjk1NjM4ZiwgMHg0MmM1OTFjZSwgMHg3MzJmZTIxMiwgMHhkNjNjNTQ2OSwKKwkweDg2M2Y2NmJkLCAweGEzMGJlZDk3LCAweDVlZmM0MWUzLCAweGE5YTFmMDAyLCAweDdjOGEzMTQ3LCAweDllNjhlYWYwLAorCTB4ZDIzZGRlODcsIDB4Y2UwOGJkYjcsIDB4NWYwYzYwYjMsIDB4NGQxZGFiYzcsIDB4ZGFjNTNmNzQsIDB4NWNhZjg4ZDMsCisJMHhiMDY5NWYyMiwgMHhlODhhN2NiZSwgMHhmOTBmMWQ0MCwgMHg3ZmIxMTgyMiwgMHhmODQ4ODdlNCwgMHgzN2JlNTFhMSwKKwkweDhiZTQxZTcwLCAweDJjZmVhNDYwLCAweGZiZDAzNmU5LCAweGExYmU2MmFiLCAweGNmZTU0M2Y4LCAweGEyOGY3MTcyLAorCTB4ODlmNGRkZTYsIDB4OWJiY2Q0YjEsIDB4NzA1ZjIyNTUsIDB4NGViZTU0NTcsIDB4MTkzNmEzOWYsIDB4YWViZWU3ZmQsCisJMHhmOGIxZjE5NSwgMHg2ODJlZjkxMCwgMHhlNTg4N2NlMiwgMHg4MzdmOTEwNiwgMHhlMjJjMTg3YywgMHhhNmY1ODg3YywKKwkweDYzNzg1NmVmLCAweDA1MGI4YmQ5LCAweDYzYmZkYzVkLCAweDIyNGY4NmM5LCAweDczYWNiN2Y2LCAweGJlNWUwNjg1LAorCTB4OTEwZGUxZWIsIDB4ZTNmNzUxZjksIDB4YmYwODMwM2YsIDB4ZWQ3ZTUxOWUsIDB4MmY5ZGIxNTIsIDB4MmJjYmZmNGYsCisJMHg0OGNkMGNjZCwgMHhjZjI4MDdkZiwgMHgzMTljMTU5NiwgMHg1ZWE3N2JmMiwgMHg0MmViOWUyMywgMHhjYzk5ZmY2MSwKKwkweDJmZDFmMmIzLCAweGYyZTIxMWRiLCAweDM3ODg5ZDZjLCAweDMzMTU1YjM0LCAweDNiOTk4MWM2LCAweDUwYzcxMzU1LAorCTB4NGI0ZDExZTMsIDB4ZDg1NGI2NWMsIDB4N2M3ZjcyNDcsIDB4N2NhNTZiYzEsIDB4MTRmOWUxZGMsIDB4ZjFhYTQ4ZGYsCisJMHgzMmM2Y2VkYywgMHg5YzY0NTNkNiwgMHhkZDYyMDY2YiwgMHhjMDU2YzE4ZSwgMHhkOTU3ZjllOSwgMHhjMGM3NDEzMywKKwkweGY4MTc0ZGJlLCAweGIwZmRjOTdiLCAweDhmMjQ2N2VjLCAweGVhNjhlNDJlLCAweGEzOWM0NGRiLCAweDBiMmRiZjlmLAorCTB4OGIzZTcwYWEsIDB4YjBmYjQ5ZGIsIDB4MWUxYWZmMzEsIDB4ZDFjNmQ0MTcsIDB4ZTczZGUyNGMsIDB4MzQzYmUzYzEsCisJMHg3ZTIyNmRmNSwgMHhiNWYxZTU3MiwgMHg4NWQzMzk3MSwgMHgyZmM2MjFiYywgMHgxYWRmMWE4YywgMHg3MTgxZmM3MywKKwkweGFiYmRmMWI1LCAweDcxNGYzN2I4LCAweDJlM2ExODRmLCAweGU5Y2RkMjM2LCAweGRmZGQ5ZDY5LCAweDgzMzE3MTg1LAorCTB4MDY2NjdmZTAsIDB4ZjI4ODk5M2EsIDB4ZTNlOWZmODAsIDB4YzFhZTdlNzksIDB4MTk4ZjhkYTEsIDB4ZmEwYmFmMzAsCisJMHg5OGI4OTczZiwgMHgzZWZhOGFlNCwgMHgwNTk5ZmRiNSwgMHgyN2NiY2ExMiwgMHhhNGU4ZmRmMCwgMHg1YTI0ZjJjMSwKKwkweGRlNDRkODhlLCAweDgxMWNiNDdjLCAweGQzNzAzNGY5LCAweDM2Y2Y1Y2MzLCAweGU1MGY4YTRiLCAweGZlN2VmNDczLAorCTB4NzU4N2YxN2YsIDB4YzhiYmUzODksIDB4Nzc4ZWNlYWUsIDB4MGY2MzJlOWEsIDB4NjM4MjA1YjcsIDB4ZjE3NWI5ZjEsCisJMHgwNzc4YzVmZSwgMHg5MThlZjc3ZSwgMHhlMzk0NGY2OSwgMHhmODhjZWI3YiwgMHgyOThlYzU2YywgMHhiNjBmMzE3MywKKwkweDEzZWJmMDRkLCAweGE3YTIzYTY5LCAweGI3ZDNkYmY0LCAweDI5ZTgyM2VhLCAweGExNzNlOGRkLCAweDEzYWU5YzNkLAorCTB4ODdmODVmZjksIDB4ZDIyN2I0NzEsIDB4MzE4YzZkYjcsIDB4YTlkNzZhYmYsIDB4ZDYwMWFkYjAsIDB4NmQ4ZTcxMTEsCisJMHg5ZmVlOWVjMiwgMHhhZGNjOGVlZiwgMHhkMjcxODhmYSwgMHgzNGIxYmU0ZCwgMHhhM2ZlN2Y1ZiwgMHg4N2U1YWY5OCwKKwkweGM0NTliN2NkLCAweDZjZjlkNGMzLCAweDY3Zjc2YTc3LCAweDdmNjlmYTMzLCAweGQ0ODdhMTM2LCAweGZlZTMzNmY5LAorCTB4MTVkNWYwNjIsIDB4NzVmZTEzZTcsIDB4Njk3NzdjZmYsIDB4ZjkzMzY3ZjcsIDB4ZjUzNjdmNjksIDB4N2NlYTFiM2IsCisJMHgzZTZjM2YyZCwgMHg3NmNmZTBiYiwgMHgzZDk3ZGVmMSwgMHg2NDM3N2Y5ZSwgMHg5YTIzZjdhOCwgMHhiZGNjZjNmYiwKKwkweGVkMmY5NDY2LCAweGU4NTBiYzZhLCAweGZhNTE3M2JiLCAweDNiZTg0OWFlLCAweDY5NzNmOWY1LCAweDNkZmYxNGI5LAorCTB4NzMyNmY4NzcsIDB4ZmE4NzNkMmMsIDB4OTMzYjA5OGQsIDB4MDk5MzNiMDksIDB4ZDllMTEzM2IsIDB4MGQ1N2E3MzUsCisJMHhiYmZjN2EwNywgMHg5NWNmMzcxZCwgMHhiZWNmYWY0MSwgMHgxY2Y4ZjRmZiwgMHhmMWQ5ZGY4MCwgMHhlODMyYjk4YiwKKwkweDllYWZkOWE5LCAweDFlMGIzMzdlLCAweGZiZGJmZTI5LCAweGU5ZjRmYzM4LCAweDViYjQwNzNlLCAweGFkY2NjZjgyLAorCTB4MTg2OTM4MDUsIDB4YmFlYWNmZDcsIDB4Yjk3Nzc5ZDUsIDB4N2NiOTVkYjksIDB4NmY4ZjFlNzUsIDB4M2Q0NTljODIsCisJMHg2N2UzOWNkNiwgMHhjYWZjN2YxOCwgMHgxZjM0OWJkMSwgMHhlZWNmMmZmYSwgMHgwMzEwNWY0ZCwgMHg3Y2I5NmEyZiwKKwkweDFlN2YyMTc1LCAweDk4ODljMGFkLCAweGFmNDhjNmNmLCAweGM3YmVhOGRkLCAweDhmN2RhNzUyLCAweDIzNjkyOTI1LAorCTB4MmM3MTg3ZDksIDB4OTYzOTQ1NjQsIDB4ZmJkMGY2NjAsIDB4NzMxNmQ3OTcsIDB4NTMzMzcwYmQsIDB4ZTE1ZmI4MWEsCisJMHgxYzc5MTAyYywgMHg0ZGNiZGVmNCwgMHg2YjVjNjJlNSwgMHhmZGIxMmZlNSwgMHgwOWU3OWQ2NiwgMHg3OWZmNzdmNCwKKwkweDY4ZTFiY2QyLCAweDczNzlhYjNlLCAweDNiZGUwNmEzLCAweGRlN2RmZWRkLCAweGIxZmQ5ZTRmLCAweDY0ZTU2ZGM0LAorCTB4MzY5OThmMWUsIDB4N2JkZmM5Y2EsIDB4YTIyYjg4OGIsIDB4M2UxNDNjNWQsIDB4ZmY3Mzc1M2YsIDB4MWU5ZjAwN2UsCisJMHgwZjU0Y2Y4ZSwgMHgzN2I1YTdjNywgMHhmZjljMGQ2OSwgMHhmNGRlOTRmMiwgMHhjMzRmODljNywgMHgwODM1ZjEzMSwKKwkweGZiZjg1MWFmLCAweDdlYTk5YjkzLCAweDg4ZWQxZWEwLCAweGM1NWJlMTJiLCAweGQ4NWY5YWFiLCAweGM4MGIzOTJjLAorCTB4OWExOTY3NWUsIDB4MTRjNjYwZmMsIDB4MWU3YmFjNjcsIDB4M2Q0OGNmYTQsIDB4MTk3YmI0NmIsIDB4MzQ4NmEzZGEsCisJMHhlZmY5OGRjNSwgMHhjN2QxN2ZjZCwgMHgxNTczZGJjYywgMHg1MjVlZjg4YiwgMHgzNjdkZTUzYywgMHgxZmM5MTkyNywKKwkweDkzMzQ5ZmRmLCAweGI2NTlmYzYxLCAweGQ0YmMyMzRjLCAweDNlNTFkNTI2LCAweGViMTg3ZWE2LCAweDNhMzU3ZjQ0LAorCTB4N2M5ZjVkMGYsIDB4ZTkwOWU1M2IsIDB4NDA2MWU4NmQsIDB4ZWNjNzlmZDksIDB4ZTk1ZjIzMzEsIDB4NWQ5MjU2M2YsCisJMHg5OTU3MDA0OCwgMHgyOTVmMmU4NywgMHgyNjc1M2QwZiwgMHgzMjRmNDNjZiwgMHhkODVlMzEzYSwgMHg5OThjNjg5ZSwKKwkweDliYWRmZTg3LCAweDcxZmI1ZGZiLCAweDFmYjg2OTdmLCAweDg4NmVmZjIzLCAweGU1NmM5N2Q4LCAweDlmNThlZWY3LAorCTB4YWI0NmY1MDAsIDB4NWRmYzUxOGYsIDB4NjE1YmZmZWMsIDB4NGRmZGE5MDcsIDB4Zjk0MzNmNTYsIDB4NGUyYTM3YTAsCisJMHhhOWY0NWZiNCwgMHg3N2UwN2Y1YywgMHhlMjMxZGM1YiwgMHgwZGJiNWYyOCwgMHhhM2ZkZmNmNCwgMHg5OWNmNWNhYywKKwkweGZiM2VkZGI5LCAweDI3ZGZiMTM3LCAweDQ0OTYyYjI4LCAweGRkMzYyNGJjLCAweDM3Mzc0NTBkLCAweDlkZGU3OGVhLAorCTB4MmQ3Mzk3Y2EsIDB4OWMwN2NhNDYsIDB4ZjdkM2IxNmIsIDB4MjEwMmU2NmMsIDB4ZjQ0NmE0ZjYsIDB4ZmU1NmVlYmYsCisJMHhkOGFjYjUzZSwgMHg3YjdlOWU5MSwgMHhmZTVmOTRlZCwgMHgwMGI1ZTE5NiwgMHg2NmE3ZGI5NywgMHhjMmJkZTgxOCwKKwkweDI4ZjMxMjUzLCAweDVkZjM4M2E5LCAweGE5OTRkZWJkLCAweGVhMWJjY2I4LCAweDc2NDVhZjRmLCAweGM4YzMxODJjLAorCTB4YzE3NTdhNGUsIDB4NGU5NWFkNDMsIDB4OGFlYThmZjIsIDB4NzM3ZDllOTEsIDB4NzcwZmEyYTYsIDB4NzdkOGMzNjMsCisJMHgwNGYyZmZiMSwgMHhmYmQ1Y2YyZSwgMHhmYzA5ZTVhNSwgMHg2NDZiZGU3ZCwgMHhmZmVjNmNkZiwgMHg0OTE3YzU1NSwKKwkweDcyNWY0OGQ1LCAweDJiYWUwZTZmLCAweDMzZGQzZmEyLCAweDViOWZmNDQ1LCAweGNmZmE4MTNjLCAweGY1ZGRhZmU2LAorCTB4Y2UzOTc3ZDIsIDB4YzhmOTlkYTUsIDB4ZWM3Y2U4YzcsIDB4ZjQyOWVjYjEsIDB4YmRlNDU4YjcsIDB4ZTgxZjkwODYsCisJMHhhM2Q2NDU3NywgMHhjZTIyYzViZiwgMHg2ZTUwNWE1MywgMHg0ZjIxOGVlYiwgMHgzZWMzMzJkNCwgMHhhMDQyZTQ2ZSwKKwkweGIxOGM4Y2Q3LCAweGNmZjVhYTU0LCAweGExNzVmNDdhLCAweDkwZmNlNzE4LCAweGVjMWZlNzM4LCAweDZhYzNiNGY3LAorCTB4M2RmODBlMjcsIDB4ODQzY2VmZTAsIDB4ZTE3MmY4ZjgsIDB4YjBmMWY0YTksIDB4YmY2YTA3YTUsIDB4NmVjN2JmMjYsCisJMHgxNmNlZmZlYywgMHhiMDAzNzFmOSwgMHgyZGIzYmVmNiwgMHhkZjhjNWJkMCwgMHg4Nzg4NjAxOSwgMHg4YmY5MTE4OSwKKwkweDI1ZjZiZjYyLCAweGVmZDA1MjZiLCAweDIwZjRiMzgxLCAweGJjMDQ3NmRkLCAweDAzMGQ2YjIzLCAweGU0MmNiZmNmLAorCTB4ZDIxNjBiMDgsIDB4MmViMTA2ZjMsIDB4MGNlYjVhNDcsIDB4MmMzOGJiOGMsIDB4NjA3M2NhM2EsIDB4Njc5MWFhY2MsCisJMHhhNjUzNmE3MywgMHhiYjBiYTFhNiwgMHgyNzE2Mjk5YywgMHhlNDVkZjdmYSwgMHhmYmUwNjQxNywgMHg3YzlmMTgwZCwKKwkweGY3ODYzNmU3LCAweDlkNjk1OTVmLCAweGZkNzVkYTEyLCAweGM2Zjc4OGYzLCAweGUxN2I4OTU3LCAweGVkMmQ1ZjNlLAorCTB4ZWZkNmMzMjcsIDB4NWZmMjMxOTcsIDB4NTA3MzgyZDMsIDB4YzMzZGY1NmUsIDB4OTJmMTk0NTcsIDB4YzY5MWRkYjYsCisJMHg1ZGVlMWZmMywgMHgwMjcyMWYxOCwgMHhlZDJkNjdiZCwgMHhiMDRmNGZjMiwgMHgzMGY4NzAwYywgMHhhOTcxOWZhNiwKKwkweDcyODJkNWQ5LCAweDE0MDk1N2U2LCAweGU3YjdkNjc3LCAweGZiYzgyMGIzLCAweDFiZmJlY2IwLCAweGY5Yzg3N2MyLAorCTB4NmM0ZjJlOTAsIDB4YjY1YjllMTYsIDB4YjllYzllMjgsIDB4MDY3NWE5NzYsIDB4ZThmNzMxZjksIDB4ZDE3OGFjNTgsCisJMHhhN2VlNjJjZSwgMHgyYjYyOGZmYywgMHg0ZmI1Y2ZiZiwgMHgxZjYzZjRlNCwgMHhiOGUxNzIzZiwgMHg3N2ZmZTdhYiwKKwkweDQ5Zjk5ZTg0LCAweDdmZGU5M2IyLCAweDRkYTNlZDUyLCAweDhlNDdmODQzLCAweDVmMjEzYTkxLCAweGY4MTE1ZTg0LAorCTB4MTk5ZjMzMzMsIDB4NzkyZjQ1ZjksIDB4Yzc3NGIwNzksIDB4OTZiZGFmNmIsIDB4NWI1M2U4Y2UsIDB4ODQxYjQ3NDgsCisJMHgxMzhlYTNmZCwgMHhjNmEyMWY5ZiwgMHhmMjQzYzU3OCwgMHhiODdhYjI1MiwgMHhlZGZhYjBiZSwgMHg3NWFmMzg0MSwKKwkweGNlNjNlOWRmLCAweGZiYTA4NWZmLCAweGQ5MGZkOTM1LCAweGQzYWQ3ZmIxLCAweGZhMzJjNmU3LCAweDljOTY5ODNkLAorCTB4M2U3OGRkN2IsIDB4ZTlmYjMzMmQsIDB4OTZiYWVjOTUsIDB4NjFkZmNlMzMsIDB4MjhmMDU2M2UsIDB4OWZkODM3Y2YsCisJMHhlZmMzNjg1ZCwgMHgxYjBlNTk0MSwgMHhlMjY1ZDM2NCwgMHgyN2QwNDZmMSwgMHgxOWQ4Y2JjZSwgMHhkZWFmOTE0NiwKKwkweDk5ZTc4MDcyLCAweGJhY2E1OGI2LCAweGM1YTFhZjMwLCAweDZhNDY1NjkyLCAweDU2ZjNjMmQ4LCAweGNiMTZmZWQ1LAorCTB4MTYwN2QyMjEsIDB4NWFkZmRmODUsIDB4Yjg0ODdmNTAsIDB4MDk0N2MwNGMsIDB4ZTExMGViYWUsIDB4NTA3N2VkNDMsCisJMHgxMjhiNWRjOCwgMHg1YTVlZjg2NiwgMHhmZDRhZDI5YywgMHg4M2Q3YjJjYywgMHgzNGU2Y2E3OSwgMHg2NjQ0Zjc0NiwKKwkweGUyMTdmMDJiLCAweGNjYzc1ZjM1LCAweGJlYzlmNDMxLCAweDVhNGZhZTYyLCAweGFhYmFjYTRhLCAweDdlMzI3ZDY5LAorCTB4ZDhiNThlYjksIDB4ZTdhNGVjY2IsIDB4N2NmMGVmMTEsIDB4Y2Y5Njg2NzMsIDB4NTc3ODEzYmYsIDB4ZjkxNjY5YzcsCisJMHg0ZWFlNzdiNCwgMHhjMzhlZDYwOSwgMHgxYmY3OTMzOCwgMHhjYjE2ZTdhNCwgMHhmNTEwNzMwMiwgMHhjYmY4ZTI1YSwKKwkweDM5MWE2NzhlLCAweGQ3ZmI3OGQ0LCAweDQzYmVmMThhLCAweDJjNGZhZTc5LCAweDA2NzhlMmIzLCAweDhkMTVmN2M2LAorCTB4OWM2MmUxZjcsIDB4N2JmYmQ1ZmYsIDB4NDdiZDJjYzAsIDB4NTgxZDMwNGQsIDB4N2RlYjFlZDgsIDB4MTNmM2ZlYWMsCisJMHhjZmQxZjJmNywgMHhiYzc5NjBmZCwgMHgwMjg3MWI1NiwgMHgwOTFlZWM3OSwgMHg3MjU2NWFmYiwgMHhkNTM1NTBlNiwKKwkweDBiZDNmOGYwLCAweGZkNTE5ZmMyLCAweGY2MzE3NDkyLCAweGJmN2YxMjBiLCAweDJiYzUyODNmLCAweGUxMGM1ZGY0LAorCTB4NjljN2E0YTcsIDB4M2VmMDMwZjEsIDB4NmY4NzNmMmQsIDB4ZGUxZTc4MWEsIDB4N2M0YzY5MzcsIDB4ZDdjYjRlODcsCisJMHgzOGZmMWNkZiwgMHgwNTlmOTM0NSwgMHg3MTMxZWM3YywgMHhkZTIzYzYzZiwgMHgzODg4ZjVhNywgMHg2ZjE4YzIxZCwKKwkweDA0OWQxN2EwLCAweDg5YzdmN2ZmLCAweGMzM2Y5YzFiLCAweDQwOTlhY2VmLCAweDVjNjBlYjhlLCAweGZhMjdlMWM5LAorCTB4NWRiYTM5MzYsIDB4ZTIzOWVmYzgsIDB4NzhkMTBmZmIsIDB4MmU0OGM5ZmUsIDB4N2E0N2E1YWYsIDB4NTFhZjc4NWMsCisJMHgxMTliZDY5YiwgMHg3YzVmZGY4YiwgMHhlZTA2NDJmOCwgMHhmZDE5YzVlNywgMHhkZjc0M2I3OSwgMHhlNzY5ZTJmNCwKKwkweGNiYzQwMmU2LCAweDZmZmJlZDExLCAweDQ3NGRmOGVhLCAweDIyZjhhN2NlLCAweGU1YzBhNWZkLCAweDNhNGIyZmRmLAorCTB4ZDkyNTcxYjMsIDB4ZGRiODBiOGQsIDB4N2RmYTdmZjgsIDB4NzNlNjE3YjMsIDB4YTQ5Nzc1M2IsIDB4MDg0ZmNmOTUsCisJMHhmYzE0MWNiOSwgMHhkMzIwYmI2MCwgMHgyYWVlNDNmNywgMHgzYTQwYWRmMiwgMHgwYmFjOTM2YSwgMHgzY2U3MmU1MCwKKwkweDlhZjJmM2NjLCAweGIzZDU1YjFlLCAweGI0N2YwNjI4LCAweGQ1ZmRmMjhjLCAweGJhYmYwOGM4LCAweGU0OTFiZDdjLAorCTB4MzcyNWIzNWUsIDB4MjhmNzcyZjksIDB4OWZiYjlmNDMsIDB4ZGU3YTk0ZTQsIDB4Nzk5ODhmNTUsIDB4ZGI4ZjhhYmUsCisJMHg3YmJlZTlkMSwgMHgzYTI2MGYyOSwgMHg3ZWE4NjUzZiwgMHg0NDlkMjNkNSwgMHgxMzdmNmEwZiwgMHhjNWYyOGY4ZSwKKwkweDE1YzUyMzcyLCAweDgxOGZhMWNlLCAweGI3MmIzYjcxLCAweDU5ZDdhMjMzLCAweGMwOThjODg5LCAweDdkMDY2M2YxLAorCTB4NDk2MDc0OTksIDB4MTA2YjhlMWMsIDB4NmEwYmRjZmUsIDB4Y2NhMWE0NWMsIDB4ZGU3ODg5ZWMsIDB4Yjk5OTViNzAsCisJMHg5YTRlODIzYSwgMHg4ZTBmY2YxOSwgMHgyMzM3ZmYxZSwgMHhhYzIyZmI1NSwgMHhhODBjNjNiMSwgMHg5NGM2MzE3ZiwKKwkweDk3ZWQ5ZjI2LCAweGYyNzg2NDNiLCAweDAzOTViNGZjLCAweDBlZTNjYzdjLCAweGM1YTNlNzQzLCAweDIzMmRiZTcxLAorCTB4ZjMwZGFjN2IsIDB4NWUwZWMwZDIsIDB4MDQ2MGIwZDMsIDB4ZjY0ZGI3ZTIsIDB4M2MwMzY4YmQsIDB4YTI2ODdlZjQsCisJMHgwYmRmZWEzYywgMHg3YzE2ZWQzZSwgMHgwNWY5ZDQzYSwgMHhkMjMwMDFkOSwgMHgxZDljN2IxOCwgMHg4MGUyOTdjNCwKKwkweDIzMjdjNjRlLCAweGViZTczNDVmLCAweGY2MzE0MmVhLCAweGYzZWM1Yzc5LCAweDc4NzhmNjMyLCAweGM3YjNmN2U0LAorCTB4MWFmZTg5MGYsIDB4NmRlZDFjN2IsIDB4NDZmZGQ0NGYsIDB4YjY3NjhjMjQsIDB4N2UzZDg2MjcsIDB4MDVmMTEyNDIsCisJMHhjMjc0Mjc5MSwgMHgwZGQ1ZGNlMCwgMHgzOTMxMzk3OCwgMHg1Njk3YmU5OSwgMHg1ZGVmYzA5MCwgMHg1MjdmYTA0ZSwKKwkweGFiYzg3ZTA2LCAweDdlZDFmM2E3LCAweDdmZjUyZDk5LCAweDQzZjg0OTE3LCAweDQ3ZjA2MDhjLCAweDYyZjkwNWZlLAorCTB4YjZiZmYzMGUsIDB4ZTIzZTIyNDgsIDB4MWI3ODM1ZjcsIDB4NzNlNTdlOWYsIDB4ZDE5MjM2ZGUsIDB4ZjljMDM2YmEsCisJMHhkYjQ2ZmRlMSwgMHg2MjMzZjljNSwgMHg4ZWE0NjdkZCwgMHg1MDM3ZmQ1MiwgMHgxM2VmMTE2NSwgMHg4ODlkM2MzMywKKwkweGY3NDFhY2ZiLCAweDcyZjc1MTc0LCAweDlmZDM2ZDc4LCAweGRjMWZhYzc3LCAweGVkNzI4NmZmLCAweDhiODZkOWJkLAorCTB4NWE2MjJlM2MsIDB4NGI4ZjQyYzIsIDB4NmRhYTk3OTgsIDB4MTBjZWE5YmYsIDB4YjlhODJmN2QsIDB4NmJkOWJiNGYsCisJMHg3ZDBmNWU4OCwgMHhkNjIxZDQxNywgMHgxZjcxZGQ5YiwgMHhjZDRmYmZkZCwgMHhhNjQ0ZjllNiwgMHgwNGUyOGM2NSwKKwkweGE2NmRmN2QxLCAweDNkMWU1ZGIxLCAweDhjMGRjZmRhLCAweDM4ZThmZGVjLCAweDUyYTllNjM5LCAweGIxODFiMGZjLAorCTB4NzllNTEyMmQsIDB4Nzk3M2RmNmIsIDB4ZmU3M2ZlYTYsIDB4M2FkNjk0N2QsIDB4NzYwZWM3OWMsIDB4ZDFkM2RhMTAsCisJMHhmN2E4NDllZiwgMHg1MWY3ZWE1YSwgMHhkZmFiM2M1NSwgMHg0ZGJmNGE4ZiwgMHhjMTYzZWI0NywgMHhjNmFlZDQyOSwKKwkweGI4N2JmMWZkLCAweGY5MTFlOTU1LCAweDdmNTgyYmU0LCAweDJiN2Y3YTdmLCAweDliZGY3YjE4LCAweGNmMjllYWRiLAorCTB4N2ZiYzczMjAsIDB4YjI5YTE4NmMsIDB4Yzg3ODQ2MTQsIDB4NmZjOGM4NWEsIDB4ZjI2ODNjMDAsIDB4ZGJkOTRjMDksCisJMHgxNmU3OWY2OSwgMHgyMjRjMzYzMywgMHgzM2RhNjgzYywgMHhmZGQzZDM0MCwgMHg3ZTZkNDJjMCwgMHgwMzUzZWMwMSwKKwkweDU3YWJmYjQ3LCAweGQ5NGQ1M2YyLCAweGYzOTU5N2Y5LCAweDlhNjM4YTU3LCAweDk0ZTRiZGM0LCAweDk3ZmJlMjUxLAorCTB4ZWQxNGFjYTUsIDB4OWVkYmY0YTIsIDB4MDczOGYzYTEsIDB4NWY3MTgxZTcsIDB4ZGQ2MjljNzQsIDB4ZjE4MjZlM2IsCisJMHg3N2ZjOGZkMSwgMHhlMmNkMmZjMSwgMHhhZWZkNWI2ZSwgMHhmNGM4ZjMwZiwgMHhjZTU0OWIxZSwgMHhmMzBkMmNkNywKKwkweDEyZTk3YmYyLCAweDhhNmU3YzQ2LCAweDhmY2M2NjY3LCAweDFlNGMyYTk3LCAweDA0YzliYmM0LCAweDMyNTk2YzMwLAorCTB4ZDQwNjczMzIsIDB4N2IzYzQ1ZWIsIDB4ODQ2NGM0OGQsIDB4ZjMzMTU1OTksIDB4NWRmYWEzZjgsIDB4NTc3ZDEwYTEsCisJMHhkNDc5YTg2OCwgMHgyMGIyMmJlZiwgMHg2NzlkNGU3ZiwgMHgyZWY1NzdkMCwgMHg3YmY5M2NmMywgMHg2YmU3ZThkNiwKKwkweGNlYTk5ZTI5LCAweDg3ZmUxNDNmLCAweGJmZGU4ZWZhLCAweDgxMzdiY2Q1LCAweDQ0MWQ1M2M3LCAweGY0MDM4ZGFmLAorCTB4NDE3Y2YwNGEsIDB4Y2EzY2Y4OGYsIDB4NjZkNWJiODUsIDB4ZmEyOTU3N2IsIDB4NGMxZTY3MGYsIDB4MTE0YTM2NTAsCisJMHhkMmNlMDhmYiwgMHg3ZTAzZWZmMywgMHhkN2ZhZjFiZiwgMHhiYzkyNzc2MSwgMHgxODk3ZGZlZiwgMHg4YmVlZmJlZiwKKwkweGRhZTQyMmZlLCAweDA5NTk3YzNhLCAweDE5MWE1ZWYzLCAweGZiYTQzMWU1LCAweDI5OTczZmFhLCAweGEwZjYwMGZmLAorCTB4ZGYxMTEzOTEsIDB4ZDZmMTgwNDksIDB4MWZlZmNlM2QsIDB4M2U3N2UzMzYsIDB4YzBlN2ZlZjAsIDB4MTNlZGZlNDAsCisJMHhkMWY3NmMxNiwgMHhiY2Q0MzY3NywgMHg1ZGEzY2M1YywgMHgzZWYwMzI1YiwgMHg4MzdkZjQ3MiwgMHg4OWM2MTFiZCwKKwkweDk5YjI2Zjk4LCAweDlmNDAxMzA1LCAweDA1MzFmNGE0LCAweGI5ZWNmM2JmLCAweDAzYTY1NDY4LCAweGEwN2Q2YzdlLAorCTB4OTNiZjAxNTAsIDB4YTVlZTg5OTksIDB4MzM3ZWFkMmEsIDB4MGFlMTBlZmYsIDB4ZWY2NzY5MTYsIDB4ZWZhNTZlOTcsCisJMHg2NGJmODZiZCwgMHgzZTE0YmY5NCwgMHhjM2VlODhjZiwgMHg3MGM0YzM5ZiwgMHhkZGY4ZmYyZSwgMHhjYmU0N2FmYiwKKwkweDdhNWQ3ZGE5LCAweGZiOTNmM2Q0LCAweGY2N2ZhNGZjLCAweGVkM2Q0ZmQ5LCAweDk5NjJlN2UyLCAweDc1MWY5MTExLAorCTB4Y2Y1NDViMWQsIDB4OTc5ZjhhZTksIDB4NWYyN2VhMmMsIDB4ZmRmODZhMzAsIDB4NDZhMzVlZGEsIDB4NWIxN2M4MWUsCisJMHg2NWZkNDZiZSwgMHg2N2FhODllYSwgMHhlM2UzM2ZkMywgMHgyZGRlMjhmOSwgMHg1M2VkYjVkYiwgMHhkYmQwM2U0NCwKKwkweGMzNWZkZjJhLCAweGJjNzNhMWFlLCAweGNmMzMxNjk4LCAweGQ1ZGNlMDZlLCAweDcxZTI2ZTczLCAweDc5YzdjNjc0LAorCTB4OWZmNzk0NmUsIDB4ZmY0MDRkNDYsIDB4ZTg3MTQ3YzAsIDB4ZDgyZmM0NjQsIDB4ZGQ5NTI5MTcsIDB4NTg3OThlY2MsCisJMHg4ZTk5NGNlNSwgMHhmM2IyYmQ3MiwgMHhlNDg3YTQxZCwgMHgzYzBmM2NiMywgMHg1ZmZkZmM3YSwgMHg3ZTg1OTViZSwKKwkweDlkYzk5ZWMzLCAweGVkMmY2ODU5LCAweDNkMTVmMmY5LCAweGQzZDU1NzhlLCAweDE5M2ViMGNiLCAweDU4YTQxZTRhLAorCTB4MTBhYTc4NGMsIDB4Y2Y1MDMzYjQsIDB4ZjU5MTQ0ZTMsIDB4ZTc0YTllYjQsIDB4Y2ZlNGU1NjUsIDB4ODcxYTRlNTAsCisJMHhkOTMzZGY2ZSwgMHg4N2U0YzJjMiwgMHgzZGEwMjY3NSwgMHhmZTdjN2NjNywgMHg1N2NhYjM2NCwgMHg3MDk3MmZlYywKKwkweDlmODE4NDVlLCAweDUyZWE1NGY2LCAweDdiOWY2MTZhLCAweDZjMTU5MTllLCAweDQ2ZjNkM2RjLCAweGU3YmZjZTAyLAorCTB4N2FjZDM5ZWMsIDB4ZjMyMmZlOTgsIDB4NWFmYmFjNDUsIDB4MmI1M2VlNzEsIDB4N2VmZWM5N2IsIDB4ZjkyYmFjNGEsCisJMHhhMWM1MmY2YywgMHgzMGRlOTU1MywgMHhjM2Q0ZGJlYSwgMHgzN2ZlZmE3YSwgMHhjOGJjZjBiMywgMHgzOGExNGM2MSwKKwkweGZjNWViYTlhLCAweGQ3M2UyYTZlLCAweDg4ZGU3MjgyLCAweDU2MzJiM2ZiLCAweDI4N2VlYzI4LCAweDU1ODMyYTMzLAorCTB4Y2M5YThmOTgsIDB4NmI0ODRhNzYsIDB4NDE3ZDJiNTMsIDB4YTVlNGU3YTQsIDB4YWQ5MzllOWMsIDB4YmYxOGMzZmUsCisJMHhhM2FmNWU0ZiwgMHg1OWYyNDUzOCwgMHhjYmY0MDZkZiwgMHgwNTY1Y2I5MiwgMHhmODRhZTRjOSwgMHhiN2YzMTBlYywKKwkweGY5ZDRmOThhLCAweGE4OGNmNWQ1LCAweDdlZTg0YmY0LCAweDYyZTNiMzI0LCAweDEzMmFhZWZlLCAweGNjNWFiZjhlLAorCTB4NTllYjE0ZWYsIDB4MmMzYmU4YzUsIDB4NTVhZDY3YzksIDB4ODMyNzJmZTgsIDB4MzNkZjQxOWQsIDB4OWE3OWUyYjgsCisJMHhiNzQ1ZjMzNSwgMHg5OWQ5NGYyNywgMHhiMWUwZTc0NSwgMHhlMzBhZDkxZSwgMHgzNjViNjRhNSwgMHhjZWI5NDE1NCwKKwkweDMyZmYyM2ExLCAweDNjNTE4N2E5LCAweDlkMjdhOTNkLCAweDRmNTI3ZGU0LCAweDhhMjcyOGExLCAweDBmNDI2OWZhLAorCTB4ZDQ5MzM5NzAsIDB4YWYyZDUwZjMsIDB4YTRkMmExNmYsIDB4M2Y4NzE3Y2EsIDB4ZGE5OGZiOGMsIDB4NzE3Y2I4Y2IsCisJMHg5OGJlNDk3OCwgMHg1MTdjYjhkMiwgMHg5NTU2YjhlOSwgMHgzMjVhY2MyYiwgMHgwZmY3ZWExZiwgMHgwNmI1YWNmZiwKKwkweDczZjc3YjllLCAweGJiZTVmZWZlLCAweGJjYmU1Y2Q5LCAweGZiZjcyNWZiLCAweGQzYmY2OTRkLCAweDQyYWE1Y2EzLAorCTB4NGRmYTA1YzMsIDB4MzNlZGMwYmIsIDB4YmFhYjFmOTUsIDB4NDgxMTM2MjUsIDB4ZTc4MzlhNjMsIDB4YzhiYTFmODcsCisJMHhkOTg0M2I5ZiwgMHg2M2FmMDBkNSwgMHg5NTI5YzkxMiwgMHhkZDA1NmI2ZSwgMHg4M2VhYjNhZSwgMHg4MWZlZDg0OSwKKwkweDM0NzdkZTg5LCAweDk4ZTVjZTM5LCAweDgzZmUxZWMxLCAweDdjNDFmN2FlLCAweDMzZjdmOGVmLCAweDQxNWRlZjdhLAorCTB4NDM3ZTgyZjUsIDB4OWEyZTQ5NGIsIDB4ZTQzOTZjODQsIDB4M2U0MTYwNTgsIDB4YWU0ODc5ODQsIDB4ZTkxODcyMWUsCisJMHgzYTA4MGViYywgMHhlOWFmNjczZSwgMHg1YjNmYzMwOCwgMHg2OWZjZGZjYywgMHhjMWZmZDQzZSwgMHg5MzQwZWI5ZSwKKwkweDFlOTczZDRjLCAweDg4NWYyZjQxLCAweGU4MmIzYmYzLCAweDdiZGQyOWE2LCAweGZjMDRjOTUzLCAweGNkMWU2MmZlLAorCTB4MGRmZWNlN2IsIDB4ZGNiMjdmYmQsIDB4YzY5ZjFmZjYsIDB4M2FhNzJlZmEsIDB4NGY3Y2ZhOGUsIDB4Y2YxOWE1NjgsCisJMHgxZjliZDBmNSwgMHhhYmI0NDA5ZiwgMHg3YjIzNWZlMywgMHg3ZWUzZTRlZiwgMHhkMGY4OWEzMywgMHg3OGNmM2IxMiwKKwkweGFkZjNmYzkwLCAweDhiN2Y5Njg4LCAweGM4MGY4NjRhLCAweDkxNjY3YWJmLCAweGU3MTIxZTc5LCAweDFlNDI1OWViLAorCTB4ZGRiODU1NGQsIDB4ZTdlNTZmNWUsIDB4NWZiMjVmNTUsIDB4OGI4YWZlYTYsIDB4ZDJhZjU1ZjYsIDB4NWFlNGYyOGQsCisJMHhmMjliN2ZlNCwgMHg3ZDRiZDEyNCwgMHhiZDk3YTczZSwgMHgwYTBmOWU4MiwgMHg2M2VjY2U3YywgMHhlZDk3ZTg5ZCwKKwkweDE5NmU5ODJmLCAweGUyM2VmODBiLCAweDFjZmYxM2QyLCAweDUyYzZiYjE5LCAweDI5MWRjZjA2LCAweDAyNGJmMDk1LAorCTB4ZDZjOTdhNmMsIDB4Y2YwMGE5YjUsIDB4YTdhMjI0NTIsIDB4MWRhZDkyZmEsIDB4OTY3ZmQwNGQsIDB4MDNhOTQxMzUsCisJMHhiM2Y5ZThmOCwgMHgwZWFmMzQxNiwgMHg5Nzg0YmMwNSwgMHhlM2Y4NzJlOSwgMHgxYjllMTc1NCwgMHhjYWNjZDNjNywKKwkweDRmZmU4Y2IwLCAweDhjYmY2M2JkLCAweGM0NmRmNmZhLCAweDJlZTMxMWFiLCAweDc1NjdjMTFlLCAweDZhNTcxZjA0LAorCTB4MjM4ZmI4MmMsIDB4MmYyMTI2YTUsIDB4NWU1MWUzM2QsIDB4ZDUzN2NhY2UsIDB4N2M3NWExOGYsIDB4MWE0YzZjN2QsCisJMHg1MDZmNzdiZSwgMHhhNzNjOTVmOCwgMHg3ZTgyYzlmZiwgMHg2YjI3Y2NlYSwgMHhjY2RmYTA1MywgMHhkNzE5NjY5MiwKKwkweDkxMmNkNDdiLCAweGQ3ZGEzY2ZjLCAweGM3OTNmOTQ0LCAweGQyYWMzOTNiLCAweDc0MDczZDJkLCAweDViNmZiYzc5LAorCTB4NmZiNjEyNzMsIDB4ZDUzZTQ4OTcsIDB4ZTIxZDJmMmIsIDB4YTdkMzhmZWEsIDB4MGIwZjdlM2EsIDB4MzA3N2UxYjYsCisJMHhiN2FmMjljZiwgMHhiMWY1M2U2MCwgMHhjY2NmMDViZSwgMHg3ZjFjM2MwMSwgMHhiOGM0M2Y1MywgMHhjMGFkMWY0ZCwKKwkweDI0NGNkZjcxLCAweDM1NmQ5ZTNhLCAweDhjYjFmNDY5LCAweDVlODQ2OTRlLCAweGQzNmYxZWFkLCAweDBkNGFmNWMwLAorCTB4MjljZmQzYzUsIDB4NzgwNmU1OTIsIDB4YWQ1ZGYzZGUsIDB4ZDE5MTM5N2IsIDB4YmQ3N2RhNTIsIDB4ZTE0YzdiZTgsCisJMHhhMWNjNzk3YywgMHhkNjNjYmUyMywgMHg4YTljYjhmNywgMHhmYjQ2NTlmMCwgMHhkZTc2OTk5MSwgMHhiMjFhOTJmYSwKKwkweDViMjljZWFmLCAweDgyNjc0NGY1LCAweDU0ZjFkNTBmLCAweDRmOGEzZTNhLCAweDljZWQxZTIzLCAweDZkZjY4ZmZmLAorCTB4MWRiZDIwYjMsIDB4ZTMyM2JmNzUsIDB4ODk2NzVkMzksIDB4YTFkMDU3MWEsIDB4NWRmMGRmYWEsIDB4ZGE5ZmE0NzEsCisJMHg3ZWYzZmI1MSwgMHgzODUxZWI4NiwgMHhkNzk0NmJmZSwgMHhkNTdkMjM4ZiwgMHhhN2EyNjQzYiwgMHg5YWZlY2FhMywKKwkweDI3YmY4NjE0LCAweGZmZWNkMjYyLCAweDlhYzkxZGZlLCAweGRhNzU5N2YxLCAweDVkYjQ3MDM0LCAweGRiZmRjZmI1LAorCTB4MGVjNGNiYTcsIDB4ZDg0N2E0NjYsIDB4M2VjMmY5NDcsIDB4ZTA3NzFmZDIsIDB4MTc2OGFlZmEsIDB4ZjdlOGViMjksCisJMHg0NWQ5MDY0OSwgMHg4YTJlZGNmOSwgMHhiZTU0ODdiNiwgMHhiODg5ZDY2ZSwgMHg2NWM3OGVhYywgMHg1OGRmZjlhMywKKwkweGYxZWVjM2ZhLCAweDhlNDkyYWQ4LCAweGM2NWJiZmJjLCAweGJlOTA3M2JhLCAweDg2MTJhM2U2LCAweDc1ZDAxZWYxLAorCTB4MTVmYzIzYTcsIDB4MDc4YjZkZWIsIDB4Y2NhZDdjMzksIDB4YmZiZjY5NzYsIDB4M2YzN2JmY2EsIDB4MWU3N2Q0YmUsCisJMHgzNjc0OTVlNSwgMHg2NTYxZGY0YywgMHgwN2U1MThhYiwgMHg5ZTc4NmJlOCwgMHhhZDY2NWUxMSwgMHgyNThiZDQ4OCwKKwkweDhkMmRmMWZkLCAweGQ4NGJhNDVkLCAweGFjNzg4NTliLCAweGYxZTQ2YjM4LCAweDM4ZTg5ZThmLCAweDg1MWZlYTk3LAorCTB4YWUyYmYyMjUsIDB4OTNlYTJlNTIsIDB4ZTY3YmI4ZjksIDB4N2Y2Nzc4ZjAsIDB4OTM4ZjMzNzksIDB4ZTVmYzA5MTUsCisJMHg1ZDY5MWE5NCwgMHhkY2Y3ODA4YSwgMHhiNTllZmIxNiwgMHg0MWZhNTRhNCwgMHgwN2RmYTJmOSwgMHhlZjgwMjlkZiwKKwkweDYxZTY5MGFmLCAweGIxNTUzZDllLCAweGNhNTI5MWQ3LCAweDk3NzdiNWUzLCAweGExNGFmMjc4LCAweDE1ZjEyYTJjLAorCTB4M2Q1ZTIyOTYsIDB4NzdkMzVmNjAsIDB4OWY2NDNkYzUsIDB4MzNiY2UzYTksIDB4ZmQxNmUzY2EsIDB4YmNjOTYxNDYsCisJMHhlZThmMGVkYywgMHg2ODYzZWQwNywgMHhlM2Q4ODY5YywgMHg3YTM4ZmI0MCwgMHhmNmVjNmU3ZSwgMHhmYzM5Yjg0MywKKwkweDMwZmIyMzdkLCAweDBjMDY0M2QyLCAweDUyZjJhNjY0LCAweDE2ZTVlMzJhLCAweDg4NDZhZWZhLCAweDFlMGRlN2ZiLAorCTB4OTE0NmYzZDIsIDB4MTAzNzg4YWYsIDB4ZjRjN2ZjOTEsIDB4MWNiZTM0ZjUsIDB4NThmNzQxOWUsIDB4ODMyNWQ4MmQsCisJMHg3NjkxZjlmYiwgMHg2YTg0YWM5NCwgMHg2YWFkZTMyMiwgMHhkZjk0YThiOSwgMHgxNTI4Y2U3MywgMHg2MDRjZjNlZiwKKwkweGE4YWZjODEzLCAweGVhM2NmY2JjLCAweGMzY2Q0M2YzLCAweGM4NTc2NWVjLCAweDYzZjM1ZTdiLCAweGMzZmE0OWQzLAorCTB4YTU1ZjI3ZTQsIDB4NGEwZTYwN2QsIDB4MWYzOWRmOTEsIDB4NGE4OWJmNmEsIDB4YzI4YTFjOTQsIDB4NWNmMzUwZDMsCisJMHgyMmRjNzllZCwgMHhkNzZhZjZlOCwgMHhjYzdhNjU1ZCwgMHgyZWQxZjk0ZSwgMHgwNTZiMDdjZSwgMHhkNWRiZjU3ZCwKKwkweGJlM2YxZTNmLCAweGZlODYxZjNmLCAweGZlZmJkOWNhLCAweDRhN2VmODkzLCAweDM3YTU2ODQyLCAweDE0NWU3ZWM2LAorCTB4ZTUzMWY5ZmIsIDB4Y2U3MGQzYzEsIDB4ZmJhMThjMWIsIDB4MDc5OWRlZDEsIDB4ZDIwMjYzYTcsIDB4ZjFmMmM3N2IsCisJMHg5ZWIwMDVmMCwgMHgyZGZjYzUzNywgMHg2ZmViOTU5NiwgMHgxYzViNDc4NSwgMHgxZWY5OThiYSwgMHg3YTc4ZmU2ZiwKKwkweGQ5M2YwZGEyLCAweGRjZTM5NWZmLCAweGE3MjA2ZGZiLCAweGQwN2QxZTViLCAweDc1ODFiMGFjLCAweDE1ZDk2YjMwLAorCTB4ZTM0N2Y5Y2UsIDB4NmQ1ZDc1MTMsIDB4NjI1ZTMwNWIsIDB4ZjdhYWJkNGQsIDB4YWY1YzVhMTQsIDB4Njk3ZGUwMjQsCisJMHg3NjRkZTdlZCwgMHhiNDQ2MGVmYywgMHg0M2M2YTAzZCwgMHhjNmE1YmQ1NCwgMHhhNGJiNTQ0ZCwgMHgxZmUzYzFjMiwKKwkweDdiZmNlZDMzLCAweDY5ZjYxNTNkLCAweGIyMGZkZmE0LCAweGFmZjIxYWFlLCAweDIyNmQzYjMwLCAweDE5ZmQwYWIxLAorCTB4ZTRmYjVhZGQsIDB4NDY1N2JmM2EsIDB4OWVkYTJhM2IsIDB4NDUzMzRkYTgsIDB4N2FiZDA3ZDksIDB4MTcxNWRmOTQsCisJMHhmZTU0ZmRiNSwgMHhjNDU0YWNmOCwgMHgxNzc5NTQ1MSwgMHhjZjlhNDc2NSwgMHhiYjQwNDk5ZiwgMHg2NzBiZWRlYiwKKwkweDhkMTQyZTI4LCAweDVjMmVlYjlmLCAweGFlYmQ5ZmRlLCAweDgzZjc0ZjVkLCAweGI3YWQ3MWQxLCAweGZkZDJlNDJmLAorCTB4MWJhZjExYTAsIDB4Y2NjYWQ0YzEsIDB4ODA4Y2M0M2YsIDB4NmI3YjRjOTcsIDB4MThlYzExOTUsIDB4ZjgyOTgzYTMsCisJMHg1OGZjMzZkZCwgMHg4ZDBkYzYzMywgMHg3YzljNzgxNywgMHhkN2ZiOWQ4NCwgMHgyZmMxOGI4OSwgMHg5NTMzNTE4NSwKKwkweDc4YzE3ZGEwLCAweGVmNDhjZTdjLCAweGVmNWQ5OWQzLCAweDA5YmRiZDkxLCAweDllMjE4NmVhLCAweGE2MTk5ZWM3LAorCTB4NTMwNzExOGIsIDB4YzA4YTYzY2YsIDB4YjdlNjZlZWYsIDB4NGQ4MWVmZTMsIDB4ZjdmNzhiYjEsIDB4NTlkYjQ2MmUsCisJMHhhMjJkM2NmYywgMHgyZDYyZTI3ZiwgMHgzY2UyMmQzZSwgMHg0MzViODMyNywgMHhkM2VjNzlkZiwgMHhlNzExNmYzZSwKKwkweGZiMWE1OTZiLCAweDYzYTNlYzFjLCAweDdhYTI0MzlmLCAweGM1YjYxMzBlLCAweDU5NmMzOWUxLCAweDc1OGE0ZGJjLAorCTB4MmY4Yjk5MGUsIDB4ODQ1YjBlN2YsIDB4ZWZkMmE5NWYsIDB4YjIwNGFjYjQsIDB4ZThhNmY3YWYsIDB4N2I0MWZiZTgsCisJMHhjYjU5YzMxMywgMHhiMmZkZmUzMSwgMHhhY2NmZGU5OSwgMHhiNDM2NzExMCwgMHg2YjlmMTBhNCwgMHg4NGJmOTdiNywKKwkweGEzNzFkYjcxLCAweDdiOGU3NGY1LCAweGJjZmZkMTI1LCAweDYwZmVmZjhlLCAweDFmZWE3OGNmLCAweGY4ODNiMzI3LAorCTB4ZmIwNzgwYmIsIDB4MWJiYmU5YWEsIDB4ZDNiYmZjZDEsIDB4MzNkZDAwN2EsIDB4M2RiOWNlYjYsIDB4ODM5YzAxNmIsCisJMHg5OTgwZmIyNSwgMHhjZjgzOWJmYiwgMHg0YTNmZWYwNywgMHg3YjRiYmUwNSwgMHhhNjU0YjlmOCwgMHhiZGEzZDQ5ZCwKKwkweGVjNjZmMjVlLCAweDhmZTM1MWYzLCAweDNhOWRhNDdiLCAweGFhMzYyYjIwLCAweDk4ZmM4YmFmLCAweGVjYTMzYjkxLAorCTB4NjQyZGIzZTksIDB4NDdjNjViNjcsIDB4MzljMGY3ZDUsIDB4OWY4ZWJkZDEsIDB4YTFkOTE2ZWMsIDB4ODdlYmFmM2QsCisJMHgxMTRhYTczOCwgMHg3ZDdmMzA4NywgMHhmYjY1ZTI4YSwgMHg3ZTcxNGVmYSwgMHgyNWM2ZDFlOSwgMHhmZTVkZjcyNywKKwkweGU3MTM1ZTljLCAweGExYzQ1M2I0LCAweDAwZTIyZTdlLCAweDdlN2ZjMjlkLCAweGYyYTRlMDIzLCAweGVhOWI4MGNkLAorCTB4MDQyODBhZGYsIDB4MGI5NDBhZWYsIDB4NzdjZmMxNjEsIDB4NDdjYjNlNTYsIDB4ODRhYWFmMTcsIDB4Y2Y0N2VkZmIsCisJMHg3ZjdkYmY3MywgMHhiZTgzYTg2MiwgMHg0MmRlNzRlZiwgMHhiZGE0MTdkZiwgMHhkYmJmMTQ0ZCwgMHgyYzcyN2MwNywKKwkweDFmYmY0OWNlLCAweDRjZGIzNDc4LCAweGE1YTNiM2YxLCAweDhhN2JmYmJmLCAweGQxNmI3Y2JiLCAweGM3MGJiOGYxLAorCTB4ZWI0ZTdhYjMsIDB4NmYxODRlNzAsIDB4ZWU4Yjg1NWQsIDB4NDdlMDM2YTUsIDB4ZWVmZmExMTQsIDB4ZmZiZTg5MzIsCisJMHgwNDBlMWIzNCwgMHgzYTU0NDVlZiwgMHhmMTY5ZjUzNywgMHg2NWZmMGY1OSwgMHgxZGRmZjE5NSwgMHg2MTdmNDJjOCwKKwkweGE0ZTg4YjhjLCAweDIyNzNlZjQyLCAweDRmYmEzNzNlLCAweDU3MWU1ZjkxLCAweDg3MWJlZWQ4LCAweDdhZjE4MDcxLAorCTB4MTRmYmJlMjYsIDB4M2JhYzQ1MzQsIDB4ZTA0MjZmMGUsIDB4NDQ4OTUzNzksIDB4MGExYTczZGYsIDB4ODZlNWQxYmYsCisJMHhhMzJmYWU1NCwgMHgzNDc1ZmZlYiwgMHhkZDFiODNkNywgMHg3NzNjZThkYiwgMHg1MGIyYmEzYiwgMHhmOTEzZWZhZiwKKwkweDI5NjRiMzEwLCAweDI4NWZiZjQ4LCAweDFjYjFkZDc3LCAweDY1OTE1YmY2LCAweGMwMTFiYjFmLCAweDY4NTNhMzJkLAorCTB4NGY0YWZiZmQsIDB4ZDhmODFjNTMsIDB4MjFjNjU3ODUsIDB4NzZiMzFkZmQsIDB4NzljZTMwNWEsIDB4NTNkZmM5Y2MsCisJMHhmOTk1MTM4NywgMHhmMjlkYjc3YiwgMHhhNGYyMzEyZCwgMHhlOTU4ZjJkNSwgMHg5NWZkZmEyMiwgMHhlZjdjZmM3ZiwKKwkweGRmN2NkMWRhLCAweDBhZjU1MjRjLCAweGZiODE1YjhjLCAweGRlZjk0MjRkLCAweGMzZjkwMmIyLCAweGZjODNiOTk4LAorCTB4YWE3M2U4Y2MsIDB4ODhiMzVmNzAsIDB4ZmM2NGYzZGUsIDB4YjZiZjRmN2IsIDB4M2Y3ODJjODYsIDB4MDI2N2VkMWMsCisJMHhmZjQyNmM3ZCwgMHgzZDA0Zjc3OCwgMHg1ZWFkYWY3ZCwgMHhlNzgyZTdlNiwgMHgxZmE0ZTc4OCwgMHg5OTdlMTNhMywKKwkweDY1NjY3Yzc2LCAweGMwZmE2MzNlLCAweGRlMWQ2MDc5LCAweGYxM2FkMGQ3LCAweGFkZWZhYTNlLCAweGY4NjI5MmJmLAorCTB4YzlkNjgzYjUsIDB4Zjk1ODllZmMsIDB4Y2RjZmQxYjAsIDB4OWEyMGIyNzYsIDB4MTYxNWIzODYsIDB4NzA5ZmExNzYsCisJMHg5OWM2OWYzMCwgMHhjY2UzZTU2ZCwgMHg5YjdjNzExMiwgMHgxNzU5ZmZhMCwgMHg4MWRmOTQ3NSwgMHhjZjgwZDZmNCwKKwkweDc5MjdjYzk1LCAweDUwZjVjYzcyLCAweGI3YWMxZDU3LCAweDQxYzZjZTFlLCAweDU2OTM0NmZlLCAweDViMzkwOTBlLAorCTB4Zjc0NTUyNWYsIDB4MDdkY2M3YmQsIDB4YmZiZWEzYzYsIDB4ZTFlNTc0YmUsIDB4OWZjMjI3MzIsIDB4Yjc0MTU0ZDQsCisJMHhkNTJmYTUyOSwgMHg5NDVhNWQyMCwgMHg0YzJmOGEyZSwgMHg1ZDc0Y2I3NiwgMHgzNmI5N2Q3OCwgMHgxN2FmZDE0ZSwKKwkweGI0NGJmNGEzLCAweDkyOGZhOGJlLCAweDU0ZjcxMTNiLCAweGY5YzQ0MzRlLCAweDRiOWY3MmNmLCAweGFiODNhNDg4LAorCTB4MmYxY2NiYzcsIDB4ZDY3YmFmN2UsIDB4MWRhNzFlMDUsIDB4ZTlmNzk3OGMsIDB4NzgwM2E1NzMsIDB4ZDhlZjNlODksCisJMHhhNzNlODk3OCwgMHhlYWFkM2MwMSwgMHg4YzFkY2JhYSwgMHhiZjZmMTU1ZiwgMHgxYWM5NzkyZSwgMHg4ZDFiZTc5OSwKKwkweGFmOGExZmI3LCAweDQxNTZkMWU2LCAweDU3OWU1Y2FmLCAweDNiN2RiZTA4LCAweGI3NzE0NDNiLCAweGVmZjk0YmI3LAorCTB4ZmY3MzFkNGIsIDB4YjNiZmUyOTYsIDB4MGQ2M2E4NTgsIDB4Y2JlMDQ1Y2EsIDB4ZThmOTQyMzksIDB4MzQ0Y2U0MjMsCisJMHhmNGY4MDYxZSwgMHhiZjJlMjgzZiwgMHgyOGI3ZjNmYiwgMHgyMWNhYWEyZSwgMHhlYTI1ZjIxMywgMHhlYTFmYzExMywKKwkweDFmOTA5OWI5LCAweGYwMmY2ZjkxLCAweDJkNWU4N2VmLCAweDQ1N2NhODdmLCAweDM4M2YyMWViLCAweDFmY2M4ZmE0LAorCTB4NWZjNWRmZmMsIDB4MThjZDcxN2IsIDB4NTIxNjc2MTcsIDB4ZDFjYWI4M2MsIDB4YWM3YmM3YTUsIDB4M2RkMjUwYzksCisJMHhkMjdmODg5MiwgMHhmNTkxOWMzYSwgMHg1OTFjNmUzYywgMHhhMTJmNzE0ZiwgMHhhNmI4ZDRmNywgMHhiYjNlYmVkYSwKKwkweDU1MTg0MTJiLCAweGMyNGQ0N2E0LCAweGM0ZmQ1MWRlLCAweDY0NTM4ZTdkLCAweDU0ZmFhYTdmLCAweDU3ZmVmNzE2LAorCTB4MDhmNzRmYWIsIDB4ZmI1NDNhN2QsIDB4NzliYjczZGUsIDB4NDNjYmU3ZGMsIDB4MWM4MDBmM2QsIDB4YTQ2ZjljOWYsCisJMHgwZTRjYjhlZiwgMHhhM2RmY2MzZiwgMHhmZTQ5ODQ3MCwgMHg5MTM3NzQ2ZiwgMHg2OWZiMGMxZiwgMHhlNjA0YTM0NiwKKwkweGYzZTY0NDc1LCAweGYzYmVlNWE5LCAweGVmZDYwYTZkLCAweDBhZjRiYjk1LCAweDE2ZmYwN2Y1LCAweDU2ODYwM2UwLAorCTB4MGQ4NjlkZmEsIDB4MTM3ZDczOGYsIDB4ZDY1MWY0NTcsIDB4YmE4M2RlZTUsIDB4ZTY5OTRmYjMsIDB4NjFlZmMyNGEsCisJMHhkZjgzNWY2ZiwgMHg4YzJhMGIwMSwgMHhiNTk4ZWJiZSwgMHhlZTQ1OGJiNCwgMHhkYzMxYTVmNywgMHhmZjljOWRhZiwKKwkweDY4MDcxZGQ2LCAweDY5ZWExZmRkLCAweDAzNTc2OGRkLCAweDlkOTY0ZjlkLCAweGNmZTcwNTBlLCAweGZkMjNkYmY2LAorCTB4ZjdkOTdkZWMsIDB4YjcwMDlkZGEsIDB4MDg2YzY5N2MsIDB4YTNjMzdhZDEsIDB4ZWNmMzAxN2UsIDB4MDc4ZDU3MzMsCisJMHg3M2VkOGQ0YiwgMHgwYmY1MTgxZiwgMHg3MzQ2YzdjMCwgMHhhM2NjMDRkNSwgMHhkYmRmYjZhYywgMHhkYWU1MWYzZSwKKwkweDYwMjY1YmQ5LCAweGJjZWMxYmZjLCAweDgzYjdkNDU2LCAweGNkYjdkZmY2LCAweDVkM2JiZjhjLCAweGQ2OWY3OGVkLAorCTB4YWJhZmEyMzEsIDB4NWFiZmJmMDYsIDB4NDhmN2UwZWQsIDB4ODdiZWQxYmUsIDB4N2I0MDRjYzYsIDB4NzNjMWVjMzksCisJMHgwYzlmMzQ0ZiwgMHgxNjRjZGQyMiwgMHgyZjE3NjVlYiwgMHhiZDQxZmM1MSwgMHg5ZTczZDk5NywgMHhmOGZmNDdkMywKKwkweDhmYjgwZjQwLCAweDQ1NWNiZjZiLCAweDdkYjkyMmY3LCAweGEwMjZmOWJhLCAweDNjN2Q3NWQ1LCAweGYxZGIwYzdmLAorCTB4YmY1OGUwN2IsIDB4MDAxZDg2MjgsIDB4NGJlNzVjZjMsIDB4Y2FlYmYzYzYsIDB4ZGU4NjM3YmEsIDB4MzZmYmVkY2QsCisJMHhmNmU3ODNlMCwgMHg0NGJjNzA2NCwgMHhjMzFlNmZiNywgMHhhZmI4ODJlZCwgMHg5MjcyY2ZkZSwgMHg3ZmY1YzAzZCwKKwkweGYzMTJjMGIwLCAweGE5Yjc1NTNiLCAweDNiMWFkMmZhLCAweDU1MmQ0NTBmLCAweDIzZGFhNTc5LCAweDIxYjM1ZjgwLAorCTB4YzY5YmJmMDIsIDB4N2NmZGZmNzAsIDB4ZjEwM2E3YTksIDB4N2ZlNzdkZjcsIDB4ZTUwYjcxMGEsIDB4ZjZjZjUyZjEsCisJMHhhZTkxYzMzMSwgMHg5N2FkNWYwNCwgMHhlZTAxYzY2MywgMHhjNWEzZjMxYywgMHgxMzQxNmUyYiwgMHg3M2JlYWJlZiwKKwkweDg2ZTk2ZmU5LCAweDc0NDFkYmE2LCAweGY4ZTk1MDY1LCAweGZmZTNhMjIxLCAweGUyN2JmNDhiLCAweDIwZWZkMGZiLAorCTB4MTRmZTc0NzksIDB4ZDM0N2MzZGQsIDB4MDNiZjRhYjEsIDB4OWJlNmM4NzQsIDB4NzllODA2OTIsIDB4N2VjMWJhMjgsCisJMHhlODA2OTI4YiwgMHhmYjdlYTg3YSwgMHg5MzFmYmZjZSwgMHhlOWM2MDdkZSwgMHhhYmRkMmNiZCwgMHhkMDU5YjdmNCwKKwkweDU0MGY3YTkxLCAweGZkNzljZTI5LCAweGZlZWM4Y2Q3LCAweGY1NDYzZGEzLCAweDdlMzVjNjc3LCAweGNhM2ZlODExLAorCTB4NzJiMGFlYTMsIDB4MzdiNDdmYjksIDB4M2QxOWZiOTcsIDB4OWE5ZmJhNjYsIDB4YmUyOTVlZTksIDB4MjM1ZDBkYmIsCisJMHhmMjExYWRjNiwgMHg3NWRiYTY3ZSwgMHhlYWFmMzk1OSwgMHhmZGRmNTUwYiwgMHg0Mzc3N2M0ZiwgMHgwMDgwMDA5OCwKKwkweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGM3NTQ3NDBiLCAweGVlYmQ2MDk1LAorCTB4OTFhOTNmZDcsIDB4MTY4ODNlOWUsIDB4YzA4NWEwOTIsIDB4ZWI0MDQ2MTYsIDB4N2QzZDA1ZmYsIDB4YTcxZjMyMTAsCisJMHg5MDBiMThjMSwgMHgwNGUwOGI0YywgMHg2MGRkNDkxYiwgMHg5ZTNkOTBlMiwgMHgxMjMyMzFhMSwgMHgxZjYyY2Q5ZiwKKwkweGJkNjY3OGNjLCAweDhjMDMwZDM5LCAweGMwNzdiMTlkLCAweDBiNjExYzU2LCAweDM4MzdlMmRjLCAweDcxYzZlYzRiLAorCTB4M2M0YzljMTgsIDB4NmMwODQzYzIsIDB4YzcxOGQzNmMsIDB4YmM0YWIyNDMsIDB4MGY3YWRlZjcsIDB4MGI3NTZiZjUsCisJMHhjY2ViNDNkYiwgMHg0MGU3NTc2NCwgMHhhYWJkNWVhOSwgMHhmZWViNzViYSwgMHg3YWQzZDU2ZiwgMHhjZWNjNjMzMywKKwkweDUzZjgxN2Q4LCAweDA4YWNiYzNkLCAweDY1Y2IxOTFhLCAweGZjMDVmM2Y0LCAweGViZjJlMmRiLCAweGRmNjMyYjI1LAorCTB4YjRjYmVlYjksIDB4MmM5M2Y5NDMsIDB4MWU2NzBhZGYsIDB4MzU1ZmFmNjMsIDB4YjE4OGFjY2EsIDB4ZjZlM2E5YWUsCisJMHhmYTg3YjNlYSwgMHg4YzA4NzU4ZiwgMHgxMjdiNDMxNSwgMHhlZjc2ODY3NCwgMHgwMDc3YzE1NCwgMHgyN2QxMzExZSwKKwkweDdkMWU5ZDJlLCAweGZkNGM5ZmRlLCAweDg3OTVjZGFlLCAweDlkMzJmYWIzLCAweGFmN2E2ODYzLCAweDU5YjE4ZDNlLAorCTB4Y2EwZTliZjgsIDB4MzMyZDkzMjAsIDB4NWFlZGNjYTAsIDB4Y2NhMDEyYzcsIDB4OTYzNmY5MmMsIDB4YjEyZTYyNGMsCisJMHhmMjkzMzE4NCwgMHg2YmNhZTk5ZSwgMHgzOWYwMTVkZiwgMHhmZTgzMTk5MywgMHg1NmY1OTVlYiwgMHgwZDVkN2YzMCwKKwkweGNjY2YzMWMwLCAweDM4ODlmMWJjLCAweGM5YzlkMzdhLCAweDk3Y2Q1ZWQwLCAweGQ3NjllMzBhLCAweGZlOWZkZTFkLAorCTB4ZTRmMzI5YTUsIDB4NTcyZTM2MzAsIDB4ZmJjZGY1YTAsIDB4ZjA0Y2Y5OGMsIDB4ZWI2ZTc1NmIsIDB4ZTcwMzM2MDIsCisJMHhkMWNjNzE4NywgMHgxZTYwYTljNywgMHgxZDAxZTk5OSwgMHgyYWRiNWVlNSwgMHhhYTZiM2ZlOCwgMHhhZmU1ZTFjOSwKKwkweDZjZGVmODRiLCAweDNlMWJkZmM2LCAweDRhYzY3YWNlLCAweGUyZDljNjg2LCAweDU0ZmFjODA5LCAweDRjNDk4ZWM2LAorCTB4NmY1YjJmZTksIDB4ZjhlNzY3YzEsIDB4YjI4NTdhYzMsIDB4Y2Q2ZTUzM2UsIDB4ZWJjYmM0NTUsIDB4MDdlMWM3OTIsCisJMHg4NjBmNjc3OCwgMHhjYjFkNmY4ZCwgMHg1NTYzM2E1OCwgMHg4YjlmNjk5ZiwgMHgzODdkNmQwZSwgMHg1OGZiMzA1YywKKwkweDVmNGZlNWZhLCAweDMzNDY3Y2MwLCAweDVkMzk4ZmM3LCAweDVkNzlmODQ3LCAweDNlOTBmYTMyLCAweGVlZDRhZTJhLAorCTB4NGIxODkzNjIsIDB4ZmM4N2VjOTYsIDB4OTkyYWRjZjAsIDB4MzYwNTNlMWQsIDB4N2U1M2Y2MzMsIDB4MDQwMmI4YWYsCisJMHhjMjlmZWQwNCwgMHg3MzgwMTRiZiwgMHg1YWVmNmU5YiwgMHgxNmRkZDAyNywgMHhhMjFmNGM2YywgMHg0YzBiMjU5NywKKwkweDJlOTYzODFhLCAweDliZDRkNDQ5LCAweGVhNjljNzlhLCAweGQ0NGY1N2NiLCAweGRiNzM2ZmVjLCAweDQzZmE5YWRkLAorCTB4ZWE2YTY2MWIsIDB4MzU0YTI3YWUsIDB4ZDU5ZDU1ZjUsIDB4ZWY1NmYxOWEsIDB4ZmY2OWFiOWMsIDB4Njg2ZmVlZDYsCisJMHg3ZjllNmJlYSwgMHg3NDdmNTM1MCwgMHhlOTExY2FmZiwgMHg4ODVmMWEyMiwgMHg4OWU5OTFiNiwgMHhkMjNiMDU3OSwKKwkweDNhNGQ4OGJmLCAweDljYzVjZmZjLCAweGY3ZjdhM2QzLCAweDdlYzI3ZjIxLCAweGI3YWY2ZWJkLCAweGQ1ZmU4MmFkLAorCTB4ZTc4ZDNmNTcsIDB4YzVmNGI0ZmQsIDB4ZjkwMDcyYmMsIDB4MTdkOTU2YTMsIDB4NDAyYmM3OTgsIDB4YWQ1MjhkN2IsCisJMHhmNDQ1YmU5NSwgMHg0NTM2NjM1ZSwgMHhlZTk1MWJlNCwgMHgxMTU2MGFiNiwgMHhkYTY2YWZjNywgMHg2ZGIwYWFmZCwKKwkweDdlNDdhZWJkLCAweGViZDAxYTJlLCAweDM3NTliZTYxLCAweDIxNTdmY2I1LCAweGM3MDZmYzM1LCAweGM3YWZjYzY3LAorCTB4YTVjYjg0ZjUsIDB4OTMxOGVlZmYsIDB4NjA5ZTM5N2EsIDB4ZmMwMTdmYjUsIDB4OGNjOWFjYzQsIDB4YTNjNzQ3OTUsCisJMHg1ZGI3YTc0YSwgMHg2ZjVmNjMzNywgMHhlYWZjY2FkZCwgMHhhMDU4MmI3YSwgMHhkYTNlZTkwZSwgMHhmYzNiNjdiYSwKKwkweDUxNmI5MjdhLCAweDVlYmUxZGQ2LCAweDZmZWZmZTE1LCAweGVmODE1Zjg2LCAweGYzMjNmZjVmLCAweGRiMTAxM2VkLAorCTB4ZTZmYzg4YjIsIDB4Y2ZlYjVkZGYsIDB4MDI0MDJiYjUsIDB4N2ExNTI3YmMsIDB4Mjc4MjkxYTgsIDB4MGU5MDhiMTIsCisJMHg4MzY1MDM5OCwgMHg1MWY5OTA3MSwgMHhjMTMzZDQwZSwgMHg5NjUyODQ2ZiwgMHgzOGFmMDQxYywgMHgzMDM0ZWY2OCwKKwkweDdlNzFlYjJhLCAweGE2ODYxMDcxLCAweDM1ZWI0NWQyLCAweDI4OGRjYTBlLCAweGE5MmM0NTZmLCAweGViYzc5Y2VlLAorCTB4ODc1ZTA2OGUsIDB4ZDUyZWE4ZjcsIDB4M2VlN2JhZjIsIDB4ZWE5Mjg3NWUsIDB4NDNhZjI3NWUsIDB4NWFlZmFhM2YsCisJMHhiOGNlZjU4YywgMHgwMTQ0ODljMCwgMHg1ODI1YmVlYiwgMHg1YTFlMGUzNywgMHgwNWZmNGJjYSwgMHhlNDk5NGE4MSwKKwkweDVkZTgzODk2LCAweGVjN2VhN2E3LCAweDM3MDdhZjIyLCAweGYyZDBmYTcxLCAweGY2NWUzMTgzLCAweDVmMTliM2Y5LAorCTB4ODEzZjNjM2QsIDB4ZmRjMjRkYmYsIDB4MDA2ZmQ3NWMsIDB4ODI4YWQ0M2MsIDB4ZDVlZjBlYzMsIDB4M2Y4NzMyMGMsCisJMHhlNGQ1ZjcxNSwgMHhlMDk3ZDk5MCwgMHgzMTMzYTAzMywgMHg4Y2NmODg2ZCwgMHg0YWIxOTgyYywgMHgwZjc5M2UyMCwKKwkweGVkY2FhZGYxLCAweGU5NjhlM2UxLCAweDVhZjUxZWFiLCAweGZjM2JlYzAxLCAweGU1MTkzMWJlLCAweGZhYTdhNzMwLAorCTB4MmMxMmUwYjIsIDB4ZDAxM2Y5ZjEsIDB4ZmMzMjdiM2UsIDB4MWY0ZTFlNGIsIDB4MzJhMjVjMmEsIDB4NWZiNWE1NWYsCisJMHgzMmI2YWE4ZiwgMHg1OWI3MjYxOCwgMHg4NTU5ZDExNywgMHhkOTJjOWQ3OSwgMHg3MTZkY2I4NywgMHgyZTJmZTU1MCwKKwkweDU2ZTFjMjJmLCAweDFmMzlhZGU1LCAweGZiMWE2Y2Y4LCAweGI5OTY3YzNhLCAweGFlYjM2YTBhLCAweGQ5ZjBhYmJlLAorCTB4OTMzZTMwYmEsIDB4ODQ5NmY3YWQsIDB4MzIxMDE5ZjAsIDB4YjdkOWYwZDMsIDB4Mjc2ZTllODksIDB4ODMwOTRlNWYsCisJMHg0ZjE4MjY3NSwgMHgyM2U4MGNmNiwgMHhjMDU0OTljYSwgMHgzZTI0NDI0MywgMHhiMjFiZmI5YiwgMHg5N2M4YTIxZiwKKwkweDU4MTdmMDM3LCAweDk4N2U2ZTY3LCAweDVjZjQ1MTljLCAweGZlZTdhYWI1LCAweGRkYTJiM2E4LCAweDExN2E2N2UyLAorCTB4Yzg3YzcwY2IsIDB4ZDIzMTNiMmMsIDB4YmUzY2I1NzMsIDB4NmJiYTA2MDksIDB4OTBmODBlYTgsIDB4NjNiZTgxMGYsCisJMHgwNmRjMTUxZiwgMHhjZWM5OWJjZiwgMHg4MDVhYjg2MiwgMHgzMWUyYWFjNywgMHg3MWFkNmU4YywgMHhlYzkwOWQyZiwKKwkweGVjZjUwNWJjLCAweDRlNmU4NTE4LCAweGRmMTFhNzY2LCAweGM3YmQ3NmMzLCAweGI1OWRlNDQyLCAweDAxZjFjYmU4LAorCTB4YzcwOTM3Y2QsIDB4YmYyMjY2NzMsIDB4YzZkYjQwZDUsIDB4MzNmZGUxODIsIDB4OTlmMDBmYjEsIDB4M2U3Y2M4MzUsCisJMHgwOGVhY2Y3OCwgMHg0NmFmNTgwOCwgMHhmNDhkOWVmZCwgMHhmZTUxZWFjZiwgMHhlODA5NWY1NywgMHhlNWE1ZWEyNSwKKwkweDAwNzQ1Yjk3LCAweGE0MDEzZmJmLCAweDUxN2M4YjU3LCAweDY0MmU5YzMwLCAweDdlZTNkM2U2LCAweGFmZmRkNTdjLAorCTB4OTAzNDFmYjYsIDB4ZmZkYjBlYmMsIDB4Y2ZiMDQxOWEsIDB4ZDUzOTRlMDAsIDB4MWFmYTIwZTQsIDB4YzhjZjY0NjQsCisJMHg0OGM3YzE0ZSwgMHhiYzIxYWNiZSwgMHhhZGUzZjZhOCwgMHgxNzY4MjZmNiwgMHg2MjJlOTFlOCwgMHhmNjQwYjM3YiwKKwkweGIzNmNhN2QwLCAweGYzMDVmMzgxLCAweDg2N2E1NWZhLCAweDMwYWZjYmU3LCAweDM0ZWQxMTM5LCAweDdlZDRmM2NiLAorCTB4ZmEyMzEzNmMsIDB4M2M5N2I2YTgsIDB4Yjg0NzY3NTUsIDB4NDRjYzc2MDYsIDB4MGFiZDI0YjgsIDB4YzcxNTNmOTcsCisJMHg3MGUyNjBiZCwgMHg3ZjA4ZGFmOSwgMHhlNGZlMGFkNSwgMHg0MzMzMWQ0MSwgMHg2OTRmYmZiYiwgMHhmZjVmYTMwZiwKKwkweGZjZDNiNzIwLCAweDcwMmJjNDRmLCAweDQzZjBjOGRkLCAweDRlZDAwN2JmLCAweGU1Njg5MzA2LCAweDQzZmYwM2RkLAorCTB4NjlkY2Y3ODQsIDB4MDFkZjNmNzcsIDB4ZjAyOGFlNWQsIDB4NmU4NTZmZmMsIDB4NTEyNGRhM2YsIDB4ZjVjZDNlYjksCisJMHhjN2EwN2NmZCwgMHg3YzZlOTE3ZiwgMHgwZmM4NjZlMiwgMHhkNWY3NDQzOSwgMHg5MDI3Y2ZmNiwgMHhkOWYxNTIxZSwKKwkweDEwZjQ4NjM3LCAweGU4Zjg0ZGMyLCAweGRiODM0NGIzLCAweDM4NzUxMGFhLCAweGU1YmYwYWJjLCAweDJhNTdjODhjLAorCTB4NTc3YzJhOWMsIDB4MGJhYjdhN2MsIDB4ZTdiMzdiYzYsIDB4ZjYxYzEzNWYsIDB4NDU0YmY4MjEsIDB4ZmI4NDdlZTcsCisJMHg2NzRmYzFjZCwgMHg5MmVmODhiOCwgMHgzNDY2NzYzNSwgMHhmYzUyNjZmOSwgMHg5NjRjYTQ4OCwgMHgzZWEyYTYyYiwKKwkweDg1Y2M3Mzg4LCAweDc0Y2I4Yzc1LCAweDM2NGNiYWQxLCAweDAyZmQxZGEzLCAweGYzOTMyNzRiLCAweDgyNzM0ODYwLAorCTB4ZjdmMDhjY2YsIDB4ZDJlYzM3YTcsIDB4YTlkNmZiNDMsIDB4ZmJjMTMzMjIsIDB4MzZiY2IzNWIsIDB4MDlmZWE3NWEsCisJMHg5Mzk5ZWI4NiwgMHhkNjAzNjFlOSwgMHg2NTc3ZjNlOCwgMHg5YzExMjkzZSwgMHhiZjQ3NTA4MywgMHhhMmYxYzZjNywKKwkweGY4ZjQ2ODlmLCAweGM3NWZiOWUwLCAweGMxMGExY2Q2LCAweGVlMDJjMWNiLCAweGU3Y2Q5ZDhmLCAweDFlMTdkYWU1LAorCTB4ODQyOTc2ZDksIDB4YWQwZmRhM2YsIDB4YmRkZGQ0ZDMsIDB4Mjk3NmRiZGYsIDB4MTA2ZWRlNTQsIDB4MzY5N2RjNDQsCisJMHhkOWRiOGU4NSwgMHg1ZmY0MDRjMCwgMHhlMTNiNDU1YSwgMHg5MDM3NDNhMSwgMHgyYzZiZjU4NiwgMHhhZTBhN2U3OCwKKwkweDAwOGZlNzBmLCAweDViZTczZmZmLCAweGQyZmYzZDYyLCAweDhmZjY1MGE5LCAweGZmNjlmZWUxLCAweDBkZjkxZjI0LAorCTB4MmIxZmZjZWEsIDB4NWYzOGZmZWIsIDB4YTYzODczMTcsIDB4YjNiYTFlMDEsIDB4OWY3MGM1YmYsIDB4M2Y3YzZjNmEsCisJMHg3YTcyNTA0ZCwgMHhmNTQzNzJlNiwgMHg3MzllODY3NywgMHgzZWE1NTE3OSwgMHg3M2RlM2EwZiwgMHgxY2U5MWQxMiwKKwkweDk5NGM3NmE4LCAweDdkZTkxMWY2LCAweDcxYmJkMjI3LCAweDQ4YjViZWE4LCAweGYwOGJlOGQ3LCAweDIyMDU3M2ZlLAorCTB4MTZjMDdiYzEsIDB4YTE1YjNkYjksIDB4NWMxMzlkOTcsIDB4ZGZlOGQ5ZGQsIDB4NmM3M2FiM2YsIDB4Y2JjZTI1ODYsCisJMHhlNTFlM2FkYywgMHg3YWRiNTZmZCwgMHhlMmU2NTNhMiwgMHgzOGMwNThlYiwgMHhmNGNiY2ViZiwgMHhkMWU4MTk3OCwKKwkweDgyYjdmZTc5LCAweDhkZDYyYTQyLCAweGY4ODZjMmNjLCAweGU3MGJmNTU3LCAweDAxZDEzZTg5LCAweGQ3ZjJiYmZkLAorCTB4NWRkZDcxOTksIDB4MWM2NmY1YjYsIDB4ODJkNjg0Y2YsIDB4ZWEzYzM4NmUsIDB4ZTZlYzBmYmEsIDB4ZjRjYmNlZjMsCisJMHhiMmU5ZTA4OSwgMHhjNTdiYjliOSwgMHhhMzNmYTgwMSwgMHhlZTVlN2JhYywgMHg2YWFmNmEzYSwgMHgwOTE0OWZmNCwKKwkweDQzNjdlMDdmLCAweGY1NjhlOGRkLCAweDg3MjYzY2UyLCAweDNhYzI0NmJkLCAweGIyYzY2YzczLCAweGVjODk3ODRmLAorCTB4MGRiZjU1MTMsIDB4OWRhZDRmZTksIDB4OTFiYWZhNzIsIDB4MTVkNzYzZTQsIDB4ZjI0NGNmOWQsIDB4MDczMDVlNTMsCisJMHhiY2FmOWZkZSwgMHg3YjcyMGQ2ZCwgMHhhM2JmNmJiZSwgMHgxY2Y3YzQ1ZiwgMHhmM2UzZjkwMiwgMHg3NjRkYmY3MywKKwkweDJlNzczNTlkLCAweDU2YjNlN2I3LCAweDk4NTQ5MTc5LCAweDNmYTFmMDRmLCAweDViYzU0ZjMxLCAweDE5NWY1NjllLAorCTB4YTBiNzE3MWQsIDB4ZDRkZTMwZmEsIDB4MmM1OWQxZWEsIDB4MmFiZTkwYzAsIDB4NzBmM2ZjYzIsIDB4NDBiYjNiN2QsCisJMHg1OTcyZDdiMSwgMHgyZDJiZGEzMSwgMHhjODYzZGYyNiwgMHg0MjBkOTYwZiwgMHhlMmExYzIzYSwgMHg4ZTgxNDU3NSwKKwkweDdjODYyMGU4LCAweDk0MjY2N2IwLCAweGI0NjVkOTVkLCAweGQzY2NmYWFmLCAweDVmOTgwNDE3LCAweDQzNjZkZjE3LAorCTB4OGNkYmQwYmUsIDB4YjMxYmM0N2UsIDB4YTgwZDFmOGEsIDB4ZmZjMjRkZjMsIDB4YjdiMjI1MzMsIDB4MmY4NDhlYjAsCisJMHhmYzc5Mzk3ZCwgMHg4NmM3OTY2ZSwgMHhiMDMyZWNlYiwgMHhhN2YyNDhhNiwgMHhmZGYzODBiNiwgMHg5MjdlNTkwNywKKwkweDhkZGFkMTBmLCAweDdiZDIwNDFiLCAweDY2Mzc3Y2FhLCAweGMyMzdkOTMyLCAweDVjOGNkYjc4LCAweGQyNWY4MGNlLAorCTB4M2ViZjQwMmIsIDB4ZmZhMDE3YTQsIDB4ZjdiMzVhMTcsIDB4N2JhMjA1ZTksIDB4YWRmMWU1MTksIDB4MTJlZmIxNTIsCisJMHhmZTFmYjkwYiwgMHhjYTg5ODE2NiwgMHg1NDdlY2E5MywgMHhjMzM2NzE3ZiwgMHhhZmZjODIzNSwgMHg4NDMwZjJhYSwKKwkweGM3Y2E5NGRmLCAweGYxZjI2NTMzLCAweDczMmYyMjRjLCAweDJlM2Y3MTk1LCAweDVjZGM3Y2UyLCAweDVmYjk3YjE0LAorCTB4ZmI3YTMzOWEsIDB4OGQ3YTRiMWMsIDB4OTAyODUyODcsIDB4OThkZDc5ZTgsIDB4YzUyZTQ5ODcsIDB4YTMzOTZmMTIsCisJMHg1ZGEzMzc4OCwgMHhhNzA3M2ZhMSwgMHg3M2ZkYjUxMywgMHhhYWZmZGU0NSwgMHhiMjc0ZTYyMCwgMHhlNTE0NzJiNCwKKwkweGE0ZTkyYzQxLCAweGRlODNjZmUyLCAweDc5ZmY5N2NmLCAweDY4ZGE0N2VjLCAweDk5YTNlM2FlLCAweGUwNDJkNGYyLAorCTB4MmU5Y2JmOTMsIDB4OTZlNTgzZGYsIDB4YmJkYjIzZDcsIDB4NzcyZjYzZjMsIDB4NzI4MDFlZDMsIDB4MzdkZjA0ZjEsCisJMHg3OWIzZTkyMywgMHhmYjk3YjE4NSwgMHg0OGJlZDE0YiwgMHhmODQ1ZjZlMSwgMHgzZDE1Y2JmYywgMHhkMjc5NGIxNCwKKwkweDExYjM2NTA0LCAweGZmMDExZmQ2LCAweGZjYzI4ZThmLCAweGVmNTA3M2NiLCAweGU1ODE3YjcyLCAweDBmYTRiOTllLAorCTB4NjdlMWRmYjEsIDB4M2VjNDJlYjIsIDB4MWMxNDdiMDYsIDB4MDU0M2I0NDEsIDB4ZWRkZDkyMzksIDB4MmQ3ZWZkOGQsCisJMHg2NDNmNDg3ZCwgMHg1YzYxY2NhZiwgMHgyZmYzYTgxZiwgMHg3YWY4ZTEyYywgMHhiMGUwMTQ3YSwgMHgyNWVhZGUwMCwKKwkweGMyOWJhZjZlLCAweGJmY2I1MGUwLCAweDdkYmQ4YzJkLCAweGUwNDNlOTJhLCAweDFmYmIwNTQ4LCAweDQ0NDIwNWNiLAorCTB4ZDBhN2FmN2IsIDB4MWE3ZTczMTgsIDB4ZTJkOTc4MGIsIDB4ZTQ5MThkNjAsIDB4ZWZkOGM5YzksIDB4Y2EwZDlhNGIsCisJMHhkM2NlZTlhYSwgMHg0Yjk2ZDcyOCwgMHg1YzYwZTc4NywgMHgxZmY4ZmJmOSwgMHg3OWQyMWJlNiwgMHhjMWE1NjFiZSwKKwkweGFlZmY0NWU1LCAweGJjM2JiMjRiLCAweGFjNDc4Yzc2LCAweDdjY2FmYWEyLCAweDUyYWY0M2JiLCAweDk0ZGZiNjNlLAorCTB4NmMwNWRiN2MsIDB4ZTU3ZDUxZDcsIDB4ZGExZjI0ZWYsIDB4ZDYxN2RmYzMsIDB4ZjFjNmM5OWQsIDB4ZmIxZGViMzYsCisJMHg5NTlkYzYxOCwgMHhlNzhkODM3YywgMHg5ZTM2YWMxYiwgMHgzYzZkMTA5ZiwgMHgyOWI1NjBlZiwgMHhjZjFiMDc3OSwKKwkweDRhNmQ1ODNiLCAweGYzYzZjMWRlLCAweDkyOWI1NjBlLCAweGJjZjFiMDc3LCAweGU0YTZkNTgzLCAweGVmM2M2YzFkLAorCTB4NzkyOWI1NjAsIDB4M2JjZjFiMDcsIDB4ZGU2YTZkNTgsIDB4MTUzOGQzYzEsIDB4OWUzNjkxZTMsIDB4NzhkYWIwNzcsCisJMHhlMzZhYzFkZSwgMHg5Nzk4MDc3OSwgMHgzYzZjMWRlNywgMHhmMTcwMDBlZiwgMHg3MjJkODNiYywgMHg5NDNhYzFkZSwKKwkweGYxZmYyMDc3LCAweDY3YTQ5NjE4LCAweDU0N2Y1ZmI4LCAweDdiMDZjZmE5LCAweDc4NjMzNGRkLCAweGU3NmFiNTVlLAorCTB4MTcxODJkZmUsIDB4ZmM3MjA5YWIsIDB4NWU3ODM5NTUsIDB4NzdiNDE0ZDksIDB4NDU3ZTMwMGEsIDB4MDRkZmIwNjYsCisJMHgxMTQ1NjVmZSwgMHhiMGQ1ZjBjMywgMHgxM2YzYzNmOSwgMHhiZGU3ZDlkZCwgMHhiMGEzZmEwMiwgMHgwM2JjMjk5NywKKwkweDE4ZWEyOWU1LCAweGZlN2MzZjdmLCAweDNiNTc3MTYxLCAweDY1ZDZlNzhmLCAweDNiZjA4YjdlLCAweDc4NDgyY2JiLAorCTB4ODcxOGU3YzMsIDB4MTNmMjUzYWQsIDB4ZmZhZDU2YjUsIDB4YjJlNjdmMmEsIDB4OTk1ZjcxZjksIDB4ZjgwODk5ZDQsCisJMHhiYjZkNDU5MCwgMHg4YzJmZjk4OCwgMHhkN2YxNWViYiwgMHg2YWI3ZGM2MSwgMHgxNTc3MWI1MCwgMHhiOGQ0MWIzMywKKwkweDg0NGJjZjNjLCAweGUxZGYzOWMxLCAweDZiMDQ1ZjFjLCAweDJhN2YwMTZhLCAweGMxY2ZlNjAxLCAweDUzYWUxNWE0LAorCTB4YTQ1ZTdjMTIsIDB4ODgxYmRkYjcsIDB4NDUzYmJjYmUsIDB4YWE2ODE0YzcsIDB4OWU2MDY0MDQsIDB4NmEyMDEyYTUsCisJMHhjNjU0ZDI4NiwgMHhmMjRjZDJhYywgMHhmZTlkMzg5YiwgMHhmMWJkZDRkNywgMHgwMzBmMjhkOSwgMHg2YzA0NDY3YSwKKwkweGY5YTgzYzIzLCAweGJmNTgwNDg1LCAweDJiZmM4MzM0LCAweDMzMmFlZmYyLCAweDNhNDdiZmZkLCAweGNjODJlYjUwLAorCTB4NWQ4MjM4ZjMsIDB4MmY4MGNkNjIsIDB4NWMyNjZlZjksIDB4Y2VhYjkzMzYsIDB4NDVlYjZmOTAsIDB4NzNjMzM1ZTYsCisJMHg5YjM3ZTk0MSwgMHgyZDRlMjkwNSwgMHg3NmYyODkzMywgMHg2NTQxY2NiNSwgMHg2OTU3NzRkMSwgMHhjZWEzZjAxMSwKKwkweDdhZTE3NWVjLCAweDA5NjZlY2FhLCAweGVlM2Q4NWY5LCAweGYxNDhkYjNjLCAweDMyZTk3YWU0LCAweGY2MDA0OWUwLAorCTB4NDhkYTYyZjgsIDB4MmVjODhhNzYsIDB4NDUxY2Y4YWIsIDB4MmYxZjQ4YmIsIDB4YWRjOTIyNzgsIDB4NjFlYmQ4OGEsCisJMHgwYTJhODNiMiwgMHgyZGM3YzkxOSwgMHg3Y2ZjYjIyYywgMHhjZmNiODRhYywgMHhkZjVkNGIzNywgMHhmYmQ3M2M0NCwKKwkweDg3OGZkNTE2LCAweGQwYmU4ZjJlLCAweDZkOWI3OTRhLCAweDViYzJmMTYxLCAweDZmNjI4YWZkLCAweDkwZTcyNDQ3LAorCTB4ZTkwMWI5M2QsIDB4OGYwNGYxN2EsIDB4MTY4OGUxMGQsIDB4ZjYyYTc4YzcsIDB4MWI0OWVjZjAsIDB4NzY3YmFlYzEsCisJMHhkNDVhZWMxNCwgMHgyYWVjYjc0MywgMHhmYTkzOTlmYiwgMHhiMWNhM2I1MCwgMHhkMGJhNGYwZSwgMHg5MDkyYmFlZiwKKwkweGMzZGRhYTM4LCAweDhkNjcxNDNjLCAweDY5NzlhZjFjLCAweDk5MjBlMjE0LCAweGZlMTNiZmE4LCAweGVhNjM5ZDBiLAorCTB4ODdmYjAyM2EsIDB4NTRiY2ZiZTUsIDB4NDI4ZWY4ZTEsIDB4NjM0YmUzODcsIDB4YTBkMzE3Y2YsIDB4NjEzZTI3ZDQsCisJMHg3NzFiOGQwYiwgMHg5NzBlMDQ1OSwgMHhmNWMwZDA0MSwgMHhmZGZmNjJiOSwgMHg3OGY2MjRhMCwgMHg3ZDcyODEyYSwKKwkweGYyMmVmY2E5LCAweGY5NzRkNTYxLCAweDdjYWE1ODY3LCAweGJhZTFkZjNiLCAweDJkMjlmYzQwLCAweGY5MDI0ZmFhLAorCTB4NzY3ZjY2YmMsIDB4MDY4OWVhMDEsIDB4MmFlMzVlZGIsIDB4NTJkNWY3ODAsIDB4M2EyMmZkZjksIDB4NWIxZmY0NmYsCisJMHgxZWIxNmUxZSwgMHhmN2JjNDc4ZiwgMHhhM2NiMjJiOSwgMHhjNTA5MTFiYiwgMHgyOGRlNGZlNCwgMHg2N2U0ZmVlMiwKKwkweGZlMjg4Nzg0LCAweDYzOGJhZmU0LCAweGVhN2IyZmJlLCAweGM5ZmM4NjczLCAweDViMWZmZTcwLCAweDYzOWRlM2NjLAorCTB4MDY4ZTAxNDcsIDB4ZjE0NjU3MjgsIDB4YzI4Y2E2ZWIsIDB4YmY1YThkZmMsIDB4NDQzZWJmNmUsIDB4ODU0MTEwY2UsCisJMHhkYzZjNjllNiwgMHhmYzExNjNhZiwgMHhiYTM1OTczZCwgMHgxNDdiMzdiZiwgMHhmMzEwYjFkNiwgMHhmNTkxYjU3MSwKKwkweDMxYzU3ZGRhLCAweDdlOTZhZmY3LCAweDMzMDdjYTAzLCAweGQwYTlmZDViLCAweDZmMzBiY2M0LCAweGIyYmU1MGRhLAorCTB4MGZhZmQ1YzksIDB4MzgzZjczOGQsIDB4ZTUzN2UwZTEsIDB4YjM3ZTcwMDgsIDB4ZjI3MmU2MzgsIDB4ZjkxZTljN2MsCisJMHhlMTE5YmQ3NSwgMHg3ZTA2NmFlOSwgMHgyNTVmYjA4ZCwgMHg5YmZmZGMyNSwgMHg5NjExZTEzYiwgMHgzYTYzNzY4OCwKKwkweGU0MTFmNzQzLCAweDM2MzdjZjA5LCAweDgzNjM3ZTI5LCAweDJhNzY3ZmEyLCAweDJjNTNkNDcyLCAweGU1MmNlOTUyLAorCTB4ZTg1MWI5ZjUsIDB4ZmJjYWQ3ZmEsIDB4YjY5YzRhOGQsIDB4MmJmMjYyNTEsIDB4ZWM3ZmY0OTEsIDB4MzhmY2U2ZTksCisJMHg3MWM2ZTcyOCwgMHhmMzBkZWYzOCwgMHhmNDUzZGZjZiwgMHhkM2Q4OWVjNCwgMHhhMDBjOWVjZiwgMHg5MWI1Yjk5MywKKwkweGY2MzA3NWYxLCAweDAyNzRiMTc0LCAweGY2ZDRiZmNjLCAweGY4OTAxY2Y0LCAweDBkOWIyZmIwLCAweDJlOWM1Zjk0LAorCTB4ZWYwYzU4YmYsIDB4NTdjMjhiNmQsIDB4Njk3ODJiOWYsIDB4YjAzYTNlODYsIDB4MzRhMDViZmIsIDB4OTAxMGY5NDIsCisJMHhmYTQwNTQ4MSwgMHg2ZmVjNTVlZCwgMHgxNDMwOGUwMSwgMHhmMWRlMDQyMCwgMHgzYWY0ZTdlOCwgMHhjZTdjMWVlNCwKKwkweDdmZTQ2ZDVjLCAweGNhMWJjODg0LCAweDM5OTk1NjlmLCAweDgzYTc3NGRmLCAweDBlZmU4OGZmLCAweDkzMzlkMzMzLAorCTB4OWZjZjIwYWUsIDB4ZmNmMjY1NzYsIDB4NmEzYzM4NjgsIDB4NDU2ZmY0ZmUsIDB4NzFjZjE5OGYsIDB4YzQxNjY1NzcsCisJMHhlYmRkZjI4NSwgMHg2ZjI2OTg5YiwgMHhlNzg1NzVkYywgMHg4YTRmYzE4NSwgMHhjOTQ5ZmFkMywgMHg4Zjg1MjdlNCwKKwkweDc0Yjk5MDlmLCAweDI0N2ZhODVlLCAweDAyMWZkY2M4LCAweDVjNTAyNjdmLCAweGE5MTdlNDNjLCAweDdjOThjZmZlLAorCTB4N2ZmMTVjZjksIDB4Y2QxZGZkMDIsIDB4NDk0NzExOWYsIDB4MDczMDhiMGYsIDB4NzRkZGZmM2UsIDB4OGYxMGRmZjksCisJMHgxZmQzZDAyMywgMHg5ZmQzZDBhMywgMHgzNDdmZGZiMCwgMHgxMWNjNjI3YSwgMHhmMGNjNjhiNywgMHgxZWIyYmI3MSwKKwkweDcwOGViNWI3LCAweGQzMjEyMDNmLCAweDU0Y2U5MTE5LCAweDliN2EwMmZhLCAweGU4NzYzMjUwLCAweGI0ZjMyMTdkLAorCTB4NGIxMzZmNGEsIDB4YmQzZWJmOGEsIDB4ZjBiZWMwNWQsIDB4YWZlMWFjZWYsIDB4ZDE0OWQ2ZWMsIDB4N2FiNTlkZmIsCisJMHhmYTBmMjhjYywgMHhmMTliZDczMiwgMHg5OWQ0YzQ5ZSwgMHg2YmNlMDcyZSwgMHgwMDZjOTkxMSwgMHgzZTVjYmIzOCwKKwkweDAwN2I5ZTMzLCAweDY0YmYyZjNiLCAweGNkYzFiYzg0LCAweDdlM2YyZTIyLCAweGRjZmZlY2FkLCAweDJhZmY5YzA5LAorCTB4N2RiZTBiOTYsIDB4NmM0ZDdmYzAsIDB4NGRmNzAxOTcsIDB4NDk1OGZmN2QsIDB4N2I4OGZkZWMsIDB4MzVlZTQ4NzIsCisJMHhmNzIwOGM5NiwgMHhlMmY4NTY1ZSwgMHgyYjVmMDU3MywgMHhlNzI5ZDZkYSwgMHhmYjQ0NTg5OSwgMHhmZGVjNTU2NywKKwkweDk0MmIzNDhjLCAweDQ1ZDc1MjczLCAweDc0NWJlM2E0LCAweDIyODVlNzg3LCAweGUyMTQ2N2FjLCAweGU0YzdlN2UwLAorCTB4Y2Q0YzNjZTAsIDB4ZmM0MDZkMmIsIDB4ZjFjNDU2M2UsIDB4N2RmZWNkMTcsIDB4YjNmYzE0NmEsIDB4NGFkNzAwODksCisJMHhmZDAxOTlmNiwgMHhjN2ZmNTk2OSwgMHgxMWU3NDhhYywgMHgzOWQ5MTU4ZSwgMHgwMzkwMDY5YywgMHg1OTk1ZGY4MCwKKwkweGZjMzFiN2JhLCAweGI1YTQ5NWQ5LCAweDY3ZjdkNDg3LCAweDY3YWVmZTJiLCAweDUyNjdlNDE0LCAweGYxYzNjZTBlLAorCTB4NGMwZTdlMWEsIDB4M2VjNWNmMmQsIDB4ODhiNGIwMWUsIDB4ODBmZmI5ZmIsIDB4NzNmYzBlZmMsIDB4ZTM1OGE0YTgsCisJMHg2NGE4ZmVlNywgMHhiNWY3M2Y2NCwgMHgxYWRjOGY3ZiwgMHhjYmE4ZTg1MCwgMHg3ZDllZDkxMSwgMHg0MGZiZjYyMSwKKwkweGRkNjBlMGU3LCAweGI5MTU3Y2VmLCAweGFhNmY2ZTExLCAweGRiZDg5ZWU1LCAweDdhNTk2OTdiLCAweGQxYzM4NzljLAorCTB4MjRlN2I0YzgsIDB4MjhkZmYxNmUsIDB4OGY1ZDJkZTAsIDB4NzdlOTY4ZjMsIDB4NWZmYWUzMjUsIDB4MWE1OGMzODUsCisJMHhlNzhjNzNmMywgMHhmZjMxZTg2NywgMHg3ZDc5ZjljMywgMHg5NGJlMmJhOSwgMHgxOThmMzZlYywgMHgwN2Q4MzdmNSwKKwkweGI5NWY2NzE0LCAweGNkMWYyNTM5LCAweDZiNjdkODJhLCAweDkzYmU5NmE5LCAweGVmYTY0NzRhLCAweDQwM2JkMmU0LAorCTB4ZmM5Y2FhZGYsIDB4NTM0YzYxMTcsIDB4YTg5OWJjYTgsIDB4YTU2OTliYzgsIDB4MjlhZmRmYjEsIDB4OGU0OGFmMTgsCisJMHg2MzJiYWYyYywgMHg3M2RiZTcxZiwgMHg3OTc0NGU3NywgMHhmYjM3OWVhYywgMHg0ZjFiNDE0NywgMHg4ZjI1YmQ2ZSwKKwkweDY5NDc0ZTYzLCAweDc5MjFmYWE5LCAweDcwODdlYWFjLCAweDVlODY4ZDNjLCAweDBiZDEwYzQ4LCAweGNjZTQ1MTBkLAorCTB4MzYzMWMwNjgsIDB4OWRiNTFmMDQsIDB4OThhZmU1MDIsIDB4YzBhNmY5OGQsIDB4MzlkODlkYWYsIDB4OTZjN2RlZTQsCisJMHg0ZjEzODg1MSwgMHhjODdmOGQwZiwgMHhhMDQ3YWY2MCwgMHhiMWE1ZGRlMywgMHhiY2EzN2ZjZiwgMHhkYjdjMzdlOSwKKwkweDQ3ZjlkMjM2LCAweDI4YzVkNWEzLCAweDMxNzM2MjNmLCAweGIxOWZlYzNiLCAweGY2ZjI5NWIzLCAweDk0YWQwNWM2LAorCTB4MDI5ZDY2ODcsIDB4ZjQ5OGZkZTUsIDB4YWI3OWY5MmUsIDB4MzBhN2RlNmMsIDB4OWU1YzM2N2QsIDB4NWUzOThkNmMsCisJMHg5N2Q4NzI4YiwgMHgyOGM1MzdmNiwgMHhmOGViY2Q3ZSwgMHgzN2Y5M2E0YSwgMHgxNTNjYTNhZiwgMHhiMzQ3ZWUyNCwKKwkweGY3NGVjYzBkLCAweGI5N2NhZmE0LCAweDIwMmY1OGZiLCAweDlhMmYzMDEyLCAweDc2M2VlOGM0LCAweDdhYzdlMWE3LAorCTB4MDUxYjQ3Y2MsIDB4ZTY1Y2ZlM2UsIDB4OTc0ZmY5ZTcsIDB4ZjBhM2ZjNzcsIDB4MzFhMGU1OWUsIDB4N2Y1NDNiN2YsCisJMHhmYjRkOWE1MSwgMHhjZmU1NjlkZSwgMHhmMzliZjZiYiwgMHg5ZWE1ODQ5ZiwgMHhjMTllMTViNiwgMHhhNzUzZTFmMywKKwkweGVjMWM1MzI3LCAweDZiOGYwM2M1LCAweGJjNWFlY2VjLCAweGRmN2U4MGM3LCAweDdlODYxZTBiLCAweDM1ZDMyOWEyLAorCTB4OWMzYjI0NzEsIDB4YWU5MjdmMzEsIDB4YTg5YTUwOGMsIDB4ZmE1ZTdhOTQsIDB4Zjg2ZDlkMDUsIDB4ZjdmNzNiZmIsCisJMHhiZDY3ZTg0OCwgMHg3MjRjYzA3OCwgMHg5ZTgxZWE3ZiwgMHhlMzIxNTVmOCwgMHgzZTcxOTYyNywgMHhmZTNkMDZiNiwKKwkweDM1YWYwMDE5LCAweDA5MzI3M2QzLCAweGY5MmIxZGVmLCAweGNlNzk5MTczLCAweDYzMmJjMmQ0LCAweDBmOWQwMGE0LAorCTB4NmI1NzkxZGYsIDB4MmViYmE1MGUsIDB4Nzk0Y2Q2YTksIDB4NjM5ZDVjZTQsIDB4ZmNlYjFkOGEsIDB4ZjRmYzQzMWMsCisJMHg0MDgyZmRkYSwgMHgxMTJlZGQ3ZSwgMHhlMTlhZWY1MCwgMHhlYzdhODZiYSwgMHhjM2ViODkwZCwgMHg0OTZiNTNhOSwKKwkweGU3MmE3NWFiLCAweDJkZTQ3NjFlLCAweGM3ZWY4MDM5LCAweGYxYTdhZjRmLCAweDdiNjQ1OTNiLCAweGU1YzY1OGNjLAorCTB4OTkwNjhiZjAsIDB4ODBmMTdkZTYsIDB4NTVjOGU3NDgsIDB4N2M2OWRlYmMsIDB4MGYzMGNiZDYsIDB4YTZkZWEzZTAsCisJMHhhN2Q4N2JhNywgMHhlNTExNGU4ZCwgMHg4MTM0ZTlkMCwgMHhkZjJkODJlZCwgMHhlZTg1NzhlOSwgMHgwMjg4ZWM5OSwKKwkweGI5NGEyZmVmLCAweGE5NmNjYTlmLCAweGY3YTc3ZjQ0LCAweDc0OGYyZTc3LCAweGJmYTU1ZjdlLCAweGE5NjQzM2M5LAorCTB4NDljMGVkMGMsIDB4ZmY5NDI2OWUsIDB4MzZlNGI2Y2MsIDB4ZGYyNGYxN2MsIDB4ZTY4NzQzYmYsIDB4Y2ZmYzAzY2YsCisJMHgyMjdmYzE3ZCwgMHg2YjIxZjcwZSwgMHhmNzVjNzhjZiwgMHg2YTc2YTUwNywgMHgxZjBmNDViZiwgMHhiMGY0NDJiZCwKKwkweGUzZWZjOGM1LCAweDhlNzE3NTc4LCAweDg1OGViMDAzLCAweGNmMTEwMWQ2LCAweDgzNTIxODRmLCAweDJhNmRlNzk0LAorCTB4OGI3NGYyZTMsIDB4ODE2MzBmY2EsIDB4N2QzZGUwMWYsIDB4YzUwN2JmMDYsIDB4Y2VhOWRhMjYsIDB4ODQyNzA3MjYsCisJMHg1NTllYTNkZSwgMHgwNTk3YWNhNiwgMHhjMmY5ZjEzMiwgMHhkODM3NzdmOCwgMHhmNjE1OGMxZCwgMHhiMDhiMzdhNiwKKwkweGVmODk4NWZlLCAweDdhODZjODZlLCAweDVlNzhlZjQ5LCAweGIzZjc3OGNmLCAweGIyYjE4OTZjLCAweDlmNWUwY2RlLAorCTB4OTM2N2VlZjYsIDB4OWJkMTVlYTAsIDB4MzA5NWViYzksIDB4OWJiMDc4ZDQsIDB4YmQ5YWIzN2EsIDB4YTRiZTM4NzksCisJMHgwZjE1YmYxOSwgMHhmZDdmMTQ3MiwgMHg0NWQyNmY1MiwgMHgyODM1NWY4YywgMHgwMzFmODdlYiwgMHhmYmVjZTNjZSwKKwkweGUyZWYzYTQ3LCAweDc4ZmQ1YjM0LCAweDg2Yzk4MzJlLCAweDM0MTlmOGIwLCAweDYwNzdkYzg1LCAweGZmMjQwOWE5LAorCTB4ZjMwYmZiZDQsIDB4ZjYzZjdmNDUsIDB4ODRmZDk5ZDcsIDB4Mjc1OWJiZGYsIDB4YWQ4MDczZDksIDB4N2UxNDVmZGQsCisJMHg1YzJlN2I3OSwgMHhjOGQ5NmRlZSwgMHg4YzRlNzg1YywgMHhlZjA5NjZiMSwgMHhkNjRjMDgzMywgMHg3OGUzYzE3ZCwKKwkweDg1NWY5YzRlLCAweDE4N2Y5ZDQ3LCAweGM4YjViMDVjLCAweDNkNzA0MzlmLCAweDcwYThlMzRmLCAweDc5MzdjYjVkLAorCTB4NmI3YWRlNTEsIDB4MDQyN2FlNTksIDB4ZTA4NGQ3NGYsIDB4NDU2YzE4MGYsIDB4MGYxZGFjZGEsIDB4MWI1ZDNlZTEsCisJMHg0MDIwOWMxMywgMHgxYjdjYjkzZCwgMHhiMWI1ZGJlZCwgMHg4ZTA4MWZjMSwgMHhlZjgxYmE5MCwgMHgwOTZmNWI2MywKKwkweDI4OTc2M2VkLCAweDliOWQyMWI3LCAweDIxNmVkNjhjLCAweGI4ZWViMTkxLCAweGU2MGMxOTg0LCAweGU1ZDYzMWQ5LAorCTB4NDA2ZTdiYzUsIDB4ZDhlZjc0NzcsIDB4MWM3NDY1OWIsIDB4OGJlYjM4MDAsIDB4YzdhMWY5YjQsIDB4ODNmYjNhMTUsCisJMHg5OGU2MGYyMiwgMHgwMWNlNzk3NiwgMHgwNDdiYmE1ZCwgMHhkYzcwZjc4NiwgMHhhODhjMzc4MywgMHg1ZGY2MTZmZiwKKwkweGE0YmU2MjM0LCAweDExYTJlN2EzLCAweGViMDNiZWU5LCAweGYzYzc0ZTMwLCAweDZmZjk4OGM2LCAweGJkNWViOTYzLAorCTB4OTFlNzRhMmYsIDB4NGYxYzRiZDYsIDB4N2FlZWIyYTcsIDB4ZTllMDE1MmEsIDB4YmRkMDJkNTgsIDB4OTI0N2Y1YmMsCisJMHg3ZDdkNjBlNiwgMHhiMTkyYWUyYiwgMHhlNzg3NTVlNSwgMHgzOGI0YjkyMCwgMHg3MmMyOWZmYiwgMHg5NTM4MWIyNSwKKwkweGNjYjQyNDBhLCAweDEwZjY2N2E1LCAweDRkNjJiOTNkLCAweGU4ODdiMzNjLCAweDhhNGYxNmM5LCAweDE3NzJiZWE2LAorCTB4MjgwY2NlZWMsIDB4ZmE2ODY2MzcsIDB4ZWFmZWU1MzEsIDB4ODNmNDM2MzIsIDB4OTQ5YTk4ZTcsIDB4ZGI2NjVjN2QsCisJMHhlZWI4YzAxOSwgMHgzYmMxOTczMiwgMHhjMmRlMzIxMCwgMHgzMjYyY2RiZSwgMHgxYzExZWRjMiwgMHhjYmQyOGQ3NCwKKwkweGUwYWQzZmNmLCAweDFjNTI4NDJiLCAweGY3Y2YxZjdhLCAweGVmYzQwYWY0LCAweGJhN2E2ZDFkLCAweGNiZGNkM2M3LAorCTB4MzVlNmFlZWQsIDB4MjAyZWNmODIsIDB4MGRiZGY4MWUsIDB4ZWQ0MGFmNzcsIDB4ZWJhN2RlZWUsIDB4MWJlZjExOTMsCisJMHg0NzAwMGYwMCwgMHg3ZDg0ZjhkYSwgMHg5MzQ3MTEyYywgMHg0YWQ1ZGNlOSwgMHhkZjc3NTYwNSwgMHhiMzhlMDMzOSwKKwkweGRkMDIzYmUyLCAweDliYmY1NTY3LCAweGIyYmZjMmEwLCAweDkxY2U5MWE5LCAweGE0NWU3YzAxLCAweDRkOWQ3NTRmLAorCTB4NWNlOTQ3ZjYsIDB4OTc4OWNhZDUsIDB4NjE4N2E4MGQsIDB4MzQwNjk3N2QsIDB4NWJkNmQ0ZjgsIDB4Y2FmYWRhM2MsCisJMHhkMWZhZGE4ZCwgMHhmMjllZTUzMiwgMHhmOTBkMzYzNCwgMHgyMDk5NzhlOSwgMHhiNTI0MzllMiwgMHhmOWQ2NTFmZSwKKwkweGU3NWVmMWI3LCAweDBhNzlkMTZlLCAweGU4Y2RiM2U5LCAweDdlZmE4MTlmLCAweGJhYTJlOGI3LCAweDNiY2YwZWRhLAorCTB4Zjg5ZGYxMTgsIDB4YjFmMTAwZTEsIDB4YzViOWZjNDAsIDB4ZjgzNTRiMjAsIDB4ODE3Njk3M2QsIDB4YjYwNTc2ZTgsCisJMHgwZjY3ZjNhYiwgMHhmZDc1NGZiZCwgMHg1NTRkZmFmMCwgMHgxYjljNWFlZSwgMHg0NzMwYmJlOCwgMHg5MGVkMDkwNSwKKwkweDkzMTY1MTdhLCAweDIyMmY4OGYzLCAweGJkZjk3NzllLCAweGEzNmYwN2MyLCAweGVlYjgwM2Y2LCAweDdkODUyMjQyLAorCTB4NDRmZWViYmEsIDB4YmRlNjE3OWYsIDB4M2E1NmNkZWIsIDB4MjE1Nzc2ZTcsIDB4ZjkxZDgxZDAsIDB4ZDZlNzQ3NWUsCisJMHgyZjc5ZTNlNiwgMHg3OTAzZWYyOCwgMHgyZWYyODE2OCwgMHg5MjI2YTFmZCwgMHgxMjhkMzNlZiwgMHg5Y2U1NzdjOSwKKwkweGU0MmYyYTk3LCAweGI2ZTdiNTE3LCAweDIxOWU2N2U2LCAweGU3YmVlYjNiLCAweGI1NzlkMjc2LCAweGMxNzIzOWM5LAorCTB4MmQwZmE4ZDMsIDB4NDcxZGZlN2MsIDB4MTg2NmRmMDQsIDB4MzRlZjIzYTcsIDB4MzI3MWNmYzksIDB4NjFkNzJmM2YsCisJMHgyZjY4ZTQ1MywgMHhmZDc1NTFjOCwgMHg1MGUzYmZiMCwgMHg2OTIyNjFhZSwgMHg5YmNkMWU0MSwgMHg1ZGE5NTY2ZSwKKwkweGY4MjgzOTI2LCAweGZmZTg3NTZiLCAweGRkZTY1MzhlLCAweDc1YTc2ZDVmLCAweDQ4N2EzZGE3LCAweDMxNjc3NWMwLAorCTB4ZTYwMTY2ZWYsIDB4N2MzYTgyYmIsIDB4NTVmOTUwZWMsIDB4ZjhiNWQ3ZWQsIDB4NTY1ZGU4MGIsIDB4NWI2M2I1YWYsCisJMHg2NWUzZDc0NSwgMHg2ZGJiNWYzMCwgMHgyZGNmYzhjMCwgMHgxZmE4OGQwNiwgMHhkZWY4ZTBlZSwgMHhmMmMzZTM0OCwKKwkweDUwZWU3NDc1LCAweDQ3MzBmYmUyLCAweDc2ODA5ODNmLCAweDM5YTNmYWNlLCAweGY2MDhkOGUzLCAweGQzYWNkZThkLAorCTB4MTQ4MzExYzgsIDB4ZjMzNzkxYTcsIDB4NjdmMmI1NzMsIDB4NzcyYjQzYTEsIDB4YTM5NjUxYmUsIDB4NGYyNDVmNjksCisJMHhkZmRmYjRkMywgMHgzZmE5YTg1OCwgMHhiY2Q0YWNlMCwgMHg5ZDUzNjBmZiwgMHhjZGIyNmVhNiwgMHhiMTZmYmNkMywKKwkweGUzZDRkNjJmLCAweGRlNmI5NzczLCAweGE1NThlMzFmLCAweGY1YmQzNzY5LCAweGVkMDEyNmEzLCAweGMwNzdiMzcxLAorCTB4MDZlODc4MDUsIDB4MWU0YjI4ZGUsIDB4MTJkMzIzZDIsIDB4ZTMyODY1ZTAsIDB4MmM1NjJkMGEsIDB4NzQ0ZGYzYmIsCisJMHgzYzdiYjY0ZSwgMHhlYzQ0OTdlOCwgMHg3NzNhMWRmZiwgMHhjOTdjNGU2OSwgMHhkZmU1MDM1YywgMHhmYzVhYmUwYiwKKwkweGM5YTAwZTdlLCAweDNkZGJmNjg1LCAweGYwZTM2ODRmLCAweDVmMzhhYmM3LCAweGI5NDM2NWE5LCAweDI4MGFjMWViLAorCTB4NjdiMDVlZjMsIDB4ODFlOTdiZjAsIDB4Y2M3ZjcwN2IsIDB4NDVkYjhjNzEsIDB4MmVjOTk5YWYsIDB4NTM3Njg5OWEsCisJMHhiMDcxYmY4OCwgMHgzOTdlNjZiYSwgMHhiZTQyN2JmNiwgMHhmNTgyZjkxNywgMHhiYzBhNjkzMiwgMHgzYjA4Y2ZiNywKKwkweDM1ZWU3YThiLCAweGViY2JmNTIzLCAweGU2ODVkMDFkLCAweGNlNTk3ZmY3LCAweGNlYjNjMWU1LCAweGZjNzE3YmRhLAorCTB4YjJkMDNlOGUsIDB4N2RjZjRmYzgsIDB4YWViZjQ0NjgsIDB4MDEzZmFmYTMsIDB4ZTcwY2Q5ZjUsIDB4Y2ZiNDQ2ODcsCisJMHg3YTJiOWU4NywgMHg2MWM2MGM0ZSwgMHgwZTFmZTM5YywgMHg2M2RlMjNlOSwgMHhhNDZlNWVkZCwgMHg3MjJiNGZmMSwKKwkweDdhM2JlNWJkLCAweGY3OGI0ZjNhLCAweDg2NGE2YjM3LCAweGUxY2I3M2U0LCAweDYzZWYxZmEwLCAweDdiZjNiNGI3LAorCTB4MzY4ZTc4OWIsIDB4ZjkwNjljOTIsIDB4YmNhODYxZmMsIDB4ZjQxZDM2N2QsIDB4NGYxYTRjYzEsIDB4OTc5NjBmYTMsCisJMHgzZWRlZTlmOSwgMHhmYmNkNmZjOCwgMHg1YzM0OTcyYiwgMHhjODI1N2NjNSwgMHg0Y2YzZWQ3MSwgMHhiMTk2MWU3ZSwKKwkweDczZmEwMzAxLCAweGVkMzVkNzIwLCAweGZiOTVjYjFiLCAweGRlNThkMzljLCAweDJlMDcyMDE3LCAweGRiZGYyMzM4LAorCTB4OWY4YWJiN2QsIDB4YWFlMGI4MzMsIDB4MTY3ODdkYTMsIDB4NDdlNzg5ZjAsIDB4M2Y4NjFkOWYsIDB4ZTFkYmQ3OGUsCisJMHg4MWE0NjVlZCwgMHg2NjFiZmQ5MCwgMHhmZjcxNTdmZiwgMHg3MjI4ZTVlYSwgMHhiZmIyYTJmYiwgMHgwMTQwODRmYiwKKwkweDMzYjc1NTBhLCAweDg1NzdlODhlLCAweGE1ZWQ3NWI5LCAweGNmOTdkYzQyLCAweGRlYmZhMmI3LCAweGVlODEyM2YyLAorCTB4ZmZiMmZmYzEsIDB4YWMzYjM0YWQsIDB4NTRmODc4ZGYsIDB4NzY5N2RlMWEsIDB4ODY5NTNhMWYsIDB4MGNkYjg5ZjcsCisJMHhjZjY4Y2RmNiwgMHgzZGQwN2QwMywgMHgzZjVlOGVlNCwgMHhhODdlZGZjMSwgMHhiNzlmMWZiMCwgMHgxNDBlMGFmNywKKwkweGViOWVlZWM5LCAweDM2NGViNDBkLCAweGEzZmQxNWIwLCAweDNhZTA1MTdkLCAweGFiZWRjZTU4LCAweDJhNzZlNWMzLAorCTB4MTM5ODJlZGQsIDB4Yzk4ZjdlZjUsIDB4MWU5MDEzZTcsIDB4NWMyMTNlNDAsIDB4ODIwZmMwNDcsIDB4ZTY2ZGJlZmEsCisJMHhkNGY2NDhhNiwgMHgyN2RmMDU2NSwgMHhkZTE5MTliNywgMHhmZTgzNmRmYiwgMHg1OWQzOGViOCwgMHhiZGY4OGRhNywKKwkweGIwYzM5Njg1LCAweDcxZDcwMTJlLCAweDFjNzg4MWVlLCAweGExODE4MzdmLCAweGY3YzJhMTlkLCAweDAzZTA1NjcxLAorCTB4YWJmYmZmNWMsIDB4MmRjZjBjMGQsIDB4MjdhZDU5NmYsIDB4ODFiZmJmN2MsIDB4ODdmYTI3ZGIsIDB4MDMzNWJkN2YsCisJMHgyZTgwY2JlYSwgMHgyNzBmM2JmMSwgMHg5ZDM4ZGY1NiwgMHhiZmJlZTMwMSwgMHg3NTY5ZGI4NiwgMHgyZjg4MWIwZiwKKwkweDZlMTNhZDk3LCAweGE1MGU0YmRkLCAweGZmNmU5NTZiLCAweDcwZDNhMTQ2LCAweGRiYTcwZGZhLCAweGU2YmFmNDYxLAorCTB4ZGJlYmQxZWIsIDB4OTBlY2I3ZTUsIDB4NjFmN2E4MTksIDB4NDM4Y2U3ZmYsIDB4NzMxZWZhM2EsIDB4MWE3ZTQwMWMsCisJMHgwNzE4NjEzYywgMHgyYWRhNGY3MCwgMHg2M2MzYzAzOSwgMHhhN2JlZjVkMywgMHg5YzZlNTBkMiwgMHg2ZGY5ZWRlMCwKKwkweDdmMmUwNTdiLCAweDdkNzFjYmVjLCAweDg2NDZkZDE5LCAweDJhMmUwOGY3LCAweGQ5NTE3NmZiLCAweDBhMGIzYjM3LAorCTB4NjJjZmM4ZjEsIDB4YTljYTEyNjAsIDB4ZjljZTI1NmMsIDB4MWQzNTgxOGEsIDB4ZTQ1MmZmNDYsIDB4OGZmYTY3ZjIsCisJMHg4N2I3N2I2ZCwgMHgyYjdmZWZkMCwgMHhjYWFiNzRlNywgMHhlNjQ2NjljNSwgMHhmN2M1NmMzYSwgMHgwNDVmOGQwZiwKKwkweGUwNmNiY2UzLCAweDI4MjczNWU3LCAweDA5Yzk0ZGUzLCAweDUyODIyYzM2LCAweGU0ZTVjMTU3LCAweGQ0MzgxNTZmLAorCTB4M2UxNDlmZmEsIDB4NDM3ZjI3NjAsIDB4ZTY2ODVjZjgsIDB4ZDFiNzlmZjgsIDB4ZjhlYjhjZGYsIDB4YmQ3NWM5OTksCisJMHgzMDVmZGUxYywgMHhlYTFiN2NlMSwgMHgzZjQ5ZWViZCwgMHhiOWRmZTNjOSwgMHhlZTFkOTA3MywgMHhhMjdmZjA1NiwKKwkweDYzY2YzN2ZjLCAweDM1MzJjZmVlLCAweDcyZDdmNjhlLCAweGU5MDk2OWY0LCAweDY4YTUzMmQ5LCAweDMwZjE0OGRjLAorCTB4ZTY2Y2NkZjcsIDB4YmFiYTAxNGEsIDB4NWFhNTQzOTksIDB4YWFmYzc0NWYsIDB4ODJmYzgwNzEsIDB4MmZjNDBkZWIsCisJMHhiOWU5ZDMzNywgMHgwNTUzZWZkYSwgMHg4ZTQ2ZTllZSwgMHg0YTk3ZDYwNywgMHhiNmU0MWI3YSwgMHg2NzkyMTY1OCwKKwkweGZhYTBmMTUwLCAweGZiMjk5NmUzLCAweDViMWViZjY5LCAweGNmZWUyOGM3LCAweDhmODRkM2Q4LCAweDg0ZTc2ZDE1LAorCTB4NDFlNzE4NTYsIDB4MDJiMDZjODMsIDB4MzYyN2NmYmUsIDB4ODUzNGJkYWQsIDB4NjI2YzlmYjEsIDB4M2EwYjA1Y2MsCisJMHg1Y2NjYzliYiwgMHg2YzdkMDM3NywgMHhkODFlYTg5MiwgMHhiYmZhYTM2NCwgMHg1ZTU0ZWM5YiwgMHhhMmM3MzhiNiwKKwkweGE0ZTA3OWZlLCAweGVkZTIwYTY3LCAweDY3MWVkNjQ0LCAweGVkNzNjYzJkLCAweDQxZjA4MWFjLCAweGZkZjQwNjNiLAorCTB4Mzc2YjQyOTgsIDB4MGNjY2Y0ZmEsIDB4OTQ3YTM3ZWQsIDB4ZjAyOGFkZWYsIDB4ODMzMzc0M2YsIDB4ZmNiZTQwYjksCisJMHg4ZTgzZTcwMiwgMHg0NjdmMWJlZCwgMHhlNmIxY2Y3MiwgMHg0OWZhMDM3YSwgMHhiNzE3NmRmOSwgMHhmMWJkZGQ2MiwKKwkweDVmNjgwZDc3LCAweDA0ZmEwMDdjLCAweDdlZWMwY2U5LCAweDllNTAxMzY2LCAweDgxZGEzMzljLCAweGE2NmY5YTBlLAorCTB4ZWIyZjM4ZDAsIDB4NzdjODBkODIsIDB4NDMwMjYzZGUsIDB4ZjdhMGZjZmEsIDB4ZDcxYzcxYmEsIDB4ZTEyZDc0NTcsCisJMHhlNjc0NGRmOSwgMHg0OGFkMmQ5ZiwgMHhmYmI4ZmMyMiwgMHg3ZjdjNzVmMiwgMHhmN2ExNzQ4YiwgMHhmOWVmZmEyOSwKKwkweDg3ZWUwMjQzLCAweDlkZmRhMzc5LCAweDQ2N2ZlYzRhLCAweGI3YWY5MGNmLCAweGE0MTMwNmQ3LCAweDAyZjg3MjA4LAorCTB4YTM5NzhiOGMsIDB4ODY1ODFkNzAsIDB4YmQxOTM3YjcsIDB4NDEzY2YwNTMsIDB4ZTFjNzQyOTMsIDB4ZmExNThiZWQsCisJMHg5NDFiNGMwNCwgMHgyMTMyMjllZiwgMHhjMTIzOWY4ZCwgMHg1MjU4MTY5ZiwgMHg0MWY5MzI2MiwgMHhlN2UwMzhmZSwKKwkweGFiYmFiZTk2LCAweDgxMWU5NjIyLCAweGNmZjVhODdkLCAweDc2MjE4N2Q4LCAweGZjM2EzNDdjLCAweDQzN2UyNWIyLAorCTB4NDMyOWMzZTYsIDB4NDMyM2Y0NzUsIDB4MWZhMDdmZWYsIDB4ODJmYmU5MTksIDB4ZTNjOWFjYTYsIDB4Yjk3NzhhNDYsCisJMHg4M2JlYzAwNywgMHhjMzAwZWFmZCwgMHhmNDgyOWVjOSwgMHg0ZmNhOGQzZSwgMHg5MWQ5NzQ4ZSwgMHhjMTcxY2M3ZiwKKwkweGQ4MmZhODNkLCAweDNiZjIzYTVkLCAweDdiNWFiZGRhLCAweDg3ZTE0MWE4LCAweDdhMWVjNTA2LCAweDNmZWI0MmI0LAorCTB4NWVkNDlmODEsIDB4ODRhNGZkYzEsIDB4M2ZlMzRjZTMsIDB4ZmYyNzNmODUsIDB4MDU3YzhjYzksIDB4ZmQ4MzRlZjMsCisJMHhmZWQyMjU3OSwgMHhjN2FlZDU1NCwgMHgyZWQ4MTM3ZSwgMHg3NDA2NzNhMiwgMHhiZTE1ZjQ4ZSwgMHhlMGE4YmZjZSwKKwkweGViZTU1NDdhLCAweDQ4ZDdjODY1LCAweGFmOWNiZGJmLCAweGE5NmRjN2MzLCAweDFjMGJmOWFhLCAweDdiOTQ1Yjc3LAorCTB4ZjE1N2Y3MTAsIDB4MTM5ZmRhZjEsIDB4ZTdlZTVmMDgsIDB4MWY0ZjA4NTIsIDB4YjU5Y2U3YjMsIDB4MDMxZjk3NDAsCisJMHgyZTgwZmIxYywgMHhmMTlkMzlhZiwgMHg5YWZmZDA0OSwgMHg2YzlmMTljYiwgMHgxZDAzOTIxZCwgMHhiZjUzYzVjZiwKKwkweGE3MTc5MzZkLCAweDE5ZmQ0MmI0LCAweGVmMTg3YmE0LCAweDhhM2FkZTkzLCAweDFjZjQzZTZmLCAweGJlNzUzZmU3LAorCTB4NTJjYmZjMGYsIDB4MGQ4YTlmOTAsIDB4ZGEwM2EzNDEsIDB4MjYyZWZiMzMsIDB4N2M1ODFkYTAsIDB4ZTQxNGZlZTQsCisJMHg2ZTcwNjhjMywgMHhkY2UwNTRhZCwgMHg0YmRhZDhmOCwgMHhmMDFlOWMyOSwgMHg0NTVhZWUxYywgMHhmNDlmYjliZiwKKwkweDZiZmYxMTFiLCAweGRmYTIzMjM3LCAweGQ5N2VkN2ZlLCAweDQ5ZmM3YzgxLCAweGZhODRiYzVmLCAweGYxYTNlM2YwLAorCTB4ZDdmZjk0NWUsIDB4M2E3Yzk5OGUsIDB4NmYxMGZjODEsIDB4OGZiNWM4MjIsIDB4OTFmNzAzMGQsIDB4MmY0NDc5YmQsCisJMHgzZWU4ZmZhMSwgMHhjODNkZGJmNiwgMHg0Y2Q3ZWU4ZiwgMHhiNWIxZjk2OCwgMHg1MWQ3NWQ3ZCwgMHhkZGY1YjVlZiwKKwkweGYyYzQ1NTdiLCAweDg3ZTVkMWE1LCAweGQzOGY4ZGY2LCAweDZmZmFkNTdhLCAweDI4ZWQ5OTM3LCAweGI5MTEzZjQ3LAorCTB4ZmJkYjU4OWMsIDB4NmJiZmQ5MmEsIDB4YzBjYzZmMDcsIDB4NDdjN2VhMzgsIDB4Y2EwOTRmZmYsIDB4Mzc5YmY3MzUsCisJMHhiOTllNTA0YSwgMHg4MjUxYjhkZiwgMHhjNzFmZWVlZCwgMHgyZGQ5MjI3YiwgMHg4NGY0YjM3MSwgMHg2NjVmNTU1NywKKwkweGUyNmEyN2JmLCAweGZhMTQxYjQ1LCAweGQ1ZGNlZWM4LCAweDU3ZjAwOTM4LCAweDAzODk2ZTdjLCAweDdiNmFiNmYzLAorCTB4MTM5ZDE0ZjEsIDB4NzlmZTJmZGYsIDB4MjFjM2NhN2QsIDB4MjIwMzNhZmQsIDB4Y2U4YThkZTUsIDB4MGVhZmM3ZDUsCisJMHhhYTQ3Y2JhMSwgMHg5NGVmOWEwYywgMHgwZjM4ZDU3ZCwgMHgyZGY3ZTJiNiwgMHgwMjc1YzU2ZiwgMHhlYzBlZmEzYSwKKwkweGJmYzg4MGI2LCAweGYwNDZiYjJmLCAweGY2MDFiZmExLCAweGIyM2Y3ODRiLCAweDkyM2RhZWE3LCAweDk5MTBmNzQyLAorCTB4YmQzZjljZTgsIDB4MWM1M2ViMDgsIDB4NTYyOGVkZGIsIDB4ODcyNmE3Y2MsIDB4MDJjYjRiZDgsIDB4ZTgwOWJmM2EsCisJMHhlNGNmYTlhOCwgMHgyMDNmN2IyNywgMHg2MmJhYTQ1ZSwgMHhmZDc0M2Q0NywgMHg4NWIyNjMzNywgMHhkYzlhNzEwOCwKKwkweDFjYTBlNzc3LCAweGMwZDc4ZjBmLCAweDViODQxOGNmLCAweGE3Y2VhZmI1LCAweGE2NTFmOGYzLCAweDA0MmRkMjQ3LAorCTB4OTkzYjlhYjgsIDB4MTYxZDc4ODQsIDB4NGI5YTY5ZDcsIDB4ZjhmMGEyZjEsIDB4ZGJiMDNkOGUsIDB4OTNlY2ZkOGMsCisJMHhhYmMyMTI3NSwgMHg4ZmI4YTVkYSwgMHhjMGU0MTEzZCwgMHg3OTcyNTY1ZiwgMHg2NzU3ZjJhNiwgMHgzYWY1ZTc4MCwKKwkweGM5ZTZiNTAzLCAweDY5NTc3ZTUwLCAweGNjNzQ5MWVmLCAweGVjZTk3ODBiLCAweGM2MDBmZmJiLCAweDFmMDczYTE3LAorCTB4ZjMwZTlmOGMsIDB4OThiN2JlNzQsIDB4OWFlNzllNjEsIDB4ODI5ZTZiNTQsIDB4OWFlNzA2ZmQsIDB4YTIxYmM4MWYsCisJMHgxYWY5ZjA5YiwgMHgzNDVkYjkyYSwgMHhkNjQ0MmY2NCwgMHg1ZjBhYTU3ZiwgMHgyYzFlOTY4ZiwgMHhkMGYzZmNhYywKKwkweDU3OWZlMDgzLCAweDdjZmY3MjU0LCAweDcwOWY4ZjA1LCAweDdmNWMzY2ZmLCAweDFkNTk3MmE4LCAweGVmODJhZDc3LAorCTB4MmFmOTcyZTEsIDB4NDdlMDM5ZDksIDB4NWI1ZTVjOTMsIDB4MzJmN2E3NjksIDB4OTBhNTE2ZmIsIDB4OTJkZWZkN2YsCisJMHhmODc1YmIxNCwgMHg0M2EyMzlmOCwgMHg3YzM3OWM5NywgMHg3MzllZDU3YywgMHg2NjUzZTU3YiwgMHgzZDY0N2JmNCwKKwkweDg5N2JhN2YxLCAweDk3ZmNjM2UwLCAweDlkYjlmZjZhLCAweGVlZTVkOTAyLCAweGRmMGY4MzY2LCAweDJjMGFlMTUzLAorCTB4MDdkOGYxZTEsIDB4MjJjZjgzNjQsIDB4YWE4OWQ5MGMsIDB4ZGRhYjc5MWQsIDB4NmFiYjUwMjEsIDB4NjNmNmFhNTcsCisJMHhiYmUzYzljMCwgMHhmYjc4OGE0YiwgMHg1NTZiOGI2NSwgMHhhNzVjNThlNSwgMHg5NzE3OWU4NSwgMHgzOThjZTdmMywKKwkweGY1NWZhMTRmLCAweDkxODE1MmUwLCAweDRhZWM1MDFjLCAweGVkYzM0ZTk1LCAweDcyZmI0ZmNlLCAweDQzOGE0NzEyLAorCTB4YTdkMGFmM2QsIDB4YzIxMzY3Y2EsIDB4NjNkNTQzZjgsIDB4N2U3MDU0Y2YsIDB4NWUzZDQwZWIsIDB4ZjdmYzdhODgsCisJMHg3YzNjZmIxYSwgMHg4ZmUzZDA1YywgMHg0NjNmNTI1NywgMHgyZTdlOGJmZCwgMHhlYmY5MjMzYSwgMHhhZGZjNjU2NiwKKwkweDRlMDVmZWVhLCAweDU5YmMyMGQ2LCAweGZkMTliMDJjLCAweGY1ZmE2OGNjLCAweDEzOWQ4YTdiLCAweGM1MTlmZGFkLAorCTB4M2YxZGJjN2UsIDB4YzhlNDU2MWYsIDB4Y2JmM2YxNjgsIDB4NzBmMmI3OTUsIDB4ZjlmOWE5ZmYsIDB4OGM2ODdkOTYsCisJMHhkNTU3YmY2MiwgMHgxZmZiODZiYywgMHg2YTA0ZjdhNywgMHg5N2ZlZmY5MCwgMHhlMWVlZTI4MSwgMHhmYWE1M2RlZiwKKwkweGVjZDMyMjlmLCAweGEzMmNhOWNmLCAweGY3MjNmZDBlLCAweGU4M2YxZTFhLCAweDQzYmZiMjRlLCAweDdhNWJjYzdlLAorCTB4MDVhY2UzODYsIDB4YjhlZDEwN2YsIDB4NTEyNjZmNDcsIDB4MzJmNjg2ZDksIDB4Mzg1ZTJiOTQsIDB4MTU4OGY5NDcsCisJMHg3N2YwYjQ2YiwgMHhmYjE3NGM2MywgMHhmM2E2Y2JhZiwgMHg5ZWFjMmQwMywgMHg3ZDJkNGNlMiwgMHg1MDE2ZDI0OSwKKwkweDBmNjNkZDBhLCAweGYyYmU0NjlkLCAweDBmZGJkMDFlLCAweDg4ZmZiZTg0LCAweGM3OTliZWZhLCAweGZiYTYzNmUxLAorCTB4NjYxYWY3MjgsIDB4YzI3OGI0MGYsIDB4N2RhZDdlZWQsIDB4OGRjNGE5NTAsIDB4NmYwOWQ5YTIsIDB4NWNiODViZjQsCisJMHgzZTI3YTMzOSwgMHhkMzc4YzBlZiwgMHg3ZDhjYzY0YywgMHgzN2I4MmU1YywgMHg0NzQ5MzhmMiwgMHhmYzA0ZTZkZiwKKwkweGQyYmI2YTA4LCAweDUwMGM0NTdlLCAweDZiZjI4YTFjLCAweGJlZDVlYWYwLCAweDNlZThkM2E3LCAweDI3Y2RhYzk3LAorCTB4MzlmZmVmYjUsIDB4YmNmMGNiYzksIDB4OTcwZjcyNTIsIDB4YmQzNmVlNGIsIDB4YTEyYTQ3OTIsIDB4ODNiNzk3ZWYsCisJMHhlZDBlMzkzZiwgMHgxYmZkYmI0YiwgMHg4YjgwNzc4OCwgMHhjOGRlNDhmOSwgMHgzZWNiYjg5YSwgMHhlOWY0YWYyNSwKKwkweDNmMjU3Zjk5LCAweDI4OTFjNTc0LCAweDc5ZWVhNDc5LCAweDdjYTQ4ZjNjLCAweDFlNzg3NzI3LCAweDBjYTlmNGU5LAorCTB4NDhmM2VkZmIsIDB4ZThlN2JkMWQsIDB4ZjJlZGNiMWUsIDB4NWJhYWE2NDksIDB4M2I4YTFjNzEsIDB4N2M3OTE0NGUsCisJMHgyMDlmNjI3NywgMHg2MjZhYmM2MSwgMHhlOTc3NWYxZiwgMHhhZmIyMzhiNiwgMHgzYWI1N2UxYiwgMHhiYTgxZTUwNSwKKwkweGUyMmM5ZjRmLCAweGZkZTRmZGY4LCAweDVmYjA2YWNmLCAweGM5NDRhZmM5LCAweGUzN2FlYjAyLCAweGNiM2YwZGZkLAorCTB4ZDliYjc1ZTAsIDB4YzQzNmZkOGUsIDB4YzlmMzNmYTMsIDB4MjNjN2Q2YWYsIDB4MTI4MGRmN2UsIDB4MTdjN2U3ZjcsCisJMHhjOWYxYzhjNCwgMHg2Njc1NzhhMSwgMHg5NTlkYzUxNSwgMHhmYTA4YjU3OCwgMHg1YzUwY2M3MCwgMHg4YmRmYmMyNywKKwkweDc0NmU1YzU1LCAweDcxNDJiYjgzLCAweGVmM2MyM2NkLCAweDlhZWU5ZGRmLCAweDllYmZmNTQ3LCAweDI5ZGZmOGM0LAorCTB4ZmQxZTI5OTAsIDB4YzYzNWQwMmEsIDB4NjJjMWE2OGQsIDB4M2ZmZDJmMzEsIDB4ZTYyNzU4ZTMsIDB4YmFjN2JhOTEsCisJMHhmNDdjNDI3ZSwgMHhmMjNiM2FkNywgMHhmY2E3ZjQxMSwgMHg5ZGIwZjc5MywgMHg2YTg2MjNmNCwgMHgwMzMzY2YzMSwKKwkweGY3NDA1YjNmLCAweGRmMjk1MjMxLCAweDhmYjI4ZjczLCAweGEyY2ZlMGU5LCAweDJjZDAwOTVmLCAweDM0ZjQzY2MxLAorCTB4MjMzM2RmMjUsIDB4ZmUzODg5OGUsIDB4ZmI2YjgzMGUsIDB4ZjUyZmNjNTQsIDB4YzRjZDhlOGIsIDB4M2MxNDhlMDQsCisJMHg3NzllMTk2ZiwgMHgyZjllNjQxMiwgMHg2YTRmZjM1NywgMHhmZTVhM2NkZSwgMHg5NDc5YzA0OSwgMHhmM2YwNTZlZiwKKwkweGY5ODBiMjk2LCAweGM0Y2YzNTc0LCAweGY5MjkzYTk2LCAweDQzY2NhNWI1LCAweDgwN2M0MmY3LCAweGRlNzNhZmIzLAorCTB4Y2ZmYzg0NmIsIDB4ZjIxMTE1YzMsIDB4OTgyYmViM2YsIDB4ZjM2OTlmNjIsIDB4NWY3M2RiOGQsIDB4YWFmZDNhMjEsCisJMHg3OGMzYzY3OSwgMHhlNjhlZTJhZSwgMHgwZmRjZWNjNSwgMHgyOGJiODMwZCwgMHhmMjM0ZDNlOSwgMHg2ZmY4ZmViYiwKKwkweGZiNjdhNDA5LCAweGJjM2U5MDZlLCAweDAwYjEzNDE2LCAweDc4MDcxZmM1LCAweDQwY2ZiZGRjLCAweGUwNmI4NjcxLAorCTB4ZDEwZDhkYmYsIDB4ZjA1NGVmYjMsIDB4ZDVmNzhmNzEsIDB4MDRmN2ZkMTEsIDB4ZmRmMWUzZWEsIDB4YjdjZjJiZGYsCisJMHg3ZWU0YjdiZCwgMHgwMWJkZjdiNCwgMHhjNjBiMWRmZSwgMHgxM2Q2M2ZiOCwgMHg2ZWQxOGIxMCwgMHhmMmZiODNiOSwKKwkweGY1ODQ2NTY0LCAweDdlYjhlMzk5LCAweDUyYTNlNzBhLCAweGFiNGFmZjg1LCAweGRlZWI5ZTM4LCAweDdiOTg3ZWU3LAorCTB4NDhhZmNmMDMsIDB4N2I3MDVjOGEsIDB4NzRmZDVlNzgsIDB4YzZhMDlhNTYsIDB4Y2E0NWM3ZDMsIDB4OTIwOTFjYmYsCisJMHg0NDc5NjhkZSwgMHg3Y2M5ZWZhMCwgMHgzM2NiZmNkOSwgMHhmMWYzOTFlOSwgMHg0NjJmN2EyYiwgMHgzNjM0YmZjZSwKKwkweDE2OGNmYzkwLCAweDYzOGYwZWNmLCAweGZmMmE5ZGZmLCAweDc2MzhmM2E2LCAweGViNDQ5NTdhLCAweGQ3ZTRmNjRlLAorCTB4ZWI0MzYzOGMsIDB4YjBmYjgzYmYsIDB4N2Q4NDU2NzQsIDB4NmZlMzgzYjgsIDB4ZjFkYjFkOWMsIDB4M2I2M2NhZWIsCisJMHgxZTMxMTNmZSwgMHhjNzhjN2I3ZiwgMHg2Yzc5NjFmZiwgMHg4YWJhZWJmMywgMHhkYmZmYzJkOCwgMHgxZmRmYzMxOCwKKwkweDU3ZmZmZTA5LCAweGU3ODQwN2NmLCAweDBiY2ZjM2ZmLCAweDMwMDM5Zjg0LCAweDE3YjBmNWJkLCAweDlkODRiYWRiLAorCTB4ZWZjMzNmNDEsIDB4MjRkNmJmOGQsIDB4OTMxNDFjODAsIDB4Y2U3ZGQzZjYsIDB4MWYzY2U1MDUsIDB4ZWNkZWFkYjYsCisJMHg5ZDBjMmJkYiwgMHhmNWYxNTAxYiwgMHgyM2Y3MzU2OCwgMHg1ZWViYmNhNSwgMHgwNGQ0NWVmYywgMHg4MjlmNTAzOSwKKwkweGZlNzJiMmYxLCAweDU5YWU0Mzc3LCAweDg5OGM1ZTc4LCAweGM5ZTYzYTUyLCAweGM1ZjRjZGUwLCAweDViNzQ5NzYwLAorCTB4NTM1OWU3MjIsIDB4ZTlhMmYxOTUsIDB4MzVkNTgzOTEsIDB4ZTMxNTY3OGIsIDB4N2M4YTNkMWYsIDB4NGE4N2ZmMGUsCisJMHhlNWVhNTIxYywgMHg2ODk5ZTlmNywgMHhmMzRjNWY0ZiwgMHgxZWQxZDNkYSwgMHg5ZmM5M2M0YSwgMHhiYzk5ZjgyNywKKwkweDY3YjJlMDk3LCAweGRjN2ZlNjJmLCAweDdiZTExYjIwLCAweDI2ZmZjOTQ2LCAweDFiMmJiYmNmLCAweDYwYzlkMmUzLAorCTB4ZjA1ZTYyMTcsIDB4OTIwZmNjNjksIDB4N2JkMTJiM2YsIDB4NjY5NzdjZWEsIDB4MTllYTNmNzEsIDB4OWYzMDEzMDMsCisJMHhjZmNhOWRlYiwgMHhkZjllYjEzOSwgMHhlNmE2ZmQ5MSwgMHhmYzFhY2VmNSwgMHhjYTA1NWE5NywgMHhmYzIzYjVlYiwKKwkweGYzZjlkNTNmLCAweDQ0MmI2NWY2LCAweGViY2RmODBjLCAweGY4ZGYyODkxLCAweGU1ZGZmOTc2LCAweDllMWU2OGJhLAorCTB4ZTI0YzdiZTcsIDB4YmY0MDljYWYsIDB4ZWM3OGUwMTksIDB4ZWZkMTIxNjgsIDB4ZmZlNWUzOGEsIDB4YzdmZThjZDQsCisJMHgzY2YwOTE2NCwgMHhlMjU0YWZjYywgMHg3ODk0MTcwNSwgMHg1MDJmMWE4NywgMHhhY2ZmNWJmMywgMHhjMDNlNDljNCwKKwkweDAzOTQwYmY4LCAweDcyODEwZjE4LCAweDlkZGQyY2ZiLCAweDY3ZGI0ZmQ2LCAweDY3ZmZlMDQ1LCAweGYyMWYxZTA0LAorCTB4ODdjNzk0ZmUsIDB4OWM4ZThkMGEsIDB4N2Y5NGYzZDAsIDB4NjNlZjhiMzUsIDB4MmZlNzlmYWIsIDB4MGZjZjc4ZDQsCisJMHg3ZTE0ZjU5NSwgMHhlZmM3ZWY0ZiwgMHg5ZDZlMTVhMSwgMHg1ZjNkNDQ2ZSwgMHgwZTJiMzViOCwgMHg0ZmIyMTljYiwKKwkweDVlZjgwNjk3LCAweDRlYjBmYWI2LCAweDc0NDhiZmRkLCAweGU3NTk1N2I0LCAweGNhNDEzM2I2LCAweDk2MWFiZGVmLAorCTB4OGIzNGJmZjcsIDB4YTk2ODY3OWYsIDB4MDk3YmZiZTYsIDB4ZDQxOGEwZmYsIDB4NmUyMjliMWYsIDB4YjEzMWYzNDEsCisJMHhjYTQ3ZDI0YSwgMHg1ZjgwYjUyYiwgMHg3NmI2NzA4YywgMHg3YzU1Yjg3MywgMHg3NWVkZjhiNywgMHg1M2M1Y2YzOCwKKwkweDE2NThhZGMxLCAweGEzYWVjOWFjLCAweGY1ZGI3YmI4LCAweGI5YmY2OGFkLCAweGFlOWM2ZjA3LCAweGQxOTk3OGE2LAorCTB4NDNjNGZlOGUsIDB4ZGJiOGRhMDMsIDB4ZmUzY2Q1MTMsIDB4ZTAxYTJhZmUsIDB4NDU3YmI3ODgsIDB4ZWYwYjhmZjIsCisJMHg5MjdlODkxNSwgMHhiZmU0MmM1YiwgMHhkZTk4MWIyNiwgMHhkYzQ1ZjU4YSwgMHg0YzY4MmEyZSwgMHg1YjNhYzNhZCwKKwkweDYwZjY0NDkyLCAweGQyN2IxOWMxLCAweDcxNDM3OWMzLCAweDM3N2JlNGIwLCAweGRkM2M0NThjLCAweGM2YWFjZjJlLAorCTB4ZTQ1YjJlZDMsIDB4NWY5ZmI4ZTMsIDB4N2VkYWNmMzUsIDB4NmYzYTNkZjYsIDB4YzU0YmFlYWEsIDB4OGQyZjlhOGIsCisJMHhjZjU1Njc5NiwgMHgzZjFiYjgzZCwgMHg3MGQzOWNkMywgMHg4YzA2YzE4YiwgMHhiZDFlMTYzZiwgMHg1ZmNlNTQ2OCwKKwkweGExZWNiNjRhLCAweDkxZTE2YzNjLCAweDU1N2Y5NGViLCAweGNmNmVhZGYzLCAweGExYWJiMjc1LCAweGY3ZmIxMTlmLAorCTB4ZDdmOWUyNmMsIDB4MmMwZTAwZDcsIDB4YjJkZDYxN2IsIDB4ZGJhMWVmMDksIDB4NzU4M2VjYTgsIDB4OWI2M2YzZTMsCisJMHg2ZmY0YTk3MiwgMHg3Yzc5NTA3MiwgMHhmODk1MTk1MywgMHg2NGY0Yzk5OSwgMHhhNzVlZGJjYywgMHg1OWQ1ZWRiYywKKwkweDUyNGRjZWMzLCAweGU4Yjc2ZjVlLCAweDE1ZjEwOGZjLCAweDdhYTNmNzkyLCAweDFmNGZkZTc4LCAweGVlMzVlM2M3LAorCTB4YmVmYTA2MzMsIDB4OTlhY2ZiYTEsIDB4NWY0ZDc3ZTQsIDB4MGZmNDQ0ZWIsIDB4OWFlNzNmM2UsIDB4NjA3NzcwODgsCisJMHgyZTg0MmRkZSwgMHg5NjFkOTEzZSwgMHg5ZDgzZjQyNCwgMHhkYmU2MGIwZSwgMHgxYWFmZmIwYSwgMHg4NzRjM2NmMSwKKwkweDNjNjIzMDE4LCAweGMwY2YyMDBjLCAweDllZWU4YjIzLCAweDZmZGNmY2ViLCAweGYxMDU4ZDVmLCAweDU4ZmNkYjdiLAorCTB4OGZjZmZmZWYsIDB4NThmYzk1N2QsIDB4MjczZjM1NzcsIDB4MDI5MWNhYWQsIDB4OGJkZTRlYTcsIDB4ZjJkOTE5ZTUsCisJMHhkODljODg3MCwgMHg5NGY5ZTRlNiwgMHgxMTI3OTM2ZCwgMHg0ZTc2ZWUxZiwgMHgzMjFkNWE0YSwgMHg4ZjIzNjc1ZSwKKwkweDNiZGYyNDVmLCAweGZjZmExMmQ5LCAweDFmM2NkNTk3LCAweDY3MzAyYzk2LCAweDMzNTY3OTI0LCAweGM3ZGRlYmZiLAorCTB4ZDc2ZTQxMWIsIDB4M2ZmYmIyNDQsIDB4ZTVkMDI5ZjksIDB4MjM4YmEwNGMsIDB4OTAzODllZGYsIDB4MzQzZjE5YzcsCisJMHg3MWFkYjcxZSwgMHgyODMxYzRmNSwgMHhkODk4MmU5ZiwgMHhkM2FmMWUxNCwgMHg1ODU4ZTNjNCwgMHg1YzVhMmU1ZSwKKwkweDRlYTM0NTZlLCAweGExNzlkMGI2LCAweGRiZDQwNGUwLCAweDI2MzNmMWUxLCAweGJkNzAyNzA2LCAweGJkZTA2NzJlLAorCTB4ODMzMTk4MTQsIDB4Zjk2MWIxOTUsIDB4ZGYzMDVmYjksIDB4ZmJjMzI3Y2YsIDB4YTQ3NTFhY2IsIDB4NWQzY2Q0MmYsCisJMHgzNmM4YTM0MSwgMHg2YzE2N2QwMSwgMHgzZjI4ZjgzNCwgMHhhNDVlMjhkNywgMHhlYzZmYzU3NiwgMHg5MDMyMGE5NCwKKwkweDZiMzgzZmNlLCAweDE2YWUzMDk0LCAweDM0NzMxZjFlLCAweDA0OWVlZmVlLCAweDAyNmQxZGZkLCAweDVkYmEwYmRkLAorCTB4MDczZDRmMWUsIDB4M2ZkYmQyZGUsIDB4Zjk2ZGUzMDcsIDB4M2Q3NzU3NmMsIDB4YWM5ZmNmZjQsIDB4ZjRmY2YwOTMsCisJMHgzZjFlN2NmMCwgMHhkOGEwNWRmZiwgMHgzNjcxZTEzOSwgMHg0YmI0MzNhNCwgMHgxYmYwZTNjMiwgMHgzOGQ4M2ExNSwKKwkweGQ3YWRlYjliLCAweDFkNTM3ZjE0LCAweDRlMTdlZDQ3LCAweGNkOWQzZjNmLCAweGI4YjQ2ZGY1LCAweGJjNjU1MWZlLAorCTB4NmQ4MmM2Y2UsIDB4MTc3ZjcxOTMsIDB4OTNlYTE4ZTgsIDB4ZjM1YWM2Y2UsIDB4NzZmMTkwZTQsIDB4ZGJlN2U2Y2MsCisJMHg2MGZjYzE5ZSwgMHg5MDdlNjg2YSwgMHhmM2MzMDFlNywgMHgyYjljYWE4MiwgMHgwMzdkZmZlYywgMHhjODM3N2JlMiwKKwkweDZlNjNkNDZiLCAweDE0MWZjZjFiLCAweDgzMzlhYjFlLCAweDRlMDg2MzcyLCAweGMzNzdiN2FlLCAweGJlYzgwNzllLAorCTB4YmUzMTI0NzMsIDB4NDU3YmZhMmUsIDB4YzUwMmEzZGUsIDB4N2MxNjBhZTcsIDB4ZWExZTNjNzYsIDB4Zjc0NDk5Y2MsCisJMHgyNzY3ZGNiMCwgMHgzY2EyYjE2ZiwgMHhlMzE2MjA1YSwgMHg1M2I3MWViZCwgMHhjMjY3OTViOCwgMHhlZmZkZDI3YywKKwkweGJjZWZhMWFjLCAweDdmOTAzZTE2LCAweDgxZTVmNzBlLCAweDBmOWQwMzY2LCAweGZkZGVmNTU0LCAweGYwMzUzNGVmLAorCTB4YzY0ZmJkZjYsIDB4ZTBhZTdiNjEsIDB4NzlmMWQ4YjAsIDB4NzYzZjdkMjMsIDB4ZmE3ZTRiZmUsIDB4MTEwYjU4YmIsCisJMHg4MWU3OTAzYSwgMHhlNDQ0OTdiMywgMHhkNzE2Y2I5YiwgMHgxNTFmMjNkZiwgMHg0Y2YyNTIyZSwgMHgzZjRmNWNjZCwKKwkweGMwYzhiN2QwLCAweGVhZDNjZWM4LCAweDlmNTkxM2NkLCAweDQ2ZTgzYzUzLCAweDhmZTUyMTVmLCAweDQzZmNmMDUyLAorCTB4MjliZTkwZGUsIDB4NmM3YTBhM2MsIDB4NjNkMzlkY2MsIDB4MTEyZDlkM2YsIDB4MWU4MjY3M2UsIDB4MTc5Mjc4NDMsCisJMHhmODdkM2NmMSwgMHhmNjUwZWZmZSwgMHg4YTVlOWEzZiwgMHhmZjUxODcyNiwgMHhkZTYzZmJmMCwgMHg1YzM2YzEwYywKKwkweGVlMzFkYjhmLCAweDNhZjY4YTUzLCAweGQzYTJlMzk0LCAweDcxNjYxZmRmLCAweDYyOGE0ZWJhLCAweGExNDlmZGNmLAorCTB4YTdlN2E4ZGYsIDB4Y2YyNzQ3N2EsIDB4N2ZkOTg3ZjQsIDB4ZDU2Mzc5MWUsIDB4NGRmMzUyZmYsIDB4YTBmNmJmYWEsCisJMHg2NWFiMGY2MiwgMHhiYmZlNTI5MywgMHg3MmEwMzdlZiwgMHgyMWJmNzg4ZCwgMHg4NmZkZjIzOSwgMHg2ODA5MGU4NywKKwkweDFiZjdhOGE3LCAweGNkNTkxOTRlLCAweDRmM2M1NGUxLCAweGYyNzdkY2FiLCAweGU5M2IyMjJkLCAweDYyZmNkZmQ0LAorCTB4NzhhOThiZWIsIDB4NTA5MDQ5ZGYsIDB4M2ExZmI1MWQsIDB4MWRiZTdhNDcsIDB4YTdiMjIzZWMsIDB4ZTNjYjdlZmEsCisJMHhmOWY4ODdhZCwgMHhjOGRlZjZmMCwgMHhhZGRiZGRkZiwgMHgzMmY1ZGZkOCwgMHhhZWQxYjkyMywgMHhlODZkYjc5YywKKwkweGI3NDRmMjUxLCAweDhiOGY5NmUyLCAweGI3NGI3MWExLCAweDNkNTYzMDNkLCAweDdmMjNlYmM3LCAweDhjYzcxYjRmLAorCTB4NjBlY2I3MTYsIDB4ZGJiNzNhNDEsIDB4YTA3MDQ2YjEsIDB4MzlkZGI4N2UsIDB4NzljYTVkZGMsIDB4NGM3MWE4ZGQsCisJMHhiOTczZTQ3OSwgMHhiOTRjNzFlMSwgMHhiOWM3OWI1YSwgMHhmN2M0OTY2ZiwgMHg2ODA4MjVkYiwgMHhjZTc1OWFlZiwKKwkweDdmYjczYTM2LCAweDlkMjI5MDRjLCAweGNkNWE1ZWYzLCAweDI1N2NmNGU1LCAweGM4ZDA3MjBmLCAweDg1NjBlM2U5LAorCTB4ZjA2ZmY3NDAsIDB4ZmJlZTFlMWUsIDB4MWVmYzYzYzEsIDB4N2UwMmMxY2UsIDB4N2JjZDQ3MGYsIDB4YTY2YmY3YTgsCisJMHhlODNkZTUwZSwgMHgyZjdhOWRmZSwgMHhjMzY3YmQ0NywgMHg1YWUwOGY5OCwgMHg3ZDFjNWNmNCwgMHhlMTg3NmJjNywKKwkweGJkZGI4ZDkwLCAweDFhM2Y3ZTVlLCAweDQzZTYxMDY1LCAweDg5MTNjYzRkLCAweDZiYWI2YjVmLCAweGVmN2E2YWM0LAorCTB4OGY0ZmRiOGUsIDB4N2JmMDQ3NTQsIDB4ZTkxZjhhN2QsIDB4MmZlYThlYWUsIDB4ZmFkNmFmYWMsIDB4ZjcwZjU0MGIsCisJMHhkZTU0ZWUxNywgMHhlY2Q5OGJlMywgMHg4N2ZiZmI0ZSwgMHg5ZThmMWM2MywgMHhmMWI2M2IzMiwgMHhmYjQ4ZWNjNCwKKwkweGZkYTJjNWI2LCAweDVlNWFhZjFlLCAweGIwZGZlNDU2LCAweGJiMGRjNWVmLCAweDdhZjVjOTJmLCAweGE3ZmY2MGI3LAorCTB4MWJhN2NhNGEsIDB4Y2FhZTlmMjgsIDB4N2MzMWVlZDUsIDB4ZTMyOTFmZmMsIDB4Mjk0MDY1YTksIDB4ZDc3Y2EzYmIsCisJMHhiYzRhOTdmOSwgMHg3Yjk0NGJhYywgMHgyZjY5ZWUxMCwgMHhkMzk3ZTM2OCwgMHg5N2UzNjkwZiwgMHgzNTkzN2IzMywKKwkweDc4ZmY3Y2Y1LCAweDY3ODVmYmNkLCAweDhiZGE2OTI2LCAweGRhNjhmNzAzLCAweDY4MTQyZjRiLCAweDE1MDNlNWVhLAorCTB4YWYyYmY3OWEsIDB4YjNlYTZhZDQsIDB4NjVmOGRhODIsIDB4NjFjNWNkZjUsIDB4YjQ3ZDM4ZjcsIDB4ZGNhMDFhYmUsCisJMHhlNjc1N2VkMCwgMHhjYmRlNmE2ZiwgMHg1NzVkYTM1OCwgMHhhZWJiNDc5NiwgMHhlYmI1MWI4OSwgMHhmNmNkYzc1MiwKKwkweGQzOTdkNzZhLCAweDMyNWY1ZGFkLCAweGJlZjJlM2U2LCAweDdmMmUzZTdlLCAweGM3Yzk1ZGI2LCAweGRmYjA1OGU1LAorCTB4MmQ5MzhkMzMsIDB4ZjdhOWI3NjgsIDB4ZmVmN2Q1YTksIDB4NTg2NjM3MmYsIDB4MDA3ZjQwZGYsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGUyNGJmZjAwLCAweDUxZjg2MDYyLCAweDM4Y2ZjMTBmLCAweDkwOTgxODE5LAotCTB4NzcwMTQzZjgsIDB4MDE2ODQzMzEsIDB4MjEwNjA2MTYsIDB4NjI2MzY2MjAsIDB4MjI2NzYwNjAsIDB4MDcyYmJmNWUsCi0JMHg5ZDg3N2Q4MiwgMHgxMDM4ZTE4MSwgMHg3ODFmNjdkZiwgMHg1ZTI0MGQ3ZiwgMHhiYjNmNGRjZCwgMHgyZWQxZDM3ZSwKLQkweDdlMjdmMDYyLCAweDAyYWY4NjA2LCAweDA1OGIwYzBjLCAweDIxMGI3YzIxLCAweGZjY2ZmOTU0LCAweDE4YTQ3NjA4LAotCTB4MDJhNTc2NjUsIDB4MTUwMDAzZjUsIDB4ODA1MWI3N2IsIDB4MDA4MDUxYjcKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGU0YjNmZjAwLCAweDUxZjg2MDY2LCAweGI5N2JjMTBmLCAweDcyNmUxODE4LAorCTB4MDE0M2Y4MjEsIDB4ZDA4NjY3Y2YsIDB4MGMwYzJjNmEsIDB4YzZjYzQwMWEsIDB4Y2VjMGMwYzQsIDB4NzE3ZWJjNDQsCisJMHgxZDdiMDQ0ZSwgMHg0Y2MzMDMwNywgMHgzMWM4ZGUyMCwgMHg0ODFhZmVmMCwgMHg3ZTg3OWQ3YywgMHg0MmYzYTk3NiwKKwkweDgxYzE1OTY4LCAweDU3MDgzN2Y3LCAweGI0MzAzMTBhLCAweGM0MzAzMzBhLCAweDBjZjg0MDg4LCAweDU1ZjJhOGEyLAorCTB4YTliNjA4NDIsIDB4Mzk3NjY1MjQsIDB4MDAwM2Y1MDIsIDB4MzQ3MWNjMjQsIDB4MDAwMDAzODAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGRkZmYwMCwgMHg0NTU0N2M3OSwgMHhiZWRkNzBiNiwgMHg5N2E3Nzc0YiwKLQkweDQyYzg0Mjc0LCAweDQwMTBkYzIwLCAweDgwNGQ4ODU0LCAweDAyNGRlM2IwLCAweDEwNjAyYTMxLCAweDY2YjcxYzExLAotCTB4MDQ0ODRiMGYsIDB4ZDNjZTdjZGUsIDB4MDgzMWJhZjksIDB4NTQ0ZTM4ZTgsIDB4Mzg3YzA2NjYsIDB4YThkMDQxYWYsCi0JMHgxYTBjMWE1MSwgMHgxNjZiYzNiMCwgMHgyNjY2NTQxOSwgMHhiOGMzOGUzYSwgMHg2YzhhODliYywgMHhmZDAxMTI0MiwKLQkweDVmMjgzNzk4LCAweDNiNzU1MzlkLCAweDRkYmE2ZjdkLCAweGUzZmJlNjVjLCAweDQ1YTdlZmNiLCAweGVhYjdiYWRkLAotCTB4OWNlYWQ5ZDQsIDB4MjVhYWE3NTMsIDB4ZDdhOTIwNTksIDB4ZmUxOTcyMTIsIDB4NDhhNmY5NjgsIDB4NTFkMTE5MDgsCi0JMHgxZmI3MTViNiwgMHgwNDg0NjkyNywgMHg2ZGQ1OTE1ZSwgMHg3ZmMyMjEwMiwgMHgwZWQ3MjJiOSwgMHgxNmM4ZTQyNywKLQkweGY1YTU2ODIxLCAweDIxMDc1ZWM4LCAweGQzNzY3ZWI0LCAweDk3MzVhMGI0LCAweDBlMDU3ZDkwLCAweGJiM2ZkZTBkLAotCTB4MjVlYjA4YjUsIDB4OTZlMmZlYmIsIDB4MmVlNTdiNjgsIDB4NjViYTgyNTEsIDB4OGI3NzI5ZWYsIDB4NmIyYTkwOTMsCi0JMHhlOTYzYTNmMywgMHgyMjVkZjZmMywgMHgyMjg3NDJkOSwgMHg0OTBiMTI4MSwgMHg4ZGI4ZTQyNywgMHhhYzhiYmZiMCwKLQkweGFhY2VjMGJlLCAweGRkZjc5Yjk1LCAweDM0NTZmZDA1LCAweGY2OWQ4OTVhLCAweGUxN2JiOTUzLCAweGJlYjRiMWQ0LAotCTB4ZTA0Y2IwZjAsIDB4YWI2ZGNhOTUsIDB4YmViNDVlOTQsIDB4YTA4NDI4MjgsIDB4MGZkZWMwZmUsIDB4NjJiNjljNzAsCi0JMHg0YzFhMTE1MiwgMHg4ZGJmNjljOCwgMHhiYWQwNTdhOCwgMHgwNjdkMzliYiwgMHhiODM4YmU3ZCwgMHg1ZmRlMTRhMywKLQkweDJkNzgyZjVjLCAweDliYzVmZGY0LCAweGZlODE5ZGY2LCAweGZkYzgzNzE3LCAweDkyZmZkYTQ1LCAweDA3NTEwNzNhLAotCTB4MTMyZmIxYjEsIDB4YTlmY2M3OTgsIDB4MWJlNTZmMDAsIDB4N2FkMmIxMzIsIDB4MGExNWE1YzUsIDB4YjU0OTFjMDEsCi0JMHhjNjBiYjk0YSwgMHg1ZDUxNGM3ZiwgMHgxYzYxY2UzMCwgMHhlNTY3Yzc0NywgMHhmYTFjNzQ3MywgMHgwNDk3YjJkZCwKLQkweDk5NmQ0YzJmLCAweDllMDBmODg1LCAweDU5ZjZkZGQ2LCAweDVlNjEzYjRmLCAweGYwODE5NGFiLCAweDBhYjVlZWZkLAotCTB4MzgzMGI3YmMsIDB4MGFiYjE1ZmIsIDB4NGE1NjZkZjAsIDB4OWI0ZGNlMDEsIDB4M2I4MzA1OTUsIDB4Zjc1MjViZmEsCi0JMHhlM2FlMDE5NiwgMHg3YzMyZjIxYiwgMHhmMmU2ZWQzMSwgMHhkNTEwOWZiNCwgMHg0YzVmNTFkYSwgMHgwMjcyMTY4OCwKLQkweGRhNjU0MWRjLCAweDE3ZTc4ZTkwLCAweGY3YTQxNDg0LCAweGE4OTEzYTkyLCAweDI5ZmU4ZWI2LCAweDQ5ZTkwODYxLAotCTB4ZmExN2ZmZmYsIDB4MjY4M2UwNGYsIDB4NmU1YjcwNTcsIDB4N2I5NmJkMDcsIDB4MGVkNWJmZTgsIDB4NzBmMzlkN2EsCi0JMHg4NWVkNDlmYSwgMHhlNWViZmRiMSwgMHgwYTA3NDBhMywgMHg4M2RmYWQ0ZiwgMHg0Y2ZlZTNlNSwgMHg1NWZiZDcyYywKLQkweGZjNmZkYmM0LCAweGUwZGNiMDgzLCAweDI3ZjNlMmY3LCAweGRjYjBhM2ZkLCAweGZjYjBkN2U0LCAweGNiMGNiZjlkLAotCTB4ZGYxY2JmYTAsIDB4ODU5ZmUyZGIsIDB4MGZiZjU2ZTUsIDB4YWZlMzNmOWYsIDB4NWZjZWIyYzAsIDB4Zjc5ZmNmOGQsCi0JMHhiZDY1OGJkZiwgMHg1ZmNmODAzZiwgMHgzMmMzYWZmMiwgMHg3MmM1YWZlNCwgMHg5NjAzN2ZhNywgMHhiZTIwZmUwZCwKLQkweDBlYmY4YWY3LCAweDA4N2Y0NmNiLCAweDM3ZjFlZjlmLCAweDQ3ZjYxOTYyLCAweGY0MGJkY2IwLCAweGRmYzQ2NWE1LAotCTB4ZmY3ZWU1OGMsIDB4ZmEwZjJjNTEsIDB4NDNiYmYwNWIsIDB4M2U1ODkzZmUsIDB4MWVlZWYxYzIsIDB4OGEyNDhhNDcsCi0JMHgzYzQ2YjczNywgMHhlYTQ4NWM1NCwgMHhhNjQ4YWQ2NCwgMHg1NjcyZDRmNSwgMHg1MDIzYmY0ZiwgMHhiYTdhZDBhNCwKLQkweDFlMjlkNjhmLCAweDE0OGQyZDdiLCAweDU3YmQ2OTU5LCAweGI5Y2Y2YjM1LCAweDY4ZGIxNDlmLCAweGRhYzAyNzNkLAotCTB4MTVhMjNkZmIsIDB4NWZiZDY5ZGIsIDB4YjgxZjZiMmQsIDB4NDQ5YzUwMjksIDB4YWM4MzAzZWIsIDB4NDhmYWFhZmQsCi0JMHhhZmQ2ODNiMSwgMHhmY2Y2YjEwYSwgMHhkMjcxMjkzMCwgMHhkNTg0N2U3YSwgMHgyNTY4OGUwYiwgMHg2ODJmNWEyZSwKLQkweDBmYzJmNTY2LCAweDVhNmUyNTAzLCAweGRmNjE2YzJmLCAweDI5MTMzOThmLCAweDMxZjVhNjQ5LCAweGMyN2RhY2VkLAotCTB4NDNkMTMyMjUsIDB4ODA4ODEzZWIsIDB4ZDE2NzYyZjUsIDB4MmY1YTE0YzQsIDB4Njk3YWIwZjYsIDB4MWE5MmQ5ZWYsCi0JMHhjYWY2ZmY4NywgMHhlNTA5NzMyZCwgMHg0ZGMwYmE4NSwgMHhlYjQ1OTQ5YSwgMHhlMjBhY2I0YSwgMHhjYzBjZjhhNSwKLQkweDI2NDQ3YWMyLCAweDQ4ZmRhMGYzLCAweDhkMjZiNjYwLCAweGFjODU3NWE2LCAweDBlZmZmNjg0LCAweGZkZjZjNjJjLAotCTB4ZWRlZDhhYjIsIDB4YmVkODE1ODEsIDB4ZGRiMTUxNWYsIDB4YWM3ZWVhYjIsIDB4NmMzNTk0MWYsIDB4MjBmNTViNGYsCi0JMHhkMTUwN2ZiZSwgMHhhYWUwN2RiMCwgMHg0ODdlYjE0NywgMHhhOGZiNjFmNiwgMHhmN2M1YmY1NSwgMHg2YzNlMjkwZiwKLQkweDUwNzU3YzdmLCAweGZmZWI0ODliLCAweDAwYjZmODIxLCAweGJlMDhkNzVmLCAweGZjMDc5MjBhLCAweGE3MmNjYTFhLAotCTB4MjA0NmJhZmMsIDB4MWUzZTQwYjMsIDB4ZjJhNmE2MDYsIDB4ZDE0YjI2YjAsIDB4ZmRlZGJmNDAsIDB4NTE2OWYwYmEsCi0JMHgwNjlkYmNlMCwgMHgzY2NmMDVmNSwgMHhiY2ZkOGI5YywgMHhiNGM4ZmQ4MCwgMHg3ZWViYjExZiwgMHhjYTMzN2MyNiwKLQkweDZmODRjZmQwLCAweDFhN2VmNDJhLCAweDdiMWFiZGUwLCAweGZiZDlmYWY3LCAweDNjMjMxOGNkLCAweGZiZDYyY2RmLAotCTB4NWM3ZWMyNjksIDB4ODRkNzliZGQsIDB4ZjA4Y2UzY2IsIDB4ZjdhYTVlNWMsIDB4NDlmYjA4NzMsIDB4MTEzYzFlZTksCi0JMHg5ZmExYTQ3OSwgMHhlZjUwYmM4OCwgMHg0ZmQ4NGZlNywgMHhhM2MxZWVjZiwgMHhmZDBkYTMyOSwgMHhiZDIyY2E2OCwKLQkweDRmZDhhMzlmLCAweDg5ZmFmNzU2LCAweGYwOGQ2MzI4LCAweDdlZjQ0YjI4LCAweGZhN2VjNjNlLCAweDlhNWU2Zjc0LAotCTB4MWUxMWJjNzUsIDB4Y2ZkZWE1NmIsIDB4NmU3YmE0NjksIDB4ZWZkOWZhZjcsIDB4YmY2N2UyMzIsIDB4ZjM5ZjhhMmIsCi0JMHhlZTgwY2YwOCwgMHg2ZGQ4YWJjZCwgMHgzYmIxNGZjNCwgMHhkODRiOWY4YSwgMHhlYmRkOTVjZiwgMHg4OGRiYmY2NywKLQkweDI4ZWVmZDlmLCAweGU2MDE2NDdlLCAweGYzN2JhNDM1LCAweGUyMzY0ZTJhLCAweDhhMzkzOGE3LCAweGYwMDBiNzFmLAotCTB4M2MxZWVkMGMsIDB4ZjExYTdiMDcsIDB4MTQ2N2IwNzMsIDB4Y2YwODE5M2YsIDB4MzNjMWVlODgsIDB4OWY4OGRkMzEsCi0JMHhmYzUxZTk4OSwgMHhlOGNmMDhhOCwgMHgzMDczZjVlZSwgMHg4MzlmODhkZCwgMHg1Y2ZjNTFlOSwgMHhlZjhjZmQ4OSwKLQkweDY2MjZiY2RlLCAweDMxMzNmMTE4LCAweDAyOWY4YTIzLCAweDU3YzhhN2VjLCAweGRhMTBmMDg3LCAweDNmNzEyYjhmLAotCTB4ZjExOGZhODcsIDB4MTQ0ZmE4NzMsIDB4OWZiMTYzM2YsIDB4YmM5ZmI0NDksIDB4Y2QyOWZiYWUsIDB4MzRhN2UyMzEsCi0JMHg4OTlmOGEyNywgMHhiYmViZTc4OCwgMHgxY2ExY2ZkNywgMHhlNTBlN2UyMywgMHgwNTMzZjE0NCwgMHhiZGQyOTlmYiwKLQkweDM1ZjY5NTc5LCAweDJmYjRhN2UyLCAweGQyYjVjZmMzLCAweGU4Njc1YzUwLCAweGU5MTVlOWRhLCAweDJlZjVkNzI3LAotCTB4YmVmYTA0ZDIsIDB4ZDE3NTYxZTgsIDB4Zjc2MDI1ZTMsIDB4NDMzZGJhODgsIDB4YmU5MTM1OWEsIDB4Mjk0ZmFjZWYsCi0JMHhkYWM0OTg3OCwgMHgwMjc3YzUzNSwgMHhjYWQ0NWM3ZSwgMHg5MjZiYjU4YiwgMHhlYzE5MjU0NywgMHhkNTJkMTRhOCwKLQkweGQ2NTFlZjUwLCAweGNmN2VmMGNiLCAweGY2ODY3ZWYyLCAweDE5NTc1OThjLCAweDA1N2NiM2RhLCAweGM1NzY3YTg2LAotCTB4N2RmYmMzMTgsIDB4ZjUwZDhiYWEsIDB4NjBkZWY3YmUsIDB4NzAzNzNmNzgsIDB4Yjc5ZWExYjMsIDB4Zjc4NjI3ZWUsCi0JMHgzMWNlZDQwNywgMHg2MWIxNWZiNCwgMHhjYWZkYTFiMSwgMHhmZDQzNzJlMCwgMHgzNzdmYmFlYSwgMHhmNDI0M2ZiYywKLQkweDlhZmRhMTgwLCAweGVkMGQ4N2M2LCAweDFiOGYyMzQzLCAweDNmMGVjM2VhLCAweDQ0N2Y3ODY5LCAweGZiNDMxNmYzLAotCTB4MWJjZmEzYzgsIDB4ZWNiNzQ3ZGEsIDB4OWVjN2Q0MzQsIDB4N2Y3ODYzZGMsIDB4NDM3ZWZiN2MsIDB4NmY4YmRhZmQsCi0JMHgyMjJmZGUxYSwgMHhkYmRhMzY3ZiwgMHhlZjBjMGZiNiwgMHg2YTdjZjI0ZiwgMHhmMzJlYmY2OCwgMHhlYTlkOTM3MywKLQkweDlhYmYxY2Y0LCAweDJiOTA0NWQ3LCAweDIwNDk3ZTgyLCAweDM1N2I0MTRiLCAweGFlYjA1MmUyLCAweDNmMzI3MmY0LAotCTB4M2Q0MGI1YzUsIDB4ZDk0N2Y5NDYsIDB4NDM0ZDU3M2YsIDB4ZDQ3ZmE0YmUsIDB4NTVlYTI4NmUsIDB4N2QwYjQ1NzEsCi0JMHhiZTMxZDNmZSwgMHhmOWY0M2MyYiwgMHgzNWRmMTU0ZiwgMHgwZGY2Mzg5ZSwgMHg2NDgxMzdlNSwgMHhhMDVhYTk0MiwKLQkweDk1YWZiNzM0LCAweDY3MTdiZjE5LCAweDMxZjgxYTVmLCAweGQyY2FiZWZkLCAweGQ2ODUzMDNlLCAweDIxNDU4OTdiLAotCTB4MDQ1NzhmOTAsIDB4NDlkNWRhMGIsIDB4Zjc4NmE5MjIsIDB4ZmQwNGFjOTIsIDB4ODViOWI1YTYsIDB4ZTQ2MjA3NGYsCi0JMHg2YTFmNWQ2MSwgMHhmZDFkMDg2NywgMHg5OTdkOTNhZSwgMHhmYWFkNDc2OCwgMHhjZTc2MDAyOCwgMHg1ZTc0M2U5YSwKLQkweDRkNzkwOGJkLCAweGU4MTIyOGY4LCAweGIzZWZiZjRmLCAweGZiNDdkMzIwLCAweGNmZDQyYWIzLCAweGExNWYxZDg4LAotCTB4ZjFjNjBmZTMsIDB4ODcwZjIwMjMsIDB4OWQxMWZjNjAsIDB4MWJmNmI3YzcsIDB4OTZkZjE4NjUsIDB4ZGYxODYxNTMsCi0JMHgzZGYxZDBhNiwgMHhmNTVjM2ZkNCwgMHgxMjlmMWYxOSwgMHg2ZjIxMGM2MSwgMHhmOGUxOWYwOSwgMHgxYzBhOWNkNiwKLQkweGZkNDJhZDdmLCAweDkzZjFkOGFlLCAweGMzMzdlM2EyLCAweDM0NGJkZmZjLCAweDhjNjM3ZWZmLCAweDZjNTljZmYzLAotCTB4ZTZjMmJmOWMsIDB4YjNhYWZlZmYsIDB4OWMyNGZjN2MsIDB4NTljMjA3ZmYsIDB4YzU5Y2ZmMzYsIDB4ZDY1NmZlNmMsCi0JMHg3NzdjNzQ2ZiwgMHgzMDJkZmYxNCwgMHhlMzA0ZjFmZSwgMHgxOWM2ZjM1YiwgMHhhOTc3ZGZlNywgMHgzNjU2ZmU3MSwKLQkweDVmNTVlOWZlLCAweDM4OWRmMWYyLCAweDk3YzJlN2ZlLCAweDk3N2RmZTZjLCAweGQ1OGFmOGUyLCAweDUxZmUwNWU3LAotCTB4ODNhYTkzYjIsIDB4OWJkMjdjNzQsIDB4NjAwY2JlMmEsIDB4OTQwZTNhMTcsIDB4ZDBhOTUyODMsIDB4ZTg0ZGIyMTAsCi0JMHgzNGZjNzA4NywgMHg1N2RiZjE4OSwgMHg1MGRmOTQ0OSwgMHgzOWYwMDU5ZiwgMHg1OWNkNTIwOSwgMHhjZTQ2ZmQ0OCwKLQkweDhiZWE0YmViLCAweGQ4N2JkMDE0LCAweGY5YWRmZDRlLCAweDhkNzlkNDFjLCAweDU5MzdmMjIyLCAweGEwMGUwZDZmLAotCTB4OGEzNmI2ZjAsIDB4NWJjZmE4MDEsIDB4ZmEwODNlM2YsIDB4ZWU0YWNhYjUsIDB4MjRlZjg3MmUsIDB4OWZlNzgxMTIsCi0JMHg5NmM4N2FmZCwgMHhjYjk5NzlkOCwgMHhmMWYyYjVmOSwgMHg4Yjc5MTg5NiwgMHg2NGM1ODFmYSwgMHg2Zjg1MzU1MCwKLQkweDg4YzEzMDEyLCAweGQ0MjdmYThlLCAweGY4YzcwMzhmLCAweDEwZjdlYTQzLCAweDJhN2NmZmVhLCAweDliZmVmMWIzLAotCTB4NmY1MDdiZmEsIDB4M2ExZWZlYTEsIDB4N2UxNTY0Y2UsIDB4Mzc3YmJiNDcsIDB4Y2U1ZmMyOTMsIDB4NjI0NGZmZTEsCi0JMHgxZGM5ZmFmMiwgMHhlNTQwMzA0MiwgMHgwZDlmYWJmMywgMHhlZWZhZmY0NSwgMHhlOTE0MWQ3YiwgMHgwZWNjNzAxZCwKLQkweGU5ZDQzMGY0LCAweGE3NDAwMmJjLCAweGUwZDZkZGY2LCAweGFiZjEwMTE2LCAweGExYTZiZTAyLCAweDc3MzIxMjY4LAotCTB4NzVjNTM2NWQsIDB4ZGQ3ZmZiYzcsIDB4ZTA5MGU1M2IsIDB4YTI1NmU0MjYsIDB4ZmRmNDE5YzksIDB4N2QwYTU3M2IsCi0JMHgxOWRjNzQzYywgMHhhZDgwYjU5YSwgMHgwNWI2NWE0MywgMHg1YjY0OWFlNSwgMHg3MzcyMTE0NiwgMHhmNjk5NTBjMywKLQkweGYyNjlhNjQwLCAweGUzMzEyZDI3LCAweGQ2MzMyZjRlLCAweGViMWI5NDY3LCAweDViMjZiMmFkLCAweGQzYWQ1YzI4LAotCTB4ZjY5OWIyMDQsIDB4YjE5NjczM2IsIDB4YmZhNzFmNWQsIDB4OTlkMTk1MjUsIDB4NzE0ZTU3OGYsIDB4Y2QxZjQ1OTIsCi0JMHgxZTAwYjI4NCwgMHhiM2NlOTA3YiwgMHgxZDViZWMzYywgMHgzMmI5YWE5ZSwgMHgxZjFmYTA4OSwgMHhhZTgwNDllOCwKLQkweGVmN2MzNDgxLCAweDZmMzYxZTI3LCAweDY0YjNiYzMzLCAweGU3NGU1NjliLCAweDE4YjY2YjM5LCAweGMzMzZmZTA0LAotCTB4ODc1ZWZlZmYsIDB4ZTVhN2M5NjYsIDB4NjI2NDI3YmEsIDB4MzMxZjNjZTksIDB4Y2NmOWI3ZmMsIDB4YjBjOTA5ZjMsCi0JMHg2MTVlZGZjZSwgMHhlNmY4Y2U3ZSwgMHgyN2ZmYTczOCwgMHgzY2I0MWZjMCwgMHhlMTQxZmMwMSwgMHhhM2Y5YzYzZiwKLQkweGZlMzJhZjQzLCAweGE2ZmFiMmE4LCAweDZmYjQzZjAyLCAweDk1ZDIwOTE0LCAweDljYWRjYmYzLCAweDFhZDdlNjVmLAotCTB4OWYxMDgyZjksIDB4Mzg1Yzc0MGMsIDB4Mzg3ODI4NGIsIDB4NzI2NjBmODYsIDB4YzFiODU4M2UsIDB4OTI3NzM3YzgsCi0JMHg4NzE1OWM4MCwgMHhkZmFkYjcyZSwgMHhkYWE2NjBmYywgMHg3MTFmN2U3OSwgMHg5MWZkYjliZSwgMHhjZTlmODg3ZCwKLQkweGJhNzQ2NGYzLCAweGNlZTlkMzhiLCAweGFkZmI2MzZhLCAweDcyNzdhZTljLCAweGYwZGFjZWJhLCAweDdkNTRlYmQ4LAotCTB4NDFhODlmOTAsIDB4ZWFiZGU0MTksIDB4MmQ5ZTlkM2UsIDB4MzhmYTdhMDYsIDB4ZGU3MGNkM2QsIDB4ZDc3OWU5YzUsCi0JMHhjZDNkMThjZiwgMHg3YTcwYjZmMCwgMHgyZjM4NmNiNiwgMHhlMTlkN2U5MywgMHhmNzc3YzMzNSwgMHg4M2U2OWRiZCwKLQkweDgxZDlhZDcxLCAweDZhYWNmNGY4LCAweDJjNzE1YTJjLCAweGU4NjU3OWU2LCAweDYyYzcxNWZhLCAweGRkNDk2Y2U0LAotCTB4NTE3ZDQzMzQsIDB4ZmJjMzM2ZjAsIDB4MzZjYzM3MGIsIDB4NWRhZmNmYjQsIDB4YmI5ZjY4NjQsIDB4N2Q0MzFlZWUsCi0JMHg4NjY3ZTA3NiwgMHg3N2JlZWZmNywgMHhjZWZkYTE5NSwgMHhlZDBjODdlYSwgMHg2NjNjNTdiNywgMHhkYmU2ZGZhOCwKLQkweGU2N2Y3ODY4LCAweGY2ODZjZGFjLCAweDE5Y2ZlNTE5LCAweGVkOTdhN2RhLCAweDY5YTdkNDMwLCAweDBiZWYwZGJiLAotCTB4NmRmNTE3N2IsIDB4ZjdkNTc1YzEsIDB4ZWYxMDE5OWYsIDB4ZjkxNTliZmMsIDB4NzRlZmFjZDQsIDB4YWZjYzc4YmQsCi0JMHhmZWUzZjNlMiwgMHhmNDllNTg0MSwgMHg2OWY5ZjE3YiwgMHg1NzJjMjhmZiwgMHhlYmE2ZmU4MSwgMHgyYjM3NjU4MiwKLQkweGRkOWYxZWFiLCAweDk3NDJmODE3LCAweDZmNjU0ZjhiLCAweGFlZDllODBlLCAweGJlZmVhMWY0LCAweGJmZDFlZjU5LAotCTB4OGE3Njc4ZWMsIDB4NDgxNTJlNWUsIDB4NmQ4M2FjMzksIDB4OWZkNzRlZGMsIDB4NGVjYzJkZGIsIDB4MmMwMWU0MjAsCi0JMHg2ZTRjMmE5NywgMHgyYWNjZWU5NywgMHg0N2E4NmUyNiwgMHgxMzNiNTYwNiwgMHgwMjQyNGJmNywgMHg2ZDdlNjdjZSwKLQkweDg1Y2UwMTllLCAweGMxMzZhZTFiLCAweDZhZjkwNWI3LCAweGUxOTg3MDUxLCAweGIxYmE5MmY5LCAweGVjY2VlZjg2LAotCTB4NjViZTExMTMsIDB4NjFhM2UzMjAsIDB4ZGY3ZjJiMzksIDB4NzIzM2ZhMDIsIDB4MTBmYTY3MjAsIDB4MDBmYjU3ODAsCi0JMHhkMTNkOGRlYiwgMHgyZmUzM2I5ZSwgMHgwMDZjNzE1YiwgMHhjYjFjYjllMCwgMHg1ODU5ZmU5MywgMHhiMGZiZjcxZSwKLQkweGMwYWZlNjNjLCAweDM1N2YxM2YyLCAweDdiZmUyZDk2LCAweDdmNmZmY2IxLCAweGZkMGZjYjAwLCAweGRmN2NiMGViLAotCTB4NTFlNThiNWYsIDB4ZGYyYzA2ZmYsIDB4N2NiMTA3ZjMsIDB4ZTU4NzVmZDcsIDB4OTYxMGZlM2IsIDB4MmM0NmZlY2QsCi0JMHg5NjFhZmQ1YiwgMHhmMGM0YmNiYSwgMHgxOGFjZGY0YiwgMHg5ZmY1ZDE3ZSwgMHg3MjRmMWZhZSwgMHhmYzBkMzk3ZSwKLQkweGI2MmY4ZjEyLCAweDg0ZTJmOTE4LCAweDYxN2M4ZDVjLCAweDNhNjY4N2Q2LCAweGY3ZGZmNTk4LCAweDNmMjk4N2U1LAotCTB4ZDA3NDNmMTIsIDB4ZWY0NGRiM2IsIDB4OWRlOGFlYmMsIDB4N2JkMGM2MjksIDB4ZTBjM2M1OGEsIDB4MDVmZWY0ZTEsCi0JMHg1ZWM3MWJjMCwgMHhmYjhiMDQ5ZiwgMHg0ODNiMTg4OCwgMHhmYWMwYjIyYiwgMHgyZmVmOWNiMCwgMHgzZjU4MDdkMCwKLQkweGExYWVjN2M3LCAweGJkYTMzNWRkLCAweGZhMDQxYzE0LCAweGZmYTBkY2Y4LCAweGY5ZjEwODE5LCAweDUxMjk0NzczLAotCTB4Y2ZjZjEzNzIsIDB4Nzg4NGJmNGMsIDB4YWJlOGYxODAsIDB4MmU5NDgyMGIsIDB4ZGJiNzNhM2QsIDB4ZWQ1ZTE4OTMsCi0JMHhlODQ2NTIxNiwgMHg4MGQwZjE3YSwgMHgwNjczYmM2NywgMHhhOTIyNWQ2MywgMHgzYmQwN2RmMCwgMHg1ZmE3MTVjZCwKLQkweDdlMDI4MzZhLCAweDhkNmJjMmJiLCAweGU4N2NhYmViLCAweGZmOTNmOGVmLCAweDhhNzI4NDJjLCAweDQ5YTFkOTg1LAotCTB4ODdiNDQ0MDcsIDB4MmY2OWU0NDksIDB4ZWZhYTM3ZTAsIDB4ODg0Y2RlYWQsIDB4NTAwZmI3NjMsIDB4OTMxZWI4M2MsCi0JMHgwMmZlMjMxMiwgMHgzZGZjMDZjNSwgMHg4Y2Q0NzE0NCwgMHgyNjZkNTllYiwgMHg1N2ZmYWZlMiwgMHg4MWJhYjMwMywKLQkweDY0ZjRhZWJmLCAweDAzOWNmODU3LCAweGUwMTdmZWYzLCAweGQ1ZmQyYmIzLCAweDlhMjJkZTk1LCAweDlkMjM1MmZhLAotCTB4MjFkZWRiN2YsIDB4MzBhYjBmMDUsIDB4NWJlM2I3ZWUsIDB4YzMzMmI3ZGYsIDB4N2M4ZWY4MTMsIDB4ZjNhZTk2ZGMsCi0JMHhhMTBlNzM3MSwgMHhmMmU1OWNlMywgMHg4YWUxYWU3MiwgMHhiNDRiYTA2NCwgMHgyOWU4MmU5ZiwgMHgzOTQ3ZDdmYywKLQkweGU2Y2ViZmEwLCAweDZiNWJmYjFhLCAweDIxNTkyZmVlLCAweDVjNzQzNWMyLCAweDY0OTBhMjk3LCAweGJlODg1NjQyLAotCTB4MDZmZDExNWEsIDB4ZmMwMDRiNmYsIDB4NmYwZWJkZjEsIDB4ZDhmZTBhOGQsIDB4NTQ0NjNmZTksIDB4YjdlOGQ5ZTgsCi0JMHhiNGZjM2I5ZiwgMHhlNTliZmMxYiwgMHhiMWY1NjI5OSwgMHhjYmQ0NzQzOCwgMHhiNTZlNTBjYSwgMHg2ODBmZDYzMywKLQkweGQ1Y2ZkNjM0LCAweDljMjE2NTBhLCAweGNiN2M5YTk3LCAweDNjMDc1ODEwLCAweGQwNjRjN2Q1LCAweGVhNTg5OWNiLAotCTB4NTRjZjJjZmQsIDB4N2Y0YTFjNzAsIDB4NTNlYTQ3YTYsIDB4ZjY5Y2NmNTAsIDB4MWZiZGYwZGIsIDB4ZmQ0NDhlMWIsCi0JMHg0MGQxYzA3NCwgMHg4M2RmYTUzZSwgMHg0YmNlNWQ4OCwgMHgzOTQyN2VmYywgMHgxMDI4MmU5MCwgMHhmOTYxMjQ4ZiwKLQkweGVjZGZmMDJiLCAweGZkY2JiZmY0LCAweGViMDk1ZmEwLCAweDIxNTViZjdhLCAweDA2YmQ2MDMxLCAweGM2MWJkNzllLAotCTB4ZmFhOWRmYTMsIDB4OTc3YzJjMWUsIDB4NzIyNGRlNTgsIDB4NGE3N2U3NWMsIDB4N2VmODM3YjcsIDB4N2IzYTkyZjEsCi0JMHg0YzJlZDFiNSwgMHgxYWFiZDQzMSwgMHg3NjBkYWFiMywgMHgwYzAzZmMyMiwgMHgwMjQxMGFlMSwgMHg2NzI5Nzc3YiwKLQkweGI5YzkzNmJmLCAweDJiNjhmODBlLCAweGRmODBmYjA0LCAweGE1NWVmNjA1LCAweGE5ZjE0NWFkLCAweGMwY2QyNjI4LAotCTB4ZTk0NjczOWYsIDB4ZmNjZWFmN2MsIDB4NTNhN2VhODAsIDB4ZTQwNGM5NmYsIDB4NTBhMjVjOGIsIDB4NDdmNDc2MTUsCi0JMHhhMTYyNTA1NywgMHgzNmJjYjlmNSwgMHg2NGM5NjFhNywgMHhiZDRlYWY1OCwgMHhmNWRhMjM3MiwgMHgxYmI5NDhmMywKLQkweDUyMGFjZGZjLCAweGNmZjEwODViLCAweDA2NTJjNGIzLCAweGJjOTY3OTcyLCAweDIzMTYxZWUzLCAweDA1NDVlNzg3LAotCTB4Y2ViYjk5ZTEsIDB4N2Y1MzE3NjgsIDB4Yjg1ZjUwZDksIDB4NDA1ZjU4YzEsIDB4N2Q4NzRlNmUsIDB4NjVlYjA1ZjAsCi0JMHg1ZjQwMTQxMiwgMHgxNTNmZGIxOCwgMHgyNDJkMWM5OSwgMHg3ZDYwNmJkNSwgMHg3NWIzMmY1ZiwgMHg0ODg3OGU2YywKLQkweDU1NWY1NGQ5LCAweGUxNTRmYWJlLCAweDFmZmY1YTZjLCAweGY0MmRjNTkxLCAweGE5NDVkZDdkLCAweDFjNTg5ZmNjLAotCTB4YjQ2OGFjZGEsIDB4NjE4NmQzZmQsIDB4NDNjZDUyYjcsIDB4ODFhZTBmYmYsIDB4NGJiMDJhZjUsIDB4M2I1MzZlZjAsCi0JMHhjMmJiZWZkMywgMHg1ZjU3ODY2ZiwgMHgyZmVkM2JmZiwgMHhlYjJhMzg3MywgMHhjNzE4MmQwNCwgMHgwMjQ5YjAwZSwKLQkweDU4MDM3N2Y3LCAweDg2M2M5NjBlLCAweDUzMjhjMmI4LCAweDUzZjM3YmZkLCAweGQzZjAzMTFhLCAweDRhYTdkMTU2LAotCTB4ODBmZjE5M2QsIDB4ZWQ0ODI1M2YsIDB4ZjQ4N2VmOGEsIDB4ZmZhOWQ5OWYsIDB4ZmY2YTNmYzEsIDB4ODVmZjY5YmQsCi0JMHhmZDQ3ZmU4NiwgMHhlZmY3ZmRhOCwgMHg2OTQ0ZmYwNCwgMHgyYmZlZTc0NCwgMHg5NWYxN2Q1ZiwgMHg4YjI3ZDUwMCwKLQkweDRkZGFmZmI3LCAweDRhNzhmYWU4LCAweDUyZjc0ZGFhLCAweGY2ZGQyZWZhLCAweDdjZTgxYmEwLCAweDgxYjgwYTUyLAotCTB4YzUwNTRmNWYsIDB4ZjU5YzYwYjIsIDB4ZTA0OTNlZWEsIDB4MTRlNmEyZjYsIDB4ZmYwNThlMjAsIDB4N2U5ZmZkYTQsCi0JMHhkZmU4MTdmZSwgMHhmNjRkYjU3ZiwgMHhjZWFhN2M2MCwgMHgzOTUyYjExYSwgMHg2OGIwZDY1YywgMHhmYWM3YzkzMiwKLQkweGY2YmVhY2M3LCAweDhkZWExMTBiLCAweGZjNWJmZTQ2LCAweDIxZDNhZmVjLCAweDBhNzI4MmRmLCAweGQwNDRkNzhmLAotCTB4ZjViNjVkOWUsIDB4OTc1ODUyYjMsIDB4Y2EzYjQ4YWEsIDB4MTgzYmY5OTEsIDB4ZWEyYTYyZmYsIDB4NzI0YWQ5YmYsCi0JMHgyNzBhNzZlNywgMHgxYzU1ZGRmYSwgMHhiZjBkNTUyZiwgMHg0Mzc0NDJmOCwgMHhkMDA5ZmQ3OSwgMHg0MDQzZDQxNywKLQkweDVkZmNkOGJmLCAweDk3NGZiNzA1LCAweGUzYjRhZTRhLCAweDIzMjcxNGQ0LCAweDhiZDA0OGM5LCAweDkwNDg1ZTNhLAotCTB4YWJlMmE3ZDksIDB4M2M0M2U1NGYsIDB4YjdkNmNjZjIsIDB4YmUwYzQyZGMsIDB4MTczYTc5NzQsIDB4N2I5ZmZiOWEsCi0JMHhiNzdhYzRkNCwgMHhhYzViY2E5NSwgMHg1YmFmYTQxZCwgMHhhYmI3MjM2YSwgMHgyYTVjYWNjMywgMHgxZjkwZGM0NywKLQkweGVjYjM3NGIzLCAweDRiYzdkMDBkLCAweDk5ZmE3YzVmLCAweGY4M2UyMTI3LCAweDAwNzdhYjM3LCAweDhiYzk3ZmVkLAotCTB4ODYzN2JmYWYsIDB4OTBlYzk3ZDYsIDB4NjliMzI2ZDMsIDB4MGVmNDg1MzgsIDB4ZmZkMTU0ZmEsIDB4YTBlODJkZWUsCi0JMHg1Zjk3ZTJjNywgMHhlYzIxZDQ1NywgMHgxZGE5ZmRmOSwgMHg2M2IyNTk3NCwgMHg3NDg2NDI5ZiwgMHg2ODQ5NDdjNiwKLQkweDhjZTJkMjlmLCAweGM3ZDA5ZjQzLCAweDg4Mjc2MGE1LCAweDAwYWQ3ZWFmLCAweDE1ZWQ0ZmZkLCAweDFjNmU0NjQ4LAotCTB4MWQ3ZTZlN2MsIDB4MTNjMDAwZWQsIDB4MmJkMzkzZDIsIDB4ZmJkMzNmNGEsIDB4YTAyZTk0NTUsIDB4MzJmNGNkYjcsCi0JMHhmNDA1MzdiZiwgMHgyZmQ2MDhjYiwgMHhmZTUwMmRlNCwgMHhlNDBmNjk3ZSwgMHhmNTZmYmQxNSwgMHg1ZTJhMWUwMiwKLQkweGY5ODZlMTVhLCAweDE5YWE5MDljLCAweDYwZjUzZjlmLCAweGFmYzc0NmJhLCAweDFlZTkwMzkwLCAweDhhZjNkOTJjLAotCTB4ZjIxYmZkZGYsIDB4ZmZiN2MyZGYsIDB4MzVlMzFkMmQsIDB4ZTBiMmNiNDQsIDB4ODJjODE0NWEsIDB4MzRkZmNlNzksCi0JMHg4MGI5ZTcwMywgMHgyYjBmOTBmOCwgMHg0MWNiMTI5ZSwgMHg5MTI5N2UxZiwgMHhlNDcxMWRiMiwgMHg5Mzk3M2NlNCwKLQkweDcxMjg1YjEzLCAweGQwNGYzY2U5LCAweDZkZjMwNjY1LCAweGRiODMxMWRlLCAweDg3YmVkZWQwLCAweDM3ZjgzZTgwLAotCTB4MzE2YTE3M2UsIDB4MWI0YmZkNjAsIDB4OTIxYmQ3YTMsIDB4YWI1MTk3ZWUsIDB4Yjc3Zjk2MzMsIDB4M2EwNjZkYWUsCi0JMHg2NWEzZWU5ZCwgMHgxNTQ2M2VjMCwgMHgxZjFjMDI5MSwgMHhhZmRhNjVjMiwgMHgwY2E0ZjZmOCwgMHg0YWEyMjc0NiwKLQkweGJhM2JmYzg1LCAweDczYzA5N2VlLCAweGQ2NTliZjc4LCAweGVmODZmOWVjLCAweDhlZGNlNWM4LCAweGYxZjI1N2YxLAotCTB4YjA0OWRjMjksIDB4OGY0ODlmNWUsIDB4YjJhYWI3NmYsIDB4YmFlODA3YWUsIDB4MzE2N2MzMWQsIDB4N2ZlNGNlZjIsCi0JMHhkZTRjNDNlYiwgMHg0ZTBmZjk3NSwgMHgwYmY2ODMyYiwgMHg4MjM5MzJlZiwgMHhhNDNkNjBlZiwgMHhiMDMyNDU3MCwKLQkweDAyMmRkZjdkLCAweDg5MmIwN2VhLCAweGFkZjM5M2M0LCAweDYzNzM5NzMyLCAweDI4NWY5OWJiLCAweDFjOTA5MmZjLAotCTB4NGUzMDM3YzMsIDB4ZjcwMWQyMmEsIDB4YTdhYzE2MzEsIDB4ZDFlOGM3ZGYsIDB4ZGRkNzE4MmEsIDB4OGU1ZDVmYjksCi0JMHhkMDdkNzIxNywgMHg2NDA3ZDI2YSwgMHg4OTAzZDMxMywgMHhhZTAwYWFlZCwgMHhlMGU1NGI3ZiwgMHhmYzgyNGYzMywKLQkweGE4MGQ3OTUyLCAweDM5NzJiZjIwLCAweGZhZjNmZmNjLCAweDg0ZmRlZjAzLCAweDIxZTdjZGNhLCAweDdhOGQ2ZTVkLAotCTB4MTViNzJjZDUsIDB4Nzg5MDQ3M2IsIDB4ZDNiOWZiNzIsIDB4MmRjYWUyNGIsIDB4NmU1NzFlN2QsIDB4Y2ZjODJkOWQsCi0JMHhhYWY1YWZmZiwgMHg5OTBjYzc4ZSwgMHgwZWVhZjFlMiwgMHgzMjdhZWEzYywgMHg3YWNkM2UxMSwgMHhjNmE0YTc3MiwKLQkweGVmZjQ5M2Q1LCAweDk5ZDg1MjVkLCAweGQ0M2U3NTFmLCAweDBiZjE2ZmY5LCAweDFmNDE3ZDk1LCAweGU3NTRmOTQ1LAotCTB4ZWE5ZjI4YzMsIDB4NWUyOWQ4N2MsIDB4YjlhM2MwNmEsIDB4ZWZiMGVmZmQsIDB4ZGI2MmZjMDEsIDB4NzUxOGY1MzgsCi0JMHgwMTVlNmQyMSwgMHgzMzhhZmVlNSwgMHhiNGFmY2MxNiwgMHg1ZjcwMTcwZCwgMHgwOTA2ZDA2NCwgMHgzYzViNmZlYiwKLQkweDlkNGVjMDIzLCAweGNmZDVmNjNhLCAweGJiYmU0NjdmLCAweGNiN2RmMDdmLCAweDNmM2UyOTU3LCAweDZlYzg0MDE5LAotCTB4NWYwNDY1MjgsIDB4YzhlN2E1OGEsIDB4ZWFiMzgzMzAsIDB4NDNmNjA5MDgsIDB4ZTU4OWEwZmQsIDB4Y2ZmNGZlMzEsCi0JMHhiZGY3NjY2NSwgMHg2MWNlZTFmYSwgMHhiNmEyYzc4MCwgMHhhODJkYzljMSwgMHg5ZmEyMDczNywgMHhjOGY1YzU1OSwKLQkweDBjOWE4MGI5LCAweDM4NWNmNWZhLCAweDczYzlmZDBmLCAweGJjNTc0NTg3LCAweDM4ZTdjNmZjLCAweGY4ODA1ZjdkLAotCTB4YjZkYjJkMTksIDB4ZjI5MTVhOTIsIDB4NDc2OTFiNWQsIDB4ZDViMDIyYmIsIDB4ZDljNWI2NDYsIDB4OTk5MGFhZGYsCi0JMHhmOGExZmM5ZSwgMHgzZTAzZmEwMCwgMHg5NGI3YjM5ZSwgMHg3M2IxYzc5NiwgMHhiYmViOWRmZiwgMHg4MWZmZmJhOSwKLQkweGUxNTVlNmViLCAweGE3YjAxNmNkLCAweDMxNmFkYWFlLCAweGViOTYwNWM0LCAweDBhNDA1ZDdjLCAweGVlYTdhZjgwLAotCTB4MDM4NmJiYjcsIDB4NWU4YjBmMWUsIDB4MGFhZDAzYzgsIDB4ZTJmOGExN2YsIDB4ZjllNjhkZjgsIDB4OGY2MGZmNDMsCi0JMHg3MDdiMmIzZCwgMHhkMGU0ZDdkYywgMHg2YmMzYzA1YywgMHhmNjA0NmQ2NywgMHhiNTJiNzZkMywgMHhmOWMxZTI0YiwKLQkweGI5YzE4NTJiLCAweGNiYTMxOGZiLCAweGEyOTc4NThmLCAweDE4YTQ2NzM2LCAweDA5NWIzZGUyLCAweDNhNjc2ZGYyLAotCTB4NzNmM2U0MTMsIDB4MmFiODI0NzUsIDB4YjIyZGU4MTcsIDB4NjgzNTNkN2EsIDB4OTQxNGZiZTgsIDB4ZWY4MzhlNWYsCi0JMHg2MzVlZDEyZSwgMHhjNjhhZjNlNCwgMHhmNDA4MmYxZCwgMHhjMTYxNjViZCwgMHhjYmVkYTE2MywgMHhmODA1MTZhNCwKLQkweDQ1MzFhYWE1LCAweDU0MzY3ZDA0LCAweDNkNWJmM2Q1LCAweGUxODk2ZTQzLCAweDA5NjU2N2JmLCAweGNjNjA3OWU3LAotCTB4NWUwM2I3NmIsIDB4MDg1MTlmY2UsIDB4MDc2ODAxZTQsIDB4Zjg0ZjMxZGIsIDB4ZjIxODc4N2MsIDB4YmQ3OWEyNWIsCi0JMHgyNzUzMjdlYywgMHg0MTBmZDBjYSwgMHg3MWQzMzYzZSwgMHhhMTkyN2Q3MCwgMHhkN2M0YjYzZSwgMHg2YTlhZTAwYiwKLQkweDhkZTk1OTZkLCAweDFjMDFmNzgzLCAweDdjOTYzZmVmLCAweDViNzY1NTc2LCAweGU1ZDVkZjdlLCAweGM3OTYyN2Q3LAotCTB4OWQ1N2RkZjAsIDB4OWUyMzM3ZTUsIDB4YTU1ZjJlZmMsIDB4OTdiY2MwNjYsIDB4MDA2NWU1MzcsIDB4MjFiZjk3M2UsCi0JMHg1N2M3OGNmNywgMHhkZjk5ZmEyZiwgMHgwM2U3OWRiOCwgMHhmOTUwMzViNywgMHg3ZTQ2MjZiZCwgMHhjNmZjYTgxYiwKLQkweGZjYjYxMzg5LCAweDIyZmJmMmM4LCAweDdiM2M2ZmM4LCAweDk3NTdjZjhjLCAweGM3ZjBmY2RmLCAweDBkZjliZjI4LAotCTB4Y2ExZTQzMTYsIDB4ZWZhZjk5NjksIDB4ZTg1N2U1MDksIDB4ZDQxYTRiNzksIDB4OGUyM2FmNjUsIDB4NDAzYzA2YmUsCi0JMHhkZjNiNzM5YywgMHg0MDcxODAwNywgMHhiYmU1NTU4ZSwgMHhmYzdmZjFjOSwgMHhmOTc4ZTU4YiwgMHgzMzc5ODIyZSwKLQkweGU0Y2RlOTlkLCAweDJhNmVmOTc4LCAweDlkZDAwMmM3LCAweDI2ZjJmMWM5LCAweDlkYjljNzJhLCAweDI3NTA3N2U1LAotCTB4MmZkZjY1ZjksIDB4YWJlZmIwOGIsIDB4N2I3ZjczMWEsIDB4NDBhZjFkMDcsIDB4ZmEzNmJkOTMsIDB4M2M4NzQxN2UsCi0JMHg2Nzk1ODg4ZiwgMHhjZjIwNDk1NSwgMHhjZjI3YmI4NywgMHg1MzNjYjhiYiwgMHg4ZGU3ZWQzOSwgMHhkODZmNTc0MywKLQkweGRhZjYxZjk4LCAweDJmZjUxM2U4LCAweDQxZmU1ZjAzLCAweDZkZTlmZjQ0LCAweGZmNzNiMzBiLCAweDcwYzRmYTM4LAotCTB4MDBkYjhiZTAsIDB4NjMyZmNhMWUsIDB4ZmQ1YTFkMzksIDB4NzRiZmVjMDEsIDB4OTA3NGM2Y2MsIDB4YjU4MzkyOTMsCi0JMHhlYzNjODFiZiwgMHgwMTMyYWRjYSwgMHhlMWFjYjg3ZCwgMHhjZDUzZjQ2MywgMHhiZWRkMTc3MSwgMHg3NDVmYzczMiwKLQkweGMzOGU2MjNkLCAweGJkMzNhOTJjLCAweDlkYmUzMGE3LCAweGJjMjBiNjI2LCAweDc3YTI0ZmU0LCAweGQzYmUxYzViLAotCTB4ZTcwNGViZGYsIDB4OWNmN2RhZTEsIDB4ZWNlMDNiYzMsIDB4Y2ZhNDJlMmEsIDB4ZjRiODJiYTMsIDB4N2MyYjk1NzksCi0JMHg4NjRhMWJiZCwgMHhlMjkxYmM0MSwgMHhmMDI1ZTUxMSwgMHhhYTcxODhhNiwgMHg4NjAxYTJmMiwgMHg3MmI3MGNmMywKLQkweDE2ZDU4NzM4LCAweDYyZDg0MDk1LCAweDgwZWJlNDFhLCAweDllZTFiNTVmLCAweDM2OGZiMDQzLCAweDAwNWFhOGUyLAotCTB4MzFkOGY1NjYsIDB4NTdmODFmNTYsIDB4NTFkYmQ5Y2YsIDB4M2NiYTc1OWUsIDB4Mzk2NGY5YzQsIDB4NWViNWU3ZWYsCi0JMHg2ZmMwYzVkNSwgMHgwNzgyOGQ1NSwgMHhjOGFhOWRkNiwgMHhjNmRjZjAzZiwgMHg5NTVmOGQ4MSwgMHg2YTJkMWYwMiwKLQkweGU0NTYzYzEyLCAweGYwMTQyZmMzLCAweGZhZTk0YWZiLCAweDJjMzRmYzBiLCAweGJmZGEwNWZjLCAweDQ0OGE5YThiLAotCTB4NmVkMTdlZjgsIDB4YmJlNDEzMDEsIDB4ZTk3NzRmYzIsIDB4ZjdjMzk2YjYsIDB4MDRlZmMwMjIsIDB4YmFkOWRiMzgsCi0JMHhkYmQzZTFjNiwgMHgwMTgwYTRhYiwgMHgyZjI3OTJmZSwgMHg3MDY2YzlhZSwgMHgwM2I1NTZhYiwgMHg3ODUxMTFkZSwKLQkweGFmMzg4YjY3LCAweGUzYWJjMjZlLCAweDFmNzgyYmJkLCAweGUzZGViODUyLCAweGI4ZDNmYzc0LCAweDIyMmYxOGYzLAotCTB4Zjk2ZTk0ZTEsIDB4NmUzNWRmMzcsIDB4ZDE5YTQ1NTUsIDB4NTdlM2QzNWYsIDB4MmFkZjQ1NWIsIDB4NjU4OGUyMTksCi0JMHhmMzhjNjQ4MiwgMHhmYmZjNjNiNiwgMHg3ZmZmZTg0NywgMHhmMDdmYWRiZSwgMHhkZDc0MjIyZiwgMHhkM2ZkN2RmYSwKLQkweGNmYjNlZjg4LCAweGU4MTUzYzdmLCAweDkxMzVlNGIyLCAweDVhNWQyOGQ4LCAweDgyMjQ1ZGViLCAweDA1NDEyNGZiLAotCTB4NDFiOGIwZTgsIDB4MjQwZTMwZDQsIDB4YmJhNzBhNDUsIDB4YzM1MWYxNjIsIDB4ODVkZGIxZjAsIDB4NGVmMTcwN2EsCi0JMHhmZDMyNzA2YiwgMHg5ZjJiZjE3ZSwgMHhkMzNkODNlNiwgMHhhMWZiNDBmYSwgMHgzYzAzODg2YywgMHg5MzFjYTAyZiwKLQkweGVjM2U0YjQwLCAweGQ4OTYyZDEzLCAweGJmMTk4ZGJlLCAweDg3YzU4NTExLCAweGNjNzZlY2NmLCAweGVhMTA3OTAyLAotCTB4YzVhOWI5ZDgsIDB4MzViMjk5YTEsIDB4NTU3ZTFlYzYsIDB4NjQxYzU5OTEsIDB4MTVhZjNiMzcsIDB4YmNjMDRlNzgsCi0JMHhmNjJmODAzMSwgMHg4ZjllOGVkYywgMHhlNjM5ZTY3MywgMHg5NDZlMmM5NywgMHg2YWZlNzA4MywgMHg1NjhlZGQ3MSwKLQkweDNlMmM5Yjg4LCAweGFkNzVjNTZhLCAweDhjMGJlZWFhLCAweDdmNmM5NmZiLCAweDZhZWY5ZDkxLCAweDcyZmUwZDE0LAotCTB4NGViNTNmMjcsIDB4YmZjMTU4OGMsIDB4MzhjNGE4NmEsIDB4OGM3ZmFkM2MsIDB4MGJmNzEwZjUsIDB4YjUxZmEzYmYsCi0JMHgyYmQzN2I2NCwgMHgyNWMyOGEwMSwgMHhjNmViM2YyZiwgMHhkYmNkNTg3MywgMHhkNmFmZThkYywgMHhhOGRjN2I3ZCwKLQkweDdhMWE1ZjkzLCAweDUzYTVmYjg4LCAweDk3ZGY4MDRlLCAweGNkM2QyZmM4LCAweDYyYjRlNGY5LCAweDdhZWJlZmYyLAotCTB4ZTE0YWJmYTAsIDB4NjM4ZjJjMmMsIDB4ZmZmOTQ3YjcsIDB4MDc3ZjJmYzUsIDB4M2IzM2Q1NzEsIDB4YzAxZGZmM2YsCi0JMHhmMzliZjRiZCwgMHhlMjhmYmJiZiwgMHg3YmI1ZWM5MywgMHgzZDU2MGY0MCwgMHg0MzhjMTdmZiwgMHg1NjQ5ZGZlOSwKLQkweDdiOWZhZmFlLCAweGFkNzhlMzE2LCAweGExN2FiMzdmLCAweDEzYTZkNmI3LCAweDZhYzcxMDM5LCAweDc0OGZmMWRkLAotCTB4MzY1NjUzYjAsIDB4NmJiYjQyNGQsIDB4MGM5MmFlZTUsIDB4ZDA0ZWM3MTIsIDB4NjBkZmUwNGIsIDB4NjY4OGUyMzcsCi0JMHgzODY4MWRiYSwgMHg5ZTcwMDM5MCwgMHg3NDg3NzRhNSwgMHgyMWJjNjhiZSwgMHgzOGUyYzk1NCwgMHhkNDMzOGYyYSwKLQkweDc2ZGI4ZmM3LCAweDRjMzQyYjhhLCAweDcwZmM2OWJmLCAweDRhYWY2NTI4LCAweDc4NWYxMWJhLCAweDlhZjNkMjk3LAotCTB4OWViMWQwNmUsIDB4NTM0MjkxYzcsIDB4NzBiZTM1YmUsIDB4ZTk0MWZlMTYsIDB4YzYzNTY3OTUsIDB4OTg2Y2JlMTcsCi0JMHg0MjRmOWZmZiwgMHg4NDhmNDM1YiwgMHgzNzQ4ODVmMSwgMHg4NWM3YTdmMCwgMHhkZjJkMTRkYiwgMHhmM2I5NzIwYSwKLQkweDAwZWI4YzA1LCAweDA5ZDMyNmZkLCAweDY1ZjhiZWI3LCAweDRmZDVjNDBlLCAweDYxNzdlZGNhLCAweDE1OTM1YmJlLAotCTB4MzcxN2Q3ZjcsIDB4YTllNTE1ZmQsIDB4NjhkYmQ3NzUsIDB4OWYxZTEyN2YsIDB4M2ZkMTI1NmQsIDB4YjllMzQ3MTYsCi0JMHg1ZDViNTVhYSwgMHhlOWMxMmUyYywgMHhkNTBiNzEwMCwgMHg3Yzc5Y2Y4ZCwgMHgxZWI1ZjE4MiwgMHhhZjE0NDhiNywKLQkweGM3ZWQ2MDU4LCAweDVjNTk0ZWYzLCAweDA3ZWI3MmE1LCAweDgzYzUzMTBhLCAweGViMWQ1MTg0LCAweGU5N2EyMjdlLAotCTB4MWUwMGYwNzgsIDB4ZTNjNmM2NDYsIDB4YTI4N2M3ZTIsIDB4ZGQxMzM4ZjEsIDB4ODcxMDllODAsIDB4NjhkYmM2OGIsCi0JMHg1ZGM0MzdiZCwgMHhlMzVmYzI4MiwgMHgzNzViNzdjNSwgMHhhYjVlMzhiMywgMHhlOTViY2M2YywgMHhjZjhiMTNhMCwKLQkweDViZDEzNmNkLCAweGViNTc2ZjlmLCAweGY4ZjM1NzU2LCAweDA2OWE3OGFlLCAweGNlY2Y3NjhiLCAweDI5NzMzYWY4LAotCTB4NmQ1ZjdlYmUsIDB4M2VkODdlMTUsIDB4YmNjMTNjZWIsIDB4N2MwMzUzZWYsIDB4YjFmMGQ5NTksIDB4ZmE4ZDc5MDIsCi0JMHhmN2NmYTZmYSwgMHhjZmNmYjcwYywgMHg1ZTYyMmYzYywgMHgwMWQwOWFlZSwgMHhmZDY2ZWZkNCwgMHg2MWNlMGNiMSwKLQkweDM3Zjc4MWM0LCAweDhkNjVkZTFjLCAweGIzMzhmZDZjLCAweGQyNzQxNWQzLCAweGRmZWNjZTdlLCAweGFjYmQ3YzhkLAotCTB4NDAyNTYzZmUsIDB4Zjc1NDNiZmIsIDB4NDlmY2MyYjIsIDB4N2ViMDQ3MjYsIDB4M2ZlMDYzMDQsIDB4N2NiZWQyZjMsCi0JMHhmZTY0N2YxNiwgMHhhZDljNzk4MCwgMHg4NTU2M2Y1YywgMHg1NTUzOGZlMywgMHg5YzYxODVmZiwgMHhjMjkwODEyNSwKLQkweDdkYmZhY2YyLCAweDM2OTJkM2JjLCAweGRkM2JmYTEzLCAweGIzYzgxMzJjLCAweGNiMTIxZDNjLCAweGFlNmJlZGUyLAotCTB4NWY3Y2NhYjUsIDB4YjljNTk2YjMsIDB4ZTc4YTNhZTksIDB4OWNlYzVjNWUsIDB4NjBhYTk4OGIsIDB4NmJhNTY0MWMsCi0JMHg1ZjM4NTFkNCwgMHhhOGE1ZDJiOSwgMHhhY2Q1MWZlMCwgMHgzNWJjZmI2MiwgMHgwMjY2ZjczZiwgMHg2ZTUyNmJiZCwKLQkweGFkNmQ3OGM1LCAweDM0OWViZjA5LCAweDdmOWMxMTRmLCAweDFmMmM0Y2YxLCAweGQ2NmFlYzBlLCAweGM1OWEyOTNiLAotCTB4NTc0YWZmMDAsIDB4ZTE0YTg2NTksIDB4ODFmYjRkNWMsIDB4ZjI0NGE4ZjMsIDB4ZDExYzM5ZTIsIDB4ZjMwNjVhNWQsCi0JMHg4ZjE2M2QxMSwgMHg0YzdjNGUzZCwgMHg1ZjEzOTY3NiwgMHg4ZjY0NWUwYywgMHhiOTBjZGNmMSwgMHg3ZTg1NGMzNCwKLQkweGE1ZDlmZGY0LCAweGQ4NDNlNmI2LCAweGUwMDRkMWU4LCAweGM3ZWY4OTJiLCAweGMxZTJkZDE3LCAweDBiZDViNzc5LAotCTB4YWE3MTYwNWUsIDB4M2E0ZjU1OWUsIDB4NzU4MDMzY2IsIDB4NzI2NzZkYTQsIDB4M2YwNmI5M2UsIDB4NWY1ZDFhMjQsCi0JMHg1MGI5ZmMxYywgMHhlODFmNmZiZiwgMHhhMjZlZDVhNSwgMHhhMzM5NTBhNSwgMHgzY2M1NTU1OCwgMHhkNDM0M2YzOCwKLQkweDlmMDFlNDI2LCAweGQ3YzdmMTdlLCAweGIwZjZiZjY4LCAweGEwMzUyMDQ4LCAweDE5ZTdhOWNkLCAweDY3MjAyOTY5LAotCTB4ZTYwOGYyMGUsIDB4NWYyYjAwOTMsIDB4YTcwMWQxZWUsIDB4YzA4NGNmMzksIDB4OTdlNzMxMmIsIDB4OGM0ZTg5MjcsCi0JMHgyNGRiOWM3ZiwgMHg5MjJiOWZhMiwgMHg4ZTNiN2VhYiwgMHgwODI0ZWRmOSwgMHg2NWY1ZjNmMCwgMHgxY2YzODcwOSwKLQkweGYwMjMxMTc1LCAweGUzMGJiZDdlLCAweDk4ZGYwYmYzLCAweDc0MDNmMjhiLCAweDhmNTdjNTg4LCAweGI5MWZhMzMyLAotCTB4ODdjZWVlYzEsIDB4NzY4ZDlkZmQsIDB4NDkyODE2ZjcsIDB4YmM4NjZiNDAsIDB4ZGZiYzc5ZTYsIDB4NzNjNmU1OWUsCi0JMHgwMzBjNTQ0OCwgMHhlN2NlN2Y2MCwgMHg4MmY5ZmFmMiwgMHhhZjk4YzNkMiwgMHg3YTgwNWJlMCwgMHhmMTk2NjMzZSwKLQkweGJlZDk5MjljLCAweDFmYjUwODk3LCAweDBhMGQ3ZDYxLCAweGIzODkwOGRlLCAweDE5YjhkZmFmLCAweGRlY2FlZWUxLAotCTB4YjBlOGYxZDcsIDB4MzkwOWJkNTEsIDB4MDRlMjRlNDIsIDB4OTdkNjI2M2MsIDB4NjViN2UwNWQsIDB4MGRjNzZmZTAsCi0JMHhiNWY4ZWVmZiwgMHg2YmYxMWE2NiwgMHg3NWY4OGQ1NywgMHhjZmUzMzIwYywgMHhkNzk3NWY4OCwgMHhlNmNhMmY4OCwKLQkweDZmYzM2ZmMxLCAweGI5ZTMyOGYyLCAweDdlMTU3ZmFmLCAweDFkYjhkOTg3LCAweGZmNGFmMWM5LCAweDRjZTk2ZGNhLAotCTB4NTlkYzAzNjUsIDB4YzJlNTA0NTIsIDB4Y2VkOTQ3MmMsIDB4ZWVmZjAwODgsIDB4ODU1YzE2OTMsIDB4ZTg1ZDc5NWYsCi0JMHhmOWYyNjRhZiwgMHg3N2Q4ZjMwOCwgMHgxMTIzOTAwZSwgMHgxY2EyZjVlMCwgMHhkMDBiYzljMSwgMHhhMWYyMGVmMywKLQkweDIxNjllODA3LCAweDU3Y2I5MjlmLCAweDhhZTdhNjI3LCAweDllM2YwNzY5LCAweDA0ZGFiZjQzLCAweGYyMGQ3YmZjLAotCTB4OTU1ZjNiMDMsIDB4YjkzNTgyNGEsIDB4MGY1ZWE3MjAsIDB4YmYyMWRmYWMsIDB4ODY0ZjNiY2QsIDB4M2JjNGY2NzMsCi0JMHhhZjljMDA2ZiwgMHg2OGY5NjBmNywgMHg2ZGJmN2IwMSwgMHgxYTczYzEzMCwgMHg3NDg1YzhhMSwgMHhmMzU1NGZkMCwKLQkweGJmZTgzOTQ5LCAweGE5ZjY5NTQ3LCAweDZjYmVmN2UwLCAweDFiYmRmMTY3LCAweGQzZWEwYWVjLCAweGFlMTZlZGE3LAotCTB4NzFiZTI3NTcsIDB4YjZjNzk1MmQsIDB4ZjljMmFjYjAsIDB4MzZmMGI2YzAsIDB4MzdhODAwZGIsIDB4YmQ2ZTc4OGEsCi0JMHg0YWY2YTUyYSwgMHgyYzM1YmYxOCwgMHhkOWU2YjgzMywgMHhiZmMwMDM4MiwgMHgzZDcxOTI2ZiwgMHgwZTM3OWQ2OCwKLQkweGVkNDRjMWNmLCAweDRmZGIzMGI3LCAweGVhN2YwYjZjLCAweGNmYTMxYjllLCAweGI4OWYxYjViLCAweDFiMGZlMjEyLAotCTB4MzFmN2YxMmQsIDB4ZGYyY2Q4NTcsIDB4YWU4ZDdmY2IsIDB4ZjI5ZDBkYmYsIDB4NThkODU2MmUsIDB4ZmRhM2M3NWUsCi0JMHg0ZDk2M2NlOCwgMHg2MWQ3YzczYiwgMHgzOTYzMGYyNiwgMHhiODJlMGY5ZCwgMHgyYmJmZTcwMSwgMHgzYTdjZmQ0YywKLQkweDhlZjE1MjhmLCAweDc5ZDA4NzFiLCAweGM0OGJmZThlLCAweDI2ZDEyYmY0LCAweDQ3Njc0ZWNmLCAweDFhZmRlMDgwLAotCTB4NWZhODJmZDAsIDB4MGUyY2ZmNmIsIDB4NDRhMGI4ODcsIDB4ZjBjNDVjZTAsIDB4NmZlODA1ZWEsIDB4N2NhNmU2YmQsCi0JMHg1MGEyZjk0ZSwgMHhiZTAzMGQwYiwgMHhjMTRlMTg5ZCwgMHgzZWFhMGE3YiwgMHg4ZmQ3NjgyNCwgMHhmYzBjOTY2OCwKLQkweGQ1ZDdjODU5LCAweDlmMTYxNmMyLCAweGQ4ZDQ3OTFmLCAweDMyNDViYTNlLCAweDhjNDE0MWQ5LCAweDY5M2Q4ZjFmLAotCTB4ZjNhYjVlN2MsIDB4MDNhNDliYjksIDB4MjRiZmFmOWYsIDB4ZDUxNzkwMGEsIDB4MGZiYzRlZDYsIDB4ZTZkYmI4NTAsCi0JMHhkYTM4NDJmNSwgMHgyYjI5YzAyZSwgMHhjYjEyNWU1YSwgMHg5YmY3YWRlMiwgMHg2YjBmMmM2ZCwgMHg5ZDcwNDJhMywKLQkweDg5YzBiOGQ5LCAweDE3ZmIwOGZiLCAweGViM2NjNjJjLCAweGViZTY3ZWFmLCAweDVlZGNlZjFiLCAweDY2NGE3ZThjLAotCTB4MzI1YWY1ZmIsIDB4YmRmYzA1MTksIDB4YWY3ODYwNWEsIDB4YjdkZDhhY2QsIDB4OWY5ZDRiZDIsIDB4ZjlkNmZlNzUsCi0JMHg5MjQxNmIzYSwgMHhjYmRlNWUyZiwgMHg3YmIzM2I2MCwgMHgxMjBjMTc4YSwgMHhmNmQ3ZjAxNCwgMHhhOWZjNzgwYSwKLQkweDIxOWYwMWY1LCAweDA2NWNkYjdmLCAweDAwZDkwM2M4LCAweDc5ZTM1NTRmLCAweGUxNmRiYmI0LCAweGZiNTQ3OWY4LAotCTB4MGZlNjZlNmQsIDB4MDU1ODEwM2UsIDB4YTUzZjFlNzksIDB4MzI3YTA5YzIsIDB4ZDFlYmJmNzEsIDB4YTA4M2FhZGYsCi0JMHhhYjY3N2MyYSwgMHhhNmU3OGQ5ZCwgMHgxNmM4ZGJlNiwgMHhiNTRhZDM4OCwgMHg4MGJiMzc1OSwgMHg1ZmFlNGJmZiwKLQkweGIyN2RlMTQzLCAweGViZWI4MmRjLCAweGYwOGJkOTQ2LCAweGMxMDkyYTA3LCAweGE3M2YwM2Y4LCAweGQ5MmE3YmQ1LAotCTB4ZWM3ZTdiMWMsIDB4YThlOGFkODgsIDB4YThmN2NlOGQsIDB4ZWVmMzgzY2QsIDB4MDAwYWYzZTEsIDB4ZmZlYmY3YmYsCi0JMHhhNmJiMDZlMywgMHhlOTE1YTJlZCwgMHg0M2ZiOGJkOCwgMHg2ZGU3NzdmYSwgMHhkODBmNGYwYywgMHg3YmUwNzdiNSwKLQkweDcyODY5MTUyLCAweGJkYjlmNWUyLCAweDM5YzE4NmYzLCAweDE4Zjc4YTU1LCAweDVmYTBlYTM5LCAweGVhOTFlNzAwLAotCTB4YzI4ZTNhYTMsIDB4MjBiNGVhOTMsIDB4NTM0ZDEyNWYsIDB4MDMxZTdhM2QsIDB4YzhjNWVmZTEsIDB4MDQwODg5MDUsCi0JMHhiZDc0MWNmMiwgMHg4ODg1ODQyYSwgMHg3MGMxY2E4YiwgMHg3ZTAyMzM5YiwgMHg5ZDA1NmE0NywgMHg0ZWMxMDUzNywKLQkweDY2YmZhYzZjLCAweDFjZjQ0Y2U5LCAweDUyNTFlNjFjLCAweGU0ODQyY2JlLCAweDEyNzk4Mjc5LCAweGZkMDVhODkwLAotCTB4ZDc1NmZhZWIsIDB4MDg1M2FiZDMsIDB4YzdlYWNiY2EsIDB4ZWQwZDYwYTQsIDB4NjJkNDkzNjcsIDB4YWU0YWY4ODcsCi0JMHg1NmMzMTZhNiwgMHhlMmE0YWE3NCwgMHgxNTNlYmNmOSwgMHgxYzczZjMwNCwgMHg0NGE1NGY3OSwgMHhmNDJhMTZlZCwKLQkweGVmMTFiZjQzLCAweDFmZTcxNzhlLCAweGU1ZjFkNzZhLCAweDJiZTAyN2ZiLCAweDdlZmI3MGZmLCAweDc2YmM2ZjMwLAotCTB4NzVmNzllMzYsIDB4NTFlOWRhMWIsIDB4YjFlZGMxZmQsIDB4OGVmZWJlNTIsIDB4MmJlZDhjZmUsIDB4MjRiNWM4OTMsCi0JMHhkNjZmOGUzNiwgMHgzMjdkYmExZiwgMHgwM2NiN2M3YSwgMHg2ZmVlZjgwZSwgMHhhZGRhNGUwYywgMHhlMDhkZGYwNiwKLQkweDEzZWE4ZGYzLCAweDBjOGU2ZWJlLCAweGJmNDI3ZDUzLCAweDNiMGYwODJmLCAweDgyZWVmMTAwLCAweDc3MWM5OTBmLAotCTB4MDM4NzI3ZDIsIDB4ZmJlZmUwMjIsIDB4NWYzMzExZWEsIDB4Yjk1MDhkMGMsIDB4NTU4M2VkZTQsIDB4ODllY2JmMzgsCi0JMHhhZmJkYTFkNiwgMHhkMjc3YThkZCwgMHg0MGNmMGRhNiwgMHg5YmYzOTczYiwgMHg3Y2JhY2YxOSwgMHhlMGJlZTU5YiwKLQkweDJiMDFlZjVlLCAweDYwOTEwYjgzLCAweDFkMDg4NzFlLCAweGEwNzlhODcwLCAweDYwODg4ZTk3LCAweDUxMTViN2VmLAotCTB4MGViODUwM2MsIDB4Yjk0YmY5NzIsIDB4ZTYxZWJjMTAsIDB4OWQ3YzNlYmYsIDB4N2JlNGU0MWQsIDB4ZmExMTI3YWYsCi0JMHhmMjdjNGM3NSwgMHhkZTM3ZDE3MSwgMHhkY2Y4ZjJjZSwgMHhmYjY1ODc4MCwgMHgyNGY1ZjAyZSwgMHhjYThlZjQ4MiwKLQkweGQ4OTM5NTAxLCAweGZmY2U4OTc4LCAweGU1ZDc3ZTY2LCAweDNhMGUwNmEzLCAweDBiZjllMWU3LCAweDI4YWNlYjAyLAotCTB4YmRmMGYwODQsIDB4MDBmMjZjOTUsIDB4YmI3Yjc1NWUsIDB4MjRiN2RiODYsIDB4ZGZmNjg1OTAsIDB4ZWJlMTBmNGEsCi0JMHhmODEwNGU1MSwgMHhlZGQ2NDZhNCwgMHgzNjJkYWY3NSwgMHg1NWQyYjUzZSwgMHhmYjZkZjE5YywgMHhhOTE3NTUzNSwKLQkweDg3OTMxNjdmLCAweGEzYjUyNTVkLCAweDUxNzU1NmZmLCAweDFiZGZlN2MxLCAweDQ1MGE2MTdmLCAweGYzN2YwMWJhLAotCTB4ZTMzYjNkZWQsIDB4NTdjODNjNmYsIDB4ZTYyZmZmY2YsIDB4YmYzY2NhYjcsIDB4ZmNjNzZhYjUsIDB4NmJkZjEyYzYsCi0JMHgxNDdmNTQyZCwgMHhlMzU3NThhZSwgMHg3NzkzZjE1MCwgMHhlYjNiMGIzMywgMHg2NTdjZmQwNSwgMHg5NjYwM2QyMiwKLQkweDZiNGI5MWY3LCAweGI0OTg2MDBmLCAweDcyYWY3OTBiLCAweDMyMTJmYzcwLCAweDk4ZDlmNDFkLCAweDcyNWJiNTA4LAotCTB4MDVmZmNiM2IsIDB4MDcyYWJmM2UsIDB4YWRkYjdiYzMsIDB4OWU0MTAzZWQsIDB4ZGZiZTg4NTYsIDB4MTZhODExZDksCi0JMHg4YWVjMDU4YiwgMHgxZWVkMDRkZCwgMHg2ZTYzYmVlZiwgMHgxZWU2Zjc5NCwgMHhiM2E3ZjU4NiwgMHhmNjYwMTA1ZCwKLQkweGY0NDc1ZjI2LCAweDQ4ZDBhN2I4LCAweDczOGU4MGU1LCAweDBlN2JlZWM0LCAweDMwZjFhZmZhLCAweDM0MGUxNGJmLAotCTB4NjIzYTdlODEsIDB4NWUwM2Q1ZjMsIDB4MjRjNjE0MWQsIDB4MjgzMjRmMzgsIDB4MjhlMmNiOTIsIDB4MjVkYzgzMTEsCi0JMHg0OTg3MzM5MiwgMHhkZTc0NDI4ZSwgMHhlODA1YWViMCwgMHg0ODQwMzZiYSwgMHg3YjAyY2YwYywgMHhkNTAyMjMwYSwKLQkweGY0Yjc2MDJlLCAweGIwNmMyNDJlLCAweDA2ZjMwNDY1LCAweDdiYjNlNzdiLCAweGIwMTc3YTAwLCAweGI0ZGVjNzdiLAotCTB4NWJjOTM4YjMsIDB4Y2JkMTFkN2MsIDB4MDNmMmI2MjMsIDB4OTEyY2JmMDAsIDB4ZmJlMGI1ODAsIDB4NDJhMDBkYzMsCi0JMHg1ZDg4ZjE3YywgMHhiMjc4MDdkYiwgMHg4ZjM4Njk5NSwgMHgwYWYxMGY2YywgMHg1MmQ5OGU5NCwgMHhhZDdkODA0OCwKLQkweGMwYWFhNWQ0LCAweGFkODQ4YWUyLCAweGZlZDI1MDQzLCAweDQ1YWIyN2IyLCAweGZlZWNmNzQwLCAweDY1MDljZjA0LAotCTB4NDcxM2ZkODMsIDB4ZTVkOThlNmUsIDB4NmIwNzE2MWYsIDB4MWY4NzY0ZWMsIDB4NDg3MTcyZTMsIDB4MzFlZGYzYTEsCi0JMHg0NzNmZTU5OSwgMHg3YzE0MzllMywgMHhlYmFiNmZjMCwgMHhlYjZjOWM1NiwgMHgyMjVmMmM5NywgMHg2Y2YwYzI5MCwKLQkweDYwODBjYmY2LCAweGQ3ODkyZjMwLCAweDY0ODg1NDFmLCAweDI5YmY0NTRmLCAweGIwMTk3YzAwLCAweDcyNmZkMGQ4LAotCTB4ZWYwODZmMTAsIDB4YzdlYTQ5NDksIDB4YmMxMTQ1ZWUsIDB4MmJmZWEwZWIsIDB4ZjcwNmRkYTksIDB4YTBmMmU4MjUsCi0JMHhlM2EzZjlmMywgMHhmNDRhZjY2ZSwgMHg3M2Y4Zjc1NSwgMHg1MmQzZTBmOSwgMHhlMDI3ZmY3ZSwgMHhiOWRjNzViOSwKLQkweDI2NzFhYjgxLCAweGVmOGMzOWVkLCAweDY3OTBkMTM0LCAweDUxYWZkM2E5LCAweDBlY2ZkMDM2LCAweGZkNTg5MmYxLAotCTB4ODEwNjUyZWQsIDB4MjQyYWRlM2QsIDB4NmE1ZmMxNzksIDB4NzgzMDI0NWQsIDB4NDNjZjFiMDUsIDB4Y2NmMzBjOTUsCi0JMHhhMzNmMzA3NCwgMHhmZWM1ZWI4ZCwgMHgwZjM4Yjk0OSwgMHhmM2EwOWQ3ZCwgMHg1ZDcxODc1YiwgMHhlN2EyM2NkMywKLQkweDhjZTc0YzhlLCAweDMyOTBlN2NjLCAweDlkZjFhMmYzLCAweDJiMDdjYzJjLCAweDE4NGVlMDU3LCAweDQwZWMyZTcyLAotCTB4ZGRjYWFjZmIsIDB4OWNlMjQzOWUsIDB4YjE2OGM5OTMsIDB4YTYwNzNkYzcsIDB4ZmQ2ZjE0OTcsIDB4NWU0MjdhOTIsCi0JMHhlODBhNzU2MSwgMHg5OTNiOGNkOSwgMHhhM2UzMzA3ZSwgMHgzZDBjMDg0ZCwgMHg3ZjYzZmIwNCwgMHhhM2VlZTM5MCwKLQkweGU2NjY2NWViLCAweGU4ZjMyOThkLCAweGQ3NTk5OWZiLCAweGRmM2ZhOTYzLCAweGM2ZTI5NGUwLCAweDA5MjVjNzBiLAotCTB4MGM4ZmNjM2YsIDB4MThkZjNjYjIsIDB4ZjMwNzFkZmUsIDB4ZTc3YmViMzksIDB4YmZjNTBkM2QsIDB4MWJlOWUzMWQsCi0JMHgzN2RlMTg5MiwgMHg2ZmJjMzEyNCwgMHhhYTdjNzQ1MCwgMHgxZDdmMjBjOSwgMHg1ZjIxYWY3NSwgMHg5NmRmYmQ2MiwKLQkweDUwOWU0MTIyLCAweDczZTUwYjIwLCAweGJiZDE4N2JlLCAweGVkMGQ3ZGUzLCAweGJiNDQ5ZTk2LCAweDEyNTAzNmZlLAotCTB4MGRiMjY1ZWIsIDB4N2RjNTllZjksIDB4ZGZlMGJjZjQsIDB4OTk0YjlmZjgsIDB4ZGJhN2VkNDgsIDB4OGQ1MDVmMzgsCi0JMHhjMjliZThjMCwgMHg3ZWIwYmVlMCwgMHg0ZTliOGUxMiwgMHgxNDgxZGEyZCwgMHgyZGNhMGJjZiwgMHg5ZDA3ODg1ZSwKLQkweDFiYmVmMzlkLCAweGM5Y2RjODhlLCAweDc4MjQyZTZlLCAweDBkN2FiNWY0LCAweDE1N2Y3M2Y4LCAweGQxMjViNzdkLAotCTB4NTAzNmQyN2UsIDB4ZjE4M2Q1NDUsIDB4YTUyNWM4MDUsIDB4OGZiOGY1ZDMsIDB4MzcxMmRiMzksIDB4YzQ5N2NmZWYsCi0JMHg5MjU3NzZmYywgMHhjY2M4ZTEwNywgMHhlYTc0OGE5YywgMHgwMTRlNGZhOCwgMHhhN2NjYzM3ZiwgMHhlNmIzNWU1NCwKLQkweGI3MzhlZjBkLCAweDExNjZmOTQ2LCAweDZmMmNkOWUwLCAweDE0NjkzMjZkLCAweDIwOGFkZDcwLCAweDc2NzRkMmJlLAotCTB4OTc1YjdhZTYsIDB4NDM5MDM0OTcsIDB4YTcyYThmZDgsIDB4NzNhNzU0N2EsIDB4M2E2YWZlM2YsIDB4NGZmMTNiYzYsCi0JMHgxZmZlZmYwOCwgMHhjN2I4NDdlMCwgMHhkNDVlYTMxNywgMHg2MjBjODhlNSwgMHg3YTBlZGU3YSwgMHhkOWNlMjYzNywKLQkweDNlZDdmNGQ2LCAweGQxZjg5ZmIwLCAweDYwYmJjZmNmLCAweDUyZWZlOTNmLCAweGVjZjQwYmJiLCAweGVjZmZmYmM5LAotCTB4OGY4NjNjODIsIDB4OGVmMTY3ZWUsIDB4ZDdmZTRjYmIsIDB4ZmY0YzQ5MjMsIDB4NWU1NDk0N2YsIDB4ZGJiYWYzMDMsCi0JMHgyZmExNzVmZiwgMHhiZGM5NWY4NiwgMHg1MTY0NWY2YywgMHg2ZjlkMzQ1MCwgMHhhZTM3OWUzNCwgMHgxN2NmOTkwYywKLQkweDk1ZGYxMDA3LCAweGZkNzhmYzUyLCAweGU3MTYyNGZlLCAweDU5YmY1NDU5LCAweDdjNjE1NmM5LCAweGFlODFhZmRmLAotCTB4Nzk3ZmI5MjcsIDB4MDNkZDgxYjIsIDB4YTczM2MzYTIsIDB4M2UwMmE4N2UsIDB4NTZjM2RmZDcsIDB4MmNkZWFmYmUsCi0JMHg5YjQzZjViMywgMHgzZTYyZmIwYywgMHg5YzMzMzc4ZSwgMHhhNGZkZjg4NywgMHhhMjJkN2ZmMywgMHg4ZTliMzNkZiwKLQkweGMzZDUyZjc1LCAweGYzY2IzMGJlLCAweGZlNjNjZjM1LCAweDljMjk2YTQ3LCAweDkwZmY5ZmU3LCAweGJjMzRmZTgwLAotCTB4Y2Y1ZDNmN2YsIDB4YzVhZWY3N2MsIDB4M2NmMzMzZmQsIDB4YTA4ZmRmM2IsIDB4OTBiNWRmYTEsIDB4Y2U3Y2RiZDMsCi0JMHhlZDk4NjE2YSwgMHgzZTIzY2Y2ZiwgMHhmOTRlY2Y5NCwgMHgwZjk2NjExOCwgMHg5ZTIzOGU2ZCwgMHgwMGU3OWMzYiwKLQkweGYxMjYzNDNjLCAweDMyNDJhYjdkLCAweDc2MmVmMjEyLCAweGZjOTdlZTFlLCAweDY3NWVmOTZkLCAweGQzZjJiOWY4LAotCTB4YTRmNDRmM2MsIDB4OTM1OTYwOWYsIDB4ZGJmM2IyYTQsIDB4ODE0YmI3ZTEsIDB4ZWUzNTk2YmYsIDB4YmU2NTdiYzAsCi0JMHgwY2FhM2VhYiwgMHg4NGZmNzI5ZiwgMHg2YTI1ZTg3NCwgMHhlODExZmU1ZiwgMHhjMTgyN2M0OCwgMHhmOWI2NWNlZSwKLQkweDY1ZmNjMmJjLCAweGY4M2I5Zjg2LCAweDFmMDAzYmYzLCAweGVlY2VjZmI4LCAweGE5NjNiOTBmLCAweGRlZjYyMTdjLAotCTB4OGM5MmY3OTksIDB4YTI2N2ViZmIsIDB4M2NkOWU0ZTcsIDB4OTNiZWY5MmEsIDB4NWYzMzNmM2UsIDB4OWIzZTcwZDcsCi0JMHg5YWRhNzViNywgMHgzNWNhNzQ1ZSwgMHhmODcyMjc0ZCwgMHhmYmNjMDc3OSwgMHgyMTY2ZjlkNiwgMHg4YWNkMmYyOSwKLQkweGJkM2ExZmMzLCAweGZlMTA3Y2EyLCAweGQzYWJjMjI1LCAweDZjZWQ1ZTY5LCAweDI2NDBhZjNlLCAweDg0Y2JmN2RmLAotCTB4MmY5OTkyYjgsIDB4ZDc2ZjNhYmEsIDB4ODBlNGI3MmEsIDB4ZGVlOTlhYmMsIDB4ZmIzY2UwOWEsIDB4M2VkODkzZGYsCi0JMHgyYjU1M2NlZCwgMHg5ZjM4YmQwNSwgMHhjNGYxYWY5NCwgMHhhNTI3MmJkOCwgMHg4MWY3NDNkYSwgMHg3YzY1NmQxYywKLQkweGUwNmJkNTFjLCAweDdlYmU4MmJjLCAweDdjZjVjNjRiLCAweDgwY2Q0YmI5LCAweDFlOTA5MTdiLCAweDg3NjE1ZTcwLAotCTB4ZTllZjAwMzUsIDB4NmJmNzFjZTMsIDB4ZjAxOTdmNWEsIDB4NjllNTg2NWQsIDB4N2ZkNmI5N2YsIDB4ODJmYjQ3NDAsCi0JMHgxMGRkZTc4ZCwgMHg0NDFiNmRjNywgMHhlYWQzYmUzMCwgMHg3MWViYzIzMiwgMHhjNzhmMDg4OCwgMHhhNWJiZDZjMSwKLQkweDFmMzdmMzUyLCAweGRhZGEwZTgwLCAweGM3MTFmOThjLCAweGQwZjhmMTJmLCAweGJjNTk2YjI1LCAweDEwZWQ1ZTc5LAotCTB4ZGQwNWY3MGMsIDB4Zjc0YWU1YzUsIDB4ZjRlNmVlM2YsIDB4ZjZjYzJiYmIsIDB4OWE2Y2U3YmQsIDB4ZGYzMGY0ODYsCi0JMHhmYjg0NzI2NywgMHgwNDFiYjMyZCwgMHhmYTY2MjNkNCwgMHg3NzVlZjdjYywgMHhkY2VkZjQwYSwgMHhkZjdlMTE2MCwKLQkweDExZTQ1ZTg5LCAweDZlOTliYmE0LCAweDc2MWUxZGViLCAweGFkNTQ4ZGJmLCAweGM3M2Y3ZGMwLCAweDRmYjgwOTM3LAotCTB4ZGU4MTI0YjgsIDB4OGYwNzc3ZmIsIDB4M2U3Mzc3NjcsIDB4ODIyNDc5ZTYsIDB4NTVkNmUxN2YsIDB4OTgxMTdhNmIsCi0JMHhmODA1NTBmZiwgMHgzZWJmMGNkYywgMHg2MzQ0ZjlmZiwgMHgzN2NmODc3YSwgMHhjYjQ4YmNkMSwgMHg4MjlmMmNiNSwKLQkweGMyOGJlM2FmLCAweDY1YTk3ZWVjLCAweGFmMmM4ODhmLCAweDc0OGJjNzkzLCAweGNkNzg3NWY4LCAweDk3MTUyOGYzLAotCTB4ZGI2ZjNlNjIsIDB4MDlmMzExMDYsIDB4ZDcwNDBhZWYsIDB4NzdjYmJkYzAsIDB4M2Q3MDE2YWQsIDB4NWQyNzQ0NGQsCi0JMHgzMmZiZTg0ZiwgMHg2MzY3MWFjYiwgMHhmNjhmOTU3ZSwgMHhkYjY5NzYwMywgMHhkOTE3MDQ4NywgMHhkZTAyNzViNiwKLQkweDllOTA5MzdmLCAweDk0NTc5NjYxLCAweDMwODQ5ZTg4LCAweDc0YTNjZGJhLCAweDdlNmUzODdiLCAweDNmZDY5MTVjLAotCTB4NzgyNzNmNzYsIDB4NzYzZmQ2YmQsIDB4MzA4NDg5N2YsIDB4ZGQ0OTY0YWYsIDB4NGFmM2MzMzQsIDB4Nzc0ZjUxODcsCi0JMHgzYWE0N2YyNSwgMHgyZTljZGU3ZSwgMHhlOWZjYmE2ZiwgMHg5YzFlYjhmMiwgMHhhNTFmYjA3MywgMHg1Y2VjYTFlMCwKLQkweGU4NjNjZmMwLCAweGZiZmQ1MGFmLCAweGZmOGIwNzczLCAweDdkMWI3YTNjLCAweGYzYzZkOTY1LCAweGY5ODRmZDg2LAotCTB4ZTZiZDE4YTMsIDB4NzlmMTkzOGIsIDB4ZTI4Mzc1YTIsIDB4ZDc4N2EwYzEsIDB4Zjg3YThjM2EsIDB4OWY0N2NlODcsCi0JMHhmYTI3MmU4NywgMHg2MjcyY2NmYywgMHgwZjRjZGVmZSwgMHhhNjY3MGUzZCwgMHgwMDFlOTk4YiwgMHg0NzBkZjgyNywKLQkweDA3YzExYzlhLCAweDA0NDc5YzI4LCAweGM5YTA3NzA2LCAweDY2Yjc3MDhlLCAweGZlNzA2ODk2LCAweGVkZDY1OTY2LAotCTB4MGY4MTFlNTgsIDB4NTdiZDgzNDcsIDB4ZWQwMzhjZmUsIDB4Nzk1N2VlNTYsIDB4NDUwM2U3ZTMsIDB4Zjc2ZTI1ZWQsCi0JMHg0MTk2MTk4OCwgMHg5MzExMWUzMCwgMHgyZWM3OTBiYywgMHg3N2FhNWI2NiwgMHg3ZDhhNzlkMiwgMHhkMjE4Mzk2OSwKLQkweDljMjJiZDk5LCAweDk5MmRhZWU3LCAweDE0M2RjMjIwLCAweDc3YmNmYzM1LCAweDM3OWQ4NThkLCAweGMzZGJmYmQzLAotCTB4ZWQ5N2EwZjEsIDB4ODA0NmYyOGUsIDB4OWE5ZmVjZTcsIDB4ZmUyYzFkMGIsIDB4Y2UwYWZlOGMsIDB4MTQzZGVlMTMsCi0JMHg3NjBkYmZhOCwgMHhmMzA0ZWJmMCwgMHhjOGQyMGI2OSwgMHg4M2I3YTAwMSwgMHhlZTQwYTM2OCwgMHg3MmE0NzQzZiwKLQkweGZmZWQ5YzNiLCAweDI4NmNiZmQxLCAweGNiY2I1NmJkLCAweDNmOTA5N2FhLCAweDQ5YjNlMmZjLCAweDM3YjI1ZjcwLAotCTB4OTcyMmIyZDksIDB4MzhlMmZmZDYsIDB4YjllZTA5M2QsIDB4Y2U1YjY2ZjMsIDB4ZmRhODdhZTcsIDB4ZDU5Y2Y4ZWQsCi0JMHhlZjljYjZhZiwgMHg3MzdmZWI0NywgMHhkODc1NjE5YywgMHhmODdiODJhOCwgMHgwNTI3NjcxYywgMHgxZTM4YzMwNiwKLQkweGI1ZWFlN2E2LCAweDI0M2U0MWFiLCAweGE1OTdmMzBiLCAweGMzYzYwYWZkLCAweGQ1ZmRmZGY1LCAweDE3ZTBlNjk0LAotCTB4NzlmOWM4N2YsIDB4MTdlMmFhY2QsIDB4MmM2NzEwMWMsIDB4NmZkODU0ZDYsIDB4NzFiZTBhZGUsIDB4ZWE1ZmVmY2YsCi0JMHgxNjFkMTU3OCwgMHg0YTAzNjdiYywgMHgxY2E3ZmZjMCwgMHg0ODVkM2E5ZiwgMHhlNDM1NzY4MywgMHg3NjkwOTIzZCwKLQkweGI0ODNlYzM1LCAweDFkYzc3YzNiLCAweDkxZDg3ZGI0LCAweDU3MjAwOWU2LCAweDVmYmNlZjBkLCAweGY2OGRmNzg4LAotCTB4YTMwY2ZkNjUsIDB4ZjNhNmUyMGMsIDB4OWY2YWZiMzksIDB4OGFmYmIxY2QsIDB4Y2ZhMjhlZWQsIDB4MGM5NDNlODEsCi0JMHhhYTA4NDc2OCwgMHhlZDQxZGM4NywgMHhhODhkMWE4NiwgMHgzMWY4MWU0YSwgMHg4MWJkYmI0NiwgMHg0OWQ3ZDlmMywKLQkweGNmOTFlN2U1LCAweDlmNTA0NzdhLCAweDdkZjBlNTNjLCAweGZkOWJlMzA1LCAweGRhOWNkMjExLCAweGYyNTNmZTJkLAotCTB4N2FmOGM1ZWYsIDB4ZDFlMzc2NmEsIDB4ZmY5ZjIwMzksIDB4MGFmZGNlYzUsIDB4N2FmOTg2OWEsIDB4OWVmN2EzZGIsCi0JMHgxZGY3ZjQxMCwgMHg3MTBiYzkyNCwgMHg5OTI1ZTIzNiwgMHhiNzFlNzQ4MSwgMHg0YWJlMzBiMCwgMHg0YmYxOGMyYiwKLQkweGY3ZTg3Y2Y4LCAweDk1MWVlMTEzLCAweDFmYjYwZTkxLCAweDgyMjdlNzRjLCAweGE4OTQzNjlmLCAweGY4ODMwZTU4LAotCTB4OWFiMDFlNDMsIDB4NDg3YmViMGYsIDB4YjQ3ZGU4ZTgsIDB4Y2NlZGM3ZmYsIDB4MTFkNWI3ZWYsIDB4ODQ2NzVjNDMsCi0JMHg3NzA3ZDk5MywgMHgyNzVjNThiOSwgMHgwY2RkMGU0OSwgMHgwYmU5M2RmYSwgMHhkZWZkMDFlMiwgMHhlMTIyOTRmNiwKLQkweGI5ZTRhNjdlLCAweDBlMzlmNzExLCAweGY4MmUzMDU5LCAweDQwZjQxY2FjLCAweDRhZmRiZDdjLCAweDNhNDJkZDQ5LAotCTB4NzRlMzZiZmEsIDB4NWM3ZGZiZDcsIDB4Nzg4NGFmNTEsIDB4YjMxNzVjY2EsIDB4MjIyZDllMjcsIDB4N2VkYWY3OTgsCi0JMHhmZWMyMDk0YSwgMHhhZGI2NmE1NywgMHhjZjRmZDYzYSwgMHg0ZmFkZGZlNywgMHhhNGU0MWUyZSwgMHg4OTI5YTg2NSwKLQkweGY3MjNmOGMwLCAweGQyOTI4MzUyLCAweDAyZmE4NWUzLCAweDc2YzVmMDNiLCAweDQzYzUxMWMwLCAweDBmNzNkNWFhLAotCTB4OWU3YTk3ZjQsIDB4Y2Y4YjliYzIsIDB4YTRhZmM0MzUsIDB4ZjhhNjRkMGUsIDB4NTM4MzczMWQsIDB4OWUyOTdiODUsCi0JMHhjMDZlODdiNSwgMHgyZDE3YmYzYywgMHg3NmQzZmY3OCwgMHhlYTBkM2JjNSwgMHgxZWE5Y2ZkYiwgMHg5YjNkMDc4OCwKLQkweGY5YzI0YTFiLCAweGY5YzE2OGJjLCAweGJmNmE0ZjZjLCAweGZiODUzOTZhLCAweDhlMmM0MWUxLCAweDY0ODgzOTIwLAotCTB4MmE3OTA1NGIsIDB4Y2ZhMWVmNTYsIDB4N2Q5OTNiYzcsIDB4ZTRjMmRhYmIsIDB4NjJhOWRhYTksIDB4OGU4MTcxZmQsCi0JMHgxNWVmMDA1ZiwgMHhmOWU5MWNhMSwgMHhlY2VkNmQxNywgMHg1YmNmNDcxYywgMHhlN2UwNDU5YSwgMHgzZmJhNjlhNCwKLQkweDBmYzExMTFmLCAweDcwNGU1NzFmLCAweDk0ZTcxZDVkLCAweGFkM2EyYTgzLCAweDIxNzY3MzlhLCAweGQ2Y2VmZmRjLAotCTB4MmUxZjA5OGQsIDB4MjlmMmNjOWQsIDB4ZWZjMmVmYmQsIDB4ZjI3MDFjMjEsIDB4YmVmODM2ZmIsIDB4NGY5Y2I1ZDAsCi0JMHhkMTE2OTNjNiwgMHg1ZmM3ZGI0NiwgMHgyZTQ4ZGUyNCwgMHg4YzZhZjdkYywgMHg1YTYzM2VkZiwgMHhmZWYxMjdlNywKLQkweDQ0Y2Y3NmI1LCAweDhjNDQ1Yzc4LCAweDBkYTRmMGViLCAweGFlMjBhN2E1LCAweDA5MzQ0YzVjLCAweDY2YzRhOWY4LAotCTB4ZGNmNTg3NmEsIDB4OWFjNGY3MGQsIDB4ZjI3M2M5ZWUsIDB4ZTQ4NzJiNzUsIDB4ZThmZGU2YzQsIDB4ZTI0OWZiNzEsCi0JMHg0NzY4OGRlMCwgMHhjMDVlMjk5NCwgMHhmNmE3MGVjYiwgMHgwZDRmZDg1NywgMHhkYmYyZjc1MCwgMHhmOGNmM2RlMiwKLQkweGEwZDY3ZTU5LCAweDU3MDIwZThiLCAweDc0ZmU1MGZmLCAweGRhYWU3Y2MyLCAweGQzYjAxYjUwLCAweDlmZDU1Zjc5LAotCTB4MDg3YzBmZjUsIDB4YTc4YWU1ZmEsIDB4YmU4MDdhZDIsIDB4ZTk3YTczNzcsIDB4YzA3N2NlYTUsIDB4YzY2NDllNWYsCi0JMHgzYTZiOWU1ZiwgMHgyNzNlZjNlNCwgMHhmMmU4OWI4YiwgMHhmZDA3N2MwNiwgMHhiNzgzOTFlYywgMHhhNDFmZGJjNywKLQkweGYwMWY3YWZjLCAweDQxMjcwZWViLCAweDU5MTdmYTdiLCAweDY3MjA1OWI2LCAweDlkZmIzOGZhLCAweGU1Y2RmZjhjLAotCTB4ZjdjYjU1OWEsIDB4MDQxMmVmYzEsIDB4YzZlYjY0YmUsIDB4MzExNzVlYzQsIDB4NmViYTJlNGYsIDB4YWI3ODMzMjcsCi0JMHg1M2U5ZGFkNCwgMHgyOWM3NmYyMSwgMHgzYTRlNWU2MywgMHhjYjE2MzczZiwgMHhmYzMxNTkyZiwgMHhhYjVkZjNhMiwKLQkweDNhZGZmOTkzLCAweGZlZWM5NGZmLCAweDI4NGI5ZTMzLCAweDA2ZmE5MmY5LCAweDM3NmEyNGI5LCAweDIxMzNmY2VhLAotCTB4YjM3ZGMxMTAsIDB4ODlkOTg0MDksIDB4OTlkOWZlNjYsIDB4MmU4YTdmODAsIDB4YWRlODEyYTgsIDB4OTg3M2ZjNGUsCi0JMHhiZTIyNGZmMSwgMHhiMDQ4ZmRhMSwgMHhlN2Y5OWEwZSwgMHhlM2I3MjcxOSwgMHgyNWNmZjIxMiwgMHg2NTY5ZTAzNywKLQkweGVlYjdjOTUzLCAweDhkZmEzNGVmLCAweDcyZTY3Y2Y5LCAweGJlN2UyM2I0LCAweGVmMWM2N2U3LCAweDFiZGE5NWJiLAotCTB4NGM2ZjQxZjMsIDB4MmY0MTc4YjEsIDB4YmVjOGVlNTAsIDB4M2JiYmMyOTksIDB4YjVkN2JmNDksIDB4M2JlYTBmM2EsCi0JMHg3Njg3YTYyNCwgMHg4N2E4YWQ4NCwgMHgzZTdkMzg3NiwgMHhiMjY1OGI4YywgMHhmMjQ0NzRmMywgMHhiNmZlNDBiNSwKLQkweDhkNGQ5N2I3LCAweDdlZmIyN2JkLCAweDM5MjE4ZmNlLCAweGQ4MDRmYTMyLCAweDNlMzA2ZjQ1LCAweDAwYTUzNTE4LAotCTB4NTkyMWJjNmUsIDB4MTg1ZTk4ZjMsIDB4MGNkOTUyN2UsIDB4ZDBiMjhmYmYsIDB4OTM4NmY0NTUsIDB4NzQwNjdmYmUsCi0JMHhjNzUzYWMwNywgMHg2MGI3YmMxNCwgMHhmNTA1MzFkOSwgMHhkZjdiYWJlMywgMHg5M2I4ODUyZSwgMHg3MjNhMTc5ZSwKLQkweGM1YTVkYmNmLCAweGM2N2RlMTgzLCAweGZkNzM2ZjZmLCAweDY1MzFkN2FhLCAweGU5YTVmNDFlLCAweDg0ZDFkODVlLAotCTB4YmRmMzMxZTksIDB4NDdjMGU1YWUsIDB4ZTZlZDFkZjksIDB4NDk0MzRlZmIsIDB4OTMzZDJlMmMsIDB4MGU5YmIyYTgsCi0JMHhmOTU4ZmQzMSwgMHg4ODVkNzA4MywgMHg5OWQzZGVmOSwgMHg0ZmQwMWI5MSwgMHg1ZjVkZTViOCwgMHgzOTRmN2JmYywKLQkweGRmZWY5ODdmLCAweDc3YzkzYWZjLCAweGY5NWZlNjFhLCAweDk4NWVmMzQyLCAweGJhZDk1MTAyLCAweGFmYWE1MjFkLAotCTB4NTc5ZWY3NjYsIDB4ZTkzZjAxZTcsIDB4MTQ3Zjg4NzIsIDB4MDY4ZmExN2YsIDB4ZjVkZGVlMTksIDB4MTFlOGY1ZjIsCi0JMHg3YmVlYzRhZiwgMHhiZjcwNTE2OCwgMHg3ZDg0OTdlNywgMHg5OGViZTIxNywgMHg0MGY0YzVjZCwgMHg2ZTk3Y2FjMSwKLQkweDU1ODczODA3LCAweDJlODAwNzY4LCAweGY5OTkzYmZmLCAweDExMjJiZmQ3LCAweGNkZDAxZTViLCAweDNhOWM2MTJiLAotCTB4MjcyNWFiMjQsIDB4ODhmNzhlODQsIDB4Y2UwODNlNTQsIDB4OTllOWVkNzUsIDB4NWZjNjBjMzQsIDB4NWMzOWYyZTgsCi0JMHhlZDQ4NmY2MCwgMHg5MWJiZTE4NywgMHg4MTg2MGE2MywgMHg1ZDBlNzcxZSwgMHgzNWQ2MDNkZCwgMHg1NzBhNmUxZCwKLQkweDA3NjczNmQ5LCAweDE3NWMzYTFjLCAweDc0MmNiZjM5LCAweDdhYjg3NmNkLCAweDJmNDBlZmIyLCAweGRjN2M3ZTM1LAotCTB4ZmNlYmRmMDYsIDB4ODJmYTZhMTAsIDB4NWYwYzQxZjEsIDB4ZjA3NDFmMDAsIDB4ZDQzNzcwODUsIDB4ZjFhNDNjNzUsCi0JMHhkOGZmYWY1MiwgMHg5N2ZiYTE3YywgMHhmODA1ZjI1ZCwgMHhjNWVmZWU4ZiwgMHg3MTVjNDMxNywgMHg3M2RhODJmOCwKLQkweGQ5YjllMWMzLCAweDJjMjkwYjllLCAweGZjZmNjY2NmLCAweGJlMTE0NzI5LCAweGU2MDg1NWVmLCAweDc2YmQ5MDg5LAotCTB4YmUzYmJiZjYsIDB4YmYyZjhjMTQsIDB4YjY2MzYxZWMsIDB4MDczYzc0N2QsIDB4NWNlYjk1N2MsIDB4ZjkwZTRjYTksCi0JMHgyMzQzZGYzZCwgMHg0MzlmZGEwMiwgMHgwM2I4YTJhOSwgMHhhOGRlYmNlZCwgMHg3ZjFjYmQyNywgMHhjMDIwYjhlNCwKLQkweDRiOTg1ZGZkLCAweDY4NzYwZDljLCAweDZiZDgwN2E0LCAweDIzOTNhZDQzLCAweDFkM2IwZjIwLCAweDdlYzFiMjEzLAotCTB4Y2I4YzcwMmMsIDB4MzJiZmY5ODMsIDB4YjA1YmU1NjgsIDB4YWJkMmJkYTQsIDB4NmFhZGU1ZTIsIDB4ZWJhNTdkODcsCi0JMHg1YmJjMDNjMywgMHg1ZDViZmM3ZCwgMHhkNWFlM2Y4YywgMHhkMDEwZjlkOCwgMHhlODcwYjFlYiwgMHgwOTkwMDNlYiwKLQkweDMzMjIxMGUwLCAweGE4MWQ5NzJkLCAweDE0MmRjM2M3LCAweDFjMDJkNzZmLCAweDA0ZmIwZjE0LCAweDQzZjYwMGQyLAotCTB4MmI0YjQ1OTEsIDB4NjdiMDNiMDEsIDB4ZGIzODAyNDQsIDB4MDM5MWZlOWEsIDB4ZTFjOWE3NzEsIDB4NzgwNTFmZGYsCi0JMHg1YmZiZWIyNywgMHg5NmZlZTM1ZSwgMHhlZGQ2ZGVkOSwgMHhkMGZmZGQyMSwgMHgyMjg5MjVlZCwgMHhhMGFiYjc0MiwKLQkweGE3M2MwNDdkLCAweGJkYzBmNGY4LCAweDQ1YmViMGUwLCAweGY1M2U3ODZjLCAweDk1ZWE3M2YxLCAweDg5Njc5NzFhLAotCTB4OWYzMjYzY2UsIDB4MTlhNDRkYzcsIDB4MmU5NzIyZTEsIDB4ZTk0NzFlNWYsIDB4NjNlMzk1MzMsIDB4NDkxMjYxZjIsCi0JMHg0Mjc2ODdjYSwgMHhmZGMwMTRhNiwgMHg0YzkwMjQzMywgMHgxNWUyOTljNywgMHg3YzMxMjdjOCwgMHg2MzI4ZDM3MywKLQkweGE0MjZmZTFkLCAweGQ1ZDNmNDc3LCAweDYzNzVlNmZiLCAweGZmY2UyOWFjLCAweDdlYzNjYjQzLCAweDRkZmM2ZTc2LAotCTB4M2MxNzNiM2YsIDB4OTAxODlmYTYsIDB4OTUxZGZkNjAsIDB4N2IwM2NlY2IsIDB4MmIwZTFlMTgsIDB4MjNiMWQ3ZjEsCi0JMHg1OGM3OWU1YywgMHgzY2UxZjI1YSwgMHhmZjNkYmVlNCwgMHhmZjczNzVjNCwgMHgwN2JlN2Y5ZSwgMHg1M2U4ZTQ3NiwKLQkweGM2M2M4MTEyLCAweDI3ODZhNzMxLCAweDI4ZWJiZWUzLCAweGVmNGFmOTE1LCAweDA2YjNlYWI3LCAweDQ5Y2Y2MTA3LAotCTB4ODdlODdkZWMsIDB4MTVkYTNjMjgsIDB4Y2IwZDlmMDAsIDB4ZmUzY2NlZDcsIDB4ZTE3N2Y0MDQsIDB4ZjM2MjQ0OTgsCi0JMHg1ZjE1NGJlNCwgMHg5NjhmODg3ZiwgMHgwZmYxN2JmMiwgMHhkMjllY2MwOSwgMHhmYmYxMGZkYiwgMHg3OGI5NzdhOCwKLQkweDkzZDI4ZTdjLCAweDFhYzRjN2ZiLCAweDU0MjllNzQzLCAweDc0MTcyNTEzLCAweGM5Y2E3NWQwLCAweDdlNTI1M2IyLAotCTB4ZGZjMGZhNjcsIDB4N2UxZjNhMjcsIDB4NTc3NDllNGIsIDB4ZmIwZTdlYTUsIDB4NWViNjJlZjcsIDB4YzM3ZjAzOTIsCi0JMHgzNWQ3MGNmMywgMHhmZDgxMjNkYywgMHg0OGE2NWQ3ZSwgMHhhZjcxOThiNCwgMHgxZmE3YTk1NywgMHhlYmQ4ZjcxMywKLQkweDA3YmZkOTMyLCAweDJhNjI3YjllLCAweDExMWU3OWU0LCAweDJhYWM2NTMxLCAweDdjYWRlM2JjLCAweDcxOGIzN2E4LAotCTB4ZjE5YmE3Y2YsIDB4MWVmODVkN2IsIDB4ODg3ZmY4MDksIDB4NTc0ZGM5OWIsIDB4OGFiOThmZTMsIDB4NDAzNWM5ZjIsCi0JMHhjMGVjYzI3NywgMHhjOGU1MDE0MiwgMHg3YmZkZGY0YywgMHhjYjQ3YTNmZSwgMHg0ZWY4YzRlMCwgMHgxZDMzN2Y0NCwKLQkweDhjNTMzYjVlLCAweGQxNWQyMWZiLCAweDdiYjdjY2MzLCAweDU3MDMzY2U5LCAweGQ5N2FlZmMwLCAweGQ3N2YwMDQ4LAotCTB4ODNmNTgzY2IsIDB4ZWJhYzRjZmUsIDB4ZjRkNTVhZmMsIDB4ZjNiMDBmNzQsIDB4ZDQ5ZDNlNzQsIDB4ZThjZGYxODMsCi0JMHgyMGY0NGZkZCwgMHg5OTdhMGVjZSwgMHgxOWI4MjZmMSwgMHg3NWQ5NzZmZCwgMHg2MzNiYzRiYiwgMHg2N2Y0N2QyYSwKLQkweGEzMjEwZWJhLCAweGU0MzM0ODA2LCAweDU4NzM5NGQ5LCAweDhhNWJiZTY3LCAweGY5ZTEwOTc2LCAweDZkZjVlNmZmLAotCTB4MjRjNzc4YTYsIDB4ZGQ1ZGE3NTAsIDB4M2E4YjdmNGIsIDB4YjlmNzViYmIsIDB4OTVhOTFkOTcsIDB4OTUyYzFkNjAsCi0JMHhjNjNkMzI1NiwgMHgxZTFkNzhlZCwgMHg0MmZmOWQzMywgMHg0NGZlMTFjYSwgMHhjMGY5OTlmMCwgMHg2OGFlZTcwYywKLQkweGViODZiMjdlLCAweGZiNGY3ZTgxLCAweDcyYjlmZWY0LCAweGU4Nzk5YzZhLCAweGQwODViOGY4LCAweGZiYWYzOGY1LAotCTB4ZGI4ZTcxZWIsIDB4NGZlN2ZmYzgsIDB4YTAxM2ZjNGUsIDB4OTliYzkxMzUsIDB4ZDc2ZTY2ZTksIDB4MGMyOTQ3ZjUsCi0JMHgwMDY1ODA1MCwgMHhlZTIxOTNlYywgMHhkMjg3OTQ3NCwgMHg2MGQxMGE4YiwgMHg5ZGI3YmE1ZiwgMHgzNzliMWE3YywKLQkweGU0MGFmOTNhLCAweGY2MWUxNWI3LCAweDJkYmYxMTJjLCAweGRmMTIyOGJiLCAweDkzYmUwZWIwLCAweDAwNzMxZjFiLAotCTB4NmE5NmVkZGYsIDB4ZjdmNDVlMWQsIDB4NTMyNGQ1YTcsIDB4YWNmYzRkM2MsIDB4MDczYzE2ZjgsIDB4MTAyMTYyZGUsCi0JMHhmZTE0OWI1YSwgMHgxOWM0MDBlMiwgMHhjYzEyOGVhYSwgMHhlZjBlMmYwNywgMHgzZDNlMDEyYiwgMHg5ZmEzMzUyOCwKLQkweDkwODE3NmQ1LCAweGNlZWM2MmM3LCAweDAzOGQ3MGM2LCAweDM0YzZiMmVjLCAweDUwZTk5ZTc2LCAweDliZTQzMTBhLAotCTB4N2QzMzcxMWUsIDB4ZGNlYzc4ZGQsIDB4YmI0ZTJkNTQsIDB4NzlmOGNjOTgsIDB4ZjJkMmQxM2EsIDB4ZDc0YjNmZTksCi0JMHgzZjAwZmU1MSwgMHhlMzBiYTdiOCwgMHhlZjA1MTMyNCwgMHhiNzYwNjllYiwgMHg5ZmVlYzZkYywgMHhmOTFhNmI2YywKLQkweGI3ODUxYTdhLCAweGQ0MTRjZWY1LCAweGQ3MWE5MzMzLCAweDg0YTFlM2RlLCAweDBjM2Q3ZDA4LCAweDE2Y2ZiNzlmLAotCTB4N2JlODViYmMsIDB4ZWIxN2FhYTUsIDB4ZDE3MmYzYTUsIDB4NGRmOTFiZWYsIDB4YTE5M2U5OGYsIDB4ZmQxOTdhZmQsCi0JMHg1MmUyNDk5ZSwgMHg2NzU1ZTIwOSwgMHhmMDAyODUzMywgMHgyZDA4ZjcyNywgMHhmMmY3ZTBhYiwgMHgzOGQ4ZDMwMiwKLQkweDAxZTgxM2M0LCAweDkzM2JlOWZlLCAweGRmYzUwYzdiLCAweGZhZjU1MTc0LCAweDIwNWRmYzAwLCAweDU2ZGZmMjYyLAotCTB4Y2ZiZjNhZWUsIDB4Y2U1N2RiNGEsIDB4NzMzZjMwMTAsIDB4MDQ5YjI3OTIsIDB4NzRhN2Y4NjIsIDB4YmFmMzgyOWQsCi0JMHgwYzUxOWMzOSwgMHhjY2JkM2Q3YywgMHhjMjJjNGU3OCwgMHhlNTE5YzllZCwgMHhkZDhjMTIwZSwgMHgyODNjMTUyNywKLQkweGVkZWM4N2Q3LCAweDVjZWZlMmI3LCAweGU2MDRjOTM2LCAweDBkZjljYmE3LCAweGNlNjdkZjljLCAweDZlZjg2MWVhLAotCTB4YTc3NjYxMWEsIDB4NzIzNzU3MmUsIDB4ZmI4MWJiZjksIDB4YjJmOWI3Y2QsIDB4MTM5N2UzMGQsIDB4ODFmZDBmNjYsCi0JMHg5MjA0NGZiNCwgMHgzY2IzMjc5NCwgMHhjZGVkYTlhMiwgMHgyZjBlZGVlZiwgMHg4MDQ3YmQ4OSwgMHg5MDcxYmMzZSwKLQkweDk3MTVlZmM5LCAweGM4YmU0NmFlLCAweGM3ODBiYzE0LCAweGZiNjM1ZTI5LCAweGU3NGNhMzRkLCAweDZiZjI0ZDE0LAotCTB4MjAzMzBmZDYsIDB4YWNlYzRhM2IsIDB4MzA3ZDc0MjcsIDB4MjE5NDQ5YTMsIDB4ODhhMzM0MWUsIDB4NjJlZDE5ZTIsCi0JMHg5NWRlZGRhMywgMHg5NDk5MThiZSwgMHg1MjVjNWY0MCwgMHhhNDMzMDQxZiwgMHhiMGY4YmU5MywgMHg4YmU5N2JlYywKLQkweDMyZGJhOTU3LCAweDM2ZjVjYThhLCAweDIxZjQ2ZjVkLCAweDRjNmY0MDdkLCAweDAwOWZlYjEyLCAweGViYTM2YTNlLAotCTB4MWYwZTM1YTYsIDB4MWU4ZWViZTksIDB4NzJhNTI4MDcsIDB4MGNlMDdhOGMsIDB4NzQ5ZTJmY2IsIDB4ODYwNDhiMzEsCi0JMHhhMjAxYzQ3NSwgMHgyNWRhODQ3YSwgMHhkMmY2MzhkZSwgMHg2MTllNzc3ZSwgMHg1N2FhMjNmZiwgMHhiOTEyZWM2MiwKLQkweDI1ZGI4N2YwLCAweGFhM2RhODkzLCAweGJkN2MwMDE0LCAweGMyNTJiZTExLCAweDkwYTU5NmUyLCAweGMzZjEwMmM4LAotCTB4MGUzMDJmY2MsIDB4N2Y1MTI1NTQsIDB4YTdlN2Q3MTYsIDB4ZmZhMzllOTksIDB4ZTQzYjUyMTIsIDB4ZThhZjZjYzMsCi0JMHgzYzA5ZTg3MSwgMHg5N2U2NjE3ZSwgMHgxNmYyM2M2OCwgMHgzYTQyZTMxOSwgMHgzZTAyOTQ5ZiwgMHgxMTZmZmU0MSwKLQkweDJiYTA5ZjcxLCAweDM3YzdkMWJlLCAweDE0YzQ0YmYzLCAweDVmOTJlYTFmLCAweDU3N2RkY2I4LCAweGU2ZWQzOTdlLAotCTB4YTRmZWExZjEsIDB4NDRmODc3N2YsIDB4NWY5ZDBmZTcsIDB4OWJjZGViY2MsIDB4YTI1MTM4YTYsIDB4YjA5ZmU2ZjUsCi0JMHhiYzRjZjRkZSwgMHg0ODNlYmNkZSwgMHg5NWRlYmQ0NiwgMHg5OTJlNzM1ZCwgMHg2ZTg5ZjllOSwgMHg3NTc3M2IwZiwKLQkweGQ4MjcwY2U1LCAweDU5OTIxMzM1LCAweDZlYmU4MTdlLCAweDFiNWRlMzQ1LCAweGRlYmM5ZjE4LCAweDdkODI0NzMyLAotCTB4MWZkMDJhYTYsIDB4ZDA3NDFkYjksIDB4NWYzYWM1ZTMsIDB4NjAyNzViMmUsIDB4ZDczMjc0N2MsIDB4MmM0ZGFkNWYsCi0JMHg1MTM1NTg1ZSwgMHg4ZmQxYzIwYywgMHg0ZjYzZjA5MiwgMHg2ZmJiM2FiMCwgMHgxNGVmYTc0NiwgMHhkMjQ1MjdjZSwKLQkweGZmN2UwOTNlLCAweGUwYWYyNmY0LCAweGM2OTNiODg1LCAweDM1NTM4ZGUzLCAweDY2OGRlMzAxLCAweDQ0ZDdiNWJkLAotCTB4MWZiY2U5ZjcsIDB4YmJlMGJmZjAsIDB4MjA4NGNhOWIsIDB4ZmQ2NjkzZjgsIDB4YjMyMmZkMzYsIDB4NTNkOTNhMmYsCi0JMHhjY2Q4OWY3YywgMHg3MzI2NTcyZiwgMHhmNDk3ZDBmZCwgMHgxNWRhNTdmZCwgMHhkZGJmOTJhMywgMHhlZmJmZDBhZSwKLQkweGIwNjVjZThhLCAweGMwZmZhMGE2LCAweDNiMDE5M2VlLCAweGRkN2NlODFlLCAweDJkZmIwOTQ1LCAweDQ5ZGEzNjQ5LAotCTB4ZmMxNGNlMTcsIDB4ZmU0ZjdkMGEsIDB4M2ExZWY5YmUsIDB4MWFiYTdjZjMsIDB4MTdmNzUwYmYsIDB4OGZhMGZmYjgsCi0JMHhjZWM0ODM3YiwgMHhhN2Q3OWJmNywgMHhmZTIzZDcyZSwgMHg3NzVlOTk5ZCwgMHhiNWUzMWIyNCwgMHgzZDc0NWQzYSwKLQkweDVjZWYwOWRjLCAweDViYTIyNzRmLCAweGQ3NWE3YTU3LCAweDNkNmFmZjg3LCAweGFmYWZmN2FkLCAweDY2YjhmYTIzLAotCTB4N2ZjODlkZmQsIDB4OWFmMWY1ZDQsIDB4ZGI4YzE2Y2QsIDB4ZmE3ZWU3OGMsIDB4ZmUzZjFlNzgsIDB4N2VlN2I3MDUsCi0JMHhkZmZjY2M5OSwgMHgxNjZkMmZiNiwgMHgzMjQzNmY1OCwgMHhlYzBiMjdkYiwgMHg2OWZjNjI3MywgMHgwNzY2NWVmYiwKLQkweGJlMmE1Y2Q5LCAweDYyMjBhMGY3LCAweDExYzFlNDdjLCAweGQ0ZDdkNDE2LCAweGYzMDYxYTA3LCAweDE5MDk4YTk2LAotCTB4YmRiZGZiMDQsIDB4YmQ2ZjdlZDgsIDB4N2Q0NzI5MTQsIDB4OWMwODk1ZWYsIDB4OGM1ZDEzZDMsIDB4MWZkYzFlMWYsCi0JMHg3ZmZhMWRiOCwgMHg5NjgxOTNmMCwgMHg0NzRmOGMxYSwgMHgxYTVlYzE5YSwgMHg3ZWUxMjA1OSwgMHhjNTU1OGE1OSwKLQkweDkzNmI3Njc4LCAweDZhM2JlZjE1LCAweGY2YmZmZGRiLCAweDk3Y2ZkMGM5LCAweGU1MmUwYmM0LCAweDc0NmIyNmMxLAotCTB4YzdmNDBhYmYsIDB4MDg4OGYxMjQsIDB4ZWQ2ZDFjZjksIDB4MWIwM2VmMDQsIDB4MDI1MjJiMzcsIDB4ZDI3OGQ5N2UsCi0JMHhmZmZlMDM1YywgMHhjMWU1ODUxOCwgMHg2Y2Q0ZjE5YiwgMHhmYmNjYTc1YSwgMHgyYzRkMjU1ZCwgMHhjNWM0YTVmZiwKLQkweGVkM2E1ZmYzLCAweGVmZTMzNDU3LCAweDA0OTA0ZjI2LCAweGJjZTkwZDZmLCAweGM5OTJmMTVmLCAweGVmZDhlOWRmLAotCTB4ZDE1ZmIwNGEsIDB4NzdkMWY0YzgsIDB4MDMxOGFmZGQsIDB4ZGU3Y2EwMzQsIDB4ZDcwMWNiYTQsIDB4YmVjMTI0NGYsCi0JMHhlZDg1NzZjNSwgMHhjZGJmYjU3NywgMHg2OTkzZDNlZCwgMHg1ZDQ2ZTM3MSwgMHhkZWVjNWZlZCwgMHg3ZGMxYTQ5YiwKLQkweGVmZjlkYjIzLCAweGRiZGVlYzZjLCAweDEzZjM1MzRiLCAweGQyZGY5ZmJmLCAweGQ4ZDMwYzVlLCAweDg0YjM3ZjVlLAotCTB4YmUzYzczZjksIDB4OWEwYjhkMWIsIDB4OTBlOWNiZjEsIDB4NmI0ODFmNjgsIDB4ZjUwNDFjZjQsIDB4ZTdkZjcwOTUsCi0JMHhhYWUxOGE4MiwgMHg1ZDRmOGFlZiwgMHg0ZjFmYjY2ZSwgMHhiN2VmODBkMiwgMHgwMWE1ZWYxZiwgMHhkYzc5ZmIxYywKLQkweGJjZjU2YmQwLCAweGVlYzJmNjA1LCAweDcwOTJlNzYzLCAweDU0ZDE1ODNmLCAweDUzZGE0ZmYwLCAweGFlNzY1ZTZjLAotCTB4Mjg0MWM5OTIsIDB4ZjYxMDYwNmIsIDB4ZWZmMGY3YWIsIDB4YmZiNTI3YjYsIDB4ZWM1YTc1NzksIDB4YmZkYjBlN2UsCi0JMHhkN2Q5Y2ZkMSwgMHg0N2YzMDQyOCwgMHgzZjk2MTYwMiwgMHgwY2RmYzY2MiwgMHgzYjkzOGYwZiwgMHgyMjc0ZmFmMSwKLQkweGJjNjJhOWE3LCAweDA5NmY1MDNjLCAweDNmMzA1N2NiLCAweGNlNGMzYzk3LCAweGZkZmUyZmZmLCAweDgwMDA2Njg0LAotCTB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWJiZGZmMDAsIDB4ZDU1NDc4MGQsIDB4ZGNlZWZlOTksCi0JMHhmMjY2NzdiOSwgMHhmYzk5OTkzMywgMHg0ZGMyZmUxMCwgMHgwMDkwODEwMiwgMHg3ZTEwMDg0MywgMHg1MDIwMjFkNCwKLQkweDQ1NDA2NDdlLCAweDA0M2FiYWVjLCAweGExYmY5MDg1LCAweDU2ZDNlYmIxLCAweDQxMjZlMWY3LCAweDI3ZDNlMDhhLAotCTB4Njc5NmRkNmQsIDB4NTcwNjdkYjUsIDB4M2IxMjU0YjYsIDB4NzcwNzA0YzEsIDB4MDhhMDBlYzIsIDB4ODBhMGRiNTQsCi0JMHgxMWRhZTNjMiwgMHgyNDg2YTIyOSwgMHhlYzU2YmIwZCwgMHgzYmVmZGQ2ZSwgMHg2NjY0ZGNlNywgMHhlY2ZhNWMxOCwKLQkweGY4NzI4Mzc2LCAweDljZjczOWVlLCAweGZiZGY3Y2VmLCAweGIzNzM5ZGZkLCAweDMzMDAwMWQzLCAweDY4Nzc2ZTAxLAotCTB4ZGIwMGQ5MDAsIDB4OGM4MDJmNjQsIDB4ZGUwODIwY2YsIDB4MTZlOTFiZjQsIDB4ZDMwNWQ2MDksIDB4N2FlNzc2ODgsCi0JMHhhOWRmZTBhNywgMHhjZTFhNmJhNiwgMHgyY2IwZWY5MSwgMHg3YTQ0OGYzNSwgMHg0MmQxZTk4NiwgMHhjNjM5ZTdhNCwKLQkweDY5OWU3YTcyLCAweGY4MDZlMjg2LCAweGJhNWJjODY3LCAweGNmYzAwZTY4LCAweDAzODc1ZTljLCAweGQyNTdlOWQ3LAotCTB4MDAxOTQ4NzYsIDB4NjUwNDkzNjYsIDB4NTI4ZWQ4NTksIDB4ZWMzNzM4MDMsIDB4NjVhYzAxNTIsIDB4M2MxZGFlYjgsCi0JMHhhYTQwMTc0ZSwgMHhkMjFiNzQwNSwgMHg1NGZiMzYwZCwgMHgxZTk1ZjFhMCwgMHhkMTFhNGI2ZCwgMHg4N2M0M2QwMCwKLQkweGE1MDM5YTM5LCAweGQzMzZiZWQ4LCAweGJlMDBiMzA0LCAweGFkYzFmYjRkLCAweDFlZjhhYWE0LCAweGM1YThmZmJlLAotCTB4ZmI4MWNlMzcsIDB4ZWM0NmI3YWIsIDB4MWZmNjAxNWEsIDB4YTQwNDczYmEsIDB4NmMxZDdlZDEsIDB4Y2YyZjI1YmYsCi0JMHhjNjAyODVjYiwgMHgzM2ZmZTE1NywgMHhmOGM5NjU1ZiwgMHg3NWYwYTZkYSwgMHgyYzk0MGY3YSwgMHg2NGJmNWMwNCwKLQkweDFhNWY4YTFjLCAweDU5OTk0ZmQ2LCAweDQxNmRjZjYzLCAweGY0OWYzZDAwLCAweDkwOTVjOWUwLCAweGVlYWE3MTZlLAotCTB4Y2UzNGY5OWQsIDB4YjZmMjY3ZDAsIDB4MjFmZDQxNDUsIDB4NjlhYTcyNWYsIDB4Y2U1MWU5MGIsIDB4YzBlOTZkMzAsCi0JMHg4OTg3NGVmNiwgMHhhYzU4YmZjZCwgMHhiNzkwMzAwMywgMHg4ZTBkZjUxYSwgMHg1MzM1YmM4MSwgMHg5NmZhNGQzOCwKLQkweDQ4ODFiMmU1LCAweDliN2Y1MjM5LCAweDg3MWU3ZWVlLCAweDBmODE5OGMyLCAweGRkZmE0NzFlLCAweDNiZGM0YTA3LAotCTB4YzI5MGJlOTEsIDB4NTAyZWIxZTUsIDB4N2E0NTEyZDAsIDB4MzYzMDI1YmEsIDB4OWQzOTdjODIsIDB4ZjdjOTJmM2UsCi0JMHgwNGMwOTY5YiwgMHgyZGI0YTc4NiwgMHhlNGJmMzRlOSwgMHhjYTBlZjgwMSwgMHgzZDEwNDI0MywgMHhmMTZlZmI4MCwKLQkweDAyMTZhNjgwLCAweDFjZTc4MDhjLCAweDkwMDA0Yjk3LCAweDMzMmFmODJiLCAweDI1NjBiYWQ5LCAweDg3MzdkZWI5LAotCTB4MTc1OGQ1Y2IsIDB4MWM4NTY4NjUsIDB4M2Y4MmE3ZTQsIDB4ZjVjMGY4MzcsIDB4YzFiZWI0N2QsIDB4MzAxZjEwY2YsCi0JMHgxNTM5NzFjNiwgMHg0ODU3Y2ZkOCwgMHhkMzNjZDFmNywgMHgwYTMyMWU1MCwgMHhmZmYzZDcwNSwgMHhhMGIwMTRkZSwKLQkweDNmZjhmZGZjLCAweDMyNWYyZmQxLCAweGM5ODk3NDA1LCAweDJjZmQ2ZDNkLCAweDMzYWQ4OGY2LCAweDk5NjZhZGU3LAotCTB4OWZlM2FiMzEsIDB4ZWNkNDRjNTksIDB4YmI1NDNjYTcsIDB4Zjc0OGVjMDIsIDB4YWQ0NjJmOTgsIDB4MzdmNjFkNjIsCi0JMHg5Y2Y5MWM2ZSwgMHg3ZDlmZGUyNywgMHg4ZDMwYjdjMiwgMHhjN2UyZjdkYSwgMHhmZmE3ODNjZCwgMHgxNWZiZTMyMCwKLQkweGU1MDE5MDEwLCAweGQwOWEyNzMyLCAweDMxZmU1YTFmLCAweDRhZWYzZmNkLCAweDc3YmZmM2ZjLCAweDdkYjE2N2E0LAotCTB4NWY1MTgyOGQsIDB4NzcyMjdkYjEsIDB4OTVhMzVlYjgsIDB4NjZmODM3YWYsIDB4ZDNlMTA2NDEsIDB4YTJkOTQ2NmMsCi0JMHg4NjRkNTVmYywgMHhhMmJmNmMwYSwgMHgzYTAwM2I5ZiwgMHgwYjM4ZTJiNywgMHg1NmFkYzFjMCwgMHhlMzM5NGVkNiwKLQkweDg0ZWI0MGQ4LCAweDI2OTAyMmI2LCAweDM1YmFiYzAyLCAweDFkODZiNTk3LCAweDBmMDMzOTRkLCAweDc1OThkNGMxLAotCTB4MzkwZGRlMDQsIDB4ZTVjN2JlMGUsIDB4ZTkzYTNkMzgsIDB4NTY5MWYzYTcsIDB4ZDAxMDI4NGUsIDB4NTczMGU1ODYsCi0JMHg1ZDEwNmJjOCwgMHhmMDc5ZTkwNiwgMHg0NzViOWE0YSwgMHhiYmM5ZDY3YSwgMHg0YjRmYjI2NSwgMHg5OGI0MDlhZSwKLQkweDE0YjRkOWZkLCAweGQzMGQyNmQwLCAweDcxNWM5M2E5LCAweGI4ZjQyY2I0LCAweDllN2Y2NmNkLCAweGY0Zjc0MmUxLAotCTB4MzMzYWUyZTQsIDB4ZWVlOTNhYzQsIDB4NDFmMzcxNTEsIDB4ZThjNGZmMDAsIDB4ZTJkNzU1ZjMsIDB4NjdlZTEyMTMsCi0JMHgwYWY1NWE0NiwgMHg0NTQ2NTdkYSwgMHhlNWZjZGM0MSwgMHhiYmNiYzY2ZiwgMHgwOTFlYmMwYywgMHg4ZmJmNzY1ZiwKLQkweGIzZmJlM2ZjLCAweGNjN2Y2MGNlLCAweDJiNDg4YWY4LCAweGZiYzU0N2MzLCAweDVlZTdjZmYxLCAweDZmM2JhNzhhLAotCTB4Yzk5YmI3YTYsIDB4NzRmZWE2MTMsIDB4MmU1ZmQ2N2UsIDB4NWUyN2E3NGYsIDB4ZTM0Yjk5OWUsIDB4OGRlZDk5ZTUsCi0JMHg3NTg4ZTc5NywgMHhlOTFhZjJmMSwgMHhlOGM3OTc4YiwgMHhmZDcxYzllYSwgMHhjNTk0Yjc2MywgMHgzM2JlZTNkMSwKLQkweGJlN2M2ZTM3LCAweDE3NDcxOTVlLCAweDM3MTY1OGVlLCAweDlhZWI0MjdlLCAweGVlZTI3YTM4LCAweDJmOGRjNjZmLAotCTB4ZjVjNTU0MGUsIDB4ZjlhYmVjOTcsIDB4MjUzZmY0OGIsIDB4OWUzNzE4ZDgsIDB4MWFmYTZjYzQsIDB4N2QwYjRmZmQsCi0JMHhiZmJkNmUyZiwgMHg5ZGZmZmU5NiwgMHhjZjdlOGZmNCwgMHg3YTQ0YmZkMCwgMHg0MmZhNDk5ZiwgMHgxYzM2NTkzZiwKLQkweDA2Yjg5YzlmLCAweGY4Njc0YmY5LCAweGRhMTJlYjhkLCAweGU5YTk1ZWE1LCAweDBjYmViY2M0LCAweGY3ZDgyZGRjLAotCTB4Yzg5NWVjOGMsIDB4NTE0NjhkYmYsIDB4NmM2ZmQwOWIsIDB4ZjkzNTQxMzMsIDB4NGM5ODFmZmQsIDB4ODZkMzc5MGYsCi0JMHg5NGU0ZGNlZCwgMHhhYWNmZmNkOCwgMHgxNGI4YTY2MCwgMHhlOTRkNmUzYiwgMHg0ZGEzMzhmMCwgMHg3OGQ4OWE3NywKLQkweGQzN2VkZmMzLCAweGQxNDRiNWEyLCAweGI5OTc0ZTlmLCAweDliM2Y0NTNmLCAweDcwN2Y0NGVlLCAweDIxNDI3YTQxLAotCTB4ZTk2NGE5MzcsIDB4YzU5NGFmOGEsIDB4ZDhiYzg3OWQsIDB4NmE0YjIxM2EsIDB4ZDg2MzM2YzQsIDB4YTE1ZjZiYmYsCi0JMHg4MWE4MmU1MiwgMHhmZTIxM2ZiZCwgMHhiZGVlYzk0ZiwgMHg0ODZmZmZjOCwgMHgxNzQ5MjMyMCwgMHhlZjNmMTY2ZSwKLQkweGE2OTZmYzM3LCAweGY4NjMzODY1LCAweGUyMzM0YzFhLCAweGYxNDE5NmFkLCAweDQyZTFmMDczLCAweDNmY2VkN2U2LAotCTB4ZjUwYjRlODgsIDB4ZmJlNTVlN2YsIDB4MTE1ZmM2MzEsIDB4ZTE1M2VkN2UsIDB4OWZjOTdhZDcsIDB4YWJmYjg2NTksCi0JMHg1ZDM4ZmNmNywgMHg0ZmNlNzljMywgMHgxOGMxYTU4MiwgMHgzOTBiMTUzOSwgMHgyYzFjMTk4MSwgMHgzYWUzY2NlZSwKLQkweDRiYjM1MGJiLCAweGRmZjM4OGQ5LCAweGExNmMyZWY3LCAweDEzZmJlZTc1LCAweDZmN2Q4OTZjLCAweGZlNjE1M2I2LAotCTB4NjY1M2I2NzEsIDB4NzI2YzVhZWQsIDB4MzE2YmNlNTEsIDB4MThjYjM5YTYsIDB4NWRiMDkxMWQsIDB4YjIxNDAyNzUsCi0JMHg3Y2JlZDVjYiwgMHgwZWYyODQ4NSwgMHhlMTc2Y2ZiOCwgMHhkMTQ4MGI5MiwgMHhlMDNkZGVmOCwgMHg5ZmZmYzg1NSwKLQkweDlkM2ViMDdiLCAweGYzY2QwZGM2LCAweDExNzcxM2M2LCAweGEyYTJkNzNlLCAweGQ3NzkyZjI5LCAweGU4MzkyYmE5LAotCTB4OTM2ZTA2MGYsIDB4NzVjNDljNTgsIDB4ZmJkY2Y0YWMsIDB4MjkyN2U4YzAsIDB4ZGYwMzljYmUsIDB4YWZhOGIzZDUsCi0JMHhmMzY2ZTAzNSwgMHg3MjIyZjMxOSwgMHgwNWNjZmNlMywgMHgzODk5MjIxNSwgMHgxMmMxN2U4ZiwgMHgzNDdjOGJkOCwKLQkweGZhODI1ZTUyLCAweGMxMWVlYzY5LCAweGNkN2Y1ZmUyLCAweDgyN2ZkYjFmLCAweDFkMWExZWUzLCAweGZhZjE0YjFkLAotCTB4OGE5ZmNkNDIsIDB4ZWZmN2NmNDgsIDB4N2Q0MzQxOTYsIDB4NzdjNTM3N2UsIDB4OTBjMGUxMTcsIDB4YWY4N2Y5YzMsCi0JMHhjNjNmNTNhNSwgMHhkODY3YTY1ZCwgMHg2NWVmNzE2ZiwgMHhkZWNmZGJmMiwgMHg3M2FkYzYzMywgMHhkZTliYjgyZSwKLQkweGQwMTQwYTgzLCAweDY3ZjExYjljLCAweDQ5NjgxNGI0LCAweGUwNmEzNTJlLCAweDNlNDNkZmU3LCAweGU2YzI5NGUxLAotCTB4NTliMmYwMzMsIDB4NWYzMWE1ZTAsIDB4OTc4YjExMWIsIDB4YmMyMWY0YzYsIDB4NzFhYjdjYjAsIDB4YTZlY2NjYWYsCi0JMHgwMDE2ZGJiMSwgMHg4MTU5Y2I5NCwgMHhlYmZlZmYzYiwgMHgyMzRmN2QyZiwgMHgxZjNkZTc4MiwgMHhjNDM0NmUyMSwKLQkweDM3MTFlZmM5LCAweDhmYmRjNjFhLCAweDNmNDQzNzExLCAweDg4NmI3YjJhLCAweGZlOWU4ZmRmLCAweDc5YTNlZWM4LAotCTB4YmUzNWI5ZWYsIDB4NzM4MWE1ZmIsIDB4M2RmMjQzN2YsIDB4MDgzZWYxYzksIDB4NWY5OGU3ODMsIDB4MjhkNjJjZWYsCi0JMHhmMDc4NWJhZiwgMHhlYmNhMzlmYSwgMHg5YTJkM2ExYSwgMHhjZWFiZTkwNSwgMHg2OTY3ZjFlOCwgMHg2ODA5MjFmYywKLQkweGM2YzQ0MzdjLCAweGE3NDM1NTljLCAweDdmNjFiMDE0LCAweGZiNjNhODRkLCAweGRhNmJhNDY4LCAweGQ4NTM5NzU2LAotCTB4NzIyMWRiZjAsIDB4OTAxZmY1MDcsIDB4N2ZkOGNkMDIsIDB4N2I1ZWFiNzksIDB4ZjBiODc1MDksIDB4Njk5N2ViZDUsCi0JMHhmOTU3YmVkZSwgMHhlYWI2NTdiYywgMHg5MDEzY2MxYiwgMHgwM2ZlYjAzZSwgMHhkM2FlYWY5YSwgMHg2ZmQ0MzYwMiwKLQkweDhlYTIzMzlmLCAweGE0M2FmNWE2LCAweDFkNTdhZDIwLCAweGYzNGFhMWZjLCAweDdhYjBiZjU3LCAweGI1MzlhNTNjLAotCTB4YzZhYTlhZmIsIDB4YmViZmY4YzcsIDB4MGQ1NWE3ODMsIDB4ZjlkZDU0ZTUsIDB4NWM2MmM1YzMsIDB4MDE1ZjBmMzksCi0JMHhmZWM2Mzc2NiwgMHgzNjlhMDczNywgMHgyZWUzNjM5OCwgMHg3YjI3NWJmZSwgMHgyZGY3N2UxMiwgMHhlMTc1ZmYyMSwKLQkweDI3MTIxNmMyLCAweDY3YWU5NWZhLCAweDc2NTdlNjI1LCAweGI4NzJiZjMzLCAweDg1ZmVkZmZkLCAweDhiZjQzYmQ2LAotCTB4MjgxYjg0MDksIDB4ODM3OTM1YmYsIDB4YjE3MTY3NTcsIDB4NTcwM2FjNDEsIDB4OWVhOTUxZGUsIDB4MmU1NGU4NjksCi0JMHg3YzY1ZTdjNywgMHg3N2E3MzVmYywgMHhmOTI2NzNhZiwgMHg4NWI0OTg1NSwgMHg3OWYxM2JkNSwgMHgyNTk0MGVlMiwKLQkweDdlN2FlMWU1LCAweDM5MGZiMzBhLCAweDhmNWQ0MDZkLCAweDA2OWY3Y2ZjLCAweGM3NjYzZjIwLCAweGY0ODU1YTgwLAotCTB4NTcxODk3MGUsIDB4Y2RlYzBkNjAsIDB4M2ViZjkxYmYsIDB4NjdhZDk5YTcsIDB4YWM1ZjAwMmQsIDB4Y2ZkYTMwZGYsCi0JMHg4MmIxZmY0NCwgMHhkNTI4ZDU0ZiwgMHg5NTE1ZGExNywgMHhmOTEwZGI3MCwgMHg3ZjkwZDU0NCwgMHhjNWMzZTg3ZiwKLQkweDdkZWYyNDllLCAweDYyOTVmYzIyLCAweDI5ZWY1NmYyLCAweDQ2OGZiNjFmLCAweDcxNGEzOWE5LCAweDQ0ZDBmMWFhLAotCTB4ZDY3YTY3NGQsIDB4MmViZjhjYTMsIDB4NThmYjQ2OWIsIDB4NTk5M2YwNzgsIDB4M2VmOTk4ZDEsIDB4NTc4YzdjNDMsCi0JMHg1Zjg2ZTk4NiwgMHgyMTU1Mzg3ZCwgMHhlMWZjYmRiOSwgMHhjYzdhNzM1NCwgMHhhYWQyNzIzZSwgMHhlMGY5NDkwMywKLQkweGJiNDllMmYxLCAweDViYWQwYWY3LCAweDM1YTJkMDdmLCAweGRjZGI3YzMzLCAweDM4NzdjMjExLCAweDQ0NjY4ZGQ1LAotCTB4Y2I5YjU2ZjgsIDB4M2Y3ZGYxNjMsIDB4MmMyMWJiZTMsIDB4ZDBlOTExYmIsIDB4NmJlZDVhMTAsIDB4ZGRkM2UzNjIsCi0JMHhiNDM5MDZhNCwgMHhjOTljMjc0MCwgMHgyM2MzMmYwZSwgMHgzN2FlMjdmYywgMHhmZTMwZTI4YiwgMHg3NTZhM2ZhMCwKLQkweDc4NDc3ZWZhLCAweDU1ZTlhNzMxLCAweGRhZjg5OGU2LCAweDM1ZTY4YTYwLCAweDVmM2ZhNDRiLCAweGZiMTg4MmViLAotCTB4YWQ3NGQzOTMsIDB4OTllNDhiMzksIDB4NjFiNTk2ZTksIDB4YWUyNjI5ZmQsIDB4NmEyZDNlOTcsIDB4ZGIxYzUxNzcsCi0JMHhiZDkxZjM4YSwgMHg5M2IxM2U0NCwgMHgzNjg3YjdmYywgMHgzYmVlYzk1OCwgMHg0N2FlMGU5YywgMHg0ODFjZDc1NSwKLQkweDg3N2EwOWI3LCAweGJiMjZhZGVhLCAweGMyOTM5MWRhLCAweDJlMzFiNWViLCAweDA5ZmZlZjg2LCAweGFmNjQ3ZGFmLAotCTB4M2UwMjhlYjgsIDB4MDlmNzdmNTYsIDB4MDU4ZGY1YmMsIDB4ZjcyOTdmZTYsIDB4OTRjOTljMjMsIDB4MTk5MjE1ZWYsCi0JMHhjZTM0MWNmOSwgMHhiZGFhNmExZiwgMHg4Nzk3NmIxNCwgMHg3ZjEzNzNlZSwgMHgxZjdmMGE0YSwgMHgxMzVlMzg3MiwKLQkweDcxNzVjZGQ3LCAweGFhNjkzZDljLCAweDEzMTA1ZDZhLCAweGU1YzcxMzg3LCAweGMzOTliOGQwLCAweGNlYjMwMDcyLAotCTB4Njk3MDAxY2UsIDB4ZmVmYzMyNGYsIDB4Nzc2OTU5YzIsIDB4ZGU1ZGZlOTEsIDB4Y2Q4N2U0NDksIDB4NTFlMTE4YzQsCi0JMHg4MWYyOTM1MywgMHhkOTVjYjNlMywgMHgyZTRkZTNjMywgMHg1NTRmNWIwNywgMHhlYjkyMGU3YywgMHhhZDM5Mzk3ZiwKLQkweDY3MjY1ZWE4LCAweGVjOGQ2YzM0LCAweDA1N2Y2ODc4LCAweDliM2I1MjZhLCAweDkxZGVmODJlLCAweGM0ZjdhZjFmLAotCTB4MzhjNGQzNzEsIDB4NTZlN2E0YzUsIDB4NjU4NzlmMTEsIDB4ZGFmZDM3NjYsIDB4MzFiZmQzMDAsIDB4OWQ3MjNmYWUsCi0JMHhlZDdjM2ZlYiwgMHg3OWQ5MGYyZSwgMHhjZjg2NWFmZSwgMHg1YzU5N2Y0ZiwgMHhiYmNjYzcyNiwgMHg4NTM5NTljZSwKLQkweDEyZTc5M2Y2LCAweDVjZjQ1MDc4LCAweDJiYTQ3YmUyLCAweDczM2YxZjdlLCAweDYyYjg2NzdhLCAweDRjNjAxZmNlLAotCTB4MDRlMTJkZDYsIDB4MTZlMDdkNDQsIDB4ODNlYjBlZjEsIDB4YjU3YzY2NDksIDB4ZTRkYzUyMWYsIDB4MWU0NDNiZGYsCi0JMHhjMzJmMDY2YywgMHgzNWI4MmE0OSwgMHhlMDdhZjc1NiwgMHg3ZjcwZjNkNywgMHhiMDRjNDcyZCwgMHgxZDNiNDkxMywKLQkweGYzNjI4YzcyLCAweDA0ZDhiMDc5LCAweDhhMzI2Y2JiLCAweDRiMTU4ZjA4LCAweDMyMzIxMmJkLCAweDlhZTI1ZmVjLAotCTB4Yzg2ZDhkZjYsIDB4NjVkMDIxZWYsIDB4ZDdjNzNmNWUsIDB4M2M5MWUwYzEsIDB4ZmJmZDZjNTIsIDB4ZDVhZGNkNWEsCi0JMHg1YWY5Y2ZiZiwgMHhlYjEzY2VjOCwgMHhkMzExMzlkZiwgMHgxNmUzMzU3YSwgMHg5NmQ3ZTBlYSwgMHgxZjgzYWQyNSwKLQkweDUzZDdjNTc0LCAweGM2MzRiYjBmLCAweGM3MTI3MDVjLCAweDEyOTIzMDYxLCAweDMwMjhlN2UwLCAweDg0NWM3MDgzLAotCTB4ZWRmYTg0ZTEsIDB4YTU1NWJjMzksIDB4Mjc1NjQ5YmUsIDB4ZjRkNzMzYzYsIDB4NDE4Yzc2YTcsIDB4ZTVjZjFiM2IsCi0JMHhmZDBiNzQ0MCwgMHg4ZGYzY2EzYiwgMHhiNWZhYmFhMSwgMHg0NGZmMmNjOSwgMHg3YWIzMjQ3ZiwgMHg0OTc4MjFkMiwKLQkweGU2Mzk1ZmQwLCAweDcxMThiYzQ5LCAweDkxZTVkNWM3LCAweGM5ZGE1ZmUzLCAweGI0YmJiNmZmLCAweDA2N2U5MmRmLAotCTB4Nzk0MGNhNGUsIDB4NTUxY2NkOWMsIDB4ZWJlYzQ5OWQsIDB4OThiM2U1MjAsIDB4ZTJlNGJjOGYsIDB4OTIxYWQ2N2UsCi0JMHhkZjVjMDEzYywgMHhlMjgwNzlhYSwgMHg5OGUxY2RiYywgMHg1OWQ4YzcyZSwgMHg4NWM3OGI5NSwgMHhmMjE3ZTNmYSwKLQkweGFmMjNjYzU0LCAweDk3YjRkZTlhLCAweDVkNzVmY2UyLCAweGNjNzRlYzA3LCAweGVkZmU3YjUzLCAweGI0MTQ3NDU5LAotCTB4NGVkYmVjYzgsIDB4YjRhOWZiNzYsIDB4Zjk0YWM4YTcsIDB4NTRjMDhlZTEsIDB4NTIzMDRmOTIsIDB4Nzc3MTQxOTAsCi0JMHg3Mzc0MTk4YSwgMHhmOGZjOGRkOSwgMHg1MGE2ZTM3NywgMHgzM2JiMGQ4NiwgMHgzYzI1M2I1OSwgMHhhN2U1MTM2MywKLQkweDJmZGYwOGZlLCAweDBiYTBhMWFkLCAweDhjNDkwZTJjLCAweGI4YjUwYmVlLCAweGJmZmYzZTY4LCAweDNmMjI4Zjc2LAotCTB4OWY5YjNmYjUsIDB4NDVmOGJlMmYsIDB4MGNkZjdmMDksIDB4YWNmZjFhNjYsIDB4MWVmMDI5Y2IsIDB4ZDQ3OWQxMzAsCi0JMHhkNThlNzE3ZSwgMHhjNmNjODVmNywgMHgwOTRmZWIxOSwgMHg4ODFkOTAyZCwgMHhlYjQ4ZDI4MywgMHgxNjRlNzY1MSwKLQkweGNhN2NiMGI2LCAweDc5NzAwMmY2LCAweGEzY2YzMTg0LCAweDRiYzM5Y2YzLCAweGJmNTFlMjgwLCAweGY2MTJkYzEzLAotCTB4YjAwY2E3YjcsIDB4ZGJhMDY3ZmMsIDB4OTEyZjNkYTIsIDB4ZWM4MTVhZGMsIDB4NzVlNTVkYmQsIDB4ZjYwMjMxNGIsCi0JMHg3M2YwZGE0MCwgMHhmODViM2Q2MywgMHg0NGU2NzRhNywgMHhmYzUwZjBiOCwgMHhlMTViOTliMywgMHg3OTU4YjRiNiwKLQkweDg3NzkzM2E3LCAweGE2YzgwZjI5LCAweDM0YTYyMjc1LCAweDc3ZDFjZmNhLCAweDFhZjhjZjNlLCAweGJhZDgxM2U2LAotCTB4Y2NjNTlmMDYsIDB4MDNhYmI3Y2YsIDB4NjJjZjFmOTcsIDB4MDcwODM5N2MsIDB4ODRmOWMwYzUsIDB4ZmM4ZDQ0ZjAsCi0JMHg2MWUxY2Q5YywgMHgzNDM5YjBmYiwgMHhjOGRkMmViNywgMHgyNjJhN2Y5NywgMHgzZjNmNjg2MCwgMHg3YjIxODY2OCwKLQkweGE3ZjZmYjI2LCAweGI0NTZkMzBjLCAweDhlMDJmNjg1LCAweDNjMzdkMDZiLCAweDBjN2U2OGI1LCAweDYyYTY4ZTRkLAotCTB4YWVkM2ZkZjgsIDB4MWI2ZDRmOGQsIDB4NzQ4ZGNlYzMsIDB4OGE5ZmY1MTksIDB4ZjY4YmJhNmQsIDB4YmQwYWVkYzksCi0JMHg4Y2JiMjdhNywgMHg3MjhkYzFjYiwgMHhmZWYyYjU0YSwgMHhmMzg4ZjFhMSwgMHhmOGQzYTIzNCwgMHg5MWM1YjczOCwKLQkweGQ5OWYyY2JhLCAweDE4YmQ5MDBiLCAweGE1YjdkOWY5LCAweDUwM2JlNWM4LCAweGY0M2ZiZGI1LCAweGJlZTI5NDY2LAotCTB4MWY0NzRkN2EsIDB4OWY3MWMzNmIsIDB4NDUxNjBmYWQsIDB4N2Q1MGZlYTgsIDB4NWYzZTEzZWYsIDB4ZDc2YWJmNzksCi0JMHhlZGJiZjIxNCwgMHhmOTA1N2I4YSwgMHgyM2ZlYTg5ZiwgMHhhOGJmMDc5NiwgMHhlYzYzM2I2OCwgMHhlNDBjYzYwZSwKLQkweGQ3MTM3ZTEwLCAweGZlNmY5ZmYxLCAweGZkYjllNTExLCAweGFhY2QyNDg3LCAweGM4MWRmZjkxLCAweGMyMWJiZTIzLAotCTB4ZDdlNGFiMWYsIDB4NjQzZTg3ZmQsIDB4OTkxM2VkNzksIDB4NWViNDJiYmUsIDB4MjE2OWE4NDUsIDB4YjQwZTc1YzksCi0JMHgyZWRmOTBiNiwgMHgzMDQxZjkxMSwgMHhjMTkzZmI5NywgMHgzN2NmNDUzMywgMHg5ZWMxZThjNSwgMHgwZWRjNzEyOSwKLQkweDljNTFjNmY4LCAweDNkN2IwYjBhLCAweGI2MjdmNTRjLCAweDJmZWU0NzVkLCAweDQ0YmJmOWE0LCAweGQ3YmM2YzdkLAotCTB4OTM0NzQ3MDQsIDB4MzVlMTliZGMsIDB4OWRjNTBlZDYsIDB4ZTEyOTc5ODAsIDB4ZjU5Y2U0YWMsIDB4NzhjYzRmMjEsCi0JMHhiZjNmMjY2YiwgMHgwMmY1OGFiNSwgMHgxMzNmYmU5OSwgMHgyZTQ3YjViZiwgMHhlN2RhNzZhYSwgMHhkNTFlNjBhNSwKLQkweDkzYWM0MTk1LCAweGM4ZmM0OTFkLCAweGQ4MjZmZDkwLCAweGEwM2NkZjkzLCAweDE1ZmY3OGQyLCAweGY1MDU3ZTYwLAotCTB4ZjUwMzJkYmQsIDB4Njg1Y2ZmYjcsIDB4ZGU3YzdhZjIsIDB4YTBjOTNhODUsIDB4YWYzY2UxN2MsIDB4ZWYxNGJiMTMsCi0JMHg3NGRmMWE2OCwgMHhlNGE5ZjNmNiwgMHhhODI4MDZjNywgMHg3NzlmN2ZlMSwgMHhiOTIzOGVkNywgMHg1MzJiZmUyMSwKLQkweDgwM2FjZWM4LCAweDRlYzMzNWY5LCAweGYxNGVjOTRiLCAweDdmYzI1MmZkLCAweGNjYzVkMTM5LCAweDNkYWJiNzJmLAotCTB4NzY1ZDk4Y2IsIDB4MTJlYzgwOTksIDB4MDFlY2NmZjEsIDB4YjhhMGVmZjEsIDB4N2I0MGVhNWMsIDB4NjQ0ZmVmNjAsCi0JMHg2M2RlZGU3NiwgMHgxNjdjYjBmMiwgMHg0NjA0ZmFmZCwgMHg3NDRkZGU1NywgMHgwNzIyY2Y3YiwgMHhlMjEzNzNiMywKLQkweDM1ZWM4Y2I5LCAweDEzY2Q5NDcyLCAweGE2MzRhMDA0LCAweGVjNmYwMjVjLCAweGNiOTU0MTM5LCAweGY4NmNmMGNlLAotCTB4N2VjMjJkY2IsIDB4MGNiNDkzODMsIDB4NTUyM2VlMzcsIDB4MjNlY2UzOTYsIDB4NWE3MjVlMjYsIDB4N2ZjN2QzYzQsCi0JMHg5ZWE3OTNmYywgMHhhNzhmNGY5OSwgMHgxMGUxMzhmMywgMHhjZTliNTI3MSwgMHgyMmEzZmVmYywgMHgzZWJlMzU1NiwKLQkweGU1MWI1NTc3LCAweGFjYzk2ZmU1LCAweGE3MzhiMGZmLCAweDFjOWMwODg4LCAweDE0MTRlNzE1LCAweGNmZDQzNDM3LAotCTB4NzVmY2UyNmIsIDB4ZjQxZWQyMjYsIDB4NWIzY2IzYTMsIDB4NTU2ZTUyMTYsIDB4MThmNWI0YjEsIDB4YzFiZDczYjUsCi0JMHhjZTMyOTQ4NSwgMHg0YzczZDc1ZiwgMHg0MjVlNjZlMSwgMHhmYTNjZWJmOCwgMHhmOTMzMTI4ZCwgMHhjZWJjZjNiZCwKLQkweGUwNzJmY2ViLCAweDBlNTExNzgzLCAweGY5NDYxZDhmLCAweGI4NTM4OTI3LCAweGNjM2Y4NjFkLCAweGVlNDM0NmIzLAotCTB4OTJmZGZkOGQsIDB4Zjk3ZTQ3ZTEsIDB4ZmE0M2FhMGQsIDB4MWE2MWU1M2EsIDB4MDIwMzYzZTMsIDB4OTk1NWU4OWIsCi0JMHg0NzRhNzhiZiwgMHhmNGM4M2VjNiwgMHg3OTQ0YzlhYywgMHgzNWJlZDljYSwgMHg5Y2VmOTQ5OSwgMHhjYzg3MzJmZSwKLQkweDQ1Y2NlYmIyLCAweGFhNzczZjU2LCAweDRmYzIxMjllLCAweDljOTYwMTY3LCAweDdiN2E3MDQ5LCAweDUxZjRjMmE2LAotCTB4NjczZjg5NmUsIDB4ODRjN2RhMzEsIDB4YjBlOTE0MWQsIDB4YjFmNTYyNGIsIDB4ZmQ1MDA4ZWMsIDB4NTQ3YjI5ZGMsCi0JMHg4MGFlODNjYywgMHhmOTFlNzZiZSwgMHhmODFlNzExYiwgMHgwZjFmODgwOCwgMHg2Y2ZkNDFmZSwgMHg5NDIzZTQxNCwKLQkweGRhZGM2MGI3LCAweDc3MTI4Y2Y4LCAweDJkZTQ2NzNlLCAweGIwN2JjNjc1LCAweGRhZjg0NGM1LCAweDFmZTA5NjE0LAotCTB4Y2ZkNTE2NTEsIDB4YTNhZjhmYzUsIDB4ZDllNzA1YmMsIDB4N2M3M2RhMWMsIDB4ZTZiNWVhMzQsIDB4Y2E3ZTg0ODUsCi0JMHg3OWI5ZDg1YiwgMHg3NWEzZDU5MCwgMHhmZTVjNGE2ZCwgMHgzOGE2NThmMiwgMHg0Mjg0MmMwZiwgMHg1NzEwNWZjYSwKLQkweDY2Mjg0ZmNjLCAweDFjNDE2MTM4LCAweDZkZjZjODRmLCAweDZmZGYzYjIwLCAweGZmNDJmMmUyLCAweDAzNzNlY2NhLAotCTB4Yjc5ZjE1ZTEsIDB4MzRiZjcyNTcsIDB4Y2MwMjE1NzAsIDB4OGYwNWY2N2UsIDB4YjlkZjkxZDksIDB4NWE2ZWY5NmQsCi0JMHhmNzk5YWU2MywgMHhmM2U1MGRjZiwgMHg0MDczMGQ3YiwgMHhhOTBhOGQ1ZSwgMHhiMzE2ZjhmMCwgMHg5Y2Y3NWFmYywKLQkweDU0Yjk0NWM5LCAweDBlMDk3ZjBiLCAweDU5YjVmZTdlLCAweGU0NWFiZWVjLCAweDRhMDM5Yjc3LCAweDJmY2VmY2QyLAotCTB4NDA4MWNkYzYsIDB4NjliYmFkMGIsIDB4NDdjZWM0OWYsIDB4OGZjNWY3NmIsIDB4ZDUzOTBiZjcsIDB4OWM3ZDNlZWQsCi0JMHg4M2VhZmQ4ZSwgMHg0ZTQyZmQwOSwgMHhmM2ZjNTBmZSwgMHg3ODcyN2MwMywgMHgxZTUzOTBkNiwgMHhmMzczYjFlNCwKLQkweDY3NTZiNzEzLCAweDdjZjBhNjdkLCAweDhmMzE2ZGUzLCAweDM4MTYxZmQxLCAweDkwNmRjMDZhLCAweDcyMDJlYjdlLAotCTB4MmQ1NDcwODAsIDB4Zjc5ZTc2ZTksIDB4ZGM3YWRhNDIsIDB4MDYwMzA2ZGYsIDB4Yjk0MWZlMWEsIDB4YjRlNDJjM2MsCi0JMHhlZDg3ZTA0MSwgMHg3ZmFmZGYxZiwgMHhiZGQwMGE0ZSwgMHhjNzRmYzNkMywgMHg1ZTAzNWZmMywgMHhkZjNlMzQ3NSwKLQkweDk1MmRmOWQ4LCAweGYxMTJmNWNlLCAweGIwYTZkZDU2LCAweGM4NDZiN2ZjLCAweDM1NWYxMTI3LCAweDU1NjlmODQzLAotCTB4ZTIyNWJlMjksIDB4ZGQyN2MxYWIsIDB4Yjc5ZTdmODQsIDB4MzdmOTZmZmYsIDB4YTYyMzVjZjQsIDB4ZWMyMjU1YTksCi0JMHgxZmY2YTg5YywgMHhkZGFlYjcyNCwgMHhmYjQzNWY3YywgMHg0YmZiZmIxMSwgMHhkMGRlNzVmNywgMHhjYzk4NjRmNywKLQkweGYzMzRiZGY0LCAweGY4YTVlYjE2LCAweGU1NDNiYjdjLCAweGU2NjgzMzc2LCAweDllMDZjYWU3LCAweDJjNWZkZjEyLAotCTB4YmIyNWY1ZjIsIDB4MzU3YWRlNzksIDB4ZTc0ZWNkNzQsIDB4ODMzZGZkYzQsIDB4NjlhZDYwNzYsIDB4YTI0N2M1MjksCi0JMHhhNWY4YzdjNywgMHg1ZDc5MzI0ZiwgMHhhM2Y3M2RiZCwgMHhiZjNlNTAxZiwgMHg2MzcxNDNhNCwgMHg2Mzc1MDdhNiwKLQkweGYxYzUyZjE1LCAweGU3YWZiMWJhLCAweDJiYWQ4ZjhjLCAweDFkMjVmOGM1LCAweGU4ZGIzNDhmLCAweDkyOTdlMjNjLAotCTB4M2ZiMmNjOWIsIDB4ODk0Nzc3ZmMsIDB4ZjcyNGRiZDYsIDB4NzhmZjdjMDQsIDB4ZTY2ZmUwY2YsIDB4NTM3MjVlOTEsCi0JMHhmZTdjZDE2NywgMHhkYTRiM2JlZSwgMHhmY2ZlM2U5MSwgMHhmZDZjNzcwYywgMHhmN2M1ZGM3OSwgMHhjMmFjNjRiNywKLQkweGE4ZWY2YWUyLCAweDQxNWE3ZmQ0LCAweDNkOWU4NWU3LCAweDVmN2JiZWNjLCAweGZiMjU1OTdkLCAweDIwOTc2ZmVmLAotCTB4OWUzYTE3MTcsIDB4MWQyNWVjN2IsIDB4ZjA3YmRkZTUsIDB4ZmFjOTRhYjQsIDB4NmFkM2NlYzIsIDB4ODVmMjZiZjQsCi0JMHg0NThlNThhYiwgMHhhYjZhNzlkOCwgMHhiNzhmNzU0YSwgMHg5NDZhZjdlYiwgMHgzZTE3YTdmMiwgMHgzNTU0ZTc2NCwKLQkweDNlNTNlNzk0LCAweGQwMWM5Y2Y2LCAweGJhYzc5ZmYwLCAweDRmMDk1MTVmLCAweDhjMTI2ZDBkLCAweDU3ZWQ4ZmM4LAotCTB4NDFmOTNmNTgsIDB4ZTM2ZTNmYTIsIDB4NjljMGQ0ZmUsIDB4ODFhNWMwOTUsIDB4NTViNzAzNTMsIDB4ZDg2Y2ZmYzIsCi0JMHg4Njk3MWM5MSwgMHg5ZTA4ZGE5ZiwgMHhiZTcwYTNlZCwgMHhhYmQ2ZGE0NywgMHhkMjNkMDc5NCwgMHgxMzdlM2YxYSwKLQkweDY4ZDM5OWQ1LCAweGE2ZTVjNzNjLCAweDliZmRmMWRkLCAweDMzYThmMDg3LCAweGVmZTg5ZDNmLCAweDFlMDRiMjRhLAotCTB4ZjA5OGExOGIsIDB4MWFhOTE4MzgsIDB4N2ZkYzQ2NjcsIDB4MWM2NmJhN2UsIDB4Nzk0N2I5MjQsIDB4MjM3N2M0NTMsCi0JMHhiZTRjZGViZSwgMHgyYTZiYTE3ZCwgMHgxOGZmNDVjNSwgMHhmZTE3ZDU4NSwgMHhjNmExZmYzMSwgMHgxNjY2NjVlMiwKLQkweGYwZTJjYmM3LCAweDU2OWU5ODFmLCAweGEyMmM4Zjg0LCAweGFmODI1NmY1LCAweDMyYmNlNDhlLCAweDdjYTBlYTljLAotCTB4ZGI5NDQ1NzksIDB4MjViMGIyZjEsIDB4M2Y4ODkwMTAsIDB4MmI4NzhiMTMsIDB4NzA4ZGI4MjEsIDB4YzJkODdmZDAsCi0JMHg5NTVmMjljZiwgMHhjMjA0ZGU1OCwgMHg3MjEyNmRiZiwgMHhiY2U0MjRkZiwgMHhkMWIxZWIwOSwgMHhhODgzZGRmNCwKLQkweGRkNDQxYmM3LCAweDllZDI3OWJkLCAweDM0MDI1NGUzLCAweDkzYmFmZTg4LCAweGU3MjRlY2M3LCAweGNmZmRjMDY1LAotCTB4M2ZmNzIwYjIsIDB4Nzg4Y2ZlODYsIDB4MThmNzY4OTIsIDB4ZmQyNDFlYTksIDB4NDAyZDg2ZDcsIDB4MTcyYzMzZGYsCi0JMHgxYjc5NjdmZSwgMHg0NmU5MWZmYSwgMHgzMjNmZDAzZiwgMHhlZjQ3ZTE5NSwgMHhjNjI3N2NlMiwgMHhmOGNlODZjZiwKLQkweDc4YjIwYmYxLCAweGYyMjgzYTNlLCAweDcxMmNhYWUwLCAweGI2ZjQyMDNlLCAweDRiNTIwMDYyLCAweDlhNjViZTcxLAotCTB4YjdiMDBlZWMsIDB4ZmViNGNjN2EsIDB4NDc4OGE5ODksIDB4NTY4NGZmOWMsIDB4YTI0YmUxOTgsIDB4OGRmZGEzNGYsCi0JMHg3YTBkZWZjOCwgMHhlMThiOWQxNSwgMHgzNWEzYTBmOCwgMHg3ZjdlYjYyZCwgMHhlYmQ3OGIyYiwgMHg5ZDY0NzMzNSwKLQkweGVmNTMxMGY0LCAweDRmY2IyYWFjLCAweDM3N2NlZjVhLCAweDMxYmZjNzBiLCAweGQzZDNjMzY2LCAweGNmMWRlYjYzLAotCTB4ZTNjMjIyOWUsIDB4YmM3ZjczZjcsIDB4ZjE1N2JlODIsIDB4ZDJmZjcxYjcsIDB4NjZmMzgxNTcsIDB4MmMwZWZlNTAsCi0JMHg1OWI3ZjYxZiwgMHhmODk3NTQwMiwgMHgzNzU0NGYxMSwgMHg5MGJjMjEyYywgMHgzYmE1ODZiZCwgMHgyZjU4MmYwOSwKLQkweGFmZjM0OTNjLCAweGRjM2IyYmE2LCAweGM2MTBlYWZmLCAweGY1N2U5YzY5LCAweGZjMzAzZmEyLCAweGY3Y2YxYzlkLAotCTB4OTExYjcyOGQsIDB4ZWEzMDdlYWMsIDB4NzgyZjg2ODYsIDB4NmYzYzZhN2UsIDB4ZmQ1OTQ3MzAsIDB4MTg5NjEwZDAsCi0JMHg1ZThmM2I3ZSwgMHg3ZTQ3Y2JjZiwgMHg5OGZmYmJmYiwgMHg1MGRiMWViNywgMHg5ZGIzOGYxNiwgMHhmNDhiYzE5NSwKLQkweGVkZTdjOTFkLCAweGU4NzlhNGQ2LCAweGI2OTcxZjkwLCAweDUwNjk3YjMxLCAweDNmMmMzOWEyLCAweGUwZjk4NDM5LAotCTB4ZGUzN2FjNmMsIDB4MWJkNTk0ZmUsIDB4MGY2ZDQ3OWQsIDB4Y2FiNDNjYjEsIDB4MzVmMWNlMzcsIDB4NjY4MjZhN2EsCi0JMHhjMzM2Y2Y5NiwgMHg5ZTUyZDYzNiwgMHg2ZGZmOWIxMywgMHg1MmVmZjA3MiwgMHg0ODM4OGEzNiwgMHhlYjg4MTNmNCwKLQkweGY2ZjYzODhkLCAweDgzZmQxYmIyLCAweDA1ZWE2ZmUxLCAweGJlODMzN2FlLCAweGEzNzQ5ZTdkLCAweDc2MTdhODlmLAotCTB4NjdiYTViNTMsIDB4ODk2OGE1M2IsIDB4YjBiZDUwNzksIDB4NTlmY2NjMjcsIDB4ODNjYzRiZGMsIDB4NmJjMDRhZGUsCi0JMHgyYzI5ZGJkMywgMHgyOTNmZWRjZiwgMHgxODRjZTgzYiwgMHg1MWYzZmJlNSwgMHg3ZTYxZWY5NCwgMHgxY2U0OTA1ZiwKLQkweGNmODE1M2Y0LCAweGQ5ZmY3MTVlLCAweGY5MzMyMTU0LCAweGQ2ZjBlNjk5LCAweDhlNTA5YmM4LCAweGE3ZmQzNzBjLAotCTB4Mjc1NDAyZDMsIDB4YTU3ZTFjOTQsIDB4YmI1MDcwODAsIDB4ZGFjNWM3MGYsIDB4YzdkMWVhMWYsIDB4ZjAwYTBmYmUsCi0JMHgyYTYwYTU3MywgMHhmYTMxZDNiYiwgMHg2NTdlMWZmNywgMHhlOWFkZTEzMiwgMHhiODhiMmZlZCwgMHhhOTE3YWU3ZSwKLQkweGNmZTczNzU5LCAweGQ3ODkyNTY4LCAweGQ3ODkyNmJmLCAweGE4ZTY1ZGJmLCAweGZmMmVlYTlkLCAweDg4MWJkOTIxLAotCTB4ZWZhMWFiZDEsIDB4YzA4ZTA0MGYsIDB4OGJmY2ViY2MsIDB4OWJhMzFhNTksIDB4YTYxZjFjYzIsIDB4ZmFlMmRlNmUsCi0JMHg4ZjM5Zjk2YiwgMHhhMWJmZDZjMiwgMHhmMzcxMTJiZiwgMHg4ODBlZjEzNSwgMHg1ZjgwYzQyZiwgMHhmM2Y4NjAxOSwKLQkweDdlMzEzNjlmLCAweDczMDdhN2ZjLCAweDRlYmVlMzYyLCAweGZmMjA4ZWYzLCAweGNjMDc1NGQ3LCAweGY5MDJhNDlmLAotCTB4M2E2N2Y0NWQsIDB4ZGZjYmNiZDUsIDB4ZWE3Y2IxYjMsIDB4MTVhZWMxNzgsIDB4YzgxNTdmY2MsIDB4YjFlYmZlNDAsCi0JMHhjNjI2NmJiNywgMHg1OThkOGJjNiwgMHgyNTRjM2YzMiwgMHgxNjUyZTQzOSwgMHg1ZjVmMGNmMywgMHhkNjE5YTFjOCwKLQkweDhlMDI3Mzg4LCAweGI5MzM4ZmU3LCAweGVhZmFjMTVmLCAweDg5Y2Y2NGNmLCAweGU2YWRkNWY1LCAweDE2ZGQ0ZGM1LAotCTB4ZmY2NDczYTAsIDB4Y2VmYjBiMDUsIDB4NGRlZWYzZTQsIDB4MmY4NzdlYWMsIDB4ZGZjOTEzN2MsIDB4OGQzN2NmODAsCi0JMHg2ZjBlYzdkYSwgMHgzZmNmNDg5YSwgMHgxYTc5YmMzZiwgMHg5YTk0ZjczYiwgMHg0ZTk5ZTJlMywgMHhiZTUyZTVmYywKLQkweGMzNDczNjc0LCAweGIzZWVmYWZlLCAweGZhYjhiYmVjLCAweDRmZjE4NTZlLCAweGNiM2M2Yzc0LCAweGVmZTdlNmM4LAotCTB4ZWM2YzQ3ZmQsIDB4MDI4MjQzN2MsIDB4MWYxODAzOGUsIDB4ZTc1ZDZmMzcsIDB4YThiZjJjZWIsIDB4NTg5ZWM5MGIsCi0JMHg4ZGVmMTgzYywgMHhiMTcxZTZjYiwgMHgyMGUwNWIzMCwgMHg5ZTk4NzkyOCwgMHgxNzViNzgzYiwgMHg1M2YxOTk3YSwKLQkweDFlOTkwNGFiLCAweGRlMTRkYTliLCAweGNjNWJjZWRmLCAweDNhMWYxOTNiLCAweGJmZTI3NGI4LCAweGY5YmZjZTgzLAotCTB4ZTczYjA4YmQsIDB4M2VjYzkxYzAsIDB4MDcxNTI3MDYsIDB4NmJmZDIyNzYsIDB4MWQ3Mjg0N2EsIDB4M2Y4MDk4MGMsCi0JMHhlNGZiYjBiNywgMHgxOTg1MTM5NiwgMHgxM2MxZmI4NCwgMHg4YjI1NjcyZiwgMHgzZGQyNmYxYiwgMHg1NGU1NDIwYSwKLQkweDEyNDNhZjNlLCAweGYzNjUyZmZiLCAweGU3NTM4N2YzLCAweGI1M2IzZmI5LCAweDk5MzEzN2MwLCAweDkyYTFkMzVmLAotCTB4OTA5MmU5ZDcsIDB4MzRiMmE3NzcsIDB4NDVkYzdkZDksIDB4MzFiZWRmMzEsIDB4NGZkYTI5ZmEsIDB4ZGQ4ZDg3NmYsCi0JMHhmOTNhZjVjNywgMHgwM2MyZWE3OSwgMHgxNDk5Y2QyNywgMHg5OWE1M2I3ZiwgMHgyNzZhNDcxNCwgMHhiZTg4YmJiZCwKLQkweDljYmE0MDAzLCAweGU0NmQ1YWZjLCAweGFjNzdiYjEwLCAweGVjNThlYjZmLCAweDQ3NDdjMjQ5LCAweDMyZGZjNzM2LAotCTB4ZTY3ZGY5MzUsIDB4M2JmZjQ0YjcsIDB4NzUxNmNlZTAsIDB4YWUxMzJlZDQsIDB4YzUwYWNlZjcsIDB4MWRlNTkzYjEsCi0JMHhlODkxYjQ5ZSwgMHg3ZTEyZWY4NywgMHgwYTk1ZWVmOCwgMHgwMWRlNTNjYiwgMHgxNmY3ZTE0ZCwgMHg5NTYxN2VmYywKLQkweDA5NzdiM2YwLCAweDIyYWFiY2ZmLCAweDU3YmUzZmI5LCAweDM5ZmFiM2NjLCAweDE3ZWU5Mjc4LCAweGM3ZTI3YjU2LAotCTB4YmRmMjJiZGQsIDB4ZjM2MWUwMzUsIDB4YTEzNGJkZGYsIDB4Zjc3ZGU0NWYsIDB4YzFmMjEzN2EsIDB4OGI4N2UxNmMsCi0JMHg3MGZjODhhMCwgMHhlOTAzZTMxMCwgMHhjNmQ4YjFiZCwgMHgyOWYyZWNlMiwgMHgwOWU2OTIxMywgMHhkMmZmZDFjNywKLQkweGM0MjcwM2Y3LCAweGZlODYwNDc3LCAweDY1ZGY4YTliLCAweDkxZDRlYmYxLCAweDk5MzkyZmYzLCAweDQxNDFiNmZmLAotCTB4ZTFiMWZiOTIsIDB4ZmRkODY1ZjgsIDB4ZTJlZjVjM2QsIDB4YzFkZWExYmUsIDB4N2ZmNDM0NzksIDB4ZDhhMzJiMTUsCi0JMHhmZjQzMmQ3MywgMHg3ZjczNjc0ZiwgMHhiNmNmYmI1OSwgMHhiMGJlZjYyNSwgMHhhMzhjZTgzZSwgMHg1YjkxYTFmZCwKLQkweGZiZjhjNTJlLCAweDhjNzM4MTVhLCAweDczZDhlNjAxLCAweGRmNjQxNzkwLCAweGY0ZDlkOWQzLCAweGNiMmY2YjNkLAotCTB4MmMwNzcxYWYsIDB4ZjJiZWUxN2UsIDB4MmNmMmJlYzQsIDB4ZWFlOTcxMzEsIDB4NzE0OWY1YzgsIDB4OTczZmJjM2MsCi0JMHgxNjdmZmRjZSwgMHg1YjE0OGY2YiwgMHgwN2Q1ZmQ5OCwgMHg2YmRkMDBhNSwgMHgzZGI4NDdkNSwgMHhiMTIzZGZkNiwKLQkweGNlYTJjMjczLCAweDg1N2JlYzIzLCAweGI3MjQ4YmI1LCAweDMzYjFiYjg3LCAweGEzODE5ZmM0LCAweGNmMWU1NjU1LAotCTB4YzkwY2JjMGQsIDB4ZmE4OGUwNGIsIDB4MjVkZmJlMjksIDB4OWUyMjdiZTIsIDB4NjJjZjQyMjYsIDB4OGYzZWZmOWEsCi0JMHhlY2VmYTZlNCwgMHg3NWEzOGE2ZSwgMHgzMGE3NWZkMywgMHgyMTFjMzM3NCwgMHg5YmYyMTUyZSwgMHgyNGZhNzg4OSwKLQkweGYyNDlkN2RiLCAweGVkNzFmYWMzLCAweDU0ZmY5YzE0LCAweDg0NzljN2YxLCAweGQ4OWI4NjlmLCAweDFkODU2ZmQxLAotCTB4NGZkMzRiZWQsIDB4M2JhZmZjNTEsIDB4MGZkNWVlMjAsIDB4MjRhMjg3MTQsIDB4ZjJjMDEzOTcsIDB4Y2Y2NzVlYzAsCi0JMHgxZjllNDZmNiwgMHhmYWY1N2JiMywgMHgwZjdkOGQ4OCwgMHg3NTRlMWY1OCwgMHg2Y2VlODhkYiwgMHg3NTRjOTk0YSwKLQkweGE3NzY1ODY0LCAweGYzYTJiZDIyLCAweGRmYWEyMmY0LCAweGVmZjM5NDU3LCAweDAxZDQxYTNjLCAweDNhYjY4Nzk2LAotCTB4YmY4OTI3N2QsIDB4YjhhNmVlOTUsIDB4Y2Y4Mzc0ZmIsIDB4ZDEzZGUxOWIsIDB4ZTEyNDVkY2YsIDB4ZmNmNWZmNjQsCi0JMHg5NzIxNDVjZiwgMHg3MmQ3OTNjNiwgMHg5ZDdlMTMyNiwgMHg1MzY1ZGZiZSwgMHg0NWZkNzkzYywgMHhmY2Y2YWU5NSwKLQkweDljNTk1ZjkzLCAweDhkMzhkMWE5LCAweDc2ZDk1YjhkLCAweGUzMWQxYjY0LCAweGNmNGZmYzFhLCAweDRlZmUzMDc2LAotCTB4MmMzMTgxMjksIDB4YjViZDJjYmYsIDB4MGU5YTRiZWYsIDB4ZjI5NTMxYmQsIDB4MjcyM2JlZTksIDB4MzgzMWFhYTcsCi0JMHg3ZjQ0NmRlZiwgMHg0ZDdmNDQ5ZCwgMHg2YmY2MTI2MCwgMHhhZDI0YWQ2NiwgMHhiNzBlZjkxMSwgMHhiMWY3N2Y2NywKLQkweGU4NWYzYTFjLCAweGE1MmUzYjI1LCAweGUyOWRhY2Y2LCAweDNiYzc3ZDY0LCAweDc3OTQwOWY2LCAweDk4ZDZmMTc0LAotCTB4NjY1ODZhZWYsIDB4MmQxY2MwZTMsIDB4OTYzZDM3YmEsIDB4N2YxOTI3YmYsIDB4MWU3YzgzNTcsIDB4ZGRkMTY4ODAsCi0JMHg1YmZiNjI1MywgMHg0MGZkYWZmZSwgMHgwM2YzMGU3YSwgMHg2MDNmMzhkMSwgMHg3YmFiMDljOCwgMHg4Nzk5ZDU5ZCwKLQkweDllOWVlYzJkLCAweGJmNjI1YmVlLCAweGUxY2UyYWNmLCAweDE2MzY2OTdlLCAweDczYWY2NDNkLCAweDkwYjk5ZWU4LAotCTB4M2MzMzMzNTIsIDB4MjIxOWI0NDAsIDB4MDdkZDE3NjYsIDB4ZGRmZTY0NDcsIDB4ZTdlNjE4ZGEsIDB4NjdmNTg5NjcsCi0JMHhlODQ3MjM5YiwgMHhlMjM5Y2RiYiwgMHhmNDJlNzI3ZSwgMHhjM2I3NzFiMCwgMHhlMDNkNmIwMCwgMHgwOTViNTMzMCwKLQkweDU4NTZkNjZlLCAweDZjYTljYjIzLCAweDY1MDYwZDJmLCAweGM3MjQ3ZmQyLCAweGU1NmNiY2VjLCAweDRjOTBmMmJmLAotCTB4MzM3MmMzZGYsIDB4MWU0MzY1YzMsIDB4ZjE2M2RkMzIsIDB4ZjcxMmZmZWYsIDB4ZjFjMzk5NTMsIDB4ZmRjM2RiMzgsCi0JMHhmNDE2YTUwZiwgMHgwNDA1NjZkZCwgMHg2ZGY5ZmRkOSwgMHhlOGY3MTUxMCwgMHgwZjMxZjdjOSwgMHgzN2JhMzdlYiwKLQkweDk5ZDMwZGJiLCAweDAwOGYyNjE0LCAweGY2OWYzZjFiLCAweDRmZGIyNzIzLCAweDMzNTMzOTc0LCAweDdmMTA3MjJjLAotCTB4ZjRjNzI0NTIsIDB4ZWZhZGVhNTUsIDB4ZDgwNzNmYTMsIDB4MDMwZGY2YmMsIDB4MGY5NzhmN2QsIDB4YzNiYTNiZGYsCi0JMHhkZjQ3YmM2ZiwgMHgwZjFlNGE5OSwgMHg2ZGQ1MGVmYiwgMHgxZDUwOGI0ZCwgMHgxZGU4ZGE4MywgMHhlODA1NjNmMiwKLQkweDU2YWE3MzM3LCAweGZlMWNjY2U2LCAweGMwN2MxZjllLCAweGZjNDhjZmJlLCAweDdiYjY5ZjllLCAweGJiZjg2NzI1LAotCTB4ZDI3YmUzMmYsIDB4OWEzNTgxN2QsIDB4MmViMWYxMDksIDB4MTE5NmVhY2IsIDB4YmNkNjY1MWYsIDB4NjU3YmVjMTksCi0JMHhlMTI1NmZhNywgMHgzNmQ0ODJlYSwgMHgwZTYyNGQ4MSwgMHhhODc5NjRjYywgMHg3ODJhNTVjMCwgMHg5MmZmNjgyYSwKLQkweDAyN2RmOGM3LCAweGM1ZDE3ODYwLCAweDAzOWViN2Y5LCAweDUyMzhmN2VjLCAweDJiZjdmYzJkLCAweGFkMGUyMTc2LAotCTB4OGQ3ZTg2MmUsIDB4Mjc4NThmYmUsIDB4ZWY5NDZhMTYsIDB4ZGQ1YTc3NmUsIDB4ODg1OWNmOTQsIDB4N2U2MWQ0ZGYsCi0JMHgzYmZjYWM1YiwgMHg1ZTZiMTY4YSwgMHhmMWI4ZmM4MCwgMHgzY2EyNTg1ZCwgMHgzZDE2NTA1YiwgMHg1NmRkMGVjYywKLQkweGZjMjcyZjk2LCAweGM1OWI0N2ZlLCAweGNmOTIyZGY3LCAweDQ3MmJkM2I3LCAweGYyNWMxZTUwLCAweDJjYjlmOWFiLAotCTB4Y2M3OTQ3MmYsIDB4YmE2MWU0MzcsIDB4NzAyOGY3ZjEsIDB4ZmRhMWRmZmYsIDB4ODJmZWZlMjcsIDB4MDQ1NDZmYjEsCi0JMHhjODQzOGYwMywgMHg4MzgzOTBkMywgMHhjNzcxNDRmNCwgMHhmNDMyN2E4MywgMHg5ZjJjMzA1YywgMHgwZTVjMjk1ZCwKLQkweDUyNDE3ZDBhLCAweGM4ZDVkZWM4LCAweDZmZjcxMzVlLCAweDAxYmZlZmVjLCAweDhmMWEzZWMzLCAweDAwMDAzNDMwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHg3OTkzMzMxZSwKKwkweDBmMjBmMjY0LCAweDAwODRmMTAyLCAweDAyMTg0MmEyLCAweDI3MDg4Nzg0LCAweDAxYThjNDIxLCAweDU0YmM4MDgzLAorCTB4NDg0MzNjMjYsIDB4YmZhODExMzIsIDB4MjY3N2JkNmQsIDB4YjVhZDExMDQsIDB4YmMxYjY5NTEsIDB4MTQxMDFkZTgsCisJMHhkMWEwNzUxNSwgMHg0MGU4MWMwNiwgMHhkYmRhYjExNCwgMHhkNWE4ZjhhOCwgMHg0MDQ0NTA3NiwgMHg4YmNiYzI0OCwKKwkweGFmN2ZkNTJkLCAweGU2NDljZmI1LCAweGQ0NDg0YzljLCAweGZmZmZiZmY2LCAweGRiZjNmMWZkLCAweGQ5Y2ZiM2VjLAorCTB4ZGFmNWVkN2IsIDB4ZjZiZGFkNmIsIDB4OWEzMmMxMWUsIDB4ZTQyMjRlMjQsIDB4NjVhM2Y4NWIsIDB4ZjQ4NDI3ODQsCisJMHgwYWRiMmNlOSwgMHg2NDkxOGZkYSwgMHg4YjJmZmM0MiwgMHgxMDhlMzZmMiwgMHhmMDhlNzdlZSwgMHhiYzg0NTFhNCwKKwkweDk4MGI5OWI1LCAweGNmYmMzZDY5LCAweDlmYWQwODQ2LCAweDYwM2QzNGRlLCAweGZmNjQyMmNlLCAweGVmMDJiMzA4LAorCTB4OGY5YWRlOWYsIDB4YmQyZmM5ZjUsIDB4N2I2ODE0ZTcsIDB4MDBiYzRiZDUsIDB4MTNiZWQzNzUsIDB4MTA5ZDg4Y2UsCisJMHhhMWU1YjlhZiwgMHhmNmYzZTk2YiwgMHg4NWIyNzg5NywgMHg5M2ZjNDUwZSwgMHg5MDg1MjQ0ZCwgMHhmZWMyMTY2MywKKwkweDUyZmFiMjJlLCAweDZkNTZhYjJiLCAweGY0MDc3ZmRlLCAweDI2NjRkZTViLCAweGQ1NGZkYTU2LCAweGFlZDM2NWVlLAorCTB4ODc2NWY1YTUsIDB4NTRhZjAyNDQsIDB4ZmE5NWFiNmQsIDB4MDBmMmZhZDIsIDB4OWFmYTg0MTcsIDB4NzFjNjdmN2QsCisJMHg3OTQ4MGFkYSwgMHgyNzIxMjg3MCwgMHg1ZjIyMTY3ZCwgMHg5NmNlZWI0OSwgMHg3OWY0NTk5NCwgMHgxMTY3NjA0NSwKKwkweDgzYjE1ZmJjLCAweGZiZTg5YjczLCAweDdmZjY5YjE1LCAweDM0NTdmZDBjLCAweGRhNzkwMzhhLCAweDM2ZWQ4YWZmLAorCTB4NjM2MTBmMjIsIDB4MWU2MDRiN2YsIDB4YmMwMWE2NGIsIDB4YzQ4ODZmNTUsIDB4OTdlNWViNGMsIDB4NzAwNDQ5NTYsCisJMHhhNTRiZDQyNCwgMHg2MWZmMTgwZSwgMHgzOGMwNzY0OSwgMHgwZDFjNzA4NywgMHhkMGNmNTU5ZiwgMHhkNTc3ZTg3MSwKKwkweDk4NmU3MDJmLCAweDc4ODliNTVhLCAweGRkZDY5ZTAwLCAweGRhNGYzOWQ2LCAweGQyYjU1ZTYxLCAweGY3N2VmODYwLAorCTB4YjdiYzEyN2QsIDB4YjJmNjUwMmMsIDB4MzZmODA2NTUsIDB4ZTcwMDQ1NGIsIDB4ZDJkMmNkYTYsIDB4YWRmZDlkYTEsCisJMHgwZWE2ZmVkOCwgMHhkOTBkNjNhZSwgMHg3NmE4OWVhOSwgMHg0N2QyNzk2MywgMHhhY2VlNmM4OCwgMHgwNGEyMTA1NywKKwkweDQwNzcwMGVkLCAweGYzYWMzZTlhLCAweDgxMmU3OWY5LCAweDNmZDBkMTkwLCAweDY3NGI2NDRmLCAweGM4MzA5NGZmLAorCTB4ZThmN2ZlMDcsIDB4ZjYwZjgxM2YsIDB4YjJkYjAyM2EsIDB4ZDJiNWU5M2EsIDB4NzcyZGZmNDUsIDB4NGJhY2ViZDIsCisJMHg5ZWQwOWZhNSwgMHg1NmJmZGQxNywgMHhhMDc0MDQzZSwgMHg1Y2ZiZDRmMCwgMHg0YmUyM2U1OCwgMHg0ZjgzNzJjMywKKwkweGNhZmRiYzQ2LCAweDA2Y2IwNDM3LCAweDNmOWYxYjlmLCAweGU1OGIxYmU2LCAweGU1ODI5ZjI2LCAweDJjNjJiZTEzLAorCTB4N2M1MmJlMDMsIDB4MGU2ZjhiNmYsIDB4MWU3ZDViOTYsIDB4YWY5NGZlN2MsIDB4YmVlZGNiMWMsIDB4YWNmZTdjMWEsCisJMHg3NzJjNmVlZiwgMHhmY2Y4ZmNmOCwgMHgyYzdhZGYwNSwgMHgyYzdhYmU4MywgMHhiMDFhZjk3NywgMHhmMDA1ZjQ2YywKKwkweGRiN2Q5N2JkLCAweDA1ZjI2Y2IxLCAweDVmMWVmOWYxLCAweDVmMjE5NjEzLCAweDQwN2RjYjE4LCAweDdkODY1YTVmLAorCTB4ZjAxZTU4MmQsIDB4YWJlNTg4N2QsIDB4Nzc3ZTA4YmUsIDB4Y2IxYzc3ZDAsIDB4M2JiYzU1MDcsIDB4ODE3YzkwMjcsCisJMHgxMGE5Y2RlMiwgMHg5MjE3MTUxNywgMHg4YmU0YTI1OCwgMHhjYTU4OWViNCwgMHhmOWI3MjllYSwgMHg0ZjVhMjVmMywKKwkweGM1M2FkMGYxLCAweDcwY2FkZjYzLCAweGZiZDY5OWJlLCAweGNjZjZiMGQ2LCAweDg1ODE0ODdiLCAweGFjZmQzM2Q2LAorCTB4NGE4M2MwN2QsIDB4MDdkNjk1ODEsIDB4YzFmNmIzZDQsIDB4NzEwNWZjOWIsIDB4YzAzODNlYjQsIDB4MTFkZWFmZGEsCisJMHhmYWQxYjAyZSwgMHg5ZWQ2NDFkNSwgMHhlZDkzMjIxMywgMHg2NjEzOWViNCwgMHg5NGI3ZGNmNSwgMHhjZjVhMGVjOSwKKwkweGJjZjU2MTZkLCAweDlkOTNmZDhmLCAweDYxMTc5ZWI0LCAweDE1M2Y4ZmRmLCAweGViNGYxYzllLCAweGZiNTlkYmUzLAorCTB4ZDBhNDRiYzQsIDB4MDkxM2ViNDUsIDB4N2IwMmY1ODcsIDB4YWQwMjYxN2UsIDB4YmQ1OGI4MTcsIDB4MjA5OTVmYTgsCisJMHg3ZGJmZTBjNywgMHhhMTExNjQ2MiwgMHg3ZmRkYjBiYywgMHhkM2E0MjJiMywgMHg0NTU5MTRiYSwgMHhmZTlmMTRkYywKKwkweDhiMGY1ODM5LCAweGJmYjQzMTY0LCAweDg0NTMyZmU1LCAweDkxMmViNDcxLCAweDE3ZmVkMGQ1LCAweDFmYjYwNTdmLAorCTB4NmY2YzY1MTAsIDB4ZjZjMmFmZjcsIDB4ZWQ4YzkyMDMsIDB4YjA3YmRhYTYsIDB4NjBhOGFhZmUsIDB4YmRlZDcyN2IsCisJMHg5MmFiZmVmOCwgMHg2YjgzZWQ4MiwgMHg0MWZhYzIxZiwgMHg2M2VkODNkMSwgMHhlZjhkN2Y2YiwgMHhkODNjOTQxZiwKKwkweDgwZGFjOGZlLCAweGZmZWI0ODUyLCAweDAwYjY3OWMxLCAweDllNzFkNzVmLCAweGZjMGQ5MjcyLCAweGE1MmI0YzFhLAorCTB4MjM4ZWJhZmMsIDB4MWUzZTQwNzMsIDB4ZjJhNmE2MDAsIDB4NTI1ZDJlYjAsIDB4ZmJlZGJmNDAsIDB4M2M5M2RlNDcsCisJMHgzMjc2ZjJhNywgMHhmNTNlOTdkNCwgMHhmM2Y2MTY0MCwgMHhkMjIzZjYxYywgMHhmYjllZjg3ZSwgMHg1OGNkZjg5OSwKKwkweGJmMTMzZjVkLCAweDY5ZmFkNzI5LCAweGFjZWFmNzg0LCAweGRmNjdlYmJkLCAweGYwZjVlMzM3LCAweGY1YTE1MzdjLAorCTB4NzFmYjE3YjMsIDB4MTM1ZTZlZjQsIDB4ODdhMDlkYmYsIDB4YWQ0YWRiZTcsIDB4NGZkODgzOWYsIDB4MDllMGVmNDIsCisJMHhmZDc0NjM4YiwgMHg1YTY1YzU4NCwgMHg3ZWM0N2YzZiwgMHgxZTBlZjRmYSwgMHhlYmE3MWE0NSwgMHg2Yjk2OTE0NywKKwkweGZkODg3Y2ZkLCAweDlmYWVmN2E0LCAweDFlYWQ3NGIwLCAweGQ2ODU2OTFlLCAweGE3ZWMxMWNmLCAweGE1ZTZlZjdmLAorCTB4YzNkM2FmOTgsIDB4ZmFkMmFlNjMsIDB4Y2Y3NDg5MzksIDB4MDczZjVkZWEsIDB4MWNmYzdhMWMsIDB4ZTdlMDc0NzAsCisJMHhhODMzYzIxYywgMHg3MDJhZjM3NywgMHhlMDUzZjFlYSwgMHgyNWNmYzBlYywgMHhkZWFhZTdlYywgMHhhOWMwNzNmNSwKKwkweDY3MDFjZmM3LCAweDBlNDQ3ZTA3LCAweDc3YWMzNWU2LCAweGQ3ODgyYWYzLCAweGJlMjBhN2UzLCAweDBlNGUzZjAzLAorCTB4M2JkMTE5ZTAsIDB4YTNlZDVlNzgsIDB4N2RhYmNmYzcsIDB4OGE5M2YwM2EsIDB4MWRlZThjZjAsIDB4N2EyOTg1M2MsCisJMHg3NGE2MTRmYywgMHg3ODQ2NDdlMCwgMHg5ZmFlZjVjNiwgMHhmOGY0NTM1NywgMHgwM2E1MzU3OSwgMHgzZjYxNTczZiwKKwkweDVlNmVmNWQ3LCAweGZjN2FhOTg1LCAweGUwNzZhNjE0LCAweGM5ZmIxNzI3LCAweDc4NDc2Y2Y3LCAweGQxYzdlZDA4LAorCTB4ZmIwNzNmN2QsIDB4YjA3M2YxZWIsIDB4YWU3ZTA3N2YsIDB4ZDBhNjdlYzUsIDB4ZWU3YmIyN2UsIDB4OGY1MzI4YTcsCisJMHgwZWNjYTI5ZiwgMHg5ZTIyMTRmYywgMHgzZjVkZTg2ZiwgMHhmOGY1MzMwNywgMHg4MWQ5OTgzOSwgMHhjZmQ4YTk5ZiwKKwkweGFiY2RkZWQ0LCAweDdlM2QwYWU4LCAweGY4NjBhZThhLCAweGMwOGMyNDk5LCAweDlkYWU4Njc1LCAweDcyN2U5ZTZlLAorCTB4ODU3Y2JmN2QsIDB4MmVmM2VmYTMsIDB4NmU1ZGU3NTYsIDB4YWYwZjc2MDIsIDB4NDVhNDMzZDksIDB4ZjZmYmU5ZTEsCisJMHgwZmI5MDkxZCwgMHhhNmJiNjg5MCwgMHg4ZmMwNzZlMCwgMHhkMTc5NWE4MywgMHhkOGZjNGQ3NiwgMHg5NTFkOWQzOCwKKwkweGVhZWEyNGEwLCAweDc1N2RjNTQ5LCAweDFkMjlmN2VmLCAweDlkNGY2YmEwLCAweDNkYWViNTczLCAweGFiYWI5M2RkLAorCTB4ZDc4Zjk0NjcsIDB4YTZiZmRmYmQsIDB4ZTJiZjU3NDAsIDB4ZWY3NTFiZWUsIDB4ZDE2ZmY5NjcsIDB4Y2ZkN2IzZDUsCisJMHhhODNmYmRkMywgMHhmZGFlYTE3ZSwgMHg1ZDBhODZjYSwgMHg5NTgxNTVmYiwgMHhkYjM1ZmFiYSwgMHg3ZjdiYTI3ZiwKKwkweGFlOGQ3MDU4LCAweDAzZDM3ODdkLCAweGUxMTFmNmJhLCAweDkxZjU3NDQ3LCAweGJkZDMxZTg3LCAweDhiNjViYTNmLAorCTB4ODdjYzdkYWUsIDB4YzdkYWVhY2YsIDB4ZWFlOTc2NDUsIDB4YTNkZjFlZDcsIDB4ZjZiYWZmN2IsIDB4YTRmYWJhMDMsCisJMHhiZGQ3YmY4YiwgMHhkNWRlNGY5ZiwgMHgzZjk2ZGJkYiwgMHhlMjlmZGVlYiwgMHg3ZWQ3NGNmYSwgMHgwNjk3ZGE3ZCwKKwkweDNhZWVkNTNiLCAweGU3NWE4ZDc2LCAweGZhMDhhZTQxLCAweDA5NzRmZTI1LCAweDQzYjBkNWVkLCAweGQ3ZDRiYWMyLAorCTB4YzcxNGZjY2UsIDB4ZTUyOGY5NTIsIDB4MjJjMGU5MWYsIDB4OTJmOTE5MzksIDB4MjFiYjUxZmUsIDB4OTVmOTZmYmYsCisJMHhhZWZjZmExMSwgMHg1ZDJiOWVmMSwgMHg5MjVkZjlmNCwgMHg4NjJiYjg2NywgMHg4ZGY5NDM3ZCwgMHhjYTUwNjkyMywKKwkweGVkOGQyODI2LCAweGRmOGM4OWY3LCAweDBkMmUzMjBiLCAweGY3YmY0MjNlLCAweDI3MDdkYTlhLCAweDNlNzBmYWQwLAorCTB4ZjFmMjA4M2YsIDB4YmI0MjY3MzIsIDB4MzUyNzhlM2EsIDB4OTk5YzVlZjAsIDB4NWY3NGRmYTAsIDB4ZmU5M2RlNTYsCisJMHhkZjU4NzkyOCwgMHg1YzE5ZGE5ZiwgMHg0NWViYmY2NywgMHg1MWRhMWE0ZiwgMHhjMWY4OWZiNSwgMHg5ZmQ3NTljZSwKKwkweDIxMmZhYmNlLCAweDg0OWY3MGFmLCAweGY3ZTkwM2ZkLCAweDc5YTY5N2ZkLCAweDg5NjY3ZjY4LCAweGUzZDExOWZhLAorCTB4YTFmYzc0NGIsIDB4ZTQxODdlMzgsIDB4M2Y4YzIwZTEsIDB4ZTZmOGViYmEsIDB4ZTM3NTYzMDEsIDB4NzVjYjMyNWIsCisJMHgzYTI0NWJlMywgMHhkZjkwOGJiZSwgMHg4ZWFlN2VkNywgMHg5ZTMwODk0ZiwgMHhjZmI5Mzc5MCwgMHg2NjczN2M3MSwKKwkweDlmN2Y4ZTM5LCAweGU4YWVmZDQ0LCAweGM2M2FlM2YxLCAweGJmZjk4MTZmLCAweDA3ZmNkZGRmLCAweDNmY2ZkNzhjLAorCTB4N2YzZjQyYjMsIDB4YTNmZmNkODksIDB4ZjhlYWQzZGEsIDB4M2ZmZjM4NzEsIDB4ZmNkOWE3NzMsIDB4ZmNkODJiMzMsCisJMHg4ZWRmYWNjZCwgMHhmODFkOWRmMSwgMHhjN2Y4YzA4ZiwgMHg5Y2RmMTliYSwgMHhmZjNmNDEzZCwgMHhmM2Y1MmEyYiwKKwkweDRmZjFiMzM3LCAweGM3NTA1ZWQ2LCAweDVmZjhlM2I3LCAweGZjZDgxNzcyLCAweGYxYzRhOGFmLCAweDBkYzdiMzI1LAorCTB4YzQ2NTIzZmMsIDB4ZjhlODA0ZDUsIDB4N2M1NTFmYTQsIDB4NzQyZWMwYTksIDB4MjQ4NzI4MWMsIDB4NjQyMWExNTIsCisJMHhlMTAwMzcxYiwgMHhmMThlMmJiOCwgMHg5NDcxNTdkYiwgMHhmOTlmNTBkZiwgMHg1MDA5MzlmMSwgMHhmZDQ3OTljZCwKKwkweDU3ZDc5NTQ2LCAweDQwOTdjOGVjLCAweGY1M2I2MWVmLCAweGEwYTg5NmI3LCAweDkxZTI2ZTJlLCAweDczMDZjOWJmLAorCTB4Yjc4NTEwNjAsIDB4NDNmNzg5YjUsIDB4ZWI4NmYxN2QsIDB4YmQ1ZmEwMDIsIDB4MTRhMGIyNjYsIDB4MTg0ODEzYmUsCisJMHhjYmZlN2Y5ZSwgMHhlN2EyNWI2MSwgMHhkNDk3MmM2NSwgMHg1MTIyYzc4YiwgMHgwN2UxZDZmMiwgMHgzNTIxOTAxNiwKKwkweGMwMjliZTE0LCAweGViM2JhMzA0LCAweDBlM2Y1MjlmLCAweGE5OGZlMzFjLCAweGZmYTg0M2RmLCAweGM2Yzg5OWYzLAorCTB4ZjdmNTBiZmIsIDB4ZmVhMTFlYTAsIDB4YTRjZTNhMWUsIDB4ZGRhM2JmMTYsIDB4ZjBhMzRlMWQsIDB4N2ZmMGFhOTcsCisJMHhmZDc5MzAyYSwgMHhlMDJlMzZmNCwgMHhkNWY5ZjJhNywgMHg3ZmEwNDc4ZiwgMHgxYjZlZTBiZCwgMHgxYzI3N2E0NSwKKwkweDVkMjRmZTY1LCAweDBmY2JjZTlkLCAweDZkZGY2YTc0LCAweDEwZTE2YzBlLCAweDZiZTAzMmJmLCAweDIxMjY4YTNhLAorCTB4NTA2N2Q2OGIsIDB4ZmZiZTc3NWMsIDB4MDdhOWJlYzEsIDB4YjcyMTI3MzksIDB4YTU0YzQ1MTIsIDB4OWFiZWRmZWYsCisJMHhlM2EyZWZlYiwgMHhiOWNjNTJjZSwgMHgzMjUyMWQ2YywgMHgyNGQ3Mjg0YywgMHg5MDk2MzRjMywgMHg4ODQ3MWE1YiwKKwkweDVkMzIwN2I0LCAweDQ0OGQzZjExLCAweDU4YTMzYjhkLCAweGFhNTU5ZjVmLCAweDhhOGFiN2FmLCAweGI1NzBhMjY4LAorCTB4NjZjOGU3NGUsIDB4MzllY2VmZGEsIDB4OWM2ZDc2ZmEsIDB4NDY0NGE2ODEsIDB4NTJiYzc1NjcsIDB4ZmE3NDkzOGEsCisJMHhiOTk0MzY2OCwgMHg3NDg1ZDhmMCwgMHhkZjYyZTM5ZSwgMHgxNzc4ZjA2YSwgMHg3ZThjMjQ4OSwgMHgwMTBmYmZiYywKKwkweGYxOTNmYWJhLCAweDM2MmU3OWJkLCAweDczYmMyMzZmLCAweDRhNTI4YjQ0LCAweDhjYTczOWU3LCAweDFiN2YwMDBmLAorCTB4OWY2OGZmZTEsIDB4ZDBlNTMxNGQsIDB4MjJhM2ZkNzIsIDB4OGY5ZDc1MzEsIDB4MWViOWZlMTEsIDB4MjI4MjdjZTMsCisJMHhjYmYzZjNhYywgMHhkZjE5Y2Y4ZCwgMHhmZmU5NTMxYywgMHgyZDA3ZjAyOSwgMHhhMGZlMDBiZiwgMHhmOTU1MWZmMCwKKwkweDMyYWY1M2EzLCAweDNkOWFmMGZlLCAweGRhMWY4MGQzLCAweGU5MDRmMjM3LCAweGFkY2JmMmFhLCAweGE5MmNiZjJhLAorCTB4MjEwNWYzZDcsIDB4YjhlODExMWUsIDB4ZmI5NzBlNmMsIDB4Y2MxZjE0NDAsIDB4NTk2MGY5NTYsIDB4NmU2ZjllODMsCisJMHgzZDMxN2UyNywgMHg2ZWU2NWQwNiwgMHg5YTZmN2NkOCwgMHg5ZjdlNzVkYywgMHhmZjMzN2NhOCwgMHg5Zjg4ZmRjMSwKKwkweDc0NjRmM2FlLCAweGQzYTU0M2JhLCAweGY2ZmEzNWVkLCAweGRlYmE1NTViLCAweDRlNzVkMmFlLCAweDUxYWZjM2MzLAorCTB4YzllNjQxZjUsIDB4ZGRlNDExMDEsIDB4OWU4ZDUzZmIsIDB4M2QzZDFkMTEsIDB4NzA4ZDNkMmEsIDB4ZjNkMmExZGUsCisJMHg3YTMzMWY4ZSwgMHhhODhkZTExYSwgMHg5YzM0OGNmNCwgMHhhZTgwYzkxMywgMHg1YmUxMWFmMCwgMHhmOTk3Nzc3MCwKKwkweGNjYWI1YzYwLCAweGRlOWU5YjFmLCAweDQ3NTVmY2E2LCAweDA1NTc5ZWEzLCAweDM0NzU1ODZmLCAweDZjNTZjZTRhLAorCTB4MmZhYmFlOWYsIDB4YmRkNWNjMGYsIDB4NGNhMWFjYmYsIDB4N2VhNGJlZDcsIDB4ZDE3ZGFlYjksIDB4ZjU3NTNiZmEsCisJMHg3NThmZmYzMiwgMHhiYmI4MmZlZiwgMHg3YjdlZDc1NiwgMHhmNmJhZmRjZCwgMHhlYjBmZTVmOSwgMHgxYjNkNzNlYSwKKwkweDllY2ZlZjc1LCAweDNlZDc1OWIzLCAweDVkMTlmNGFiLCAweDlkZTI4Y2ZiLCAweDY1NzRmYWJhLCAweGQzN2RlZWI3LAorCTB4MDY2ZWFiYmUsIDB4M2RlYjdjZmUsIDB4NzEzZDgwOWUsIDB4YzYwNWZkYzEsIDB4NDViODJmMzMsIDB4ZDQ3M2JjMzcsCisJMHgxZjVmMjMyNywgMHhmMmMxMGRmMywgMHg3YzhkY2ZiOCwgMHgxNjM3ZDI3ZiwgMHg2NmE2ZDZjYiwgMHg3NDEzYWMzYiwKKwkweDEyNGE1YzVkLCAweGNkMzI2OTA4LCAweDBmZGY1ZGFiLCAweGViODI2OWQ2LCAweGE5ZTRjODY5LCAweGIzN2FkM2Y1LAorCTB4Mjg3OTQ2NDksIDB4Nzg0ODkwNjksIDB4MmMxYzIxMjQsIDB4ZWQxYzJhMzYsIDB4YTQ3YjU0N2MsIDB4YWEwNmY2ODcsCisJMHhiNmJhOTNmOCwgMHgzZjYyNDQ5NywgMHg3NjUyM2VmNywgMHg3NzY1ZjAwNSwgMHhjYmZkMDNlYiwgMHg0ZGE3YmIwMCwKKwkweGVkOGRlYmI1LCAweDhkMjkxYzk1LCAweDFhYzg0ZTdlLCAweDYyNmFjMzg0LCAweGM0YTU0Nzc2LCAweDU3NzJiZmU0LAorCTB4NDI3MTAxN2EsIDB4ZTZiODNjM2QsIDB4MjkwNWUzNzIsIDB4OWYwMmE3OTMsIDB4NzhlNGViNjQsIDB4M2EzNWMzNTksCisJMHg5YTIwNGVmZCwgMHg2ZGY4MDdkYywgMHg4YWY5ZWVhNCwgMHhiZWVhZDdlZCwgMHg0NzlmYjUzYiwgMHg1NzQxYWJiOCwKKwkweGIxNjU4MzhjLCAweGU4MTMzM2Y0LCAweGU2NzM3MGUxLCAweGE3MDA2MThjLCAweDRkZWIxNDcyLCAweDNjMmVkMDdkLAorCTB4NzU1ZTJiZTUsIDB4YWZkMDEwNzQsIDB4YmVlM2NiMTQsIDB4ZjMxZTU4MzksIDB4ZWEzY2IwNzksIDB4NTNmMmM3MmIsCisJMHgxMTk2MGQ1ZiwgMHhmZTU4ZGRkZiwgMHhmMmM3ZTdjNSwgMHgyYzdhZGY2MywgMHg2M2Q1ZjIzZiwgMHgwMWFmYTFmOSwKKwkweDAxN2RmN2NiLCAweGI2ZmIwZjJjLCAweDJmOGVmOTYzLCAweGFmOGI2NTg4LCAweDlmNTZjYjA5LCAweDc3MjZhNTgyLAorCTB4NzFkZGYxM2QsIDB4MDkzZTFkNzUsIDB4Y2Y4MzE3ZmMsIDB4ZWQ3ZjNhYTQsIDB4N2M5ZDA5ZmEsIDB4ODdkZmM3MTYsCisJMHhiOWUxYTY3YywgMHhmMmFjYzFhNCwgMHgxZjhlOGE0MywgMHg0Mzk3YzAxMiwgMHhiZGExZWIzZSwgMHhiMGY5NTQ0MSwKKwkweGI3NjNlZmJiLCAweDZiZmNiNzdiLCAweDBmZWE2ZGY4LCAweDdlNGViN2U0LCAweDUzZjAzMGNhLCAweDM0ZmM0Zjc2LAorCTB4YTdlMjhmOGMsIDB4YjMxNzI2YTksIDB4ZmE3ZTU0N2IsIDB4ODYyM2NjMTksIDB4OGMwZjMxNWYsIDB4ZjY1MTNlOTAsCisJMHg4MjZmOTI5YSwgMHhiYWE1NmM3NSwgMHg2MDFmNDIwZiwgMHg3NjNhYWNmZCwgMHgwNWI3N2QxZCwgMHgxMGMwYmFlZCwKKwkweDBlY2UzNzU4LCAweGQ4NjBkYmY5LCAweDIxZmIzODQ3LCAweGY3NTY3ZTI1LCAweDQ5ZjIzM2YzLCAweGQwNTc3OGY3LAorCTB4YTAxYTU5YmYsIDB4ZGFlYTRmNDQsIDB4Nzg2MzhkNmUsIDB4MzE0ODlhYjUsIDB4ZmRkYWViYTEsIDB4MmY3MjllODMsCisJMHg4MTc1OGExYywgMHgwMWY3YzIyNCwgMHg4YzQ3NzRmNywgMHgwY2FkYTk3ZSwgMHhhZjA5ZWRmOCwgMHg3MmFmOGU3NSwKKwkweDhmNjNiZmEwLCAweGNhMGYzZGZkLCAweDJmNjYyNmE5LCAweDY4ZjMzNWM3LCAweDkzZjA5M2I3LCAweGM3NmZjMDZlLAorCTB4YTc3NjY0YmEsIDB4N2RiZGJjNDEsIDB4YmI0MmU0OTAsIDB4ZTNkNjRjODEsIDB4YzNhMDVmY2YsIDB4NDcxNGZkZGYsCisJMHhkNmVlYjgyZCwgMHgwNmZlMjFhNywgMHhiZDM4MzU3ZSwgMHg0OWViZjgxNywgMHhjZjg0ZjdiZiwgMHg3ZmVmMzA4NSwKKwkweGQyN2IzZTAxLCAweDQ1ZTkzZDhmLCAweDM0MmZjOGEyLCAweGVkYjdmOWQxLCAweDgwZmI5NjFiLCAweDFlNWVlMzBjLAorCTB4OWFmZWRhZGYsIDB4N2U1ZjllMTEsIDB4NGI2ZTNlNDcsIDB4MjViOGY4ZDEsIDB4YTQxZjgwOTMsIDB4YzZkOWNiY2EsCisJMHgyZTgxZTMyYiwgMHg0MGY0ZmQxZCwgMHg5Zjc3ZWU0ZiwgMHg3ZWZmODI2NCwgMHhkZmRmNGIzYSwgMHhlMmZlYzY3ZCwKKwkweGE3MGRjMjI1LCAweDg5MjQzYWUzLCAweDkyYmY1M2M0LCAweGQxZTM2Y2Y3LCAweGZjNDc3MTlmLCAweDY3ZDgzNzEwLAorCTB4ZTBjOWQ3NzMsIDB4YWZmYzllMzcsIDB4ZWIzZDBjYjAsIDB4MGY2NzBiZTMsIDB4M2YwNGU5M2QsIDB4NWYxYTY1NmMsCisJMHgxZDA2MzQ3MywgMHg5ODJhYjJiNSwgMHhmNjhmNjM1NSwgMHhmNWY0OWE1NywgMHg3MTVjZjViMywgMHhjNzI1ZTcxMCwKKwkweGViMDYxY2NmLCAweGE4ZTZhYjhjLCAweDBkM2Y3YTA4LCAweDk1OWZhZDRiLCAweDczOGUxMjY5LCAweDNjNzY3YjcyLAorCTB4NGMwMmZmZjMsIDB4NDA0OGVjOWYsIDB4NjdkMjczN2QsIDB4ZDlmZmY3YzEsIDB4OGZkNzc0ZjAsIDB4OGQyMTBmMDYsCisJMHhlODBiMzNlNCwgMHhkZDk2ZGE3MywgMHhjYWRkZmJmZCwgMHg4MjVlNzA4MywgMHg4OTA5MjlmOCwgMHg2OWJmODE1ZiwKKwkweDNiN2ZmZmE1LCAweGIwMTVmYTAwLCAweDBkZWJmNWFlLCAweDcwZjM3ZWYyLCAweDM3NDNiZTc4LCAweGQ2NGVmZDFlLAorCTB4YmJlMThjZjYsIDB4MjA0ZWU1ZWUsIDB4YTdiZTM0YzcsIDB4YmFhYmZiZjQsIDB4YmI2MmJkYmYsIDB4Yzc2ZjQ2YjUsCisJMHhkZWVhZTgyNiwgMHg5ZDFhZjRhNiwgMHgwMGZmMGI1ZCwgMHgxMzg2YmRjMywgMHg1NGFiMDk2MCwgMHhiMDRkYjBkOSwKKwkweGRhN2UwN2FmLCAweGYwNDljMTAzLCAweDVlZjYzODVmLCAweDc5MjIyNTk1LCAweDE2OTcxNDY0LCAweDYzODVkM2UwLAorCTB4Njc5N2ZlMzUsIDB4YTllYTk5ZmYsIDB4MDQ4YTZmMTMsIDB4YTI1YzhjZTQsIDB4YWVhOWU1NTAsIDB4ODk5YmYyMjAsCisJMHg5MTdkNjg5OCwgMHhjNmMyZjZmYSwgMHg2ZWIwMjUxNSwgMHgyNmY5Nzg5ZCwgMHg5MzE2NDNmNCwgMHhjN2Y4Mjc1MiwKKwkweDBmM2VhNGU1LCAweDg5YTdiNWUyLCAweGYzZTQxOGE5LCAweDM5Yzc3OTM0LCAweGFkMWU0YTMyLCAweDJlOWQ4NDgyLAorCTB4ZTNiN2FmNWEsIDB4YWJhZjdmYTksIDB4ZDdkMDZiMmYsIDB4NTI1YjkyOTcsIDB4ZTk3ZWRmNjAsIDB4MzgwNDkxMDYsCisJMHhmNmZhMWJkMCwgMHhmNjE3NzlhZiwgMHhhY2Q0OGNiYiwgMHg1N2ZiNzU4MywgMHhhMTZiYmM2YSwgMHg1NDE5MDg4YiwKKwkweGY2ZmQ1NTZmLCAweDBhMzJiY2YxLCAweDcxNjA0Yjg3LCAweDdhMWY2ZDE2LCAweDdmZjMyMjc5LCAweDI0MDY2NjJhLAorCTB4NTlmZmJlODUsIDB4YTk1YmM4ZTMsIDB4MDdkZmEyMDYsIDB4YmM3ZWMxZDYsIDB4NmY3MTNhN2YsIDB4ZjdlOTVkMjMsCisJMHhjMjM3ZTE1ZCwgMHg1ZDAzZDlhYiwgMHgzODU1YzNmNiwgMHg0YTczYjc5MiwgMHhjYjFlODYyMCwgMHg2NzI2MzgxNCwKKwkweDEwMmJiZWFhLCAweGM3YjhiYTVjLCAweDdiZmQ0MzM0LCAweGQxMzI1M2YzLCAweGRlMWVkM2YxLCAweDY2OGMyNzkzLAorCTB4YzBmYzAzZmMsIDB4ZTc5MmVkMDksIDB4ZDY5ZmY0ODcsIDB4N2Y4MmZmYTUsIDB4NjhmZGZmNmEsIDB4ZmViYTc5ZmYsCisJMHhmYjUzZmRhNywgMHhmZTA1ZDgxZiwgMHhhZmZhYjE3OSwgMHgyZmYzZWRmYSwgMHhhOTNlYTlmYiwgMHg0ZTk3ZjE3OCwKKwkweDEzYzlkNzQyLCAweDliOGE3ZDQyLCAweGRiNzJiNWQyLCAweDk2ODU0ZWJkLCAweDEzYmYwNWM3LCAweDgwNDRmNWY4LAorCTB4ZWY0NThlMmYsIDB4MTU0ZTA1ODcsIDB4NDFjZWM1NDIsIDB4NDlmZTBkZGMsIDB4ZWNmOTNmZmIsIDB4ZjExZTMwY2YsCisJMHg4NWQxMzZkNSwgMHhlNmVkYjRmMSwgMHg2MWNhOTliMCwgMHgxMmYyZTM3NSwgMHgyM2Y1ODM5MiwgMHgxOWRmN2VhYywKKwkweDdhNGRlYTFlLCAweGZhNzhhYmZlLCAweDFmOTAyOTk3LCAweDhkNDUzOTQyLCAweDllZDE4NTJmLCAweDc5ZmFkZWFkLAorCTB4NWU0ZmFjMTEsIDB4NjQ3MjhlZDIsIDB4YmZjNjBlZmMsIDB4YWZmYTg4OTgsIDB4ZGFlZjhhNGMsIDB4MzhjNGUxNGUsCisJMHg4YmM1NTc4MSwgMHg2NzY3ZjFiNywgMHgzNzk0Mjc3OCwgMHg4MmZhMDE3YywgMHhjN2U4MjI3YSwgMHg1NzJiYmYxYiwKKwkweDgyMzVkNGVkLCAweDhkOThmOTIzLCAweDE5MGM3YmZlLCAweGMzNTE3YTAzLCAweDNiMzAwOTBiLCAweDVmOTllZWI1LAorCTB4NzBhMTFjZTcsIDB4YTZmYWRhOWQsIDB4OTdjMjhiOTMsIDB4ODM2NzRmMjYsIDB4OGY3M2ZlOGIsIDB4NmRkZWJkZGMsCisJMHg2ZDE2ZjJhNSwgMHg5NmViNjkwZiwgMHhkN2RhYTRkYywgMHg4YTU2NTYyMSwgMHhmM2U0Mjc2MSwgMHhkZDE2NmU1NCwKKwkweGYyYjhmYTdlLCAweDdhOWYyN2Y5LCAweDdmOTllMjBjLCAweGQxMDdiYjMyLCAweGZmM2M1N2ZlLCAweDY5ZTNmYmRhLAorCTB4MzE0ZWM1N2QsIDB4YzM0ZDg0YjksIDB4ZDI3NGE1Y2UsIDB4YmZmZjRiYzcsIDB4MWU5M2I3M2IsIDB4NGQ3OWJmMTUsCisJMHhlN2IxODc5MiwgMHhkMjc2MjRmNywgMHhmZGNlYzU2NSwgMHgxNWQ2MTkxMiwgMHhmYjgzOTMxZiwgMHgwNjNkODhhNSwKKwkweDhhNDc4MjdkLCAweDdiYTg1ZWMwLCAweDg4MjViZmU2LCAweGM3ZDg5ZTMzLCAweDE4YWNkNDkxLCAweDFhZmNkY2Y4LAorCTB4Mjc4MDAzZGEsIDB4YWY0YWE3YTQsIDB4ZGUxOWZhMGUsIDB4ODBiYTUyZjcsIDB4Y2JkMjM2ZGUsIDB4NTUyMmRlZjgsCisJMHg5MGJmNDBiZiwgMHhmYmY5NDE2NywgMHgwNzkwM2Q4NSwgMHgwZGQ5OTFmNSwgMHg2MTdmMjg3OCwgMHhmM2U2MTM5NSwKKwkweGY4YzM1MDg1LCAweDUzN2JmMWZjLCAweDhiOTU5ZjQwLCAweDk2MTcxNGZlLCAweDEzZjk3OWVjLCAweDViZmU0MjNmLAorCTB4NTI4ZmY2ZjYsIDB4OTQ0NGJlMzAsIDB4NDVhZTEzNzQsIDB4ZTc5ODc0ZmUsIDB4NzBiMzRkOTIsIDB4MDc4OTRiOWUsCisJMHg3MWZjYjBmOSwgMHhjYjQwMzRiZSwgMHhkZTI5MDIwYiwgMHhhYzRlNDMxOSwgMHgyZjkzOTMyMiwgMHhkMmUyNTBiNiwKKwkweGZlMDE3ZTc5LCAweDc3ZWZlODI0LCAweGI0MzZjMGY4LCAweGEwMjRlZmJiLCAweGNlYTQ3ZTBmLCAweDU4MGM1YTg1LAorCTB4ZjQ2MTYwYmYsIDB4MmViYWFiZmEsIDB4YTMzZWIwMTAsIDB4N2RlYjc3ZjksIDB4OTNhNzQwMmQsIDB4ZDg1NDk1ZmQsCisJMHhjMTEyZjE3NywgMHhmYjgzZTJhZiwgMHhiZmNiZjY5NiwgMHhkMTk1MjUzZCwgMHg5ZTQyYzg4OSwgMHhmNzVkMWRmYSwKKwkweDc4NzNjMzI3LCAweGFjNTQ0NWJmLCAweGM4ZWZiYTM5LCAweGUzOWQ1OWI3LCAweGE3Yzc1NmFmLCAweDdhYzFjNzcwLAorCTB4NmM0YTQ1ZmQsIDB4ZDQ0ZjM1ZmIsIDB4Yjc1ZDAwZjQsIDB4NGEyY2Y4YTMsIDB4NmZmYzk5ZGUsIDB4YmJjOTlmYmQsCisJMHhlOTgxZmYyNiwgMHhmZTdlZDBjNSwgMHhmODIzOTMzMCwgMHgwYTQzZDYwZSwgMHhkYjE1Mzg1NywgMHg1MGU0Y2ZmNywKKwkweDNhM2Y1MDNmLCAweDE1NmY5Yzk2LCAweGI3ZDczOTU1LCAweGMyODVmOTFiLCAweDUxZjE3MDJmLCAweDI0ZTMwMzdjLAorCTB4ZGY3MDFkMjIsIDB4ZmEwNmU5NjUsIDB4ZjUxZTk0N2QsIDB4YWVjZWI4YzIsIDB4YmM3MjZhZmQsIDB4NDU1YmYzNGMsCisJMHg5YjIwM2ViZCwgMHhkZWU4MWU5OCwgMHg5ZTIzZjJhZSwgMHg1M2MwYzUyYSwgMHg1MmZjODE4ZiwgMHgyMGNiZjU3OSwKKwkweGNjMjk2MmJmLCAweGNkMWRjYmZmLCAweDcyYTNjZmVmLCAweDkzNTA2NWZiLCAweDM1NWViZDViLCAweGFlZjk2ZGNhLAorCTB4ZGM5NjI0ZDEsIDB4OTM3NzY5N2UsIDB4OWY0YjcyOTgsIDB4N2I1Yjk0YzcsIDB4ZmZmOWY5MDQsIDB4ZjBkNTVlYjQsCisJMHg3OGYwMGMzOCwgMHgzNTFlMjc0ZCwgMHgzZTFkZDkzZCwgMHg5MGYyN2E4ZCwgMHg4ZDVlMjMyMCwgMHgxZGZlOTI3YSwKKwkweGY5NWQ3OTI2LCAweDhkNDNlMzUxLCAweGFiOWUyYWZmLCAweDUxZjQwMmJhLCAweDdjNmE5ZjA3LCAweDFhYTdjMWQ4LAorCTB4ZWY4OTc2MWYsIDB4NmM2OGYwZWEsIDB4MzRmYjAwYmYsIDB4OTZmOWFlMTQsIDB4NTI4ZWQzOGQsIDB4NGVkMmQyNTcsCisJMHg3ZjI2ZGY3MCwgMHhhYWZiOGYyNiwgMHhlNTg0ZjM5NiwgMHhmMzExMTA4MSwgMHhkNTMwM2Y0MywgMHg3NTNiMDY4YywKKwkweDNkNmZkZmUyLCAweDc3ODUxNzdkLCAweDJjOGJmMTNlLCAweDQ0NWVhMDJmLCAweGI3ZDJmZmJiLCAweGYzYTA0ZWRmLAorCTB4NzllMmE3OTksIDB4NTRmYjQ1M2UsIDB4MDIzOTk3NGEsIDB4NzBhMzhlMTcsIDB4M2Y4ODE1Y2UsIDB4YjdlMjExM2UsCisJMHgwYTM0ZjkxYywgMHhmYWU1Zjk4ZSwgMHg0YzRkZmMzYSwgMHhhN2E3ZWNlOSwgMHg5ZmFiYmZmNywgMHhiN2NiN2RmMiwKKwkweDFkM2Y1ZDI5LCAweDUwYmJjODQ0LCAweDEwYmMzODhhLCAweDgxZDM1N2NkLCAweGRlN2YxNGFlLCAweDAwNjA1YzUxLAorCTB4NTA4OGE5ZWEsIDB4YmQ3N2U1MWEsIDB4ZjNmYjMyMjAsIDB4YTMxOWMyZWQsIDB4OWZjOWJlYzEsIDB4ZjE5ZTJjM2QsCisJMHg3YmY0NjBmYiwgMHgzYjNlYWFiZCwgMHg0MWUzOTdlYiwgMHg2NTBkOWZjZiwgMHhmNjdiN2ZhMywgMHhhYzQ3MjJkMCwKKwkweDk1NjZkMGJjLCAweGY3NTM1ZWNmLCAweDVjZWNkYTVkLCAweGJmZjk0ZjNkLCAweDdkYTNiNDhkLCAweGM5NWJiN2UzLAorCTB4ODJmYjE4YjYsIDB4NWY0ZDQ1MWIsIDB4N2ZhMzc0YWIsIDB4OGU3ZjFkM2MsIDB4ZTk3Mzg3Y2EsIDB4NTFiOWYxYTcsCisJMHhmNTM5OWI3NCwgMHg0YWVjZTA4NCwgMHgzNGZiZjgwNywgMHhhMWZiMGZjYSwgMHgwNmJlMDVmOCwgMHgyMzViMzZmYywKKwkweGUyMzFhNTQ1LCAweGY4YTljZjc5LCAweDZiZTA3ODliLCAweDBjMmRjZmNjLCAweGM3ODAwYmU1LCAweDhiYWYzYjQyLAorCTB4YzlhOTNjODMsIDB4MTQzMjUwZWIsIDB4NjA3ODlhZTAsIDB4NTM0N2NmZjksIDB4ZTIxZWY2M2UsIDB4ZWI4ZjkwZGQsCisJMHgzYzkxOWQwZCwgMHgyMzYxZmMzMSwgMHhiMDdmYTEzZSwgMHgyZTg4OGYzMywgMHg2MjdiZDdjNCwgMHhlYmMwMTJlOSwKKwkweDA0YWNiMzdiLCAweDk1ZGYzNWY2LCAweGUwYjE1NWRjLCAweGY1YjMzMzJjLCAweGJkMjkyZTY2LCAweGJmZmI4YTMwLAorCTB4YjNmOWJmMGYsIDB4OGEwMmUxMWQsIDB4OTY3NmIzOGYsIDB4ZmY5NWRkZjcsIDB4NzU5ZmRjOTgsIDB4MGU1YTgxNzEsCisJMHhmNTY3OTBmOCwgMHg3MTAwMmU2NCwgMHhmOWUyMjJiNCwgMHhlNTBlMDRmOSwgMHhmZWI0NTI3ZCwgMHhmZTlhNmZjYSwKKwkweDU0ZjVlNDNjLCAweDg5OTczODg3LCAweDExMGI1N2I2LCAweGRiZDhmODA5LCAweGZiMDA1M2I0LCAweDI4OTkyNmZkLAorCTB4NmExMDhmMTgsIDB4OGE4Y2NkODYsIDB4MDUxMTFkN2IsIDB4ZGZmMzU3YzQsIDB4ZjgwZWRkZTYsIDB4NGNkMzM3M2QsCisJMHhlODY1MmUwMCwgMHgwMWQ4MjcxOSwgMHg1MTIzNDJlNywgMHhkNzliYmEwZSwgMHg1YTY0N2MxZiwgMHgxMGZkMDhhMSwKKwkweDNmMjMwZmU0LCAweDc0ZGIyNTE0LCAweDQ5OTM1OWY1LCAweGRiYTUzNzNmLCAweDk1NjQ3MzQ0LCAweGVhZmQwNjNiLAorCTB4YmQ2N2M2MjQsIDB4ZmY5NjZmZDYsIDB4MDRkYmY0Y2YsIDB4NWYxOGRmYWEsIDB4ZWRmYWQxOGIsIDB4N2RmMTg5MjYsCisJMHg4ZDRiN2U5NCwgMHhkNjU2ZGZhNSwgMHgxN2MwYTljYSwgMHhhNzY2ZjcyYiwgMHhiZTU3NWQwMiwgMHgyYzRmYTRiMSwKKwkweDhmYmFmNmZkLCAweGE4NmZmN2Y5LCAweGZkNmRlNjc5LCAweDFlMWI3ZWE4LCAweDUxZmFkZmE1LCAweGFlMjMxNmZkLAorCTB4YTVlYTVhM2IsIDB4Y2ZmY2IzN2UsIDB4YTBlYmRmYzgsIDB4YjdjYzYyZGYsIDB4YTY5ZmM1NTgsIDB4YjU0MzhhZGYsCisJMHhmYjhhZGZhOCwgMHhhOTdjYmFmMSwgMHhmYTRmNTI0OSwgMHhiMzk3ZWNhZCwgMHg2ZGJhMmViMCwgMHhmMDA3ZjgzMSwKKwkweDBkZWRmYTBhLCAweDM4YzFjZjU1LCAweDVkZmVlN2EwLCAweDNkMjc3ZDcyLCAweDNkNWJkNTU3LCAweDY3ODQzZmY3LAorCTB4ZWNhZGNmNGQsIDB4ZDMzZGExY2YsIDB4OWU5OTBmOTUsIDB4ZjRjNTk5NWIsIDB4NGNiZGNhZGMsIDB4YzQxY2FkY2YsCisJMHhiZjUxOWNmNCwgMHg2ZmQxNzQxNSwgMHgyMWVhZmJlYywgMHgyM2Y0N2JmNCwgMHgxYjdkN2ViMywgMHgyMzk5MmY2ZCwKKwkweGZkZjQyZGJhLCAweDlmM2I1OTEyLCAweDVhM2EzMzUxLCAweGQ0YmJmZGRmLCAweDlmNzNiZThkLCAweDNkMmU3M2MxLAorCTB4ODIzZmJiZTksIDB4N2E4NDFiYmUsIDB4OTFjODIwNmMsIDB4MWM2ZTNmOTEsIDB4ZDNlNWQzNjgsIDB4YjFmNWY3YmQsCisJMHg3OTA0NWVlNywgMHhmZThmMDNmOSwgMHhlNjI2MDdmNywgMHhmYWZiZWQyNywgMHhiYjkwNDhkOCwgMHhhYTFlMDBmNywKKwkweGY5NTE5ZWVmLCAweDQ3ZTdkNWFmLCAweDI4NzkzYTdkLCAweDdiYWFmNzkzLCAweDFiYWFmZTE4LCAweGQ1ZGYzNjM5LAorCTB4NzU4NjQwN2MsIDB4ZDExNzZmZTAsIDB4MmY3ZGJlOGYsIDB4OWI2N2EzZjMsIDB4YzBkOGZhNWIsIDB4MjI1ZmZmY2YsCisJMHgyYmZkMjVjYSwgMHg4N2UyOGIyOSwgMHgzMDJiMTczOSwgMHhjZTJiYjllZSwgMHhjY2ZjMDViOSwgMHg4MGIxMDIzOSwKKwkweGQwZTBiYjFkLCAweDdlYzAyNzhkLCAweDNkNzE3MDVkLCAweGUwMGJiZGRhLCAweGM4ZTkyMjc5LCAweGExZGI5OGZiLAorCTB4ZWJmNmY1MjcsIDB4YWY5ZGE2YmMsIDB4ZjlhZTkwNjUsIDB4OGNjZDEzMTAsIDB4NzE1NzEzMmUsIDB4NWQ1OWNkODEsCisJMHg1ZGE4MjNmMywgMHhjNjJkZjk4NiwgMHhhYmRmODkzYywgMHg0N2NkOWZmMywgMHg4ZmU0NWYxMCwgMHhlNWY4Y2M3YywKKwkweDcyNzg4ZGVmLCAweGFkNTRiYzMzLCAweGFhNzhmNWU2LCAweDg5ZTI2MmUxLCAweDJjYTRiYTUyLCAweGI3MmYxM2E1LAorCTB4OTc1OTE0YmYsIDB4MzljYmVkMDEsIDB4ZjM4Y2I3ZjQsIDB4OWM2NmYwZDYsIDB4Y2Q0Nzg2YmYsIDB4YmVhMDU5YmYsCisJMHgyNDc0M2YzZiwgMHg4Njg4OWU2NiwgMHgyMmY5MmVlNywgMHhmODBkZGUxYSwgMHgzM2QzNGI3OCwgMHgyMDYxOTBkNywKKwkweDNjOTgxZjk3LCAweDdjMGQxZjNmLCAweDE3OGE3YmY0LCAweDczYWRlNzBhLCAweDJiY2VlOTA3LCAweDY1ZTJhM2JkLAorCTB4NjE0OGU3YWEsIDB4MjQ3ODBjOGEsIDB4ZjM2N2MwMzUsIDB4OTZiZTc3Y2EsIDB4YjM3N2U3NDIsIDB4MjEwYjk1OTIsCisJMHg5MzdmNTlmNSwgMHg2ODhmMTAzYywgMHgxZWEzYjZiNiwgMHg5NDcwZjhkNCwgMHg1OTg1Yzk5OSwgMHhmNWVmMmJkNSwKKwkweDdhZTIxNTc1LCAweDUwYjljNGQzLCAweDNkMDZjMmJlLCAweDc5OTllNmE3LCAweGQ3ZjI2MWVmLCAweGJhZjdmZGNjLAorCTB4Njc4ODUxOGMsIDB4OTE0ODJlNTgsIDB4NWQwMTVlYjYsIDB4ODZhNzNmZTgsIDB4NDBiYzVkMTgsIDB4NjljZmZhMTcsCisJMHhlMDIwZmRhNCwgMHg3Mzk5M2FiZCwgMHhhNmZkZTE4NywgMHgzZjAyZjc5ZCwgMHhjZmE1NmViZCwgMHgzOWNiY2U0MSwKKwkweDBlODYxNmY3LCAweDY1Y2E3YTdiLCAweGM1ODg1OGY5LCAweGM4Y2MxOGM3LCAweDE3M2Y1Y2ViLCAweDVkODk3YmMwLAorCTB4ZTY4OTkzZWQsIDB4OGUwMGY3OTYsIDB4MzY2ZTU0ODksIDB4ZmQwMGMzYzMsIDB4NDZmZThhMmYsIDB4MDdjOGM1ZmIsCisJMHg3NTAzZTUzZCwgMHgyYWI5ZWZjNywgMHgzYTA3NWY5ZSwgMHhlZGRmMDFkOCwgMHhkZTQzZDgxMiwgMHhiNDdmNWIzMCwKKwkweDE3MjBhZjc2LCAweDNhMzRkZTIyLCAweDY1ZjVkMTM0LCAweDI5ODNhMzE0LCAweGQ2NmY5ZTA2LCAweGJkOWUyYWVhLAorCTB4ZWY4NDRlMjEsIDB4NmZmZWEwNmYsIDB4N2ViYjA3MTIsIDB4ZjhkNDFmNWYsIDB4YzU3NzJjZGQsIDB4ZDIxNWM0MTMsCisJMHhlODA2ZjRhMywgMHhjZDdkZThiNywgMHgxMWI3YTZlYSwgMHhhNmFlMzc1ZiwgMHgxNWRjOTllNiwgMHg0MDdkMWE1ZiwKKwkweDZmMGU1ZTBmLCAweGQzNGZjYWRkLCAweDYxNzk5ODkxLCAweDQ2N2U1NWRmLCAweGIzZjJmNTk5LCAweGU2ZmVkYWNmLAorCTB4ZWRhYjg4NzAsIDB4OTBhZjUwZTUsIDB4N2UyZTgyNTAsIDB4ZWNjY2QzMzAsIDB4MDdhYjY2OTYsIDB4MGRmZGJjZjksCisJMHhlZTQ1YmRkMSwgMHhhOGE2N2ZhYSwgMHgyNTdmMDE3NCwgMHg2NGUyN2NmYSwgMHg0ZGU4MDg5OCwgMHhhNjdjOTU5NywKKwkweGUzMDA3YmNkLCAweGUwZjVlOGI3LCAweGU5MDdhYjc1LCAweDMzZmY1ZGQ3LCAweGVkZmVjY2NjLCAweGVhZDMxZWNlLAorCTB4OTA3OGMzZDcsIDB4YzdlYjI4ZDcsIDB4NWE0N2FlMzMsIDB4NzlhN2E5NWMsIDB4YmY3MWQ0NzksIDB4NzFiNGJjZWYsCisJMHg4NGJlZWJiZSwgMHgzYzYwYjQ5NywgMHhkODlmZGI0ZSwgMHg4OTc2N2JjMywgMHg3MzE2M2Y2MCwgMHgwYTEwN2RiYSwKKwkweGZlNmZlZTM5LCAweDU5YmZmYTEzLCAweGZmN2RkZDFhLCAweDUzMGEzZjEwLCAweGUzYmViZjNjLCAweDlmNjM4YzQ5LAorCTB4MzRjOGY2N2UsIDB4YWYxNTlmOTAsIDB4ZTU0MmM0ZjAsIDB4ODM4Nzc1YWYsIDB4ODg5ZTU5ODQsIDB4NDU0Mjc2MDQsCisJMHg1ZGZiOGYyMywgMHhjZGU3MDg0NCwgMHhhODMzYjI4OCwgMHhmMWYwYzMyNywgMHg1ZWY1MDNhMiwgMHhhMDczMmVjNSwKKwkweGYxNWY3ZTg0LCAweDEwMzk2N2YyLCAweGMzNWQ2YjdmLCAweDU5ZmY5ZmY0LCAweDkxZmQxZjk1LCAweGE4MDdjODFjLAorCTB4YmNmZWQ4MTAsIDB4YTg4ZjNlOTEsIDB4Yjc2YTc5ZmMsIDB4NmZlODBlNmQsIDB4YzczYjNiNmUsIDB4MmQ5YzExNWIsCisJMHgwY2UyYTM5YSwgMHgxNjQ1OWJmNywgMHhjMzZkZGVlNywgMHgzM2ZmNmMzYywgMHgwMzMxZTYxYywgMHg0OGU3ZDE3YywKKwkweDUzZDBmY2I1LCAweDVjYmQzMGNmLCAweGUwMDYyNGQxLCAweGY2YzU3MDNjLCAweDE3MTBhZDlkLCAweDhjZDBmOGFmLAorCTB4ZmI3N2FiZjYsIDB4ZDNlYzA5MTksIDB4Y2YzZTJmYzksIDB4ZjEzNzFiY2UsIDB4OTc2ODc4YmEsIDB4M2U3NmU0MzgsCisJMHg1OWY4ODY2YywgMHgwMWVhMTU2MywgMHhmNTgyM2Y1YSwgMHhmYmY3MWFhMCwgMHgxNWIyNzE4ZSwgMHhkOTdkZWUyZiwKKwkweGUyYjg1MTRmLCAweGYxM2I0ZjM3LCAweDM2Y2I3MDVjLCAweGI3MjNjNjI3LCAweGEwNWY3ZTVmLCAweDc4MzFkYzRiLAorCTB4OWM3NzFhYmYsIDB4ZjVjMTA1ZmEsIDB4ZjFkYzc2MjEsIDB4MjEyN2NhYTQsIDB4NDhlZTNlYjMsIDB4M2M2MTI3YjYsCisJMHg1Nzk5YzI5MiwgMHhkMTdlMjMxYSwgMHg1ZmNmZmZjMSwgMHhjZGY2MDI3OCwgMHhmMmZhZWQ0ZSwgMHhmMmJiODAwOSwKKwkweGZjNGY3MzliLCAweDJhOTNlMjk0LCAweGRiYWMxNzIwLCAweGMzZGY2N2RlLCAweGJiZWQwNjdkLCAweGQyN2Q1NWY3LAorCTB4YjhkM2NjZmEsIDB4MjdmYWQzNGYsIDB4NmI3YTFiYjMsIDB4MjY0NWZiZGQsIDB4ZWViNDUzZWMsIDB4ZTIwNTNhZmMsCisJMHg0ZWY3YWJiOCwgMHhmNTZkN2Y0MSwgMHg0OTUzOTM0YiwgMHgyYjQwN2YwYywgMHhiZDAzN2Y4MSwgMHhkMjMyMjdkOCwKKwkweDM5YjFiOWFkLCAweDRkM2NlMDEzLCAweDc3ZWIwZWU5LCAweDU4MzkzYzQ3LCAweGIyZjRlMmM1LCAweDExZGU0NzFhLAorCTB4NGJhZTVmN2IsIDB4YzY3MWI4ZGMsIDB4M2FjMWQ3Y2QsIDB4NjViYTI4ZGUsIDB4ZjFmODhiZDIsIDB4ZTFjZjRhNjEsCisJMHgwZWUzYTBiZCwgMHgzODIwOWY3NSwgMHhlM2YxYjJmNSwgMHg0YTBmZjBkMywgMHg3ZDY2MGJhZiwgMHhlMzQyZmUxYywKKwkweDBjN2NmZjkyLCAweGJhOTMxYWRhLCAweDdiODcxZjhkLCAweGRmNmQzZjgxLCAweDIxNTliZjZmLCAweDVkYTM5MDE2LAorCTB4MWVkYzYxY2YsIDB4MGY3ZDQ3ZTgsIDB4ODVmY2ZhZDIsIDB4MWNiYjg4NGMsIDB4YzBlZmRiMTcsIDB4NjZiZGViZmMsCisJMHhkOGFhYTNjYywgMHg1M2NhMDFmYiwgMHhlMzZmNGJlYiwgMHhmNzUxMWFiZSwgMHhjNzQ5NWFkZiwgMHg1MTI3ZGIxZiwKKwkweDU2ZWYzYTdkLCAweGFiM2I4YjA3LCAweGI0Yjg4MDc0LCAweDZhZTdjNGVjLCAweGI1ZjE5OWZjLCAweDJlZWU5NzE2LAorCTB4MzJkNjNkMWUsIDB4YWJiZmVkODAsIDB4NWI1NTkxZmIsIDB4NDMxMTJjZmYsIDB4MGIxYjlmYmMsIDB4ZDk3MjNhZjQsCisJMHgwZjBkNTQ3ZCwgMHg5OGMzYzAyZSwgMHhkODk2ZmRlOCwgMHhmZDhlZmZmMSwgMHg4MGRkMDMxNiwgMHg3NThmNjA5ZSwKKwkweDdhZDBhN2VjLCAweDA3YWI4ODNmLCAweGVkNjIwZmI4LCAweDY2NmViNWRmLCAweDYyYWQzNGZiLCAweDZkNDViY2VjLAorCTB4YzVhNDY1ZmYsIDB4ZTgxMmVmYjAsIDB4NGY0YmJlZGQsIDB4NzhhZWY4ZjMsIDB4YjQyNzA2Y2EsIDB4OWQ3YzU3NGYsCisJMHhiZjViMTRiYSwgMHhkNGUxNmFkZiwgMHhlN2JlMDM3YiwgMHg2NzI1N2ViZSwgMHgwNTk4MWJjYywgMHg3OGQ1NTk3YywKKwkweDRhN2IwMjQ0LCAweGY5YjRkZjViLCAweGU3ZmQ1MjllLCAweDc4ZjJjZjUzLCAweGIwNWQ2NDRlLCAweDUxYmJmNTE5LAorCTB4MTYxMzU0N2YsIDB4NWJjMjM0MzcsIDB4YWI3YTYxNmUsIDB4MWZhZDg5YmEsIDB4MDIzOTc2YTcsIDB4YTljZmRhNzYsCisJMHhhZjkxYmIwMywgMHg5MTFjNzdhYiwgMHg4M2JmYjRmYywgMHg0NTIzN2ZkYiwgMHg2MGFjZjJhMiwgMHhjMTQ0MDhmZCwKKwkweGZkODVlYTdmLCAweDg5N2Y2YzM5LCAweDcxYzZlYmY5LCAweGYxYzc1MmVlLCAweGUzOGY2Mjg2LCAweDM3NDY3MWRkLAorCTB4NTA3ZjBhY2UsIDB4MmU3ZWU3NjIsIDB4NDE0OWRlM2YsIDB4OWRmZDBkOTksIDB4ZTQwOTExNmMsIDB4ZjIwYzlmZmQsCisJMHhlMzE4ODFjNSwgMHg1YTg4YjVjZiwgMHgwZmM5OGIzYywgMHgxY2YxNDc1ZCwgMHhiYjlkODNhNiwgMHhiNDI1MTNlNCwKKwkweGM2M2I1N2JiLCAweGZkZTcwODdlLCAweDE5MjQzYjU3LCAweGI1NzUxN2UyLCAweGVlYjUyZjJjLCAweDQwNjlkY2RmLAorCTB4NWI4NGJhZWYsIDB4ZGVhZTNmNzEsIDB4YjI1NzVmODAsIDB4MWFlMjFmMmIsIDB4NTFkMmMyYWUsIDB4YmQ0NmFlYzAsCisJMHg3NDk4YTA5MywgMHgxNDc2YWZmMCwgMHhjZTE0Y2FhNywgMHg0NjlkYWFiNSwgMHgwYjllMzcwNCwgMHhjNTQ1OWRlNSwKKwkweDY1ZGUxZjMwLCAweGVjNjM1OTcyLCAweDUyZjY4ODNiLCAweDhiYzI4OWUyLCAweGUzOWZkMmU4LCAweGNhNDY5NzI0LAorCTB4N2Y5NjhmZDAsIDB4Mzk2OTY5NTMsIDB4MDUyZThkODgsIDB4YjE4NThjNTMsIDB4OTlmY2RkZWMsIDB4ZGI3NzljMmUsCisJMHg1MDdmZDUwZSwgMHg2MTRhZWM4OCwgMHg4ZWIwNjQ3OSwgMHhjZjhhZWRiNCwgMHg0M2YxYzMyMSwgMHhiNDdlNTBhMiwKKwkweDFkYjljZmE5LCAweDVlODNmN2ZiLCAweDRhMjRlYjVhLCAweDhhMzM5NTAyLCAweDg2Y2Y5OTU1LCAweDJjMjNhY2YzLAorCTB4ZTlmMDM2NWMsIDB4ODU3YWZmOTksIDB4ZjEwZDZiZjYsIDB4ZDliNDU3ZTgsIDB4MjU1MjdjYjUsIDB4NDZjY2U0MDEsCisJMHg0MWJjYzQxZSwgMHg5MzZmZTU2MCwgMHhlNjM0ZTEzYSwgMHgyNTc4MTIxMywgMHgyOThkM2VlYSwgMHhhMWZkMWRiYywKKwkweDdjNTg5YmIzLCAweGZmNTcyNzgwLCAweGNmOGIwMjdhLCAweGFmYzAwMDkxLCAweDU0MmIyZmFlLCAweGUyMTJjZjM4LAorCTB4M2JmYmMzMGUsIDB4NTgwZjE4MWMsIDB4OTQyMmM2ZjYsIDB4MzQ0M2EwMWYsIDB4ZjU4YTkyYmUsIDB4YWMxYjVlZTcsCisJMHg2N2YwMWNjZSwgMHhiZjU1NWEzNiwgMHhjMGI0YWZjNiwgMHg2YWM1OWIzOSwgMHhmNTRhN2RiZiwgMHgxOGE5NjJlNywKKwkweDk3NWU0MWZhLCAweGU1ZmFmMmE4LCAweDk4NDNhMmQyLCAweDhhNTllNjhmLCAweDhlNzUzZTdhLCAweDMxYWNkY2ZlLAorCTB4YWEyMDRiNGYsIDB4ZmU2MDFjOWYsIDB4YWRiYzk3NzMsIDB4YjcwOGNkYTYsIDB4YzU2YjdmMzEsIDB4YzM1ZDdkNzYsCisJMHgzN2EwMjdlMywgMHgxMjc0MDJhZiwgMHg4MGUyZTVmYiwgMHgzMjM3ZTIzZCwgMHg0NjEzZDdmOCwgMHg5YWZjNzc3ZCwKKwkweGI1ZjhmNGQzLCAweGRhZmM3YWNhLCAweGE3ZjExODg2LCAweGFkYzNhZmM3LCAweDk3ZTY5N2M3LCAweGY4ZGY4Nzc2LAorCTB4Yzg3M2ZhYjEsIDB4OGFmYzJhZmYsIDB4NTQ4ZWQ1NTYsIDB4NGFmZjRhZjEsIDB4NjU0YzI5MmQsIDB4NDJlOWRjMDMsCisJMHgyOGMyZTUxOCwgMHgzMGY2MTk0NywgMHg5ZmVlZmYwNywgMHhhZmM1YTgxYywgMHhlZmQ0MGVkYywgMHhiODdjZWE2OSwKKwkweDFiM2JlY2M1LCAweGYwMGYxMWM4LCAweGUwOGU1MWJhLCAweDc5ZTgyMDI0LCAweDc1ZDhmOTFiLCAweGZhYzQwYWNjLAorCTB4NGQ3YjdjOGMsIDB4MzU1Y2Y0ZjcsIDB4MGIyM2Q1ZmQsIDB4ODA5YjU3ZTksIDB4M2YyMzg3N2YsIDB4ODliZWYzYjAsCisJMHgwNTk3NTAyNCwgMHhjMTc2ZWE3MiwgMHg1OWY0MWRmYSwgMHhiODQ1OGJkYywgMHgxN2I4ODVmNywgMHg1ZWZiODIwZiwKKwkweGE0M2U1ODVjLCAweDBkYjRhYmU2LCAweDMwNmU3ODI1LCAweDAyOWYzZTE4LCAweGRjYTFlOWZhLCAweGY3YTA2OWY2LAorCTB4Mjk0ODRiYmMsIDB4YzUxZmMxZTgsIDB4MGYwM2YzYjEsIDB4MzhiZjY1YTgsIDB4ODVhYmQ1NDksIDB4ZWY4MjRjNmYsCisJMHhlNzBjYTI0MywgMHhkYjQyZGJkNSwgMHhkZWEwODMyYywgMHgyYTNkZTNjNCwgMHhhYmZhODRkZSwgMHg5MGQ2ZmM2MCwKKwkweDZjNWFlMGM4LCAweDM4ODIwYzA5LCAweGM3MTE1ZWM4LCAweDAxM2M1ZDZkLCAweGQ4NzY2NWNmLCAweDJmOTYyMTZmLAorCTB4Y2NmYTE2ZDIsIDB4OWY0YTI4YjksIDB4N2EzZDM2YjcsIDB4MzZiOWM0MTUsIDB4YTllNzYyOWEsIDB4N2U5YWIxNGMsCisJMHhlYzFiZmFkOCwgMHhjNTM3Yjc5MiwgMHgxZWVhZjJjYSwgMHg1MWU3NDAxYSwgMHhiYWFjZmQzZCwgMHhiODc5MzMwZSwKKwkweGFiZjNhNTU2LCAweGY5YzQ2ZjRiLCAweDY0ZTIxNGJmLCAweGY4OGE0NzU4LCAweDQ2MWE2ZWRiLCAweDNkZWUzOWU3LAorCTB4YjBjZjhkNDEsIDB4ZjUyOGU1NzgsIDB4MmZkMDNhZmQsIDB4ZGZlYjVmYTgsIDB4ZGRjM2U5ZTUsIDB4ZTcwMjA1NDcsCisJMHgyY2Q1NDZmNCwgMHgxNWViN2Y0NSwgMHhjYTczZTUyNywgMHg3MDRhNzkxNywgMHg2MTZkZjAyNCwgMHhjZGVmMDEyOCwKKwkweGQwNGM3ZWYxLCAweDIyZGQxZmFlLCAweDRmMzNmOGU4LCAweDIyZjM1NzVkLCAweDQ0YzA1ZTU0LCAweDNlZGY1MGY5LAorCTB4ZWMxODIyMmUsIDB4ZmMwZjAwYTAsIDB4ZmQ3MWVkNzUsIDB4ZDU1Njg1ZjMsIDB4MTQ5MjcyZWUsIDB4OTcwZGYzZTAsCisJMHg1ZWYyMGU3OCwgMHg3Yjg5ZGFkYiwgMHg2ZGJiODUwZCwgMHhhMzg0NWY3MSwgMHhmYTljM2NlZCwgMHhiZTI1ZTVhNSwKKwkweGJmN2FkNjM4LCAweDYyZjhjYWNhLCAweDlkNzA0NGEzLCAweDhlZDRiOGQ5LCAweDRiMDNjNWYxLCAweGY1ODBhZTJiLAorCTB4N2IxZmFiZmQsIDB4OGU3NTg4YWUsIDB4YzUzZjRhM2MsIDB4MjUyYzdjYjMsIDB4ZmUwNThjOWUsIDB4YmMzMWNiNWUsCisJMHhjNjk3YTdkNywgMHhmOGQ3ZjdjOCwgMHg4ZDZmZTM1OSwgMHhjNjk3ZDNhZiwgMHgzNWU1NjI3OSwgMHg3NjY1NjM3ZSwKKwkweDIxZDJjMTVhLCAweGRhZmUwNDljLCAweGUzOGYwZTNlLCAweDVjZjFhZWI2LCAweDlmOGRkY2Y2LCAweDc4MDBjOWFjLAorCTB4ZDBlNzRkYmMsIDB4Mzg4NGI2ZWUsIDB4YjFiZDk2MjUsIDB4ZmVjNGVhYzEsIDB4NmJmOGQ3NWIsIDB4MmVlZjhmMjEsCisJMHgyN2EwOWMyYSwgMHgwMzc3ZWZiYiwgMHg4MTNmNWJmYSwgMHg2NzdjMmNhMCwgMHg3M2MzMmZhOSwgMHg2NDJjNGJiYywKKwkweDg1YmJjNDBiLCAweDFjNWJmNGZhLCAweDZmOTNmZmMwLCAweDdkZTE0NzU4LCAweGViODRkNGFjLCAweDhkZDE0NmViLAorCTB4MDhhYmZiZjAsIDB4MWE4M2Y4YzEsIDB4OGQzN2VkY2YsIDB4Y2YzZThlNmMsIDB4ZmYzNTg0ZmMsIDB4YzdhNTJiNTksCisJMHhkMjE3NTZiMywgMHhlNmUzYzkyNSwgMHgzZmY3N2UwMCwgMHhmMjA5ZGJmZSwgMHg4Y2QxNzZkZCwgMHhmYWFiZWM3NCwKKwkweGFmNzdkYTQzLCAweDM2ZGQ5OTU5LCAweDBhZDk0ZTMzLCAweDY0ZjI5M2RmLCAweGM3YjcxMzk0LCAweDEyM2M1ZWU5LAorCTB4NzhhMDRkZWUsIDB4NGVhMzkyOGYsIDB4YmJmMWY5ZmEsIDB4NzFkNTBmNDQsIDB4YmI0NDllMTQsIDB4Mjg5MmY5MDksCisJMHhjNWQyZWM4YSwgMHg0NzI4ZmQyOSwgMHgzMDkwNWM5YSwgMHg0ZDhmMjA0NywgMHg4ODVjYWJkMywgMHgxY2E4M2IwYiwKKwkweGMzZDhiMjhjLCAweDk2MjQ3N2UwLCAweDEwNTM3OWQzLCAweGZhYzJjNGFjLCAweDc1NGUxMTZiLCAweDNjYzZjYjljLAorCTB4Nzk5N2NhNzksIDB4NjA4YTM4NzAsIDB4NzExMjE0NDgsIDB4ZGY0ZDdmYTEsIDB4NmQ3YTdhNmEsIDB4NTk3OTQxMDIsCisJMHhhODEwYjBmYiwgMHgxMjZjZmRhMywgMHhhZjg4NTYyMiwgMHgwMTcyMjk2NCwgMHgwYTI1MWFhNCwgMHhlZjE3OWUzMiwKKwkweGZmMzA0ZTVmLCAweDc4ZmQ5NmQyLCAweDQyZGQ4NzQyLCAweDM3YzQ3ZTg1LCAweGZiNTg4MmZjLCAweDg2OWM3Yzc5LAorCTB4NDAxZmNmMmYsIDB4NmExY2U0NmYsIDB4OGRlNjAwM2YsIDB4NzNjNmNhZGIsIDB4M2I0MTY2YmYsIDB4YTg3ZjQzYmQsCisJMHhiYTkxNThmNiwgMHhkY2ZiOGVmZSwgMHhjMjA5ZjJjNCwgMHgzZWY0NDg5MywgMHg2ODdmNTE5YiwgMHhlYmI4YzlmNiwKKwkweGJmNjA2YjIyLCAweDE4OWZkYzY4LCAweDA1NWJiNDljLCAweGNlYWQxYmJlLCAweGE4OWY0M2I3LCAweDEwOThlNmViLAorCTB4ZmJmNDI3ZDUsIDB4NjZjOGQwZGMsIDB4ZjcyYjA3YjgsIDB4NWRjNzI2NjMsIDB4M2YyMWM5ZjQsIDB4YmVmYmY4MGYsCisJMHgxN2M4YzQ3YSwgMHgyZTU0YzIyMywgMHgzMmExZjZkNSwgMHhlYWUxYTdkYywgMHgxOWZiNDNhOCwgMHg5ZTQ5ZGU4MywKKwkweGVkMTUyYTNlLCAweDhjZGY5NTVjLCAweGRiZTRkNjc4LCAweDc3YjlmNzI4LCAweDBjY2Q5YmJiLCAweDFhNDdlNjJlLAorCTB4Mjc1YzIxYzYsIDB4ZTgzNjcyMWMsIDB4YjA3OGI3YTUsIDB4MjlmMmRiZjcsIDB4YmY1YzI4MWUsIDB4ZjRhM2Y5MDIsCisJMHhiODFmMzg0YiwgMHgyMWJmZTYwMSwgMHhlNDE1YmQ3NCwgMHgyN2FmN2JlNCwgMHg1NDc1ZmEyMSwgMHhiY2QzZjY5ZSwKKwkweDBmYWUzZTI3LCAweGMwNGUyN2FlLCAweGYzZmVmNTQzLCAweDQ2MTI3YWVhLCAweDAxYzg3NzdhLCAweDc4ZTg5Mzk1LAorCTB4NDZmZmM2ODksIDB4YTNlNGQ3N2UsIDB4YzhkZTJlMGUsIDB4MDQ3NjczYzYsIDB4MGI5ZTU5ZDYsIDB4NjYzMDY1ZTIsCisJMHg3ODA1YzliMiwgMHgzYWVkZWNkNSwgMHhmZTI1YmVkNSwgMHg1NmZmYjQ3NCwgMHgxZWJhODhiYiwgMHg0ZjgwMDY2NSwKKwkweDVlY2Q0NGVhLCAweGUzYTI1Yjc3LCAweDA1MWRhYjUzLCAweDRmZGI5N2E5LCAweGZlYTQ1ZWY1LCAweDFiMzlkNDU5LAorCTB4ZmU4ZWQwYWYsIDB4ODRhMmY3OWIsIDB4ZmUzN2JmY2YsIDB4NzkxNDI4OWEsIDB4ODk4ZGZjM2EsIDB4N2YxNWRkMWIsCisJMHhiMDg0NzFmMSwgMHg5ZmZlYzJmYiwgMHgyMzBjZGY5ZiwgMHg3NzI3ZGM3ZiwgMHhlMjVhZWZjZSwgMHhmNTQyMjU3OSwKKwkweGY1YWFkZTQ3LCAweDNmMTkzNjc1LCAweGQ3OTY5YzM5LCAweGZiNjgyZjU1LCAweDAxZTlkZDlmLCAweGE5OGZiY2EzLAorCTB4NzBjNjZmYWMsIDB4ZWVmMjBmNGIsIDB4MjVmOGE5YjUsIDB4YjNlODA2NjQsIDB4Yjc2YTYxZjEsIDB4ZmY5NTc1NjQsCisJMHhiY2ZjZWFmMywgMHhiNmY3ODYzNiwgMHg4MzA3ZGI1YiwgMHgzZGU3YWQzYywgMHgyZjY4NzEzNSwgMHhiMDI2NGM0NiwKKwkweGI0MTM3NjJiLCAweDhmZmJkYzdiLCAweDViZGU1MTNhLCAweDRmZWI3NDkyLCAweDhmYzBiYjU3LCAweGE3ZDlhOWYyLAorCTB4N2M2YTVkOWEsIDB4NTUyZWMzYWYsIDB4M2UyZDFiZDcsIDB4Nzk1MTM1Y2EsIDB4MTkzY2YwYTEsIDB4MWMwM2YxZTcsCisJMHhiZmU2MmU3NSwgMHhkMDU3MDFjMiwgMHgzZDU4NGY2MywgMHgzNjVmYzA3NSwgMHhkODM4OTczYSwgMHhjZTEyMTkyZiwKKwkweGIwOTZmMTYyLCAweDkzYmIzZTRlLCAweGRlNDE5YjQ3LCAweGIwM2YxNDgyLCAweGZhZTlmOWZlLCAweDFlZWI4ODM3LAorCTB4MDk3MWIxOWUsIDB4ODVhYTVlMGMsIDB4OTdlOWJlYzAsIDB4ZDU2MGQ4NDcsIDB4ZmJjN2YzMDQsIDB4NmJmYmIwZTUsCisJMHhmYmIyZTVmYSwgMHgzMWM3MzczMiwgMHhhMThiNjVmYiwgMHhmYTVhYzI3YywgMHgxNDRiY2MxOCwgMHhmYjljZGY4OCwKKwkweDUwMDZlMWZkLCAweDY0ZjkwZTIxLCAweGY4MDBkMjljLCAweDM4MmIxNGIwLCAweDcxMTcwYzhmLCAweDE5ZGU5NDczLAorCTB4YmM4MzkwNDIsIDB4OTk0YWM0ODksIDB4ZDI0N2YxNjMsIDB4ZmI0OGZmYjksIDB4ZjM5MTI4Y2IsIDB4MDYzMjNmODEsCisJMHg5YTM3M2MxMiwgMHg5ZTdkOGExMSwgMHhmMTM4OTVlOCwgMHg4ZGViZDk4NywgMHhiY2MxY2U1ZCwgMHg0MWNmY2FhMiwKKwkweGE5MzdjZTg5LCAweGU5ODM5ZDg0LCAweGYwNTBmYjg4LCAweDhlYWRiZjAxLCAweGFkYjI3MTViLCAweGFiM2VkODE3LAorCTB4ZDllMTgxM2YsIDB4YzEwMWJmZTgsIDB4NWE4MjVlNjAsIDB4ODIyMjU3YmYsIDB4MmJmZDExMzUsIDB4ZGZhZmYwM2YsCisJMHhjYWZmNDE2NCwgMHhkMDQxZGM0NiwgMHhiMWM0MWZiNywgMHhjZTNhZWNmOCwgMHhiZmVhMWViZCwgMHg3MDJkZGExMCwKKwkweDM3MjY4ZmNmLCAweDM0M2MzYzlhLCAweDQwYjcxNmUxLCAweDc3NWU3NTVmLCAweDVmN2MwNzM2LCAweDAwZWYxNzJhLAorCTB4OWMyNzViOWUsIDB4NjcxNmJjMWQsIDB4ZjhjOTllZDIsIDB4Zjk3NWUxNGUsIDB4OWFmZDFhZjYsIDB4YWNmZDFkNDQsCisJMHhkNjg5NTcxMCwgMHgwODY5MGVmMywgMHg1Y2FkZWRkOCwgMHhhYWZjMWI5YywgMHg4MzFjZTVkNiwgMHhlN2E4YjM5NywKKwkweDNjZGQwNDExLCAweDFmY2M2Y2QzLCAweGU3ZjU1MzY5LCAweDkwYjJlM2RmLCAweDg0ZjViNTFmLCAweGM2M2Q2ZmNlLAorCTB4ZThmMzBkN2YsIDB4Mzg2YTg3MzgsIDB4OTczYzZhNzcsIDB4MTFkZDk2OWEsIDB4N2NjNzRhMDcsIDB4ZWUwOTUyZGMsCisJMHg0MzY3MjMzMiwgMHhiY2UzYjQzNiwgMHgxMjRjZjZjZSwgMHg2YTY0YmNlMywgMHg1Y2YzMWFjNCwgMHhiYzUyNTZiMCwKKwkweDRiNzgwZDdkLCAweDQwMTI2YjE1LCAweGNlZGVhNzFmLCAweDFmMTE4OGY0LCAweGM0N2Y5YzZkLCAweGZiNDdkODQxLAorCTB4MWYzMzE4ODMsIDB4ZDJkMzJiNDUsIDB4NGM1ODRhNmUsIDB4YmY0YjRmZGYsIDB4NzllZDRiMDEsIDB4MTk4ODVkODMsCisJMHg3MWIyNGM1NywgMHg2NGRjZWMzZiwgMHhmYzE4YjEwMywgMHhlZDFiMjRjZCwgMHg5ZGU3YjRlZiwgMHhmZjE0MTVmNywKKwkweDM3YmI4Yzc2LCAweDM3YmMzMWM0LCAweDM3YmMzMWM0LCAweGU1M2UxYTQ4LCAweGNlYmY5MDc4LCAweGY3OTc1YmJhLAorCTB4NDk2N2MxYjQsIDB4ZDEwZjIwMTAsIDB4YjlmMjhlOWYsIDB4ZGRlOGM1YzQsIDB4ZjY4MmJlZjksIDB4ZGNhMjFmNGQsCisJMHhjNDk0MTczMCwgMHg0MzZjOTEwNiwgMHgyMWYxNjdiZSwgMHhhZmM4N2NlZCwgMHg0MDI0Y2Y3YywgMHg5NmRiOTRiZSwKKwkweDE2ZmJmYWE1LCAweDA2MDRkZjQ2LCAweDUzMGRmOWY3LCAweGIyMTRkYzcwLCAweGUyOTgzYWM2LCAweGM5YTk2OTc5LAorCTB4ZDNhMzcxMGQsIDB4YzI3MjNmMGIsIDB4MTk4NWU5OTEsIDB4MGYyMDc5MmQsIDB4MWI4Zjc5YTcsIDB4OTg0YTk3ZTYsCisJMHg4ZTZjYjg1ZiwgMHgyZWQzMDgxNCwgMHhjMmE4MWI5MywgMHgwMWJhNzQ2MiwgMHg0Y2NiM2JmNywgMHhjN2FlZjMzMSwKKwkweGU5ZmVkOGQ4LCAweDk2MTczOGQxLCAweDkwZDM2OTY5LCAweDkyZjU5ZDRlLCAweDhjNGJmMDA0LCAweDM1ZTU0YTdjLAorCTB4Y2VhOGYxN2QsIDB4NmY5NGNjNzMsIDB4NzkwYzViMTQsIDB4MTM0OTEzNmIsIDB4MTg1YmViODcsIDB4YjFhYzk1ZjEsCisJMHgzNWI3YWFiMywgMHgzOTA2NDk3OSwgMHg1MmFiN2Q4NCwgMHgzYTM1NDdhYSwgMHg0ZDVmNTAwZiwgMHhmZTI4YjhjMSwKKwkweGJmZDdhMTcxLCAweDc5YzM3ZjA2LCAweDQ1ZWEwMTVkLCAweDEwYzg4ZTRkLCAweGEwYWRlN2E2LCAweGExZTJhMzc3LAorCTB4ZTgzZjdiNmQsIDB4OWY4ZWZiMGYsIDB4MDczOWRiZmMsIDB4NTVmZDNiZWMsIDB4OWU4MDc3NjgsIDB4YmJjZjdlM2QsCisJMHhmNGM3MzgwZSwgMHgyZTJjM2RjOSwgMHg0ZmMxODc3MiwgMHhmYTYzNjQ1YiwgMHg3NGFkOGY3ZiwgMHg4MTc3ZTAxZSwKKwkweDllNzkxZmVmLCAweDc3MjU3ZTI4LCAweGU1OTNmZGIzLCAweGRlNzBkZTAxLCAweDUwNmY3ZjVkLCAweDcwYzkzMDU1LAorCTB4ZjExZjkwOGYsIDB4MWZkZWE1NWEsIDB4NDZjN2E0NjYsIDB4MmNiNzhiMWIsIDB4Y2E1OWIxZGYsIDB4NGY3YzYxOTAsCisJMHg1YzdmOGMyNSwgMHgzNzhmNDNmNSwgMHhkMWRmZDAzYSwgMHg2M2I4NTllMCwgMHhkOWJlMDQ4NCwgMHg3NTY2NDM1ZiwKKwkweDY0NDViZGZmLCAweDAyNTI4N2ViLCAweDE1MWU2N2ZiLCAweDBmMzg0NjZmLCAweDJmNmFmN2FhLCAweDhmY2IyNWY5LAorCTB4ZGQ2M2EzMjksIDB4MjdiMGY1NGQsIDB4MTg3YmNlYzQsIDB4MTNlNGIxZTcsIDB4MTI5NTI4YjksIDB4MWNmZGM5NmYsCisJMHhmZWYwZGRmYSwgMHhmMzNkNzQzZCwgMHhlZTFmN2RkYywgMHhkOWU3MTliMywgMHgwNTFmNWVmNSwgMHgyYTY1YjNmZCwKKwkweDZkZTc4ZGJkLCAweDNlZDg4NTk3LCAweDQxZTI2MmY4LCAweGZlNzJlY2Y5LCAweGM1Y2VjNDM2LCAweDY3OGRlMzE4LAorCTB4MDBkYjY1MGYsIDB4YTliMGJmMGYsIDB4MzIzY2M0ZjEsIDB4ZWY2ZGNlMDYsIDB4ZmUyMDM0M2EsIDB4OWY1NmY3NzIsCisJMHg4MjhiZWY1MiwgMHgzY2ExYmI3YiwgMHhjZTU4MjNlZSwgMHhlMjkwMjMwMywgMHhmNmY0MzJiZiwgMHhkNTVmYzA1ZCwKKwkweDNlZjEzYjRkLCAweDhmYWFlZmI0LCAweDljMjc0MmFhLCAweGU5YWQ0YjkwLCAweDZlODc2YTI1LCAweDhiMjBmOTAzLAorCTB4NWE3ZDlkMzksIDB4YzQ5Y2Y5YmQsIDB4OWY4NjZhZmMsIDB4YjdlN2Q0ZGIsIDB4MjA3MjNlMDEsIDB4ZDlmZTViZGYsCisJMHhkYmVmNGEwNCwgMHhkMWYzYzUyYSwgMHg2ZjNkYTVmNywgMHhmN2MzZWZkMywgMHgzY2RhYmU3NiwgMHhlZDZiNzliNSwKKwkweDljNWU2YTU1LCAweDBlNGQzYmYxLCAweGI5N2NhOWU2LCAweDc1ZjRlYjc4LCAweGVhOGEyOTdkLCAweGE5OTE3ZWY2LAorCTB4ZjNjMzkzOWUsIDB4MmQ5ZjFhNDIsIDB4ZTk0NWE1MjMsIDB4YTM0OWY4MzEsIDB4ODRkZjA3NmYsIDB4ZDNmMzhlN2UsCisJMHhiZWI4YmFlOCwgMHgzZjgzYzU0YywgMHg0YzRmZGQ0ZCwgMHg5MTk1Nzg4MywgMHhhNzNhN2E4ZiwgMHgzMjQ2MmFkZCwKKwkweDdjOGRiZTQxLCAweDdkY2RkYWQyLCAweGIzMWIyMTI4LCAweDRhY2IxNjJmLCAweGE4Y2ZjNDExLCAweDE1Y2ViYmY5LAorCTB4MTcxY2RmNjUsIDB4MTRmZTBmZWEsIDB4ZTMyYjZlZTQsIDB4MDgzZDBlZmIsIDB4ZjdlODMxNGUsIDB4ZmY1YzQ1MzcsCisJMHg1NGU0M2E1NywgMHhlOTBmZmZiOCwgMHgxM2YyMGUzNywgMHg0Zjc4N2VjYywgMHg0Zjk4ZTcxYiwgMHg4MDhhMDY1MSwKKwkweDRmMmM2MmZmLCAweDgxOTU0YWZhLCAweDk3ZGIzYTgzLCAweDA0ZTczYzZlLCAweDA4NmRiYmZiLCAweGFiNTFiOGMxLAorCTB4NjllZjBmNDMsIDB4ZTM3YThmMWIsIDB4NGE4ZjRhYjQsIDB4M2Y5YmU1YTEsIDB4ZGFkYWNlODMsIDB4YzcxNzc5ODIsCisJMHhhNzcxYTkyZSwgMHg1OGUyZTY0YiwgMHgzOWQ4YjRmMywgMHg3Nzc4YmRkZCwgMHhmOWE4NzJhOCwgMHhmYTU0MGIzNSwKKwkweGZiNjIxMWRkLCAweDRkMzcwYmU5LCAweGM5NzQ3YTQ3LCAweGExZmQ1NGJmLCAweGY1MGU0NmIyLCAweDRiM2U5MThlLAorCTB4M2U2M2Q3ZGMsIDB4M2U0MGEyZGEsIDB4NWU4NWRmN2UsIDB4YmJhNDQxZTQsIDB4ZGE3NzZlOTEsIDB4MzcxZWVjNWQsCisJMHg3YjgyNDZhMSwgMHhlMjZkOGVlZCwgMHg4NTcxZmY3MCwgMHg3M2ZmN2IxMCwgMHg5ZGY0ZGRiNiwgMHg0NzljNjNlNiwKKwkweGRiMmZmMDc3LCAweDJmYWViYjVhLCAweDkwOGZmOTgxLCAweGYwOGRjZjgwLCAweDQyNWZmMzZiLCAweGQ0YTdhNjE0LAorCTB4MmYzNzc2ZjksIDB4ZjJjNDk5MTIsIDB4N2Y3NWQ0MzQsIDB4ODE1YjljMzksIDB4NzkwNzkzZmQsIDB4YzZhZGNmOTYsCisJMHgzNWY4MzRhMSwgMHgyOGYzOGQ3OCwgMHg3Y2YxMmJlMiwgMHg4ZjAzNWI0MSwgMHhmODc3ZDk3OSwgMHg3NzA2N2RkOSwKKwkweGZkNzBlNWFjLCAweDlhNGU4ZWVkLCAweDdiZjZkMTVlLCAweDMwY2E5YmFhLCAweGZiNDNjYjZmLCAweGVkYjYzYjAxLAorCTB4MjlmNmMyNjMsIDB4Y2Y3ODczZDYsIDB4MGNmNGI3NWIsIDB4ZWVhNTdjYjEsIDB4YTMwODQ5ZTgsIDB4Mzc0YTYyZGIsCisJMHhkZWJiM2ZmMCwgMHgwY2FmOTA5ZiwgMHgwYTI3ZGU4YywgMHg4YzBjYTBkYywgMHg0MTIyYjdkZSwgMHhiMTU5NTdjYywKKwkweGY5ZWViYTdkLCAweDhlMzU3NjhkLCAweDllZjVlYWE1LCAweDI0ZDQ4ZmU0LCAweDY5NmY4Y2M0LCAweDlmYzlhNmYyLAorCTB4ZGE3NzhmMjYsIDB4MGE2ZjY2NjUsIDB4NTkxOTgzODEsIDB4ZDE4NzlmODAsIDB4N2FmYWExYmYsIDB4M2RmOTlkOWUsCisJMHhhZmE1Y2QwZiwgMHhhNzNjNmY1NCwgMHgzMjU4YTdkYiwgMHgwOTZiZDE5NiwgMHhiYmNmODI1ZiwgMHgwZjE0YmJkMywKKwkweGQ4YmRiZDNhLCAweGY4YzNjZmFlLCAweGU2ZDFmM2ExLCAweDM2ODljOWExLCAweDE4OWNhMzNmLCAweDQzZDIzN2JmLAorCTB4ZTkxOWVmOGIsIDB4YzAwN2E0NjIsIDB4NWJjNjdlMDksIDB4MzU4MTZkN2IsIDB4MzhiN2NlMTQsIDB4YWY3ZmI3MDYsCisJMHg0ZDZlZTExNSwgMHhiOWMwYWM5YiwgMHhmOWY0ZWFjZCwgMHgzZTAxZmU1OCwgMHhiMGZiMDc0YywgMHg3NjhlY2ViNCwKKwkweDhkODdlYWFlLCAweDIyNWM1ZGVhLCAweDVlY2JiNTU3LCAweGQ5MjMyYWIyLCAweDI0ZDJhN2I5LCAweGI1ODk5M2UwLAorCTB4MTcxNjE5OTEsIDB4NTgzZThmMjEsIDB4YTRmNzA0NWMsIDB4MzIzODdjNGUsIDB4YmZmMTQyMDMsIDB4NTY0NmYwN2UsCisJMHhkNzc5MTZkZiwgMHhmY2ZiODZlMiwgMHg2OTBhOGE0YiwgMHgyZmQwNzFmZCwgMHg5NWZhMmZhMCwgMHg2ZWZiZTBkYiwKKwkweGY5NzNjNGViLCAweDFmZGVjY2JhLCAweGNmOWQyZTY1LCAweGVkNjZiMWVlLCAweGIzM2VkNDk1LCAweGYyYWVmNWQwLAorCTB4NDE1N2UwZjAsIDB4NGE1YjJiN2UsIDB4NTQyZTIxOGEsIDB4YmE3ODExMDksIDB4Y2UyOTU1ZGUsIDB4YWQ4NzJkYjAsCisJMHg3YmU5ZTNmYiwgMHg0ZjNjZDkxZiwgMHg3NmVlMjFkOSwgMHg4YmFlMmQ3MSwgMHg5NDA1ODc5NSwgMHhjNTg4NzIyZiwKKwkweDU3M2EwNTY3LCAweDZkNmVmZDJiLCAweDI5OTNiNTFjLCAweDVhMjZkNzdlLCAweGQzMTdlMGRjLCAweDk3ZjA3ZWU3LAorCTB4YjIyYTI2ZDcsIDB4YTM1Y2Y1MWMsIDB4NzAwNzdjMWYsIDB4N2NiMTM1YWMsIDB4MGM2ZmZkODIsIDB4YzY1YzhmOGUsCisJMHgyM2VmZDgyZSwgMHgzNGNmZTAyNSwgMHgxYTU4MmNmYiwgMHgxNzI1ZjNkYiwgMHgzN2M4ZTc5ZSwgMHhiMTg5NzhiMSwKKwkweDc2YmI2ZGZkLCAweDAwY2U0OWFlLCAweDI0M2VhOGJlLCAweDFmYzNmY2ExLCAweDg0NTU5ZmQ4LCAweDYxMzU0OWM5LAorCTB4MGVhYWQwZTcsIDB4NTM3NzNjMTMsIDB4Y2YwOGE4N2QsIDB4ODRiOWMwZGQsIDB4ZTA3YTc1NGYsIDB4YTZlZTczNWYsCisJMHg5ZTE4YWY5MywgMHg0NGFlMDQwYSwgMHhkMGI3MWE4OCwgMHhmOWQ1ZDU2ZSwgMHg5ODEwZDM1NCwgMHhkY2UzZTEwZiwKKwkweGNmODQ2ZTcwLCAweGEyZWNkNTMwLCAweGEwYWZlN2YzLCAweGUwODdjNTI1LCAweGZmNzBmMzcyLCAweDg5ZTRmZDRjLAorCTB4NTU5ZmRjM2MsIDB4MmQ3OWFhMjcsIDB4YmUzZTc2MjYsIDB4ZTU1N2RkNjMsIDB4MzlmYjJiNGYsIDB4ZGQwMjhmNGEsCisJMHgyNWIxZmY0ZiwgMHg1M2Y2YzZjZiwgMHhlNmQ2YWZkMCwgMHg4NDI5Yzc1YiwgMHgzNWVkN2YwMywgMHg3MjE5ZTc4MiwKKwkweGUwMzM0OTkzLCAweGIxOTQ0NmNmLCAweDQ3MTY2ZmMwLCAweDZjOTdjYWEyLCAweDY1ZmU5YjNmLCAweDliMzZlOTQwLAorCTB4N2U1MzIzN2UsIDB4OWZjMWZhZmYsIDB4ZTNiYmZmMjIsIDB4NjhiMmFiNGQsIDB4NTlmODczOWQsIDB4MmU3NGMzM2QsCisJMHhlZjMwYjI4YiwgMHg2YmY1NjVhOCwgMHhkMDA2ZTc0YywgMHhjMzU4ZThiYSwgMHg0YWYxYjBlYSwgMHhhM2IzM2UxNywKKwkweDE0M2ZjOGFlLCAweGJhMzE3MWM2LCAweDAxYWU1MGVlLCAweDJjNGMxNmZlLCAweDkwMWMyM2FlLCAweGNiNDc3ZjcwLAorCTB4Nzk0YjU5NTcsIDB4ZTJkMWY4MDYsIDB4NWQ3NDdhNjAsIDB4MzY3M2MxNmQsIDB4MjgxNzliODgsIDB4ZWM0ZmU0MzIsCisJMHhmYTQxZWY1MSwgMHg1Nzg2YTViZSwgMHg3ZjQyNjZkZSwgMHg3ZmMwNGEwOSwgMHg1M2UxODNiYywgMHg1NDY5MGJhMywKKwkweDVlM2M4MWFlLCAweDgxYWU1NDEyLCAweDBlN2ViZDdkLCAweDdlODNhMjRmLCAweDk2YWRmMjNmLCAweDFiY2ZhMDg5LAorCTB4MGYyOGY5ZGYsIDB4ODJiZjczZWYsIDB4MmRmMjMzZjUsIDB4ZjlkMjQzZWEsIDB4ZmY2ZGZlOWMsIDB4ZTRmYmQxY2QsCisJMHhhOWY5MWNmZCwgMHgwMzI1MWRmMCwgMHhlYzljYWZkYSwgMHgzOTUxYjcyMiwgMHgyYzg4NTNhYywgMHhhZDlmODM2NSwKKwkweDA5MWIyZmY3LCAweGQ5MWY0ZmQzLCAweGEwNzBhZjRhLCAweDNhZTMwOTNlLCAweDY3YmIxM2Y2LCAweDdlOGRkNDAwLAorCTB4ZWM0OTY5MzMsIDB4OTQ5ZGRlNTUsIDB4MTdlZTM3NzMsIDB4N2QzNDY2MjUsIDB4ODVkNjEwYjgsIDB4NGE3YmIxZGYsCisJMHhmY2MxNDUzOCwgMHhlZTNiMTdkMywgMHg5NzE4MjM2YiwgMHgzNzM4OTFiMiwgMHg5Yjg5OGRjNCwgMHhkNDUzZjlhNCwKKwkweGYxODk5YWY4LCAweDk0NWU3MjU1LCAweDg3Y2VhY2ZmLCAweDc5MDg1ZjdlLCAweDJjNmM2M2YyLCAweDhmY2U4MWJmLAorCTB4ODIzYWZkMDcsIDB4ODQ4ZTU4YzgsIDB4YTAzNjU5MzgsIDB4M2RmNTgzZDgsIDB4NGZlMWY4MjQsIDB4NTg4ZmZmNjksCisJMHhiMmNhN2M1OSwgMHg4ZmUyZTg5ZCwgMHhiNzE2MGU2NSwgMHhlMmM5YzA3OSwgMHhmMDYyNzE4ZiwgMHhlMjJiYjAxNiwKKwkweGQ4MTcxMGNlLCAweDRiOGY2ZDE1LCAweDBiY2ZlZTAyLCAweGRmNzA5YmFlLCAweGUzMDlhMGVlLCAweDAxOGI0ZmRjLAorCTB4YjUxN2VjMTcsIDB4NWJjODI1NWYsIDB4NmQ3ZjY3NDgsIDB4N2ViNWRkMmEsIDB4YWJlNDkxMWYsIDB4MGJmN2VlMjAsCisJMHg5ZDNmYWIyNywgMHhiYjhmMzA0ZiwgMHg4MDE0ODRmZCwgMHgwY2M0ZGNmZCwgMHgzYzc0NGQ0YiwgMHhkOTgzOWU2OSwKKwkweDE1NzNiZmJiLCAweDA0M2EwNGNjLCAweDE4MTFjNmY3LCAweDM4YmVjYzdmLCAweGI5ZTNkMDEzLCAweGUwNTZiOTFkLAorCTB4NDcwMTE3OGIsIDB4NjY4OTBmMTQsIDB4NWZkMDlkZDcsIDB4NmYwYTM5ZTIsIDB4Zjk2NzNlMTYsIDB4MjIzYzgyZmQsCisJMHhmYzc3ZTI5ZSwgMHhlZTE5NzY4ZCwgMHgxYWRhN2FkMSwgMHg1NmYzMTFiYywgMHhiZGUxMzc5ZiwgMHhlZTRhMmZjMSwKKwkweGYxN2Y1MGU5LCAweDNkMDJlY2FjLCAweDMwNTY3NGZjLCAweGJjZjNlNzBlLCAweDYyZjNlNzA5LCAweDJiZDVmYjVjLAorCTB4MGMwZmRjMjksIDB4YzEyZWYxNjEsIDB4Y2ZkMDA0NDYsIDB4YmU0MGE5ODIsIDB4YWU1ZjNlOTMsIDB4YWZhNmIxZjIsCisJMHhkMTFjODEzNywgMHhjMTFjMjNmYSwgMHgyOTgyMGM3MywgMHhjYjQ4ZTUxZiwgMHgyNzZiNmEyNywgMHg2N2Q0NGY5OCwKKwkweGZjMGYwYjY2LCAweDhiNWQzNzFjLCAweDg4Nzk4NTNiLCAweDI1Mjg0ZDE3LCAweGIwNGRjZjY4LCAweDA1Y2U3ODhiLAorCTB4YmNlMTk5ZjIsIDB4MGY1NTQ0ZGIsIDB4YjJiOGZjNGYsIDB4YmIwN2U1ODQsIDB4OWViZGMzMGYsIDB4N2VmNTc2Y2QsCisJMHg3MzlmNzUzMCwgMHhkNzI3Y2E5MiwgMHhhMTZmMDg5MSwgMHgyNDVkZDdlZCwgMHg0ZDI3ODg2ZSwgMHg4ZmRmYThiYSwKKwkweDVmNjBjYTc4LCAweDU3ZmI1MTRlLCAweGYwODU1ZGRhLCAweGVkZTg5ZjM4LCAweDQ1MGQyOWJmLCAweDJjM2Q2MDI3LAorCTB4ZmMwMDhhMjAsIDB4Njg2MmQ5MzQsIDB4MDlkMjNiMDcsIDB4OWZlYmYwZjcsIDB4ZmQ1MGUwM2YsIDB4MTk5MjRjZGMsCisJMHhlZGE2Yzc5ZCwgMHg4N2UxNGQ0MywgMHhiNWZiNDQ2ZSwgMHg1ZTAzNzI1OCwgMHgwZjk1ZGE3NiwgMHhkZmMwM2YyMCwKKwkweGM1Y2I5MjIyLCAweGIxZjI5ZjI1LCAweDE3MjFjMzdjLCAweDJjYWUwNDZkLCAweDg3NjlmY2E0LCAweDUwZGQ1Y2Y5LAorCTB4NzlkMmI3ZWYsIDB4ZjU5MDNkNWYsIDB4ZmEwODdjMGYsIDB4OTNjN2NhZTUsIDB4OGZkZjQwOTMsIDB4OTVhNWU5NTcsCisJMHg3ZjAxZGYxYSwgMHg3ZjE5ZTJiOSwgMHhjYTc3ODZiOSwgMHgyYzhlZDNlNywgMHgzNzkzNGY3YywgMHg2N2U4M2JlMCwKKwkweDFmOTgxODhmLCAweGYyOWJiZjZiLCAweGFmYzBkM2ViLCAweGZkMDRlZDNiLCAweDViYTU5ZmI4LCAweDY5OWM4MGU2LAorCTB4N2NhYWI0ZTMsIDB4ZDVkNzJjNmQsIDB4YmYwZmRjYWUsIDB4YzBiZmU0ZmIsIDB4YmVjMjhkZDYsIDB4NzVlOGE1MTcsCisJMHg4MzAyNGZiZiwgMHhjZmQ3MmJkNywgMHg2ODc5MDY5OCwgMHhjY2YzMTE3NiwgMHg1MTczZDQ1MiwgMHgxZTkyZmNkMSwKKwkweGRmMWEyZmM1LCAweDljNTlkYWI1LCAweGM5OWZlMzQ4LCAweGUxZTVkZmJiLCAweDg0MGJlNGY5LCAweDg3NDhiMmI4LAorCTB4Y2ZmMWEyYmYsIDB4ZjcxODdmNDQsIDB4ZTYxMjI3ODEsIDB4NjdmOTE4OWYsIDB4OTNmYzM3NTcsIDB4NDAxNjVlN2YsCisJMHg5ZmUxNzU2ZiwgMHhiYTdmOGM0MywgMHgwZmRhMWJlMywgMHhlNDYxNmJkZSwgMHhhYTFjNzc5ZiwgMHhmZjJkZGRiZCwKKwkweGZjZjNjMjVjLCAweGJlNGVmN2FiLCAweDkzNjU3ZWVjLCAweDZhOWY5ZjRmLCAweDYyZDljNzJjLCAweDU0YmIyZmU3LAorCTB4ZWE5NmVmYmMsIDB4YmQwMWNhNmYsIDB4Y2VjNGQ1MzEsIDB4ZTMyNDA5ZWYsIDB4ZWVlZjBhMTYsIDB4ZmNkZWVkMzgsCisJMHhlZmE4NmM5YSwgMHhkYTFlOTgxNCwgMHgxZWEzMzIxOSwgMHg3OGY3NjlkYSwgMHg2NjliN2UzMCwgMHgwNTU3ZTc2MSwKKwkweDIzY2UwNDRmLCAweGU0NWFmYmI4LCAweGQ5MjFkZmU4LCAweDU4NzY2MGVlLCAweGZiOGYwYzUwLCAweDM3ZjFlYzAyLAorCTB4OWQ4YzFmMTgsIDB4MmE0M2NiOWEsIDB4YTY2MmZhNWEsIDB4OTcxZDQ2MTcsIDB4Y2ZlZmMzMzYsIDB4YmZjY2VhM2QsCisJMHgwNjk2N2MwMCwgMHg3OWRmYTNiOCwgMHhjZjc4NGE4ZiwgMHgwOTUxZjU1MiwgMHhmNzZmZTNmNSwgMHhmMTA0NWRiZCwKKwkweDc5Y2YyZDUxLCAweDhiYjc5ZWNjLCAweGZiYzI4NjBhLCAweGExZmVkZjhjLCAweDhlYWQ2NWVhLCAweDVmNDA0MDQ3LAorCTB4MWZkZGVlMWEsIDB4NGIxZTcxZDcsIDB4Mjk3ZTZmN2YsIDB4Njc0ZTUxZjAsIDB4ZjkzZWYxYmIsIDB4M2ZkYjFjNjAsCisJMHgxMTY0NGQ5OSwgMHhiNDcxOTg4NiwgMHhkZWI4NWVmNCwgMHhmY2FmNzhjYywgMHhmZjNiMzBlYywgMHgyN2IwZjMzNiwKKwkweDJhZjJiZGY2LCAweDM3ZWYxODdmLCAweDhhNzdmNmE3LCAweGU3ZWZlYzEzLCAweDY4NDFmNjVhLCAweGRkNmNjODg0LAorCTB4ZDczNTRhMGUsIDB4MjZhMzNmMzAsIDB4OTM0OWY4MWIsIDB4ZjhhM2ZjNDMsIDB4NDQzMjdlMGIsIDB4YjcwNmJiZjcsCisJMHhkMDdmZjNhOSwgMHhhOWZiYjAyZCwgMHg0YmVlMTIyMiwgMHhlZmIwOWNmZSwgMHgzNjNhZWE4MiwgMHg0MGY0YzljYSwKKwkweGU2MTdlYWVlLCAweGNiMjM5YzAzLCAweGNiYTA2Njk1LCAweGQ3MTYyZWIzLCAweDViMDkwNWY5LCAweDZlNmU4MWIyLAorCTB4ODI1M2Y3MDEsIDB4MGJmOTNjYTIsIDB4MjIzZGYzYWUsIDB4ZDNiMTBlOTQsIDB4ZTI3ZDNkZjYsIDB4OGZmOGMyNDYsCisJMHg5YzYzM2QzYSwgMHhlZDA5OWY2MCwgMHgzMWJiZTA4NywgMHg4MjQ3NzNlMywgMHg1ODhmYjcxZSwgMHg5YWViMDQ5YiwKKwkweGFiODUzNzA2LCAweDEzYmQ5Yjc4LCAweDgxYWUwZDBlLCAweDhmOTdjNjRlLCAweDAwYzZjYjNhLCAweGQwM2JlMDFlLAorCTB4OGU0NzRkNGIsIDB4OGQ3YmUwNTksIDB4Y2Y3YjgyMWYsIDB4ZTI4ODNlMzAsIDB4NGU4M2UwMGIsIDB4NDAxNmUwYmUsCisJMHhhMjgzYzM1ZCwgMHhmZGI3Y2ZhZSwgMHg4YjQyZjg4YiwgMHgxN2M4ZjQ2YiwgMHg3ZTcwYjcxMCwgMHgwYjk4YmUyZiwKKwkweDA1ZjIzNTc4LCAweGNlM2NlN2I1LCAweDUwNWNmNjE4LCAweGM2OTM3OTYyLCAweGU3YjEzZmU3LCAweDg5NmVmYmUzLAorCTB4ZDkxM2RlNjAsIDB4NmJiZjY1NjcsIDB4N2RjMDQ5ZTgsIDB4ZDhiOGRmOTAsIDB4MWM5ZjZkOTgsIDB4MjhhNmE0Y2IsCisJMHg3NjY0ZTU1OSwgMHgyYTNiZjZiZCwgMHhkYTFjYzIyMywgMHhhMmE4MjM5ZiwgMHhiY2VkMGRiOCwgMHhkZDI3YTg3ZSwKKwkweDMxYzhmZTJhLCAweDQ2ZmI4MzhlLCAweDAzM2UzNzMxLCAweDEyNzBkMGVjLCAweGNjMjM2YmQ4LCAweDg3OTA2MTI1LAorCTB4MTk4OWI2NWQsIDB4ZGFlNjNmNjAsIDB4ZmNjMzY0MjYsIDB4ZmFiMjFlNWYsIDB4NWVkMjU4NGQsIDB4OWJmZTViZWUsCisJMHg3ZGE3NzJhZCwgMHg2NmMzZTlhNSwgMHhmYzZkNWJiNSwgMHg0YzdmMmEzNSwgMHgyNzc5ZDg1MiwgMHg3MGQxZWJkMCwKKwkweDkwMDNlYjY4LCAweGMyZTBlMDA5LCAweGRhZGY0ZGIzLCAweDIyODc4ZjUwLCAweDAwOTM2ZjE0LCAweGZkODc4YTBlLAorCTB4ZmIwNDY5MWMsIDB4MjRhNGRmMjEsIDB4YjAzYjA2NGYsIDB4MzgwMDU4NGYsIDB4OWQ3ZWY2ZGIsIDB4OTJjZWYxMDksCisJMHgwMjFmZWJkMCwgMHgzZWRhMjViYywgMHgwZmJmNWJhYywgMHgzNWI3YjQ2YiwgMHgzZmYzNDg3YiwgMHhmMzQ5N2IzNCwKKwkweDgyYWVjMTdiLCAweDFmZDUzMmY2LCAweGJlZDk5OTcxLCAweDA1YjA4NGQ4LCAweGU0Nzg1M2VmLCAweGEyOTU3Y2FjLAorCTB4ZTc0MGIzY2EsIDB4ZTNjZWEyNTEsIDB4NzA4MmQyNjYsIDB4NGNhOWY3NjksIDB4NzI1MWYxNTMsIDB4MzlhYmZhODgsCisJMHg1NGM4NGVkMCwgMHhlYWE5ODc4YSwgMHhkZDUzMmE3ZCwgMHg2ZTIyZmJmYSwgMHgzZWZiMWIxZSwgMHg5ZTlmYWQxNSwKKwkweDFiYWUzN2RlLCAweGEzZjYxYWQ3LCAweGM4Nzk2ODdlLCAweGY5NGZlZWM3LCAweGMzZjk4ZmJkLCAweDdlZjAwN2UzLAorCTB4YjFkZmQ2MDEsIDB4MDlmZWVjNTksIDB4MjFjM2MzMTcsIDB4NzYzYWY2MjksIDB4ZjFlYjk1NTEsIDB4OWMwZTQ4YTYsCisJMHhlN2JmZGVjNywgMHgxZTZlYjhlZiwgMHhmN2Y3ZjNkOCwgMHg3NzFjOGVjMSwgMHg5NzkwMjA0MiwgMHhhOGM0ZmUzYiwKKwkweDE4MGZjYzc4LCAweDY5NWYyMzJiLCAweDZmM2Y3YWZkLCAweDljZjYxMWI0LCAweGNjZGVmZjQ0LCAweDcyOGYwYTQxLAorCTB4YzE2N2MwMjUsIDB4OGY1Mzk1ZjIsIDB4OWRmZDBhM2MsIDB4ZTg5MDJhM2YsIDB4OTI0NTFmNzMsIDB4ZTVjNDIwNjcsCisJMHgxZGRmZDQ4YiwgMHg3YjMxYzgzYSwgMHhhODNmNmI0YSwgMHgxMWM3ZGVmZSwgMHgyMTIxNmY5NSwgMHhjNTY3YmI0MywKKwkweGE5ZTc0NTFjLCAweDFhMWZmZGVhLCAweDJmMWVhNzVkLCAweDc0ZTQyMTNlLCAweGZkZmMwZmE1LCAweDVhMTBlMjMzLAorCTB4YWE5Y2UxZmMsIDB4OWZmMzQ5MGYsIDB4ZjVjZTdjZjAsIDB4NjAwYTc3OGQsIDB4YzY5ZjVmYmYsIDB4ZGM2YTI1MTMsCisJMHhlOWVhNjQxYiwgMHg0ZTIxYzU0NywgMHg2ZmY2MGQzYSwgMHg0ZThmMzNmMywgMHhiN2U1YmM4MywgMHhmNDgxNGM3OCwKKwkweDk5YmU3Njg2LCAweDNlMTZmNTAzLCAweDQ2MmFiZGU2LCAweGJhMWY1ZWZjLCAweDk5NTVlZjEzLCAweGEzZTRjZjFiLAorCTB4NWZjN2YxYTcsIDB4Mzg2NGY5NGQsIDB4M2IzMDlkZDAsIDB4NGJkZDhmMzAsIDB4ODFlZmE0NjIsIDB4MTQ5MWZmM2QsCisJMHhiZTNkZGExOSwgMHg5MWJmYTNiYiwgMHgyYTljYWYwZSwgMHg5ZWFjN2RjMCwgMHhkYmU0NjFlOCwgMHhmZTllNzQ3ZCwKKwkweDUzNzdlMTJiLCAweGJmOGZjNDJkLCAweGZhYzJlYTliLCAweGFjMzRiZWFiLCAweGRkZWFmYzZiLCAweGQ4MTI2NGZiLAorCTB4NGU5ZjFhNzksIDB4MzM3YzYyNDksIDB4NDlhM2Y3NmUsIDB4MmY0OWRlYzQsIDB4YzU4NmRlMjMsIDB4Yzk3ZmZlMzMsCisJMHhlZTI1ZDlhYSwgMHhhM2U4ZDM1OSwgMHg4NDNhZTk3NywgMHgyZDI3ZWE4YywgMHhhYTU2Mzc5MCwgMHg3MGZiM2FjMiwKKwkweDQ0MjVkYTExLCAweDVjNjJjZjNkLCAweGI3ZjM2NmRmLCAweGRhNzUwMTRkLCAweGNjZmVlZmQzLCAweGY1N2FjYjk0LAorCTB4NmZjNTM5N2IsIDB4MGViMDBiZDUsIDB4OTlhYjA5MTYsIDB4NzhlZDUzMWUsIDB4OWQyMzFlMGQsIDB4MDhhNTIzZGYsCisJMHgxOWYwNzc3ZiwgMHhlNzA4YzBmOSwgMHhmNmY5MWQ0YiwgMHhkYTA3YWUwYSwgMHgxOGNjZTBlZiwgMHhjNjI2MjU5OCwKKwkweDhmODY4Nzk4LCAweGM3YWU4NDk5LCAweDhmNWZiZGQ5LCAweGRiZDc4YzZmLCAweDE3OGVlN2VmLCAweGRhZDAxMWZlLAorCTB4ZTkxOWJjOWQsIDB4ZjRkNzZjNjYsIDB4OTAwYzExNDcsIDB4ZWMxZmE1OGIsIDB4MjlmMWI5OTMsIDB4OGJhMmRmNDgsCisJMHgzYWU4NTExMiwgMHhjZmU5ZmE0MywgMHgyYjkyOTNmNSwgMHhiOTU2ZGY5MSwgMHhmOGVlYjNkOCwgMHg0ZjIyZmFhZCwKKwkweGY5M2IyMzNjLCAweGQ4N2E2YzRlLCAweDViYjc3YzA2LCAweDFjNDFiN2E4LCAweGY0ZmIzYWY1LCAweGMyYmQxMDNhLAorCTB4ZTI2NjBiY2YsIDB4MTMxMTE1ZmQsIDB4OTRkYWQwODEsIDB4ODg2Njk5ZDAsIDB4MjQzZjc4MzMsIDB4MjBhMWJlNzgsCisJMHhmMDMyN2ZiNCwgMHgwYjQyYWJlOSwgMHhlNzZkNTlmYSwgMHhjYTM4NzkwOSwgMHhkNTBhNmNlZSwgMHg2YjJlYzBkOSwKKwkweGYzZTc2NjRhLCAweDVkMTAyNjBlLCAweDc4YzVmNGZlLCAweDhlOWE2ZmE2LCAweGM0YTY5ZDllLCAweDYyZWUxZjY4LAorCTB4Mjg4MzNjZmMsIDB4OWZmNDM5YzksIDB4N2YyOWViNDUsIDB4YzdkYzFmODAsIDB4NDI5MjcxODEsIDB4MzI1YWZkY2UsCisJMHgzOTczMmRkOCwgMHhmNmRhMjNmNCwgMHg5OTJkNzk4ZSwgMHg3YjdhZGJjMiwgMHgyOTk5ZWEwMiwgMHhlOWRkZjc0ZCwKKwkweGZlMDg4NGEyLCAweDZmM2UyNDYzLCAweGZlZjBlMzJmLCAweDhkZDkyMjg0LCAweDU5YzVhMmY1LCAweGY5OGRmN2U4LAorCTB4MDk0NjY5MjYsIDB4YTIyMGRmYjQsIDB4YWY4NTMzZGYsIDB4NzU1ZTIwMTQsIDB4YWJjMzhkM2EsIDB4OTE3MGY2M2MsCisJMHg2MjNkZjg1YSwgMHgwZTM2NzRmZiwgMHhjMDkzZjk3MSwgMHgyNGE3N2QzZiwgMHg2NmZlMDQ2OSwgMHgwN2Q1YWM5ZSwKKwkweDEyMmVlZmUxLCAweGZhYjZmZjgzLCAweGNkZmI3M2E1LCAweDJjZjU3ZGI0LCAweGE3OGRmMzBlLCAweDNmODgzMmI4LAorCTB4ZDY4YTdmOGEsIDB4NWJhZjM4NGIsIDB4YzAwNWE5NDIsIDB4ZjU4YTMzZDcsIDB4YWFjMzFlZTcsIDB4ZDRhYjM5M2QsCisJMHhmYmQxMDI0NiwgMHhlNTBiOWNmOSwgMHhmZGI1YTBmYSwgMHhmMTFkZmM1NiwgMHhmOTgxMjJiZCwgMHhhMzdlNzI2OSwKKwkweGU3YjNlZmNhLCAweDliYmVlOTI0LCAweGE5ZGQ5ODRlLCAweGFhNGRkNWM5LCAweGZhYThkZGZjLCAweDE5M2Q3M2NkLAorCTB4MDk0YmYxYmEsIDB4NDBmZTg3YjMsIDB4NjQ4MTBiZGEsIDB4N2VkOGI4ZjcsIDB4OTZmNmI0ZjQsIDB4MjVlMWYzYzMsCisJMHhkMDY4ZGZiZSwgMHgzMTBkMzc4NywgMHhlNTdjYmRmOCwgMHgzNDhiZTQ1YSwgMHhjOGY3OGRjZSwgMHgzN2VkZjViOCwKKwkweDhkZDdkNThmLCAweDBmZDQ2YmYyLCAweDhmOGIyMGIzLCAweDM0MjdhYWVmLCAweDJmNmIzMDdkLCAweDY4M2M0MjJmLAorCTB4MzNjNTNlNTYsIDB4YmI3YWM1ZGEsIDB4MzE3ZDI3YmQsIDB4N2QxYmFlMjYsIDB4MTdiZTQ5NzEsIDB4ZmEyZTkwY2MsCisJMHhlZmUyZTNlMiwgMHg0YjdlMmZhNSwgMHg1NGIxOTZkZCwgMHg1NzhlZGZhZSwgMHhhNGZlY2RkNywgMHgyOThkZTgzZiwKKwkweDgxNDc4ZWZjLCAweGJhZThkYThmLCAweDQ3YzE4ZTY5LCAweGM1YTNiYWRhLCAweDFjYTg4YTAxLCAweGM1MzgxZWEzLAorCTB4NWNhNjYzZjYsIDB4OTFmZTI3NGMsIDB4MGU4MDcxOWQsIDB4MTJlZDQyM2QsIDB4YTk3YjBjNzcsIDB4ZTUxYjNlMzUsCisJMHg2OGVmNDNhYiwgMHgyZWNhMjU3YSwgMHhiODdlZjMxMSwgMHhkYTg1MzI1ZCwgMHhjMDJlNTJhMywgMHgyYmUxMGZkNywKKwkweDI5MjVlZjUyLCAweDg4MmI4NDgyLCAweGMxOWRhNjFmLCAweGEwNTc5MDM4LCAweGNmYWUyY2ZlLCAweDgxN2YyMjRmLAorCTB4M2IxMmUzZmUsIDB4YWY2OGMzZTUsIDB4MGFlODcxNjgsIDB4ZTk0ZjY2OTcsIDB4MWUyM2E1ZjksIDB4YzNkZDkzMzksCisJMHgxMTQ5ZjFhYSwgMHg3ZmU0MTNlMCwgMHgwNGZiOGYyNiwgMHg3ZmQ0MWJmZiwgMHg4MDAwYjMwMywgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYzVmZjAwLCAweDU1NTQ3ODA5LCAweGY1NzlmMDk2LCAweDU1NDkyZDVlLAorCTB4MTQ2Y2FhOTIsIDB4YjYxMmYwOGIsIDB4ODQ1ODI0ODQsIDB4NTkxNmVjODAsIDB4YTAxNGEzNTgsIDB4ODE2OGNiODAsCisJMHg5YTEyNmIwYiwgMHg2OWVlOWM3MSwgMHgwMjQyYTZmZiwgMHg4M2I3NDM0MywgMHhlOGNlZGFkMiwgMHgzYWQ4NTdmNCwKKwkweDA4YjQxYTgzLCAweGQwOWQwMzAxLCAweDU4NGM1MDE1LCAweGY4MmUwODM0LCAweDFhNmQxYWQ5LCAweDg0NDkwZWQxLAorCTB4YmZiYjQ2ZDYsIDB4NzM5Y2ZmY2YsIDB4MmFhYTRiZWYsIDB4ZmZmZjRkODUsIDB4YjQ5ZmRmM2YsIDB4ZGVlZmI5N2QsCisJMHg2N2I5ZWY3NywgMHg5NzllZTczZiwgMHhiMzU1OWJkYiwgMHhmNmUwMDhhZCwgMHgxNDA3OGE5OSwgMHg3N2YxZDAwMCwKKwkweGUwNDJjMDIyLCAweGFkYWNjMzdmLCAweGM3OGVmMDE2LCAweDY5ZmNkN2JlLCAweGU3ZjgwZDg3LCAweDljMmZmYzNiLAorCTB4YTQyY2ZjOTAsIDB4OTAwYmNmNTAsIDB4Y2U1NGIwMDksIDB4N2Q1N2ZjNWYsIDB4M2M1ZTNkMzMsIDB4NTJmZTdhMjcsCisJMHg5MmI5ZmQ5OCwgMHhmODFiNzAwYywgMHhmNzFjMzBjZCwgMHhmZjhlYzVmMywgMHhjNzE1NGJlYywgMHg3ZThiMmU5NywKKwkweDRhNGNlOTllLCAweGZmODc5MGJmLCAweGJlMjMwMTE4LCAweGQ0Y2EwMTUzLCAweDIyYjc5ZGJhLCAweDU1MjdkZGJjLAorCTB4MzM0YzU1OGYsIDB4MzkwZmZlZDEsIDB4MzUwZmZlYzUsIDB4N2M4MDBjOTcsIDB4MTY3NGRmODAsIDB4M2RiMWY4YTcsCisJMHgxYzIxMTFiNiwgMHhkMWJhZDAwZCwgMHhlYzcxZWRjNiwgMHhlZmM1ZjEwNywgMHgzYzY2ZTdlOCwgMHgyMWZjMDU5ZiwKKwkweDUyYjRiNjA3LCAweDQ4MDFiNzIxLCAweGM0ZWQxODA1LCAweGZmNjAyNzQ1LCAweDBkM2Y5ZTJhLCAweGMwMjQ4NmM3LAorCTB4NWMyNDczZWYsIDB4ZTdhZjAwZDksIDB4ZjEwNGU3OTgsIDB4NWViOGMzYmQsIDB4ZTMwZGQ3MDAsIDB4Zjc1YzAxZmEsCisJMHhmNzI3NDZjOCwgMHhlNmU4ZGI1ZiwgMHg0NDJlMGRmZSwgMHhmYWMwMDY2YSwgMHgzN2FmMjcxNCwgMHg4Nzc2ZjcyZiwKKwkweGUzNWJkZjFmLCAweDUwZTdlNmNjLCAweGY4NDRkYTNlLCAweDdiMmZlMDM2LCAweDEwMDQwODZhLCAweGFjNzdhZmRmLAorCTB4ODA3NDk0ZDAsIDB4YjFlMmI3MmEsIDB4MDFkMWY1NjYsIDB4OGU1OGUzNGYsIDB4YmUyNWNiZjMsIDB4MTAyYWI3MmIsCisJMHgxZmU1ZTdjNCwgMHhjNDA3MmJhZSwgMHhlZTMzNTc1ZiwgMHgyYWE5Zjg4NywgMHhmYzM2ODM1NSwgMHg2M2QzNDk2NywKKwkweDBjZGY0NTNiLCAweGRlZmEwOGQ2LCAweDMzMDI4ZTIyLCAweDg2Y2QxNmI1LCAweDI4ZjAyY2ZiLCAweGYxZjcxNTFlLAorCTB4NmZmNzg5MzYsIDB4MWQ0MTJhZjUsIDB4Mjc4Yjc5ZmYsIDB4NjM4NzFlOWEsIDB4YWU1OGJlZTgsIDB4MGZmZTgwYjMsCisJMHg0NzMwNWJkZiwgMHg5ZDcxODYwOSwgMHhkZmEyOTMwNSwgMHhkNjc1N2M1YiwgMHhmZWQ4Y2FlNywgMHhlODk4YjQ3YywKKwkweGJmM2ZiNjNlLCAweGI3NzQ0ZWRjLCAweGMxODYzZmUzLCAweDk1ZmJhMjMwLCAweDhkNmZhNThiLCAweGM1YmEzZTg1LAorCTB4OGU3NGIxYjYsIDB4OWQxNmJmMWQsIDB4NjczYTI3ZWYsIDB4YzZjZTliNWMsIDB4Y2U4YjdmZmIsIDB4OTA0ZTExMGYsCisJMHgxYmY0NzBiZSwgMHgzMDA0OWU4YiwgMHgxYTA3ZTliYiwgMHg1NWY2NzlkMSwgMHgzMmFkZDc4ZCwgMHg4NjE0MzNjZSwKKwkweGQ0ZmU3OWQyLCAweGI3NmZmODU5LCAweGFhZmNkZjQyLCAweGZlMmQyZmE2LCAweGU3OWY2YjgyLCAweDIyYmZlZDZmLAorCTB4NjlmZGU3NDUsIDB4ZGY3ZTZmNWYsIDB4ODAzNGYzYmUsIDB4ZjljZTc4YzEsIDB4OGRmOGQxMzksIDB4YmQyYzZiYTUsCisJMHg2MmY3Y2ExNiwgMHhlNjM1YjVlOSwgMHhhMDVkMDYxYywgMHg2MDY4OTkxMywgMHg1NTVmYmMxYywgMHhkMTZiOGUxOSwKKwkweDE2MmU5N2FkLCAweDdlNGYwOGZmLCAweDVmODA3MWZmLCAweGQ2ZmFiOWYzLCAweDc2ODI3NDkzLCAweGUwMjA1N2NkLAorCTB4MDNjODQ3MzIsIDB4MDUyMDc1ZjIsIDB4MGFkZTViZTksIDB4ZWMwNDQ0ZTEsIDB4M2U3MzhiOTYsIDB4MjhmNWE4ZDcsCisJMHgzOWM0NjlmMCwgMHg4MzUzZTdlOCwgMHhmYWRmNmFjZSwgMHhiMjA3NTc2NSwgMHg5NmZiMTlmYywgMHgxNGIwMTA2OSwKKwkweDk3MjE3M2QyLCAweGQyNTVmMGIxLCAweDdlNjkyMzNhLCAweGNiNjhmOTgwLCAweDEwYjJkMzJlLCAweDA1YmE2MzllLAorCTB4OWI1MWY1ZWUsIDB4NGUwM2RhMjgsIDB4OWQxYTA3YTEsIDB4ZmJiNzVlMjYsIDB4NmUwOTliMmIsIDB4ZjBlNTc4MDQsCisJMHhmODQwNjI4MCwgMHgwOWU3NTYzYywgMHgzMzIxOGJkMiwgMHhjOTQ1ZmJmMCwgMHg5Y2RmY2YzYSwgMHhkYzA0ODEwNCwKKwkweDliNzZiNDFmLCAweDJiNDRmOTBmLCAweDM5NDFjODA2LCAweDgyNTkwNmQzLCAweDlkNjRiODM1LCAweGRjOTFmNjE2LAorCTB4YTgzNDdiNzUsIDB4ZDFiYmI5NDYsIDB4ZTA0OGVmNzgsIDB4NmM5MjQwMmUsIDB4YTk5NDc0ZmUsIDB4MGZkZThiMjYsCisJMHg3OWM1NGZiNywgMHhmYTZhMTUzNywgMHhiMmUyOWMzNiwgMHhmMWEwM2ZlYSwgMHg5M2FiNjZhZSwgMHhmODNlZWJkZSwKKwkweDVhNjYyZGNmLCAweDIwZjAyYmU3LCAweDMzNWFmMDg0LCAweDRmOGUxNTMyLCAweGE0ODM5ODczLCAweDkzZDRjYTM3LAorCTB4ZGRmYjA5YWEsIDB4OGZhNDAwM2QsIDB4OTcwYjJkYTYsIDB4M2E2ZGQyMDAsIDB4YjEzOGQ3YjQsIDB4OGM3NDQyOWQsCisJMHhkMGJmYmY0MywgMHhkZTg0MzM3OSwgMHg5YTc0ODgxYSwgMHg0MzM0ZTkyMSwgMHg2NjkyYWJlYSwgMHg0OTQ2ZjU5NSwKKwkweGFjODQxYTkyLCAweGIzNzRmZDNlLCAweDQwOGNkMWE0LCAweGVlMGE0OTdiLCAweDNjNTM0MzNiLCAweGY5YmZkODM1LAorCTB4OGZjNTE2YWEsIDB4YmEzZTkzMmYsIDB4OTUxZjRmYjEsIDB4M2RiZGY1YzksIDB4MDE5Njg2YmEsIDB4ZmYzNDQyNjYsCisJMHgzZDBhMzU5NiwgMHg3OThiNjI1NCwgMHhiZTBmZWQyZSwgMHhlNjU1N2NjOSwgMHg0MjlmMWU4YywgMHhmYmY5MTNiYSwKKwkweDgyNWU4YzYyLCAweGE2NTNmYjE4LCAweDAzYjkzNWZlLCAweGM1OGFmMGYxLCAweDg0NTRkZWZiLCAweDE5YjRlN2JiLAorCTB4NzBlN2M1OWUsIDB4ZmI5MzNiMTEsIDB4YzYzMWE3ZTMsIDB4MDdiNmM1MWUsIDB4NzU3YTI3MGYsIDB4ZTIxNWViODQsCisJMHgwN2Y1MDcyMywgMHhkN2IxZjU3OSwgMHhhM2I2M2Y5ZSwgMHhmMThlOThhNywgMHgwZDIyZGQ0YSwgMHhjZjJkOTliMiwKKwkweGYwZmIzM2JhLCAweDkyYmYwZmRlLCAweGFkNzhiMTBlLCAweGRiZGU3YTk3LCAweDhlOGQ3Y2U4LCAweGFkOGYwZmRiLAorCTB4OTc5ZWQ4YjMsIDB4NDhkNzQ5ZmMsIDB4ZjhiZGZkZjUsIDB4OTVlNWU0MzQsIDB4ZTI1ZTg5MGIsIDB4MGMyZTU3ZmYsCisJMHg0YWZkYjJmMiwgMHgwYzNlNTlkMiwgMHhmZTc4Mzg3OSwgMHg1MWU5MjI3MiwgMHgyMWFlYTdjNCwgMHg2Y2I4ZjQ5ZiwKKwkweDlmOTk2NzllLCAweDA2ODQxYzg1LCAweGMzNmUwYThlLCAweGMxMjQ4NWZlLCAweGY2MjRhZmY3LCAweGJjMjNjZjFjLAorCTB4M2NmMjYyZGYsIDB4ZWI2OGRiNGIsIDB4MjAyYTJmODcsIDB4ZDE3NWI5ZmQsIDB4ZTI4MDMzNzksIDB4Mjg4N2U1MDUsCisJMHg4NGVlOGE0ZiwgMHhhMDBkYjFiYiwgMHgwNWZmMTEzYywgMHg3MjQ4MjE1MiwgMHhkMDEwODY2MiwgMHg3ODVlMzViZSwKKwkweGQzMTlkYTlhLCAweGZiYzIxNGY0LCAweGRkYjM1YzY1LCAweDI5ZTllYjQxLCAweGQ3ZjBmN2M0LCAweDA1N2QxMzJiLAorCTB4YmY1ZmYxZmQsIDB4ZWUxYTdjMTEsIDB4ZTZkMWIwZDMsIDB4MWMyZjUwZDMsIDB4N2VlNGU4ZDgsIDB4YjczNzQ2ZTMsCisJMHhkY2VhMzY4NywgMHhmYzkxM2E2ZSwgMHhhYTFmZjI0MywgMHgxNjlmMTZiYywgMHhhNWU2NTdhMSwgMHgwMzMwZmQwYSwKKwkweDM1YzEwZWY1LCAweDAwNjA5NDAzLCAweDIzYzY2Zjc5LCAweDcyODhmMmMwLCAweDEwYTRkYzEwLCAweDM5M2NmMGJkLAorCTB4ZmE0NGY4N2QsIDB4ZTg4OGVlNWMsIDB4M2I1NmFkNDMsIDB4ODJhNTkzMjEsIDB4Njc5ODVlZTksIDB4MDlkMWY3ZTIsCisJMHhkNTlmM2UwOCwgMHgzZmQyM2U3ZiwgMHhmYzhjYmZhYSwgMHhlZmMzODQxNiwgMHhiMGI5OTZmMiwgMHhiMzdjMzkwZCwKKwkweDdhZGY4ODVkLCAweDRiZDFlOTY1LCAweGY0YjlmZGMwLCAweDQzYjk1ZWJjLCAweDhmZWI4NGJkLCAweDFmODRjZjBmLAorCTB4OGYxOGJkYTIsIDB4ZTJiYzIxODQsIDB4ZmYwNDVkY2YsIDB4MTAwYjE2ODQsIDB4YjJiMGQwN2QsIDB4ZjIxYTE2N2MsCisJMHg1Y2EyYjVmOSwgMHg4NDQ4ZmRjMCwgMHhlZjhjMWJiZSwgMHhjNGMzY2I1OSwgMHgyM2EwMDc0ZiwgMHg2NDVlZjA4ZCwKKwkweDdlNDlkOWYzLCAweDNmMDRiOTk3LCAweGRkZGI5NTc4LCAweDM5MzdhZTBhLCAweDA5NTFlMmMzLCAweGYxYmVlMWI0LAorCTB4MmQ3ZjExZWIsIDB4Y2UyMWI4MTksIDB4MWNjOTY5NmYsIDB4YjcxM2U3YTIsIDB4YzkzZWYxYmQsIDB4MDhlNmQ3YjcsCisJMHhjYzk4NmNhYiwgMHhmNjExMWQ5ZCwgMHhlMzNjMDA3YywgMHg3NDkyN2YyNCwgMHg0NzY4NzdkYywgMHgwZTRlM2Y1YSwKKwkweDZhYmI5ZWIwLCAweDZiNWU5MjA5LCAweDA5ZWM5MzNkLCAweGFmZDMzZWUzLCAweGFjYmZkOGRhLCAweDZlNTExN2E3LAorCTB4OGYyNjI3MGYsIDB4NDIxMzNkNjUsIDB4NjNmMjQzMGQsIDB4NmQ5OGU3MTMsIDB4M2MyM2FmZjYsIDB4N2EzZTY1YTAsCisJMHhlZGZiZGYwYSwgMHhhZmQyMDA2NSwgMHg1NDNmZGJkMywgMHgzMTJkMGZjOSwgMHg0MGU4MGVlNSwgMHhhMzJhOGYzOCwKKwkweGYyN2RhODUzLCAweDZlN2NlNGUzLCAweDEyNzcyNGNmLCAweGVjOWIwZTdlLCAweGNlZmJlZDNhLCAweDA0NzRiZDQ2LAorCTB4OGRhOWNiZjIsIDB4ZjkwMjNhNTAsIDB4MzY4ZGFkZTMsIDB4NzQ2ZjRmNmUsIDB4YTM2NjdiNzIsIDB4MzhhM2RiOWIsCisJMHgzYWYzZmM0ZSwgMHhiZDdmMTM4ZSwgMHg2ZmQ0ZTM4MSwgMHg0ZjZhNzFjMywgMHg3YWQ0M2FlMCwgMHg0ODk4NzJkZiwKKwkweGU1YmM2NzdlLCAweGJjMmRhOGQwLCAweGZhZGI4OTJiLCAweDc0MmM5MzNiLCAweDUwYzljMzhlLCAweGZjNGZlYzY3LAorCTB4MzcwYzRlMTQsIDB4MmVlNTA3ODAsIDB4ZGI1M2ZkZDUsIDB4YWQzZjY4MGQsIDB4MWM2NTAyZmUsIDB4Zjc1NGQ0YzAsCisJMHhhZTNhNmQ1YywgMHg4ZmU4N2IzYiwgMHgxOWYxYzJiZSwgMHg2YTdlYzNhOSwgMHgzYjZmNzg0MywgMHg4OTM4NjhlMywKKwkweGY1YzdkMmZkLCAweDNmODgzYTlmLCAweDkyYTIyNDRmLCAweGI3NjQzYzI0LCAweGM3MzY1MTc5LCAweGM0MThkMjkzLAorCTB4MjRjMmY3NjgsIDB4ZmQxOWE3ZWMsIDB4YzhhNWI5ZWMsIDB4M2E0YTRiMGEsIDB4YjAwNWMwZjIsIDB4NzNlMWIxZjMsCisJMHgyNWRmODg2ZCwgMHg1MTNmZmY3NiwgMHg5YjY4MTJkZiwgMHhmYTlkM2E1MywgMHhiYzkyNzAxMCwgMHhjYjIwZTYyYiwKKwkweDdkMjUxMGZiLCAweGFkYmZkYTExLCAweGQ0YzRmZjBlLCAweGFiYzA3ZjA4LCAweGY0OGQyMWZjLCAweDAyYWY0NGMzLAorCTB4NzdhNjc0YWUsIDB4ZjdkMmE0NzAsIDB4ZDViNzk4ZGMsIDB4MTUzMTM2NTEsIDB4MmVkN2Y3ZjksIDB4YzI2OWY5OTUsCisJMHg3NDFiYzUzNCwgMHg2MzVmOTdmNCwgMHg3YWYzODRkZSwgMHhlMjZmZDEyOSwgMHhkNGI1NTljNSwgMHhlMmUzOTgyZSwKKwkweDRkZDk2ZmJlLCAweGE1ZmYyNGI1LCAweDVmYmQ2YjhlLCAweDVjODdlZmMyLCAweGM1NDdkNjY2LCAweDYzOGJjZTFhLAorCTB4ZTM3OThkMTcsIDB4ZmZjOGM5OTEsIDB4MGM0YjY5ZWUsIDB4N2Q3YzRiM2UsIDB4ODQ5MzVmZDYsIDB4NTY3NzMyZmQsCisJMHgzNDc1MmFhMSwgMHg2YmI1ZGY3MCwgMHhiZjk3OGQxYiwgMHhlNTcyYzBkZSwgMHg1OWU4ZjI0OSwgMHhhNWVkOGFjNCwKKwkweGQzM2UzODY5LCAweDI0YzI3OGExLCAweGE5M2VkMzJhLCAweGE3NzFhMzRkLCAweGNkYjQyMWUyLCAweDU1M2I4ZWY0LAorCTB4NTQyM2UzNDQsIDB4OWZlYTRjY2YsIDB4ZDg5ZDRiZDUsIDB4NGU2NmQxOWUsIDB4NjZmMzg0YmQsIDB4NmM3OGE0ZTcsCisJMHhmMDk5ZGVmOCwgMHhmZjEwYWU4ZiwgMHhmMjQ5Y2NjZSwgMHgxNzE0ZTgyNCwgMHhhNGFlOWYwNCwgMHhhOWVhYzdiZSwKKwkweDhmMWNlOWQ2LCAweDNhZDMyNDk1LCAweDYxMzFlMmJhLCAweDkyZDZmZWJmLCAweDE0NzA0NWZmLCAweDUxNDA1MmZiLAorCTB4OTFhNWRjNjgsIDB4YzdlNGZiMWYsIDB4ZTI3NTI5M2YsIDB4MGFhMWZhYmMsIDB4MDk5Y2ZjOTAsIDB4ZTA5MWZlZTcsCisJMHhhODlhZDk5ZiwgMHhmNTQwMjAyNywgMHhiZDI5NjcxNiwgMHg5YzUxNmY1NywgMHgyYmVmYjg5YiwgMHg1MTgxZjlhMSwKKwkweDVjNzlmZDY2LCAweDc2OWRlNGY3LCAweDZmZTUwN2I2LCAweDc0NWZiM2U1LCAweDZjYzFjZWYyLCAweDlhZGZjYTE3LAorCTB4NDllZDRjNTYsIDB4Y2JkYmYwOTMsIDB4YzM5ZjJhZGYsIDB4OTMwODI2ZTMsIDB4ZWJiZjI5NTIsIDB4MWRiZGY4MWYsCisJMHg0ZDI5M2YyNSwgMHgwYzRmZjVjNywgMHg0MTZlYjE3MywgMHgxMTZhOTUzYSwgMHg4M2U3MGQ3YSwgMHg1NWRmZWY0MiwKKwkweDk0NWJmM2MxLCAweDhmM2EzZjAxLCAweGE3ZTRhZmYzLCAweGZmNzE1YTE0LCAweDUxMDllOTU5LCAweDcxMGNlN2YzLAorCTB4OGRlN2Y1NDUsIDB4NDVhYTU4MTgsIDB4ZmNmMmIxZDgsIDB4YWRmZWE4YWMsIDB4ODhlOTRhNDUsIDB4NjliZWY5ODgsCisJMHg0NWZkNTEwOSwgMHgxMWQyYWVhNSwgMHgyYjZmZjMxMSwgMHg1ZmQ1MTgxZiwgMHg1NDU2NWI3MiwgMHhiMjY5YTY3ZiwKKwkweGExMWIxZmQwLCAweDdkYzg1NGJjLCAweDliZmIyOTc5LCAweDBhODdhY2Q5LCAweDFiZWU2MjlkLCAweDhlM2Y3ZTM4LAorCTB4N2YwOWI2MTcsIDB4ZmU4NWQwYWEsIDB4YjRhNWQyMTQsIDB4ODBmZDg4YWQsIDB4YzY4ZjdjMzYsIDB4OGY1MmVjOGIsCisJMHgzZGRkYTAwNSwgMHhmYzgwZWM5MSwgMHhmNjJmZTIwOSwgMHg2Njc3NjU4YiwgMHg2MzA1ZmEzYiwgMHhiNzY4YWU4OSwKKwkweDc1MmZlMDIzLCAweGZhZjFkYjQ0LCAweGNjMjdlMTQ0LCAweDBiYWQ3ZjAxLCAweDc1YTczOWU5LCAweDY1NTdmYjFlLAorCTB4NjE0NWQ1ZTksIDB4YmY0NjdjMjAsIDB4MmEzNzBiMWYsIDB4MTM3NzlkZDEsIDB4YWM2YWI2MWYsIDB4ODkwY2U3MzcsCisJMHhkNGFkYWZkOSwgMHhmNDhjN2VjMSwgMHhiN2M4ZTZlZiwgMHhlMDIxN2Q4YywgMHhjNmZmMjc2ZCwgMHhmZmIxODczOCwKKwkweDQ3MzNjZWI1LCAweGUxN2VjNjlkLCAweGFjZDczYWRmLCAweGE5YTU4NTljLCAweGNmNWZlMTcxLCAweDljMmM0Y2ZlLAorCTB4NGYzMmE5NzksIDB4ZmIxNWZlODEsIDB4ZWNhOWFkODUsIDB4N2E0ZmUyMmYsIDB4ZjBjMTNmM2MsIDB4Y2Y1MWNhN2YsCisJMHg5Y2Y1MjJiOSwgMHg1ODVmNDk0MywgMHg2NzNkNmQ3MCwgMHhmZjJkN2JhYywgMHg3OGQ3NThjZiwgMHhkZTU0ZWExZiwKKwkweGY3YmY3OGRmLCAweDdmYzRhZWI5LCAweDI3ZTcxYmJlLCAweGFlOWU3OWM1LCAweDVjZmU3ZmM0LCAweDlhMTlmY2Y0LAorCTB4Nzk0MGUzNWUsIDB4Mjc4YTBlM2UsIDB4YTkzZjc4NDAsIDB4OTU5YWU0NmIsIDB4NTJkNmY1OWMsIDB4NWZhMWY2NWIsCisJMHhmNjcwYjcyMywgMHhiNTJkNDBmOSwgMHgyNzgzM2I1MywgMHhiOWZlNzhhZCwgMHhmOTRlYWEzOSwgMHhlYTJmYzMwNywKKwkweDBhYTU2NzE3LCAweDU1ZjhlNDdmLCAweDc4ZTNhZWRkLCAweDUzYjc0MDdkLCAweDg4ZmY1MWRjLCAweGFhZjhhNzZlLAorCTB4Mjg3MzBiZGUsIDB4MzcwZWY0OGUsIDB4YzQzOGE3YWQsIDB4ZjYyZDg3OWIsIDB4ZmExNTRkZWYsIDB4ZGY3Yzg1N2UsCisJMHhmZWE5MGY2OCwgMHg4NTdmMDQxNSwgMHhmMjUxZTNhZCwgMHhlOWJmMmE0OSwgMHgxYzVmMTBiMSwgMHhiZjJmN2YyNywKKwkweDVjNzdiZmJmLCAweGJmNjgzYTBiLCAweDFkMDQ4ZmUzLCAweDdlN2QwOGJlLCAweDIyZGVmZWJkLCAweGUyMGNhNjYyLAorCTB4YTkxN2M1NTMsIDB4MDk2YzRhNGYsIDB4NTFmZDQ4YmUsIDB4ZjU0NTc0ZTYsIDB4ODNmZjkzYzcsIDB4MGY3NmNkZWYsCisJMHhhZTZmN2E4YywgMHgwZjM1MTU5ZSwgMHhmMjFjZDhmZCwgMHg5MDJjNmE4NywgMHgzNTNlOTFhMywgMHhjZmM4N2EyNSwKKwkweGVmZTNjNThiLCAweDBlM2RmOWU1LCAweDYwNTFiOTI3LCAweDdmNTVkNzRlLCAweDI5ZTRmYjFjLCAweDdkOGJmODExLAorCTB4YzQ1NTNkYmUsIDB4OWVjODgzNzMsIDB4NTIyNzNhZTMsIDB4NTU2YjZlNzUsIDB4ZDBlNjcwOWYsIDB4ODg3ZTI2N2YsCisJMHhiYWFjNjNlZCwgMHg5NWMzZDY4YywgMHgxZTc3YzRkZCwgMHhiYTBhZTliYiwgMHhlM2QyZjBlMCwgMHg2ODZhZTdmMywKKwkweDRkZTMzZGZmLCAweGZiMWMzOGZmLCAweDIxNWYxZWM3LCAweGZiNGQ1M2ZhLCAweGZhZGZiMWIyLCAweDdmYTI3ZGY4LAorCTB4ZDliYzY5YTMsIDB4YjgxOWVjODMsIDB4ZjkyOTZlN2YsIDB4N2ZiZWU5MGIsIDB4OWI3NWZhMjcsIDB4ZDQxNTViMWQsCisJMHhhODA5OTUwMywgMHg0Y2Q1YjBkNywgMHhmN2E2MTQwYSwgMHgyZGRiYzdjNSwgMHhjMDkxNWY2OCwgMHgxNzVlNmNjOCwKKwkweDE1NmVjMGQyLCAweGMyNjU3NGYxLCAweDEzZDkyMGQwLCAweDEzYWJkOGFkLCAweDBjMTMyYWRlLCAweDkyNjQ3NzdhLAorCTB4MDlkYTg3OWQsIDB4ZGQ5ZDcxNTEsIDB4ZmJlMWVmODIsIDB4MGJmZjM2NjUsIDB4YzljMjZmODIsIDB4ODdhNWVhM2EsCisJMHgyMDBkOTYwZSwgMHhlYTkxMzhmZSwgMHhlZGU0M2M2NCwgMHg3ZDI2ZWE5YiwgMHgyMWVkZjA4NSwgMHgwMWZmZmVmYiwKKwkweGYwNzhlNmJlLCAweDNlYzU5YWQ1LCAweDI1NzlmNTlkLCAweDg2ZjM4ZjY0LCAweDNlOTQ3OTIxLCAweDNhNmExNWZhLAorCTB4MjEwODRmM2YsIDB4ZWViZmIwZWYsIDB4YjFmZTUzNzUsIDB4OTBmMTY1YzYsIDB4ZjI0MjdlZmYsIDB4MzViNmY1ZWYsCisJMHhkYWExOGYzMiwgMHgyOWE5MWYwNSwgMHhiMTdiZjVhNiwgMHhjZmYyNWI3ZCwgMHg2YTJmYjkxOSwgMHg5MTBiYTFiZSwKKwkweDMzZDljMDNmLCAweGU4ODE1MTc0LCAweDZhYTg3ZjEzLCAweGUxZjkwZjYxLCAweGU0OTBmZjNkLCAweDgzZjlmOGExLAorCTB4MTgzZjgxNDQsIDB4OGZkMWYzZDIsIDB4Nzc3YmY5ZjEsIDB4ZjFiNjc5ZTcsIDB4NjVhNzgxNzMsIDB4MGU5YWVjYzEsCisJMHgwNmIzOGZlYywgMHhlM2ZjYTA2ZiwgMHg0N2ZmMzRhMSwgMHhhZDNiODc4NCwgMHg4N2NjOTFjMSwgMHhiNDQ5ZjU4ZSwKKwkweDhlMDVlMjhmLCAweDBmZjg4YzUzLCAweDMyZGQzY2UzLCAweDcwNWM3ZmJjLCAweDQ2YzFmZGVkLCAweDY0ZTk2NTc2LAorCTB4N2Y2Mzc3ODEsIDB4ZTg4ZGIxYzQsIDB4ZjEyNGRlZjEsIDB4ZTEwNzgwZGMsIDB4MzAzZTI2ZTgsIDB4MDc4NWVhZTAsCisJMHg4ZjM5Mzg4NiwgMHhkNGZmMjIwMCwgMHgyZThiZTMyNSwgMHhhN2VjOGY1YSwgMHhkYzc5MTBlYSwgMHhmZjM4OTgzZiwKKwkweDhhYzI0NTUyLCAweDRkZTc3ZGZkLCAweDc5MWEwZjFjLCAweGZiMTAyMmUwLCAweDQ5YjUzZTRkLCAweGY4MDNlMDY1LAorCTB4OTZhMjUxM2IsIDB4Y2I1YzY5NWUsIDB4NzY4NGZkZjEsIDB4ZjZmZTI2MmQsIDB4MmE5ZDNkYjIsIDB4ZDVhOWJmZGYsCisJMHhmNmEwZTI1ZiwgMHg1Mzc5ZThmZCwgMHgwOTNmMWM2NSwgMHg1OWM1MmE4MiwgMHhjNjYyM2I5MywgMHg0NjdmZTcxYiwKKwkweDE4YmQ0ZmViLCAweDRkMjkzY2ZkLCAweDMwNDFjM2RhLCAweGIyNGYzMjI4LCAweDk3NGRjNjQxLCAweDEwYTc2NjRmLAorCTB4MmIxODZiMWYsIDB4OGIwZjQ4YTgsIDB4ZDRhNGMyYWUsIDB4YjBkMzNkM2UsIDB4NDk1OWU3MTEsIDB4MmRiOGRhOWYsCisJMHg4ZmJjZWIzOCwgMHg4OGRjNjlmNiwgMHhmNDlhM2YwYywgMHg0MzViOWJhYSwgMHhjMmNlMGFlZSwgMHg2MjM2MzBiZCwKKwkweDA2MTcyOTFmLCAweDJmYmYyZjFlLCAweDIzYWUzOGYwLCAweGIwZDM5N2U3LCAweDQzMzU2ZTZmLCAweGMzYzNlZjUwLAorCTB4MGMyZjg5MTQsIDB4YmJmZTM4ZGYsIDB4ZjZjMWQxN2MsIDB4NjJkYjYyNmIsIDB4ZWFkOWU0OTUsIDB4NzExZTgxMzYsCisJMHgxMTNkMDRiZSwgMHg2YzdkMDhmNCwgMHhlYThkNDljZiwgMHhiNTllOTJhYiwgMHhjYTdlZDEwOSwgMHg5MjRmYjk3OCwKKwkweDdhZDQ1MDY3LCAweGQwNjJiZjg2LCAweGFjZWE1MGYzLCAweGM2NjNmMjU2LCAweGRmYjE1NjNiLCAweDNiMjkzMjkyLAorCTB4OTNhMmZkNmEsIDB4MDQyZWY4ZDEsIDB4NjNlMjk3OWYsIDB4NzFjMDg3Y2YsIDB4NWFiM2M0YzAsIDB4MjkzMjdmOTQsCisJMHg2M2Y5ODNiYywgMHhjZmQxODdkMiwgMHhlZThmOWNhNywgMHhmY2M5YTY5NywgMHhhZWRkMmM1NiwgMHhmYjE4NGY4NSwKKwkweDdmZTk2OWNiLCAweGRlNWQzZTNmLCAweGNkYTY3YzY4LCAweDg2NjdjNjg5LCAweDAzOWYxYTJmLCAweDZiZTM0NTk2LAorCTB4MWYxYTNmYTAsIDB4ODk4ZDU3ODMsIDB4N2Q2MWJmMWEsIDB4ZDg3ZjU0NjEsIDB4Y2Q0NGE3MGYsIDB4MTk4MzQyY2YsCisJMHg3NWJlMWZkOSwgMHg5MWZjZDQ1ZSwgMHhmNTQ1MTYzYiwgMHg2Nzc1M2Y0NywgMHhlMGRjZmNkNCwgMHhiY2YxYTg4YSwKKwkweDJlZmU2YmRkLCAweDM2ODQxN2ZhLCAweDM0MjdjZDQ0LCAweGZlODdiZTliLCAweDRiZmUzNjM3LCAweDUzZmY3ZWQ0LAorCTB4YTE4ZGFmZjQsIDB4ZTdkMjU2ZmYsIDB4YTg1ZTg4MTMsIDB4ZWNmYjBiMzcsIDB4YTQyNWI5MTksIDB4NmY0ZDVkM2YsCisJMHg5Yjc5NDM3YywgMHhmOWNlYjE0MCwgMHhmMDNjYzBhYSwgMHgyZmQ4ZTBkNCwgMHg3YTQyOWY1NCwgMHhkYWEyMzA2ZSwKKwkweGQ2YTM3YTg0LCAweDFlYzhhYjA0LCAweDcxMzI2YTNjLCAweGYzOTBkMzFlLCAweDNmODRkMzE3LCAweGM4OWE2MmYyLAorCTB4N2I3ODE5N2IsIDB4ZDkyMmVkMWEsIDB4NDNlYTU1NDEsIDB4MjQ4ZWZhNzMsIDB4OTM1NDUzZjIsIDB4ZmVjOWRhMDksCisJMHgxZmQ2MWU2OSwgMHhiZTEwMWNlNywgMHgwNzU1ZjcxOSwgMHg0YWM1ZTcwMSwgMHg5ODJkMjc5MiwgMHhiZWE4ZmM4OCwKKwkweGE5ZmM3MmE5LCAweDhlODNmMjBlLCAweGU0ZTZhNGY2LCAweDlmODQ1M2NlLCAweDRlOWIwZTJiLCAweGZhYTZhYjdjLAorCTB4ZjBkZjY0MDMsIDB4YTFlN2ExOWMsIDB4ZGVmMzlmYmYsIDB4ZjE0OTU4NDYsIDB4ZTY1ZmQxOTYsIDB4ZTY5OWJmNWUsCisJMHhlNjdiYmIyZiwgMHg3YjdmOGE0OCwgMHhhY2FkZGY5ZiwgMHg0M2EwOGQyYywgMHhjNTE3MzllNCwgMHhhNDBlYWJmMSwKKwkweGQ4NjdmYjA5LCAweGRjN2VjMzEzLCAweDNhNmJkNTY5LCAweDUzOGMzZWQwLCAweGJiNDA3ZDg1LCAweGYxMGQyMDcxLAorCTB4ODhmMjgxZjEsIDB4MDE2OWY4NTksIDB4ZWQxZjlkMzMsIDB4YjgyN2RmMmEsIDB4ODBkZjIxZDAsIDB4ZGQ5ZjRhNmQsCisJMHhlNjQzYmZkMiwgMHhkYTNiMjBmYSwgMHgwMDkzN2Q2ZiwgMHhmNzQ0MzhhMywgMHgxZGUzM2RmMCwgMHg5NTVkZmU4NiwKKwkweGVjYmJmOGNiLCAweGY5N2Y5ZTg4LCAweGFmMDJlMWZlLCAweDkwZjYyMGY3LCAweGUyMmNlNzBlLCAweDE3ZmMwNjNjLAorCTB4NDJmZTVlYTUsIDB4ZDI0ZWU1ZWEsIDB4ZWJmOTExYzcsIDB4MjY3NmJiNTUsIDB4MmU3ZTdmOTEsIDB4YzZlM2Y4NDcsCisJMHgzYTQ5ZGZmMywgMHhlNTRkMmVmZiwgMHg5ZGRkYWZmMywgMHgwNDdjZmViMCwgMHhhZTQyMmFkZSwgMHhlMzU1N2VhOCwKKwkweGY5OTFmNWMwLCAweDM5YzZiNWNkLCAweGU3NDY4YWZjLCAweGE4ZTUyNzU4LCAweGY5MjNiNWEyLCAweGZlN2Y2MDRlLAorCTB4Yjc1YzM0YzMsIDB4N2I5NWQ3NzIsIDB4YTZmYmQwMGUsIDB4Njc2MTRjOWUsIDB4ZDJkZmJjMDMsIDB4ODJlMzgwZjcsCisJMHgyODgxN2ZhNSwgMHhjZDMzYjZiZiwgMHhhNjc1NzBjYywgMHgwOTYxMzg4OSwgMHhiYmU0NGUzNiwgMHhiODAzZTgyNSwKKwkweGRhNjM3ZGE4LCAweDdjM2ZlMjJjLCAweGJmYjA1NjFlLCAweGE0Y2MxNWEwLCAweGIzZmExNmJmLCAweDMzZjQ4NGNjLAorCTB4M2Y2Nzc5ZTAsIDB4NjljZmVkMWUsIDB4MWI3M2VmM2EsIDB4ZmI3ZWY4ZjgsIDB4OTIyYTdiZGQsIDB4ZDYzNDBmZDgsCisJMHg4MTQxZDYzMywgMHgzZGVmM2YyMCwgMHg0OTljYzA1NywgMHgwYWU5OWY3OSwgMHg5ZmI4MTdmYiwgMHhlZWZiOWU4ZCwKKwkweGVjOTliYzFlLCAweGJiZGZiMWIwLCAweDBlZjRiZmUwLCAweGYwMjJjNWYyLCAweGZhYzZiYWYwLCAweDExMzRkNzQwLAorCTB4NGIwM2Y5N2EsIDB4NDRlZDFkMmYsIDB4YTY2ZDBkYmYsIDB4MzY4NWU1MzAsIDB4YmRmMmIzOWMsIDB4Y2Y3NTc3NGEsCisJMHg5YzIzMGZjYiwgMHg2NmY5YWYxZiwgMHg3ZjcwODJiZiwgMHhiZmU3YmNiNCwgMHgzYmYzZTAwZSwgMHg0NzQxNTI5ZSwKKwkweGZkZDlmMWJlLCAweGJjNDQ3YTVhLCAweDJiZmVlZTc5LCAweGFmZTg2ZjJjLCAweDI5MjRmZjNjLCAweDFlYWM5N2E1LAorCTB4ZDYwZjkzOTIsIDB4MzIyYTM0YmMsIDB4OWY0ZTQ4NWUsIDB4Zjc0ZTkwOTksIDB4ZTJkMjkzM2IsIDB4YzZjNDZmZGUsCisJMHgzZjg4NmJhNSwgMHhmNjc1N2U1OSwgMHg1Y2JlMGQ0YiwgMHhjMzcyZjkyZCwgMHhmOWY5YTMwYiwgMHhmM2RlYTQ4NiwKKwkweDJhZjNmZTg4LCAweDM0MzZjMWU3LCAweGYxYWYzOTViLCAweDM1ODdlNDhlLCAweDMxMzM3ZTJmLCAweDhmNTdjZjMyLAorCTB4YTk1YmE5N2MsIDB4Zjc0YjcyNzUsIDB4MDlmYTNhYTYsIDB4MWU1ZTRlZmIsIDB4ZWFhYjcxY2IsIDB4MWU3M2EyY2YsCisJMHgzMjY5ZmFiZSwgMHhmOWJkZjdmNSwgMHg2ZTA3OWYyZCwgMHhiYmY4M2ViYiwgMHg3ODkxNzkxMSwgMHg3OWVhNGFhZSwKKwkweGM1NGFmNDk3LCAweGY5NGVhYjAxLCAweGI5MDM5MmFjLCAweDdlYzJlZTI3LCAweDFmZWEyYjY1LCAweDU3MjVjZjNjLAorCTB4MjlhN2IxYzcsIDB4MDBhODNiMWUsIDB4YzMyYWI3ZTUsIDB4MmJlNGFjMDksIDB4ZTUyMDk0MWIsIDB4ZWUzNGQ2YzMsCisJMHhmYjE4MzJkZCwgMHgxNjE2ZWE2YiwgMHgyNTU2YmIxMSwgMHg1OTU2N2QwYiwgMHhiMTM3MDRhZiwgMHhlOTg3M2UxZiwKKwkweGEzNjUyODVjLCAweGJmZWU1MGU0LCAweGQ3NzhlM2U1LCAweDg1ZmViMTcxLCAweDNjZjZiMDhkLCAweGY1NWQ5ZGM2LAorCTB4MzgyMDVlNWYsIDB4Mzk1YTM1ZDYsIDB4MjkyMTc2Y2YsIDB4ZmI4YzE5NmMsIDB4ODRhYmRhNWUsIDB4ZGM5ZjdhMDIsCisJMHgxYzQ0Yjk3NiwgMHg5OGY0MmFiNiwgMHhmNTVkZjY4NSwgMHhlNDExYzJkYywgMHgzODFkNzYzNiwgMHhiOTNkMjE2ZCwKKwkweDU5YjFlMWFhLCAweDMwOTE3OWYyLCAweDhiOTY0MWZmLCAweDk1OTViYmI1LCAweGQ1YWM3OTkxLCAweGE0NDIwZWU4LAorCTB4MDJmODQyZmQsIDB4NDBlYWZiMTMsIDB4MmNmYTQ5NGUsIDB4NDM1ZTFhNmIsIDB4YjZiZDQyZTgsIDB4ZjU4NTY5ZmYsCisJMHg5N2UyNDJkYSwgMHhmOWVmMGUwZiwgMHhkZjY4NmZkZCwgMHg5MjNkZmY4MywgMHg3ZDc0NWZmMSwgMHg4MDVmMDdmOCwKKwkweGI5NGE4YmZkLCAweDYzM2M1YzBmLCAweGIyYjJmOGExLCAweGRlMjE3Y2MxLCAweGJhNjM1MmZkLCAweGNmZGExZWVmLAorCTB4ZmQ2MzhmODgsIDB4MTAxNjJkZWUsIDB4MTBkOTNmZjcsIDB4ODJlYzllN2MsIDB4MWNiMmM3YTMsIDB4OWE1N2Y5ZTEsCisJMHhjZTY4ZjA4MCwgMHhlYzBhY2IxZSwgMHhjOGNlNDhkYiwgMHhjMTFkYjg1ZSwgMHhiZWY1NzE3OCwgMHg4NGYxOGQ3NCwKKwkweDc4ZmFjNGIxLCAweDM5MjFhMGY3LCAweDU4NzdhMjVlLCAweGU5NTc5ZjI4LCAweDVmMTBiNGVlLCAweDE3M2Y4NjU3LAorCTB4OWY4ZGZmZjcsIDB4ODljNmYyY2MsIDB4NTc0ZTVmYjcsIDB4MjczZjMzYTQsIDB4NjQzN2RlNGEsIDB4MzBiOTYxOGMsCisJMHg5MGMzZGFmNywgMHg2MGJlZTU4ZCwgMHhhOWQ5MGY0NSwgMHgzYjkxMDcwZCwgMHhiZmI3YTIxNCwgMHhlYzBlZTA4NywKKwkweDdjZTlkMDRmLCAweDlmM2UwNzI1LCAweGNmYjExMWQ4LCAweGY0N2NhNTFmLCAweGY5NWU1OWU2LCAweGYwOTlhYzY0LAorCTB4YjE5M2VmYjksIDB4ZjNkZjUyNWEsIDB4YWFjNzRjYWUsIDB4OTc5OTc5NzgsIDB4ZGVkZDg1ZDMsIDB4MThiYmVjOWMsCisJMHg5ZTA5MDcyZCwgMHhkOTViZWUzMCwgMHgxNDdiZTc2NCwgMHgyZDJkODM5NCwgMHg3MDcyOTE0NSwgMHhjNDVkYWFjNywKKwkweDA3YWE0ZGU3LCAweDFiMmEwMjI1LCAweDc5YWJmYTE3LCAweGM4ODc5MjdlLCAweDBjY2UzNmEzLCAweDRlYWExZjEwLAorCTB4ZmMyN2YzMWYsIDB4Mjg5YmY3MTUsIDB4ZmY1MDhmZWYsIDB4M2ZmNzRkY2QsIDB4MzlhYzcyNGQsIDB4MWU2NDY1NjAsCisJMHhmMWQ0ZDJhNCwgMHhlODg1MTZhYiwgMHhhMjZiYzNiYSwgMHhmNTgxMGFmZCwgMHg3NWYwZWE5NiwgMHg5NDU1M2M3MCwKKwkweDdiZGM1M2E5LCAweDIwMmNjMjc0LCAweDU5YmNmZDNjLCAweDM5YWZiY2UxLCAweDhiMzViZmQ1LCAweGU1NWM3YmU4LAorCTB4MmZhMzk2ZjksIDB4YmJiZWU4MDQsIDB4MTExNDFjNmIsIDB4N2Y3OWM2N2MsIDB4MmEwYzJlM2UsIDB4MDBiOWIzYWUsCisJMHhlNmVkYjQzYywgMHhjNGRkNGI4MywgMHgzOGNmM2ZiZiwgMHhkZDg2N2VjNiwgMHgyYmQyMDIxMywgMHg1MDNmZTgzNSwKKwkweDFmOWVjN2RlLCAweDA5M2FkMzBhLCAweDE1MjJiZTM5LCAweGVlOTM1OWY3LCAweDU4YjRiZTY0LCAweDI3Y2ExZWZkLAorCTB4MzZmYjIwM2QsIDB4ZTA4YWI3Y2QsIDB4OGEyN2E1YjMsIDB4ZjVjODdiZjgsIDB4NDhiYWY5ZTUsIDB4NmY3NGNkZmUsCisJMHg0YjdjZTdlOSwgMHg2OWYwNTk5NywgMHg3MWMwMGRkNywgMHg0Y2ZjZDcyMiwgMHhlMzJmMjFhNiwgMHhiODNiMDZjZCwKKwkweGQ2NTQ2YWFkLCAweDQ0ZDdkYTQ2LCAweDc5ZThkYmYwLCAweDFlYTVjMWQ3LCAweDJkOWNkZjgyLCAweDkxMzMzZGY5LAorCTB4ZmY3NjIyZTUsIDB4YTk5Zjg4OGYsIDB4NjJiNGMwY2UsIDB4OTllMTE2NmIsIDB4OWZmN2E2ZjAsIDB4N2JlNGExZjcsCisJMHhmOWEwMWYwMywgMHgxMTVlNDg3MywgMHhmY2JjNmY1NCwgMHhmOGJkM2Y5MiwgMHg3Mzc1ZDEyYywgMHg5NWM3MmZhYSwKKwkweGMyYmNkN2NmLCAweGM2Mjc3NjI5LCAweGZmOWMzYjk1LCAweDMxYjdjOTAxLCAweDg5ZjA5NWJmLCAweGZjZDE2ZmVmLAorCTB4NTFlZmMyMzYsIDB4YzViMzVmODksIDB4ZmU1OTNiYTcsIDB4ZGZlZDNhN2QsIDB4ZjE0MWJlN2IsIDB4M2M4ZGY3Y2YsCisJMHhmZjZjOTZkZiwgMHhjZmVmOWVmNywgMHg1NGU2N2NmMiwgMHgyZjVhMzdlNCwgMHgzOTllNzgxOSwgMHhmZTIwMTgzOSwKKwkweGEyODI0ZGFiLCAweGE4ZjhmODRkLCAweGU0OWI5NjZiLCAweDZmOTFjYjZlLCAweGQ3YmM5Mjg2LCAweDQwZGM3OTI2LAorCTB4OWJlNmIxNzksIDB4NmZkYzkxOTYsIDB4ZjMyNzc0MTksIDB4ZTQyZjE3ZmYsIDB4ZmIxMWFhMTYsIDB4N2YxN2E3MjQsCisJMHgyZjNiZTc0NSwgMHhlMmM1YjFjZiwgMHg3YzczYTFjZiwgMHg5YzY5Y2YyYywgMHhlZmJhNDk2YiwgMHhmOTExZTkyZiwKKwkweDdlOTIxODI2LCAweGQ3YjNmYzVkLCAweDcxOTRkN2I4LCAweDYxZGE0NzllLCAweDhmMzhmMzhjLCAweDVjODkwZGQ4LAorCTB4ZmE1N2I2N2YsIDB4OThmODFhZTEsIDB4ZDFlMGVjN2YsIDB4YzJmMmJmZDksIDB4YTkyYmFhMDksIDB4MzZjMTMxNjksCisJMHhiNTI1M2UzYSwgMHg5MmZkZWUyMiwgMHgwYzExOTM1NSwgMHhiMjE4NmQ3YSwgMHg4ZDM0MzVkMywgMHgzOWQ4OWYzYiwKKwkweDNlZTExNmFmLCAweGY4NTUwMTA4LCAweDBjZjlkMTY5LCAweDI1NWUyYWYwLCAweGRhZjE4ZjMyLCAweDYzY2JlYjlhLAorCTB4MjFhZmUzM2MsIDB4NjNjZDhkNzksIDB4OTY5YjBlNGMsIDB4MjNhZTUyNWIsIDB4YmNkYWYxOWYsIDB4ZDE4Y2Y5YjgsCisJMHg1MTcxZDExOSwgMHhjMGNlODY0MSwgMHg3ZjA0NzI4NSwgMHg0MTg5YzI4NiwgMHhmMTgzMzc5MSwgMHgyNmVhYmY5NCwKKwkweDlmZTM4NTViLCAweGRlNTk5OWUzLCAweDliMWNhZTk1LCAweDEzZTBlZDBiLCAweDNhZGI2YzRmLCAweDg0NzBlNTBkLAorCTB4NmJmNTAzYzAsIDB4ZjFmNWM5ODgsIDB4ZTZmNTA3ZWMsIDB4YzMxYjVlNDcsIDB4M2RlYTM4N2UsIDB4NGUwMmYzOTUsCisJMHgxZDBjNGIwOSwgMHgxMzdmZDA4YiwgMHgyYTI3YTU0MSwgMHhmNjNlMTJiZiwgMHhkYmYxMzI2ZCwgMHgyZGZkNTQ5ZSwKKwkweDliNGY0ZmEyLCAweDA5Mjg3NWNhLCAweDE1YzU4NzVhLCAweDkwMGVlZTQ3LCAweGUwNzY4MDdmLCAweDNlODQzMzlmLAorCTB4N2I4YTM1YjcsIDB4NjVlZTliNGIsIDB4NzRlMDk5M2QsIDB4ZTQyMzUzOGUsIDB4ZDg0MzJmMjQsIDB4MWY2MzhhYTUsCisJMHgyY2EwYjUwYywgMHg0YzlkMzI1ZCwgMHhkN2Y1YzdjZSwgMHhhNjRmYWZlZCwgMHg3M2RhZGUzNCwgMHhkMmE0NGY2ZiwKKwkweGZmMzUzYjlmLCAweGZmM2MwYzgyLCAweDUxYWVjYTE3LCAweGI3NWJmMjM2LCAweDdlMTJjNzA2LCAweGFlNmNlMTQyLAorCTB4MjBkMDJjY2YsIDB4ODdmNjE1YTAsIDB4M2MyOWVhYTcsIDB4OTUwNGJhMTQsIDB4NWI3MWE1NGYsIDB4MjU3ZTM0ZDAsCisJMHg1ODU1NWZmMSwgMHgzMGY2OTc5YywgMHg2ZGNjOGFhMywgMHhkNWRmYjg1NCwgMHhlYjRhOTM1OCwgMHg3OWI2ZmQ1NSwKKwkweDk3YWZlOTEwLCAweGYzOWY4NDMyLCAweGYxM2NkNWUyLCAweGNkMWEwNmJlLCAweDI1YzMzZmJmLCAweGEyNjgyYTk5LAorCTB4MzI0YmUzN2MsIDB4NTU3NWQ5NGYsIDB4ZmVjNjc5ZTUsIDB4NTUzMzhkMDUsIDB4N2U0MWYyMjcsIDB4Y2UxMWM3NzgsCisJMHg3NTU5MzY4YiwgMHg3M2MyNmZhMiwgMHg5NGQxZjAyMCwgMHhkNTY4N2VjMCwgMHg3NjQwZDllMSwgMHgxZTA1ZGJhZiwKKwkweDI0ZjdjNzA1LCAweGZjNDQ3Y2Y2LCAweGQ1NmNkM2QwLCAweGMxMzczZWU5LCAweDcxNTIwM2I5LCAweDFlYjIzZGZkLAorCTB4YjYxOTE3MmMsIDB4ZGNmN2QxZGUsIDB4ZTlhMTJmZDgsIDB4MjQ0Mzk0OTcsIDB4ZTU3YmUwYmUsIDB4NGMwNzZkMDQsCisJMHgzYmUyNDQ3NywgMHhjOTU5ZDg0OSwgMHhjMzEyN2I1NywgMHhlOTY3YmEyNiwgMHg1OWVmZGY0MSwgMHg0ZTBmYWI4NiwKKwkweDM4MGQ3ZGUwLCAweGVjMGVkOTczLCAweGY4NWNmNGIxLCAweGU1YzMzYTcxLCAweDA1YzgzZTI0LCAweDhkMzQyNzAxLAorCTB4MjZhZjQ5ZDYsIDB4OGU3Y2JkMzgsIDB4MDllZWE3MDQsIDB4YWFlMWZkMjgsIDB4MjA4ZThiMWEsIDB4YTRhM2NmY2EsCisJMHhjOWY0YTZjYywgMHg1ZjYyNTU3NywgMHhiMGIyODZkZiwgMHhmY2E0MWIyNywgMHg5ZDJiNmViNywgMHg4NTQ3ZDkxNiwKKwkweGZkZWZhOTMzLCAweGY4ZTI3OGZmLCAweDljMjFkYWI2LCAweDQ4YTgwYmZmLCAweDQ5YjYzYjdmLCAweDIxNGU3NGE5LAorCTB4ZGUxMjI4NTcsIDB4MDc4MTQyOGMsIDB4ZGJiNDBiYWEsIDB4N2NlZjc4YzQsIDB4MmE0NzczZTQsIDB4ZTc5ZTdmZGIsCisJMHhmM2VkM2FiMSwgMHhmODVlNThiMiwgMHgwZmYwZDE3ZSwgMHgxN2MyNTIxZiwgMHg3NmQyNDY2ZSwgMHhjOTRiZTYzZSwKKwkweDlhNzU3M2M3LCAweDg3NWMzYzhlLCAweDNjYjhmZWYzLCAweGZkOGMyYTM0LCAweDc5ZmZhYjE2LCAweDNmNTdjZmUyLAorCTB4ODBiZGIxNWMsIDB4YjMxZWVmZjQsIDB4NGZmNDljYTcsIDB4ZjY3MWUwNDcsIDB4ZWIzNDVmY2IsIDB4MGVlNDIyZGIsCisJMHg3MjY0ZjQ4NiwgMHgzZWNjNjFkZCwgMHgzZDM2ZTc1NSwgMHhmNzc2ZmU0ZSwgMHhmYmE3NDU0MSwgMHhjZjczNmVmNCwKKwkweGIyYmI4MjUwLCAweGQ1MGIzM2U5LCAweGZjMWQ1NjYzLCAweGIyZWJmZDg0LCAweGRhNWVmZjRjLCAweDM1NjM1MjZmLAorCTB4ODY0ZGNmZDcsIDB4ODczZjVjMWQsIDB4MjBlYjkxN2EsIDB4NGZhMTZlNDMsIDB4ZjUxZDlmMmUsIDB4MWQwNDc1NmMsCisJMHgwNmYyOTNkZSwgMHg2NDYxZmUzZCwgMHhiY2E0OWFiZiwgMHgxYzM4YTYxZSwgMHg3NzJkZmRkYiwgMHhmN2Y1YTcwYywKKwkweGYxODBmY2NiLCAweDE5MWMzNTVlLCAweDA0ZGY3ODRjLCAweDNjNmI3MWFmLCAweDVjNmEwZWVmLCAweGFlZjc5Y2JmLAorCTB4YzQ2ZjVlZWQsIDB4ZmU1MmQzZmMsIDB4NTZmZGNiNGYsIDB4MjBkZmZhNjcsIDB4N2NiNmQ3NzgsIDB4YzJkMmExNmEsCisJMHhhMWExZjNhYSwgMHgzNDg2ZjcxNCwgMHg0NzE5YzUzZCwgMHg2ZmNhZjQ4ZiwgMHg2OTU1M2M4YywgMHg1ZjlhMTYzZCwKKwkweGFmNTgxMTc1LCAweDUzNmJiZDIwLCAweGJkMmY3ZTkwLCAweDM5NjYzOGRiLCAweDM0OGZkZjNlLCAweDhiM2IyMTQ5LAorCTB4ZTNkOTJhZjEsIDB4NjBkZjY2ZmQsIDB4Y2VmZDVmOWEsIDB4OGY0OTYzZDcsIDB4ZjAyMDI0MWQsIDB4YWYzNzVmN2YsCisJMHg0Mzc4NDYxZCwgMHgyNDRlMmZmZSwgMHhhYzBiZGIzOSwgMHhjZDM5MGNkNywgMHhmN2M1MzkyNywgMHg4YmZmODlmMywKKwkweDdhY2I5ZmE4LCAweDdkYTU4Zjc5LCAweDdlZTVjYjFlLCAweDIyNWM5MDEzLCAweDIwM2NiM2ZmLCAweGRmYzkzYmZmLAorCTB4M2NhMjc3Y2IsIDB4NTlhM2ZiZjAsIDB4OWJiNGY3Y2UsIDB4YTMzN2VjYmMsIDB4ZmRjOTFmNWUsIDB4ZGZkNGM1ZTIsCisJMHg2NGVhNWVkMywgMHg4NDNhYTczOSwgMHhmMGQ3OTI0MiwgMHgwNDI3NWUxMSwgMHg0NWYyZDc0MCwgMHhmZDIyZjgwYSwKKwkweDY0OGNiY2ZmLCAweGYxMjQyZjcxLCAweGQ4NDMzOTM5LCAweDllOGU1MDgzLCAweGQ4NzNjMWUyLCAweDNlNGEzNTU1LAorCTB4ZThhNWVjMjIsIDB4OWE1YTdiNGIsIDB4YmY2ZDk3ZjksIDB4MjY1MjQ2OTgsIDB4ZGE1Mzg0ZWQsIDB4ZDY3OGZmNDksCisJMHg2ZDI4ZmZmYiwgMHhhN2Q3ODZkNSwgMHg3M2MzYTgyYywgMHhmMmE1Mzg2ZSwgMHhmNzE5NjFmOCwgMHgxYzlmMjU4NSwKKwkweGIyMWFmOTkxLCAweGE4OWE3YTFiLCAweDEzZTdhNjFmLCAweGU1ZjU0ZmIwLCAweDRiZWJiZDEzLCAweDlhNGQxY2M4LAorCTB4YjUyOGUzYjMsIDB4MTJhMTdjNTMsIDB4MmRhNmRiNzIsIDB4MTY2YTNmNmIsIDB4ZmM0NzllNjIsIDB4NmU2NDcwZDcsCisJMHg3NWUzZDUxZSwgMHgwMjQyYjM5ZiwgMHg2ZGYwZDg4MiwgMHgyMjJmNDdjZiwgMHg4YzNlMWUxZSwgMHhhNzYzOGZmOCwKKwkweDdmY2MzOGYwLCAweDA2MGQ3ZmU4LCAweDZlZjFmZjc3LCAweDQwOTFlYTQ1LCAweGM3ZTI3Y2QyLCAweGFmYjUwNmFlLAorCTB4MjI1NDgwOGYsIDB4ZmRkZjUzNjMsIDB4MDA3YjdkYTQsIDB4Njc3ZmU3NmQsIDB4MjI2NzA3N2EsIDB4ZjAwY2NmM2UsCisJMHhmYTdkZGI3MywgMHhjYjEyNGNkYiwgMHg1YzQ1NjdmZCwgMHhlNmYxNjBkZiwgMHg2NDM0ZmYxMSwgMHg4NzFiYTg2MywKKwkweDIyOTlhZDRmLCAweDg1NjQ1M2VmLCAweDM3OWNmN2I4LCAweDE4MzkwYTY3LCAweDBhZWQ4MDE1LCAweDMzYWFlYmM3LAorCTB4ZDRiZjc0ODgsIDB4ZTgyZDdhYTAsIDB4YzA4NDVkMmYsIDB4NmZhNGE5OTIsIDB4MDFmNzVlNjQsIDB4ZmM1ZTNmOTAsCisJMHgyODNjZmE0NSwgMHhkZjkwMGZiYiwgMHhjMWViNzY4MiwgMHgxMWQ2YzQ1ZiwgMHgzMTZmZDk3OCwgMHhlYjAwNThmMiwKKwkweDJiNWZjNDRkLCAweDBmZjgxNDliLCAweDY3YWFjNWM0LCAweDkzYWZlN2EyLCAweDFiYWJmMjc1LCAweDhjMWIxZDc3LAorCTB4NWNmMzVkNzQsIDB4MmRmOTM4Y2MsIDB4ZTIxMWZmN2MsIDB4NWQ1ZDc4NzgsIDB4Y2RjMzNkNzQsIDB4MTk3ZmQyOTksCisJMHg3ZmM5YzMwZSwgMHgzZDYyYmU0MSwgMHhkNWEwZDY2MSwgMHg2MGFjN2M4YSwgMHhmNjIyNDMxNCwgMHgwYmUwNDk5MiwKKwkweDY3Y2IyYmY1LCAweDhhNmY2MWJlLCAweGI5ZWE1ZTg1LCAweDk0YTc1YzA0LCAweDk0NzQzYmJiLCAweGQ0YTY4MWVhLAorCTB4OGY2ODc5NjUsIDB4OWYxODlhMjksIDB4ZWUyNTk4ZDIsIDB4NGFhMGI0YTcsIDB4YmM5MzBjNzUsIDB4NzdlYzU5ZmUsCisJMHhhOTY3YmMwNywgMHhkNDk1NjRkZSwgMHg1ZmM0ZTA5NywgMHhkM2M4ZmJjYSwgMHhkZGZlOTJhZiwgMHg5ZDZjNjBlYSwKKwkweDk1NTNjMGE4LCAweDgyMTkzNzljLCAweGNhZWZiNDM1LCAweDY5ZGVhMmRkLCAweGY5ZThlZWVkLCAweGViNGYxMjU1LAorCTB4OGM3ZDNhOWUsIDB4YTExNTg1ZDIsIDB4YTc4OTcxOTgsIDB4M2E5OGM2YWEsIDB4ZGMzOGIxMTYsIDB4YWRlZjI5OWYsCisJMHhmNWZiN2Q2NCwgMHhkMWZjNWJkNiwgMHhiNzhkZmMyYywgMHhmOGM2M2FlNSwgMHhlZjkxNGNlNiwgMHgxMDYzYzRhZCwKKwkweGQ1MDVkNzdkLCAweDJhZDFmMTIwLCAweGZjMmM5MDI1LCAweGM3MmM3MDVlLCAweGIwNjdkZGYzLCAweGJkY2ZhYzgxLAorCTB4M2VlOWUyNWYsIDB4N2U3YzNmYzksIDB4MTllMmJmN2MsIDB4ZmRjNTdkZjEsIDB4N2Y4NjhiM2YsIDB4ODMyY2Y4MGQsCisJMHgwZDgzZjlmMSwgMHhkZTUwYjAzZiwgMHg1NmRmOTYzMSwgMHhmZmQ5OTlkNSwgMHgxM2YxMjM1ZCwgMHg3YTZiNWZjYiwKKwkweDg1ODc2N2Y5LCAweDdmMmM1YmVjLCAweDZiOTVmYTU1LCAweGY2ZmMyZmMwLCAweDBkZjg1YmZmLCAweGNiOTFhZjNhLAorCTB4Mzk4NzM1YWMsIDB4MDlmNmI1M2YsIDB4YWJmOTQzYzUsIDB4ZjdhYjlkNmIsIDB4N2Y3Y2YyM2MsIDB4MzU5ZWI5ZWYsCisJMHhjNjA2M2RlOCwgMHhhNGU3YmQzMCwgMHg2M2JkMTc1ZCwgMHg5NmJkZWRmZCwgMHhlNzI2YmNkZSwgMHg2NmI3MmYwNSwKKwkweGUwZGQzZTczLCAweDY2NzVkOGFiLCAweGY2N2RiZjQ5LCAweGJkN2ZjMjUzLCAweDI3NjI1OGQ0LCAweGE0ZmJhM2ZmLAorCTB4OWNlOGEzYzksIDB4YzAyZTRjYWYsIDB4NTY2ZjhmZjMsIDB4ZWU5MWZjODEsIDB4MDMzYmUxYTYsIDB4YTllMTdmMDgsCisJMHg1Zjk0YzVhMiwgMHhlZDBhN2YxZiwgMHhiNzA3ZGQxMywgMHgwMjU3ZmQxNiwgMHhkMjdiMDdkZiwgMHhiNjY3ZWU0OCwKKwkweGJkZmI0ODhkLCAweGZiNjFkNzgzLCAweDcwYjI3ZGRlLCAweGU5ZTkzOTY3LCAweGI0NDVhNTkzLCAweDU0ZTM4MmFlLAorCTB4ZWQyODVlOWYsIDB4NDJjOWY1NTQsIDB4YmQ4NDQ3N2IsIDB4YzhhNjRkZmEsIDB4ZmY3MTZmY2YsIDB4MWI4YTUxZmUsCisJMHg3YjM1ZWY2NiwgMHhkYjMyM2YyOCwgMHg4MDk0ZGZlYywgMHhhMGJlMTVmMCwgMHhiNzcxYWE3OCwgMHg5ZTQ3ZWQ2MywKKwkweGJlNTE3NWE0LCAweGYzOGFjZDI4LCAweDhkMDhlOWZlLCAweDE4NTFlZDU3LCAweGIyYTZlZWZlLCAweDNmNjQzZGJjLAorCTB4ZWM4N2FhODMsIDB4N2RkMzc3NjIsIDB4MWY5MjBmZjksIDB4ZmU0MGZjZDQsIDB4MWRmYjExN2QsIDB4NjZmYTE1NGIsCisJMHhiNjY2MGRmNiwgMHhlYzgzOWRkNywgMHhiY2E3MmViZiwgMHhlYjE3NzdhOCwgMHhmYjQzY2U4ZCwgMHhjMzdkZmMyYywKKwkweDc4ZGMwNTFlLCAweGEzZWU2M2NlLCAweDNhMWUxMzJmLCAweDUwYjY5YzBmLCAweDcwZDI1MDEwLCAweDQ3MTFkMmRhLAorCTB4MjVlZDFiN2YsIDB4OWNjMmYzMGMsIDB4ZTE2MWRkYWYsIDB4N2ZmZGNkZmEsIDB4MmI3OWQwYjAsIDB4ZjM4NGZiOWYsCisJMHg3ZTI4NmI2ZiwgMHgxOWVmM2YyMCwgMHgzYTc3YmY5NSwgMHg4NWFhZmNkYSwgMHg0ZWIyYjRmOCwgMHg5MTU5MDE4MSwKKwkweDI3MWU2NmUzLCAweGNmZmQ0YWZkLCAweDM2OWU4NGVhLCAweGU0ODU3ZmY4LCAweDBkZmY4Mzc3LCAweGY1MjE1ODc5LAorCTB4ZTM1YjdkZGEsIDB4ZmZhMWJiZjMsIDB4OTZlZjA0MWUsIDB4MDNkZWI4NDEsIDB4MGViOWNiNzUsIDB4ZDExZDgxZTksCisJMHhmYzUyNTdmMywgMHgxN2NkMjM3YSwgMHhhOWYyYmVmYywgMHhiZGQ1ZjFlOCwgMHhmZDYwMWU3YywgMHhiZjQ3YWIxZiwKKwkweDJlN2ZmNDMzLCAweDVmOWYxMmU0LCAweGE2MThhZjBlLCAweDdkN2QzY2ExLCAweDg4MzBjZDdhLCAweDI5M2NhZjkzLAorCTB4NmVjMzA2ZmQsIDB4ZDg5YjBlNWYsIDB4ZWJjZWM1ZWUsIDB4MjE2MmJjNmEsIDB4ZmFkNTViN2IsIDB4Njc3M2Y2MjcsCisJMHhmNGM5N2QzNSwgMHhlMTZhNmYyOCwgMHhjMDViZDk3YSwgMHg3OWYwOGViZiwgMHg0OWRkOTM0YiwgMHg4Nzc5NzZmZSwKKwkweDlhZjMwM2QwLCAweDQyYTBjMWFjLCAweGEyNWFhMWUzLCAweGYxNjFmNzczLCAweDkwZTA0OWJkLCAweDQ4MTZmZWMyLAorCTB4ZTI1MmI4YmQsIDB4ZTNjNGE1NzUsIDB4MDZlMzhjNGEsIDB4OGM4YzdkNTMsIDB4YmM2NTJiZTMsIDB4ZDc2NzNhYmUsCisJMHhhOTI5MmEzMSwgMHhkYWViZTM5NCwgMHgxZTEzMjY4ZSwgMHg1YmQwODFlNywgMHg2ZjQyNDJmMywgMHhlYzMxZjQxOSwKKwkweDQwYmVhYzUwLCAweGQxMGY3NzBiLCAweDk1OTM2ZDc3LCAweDRiZTdkNmViLCAweDBlYmYzNWJkLCAweDVmZDI5NmY1LAorCTB4YjQwZjc0N2YsIDB4N2VmMWZjOGIsIDB4ZGRhYzc3MDEsIDB4OWU4ODZjYWQsIDB4ZmMyMDFhZWYsIDB4N2ZkMmNiZDgsCisJMHg0ZDEwMWMyZSwgMHhiMDFlZjI5NywgMHg5ZTdmN2U1MywgMHhmYzgyN2FhZSwgMHhmYjQ2YmI1NiwgMHg3ZTQ1OGViNywKKwkweGY1NWJmNWMzLCAweGVhZjEyOWUxLCAweDRkZjY4Y2I1LCAweGZkMTgxNzE5LCAweGMzNjc5NDA1LCAweDBlZTcyMWY5LAorCTB4ZmZkYzY0NDcsIDB4N2Y4NDAzOWYsIDB4MWFiMjY2YjMsIDB4YzQ0NmJhMjAsIDB4YjMwYTBiNDksIDB4NzM0OWM2ZTIsCisJMHg4NjM3ZjQwOSwgMHg3MWIzZjdkYywgMHg3NzkyNzE5MSwgMHhiN2UyMjhkNywgMHgyY2VmNzU3ZiwgMHhhYWE2YmFhNywKKwkweGJhMmZhMTNhLCAweDI5YmFlMTI2LCAweGZiMDNmN2U0LCAweGQ2NzU1NWQxLCAweDU1MzNjNTIwLCAweDdkZmMyZmM4LAorCTB4YzkwOWYxMWEsIDB4NDY1MjkzNjMsIDB4YzY3MTgyN2MsIDB4NDJmZWI0ZWQsIDB4ZjNjNGVhYmEsIDB4ZmI0NDZjMmYsCisJMHgyYzJmY2I4ZSwgMHhhYmY5OTJmZCwgMHgzNzM4ODQ2ZCwgMHhiYzQwNmRlMiwgMHgzNzg4YzNiOCwgMHhiZjBhYWYyYSwKKwkweGE5NWU3OGQ2LCAweDUxZGM3MDc1LCAweGI1ZWEyNGQ5LCAweDMzN2M4ZTFiLCAweGVkZTEwYjM0LCAweGQwZjNmZTZlLAorCTB4M2U0ZjU0ZTUsIDB4ODZlN2Q4NDAsIDB4NTRhN2QwZTIsIDB4MWVmNWY0NTcsIDB4YjVmZjVjNWIsIDB4YjUyYmZmNTcsCisJMHhlNjk1MGYyYywgMHg2YmY2NGM4ZSwgMHg3OTFmYTIwZSwgMHhiN2QxZWExMywgMHhhNTM4ZTBiZiwgMHhiZGMyNDhlMSwKKwkweDVhZWJjZjk0LCAweGZjZTYxZmUxLCAweGMzNTUzYTFlLCAweDM3ODNmNjI2LCAweGU0YjcyZDQxLCAweDhkZmE0NTFmLAorCTB4NGVhMjlkMmIsIDB4M2Y2OTQxZTksIDB4ZjIwOGZmYTksIDB4NzczODgzZjUsIDB4Zjk3ZjYxNDYsIDB4ODU0OWY0MzcsCisJMHgxMGQ1ZWJlNCwgMHhlOTU1MzJkOCwgMHhhNDJhMDdhZiwgMHhkZmNkYWNkYywgMHhmNmFlODViNSwgMHgwYWE3ZmQ2MywKKwkweDMxMTg0ZjI5LCAweGY1OGNiZGIwLCAweDg2MzNmZTlmLCAweDRlZGZhYjVmLCAweGJiYjhmZjY0LCAweGFlNTI3NTRkLAorCTB4YWJmYmYxMTksIDB4NjIyN2U0NDEsIDB4MjcxZDkwNWMsIDB4ZTQ4NWZiNWYsIDB4N2Y3OTRlY2YsIDB4NjU0OTNkNWMsCisJMHg4YjI2OTlmYywgMHgxMGI3ZjBkNiwgMHhkZDM3Y2M4ZiwgMHhiMjQxMWRhNywgMHg1Zjg3Nzk2ZiwgMHg1ODNlMjZjZCwKKwkweGRlZmEzYmJiLCAweGU3ZThlODg5LCAweGM4YTBiMWJhLCAweDdjZWM4NTQ3LCAweGJmOGM2NTE3LCAweDMxZDVmODc0LAorCTB4NmZkNTZmYzQsIDB4ZDA0YTNiN2YsIDB4OTY1MTliZTcsIDB4NjdjMzZiZjQsIDB4ZTIyMjhhYjQsIDB4ZTIyMjkzNjYsCisJMHg0NzVhZmRlNiwgMHg1NTZiYzUzMiwgMHg2NDVmNTUwNywgMHhlZjQxYmYzZCwgMHg4MTNjYTU5NywgMHhmNTAzZjIyNiwKKwkweGFiZTY3NDAzLCAweDFmYzEyNmVhLCAweGUyZDE2NmE2LCAweDdlNDQ0YmZlLCAweGY3ZmJjY2M4LCAweGJlNDYyZjFiLAorCTB4MDY3YjFlZjksIDB4NDBmMjE3MDQsIDB4Zjk4N2I5OTUsIDB4ODliNGVhYWYsIDB4N2QzYWE5ZTEsIDB4YzQ0NDczMzksCisJMHg3NzVhMDE3YiwgMHhlYWJmZTkwMCwgMHhjNGZhYzA3NSwgMHhlNzZmYTQwZSwgMHhkODkxZjdkMywgMHgwMjdlZmY5ZiwKKwkweGIyYzc2MWZiLCAweGZiOGI5N2I3LCAweDdmNDgxNTJmLCAweDlhZjZmYzNkLCAweDYwZjY5MWQxLCAweDJmNzEwMGUyLAorCTB4MzcwNzg0MGUsIDB4MTBiZjNmNzksIDB4NmMzYzRiZmIsIDB4YmYzMjQ1ODIsIDB4YWY3OWY4MjAsIDB4MmUzMDliOGMsCisJMHg5YzQwNzM3YiwgMHhmZDdhZWNiOCwgMHgyYjY2ZWFlOSwgMHhlYWI5ZmU1MCwgMHgxOWQ3MmIwMywgMHg5MmJjZGQ3ZCwKKwkweGVhYjg3ZWUzLCAweDA2ZmE0ZDFmLCAweGE5MWJmZWZjLCAweGNhZjBmODdkLCAweGViZmNmNGQxLCAweGU0NmZhYmMzLAorCTB4MjliMmE5N2MsIDB4MjAxMWNmMmEsIDB4NWZlNGRjZjgsIDB4NWRlZWY1N2QsIDB4NjliNjdmZTQsIDB4YjYxNDlmZWMsCisJMHhlZTk3N2Q5ZCwgMHg5ODM1Zjc2OSwgMHg4YWQxZGJmOSwgMHgwNjc2MTNmZCwgMHgyYWFmYzg5MiwgMHgxMWRmNGY5YywKKwkweDk4ZDU2YmVkLCAweDMyZGZkMGZmLCAweGZiM2IyYmZjLCAweGQ4OGFhNzU3LCAweDdjNzVjMmJmLCAweDRlOGI2ZTQxLAorCTB4YTdiYWQzOTQsIDB4OWE2ODhiOGEsIDB4ZDdhNGUzODIsIDB4ZTU3ZjkzYzYsIDB4MGNiN2YzZTgsIDB4Zjg5MzNlNzgsCisJMHhlMDQ5NmVlYywgMHhkOTAyOGJiYywgMHg0NDYwY2Y4MiwgMHgxYWViZGMxNCwgMHg2NGZmNjc1ZSwgMHhmNTFhYTM1ZCwKKwkweGRlZjE4OGZkLCAweDdiODgwNjVmLCAweDNlMGNlZjg3LCAweGU2NWUyOTBiLCAweDVkYTJiZGEzLCAweDkzMmZiOGQ3LAorCTB4MWNkNmIxY2UsIDB4YWVhOTNlNjIsIDB4M2RmMThiMzMsIDB4MDdiYTA1YTIsIDB4NDExZmMwOWEsIDB4MjczZjA4MDcsCisJMHg2NWQyMTFlOCwgMHg4NDM4MjU5ZSwgMHhiZGJkZmFmYywgMHgyZWIyOGFmNywgMHhmNWVhMjgyNCwgMHhmMzg3NWE2YSwKKwkweDViOTc0Yzc3LCAweGIzYzdhNWY3LCAweDllZTkyNzQzLCAweGUzYmUxZDA3LCAweDhhMWUyMjU5LCAweDViYWRmZjFkLAorCTB4OWY4ZTQxZTQsIDB4ZjhmMWZhMTMsIDB4NzhlOGZmNGMsIDB4YzUwMDMyN2EsIDB4NDhhMDVmMjIsIDB4ZWY4ODM1ZmEsCisJMHgzNWU3NjNlZCwgMHhmZTc4N2FkMywgMHhjNzAyNDNkZCwgMHhmNzNiOGY4OSwgMHg2M2ZkZjAyNiwgMHg3NWU0NGJhNywKKwkweDM0ZGJlYTRiLCAweDZkNjYxZWZhLCAweGVjODEzMjgzLCAweGY3OWNkYWQyLCAweGVjMTk3YmY4LCAweDVjOWU5MTE3LAorCTB4ZjdjODNlMWIsIDB4N2I3NTE1YWYsIDB4YzBlMzc5NjcsIDB4ZWMyZGRkYjEsIDB4OWRmOTNjYzMsIDB4N2NmOGVjNzIsCisJMHgzYzA2N2UzOSwgMHhkYjllMzIxOSwgMHg2NzNlZjc0ZSwgMHhmMTRlY2RjYSwgMHhlZWY4OWJkZCwgMHhkN2E5NTZmNSwKKwkweDY2NjJkZjE3LCAweGU4MGNlYTNmLCAweDIyN2Y3MTY2LCAweDQ4MTYzOWVlLCAweGQ0YWI3ZGJkLCAweDYzZGZiMWY3LAorCTB4NzZmZGZhMWIsIDB4NjdjMmNlYjksIDB4NzNkZDMzNjAsIDB4N2Q5ZjdlYzQsIDB4MTcwZmY0YmIsIDB4ZWZkNzk3ODEsCisJMHhmNGJkNWRmNywgMHhmZWZmNjMxMywgMHhlYTViODk0MiwgMHg4YTMwNTFmNSwgMHhlZDA4N2FmNCwgMHhlNDViZDcwZCwKKwkweDllZGRiMDI2LCAweGFlMzIzMDVmLCAweGE5ZGY0MWRmLCAweDc1M2JmMmViLCAweDU3ZmEwZDZhLCAweGY2YzdiZWU3LAorCTB4YjljYjc4ZjAsIDB4ODZmYmY5OTcsIDB4MWQ5MDA5NzMsIDB4Y2ZhZDllZTcsIDB4ZTQ3YTFhMWUsIDB4Nzk3NzQxMzYsCisJMHgxNGUxNTFlZiwgMHhiZmY0MWEzMCwgMHg2NDVhMTE4NCwgMHhmZmEwY2Q3ZSwgMHhmZjBlOTI4MywgMHgzOTQ1NzVjNywKKwkweDYzZTY0NWEwLCAweDA3ZmVhOTBlLCAweDQ3NTQxOWRkLCAweDM4ZmVjOWRkLCAweDIxZWQ4MDllLCAweDNjYTg2YjllLAorCTB4ODQ2YjUwZDcsIDB4NzAzNGJiOWQsIDB4ZWUzZTVjNzksIDB4NDA2YTVmM2IsIDB4NmU3NDkzZDgsIDB4ZWNhZDcyNWIsCisJMHgxNDg0NTYzNywgMHgyMmIwZWVmZSwgMHg5YjdmYTIwYywgMHg1MWNhZjljMiwgMHhiZjVjMmQwZCwgMHhmMTU0YTRiMSwKKwkweDNjNWE4NTc4LCAweDdjMTlmMDRiLCAweGZjMjZjMGI0LCAweDdhNWY4MzAzLCAweDg4ZjkyNWYxLCAweGI4NWZjOWM2LAorCTB4YjEwYmZhNTUsIDB4ZGExYTM0ZmMsIDB4NGJmYWQxNjcsIDB4ZWE4NzhhYmQsIDB4NDdjOWFmMzYsIDB4NGViZGM2Y2IsCisJMHhmOGI1ZWVlMSwgMHg0Y2QyZjkwOCwgMHg5Zjk2MzE3YSwgMHgxZmZiNzM1ZSwgMHhiNzc1ZmMyNSwgMHg4MDUyNWU1ZiwKKwkweGZkY2YxZmViLCAweDRmZjEyODZjLCAweGU4ZTQzNWU1LCAweGRkYmY0OTQ1LCAweGFlNzFjMDhlLCAweDc1OTdhOTYzLAorCTB4OGRiOWY1MDQsIDB4NTY5Nzg0MWQsIDB4ZDNiMmJmNjAsIDB4ODM2NWJlZDUsIDB4OGViOWI3ZjAsIDB4YzA5YzIyYTAsCisJMHg0ZDE1YTVmNSwgMHhhZDZlZmU3NiwgMHg3MTNhYTFhMiwgMHgyNmUzZTkwYywgMHg3ZWM3NjNkNSwgMHg1MmU5YzM3OSwKKwkweDE3OTQyM2NhLCAweDJhOTczYTg5LCAweGFiYmJhOGJiLCAweGJiYmE4YmIyLCAweGU3ZmVlOWI5LCAweGVmZjgxM2RjLAorCTB4MTFkNzQ0MDMsIDB4YjU3ZTNhNTgsIDB4M2VmODdiZTEsIDB4OTMzNWRmNTYsIDB4N2ZlMTM3MGYsIDB4NGIzNTBmNGUsCisJMHhiYjY4NmNmYywgMHhjNDg2Mzk5MiwgMHg4ODdmZGQzNCwgMHhmZDdlZWVlMCwgMHg4YTdkMGI0NSwgMHhkNWU2MzU1MSwKKwkweGQ2ODI1NDU5LCAweGRlNzlkNmVjLCAweGI1MmQ3NTJkLCAweGUwMzY1Njk0LCAweDQyOWRiYmI3LCAweDQzODM5YWVmLAorCTB4YmZjZDZmZDgsIDB4ZWE5YjdhYmUsIDB4MjU4YzZmODMsIDB4ZDJkNWQ1ZmIsIDB4YzExMmQ2MzYsIDB4NTAxYjlkZWYsCisJMHg2M2ExYzc2ZiwgMHgxY2E0OTgzNSwgMHhjYTJhZGM2YiwgMHgwOTQ3ZTkyMiwgMHgzZTZhYWViOSwgMHg4YmY5NDk5YSwKKwkweDdjZTc5MjRlLCAweDFlNDlkZjZhLCAweGRlYzU2ZDgxLCAweGM5MjNjOTMzLCAweDVhMmZkOTlmLCAweDRkNGJiZDYzLAorCTB4YWQwM2NmMmEsIDB4NDllZGQ0NjMsIDB4NjY2ZGYwOTEsIDB4YzQ4NTJlZjgsIDB4YTMxZDAwM2EsIDB4OGU0NDE3MTYsCisJMHhkNmJmZmNkNywgMHgzZTg1MTcwNywgMHgwN2QyODhlOCwgMHgxNjQyOWUwNiwgMHgwMzg4ZWZlMCwgMHhhNzVjYWQ4NywKKwkweGFlM2ZmNzQwLCAweDAzNmEzYTA4LCAweGMyNmVmZDA1LCAweDc2ZTQ4YTYwLCAweDBmN2JkZDMyLCAweDgzNGY5NzI3LAorCTB4NDFhZmE5YmIsIDB4ZmJhNTRiNTgsIDB4ZWEyYWIwZTksIDB4YmViMDg2ZmIsIDB4YmZmNzI4OWYsIDB4NTBiNzBiNDksCisJMHg3OTY0ZjAzZCwgMHhkYTA1M2E1ZiwgMHhlODBjZGU3OSwgMHg0ZTBiZDZlMSwgMHgxOGJhMGVmZSwgMHhiMjRlZGMzYywKKwkweDVhNTNlNzg1LCAweGUyMTQzZjJiLCAweDk5YzI3YmVmLCAweDRkODJlYjlhLCAweDg3MWQ2ZjdlLCAweGQzNzg3ZGRlLAorCTB4MGY4MTgyZTAsIDB4NDRkNWVlOTUsIDB4NzllYzUzM2QsIDB4ZmMyODE4NmUsIDB4NDJiYzliYmMsIDB4NDE0YjkxMGYsCisJMHgyMDkzYzBmNSwgMHhkM2Y5ZjdjNCwgMHhlYmRlNDNhMSwgMHg1NGM3M2ZjNywgMHgxZWU5MGI4YywgMHgzMWJhM2E2ZiwKKwkweDIwOGY4Yzg5LCAweGU3NDY5ZmNmLCAweGE3OWRlMzUxLCAweDE5OTMzZTYzLCAweDlmMDQ5ZDRhLCAweDdkMzRjZTEyLAorCTB4NzNmZWJmNjcsIDB4MjgzNTUzNzQsIDB4ZWJlZmJkZTUsIDB4NTE3MWZhZTksIDB4YTdhODNkZGYsIDB4YTlmNzhkZTksCisJMHg3YWYxNTk3ZSwgMHg0M2Q5YmViOSwgMHhmYzUzOGRkZiwgMHg3YjNhZDYxMywgMHhjMDM2NTlmNSwgMHg3MjJiODE5OCwKKwkweGZiZTg0ZTA2LCAweGMwZmMwNDZlLCAweGRmYjEyNDc1LCAweDI3N2M0NDhkLCAweGZlMjMxNzAyLCAweGU3NTE5MjJlLAorCTB4NDhiODNiYmIsIDB4NjU5MTNhYTcsIDB4N2JmZTM2ZTksIDB4YTFiNjg1M2IsIDB4NzlhZjI5ZTMsIDB4MzM5ZmNkMjgsCisJMHg3ZGVhODMzMCwgMHg2MmYyNDZlYiwgMHhmYjAyNzA1YSwgMHhlY2JmOTJiOSwgMHg3ODQ0OWRlMCwgMHhmN2M2YmM1MCwKKwkweGQzN2NjMDJiLCAweDMyMGJmN2ZiLCAweGIyMjdiZjgxLCAweDNlNzdjNTViLCAweDZkMWY5MWRiLCAweDNhMDUyY2E5LAorCTB4MjNjMzVmZDUsIDB4ZDNmOTNhMjUsIDB4MGYzNjVjNWIsIDB4MjU2YzQ3N2QsIDB4NzA3ZGVkYjgsIDB4MWQ0NGQ4ZDcsCisJMHhkNDRkOGQ0OCwgMHg3MmY1MTg3OSwgMHhiMWFkNzhiMSwgMHg4ZjRlNzkxOSwgMHg5OGYxZmQ4ZCwgMHg2MjdlOTBlZiwKKwkweDc4NDJkZmYzLCAweDk4YTkyODdhLCAweGRlNTMwZWZmLCAweDVjZGNkMzJiLCAweDdmYmYyNTBmLCAweGYwMzA0OWFhLAorCTB4ZTdlMzZjNTAsIDB4ZWM5NGY1N2QsIDB4M2Q1MmQ2NjcsIDB4OTM1OWMyMzcsIDB4NzhmZjVjMDEsIDB4MGE1NDY5MzQsCisJMHhiNGQ1NjVkNSwgMHg5YWVlN2E4OSwgMHg3N2ViMDA4YywgMHg3ZDYxNWZiMywgMHhkMjVhZDM1ZiwgMHhiMmUyZjY0YSwKKwkweGRkNzVjMmMzLCAweDA3NTEyZTM1LCAweGQwODBjODFmLCAweDNkMzQ3YWYzLCAweGEwZjQxOWE2LCAweDhmNTk0YmZiLAorCTB4NWM2NWQwNjQsIDB4N2JkMDk0M2EsIDB4OTFkZWMyZTMsIDB4ZGI0MjkzODQsIDB4ZmRkMDM3Y2IsIDB4NzQ3MGI4YzIsCisJMHg2OWQyMTk3ZCwgMHhmN2E5ZDEzNSwgMHhjOWNkMWUzYiwgMHg3ZDA2MWVmNSwgMHhkOTk4NzE5MCwgMHgwNmVlOTI5ZCwKKwkweGRmYzY5Y2JkLCAweDUxNmFmMDIzLCAweGEwYzA4ZjdmLCAweDQxNDRmNmUzLCAweGUwNTUzMzJmLCAweDc1NzdlNzBjLAorCTB4NGU5NjM3NWEsIDB4MTRlMTFiZmYsIDB4NGJiMGJhYzEsIDB4MDAwMDRiYjAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI3N2JmZjAwLCAweGEzZjBjMGNkLCAweGE1ZmQ4MTFlLCAweDc5YmExODE4LAotCTB4ODk2OGM1NTAsIDB4MzAzMjcxMzcsIDB4MzAzMTcwYjAsIDB4MDY3MTAyNjgsIDB4MjAzNmRlZDAsIDB4MTdjNDBlZGQsCi0JMHgxMDIyZjg4MCwgMHgzMDMzNzE5YiwgMHgxMTcxMDIxNCwgMHhmMjAzMmYxMCwgMHg1NmRjZDA5MywgMHg1MGMwYzRjMSwKLQkweDQwMzVjNDA1LCAweDNhYzQwNzVjLCAweGJhMGMwYzhjLCAweDFmZGJjNDhjLCAweGYwYzBjNDJmLCAweGQ3YzEwYzQyLAotCTB4NDg2MDY3MTAsIDB4ZmY5ZmE0OTEsIDB4NTRlZTFiMDcsIDB4YzI3ZGFmYTEsIDB4ODYwYzBjYWEsIDB4NDY2MmE4YmEsCi0JMHg1ZDYzN2M2OCwgMHhhMDk4NjZmYywgMHhmMWEyOWJjOSwgMHgxN2U4ZjBjZCwgMHg4N2U1NDBiNCwgMHhlM2YyYTIxOSwKLQkweDc2MTgxOThjLCAweDM3MDlhOTIyLCAweDc0MTZlZmM0LCAweGY3YTgwMmZjLCAweDAwMDMxMDI1LCAweDIyMDM3YmViLAotCTB4MDAwMDAzNjgKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDkzY2JmZjAwLCAweDUxZjg2MDY1LCAweGQyZjljMDhmLCAweGJjZGUwYzBjLAorCTB4YzRiNDYyYTgsIDB4MGMwYzVjMGMsIDB4MGU1YzQwNDEsIDB4N2I0MDFhYzQsIDB4ZGJlOTAxNmYsIDB4Y2RjZTFjNDAsCisJMHhjNDAxMTBjMCwgMHgxZmY4ODFmYiwgMHg2MjA3ZmYxMCwgMHgwNGQ2MjAwZCwgMHg3OTQwNWZlMiwgMHg1YjFiYTg0NSwKKwkweGRhMTgxODk4LCAweDg4MDNiODgwLCAweDg3NTg4MGJiLCAweDk3NDE4MTkxLCAweDkzZmI3ODkxLCAweGRlMTgxOTg0LAorCTB4N2FmODIzODksIDB4Y2QwYzBjMTIsIDB4ZmZmM2Y0NTIsIDB4NTYzMWMzNjAsIDB4MjllZmI1ZjQsIDB4MTc0ZTNlZDAsCisJMHgxOWM3M2YwNCwgMHg1MDVjMjQ5OCwgMHhlMGJiNzBkNSwgMHg0ZDA3ODMzNywgMHhjZjhkMTc5ZSwgMHg5ZTdmNDc4NywKKwkweDVjYmYyYTIxLCAweDRkM2Y5NTBiLCAweDIzZTE4MTg3LCAweDJkMGE5YTkyLCAweGM3NDE2ZWZjLCAweDBjMGM0NjhhLAorCTB4YWJjNDQ2NGEsIDB4Y2E4YzYwZGYsIDB4ZDA4MTMwMGYsIDB4YjFhZGY5MDAsIDB4MDAwM2E4MDksIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0N2MwOSwgMHg3M2I5ZjhiOSwgMHhjOTk5ZGVlNywKLQkweGFjODQ5OTJjLCAweDVkODZmMTJjLCAweDQ4NDA5YzA0LCAweDU4NzZjNDQzLCAweDA2MjJiNGE0LCAweDMwYTIwYTk3LAotCTB4OTAzN2Q5NmMsIDB4ZmY2OWYwZmEsIDB4YTVhYjA4MTksIDB4NjhkMDZhMWEsIDB4NjgzMDRlYzEsIDB4MWEwNzQxYjAsCi0JMHgwMWMwNDgzMCwgMHg2YTJiZTJkNCwgMHg2ZDhhZDNlYywgMHgyYzM0ODBjNSwgMHgwZGM0NjQ4NiwgMHgzZmYyZDNkZSwKLQkweGNkY2U3N2RmLCAweDExMzM3YmRjLCAweGJmZmJmYjZjLCAweDRmMTY5ZmU1LCAweGI3ZmIzZGNlLCAweGU3N2NlZjlkLAotCTB4OTJjYzVmM2IsIDB4NDA3ZTEyNDAsIDB4YTFmODY1YzgsIDB4MjExMzE4ZTksIDB4NWQyNDVjNjQsIDB4ODhmZGZkNmMsCi0JMHhlNTIyN2Q1MywgMHhhY2M4OTU3ZiwgMHg0NjVhNDhlMCwgMHg0NmRiZTQyYSwgMHhiMjEzYmU0NSwgMHhiMTZmZWIxMiwKLQkweDU4OTM0NmI5LCAweGM0MDJkMzQ4LCAweDkzZGYzZjQ1LCAweDg0NTkyMjY4LCAweGY4MjZlN2RjLCAweDliY2UyNWIzLAotCTB4MTIxMjY0MjYsIDB4NmY3MTY4ZGUsIDB4MjVkZmE3NGQsIDB4ZDAyNDI1YzUsIDB4YjcyMGZkNzQsIDB4NGE3NjgwNWYsCi0JMHhlYmMzZTQxMiwgMHg5YTU2ZjcyNSwgMHgxNjVmNWYyNywgMHhjYWQ5YmRhMSwgMHgyN2U4MTNkYSwgMHhmODdjOTA4OSwKLQkweGQyMjExMDdkLCAweGU4Zjg5MTQ1LCAweDAyNGJhNGZjLCAweDMyMjQ1YmE2LCAweDRmY2U5NzJmLCAweDI2NDZkZjcyLAotCTB4NzNmMzIyM2EsIDB4OTM5MmU0MjcsIDB4OTk0ZWZiZjQsIDB4NTJlZmQzOTYsIDB4MzdkNWFlNDIsIDB4MmQ3ZTUyMzIsCi0JMHhlNGZlNzAxMSwgMHg1ZmVjNGFlYiwgMHhmYmI1NmYxZCwgMHhkNzE3YWIzNiwgMHhkZmI1MTdlYiwgMHg1YzE3ZGNiYiwKLQkweGNiNzU3ZGYwLCAweDJkMGZkOGVkLCAweGMzOTY3NWMxLCAweDllNWExNGZjLCAweGE2MjY1MjcwLCAweDM4MTFmZjQ4LAotCTB4MzUxYzcwMDUsIDB4NzFkMGI0YWYsIDB4ZjA4ODQ3YmYsIDB4ODRlZDM3Y2EsIDB4Yjc2YWJiYWUsIDB4NWMyODU4YTQsCi0JMHg0Mjk2ZWYyNiwgMHhkMmY5YTAzZiwgMHg3OTAwMjEzYSwgMHgyMTFiMDFkMywgMHg5YjlkNmUxNCwgMHg5NGU0M2U1OSwKLQkweDdjZmY1MGJkLCAweDJlZDNjZDNkLCAweDhmYWQyZGNhLCAweGRkNzAwMGRjLCAweDM4YWQ5MjJkLCAweGU2MDlhZTRjLAotCTB4YWRjMmFlZGIsIDB4NmNmM2U1OTksIDB4Nzc1YTViMmMsIDB4MmZiNDJlNzAsIDB4MWIxMGI2NjgsIDB4NmY3NGFmZWQsCi0JMHg2ODFiOGNmZSwgMHg0NDg4ZmYzZSwgMHhiNmU5NGFhMCwgMHg5YTVmNzIxNSwgMHg0MTA4MGMyZiwgMHgyMjRkNzdjOCwKLQkweDhmN2ZiZTM4LCAweGViNDZkODE4LCAweDkzNWFiOTc3LCAweDNjNzBhNGVlLCAweGNhMjU2OTU3LCAweDY3NmYzYTMwLAotCTB4MTQxZGQyNmIsIDB4OWQ4MTQ1MGUsIDB4NTE1ZGExNTMsIDB4MTIwMWUwYTMsIDB4ZGI3YmJjOWEsIDB4NWRiNGE5ZWIsCi0JMHg2M2MxNzZlOSwgMHg2ZTI5NzBhMSwgMHgzODY1MTNiMCwgMHhmYTY1YzM5YiwgMHgwYzQ5YmRhZiwgMHgyZjk2ODBmZCwKLQkweGU5MjRlYmE1LCAweGE5ZWFkNzgwLCAweDM3ZjE4NDQ0LCAweDAyMzM4YWNhLCAweGMzOTU3M2E3LCAweGU0ODk2Mjg5LAotCTB4NzFkM2I3NGIsIDB4MTdiMmJiNjgsIDB4YjEyYzBmMDQsIDB4NDA3YzQ0Y2MsIDB4NmQ3YjlkOTcsIDB4YzA3MTllYjMsCi0JMHg0M2M4NTZmYSwgMHhiNWFlYjA5ZCwgMHgwZmNiZDQzMiwgMHg1MzYzZGZjYywgMHhmMjc1N2U2MCwgMHhiNDVlNWE1NCwKLQkweGQzY2U0ZWI5LCAweGUxYjhiZmUwLCAweDM1NThhMjNhLCAweDk0MWRhYWYzLCAweDYzMGZhNWFjLCAweDg5OTI4ZTdhLAotCTB4ODQ0NTNlNzYsIDB4MjAwZTgzNzgsIDB4NTMzYzgwODMsIDB4ODU3ZDE3YzMsIDB4NzE3N2M0MzgsIDB4OWZlYmE4ODMsCi0JMHg0NDkwOTI0MiwgMHhlOGY3ZGZmYSwgMHhmZTVlMTRhZiwgMHhhYjg0NGVmZCwgMHg5Y2E1Yjc4YSwgMHg1ZGJjNTQ4ZSwKLQkweGNjNDNmY2UwLCAweGZmNmQyY2UxLCAweGUwMDhmYTZhLCAweGJhYTdjZTgxLCAweDJmZTk4ZGQyLCAweGFkMzA1MzJiLAotCTB4M2YxMDU0YTksIDB4NjhmYzAzOGYsIDB4ZGJjZjgxYmEsIDB4MzQ0YzgxMzUsIDB4NWU1ZDcxZDMsIDB4OGIzNjA2ZTIsCi0JMHgyODlkZWU5ZiwgMHgyZTdjN2NkMSwgMHhlM2RkMjdjYiwgMHg1OTZmOTQxMywgMHgyZTNlOWFiZiwgMHg0ZjAzZTZmOSwKLQkweGJkNTMyMjZlLCAweDk3OWE1NGU2LCAweDg3ODg0YjdkLCAweGQ1YmU2ZjhlLCAweDIxM2M2NTNiLCAweGEzZGYxMmFmLAotCTB4ZTRkMTdlYjAsIDB4MTJiYzAwMmIsIDB4YTVjOTRjMTIsIDB4NTAyMzU5NzgsIDB4YjVlMTQyMzksIDB4ZTE0OTE2MTYsCi0JMHhkMjk1MjZiMCwgMHhlM2QzYzUzMywgMHgyMzNkNjZmNywgMHgwOWFkN2MwYSwgMHhmNjdiY2Y5MCwgMHhhN2VjNzRlMSwKLQkweDY5OTFmYjE2LCAweGRjYWU4MzNmLCAweDZjZGNkMjRmLCAweDczNDkzZjVkLCAweGVhN2VkNDBiLCAweGFiOTg5ZmIwLAotCTB4YjlmMWU3ZWIsIDB4Y2NmOWZhMzksIDB4NzlmYjUyMmQsIDB4YWU4OWVhMWUsIDB4ZDI1NzViYWIsIDB4ZjlmYTA5YmMsCi0JMHg3ZWMxMmJjYywgMHgxMGYxZWY5MiwgMHhhYTJmYWQxZiwgMHhiZDVhNDNmNCwgMHgzNDc3MmQyMiwgMHg5ODc5OGRjNiwKLQkweGQyNjhlOTY4LCAweDQ5Y2ZlODFlLCAweDQ3NGI0YWI5LCAweDNhMzFkOWIxLCAweGM2ZjM4YTdlLCAweGE2N2RmMmViLAotCTB4NGZkNWQ1ZjUsIDB4MmJhODFkY2MsIDB4YzIzNTllNGYsIDB4NzcwZTk3NDAsIDB4MGYzYzc1ZmIsIDB4OTE1OTcyOTMsCi0JMHgzMmJlZTVlZiwgMHg3ZDg5OWRjYSwgMHhmYmZmMzhhZCwgMHhlZTUwM2FmYiwgMHgxYmUzOWZkYywgMHg4NmYzYTZlNiwKLQkweGZmOGExMmI5LCAweGY1ZGY2NWZiLCAweDQzNzQyOGVlLCAweDE0OTAyNWQ3LCAweGE0MTMxNTQ4LCAweDEyYjVmMmM2LAotCTB4N2VhNGRiODMsIDB4NDEzZDBmNWYsIDB4YzI5Yjk3ZGIsIDB4ZmU2OGUzNDMsIDB4OGZmMTMwODgsIDB4ODBiZmVlYjAsCi0JMHg4Yjc4YTUzMCwgMHhkNDA1NDkxMSwgMHg5NDEwYjE4YiwgMHhiM2QzNmI3ZiwgMHhlMDZiZjE5ZSwgMHhhNTAwNmViYSwKLQkweGVmZDIyMTE3LCAweDAyOTdjOTNhLCAweGFmZTZkOGY0LCAweGFlN2QwM2YwLCAweDYwNTMyMDE5LCAweDU0ODI3MjEyLAotCTB4Njk4M2ZjODQsIDB4Mjk3OTAxZmIsIDB4NGM4YjdmMDAsIDB4N2M3Njg3ZTUsIDB4MTIzZjhlOTksIDB4ZjE4NzZmYzcsCi0JMHhkZjE5N2EzYiwgMHgzNzViMzAzMiwgMHg0MGFkMzViZSwgMHhhNjU1YmUzNywgMHgwOGZlNTNlMywgMHhmMWYzOTdmYiwKLQkweDA4NzJmYzI5LCAweGM3MmM5NGY5LCAweDA1NjkyZGYxLCAweDk5NWFmZTM4LCAweDhmYzZlODE0LCAweDRiZmYxZWU5LAotCTB4MTg2YmY3MTgsIDB4ZmFjYTMxM2YsIDB4ZDdlOGU2MDcsIDB4NWZhNDU2OWYsIDB4NGZkNmNjYmYsIDB4ZjhmOWY4NTYsCi0JMHg0MTdlYjgzMSwgMHhhN2Y1YjNmMCwgMHg1YmY1YjExNSwgMHhlM2RkYmY1OCwgMHgyZmUxYmFiYiwgMHg4NzVjNzQwYiwKLQkweDA3ZmFjYmQwLCAweGZmYWZkMDRkLCAweGZhZmQxMjlhLCAweGY3N2M2YzJkLCAweDdjN2M3NThhLCAweDI3MWY4ZTA3LAotCTB4YmZlYjYzYWMsIDB4OTdjNzA0YTYsIDB4ZDAwZjNlMmQsIDB4YTYyZmRjOTEsIDB4NjlmYjAwMjIsIDB4Yzk0MGNhN2YsCi0JMHg5OGJkMDMyOCwgMHg4NDI3OGYwZSwgMHg5M2RmOTNjYSwgMHhmYjg3MDg4MSwgMHg3ZGRkMTg2MywgMHhjZGU5NDMxOSwKLQkweDI0YTc5MTExLCAweGVlOTAzOTQwLCAweGE2OWM2NWMzLCAweGNhMjcxYjhiLCAweGUzZjY3ZjZjLCAweDRmOThiZWJlLAotCTB4ODhiMzUxNzUsIDB4MmM2YTRkNzQsIDB4YmU3NDIxODEsIDB4MWZhMmNkOWQsIDB4NmU2YThiZjIsIDB4OWZiODg4MGMsCi0JMHg5ODgyM2QzMiwgMHhmZmJlMDg0OSwgMHhhZGE4ZDM3NSwgMHhkMzE5NzVkYSwgMHg3YjUyZDVjNSwgMHhiYWFmODY5YiwKLQkweDMyMjRmYmU1LCAweGFmY2U4MmJjLCAweDVjNjA4ODAyLCAweGU1NGVkZjI0LCAweGY4NzJhMTM0LCAweDkwYzc5NTI0LAotCTB4NWU5ODk2OWUsIDB4NzFjYThhNzIsIDB4MzdjYjRjMzIsIDB4ZTI1ZTk4MmIsIDB4YTcwZWVmMjcsIDB4OWYwOWZmZjMsCi0JMHhjMTk5YmI3ZiwgMHgxMDk5N2RiYiwgMHhiOTdmZjgwMCwgMHhmMjBjODk3MSwgMHg5ZGI1NzE2YywgMHg4ZjMyM2QwMiwKLQkweGYwYTc4ZTcyLCAweGY1MDA0YjVlLCAweDAwMWRiYTI5LCAweDU2NDJlZTdjLCAweDAzYzNlNDI0LCAweDUwMmViY2I3LAotCTB4YjZiZjJkM2QsIDB4M2RkZGFlOGYsIDB4ODUzYWIwMjQsIDB4NjFiODVmZDYsIDB4NWQzNzAwZmUsIDB4OTY1OTljZmYsCi0JMHg0ZmVjMjIzMSwgMHg4NGNmZGJjNCwgMHg5OWZhNGM3YywgMHhkNTk5MDliMiwgMHg0N2VhNTFiNCwgMHg5MmNkNzczMywKLQkweGRhNjliNjRlLCAweGYzZTlmNmNmLCAweGY5ZjQwYTczLCAweDk5MjAyOTRlLCAweDE0Mjk5ZjQwLCAweGY3ZWQxZDQ4LAotCTB4Yjk3ZDBhZGUsIDB4MjEzNGNlM2EsIDB4OGY5NWUxOWUsIDB4ODMwYTEzZjcsIDB4NWVlOWZhNTQsIDB4NjdjMGM3NDgsCi0JMHhhZTc1ZTIzNywgMHhlNzU1YjU5YiwgMHg0NGEwZmU1MywgMHhiNzFmYjg0MiwgMHg3ZmM0MTIyNSwgMHhiOWYzZDYyMiwKLQkweGYzOGRiYWQ5LCAweGJkNTkyYjlkLCAweDczM2U3NGI5LCAweDllMTExMDFmLCAweDFkYjdmOWM2LCAweGEzNGQ3YmIwLAotCTB4OTlmYjVhNjksIDB4NWM2ODI0MDQsIDB4ZjNmZTcxOGYsIDB4ZTNkNzFiOTYsIDB4OTg3ZjYxOTYsIDB4Njc3ZTM3ZWYsCi0JMHhhN2E0NjI3NCwgMHg4Zjg5ZTZmMiwgMHg1M2QwZDI5ZCwgMHg4ZjQ3ZjA2OSwgMHgyYmI0ZDI5ZCwgMHhjYmE5OTg2ZSwKLQkweGViNjYwNjE3LCAweGNlZDdlN2VhLCAweGFlMmY5NWQ3LCAweDJmOTVkNDJlLCAweDk3NDRiNzVjLCAweDQwN2ZlZjlmLAotCTB4ZjJkZTdmNTcsIDB4N2JmMmJhMTUsIDB4Y2FlYmQ2MmIsIDB4ZDQ2YzE0ZTcsIDB4OWVmYjY3ZTUsIDB4NmJiZmQ1ZDQsCi0JMHg1Y2FlOWQ1NiwgMHg0ZDc4NTAzOCwgMHhkZjU1Y2ExYiwgMHhiN2EwYTkzNSwgMHg0MDIxNjA3ZSwgMHhhYmJkMmE4ZiwKLQkweGVhODY3MGZjLCAweGEzOWU5MDJkLCAweDJiYTQwYjdhLCAweGZmMjk0ZjgwLCAweGI0YjJmNjliLCAweDZiZmNlYjdjLAotCTB4ZmViZDFhZGMsIDB4MDY5MTU0YjQsIDB4N2JhNDY0ZmMsIDB4ZjQ4ZDNjMjMsIDB4NDVmYTdmNGQsIDB4YjRkNDg3ZGIsCi0JMHgyMGI5MjA0NCwgMHg3ZWY4YmFlNywgMHg1ZWJmN2VhZSwgMHg2NDdhNzEzMCwgMHg3ZTEyOWRlNywgMHg5NWQ5Mjg5ZSwKLQkweDNiY2UwOTNhLCAweDY4Njg3MjI1LCAweDdlZjdhMzg1LCAweDc1YzA1MDQ5LCAweDEzZDJkMDEwLCAweDVhOTQ2ZjAxLAotCTB4NmUyYjcwMzUsIDB4Njc5YmE0MTgsIDB4YzcxMTQxYzcsIDB4YTVkZTAzMmYsIDB4ZTQ4MzJmZjIsIDB4MGYyMDBiMzYsCi0JMHg2ZWQzODc0MiwgMHhmMWYzMDUxZiwgMHg0Y2Y5MDVlZSwgMHhmZjcxMTM5YSwgMHhmNjljYThlZCwgMHhlMDA5MjlkOCwKLQkweDk5ZTk4Yjk3LCAweGI2OTg1OWNhLCAweDNkMzBmYTU3LCAweGU5ODA1OTU1LCAweDRjMGFjYWM5LCAweDYzOTcyYWRiLAotCTB4OGZkMmJjN2EsIDB4ZDcyYTVmZTksIDB4Y2FhN2ZhNjEsIDB4NTU4ZjRjNmEsIDB4YzdmYTYyZDYsIDB4OWRhNjAwY2EsCi0JMHg1NTRjNWU5NSwgMHg5Mzk2ZWRiYSwgMHhlNTZmNWNiOSwgMHg4MWZhMGJlNywgMHgyZDdjYWRlOSwgMHgxNWJkZmQyMiwKLQkweDAyOTNkMWY5LCAweGYxYzE3OGZjLCAweGNiZDA1MGU1LCAweDQ4YTMxYzJmLCAweDVlMWRlZjRlLCAweDE1ZTg3YTQ2LAotCTB4N2E4YmM0YWUsIDB4ZTI4MDVlNDUsIDB4NzJjZjRmYjksIDB4OTNjMzBjNWIsIDB4MTFhNjQ0Y2QsIDB4MGZkNjM3MmEsCi0JMHg2MGIzZDY3OSwgMHgyNGNkZTYyNCwgMHgzYzA3ZGExZSwgMHhmYTUxOWQzMywgMHhlMDE0N2JhNSwgMHgyMjc4NGFlYiwKLQkweDM4NjhmMGRlLCAweGY1M2ZiNzBmLCAweGVmZDA1OTlmLCAweGI2NDBjMmY1LCAweDcxMTYxZTVmLCAweDY3YTEyNGJmLAotCTB4ZWZhZjgwM2MsIDB4OTVlMTM3MGEsIDB4NmY4MGQzMGYsIDB4ZjBhYTI3Y2UsIDB4MzQyMzRkNmIsIDB4YjFiODIyNWQsCi0JMHgxNjRkMGJmZiwgMHhiNjM4MDY2MiwgMHg4NDcwMDNkOCwgMHgxOWU0NzBiZCwgMHg0Yjc3ZWMxNywgMHg1M2VhYzQ1MywKLQkweDU3ODc3YjYzLCAweGRhYmQzMDY5LCAweDc5NGY1OWExLCAweGExN2YzZWIzLCAweGNlYzY5ODVhLCAweDFkZWM0YWY5LAotCTB4ZGNhZTgwYTMsIDB4MDA4NmE3ZDUsIDB4NTUzMDUzZmUsIDB4MjI5YTU5ZmIsIDB4YjllYTM4ZTMsIDB4MjFjNjM0OTYsCi0JMHgyMTczZDI5ZCwgMHhjZjY3ZmJkNiwgMHgyMjdlYjdhMywgMHgxZjIyNjhmMywgMHhiYjAxZDg1MywgMHhlNTc0MWU1YywKLQkweDdjMGY0YmYzLCAweDczOTczZjliLCAweGQyMmQ0ZjAxLCAweGM3OWZiMDk3LCAweDA3OTc3ZmQwLCAweGNjNjZiZjQyLAotCTB4MDc5NmZkYWIsIDB4N2FlNWJmNDUsIDB4MWJhOGRlZjgsIDB4ZDQ1M2I2OGYsIDB4ZWJiNDM3MzMsIDB4YTRjZDVlOWQsCi0JMHgxNTI3NWQ1ZCwgMHhkZWRjMTk2ZCwgMHhhYjYwZGM1MiwgMHgzOGZkY2JkNiwgMHgzOWJjYmU1ZCwgMHgwZmI3NWFiNSwKLQkweGVmOTQyZmMwLCAweDA2NjA4MTQ5LCAweDU0ZTEyOWJhLCAweGFjNzY2NWQ0LCAweDFjZmNlODEzLCAweDJkZmIwNTI2LAotCTB4NTJiZDU4MTcsIDB4NTNlYzliNmIsIDB4NDE1YjBjOTAsIDB4YWQ5MDU4MGYsIDB4ZDc3MjlkZDIsIDB4M2U1Y2E5OWYsCi0JMHgzYzg5N2JmYiwgMHhlZWRjZTUwYywgMHgyNTQ3ZjZhMiwgMHhmY2QxMzEzMCwgMHhkMDViOWU0MiwgMHhlNDFkM2M1NCwKLQkweDM3M2RkOWRkLCAweDg4YjBmZWEzLCAweDEwZTBiYWU0LCAweGIzYWE0MDUzLCAweDRmMzkwZjQwLCAweGVlODBkMzRjLAotCTB4YjgzZjkzY2YsIDB4MDNjZTZhYzYsIDB4Y2UzMjRjNzMsIDB4ZmQzYWUxNjcsIDB4MjdmNTQ4M2UsIDB4NTZiZjNlNWQsCi0JMHhiNzIzY2Y5ZiwgMHhlNzlkMDEyNSwgMHgyMDI0NDhkNSwgMHhjYmVhM2YwMCwgMHg3ZTMxMzY2ZiwgMHg2YjE1MjdjOCwKLQkweGM1NTg3ZjYwLCAweGRjMGIxM2NmLCAweGYyOGZkY2M0LCAweDViNGJlOTdiLCAweDc5ZDNlNmIyLCAweGY5MzEzMDJjLAotCTB4MGJkZjllYWQsIDB4NTExZTk5ZTMsIDB4YzE5M2FjMTQsIDB4ZDM3MWYzOWUsIDB4NDBkYzlmZDgsIDB4MGQ2MDdkYTAsCi0JMHhiYmZjMzFkOCwgMHhhNTM2Y2YwNSwgMHhlYmJlZmUyNywgMHg1NWYzOGRmYywgMHg3NjFlOGZmNywgMHhkMjhmM2UwNCwKLQkweDg4MWJjMTA2LCAweDk4NTQ4ZmIyLCAweGY4ZmZiZTA0LCAweGViMDk3ZTk5LCAweDFiOTllOGQ2LCAweDQzNWFmOTBjLAotCTB4ZmY5MGRlYmUsIDB4ODEyZGU5YmIsIDB4NjFjZGU4ZTgsIDB4MjUzMDZkZjIsIDB4ZmQwMmZhMzIsIDB4NjU4NzMwNGEsCi0JMHg3ZmQyM2ZkZiwgMHg2YmZlOGY0YSwgMHhmN2ZkYTlmZiwgMHhlOTY3ZmRhNywgMHhhN2ZmYWZmYSwgMHhjN2I4M2ZmNiwKLQkweGZhZDE4M2ZjLCAweGM3Njk3ZDJmLCAweDM3OTUzZjFlLCAweDcyNmUyZjQ1LCAweDljZmZiYTExLCAweDc5Mjc1NzM1LAotCTB4YjY0YmZlMjgsIDB4ZTJmYjQ2YWQsIDB4MDVkZmIzMTksIDB4MjAzNjdjZjQsIDB4Mzk0NDBiNGUsIDB4NzEzNjlmNTcsCi0JMHgzYWYxMjViYiwgMHhjMGY3MzgwNCwgMHg3M2ZmYjRhZiwgMHgwNjdjZmZjZiwgMHhkY2JlNWI5YywgMHgzY2YxYjkyNiwKLQkweDU5MDk2MGQzLCAweDM1OTY5ZjI4LCAweGEzMjc0ZTE1LCAweGU1ODI3ZjMxLCAweDQyMmE3ZWQ3LCAweDlmNGY1OWJlLAotCTB4NGE2ZGNmNDUsIDB4YTUxYmZiMDIsIDB4ODdlZmFlMTQsIDB4YWIyYTVmNTAsIDB4ZDg1NGViZmYsIDB4MTg0OWNhN2YsCi0JMHgwZWQ4Y2NmOSwgMHg4ZjE4YmZjNiwgMHgxY2JlNzFmMiwgMHhjZTljYjNkYiwgMHg3MmYwZjUxMywgMHhhNmYyOTcwZSwKLQkweGJhMmE3ZjlmLCAweDY5ZDFmZDIwLCAweDM2OTMxN2I0LCAweGVkOGQ5M2Q0LCAweDczZmViODBhLCAweDY4NGNlNGNjLAotCTB4ZjkxZWFhYTcsIDB4YzgxZWY5MWUsIDB4MjQyZTE1NGQsIDB4ZjExZmY0YzAsIDB4ZTFhMzJkYTUsIDB4ZmY1MWRhZmMsCi0JMHg4MWEwOTc3YiwgMHgxNzZmY2E5NywgMHhmZDdmMGI4MiwgMHg1Y2JiZDJiMiwgMHhiMWU3ZTRlZSwgMHhiNjAwYmI0OCwKLQkweGRlYjk5YTUzLCAweDEyZDJjMmQ2LCAweDdiMDJlNDI5LCAweGU0OWQ0OTY5LCAweDI1Y2ZkM2YxLCAweGY2Nzk5ZTNiLAotCTB4N2U0ZjM4MjksIDB4YTEwY2YxNjAsIDB4NzhlZjE3ZmQsIDB4MzQzOThmZWQsIDB4NGE1M2JjNWYsIDB4NDA0OWNlOTgsCi0JMHhhN2UwOGE0OCwgMHgzZTViZmU5YywgMHhhMjhmODIyNiwgMHgyYjI2YmVkZiwgMHg4N2Y3ZDhhMywgMHgyOTc4MjNlMiwKLQkweDI2NTA3OWRlLCAweDYzYzI3YWEzLCAweGRjYTBmMDcyLCAweDlmODI4OGU2LCAweGEwYTk4OWUwLCAweDdkMmY4OTVmLAotCTB4Y2ZmZTAzMjMsIDB4NzI0ODEwMWUsIDB4ZDY3ODE0N2EsIDB4MDI3YTg2YmQsIDB4YzlmMTA5YzAsIDB4M2Y4ZGQ1ZjEsCi0JMHg4YTcyZmQ0MywgMHg0NmViOTAxNywgMHhlZGViMTk3YywgMHhmYTA1ZjJlNSwgMHhhNTIxZmIwNSwgMHgwNjVlMTdlZiwKLQkweDJjOWZmMzNiLCAweGMxNDM4MDFlLCAweDYwYjlmNzBiLCAweDE1Y2RhNzNkLCAweGFjYjdjZThjLCAweGYxZDJmMjRlLAotCTB4OTI3ZjI0MGIsIDB4YmRmNjUzMWIsIDB4MjI5ZmU5ZTAsIDB4ZjNiZmU1ZmQsIDB4N2U3NjI0ZDMsIDB4NzA5YWE2ZjMsCi0JMHhjMmE3ZjJhZiwgMHhiZTZmMTczYSwgMHg0Nzk5ZDcxMywgMHgwNTg3NDg3YywgMHg5MDVjYzQ1YiwgMHhjOTk4NWY5NywKLQkweGY4NTE5ZGI0LCAweGU0Yzg5ZTY0LCAweDE0YWRlOWU2LCAweGE3OWQ3NGI5LCAweDc2ODQzNmU5LCAweDgxODgzZmQ3LAotCTB4NThiZjY4NmQsIDB4ZmMxZTQwNDIsIDB4OTM5N2I1NTQsIDB4YzJmZjk4YTUsIDB4NGUzNWYwY2EsIDB4YWE3ZWY1NTQsCi0JMHhiN2U5NjlmNSwgMHhlMDJiNmQ3ZSwgMHg2ZjAwZGNlOSwgMHhjYWJkZDgzMiwgMHhlMWNmZDk4OSwgMHhmZGE2NWMyMSwKLQkweDk0ZGNlZjhhLCAweDE0NDRmMGNjLCAweDQ3NmYxNjczLCAweGYwYzk4MmY1LCAweDRhYjdlYTFkLCAweDVkNjhkYjVlLAotCTB4M2QzOTcyM2IsIDB4M2UzMmZlMzIsIDB4MGM3NzlkM2UsIDB4OTNhN2U3ZWMsIDB4Y2EzMDQxNDgsIDB4YWE4ODM2ZmEsCi0JMHhiYWZiYTAxYywgMHhmYzM0Y2U4NiwgMHg3ZWJmZjhjZSwgMHg5NTc3ZTMzZCwgMHhhNzMzMDNmZiwgMHhlZmU3Zjk0MSwKLQkweDc2ODIzZTMyLCAweDc5ZDI1ZmIwLCAweGZjYjE5Mjg1LCAweGNhMDIxZGUwLCAweDQ1MDkwYjA3LCAweDg5N2FmM2UzLAotCTB4ZGNiZWI5ZjMsIDB4ZmU3NDJmNDgsIDB4NDM1NjIxNjYsIDB4M2M0ZTMwMzcsIDB4NWVlZDAxZTIsIDB4YmRiNDM1NzksCi0JMHhiOGMyYWU1NiwgMHhhYWZkOWVhZSwgMHhlNWNmOWM3YywgMHg5NTIyZGRjMSwgMHhlNDQ1ZDcwNywgMHhlNGNjZDkwMSwKLQkweDk3N2FlZjQwLCAweDIyNThmMTFmLCAweDBhN2Q5ZTA1LCAweGFiZjI5N2Y4LCAweDk1ZmUwMTVmLCAweDlmZmQ2MTcyLAotCTB4ZTNmZTFlMzQsIDB4M2U2Zjk0ZGQsIDB4YWI3Y2FhMDksIDB4YmU0NmFiOTcsIDB4MmUzNWQ4MmQsIDB4YjI3ZWRmMmEsCi0JMHhkZjNhMjMyMSwgMHhmOTUxZWZkMiwgMHhkYmUzMDM3NiwgMHg1NTcyZDdmZiwgMHhhODk1NjM4NSwgMHg5Y2FhYWI5NywKLQkweDQ2OWUwZGVjLCAweDJhMjY5OTM5LCAweDljYTM1NzA4LCAweDkyZWYzZmE0LCAweGE4ZjQ5ZWFjLCAweDdmNGFhMWQyLAotCTB4YmQyOWJmNDUsIDB4Mzc1MWU0MDYsIDB4ZDg3NGFhOWQsIDB4MWQyYWE3NGQsIDB4ZTg5ZmIwZjYsIDB4YmYyYzY4ZTAsCi0JMHhkMjgyNjgxOSwgMHhmN2RlZWU0YiwgMHg3OGEzZjZhNiwgMHhmNzYxNjkyZCwgMHhlYmRkYjQ1MCwgMHhmMmYwYTc5MCwKLQkweGFhNDczNmUyLCAweGEwOTdlZjVmLCAweGY5MGMwN2NkLCAweGQ3YmVhMWEwLCAweGQ0MzVjZjkwLCAweDE1ZjIxOWY3LAotCTB4NjYwMWZhODYsIDB4MmMzZTY4M2YsIDB4OTA4N2E0MTMsIDB4OTJiNGJlYWUsIDB4Yjc2MDlkZjgsIDB4ZGRhMjJmZGIsCi0JMHg3OWNlOGJhZSwgMHhkNWRmNmQwZCwgMHg1M2YwMWU5OCwgMHhjNmRhYjBmOSwgMHg0NGUxOGZjZSwgMHhiM2M4MGQ3OSwKLQkweDE1ZDg3NzJlLCAweGQzMWI3OTBmLCAweGMzNzJiYjdiLCAweGZlOGQzOGFlLCAweDQ0NDVhMjc4LCAweDIwMTZkYzc5LAotCTB4OGNmNmI0ZDMsIDB4MjE1NDVmMDgsIDB4NmY0OGRhZmUsIDB4ZDkwZWNjZTUsIDB4NzdlZWMzMTUsIDB4NjkxZDEyNmYsCi0JMHg1OWRjZTFjYiwgMHgxOTI4N2EyZCwgMHhlZTJiNDU5MCwgMHhiYTg5ODE3MiwgMHhhZGQwNjVhYiwgMHhjNWY3ZThiMywKLQkweDVhZWM4ODZmLCAweGE3MzVlZmM0LCAweDY3MGRjZTZhLCAweDA5ZjFmZjg4LCAweDZkOTdkYzAyLCAweDZjMmZmYzQwLAotCTB4NDU4OGU3NjEsIDB4NzNkM2EyMWIsIDB4ZTc5NzZmMTEsIDB4ZGM4MzI2NTgsIDB4NDlmZmZhYTQsIDB4ZWQ1NTlkYWQsCi0JMHhlMWIzNjBhNywgMHg5Y2NkY2I3YiwgMHgzY2YxYWJlZSwgMHgyZmFmNTQ1NywgMHhkMGYzZjFmNywgMHg2NDdlNTU0OSwKLQkweDFmOTQwYzkwLCAweGYzODFkMDcwLCAweDM3YmI5NzM4LCAweDlkNmYyMzg5LCAweDc1ZDBmMTQ1LCAweDM3NDAyNDQ0LAotCTB4YzQ0NDVhMTcsIDB4NzY0Njg1YzMsIDB4ODlmYzQ5NWYsIDB4MjQ2NTNmYzgsIDB4ODU0ZWYyOGMsIDB4YzdmMDA3NTcsCi0JMHg1MGU1ZGViMCwgMHhiMzBmZWVjNywgMHg0YTU1YTQxZSwgMHhmNDc5ZmNmNiwgMHhiMWRhNjhhZiwgMHhmYmExODNlNywKLQkweGZiZDJmZjIwLCAweDNkMjY3ZjY5LCAweDYwM2U0ZmViLCAweGQ3NmUzYjQzLCAweGJiZGUyNzAxLCAweDMzN2ZlZDc0LAotCTB4ZWZjODQxZWQsIDB4YmVmMDc4YjUsIDB4YTM1N2MwZjksIDB4NTZiYThlODEsIDB4OGU0MDBhNWEsIDB4Zjc2MDBkNzUsCi0JMHhiZmZiNTVmNCwgMHhmYjg2ZGQxYSwgMHg5ZmM0MmFlNywgMHg1ZmNlY2NkMywgMHhmM2ZlNWExNywgMHg1ZmIzZGMzOCwKLQkweDAyYWJhMTY4LCAweDFkODBlMGZkLCAweDJmZTVlMWVkLCAweGQwOGVkMGRiLCAweDJjYWJmZmI1LCAweGI3OWZlMzlmLAotCTB4YmY3ZTMyOWUsIDB4YjMyNGU1ZDIsIDB4ZTJmY2MxNzYsIDB4N2NiYTVkOTgsIDB4NTY2N2Y4ZGYsIDB4ZDM3M2ZkYzAsCi0JMHgyZDIxNzk0MSwgMHgzN2NhZmM5ZiwgMHg3NjNlNDFhMywgMHg0ZjdhNjJlZCwgMHgzNGY2ZDRhNywgMHhhY2E0MWZkYywKLQkweGEyNDJiNGJhLCAweGU2MDRlZTcwLCAweGY5NGY0YmU4LCAweGY5MjY3MmFiLCAweGNiODM0NjQ3LCAweGI5MWY2ODM3LAotCTB4ZmY1Yzc4NWEsIDB4MDIxZTA2M2YsIDB4YjQ5NjIzZGUsIDB4MDE1NjAzMzgsIDB4ZjhlOTdkZDYsIDB4MWMxZTQxOWYsCi0JMHhhYTVkMjBiMCwgMHhiODI0ZmRlYiwgMHgyYjkxZjUwMiwgMHhhYzA2N2JhZCwgMHhkMzdmZjEzYiwgMHhkNWQwODViYSwKLQkweGJmZjRiYmFjLCAweGUzM2ZiZTM5LCAweDBmOTFhOGZiLCAweGZlZjlkMjdhLCAweGMzYmYzMWZiLCAweDVlZjljMWU5LAotCTB4ZTJmZmJkMjUsIDB4NzdkZTFiN2YsIDB4YWViYmJjNTEsIDB4ZmZjNmVlYmMsIDB4MWRlZWViZTYsIDB4ZTVjYzZmZWYsCi0JMHhmZGMzNzc3OCwgMHhkZjJiZjk3YiwgMHhhYmJlZmNlMCwgMHgzZmZhM2I5YywgMHhiZWFhZmQ3NCwgMHhmMjkzM2JmZSwKLQkweDNmYWQwNjZlLCAweDQwM2I1NDhkLCAweGU5NTFmOGIxLCAweDY4MzIzN2ExLCAweDFmZmFlZmU5LCAweDRlZjk4MzhlLAotCTB4YzYzNWY3ZTIsIDB4NjY2MzdkZjksIDB4NzA0OWJlZTcsIDB4MjVjNzQzNmYsIDB4ZWYzZjAyNzEsIDB4M2Y1MjczYjEsCi0JMHg1YmY0NWZhZSwgMHg0ODdhODc5NiwgMHg0MGJmZmViZiwgMHg5NTk4ODI3ZCwgMHhmYzBmYjgxYSwgMHgwZjQyZGE1ZCwKLQkweDMxOTAzNmZhLCAweDc3OTA3Y2M3LCAweGZhZjNjOGRmLCAweDA0YWZlMmYzLCAweGNhYWI4NWUyLCAweDFmMzc2OTdlLAotCTB4N2ZiNTNkMDEsIDB4NThmNTExN2YsIDB4ZmFmZWEyOWEsIDB4ZmIxYTZiYWEsIDB4Y2VlYjIyNWUsIDB4ZjQ1MjNmMzMsCi0JMHgwOWE5OWJlNywgMHgxNGQwNzNmYSwgMHg4NDRkZGZkZSwgMHg4NzI2ZmZjZCwgMHgzODUwMDgxMCwgMHg1OGYwMWE0YywKLQkweDI3NDNkODAyLCAweDQwODg5MTBkLCAweDZmODk1M2YzLCAweGE2MWI5YzE1LCAweDdkZmRmNDM4LCAweGUzYzRmNzAwLAotCTB4YjdjYzcwMjIsIDB4N2YwMjJkZWUsIDB4YzA0N2FiM2UsIDB4OTg3NTg2ZmUsIDB4MzM1ODllNTAsIDB4ZTE4M2E0MDUsCi0JMHhiZmNjNjZiNSwgMHgwMzhmNzI2MywgMHhlMWI4Y2YzOCwgMHgyMDFlNGZhNSwgMHhjYWY1NTc2MCwgMHg2NWNiYTE0YywKLQkweDJmYWZmMWY2LCAweDA1OTA5ZTVmLCAweDAzZjY2ZmU3LCAweDUwYjc3OGZlLCAweDY2ZDE3ZDdkLCAweGViYTE4YTEyLAotCTB4ZmUyNjZjNWQsIDB4OGJiMDc4ZDgsIDB4Y2VhNGU0MGEsIDB4YzNjZmFhMmUsIDB4MjI5M2Y3Y2YsIDB4N2VhOTVjZmQsCi0JMHhjZmY4NzQ2ZiwgMHg3NGEyNWY0ZSwgMHgyMTA4NzI3ZiwgMHhmYmM1MjE3YiwgMHg1M2NmNjYyZSwgMHg2YmRmNTdjZiwKLQkweDNmMmFmMDYxLCAweGQ5MDMwMjRhLCAweGFiOThiOGJkLCAweDJjNWEzZmI5LCAweGU5N2JiYTMxLCAweGMyYzZiYjJmLAotCTB4ZDc2MjY2YjksIDB4OGZjNjU4YzgsIDB4OTA0ZmNjOTksIDB4ODgxNzk3ZWIsIDB4MDA3MWViMTIsIDB4YzU4YTBlM2YsCi0JMHhhMjIzYjE3YiwgMHhkOWRmOWEzMywgMHhmYWRlN2U3NiwgMHhkMjk3ZGMwZCwgMHg1NDllYWJiNCwgMHg5M2Y3YTA4YiwKLQkweGZjZjlkYTMwLCAweDJkYjI1NmY1LCAweGFlNDI3ZjhhLCAweDM4MmRkYWE0LCAweDk4OGZlOGRlLCAweDM2N2FmNjA1LAotCTB4MzRkYTYyZmUsIDB4OGViNzhiNTYsIDB4YTNjZDY3ZTksIDB4N2UwMWUyN2IsIDB4MmJlZTZhNGUsIDB4YzJmODUxZmUsCi0JMHhiYmUwMGVmOSwgMHgzNTM2ZDZkZCwgMHgyZWRmMGEzNywgMHg2MzNkOTg5MCwgMHg3ODRiYTFjNiwgMHg1MmQxMWViZSwKLQkweDFmM2UwMjY3LCAweGRkZDI2ZjUxLCAweDcxMmRkZGJiLCAweDE5MGM3ZGZkLCAweDcxOWFmMzAzLCAweDA0Y2NlNmM4LAotCTB4M2QxMTFjYmMsIDB4ZGU1N2VmZTAsIDB4OGJlY2E5ZjIsIDB4ODQ2NDZmNzIsIDB4ZjYwZmY0MjcsIDB4OGRjOTVhZDYsCi0JMHg4MjkzZWVlMywgMHhmYmFlMDEwYiwgMHg5YzA5NWJjZSwgMHhkNWNhZjZiNywgMHhlOWU2ZDFjNSwgMHgyZTc5YjBiMCwKLQkweDQ2ZmJjMTI2LCAweDgzZjdmZmE3LCAweDQ3MmVjNGVmLCAweDU3OWMxMjY4LCAweDc1ZjIwOWVhLCAweDQ4MjNmYTRmLAotCTB4NDgxYTE3YzcsIDB4OWMzMWU0MDAsIDB4NWMyZTQwNmYsIDB4MWZiODI0NjgsIDB4MDJmYzkwNTAsIDB4ZGY5NDZiY2UsCi0JMHhjNzNkYTA3ZiwgMHhmOWRlNmIwZiwgMHhjYTQ3ZDgxYiwgMHg5ODM3MDQ1YSwgMHg2ZGNjY2JhMCwgMHhjYWVkZDgzMiwKLQkweDkwNDRlMzliLCAweGVhOGExOWRiLCAweDc1MWVlOTBmLCAweDZhMmY4Njg3LCAweGViYzIzMzI1LCAweDM5YmVjZTcwLAotCTB4MWQ2N2VlMzAsIDB4Y2Q3ZDgxMzIsIDB4MDVkODZhZmIsIDB4OTZiM2ZmNzIsIDB4YmQwN2M4YjEsIDB4OTViN2ViYWQsCi0JMHgwNDhhNjhhNCwgMHg2YmE0MTBmZCwgMHg2YzhjM2QyMywgMHg2ZmU1ZDE4YywgMHg4MTdkN2QxMCwgMHhkYTU4NjZiZiwKLQkweGUwYTI3OTk2LCAweDdjNjY0NzJmLCAweDJkZjJkNTdhLCAweDdjOTlmZmYwLCAweDZmOTU1NzdiLCAweGMzNTczMTNlLAotCTB4ZDE5OTI2NDcsIDB4MjViZTQ2YmQsIDB4NGI2ZjkzNDcsIDB4ZTAxOTI1MDUsIDB4YTBmZjc0YmUsIDB4ZDJlYmMwNjQsCi0JMHg2OGM0YTQzNywgMHgyNTQ3NmRmMiwgMHg5MTdiMDdiYiwgMHgzNTc2YjFmYiwgMHhiZDc2Zjk1MSwgMHg1MTM1YmU0NiwKLQkweDRmYzUxNmY5LCAweGYxMzI0M2EwLCAweGYyMGFlZGZkLCAweGMzNWZmMDJkLCAweGJlNDAzYjdmLCAweGJlNjdhMzQ1LAotCTB4NmRmMmE4M2YsIDB4OTQwOWNiNzQsIDB4NGM5YmEzNmYsIDB4MmZjY2ZmM2EsIDB4ODRkZjI4YWYsIDB4OWY0MDNiYzQsCi0JMHhlYzc5MjIzYSwgMHgwNzY3ZTg1MSwgMHhlNDVlZGZkNywgMHgwZTMwMzY3ZSwgMHhiMjcxYjljOCwgMHg1YWJmYzcxYiwKLQkweGI1NzI5NzM5LCAweDA4YmZlZTcyLCAweDViOWNhYWNlLCAweDlmYTA5YmJhLCAweDY0M2E0ZjZhLCAweDVlZTk2ZTcyLAotCTB4YTAwNGU3MmEsIDB4OTZlNzI2NDcsIDB4OGVjYzI3ZWUsIDB4YzM2ZjkwNjMsIDB4ODIzN2M4N2IsIDB4YWM0MmNiZjUsCi0JMHhmYTczNzk3ZCwgMHhmZWQwZjcxMywgMHg4ZjI1NzhjNiwgMHgxMzFmZDY5NSwgMHhiNGUzNzc5MSwgMHg2YzljNmVmMiwKLQkweDkwZjczODQ2LCAweDRlYWU0Nzc3LCAweGYyZTZlZGRlLCAweDgxYjFjYThlLCAweGY0OGQ1ZjIwLCAweGZiZDE2OWUxLAotCTB4N2YxYmVlZmYsIDB4YzBiN2YxYmEsIDB4Nzg4YTZmMmYsIDB4ODk4ZWY1MGYsIDB4MzViYzE3ZGQsIDB4ZDAyNjc0ZmUsCi0JMHhjOTk5MDZkNywgMHg3Yjk3MWY1ZiwgMHhlYzdlOTU5ZCwgMHg2Y2FiZjI3ZiwgMHhlYzhkYTU3ZCwgMHgxMzU5NDEzZCwKLQkweGVhY2IwZmQzLCAweDdmNDI4MGM1LCAweDA5NzM5YTlkLCAweGY3MGE5M2VmLCAweGU2OTkyNDBiLCAweDFmYWE1YTY3LAotCTB4ZmQzZTgwNzcsIDB4M2ViODQ0OWMsIDB4NDM0MzNkM2QsIDB4OGJiMjhiMGYsIDB4NjU1YmNlZDEsIDB4OTQyNTZkNzMsCi0JMHg4OTk5MTc4ZiwgMHhjNWI5ZWMxNSwgMHg0MTY3YTk4ZSwgMHg2NmNlMmQ5ZiwgMHhmZTYyZGZmNiwgMHg1NDRiZjU1ZCwKLQkweGY3OGQzM2ZkLCAweDRiY2Q3OWU5LCAweDdhNDdlZjVlLCAweGIwY2ZhYmRlLCAweDc4Y2ViYzMwLCAweDFmODAwODQ2LAotCTB4ZjY3YmNmNjEsIDB4ZTI4NWNhMDAsIDB4MTVmN2ZkMDYsIDB4YzUzM2ZkN2MsIDB4NzkxNzg0MzYsIDB4OGI2Y2Y0NWIsCi0JMHg4YzJiM2ZjMiwgMHhlMWMyM2E3MCwgMHg4M2EyZTE0NCwgMHgwYTg4NDA1MywgMHhlOWU5OGEyNywgMHhiODExNDkxOSwKLQkweGI2ZDliZTE0LCAweDg1YzBlYzA2LCAweDZmNzgwYTRmLCAweDBhYjc1YzY4LCAweDU1ZmFlMzM3LCAweGQxNzZhYTM4LAotCTB4N2U1ZmRlNjIsIDB4MzNiZTFkNGIsIDB4ODU0NWMyMzEsIDB4ZGQxZTExYjMsIDB4YTNjMDM3NzAsIDB4ZmZmNmU2NGEsCi0JMHhmYzE2MzIwYywgMHhhMGRkMjg1OCwgMHg5YmZmZjE5YywgMHhiOTBmZmU4OCwgMHhkZWU4ODcxMywgMHhmMmU3YWM0MywKLQkweGM0ZjU2YzdmLCAweDNkZGQ3MGM5LCAweGUxODJmYzEzLCAweGM5NzZhZTNlLCAweDM3ZGZlMGViLCAweDA2MzI5OGVlLAotCTB4NzIxYmQzYjYsIDB4OTdiODNlMmMsIDB4YTMwYjZlZGIsIDB4ZjBlOTU0MWMsIDB4Y2Q4NzRlMjMsIDB4ZmFmYmJlMWMsCi0JMHg3M2MyNGM1NiwgMHgwNmUwYjM2MSwgMHg2NDNjYTQzZCwgMHg1Mzk2Yjg0MywgMHgyYWQxYjQ3YSwgMHg3MmZjOWY4NywKLQkweDFiYWI4NzJhLCAweGYzMzRiYmRmLCAweGMxZTI4OWZkLCAweDc1MWZlNzA0LCAweGY3YjAwYWJmLCAweDE4NWI2MzMxLAotCTB4MTgxYmNhNWUsIDB4MTg0OTMyNWUsIDB4YjU2NWVmZWQsIDB4ZDc0NDI3ODIsIDB4MDRiY2Q2NTMsIDB4Zjk1NTgyZmQsCi0JMHg1YTFjN2Y0YywgMHg1ZmExNDUzYywgMHgyNWZhMzQ3MywgMHg4YWNjOWM2MCwgMHhiY2M1OWJlYywgMHhmNTRiMGNkZSwKLQkweDNmOWVjMTFmLCAweDFkNDdmMjgzLCAweGRmZmQyMTkyLCAweDk1ZjdkMGI3LCAweGY4OGM0NWZjLCAweDZkYzM5MGZhLAotCTB4MDFkNWMwMDcsIDB4ZmQzMzBiZjAsIDB4ZGYwOTc0MmIsIDB4ZTVlNWE4Y2QsIDB4YWUwZWJmNjYsIDB4YzhiYTlmOTMsCi0JMHhhMGJmNmZlOCwgMHgxYmE1MWQ4MCwgMHhiNGNmNDA2ZSwgMHgzNzBhOWM3YywgMHg0M2MwNjdhMCwgMHhmMjExN2NjYiwKLQkweDdkZGUxNDc5LCAweDE3YWU3YmQyLCAweDdjYjRjN2VlLCAweDA0ZmZiODVmLCAweGUwOGI3ZmViLCAweGZkZDY1MTIxLAotCTB4M2JmYmU5OWQsIDB4ZmM2Zjc1ZDIsIDB4YmU4MTkxZmUsIDB4OGY4NWIyZGYsIDB4ZGVmYTA1OGUsIDB4OTNkZjIwMmYsCi0JMHgzZGZkMzg5NiwgMHg0ZGNlY2M5NywgMHgwZjk0NmRkYiwgMHgwZGU2MWVlMCwgMHhlOTU1YjNjOSwgMHgxY2MyMWYyOSwKLQkweDUwOWU3MGNlLCAweDZiOTI3NjM0LCAweDU3ZTAyMTYxLCAweGZmNDU2MGQ4LCAweDQwYzc5YzMwLCAweGU1NmFhZmE2LAotCTB4NDkxYjBlZjUsIDB4ZjdiMzIzYmMsIDB4ZjljNmZmZmUsIDB4NDk3ZDM3YWMsIDB4ZjE4MjhmY2QsIDB4ZDMzNjhlNDAsCi0JMHhjNjQ3ODZmMSwgMHhhYTE3ZWUzMywgMHhlYjRhZTAxZCwgMHhiMWZlNWJiMiwgMHg3Y2UzYTk3NSwgMHg3Mjk5ZmY1NywKLQkweDI4Zjc4YWQyLCAweGMzOGQxZmFhLCAweGUwOTQyYmU0LCAweDMwNGQzYWZjLCAweGMyZDFmZGViLCAweDcwZmZjZjFjLAotCTB4MmRmY2IyZmYsIDB4YWIxNDkzZmQsIDB4NGRlMmZkZWUsIDB4MjlmODgzYTIsIDB4NGFmMzNlZGMsIDB4Y2I1NDJmYzgsCi0JMHhlYzAyNmY3OCwgMHgzZWU4OTMxZiwgMHg4ZWNmOTM0OCwgMHgxZWZmN2I4ZSwgMHg1ZWYxMTcyYywgMHhmYjM3ZDZlNiwKLQkweGQ1YmRjMjk0LCAweDhhNjdjY2FkLCAweGEwMjE5YWRjLCAweDc0MGVmMGZlLCAweDcwZjQxZTM2LCAweGY4NWFmMTJiLAotCTB4ZmIzY2I0OTAsIDB4NzgwMTcxN2IsIDB4NWY1MTkwNjcsIDB4N2NhMTU5M2QsIDB4NTAyMWE2M2QsIDB4NzI2N2E5MDUsCi0JMHhjMDJkZTEzOCwgMHgwMDkxNDRkNywgMHg3ZGJkNWFiZSwgMHg3YmZlYzMyNiwgMHgwNjQ5NWZkZiwgMHg5ZWE4Y2U5OCwKLQkweDM5OGNmZDgwLCAweDVlYTExMjQyLCAweDhmMTEzNzhlLCAweDNlOWJlMzMzLCAweDNhNzZmNzdmLCAweDQ1NDdmMWJmLAotCTB4Y2RlYjQyOGYsIDB4MDA3MGVjM2MsIDB4NmNkZjBkOWYsIDB4NWMwZDNlMjIsIDB4MGFhMDQ4NzIsIDB4NGZlMzQ3ZWMsCi0JMHg3OTA3NmY3OSwgMHgxZWY1NDA1MCwgMHg2ODJmZjdmMCwgMHg0MTcyYWJhOSwgMHhlZDgwYjM3ZSwgMHhhOWJlZmRjYiwKLQkweDFkYmYzYTJlLCAweGJkNGU5ZmI1LCAweGFkMDJlNDBlLCAweDZmOTRkZDA3LCAweGViY2FmNTY2LCAweGIyYjgwZjA1LAotCTB4OTQ2Y2I1ZTYsIDB4MGJkNDZlNTEsIDB4NDc2Y2EwZjgsIDB4ZDY1NjIwNDAsIDB4ZmI0YWMwNmYsIDB4YjY5OWIxZGQsCi0JMHg4YmZkODRjZiwgMHhlYjdlODdiNiwgMHg3NmY3N2QzZiwgMHg5ZTc0M2I5MCwgMHhkZDkxYmVkOCwgMHg3NmQxZTZjZiwKLQkweGZkNDlmMDBhLCAweDcwYWZlYzEyLCAweDVkZTA0MGIzLCAweGRiMjM0MTQyLCAweDRhOGUwYTlmLCAweDNhNmYyODFlLAotCTB4YmJlZTI0ZjgsIDB4YTk3OGU5ZDMsIDB4ODUxZmIwZTksIDB4OGVmYmUwYTYsIDB4ZGYxYjgyYjEsIDB4NDM0OTRkZDUsCi0JMHgwYjA1ZDViOSwgMHgwMWQ2MDY4NiwgMHhlMDVjYmVlYywgMHg1MWZlN2U3OSwgMHgyZDM3YmZmNSwgMHhjZjM3N2ZjYywKLQkweDQzZWU0MmIzLCAweDNiMmI3OWZiLCAweGY0ODRkZDMxLCAweGZhMGNhOWY0LCAweDZmMGEyOWRhLCAweDNiZjc4NTFmLAotCTB4NzBlMTdmZGMsIDB4OWI3MmM3ZjYsIDB4NjczYzdmNjYsIDB4YmZmNDg0MTksIDB4ZmEyMjc5YTgsIDB4YjkyNjJkNGIsCi0JMHg2MzNmYWY3OCwgMHhkZjNiZDMzYywgMHgwMDE2ZDFiZSwgMHg1MmRiZGRiYiwgMHgzZjdjM2ZiOCwgMHhiZjA1YTM3YywKLQkweDcyNjBlZTc3LCAweDFiNDA3M2I4LCAweDZmNGY2OWRhLCAweDQ3YmMwODk2LCAweGEyMmNkYWE4LCAweDI4ZGQzODljLAotCTB4YjhiNWZkZTEsIDB4OWRiOTQyNDUsIDB4MjFlOTgzYmYsIDB4N2ViMzM3ODcsIDB4ZmQzMDM3NGYsIDB4M2I5NmYyNmQsCi0JMHg5YzNlYzJhNywgMHhlZmJkNGRiZiwgMHgzZDVhNzI2NiwgMHgwYmI5ZTY4NywgMHg1MTliZmI3NSwgMHhiODcyYWFjZSwKLQkweGEwYTNjMzk0LCAweDVmZWYwZWJhLCAweDU0Yjc3MjhkLCAweGYyMGQwZmRkLCAweDY1ZWUxNGI2LCAweDg0MzVmZWYxLAotCTB4MzQxYTU0N2MsIDB4OTgzOTEzZmEsIDB4MGQ3Mzg2M2MsIDB4MTJlODQzZDAsIDB4NTFkOTc3ZDIsIDB4NDZiOWMwODksCi0JMHgyYTYzYjhmOCwgMHhlYzJjZTdhYywgMHg3YzdjYjRmNywgMHhmYjg1ZTA4YiwgMHg5NjYzODJmMCwgMHg4MWUzZWEwMCwKLQkweDE1ZmVmM2Y5LCAweDJjMGY5OWY2LCAweGJmYzA1MDQ0LCAweGNhODNlMjlkLCAweGY4NGI2Y2E5LCAweGVmZDE4ZjJmLAotCTB4ODJiMWRmNjcsIDB4OWZhNTA4YTcsIDB4ZDU3ZjA4ZjksIDB4MWI3MzM0MmYsIDB4N2NjOGYzZjMsIDB4ZGUwOTI2YTcsCi0JMHg3ZDI5OTI3ZiwgMHhkN2U0MGU1MCwgMHg5MWE3YzQ4YSwgMHhlZjA1NjcxYiwgMHhmZGIzNzdlZCwgMHhmZmY1YWRjMSwKLQkweGYzYWI5NGNjLCAweDZmZWQ5ZjYwLCAweGQ5NTFmMjY1LCAweGRkZmJlMTI2LCAweDQ0N2NmY2MzLCAweGI3ZTgwYmNmLAotCTB4NjM3N2I4NTksIDB4ODdhMWFjOTIsIDB4OTMxYmZkYzIsIDB4NmIyMGU4YTgsIDB4MTU0NDdmYjgsIDB4Mjg1YmY3N2YsCi0JMHgwZjBhNzFiMywgMHhjZDNhZWUwOCwgMHg2YTNmNmEzOCwgMHhkNjVlZjJiZiwgMHg5NjdlZDA2ZSwgMHgyMTdmZDZmNiwKLQkweGY5ZDcwZmNjLCAweGMzNzIwYzg1LCAweGYxOGY0ZmQ4LCAweGZiMjdlOTdiLCAweGMwZDYyZmRmLCAweGI3ZWNlZDNiLAotCTB4Y2U2ZTc0NDUsIDB4MjBmYTc4ZmUsIDB4OWE4MGJkZWQsIDB4NTkwYzdlYWEsIDB4NTc4ODlhZWYsIDB4YmZlY2JmMDMsCi0JMHgwNmFmMTBjNCwgMHgyOGUzNGRkZiwgMHhkZGZjNTNmZiwgMHhiOWY0Y2NkMiwgMHhlNDI3NzFhNiwgMHhiYmNjNGNkMiwKLQkweGI4Y2JkZjgxLCAweDBhNmNiYTNkLCAweGNhNjllZmJiLCAweGYwMTU2Nzc4LCAweDAxNGNmNGZmLCAweDdkZjg4MWU5LAotCTB4ZDQwNDlmNzIsIDB4NGZmMDE0ZGYsIDB4ZWQ2NGNmY2UsIDB4ZTA3YjY5ZjMsIDB4MTkyN2E2Y2IsIDB4YTE3OTUyOWYsCi0JMHhkYjI5M2M4MCwgMHhkNjJhNzFiYywgMHhlODE0MTdhZiwgMHgzZTZlYTliZiwgMHhkOTA1MjVlYSwgMHhmYWYyYzEyMiwKLQkweDE1MjdhODEzLCAweDAwNDg5ZjM0LCAweDViZmNhNjdlLCAweGQ5NDBmYTAzLCAweGM0MWI4YjA0LCAweDJhOTdjYWIxLAotCTB4ZmRjZGJmOWYsIDB4M2RkNTg5ODksIDB4Y2JmOGZjMGEsIDB4ZjBhMmE5ODAsIDB4NzA5NDc4YjcsIDB4NjVmMTk1YmQsCi0JMHhkYmUzMzY3OSwgMHhiMDQ4NzdiNywgMHg3M2UxYWJjMiwgMHg4Zjk1NmJlNCwgMHhjY2UzZTA0NSwgMHhkZTFmMWYwOCwKLQkweGJlMDY1OTNjLCAweGQwMTAxZDNlLCAweGM4MzI2MmVmLCAweGVkZjNlMDAxLCAweDMxZWZiNzAyLCAweGY5NmFmNjNkLAotCTB4NjY3YTRhZmMsIDB4ZDg1ZmU1MjksIDB4NTczZTU1MmYsIDB4Y2ZjOGRhZjksIDB4M2JiNmU2YWQsIDB4ZGRmNzFlNjAsCi0JMHg0Yzc1YzM2OCwgMHgzZmRlZmVmZSwgMHgxNWU0YzdkZSwgMHhmZTRkZDdkZSwgMHgyMDQ5MDNmZSwgMHhjY2NjZjMxZiwKLQkweDZiODU0N2FmLCAweDgxZjk5OWE5LCAweGNkNTc5OGY1LCAweDZhZjUzOTBhLCAweGM3OTg2N2U2LCAweDVlZGU4YjQ2LAotCTB4YzcxMmQ4NzIsIDB4MjVlYjlkZmMsIDB4ZjEyYmZiYTQsIDB4YmIzZTBmNjcsIDB4NWFiY2ZlNGEsIDB4N2YxMmJhYmUsCi0JMHhmYjhiZTNhYSwgMHgwNjFjZmRmNSwgMHhkOWViOGUyMCwgMHg2Mzg1Mjc1ZiwgMHg3N2YxYzI4OCwgMHg1ZmEwY2Y4ZCwKLQkweDRmZTdmOWQ5LCAweDE0M2MwMGNjLCAweDBlNzRhM2VmLCAweDI0ZThkNWY0LCAweGU2NzM5MDIxLCAweDQ1NWJlZTAwLAotCTB4ZmQxN2EyNGQsIDB4YWNhMWNkNjUsIDB4M2U1YTlkZGIsIDB4YzUzZmZlNjYsIDB4OWU5MTNhMmYsIDB4MDI1OTc2OGEsCi0JMHhhMmZiNjlkMywgMHg0NjhmMWYzZCwgMHg2MTk1OGMzZiwgMHgzZmYyNGZmNCwgMHg3ZjY1ZjVjZiwgMHg4M2UwNjhkYiwKLQkweDQzZjMzMzIyLCAweDk5ODVjYTMyLCAweDc3M2ZhNjU2LCAweDgyY2ZiNWVjLCAweDJjMGQwOWY1LCAweGYwNTE0MGRlLAotCTB4YjlhMmM5MmUsIDB4OTU2Njk4YTcsIDB4MmY3ODdhZDQsIDB4MGM3NGE3ZTgsIDB4N2U2MTMxZWYsIDB4YWFlZTc3ZGEsCi0JMHg3NmM3NTFmZiwgMHg5YThhMjcyNiwgMHgyZGM0MDBhNSwgMHhkOWQ4NmEyOCwgMHg0NWE1ZmUwOSwgMHhmZjY4MmNjNywKLQkweDE0Zjg2ZjJhLCAweGJmMjdlN2ZkLCAweDJiZWQwM2I4LCAweGVlYTJjZGU1LCAweDNmODdhZDNlLCAweGIyMTg4MzVmLAotCTB4NTM1YTFmODAsIDB4ZDFmZmRlMjksIDB4MDdjYzA5ZmMsIDB4NzdkY2ZmYjksIDB4N2UyYjM3ZjQsIDB4M2YxZWZmNzEsCi0JMHg2ZmYxNjEwNSwgMHg3YzgxNzM5ZiwgMHhjZGJhZDczOSwgMHgwZDdkN2U4NSwgMHhkYjVmZWVkZiwgMHhiODJmN2ZjMywKLQkweGRkZWZmYjllLCAweGI5ZTA5YTcyLCAweGRlZmZiYTI2LCAweDMyODVmODM5LCAweGJkNTY4M2NhLCAweGU4NjkxZWZmLAotCTB4OWQyNWZhODMsIDB4OTQ2ZTU2NjcsIDB4ZmQ2ZThmZmIsIDB4NGYxN2M3N2MsIDB4Yzc3OWZmODMsIDB4ODY5ZTRmYWUsCi0JMHhlZGZjOTc3OSwgMHhhZmMxYTdiMywgMHhlMWIwMWM4OCwgMHhmY2ZlNTdiZSwgMHhhYmFmZTg3YiwgMHg2NTY0ZGJiNiwKLQkweGZkYjlkYTc0LCAweGVlNzdmNDM5LCAweDgxZTJjMGZjLCAweDlmZjczYWRlLCAweGIyZmYwMzRlLCAweDkyOTc5ZGNlLAotCTB4NmNiOTllYzAsIDB4ZWY2ODRkZmYsIDB4NzI3YmI2NWQsIDB4NmZiMjg5MzIsIDB4NmZkMDI5YTgsIDB4YWRmYzJhZTAsCi0JMHhkYzNiNzg4ZCwgMHg5ZmZkMTg3NCwgMHg4M2JjNTNjZSwgMHhjYmY2ZWMxYywgMHg3ZjMyOTYwYywgMHg2M2ZiODU1NywKLQkweDZmZjc0NjM2LCAweGQ5N2ZlMWVmLCAweDM3YWRmYjc0LCAweDYyNmZmYzgyLCAweGZkMTVlNGZhLCAweGY4YTVkZjMwLAotCTB4ZjAyYWZlYmMsIDB4NmRmZGM4ZDgsIDB4YWI3Y2I3ODMsIDB4Zjg3OWU2MWYsIDB4YzlhYmUyODUsIDB4OWEyZmM3ODAsCi0JMHgyOWZhZmYxNiwgMHhkM2VhNmIyOCwgMHhlODY2MWZhYiwgMHhmYWE3ZTAyYSwgMHhkZWFkZmJjZiwgMHg2ZmMwYWM1NywKLQkweGZlODM3ZWJiLCAweGU5YmY4MGFmLCAweDVmNDdlYzBhLCAweDgzZmJjMWE0LCAweDJlNzg1MjMzLCAweGZkZTEzZmVjLAotCTB4NTJiZjhjMTYsIDB4ZTQ3ZGZmYjQsIDB4ZWZkZGNlYTcsIDB4NzA5YTlkYTAsIDB4ZDI0ZWY2M2YsIDB4OGRmY2MzZmQsCi0JMHg3YWRlYmUwNSwgMHhlNGRmZjMyNywgMHg0ZWZmMDA3OCwgMHhiOWRmODVjNSwgMHg2YmEzMjcxZiwgMHgzN2IzYmZkNSwKLQkweGFjYWZjZWJmLCAweGZkNTZmZjRjLCAweGZmZWI0YmZhLCAweDIzMjRmZGNjLCAweDAxYjIxMzc4LCAweGY1YmUyNzVmLAotCTB4MDcwYTgyM2QsIDB4MTFjYjk3MzcsIDB4N2VlOGU1YmYsIDB4Y2I3ZWRkYjQsIDB4M2UwMWJjMDYsIDB4ZjZlYTlmNjEsCi0JMHhmZWY5YTY0YiwgMHhmMjRlZDA2MywgMHhmODNmMzQ3ZSwgMHhlZmU2M2FjZSwgMHhkZmU5MjlkYywgMHhjNGYwNDY4ZiwKLQkweDBkNTgyM2RmLCAweGFiODFjYmZlLCAweGQyYmU1ZmYzLCAweDljMmJiZTNhLCAweDM0NTI4MjRlLCAweDNhYmMyN2FlLAotCTB4ZGYyZThlYmUsIDB4M2ZjMjZkMTMsIDB4OTE2ZDVlZjYsIDB4OTMxZjdjNjAsIDB4N2YwNDRiNjAsIDB4Y2Y2ODEzOTAsCi0JMHhmMzdmM2VlYywgMHhmYjcwNzZmNSwgMHgyMmYzYzc3YiwgMHgwOWFlYmZmYSwgMHg2ZWY5NDYxZSwgMHgxMDY1MWY5NCwKLQkweDdjY2EyMzQ3LCAweGJlOThkOTg3LCAweGY2Y2NkNjVlLCAweGNlNWQ4ZThmLCAweGQzZjY4MzgwLCAweGQyMmY2ODcxLAotCTB4MDllMzU5NzUsIDB4N2JmYjRmZDksIDB4MzJiN2UxYmQsIDB4N2M2MmM3YmIsIDB4NDA0N2ZiMDQsIDB4MTc4ZTllYjMsCi0JMHg3ZTY2OGUwZSwgMHg2ZmRlY2NkYSwgMHgxZjFjNjcxYywgMHhmYTI1YmNhNywgMHg5ZjhkZTUzOCwgMHhmNjI5YzZlYSwKLQkweGUzYjc2NTA3LCAweDMzOWRlM2NhLCAweGZlODJlZjdiLCAweDNkMzJiNWNlLCAweDljNTA1Y2YxLCAweDU4N2RlZDE2LAotCTB4ZjdlMjRkOGEsIDB4YTUyY2Q1NjEsIDB4MjVjNjI4ZmIsIDB4MjQzOGIyNzEsIDB4ZjUwNjJiYTIsIDB4ZWNjZTY1Y2UsCi0JMHg5MDA5YjE2MywgMHg1NDA3ZThjYSwgMHgwZGZiODJiNSwgMHgwMjkzY2NmZCwgMHhmZTcyYWVmOCwgMHg1NzdjYzA5OCwKLQkweGY2MzU3YzAzLCAweDIzZWRjOTFmLCAweDI5NGFhZmEwLCAweDc3NjA5OWI5LCAweDM5MWRjYTMwLCAweDFhMDI0NGMxLAotCTB4NGU3MzJmN2MsIDB4NWVmMDU2NGIsIDB4ZjAxZmQ0MjQsIDB4YjRlMzNjNzksIDB4NjQ3ZWZkMDQsIDB4NjQ3ZDVmYjAsCi0JMHhlOTkyNmIyNiwgMHgwYmYyM2VmYywgMHg1ZmI0MTU5ZSwgMHgwM2M3ZjVmMiwgMHhmYjNkOWQ3MiwgMHg4N2JlZjM1NywKLQkweGE5YmQ5ZDQ0LCAweDBlM2UxMmNjLCAweDhhZjIxNWU3LCAweGM0MjNlZjBkLCAweGU3OGMzNjAzLCAweDBkYjRmZTUwLAotCTB4Zjc3ODdiZDcsIDB4ZGVhMmNmNTcsIDB4NjEwYjZiZmQsIDB4NTRmNDQzZjcsIDB4ZGNhNDcxMDMsIDB4YmJkMzhmYWMsCi0JMHgzZmZhN2FiZiwgMHhjNjg2YWY0MSwgMHhhN2ZjZmM3NCwgMHg0ZjM4N2Q2OSwgMHhmY2YxZGEzNCwgMHg3NjJiYjVkMywKLQkweGFmY2ZlYTM0LCAweGU0MDMzODNjLCAweGQxOWRiZTVhLCAweGM5OGJmZTYzLCAweDVmZGEyYTgxLCAweGI3Y2IyMjdiLAotCTB4ZjE4MDE4ZWYsIDB4Mzk3NzhhMDMsIDB4ZjBmMTFmZDEsIDB4NjBjYTk3ZWUsIDB4ZDE3Y2VhOWYsIDB4YTQwNjZlMGUsCi0JMHhmZmFlMTVmMywgMHgzYmM3ODZmZiwgMHhhZDE0OTVhYSwgMHgzMTIxNzI1ZiwgMHgyMDc3ZGEyYiwgMHhlNTY3OTBjNSwKLQkweDdmMDQ5ZWY4LCAweDgxMWYzOGIyLCAweDE2MzlhYjFkLCAweGJkNTA4ZmRmLCAweDc5Y2ZkNzU4LCAweDA3YmY3YzI5LAotCTB4OTdkZmQ4ZTksIDB4ZjUwOTliYmQsIDB4YWM2MDc5MDUsIDB4MWZmZjk2YTcsIDB4ZTViNzkzMWIsIDB4MTFjZWRhMTYsCi0JMHg4NzJlNWZhOSwgMHhiYWJlNThmMywgMHhhZDI3OTMyZiwgMHgyYWU3ZmY1OCwgMHg5ZWYyZjM5ZCwgMHhlYmZhYjJmZCwKLQkweGY1NzUwMzZkLCAweDNjNjVmNmQ0LCAweDdlOTE4OGRlLCAweDE2ZmRlNzFmLCAweDJjMzM3YzM3LCAweDI4OGQzYzVhLAotCTB4M2ZlZmM3ZjMsIDB4MDRkZjg4MTUsIDB4MWI0ZWNiN2EsIDB4Nzc4MjUxYzYsIDB4YmYwZmUwZjgsIDB4NWZmNzY2NDcsCi0JMHhjNjEwYWUyNSwgMHhlNWM3ZDkzMywgMHgwODRjNDk3MSwgMHhlNWY0YWJlMywgMHg5MGZhODBmMywgMHgxN2I2ZDYyNywKLQkweDJmYTVlZjAwLCAweGU3YzQwOGQ5LCAweGU5YzU3ZDI5LCAweGVlOTc3YzA1LCAweDU3ZmRhYWY5LCAweDY2ZWZlMDk5LAotCTB4ZTk1ZWJiNDcsIDB4NzQ4MmZmMmIsIDB4Y2QwOTZhNTAsIDB4M2I2NTc4YzUsIDB4OTllMjA0MmQsIDB4MjM3Y2VjNzUsCi0JMHg0M2I1ZjgwZCwgMHg3ZmM1YTUwYSwgMHg2OTVlYmRjYiwgMHg0Nzg4NjJkMCwgMHg1MmVmZTdlMCwgMHg3ZGUxODMwMywKLQkweGIzM2VmYWJkLCAweGQzMzkxN2E4LCAweGRlZjc2MzY1LCAweGJkZGU2Y2ZiLCAweDdkNzdlNDM2LCAweDk1NzM5ZWRjLAotCTB4ZWZiNDgzY2QsIDB4ZTg5NDhiYjQsIDB4OWI0ZGYxNzIsIDB4NjlkOTc3ZjQsIDB4YTNiOGU1YmIsIDB4MzdjNzNiYzcsCi0JMHg0OWU3M2U2MSwgMHgyMDE4MTI2YiwgMHgwZTNlYThjYiwgMHgyMWE4YmNmMiwgMHgwZmQ4M2ZiZCwgMHg3N2Q0ZDkwZSwKLQkweGVjMmM0YWVjLCAweDA1MjQ4NzQ3LCAweDA2ODdkOWNmLCAweGZiYjVmZDI4LCAweGFiNGE5OWNjLCAweGFlZDA5NjYyLAotCTB4ZGQ1NzY5ODMsIDB4MDk3ZDc5YTcsIDB4NjZkYTI3ZjgsIDB4MWY3YjkzNDUsIDB4OGYwOGVjZDksIDB4MWJjNWFiMjIsCi0JMHgwNzY0OWRlZCwgMHgwMmRlYWZkZiwgMHgxYjIyNDA2MywgMHgxZDQzZjgxNywgMHg0MDE0OTBmNywgMHg0NjI4YmMzOSwKLQkweDBmZjRmZDYxLCAweGI4YmRmMGM4LCAweDJkMjBlZjYxLCAweGQ1Y2QwYTFjLCAweDI5ZjI4ZjU4LCAweGQ0OTBiM2MyLAotCTB4ZjkxYTk5YzgsIDB4Yjg1NzhlYWQsIDB4ZjE5OGExZGMsIDB4M2ZmOWJhM2QsIDB4OGM1NWU5YmEsIDB4Yzg4ZDE5ZTAsCi0JMHg3NDcyNzg5YSwgMHhiMzNiNDVjNywgMHgyY2MwZWVmYSwgMHg3ZTAxNWFlNSwgMHg5Yjc1YzkzMiwgMHg2YTk1MjA0NSwKLQkweDEyMThmN2U0LCAweGQ1NDFkNGM0LCAweGFhYmYxNjJlLCAweDNjOWM4MDgyLCAweDgzNDcxZGQzLCAweGQ3ODExYTYwLAotCTB4ZmRmNzI4MDMsIDB4OTIxOTA4MDMsIDB4MTI4NmZhMGUsIDB4ZWZjMGQ2ZWIsIDB4ZjM4NWNkOTIsIDB4MDgyYjk4YjEsCi0JMHhkZGQzMTc5MywgMHg3ZTBhN2ZhMCwgMHhlOTRjYjkxZiwgMHg2MWIyYWFhOSwgMHg0MGY3OGIxMCwgMHgwZDdlZjBiYywKLQkweDNmM2E1ODU1LCAweDRiZjVmYjk3LCAweGQ1ZjkwN2EwLCAweDI3ZGY3MGI4LCAweDYyMGEyYTgxLCAweGJiNDUzMzcwLAotCTB4ZTJjMjI0ZWIsIDB4NDYzYmFkOTksIDB4YjQ4ZmU3YjQsIDB4ZmZhZjgxMTgsIDB4MDczMWNhMjAsIDB4Njk4NGZjODksCi0JMHhjODJhYzQxZSwgMHhiZmQ4YWFkYiwgMHg5Y2ZkYzM2NSwgMHhhMDQyNGRjMywgMHgyNDFkZGExZiwgMHg2M2E5YTc2NCwKLQkweDk2OWNmOWE0LCAweDM0OTk1ZGZmLCAweGY3NGJhMWFmLCAweDkxYjk3ZDA0LCAweDMzNWNhODJmLCAweGY4NDQxYjhjLAotCTB4MzczZjdlZDEsIDB4YTFiOWZiZjQsIDB4YWRiZmNmZGYsIDB4ZTU0ZTE1NWYsIDB4MTBlOTQxZDYsIDB4NjU3NTYwODcsCi0JMHg4ZDhkYzM5MCwgMHhhMzcwZTU2NywgMHg3MTBlMTlmMCwgMHhjNjI5ODhkNywgMHgxMWNkZWZjMywgMHgzNjdjMzFhZSwKLQkweGYxNGZhODE2LCAweDFkMjYyNzNhLCAweGQ4ZjNmNGUxLCAweGFmZjA2MTAzLCAweDA0YjUwOTI1LCAweDA0YWJjM2NlLAotCTB4YzkyMmZlMzUsIDB4MTFkYTY4NzUsIDB4NzBmOTE1YjcsIDB4NGU2NzFmM2QsIDB4ZjU3N2EzMGMsIDB4ZmFjZjdjMWQsCi0JMHhlOGVmYmMzNiwgMHg1YmQ2ZGY1MSwgMHhmNWU4OThmZCwgMHhjN2NkYmQ5ZCwgMHhkZjNlNzUxZSwgMHhiZDk0Y2U1NSwKLQkweDcwNWJmZWYyLCAweDZmMmRkYjVmLCAweGZhOTQxNGRjLCAweDYyNzNkYjc3LCAweDcxYTViZjY4LCAweGMzNmI3ZmVkLAotCTB4YjQ2ZjRjMmYsIDB4MmZlM2Q3ZjYsIDB4ZDI5NWU4MDYsIDB4ZmQ2MGNjNGYsIDB4N2JkZTIzNzcsIDB4N2NmOTk3YTMsCi0JMHg0OGVmMzQxZCwgMHg5YmJhZWJhNSwgMHg5ZWE1M2Y4ZiwgMHhiM2RmNzdkZCwgMHhlOGUzZDk4YywgMHhmNTBiY2ZmMSwKLQkweDc3ZmFmMGU3LCAweGFlZDFmMzViLCAweDg3ZTYyMjcwLCAweDllZTEyNzE4LCAweGRlMTdhNjVhLCAweGY3ODg5MGYzLAotCTB4MDhlMjNkYWIsIDB4N2Y5NDJmYzEsIDB4MDQyZTVkZWUsIDB4ZTJkMWU5NDIsIDB4ZTM3NzkxMjIsIDB4ZjhmM2ZmNjgsCi0JMHg0MzM4YzZmOCwgMHg1ZDRjYTIzZSwgMHgzMzhiNDYyNywgMHg3ZDRjZThjNCwgMHg1ZjhjNjU4NywgMHhmMmU0ODhiMCwKLQkweGVmZmE1MWY4LCAweDkzMzczNmVkLCAweDVjODBlNjg3LCAweDJmYjIzMjNkLCAweDNhNTIzN2Y5LCAweGQyOTI3ZDA2LAotCTB4ODk2N2RjMzEsIDB4NzEyZDNkZmMsIDB4ZmFiZmNjYzksIDB4M2M5ZDc4OGUsIDB4YjEyOGEwYmIsIDB4YzUzNmJmYjgsCi0JMHgyZTFiZTJlYiwgMHhjNzI0YWYxZCwgMHhmOWI1ZTQ2OSwgMHhiZjE3NWRhMiwgMHhhNGYyNGFhNSwgMHgyZTkyYmM4MCwKLQkweGNhMTQ0NzVlLCAweDNlYzVmMjU3LCAweDUzOTRkMTQ0LCAweDE5OTkxNDNkLCAweGVlNTEzNmRjLCAweDIwMDM5OGE0LAotCTB4NWNlZWNjZTcsIDB4NmM3YTBmOTIsIDB4YjU0ZmEzMWMsIDB4YTIzMDljYmUsIDB4OWI3YzZmNWIsIDB4MjYyYzdiZmUsCi0JMHhlOTZjZjkxMSwgMHhjNjE5MjUxMiwgMHhlYjczZGEwOSwgMHhjYWU4OTNlMSwgMHgzZDFjZjhmNiwgMHg4M2JmYzFlOSwKLQkweGQ2MGFiYmFkLCAweDNkNzNkZTlkLCAweDgzYzdiMjU1LCAweDc3NGU3M2ZhLCAweGNjMmIxYmJjLCAweGVmMjhiNDRmLAotCTB4ZGZiZjMwMmIsIDB4MmFlYzA0NGIsIDB4MzllM2UxM2QsIDB4YmJmMGEwMTMsIDB4N2U4N2U4MTAsIDB4ZjRlYzYyMjEsCi0JMHhjM2FmZThhMSwgMHgxMDc1ZTRmNSwgMHhmNWNhOTFjZiwgMHhlM2JlM2M1NSwgMHhmMWNmMWUyYSwgMHg3MzdmMWU2MSwKLQkweGE4ZjM4ZjBkLCAweGE5ZWFjZmMyLCAweGQ2ODIzOGM2LCAweGFiN2ZhY2MxLCAweGMxMjdlMzliLCAweDQzZTNlMWM0LAotCTB4NTI5YWM5N2QsIDB4MzY4NGY3ODEsIDB4ZTIwODQ1NzcsIDB4NzRmZTkxNzEsIDB4YmI2OTgwOWYsIDB4YjI3ZTExYWIsCi0JMHg5MjdkYTA5YiwgMHgwNWJjYzdkNiwgMHg2YTk1MzRmMiwgMHhjYzFlMjI0NywgMHg0ZjkyMGFlZSwgMHhmYmI2MWZjYiwKLQkweGQ5YjgwMmRlLCAweDQxYmM3ZDE0LCAweGMzNDBjYTRiLCAweDllMDFiMGJkLCAweGM5M2QzZDJhLCAweGE3MDI2MmU0LAotCTB4MTI3YzIzMjcsIDB4NTNkZjE2NjQsIDB4ZjRkZWEzYTUsIDB4Y2ZlZTJhYWEsIDB4ODNkMmE5YmIsIDB4MmI4ZjE1NjksCi0JMHg4NDcxMDU1NSwgMHg4ZjI5NGUyMCwgMHhjZmM4OTQyMywgMHg4ZTE0NTU4OSwgMHhiZTA5ZmRmMCwgMHg2NjU1NTY2ZiwKLQkweDlkYTY3OTYzLCAweGE2MDk1M2VkLCAweGMwMTI4MzhhLCAweGJiMzA5ZTI1LCAweGY0OWY4MjY3LCAweDU1Y2MyMmNmLAotCTB4ZmM1MjdlMTQsIDB4N2FiYzgxNDQsIDB4ZTdjMzU4OGYsIDB4NzQ0MWU5Y2QsIDB4ZTE3MTBkOWIsIDB4MmYwMDI3OTQsCi0JMHgyNjQ4NmYzNSwgMHg5NzE1ZTdiOCwgMHhkNjNlNGNkZiwgMHhjYjM4YjNkMCwgMHgzNDc2MDcxYiwgMHg2MDEzZTFkMSwKLQkweGUwMzlmYmZmLCAweDIzNjdjZTk1LCAweDU5YzYxNzlkLCAweDlhYjBmNGU1LCAweGE3MmQ3ZGUzLCAweGRlM2NmNTg3LAotCTB4NWQzODJmZTcsIDB4MGZkNzRhM2MsIDB4N2IwZjJhZjksIDB4MWE2MWIwMzcsIDB4Yzg0YjhiZjMsIDB4NjhiOGYxMzAsCi0JMHgzYmY1YTIyMSwgMHg4OTA0ZjM4YiwgMHgzYzg5ZDc0YywgMHg3MThhNjBhYSwgMHgwYjMxYzhlZiwgMHgyNDdkOGJkMiwKLQkweDdlNTA4YWYxLCAweDhiMDA4MWVjLCAweDBhOWI5OTYzLCAweDFhOWM2NmZiLCAweDEyODI3MmI3LCAweGI2MWYxYjM3LAotCTB4M2UzY2NjODYsIDB4MWRjZWM4OWMsIDB4M2RlMzUxYWQsIDB4NTkwZTc5NTYsIDB4ZGJkZWZjZTEsIDB4ZGNjZTBlN2MsCi0JMHhmNmJjNjA0MywgMHhkMjBlODg1MSwgMHg3YjNiOTdjNywgMHg2YTNiY2QzMSwgMHg3ZjRkZmVhOSwgMHhkYTVmMWVlYywKLQkweDVhZTdhMDZhLCAweDM3M2YwMTBiLCAweGJlN2Y5ZDA3LCAweGY3YjFhZjQ2LCAweGQ5MDgwNzYyLCAweGE5ZDhhNDdmLAotCTB4NDUwNzRiM2MsIDB4OTdmN2UyODMsIDB4MDA2YzgzYjUsIDB4MDU3MzBhNjcsIDB4YTQ5YjFkZWMsIDB4MDM5MDU0ZGMsCi0JMHhkYmEyZTI5YiwgMHg0Y2VjNjI2ZCwgMHg4ZTY1NzY1ZiwgMHg4ZDc1ZDFkMCwgMHhlZTc2YzVlNCwgMHhmNDc0NjMwOSwKLQkweDRmZTVjMzVmLCAweGRkMWM5NGZjLCAweDdjZGU1NTc3LCAweDBiZmFjMzFlLCAweDMwOTk3ZGRhLCAweDk5OGJhNGFmLAotCTB4YjcwOWJmYzgsIDB4NTUzZjk3NDUsIDB4Mzg4N2VjOTIsIDB4OThhMzU1MDAsIDB4OTRjZmYzYmMsIDB4NDNkNTllOTksCi0JMHg3NTM5MzA5ZSwgMHhmOGYwOGM4MSwgMHg4NjQ2NzQzNSwgMHhiZjA3ZDQxMywgMHhlMmViMjk5YywgMHgzZTAzYWUxOSwKLQkweDYzNzEwNjE5LCAweDAyYWZmZDE5LCAweDM4YTlhMDdlLCAweDg5ZmE0NjU4LCAweGYzYzI2ZTlmLCAweDVmY2UxYWVhLAotCTB4ZGE3ZTczMGYsIDB4MTFlOWY5YzAsIDB4YzQwYjIzZTAsIDB4Njc3YzY1OWYsIDB4YjBlMTllMjYsIDB4NThiOTU0OWYsCi0JMHhmZTAxMmRkYywgMHhjNTU0OWI0ZiwgMHg3MTg3OTgyYywgMHgwNDU5OGY4ZSwgMHgzMmE4OWZiOCwgMHg0MzE3NTM3YiwKLQkweDU5ZTJkNmJlLCAweGUzMWU2MGE5LCAweGVkNmJmYjAxLCAweGRmN2YzNDRhLCAweDJjZTI3ZDkwLCAweDZjZDc4NTNiLAotCTB4NmFjN2JmOGUsIDB4YWNmZTIyYzcsIDB4YWMwMTRmNmUsIDB4YzE4OGVjY2IsIDB4NTBkNTdkZjMsIDB4NzNiNDQxNmIsCi0JMHhiMzNiNzRjMiwgMHgyZjc4NTA4ZiwgMHg0Y2ZhN2U4NCwgMHg4NzNlZTljYiwgMHg2NmExOTk4MSwgMHhmZGMyMTY2NiwKLQkweDFkMDc3ODMxLCAweGVkY2E3ZTg1LCAweGZkMjE4ZjRjLCAweDQ2YjA2NGZkLCAweDM4ZjBkNDBlLCAweDkzZjE0NDcxLAotCTB4YjA3OTFhZTEsIDB4MDI1NGM4NzIsIDB4NzI5ZTllNzYsIDB4YjgzOTE3YTAsIDB4MmFjMWM5OGQsIDB4MDYyZmVmODEsCi0JMHhmOGYxNTZiYywgMHgzNDFjYWFkYiwgMHhjNGEzNWUwMywgMHg0ZDdkNWFkNywgMHhiZTdkZWViNiwgMHhiMWI4ZTVjNCwKLQkweDNiM2IzYWRlLCAweDllMjFhZDM3LCAweDU5ZTg0ZmIwLCAweDBlYjRlMTRlLCAweDNmZDkxNGUwLCAweGEwZTNiYTczLAotCTB4M2FjYTIwZmQsIDB4MGNlZmYyOGMsIDB4NTMyMDgzZWMsIDB4MzM4YzNlY2MsIDB4OWU1NjQ4YjIsIDB4ZTU3MjBmMTgsCi0JMHg0Y2JmOThkZiwgMHgzYTgyN2E2ZiwgMHg0MmM1ZmU1ZSwgMHgyZWYyNjdkYywgMHhiZmZkYzc4ZSwgMHgyMTNjNzZhMCwKLQkweDJiMDJhZTcwLCAweGY2OWRlNmJkLCAweDc1M2ZjZGU5LCAweGQ3NGVkZTAxLCAweGNkZDNmYmYyLCAweDU3ZmMwMDUyLAotCTB4MmVhZWQ3NGUsIDB4NGRiNTdjYzMsIDB4ZmM0YzljMDEsIDB4ODgyZTAzZTUsIDB4NjllOGIyY2IsIDB4Y2Y1M2VmMTEsCi0JMHhkMGQzZjhjNCwgMHhjYmViZWZmZiwgMHg3ZjhkNDU5NywgMHhiNWJhOGFjNCwgMHgxNjlmMjA2OSwgMHhlZjhiNWQ2ZCwKLQkweDdiYzRjZWVjLCAweGYyNmFlNjg3LCAweGJkNDE1MzI0LCAweDk2ZDM4ZDUwLCAweDBiYzU4Y2Y3LCAweGZiNmY1ZGZhLAotCTB4ZThlNmRlNTIsIDB4ZjgyYWZkZTcsIDB4Y2E1YWY0MTUsIDB4MWViN2EwMmYsIDB4NDM4NGU1NzQsIDB4N2U2N2ZmMTQsCi0JMHhiMjdkNDM2OSwgMHg0Mjc3ZjY0YSwgMHgxZGFiNmFiZSwgMHhmOGFhOTA1YSwgMHgxZTNmZjFlOCwgMHgwYmI0ZGZiNiwKLQkweDc2YzNjN2U0LCAweDg5NDgzZWVmLCAweGVkNGJjNTgzLCAweGY4ZWEzZTZkLCAweDg1NmI2MGVkLCAweDc4YTdiNzdiLAotCTB4YTc4YTE0MWMsIDB4MWJiYjNhOTksIDB4ZTc2Yjc3YmIsIDB4ZWQ2MjE0NzYsIDB4OTc4NjNjYTUsIDB4YmI5NGJkMmIsCi0JMHg3MTBjOWY5OCwgMHhlNzU3MmY0NywgMHgxZjlmOTY3MywgMHgwN2I1NmQxNywgMHgwM2QxNDY1NiwgMHg4NGY3ZjExNiwKLQkweDg2N2RmODhiLCAweGJiNjcyZjRhLCAweDY3NDYyZGY1LCAweDE3MjVmZjZhLCAweDYyZjQ2NWFmLCAweGI5ZTE0YmEwLAotCTB4OWY4NzQ4NTEsIDB4N2Y3MDkxMWQsIDB4MTFiYjllMTEsIDB4NWQ5NGI0ZTMsIDB4MTJmZDYxYjQsIDB4ZjgyOGYzZDEsCi0JMHg0NWI3OTM3NywgMHhkZWZiZDNhNCwgMHg1OWY3ODcxOCwgMHg5MDc4ODYxZCwgMHgwOWU5ODNhMiwgMHhiMTc3OWE2YSwKLQkweGU2OWZhNzU4LCAweGIwY2ExNjA1LCAweDJjNWRlNzlmLCAweGY2MGM3NDYzLCAweDkzOTgzODY3LCAweDY4OWI1ZTZmLAotCTB4MDM5NmY0ZTYsIDB4YjRkZDJmZWQsIDB4NmZjYmQ2OTIsIDB4MjY0ZWY0NjMsIDB4YmVkMGNiZjgsIDB4M2NmNzY3NTgsCi0JMHg4YTBlNDUxYywgMHgzNzE3NDUwZSwgMHg4NGFkYmYzNCwgMHg0OWY4NzNiNSwgMHg3ZmZlZTY4MiwgMHg5ZThiOGYxMSwKLQkweDQ1YzU5MTdmLCAweDQ5M2Y2ZTI0LCAweGYyZTczYTAxLCAweGZhOWY0MjI5LCAweDI2MWRiNWY4LCAweDdhZTMyZjg2LAotCTB4MTMzYWY4MTMsIDB4NDM3YmQ3YmEsIDB4M2VmZGViMmYsIDB4MGZkNzJmNWIsIDB4MWJjNmRiZjIsIDB4ZjFhYmY1ZDYsCi0JMHg1OTE1ZDZkMSwgMHg1ZmFjMDRjZiwgMHg5NzBkZTNjMiwgMHhkNWRlMTg5OCwgMHg0YzFkMWJmMiwgMHg3YjY5YWIwZSwKLQkweGE1ZTIyY2U1LCAweDhmMjE1MWZiLCAweGI4MTc5OGFiLCAweGNmM2UwNjRmLCAweDJmMTcxY2RiLCAweDVmOTlkNjY4LAotCTB4YTdlNzQ3M2IsIDB4MWYzYjU3OTIsIDB4NmZlNTcwZTMsIDB4ZDAyZjJmOWUsIDB4OWUzNzU1ZjAsIDB4NmJhZjI5ZmMsCi0JMHg4NmUzNzRmMSwgMHgzYTU3NTMzZSwgMHhiZGNhMWY2MCwgMHgzZWUzMDFkNiwgMHg2NWY3M2E1YiwgMHhiYzMyZmQwMiwKLQkweGEzZmQ5MTlkLCAweGRkMGU1MDJiLCAweGNlZjY4YWU3LCAweGRiYzA0NmU1LCAweDM4N2NlZDM4LCAweGM5ZmIwNmRlLAotCTB4YTM3YmVkNDgsIDB4NThlM2QxOGIsIDB4YmUyYjZmYjYsIDB4ZGJiYmVlMWYsIDB4NDQ1MTY0OWYsIDB4ZDEzNzk3N2EsCi0JMHhlMzg0NjlmMSwgMHg1OWJmMGUyYywgMHg4ZTFjNzBkZCwgMHg4NjU3NTQ3ZSwgMHg3ZjNhNzVlMywgMHhjOGUxNWVhOSwKLQkweDQ5YzJhZmYxLCAweGIwZjU0ZWZkLCAweDE4NDQ4ZTk5LCAweDU3ZjdiMDk3LCAweDBhYWZlM2I1LCAweDI3ZjE5MTdlLAotCTB4YTFkZWZhZjAsIDB4YTJmYzgyNGYsIDB4ZjRmODEyZjIsIDB4MWYzZmIzZWMsIDB4YjBmNzZkYWQsIDB4MzBiZGUyN2QsCi0JMHhiYWJlYTkwZSwgMHhkODNmYjU3YiwgMHhkZjUwNzk3ZCwgMHgwNDczYzkzZiwgMHhhZGZlNmJjZSwgMHhhZThhYTdhMiwKLQkweGE5ZjYzMGJiLCAweDU2YWUxMGNlLCAweGFlYWRkZmJmLCAweDc2MGUxODZjLCAweDIwY2FhYWQ2LCAweDQwYmI1NGE2LAotCTB4OGE2YThiYmQsIDB4Njg1ZmQwMWUsIDB4NzhiNDZmMTUsIDB4YmMzOWViNTQsIDB4MzJiNjU3NTcsIDB4NGZkNTkxM2IsCi0JMHgyNDBmNjBkYywgMHg5OWM5MmY4YywgMHgzMzM3NjhiMSwgMHg4MzdhZjQzYiwgMHg2MGRjZjkyYywgMHg3YmY5OTNhNywKLQkweDViZWNjOTY3LCAweGU3MDk5ZTk3LCAweGJmMGM4NGUwLCAweDFkNmJiZTA2LCAweDQzNjJmZmNjLCAweGY4M2Y1MmNhLAotCTB4M2VjMTU5ZWQsIDB4MjJlZDA4MzksIDB4ODE3Njc0MTcsIDB4OWM4YmNkNTcsIDB4ZjBkNGVlOTQsIDB4ZjU4MzMxYTMsCi0JMHg5MDQyNTJlNSwgMHgyNDZlMWRhMCwgMHg0NzlkYWVmZCwgMHgyZWNlYWI0MiwgMHhkOThiODQ2YSwgMHgxMmZiYzJlYSwKLQkweDJlZjZlMTMzLCAweGVmZjUwZjBlLCAweDcyZTVhYzY0LCAweGNkZGI4NmI4LCAweDE5N2IwNzFlLCAweGJiNGFkZjg1LAotCTB4MzVhM2Y3MGIsIDB4MzlkODk4ZDcsIDB4ZjNjNjZhYzMsIDB4NDBmMWI4MzUsIDB4OGZkNjM5N2QsIDB4N2FjMWIwZWIsCi0JMHg0M2YzZDA0NCwgMHhlNDQyNzc5OCwgMHg3YjQzMTExYSwgMHgyMzhmOTAwOSwgMHgzZWY5MDA4YSwgMHhmNDA2YjQyNCwKLQkweDZkODlhZWQ2LCAweGQ5ZjdjM2Y3LCAweGUwMWQ1ZjM2LCAweGQ2ZDRjYmY3LCAweDRmZDgwMmUzLCAweDAwYzM3ZDczLAotCTB4M2ZhMmI1Y2UsIDB4N2ZmNWExNDMsIDB4YTAzMzg2MmQsIDB4M2EyZDFhNWUsIDB4NmJkMmNmMTYsIDB4YTdkYWFmYzAsCi0JMHhmMTYxOTdiOSwgMHhiMTc5MjM0MCwgMHhlNTlhZmU2NywgMHhjNTNkYzM2NiwgMHhlNWI0YzNkNywgMHgyZDk0NmNmYiwKLQkweDdiZmNmNWM2LCAweDBiMWYwOTI5LCAweDc0YjZlZjI4LCAweGYxNzNjOWRiLCAweDhlNTFkMDdkLCAweGEwMGZhNDRmLAotCTB4YmY2YzIzYWYsIDB4NjI1NjYwYmUsIDB4NGRmZDk5ZTMsIDB4Njc2NzU1NzksIDB4NmFhZjJhYjYsIDB4ZjNmMzMzYzYsCi0JMHg1N2E1M2Q1MCwgMHg3NGFiYTdiMCwgMHgzNWVjZDgzMiwgMHhhOTBkM2QwMSwgMHg3NGI1ZGZhNiwgMHg4MzJmNDUxMSwKLQkweDcyZjcwNjcxLCAweDBmY2VhMTFmLCAweDNjMDAwN2RlLCAweDZjNTk4YmM1LCAweGM1ZDAzMWJmLCAweDI1ZmI2ZWJlLAotCTB4YjMyYTdiZmIsIDB4YWYzM2MyNTUsIDB4YTIzOGY5NjIsIDB4ZDFmYzYwZmUsIDB4ZTNlZGJhMGYsIDB4Y2RkZTU4YWIsCi0JMHhkODBiZTU3MiwgMHgwNWExZGM3ZCwgMHhhNmQ3ZThiMSwgMHhjYjc2NjNjZSwgMHhjM2QwNTZkYSwgMHgyZWE0Yjc2NiwKLQkweGQ5OTlmYjg0LCAweDBhZmVlYmQ2LCAweDdjMjkzZWU5LCAweGUyNzIwZWM4LCAweGU3OWUyY2E3LCAweDJhYmRlZmRkLAotCTB4ZmJiYTY5ZDksIDB4ZGVmOGFkZGQsIDB4Y2ZkZjM0ZmEsIDB4MDRiMDkyZTYsIDB4YjcxMWY3ZjgsIDB4MDFlYmVjY2MsCi0JMHhjNDA1ZDNlNCwgMHgwOTQxZjNjMywgMHg4NGY3YmRjZSwgMHg0MmRlNzcwMiwgMHgxYWJlZjc3MywgMHg2MjhlMDViOCwKLQkweDVmODQ4ZjczLCAweDgyZjk3NDAzLCAweGMzNjhhOWVlLCAweDdiMzVkYjU2LCAweGQ2Nzk2NzVlLCAweDY2ZmQ3YmFlLAotCTB4YjIyN2FlMmIsIDB4NWZhZTJiNWUsIDB4ZjY0NDFmNWQsIDB4YjhlZWYyYzQsIDB4OTEyZTJjYzAsIDB4MGI0OThmMGEsCi0JMHhkYjY3YmFkOSwgMHg3Yzk4ZmNlNywgMHhkYjM5ZGU4YiwgMHhjY2FmZWEzYSwgMHhjN2NkODg3ZiwgMHhhMWNmOWYwOCwKLQkweDRlYzVjYTg4LCAweGE0ZTRkNzg3LCAweGUxZDBmZmViLCAweDVlYjQ5ZDE1LCAweDY2OWMzNTg5LCAweDYyZmM4ODFlLAotCTB4ZTg5OTdjODEsIDB4YWU4OTI2YmIsIDB4ZGYwMGZjZmYsIDB4NDM4MDQ0YjAsIDB4ZDJhYjlmNmIsIDB4ZjRlNGRmMmYsCi0JMHhlZmE3MjZmZCwgMHhlM2JiZDMzNywgMHgxZWEwMjcxOCwgMHhhZTAyNGY3ZCwgMHhiM2E3MDY2YiwgMHg0N2RmYmIzNSwKLQkweDZmZjNjYzNmLCAweGE1NGI3OGIwLCAweDgzZWI3MmEyLCAweDQ5MTMzNzY4LCAweDZhYWMzOGI0LCAweGRmYjcyNmZhLAotCTB4MGU5NTRlMjgsIDB4MGRjZTNjMDMsIDB4NGQxOTk3ZTMsIDB4OWZiYmY0NzYsIDB4ZjRlYTI5OTEsIDB4MDI5OTE5ZjAsCi0JMHgxZDZiODdmNywgMHgyZjRlODc3ZCwgMHhkMmY1YzU1ZCwgMHhmZjgwZmQ5ZSwgMHg4NTlmYjE4MSwgMHgzOWUzMjdjYiwKLQkweDllZWM4ZjZjLCAweGZmZGZmMjA4LCAweDg1YjNhMzM0LCAweDI5M2MyODUzLCAweDEzYWNlNWRkLCAweGZjNzBkZWYwLAotCTB4ZjIwMjM2YTksIDB4MWM0ZDYxNzAsIDB4ODVmM2ZiODEsIDB4MjBmYmZjMGYsIDB4ZDY1MGM3ODgsIDB4ODFiNzM0YWEsCi0JMHgxZTA4MGM5YywgMHg4YjI1YmZiMCwgMHg0NjdlMzI0YiwgMHgxMGU5YjVlNywgMHhiZjIxODdkYiwgMHhmMGU5ZTYwNCwKLQkweDNkOGQwZTJhLCAweGM4YWE0M2JhLCAweGRmNWQwMzcwLCAweDNjODJmMGViLCAweGY3ODc3Zjk4LCAweDZmZTc4YzAzLAotCTB4N2IwNDFkMGUsIDB4Zjk5ZWJhYjcsIDB4MDBkOTI4ZjcsIDB4OWI0MWY5ZmYsIDB4MzEyYjUzMTcsIDB4MzZiOTUwYzcsCi0JMHg5MGFjNGNkZiwgMHg2Y2M0Y2IyNiwgMHg3M2NiN2M4MywgMHgxZTRiYjA1ZiwgMHgxOGU0ZWViNiwgMHhkZmRmNjU2MiwKLQkweDcyZjQwNGI4LCAweDViYWM4MzVkLCAweDNlYTBhOGY3LCAweDNlYjM3ZDdmLCAweGU3ZDIxMTlmLCAweGU3ZDExZWM3LAotCTB4NDMxYTgzYjcsIDB4ZmZjMzk1ZjEsIDB4ZmRhMWQ0Y2UsIDB4ODc3ZjAyMTYsIDB4MGI0NWY4YTYsIDB4MGNiZWIzZmEsCi0JMHgwNWZhMDA3YiwgMHg0ZGRlNTBkYSwgMHg4MmM5NmUyZSwgMHg1ZTRmZDZmYiwgMHg5Y2UwOWE3MCwgMHhkZjliZWZiZiwKLQkweDc4NmQ3ZGUyLCAweGM5ZTMxZDg3LCAweDBjNTNmYzFmLCAweGMwN2YwMTg5LCAweGExNWI2ZDE3LCAweDA0ZTI5OGJjLAotCTB4MmZjNTc3ZWMsIDB4MGVjMGVhZGEsIDB4N2E4NDY3YjIsIDB4NWZhMDBkMWUsIDB4MzFiZjllYzUsIDB4NzZmMGY5YmYsCi0JMHg2ZmVlMDA0YiwgMHhkY2ZiZDkzZiwgMHg5ZjZmNDAwYiwgMHhmYTg3ZWY2YywgMHhkZjgyY2JjZSwgMHhkN2Y5ZmQwNCwKLQkweGM0ZTY3YzMzLCAweDI3MmQ3ZGIwLCAweGRlMzNkMjg2LCAweDc1Y2ZlYmJiLCAweDFjOTkzYmY3LCAweDFlNmNhZjY5LAotCTB4NGU1OWZiMDEsIDB4YjQ3ZmIzM2MsIDB4MDExYzFlNTcsIDB4OGYwZTVjZmIsIDB4NDllYWFlNDMsIDB4YmM3ZTNjMzksCi0JMHgyNzRmZWE5YiwgMHhlNTE0MzlkOSwgMHgwZmNlNzBjMiwgMHhiMjA1ODE3OSwgMHhkNWZhMDFkNywgMHg1MzkwMTg4YSwKLQkweDc5ZTU2NzVkLCAweGFjMzU4ZmUwLCAweDE1NDcwZjU2LCAweGY0MDZkN2NmLCAweDdjZjkyYmRmLCAweGY3Y2QxMDE2LAotCTB4NTZmN2I4NzQsIDB4YmQwMGE0ZDYsIDB4YmVhMjQzM2QsIDB4ZjljMzVjN2IsIDB4NjVlN2Y5ZTgsIDB4ZjIyZmJjZjUsCi0JMHhkMTQ0NjhmOCwgMHhjODhhY2ZiYywgMHgxZmFjYjI3MywgMHhiZTAwMjVmOCwgMHgxN2JlNDYwNiwgMHhmYjU1YzYxYiwKLQkweGZmZmJjYTlmLCAweDkyZmNjYWNjLCAweGNlMWMzODEzLCAweDdkNDExZTU1LCAweGFkZGY1YmEwLCAweDY4YTc3YWY0LAotCTB4MDdiNTc5ZjIsIDB4ZmMyM2U2OTMsIDB4ZDAyZDI2MGUsIDB4MWZiNmYzOWUsIDB4ZmUwMzlhNGUsIDB4ZmM2NjBkMzYsCi0JMHhiMzI1NTNiYiwgMHgyNzI0N2Q5ZiwgMHg0MThiYmUwMSwgMHgwMzk0Mjc5OCwgMHhhZjgyM2IxYywgMHhkNTFlYTBiOSwKLQkweGZkNjhjNzY3LCAweDZmNmJmMjU3LCAweGVjZDE0ZWYyLCAweGNlOTVkZmQ3LCAweGJiNjVlM2JiLCAweGNhNWU1YzE5LAotCTB4MTZmZGJkY2UsIDB4YTJjZGJiYTAsIDB4MDcxNWFhMDcsIDB4MTQ3OWJjZWYsIDB4ODRiMzdiYzAsIDB4NzY0YjcyZWYsCi0JMHhiZGI3MTg0YSwgMHhiNDA2ZWViYywgMHhiZTM3MTQ1MywgMHhmZmUzMTUzMywgMHgwM2RmMzkzZCwgMHg5MzMyY2FmMywKLQkweDlhMGM3MTVjLCAweGY0ODBlZTE4LCAweDhjNmVjYjRjLCAweDYxZmM1N2FmLCAweDYwNTY2YzhkLCAweGEzYmE3YWJlLAotCTB4YTNmMDhjNzQsIDB4NmRkNjU0MWEsIDB4MTVkZTUzYzAsIDB4N2VhYjNmZTgsIDB4MzBiN2UyMzcsIDB4YzQ2ZjZmYTAsCi0JMHgxYmE3MmI1MywgMHg4YjVjMzNmYSwgMHgzZWJkNjM2ZiwgMHg4ZWY4ZmRkMywgMHg5NTM5NjRiMiwgMHg1NDNiMWE2MywKLQkweGY0NmFhOWM5LCAweDAzOGUzM2Q3LCAweGEzNDRkYTM3LCAweDc3MDNlY2E3LCAweDFkYWZlMDFiLCAweGZlODM2ZmNjLAotCTB4ZWUyY2Q2MDgsIDB4ZTU4ODNhZDcsIDB4ZDAyMDBlMzEsIDB4MDQ3ZmFjMTUsIDB4M2JjMGEyOTksIDB4MzRjOGRiY2MsCi0JMHhkMWI5NTU0OCwgMHgwZDFjMWQ5MSwgMHhkYTE2NWZmNSwgMHhmNjE1ZmQ5ZSwgMHhlZDdlNDRlNywgMHgyZTMwODc3MCwKLQkweDNlZmU1ZjYyLCAweDc5NjE0M2I1LCAweGE4M2FlZmY1LCAweDM2MmQ0NWU1LCAweGU0ZjhmM2Y0LCAweDcxZjI4Y2JjLAotCTB4NDE5N2Y4MDUsIDB4MjY2YzE3ZmQsIDB4M2ViZmRkMTMsIDB4MTI2N2Q5ZDksIDB4MDQ3NjJkZjgsIDB4NzNkY2JjNTksCi0JMHhlNDkzM2VjMSwgMHg4ZDc3ZDk2ZiwgMHgwZmRkNDE3MiwgMHg3NGFmYzA0ZiwgMHhlOWMyZmNkZiwgMHg0YjdlYzMwZCwKLQkweGNlYmYzMTU2LCAweDE5MTUzZWU0LCAweGE0ZjA1MTE1LCAweDJiOTA0YmI2LCAweDEyM2NlMDMyLCAweGQ5ZTFkN2JlLAotCTB4YTdmMjcwOGEsIDB4YzE3MjNlYzMsIDB4ODFmNjgyOTcsIDB4MTIxZWRjZjksIDB4MDZmZGNlZWYsIDB4YmFkMjc1ZmEsCi0JMHhmZTJmZmE1ZSwgMHhlODE1Yjg4OCwgMHg3M2QxNjNlYiwgMHhlNDUwN2JiZiwgMHhhNjUxNmY5ZSwgMHg5MGYzZGYwZiwKLQkweGI0NWNlYzU1LCAweDY2NDI0Y2QwLCAweDg0MmVlZmFhLCAweGU2MzQ2M2ZkLCAweGI4NWJiZjcxLCAweGE2ZmY0MDU5LAotCTB4ZWJmNDFiNDUsIDB4ZGFhZDc4ODEsIDB4NDA1MDg3YmYsIDB4MjJkZmIxYWEsIDB4NjBiNGM0MTIsIDB4MTBiY2JlYjMsCi0JMHhmODE3MjNmNiwgMHhmYzdiYjA2NywgMHhiOTdkN2FhMiwgMHhhNGE4NGVmYSwgMHgxYTI1YjJmMSwgMHhlYTIwYmVkYywKLQkweDJlYzliY2ZhLCAweGIzNmUxNzlhLCAweGRiZWVmY2UyLCAweDM1ZWVjYjE0LCAweDdkODVlMjY0LCAweDg5YzliYzMwLAotCTB4Zjg5OGJjNzIsIDB4YmUzZjNiZDgsIDB4MzAzZjk2MGYsIDB4ZDI4OGJiZGYsIDB4ODVmMmQ3NjcsIDB4MzA3ZDQ1ZGUsCi0JMHg3ZDgxMDc3ZSwgMHhmODk1YjE2ZiwgMHgxZTU4NjM1ZCwgMHgwYjIwMTdlMiwgMHgzOGIyOWYyMSwgMHhlZDRlYjA1MSwKLQkweDI5ZTI5NjNiLCAweDE1YzAzNDI0LCAweDUzYWMyZjU5LCAweDY1ZGU0ZTViLCAweDExNmUyY2Y4LCAweGJkNjBhMzQyLAotCTB4NjQ0MjdlZjAsIDB4MmJkNmQ1ZWIsIDB4NjkyODcwZTEsIDB4MTFlY2U4YjQsIDB4MGE3ZmUwYTUsIDB4OTc0ZDMzN2UsCi0JMHhiOTdlYmEyZCwgMHg4ZmRkMWYzZiwgMHg2OWUyOGQ4OSwgMHgwZGRjYjc1MywgMHg0ZmNkMWI1YywgMHhkNzg3MzhmZSwKLQkweDUyZjMzYmE2LCAweDA1MWYzZjgxLCAweDA3MmZiMzNkLCAweDE3M2QzNjY4LCAweDYxY2M5MDgzLCAweDcxZDJiNzgwLAotCTB4ZTc3NmM2NjIsIDB4MjU2YjNjYjEsIDB4NjQ3ZDRmY2IsIDB4NTFlOTBmZTAsIDB4MWJjZWZlMWIsIDB4MTQyYzZmZGUsCi0JMHhmNzg3NWY3MywgMHg3ZGI5Y2Y1NywgMHg3MWQxNzYzZiwgMHg2OWJjOWExNiwgMHhlZjUzZTQ2NiwgMHg1Y2Q3ZjQ1MCwKLQkweGM0ZmZkNmNlLCAweDJiNmI4YTk4LCAweDU1N2I5Y2EyLCAweDA0MmUzZTdjLCAweGJmZDFiZWYxLCAweGNlYWJlZDk3LAotCTB4N2RhNGIwY2MsIDB4YzVjOGI0NWYsIDB4YTFlYzRmZTQsIDB4MTA3NzdjMzYsIDB4YmJlMDJkZGUsIDB4MTM4NTI3YzcsCi0JMHhjOWYwMmVmOCwgMHhjZTA0MjkxZiwgMHg2ZjE0MjllNSwgMHgxNDlmMWYyMCwgMHhiZjg4MmFjOCwgMHg3MzM0ZDk5NSwKLQkweGJmODA2YmM5LCAweGEzZDQxOGNjLCAweDhhMjY5YjRhLCAweDNmNWMwZWE1LCAweDE1ZWNhM2QzLCAweDk5ZWY3MDc1LAotCTB4MThmODZmM2MsIDB4ZWViYTZiYTAsIDB4ZmYwMWI3NzksIDB4NWI4NDE0YmIsIDB4NDFkMTgzYWEsIDB4ZmE3ZjRhY2EsCi0JMHg3ZTMwOTFkMiwgMHg4MGQ3OTJlZSwgMHhlMGM1NDZlZiwgMHgwYTY0ZDkzYiwgMHhhNjNjNjcyYiwgMHg0YTJmNDBlYiwKLQkweDQxMDcxOTIxLCAweDU3NGNhNzhlLCAweDc3MmQ4MGM2LCAweDkzOGQ4YjkzLCAweGNkZTcxMjY4LCAweDBjNmRmZDA0LAotCTB4MjQzZmM3Y2IsIDB4NzEyMmI3NzgsIDB4MjU3NWM0NmQsIDB4MzY5ZmQ4NWIsIDB4N2ZhMGVmODIsIDB4ODA0ZWMxNWEsCi0JMHhlNzg2MDFlNSwgMHgzMDE5MTVjOSwgMHg5NjIwZjI3ZSwgMHhmNDIxYzgyNiwgMHg4ZGRhM2E1MywgMHhjZGVhMWY3NywKLQkweGU1MDRkY2NiLCAweDEzNGJiMmYyLCAweGZiNjllMzkzLCAweGMwZjQxZGEzLCAweGQxZDVlNTRjLCAweDFkOWVhYWZlLAotCTB4NDM5ZTgwNzIsIDB4ZjU2NzBmMDYsIDB4MmNiMTVlYjksIDB4MjdlNWY5ODMsIDB4MTBmYWE5YTQsIDB4NzkyNWQ3YWIsCi0JMHhmYzgyYzc2MywgMHhkYmU5ODc3YywgMHhiMWJjM2I5ZiwgMHg4Mzc3MzdlMCwgMHhiODBmZGQxYywgMHhmY2E5ZTM4NiwKLQkweDM0MDQ5ZGEyLCAweGQ2N2NiZmYyLCAweGE0ZGVmODk3LCAweGY3NGJhMmZjLCAweDY5YzllMjFkLCAweDBhNGI0OWZkLAotCTB4ZTNkYzYxMGUsIDB4N2U4YWQyNTIsIDB4YmQ0MWE1YzksIDB4MzEwZGViZmYsIDB4ZTk1NWM3ZDEsIDB4NDhhMmZjYmMsCi0JMHg5NWM3NTFmYywgMHhmNjJmZGZmNSwgMHhkMTNlZmUyMSwgMHhiZmU5MjVlYSwgMHhmOWY0MTQ1ZiwgMHgzZDc4YWZlNiwKLQkweGQ5Mjc3ZTMzLCAweGM3MzgyZTZkLCAweDA3N2Q4NzRkLCAweGU0YzA0OWU0LCAweGUwOGZhZTk3LCAweGE2ZGRkM2E1LAotCTB4MTUzYTZmZGIsIDB4NzFlMmVmOTYsIDB4YjU3MmQ1NzUsIDB4MzI1OWNlZmYsIDB4YzYxMzlmN2YsIDB4YTkyYTNhNzEsCi0JMHg3OWYwYTI0MCwgMHhiNDUzZTVhYSwgMHgxY2I0OTZhMywgMHg3NGE4Zjg0NCwgMHg5ZDkzODExMSwgMHg0YTcwMzVmOCwKLQkweDk5MGQ2YWFhLCAweGZlZmY4ZjI4LCAweDQ3NmI0NTkxLCAweDcyNTE0YjVlLCAweDNmYjNmMzg4LCAweGYyOTdhZDZmLAotCTB4MmZjNDEyNmYsIDB4M2RiN2YwZDcsIDB4NTFkZjliYjMsIDB4ODkzMjZjY2MsIDB4YmY5OWRlZGMsIDB4NGQwNGNhNzYsCi0JMHg2ZWVmZDc5ZSwgMHgyMWY4MmZlZiwgMHg2NDhlNjc5NCwgMHhhNDdiZGZlZCwgMHgwNzJiNzdmMCwgMHg1ZDEzZTQ0NywKLQkweDUzYWU1YTQ3LCAweGYyMWFiNzkzLCAweGE1MWY5YTBlLCAweGU1MGRiYmM5LCAweDE0ZjI4NjA5LCAweGFiM2ZiZTQzLAotCTB4YTUwY2UxZGYsIDB4ZGE0MjFlODksIDB4MjFmZDI5MWUsIDB4OGViOTVkZmMsIDB4ODg1Y2QwZDQsIDB4YWM0MWIwMzgsCi0JMHhkZGZjMjFmOCwgMHhmNjRjZDJjOSwgMHg1YWNiMTQ3NywgMHhiMzczMGYwNCwgMHhmMzJiZjA2MiwgMHg4NzMwN2JiMCwKLQkweDM4NWU0ZGE3LCAweGZhZDBlMDEyLCAweDkyODNjODNhLCAweGZhMGRjMTY2LCAweDMzYjgyM2JlLCAweGE3Njg3OTg0LAotCTB4ZDkwNWRhNjgsIDB4ZTA5MmFkM2IsIDB4NmJkNzZjMDksIDB4Yzg0ZGMzZmYsIDB4M2YwZjBmY2YsIDB4ZTRhZWY1ODksCi0JMHhlYmE2NDRlZiwgMHhmMzdiZTBmZCwgMHg3Yzk4NzRiMywgMHg1M2RmNjExNywgMHhlYzc3MGNlMywgMHg3N2YyM2Y3YywKLQkweGNlZjdlOGVkLCAweDk0NjFlZjU0LCAweGFhZjc4NmE3LCAweDQ3MWYzMGU1LCAweDM4NTQ1Zjg0LCAweDAyZmMzYzNlLAotCTB4ZjNmYzVkYzYsIDB4NDBmNzk2YTgsIDB4ZmIyZmIwMGQsIDB4OTVlODA1NzQsIDB4MWU5ZTk2MWYsIDB4YzQxNjdhMDcsCi0JMHhlM2ZkODQ2ZSwgMHgyZDcwMjE3MSwgMHgxMTRmNDdlYywgMHhlZTMwYjVkZiwgMHgwZTQzYTViZCwgMHgzOTk0OWZjMiwKLQkweDgxNmRiNTJlLCAweDFlYzMxMDUwLCAweDNmZjA4ZjVkLCAweDAwMWI2Y2VlLCAweGRhZTg5MjdmLCAweDRmOTYxYWQ4LAotCTB4MTAwOGMzNmMsIDB4ZmQzNzYyNmIsIDB4MzlmYjRjZDAsIDB4ODA2ZGEwM2UsIDB4YzU0N2U2ODksIDB4NDNlNTY2MWUsCi0JMHhmZTQwYjZkYSwgMHhiMGRmZDhjZSwgMHgwMzZkNTFmMiwgMHgxZDFjMzc0NCwgMHhkYjdmMTExYSwgMHgzZWY5ZDFkYywKLQkweDFiYzk5NjJkLCAweDA2NDM3ZTc1LCAweDQxNjM1MzdiLCAweGZiNjEyYThmLCAweGI0ODczYzBlLCAweGI3M2FiOTUyLAotCTB4NmQ4ZWRjZTgsIDB4ZmY3MzFlMTQsIDB4NmVmMjhlZDUsIDB4M2ZlZGM3NWIsIDB4M2ZiMWZhNjYsIDB4OTJhMGZjMTcsCi0JMHg1ZjcxYmMzOSwgMHg0NjZlZjk0NCwgMHhmNjE1MjFiZCwgMHgzZTA4ZjhjMiwgMHgwYWFkNjk5ZCwgMHgyYTIzMWJlZSwKLQkweDkwNWU4Mjc2LCAweGVlMjQ3NzNjLCAweGVmNGU5ZDFiLCAweDkxNzFkOGRhLCAweDlhMDQ4YmY0LCAweDhkYWM3OWQyLAotCTB4MmVmOTMzNzUsIDB4NWIzZGYwOWEsIDB4ZDQ0ZTgzZjIsIDB4ZjFlNTFlOWYsIDB4MjFkZjI5YmEsIDB4NWUzODM4N2QsCi0JMHg4Y2Y1ZjJjNiwgMHhhMWU3NjU4ZCwgMHhkODRkZDc0NCwgMHhhZjVjZGRjZiwgMHhkODFmNTlhZCwgMHhmZmYwYTM2ZSwKLQkweGRlMGU3YTkzLCAweDM5ZTRmNGM4LCAweGM0ZWU1NDc1LCAweDM3ODE3ZjgyLCAweDFjYzllNDE1LCAweDhjOGYwN2IwLAotCTB4YmZiZDU1ZTQsIDB4MWRlNjgzMjYsIDB4Y2Q1OGYzOTEsIDB4MzZhYTZmNGMsIDB4MWQ0ZDc4MmUsIDB4NTVlNTU3MmIsCi0JMHhhZjZiM2E0ZCwgMHg1NWM5NWJlZSwgMHg4ZmM5M2UwYywgMHhkNjE1YmI1ZSwgMHhmZjMzMzc2MSwgMHg4NmIzYzU4MSwKLQkweDdhODE1ZDZlLCAweDVmMzg2ZGMwLCAweGMyYTZmNWUyLCAweGUxNTRmY2I5LCAweGEzZTgxMzQwLCAweDBkYTY3ZTJhLAotCTB4ZWI4MmRlZjYsIDB4MmEzOGY3ZTEsIDB4ZDdmMWQ0OWUsIDB4MTQyZjc1ZjIsIDB4ZjYwMTFlYTksIDB4ZTEwZmI3NzQsCi0JMHhkMThhZjU0OSwgMHhlOTlkNzJlYywgMHg1YWU5NmIxNSwgMHg3YzJhMWYwMSwgMHgxYzZkYjk4OSwgMHgwNDVmZmY3YywKLQkweDBjZmZhNWE3LCAweDdlZGRmZDM4LCAweGJjN2JkM2RjLCAweGZkMDM1OWM3LCAweGFkM2YyZTk3LCAweGUxYzM4ZjdmLAotCTB4OTIxMGI4ZmUsIDB4ZjEzNTMzOTIsIDB4Mzg3N2U4NTMsIDB4ZjJlYWRlNzcsIDB4NzM1NjIyZmQsIDB4YzFmNzM1YmYsCi0JMHhkNTNmZDQ1MiwgMHhlNWZmZDhmNSwgMHg5MTc3NjlhNSwgMHhkNDY5ZmM5ZSwgMHhjOWZmOGYwZiwgMHgwMmVjMDFiYSwKLQkweGNhMjBlNWM3LCAweDI2M2ZlM2UzLCAweDM4ZTQyZWY4LCAweGVhYTU2NzhmLCAweDVhZmY1OWI3LCAweDZkY2UxNDdjLAotCTB4MjIyYjExZmYsIDB4N2E1NGQ4N2QsIDB4ZTY3NzcyMTAsIDB4YTdhZWY4NTEsIDB4M2JiYzM5ZGIsIDB4ZDQ2NGZkNTcsCi0JMHhjNzg2YmFmZCwgMHhlMDc5YWRhMSwgMHhkMWFmN2MzYSwgMHgzY2YwZGE0NSwgMHgyODI2Y2ZlZSwgMHg2N2NiYmIzZiwKLQkweDRhNzJjNTBmLCAweGM4MWI3ZTI3LCAweDhjMThjMjg5LCAweDQxOTM1ZmM3LCAweGNkNDk3ZGYwLCAweDBlNTgxMWVjLAotCTB4YzdmNDU4ZTcsIDB4NzFjNTZkOTksIDB4M2EzMjY2NmEsIDB4NDc4YzI5YWMsIDB4NWRjODIxN2IsIDB4NzQ2ZjViODAsCi0JMHhlY2M1NTQ5NCwgMHgxZGVjYzQxZiwgMHg3ZjFmYmRhZCwgMHhmOWY5OTYyZiwgMHg3NmRiMzNkYiwgMHhlZDdhMGZiZiwKLQkweGI1ZWExYjA2LCAweDU3YmM0MjgwLCAweGYxYzY0ZWE5LCAweDhmZWMzZDI4LCAweGNkOTdmZGM1LCAweGE5NjNlMTYzLAotCTB4NWM3MTg3ODEsIDB4ZDYwM2RhMGYsIDB4NTFmM2JkM2EsIDB4YWVjY2ZkY2UsIDB4ZGIzN2ZjYzAsIDB4MThlYjNhYzgsCi0JMHg1NTkwZTYzOCwgMHg3Y2Y5MmYyOCwgMHhlODEzZjU0OCwgMHhlYjhmMzE1NywgMHg1YzE1MWY4OSwgMHg3MjFlODI3MCwKLQkweDFlZGJiNjM0LCAweGY5ZjM4NWUwLCAweDE3Y2FjMjAyLCAweDAxM2Y2NDNjLCAweDBmMDVhYmU3LCAweDY0Yjc3OGIxLAotCTB4ZmQ1ZTRkZGQsIDB4NmI5ZDA5M2QsIDB4ZjlkM2Q4MTIsIDB4MDlkODZkNGYsIDB4M2I0MWYwNzAsIDB4MWZmZmY0MTcsCi0JMHhlNDFmNzg0ZSwgMHhjM2JkODg3YiwgMHg3ZWRhN2UyNSwgMHg0N2ZkYTQ3OCwgMHg5NzYwZjdjMCwgMHg0OWZjZDkxNywKLQkweDE2ODk1ZGE1LCAweDU4YTNmNGU3LCAweGZkNTM5N2VlLCAweDllM2I1Nzg0LCAweDVmYjE4ZTNhLCAweDAzNmM4ZTdhLAotCTB4MGY3MGEzN2UsIDB4ZjBhODNiYzEsIDB4NTlkZmQ4Y2YsIDB4NDEzN2NlMzAsIDB4NDZjMmZmMGUsIDB4OGE1NmU3Y2IsCi0JMHgzYzI5MmI3MSwgMHhiODlkY2I3ZCwgMHhmM2JlNzU1ZSwgMHhhMjM3YzM5MiwgMHg3ZmQwYzI5ZCwgMHgwYjJjYmRiYiwKLQkweDc5ZWFlN2VjLCAweDM5YTQzYzg4LCAweGU0NWMyMWZmLCAweGY4ODQ1ZTQ4LCAweDU3M2M2MTAxLCAweGNmY2VmOGY1LAotCTB4Mjg3M2M2Y2QsIDB4NjhiMzdmMjEsIDB4MmJiZjc1ZWIsIDB4ZmNjMzA0NTAsIDB4ODIyOTVkMzksIDB4ZTNlNmYwMTksCi0JMHgxY2IyZmVmNywgMHhlYjcyMGI5ZSwgMHg1MGViMDJmZiwgMHg4MDAwNTg5ZSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3YzBiLCAweDczYjlmODk5LCAweDMzMzJiY2VmLCAweDQ5MzI0Y2M5LAotCTB4OWI4ZjIxMjYsIDB4ODA0MDIxMDcsIDB4NTIwMjRjNDksIDB4MTg3ODQzMWYsIDB4YTQwNzZiMzUsIDB4NDM4YjViMTYsCi0JMHg5MjExMjNjMiwgMHhiMTc1YjY4OSwgMHg1MTAwY2I2NSwgMHg4ZDA0MjIwOCwgMHg0MTM4MGFiYywgMHhiYjZiYmE1MCwKLQkweDA2MDIyMmMxLCAweGI2YTJkMTFhLCAweDZlYjQyZmVhLCAweGZkZmVlZDU3LCAweDU4Zjg4ODQ1LCAweDE2NTQ0NjQ5LAotCTB4ZWZmZmFkNWIsIDB4OTliOWNlZmIsIDB4NTE0NDkzYjksIDB4NjdmNGRkYmIsIDB4NzM5ZWU3MmYsIDB4NzdjZWY5Y2YsCi0JMHhjZWY5ZjdiZSwgMHhlOTlhMTYxOSwgMHhmNDY2MmRlYiwgMHhmYzNlNzlmNywgMHgzMzU3N2Y4NywgMHgzMDM0ZTg5NiwKLQkweDdjZDhjYTk2LCAweDk2NzczNTk5LCAweGViNDdkZjQ0LCAweDZkNjdhYTI1LCAweDM0OTY3ZDViLCAweDBiYmMwMmM2LAotCTB4NjZmNTM2ZTYsIDB4NjA3ZGExZmIsIDB4Njk0ZGY5YjksIDB4ZWI4OGJjMjIsIDB4NjMzMGIxOWYsIDB4YjU2ZDhjMTUsCi0JMHg5OTM1OTBiMiwgMHhmNDEyNmRiMSwgMHhiYmNmMGU1MywgMHg3OTM1ZTE2YywgMHgyMzU4MGQ4YywgMHhjNjAyYjA4ZiwKLQkweDU5YWZjNzgyLCAweDFiZmJlZjgwLCAweDRkMDY1NDEyLCAweDA4NTg5ODc2LCAweDhlZTNhMWNiLCAweDU3NmMzZWYwLAotCTB4NjRjNDViZDQsIDB4N2MxODA3YTgsIDB4MjRiZTc4NmUsIDB4MGQyNDg0NzcsIDB4NWU5YWM2MDgsIDB4ODdhY2Y3OTIsCi0JMHhhZTQ3ZmQ3NiwgMHhiMmFjZmRlNSwgMHg0MWNhMGNhOSwgMHhiOGMxMzZhOCwgMHg1NzVmZDBjMSwgMHhhNGM2NDRiMiwKLQkweGZmMWExNjM5LCAweDZjMjkyMWNjLCAweDY2YzNmYWM2LCAweDg1ZTBkM2U2LCAweGJmZTFmYWZmLCAweDJmMTgzMmZhLAotCTB4MjcxOTA4NmMsIDB4MTAyYjEzYzEsIDB4ODIzNmMzOGUsIDB4NDBkYTY2MDMsIDB4ODEzZjdkZTMsIDB4OWJmMTg3YWQsCi0JMHgwMGNmOTIwYywgMHg4ZGI3NGRmNSwgMHhmMGUxYWYwYiwgMHg2N2UwMTg1OCwgMHhjOWFkMDA5OSwgMHhlODI0NWFjMCwKLQkweGI1ZTA1MzJmLCAweGU4YmE3MGM5LCAweGE3NWUxMjhlLCAweGY4YTViYjQwLCAweDNkZGE5NTBmLCAweGNiOWMwMTJiLAotCTB4NjQ3YTFiMmMsIDB4ZTEzOTkzODAsIDB4MGRiZmE4M2YsIDB4ZWJhMmYzZWIsIDB4YmZlMWI0ZDAsIDB4MzQ3OWMzM2YsCi0JMHgyZGI4MDQxZCwgMHgzZDk3Yjg1MSwgMHg2ZGM3OWZhNiwgMHgyN2FkMTRjYywgMHg3ZWI0NDNiOCwgMHgyZjhlNzJiNiwKLQkweDQ3ODU4MzM2LCAweDUxMGViYzAzLCAweDg0Zjc1NWI2LCAweGYyYzdjNDY1LCAweDY1Y2NlY2U5LCAweGVmNDRmNGQwLAotCTB4ZWIxZGJmMmMsIDB4M2MyZDU5M2IsIDB4NWYzMGVmODMsIDB4ZGE5ZWUwMTgsIDB4MjhjY2YxZDUsIDB4ZWVhYWVmNjgsCi0JMHgwNmU5YzZjOSwgMHhhMGIxZmY5NywgMHgzYWU4YjJlZiwgMHhkZTVlNzA2YiwgMHg3NjY2NTliNSwgMHgwM2JlOGYxYSwKLQkweGVjMDc3YzUwLCAweDljZWM2ZWQ0LCAweGQ1Y2ZiMTA5LCAweDQxYWE1ZGY0LCAweGViYzcxNWJlLCAweDg4MTk1N2M1LAotCTB4MDQ4NjVmMWMsIDB4Yzg2OTZjZTMsIDB4ZGFiYWUwMzcsIDB4YjAwNTc4MTQsIDB4YjMxYjZhMmUsIDB4ZDllMTE1NjcsCi0JMHhjMWM3MzQ1NywgMHhlYzg5ODNkOCwgMHhkM2UxM2Y1NiwgMHhmZTg3ZTk1YiwgMHgyZDU2NzUxZSwgMHhlOTdmNDI3NCwKLQkweDlkNWJhYWFlLCAweGJmMWM3Y2E5LCAweDAyOWZhNzAzLCAweDZiYTUwZDQwLCAweDQ3ZTFhOWVkLCAweGQwNWU5NzZiLAotCTB4MWY2Y2RhNWMsIDB4YzRkYjlkYjksIDB4OWVkOTE2ZjEsIDB4ZjA4M2RlMTQsIDB4MTc5NTEyMjgsIDB4YjFkOGRlZmYsCi0JMHg4ODUzZTA5ZSwgMHg5NWQ4ZWU2ZSwgMHhlYmY4NDYxNywgMHhlOTA5OWI1OSwgMHg5YjBiMTk3YywgMHg1YjE3OGU5MCwKLQkweGU4MTEyODU4LCAweDRiMzQzMTYyLCAweDZkOTJlNzgyLCAweGFjYzZhNjY2LCAweDVmNTg0MzVmLCAweGFlMWNlZDY2LAotCTB4ZDNmNzRhNjUsIDB4NGRkMjIyNTIsIDB4NzRiM2Y1MGYsIDB4YjJkZGJlYmYsIDB4MDFkYmFjMTksIDB4ZDYxNjhkZjUsCi0JMHhhNzY3YzM2ZCwgMHg0NTg5YmViZSwgMHhlMWUwOGUwOCwgMHhmZWJhY2RjZiwgMHhjM2FkMWI1OSwgMHhjODYzMmI3NiwKLQkweGJlNjU0OWE3LCAweGZlMDFiYmJjLCAweGVmNDYwYmM4LCAweGI3Y2ZhMDFlLCAweDc4NjhiYWM0LCAweDM1NTY3NjQ4LAotCTB4NjQxMzllMjAsIDB4YjIzM2NkMDMsIDB4MDNkZTE2Y2EsIDB4YjAzM2VjZjMsIDB4NGRlNzVjN2EsIDB4MWNlYjc2MmUsCi0JMHg2NGFmZjY3OCwgMHhhMTIzNDJiZSwgMHg3N2FlMjI2MywgMHgxZmQ3M2UzYywgMHg3ZDIzZDZiNSwgMHgxM2Y5NDE2YywKLQkweDM4MzczZjQzLCAweDVlZTc4NDhkLCAweGJlNDdhYjEzLCAweGZkMGQ1Y2E5LCAweGE2YTVjOGM1LCAweGZjMDFlYzliLAotCTB4OTcyNjk3NmUsIDB4YzQ2ZjlkNjAsIDB4YTg2YjY2NzUsIDB4OWU5MWVkOGMsIDB4NGZlMzJlMTIsIDB4ODNiZGJiZWQsCi0JMHhhN2YzMzdlZCwgMHg0YjdiZjljMiwgMHhhZTA3NDI0MywgMHgwY2VlOTQ1MywgMHhjNGFlZTg4YywgMHhmN2MwMGE2ZiwKLQkweDU4M2M4NTQ3LCAweDM4ZmRmOTYwLCAweDQwYTNmN2E0LCAweGExZjdjODA4LCAweDBiOTcyYjRlLCAweDcyZmU3MzhhLAotCTB4YTc3ZDFmMjgsIDB4NDU1ZWJiYzQsIDB4ZTI3MmUwZmEsIDB4ZDgxMmY3ZTgsIDB4ZjlmMjE4NmEsIDB4ZGVmNWZlZjcsCi0JMHhmY2ZlYTE5NywgMHgwY2Q1MjYzYiwgMHg0NjkxMGJmNSwgMHg0YThmM2Q2MCwgMHg4NWUzODdjYywgMHhmNzg3MzA5ZSwKLQkweGMwNjViYmMxLCAweGIyY2YwOGI2LCAweDI4YzIxM2UzLCAweDAyOTkwZWRmLCAweDM4ZTExN2RiLCAweGZiYmQxYjhmLAotCTB4ODk2NWJiZTAsIDB4NDIzYzVmZTEsIDB4YTA1ZTE5ZjUsIDB4OTE5NGY2NDQsIDB4ODhlODYxZDMsIDB4MTA5ZjdmOGQsCi0JMHhiOTVmYjdmZSwgMHgxYmRkM2ViMSwgMHhhYzdiZjY4MiwgMHgwN2M4MTM4MSwgMHgwOTM1NjY5OSwgMHg5N2JmNjVmYiwKLQkweGJiYTcxZjE5LCAweDNiZjgwNWM4LCAweDgyNGFmMzhkLCAweDM4NDk1NDI3LCAweGZhODM5NzRlLCAweDU4Y2FmZTAxLAotCTB4Njk5Y2ZkMDQsIDB4ODBmOWE3NGQsIDB4MzhlMWY0ZGMsIDB4Zjc5YTM2NjcsIDB4MzJkY2RjYTAsIDB4ZWQ0NGFlMzgsCi0JMHhiM2ZkMWI0ZiwgMHhmYTdjYTAzMiwgMHgyYWVmNTI4OSwgMHg5YmYwMWFhOCwgMHg3ZjQwNGRiYSwgMHg1ZjRiNGRjMSwKLQkweGVhMTdhMDY0LCAweGM0NmVlYTBjLCAweGEzNmUzYjBmLCAweDExZWI2ODc5LCAweDA2YTRiOGRjLCAweGFkYjc4M2ViLAotCTB4ZGFlNTAxYjgsIDB4NzI4OWZjNDgsIDB4YmJjOGM1OWEsIDB4NDFjOTE2N2UsIDB4OWY1MWRmZmEsIDB4ZmE4ZGQ5ZGYsCi0JMHg1N2FjNmJhMCwgMHgyYzBmNWFhNiwgMHg5Mzg3ZDAzZSwgMHg3MjMzZWRiNywgMHgxOThlNDZmYywgMHhiNTJmNGY4OSwKLQkweGE1MGJhNDdmLCAweDFjMGZlYjkyLCAweDk0ZjIwODI3LCAweGYyNDJmYzY5LCAweDBmMmNhNjM0LCAweDE4ZWJlNjU3LAotCTB4ZmM0ZTlhM2MsIDB4ZGIzZjVmMWYsIDB4ZjkwOGY4MTEsIDB4ZmZmZWU5YTcsIDB4OGFiOTYzNzksIDB4OWU0ODQ1ZTMsCi0JMHhlMjU0YjZiMSwgMHhkYmJiODAzMywgMHg2ZGY3ZGYwMiwgMHhlNTVmMTA3NywgMHhmNzBmNTBhZSwgMHg3NDFlYmFlMiwKLQkweDMzNWQzY2QxLCAweGNiMDNiMjdjLCAweDNjYThmMzNiLCAweDFjNmRjODU1LCAweGUyYzZmNTE2LCAweGNhZjQ4YzI5LAotCTB4NThiNTk5NjIsIDB4ZDE3ZGU4Y2EsIDB4ZjY3ZjY4NzYsIDB4Y2Y1YTZjODksIDB4Y2ViNjY2YzUsIDB4MzZjZTdjMDIsCi0JMHhkYjNmZmE3MCwgMHhmMDBhNzIwMSwgMHgyNWVlNjc1MywgMHg0ZGZlY2IzOSwgMHhiNTE4ZmI2MiwgMHhjYjc2YzE2YiwKLQkweGIyOGM5MDYwLCAweGI5NDM3OGExLCAweDM4NWJjM2E1LCAweDdmZmEwY2E2LCAweGU5MDc2NzZhLCAweDhhNzIwNjAxLAotCTB4OWEwNWQ4YzUsIDB4YTRmOTQzMWMsIDB4Y2RmZDllZmIsIDB4NDg2M2M3YWMsIDB4YzdjNGI3OTMsIDB4ZDlmNGE5MzAsCi0JMHgyOGYyYTIxMywgMHg3MmNmZTlkOSwgMHgzMGExNjA1NSwgMHg1Njc3ZjExZCwgMHgwNGU5ZGMwZSwgMHg4NTg0YjZmOSwKLQkweGIwMzYzZTQ4LCAweGUzNmE3YTZlLCAweDcyZTViYzgxLCAweDJlZTVjMmQ3LCAweDQxMmUxMzNlLCAweDNhYzZkZWZlLAotCTB4YTIzNjZlNDksIDB4ZWU0ZTFhNDQsIDB4M2JiOTAwYWUsIDB4Y2JiOTY0NzEsIDB4ZTIyOTczNTgsIDB4ZGQ4Yjc4MzUsCi0JMHgyMjFlNzg4YiwgMHhkNzdjODU3ZiwgMHhjNGRkMzFkNiwgMHgxNWQ0ZjBlNSwgMHg0NDk1OTk2MSwgMHhlODlhOTBmMSwKLQkweDExNWE5NjliLCAweDU3YzFhYmQ1LCAweDEyNzUxNjJkLCAweDFmMmNmZDk2LCAweGRhNjNhZGU1LCAweDdkNDFhN2JmLAotCTB4OTQzZTYxNTAsIDB4ZTYxZWI2OWIsIDB4YmJmNzgwZWIsIDB4ZjNmNWZkODQsIDB4ZjFmYTk1MzQsIDB4MTg1ZDM4OTgsCi0JMHg4NTJiM2YxNSwgMHg5ZWFhY2FmYSwgMHg0OWYyMDM2ZSwgMHhiY2EyNzMyYSwgMHhmZWYwZjQ3NywgMHhiYmUwMzk3NywKLQkweGNiOGVmYzMyLCAweDJkZWZjMWNkLCAweGU2MjEyNWFjLCAweDU2YTNhYWZiLCAweDQ3MGJhM2EyLCAweGU5MzM2MTFjLAotCTB4MGJhZTQwYzMsIDB4YjNmYjRiZmEsIDB4ZmVhNGVjOTksIDB4ZjM5MjBlYTMsIDB4YWYzNjQ2ZmQsIDB4ZDFiYmRhMTMsCi0JMHhiY2Y1YTIxZSwgMHhhZWZiZmE4NywgMHgyMTllOGYyYiwgMHgyMThhMzU1NiwgMHg4ZGQ3NGFlZCwgMHhlY2Q2NTY0MiwKLQkweDllYmNjNjgzLCAweDFlZGY0ODliLCAweGM3YzhhYjMwLCAweDc3YmQ1YzE3LCAweDYzYzYxOTYyLCAweGVkYmYyNzI4LAotCTB4ZjA1ZGE5NTIsIDB4OWZkMmY0ZTAsIDB4ZGZhMGZiYzIsIDB4MGRkOGU1ZWUsIDB4OThiZDIyOTQsIDB4NjRkZDFmZTUsCi0JMHgyNTliNzU4MSwgMHgwNWRjODhhZiwgMHhkYjY2MzY3MCwgMHg2Nzg3Mjg5ZCwgMHg5ZmQ3ZmVlNCwgMHhiYmYyODY2ZSwKLQkweDhjY2M4ZDA3LCAweGZhNmZiZWViLCAweGIyM2Y5NjNjLCAweDFiMDg2ODljLCAweGQwYzZmNzRmLCAweGZhZmRkMmViLAotCTB4YmVhNzYzNzIsIDB4MmZhYzNjMWMsIDB4Yjg3MmUxZGYsIDB4ZGUyNzhlY2YsIDB4ZjQwZTdlZjQsIDB4YmYzNzM2NjQsCi0JMHg5YWYwMDFkMywgMHhkYzkzMzI5ZiwgMHhmODE1ZGViYywgMHgyNmU3YTQ2NywgMHhlMjI0ZTQ0MywgMHhmZWZiOWNkMSwKLQkweDczYWUwMGM0LCAweDNlMTIwN2Q3LCAweDNkMjY0MGNkLCAweGM4YmYxYzI1LCAweDBiYWMxNzU3LCAweGQ4YzM5ZDcyLAotCTB4ODU3YjUxZWIsIDB4NDc4NDBjNTksIDB4NTEzZDA2YjAsIDB4MjBlNDEwZjksIDB4ZGVmOTVmMDEsIDB4YmZlNjFhN2QsCi0JMHg3MzgyNGU3OCwgMHhkNWYxYmQzNSwgMHhiZGEyNTQ1NCwgMHhlMGIyMzA0MiwgMHg0NWRmNmJiNiwgMHgzNWRhMWViYiwKLQkweDBkOTg5YzkwLCAweGZhYWUwMGVkLCAweDJmNmU1YzZkLCAweGM4ODkzZDYzLCAweGQ3NjA0ZDBmLCAweDdmMDk2MDU4LAotCTB4YjFmNGUyZTcsIDB4ZDk1MjI1YjQsIDB4NGY2Y2ZmMGQsIDB4NzA4YjFlYWUsIDB4N2UyOTlmMmEsIDB4ZDhiNWZmNWMsCi0JMHhmNjFkOGM2ZiwgMHgxZGZiOGI5MCwgMHhkYjViZjc0YiwgMHhhMWY4NjJmYSwgMHgyYmE1ZDNiMSwgMHhiNDY3MGYwNywKLQkweDVkZTJjNWY1LCAweDI1NTMzZmYwLCAweGI2ZGVkNjI1LCAweGI5MGYwMjFiLCAweDdiMGY5MTUyLCAweGZjNjBkMzRkLAotCTB4ODhmYjNmYWIsIDB4ZTU5MmY3ZjQsIDB4MGE5ZDkwY2YsIDB4ZWRjMDU4ZjMsIDB4NzI4YWFiMzYsIDB4NGY1ZGM5NzUsCi0JMHgyZmNkN2JkMywgMHgyNzZkOWIzOCwgMHhlZDk5ZTBiZiwgMHg5OTc2NWU2NiwgMHgxNzc2N2NhOCwgMHg3NDk2NWJmNywKLQkweGE3OWM2MTRhLCAweGNhNjJlNzM0LCAweGJiYTc5NDM0LCAweDFiMzM0ZThjLCAweDNjNzhkNzhhLCAweDNmZjNiZGJlLAotCTB4ZjU0YzE5MTMsIDB4ZmEzYTQyNmQsIDB4MWJiNzEyMTMsIDB4NjQ4OWNkOWMsIDB4ODljZGFhOWYsIDB4YjcwNTFmNjgsCi0JMHhjYTJlZjM1ZCwgMHg2NGJiMjVhOSwgMHg3NjM1ZWEyZiwgMHhjZDFkZTFjYywgMHhlYzczM2NiMCwgMHhmM2Y2M2IyMiwKLQkweDgwMzRjYTYxLCAweDRjZjc3ZGEzLCAweDY1ZWY0Y2E3LCAweDQ4ZjkxODdmLCAweDBkNWNmNWYxLCAweDkzZGQ5NWVmLAotCTB4NjdiN2U0NTUsIDB4OTdmODcxNzcsIDB4MjA4ZjJjYjgsIDB4OTlmZDVkMWQsIDB4NjJiMjc2NGMsIDB4Y2ZiNDAxNjAsCi0JMHhiMWJlNGRkYSwgMHhjZWVhYjdjOCwgMHg3ZDcwYjM3ZCwgMHg2OTlkOWVkZSwgMHg5NGJmZjZhMCwgMHhlMmYxMTM5OCwKLQkweGVmODY5ZTVhLCAweDFmOGE0ODk3LCAweDViN2ViNGY5LCAweDdlYWM0ZDQzLCAweDEzMjVkNWJlLCAweDVkY2I0ZGJmLAotCTB4Mjc2YmQ2OTEsIDB4ZjUwOWJhYmUsIDB4ZTAyZWUzNTUsIDB4Y2U3ZjFjMjMsIDB4ZDliYTdmZWIsIDB4NjkyYmU1MWQsCi0JMHhhNjFiYjZjZSwgMHgxYThmZmY2MiwgMHg4Mzc3YzhiZCwgMHgzZmU3Nzc3YSwgMHg1ZmUxN2QxMSwgMHg2ZGNhMjU3NywKLQkweGNhNmZhZjhlLCAweGM2OWI2NjY3LCAweDI4NDVjZDI3LCAweDZlYWM5NzNmLCAweDYzMGU3MjJlLCAweGM5ZjIwZmNmLAotCTB4NmY5N2NlNGUsIDB4YjdlZTI0YjksIDB4ZWNlYjI1NjYsIDB4MDBmYzkxZGQsIDB4ODdjMWIxN2IsIDB4OTk3OGI3ZjgsCi0JMHhkMzNjMWY2ZiwgMHg3ZjQzMGRjMSwgMHhhMTU5MjEyZiwgMHgxMzY0ODRmYSwgMHhlNGY5NDllMSwgMHhhOTJmZmQ4ZSwKLQkweDNlMDcxNzY4LCAweDY1Y2NmYTQ0LCAweDI3ZDQ1MmJlLCAweDk1NTljNDZhLCAweGVjMmI3NDg0LCAweGRiOTNiNjA1LAotCTB4OTA3ZjYwODEsIDB4OTUyNWI1YmQsIDB4YzYzZWIyM2QsIDB4ZmU4OTMzZmYsIDB4OGE3YzRlNDAsIDB4YjVmZmEyNzIsCi0JMHg3ZTIyNGY0ZiwgMHg5ZmRlNzI5YiwgMHg3ODNhZmE4OCwgMHgwYTkzMjNmMSwgMHg0OTc3YjVmMywgMHg1ZWVkYmYyNCwKLQkweDA5YmE0MzNmLCAweDBiNjZjZDc2LCAweDM3NzJhMjRiLCAweDIxN2FlNWU4LCAweDI2Mzc1ZTdlLCAweDc1MWNiOTFiLAotCTB4YWI5ZmE4NDcsIDB4YjczZjM4NTIsIDB4ZDNkMTE4YmIsIDB4NjQwOWU1OGUsIDB4ODc3MGVlOTcsIDB4NTdmNDA4YWQsCi0JMHgyOWY2NWJlNSwgMHhlNzU4NzU2OCwgMHg2NzVmMGIwNiwgMHhmYjVmZGVjYiwgMHhiMGYzYTQ2NCwgMHg2NThkMWNlNCwKLQkweDQwYzdmMzk1LCAweDBjYjBmY2ZkLCAweGI3YmJiY2UzLCAweDgzZTU0NDIwLCAweGQ0MzJiY2QzLCAweGJjM2VmN2Q5LAotCTB4NzRmMTFmMmUsIDB4ZjZjNWU4ZDgsIDB4MjI2ZjZmNzYsIDB4YmRkZGVmY2UsIDB4N2U3MTEyNjcsIDB4OWE2NTdiZjUsCi0JMHg4M2Y4N2Q3NywgMHg1MTI1NDViNCwgMHgyOTE3ZjEzOSwgMHg3NjhjOTA1MCwgMHhjN2IyNWI4MiwgMHhmNzc3OGJjYSwKLQkweGQwYjY5ODdlLCAweGQyNTNmZGNlLCAweGUzYzNlNTk3LCAweGFkMzVkZDI1LCAweGZhYmZiZjE4LCAweGVmMmViZTJhLAotCTB4NDYxY2QyZmQsIDB4MTU5ZWY4MzksIDB4ZmM4YzU5ZjQsIDB4ZjVjMWNmN2QsIDB4Y2Q2NGQ0ZGIsIDB4NDFjY2U4Y2YsCi0JMHg1NjU4MzNmZCwgMHhmYzcwMWFjNiwgMHhmY2Y5MzkxZiwgMHgxY2NlYTZkZCwgMHg5NmZmY2JlNCwgMHhiNmRjZmRmNCwKLQkweDkwNjE2NjRlLCAweDI0ZWIwZDRiLCAweGZmOTkwNjE2LCAweGNjOWUyZmRlLCAweGVlZmZmOTQxLCAweDZhNzMyN2JlLAotCTB4ZmY4YmUwNjMsIDB4ZDBjZTdiNGUsIDB4OWFmMTEzYzYsIDB4ZDc4ZGE2NWEsIDB4ZDVlMzg1OWQsIDB4YTI2ZmNkN2EsCi0JMHg2NmViNjE5YywgMHgyNmY5MDZmYSwgMHhkYjYzM2Y5ZiwgMHg4YTNlNmRiMywgMHhkNzAwMGNhNywgMHhkZjZhMWQyMiwKLQkweGY4MjdkNDBkLCAweGNjMmViODJjLCAweDRlOTBjNjEyLCAweDZkZGM5NzZkLCAweGJlN2NmZWM2LCAweGRmZGEzNzQyLAotCTB4ZmQ3MWY3ZGEsIDB4OTI3YTBhYjcsIDB4YTdlNDRiMGUsIDB4MjQyMjRhZGEsIDB4ZmNiNmJmOWYsIDB4MTNkN2U4ZjcsCi0JMHg0Yzk4ZDlkNiwgMHg3MjcyM2ZmMiwgMHgzMGZhMjMxNCwgMHg0ZDRjZGUyMSwgMHg1NWY1MDU3NiwgMHg1ZjRlMWFkYSwKLQkweGM4MWIxZjkxLCAweDI0Mjc3MDFmLCAweDNmNjA2NDRlLCAweDc2M2QzMjk5LCAweDE3NTc2Zjk0LCAweDkyMThiNDI1LAotCTB4MTg0ZTdkZjAsIDB4MTY2NzY3ZGIsIDB4MmFhMTc3ZDMsIDB4MzRhMWZmNGUsIDB4MGM5ZTcxNDYsIDB4ZmYyMTJjZDYsCi0JMHg5N2I3MjczMiwgMHhlNzMwYTZiMywgMHg0ZmVlMjg3YSwgMHg4NzhjNzZlNiwgMHgwNWM5Yjc3OSwgMHhjNjEyZmViNCwKLQkweDY4YmMzNDI1LCAweDA4ZTkwMWZhLCAweDkyN2JlNWU1LCAweGVhNDhlODg1LCAweDk0N2VjODkyLCAweGIxZjM5ZDBkLAotCTB4ZWFlODkxZGYsIDB4OGFkNzVjNmUsIDB4OTYwZDVkMjgsIDB4YjU3NDQxZmYsIDB4MDg2ZjFiNDksIDB4YTI1NDA1NWQsCi0JMHg3ODY1OGYyYiwgMHhmNjI1NTJiYSwgMHg5MGIzZGE5NSwgMHg3NGFmZmQxZiwgMHg0MjRkYWY4MSwgMHg2YzdlNDRmZSwKLQkweDQwMTZmMWUxLCAweDQ2YjdjZTE5LCAweGIxNjM1N2Y0LCAweDQ3YThjYjc3LCAweDYzZjdjNmJjLCAweGMxM2I4ZmUzLAotCTB4MjVmZjQ1ZWUsIDB4Nzg3Y2VkMDMsIDB4NDBiMzVhOGUsIDB4M2Q2Mzc1YTUsIDB4ZGFlZmU4YmQsIDB4NWY0ODViMjYsCi0JMHhjOWU4NmJkZSwgMHg3ZDI2M2I0MywgMHhhNDAxZjM1YywgMHgyNWY5ZjQ4ZiwgMHg2ZmM4NmI2NSwgMHg1ZWExNzJjYiwKLQkweDcxNGI1ZDQwLCAweGZkZDNlNTg3LCAweDdlODA4ZWRjLCAweDliNjY4ZTkxLCAweGJhNmIzZmM4LCAweGRiOWY5YTZiLAotCTB4MmZjNGQ1MTEsIDB4MTU1NjBkYzEsIDB4YWVmNGUwZjUsIDB4Zjc2NDU1YmMsIDB4MzM1ZTYwYWYsIDB4ZjZjNzcxZDEsCi0JMHg5YzJmMThjNSwgMHhhY2EyZjc2YiwgMHgyMTNjNjJiMywgMHhlN2FmZTcwNSwgMHg5M2E5NTZiYiwgMHhiNWQwZjFlYywKLQkweDVkNzI4YmNjLCAweGJiYjY0NzhiLCAweDE0ZmY3NzdhLCAweDA5NDM3ZmY1LCAweGYxODNmN2Y5LCAweDdhNDY0MmM5LAotCTB4Y2JlNWRkYTMsIDB4MWViYzA2NDgsIDB4YTc4ZjFiZmEsIDB4MTk0Mjk3YjUsIDB4ZjU4OTRmOWUsIDB4Y2JlZDlmNmMsCi0JMHg3NmI5NDE3MCwgMHhkZWYwOTU4MywgMHgwN2ViYzFkZSwgMHg0OWEwODAxYywgMHhmZWE0YTcxNCwgMHhlYjg1OTI1OCwKLQkweDgxZjJhMWExLCAweDUzNjk5YmUyLCAweDBkYjdmNjk4LCAweGI5NWE5OWNiLCAweDQxZDkyYjZkLCAweGU3YjdmZjFhLAotCTB4MjUxYzc4NzEsIDB4YzhiNDNjZmUsIDB4ZjFkY2RmMmYsIDB4NDdmMDAyN2MsIDB4YTY4ZGM2MWEsIDB4YjQyMTE3ZDIsCi0JMHhjOTJlMjlmNywgMHg3Y2I2MTRjYiwgMHg2NDgwMDBkMCwgMHhlYjI3ZjE2MiwgMHg1YjExNWM2NywgMHhkZmEzZWRlNiwKLQkweDdhYzdhZjViLCAweGY1ODNiZmQwLCAweDY1ZTgzNjA4LCAweDAyYjNlY2FkLCAweGQxMWQ2YjFjLCAweDYwZWMwNTdhLAotCTB4N2M0OTYxY2IsIDB4MzM3NWU0ZmYsIDB4OTJmZTYxMGIsIDB4OTNmNDNmMTgsIDB4YWZjNjFmNTYsIDB4NWUzNzRjYWMsCi0JMHg1YzRhN2MyYywgMHhkZmU4NDZmZiwgMHg3N2VkNmFhZSwgMHgwNjg0Y2Y1NiwgMHhlNTY5OTYwZiwgMHhiMmY5ZDc4ZiwKLQkweGJlYTMzZmEwLCAweGY4YTk0MjNmLCAweDc4ZGEwYjFlLCAweDYzMzgzZGNmLCAweGE4YWM4NmZkLCAweGMyZjYwMDdkLAotCTB4MzRjZjI4MjcsIDB4ZWJlZDYxM2IsIDB4NjA5MzZkMzUsIDB4NDNmMzliMmMsIDB4NGQ1ZmVhMTMsIDB4MTJkZDA3ZGYsCi0JMHhmY2YxMjFkOSwgMHhiZTkxNGI2YSwgMHgwODVkN2Q5OSwgMHhjZWE1NzVmNiwgMHg3MGE1YjZiZSwgMHhiMjE2N2FmYiwKLQkweDI0MjVmODI0LCAweGZjMmI4M2JmLCAweGIwNWJlZDBjLCAweGJlYjA5MjRiLCAweGNmZjdiNWZmLCAweGZkZjUwZDNlLAotCTB4NzI3MmZlNzMsIDB4NmVlZDhhOTQsIDB4NTU3ZThmOWYsIDB4ZjI0MmEyZjAsIDB4MGU1ZmI4MzcsIDB4OTYzN2MwNGIsCi0JMHg4MzU3NmUyZSwgMHhiNDc4YTczZSwgMHgzOWI3M2Y0NiwgMHg0MmI4ZmQwNSwgMHhlZDZjZTMwYywgMHhhNDBhYTRjNywKLQkweDczYTNmMDc3LCAweGY5NmIwM2JlLCAweDY2NWYxNGEzLCAweDlmZDQ0NTRhLCAweDY1Zjc5ZjhjLCAweDE4OWUzYzI5LAotCTB4NWVkYWFlMmMsIDB4OTVlZmZkODQsIDB4ZWIwYmRhMTgsIDB4MmRhNzRmOGIsIDB4Y2RlYTdmMjQsIDB4ZGYzMTQ1YjQsCi0JMHg5MDdlMWMzNSwgMHhkZmIwZDlmMCwgMHgyZjFlMmMzOCwgMHg4ZjA5OTE0YiwgMHhmMDllNDc0ZCwgMHgyZjc4ZGNhMSwKLQkweGE4NGM5MTJjLCAweDY4YWRjMjU3LCAweDFiZDdkNmQ3LCAweGU1NjQyMmQwLCAweDUzMzcwNWUxLCAweDg5OWU3ZDdjLAotCTB4NjVmOTg2OGQsIDB4ZGMxNzdkMDgsIDB4MmE2ODYzN2YsIDB4OTNmZTFiY2UsIDB4ZmYwZWQ1ZTAsIDB4M2IxMzkyNjIsCi0JMHhiNGVjNTllNiwgMHg3YjVjNTE0ZiwgMHg5OWMxZTEzYiwgMHhhYzNjNDNlMCwgMHhjMGNhYWUyZiwgMHhjZjY2OWE3MSwKLQkweDFlNWM1MjcyLCAweDZmYWMzOWVjLCAweDE0N2JlYmJhLCAweDVhZTBkN2E3LCAweDhkNThkODdmLCAweGQ4MjU0ZWY2LAotCTB4YjgwNmJmNzUsIDB4YWJhZjkzYjMsIDB4OGY1ZjAyZjYsIDB4ZmU5NDBmOTIsIDB4NDY1YmNhMTAsIDB4YmEyZmUzOTAsCi0JMHg0OGI0NWQzOSwgMHhjYmI3ZDBmZSwgMHg2MmM3OGUyOSwgMHg4N2I5NzJlMywgMHg3ZDc4ZmRiOSwgMHg2OWRhODk4YSwKLQkweDUxNGZhZmVmLCAweDg0NTdhZjA4LCAweGI5MjNhNjdhLCAweDZkN2E1NzFjLCAweDk5MDc1NzY4LCAweGFiZjQwM2VmLAotCTB4ZWVhZWRmOTksIDB4ZjJlMjc1YTMsIDB4YTU1MmJkY2IsIDB4ZGRjNTkzNzgsIDB4YWMyNGVmN2IsIDB4N2YyMTQyYmYsCi0JMHgwZmJkMjk4NiwgMHhhZGZkYjhlMCwgMHgyNjdhZWY2ZSwgMHg3N2NiMDBmOCwgMHhlYTFjNTA5NSwgMHgxZTYwNGE2OCwKLQkweGIwYTU2ZmFlLCAweDVjOGZmYjU3LCAweDEyNWI1YTUzLCAweGY3NWFiZmI1LCAweDAxYWJjMjM5LCAweGY1MGVhZDBmLAotCTB4OTM5NDZhZmUsIDB4MjcyNDI4OWYsIDB4MzNkMjI1OTksIDB4Zjg2OWZhMWQsIDB4ZmJmNTMyNmIsIDB4MGVhMDViMDcsCi0JMHg4NmI1NjlmYiwgMHg0MjBlOTE1YiwgMHg3M2I1MzIxZCwgMHg2Mzc0YjFjZiwgMHhlMjNlZWYzZiwgMHhkMzNiNDBlOCwKLQkweDQ4NjM2ZWU4LCAweDUwYmVlMGM3LCAweGY2ZTJjNDljLCAweGQzY2ExNTMzLCAweDA5MTQwYjQzLCAweDVkOWM0NWY1LAotCTB4NDllMzFkMzMsIDB4MjliOGI3ZTQsIDB4ZjgyNTU4ZGUsIDB4YzE1MDM0NjMsIDB4NDJiMTBiNTksIDB4NTEyOWU3Y2IsCi0JMHg0ZmY5ZTczYiwgMHg1MmY4MmFlNywgMHgxNjBjN2ZiMywgMHgzMTllMWYxZSwgMHhmOGUxODEyZiwgMHg0OWM4OWVlYywKLQkweGRkOWJjNjAzLCAweGUxZWQwYzNkLCAweGM2ODk0ZWM2LCAweGRjN2UyYzY5LCAweGQyY2JmZTg0LCAweDQxZGZjZTRlLAotCTB4ZmUwMDZmZTEsIDB4NThhZWQwNzIsIDB4NzYxMzYyOTEsIDB4NzdhNzBiNjYsIDB4MTQ3MjczZDYsIDB4YmUzMWY5ZTIsCi0JMHgzYjQxOGM5ZSwgMHhiMmRmYWM0NywgMHhmZDY5ZGE4YSwgMHhiYzljNDQ5OSwgMHg0MDkzYzQ1MSwgMHhkYWZkNTIxMywKLQkweDU4Y2VjZDE0LCAweGMyNmQ5ZTJkLCAweDZlZTNlMGNlLCAweDMyN2M3YTkxLCAweGQyNTRiM2UyLCAweGU3YjU3M2M1LAotCTB4OTI3NzIxNmUsIDB4MjE2NjQ0NGUsIDB4YmU4MDQ2ZmYsIDB4NWRiNGFlMzAsIDB4NmZmYjdkOWEsIDB4MmJkYjdlNjEsCi0JMHgxNGQxNzljNiwgMHhjOTM5MDBmMywgMHg0ODFlZjg2NSwgMHg3ZTVlZjAxMSwgMHg0ODU5ODNmOCwgMHgxMTlhYWMzNywKLQkweDllMWQzNmJmLCAweGZkOGEzNzI2LCAweGQyMTdiNDA0LCAweDU4MWRjZDZkLCAweDMxNmI3ZTlmLCAweGVmOGM2N2U5LAotCTB4NWVjMGJlZTMsIDB4M2IwY2Q3ODEsIDB4NTY3OWViOGYsIDB4OWY3MGYyODcsIDB4ZmY4NGU5MmQsIDB4ZjhlMmRmZjYsCi0JMHgxZjY4MTIxMywgMHhjNmQ2MWQyMywgMHg3NWNmNGM5MSwgMHhiMGYyZDcxOCwgMHgzZjUxYTdkMiwgMHgzMmQ0NmE3YiwKLQkweDRmZGI0Nzg0LCAweGQ5YThmZGMyLCAweGE5YzcyNDI1LCAweDdjOTVlYzljLCAweGFiZjllMDdiLCAweDAxZTExNzE0LAotCTB4ODQ2YWJjZmMsIDB4ZWQ4N2RmMTcsIDB4ZjRhZGZkZDEsIDB4MzhhNWNkZTksIDB4ZTExZmVlMmUsIDB4NWJhMzNmYjMsCi0JMHhlYjM1MzhhMSwgMHhmYzhmYmRkZCwgMHhmMTEzYjM3ZSwgMHhiOWY4NzM1NSwgMHhkNmZmNTE1NywgMHhlZDI3NTg1OCwKLQkweDJkZDljNWY3LCAweGYxYmM0ZTNmLCAweDAzYTM5NDQ5LCAweGJlZWVjZWU3LCAweGNlZmFlMTFiLCAweGQ2ODA2ZjIxLAotCTB4NWM4ZjZmNDcsIDB4Y2ZiNzE1N2QsIDB4NTM2N2RiZGYsIDB4MjNkYzhlZDEsIDB4OGZkODM2ZTQsIDB4NWZhMTI3YzQsCi0JMHhkZTMyN2Y3MiwgMHg0NTM5N2M4ZSwgMHg5NjBjOWZlZiwgMHgyNDc2ZWVmZiwgMHhmMDA0MmY4NywgMHhlZjkxOGJlZCwKLQkweDBkZmZlMTQxLCAweDQ0NGY5ZmQ0LCAweDIwZmFmNWZkLCAweDJiZmZhMDNjLCAweGVkNTA3NmEzLCAweDJiZWQxYjVlLAotCTB4NzExN2ZhMGYsIDB4OGZmM2M4ZjYsIDB4MGY0ODQyZDgsIDB4MTRhZDNiZTcsIDB4ZmVjNDU0NzcsIDB4ZTQ0NzM5Y2MsCi0JMHg4YjUyNDQ0ZSwgMHgyODRkZTRlYiwgMHhiZGI3ODM2ZiwgMHhmMDAzMmJmNywgMHhmN2MxZDI5ZiwgMHhlYzQ5MTQzYiwKLQkweDMzMjBiYzg3LCAweDczZTM3ZmJlLCAweDI5NGZlZWM2LCAweDVmMWU1OWFlLCAweDNlNDdjYTA5LCAweDZlMjI2NWVmLAotCTB4NDhiOTJjYjQsIDB4N2MzMmZiZTUsIDB4NjI1OTZhNWYsIDB4NTNkYTExNzcsIDB4YjQzZDA5NGYsIDB4YWJlZjgxMmMsCi0JMHhkZDRjYjgwYywgMHhhYzdiYWViOCwgMHhiNDI5ZjM4MSwgMHg2N2JmYzJmZiwgMHhiMWFiMzFiZiwgMHg2MTFkMmZmYiwKLQkweDI5OWRkNzZlLCAweDYwOWI3NDM2LCAweDFmNjgxZDllLCAweGUwNmRiYWUwLCAweGZiODMzMGZiLCAweDFkY2RjN2Q1LAotCTB4NTE5MzgyNjYsIDB4YzQ1NWEwNzksIDB4OTVmZGI1ZWIsIDB4NTcxZTNjZTMsIDB4Y2U1MWY2MjcsIDB4MTBmYzU5Y2MsCi0JMHg0OGI1YTk2ZSwgMHg5ZmU4ZDVjZCwgMHg4ZDNmNTg1ZCwgMHhkZTc3ZDdlMiwgMHg3NTllOWIzZiwgMHhmNzcxZjRlYiwKLQkweGRlOTlhY2M1LCAweDVhOTRmYjZiLCAweDc5OTZiYmJjLCAweDhlNWVkYzRkLCAweDYwMGQxMWM2LCAweDk0ZWJhOGJmLAotCTB4Nzk5N2Q0MmEsIDB4ZTUxYWI5Y2MsIDB4ZDU4MjFhYmYsIDB4MTZjZjBjOWEsIDB4MmVkMWEyNzgsIDB4NzNiNDI0MTksCi0JMHgwMjc3NTY5NCwgMHgxNmRhZWZhZSwgMHg1MGE5ZTkwMywgMHhlZDg3YzE4YiwgMHhiOGU3M2MzNCwgMHhkMmE5MWM3OSwKLQkweGIwMWFlM2NkLCAweDQ3MWM2MTU0LCAweDQ1MThiNjdiLCAweGI3ZjQ1ZmRjLCAweGYxYmExOThhLCAweDczZjg5MDY5LAotCTB4MWVhOTUzYWQsIDB4ZmQ2YjVmNGUsIDB4MmQ5YjE4YjUsIDB4NjQ4YmE3MTgsIDB4N2RhZTI4MWIsIDB4NDc5YmU0YzEsCi0JMHgyMmU0ZTM3MSwgMHhiNjdjMDIxNiwgMHg1NWQ3OWEzOCwgMHg5ZGUyN2FmMywgMHg5Zjg4ZDYwYiwgMHhiODU0YWZlYSwKLQkweDY0ZDRjOTIxLCAweDM3NmU5Zjk0LCAweGUzYzY1MzhmLCAweGJlOWI1MTZkLCAweGQyMWZiZjFjLCAweGViOTdkNjEwLAotCTB4NDY0YzYwNTgsIDB4ODgzZmRmMDEsIDB4NzM3NmVmN2QsIDB4N2Q2MTc1ZjksIDB4ZDdiN2MwOWUsIDB4OWI1NjcyODQsCi0JMHg4ZTJjYWFmZiwgMHg3ZjM2NDMzNywgMHhjZDU3NjdlNiwgMHg3N2M4M2E0MywgMHgyMDNmMjg5OSwgMHhhYmUzYzVkZiwKLQkweDNmODIxMzMwLCAweDQ0Yjc0YWZmLCAweDZmMDcxMWY0LCAweDQ4NmQxYTBiLCAweGRmN2NhZDVmLCAweDFmYzJhYmVlLAotCTB4ZWU1NWY3MGYsIDB4N2MxZmExMzQsIDB4YWI2N2RjMWUsIDB4ZGY2ODlhNzMsIDB4MjRlMzUyZjQsIDB4NzJmNWJhYjcsCi0JMHhmN2ZjYjA2OCwgMHg5ZmI5NjdmNywgMHgzYzhiMmFkNCwgMHhhMWM5MjcwZSwgMHhjYjlmMjc1YSwgMHg0OGZiYzkxOSwKLQkweDgzYjdiZTM3LCAweDY4ZjM4MDlkLCAweDZlZDBjYjk1LCAweDlkYTM3ZTk5LCAweGRjNzRkMWU2LCAweGM2ZTA3MTRhLAotCTB4YTgzOWJkMTUsIDB4N2FhYTliYzcsIDB4MjAzZjMwOGIsIDB4YWQwOGJmMWUsIDB4NjgyZmM5YTIsIDB4ZmYwNmViNTcsCi0JMHhkODg0ZWQwMywgMHhjNTQ3ZTQ3NiwgMHg3ZWZhMDdlZiwgMHgzZjQ1NGVlNCwgMHhlNzgxY2NlNywgMHhiMDFkNWY1MCwKLQkweDdmODJiZTkyLCAweDM4YzY2ZDNkLCAweGIyM2M5MWNiLCAweDAyM2FjNmEzLCAweDMwNWRiMDJiLCAweGEzZjc3YmExLAotCTB4NzBiNzY4NzksIDB4Y2JiMWE5YmIsIDB4NjE3NjgxZGMsIDB4M2VjYzRiNmQsIDB4MDZkZmZlMWIsIDB4NWIxYmJlZmQsCi0JMHg3N2YxNGM5NywgMHg1ZjdmYWVkNiwgMHhiYmVlMzNiZiwgMHg2ZDcwZmIyMSwgMHg0YzViY2ViNCwgMHhlZmM4YjE4MSwKLQkweDlmNjg3N2EwLCAweDgxODM1Y2ZjLCAweDY0ZWJiN2Y2LCAweGI3OTQ2MmVmLCAweDdiN2FhY2U3LCAweGFmODM5Y2ZjLAotCTB4OWFkZGNmZDcsIDB4YzIyZGUxM2QsIDB4MGYyYzFlNzUsIDB4MTE2ZjY3NTksIDB4ODE5ZDczYWUsIDB4NjlmYjYyMDUsCi0JMHhmNTg2NzVjNCwgMHhmOWQ2MjY1ZCwgMHg4YjkzMTNkYywgMHgzZmRmOWQ3MCwgMHhkNzA4YjkzMCwgMHhjZGIxOGI3OSwKLQkweGE4ZjM3Yzg3LCAweDFiOTBmMDMzLCAweGU5OWJlZGZhLCAweGY3MGE3YjI3LCAweDJlOGY5MTNkLCAweGM0MGYxZTk1LAotCTB4ZmY4MWUzZDEsIDB4ZWZhNDdhM2QsIDB4Yzc4N2QyNDYsIDB4ZWJkMGUxMDYsIDB4Y2Q0OWI3NDMsIDB4NmI1MDc5NDIsCi0JMHg1ZWExN2YzMSwgMHhlMzYxYmZjNCwgMHhjNTMzMTY3OCwgMHhmYTdmOGUzYiwgMHg1MDQ3YzZlMSwgMHg2NGM5NzQwZSwKLQkweDFkZmQ2ODhmLCAweDY4MDUwMjU3LCAweGQ1N2YxZDBmLCAweDIzNDkwZGUzLCAweGVkMThiZmY3LCAweDA3ZGEwYWFkLAotCTB4NDU1YzYxMGMsIDB4N2IzNDAzZjMsIDB4OWYxZTVlMzIsIDB4Yzc3OWYzMTIsIDB4N2I0MmFiZWQsIDB4OGRjNmViZmMsCi0JMHg0YjNiYzVlYiwgMHhlNzZlNDNmOCwgMHgzY2JjOTVlZSwgMHg3MTQ5ZGM2ZSwgMHgwYjYzYTZlNCwgMHg3ZTI3MTg5YywKLQkweGM2ZTNjYzI3LCAweDUyOTQ0ZjRkLCAweGZjMjFiOGRjLCAweDJkZTYzNzRjLCAweDg5YzkyZWIxLCAweGRlYzM0N2ZlLAotCTB4ZGIxNzEzMzcsIDB4ZjgyZTdlYTMsIDB4NWYyMzZmYjUsIDB4M2Y3ZThiMzEsIDB4OTlmMDlkZTksIDB4YzEzYjNhYzQsCi0JMHg3MWVhMTU3ZCwgMHg0MjYyM2I5YiwgMHg3ZjAyNmZiYSwgMHg5YWQ0ZjMwZiwgMHhlYzQ5Yzg5NCwgMHgyOGNkYzliNywKLQkweGIwZmNhMzFmLCAweGYyZDNmZmRlLCAweDRkZjg3NmEyLCAweDc0Nzc3NzI0LCAweGQ3OTQ2MTQ5LCAweDVlNDBhNjY5LAotCTB4OTYzNWVhMTYsIDB4OGI2YjNjZTUsIDB4NmVjN2Q5ZjIsIDB4NzdmNzFiOWYsIDB4YmVkYmZiYTMsIDB4ZTRjNzcxZmYsCi0JMHg0ZjZlZjUxYiwgMHgzNWVkZmEyMiwgMHhlNTEzOWYzMiwgMHg5MDg3NzZkOSwgMHhiN2M5MGE2NywgMHhjMmJhNzc4ZiwKLQkweGI3ODhmZjNjLCAweGVkY2MzOGZmLCAweGVmMmQwNjg0LCAweDBhZGQ2MTQ4LCAweGI5ZTJkN2FjLCAweGJkNzBkN2JlLAotCTB4Yzc3N2RlNTEsIDB4YjJkOGZiYzksIDB4MTRiZDJmYjYsIDB4ZjZlM2QxZjcsIDB4MGRkYjYzYmYsIDB4ZWNjN2U3ZWUsCi0JMHg2MWZhZWI3ZiwgMHhiOTZhYTVjZCwgMHg1ZjViZmY3ZSwgMHgzMjdlZTIxZiwgMHhiMmYyYzNmMCwgMHhlYjZhZmQyOCwKLQkweDkzNmZkMWEwLCAweGViMDc0Mzg4LCAweGY0ODNkZjRmLCAweDM5MmMzYzFiLCAweGU2NWJiZWQxLCAweDBjYmJmNGU1LAotCTB4YzRmMzJkZmMsIDB4M2FjZWZjYTEsIDB4MjM4OTc5ZjUsIDB4YWE2OTdmZjEsIDB4Y2IwN2ZmOWUsIDB4ZWFmOGEwZmYsCi0JMHg5YzlhYTkxNSwgMHhjZGFmN2NlNCwgMHgwZmRiOGI1ZiwgMHhlMjRiYjNjZSwgMHhhZjM3MTk3YywgMHgzZTM1M2Y3OCwKLQkweDk5ZjlhZWRlLCAweDZmMGYyYTk3LCAweGUzODc4NDFjLCAweDBmZmNiMDYzLCAweGM2Yjc4Nzk2LCAweGZkYTQ2NWUxLAotCTB4MGYyY2FmOGMsIDB4MzVmNzk3ZmYsIDB4MzViNjNhMWUsIDB4YjQwZWZkMTEsIDB4NTk0ZmQxZTMsIDB4ZjNjOGNmYjcsCi0JMHhiMWZkMDAyMywgMHg2NGIzYzVmYiwgMHg5ZmVmOGZiYiwgMHg3ZWJkNWFjYSwgMHgyNTlkNWUxZiwgMHg1ZjM5ZTFmNiwKLQkweDRjODRmMzNmLCAweGY2MjhkNmViLCAweDM5OGYxYjg5LCAweGRlYjRkOGJjLCAweDY5ZjY4NGJlLCAweDZmNGZmN2UzLAotCTB4ZTE2NjA3NjMsIDB4YTNlZmM1NTIsIDB4MmU3ZTQzMmUsIDB4ZDRmZGYyZjgsIDB4YmNjMWQ0ZDYsIDB4NWJjYzNjODUsCi0JMHhjYmQyYWNhOCwgMHgxZmVjNjdmOSwgMHhkNjYyMDRhNiwgMHgxYzA0YWFiZCwgMHhkYmU4NjE4MiwgMHg3MjU4ODRhMiwKLQkweGE5YWRmYmNjLCAweDQ2N2VhZWRjLCAweDRjNzhmN2U0LCAweGE1ZTYxZDZjLCAweDdjZDg3MjZjLCAweDBjNzhjZmU4LAotCTB4NDdlOGZmM2MsIDB4MjhlZGZlMjksIDB4YzBhYTJkMTcsIDB4MzJlZjkxZWIsIDB4MjFlNWUwMDMsIDB4OTVjOTI3NjMsCi0JMHg4YmRkYTM1MCwgMHhkZjhiNTA3MiwgMHgyYzdmZmQ2OCwgMHg1OTJlYzFmNiwgMHhmYmQxYzdmZiwgMHg3YTY1ZmY4MSwKLQkweDUzY2ZjNzhmLCAweDc1NWY3OGRhLCAweGUwMWI2ZWRmLCAweDhjMTdjNzQ2LCAweGRjNDVmOGU4LCAweDRhMWJjYTVmLAotCTB4MzNmNTIzYmYsIDB4OWNiZjFkMTIsIDB4OTUyMTdmZWEsIDB4MjI2ZmEyZTQsIDB4YTI1YzJiZTUsIDB4NDc5NWIxOWMsCi0JMHg4ODljNjBjZSwgMHgxOGFiMzQxZCwgMHgwOTM4YzRkNywgMHgxOTBkYzdlOSwgMHg1YmQyNmYyMiwgMHg4MGYyOWIzOSwKLQkweGJmOTg5NWJkLCAweGYzZmUwNmY1LCAweGM4ZWQ5MWYyLCAweGUxZjVjMWJlLCAweDg4ZGY2NDc2LCAweGVjZjVmM2ViLAotCTB4ZmU5ZGJiYzgsIDB4N2Q2NzQ4YjMsIDB4NmY5NDdjZDMsIDB4ZjAwMWQ2YmUsIDB4MGJmODdmYTMsIDB4ZDNiNDc3OWUsCi0JMHhhNzczZTljYSwgMHgyZDkyZTljNCwgMHg3OGE0Yjk0ZiwgMHg3NDcxYTdjYiwgMHg5MWZmZTlmNSwgMHg4ZGE0YjUxYywKLQkweGJkZmU1NzY0LCAweDEyNWZlOGU1LCAweDcyM2E3ZTMxLCAweGE3OWUyMTNmLCAweDc4NDNkNTViLCAweGQ4OTMxYzhiLAotCTB4NzZiODk4OWUsIDB4ZTBjZmYzMTAsIDB4YWYwMTBjZmIsIDB4ZTEyM2ZlZjYsIDB4ZjM0YzJjMzcsIDB4ZmJjMWE2NjUsCi0JMHg1OGIzNWZmNywgMHgzZTk4MTI1OCwgMHgzNjJlNWNlNSwgMHhhZmI0ZWRmOSwgMHhmM2M5ZDRkMCwgMHgzMDU2OWE1ZiwKLQkweDE4NGRlMzkyLCAweDc4YzEyZDM3LCAweDk4YjY2Y2UyLCAweDQyODE4OWUyLCAweGZiNWI5M2NjLCAweDI3MjQzZGJhLAotCTB4MGU3ZGJjNjEsIDB4ZmZhZjNiNDMsIDB4ZGViZTVlMzUsIDB4ZmVjNjI4MTUsIDB4Njk3YTJiODMsIDB4Y2U3ZGEzMWYsCi0JMHg1NTg3OTQ3YiwgMHhmNzg3ZjlmOSwgMHhiYzEzOTc1NCwgMHg5YjcwNGYxNCwgMHg2ZTI1ZTdmNSwgMHgwZWZiZTM0YywKLQkweGE2OWZkM2RhLCAweGUyOGZiYmFkLCAweGYzZDdlZmY5LCAweGRiYTBlMmJjLCAweDg0YjhjNGU3LCAweGE5YjcwZjE2LAotCTB4ZDBhZmI0M2QsIDB4NmYxYjkwNzQsIDB4MGY5ZjMyOTUsIDB4ZDExNjY5ZmIsIDB4NjljMWQzNTMsIDB4NjUzNzE4YTUsCi0JMHhiNDUyZDY5ZCwgMHg2Y2ZmMmI3NywgMHhmZGVmYmYyNywgMHg0ZjI5MzJiYiwgMHhlMDRhNjhlMiwgMHg1MWQ3ODQ2YSwKLQkweGVkMTZiZTFlLCAweDA3MTg1Y2QzLCAweDBmZjdkZWVkLCAweDcwOGE1YjVjLCAweDBiNmZmMjZiLCAweGZkYTFjZGM2LAotCTB4MWUzZTg3MTYsIDB4ZGYzYzJjY2UsIDB4NTFkMWUxYmIsIDB4MWFiY2RjNWEsIDB4ZjA0NWIzZjEsIDB4NTViN2IzMjEsCi0JMHhlZjg2MWVjZSwgMHg5NzRmN2UzNSwgMHhmYTdmZDQwZCwgMHgzZmI0MmRmNywgMHgyZDgzYzlhZSwgMHgxNGIwMTY0NiwKLQkweDI0YzhlNTQ0LCAweDc0MTgzZjkxLCAweGFlYzVmYzhiLCAweDQ1M2YzY2Q5LCAweGE5ZTJlZDk0LCAweGY3MWRmM2UxLAotCTB4YWYzODQ5Y2MsIDB4MzdjYTY5NDksIDB4NGE3MmM3ZGIsIDB4YWM3ZGQ4ZjYsIDB4ZWEwMTQ4YmYsIDB4ZDBjNGYzMTcsCi0JMHhhNTE1ODc0ZiwgMHgyMmVkOGI3OCwgMHg5ZGYzYTNiNywgMHhjNzIzYTIyNiwgMHhhN2Y3YzYzYSwgMHg5ZWQwOGU4MCwKLQkweDMzZDIyMmJmLCAweDU5ZTYwOTNkLCAweDA1N2RkZWQ4LCAweDQ1ZjhmN2UyLCAweDMyOTNhZDAzLCAweDk3ZGE0NWZiLAotCTB4NzhmODkyNDksIDB4NWI3YTFiMDUsIDB4YzYxYzYwYzcsIDB4Yjg5NWNhZjksIDB4YjM5YjZhOTQsIDB4MzZmOGI3MGEsCi0JMHhhNDc3ZmNiOSwgMHgxNzM3ZGYxMSwgMHhmZjU1NzhlMywgMHg5Mzc5ZTQ2MSwgMHg1ZjE0NmNjNywgMHg0NjU5Y2Y2OCwKLQkweGFmZmQ5Mzc5LCAweDNlZTc3NTliLCAweGI2MjE5ZmUyLCAweGYzMjRmMjlhLCAweGY2OTFmZjBmLCAweDI1MDcxYzA3LAotCTB4ZTdiNGRlMWQsIDB4YmU3NjY5N2QsIDB4OTllYTE1NmYsIDB4NTczNWI5NDUsIDB4MmFiZTQ5YjgsIDB4NDIxY2ZlYzcsCi0JMHg1NTY5NDM3YiwgMHgxNmIwZjI1MCwgMHg0NTYwY2ZhMywgMHg1MThhYjVmOSwgMHhiYjc0N2YzYywgMHg5NWViODBkMywKLQkweDA2NjJmMjJiLCAweDYyNzVmZjhlLCAweDZkMTVmYzgwLCAweGYzY2MyMDNmLCAweGY3YmQ4YzlhLCAweGFjYTYxZmEwLAotCTB4ODQyYWJkZWEsIDB4NjVkMDcxZWIsIDB4YTliOGMyNjgsIDB4ZjE0NGQyMzEsIDB4OGEzNjYzOTYsIDB4MmUxZWU2YWYsCi0JMHgyODJkZmQ1OCwgMHhkMjczYWVlNywgMHhkMWMwZDdmZSwgMHg2Zjk0YjlhNSwgMHgzZDFjZjMwZSwgMHg0Y2VmM2NjYywKLQkweGNkNDg3OWUzLCAweDYzOTQ1ZTgyLCAweDMzZWEwMzM2LCAweGUyZjMzMzY1LCAweDNlMmQ3OWU4LCAweDdlZjgwMmU3LAotCTB4M2EyMTUzYjQsIDB4MDgxNjk4NWYsIDB4OWUwZTdhZTMsIDB4YzA5ZTU5NmYsIDB4M2MyOGI3Y2YsIDB4ZmU1OGUyM2UsCi0JMHhkY2YxMmZmYSwgMHhiNzExNmVjOCwgMHhmYzdjNzEzZCwgMHhiNWYzOGExYywgMHhmZGUyMTIyYSwgMHg1MWU3OGI4MiwKLQkweDNmYTY5NjNlLCAweGY3YzUxMDg3LCAweGNkNDdjYTA5LCAweGFlNDdmNjNmLCAweGY2MGRhMGJmLCAweDdkMzkxOGFmLAotCTB4MGVlZWFkMjgsIDB4M2JmNjI3OGMsIDB4N2I3Zjk0MDIsIDB4NGNiNzRiNjUsIDB4YmVjZTYzZmIsIDB4MThkNWFhMDcsCi0JMHhkNzFiNjZiZiwgMHhiOWZiNGQyNywgMHhjN2VmMWUxZiwgMHhmOTFlOTk3YywgMHhlMTNjYTBlZCwgMHhmY2IwNjQ3YSwKLQkweDdhNGZiMjBmLCAweDU3YzdmNGUyLCAweGRlOTg0ZmY2LCAweDUzYjc4YmFmLCAweDIxYjhmZGUyLCAweDdmNWM3Nzc2LAotCTB4NWEyYmQ5MjMsIDB4NzQ1NTQ5YmUsIDB4M2IzNzZlMWMsIDB4YTQyODdiMzQsIDB4YjJhOWM3Y2IsIDB4MTY2YmYzOGIsCi0JMHgyNjBmZmY3ZCwgMHgyMmZmNzkzYiwgMHg4ZDZkMjczZiwgMHg3ZDQxNGFiYSwgMHhlMjhjMmZmNSwgMHg5MGZlNWE3MywKLQkweGFhMTQyZjk2LCAweDIxM2Q3OWUyLCAweGI3Y2U4NTgzLCAweGU1MWI1ODc5LCAweGRkNjI4ZDA5LCAweGI0NzE0NDkyLAotCTB4YTdkZjg2NWUsIDB4N2MxMGJlNjMsIDB4ZjJkMmZmZmYsIDB4Y2M1ZGZmYTksIDB4MzkyNjRlYmIsIDB4YmYwODRhYTksCi0JMHg1MjRjZjMxNSwgMHhmNmYwZWUxMCwgMHg3N2RlMzhjNSwgMHgxNTllMzRlYywgMHhjODUyNGNmMywgMHhjZGZlMjA5ZiwKLQkweGQ0ZmNmM2Y0LCAweDdmN2NmNWU5LCAweDMwZjQxMzIxLCAweDM5MGIzMzk2LCAweDk5ZTc1YTVkLCAweGNiNTU1ZjI4LAotCTB4NGNmMmQxMWYsIDB4MDk1NGJjMzQsIDB4NTk4ZTY3N2MsIDB4NTA3Mjg3OWMsIDB4OTJkOTQ3Y2IsIDB4ZmI0NGFkZTAsCi0JMHg3YjAyNTVhNywgMHg5MGQzZTcxYSwgMHg3ODRiZjIyMCwgMHhmOTBkZWRiZiwgMHhhZmY3YTQ2MSwgMHg4ZjEyN2Y5YiwKLQkweDY1MGYyZDY3LCAweDNkMjA2MjcyLCAweDVlN2EyMmJkLCAweGQxMWZjYjRlLCAweDNkNjYyNmU4LCAweGM3MWRhZTA5LAotCTB4NTU1ZjNkYjgsIDB4MGM3OWEyNmYsIDB4NzE0NzVjMzQsIDB4MDMwNjgxYzksIDB4ZDU1ZmJkNDMsIDB4MTg3NGU2NjUsCi0JMHg3OThlZGUzNywgMHhmZDhkZDYyNiwgMHhlNTJiNjEyYSwgMHhmODdhMGJkNywgMHhkNjE2N2IzMiwgMHhiZWUzMThiNywKLQkweDJmZWU1NjI3LCAweDdmZGUwM2U4LCAweDNkMjc2NTc2LCAweGE3NTJhYzA3LCAweDMzY2U4OTNjLCAweDk1MDk0N2NlLAotCTB4NWViOGU5ZTMsIDB4NmFmMzFjYjksIDB4OTAxMjM5MjIsIDB4MGZlZDg0ZDAsIDB4MzUzOTUwZDcsIDB4YTc5NjA2ZjIsCi0JMHg1MWFlNWU3YSwgMHg4YzBjNGY0MCwgMHhhMDk2ZWM4ZSwgMHgyZGRiN2ZiZCwgMHg5OWI0OGNiYywgMHg3ZDNkZmEwOSwKLQkweGU0YTg0ZDc2LCAweDM2M2JlODFiLCAweDJhYTM2ZjI0LCAweDM3ZTI5NTNkLCAweGJjNTBmNGY3LCAweDcyYmJlODQ4LAotCTB4MGNkOTFmMmUsIDB4YWJjNzk4NzMsIDB4OWQ5YjhhNTQsIDB4M2IyM2M4Y2EsIDB4N2Y5YzVlYzAsIDB4YjNlYjA3YjAsCi0JMHg4MzY3MTRjYywgMHg1M2ZmYTI3YSwgMHg3YWYxYTdhMywgMHhjYjNmYWY5NSwgMHgwZGZjZjA3MiwgMHhmOTQyMWJkNiwKLQkweDFhNmYyYTc2LCAweDkxMWJhYmM1LCAweGIyOWVjMDNmLCAweDcwNzMwMjNiLCAweDNkNDljZjVkLCAweDljM2YyMjc3LAotCTB4MjVjZmY5OWEsIDB4MGVlN2U3NDgsIDB4ZTUxMGI0ZmQsIDB4YjAyNjM1Y2YsIDB4Mzc5MTg3ZDMsIDB4ZGU1YzE5NjksCi0JMHhlYmVkMTgwYywgMHg2NWU3ZTgyNCwgMHhkOGZiZTA3YiwgMHhmOWI2YWJjZiwgMHg3Y2Q1MzBiMywgMHgxMzM0Y2E1ZSwKLQkweGExNjAxZDFlLCAweGZmMjhjODVmLCAweGI5ZmFjNTUyLCAweGQxZmI3MmU2LCAweDYxMmZjMzM1LCAweDJiMWFlODFlLAotCTB4YTAzNTIzODcsIDB4MDk5ZWM4ZjgsIDB4MDNiZTk1Y2MsIDB4MDkyMzVmZjMsIDB4NDlhOTg2ZmIsIDB4NmFhODg3ZTQsCi0JMHhjYjIxZmExMiwgMHg1OTQ2YjljNCwgMHhmODJjYjdmMCwgMHg3YjJiMGZmYiwgMHhkODMwMTUwYSwgMHgyY2RjZWYyZSwKLQkweGRlZGZlNzBmLCAweDY4NmZlNzE4LCAweDVjZTk0ZGNmLCAweGQ1OTFjZjRlLCAweDZlMWY0ODA5LCAweGQ3ZGY5MWUzLAotCTB4MjZjOTNhYzAsIDB4YmRmMTE4NmYsIDB4ZmI0MWRiMjYsIDB4MmEzYjRmYjcsIDB4YWZkMGJkM2QsIDB4ZTUyZmZiOTQsCi0JMHgyNmJkNTc5OCwgMHg3MWNhNWZmYiwgMHhmNjRlNGQ5ZiwgMHhlNTMxZmM3YSwgMHhmNTJhZTk0ZCwgMHgyMWRiMDMzNywKLQkweGU1Y2Q2Y2ZlLCAweGJiZmQ3ZjE4LCAweGZkMDQ5N2Y1LCAweGZlZmQ3Yzk1LCAweDczMzFmYjA2LCAweDIyNTk5NmI4LAotCTB4ZGRmMDBhMzksIDB4MDNjMGQ2Y2QsIDB4MTYxNzdlYjgsIDB4YjNmYjQ5YmMsIDB4N2E5ZTY2NzcsIDB4NGUyYmYzMDMsCi0JMHg4OGNmOTkxOSwgMHg5YzQzMjQ3MiwgMHg4ZWJkMDMzZiwgMHg3NWNjOWVlMywgMHhjZTUzZjNmMSwgMHhiMTEzZDM2ZCwKLQkweGYyZTljMDVjLCAweDdkYTYxNjVhLCAweGZjYjk5YWY1LCAweGFjZjVlM2JjLCAweGRhMTdhNWE3LCAweGFhMzFlMzVkLAotCTB4NzFmYzMxYmQsIDB4NWYyZmFhYWQsIDB4ZDcyZmFjNWYsIDB4N2Y4ZTNjODgsIDB4ZGZkZmVhZjIsIDB4ZDIwYTIyYzAsCi0JMHg3Y2E3YjdlOSwgMHhmZGY2MjYzNiwgMHgyZmRmNTY1MywgMHg5MjllOGY5MCwgMHhlODY3ZGU3OCwgMHhmYjI0ZTY3MiwKLQkweGQwODUyZGQ5LCAweDY0ZmYxOTllLCAweGM5ZmYzOGE2LCAweDU1ZmYxM2YzLCAweDRlNGY1ZmY4LCAweGI2OWY1NDYxLAotCTB4ODJjN2IyZGYsIDB4MmQ5ZTIyZjUsIDB4MWVmMWZhOGIsIDB4MjY0ZGM5NjYsIDB4MzBmYTQ5YjksIDB4NDczYzg5MjIsCi0JMHhiMGYxZWQzNywgMHg3OTNiYjc0MywgMHg5YWRhMTc1YywgMHgwYjQzOWZhMCwgMHg5YTRiYzI1NCwgMHg0MmFlYzBkZCwKLQkweDEwYjcyYmZlLCAweGJlNzQ2OWZmLCAweDBhZjQwYWM2LCAweDY1MWNhOTc4LCAweDVkZmE0MDQ5LCAweGMzNmVmNDYzLAotCTB4YjMwNGU0YmUsIDB4NWE2ZmZhOGEsIDB4OTZmYTg1YTIsIDB4ZmU5MGE2N2YsIDB4MzMzNTY1NTgsIDB4ZGM0Zjk0MjcsCi0JMHg2ODY1NDA5NywgMHg0NGUwNzI0NywgMHg3MThjMjk4NSwgMHhlZTQyMzVlZSwgMHg0ODFiZjdjYiwgMHhjYzJhNTY3ZiwKLQkweGQwMWI3OThmLCAweDlmZGYxYmFlLCAweDNiNTBiMGM4LCAweDdjNWNkMjk4LCAweGYxYThjYTdmLCAweGYyODUzNGQ1LAotCTB4MWFlYzA1MzgsIDB4ZjQ4OGMxM2YsIDB4NTdlMGFiN2UsIDB4YjNjZGYwNTksIDB4ZmI4ZDA3MDAsIDB4NzE0MWRjODIsCi0JMHgwNWJkNTUzMCwgMHg2MzJkZTdjYiwgMHg3MDUxMWNlOCwgMHg2MjliOWNmMCwgMHg5ZDhhYzFjMCwgMHhmOGJiZGY4MiwKLQkweDNmOGQzMzM5LCAweGQyMDE3OTM1LCAweDI4YjcxMGFkLCAweDZkMGUzMTI1LCAweDNlYTFhN2FmLCAweDZiNWY2NDY2LAotCTB4MDdlZGFhZmMsIDB4NzZiNDViNjYsIDB4Y2ZmYjBmOGEsIDB4M2NkOWRmMTAsIDB4ZGNiODQyNzksIDB4NDdmY2E2NjgsCi0JMHg3YWVhNWVmMSwgMHgxZmE0MTNlZSwgMHhhZjc3YWY4ZCwgMHgzZDdjNDBiZCwgMHgzZmM1ZGYxNCwgMHgwZTc1ZjJhNiwKLQkweDk4ZjdjNzI3LCAweDM5MWZlNDJjLCAweGVhMTY0YzYxLCAweGFmMmUzNTlmLCAweDE3Mjk4ZmVhLCAweDRiY2ZmOTAzLAotCTB4M2I0MDdjNDYsIDB4N2Q1OGRmMjgsIDB4OTE4OTUwYWEsIDB4ZTcwZjM2ZjMsIDB4NGJlNzY4NTcsIDB4YjA5ZjdjMDEsCi0JMHg2N2M4NTlhYSwgMHhjOGRiOGNjMywgMHg3ZGZkYjVjNywgMHhiOGMwZjVjNywgMHgwMzg0ZWVkMCwgMHg3Yjc2ODVjNiwKLQkweDQzNmVlNmFkLCAweDRmZTM3MGUyLCAweDJmYmM3MTUxLCAweDZlYjE5NzFiLCAweDA0ZWI5ZTIyLCAweDQyMGU4MTVlLAotCTB4ZTEzYTM3MTgsIDB4NWUzZDEwMzAsIDB4NGY3YmYyMjcsIDB4NThmMWYyYTQsIDB4YTY1ZjNlYjEsIDB4NDBkMGU4MTAsCi0JMHhmY2ZhNThmOSwgMHg5ZGE0NmI5OCwgMHhiNmVmYTgyZCwgMHgyMGY3MTM1YSwgMHhlODI3M2RkZCwgMHg2N2VkYTRlMiwKLQkweDNjZWY2ODg1LCAweDU5ZThiZjM3LCAweDkyYjNlYjk0LCAweDkxMjBiNTU2LCAweDg5M2FjNzVjLCAweDc1NzkzNWVmLAotCTB4NGFjZGUzMjEsIDB4MWFkYzgzMmMsIDB4YmZmNTgxZTcsIDB4N2NkNGZmMzMsIDB4ZDc1OWZjZWMsIDB4NWZkNDQyZDYsCi0JMHg3YmM2MGYyMCwgMHhhZmMyODc1MiwgMHgzNzA2OWZkMSwgMHhmYmQyMjFkMiwgMHhjMWM2MWQyMCwgMHhiYjExZDFhZiwKLQkweDBiMTI5M2ExLCAweDg4YmQ4MTc3LCAweDA0N2VjZDRmLCAweDkxZTc4ODRmLCAweGY5ZDFkOWFiLCAweGIyY2YxMTAxLAotCTB4MzQ3OWYzMzQsIDB4NmJlZTA4ODQsIDB4OWU1MDBmNWMsIDB4MDE5OWU1ZDksIDB4NjlkNjA3OWYsIDB4NzIwZmE0ZGUsCi0JMHg1OWVjNmMxNCwgMHg3NmUzMDYzMCwgMHhmZmI0ZWYwMCwgMHhlZGUzNzg0YiwgMHhhN2NiMmZlNSwgMHhiNThmODkxZSwKLQkweGZiMzlhNWYxLCAweDM4M2E5ZjI5LCAweGQ1Zjk0ZWQ3LCAweDY5M2U0NWQzLCAweDcxNDBkZWIwLCAweGM4YWJmMDc0LAotCTB4OTY2MjZmMWUsIDB4YTlkZGNhMzAsIDB4ZjJkNWJlYzIsIDB4M2M0YThmZmMsIDB4YzI3YTE5M2UsIDB4YjE4YmVlYWMsCi0JMHg1OWU2ODc5MywgMHgxZGM3OTRhYiwgMHhiMWYzYzE1YSwgMHg0NmUwZWQwNywgMHg5MDYwZWM5NSwgMHgwNTczYmFkYiwKLQkweDc2NWNhNWVkLCAweGQyYWVkZmI3LCAweDI0YTc5OTc5LCAweDgwYjQzZWRlLCAweDdkYjNkYzUxLCAweGU0NWZhOGI2LAotCTB4NThmNzZiMGMsIDB4N2NkMTY5NDgsIDB4NDYwZWY2ZjcsIDB4YzhlZWRmZjQsIDB4NTk0Y2ZhYTcsIDB4MTZmZGNiOWMsCi0JMHg3OWVkMzdkNywgMHhiZjZjNGZkYywgMHhiN2VhODhiOSwgMHg1MmM3ODQyNCwgMHg4N2Q4OGY1ZSwgMHhmNWZiODFkZiwKLQkweDdmMWZiMDVmLCAweGUzZjM0NzlmLCAweGIwNzUxYzc4LCAweGEzOGE3N2ZjLCAweGI0MGNlYTNlLCAweDJhMmRmZDIxLAotCTB4ODExOGU1ZjEsIDB4M2M0Y2VhNWUsIDB4YmFmNDBhOWUsIDB4N2E2MTg3YjMsIDB4ZmEyMTczNWYsIDB4ZTZiMmQ3M2IsCi0JMHg0NDA1MGM1NywgMHgyZTkwNWJhZiwgMHg3YTA3OGRlNywgMHhlYmQxZDAyZCwgMHg5NzA1NGY1NiwgMHg0Njk3MDhkYiwKLQkweDVhNzQ4M2FmLCAweDE3Mzc5ZjFjLCAweDc2ZmI2MzA4LCAweDliOWZlNzU3LCAweDMyZTgzZmQwLCAweDMwZGU3OTdiLAotCTB4OTc4YzgzY2YsIDB4MmNmMDMxMGYsIDB4NmUzYzM4NTQsIDB4ZjY3ODI2NTksIDB4YzFjNGZmMTMsIDB4MTM3YzI5NzMsCi0JMHg4Y2U5YTc0YiwgMHhmYzQ4YzdmMywgMHg5MGIwYWU5MywgMHgzZmNhMmNhMywgMHg0ZjAzNTk0ZiwgMHg3YzgzYjhlMiwKLQkweDBiZjcwZjc0LCAweGRiMmRjMDg3LCAweGJhNmU5ZTg5LCAweDA1MTdlZjk5LCAweGUzZWY1YzZkLCAweDhjMDY1MWJlLAotCTB4N2Y4YzViM2YsIDB4ODY3ZmFiNTMsIDB4OTZjZGRiMGIsIDB4ZTFiYTFlMzgsIDB4MWNmZjAwN2YsIDB4YWJiYjNmNTEsCi0JMHhlNmM2ZjI5MSwgMHg4ZTllMzBjYywgMHg3OTM0NzNiNSwgMHhjZDUzZWRhOSwgMHg3NDZmZWQxMywgMHgxZTYyMzZjZSwKLQkweGZkMWFkY2Y3LCAweDViYmNkMGZlLCAweDRkZDRmZWY4LCAweGNjZmRmNTczLCAweGEwM2UxYjYzLCAweDZjZDY0NmZjLAotCTB4YmJjZGZjNDQsIDB4OGFmZjVmNDUsIDB4Njk1ZjcwNjcsIDB4M2QyYmVlMGMsIDB4MDMyOWUyMmIsIDB4NDdjODI3YzAsCi0JMHhiMjVkNGRiZiwgMHhmM2EwNzZmMywgMHgyOTJmM2YzMSwgMHhjY2NmMzhjMywgMHg5YmJkODZiNCwgMHg4ZWU4ZmNhMSwKLQkweDZkZmU1NDcxLCAweDc0N2ZmN2RhLCAweDE3NzdlYjBhLCAweDQxODY3OTUxLCAweDkwYzdlN2UyLCAweDhhY2Y4MTBmLAotCTB4MmViZTZmMmIsIDB4ODlmNTExMmYsIDB4NDY3NmY3ZTgsIDB4ODEwOTNkZWYsIDB4Y2VkMGQ5ZjYsIDB4ZjI5ZjMxMzMsCi0JMHhmODg4NjczZSwgMHg1ZTIyYzBjMCwgMHgwNzI0ZmQ3ZiwgMHg1NWJkZWQ0ZiwgMHg4Y2VhZjhhNSwgMHhlNDdjYzg4NCwKLQkweGZmNGIxNzgzLCAweDkwZjMwY2IzLCAweDcyOGJlNDY3LCAweGIwZTM1M2Q5LCAweGMxZjRhY2ZjLCAweGZkNjdkNDdjLAotCTB4ZDcwNTc2OGQsIDB4Yzc5MzI5YTEsIDB4NGIxN2M3YTUsIDB4ZTIyNzYzZGQsIDB4N2ZkMTJjNzksIDB4NGQ1NzlmMjMsCi0JMHg5MTMyMmZkOSwgMHhmMTU0NjY0ZiwgMHhhNzdiYzY3ZSwgMHgzYjYwMTZiNSwgMHhmNzJhNzljMywgMHgxMTEyNWE2NywKLQkweDE5YmYxYWZmLCAweGQ5YTQxZjg0LCAweDI3MjE3ZThkLCAweGQ5YmRmNDllLCAweGZhZmQwMjkyLCAweGE3MTc5MjJkLAotCTB4MjZmMjlmZTgsIDB4OWQ5ODE3YzUsIDB4ZmJmM2E3OWYsIDB4NmI4YzE0ZjIsIDB4M2NmMWY3NGYsIDB4ZDhhYjZkZDUsCi0JMHhiNmYzYjQyYSwgMHhkNjUzZTk1ZCwgMHgwYjc0ZmQ0MCwgMHg3YTA0ZjVhMywgMHhiZDIwNjUzNywgMHgyNzIwZmU0ZiwKLQkweGFlY2M4OTExLCAweDllOGQ3N2E3LCAweDNlNzQ2YjY2LCAweGMwY2Y0ZjQzLCAweGZlZmM3NmE3LCAweDhlYjVlNGNiLAotCTB4N2E1MWFkOWUsIDB4MDljZTI5MWUsIDB4YTA2NDY1NzAsIDB4NWU5NmY4NWMsIDB4MTM4ZTBkOGYsIDB4ZTNmMThmYzcsCi0JMHhmMDI3MjQ4ZSwgMHg0NmRlNTYyZiwgMHhiZTI0ZWJlMSwgMHhiZmVjYzJjYiwgMHgzNmNiZTQwMiwgMHhlMWM3MmY4ZCwKLQkweDFlODY0Y2ZjLCAweDJiOTQzZjNhLCAweDAxZDFjNzc5LCAweDBiNWUyOWRjLCAweGZlMzhiOWU5LCAweGM2Y2JlMGQ0LAotCTB4NTBkOTcyZDgsIDB4ZDE0ZmYwYjgsIDB4ZTdmZTUwZWMsIDB4OTY0M2Y4YzYsIDB4N2NlZjg3YTgsIDB4MTcwYTM5MmMsCi0JMHhmMTE1M2Y4YywgMHhmMGUxZWVjMCwgMHhiOTlhOTJlYywgMHg4NjdlMTE1YywgMHhkMjY4YjcxNiwgMHgzZjU4N2JlNiwKLQkweDdlMDRjYWRmLCAweDcxODNkZjhlLCAweDI4NWJkYTI2LCAweGY3MDgzNzFkLCAweDM2ODNhYzI1LCAweGRmZDBhMDlmLAotCTB4ODc3ZTJkNzMsIDB4MWRmNmU2MDksIDB4Y2ZkMTFkNTcsIDB4YmE4MzQxNzcsIDB4ODExZDVkNzAsIDB4Mjc5YzIzNmYsCi0JMHhlODYzYTEwYywgMHgzZTYyMmQ4ZiwgMHhmYTA2NWZkYSwgMHg0NDU0NjdmMCwgMHgzNzgzNGJkNywgMHgyMzRkNGYxZSwKLQkweGY5ZjhkMWM4LCAweGJhMjdlM2M0LCAweGY4MTkzZDZlLCAweDBkZTdjZWQ0LCAweGU3MTJmN2NlLCAweGI4OWY2ZjE5LAotCTB4NWY3OGZhNGQsIDB4MjVjYjg4YjIsIDB4YzU3MGUzNDcsIDB4MTJjMzVmNTgsIDB4ZjM4NzE0YmMsIDB4ZDViZmU0NGEsCi0JMHg3MjgxYmQ4MCwgMHg1MTlhYTZiOSwgMHg2ZWQ5MjQzYywgMHg2NjljMzhhMCwgMHgyN2M0OGM3NywgMHg0OGM1NWY1NywKLQkweDYzMmNkNTRlLCAweDlmMjA1Y2UyLCAweGE2M2QzYzVmLCAweDkzMWZkZWIzLCAweGI3NTE2YmZmLCAweGFmN2U0NDJmLAotCTB4ZjBmMmViYjcsIDB4NmUzY2VjNmIsIDB4MWI5MzVlYmYsIDB4ZjUwMmI3YWMsIDB4ODg3OTYwZmMsIDB4NDBhZGVmOWUsCi0JMHhmZjdmMTNiOSwgMHgxZTQ1Y2Q1NywgMHgyOGJlNGUyZiwgMHhmYmM2YjNkMSwgMHhmOWVhMDU2NiwgMHgwYWRlZWFlNCwKLQkweDI0MGY1Zjk0LCAweDc1YzVlZWY5LCAweGUzYzBjMzdkLCAweGRjZjhmMWVhLCAweGUyZDA2MTlhLCAweGE3NDQ5N2M1LAotCTB4NzgzNDdjZjEsIDB4ZDgxMWRhY2UsIDB4ZjE2OGUzODEsIDB4MGY1MjczYTQsIDB4MzhhNjRmOGYsIDB4M2M4MWZmNDUsCi0JMHg0YmEwNjdhNCwgMHgyMDY2OWEyMywgMHgxY2ZmM2YyNywgMHgzN2ZjNTE5ZCwgMHhmNzI2ZWRlMCwgMHg3YjljOWFlZCwKLQkweDE4ZGNlNDk4LCAweDVjZmRkN2ExLCAweGJlOWNmODllLCAweDRlMWMxOWJkLCAweDAyMWRjYmMyLCAweDllODUzMzJmLAotCTB4MjY1M2JmM2QsIDB4YWY4NjY0M2YsIDB4YTE2ZTJiNzgsIDB4YjIzNzlmMDQsIDB4OGZiMWYxMzAsIDB4OGY3NmEzZjQsCi0JMHhhODMwNzlkNywgMHg2M2ZkYjFiYSwgMHg0YmI3ZDIwZSwgMHhmZGEzYTg1ZSwgMHgwY2RiMzFhNSwgMHg5N2QxOGQ0YywKLQkweGJhMDljMzYzLCAweGVmYzY0MWZiLCAweDI3OTVkNjRmLCAweGRhZWE2Njc0LCAweGFmOWMzYTRmLCAweDFlZWQyZmFiLAotCTB4ZWNiZmFiYTcsIDB4Yjk1ZDMyZjksIDB4YWVhYTY3YTIsIDB4YWI1N2U0ZmQsIDB4N2JjYmU1NzQsIDB4N2ZiNWQzYWYsCi0JMHhlMDNkZjUwNCwgMHhjY2VmNWJmNSwgMHhlZmZmYmRkMSwgMHhjNzllYjMxZCwgMHgyMzJiZGNmZCwgMHg3ZjdkZDNkZiwKLQkweDU4MTljNDQ2LCAweDBjNTNkN2M4LCAweGQxYTg1ZmYzLCAweGRkNWFjNWVmLCAweDc0ZDY2MGY3LCAweDA3Mjg5NTRiLAotCTB4MGRjMmRmZjgsIDB4MWE3ZDRmM2MsIDB4YmZiNjJjNjAsIDB4N2I3YTZkNDUsIDB4NTA4YjI2NjIsIDB4NTg1MzVmN2UsCi0JMHhjYzMzNzZmMiwgMHgzN2Q3ZDM1MywgMHhiYzIwZWUxYywgMHgwMTNkZDk3ZSwgMHgwYzBiZGM2MywgMHgxOTdkMGY0OCwKLQkweDg1OGM2NzYwLCAweDE0YjBhNDdmLCAweDg5MWJiM2NjLCAweGZkNmNiZmZmLCAweGQ3ZTE1ODhiLCAweDQ3YjM3ZjVhLAotCTB4NTU1NmZlYmYsIDB4NjJiNmZlYmYsIDB4YmMzYmZhZmQsIDB4OWE0ZmY1ZmEsIDB4OTc3ZjVmYTIsIDB4MjlmZWJmNGYsCi0JMHg0ZmY1ZmFkNSwgMHgzZmQ3ZWJmNSwgMHhmZDdlOWU3ZCwgMHhmNWZhMDIzMywgMHg1ZmFmNTUxZiwgMHhmZDY2ZWNmNywKLQkweGQ3MmVlNzdhLCAweGU4NWU2YmFmLCAweDM2ZmRmZDM2LCAweGQxYTA3NDcxLCAweDBiNGYyNjkzLCAweDc3MTFkZGQ2LAotCTB4MTk4MThlMWYsIDB4YTM0MmU4NjIsIDB4N2FmZTg1YjMsIDB4ZGQxYTVmY2EsIDB4NzhkZDEzZjYsIDB4ODYzMWY0ZjEsCi0JMHg2ZmNiYmM4OSwgMHg5OTg1MWY0OCwgMHg3Zjk4MTc0MCwgMHgzZjkyY2M5OSwgMHgxYmVmM2QyNywgMHhkNDNhOTk5ZCwKLQkweDU2ZTRkMGJlLCAweGY1OGYzZWFjLCAweDY3OTI0NzhmLCAweGYwOTRmNDQzLCAweDUzZDQ0Nzk3LCAweGEzNWIyZmU4LAotCTB4NzQ0OGYyZmUsIDB4ZmQwMzFhZmEsIDB4YTA2ZjgzNGEsIDB4NGVjZGQ4MzgsIDB4MDQ4OWM3MGUsIDB4ODg3ZmI3NmUsCi0JMHgzYjQzOTc1NSwgMHhlMDA1MzM2OCwgMHgwM2U3MGQ3ZCwgMHgzMDk2YmZlMywgMHhkZjFkZTI5ZSwgMHgxYzQ2OWQ2MywKLQkweDQzZDYxNmY3LCAweDQyMmNmOWNmLCAweGVhNzMwMGNmLCAweDY0MmM3ZGNlLCAweDdmODg5MzdlLCAweDgxNTk5NzVjLAotCTB4NGFkZTkxNzEsIDB4MTYxN2EzOTQsIDB4ZjY4MzdhOWMsIDB4Yjk0YzVlYjMsIDB4NGUzMjdiYTQsIDB4NjhjOTdlZTMsCi0JMHhiOTBhY2VjNiwgMHgyNmZiODdkMSwgMHg4YWI3ZWU1MCwgMHhhOThmYTA3OCwgMHg5ZTdjMThlZSwgMHhkYWNiZjExNSwKLQkweDU3ZTkxMmU5LCAweDdlNTAyNzI2LCAweDI1NzdlZDU3LCAweGZmYjU0ZmQyLCAweDk5NzU5ZmMzLCAweGZmMWVhZTNjLAotCTB4YzM1Y2IzNWMsIDB4MGJiMDliNmIsIDB4NWY3MDdkYjgsIDB4YmJmNTRhYTYsIDB4YjI3NmFhNjAsIDB4OTQ0ZWJkNDMsCi0JMHhkZjFmZDBmZiwgMHg0NGQ4NzhjNywgMHhjMmM3YjlmZSwgMHhhMjk1MDRlMSwgMHhlM2E2NGM1YywgMHhiOGVlYjQ3NCwKLQkweGNiZWU3OGZlLCAweDRkZjBlMTYzLCAweDIyZTU5ODUwLCAweDAyY2YxZmJjLCAweDk1ZGUxNzY0LCAweGRmZmQ0Zjk5LAotCTB4ZTM4ODgwYWIsIDB4ZmVjMzhmZmQsIDB4MTU2ODRhM2QsIDB4YzA3ZmQxYzUsIDB4NWJmNDcxZjQsIDB4YTM4YTI1OWEsCi0JMHg4NWUwMDBmZiwgMHhmNWU5YzdhNywgMHhjYWQ2MWVhMCwgMHgzM2JjMDVhYiwgMHg0ZmJjMWRiMCwgMHgxODRiMzRmNywKLQkweGZkYmFmYWZmLCAweDc4YzNmNjBkLCAweDc4ODdmODNmLCAweDU5YTFlMmQ3LCAweDU4NjY4NzQwLCAweDYwM2ZiZGQ3LAotCTB4OGY4YmNmMTQsIDB4NDE5MjhlOGIsIDB4OTNmZTYzYTIsIDB4ZjdhYjlmOTEsIDB4OWZiOGRiMjgsIDB4ZDRlYmQyN2EsCi0JMHhkMTk4N2RjNSwgMHhiZjIwZTc4NSwgMHhiY2MyZGVjYywgMHhlNzMxYjNlNSwgMHg4N2JkNjAwYywgMHhlOTc0N2ZiZCwKLQkweGJmMmZiZTI4LCAweDMxNjc2NTY2LCAweDRmZDg4ZGQxLCAweDdlZTU3YmJjLCAweDk3OGFjYjJhLCAweDNlZjEwYWYyLAotCTB4ZjdjYzU3MmEsIDB4YzdkNDM3MjYsIDB4ODc2MmJiZjAsIDB4OTBlNDYzZWYsIDB4Y2JhN2VlZDEsIDB4ZDk1OWVlNTcsCi0JMHg0Njc4ZmI0MywgMHhkYWQ2NmY3MSwgMHg4MTljM2JhYywgMHgyZmM3Nzg5OCwgMHg2MzFkODUzMywgMHgxYTY3MzEwOSwKLQkweGZjMzdhNjEzLCAweGUxOWQzM2JkLCAweGU1NGVjYWZhLCAweGNiNWZhYzZjLCAweDg4NmM5NzllLCAweGNmNDE0NmI3LAotCTB4ZDdiYTA5MmYsIDB4NjA3YjM2ZTAsIDB4NWViODE4YmMsIDB4ZThkZWY0MTIsIDB4M2NlMTMxZWMsIDB4ZThiNTgyNWUsCi0JMHhkMmI0YjhjMSwgMHhkM2ZiYTZlMywgMHgxYzkzNzE2ZSwgMHg4M2FjNDFiYSwgMHg4ZGQ0YTBmOSwgMHgwYWNjNGFlNywKLQkweDVlYzVmOTllLCAweDgzMmZkYTdhLCAweDY0YmNmNzI2LCAweDc2ZWZiODY0LCAweDI0MzVjNTRmLCAweGNkYzk0ZDRmLAotCTB4OGZhMDZlZGUsIDB4YzhiNGJlMWYsIDB4YWYwNjE4MTksIDB4NTFlY2QzZGEsIDB4YzVjYWM0MmUsIDB4NWY4NTMyZTcsCi0JMHhjNjRkOTkzZSwgMHgxZTA2MTk3NSwgMHg3NDNmOTNkMiwgMHg1ODdlNmZmMiwgMHg3ZTU4ZjNjMSwgMHhmOTQ2MDNmOCwKLQkweGZjMzk2Y2VkLCAweDk0ZjE0NjU1LCAweGY3MjRiY2NhLCAweDJmNDIyYzVjLCAweDA2MDRhYzM3LCAweGU4ZjYwMzFjLAotCTB4OTgwYjBiNGEsIDB4NjZiMjFmNDEsIDB4OThkMmQzYjIsIDB4NDM2OWU4OGYsIDB4M2FkZThiZTksIDB4ZjY1ZWNlZjgsCi0JMHhjZmY0NjJiYiwgMHhhZmY4YWJlZiwgMHgyYTNiMmM2NiwgMHhmMmM3YWY1ZiwgMHg3NThmYjFmYSwgMHgxZDlhMGU2MiwKLQkweGRlNTM3MTYxLCAweGUwYWYxODUwLCAweGFmZjcxODRjLCAweDNiNjM1N2ZiLCAweDFmNzk4ZjdjLCAweGUwMWVmMGQ1LAotCTB4NTc0Mjc3YjksIDB4MjZkYmRiMDQsIDB4ZWIwNzdkMWUsIDB4OTZkZGVjMTMsIDB4ZTEyZWY4MDIsIDB4MDA1NWU2MTYsCi0JMHhmMmRlYTk1ZiwgMHg3NGYwMDU2OSwgMHhiMDJmNDM5NSwgMHhiZGYxMzZkNCwgMHgzN2VmMGE2ZCwgMHhkZDI2YmY3ZSwKLQkweDQzZGY4N2JlLCAweGZiMTMwNTczLCAweDA0NWVmY2EyLCAweGQ1MjMzZjZkLCAweDBhYWRhN2JlLCAweGJlYTE1NmU1LAotCTB4OGY4MTQxZmUsIDB4Y2ZlM2ZiMTQsIDB4MzAzZDYzZTcsIDB4YWQxNjY4ZGMsIDB4YmJkNDQwN2YsIDB4NTRmNzhmZWMsCi0JMHhkZDE2NWNmMSwgMHhmZjQ1OWJmNywgMHg5NzAzNzY0OSwgMHhmYjEzMmE1NywgMHg5MzdlYmNiNiwgMHhmNTZhYjdhOCwKLQkweDY1ZjYyNjFlLCAweGE4YWI3ZDc5LCAweGRlNzlkYjM3LCAweGVlYjdiMDEyLCAweGZjNjJiNWZiLCAweDJjMGM1YmI0LAotCTB4ZWVjZjQzMTAsIDB4MTAyYzA5YjksIDB4MzVjOTFmNDMsIDB4ZDFiMmJhYzksIDB4M2IyNWNmY2UsIDB4YmVlYTY0NjcsCi0JMHg1YmJkZmFkMywgMHg0NTc4OWI4YywgMHg0YjNiZWViZSwgMHhmYjdkMzhlMSwgMHhjZmE0YzliOSwgMHgzNjc4MTBlZSwKLQkweGVhZTk5NTY1LCAweGFjZmVmM2I1LCAweGYyNzNiNDVkLCAweGFhN2I4YTc2LCAweGFhZjNkZmFlLCAweGUwNzI4NDlhLAotCTB4ZGQxYWU1ZWMsIDB4Yjc0ODJkN2EsIDB4ZDNmMjM4NzcsIDB4YmMyMWJmNzEsIDB4YTMzNTNhMTIsIDB4YTc4OGIxM2MsCi0JMHg2ODNkM2M1MywgMHhhNTUzYzA1YywgMHg3Yjg4OWU3MiwgMHg4NTM5NTlhZSwgMHg2ZTgwN2JjYSwgMHg5NWExZmViMSwKLQkweDgyZWYyYTVlLCAweDlmY2YwYWIyLCAweGJjMmEzZjQzLCAweDYwZmQwZWRmLCAweDgzZjQyYjc5LCAweDFmYTEwN2NmLAotCTB4ZTMwMDNlN2MsIDB4Zjg2NmZkNjEsIDB4YTA5YmNiMGUsIDB4YjdkZjJjM2YsIDB4N2JlNTQ3ZDIsIDB4Yjk1MzU2NTcsCi0JMHhjYTlmYTU3NSwgMHhhM2NlNTc2YiwgMHgwMzJiZGRlNywgMHhiMmIzNWNmNCwgMHg4ZTY3ZWE5ZSwgMHg2YmVkZmFlMiwKLQkweGIzOTQwNWU3LCAweDk5ODBiY2Y4LCAweGU3YTIyYWEzLCAweDgwYmNiNDNhLCAweGZlZjBkMzBlLCAweGI4YTNjZGRjLAotCTB4ZmU2NWNjMWMsIDB4ZmU5YzJkYTcsIDB4ZWNjODllZTksIDB4YTM0ZjlkMGQsIDB4ZTdlMjliZGYsIDB4YTFiMTkxZWIsCi0JMHhkNTVkZWE5OSwgMHgzYmVkMWM3YywgMHhhY2IxMGVlNiwgMHgxNThjN2U0YSwgMHhlYTRiZjVkYiwgMHgxOTk3Y2E2YSwKLQkweGNjZWFlM2NiLCAweDI1NmE2MjEzLCAweGZlOTc0ZWJmLCAweDEzZTkwODk0LCAweDVmMmY1OGE1LCAweGRmYzNjY2YzLAotCTB4ZTMxMDFkNTMsIDB4M2VjZDg1YzgsIDB4OGE2NThlOWMsIDB4YzRmMzFiYmYsIDB4OWQwMGRlZWQsIDB4MDhiZGNmZWYsCi0JMHg5YjFmODM5ZCwgMHhhNjJhZjE3NCwgMHhhZWUyZTk4MiwgMHhjOWQxZGJkMSwgMHg3Njc0Y2EzMywgMHg4OWIxN2NhYSwKLQkweGJlYjI1OWRhLCAweDcyNjc2YmE3LCAweGQ1ZGFlYWQ3LCAweGM3YmJjZDJlLCAweGM1MThmODgzLCAweGIwZGU2MWU3LAotCTB4YjhjMDY1OGEsIDB4ZDMzN2RhOGIsIDB4YmFjNWViYjgsIDB4YmRmOTdjYzEsIDB4M2UyNDA3ZDYsIDB4M2RiZjYxNWYsCi0JMHhiNWYzMTRlYSwgMHgzYWI5MjA2YywgMHg0NThiYzVjNiwgMHhjYTAzMjE0OSwgMHg5ZDdmZjdjMywgMHhjOGZhZmM0NCwKLQkweDQ3OGEwNjQzLCAweDAzNjE2NThlLCAweDUwNzhkN2FlLCAweDgxM2Y1OGQzLCAweDEyNzk1MmY1LCAweDk3Mjg1NzRhLAotCTB4ZjJjNjU1MzIsIDB4N2U0MjJjNjUsIDB4YWI2ZmQ4MmUsIDB4ZTQ5YjlkNzEsIDB4Mjg1NjQzYzAsIDB4M2MwZWNiOWYsCi0JMHhiYTkxZjNjYSwgMHg4OTE0YWY0OSwgMHhlY2QyMjhmNSwgMHg3YzRhNmRkOCwgMHgyOGRkNmY3YywgMHhlN2Y1OGZmMiwKLQkweDliZjdlMjk1LCAweGQzMmEzOTU3LCAweDFmZThmZWQxLCAweGU2Y2M3ZjIxLCAweDQyZGNmMzM5LCAweGUzMmRiZmMwLAotCTB4ZWY2YTdhNGQsIDB4YzMwZDU1ZWYsIDB4Nzg3ZGUzOWUsIDB4ZjJjZGY0OTQsIDB4ZmJmYWMzM2UsIDB4MWZkZTgxYjgsCi0JMHgyYjljNzljNiwgMHg1ZTY2MDNmOSwgMHgwOGMyYTZiMSwgMHg4YzZiMDlmOSwgMHg5MzUwOWM5YSwgMHhlY2I2M2Q5OCwKLQkweGYzMzE2MjRkLCAweGFiZTU2NDc4LCAweGVjMDkwYTA1LCAweDc2NGRlMTAwLCAweGU3Y2M3NDZhLCAweGVhNTI3ZjJiLAotCTB4MjJhNjNjYzQsIDB4N2ZiOTM3OTEsIDB4OGNlMTQ2NjUsIDB4N2JlZmQxZDEsIDB4YjMxNDFkMDQsIDB4YzVmZjkyNGUsCi0JMHhmYzk3ODM2ZSwgMHhlNzUzOWY0OCwgMHhkYjBiNWE3NywgMHg0NDVlNzg3YywgMHg5OGJjYzcxZSwgMHhiNTk2MzM2MywKLQkweGY5NmIzOWQxLCAweDIzYzkzMjZmLCAweDRjYjVjNGY5LCAweGMxMjNiYjA1LCAweDdiMjE2NjE5LCAweGZjMjY1ZmI0LAotCTB4ZjkwOTFmZDcsIDB4MDY3ZDkxZjksIDB4NjhlNzJmYzEsIDB4YzhmOWUxZjcsIDB4ZTljOGY5ZGUsIDB4ZDQ5ZTYyNzUsCi0JMHhmYTQ2ZWQ0NywgMHhhZmFkM2U0OCwgMHg1ZjdhNzYyZiwgMHgyZTlkMDAwZCwgMHgyMmYzNjgzZSwgMHg2ZGM1MDk3OCwKLQkweGJjYTAzZjc0LCAweDEyNTk2MjViLCAweDIwZjNjMWMxLCAweDZjYmRiOTkzLCAweDQyYzk1NmRjLCAweDFiNTc5ZWIwLAotCTB4YmYwOTg3MDIsIDB4ODMyMWVhYmQsIDB4NWRhMWZjYTYsIDB4ZWU4OThhNjMsIDB4Nzg4MzFmNjcsIDB4NmU1ZTIzYjEsCi0JMHg0MzgxOWMyZSwgMHgxZTEzMTYxNywgMHhiZjc5ODkxNywgMHgyNmIxZTYyNSwgMHg4MGJmYzM1YiwgMHg3ODdjZjk4NywKLQkweDc2ZTJlMDlmLCAweGNmZDZlZmNkLCAweGFhOTJkZWYzLCAweDRiN2Q2MzZmLCAweGEwZjk0YzhmLCAweDk3M2NmOGYxLAotCTB4NDRjNGE3ZjgsIDB4ZjFkYWYwNTgsIDB4NzAwNDZlM2MsIDB4YTBmYzg1YmUsIDB4ODgyOWRjMjAsIDB4YjY5ZmJlNWYsCi0JMHhlMzBhNjljNCwgMHhhOTdlZTAzOSwgMHgzMGYyOWFiMywgMHg3ZjI4MTgyNywgMHhkZjJlOWUzNSwgMHhmMzY4ZjYxNywKLQkweDZkM2QyNzI4LCAweGNmNDRiMzllLCAweDczZGY3MmQxLCAweDdmYzg1MzBiLCAweGFlZDY3YWUwLCAweDlmMTZiY2YwLAotCTB4Zjc4ZDhkNGYsIDB4MjhlMmQ3YWQsIDB4NDEzZjVmMjIsIDB4ZGY3ODNiYzAsIDB4NDc5ZTM4ZDgsIDB4ZGIzZDY3NjgsCi0JMHgyNDY2NGYzMCwgMHg5NTkwYzZiZiwgMHhjMGQ3ZTcxNywgMHg1NGZkMjBkMiwgMHg2NTFmMjg1OCwgMHhhNGU3OTZiZCwKLQkweDhmMjk1MjllLCAweGU3OTg5ZTFiLCAweGJhNzQxMTY0LCAweGI5ZWZjMWQ2LCAweDNhMzdlNmQwLCAweGQxZDFjYjhiLAotCTB4MDZmZjljNTksIDB4ODZkZTVhMmMsIDB4MjYzNGE2YWYsIDB4YWJiNmJmZmYsIDB4NmQ3NWZjOGUsIDB4YzQ0MDZhM2YsCi0JMHhmNDEyMDY0OSwgMHg4MjBkNDdmYiwgMHg2ZDllMDYxNCwgMHg3ZGMwNGFhYiwgMHgxZmJlMzY5MCwgMHgzZDc1ZDBkNSwKLQkweGQ4ZjJlZmJmLCAweDI4NWY3NDAzLCAweDNkMjJhOWY0LCAweDc1ZjY4OWQ0LCAweGZhZmVmNGViLCAweGUyMDFmZGEyLAotCTB4NDA3OGY4ZDcsIDB4OTgwZmZmYmMsIDB4MWU1ZGExMzMsIDB4NjdlN2ZmZWYsIDB4Y2JkZjdmMDksIDB4ZTliZjcxNGEsCi0JMHg5MzgyODZjYywgMHgyOWI3MDAwOSwgMHhkMWI5ZDE4ZiwgMHg3NGUzZjI1MSwgMHhhNTU4M2JlZiwgMHgyNmNmNzg2ZCwKLQkweGNhZjdlMTJiLCAweDBmZmZhZmM0LCAweDk3ODQ0ZGIyLCAweGRmNWYxMmZkLCAweGYxM2I2OGQwLCAweDJlMGFmZWMxLAotCTB4N2QzZmY2MDcsIDB4MjhkMTg2ZmUsIDB4N2QyNTcyY2YsIDB4OTFhZTcxM2UsIDB4ODE4Yjc3ZGYsIDB4YzlkZjc4N2UsCi0JMHhmOTcwZjU1OCwgMHgwY2IyMzM2MiwgMHg1ZmNmNGNkZiwgMHg4ZDdiOTdhMSwgMHhkYTRmN2I4NywgMHhkMzdmOTI1NCwKLQkweDRmM2Q3MGIzLCAweDg0YjEyNWZlLCAweGY3NDIyOGY4LCAweDgzYjlhM2U2LCAweDc4ZGMyMWUzLCAweGUxODBlMzZlLAotCTB4ZjRiMWY5ODMsIDB4NDUyY2RkZjAsIDB4NjZmODZkYzAsIDB4MWU4Njc4ZjIsIDB4YWYyNTczYWUsIDB4ZTFjNzVkYTQsCi0JMHhmNTBiMjliYSwgMHhiNGU5Zjc2MywgMHgwZDdjN2NkOCwgMHhjMzU1MDNhZSwgMHhmODZlMmI5ZiwgMHgwMjlhNzhhNiwKLQkweDhiMGU1NGYwLCAweGMyMmZmYWE3LCAweGYwZDMwMWQzLCAweGMwNGNmY2YwLCAweGYyY2Y2ZmYzLCAweGQ2ODYyZWZiLAotCTB4NmRmYjQzN2YsIDB4MWVmZTFjNjcsIDB4YzUwOWI5ZWIsIDB4MzNmYmMwMzYsIDB4MmZhNzlmYzIsIDB4MDRjMmY2OGQsCi0JMHgwNWNiM2FmZSwgMHhmOTBiOTY3ZCwgMHg4OTVmMjVlMywgMHg0YzlmNWYwNSwgMHgwYTlkNjRmOSwgMHg3MmMxYTk0YiwKLQkweDJhZWY0MmU1LCAweDRhN2Y3YTM1LCAweGZjYTAxMGQwLCAweDc5YmFmNjdjLCAweDQ0NzdmOTU4LCAweDk5MDM4NWM4LAotCTB4Mzg3OGIwZDIsIDB4ZjRmOWU2MjgsIDB4YThiOWI1OGIsIDB4ZDU3ZGVlNjcsIDB4YjQyZTUwY2MsIDB4NWVmZGZiMDgsCi0JMHhlZjA1YTc2NywgMHg4OGYwZDU5ZiwgMHgwNjc4MzJlNSwgMHg1ZWM1OTE0ZCwgMHg2NDdmOTcyYywgMHg4Y2MzZWQ1MSwKLQkweDZkZTNlMDY3LCAweDZkMWJlMzhhLCAweGFiZjllZDNjLCAweDBmYWU2MmFjLCAweGNjNjU2N2E1LCAweGM1NzRkZmRiLAotCTB4ZDQyZjc0MmIsIDB4NjQ4NTcyYTYsIDB4N2ZjNmQ3ZWYsIDB4Y2U1ZTllYmIsIDB4NzY5MmJmNzUsIDB4NWY5N2E3MDMsCi0JMHg0OTM0YmQyMSwgMHgxYjdlMjU2ZiwgMHhmMjI5NDFjYSwgMHhjYmVlMDk3MiwgMHhmZjM0MDI5YiwgMHg0M2IxZTAyMCwKLQkweGVkYTc4YTFhLCAweGY5YjQ1ZTgyLCAweGUwZDdmMzY5LCAweDkwYjk1Yzc2LCAweDlhZjFjMWQ2LCAweDQxYzY5NDk5LAotCTB4MTdkMzVlZDEsIDB4ZTFmZjQyNDksIDB4NWM1ZjQ4YmMsIDB4MGY3M2YwYTEsIDB4ZmJhZDBhMTUsIDB4ZTk1MzI5YTYsCi0JMHhiMTAxY2E1YywgMHhkY2I5MWUyZiwgMHhmODNkZWMzNCwgMHhmNzZmMDI3ZCwgMHgwZjYzZmM1ZSwgMHgyZWExYjVmYSwKLQkweGMwMGJkZDIzLCAweDhkY2Y1ZTk0LCAweDRiZjEyZjc4LCAweDBjMzNkZDBhLCAweGY3OGQ1NGY0LCAweGUyZmQzZDFjLAotCTB4ZjNiNDQ0ZjksIDB4ZjJlMmNjZGUsIDB4MmUyY2NkZWMsIDB4Y2EyZTA3MGYsIDB4ZTQ1ZTc0ZDUsIDB4NzI5YzhmYzUsCi0JMHhjZTlmZmQwYywgMHg0ZDNlYzU5MiwgMHgwMzllMGY0ZiwgMHhmM2M2NThkOSwgMHgxZWMyZWRkZiwgMHg1N2Q4YmZiMCwKLQkweGE3ZGJmMDhmLCAweGM1MmNjNGZjLCAweGIyMWZkYmQwLCAweDQ2ZDcwNGNjLCAweDBiY2QyNDUzLCAweGM5OGYwNWZkLAotCTB4ODJlYzliYWMsIDB4NmRhZmJhNWUsIDB4OTM5YjljZjAsIDB4ZmNhOWExZTMsIDB4OGVmNjg2NTksIDB4ZTNkZjhiYmQsCi0JMHhlNTRiM2E3NiwgMHgzZWUwMTY3MiwgMHhjNjEzZWYwNCwgMHhjM2FjZTQ3ZSwgMHgyZjE4NzJmYSwgMHhjM2JkZmEzZiwKLQkweGExMzNkN2M5LCAweGIyYTNkZjgyLCAweDM4M2Y4YWU5LCAweDI0Yjg5ZWYxLCAweGM3ZmRkMTg5LCAweGVhMzZjODNmLAotCTB4NTdhZGExY2UsIDB4MmNlYzFjYjksIDB4M2I0MWU5ZWYsIDB4Mjg1NGU0MmUsIDB4ZmJiM2E3MmYsIDB4ZmJkYTBiMGUsCi0JMHhmMmY4NWYxYSwgMHg4YWQ3YmNmOCwgMHg0ZWQ3N2NmYiwgMHgzOWUzMGUyOSwgMHhkNzhlOGQxNCwgMHgyMDJlMDc2NCwKLQkweGJlMDQ2ZWRmLCAweGFmZWM5Yzc4LCAweGMyNzRmZjFlLCAweGYzMTRiMzhmLCAweDFlYjAyNzVjLCAweDk1ODZhZmJhLAotCTB4ODdjODljOWIsIDB4OGU4MzA2YzUsIDB4ZTZjOWFlZGYsIDB4NDEzZGEzNzQsIDB4ZjNkZDkzZmQsIDB4OWFiYjQxNjMsCi0JMHgyYzNiOTdkZSwgMHg3ZGI1Y2YwYywgMHgxMjc2NzE3YywgMHhiNjcyYTdkYSwgMHg5ZDc5ZWY2NiwgMHhlZDhmYzc4OCwKLQkweDdjNGVjOTczLCAweDBkZjZiN2ZiLCAweGRhMDc3OWIxLCAweDczZjAyZGYzLCAweGNiNDRjN2JiLCAweDU5ZmViYzhiLAotCTB4MGIzMTdlZDgsIDB4ZTk3NjgzZGMsIDB4Nzc1OTc2ZTIsIDB4YzE2ZGZmZGUsIDB4ZGEyZThiZTcsIDB4OWQ4Yzc3NTgsCi0JMHhmN2NhNjhiZiwgMHhhMmQyYmNlOCwgMHhmZWY0ODk4YiwgMHhmNDlmOTE2ZCwgMHgyYTRiYzhiNiwgMHg4YWYwZjMxNCwKLQkweGRmZDkxNWU3LCAweGM2ZjdmZWQwLCAweGZmNWRjYmM5LCAweDk3MmQ0OGY5LCAweGQwZDk4NTk3LCAweDZiZDRhMzZmLAotCTB4ZTM2YTdmNDIsIDB4YjlkMGJmZDQsIDB4N2ZjMGI3OTEsIDB4ZDE3ZjM2ZWYsIDB4Nzc1ODUzM2MsIDB4ZWQ4M2I4Y2MsCi0JMHg3NzU5NWEyZSwgMHhhOGJhZWM0YSwgMHhiZTc0NzcwNCwgMHg2YjdmYWE3NiwgMHhmMDRiZTdhNSwgMHhjNzg3NGEzOCwKLQkweDNhMDVmZjY4LCAweGJmZWQwZTNjLCAweDVhZGZlYTg4LCAweGZkMjVmYzU5LCAweGZmYTExZjhmLCAweGQxZmMxZDNjLAotCTB4N2RlOTBiN2UsIDB4NDdkYTg5ZmYsIDB4MjcyZmMwNmQsIDB4NzhlZjU3YmEsIDB4OGVlYmYzMGEsIDB4N2NmZWU5OWIsCi0JMHg4YWIzYjg3NiwgMHg5MmZkYWZjZSwgMHgzYmM2YjlkMSwgMHgwNmYyN2Y4ZiwgMHhiOWRkY2RlNiwgMHgzMWM1ZTRjNywKLQkweGY5OTE4YzA2LCAweDQzZjQ2MWRlLCAweGYwODY3MzIxLCAweDc5ZWQyOTFlLCAweGNkMDE3NjQzLCAweDQ1YmRmZTI3LAotCTB4MGYzMTNiMDksIDB4MzhhYzUyY2UsIDB4NTg1OTNmNTEsIDB4ZjEzNTc4NGYsIDB4OTNlNDg1ODMsIDB4ZmFkNzk3MTYsCi0JMHgyNjcyODcxZCwgMHhmNzZhM2U0NiwgMHhmNjJiYmM4NSwgMHgwYjYwZmY4ZCwgMHhjMGFlY2MyYywgMHg4MTU3ZjczMiwKLQkweDljNjIzNzczLCAweGQ5NjFlMWFkLCAweDc0MjFlZmM5LCAweGM1YTIzZjkxLCAweGYzZjQxNWJiLCAweGUzZDQzMDBhLAotCTB4ZTNmZTc4NjcsIDB4NGIwMzcyM2YsIDB4MGU3ZTZlOTEsIDB4ZGZlMzAwZTIsIDB4MDFiZDg0ZjIsIDB4ZmYwYTRmOGEsCi0JMHg4ZjZiM2VlZiwgMHhmNzIzMWJjNywgMHhkZjJiNjQ1NiwgMHg4YjZmZGY0YywgMHg3ZjE1MzdkMywgMHhlYjliYTQ3YSwKLQkweDhmMzgxNTliLCAweDU3ZTdiOTQ2LCAweDhlNzg3OWI1LCAweDFiZGM1N2E5LCAweDViZGQ5MmE1LCAweGVlOTI3ZTViLAotCTB4ZmNkNWFiOTcsIDB4ZmJmMTc1ZjksIDB4YjQyZWQ5ZWMsIDB4N2NmOGI1ODMsIDB4YTEzZmU2MjIsIDB4ZjNjOGRmYmUsCi0JMHhiYzZjZWJlZiwgMHgxNGZiZjc1YywgMHg0Nzg5Y2YzYSwgMHhlZjEwNGE0NSwgMHhkZjk3YjI5ZCwgMHhmYzI0ZTgyYiwKLQkweDBmMzAxNzllLCAweDIwZTYzNjU4LCAweDllMDQwNzdlLCAweDQzM2Q3N2NmLCAweDVmOWUxOGY3LCAweGEwZTg5YTM3LAotCTB4YTUzZjM3ZWUsIDB4NjQwZWM5N2IsIDB4NjNhY2ZjOGEsIDB4NzU0M2QyMGUsIDB4ZGUyNTZmNjYsIDB4OTMyMDc3OTMsCi0JMHg0YTlkOWJkYiwgMHg4YzU5NjI3NywgMHhhYjM2YjlmZCwgMHhmYmViZTQ4YSwgMHhkMDFiNDZlYiwgMHhiYWYwZDczZSwKLQkweDhkODVjODUzLCAweDg5NTAzYzVhLCAweDZkZmRlMjU0LCAweGJmNzc5N2VmLCAweGEwZjA3YTRjLCAweGM2ZTc3ZTk1LAotCTB4NGE5M2U4NzAsIDB4YTM3MTRmYmEsIDB4YWZhNWVlOTksIDB4Y2I3NjM0M2EsIDB4MmM2ZmE4M2MsIDB4YThiZTUwMzIsCi0JMHhlMDk1OTBlMSwgMHhkZjllYjczOSwgMHhhMmRmODRlZiwgMHgzNDNjNmViZSwgMHhhODBmN2U4YSwgMHhiY2ExMTZjZSwKLQkweDZmMDRjNmFlLCAweGQ0OTdlZTExLCAweGRkMTZmYTFkLCAweGJlZTY3ZjI3LCAweDM3MjgzOWIxLCAweDM5YWFhNzRmLAotCTB4N2RlZTdmNzQsIDB4Zjc5ODc0ODAsIDB4Zjg2MzYzZTksIDB4NzRjOWQ2ZmIsIDB4ZDFiMWQyNWUsIDB4YWUyZTE4MTYsCi0JMHhmODkzZTlhMSwgMHg2NDBlYTNmYiwgMHg0NjFmZjY5NiwgMHg3OGI1OGNmYywgMHg5MTc5NDBmNywgMHhiOGIwM2Y3NiwKLQkweGY5ZWVhYzBmLCAweGYzMTUxY2M4LCAweDU1N2Y4NWFjLCAweDMzZWY3ZjY3LCAweGZkYWRmN2JhLCAweDNkMzg1YmNkLAotCTB4Y2QwMjdkZjMsIDB4YjcxZjhiM2YsIDB4MDM5ZGU4NGUsIDB4ZmM3Y2M4YTYsIDB4MzViYWE2N2QsIDB4OWUyNmZmMDIsCi0JMHgyODY3NTY4NywgMHhkMzI3ZGZhNSwgMHhlZTMxYmZmMCwgMHgwNDU3ZDU3ZSwgMHg5OWU3YjVkZSwgMHhiN2JhMTUxNywKLQkweDFjODFlYzBlLCAweDczM2E1N2RjLCAweDc2ZjQ0Y2RjLCAweDNhNzhlMzY2LCAweDU3OGRhZDJmLCAweDAyNzFiODA3LAotCTB4NTY0ZTllOWYsIDB4ZmVmYWUyMjcsIDB4YmFhZmM4NTksIDB4ZDRlZmRjMzUsIDB4MzYxOWQ3ZGUsIDB4NDc3YWUzNTcsCi0JMHg2Zjk0Yzk4ZSwgMHgyNDhjZTAzMywgMHhkNjg4N2VlMiwgMHhjZTBmMmI0ZSwgMHhkZmE2NGJhNywgMHhmOTkwM2ExOSwKLQkweGQwM2JhZDM0LCAweDMyYmE0MzE1LCAweGZhNDFjNmZjLCAweGZlMWJmODM2LCAweDk3ZWY0NTdiLCAweGY1MGQ5MGIzLAotCTB4ZjI2NmFiZjQsIDB4MzMxYzRlZDMsIDB4ZjAzYzFkOTMsIDB4M2I3NzNmMWEsIDB4N2IyZjFlZTQsIDB4YWRlZjA3MjQsCi0JMHgxNDY2ZmUwYywgMHhlYzgxYjVjOSwgMHgzNzZlNmVjOCwgMHhiOGRlZTk1YiwgMHhjOTgxNTM4MSwgMHg0MzJjZmY2MiwKLQkweDgxOTc4YmRjLCAweDYzODVkYWY2LCAweGQ3YjQ2ZWQ2LCAweDIwZmI0OWUwLCAweDQzZDdiNjIxLCAweGU4ZGI4ZmVmLAotCTB4ZDI3ODBmZmUsIDB4MWQyNjA5MzksIDB4OWNlZmQwZjQsIDB4N2RmMTM2YjAsIDB4Njc3ZjdkMGYsIDB4Y2EwYzYwNGUsCi0JMHhhMDBiM2JlOSwgMHhkZjdlM2I3ZiwgMHhlNDJlZWQ0NywgMHgxOTYxMjYwNywgMHg3OGM1MzJmZSwgMHg3NjZmZDQ5OSwKLQkweDRiZGU5NzIwLCAweGVmZjg3OTFmLCAweGZhODliNDdiLCAweDlhMGZhYTFlLCAweDFlNjk5MzAzLCAweDhlYjA3NjdmLAotCTB4NGRmOWU2NjEsIDB4MmY3YjdmZWYsIDB4OWJlNDg1M2IsIDB4OTllMDM3MDYsIDB4YmM3OGJmZWMsIDB4ZTIwYzcyNzgsCi0JMHgzZTM4NWRmNywgMHg3MDcyZTllMiwgMHgzZTA0YmYzZCwgMHg1ZjkwYTc4YywgMHg3MWQ3YzVkMiwgMHg5NzEzNThmZCwKLQkweGM5ZTNhZDI3LCAweDQzMWJhNWNlLCAweDU2OWFmMjYyLCAweGU4OWI3YjFkLCAweGRiZThjMDcyLCAweDcyMjk3YThhLAotCTB4YmRmOGM4Y2EsIDB4NjAxOTYwNmEsIDB4NmYwYTYxOWMsIDB4ZmNlMzY3NTcsIDB4OWVmMWMxYTQsIDB4Njg2ZTZmYzgsCi0JMHhlZjRmNzllNSwgMHg5Y2VkZTJmZCwgMHgyNzNjNzYwNSwgMHg5Y2VlYjZmYiwgMHg4M2Y3MTZhYywgMHhhZTMxMTI0ZSwKLQkweDg5YWFmNzYyLCAweGRlZGMyNWI1LCAweGZlMmUwOTk2LCAweDhkMWI0ZGZiLCAweDU1NGVmZDJhLCAweDE0YjFiZWU4LAotCTB4NTI2MzM4NGYsIDB4OGViZGQxMGYsIDB4OTAxODI3ZWIsIDB4NWNiZDVhOWUsIDB4ZjhkYTg0ZjYsIDB4OWFmYmI0YmMsCi0JMHhlMjk3N2JiNCwgMHg5Y2RkZjJmMSwgMHgzOGJiZmUwMiwgMHhkZTJiNzAyYywgMHhhOTlhN2RkOSwgMHg4ZGIzNjI2OSwKLQkweGM3YWI5ZmVlLCAweGViY2EwMTdmLCAweDJiM2UwZDBiLCAweGJkMjViZmNmLCAweDM3OWVmNDMwLCAweDhlZmM5N2QzLAotCTB4Zjk2ZGZmZDUsIDB4ZTY4Y2I5MDcsIDB4MjUwZGVhZDksIDB4Yzc3ZDVlYTIsIDB4NTgzZWZkYzksIDB4YmJmNDk1M2QsCi0JMHg3NzQ5ZTdjYywgMHhiZWEwNjZlOCwgMHg5MzlhZGZmNiwgMHgwNzI0ZjU0YSwgMHg3ZDc4OTFkZiwgMHhmMjY5OWQzYywKLQkweDkwM2UwODZlLCAweGZjNWZiMDZlLCAweDNkYmVmYTBlLCAweDQ4ZDVjNzg3LCAweDc5YmRlMDU4LCAweDdiYTI2NDJjLAotCTB4MGFiZTg0NjEsIDB4Y2YwMThhNGEsIDB4ZDRiOWY3NzUsIDB4YmVjYmE0NDQsIDB4NTVlNDgyZDYsIDB4NTJlMGE3OTgsCi0JMHhlODYyY2FkMywgMHhhMzJjZjgyNCwgMHg5ZTJhY2NmMywgMHhiZjhjOTg0ZiwgMHg4ODliZTI3MywgMHhjOTAzYmNmMSwKLQkweDNjNDIzOGZhLCAweGViNGY4ZjNjLCAweGZmNWIxZjlkLCAweDc3MmUxY2QzLCAweDFmYjg3MzViLCAweDI2MWNlYmY4LAotCTB4M2M3OGZlZWMsIDB4MjI1ODNhNzIsIDB4MWJkNWEwZTgsIDB4Y2FmYzhhYjgsIDB4YjY0Yjc2YjgsIDB4ODhmYTA5MjUsCi0JMHhkNGY2ZGY3YiwgMHhjYWJlNTMzZiwgMHg4NWJkZmQ0ZSwgMHhkZTNkNjIzNSwgMHg5MjE0ZGU3OSwgMHg4MTMzZTEyNiwKLQkweDM3ZWI4ZGYyLCAweGZmNTc3OTczLCAweDVkZDE0ZDQyLCAweGZjZTc0Y2JjLCAweDRkZGM3NWE3LCAweDcwYjMwZmJmLAotCTB4YzYyMmNjY2YsIDB4OGJhZDE3ZTUsIDB4NzMwYjlmNDYsIDB4ZGY2ODQ1N2MsIDB4NGVjYmI2NDUsIDB4NmRmYTkzZTQsCi0JMHhhYWQzYzEzMiwgMHhjM2I2NTliNCwgMHg4Y2RiYjNmYiwgMHgwYmQ1Zjc2NCwgMHgwNTY2Y2U3OCwgMHgxNGRkNjkxMiwKLQkweGVmMDA5OGE2LCAweDIyNDA5NTY3LCAweGM1ZGJiNWQ5LCAweGNkYzRlMGVmLCAweGEyYmRkYTAzLCAweDFmODMwZDk0LAotCTB4YzI2NzVmMGIsIDB4NzQzMGMxNGYsIDB4ZWI0MGNhNzAsIDB4ODk4MTMwYjQsIDB4ZTg5MzQ3ZGYsIDB4ZWNkOWM3OWMsCi0JMHhlZTU4YWRjMCwgMHhlZTllN2YwMywgMHhhMDZiNmU5ZiwgMHhmMWUyNTU3YiwgMHgyMDEyZDY3ZCwgMHhlNjIyNWQ3YSwKLQkweDdlMzNlMWEzLCAweDAzOWYwZDFjLCAweDlmYjQ0Zjg4LCAweGZhNDFkZjllLCAweDhjYTBmODJmLCAweGVlOWVjYzE0LAotCTB4ZWNmYzkwZmEsIDB4YmU2NmM3NjksIDB4YmY3YzJkZjEsIDB4MTUxOGVjMTksIDB4Y2JmZTZkZjUsIDB4MDc3ZDQ3ZGYsCi0JMHg5OGVkMGE3MiwgMHg2OTA1NjNkYSwgMHhhMzZmNGUyYywgMHhkMmZiNTkzZiwgMHg4YzQzNDRkYywgMHg5NzZkNmNiZSwKLQkweGI1YTU5ZjY5LCAweDIyZTI0ZTcwLCAweDA2ZmU3ZjZhLCAweGFhZDNhZmE0LCAweGE2MmNhZDM3LCAweDlhMzkyYmRkLAotCTB4YWY1ZmE5M2YsIDB4NGQ3ZmNkYmEsIDB4MzdlYTcxYzQsIDB4ZGE1ZTY5MTgsIDB4NGMwMDBjYmEsIDB4NmNkYjg3MjQsCi0JMHg4MWZmYTQ2MSwgMHhhYmY1MDhhYywgMHg3ZDIwZDNhZCwgMHhmNDY4M2FlMywgMHhjZDNlZWQwNCwgMHg3ODcxOGE3MSwKLQkweDJmMmZiNmJjLCAweDg2MWRlOTUwLCAweDAwM2YxNjRlLCAweGRiN2Y2MmUzLCAweGU2OWY3NDFjLCAweGUxYWI4ZWE1LAotCTB4MDViZDcwNjMsIDB4ZDcxOTUzNWYsIDB4YzUxZTc3NzEsIDB4MTRhNzBkYzcsIDB4ZGQzZjA2NGEsIDB4ZjIwZTRkNzYsCi0JMHgwN2Q4MWQ3MSwgMHg5M2E4ODcxOCwgMHhiZGQwNmYyMiwgMHg3NGNjYzdhNiwgMHhlNmRkNmZlZiwgMHg3OGUyYjdhNSwKLQkweDBkOTlhZjc1LCAweGZjNzdkZjU4LCAweDU3MDQ4OTlhLCAweDllMDJiYWRjLCAweGY3YTM4NjcyLCAweDhlNDhiYzgxLAotCTB4NjA3ZjA2MzcsIDB4NmI3ZjEwNTcsIDB4OWI4MTg5ZjMsIDB4OGIzZjAwZTAsIDB4YzgxOWM1ZWUsIDB4OTE4Y2Y1ODMsCi0JMHhlMWNkN2YwMywgMHhlZjY4MWFmMSwgMHhmMzdkMTEzNCwgMHhlNzA2OTk3YiwgMHhhZjliOGNlYiwgMHhhZmJlNmUzMywKLQkweGU2NmZhMjMwLCAweDE2N2NkMDBkLCAweGUwMzY2ZWJlLCAweDVmZjc4NWZiLCAweGI3NzE4NDVmLCAweDY5ZDNmNWJlLAotCTB4YmVjOTdkNWUsIDB4N2Q1ZmM4ODksIDB4MzBmZmQwMzksIDB4ZmRlMTcyZjIsIDB4MmY5MmNmMzAsIDB4OTU5YjY3OTgsCi0JMHg3OWM0NmJkNiwgMHhiMzc2NDcyNiwgMHgyN2E3OTgyZiwgMHhiN2NmM2Y1NywgMHg3ZTkxMzUxNCwgMHhjYzg4ZTM0ZiwKLQkweGNjMTI4ZTMwLCAweDE2ZmM2ZmY2LCAweDk3ZWZkMzJmLCAweDFlOWM4ZDA1LCAweDc0NmQ5YjgyLCAweDhiYmZhYTJlLAotCTB4YzlhZjhmZGYsIDB4MTJlZjE4MDEsIDB4ZjQ0MGMxZTksIDB4NmVhNTU3ZDAsIDB4NzVmNDgyOTksIDB4ZmRjNGVjOWYsCi0JMHg5N2Y1YmU4YSwgMHgyZmJmOGNiZCwgMHg3NjUxYjdkNywgMHg1N2QwZGRhMiwgMHhmMjA3ZjFjNSwgMHg1Zjc4ZjQ4MCwKLQkweDJhMDZmZjhlLCAweGVmZDIzNzFmLCAweGZiNjk5ZGE0LCAweDNlZTg5ZmViLCAweGZhNDY2MzgyLCAweDNjODFlMjNkLAotCTB4NTg3OWM2ZmYsIDB4YWU1MTc4MDYsIDB4ZTI2ZTVlMDEsIDB4ZTY5MWFiNzYsIDB4YzFlZWJhZGYsIDB4ZGExZjU4NzUsCi0JMHg2ZmNlODkzNiwgMHg3YWQ3ZDUwYywgMHg5MDZmZDczYywgMHgxNGM4N2M3NSwgMHhkZTBiYzY5NSwgMHgxN2VlOGEzZiwKLQkweDEyMGNmMGQxLCAweDIzZmQwOGI2LCAweDllNTgxZjBkLCAweDk3OGEyMTNiLCAweDhmN2YzOGEwLCAweDhmYmYwMjc2LAotCTB4YzQzM2M4NGIsIDB4MTNkNzNlNGYsIDB4ZTUwNThlNzgsIDB4MTlhNzllMTgsIDB4Y2JjNTVmNDksIDB4N2JiZDc4OWYsCi0JMHg0ZmI2YWU2MywgMHgwZGM3OTdhOSwgMHg3OWFmYmY3MSwgMHg2OTc5NWM1YiwgMHgxNjU4ZGM5YywgMHg1NzE4ZGY1NywKLQkweDg2ZjlmYTBmLCAweGNmZDJlMmUxLCAweGEyY2Y4ZTBjLCAweDFhMjE5MjdlLCAweDRmYjgxZDFmLCAweDU2YjRiZjIyLAotCTB4MDdlODRkNTEsIDB4ZWI4ZDNlM2QsIDB4NTk4NTNhZTcsIDB4ZTRiZTIyYWUsIDB4MTU2YTczZTcsIDB4YzMyZTYyZDYsCi0JMHhhYzUzNWVmNywgMHhiNWZkMDRiZiwgMHg5Y2ExOTM5OCwgMHhiNDEwZTVjMCwgMHg5NGM1MzZhYiwgMHhjMWFiNzkzNSwKLQkweGEzYzA0YWIzLCAweDljNzZiZjNkLCAweDdkYzQ2NmEwLCAweDE1Yjk1NThjLCAweGNhMzFmNzQzLCAweGJmNWZmY2U0LAotCTB4MTFkNjdlODgsIDB4ZTBjY2ZjOTksIDB4YjBmZjVjMGIsIDB4ZjJkYzNmNGYsIDB4M2JlZjFiOTgsIDB4MzIzY2EwMmUsCi0JMHg3OGYxZmU2ZCwgMHg2MWZjMzgxYywgMHhlNGRlZmQyMiwgMHg1ZjNhMjZmMywgMHg1Mjk1ZGI1ZSwgMHg3MjU4N2U0NSwKLQkweDZmYmM1ODY0LCAweDQ0ZmFlNWNkLCAweGU5NWZhZmViLCAweDZiMWQ5YzRkLCAweGM0ZGViMzQ3LCAweGFkZjdkZmQ4LAotCTB4NGFlMWZjM2QsIDB4N2YwMTZiZjQsIDB4OGU0NjM5MjEsIDB4NWE5NjM5OWYsIDB4ZGQ2NWZlODUsIDB4ZjBhYjMyZWYsCi0JMHg1Y2QxZWZiYywgMHgzZWEwMGUyZCwgMHhlNmY5MDFiYywgMHgxM2UyOTk4OCwgMHgzM2NjMmZmZCwgMHgyZmZkZjdlMCwKLQkweDlkZTc4YmQ0LCAweGZmNjA5Zjc0LCAweDcwNzI2NzViLCAweGZlODM0NGZjLCAweGNmN2Y4OWJlLCAweDlkNTRmNmU1LAotCTB4NTdkZGNkZTEsIDB4OWEzZmZjYTIsIDB4MjYyNmI3OWUsIDB4Mjg2NzVkMGUsIDB4MzFmOGJmMjMsIDB4YzIzZTY0NjMsCi0JMHgzYWZmNzYwZCwgMHhmYWQ1MDNjYywgMHgxMmFiOWEzOSwgMHhkZTQ3ZmQxYywgMHhlMWYyOGRkZSwgMHgzMmVjYzZjYywKLQkweDQ3ZmQyYjE0LCAweGRjMWY5MGM2LCAweDQ1NjVkYWZmLCAweGZmNmI1Zjc4LCAweDk0NWUxOTdkLCAweGQ1MTk4ZjBiLAotCTB4ZTJkZmI5M2IsIDB4OGJjOWVlZjAsIDB4ZTBlMzg3ZjYsIDB4OTFmZjYzZmUsIDB4M2YxODk1YzksIDB4YzM4ZDdmZTgsCi0JMHgyNzhhNjUwYiwgMHhlNjEwYmI0MCwgMHgyNmZkNmE1ZiwgMHg5ODRkZDQxYSwgMHg2NzdlY2U4ZiwgMHg4ZWUyYmYyNCwKLQkweGYxZDIwYWNmLCAweGQzNDQ5NTdlLCAweGEwNTBmN2YwLCAweGMzY2ZhMTFmLCAweGQ2ZjM0ZDVlLCAweGZkZTM3ZGYyLAotCTB4MzdmZjJkMGMsIDB4ZWVkMzBmZGUsIDB4MTdmNzhmOGIsIDB4M2RkYjU5ZWIsIDB4ZWYxYzk3OTgsIDB4NmU2MTgyMzcsCi0JMHhkZjg5YTUwOSwgMHg0ZWJmYTczMywgMHhmNzRiZjdkMiwgMHhkZmQ2NmU3ZiwgMHhmNjEyMWQ5ZiwgMHg3MWU0ODU4MCwKLQkweDdhZTNmMDJkLCAweDc5ODUzZjhhLCAweDNjOWQ2ZmRjLCAweGM1ZWM3ZWVjLCAweDZmYTc2ZTVjLCAweDdlNmRmZGI1LAotCTB4OWViYWNjNmYsIDB4MDNjNTMwMzYsIDB4NjI2ZDNkNzgsIDB4NzBkOTRmMTYsIDB4OWM4NWUzZmUsIDB4YzM3YjkyNWEsCi0JMHhiMTc1OGRmYiwgMHhhMWIxZDZmNywgMHhhYWU5ZTQ3ZSwgMHg5ZGY5ZTUzMCwgMHhlZmQzMmY1ZSwgMHhmNWMzYzQ1OSwKLQkweGY4YzhmZDU1LCAweGViZGZiNWVmLCAweGM0ZWQwNGY4LCAweDAwOTM4YzU0LCAweGU0NWZjOWE0LCAweGQ1ZTFlYjNmLAotCTB4YmYxNTY5ZjAsIDB4MDFmZmYyYTMsIDB4OTQ5MTEzZGQsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg3ZGI1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhjMzc2NGNmYiwgMHgwODNjODQyNiwgMHg4MTNiY2Q4NCwKLQkweDQ0OTAyYzI0LCAweDhmMmVkNGFjLCAweDAzMTBmMGM0LCAweDU4NTA4MjJhLCAweDg5ZGU0MDIwLCAweGM1YjBmZDYwLAotCTB4NDA4MDIxNjYsIDB4MTUxYTg2ZDEsIDB4MjYwZGRhMmIsIDB4MjJlYzEyMDgsIDB4NzYwZDEyMDEsIDB4NGE4ODg5NDEsCi0JMHhhZGI0NTUwMywgMHgyMDJhMjVmMiwgMHhkNDEwOTIwNCwgMHhlYjZiZmU4ZiwgMHg3MzMzOWNmZiwgMHhkMDgyMGZiMywKLQkweGNmZThmYmY2LCAweDk5ZGVlNjRlLCAweDdkZTczM2I5LCAweGZkOTk5Y2NlLCAweGY3Zjg3YmZlLCAweDE3YmVjNjEzLAotCTB4NjJhMmQ5YTUsIDB4Yzk2MzEwNmMsIDB4MmQ5OTkwZmYsIDB4NDNiMmIxOTQsIDB4ODkxYWU3MWEsIDB4YWZkYWMwYjEsCi0JMHhmNTBiOTk5ZiwgMHgzOThkMTZlZSwgMHhmOTU4YzJjNiwgMHg2NzI2ZDkyMSwgMHg2NTlhYzYzMCwgMHgzZTBjNDI2NywKLQkweDA4YTgyMmZmLCAweDhmMzc5N2RlLCAweDMzY2NjYjMxLCAweDljYjM3OTVlLCAweGFjNjU0Y2U3LCAweGQ4NmFlOWFiLAotCTB4NjcxYTU0ZTIsIDB4ZmQ4OGM1YmEsIDB4YTFkYWI2OWYsIDB4YzJhY2M4MzQsIDB4NTdiNGY0NjUsIDB4NGM4YjU4Y2EsCi0JMHg2OWRlMjhmMywgMHg5OTMyZmVhOCwgMHhlMWVmYmZkMSwgMHhiMDU3NTJiZiwgMHgyOWJjYmQ0ZiwgMHhiZDRiZmFiMiwKLQkweDdmOGM1ZWE3LCAweDM2N2ZjMjQ0LCAweDhjNTk2N2E2LCAweGVjNTdmMDk1LCAweDYxODdlYTcyLCAweDVkZGU2MDUzLAotCTB4MTkxMmU3YjUsIDB4YjJhOGQxMmMsIDB4YTEzMjVhYzcsIDB4MTY5ZGY4OWUsIDB4NjdiNThjZWIsIDB4N2U2ODk5ZTUsCi0JMHg2Nzk4MTY0MSwgMHgyMGRiZjNiNywgMHhiN2QyZjMwNiwgMHhiZjljMzZjOCwgMHgyYzMyZmNmZiwgMHhmZjMyYzY1YSwKLQkweGMyZTVmOTgzLCAweGYzM2NjMmZjLCAweDU4NjRmOTgzLCAweDU5ZTY3OTA2LCAweGIyZDFlOTY2LCAweDNlODc5ODU4LAotCTB4YzQ4ZDlkMjgsIDB4YTM2OWI2MTYsIDB4ZmMyMmZkYTAsIDB4NmEyZmRlMTMsIDB4MDU4ZDNjNTksIDB4NzlhOTM2MzEsCi0JMHhlMDAzMWFjOSwgMHhiMjVhYmJhMSwgMHg3ZTc5ZTBlYSwgMHhmMDBkYzAwYiwgMHg3NjRkYmY5MCwgMHg5MzJmMDA1YSwKLQkweDMxMWQ1NjkyLCAweGQzZjE3ZDQwLCAweGU2YmExZWYwLCAweGNmNGVlM2M4LCAweDllY2JmNjg2LCAweGI4N2VhOTkwLAotCTB4MWFkMzkxZjYsIDB4MGQzNmViYzQsIDB4MDMxZTIxZDMsIDB4ZWY4YmI2ODIsIDB4YTE1ZjljMzEsIDB4Y2I2MTVmOTgsCi0JMHg3YzEyMGJkNCwgMHhkOTIxZDk2ZiwgMHhmNWZlYzZlYSwgMHg1ZjNlMmIyNiwgMHg3OWYzNDFiYywgMHg5NmZhZDdiYiwKLQkweGRlMzAxZmUwLCAweGQzOTJhZDkyLCAweGE5MmRlMzBkLCAweDk1ZGY3ZGY2LCAweDM4YjJkMGU5LCAweGVmZDViZmU4LAotCTB4OTlmYWVkNzksIDB4NTRiMTQyNDcsIDB4NTFkNjA5MzMsIDB4OGY3ZGY0ZTgsIDB4Zjk4NmRlZmYsIDB4NzdiZjhiOTQsCi0JMHg4YzFlNmMyNiwgMHgzMDMyZTlmOCwgMHg2MWY4MDZkNiwgMHg4NjMwZjZlYSwgMHgxYTNkYmJhNSwgMHg3Y2Q1ZDhmMSwKLQkweDU4ZjExYTM2LCAweDI0ZmZmYWZlLCAweGE3ZjA3ZWIyLCAweDE0YzVhYzk0LCAweGUwMTAyZTdhLCAweGY3ZDg5MTY5LAotCTB4YWJmYmE0MmEsIDB4NjlmYWYzZDMsIDB4ZTcwODdhM2YsIDB4YzcxYTlkOGIsIDB4M2ZiYzJiNjAsIDB4NzQ2ZGZiNTIsCi0JMHhiMzQ5ZDIzYiwgMHgxZmI5OTg3ZCwgMHg5ZjFiZWRmYSwgMHgwOGFhMGMzOSwgMHg4NjA2ZGQyYywgMHgzY2NiODY2NSwKLQkweDRkZTRmOTA1LCAweGQyMTM3OThkLCAweDMzZjVmNmM3LCAweGYwZGQ0M2I3LCAweDAwNjYwNjg2LCAweGYxMjMwNGY1LAotCTB4MTJjN2YyMGIsIDB4M2UxNTcxYWYsIDB4ZDliMTI5ZDksIDB4OTk0MjY2NTQsIDB4Njg5MmYzOGEsIDB4OTMwZmRmNWUsCi0JMHgxZTc3MWU4OCwgMHhkMDllOWRlZSwgMHg2OTg2N2NkZiwgMHgyMWU4ZGRhOCwgMHgzNDdkZGE4YywgMHhkMjM1NmYyYywKLQkweDExY2E4MDViLCAweDM2NjBmODg0LCAweGUwMTQyNTliLCAweGFhZmEwOTJiLCAweGUxMjE1OTVhLCAweDRkNTYwOGYzLAotCTB4YTJlNjEwZTUsIDB4ZWNjNjA1ZjIsIDB4YWNjZjZjNDYsIDB4NjMzMzg0NjYsIDB4N2UxMTgzNDMsIDB4NWViNGYzYzQsCi0JMHhlNmU5MGFiYiwgMHg5Yjc3MDI2NywgMHg4ZTBmNGUyNCwgMHg4N2FjZTY2MCwgMHgzZDVhZTViZiwgMHhhNjMwMDc5MywKLQkweGQ4NDFlZDY1LCAweGYzMzY5NGM5LCAweGJkZTBjM2Q3LCAweDI1NTk0M2U2LCAweDQzYzhiZDAxLCAweGNkNWE3YzE1LAotCTB4OGM2ZmRmODgsIDB4YzZmMDBkZjcsIDB4MTdmN2UxZGYsIDB4YTU3OGUyZTUsIDB4ODNhNjY1ZmIsIDB4NmEzNzJlZjEsCi0JMHhlZDg4ZGI5OCwgMHg5ZGEwNWY4MSwgMHhiNWFmZmRlNiwgMHg1YTk3MjgzMSwgMHhlYjAwOTYyNCwgMHgzZTNhODcyOCwKLQkweGI2YTcxZjJmLCAweDUyZTBiZDM5LCAweDc4ZjBlMTZmLCAweGYwNDg5MmRhLCAweDhlZGI1MmU4LCAweDMzZmE0MzRkLAotCTB4MmMzYWQyMmYsIDB4MmU3ZTRlMzgsIDB4MTEzNDcxODMsIDB4YWYzOGI0OGIsIDB4ZDA0ZmVmYzMsIDB4ODJkZTIwYzcsCi0JMHhlYjM3YzRkNSwgMHhiNmVmOTQ1YiwgMHg2NGZjNzE5OSwgMHg3OGYzMjlkNSwgMHhhOTkzZGY3OCwgMHhmMWUxZGI2NiwKLQkweGNkYzZhM2Y5LCAweGY3Y2E0N2M4LCAweDNmMWMyY2JhLCAweDEyODEyYjY3LCAweDk3Y2YzYzkyLCAweDgzOTdkYzY0LAotCTB4ZmIzMjk3ZmQsIDB4YTVhM2E0N2EsIDB4N2I3MzMyMzUsIDB4MGQ3OWZkZDEsIDB4NmI5MmY3YzcsIDB4YzYzZGNjODEsCi0JMHg0Y2M0NWZhYiwgMHg2YjkyZDc1YSwgMHhiY2ZjZjQ0MSwgMHg2ZjNiYjc4MSwgMHg5ZWYxNzRlMiwgMHhjN2M1ZDM4NSwKLQkweDg4NWZiYmUyLCAweGFmMmRiZmZhLCAweGVhZjJiZWFjLCAweGVmMWYwYmYyLCAweGQ2ZTVjNDU4LCAweGE1NDc0ODdiLAotCTB4NDRjZTdiNTIsIDB4ODhmYWM0ZjgsIDB4ZjVjYTJkNWUsIDB4ZTY2Njk1YjMsIDB4M2FkMGZkZDYsIDB4ZDdiNzMyMDcsCi0JMHg1ZGRhZmI3NywgMHg0MGY3MzAzMywgMHg2ODU5Yjg2ZiwgMHgxYWY1OWVmZSwgMHhjYWQ5ZmRlOSwgMHgzMWMwOWI4OCwKLQkweDllOGUwN2NhLCAweGUwN2NlM2YxLCAweDg5ZjhmZDc4LCAweDY1NmNmZWY0LCAweDFmYzY0ZGYyLCAweDYzZjE4MzcxLAotCTB4MTllZmU2N2MsIDB4YWY5ZTllMzcsIDB4MjBiMTU1NGQsIDB4OWZiNWFiYTAsIDB4NmNjNDljZTgsIDB4NzRhN2FlN2EsCi0JMHhiYWQ2ZWY4MiwgMHhmZDJkZTkyNywgMHg0ZDgzYWZmMCwgMHhlMTYzNjI4YSwgMHg4YjljYTM3ZCwgMHhiY2Q5N2M3NCwKLQkweGFlN2M4Y2M4LCAweDc0YjkwNjA5LCAweGQ4ZDdmNDFiLCAweDcxODBlZjcyLCAweDAzMjFjMTc1LCAweDVhYWY3ZTkxLAotCTB4ZGY1ZDY4ZTIsIDB4MWQxMDU3MDYsIDB4YjQ3NDNiN2YsIDB4OGZjMTg4ZWMsIDB4N2Q2MWU0NTQsIDB4OTk3YzkwZWQsCi0JMHg1OWZhYjM3OCwgMHg3YWU1ZjM5MiwgMHgyMWQzN2RmZSwgMHg5ZmU0NGE2MCwgMHhhZjQyZjVkYiwgMHgxOGJjYzlmZiwKLQkweGQ0MzU1M2JlLCAweGY0Yzk4ZmFlLCAweGY5OTRjN2NjLCAweGIzM2M0MzM2LCAweDk0MzBmYjI2LCAweDgxOWI4ZjAzLAotCTB4ODAxZjg5NmYsIDB4NWFiZDYxYWYsIDB4M2JiYmZlYzksIDB4OWZkODFmODAsIDB4OGExZWFjNzUsIDB4MjRmNjBkNmYsCi0JMHg0NzFmMTdiMywgMHgwOWZkNzBjNCwgMHg3Mjg1MTBkYywgMHhhODZhYzFkMSwgMHg0YWJhNmYyYywgMHhmZjAwYjY3MCwKLQkweGY3OTRiYWUyLCAweGUwODdhY2U1LCAweGMyY2Q3YzhlLCAweDE2ZDUyNjkxLCAweDRmNjRkZjdhLCAweGNjZjM0YmNhLAotCTB4NzhlZWNmYTMsIDB4MDE1MGU4YzcsIDB4ZmQwZWU5ZmYsIDB4ZDllMTA4MjMsIDB4NmU5OWVlYWQsIDB4MjJkNWQyODUsCi0JMHg3N2MzN2EwNywgMHg4ZmU3MGM2NCwgMHg0ZWJmNDMwOSwgMHg2NWU3ODc2ZiwgMHhkM2U0MGZkOCwgMHgyNzE2NmYyMywKLQkweGQzMjlmY2ExLCAweGJjZTNhNGY1LCAweGY3ZjliYzhmLCAweGRmZjc5NDc0LCAweDg2MWUyYTFlLCAweDdiNDI3N2NmLAotCTB4M2RiNDEzYjIsIDB4ZjFhZjU2NjUsIDB4YTFkOTk5ZTIsIDB4OTMyOWViMWEsIDB4ZWY4OGUyNjMsIDB4M2NlZjlmZmMsCi0JMHhlNzE4MzU1NCwgMHg4ODYyMDBkMSwgMHg1Njc3YzA4NSwgMHhlNWY3MTdiZSwgMHhkYjA3MjQ0MCwgMHgxODY3Mjg1MywKLQkweDBiN2E5N2M4LCAweGNhZjc0ZGRhLCAweDNlY2E1NzI4LCAweGVhMDRkYjAyLCAweGJmNWNjZDE5LCAweDRlNjUwYzY3LAotCTB4NjdkYTBjNTUsIDB4N2M0NmNkMWYsIDB4Y2Q2YTY1OTUsIDB4YzA0YTU4MmEsIDB4MWFlNzM2YTgsIDB4YTk5MDFmNzgsCi0JMHgxZDFlYTMzNywgMHg1ZjdmODQzZSwgMHgwZTNjZmE4YiwgMHg0NDBmNjdmYiwgMHhlNDE0ZmRiYywgMHgwZjI0N2ZlYywKLQkweDJiZWNmY2VhLCAweDA2YjJhOWY3LCAweGRjYTk1ZWY4LCAweDAwZTUxZDNlLCAweDMxZTk4NWM4LCAweDA3ZDk3ZTMwLAotCTB4YjU0ODlmNWYsIDB4MzA5ZThiNjAsIDB4ZDBiNzRmYzQsIDB4ZTMxMjdmM2YsIDB4Mzc5MzFhM2MsIDB4ZmJhYWU5MTMsCi0JMHhlM2Q3NzdmZSwgMHhiYjI0MzdhMywgMHg4OGUzZDcxZCwgMHg1ZjUxNWJkNCwgMHhlYzY3MDhiMCwgMHhjZWJjMmY0YywKLQkweGJhMDk1MThkLCAweGJhMDFlZTAxLCAweGI2ZTYyZTFkLCAweDc5NmJiMDY3LCAweDY3MjVlOTMwLCAweGI5NDNkMjA4LAotCTB4MWU1MWQ5OGEsIDB4ZDQwMDY5YjIsIDB4ZjMyZTkxZGIsIDB4ZjVhNjY2ZDIsIDB4ZDBkNzlmYTcsIDB4NmM2MmNiNzgsCi0JMHg0YWJlNzA4YiwgMHhjZDY2OGZmYiwgMHhjM2Y3YjM0ZCwgMHgwNGE5NDg4NywgMHgyMWViYWQ0ZiwgMHhhOTRmNjc5YywKLQkweGYwMWRiYWQxLCAweDgyYmUyMWYwLCAweGQyY2QyZjdlLCAweDkzYjA2NWI5LCAweDBkYzYzNWJhLCAweDI3ZDFkMDEyLAotCTB4MDc1YmYzODEsIDB4MTg0ZmZhYzEsIDB4Y2ViODE1ZWQsIDB4NWU0YzBmZDksIDB4YzhlOTc1OGYsIDB4YTQ3MmNiNDAsCi0JMHg1OWVkODVjYiwgMHgwNjM5OTc4OCwgMHhiZWY4YzNmYiwgMHgxNjFmNmY0NCwgMHgzY2JjNGIwNiwgMHgwMDM0OWVkNCwKLQkweDQwZGU2YTk1LCAweDk3OTY2ZjBlLCAweGZjZWZkNzk2LCAweDc1M2M3Y2Y5LCAweDU0YjdmYTQ2LCAweDMxYjdhNWMwLAotCTB4NDlkOTAwNmUsIDB4Njc0ODBkYWYsIDB4MTUyZTlmMzAsIDB4ZDBmZDQwMmIsIDB4MTVmYmU2MjUsIDB4MjVlNjIzZTgsCi0JMHgyNzljMGJhNywgMHg3ZGExMGJiNSwgMHhlZDQ5ZGQ2MSwgMHg5N2Y1YWYyMiwgMHhlYWUwODU4MiwgMHgzYTdhMmVjNywKLQkweDE3NDVkYjg2LCAweGRiZmVmZGY3LCAweDlkNTBjMDVmLCAweDQ0NDgxY2RmLCAweGJhNThiNWJiLCAweDc2ZmFlYjQ0LAotCTB4NjJmOWM5ZDcsIDB4YmViOGQ1N2QsIDB4YTI3YjdhNDcsIDB4MTJhZWIwYjUsIDB4OTcyZDYxZDcsIDB4ZWE3ZDYyMWYsCi0JMHg1YTFmYzQ5ZSwgMHgyZGFhOTc1ZiwgMHg4MGUyZTg4NywgMHhmMThmYWU2NCwgMHgzYzZkMmJmNCwgMHhmNDA1MTM5OSwKLQkweDNjMTc1MDVlLCAweDk2NzRlNjVhLCAweGU4NTY3NDg4LCAweGQxNzg4Zjg0LCAweDAyOGUzMmIxLCAweGRlNDJlNTlmLAotCTB4ZjAxNGFlZjUsIDB4YjY3NmUwMDksIDB4ZmJlNTFmMDIsIDB4MzNlMGZjNjcsIDB4OGQ5M2RkNWYsIDB4MmFiZjk4ZjMsCi0JMHhhOWU1YzU1OCwgMHg3OTQ3ZTg5MywgMHhlZmE1NjBiZiwgMHhmYjE0YWI3NywgMHg0OWM5MzFlNywgMHg3ZWJjNjZmMywKLQkweGRjZWMxMWQwLCAweGVhOWQ3NTA0LCAweGEyZjc4N2VhLCAweGIyYTY5MGRkLCAweDJkYjBkZGEyLCAweDY4YzA2NDAwLAotCTB4ZjAyOGZlYzYsIDB4MDdjODAyZjMsIDB4ZGYzZDA4N2QsIDB4MDIyM2NmODAsIDB4Njc4OGZmNzgsIDB4ZTgyYWNlNTQsCi0JMHg5OWExMzc5ZiwgMHgzMmE1ZjBlOCwgMHg2Zjg2NTVhMywgMHg5OGUwNjQyZCwgMHgzMzE2MTRjMCwgMHg2N2Q5ZDkxYiwKLQkweDUwZmRmZmM3LCAweDY4ZjNhYzNiLCAweGYwOGRkZDhjLCAweDE1NTAzMDVmLCAweGMzY2QyMWZkLCAweGRhMDY2MjNlLAotCTB4MWMzOGUzNmYsIDB4ZmQxN2IzYWYsIDB4OTk5MzNmZTAsIDB4YjFlNDY0MzUsIDB4ZmJlNDJhY2QsIDB4OTRiZTY2OTksCi0JMHhlM2U3MTIyNSwgMHg4MzRkOTk3YiwgMHhkOTlmYmJkZiwgMHgyZWE5ZGRhOSwgMHg5M2ZkMGRhZCwgMHhjMTViZTg1MywKLQkweDBlNjAxZmJjLCAweDM5ODczZTdhLCAweGRjY2I5Y2E5LCAweGFjYTdmZWQ0LCAweDFmMGFlYTlkLCAweDA4MmZmZDAwLAotCTB4M2U3ZmY0ZTUsIDB4ZjliYTI2NWMsIDB4MzI3ZGU3MTgsIDB4NGFlODdkMzAsIDB4Njc4Y2M3NTgsIDB4NWZjODEyOTMsCi0JMHhmMDQ0MTlhYiwgMHg2N2JjZDliOSwgMHg4ZjhlMWM0OCwgMHg3MWRiZDhjNiwgMHg2ZmRjZGU5YywgMHg3MTgxYWM1ZSwKLQkweGQxMzc3YTU0LCAweDk4OWM5ZjVmLCAweGUxZDA0ODM0LCAweGI2ODljYjBmLCAweGNjN2YzZWRlLCAweGI4NzAwOTE4LAotCTB4MmVmNGEwNGIsIDB4NjNmOTMxNWIsIDB4Mzk5MWIyZDksIDB4ZTM2ZDNmMDAsIDB4NTNmYTI3NjQsIDB4NDNhYjZjYzcsCi0JMHg5M2FhNjU0MywgMHhjYWIzNmQ1ZSwgMHg1OWRmZjdhNCwgMHg1MDE5NGNjZCwgMHhjNjk0Njc3ZiwgMHg2Yjc0NDU1YSwKLQkweDVkM2MzZDIzLCAweGNkN2Q5NzhjLCAweDc4MDBmNmZlLCAweDU4NmU1ZDNlLCAweGRjZjUwYzFiLCAweDc5MGZlMDIxLAotCTB4ZDBlNGQ1ZDEsIDB4YjNlNDZhYmQsIDB4Y2ZiZWYxMjksIDB4ZmFmYWE1YTcsIDB4NmFiMzc3NGQsIDB4M2QzYmUxMTksCi0JMHg2MWRkYjdjMywgMHg5NWQwMGI4NCwgMHgzZmZiOTYyYSwgMHhmZTFiMzg2YywgMHg4ZmUxZWNiZCwgMHgzMWY5MTQ3YiwKLQkweDFiYjZhYWVkLCAweGQ2MjYzMWU2LCAweGY1ODU4ODZlLCAweGVjZmJiZjJmLCAweDUzMmVmYzdjLCAweGEwYzYwZmIzLAotCTB4YjMyMTNhNWUsIDB4NzNmZWYwNGQsIDB4ZDgxYjEzZTAsIDB4ODI1NjVmNGIsIDB4Mzk3ZTAzMDYsIDB4ZDYxZmY2MDcsCi0JMHgwZDNiMDJiZiwgMHgxNjk1OGJjYiwgMHg1ZDgxMmYyYSwgMHgyYWJiZWY4NSwgMHgyMDdmNTRhZCwgMHgxNjI0MmYzNiwKLQkweGMzNjhiZjQwLCAweGVkMWRiNTE1LCAweGZhMmNlYWZlLCAweDVmNDEwYWZlLCAweDJhYjcyYTZkLCAweGJiNjdmOTEwLAotCTB4Yjg3ZDQ1NjQsIDB4MjEzNmQwYzIsIDB4YTJiNmUwMTAsIDB4MTgwYWM2M2UsIDB4YWU0ZDQ1NjYsIDB4YmU3ZTljNTYsCi0JMHhkMTA3MmYzYiwgMHg0NTU4ZjRiOCwgMHhkN2E1OTYyYiwgMHhkMjA3NjYyNCwgMHg4YmNlNDE3ZSwgMHgzZWJiZjFjNiwKLQkweGRkZDY3Y2ZjLCAweGU1N2NmY2YwLCAweDg1ZmVmYTU4LCAweGJmN2QxYjRhLCAweGNhOTczMmIzLCAweDNjN2I1ODhhLAotCTB4NzRiNWIzYjYsIDB4MjBiNDBlYjQsIDB4N2QxMGFlMzYsIDB4YTFkMGRkZGMsIDB4YjY3YTgyOGUsIDB4ZGYyMWIyNGQsCi0JMHg0ZTYzNjlkZCwgMHhhYjc1ZTAyNywgMHhhZGE5ZWI4NiwgMHgwZjkwYTdhMCwgMHg3Y2NkYTdjNywgMHg3YTg2NjFlMSwKLQkweGUzOGU5ZWM0LCAweDMwYTUzZmRjLCAweDNlOTljNzFiLCAweGRiMWFhMTc2LCAweDYzMWRmMDNkLCAweDc0M2M2MzAzLAotCTB4NjViYTMzNzYsIDB4ZjJmYzcyN2UsIDB4ZGRkMTEyOWIsIDB4MWVlNTk1NjUsIDB4YzcxY2FiYjQsIDB4N2EwZmIyNjUsCi0JMHgxODU1MzBkNSwgMHhlMTkzZjdiZiwgMHg3NGUwMDc0ZSwgMHg3MGI4ZmVmOSwgMHgzNWNiNjc5NCwgMHgyZjEwZjA5NiwKLQkweDI3ZTlkNjM5LCAweGRjZjczYWM3LCAweGRmYWRlMTE2LCAweGRmNWM0MzNhLCAweGQwZTUwNWZlLCAweDgxMGU1YzY3LAotCTB4YjdlZTc0YTUsIDB4MTE4Y2E3MjgsIDB4OTc2ZmM0NTYsIDB4NTIwMDQzZjAsIDB4Y2I4ZmE4ODEsIDB4NDA2ZjgyYjQsCi0JMHgzM2JkNjA4ZSwgMHg4M2M4MmQ4MCwgMHg1MWFiZDY3YSwgMHhmMDBmOTAxMywgMHg4ZjI0OTY3YiwgMHhmNTdjNDk5YywKLQkweDU4NWZkOGQ5LCAweGU5ZGJkZjNjLCAweGRmOTdmMjVhLCAweDUzYjJmZDQyLCAweDVlODBkMGU1LCAweDVkNWNjY2JhLAotCTB4ZWFiYWUzYWYsIDB4MTdiNDU2OGMsIDB4YzA3NTI1OTMsIDB4ZWZlYzEwY2EsIDB4OTY0YmJlMjQsIDB4MjA5NWVhMmMsCi0JMHhmYWJkNzY0NywgMHgxOWU3ZTBjMiwgMHg4ZDhjMDlkYSwgMHg2YzZmZjc4NSwgMHhmMzM5MjQwOSwgMHg2NjdhYzY4NiwKLQkweDgxN2ZmNjI1LCAweGM5Zjk3ZmY3LCAweGMyNmYzZjQ3LCAweGQxZDI4OWYyLCAweDEwNTk0MjhmLCAweGNkNzA0MjFiLAotCTB4NzBlMTRkZmYsIDB4NTExMWIzYTQsIDB4NmYxODA2ODAsIDB4NmRjOTQxZjcsIDB4YWQyYzY3NDgsIDB4NDg5YWYwZTYsCi0JMHg2ZGM4Y2Y5OCwgMHg1MGMxYWExZCwgMHhhYTkzYWE4ZSwgMHhjYTYxMWNiMCwgMHhmYmMzMjYzZCwgMHhjZDBiNThiMiwKLQkweDhjNDM0YzYzLCAweDMyZWM4NTFjLCAweDlmOTdmOWQ4LCAweDZiZTFiZDkwLCAweDVjZDZhNDg3LCAweDc5OTgzMDk5LAotCTB4OTJlMTkxZWMsIDB4YTVlMjIyZWIsIDB4MzQ3YTc0Y2EsIDB4NGQ1NjNiZTksIDB4Yjk2ZmVjZTMsIDB4Njk3MzRmZjcsCi0JMHhlMGU5NjAxZCwgMHhhZDZhMTdiYywgMHg4ZTljMWZhNCwgMHhjYmIzYTQ1YSwgMHhkOTJiNjRmNiwgMHhlNzhlNzllNywKLQkweGVkOTdiZjEwLCAweDE3ZDQ1NjYxLCAweGZmNWZjMDA3LCAweGEzM2ZiNjExLCAweGFjMWU3NWE2LCAweGYxODQxOTNiLAotCTB4MDdlMDAxOWIsIDB4ZTk3ZGUwMWIsIDB4OTNkMjFlYTgsIDB4MGMyZDQzYTUsIDB4YzVmNDNiYmYsIDB4M2UxMTcyYmIsCi0JMHg2YmZiOGQ2NSwgMHhiZDEyOWM2OSwgMHg4MmQ5ZmQxNSwgMHg1MTViNTdmZCwgMHhjY2M5YjI2ZiwgMHhkNWY0ODA5YSwKLQkweDlhYmZlYmM4LCAweDFlYTJiMzY0LCAweDg2ZmRhODJkLCAweGE4ZjJkYmQ3LCAweDgzZGUwNzllLCAweGU2MmZkYjFhLAotCTB4NDJiM2Q5NzYsIDB4NzRmNmIxMmYsIDB4YjI0NDViOTIsIDB4N2ViZTBmMTYsIDB4ZmRmMWFmMDUsIDB4NjQ0NzE4ZDYsCi0JMHhjZmEzZDE4NSwgMHg0MTZkMGY0MCwgMHhmMmQ0ODhmZSwgMHhlNjEzNmRmZSwgMHg2ZTVjMTM0NiwgMHhlMzI5MGY1MSwKLQkweDBlNjVhYjNjLCAweDJkNDVlYTAzLCAweDIwZjU5N2Q3LCAweDYwM2U5MDJmLCAweDdjNzExN2ZjLCAweGM5NDY2ZjQ1LAotCTB4YWMyMzVhNTIsIDB4MWQ1OWVhM2IsIDB4ZjhiN2IzOTcsIDB4ZDYwM2Q5OWQsIDB4ZWM1NGRlOTMsIDB4MWY2MTcyYjgsCi0JMHhlODEzNjE1NCwgMHhiZmI0NjVkZiwgMHg4OTcwZjI4MiwgMHg2ZDRjYjNkMCwgMHhlM2JiNDU0OSwgMHg3NzZkYTMzMywKLQkweDYwNzFkOTJjLCAweDdmNDhhOGU3LCAweDY1ZWIxZWZkLCAweDcxNzVkODMyLCAweDMxOWQ3NjVlLCAweDE3ZjQ5NmU0LAotCTB4ZTNmNmQ5MzMsIDB4N2RiNTZlN2EsIDB4OWZlNzk4YTgsIDB4MDM0MzNjYzUsIDB4MWQyYzlkYTIsIDB4ODdmODBhZmQsCi0JMHg3ODU4ZTk4NCwgMHg1ODcxODZkMiwgMHg0NDdlZjFmNCwgMHhjMTU2ZWIyNCwgMHhlMTFkMDczYSwgMHg4YmIxZTNmNSwKLQkweDFiMDVhY2I3LCAweDc3YTQ3ZGZkLCAweDMzODI0NzBlLCAweGZiNDMwMDUwLCAweGNhNmU3OTRjLCAweDYyMTBmNGUwLAotCTB4MTFkZDkzZDcsIDB4NTQ2MmIwM2UsIDB4MzM3ZDE3ODUsIDB4YzIwYzdiYjUsIDB4NjUzZmQzNjMsIDB4ZGI3Njg0YjcsCi0JMHhmYzUyMzNmZiwgMHg4NmRlN2ZjNywgMHhmZDdmZWUzOCwgMHgxNTBlNjI0YywgMHgyZDE1ZDdkMiwgMHhiNGQxNmJiNSwKLQkweGY0M2RmZWVmLCAweGI1NGMyOTZiLCAweDAwN2IzZmEyLCAweDcxYzdhZGYwLCAweDhlYzk2YTY2LCAweDA1ZGI0MTZhLAotCTB4MDljY2I3ZGEsIDB4ODZmN2I5MjMsIDB4Yzc0MWNiODYsIDB4ZGZkZTAwOWMsIDB4ZjdjMTAwMDAsIDB4Njg5ZGMzYWIsCi0JMHg1NWQ2MGRhNywgMHhlMzg2OTdiYywgMHhkZjEyMDU1NywgMHgxYjljNjhiNCwgMHhjN2ZjNzE2MiwgMHhiMmY4ZDIwNiwKLQkweGU4ZTFiZGZlLCAweGU0MjI3ZDdmLCAweDllZTQ5NTUxLCAweGM3NmRmMThiLCAweGVmYzMyZDE1LCAweGEzYmIwNGQ1LAotCTB4NTM1ZWExY2EsIDB4N2ZkYTljMzgsIDB4ZWQxOTJhMDIsIDB4NWI2MDlhYzQsIDB4MDNkOWNhMjQsIDB4ZmU0OTk0ZmYsCi0JMHhiYTgyOGNkNSwgMHhjNTEzZTQ5MSwgMHhkODY2NmE2MSwgMHhmZWExODMyMiwgMHg0ZDRiYzBhMCwgMHg5OWZlYjNhZCwKLQkweDRjOWU3YzUwLCAweGI4YzYwY2UzLCAweGUxOGJiNjFlLCAweGMzNDVmY2UzLCAweDA3YTdkOWZiLCAweDA3NWVkMWFhLAotCTB4ZjA4OTE0NGQsIDB4MDI3ZTZkZmIsIDB4ZTNjMmQyYzUsIDB4MDg3MWM4MjYsIDB4Y2ZiN2UxNWYsIDB4MTk0NzcyMTYsCi0JMHhiM2U4M2IxZiwgMHhmZmUzMGVkMCwgMHgzN2E5MmNlNiwgMHg1ZmRkN2YyMCwgMHgwZDAwZTg2MCwgMHg1ODI5M2VjMiwKLQkweGY1YmY0MjYzLCAweGQ2ZWNiYjdlLCAweGY3NjA1YzgxLCAweGVjZmFkYjY1LCAweGRmMWM1ODgyLCAweGJkMjFjNzI2LAotCTB4OTM3ZTJiZTUsIDB4ZjVjMjMxN2IsIDB4ZGIzZDFlY2QsIDB4ZTAyMzc2NDQsIDB4YmE3YWVkMzUsIDB4MWZkZjgwYmIsCi0JMHhmOGUzZmU4MCwgMHhjN2ZkYmNhNywgMHg5ZmU3MWQ0MiwgMHg2ODg3NDgwYiwgMHg0M2RhMDYwZiwgMHg0ZGU1ZmU3MCwKLQkweGY2ZjI5ZjkzLCAweDU5MmNlNzJiLCAweDQwNzI0NDE3LCAweGE1NTJmNzdjLCAweDEzMmZhOWVkLCAweGE1Yzg0ZWQwLAotCTB4ZjJhZWY5NTIsIDB4N2E5OWRjYmQsIDB4ZmU4YTE0OWIsIDB4NzE4OWNlOGQsIDB4MGVjMjA1YzAsIDB4NjdiOWQ3MmQsCi0JMHg2NzNlM2YyMSwgMHhlZmEzMGZiMCwgMHg0NzRjNWQxNCwgMHg2Njc0MzE3YiwgMHg0NzVjMDBmMiwgMHgwZTYwYmJmNywKLQkweDAyMzNkYjQxLCAweDgwNTA2N2NmLCAweDRjMmI5ZTIzLCAweGQ0NGMzNzQ0LCAweDQ4MThiZmVkLCAweGRmMDRiOWY2LAotCTB4NjJmYTNhNDEsIDB4ZGEzYjY5OGQsIDB4MmRhZDc2NzMsIDB4ZDFkMjA5NzIsIDB4NDdiMjQwZjIsIDB4YzFkYzgwY2UsCi0JMHgwNDk0Y2Y3MSwgMHhmYmNlMWQxMywgMHhjOGZiZjE3NSwgMHhiNGYyNjc2ZiwgMHg1YTY3OWY0NCwgMHhlOWY3YmRiOCwKLQkweDg1YWRkOTRhLCAweGJjY2Q3N2Y1LCAweGY0MjI0Y2Y2LCAweDQ1ZjU1YWViLCAweGRiMjg1NmQ2LCAweDFhMzVmY2Q3LAotCTB4MzViY2QxZjUsIDB4ZGZiMGQzYTUsIDB4ZDM1NWEyYmMsIDB4ZTIzNzRlMTEsIDB4M2EyNTc5ZjMsIDB4NmUxY2NjYzEsCi0JMHhiNzZjZTM1MywgMHg2NzQyYmUyMywgMHgzOTQxY2I1ZSwgMHhlNGI4YjgzZCwgMHgxN2MxOGMzOSwgMHhjNGVmZDljNywKLQkweGRiNjk5N2Y1LCAweDY1MWUxMGNiLCAweDhkMTY3YzZmLCAweGYzNzc3M2Y2LCAweGExNWI3YmNiLCAweDI3ZDkzMzZjLAotCTB4MzViMmJmNjAsIDB4YzNhY2M1NzcsIDB4NTVmZjg0YzEsIDB4MDE3YzA2YTYsIDB4NjcxZTdkMWQsIDB4ZTVmN2MxY2YsCi0JMHhkODg5ZGM5MywgMHgyZGE2OTJlZiwgMHg1NmM2ZTEwNywgMHg3ZGRkOWFkZCwgMHg4MGZlYTViMSwgMHg0MDYwN2U4NCwKLQkweGIyOTUxOTRiLCAweGQxZTcxZDMzLCAweGE0ODNiOTI5LCAweGQ4MjM4NDM4LCAweDRiZWViMDBmLCAweDcwNTA3NzY2LAotCTB4Yzk4ZDQ1MmEsIDB4ZTlkZTI4OWUsIDB4NWE5YTNlYmIsIDB4NDAzYjg4OTgsIDB4NmM5NzYyYmYsIDB4MzJkZDIwMzMsCi0JMHhlYmU3MTZhNywgMHg5ZTE4YmVkZiwgMHg3YzViYmI1MywgMHhmYzVjYzQ1ZSwgMHg5M2QzNzA3OSwgMHhhYjdkMjA3NywKLQkweDM3ZjcxYjk5LCAweGQ4NGFlZTJlLCAweGJjYmZmODhlLCAweDZmNDRlNWZmLCAweGJjYmZkODNmLCAweGZkN2NiZTdlLAotCTB4MDBiZTkwOTcsIDB4ODllMDk3OGUsIDB4NDFhYmU5MDYsIDB4NzVmZmUzZTcsIDB4ZmEyNDhhZWQsIDB4ZmQxMWVmODIsCi0JMHg3MjRhZWQ3NCwgMHg4ZjkyZjI2ZSwgMHgzMDdlNDI1ZCwgMHgwNjZiMmJhYiwgMHg5NWNkYmRkMiwgMHgyMjk2NzY4NSwKLQkweDk1ZGU5ODJmLCAweGIyNWJmZTRlLCAweDE1ZmQxZDJiLCAweDNjYjBkZTQ1LCAweDc3M2QyMjU3LCAweGZkYjExMmJhLAotCTB4OGQ2N2Y0MDEsIDB4ZWQxNmVmOWUsIDB4YzRkZGFhOGUsIDB4NTUwZThlZTMsIDB4NmM0N2Q2MDYsIDB4ZWUzMmJhYzcsCi0JMHhiNDk3ZDZjZCwgMHg0ZjUzZWI1NSwgMHg5ZmQ2ZmE3MSwgMHg5NWZjZjIxMCwgMHgxZjhhYjQ1NywgMHg4MmJmMGIyYywKLQkweDVhM2MxNDU5LCAweDcwNDZmZGI4LCAweDgxNTZiM2Y5LCAweDU5NTFjM2NiLCAweGJmODAzNzE4LCAweGRjZGU2OTYyLAotCTB4ZmI4NTdlNmYsIDB4ZDk0NjA3Y2QsIDB4MmFhZTUwYTMsIDB4NjA4MWY5ZmUsIDB4NWVhMmE3YTgsIDB4ZWE1NmYzZTUsCi0JMHhlN2ZjMWMwYSwgMHg0YmNmZTZiZCwgMHhmN2JlMzBhMywgMHgxZjhmMWM0NiwgMHhiY2I4MTk1NSwgMHhiOTcwMzJhYSwKLQkweDE1OTRkYWI0LCAweDM0YWJlZjhlLCAweGEyYTZjNzYwLCAweGVlMmM3MmJmLCAweDBlMDc4ZDRiLCAweDM2NmQyYWU3LAotCTB4ZjU3ZGMxMTAsIDB4ZTk0NzViYTUsIDB4NmQ5NzZmOTEsIDB4YTZmN2E1MWIsIDB4NjM5ZGFhOGYsIDB4ZGU2MDU5OGUsCi0JMHhhZGFhNzY5NywgMHhiNTJhODRiOCwgMHhkN2I0NDlmMywgMHgyZWNhNzZhYSwgMHg3YWY3YTMwNywgMHg2NGJmYjQxYiwKLQkweGRiMDI3MjNjLCAweGUzYzZkZDJkLCAweDY1ZmY0YTE2LCAweGY5NmRiMzViLCAweGIxMWVmMzVlLCAweDY5YmUxN2QzLAotCTB4YzhmYWRmMmUsIDB4NTFmYWRmMjYsIDB4ZmQwNjQ1YjQsIDB4Yjk0NmZkZWIsIDB4OGU2M2ViN2QsIDB4N2ZjZmQ2ZjksCi0JMHgyNDJjZjBmOCwgMHhmMWQ5MDJjMywgMHhlM2Y2OGNhNCwgMHhhMThlNzM1ZiwgMHhjMGVhZjkzZSwgMHhmNzhhMjBjMSwKLQkweDhhZGY5NjdjLCAweGFkYjJmMTc2LCAweDNjMDc3MGJlLCAweDM4Mjc2ODRhLCAweDc3YTQ0ODc2LCAweGZjZmU5ZDBiLAotCTB4MDMxZjNmZDIsIDB4NWYzODk0NDYsIDB4MTRkZDM3YjIsIDB4M2FhYjQ3MzEsIDB4OWRmNmZhZTYsIDB4ODZjYjM1Y2MsCi0JMHg3Zjk1YTU3MSwgMHg4YzcyZmI4YSwgMHg1ZGRiZGM2NywgMHgwZmU4YjQ1YiwgMHg0NmY3N2ZmOSwgMHgzNjhjY2I3YywKLQkweDE2MzdjNjBiLCAweDdlZWZlNThlLCAweGZiMjI3MmI0LCAweDdjZGJjNzAyLCAweDcxZTkwNzMyLCAweGQyMjRhZmUxLAotCTB4MjVmNzBiYzMsIDB4ZDM3NDhkYmQsIDB4MTRjZTc3YjEsIDB4MTJlNTY3MmEsIDB4Y2JiODk0M2MsIDB4NmRjOTE2YjIsCi0JMHgyYzc5YmE4MiwgMHg2NTBmZGJlYiwgMHg2YjQ1ZWYzMCwgMHhhMWYxM2U3NSwgMHhmM2JlY2RmYywgMHhmYmUzNWE1OCwKLQkweGUxZDM1OTdlLCAweDZiYmVlMWJmLCAweGRhNDVmZTgxLCAweGE2ZDgyZWE3LCAweDM5NmI4YmYzLCAweGJkM2I0MmRmLAotCTB4N2U0NjJiZTgsIDB4ZjdkZDUxNzgsIDB4NWVlMmZlYmEsIDB4MTQzYWM0NGIsIDB4ZWUzOTkwZmIsIDB4NmU0ZWI4NjQsCi0JMHg4ZWRmODIwMiwgMHgzZDcyMDdmZiwgMHhjNGQ3NmNjNCwgMHg4ZGQ4ZjIwZiwgMHg5NWE5YWEzZiwgMHhjY2E1N2UxMSwKLQkweDhlMzk4OGZlLCAweDIwNzc1MWZjLCAweDBlYTk2N2NjLCAweGE0ZDFiMWVjLCAweDU3N2Q2OTg3LCAweDc4YTAwZWI3LAotCTB4MDY2NzNjMDcsIDB4YjU5NTdlNzgsIDB4YmU3ZWExNjUsIDB4ZjJiMjY4ZGEsIDB4OTY1YjU5MzgsIDB4YTBjYmVhMTksCi0JMHg2MDJiZjA4ZSwgMHgxMmE3MDRkNSwgMHhhNzMyY2I5NCwgMHhkZGI3OWIxYiwgMHhiM2FkZjRlMCwgMHg5N2I3NmU2YSwKLQkweDExODdkZGE4LCAweDlkYWNjNTFlLCAweGJkMWUyMWZhLCAweGJhYzA5NWRiLCAweDNiNDEwOTNlLCAweGIzM2ZhZmM0LAotCTB4ZGNiYzljNTIsIDB4OTVmYzI1YTgsIDB4ZjNhZjdkMzcsIDB4MGJmOGFmN2UsIDB4YzRhMmZmOGEsIDB4ZjQ1NzdlZTEsCi0JMHhiN2QyMDA2MCwgMHgzNTg3ZDg0NiwgMHg1YjdiOWQxYiwgMHg5NGViM2Q2MSwgMHgwMzE2ZGViOCwgMHg2YjA3YTdjOSwKLQkweDdiMDdiY2I5LCAweDU5ZDcxMTMwLCAweGQ2ODUyNWIzLCAweDhiNjRhMGZkLCAweGY2YjY4NzU5LCAweDdmZDEzZDBjLAotCTB4ZDNkODMwNGQsIDB4OTI0NzY0YTEsIDB4MjM3NjAwYmQsIDB4NzMzZGFkZDksIDB4MTJlZGNlYjQsIDB4MzcyZThmZGEsCi0JMHg0ZjM1YzFkYSwgMHhjYTA2ZjhmMywgMHg5ZjZiYjI0OSwgMHg1MjdkOTAzMCwgMHgyN2RiODMzMywgMHhhOWMyNWIzNSwKLQkweGNhNzA1ZmZmLCAweGYyNTc2ODkxLCAweDkxM2NkNGY5LCAweDk5NWRlZGM2LCAweDhjZTE2M2Y3LCAweDY1ZjYwN2U2LAotCTB4NWU2YmRlYTIsIDB4YjJmZjVkOGEsIDB4ZjExMTNlZDksIDB4MjZiN2FjYWQsIDB4ZmI4NGM3YjgsIDB4ZTA2MGFjMWQsCi0JMHg3YWY5ZTkyZCwgMHgwMDdhYmZhMSwgMHhmZjA3MTgwZSwgMHhjNTZiY2E1MiwgMHhkZGE1MDk3ZCwgMHgxZjVjZjE3ZCwKLQkweGVkYjA0ZDY0LCAweDVlMjhlZDEwLCAweGIxOWFhZjllLCAweGE3OTgyN2U5LCAweDUyY2E4Y2YwLCAweDdmMDVlMzE1LAotCTB4ZDcxMTJkOWIsIDB4YzMxNmU1ZmYsIDB4OTlkM2M0NjgsIDB4Njc5ZTVjNTEsIDB4MDVmMWUwNGQsIDB4ZGI2YzViZjAsCi0JMHg1ZTIyZmY3MSwgMHhmZDc3MTNlNSwgMHg2MTRlZjhhOSwgMHhmNWU2ODViYywgMHgyZjhmMzY2NSwgMHgyOGYyMzI5YSwKLQkweGRhYjYwMzhlLCAweGY1ZjZmZTgyLCAweGJlZjllMzBiLCAweGVmMzZiZTY4LCAweDk5ZmI4ZmY4LCAweDM2MTcwMjhmLAotCTB4NWYxN2ZiODksIDB4YmU5MTI0M2UsIDB4OWEyNGY1ODQsIDB4MWJmNTllYTEsIDB4YmU3ZmM1MDMsIDB4YzE0NzdhMTQsCi0JMHgyNjUxZDAwNywgMHhjNzIxNjFlOSwgMHhjNjdlOTBjMiwgMHgxOWU3ZTg3OCwgMHhhNDBlMTc0MSwgMHhmZDM3OGIwYiwKLQkweDgzYzdkMmY4LCAweDA5ZWNmZjAyLCAweDA0ZDY5ZjZlLCAweDEzY2Q3YWYzLCAweDlmYTAzNzI5LCAweDY1MGZmZGZlLAotCTB4ZmNiNTM1YmQsIDB4MDFkZmJmYmQsIDB4ZGUzNmIwNzQsIDB4NzRmZTllMGIsIDB4NGNjZWQ0YzAsIDB4N2YzNWZkZWYsCi0JMHg4ZDk2YzgzYSwgMHg1N2U3MjhjOSwgMHhiNDU2MDE0OCwgMHhmZTA4NTdjNywgMHgxMTg0YjE1OCwgMHgwYWIxNDYzZCwKLQkweDgyMzVmOTA5LCAweDAwOGYyOWI5LCAweGM3MDE4MWU0LCAweGMwMGY3MWZiLCAweDdmMGY4YmRjLCAweGJjY2Y0ZDcyLAotCTB4MTY3OGRmZjUsIDB4YTg5ZjUzZWMsIDB4OWY2OWY0OGYsIDB4NzlmMThlNmQsIDB4OGE0NDU3N2YsIDB4OTZjOWZiY2YsCi0JMHhhOWY1M2U1MSwgMHhiNGZiYjdjOSwgMHhkZTNhZGJiZiwgMHhkOGNmN2VhNywgMHg2N2VkM2VjOSwgMHhkNGY4NjZkOCwKLQkweGM2YWNjYzZkLCAweGVlNTRiN2Y5LCAweGNkZTBmYjI0LCAweDk3ZGM1NzRhLCAweDY1YzNkNzA5LCAweDNlYzhlZTljLAotCTB4YTZiMTk1OGIsIDB4YWE2NzA3YmEsIDB4MGRjNjFlODEsIDB4MDYyMmIyMzgsIDB4ZWRlMzg3ZWEsIDB4ZTQ3NTFlYmMsCi0JMHhiMTk5OGM2YSwgMHhmMjE3ZTJiNywgMHg1NzIzODhmYSwgMHgzNDdlYTE2MywgMHhkZmFmMTE3ZSwgMHg3ZjVmYzhjMSwKLQkweDRjZjE3ZTI3LCAweDE1YzUyYTQ3LCAweDY2N2UyMThmLCAweDhhMzhhYjVkLCAweGFiNDdlMTZlLCAweDQxODkyZTY3LAotCTB4MjRjOTJmMWUsIDB4NjdlY2FlMzksIDB4M2Y2MzEzZGMsIDB4YmNhY2ZjODQsIDB4OGQ5ZmRhNTcsIDB4YWZiYmZkZTcsCi0JMHg3ZGRmZjk3MCwgMHgyMzc3Y2I4NSwgMHhmZTgzMjkxYSwgMHgzMmZjMTJmZCwgMHgwZTA0ZmVmYSwgMHg2ZjQxMzYyMiwKLQkweGE2MmZmZGE0LCAweDhiZWE1Y2Q3LCAweDk0ZmM4MzQzLCAweDNjNjE4YzZjLCAweGYwMTJhNWFmLCAweGQzNzA4MDlkLAotCTB4MzRhZWU5NTMsIDB4MzJhNDc5NTMsIDB4MmJiN2NhODIsIDB4ZTAxZjJjMmQsIDB4NGM5OTVhZGEsIDB4MmI0YWIxZTUsCi0JMHgzOTVlM2YzZCwgMHgyYmY3Y2E5NiwgMHhhODllNTQ2ZCwgMHhhZGIyYTVjYywgMHgwOTRhOGYzMiwgMHgyODc5YTk4YywKLQkweDM3NTg3NjNmLCAweDBlMmUxMDY4LCAweGJkMzlmMDc1LCAweGM2ZTUyZjI3LCAweGNlY2Q0YzcyLCAweGM2ODVmODI5LAotCTB4NWY2YzE4NmYsIDB4MzFkZDkzYzQsIDB4NzE3MTRjYzQsIDB4ZDM1YmJjZjEsIDB4NzNkMjIyZjMsIDB4YzE2NjE1ZDUsCi0JMHhhNmMzYjg3YywgMHg5ZmI0MTZkMywgMHg0NGY1MzJhYiwgMHg5YjRmNTJlZiwgMHhiOGViZTUwNSwgMHhiYWFmNWUwYywKLQkweDY3NTE2NmQyLCAweGZkZWEzYWYwLCAweDI4ZDc2MGVlLCAweGE1NTUwYmQ0LCAweDE4OWFlYjQ2LCAweDQ0OGVlZjdjLAotCTB4YTE1NzE5N2UsIDB4Mzg3ZmEyYjUsIDB4M2U2N2E3YTksIDB4YTMzOGYxZjIsIDB4ZjQ3YTgyZDYsIDB4MmRmNWE5YjAsCi0JMHg3M2NhM2RmMSwgMHhkY2MyYmJhOSwgMHgzNDU3ZGMyYSwgMHhlMmNjNTliNCwgMHg3YzBlMzgzYiwgMHhjMWY1MDYzNywKLQkweGJiZTE4N2I4LCAweGVkMDU2ZTM0LCAweDY3OWI4ZDA3LCAweGU0YWVmYmVjLCAweDBmZmQ1ZGY3LCAweGU0YTI3NzdmLAotCTB4NWVmOGRkZjUsIDB4ZmYzYTZlZjgsIDB4YmJlN2M1YWUsIDB4ZTVlYzk5NmUsIDB4MGZiMjZlMmIsIDB4MTFhZDgzYmEsCi0JMHhmYTk1NWYyOCwgMHg0YTlmN2MyNCwgMHgzM2QyNDI3MSwgMHgxOTZlMmNlMywgMHhlODg3ZWZmNywgMHgwNzBkM2NiOCwKLQkweGE1ZTBkMmYzLCAweDYyNzg5NTZmLCAweDY3NWYyZjVkLCAweDA4YmJhNTU3LCAweGIwOTI2YWY5LCAweDU5NjkyNjU3LAotCTB4YTk5M2MyMzIsIDB4OThmZTI4MDIsIDB4MWFkNzdmMmQsIDB4Y2RlNWY1MDUsIDB4OWRjYzI4ZDIsIDB4ZGJjYmE0OTgsCi0JMHg5YWFlN2U0NiwgMHhjYTE2MWRjYiwgMHhiNzUzMzJmNSwgMHhlZDBjYmUxNSwgMHg1OTQ1ODU0ZSwgMHg0ODZhZGYzMSwKLQkweDBmMTYwMWM0LCAweDNjYmIzODcyLCAweGZhZjUxNTM3LCAweGQ0ZGY5MTI5LCAweDQ4NGY2NDFjLCAweDliZGM3OTgwLAotCTB4MjU0YTcyMGEsIDB4ZDlmNzE5ODgsIDB4ZGU0OTAzNzIsIDB4Y2E0YTFmNzcsIDB4YTY3ZjdiNDQsIDB4MDE5ZmIyY2UsCi0JMHgzYzI2YTcxZiwgMHg3MjBkNTMzMywgMHg0YjAwZTY3MSwgMHhmYWM2NjRhNiwgMHhiNzBmNWUzNiwgMHhiZGUwOTdlYywKLQkweDczMzMzZDk5LCAweGMxZmZlZGQyLCAweDQ5MzRmYWZlLCAweDM4MWY5N2VkLCAweGFkZjgwMTM2LCAweGM4YjJmNzM0LAotCTB4ZmIyMWVjNTcsIDB4ZTQ5OGM3ZjYsIDB4NzdlMjg4MzQsIDB4OWVjN2E0NmUsIDB4MDNkMjI2YzksIDB4OGU1YjhmMTgsCi0JMHg5MmQ1M2JmMiwgMHgzNWEyZWQ4OSwgMHhmZjA4NDEzZCwgMHg5NGQ0ZWZlZSwgMHg4MzJkMDIzZiwgMHhlMzhhZjNlZSwKLQkweGYzYzJkOGJjLCAweGUzZjlmYzRhLCAweGFiZDcwMjcyLCAweDlmM2NmMWU1LCAweGFmNDIyY2E5LCAweDRhZTViMmE3LAotCTB4OGY3Y2EzMGUsIDB4M2ZmNDc4YmMsIDB4NTdlZGVhYzEsIDB4MDI3N2ZlYmYsIDB4NTk4ZTFmZGYsIDB4NDdmMWU1YWYsCi0JMHg2NTMwYTExNCwgMHhlYTUzMDA1YiwgMHhhOTZiY2MwZSwgMHgzMTQwMjQ3ZCwgMHg0ZTAwNmQ0NiwgMHg1NDdlYzVhNiwKLQkweDI0Y2RmYTZmLCAweDFiN2I0ZmI1LCAweDY3YmNmN2I2LCAweGQyOWYwNDM2LCAweGNmN2VhNGJmLCAweDhiYzZkNjZmLAotCTB4MmNiZDIxZWYsIDB4ODI1YzRlNjUsIDB4NGRhOWZlYmYsIDB4MGJmYzUxMGMsIDB4YTEwYmYzYzIsIDB4ZTM4YmYyMDYsCi0JMHhhMDU3YTA2NSwgMHgxNzQwYThjZiwgMHgwY2ViMzNjNSwgMHhkY2MxN2U5YywgMHhjNTRlYjJhMCwgMHhjMDAzNmJkZiwKLQkweDUwZmE4NWZlLCAweDlhM2VlM2E4LCAweDIyYmVkMTNiLCAweDY3ZjUxMDcxLCAweGVmMmZlYzY2LCAweDIyOTFmZWE1LAotCTB4MWY3OTRlNmYsIDB4MTk3OTUxOGUsIDB4MGNkYWU5ZjMsIDB4NTU5MzhlNTgsIDB4NGU0ZGMyZmQsIDB4YzQ2YmZmMWMsCi0JMHg4M2E1NTc3NywgMHgyZmQyZjU5ZCwgMHgyYjQxODE1ZCwgMHg4NjU0ZjFiZCwgMHhmZGRlOGRmZCwgMHhhNTNmNTAyNiwKLQkweGZkZDgyOTdmLCAweDljOTIwNzY3LCAweDhkMjk3YTI2LCAweDJiM2U1MTU3LCAweDRiNmZjZGY4LCAweDM2YjBkNzY4LAotCTB4YTU2MWVhMmQsIDB4YWI5MDY5ZGYsIDB4NDEwZmJkZjgsIDB4MDlmOTYyY2UsIDB4YzBiM2Q3YzgsIDB4OWNhOTdmOWIsCi0JMHg5NWE3ZTU0ZCwgMHhhNjdlN2E3NiwgMHhmNmNhODBiMiwgMHhmZTdhMGFjYSwgMHgyYTRhZTU3OSwgMHg2NTM1Y2Q2NywKLQkweDM3OTQ5ZjIwLCAweGJkNjc2NmFkLCAweGE1ZDRiYWU4LCAweDRiZWY3YmIxLCAweDNmZGYxZTllLCAweGUwNGFlY2JkLAotCTB4OThlOWRkNzYsIDB4OTViYmRmZmUsIDB4YmM3Mjc3ZjcsIDB4ODE3ZDgzNzUsIDB4ZGZkMDI0ZjYsIDB4OGRjODczNWEsCi0JMHgxMzZlOGNlZCwgMHgzNzdhYmZkZiwgMHg3NzczZDM4NSwgMHgyNWQ3YWYyNCwgMHg1MzZlYTg2OCwgMHhmZmQ4YWRiMSwKLQkweGQxMmQxNGRkLCAweGM2NDQ4YWViLCAweDJjNzg4OWRiLCAweGRmOGQxZmQwLCAweDNlNTRlNzA3LCAweDE5Y2VkMjhlLAotCTB4MmZlZGNhYWYsIDB4ZjIyNTk4NGYsIDB4ZTg5ZjQ0NzYsIDB4YzYzZDIwMmYsIDB4OTk2N2QxNzgsIDB4OWZkM2U4ODUsCi0JMHgzOTEzNmEyZSwgMHgzOGViYzRkZiwgMHgyZWExNDVkZCwgMHg3MDhjN2RjMiwgMHgwYTczMTM4MywgMHhkYzM2YmU2MCwKLQkweDM4OTNhZjU3LCAweDlmNDc1ZTNkLCAweDVkOWZlZTJhLCAweDBlMzA5ZjQ3LCAweDVjZTgwOWMxLCAweDdlYzdmMjgyLAotCTB4ZWY5NGEzZjQsIDB4MGI2ZmJlMGEsIDB4ZTA4Y2ZkMzMsIDB4YTMzMWEyZGMsIDB4MGNiMWY4YmUsIDB4YWFmZWM1ODAsCi0JMHgwZjk4MTNkZSwgMHhiMjY2MTUxZSwgMHhmNjQ4OWVlMCwgMHhmZThhYzZlMywgMHgxMjNmYzdlNCwgMHg2ZmZkN2RiOCwKLQkweDFmOGZiZmFmLCAweGRkN2ZkNzdkLCAweGQwN2VjNWJhLCAweGU0OWJhZWFkLCAweGE0NGJjYTA5LCAweGMzZTQ3ZTlmLAotCTB4M2U0NTA0YTUsIDB4MTM5MWZhNzAsIDB4M2Y1MGU3NmQsIDB4MzUwNjRiNzQsIDB4MGRiYmIzYzYsIDB4ODNhZTJlOWMsCi0JMHg0ZmE3MGE1YiwgMHgwNTZhM2U4NSwgMHhiYWUxNDQ3ZCwgMHhlOWViM2NlMiwgMHhkZjgwN2Y5YiwgMHhjYTMxOTZmYSwKLQkweGEzYzdmMGViLCAweGQ2YmM1NzIyLCAweDJmMDRmN2Y1LCAweGQ4MThjMjc5LCAweDQ4N2ZkMDE3LCAweDA5ZjY5MTg5LAotCTB4MDk5YTI0NTcsIDB4Y2U4M2RkN2UsIDB4NmYwMmRmY2YsIDB4ZTI3YTE1OWYsIDB4YTdkZjE1NzksIDB4ZGY3NmU0NTAsCi0JMHgzMDVlNDk3MywgMHg5ZTQ3ZDUyMywgMHg3YTMzYjQzMywgMHhiZjg4ZTkwZSwgMHhmMDU2MmFkYywgMHhmODUxZmExYSwKLQkweDcwYmYyZjI5LCAweGVmNTNjMGFjLCAweGVlMTU0Y2VjLCAweDZiN2Q3NWJmLCAweGNkMWU1MDc0LCAweDY4MzM5ZWUwLAotCTB4MDU2ZDc0NDcsIDB4N2ZmYzgwMDMsIDB4ZjQwOTM0ZGIsIDB4ODc4YzEyZDksIDB4YWZiZTMwNTgsIDB4OGJlOGZkYTcsCi0JMHgyNGIyMGY2MCwgMHg3MmJhZTc2OCwgMHhmMjk4ZWQwNiwgMHgwN2E2NjRlNywgMHg3ZGNmYzlkMCwgMHg2NWU5MGIzMywKLQkweDk5OGQyMWU5LCAweDRmYWQ5YWVjLCAweDNiN2E0MzFkLCAweDUwNTkyOGQ3LCAweGMyMzU3N2RmLCAweGIzOWY3MWIyLAotCTB4NDAzNGU0YzYsIDB4NjNhODFjZmIsIDB4NjUzYjY1ZmIsIDB4MDM1MjI1MjcsIDB4MTRmZTkwN2IsIDB4Mjg2YjNiZGYsCi0JMHg3NzdiNDU4YiwgMHhhMzNmNzNlMiwgMHhiNWE1ZjhmZCwgMHg3MTg3MGIxMiwgMHhhMmJhZGFkZiwgMHhlN2VhMTIzNSwKLQkweGY5ZmNmMWI2LCAweDdmY2YwMzJhLCAweDZiMzc5MWNmLCAweGI0N2M2MzA3LCAweDMxMmYzZjk2LCAweDdiZmU1MGU2LAotCTB4NzU2NjJlZDEsIDB4YWY2NWJjNjMsIDB4YTVmM2ZjODksIDB4MTU3OWJlMzUsIDB4ZWI3Y2RiMDUsIDB4NWNiZTIyODUsCi0JMHhiY2ZiZTc1NCwgMHg0ZjM3YzFhNCwgMHhjOGEyNGM2MywgMHhhMzYxNDhjMywgMHgxMzVhNWUyOCwgMHgyMjgwNzY0MiwKLQkweDc3ZTQ2ZjRmLCAweDM5NzM5NmQ5LCAweDYxZDdkOGM5LCAweDBmOTVlZjE4LCAweGI5ZmQxMzdkLCAweDg4NjdkNzkxLAotCTB4MmZkNDA3N2EsIDB4YTJmMWMzN2YsIDB4Yzk0Y2E1YzAsIDB4MTk2NDg4MmIsIDB4MjNjYzBjYWUsIDB4M2Y3MTk4MzQsCi0JMHg4YmY5YWNhYSwgMHg3M2Y5ODYyMCwgMHg4OWQzZWQwMSwgMHgyOTk3NWYzZiwgMHg5MzYzNmFkZiwgMHhhNTY5ZmI0YywKLQkweDMwOTc4NjJkLCAweGZmNmNiMGNmLCAweDg0YzVhZDQ5LCAweGVjODg3ZjcwLCAweDYzOThiYjgwLCAweDZlOGJmYTNkLAotCTB4NmZlNDRhOTUsIDB4OGRkYzUxYjcsIDB4NTI5NjdhZDksIDB4NjBkOWJiN2MsIDB4ZjY1YWZkNDYsIDB4NzNhZGM3ZmEsCi0JMHg2MjVmYmViMSwgMHhkMGUzYzQwNiwgMHhhNTkzYTI3NiwgMHg1ZmI0YzljZiwgMHhjOWYyZDBjZCwgMHg4Yzg5ZDBmMiwKLQkweGJiM2M0NTc4LCAweGNmM2VkMDA2LCAweGUyM2JjNDMyLCAweGU3OGVmMDE5LCAweDM0ZTdlNDFiLCAweGJiYTVmNzg0LAotCTB4YjU1ZjdhNjQsIDB4ZWQ4YjRhYjUsIDB4N2UzOTM5Y2YsIDB4YzhlN2JjMTUsIDB4NDVjZjA4YWIsIDB4NGU3YzcwMmYsCi0JMHg5OWZlYWU3YywgMHg1ZDgzYTQwMCwgMHhkZjczYjIxYSwgMHg3OTgzN2U4MiwgMHhkMDNhMWYzZiwgMHg3N2UzZTIxZSwKLQkweGRmMTQ0YmQ1LCAweDY2ODNhM2VhLCAweGUwMWQxZjVkLCAweDA3NDY2ZjNjLCAweDY3YTQ5ZmMwLCAweDA2MDc0NjZmLAotCTB4NGZlNDE3OTQsIDB4OGExYTNiOGYsIDB4ZjhjZmVkZjYsIDB4OWRiODk0N2MsIDB4MWY5Yjk3MTIsIDB4MTBmYTU5ZDIsCi0JMHhkODg4NGQzNCwgMHgxYjJjZjY0NywgMHgwODk1NWY2MCwgMHhlNGNjZTY3MiwgMHg3NGRjMjgwZiwgMHg1MWVlY2E2YSwKLQkweGZmMDM0Zjk0LCAweGJmOTQ2MWY0LCAweGZiN2NmMDQ3LCAweDQ0NGI3ZmU3LCAweDMzMWRkMDc5LCAweDE4YzFkYjYzLAotCTB4YWUwNzY3YzIsIDB4OTAzODNiYTcsIDB4OTIzZGQzZWIsIDB4M2FlN2EyNTMsIDB4OTNiZTBlYjcsIDB4ZjkxNTcyMGQsCi0JMHhhM2E5YmQ5MiwgMHhhMGY3NDNmOCwgMHg4OTNlMWUwNywgMHgxODRmNjhmYiwgMHhjOTJlODhhZCwgMHhlMmJhZmRjNiwKLQkweGMxM2U3Nzk2LCAweGNjNmIyN2Y4LCAweDdkZjhmOWI2LCAweDQ2MmIyZmMyLCAweDM3ZGYxMGJmLCAweGI1ZTg1ZjgwLAotCTB4M2Y5OTI4ZGYsIDB4NGJiZjdlYTAsIDB4Y2I3NWE1OGMsIDB4ZjI1NmViMmEsIDB4MDU5OGVhZGYsIDB4ZTVlYjk1ZWQsCi0JMHhhZmY5MjMzZiwgMHg2ODZlYWZjNCwgMHgwMWU5Zjk5ZiwgMHg3NmU3ZmM4ZiwgMHhmMTBjNzMxOSwgMHhlNWMwYjczYiwKLQkweGY3MTEzMmQzLCAweDcxYzhmYTNkLCAweDY3NWM0MGY1LCAweDUzMzczZjFkLCAweDI5NzIwMmQ4LCAweGY4YTVjZTk0LAotCTB4ZDEzMjk3YzgsIDB4MTlkMjNjZmUsIDB4NDcyYmYxYzAsIDB4ZWM5NTAxYzUsIDB4OWQzZTQ3MmQsIDB4ZWM5NGUzODQsCi0JMHgyMTk0ZTNlMiwgMHg5ODFjMjBmZCwgMHhkYzAwOTlmYiwgMHgyODY5NzAyNywgMHg4NGM0NTkxZSwgMHg1OTMyNjk1YywKLQkweGU0N2U5NmRkLCAweDdhZWQ1ZDQ4LCAweGU5ZmQ3ZjM0LCAweDM3ZWMxOGE3LCAweDFkM2Y4NDVjLCAweGI2ZmEzNTk1LAotCTB4OTdjYTAzZmIsIDB4ZDI1ZjI0MTEsIDB4MDc3ZjQ3YmUsIDB4MjNkMzIzNjksIDB4ZDRlNWIyNDcsIDB4ZjVhZmU4MDEsCi0JMHhlNDAwY2IzMiwgMHhiOWU5MWJlMywgMHhkYWMwYWRhNCwgMHgzOGE2ZTM1ZSwgMHhiM2VkNGNmNSwgMHhhOWY2NjE1ZiwKLQkweDdjMjJiOWE3LCAweGIyNmM4ZmRhLCAweGU1MWZiY2Y4LCAweDNmNzlmNjRlLCAweGE3ZDU5OGU2LCAweGQ2MzZkOTllLAotCTB4OWY2ZGZkYTcsIDB4YjdlYTdjZDgsIDB4YjRmYWU3YjcsIDB4M2NhYmUzYmYsIDB4MmE2ZjdhOWYsIDB4ZjYwN2U3YWMsCi0JMHg5MDhhZWVlZiwgMHhiNjRmZGE3YywgMHgwN2M2N2MxOCwgMHg5OWYwNGUwZCwgMHhmM2VjMWM5YSwgMHhlMWM4ZDdiYywKLQkweGVmNzFhMzc0LCAweGFiOGVmYWI2LCAweDhjZjdiOWY4LCAweDg2N2YxZGY1LCAweDViZGM3N2NkLCAweGQwMGVjM2M1LAotCTB4NGQxMDZhOWIsIDB4NjI4ZjQxM2IsIDB4YzAyNTRhZjksIDB4ODZmMWVjMWQsIDB4YmZhYTA4Y2EsIDB4ZDJhMTY5NWEsCi0JMHhjZjRjOTk1NSwgMHg1MmI0YWI1ZiwgMHgyYzcyYjFiZCwgMHg3ZDgwMGZkNSwgMHhiMDI2ZjU4ZiwgMHgxZDdjYjFmNywKLQkweDdlN2M3Y2VjLCAweDhhYjU3ODMzLCAweGRmMTMxZWVmLCAweGNiYmUyZTNkLCAweDA3NmUxNmQ4LCAweGVmMmUwNGRjLAotCTB4NDQyN2ZlOGIsIDB4YWZlYzM2ZmYsIDB4Njk2MWQwZjEsIDB4MWFlYWE2NmUsIDB4OTBmOGVkZjAsIDB4MmY4YzVhMGIsCi0JMHhlN2I3OTZkOCwgMHhmM2RmOWZhMCwgMHgwM2I2Y2NhZSwgMHhmM2JiMzA1ZiwgMHhlYTI4NjU1OCwgMHgxZjNjODFhOSwKLQkweDNkZTdhZjIxLCAweGVkOTcxNzhjLCAweGZlZTMzMzhmLCAweDNmYTZjNmM3LCAweDVkZjdjMDlkLCAweDMzYzUzMjhkLAotCTB4MTE3ZDM0OGUsIDB4YmE1Y2UzODQsIDB4NTAzZWNjMDYsIDB4OTdhODM3ZTgsIDB4ZmFhMjRkZmMsIDB4Nzk4Zjc4MjYsCi0JMHg4MmY3OTNmOCwgMHhjYjdhNGI2MSwgMHg1MmViN2E0NSwgMHhkMjc3NTJiYywgMHg4NmJjOGRmOSwgMHhkYTc2ZGFiZCwKLQkweGVmNGJkYzU3LCAweGY1YmUwNWRmLCAweGQ2YjNiZjc5LCAweGRiMTliZGU3LCAweGRhYjY3ZWUzLCAweGM1Zjc3ZTQ5LAotCTB4MzczYzY1MjYsIDB4OTc4OTJmYjUsIDB4YzVkMjNjZTgsIDB4YzdhZDZmOWQsIDB4YmRkMmJlN2MsIDB4M2VlMjA3MGIsCi0JMHhjOWMzNzE2MCwgMHgwMDNmYzViMCwgMHg3NjA3Y2JmZiwgMHgyZjVjYTJhNywgMHhmOWM1OTY2ZCwgMHg2OTVlM2UyMywKLQkweDg5MWU3MmIzLCAweDdlMjRiZmNmLCAweGNhMDg0ZTZmLCAweDIxODkwNmVkLCAweDZhYjEyZTdhLCAweDZlMmE4ZmNhLAotCTB4Mzk0MTJmYWEsIDB4NTczYzljNWEsIDB4OTcyMWYxNDMsIDB4M2MwMWUyMmMsIDB4Y2NjNGIwZGYsIDB4YmFlNjdkYjgsCi0JMHgzNWU3ODQxYSwgMHgzYTNhZTBmZiwgMHhiYTg1ZjMxZCwgMHhjMjBhZGU1YiwgMHhmOWUzNzZlZiwgMHhkZWZjMmYxMywKLQkweGRjZWRjNDkzLCAweGRmYjg5MjdiLCAweDJkZjFhOTc0LCAweGQxYjkzZjNhLCAweGJiODcxNmY1LCAweDNmZWI0ZGRhLAotCTB4NTBkZGVhMjIsIDB4NjQ5YmJjMTIsIDB4MzVlMTdmNWEsIDB4OGNhMGYwOTksIDB4NGM5MjYwZjcsIDB4NGE2ZTRkZTMsCi0JMHg0ZWJhZTEzMCwgMHhmMmY3ZjhiOSwgMHg3OWZjMmM5MywgMHg5YzdjYzJmYywgMHgzOTg4ZjFmZiwgMHg5NWQ5MzI5OSwKLQkweDNkZGYyZTNjLCAweGNhM2Q2YTdjLCAweGU4MGZjYzUxLCAweDA0N2IwZmNmLCAweGI1Zjk4NWM3LCAweDc3YzYzYzhhLAotCTB4MGViNWY3ZTMsIDB4Y2YxZmI4MDYsIDB4NzQ4YTM4MWQsIDB4Mjc0ZmUyODAsIDB4NDczZGZiNzEsIDB4M2Q0NzhmNmIsCi0JMHhhMTY4Y2E3MSwgMHhkYzlhZjgzOCwgMHhmN2UyMTMzOCwgMHgzY2Y4OTYwOCwgMHg1N2RhMjVmNywgMHhkZmU0NmEyOCwKLQkweDBiNmU2NTNiLCAweGQ1M2JiYTQyLCAweDNiNDY0NjM4LCAweDQwYWYxOTQ2LCAweGJlOGZiNzdjLCAweDIwZTZmMGZiLAotCTB4NmIzODE1M2MsIDB4MDc4ZTM4OGQsIDB4N2U3OWZjN2YsIDB4NzFlNjk5OTIsIDB4MTY3Mjc5ZGMsIDB4OTJhNzRiZGEsCi0JMHg2OGNlYzkwMywgMHhmY2ZkZjJkNSwgMHhlZjZlMDZlMiwgMHhhYTg5NmE5ZSwgMHg1YmY2YmQ5NSwgMHhiYTNlMDVmMiwKLQkweGQ3ODQ1NTkzLCAweDY4OGQyNmFlLCAweGY5OWViNzM3LCAweDdjNzBkM2I0LCAweGM3Y2VmOWQ1LCAweDEyNzhlY2VjLAotCTB4MTc5MmVjZWQsIDB4NTQ5MzNhNjQsIDB4YzMwOGE5YTIsIDB4ZTZkZjlmZjUsIDB4MDEwMmJmM2IsIDB4M2I4ZDEyZTcsCi0JMHg1ZThiY2MyYywgMHhmOGZiOWE0YiwgMHhkZTc0NDhjNiwgMHg4NTg5ZjBhYywgMHhmMWUwYTlmMCwgMHhjNzNmMzI1NCwKLQkweDlmODIyYTcyLCAweDViZDkyYTgzLCAweGQxZWQ3NDRmLCAweDE5YWUzY2Y3LCAweGJmM2M1ZmY1LCAweGFlN2U2NmY2LAotCTB4Zjk3ODBmNjIsIDB4M2NmZDBjNDksIDB4YTY1YzZlNGQsIDB4ZjdhM2Q2MmEsIDB4YmY2ZDEzN2IsIDB4ZmU4NDFhNGIsCi0JMHg4NWY5MWU1MywgMHg4YTI2ZWM0MCwgMHgzYzdkYTA4YiwgMHhhN2VmZTUwMCwgMHg3Yjc3ZTBjZiwgMHhkODc5ZjkxYiwKLQkweDExNzM3ZDUyLCAweDVhZjVmYmVlLCAweGJlNjA0MTgxLCAweDRlMzRkYmJkLCAweGQxMThjZmUxLCAweGVjMmE1ZDRlLAotCTB4N2IxNmYzZDQsIDB4YTNmYjhjOTYsIDB4YWViNDU1YWIsIDB4ODlkOTA2OTIsIDB4NDI1ZDk4ZjksIDB4MWJkZTVkZGUsCi0JMHg2OWQyMGY3MywgMHg4Y2Q5MzFjOSwgMHg1NzQ0Y2RmZSwgMHg2NWM3YWZjYywgMHhmYjI2ZGU5MCwgMHhlZGM1Y2NhZSwKLQkweDEyOWRiMmRjLCAweDdkOGFiNWQ5LCAweDhiZWMyYTUxLCAweDNkOGVjMjczLCAweGRiODdiYWI3LCAweGY2MjQ4N2I3LAotCTB4Y2VjNzhjNTQsIDB4NDU3NjE1MjgsIDB4M2Q3OWJjYTksIDB4OWZmYjJiZTYsIDB4Mzk2YzJkYWYsIDB4ZmQ4OWU3NGMsCi0JMHhlZjE2ZDVjZiwgMHhiYTk3YWRmNCwgMHhiZjhhZWI3YywgMHg5ZjUyNGVmNywgMHhmZTgyOTI3ZiwgMHg5NGE3ZDgwOSwKLQkweGMwYTlmMTJmLCAweGFjYWZlMmE3LCAweDIzODZiMzQ4LCAweDViNTQ2ZmJmLCAweDAzNzEyOGE2LCAweGExZjk1Nzg0LAotCTB4NmYzODg1N2QsIDB4OTU4MDQ5NjcsIDB4NmY5NTg3ZmMsIDB4YmZiYjVjMTAsIDB4Nzc0OTdlZTYsIDB4NzdmNWEzMDQsCi0JMHhlZWRmMGUzMywgMHhlNWRmNGUyNiwgMHhjN2E5YzkxYSwgMHg3MDIzYThmZSwgMHg1Y2U0YmQzYywgMHhhM2E4NzY4ZCwKLQkweDEyZTQ4ODM3LCAweGY3YzFlMWU2LCAweGZlZTFjZjk2LCAweGEzNjMwZGE3LCAweDg1NWE5NTMwLCAweDI5ZmQxNDBmLAotCTB4YTlkZWNkY2UsIDB4YmQ4Mzk3NmUsIDB4MjQ5NWMzZTQsIDB4MTI0ZTc3NmUsIDB4NGMyYjQ4ZjksIDB4ODM1ZmQyNTYsCi0JMHhjMWViYjljNSwgMHgwZjZmNmU3YSwgMHg1MzU3M2I1NiwgMHg2NjMxZmUzYywgMHhmMjcxNDM1OSwgMHg0ZTkwYTMwMywKLQkweGYxNGVhZTMwLCAweDEyM2Q1NWZmLCAweGViMWZjM2M1LCAweDA2M2Y5MDkxLCAweDc5MTFhZDliLCAweGY4NDlmNTVlLAotCTB4MDc2M2Q1M2UsIDB4NDhmNjMzMGMsIDB4YzdiYTlkZjgsIDB4ZDczYWY4OTQsIDB4NjZkNDMzZWYsIDB4ODk0ZmNlMGQsCi0JMHg4N2ZiMjkzYiwgMHg3Mzk0ZmNjYSwgMHhmM2U3ZmYwOCwgMHg4Y2ZjYzMzMywgMHhiZTAxZjk5ZSwgMHhhYmZmNjAwNywKLQkweDBmYjI1NjE5LCAweGU3Mjg2N2EyLCAweDFlNDgyYWZkLCAweDA0YmNmMDI4LCAweDcwMDkzZWY0LCAweGE0MWQzMTg1LAotCTB4ODc2ZDkyOWIsIDB4NDBmZTc4NzMsIDB4Y2JkZjlkMWIsIDB4YzhlYmUyMDksIDB4MzllM2Y5MTEsIDB4OTQxY2JjMDEsCi0JMHgyYjM1ZjFjYywgMHg5ZThiYzc5OSwgMHgzNzIyYTUxMCwgMHg4NWI2NDlkZiwgMHgyZmI5NDMyNSwgMHgzOTMyMmYzOSwKLQkweDYyY2U3M2QzLCAweDljZmMwN2Y5LCAweDg3YmNiZjg1LCAweDU3NGY0NGU3LCAweGVlNTEwZjgxLCAweDMyNDJiNGZkLAotCTB4NjNkOGZiYzcsIDB4ZjljYWJmOWMsIDB4MmEzZTNlYTMsIDB4ZTIyNWUwZmUsIDB4YjViMGU2MTMsIDB4OWU2MTg3MjUsCi0JMHgwNWVmZTcwMiwgMHg3OGU2MGQyYiwgMHgxNzI4YmUyZiwgMHhjNWE2MjA3ZSwgMHg3Mjk3ZmVlMiwgMHg1Y2MwYmU0ZSwKLQkweGVjNDBlNzQ4LCAweGU4Y2NjMzJiLCAweDk3Y2I5NTk3LCAweGFmZmY1ZTI4LCAweDkzNzk1ZGYyLCAweGUwNmRkZDZmLAotCTB4NDkzNmVmZjQsIDB4OWVkY2ZmZTQsIDB4MTNjZjY3ZGMsIDB4ZmUwYjQ2M2YsIDB4YjQ0YmI1YTgsIDB4OWRmYjVjMmYsCi0JMHhlNmRiYzc5YSwgMHhiYjVmMTQ0OSwgMHg3Y2YyMWUxZiwgMHg2MGFlZDE3YSwgMHhkZDliZTUzYywgMHgzN2RhNTUwZiwKLQkweGZiMTUwOWFiLCAweDlmYjRhMWQ2LCAweGY3NTg5Zjc3LCAweGUyZGYyMmZkLCAweDgzMTVjNmE4LCAweGE1YTNhMGYxLAotCTB4M2Y4ZTJiN2EsIDB4N2Y2OGI5ODcsIDB4YTM2YjFlN2QsIDB4ZDk2MDc0ZjIsIDB4ZWUwZDM3N2UsIDB4ZmNmZThhMTgsCi0JMHhjNTFkNzZjNywgMHg2ZWQ3NmFhMSwgMHg0ZjVjYTEzNywgMHhiOGNkNmI2NywgMHhkOGEwMDZjZiwgMHg1Yjk4ZmRmOSwKLQkweGYyNTM4ZmRmLCAweDBlMmVjMTg5LCAweGZjMDRmYTQ3LCAweDdmZmM0NmNmLCAweDE4ODliODA1LCAweGUyZmY3ZDdkLAotCTB4M2U1M2Y2OGYsIDB4ZmJjM2U3NTIsIDB4ZDBjMDNkNjYsIDB4ZmYyMWVhYWYsIDB4YjU2MmE4YTgsIDB4MWM0ZGY2ODYsCi0JMHhjYjM5MmRhYywgMHhlZjA1NTc4MywgMHhmMGZhZGUwYSwgMHgxZjE2NjE2YSwgMHg4NjlhYzJiYywgMHg0YmU0OWMyMCwKLQkweGZkMmU0ODMzLCAweDc3YTg2NjRlLCAweDA1NTc4NjZmLCAweGY4MTEzZmVlLCAweGU1Y2NkNjU5LCAweDE1YmUzZjk3LAotCTB4ZTc4MDNjM2MsIDB4ZGY0OGUyYTMsIDB4MzEzYzIzNmUsIDB4N2Y0YmM5MWQsIDB4YmUxOWI4N2EsIDB4ZTFlNzMwODAsCi0JMHgzYWExODlhYiwgMHg1NGEzMmZmMiwgMHgyZDQ2OWU1YywgMHgzOGJlMjg5NSwgMHhiNTBmZDk5NywgMHhmMDJiMzk0MywKLQkweGJiZDEwZDUzLCAweDgxM2NkYmMwLCAweGYzOTk4ZmI3LCAweGZmOThlNGVlLCAweDkzYmRiYzNkLCAweDNjOWQ1NzljLAotCTB4ZjViZTdhZTgsIDB4ZjExYmQzZTcsIDB4ZmFjNTg5NjUsIDB4M2E1ZjQ1NDcsIDB4MWZhM2YyMTksIDB4NmJmMWZiM2YsCi0JMHhmMGFkMWUxZiwgMHhkYTNjMmYzZiwgMHg1ZjExMDY1NywgMHg2ZTViZTFmNiwgMHg4OGJkMzViOCwgMHhhYTFjNjA3ZiwKLQkweDcxNmJkZjg5LCAweDYwOTU3ZTUzLCAweDU3Y2Y4MDIxLCAweGE2ZjU3ZDkzLCAweDJlMDUzNzgyLCAweDlkZWI4YTM3LAotCTB4YzIzYjcyZDYsIDB4ZmI0Yzg4ZjEsIDB4ZWU0OTlmOTgsIDB4NjM5NDY2YTMsIDB4ZmNlOGE3MjksIDB4YjNmZWQyOWIsCi0JMHgxZjQzNmRkNSwgMHgxYjNlNzE4MiwgMHg1YWQzY2JjZiwgMHhkNGE5MWY5ZSwgMHgzZTNjMDE2ZCwgMHhjZWE0NTlmOCwKLQkweDRjZmRlYjgxLCAweGZhODA5OTRhLCAweGJmZTkzM2UyLCAweGI4N2FmM2E2LCAweDM5ZjU4MmQ2LCAweDUwY2MxM2UxLAotCTB4ZTI1MWFkM2YsIDB4N2M0NDZiODksIDB4NjdlNTQ5YzAsIDB4NDQ5YjZlNzMsIDB4MzZmNjI0ZWQsIDB4M2Y5ZjhlZjMsCi0JMHg3Y2ZjNTEyYSwgMHg5YzcyODgwMSwgMHg2Nzg0Y2M1ZiwgMHhmZWFmMzE3MywgMHg0NmUzY2ZjYywgMHg3MmRmM2VkMSwKLQkweDFmNTBmMWRmLCAweDkyMWM1MGM3LCAweDVlNzc4YmZiLCAweGY0MmNkMWViLCAweDdhN2QzYmQyLCAweGZlMTVkMjcwLAotCTB4Y2U5MzNmM2MsIDB4ZDgwODE2MWIsIDB4Yjg1MjQyZGEsIDB4ZTdlNGVjN2YsIDB4ZDMzZDE1MzYsIDB4ZDE5ZjZjN2IsCi0JMHg0MTdhNGUzYiwgMHhlYWZiOTVjNCwgMHg3YjQ0NGYyOSwgMHgzYmMzYTllYiwgMHhlMzg4OTU3ZSwgMHhlOTFkNjgxNCwKLQkweGFiZmI3ZTc4LCAweGQxYTNlN2RhLCAweGYxZDgyODllLCAweGI3ZDkyMjc4LCAweGEyMjYzNjNiLCAweGZkYjA1MjlmLAotCTB4YWEzNjg5NTcsIDB4NGZjOWRhMDcsIDB4Nzc3NWYzNTIsIDB4YTVmZGI5ZWUsIDB4ZTc3YTVlNGQsIDB4NmZkY2UxZDEsCi0JMHg5YzNmYTc5OSwgMHg5NGVlNzY4ZCwgMHg2MWQ3OTcxMSwgMHhlN2UxM2UzYywgMHhmMzg3ZGQxMiwgMHgwZWI2ZDY1MywKLQkweDY0ZmNkZmY1LCAweDQ2YWNlZjRlLCAweGUxOTk3MjRmLCAweDczYzAyZGY5LCAweDc1ZGRjYTdkLCAweDkzYzdhN2M4LAotCTB4NDNlNGQwYmYsIDB4OWE4YTVkM2IsIDB4Mzk5ZjMzZTAsIDB4N2VlMzg3MzcsIDB4NWNjOTA2ZjYsIDB4MGZkYmJjY2YsCi0JMHg4NWNhZmRhNSwgMHg0NDZkMjU2YiwgMHhlMGI3ZWEyOCwgMHhlYTNmZTg1MSwgMHgxZTY5ODI1MiwgMHg2YThjMzY4YiwKLQkweDU3ZjNlN2M1LCAweDc0NTNlN2YxLCAweDM4NTNjNmNlLCAweGNhNWFiM2NlLCAweDEwZjkwMjM3LCAweGFmYzc5ZGViLAotCTB4ZjFlN2UxNGIsIDB4Yzg5NjZjMTcsIDB4OTNiZTU3YWUsIDB4YWQ1ODRjZjAsIDB4Mjk3NTNhZjcsIDB4ZDQ2NzJmNDIsCi0JMHhjZTUxZGM5MSwgMHg3NTViNGUwOSwgMHgxODA4ZWRmMiwgMHhiYjZhOWZmNywgMHgzOWM2MDUyOSwgMHg3OGI5ZjRmMSwKLQkweDE0OWYzYzM3LCAweGZkMTUyMTcyLCAweGZkYWQwNDliLCAweGVlYjg4NWI3LCAweDgzY2EzYWVkLCAweDkyOGY0OGNiLAotCTB4ZThmZGExYzMsIDB4ODUzZmM3ODcsIDB4MGI1NTgyZTUsIDB4ZjI4ODViN2YsIDB4MTQ3ZWFiNzEsIDB4ZjNlNjE3NGYsCi0JMHg1NTU5MmU1YiwgMHhhYWRmM2YyOCwgMHhjMjExNjA3ZCwgMHhmNWE3YWJlZCwgMHhhZjJmOTc2NCwgMHhmZDY3MGE0ZCwKLQkweGJlNTI4ZmYwLCAweDhkYzdmODBjLCAweDdhOTU1ZDgyLCAweDlhNTc3NzJhLCAweDllZGEzY2U5LCAweGZmYWEwOGNhLAotCTB4MjU0MmQyYmUsIDB4NmJlOWNkOWIsIDB4OGRjYjk5YjksIDB4ZTYzNzhkMWIsIDB4ODBiMzIwNWEsIDB4YzFiMTlhYmQsCi0JMHg3MDYzMmNjMCwgMHg5Yzk2Y2U1ZiwgMHgxODQ4NzAwMiwgMHhhMzdkYmE1ZSwgMHhhNTZlMTc1OCwgMHg0Y2M0NzI4YywKLQkweDZjNjQzODQ0LCAweDRkMTVhODdjLCAweGVlMTRkMGRhLCAweDZhNzdiZDY3LCAweGVkZjIzNDQzLCAweDJmMWQ1NWIyLAotCTB4NTM3YWUyMTYsIDB4N2Y2MTQ2ZjIsIDB4MTQyYmI2ZmQsIDB4ZjlhYjc4MzcsIDB4ZWYwOGY5ZjEsIDB4YmUzYWVkODIsCi0JMHhhZmVlYjEzZSwgMHhmZjBjNGU5ZSwgMHg3OGVmOGMyZCwgMHg3YzdlNDM1NywgMHgxNzhlYjZmOSwgMHg3OGI5NDIzNywKLQkweDZmNWE0M2YzLCAweGY1ZDViZjdhLCAweGZiZTE0YzhlLCAweGFiZTMzNzlkLCAweDVmZTFjMTFiLCAweDQ1NWZhYmU3LAotCTB4N2Y2Y2ZmMTMsIDB4ZjllMWVlOWMsIDB4N2NhYWY5NzcsIDB4ZGY4MjZhZDUsIDB4ZDliYzk0YmEsIDB4Njk1ZjVmNDgsCi0JMHg0ZmM4ZDExYywgMHg5OGZjYTU1ZiwgMHg0ODcxZGNlOCwgMHhmMjJiZjgyMiwgMHg0YjNmZTk1NSwgMHhlNTU4YmZjMCwKLQkweGM2MmUzY2RhLCAweDYxYmY1ZjIzLCAweGMzZGYwNDE5LCAweGQxMTNlN2NkLCAweDY5YTZmZGFlLCAweGZiYWUwZmNlLAotCTB4YjdiZjI1NDAsIDB4ZWJlMDA5YTUsIDB4NTI4ODJmN2QsIDB4NzFlZDY5NjYsIDB4OTY1ZjU4NTYsIDB4ZmZlMGM3MzgsCi0JMHgxMmEyOTFkZSwgMHg2ZmRmMmNmNiwgMHg1NzkyN2ZjNywgMHgxN2U4MDc3ZSwgMHg0Zjk4MDBjNywgMHgwZWU0OGI0OSwKLQkweGU5YWUzZjQwLCAweDIwZWEwYmFlLCAweGZiMTIzM2Q0LCAweGM5MWUyN2RjLCAweDdhNWVlN2Q4LCAweGJkZjM0NmY2LAotCTB4ZTM4NjU5NTksIDB4ZWVlNDc4MjQsIDB4N2NhODlmNmQsIDB4YmRiOTYzZWUsIDB4N2VlN2MwM2QsIDB4MDNmZjNlOTMsCi0JMHgzZjY5Njk5ZSwgMHgzOTU2YjIyNywgMHg0Yzc5ODBiZiwgMHg3NDI5Y2Q1ZCwgMHg5NjgyZTI1ZSwgMHgwMGViYjFlMywKLQkweDNlM2MzOWQ4LCAweDdiYWY2NGMzLCAweDc3MzQyZTIyLCAweGY1OWNhM2E2LCAweGViZDk2ZjVmLCAweDI1MWY0NDlkLAotCTB4MjE1ZjhmNGQsIDB4ZjI2OWI2M2YsIDB4Y2RmYTc1MDUsIDB4NDc3ODdmZDcsIDB4NzFkYmRkMjcsIDB4ODU5ZWQzNDEsCi0JMHhiNjk3NTRmZSwgMHg1MGYxMWQzZCwgMHhlNzk3MDZmNiwgMHg5NDFjMmFmZiwgMHg2MDFiODVlNywgMHg2NWU3YzAyMSwKLQkweDI0ZTg5ZTkyLCAweDcxNDRiZTViLCAweDNjNjNhZTgxLCAweGZjZDY1MDJlLCAweGRlZDNjOTEyLCAweDI5OTcxZTE2LAotCTB4ODRlNWI1NTcsIDB4YTJhMzFjNjMsIDB4NTllNTE1YTMsIDB4OTNmNzA0NmYsIDB4MDliZGM0Y2EsIDB4MWU4NGUyZTMsCi0JMHhlMzQ0Zjc1NCwgMHhkOGI3MGU3OSwgMHgzYmZjNTYyNywgMHhmOTAxODdiYywgMHgyYWU1NWNiNSwgMHhmNGE1ZmNhMSwKLQkweDJkZmI4NjQwLCAweGUxOWY5MTE3LCAweDMxOTVmY2Y5LCAweGJmY2U5MWViLCAweDhkMWEwZTcyLCAweGY0YmRmMWYyLAotCTB4MWM1MTk3YmYsIDB4NjY4MTBmZWYsIDB4ZDkxMWVjOTksIDB4NmZiYzJmMjcsIDB4Mjc5OTRlMWQsIDB4YWVjNTMwYzgsCi0JMHg4YmM5ZjQwOSwgMHhlZTVhZDcyZSwgMHgzOGY2N2IyMSwgMHgxZjJiN2ZkZiwgMHhiZDg5ZjljZSwgMHg3NGE5ZjljZSwKLQkweDg0NmQ2MWVkLCAweDgyMGQ3OGQ3LCAweDZlZmIxNDlmLCAweDRlZmUxZmNhLCAweGQxMzg3OTdjLCAweDkyZjkxYzc2LAotCTB4NzhlMjE1Y2UsIDB4OTI5YzAzMTEsIDB4Nzk2NWRhMjQsIDB4MmQ4ZDFiZjYsIDB4OTVjZmFmYzIsIDB4OTM3OTdkZTksCi0JMHg4ZTVmNzBjYywgMHgyZjI4OTg0NSwgMHg1MzU1OTcyMCwgMHhlNjE0ZTU3ZSwgMHgzMzliNDcxYSwgMHhmMTI3ZjZlYSwKLQkweDdmYTk5YjVlLCAweGZlNjBjNzkwLCAweGI0NDFmODE2LCAweDYwMTM5ZDdmLCAweGE2ZmNjNzhmLCAweGMwNDkyYWQzLAotCTB4YzMzMTk1ZDUsIDB4ODdlOTlmNGIsIDB4NGUzNTNkNzMsIDB4ZjU4ZjQ4OTYsIDB4OWQ5MjA2NDQsIDB4ZTk3Njc5MzIsCi0JMHg2OWZiNmYzYywgMHg4M2I3OGFiNCwgMHg2MjZlYzg3MSwgMHhhZTdlMWVjZSwgMHhlZTkzZGRjNiwgMHhhY2M4ZWY3ZCwKLQkweDkwNTYwNDNmLCAweDhjYWU2NDVlLCAweDg5ZGY1ZTU5LCAweGU2ZjVjZTFjLCAweDA2ZmZkYzU1LCAweGZiMTcyOTNhLAotCTB4NzdmMmQ5YWMsIDB4YmQzZGEwY2YsIDB4NWZkZjEwZmMsIDB4Zjk4YWFkM2MsIDB4ZThiM2YzMTgsIDB4ZTc4NGI2ZGMsCi0JMHg3OTM5ZjlhMywgMHhiYzM2Njc2NiwgMHg2ZDJiYWY2NywgMHgyYTA3OWQxMCwgMHhjYzMxMjNkZiwgMHhkNjZiMmI3MywKLQkweDUxMzhjNzZkLCAweDBjM2RhNjk5LCAweGQzNjM3OWU5LCAweGU3YTQ1YTQ3LCAweDRkNzdkYzcyLCAweDc5YWJlN2UzLAotCTB4NzI0ZjVjZGMsIDB4NDhjY2RjYmMsIDB4MjUzNjk1N2YsIDB4YmJmMThjN2QsIDB4OGI1YzYzZDIsIDB4OTI0ZmFhOTYsCi0JMHgxYjcyOGU3ZiwgMHhiOGRjNTdiZiwgMHgxMmYxZmM5NywgMHhiYzdmMjZlNiwgMHg2ZTk3YzFhNCwgMHg4ZmZhMjM3YSwKLQkweGI3MGU0N2RmLCAweDMyMzNkY2Y4LCAweDhmZTcyYjc5LCAweDMyNWVlMjU5LCAweDkzYjBlMjI2LCAweGJkNmJjMjIzLAotCTB4MGE0NTMxY2YsIDB4Y2VlNGQ4M2MsIDB4NzRjNzY4NzUsIDB4YmM1NjRhYzcsIDB4YzAzYmE2OTcsIDB4MjNlZDE2YjEsCi0JMHg2YmI3MjI0NywgMHg5ZGRjZGZiYSwgMHg4YmU0OTRiMSwgMHgzNGRlZTMzMywgMHhkYjg3NTdiYywgMHg2YzM3OTNiMSwKLQkweGYzNWVjYjUxLCAweGUzZWUyYzk5LCAweDA1NjAwZWViLCAweGY2ZWYwODA3LCAweDkwOGY4ODIxLCAweGUxYThiY2E0LAotCTB4OWUzZWU4ODMsIDB4N2M2MDc3MTMsIDB4ZjI3YjljNDgsIDB4NDQ2ZmM3NWYsIDB4MzhiOGU4NWMsIDB4N2JjY2E5YmYsCi0JMHg5NzE0NTQ2YSwgMHg3NDQ5Y2M2NywgMHgxOWNlMmFkNCwgMHg0YTM2NzkyOSwgMHgxZWIxMGFmZiwgMHgzZDA3N2VjNSwKLQkweGZiNDNmZTFkLCAweDkzNGZiODI1LCAweGYyNjlmNjJmLCAweGJlNGQzZWM1LCAweDE3YzlhN2Q4LCAweDYyZjkzNGZiLAotCTB4ZWM1ZjI2OWYsIDB4N2Q4YmU0ZDMsIDB4NGZiMTdjOWEsIDB4NjlmNjJmOTMsIDB4MGQzZWM1ZjIsIDB4NTRlMmMzZTUsCi0JMHgxMWNkZmYzMSwgMHhkMWVhMzRmYiwgMHhjMWI1ZTQ1NiwgMHgxMGU5ZmE5ZSwgMHhkZjYwZmFiZiwgMHgyNDQzYTdmNiwKLQkweDg5NjBmYWRmLCAweDI1N2M0ZmRhLCAweDExODc2OWY2LCAweDIxNjZhM2UzLCAweDU0N2M3ODlmLCAweDJhNzlkZjM5LAotCTB4ZTExOTNlZDAsIDB4ZmNlNzljYWMsIDB4MDNhOWY3MmEsIDB4NDI5MzRmYzgsIDB4ZDliZjkwZTYsIDB4Y2EyNmZlMGIsCi0JMHhmNmUxY2FhMywgMHhlYzc3NmMzYywgMHgyZGY4YzRkOCwgMHgxNDBkMjcyNCwgMHhlMGZkM2NlNywgMHg5ODczOWYwOCwKLQkweGFjYzc5M2UzLCAweGM2MzA3YmM1LCAweDdlNzEyNTFiLCAweDllNjQ3YWJjLCAweDM4YzFmZmUyLCAweDY2MTY1YjEzLAotCTB4MzA3Y2I5YTgsIDB4MmQ5Y2JkYTMsIDB4NzdlM2U0OTcsIDB4YzYxYTQ3OTYsIDB4MjRkNjFjYTAsIDB4ZjcwZWU3ZGIsCi0JMHg4MzM5ZGI5MiwgMHg1ZGEzYzU5NywgMHg3Y2IxYWFkNCwgMHhjNzVhZjE4YywgMHhiZjNhMWEwNywgMHg5NGY1YzRhYiwKLQkweDhkMjVlZjc2LCAweDkzN2VjNDJmLCAweDhlZDZlMzkzLCAweGZjZjVmMWM2LCAweDk2OWIzOGJlLCAweDZjZmNlMDM1LAotCTB4ZWU4OTQwYWEsIDB4MzUxNjYxNmUsIDB4ZTFjMjgzY2EsIDB4NTgyNjZlOWMsIDB4ZDZlYzdkYjgsIDB4MTgyMWQ0NWEsCi0JMHgxZjE4MDk4ZiwgMHhhZDEzNzk4YSwgMHgwNGM3Y2YwMiwgMHgzYzBiOGY5ZSwgMHhhNGQ3N2VlMywgMHg4NWRmYmUwNCwKLQkweDYxNzdlZTI1LCAweGQ1OGRlNGE5LCAweDFmMmRlNGE1LCAweDI3YjRmMjRlLCAweGM0YWNlMTFhLCAweGU3MjhhNmZkLAotCTB4ZWU4Yjk4ZmMsIDB4ZDA1MTdjMzMsIDB4YmU3MGQyNmQsIDB4NzI2MWYyY2YsIDB4MDljM2EzZGUsIDB4YjczYTJlM2YsCi0JMHg2OWUyMmM1OSwgMHg0MzdmNjI5ZCwgMHhjZmQyYTc1OSwgMHhmYmYxOWZkMywgMHgwNzMyNDY1YywgMHg4M2IzNjdlZSwKLQkweDA4NzY0ZjIyLCAweDlmNTAyM2Q4LCAweGU0OWMzMDc5LCAweDdhMWU3MjkwLCAweDA3ZWUxOGU2LCAweGZjZTI3ZGIwLAotCTB4MTMyNTg0NjIsIDB4YzQ0YWEzZjksIDB4ZmM5Y2JiNTMsIDB4NDg2OTZkMWMsIDB4MjM5ZTIyNWIsIDB4YTU3YzEyZTgsCi0JMHhkMTczOTVkNCwgMHg2ZWExYTNhNSwgMHgyODRiOWNmNCwgMHg4ODk2ZDk5ZCwgMHgyNGJhMTJlNywgMHgwZGNlOGE4MywKLQkweDRmZWZlNzZmLCAweDhkMmJiZTA5LCAweGY3MjllMzE1LCAweGQxNWRlODRlLCAweDQzZWU4Nzg4LCAweGJjZjFhMzA3LAotCTB4N2JhMzI2ZGQsIDB4NmVmYjk3MjksIDB4MjgxMWRlN2UsIDB4M2E5NmYzMTYsIDB4Y2MxOWQ3MjUsIDB4Zjc3NDdkY2YsCi0JMHgxZTYzZjcxYiwgMHhmNWM2YTc3ZCwgMHhkYjFmZDYyMiwgMHhjYzdlZTg3ZCwgMHhmNjk0ZWRjZiwgMHhiZjdiMzE5ZSwKLQkweGM2OGFlNDFmLCAweDc3NDdkZGZjLCAweDgzZjdmMGI3LCAweDZjMThiZWY2LCAweDVlNmJhYWY1LCAweGI1ZWY4MzNiLAotCTB4OGZkZDBlNmIsIDB4NzU1M2JjZjksIDB4NDg5NTYzY2UsIDB4NzRlN2JmMmYsIDB4ZmZiM2Q4NjUsIDB4YjhhZGMyMWMsCi0JMHgxM2VkZGI5OSwgMHhmNGJmZWNmNiwgMHhmZGU1ZWExYSwgMHgzZmVmZGEyNiwgMHhlMDg2M2MzOCwgMHhmMmZjZDU1ZCwKLQkweGFlYjNhNDY2LCAweGJmZGUzY2JkLCAweDE3YTNlMWE5LCAweDc0ZWQ0MTdmLCAweDU0ZGMwZDc0LCAweGMxODMyYjlkLAotCTB4OWVlY2Q2NzcsIDB4MWE5YWYzNGIsIDB4ZWIxYWZhZTgsIDB4NDYzODhkNGYsIDB4OTAzYTk4ZjMsIDB4MTFkNmYzZjMsCi0JMHhlNzhmZGRlZiwgMHhlZmY2YmEwMSwgMHg2ZWY5MDQ3OSwgMHg2ODMwMDBlYSwgMHhmOWJiM2U3MSwgMHg3ZGEyYTBmOSwKLQkweGJmZDA5MzI5LCAweGNkYjUzMmVmLCAweDVlY2JmMWM3LCAweGYzMzlkMWQxLCAweDc0ZTE3ZGEyLCAweGMzZGJjNzJmLAotCTB4OTkzOWY5NjMsIDB4YThkMWQ1ZTEsIDB4ZWZhZjU1NjcsIDB4NTA4YmYxZGEsIDB4ZmRhMDY3NmMsIDB4NmUxMGYyOWUsCi0JMHhiNWM5MTVlNywgMHhmZTExMGY1OSwgMHgzY2YxZGE1ZSwgMHg4MTk3N2JjZSwgMHgzMTBiNWZmNiwgMHhjMmY1MDJhNiwKLQkweGE3MTQwOTFkLCAweDVmMWZlMzdmLCAweDY0M2M0N2NjLCAweDdjZThkYmNiLCAweDA2NzVkN2NmLCAweDk0ZTFjMjE1LAotCTB4Y2YwMDM2ZDYsIDB4Njk0ZTM4ZDMsIDB4MTQyY2RmYzgsIDB4ZmNkM2MyZjUsIDB4NjA1MTdkYmMsIDB4MmZlMTBlN2IsCi0JMHhmNTFhM2FiNCwgMHg0N2MwZDE2YywgMHhhN2JjZTNhNywgMHhhMjJmZDVjYSwgMHhlNjVlYzNiZiwgMHhkODVkYzZmNywKLQkweDdlODM3MDA1LCAweDk0MzVlYTE3LCAweGNiYjVkYWFkLCAweDNiZTJlNzQ0LCAweDc4ZjllYWE1LCAweDllYTM4OTNmLAotCTB4NTQzNGViYjcsIDB4ZjUxZDNjMTMsIDB4YjRkZWZjNDksIDB4NDhlODMwNWQsIDB4ZTdjNWI3NmMsIDB4OTdmYTg1ZjksCi0JMHhiZDFmZDFkMywgMHhmMjU0Y2FmOCwgMHg1NWZhMTU0YiwgMHhjZWE4YTVmOCwgMHgzZjFkN2NmZiwgMHhmZTI0NWFiNywKLQkweDMzMDc2NjY2LCAweDJlOTNjNTdhLCAweGViYWU3ODFlLCAweGZmZDNjY2I3LCAweGNlODY4MzYyLCAweGQ4ZWExNzc5LAotCTB4NTYwZmNjNWEsIDB4ZWEyOGExZjgsIDB4NWY1YzVjYWUsIDB4MTEzNmFhOTEsIDB4MzFjMjk2ZWQsIDB4MmY5MWYzZWQsCi0JMHgzZTk4MTgyZSwgMHgyN2JkZGEwMiwgMHhlMzUxNTVmNCwgMHhmZjY4MTllYSwgMHhhNjNlNjhkZSwgMHhiZjhmOWMxMSwKLQkweGViN2FlMDg5LCAweGQzODMyNjliLCAweGJmZDFiZjdiLCAweDk5OTJiNGZjLCAweGQ0ZjA0ZmRmLCAweDdiZTE1YTdmLAotCTB4YWQzZGYwZGUsIDB4YjRmZDA0YWIsIDB4M2YyZTEwYjIsIDB4YmM3YjQwY2UsIDB4N2M1MDJlOTMsIDB4YmY0YWMxNjcsCi0JMHg3ODIzOTI3MywgMHhiNjk5NjQ1ZSwgMHg5ZWY1MTEzZCwgMHg4NjNmZmUzMiwgMHhhODVkYjk5YiwgMHhiN2ZiYTc2ZSwKLQkweDQ1NGRmYmZjLCAweGM4ZTUwNDczLCAweGI3OWU3ZTZlLCAweGEwZWE1MWE4LCAweDUyMDgyMjczLCAweDhiNjY3YmFmLAotCTB4ZTYyNzBlZjQsIDB4ODc4N2Y1MDksIDB4MDc4MTJjODgsIDB4MTFiOWViMTgsIDB4YTI4ZjM0MzEsIDB4MDc5ZDAzMDYsCi0JMHgwZjY4MGUyZiwgMHhjNGE5M2I0MiwgMHhmNjg0MWVkNCwgMHgzMmViZDc0ZiwgMHhlODg5YzNkZCwgMHg4ZmM2NTUwYiwKLQkweDg5NGY3Y2Y1LCAweDM0YmExNjEzLCAweGRmN2Y0MzM2LCAweDFjNjBlNTgzLCAweDBkZmUxOTcyLCAweDA0NzU3OGEwLAotCTB4NjgyYTI3ZGYsIDB4Y2ZlN2U0MGEsIDB4MWU3NGVkY2QsIDB4MjYzY2ZmZGIsIDB4YzVlY2QzYWUsIDB4MmY0ZDVkOGYsCi0JMHhlOWZiNzk4NSwgMHg3OTcwNDdhMywgMHgxMDc1MmRkMCwgMHhlM2ZmNzRkZiwgMHg4M2E0NjhmMywgMHg4YjViMTUyMiwKLQkweDI1MTc5NWZiLCAweGVhMDIyZTdlLCAweGEyZTIxZTc0LCAweGZhMmNmN2Q4LCAweGY0ODAxOGQ2LCAweDEyOWJmMTczLAotCTB4YTkyZWUzZTIsIDB4ZmI1Y2U0OWQsIDB4N2M5MzNmZWUsIDB4OTNiNGQyZTgsIDB4YzQ2OGZiOWMsIDB4ZThmYzkzN2YsCi0JMHg4ZjlmNmUwYSwgMHg0NDdkYWI3MiwgMHhkOTFmN2YwZiwgMHgyM2NmMWYzZSwgMHg3Yzc1ODliZCwgMHg4MWZmZjc4ZiwKLQkweGZkZGFlZmZlLCAweGVmYThmZGVkLCAweDhmM2NjYWE3LCAweDMxYTRiZDgyLCAweDg3MTBmOGYzLCAweDI3MDEzMmY3LAotCTB4YWU5YzM2YzYsIDB4NjM0M2ZmMjQsIDB4MmRkMGZkNDEsIDB4MTY2ZjAzZTgsIDB4OThmZTVlNjQsIDB4Y2M1ZDRmYzIsCi0JMHhmOTExYTdiMiwgMHhjN2RmODBiMywgMHhjMzU1NzYwMywgMHhjZGZmNjg2YiwgMHg4NGZiYTMwOSwgMHhlY2E2ZTFmYywKLQkweGZjODY4NjMzLCAweDY5ZTIyOTZkLCAweGMwZmVjOTg2LCAweDY5NTM4MDA4LCAweDE3ZjkzYjZhLCAweDg3YTRlZDQwLAotCTB4OTFkNGRlY2EsIDB4ZTlhZGQ5OWYsIDB4MmJmMjgxZDksIDB4OGI5ZjY0YzUsIDB4NmRiNDRhZWQsIDB4YmMyNDMzZWIsCi0JMHgxNWJkYTBhNywgMHhjYTI5ZmE0ZCwgMHgzOTk3YzdmOSwgMHhiZWE1NzViZCwgMHg4ODRkY2ZjNCwgMHg4MTYyY2E3ZCwKLQkweGIyNWJiYzA3LCAweGUyNDNlOTE2LCAweDY5YWI3ZTc4LCAweDZmMjhmYmRmLCAweDQ4ZTJkYWJhLCAweGQzZjNmYjRlLAotCTB4ZThhN2E2ODUsIDB4NDA0ZjhhOWUsIDB4ZTJiYzNiYWYsIDB4N2MyYzlmMDAsIDB4NjYwMWYyOTksIDB4ZjE4ODFlNjMsCi0JMHhiZGJlNzNmYSwgMHhmZTRiZGRkZiwgMHhmNWVjZGIyMCwgMHhjNmIxZTkxYywgMHgxNzBmZWViNywgMHgwZmI3NGJhNCwKLQkweGRlNjgzODFmLCAweDAwZGY5MDNiLCAweGRhMTNjNWZlLCAweGJlODc3ZWU4LCAweGNiYTg0Y2ZhLCAweDdlMjNmNTVlLAotCTB4NzhmNmJmNzUsIDB4MGZkYTAwNWYsIDB4NTA1ZDg0M2IsIDB4OWE3ZGQ0MzIsIDB4M2MzZGY3ZmMsIDB4ZjQwYWI3NmYsCi0JMHgwN2Y3ZDUxYSwgMHg2YWE1N2U1MiwgMHg1MGFkZTgwZiwgMHg1ZjUwYjdhZSwgMHg1MWI1MDcxNCwgMHhiZjZiYWFkYywKLQkweGQ3NzlmNjhlLCAweGM2OGY5ZjM0LCAweDUyM2QwM2Y1LCAweGY5YjhhNjdjLCAweDdjY2JkZDIwLCAweDRjODdmZDEwLAotCTB4OTQ2MThmZDIsIDB4MzliZmIzMTcsIDB4ZTUxMGZkMGMsIDB4OTVjYTg5NzksIDB4ZDNmNWYyMjgsIDB4Y2YyODdlNTEsCi0JMHgyMjc3NjU0YiwgMHhkYTk1ZjM5ZCwgMHg4Mzg4ZmVlOCwgMHgyYTI1ZGU2MiwgMHgxNzU4Y2JhOCwgMHhkZjM4OTZmMywKLQkweDJmN2U2NmIzLCAweDVlZGUzZjk2LCAweDc2ZWRjMTE5LCAweDlmNzQwZjkwLCAweDc5ZDc5YWU3LCAweDA3OTE0MGRjLAotCTB4MWNhZTQyODUsIDB4OWNhOWU3YzEsIDB4M2VjYWNkZmYsIDB4NDQyZDc0MTEsIDB4NGU0N2VmYmUsIDB4MGIzMDhmMjQsCi0JMHhlMjgyYjg3ZiwgMHg1ODQ2M2IzYSwgMHhhN2Y0NWQ3OCwgMHg4OWRjNzk3MSwgMHhkMWJkOTdkZSwgMHg4YTliMWU5OSwKLQkweDNkY2EyY2ZkLCAweDE0NzkxZTVmLCAweDI4MmY5MWU3LCAweDBlNDgyMjA3LCAweGMxODRkMWFjLCAweDk0NWU4YWJhLAotCTB4YzJhMmZlZTgsIDB4YTA3M2FiNzksIDB4N2VhNjViMzksIDB4MmQ0OWVlODgsIDB4ZTM1YmJjYzAsIDB4YTdmMmYzZjUsCi0JMHg1N2I4ZjFhMywgMHhlYzUyZjI4OCwgMHhlMGVkMTUwMywgMHgzNTE3NDBmYiwgMHhlNDBkMWY3YywgMHgyZmY1ZTUwZCwKLQkweDA3M2FiNDliLCAweDY4NDk2ZmY5LCAweDRmZGJkNmE5LCAweGQ3ZjhkOWJlLCAweDU4YWY1YjlkLCAweDBmZGUxMzlkLAotCTB4ZGNhZDE3OWYsIDB4NWQ4ODNhZDIsIDB4YmRhMTVlM2YsIDB4NzJjYzI3MzYsIDB4ZGU2NTczZmQsIDB4M2NjYTBkMTcsCi0JMHg3OTA2NjgyNywgMHhlYWY2NjNjMywgMHg3MzRmYmMxYywgMHg4NWRmZmU5OSwgMHhjNWY3NWYwNywgMHhmNTFiOWQ2NiwKLQkweGY2OTdjMDJlLCAweDU2YmNlZTgzLCAweGJkNWYxM2UxLCAweGNjODU3OGQ5LCAweDM3MWZmYjQ5LCAweDU5N2ZiZjlhLAotCTB4NTM0ZmI5MjIsIDB4NTdmMDJkNWUsIDB4ZjlkOWYxM2QsIDB4YTBmZGVmNjgsIDB4ZjZiZTQyMjksIDB4MTYwYTI1YzUsCi0JMHg0MDdiYTMwZSwgMHg3OTg3MGJlYywgMHg0YmZjMjVjNywgMHg1NTgzOTQxMCwgMHhhMGUyMzM5NCwgMHhiZTcwZjgxMiwKLQkweDI4NzgxZmI1LCAweDA0NjdmZmVkLCAweDMyOWE0ZmNmLCAweGUwZDVmMzgyLCAweGJkY2ZjNWE5LCAweGEzOWUyOGM2LAotCTB4ZTM3NDFkNGUsIDB4NTRhNjIxZjMsIDB4N2NiNzRmY2UsIDB4MjA2MjY0M2UsIDB4NjBjODc3NmYsIDB4Zjc0ZmI4YzYsCi0JMHg1YzUxYmZhMSwgMHg3MTlkN2JiOCwgMHgzMDZmZGYzNiwgMHhkZjc4NDhiMiwgMHhkZGI2OTExYSwgMHg4YWZiZmUzYiwKLQkweGU3ODE0NzM4LCAweDdlZmNlOWJlLCAweGUzODdlNmIyLCAweGJlYTZhOTRhLCAweDFiZDkxMmI4LCAweGNmYjQ4MWE5LAotCTB4OTU3NGQ1ZDIsIDB4NGI3NzViZjQsIDB4NDNmNzE5YTYsIDB4NDY5Y2RhYmEsIDB4N2ZmMmI3ZTQsIDB4ZWExODRmZmMsCi0JMHhiMzk2YWVlMSwgMHhmNWQ2OTc5NCwgMHg1N2NhNzlkZCwgMHgwNmYyMjhkYiwgMHg3Yzg5MzQ4ZiwgMHgwOThiMzZhZiwKLQkweDdlZTc3NzlmLCAweDM2ZWQ4MzkxLCAweDU3MTNkMjg5LCAweGE1MzE3MWUwLCAweDI1NjVmYzU0LCAweGZmNzVlMDdlLAotCTB4NmI4NDI4ZDEsIDB4OTNlMzc5YmQsIDB4YTYwZjMwMTksIDB4MWRkZmE2YWYsIDB4MDQzOWZmMDAsIDB4YWUyNzg3ZjUsCi0JMHhhMWZmMDk2MCwgMHgyYjhjNGEzYywgMHhiOGYwMjdjNCwgMHg1NzE4OTYwMiwgMHhiOGYwZDc4OCwgMHhhZTMxZDYwMiwKLQkweDE1YzYyNTgwLCAweDE1YzYzOWYwLCAweDA1NzE4ZWIwLCAweDAxNWM2M2FjLCAweGMwNTcxOGViLCAweGY4MGFlMzEyLAotCTB4OGU3MTZiZmMsIDB4Mzc4YzFiYTMsIDB4OTIzNGY3MWUsIDB4Y2Y1MTVmZmMsIDB4ODg1NzZiZjcsIDB4ZDQ1N2ExZmIsCi0JMHg4NWI3OTQ0YSwgMHgwZjUwMzhlNywgMHhkM2M3OTc1ZSwgMHg1Yzc4ZjIyOCwgMHhiMDNmNjg1YiwgMHg0NTZjYmY3YywKLQkweDBmNzllMTU0LCAweDc5ZjMwZTg3LCAweDNjNjI4ZTdhLCAweDY0YWY3Y2E4LCAweGU3YzE2ZDVkLCAweDFiMWU2OWIzLAotCTB4OWUzZjMyNWIsIDB4MzVlYmNmODcsIDB4YWM5N2JjNTYsIDB4MzA5YmU1YmIsIDB4YjUxNTc3OGMsIDB4NmFkYzUzZDQsCi0JMHgyZDIxZjg1MiwgMHg2MjQxYjllMSwgMHhhNTlkNmYxOCwgMHhhOTcyN2VlMywgMHhkMzQ3NGYwYywgMHhkMWQ5MjliZSwKLQkweGYyMzZiYWE1LCAweDRhNzc4YTVmLCAweGRkZjNlZjY2LCAweDkwYWY2M2U1LCAweDliY2JlODljLCAweGY5Y2MxOTcyLAotCTB4YzZkNWZhM2UsIDB4NGZmMGFlZjMsIDB4NTdkODhmYzQsIDB4ZjQ5YmNhNWUsIDB4M2Q5MTU5ZTUsIDB4MmQxZjY1ZTIsCi0JMHg3YzY0ZmRjNSwgMHhlNzQ3N2YyZSwgMHhkMWMxNGE0YiwgMHg5M2Y1MjgxZCwgMHhjZmI3ZTU4NywgMHg3N2IyZDQ1YywKLQkweGUyOWJkZTNkLCAweDc3ZGNkZmJmLCAweDlmNmZjZjVlLCAweGQ4YWE2NTc5LCAweGNmYzUxZTRmLCAweDlkM2VlNDg5LAotCTB4N2MzZjY3YmYsIDB4NDc1YWI3YWYsIDB4NzBlNTRhZjYsIDB4MjY2YTY1N2IsIDB4MjhkODZiZTYsIDB4OTBmNDcyZWUsCi0JMHgyZmFkZmM4MSwgMHhjNGY5MjRiNywgMHgyMWU1YjI1ZCwgMHhhZTU4ZjcxNCwgMHg2YjhmNDg5MSwgMHhiMGViZWQ5MiwKLQkweGM1ZGNjNGRmLCAweDE4OTk2ZjE0LCAweDU2N2UyMjYxLCAweGE0YmRmMGU4LCAweGZkZjFjN2JjLCAweGM1MGIzNGYyLAotCTB4ZWM3NWIyYmIsIDB4Yzg5ZTM0NjcsIDB4Zjg5MjgyZWYsIDB4YTI0YWJiMmQsIDB4MzIxN2E5N2IsIDB4NTk3YjlkMmIsCi0JMHhmMmY3ZTM2MCwgMHgyZGU4ZjcyOSwgMHg0MWNmM2M2MCwgMHg1YmU1YWJhMSwgMHgyODJiYjIyNCwgMHhmYjg2MTEwMCwKLQkweDBiOWUxYzlkLCAweDdiYTFkZTVhLCAweGM0ZWIxNjRmLCAweGJlMmE3ZTNkLCAweDg5YjUxZTFmLCAweGMxMmNiZmU3LAotCTB4ZGVmMGE0MWIsIDB4NThhYmQwMTAsIDB4YjM3ZDllODIsIDB4MDNkYjllMWQsIDB4M2I3MzQ0ODcsIDB4ZTM4ZTEyZGYsCi0JMHhhMWFlM2MyZiwgMHhmMGVjZTEzYywgMHhhNGVkMTNiYiwgMHgzZTUxMjdlZiwgMHhmNmVmNWUwMywgMHg5MjFmODhmZCwKLQkweDBjZjliZWEzLCAweDQzNzkzNTQ3LCAweDQ4YWRkZDcwLCAweGIxZTcxNGE3LCAweGIyYmM3OTUzLCAweDllMjU0YTgwLAotCTB4NzYyZmU0YTMsIDB4MTdiODNhMWYsIDB4Y2U1ZDlmYmYsIDB4ZTFiZGU1ZWYsIDB4ZmU4MGJkNzksIDB4ZTcyOWFkY2YsCi0JMHhmOTE0NWUxNSwgMHg1M2FhNTE3NSwgMHg3NWZjZjA2MywgMHgyYjQ2YjdkNCwgMHhmYzNiM2ZhZSwgMHg4YWY3OWQxMCwKLQkweDRlMWZlMzEzLCAweGU1MDM3YmNjLCAweDM5ODgyZDhhLCAweGNiZWUxZmIwLCAweDczM2MwMzU0LCAweGM2MTIwMTcwLAotCTB4M2MzNjVkY2QsIDB4NDg3M2QzMzcsIDB4ZjUxZTUzMzIsIDB4Y2I3M2YyNzUsIDB4MjllZmNjM2EsIDB4ZGVlODk3OGYsCi0JMHhlYTgwOWNmMCwgMHgzZjE4MzBlYywgMHg4YWM2MzYyNywgMHg4OWJjYmJmMiwgMHhhMGJiNWRjNywgMHhjM2JmNzhlNCwKLQkweDMxODFmNzQ5LCAweDE0ZDczZjdlLCAweDI0OTBiNzgxLCAweDRjZDQ4OWZiLCAweDgyYTlmM2NmLCAweGFlNWJiYTZmLAotCTB4OWJlMWZjZjIsIDB4ZThlYjY1YzcsIDB4YjA2NjEzYmUsIDB4MjFiMWY3MmEsIDB4MTg4ZWE3ZGUsIDB4ODU1OWYxNGEsCi0JMHhjMjFiN2E2ZSwgMHg3Y2RkMjNiNywgMHhiY2MzZjQyZSwgMHg2ODM1Mjc3OSwgMHg2Yzk4N2MzZiwgMHgzMGUxMGNmZiwKLQkweGJhY2FmZjNmLCAweGZmNjc1YTMwLCAweGNmMjUzMWYxLCAweGE2M2UzZmRlLCAweGFiZmZlZGM4LCAweDJiZjdmYWZjLAotCTB4NTEzY2E4MmIsIDB4YjZjYTkyYjksIDB4MDdiZDA3NGEsIDB4ZWE3NWYwYmQsIDB4ZmY1NWM1YWQsIDB4OGZmNWYwOGUsCi0JMHg2NWJkMzJhYiwgMHhlMDU3ZTkwMCwgMHhmNmM3MWU2ZiwgMHg1ZjAyYTM4YiwgMHg3YWY4YmNhYiwgMHhhMmYwNGI2MiwKLQkweGQ0N2Y2ODBkLCAweDRmZmVlOTY4LCAweDYxNWU3N2NjLCAweDQ5YTAzOTI0LCAweGFhOWUzN2ViLCAweGYxNDhjZGMwLAotCTB4MTg2NjVlZDcsIDB4OTA5ZmYwOGQsIDB4YzE1NmE3MWMsIDB4OTI2OTAxZmIsIDB4ZjIwMGZlY2YsIDB4ZjkwZmFlMDksCi0JMHgxM2U0NGIwNCwgMHhmM2RjNTdiNSwgMHg3MGIwMmQwNSwgMHgxYzA3YjcwNiwgMHgwODE4MGY2NCwgMHg4MzU3ZWJhZiwKLQkweDFlZjA5MGZjLCAweGZjOGZiMzI1LCAweDNmMjdlNGI4LCAweDkwNzk3MWMwLCAweGYwYjU3ZGNlLCAweGVmMjUyNmZjLAotCTB4ZDcxNDAyNzMsIDB4NGYyM2Y3NDYsIDB4MGM5ZTVjNWMsIDB4YzJlZDcwMGQsIDB4MGIyZDBjZWYsIDB4YTNlMmJjYTAsCi0JMHg0NzVmNGUxYSwgMHhiOWJjZjIzNywgMHhlZmM3OTY3YywgMHhhZTVlYmE2ZiwgMHgxNjNlMjEwNCwgMHhmMzM5ZWMwZiwKLQkweGZjNWZiNDNjLCAweDM1ZDkyMzJiLCAweDY2OTcyM2ViLCAweDI1NzIyN2ZkLCAweGMzYzM4ZDIwLCAweDYzMjU4MTMxLAotCTB4Y2FjZGYyN2UsIDB4ZTA0NWVlN2UsIDB4MzE0ZTY2ZjcsIDB4MmU1YjlmOTEsIDB4N2NiMmEwZWMsIDB4NzJhN2YxMzMsCi0JMHhlZDRjYjQzZSwgMHhlZDhmNThlYSwgMHhmZjNjNGQ0MiwgMHhiZWU4Y2Q0MywgMHhjMWFhNTM5NiwgMHhjMTU5OWVmYywKLQkweGM0YTZhNzY3LCAweDU4NjA1ZTUxLCAweGE4ODdiZjE1LCAweGVlODk2ZWU3LCAweGM4MTQ5ZTAzLCAweDU2Yzg1N2VmLAotCTB4MGNiYzk1ZTUsIDB4Yjk1NmRmZWYsIDB4NTRjMWVmYzUsIDB4MTIyYmY4ZDMsIDB4NzNkMTVjNzksIDB4NmJkYjk1MWUsCi0JMHhiYTI2Yjk1MSwgMHhiYWY2NDEzZiwgMHhjNjMxYTkzZiwgMHgzOWY0NWVlYiwgMHg2ZWNmYmVmYywgMHg0ZGZmNzJhNywKLQkweGEwODdiY2RlLCAweDdlMWNjZDVmLCAweGIzMzc2NmNmLCAweDAzZmI4MTNjLCAweDcxMDA4MjhlLCAweGI1ZTgxMjdmLAotCTB4OTlmZGNmMGMsIDB4ZWRjOWZlMDcsIDB4MTU0MjllYmMsIDB4MTlhZDUzOWQsIDB4ZWI4ZDU5NjUsIDB4NDJjYzc5YWEsCi0JMHgyN2Y3M2RlZiwgMHhlOGRjZjg3MSwgMHg4MmRiOWMzZSwgMHg4MzY5ZjllYywgMHhlNzE3YmZhZSwgMHhjZTZmMjkxOSwKLQkweDY2OWZlYzEyLCAweGUzNGZmN2U0LCAweGVlZDA4ZGU1LCAweDRmZTE5Y2U4LCAweDBlMzg0MGVjLCAweDNkYTI2NGIxLAotCTB4NzA2YzY4YmUsIDB4MTFmNDA0OTYsIDB4MDZmMzA2YTUsIDB4ZDQ2MzBmZTgsIDB4NDZkMDVmNzQsIDB4NzFmMzEzYjUsCi0JMHg3ZGM1YTg4NywgMHhlZjIxNmEwMSwgMHhkMTgwYzg2MSwgMHg4NWE2ZGVkNCwgMHg5NmE3YzJmYSwgMHhhYmVhMWIzMSwKLQkweGYzZjc0NjI4LCAweGZlZjllYmM2LCAweDU4NjNmNDM4LCAweDQ2NDZiODYyLCAweDdjNzhjODNkLCAweDNlMDBlMTY4LAotCTB4NDY3MGMyZmUsIDB4NDVhNWNmYmYsIDB4M2JmMjUwMTYsIDB4MjY3N2YwYjMsIDB4YjBiYmM1MTgsIDB4ZWE2OGQwN2YsCi0JMHhmZWYxNTBlZiwgMHhjMzk0MzUzNiwgMHg1MjNkZjhlMiwgMHhiNDc0ZWIzZCwgMHhmMWYwYmEyZiwgMHhhNzFmYTRhMSwKLQkweDc3M2RmMDRkLCAweGU3OGQzMjdmLCAweGI4ZTUyODJkLCAweDlmMGY4Yjc0LCAweDQyOWI1YTJmLCAweGQ2OGI4YmZiLAotCTB4M2I0NTI5Y2UsIDB4NDgxMGRlYzQsIDB4ZWYzYjAyZTcsIDB4ZWYwYmE5N2IsIDB4OWQ5NjJmNzEsIDB4ZjU4MjNmNGIsCi0JMHg1N2I3NGVjYywgMHg0YTJmN2MyMywgMHhhMWZiZjk5NiwgMHhkZmZiYTJjMSwgMHg4YzllNjJkMiwgMHhmMmUzMzVkZCwKLQkweDc3NGU1MGViLCAweGY3ODEzZGVjLCAweDRmYmY0ZGU0LCAweDE5ZDNmZWE2LCAweGFkOWE4ZmJmLCAweGRlNmNmN2U1LAotCTB4OGVhMmI4ZWQsIDB4MWVlZmYxODAsIDB4YmNiYzUxMjcsIDB4NDY4ZTYwYzMsIDB4YzBhMTZlZmIsIDB4NWM2OWYzZDcsCi0JMHgzZjVjMmY3ZSwgMHhlYmZkMTEzNCwgMHhiZGRmNzFiYiwgMHg1YTczM2QxZiwgMHgwZmRlNTNiNCwgMHhmYzdjYzg5YiwKLQkweGZiYzU0ZjliLCAweGZlZjhkMzRmLCAweGZlMzhiMGZjLCAweGFlODM3ZjNlLCAweDRiMDgyZTIzLCAweDRhMDkzYjhkLAotCTB4NGVjMjc1OGQsIDB4NThiNGNmNWMsIDB4ZTExNWIzOTYsIDB4Mzc4ZjI4ZjgsIDB4OWI5ODE4NzYsIDB4OGQzZWIxZTgsCi0JMHgzZDY3NmFlMCwgMHgzYWUzOGYxZCwgMHgzYWQwNDZlYSwgMHhhMzliYzYzYSwgMHg3MTBlNWVlOSwgMHgzMzEyZWI3ZiwKLQkweGUzMWQ0Zjk3LCAweDk4Y2U3N2Y5LCAweGE5MjE0ZGRiLCAweDFlZjA3ZjljLCAweGE1MDJjNWQ3LCAweDNkNTY1NzY3LAotCTB4NWJiNDFiNzksIDB4ZTc0ZjRhYmMsIDB4N2QzYzk3MzUsIDB4OGIyYmY5MmYsIDB4YTczYTY0NmIsIDB4ZGVmYjM2YzksCi0JMHhjNGZhMGFlMywgMHhiZmYzZjM4ZCwgMHhkZWZmZDU4ZiwgMHhkMjM5YzQ1NSwgMHg4OTY2ZmU0MSwgMHg5NTU4NjhlOCwKLQkweGYxZmI4YjU1LCAweDRlYzA1YjNkLCAweDQ2ZjlmNzgwLCAweDA1ZGEzYzc3LCAweDc1ODM1NmY5LCAweGJkY2ZkNDhkLAotCTB4ZGMwMWRmYWMsIDB4NmI5ZWYwYjIsIDB4Y2Y5M2YxNDYsIDB4ZTAxZmVkZDMsIDB4MmY1NjE3NzcsIDB4MDM1MDdiYTQsCi0JMHgxNzE0ZWQ1MywgMHgyMTdlMDYxYiwgMHg0ODQxM2ZkYSwgMHg2OWQ3MDAzZiwgMHg3ZmJhNWUwMCwgMHg4OTFlZGQ0MiwKLQkweDM0ZmFjZmZlLCAweDljYzQzY2YxLCAweDM0YmEyNDY4LCAweDBlZTdlNDMwLCAweGU3MTEzOThkLCAweGEwY2ViMWQ3LAotCTB4NmQzMTk5NDIsIDB4ZTA0ZmE3MGQsIDB4MzQ3YWJkMWIsIDB4MDE2MDMzOWUsIDB4NGJiZmJmYzgsIDB4NmYzOTc0ZTMsCi0JMHgxNmFmM2FiNSwgMHg2ZDQwNDNlYSwgMHg2ZTkwNDI5YiwgMHg0ZTdkMTE0NiwgMHg1MGViZGFiNiwgMHgxOGY1N2RhZiwKLQkweDczNzI4YjFiLCAweDdjMmRlNmYxLCAweDRjZmYwMjVlLCAweDM0ZTc0NmRkLCAweDE5OGZhYWJmLCAweDBhMDY3OThkLAotCTB4NGViNjRjM2QsIDB4NGRlNjliMzgsIDB4ODQ0OWY3MDcsIDB4MzFjZjU4N2YsIDB4ZWIxYTM3ZDQsIDB4MmY1YzRlYTIsCi0JMHhmNDhjM2YzYywgMHg5YjgyNmQzMSwgMHhlNWIyMTJmMiwgMHhiY2ZkZmExMiwgMHhmNzQ2MDhkZSwgMHhjZTMyZjRmMiwKLQkweGQ0MWJiZGFmLCAweDM5MTQ2N2E0LCAweGEwMDNjOGExLCAweGQzOWUxYjA3LCAweDdmZmRmMDU1LCAweGYyMjg3ZjY1LAotCTB4NzI0M2UwMDYsIDB4OGExYjkxNDUsIDB4NGJlODUxN2MsIDB4NzRmZTMzOTEsIDB4N2NjMDFmMzUsIDB4NGZlYTY4ZTcsCi0JMHg2MzkxNGNmMiwgMHg2OGQ1MGViOCwgMHhmMDUxN2M4ZiwgMHg1ZTMwZDlhYywgMHg4MTU3NzE0NSwgMHhkMmY5NmNlNywKLQkweDg3MDg4MzllLCAweDJkZDkyMzAyLCAweGVhMzE3MDdkLCAweDVhZDEyZTA5LCAweGNmZjc4NGQ2LCAweGI3OTQzZDU2LAotCTB4ZTNkMjI5NzcsIDB4ZDA2MzczMmYsIDB4ZTA1Yjk4ZmUsIDB4YTdmMjllN2IsIDB4MjhlN2JlMTUsIDB4M2RmNGFjMTcsCi0JMHhlNTZmMzk0NywgMHhmYzYyOGU5ZiwgMHgwZmIwMGQ4OSwgMHg5Y2ZjMDc0YiwgMHgxN2I5ZTVmOSwgMHhlZmVhODYzZSwKLQkweDgxMzE3OTdlLCAweGVhOTdkOWZiLCAweGFlZWZjNTlmLCAweDY4ZjMxMDBhLCAweGE1NWFmM2U3LCAweDRjMzFiZDI1LAotCTB4MGZmODgxZDgsIDB4NzE4OGIyZjEsIDB4MTMxODVkM2UsIDB4ZGZmNTAyN2MsIDB4MDkzZjEwNWYsIDB4ZjFjMWZmYjgsCi0JMHg2N2UwNDY3MywgMHhlODBmYzIxMSwgMHhhZTNhZTE3ZSwgMHgxMjFjM2E5NywgMHhhZDE2MjNjNSwgMHhjMWJhN2MxNSwKLQkweGU3ZjQ3Y2Y3LCAweDMwM2RhYzkxLCAweGZhOGU3M2NlLCAweGEzMTJjN2YzLCAweDczOTVhZjkxLCAweGZjMGRmNmQzLAotCTB4ZjJiNGI1NWMsIDB4NzYyZmQ5MTgsIDB4ODcyZDdlZTUsIDB4MmI1YWZkZGYsIDB4ZWJmOWY5NWIsIDB4Y2Q3M2RmNzYsCi0JMHgyZDM2MTk4MSwgMHhmNzE4MmJjNSwgMHgxZjI1MTZhMywgMHhkNTM2ZjllMSwgMHhiYmY3MTk5MiwgMHhmY2YzYzVmMywKLQkweGI5Y2Y5MjBkLCAweDFlNzQ5Y2I5LCAweGE2OThkYTE3LCAweGEzYjYzYzI2LCAweGNhZjE0MjlkLCAweDBhMmZkMjZhLAotCTB4YTBkYzgyOWQsIDB4ZDVmOTdjNzMsIDB4YmQ0YmI0YTMsIDB4ZjEyMmU4ZTQsIDB4Y2FiMjcxN2MsIDB4MzZkNzc3ZTcsCi0JMHhlYmZkZjFhNiwgMHgxODFhNjQ3NiwgMHhhYzcyNTM3NywgMHgzYmM5MDk3NiwgMHg5NTQ3YzUwYiwgMHg0NzkyOGJmNiwKLQkweGMxYjhjN2FmLCAweGViZjhjZGEyLCAweDMzZmU5ZTQ3LCAweDM2N2NmOWQzLCAweGRjOTRmOThhLCAweGU1ZjdjZTQwLAotCTB4Yjc5ZmUxNTUsIDB4OWZjOWJjZDMsIDB4Zjc3NTdhMmUsIDB4MDMzYmY4YWIsIDB4OTFkNTdmNDUsIDB4MjkxYTI5OWUsCi0JMHg5ZDUzZDlmNiwgMHgzZWQyZjc1OSwgMHg1NWQ3M2YzMiwgMHg2OTNkZjAyNiwgMHhlODQxNjdmNywgMHhmMjM3OTQyNywKLQkweGVjYTFiMmZiLCAweDU1NmNiMmMwLCAweDY1ZmJmOTAxLCAweDkwODdlMDU2LCAweGRmYmZmM2ViLCAweDQxYWZmNTdlLAotCTB4ODhlY2JlM2MsIDB4NDdmZmJmMTIsIDB4ZDY1NTYzYmYsIDB4MWZjNTA1ZjgsIDB4NjQ3NzJlZDAsIDB4NGY5NDc4ZDAsCi0JMHg1Y2JmZGZlZSwgMHhmYjg4MmVmYSwgMHg5NzA0ZWRiMSwgMHg4NGRmNDNlYywgMHg1ZmY2M2NkMSwgMHhmOTc5YjhhNSwKLQkweGY2NjE3NWExLCAweGRkN2RkNjdlLCAweGNmMTEwMTM5LCAweDJhZjgxNzI4LCAweGUwYWY5YjY3LCAweGFhZjk1YWZlLAotCTB4YzgyY2YzZGMsIDB4YmY3ZmJlMzMsIDB4Y2UyMmU5NzUsIDB4OGRiYjFiNzAsIDB4NGNkNWQ2ZjIsIDB4NWNjZjdkZTUsCi0JMHgwN2UxMzNhZiwgMHhiN2NiMjVmMywgMHhiZDlkNzNmMiwgMHhkYzAwY2I2YSwgMHhlNzE2ZWI5NywgMHgxZGRiZmNiNCwKLQkweGMzN2VlNzRmLCAweDBjMjdlMDY1LCAweGM4Mzc3NDQ0LCAweGRkZDNjZmI0LCAweDY1NzhlM2MwLCAweGUyYjU0ZjBkLAotCTB4NzAzMmQ4ZjksIDB4OTU5ZDkxOWMsIDB4OGQ2NTQ0NzMsIDB4ZWI3YmQzMzIsIDB4MWE0N2NjMzUsIDB4MTY3OWUzNzgsCi0JMHhmZGQxMzZlZiwgMHhjOTJlODUzNCwgMHhlOWYzMGY1NiwgMHg5MDY5N2YwNSwgMHgxNjVlN2NkNywgMHg3M2FjNTU3NCwKLQkweGNhZjhlMTY1LCAweDcyMTA1ZmZjLCAweGQ4NTc2OTRjLCAweGI3OWQxNGYyLCAweDY0NWQ3Njg1LCAweDkwM2VmYzlmLAotCTB4OWViMmZkZjEsIDB4Y2VjZjM4MTMsIDB4N2Y2ODYzNmQsIDB4YjdiNWQwYWIsIDB4MGQ4ZmUyOGMsIDB4NzJiNzk0ODEsCi0JMHg3ZTdiZTM1MSwgMHhkZWY4OWY3YiwgMHg2NzZlNzRiZSwgMHgyNGRlNjI3NCwgMHhhNjU1N2ZmNiwgMHgxM2NlMTliOCwKLQkweGU0YTJmMWY5LCAweDJjZDFjZjliLCAweDczYTczNWZhLCAweDNhN2U2NTNiLCAweDdkYTUwM2U3LCAweDI4MjNhYmExLAotCTB4NmY5ZmRhMWUsIDB4NmY5NTEzZmEsIDB4NmY3YzdiNjEsIDB4YmQ0NzRiNmMsIDB4OTAzMWJlNzksIDB4NmY5ZWQzY2UsCi0JMHgwZGU3M2U3YywgMHhkNzY1ZGVmOCwgMHg4YmM5NTBmOCwgMHhmM2E3NGViZiwgMHg2ZGU1ZTVmOCwgMHg3M2IwNWNlMiwKLQkweGUyNjczOGEwLCAweDM2NzRmNWEyLCAweDVmZTg0OTQ0LCAweGFmZmM4YTk2LCAweDQxN2RjNmNlLCAweGM3NWZlMjJhLAotCTB4NjI3YmY2N2YsIDB4ZWZiYmFmYjMsIDB4MjY0Yzc3YWMsIDB4Zjc2Y2JmOWUsIDB4N2ZlY2VmYjksIDB4ZjEzMmZjNmIsCi0JMHgxM2NhYThkYywgMHhiN2JmZTFkZiwgMHg1ZGRmOTRjYSwgMHg0YTc2ZjMzMSwgMHg0OGZlNzYzYywgMHgwZTc4MDNjYiwKLQkweDdmYzdiZDk3LCAweGZlZWMwZDk3LCAweDlhM2ZkMTY3LCAweGU0ODFjN2ZmLCAweGFkZWZlMjdmLCAweGY3ZWJmZDYwLAotCTB4ZmNkOWJlZjksIDB4NDRhZTQyMzEsIDB4NGNiZTUzYjQsIDB4MWZiNzBjNDcsIDB4Y2M0ODM2NGEsIDB4MDYyYjcwMDYsCi0JMHg2ODAwNzJmYSwgMHhiMzMyOWM0YiwgMHgyMzFkZmRlMywgMHgyNzcyZmVmOSwgMHgyNDc2YmZkMCwgMHg2N2NhMGJjOSwKLQkweDFkZmUwMzM5LCAweDZiYzEwZWZkLCAweDI0YjkzZjdjLCAweGU3ODg5ZGQ2LCAweDVlNDUzYjAzLCAweDNiODg0OTQxLAotCTB4N2I4YzIwNzEsIDB4Yzk0OWQwNDksIDB4YjdhMjc3NGMsIDB4ZGRiMjUzN2YsIDB4OTczNTc5NGQsIDB4YmUxZDNlNDQsCi0JMHhjOTVlNzhjNywgMHgyM2FlZGU2OCwgMHhlNzQ1ZGNjNiwgMHgxODliZjYzOCwgMHg4M2FhYWJkYSwgMHhkMmMzYTIyNiwKLQkweGJkZGIwZDk3LCAweDQ2OTlkNWNmLCAweDkyZmZmYjcyLCAweGVlMWJkZjk2LCAweDUzZTdjMWQ4LCAweGUzNGQ1NDE4LAotCTB4NWRmNDEyNWMsIDB4ZjM0ZDUwMTgsIDB4MjljZTIzM2IsIDB4YmQ3OTZhMTcsIDB4YmVlOGMzNDMsIDB4ZmM1ZDllZmUsCi0JMHg5MThiYTEzZSwgMHgzYmYwMDc2ZCwgMHg1MGE1NzcxNywgMHg4YzQ3NjlkZSwgMHhiZDEzNjk3MywgMHg0NTI2NzllNywKLQkweDM4ZGNlOGFmLCAweDRjYmIwYmFmLCAweGY3MjgyZTc0LCAweDlmNjk1Yjk3LCAweDI3NGViN2IxLCAweGMyZTFkYzYxLAotCTB4MWVlNzQ2MjAsIDB4MjIwZmQ0MmUsIDB4YjI0MTdkN2QsIDB4YzJmMzdjNTAsIDB4YmM2OTAzYmIsIDB4NzQ5NWNhYTIsCi0JMHhjNDA4YTViZSwgMHg1MDlkZGEwNCwgMHg3NmJkYTJlNiwgMHg2OGI5ZmVhMSwgMHg2ZmE4NWZlNCwgMHg1NTlkYmFjMCwKLQkweGYyMzlmZmNmLCAweGJiZmU0ZWU5LCAweGY5NWYxNzEwLCAweGJlZjc4YTdiLCAweGVmZmE1MjhmLCAweDU0ZjgyODlmLAotCTB4ZTQ4ZGE3ZGUsIDB4OTIzNjk4ZmMsIDB4OTFhOGYzZjMsIDB4M2JkZTdlNjYsIDB4MmM0Y2Y1ZDAsIDB4MzdmMzhmYWQsCi0JMHgwMmZjOTljMCwgMHhhZmJhMjdlMCwgMHgzOWFiOGNlNywgMHg4YTcxODI0YywgMHhhODZjOWEwZSwgMHhlZTM0M2JkZiwKLQkweDBlMDllN2M0LCAweDc4NzdlMjgxLCAweDE3ODVmOTE4LCAweGJmMjQwYzc2LCAweDFhNjhhYzFjLCAweDM0OGVjMmU3LAotCTB4ZjI1MmQzY2EsIDB4YWRhMWE2NGQsIDB4MjM0Yzc4NDYsIDB4ZGJjYjY2ZjgsIDB4ZTVmZWU5ZDIsIDB4YzdjYTQwYmEsCi0JMHgzNmZjN2EyOSwgMHhjODlmZTUxNSwgMHg3YTJlZWVkYywgMHg1MTM0ZjE3NSwgMHg0ZDdlZTFiNywgMHhhMTdmY2ZkMSwKLQkweDkzZTI4YmMwLCAweDg5Njk1ZTRhLCAweDhmYTVhMzkwLCAweGYzMDAzMWRmLCAweDY1MWZkOTcwLCAweGFhYmI5M2NhLAotCTB4ZmU4Zjc5ZTYsIDB4NDhlNWY5NzAsIDB4YmMwZjQ3MjEsIDB4MDI1YjdjNDAsIDB4YzNiZjhlNzQsIDB4YzJmMjJjNTQsCi0JMHg3MWUxNWY4YiwgMHg3N2Y1ZTI5NiwgMHhmMWYyNGIzYywgMHhkZTYxODY4NCwgMHg1M2Q3MjVlZiwgMHgyZjcwZGU0MSwKLQkweDk2ZTVjOTE4LCAweGRhOTViZmE3LCAweGRlN2I0MzE3LCAweDlhMjBiZGZmLCAweGU1MGQwZWNmLCAweGViZTNmYjI5LAotCTB4MjJiZmZiOTYsIDB4OGJmZDViZmYsIDB4ZjQwNzYwNWMsIDB4OTU3YzFmYjMsIDB4NTdmMjNkYjUsIDB4MDYwZDAzOTQsCi0JMHhmMjllODNhYiwgMHg4ZDRlYmRmYywgMHhkZjNmMjk2YiwgMHhkMGY5MjA2MCwgMHhhZjdlMmMxOSwgMHgxMWU3OTJiNSwKLQkweGZhOWZhZjE0LCAweDM4NTdjYTZiLCAweDY5OWQyZjc1LCAweDdmZWNlNjVhLCAweGE0NzRhZWJmLCAweDBmOGJlZjg2LAotCTB4M2U0MDBlYjQsIDB4ZTA3YzA1MmMsIDB4M2ExZjgwNzgsIDB4YThmZWNlNWYsIDB4ZWJmZWZlYTEsIDB4Y2I5MjNhOTksCi0JMHhkYzNlM2VmNSwgMHgzYmExZjNjMywgMHg3NGJjNzMwNywgMHg3YTQ0OWFiZSwgMHhkMzk4MjNhNywgMHhmYzk3Y2MzNSwKLQkweDVlNjBjZWQ0LCAweGU2MDRhMjUyLCAweDNkMzk5OGRmLCAweDkxNzc4ZTc0LCAweGVkMjlkZGZmLCAweGMzNDNiMmE1LAotCTB4MTRhZDE1ZmIsIDB4ZTZlMjJiYmYsIDB4NDgyNTIzZjksIDB4ZmY3ODcxYjMsIDB4YjQzNmU2Y2YsIDB4NjcxZTUwM2IsCi0JMHhhZGQyYTY4ZCwgMHgxZWZlYjkwYiwgMHhmMjYzYTA3NiwgMHg3ZTBhOGVlZiwgMHhlODcwZjI1MiwgMHhhZTI4MDE3NywKLQkweDNjYTJkMmU5LCAweGFmYmIwYmI1LCAweGRmZmFlMWE0LCAweGVmZTdlMDhiLCAweGFlNDNjYTI1LCAweGZiMjkyOTFiLAotCTB4NTQwNzk0ZWMsIDB4MmIzYzI1Y2MsIDB4OWZiNDQ4NzYsIDB4YTFmNmJjNWYsIDB4ZTJmYmE0NDIsIDB4OTE3MzJkOGEsCi0JMHgxNDc1OTQxZiwgMHhmYTJlNTlhYiwgMHg0YzkyMWQ0OSwgMHg3ZWJmMDFmMywgMHhlYmQ0Y2NjMSwgMHhmN2MwYTdiZiwKLQkweDE5N2NjYWY3LCAweDNkMjdjZmRmLCAweDZmYjZiYzAzLCAweDUzYjE0NWE0LCAweDU3OGMzNTU5LCAweDRjZGE1NmIyLAotCTB4ZmM1MTg5ZGYsIDB4MDUzZWJlNGUsIDB4ODNlZmI4NGUsIDB4M2M0YThjZjksIDB4NTdlYjQ2ZTAsIDB4ZjlhMzc5ZTYsCi0JMHg3NWU0MjNiYywgMHhkN2U1OGM0NywgMHgxZmRmMTBlMywgMHhhZTRmMjRjOCwgMHg0MDY2Mzc3ZSwgMHg2ZGQ4MGZjOCwKLQkweGNhYTE0YmY0LCAweDBmZmYzMDc4LCAweDM4YzExNzUxLCAweDU2NzkwYWNmLCAweDc5YzNmMzBjLCAweGZkZjM2ZTI2LAotCTB4M2FlNDgwN2QsIDB4MDZmMGZhZGYsIDB4YTM2YTdhZGYsIDB4YzViZDNkNmYsIDB4ZGI3ZDZlYjcsIDB4ZGY4MmRlYjcsCi0JMHgwOWMwZjRjZCwgMHgwNzNjNjFmZCwgMHg4NzljNTNiMSwgMHhjZjE4N2Y0MCwgMHg4YzNmYTEzMywgMHhiMTg3ZjQ3NSwKLQkweDlmMTg3ZjQ0LCAweDc1OGMzZmEzLCAweDhlYjE4N2Y0LCAweDg5MjViMGZlLCAweGEyNThjM2ZiLCAweDY1Y2Y4YzNmLAotCTB4NDk1Mzg3MmIsIDB4MDIzZjhmMmQsIDB4MmZiNDZjMWUsIDB4NWRmOTQ3M2YsIDB4ZDEwYmYwMGEsIDB4NDIxYzJkMWUsCi0JMHg3Y2M2MWQ3NiwgMHg3ZTk1NzdlOSwgMHhkMjI5NmQ3OSwgMHhmZDkzMGNkMSwgMHhjYzRjYzhkMiwgMHgxZjViNmFjNywKLQkweGYyZmRlZDg5LCAweDFiNDY0YTk0LCAweDY4NmYxODhjLCAweDNkN2U3NzVmLCAweDI2MjkyMTlhLCAweGFmNmMxNWZiLAotCTB4YWU5NTJmZTQsIDB4NGY3ZThiN2MsIDB4ZTViNTdkYWYsIDB4NzhlMTNmOGYsIDB4ZjI4N2I4YTIsIDB4Nzg0NTRmN2IsCi0JMHg3MTRjYmU0ZiwgMHhmOGEzM2QyZSwgMHhkZmRmNTU5ZSwgMHhmOWZlZGMzZCwgMHg2NzlhYjc0NiwgMHg1ODAxZmZmNCwKLQkweDAwZGI4YmJiLCAweDAwMDBkYjhiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjY2RmZjAwLCAweGQ1OTQ3NDBiLAotCTB4ZTZmZWVmYmQsIDB4NDkzMjQ5OTUsIDB4NDFlNDIxMjYsIDB4MjFlNGNjMjAsIDB4NDkzODkzMTEsIDB4NDcxMTRiYzgsCi0JMHhhOGQ1MzA0OCwgMHg2ODRkNDNjMywgMHg0MDkyMTM4YywgMHhhM2MzMDQ4MCwgMHg3Yjk2YzRlYiwgMHhhNDQwMTgzMywKLQkweDUxYjc4ZDcwLCAweGExM2EzOTUxLCAweGU4NWRlOTRhLCAweGI2OTUwYTA5LCAweDEwMDY3MzljLCAweDRlNmQ4YWM1LAotCTB4YjZhYmFkNWIsIDB4YTkwNzg4MzgsIDB4NjgzNDk2ODcsIDB4NjllZGVjNTcsIDB4ZGZmN2ZmZWYsIDB4YmVmOTk3ZGYsCi0JMHhiYzdiNTI0OSwgMHhhY2RkNzdhYiwgMHg3YmZlN2JhNSwgMHhmZTNmNmZlZiwgMHhlZmZmZmRlZiwgMHhmYzQyMTA4ZCwKLQkweGZiNWJmZTg1LCAweGRhZjA4YzdjLCAweDg1ZmRmZjA1LCAweDQ0MmZkZmZmLCAweDU5Y2YxMGI5LCAweDBlOWQzMjQ3LAotCTB4ZDc3YzJlMjEsIDB4NGY1YzViYmUsIDB4MTg2OGFjNjUsIDB4MDZlNmE0MmEsIDB4MDlhNDQ5YmIsIDB4YjhkZjExYjEsCi0JMHg1MzM1YTg4NCwgMHhlZjA0NzlhNywgMHgyOGM3ZjY1MSwgMHhhNGYzNGM0MiwgMHg4ODVkMzEwOCwgMHg0OWY5MzNkMSwKLQkweDA1ZmZmYTgyLCAweDJjNGYzNzdmLCAweGE4Y2FjNzViLCAweGFkZGUwZWIzLCAweDZjY2YzMDk4LCAweDU0OGFmMDliLAotCTB4NzM1ZGZiMWEsIDB4NGYxYTA1ZjAsIDB4YTI0ZDc5ZDQsIDB4ZWE0ZDg4NDIsIDB4MzVlY2U3MWEsIDB4NTkxMDUxMDksCi0JMHgzOGMxYjVlZiwgMHhiZmViNzQyMSwgMHgwMThhNjBlZSwgMHg2MTlhMWEyZSwgMHhiMWZkN2ZlOCwgMHg0OTdiNDMxYywKLQkweGJkYTFhZTY4LCAweDEzZDZmOTZkLCAweDk2MjE0NGU2LCAweGY0MzMyZWVkLCAweGJjMTE2YWJiLCAweGE3Y2ZhYmNmLAotCTB4ZWE2ZTAzMDcsIDB4ZjBkMWJiZTcsIDB4M2FlYTEwOWQsIDB4OTM2ZWIyOWQsIDB4YzNmY2U0NzUsIDB4ZDFkMzdmZDQsCi0JMHhlMzAwNGY0YywgMHgyZjBiMzVlZSwgMHg4ZDAzYjdlZCwgMHgyYjY0NDJhNSwgMHg0ZjE4MWQ4MSwgMHgxNzllMmEwYywKLQkweDZhNTZiYzY4LCAweGU4YmI1M2Y3LCAweDlkMzhmM2IxLCAweDJjM2I3ZTJhLCAweDJkYTRlMDIyLCAweDliZjM0NDdkLAotCTB4ZDFlNzdmYTksIDB4YzI1NmUwZjQsIDB4YzljNjFmNGIsIDB4ZjBhNzc2YTQsIDB4NmI3OGQzMjYsIDB4ODcxNzBlZTYsCi0JMHg2ZjM1OWM2OCwgMHhkMDQyYmI3ZSwgMHg4M2NjYmIxNiwgMHgyMTVjY2VkOSwgMHgwM2MxMmIzNiwgMHg5ZjEwYjM0ZSwKLQkweGFiNGUxY2E0LCAweGQ5ODc3NmE2LCAweGY0NDNjOGJmLCAweGZjYTY3Y2I5LCAweGU3ODQ1NWM3LCAweDFlY2M4N2NiLAotCTB4MGQ2ZDkzY2MsIDB4MjkxMjk1YTUsIDB4YWIyNjgzODUsIDB4MDM4Y2VjMDYsIDB4Y2RmYjA3ZmQsIDB4NjNhMjQxNzUsCi0JMHg5Y2MzYWQxNiwgMHhjMThmZTExMiwgMHg3OTcxNjlmZSwgMHgzNWJlYzg4ZSwgMHgwYjZkOTg3ZSwgMHg3ZDg0ZGNjZCwKLQkweDc5ZWIxY2JkLCAweDBhM2Y4MDQxLCAweDlkYmM2MmVmLCAweDhmZTAyYjMxLCAweDgwOTQ1YjhlLCAweDNlYzhmYWVkLAotCTB4NzdlNTNhMzcsIDB4ZWEzZTdlZGEsIDB4N2MwNjMyYTUsIDB4ZGIzZTY1ZTYsIDB4YmU1ZmI2YWMsIDB4OGJiMTQ0ZjYsCi0JMHg3YmQ5ZDFmNiwgMHgyYzRjZGIyYywgMHhlODc0Y2ViMCwgMHgwMTk1MjY0MCwgMHhmYjE5YmZiYiwgMHhmZmNjMThlOSwKLQkweDY3OWE3Y2M1LCAweDYxNjYzYmVkLCAweDNlZmZmZWE2LCAweDlhYjEyOGIwLCAweDhiYzlmN2Y2LCAweGMxM2Q0ZjU2LAotCTB4ZGI3ZmY3MGYsIDB4YWM3ZGE2MTYsIDB4MWU2ZDA0YjUsIDB4M2JiZTNiMmEsIDB4Nzk1MmYzNjgsIDB4YWU0MWMxZWIsCi0JMHg2NWIwNzU1ZiwgMHhiNTc1ZjgzMSwgMHg3ZDgxZGVlOCwgMHhiZjEyYjI1ZiwgMHhiMWQxZjBlYiwgMHhhNGU3ZDk1MCwKLQkweDMxZWViZjc1LCAweGM0Nzc3ZjMxLCAweDZiZGEzZjA5LCAweGE3NGZmM2NkLCAweDk1MDc3ZjYyLCAweGI5N2IyYzEyLAotCTB4ODVhZGIwZWYsIDB4N2VkNDdiZWEsIDB4N2EzMmYyZDEsIDB4NzRlZDU5NzYsIDB4YTQzYTNmZWEsIDB4OTJhN2RlMzAsCi0JMHhkNzQzYmI4ZiwgMHgxYjJjN2NiMiwgMHg3Y2I5NzM3MywgMHg4ODIxM2FlYywgMHhiZTExZGYyNSwgMHhhNTc0NDEyMiwKLQkweDNlZjAxYWI1LCAweGZjY2NkNjdhLCAweDFjZGM3YTM5LCAweDg3NDlmNDE0LCAweDBjYmE5NDJkLCAweDJiMTdmODc0LAotCTB4Zjg4YmExZDMsIDB4YTRmODhhYTcsIDB4NDBkZjdlOGIsIDB4ZDliZTZmYTUsIDB4ZDQwZmJmYzAsIDB4YmRmODFiYzQsCi0JMHg4OGU0ZTg0MSwgMHhjYzQ3YmJjNiwgMHhlYmNiYzAzMCwgMHhlZmZkMGQ3MywgMHg5NDVkN2U1ZCwgMHhkYTQ2OTQzYywKLQkweDBkZmZmOGNkLCAweGJiODI3NjkxLCAweDRhNWMwNGI2LCAweGM2ODVhMDIyLCAweDMwYjcyYTdhLCAweGY4NjZkZDlmLAotCTB4OGQyYzRiYmUsIDB4M2Y5ZjAzZjQsIDB4Njc4YzZmZmYsIDB4NGI2ZDg2MjEsIDB4MjZiZjY4OGIsIDB4YWZkMTA3YTIsCi0JMHhhZDVlN2ZjMSwgMHg2ZDNkNzMwZiwgMHhiMzk3MjBjNCwgMHg5OGJmM2Q3MywgMHhmMjMxN2M0ZiwgMHg0N2VjNTViNiwKLQkweGRmMDg5ZmM1LCAweDdmNDZlODE1LCAweDIwZTkxM2I5LCAweDlkNWExMTA0LCAweGIxZDY4OTM3LCAweGE5YzkwOGZlLAotCTB4NjE4YTVmNDEsIDB4MDZlYjE3ZDAsIDB4NzRiNmJhMWQsIDB4MmE2MjhiZDQsIDB4YjQwNTliZTksIDB4YjBjMGFlOGYsCi0JMHhmOGMxZGJhZCwgMHg0YTExNjRiNywgMHhhMjJiZjdkNiwgMHhkYmZiODUyNywgMHhiYzI0NTJiMywgMHhhYzQ3ZjUwNSwKLQkweGY4NzU4NjFmLCAweDY4NjM3OGMzLCAweDgxNmU2MzNmLCAweGFmYjc0NGJjLCAweGFjMGI3ZGE3LCAweDNkZmVlYzQ3LAotCTB4MmRmYWQ1ZjQsIDB4ZGU2MzFmNzUsIDB4ZWEzY2RhZjUsIDB4YWU5ZjFhZjgsIDB4ZWJkZjRiZGUsIDB4OWUzZDFkZDYsCi0JMHg3MmM1YzRhMywgMHhlMWUwZjZiZCwgMHg3ZTEwNjdkNywgMHg0YjkyZjk5NiwgMHg0MzlkNDcyMCwgMHg4NTJkYWM0YiwKLQkweGQzNGRmOTEzLCAweDlhMGY1N2ZiLCAweGYwNmUzMTgzLCAweGI3ZTYyOWRmLCAweDhmNTY4M2QxLCAweGIyZjAxYmY4LAotCTB4MGYxODJiZGUsIDB4OGFiODdjZDEsIDB4ZjlhNzY1ZjYsIDB4M2M1MTFkNTcsIDB4MDNmNjQ1NDEsIDB4ZjE0NmQ2N2UsCi0JMHg5YWNkYzYyNywgMHhiZTFhNmYwNCwgMHhkNTE3ZjFjNiwgMHg2ODNmMWFiZSwgMHgyOThmYWI5ZCwgMHgwOWNiZTg0MSwKLQkweGE3YzY4OTc4LCAweDNmMmFjZjNhLCAweDBhZWI5MGZkLCAweGM2YTJiYWYyLCAweGYyZDE1NTE1LCAweGZlODZjOWI4LAotCTB4ZTExNGZiYTMsIDB4MWYxOGJlNTQsIDB4MmM2Y2M3NGIsIDB4ZTU3M2IzZGYsIDB4MmE4ZTQ3ZmUsIDB4ZGRmNGZkOWUsCi0JMHhhZTE2NjMzZCwgMHgxZjFmZTcxZiwgMHhmMjE0YWRlMSwgMHg5MjFmMDEzNywgMHg3ZTUyN2M5ZiwgMHhlMzRiMWVlZSwKLQkweDdjNWVmZWVmLCAweDM0ZmM0NWY1LCAweGVmZGM1NzNiLCAweDdhZjQ0NDczLCAweDYyMWU5ZTQ0LCAweDQ5Mjk0YjNlLAotCTB4NWI0OGJkNDgsIDB4YWNlNWRmYTAsIDB4M2IzZDU0MWYsIDB4NGQyNDNlOTUsIDB4ZmM5NGZhY2YsIDB4NzFlN2U2MDMsCi0JMHhmODk0ZTNiYiwgMHhhNTc1NjhkYywgMHhlYjRmODMyNywgMHhkNDY4ZjY4YywgMHhkNjRhNGFlMiwgMHg2NDJkMjFmOSwKLQkweGMwZDM1ZDY3LCAweGMyZDMzM2JmLCAweDYwOWY4ZTM0LCAweDRmNGQ1N2U4LCAweDc2ZjFkNWZiLCAweDBlY2RjYjZjLAotCTB4NmZmM2JlZWIsIDB4ZWEwOWE2YjcsIDB4MWE3NWJkOWYsIDB4Y2ViMTJkOTcsIDB4OTY5MWQ4MzQsIDB4ZWMxZjY2YWQsCi0JMHhhNDhmODdlMywgMHg1ZjExNTVhNywgMHg5YWRkYjg3ZCwgMHg3YzQzNGY1YSwgMHg2Y2JjZTBmOCwgMHg5NmI4MDQ1MSwKLQkweGM1OGYwYmNiLCAweDEzMWQwNDM0LCAweDYyNWQ1NWY3LCAweGZkNzQ3YzYyLCAweGFlZDhmN2Y3LCAweDM2NzRkNmZkLAotCTB4Yjc3MjAxYjEsIDB4MTU2MjY4ZmQsIDB4ZmI2ZWIzOGQsIDB4NjQ5YzJhY2YsIDB4ZmU0Yzg3Y2YsIDB4ZmZkYTEyYmEsCi0JMHhkYjIwY2EyNywgMHgyYzFjZTE3MywgMHhmYzQ1MTVmNiwgMHg2YmRiYjU4OSwgMHgzYmY3NjFkMywgMHg1OWVhN2NmZiwKLQkweDU2ZmY3ZGQ4LCAweGY4ODk5YTZiLCAweDI3M2YzN2U4LCAweDNkYjBhODdiLCAweDUyZTIzZjYzLCAweDRiZTNlNGFjLAotCTB4ZmIwN2M0MmYsIDB4MjkyZmZmODgsIDB4ZjU0YjFiYzIsIDB4OGEyN2NjNmIsIDB4N2FmYjA2OWQsIDB4ZmZjYzFlZmMsCi0JMHhiNzlhNzZjZiwgMHgwZjA2ZjMxYywgMHg0ZjVlNjA2NCwgMHhlYmNjMWFlMCwgMHhlNDlmOWFkZiwgMHhkZGZlMmJmZiwKLQkweDdmYTU3YjAzLCAweGU3YjU0MDc3LCAweGEwMzI4ODU3LCAweDNiNWVjMWRiLCAweDk3YWJmZmMzLCAweDg4NDczZDEwLAotCTB4MGMxOWJkNDMsIDB4ZTJlYmQ0YmYsIDB4ODBiN2E4NzIsIDB4MzkxNGQ3ZWIsIDB4NDZmYmJkMjUsIDB4M2NkMjM2NGEsCi0JMHhhMGEyODU4MSwgMHhhM2FkZWQ5YiwgMHhkZmViNDJjMCwgMHhlMDc5YzRhNCwgMHgzYzUyNmM0ZiwgMHhmZGQwNGVlOSwKLQkweGNlZDJjOWU3LCAweDVlOGJmNGFhLCAweGU0MjM0ZGNmLCAweGYzZjhlOTgzLCAweDY4YmIzMWU2LCAweDJkZWZmMWQzLAotCTB4MmYwMGQ5MjIsIDB4ZmExYTY3YjIsIDB4ODZkZDNhZDcsIDB4YWUzMzViZjYsIDB4YzU3ZmI0MzUsIDB4NmY4MDYyNTUsCi0JMHhmNDM2YTgyZiwgMHg4YjczYzNiZiwgMHhlYWFiYmUwMSwgMHg0YmZlODYyYiwgMHhmMDBjNGJiYywgMHg0MzQ2YmFiMiwKLQkweDJkN2RiYmZmLCAweDFiN2JmNjg2LCAweDFiZGExOGQ2LCAweGYwMGMxYmZkLCAweDM0MWUzYjU3LCAweDdiYWZiZmY0LAotCTB4MmJkZGExYWIsIDB4YmJkODE2OWMsIDB4MTcxZjQ0ZTMsIDB4ODg1ZmZkZTEsIDB4YmQzNzI4MmUsIDB4ZDNkMGVmOWQsCi0JMHg1MzIyZmU3NSwgMHg3YzI0ZDBmNywgMHhmNDg5NjhmYiwgMHhlYTUxN2U2ZiwgMHg5OGZlMDVkZCwgMHg0ODdjOTI2NSwKLQkweGMzYWUxN2E1LCAweGQ0MjdiMDMzLCAweDBhNDIyNTllLCAweDM4NjIyYmZiLCAweGRkMTM3YzEzLCAweDdlN2RiYTJmLAotCTB4MmVhYmM5ZmMsIDB4ZjRhZGExYTIsIDB4ZTkwYjA2YzMsIDB4Mjc5NWY5OGQsIDB4YmUwOTcyY2IsIDB4MWI2YmU1ZjMsCi0JMHhlNjFmYTQyZCwgMHgyYWYyNzhkZiwgMHhiNjk1MWZlMCwgMHgzMmZiNzIzNSwgMHhjMzQ1YWVjMSwgMHgwNDM3NmZjYiwKLQkweDZmZjM5ZDY4LCAweDgxZWRkOWNlLCAweGU5MTNmM2RmLCAweDlmYzU0Y2Y3LCAweGJlNWI3N2Q4LCAweDEwY2EzN2RjLAotCTB4OTNjYTIzZjEsIDB4NWYyODhmYzQsIDB4YjM2YzdlMjMsIDB4ZmM0N2JmOTIsIDB4YWY0Y2YyODgsIDB4ZDQ3ZmViODcsCi0JMHhkOWU1YzU1YiwgMHgzZjk3MmY1ZSwgMHg3MmUzYWRlZSwgMHhlNWM3ZDdiOCwgMHhiODFiN2I0ZiwgMHg5ZmFmNzlmYywKLQkweGI3Yjc3YmJmLCAweDdhZjdjYjgzLCAweDk3ZmViOWJiLCAweGZlNWMzZGJkLCAweGY1YzAzN2FhLCAweDJjMjg5NmFmLAotCTB4MDEwMmI0ZmYsIDB4MDM3YjA1YmQsIDB4Nzc2ZjVkZmUsIDB4NzdhNGNjODQsIDB4ZTVlYjMxYzUsIDB4ZjI0YWJkNzEsCi0JMHhkZGE1NzhhZCwgMHhhMmE5NWM1NCwgMHg2ZWJlY2E4OSwgMHg1Yzg3OGUxMSwgMHgxN2M5MmQ4NiwgMHgzOWY4YmU4OSwKLQkweDdhMjM3ZWQ5LCAweGVhMmUyMmQ0LCAweGM2MWZhZGZjLCAweGFmNDI0ZjdhLCAweGM5ZDMzMTA4LCAweGZmYWQ1OGZhLAotCTB4NjllZjUyYTcsIDB4MTVlZTVmYWUsIDB4OTc3YTdkN2EsIDB4ZDAyM2ZmZGIsIDB4YjJmNzFkZmIsIDB4ZWMzMzMyZmMsCi0JMHgyNGU5Zjc1MywgMHgyNGM3N2E2YSwgMHg5M2UzMjYzYSwgMHg1OTNlNTQ2NywgMHhjNjJjNGY2MCwgMHgzZDgxNmVmOSwKLQkweGIyN2IwODNiLCAweDgzZWUxMmMwLCAweDRjZmJlYTFlLCAweDNkMjIxZWI4LCAweGM2YzEyMjc0LCAweDExZWZhOTdhLAotCTB4Y2ExM2ZiMGIsIDB4OWJlMTgyYTcsIDB4N2RjMzA1NTIsIDB4YTE5YjBkOWYsIDB4M2QzODE3NzcsIDB4NTQ1NzZjMTksCi0JMHgwMjJlY2YzOCwgMHhkZDcyMjk0OSwgMHg0YTFlNjc1OCwgMHhhN2NkNTNjMiwgMHhmM2IwNDVlMSwgMHgyZTZjMzkzNywKLQkweDVmOWMwOWU4LCAweGNmMzE0YTYyLCAweDAyYmNkYWJiLCAweGQ3YmQ1MmUzLCAweGZmM2ZkZjQ2LCAweDY4OTkwODk5LAotCTB4NWZhOGIzNWQsIDB4MTBhNWYzMmMsIDB4ODdkODE3MjgsIDB4ODc5MjNlY2QsIDB4Mjc2ZjU0OTksIDB4OWJkNTE2NzgsCi0JMHgwMmQ3YmI2NSwgMHg2YzNhN2MzYSwgMHg3NmExMWQ4NiwgMHgwM2RiMjQ5MSwgMHg3Y2M4OTRhNiwgMHgyYzEzM2FkYSwKLQkweGVjYTk3ZTM0LCAweGU3MmE1ODk3LCAweDM5YzBiYzAxLCAweDNhZDBhMjU0LCAweDFlMWNiYWZiLCAweDAyZGQyMWUwLAotCTB4NWVmZWU3ZGUsIDB4NTQzZjdmMzMsIDB4M2ExZTA0ZTIsIDB4ZmI0MTFlMWQsIDB4ZTIwNTJjMjAsIDB4YWYxZmI5NGEsCi0JMHhkNzIyYzEzMywgMHg1ZmE5ZjM1MywgMHg0MzJmZDE3OCwgMHg3MWQ0NjI3OCwgMHg4MDNkYjJlYywgMHgwZDRhNmU3MSwKLQkweDhmODA1YTY1LCAweDIwMjc5YjZlLCAweDlkNjJmMWM3LCAweGZiMmYxN2U4LCAweGI5M2FjYzg1LCAweGFkMDNmYmNkLAotCTB4YWNmZmVjOTcsIDB4ZjQzNzYxOTQsIDB4NGM0M2YxMmUsIDB4MmJkNGY4MjksIDB4NTM5OTYxZjksIDB4YTk3MDgzZjIsCi0JMHgxYTFmY2FiMCwgMHg0YTc1MmNiZiwgMHhlZGNhZmM5MiwgMHg3OGQyOTY3NywgMHhhZmU3MThiZSwgMHg3ZmNlNDllMywKLQkweDk3ZTZlNGFhLCAweDUxMmNkZjEwLCAweDFmYmZmNWZkLCAweGZkMjU3OGJmLCAweDdiYmQ1MjY3LCAweGY0NjhkZjIyLAotCTB4ZTM0N2Y4ZDEsIDB4ZDIzZTY4ODMsIDB4YjdhMzQwZjgsIDB4N2YzNDVkZjYsIDB4MzQ1NWYzNDUsIDB4NGJiMDJkM2YsCi0JMHgwZjhlODMzYSwgMHg0OWY5MTMyOSwgMHg5MDY4NzRmOSwgMHg2NzY5ZGZkNywgMHg0ZmNkMTZiYiwgMHgzNTMwN2NkMSwKLQkweDRlN2RjOTNmLCAweGZkMDhhM2U0LCAweGNmMmY4ZjgxLCAweGRlNmVjMzQ3LCAweGE0ZmI2NmM3LCAweDhmZjFhNDdjLAotCTB4MWYxYTRmYzYsIDB4MTYyMjNmZGQsIDB4Y2I1MzUxMjcsIDB4OTQ3NWViOTgsIDB4Y2ZmYzcyN2IsIDB4OGFiNDhmNDAsCi0JMHhhYjMzMTY1YiwgMHhiZTQ1Y2QzOCwgMHg5ZWZkODk4NCwgMHg1YmRmYTI5OCwgMHg1MDFmYzRiMSwgMHgyZjczYzIzYywKLQkweDJlMzM4MWZjLCAweDdlYzVkOGFiLCAweDQyNTFkN2I2LCAweGVhYTQ1YmY0LCAweDliYTIzM2QxLCAweDhmYjkxY2VkLAotCTB4NDZiNWQwMDEsIDB4YzJhMmYxMjUsIDB4ZDc3ZmVjZDUsIDB4MmM3ZThjMzgsIDB4ODhmYzIzMmMsIDB4MTdlZmQ0ZGIsCi0JMHgwZGI3YzlmZiwgMHg2YTljNThlYiwgMHg1MzZmNmZmNCwgMHg0NTViZTNmZCwgMHgzNzVmOGYzZiwgMHhmMGJkYWEzMywKLQkweDZmOWJmNjU2LCAweDZmZDYzM2NiLCAweDVlZmQ1NTI4LCAweGNmNDM3MGI3LCAweDVjOGYwOGQ2LCAweDdlY2RkODlmLAotCTB4NTcyYThkNmIsIDB4NzJmZDJhNTksIDB4OWYzMTY2NWQsIDB4ZmMyYjU4ZjAsIDB4ZDdmNzI4MTYsIDB4NjJmMzY3N2UsCi0JMHg4MDQ1NWJkYywgMHgyMDg4YWZlMSwgMHgxMDhiYjc5NywgMHgxOTA3NzM4ZiwgMHgwOTc3YzAwMiwgMHg2OWRjMDU2MSwKLQkweDkxYjZjOTFmLCAweGZiMzdhZDQ4LCAweGY4NWY4MDNmLCAweDM5ZmU1OWRiLCAweGM2MzZjNzM4LCAweGNmMjBmYmZhLAotCTB4NmNlZmUyYTcsIDB4NWJlNjgwN2EsIDB4MGYyOGI2NTQsIDB4NzFhYzlkZGYsIDB4ZDI3NTNmYjEsIDB4MWRmZWNiOWUsCi0JMHgxMjlhYzJlNCwgMHhjOTM3Y2Y5MSwgMHhmZDkxZTYzZSwgMHgxM2Y2NDUzYSwgMHg5ZmIyNjllNSwgMHhkZWM3NjQ3OSwKLQkweGY4MDlmYjIwLCAweDAyYWQ4MmI2LCAweDI5NzYyZGRmLCAweGI3ZGJhMmMyLCAweGNlZWRmZGY2LCAweDZkMzJjMjQ1LAotCTB4N2I3NGZiNmEsIDB4ZmE2N2Y3ZjEsIDB4NGFkZjdmODksIDB4MTIyMzUzOWUsIDB4NjBkNjU2NTEsIDB4YTcyNTZmYmYsCi0JMHg2MzE5NjQ5YiwgMHhkNWU4YjJlMywgMHg0ZmZjYzliYywgMHhmMzIyZmY4ZCwgMHhhNmY5ZTYyZCwgMHhkNzg2YjNjMiwKLQkweDc4NmE3YzY4LCAweDdkNzgxMmZlLCAweDNlYmMzMjY5LCAweGNlZDgyMjUzLCAweDU5NWZkYThmLCAweDU3NTViODhmLAotCTB4ZGU2ZmQ0YmMsIDB4MDY0NDEzNTcsIDB4YTNjNmVmZjEsIDB4MWJmZDFjZjIsIDB4ZTMxMzMxMmMsIDB4ZjdiNTNjNGIsCi0JMHhlNDJjMjhkYywgMHgyYmRjN2Y0YSwgMHhhYWYzYzAwMiwgMHg4ZmFlNmE5ZSwgMHhmNzg5OGY4ZSwgMHg2YmY4NjE2ZSwKLQkweGQ5NTcyZjJhLCAweGRkZTgyMWZkLCAweDZiYTFhNWNiLCAweDFmMTJjM2M4LCAweGJjNGJlYmVmLCAweGVkZjllNjgxLAotCTB4Y2UwZjY2NGIsIDB4ZDc2NjlkMjcsIDB4YWNlMjBmNmUsIDB4MmYzZDk5NmYsIDB4OWQzZmZiZTAsIDB4NzI0YTVlY2EsCi0JMHgzNjlmOWUyNSwgMHhkM2FjMzllOSwgMHg5ZGE4ZjEyZSwgMHhlMzlkYmVjMywgMHhjZTE0Yjk2MywgMHgyM2M4MGNiMiwKLQkweDVmOTgyOWZkLCAweDkyNjY1ZmYzLCAweGZlMjc2OTJmLCAweGU1OTM2N2RkLCAweDQ1NGNmZTU0LCAweDUyOWZlOTFjLAotCTB4NTBmYWNmZWUsIDB4Yzc3ZDFmYTMsIDB4NTM4ZDE2NzAsIDB4ZWIyNmZhNDEsIDB4YWYzZTM4ZDEsIDB4ZjdkZTlkNzgsCi0JMHgwOGQ1MGVkOCwgMHhjNWFmYmY4MywgMHgyNTUzNDYyMywgMHg2Yjg4MTcxZSwgMHhiMDNjNDQ5ZSwgMHgwNDU1OGNlNiwKLQkweDgyMTQ3ZGE5LCAweDI1MGNmNjhmLCAweDdhMzViZDA4LCAweGZhMTlhYWU2LCAweDExNDEzNmI2LCAweDU0MmY2MGQzLAotCTB4NjE5MzEyN2QsIDB4M2U5ZDJlMTIsIDB4MDljNTc1ODgsIDB4ZTM4ZjhlOTcsIDB4NzAwYzUyMGIsIDB4YTE4NjY3ODIsCi0JMHg4ZTU1NTI3ZiwgMHgzYmQ5M2RhMSwgMHhhZDNlZDBkNywgMHg0ZjAwZDRhZSwgMHhlODYwZGRmNywgMHhkMGIwZGU5ZiwKLQkweDZmZmE2NzAwLCAweGVhY2ZmNDMzLCAweDM1ODA2YTU4LCAweGFiMjU5NTdkLCAweDE1ZWVhY2M0LCAweGY3NjdlZjg2LAotCTB4NzdmNDM0YWMsIDB4ZGExYWQ2MDcsIDB4ZmI4OTcxY2QsIDB4YmMwNjhmNTksIDB4NGUzNDA1YzMsIDB4ZWU0ZTNhOWQsCi0JMHg3ZTg2OGRjZSwgMHhhYTZkZDA4MiwgMHhiZmM4OWM4MCwgMHhjZWViMTI2NywgMHgzYWNmNDQyOCwgMHhjODdhYWFjNywKLQkweGQ3ZmY3ZTY5LCAweGQ3MzRlYjhkLCAweGJjYTk5MjViLCAweDdmZDQ2NWQ1LCAweDc4NDYxOWI1LCAweDQyODRlMzkxLAotCTB4NGU0NThiNDMsIDB4ZWFjZTFlYTMsIDB4OGNlMDE4YjYsIDB4ZDc5YmQyMzIsIDB4NTE2MjhmZDEsIDB4MmY4MmYxY2MsCi0JMHhhZTdmYmZhMiwgMHg3OGQxZmU4MSwgMHg4NGYwN2UyMiwgMHg2OWVjOWZkMCwgMHhiMzdhZWIwMCwgMHg4ZjdiMDJkNSwKLQkweDFmN2U4MmZjLCAweGYxZTgyZmM4LCAweDFlODJmYzgwLCAweGRmNDE3ZTQ2LCAweDdkMDVmOTFmLCAweGZhMGJmMjNiLAotCTB4NDYzM2IyZjYsIDB4MWIwZjk3ZmEsIDB4OWVmOTVmZTksIDB4NWYxYWZlOTEsIDB4ZWFhNzQ1NGUsIDB4ODQzZjkxYjAsCi0JMHg3ZjJiZjE1ZiwgMHg1ZTM3NGU4NSwgMHgzNDRmZjIzMiwgMHgzNzI2NmU3ZCwgMHhmNDE1MzkyNywgMHhkNzIxM2M1MCwKLQkweDlkZDdhNzk3LCAweGZhMjJmNDUxLCAweGY3YzA0YzA0LCAweDlmNDkwNGNjLCAweGEwNDk3NWQwLCAweGIzMTllZDU3LAotCTB4OGZmYzEyMDgsIDB4Yzc3Y2ZiNTEsIDB4MjMyODZmZTIsIDB4YWI4NmYwM2QsIDB4ZWJmYTAzMzQsIDB4MTQ3YWUxNjYsCi0JMHg5ZGM1ZGI3MSwgMHg4Njg4NGYyNiwgMHg3ZTM1MTE1ZCwgMHg3ZGZmMGNmNSwgMHgxYTE3YTQ2NSwgMHhiNmNkNWRhNiwKLQkweGZjNDYzZjgxLCAweGRjOWU3MDczLCAweGQ5ZGRlYWE1LCAweGMwZmM3MjcxLCAweDEyN2NjMTQyLCAweGQ4MzliYWY4LAotCTB4MzM5ZWUzNDcsIDB4Y2ZkMDJiZjUsIDB4YjdmNDRmZGYsIDB4MGJmYmZiZTMsIDB4ZDQ3Zjc5YmIsIDB4Y2RmN2MxNDMsCi0JMHgwZDkzMWFmZiwgMHhlMGI2NzliOCwgMHgwYzI4YjA3MywgMHg4ODQ5MmY5NywgMHgyY2U2YzVlOCwgMHhkNDNiMjdhYSwKLQkweGUzOWVhNjU1LCAweGRmNGVkNDNjLCAweGI4Yzk5Nzc1LCAweDY5Yzc4MjRlLCAweGExNTE3OGUzLCAweDQ0NGUyMmYwLAotCTB4ZTZlY2FmYzcsIDB4NmNlM2UwMjIsIDB4NjNlMDFjZWMsIDB4ZGU0MWU0YzAsIDB4MjU3NTZjMjAsIDB4ZGUwNTFmNDEsCi0JMHhiZGU0MGIzNCwgMHg5ZmMyMTdlMCwgMHg1N2ZhYTU5YiwgMHgyOWU0NjI1OSwgMHg1ZWNlNzNhYywgMHhkN2FiYjA2MSwKLQkweDYyYzJlZDA2LCAweDBkMzk3ZmM4LCAweDg2NTBkMTcwLCAweGM3ZjVmZmExLCAweDkyZjY4NjVjLCAweGJkYTE4MTUwLAotCTB4MDBjNzhjZWMsIDB4MTk1NzBmOTcsIDB4ZTdiZTU3ZmEsIDB4ZTFkNWMwMzUsIDB4MWJmZjQzM2EsIDB4ZjAwY2Y5MmYsCi0JMHhlZjllNDU2YywgMHgyMzk2NTNiZiwgMHg5OTJlMjFmMywgMHgzODdlNmJkZiwgMHg2YmZhNTA3OSwgMHhmOWFmZGNmMiwKLQkweDQ5ZmZhMmQ1LCAweDM4NzExZGFmLCAweGJmMzU3Zjk1LCAweDZkYTNmMzVjLCAweGNmZDA0MDg0LCAweGY2YzJkM2I2LAotCTB4ZmE1ZGE2NjAsIDB4ZjYyZGZlYzksIDB4NjgyN2M4ZjMsIDB4NTdlNmJhZmUsIDB4MDhhOWZlNmIsIDB4NzZmNTdhZDQsCi0JMHhmNjkzYmU4NywgMHgzNWViZjU0NSwgMHg4YmYzNTlmZiwgMHg0YzVkOGIxMywgMHhiMjM2ZWIzZiwgMHg0YjA3ZTBhYiwKLQkweGFlNzYxMzM4LCAweDFhNGM0NjM5LCAweDRjYjk3OTBmLCAweGQ3YTI1YjllLCAweDdhMmJhZGFmLCAweGE3NjJjNGZlLAotCTB4ZGM3NTE3ZTQsIDB4N2VlMmVjMTcsIDB4Y2NmZTI0ZGYsIDB4ZjU3Y2FhYmYsIDB4NjNiZWI5OWYsIDB4YWQ2N2NmZTAsCi0JMHhiYjU2Zjc5ZSwgMHhmNGYzZWJmZiwgMHgxMzIxZmMyNSwgMHhmNWYzNTJmZSwgMHgyNjRkZmQ3MiwgMHhjNzY3YzcxMywKLQkweGQ3MmU1ZmQ3LCAweDBiZjU5NWFmLCAweGQ5MjFkZmM5LCAweDM3ZTJmMzU5LCAweDFmYzgzYWY3LCAweGMyYzdiNjc4LAotCTB4YWYzMzk2NzEsIDB4ZTQwYzZjNWMsIDB4NWUxMjFmYzEsIDB4ZmM5YjMzOGMsIDB4M2UwN2QwN2MsIDB4MGIwN2NlMDUsCi0JMHhkZjNjY2RjYiwgMHg3NzI5MzJhNSwgMHhjZjJjYmQxMSwgMHhkMjQyYTM2NSwgMHhjNmM3YjQ3ZiwgMHhlODQ5ZDQ3OSwKLQkweGVkYTA3Y2NkLCAweDhiNDNmMTA3LCAweDUxMGRjNjU1LCAweGM5Njg2ZTIyLCAweGMwNDM3MTk3LCAweDQ0YTIxYjg4LAotCTB4MmZmNTEwZGMsIDB4M2UxODdhZjcsIDB4ZjBjNTViZDIsIDB4MGNiZDdhZjcsIDB4ZTNhZGViMWYsIDB4M2ViZDA3ZjIsCi0JMHgyNmY4ZDdhZSwgMHg3OWRhNWYxYSwgMHhjNDNmYTM0YiwgMHgyZjIzNzYxMCwgMHgxZmViMWY4YSwgMHg2ZDcyZjQ5MiwKLQkweGQzZjZmYWIwLCAweGEyNGRlYjE2LCAweGUwOGQyOTRlLCAweDhmMTUxZWYzLCAweDNjNDllNjMzLCAweDdmZTQxZmEwLAotCTB4ZTZiNTdlYWEsIDB4OWJjNDI0YzIsIDB4YzkyYjg1NDcsIDB4YWFlMjU3ZjksIDB4Njg3YzJmN2YsIDB4OTczZjFmNzgsCi0JMHg5NDliY2I4ZSwgMHg1MmU0YTk4NywgMHhjZWViM2YzYiwgMHhkMTc3MmNhYiwgMHhiNzJkMThmMiwgMHgzZmU3NzhkMSwKLQkweGZjN2JiOWRkLCAweDUzYzVhYjVjLCAweGU4ZDUzOTU0LCAweDU1YjVjOWEyLCAweDVmYTExYjg0LCAweGNlMjY3OTgyLAotCTB4NjA5YzNmNTMsIDB4ZjNjNWEzOTQsIDB4MDc3ZjdlMjQsIDB4YmNmMmEyMzksIDB4MzI2Njk5Y2IsIDB4ZmRiMmY4NDcsCi0JMHgxMDE3ZjI3MSwgMHg0ODY5ZWYxZiwgMHg4MDU5ZTBlNCwgMHg3ZGJhOGZjZSwgMHhkMmZhZjAyZSwgMHgyYjdlYTA2ZSwKLQkweGQwNjJhYzA3LCAweGIwNzU3ZDg1LCAweDQ0MDk2ZDFkLCAweGQ4NDcxYjlmLCAweGFkZGI2YzlmLCAweDNlNDY5ZjM4LAotCTB4ZTdlNGU3N2YsIDB4ZDEzZmNlNGEsIDB4NmZjMjZkMzgsIDB4ZmJkYmJhYzMsIDB4YWI1NmZkOGQsIDB4ZmNlOGNhZTcsCi0JMHhkNTNjZDU0YSwgMHg4Nzg0NzlkZSwgMHg3ZjM1MWZmZCwgMHgxOWY2YTFkZSwgMHg2ZTYwOWZlNywgMHg2MGRmMWE5MiwKLQkweDE0MzJhNDc5LCAweGI5YmYzYmEzLCAweDhiMjhlZjkwLCAweGI4Yjc4NGMwLCAweDZkYzNkODAyLCAweDZiYmU0ZjE2LAotCTB4Nzg2OWJmMjIsIDB4OTdlNzk4OWIsIDB4ZjdjNDFiZjcsIDB4YTBmY2Y5NjIsIDB4MjMyZmY5ZTUsIDB4NmFmYTBmY2YsCi0JMHhmZmI1MTRmOSwgMHg5ODU5ODBlNSwgMHg0OGUwZGY3MSwgMHg3ZmE3ZTcwYywgMHg0ZjdiM2E2YiwgMHg3Zjk3NGI4ZSwKLQkweDExYjc5MDk5LCAweDMwOWZiODg5LCAweDI3YmE2ODdhLCAweGI0YmFjOTMwLCAweDFiMzYxZmQyLCAweDY4NGM5MWVlLAotCTB4MTEzNDdhZGYsIDB4MTdjZWM5ZTcsIDB4ZjNhNjllNjUsIDB4Nzk2OTUzYzUsIDB4M2NkN2JkM2EsIDB4MWJmYmMyY2YsCi0JMHhlN2RiZjkzMiwgMHg5YmRjOGY0ZCwgMHg2MGM3ZmI1OCwgMHgzNTdhY2EzMSwgMHg5ZmJkMTI3ZSwgMHg1ZjM2YmQ3MSwKLQkweGE1MTlmZTYxLCAweGFiNWViMWZkLCAweGE0N2Y3ODUzLCAweDQ5ZTQwNTE3LCAweDExMmZkN2NiLCAweDVhOTQ1NGExLAotCTB4YjNiZmM0M2UsIDB4ZTVhMGU5OWEsIDB4ZDU0MjVhNDMsIDB4ZmJiYjhmYmMsIDB4YThlMzViNTYsIDB4MmRhOWY4NGIsCi0JMHg0OGFlNzFiNSwgMHg0YjNjMjQ5ZSwgMHgyYTk5YmZkZSwgMHhhYzZjYjI1ZiwgMHgzZTViYzc4NCwgMHhiMzhmMjM3NiwKLQkweGU2NWI5ZTZkLCAweGQ5ZWRiNjRmLCAweGVlNmZmZjAwLCAweDFlMDU2MTQxLCAweDRlMzk1NmMyLCAweDU1M2U5ZTM0LAotCTB4ZGNiOTI0ZTUsIDB4NmUzN2I3YTgsIDB4NmY2ZjU4NTUsIDB4Zjc5NmFkODQsIDB4NmI2ZjU4N2MsIDB4MTU3ZWQ1ZjAsCi0JMHhhNmYwOTVhZSwgMHg1YjBlMTJlZCwgMHgyNDk1M2IxZCwgMHgwNWM0NWZiOSwgMHhkODk0NGZiMCwgMHg4N2IxY2UwZiwKLQkweGY2MDIzOGQ0LCAweDQwZmIxMjgxLCAweDYwMTVmNDNkLCAweGQwYzAyYmU4LCAweGFmYTE4MDU3LCAweGExNWY0MjUwLAotCTB4NjVmMGE1N2UsIDB4YmM4ODhlMjMsIDB4NGU0ZThkNGUsIDB4ZDFhOWQ3OTAsIDB4ZWJjODFmZjksIDB4NzVlNDYxZTgsCi0JMHhkNzkxZmRmNCwgMHhhZjIzYjdkMSwgMHg1ZTQ3NmZhMywgMHhhZjIzMGY0NywgMHhiYzhmZWZhMywgMHg1ZTQ2MWU4ZSwKLQkweDc5MWZkZjQ3LCAweGJjOGMzZDFkLCAweGYyM2ZiZThlLCAweGU0NzZmYTNhLCAweGM4ZWRmNDc1LCAweGU0NjFlOGViLAotCTB4OTFmZGY0NzUsIDB4ZGZiN2QxZDcsIDB4ZjIxOGEzZGYsIDB4OWE5M2Y3M2UsIDB4ZWViNWRmMDYsIDB4NzFmY2M2OWQsCi0JMHgzMTNiZWRkYSwgMHg0MWZiZTg4ZiwgMHg2NmJmOWZmYywgMHg4ZjlkMDFjZCwgMHg2ZWRmMDFhZiwgMHg0OGYzOGFlYywKLQkweDQ5ZDdmNzNhLCAweGE0ODQ5YmJhLCAweGQzMjM0OGYzLCAweGMyNGQ4Yjc5LCAweGU3NzQ5ZWI1LCAweGYyMGZmZTI0LAotCTB4OTk1NjM1MjksIDB4N2M4OTQxNGYsIDB4NTNlNDRhMGEsIDB4NTI5ZjIyNTAsIDB4MjlmMzJmOTMsIDB4NDE0ZjkxMjgsCi0JMHgyODI5ZjIzZCwgMHg4OTQxNGY5MSwgMHhlNDRhMGE3YywgMHg5ZjIyNTA1MywgMHgxNGY5MTI4MiwgMHgwYTdjODc3YywKLQkweDUwNTNlNDRhLCAweDRhMGE3YzhmLCAweDdmNTA1M2U0LCAweGJjODFkNjhlLCAweGY4MmViNjhhLCAweGYzODY3OWNiLAotCTB4ZTFhMWYxMWMsIDB4YzAzNGU3M2MsIDB4ZmRmNTk3ZjAsIDB4ZGJlYjJmZTEsIDB4ZGJlYjJmZTEsIDB4NjFlYjJmZTEsCi0JMHhmZWZhY2JmOCwgMHhiMGY1OTdmMCwgMHhlNThiOWU2OSwgMHhmZWIzN2UwYywgMHg3YWNkZjgzYiwgMHg3MDNmYThiOCwKLQkweDNiYTBiMTFhLCAweDM1ZWVmZGY2LCAweGU1MDRlMTk0LCAweGRmNDljNTU5LCAweDE1YjdmZjk3LCAweDYzODU4M2M4LAotCTB4MGY2NGVjOTUsIDB4MGZhZGJmZDksIDB4ZDgyMWE4YWQsIDB4MmJhN2RlYWYsIDB4ZDAyNjIzMTYsIDB4NDRkOGYzOWIsCi0JMHgwNDQ4N2YzNywgMHhlOGEwOGY3MSwgMHhkNzZlNGNmMywgMHg0N2ZjYWFmMiwgMHgyMjM5MmY3NCwgMHg1MzVmMGZkOCwKLQkweDdkYTVkNzI0LCAweDMzNGUxMWVmLCAweDA0N2ZhZDRhLCAweGY0NWZiYzllLCAweGQ2M2Y1YWZjLCAweDkwNzViYTk3LAotCTB4ZmRjMTJjOWQsIDB4OGUyZDkyODYsIDB4NGZjNDVkZDIsIDB4ZmIwYTRjMDcsIDB4OWZjODA3YTEsIDB4NWU4OTNhNWEsCi0JMHhhM2ZkNTBhYSwgMHgyN2MzYTYwMywgMHhhMjJmNzBlMywgMHhhN2VjZjE0NSwgMHg4OGIxYWZhMSwgMHhlMDUyZDYzMywKLQkweGZlMTRiYmE5LCAweGIyNzk3NjQyLCAweGRmNzVhZmVhLCAweGRhM2Y3YjgwLCAweDFkYjhiNWJhLCAweGYyMmYwOWU5LAotCTB4ODQ0N2YzZWYsIDB4YjllNjhkYWQsIDB4NmI2MTUzZTksIDB4OTM2NmRmODcsIDB4YzNiZTAyZmUsIDB4ODBiYWVkYjksCi0JMHhlM2FmZGRlMiwgMHg2OTcyODJlZiwgMHgwZDgxZmNmZiwgMHhmZDUxYjQzNywgMHg2ZmJhODc3NSwgMHgxNzFmODc2OCwKLQkweGNlZmJiZjI3LCAweGM3OGM4OTczLCAweGZiMjliNzNiLCAweGY5OWZiNGNkLCAweDkwNzc4NDg3LCAweGNiOTQ5NWZhLAotCTB4ODc3NWRmZjMsIDB4OWUzNmI2OWMsIDB4ZDc2YjY5ZDcsIDB4OTdkODQzZGYsIDB4NWNlMTczNmQsIDB4ODgzNWMyMjgsCi0JMHg4YTc5ODlmZiwgMHhmMDQ0NDE3OCwgMHgwZDdiZmI0NiwgMHg0NDg2YmJmYiwgMHg3NWQ3ZjEwNSwgMHgzZmZiNjMwNywKLQkweGQ3NTFmMWQyLCAweDdlMDFiMjUwLCAweGZmNjY1OGUwLCAweDU5ZmUzYTQ3LCAweDcyNDQxZjg3LCAweGVjMjA2ZTQxLAotCTB4ZjI0YWE3NTYsIDB4YzNiZDZhZjUsIDB4NzljNTFiZTQsIDB4NjIzZWNiYTIsIDB4OWE2ZWZlMDMsIDB4N2I4YjVjOTcsCi0JMHhmMGI4ZTI2YywgMHhlNmVmODNlNCwgMHg0ZTlmNmNiNSwgMHhiZDA3ZjJlYiwgMHhiYTAzZGMxZSwgMHhkM2VlZDNlOSwKLQkweDYzZWYzZjBjLCAweDgyYTdkOTk4LCAweDcwZjZjN2Q3LCAweGM1MDk0MDRlLCAweDBjZWUyYTEzLCAweDA5NTI5YTBjLAotCTB4ZDViMDIzYmUsIDB4ODdmZTg2OWEsIDB4MDBlZTA3ODQsIDB4YTBiMTI4OTksIDB4NDJhZmIyMzQsIDB4NTU4YTZjMzEsCi0JMHhkNGUyMmZjMCwgMHg5MWZmMWQzNCwgMHg3ZTBlNThlNiwgMHgwNTU4ZjEyOSwgMHhjNTg5NjNmOCwgMHg4OWJlODU2OSwKLQkweGVmYTIzN2Y2LCAweDcxZmY5MDdmLCAweDY4NjdiY2FmLCAweDZiMWVjMGI1LCAweDUzOGI1MWZlLCAweDM2ZWFmNWFlLAotCTB4MmQxZmZiMmIsIDB4ZDBmZmM5NDcsIDB4ZmNkNTJiZGQsIDB4MDg1ZWVkMGQsIDB4MTA5ZTFkZjksIDB4ZGI5MWY4ZWMsCi0JMHhiOWQ0MmUzOSwgMHg3ZmJlMWRlMSwgMHg3ODNiODlmMSwgMHhmYWY4OTkyMCwgMHhmN2MzOWM5MywgMHhiN2UxYjk1NCwKLQkweGM5NGZhYzI4LCAweDI3MmNlODZmLCAweDNmNmNiNjNjLCAweDU1ZjM4ODlkLCAweGZiMGFmMDM4LCAweDNkYjc1NzFiLAotCTB4MDhlMzI4OWUsIDB4YTZkMTFmMzIsIDB4Y2Y4YjQ5ZTIsIDB4NjhmNGFiYjQsIDB4N2QwMWVmNTMsIDB4M2JjYjdhNDgsCi0JMHgwODZlZWQ4NywgMHhiZDY4MzZmNywgMHhmYjQ0NTdlYywgMHhiOTFmOWE4NywgMHgzODRmMWI0ZSwgMHhhNDVjNDVkZiwKLQkweDhiYjdmNjgzLCAweDViYmJkNWEwLCAweDg5ODg2NDc2LCAweGQ1M2FlM2ZlLCAweGNkYjM1Y2FmLCAweDNhN2VmN2NhLAotCTB4YzJlZDkwNDQsIDB4M2Y1NDYwOWEsIDB4YmFjZmJlZjUsIDB4OWRmYWM2ODMsIDB4YTdmZTUxZTUsIDB4ZWVkMjJlN2EsCi0JMHg3ZGJjYjZlNSwgMHg3ZmY2NmVlYSwgMHg2ZjljYWRiYSwgMHhmZDJhZGE2YiwgMHgwNDU4NzEyMSwgMHg4YmMwMTVmMywKLQkweDM3MDRiMTRjLCAweDk0N2FmNTFkLCAweDI3ZTdmODQ5LCAweDFmNTQ1ZmFhLCAweDJlYmM2NThlLCAweDdkNjc4YjE5LAotCTB4OGIyYzc0YjIsIDB4MzJjNjdiZTEsIDB4NGM3N2JjYjksIDB4OGE1YzhiZGUsIDB4M2JkMTBjNTgsIDB4OTEwNGFiNWMsCi0JMHhlYTk5ZmI0ZiwgMHg3YjhkZGQwZiwgMHgyMDYzYTA5MiwgMHg5NDc5Zjk5ZCwgMHgxNDUzMTlmOCwgMHhhZTZhN2FhYiwKLQkweDc3MDUzOTU3LCAweGRmZWFkZWIzLCAweGY1OTg3YjhlLCAweGNiZmQ4MjgzLCAweGQxMzdlMDNiLCAweGEzZjAwZGY4LAotCTB4ZGMxZTQxYTYsIDB4YjczZjdjYjUsIDB4NmVmOTExNGUsIDB4OTUwNmMzYzgsIDB4MDQxZTQ5ZmYsIDB4ZWIyZjBmZWIsCi0JMHg0MTI1OWFiNSwgMHhmMDY5YWZkYywgMHhlZTgxMzYxZiwgMHgwM2Y4MWM5YSwgMHhlZjgwMmRlNywgMHg1NzM2MjgwOCwKLQkweGY4Mjc5ZjIxLCAweDc5ZjFhY2JjLCAweGM3MzQzY2I0LCAweDg3MjVmMWFiLCAweGZiOGQxZjhjLCAweDlkMmM1OGE3LAotCTB4ZDdlMDQ1YmIsIDB4ZGVkNGJjMmIsIDB4MGNlMDE4OGMsIDB4ZjcwODExOTUsIDB4ZmRiMjg1MDksIDB4YWY1ZmQxZTQsCi0JMHhkM2MzODZkOCwgMHgzNDNmOGM5NywgMHhhZjRjNGM5OSwgMHhmNmY3ZjIxMSwgMHg3MGM1NjA0MywgMHg2NWU0M2E2ZCwKLQkweGNiYmE1MmI3LCAweDUzY2Y1OTE1LCAweDU3MmYwYjk1LCAweDJiYzVjZWU4LCAweGY5MjJmOTU1LCAweDYzZjljNzRiLAotCTB4ZTlmOTIzZTMsIDB4NDBmZjEyNjIsIDB4Y2YwOTViMmIsIDB4YTRlNmIzOTAsIDB4YTIxNGQ3ZjAsIDB4YzJlNTI3Y2MsCi0JMHhkYjBjNDM1YiwgMHhlMjdkZDQyOCwgMHg3M2FkMDQyMiwgMHg3YzY3MGE4NSwgMHg5ZGZkZWUyZiwgMHg4NjFmOGM4NSwKLQkweDVlNWY5NjJmLCAweGJmZmMyODExLCAweDhhNGQ4N2QwLCAweGFiNTdlZjg1LCAweGZjOTg3MWY4LCAweGVmYzM5NTFmLAotCTB4ODMxNzg3YjcsIDB4MjM4NWYxYWUsIDB4MWEyZGQwMzYsIDB4MWVlZGY3M2YsIDB4ZjA4NzMzZGEsIDB4ZTkyMTUxOTAsCi0JMHhiN2ViNjRkNywgMHgwNDUxNzlmMiwgMHhiNTVmODhhZCwgMHgyMmZiNGExNiwgMHhhZmVjYWUyYywgMHhjNWM0M2U3MiwKLQkweGRmNmQzZTcxLCAweDg5ZjdhYTFmLCAweGFjZTFmMWEzLCAweDdlMDI3NjkwLCAweGY0OGU2YmIyLCAweDRmYzI1MTkzLAotCTB4ZjgxYzdkYzYsIDB4MjdlMTgwYzksIDB4OGM5Zjg0YTMsIDB4ODBjOWY4N2EsIDB4ODYwMzI3ZTEsIDB4N2UxODBjOWYsCi0JMHhjOWY4NGEzMiwgMHhlNGMyN2ZhOCwgMHhkMTMwZmYzZCwgMHhmMDUzNjlmMywgMHhhN2M0YWJmMCwgMHg0ZGZhYTU5ZiwKLQkweGE3ZmViNDE1LCAweGQ3OWI4ZjcxLCAweDExZmRlN2VmLCAweDE5NWViMGRmLCAweDVmYzQ1M2Q3LCAweDFmMDg4YWY2LAotCTB4NzBiOWVjYWQsIDB4ZTExMzk0ZDQsIDB4YmY5ZGI2YTcsIDB4ZTIwNWVhN2YsIDB4MTdlNDk1OGYsIDB4M2JmZDllNDIsCi0JMHhmMTRjNTA5NSwgMHhkY2Y2N2NkNCwgMHg5Nzk2MzhkYSwgMHg2MzZlYmVlNywgMHgxYjY0ZGJmZCwgMHg0Nzc3NmQzZSwKLQkweGNmN2VmOWYwLCAweDdkNGFiNGZmLCAweGQxNzdjYTE5LCAweDYzYmEyYmI4LCAweDRmZmZkMDNkLCAweGIxZDJmYTU1LAotCTB4MGY0MmY4ZGUsIDB4YWQzMmU1ZDMsIDB4MjUxZGVmODksIDB4YmY1MGIzZmEsIDB4OWViZjBjNTIsIDB4YmY5YWZkNDEsCi0JMHhkYTM2NzZmMSwgMHhiNmVlMzgxZiwgMHgxY2I3MGY0MSwgMHhlMTkxZDkyYiwgMHgxNzdlZjdjMiwgMHhlMWM1YjVmOCwKLQkweDU4Y2ZjMWI0LCAweGVkOTkyZGJmLCAweDhjYmE3MzZlLCAweDczYzcxMmRiLCAweDQ3YTM0YmRlLCAweGI3OGM4NTU1LAotCTB4YjgyOTUyN2QsIDB4OTc5ZWEyYmMsIDB4MjVkNjQxMDgsIDB4NmU5MjdlODYsIDB4YzVhNmYyZDEsIDB4NThlM2EzMTEsCi0JMHhmM2NhNzg5MSwgMHgwNzEwNzMzYiwgMHgzZTllMTU0OSwgMHgyMTdjNDRkNywgMHg4ZDJiNjFjZSwgMHhlM2EyNTFjNCwKLQkweDZhZjJlMzFkLCAweDlkZjg4NjEzLCAweDUwYTlhZTU2LCAweGRiY2VmNzBjLCAweDg1YWJjZmM3LCAweGQ3ZTFkMzhiLAotCTB4MTEzOGE2M2YsIDB4Yjg3MzZlNmYsIDB4YjgyNmFkZWUsIDB4MzcxNThjZWQsIDB4OGE3ZDQ1MzIsIDB4ZjA0OTk2Y2IsCi0JMHg3MzhhMjNjOCwgMHhiOWJkZTgzZiwgMHgxMzU2ZjU4NCwgMHhmNzhhNTI2OCwgMHhiNzJjZDUwYiwgMHhjYjJhNDE2ZCwKLQkweGFmZWY5NmE2LCAweGQ2NmE3NjNlLCAweDkwYWZiMWY3LCAweGI2NzU4NmQ3LCAweDE0YjZiZDM5LCAweGRhZDNkZjlkLAotCTB4ZjdmNTc4YWYsIDB4YjFiODM1MjAsIDB4OWIwZGM2NDIsIDB4ZmMwMTE4ZTgsIDB4NmRkOWI3ZGQsIDB4MjUzODg5NWIsCi0JMHhmZmI4M2ZiOSwgMHgxM2U1NDZiNywgMHhjN2VhM2JlZCwgMHg3M2VhMWZmNywgMHhhYmUwZWJjNCwgMHhmNDE3ZGExMSwKLQkweGQ1MmJlNjE2LCAweGUzMTJiZjhkLCAweGZlYTdlNmViLCAweDU2YjViN2VjLCAweDJkNzhmMDI0LCAweDFiYjdkYTRlLAotCTB4NDlkNzkzYTUsIDB4OGQzYzYwNzgsIDB4NWNmMWExZWMsIDB4YmRlMzBmM2MsIDB4N2FiNDE0MzUsIDB4YmJkYzFlYjAsCi0JMHgzMzg1NzgyMCwgMHgyYjNjYzU2OCwgMHg3YzcwOTViNywgMHhjZTViYmZkZiwgMHg2Yzk5ZGZlMywgMHg2NzVmODIyYiwKLQkweGU5NjZkYTcxLCAweDNiZTIzZGZkLCAweDBlMTM2NWYwLCAweDVlYmNhOWY3LCAweDA4ZGI4N2Y2LCAweDQzZjAyOTRmLAotCTB4NzVmZmM4NTMsIDB4OGI1N2M0NGMsIDB4ZmViNmZlYmEsIDB4ZDhmZmEzNjQsIDB4ZjQxNTk4ZmYsIDB4NGFlZDU0NjksCi0JMHg1NDllMWQzNCwgMHhiNmU1NzhmOSwgMHhkNzc4NmM1YiwgMHhmMmYxNjZkMCwgMHg4YWJmMDdiYiwgMHgxMGRmN2ZlZiwKLQkweDkwZjkwYmJiLCAweGFkMjc4MWM2LCAweGFlMWY4MjZlLCAweDkzZjY3ZTkwLCAweGVhZGY5MjE1LCAweGI4Zjk0MjczLAotCTB4MjFiMjMxZTcsIDB4MzcyMWVmOTYsIDB4YmY3OWZiM2EsIDB4OWM3ZWY4ZTMsIDB4YzRmZjAzZjAsIDB4MTM3YzYzZTksCi0JMHg5ZjcwMDQ5ZiwgMHg0OGMwNmRhZiwgMHgxMjdhYzhkZiwgMHg4MWI2ZGM3OCwgMHg1NWJmOTYxNiwgMHhhOWNkYmYxNiwKLQkweDEzZGVjNzVmLCAweGE1ZTEwYWY5LCAweDgxNWVlNDkxLCAweGIzZmE3MWZkLCAweDFmMTczZmMxLCAweGY3OWIzN2JmLAotCTB4N2JlNGViNDksIDB4ZTJkNzFlNTQsIDB4MzdjYzc5OGMsIDB4ZmYxYWQ3Y2MsIDB4Nzk0OTk3MzQsIDB4YTk3YmU2ZDYsCi0JMHhiZGYzYzJjMiwgMHhiNGU1MjVmNCwgMHhkZjBiNzc2ZCwgMHgxMGNkNjk4MywgMHg2MmY5NDUxZSwgMHg1M2U0ZDUzOSwKLQkweDM1NDZkNzkzLCAweDdiYmFkOTJlLCAweGY0ZWJmMDg5LCAweGVlZWZkOTBkLCAweGNmYzEyNzk3LCAweDJiOWQ3NTY1LAotCTB4M2UxMjdhNTQsIDB4YjhiYTEzNWYsIDB4M2QyYWJiZGQsIDB4NzI4YzcyOWIsIDB4ZWUzMGYxOGYsIDB4OWJlZTU1MjksCi0JMHgzN2YyODYxNiwgMHg2YmZhNDYxNCwgMHhjOGE1MzZmMywgMHhlMGZmYzBlZiwgMHhiZDJhNTNiMywgMHhmNzIzN2ZkMSwKLQkweGVhYTRmMTU3LCAweGJkNzFkNjhkLCAweDFhN2I2ODcxLCAweDg1NjFjNmY0LCAweGY3MWI1NGYzLCAweGUzNmViZjQ4LAotCTB4ZTcxYzA5OGIsIDB4YWY4ZDhmZmEsIDB4ZWExZWY4ZmUsIDB4ODMxM2M5ZjcsIDB4MTNmN2ZhY2QsIDB4MjdhOTIxNmQsCi0JMHg4MjlmYzlkYSwgMHhkYWE1NThkZSwgMHhmZjYyODZmZCwgMHg3Mjc0MmI0ZiwgMHgxN2FkZjZkYywgMHhhYzVjODFhZiwKLQkweGY4YjkyYTE4LCAweDBlZmJjMTRiLCAweGVhZmNkZjQxLCAweDczYmUxZmM1LCAweDVmNjIyYjgzLCAweGRjYWM3ZGI1LAotCTB4MTZkNjZmZjksIDB4NzI2ZjFlODcsIDB4NTYwYWJiOWYsIDB4NDkzY2VmMGEsIDB4NWFjMzljMmYsIDB4MWRmMjI5YjcsCi0JMHhmZDhkOGY1OSwgMHhkMWRlOGQ0ZiwgMHhmMjQyZDA3YywgMHhmMDg4ZWFkYiwgMHhhOWZmNDY4MSwgMHg3OGRiMjZmYywKLQkweDVmZDI0ZTNlLCAweDA3YzZiN2EzLCAweDNhMzViZDFhLCAweDlkMjk3YmYxLCAweGZiYWRhZmZmLCAweDJiNWU5NTMzLAotCTB4NTMxZGZlNTQsIDB4ODc0NTZlZTUsIDB4ZTU4YWI2ZGIsIDB4MDU2YjZkZGQsIDB4YjFmYTZiZGYsIDB4NGUzZjU4Y2QsCi0JMHg3ZWI4ZTcyNywgMHhjMGI5MDFkZiwgMHg2OWQwMjJiYiwgMHhjNjU1Yjc3NCwgMHhhMDRkMGYyMywgMHhiZWVjMzY1MywKLQkweDZhZDU4ZWI2LCAweDhkNWRiMWRjLCAweGZjZDJhZTFmLCAweDRjN2Y2MmUwLCAweGFiNGU4ZWE1LCAweDZhNzQ5MzlmLAotCTB4NWZlZGU5N2QsIDB4ZmJjNWMwZmYsIDB4NGY2YzdhOTMsIDB4MmI4YmZiMGMsIDB4YmQzMzBlODcsIDB4NjYzZTc3MWEsCi0JMHhmNGJmNTM3NSwgMHg1ZjQxYjc0YSwgMHgzODk3NzZiNywgMHhiMTVmMzcxMSwgMHhmOTBhZDA3MywgMHg0ZDc0YWY0ZiwKLQkweGVhNGRlZmNhLCAweGFmMGQ2MGJkLCAweGNlOGEzZmIwLCAweGExZmQ2OWVlLCAweDNjZDMwZWY3LCAweDI2YzQzNzliLAotCTB4MzY4ZDFlZTIsIDB4ZjI1MmI3OGYsIDB4NzI3NzZiNzUsIDB4ZWQ2YmU2MGEsIDB4MzgxZmY5NmUsIDB4M2Y3YTY4Y2YsCi0JMHhjNDJlZWU1YSwgMHg0OTU4Nzk0YSwgMHgyZjJlNDI5ZiwgMHhkZWM5ZTJkYywgMHgzZjMxMzg1OCwgMHg5NTk1OTVhNiwKLQkweDEwY2Y2ZTkyLCAweDI1NmY3MTdhLCAweGJiZTg3ZTJiLCAweDAzZDY0M2MwLCAweDkzZTQxZTcxLCAweDQxYzJmMmYzLAotCTB4YzYzZTBiY2MsIDB4MTdhNDZkYmEsIDB4YWYyNWZmNzEsIDB4YWM3YmZjMzMsIDB4YmU3NDVjODMsIDB4MjEzMjgyZWYsCi0JMHhkMjNiZTY0NSwgMHg5MjZmZGUwOCwgMHhjYzcyYjNlZiwgMHg1MmFmYmNiMiwgMHgwZjZhM2JkYSwgMHg4NmE0NWRhMSwKLQkweDY4ZmZiMWNiLCAweDVmOTUzNWJkLCAweDM2YTdmMWExLCAweDlhOWViNDRlLCAweDU3Nzc3ZjZhLCAweGEyZmE3OTRhLAotCTB4YWI3MDVkZmQsIDB4NGYwMjkzNzEsIDB4NmRlNjlkYjYsIDB4MDc4ZTc0N2UsIDB4ZGEyZmE0NzEsIDB4ZTY0ZTJkYTcsCi0JMHg0YmY3YzY5NywgMHgzMjk1NWFjYywgMHhlNGYzN2VjOSwgMHhmZGVhNjgzOSwgMHg0ZGE2ZDQwZSwgMHg3OTA5ZGZiMiwKLQkweGI0NGU1NTVmLCAweDc5ZTNlZmJiLCAweDI3OTk3ZTkyLCAweGRkOTBhMGI5LCAweDZjMmVlZmEyLCAweDY1ZmJlNTg4LAotCTB4MzhiNGJlZGEsIDB4NWVmYWRmZmQsIDB4MTRjYWMxZTEsIDB4NGUxNGZlMzUsIDB4MTRkOTNmODAsIDB4NDg3ZmNhYTcsCi0JMHhhMjVmYThjMiwgMHhmZGVjZDdhYiwgMHgyMTM4NjczOSwgMHgzZjlmYTc0NSwgMHhhMWVkNTZlYSwgMHgzYzgxZWYwOCwKLQkweDgxNWM5ZThiLCAweGZlYjljNzc4LCAweDQyYTYwOTBiLCAweDlmNWNhN2YwLCAweGFiNjZkZGY2LCAweGY0MGY1Y2U3LAotCTB4YmUxOGY2ZGMsIDB4ZDM3ZTRlZWYsIDB4ZGE5M2M0MGUsIDB4YTcxY2M5MDMsIDB4ZWNhN2FmYjksIDB4ZTcxYTVlZTIsCi0JMHhmYzU5NmRiZSwgMHhmM2YzNTBkZSwgMHgyZmZhYTk1NywgMHg4ZWNiNzM3ZSwgMHhlYmRmZjQ0YSwgMHg2ZjhmYzI3NiwKLQkweDg4NmNmODc3LCAweDJjMGZjNWMzLCAweGRmYjBlNWIxLCAweDVhMDFjZjJiLCAweDIyYjM2YWRlLCAweDBjOWVmYzdjLAotCTB4NjU3MjExZmEsIDB4N2IwNzkxM2EsIDB4ZjRhZjdhYjMsIDB4NjI0ZGViZmYsIDB4YjM5YmYyMjcsIDB4MzM4YjdjZmIsCi0JMHg1MjllMWZhMSwgMHhjNTI3ZjAzYywgMHhkYWEzZDIzZSwgMHhjNzc0OGM3OSwgMHg2ZmJlYzU4NywgMHhlZjY4YmY0MSwKLQkweGM2YzJlNmVmLCAweDIxOWZiMTlhLCAweDgyOWRjZTJmLCAweDA3ZWMwYmZjLCAweGE2NWUwMWViLCAweDZlNzFmY2E5LAotCTB4YWI4MjdjZTAsIDB4MmZjZjgyMzAsIDB4ZTM0ODFlZmIsIDB4ZDY3ZjJkMGIsIDB4MTk0ZmY4OGUsIDB4MGQyOWEzZjgsCi0JMHhlNmE2ZDFmYywgMHgyYzBjNzZjOSwgMHg3MDdkYjg2MiwgMHhlOWZiYmYxOSwgMHg0NzNhNjc0MywgMHhmYjU2M2RiNiwKLQkweGVmMDhhMDQ0LCAweGRhM2UyNTc4LCAweDA5ZGQxNmJhLCAweDdmNjNhOGJmLCAweDM1Y2UzMjRjLCAweGI2NDBkNmQ5LAotCTB4MWI2ZDBmZGUsIDB4MDFkZjk4N2MsIDB4ZTU4YzFhNWQsIDB4Y2UzNTQwNzcsIDB4NjdiODM1MjUsIDB4N2M5ZjZhYjMsCi0JMHgzYmY1YTc2NywgMHhiNTk3ZWFhMSwgMHhlZjBjOGI1ZCwgMHg0YzY5ZGE3OSwgMHhkOWZmOGQyNywgMHg1ZmRmM2M1MCwKLQkweDA0ZTlkZWQzLCAweDk1ZTNmZWVjLCAweDRlYmRmMmU1LCAweGQzYmU0YmI1LCAweGFlZmVlNGM5LCAweDVhZjRlMzQ5LAotCTB4YmU1N2IxNzksIDB4M2JiZGQwZmIsIDB4YmU5MWIzYmEsIDB4MjU3YWVjZWYsIDB4N2JhY2UzMTEsIDB4NGUxNTY3ZmMsCi0JMHhjZWI3YzcxMywgMHg3N2YxZmM2MCwgMHhiYmU1N2I0NywgMHgyN2M3ZjZhMywgMHhiZTAzZmY3ZiwgMHgxYzc2N2YwNiwKLQkweGM2NzkwYzUzLCAweGVjNDk4MmZiLCAweGMyNDNmYTg3LCAweGRmYjZmYzg2LCAweGJkY2ZkODI5LCAweGIwM2QxNjY0LAotCTB4YTI1ZjlhZWIsIDB4YzU1MmZmZDUsIDB4ZmVhNGE1YzMsIDB4Y2Q3ZmQwNmMsIDB4NjFiMzI3ODEsIDB4MjA5MzdlMzcsCi0JMHhmNzAzYTZlMSwgMHhjODdhMDhmZSwgMHhmNDhjN2NmZiwgMHhmZDgyMmRiZiwgMHhmNDgwZDZkYiwgMHg2NGY3YjU5NywKLQkweDM4ZWM3ODQyLCAweDE5NTQ3Zjg3LCAweDQ2YjlmMmNmLCAweGFkYTQ5NzdkLCAweGFlMGJmYzhiLCAweGQ0NDU4ZGZmLAotCTB4NmY3ODFkNjEsIDB4ZGY3ZTdlMDQsIDB4M2QwNzZhMTIsIDB4MTQ3ZjI3ZGYsIDB4MmExMzhmNzksIDB4NmZkZmJkZmYsCi0JMHg4N2Y3Y2M1ZSwgMHg1N2UwMTA0OCwgMHg0YWZmZGZiYywgMHg5YTg5ZjIwMiwgMHhmZTZiNTYxZiwgMHhiNGVmMTc5NSwKLQkweGVmOTUxZTM3LCAweDg3MGJlMzgxLCAweGQ0MjMxY2Y5LCAweGE3N2FjOTc4LCAweGRmOGRiN2U0LCAweDRhY2UyZWI3LAotCTB4NmI4YWJmNjUsIDB4ZGIyMTJkM2EsIDB4YWI1YWY0NjQsIDB4ZjBlMzRkZmEsIDB4MmU3Y2MzOTEsIDB4ZmQyNDNjZWIsCi0JMHhmM2ExY2U4MiwgMHg3ZTY4MTdlYywgMHg3MGJlZjY4NiwgMHhlY2YzYTFkZCwgMHhhZGRmNjgyNywgMHhkMmYxMjIzZiwKLQkweGI3ZDY0NDc1LCAweDc4YjQ5ODE0LCAweGMzYzk1NzhiLCAweDM4NjE1OTc5LCAweGI0ZDJjMmJmLCAweDliOWIwMGQ1LAotCTB4M2E1MDVhYjYsIDB4MDhjODc4ZDUsIDB4MGFiYmU1ZmIsIDB4OTllN2NhN2UsIDB4YjhlYTZkYWUsIDB4ZjM3NTViMDQsCi0JMHg5NzRkNTZjNSwgMHgzZWE4ZGFlZiwgMHhhNWVmODFkNywgMHhiYmRhZDczZCwgMHg1MGYzYzg4ZSwgMHgyNzZlMmJhOCwKLQkweGVmNWQ4M2RmLCAweGViZWNhMGIwLCAweGRmM2RiMDcyLCAweGMwMmE2ZGQ3LCAweDEyYWY3NTdkLCAweDcxZGNmZWM3LAotCTB4ZjRkNmZlZjUsIDB4MjJjNmVmNzUsIDB4NDYyOTkwNGUsIDB4N2NkYzk5NGUsIDB4MTU2NjZiNmYsIDB4MDIyZTliOGQsCi0JMHg3YjRiOGY3YywgMHg5ZmU1NzQ0ZiwgMHhmOGMzMmUzZiwgMHhhZmMyNjIwYiwgMHg1Yjk4MDIyMCwgMHg3OTA5YTMzNSwKLQkweGUxNDkwNTkzLCAweGY3M2M2MDMyLCAweGQzODRiYTU4LCAweDBlMjBhZmMzLCAweDM3MjQwY2U1LCAweGE1ZjI4ZjIxLAotCTB4OGFmNTRhZTMsIDB4MzBlZWNlMjEsIDB4MGEwN2FmZjksIDB4ZGIyZWM2YmEsIDB4YzQ2MzVjNjQsIDB4NTc5OWI5MDYsCi0JMHhmYTY4ZjkyNSwgMHhlMjQ3M2E0OSwgMHg4M2I5ZjUxYywgMHhkM2U5ODFjZiwgMHg5YjlkZjliYSwgMHhhMTk3MGMyOCwKLQkweDgzN2M3MWRmLCAweDhjN2Y2MGZiLCAweDQyMGVmZjkzLCAweGY2ZjU5NzllLCAweDAyNzU1OGM2LCAweDNkZTk5Nzk3LAotCTB4YTQyNWFlYWEsIDB4OWYwMzYzZTYsIDB4ZjdmODgyOWIsIDB4YTEyYjhlMDQsIDB4YmNmZGViNmYsIDB4NGYyOTJhZWUsCi0JMHg5Nzk5MThiZSwgMHhjZWIxNGJiZCwgMHhlNGZhMjdmYSwgMHg4MzVmZGI5MCwgMHhjYzcyZmE3NSwgMHhiOGI5MjU0NSwKLQkweDdkZWYyYjE3LCAweGI3ZjM1MTVmLCAweDUwYmNiZjlhLCAweDdhOTY3NjlkLCAweGM4Y2RiM2NlLCAweGI0ZmU0MDcwLAotCTB4ZDc4YTg5ZmIsIDB4MWY1MmVmY2IsIDB4OGFkOTNjMmEsIDB4YzQ3MzdmNzUsIDB4MTYyMGVmY2UsIDB4NzNjOWM0OGUsCi0JMHhiNjNhOGNkNSwgMHhkOWIxN2RhZiwgMHgyZTI4M2ZlYywgMHhmZWEyNjg4YiwgMHgyMTRkMGIyNywgMHhhNmZmZGZkYywKLQkweDU5OWU3M2IwLCAweDZkZmNhM2Q4LCAweGMzZGYyYzUzLCAweGYxYmY4ZTU2LCAweDk2NGRlYzM5LCAweDkyYTdmN2Y5LAotCTB4ZmY1OTlmNjgsIDB4OGJhMDc4YTAsIDB4ZmUyZjQ3OWIsIDB4NmNhODRmZTMsIDB4MTg3ZmRiMWEsIDB4ZmU0OTExZmIsCi0JMHhiOWMzZjA2NiwgMHg3ZWYzYmFkMSwgMHg5ZDM3ZjU0MiwgMHhiNDhmNzY0MywgMHg4ZmJmNDI2MywgMHg5ZTdlMGZlMywKLQkweGFjOGE2Mjk4LCAweGM1YzhjYWVmLCAweDg3OWQ1ZjE3LCAweGU5ZjFjZWQyLCAweDMyY2RjNzg1LCAweDllYjUxNTllLAotCTB4YmUyZTE5MmIsIDB4OThmZDRlMGYsIDB4YTYxYzU3M2UsIDB4MGI4N2NlMjAsIDB4MGY3YTlmOGYsIDB4N2I4ODViZWIsCi0JMHhkODM3MzhjZSwgMHhmNmY1OTdhZCwgMHgyNTY2Yjg0ZSwgMHgxNTBlN2UyMywgMHg4OGFjOTdmYSwgMHhiNTQwNzgzZSwKLQkweGFlN2Q2OTRiLCAweDdiMDhkYzlmLCAweDIwNTlhNmY5LCAweDY1MTQ0MGVlLCAweDA3ZDY4ODNlLCAweDQyNWY4MzNmLAotCTB4YWEzN2M2ZmUsIDB4MDdlZDc5ZTQsIDB4NTQ2ZmJlMzksIDB4NjcwNjVjYjEsIDB4OWJlNzJlNDEsIDB4YjY5ZmJmMjcsCi0JMHhlMzUxNGFhZiwgMHhkMWFlOTI1OSwgMHg4YmE2OGI3NCwgMHhlNzcxNmY4NiwgMHg4NTI0ZTlmMCwgMHhhOGY0NWNmMSwKLQkweGM2MmVlZmM0LCAweGI3NjdlN2VmLCAweDE5OGE5ODkzLCAweGM2MzZmYmZmLCAweGY4NmZmZmYzLCAweGNhN2RlMmZkLAotCTB4ZmJlMzczZjcsIDB4ZDNlZDNhZmMsIDB4NzdlN2Q4NmQsIDB4OTNlZDFmZmUsIDB4YmNkZmMwZjUsIDB4M2VlMzYxY2YsCi0JMHhiMTQyZmFkMywgMHg4ZjM3YzA3MywgMHg4YWNmZDg5YiwgMHgwYTJhMzdiZSwgMHg2NmQxZWIwNCwgMHg1M2M3MWM3MywKLQkweGRkZjI3MWZkLCAweGQzY2ZlOTAxLCAweGRlOWE5ZmQwLCAweDJlMTc1ZDljLCAweDRlNzFiZjgyLCAweGFlYjE2Nzg4LAotCTB4ZWI4ODY5YjAsIDB4MzBlNTU2MmYsIDB4YzMxNGNjZGYsIDB4YzI3ZWZjOTksIDB4M2Y4NzJlMTIsIDB4MzViZmI2NmIsCi0JMHg0YmIyMjNmNywgMHgwZjA0OGYwMywgMHhmNGUzNGFiZiwgMHg1NmE3YzEyOSwgMHhlZGRkNWY0MSwgMHg5NWRjZmNlMCwKLQkweGE1NjAyOWEwLCAweDQ1OTIwNjc5LCAweDdmOWEzMWYxLCAweGNlNWNjZDYwLCAweGFhMTE1Y2IzLCAweGIxYjA2YTllLAotCTB4ZWNmNmEyOWUsIDB4Y2EzN2I0MWUsIDB4ZjlmZGVmZjYsIDB4YTNmODFlYzIsIDB4Zjc4MmY5MjMsIDB4YWUyMjUwMzMsCi0JMHhjMGYwNGJkOSwgMHhmZjZlMDI5MiwgMHhmNmU3YTZhMSwgMHg5N2VmYzgyNCwgMHg4MTkzZTYwOCwgMHhlZjdjMjkzNSwKLQkweDgzYTdlOWU0LCAweDBlOGVjMmQ3LCAweDExMzM3YTBjLCAweGY0NGNhYjU3LCAweDE5Yzc0MTg3LCAweDA3OWY2OTY2LAotCTB4ZTU0ZjU0ZGMsIDB4YjFhZjhhMTMsIDB4YzkxNGUzMWQsIDB4ZTMxYjg2ZjUsIDB4NDM0MDNhNWUsIDB4MmE5MWU2YzUsCi0JMHgzZDczZmFhNSwgMHhkNWNmOWMwOSwgMHg2MzhiNDdlNCwgMHg3ZjljMGVjZiwgMHhkZWQyNzgwYSwgMHhmMmEwN2YyMywKLQkweGM1Nzc4Njk5LCAweGE2NjdkZjJiLCAweGU4ZDY3OGFhLCAweDZhNWJmMWEwLCAweGE2Y2Y3YzljLCAweDM3N2M5MTZjLAotCTB4YmQ3OTFmN2UsIDB4MzNjOGZiZTAsIDB4Mjc3ODI5NjksIDB4NzFlMzFjZDcsIDB4NGFkZmRmMDEsIDB4ZmQ2MThmZjIsCi0JMHgzZTg4MWI3ZCwgMHhkMjQzZWM2NiwgMHg1YmRlMWNlMSwgMHg5OTdmZTI0ZSwgMHg3ZTVhNGRhYiwgMHgzNDYzZGY5ZiwKLQkweDlhNWZhOTBiLCAweDNkMTdmN2I1LCAweDIyMTdmN2M2LCAweGVmMTkzMzNjLCAweGU4OWY5ODkxLCAweDNlZGQ2N2ZiLAotCTB4NWZiZTM1NWIsIDB4ZDJmYjY1ZWUsIDB4ZDlkZWYyYWMsIDB4N2E0ZjM0ZmYsIDB4NWFhOTI4NmYsIDB4NjIzYjk1ZGEsCi0JMHg5ZGZjODlmZCwgMHhmMzQ1MGVmYSwgMHg3Yzk2Y2ZjMywgMHhlNGY2MGIzYywgMHhjYzZmODNkYywgMHhhMjU3Nzk0NCwKLQkweGY2OWFiOTJmLCAweDFmZTM0NGYzLCAweDdkYzRjMzE2LCAweGY3ZTYxOTkwLCAweGZlMzQxZjM0LCAweGU1YzcxNjcxLAotCTB4ZmNjMWJjYjcsIDB4NTdhZWI3ZmYsIDB4MDFmZmM3NWIsIDB4MDkzNGUxNzAsIDB4MDAwMDQ4ZDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzA5LCAweGYzN2RmMGY1LCAweDY2NDk5OTk2LAorCTB4MGQ5MDkzMjYsIDB4OGEwMjcxMDgsIDB4MDgxMzgwYTgsIDB4YzNiNDQwNjksIDB4OGUyMmEyMjIsIDB4MjYwZGM1NWIsCisJMHgxMDM3ZDkwMiwgMHhmZGFmZjBmZCwgMHgyZDM2MTAzMiwgMHg0NjgyZDBkNiwgMHhhMGMwNzQ4YiwgMHgwZDA0ODJjMSwKKwkweDAwZTAyNDE4LCAweGQ1MmZmODJlLCAweDViN2JiZmQ4LCAweDE2YzM0YTBjLCAweDdlMWI4MDkyLCAweGNlN2ZlNWI1LAorCTB4ZWYyNWY3YjksIDB4NmQ4MDI2NGQsIDB4ZmRmYjVmYmYsIDB4ZTZmMTY5YmYsIDB4NWRkZjdiYmMsIDB4M2RjZjc2Y2UsCisJMHgxNGZiZGNmNywgMHhmODk2MjhkYiwgMHhlMGNlYzY2MywgMHgyY2FiZDIwZiwgMHhkZDUxYjE4YywgMHhhMGRiNmNlOSwKKwkweDc0ZmE4N2ExLCAweDY1NTlmZmU3LCAweDQyODdlYWQzLCAweDZlZDBhYjFlLCAweDljZmRkNjFlLCAweDdlNTQ4NWIxLAorCTB4Mzg2YjhjNDAsIDB4ZjRkMzFjYmIsIDB4OGYwZTFiMTAsIDB4OTYxNmM5NmQsIDB4NmU3ZGQ4Y2MsIDB4MDkwMWJmNDYsCisJMHg5MTI5NzRiZSwgMHg1NjE1Y2ViMSwgMHg3ODBjYmFmNywgMHgwODVjN2FhZSwgMHgyMGM4ZjdkZiwgMHhmN2MyNTA3NywKKwkweDE2NTJjOTNjLCAweGJhYTIzZmU0LCAweGJlY2MwMWQ3LCAweDZjYjMyMzNmLCAweGUwZGE2NmM2LCAweGMzZmMwZjZmLAorCTB4N2NiZWEwN2EsIDB4NjMxMDZjYWMsIDB4MDU5OTY5ZWEsIDB4NzdlYTdmYTAsIDB4MzQwM2E1MTIsIDB4MDBlZmMzMzYsCisJMHg2YzJkZjk3OCwgMHhmZWVlZDBkYywgMHhlY2ZkMTNiOSwgMHhlOGI3ODA3MywgMHg1YjdlODlmOSwgMHgwOTdmOTBjMCwKKwkweGVjZmZhODkzLCAweDVmYWE0YWZiLCAweGYyZjE2ZjZmLCAweDA3M2U2YzViLCAweDhkOTQxNjM2LCAweDdmOTYzYmNmLAorCTB4OGJlN2MyZTksIDB4N2FhMTZlOWIsIDB4ZDgyYzUzMTgsIDB4YzhiNzcyY2YsIDB4NjM1Y2ZjNGYsIDB4YmJmYWVlOTYsCisJMHg3NmEyMTRmMSwgMHgwNGQzZDg3NCwgMHgzMTg4ZmVlZCwgMHhiNmJmYjVlOSwgMHhkNTQzYzAzMiwgMHgwNTYzZDU1NiwKKwkweGFhZDg0Y2JjLCAweDcwMGM3Zjg2LCAweDg0Mjk1YWU5LCAweDlkOTc2NWIwLCAweGZiNGJjMDMxLCAweDlkODcwZTZhLAorCTB4OWZjYjBmOWEsIDB4YWExODA1YTgsIDB4ZmYzNmI3MjgsIDB4ZGJjNDBhZmMsIDB4YTNhZDk5NTYsIDB4Zjc4NGZjNjYsCisJMHgzYmM3MWI1NiwgMHg5ZTcwZTQ2YiwgMHg2YmE1ODM5ZCwgMHhmN2M3NGY3NywgMHhjY2FkMWEwYiwgMHg2ZTk1ZjUwZSwKKwkweDA1N2E5ZmNmLCAweDU0ZmJmOWMwLCAweGQ3NGE0NTg2LCAweDAxZmFkMDJmLCAweGVhOTIxODVjLCAweGNmMThlZTExLAorCTB4MzZlMGZkYTgsIDB4Y2ExZWI0MzksIDB4OTM5YWI4NzcsIDB4MWZmMTgzNmYsIDB4Y2YzMWI0YWIsIDB4Njc2ZmQwYzUsCisJMHg4MGFkZjI3MywgMHg5NmQwYTI4NywgMHhkMTVlZjg0OSwgMHgyYzhiYzk0NiwgMHhmYWViNjEzNCwgMHg3YmMyZmIzNywKKwkweGFmMjQxYmE1LCAweDVjNTJmMDE1LCAweDQzM2NjYjE3LCAweGMwY2UxZjc4LCAweDM5MDZkNmJmLCAweDlmYzg2M2ZjLAorCTB4MTk2NGUzMGIsIDB4NDllYWQ3NDgsIDB4NTdmNmM2NGMsIDB4Mzc2NzFlNjgsIDB4MGU1NThlOWUsIDB4Mzc2YjFlNjEsCisJMHhkYTAxYmE1YywgMHg1ZWNhZjc4MSwgMHhjNDM4YmM5NCwgMHgyMDBiMGIzMiwgMHhiNzZmYjY1ZiwgMHg4MWQ2N2I0ZiwKKwkweDBkYTA1YmUzLCAweDk2YjhlMjc2LCAweDNmMmU1ODZhLCAweGVlY2RiYjk0LCAweGQ1YWRmZWMxLCAweGQxN2U0MTI2LAorCTB4OWU1YWI1ZWEsIDB4NzVjNWZlODEsIDB4Y2Q4ZjMxOTcsIDB4NDE5YWFmZDAsIDB4ODhmZTQ2MjksIDB4OWIwMThmNGMsCisJMHhjNDUzZmIxOCwgMHhmOTFlYWY5OCwgMHgzNzY5MDk0NCwgMHg5ZmEyZTQxOSwgMHgyZWY0NGYxNCwgMHhmNTRkOTNhZSwKKwkweDRiMTkyNjAzLCAweDAwN2VmZjgyLCAweDgyYmUwMjdmLCAweDU3ODQ5ZDNiLCAweDA1NzM2ZTlkLCAweDNiNzRlOTFmLAorCTB4Mjk4N2U0MjUsIDB4ZmFjNmQ5OWQsIDB4NDhlN2Y0ZjUsIDB4NzU0ZmU4MDcsIDB4NWZkMjliYTUsIDB4YmE1MmE2NTQsCisJMHhmNDQzZDJiMiwgMHgwN2YxMDI3OSwgMHg2ZmQxNzJlOSwgMHg0ZTM2NThkNywgMHgzZTVkNzY4MSwgMHg0YjMxNDZlNiwKKwkweGE3MWJlMjk4LCAweGU3ZTA5YzAyLCAweDAxZGRmMjcwLCAweGYxOTY3M2M5LCAweDZhMTNlOWViLCAweDcyNjUxNzIwLAorCTB4NTNlNDliMTUsIDB4MDVhYzAyZmEsIDB4YjQyZjMwZTYsIDB4OWJlOGRjYWYsIDB4ZDdiMTlhMzgsIDB4MWM3MWUwNTksCisJMHg1MDI5MjJmZiwgMHhhYzY1NzQ4MCwgMHg3NDBmZDUzZSwgMHgxZTgxMjI1OSwgMHhjNTJkN2MwMSwgMHg5NjFlMDI0MSwKKwkweDA2N2UwNWY0LCAweDRmNzEzZDNhLCAweDI0YjJiM2Y2LCAweDcwODg5YWM2LCAweDY2OGY3M2RlLCAweDU0MzUzZDUwLAorCTB4MGNmNTBhOGYsIDB4YzkzZDc3M2EsIDB4ZjU0YzczZDMsIDB4ZDAyZjRmMjQsIDB4ZjU0YjU5ZWIsIDB4OWVhZmNmZDgsCisJMHgzMThmYTYyNywgMHg5MTdhNjdmNywgMHg1ODBiY2Y1ZSwgMHhmY2YzOTE2ZSwgMHg2MzNjOTVjNiwgMHgzMzNmYjlhYywKKwkweDk0OWVhODRhLCAweDAwMmNiZGJiLCAweDdmOWQ2NWU1LCAweDg2NGZiMzU4LCAweGY4YzZjNzdjLCAweDIzMzI4ZjExLAorCTB4ODZkZjhkMWYsIDB4YWE0MTM5ZjUsIDB4OTcxNDdjOGMsIDB4YTc5MjYzMTMsIDB4MDk4MjVmNzgsIDB4OWZiOTMzZWUsCisJMHg3ZjkyN2NhOSwgMHg2NTNmMjlhMCwgMHg3YzExYTVkYSwgMHg1ZWI3NzBlOSwgMHg1NGU4NjAyNiwgMHhmZWEzNWUzOCwKKwkweGQyMzRmZDZhLCAweGQ5ZmFlMzNiLCAweDlmYTA3ZTA4LCAweDAzY2VmNDgzLCAweGJiMTcwMjYzLCAweDU3ZDhkZmExLAorCTB4NDA3ZmY0MDYsIDB4OGVlZTVjMGIsIDB4MmUzMDM3YzIsIDB4ZWE2MmE1ODksIDB4OTkxYTYwYjEsIDB4NzhlNTU0YmYsCisJMHhmYmZmZGYxYiwgMHhmZGUxMDdjMSwgMHhlMGU3NGI3MiwgMHg0YmZmODA3OCwgMHg4ZTIxZjcxYSwgMHg0Y2E4OGZmYiwKKwkweDMyMzE2ZTgxLCAweDMxNzJjMGFiLCAweDZmZmE0NjU2LCAweGIzZjY0NjY5LCAweDk3NWUwMzQxLCAweDkxN2UwMDBkLAorCTB4YTY1ZGViYmEsIDB4MWY5MTUyMDYsIDB4NDExNTgyNWIsIDB4MzAyNWNmZTQsIDB4OGM3ZWIwNDEsIDB4ZTExNTY0MWQsCisJMHhmZWYwODVlMCwgMHhjNDU0YmM4MCwgMHhmZDAzNTViZiwgMHg4MzVmNmM2MSwgMHhmYjUyODdmNiwgMHg1YjdlZDhhZCwKKwkweDA3NWJlZDJmLCAweGI3ZGE5OGU2LCAweGRhOTgxN2E1LCAweDNlZDA2OWI3LCAweDcwNjc0N2M4LCAweGYwMWY2OGJlLAorCTB4OTNiMTg2MzcsIDB4NmZiNTNlNmMsIDB4ZjZhMDJmNGQsIDB4YzBhYzZhOTcsIDB4NTc0YzdlZDQsIDB4YmI2MGRmZmIsCisJMHg0OWZiNjNkZiwgMHg3MDNmYzY1MSwgMHhlOWZjNzk4YywgMHg2YmYxZTY0NSwgMHg0MTZjZmM3YywgMHg0MzFmYjQ1MCwKKwkweDIwYTQ5N2UzLCAweDExN2E3ZjFmLCAweGQ3OTViZjFmLCAweGFiYmVkNWRiLCAweDA0OWFmZjBiLCAweDVlYTQzYWVkLAorCTB4YWM2ODNmYzYsIDB4OTQxN2ZjNzksIDB4ZTU2ZmM3OTgsIDB4MmMxN2JiZWQsIDB4YTgzYmVkMTMsIDB4MTk2OTc4ZmQsCisJMHgyNTA1ZmYxZiwgMHgwZDY2YmVkNCwgMHhiNDhmOTE3OCwgMHgyMTE1MzFmZSwgMHg0MGQzNGY5YywgMHgwNzQ4NTI4MCwKKwkweDkyMWQyOGZhLCAweDkzZTgxOGMwLCAweDg0ODFiMmRmLCAweDM4NjIwNzg3LCAweDAzMTM3ZGRmLCAweGQ2ZThlNmZjLAorCTB4MTIwNDJjYTcsIDB4OTk3MGYzMDgsIDB4OGRlMmU5ZTAsIDB4M2YzZTM0ZTMsIDB4OWY1ZTY5MDcsIDB4YWIzYWJhMmQsCisJMHg4Y2Y5YTY1MSwgMHgyZTg2YjRhZCwgMHgzN2I2ZmU4MiwgMHg2Nzg0NDFjYSwgMHgyNDMyYmNhZCwgMHg3NjBhN2NkMywKKwkweGIwYTdiZTAyLCAweGYzZmYzZTMwLCAweDhjZWI2MWFhLCAweDY3NGM4YWUzLCAweDJkYWRhYjU3LCAweGQyZWFiOTA2LAorCTB4OTBkOWUzZWYsIDB4MDU1ZmU4MGEsIDB4NmVhOGMxMzIsIDB4MzRmNDE1YjgsIDB4MzlmYzNkMDMsIDB4MGY0YzYzZTgsCisJMHgzOTJlZGNhYiwgMHg1ZDljN2EwNCwgMHgwNTliOTQ2YywgMHhiMjA5MmVkYywgMHhmZjQwODdmNywgMHhkZmZhMjI3ZiwKKwkweGI3N2M3MGFhLCAweDg4NDI5M2NlLCAweGNjNTY2ZmZmLCAweGNkOWY1MGQxLCAweGE0MDU4ZWFlLCAweDVjYTNmNzc3LAorCTB4YmI3M2E5ZDAsIDB4MTRmNjQ0MzUsIDB4OWY4ODA3NGMsIDB4MTkxNDQ5ZGIsIDB4MWJhZWQzZmIsIDB4MzA1Yzk0ZGUsCisJMHgzMWY0ZDYzZiwgMHgwYjM3NzdiZCwgMHhmMjg1NGUyZCwgMHgwZWU3OTczMywgMHhlZmY4YzM3MCwgMHgyMTFkNjY5YSwKKwkweDdjYzRmY2UzLCAweGM3MjQyZGZkLCAweDg3MjViZmFjLCAweDJiMGQ2OWIxLCAweGRjMDBmZWQ0LCAweGJjZmQ0ZDNlLAorCTB4MWRmZWYwYzUsIDB4NTc3YzMzMDEsIDB4NTc2ZTE5ODEsIDB4ZWQwNWFhNDMsIDB4YWQ4OTQyOTksIDB4YTllZjdhODUsCisJMHhlZGViZTczMCwgMHgzODEyOTY0YywgMHgzZjdiNDU1ZCwgMHg4NWY0MWMwMSwgMHgzYTYwZjc0NywgMHg4OWJiMWYwMiwKKwkweGZjZGRkM2FlLCAweGU1M2ZiZDVkLCAweDRjMmNhOTBmLCAweDEyNGI3MWYzLCAweDUxMjdmYTIzLCAweDhmOWI4MGI5LAorCTB4ZDNiZmIyM2IsIDB4MGZjZjliNTUsIDB4YTBmZTk5ZmQsIDB4ZWM4Y2Y4NGMsIDB4NThhZWNiN2YsIDB4ZDllYzA1OWYsCisJMHg1NTJmOWE5NiwgMHhmMWM4YzE2NCwgMHhjNjdmZjY0NCwgMHhiOGYxYzhmYywgMHg3MjFmOWMzNSwgMHgzOWNmOTE4MywKKwkweDUzZjI0NDlmLCAweDVmYjhlMzc5LCAweDUzZjAzMjFlLCAweGJmYjVmZDY5LCAweGFmNzg2NDNjLCAweDEzMjZlZWI4LAorCTB4YzNiYTE4NWMsIDB4MjZiZjNlNTQsIDB4YmIzZjk0ZDcsIDB4M2Y5NGQwYmEsIDB4MTMxY2Q5NzMsIDB4ZDA3YzFiOWMsCisJMHhmY2M2N2U1NCwgMHg3YmZjYTYwNSwgMHhlNTMxMWUyYSwgMHhjMmIwNTVkZiwgMHg3ODExZGYwNCwgMHhmNmZlNTRjYSwKKwkweGY5NGQ2YjY5LCAweGRjOTc1ZDk2LCAweGY1NTQ3Mjg4LCAweGRlNzBjYzgxLCAweGZhZDFkYWY4LCAweGJmMzdiNDczLAorCTB4YTQ1ZTI4NzYsIDB4NTdiMDExYzcsIDB4ODE4ZTBlNTAsIDB4N2I2OTgyYmQsIDB4YWJiMjQ4ZTMsIDB4MzFlNjBmNDEsCisJMHg0YjU2YTEzMCwgMHhjNmNiODNmYiwgMHhhNDY2NWVhMiwgMHhlZmQyNDMzZiwgMHhjNjM0YzE4MywgMHg4NDNjOTc5ZSwKKwkweDYzNDZiOTNmLCAweDg5NjE2MDYxLCAweDcxZjE3NDI1LCAweDZmYzg2Y2E3LCAweDBkN2U0NzM5LCAweDllYzhmYTA4LAorCTB4ZjQ0YjcyZjksIDB4NzJlYmU1ZTcsIDB4ZDNiZDQwMmYsIDB4NWY4MDNlOWIsIDB4M2FlNzljN2YsIDB4OTkxMDNkODQsCisJMHhiZjMxMjI1ZiwgMHg3ZWJlYjlmMSwgMHg3YWUyNWNiYSwgMHg1M2FjNDRiZSwgMHgzYmVhNWU0YSwgMHgwZTEwYjk5ZSwKKwkweDViMzhhZTBmLCAweDU0ODBmNTdiLCAweGZkNjg5M2Q0LCAweDgwM2YyMTI3LCAweDUxZTgxODE0LCAweDI0YzgzNzVjLAorCTB4NjViYjZkZGYsIDB4ZWExOTU3ZWEsIDB4OTlhYmQwMDQsIDB4NDI1N2JmY2MsIDB4OWJkZTEzM2QsIDB4ZWMzMGNiN2UsCisJMHhkNDc1ZWY4NywgMHg4OTMxYWNmYiwgMHhjYWI2ZjVlNiwgMHhhNDNjYmZjOSwgMHg5NGZjN2QyMiwgMHg0NjljYTkxZSwKKwkweDgwNjU2YjY5LCAweDA1OTU0M2QyLCAweDU5NWU3ZTk0LCAweGU1NGI2OTQxLCAweDU0MGY0YTdjLCAweDYzZmQyOTA2LAorCTB4M2Y0YTMyZTUsIDB4ZjRhNmFjYWQsIDB4NGExYWNhZTMsIDB4NTEwY2FjM2YsIDB4YTNlOTVlZGEsIDB4MmU4Nzk3NTQsCisJMHhmNjE3ZWJmZCwgMHhjMGI3NThiMCwgMHg4YjBmNmUwMywgMHhiMjgyMmNiMSwgMHhkZWU3MjRjZCwgMHg1M2YzOTQ1NCwKKwkweGEzMDY2ZjhlLCAweDYzZWE3ZmJkLCAweGRlOGNhMjYwLCAweDZmYzkxNWYxLCAweDQ3ZDFkM2JkLCAweDA4NWU0YWY2LAorCTB4Y2Y0ZmE3OTgsIDB4YTcwYzdiN2MsIDB4MjZjMmRkOTMsIDB4OGY0N2QwMzMsIDB4Zjc5Y2Y0NWMsIDB4MmIwNGExZGUsCisJMHhhOWMwMzJjOCwgMHg1MTljOWJkZSwgMHgwZmI5ODVlYSwgMHgzYTJlNzVlOSwgMHg3MGU3NWYzMSwgMHgzZWI3Njc1YywKKwkweGFjNmM5N2ZkLCAweDIwNjk3MmY3LCAweGNhZjc4NzlmLCAweGYwYjMwZjM0LCAweGQ3YTQ1ZWIzLCAweGY0OWJjNTBmLAorCTB4NWJkMjlmZGEsIDB4MmU4OWRjYTAsIDB4MzNhNzM1ZmMsIDB4NmU0OGU3NDgsIDB4ODM1NGZmYWEsIDB4Yzc4ODI5OTUsCisJMHgyZTEwZDhhNiwgMHg3YmVkNGY4ZCwgMHgzOGYyODVkNiwgMHgzZWFlNTUzNywgMHg3Yzc3YjIzNCwgMHg1NDY3ZDY5NSwKKwkweDI5ZTMwYzNiLCAweGE3YzMzNDZmLCAweGRjYzlhNWFhLCAweGJiODllMDdmLCAweDk1ZjIxODc1LCAweDQ1ZDBmYWJiLAorCTB4NGE1NGZmNDgsIDB4YTZlNjdhZjUsIDB4YjFjZWQ0NmEsIDB4N2M3MTQxYmEsIDB4NzlmMTBlZmUsIDB4ZjEzYzYzNzAsCisJMHhhOTNiYWMyYiwgMHgzZmJiM2ZmYywgMHhmN2EzZDViZCwgMHhmNjA2YjE4NywgMHgwMWY1MGQ4NSwgMHhmNzNhMGRlNCwKKwkweGRkMDdhOGZhLCAweDNmMzRhZjk1LCAweGZkNDlhYmQyLCAweDE4ODVlZDA2LCAweDIwNjY3N2Y4LCAweGFjMTBhYmQ2LAorCTB4MmY1ZTViZDcsIDB4ZTM5N2FkMDcsIDB4ZjZhNjhkZjMsIDB4YmU4ZjNkZTAsIDB4N2FmN2M3YTYsIDB4YjU4NTViZTcsCisJMHg3ZDA0ZTNlYSwgMHhlN2YwYTU3NSwgMHhhYmQ5ZDcxNCwgMHhiYzRhZjNjZCwgMHhlYzZmMmUwOSwgMHg2NzlhNmQ1YiwKKwkweDdmOTAwZmYwLCAweGM4MjkyMTU2LCAweDliODIyNTNmLCAweDMyYzcxNDNhLCAweDZhOTdmYTA5LCAweGU1YmQ1MGYxLAorCTB4NmE1NzJmMTIsIDB4MWUwMmQxNmIsIDB4YjQ2NmM3NjIsIDB4ZDFjZGVlMzMsIDB4ZmI3M2NmZjksIDB4MWZkZjQwMWYsCisJMHgxZWNhYWRmZCwgMHhkN2UxN2NjNSwgMHhiMDZjZjU1MSwgMHhlN2U4MmQ2ZiwgMHgwZGJkZDAxMSwgMHhlZjUwNTNjNSwKKwkweDNkNzZkZDFkLCAweDk4YjMyN2Q5LCAweGE0OGI4NWRmLCAweDhkOWQ1NjAyLCAweDY2MDljZTc2LCAweDdmZmM4Yzk5LAorCTB4MzVkZWZkODIsIDB4YzhkZWIwZDIsIDB4OWZkNDY4YjcsIDB4ZjNjY2NiOTksIDB4MjY2N2Q4MmMsIDB4MGNjNmJmMzgsCisJMHg5MzliYjFlNywgMHg1NmYzZGY5MSwgMHhhMGI3MzBhYSwgMHg2ZmYzOWE1YywgMHhiZTQ5YjhiNywgMHgxMmM1NTlmMiwKKwkweDNmMDhlZjVhLCAweGE2NmViZGQ4LCAweDJmYjkwN2Y0LCAweGVjOTllNTdkLCAweDg3ZThhMWRjLCAweGY3NWJmYWUwLAorCTB4NzAyNjE0MGYsIDB4MzEyOGE1M2IsIDB4ZmYyMGY5YTQsIDB4M2Y5MTg2OGIsIDB4ZmJlMTgyYjksIDB4YTdhODI1YTEsCisJMHg1ZGU2NGU4MiwgMHhlZmQyN2FjZiwgMHhiMjNmZjY4NywgMHhkMjdjZmFiZiwgMHhmYTIxNGZjMywgMHhiZTQ5ZDcyMSwKKwkweGRhNzU5NDUwLCAweGQ4NDkxNmMzLCAweDk3NGE0MTViLCAweDc2ZWI3MThiLCAweDVjMDQ0ZDZiLCAweDQ3ZDcwMTFiLAorCTB4YmYzNzdmYzAsIDB4YmYxMzMyMjUsIDB4MzUwMjVhYTUsIDB4NWZjZTI0OTYsIDB4NGE0ODJmNjgsIDB4NDdmODE2YTcsCisJMHg1MWVkNGZlYSwgMHhiNTNmZWQ3ZiwgMHgzZmE4MzRmZSwgMHhmZDdmNTRkYiwgMHgwYmZlYjUzZiwgMHgyOWJmZjQ3YiwKKwkweGFmYTVmZDVhLCAweDA0MTZkYTZjLCAweDc5YjQ1MzdkLCAweDNjYzE4Yjk1LCAweDRlYTk1NDc0LCAweDRiZGQwMmY2LAorCTB4MjE3NjJmZDYsIDB4ODI1MTFjMWYsIDB4YTNlN2U0MmUsIDB4MzQ3Mjc5MjEsIDB4MjJkMmY4N2UsIDB4ZTdjY2EyZmMsCisJMHg4NTVkNzA5MCwgMHhjN2ZkNDI3ZiwgMHg1NGQ5Zjg1ZSwgMHg1OWJlZTdiNCwgMHhiZDY5YmFhZiwgMHg1YjBkNjc1NCwKKwkweDFhY2I0ZTQxLCAweGRmYTBhNzBhLCAweDFjODNlMDE3LCAweDQ2NTI3YTVlLCAweDlmY2NkMWI4LCAweDRhYWZjZjQ1LAorCTB4NzAxZWZmNDYsIDB4ODQ0ZjU4OGEsIDB4YWIyYTVlYzksIDB4OWMyNGYzZmQsIDB4Mjc1OWNhODcsIDB4N2JlNDU5YzksCisJMHgwNGU5ZmVkOCwgMHg1YWI5OGZkMiwgMHhlODdjY2Y1YywgMHhlNWY5ZDkyNywgMHgwZGU1MmYwMiwgMHhiYjI5M2IzZiwKKwkweDMwZjZiZDMwLCAweDRjYjAxM2VhLCAweDdjOGYwZWM4LCAweDQxZDg0MGFmLCAweGM0Y2UyYzg3LCAweGIxNDI1ODU2LAorCTB4YTExZmIxMWYsIDB4YzJmMWQ0ZGUsIDB4YWEwZWRjNDIsIDB4ZjBlNGYwZGEsIDB4YjZhZmQwODMsIDB4MjRiYWRmZGEsCisJMHg3OTc0YmUwMywgMHhmMzNmNTUzYiwgMHg3YTdhYWZkNywgMHg2MmVkY2JkNywgMHg1ZWZkZDdiZCwgMHgzNGYzZGU4OCwKKwkweDg5YWRmYjBhLCAweGQ4NmEyNWE3LCAweGM5NzFmNjg1LCAweDg0MWJkNTVhLCAweDllOWIyNWM3LCAweDVjNjllZTdkLAorCTB4ZjU2MjdlYWYsIDB4MTdmNTA0NWUsIDB4YzNlMzdhNmYsIDB4NmYxNzAwMzEsIDB4ZjBhNzEzNTEsIDB4ZTRhNDM4NjEsCisJMHhjMzk0ZmE2ZSwgMHhiYTIzZjliZiwgMHhmMmY0NTFlOSwgMHgxODY3OWExYiwgMHg0MjcwZmU3ZiwgMHhiNzhhNWQzNywKKwkweGIwZDhkNmVjLCAweDUwOThmODllLCAweDcxNmI1YmJmLCAweGZkNGZhMTQ0LCAweDY3Njg0OWMxLCAweDU2Zjg2ZDU1LAorCTB4ZDFlNTc1YzMsIDB4Yzk0YjEyNWQsIDB4YjVjZjgyODgsIDB4ODBiZDkwNmYsIDB4MGE3YTIyNzgsIDB4MmZkMTc1N2EsCisJMHhkMDM5N2NhMiwgMHgyNDdhZjUwNSwgMHhiZGNiMjJiZCwgMHgxNDY1ZmE4MSwgMHg5M2ZkMTdhZiwgMHhiZTJmZGZjMCwKKwkweDRmZWM3ZThhLCAweDQzYzQ1ZWFkLCAweGI5Zjc4YmMxLCAweDk1ODczYzcwLCAweGNmZTdjZTBhLCAweDNmNDY0ZTJjLAorCTB4NGMxYTgxN2QsIDB4OWZjYTUzNzYsIDB4OWZiOWFjMTcsIDB4YmRmZjJmZjgsIDB4ZmFmOTkzZmIsIDB4NDJkN2Q3ZDAsCisJMHgyZmIwNTU3MywgMHhlYWY2NzM4ZSwgMHg3OTljNjhkYiwgMHg1ODdjNDAyYywgMHgwZmVjOGNmMCwgMHhjMmI1ZmE0MSwKKwkweDIyODk2ZjI2LCAweDk3MzJjNTI3LCAweDgwZWJjMzkzLCAweGMzY2UzMGI4LCAweGJmNDE0ZWI4LCAweGQwZTVlZmVlLAorCTB4Y2M4ZmYyN2EsIDB4ZWUwZmE4NjEsIDB4NmNmMWZkZDcsIDB4OGI1ZmMxMmUsIDB4YjI3MTg0ZmQsIDB4ZGFlNzVmNDUsCisJMHhiYjViZmM0YywgMHg3NGU5MTliNCwgMHgwNTJmODA2YywgMHg0Y2U1NmFmZCwgMHg0ODdjMGEwOSwgMHhmOTVlYTA2NywKKwkweDM4NTNhYmJkLCAweGM5NDc5ODlkLCAweDVkODFlZjE2LCAweDYzOWYwMTMwLCAweDY3ZDU2NmY5LCAweDhmN2E2ZTFmLAorCTB4NmVlOGM5OWQsIDB4MWY2ODllN2YsIDB4ZjM4MzFkZmEsIDB4NTY2NGUxZjksIDB4N2M2NTFmNTAsIDB4MDdhZWIyMzUsCisJMHhmMDM3NWU2MCwgMHhiOWRlNDE5OSwgMHhjMjNlZDdmYywgMHhmZjk3NWRlNSwgMHgzMTkzNGRkMCwgMHhiOWY3YWJmZiwKKwkweDM4N2JlMTFjLCAweGMyYmY0MjVmLCAweGZiYmY5NDI5LCAweDgzZjQ4OTU2LCAweGM5YTM4NTk1LCAweGU0MmFhZDc5LAorCTB4YzkxZjljZGMsIDB4NDU3ZmQwMmYsIDB4MGRmMDMzOGEsIDB4NzQ0MDkzYjYsIDB4ZGU1YWJmMjAsIDB4YThkZjc4NGEsCisJMHg1NzVkYjE1NywgMHgzOTc1N2FjZiwgMHgyMGZhMTdjZSwgMHg3MDdkMDY0ZiwgMHg2MDNlYjc1OSwgMHhlODFlYjlhYiwKKwkweGYyMGFlZWRkLCAweDdhMWE5YmY1LCAweDVmOTQ2OWVlLCAweDA3YTBkNzkwLCAweGUzZjU1N2U1LCAweGRjNmY4ZmY4LAorCTB4MjA5ZGUxZmIsIDB4NzVlYmM3YjcsIDB4ZDVlYjM1YjksIDB4NzgyZGI5NDgsIDB4N2M4NGJkNjksIDB4YzdiNzI5MWEsCisJMHg4OTRhYzAwYiwgMHgzY2YwYjcyNiwgMHhiNDE2ZGNhYSwgMHhhYWY0NGJmYywgMHg2NWM3Yzc4ZSwgMHhmNWQ1NWViMywKKwkweDhjZjg2ZjY0LCAweGNhOTc5M2Q0LCAweDEyN2FhODllLCAweGVjYjNlZjdlLCAweGYzYThmYzllLCAweDQ1N2ZjZWExLAorCTB4ODBiZDI5YmYsIDB4OWYzYTA5ZmMsIDB4YzVkODdjZWEsIDB4ZjYxZjNhYTcsIDB4ZjA5OGNmZjAsIDB4M2I3Zjk5MTgsCisJMHhjMTBjMDRmMiwgMHg3ZjI1NWRiZiwgMHhkZjEzNDk2MiwgMHhkZWY3ODM4ZiwgMHhmODQ1OWZlYywgMHhjNzM0ZDFmMiwKKwkweDlmZWNkZmFhLCAweDExNDM4NDY4LCAweDc5NDQ3ZDcwLCAweDhmZWMwNDVmLCAweDgwODgxZjI4LCAweDRiZTU0YzJiLAorCTB4OGM2YWY3MWEsIDB4MmE2YzIwZjgsIDB4MmJmZjlkNjcsIDB4NzU5NDQ1ZjYsIDB4OTUwZjNlYWMsIDB4ODJkNDljMzcsCisJMHg5ZDY5MWZjOCwgMHg3NTNmZWExYSwgMHhlOGE4OTgyMSwgMHg5MzI5ZGMzZiwgMHg3MDAzYjBmZiwgMHhlOWRhMDRiYywKKwkweDBhMTE5OGQ4LCAweDZjNTkxZTgyLCAweDBlY2RlYmU3LCAweDAxMmJhNzc3LCAweDFjZjFjNWQyLCAweDk2ZDI0Y2VlLAorCTB4OWZkNDFlYTAsIDB4MWZiOWRhNzcsIDB4ZTlkZmMzYTQsIDB4MzFmODM3OGEsIDB4YTRjOTM2MGUsIDB4NmM0MjViYzcsCisJMHgwOTNmMzQ3MiwgMHhkZjg0MzRjYywgMHgzZTViZDYxNiwgMHhlMDc2OGZmNywgMHg4N2I2MzNiZSwgMHhjZjQwY2VmYiwKKwkweGZhNDc2NWFiLCAweDU2YmY1YzdjLCAweDIzNjA1ZWNiLCAweGVkYzE2YjM2LCAweDc3YTE3NDJlLCAweDcxYmEwZDM0LAorCTB4ZmQ5ZjNjMWEsIDB4NmRiN2NjYjYsIDB4YWZhNTNlODIsIDB4ODQ3MWRkNjEsIDB4MmIxODlmMDUsIDB4NzJkZTdlZTEsCisJMHg0ZDk5OWZlMiwgMHg2YjMyMWQ3YywgMHgyODc5NzQ3OSwgMHgzOWU1ZWYxMiwgMHg3N2E4NjllNiwgMHhiOWYwZmQ2MSwKKwkweGQ3YWMwZmQxLCAweGUyM2FiMDUzLCAweDQyZjVkMzc5LCAweDNkNjlhYTZlLCAweGNlNmI1NDU4LCAweGQ0ZjU4ODBmLAorCTB4YzlmZWJhMzcsIDB4N2ZhNDk5NjQsIDB4ZWI4NGExNzAsIDB4YWZiN2ExN2EsIDB4MzhkZTg3OTYsIDB4YjFkM2U4MGQsCisJMHhiZmI4NjY0ZiwgMHgyNjQ5YWE3YSwgMHhjOGRhOWNmYSwgMHgzMDU5NTNmNywgMHg4Y2FmZTQ4OSwgMHhkNGJlOTI3NSwKKwkweGYyODZkNmYxLCAweDdhZWY3MTc1LCAweDlmZWI2ZGFjLCAweDNlNDIxZmIyLCAweGUxODdmNmRhLCAweDZkYjQ4MmJmLAorCTB4Nzc4MzI3ZGIsIDB4NDdjYWZjMjAsIDB4M2Q2MDdmZTksIDB4NjVkODRmY2IsIDB4Yzc3MzNmMjcsIDB4N2ZmMTI3MmUsCisJMHhhNWRmY2VjNywgMHg3NmYwODQzZiwgMHgzYWY3ZjkyYiwgMHgxYzNiN2Q3NiwgMHhhMTYzYjFmOSwgMHg2MGY1MDBiNSwKKwkweDdlYmUwMGM3LCAweGVkZjlkYWFhLCAweDdmOWExNmYwLCAweDMzMWQxMTE3LCAweDdkZTg4ZDE0LCAweDA3MmZlOWFhLAorCTB4NTRlMDJlMzAsIDB4ZWQwYThjMTMsIDB4MjRiMTVkOGIsIDB4ZGFhZmU1NWYsIDB4YjFkMTFmYzksIDB4ODBlY2RiZjMsCisJMHg5ZTM3OWZlMywgMHhkM2ZmYjEzMiwgMHg1ZWQzNjRlMSwgMHg3M2M1ZmVjMiwgMHg4ZWY5NzliZiwgMHhjMDJlY2ZkMSwKKwkweGRkODZmMWZkLCAweDlmYzg0Y2RhLCAweDg3NWZkYWYwLCAweDc4ZWQ3ZWEzLCAweGVkNGRkYjg5LCAweGRjMWFjYjZhLAorCTB4NDhiYTE4ZGYsIDB4YmQwMmE4NWUsIDB4ZmFjODUxZGEsIDB4ZDE2ZmI2MzEsIDB4NDcyOGYxYzQsIDB4NTdmMmYxM2QsCisJMHgyZjljYjNmMiwgMHg3YzI4MjYzZSwgMHg4ZmVmZmIzZCwgMHhmNWM3YzkwZiwgMHg5MzY0MzM5ZiwgMHgxZGRmZGM3MCwKKwkweDg5ZWEwM2Y4LCAweDRiZTI1NjVkLCAweGViYzdiYzdkLCAweDczM2Q5MDE3LCAweGZiZGY3MWFlLCAweDUyZGM2ZTNmLAorCTB4YmRjNjdjZjgsIDB4ZmY5Y2RmZTAsIDB4ZmE4NzhhYWQsIDB4M2QwNzI5MTcsIDB4MDNlNzdjZjksIDB4N2E3MjZmMDQsCisJMHhjOWU3YmZhOSwgMHhhN2ZmNmJlZiwgMHhhMDI1ZmRkMSwgMHhlM2RjZWJiYiwgMHg0YjNmZmYwZSwgMHgwYmE3YjdmNywKKwkweDNlMzFiYmJhLCAweGJmYjVmY2EwLCAweGE4N2VmZjUyLCAweDM3Zjk2YjllLCAweGUzNmY3YmE3LCAweGI3ZmRlZGQ3LAorCTB4MzNmNzllMmMsIDB4NTY2NGZjYTEsIDB4ZTJjMzQwZWQsIDB4NmYzZGQyZGEsIDB4NWJlZTQyNjcsIDB4YjFlMzdiNjksCisJMHhmNjIzZTNiZiwgMHg1ZTM0ZjQ3YiwgMHhmMWI2ZmVlNSwgMHhlZDAzZWZiOCwgMHhhYzQ5NzhiMiwgMHhhYjNhZjkxNywKKwkweGZhMmZiMGJmLCAweDNiMjNjYmNmLCAweDYzZGE3ZmE0LCAweGM1MzA0ZjY0LCAweDJiZjcxMmIzLCAweGU5OWY0YWRmLAorCTB4MzYwYmQ4YTUsIDB4YzIwMGUzZTIsIDB4NmMwNTJiZWUsIDB4NGFmZTZmNWUsIDB4NGFkYzNlNjIsIDB4ZmQ3ZTlmZWQsCisJMHhkMzczYjQzZSwgMHg4M2IyNjRkMiwgMHhmN2ZiMjUyMSwgMHhmZTY0ZDc3NSwgMHhhZDMzNDRiYywgMHg5OGY1YWU4NywKKwkweDEyOTM0N2Q3LCAweDg5YThlYmNkLCAweDE5YWJiZWEyLCAweDBlZDVmZmVmLCAweDNjMDIxNDI5LCAweGNiZjAxZjhjLAorCTB4OGVhN2Y0NDQsIDB4MTI2NTQ4YmYsIDB4NjA1ODkzYzAsIDB4MjYzYmFlMTEsIDB4OWRmNWNjM2EsIDB4ODM2YzdkYzAsCisJMHhjNWVmZjFiZiwgMHgzYzJlYzRlMywgMHg0N2U5NWMwZSwgMHhjOTkwMGUzYywgMHgzYzRlN2FhZiwgMHg2ZjA5YmY2MiwKKwkweGM3OGMyMTk5LCAweGUzOTc4YTYxLCAweDRiZDRhMTMxLCAweDFlYjE2YTdlLCAweDFkYTI2ZWM3LCAweDM0OTYzOGEzLAorCTB4YjgyYjNjYTMsIDB4YTA3OGU2OWUsIDB4OWViZWI4NzUsIDB4NGNkZjBkZWUsIDB4ZDExNWNmYWMsIDB4MjU3ZjhlYTQsCisJMHhjZGQ5ZjY0ZCwgMHg1Y2ZhZDFmNSwgMHhhNTBmY2JhNywgMHg3ZmM3NGU4NywgMHhhYWM5MmU5NCwgMHg4ZTY5MmU5OSwKKwkweGViY2EwYTM5LCAweDhjM2Y1YzY0LCAweDFjOTlmMmM0LCAweGI0MmEwYjRlLCAweDBmZDYyNGRmLCAweDI4ZTY3OGQ3LAorCTB4YTQyNzgwNDEsIDB4YWY0ODJhNjUsIDB4MjJmNmRiN2MsIDB4NzliNTFmOGMsIDB4YzVjN2VhMjUsIDB4MWY5YTE2NmQsCisJMHhlMTEyNTk2YywgMHg0MjhkNDg3ZCwgMHhmNzE2N2JmMCwgMHhkNGY3YTQyOCwgMHhmZTM5NWUyYiwgMHhiYjNmNDMyMCwKKwkweGJhMDZlMzRmLCAweDdjOTdlZjlmLCAweGQ4Y2NlNjdmLCAweGYwYzdmNDZjLCAweGRlN2ZjNjFmLCAweDU5YjdlYjAwLAorCTB4MDYzODU5YWIsIDB4NjE1YjM0ZjAsIDB4ZjQwNGI4YzEsIDB4NzNlYzRiOTMsIDB4MGNkYzlmOTMsIDB4ZTRhYWVmZTMsCisJMHg1NWNlN2FlZSwgMHhmMmJkMzdiZSwgMHgwMTVmNGVjZiwgMHg0NWY5ZjYzZCwgMHg5NGM3NmQ4YywgMHhjNjI4OGE2ZiwKKwkweDlhOGZmNmY1LCAweGY3Y2FiZTM4LCAweDFlNDBkMGIzLCAweDBkZmIyMTg3LCAweGFiMmY4YWZiLCAweGNhZjMzZmRjLAorCTB4ODkxYTVmMWYsIDB4MWQ3MWRjZWIsIDB4N2ViOGUzNDMsIDB4YTk3MWUyY2QsIDB4OGE3MGJkNjIsIDB4MGViY2UyNzksCisJMHhlMjgzYWZkNCwgMHg5Zjc0YmY2OCwgMHhlNzE2OGNlYywgMHhiZmFjNDFiOCwgMHgyOGYxODM3ZiwgMHhiMmQ0NzY5MCwKKwkweDU3ZDcxOTZhLCAweGJlZmM5M2FjLCAweDViMWI1YWMxLCAweDY2MWUyNTFmLCAweDdlMTE2YThkLCAweGY4Mzc0MTIyLAorCTB4N2ZiOGQ5YzksIDB4MGQ5ZmRiYzMsIDB4ZTkxOWM2YWYsIDB4YThlNTM2ZDYsIDB4MWQyN2JjMzIsIDB4NjFiOWY3ZjAsCisJMHhjNTFmZWFmZiwgMHgxMWY3YWUyZiwgMHgyZGVjMWJiZiwgMHhmNDUxZmM5MywgMHhkZmMwYmQ0NywgMHg5MWRmM2RkNCwKKwkweGE2ZDJmNDlmLCAweGRmZTQxNmI1LCAweGE2MmQ2YjRiLCAweDU1M2FkOGZkLCAweGIwNDYzMWY4LCAweGE5YWZkODExLAorCTB4MmNjZWVjN2IsIDB4ZDkzZWNiYTQsIDB4ZTVhNWYxOGIsIDB4NDBiNTI3NGQsIDB4NDhjNDdkOTQsIDB4ZThmZDYyN2MsCisJMHhkZDU1NmY3ZiwgMHhiNTBlZWVkNCwgMHg3NWUyMjY3ZSwgMHhjMzFiMDljNywgMHhhZDc2ZjU3NSwgMHgzZjVhMzhiYSwKKwkweDdlZjJiNGVmLCAweGY3ZjU2NmNlLCAweGY3ZjhjZjBkLCAweDBlYjhlZmMzLCAweGFlM2M3ODQ3LCAweGYwOTk2YjNmLAorCTB4MWZmMjQ0ODMsIDB4NTUzZTNlMjMsIDB4YmYzODQyYzcsIDB4ZjUxNTdhZTIsIDB4OGM4ZGE5YzIsIDB4Yzk0MDc3ZTYsCisJMHgwNmZlYjg2MywgMHhkMWIxZmY3OSwgMHhlMzcxNzNhZiwgMHg1ZGEwZGY5NiwgMHhiOTI0ZDY1MCwgMHg0Y2EyNGI3MSwKKwkweDhmZDBkMTY5LCAweDJmMThkZTViLCAweGU5OWMzY2UzLCAweGRkNmZlM2QxLCAweGM4MzU2ZWMzLCAweDEwYWFhYjQ1LAorCTB4ZDk4ZWY2YmUsIDB4ZmJiNjE3NzEsIDB4ZDBjNjliNjUsIDB4ZGViZGYxNGUsIDB4ZmM3OWMyZTksIDB4MjQ5MWE2Y2IsCisJMHhlYjhkYmQwNywgMHgzNDU2NGFlNSwgMHg4NDFjZTMxMSwgMHg4N2U0OGMzZSwgMHg0YzYzMWJhMSwgMHhhMDcyMTVmMCwKKwkweDU0ZDdjYTFmLCAweDZmM2NjYjZiLCAweGQzMmRmYTE0LCAweDc4OGZiMTI0LCAweGY0MmRmYTllLCAweDdiN2U5OWZmLAorCTB4MDE2ZmQ3NWYsIDB4MjM5MDZmZDksIDB4NDE5YmMwYmYsIDB4ZDM0NGE1YmYsIDB4NGYyNTczNmYsIDB4ZWU3ZGUyMGEsCisJMHg0ODI5NDFjZSwgMHhhYjZmYjlkNywgMHhkYmY0ZDE0OSwgMHgyZmJlNGFhNiwgMHg0ZGM0NTliYSwgMHg3ZTgwMzQ3NywKKwkweGRmYTBkY2JiLCAweDQ1YmY0MDFhLCAweGEzMTkxZjg5LCAweDczZmE3ZWU5LCAweGJmZDBiN2U4LCAweGExMzZmZTQ2LAorCTB4ZGUzMjhiN2UsIDB4NzRmZTA0MWIsIDB4ZTliYzM2ZmQsIDB4ZTFiN2U5MjAsIDB4M2M1MzE2MGQsIDB4Zjg0ZDQ0ZjAsCisJMHg2ZmQ1N2E5YiwgMHg2OGFkZDI1MiwgMHhiZDUzZWYxZiwgMHg2N2Y4NTFiMSwgMHgzN2M3YjA5MywgMHg2YzQ2Mzg4YiwKKwkweDk1NWNmNTA3LCAweDVjZjRjM2Y2LCAweGI5ZWFmOWRlLCAweDc1OWUxMTdmLCAweDJiNzczNzNkLCAweDllZThiOGEzLAorCTB4ZGNmNWM4N2MsIDB4ZTdhMGVkZGMsIDB4YWU0N2U0MjQsIDB4NjRlZWU2ZTcsIDB4YTExNzJmZGMsIDB4ZDBmNDg2ZGYsCisJMHg5N2NhOGM2ZiwgMHhlNWZiZjk4NSwgMHhkZTRmMTk4ZCwgMHhmMDhkZjUwZCwgMHg5NDFiNWVhOSwgMHhlZmFkZDExZiwKKwkweDVkZjUxOTQ2LCAweGJlOGJkNjk1LCAweGZhN2U3N2RiLCAweDc3ZDBhYjZlLCAweGEyMDZjN2EwLCAweDBmZTQ4ZDdlLAorCTB4ZGUzOTkzNmYsIDB4YzNlOGM3N2MsIDB4Nzk0NjVmMWIsIDB4ZmI0YzlkZjksIDB4Zjg1OWVmOTIsIDB4YTMzYmQxZmUsCisJMHg3ZjIxNjcwZiwgMHhmM2ZhMmE3ZCwgMHhkOWU5YzZhMiwgMHhmYWE0MTk1ZSwgMHhjN2NlYmMyNywgMHhmYjkxYmE1NywKKwkweGI4MWFjYmNiLCAweDJiNTY1ODdkLCAweGU3ZjAzYzg3LCAweDY5ZGYzMWE0LCAweDlkYzJmZmQ4LCAweGY4MDE0YjEyLAorCTB4MTNmNTZiMjYsIDB4OWZlYmI0MGUsIDB4MWY1ODk5NTcsIDB4ZjAzNGM5NGQsIDB4NjI5Y2FjYzMsIDB4ZDk1N2ZiZjIsCisJMHhmY2YwZWI1ZCwgMHhkOTg1MmNkMSwgMHhlYzVmYmZkMCwgMHhlZDE0NzQ5OCwgMHhiZTFjZTJlMCwgMHg5ZTJjNTAxZiwKKwkweGIzYjA3MWViLCAweDQ0NjRmNGJiLCAweDljZTM0ODNjLCAweDllYjNmYjM3LCAweGFkNTMxNjcxLCAweDlmNTNhZTljLAorCTB4YjcxODQyOTUsIDB4MjJlZTMzZGEsIDB4YjhhMTdhNDQsIDB4NWRmY2ZjY2UsIDB4YzkzNzdmMjEsIDB4ZjYyZjg0MmQsCisJMHhlZTM1MWNhZSwgMHg4NWQ3MmY0MywgMHg0ZjAyN2RhNywgMHg5ZTEzMTc4MCwgMHgzYzU0NTI0MiwgMHg2NGE3YTUwMSwKKwkweGE1ZTM3NzI2LCAweDRiMmQ3N2YwLCAweGYwYTA1ZjcwLCAweDkxZjY4OTI5LCAweGUzYWRjNzIzLCAweDNhZmM3MjJkLAorCTB4NzczZjc1MWUsIDB4YmYyZmE4YjEsIDB4NmI5ZDJkNjksIDB4OGU4YmM0OGEsIDB4NzQ3YzQ4ZTcsIDB4MWYwMjNkZTEsCisJMHg3ZTVkNjllZiwgMHhkNzE4OTFlZCwgMHg3YTQzN2MwNCwgMHg4MDlmZjgyNiwgMHgzZmM3NjgxNywgMHhmOWQzMjJlZSwKKwkweDVlMDQ4ZjliLCAweDliOGY1NjQ2LCAweDM3MGZlMTgwLCAweGU0M2ExYzYxLCAweDc5Y2NkNWU3LCAweDYzZTAyZmIzLAorCTB4MTE5ZWM3ZDQsIDB4MzE1ZTlkMzgsIDB4N2RjMDFhYzYsIDB4NGVmNjBkZGEsIDB4MWYzYTgzZDIsIDB4M2U3MmIzMGUsCisJMHhkOTVlODRkNCwgMHgzYzYyYWZkMSwgMHgyNTFiZjNhZCwgMHhlNTIxZGEzNywgMHhiNWUxM2I2MSwgMHgwZWQxZjgxYywKKwkweGY1M2VmNjQ1LCAweDU3ODEyNGNkLCAweDZhYWY5ZDM3LCAweGQwMTNmMzE0LCAweDI2ZWI4MmMxLCAweGYxMGFiZTdkLAorCTB4OWIyMzU4ZjMsIDB4ZWJjYTVkMzgsIDB4NThiMjVkMzgsIDB4OTRjN2VkMjcsIDB4MzBkZTQ4ZDUsIDB4NzFhY2E3OGMsCisJMHhlYmExYzUwZSwgMHgwZTdlMTlmYSwgMHhmMGEyOWQyMywgMHg3ZjhkMTJhZiwgMHhiMzliM2ExOSwgMHg2MmNkZTdiYiwKKwkweGI1YWE2ZTUxLCAweGU3ZGM0M2ZhLCAweGIxZjIwYTk5LCAweGZlMTBkODk2LCAweDNlZmUxNjc3LCAweDI0NTBmYzU3LAorCTB4NzgxMzJlYmQsIDB4NzU3ODg0ZGIsIDB4YjkzYWZlMjAsIDB4OGVmZTE1ZmQsIDB4ZjllOTY5Y2UsIDB4ODRkMDRhZTUsCisJMHg5ZjRmMDlkNywgMHg1M2I3ZmNlNiwgMHhhYzVmYTBmMiwgMHhjZmM4NmYwYiwgMHhjNzRhM2Y5MCwgMHhkMjMzZjIxYiwKKwkweDQ2NTcyOWExLCAweGRkZjAwZjM4LCAweDc4ZTdhMzI3LCAweDI4ZDRiZjcxLCAweDBmM2I4NWY3LCAweDkxOWZmYWYyLAorCTB4YjhjYTJjYmMsIDB4ZmY3ZjMwN2YsIDB4NGRlZWJlNDAsIDB4YzU1OTg3ZGUsIDB4ZjdmMDQxM2EsIDB4ZmRjZWY2M2IsCisJMHg3N2JmOTEyMywgMHhkMTJmZGM0YSwgMHhmN2RhNmYxNCwgMHhkN2NhYzFiYywgMHgyMGVjMWI0ZCwgMHhmNmRmYjgwNywKKwkweGU3NWRlYWI2LCAweGFlMWZhOWU5LCAweGMwMzk3MmIyLCAweGUwYzc4NGY1LCAweDA3MDRiYWY3LCAweDc1YTZmMTgyLAorCTB4YTQxNzhhMzYsIDB4ZjZlNDBjN2UsIDB4NmY1ZjUxYWEsIDB4NWJhNGIzYjIsIDB4N2ZhZjdhYjMsIDB4MzdiZmE4OGEsCisJMHg4Nzg3NDk3YiwgMHg0N2E4N2I2MSwgMHgyMWJkYTExYiwgMHhjZTQ1ZWRkZCwgMHhlMGZmYmExNywgMHg0M2JhZTM1YywKKwkweDNiZGZjZmYwLCAweDFmOWRiZDJlLCAweGNlNTU0ZjFhLCAweDRjNWY2OTlhLCAweGI1NGFhYjhmLCAweGQxNTE1ZTA0LAorCTB4OTkyYzliYmUsIDB4ZTdhMGI3ZTIsIDB4NzBmZmNlODIsIDB4YTM2YWI3ZmQsIDB4YTU5ZmFmN2EsIDB4ZDA4ZWM4ZGEsCisJMHgyZDVlY2JjZiwgMHhmMDEwNTgzYiwgMHgyNTRmYTVmNiwgMHhlMzJiMDE3OSwgMHg3ZjM4YjE4MywgMHgxMDc5ODc4YywKKwkweDhmZjcyZjkyLCAweGNhNmVlOGZhLCAweGVkOWY2OTk3LCAweDI5ZjVkZmM2LCAweDFiYzg3ZGM1LCAweGJiMWQwYzc5LAorCTB4ZmIyMjUzMzEsIDB4NmNhYzNkZTEsIDB4MzZlMWRhMzQsIDB4MjY4YWIzZTYsIDB4NDdlNzNmMjEsIDB4ZDczYzIxZjEsCisJMHgzZDViNTk5MiwgMHgzZDcyMDNjMSwgMHg4NTU0MmVhMiwgMHg2NzQyNzdhOSwgMHhhZjQ4M2JlMiwgMHg3YTQzMzI3MSwKKwkweDRjZmFmYjM1LCAweGJlZjdmOWMwLCAweGRjNGNiMzNmLCAweDgxM2IwNzhhLCAweDhmYjExOWVhLCAweDMxYjk2MTI1LAorCTB4Y2U1YTI0YmUsIDB4ZWFmODZlOGMsIDB4N2ZhMDViZmQsIDB4NWVjYmY3YTMsIDB4NjliYjk0MGYsIDB4NzI4MWMzYWYsCisJMHg4NWI1NjQzNiwgMHgxOTc4MGMwNSwgMHhlODU1NDJjMywgMHhjODdkMWE3NywgMHg4M2VhMGI3NywgMHhmMDdiYjAwMiwKKwkweGQzNDE0OTdjLCAweGMyMTcyYWRhLCAweGJmN2EyNWFiLCAweGU0OTgxODNjLCAweGFhNmRmZTgyLCAweDMyZTkzOTM5LAorCTB4MGU1MDBiZDQsIDB4Y2Q1ZjI5YWIsIDB4NGFkNzk1Y2IsIDB4Y2U3MTBjNWUsIDB4ZjE0MTVhNmIsIDB4MTJiNTc5NDgsCisJMHgxNGRjNjAxZCwgMHhkNzhkOTg5MiwgMHhiZDQxYjIxYiwgMHhmYmMzNTY5YiwgMHhjMTdmMzg1OSwgMHhlZDZmNThmYiwKKwkweDQxNmZmN2M5LCAweGE0ZmQwM2JkLCAweGZkZjIzN2Y3LCAweGNmNzgzY2ZhLCAweDNiNTI3MjgzLCAweDVjMmJlYTg3LAorCTB4MDczYzMxMmQsIDB4Y2Y5MWIwNTMsIDB4NTVmYjA1NGYsIDB4ZWMzN2U2MmYsIDB4ZGRlNjhhN2UsIDB4ZGY1ZWQwMjksCisJMHhjMjhmOWMwYywgMHhkMTNjZTkxMywgMHhlNzRkYzk0OCwgMHg4MGJlMWYzOCwgMHgwZTA3NTZmNCwgMHhhNWYwNWYxOCwKKwkweDQ5MDlmOGYzLCAweGEzZmQ2MmMwLCAweDZkZmQ3ZmRiLCAweDllNTM1Y2ZjLCAweDA3ZDY4MTc3LCAweDI3Mjc3OWVhLAorCTB4ZmM0MmMzMjksIDB4ZTFmNjkyNzQsIDB4MDNiZTAxMGYsIDB4NzkzNzljNTYsIDB4OWNkZWNiM2MsIDB4YzMxNmI0MmYsCisJMHgxYjYzOThmYywgMHg2YWNmZWY0NCwgMHgxZTcxNDcxYywgMHhlMjlmOTliMywgMHhlNjhlYTYzYywgMHg1N2JiZTc3NiwKKwkweGVmZTg0M2RhLCAweDRjZWQ1NzdiLCAweGFmN2JlN2MzLCAweGY2ZjNkMmI0LCAweGI3MGY1YzRkLCAweGJmMjE2ODBmLAorCTB4MmFkNWUxZmIsIDB4NTUyZmYzYzMsIDB4MTNkMjY1YWIsIDB4NzRhYTM3ODcsIDB4ODY3ZTU3NmUsIDB4NmZlNDM3YzcsCisJMHhkZWM4NzZlMiwgMHhjM2RlYmNkNSwgMHg5YjdlZGM3NSwgMHg5MzZkY2NmMCwgMHg1ZmNlMWU3MCwgMHhlYWY5Y2ZjZiwKKwkweDg3NWY1YTdhLCAweDRkMGJiOWU2LCAweDllYTQ1YmYzLCAweGE5NzBmNWQ1LCAweGY1NDE0N2MwLCAweDhmNGZkYTVhLAorCTB4ZmFhNWJiZDQsIDB4NmZhMTE4N2MsIDB4OWQ5ZjcxNGIsIDB4MjRjM2QzZjYsIDB4OTFmNWE1NDcsIDB4NmU4ZTY1ZjEsCisJMHg0M2YyMGRiZiwgMHhlZmUyM2JmOCwgMHhjMzJhZmRiMiwgMHg0NWY0OGQ3NSwgMHg2NzhhMjRkYiwgMHhmMjFlZjljMywKKwkweDNlNDkzNzQ3LCAweGY4Mjg3YjhjLCAweDdiMjIxYWQ4LCAweGUzM2I5NDNjLCAweGY5OWU3MDNmLCAweGM4ZjBjYWM0LAorCTB4MDNkMjJiNDgsIDB4YjU4ZTU0ZjQsIDB4ODRiZjhmZjMsIDB4YjNkZjQ3ZTcsIDB4ZjAxMGU0NjEsIDB4NWZlMTJlNGYsCisJMHg1YWNlMTM4ZiwgMHhiMjdlZTNjZiwgMHg4Yzk5NWJkZSwgMHhjNGQ5OGRlNywgMHhmMjA3YTQzZSwgMHgzMDE2NjQ2YiwKKwkweDkyYTM4ZGU4LCAweGY5M2I5NmVmLCAweGZiNDZlMGZjLCAweDk2NmJhNzQ3LCAweGYzODc5ZDU2LCAweGViOGQ5MTZjLAorCTB4OTU3YWNmNDcsIDB4MGJjNzhiY2UsIDB4M2UwYmQ2MTgsIDB4YjcwYTc3YjQsIDB4MGNkNjQ4YWYsIDB4NzNiODUwZmMsCisJMHgwZWE4MzI0NSwgMHhjYmM0NDRiNiwgMHhlNjczODk1NCwgMHhhNzZmMWE4NSwgMHg1ZWU0OTc3MCwgMHhhZjQ3Njg2YiwKKwkweGRiNTdhZjQ3LCAweGI0MWJkZmNlLCAweGQ1YmRhNzkzLCAweGEzZmQ4ODVmLCAweGExYWQ3ZTcxLCAweGE3YWM4OGRlLAorCTB4ZDRiZGZiNDcsIDB4YTc1ZmYzOTMsIDB4ZmZiOWUyNTcsIDB4MGE2NTc3OWMsIDB4NjJmOWNmNzYsIDB4M2VlMzIwY2EsCisJMHg3ZWVhOWU4ZiwgMHgyZGY3ZWNlNiwgMHg1ZmMwNjdjYywgMHg5ODYzMWZjZSwgMHg4NmVmNDBjZiwgMHg0MGZmMjA1MSwKKwkweGI5MWExYmJmLCAweGVhMzBkNzNkLCAweDQ1OWE1NmEwLCAweGJkZTUxYmIwLCAweGNiYTNmODRjLCAweGJiZmRmMjI2LAorCTB4MTZmN2NjODYsIDB4Yzk0ZmZjYTEsIDB4NTgxZjg4OTIsIDB4NDlmNWEwMzAsIDB4ODNjZGZiMjQsIDB4NTlmOTAwZmIsCisJMHg3ODdjZmRmYywgMHhlMWIyZTUxZiwgMHhhMGE3MmUyOSwgMHg0ZmE4M2MyZiwgMHg5OGFmNTZjYSwgMHgyNTZiZTU0NCwKKwkweGIwZGZkNjBmLCAweDkyZWM5NzM2LCAweDUxOTkxYzgyLCAweGIyNDFlZDdlLCAweDBmMWEwYTkzLCAweDgzM2NhMjI2LAorCTB4N2I0NGFlZmMsIDB4ZDVhYzZjYTAsIDB4OTc1OGVhOGQsIDB4ZGZjZTVkNGIsIDB4OTk2MWU3MTUsIDB4Y2YwYzNkY2QsCisJMHg1ODc2ZTA3NywgMHhmNzk2ZjkzNCwgMHg3MmI3NjEzMywgMHhlMWNmMmNiOSwgMHgyNmVlZmI3MiwgMHgzZTc4NDcxNSwKKwkweGFkNzI0ZTcyLCAweDcyOGNiMWNiLCAweGM3MmRkNTljLCAweGQwNGY1NzdiLCAweDg3MGZhZTUwLCAweDk5YTM4YTI0LAorCTB4ZTUwMDdhODAsIDB4ZTcxZTgzN2MsIDB4ZjNkOGVkYzQsIDB4ZDk3M2YzOTUsIDB4YmYyMGE1OTksIDB4NzJlYTVmMzgsCisJMHhhNDc1Y2JhZSwgMHgyZDJiMzczYywgMHhlZTNmNjJiNywgMHhlMzRlZDJiYiwgMHhmNmQ1NzA5OCwgMHhmYWUzZWYwZiwKKwkweDI3NWZmNjhhLCAweDMyNjBmNTVjLCAweDg1M2NjN2VhLCAweDc4ZTk3OWM3LCAweDVjNzg1NTJkLCAweGFkN2U4ZjYwLAorCTB4M2RmNWEwNWMsIDB4ZjQ0NWZlOWYsIDB4ZDlhYjMzZTMsIDB4OGI2ZjEyNWYsIDB4YjVlZmYxZTcsIDB4YjlmZGYxMmEsCisJMHg5Yzg3YjNlNCwgMHg5ZTdjYTc5ZCwgMHg0YjlkNWNhZiwgMHhlNWY2ZjUzZSwgMHhlMjdhZTY5ZCwgMHhmNTQ3Njk5MSwKKwkweGYwMWRhZmFjLCAweGJlM2MwNjE4LCAweDhhNTlmMWI1LCAweGMyZjEzZTBmLCAweDg3NDhhOWMxLCAweGU3YzAxZGUyLAorCTB4OWQxYjVmYzgsIDB4NGU3YThjMmMsIDB4NTViY2QxMDksIDB4MzlkMzIwZDQsIDB4YjM4NGE2MDMsIDB4ZTUxYTcxNmYsCisJMHgxNTc1Yzc5OCwgMHgzZjEyNzY2ZiwgMHgwZDY0YmQxNSwgMHg4YmY3ODE0ZCwgMHg5YzMxN2RiNiwgMHg3NjE2NmFlMiwKKwkweGYwNWFkYzUyLCAweDA3MmY2MTA1LCAweDFjYTM4NjViLCAweGJlM2MyOTE0LCAweGZjMmY1MjJjLCAweGU3ZWRjNmRhLAorCTB4ZDNiMWVkYjYsIDB4MWQ1MjdjNzAsIDB4YThhMmRmYmYsIDB4NmFkNTc2ZmUsIDB4YzI3OGE3ZDgsIDB4NTBiYjUyYTYsCisJMHg4Mzc5ZjY4ZSwgMHhmZTc4YzdjMCwgMHhiYzY3ZmIxNywgMHgyYjhmNDE1NywgMHhmNWMwZGI2YiwgMHgxYWEzNTE0NCwKKwkweDhhMzI3YmMyLCAweDYzYjRiNmVhLCAweGM3ZDE3MWJjLCAweDk1N2ZmMjU2LCAweGYzYTQ5ZGQ3LCAweDZmMzYxMzE0LAorCTB4Nzk0YWZmMjIsIDB4OGZkYTZjYTMsIDB4NTlkZjExZWIsIDB4MThhZDg3MjcsIDB4NGE1MGQ4OTcsIDB4MWYwMDkwZmIsCisJMHhjNDVlYjgyNCwgMHhmOGMwZmU1MywgMHgzYmNkZTJjMywgMHg4NTAxMDViNywgMHhlZjNmMmZjNSwgMHhhYzcyZmQ0MiwKKwkweGYxMGJiZDc5LCAweDM1OWVmNTBlLCAweDNjNDdiYWRlLCAweDIyMjNmZDY3LCAweGMzODZmMzllLCAweDJmNGI2Zjc0LAorCTB4ZjBjNzljZjEsIDB4Yjc5NDEwMGYsIDB4NGU3OGU2NmQsIDB4ZWM4N2Q3NTYsIDB4YjY2N2U4NGIsIDB4NDdmZWNhM2YsCisJMHhlOWJlN2Q5NywgMHgxZTc4MzVlYiwgMHhlM2E1ZWRhMSwgMHgyNWRmYjA2YiwgMHgwZDcyZmI3ZiwgMHg1ZGIxODljNiwKKwkweGNhZjc5YTc2LCAweGUyODBmODVmLCAweGJlZjdmNWI3LCAweGM4N2YwOWIwLCAweGZlMjllNzg2LCAweGFiMTNmZGJkLAorCTB4ZGY2YjZiMTcsIDB4ZTMxZDM4NzksIDB4N2NiN2RiMDYsIDB4Y2NmZThjOTcsIDB4MjZhZjNiNzksIDB4YWRiY2VmN2YsCisJMHg5NDU4NTIxMywgMHg5MTRmNDM3OSwgMHgxMWU3NDM3ZiwgMHhiNzQ5MWY3ZiwgMHgyOTdiMGRiZCwgMHhkMDA0ZWQ5ZSwKKwkweDU3NjBmNTFkLCAweDI5N2Q2ZTljLCAweDg4ZjY3ZjhmLCAweGQxOGRkY2Y4LCAweDg4ZjQzYmNmLCAweGU1Yjg2ZGM3LAorCTB4ZmY1MTJiYzYsIDB4ZjI3YjcwMzcsIDB4ZWZiOTcxOWMsIDB4M2YyZjNkMDMsIDB4MTQ2ZTNhMGYsIDB4MzdmNWQ3ZjEsCisJMHhmNzJlMzU5YywgMHhmNDAxZmUwNCwgMHg3NGNkZDhiMiwgMHhmNjYxYmFmYywgMHhiY2M2OWZhZiwgMHhjNmJkM2U4NiwKKwkweDAzY2Y4NmU1LCAweDhhNzlmYTdmLCAweGE3M2U2Yzc3LCAweGE1ZThlNTFkLCAweDM0M2M1MGRmLCAweDA3OGE2ZmQyLAorCTB4ZDNhZmEzZTcsIDB4MTFjYTNjZjEsIDB4Y2UzYTczYjUsIDB4YWQzYjlkM2YsIDB4ZDE0ZmRmNzQsIDB4OWU0ODhmY2UsCisJMHg0N2JlYjdkYSwgMHhjZTI2NmE3ZSwgMHhhZWIzYjQzNSwgMHg5NzNmOGYxZiwgMHg5ZDZiNzhjNCwgMHhkMDU3OWUzYywKKwkweDNkN2RlMzAxLCAweGUyMmU3YTJlLCAweGViNWYzOTdhLCAweGM1YmRiZWYxLCAweDFmNmQ1ZWY5LCAweGUwMGZlZTI4LAorCTB4YjVhNWM4ZjEsIDB4YjNmMTEwN2YsIDB4NzI5Mzc0ZGQsIDB4Y2YwNzVlOTAsIDB4ZTNhZDQ3MWEsIDB4NzJmNDJkYzEsCisJMHhmNDdiMWM3NywgMHgzOGFlZWFiOCwgMHgyMWJhMDhmNiwgMHhlYTllNzEzZCwgMHgzODA3NTM4YSwgMHg0OWY5MDQ2ZCwKKwkweDJlNzY4YTNlLCAweDhmMmQ3ZGEyLCAweGEzNTc2ZjdmLCAweGUzZDYzNzlmLCAweGY0MTE3ZGRhLCAweDliZGJjN2Q2LAorCTB4N2I3MmU4YmMsIDB4NTBmYzcxYWUsIDB4NDI2NmQxM2MsIDB4YjU3YzRmNTIsIDB4YmY1ZDFmN2QsIDB4N2Y0YmI0Y2YsCisJMHhlYmJlZmFkNywgMHgxNDg5NTRiYywgMHg1ZWViMWU3OSwgMHg4NmQyY2JlNCwgMHhlY2NmZTQ4MywgMHhmMThiN2Y1YSwKKwkweDdiZmYwOWI2LCAweGM1MzIwYmRiLCAweGRmYTkyZjM5LCAweDUyM2RmYTRiLCAweGJkZTE5NDdmLCAweDdiZmE1MTJkLAorCTB4ZTdkODVkYmYsIDB4NjhmZTdjOGQsIDB4NzIxOWM5N2IsIDB4N2I2ZDNkNDAsIDB4OTc1ZjEzYjYsIDB4NzE0ODNjNmQsCisJMHhiZGQ2NmZkNiwgMHhlMjE4YjVhYywgMHgwOGZlNzAyNywgMHhmNmQzYzYxOSwgMHhhNGUxZWVlMiwgMHgzMGZkYzVjZiwKKwkweDg5NTRlZDkxLCAweGEyOWJjYTc2LCAweGYxYmU1M2I3LCAweGUyOWRhOWE0LCAweDc2ZTZiZDYwLCAweDYzYmRiYjljLAorCTB4YWM3NmVmOGEsIDB4YjczMzU4ZWYsIDB4Y2JkNThmMTMsIDB4ZjZkMTQzOTMsIDB4ZDhhYWVjNjksIDB4MjllNmFmZWYsCisJMHgwZjc0YTNjYywgMHg3YmRmOTM4ZSwgMHhjODYyYmIyMywgMHhjY2U3OWNlZSwgMHgxMTJlMzhmOSwgMHhiYWUyOGQ1MywKKwkweDM4ODgxNmFhLCAweDUzN2E5ZmIwLCAweGNlNTVkZTkxLCAweDc3ZjYxOGViLCAweGUwZDdlMjMxLCAweDAxZGQ1MWZmLAorCTB4OWFhYWY2ODYsIDB4YmY0MmNmZWEsIDB4ZDFkZWE0NDMsIDB4NjQyYzJkMTIsIDB4ZTczY2Y3YTAsIDB4ZWQwZjE0ZTQsCisJMHg5MGQzODQ4YiwgMHgwZjMyMDc5ZSwgMHg2N2VmNThhYiwgMHhjZmFiZmUxMSwgMHgwNTI0YjYxNCwgMHg1MDU5ZjdmYSwKKwkweDdhODAyZWYyLCAweDBjNWZmN2Q5LCAweGQ2N2IzYmYwLCAweDg3ODFjM2FmLCAweGE5YmY5MzY1LCAweDAwNzlkYWNjLAorCTB4MzVlYzJiZDcsIDB4Yzg0N2VkM2IsIDB4N2Y3NGVjYmIsIDB4M2IxYWY5NDgsIDB4ZDZlZjc3OGQsIDB4YmIyMzlmNmYsCisJMHhjNjU2ZDdmYiwgMHg1NTYwODdmNywgMHhiOTk2Zjc4MywgMHhiNzg3MWQ3OSwgMHgyZmU2YmI3ZSwgMHhjYmUzNTc2OCwKKwkweDFhZmU3ZWQwLCAweDg5ZWI4ZjI4LCAweGZlYjRiMThkLCAweDhlMjk3OGU5LCAweDdmY2I1MWVlLCAweGE4YTlhMWVkLAorCTB4Mzk2M2YyZDcsIDB4NGU2ZmU2M2YsIDB4N2Q0MTU1MDksIDB4NmUxYzQ5YWQsIDB4ZWU4MDM0ZGQsIDB4Yzk3ZTI4YWIsCisJMHg3YmE1ZjE0OSwgMHg4NjUyYmViNywgMHhlNmZiNTRmMywgMHg2MDMzMGM1OCwgMHhmYjA5YWZlZCwgMHg3ZWUyMzdmZiwKKwkweDYzZDUxYWFkLCAweDY0MmYzMzhjLCAweDJlNzhjNzhhLCAweDUzNjExOGE4LCAweDNmMjMxMzVjLCAweGZhMTFjOTA2LAorCTB4ZThlMzFhYjEsIDB4YzVkODExM2MsIDB4YTg0ZTdhYTYsIDB4ODk3ODBmOWQsIDB4ZjhmZDgzOGYsIDB4M2Y3MGFhMzksCisJMHhlNTkxMDdkNCwgMHg3NmZkZmNmNCwgMHhkY2JkOGU3ZSwgMHhiYTM5ZWYwYSwgMHg5ZDZiOTdjYiwgMHhlZWFlMWM3OSwKKwkweDMzNDlmNWM3LCAweGU3NDRmZjk1LCAweGIzZGY5MTczLCAweDIzZmU1ZTVlLCAweDdhYWVkZWJkLCAweGUyNjVmYmY4LAorCTB4ZmU0ODliN2UsIDB4NTdhNWQ0M2QsIDB4YjQ3MTdhZmUsIDB4ZjRhMjViZmIsIDB4MmZkZjllOWYsIDB4ZWQwNWEwYjEsCisJMHhiYTc2MmQ5NiwgMHg2N2VmMGJiNywgMHhkYjBlNzNjMCwgMHg1NWZmYmUzNCwgMHhmZGQzMGFlMiwgMHgzZTg0M2IzOSwKKwkweGQzMDk4OTJlLCAweDQ0ZmQzZTdkLCAweGMyM2NiMDNmLCAweDIyZjJkNmNjLCAweDE1ZjRiZGQyLCAweGIzZjhjMzNiLAorCTB4M2U5Y2Q3ZDIsIDB4YjZlOTc3YTQsIDB4OTU3ZjViNmYsIDB4YjE4YmYxODUsIDB4N2QyYmQ3ZTQsIDB4MWYxMTdmZWQsCisJMHhkM2MzNWE5NCwgMHgyZGJjZmVlOSwgMHhlN2Y3ODY1NiwgMHgzYjc5NmRiNSwgMHg0ZGI1ZTUxZCwgMHg5YzI3YTcwZCwKKwkweGI0YWY1ZjY1LCAweDU3YmU2YWRlLCAweDU4ZTM4YzQwLCAweGJjNDJlODY1LCAweGFmM2Y0MTc3LCAweDllOGJkNDViLAorCTB4ZGI4NjMyYjksIDB4OWYxOGY2ZDcsIDB4ZGRlNDg2MzUsIDB4YjFkNDRmN2MsIDB4YzY0MWM2Y2EsIDB4OWU0NWZiZjMsCisJMHg3ZmIxN2FlOCwgMHg5ZDhmZmE4YywgMHgzOGY0Nzc0MywgMHgyNjNmZGFmNywgMHhlNjk5ZWQwOSwgMHg5NjQwNzQ2NCwKKwkweGZhOGUzZDgxLCAweGU0ZWVhOGJjLCAweDdjMWZmNDMwLCAweDZmZGZhMzE2LCAweGY5YzM4OWUwLCAweDczYWQzM2U4LAorCTB4Y2ZiZmVhMTgsIDB4MTk4NzNiZDIsIDB4OTUyMzk5ZTcsIDB4OTJhMjhmMzYsIDB4OGVkMjg3NWYsIDB4ZmFmMzI3YjUsCisJMHhiNTM3OGMzMSwgMHhmN2E2OGI0ZiwgMHgxMmM0YzU4NiwgMHg4ZTFlOGFmZSwgMHg3YThlN2E4ZCwgMHhhYmU3MGM0YywKKwkweDUzMWY2ODM0LCAweDQzZTUxNzZjLCAweDJkMzNmNzZmLCAweDMxYjg3YTQ0LCAweDQ5ZWJjM2M2LCAweGJjZjg2OTBiLAorCTB4MjBmYjZlYjgsIDB4OTUwYTFlMjMsIDB4NzIwNzJhNmEsIDB4NjQyY2Y4NGEsIDB4ODMyY2I1MmIsIDB4MmJkYmQ2ZmUsCisJMHgyOGYwZWY5YywgMHhmMjgxM2Y3NCwgMHg1NWY4YmE3ZiwgMHgzOTMzYTZlZSwgMHg1MThlMzE5MSwgMHg1YzY2MTRlMCwKKwkweGU3ZWIzM2YyLCAweDZmZDUxNDQ4LCAweGNjNjlmYzQzLCAweDY0NjQ1NmVmLCAweGY3OTI2YTk1LCAweGE5NGY1NjE4LAorCTB4N2UyZWNjMDMsIDB4NDMwNTVhNWYsIDB4ZWM0NDc5M2QsIDB4MGMxZmEzZWYsIDB4M2Q3YzZlZDMsIDB4MzgzZjdhNDgsCisJMHgzMjhiYjE4MCwgMHg0ZjA5YmVmMCwgMHhiZjgwZGI5YywgMHgzZWIzNzA2YiwgMHgyYjY5ZTMwOSwgMHg1MzE3ZDcxOCwKKwkweDQ4OGY2OGRjLCAweDAzM2IwMGMxLCAweDU5NTU1NGZjLCAweDAzZGY4ODM3LCAweDJmMTg3Y2MyLCAweGY0MmMyNjQ5LAorCTB4ZjM3ZWU1Y2YsIDB4ODA4M2I0M2IsIDB4ODQzZGY5NGYsIDB4MTU1MGIxNTcsIDB4ODZjMzE4YTAsIDB4OWUzYWVmYzksCisJMHg5NmYzZmJmMSwgMHhlYjhjY2M3ZCwgMHgwNzQxMTI4ZiwgMHg3YTRkZGMxNiwgMHg3ZmJhYzFjYywgMHg1YWEzMDA5ZCwKKwkweDE1NWI3ZDQ1LCAweGRjMWNiN2Y3LCAweDU5Yjg3MzlmLCAweDU4YzNlZDE4LCAweDQyYzcwYjA3LCAweDFjYWExOGVhLAorCTB4MmJiZmNhMzMsIDB4NWYwMzYwMGIsIDB4ZjM5YWM3YmEsIDB4ZjQwMmU1MjMsIDB4ZjViYjQ0NWEsIDB4ZjdhODNmODQsCisJMHhiZjdhODhhYiwgMHhhYmY3YTg4YSwgMHhlM2FiZDViMywgMHgyODM2ZGNhOSwgMHg1OGE1ZWYwMywgMHhmMDJmNTk1YywKKwkweDA5YjNkYmM2LCAweDg2N2UwMWJjLCAweGNjN2YzZGUwLCAweGZiMTVlMzEyLCAweDE4ZDc4NGU2LCAweDk2MmIxYmQxLAorCTB4OGU2ZWJhMDcsIDB4ZmE3ZTIwYzksIDB4NGVhZWRjNTksIDB4ODk2Njk3OGMsIDB4YzNkNzBjMzUsIDB4YmVmZDI0OGIsCisJMHgxODc3ZTY0ZiwgMHgxYjZlNjNkZSwgMHhhMjIzZTFjOSwgMHhjZjAyY2Q5ZCwgMHg1NWJmNzQ4YiwgMHhiMjc2ZjI4ZiwKKwkweGI3OTQ3YWJmLCAweDI2M2U1NmY3LCAweDZmNjc3OTdhLCAweGRlOGQ4OWZkLCAweGVhNWVmODlmLCAweDVhOGQ4ZWFmLAorCTB4NGJkNTBmZmYsIDB4ZjQ3ZGFmNjUsIDB4NzZlZmVlMGUsIDB4YTAzNzI3ZTksIDB4NmU2NzZjZGUsIDB4MWE1NGZkNDYsCisJMHgxNmI3ZmFkZiwgMHg0Y2VkYzI3YSwgMHhkZTk5OWE1YiwgMHhjMGRmYzgzMSwgMHg5YTE3MzE2ZiwgMHg0OWYyNDc5ZiwKKwkweGY0NzJmZTE0LCAweDI5ZGY3MTg1LCAweDYxZjNiYmRhLCAweGU3NGQ1ZTdlLCAweGJlMzE1YzgzLCAweDlmN2NiNTg5LAorCTB4ZGM3OWVlZmMsIDB4NDZjYjA3OGYsIDB4MjVkZmU2MWYsIDB4ZTFhZWVmZjIsIDB4MGZkZGUzZjYsIDB4MWIwZmI0Y2IsCisJMHhjMWQ1YmY3OSwgMHhlMWVmY2RmZiwgMHg4MDFmMDdiOCwgMHg1ZjMzZGRiYywgMHhhMjMzODUwYSwgMHhkZWM1ZGJkZCwKKwkweDY3N2E4NzhmLCAweGRlNDRmZTg4LCAweDllNjAxNTgzLCAweDY4ZTRjYjQ5LCAweGJlNzE2MGY3LCAweDQ1ZTFjZmQ0LAorCTB4OGIzMTdmZGUsIDB4NjZmZGM1ZjksIDB4MzE1OWU3ZTYsIDB4MjJkYmUyNmUsIDB4MGY1NWE0MjUsIDB4ODJjNzllZWQsCisJMHhkMWVmODAyYiwgMHhjN2JlMDRmZSwgMHg5YzU5MmZmZCwgMHg4ZDJlNjZjNywgMHg5YWRmZDdjNywgMHhhNzdmZDI2MCwKKwkweDcwZTI3ODg2LCAweDhiYWY2NmJlLCAweDdjZmU2ZWU3LCAweDE0OWViNWVlLCAweGU1NDU3OWUzLCAweDFlZTlhYzc0LAorCTB4OWJkNTJhYTAsIDB4M2Q0ZGZhOGEsIDB4ODBmMzNkN2QsIDB4MDdhNzZhMWMsIDB4MWYyMThmMzEsIDB4N2UxMjU2ZWMsCisJMHgzZDI0ZjMwYywgMHg1MDg0YWE5NSwgMHgzZjZlMmEyZiwgMHgzN2JiNDdjYiwgMHg1ZWIzZjM5ZSwgMHhhZWJjNGI1ZSwKKwkweDE3N2NjZWNiLCAweGU2NDYxZGZlLCAweDVkY2ZmZjgxLCAweGRmZjNhMWUxLCAweGE3ZmMzOTU3LCAweDVkOTVmZTcxLAorCTB4YTM4MGRlMzksIDB4YjcwNDNmMjcsIDB4ZTE1NzcxZjIsIDB4OGU3YTMzYjgsIDB4N2FmMzRhYTcsIDB4MGViZWRlYzksCisJMHhjYmYyNDVlNiwgMHgzZmQ4NmQ3OSwgMHhjOGY5ZWFkOSwgMHhhZGZiZmQ4MywgMHhkMzBmZDBjYSwgMHgyM2RlM2YxMywKKwkweDE1M2ZjODIxLCAweDI0NzE0ZmVhLCAweGMxOTRkYzcyLCAweGJjNzJmZWQ4LCAweGZmZjQxNDZmLCAweGU4YmY3MTMyLAorCTB4NTIyNjRhYTIsIDB4MDhiNzU3MWUsIDB4MzRhNTFmZWYsIDB4OTEzZWE0NDcsIDB4OGY3MmE2NGUsIDB4OTc0YTdiOGEsCisJMHhkNTI5N2E1NCwgMHg1NmYzNmJmMSwgMHhiNjk4M2RkMywgMHgzNmZiNzkwYiwgMHhhMjVmYTBiNywgMHg0MDJmZTA0NSwKKwkweGI1MmQ5N2Y2LCAweGVkMWRmNjgyLCAweGRlMzA4YWVlLCAweDYwZDJjNzI3LCAweGI5NjFjMWRlLCAweDlhYmYwOWFiLAorCTB4MTNiZjkxOWIsIDB4NDU2YzEzY2EsIDB4NjZiNTUyMTgsIDB4NzE0OWQxMGEsIDB4Yzg3Y2IwNTcsIDB4MDYwNDc1NGYsCisJMHhlMzdkYTJjNywgMHg2OTg3ZGYzMSwgMHhkNjcxMWQ0ZCwgMHhmOGJiMzFmYiwgMHhmYmM3MTM2ZCwgMHhiN2U3MTI2MywKKwkweGE2M2ZiYzQ4LCAweDZlMzA3YjM2LCAweGJiNmJiMWUyLCAweGJjMjJhYmVlLCAweGUzODg3MmMzLCAweDdlZjkzZmZkLAorCTB4MzdiYzRmNmUsIDB4YzA2OTliNGYsIDB4MzI3YjMzYmIsIDB4MDI2N2ZkZTEsIDB4NWUwNTRiY2YsIDB4YWExZDA0YWIsCisJMHhjNGFiM2UwNCwgMHhlMjU1YWZiZCwgMHg4MTJhZGNkZSwgMHgzYmM0MmFkZiwgMHg3Yjg4OGZhNCwgMHgzZDIzMTc3YiwKKwkweGVmMTE5NTIwLCAweGExZDZiZmMwLCAweDdiNDMyNjQxLCAweDUyMGYwZjdjLCAweGI3NWJlMDg3LCAweGIyYTRmYzg1LAorCTB4YmM0M2VmYzMsIDB4ZGUzOTEzNWIsIDB4MDNhMDBlNmQsIDB4ZGRlMDM1ZjEsIDB4YzI0MWY5ODMsIDB4NzhlMGVhYTcsCisJMHgwZTljZjI4NiwgMHhlZjEwNTYwMiwgMHhhNzM5ZjEyMywgMHhiNmZkZTAwNywgMHg4N2Q0MjRkOCwgMHhkNjc4NGM2MywKKwkweDFmOWZjNzEyLCAweGYzZTI5ZmRlLCAweGYzOTBhMjViLCAweDZhMjVmYzQ4LCAweDVkNjA1ZWZjLCAweDhmYjM3YmJlLAorCTB4NzY1YzQ0YWIsIDB4MTE5N2I4OTUsIDB4Y2Q3Njg4ZjEsIDB4YmIwZmMwMmEsIDB4M2Y5M2UzOTgsIDB4MmY2MDIyMWYsCisJMHhmZDYyNDlhNSwgMHhjMDc0MDU1ZiwgMHgzZDg1MjdmYywgMHg3NGM2Nzg4NCwgMHhiNzVmMmM2NywgMHg3NjJhNWEyNCwKKwkweDA0YTc4OGFiLCAweDRiMGZkZjdlLCAweDZjYjRiMjBjLCAweGYxODA0M2M2LCAweDFlNjQxYTk3LCAweGUxZmRmNTg0LAorCTB4YzhmZjMzNWEsIDB4N2VlMjI1NmUsIDB4Yzg5M2NmNDksIDB4NTZkZjJiNmYsIDB4MmY3ZmI4MmQsIDB4NzRkZWJmY2YsCisJMHhlNjllNWJhZSwgMHhmZTEwZjc4YiwgMHgzNWRhMTIwMywgMHhiODcyMTMzZiwgMHhmYTg1ZjkwMiwgMHg4YmMzZDdjNywKKwkweDE1MmMxZjA1LCAweDIyM2YwNmY3LCAweDIxMzFlN2Y4LCAweDdjZWI4ZmNmLCAweDQ4ZTdlNWUzLCAweGYxZTY0Zjk2LAorCTB4MTY5OTg5OGUsIDB4OTg2MmJmNzEsIDB4ZTMwOWUzMTksIDB4ODM0Y2Y1YmQsIDB4YzZkYWQxN2UsIDB4OWZkZDI5NDMsCisJMHg5MmI2M2VjOSwgMHg2NTBlYzZkYywgMHhmOGFmZTQzZSwgMHhmMTBjMWY4ZiwgMHg3ZGZkNzBmYiwgMHhkNzhhMWVkMSwKKwkweGViMWRiZmVmLCAweDBlODNiZjg5LCAweDcxMTU4N2I0LCAweGQ3Y2NhNGNmLCAweGVmNTFjZDkzLCAweGVlZjJhZDhkLAorCTB4YTY1ZmExYjEsIDB4YmVlY2ZlYjcsIDB4NzNmMTFiNjksIDB4MWU0NGU1ZGUsIDB4YmZlMDI3ZDYsIDB4OGVjMDM2NjMsCisJMHhjMTU3NTgxYSwgMHhjODFiZDYyZiwgMHhhNTdhOGM1ZSwgMHhlYmZjNDljNiwgMHgxYmU3ZmU4MCwgMHgxN2I2MjRmOCwKKwkweGM3NTRjZWZmLCAweDVmNTAxYmI1LCAweDI0MDY4MGJjLCAweDZhMmZjMTMwLCAweGNmMTFkOTA2LCAweGZhMGY3MzgwLAorCTB4ZmVhOTU2YjEsIDB4YWMyZjM4YmUsIDB4OGZlZThmOGEsIDB4ZGYyYzY1ZmIsIDB4NWQ2NTcwODcsIDB4YWMyYmYyNmEsCisJMHg5ZWY0N2Q1NCwgMHhlZjU5YWM3YiwgMHg0NGYzMTRhYywgMHg5Y2IzNDRjMiwgMHg0ZmMyZjNlOCwgMHgzOTU3N2Q0NSwKKwkweDVmYjEzYjAyLCAweDkyMjdhN2M5LCAweDFjZGUyNzNjLCAweDUyYTg5ZTdkLCAweGY3ZGUyMGI1LCAweGNiOGMzNTUxLAorCTB4ZTM1NzMwNzcsIDB4ZmQwZjczZjYsIDB4ZTQ5ZjY4YzMsIDB4M2FmMDYwNTQsIDB4N2NlOTgzZjQsIDB4N2Q3MTkwYjYsCisJMHhhZWRjNjQxNywgMHgwNGY1YzdkNCwgMHhlNzE1YmRmMiwgMHgzZmYxMzcwMywgMHhjYjA4MDdjZSwgMHhkZWZjNmExNywKKwkweGU0MmRiYmUzLCAweGU0MjI1ODg3LCAweDY3MjE1MWVkLCAweGZkN2M4NWNiLCAweDhhY2JlNTFjLCAweDI5N2I1OGY3LAorCTB4YWI5MDg1ZmQsIDB4OTA4NzI4OTUsIDB4ZTBjZDhmMWUsIDB4M2ZiOGJjZjYsIDB4MmNjZjVmNGMsIDB4ZmJhMDhkYjQsCisJMHgxNjFjYWIyMiwgMHg0Zjk0MTc5YSwgMHhhZTA3MjFhYywgMHg3NjhmNzYwZiwgMHg3NjQ3ZmZhMywgMHg0ZTAzYjk2NiwKKwkweGZiYTJjZmNjLCAweDJjZjhhNWRjLCAweDM3Y2RmMjM3LCAweDljMTc1OWNlLCAweGM4MTYxZTJkLCAweDJiMTZmNzRmLAorCTB4ZWE0YmY3MmEsIDB4ODk1N2M4ZjcsIDB4Zjc1NDA4ZmIsIDB4ZDVmZDBjY2QsIDB4ZDg1NjI2NGYsIDB4OTYzNWRlMjksCisJMHhlNGQ3ODdjNywgMHg4MWRlMTM2NiwgMHg4NmIxOWQxZSwgMHhiNGNhNWE3NSwgMHhmYmVlYmFlYiwgMHhlYzlmZWFjMywKKwkweGVmODM1ZWU1LCAweDY5NjBkZTg1LCAweDQxYTE3NjQxLCAweGZiODhkNDRmLCAweGM4Mjc5OTI0LCAweGM1ZjQxODg2LAorCTB4MzEyNjhiYzIsIDB4ZDRmNWVmZjQsIDB4Y2RlOGJkMTMsIDB4MmU2ZjVjZjUsIDB4NGRlYmEyOTIsIDB4ZjVkNzhlZGQsCisJMHhkMTdlYTQ2NiwgMHg0YzE3YzVkMywgMHg1NGJmOWQzNiwgMHg3YTQ2NWUxZCwgMHgzZjc0NDg2NywgMHhjYWMzYjI0MiwKKwkweGQ3OTkyZmY3LCAweDMzZDE5YjliLCAweGVjOTVmMDFmLCAweGVkMGJlMDMwLCAweGYxNmZkZDIxLCAweDg5ZTMyOGUzLAorCTB4YWU0NzkzZDQsIDB4MDBkN2U3ZDMsIDB4NGIzNDNiZGQsIDB4ZmEzOTNjZjMsIDB4NzlhYmYzYWMsIDB4ZmQzZmM4NWUsCisJMHg3OTRmY2QwOCwgMHg1YTUzNDdhNywgMHhkOTJkNzM1MCwgMHg2OTc3MGMyMywgMHgxYzJlZjcwYywgMHgwYmJmN2Q1ZSwKKwkweDQ2Yjg3YmU5LCAweDU2YWY5ZmVjLCAweDc0YmYxODQzLCAweDE5NzE2NmI4LCAweDBmNzZkNWMxLCAweDJmZGM2NmQyLAorCTB4M2RlMTc0MWUsIDB4YzhkNmIzNGQsIDB4MjQ3ZTlmYjQsIDB4ZjE0ZTk4MjYsIDB4Mzk5ZmRmOWYsIDB4NjNlMjFiMjMsCisJMHg5YTVkYWMxNiwgMHg2YjM4ZmM4ZSwgMHgzNzNhNTJkZCwgMHgzN2MxMjQ3YiwgMHg1OTgwNmZkOCwgMHg3OWVjODc5NiwKKwkweGJjYzZmZWZkLCAweGI0M2VhZDY3LCAweGRiZTM3YmM3LCAweGZkZDFkNWJjLCAweDI3Zjg1NTNkLCAweDc3OTg1M2FlLAorCTB4NzY0M2FlMDgsIDB4ODY3NGM2YmIsIDB4ZmM4ZTBmODEsIDB4ODJlYjRlYzIsIDB4OGVkODJkMmEsIDB4NThiYWQ1NzAsCisJMHgyNTU1ODM3YywgMHgyODBmYmY0NCwgMHgwZmI1NzFkNSwgMHhmMGVhOTRlOSwgMHg3MzI5OGI1ZCwgMHg0ZjdlZDAyNCwKKwkweGRiYzQ3MmVmLCAweDNiNWY0NTZmLCAweDJkM2ViYmVlLCAweDNhMDI0NWVlLCAweGJiZjI2NGRkLCAweDU2ZDc3ZGYyLAorCTB4YjY2MzQ3ZTEsIDB4NDQ2M2YyNWUsIDB4N2M5N2E3YmUsIDB4NjI5MzhmMTcsIDB4N2ZmOWU4ZWUsIDB4Njg2OWZmYjcsCisJMHgzMTVkZjU4ZiwgMHhlNmI0YmY4ZSwgMHhlODRmOTJmOCwgMHhhMTFmNzk4OSwgMHhjZjhiYzQ1MCwgMHg1YTFiMTc1YSwKKwkweDY2Y2U0NTE4LCAweGIzYzdmMzg5LCAweGNlOTk3ZWM0LCAweGViZDc4NThmLCAweGUzZTczOWY2LCAweDVlOTczZTQ4LAorCTB4ZmFmODg0YjgsIDB4Y2QyYTdkY2IsIDB4YWZjMDY1NmIsIDB4MTdhNWVmYTgsIDB4NTA3ZGQzNDYsIDB4ZTJiYjllMGIsCisJMHhmYzBiOGM3MSwgMHhmOTRjYmY2YSwgMHhjNGVkYTcyNSwgMHhmNTNmZWRjNywgMHhjZTgyMzlkMiwgMHg5ZGY0YTlkZiwKKwkweDVkZjZhZjg4LCAweGRhMDFlNzRkLCAweDNhZDNmZGM1LCAweDdjOWNkMjllLCAweGMxYzZiYzNkLCAweGU5ZGU1MGY1LAorCTB4NzQzYzkxOWYsIDB4YTY2ODU3ZjEsIDB4Nzc5ZTcyODYsIDB4NWU1Y2U3ZmEsIDB4MzFkOWZlZjAsIDB4ZGVlYmVjMzgsCisJMHhlMGExNzcxYywgMHgyY2Q3ODA2YiwgMHgyMTY5MzQ5ZiwgMHhjMmRmOWJkNCwgMHgwZDhkOGFlNSwgMHg3YjFmOTE5NiwKKwkweGQxZjdhYzZkLCAweGM2YmZmMjI4LCAweGI1ZjkzMWUxLCAweGYzOTY1YmYyLCAweDRjYWVjMGY3LCAweGNjOTljNDM0LAorCTB4Yzg3YmRmMTIsIDB4NjVlZmNkM2YsIDB4NGIyMGVlNjUsIDB4ZmExMjc5NDUsIDB4Y2MwZTViYjAsIDB4ZGJiNzcyZjcsCisJMHhkM2Q0ZTNjZCwgMHg3OWM2YmIxNywgMHhkNmZkNjk4NSwgMHhlOGFiY2UzZCwgMHg1M2IwOWU3OSwgMHgxMzQ2NWJmMiwKKwkweDVmOWUzZGRjLCAweDllMzY4ZThkLCAweGE1OGM3MWVlLCAweGQxZjFlZGYyLCAweGI0NTBmZmRiLCAweGMwNTk1YWRmLAorCTB4OGI0ZmEwN2MsIDB4NzliZmZkYzQsIDB4ZDQzNGZiYTEsIDB4ZTNhYjc5MWYsIDB4YjhjMzI0MTMsIDB4NGQ4YTZiZjIsCisJMHgzNTc5NGZmMSwgMHg1ZmRmNzRiOSwgMHhlZDVjZWFmZSwgMHg3NmJjODM1ZSwgMHgzNmNkODVkMSwgMHg0NzQzZTVkMSwKKwkweGQ1MzJlODgwLCAweDQwZTNkZmUxLCAweGYwYTE3Y2I5LCAweDU4M2Q0ZjgxLCAweDExZDNhNzJmLCAweDgyYmMzODJkLAorCTB4YWU3ZGRiZjQsIDB4M2VhN2U3NjgsIDB4OGQ1M2E0OGMsIDB4MWZhYzEzYTAsIDB4ZDI3NDBjYjIsIDB4N2VmOTEzZTksCisJMHgwN2QyZmFlYiwgMHg4YmZkYzUzZSwgMHg0NWVkZjhhNywgMHgwOGIxZWJiZCwgMHhjNzQ0NjVmYSwgMHhmMzgzYTc1ZiwKKwkweDBmZDgyYjZiLCAweGRmYzJmMzgxLCAweGJiZjhhNjY1LCAweGU4MjdmMTVlLCAweDdmNDdlM2FkLCAweDUxZGZmNjBlLAorCTB4OTQ0ZWZiOTQsIDB4MWY1ODUxY2QsIDB4ZTE3Mzg3ZTcsIDB4YzE3ZGJiYWQsIDB4OGZhMmUzMGYsIDB4ZjNhOWM1MjcsCisJMHgwNDE2N2NjMywgMHg3MWFhM2UwMSwgMHhmMWY3YTNmYiwgMHhiNjgyYzQzYywgMHg5NzRmMThmMywgMHhmMTM2MmU5YywKKwkweDAxNzM4YTQzLCAweGZmNDE1Mzk3LCAweDIxMWU3YmEzLCAweGM1MGQ2ZWJlLCAweGJkMTllZDdhLCAweGQ5YzUyNzhmLAorCTB4MTg1YzFmMGIsIDB4ZmZiMzQzNjQsIDB4MTFjMWYxZWYsIDB4MjlmODM3Y2QsIDB4ZGU2MDQ3OWMsIDB4ZjBiZDc5YzIsCisJMHgxYjg2YzdmOSwgMHgxOGVhOTdmYiwgMHg3OWM0ZTY5NywgMHhmNmZjZmFhOSwgMHhiZGUzODNiNywgMHgxZTFkNzBmYiwKKwkweGFiN2IyNzVjLCAweDhlMjU0ODYwLCAweGJmN2M2MGMwLCAweDM3ZjRmNWM4LCAweDE0NWJkZmU4LCAweDY4ZjBjNGZmLAorCTB4Y2FlMmY0NzYsIDB4ZGZhMDk3N2QsIDB4OTliMmFhYjUsIDB4YzVkODU1NTIsIDB4MGNlMmVkMGMsIDB4Njg4ZjVkZmUsCisJMHgyYjVlMDVmNywgMHhjYWUyZWJmNCwgMHhiNWI3ZWU2NiwgMHg3MGRiOTkwNSwgMHgzMjNiMDBjZiwgMHg4YWQ4ZmM5MiwKKwkweDY5Y2Y2Y2MzLCAweDdlOGRjMDZhLCAweDgzZGM0ZDczLCAweDY1ODEyYWEwLCAweDY3ZTg1OTE5LCAweDFhMGNjYzRhLAorCTB4OTM4ZDc3ZjAsIDB4NGYyY2Q3ZWYsIDB4ZmRjNmUzZGQsIDB4OGZkNDJiMTAsIDB4OWE1YjMzZmUsIDB4NzdlNGNhNzIsCisJMHhlNTk5NWQ3YiwgMHhkN2U5M2EwNCwgMHg3YWIwYzc0NCwgMHgxZjkxMjQ5ZiwgMHgxZjg0NTRmMiwgMHgxZmE5OTRmMiwKKwkweDdkYTZjZDg5LCAweDI4YmM0ODhhLCAweDI4MWRmZTM2LCAweGIzZmYwOTg1LCAweDlkZmU4N2MwLCAweDNlNmVhNWE0LAorCTB4OGZjMjk1Y2UsIDB4YWZmYTA0ZmQsIDB4MzYzYjAyMmYsIDB4YzFmNjQ1ZDYsIDB4N2MyYzBiOTIsIDB4ZTg1MzY4N2QsCisJMHgzYzZiMmJiZSwgMHhmMWM1YWYyZiwgMHhmZjcxZDg3MSwgMHg1OWY1YzY0MywgMHhkZTI3NjA5OCwgMHhkNWQzMjYxMCwKKwkweGYxYzIxMjhiLCAweGRjMjEyM2NjLCAweGUwOTc4NTg3LCAweDVjNjNhMzdhLCAweGZjZjgwM2NiLCAweGQ3MjA3Yjc5LAorCTB4YTZmZjc4MDksIDB4MDkwMWYzNmYsIDB4ODFmYzMzZjcsIDB4MzVjZjExOGIsIDB4MDNkMzMwNzIsIDB4NzcyZDdmZTUsCisJMHg3NGI5NjI2NiwgMHg4MTM4ZmFjOCwgMHgzOWUwMTdhNywgMHg5ZjYxODA4NywgMHhkY2Q3ZGY5NCwgMHhlMTNkY2IwZCwKKwkweDExMmJlNjBiLCAweDVmZGY4NmZiLCAweGM3YjdjYzZjLCAweDFmYjAyYWY4LCAweDRhY2JkZjkxLCAweGZkYTI0MmZjLAorCTB4MDc0Y2ZjNDEsIDB4MzRmZGZmOWYsIDB4ZjI3NzJmM2YsIDB4MDdmMTA1NzUsIDB4NmUzZWQ3ZjIsIDB4M2M1MjlkM2YsCisJMHg4N2VmYjg3MSwgMHhiNGRkNzlkOCwgMHhiY2YzNjNlZiwgMHgxMTRmNjg2ZSwgMHhlMDVhZDhlYiwgMHg0ZmIwYzU1NywKKwkweGIzZTJhMTc3LCAweDU0NWQzZjIwLCAweGZkOGRjZjBkLCAweDI3Mjc2MjhkLCAweGYyZGFlODM4LCAweGRlYmQ3NmE4LAorCTB4ODNhZjNjM2YsIDB4NGY0Zjk0ZjgsIDB4OTIyNDdiMjIsIDB4ZWQ3NDc2MmYsIDB4NjllZmYwMjcsIDB4OWUzM2ExZGQsCisJMHhmMWMzODhiMiwgMHhmYWQxZmY0YywgMHhmZGFlOTNlZSwgMHg3NjFjNDVhYSwgMHg1ZWZjYTg3MywgMHg2OWZlM2ZiZSwKKwkweDk5YzUxYzZlLCAweGEzYjhmZGVhLCAweGRhMzM2OTY5LCAweGY1MzQ3N2M1LCAweGJjZjg4OTlkLCAweDNmZTJlMGEzLAorCTB4ZWQ0M2JhNjMsIDB4ZmE4YjEzZGMsIDB4Y2U4OTdlZTIsIDB4YzFmOWRkOTcsIDB4YTQyYzZhZWIsIDB4NDc1ZmRmNWIsCisJMHgyZjNjMWZmNywgMHhlYjNhNzFlNCwgMHgwMWZlOTE1NCwgMHg3ZWY4ZDZlNiwgMHg0N2RmODg1NywgMHhhZTAyYmNjNSwKKwkweDcxNWZkMTU3LCAweGRiNzQzODc3LCAweGYzZGQwMDBkLCAweDM0MDZlODdhLCAweGViZWZhNmY3LCAweDQzZDUwMzdjLAorCTB4ODkzZGRlYTAsIDB4ZjdmNDk0ZjYsIDB4NzI2ZmJkMWEsIDB4MzVkN2JmOTgsIDB4ZTM0NmM1N2UsIDB4OGRhZjFlZTksCisJMHgwZjhmYWZjNiwgMHhlZmY4NGE3YSwgMHhmN2I4OGZjMiwgMHhmOGM3Yzc0ZCwgMHg3N2RjN2M5OSwgMHgxZDc1ZGVjNCwKKwkweGUwM2FjYjNiLCAweDNmYjBkYjBlLCAweGRlM2U3OGYzLCAweDdjZmM0ODlmLCAweDFmYTA1OTg1LCAweGY2ZmE3NDVmLAorCTB4ZTMzZTNmMjAsIDB4YmQ0NWVkZjQsIDB4NGNlYjYyNTcsIDB4YmM5MjA2NTcsIDB4Y2JjZjg1YmMsIDB4YzkwNWMwZTQsCisJMHgwMzEzZmUzMCwgMHgyMTI3MTcwMiwgMHg5Y2ZiOWExZSwgMHhjMDdmYmQ5NywgMHg4MGZiZjljZSwgMHg4MWY3ZjM5ZCwKKwkweDViYWY5ZDBjLCAweGVjZDdjODljLCAweDUzOGQyMjc0LCAweDkyYzc3ZWZmLCAweGJiMWY4N2FkLCAweGM0ZmJmODFkLAorCTB4YmIzZWZjZGIsIDB4ZTM3M2Q5NTIsIDB4OTY5N2U0NDMsIDB4M2UyZTMxOTksIDB4ZmMyMDNkMzIsIDB4N2M1ZDJkMGMsCisJMHg0MzNiYzdjOCwgMHhhMzMyZjJlMSwgMHhjMWNlOTYyMSwgMHg5YjJmOThjYywgMHgzMTlmZGJlZSwgMHgzMmMzYzc5ZiwKKwkweGFkZjg3OWE1LCAweDIyYzI3NWE2LCAweGIzZDJkNzExLCAweDQ0ODNmNDFlLCAweGZlNzMzM2Q2LCAweDY1MTdiYTA0LAorCTB4NDcxZWU2OWIsIDB4OWMzNTkxN2UsIDB4ZjQ0ZTY2Y2YsIDB4NjA4ZTc4YzksIDB4ZjY4OTMyY2MsIDB4ZjIxZjQ3ZjEsCisJMHgzYzAwYjYzNCwgMHg0NWVmMTQzMywgMHhlMGY5OWQzMSwgMHhmYmMyMGQ3ZiwgMHhiOTlhY2E1MSwgMHg5ZTQ1MzQ3ZiwKKwkweDQ4NTNmOTkzLCAweGYzZTFlZDU3LCAweDEwNzNjMjNkLCAweGM3OWYwZTRmLCAweDY5Y2ZkODYxLCAweGRkMzIyYjUzLAorCTB4MzhmN2NmYzgsIDB4NzIwN2E4N2MsIDB4ODI3ZGY1NmYsIDB4MjJmZGQ1NzQsIDB4MGFmYmJjZmEsIDB4MTcxODAxZDgsCisJMHgyN2I3N2I5YSwgMHhiNzI0ZjkwNywgMHhkNGEzZWVkZSwgMHhkMDE4OTRjNiwgMHhiMzBhYjk2YiwgMHgzMWEyOWE2MSwKKwkweDBjNjk4ZWM1LCAweGJkOWE2MWIzLCAweDM1NGZkODUwLCAweGUwZmQ5MTM3LCAweDc4NmJmMWNhLCAweGQzNmU3OWJmLAorCTB4ZmJlMzVmZjMsIDB4Yjc3ODRhZjksIDB4ZGNhYmUwNjQsIDB4YTNiZmI3YTYsIDB4M2YzZTc2NzMsIDB4NTY1ZWZkYzUsCisJMHg5ZmQ2OTlhNywgMHhmMGNkZWFjMywgMHgzODY2OGRlNSwgMHg0Nzg2NmMzMywgMHg2NWMzMzNlZSwgMHg2NzY4MzYzOCwKKwkweGUxMWVmODhjLCAweDg2NTY5ZDllLCAweGRlMmIyYmRmLCAweGY0MzhhNTZjLCAweGEwYWU3MTU3LCAweGU5M2I1ZTc4LAorCTB4NGRjNTA5YzUsIDB4NzEyNzE4ZDksIDB4MDVhNzQ1ZmMsIDB4ZmUzYjk1ZmQsIDB4NTljNTMyZmEsIDB4NjU4YTZlNzQsCisJMHhmYmI4NjcxOCwgMHg4MzE2MThkMywgMHhlZDliYmM3MSwgMHgxOGJmMzBlYiwgMHhkOWZlODc2OCwgMHhiNWY2Y2RlMiwKKwkweGVkYjM0ZjE4LCAweDQzNGY5ZDUyLCAweGVkYjUwZjE0LCAweDRiYmNmYzZmLCAweDA4NmIwNmU3LCAweDZmOGUyZWUzLAorCTB4ZTQ0NWZlN2YsIDB4ZmExYmUzY2IsIDB4YWFmNjFkOTMsIDB4N2Q2MGI0MTQsIDB4ZGQzODQ3YzEsIDB4M2ViZDA4YzcsCisJMHhlMmY1ZTg0NiwgMHhmYzdhZjMzYSwgMHhhZjZlOTcwYSwgMHhmY2UyODdiYSwgMHhlMzgxMjYzNywgMHgyZmIyYjViYiwKKwkweDI1NzdjNTg3LCAweDhjNmRmYjc0LCAweDQwZGQ2N2IwLCAweDc2ODdjZmNmLCAweGQwODg3OWQzLCAweDdiYTE3OWNmLAorCTB4NmJkMTFmMzUsIDB4YjNlYTBjNDEsIDB4MGNkYWEzOGUsIDB4NWM1ZDRiZjQsIDB4Y2VhM2M2NjMsIDB4Y2M4NDk3ZGYsCisJMHgyNGJhMjdjZiwgMHhjZjBjZTdhMSwgMHhjNTVlMzAzMywgMHhlNzE1MjRiMywgMHhkZmEzNjdlZiwgMHg4YmJkN2Y1MywKKwkweGJjMmYxOWRiLCAweDIwZjJlOWEwLCAweDk5MmE3YjhiLCAweGIyYWU3MGM3LCAweDc5YjNlZjViLCAweDA4OWUzMWZkLAorCTB4ZmJiMDM1ZTksIDB4YmI0NDcxNzksIDB4MmViMWZkN2EsIDB4ZGE1ZmNmMmUsIDB4NDQ4Mjc5ZjgsIDB4OTU2Mzg3ODEsCisJMHhlODZlYzhmYiwgMHg3ZDJiMjNiMiwgMHgzODA2ODliZSwgMHg3Mjc3NjZhZiwgMHg3NzZmZTEyZSwgMHhmOTg2YmRmMiwKKwkweGRlYzM2NGFhLCAweDRlMzBiYmU0LCAweDhmNDE0ZWFlLCAweGUzYjkyYjM2LCAweDQ5OGY5ZmI5LCAweDNkNzJlN2M0LAorCTB4MTFmMzEzZjYsIDB4NmZmNTZkOGYsIDB4ZDgxY2IwYjgsIDB4NzE4YzIzZDksIDB4NTczNWY5NjcsIDB4ZTQxYTI2ZmIsCisJMHhiOWYyODdmZSwgMHgzNzEyYjc0ZSwgMHgzOTJiY2JjNywgMHg5Y2YwOTNjZCwgMHhmZjBkNzE0OCwgMHhmZDcxNjE4ZSwKKwkweDgwZGNiNzZkLCAweGNmY2Q1ZWY4LCAweGNjMmI2N2QzLCAweDk2M2M4MzJmLCAweGZhZWRiOTZjLCAweGZjYmNmMDYxLAorCTB4ZWM1ZTUxOTksIDB4MmI3MTU0MGYsIDB4NzhkZTJmM2UsIDB4M2QxNWNlOTIsIDB4OGVmZWUxNmEsIDB4MDUwNGZhNDgsCisJMHgxM2ZhM2Q5ZiwgMHgzOWVhMDE0NywgMHhjYjc1ZWZhOCwgMHg5ZjdmN2EwOCwgMHgyMzliZWMwNSwgMHhkY2VmODNlMywKKwkweGIzOGU0NTA1LCAweGEwNmYwZmZhLCAweDlmMzMzMGY4LCAweDY4NGJkZjAyLCAweDk3YWU3NWJmLCAweGU5ZThlYmJjLAorCTB4ZDE5YmVjYzIsIDB4YTAyZGY3NTQsIDB4OGZjODc5NzgsIDB4MGMyOTdlYmEsIDB4YTQ4OWViOTksIDB4NmZjMTZhZWYsCisJMHhlNDYyMWJmMCwgMHg3ZDcyYzg5MywgMHhkY2U5MDRhNiwgMHhkMDdjYzk3NCwgMHg0M2ZmMDY5MywgMHg4YTZhYTFjOSwKKwkweDA3NmM4ZGNmLCAweGMxOTg1ODIzLCAweGUxODFkYTBlLCAweDliOTcyODc1LCAweGZjMTY5Yzc4LCAweDg4YjY1YjI0LAorCTB4NjFjNDFmNjMsIDB4ZjkxNWM3YmEsIDB4ZjhhMjE4MTEsIDB4ODNkMTM2NTIsIDB4NGQ5OWJkNzgsIDB4MzdkNzU0YzYsCisJMHhjM2Y1Mzk2ZCwgMHg1MmFiZmNiMSwgMHhhMmJmNzNjYiwgMHhlNzI0OWNmYSwgMHhkZDMwZWU2ZCwgMHg5YzRmZGI2ZiwKKwkweDcwZjM2ZjQ3LCAweDhmZWVmZjU4LCAweDY0ZDQ1ZjllLCAweGUzYWViOGE3LCAweGJmZDIzNDI3LCAweDE0OWUzMDBiLAorCTB4Yjc2OGJmY2IsIDB4M2Q2OGMwNTgsIDB4NzhjZmE1YmUsIDB4YWI2ZTUzOGMsIDB4MWZhNWY3ZTcsIDB4NWUzM2VmYWIsCisJMHgxZWJjY2IzYiwgMHhmOWY0NGZhOSwgMHgzOWZlMjBmNiwgMHhiZTdhZmQxYSwgMHg4M2NlMTcyNiwgMHg3NzFjNzg4YiwKKwkweGNjOGE5ZjRhLCAweGQyNzQyODhhLCAweDJhZDQ0YmRmLCAweGQzZmQ3MTMyLCAweGJiYzM4Zjc5LCAweGNjMTRmMDhlLAorCTB4OWZlZmM4NTAsIDB4NWM5YTdlNGEsIDB4ZTgzYTlmZTEsIDB4MDJlZGJmZjYsIDB4YWNhMTM5YmEsIDB4ZWMyNWZlMGYsCisJMHhkZmExZDc5MywgMHhmYmQ5MGJmMywgMHhmNzUwN2I4MCwgMHhhY2FjZmQzZSwgMHhhM2RmOWQwMCwgMHhmYjQwZjQwZiwKKwkweDU2MTYxNTMzLCAweGUyNjZkZjgwLCAweDYwOWMzNTNjLCAweGFlNjc0ZjlhLCAweDcxOWUyODk2LCAweDc4ZjM3MmQ2LAorCTB4ZTM2ZWJlZjAsIDB4YWFjMDVhZmMsIDB4NTYyMmRlYTksIDB4NmFjMTY5NGYsIDB4Y2UyMTdlNzMsIDB4MjczYzJlNDcsCisJMHg4YTc2ZTNjNywgMHhmYWY5Y2Q2YSwgMHg4ZDkyYzBiOSwgMHhmMGQxYWM2NywgMHhjN2QzMzVmNiwgMHhjNzAyZmJlNywKKwkweGEzNmNkZDI3LCAweDJhYjdkZGZlLCAweDY5NzdlZjhlLCAweDZkZjM4N2NjLCAweGU5MjcyYWU3LCAweGEwMTY2MmZmLAorCTB4ZTYyOWRjN2UsIDB4NzMwN2YyZmQsIDB4ZWQyMGIzN2QsIDB4MzdkMzNmOTgsIDB4Y2I5ZTBmYWIsIDB4MmQyM2YzZTcsCisJMHhmOTllNDkxOSwgMHgxM2M1N2ViZCwgMHhiZjAwNzg1OSwgMHhiY2UxODdjZiwgMHg4NTI0ZGM1YiwgMHgwMzZjMjE4NywKKwkweDlmYzExZDUxLCAweDM4MjZiZGUzLCAweDM2NzllMzdlLCAweDZlMzhmYzdkLCAweDNlZjY3M2UzLCAweDllMTE2ZmE3LAorCTB4YjhmOTkyOWIsIDB4MDIyNWY5OGQsIDB4YWQxYjI1MWYsIDB4OThkMTdmMjYsIDB4NzlkMDUyOGQsIDB4NmFhZjllMzksCisJMHgxYWNhZjdhMSwgMHhmNTRkNThjZSwgMHhlYzFkNzk4YSwgMHhiYTA3NjYwMSwgMHgyYjU4Mjk4ZCwgMHg3NTU2NjBlMywKKwkweDI1ZDBmMWU5LCAweDFjY2JjZWQxLCAweDc1NWM3ODEwLCAweDk0NWY1ZTViLCAweGJlZDFjN2RiLCAweDlkMTAyN2VkLAorCTB4Zjg0YTdhNDMsIDB4MDZkODU4YTMsIDB4ZWM4Y2M1ZWQsIDB4N2IzZjI5ODIsIDB4ZTI5Mzg3MjEsIDB4MjZhNmJkMWUsCisJMHg0YTJmYmU4ZCwgMHg2NTMzNjFmYiwgMHgwZTc4OWJmZiwgMHhkMDNlMzJiMywgMHg5OWRhMGUzNywgMHgyYmE1ZjE2OSwKKwkweGMxYmViZjI0LCAweGNmOWQ2ZmU0LCAweDg4ZTRmMGYxLCAweGEyMmE0YjhhLCAweDNhNzViN2FjLCAweDUzZDUyMTNmLAorCTB4M2I3MDQwOWMsIDB4NTk5ZGE3OWYsIDB4MjBjMDZhOWQsIDB4YjhlMzIzMTcsIDB4ZDNkYjhjYmUsIDB4M2E4ZmU3NDIsCisJMHhmZTc0NGFiNywgMHgyMGU5MjlmOSwgMHhlYTdlMGY5ZCwgMHhmZjQzMGY1YSwgMHgwOWQwMmE0MCwgMHgxMjUzZWZmNSwKKwkweGZjZjc4NDViLCAweDM0ZGMzNTY1LCAweDczYTQwZGU3LCAweGUzMTc4YzU2LCAweGM2MWI0YTBmLCAweDFhMGVhNWM5LAorCTB4NjJlM2I3M2YsIDB4YmVlMmQ2MmIsIDB4MjE4Y2NhNTQsIDB4NjFkZjkwMjMsIDB4ODY2ZTMzZGMsIDB4M2NlM2EzZTcsCisJMHgwNzVmNWVkNCwgMHhjMmVhN2JhNywgMHhhMWRjYzY2MCwgMHhjZTdmYmVkOCwgMHhjMzhmMjgxYiwgMHg3Y2JjZTg2MiwKKwkweDk5Y2FlMDBhLCAweGI0MzJlOTQwLCAweGU2NTk1MmNmLCAweDUzMzNiNDZlLCAweGEwNDY3OGE3LCAweDhiOTU3ZjRmLAorCTB4OTE2NDkzYjcsIDB4ZjY4NGRjNjcsIDB4MjcwZTA4ZTMsIDB4ZDZmOTJjM2MsIDB4YTBhZTEzMTEsIDB4ZmNhYzUyNzYsCisJMHgxY2Y4N2E5MywgMHhmYTFiNGRlZCwgMHg3YTA2MWMyNywgMHhjNGM4YTg0ZiwgMHhmMTA2NTNmNiwgMHhhNzBiNTEzNCwKKwkweGJiZmIzZDYxLCAweDc1YTAxZWU4LCAweDIzMzczY2M4LCAweGJiZWYzZDdkLCAweDJlYjgyOTcxLCAweDBiMDZkZmRjLAorCTB4ZmI2M2QwNzUsIDB4OTdmZGY0ZDMsIDB4ZmJlYzgzYjAsIDB4ZjJmMDg3MGIsIDB4OTc5OTRlYzIsIDB4MjRlN2NmYzksCisJMHgxNWY2ZWJhNiwgMHhmYWExZDcyZiwgMHg1ZWEyNDZlMiwgMHhmOWRiOGY3ZCwgMHhlNDdjMzk1ZiwgMHhlYjQyYmYwNywKKwkweGEwODAzY2U1LCAweDU4ZTlmOTUzLCAweDBiY2MzMjE2LCAweDIxYmVkM2U1LCAweGI0ZmNiM2ZiLCAweGVmMWNmNGNiLAorCTB4OTVjNjM1MDksIDB4YTFlYzE0OTcsIDB4YjI5NDNiZWYsIDB4NTA5ZjNhNjYsIDB4ODM4ZTZmNWEsIDB4N2EyNjIyYmYsCisJMHg5NzlmM2FiYiwgMHgzMDU5OTY5ZiwgMHhmOTlhYmI2YSwgMHgyYzNlZTlmOSwgMHhiOTVhMjdkOCwgMHhkM2YzZjM2NCwKKwkweGZjNmUxOTkyLCAweGU4NTM5NDU2LCAweDcxNjljYjM5LCAweDBhNzFmYWUxLCAweDY3YTg0N2NlLCAweDdhYTA5NjQyLAorCTB4ZGE1ZDM3NzksIDB4NzlhNjJkZGQsIDB4ZTFjM2RkYTgsIDB4YThiZmIxMGUsIDB4YjdmNWViZTcsIDB4MzljNGQzNGYsCisJMHg3YmNmN2UzZCwgMHgyMDI4MjU1YiwgMHg0ZGQzY2ZjMCwgMHg1ZGRmYzkyNywgMHhmMDliYjRkMiwgMHgzNzQ1ZjNhMywKKwkweGQwNTk2MjllLCAweGFhZTRhNzgwLCAweDY0MDViMGU2LCAweGZkYjhlOWZjLCAweDAyNWU4NzRiLCAweGNiYTNkOTI0LAorCTB4N2Q0YjNiZjMsIDB4YmYxZjIxNjMsIDB4ZWY5MDYxNmIsIDB4NzkyZWFjZDgsIDB4Y2FiMzc1MjcsIDB4ZjBmZDBiMjIsCisJMHg2Mzg5ZDJlZSwgMHhkZjJmMzA4ZCwgMHgzNWYzN2VmZCwgMHhiMmI3ODExMywgMHg2YmY3ZjI4NiwgMHg2YjdiZGVlMywKKwkweDc1MDZjNjIxLCAweDRjZTgzYjlkLCAweGIwMGQzYmY3LCAweDAwNzYwMjJkLCAweGJiMDBjYzNjLCAweDIzMTNmMjIzLAorCTB4ZTAyMzUzZjIsIDB4Y2RiZTVlMzQsIDB4YmQ5NzRlMTksIDB4ZmI4ZTZkOGMsIDB4ZjQwNTFhZTAsIDB4ZjBkZjViNWMsCisJMHg2NDc5YmM3NCwgMHhkNzQ3ZDU3OSwgMHg0YjhlZjdlMCwgMHg3YmY3ZjhiMywgMHhhZjI0OWFjYiwgMHg2NWEzZDA2NCwKKwkweGU0ODcxZTVlLCAweDMzNjhiNmYwLCAweDlhMWUyMjg3LCAweDUwN2Q0NGRmLCAweDcxYjkyOGQyLCAweGRmYThlMGZkLAorCTB4ZGYxODI2MTIsIDB4YWJkZTE4ZjMsIDB4OTJkM2ViZTcsIDB4NWVmNDgzZmEsIDB4YjEwZmY1YWYsIDB4M2EzZjNjOTAsCisJMHg3NzJhNzNlNCwgMHgzNjJkZmRhZSwgMHhhZjNkZmNjNSwgMHg1MmJiZjZkZSwgMHg1MGI3ODEyZCwgMHhjN2Y3ZWFkZiwKKwkweGE4Zjk2ZGI3LCAweDIwYWE3YmZiLCAweDdkN2RlZDdmLCAweDQ2OWY0OTdiLCAweGM3MmY1YjljLCAweGU1YmEzOGZlLAorCTB4YTNlM2M3NDUsIDB4N2RkMTRlNDMsIDB4ZDYxODdmYmEsIDB4MDc5YTAxZjQsIDB4MmU0ZWYzYjEsIDB4ZmY3NWFiYzAsCisJMHgxNDc4N2E1NCwgMHgyNzc4NWZkYSwgMHg0ZjFmY2UyZiwgMHg3MDRiYTE0OCwgMHgwNTlhN2E1ZSwgMHhlZjc2YzEyZSwKKwkweDM3NjhiZDI5LCAweDgwZWM2YTdlLCAweDVlMGNmMmRhLCAweGRjNGRmMzA5LCAweDAxZmZjMjQ5LCAweGZjMDBjYjY3LAorCTB4YzdlOWRkNjQsIDB4YTRlMWMyZmYsIDB4ZTYwOWJhMTYsIDB4YWZlZmVhYjYsIDB4MWVjZGVmYzEsIDB4YzAzMmQwMTgsCisJMHg4ZmY3ZjAwMiwgMHhlMDk5M2E1ZiwgMHg0MTllNWE4YiwgMHgwNGVhYzJmOCwgMHgxOTZiMGYwZSwgMHgwM2ZiYzMyMCwKKwkweDIzMjY3ZDgzLCAweGEzYmJkNmZkLCAweGExMDlmZGNiLCAweGM1ZmVmNDZmLCAweDg5MWRmNjBlLCAweDg0YWFmYjQzLAorCTB4MmM3ODNiY2YsIDB4NzU3YTA2ZGEsIDB4NGRiMWQxN2EsIDB4ZDMxZjAxZWIsIDB4ZjQ5NjIzZmYsIDB4NWJiNmZhZGQsCisJMHgxZTEzZjNhZSwgMHg2ZjhjN2U4MiwgMHhhNmY4MTE0YywgMHhiYmY0OTE3OSwgMHg1ZjQ0ZjY0MiwgMHhiYTEzMGI5YywKKwkweDZmNGNlOWU5LCAweDcxYmNkMGY2LCAweGI0MTZjNTY5LCAweDBmYTY1MjFmLCAweDU1ZTM3OWE1LCAweGVlMjdlZjk3LAorCTB4ZTllOWRkNTEsIDB4YzRmZTllMjQsIDB4NWJmYWU2ZWQsIDB4NDZiYzUwYjYsIDB4YjI0ZTQzY2EsIDB4ZGYxNzFlYWIsCisJMHgyM2I5MDA2NywgMHhiYTA4NzBmZSwgMHgzYzdjZGM1OCwgMHg3MzE5MGRmZiwgMHg4MDAwMWJkMSwgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZGRmZjAwLCAweGM1OTQ3ODBkLCAweGJiYmNmMGI1LCAweDI2ZWZmZWVmLAorCTB4YjI0ZDliYmIsIDB4ZjM3OWY5MDksIDB4NzExMDA4NDMsIDB4YTkxODkzMTMsIDB4MTg4ODRkZDYsIDB4MjIwYmI1MzEsCisJMHg0OTcxNmI2MiwgMHhjOTMwNDlmOCwgMHgyZDE2YWQ0NiwgMHg1NDQ4NTliZCwgMHg0NmQxMDg4MiwgMHhlMWI4MGEwNCwKKwkweGZkMmI2MjAyLCAweDFhOGM0NTgyLCAweGY2ODg4MmU4LCAweDcyZGZiZDJiLCAweGJkM2ZhZGViLCAweDhhN2UxYmQ3LAorCTB4YjQ1NjQyODgsIDB4ZWI2ZGVhNWMsIDB4MjY2NjczOWQsIDB4NWM5Mzc3ZDksIDB4OWY3YjdhYTgsIDB4YmU4ZjhiZTcsCisJMHhjZWYzM2JjZSwgMHhmZTczMzk5YywgMHhiMzMzOWNlNiwgMHg5MDg2YmIxYSwgMHgyNThlNDI2NCwgMHg0ZWM3MzBkYywKKwkweGU2MzFkZjlmLCAweDIyNGM5ZDE1LCAweGY0MzNiYmE0LCAweGM4NGI0OTljLCAweGM0MjExMjdiLCAweDA5ZjA0ODQ1LAorCTB4MGU3YjY4NTMsIDB4ZDFlZGRmMjEsIDB4YjQ4OTc1MDQsIDB4NzM0ZGUxZGUsIDB4NDRiMmQxMTYsIDB4YzM0NWJkN2MsCisJMHhkNTdmYmRlNSwgMHhkMmIzZTVkZSwgMHhkMzJkMzE3MiwgMHg5OTEyYWJlNywgMHhiZDMzZjU4YiwgMHhmZTVhMGU2OSwKKwkweGE3YWVmZTAyLCAweDlmNTYxZWU1LCAweDU4YWQyNWFlLCAweDdmYmVjMzlmLCAweGU1ZGM4NGFhLCAweDc2ZDRjZmEzLAorCTB4N2QyOTZlM2EsIDB4YjViODlkYWUsIDB4OTE2YjhlOWQsIDB4MGJjYTE3ODksIDB4NWQ2YzE2ZTcsIDB4NzM2YTYxNGUsCisJMHg4OTc4NDJjYywgMHg1MTI2OWJkNywgMHhlNjM2NGVmOCwgMHg3NmQxNTY2YSwgMHhjOGFmYTdiZiwgMHg1MTVjODQzNSwKKwkweDk3YjBjZGUwLCAweGZmNDBmOWQxLCAweDQ0ZDIxYzc0LCAweDNjMzY5NTI3LCAweDM3OTgxY2ZlLCAweDdhZDdhZmFkLAorCTB4Y2YzYTY0YjMsIDB4MzlmZTFkZGIsIDB4ZTM1ZWJlZDAsIDB4ZDBiNDQyOWQsIDB4NzdjMGI3ODksIDB4ODgyM2I0MDUsCisJMHgzYjc2Mzk5ZiwgMHg0MGYyMjdiNiwgMHhmZmZmYmMxOSwgMHhiODk1NGYwOCwgMHg0ZjExNWZlZSwgMHg3NTM0ZWY3NywKKwkweGY4MjQyYzlkLCAweGI3ZmQwNWY3LCAweDJhYTFkN2I5LCAweGJhZDJmYTA3LCAweGNiODcxYTRlLCAweGQwZmZjMzc3LAorCTB4MjRhZDQ4NzEsIDB4MmMzYTE0OTMsIDB4OGQ2ZTIyYWIsIDB4YmZlODM2ZmYsIDB4N2EwN2U5NzksIDB4NTEzNzgxYTIsCisJMHhmMDJmZjQzZCwgMHhlYjBhNGViZSwgMHg4MmZjZTk1MiwgMHg3NmNmMjRmYiwgMHhiMmNmZGVjMiwgMHhlODk1OTIxMSwKKwkweDIxZTYxM2JmLCAweGMzZjc5ZWUwLCAweGQxN2YzNGU2LCAweDNmMmM3Y2YwLCAweDc2ZTZhOTc4LCAweGU0Yjc5YzVhLAorCTB4ZjRlZGFlY2MsIDB4NTkwZjc5ZmIsIDB4ZGI4NjUxMDgsIDB4OWQ3MTFlZDMsIDB4YjhjZjdmZGYsIDB4OWY0OTVjOWEsCisJMHg4NmIwZGVmYSwgMHgxOWZkZWJlMiwgMHhiNjljYjNjNCwgMHgxYTQzNWY3YiwgMHg3M2VmZmYwMCwgMHg3NDNmOTViYywKKwkweDg1MzIxMWY3LCAweGI1ZDk1ZjkwLCAweGQwNDk5ZGY4LCAweGJkZGJlNDgzLCAweDUzYjdlMjg4LCAweGQwMjM0MTIyLAorCTB4ZDIzZDRjYzMsIDB4ZDI4ODYwYzMsIDB4ZmViMDk1YzMsIDB4ZmJlODdkNzQsIDB4ODcyNzA3ZWUsIDB4MDY3ZDc0ODIsCisJMHg2MTkxMDBjOSwgMHhiZWM0MTUzZSwgMHhiZmE5ODk1ZCwgMHgyOWViMDBhMywgMHhiNDRkMDQ5ZCwgMHgwZTY4ZGEzZSwKKwkweDVlODA5NTZkLCAweDUwYTVhMDI4LCAweDVmZWIwOTNmLCAweDA3ZmFkODk1LCAweDM4ZTIzMGVmLCAweDFkMTkzM2RkLAorCTB4NDMzYTM3NzYsIDB4YjYwMDFjYzEsIDB4YzZkZTAwOGIsIDB4NzY5NGEzYTIsIDB4NjQ0ODc0ODIsIDB4YjY5OTk0ZWYsCisJMHhlMzZjN2M2MSwgMHgzYTUyYzE3MiwgMHhiNGRiZTJmMCwgMHhlNGRhYjIzZiwgMHhiMDFmNGYxOSwgMHhiYjk0MzI4NCwKKwkweDRhM2M3MTUyLCAweGJlOTFhYjBmLCAweGZkNDcwNjY0LCAweGFiNDJkMzhmLCAweDM5NGY1YzcwLCAweDM2YTNjYmFjLAorCTB4MWY3ODdjZWYsIDB4MDE0NTkxZmQsIDB4Yzg5OTM3ZjgsIDB4N2QwOTYzNGEsIDB4ZThjM2E0NGEsIDB4ZTFjMGViYTQsCisJMHgxMzRmNWQyMSwgMHg2MGJiODNhMCwgMHg3Zjg3OGEwMCwgMHg1MzZmMzg2ZiwgMHhkODlmZmJlOCwgMHgwODAzODQyNSwKKwkweDQ4NGU1OGNkLCAweDc1ZjU2MTFkLCAweGE0YzcyY2NiLCAweDg2ZDRmMDI5LCAweGRkZjQwOTBkLCAweDAzYmMxYmNhLAorCTB4ZDk3MmJlODIsIDB4ZjNmYjQ4ZDMsIDB4ZWIyMmJhNzMsIDB4ODNjMDM2YTMsIDB4ODA0YmJlMWYsIDB4MjliNzNmZmUsCisJMHhlZmQzMjg1NiwgMHhkM2YyYzBhNywgMHhiZjg3MGJlZiwgMHg3ZGYwMzlmZiwgMHhlMGM3YzAxOSwgMHg2NTE2NmQyNywKKwkweDFmOGMzNGJiLCAweDgwYjlmY2YxLCAweDZmNjllYmFmLCAweDljNjI3OGVjLCAweGQ5OGY3ZWY4LCAweGYwMDdmZmJkLAorCTB4NGUxZWYxNDUsIDB4YjQ1ZTAxNzQsIDB4ZjBmMWFlYjgsIDB4YzdkMWY0YmEsIDB4NWU3ZWI0NGQsIDB4ODJiMWQ2OWIsCisJMHhkNGJmZDNlMiwgMHhmMDE1ZjM4NiwgMHhiZDFhOTVkZSwgMHhlYzhkZTQ4ZSwgMHhhNWE1OTRmZiwgMHgyZmY5ODY1YywKKwkweDk2NGY3NDY1LCAweDYyZTIyODE5LCAweDJlMWZhMmYxLCAweDQ4NWRkMjUzLCAweGQyMzU4N2EyLCAweGYwZTVlZjI4LAorCTB4NTE3ZjgwMDEsIDB4ZjhmN2NjNzcsIDB4NjIxYWJmZGYsIDB4MjFiZTA5ZGIsIDB4M2YwNzE0OGEsIDB4OTI0NTJiYTcsCisJMHgxMmZjZGQ2MSwgMHgzZWJkMzc1YiwgMHg1NmU0MGYzYSwgMHg5ZjAyZGMzYywgMHg4ZGU1YzZmZiwgMHg3Yzc4OGJhMCwKKwkweGJiZTAxYmZmLCAweDVkYmUyNDZjLCAweGU4NGM4MWZhLCAweDgwZDRiZmQ3LCAweDlmZWY4YTc4LCAweGY3N2UxMDkwLAorCTB4NGQwNDg5YjQsIDB4NGJkNmVlOTQsIDB4ZmFlYmQyMTIsIDB4OTAyMTJkMDcsIDB4ZThhNjgzOWIsIDB4NjA2N2MwMGUsCisJMHhkZWI4OGRmZiwgMHgwYWNkMWFlNywgMHhlYTM2NGRhMSwgMHhmNzA1YmYxOSwgMHgxNzFmMThkYiwgMHhkYzgwMTQwYywKKwkweGVjZTc0NzNiLCAweGVlNzNlYmE1LCAweGEwOWVkYTM3LCAweGE0MjA4MDI0LCAweGFkZGEzN2U1LCAweDVlZTdmZjQwLAorCTB4YjNmNTg5YmUsIDB4NWExMGEyZGMsIDB4ZTk4NjAwMGUsIDB4N2ZlMDgxYjgsIDB4NTc4YTExYjYsIDB4YzcxMTk2NjksCisJMHgwYTU3YjEzZiwgMHg4ZmJlYTAxOSwgMHg1ZTQ2MzllMiwgMHgzNmZmYTM5ZSwgMHg4ZGNiMGM5NCwgMHgzODAwYTg0MSwKKwkweDA3MDgyY2ZhLCAweDhlMjM2OTlkLCAweDU5MzM1ZGY3LCAweGQxNmZjNzQ1LCAweGFkMGQ1ZTQ4LCAweDI5MzI1OTZmLAorCTB4MzFlMGNlZDQsIDB4MTZkNWNhYzYsIDB4NGE5MGU5MGQsIDB4NDViZmY5ODYsIDB4ZGVlMGJjNzMsIDB4YTcyNzU2MjIsCisJMHg2MGFjNzk3MCwgMHg4NTEyNDNiYiwgMHgzYWI4YzliMywgMHgwNWZhMDVhMiwgMHg0YmY1YTAzZSwgMHg3ODY3M2VhMCwKKwkweDdmNTY1YTFkLCAweDQ3OTgxN2Y0LCAweDdkMzUxZWNiLCAweDllYWYzZDM0LCAweGJhNTg5MmM3LCAweDE3YTYxOWNhLAorCTB4MTdjMzI5NGIsIDB4ZjFhMTI2YTksIDB4MmYxYjVlMTQsIDB4MjEyMjZhNWIsIDB4ZTk2M2UwMmQsIDB4MmFlMjcyMzQsCisJMHhjMGUwZjRkYSwgMHg1YjIzYTA3NCwgMHhhM2E5MmY2OSwgMHhlMjY5YzBjZiwgMHhhN2I4NTEwZCwgMHgzNmJjZjdmNiwKKwkweGQ0NzdiNjhlLCAweGJhNjEzMjQ0LCAweGNkYmZhNTgxLCAweGYwZDU3OTNiLCAweGFmMzgwYjNhLCAweDRiNDI3ZmU5LAorCTB4N2UxZTM4YWMsIDB4ZWVmMTQxNDcsIDB4ODliYjYyYjYsIDB4N2Q4OGFlYjMsIDB4OTJlZmMwYWUsIDB4MGYyZjRjMzUsCisJMHgxZmUwMmJjMCwgMHg3NWNkZTk5OSwgMHhmZDUyNmY1YywgMHg2MTdhZjI4YSwgMHhhZmQ0MDRkNywgMHhjZTQwZmZhMCwKKwkweGY0YzA5NTNkLCAweDkwM2RjODMxLCAweGFhOGU2ZDMzLCAweDllNzQxY2FiLCAweDE0ZDU2NzY2LCAweGM3MWIxOTQ3LAorCTB4MjdlOTgzNjcsIDB4YTc4OGZlYTEsIDB4MjQzZDc4ZWIsIDB4YjVlNmE1ZGEsIDB4Yzc1YWI3MTYsIDB4MGNmOTQ3NmUsCisJMHg5MGRkMTZmMSwgMHgyYzg4ZTRjOCwgMHhhZmQxNzk2MSwgMHgxMGFiM2Q3NSwgMHhlNmU5MTkzZSwgMHgyODM5Y2RkZSwKKwkweDk3NDgxYjk3LCAweDg5YmNlODFlLCAweGM3NDBmNDg0LCAweDk4MjQ4YzhiLCAweDExNjJlOTQwLCAweDlmNDg5NjZkLAorCTB4ODgxYmQ3OGIsIDB4OGQ3ZWIzMTIsIDB4ODliOTc1MjEsIDB4NDliYjg1Y2IsIDB4N2JiZmJmMDQsIDB4MzU3ZDVjNjcsCisJMHg3ZDY4ZGIwOSwgMHgyZDg0OTFiMywgMHhkNzU1ZWNmMCwgMHg4ZTdkNTBiNywgMHg4NWY3ZDY3YywgMHhlOTNkZjYyMSwKKwkweDhiYmRmMzY2LCAweDNhYTNiYmFmLCAweDc5ZDNmNWE0LCAweGRkNTEzMDZmLCAweDVkMDY4NGVhLCAweDk3NTMzZWI4LAorCTB4MjY3YWUwZjUsIDB4MWU3Mzc4OTYsIDB4MmJmMmJkMDYsIDB4YTUyYjY3OWQsIDB4ZjVmMDNmZGIsIDB4NjYzOWY4MTIsCisJMHhiYzAwYWFhZiwgMHg5YzFhYjU5YiwgMHgwMzYxZjQ3ZiwgMHhkNTI0ZTdlMiwgMHg2YmZlYjBlMywgMHg1OWFlZTQxZCwKKwkweDhkYWU3OWY0LCAweDgwNzVmMzc4LCAweDJjZDY3YjI2LCAweGFmM2M0OGRiLCAweDAwZDRjNTdhLCAweGQwZTBkMzc0LAorCTB4ZDMyYWU4YTgsIDB4Zjk3MmMzYTEsIDB4ZTVmZjhlMGEsIDB4MWNkNmQwOTYsIDB4YTAxNGY3NDQsIDB4YTE1Y2YyYTcsCisJMHg5OTk0Yzk1NywgMHg0NzRjN2NiNCwgMHg2ZTVhM2JlZCwgMHg0M2Y1NjM5OSwgMHg0ZjYwMDM3ZiwgMHgwZWZkZjJkMCwKKwkweDc3ZWVjZjI2LCAweDQ1M2Q3MWU4LCAweGQwNTdjYzU5LCAweGZiMDcxZDBkLCAweDllYzU1ZjMzLCAweDQzNjU4ZTAyLAorCTB4NzQ2MDlmZWQsIDB4YmFmMGY1YzMsIDB4ZWEwZjczNDYsIDB4ZDVmYTIxZTEsIDB4MjJkZmE0MTAsIDB4ZmFmMDFlOWYsCisJMHhmMzJiOTcwYSwgMHhmOGExNmVjMSwgMHgxNDEyODU3ZSwgMHgyZjYwOGZjOCwgMHgzZTI5NWZiMywgMHhlNWE1MmRlNiwKKwkweDc5MTc0ZTU3LCAweDY3NDAyOTU2LCAweGYyYmNkZTRjLCAweDQxNTkzMzFkLCAweGNjZjM3Yzg3LCAweDI3ZmIxZjRmLAorCTB4YjRmZTdmNWEsIDB4ZmFkMDMxNWUsIDB4NzQ2YjQwMDUsIDB4ODg5MTVlZmQsIDB4YmUwYmM2MTcsIDB4YmU4MTA4NjgsCisJMHg3YjMzZDI2YywgMHgxNWZmNjliNCwgMHhmYmQxOWVjYywgMHg3MTg0MmMzNywgMHhjMDc5ZDA1ZSwgMHgwODRhNjlkZSwKKwkweGViMDNiNzNkLCAweGEyOTQzY2QzLCAweDg2M2FhYmM5LCAweDE2Y2JlMGNmLCAweGY0MzliZGY2LCAweGEwYmI5ZmIzLAorCTB4YTQxM2Q1M2UsIDB4ZmYyNmEzZWQsIDB4NzRkNzU4NDYsIDB4N2E4ODkyODMsIDB4YzI1YWQ3ZjksIDB4MzgxNzA5YzYsCisJMHg4NzhmNWUyOCwgMHg5YzdkZGQ5OCwgMHg0ZTMwNDk1NiwgMHhhMWZiMGRiZiwgMHg5MGI2OWE3YywgMHgzM2EyNzNmNiwKKwkweGU1NDNlNzE1LCAweDI3NTlkYTJmLCAweDgyYjYxOGQ2LCAweDM0Mzc1ZGZjLCAweDhmZWQ4NGFlLCAweGQzZDM3Y2ViLAorCTB4OGJmOGY5NjgsIDB4YjRlNTllYzUsIDB4MGZhN2QwNmEsIDB4MDczZDI5ZWIsIDB4YWZiYjMyZDYsIDB4MDE2Y2EzNWUsCisJMHgxNmZkOTBmYywgMHg4ZjU4ODc5YywgMHhiNWM1OWFjMCwgMHhiMjU4MWY1MCwgMHg4ZjkwMTZlYywgMHhjODM5ZjE2MywKKwkweDM3MjMxMjdiLCAweDE2Njg5MWNmLCAweDg2YzZkM2YwLCAweGU4MzBkZWRjLCAweDFlODlmZTk1LCAweDRkYzRhZjU0LAorCTB4OGRkMjlmMTcsIDB4YTkzZGI1OWQsIDB4ZWU4ZGY4NjMsIDB4NWYzZDIxZDMsIDB4MTc0MGZmNmUsIDB4NDNkMzM5NzIsCisJMHhjYTgwNGUzMCwgMHgwZmY4MjI2NSwgMHg1OTRjNzJlNSwgMHhhZDk5NWEzYiwgMHg1NDk1ZTA2MywgMHhlYmE5ZGY2ZSwKKwkweDQ3ZmMxMjUzLCAweDllNWE1ZDYwLCAweDk3Zjc4ZmZjLCAweDE0NWUzMDJhLCAweDRhZTkyMmU1LCAweGE5M2NiZTQ2LAorCTB4YmEwM2NlZjMsIDB4ZjU4NzU0NzUsIDB4ZmQ3YTMxNzUsIDB4OTlkOTgzYTQsIDB4MDc2ZTA2ZjUsIDB4OTYzZWIwOTIsCisJMHg3OTdkNDUwZiwgMHhjNWVlOWE5NSwgMHg3ZmE3MDRmMywgMHhmN2M5ODQ1YiwgMHhjZTFhZjU5MSwgMHg0MDFhYjcxZiwKKwkweDIwNjU0ZDhmLCAweDIzZDA2YzkzLCAweGMxNWZlODU2LCAweDBlOWVhN2ZlLCAweDM5NjllYmViLCAweGJmNTg1OTdiLAorCTB4NGY4MTNmODgsIDB4NDZjM2JlMjgsIDB4MWI5M2VmM2EsIDB4MjliZjhjNmMsIDB4NDU5ZmEwMWEsIDB4ZTVmNTA0MTUsCisJMHg2M2I1MmQyMiwgMHhkMmJkZTA0YiwgMHhlNWQ3NDAzNywgMHhhNDBlOGJkNCwgMHg4YTY3ZjIyZiwgMHhmOWVmOGExNSwKKwkweDUwMzNiNzg0LCAweGIxY2E5N2JiLCAweDMwYTQzYTk3LCAweGFmZTYwYmVjLCAweGU1MzU2YzM3LCAweGI1N2I1ZjAwLAorCTB4Y2RjZjU4MzYsIDB4ZjliMWNhMTIsIDB4MWIwNTk1MWQsIDB4OWVjOTc5NjgsIDB4MTNmZDcwMmIsIDB4MmU1ZDE4MmEsCisJMHgyZjUwMzkwOSwgMHhiMWYyZTU0ZSwgMHhhM2QyMTBkZSwgMHg4OTMzZmUxZCwgMHhmNjg4M2VjMCwgMHgxMzc0ZjY4ZiwKKwkweDY0YWQyOGZkLCAweGFlNDAxZTI0LCAweDE0MjFlOGFiLCAweGQxZjZhNjUzLCAweDU3MjY1ZWQ0LCAweDI0ZTc5NTA5LAorCTB4ZjIxMjZlYzYsIDB4ODkzOGU0MWUsIDB4ZjRkNTAzYjMsIDB4ODhmYTE0MTEsIDB4YTRhMjNkYzksIDB4NzIxM2RjODIsCisJMHg5N2RkOThmOSwgMHgzZTNiNDRlOCwgMHg5N2Q2MTUzZiwgMHg5YjkzMjdhZSwgMHg2YmM0MjViYiwgMHg3ZDQ1NjkzMywKKwkweGQwYzBmNDIyLCAweDljOGY1Y2I4LCAweGJlOTkwNmQyLCAweGNmODEzYzMyLCAweGFlMGU2NzdjLCAweDhiZDIxMmViLAorCTB4OTVlODQ0ZmEsIDB4ZGYyMGU4YjEsIDB4ODhmYmUxYTksIDB4YmM2MGU5ZDEsIDB4OWFmZWMxNTMsIDB4NzVmMDkzNGUsCisJMHg2NWE2YmM3NCwgMHg4NTNjZGMyNCwgMHg1MDUzNmQzZCwgMHg2OTNkMzIzZiwgMHg5ZTEyN2E2NCwgMHg5N2QwY2JlNiwKKwkweDVlMzFmYWYxLCAweGMxZWJjNjFmLCAweDc3ZDMzZDU0LCAweDNkODU5ZDYyLCAweGQ5OGQzYTkzLCAweDg1OTc1MzAxLAorCTB4ZmMwOGE0YjQsIDB4OTRlYWRlMzUsIDB4MjZiYjYxZTQsIDB4YThkMThlZjAsIDB4MWY2NTA5NWMsIDB4OWVmOTA1YzksCisJMHgyYTYyZjk1MCwgMHhjNGM4MGZhZCwgMHhhMTY1N2MwYiwgMHhlZmExZTk3OCwgMHhiN2ZiNzMzNywgMHhkN2NkOTUyNywKKwkweGFiZjQ2N2FkLCAweGQ4YTQ3ZDkzLCAweGMxMTJlYjBhLCAweDk5MzQ2ZjdkLCAweDA1MWU4MWQ4LCAweGU4ZGIzNzNlLAorCTB4MWRmMDI1NzcsIDB4ZWZhMWI3ZTMsIDB4MWNjM2E0OGQsIDB4MmJkNTdkZjMsIDB4MTczZmQ0MjYsIDB4MGM4NWI2NWUsCisJMHhiM2Y4OGY2OCwgMHg5NGJmYjQxZCwgMHg0ZWQwMWJkZiwgMHgwZDhhZjczZCwgMHhhZTM5ZTlmNSwgMHhlZmMyNWQwZiwKKwkweDdlNjExZTQwLCAweDQxYWViZTE2LCAweDAwOGUzNTUyLCAweGM2MzM0YmVkLCAweGY2MTQwODgxLCAweGQ5ODNiMzU5LAorCTB4MjFlZDIzNTksIDB4OTkxMzlmNWUsIDB4ODBjYWU4YzMsIDB4OGUwYmNkZmIsIDB4NGNhMDA3ODEsIDB4N2ZhMDIxZTEsCisJMHg3ZTMyNzE2ZSwgMHg1Njk5ZWMwZiwgMHgzZWZhNDNmYywgMHgxODdhYjNlMCwgMHg0MGM1ZmRmNiwgMHhmN2VkMDZhZiwKKwkweDdkMjkxOGU3LCAweDhiMmVkNzRkLCAweGQxZTc0ODNlLCAweDgzYjU2OTljLCAweGZlY2VhYjdlLCAweDQxZGRkZmQ3LAorCTB4ZDFlZTFmY2IsIDB4ZjNhYzAzMTEsIDB4NDk3MzY5ZjYsIDB4YjdmMmQ4ZWUsIDB4M2UzYmE0MzEsIDB4NzcyZmMzMTAsCisJMHg5Yjk3NTRlZiwgMHg0MGU1ZDU3YiwgMHhiZjdjYmE5ZiwgMHg2NTNhZTZkMywgMHhmOWUxZDk0MSwgMHhjMWI1ZDI4MiwKKwkweDg3YmE3YWQwLCAweGQ1Nzg2YmMyLCAweDg2NjhmYTgwLCAweDEzOTBmZmQzLCAweDdhMjZhZGU0LCAweGM4NmNmMDE4LAorCTB4ZjgwYTc4ZmUsIDB4OWZmZDAyM2IsIDB4NTAzNGYwNDgsIDB4MzExNDhhMzYsIDB4NWY1ZjAzZmMsIDB4YjZjZmNkMzAsCisJMHg2MWI3ODI4ZiwgMHgwNmEzMTFmYywgMHg3NWFkNGNmMSwgMHgxNzM5NDRmNiwgMHhkMmUyN2NlMCwgMHg0MDNjM2Y3YiwKKwkweDk2NjhiZmU3LCAweGRmMDJiZWQ5LCAweGNhY2I2Yjc4LCAweDE4NDQ5ZWMxLCAweDRkZmQ2MDQ5LCAweDhiYmVjMjFmLAorCTB4ZjU4NDZiYjYsIDB4YjY5MzM1M2YsIDB4YWMzNTcwYTMsIDB4ODliMGZhNjcsIDB4NmY4MDEyNDQsIDB4NjlkZGE4NWIsCisJMHgxYmZjNGJhNCwgMHg3Nzc3NmZjZSwgMHhmNGMzY2I0NCwgMHgzNTlkYmI3ZiwgMHhmOTRlMDExMywgMHhlODBmYjIyZiwKKwkweDM3ZTg1MWUzLCAweGVhZGU0ZWM2LCAweDRiZmM3MjY0LCAweDQ2MzI5OWZiLCAweDAyYjY5OWY4LCAweDAzOGQ5YWZlLAorCTB4ZmUzYTRhZmEsIDB4MGNmOTdmZjUsIDB4YTVlMmZkZTUsIDB4ODIzZWUxYWYsIDB4YjMzZTYzY2UsIDB4YzgwYTRkYWIsCisJMHgxZTBmYzVhNywgMHhkZjYyZjdjMCwgMHg4YWQzMmE3NiwgMHgzNmQ3YjZmYiwgMHhhMWQ5NTgxOCwgMHhjZGE5ZjJjNywKKwkweGI4Yjk1ZjZjLCAweDNjYzEwYTU3LCAweDkzMTc1OWE1LCAweDZjMmY0MTJhLCAweDY0MGRkOWQ2LCAweGYxZTM1ZTI0LAorCTB4YjdhNmMxZjgsIDB4ZjVlZmMwMTMsIDB4ZjYxZDIyMDEsIDB4YzdiMzEyN2IsIDB4YjgwOWFkZWMsIDB4MTM1YTUwN2YsCisJMHhhYzBjYmVjMCwgMHg5MDQzZjFiZiwgMHg2YjM3OGI4ZiwgMHg5MDJmNjAzZCwgMHhjZmY0MzY3ZCwgMHhjMzdjZGUyYywKKwkweGU4NTY4NWM0LCAweDRhYTRkM2U3LCAweGI5NmQxM2YwLCAweGQwNTQzYzAxLCAweDdlNjIxN2NlLCAweGY0ZjVjODllLAorCTB4NmFlNWJjYmQsIDB4ZDBmMWY4MDUsIDB4NjJmZjA2NjYsIDB4ZDAwNzcxODcsIDB4ZDE3ZmY1ZDEsIDB4MWFjOTdmMjIsCisJMHhiOTNiMDdlMiwgMHgwODlkZWY1YiwgMHhkYTZjYWQ3YywgMHhlN2Q2MWQzZSwgMHgxYWU5OTk4MywgMHgyMjRiYmY2YywKKwkweDYzOGJjMDc2LCAweDVmYmMwYTY5LCAweGUwM2VjOTJjLCAweDhkZjU4NmUzLCAweDRmNzZiMWI1LCAweGM3Zjk5MzlkLAorCTB4YTU5N2IzMmEsIDB4YWY5MTU4MGMsIDB4NmQzZTgwZTYsIDB4MDhmOTRjZGUsIDB4ZGVmNTlmYzYsIDB4MGQ3MGVlZWYsCisJMHg2YjM0OTVmMywgMHhhMTUzMmRmZCwgMHgxZTc1NjdmZiwgMHg3YjIxYmJlMCwgMHg5MGI3ZDM2NiwgMHg0YzJmZTBiZSwKKwkweGUzOThiNWYxLCAweDk5ZjJhYmViLCAweGE0ZjgyMmMxLCAweGVhZTQwMGI1LCAweDA1YWQxNWUyLCAweDhjZWM1MWY2LAorCTB4NDRkOTNlMjEsIDB4MjEzMjcyZjksIDB4ZjkxMjlkYTcsIDB4MTk5M2ZjMDIsIDB4NjNiZWQ1NGUsIDB4YjU5YTdkYWMsCisJMHhjNjdhODM1MCwgMHhlZGRlMjFlOCwgMHhiNzRhOTlmNCwgMHhiNzFmYjBjOSwgMHg2ZjU4YzkyNSwgMHg3ZDIzZDI0YiwKKwkweDc3YmE3ZmNiLCAweGJjZTg2ZmU3LCAweDJmZmE3NDllLCAweDI2Y2NiZTgwLCAweDZiZDA2MmRlLCAweDQ1NWVkNDRhLAorCTB4MzU0MDVhY2QsIDB4MTM2NDYxZGEsIDB4Y2M4OWFmYjMsIDB4OTJlYjg1ZmMsIDB4MzE1NThlYzksIDB4MTI1MzczZmIsCisJMHgzOTUwNGZkYiwgMHg3M2Y0MDVmMSwgMHgxZjNmZGRlZSwgMHg2NGI2ZmMwNiwgMHhlYzA1M2M3ZCwgMHhjZmM1YzA4NSwKKwkweGIzNWZlMGY0LCAweGRmMjg0YmY2LCAweDAxMWYxZWFkLCAweGNmZjQwOWJhLCAweDg2OGEwYjI0LCAweGMzYzA3MmU1LAorCTB4YmNmYzQ2ZjQsIDB4OThlOTI0ZTYsIDB4YjE0NTc1MWMsIDB4ODI5NzRhOWYsIDB4NDEwNzZlZTUsIDB4ZDRiOGRhN2EsCisJMHg0NmZlZjY4YywgMHg0MDA0Yzg1NywgMHgyYjdjYWRmZiwgMHhlZTQ2YTdlYywgMHhmYjZlMzQwZiwgMHg3NDBiNTc4NSwKKwkweGUzZWM5MjFlLCAweGZlMzBhY2ExLCAweDE3OTg2YzE4LCAweDNlNzFkMmQyLCAweGM0MTc5NmRjLCAweDhmNGE5ZWYyLAorCTB4Yjc1OWQ2OTYsIDB4NWNjYWUzZmQsIDB4Y2U5ZjUzYzAsIDB4OWVhZGVkMDMsIDB4ZGY5ODA0ODEsIDB4MjQ0ZWRiODcsCisJMHhiNjFhZmNjMCwgMHgwZGRlNzE2OSwgMHgxNjUyNGZhMSwgMHgwOWNiMGQxNiwgMHg5MDVmYzY5ZCwgMHg1ZDgyNzYwNCwKKwkweDQyZjhjMmIyLCAweGVkYjg3YzVlLCAweDU2MDU5NGQzLCAweDdkNDAzZmU2LCAweDVlM2EzYTVhLCAweGM5Y2FjZWNjLAorCTB4ZGZmNWZkZjAsIDB4NjY3MmViNjQsIDB4NzIwNDIxOTcsIDB4Zjk4OThjZjAsIDB4MzNiYjQ1ZjcsIDB4YWVmZmE2MzYsCisJMHhjZGZlMTI0YiwgMHgzZmQwMmNkZSwgMHhhMjc5NjU0MywgMHhmN2M0ZTQwNiwgMHgyZWZlNmNlZCwgMHhmMDE2NmY3ZCwKKwkweGJhOTI0N2U1LCAweGI1MmIyNTlmLCAweDUyZTU0NDI0LCAweDg0ODk0YWUzLCAweGYzM2ZjY2E4LCAweDIwNTk0YmRjLAorCTB4ZmVkYzNmZmYsIDB4MGM1ZDU2NTIsIDB4ODlkZmYxN2MsIDB4NmE0OThkZTcsIDB4YWZmMDlhN2YsIDB4MGNlMWY0YmEsCisJMHg2M2NlYWYxOCwgMHgzMWNjN2U2MCwgMHgzZGEyYWJmYywgMHhhNGZjY2Y1OSwgMHg4MTZiOTQ4MywgMHg4Mzc3YzUwZSwKKwkweGQ4MmY2NjBkLCAweDE4YzQ4M2JiLCAweDVkNWI5NzAyLCAweDdhZDdmNzNmLCAweGQ4MmVmOWJkLCAweGUzZWY4OGQ3LAorCTB4ZjQwZDVmZmEsIDB4ZmE5MmUxNDQsIDB4NTgyN2Y0MjQsIDB4OWYyOGEyOGEsIDB4NzdmY2I0YmYsIDB4OTE4Y2Y1ZDEsCisJMHg4ZDlkNzRmZiwgMHhjNmNkNGViMCwgMHgwNDcxZTFlOCwgMHg3ODBmNDNlOSwgMHg2NTU4YjdkMywgMHhlZDI5NTdkMCwKKwkweGY3YTJiZThjLCAweGU1OWY3MDZiLCAweDgxNGMyNzMyLCAweGRkM2U4MGI4LCAweDc2ZjkwNTZkLCAweDQzYjk4MTdkLAorCTB4YjNlZjA4OTMsIDB4MzMzZWQwNDIsIDB4MGJiZjEwYmQsIDB4MGZmYTMxNTYsIDB4YzNmNDEwYTYsIDB4MDk1NjkxYTUsCisJMHhlNjc2YjRmZCwgMHgyMGE4Y2ZlNywgMHhmOGI0NTVmNiwgMHhlNzY2MjRiMywgMHhiZDY3ODliOCwgMHg1ZmQ3MGYzNiwKKwkweGM3MDczOGMyLCAweDQwMGZkMDhiLCAweGNmMmYyMDQ3LCAweDIzYTQ0NjQ4LCAweDdiNDI1ZmE5LCAweDlkZTlhYjU0LAorCTB4NDU4ZWZkMDcsIDB4YmFjNTJiNTcsIDB4MmExYWJhNzIsIDB4ZWFlODlkZmYsIDB4MjNjNzQxNDksIDB4MjBhZmNhZTgsCisJMHhhMzhkYjk1ZCwgMHgyM2Y3MTVkMywgMHgxMjdiNzY1ZiwgMHgzNmJlYzFmNCwgMHgyZDZiZTM5NSwgMHhmYmQxM2Y5NywKKwkweDJlYWZjMjhkLCAweDc5NmI3Y2MxLCAweDZiNDZiNTdmLCAweGM0N2EwYjU4LCAweGQ2MzhmYmEzLCAweGRhODliYzNmLAorCTB4NGE3ZmIwYzUsIDB4M2U5ZWJiMDMsIDB4NTdjZmI1YzcsIDB4NjQ0OGRkNzAsIDB4OTYwOGZjMDAsIDB4MmZhODhkYWIsCisJMHg3MjQ0ZDMxZiwgMHg5ZDQ5OGVjMCwgMHhlODFiYmFkNCwgMHg1MTVlNzUyMywgMHgwYmVlM2I0OSwgMHgxN2EwMWMzMywKKwkweDdmYTJkNzQwLCAweDFmMzRlOTc0LCAweDFjNTgyM2IzLCAweDhmNTMzYTI4LCAweDA3OTY5Y2ZiLCAweDhlY2M3ZDJiLAorCTB4MDk3ZTQxYTgsIDB4YTAyOTM2YWMsIDB4ZTdmNWE3MDcsIDB4MDhmYTA3MmMsIDB4MDMxZTIzMmMsIDB4ODZjZjcxZDIsCisJMHg5ZGNmZTA0NSwgMHhhYzgwZjU2ZCwgMHhiMjI1ZjExMywgMHg5ZDc3Y2Q1MiwgMHgwNTUzOGIxMiwgMHgwZjE4MjI2ZiwKKwkweDBkMzM4ZTFiLCAweGU4MjFmOTZjLCAweGY0MjJjNmZmLCAweDhmZjkwYzliLCAweDhkZWEwOWYzLCAweGQ2NDM4ZGNiLAorCTB4ZGUyMTM2YWQsIDB4ZDA2OGZjNDUsIDB4MjU3NDExNDYsIDB4M2ZiMTkxZmEsIDB4N2E2NDY4OTIsIDB4NDA3Y2E0NjgsCisJMHgwNTRhNzNmZiwgMHhhMWViN2YxMSwgMHgzY2NhMmU5YywgMHg1ZmY4MjNkZSwgMHg0NTZjYTNjNCwgMHhjOGIwMWNiZSwKKwkweGJmMzk5YzJiLCAweDA0OWM0MzMyLCAweGIzNmM3N2ZjLCAweDAwZmQ4NDE2LCAweDE5NTk4ZGZhLCAweDY5NGZjYWRkLAorCTB4NTBlOTIwMjgsIDB4YWFhYjlmZmIsIDB4YmNjYTYyMzMsIDB4YzFmN2QwZmQsIDB4NWY1NzM3NTUsIDB4YTg3N2ZhOGIsCisJMHg3YWE2YzAxZSwgMHgyNmJkOTQ1OSwgMHhjMzU1ZTIwNSwgMHg4M2I1MzJmNSwgMHhmZjEyN2Q4ZCwgMHgxYmU2ZTJiZSwKKwkweDk0MWVhYWE4LCAweGVlN2ZmOGM0LCAweGQxMWY4MmY0LCAweGM1ZTM1NDQ0LCAweGY1YzcyN2MyLCAweDViZmRhM2FmLAorCTB4MzgzZWRlMTUsIDB4ZWZlODI2ZWUsIDB4N2U1MTEyYTksIDB4ZTE0YmQzYTAsIDB4Zjc1M2FiNWIsIDB4ZGZlNTI4ODcsCisJMHhmNzhjNDE0MywgMHhhZjBlNTM3ZiwgMHg2YzMxOWQ1YSwgMHhlMTdiNTAxZiwgMHhjMzY1NDljZiwgMHhlZmEzYzI3NiwKKwkweDQ5NWQ3NmQ1LCAweDNmZDhiMmM3LCAweDE1ZmU4M2Q1LCAweDkyZTAzZWZhLCAweGU3ODkwZWQwLCAweGY0OTcwNGQ3LAorCTB4NjU2YmVjZDUsIDB4ZTA5ZDdkODQsIDB4NzRmNWY2NjIsIDB4MmZiYTQ5NjAsIDB4NTgxZGY5NDEsIDB4ZGY2MDIzZTYsCisJMHhlOWM0YmI1MiwgMHhlM2U0YmI0MiwgMHhmZDY4MDc1MywgMHgxZjlmNTliOSwgMHhiYjQwYTcxZSwgMHhiZWMxZTY3YiwKKwkweDQ2NTE3MDJhLCAweGE5ZDgxYmY5LCAweDZmOTQ0OTBkLCAweGFlY2NmZDhjLCAweGUzMWNmYWE2LCAweDk2N2U4MjA1LAorCTB4MzhmZDM5ZDgsIDB4OTdmYzA0ODIsIDB4MzJhNGZiZGQsIDB4NWE0Mjc3YTAsIDB4NmJhMzZlYjMsIDB4Mzc5NzAzZjksCisJMHhmYmUxYzcxMywgMHg5Nzc5ZjhjZCwgMHgyMDVmOThiYiwgMHhhMWI1NTg1MCwgMHgyNmRmZmEwMCwgMHg1NjE3YjAxMSwKKwkweDU5NGYxZTE1LCAweDYzYTlmYjgwLCAweGJlNjMwYjI5LCAweDBhN2JlYzZiLCAweDUzYjhkOWYxLCAweGNiMWUyYTM3LAorCTB4NzgwNGUxYTksIDB4NDVmOTc5NmMsIDB4MzM4ZGM4MmYsIDB4NDI2NTA5MjEsIDB4MDRlYTFjODMsIDB4NDFhMWI2YmIsCisJMHgyOTIxMTYwMywgMHgwM2JmY2QwZCwgMHhmNTczMWZlMywgMHg1ZjlkM2M2NCwgMHg4MTc3ZDcwNiwgMHhhNzA2Yjc5ZCwKKwkweGJmZTliY2MyLCAweGQxYjU3ZDEyLCAweGM0ZTUwOGI3LCAweDJiNDZiOWM2LCAweGViMGE5MWM2LCAweGQ4M2M0MWVlLAorCTB4YzNjMDVlY2QsIDB4MzRhYWMyYWEsIDB4ZTY2NWE3MTgsIDB4NGRjNjNiNzQsIDB4ZjUwNzNkYTgsIDB4MDc3ZTBmMmQsCisJMHhhZTAyNDVmZCwgMHgxYWJhN2Q1NSwgMHhhOWNhNzdiMCwgMHgwYTBiZjc1ZCwgMHg0NjczYTY3NywgMHhmNWYyODc4ZCwKKwkweGUyZWVlZDM4LCAweDU3MTBhY2ZiLCAweGZmOGU1ZDFmLCAweDE3NDY2NGJmLCAweGY4MmY5MjFkLCAweDhmZjQ1MmVkLAorCTB4Njc3ZjU4OTIsIDB4MWZiMzFmNzYsIDB4NTVlOTcxNmYsIDB4NWM1YmYxZmUsIDB4MzZiZGFlY2MsIDB4ZTQwNjk5MTgsCisJMHhiMDFlNWZiMiwgMHgyMDFkNWQ4MCwgMHg1ZjYwNGZkZSwgMHg2NTU2N2M0ZCwgMHg5MzEzYWUzYiwgMHgwNTM2YWU1ZiwKKwkweGQ3NDY2NmZkLCAweDQyNTc2M2MwLCAweGVlMzJiNWZkLCAweGYwM2M4ODY3LCAweDVjZjcxODYzLCAweDhhYjNjYmE3LAorCTB4ZjI4MDNlNzAsIDB4OTAyMTQ1ODMsIDB4ZmU1Y2ZiYzcsIDB4OTZmYWMyZWYsIDB4ZGNmNTdiNzMsIDB4ODMxNjM3Y2IsCisJMHg1ZmQ4NTE3ZiwgMHg1MDk5Y2Y5ZCwgMHg5NGRhNzY2ZiwgMHg0ZTQwNmIyNywgMHg3OTY2NDlmZSwgMHg2NDY4YzYwMywKKwkweGM5NjdlZDFhLCAweGI3MWM0ZWU3LCAweDg0ZWExNGQzLCAweDY4ZjYwZmY1LCAweGVhYzliZWIxLCAweGRiZjQwNDVmLAorCTB4MjlmYWViNzgsIDB4MGQ2MDg3OTgsIDB4ZDUxZTgwMTUsIDB4ZDAwOGJhYjksIDB4YTBiZWRkMzEsIDB4ZjJlOGM1MWYsCisJMHg0ZjIzODgxMSwgMHgyNTk3Y2UwYiwgMHg3NjcxMTdkMCwgMHg2M2YwMzRjZCwgMHg4NWM1YmVlMSwgMHhjZTJhZGM3ZSwKKwkweDE1MjllMzFmLCAweDJiMjIzMjljLCAweDM0OTE3Yzc0LCAweGY5YmNlNzZjLCAweGJjMzJkOWU3LCAweGM2OGZmNjE0LAorCTB4ZDVlZWZjYzgsIDB4ZWMwNGNkNzMsIDB4ZjQ0OGYyNWMsIDB4ZjhmYzA2YjAsIDB4N2IwMTA4YWUsIDB4YzI1N2I5YjgsCisJMHg1ZjBiOWE3MSwgMHhlNWZlYzNkMCwgMHhkZmM2NWVlZSwgMHhhMGRmYmUwMSwgMHg3OGMyY2JmOCwgMHhlZGMyY2I5NCwKKwkweDY3NDYwZTgxLCAweDFjNzg3MjI0LCAweGI2NzlmOWUwLCAweDc2ZDA4NDllLCAweDQyNTc3ZTMxLCAweGMwNzkzMzk2LAorCTB4ZjhmM2QzZmIsIDB4MzdmNzMzNDMsIDB4ZjU4ODRkNTEsIDB4Y2VjMjVjYWIsIDB4NWI4ZWExNTgsIDB4NDlkNzcxZjAsCisJMHhmMDE2YWYxMSwgMHhmY2E5MmM1YSwgMHhjM2Q5ZTJlNCwgMHgxODNjNGZiZiwgMHgxYmZjMGU5ZCwgMHg3ZTA1ZjRhNSwKKwkweGNjZDIwZGE3LCAweGYzYTc1ZTdiLCAweGM5MzY1MGRiLCAweDliOThhNjAzLCAweDA0YjY5MzkyLCAweGE0NTI1M2RlLAorCTB4ZmJlZDJmNzgsIDB4MGRkMDNhNjQsIDB4YWZjODIxYTksIDB4ZGE5NTdkMmQsIDB4ZWI4YjJiNjYsIDB4YTU4YzVlNjAsCisJMHg1M2VhMDdiNSwgMHhmZDQ0MmFlZiwgMHg1OTkzNzEwYywgMHgxY2IzZmRmNCwgMHhlNjU2NjlhZiwgMHgwOGFmNzNjNywKKwkweDM0MWM0MGU2LCAweDllZWZhMGYxLCAweDJiZmM2MWQ3LCAweDRkODdlOGNjLCAweDczNjM2YmE1LCAweGY4MjU3M2UyLAorCTB4ZjhhNGRjYmQsIDB4Nzc2N2U4MDAsIDB4ZjAwMjUyYWQsIDB4YzQxZjc4ODgsIDB4MGQxNjY3MGIsIDB4M2QzOGUzZTcsCisJMHg3ZDJiNzc5MiwgMHg5ODM5NzZlZSwgMHg2YTQwY2VkZiwgMHgxZjc4NWUwMCwgMHgxZmM3MGViMiwgMHhlMzA3OWZjMSwKKwkweDllMGY3YzQyLCAweDMyYzJkMmU3LCAweGMwYzlmZmZhLCAweGVmYjhlZDk2LCAweDQ4M2U2MDM3LCAweGVmMWJkZjZkLAorCTB4MzVhZGZlODAsIDB4Yzc4YzVlOTIsIDB4ZDUyZGQ5YzYsIDB4MDJiZWI3ODksIDB4ZjY3ODNmZjQsIDB4MDE4Nzk2ZDQsCisJMHg3YWY2ZGJhZSwgMHhjZTI1ZWYzMCwgMHg5YmZlYjkxZSwgMHhiMzNmM2VjYywgMHgzZjAwYTJkZCwgMHg5YjcyZTU2YywKKwkweDI3Yzg4ZmRhLCAweDNmNmM1ZGMxLCAweDFlNDc2ZjE5LCAweDI3ZjdhOTc1LCAweGRkYWZlNTQzLCAweDA1ZjA2NDhlLAorCTB4MGIzY2IzYjcsIDB4N2MwM2RmMjEsIDB4NzBkODM3ZmYsIDB4ZDdmNDAxM2UsIDB4MTNjMTBkYmYsIDB4OGRiMjBmOTcsCisJMHg4ZmY0ODNlNywgMHhlNmYyMGY5ZSwgMHhlODEwNGIwZSwgMHgwOWFmN2NlMSwgMHg4ZjMyOTJmZCwgMHg0NWI1OWQ3YiwKKwkweDc1MjQwMDFmLCAweDAxY2YwZTM4LCAweDcyNTgxYjc5LCAweGNhMWFlN2U2LCAweDhiMGY3MjdmLCAweDhmMTJjOTIzLAorCTB4NGI0YWZkMzMsIDB4NmJjYzVjNTgsIDB4ODA4YmZmMDcsIDB4Nzc0Yzc2NWIsIDB4M2U0MDhiN2IsIDB4NzEzNzc5YjIsCisJMHhiMzkzNTFiZiwgMHgyZWYxNjE0MCwgMHg5NGQ0Mzc5NiwgMHg3YjAwMmUxMCwgMHg4N2FlNTVlYSwgMHg1ZTJjY2M5YSwKKwkweDg3ZDBlODM1LCAweDI2YTM1ZDYxLCAweDE4NWQxZmZmLCAweDkzZGY2MmQ3LCAweGQ4OTQxYTVmLCAweDg4NGY1NmI4LAorCTB4MGEyNzc1ZDksIDB4OWQzZDYxMzUsIDB4MDdkODBmNjcsIDB4NTlhYjZlYjAsIDB4OWYyODZiN2MsIDB4YzdhMWJmNjAsCisJMHg1ODkwZTJjMCwgMHg0MWNjZWMxZSwgMHhlMjJmNTkzOSwgMHgzZjk5ZmI1NiwgMHhhN2M3OWVhZSwgMHhmNDVhY2M0ZSwKKwkweDc0NWNhNDBjLCAweGIwMzVhZDQ4LCAweGFhYjBiYjNmLCAweDBmZThmZDEyLCAweDlmMTMzOTNjLCAweDdlZDUyYmY1LAorCTB4YTdlMDQ1ZmYsIDB4MjM4ZTFiY2YsIDB4MWQ3YmZmMGIsIDB4YmQ5OWU4ZjEsIDB4ZDQ0N2VjM2MsIDB4NTk0NWZiNTAsCisJMHhiZTgxNTcyOSwgMHgxNWY2MjFjYywgMHgyMDk1ZmYyMCwgMHhlOWFiYWQ1ZCwgMHhjMTNlODNiMywgMHgxMjM0OTc2OCwKKwkweGE3NzIzOWQ4LCAweGZiZWIwY2NiLCAweGY1MDY4NzY4LCAweGUzNDNiMDU0LCAweGNmMDI3Njg1LCAweDhmY2NjOTM5LAorCTB4ZjMzMjRkNzQsIDB4MGFhNWQwNmIsIDB4ZDllMjM4YzEsIDB4MDc3MWUzYTEsIDB4YTI3MmRmZGUsIDB4MjM1M2MzMDksCisJMHg3NmEzZTdiMSwgMHg3ZDM0NjZiOSwgMHhkMGViZmEyZCwgMHg0ZmMxMWFiNSwgMHhhMGQ0Y2QxNywgMHhkZTgyZmJkZiwKKwkweGM2ZmQxNzNiLCAweDc5MDIwMmNlLCAweGQ2YjYxZDU0LCAweDFlYWMzNTk1LCAweDI5ODJlNzc5LCAweGViZmFjM2VhLAorCTB4MTI0ODY2NjQsIDB4MzNmMjA5YzUsIDB4Y2JlNzk5MzUsIDB4NjE2ZGUxYzUsIDB4MWYxY2JhOTcsIDB4YTkwYzY5OGYsCisJMHgzZmM0ZjVjYiwgMHhjNThmMmQyMSwgMHhhN2RmNjIwZiwgMHg3NWY5MzMyNiwgMHhjNzBlNTU2MSwgMHhlM2YzMDdiNywKKwkweDY3OTdmY2M0LCAweDMyNjliYzMwLCAweGIzMzczM2Q5LCAweDQxZDAyZTZhLCAweDczOTdjNDJlLCAweGFiZmNjOWUwLAorCTB4N2YwODI2NzQsIDB4MDkyZTc1ZWUsIDB4ZGUwZTIzZTksIDB4ODBkYTMwMGUsIDB4M2M1OTNhYmUsIDB4M2Y4NTZmZjQsCisJMHhlNGNhZWUxZSwgMHhiYzFmYWUxNCwgMHhkNjVmODg2ZSwgMHg4ZjE4ZjVkYiwgMHg0OTNmNWNiZSwgMHgwZTVhYjI1ZCwKKwkweGZlYmY5NTBkLCAweDI3ZGIyY2ZkLCAweDllNzk2YTc1LCAweDUwZTUxZDhkLCAweGU1Y2Q5ZDlkLCAweDExZDllNDg0LAorCTB4NmE1NmY3ODYsIDB4M2EzY2MwMmYsIDB4M2Y2MDI1YjUsIDB4OGFkNWJiNGMsIDB4NmZkOTY4ZjMsIDB4ZjM3MDNmNDIsCisJMHhkMDJjODFiMiwgMHgwMzU1MmRlMywgMHg4OWI3MTAwNSwgMHgyYjQwMmZjNywgMHhkYjQ1ZjkwYiwgMHhmZWU4YjlkNSwKKwkweGQ4ODRlYzAzLCAweDRiNWYzYzc2LCAweGZlZjU2NzFkLCAweGY2MGNiOTIwLCAweGJmNzYyNzM5LCAweGI3NmFmYTAxLAorCTB4ZmQxNWY1MDksIDB4ZjAwNjAzYmYsIDB4ODM5Y2JjYjMsIDB4MzY4N2NjZjYsIDB4MGJiNDFiN2YsIDB4OWU1YmMzOTgsCisJMHg4NWJiMDFjZCwgMHhmZGNkNGRkOSwgMHgwYmIwMWU4NiwgMHhlMjYyM2FlYiwgMHhkNTlmZjA3YywgMHg1OTFmYjhlYSwKKwkweDNiZmY0NGU5LCAweDZmYmY1NmU5LCAweGRkZjcxNGQ4LCAweDE3NjAzODg4LCAweGJkM2FmM2FlLCAweDNiZjAyMjdmLAorCTB4N2Y5ODNiZDUsIDB4ODM1MWI2NzAsIDB4NWFmNTAzNzksIDB4Yjc5MDIyY2YsIDB4N2I2YTRkNjcsIDB4YWQ4ZGFjZmMsCisJMHg3NWExOTZkNywgMHhiNWJkYTBmNiwgMHhmNjc1Y2M2NSwgMHhkNzNhYzAxNCwgMHhiNjNmODg2YiwgMHg2NzU4NjY5ZiwKKwkweDdjNGRiZWJhLCAweDc4YmVjZjlkLCAweGYzYWMwMTc1LCAweDJlYWZiYmM3LCAweGE3NWU3NTgwLCAweGRmMDJmMmViLAorCTB4NWJmYzM5YjQsIDB4MjdiZjY5OTMsIDB4M2RhMWYwNmYsIDB4MmY1OGYyMjUsIDB4MjRmNzFlOTcsIDB4NDMyYmZkYWIsCisJMHhmZjIxZmZlNSwgMHgzMGZhNThjYSwgMHg1YTg3MDQzYywgMHg0YWY0YmExZiwgMHgzYTgzYzgwNiwgMHhkNWJmZTFhMywKKwkweGFhMzdmMDhiLCAweDQwNjhjZjFmLCAweDNmZmVjNzdmLCAweDA3NjZiYTdmLCAweDJkN2U4MWM4LCAweGJmYTIyM2RhLAorCTB4MGYzZmIyZmQsIDB4ZWZmZGExZWMsIDB4Njk0MTNkYjgsIDB4YjkxYmZlZWMsIDB4MjQ2ZGQ4NWYsIDB4ODhhYmYwNDEsCisJMHgyN2IwODA3ZCwgMHg1YmYxZTVlMywgMHgyNTFmM2U3YywgMHhiYjAwNmY3YiwgMHg4ZGZhY2JlNiwgMHg2MzNiZjgxYiwKKwkweGU3NjY1M2U4LCAweGNjM2M5MzZlLCAweDdlOGJkYzZmLCAweGYzN2Q5NmU0LCAweDNlMjdlMGVkLCAweGUzN2U2MjFkLAorCTB4ZDE4YjE3OTYsIDB4N2ExOGRjNmYsIDB4NjU3OTBjMmQsIDB4YzNiMjVmYTQsIDB4ZGI3MWEzZmUsIDB4MDdjODA0YjEsCisJMHhiYTVjZmIxMCwgMHg4YzkzM2RhZiwgMHhlZmRlYThmNCwgMHg0ODlkMGU5ZSwgMHgwYTAxZmM4MCwgMHg3MWU4MjU3NywKKwkweDA3YWEyYjhiLCAweGZiYTE2ZmJhLCAweDZjMjNjODNkLCAweGExODdhMzkxLCAweGMxMTcxNmRmLCAweDNlZDI5NzNjLAorCTB4YzQ0ZmZlZjUsIDB4ZjRmYTM3NzksIDB4ZjYzNzc3MjgsIDB4ZDc5MDIxNGIsIDB4NGU3ZjdhMjksIDB4OTIzNWU4MDYsCisJMHgyMDc4Yzc2MSwgMHhjOThiYjNlNywgMHhiMjk0ZDRkZSwgMHhmN2JhZjhkOCwgMHhlMWU0ZTRmMywgMHgwZDgxYjA3YywKKwkweDAzYmY0ODg5LCAweDgzYjVlMjNhLCAweGUzNjBkYjNjLCAweGY5NDY0Y2YyLCAweDhlNGRjN2Y2LCAweDYzMGZjYjEwLAorCTB4NjIxOGZmZWQsIDB4YzhhMzQyNzYsIDB4NTg0OTkzMGIsIDB4NjhiNWViYTYsIDB4NTg1ZGY3YjYsIDB4ZTFmNzkwNmYsCisJMHg1YjFmNzkzOCwgMHhiYmZiNzExNiwgMHg1MmY1MTg0OSwgMHhjYTE4MTkzMywgMHgxNzZkOGIwZiwgMHg3ODg3ZDcxZiwKKwkweGQyMWZhYWI4LCAweDFmODBhYzVhLCAweDA3YWI0ZWVjLCAweGI4Zjg4MWUwLCAweGY2YzgzZWJhLCAweDk2MWY5NGViLAorCTB4YWZkMzBjOTYsIDB4YmY0MTA3NTgsIDB4MWQwZmRjMmQsIDB4MDhmZTM4NjgsIDB4NGZhMDZmZDAsIDB4ZDc3ZDgzYjIsCisJMHhkYmY0NjFlNCwgMHg5MDViZjc0NCwgMHhlZmNmMWI0NywgMHgzNzlkNTdhNCwgMHg5N2ZmMTYzYSwgMHhkMWY1YThhNiwKKwkweGU0ZWZmOTUwLCAweDQ1M2ViZDVmLCAweGZlNjJmN2NkLCAweDM0M2Y2ZmMyLCAweGYxODk3ZWNmLCAweGUyYmNkYzY1LAorCTB4ZmVmMWE5ZjcsIDB4YmNjZmIxNzYsIDB4MjczODc5NWMsIDB4ODcwZjJkNDUsIDB4Nzk2NzdmY2EsIDB4MmViNDM3NTgsCisJMHgxZDUwZjJmMSwgMHhlNTliZjhjZiwgMHg1YzcwZmZlMSwgMHg0ZjdkOTllMywgMHgwM2JlYzAyNywgMHhhN2Q4NzhlYywKKwkweDYzYWVkY2FjLCAweGZkMTQxM2Y5LCAweGU5ZTJmMWIxLCAweGM1OTdhYjVhLCAweDVlYTJiNTRmLCAweGE2NTc4NzFkLAorCTB4ZTMzYzM4ZjMsIDB4ZDQ1ZWQ3ZWIsIDB4ZjMzNWJhZTIsIDB4M2VmMzcxMzgsIDB4MzY5YTA3OWIsIDB4OWM2MzE3NTgsCisJMHhiYTdlM2UzNiwgMHgwZTllZWM4NCwgMHg0NzFmMTU0YiwgMHhjZTdlMDI2ZCwgMHg3NTNjNzRiYiwgMHg4ZjhiMGE3NSwKKwkweDIwNzI1ODUyLCAweDZmM2UyMTZmLCAweGE3ZWIzNWViLCAweDc1OThmZTQ5LCAweDFiYTIyYWFmLCAweGRiZTg1MTgyLAorCTB4MzM4OTA3MjgsIDB4MTRjNmZkZTYsIDB4YzZiZjU3NjYsIDB4N2FkYzhiZjMsIDB4YWQ2MDhlNzYsIDB4ZmQ4NWUyY2QsCisJMHhmMmMzNWI4YywgMHhmMmUwN2U5ZiwgMHgxOGJjODI2ZCwgMHhmYWYxYzJhMywgMHg0MzQ0ZWRmMiwgMHhhZThjZjJmMSwKKwkweGIwNGFlNTE3LCAweDM5MDFlYWQ5LCAweGEyMzdmYzI4LCAweDVlM2M4YmZmLCAweDNmZmFkOTcxLCAweGZjZjdkZThlLAorCTB4M2M3YmQzMGYsIDB4ZjE4YmY2N2UsIDB4ZGRiOGQ2ZmUsIDB4MTUxYjhhN2EsIDB4ZTNhNDEwNWYsIDB4Y2E1ZjEwMjMsCisJMHg2M2JmNDkxOSwgMHgxZDE2MzNmNSwgMHgxZGYxNGQxZiwgMHhmZTc2NjE0OSwgMHhiODU3Y2MxNCwgMHgyOTYzMzk0YywKKwkweDNmMDA5ZThkLCAweDUwNjNkOTExLCAweDdlMDlhZmMwLCAweGFiOGZkNDEyLCAweGFhM2U3OGQzLCAweGU2MjY3Y2E3LAorCTB4MjU3M2IzNjksIDB4NThjZTFjZTIsIDB4NDMwN2U0NzYsIDB4YzhlY2MzZWIsIDB4OWY1Y2M2MGYsIDB4ZGU0NzY3MmYsCisJMHgwODdkZjBlZSwgMHhkMmIyNzY3NCwgMHgxZTAxZTc4YiwgMHg2MWY4NTFiNSwgMHg2MTljZjg3ZiwgMHhlMjJlNzNkNCwKKwkweGZjYTVjNjNjLCAweGQxYzQ1ZjJkLCAweDRiZmYxN2Q1LCAweDNhOTJkNDcyLCAweDc1Zjk1ZDk2LCAweDEzY2ZkMWNiLAorCTB4NzYzYTdmYzAsIDB4ZmY5ZTQxM2YsIDB4NDViYzQxMTksIDB4NmI2NDQ5ZjcsIDB4MTAzYjVmOGMsIDB4MTk3YmY5NjEsCisJMHhmZWYxNWUxYywgMHhhMWJlZjgzZiwgMHg5OTliZDUyMSwgMHhmYzdmZGY0YSwgMHgxMjQ4ZDFhZSwgMHg2NTJlOWVhOSwKKwkweDY3YzViMTcyLCAweDRiNDJiOGM1LCAweDY5N2ZjYjJmLCAweDhlNTA0NjU5LCAweGI0ZGY4MGI3LCAweDMzODlmYzA4LAorCTB4NGY3ZGQ4MDksIDB4MjAxM2ZkM2EsIDB4ZjdkMWVlOGYsIDB4MjI2ZDQxYWMsIDB4MTE2N2RiZjgsIDB4YmRjZWYzYjAsCisJMHg5YzMzY2FjYiwgMHg2Nzk4YzlmZSwgMHhlMzAwNmNiNywgMHhjZWIzZGQxOCwgMHhmOTU2MWU2MCwgMHg1MjNlOWYxNywKKwkweGEyZjA4YTUzLCAweDUwNjVjMTNmLCAweDNkYjk2NzlmLCAweGYxMzNjOTk1LCAweDZmODQzZDljLCAweDNmZjNmYTJmLAorCTB4ZGFmOTYwNmUsIDB4MGVkNzk3MDEsIDB4MGZlMTA5N2UsIDB4OGMxMTI4YjcsIDB4NjFlY2I0MmIsIDB4OTZiOTViYzYsCisJMHgzMGZjODdjZCwgMHg2NWE5ZTkwMywgMHhmODMxNjU0ZiwgMHhhOWFmNDk0ZCwgMHhmMmRkZWMxOCwgMHhkZjcxNWJkZiwKKwkweGU5ODNmMWY3LCAweGNmYjEyNzk4LCAweDdjMDJhZmU1LCAweDM3NDM0YWQ4LCAweDRkOWE3ZDgxLCAweGY3YmIwMWM3LAorCTB4MTUzN2RkZTMsIDB4ZmU0MmRjMDMsIDB4MzliZjAzYWQsIDB4NGQ5ZDdmMWQsIDB4NDYyNzE3ZWQsIDB4NjRiZjc3OTYsCisJMHgzM2VlMjY0NywgMHg1YWZlYWM5YiwgMHgxMzNhZmY5OCwgMHg5ZGI4MjM4MywgMHhmZWUxNGY5ZiwgMHgxN2ZlNzhmMiwKKwkweGQ1YWE5ZjdjLCAweGRmYTkzOGUwLCAweDVjOWM2MjM1LCAweDNhNzU4NWM4LCAweDBkZTYzN2UyLCAweDllMTI5M2NiLAorCTB4ZjE3MDE4NjcsIDB4OTlmZWM3M2MsIDB4OTc4NTRmMmMsIDB4YmU3NTJlYWQsIDB4MzdjOTQ3ZTcsIDB4MjUzYzAwOTQsCisJMHg4YjU3ZjJhOSwgMHhlNDQ3NTk2NywgMHhiMmE0OTQwYiwgMHg1Y2VhOTY3OCwgMHhiMzIyZTVhMiwgMHg3YWVkNzNhNywKKwkweDRhZGIyN2E0LCAweDk0NTRlMmMyLCAweGJmYWVjMDllLCAweDA2OTkxYTM2LCAweGJiZjJiY2U3LCAweDllMDJkN2MzLAorCTB4MjBkNDVmZjcsIDB4NDc5OWU0OWUsIDB4Mjg5MzNlMzAsIDB4NTZmMmYxYjEsIDB4MDA0ZTc0MGYsIDB4YWRmZDhjN2YsCisJMHg5NTQ5NjBlYiwgMHhhMDE1N2IyZSwgMHhlZmE3NDlmNCwgMHhmZmU0NTQ4MSwgMHhhZjE4NDJkNiwgMHgyYzc0NWZlYSwKKwkweDA1OWY3MmJmLCAweDU5ZGQwY2ZkLCAweDc5NWY5ODRkLCAweGVhODMzZGVlLCAweDMzZmM0ZTdjLCAweDNlNjA1NjQ4LAorCTB4NmZkZjZlNjUsIDB4ZGI2MDRlMzEsIDB4Mjc5YThkMjMsIDB4MTVhYTQ0ZmIsIDB4MTgyNWE2ZjksIDB4MzYzOThlOTksCisJMHhjZTUwYmFkNywgMHgxZjdlZmJjYSwgMHhlZTQzYmIwNCwgMHg5MTAyNDE5NCwgMHgwMzU3OWQwZSwgMHhjYjgyZDNlNywKKwkweGM3ZjVmYTA5LCAweGIwMzVkYjc3LCAweDNmM2NkOTVlLCAweDdmZmY3MDY2LCAweGJlZTNmMTRlLCAweDQyMDVjNDQ1LAorCTB4Mzc0OWJmMmMsIDB4YzdlYzA4ZjAsIDB4ZGYwM2U1ZTQsIDB4ZWM3YWMyMGMsIDB4YzA1YTY4NzEsIDB4YjY4YmFhN2YsCisJMHg5ZjY1ZGZhMCwgMHhkOWFjZmQwNSwgMHhiZTJiNzk3ZCwgMHgyYmQ5Y2I0MSwgMHgxYjA3MThlZCwgMHg2Y2VlZTU3YywKKwkweGYzYTdlN2NjLCAweDNjY2EzZjFjLCAweGY5NjU0YTFmLCAweDhiM2VmMjQ4LCAweGZjOTlmNDA2LCAweGE4YzBmMTA0LAorCTB4MGFhNTIzYjIsIDB4OTY4YTdlZTEsIDB4MDdkZjNmNjksIDB4OGUxZTRhN2EsIDB4MGEzZjgyOWIsIDB4YWE0MzU0ZjQsCisJMHhjZGQwMDc3ZiwgMHhhNWE0YjlkMCwgMHg4OTJlNzY2NiwgMHgyZGI1YTc5ZiwgMHg5YzE3NmY3ZCwgMHhmZGMyZDlmNywKKwkweDRmZjcwN2I5LCAweGJmZmU4NTllLCAweDc1ODI1OTRlLCAweGY5NjBlMGI4LCAweGIyYTQyZjk1LCAweGZjNDhlMjc4LAorCTB4ZDYzY2M0MWYsIDB4NjViZjdkZGMsIDB4MDJlMjhkN2EsIDB4OGM3NTk3ZmEsIDB4NTc0ZWU0NWUsIDB4NWYxOWY4MGYsCisJMHhkZTYzZjA0OSwgMHg2MTFkNzVlZSwgMHhlY2NkYzYyZCwgMHhhMzVjN2YyNywgMHhkNjc3ZWNjNCwgMHhiMmQzM2QzMywKKwkweGUzY2ZlZDkzLCAweGQyOTczN2Y3LCAweDkyMWViZjJmLCAweDBjYmY0YzMzLCAweDc2NGVmZjk1LCAweGY0ZTJlZmNiLAorCTB4NmZiY2RmY2EsIDB4NWVmZGVhMjEsIDB4YmYxMmZkYmMsIDB4OGY2MTFiYmYsIDB4OTYzN2Y1YzcsIDB4NTBmMjIzMWQsCisJMHg2MWM3ODZhYSwgMHhkODRkYjRmNiwgMHg5ZTU1NDE0OSwgMHg5Zjk1OTU0ZSwgMHhmYmFhMzQzYiwgMHg0NzY0OWY1ZiwKKwkweDNiNzkxMDdhLCAweDcyY2FlZDI5LCAweGZlOGZkYmM4LCAweDRlZGZhMDg4LCAweDNjODkxNWU0LCAweGNiMTU2MGEyLAorCTB4OGM2YTA5ZjcsIDB4NGRkMTJlNzgsIDB4Njg3ZjMwYmEsIDB4MTI0YjA5MWMsIDB4ZjAwNmQ3ZmEsIDB4ZTQyYTZkZmMsCisJMHg0ZmVmZDExMSwgMHhmZjYyZTZhNCwgMHhhNTY3ODk5YiwgMHgyMmE2ZTUxNiwgMHhjODI2ZmMwMSwgMHhiODAyNDkzZiwKKwkweGMxMTYxYjQzLCAweDcxNTliNzc4LCAweDlmZTQxMzNjLCAweDAzM2VlMTI0LCAweGM3ZGQzOWY5LCAweDM1YTc1NmYyLAorCTB4M2E0M2I4YjAsIDB4NGU1MGNmZDUsIDB4Njk3NDY3Y2YsIDB4M2NjN2FiOWEsIDB4MjI1NzkxNTYsIDB4NWUwNDRmZjIsCisJMHhkM2JlMzhhYSwgMHgwMWNhMmMyNywgMHg1NGYyMjhiOSwgMHhlNTNkOTlkNiwgMHgzOWMxMTc2MCwgMHgxY2JmMzg2OCwKKwkweGJjZjMzNDZjLCAweDc3NmZkNjEzLCAweDRmOWUyZTYzLCAweDI5NzliMmZlLCAweGY5MTY3OGYxLCAweDdmNDRmYTI5LAorCTB4ZTQ2Y2JiYTYsIDB4Mzc0MTY3MzksIDB4NzA4OWViMzEsIDB4ZWNjN2RjNmQsIDB4M2QwNmFhZmMsIDB4NzFiMDYzY2UsCisJMHgwNzJiZmEwNiwgMHhlYzA0MzUxYiwgMHgwMzdlYWE4MSwgMHhmMWI4YzNhMywgMHg5M2Q1Y2UzNiwgMHg4NzJiZjQzMCwKKwkweDA1NGYyMDRjLCAweGNlY2E1YzNkLCAweDA4NWJlYmE1LCAweDZkODNlMGZlLCAweDUyNGVmMzNiLCAweGQ2ZDQzZmRlLAorCTB4OTM0MWNmOGIsIDB4MTJiZGFiZDQsIDB4MDNjZWExY2YsIDB4YjQ4ZGY1YzksIDB4MWFmOTVhZmMsIDB4NjY4OWI3YzgsCisJMHg2YTg0OTQ0OSwgMHg5NmZhYWZkMywgMHg2MGM0ZjU0YywgMHgyODdkZjQ3MiwgMHg3YmUxYmVkZiwgMHhiYTNlM2NhYywKKwkweDliZWRhMjQ1LCAweGVkNjIzZWQzLCAweGE5ZDMzNjgxLCAweGVmZmY1ZWQ4LCAweDU3ZWI0MWI1LCAweDI2N2Y3ZmQwLAorCTB4MzUxY2Y5ZjEsIDB4ZWJmNDY0ZWUsIDB4M2Y0MTEyM2MsIDB4YTU3ZmQ3MTIsIDB4YWRiYTNlNGMsIDB4ZGM5ZmI0N2EsCisJMHg1NDk1MWYzYywgMHg4ODU0ZmNmMywgMHg3YjcyZDBmOCwgMHhlZmM2MzE1YSwgMHgxM2Q5NDRhZCwgMHgwMzBjZmE4MSwKKwkweGUzMDgyN2IzLCAweGNjZjFmNjg3LCAweGY0ZTQ2ZDZmLCAweGJmODQzMjQwLCAweGYyMDgyMDZhLCAweDgxYzczZGFlLAorCTB4ZTdjOTBmZGYsIDB4ZjMxMDg2M2QsIDB4OGZmMWIxOWIsIDB4OWUwNTc4YmUsIDB4YjY3OTEyNGIsIDB4NjczM2Q4ODQsCisJMHgzNmY5ODE1ZiwgMHgxMzVhZjJhYSwgMHhkYjI5YTczZiwgMHg3YmJjZTEzMywgMHhjMWRiOGViYiwgMHhlNmM0N2NiYywKKwkweDA0ZjM4ODVmLCAweGRkZjZhNGJlLCAweDUwN2UxYmQxLCAweDc2NzRmYzA0LCAweDQxZjMwZmVmLCAweGE3YThkZGNlLAorCTB4ZTQ1MTg0ZmIsIDB4OTMzYTU5NWEsIDB4ZWIzYTgzNmIsIDB4Yjc3ZTg5NGEsIDB4MDE2ZmU2YzYsIDB4MzJjNzdjM2EsCisJMHgzMTFjM2E2ZiwgMHhhOTU0OWI5YSwgMHhjMWJjMDA3NywgMHhkNzgwYjRlNywgMHg4ZTI3NGU2NCwgMHg0NzNlMGNkOSwKKwkweDNjODI0ZmI1LCAweDFiMTM3NmQ0LCAweDdiMmZkOTM3LCAweDdmODQ1Y2YxLCAweDg1MWI3NGI2LCAweGYyNjI1ZGJiLAorCTB4ODg5NDdlOWIsIDB4OTJhMTU1NzYsIDB4MjZjODcxMDgsIDB4Y2I1NWVlN2UsIDB4Y2I5Njg4ZTUsIDB4MWI2ZTdmOTEsCisJMHhjMWE5OTdjOCwgMHgxM2VmNGQ3OCwgMHg3ZmU3YjA1YSwgMHhiZmUyZTNjYiwgMHg5ZjlmNTFjZCwgMHhiODMzNzFlOCwKKwkweDU2OTY3M2M1LCAweGNmZTgwMmI5LCAweDUyM2FhYmE1LCAweGFiNDBlOTRiLCAweGZkNzA4NGY3LCAweDM3MTg2ZDMyLAorCTB4NzcyYjYwM2UsIDB4YTVlZmQwMGYsIDB4NDI5NTFmZWMsIDB4ZTY3Yjc3M2UsIDB4YmUyMTRhOGYsIDB4ZGM3YTc1YTcsCisJMHg4ZjcyOThiZSwgMHgzNTdmZDE5YiwgMHg1OWJjMDNiNCwgMHhlZmMxNGI1YSwgMHg5N2Y1YjVmYiwgMHhmYTJiZmI0OCwKKwkweGY1MGRmZGYyLCAweDM1NzA2MDYzLCAweDcwNTlhMzE5LCAweDkzNTlmZTZlLCAweGZmYWMzYjdmLCAweDMwYzdmOTg1LAorCTB4ZmE0MGZjMmUsIDB4YWYyMWY3ZDEsIDB4ZDE4ZWE4ZTMsIDB4ZTc5MzMwNWQsIDB4NjllZTkzZTMsIDB4MGVlZTk0MDksCisJMHg1ZTc4MzllNywgMHgxZWJmOGIwYSwgMHhhOGZjYzA5ZSwgMHhmY2IxN2U1NCwgMHhlNjEyODlkMSwgMHg2NmNlZDYyMSwKKwkweDI2NmY2MmU3LCAweGZhMDE4ZTkxLCAweDY4NTkzYTNkLCAweDFjOGFmNGZkLCAweDc5NmI3ZmI0LCAweDc3ZjRjODllLAorCTB4N2ViMDA5N2MsIDB4Y2E4ZjZmZDMsIDB4YjJjN2Y3MjAsIDB4ZWI3NDZlZTcsIDB4M2UxODgxOTQsIDB4OTc1MTQ5YmUsCisJMHg5NzU0MmU2ZiwgMHg5NzUxZTViZiwgMHg5N2YxNWRiZiwgMHg5MzY1YjEwOSwgMHhlODEwN2JkOSwgMHhkZjg5NTVmNSwKKwkweGIxMGQ3MTQ3LCAweGE0YmE3ZjIzLCAweDkzNWRkODIwLCAweGU3ZTc0YTVmLCAweGU1M2U1OTg5LCAweGYxN2VmOTRmLAorCTB4ZjU4MjBhYTUsIDB4NWI4ZDNiMjksIDB4ZmRjZjUwOGQsIDB4M2Y1ZTVhZWYsIDB4ZDk4YzRkZDksIDB4ZWEwN2M0NGUsCisJMHhmM2M0YThlOSwgMHg5MzE4NWQzMiwgMHhiMWVmN2IyMiwgMHg2ZDM0M2YzMywgMHhlY2ZkYTdhYiwgMHgxZjIwYWY5ZCwKKwkweGU0MzU1OGE3LCAweGE1ZWJjMDliLCAweDA0YzNiNDQ2LCAweDI4OWJiNDVmLCAweDk2M2M1MzdkLCAweDgxOWEzMzhmLAorCTB4OWU3NWRiZGUsIDB4ZDY5N2QwZjUsIDB4MmY0MDUwNmMsIDB4YjExODI2NTcsIDB4YzgzZmVkNmYsIDB4OWI5NmQ3YTgsCisJMHhjYjRlYzQwYywgMHg2MzM3MWYwNywgMHgzZTI2NWNiOSwgMHgyMGExMjNjOCwgMHg1MWU3ODZjZSwgMHgwYWQ0Mjc5ZCwKKwkweDYwZWRhNWYzLCAweDE2MGVlZGJlLCAweGViOTZkNzU3LCAweDdlZDNjZjUxLCAweDNlMGY1ZDcxLCAweDljMTEwOWExLAorCTB4Zjk4Y2E1N2YsIDB4YzE2NjFjYTYsIDB4N2MyNDc0NzcsIDB4NmJlNzM0ZmYsIDB4NTE4NDg2YWQsIDB4N2JiM2E1OGUsCisJMHhmZWQxMGUzOSwgMHhiZjgzZGZhMSwgMHhkZmEwZjZkMiwgMHgxM2I5NTBhZSwgMHgyNzFiY2ZlYSwgMHhjMGE4YjllMCwKKwkweDU5MmY3OWQwLCAweGRhMTVjMDAzLCAweDY3ZTg3Y2I5LCAweDNmMDRmMmU3LCAweGE1NDJmOTBiLCAweDg1MmJiZTVlLAorCTB4ZjgxNDkwMzAsIDB4MDUzYjA1MGYsIDB4ZmI4MjA0ZWMsIDB4Y2NiNzExMDAsIDB4ZDk3YThhMzQsIDB4MGRhNmZkMGIsCisJMHhlMGU3NjdiNSwgMHg1Njk5Nzg1MiwgMHg2MDI1MzU4NSwgMHgyN2YxYmNhNywgMHhlNGIxYzNhMCwgMHg5MzFhNjE0NSwKKwkweGU0MjllMjEzLCAweGMzYzMxNmM1LCAweDE5YWY2YTQ3LCAweGVmMGEzZDZkLCAweDliMGNmMmM3LCAweDg0YzdhZDlkLAorCTB4YWQ0YmUwMGMsIDB4ZTgwNjQyNzksIDB4NDc4Nzc2Y2QsIDB4MGI5NGM1ZjEsIDB4YWU2YTc2ZTksIDB4ZGI0NWYwMTMsCisJMHgzNWFkZjJkMSwgMHgxOGU1ZjJjNywgMHhjNjk4NTRmZCwgMHhlNzZkMDBlNCwgMHgxZWYwYTI0ZCwgMHhjMDE5MjkzNCwKKwkweGRiOGNhM2JmLCAweDdjYjVjNmNjLCAweGU5YmFlM2JkLCAweDQxZGRiNGI4LCAweGI2OTcxZDFiLCAweDg0MzI2NmRiLAorCTB4OGRhMzA5MzUsIDB4NzhjMGExNWYsIDB4YTI5NzFhOTcsIDB4ODMzZjkxMWQsIDB4OTNhNTAzYWYsIDB4MGVjMWY4MjAsCisJMHhhZjQ4MzRkYSwgMHhmMmJlNzgzMywgMHgxZTM2NjRjMSwgMHhmZmU3NTQyOSwgMHhmOGU5OWJlNCwgMHhjZWE2NWY5OCwKKwkweGRhNTFiOWY3LCAweGZhN2EwMWQ0LCAweDU2YzI1MzY5LCAweDM4MzdjZmEwLCAweGZjYjYxY2RkLCAweDY5ZDgzZTQzLAorCTB4MzgyYmNjNmYsIDB4NzEyNjcyODQsIDB4ZDExMDA3NzksIDB4ZjI4YmQyMGMsIDB4MGJjMWM4NDYsIDB4YTFjYWM3NjksCisJMHg4ZGUxZTU0YywgMHgwZmRlNzQ2OSwgMHgwNzlkMWVlNCwgMHgzYzcyMWY5ZCwgMHhhNWY2OGY5ZCwgMHg1NjkzNWJkOSwKKwkweDQxN2UxMjM2LCAweGEwNmUwMjlmLCAweDIxOGJlMDUzLCAweDVmODM4ZDNhLCAweGE1YjkxYmQwLCAweDM3MjUxMzE3LAorCTB4OWUxNzNiNTMsIDB4YTQyNWVlYzIsIDB4MmJjNWU1OTUsIDB4YTNmM2MzOTksIDB4ZDhkZDNlNDQsIDB4MThkMWU2Y2EsCisJMHg3NDZmYjg0NCwgMHhlNmYzMThmYywgMHhmZmU3MThlZSwgMHhmNzM1YzAxZSwgMHhiZWYwNGZjYSwgMHgzZjllZTIyMiwKKwkweDE0NzdmNjAxLCAweGM5Njk3OWRlLCAweGM2ZjA3YmZmLCAweGNhOTdmOWRiLCAweGNmOGIxZjBmLCAweGFjZDJmOGM1LAorCTB4MWUxZjk4OWQsIDB4N2NjNTZkOTgsIDB4M2YzYzY5ZjEsIDB4YzFhMGQwMzYsIDB4MGZkZDAwYjgsIDB4ODVhMjNlZTIsCisJMHg5NzIwNDMxOCwgMHg1Y2JiNzJhNywgMHg0NTc4NWI5YywgMHhlMGQ2ZmU2MiwgMHg3ZDQ1MDY4YiwgMHhkZTdjNTEzZiwKKwkweGU5Nzk4MmI4LCAweGJmMmM2NWMxLCAweDZmN2VjODdjLCAweDFmN2VkMDU2LCAweDljZmM3M2QyLCAweDkzMzE3NzQ0LAorCTB4MjhmN2RkZWQsIDB4ZTY4OWZiZWEsIDB4NDRmZGY1MTMsIDB4NzEyMWVkMGIsIDB4MzI5NDhhNmYsIDB4ZGRkZmJmOWMsCisJMHhiYmZlOTA0MywgMHg5ZjU4Yjk2ZCwgMHg4OGZhNjVhZSwgMHhhM2U5ODM3YywgMHhiYWEyMWNlZSwgMHgzOTlkNjkxZiwKKwkweDk0ZjMxMTM0LCAweDQ2YzE1ZTc4LCAweDZmZjgzZmM4LCAweDlhN2UwYmYyLCAweGMyZmNhOTI2LCAweGM5YWZlNTQzLAorCTB4ZjBlNmRjMmYsIDB4NWIzYTAyZWYsIDB4OTJjZGU0NTgsIDB4ZWJkNjNkMjgsIDB4ZDI5ODdmOTksIDB4ODEwOGE2ZWIsCisJMHg3Y2Q2YzU3NCwgMHg0NGRkYTdkOCwgMHhlNGQyZGY1YSwgMHgwMmZlYmQyMSwgMHhhNTMyNzVlOSwgMHhiZDE1M2NkNywKKwkweDE1ZmM2MWVlLCAweGU4MmQyMTQ0LCAweDBiNGU4ODc1LCAweGZkMDBmM2UzLCAweDZlZGM2MGZiLCAweDViZWZlZjQ3LAorCTB4NmZkMzVmNjAsIDB4NjgzY2IwZjAsIDB4MmYxOWQ3OTYsIDB4NTllMDYyMWYsIDB4NWM3ODMzMjAsIDB4ZjNjMjJkNWEsCisJMHgwZjEzZjQzYSwgMHg0ZGYwZTVjZiwgMHgxMmE2OWQyYywgMHhmMTYzMWZjNiwgMHg4MjRjYWE0ZiwgMHhmZTYxOTJiNiwKKwkweDZmZmQ5OTMxLCAweDdjNDNiOGMxLCAweGNmZGIwOGY0LCAweDZiNWI4MDhlLCAweDczOWE3YTQ1LCAweDA1N2Y4YjA3LAorCTB4ODAyZWNjMmMsIDB4MWQxYTU4MzgsIDB4N2YxZjI2N2YsIDB4ZGFhZmE3NGUsIDB4NGE2NmVkMDEsIDB4ZmE2MTBmMGMsCisJMHgxNjdmODUwZiwgMHhkZmQ5OWZhZiwgMHhiMzcwNzk4YywgMHg2M2M3NzVhYSwgMHgyZjIxMjBlZCwgMHgyZTZkZGM0NSwKKwkweDdkYWI3ZjZmLCAweGQyZjIwZWE2LCAweGUzYWFkNzY3LCAweDY0ZWY3MzVkLCAweGIzMzliNmYxLCAweDI1Y2NmZGQ1LAorCTB4N2NjMTNmYWIsIDB4MDNhYWQyNGQsIDB4NTNiZGNkZmMsIDB4ZGE0OWZmNWQsIDB4MDI2YzljNTAsIDB4NzEwZWM5YzQsCisJMHhlNTIwZDAzZiwgMHhkN2EzZTAxMywgMHhiYTZmMTc5MywgMHg4NGY5ZDI4NywgMHg4MDk1MTQ5ZiwgMHg5NDg2ZjBkZiwKKwkweGQwNGY2ZGM2LCAweDI3MWJiM2YyLCAweDk0ZjVmOTYxLCAweDI4ZmY3ZWVmLCAweGMwMjk2ZmQ0LCAweGUyNWMzNTcyLAorCTB4ZTA1NmZiMDQsIDB4ODU2N2NhNDMsIDB4YzhjYzc3ZTUsIDB4YzI3ZDAwNDksIDB4ZTA4N2JkZmIsIDB4ZGZkOWI3N2IsCisJMHg3M2I2OTMzZCwgMHgzY2M1Yzk0ZiwgMHhkN2VlNmFkNiwgMHhlYWM4NWMxOCwgMHhjNmQyYmU2ZiwgMHg1MmVmOTU1MiwKKwkweDZkNWM1ZmQwLCAweDFkMzVmNzY2LCAweDA0YmI3ZTI5LCAweDczYWJhYWYyLCAweGQ1ZTRiOTc5LCAweDI0M2U1MDQ5LAorCTB4M2FmNzgyN2QsIDB4Y2FiNjZiOWMsIDB4ZTkyZDBlYjAsIDB4YjkzZWNmY2MsIDB4YTQ0ZjBhNTAsIDB4ZjI3NmE5NzgsCisJMHhiY2Q5OWJmZSwgMHg0YjllNGI2YSwgMHhhZWE5M2UwNywgMHhmNjRjZmQ2MiwgMHg0MWU2NzY1NCwgMHgyYzc5Y2QzYiwKKwkweDI2Mzc0YjlmLCAweGJmMDVmZTAwLCAweDk1N2RmMGU1LCAweDVjN2QyYmIwLCAweDNkZTRiYzRlLCAweGZiNDQ5MWQ2LAorCTB4MGYyNTE5ZjUsIDB4NzE1N2QxNGMsIDB4NjY0YmRkOGMsIDB4N2QwM2U3NjUsIDB4ZmMxOTFjZGUsIDB4MmNiY2QzZjQsCisJMHhiOGNhYjZlZiwgMHhlMWU0MGQzYywgMHgyOTdkN2UyZCwgMHgyYzZlY2JjYywgMHgxMTc5MDQzZSwgMHg2NTk1MTU4OSwKKwkweDI0NmRhNzk4LCAweGZlOTRiZWI4LCAweDNmMDNhN2M3LCAweDU2NDlmZDVlLCAweDU1OWQxMDAyLCAweGJlODJmZjRkLAorCTB4YWZiYTBhNjYsIDB4ZTUzN2QzNTYsIDB4NjVlOWM5ZGIsIDB4MmFkZjk2OTcsIDB4ZDMwZDM2ZmEsIDB4M2VmNjU4ZjcsCisJMHhlMTAyYWI4NSwgMHhhZjVhODZmYSwgMHhjNzEzOGQwZCwgMHg4ZWUzZjE5ZiwgMHgyZmUwMzcyNSwgMHhjMzBlZmU1NiwKKwkweDk4N2M4YmQ3LCAweDc5OGRkOTAxLCAweDgyNWRhN2MwLCAweDM4MDI2ZjRmLCAweDllMDg5YWY0LCAweDNjOTZjYThmLAorCTB4NzE4MGYwOTMsIDB4N2E4OGM3ODUsIDB4MDU1ZjhlMmYsIDB4MzNlMDk5N2MsIDB4MTcwOTE5MmYsIDB4NmVjMmM5ZmMsCisJMHhmMDJlN2Y2NSwgMHg3YWYwNjRhMywgMHgzODk3OWRmYSwgMHhlM2EyZTE4NywgMHg3YTBlOTFkZiwgMHhjZjA2MTFmYywKKwkweGM5OTVhOTY2LCAweDExMmZiZTE5LCAweDMxMTY5N2ZlLCAweDdjZjUzZWRmLCAweDFlZWNjZGNiLCAweGNiZjgzNzAzLAorCTB4M2M1Mjc2MzAsIDB4Y2JlZTA4NjksIDB4OWYzMTA3NTgsIDB4YjNlN2Q3MDAsIDB4OWU5YjNlOGQsIDB4NDczNmVkY2UsCisJMHhlZGNmZDIzZCwgMHgyODNhYTM1NCwgMHhmZjc0YzI1ZSwgMHhkNDFlNzAwZiwgMHg3ZWMxZjcwNCwgMHg2MmYxMjE2ZiwKKwkweDQ3ZDI5Y2ZjLCAweDZlYzYzZDIwLCAweGUzYzZmMDEyLCAweGI5MGM2NWE5LCAweDc4OWYzZjFhLCAweDViYWYwY2ZjLAorCTB4ZTI5ZTBkMjQsIDB4N2NkMGUxZmMsIDB4ZjE5ZTczMmYsIDB4YWY0YjhhZjYsIDB4YjkzYTViZjYsIDB4ZWMzOWQxN2YsCisJMHhmYTg0MmM0ZiwgMHhhMGY2NjI1YSwgMHhlMTIzZDEzZiwgMHhkYTk2YWY3ZSwgMHg2YmE3MjAxZiwgMHg3MWZhMDg2YiwKKwkweGZhMGQ1NjljLCAweDMyMWQ4NTEzLCAweGZmNWM5ZjE2LCAweDZhYjcyNjRkLCAweGY3M2YwODliLCAweDRmMTdlNmM4LAorCTB4ZTA2NGE5OGYsIDB4MWFkNjc4N2UsIDB4ODAwYjBkOTUsIDB4YWFhYzFiZmYsIDB4NTZiNTA2NzMsIDB4NGU3ODhmMTYsCisJMHg1MDMyMTFjOCwgMHhhODdmN2EwNiwgMHgwZmVmNDIzYywgMHg4YTFjODE5NCwgMHhmNmFlN2ZiZiwgMHgzYjdiZjMyMiwKKwkweGFjZjg0YTJmLCAweDAzMmIxY2Y1LCAweDE5YWNlZmJkLCAweDU2NzkwMzI4LCAweDE0ZmVmNzY3LCAweDEzZGM1NWQ2LAorCTB4YmRjZjhmMTksIDB4OTc5MTFhZTksIDB4MWE3NDU5NzIsIDB4MGUyMjQ3Y2YsIDB4N2ZlNmM0N2EsIDB4M2ZjNjNkMzksCisJMHhhMDhhNTY3NSwgMHhjYmI1NzU5ZiwgMHhjZmU3ZTdjZSwgMHhkODc2N2EwMSwgMHhlZmMxMmE3MywgMHhhYWQ4ZGIzNCwKKwkweGQxMzhiYjAzLCAweGNlOTAzZmUxLCAweDVmMTdlOGU0LCAweDlhMTdlNmMwLCAweDU2ZGUzYzUyLCAweDY2NTg3ZmVkLAorCTB4ZWUxZTIyYzMsIDB4ODFiODc4ZTUsIDB4OWJmM2Q5ZWIsIDB4YTkwZmI4YjQsIDB4MGQzZTE2ZjYsIDB4OWJjMGEwYTEsCisJMHhiZTQyMTIzYSwgMHgxNDdlYTJmNSwgMHhhNzlkYzZmNywgMHhkYTE4NTUwNiwgMHg3ZDQzNmYzZiwgMHhmNTU3ZjhiYiwKKwkweGIwOWIyNzE4LCAweDE4OTQ0MzVlLCAweDY0MzEzOTdkLCAweDMyN2ZkZDU2LCAweDU1NTNhNzc5LCAweDVkMzdhMmJlLAorCTB4YmVjYWZlZDUsIDB4NzE3ZDU1NWMsIDB4ZmVhYTkyNzgsIDB4NTQ0YjM3YWEsIDB4NTRjOGIyZTUsIDB4ZGZhYmZiNTUsCisJMHhhZjk1NTJhOSwgMHg2YWExOTgxOSwgMHgzZGY0MDNiZiwgMHg0ZTM3ZTNjNSwgMHhmZmJkNTJjZiwgMHgzN2Y0ZTM2OCwKKwkweDVkN2QzZTIxLCAweGVmYWEzYmY0LCAweDA0M2Y3MDRmLCAweDg1MjM3YTA5LCAweDA0MGJmZTc0LCAweDUzYWM1ZWJkLAorCTB4OWFjZDRmN2QsIDB4N2MwZTU0YjAsIDB4YWMxNmZlY2YsIDB4OTVmNzc5NjYsIDB4ZmRiMTYzMTQsIDB4ZGI1MmVjMmQsCisJMHgyODkwMzcxMywgMHg4NGI2MmJlNiwgMHg0MDk4NGYyNCwgMHhiZWJhOWRkZSwgMHhmMTA3YWZiMSwgMHgwZjdiYTk3YSwKKwkweDZiZTZiODI2LCAweGM2OTc1NGMwLCAweDIyNjMzYjUxLCAweDBkNWM4MjIwLCAweGYxNjM4Mzc5LCAweGJmZDZhNWZiLAorCTB4YTk3ZmU0ODAsIDB4ZDViODM3ZjUsIDB4ZDQ1MjZmZWIsIDB4NTQyOTZmZWIsIDB4YTNjZGJmYWYsIDB4MGFjNGZmNWUsCisJMHhiYzNiZmFmNSwgMHhhYTRmZjVlYSwgMHhiMjdmYWY1MSwgMHhhOWZlYmQ0ZiwgMHg5ZmViZDU3MywgMHhmZmFmNTdlNiwKKwkweGJhZjUwNmI4LCAweGQ3YWFiNjY3LCAweDdhYTk3YjNiLCAweDRiODI3MzVkLCAweDc0ZjFmNTU0LCAweGM4NDllODIwLAorCTB4Zjc5NWJjY2YsIDB4YTQ1M2RiYWEsIDB4NDJlODYyNjgsIDB4NWYwMmQ5ZDAsIDB4OGQ2M2U2MDMsIDB4MzU0ODdhZWYsCisJMHg0YzdkM2M1ZSwgMHhmNDhmM2MyMCwgMHhlNTQ3ZDIyYiwgMHg3MjdmNmUzOCwgMHhhOTdhYTBiYSwgMHhkYTMyNWM2YSwKKwkweDczYzAzNzE5LCAweGZmNmUwNGVlLCAweDMzYjc0NmZiLCAweGQ1OGFmYzg0LCAweGU2ZmJiMWViLCAweDA4ZGFlNGIxLAorCTB4ZDFmN2M1N2QsIDB4ZDgyYmVhNjMsIDB4Zjc4NjliNDcsIDB4ZWZkMTYzZDEsIDB4NTllYTg0YmIsIDB4ZmEzNTdjMWMsCisJMHgzM2IwZWVjZiwgMHg5OTlhMGUzOCwgMHg1NDI5ZmYzZCwgMHhkMWRiNDM1ZCwgMHhkZTE0MTUzNiwgMHg3NDNlNjE3NywKKwkweDkzY2Q3N2ZjLCAweDFkZjIwZmQxLCAweDcxODNhYmQyLCAweDdjMTEyNGVmLCAweDdjNTEyM2NlLCAweDc1NWQ4OWZhLAorCTB4ZjEwMTY1YmUsIDB4NjQ1ZmI5ZTksIDB4YzlhOWUwMDksIDB4N2EwZTUwMzgsIDB4YTNmY2MyZmYsIDB4ZWU3YzYzZWYsCisJMHhkZDY1ZDI0OCwgMHhlMjFjNzIwNywgMHgzOTA5ZTMzZiwgMHg0OWM5ZTVjNSwgMHhmMmQxMDM4OCwgMHgyN2Y3MTMzOSwKKwkweDhhZTI4OTdhLCAweGVlMjllN2MxLCAweDI2OWJhY2Y3LCAweDVhMjU5ZWExLCAweGQ1YjFlNjMzLCAweDllYTEyZWRkLAorCTB4ZjYwZmZiYWEsIDB4ZjRjNzFmNmMsIDB4NTJlNzg4ZGEsIDB4NmUyZWQ3ODEsIDB4YTEzYjMwMWYsIDB4NjJkZDBlMGYsCisJMHhhZGY4OTBmYywgMHhlYzdhOGY2OCwgMHgzZmI0ZGViMCwgMHg0N2Y5ODcxNiwgMHhkYmIxN2Y3NiwgMHgyNWRjZTBjOCwKKwkweDg5YzJiOTExLCAweGRkNzEwNmM3LCAweDdjZTFmZDYxLCAweGUwYzhkYjliLCAweDQ2MjNhNWRiLCAweGUyNjRlZmMwLAorCTB4MzFmMGZiNDcsIDB4ZDYzYzhhOTksIDB4ZWZkNjI0ZWYsIDB4MTdmMDVjZDEsIDB4N2U2ZmNkOWEsIDB4YTlmMjFhYWIsCisJMHhmNDcyZTBlNSwgMHhhODhmN2ZkZiwgMHhiNjc3ZjdmZCwgMHhmZmJmZTg0YSwgMHgzZTliODUxZSwgMHgxYjhmNzZkZCwKKwkweGVmMjhiMmY0LCAweDFlMjFiODAyLCAweGZiZThlZDAwLCAweDA0YWI3NzU0LCAweGFkYWZiMWZlLCAweGIxMGYzZGJmLAorCTB4YmZiMjVmNzYsIDB4ODMwODdlYTEsIDB4M2Q2MGZlMGIsIDB4ODMzNjdmODUsIDB4ZDI4MWI3ZDIsIDB4MTFlZmI2Y2IsCisJMHhmYmM2MWZmNCwgMHhhOTY5Yzc2YiwgMHgzMWZjODEwNiwgMHhjMDk3YmIxZCwgMHhmYjY3YWYyZCwgMHhiYjFlYzNlMiwKKwkweDc0NDRjZmNhLCAweDdhNDczODBlLCAweGYyMGU3YjI5LCAweDljYzU0ZmJlLCAweDM0NzRhMGQzLCAweDFmYmFmZGVhLAorCTB4YTQ3Y2IwNjUsIDB4NDRjOGI2ZjYsIDB4ZTM5ZTRiODgsIDB4ZGI4N2Q3NzEsIDB4NTZiMmM0ZGUsIDB4MjY1ZTYwZjYsCisJMHg4OGU1ZjdkYywgMHhhMmVmNWVmOSwgMHg0ZTcyMzFmNSwgMHg2M2VmZDJiNiwgMHhlYWNlOGRlNCwgMHgxZTZiY2JjMywKKwkweGJjNjA4YjY5LCAweDI1ZWZjNzUzLCAweDVlZTMzNDdiLCAweGJmYzYzZmJiLCAweDZlMzhjZWYyLCAweGM0ODMxOTI3LAorCTB4NjliODQyOWUsIDB4NGY0ZWZmNGYsIDB4NWEzZjQwMjMsIDB4NzYyYTdjYmIsIDB4ZDM3MDZkMWYsIDB4ZWVmNTYyZmUsCisJMHgxYjEyNjRjNSwgMHhmNmQ5NTg3ZiwgMHg4OGZkYzIwZSwgMHg2NzQzZjdlNCwgMHgzNjEyN2M4NiwgMHg2NDFiN2M1MSwKKwkweGRmNGQwMzM4LCAweGU1MTFiODZmLCAweGFmNzZkZWFmLCAweDFhYTFlZTA3LCAweGI3MDY3ZjBiLCAweDdlNTYyMTdjLAorCTB4ZGY4ZTM4N2UsIDB4ZTdlNWM1Y2YsIDB4YzlkMTZkOTMsIDB4ZGI3YjRlMzAsIDB4NWQ2ZjBhODAsIDB4ZmRmMTE3NmQsCisJMHhjNDUyMzY5YSwgMHg3YWM0M2ZlYSwgMHhmNDgyOGQ0ZCwgMHg0MmQyOGE3MywgMHhmMjdhZTIwNCwgMHhjMWZjMGQ4MCwKKwkweDEwMjYzZWQ0LCAweDhkYjlkNjdmLCAweGI4MzA2ZjE4LCAweGEyZTRiYzE4LCAweDllNjNlOTBiLCAweDNlMDBjMTlkLAorCTB4MWY0YTRjYmYsIDB4ZTFkNTJmZWYsIDB4NGNiZWZhZmUsIDB4ZWZiZmI2MmIsIDB4NzgwZmUzMzcsIDB4MjllYWRmMjksCisJMHhjMzdmYjQxYSwgMHg2MWM3ODY3YywgMHhmOTczZDNmOCwgMHgwZmJmNjQ0OSwgMHg1ZDNlODBlNCwgMHhkMzg1MzhjNiwKKwkweGYxZDcwYjNlLCAweGYwMjdmNmNiLCAweGNjMTEzN2FlLCAweDVhNjdkNjQ3LCAweDVjYjg1ZWQxLCAweDZhMTlkZDM4LAorCTB4OGZlM2M3YmMsIDB4ZmZlNTA5ZTIsIDB4Zjc0ZjFjN2QsIDB4OTNmY2M4M2QsIDB4ZjA0ZmRkZjcsIDB4NGE1OTA1M2MsCisJMHhlOTg3Y2FmZiwgMHg4Nzk3MWM2YSwgMHhjZjg3YzRhOSwgMHgwODJhMzZhZSwgMHg0NjVlYjAwZCwgMHhlZDQwOWZlMiwKKwkweDhkOGJkMjExLCAweDgyYTdlMDRkLCAweDgwZWNhZjdhLCAweGFhMjc4OGQ0LCAweGI5ZTEzMzVkLCAweDE3NjRlMmE2LAorCTB4NmJkYWUzYjAsIDB4MTNjMDhiM2YsIDB4MmY4MDExNjIsIDB4YzEwOTAzN2IsIDB4YWI5OGJjNTUsIDB4Zjg3N2M3NDAsCisJMHhkNzgxMzk1OSwgMHhlNTY1Y2MyNywgMHhlODlmNWU0NCwgMHhlZjRjZTU2MywgMHgwMDM1NTIwYiwgMHhjYjQ3MTcxNiwKKwkweGNhNmYzYWI0LCAweDgwYmM3OTA3LCAweGZjZjE3M2IwLCAweDg0Y2Q4ZDdlLCAweDczYWIwYmNiLCAweGRmZDQzNTY2LAorCTB4OGI5Y2YwNDksIDB4YWYwOWZmYTgsIDB4NWYxZWIzNGYsIDB4NjM3YTA3OTksIDB4MGRmYmZhYjYsIDB4ZDZhOTBmMWMsCisJMHgzMGQzNWRlMywgMHgxN2FlYTZkZSwgMHhlYjY0YWNmMSwgMHhmYmYxMzdmOSwgMHg1M2ZkNzUyMiwgMHhmNTliN2JmYywKKwkweGQ0MWE2NDdjLCAweDdmYzdhYmU3LCAweGFjNWJkNzljLCAweGNhOGRlZjJjLCAweDAzN2Y3NjdlLCAweGQ3OGM3ZmFmLAorCTB4YzYxZWEwOWIsIDB4NWFmNTY0MmYsIDB4NmYwOWRmNzEsIDB4MThlMWM5ZDcsIDB4NDMxZTMzZTIsIDB4YmYzMzI2MGMsCisJMHgyMzM2OTZmMiwgMHhiZjNjNTdmMiwgMHg3M2Y3MDdkZCwgMHg5YmYzMGQ5NSwgMHhmNTE5Mjk3ZCwgMHgzMmZiODZkZSwKKwkweDUwNDlkYzk4LCAweDUxZGViYzA2LCAweDc3YThhMmU0LCAweDM3Y2M2NWRhLCAweDQ4ZjViYWQwLCAweDk3MmIwNjRmLAorCTB4ODcxZjljMjcsIDB4ZWFkNDg5ZTQsIDB4ZTRjNjQ0NjEsIDB4OWFlOGE1ZjQsIDB4OTAwNWYwMTIsIDB4MGZmNDU5NmIsCisJMHhmYmUzM2FlOCwgMHg5MThmZTIxYSwgMHg2NjRkZTk3MywgMHg4M2U1OGZlMiwgMHgzOTU1NGUwNSwgMHg1NTc0Y2VlNSwKKwkweDVjZWNkNzdiLCAweDc0YjViZDU1LCAweGNjOWVhYTkyLCAweGRjOWYyMjc2LCAweDVjY2JlOWNiLCAweDE3YWFhMjU0LAorCTB4NmQ5MDY1ZjcsIDB4YjU5ZDlkYmMsIDB4NTU0ZmU1ZDMsIDB4YTg1ZjNiYjUsIDB4OWY4ZDAyMjQsIDB4YTNkYzQ5YmEsCisJMHg3YzgyMzFlNiwgMHg5Yjk2ZDdiOCwgMHhiM2Y4ZmMwYSwgMHg0ZTQ0MGFiNiwgMHhmNjI3ZTUzYiwgMHgxYmE3ZjNiNCwKKwkweDU0ZmE1OThjLCAweGNiMTBiOTc4LCAweDdlNTgzYmNmLCAweDg3OWI3YjdmLCAweDllMDg3Mzk1LCAweGFiNmY2ZmFmLAorCTB4Y2EyZWYyYzEsIDB4NjlmY2YwOWYsIDB4ZGI5ZjE3OWIsIDB4Y2ZhMTU5NjksIDB4MmJmZGE0N2YsIDB4ZGExZTlmYjQsCisJMHhhMTlmOTQzZiwgMHgzMzczYzNmZCwgMHgzZjllMWZlZCwgMHhmZDQzZmRhMSwgMHg5NDJmZGEwNiwgMHhjMTcwYTY5ZiwKKwkweDBmZGEyOWYzLCAweGVkMzFmZmJjLCAweGI0NGZjYTFmLCAweGI2YmNiMGY5LCAweDFmOTYyZTZkLCAweGYzZTNmMzZmLAorCTB4N2MwNmI2YjEsIDB4OGFkNmQ5ZGYsIDB4OTZkYjQ3ZTUsIDB4YjZlMWYzZTIsIDB4ZGJkYjNlMjAsIDB4MmY3ZDYyNTYsCisJMHhmOWU3OTNhNywgMHgyYmU3ZGM3OSwgMHhmMTAzYmRkOSwgMHgyMTlmZGZlYiwgMHg5ZDJmYmI2MSwgMHgxNTRhNTM5ZiwKKwkweDNmMmFiOTdhLCAweGZjMDMzZmE3LCAweGZjZWFiZDAyLCAweGMyMWZjMDU0LCAweDhjNzg2MjYxLCAweDA2NjhlMzg3LAorCTB4OTEyNzBmYjMsIDB4OTMwYjcyYzgsIDB4MWYwNzE4MWYsIDB4NjE1OWU3ZGYsIDB4YWUzNWZjYTEsIDB4NGU3YmFkOTUsCisJMHhkM2ViMTQ1ZiwgMHg0Nzc4ZDgxYSwgMHg1YzQwOWRiOSwgMHhjZTUxOTI0MSwgMHhiYjQzOWI4ZSwgMHhjYWE0NTI3MywKKwkweGQwMDdmMmMyLCAweDE0ZGM0MzBmLCAweDVhZWNlNTNmLCAweDIxZTY0NjcyLCAweDU3MjVjMDBkLCAweDMzMWUzZDUwLAorCTB4Mzk3YzIxYWYsIDB4Yjc4MDljMTgsIDB4NTdmZGUwZDEsIDB4Njk2ZDM3OGUsIDB4YTc1ZmJiMmYsIDB4NmMwYzJiYTYsCisJMHhlMmI2ZjY2NiwgMHhiOWM2M2FmZCwgMHg5ZjRjYjBiZSwgMHhlZjFmOWYyZSwgMHg3MTc0OThlOSwgMHg1MjI0ZGQzYSwKKwkweDliZjE3NmY5LCAweDhjY2ZhMTQ0LCAweDMxZmVmNTI2LCAweDZhODk0MTdkLCAweGI4YmRhNjdmLCAweGQxNTcyODg2LAorCTB4ZmJkNDhiN2UsIDB4YmRmZTczM2MsIDB4MTk4Y2VmYWEsIDB4ZjVlYWE5MGYsIDB4ZmFhYTE1YWUsIDB4MWU3M2JiYmEsCisJMHhjNzNlMDM3MSwgMHg2MTk5YjhiMSwgMHgyMTAyNzJmNSwgMHg0ZmRkODVlNCwgMHg0Y2U2NWMyMCwgMHg5MjczOGYzNiwKKwkweDYwNWY3ZWMyLCAweDEzM2RmZjM3LCAweGQ2Nzk3ZmJlLCAweDVjNjVmMWNlLCAweDA5ZjJmYjhkLCAweDQ4MmM1NjBlLAorCTB4MGY0MDZhMGMsIDB4NDQ4YmZjN2QsIDB4OWUzYjdmOTQsIDB4N2U5ZmEwZDEsIDB4NDA2OTA5MjIsIDB4ZTZhNjRjZGUsCisJMHgwMTVmZDQyNCwgMHhmMTZiOGMzNywgMHg5NDJkMjZhYSwgMHg4NWEyODk4YiwgMHg4YTI0NTVmMiwgMHg3ZmJhM2FmYiwKKwkweGY1ZDI2NGQxLCAweDlmZmFkMTZiLCAweGQ5ZjJkMTMxLCAweDJjYjNmZjRjLCAweGZhOGMzMGJmLCAweDY3YWY4MGJhLAorCTB4YWRjN2Q4ODEsIDB4ZGNmZGUzOTcsIDB4MzdmNDRjYzYsIDB4NzYyNWNmYTksIDB4ODc0YmZkZjAsIDB4OTcwZGY5ODksCisJMHhjMTUzY2EzYiwgMHg0NjM3M2UwZSwgMHg3ZGNkYTgzZSwgMHgxNDA1OGRlMiwgMHg2M2I0YjZkZiwgMHgxZmVmMTRmOCwKKwkweDllYTMzNDU3LCAweDk0Y2JjZmQ3LCAweGY3NWU1YWJlLCAweGQ0NGZhYTdhLCAweGYzMDc5MzdjLCAweGNmZmE1YjM4LAorCTB4NmI3NmUwMjksIDB4ZmYyMjhmYzksIDB4M2M4NGU4NzQsIDB4OWU0MTEyNTMsIDB4ODkzZDk3MGQsIDB4M2IxZTY2MjQsCisJMHg5M2M5ZGVkYSwgMHgxMWZhMjE1MSwgMHgzNzVmMzI2ZiwgMHg0ZmY5NWYzMSwgMHg0YmM4NzY5NSwgMHhkMTc5ZTAyYywKKwkweGYyZDJkYjNiLCAweDdmMGZjN2FiLCAweDUwNzRlM2VmLCAweGEwMzUyMjQ4LCAweDM0OGIwYjVmLCAweGUwNzQxMDllLAorCTB4MzFmY2FiYjUsIDB4MmYyZWZjYTYsIDB4NGI5MzBiOWMsIDB4ZjJjNDA3ODgsIDB4Zjc4NWQyNDQsIDB4ZDU3ZmM4MjksCisJMHg3YzlhM2U2MiwgMHg1MGEyMWFmMCwgMHgwZDZhZDhmYiwgMHg3MGQxNjA5MywgMHg3NWZiODRiZiwgMHhmY2U1Y2ZiZSwKKwkweDljNmFmNjY3LCAweGVjMjU5YzhmLCAweDc0ZTgwZjI2LCAweDFiZDU5OWYyLCAweGFjZmMzYTAxLCAweGY0ZDhjNzViLAorCTB4ZDBiZWJhYjgsIDB4MmRlZjUwNGEsIDB4MTQ4N2Q0MmEsIDB4ZWJjYmVlMDksIDB4ZTU0MDdiYzIsIDB4YzhjOTEyMmQsCisJMHhiOWE2MzgwMSwgMHhkZjdlODNlNywgMHhiNjNhNDE2YiwgMHg5ZmM3MmZhYywgMHhlMzU5YjgzMCwgMHgwZWZjNDBhZiwKKwkweGMyMzU3YjI4LCAweDlhZWRhMmU4LCAweDgyYjdlYjI3LCAweGYwMDEzOTNkLCAweGRjYmMwNTYyLCAweDQzMGQ1ZjkxLAorCTB4MWUyMjE3ZTcsIDB4MmY3OWYyMTcsIDB4YzhlOGYzZTQsIDB4ODMzZmMyMWMsIDB4NzBiYzc4ODcsIDB4NmVhMmVmMWYsCisJMHhjZjUyOGZlMSwgMHhhYWQyZjFmMywgMHhhMmJkYzM2ZiwgMHhmZjJkMTFlZCwgMHgzZTM1MjI5OSwgMHg1MzIyZTk1NywKKwkweDcwYzM0YmU2LCAweDY2MTczODUxLCAweGI4MDE1YzgyLCAweGQ4MGY4MmFmLCAweDkxOWY5YWZjLCAweDk0MWNjNmM4LAorCTB4NmY2ODM1NmIsIDB4M2YzMDY5OTQsIDB4OWIyZTllM2QsIDB4OGZkYzk5MzIsIDB4N2RkOWQ4NjYsIDB4NDg1M2VlZTQsCisJMHg5M2U1YzNjZiwgMHhjMjQ4MmM2ZiwgMHg1YmIzMzNmZCwgMHg4ZmNiMzI2YywgMHg1ODk1N2FmNCwgMHhlMTJhZjdiZiwKKwkweDcyZTdlNDVmLCAweGExZGUxY2NjLCAweGIxMjcwNTdiLCAweDg5MmI2MGJjLCAweGI0YmM4N2FjLCAweDJiZjVmNmIxLAorCTB4ZGM3MDczMzIsIDB4YjUzZDdkZTEsIDB4YTUzZjIwNWQsIDB4NWM3OTg4Y2MsIDB4YTEzZTQ0YWIsIDB4Njk5OTU0NzIsCisJMHg1NzM4NGY2MywgMHhmYTc0ZTQ2NSwgMHhmNzlkNGRhOCwgMHg2ZmNmOWRiMywgMHg0MThmNWYzYiwgMHhmMjdiYzhhMywKKwkweDljYzcxNmQ2LCAweGFmZWJhOWYzLCAweDg4OTYzZjQ3LCAweGZmNzIwZWQzLCAweDFkNTlhMGUxLCAweGE0ZTQ2ZDU3LAorCTB4YWJhODc4MzAsIDB4YzFmMTBjY2EsIDB4NmRhNzE2MmUsIDB4ZGQ5OWJmZWMsIDB4YzdlZmJiNmIsIDB4ZWQzMDJmNzgsCisJMHhhODdhMDE1MywgMHg1N2ViZWRlNywgMHgwYjU4ZmRhYSwgMHg1ZjkxZmE3NywgMHhmMTY0ZmRlMywgMHgzOThhMzE3ZSwKKwkweGUzMWZlYzNkLCAweDMzNWI2MmZkLCAweDQzYzI3ZWY5LCAweDdiMGUyMThhLCAweDYxZGU3NTYyLCAweDcyNzdlYzMzLAorCTB4MWYwZjllMDgsIDB4ZWYwMTdkYTcsIDB4ODFiYmE2ZGQsIDB4OTc0ZmI4MmUsIDB4YTNmYmIxMTQsIDB4NTRmZmQ3ZTIsCisJMHhiMmYxMWU5NiwgMHg3OGVmYWM1MywgMHgzYmE1ZGEyYiwgMHhkODFjOThjYiwgMHgyZGZjZTA3OSwgMHgyYjNmNjllMywKKwkweGY5ZDUyNDczLCAweDNhMzk5NTgwLCAweDI5YjdhNzVjLCAweDk3YjNjMzdkLCAweGVlZDE5YTkwLCAweGE5OTQzYjI5LAorCTB4ZWY3MjZhZjksIDB4YzFlZmY1NWEsIDB4MWMwZGY3MzQsIDB4ZmYyODI4YjYsIDB4MWZiYTAzNWUsIDB4NDI3OWZjM2MsCisJMHgxNDUxZjIxMSwgMHgwOGM0YmY3ZiwgMHhjMTk5MzBjMiwgMHg3NmIzZTcwZCwgMHgxNzk5M2U2YiwgMHg2NzZmMGY0YiwKKwkweDM2ZmY1OGNhLCAweDBkMmY4YmE3LCAweGFlMWFiNTU3LCAweGE1NmY0NWIzLCAweGZkNzA2MGNjLCAweGI5YzZlNDBlLAorCTB4NTg5NGYxZjAsIDB4YjVjMDQ2N2IsIDB4MDNkZjhjN2IsIDB4ZTJhYmYwZjgsIDB4MWZhZDQyYTksIDB4ZmE3NGYwNjIsCisJMHg2ZWQzYzNiZiwgMHhmY2YwZThmZCwgMHhiM2YzYzM5NSwgMHg5YjVlZWM0MywgMHg1MTVmZjU5MSwgMHhlMWFiNzU5ZiwKKwkweDY0N2NmYjNkLCAweDBhNDk4ODBlLCAweDdmMTE1ZmVmLCAweDE4Mjk5M2VlLCAweGViZjhlNjEzLCAweDU5ZjRlNTJkLAorCTB4MDc4ZmU1Y2EsIDB4YzA5MTUwY2YsIDB4MWU2MzU3N2IsIDB4OTI0Y2FmNjYsIDB4YmU1Y2ExNmEsIDB4MmNmNzdmMDAsCisJMHgwMmMzZWY5MywgMHhiZjllM2YxYSwgMHg0NjE5ZWYyMSwgMHg2NGQ3N2Y5NSwgMHg5ZGRlYmEzMSwgMHg4NzhhOGQyZSwKKwkweGNmMzYyY2QyLCAweGIyZWE0NzAzLCAweGQ4ZjFiZmMxLCAweDcyMDIwNjNiLCAweGJmY2YzMzYxLCAweDZiZGVjYzdlLAorCTB4MDVhNjdiODQsIDB4NDI1Y2ExMWUsIDB4NzQ3ZDAxOWYsIDB4YzdiYzI4MTEsIDB4MmEzMzNmNGEsIDB4ZDNjNjUxZDYsCisJMHhjNmQ2ZjFiMCwgMHg0ZjE4OGRmMSwgMHgxNTY0YTczYywgMHgzYTU1N2IzMiwgMHgzODczODVhNCwgMHgwYjdkYWY2YiwKKwkweDViNWI3ZmVmLCAweGZkZWNhMzJhLCAweDFkNWZmOGQyLCAweDViZjBmZjg3LCAweDdhMzBiNzI5LCAweGUxNDU5Mjk5LAorCTB4OTBmZTkxNmIsIDB4MGU1YTZkZjAsIDB4MmE3ZmQxNDgsIDB4YmQxNTdjODIsIDB4YTAxZmU3MWYsIDB4NDY5MWVjNzgsCisJMHg4YjJkMjllMiwgMHg5Zjk4OGJkMSwgMHhkYjgwYmY5OCwgMHg1YzAyZGQ3NiwgMHgwNmJiZGIwNywgMHhiY2E1MWE1NCwKKwkweDg5MTdkMGJkLCAweGJjYzFmZjVjLCAweDJiNWM1ZjUwLCAweDY1NGM3M2IzLCAweGRhZmJhZTMyLCAweGVlNzhhOThhLAorCTB4MTdjZjM3NmMsIDB4MWZhMzVlODksIDB4MTY0NDc3ZjUsIDB4NzYzZGJjNzAsIDB4YjgxMWI3ZjEsIDB4YWZkODM5NDcsCisJMHg4ODNmZmJjMywgMHgxNWJlZTAzYywgMHg4ZGZmMWZlZSwgMHg1Mzg5Zjc4YywgMHhmYjgxYWE3YSwgMHgzOTFjMGVjYywKKwkweGViZmIwMDlmLCAweDg0M2E1OWY5LCAweDg3OTczZTdiLCAweDM1YjUxNzgzLCAweGM4ZWMxZTc4LCAweDBjNmQ3NjY3LAorCTB4Njk2NWQ3ZmQsIDB4ODkxMjdkYjksIDB4MzVhZjM5YzAsIDB4OGIzY2VjMjUsIDB4ZDYwM2RiOTUsIDB4MDAxYjI3MjMsCisJMHg0M2M1NmI3ZSwgMHhkZTg2MjkwNiwgMHgxMDE5NjU2NiwgMHg2OGZhMzVhZSwgMHgxN2Y2ODc4YSwgMHg2MTI1YTdkOCwKKwkweDdiYzFmZmU2LCAweGIzY2U4NzE5LCAweDVhMWUxOWRhLCAweGJkYTEwZjRhLCAweGY3NjdlZDYwLCAweDI5NjVkNjM1LAorCTB4Yjg1MmNlNGMsIDB4ZTZmN2QyZjcsIDB4ZWJkOTlmODksIDB4OGU5NGJlYTEsIDB4YmRmYzNiOTcsIDB4ZDNkNmNlY2QsCisJMHg0YmVlYzY1YywgMHgzZmVkN2I1YSwgMHhjODNlZTFkYiwgMHg0NzFkZjg0NCwgMHg3OWYyZWZkOCwgMHg3MjkyYjgwYSwKKwkweDQ4ZGZiYzM1LCAweGNiZjgxNzI0LCAweDVhYmU2MzJlLCAweDIzNWVmODZmLCAweDJmODJmYmQ4LCAweDYyZDVjYWRlLAorCTB4MzlmOTQ3YmIsIDB4MGEyYjQ3ODksIDB4NGNhZTcwNDMsIDB4ZGIzNWIxZDAsIDB4Y2MxNjQwZmYsIDB4MGJjNWYyOGYsCisJMHg3YzQ0ZWY2OCwgMHhmNjNmMTBkMywgMHhkZjMzYzg2MiwgMHgzMmU2NDUyNSwgMHgwNzZmNDQzYiwgMHg2OGQ0MmMzZSwKKwkweGUxMTZmYzU0LCAweDU0OWUyNmViLCAweDczZGRhM2ZkLCAweGExNWRhNzNmLCAweDQ2NDIzYmY3LCAweGZlNGRlNzAyLAorCTB4MjI2NjcxNzgsIDB4MTkxZGE3ZDgsIDB4MWFmM2RlYzIsIDB4MjU5YjVmMDEsIDB4OGMwZTYyNWYsIDB4ZGM1YTJmZjMsCisJMHg3MjM4MWUwZiwgMHhlZGM2MDFiYywgMHhiZTAyZjNhMCwgMHhlYjc1Zjg3ZCwgMHgzYTUzYjA2YSwgMHg1M2U0NWVlYywKKwkweGQwZWNiZTMxLCAweGZkNjBmNWYwLCAweGRmN2JkNmVjLCAweGQ0NjQ3ZjA0LCAweDNhY2RlZWMxLCAweDExODY3NTM4LAorCTB4ZDNiNjlmZTgsIDB4YTA3ZjNmNDAsIDB4MDRmMGY3ZmIsIDB4ZmQxYWE3ZTgsIDB4YjNlZDBiMDYsIDB4OGI3N2MzYTYsCisJMHhiMDExZmY4OCwgMHg2Yjc1MTc2ZiwgMHgzYzgzZjc1NSwgMHhjMmM1ZTVjYywgMHg4ZTEyMTY4YiwgMHhhYzJjMmZkOSwKKwkweDZiOWUwZWY4LCAweDAxMzE3ODVjLCAweGNmY2MzZmRmLCAweGNmY2MzZmVkLCAweGY4ZTJlZGJkLCAweDVmM2Y5OTc4LAorCTB4ZmI4YWZhY2YsIDB4ZGU5YzRmNmYsIDB4OGVkZGZlNGEsIDB4YmJmN2M2M2EsIDB4YTU5YWZkNjAsIDB4ZmFhODNkMDEsCisJMHhjNzNmNTMzNSwgMHg2ODdmNjRmMywgMHgyMWIwOTNiMywgMHhmMzExZGUwNiwgMHg5OGUxMjI0YywgMHg1ZGRhODc3MSwKKwkweDUyNzA5MTM0LCAweGZhMzJmYWVjLCAweDE1YWY5ZTFkLCAweGU2ZDBmZmViLCAweGRkOGUzYzQ2LCAweDFlMTUzOGZmLAorCTB4NTNjZmZiODcsIDB4ZmY2NDcxZTEsIDB4ODdmZjU4MDUsIDB4ZjQ0YmMyYjYsIDB4ZmU4Yzc5M2YsIDB4MGZmMDU0NzMsCisJMHhlZjhmOWJmNywgMHg3YmFjMWRjZiwgMHhlZWY5NDJkNiwgMHhjNmM1Nzg2MCwgMHhmN2UxNGI1NywgMHg3YmY4MGNmNywKKwkweGI3YWZhNDFiLCAweGVlYjljZjBhLCAweGZhMGU3ODIyLCAweDdhN2ZmZDgxLCAweDFmNTJmMjFmLCAweGMwZjdhYWQ4LAorCTB4ZThiYTgzMTgsIDB4N2EyOGNmM2MsIDB4ODNkODlmMjYsIDB4Nzg5Y2VmNzAsIDB4ODc5NTlkYmUsIDB4ZGVmZjFjZWIsCisJMHg5MGVjODcyOCwgMHg5NDJjNmE2NywgMHg4Y2U3YTBlZCwgMHgwMTVhMTIyNCwgMHgyMzUyOTdmYiwgMHhkZjExMzljYSwKKwkweDM0ZmVmZDEyLCAweGIzOTJhYjUzLCAweDQ2YTE3ZWUyLCAweDY4ZDg3ZjllLCAweDI2YWZmMTYxLCAweGFjMmNmZmFiLAorCTB4NTc0ZDEyZmYsIDB4MWY2OGNmY2IsIDB4ZjAzYjBiYTcsIDB4MGUyMTNiN2MsIDB4Zjg4OGQ3ZGMsIDB4YzVmYjBjOGUsCisJMHhmOTdkNzAzYywgMHg5YjBiOWMwOCwgMHgwY2ZmZTM5NywgMHgxNTA5ZmJiZSwgMHhkMWVmMTAyYiwgMHgwZmNkYjE1ZSwKKwkweGYzOGY3OWY5LCAweGE2ZTNlNDdkLCAweDIzMTNkYjg4LCAweGYyZDk3NTNmLCAweGJhMWJiMzU3LCAweGVjYjdlOGUyLAorCTB4OGNjMjNiNzcsIDB4NDBkOTc1N2UsIDB4Y2ZjOGRhYmYsIDB4N2NlMDcyZWIsIDB4NjdiZjAwZTMsIDB4YjlmYjQxNGUsCisJMHhkZTMwZjRhZSwgMHhmYzI3NTk0NywgMHhmM2UzMmIwMiwgMHg2MDFkMzI1NiwgMHg1NDc4OGI0ZiwgMHg4MjE3ZTQwMiwKKwkweGRkODZiMGRkLCAweDYxNmY1ODUzLCAweDI3NWZmYWU1LCAweGJhMTdiOWUxLCAweDgxMTRiMjFmLCAweDY1YWRkOTljLAorCTB4MDcxZTIyZmUsIDB4MWU2MWNmM2IsIDB4MDJjOWFlMzQsIDB4N2NmMjBlZmMsIDB4YWZmZGYzOTcsIDB4ZTdhN2JkZTEsCisJMHgzYTQ3OGU1NywgMHgwZmU1ZmZhOCwgMHhkZGMzMWVmMSwgMHgwZDlmNGNlOSwgMHgzZWExYjNlZSwgMHhjYTc4MzdhYiwKKwkweGRkY2Q1ZWUxLCAweGVkNmVjY2U5LCAweDI1MDljMzk1LCAweGEzZWM3NjMxLCAweGE3Mjg1NTE5LCAweDVlMzk1ZTNmLAorCTB4MTkyNzFiMTMsIDB4YzJlNGNkOWYsIDB4OTRmZmUxMWEsIDB4Y2U3MGU1YTMsIDB4ZjBkMmUzZWEsIDB4ZGQzZWExM2YsCisJMHgxYmRmYzI2MywgMHg1M2ZkZWNkMywgMHhiYWJmZGUzOSwgMHg2M2JmODBjNiwgMHhlMjc3YjU1MSwgMHg1ZmIwYjliYSwKKwkweDFmMzE5MDRjLCAweDg0ZDdiMzViLCAweGM1NWQ5Y2YwLCAweDZmODM4M2VlLCAweGVmMzVlZTQxLCAweGNiYmY4NzFkLAorCTB4NjI4OTZmNTYsIDB4ZDliMzY0ZGUsIDB4YzFmMTAwNTMsIDB4YzBkZmJkZmEsIDB4ZjEzODlmZGYsIDB4OTAyY2M0ZjgsCisJMHg5NTkzYzc4MywgMHhmYjZmYmMyYywgMHgzYTc0OGE3MSwgMHgyNmZiZTNlZiwgMHg1NzlkZjdiMCwgMHhkYjZhYjllMywKKwkweDM0N2Y4YjFhLCAweDRiZDA4OGZmLCAweGVkY2RmN2YxLCAweGQ3M2UyZjRlLCAweDY4OTlmODA3LCAweDVlMWM4MGY0LAorCTB4Njc1ZmU0MzgsIDB4YmZkNjA3ZjcsIDB4MjRhNTlkMTksIDB4ZjMwNmZmYTAsIDB4YTdlZGVhMTcsIDB4ZWIxZGY3ZjAsCisJMHg0OWRkOGZiYiwgMHg0MmU5M2UzMCwgMHhiY2ZiMTVmYSwgMHhiOWViNzFmOCwgMHg4ZmFkZGFmZSwgMHhkNWRmODNjZSwKKwkweGY4ZTc2ZmFiLCAweDU5ZjdiZmU3LCAweGRmYzYyOWFmLCAweDVmZjgxNDliLCAweGYzMWY3NzEzLCAweGM1ZGUzOGY3LAorCTB4MTkxMWM0ZjMsIDB4NzZhNGI5ZWYsIDB4OGZmODE2NDUsIDB4MjAzN2VjNGUsIDB4MzM1ODlkYmQsIDB4MTA1N2VmMTksCisJMHg1ODUzZDVlMywgMHg4ZjRmOTRlZCwgMHhiMDI5OTUzYiwgMHgxNWIyMGJiZSwgMHhiNjc2ZmYzNiwgMHhlOWVmMTU3ZiwKKwkweGJkZjgxMWY4LCAweDJkM2VlOGNlLCAweGRhMGRhZmU2LCAweGM3MTAwOWEzLCAweDc5NDRlZDE0LCAweDVhZmQzZTY4LAorCTB4ZGRiN2JkZmMsIDB4ZGQ3MDA3ZTksIDB4YTAxMTVkMjksIDB4NmQyZmNkMmIsIDB4YmYwM2I3YTgsIDB4ZjcxYmJmNjQsCisJMHg4MjA5Mjk3MSwgMHg4ZWY4MzQ5ZiwgMHgwNzdiZjcwMSwgMHg5ZWQwMTlmNywgMHg5ZDk3N2MxZSwgMHhlZjcxMWZjZiwKKwkweDA1OWEzNTlmLCAweDdlMDZkY2Y3LCAweGRhZTUwZTM5LCAweDBiNzQ2NjYwLCAweDc4NGRiZmIzLCAweDUxZTBlNGNmLAorCTB4NWUzY2Q1ZmYsIDB4ZDFlZmM2OWMsIDB4ZWZiYjAzNGMsIDB4MTg1MzNlYzIsIDB4YzRmYTNlZWMsIDB4NmM5MDQzYjgsCisJMHhmZGZiZTM3MywgMHg4ODJmYmMxNiwgMHgyNGY5ZDkzZSwgMHg3ZjFiOGY2OSwgMHhmMTc0ODkzNywgMHhmZGY4MjNlZiwKKwkweDA5ZmU1OTAzLCAweGM4MWZhNzIwLCAweGUxNWJmZGEzLCAweGVlZDg5M2ZiLCAweDRhZmZhZTQyLCAweDkyMTE1OThjLAorCTB4Yzc0YmM3Y2UsIDB4ZDlmZDMzN2UsIDB4Y2NmYTVlZjgsIDB4YTgwZjdlY2QsIDB4YjA0N2Q3OGIsIDB4NWZmMDYwM2UsCisJMHhiZGY4ZjM4ZCwgMHgzMjhjZjQ4ZCwgMHg1ZjdhYWZjZiwgMHg0OWQ5N2RlNCwgMHg2ZTAyOGViOCwgMHgyM2I0Njc4YSwKKwkweDkzZDJmMWUzLCAweDAyOWZmNmNkLCAweDM5NzRmMTFmLCAweDgwOTc5ZWI0LCAweDc4MzJmYzBmLCAweGI2M2VjMGJmLAorCTB4ZWEyNmFiOGUsIDB4OWNlOTNjOTksIDB4ZGUzMmY2OGMsIDB4Mjc5MzE0MzAsIDB4MDdkZjdjYjgsIDB4M2E4Mzk3NDgsCisJMHg5N2EwZDNlZiwgMHg4NDc1NDdhMiwgMHgyZDQ4YzNkZCwgMHg1NDU3ZjAwMywgMHgxNmY1NzZiMCwgMHg3MDEwZjdlNiwKKwkweDA3ZTdlMTljLCAweDFlNTkzYjFhLCAweDNlZTc5OWUxLCAweDg1NmY5YWM4LCAweGE4MWZmM2YzLCAweGZmMGJjZmNlLAorCTB4MDEyNGVkMjEsIDB4OGY1NjMzZmMsIDB4YzQ1NzUwOTIsIDB4YzIyZDc2ZWMsIDB4NmU4ZjdlYzUsIDB4ZGZjMTRlOGQsCisJMHgzZTNlMGMwYiwgMHgyNzEyZmQxMSwgMHhiYzVlY2FmNCwgMHgxNWQ1NzYwNywgMHg2ZDI3YTAxYSwgMHg0ZmJmOTczMSwKKwkweGZiODk3OWIwLCAweDZkM2RjNGRkLCAweGM4MTk3OGYxLCAweDk5YjJmYTY2LCAweDNiODJlZmY4LCAweDI1MTM4ZmZlLAorCTB4ZjE0YjA3ODUsIDB4ZmY3NDRhYmUsIDB4NTJjZDIwNmIsIDB4N2U1ODlhZjYsIDB4OTE4NWVhM2IsIDB4MmZlYTQyZjcsCisJMHhmZjgyN2JmMSwgMHhiMDUzZTViYiwgMHg5ZjgwNjU1NiwgMHhkNWU4MDI2MCwgMHg3ZmI2NzZkMywgMHg0MDIyNWJjNCwKKwkweDNjZDk2YmJmLCAweGI4MDNlMDNiLCAweDRlZjg4MmZmLCAweDViYzQ1ZTgzLCAweDRlMWUyODI1LCAweDllM2VhYzRiLAorCTB4MWJiYzg0Y2UsIDB4MWJhMDBmODEsIDB4YTNiZTE3ZTgsIDB4OWQ5ZTdmN2QsIDB4NzYzZmY2YzMsIDB4MTc5NDNmMjcsCisJMHhhYTVlNDNkNCwgMHg0OTAxNTdkMCwgMHgwZjdkYzBkNiwgMHgwMjRhMWQyNywgMHhjZWM5ZTVkMCwgMHhjODcyZTczYywKKwkweDI5Mjg3MWY3LCAweGUwNzZmNmIxLCAweDBlN2JjMTEwLCAweDczZmYzODE0LCAweDkyMmVmYzM1LCAweDA1ZjgwYTc3LAorCTB4ZmVkNTNiNzcsIDB4NWU3ODc4ODgsIDB4ZmQ0MDFjYTgsIDB4YzY5ODVmZjMsIDB4ODAwMDUzYzUsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGI1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZmZiNSwgMHg3OTMzMjY2NiwKKwkweDg0ODQxZTRlLCAweGU0MjQ5ODQwLCAweDA5MzA4NDAxLCAweDA3NDE0MTBmLCAweDY4MTUxMDQ4LCAweDg1MjgwOTc4LAorCTB4NDIxMDA3OTMsIDB4MTdiNjg4MWUsIDB4MjQwY2RiNWIsIDB4NDFiNDVhMjAsIDB4NzY4YmQxNTEsIDB4YjQ1NDQxNDAsCisJMHgwMzQxNDE0MSwgMHg1OGE1MDA3NywgMHg1NmQ1NjM1MSwgMHg4ODBkY2I2ZCwgMHhhODMxMWZiYywgMHhhZGFkZmY5NywKKwkweGZiNWJmNWZmLCAweDkwY2U2NDljLCAweGY5YjdiNWE4LCAweDY3ZDlkODNlLCAweDdiNWFkN2JmLCAweDNiZGFmNWVkLAorCTB4M2Y0MzdjZGYsIDB4NzU2MTA5ZDcsIDB4MTBmNDQyMmIsIDB4MTE2ZGNlMjIsIDB4YTMxMDk4NjIsIDB4NDJmMzgyZGMsCisJMHgxMWM4ODVkOCwgMHhjYThkZjNmYywgMHg1YzNhZGI4OSwgMHg4ZGY4ODU4OCwgMHhkYWY5YWFhYSwgMHgyYmM4OWViNSwKKwkweDFmNWMyZGViLCAweDc3NDY3NWUzLCAweGI1ZjFiZGYxLCAweDI4ZjI1MGZmLCAweDA4NGMyMWIzLCAweDVkM2RmZTg3LAorCTB4MWUzMTBmODgsIDB4OTBlYTdiOGQsIDB4NDYwY2E3ZGQsIDB4MDlhYzJlMWEsIDB4NzVhYzU0NDIsIDB4YTUxYTQ1ZmEsCisJMHhiYWNjNGU2ZiwgMHg0Mjg1ZTY1MywgMHg1YzZjYzc3NSwgMHhlMzRhZDg5OSwgMHhjYTJhNmY5NiwgMHgxZmIyOTExMiwKKwkweGQwYWFmMzQxLCAweGVhOWU1NWU3LCAweDBhODc1MmNkLCAweGVhYThmNmQxLCAweGViZjY4NGRhLCAweDZhOGY5ZTU1LAorCTB4YTUxZWI4ZjMsIDB4ZGJkNjI3ZWYsIDB4OWZhOWNiNWMsIDB4MjczZTdkMGEsIDB4YzVkMTZiN2EsIDB4MGFiNzk0YjksCisJMHhmMjgwYmRhYiwgMHg0NWRhMmQ1NiwgMHg1NDc4MmVmZCwgMHhiMTc3ZjYyZCwgMHg4MWY3YWEzZSwgMHhmODBiYTBiNSwKKwkweDNhODk0ZDYwLCAweDFlYTgzMjdjLCAweGUzOTQ2OWQ2LCAweDcyNjhmN2JmLCAweGMyZmNkMTU3LCAweDYzY2M3N2U5LAorCTB4ZDFmN2UyYTMsIDB4ZDFmNDRlZmMsIDB4ZmM3ZjIxZTYsIDB4ODJiMTMwOTMsIDB4NDVkYWVhZjIsIDB4MmJkY2VlZDEsCisJMHhhMWMyN2RlMSwgMHgwMTcyN2I0NSwgMHgwMzFlYjk1ZiwgMHgxOGUzYTE5ZSwgMHg3ODA4YmNmMCwgMHhiYWJkMjBjNiwKKwkweGFiZjA0YmM1LCAweGEwZjU0ODdkLCAweDRiZTZiZWNlLCAweDk4ZGY4MGQxLCAweGFlNDc0NTNkLCAweDYxYjVmN2MxLAorCTB4ZWNkYThjMjIsIDB4Y2VmZTljM2IsIDB4OGI4ZjM0YWQsIDB4M2Q0MTU1YWIsIDB4MTkzZGQyOGEsIDB4ZGJjNjgyODksCisJMHgyZTdjZjk2ZSwgMHg0ZGJmNzNlMCwgMHhkMjkxN2FjYywgMHg0N2E3YjdkMiwgMHg0NmZkMjg1YiwgMHgyMWY1MWZhNywKKwkweDZhMzUyNzA5LCAweGFlN2NmNDdhLCAweDk4YjkzZWRmLCAweDllZGNjN2YyLCAweDdhYTA4MmM0LCAweDJjZTlkNjNmLAorCTB4NmI2NTVmMTQsIDB4NzE4ZDE2ZmYsIDB4NzhkOGQ2MmEsIDB4MmU1ZTA2NWQsIDB4YmYzNDFkNjIsIDB4ZmUxMThkOGIsCisJMHg4Yjk3MDRlNSwgMHg1ZmI4ZGJiZCwgMHhiZjQ2NGYwMywgMHg0MTgzYzAxNSwgMHhhNTZmNTQ0ZiwgMHhlMzhmYTVkYiwKKwkweDExNDcxN2IzLCAweGUxYjRkMzVjLCAweDY0ZTgyZTllLCAweDJlMzQ4M2MxLCAweGU1MWY1YmZhLCAweGZmN2RlNjc1LAorCTB4NzQ3ODBkNzEsIDB4MjU5NjliZTAsIDB4OGYwM2ZjMGMsIDB4YmM2ZGE0NGYsIDB4ZGU1OWJlOTcsIDB4OTNkMTBhYjMsCisJMHg3ZDc4ZDBlMCwgMHhjYmRmNDJhYSwgMHg4NTA5ODRmNiwgMHhkYTUzMmJmYSwgMHg5YzA5Mjg4ZSwgMHhhYzE0ZmI3NywKKwkweDhjM2NmMTdmLCAweDk4NzFmNjU3LCAweGY3YzdlNTA1LCAweGYzYzc5ZjVlLCAweGMxMmJjMTBhLCAweDdhMmJiNTI5LAorCTB4OTZkNjk4YmYsIDB4ZGY4MjA5ZWEsIDB4NzM2ZDNlYzUsIDB4N2QwNmJlNzksIDB4ZTc5YmNlNzQsIDB4NGMzN2JiNTEsCisJMHg0YzVjNWY2MCwgMHg3NjQ2N2MyMywgMHhmODAxYjFjMiwgMHg1ZGY1YzYxOSwgMHg2ZjZmYTY3NiwgMHhiMWQ3ZTAxZSwKKwkweDdhYzg1NzVlLCAweGZkZWIyMTVkLCAweDBiN2QzMDQwLCAweDI5ZWJjNjhmLCAweDgyY2MyNGZmLCAweGRjMGZlNWVmLAorCTB4NzFhNmU1OTQsIDB4OGUzYmRmOGUsIDB4Y2UzYzc1ZDcsIDB4NzVmZDg3OWIsIDB4Y2ZmYTk1M2MsIDB4ZTU5ZDcyYmQsCisJMHg3MzNhZDAwZiwgMHg4ZDlkNjViZiwgMHhiNzU3YzY0ZSwgMHg3YjZiOGNlYiwgMHgzYWNiN2M0MiwgMHg2ODc0ZWEzNywKKwkweGFiMzNmM2FjLCAweGZhOGFkYTNiLCAweDljYjE1NWJiLCAweDE0ZmI2YThhLCAweGNjOGQ3ZmRmLCAweGQwZDA1NmJiLAorCTB4MGY0OTM2YjUsIDB4ZmMyMzZiYjUsIDB4NjY4NWQ3YzAsIDB4NmU3ZjA0ZGIsIDB4ZjFhMDFmMjcsIDB4NTgzZDI3YmUsCisJMHg4ZjhlMWU5OCwgMHgwMjNjM2Y3NSwgMHhlYTlmNzVmNCwgMHg5NzAxYjlmMiwgMHg5Y2ZjZWYyMSwgMHg1N2VmYzdmMiwKKwkweGIxZjkwMjVkLCAweDBmYzQ3ZTEyLCAweGM3MGZlMDJjLCAweDczMjc4YjUzLCAweGI1Y2RhZjdlLCAweGI0ZjlmYTgyLAorCTB4MDQ3ZjZmZjEsIDB4NjNkYzVjZmQsIDB4NWY1ZTBiNzMsIDB4OTBiM2ZkZjEsIDB4YWY4MmY5YTcsIDB4YzY2ZTVjMTEsCisJMHhlYmNlNTRiOCwgMHhkNjE5ZWY1NywgMHhlOGYxNzI4OCwgMHhiYmE2NTc2MCwgMHgwMjE0YmUwYiwgMHhhYTM1OGFlNywKKwkweDAxZDIxZjY5LCAweDNlZDVlM2MxLCAweDNhYzZlMjkwLCAweDg3MTMzODBjLCAweGE4M2E5YWNkLCAweDRmYzgxZTEzLAorCTB4OTcwOWQ0MWYsIDB4OWFkMGJiNWEsIDB4ZmIxMmZiZjgsIDB4ZmM0MTQxOTQsIDB4OTc0OWYwMGMsIDB4M2NmZjQ0ZTcsCisJMHhhMmQyYzdjOSwgMHhjODczZjY4MywgMHg4ZmY5NDJmYywgMHhmZjQ4Y2Y1MSwgMHhjYzU3YzFkMiwgMHg3MDUxNzhmYywKKwkweDE5NTBlMDllLCAweGMyMWM1ZjkyLCAweGNhNDJhYTM3LCAweGI3Y2E0M2FiLCAweGY5OWNmYWY3LCAweDEzZjhlODQwLAorCTB4MzFiZWU0ZDMsIDB4YzNhYTU4ZTAsIDB4OTE0NWJiNzEsIDB4YzUzZWU0N2MsIDB4MmQ3ZTg5YmYsIDB4NGJlZGJhYjUsCisJMHg4ZTJmZmU2OSwgMHg0ZmQwZjMxMSwgMHhhZTM4NTU5OSwgMHhjZWQ5N2RlNSwgMHg4YWI1MmJlYiwgMHg3YzAyYjA4NiwKKwkweDYzM2Q3MGY3LCAweDQzNWZkNGRkLCAweGMzZTUxYzU4LCAweDdhYTIxZjI1LCAweDc5NDFlYzEzLCAweGYzMWFkZjgzLAorCTB4ZjA5MzRmMDksIDB4NWJjNWQyMzAsIDB4ODNjNzhkOWQsIDB4MTRkZDU5ZTAsIDB4ZWVkN2NhNmIsIDB4ZWUzYzZlNGEsCisJMHhjNjJmY2NlOCwgMHg2ZmY0YzkyZiwgMHgzODdlYWQyMiwgMHhhYTdmMjJlMCwgMHg4YzFlYjU3NywgMHhiMjQ5ZmEyMCwKKwkweGQ0NjllMTY4LCAweGZmODNjNWVmLCAweDY2ZWI5ZDFiLCAweDI2MmYwZmJjLCAweGU5YTgxNmZjLCAweGY1YTYxZDJmLAorCTB4M2Q1NmVkYjYsIDB4OWJlZmQwOWIsIDB4NWYxMWZjZjIsIDB4MWI3ODdhNWYsIDB4OWJkOWFmN2QsIDB4Nzc3NWVlMjEsCisJMHg4ZTE0M2ZhZSwgMHg4YTVkNzcxNywgMHgxN2VmYTc0ZSwgMHgwNWMzZDkwZSwgMHhjZGE1MDFjOSwgMHhkMWVkNjNmMSwKKwkweDg0YmFiZmJjLCAweGJiODc1YmJiLCAweDZiMDVkZmQxLCAweGEwOTRmNDZiLCAweDZiNDQxNzdhLCAweDdhMjBkNGY0LAorCTB4YTk3NWRkMjksIDB4ZmMzMWU0NGUsIDB4MWYxMDZhN2MsIDB4OGY0Zjc0ZmYsIDB4MmY3ZDJhYjEsIDB4YjFhZjdkZmIsCisJMHhlOWM3NGExNiwgMHg3MzZmZGVmZCwgMHhlNjg2YjkzZiwgMHhlNjFkZGJlZCwgMHhiZWYzNGNkOSwgMHgwYjJjZTZmMCwKKwkweGIzNzg1ZmRhLCAweGVhN2Y0ZjQyLCAweDRmYjNmNGU1LCAweGI0N2UzMTUzLCAweDMxYmJkMjQ1LCAweDI5MzQ4OGRlLAorCTB4OGU1OTk1NGYsIDB4ZmMxYTMxM2UsIDB4Njk5ZWQ1ZmYsIDB4ZTU5ZDY5ZjUsIDB4MmM4Mjk2NjUsIDB4YWQ5Yjc5ZTAsCisJMHg3ZGU2MmU2ZCwgMHg5NWFiMTE0MSwgMHhjNjdlY2ViOCwgMHhmZGI5YjlhNSwgMHg5ZjI3ZGQ4NSwgMHhmNGY4N2YwMCwKKwkweDYwMDUzZWZlLCAweDY3NzYxNzJiLCAweDdlNTQ2OWU3LCAweDU5MjFlM2UxLCAweGMyZjdlYTJlLCAweGYwMWVjOTdkLAorCTB4ZjczNjZkODUsIDB4ZWVkZTk5NGYsIDB4ZGY2MGYyODksIDB4OWM2MWZkMWIsIDB4Zjc3ZmU4MjUsIDB4YTQzNWMzNTUsCisJMHg1MmY5Y2IxZiwgMHhlMzkzNGYzZSwgMHhjZTgyOTRmYSwgMHhlZTJkYTM3ZSwgMHhiZjAyOGY1ZiwgMHhiM2NkYmRmOCwKKwkweDdmYTU5Mjk5LCAweDhiMTllOGNmLCAweDc3M2Y2MWY1LCAweGQ1YjI4NzgxLCAweGUyNmRjMjYxLCAweGRlNzgyYjI3LAorCTB4ODc2M2MyYTUsIDB4MTE3Mjg0MWMsIDB4YTJlNTVmNDQsIDB4NmZjZmJmOTgsIDB4NDA1ZjdmMzQsIDB4MTdkZjAyN2MsCisJMHhhZjdmMzdhZSwgMHg1YWFiOGQxMCwgMHhmYzhiN2Q2OSwgMHhmNjgyZWZlNiwgMHhmYjExMmY4ZiwgMHhlMjY5ZjhkYSwKKwkweGQ2ZjE3ZWYzLCAweGY1NGNjMjZmLCAweDBmZTc0Zjg0LCAweGE1YzdlNjBlLCAweGM3YzExZmI0LCAweGZlZmM1NzllLAorCTB4M2RlZmMwMTUsIDB4NzQzM2FmMmEsIDB4ZDJkM2NiNWQsIDB4NDQ4ZjFkNzgsIDB4NmI2ZTYzZmMsIDB4NTk4ZjVlMTAsCisJMHhlMDg5MzU4NCwgMHgxYzJlY2M3YSwgMHg0N2U4MDU0OSwgMHhiZWFiOWMwOCwgMHhjZGZlNjEzZCwgMHhmZWRlZTRkNCwKKwkweDMyOTZhNTVmLCAweGUwYjI0YmRmLCAweDA1YzNiODNjLCAweGVkZmQ0N2NlLCAweDdlOGE5OTM5LCAweDc5MTc1NmNhLAorCTB4NzdlNjgzNWIsIDB4ZTQ3ZGU2ZDEsIDB4ZGY1NzkwZTcsIDB4ZjU0ZDdlMjMsIDB4MzdmNThkOGUsIDB4MWQ3OWE1OGUsCisJMHhkNGY1NTdiYiwgMHgzM2FmMzE3NywgMHhlM2Y5OWYyNCwgMHgyOGY3MWUwOSwgMHhmMjg0M2ZjMiwgMHgyZDRjOWNjZiwKKwkweGRlOWNiYzIxLCAweDM0YjUzMjdjLCAweDMxMTVmZTk4LCAweDhkMWU5ODJiLCAweGViYzI2Njk0LCAweGY0ODlhYzgyLAorCTB4ZWIwNWFkMTgsIDB4ODlkN2FkMDksIDB4MGQ3Y2YzNWYsIDB4YjE1NTNhNzgsIDB4Nzg3YTJiYTQsIDB4ZTU0Zjc0MTQsCisJMHgwNTU3N2YzOSwgMHgzZDlhY2VlNCwgMHgzM2U4M2YzNiwgMHgwZjE3ZTM2MiwgMHg2Y2ZhMGFkZiwgMHhkYTQwYjliNiwKKwkweDJmNTQ3YmI1LCAweDViYjE3NGU0LCAweDFjZTI2N2Y1LCAweGJhMzRmZTZiLCAweGVlY2NlNzEyLCAweDY4MzUyZTIxLAorCTB4MTcwZTc0ZGQsIDB4YjBiOTdjZTMsIDB4NTk2MjUyZWIsIDB4MTkzM2Y3MmUsIDB4OWVlZDQ0ZjIsIDB4ZGZhMDNjODcsCisJMHg1Y2YxZTZlZSwgMHhmMWFmZmE5YSwgMHhmZjk5YWYzZiwgMHgyMGZkY2Y5ZCwgMHg4MWYwNDZmMSwgMHhjMGIyMjc4ZCwKKwkweDNlMGY4OWRmLCAweDk5ZmQ4Njk3LCAweDc5MWRiNWY1LCAweDgzODc1YTIxLCAweDJjN2U2OGZlLCAweDdmZjQ1ZmJmLAorCTB4YTNhNWYyYzUsIDB4YmJmYWY1NTksIDB4MzQ5ZWMzYzAsIDB4MDdmZmMzM2IsIDB4Y2QwMjZmY2YsIDB4N2U3M2IxMmYsCisJMHhlMDNkOWYzNCwgMHg2YjNjYzZjYiwgMHg5Yzc2NmRkYywgMHhkMTFkMTdiMywgMHhiNGE3ZTA3OSwgMHg4OWY5ODlhMCwKKwkweDA2ZTRmOWZhLCAweDI4OWIyZDdmLCAweGVlMTZiZjg4LCAweDA5YzJiZjllLCAweGYxNTFhMTc5LCAweDZmMjgwZjQwLAorCTB4MmFkY2Y5NTYsIDB4ZGRmYWEwZGYsIDB4ZWNjMjk3ODQsIDB4MjEzYmY2YmIsIDB4ZTU0NDNlOWYsIDB4M2FiYzc0ZDQsCisJMHhhOGIzOGZlYSwgMHg1NGZiYzJmZSwgMHhmOGRiZWZjZSwgMHg4MGRhM2ZkMywgMHgxMTM2MGRkNywgMHg0Nzg2M2MwNiwKKwkweDYzYzdkMjZmLCAweDNlOTE2ODc5LCAweDM3Y2Q0NWJmLCAweGI3YTA1NjlkLCAweDAxM2Q1MWVjLCAweGU1MWNkZmI0LAorCTB4ZDViMmY3YzEsIDB4ZjRjMTYzYjYsIDB4NTBiZjFmMzUsIDB4MmJkN2YzN2YsIDB4ZjgxYTQwZmUsIDB4YzJmY2I5ODQsCisJMHgyN2NlOWYzMCwgMHg1YzZmYmU0MiwgMHgwMjdmNzUzNSwgMHg4OWViMmI1MiwgMHg3MmU2ZmM4YiwgMHhmMzRlYmNmYywKKwkweGRmN2ZkNWE5LCAweDE3YTZiOTlhLCAweDI5YzE3M2YwLCAweGFiZjYwYjQ0LCAweDFkZjU5NWI1LCAweDA1NGQ2ODExLAorCTB4ZmVlYzJmMWUsIDB4YWM3ODE1MmMsIDB4YjI3ZmY1N2QsIDB4ZWJmODE3NDQsIDB4NTFjZDRmZDgsIDB4ODQyMjI3MDksCisJMHhjNmU3NGIzOCwgMHhmZGQwMTYzNywgMHg1ZGM1YzlhNSwgMHg4ZmIxN2ZkNCwgMHg2ZDViMTdkYywgMHg2MzkwNWViZSwKKwkweDhhZmM2ZmY3LCAweGRkYzVjMWY5LCAweDE3NTc1ZjVhLCAweDVmYjlkYmY0LCAweDEyNGI0ZTdkLCAweDIwNTM4MGQyLAorCTB4YmFlNGRhMWQsIDB4ZTQ4NGZiMTEsIDB4MWY0MTdiYzEsIDB4ZGQ0ZDU2OWIsIDB4NmJlNzc5NDQsIDB4YTI0MjQ4MzYsCisJMHhmNzkyMzMzNiwgMHhmY2M3ZjYwYiwgMHg3ZDhkN2VhMCwgMHgwMTdjMTViMiwgMHgxZmM5MzBlOSwgMHhlNTIzZWM1ZSwKKwkweGJjYmFkNTg0LCAweGZiNWY3NWIwLCAweGU2MmVjY2U0LCAweDI2Y2QzYWIzLCAweDkyM2VkYmNmLCAweDJiNGRjYzZmLAorCTB4OWM4NzRmMGUsIDB4MDM0NWYxNjEsIDB4NzVlYmMyMWYsIDB4MTU3YzEwMjcsIDB4OTdlYWJlOWQsIDB4M2RmMDUxMmQsCisJMHhkYTcyMzQ0OSwgMHhmYTcxMzQ1YiwgMHgyNDVhMTBiOCwgMHgwYjhmMGJlYSwgMHg0ZmEyMTY3MCwgMHg3YmM3ZTAyYywKKwkweDMxYWJkNzllLCAweDhlODlmY2RmLCAweGQwNmFmMDNiLCAweGY4NTYyZjgzLCAweGVhZWZkMzM3LCAweDYzNTA4NzQ2LAorCTB4NDZiNWVkMjAsIDB4YTBkNDUxYTMsIDB4NGJlZWJmYTksIDB4NTQwZmI2ZTUsIDB4M2VkNDlmZDYsIDB4MmUzZDNlMDYsCisJMHhjOGNiZjdlMCwgMHhmOGMxMzFlOSwgMHg3NGI4NzdkYiwgMHhkZWFiZmEwMiwgMHhmNTJlN2E0OSwgMHg0ZDg3N2U3NywKKwkweDU5NTdhMDA0LCAweDNkNTBiZjY5LCAweGVjMmZlMWRiLCAweGNkNGJlMDY5LCAweDVjYmM4MDhhLCAweGFmN2M3OTRiLAorCTB4ZmFmNTY1MWQsIDB4OTc5MmUwODMsIDB4OWE5MWUxMmUsIDB4YmI3MGM1OWUsIDB4OWExZWY1NjAsIDB4OTU3M2ZhMDgsCisJMHhkYmQ3MjFkYSwgMHhjMDRmOTcwZSwgMHgyYTRiNjM3OSwgMHhmYjVlNjNiNSwgMHhhNDc1OGYwZSwgMHg1NmIxNmYwMSwKKwkweDlhYWIzN2RlLCAweDVjNWI3MThkLCAweGY2MmEzZmU4LCAweDQzNmY5ZTAzLCAweDUzNDQ0NWFlLCAweGMyOGY4NmJiLAorCTB4ODc0YzBjZmMsIDB4M2E2MTQzZTQsIDB4ODUwMjFiNWMsIDB4ZjgxNzc3MGUsIDB4MTRjMjg5ZjEsIDB4NzdjYTgyMzEsCisJMHhjZjMwMTNhOCwgMHgxNzUyYWVmMywgMHg5NThiNjhmMCwgMHg5YjMwODc3NiwgMHg5YWY0MDI3NywgMHg3OGI4ZDhiMCwKKwkweDdhNDQ2ZmNjLCAweGFiZmZjZjA2LCAweGNmM2MyNWQ4LCAweDgwYmM0OGFmLCAweDdhZjI0MWJlLCAweGJkMGRmMjMxLAorCTB4N2Q4NjU1Y2IsIDB4OGZiYzIzZTMsIDB4ZmM3MjFkNmIsIDB4OWYyYTNkYTgsIDB4NDNhNDYyYTMsIDB4YmJlZmRiZTcsCisJMHhjODljNjhjYSwgMHhkMDI0ZGFiZSwgMHhhODlmMzE4MywgMHhmMDBiYWY2MSwgMHg4NThiMWNlNywgMHgzNzg2YjNlNSwKKwkweDJmODBkNzIyLCAweGQyMWJlNTE4LCAweGY4MTliZDI1LCAweDc1NjA5OTU4LCAweGFlM2M3ZjgxLCAweDU3NGFlN2QzLAorCTB4NjgyMGEzYjEsIDB4MTYxZWI2OWQsIDB4MGVjNTVlMWQsIDB4YmRiYjY5YzAsIDB4OTdjZTEwZjgsIDB4NzM4ZWZhMzYsCisJMHg1NGQyN2Y3MywgMHhhYTE0ZjQwNywgMHgyNzNmNDE2NywgMHg2NGM3NjhlYSwgMHgwZWU5ZGZhMywgMHg0MjQxNzdjMCwKKwkweDViYjQ3OGU5LCAweGMyYWM5NjI4LCAweDVlYjg1YjdlLCAweDNlMjA4MTE1LCAweGUzOTM2MGRiLCAweDIxMWNiODJlLAorCTB4YzczYTQzMDIsIDB4ZTNmODQwNWQsIDB4ZjlhMzk3ZjYsIDB4ZDY1MzgzN2IsIDB4ZmI5Mjg4NmIsIDB4Mjk3NGNlZTcsCisJMHhkM2Q0YWUyZiwgMHg4M2ZhN2FiNSwgMHhjY2M3YmFmOSwgMHhmZWM3Y2ZkNywgMHhlNGE5NGI3MSwgMHg1M2E2NzdlZiwKKwkweGViNGFkNWJmLCAweGFiMjY4ODc4LCAweDgwZWRkYTkyLCAweDk3M2E4OWVmLCAweGNkMDU4NDA4LCAweGM2NzU4YWY3LAorCTB4MzhkMDQwOGIsIDB4M2IyZWY1MWQsIDB4MTgzZTIwNDUsIDB4NDdjNjZlMWYsIDB4YjkyMzdhZTcsIDB4MTI1ZDQ0ZmMsCisJMHhmZWZiYjFjMywgMHhlYzcwNGM1MywgMHgwNGMzM2ZlYywgMHhjZmZiMmJjNywgMHg3NTEzZjJlMiwgMHhmZmQxZGYzOSwKKwkweDRmZmE2ZWMwLCAweGIzYmZjZDMzLCAweDVkZmM3ZWRmLCAweDgyZmFkMmVjLCAweDIyZWRkY2JmLCAweGQzNzRjMDdlLAorCTB4YmIyNjc2Y2EsIDB4NzYwNmZkYTIsIDB4OTg3MWYxMmYsIDB4OTVmN2RjODAsIDB4MDU3NmNiNTMsIDB4ZTk2ZDg3ZjEsCisJMHgwYjlmNWQ3NiwgMHhmYWRmODBhNCwgMHg2YjRlM2FjNCwgMHg4ZjFhNWQ3NywgMHgwYmUyNmVmNiwgMHhjYmQwZTc2YywKKwkweGNmMWI0NTZiLCAweGZhMDJmYzEzLCAweGJhYjY0OGJkLCAweDk2OTc3Y2I5LCAweDk4YzhiZDBkLCAweGYzM2M4NzQ3LAorCTB4ODU5ZjQ4YmIsIDB4OWVkODQxZjYsIDB4MWY2MzQ3YmYsIDB4NGRiNmI0NWYsIDB4YTlhYTdkODYsIDB4ZGUwODhkNTksCisJMHhmZGY0MDdkNywgMHgxN2NmYjYzMSwgMHhkNWQ3YjA3OSwgMHhiZGYxMWRhMCwgMHg5YzVkZWU5ZiwgMHg4NGQ0ZjgwZCwKKwkweGRlNjFlNWI1LCAweDJkZmVmN2ZiLCAweDU3YzhlNzBmLCAweGM1ZjcxNjdiLCAweDlmNTRhZGY3LCAweDViN2IwZmU1LAorCTB4YmZhODI3OGQsIDB4YjNlNWMyN2UsIDB4OWI0Y2U4OGMsIDB4ZmExZmZkZjUsIDB4ZmE5ZWViN2QsIDB4MzZjNzk4NWUsCisJMHgyZTQ4M2RkOCwgMHg1NmY2NTlhYywgMHhiMDc4ZjFjNiwgMHhlMDgzZWYyMSwgMHgxNmY4ODI1ZiwgMHhhNmJiNDNlYiwKKwkweGRmMjA2M2E5LCAweDBmMzI0ODdkLCAweDk2ZWU4N2U1LCAweDNlZDBjMzcyLCAweDgzNDk2ZmMyLCAweDJjZTFmN2RjLAorCTB4NjE5YTg5ZjAsIDB4ZTE1NDE3NzYsIDB4OTYxNmZjZjAsIDB4Mzk4N2MzYjcsIDB4OWY5ZjM4NWMsIDB4ZWJjMTkzZWQsCisJMHhjODRlNDNiMywgMHg3OGEyZmI0MCwgMHhmMTU0ZTdhNiwgMHgxYjZkYzlhZiwgMHhlMDRmZjY0MiwgMHg2OGRiMzUwZiwKKwkweDc1YjU2YWJjLCAweGY3ODUzOGYyLCAweGE5ZjAzMWQxLCAweDc4YmZiNzlhLCAweDEzNWZkNzQ3LCAweDhjNWE5ZjgxLAorCTB4NWY3OGYwNGIsIDB4NDMyMTI3ZWYsIDB4OWE3YTg5M2IsIDB4YWJiZWY1YTMsIDB4OWI4Y2RlYTgsIDB4MWZhMTUzOTMsCisJMHg5OWZhZTg5NSwgMHgxOTQwNDg5OCwgMHgxMDY4ZmNjOSwgMHg5ZTU3MjBlYywgMHg3YTBmNTJkYiwgMHhjMDM0ZDE0ZCwKKwkweGYwZWM5N2MxLCAweDk4MWFmY2UwLCAweDcxYzkxYzIyLCAweGY0ZmVkMGQ4LCAweDU3ZWUzNGE5LCAweDJlYzMxNmU5LAorCTB4MDNkZTYwYWEsIDB4ZGYzZDM1ZjQsIDB4MmM2OTY5YWIsIDB4MzhmZTkzOWYsIDB4M2IzZmQxZDAsIDB4ZmJjMzI1YWUsCisJMHhhMzBiZjA3NywgMHhkZjM3ODdmZSwgMHhlMmViNDgzYSwgMHg3OWU0MzBkYywgMHgzNmU5YmRiYiwgMHgzYWFkYjNjYywKKwkweDk4NDdmNTkyLCAweGM5ZWVkMGYzLCAweDJhMDJjMzliLCAweGM4YjY4YWVjLCAweDNmZTdkMGQ1LCAweGIwN2I5ODhhLAorCTB4ZmVlM2MxMDcsIDB4ODMyMjJkMjgsIDB4Nzk5YWNkZGEsIDB4OTVlNDJhYzMsIDB4YTVlZWYxZmQsIDB4ZDY5MmU3YTAsCisJMHhkM2U3YzBlMSwgMHg4MzI2MmQ0ZSwgMHg2ODcyYWZjNiwgMHg4OTY5MTM3ZCwgMHhkOTY4ZmJlNywgMHg4YmU0MzgzMSwKKwkweDQ0OWUyNWUzLCAweDJlZTJhMGYxLCAweDUzZTcyZmU3LCAweDBmZjFjOGEyLCAweGU4NDk2OTQ3LCAweGYyZDJjNGE3LAorCTB4NjZmODU1YzQsIDB4ODM3YjYxNmQsIDB4ZmRjMWU4NjgsIDB4OGE4YmI3OWMsIDB4MDM3ZmU0YWUsIDB4NzVmNDQ3MGUsCisJMHg2Yjg5YjNlYywgMHhmNmZhZDMyZiwgMHhkNGYxOGRhZCwgMHhlZmNiN2NkMywgMHg5NmI3Mzk5ZSwgMHhlMjk2ZjlkMiwKKwkweDlhNmE4MGM0LCAweDU1ZDYxNjc3LCAweDliZTkyYmU1LCAweDc5ZjNmMjRjLCAweDY1ZWYzZTliLCAweGFlYWRiY2ZhLAorCTB4MWNmZGUwYWMsIDB4NDM3YWVmM2EsIDB4YzI4NWY5NWUsIDB4NTBmZjIwZmEsIDB4YWM1ZjE1ZmUsIDB4ODdjYTVlZmYsCisJMHgzMDdkMmU1OSwgMHgyMGQ2ZTcwZCwgMHgzNjQ5ZGIwYiwgMHgyMmRlZDM4NCwgMHg3ZDVkZjIzZCwgMHhiZWQzOGY5ZSwKKwkweGY3ZjFjNDczLCAweDE0OWVmOGQ1LCAweDNkMjdkYjJlLCAweDdlYzNmMTZjLCAweDM3NzYzYzUwLCAweDlhYzllOWUzLAorCTB4NjM0YThmNDgsIDB4MWRiNzA4OTUsIDB4ZjA5OTUwNzIsIDB4ZDlmYzVjYjIsIDB4NjllZGJmOTgsIDB4NjYxNTc1YTUsCisJMHg2ZTAxZDc2OCwgMHhhOTJkZTJmMywgMHhiNDNjZjAxZiwgMHg2ZjIwNTM4MSwgMHhmOGViOTI4ZCwgMHhkNzkzNzkxNiwKKwkweDZjYjg1NTMxLCAweDM1ODk5NDJjLCAweDUzMWZjODE2LCAweGYzMjk3MjVkLCAweGE2M2ZiOTE1LCAweGUzMGRhZjA5LAorCTB4ZDcxYTEwY2QsIDB4YmIwNWMzZmIsIDB4MWZjNGZhMTcsIDB4YmNkMTBiYTAsIDB4N2YxZjBhNjcsIDB4OWNmYzJkOWYsCisJMHg1YzAyMmFkZSwgMHg5NWEyYzdmZiwgMHg4OWJjMDZmMywgMHg0ODI1ZTYzZSwgMHg1M2Q5MzhmYSwgMHg4Y2RmZjg2NSwKKwkweDkxMTdiZjc5LCAweGFkMTk2N2Q3LCAweGQ5MjNjYTYzLCAweGFkNWZhYzk5LCAweGY5ZjBjMWViLCAweGQxNGY3OWFlLAorCTB4ZWZmNjg2ZTksIDB4ZmQ4M2Y0M2MsIDB4OTlmYTlkM2IsIDB4ZmVjODYzN2EsIDB4ZTA2MWVjMmQsIDB4ZjZkYmYzMzMsCisJMHg4NzdiNGI1MSwgMHg0Yzk5MTRmZSwgMHg0NzVlYjg3MCwgMHhjNWRlZjVlOSwgMHhhOTE1M2ZhYywgMHhmODQ3YzI5MSwKKwkweGZhYTUxOTY5LCAweGYyMWM3NzIxLCAweGEwNDg0ZjJlLCAweGI5ZmRkYzc1LCAweGI3N2U4M2Q0LCAweDg0M2RiYzVjLAorCTB4NDYzNzdmY2EsIDB4ZDJkY2Y1MTUsIDB4NjRkNGYyY2IsIDB4YmRjOTlmYmQsIDB4OWQ4NjlmYzcsIDB4MjQwOGIwZjUsCisJMHgxN2I5YTUwYywgMHg4ZjVlZDY1ZCwgMHg1NjRlZjlhMSwgMHg1MmM0MzViNywgMHhhNGRlODRmOSwgMHhiZGYxMDRjNywKKwkweDViYjYxMjFiLCAweGQ4ZGRkN2ExLCAweDYyN2RmY2NmLCAweDk5ZGY1OWFlLCAweGMwNTUxYTI0LCAweDczNTBmMjc5LAorCTB4MGY4MDdkYmQsIDB4MGM4YWQ3ZDEsIDB4MDE4OGI3YTksIDB4ZGZlZTgwNjIsIDB4NDdmYmI5NjMsIDB4MTNlZDFmN2EsCisJMHgwYmUxZDkyZiwgMHhiYjQzMzU3OSwgMHgzYTVjNzAwNywgMHgxOGI5YjNlOSwgMHg3YWU1NTg1NywgMHhkOTUxZGU2YSwKKwkweGU0OGM3NzllLCAweGRmOWQyZjJjLCAweDg0ZThlYmM3LCAweDA4ZjI5MzA4LCAweDZlNDhhN2YyLCAweGNlYTY3YTQwLAorCTB4M2EzOWU5Y2QsIDB4YTE3ZTUxZTcsIDB4NjdlYjIzY2UsIDB4N2Q4MDNmMTQsIDB4NzNmYWJhNTYsIDB4Yjc3MmYwMmIsCisJMHg2ZWY5YzI1MywgMHg3NjFmYWE2NywgMHhjNmE2OGFiNSwgMHhlNTVlOThmMSwgMHg0ODgzYTZhZSwgMHhlM2M1MDNjYiwKKwkweDM4MmVjYzcxLCAweGQyMjBlNGI0LCAweGI2ZjQzYmJiLCAweDVmZGQwZTI1LCAweDVkYmZmM2MwLCAweGEzZGJkM2E3LAorCTB4ODgzNGRlYTYsIDB4YmJlZGM5ZjYsIDB4ZjZlYmRmYTUsIDB4NGRhNzUzM2UsIDB4YzZkZTQwNGEsIDB4YThlOGVlZjksCisJMHgzNDIyYjJmYSwgMHhhOGNmMjJkYSwgMHhiNzU4Y2RkZSwgMHhjMWU4ZjliNywgMHhjOWU3NWE3OCwgMHhmZjNjMTFiYSwKKwkweDllNWU3NWQzLCAweDA5YmFkOWZmLCAweGEzM2RmZTljLCAweDI3YWUzOWY4LCAweDZjNzk2NzNlLCAweGQ2YTNiNmQyLAorCTB4ZTQ1ZmFhMTQsIDB4YjdkOGJjNTUsIDB4ZGY4NTdhZDcsIDB4ZGViMTc0NGYsIDB4ZjU4MWNmMjYsIDB4MWY2MDBlNzQsCisJMHhmNTM0MTk4ZiwgMHhlOTMwM2JmMSwgMHhkYTI3NmQwYywgMHg1MTcxYjhjZiwgMHgzYzk5YzYxMSwgMHg3YThhYzRhMiwKKwkweDIyMTZiZjMzLCAweDRlOTNhZDNlLCAweDhkZWU4YmJmLCAweGY4ZWI1N2Y1LCAweDYxNTdiZjNiLCAweDFiZGY5ZTc4LAorCTB4ZGY2Y2YwY2IsIDB4ZjkwMzExOTEsIDB4OGNjZWU5NjAsIDB4NmY4OTQ4OWUsIDB4MDQ2ZjdhMWEsIDB4ZDk3ZWQ3ZTAsCisJMHhmZjZkZjNjMiwgMHg4ZWY1OWMyOCwgMHg3NzRiZjZkMCwgMHg3YTg5ZWMwZSwgMHgyMmRmMDk2NywgMHhmYjNjZGU0OCwKKwkweDgzYjg3ZmZjLCAweDcxYjM5NWNmLCAweDAyN2Q1ZjRkLCAweGM5NTdmNmZlLCAweDM5YjI0OGRmLCAweDVmZjgxOGYxLAorCTB4ZDAxZTVlZWYsIDB4Y2U1ZDA1Y2IsIDB4MDIyMzNkMjYsIDB4NmU4ZDVmZTcsIDB4NDI3ZjA0NTcsIDB4YjRiODZjZmUsCisJMHgyMTdmMGVlNywgMHgxN2Y2MmM2NSwgMHg5YzEzNzNjNiwgMHhiOTE5MWNjMywgMHg3ZjcwODdjNywgMHhmZDQ2N2U0NywKKwkweDkyNThmY2JkLCAweGI5ZWZmYTA3LCAweDYzYTQ4ZmVkLCAweGYzNGRhZGZjLCAweGZhOGM3OTNmLCAweGY4YjdlZjNmLAorCTB4OWQ0ZTc0NmMsIDB4NWUxNzRkMTcsIDB4MmE3ZTFmMDUsIDB4Nzc3YmVkOTIsIDB4OWMyZjM0MmIsIDB4NzE3YjliYzMsCisJMHg4NmIxNDczZSwgMHgyYzM5YzMyZiwgMHg3M2NmYmNmYywgMHgxOTc1YjcxNCwgMHgxN2FhYWRmMSwgMHg3YTA1ZWQxZiwKKwkweDMwNjA4ZDdjLCAweDViNWZjYTgyLCAweGVkN2NjMTFiLCAweGM4ZTc5YjM1LCAweGI4ZjdmNDMyLCAweGZiZTllZmVjLAorCTB4MGJiNjNjZWYsIDB4MDVkNTdkZTksIDB4NjVmYTUyNzcsIDB4YTFlMzFjNDYsIDB4MDM0NTgxZmMsIDB4NzljZTllZDAsCisJMHgzZGZkNGM5MSwgMHg4MDEyOGFmNywgMHhiYWQwNmFiZiwgMHg2OTkyMmI3ZCwgMHgxYzM3ODM3ZSwgMHgzNGEyZjRiNSwKKwkweDFlYTUyOWZmLCAweDM3M2VjMGU5LCAweGY5ZmQ4MjFlLCAweDZlNmUxOTZmLCAweDlhNWI2NDNmLCAweGQ5NmQ4MjlhLAorCTB4NzVjOWZmY2IsIDB4ZTU5YmZlN2MsIDB4OWY3NWRjODIsIDB4M2EyNWVkOGYsIDB4NGEwMTgzZTUsIDB4MzQ4ZDk5ZDMsCisJMHg4ZmQ0YjBkNywgMHg2Mzg2MzQwYSwgMHg2NzY3YWYyMywgMHg2ZmY3YjRmMywgMHg0OTA3NTgxNSwgMHg4OTc3OTgxZSwKKwkweDkxZTdjM2RkLCAweDc4MTFiN2RmLCAweDc4ZTVhZjNlLCAweGY2MmJiZjU4LCAweDNiN2EwYTNkLCAweDcwN2EyNWFmLAorCTB4ZmE0Y2JkM2UsIDB4N2ZhOGQ1ZmMsIDB4N2NlYmNhYzQsIDB4YTJmN2E5ZTUsIDB4MjE4OWRmNjEsIDB4YmYwOWQ5M2QsCisJMHg3OGRiN2U0OCwgMHhlM2VlYWZkNCwgMHhmNTg3ZjAxNiwgMHgwOWZhZTI3OSwgMHg4ZWNkNGY4MCwgMHg5ZmI5MWI5ZCwKKwkweGZhMDc4NzJhLCAweDRiY2VjNTZlLCAweDJmMjA1MzA3LCAweDk5M2MyMGRlLCAweDMyMWRjN2EwLCAweGFmNDJhYmZmLAorCTB4NTZhNWE1NDcsIDB4ZTY1MmZjNmMsIDB4NWYzOThhNWIsIDB4ZmMyN2RhNGMsIDB4Y2E0Y2EyZmUsIDB4ZTdlODhmNDksCisJMHg2M2NkNjhhMCwgMHhlZTI0Yzk3ZSwgMHhhZmQ3YzRlZSwgMHhlYmU1MThhOCwgMHhiMGM5N2NkMywgMHgyN2U3MWI2ZiwKKwkweGZkYTk3YjlkLCAweGIyZWM2NWIwLCAweDViZDhjYjdkLCAweGRmMmUxOTUzLCAweGViYjNkY2YzLCAweGRmZDE5N2U3LAorCTB4NzNlMTc2MjMsIDB4ZGYzMDNmNTIsIDB4YzFiZTllYzAsIDB4Y2RlYmNmMmUsIDB4MmY0MDY3YzQsIDB4ZTM0ZDc5YzYsCisJMHhlZDkzZjVlNiwgMHgyOWFmZTBiZCwgMHgwNzY4MzJhYSwgMHg5MWU1MjNjMSwgMHhiZTM3OTYzMCwgMHg2MmIzZjhlZiwKKwkweDZkZjlmMTU2LCAweGUxYjU1YmM4LCAweGQ5ZjIyZjkyLCAweDg4NWZlZDQxLCAweDM3ZWVhZWQyLCAweDc5MzI3NjBjLAorCTB4M2JhYjBiZGUsIDB4ZTNjOGYyMTcsIDB4ZmE2YmRlNTEsIDB4OTZkNWJjYjEsIDB4MzlkMDM1OGEsIDB4NTNlNjFkN2EsCisJMHg5NWZjOTJhMywgMHg0NTdmMjQxMSwgMHg3M2FmN2RjNiwgMHgyZGU1MTAzNCwgMHg1YmVmZmI0MiwgMHhjZDA0NmM3ZiwKKwkweGYxMjkwNjMzLCAweDg2YTQ2OGVmLCAweDQ4NWE0NWRlLCAweDdkMzlmYzk3LCAweGYzZjgxMzViLCAweDNmOTI2MTQzLAorCTB4YmU2MTBkNDcsIDB4NzQzM2FjNjQsIDB4MDdjNDAzOWMsIDB4NmYzYmUyMzQsIDB4MTFhMzM5ZDAsIDB4MzkxNzE4M2YsCisJMHg3ZDc4Y2FjNiwgMHg5MDc1NTJkZCwgMHgzOTIyZTVjZSwgMHgxYWRhMDgwMiwgMHhkZWYzOTQzYiwgMHg2MTYzODIyOCwKKwkweDJlYjQyYWE0LCAweDI1MjM0N2Y0LCAweDNhYzdjZGJjLCAweDk4NDQyN2M3LCAweGM0MjUxNWVhLCAweGJmOGZiMWRhLAorCTB4MWQ1NWZhZWYsIDB4M2NiODZhNGYsIDB4ODM3MGQ0YmYsIDB4NzQxM2JhYmYsIDB4ZmFjODdkYmYsIDB4Nzc2ZjdhZTUsCisJMHgzYWJlNjMwZSwgMHhlYjdlZjk1NiwgMHhkZjE1YjIyZSwgMHg4YjhmM2MwOSwgMHg3MzczZTdjYywgMHgyMzk0ZTQ1YywKKwkweGQ0NzVlMDlhLCAweDdhZTg3YmUxLCAweDFjMjVkNzQzLCAweGZhOGU0ZmRmLCAweDE2N2MyMjg5LCAweGVkY2ZjN2VjLAorCTB4YjY2Yjc3NmMsIDB4NWJmNzNlYjUsIDB4YTJmMzZiODIsIDB4NDdlYzBmNWMsIDB4NzBiZWQzMmYsIDB4YjU0ZTlmODAsCisJMHgwY2RiOWNiMywgMHgzN2VhOTJkOSwgMHg1YzcxNzBmNywgMHhkZmJhNmJjYiwgMHg2ZjViMzdkYywgMHhiZTdjMTRlZiwKKwkweGM1ZWVjZjM0LCAweDYxNWVmNDdlLCAweDQ4ZWMxMDM0LCAweGQyNmZkMmY1LCAweDE2ZjI1YjZjLCAweGU1ZTZlYmNlLAorCTB4ODE5YTFlMjksIDB4NjllZmMxNTAsIDB4OTdlNDdjY2IsIDB4MDk1ZWJjZmMsIDB4ODE3ZjBhZGMsIDB4NDBiYjczZWYsCisJMHhmZWIxNzVmZCwgMHg1Zjk0ZTlkNSwgMHg5ZTBjOGJmNywgMHg4ZmE0NDdjZiwgMHg4YWJjNjJkNywgMHhlYjViZTY3MCwKKwkweDcxYzliZDYyLCAweGZmOTc5ZjA0LCAweGIyNzlmMmExLCAweDkxZjI5ZjJlLCAweDZlZDlkN2NjLCAweDM3OGE2ZWIzLAorCTB4MDRhZDdlMTksIDB4MzZlYjZmMWQsIDB4YjA1ZWYyY2EsIDB4NGQzY2EyOTMsIDB4MjZjNGZmYjYsIDB4ZDdhMmRmZWIsCisJMHhmYmYxZDA0YiwgMHhiNGE3NGViMSwgMHg2ODNmOTlmZiwgMHhhMGFjMjM5MywgMHg5NWZiNzdmZiwgMHg0NmZiYzZiZSwKKwkweDE3ZTE5Mzc4LCAweDkzM2NhYzdhLCAweDU0Yjc5ODZkLCAweGY0YzY5MGRlLCAweDY2ZDNkYmE0LCAweGU4ZGNmY2U5LAorCTB4YzMxYzBkMTcsIDB4OWZjYjRmMjEsIDB4M2IzN2YzZDksIDB4MmEzM2RmNDEsIDB4MWYyMTQ3OWMsIDB4MjJiMTU0N2UsCisJMHgwY2ZkN2EwYSwgMHgyMTg0MGQ0ZCwgMHg5MTdhNmFiZSwgMHg0YmFlNDNiNywgMHgzOTVlYjhjNywgMHgxZmExYjk2ZSwKKwkweGRmMDBjYTA2LCAweDcxMGU2ZGJkLCAweDgxZmZjYjJmLCAweDk2ZmFjMTIxLCAweGZhNDVlNzgxLCAweDFhNmVhZGJlLAorCTB4N2ViMDYwZjMsIDB4ZmUyNzY5NWQsIDB4NzJlNTE4MzMsIDB4NmE0NTU3M2YsIDB4ZDU3ZDA3YmYsIDB4YzFlMWJhZWUsCisJMHg1NGZiYmQ2MCwgMHhiYzc5NDNmOSwgMHhjZjcxZjRlZiwgMHgzYzFmNzlkNSwgMHg2ZjM5MDk5ZSwgMHhiOGM2YTcwMiwKKwkweGYwMTFmYTFkLCAweGQ1ZjZmZDQ5LCAweGVmZGE3M2NmLCAweGRhZjAwYjNlLCAweDkyZmE5NGU0LCAweDg1ZTNlZGI1LAorCTB4MzU5ZmFmOTQsIDB4MDlmN2NmODAsIDB4ZDg1ZTFkNTMsIDB4ODQ3N2RhZjUsIDB4YWRhZjYxZjksIDB4YzVlZTE1OWYsCisJMHg0NGY3ZWFiYSwgMHg5ODU3NjFmOSwgMHhkMjFiZWZhNywgMHg2ZmJiZjhiYiwgMHhhZGU5OGRiYiwgMHg2NjdmZWVjYSwKKwkweGRhYWJiNTBiLCAweDg5ZTk5ZmRiLCAweDk2ZWQ5NWU4LCAweDY0MjM1N2JlLCAweDZkMzdiNDc5LCAweGY3OTQ1MGU1LAorCTB4Y2Q3OWZhNjQsIDB4ZjJlMThlZTYsIDB4ZTVjMTU1MzcsIDB4NThhYzgxZTEsIDB4NTM5Yjc3ODIsIDB4MTM3NTg1M2IsCisJMHhiY2ZkYjJiZCwgMHgxZmJmMmVjYSwgMHhmYTEyZTlkMSwgMHg5NmZmZmIyNSwgMHg0MmJmNzE0NCwgMHg4ZjNmNmJjZiwKKwkweDU4NGY3ZDY3LCAweDkxZjNjOWJkLCAweGFmMjA3ZGJmLCAweDdkY2JiMzQ3LCAweDdlYTQ2YTIxLCAweGU3MjVjNDc4LAorCTB4OWUzOWE0NzUsIDB4OGY0MTg1ZjcsIDB4ZGNiNzhhNDcsIDB4ZWY4MDk1OTMsIDB4ZmNkMmFmMjQsIDB4MGQ0Y2IyZmUsCisJMHhkMDZlMWZjMCwgMHhmMmY1MzI5ZiwgMHhiYjUxNTdkYiwgMHhkOTU1NWY0ZiwgMHhkN2U3MzM2ZiwgMHhmYmUzMGY4YiwKKwkweDEzZDUxNTljLCAweDZiYmNhZDM5LCAweGY1Y2I5ZjMyLCAweGEyZWVhNzFmLCAweGE3YTk4NGYyLCAweGUwNmJiZmQ4LAorCTB4ZDk5NTRlN2YsIDB4ZTk5ODlhOWYsIDB4ZGY4MTMzNTUsIDB4ODNmNmZmNWMsIDB4ZDllMWZmNTQsIDB4YWYwMDE2MjcsCisJMHg0NzM1MzNjMywgMHhmNmRiZWMyNiwgMHg0Y2ZmOTdkNiwgMHhmZTVkNmRmMywgMHgzNmEzZDYyNywgMHhmODExNmI0NCwKKwkweGQzZjc3MTdlLCAweGM1NjZiZjVjLCAweDdlODAyY2ZmLCAweDc0OTU2MzUwLCAweGI1ZGI5YzYzLCAweDkxYmYzZDNhLAorCTB4ZmZhMmM1YTksIDB4NjNiZjE1YWEsIDB4YjcyMjIyM2QsIDB4YmJkN2YyNDUsIDB4M2EzZjFmYmUsIDB4NjVmOWJjZDMsCisJMHgwZTJkZGE4NSwgMHg1NGUxYWU2ZiwgMHhmY2UxZTdmNSwgMHhhMjA0YWIzYiwgMHgyYjg2MGM5NSwgMHg1Y2U3NzVlYiwKKwkweDQ3ZTA2ODgxLCAweDcyYjk0OGIzLCAweGJmMTBkNmYxLCAweGE4OTI1MDMxLCAweGRkYTg4YmRiLCAweDhmNTUyNmUyLAorCTB4NDFkYmY0NTcsIDB4MTdmNWExYTcsIDB4ZjdhZTc3ZDMsIDB4OGE1N2JmM2QsIDB4NzYzZGY5MjYsIDB4MzBkN2ZkZDcsCisJMHhmZTAwNDVmZSwgMHg2NGNmMzNhZSwgMHg5YzNkMDI2ZSwgMHg1Njc0ZjlkZiwgMHgzNDM2OWZiMCwgMHg3MmJlNzJiZCwKKwkweDdkZjRlN2ZkLCAweGQ4YmU4ZTczLCAweGMyZGI2ZjQwLCAweDBiODVmNjRjLCAweGY0ZWIyNGNmLCAweGMyZTllOTI2LAorCTB4ZTdlY2Q5MzMsIDB4ZDlmN2Q0NGUsIDB4MDk2N2M1MDUsIDB4MDg1ZmJiNDcsIDB4OWUxMDY3OGUsIDB4OTcxY2UxYTYsCisJMHgwZTFhNmRlMywgMHg5ZDYxZmJiOSwgMHg2ZjhlMmUyZiwgMHg2N2JlMGUxYSwgMHg2OGUxNDFmMCwgMHg0MWJiNjNjYSwKKwkweGY0MWU1MzRlLCAweDhhN2Y4MzY0LCAweGZlMmNhNmUyLCAweDQyY2E2ZmVlLCAweGQyMmQ5N2ZiLCAweGE3Y2M2MzBlLAorCTB4OGUxNGI5ZjIsIDB4ZjBiNWEyN2IsIDB4NmU3Y2FlZmUsIDB4OGRlNDI2ZTAsIDB4OTI5ZGVhNzEsIDB4MjUzYmQ0ZWYsCisJMHhiNzVkMDk3ZiwgMHhlOGVkMjk5NiwgMHgxZWU2NGZhNCwgMHgzZWE0YjNhNywgMHg1YzgyZjQ5NiwgMHhkZTY1OTNlNCwKKwkweDM3MGJmMzI5LCAweDZmZTFkODk0LCAweGJjYzliN2FmLCAweGZkODk3ZDZiLCAweDM1ZjdlNjE4LCAweDRmYzRiNTY5LAorCTB4YzViZjc0NzMsIDB4ZGRhOTdmMDIsIDB4ZmFmZWZiMGIsIDB4M2YxY2UxZTUsIDB4Y2YzZWRiMzEsIDB4N2FmNjY5NGIsCisJMHgwMzVjNjliYiwgMHhlNmZkZmQwZiwgMHhmOWY0OGJlZiwgMHgwYjg5MGRmNCwgMHhlZGI2YTVlYSwgMHhmNjM5YzMwYiwKKwkweDhlMzJlOGE0LCAweGI0YTY0OTYwLCAweDZjZmIzZWUzLCAweGFhOTE3YzQ3LCAweDZkYzJkYmViLCAweGVhNWJhMWQwLAorCTB4OGZkNzhjMWIsIDB4ZWY1ZTA2ZWQsIDB4MmZmOWExNDgsIDB4NWVhNWUzZDYsIDB4ZmFiODQ4YjYsIDB4ZTM3Yzk1OWUsCisJMHgwNTJkN2NlNSwgMHhjMDA1ZDVlNywgMHgyYzVjZTcxZCwgMHhlZjIxNzNlNSwgMHg3OTE5YmM0OSwgMHhmMGExNWYwMywKKwkweDgyZjFmMTVkLCAweDlmOTVkODE0LCAweGM3ZjY5NGM4LCAweDhmMmM3YzUwLCAweGU1MTNkZTFhLCAweGQ0Y2Y1YzA2LAorCTB4ZGMwMGNhMWQsIDB4YTg5ZDc1OGQsIDB4NjhlOTdhZjMsIDB4YWZiZmI0ZWIsIDB4OGM2ODc3Y2YsIDB4MzA0NzdjOGYsCisJMHgxZDZmZDc3ZCwgMHgyMDI0ODg3MiwgMHhkNWFiNmU3MSwgMHg1YmQ0MjU4MywgMHhiZjQzZjdmZCwgMHgzNmFhZGZhOCwKKwkweDNiOTcwNGY5LCAweDkxNzM5NzgwLCAweGJkNDFkZmZiLCAweDBiNjIxYjA1LCAweGVkMTgwZmEwLCAweGYyMmZhZTE3LAorCTB4N2JjZDA3OTYsIDB4NWUzMzU2ZTAsIDB4ZjM5OTM1MDYsIDB4ZjM5OTc3ODMsIDB4MGQwNjcxNWIsIDB4ZTVkYmU3ZmIsCisJMHgyMWY5Y2MwNywgMHg5M2Y5Y2M4NywgMHgzMzcxZGMxZiwgMHhlYTg1NGZiNiwgMHhiZTg1NWZiYiwgMHg4N2YxZTdmMywKKwkweDdhOWY0ZTcwLCAweGUwNjg5NWY5LCAweGNiNWZmMTZiLCAweDBiOGY0MjBmLCAweDNjMjE2NzhkLCAweDdjNzNkMDJhLAorCTB4OTdhNjE0NWIsIDB4YmE1YWUyMmIsIDB4ZGM0NjQzZTEsIDB4MzA2Mjc2MDYsIDB4ZGYwYTU0ZGQsIDB4OTVkYTZiNDEsCisJMHhhNjhhY2ZmNSwgMHg2NzQ0YmQ5YiwgMHhjZmRlY2I1NSwgMHhlY2IzN2E5MCwgMHg1YWQzNjQ3NywgMHhkMGNlZTQzYiwKKwkweDNiZTNiYjcxLCAweGM2ZWJkMjIyLCAweDIxMTkyYTNlLCAweDM2NWVhZWNiLCAweGZlOGE3YzRlLCAweDFlMzdiY2Q2LAorCTB4MmJmMjU4ZjQsIDB4OTI5YmU1ODUsIDB4MDc1ZmIyOTcsIDB4M2VkZDFjZGQsIDB4NmY0ZTQ2ZmIsIDB4MzBmMGMwOWUsCisJMHg5YjBiOTJlYywgMHhlNTE0NDA5NSwgMHg4NzQ0MjM1ZCwgMHg4YmYxMWY3ZiwgMHhmMTIxMGRhNSwgMHhlMjQyNmI5ZiwKKwkweGNiOTlkNjgyLCAweGY3ZGFlZTE3LCAweDUwNDcxMGZmLCAweGUzODI3OGUxLCAweDY3OGNhZTJlLCAweDVlODAxZmY0LAorCTB4YjA0YTc5NTksIDB4YTlmMmFhN2QsIDB4ZTVjY2MyNmYsIDB4ZjVmMzVkNzIsIDB4YWRlNzE4NzUsIDB4ZjFjYjVkZjAsCisJMHhhYWNiNTc3YiwgMHhhM2ZlMzhlMiwgMHg0YmE4ZTk3MywgMHhjYjczODUzYiwgMHg1ZWFmNzczOCwgMHhmMjk1NTFiNywKKwkweGZkODRiN2JjLCAweDhlNzY5MWM4LCAweDg4NzZhYzhiLCAweGViY2QwNDQwLCAweGViZGQ5NDUwLCAweGQ2OTdlZmEyLAorCTB4YjJiY2IxNDcsIDB4ZTg1Y2U0ODAsIDB4MjcwYTk0OGIsIDB4NjI3YTRkYzcsIDB4YmJjNGVlZDAsIDB4ZDU2NWNiMmEsCisJMHhkNTFlMTJmMSwgMHhiMGZjNTFiZiwgMHhhOGMzNTcxZCwgMHgzMjkzZmM4YiwgMHhkODA0NDhiZiwgMHhmMjNhMGJiZSwKKwkweGY4MDNhZDA2LCAweDQ2OGJjZTBiLCAweDU5NTY1ZmE5LCAweDlmMDBmYjAzLCAweGFiNjg3MzhlLCAweGFkMTU1ZWI5LAorCTB4YzgzOGEzZjMsIDB4MzVlZmU2N2IsIDB4ZDdlYjhkYTIsIDB4MmMyNmZhZWUsIDB4M2Q5MDdiZjgsIDB4NDM1ZWY1OWEsCisJMHhmOTc1NTZmZiwgMHgzODY1ZmQ0YSwgMHgyMDc0NGZjYiwgMHg2Y2JlODM4NCwgMHhlZWJlZGNiYSwgMHg2ODIzOTIxZSwKKwkweDdiMGQyYjdkLCAweGRmMjk1YWY4LCAweDllNTFiMmRkLCAweDY3OWYyNDYzLCAweGQ2ZWI0ZTAxLCAweGVmODY3YzkyLAorCTB4Y2UyMDZmYTQsIDB4ZjcwYTJjNDQsIDB4ZWE1ZWY5NGIsIDB4Njc2NmViMGIsIDB4ZjJmNDVjYjEsIDB4NDAwYTVlM2YsCisJMHg0ODdiNjkxZiwgMHhiYWQyYmI2MSwgMHhiYWVmZDk3YywgMHgzOTczZmFmYiwgMHhlM2MyYTdmOCwgMHhiNjFjYjE4NCwKKwkweGRlNTE4YTZlLCAweDRmOTFmNTg3LCAweGM4NjRjNTMwLCAweDFlZjdmYWY5LCAweDRiZGVmZTZlLCAweDNlYzE2NmY1LAorCTB4YjI3NDFlMjIsIDB4ZmI5MGM0N2QsIDB4MmViZWI5MGQsIDB4MWFjOWNiNTYsIDB4NzVmZWI5ZDYsIDB4ZjA1MTZkYjEsCisJMHhmODhhODliYiwgMHg2Y2I3MjVlZiwgMHgzNmUzY2ZkNiwgMHgyYWZjM2Y1YSwgMHg4M2UyOTVjNywgMHhmNTE5OGZmMCwKKwkweDczYzk2NjQ2LCAweGVmNThmODY1LCAweGZiMWViZDE2LCAweDUzMmRjYTVmLCAweGU2OGViZGVlLCAweGM1YjBmZTU1LAorCTB4ODFhMTdiMGQsIDB4NjZmNWUxMDcsIDB4ZDdjNzBlMDEsIDB4Nzc0MDBiM2EsIDB4N2I0YWM3YzMsIDB4Yzk3YzkxZDksCisJMHgwYTg2MjNlNywgMHhhYjFhMzc4ZSwgMHhjYjM2M2JmNywgMHhjMjkzNGE2MiwgMHg5ZmE5MWU4OSwgMHgxZWQyNDVlMywKKwkweDk4YjQzNTFmLCAweDEzMjQ5NmVkLCAweDZlMmFlYmNjLCAweDRmZGViMjY1LCAweGY3ZjhiZGI5LCAweDRmOThiYmEzLAorCTB4NGExNDVkMDcsIDB4NmRmOGZiZjksIDB4MmYzOTI2Y2EsIDB4MGUyN2M3MmYsIDB4ZjZjOWMwN2YsIDB4MzlmYWUzY2UsCisJMHhlODgxZTA2NCwgMHgwZmNiMTg2OCwgMHgwZDhiNWYzYSwgMHhhMGI1OWJhMSwgMHhhMDg3OWMwNywgMHg2ZTk4MjUwNywKKwkweDhiNzE3NGNjLCAweGVlMmJlMTIyLCAweGJhZjdmMjkzLCAweGU4Mzc5OTU4LCAweGYxM2ZmNDgyLCAweDIyOWJhMGJmLAorCTB4NGVlZmYwYzEsIDB4ZGJkNjM0MGYsIDB4NzQ0ODFlOWQsIDB4ZDA3NDA4YjAsIDB4MGU4NDJmNTEsIDB4ZWMzZmQ1ODQsCisJMHhhNTQyZmNkYiwgMHgyYjg3NjIyMywgMHhhYjE0ODI4NCwgMHgxN2NlMjFmMCwgMHhlYmMzMjQ2NywgMHhiMTFmYWIxZSwKKwkweDEyYWRiZDc4LCAweDkyYWM3ZDJmLCAweGYxYjRlOGVlLCAweDdkNzAxNzg1LCAweDRiN2RlMjJmLCAweGJjMjg1YzFlLAorCTB4NDUyNGJmNTQsIDB4MWZhZDdkYjAsIDB4NzEzMTU1YzksIDB4NDUyMDRlZGMsIDB4YmIwYThlNTgsIDB4NWY2OGE1MTMsCisJMHgyZmZiMjMxMiwgMHhmZTM4MjllOSwgMHg1YWYzZmE4ZSwgMHgzNmU2NzRlMiwgMHhjMTVlZmUxYywgMHg0N2RhMDU3MiwKKwkweDlmN2I3MDE3LCAweDVhZjdiNjQ1LCAweDIxOWJlZDI5LCAweDk1YjY5OGY1LCAweDVjYmYxYzYxLCAweDJjOWY3NzcyLAorCTB4YjFjNGM5ZDAsIDB4YTIzOTNhNjYsIDB4ZGU5MTk1ZDMsIDB4OGRkNmVkOTQsIDB4ZjAyNDllNzUsIDB4ZmU4NmQyODMsCisJMHgzYmQ0ZGU3YywgMHgwMjc3YWI4YiwgMHhiMDQ3Y2Y5ZiwgMHhlYWIyNTlmYywgMHg2MTg2OTNjNywgMHg3YmM0MmY3ZSwKKwkweDkzMzNjMjgwLCAweGE4M2ZiM2I3LCAweDRmZjY2MWI0LCAweGI0YmU4NDNlLCAweDJiZGZjOWQ1LCAweDU5ZjViNWIyLAorCTB4ZjcxNWZmOTAsIDB4YTFmNDlkZGMsIDB4N2IwMWM2NzQsIDB4OWFkN2I1MTIsIDB4OTU3ZjljYTYsIDB4ZWRiZWM5ZDIsCisJMHg5ODllNDBlZiwgMHhmYWU1NWQzYywgMHgzZmI0ODU5MywgMHhjZTM5MDY4YiwgMHhkNmU3ZGYyNCwgMHhkMjZmZWEyNCwKKwkweDY5YzM4NTI4LCAweGE5NWQzYThlLCAweGE0MGZjMWI3LCAweDJjYTlmN2UzLCAweGU0N2Y5NzQ1LCAweDU1OTI4MTNkLAorCTB4NzNkMmIyN2QsIDB4YzkyMTNmZTEsIDB4ZmQzOTBiYjgsIDB4MThmZWEzNTMsIDB4YTVlNDAzNjUsIDB4ZmVlNGUzYmUsCisJMHgxZmEzZWEzMywgMHg0YjNhN2JmNCwgMHhkNWJmNTVjYSwgMHgwOWU0NjJlMSwgMHg3Y2JmNWNhZSwgMHg4Y2QxZDg3NSwKKwkweDQwYjZhNDY4LCAweGZkZTlhNTM2LCAweDc1ODRiZWM3LCAweGUzMTc0YzRlLCAweDc3ZWUwM2Q3LCAweGNmMTM2MmFhLAorCTB4Zjk4NGFkYjcsIDB4MWI5NjU0NDIsIDB4NDI5MWFiZjQsIDB4ZDZlM2ZhY2QsIDB4OGYyN2NjZmUsIDB4N2EzYjY5OGUsCisJMHg2ZThmZTUzNywgMHg4Y2VkMjQxZSwgMHhiZTYxN2RiYSwgMHg3MDdjYjA0YiwgMHg3N2U0OGM3NCwgMHg5ODIzOWI2ZCwKKwkweDVhYjg4ZmZlLCAweDNkYTRlMmEzLCAweDY1MGRlZDhlLCAweGI2N2M0OTNhLCAweGY4N2VmZWFjLCAweGVkMjJjYmI5LAorCTB4Y2M3ZTcxNDcsIDB4YzcxYTY4N2YsIDB4NTNhZDk0MjcsIDB4MDdiODYxMDMsIDB4NmY2Y2M2YjAsIDB4ZGVkNDhhYTgsCisJMHhiNTA4N2VjNiwgMHgwN2RhODQxYiwgMHhhM2EwMzM0MCwgMHhkMzBhMzVmMiwgMHg4ZjdhZGY2MSwgMHg5Y2Y5OTkzZCwKKwkweGNhZmFjMmUyLCAweDcwZmQwMzIzLCAweDljN2I5NDBlLCAweDg1N2NjNzFjLCAweDgyNmJlMGZkLCAweGI5ZDg3MGZiLAorCTB4YjU4OTA3MDUsIDB4MDA5ZjZiNjcsIDB4MjU4ZDI1NGUsIDB4ZTQ0NmVmYWMsIDB4ZmFiZmNjNmEsIDB4ZWMxNzA0YWEsCisJMHgyNmZlOWQxNywgMHhiZTBiNWVjMiwgMHhjNjRkNmQ2NCwgMHg5NjU1ZmNiZSwgMHgzMTMwZjE5YiwgMHhjOTE1OTVjZSwKKwkweGZiZTRlZDc0LCAweGFlNmQ0NzExLCAweGU4ZWZjYzJjLCAweGU3MDVhNzRhLCAweDkyMTVjNGVkLCAweDM5ZGY2OWJlLAorCTB4MWVlMThmNzAsIDB4M2YwNzA4YWIsIDB4ZmIyNTlhZDgsIDB4NWFkY2IzOWQsIDB4YmRmMjkxYmMsIDB4MTUxYWMyMWQsCisJMHg2N2NhZmEwNywgMHg1ZmQ4NWVmYSwgMHg3NWU2MmRmYiwgMHgwNDYyMTdlYSwgMHgzNWIyODllNCwgMHg3NGJjZTU2YiwKKwkweDk2ZDYxMGZhLCAweGU3MWE3OGMyLCAweDAyYjRlNmQ0LCAweGU0M2EwMWQ4LCAweGRiNjNmZWRiLCAweGJhMGVjNzAxLAorCTB4M2QzMGFlOTgsIDB4YzEwZTdhZDAsIDB4YmZkZTljOGUsIDB4ZTljYTMyZjQsIDB4Y2JkMDNlZmIsIDB4N2U4MWIxYzQsCisJMHg1MjJmMWI4OCwgMHhiNmJlMzhhYiwgMHhlMDc4NDkzZCwgMHg2ZDE3NmM3NywgMHg5M2I0OGYyYywgMHg2N2JlMDIzYywKKwkweDlmODMxOWYwLCAweDFkNzg1ZDEwLCAweGRlZjg5ZDg5LCAweDIyNTM0NzUyLCAweGNlYjViZTFlLCAweDc1YjNlOWMxLAorCTB4NzgyNTYxMmUsIDB4ZTI0YmFiNmYsIDB4NmU3NTBiZmMsIDB4NzJlYTliNGUsIDB4NzU4YmZiZjgsIDB4YThlZmNlMWUsCisJMHg5N2Y5YzExYiwgMHhkZjljYmNlYiwgMHhkMzgxMzc1NSwgMHhmOThhZWI1NywgMHgwOGFmYzFiYiwgMHgwYzk3Y2MzZSwKKwkweDI3ZjA2M2JlLCAweDNlMGNiZTgzLCAweDczNTc0YTE1LCAweDE3YjhjYzA5LCAweDFmOTllZDQxLCAweGViMTA3YzFhLAorCTB4ZjI3NDE0YjAsIDB4ZTljZjAzMjcsIDB4MDkyZmIxNGEsIDB4Y2ViNDUwZmMsIDB4NTIyOGZmMDYsIDB4MGFmZjNkY2YsCisJMHgyMmJkYjljMSwgMHhlZDIyZWQ5MiwgMHhmNmMxZjI0MiwgMHgwNzlmMDc0OCwgMHgwYmIxNzZhOSwgMHhkYmZhODlmNiwKKwkweDBlZWY0N2JjLCAweGFkNmY4NzNhLCAweDg4MzU4NDUwLCAweGM0YmM3ZjhlLCAweDc0NDFhYzI5LCAweGFjNTk2ZjNjLAorCTB4ZDk2NzNmMjksIDB4YTRmNDZmZmIsIDB4ZDE4ZGRmZmUsIDB4MWU2OWIzNzIsIDB4ZTI3OTdlNDcsIDB4ZjdkMTNmZjEsCisJMHg0Y2YyZmNkZiwgMHhmMzRlZjAyNiwgMHhjNjA4ZmNkOCwgMHg5ZjVjMmJiZCwgMHhkNzljYWI0NywgMHg5Nzk2NzY1ZCwKKwkweDdkNGI4NmZhLCAweGQ0Yjg2ZmFiLCAweDA4ZTNmMGI3LCAweGEyM2RjZjhhLCAweDJkMjRhM2UzLCAweGIxYTc5ZGY2LAorCTB4OWJhZWVjNmYsIDB4YjQ0ZWMwNDcsIDB4ZmE0YmRlNTIsIDB4ZjJhM2Y4MDQsIDB4MmJmOGU4YmYsIDB4NzBjNjE2NWQsCisJMHhmN2QwNmQyZCwgMHgzNmRjNzA2YiwgMHhiMjU4ZjVjMSwgMHhmMTRlZjk2MCwgMHhkN2JmMDEwYSwgMHgwM2Q4NWZiMSwKKwkweDYzODgyYjI0LCAweDQwYWZjMzhhLCAweDZiZTUyMjc2LCAweGFiOThlYzBlLCAweGU0MTFmNzdmLCAweDIxZDk2NTc2LAorCTB4NDczNWIzOTYsIDB4MDg3ZmM3MjQsIDB4NzA1Y2VkOWYsIDB4ODNiMmNhN2YsIDB4ZjZiNDRmNWMsIDB4NDY2ZmM1MzYsCisJMHhjMWRhZjUwYywgMHhjMGUzNDAzNywgMHg3ZWNlNjk1ZiwgMHgxYTJlZmQ4MSwgMHg1NDdmYmUxNSwgMHg1ZjJmN2ZhZSwKKwkweGEyZTI5OGFkLCAweGYyYWI2NDY3LCAweDk1OTY0NWRlLCAweDQyNTlmM2QzLCAweGY5MWE0NzNmLCAweDk2ZTgzMmJjLAorCTB4NjFjNzA4ZjgsIDB4ZGJlNjM3OTYsIDB4ZTdmMTA0MTcsIDB4NTk3YmZkNTIsIDB4YTcxNGM1OGUsIDB4OWQ5NjdmNzksCisJMHhjZDhmMzlmYiwgMHg5YmRlZmQ0OSwgMHhjZjlmNmU5MywgMHhmN2NkY2ZmYywgMHhhNWZhOGMwNSwgMHg2MGFiMDUzOSwKKwkweDgzNWQyZTRmLCAweGY2Y2VhNmE4LCAweDdkNTZkOTI1LCAweDdmYTkyZTVlLCAweDhiNWNlODM5LCAweDJlYTJmOGUyLAorCTB4OWU0MzA3Y2YsIDB4NDc1Zjg1MzksIDB4ZWY1OWZjZjIsIDB4YjllMTdjYWEsIDB4YWM4ZmUwMTcsIDB4OWYxODczZmMsCisJMHg3NTgzOTU1MywgMHg3ZmFlNGFmYiwgMHg4Mzk2MzRmOCwgMHg3MGNhOTFiYywgMHhmZjEyZTFjOCwgMHgzNWZkY2Y4NSwKKwkweGI1NWQ3MTFhLCAweDk3YmRhNDNiLCAweDZiNDhhM2QyLCAweGZiNjBhYWVlLCAweGY2ODc4ZDVlLCAweGFkZjgxYzQ5LAorCTB4ZmFmZmVmZDksIDB4ZmJlNjdmMGIsIDB4MTRiMDg0OWQsIDB4ZTM5ODZlM2QsIDB4N2M3NjZhZDQsIDB4YjA2YmYxY2EsCisJMHg3Mjg2ZjljNywgMHgxZDVmMWM3ZiwgMHhmOTU2YmVkYSwgMHg0MjU3ZjU5YSwgMHg2OGE3YzMyYywgMHgzYzg5OTdjZiwKKwkweDEyOTc5ZDhmLCAweGY3NmFlN2MxLCAweDJhZWM0Y2FjLCAweDFmYjQyODhlLCAweGIwYzFjZTIzLCAweDM1OGFkNWZmLAorCTB4NTljZmMzOWYsIDB4OTM4NGQ3N2IsIDB4ZmY2NWRlOTIsIDB4Y2ExZWVkYTEsIDB4MzEzODRhOGUsIDB4ZWVjNjIwNTAsCisJMHg1ODkzYjYyYSwgMHgyYzlmYzcwNSwgMHhlZDM4ZWRkNSwgMHg2M2Y2NGNmZSwgMHhkNzc3Mjc3NywgMHgyNDQ2YTdhZSwKKwkweGRkNWJiNTkyLCAweGJlYjM4ODMxLCAweGFlODRjNDI4LCAweGI2NDlmNGYwLCAweGQzY2Y2Yjk0LCAweGZiM2Y4MjNlLAorCTB4ZTU5NTM2ZTIsIDB4YTJkYjhiY2EsIDB4NmNkNDNmNzgsIDB4ZTIyMGYwN2IsIDB4NTI5ZTZiMDQsIDB4MmQ1OGVkZDgsCisJMHhhZmNlMzg1YSwgMHgxYzJhODc2NiwgMHhlYzFkZTdjMSwgMHhjZmRkZjE0NywgMHg1MTczZjE3MywgMHg4YjVmNDA0YiwKKwkweDY2ZWYxNDlhLCAweGMzYmI0ZjlhLCAweDY4MjNkMzFkLCAweGJlODBhZjNlLCAweDg3MTczNDg4LCAweGZmNDcwZDM1LAorCTB4MDc5ZmZjYzYsIDB4Mzc5MjBiN2YsIDB4YzgzZjM1MTcsIDB4ZWY1NDhkZjEsIDB4YmYzN2NiMDIsIDB4M2MzOGUwOGQsCisJMHhjMWRlYzkzYSwgMHgxODZlY2YzYywgMHg0NWY1ZmVjMiwgMHg1ODZiZGI0ZCwgMHhlMTE2ZDgzZSwgMHg4Y2U5ZTk4MiwKKwkweGU0MGY3Y2NkLCAweDgxZGUzZTgwLCAweDljOGYyOTZjLCAweDY3ZDFlZGQ1LCAweDFmNTk1MDVmLCAweDJmYjEzY2MyLAorCTB4Yjg3MWU4Y2YsIDB4ZjUzN2JiNDYsIDB4NGI2NjZmNzYsIDB4NWIyNmE3ZjksIDB4ZmVhMzRmZWUsIDB4ZDFhM2E2YTIsCisJMHhjOWZlYThmZCwgMHhmYTczZWY1ZCwgMHgxNjZmYmViZSwgMHgzZGYwYjY0NSwgMHgyMjNiOTNjZiwgMHhjOWUwOWVmOCwKKwkweGZlMzlmZjFkLCAweDdjZWYxYTM1LCAweDI1MDQ5OGQzLCAweGM4OWQ5ZjY4LCAweGJhN2RjOWI2LCAweGYzMmZjNjQxLAorCTB4MTNkNjE3MjUsIDB4NjczZDc4OWEsIDB4YWMyOGE1YjcsIDB4YTRkZTAzMmYsIDB4ZjFkZDlmYjcsIDB4MzY0M2RmMTIsCisJMHgxYzFmZWJlNCwgMHhiMTRiMzgyZiwgMHgxOGEzZGM4NiwgMHg4ZDcyMDgzZCwgMHhkN2JmNTVhMywgMHg2M2RiYTZkMSwKKwkweGFmZmE2ZmZlLCAweDU5MjdiZmQxLCAweGU0NzFmNThhLCAweGM0NjEwZDNkLCAweGJkNjRiODZmLCAweDI3YjczNTIyLAorCTB4YzFkY2RkZjYsIDB4OTdiODk5ZWUsIDB4NzE5MmRlMmQsIDB4ZmJiN2EyOTcsIDB4NzM3ZmU4MTEsIDB4YmI2NzhkZGYsCisJMHhiYjliNTJjYiwgMHgxYzVmZjIyNywgMHhlMDk1ODUyNiwgMHhjZTg4NzczMywgMHg4NzVhOTI1NywgMHgzNDdiYmVjMSwKKwkweDg2MTVjYTRkLCAweGI1NmFhZDNmLCAweGJmMDRiYzIyLCAweDNlNjc0NDVlLCAweGQwYWFmZGU0LCAweDQ5YzkwNzYwLAorCTB4NTYzZDdjNjcsIDB4NzFkYWYxNjEsIDB4OTlkOTQ2M2UsIDB4M2JiN2VhMmUsIDB4NzViZWMxMzcsIDB4ZWM3YzJlYzQsCisJMHgyOWQxN2I3ZiwgMHhkMmU5MjdmZCwgMHhmNjE4ZjIwZiwgMHg3MTU1YTUxNywgMHhkODc4YWM4MSwgMHhhOWJhNzRmMSwKKwkweDQxZTU0YTlhLCAweDI5YjU1M2Y0LCAweGVhMzkwNTkwLCAweDJiZGE1ZDljLCAweGE5ZmQwZTUxLCAweGFiZDY0MGFhLAorCTB4ZmQxNGU5ZDcsIDB4NjlhM2RmYTAsIDB4ZjcyYzBiYWUsIDB4ZDAxMjhjZWUsIDB4NDRhZjJjM2YsIDB4ZDNjOGJiNDksCisJMHg0MTYxNGRjZSwgMHgxY2JmNzZlNywgMHhjNzc3MTE4YiwgMHg2NmRmNGFmZSwgMHgwYmNjM2YzOSwgMHg3YjIyZmNmMiwKKwkweDVkZTQxNjYzLCAweGQxNDVkYzYzLCAweDM5ZGUzYzhkLCAweGUxNDViYzdkLCAweGEzOWZkMjhkLCAweDNlYTIxMWM3LAorCTB4ZWMxMzZmOGYsIDB4MjY3YjZhNzcsIDB4MzNlNmU1OGMsIDB4NjMyZjJkYzksIDB4ZjRjZjMzZmMsIDB4YTM4N2I4ZTcsCisJMHhiYjA1ZmU2OSwgMHhmMWM5ZGNiOCwgMHg4NmNmOTVlNywgMHhkM2RmMzAwNSwgMHg1ZGIxNDRjZiwgMHhjYTRkYjRlYiwKKwkweDEyYTNhNzYzLCAweDE0M2IxZTU5LCAweGY2NWNmMGY1LCAweGE2MTUzZDYzLCAweDVhNzQyZWMwLCAweDk0MjRmNjExLAorCTB4ZjJjMWVlNmYsIDB4MzJkZDY1NDAsIDB4MTI1NGQ3ZjYsIDB4NGIxYzgxN2IsIDB4N2ZjODA0ZTksIDB4NjdmNzM3YTcsCisJMHgzN2U5ZDE3YiwgMHg0MTVjYmU1NSwgMHhiYmUzNTdkZiwgMHhmZWU3MWEyNiwgMHgwODgwZjU4YywgMHg3OTllMjNiNiwKKwkweDgzZmQ2ZmY2LCAweDVhNDYzYmZkLCAweDNlZDk5NGY5LCAweDUxODNkMDY2LCAweGY5MjM5NDVlLCAweGQ0OGU1MTYwLAorCTB4NzFjODZlNTMsIDB4ZDExZDVhNzEsIDB4YWYzYTcwZjQsIDB4YzIwN2YyNTMsIDB4YjQ4MWViMDMsIDB4ZWY2MTEzMWYsCisJMHgzYmI0ZDIzZiwgMHg5YzA0ODk1MSwgMHgwOWZmNTkwMywgMHhmYTk1NmZiOCwgMHgzNjZkOTlkNiwgMHhiZTU1NTNmNiwKKwkweDNiNjVlNTEyLCAweGYxNTdkZGQ0LCAweDU1NGFjOTdkLCAweDE2OTVlM2NhLCAweGY5NTBkZjc5LCAweGZmYjY1NmU1LAorCTB4MmNlMzNmZDQsIDB4ZGUwODNjMDAsIDB4NmRiNmRmYWMsIDB4ZTQ3MWY1NTYsIDB4ZjRiN2E3YjgsIDB4ODA4ZDdlOTEsCisJMHgxMDc5N2Y5ZSwgMHhjNjI2MzVmYiwgMHg1OTUzNzk4OSwgMHgwNzkwZGFjZSwgMHgyYTdhNWViOCwgMHg2OWZlZTM4MiwKKwkweDM0ZTIyZjFjLCAweDczZjY3ZjJhLCAweDA1OThjZjA5LCAweGMxZDAyN2FjLCAweDRhYjlmY2NkLCAweDc3ZDVjZmU3LAorCTB4ZmI4MzEzNWYsIDB4OTU1ZGUyMTAsIDB4YjI1Yzc5ZWYsIDB4ZmY4MjdhN2EsIDB4ZDFlYmMyODYsIDB4YmYzZjlkMWMsCisJMHg4M2YzMzhmYywgMHg4ODM3ZGEyYSwgMHhmYmFjNWIwZiwgMHhhYjNmMTcxMywgMHg3OGI5NWNiMCwgMHgzMDhmMzVkNSwKKwkweDI2Yzc3ZGRmLCAweDVjZTIyZjcwLCAweGMxZDE4M2QzLCAweDkxY2ZhOGY4LCAweGJkYjNiMGZjLCAweGE2MmZlYjg3LAorCTB4NWJmZGIyZmEsIDB4MmQ5ZjNjZDEsIDB4MTNlNjBmMzYsIDB4ZGRlZmM3OGEsIDB4MDdmNTU5ZmUsIDB4MjI2Y2FmYjUsCisJMHhjYWVmMjJmOSwgMHgyZDEyNWZmNSwgMHhmODMzZmQzZiwgMHhmYjI3MzZjYiwgMHg3Y2ZmMDk1MSwgMHhhZGFjZWEzZiwKKwkweDdmZDYwMTY5LCAweGYzMjc3OWY2LCAweDcyYjFiMzlkLCAweGYzYTQ5ZmRmLCAweGY5OGQ5N2Q0LCAweGI2NmJmNGRjLAorCTB4OWE2MWZjY2IsIDB4ZDBiNDM5YzAsIDB4OThkN2VlNmYsIDB4OWIxY2VhZDcsIDB4NGY3OGI3YTQsIDB4ZDU0NGZjMGMsCisJMHg0N2Y0MGY4NCwgMHhiNzExZjlmOCwgMHhlZGM2ZDc3ZiwgMHg0MGIzZDc0MywgMHg0ZmIxZDc2ZiwgMHhiYTYwOGY5ZiwKKwkweGUyNGJkYjM5LCAweGQ5MGJlY2U1LCAweDhkMWQ5ZTdjLCAweGYzNGVmNDk1LCAweDc0ZGU4NTRkLCAweGI4YTY1NjM2LAorCTB4YTg3YTA0OTksIDB4Mzg3YTQ5NzQsIDB4ZWQ4OWE2M2IsIDB4ZWQ5NTY3MDIsIDB4YzliNTFlOWMsIDB4NzRjYjk1NzYsCisJMHg1ZmQxM2I3ZiwgMHhiNDA3ZTgxMiwgMHg2M2FhYmIwOSwgMHgxOWU0MGI0ZCwgMHgwNWUxZjlmMCwgMHg0ZjcwMDY5YywKKwkweDBlOGVkNDNiLCAweGQ3ZjljNTNhLCAweGUzMzNlZmFhLCAweGViZjYwNTFkLCAweDg5YTc5ZmIwLCAweGJhNmJjN2VmLAorCTB4ZWRiNTU5M2MsIDB4ZjAyNTdmNGEsIDB4NjE0ZGI1NTQsIDB4MTk3ZmRhN2YsIDB4MTNhY2QwZmQsIDB4ZDEwMDNmMGMsCisJMHhjMjlmNjJlNSwgMHg2ZTJjMjJlZiwgMHhmYjExNmRiOCwgMHhiZGFjOTZkMywgMHhhYzZmNzQxNSwgMHg2ZjdlYjE2MywKKwkweGYyYTJhOGZjLCAweDY5M2E4ZTdjLCAweDM5NWVlNGZmLCAweGRmZGYwMTllLCAweGVmMWQyOGU3LCAweGYzOGNiODc1LAorCTB4M2JmMGY2OGIsIDB4NDc0OTZlMzksIDB4ZmVhNDZkOTQsIDB4MzU5NDFhYWEsIDB4YTE5YTRlM2MsIDB4MTlmNWNhZTcsCisJMHhkOGIwMjI3MCwgMHhhYTNiZTc2MSwgMHg2ZWVlZDNkZiwgMHhiYjNjYzZmZCwgMHg5ZDMxY2Y5YiwgMHg5MzRkMWZjZiwKKwkweGRlZGI5M2Y3LCAweDJmY2NmNzk2LCAweDI2MjQzZDdkLCAweDQxZTQ1YmVlLCAweGY0NjA2MWJlLCAweGQwNjNiODg3LAorCTB4MjJmM2Y1MjAsIDB4MzVmNjFjZjgsIDB4Y2YzNGViZWMsIDB4ZmY2NjBkYWMsIDB4ZTY1M2NlNGUsIDB4ZTY2ZDgwZmMsCisJMHg3MzBlZWU3YywgMHg5Y2Q5YWYzZSwgMHhjZTZlYmNmNywgMHgwZWUzMDlmZiwgMHhmNDEzODRlYiwgMHg0MjM1YzQ2ZiwKKwkweGZkMGE0NmZmLCAweGY1MjYxZGRiLCAweDdmYTFlNDZmLCAweDhkZmU4NTIzLCAweDkxYmZkMGVmLCAweDNjOGRmZTg3LAorCTB4YTFlNDZmZjQsIDB4ZmU4NTIzN2YsIDB4ZmVlZWVmOGQsIDB4YmE1NTRlMTIsIDB4ZTA3ODE0YmQsIDB4NGVkZGJhYjgsCisJMHhmNzgxM2UyMywgMHg4OWQ5YzVjYiwgMHg1NTg1NDdjYywgMHgxNzE3YTVlYSwgMHhkOGZjYjJlNSwgMHhlMjlhNmY2MSwKKwkweDExOTM3YjYwLCAweGFkMTg5NThmLCAweDFjNDdmNzg1LCAweDJhYjJkMjgwLCAweGIxZGI4ZDM5LCAweDU1ZjZiYTFkLAorCTB4MmFhZTg3NjksIDB4ZWVjMjQ2NzAsIDB4ZTRmMmJhZDEsIDB4YTczZDg4MmEsIDB4ZDQxOGI0YTMsIDB4ZGI2YjY4YmYsCisJMHgyZjU2ZjgwMiwgMHhmZjdlYzAzYiwgMHg3N2VlZTVkNiwgMHg2M2Y4OTNhZiwgMHg1ZjExOGJmYiwgMHgwZjczODI1NSwKKwkweDI1ZjQ5YjdjLCAweDcxZWU3NzE5LCAweDQzNTNkYjA0LCAweDRkNjI0NGZkLCAweGQzZjIxZTUwLCAweGQ0M2U3MzNhLAorCTB4ZTZiZTA0MmYsIDB4NDZhYmVkMzUsIDB4NmM2ZmM3YzYsIDB4ZmJlMGM5NmQsIDB4ZTBlMzNlOWYsIDB4ZWE5ZjY5ZmIsCisJMHhjYjMxM2JmNiwgMHgyMTk4ZjJjMSwgMHgxYmNlMjNjZiwgMHg5ZjdhNTk3MCwgMHg5NWU3MDliMiwgMHhjMzFjN2ZhNywKKwkweGE2NTBmZGI5LCAweDY4NjE3ZWU5LCAweDA4Nzk3NjVhLCAweGY5MWRmM2NiLCAweGUzMDU4YTM1LCAweGJlNWY0Zjk0LAorCTB4Y2Q2YWY1OGYsIDB4ZWRkMmU3Y2IsIDB4ZDdiMmRjZmEsIDB4ZWVmMzRjNWIsIDB4ZDEzNzBmZWYsIDB4NzFhZGMwZDEsCisJMHg1ZWNjN2UyMSwgMHg3NzgzZmFhNiwgMHgzMWY4ODdhNSwgMHhhN2NhOTgwNywgMHhiZTYyMTlhZCwgMHg4ZDdjNWY4ZiwKKwkweGJkYWZiY2E5LCAweGExY2Y2ZTIzLCAweGZjZTRiOWZiLCAweGE1Y2ViMjVjLCAweDZmNWUwMmM4LCAweGM1NTRiZDY4LAorCTB4NmZmODI3ZjMsIDB4NGU1MmRiYzUsIDB4YzY3M2E3MmQsIDB4MmJiZmFmMWIsIDB4OWQ3ZjAwNTIsIDB4NTdlMDMyNzcsCisJMHg4NThiNjRkMSwgMHgzZjRjYWQ5ZCwgMHhmMzMyYzQ4NywgMHgxNTYxNWNiOSwgMHgyNzVjNTczZSwgMHg4NGI4NTVkZCwKKwkweDdmZGE5NjM3LCAweDY1NGM2ZDY5LCAweDQ3ZTVmYTNhLCAweDY4ODEyYWE5LCAweDNjOTY4MGQxLCAweGRlOGJhZmU4LAorCTB4ZTgzODcyN2MsIDB4OThkZDVhYWEsIDB4M2JmMmEyZWEsIDB4NWMxNmZmMTQsIDB4YjcxMzNmMjAsIDB4OTUyNDcxM2QsCisJMHg0OTVhYTkyNywgMHhhYTczYzI3ZiwgMHgxY2ZmNzAyZCwgMHgxOWVkZDFmMCwgMHg3Y2E0ZWYwMiwgMHg2OGE1ZTZiYSwKKwkweGU5ZDQxZjhlLCAweDBhZTZkNTJmLCAweDZjNmMxZDA3LCAweDgxNGY1OTU0LCAweGViOGQ0Y2ZkLCAweDhkOGQ5M2E0LAorCTB4NmJkMGUxZjEsIDB4M2UyOGM2MmEsIDB4NWMwNmM3YzgsIDB4ODUwOGZhMGMsIDB4ZWZlZmM5MDcsIDB4OTdiZDY5YmEsCisJMHg5NGY3YzkwZSwgMHg3NTJlNzU4YywgMHg0MWEyZmFjOSwgMHgwN2RlMzdiNiwgMHg1YzdiZDYzMCwgMHgzNzJiNDdkNywKKwkweDNiNzU5MWJlLCAweDdmZDczZjdkLCAweDdlMWI5ZTVmLCAweGJjNWRiYWRjLCAweDZkOTZjNWVlLCAweDdkMjk5MjViLAorCTB4ODVkZGExYzcsIDB4N2I3ZDJkNzUsIDB4MWE0OGY0NWMsIDB4MzI2ZGNiZTcsIDB4NzViM2ZkYWUsIDB4MjNlMTNlNGYsCisJMHhlMzc3N2E3ZSwgMHgwZmU4NzY5MywgMHg5ZGJmNTY5NSwgMHg2Njc5Y2RkZiwgMHgwZWYxMWRhMywgMHhjOGRkNmZkNywKKwkweDJkNmMxN2RmLCAweDcxODA3YjYxLCAweDExOTRlZWNmLCAweGEzYzNhZDk3LCAweGMxYjJhYzYyLCAweGRlM2NlYjQ1LAorCTB4MTU4NWNhNWYsIDB4YTY5ZTMyZTEsIDB4NDZmNTFkNDgsIDB4NTViNWQ2MDIsIDB4YTZiYWM3YzksIDB4ZTNiNzZmMTcsCisJMHhmNTg3ODFmZCwgMHhhNmZiYTE3YSwgMHhhMmI0ZjBmZCwgMHgzNTdiYjAxZSwgMHhkNGM3MWMyOSwgMHgxMTk5M2VkZCwKKwkweDY0ZmJjZmU4LCAweDRlMzRlNWRhLCAweGM4MWU1ZmE3LCAweDgyODdkZTdhLCAweDIzOWMyZmI0LCAweGY1ZmEyMWI5LAorCTB4ZjVkYTU1NjEsIDB4NGVmOTU1OWEsIDB4MzA5MDNkOTgsIDB4NWVjMmYyMGQsIDB4MzU0NTZlZjksIDB4MGEyMzQzOWQsCisJMHg3MTBiYjdhMCwgMHhhM2M1YTUzNSwgMHhkNzlkMTM1NCwgMHhmNjk4NDYxNiwgMHhiNDExMmNjMSwgMHg5YmJmYThhZiwKKwkweDdlNTMyZjQ1LCAweDUzMGNjNGZhLCAweDA3ZDM5OWZkLCAweDBiOWRmODg2LCAweDdmOTljYjNhLCAweDhmN2E2ZDVkLAorCTB4OWYyZWZhYTYsIDB4YzdiYjYxNWIsIDB4NGE3N2YzNTgsIDB4YmIzYTYyZWYsIDB4NWFiZWQ0ZDEsIDB4NDdiZDM1NGMsCisJMHhmN2E5ZThiMywgMHg2NTQ0Y2UxOCwgMHg1NGUxYzQ3NiwgMHg2NjU4ZjdlOCwgMHhlZmY1NDc2OSwgMHgxNjlkZmNhZCwKKwkweDdkYWZkYTYyLCAweDkyN2YzYzMzLCAweGZkOGRhNWU3LCAweDdkM2Q4NjA5LCAweGU4Y2Y3ZTE2LCAweGVmMGNiY2VhLAorCTB4YmM0NTE3ODgsIDB4OWExZGVjMzAsIDB4NjE2OTFlNTksIDB4M2M0ODU1M2QsIDB4YThmNmViNTQsIDB4OGY2OTFjZWEsCisJMHhkOGI1ZjZhYSwgMHhmMDRkOGYxMSwgMHg0ODEwYTZiNywgMHhiNjE1MWE2YSwgMHg0NzdkNTIzNywgMHhkZmNjOWM0YSwKKwkweGNjM2JlZjg1LCAweGRmZDA1MmY3LCAweDUyMWY5NDY1LCAweDQyYmZiMDRiLCAweGRkNjg2YmNiLCAweDYwNmExNzM4LAorCTB4ZDgzYjYyNDcsIDB4MDc2YzkzODQsIDB4ZmJkMWM2MzMsIDB4ZjQzNGU4MzcsIDB4ZmVkMDgwN2QsIDB4MzM3MDBjMDYsCisJMHhiYWRjYWVmZiwgMHg4MjJmNjBmZCwgMHhkOGUyYjRjZiwgMHg1NDlkYzQ3YywgMHg5NWIxNGQzNSwgMHg2ZjQ5NWVlNCwKKwkweDU0YmZmZjA2LCAweDdlYmY2MTYxLCAweDRjMDNlMWZiLCAweDU2MTVlZDZmLCAweGZmNGI4YzhmLCAweDc4ZDRiODc2LAorCTB4OTQzNWRkYTUsIDB4YmFkMDE3MGUsIDB4YjA1ZTdmZTAsIDB4MTVmOGYxNDMsIDB4ZTlmMDBmNTksIDB4ODEwY2ZhMDUsCisJMHg3MDE3NGE0ZiwgMHgwMWQ1ZTAzMywgMHg3ZTcyOTBiZiwgMHhlMjI4NmUzZiwgMHgwYTdiZTQyNiwgMHgxNDI1YzA1NywKKwkweDBiMzhmYTllLCAweDI3NzJjMTM0LCAweGYzY2ZjYmNkLCAweDhjNTdlOTBhLCAweGI3OGZkZDA4LCAweGIwZmZkOWRiLAorCTB4ZTUyZTExNDEsIDB4ZjUzMWUxYmIsIDB4ZjRlM2I0YjIsIDB4NmZlYjkwY2QsIDB4MjA3OGE5ZGIsIDB4ZDk3Y2RmYmYsCisJMHhlODNiZGZjYSwgMHhkOWM2NThhNywgMHhkZTY4OWY0ZiwgMHg1NGY0MWRhZiwgMHg4Y2NmZjcyYywgMHhlZWRjODljYiwKKwkweGRmNTc0NWRmLCAweGZmODY0ZjQ1LCAweGRkN2UzNDI2LCAweDE5ZTY0N2I4LCAweDFhYjdkZmEwLCAweGYzN2Q4NjI2LAorCTB4MWJlMWM0NGYsIDB4ZTc3NzQxZjIsIDB4ZTQzOWM3NGMsIDB4OTkxMGYxZDIsIDB4YmNmOWU1ZGUsIDB4ZTM5ZDJhMzQsCisJMHhiZWRkMzVjYywgMHg0ZDY5ZjA2OCwgMHg1YjhjNjc2ZiwgMHg3OGVlZTU0MiwgMHg3ZTZmN2JkMCwgMHg0MzU1NzE2NywKKwkweGZiZjA2YTQ2LCAweDFiNGFkYTM3LCAweDk3NTM4MWRiLCAweGUyNWE3M2M3LCAweDdjZTIyNTc0LCAweGRmMmU1OTI5LAorCTB4NGY3NjM5NjksIDB4MjlmODQ0Y2YsIDB4MjViNGFkOGUsIDB4OGZhZWE0NGMsIDB4NTUzNDM5ZGQsIDB4ODhiZTQyMGMsCisJMHg4NmQ3NGZkMywgMHhjZmI2MGFjZCwgMHgwMzJkZTkxYiwgMHg5YzYxZjllNCwgMHg4NzJkZTdlZiwgMHgzZjYxNjdhMywKKwkweDhkMTlkY2FlLCAweDJiYzVhMTkwLCAweGEyZWUxZmRmLCAweGEyZDliZTczLCAweGZlYzAxYTJkLCAweGNlN2M4ZGUwLAorCTB4M2NjNmQ3MGIsIDB4MzkwY2U3ZDgsIDB4NTE2NTcyYTMsIDB4NTUwM2M4NGYsIDB4MDRmMDM4ZmYsIDB4Yjk2ZDAxZTQsCisJMHhlYTcyMTEyZCwgMHg4MTU0MGZlOSwgMHhlNzNhMWFkMCwgMHhlNTM4YmU1OCwgMHg2YTdkZjQ5NCwgMHhhYmRmMDQ3MywKKwkweDJmMDhhNTNjLCAweGQ0OGI1MWZjLCAweGQzMmU3OTdkLCAweDMzN2NkYjc5LCAweGQyNzA4ZmM2LCAweGFlMzBjM2I4LAorCTB4YzYxMjRiN2YsIDB4MzBiMmY4ZjUsIDB4MzMzY2I2YWUsIDB4OGJiYjJiYTYsIDB4OTdhZWQ2OTEsIDB4YzMxNmRmZjIsCisJMHhhM2RiYWNjZSwgMHgwZjIzZjcyMSwgMHg0YjY0NWZiOSwgMHhjODc5MWZiOSwgMHhmNzIxNDhmZCwgMHhmYzBkN2JlMywKKwkweGQ3MWJmMDBlLCAweDZmNDNlNWI3LCAweDM5MTU4ZGY1LCAweDhlMWNmODRiLCAweDdmNWM4MWNjLCAweDAxZWUxMmJiLAorCTB4ZjE1ZGJhM2YsIDB4ODQ3OGU0ZjQsIDB4ZjllNTYyMGYsIDB4MjM1NzgyMWIsIDB4YjI0NmRkMWQsIDB4NWVkZDEwNTksCisJMHg4MjIxZDk3NywgMHg4OGM2ZWJlMywgMHg5YzdlNTM1OCwgMHhiZjU0ZDkyMywgMHgyYTY2OTVjOCwgMHhiZmE5M2ViZiwKKwkweDc3MDZmY2E5LCAweDUzN2YyOWJlLCAweGZkNTM0OGNlLCAweGE2MzE5ZTQ5LCAweGRjNDY4ZmZjLCAweGM1M2ZhYTYwLAorCTB4OWY5NGM1M2IsIDB4YTliNjYxMzYsIDB4MTJlMjhjZmUsIDB4NTljY2Y5NTMsIDB4YjNlNTRjOGIsIDB4Zjk0Y2RiYjUsCisJMHgzNGVlMmI1YiwgMHg5MmYxZmZkNSwgMHhhZjcyYTZlNSwgMHgwZTcxNTk3MCwgMHgyMzFmNDMzNiwgMHgzZTg1ZWZiOCwKKwkweDZmZWRlOTQ2LCAweGUzMDY0NjY3LCAweDRiMzhkNDc1LCAweDM1MGNlZjk3LCAweDU2ZmE5MDBkLCAweDM5ZjdhZTc0LAorCTB4MDllZTI1ZDAsIDB4ZThmYjBlODEsIDB4ZTJmNjgwZjcsIDB4YmYwNjE5OWMsIDB4ZmE5MTQwNjUsIDB4ZTgzMjRiNzAsCisJMHg2ODVlYjQyNiwgMHhmZDg4YThmOSwgMHg2NTk0ZjA5NywgMHg5ZjZlZTdmZiwgMHgzMTNlMjU2MSwgMHg0M2ZkYWFlYSwKKwkweGZiN2YyODMyLCAweDU2MTllNmMwLCAweGFlYTMyZmUyLCAweDNhNTJmZmQ5LCAweGRjZjE3ZmU1LCAweGYwN2NiMjM3LAorCTB4NTcyODRiZmUsIDB4ZmNjYmY3NzIsIDB4YzgyMmMxMzQsIDB4OWJjZTA2YWYsIDB4OGM3NWEzZTEsIDB4OGQ3ZDJlYmEsCisJMHhiYTUzZGE0NywgMHg1MjM1NTM4YywgMHg5ZDcxMDFjMCwgMHgwMGQyMDM4MCwgMHhmZGQyMjdkMSwgMHg1ZjQ4OWY0NCwKKwkweGI3MmNmYTI3LCAweGU4OTA3MTA5LCAweGQyMjFlOTEzLCAweGY3ZmRmMTRiLCAweDNkMjI5N2E0LCAweGQyMjk3YTRjLAorCTB4NDUyZjQ4NzcsIDB4Mjk3YTQyZGEsIDB4Y2RkNDNmZDIsIDB4M2E4M2Y0ZTIsIDB4YjFmZGRiOGQsIDB4OGZkMzgyYWUsCisJMHhmN2YwOTZlYSwgMHg3MTk2ZWE0ZiwgMHgxZjNhOTdmYSwgMHg4MDY0ZmY3ZiwgMHhiMDA4N2Y2MSwgMHg4YmYwYzY5ZCwKKwkweDA5MWZjMGQ1LCAweGRiMmVkZTdiLCAweGIxYmY2MGI5LCAweGFiZTc5NWUyLCAweDVmYWNjN2UxLCAweGIwMjM1YTIyLAorCTB4YjFhZDViNGYsIDB4ZmU5ZDFjMjcsIDB4YWRmOWVlYzksIDB4OTIwODljNTUsIDB4ZGVlMTljY2IsIDB4ZjhmMDA2Y2YsCisJMHhiN2NjNWRiZCwgMHhjNDQ3ZWZmNSwgMHg4NDA1M2ViNCwgMHhiNWQzNGZhNywgMHgzMzA3ZTBiMywgMHhjNjU2Y2EwYSwKKwkweGVlYjhmZjEwLCAweGQwMzYyNWViLCAweGFlOTY4N2NiLCAweGQ1ZWZhM2VmLCAweDAzYTdkYmY5LCAweGY3ZTg2ZGJkLAorCTB4YTY1ZGZkNWEsIDB4YWUzMjFkNmIsIDB4NmI2YjVhZjAsIDB4YmZkYmRiM2QsIDB4MDNjNDZlMTQsIDB4ZWZlYzMzZWQsCisJMHg1ZWY5NThmNywgMHhlMDg1ZjJiMSwgMHhjMTA0ZThmYywgMHg1YjJmZmFmOSwgMHg1YWYxMGUzOCwgMHhjZjg5Mjc5NywKKwkweGM0NmYzZDFkLCAweGZkZjg3NTA1LCAweGVmMTQxM2YxLCAweDhkZTFmODYzLCAweDJmYzI5Zjc4LCAweDNlNDFjNzVhLAorCTB4Nzc2OTFkMTgsIDB4MGRjNDg1ODcsIDB4MmZiZWRmYzAsIDB4YmNjNjhmZWEsIDB4YzMyNzdkZjgsIDB4OTdkNGZmYmYsCisJMHhmMmY3ODAyMiwgMHhiNWZlM2YwYywgMHhkODM0OTY4ZSwgMHhlMWRmNDYxNSwgMHgzM2M3MDRmMCwgMHhlNTdhZmUxOSwKKwkweGU3MTUxNjhiLCAweDY0YWYxMTg5LCAweDNiY2M2MzhjLCAweDE1ZmQ0YWNhLCAweDVkMjNjNjc0LCAweDQ3Y2E2YWViLAorCTB4NzU3ZDQ2NWMsIDB4OTNkN2Y3MjQsIDB4NDlkZGUzYmUsIDB4Yjk1NWU3YWEsIDB4ZWMzZTUzNWQsIDB4MjJhYmEzYzcsCisJMHg4Y2U5NDIzZCwgMHhhZmE5ZTgxMywgMHgzYWYxZWE5YiwgMHgzOGQwYmYwYiwgMHgxZWI0NjI0ZSwgMHgxYzdlODEyNywKKwkweDAxZGY5Y2IyLCAweDQ4MTA5ZDFjLCAweGEzOWZmYmM2LCAweGIwM2RkODk3LCAweGI4OGUzZTgzLCAweGI4Y2U4MmIzLAorCTB4MDg4ZmQ0MDUsIDB4Mjc5OGM3ZGEsIDB4MTVmN2VkZmEsIDB4YmNmMjE3Y2QsIDB4OWRmMGNiZDcsIDB4MjlmNDkyZTYsCisJMHgzZjVlN2FkYywgMHgyYzYzODVhZiwgMHgzZDU0YmJkYiwgMHhmYWU2MWM1ZiwgMHhjZmQxMDQ2YiwgMHg5MGRhMTlhZCwKKwkweDFmZGZkNDgxLCAweDdjY2M4Yzk0LCAweDdhMzIxN2Q2LCAweDA5NGZkZjYwLCAweDBiYjA0Nzc5LCAweGYwMzExOWZhLAorCTB4YmM3ZTg0ZmYsIDB4MDViZGVmMTIsIDB4ZTk0MmUxZGIsIDB4NDE4ZmMwYzgsIDB4YmJkZTA2NGYsIDB4MGU4MzJiYTMsCisJMHgxOGQwZTI4MiwgMHg2NTcxMWRlZiwgMHhmNGExN2Y3YSwgMHgxOTlkMWRkNiwgMHg0M2FkNzVmNCwgMHg4Y2YwMDFkMiwKKwkweGFlODMyMGY4LCAweGY4OWEyZjk0LCAweDJhZThlYjFlLCAweDA2N2Y5ZjA3LCAweGM1ZDI4NTVkLCAweGU5MjU3NDk1LAorCTB4MGUyN2ZlYjQsIDB4YmE0YWVmZWUsIDB4YzAwN2E0ZWEsIDB4NTVkMzg3ZTUsIDB4ZjhmMzhhOGIsIDB4NzlhN2E1OWYsCisJMHhlZTNjNjI2ZCwgMHg3NjVjOTdmZiwgMHhhYmRhNDQxZiwgMHg3YzE3YjY5ZiwgMHgxOThjNGNhNiwgMHgyZTEzMTIwZiwKKwkweDYyZWMxMDc1LCAweGJhMzJmNWExLCAweDdmNGExN2E5LCAweGJjNmVlZGExLCAweDZlNDY1ZGEyLCAweGZhNzFiYjcwLAorCTB4YWVkYTE5NTksIDB4MDQ3YWVkMTIsIDB4NzFjMjFiYjcsIDB4ZjdlOTZmMTEsIDB4MWE3MmRlMDgsIDB4OTk5ZTJkNzEsCisJMHhiOTBlNTM5MCwgMHgyZjJkZjI2ZCwgMHgyN2NjOGRlMSwgMHhmM2E3MTliYSwgMHgwOTYyNDNmMywgMHhlZTI0YmY5ZiwKKwkweDg1NGY0MGZhLCAweGNiOGQ2OTNhLCAweDQyZmFjODVkLCAweDcxZDc2NDYxLCAweGVkZWEzNzA1LCAweGRjNWQ3ZmM3LAorCTB4NGY4Y2Y5ODAsIDB4MzdlM2NiMzAsIDB4ZjVmY2YyZWEsIDB4MGZmYjkxYTIsIDB4YzZlMTQ3N2QsIDB4Y2U1OWViZGMsCisJMHg2MTQ3N2QwZiwgMHhmZTNkNDBmMywgMHg4MWE0NGQyMCwgMHg4ZjBhMTdkZiwgMHgwZWZlOWY5YywgMHhjZmJlYTE0NiwKKwkweGM5YmE3NDUzLCAweDU0NjJhYjcwLCAweDZhOWJlZTFjLCAweGFmMzIxYzU2LCAweDNjOGMxZGUzLCAweGZjZTNlYjhjLAorCTB4ZTljZmMyMGQsIDB4ZmRjMDIyNGQsIDB4MDkwM2EyNGMsIDB4NjEwOTFmZjksIDB4Yzg1ZmVmOTMsIDB4YWEzNWJhZmIsCisJMHg1NzkwZGZmNiwgMHg0ZmJhN2I4ZCwgMHhiMDU3YjUzYiwgMHg0YzQ0MGZjZiwgMHg0YTc3ODM5ZSwgMHhkNzE5MGRjNiwKKwkweDE3ZjZlZDBmLCAweGRiY2U1OWJhLCAweGI5NjBjOGVmLCAweDE2ZDJmYjEzLCAweGRlMjdjOWQ3LCAweDVmYmE3M2E0LAorCTB4OGEzN2JjYTYsIDB4ZmI0NmY3MTQsIDB4M2JmYTc5ZDEsIDB4YmY5MWM3M2EsIDB4NDBiOTY3MzEsIDB4NzM2ZWYxYmIsCisJMHhmZWQxOTNiYywgMHg2MTM4ZDcyNiwgMHg5Y2ZlZWY4ZCwgMHg3NzZmMjliYywgMHhkZWNkZDg2ZiwgMHgwNDJlY2Q4YSwKKwkweGJkOGFkZjdlLCAweDdkZWIxMGFhLCAweDQ1YTdiNjJiLCAweDRlNzY2MWE2LCAweGFmZDJiZDA3LCAweGEwZDhiOTJiLAorCTB4YzZmMWNlZmIsIDB4YzFkZDc4ZjMsIDB4Mjg2YjgwZDksIDB4ZmYzODBkM2MsIDB4ZWIxZWI4MDAsIDB4MDc3YmFlMGEsCisJMHhhYTM3OTYwOCwgMHhhZDVmMjQyMywgMHhkNTdjOTA4ZSwgMHg1ODc1NzM4MCwgMHg5ZWRlN2RjNywgMHg1NTI3ZjFjMSwKKwkweGY5YWYwOTBlLCAweDU2MTFhZWNiLCAweDJjMTdmNTEyLCAweDkzZjljOTFiLCAweGI4MDdjMjc1LCAweDYwOTJjNjlmLAorCTB4ZjdiMTBmMTAsIDB4Y2U1OGViMDksIDB4OWRkY2VmMWIsIDB4ZThiZGY4N2QsIDB4MmFlNzlhMjQsIDB4OTgzZmY2ODcsCisJMHg0MDgyYjlkZiwgMHhlMjg0NDkxNiwgMHhiZTdhODZlNCwgMHgwNWZlN2Y4ZiwgMHhhYTdkMDNkNSwgMHhmMWFmNzU0YSwKKwkweDk2ZmFjZWMwLCAweDdkNzFlZjJhLCAweGZlMTUyMDdkLCAweGQ3NTRmMTU4LCAweDBlNTVlOGYxLCAweDlmNDM1ZjA5LAorCTB4OThhZmQyMWMsIDB4NWZiMWFkZjcsIDB4ODBiZWZlODUsIDB4MGVmNTVmMjEsIDB4YzZkY2YxOTMsIDB4ZTRlZWY3M2QsCisJMHg5MmUxZTFhZCwgMHg5MzBlZjVhZiwgMHhlYmMwZDhmYywgMHhlZTdlYmIwNiwgMHg4OWMzM2Y1MywgMHgzYWZjYTY4ZiwKKwkweDk4YWJmNTljLCAweDJlNGM2ZjU4LCAweGMyODU4M2VjLCAweDc2MTg5ZmE0LCAweGY5MDRmNjk1LCAweDIyYjVjYTdlLAorCTB4OTQ1MTkxZWIsIDB4MTM2NDNjMmYsIDB4MDc2ZjJhN2UsIDB4OTI3OTQwNDMsIDB4MWZiNmIzZjQsIDB4ZWY4MmE0YmEsCisJMHhmYzI5NDUxNywgMHg2ZjcxODYzZSwgMHgyMmM5MmMyOSwgMHhjMjdjNDFkYywgMHhiZDM3MGVlOSwgMHgxMzkxMWI0YiwKKwkweDc5NDdjYTY3LCAweGM3ZWE5OTdhLCAweDk1Mzc0ODhjLCAweDk4MDc3YWM3LCAweDE0MjdlM2NhLCAweDhhM2RmMjk4LAorCTB4ZWZkNTM2YWYsIDB4MjlhYzZiMzksIDB4NjhkZGFjOWYsIDB4MzE1MjlmYWEsIDB4ZjgzNzk0ZDUsIDB4MjRmYzhhNTgsCisJMHhjNWI5MmNmYSwgMHhiMmVmYmVkNCwgMHgzNGZkNTM1MiwgMHg1Y2E5YTU1ZiwgMHgzMTliM2JjNSwgMHgyNWI3YWI0MCwKKwkweDgxY2YxMTI3LCAweGQ1OGM5ZmNhLCAweGUzZGU0MzRiLCAweGYwY2IwOGI1LCAweGZlNmI3N2NlLCAweGNiZGU1YTMzLAorCTB4ODBiOTEwOTksIDB4NmNjOWFmZGYsIDB4OWU3OTk5ZmMsIDB4MmM2YjQ0ZWEsIDB4Y2RiYmQ3YTUsIDB4YzkyOGIxN2MsCisJMHhiOTE3MWY5YywgMHg3MWRmODE0ZiwgMHg5ZmNjY2I5YywgMHg0ZDU4OTY1MywgMHhlYWU1MWZmOSwgMHhlNDRmMzRmYywKKwkweGJiZTNkZGIxLCAweDMwMGRhZmYwLCAweDRlMTQzZmUxLCAweDdlZmMwZjQ0LCAweGVmOWQzYjY4LCAweGNkZWJjYzNlLAorCTB4MDcwZjdlMzIsIDB4NzVlMDkzN2UsIDB4MGMxMjZmYzAsIDB4ODI0ZGY4MDcsIDB4MDQ5YmYwZjMsIDB4MjRkZjg3ZDcsCisJMHg5MzdlMWNiOCwgMHg4NzIxZjJlMCwgMHhkNjFmZjhjYywgMHg1NWZmYzY2MiwgMHg2ZmYxOTkxZiwgMHg3ODc3NjVkMCwKKwkweGE2NmFkOTFhLCAweDlhMjlhMTBmLCAweGJhNzgyZGYyLCAweDdlOTk5NGU2LCAweDFkNzNmMTQyLCAweDA5YjE1Yjg5LAorCTB4MDllMjg3YzAsIDB4YmUzODdmYjgsIDB4OGJlMDg2NTYsIDB4MzdmN2MzZjAsIDB4MzE0NzdiZGIsIDB4ZDdkNzFlN2UsCisJMHgyMDYwNmQ3NSwgMHgzYTJlOTdkZiwgMHg2ZmJjMGFhNCwgMHg3MWYzYWM2MywgMHg2ZDNmZGNmZCwgMHg4OTczMWFkNSwKKwkweDVkY2VmY2NmLCAweDc2M2UwNDkwLCAweGRiN2U5MDlkLCAweDRmMTY1NWYxLCAweDIwN2ZiYTgwLCAweDI5ZDk5YzY0LAorCTB4M2ZhODQzZGEsIDB4YWE1MmZlMmIsIDB4MjZkMjc0MWQsIDB4MGU3YmNmZGYsIDB4OTVkODc5N2MsIDB4MTIzZWIyZjEsCisJMHhmNmJlZjg0ZiwgMHgyN2JlNTRjZiwgMHhhOGQyYzQ3NSwgMHg4ZWFmOGY4MCwgMHg5ZjAwOWVkMSwgMHg4NGJiOTc5OSwKKwkweDhhMjQ5YmQ3LCAweDVjNDAyZmI3LCAweGE1ODU3ZmQ0LCAweGFmYjczZjIyLCAweDcyMmRjN2JjLCAweDg5ZmVmOTViLAorCTB4YTZlNzI3YzEsIDB4MmRhOWI4YzgsIDB4ZGQ3ZmJhYjksIDB4OWVhN2UzMjMsIDB4Nzc3Mjk1YzksIDB4NzFjNWM3OTQsCisJMHhmMmI5MjVkZSwgMHg4YmE5MGQ3ZSwgMHgwMTA3NzNhOSwgMHhkOTlkODczZSwgMHgwYjNhY2Y4MCwgMHg4YWQ5ZWJiZiwKKwkweDlkMDllNDdiLCAweDBmMjFjOGY3LCAweGEzZWNmZTQzLCAweDFmZjU3ZmNiLCAweDQ3NTgxYzNiLCAweDNhNjE3YWY2LAorCTB4MWRmYmZiN2YsIDB4ODFlMmY4YTYsIDB4ZmNhNjVkNWIsIDB4NTMyNGE2YTAsIDB4ZGNiYmMxZmQsIDB4NDBmY2YyYTYsCisJMHhjODdjYTk4ZSwgMHgzZjI5OGYyMSwgMHhhOTg0NjVhYywgMHg3OTFmNTVmZSwgMHhhZDkxZjk0ZCwgMHhhZmY1NGMxMywKKwkweGNhNmM1NTM5LCAweDQ3YjY4OGE3LCAweDhhYmVkZjAxLCAweGNkMWM1M2I0LCAweGI5ZmE5NzRkLCAweGU0ZGM3MDViLAorCTB4ZTU2M2JiZGMsIDB4N2VkZDVmN2QsIDB4NDZmYmM4NjEsIDB4ZDNhNmI5ZGMsIDB4ZDExZWE4NzUsIDB4ZThlNTJlZDcsCisJMHhmNTIxNjRmYSwgMHgxZmFlODc0NiwgMHhhMTNlYjMwYSwgMHgxZGUzNzFlOSwgMHhlNjdjNThmNywgMHg1ZTIzNzFiOCwKKwkweGQwZWY0M2JjLCAweDdiOGU4YWY1LCAweGUyZjE5ZDM0LCAweGYxNzhlMGRlLCAweGJmNWQ2MWI5LCAweGM3NWU3ZDFmLAorCTB4ZmJmY2U4N2IsIDB4ZWI3YWU1ZGEsIDB4YmRmM2I0ZWYsIDB4YTE1ZTYzMWQsIDB4OTZjOTQ5ZjMsIDB4ZDFkOWJiNzQsCisJMHhiZmFhYmRmNSwgMHg0NmZiNGFlNSwgMHgyNWYxNjY2YiwgMHgzNjEzZmRkMCwgMHg2ZGZmMmI0ZiwgMHhmM2M2MmI4NCwKKwkweGI3NWUyMmI0LCAweGNmNzYxN2ZlLCAweDhmNzdmNzBhLCAweDVjYjA3NzM3LCAweDY1OGIxY2NmLCAweDhlNWM5NGRlLAorCTB4ZGRmZDMzOGIsIDB4OTI0MTg4ODQsIDB4NzU4M2FkYmUsIDB4NzhjODRhZmIsIDB4ZGM2NDYzNzMsIDB4YmJiMTg4OWEsCisJMHg4ZmRkYmY0MSwgMHg2NDk5ZTEyNywgMHhmZjdjMGQxNywgMHhmMTY3YmY0YiwgMHhmNzRkMzVlMywgMHhiZDhlNjhhMSwKKwkweGNlM2Y3ZjUxLCAweDRjM2QwMzZmLCAweDU5ZjI0YjFjLCAweDViMTNjOTNlLCAweDQ5MTQzZDdhLCAweGNiMTNjYTcyLAorCTB4OGE5ZjZjYWMsIDB4Mzc1N2ZlN2IsIDB4ZGU3NWZhZmIsIDB4ZmE0YmU5OWYsIDB4YjIwM2U4MTAsIDB4MDdhOGY0MGUsCisJMHhiNzI5NTRmMiwgMHgyYmViOTIwYywgMHhiOGVlYmY1MiwgMHgxODdlYzBlNywgMHg0M2YzZjQyMSwgMHgxNzRmYmM3MCwKKwkweDY4NzRjNmY0LCAweDc1ZGZlM2FjLCAweGRiYTBjMWVmLCAweGZhMTkzODUwLCAweDNiZTNkMGFmLCAweGQyZjMxOWZiLAorCTB4MDdlYzY3ZTEsIDB4ZmRjNjdlMDMsIDB4YjY2ZGY3MTMsIDB4N2M5MTRkZTIsIDB4ZTIwMjY1OGYsIDB4NmRmYzBjZTUsCisJMHhjNmY2OTNjOSwgMHg1MDNjM2EwNSwgMHhiYmE4ZmMwZiwgMHg2ZTZhNDU3YSwgMHhlZGY3ZWMwYywgMHhlYWUzMWRjMiwKKwkweGVhM2IwZTgyLCAweDYyZTA5YmZmLCAweGZiYmJiZmMwLCAweDg3ZjFkZDZkLCAweDVkZjBiZTUwLCAweGEzYmFkZGY3LAorCTB4ZGVmNjdmZDMsIDB4OTA5ZjEwNWIsIDB4NWUzYTRiZjEsIDB4MWMyY2ZkZmMsIDB4OTQ3NzcwMTcsIDB4MzIzZjNmNzksCisJMHg5MTg5ZjI0OCwgMHhlNGZkZjQ4MywgMHhjY2Q2ZmQyMywgMHgwZmZjMDQyZiwgMHg5ZDU1MmJmNSwgMHhiY2YzYzg1ZiwKKwkweGRmOThhZDI0LCAweDhhZjljNmFmLCAweDM3ZjM1YmZiLCAweDg4NDdmOTRhLCAweDg3YWJjNGUyLCAweGUzNmY4ZmMyLAorCTB4N2FkN2NiZmIsIDB4NGE2ZGRiMDUsIDB4ZGUzZjE1MWIsIDB4NzVmMTJhZjksIDB4OWZiMzBmYWQsIDB4MDc3MmNkY2YsCisJMHgyNmM4M2JiZiwgMHg0NjU3NmE0ZCwgMHg1ZGE1ZjZlZCwgMHhjMmZhY2VmOSwgMHg2MGVlZjk0OCwgMHgwYmVhZmJlOCwKKwkweDJmMTliZDc1LCAweDg2ZGY2MDZhLCAweDE5ZWViZGZhLCAweDNjYjFmYmE0LCAweDljZjJjM2MyLCAweGExNTBkNzFlLAorCTB4MzdhMGU5ZDcsIDB4MGU2ZjdjYmYsIDB4MzFmNjMyN2EsIDB4NjcxZjFjYTUsIDB4M2YwZGNkYzAsIDB4M2NjZTkwZDQsCisJMHgwNzNjMzdjMSwgMHhiNTgzNzllNywgMHgwZWM1ZjhjYiwgMHhhYjdlMWFmOCwgMHg2MWVjYmYwZSwgMHgxYTExMjdiZSwKKwkweDc3Y2U3MThmLCAweDNmMmJiYTIwLCAweGViMWZlMTk4LCAweGY4NzQxZjZlLCAweGVmYzNiZWM3LCAweDg5NjkxZWQ2LAorCTB4NjlmMWRmYzYsIDB4NjdkZjI2ZGYsIDB4ZmQ1YmY0ZTksIDB4MjJjYmI4NjUsIDB4ZjAzMTUzZmQsIDB4ZmRlYWI1M2YsCisJMHg1ZDc5OGQ4OSwgMHg5NmQ1MGZkZCwgMHg5NDM4ZTRlZiwgMHg3M2I2OGI2NiwgMHgyY2VmYWQxMCwgMHg3Yjc3OGZmNSwKKwkweDlmZGM4OWVmLCAweDI2MTE3Nzg4LCAweDJiYTk3NmVhLCAweGNkY2JhZGQ3LCAweDhmZTkxNGEzLCAweGVmOGNhOWY2LAorCTB4NWVmMjA5ZjYsIDB4ODE1MWYxM2QsIDB4NGZjNDY3N2QsIDB4MDQ4MTExNGMsIDB4NGExZjg2YTQsIDB4ZTE5MjNkNWIsCisJMHg0YWExZjg2ZiwgMHg5ZTc5MjMwMiwgMHhkYTE3ZWEzMywgMHhlYjY4ZTRmMCwgMHg4NTE1NzdhMywgMHg1M2ZkM2JiYiwKKwkweDVjNjQ3ZGFkLCAweGFhN2U3NzU0LCAweGI5ZjM5NzY5LCAweGFmOTdlOWJmLCAweDE4M2U3ZWUxLCAweGI2ZTUyNjk0LAorCTB4MDM2ZWZiODYsIDB4MmFkODBkOWQsIDB4YWI2NzU4NmMsIDB4NGJiZmViYWQsIDB4YWJmM2E4NTEsIDB4M2Q5YWU4MTIsCisJMHg5NmFkZTI4MiwgMHg5NjJmYmMyYiwgMHhiZjg4YzIyYSwgMHhlNDZmM2U2MiwgMHhmOWVhMzUyZiwgMHg3ZGJmOTkyMiwKKwkweGVhYjdjY2E1LCAweGQxNmRhN2VmLCAweDI3NTgyMGVkLCAweDdhMDdhYzUyLCAweDRlZGQzNmY5LCAweGM1MjA3NTgyLAorCTB4N2MxZGYwM2EsIDB4MzVmMDc5MGQsIDB4OTBkN2MxZTQsIDB4MGE0MzVmMDcsIDB4YTVlZjg2YmUsIDB4NzYxNTM4YTIsCisJMHgwYWQzZjg1YiwgMHhmYzA3ZjY4MywgMHg3MjQxODU2OSwgMHhjMTY5ZmMxMywgMHg4MmQzZjg3OSwgMHgxNjlmYzNlYiwKKwkweDVhN2YwZTVjLCAweDY5ZmMzOTcwLCAweGQzZjg3OWMxLCAweDlmYzNlYjgyLCAweDNmODc5YzE2LCAweGZjM2ViODJkLAorCTB4Zjg3OWMxNjksIDB4YzNlYjgyZDMsIDB4MGU1YzE2OWYsIDB4Mzk3MDVhN2YsIDB4NzljMTY5ZmMsIDB4ZWI4MmQzZjgsCisJMHg1YzE2OWZjMywgMHg2Mjk5NmYzZSwgMHhkM2NkYjdmMiwgMHg1YjI4N2ZkZiwgMHg1MWY0Y2YxZiwgMHg5YjFjNTE5OCwKKwkweGVmZmRmODQ3LCAweGM0ZmM3Zjg4LCAweDM3M2MwZTk2LCAweDJlZGQwMjJmLCAweDQ4ZjcwZWFkLCAweDkwNGUzNzNjLAorCTB4ODkwOGI3NzgsIDB4OGNkOWI2ZTcsIDB4MzJlY2JiZTcsIDB4YjRlMzI0NWYsIDB4N2UwN2U5NDMsIDB4ZjQ5YjQyYWIsCisJMHhkZjg1MjE1YiwgMHg1NmZjMjkwYSwgMHgyYWI3ZTE0OCwgMHgyYjdlOTRjYywgMHhlMTViZjBhNCwgMHg0ODU2ZmMzYiwKKwkweDBhNDJiN2UxLCAweGY4NTIxNWJmLCAweDZmYzI5MGFkLCAweDJiN2UxNDg1LCAweDBhZGY4M2I0LCAweGY4NTZmYzI5LAorCTB4NTIxNWJmMGUsIDB4ZmRmMGFkZjgsIDB4ZmUwM2NkMDgsIDB4OTA1ZTYzMmIsIDB4ZjQ5OWZiZjMsIDB4OTM0M2EyNTIsCisJMHhlNTMyZWE1ZSwgMHhkNzA3ZTcyMSwgMHg1YzFmOWM4NywgMHhiODNmMzkwZSwgMHg3MDdlNzIxYywgMHg3MDdlNzIxZSwKKwkweGMxZjljODdkLCAweGRjODM0OWY5LCAweGVmMjBiZmJjLCAweGJjODNiNzA3LCAweGQ0MWY5YzFmLCAweGI2MDM3YmU4LAorCTB4MmUxYjQ5YWIsIDB4MzViNDhlYmMsIDB4NzE0Mjc5NGEsIDB4MmYzNTMxMDksIDB4OGJmYzI2NzMsIDB4MzUyNTRlYWQsCisJMHg2ZDg0MjNkNiwgMHg4NTk5ODBmOSwgMHgzOGY0ZDc5NCwgMHg2NmQxM2NjNywgMHhhZTM5YmUwMSwgMHgwNWE2ZjA4MCwKKwkweDBmNjVjNzA0LCAweDVjYzk3ZmZhLCAweGY5YjNmODZlLCAweGJmOWVmMDg3LCAweDUwZGViMDQzLCAweDM1YWZkZmEzLAorCTB4NGI4NDdiZGEsIDB4ZWZkNDZhNDUsIDB4MmY1ZDc3Y2MsIDB4MWVhMzdjNzQsIDB4NzlhMGNiZjMsIDB4OGY5OTYyOTAsCisJMHhiYmZjOTM3OCwgMHhhZjcwMGIyMiwgMHg5MTQ1OGI2MCwgMHg2NDJiYjhmMSwgMHg1ZDI4NzQzYywgMHhlNzkzY2FhZCwKKwkweGY2Y2IxNmZiLCAweDUzODhlMWZkLCAweGI4M2M1MTI5LCAweDE1NjU5MWVmLCAweDgwMDU2Yzg3LCAweDdlMDI5MmQzLAorCTB4NTYyZjJhZjcsIDB4YWI5MmQ3NWYsIDB4Y2M2NTg3MTEsIDB4MTI0YmIwZGIsIDB4ODY3YmUwOWYsIDB4YmQ4NGRhYTMsCisJMHhmZDE5YzY5YywgMHhlZmUzYjA4NSwgMHg0YmI0NGM3MywgMHhhMGVkMDI3OSwgMHgyOWY0MGU2ZiwgMHhmNDQxNGRkZSwKKwkweDllNGYyY2JkLCAweGI2ZWY5YTdiLCAweGZiZTljYmFiLCAweGFlNGI2ZGMwLCAweDg5YzVmZGM2LCAweGQzZGRiMmUxLAorCTB4Mzg2Njg5YmYsIDB4Zjg1MDZlNGUsIDB4NmRhOGNlOWUsIDB4YzlmYjhiYzIsIDB4M2E3ZTc1Y2IsIDB4NWVjYjliNzAsCisJMHhmOGJhZTNjZSwgMHg2ZmQxYTNkZSwgMHhiZTU0ODZjOSwgMHg1YTIyNTlhNywgMHg0NTBmNzEwYiwgMHgzZGY4NTUwYywKKwkweGI0NmUwMzdjLCAweGJlYjFkN2JlLCAweGIwMmFkYTJjLCAweGZiZTBmZjJmLCAweDdlMmUyNDRmLCAweGEzNGZmYjlmLAorCTB4MjExNmM2ODcsIDB4Y2IzNDUwYWUsIDB4MGQyNzQyZjcsIDB4ODNkOTU5MmQsIDB4ZTVmOWE1ZTYsIDB4YmZhM2ExN2IsCisJMHhlNzA2ZjI1OCwgMHg4NWVmOTI5ZiwgMHhlNzBjZjkzMiwgMHg5ODc5ZjFmOSwgMHhmZGY4NTNlZCwgMHg4ZGJlYzk5NSwKKwkweGVlMzcwNDk2LCAweDI1YjcyZjY1LCAweGUxMzZmZWEyLCAweGY1MDU1ODgxLCAweDhkOGFmNzA4LCAweDE2OGFlNTc1LAorCTB4YmQwMTUzOGIsIDB4NDFmMTAzODgsIDB4NjM5YzQ3ZjQsIDB4ZGYyNWU4M2EsIDB4NTlmN2UzNjMsIDB4MzY1ZDU4YTYsCisJMHhjZTQzMWJmMCwgMHhiMWM5NzEyOSwgMHgzMTUxZDQ4YiwgMHg0NDMyY2Y3YywgMHhkMGQ0Yjg0ZSwgMHg3ZTYyZTM4MywKKwkweDNiNGU5Yzc4LCAweGJhNWZlN2RmLCAweDg1NzJjOWQzLCAweGJlNjE1ZWI2LCAweGM2NWYzZTc5LCAweGY2ZGQ1NmJiLAorCTB4N2E0YjcwZTEsIDB4OTljZTljNjcsIDB4YmMxNmZmMzQsIDB4N2QyNjdiMDMsIDB4ODUwOGY0N2IsIDB4NzliZDg4ZTUsCisJMHgwZGEzZDcwNCwgMHhjZDNkZjEyZiwgMHhmMDZmOTU5MiwgMHgwZDRiOTQzZCwgMHhmYmNiNDUwZiwgMHg1MmZmZDI2YywKKwkweGIwY2RjM2FlLCAweGYxZDdjZDNiLCAweDY5YzdhZTUzLCAweGVmOTNhYjFkLCAweGNjMzlkMzNhLCAweDZhNWNhZWVmLAorCTB4MTE5Y2IxYjAsIDB4ZjIxYTJmMmEsIDB4OTExZWYxYTcsIDB4YzIzZmFlMTAsIDB4NjBkMTUzY2UsIDB4MGJjMDNiZTMsCisJMHg0YWFjOTRkNywgMHg5MWNhNTcxMiwgMHg3MzM5NzU4YiwgMHhlMzhkODM1MSwgMHhmN2Y0MmFiMiwgMHg2ZWZmNDJkNCwKKwkweDFlM2Q2MmNmLCAweGYzNTZmMTZiLCAweDQyZjI0ZmY3LCAweDdkZTM1MGU0LCAweGM5NGViZDRkLCAweGIwNjYwN2RiLAorCTB4YzZjNGI0M2MsIDB4Y2IzOWNkZmUsIDB4YjYyNDdjYTUsIDB4OTNlZTNmMGIsIDB4Y2UzZTU5Y2MsIDB4ZTY2NmY3ODIsCisJMHg5NDdhZjRlYywgMHg1ZGU5ZTgyZSwgMHhkODlhNGU1ZCwgMHg0ZmY4NjRlYSwgMHhmY2MxMWNiOSwgMHgxNGU1ZWE2NSwKKwkweDM5N2NkZmNlLCAweDk3OTlkMzk5LCAweGVlMmFkYzY1LCAweDVhNmU4MTIyLCAweDA3M2JlNDhiLCAweGQxZjJlYmVmLAorCTB4YzZiMWM0MGMsIDB4YzllYjNlNDMsIDB4ZjQ0ZWRkZjQsIDB4NzRmMjIxOGQsIDB4YWJjMDM1YmUsIDB4Mzg3ODgwMWMsCisJMHg0NGFkYTZkMSwgMHg4ZGM0ZWM5YywgMHg0ZDgzZWY4MiwgMHhmZDQ1MWM4MiwgMHgxNTVjODJjZiwgMHg1NjkxZmQ4ZiwKKwkweDI2NjFmN2M0LCAweDY4YmY3YzI4LCAweGY0ZGJkMGQyLCAweDQzZmI0MGZkLCAweGY3ZTEzZjMwLCAweDI5YzJiNDU3LAorCTB4Y2QzOWM0N2UsIDB4ODA1YmI2ZDIsIDB4Njg1ZjYzN2YsIDB4NWVmY2EzYmUsIDB4NjI5ZjI0ZWEsIDB4OWE5MjNiYzcsCisJMHg3NDFiNmZhZSwgMHhlNjNmYmExZiwgMHhiMjc2ZTg0NiwgMHhlYjA3Njk0OCwgMHhiMjYxOTNiMCwgMHhiN2M5MjQ3OCwKKwkweGQzZTQyNjZhLCAweGY2NmRiMGI5LCAweDYwODEwOWQyLCAweGNiMmI5NTFmLCAweGQ1NzZmYzdiLCAweDQxOTIwNmNjLAorCTB4YzlmYjU1ZmYsIDB4ZGU0NThiMWMsIDB4OTAzOTIzM2YsIDB4OTY4ODBiZWYsIDB4MmY5NDllYTIsIDB4NDAxNGEzNTksCisJMHhmNWU2MzIzZiwgMHgzOGVjNjdiOSwgMHgzYTRlYjBjZiwgMHhhN2Q4ZWQyOCwgMHhkMmU1MWVmMiwgMHg3ZTRkMzI3YiwKKwkweDhjYjRkMDliLCAweDM0ZmQ4ZGUwLCAweDI3ZjVhNjM3LCAweGY0Njg2MTBhLCAweDFjMmRlMTYwLCAweDg1ZWJmNzgxLAorCTB4MDA1NDI4ZjEsIDB4ZThiNzk4ZjEsIDB4M2JjMWVhZjksIDB4OTczYWI0ZmYsIDB4OTFmOWM0ZTEsIDB4YTY2ODdkYmYsCisJMHhlMDVmZjIyZiwgMHg2YjE0NzM5MywgMHg0YjFiZGZmMCwgMHgwZDU3NjhiMiwgMHg1MGY3YzFlZSwgMHgxMWJmMDNjNywKKwkweDllZmM2ZGI5LCAweDRiYjY0YTQ0LCAweDdiMTBhOWYyLCAweDg5NjBmNTRiLCAweDRiYmI1MGM3LCAweDc3M2NhZTU5LAorCTB4N2E5ZGQ1ODQsIDB4ZGM3YmZiMmIsIDB4ZDYzNGI3NmMsIDB4YmU2NmNjN2QsIDB4ZjNhNDZiZTcsIDB4NWVlN2ViMDcsCisJMHg5ZWU3YmZkZCwgMHhmOTE2YzNjYSwgMHgxNjYzYzJmZSwgMHg4ODU3ZjZmZiwgMHhkMGY3MmY1ZSwgMHg4ZmJkNjA2NiwKKwkweGU3OWVkZTIxLCAweDhjZmFmMWFmLCAweGY4M2E0Y2Y3LCAweDg5NmVmZTk1LCAweDk2NDc0ZjQxLCAweDJhZmJlMjVkLAorCTB4Yjc3NjkxYTUsIDB4ZTU0ZjQ0MWEsIDB4MGZiZTE1YWIsIDB4ZGU0Y2JhNWEsIDB4MmI1NmQ2ZTcsIDB4NmU4NDVkZjIsCisJMHg5OWJmNThlYywgMHg5ZWZjYmZmZCwgMHgxMTdlNmZkNSwgMHhmODc1MGIyZSwgMHhiY2I3YjFjZSwgMHg4NGViNDhlMSwKKwkweDNkOTc5ZmVmLCAweDM0N2M5MzYwLCAweDBlZmI4OTkwLCAweGYyNzEyY2I3LCAweDdiOWZkOWJiLCAweDBmMDZhYjhhLAorCTB4OGMzYzllMDMsIDB4ZTVkODcxYTcsIDB4OGM0YjdmNTQsIDB4NGJkZjA0YjYsIDB4ZDg0MWNiNDUsIDB4ZmNmZWU3MWQsCisJMHhiYThmN2U2ZCwgMHhkZjhkMzliNiwgMHg5NWQ5MmNiZiwgMHhkOWVmMGFiZiwgMHg3ZWQxZWU3YywgMHg0NDk3ZjU4MiwKKwkweDQ3OTBlY2JhLCAweGY5NjIxYTZhLCAweDUzZGI5ZTdjLCAweGRhMmJjZmJmLCAweGUwNjdjZmQ4LCAweGQyYzFiZWU3LAorCTB4YmU3ZDc3OGUsIDB4YWVhMmU3MWMsIDB4NmNjMDExNTcsIDB4YmFmNTRjNTMsIDB4ZjYxYTYzYjYsIDB4NGIzYjUwZDEsCisJMHhkZjIxYmJlOCwgMHhkZDgxNTc2NSwgMHg1ZjY0MWVjNCwgMHhiNjMyZWMzNSwgMHg3MWIzNjM5YywgMHg3N2IxY2ZhZSwKKwkweGY3M2VmN2ZkLCAweGY0MzdmM2VhLCAweDdhMWRmOWRhLCAweDllZjhlZTZkLCAweDJhZDdmZjkwLCAweGNiZDNkODJlLAorCTB4NzEzM2RkMjMsIDB4OTBmY2ExYmYsIDB4NjJiNDkxMGQsIDB4YmU1YjljNjIsIDB4N2M4ZjczMWYsIDB4OGVmNGE2M2YsCisJMHg3MzY3ZTY3YywgMHhkYzAyOTM4MCwgMHhmYmM5MTkzYiwgMHhlOTRmZGNiOCwgMHhmYmY3ZWU5MCwgMHhmNDBmNmJhZCwKKwkweDBhN2EwZGQ5LCAweDgyMWRmOTc4LCAweDFlZDc5NzcyLCAweDk1MWYyNDE3LCAweDc3YTYyYTM1LCAweDBiZmM4YzI0LAorCTB4OTdjOTU1ODMsIDB4ZmMwMGRkNDgsIDB4OWE0NzdjN2UsIDB4Y2QzOTZmMWQsIDB4ZjEwOTMxMjEsIDB4Mjc0MTdiOTksCisJMHg1MWRiM2FjMywgMHg5OTNmOGUzZCwgMHhjYTBlMmU5OCwgMHhmZTE0YmRmNywgMHgyZjE4ZTRiYiwgMHg5NTViZWZmOCwKKwkweGMzZGY5YTM2LCAweGRmMmNmYWEwLCAweGM1MWMxYWVkLCAweDY4Yjg5NWZkLCAweDVkNDg2OWRkLCAweDAzODI0ZjNjLAorCTB4M2VlZGE5YzMsIDB4ZTNjZGNmZWEsIDB4MDJjYTNlMzAsIDB4MDdlYzFiN2UsIDB4NDJmNzEwNzMsIDB4N2U1YzViZjksCisJMHg2ZDI5YzYxYiwgMHg2OGQ0ZWY5MCwgMHhkYTM4ZTQ2YiwgMHgyMGZiNThlYSwgMHg5NzU2MDdjOCwgMHg1Y2IwNGZiZCwKKwkweGJkZGYyMGQ4LCAweGRkZmZhMzllLCAweGNiMmY5YTExLCAweDI3MDRlNWNkLCAweGVlMzNiM2RjLCAweGFiYzI4NmRkLAorCTB4Nzk3ZjlmNDQsIDB4Y2U1OWFjNjMsIDB4MDM2YjVjNmMsIDB4ZjM3NzY2N2UsIDB4ZGQzOWM2NWUsIDB4MzBkYTVkMGUsCisJMHgyODM3ZGY4NiwgMHhiZWY5N2FiNywgMHhmYmMzYTY4YSwgMHhmNzljZGJiMywgMHg3YjMyNWZjMiwgMHgzNGI2MjNkZCwKKwkweGIwNjVmZmNhLCAweGU5Y2Y2Yjk0LCAweDdhNjI3MWZiLCAweGE5ZGY5MzIwLCAweGYxYzljZGJhLCAweDhkNWRiM2UzLAorCTB4NzgwZWRlYmMsIDB4ODFmMDQ0M2YsIDB4NjYyYWUyZGMsIDB4Zjg5ZDEzNzgsIDB4YmU1OTZmMTAsIDB4Y2VkZjhjY2UsCisJMHg3N2M5NDRmOSwgMHhmMDk1ZDdmYywgMHhkNTYwNWJmZSwgMHg3OWUwYWVlYywgMHg4OTk3ZGZhYywgMHhiNGQ5YTFmOCwKKwkweDk3MGVmMWVmLCAweDFmN2M2OTcwLCAweDMzNDNjNGY2LCAweDYyMDVlZmY5LCAweGU2Y2YxYzllLCAweGJiYzc4ZjcxLAorCTB4NGMzNzQ0NTMsIDB4MThmZDA2ZDcsIDB4ZjE4ZGYzZjcsIDB4YjRhYjFlYWMsIDB4NmJiZTdiYzcsIDB4NDIwZjdhOWYsCisJMHg3YzI3YWY0ZSwgMHhkZGQwMGZjMywgMHgwMmUzYjUzZSwgMHgyZjZiOGQyNiwgMHg1ZTA3ZWY5NywgMHhmZGY0ZWZjMSwKKwkweDZhMDFmZmZhLCAweDAwZDM2YzkxLCAweDAwMDBkMzZjLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLAorCTB4NjU1NTVjN2IsIDB4ZDZiYmYwYmEsIDB4YzBkODU3ZGEsIDB4NTFiMDhiNjYsIDB4NjIwMjBkYzAsIDB4MTAxMDZkMTEsCisJMHg4MGExNzUxNSwgMHg2MzZhNzM1YiwgMHg4ZGM0MjkzNywgMHg5MTAxNTBiNywgMHhmMzlmYThhYywgMHhhOTZmMGRiMSwKKwkweDk2MmEyNjk1LCAweDhkYTZiNjc1LCAweGIyNzA3NTk1LCAweGQ5OWIxYjQ2LCAweDBmNWQ5YTZhLCAweDM5ZDM4ZDNhLAorCTB4MzJjZGI2NTMsIDB4MzRkMjA5YmIsIDB4OTlkMzdkOWYsIDB4ZGU3OWU3YmUsIDB4MGRhZjYwYjUsIDB4ZjlhNjc1YTQsCisJMHgzZWZjZWZjZSwgMHg3ZGY1ZTNmYywgMHhlZTdkN2JkNywgMHg3NjVlZjNjZiwgMHhiMjRjNjMyMiwgMHg5ODc4MzYzMSwKKwkweDhjODFiMTgzLCAweDQ1OTMxODE5LCAweDc3YTEzZmM4LCAweDYzMDJlZGZiLCAweGJlYWM3MTk1LCAweDI4ZDIxMzJkLAorCTB4MGI2YmZmNTYsIDB4ZGZlM2RmNjMsIDB4YTI3NDllZjgsIDB4OGYyYzY0NTMsIDB4NWRhMGRiYjEsIDB4MTBhZjdjMWIsCisJMHhkNmNjYWJkOSwgMHgyOWQzM2RmMywgMHgxNDhhZjdkMCwgMHhkNDFkZDMzNiwgMHg3ZWMzZmIxZSwgMHgxM2VmZDVlMywKKwkweDMzOGI2OWZjLCAweGUzYWJlYTdiLCAweGJiNzhkODU2LCAweDlhN2VkMGE5LCAweGRkOGJlYjA1LCAweDNlYTgxYmY1LAorCTB4MjZlOWIzY2YsIDB4MzYzMmM1OTEsIDB4ODdmZjA0ZGIsIDB4N2I0ODk0YTUsIDB4MzJlNmM0NTYsIDB4NzA1N2IwZDYsCisJMHhlMWE4YTExYSwgMHgxOGIxODk0MSwgMHhmMDhiOWY0OCwgMHhiZWM2NjRiMSwgMHgzYmNkZjg2OCwgMHhjZmJkNDBiNywKKwkweDY0YWY2ZjM3LCAweDM1ZTY3YjQzLCAweDM5OGEzZmM3LCAweGY3MzYzMDQ2LCAweDBjNzMzNjUyLCAweGE1ZGU2YzYwLAorCTB4MGY1Njk0MzEsIDB4MDczODY0ZjMsIDB4ZjhkYmQ1MDYsIDB4YzYwN2JhNWMsIDB4ZmIyZGFkYmYsIDB4NWEzMDdmZGMsCisJMHgzMGU1OWZiNywgMHhiZjczZmVmNiwgMHhlODY4ZTNmZCwgMHhkZTlmMzE5NywgMHgzYWNmNGQ3ZCwgMHhhMTNlYWQ2NiwKKwkweGMzMDRiMmFmLCAweDRkNzNhZjhkLCAweDgzMTU1NzQ2LCAweDE4YjZjZTc5LCAweGNkMTQxMjFjLCAweDY0YzU1ZTVlLAorCTB4MzNiMzI3OTgsIDB4MTNlNDFhNjcsIDB4NDIyYmNjNzUsIDB4MTZmZDZjYmYsIDB4ZjNlYjA0ZDksIDB4YjU1N2ZlMzAsCisJMHg1ZGE5OTA1YywgMHg4MjRmYmU2MywgMHg3YTg2MGNmNSwgMHhkZjVlMWNjNiwgMHg1OGY3ZjAwYywgMHg0ODg0NjcwYywKKwkweDkxMmRlOGE4LCAweGNkYmMxOTAzLCAweGY4M2QyOWY3LCAweDIxYTkwYzFkLCAweDg5ZWYwN2E3LCAweDVlY2MxZDBhLAorCTB4N2I2ZDA2NTcsIDB4MzMwMzA1ZjAsIDB4NjVlYjBmOTYsIDB4ZmNlYWFlMWMsIDB4YmZmMzJhYTcsIDB4ZmIyMGJkNmQsCisJMHg0ZTBkZGVhMCwgMHgyNzU3Y2YwNywgMHg3YWMxZTYxYiwgMHgzNjRmYWNlNywgMHg1Y2I0ODZjYywgMHg0NzNlNWVmOSwKKwkweDJmOGRkZTViLCAweGNjYWY4YWFiLCAweDRmNTg3Njk1LCAweDU3YzcxYjU3LCAweGUxM2QzYWQ3LCAweDJmNGY2YmFiLAorCTB4YTkzMTI1N2MsIDB4MDA3NzFlNjcsIDB4OGUwMGQ4YmUsIDB4ZTM4MjM2MmYsIDB4NTdjMDUzMGIsIDB4YTgyZjMzYTUsCisJMHg3YzcwYmZkZSwgMHhlZGZlN2VjZCwgMHhkMDc2NWUwZiwgMHhjZWZmYThmYSwgMHgxZGJlOGQwNywgMHhiNmFjZmZkMCwKKwkweGYyYjc4NGJkLCAweGM5ZjQxYmQ1LCAweDk5Y2VhZjUwLCAweGRiNTE3MDRjLCAweGI2Y2ZhZWNmLCAweDZkZTc4MDMyLAorCTB4MWRlYmI3YWIsIDB4ZThlZWZjMTYsIDB4OTUyMWVlOTMsIDB4NDEzZjEwNTksIDB4Njc5MDA5OWUsIDB4M2JiYzQwYmEsCisJMHgzOTdlYTdhMiwgMHg5YzYxN2JhNCwgMHg5MWNkOGIyNSwgMHg3MTllZGFlYywgMHgzY2Y0MjhiNiwgMHg4NmRhM2ViYiwKKwkweGFmYWVjZGUzLCAweDcxNjU4ODdhLCAweGY2Njc3N2ZhLCAweDY2YjNiZmU2LCAweGEwYjMxN2NlLCAweGIzY2ZlNDNmLAorCTB4ZTQyNGNlNDUsIDB4ZDQ1MTBhOGIsIDB4M2U5YTliZjAsIDB4Nzk4Mzc4ODQsIDB4MzVlMDA2M2QsIDB4ZGJjM2ZlMjMsCisJMHgwYzM4NDY5ZSwgMHg2Y2U2MTQ1ZSwgMHhhOWE5NGY4NiwgMHg4YjhlMWYwMSwgMHgzNmYzOGNmNCwgMHg4MjZiY2M4OCwKKwkweDgxMzVhOTdhLCAweDU0OGYzODhiLCAweDg3NmMyOGEwLCAweDUyOGQ4NDY5LCAweDFkZjkwYjE2LCAweDQ4MDJlZDMwLAorCTB4ZWU5ZTI0NTMsIDB4YzNmNWYyNzMsIDB4Njc3ZTNmNzcsIDB4NWMzYzgxMzEsIDB4YTFjZjRhYmYsIDB4M2I2MDZhZjQsCisJMHhmZTAwYTc1NywgMHhkOWNjMzEwZCwgMHg0ZmExZThlYywgMHgzZTk1MWZiNSwgMHg2ZmVkZmE1NSwgMHg3MGFlN2I3ZCwKKwkweDM5OTM2NzdkLCAweDMzODY1OTNjLCAweDU2ZTMwNGM5LCAweGI5Y2MzYzNlLCAweDNhZmNiODQ2LCAweDBmMDA2MTBkLAorCTB4ODE3YWQwNWIsIDB4N2Q2YzBiNTgsIDB4OTAzNTM3YWMsIDB4MGZjZDc2NTcsIDB4MjRhNWI3YWQsIDB4ODZmNThmYjYsCisJMHg5M2U1NTNhZSwgMHhjM2NlMjYzOSwgMHgwMTUxMjdjMCwgMHhmYWQ3Nzc5OCwgMHhmMTBjNTFhMSwgMHhjYTJmMzAyZCwKKwkweGNkOGJiMzlkLCAweDVkNWJjZTIyLCAweDUwNGQ1M2Q3LCAweGJiYjZlNjE5LCAweDMzZTk0NGM5LCAweGMzNjhjMDRkLAorCTB4NzY0ZDNlMDAsIDB4ZTRkZjNmY2EsIDB4MjlhZGI0YTAsIDB4OWRkYmNhODMsIDB4NjMzZjlhMzYsIDB4ODA2OTg4ODEsCisJMHg4NTMwOGFhNywgMHg4ZjNjZmRmZiwgMHhlNTQxNjVlNSwgMHhlZTljNmQ1MywgMHgxMTAzNWI0ZSwgMHhmZDM5MjBiNiwKKwkweDBkNzliZDcxLCAweDBlZmE0MjhiLCAweGNjZmM4ODNjLCAweDVkYjI4NzFhLCAweGY1ZTlkNDMwLCAweDRjYzQyMzY3LAorCTB4M2YzZTRmYTQsIDB4N2QxMmRkYjUsIDB4MTYzZmM5MjcsIDB4MDJlYzcwNjEsIDB4MjRiMTliOTYsIDB4ZTAyMzc0ZmIsCisJMHgzOGYyZWU2YiwgMHg5YjEyOTAyNywgMHhlNDk0MzhkMSwgMHhiNDZmMGNjMiwgMHg3ZWIwMDA5MywgMHhjYzc4NDMwYiwKKwkweGY4NjBlNDUzLCAweDIzOTVhYTkyLCAweGIyNmI3ZWIxLCAweGU2NzE4MDU1LCAweDVhZTc5YzVhLCAweGNlZDVmZGE5LAorCTB4NGI3YmYxZmIsIDB4OTMyNTIxOTksIDB4OTAyNmNhYWEsIDB4NzIyODc3NjMsIDB4ZGNjMDg5NmMsIDB4YTA3Nzg3YzgsCisJMHgxMmZlNDQ5YywgMHhmZWEyYTUwZiwgMHhmMDU1YTNiOSwgMHg1NmNmMjkxYiwgMHgyMWQ3MDAwYiwgMHg3OGQyZWVjZCwKKwkweDA1NWIxMzk0LCAweGJiNmMwZWU3LCAweGE5YTllNDBkLCAweDBkNzY5ZTQ3LCAweDdhODE3ZjczLCAweGY0MDc3ZDgxLAorCTB4MjU1ZmZkMDcsIDB4NWQ3MTAyMjAsIDB4Y2ExYzcyNmQsIDB4NzU4MjRkZjEsIDB4Yjk3OWMzMTcsIDB4MDU5ZjA4MGQsCisJMHg2ZTljOWQwYSwgMHhjOGUxMTMzOSwgMHhhM2ViODFlYywgMHg2NTEwNWZmOCwgMHgyODhiMjNjYywgMHgzZDE0MWI2ZiwKKwkweDc5NDA2NDg2LCAweDMxMGU0ZTQ1LCAweGNhNDFmODcwLCAweDNhM2YxMWRhLCAweGEwZTkwOWE3LCAweGM1MTI5MmNiLAorCTB4ODg2ZjI4ZmEsIDB4ZjJjMzg5NDgsIDB4YzkxMmFkMzksIDB4YWE5ZTk1NDUsIDB4N2MyODM1ZDUsIDB4YTNiZTE3MzMsCisJMHgyYTkxMmJkZSwgMHg1NmJlOTE2MiwgMHg3NGE0NGNiNiwgMHhjZDkyODZjZSwgMHgyNGUzYTA1ZSwgMHg5YTNiMWRjMSwKKwkweGI4NjdhM2Q2LCAweDEzYjUzOTllLCAweDU1YmM0N2FmLCAweDliNDYzMGVmLCAweDdhNDk2ZjAwLCAweDEwNGU1MjZmLAorCTB4YmVkOWNlM2YsIDB4YmI0MTg5MmEsIDB4ZDNjZGRiZjMsIDB4NWIxN2ZlNTEsIDB4YTFhMzhhY2IsIDB4ZDE2ZGJjZmQsCisJMHgxZTkwNTJkOSwgMHg3YWU2Y2E0OSwgMHhjNGVkNDE2NCwgMHhhY2YwMDYzOCwgMHgyNzkxZmJmOSwgMHhlNzhmYTBhYywKKwkweGU4NTY5ZjQyLCAweDcwYjY5YmZmLCAweGQ0YWExNzlmLCAweDkyNGZlZDM0LCAweDMxZGVlNzgwLCAweGExYjNlMjc5LAorCTB4ZTBmMTQyZmUsIDB4MWY1MGEzMmQsIDB4ZTJhN2JlMDgsIDB4Y2UyM2JlYTksIDB4NTAzYzg3ZGEsIDB4MGZjMDczZDMsCisJMHhkYWY3YTAwZSwgMHhmNTFlZjVmZiwgMHhkNmY4OTVmMywgMHhiZWQwZTVmNSwgMHg0ODg1ZjZhNiwgMHhhNmUxNjdlYywKKwkweGExNWJlNDNmLCAweDQ5ZThhMGZjLCAweDE3M2ZmZWMzLCAweDQ1NjUzZmI2LCAweDllZGQ2YzAyLCAweGVlN2M3YTg1LAorCTB4NGYyOGI0YTYsIDB4ZjkxN2YyMWYsIDB4YmQ1MWYxMDAsIDB4YWFmODIwNWYsIDB4NTE3YzMzZTUsIDB4YzdiYjg0MDYsCisJMHg0YzU2MGNjZiwgMHhmNDgwY2NhZCwgMHg4ZDYyNWU3ZSwgMHhmNmE4MGY2OCwgMHgzMjNlNWE4YywgMHhmM2FkY2I5YiwKKwkweDkwOTNlYjUxLCAweGI1M2ZlNjRlLCAweGNjZjUwOTI1LCAweDVmM2MxMTY3LCAweDZmYWRkNGYxLCAweGVjZjJkY2EwLAorCTB4YWYxMDFhMzQsIDB4MzgzMzFkMWUsIDB4NDE3OTlmNTEsIDB4NTUxZDIyYmYsIDB4OTNjNmZmMDMsIDB4MDRhZTYxZGQsCisJMHgwZWNhMmE3YSwgMHg2ZmNlYjgyNywgMHg1MWZhNDExZCwgMHhhNzdjMTc5ZCwgMHhjYzc0Y2ZmMiwgMHhkMjE4ZjM4NSwKKwkweDc0OGQ5OWRjLCAweDdmOWQ2N2ZmLCAweGNmZjNlMjJlLCAweDE3YTc2NmY1LCAweGY1Y2Q5OWYxLCAweDRiZDc5ZmRiLAorCTB4MDVlZTU4YTUsIDB4ZTQ3YjQxODYsIDB4ODg1ZmViY2YsIDB4ZDhmNGI1NDgsIDB4ZmJkMjI1NmYsIDB4ZDY3Njg0YjIsCisJMHhlYTM2NDI4YiwgMHg3NmNjZjBlZCwgMHgxYmIyMmNjMywgMHg5ZDU5ZDExOCwgMHhjMzU5ZDM5NSwgMHhlMGU5N2QwMSwKKwkweGE4YzdiMjE4LCAweDM3ZTc0NmE0LCAweDA1YWY4NWY0LCAweDlkZDViZDhhLCAweDgwZDdiN2RmLCAweDg3YjM1MjdjLAorCTB4NmQzNTExZGIsIDB4NTA4ZWM4NjcsIDB4ODU1YTkyZWQsIDB4MzllZTE3OWYsIDB4ZGE4NTc2NDMsIDB4ODcxZjZlYWUsCisJMHg1ZTNlZWQ0YiwgMHhjODAxOTU1ZSwgMHg4MGU1Y2QxZCwgMHgwYWJhNDIwMCwgMHhmYmY5MDVmMSwgMHhkM2Q3ZjVmZSwKKwkweDdiZjI2OTk3LCAweGI1ZGY3ZjI5LCAweDc1MGYyZTU2LCAweGI3YTg0OTlkLCAweDM0OWM2NGQ2LCAweDk3NmJmZTIwLAorCTB4NWU0MmZkMmIsIDB4YmNkZTM0MWYsIDB4MmYwNDgxZWMsIDB4YzE2YTFmMmMsIDB4ZmQ4ZDBlZjYsIDB4OWEyZmJiNTAsCisJMHhjMzZiZmJkYSwgMHg5N2JlYTM1NiwgMHg0YzNhMmNlYiwgMHhhNDJkNmI5YiwgMHg4YmQ1YjdmZiwgMHg5YzVjYmExOSwKKwkweGVkMTM5ODVjLCAweDkxNjE4M2I5LCAweDA3NDcyODU5LCAweDA2NjUzYzJlLCAweDNiNmEwMjQ4LCAweGJlNTA4ODhmLAorCTB4MmY3M2NhM2EsIDB4MDMxYzY3ZDIsIDB4NmY1MDkwYWUsIDB4NWZiNDA1ZjgsIDB4NzRmOTVlM2IsIDB4NmUzZmY2MDQsCisJMHgwNjZiZTA0OCwgMHhiZjBiZDc1MywgMHhmMjBjNWU5YiwgMHgyZDk4MTk2NCwgMHgwNjY3MWY2NCwgMHgwZjFkMjA0NiwKKwkweGY0ZTVjYzNjLCAweDFhYjY3YWUzLCAweGI5ZDMxYmY1LCAweGY3MjgzNGQ5LCAweDNjNDJkY2EzLCAweGRiZTYxYjdmLAorCTB4MWRmZmZmMDUsIDB4ZmVjNjBmZjMsIDB4MTQzZmM5OTksIDB4ZDBhNGJkZGIsIDB4NTk2OGRiYTcsIDB4YWViY2MwMmQsCisJMHg4MzU5ZWExZSwgMHhkMDQxYmU0YiwgMHgyMjJkOTM1ZiwgMHhhYzM0YTQwZSwgMHhkZmU3YTFkNywgMHg4Mjc1N2I1NSwKKwkweGMxMTNhNzIyLCAweGM4YmI0MDhlLCAweDQxNmVjODMwLCAweGYzMzY2ZTNhLCAweGNjYjIwOWY1LCAweGY3MWU2MTFhLAorCTB4OGQ5ZTFlNjcsIDB4YTc2ZDdhN2EsIDB4OWQ2MTE5ODksIDB4YzhjMzNhMTMsIDB4ZTQxYzRkN2UsIDB4NmNkNmJkMjIsCisJMHgyZGJkMjI0ZSwgMHgwMmFjNzQzOCwgMHgxNGNlMWZlYSwgMHhjZmFjM2FmZCwgMHhjZmFjM2U0YywgMHhhZTc2MjE0YywKKwkweDlkYjE5NjY4LCAweDZmYjVmMDcwLCAweDk2MGZiZTUxLCAweDgyODkxZTJlLCAweDQ3YmUwZGY1LCAweDlkNDMzNjcwLAorCTB4OGY3M2FlY2EsIDB4MTVhNDFiZmYsIDB4ZmRlYzc2OTcsIDB4MmRmZjQ4NTcsIDB4ZTExM2IzY2EsIDB4NzVjYmJhN2EsCisJMHg1YmE4MDNjNiwgMHgzOTMzNmQ2YiwgMHhjMTYwZGViOSwgMHhlZjc4MzhlYiwgMHhiMTM2OTFiNywgMHg5ZDFkN2U2NywKKwkweDRkZmI5ZWU3LCAweDI3MjZhNjJlLCAweDA3MDk5ZmVhLCAweGExMWZkMjI1LCAweGMzYjBlOWYzLCAweDNkNTI4N2M0LAorCTB4MmMzYjNiYjIsIDB4YjAxMDRmYTIsIDB4NzBmNzkxZmUsIDB4MTY0YzEzN2UsIDB4YmFmNjg0YmYsIDB4YjA2NWZmNDksCisJMHhjNDhlNjE3ZSwgMHg5MzU3NzNlOCwgMHg4M2RmNjE0YSwgMHg5MzhiMTA5MSwgMHhkMTc0N2Q0NywgMHgzOGViNzY0MiwKKwkweDNhNTUwZjg1LCAweGRiOWIyYjdiLCAweDcyMjk2ZjhmLCAweDczMzM4NTU1LCAweGFmNTgyY2M4LCAweGQ2NmNmMGE4LAorCTB4MTAyMmZhYWIsIDB4Zjg3YjMyY2UsIDB4YWY1MjkxNzYsIDB4OTMyODkyZWIsIDB4ZjQ2ZDVlMWQsIDB4ZWJiMmU4MzEsCisJMHgzM2QyNTBlMCwgMHgzZmQ5YzlmZCwgMHhmNjAxZGRhMCwgMHhmOTU0ZjJjNCwgMHg1MzI3ODQ1ZCwgMHgwYWNkZWVmNCwKKwkweDJkZmQ1NGZjLCAweGFjZGZmZDI5LCAweDhiNjZmMWMwLCAweDUzNzZlMWM4LCAweDdhMTRkYzA4LCAweDFlOTdhNTBhLAorCTB4ZGI0MTg4N2EsIDB4ZWNjZjFiYTMsIDB4NTFhM2Y2YmUsIDB4NmJkZjg0YzksIDB4ZmQ3OGU2MWUsIDB4ZWRmYWYwOTAsCisJMHhjZDgwMmI1YiwgMHg0ZGJmYTBkOCwgMHgwY2ZlZmMyMSwgMHhiOThiZjU3OCwgMHhlZGFmMDIzZiwgMHg5YmY1NzhhMSwKKwkweDM3NWUyMTg3LCAweGEwNjc2NDg5LCAweGEzNzY4ODFkLCAweGI1YzBlNTA3LCAweDYwZjZlNzk0LCAweDUxMzkyMzA2LAorCTB4ZDczOTg1MjksIDB4ODA3N2UzMjQsIDB4ODdjOTE2NDMsIDB4NTQxZjI4YTMsIDB4MTVjNDMwYjksIDB4ZTlmNTA2YjgsCisJMHg3MWU1NzA2OSwgMHg4ZGIxMDE3ZSwgMHgxMGE0ZTc5NywgMHhmNmIwMjQ1ZCwgMHhiYzA3MmM3OCwgMHgyNzdkYTFlNywKKwkweDdlNjY4Njk5LCAweGU1Yjc3MjBjLCAweGRmZGVkZjAxLCAweDgyY2QzZjQwLCAweDk4M2NlYjZmLCAweDhiNjZmNzhmLAorCTB4MGViN2VkMTMsIDB4YzNkNWU4OWYsIDB4NTlhMjVhM2MsIDB4YmYxODdlZDYsIDB4NGU1NWZlNjUsIDB4NDUzMzk2MmYsCisJMHhmODM3NGM2ZSwgMHhlZjgzN2VkMCwgMHhiZGY4OGQ0OSwgMHhlOTdmN2Y5YywgMHg0NDFmNjdlZiwgMHg4ZDMzYWNmYiwKKwkweGIyNWFiYWQxLCAweDY3ZGEzYTU5LCAweGY0MTk2NTJkLCAweGRjYWFiN2ZkLCAweGI3ODIzMDc5LCAweGRkZjRlMzJmLAorCTB4NDNlNmRmMzIsIDB4YTNlOGY0M2QsIDB4MjdhOGUxYmUsIDB4ZjFjYmI2NWEsIDB4NTEwZDQ4MzYsIDB4OTgxY2Y4OWUsCisJMHhkMzg5MjBmZiwgMHg5NDMyNGI3ZCwgMHg3MDU5YmE0MywgMHg3ZWM1Y2Y5NywgMHgwZGYzZTFhZSwgMHhmZjNkODc5NCwKKwkweDRlNjU3NDE0LCAweGU1MDZkMTA1LCAweDc2MjMxYmE3LCAweGU5NTU1Y2EwLCAweDJlMzBmMDc0LCAweGNmNzg4N2RmLAorCTB4NzkzODQ1NmMsIDB4N2E4Y2IwMjcsIDB4ODU0M2ZmZTgsIDB4MGJmODU0ZGUsIDB4MDA4ZDM2YzAsIDB4M2MxMDk4ZjcsCisJMHhhMzE3NzRhOCwgMHhjYTU4NWZjMCwgMHg0MTNiY2ZlOSwgMHhmMzFkNGY1OSwgMHgwMDkxYmZhMSwgMHgzODA3MDk1MywKKwkweGYwYzExYTU3LCAweGQ1OTY3NDgzLCAweDZmZjM4ZDkzLCAweDkxZjgwYzVlLCAweDBmMWMxZDcwLCAweGRkNTY0NWE3LAorCTB4MTU1ZjA3ZDYsIDB4MGRmMTI4ZTYsIDB4YTZmOTAyMTgsIDB4YTliZTcxOTIsIDB4N2E0MmJhNDQsIDB4MGFiYTA0NmMsCisJMHg0ODE2NDdhMiwgMHhhZTE3M2U4OCwgMHg4M2NhMTVkMCwgMHgxY2I4ZjcwOCwgMHhjMjU3ZTc1OCwgMHhmMGIxZjIxZiwKKwkweGE2OTRmZmFkLCAweGE0Y2UzNWY3LCAweDFlMmYyZTFjLCAweDczNGE3YjMzLCAweGQwNGRlZjQ4LCAweDY1NmY5ZGQ4LAorCTB4ZmE4ODlhN2YsIDB4YWZiZGY0ZTUsIDB4MTQ5YTYwMjUsIDB4ZWI4YzllZTUsIDB4ZDdmZTVjZDgsIDB4MWZmZjE0NTIsCisJMHhiOGY0MDdjNiwgMHhmZmNiMGY4ZSwgMHgyZGRhMjI0ZiwgMHgyMzVmNGI5NSwgMHg3OWQyYmZmYSwgMHgzNzk4OTk5NiwKKwkweDVkMWVlMDFjLCAweDAwZmQzODJjLCAweDQ2MmQ3OWJmLCAweDE2ZjgyNGU3LCAweDBjNzU1YzU3LCAweDZhZDY1OWUxLAorCTB4NTY5MTE4NzQsIDB4MWM4ZDYyZDgsIDB4NDA4ZjJiM2IsIDB4ZGExZDhhMzcsIDB4MzliYTI0NmEsIDB4ZjQ4OTRiZjcsCisJMHg4YjkyYjljMSwgMHgwZjgwMGVhZiwgMHg0ZTA4NTZlNywgMHgzMmQ2NTdhYywgMHgzNzkwMjU2YywgMHhhODE2MjkyYiwKKwkweGEwNTc5OTVlLCAweDFjYTk2NTdhLCAweDA1MWEyNzVmLCAweGFmNDAzN2EyLCAweGRlMjgzYjI1LCAweDhlZjVhNzMxLAorCTB4MTNkZjg4YTksIDB4YTQwZjVmYzUsIDB4MTg3YWMxZjgsIDB4MmU2M2U1NDcsIDB4OTU5ZTQ4ZGUsIDB4NTZhYmY1MjksCisJMHhiYjQ3OTExYiwgMHhhY2I1OTdiZiwgMHgzZmZjODhiYSwgMHhkZTUyMWJkMywgMHhlYzUzZTkzYSwgMHg1YjUxYWNiNywKKwkweDgyMzVjNmVlLCAweDRlNTc3NzFkLCAweDA3Y2EwYzQ0LCAweGVmY2U2NGU2LCAweDQwZjI0ODExLCAweDkzZmEwZmYyLAorCTB4NDQ3MTQwYmIsIDB4YzIwZjMwY2YsIDB4NjFiYzg5YzMsIDB4OTllYmE0N2EsIDB4ZGJhMDU3MDgsIDB4ZGQ3Y2E1ZTgsCisJMHhiZTBhYTczMywgMHg5OWNlYjA0OSwgMHgxZjY3Y2UxNiwgMHhmYmJlMDk5NiwgMHgwOWZmM2UwNSwgMHg1MDY1ZWY0MCwKKwkweDVkNzQwYjFlLCAweDM4ZTRjMzE2LCAweGU2MjZkZDQ4LCAweDJlNzljNzBmLCAweGNhMDlmNjFkLCAweGQ0MzhkM2RiLAorCTB4OGZlZmFhMjgsIDB4Zjc1Y2ExYjQsIDB4Yjc4OTExZTgsIDB4ZTVhNTJmMzIsIDB4ZWRlOTQ3Y2MsIDB4OThmMzRmY2MsCisJMHg3NDkzM2FjMSwgMHhmYzkzYWY5MCwgMHhmMzhlMzEyYiwgMHgwMzY3YjMyYiwgMHg4YjVmZDdkMiwgMHhlMDE2OWM0ZSwKKwkweDQyMzlkZGZiLCAweDQzOTQyOGRlLCAweGRkNjgwMzhkLCAweDcwMWY1Yjk3LCAweDA2NzY4MGE1LCAweDVmYWM0MWFhLAorCTB4MTQ3ZWUzOTYsIDB4NGNjYWIzZmIsIDB4NzRhYjcxOGYsIDB4OTk1YThlOTUsIDB4MTdkNjE1MzcsIDB4OWJlMmRlYmIsCisJMHg2YjhiZWIwNCwgMHhmNWMyMWNmNSwgMHgzODM3NGZhNiwgMHgxMzgzZWYxMCwgMHg3NDEzM2FmOCwgMHg1NDNmOWZkYywKKwkweDgxYTM2MDZlLCAweDE4M2YzNjBlLCAweGRiM2E0M2U2LCAweGRhMjAzNWJjLCAweDAzZTZmZWExLCAweDk3Y2MwMTgwLAorCTB4ZjBiYzE0YWYsIDB4NGU2MWVhZGQsIDB4NzU1OWQzOGMsIDB4ZmVlZDExMWUsIDB4MTg4ZjU2YTIsIDB4ZTFhN2UyMDgsCisJMHgzOTQ0NDFiMiwgMHgyM2QzYmU5MSwgMHg1YWI0OWVhMiwgMHgzNTNkNTNkNywgMHg0ZmQ0YWM1ZiwgMHg1OTA2NzkzNywKKwkweDRlOWU0ZWM5LCAweGExNWMzM2Y0LCAweGQ0OWZiNTFmLCAweDA0NWY4MzU2LCAweDRhYzkxN2I4LCAweDU3Yjc5OTdkLAorCTB4OWU4YTYxZmIsIDB4Mzk2MWRiNTYsIDB4YWI3YTY3ZDIsIDB4NDUzZjRmYTMsIDB4M2Y1MDViNGQsIDB4MDhmODhmODMsCisJMHg3YmQyMDVjNiwgMHhmZDcxMWZjYSwgMHgxYmYwODRkYSwgMHgzNmFiZjM3OCwgMHgyMTAzMzc0YywgMHg5ZDFjNzFmOCwKKwkweDc5ZTM0Y2M3LCAweDE1ZDMzY2Y4LCAweGJmYmY4N2RhLCAweDYzZTM4ZjdmLCAweGI5YmJmMDFlLCAweGU0MjJmZWY1LAorCTB4MWYwMGNkYTMsIDB4OWRlNmYzYzQsIDB4Y2ZkNGNjYjMsIDB4Nzk5YTU5ZjQsIDB4ZjI4NmE5MzEsIDB4NGIwNzA4MjUsCisJMHhhMjNjNzVlZiwgMHhkNTNkMmZjYywgMHhiZDY5NWEyMywgMHhlNzY4NDNjZSwgMHhlMjhjY2JhNSwgMHg3NjNmNmEwMSwKKwkweGY0MDU3NDFkLCAweDg1N2E3NzZhLCAweDkwY2JjYzdhLCAweDQ3Yjg5NDVhLCAweDRlYjM4ZTNhLCAweDVkMzFmZjQwLAorCTB4NmI0OTU3YzEsIDB4ZjYzMzYxZmQsIDB4NWYxNDY2ZTMsIDB4ZmU4NWNmNGMsIDB4ODQyNmZlYTEsIDB4ZmMzN2ExODMsCisJMHg1ZTk5ZTc0MiwgMHg0MjczZTdjYywgMHhmMThlZGZhOSwgMHhlNzZjNzQ5NCwgMHg3NDQzMTE1OCwgMHhkNWQ3ZTdjNSwKKwkweDFjNjIxNGVhLCAweGEwOGZiMTk3LCAweDdlOTBjOWZkLCAweDBjYjhjMjllLCAweDdlNGVjZmE0LCAweGI0MmU0YTZkLAorCTB4OTdkMWZlN2YsIDB4NTJkMGI0NzYsIDB4MGZiMzNlMGUsIDB4ZjVhYjU2ZTUsIDB4OWM3MDliZTYsIDB4ZmY5ZjIyODMsCisJMHg1ZGUyNzI0ZCwgMHgyMDZkZGY5OCwgMHg1M2JlOWEzZCwgMHg3OTQ0ZGI0ZSwgMHhlYmZkMTM5MywgMHg1NWRmNTZhZSwKKwkweDJjYmQ0MjJmLCAweGViNjRjNjE4LCAweDBhMTM4ZjNkLCAweDNhMTVkYTljLCAweGNiNzkzOTM4LCAweDUzZWY1YzIwLAorCTB4NTgyYzc3NDUsIDB4NWY4N2VkMDIsIDB4M2I4ZDM4ZjcsIDB4OTRmY2NhN2MsIDB4OWIwZmM4MTYsIDB4MzBhYmNiZjgsCisJMHhjNzhlNWY3ZiwgMHhmZWU0MDIzYywgMHhkZTVmZDJiMCwgMHg2YWU1MGZiNiwgMHg4MjFjZmNlOSwgMHg0NTc2YzU5NywKKwkweGRhMzlhOWYyLCAweGJmMDJmNWUzLCAweDUyZGM0NzM3LCAweGQyYjhmYzhlLCAweDI0NDg3MDY2LCAweGZhMTllYjc3LAorCTB4NzcxMWNkNTksIDB4ZTViZmIxZGIsIDB4NGMyNmY5ZDEsIDB4MzZiZmQ2MGQsIDB4NmUzYzljYTEsIDB4MWUyMTMxYzksCisJMHgxODEzMmQ5YSwgMHgwYWFjZWI5NiwgMHg0ZjFiYmU5ZSwgMHg4ODUyNDBmYSwgMHg3Mzg0Nzc3MiwgMHhlNTc0NGNiYSwKKwkweDBjMjcyODY0LCAweGJjYWQwNjA5LCAweDJmNzk3MWQ2LCAweGI0M2UxZGQ5LCAweGY1YWNiYTlmLCAweDYwY2M4MTQ4LAorCTB4N2NhMDU0MDksIDB4Njk3OTU0OTMsIDB4M2M3MTdhNzEsIDB4YTNiNGUyYzksIDB4OTE0MmI0YmYsIDB4YWY4NjJjMzcsCisJMHhmNzM5NjBkMywgMHg1ZWFmMzg5ZiwgMHg5NjJlNjNmZCwgMHg4NjdmNGI1MCwgMHg0MTI4Y2NiMCwgMHg5YmRhM2ZmOSwKKwkweDU3M2UxMGM2LCAweGJiYzU4MzUzLCAweDY4NDRmNTE4LCAweDcwMjA1ZDdmLCAweDRmYTM4ZTUwLCAweDdlMzM3NjQ3LAorCTB4NWVkZGVlNDgsIDB4N2EzNDFiYjIsIDB4N2E1ZTViYTQsIDB4ZjIyMWY1YTIsIDB4N2E4MTFlNTIsIDB4NzkyMDU4YTIsCisJMHgwY2ViNjFlOSwgMHgwYzEyZmViOCwgMHgzYzVjMDBiMiwgMHg1NDVlYjhkYiwgMHhjZTI2N2JmOSwgMHg0OWU1ZjAwNSwKKwkweDVlNWM5MTY1LCAweDI2NzNlNGU5LCAweGQxZWZjNjBlLCAweDQ1MmE1Y2FlLCAweDVlMDIxZTIyLCAweGMzZTllMGM5LAorCTB4OTM3OGY3OWYsIDB4OWQxZTUwN2YsIDB4YTk4N2ZhNDEsIDB4MjFmZTkwMDcsIDB4MGZlMTQ0ZmQsIDB4NmYwNzhhOGYsCisJMHg1MGEzZjVkOSwgMHhkOTEyY2I1ZiwgMHg4NWNiOTUwMywgMHhlMmNmYjQzNiwgMHg2OTQ3ZDFiYywgMHgyZWRjYzViZSwKKwkweGE2YmY5NzY4LCAweDg5MmExY2Y1LCAweDc5Nzk0NDRiLCAweGM3OTlkOTYyLCAweGJlYmQ0MWVmLCAweGZmZjQ5YzI5LAorCTB4NTY2N2E1YTQsIDB4YTY2ZTNjNjAsIDB4MjExYTcwNTcsIDB4N2QxYTU5ZWYsIDB4NmY5ODdiZjcsIDB4OTA1ZDNhMzQsCisJMHg4MWYwYWIzZiwgMHg5MTQ1OTdmYiwgMHhiODA4NGY2OCwgMHg3NTllOGNjZSwgMHg4MzMyMTY1NiwgMHhmMTM5ZTI5YiwKKwkweDNiNDA5NjMzLCAweDM0ZTBhMzRmLCAweGExZTA3YTNiLCAweGVmNTI3YWM3LCAweDM3YmMwNWY1LCAweGZhZDBmZTQ2LAorCTB4YThkN2JjM2YsIDB4M2U3NzU5YzgsIDB4YzZhMmQ5Y2EsIDB4NzAwYTg3ZTQsIDB4N2NmNWViNWQsIDB4ZDdkMThkOWUsCisJMHgzOTI3ZGU1MywgMHgxY2I5NzYzOSwgMHgzZmQ4YTk5ZSwgMHg1N2IzYTU5ZSwgMHhjMGY3YzNjNiwgMHhjZWY5NDE2YSwKKwkweGM4YTk1NmYxLCAweDg4ZTM0MGU1LCAweDBkM2YxODYzLCAweDNlNDgxNzJjLCAweGEyNTJiYzc5LCAweDVjY2RkYTFmLAorCTB4ZWY3ODRkOWUsIDB4NWQ5MDBhMjgsIDB4YjQzZGU1ZDgsIDB4NzIyYjVhOTIsIDB4MzY3NGEzZGUsIDB4OTQ1ODhjMTcsCisJMHhlM2RmYTc2ZiwgMHhmZTQ3OWZmZSwgMHg5YmI2MjU2MywgMHg4M2I1YTJkMywgMHgwY2ZkMDIyNiwgMHg2N2JjYjg0MCwKKwkweGYxZTlmZDI2LCAweGVmYmFkMTk2LCAweGVhNjk0NWYwLCAweGQzOGVhZDU1LCAweDhiYWIzZGU0LCAweGU3YjBjN2FlLAorCTB4NTIyNzdiYWMsIDB4Mzk5MmFmM2MsIDB4MmFkZTkxMjIsIDB4YzEzNzZlNjUsIDB4ZTYxYjI1OWYsIDB4NGY5ZDU3MzMsCisJMHgyYWM3YjczMSwgMHhhMjdlYzE4YiwgMHhiMDdiNWFlZiwgMHgzMzg5ZmVjNywgMHg3OGE4ZGYyMCwgMHgzYTEzZjE1NCwKKwkweDE5NzY1ZWVmLCAweGFjZDA3NmUzLCAweGRkN2FkYTc1LCAweDE2MzAxMDc2LCAweGU1Y2FiYThhLCAweDMyYmY3NmRhLAorCTB4Yjk0NTlmYmIsIDB4ZTAzOGRlZTgsIDB4YWVhYmYyMWIsIDB4ODA4MjFlNTAsIDB4MjY2ZTdmMjEsIDB4YTYxZjcxZTMsCisJMHhjZWQ1NDNlOCwgMHg1MTdhNTkyZiwgMHg2NjY4NzI4ZiwgMHhjMjNkNDVlMywgMHgxZmQyZTY3MywgMHgzODVmYTdlNiwKKwkweGExYmVmM2I1LCAweDNlYmI0YTIwLCAweGJmOTM0ZTM5LCAweDUzNDQzNWQxLCAweDMwZjc2NmZmLCAweGE3NWJmN2NkLAorCTB4NWVmOWFiNWYsIDB4YzlhOTE5ZWUsIDB4NWUzZDVlZGYsIDB4ZmQ0NjdmNTMsIDB4N2ExY2FkMjQsIDB4YTNkNjlhMzcsCisJMHg3OWJmYTdlMiwgMHhhM2U4YTViZiwgMHgxMmVjNDI3NywgMHhlMjNhOWQzNSwgMHhiZjkxMTMzZiwgMHhlNDY3MmMzZiwKKwkweDMzNzg3Y2JmLCAweDFkMzFmOGQzLCAweGU3ODIyNDIzLCAweGY5M2Q1YzgwLCAweGM4ZTVmNzMxLCAweGJmMjA4ZmVmLAorCTB4YTFmNDRmYzksIDB4NzM0M2YzYzIsIDB4YTIyOGM5YTEsIDB4N2VlNDYyN2YsIDB4NzI1ZmE4NzksIDB4NWU1MDM5OTAsCisJMHhmZGIxZDRjZSwgMHhmZjhmNTQ0MiwgMHg5Y2YzMGU2NywgMHhlM2JhZmVjNywgMHhmMTBmNGIwZCwgMHgxZjg4NDM3OCwKKwkweGZmNzhhNTczLCAweGJmY2MwNjcwLCAweDRkNzk3OTBmLCAweDE2YzNmNzJlLCAweGZmYWYzNmVlLCAweGI1OGUwODM4LAorCTB4ZmM5YWQxNmQsIDB4ZWJmMWZkYTIsIDB4M2JkNjBlM2YsIDB4YWUxZDA0NGIsIDB4OTNlMTQ2YjMsIDB4N2RhMDE2NWEsCisJMHhhMGU4YmI1MiwgMHg0MGM0ZWFmZSwgMHg1ODNiZTYyYywgMHhmNGI0NmM2NywgMHgwYThiODM4ZiwgMHgyNThmODAwZiwKKwkweGE5ZGUyODM3LCAweDE5M2ZjM2ZhLCAweDllMGE0NTNlLCAweDFhNzBiNGNiLCAweDkwZTNjYjkzLCAweDI5MTA4ZjVmLAorCTB4YzcyMzljZGQsIDB4ZjEwM2ZlZTcsIDB4ZjQ5ZWI0MWMsIDB4ZGM3ZmJjZGMsIDB4Yzg0NzIyN2EsIDB4OWY5ZjA4NTksCisJMHhlM2RmYWYxYiwgMHgxNzk0MGYxZSwgMHg3ZjBiOTA4ZSwgMHhmZTRjYjgyNiwgMHg0N2E1YzI0NywgMHhkODJmNDdjZiwKKwkweDcyYTNmYTBkLCAweGZkZmI4MTlkLCAweGJmNWMzM2RlLCAweGZlZmQ3MjM3LCAweGY2OGZiNDdjLCAweDQ0ZjM5Yjg3LAorCTB4ZWQwNzBlZTcsIDB4ZTkzZWQyOTcsIDB4NjE4ZDdiYTEsIDB4NTlkZjE4MTksIDB4Nzk3ZDIzYTEsIDB4ODE5MDk5N2EsCisJMHgyMTI2YzJmZSwgMHgwZjM2ZmM4YywgMHhjODE2NDhhYiwgMHhjODc4YjliZSwgMHhhYTMxZmQ0OCwgMHgzYWZkZWQwNywKKwkweDA1NTFmMzkwLCAweGU0MDk2YjNlLCAweDcxZTVjY2RmLCAweDcxNmUzNWIxLCAweGY1MDM4YTRhLCAweDFlYWMxZmY2LAorCTB4ZTI3YThiOGEsIDB4ZmQ5ZTFlMTEsIDB4Njk2YmUxMzAsIDB4MmJlZTQ1ZGYsIDB4NmJkMDEyN2UsIDB4ODUxMmQxZTUsCisJMHhkNWNjNWY4ZiwgMHgyZTFmM2FkMSwgMHg5NDlkYjkxNCwgMHgxZjcwYmEyYSwgMHhhOWQ4MTU2MywgMHg5NjA2NTc2OCwKKwkweDkxNWYyOGViLCAweDZkNTllOWM3LCAweDlkMGExZmY3LCAweDE0ZGQ5NGM3LCAweGRhODhmMzg2LCAweDdkN2RiYTI0LAorCTB4MmU1MWZiOGMsIDB4NzkzZDBmOGYsIDB4YjNlZDE4NTcsIDB4Njg3NDJhMDEsIDB4ZDZiZGRiZWYsIDB4YWY1ODJlNjksCisJMHg4ZDk2ZDBiZCwgMHhkY2RhZGZiNiwgMHg0ZDZmZWE2OCwgMHhjZjE1OTc0NiwgMHg3NDhjZmNhMSwgMHhmZThlY2E3OCwKKwkweDhjZmFjMGEwLCAweGU2NTVjZDMzLCAweDU4MGZlZWFiLCAweGU5MzZmZTk0LCAweDlkYTJiZjQxLCAweDFlMjg5ODIyLAorCTB4ZjkxYWYxNjEsIDB4YjE2NzE1ZjksIDB4MWNjYWRlMjYsIDB4YTc2ZTBiMDIsIDB4ZjQyOGYzZDYsIDB4MWI0MmM3NmEsCisJMHhlZmY2OTdlMSwgMHg1ZGIxNzhkNSwgMHgxYmE0MTdhMSwgMHhjZjRhYmJjNCwgMHg4OTgzZmRhMSwgMHhlOWNjOGRlYywKKwkweDE1ZDlmMzg5LCAweGU1MWE4ZTUyLCAweDhmNzQ4ZGQ5LCAweDFmOTBlYWZkLCAweDA3ZmU1Y2JjLCAweGUzYzRiZTZlLAorCTB4ZGVkN2RlMmMsIDB4ZTE4ODc5YzMsIDB4MGM5YzUyNWYsIDB4NWZjZTRhZWMsIDB4YmVlMjQzNGIsIDB4MDI0ZjkxM2YsCisJMHg0MGNmMGU2NiwgMHhkZTFlNTY4NCwgMHhkYWM5ZDBhYiwgMHg0OGRlODI3ZiwgMHgzZWJjMDJiYSwgMHg4ZmU1Y2I5YywKKwkweDM2ZmRjMGFiLCAweGIyYzczYmNhLCAweGZiYTIzMGQ0LCAweDk2MjcwYjFmLCAweDUxMzg0NTYwLCAweDM4NzJiYTVlLAorCTB4MWYzZGYzNzksIDB4Y2M3NDllMTAsIDB4N2Y3MWI0NmYsIDB4NzJlMWY5MGIsIDB4MzFjMmE0N2MsIDB4YmU5ZTY0NDksCisJMHgzYzg4ZjJmNCwgMHhjYTFiZmJlNSwgMHg2YWI3YWU3ZSwgMHg2MWQ5MGZjOCwgMHgwMmM1NzcyOCwgMHhjYzJjZDJjNiwKKwkweGZmYjZiYzYxLCAweDhmOWMwZTdhLCAweDM5NmFlODg1LCAweDk2YWVlNWQyLCAweGNmZTQzMDk0LCAweGNhYmM2NTY0LAorCTB4MGNhN2QyOWIsIDB4MjA1ZmEwNzcsIDB4MDQwZWQwMTgsIDB4ZTNjMGMzYmYsIDB4NTc0ZWRjM2YsIDB4Yjk0ZjdhZTUsCisJMHg3MmM0N2VkNiwgMHgxZjhmNjY0ZiwgMHhlYWY3ZGFhNiwgMHg4Mjk3M2M3NywgMHg1OWYzYWFlMywgMHhmZDYxZDhhNSwKKwkweDEyNTU3N2NkLCAweGRjYTI3MjRiLCAweDgwOGY3NjVhLCAweDVhYjFkY2YwLCAweDcxN2RmOGQ0LCAweDAzMjU2MTVlLAorCTB4N2ZjZTNlM2YsIDB4OGVmZDEzYWYsIDB4Y2RhZmIwMzgsIDB4ZjU3NWNmMjgsIDB4NWUwODMzODIsIDB4MGE4MTdiODEsCisJMHhmODg3MTMzOCwgMHhlMjRmZTAyYiwgMHg4OTY3YmQzYSwgMHg1N2M3NDI1ZSwgMHg4NWFiYjFkNywgMHg1ZGU3MWI4ZiwKKwkweDlmOTBjODJjLCAweGEwMmY1MTU0LCAweDk5NTZiN2RmLCAweGEzMDU1YzdmLCAweDNlOTk2OWVmLCAweDllMjFlMzAxLAorCTB4ZTM4YTU2MTYsIDB4MDMzMzU2NTUsIDB4MzMyYWY1YzYsIDB4ZjI4NjUzOTksIDB4NzQ0M2M2Y2EsIDB4MDJiOWVkZGUsCisJMHgyMDZmMjUzOSwgMHg0ZjNhNGZjOSwgMHhhNGYwMmFlMywgMHg0ZDFkMDFlNywgMHg3NjQzMjg0ZCwgMHg4NjRiYjg2NywKKwkweDE2N2Y4OWYxLCAweDRjYjVhNzFkLCAweDU5ZWZhMmYwLCAweDg0M2NlMmQ0LCAweDExZDAwMWZlLCAweDJkM2M3ZGM1LAorCTB4ZTc1ZjFhMDEsIDB4NWQ3MjcxZTUsIDB4ODBlOWMxOGIsIDB4NjU4ZDQ4NzUsIDB4NTUyMWZmYjQsIDB4ZDQzMjljMWIsCisJMHhkZjI5YjYzYiwgMHgyZDk1ZjE4ZiwgMHgwZGRmZGM4ZCwgMHhkNjc0OTNmNSwgMHhkMWMzZDdmYSwgMHg5OTEwYWI1ZiwKKwkweDc5MGEwMTQ0LCAweDU2NTlmYTJhLCAweDMwNTYyZTg1LCAweGY3ZWUzYjc3LCAweDQxZmUxOTMzLCAweGRjYTU0OGJiLAorCTB4MmE2ZjNkNWEsIDB4ZDBlNTIyNjYsIDB4MTNkYzgzNzgsIDB4NmI5ZTQwOWYsIDB4ZDNiMjQwZGMsIDB4Njc4ZGFhOTQsCisJMHhjOTJiMmQ0OCwgMHg3ZDYyMzNhZiwgMHg4OTBmYWNhOCwgMHhhNWQ1NDg3NywgMHhhYzk3MTcxNCwgMHhmMzViZjJkYSwKKwkweDhlMDg2MjIyLCAweDllMWUzYzU5LCAweDhkODhlZjczLCAweDcyN2NjMmI3LCAweDFmZTM3OTdmLCAweDQxODczZDMwLAorCTB4ZmU1YjgwMzMsIDB4NGMwNzNiYjIsIDB4YWMxNmZmODcsIDB4YTYyMzc4ZDgsIDB4ZThjZWJjNGYsIDB4ZTA4ZmMxOWMsCisJMHhmYThjNjY1NywgMHhlOGZhZmNmMSwgMHhiMmFiZjI5NSwgMHhiOWQwMGYyNiwgMHhkMjdkYWZjMiwgMHgwOTRmMWFiZiwKKwkweGZlOTU0ZmU1LCAweDRkNGVmOTQzLCAweDdmODY1ZWQ3LCAweDEyMDUyNmQ3LCAweGRmNGYwZjkxLCAweGRiMDMzMjNiLAorCTB4NzNkZTM2NTcsIDB4NWY4OGM3YzgsIDB4NzdkMDA3MDUsIDB4MTE3MTc3YTUsIDB4NTY2MGJhMjMsIDB4NWU1YmQwOTcsCisJMHg0OTBiMzc4NCwgMHgxZjM3YmZlYywgMHgzYjdjODYzZiwgMHgxM2U3ZWZmZSwgMHg5NWRmMDg3ZiwgMHg2M2NlOGMwOSwKKwkweGY2NDlmZDgxLCAweGRmYWE5YTljLCAweDNlYjlmMjIzLCAweDI0Njc5MGJkLCAweGMxNDY0ZWJjLCAweDA1M2JhYzBhLAorCTB4YzdiZWUwZGEsIDB4MmI0ZTYwNzgsIDB4ZjAyZTdmYTQsIDB4NGRlMzhiM2MsIDB4ZWY5ZTNjODEsIDB4NmI0MGZkN2IsCisJMHg0YjM3YWUwYywgMHhhNzhlZjVjNywgMHg3NmU2OGVkYiwgMHhhOGZmYjc0OCwgMHgwNjU5MGZkOCwgMHhkY2VkMDUzNiwKKwkweDc3MTEyNmMwLCAweGMwZTA1OTZlLCAweGUyZDYzYmU3LCAweGM5Yjk2YmJlLCAweGNhZWIwNjk5LCAweGY0NDhkZmJhLAorCTB4ZjY4YTA0ODQsIDB4YTc2ODk2NTEsIDB4YjZhZWU1YjgsIDB4OWY2OWNiOGYsIDB4ZDJjMGQxYjEsIDB4MGVlMDZlMjgsCisJMHgwMDY0NzNjMywgMHg0Y2FhYjBjZiwgMHhhY2MzNTdiMiwgMHg4NTdhYWY2OCwgMHgxZTg4YWFhNCwgMHgyMmY1MDg3YiwKKwkweGVmMmNiNDBhLCAweDMwYWM1M2FkLCAweGIwNDJhZWZlLCAweGVjN2IzMzQ3LCAweDU5ZmVkNTFjLCAweGViNGM5ZjljLAorCTB4NjgyMGVkNTcsIDB4OGZkZGIwYzcsIDB4MGI0YWE3ZTUsIDB4MTliYjIyNGIsIDB4ZjdmYjgzZTYsIDB4OTAyNjRjYjYsCisJMHhmZjUyMTNlZCwgMHhkOTIzMzJmNCwgMHg3YmFmNzZhZiwgMHg1YmI0NzBjYSwgMHhhMGU2YTc5NywgMHg5YWUzMGFkZCwKKwkweGZkN2Y2ZTI0LCAweGJiNjdjYTNiLCAweDI4NWVmOTRlLCAweDQ5YjllMGU2LCAweDA1ODAxZjc1LCAweDg3MThkMTc0LAorCTB4ZmVhYWVkNTMsIDB4ZTc2M2E1ZTcsIDB4OTUwNWI5NTQsIDB4OWYyZjliN2YsIDB4NTlmZjdlYzEsIDB4NTU2M2RkNzIsCisJMHg2MzRkNGRlOCwgMHhlOWUwNzlmOCwgMHhjZjhkYmQwYSwgMHg5ZTlhNTMzNywgMHg3M2RiYjNmZiwgMHhmZTkzYWVhNywKKwkweDM5ZmVlYjc5LCAweDlmZmFlMWQ3LCAweGZmZDg4ZWIxLCAweDNjZDhmODIxLCAweDNhYzY3ZmY5LCAweDRmZjI5OTZlLAorCTB4NWYzNzg3NWMsIDB4NDNjZmM4NmUsIDB4ZTc0NmQ2NzksIDB4N2UyZWVjODgsIDB4ZGVlNDFjMmUsIDB4Y2I5Y2JjM2QsCisJMHgwOTkzOGIzOSwgMHg3NGZmYzc2NCwgMHhmZDg0ZDc3OSwgMHgxYzFmNDE5ZCwgMHg3Nzc4YTFjZiwgMHg2NzE4M2EwOCwKKwkweDg4YTFhNTg4LCAweDhjYTVjZGVjLCAweDJjODY4MWY2LCAweDQzNDBmYmU1LCAweDIyNGQzYTk2LCAweDZlMTYwM2RhLAorCTB4ZWM1MjBlMjcsIDB4Yjk0YjQxY2UsIDB4OWNhNzE5ZGQsIDB4MTE4Yjg4MmIsIDB4M2ZkNDMyN2QsIDB4Y2E1YmNiZjYsCisJMHhiZWUwYzZlNywgMHhkNWVjOTE5MCwgMHhmNWRkMzZlNiwgMHg1ZTUzZDQxNiwgMHg4NjhmY2U4OSwgMHhkMmQyODlkYSwKKwkweDVmOWM0YTk1LCAweGY2YWE5ZjZiLCAweDc5ZTMxYTY4LCAweGI0YjNiMmZkLCAweGEzZGFhNzRmLCAweGI0ZjI5NDQzLAorCTB4NjAzZjdjYTUsIDB4MWVkNjhiNDgsIDB4ZGFkNmFiOGQsIDB4MTA4MmZhOGYsIDB4YmFhOTczM2IsIDB4ZWI0OWQwN2YsCisJMHhlOWQ3MmRkMywgMHhhODdmZmNmMSwgMHhiMDdiODlkZCwgMHhhYjA3MTRhOCwgMHhmZWI0MDY3YSwgMHhmNjMwZDc0ZCwKKwkweGY5Zjc3ZTc0LCAweDFmZGMxYzhjLCAweGQwNWFiOTlhLCAweGNmNTUzOWU4LCAweDdlMjgyNDAyLCAweDQzZTNlMmE0LAorCTB4M2Y4ODczZDQsIDB4NWZiNTM0ZjcsIDB4YWYzZTZmZDIsIDB4MmU0YzcwNDgsIDB4NTM5Y2Q3NGYsIDB4MWU3ZWVjNjIsCisJMHgzYTczNzEyZiwgMHgxMWVhZjVmYSwgMHhkZGFlZDE2YiwgMHgzN2M2ZWViNywgMHhmZDY5N2QzMSwgMHgwNGU1ZTE5ZCwKKwkweDZmNTRmNWFmLCAweGViYzZjYjdmLCAweDc2NTBmZjMwLCAweGU2MTIzZGJiLCAweDUzYThkMGY1LCAweGVmZDAwOWVmLAorCTB4ODVlMzNjNmEsIDB4Mjk3OGIzZWIsIDB4OWUxNGI2OGYsIDB4N2FiM2QwOGIsIDB4YTRkYmRmZGEsIDB4MGQ5ZjRjMGYsCisJMHg0NTEyMmJlNSwgMHgyM2JlOTExYywgMHgxODMyOTgxZCwgMHg1OTMwOWY5ZCwgMHgzNWY1N2U3OCwgMHgzMGUzZWU4YywKKwkweDFhOWY1Y2U1LCAweGQ3M2QwOTg3LCAweGM3YzNjYWI3LCAweGM0ZjAwNTU5LCAweDE4OTYzNTczLCAweDM5YTkxZjdlLAorCTB4MDhlOWZlZTEsIDB4ODE4NzY2ZWYsIDB4OGIzOTM5ZTEsIDB4NjI0ZmVlNzIsIDB4YTgyYWFlZDUsIDB4YmY3ZWRjNzcsCisJMHgwYmVlMTY3ZCwgMHg3ZTg4MTg2NywgMHgyNmNlOThhNCwgMHg5ZWQ5OTNjNCwgMHg3MWMyYWY2MywgMHhjZDM1ZTI0MiwKKwkweDIwMzdlOTI5LCAweGZiYjViYzU5LCAweDIwNjc5ZWYwLCAweGM5Y2Y3YjdkLCAweDJhOWQzMTJmLCAweGYzYzNlZmI1LAorCTB4ODg0NjUyMjUsIDB4YmY2YmQyOWYsIDB4OWJkYzExOTgsIDB4NGE1ZjMzODcsIDB4NmUzYjk2MzIsIDB4NzU0ZTkxMTAsCisJMHg4NjlhNmZlYiwgMHg1MGMxNTRmZSwgMHg0ZjU4MWFlNywgMHgxYmYzMDI1OCwgMHhiZDYxMWU2MCwgMHg3Yjc5ODlmNiwKKwkweGNlOWMyMGE5LCAweGY1OTY0OGQ1LCAweGRmZDgwZDE1LCAweDdmYmEwOGE4LCAweGFlMDNiZWMwLCAweDRkZjNhN2NiLAorCTB4ODBmNjU3ZjQsIDB4MGUzYTQ3YTgsIDB4YzM4ZmY2NTMsIDB4MWZlZDdiMzIsIDB4MzBjMmZjZDMsIDB4M2I1OWUxNGQsCisJMHg3YTE1YzNlNCwgMHhjYTdiNjM1ZiwgMHg2Yjc3ZmI4NywgMHgxMDZlNTIxMywgMHg2OWY1M2QxZCwgMHhiYmQ2MTk1ZiwKKwkweGFiMWJiYmYyLCAweDI2ZmQ1ZjY4LCAweDlmY2YxNTkzLCAweGNhZmIyOTg1LCAweGE1NzRlM2ExLCAweDQzNjc1YjNhLAorCTB4NjQxOGI0NmEsIDB4NTVmMTE2NzMsIDB4ZTA3MjVmMGYsIDB4ZTY4MzUzZDgsIDB4OWNmYWY1MDEsIDB4NzM2ZTNhYTcsCisJMHhkYTgzYzcxZSwgMHg2NGMyZDE5ZiwgMHhmNzQzMjNiNCwgMHg4MWZiNDNhZCwgMHg1NmJlNzA3OSwgMHgzMWZkYTllYSwKKwkweDAxZTc0NmQ2LCAweDUxOGI4ODc0LCAweGE3YWJiNTdkLCAweGU5ZGYwZGI5LCAweGZmMWZiYjI0LCAweGNjODJlMzgyLAorCTB4MzVmYzQzMWEsIDB4Y2VkYjU1YWMsIDB4MGRjZmNhOWMsIDB4MmExOGY0YTgsIDB4ZmRkMGE1MmYsIDB4NmY3YWQ0ZjcsCisJMHg5ZjgxZTEzOCwgMHgxZmFkMDgyNywgMHhmNmQwZDcwYSwgMHg1ODMzYjdmMCwgMHhlMTYwZGRkZSwgMHhhOTVkODhmYiwKKwkweGFjMjJiOTlkLCAweDQ3M2RhNTdiLCAweGJmNWE3ZjMzLCAweGVmN2ZkM2QwLCAweGJlNmQzY2ZkLCAweGI5ZjYzNjRjLAorCTB4N2QwNzk0M2UsIDB4NGU4Mjc3Y2QsIDB4NmM1OTZmYmIsIDB4OGQyZmI2ZDEsIDB4MjU3NzdlZDEsIDB4NDU5MmYzNjgsCisJMHg2ZDkxZGZlOSwgMHg4ZTFhZjNhMiwgMHhmNzllMTM3YywgMHgxOGQ4Zjk1MywgMHg4YWY3ZWZlMiwgMHgyZWZhMmFkZiwKKwkweDFlNzRjOTkxLCAweDc5ZGU5Mzc1LCAweGUzYzRlNTBlLCAweDAxZDI0MDMzLCAweGY4MmMzYzdkLCAweDU1MmU1OGNjLAorCTB4MGY1MTViYjQsIDB4OTNkM2FkYzYsIDB4YWVmYzdhOWMsIDB4YmRlMGNlNWIsIDB4NmJhMDE2YTAsIDB4Zjc3MWU1ODQsCisJMHhjNTZlOWI0NywgMHhmMTQ4YjE3YywgMHg3MGZiOWIwZCwgMHhjYjUxZDIzOSwgMHgzN2JmNWY3NywgMHgzYTlmY2YxYiwKKwkweDViY2U3NDBkLCAweDc1YjFiNzNkLCAweDFlMmI2MWFjLCAweDk0Y2I4YTBiLCAweGZkZjA2OWNkLCAweDg0ZTYyYWExLAorCTB4NjMyM2IwOTksIDB4ZmM3MTIzNjMsIDB4MTVhMmQxMmQsIDB4ZDFmM2RkZjUsIDB4NzE4ZWZmZjUsIDB4OGMxOWU2OTQsCisJMHhlMTQyMTlmNiwgMHg0NmQyMzc1NywgMHg3NTZlMzY3MiwgMHg1YmY3ODBiNiwgMHg1ZjliMWUxZSwgMHgwNjMxNzI4OSwKKwkweGFmOTQ2NWZjLCAweGM1N2RjYTkwLCAweGYwMTVjNzE3LCAweGM1YjZjMGY4LCAweGJlMjNjNTJmLCAweGRiMGY1ODM3LAorCTB4YTIxNTllNjksIDB4NTJkOGE3MTMsIDB4OGI3ZmU1YzEsIDB4N2IzZWQxODUsIDB4Mzc1MmE4ZjMsIDB4NzJlYzRkMWUsCisJMHg4YjNjMGVjOSwgMHg0MWRlZTJkOCwgMHgyZDU5NWVmMywgMHg5Y2FjZDk3MiwgMHhjODU4MDE5NywgMHhiZTljMzk1MSwKKwkweGZkNGEzNjBjLCAweGIzMzQ2ZTk4LCAweDk3MjgzOWY4LCAweDdjZThjMjkyLCAweDgxZjY3ZjUwLCAweDU3Y2I4NGI0LAorCTB4ZTljYzZmNmMsIDB4MTE0M2RlYmYsIDB4NWNjOGYxOGQsIDB4OWZlNDY3Y2IsIDB4NmRmZDBiOWYsIDB4ZjI5OWIxOWQsCisJMHg1MzhkM2NhYSwgMHhkZmJiYmJlOCwgMHgxYmJhM2QxMCwgMHgzNjcyNGJmMCwgMHg5ZTJjZTQxYSwgMHg4NzhlNjNjNywKKwkweGY1NzViNzg5LCAweDNhMjBiNGMyLCAweDdjODA1NWQ1LCAweDJlZTdlMmNkLCAweGJlYmI3ZTMwLCAweDg3ZTMzNGE4LAorCTB4OWI5ZDRjZmMsIDB4NTUxOGU1Y2IsIDB4OTdlYmJiMWUsIDB4ZGEwNWRjNjEsIDB4NjM1ZjUxZmIsIDB4MGZjZTc4M2YsCisJMHhiN2Q3MTk1MiwgMHg0NDNmYTg1MSwgMHg4MzBjZjM3ZSwgMHhlODM5ZWYwMywgMHg0MzBlNDAyYSwgMHg1NjgyNWQ3YiwKKwkweGM5MTgxYzRmLCAweGMxZmIzNWYxLCAweGEwOWVjY2JiLCAweDcyOGM0ZDM4LCAweGJlYTM2NjFlLCAweGViMDY5Y2RlLAorCTB4NzQ0MzM4ZDksIDB4NmM3ODA3NmUsIDB4ZmExMDY4YTksIDB4NTVjNGM3OGEsIDB4MGQ5OTdlNzAsIDB4ZGU2ZmQxZjUsCisJMHgxYjEzOTE1MiwgMHg4YzY2OWViYywgMHgzNmQwYzA3MywgMHhkYjlmMGZkNywgMHhiZmM4ODVkMywgMHhiYzc5MjM1ZCwKKwkweDFjZGQ2N2JkLCAweDNmNDA3MWJlLCAweDQ3OWE4N2E4LCAweDZhZTZhZTk3LCAweDU1NzI0MWRhLCAweDZkNmRlNTY3LAorCTB4MDczYTdhYWUsIDB4Y2ZjMTU1ZDksIDB4ZjgxM2FkNWQsIDB4YzRhNDgyN2UsIDB4ZjI4YjliY2IsIDB4NGJmNGJmNDksCisJMHg0OTJiMTUyZiwgMHg1N2UyODQ5ZiwgMHhlNWZkM2Y5ZCwgMHg5OTExZTkwNywgMHg4NzE5ZjFmMSwgMHg0Y2NlYjQ5YiwKKwkweGRhMDdlMWZhLCAweDRhZjk3NDNiLCAweDFlMGJkNDdkLCAweDYyYmE3ZjZkLCAweGY4ZTMzNjUxLCAweGFmMTA1ZmE4LAorCTB4N2JjNWU2M2EsIDB4OTVmZGExOTMsIDB4M2ExNmZjMmEsIDB4ZTA2OWM5MWYsIDB4OGQ5ZGIxZWQsIDB4ZGJmNDhiZjgsCisJMHhjOGUwMDE2OSwgMHhhMWNlODJlOSwgMHgzYzM4ZjdiMywgMHg3YzNhMjRiNywgMHgyZTAxZjg2YiwgMHhhZTc0ODdkMiwKKwkweDc4ZjdhNTJiLCAweDY1OGUwOThmLCAweDdkZThlZmI4LCAweGU3ZjNhMjVkLCAweGNkNGY3YWExLCAweGIxMzA3MGFiLAorCTB4M2U5Y2U3MzYsIDB4MGY5YzRkZWMsIDB4YTc2OTM1ZWEsIDB4MDFmYTg5ZDcsIDB4ZWQ4YTk3ZDAsIDB4MDk0YjJhMzYsCisJMHg1Y2Q0YjNiYiwgMHhkN2FkZThlMCwgMHhhYjZkNWNiYSwgMHg5MzcyODJhZiwgMHgwM2Y2OTk4MywgMHg5OTUzNGMzYywKKwkweDc5YzAzMDdmLCAweDFjY2YzM2VkLCAweDNkZjU4YWJmLCAweGY4MDNhZTBlLCAweGU2YmNlMDk5LCAweGU2MzM0N2Y5LAorCTB4ZWRmMzdiNDAsIDB4YjliNDI2YWQsIDB4ZjVhMWNmNDMsIDB4NzZhNGVmNmUsIDB4NGNhYjRiNzEsIDB4MjNjNTE5ZDMsCisJMHg4NmI5NTQ2NSwgMHhhZmQ5MGIwOCwgMHhlNDg2NzRjYywgMHhjNmM5MzRiMywgMHgzZDEwYTdlZCwgMHg1MGY4MGViOSwKKwkweDY0NGFmMDhmLCAweDM4ZDBhZjA0LCAweDQ5ZjhlODcxLCAweGRlZmNjOTA1LCAweDFhNTJlMmU0LCAweGE3NDU0Mzc3LAorCTB4NWQ5MGUzMWUsIDB4NGVjNTdhYWUsIDB4ZWZhOWY0ZjIsIDB4N2JiMWZiNDIsIDB4ZmYyM2E3M2EsIDB4YzgxYTE1NzcsCisJMHhjMWY4N2UxZSwgMHhjZjExOTM0OSwgMHhjNTEyNjVkZSwgMHg3YmQxN2FkMSwgMHgyMzNkYmFjOCwgMHgxY2FlOWNmNSwKKwkweDdmMjhjZDhiLCAweGRiYjljY2I3LCAweGZlYzNlOGVjLCAweDhiMzE1MmQ4LCAweDk2NWEyZmNlLCAweGE1NjMzYjcwLAorCTB4ODhlNDgxYmQsIDB4ZTdiOTQyYTUsIDB4NzFjYmQ4YTIsIDB4YTIxM2JmYWEsIDB4Mzc1NGI3MjcsIDB4OWJkZWYxOTgsCisJMHg4NTkwZGU3YSwgMHhlZDk3ZGJkOCwgMHhiYmJkMWZiZiwgMHhmMThiZjk2MSwgMHgyYWVlNGZhOCwgMHg3OWM3ODg2OSwKKwkweDRmZjA4OTZmLCAweGQ1ZGYxMzc3LCAweGYyMDI5ZjkzLCAweGYxZTUxZTM4LCAweDkyMGU5MWEyLCAweDdmZjJkZDJmLAorCTB4MGUzYjM5YzYsIDB4NTU2OTE4MWUsIDB4NDNkYjhhZjgsIDB4NDE3ZmUyNWYsIDB4OTI4ZDY2YmYsIDB4MWM2MDE0YTcsCisJMHg4ZTQ0YjUyZCwgMHg3NGJjNjA3NiwgMHgwMGQzYmJkZiwgMHg3YWJkOTNhZSwgMHhmYjhkNjNmMiwgMHgyZmMxZjQ4MSwKKwkweDQ5MzgyNjMyLCAweDY4MWU5ZTVmLCAweGFjOWQyMmIwLCAweDhmNDZmYzZhLCAweGUyY2U2YmY3LCAweDdmZTg1NWU5LAorCTB4ODdiNzAyNTUsIDB4OTgxOGM1NTYsIDB4YTFmMzQyZGYsIDB4MmU3NTRmNDUsIDB4ZjVhN2E4NjYsIDB4MDEzN2RjMDksCisJMHg3OThmYzViZiwgMHhmZDEwMjMxNiwgMHhiYWYxOGU0YywgMHgyOTg3MDBhZCwgMHgzMGJiYmUzMSwgMHhkN2FjNGFhZCwKKwkweDEyOWM2MGQ5LCAweGYwODBiNDQ3LCAweGM1NjNhMjlkLCAweDlkYWYxZTA2LCAweDExNWNmMzg1LCAweDU5YzUxMWYzLAorCTB4ZDFjNWE3MjcsIDB4YzVhMzU0N2QsIDB4YzlmYmMzYWQsIDB4ZjZkNTY3N2EsIDB4OGJjZThjYjUsIDB4YjAxNWJjNTEsCisJMHg4Y2UxZjc0YSwgMHhiNmJkYzcxOCwgMHhlZWFiOGUyNywgMHhkY2YxYTkxMywgMHgwNDI5MDU3NSwgMHhmZmMxMjEyZiwKKwkweGNiMjNlMjJkLCAweDFlZjExMDFhLCAweDQwM2U5ODdlLCAweDQ2YWFmOGY2LCAweGNkNDFmOTEzLCAweDkxZGEzYjA5LAorCTB4ZjgyMzMyM2QsIDB4M2U3YWE0M2UsIDB4YjE2M2UwMTcsIDB4MGM1NjdjMDIsIDB4OTVkNjliYmMsIDB4MTdiYjE0OTQsCisJMHg5MWZhYTVlNywgMHg1MGFmMjBmMSwgMHhjYzI1NjVkZSwgMHg0YmViOGE5YiwgMHg0YWVkYzM3YSwgMHgwY2M2N2E4NiwKKwkweDE2NjAzNjVkLCAweGEyYjllYWUwLCAweGM2MWVhYzc4LCAweGQ4NTgzYzIxLCAweGFiZmI0YzM4LCAweDQwZDEyMmJmLAorCTB4ZjJkMGQ4ZjEsIDB4NWM3ODBiMjcsIDB4MjEwNTBiMzIsIDB4MTM1ZWViYWUsIDB4NzU1ZGNmZGQsIDB4YWFmN2JlZTAsCisJMHgzMDFlN2U1MCwgMHg2NzY3YzkzOSwgMHhmZmJjMTQ4MSwgMHg2Njc3MWRkZSwgMHhhZWRkZmY3YywgMHhkYmI1YmY5YywKKwkweGE2M2Y3NDBkLCAweGY4Y2NiZTNiLCAweGU3MWFiY2JlLCAweGQ5ZTUxYTg4LCAweDMxZjI3ODhjLCAweGM3ZjQyMWM3LAorCTB4OGY3MWFiZmUsIDB4NGZjYTQ2MWIsIDB4NmRhYzdmNjAsIDB4NjNjNTE1YzAsIDB4NjhlYWM2YzIsIDB4ODUyOTI3OWYsCisJMHgwNWY3ODI3OSwgMHg1ZmViMjk1NiwgMHg3YTg3MGRkNSwgMHg3NWY1ZWEzYiwgMHhmNjA3OTQyOCwgMHgzNzhkODcwZiwKKwkweDIyMjZiYmU3LCAweDg4ZWM0NmRkLCAweDQ3ZGFmZDQ3LCAweDE3MTM0M2JjLCAweDc5Mjg3YmMxLCAweGZhNjIwNGIxLAorCTB4OWM3OWFhOTMsIDB4M2NlYTY2MjQsIDB4NTM0ODc3OGEsIDB4MGFkOTNlZjksIDB4ZGNmYzYwMTYsIDB4N2M4NGMwYTAsCisJMHhmZDRiZWFiYSwgMHhlODg3NzAwZCwgMHg5MjdhY2NkNywgMHg5MGFlOTE5MywgMHg3ZjJmNDhiOCwgMHg2NTc2ZTY0NSwKKwkweGEyZGJkYzg4LCAweDAyZjFmOWYwLCAweGNmOTFlZTI1LCAweDkzZTdiZmYyLCAweDUyMjhiYjI1LCAweDE4ODlmN2Q5LAorCTB4ZTg3MjQyOTUsIDB4ZDkwYTU3MTEsIDB4NDExY2M0NDMsIDB4OWQ5Y2JlZjAsIDB4ODdiMTUwNzMsIDB4OGY5Y2E3N2UsCisJMHg4M2U3MmJmNywgMHg4M2U3MmIwZiwgMHgwYjc3YzU1ZiwgMHg4NjNmOTBjMCwgMHg3YTQwMTZlZiwgMHhlNTQ5YzliYywKKwkweDI4MTUzNDZmLCAweDZmZTM5OWNhLCAweDQ4OTJlZTQ1LCAweGY5OTQxZmIyLCAweGFkZjk5NGU5LCAweDI1NzM0ZWIwLAorCTB4NmQ1NjdlMDMsIDB4NTg3OWQzZDMsIDB4ZTk4NGMyNjMsIDB4YWYzMmNmNjgsIDB4ZGIxMTllZGMsIDB4NzU4N2VmNzMsCisJMHg5ZWZjYmZjMiwgMHgwOTVkYTc3MywgMHgzYTRmM2ExZSwgMHgzZmY3Y2FjNywgMHg1NDJkN2M1NSwgMHhiNjEyYWZlYSwKKwkweGM3NWY5MDE5LCAweDM2ZTE2YTc2LCAweGM2YTQ1MmZlLCAweGRhNjIyY2FlLCAweDRkMTM5N2YzLCAweDRiZjUzNDQzLAorCTB4OTdmM2RhYWMsIDB4NmFkN2VjOTMsIDB4Njg3NjRmYmUsIDB4OTc1ZTVmY2YsIDB4MWY2NDNlMzEsIDB4MGI1NzRiNTYsCisJMHg4MDZlODAxMywgMHg3ZDMzYWE0ZSwgMHhkNjg1ZmYzNCwgMHhjZDdiOGE1MiwgMHg3NGM3YjkwZCwgMHgzZjM2YWI0NywKKwkweDJmY2RhN2RmLCAweGFiY2RhZGRjLCAweDQ2YzNjOWU3LCAweDkyMzBmNDI5LCAweGYxMzFmYzhkLCAweDBjZjdlNDRlLAorCTB4MDEwN2VmODUsIDB4M2FiMzZmYmYsIDB4Y2ZkYTExOTksIDB4ZjhiZjc4MTYsIDB4MWIwMGM2MWUsIDB4NzZjOTRiZWQsCisJMHhlM2FjMjM4YywgMHg1Y2IwOWZmNywgMHhjM2JkY2JjNywgMHhiZTdhZjY5NSwgMHhkYjhlYzU2ZiwgMHg0YjFkYmVlOCwKKwkweDA2ZWRlMWNjLCAweGZjN2VlZmYwLCAweDcyZjFhNDhlLCAweGZlODdhZjBlLCAweGEyMWJkNjEyLCAweGU1YzM1M2Y0LAorCTB4ZmU0NTljOTMsIDB4MzNlYzliODIsIDB4NjJiMzZiMjMsIDB4YzJmZTAxNmEsIDB4ZTkzOTlhMzQsIDB4YWIwYzc1OWUsCisJMHg5MDc1YmYyNywgMHg1MTMyN2Y3MiwgMHg0M2JjYTRlOCwgMHgzZTYxODZiMCwgMHhmMGE2NzA0NSwgMHhlNDhmODVmOCwKKwkweGZlNDk1MGMzLCAweDg5ZjEyYTc1LCAweGY0NDc3NDViLCAweGI5MGQ5N2U2LCAweGFhZjAwN2JhLCAweDkxMDI4NmY4LAorCTB4NTYyM2UyZTQsIDB4ZDhmOWVmNDYsIDB4YmYxM2Y3NWMsIDB4YjAxNmMzNmUsIDB4OGY2YjMzNmUsIDB4Zjg3YTE1NDksCisJMHg2MWJjZWRlNywgMHg1YzEzNWZjNCwgMHhiNTJmZGEwZSwgMHg3ODBiMjQxNSwgMHg4NTg4YTUyZSwgMHg0NTM2Y2I5YywKKwkweGM0YTNlODY5LCAweDVmNDIxNzFhLCAweDRiZTg0MjQzLCAweDlkN2Y3ZjRiLCAweDM5NDVkNWVjLCAweGU4NDJjZTkwLAorCTB4ZTViZTJmZjAsIDB4YWYxODJjNTEsIDB4MDVmYThmNGMsIDB4NzY4OWQ1OGYsIDB4Y2E5ZTA1NGEsIDB4NzU0Zjk2MDIsCisJMHhlZTMxOWI0NiwgMHg3M2QxOGI2NywgMHgzZmQ4YTU3OSwgMHhhYjlmNGFhNSwgMHhiMmViNTllNCwgMHg1NjZiZmJlMSwKKwkweGY2ZTY0OWQxLCAweGYxM2QyZGJhLCAweDk2ZGYxODI1LCAweGVhMzVmNjAwLCAweDVjOTE5OTYzLCAweDFmZDNiMDdkLAorCTB4N2ZkNDM1NzYsIDB4NjVmZmZjMDQsIDB4ZWIxYmZkMGMsIDB4NjVlZmJjNjQsIDB4NWYxMGU0YjUsIDB4Nzk0OTYyM2YsCisJMHhkMDVlZjMwMCwgMHg0MzdmNThlOCwgMHhlNWFmZjczMSwgMHhlZjgyNmNlOCwgMHgwNWJlYTE1MSwgMHhjMjNkYTVlZiwKKwkweGMxYTk0Y2YyLCAweGZlYmMyZGY1LCAweDUxNjQ1OTdhLCAweDMxMTg5ZjkwLCAweDlkYmZlYTgyLCAweGNlZjg2NjY3LAorCTB4ZDlhMDc3ODEsIDB4NjNlYzcxODcsIDB4ZGQ3N2FjZjIsIDB4N2I3ZmViNDEsIDB4YWYwN2Q3MTQsIDB4YThmMTFjMTksCisJMHg3Yzk5MWUwZiwgMHhkMjg3YTY3NywgMHg2ODVmOGQ3NCwgMHhiZWU0MTA0YiwgMHg4Zjg1MTdjZSwgMHg5MmJkNzIzNiwKKwkweDc4YzdlMjViLCAweDM0YzI3NDdjLCAweGZkMDM5OTU3LCAweGU5MGJiNzFkLCAweGYxMTJlNzQyLCAweGZkMzc1YmU4LAorCTB4YTg3ZTJiNDQsIDB4MGZjMTA2ZTQsIDB4NWQ3NDliNGIsIDB4ZTNmZjQzMGUsIDB4MzU3NzBiMTEsIDB4ZDU5ZTI5MWUsCisJMHgwMmY5ODY1MiwgMHhkOTAzZWU5MSwgMHhkOWViZTI1YywgMHg3ZTAyYWViOCwgMHhlNTRhZjBmZSwgMHgxODFlYTg3MSwKKwkweGJmZGI5YTMyLCAweDNjNDQ4NjkzLCAweGRmZmExNDMwLCAweGIxNWEyNDUwLCAweDJiN2EwZGZmLCAweDRlZjFlN2RkLAorCTB4MTc1N2U0NjYsIDB4ZTA5N2VhYmIsIDB4MTEwOTZkYmMsIDB4ZGE2ZmNmMGMsIDB4YmU3ODFhMGEsIDB4MDBjY2MwZDgsCisJMHhiZDZiOTM0ZiwgMHg0YTY5ZjExNywgMHhmNmMwOGNmNSwgMHg3YTdlMDc0NywgMHg1YjE5ZWQxYywgMHg3MDNhNDg4MiwKKwkweGFlZjljYmEyLCAweDI4MTdlYjFiLCAweDc5ZTI5ZGYxLCAweDliM2M3MGViLCAweDU5OWFiNDQ1LCAweGI5NTQxYzBmLAorCTB4Y2JjOTllYmUsIDB4MGFiMmZmYzksIDB4MGFjY2RlZjQsIDB4Y2UwZDQzNmIsIDB4NzA4NDkxZTcsIDB4YWU2ZGYzYjIsCisJMHg3OWUyMGIwNiwgMHhkMTNkNDBjMywgMHg3ZjIyNDk0MSwgMHhjMjU1NmE1NywgMHhmZmNjMGFiNCwgMHg3MTkxYTA2MiwKKwkweDFmMmZmM2JlLCAweDUzODFmZThhLCAweDViMzU3NWEwLCAweGM3NWU2ODFhLCAweGMxMzk4OTJlLCAweGE5YTg5NmVmLAorCTB4Y2Y4NWExZDksIDB4ZjhmMTQ2ZWYsIDB4ZjFlMzA5OTAsIDB4ZjViNzlmODAsIDB4OGI5YTljY2MsIDB4NzhhN2EzZjQsCisJMHg2YjdjN2Y1MywgMHg3ZWNlNWQ3MywgMHgyYWZlNjFmYiwgMHgxMTBiMDM5NCwgMHhjMjk3ODViZSwgMHhmYTQwNGY5OCwKKwkweGZlNjEyOTNkLCAweDViMDE3Zjc3LCAweDYwZDlkNjgwLCAweDZlNDFmZWMxLCAweGJmYTJmYWJiLCAweDdlOWNkMTg4LAorCTB4NGIwZTBiOWIsIDB4ZDc4MjRlZjgsIDB4MzQxZjEwMjEsIDB4NDQ0ZTRlNWIsIDB4YjUyODc4M2UsIDB4YTFlOGU4OGMsCisJMHg4OTlhOGY4MiwgMHhmY2YzODYyZiwgMHhlZWY3NzlkYiwgMHgxMzdhM2M0MSwgMHhlNzdmNjljMywgMHgzMTU5ODJhMSwKKwkweDYwYmVmNGMxLCAweDMyZjQ0ODk0LCAweDRlNjE2ZmVlLCAweDk0NjNlMjNmLCAweDkxZmJmODgxLCAweDhjNTZjNzA4LAorCTB4Y2NmMzc5NGYsIDB4ODI0YmJmNjQsIDB4OTg2Y2Q5NzUsIDB4Mjg2MmM0ZTcsIDB4NWRhMmZlODcsIDB4N2VmMTNlNjIsCisJMHgwYjhmMDU3NSwgMHhkNTdlMzAyYiwgMHhmODg0M2I2NSwgMHgzMTY2NGE5MCwgMHgzOTQ5YWU3ZSwgMHhlZjkxMTRmNywKKwkweGI0MzU0MzVjLCAweDI1OTU2ZmZhLCAweGQ4Y2ZkZTk3LCAweDQyNzBkMDkyLCAweGJiMjBiNmQ5LCAweDU3MjI5MDZhLAorCTB4NDU4ODk0MDYsIDB4NTkwNmRmMjgsIDB4ZWI2NTVkYjgsIDB4YmI5NDA1OTQsIDB4YWE0N2ZiYTEsIDB4ZWQyOWQ3YmUsCisJMHhhNjViMzI4YywgMHgzNzFiNTRhMywgMHg3ZDcwMTVkMiwgMHhlOTdmNmExYiwgMHhjMzVlZGMyYywgMHhhZThmYmMzZiwKKwkweDg5M2YzNWNmLCAweDMxNzQzOGU3LCAweDE5N2Y3YWRhLCAweDBhNzM5Y2E1LCAweDNhNTRhZmIxLCAweDdhZTU2MGRmLAorCTB4ZDFhZTQzNjIsIDB4YTFiZDc0ODcsIDB4MmE1OWRiOTgsIDB4NDdmMmFiMWYsIDB4ODcyYWJmODUsIDB4ZWY3ZTdiZDQsCisJMHg1MTk1ZjYyOCwgMHg4NzM2NWU0ZSwgMHhlNTk5ZWFlNCwgMHhkNDA3NmY3OCwgMHhjMzE3NzM5ZSwgMHhmYTU2ODk3YiwKKwkweDFmNzJhZWZlLCAweDZmNjI5NGYxLCAweDViZDhhN2JkLCAweDViZDhhMWZmLCAweDA1YmRhM2VmLCAweDgzNTE4NmY5LAorCTB4MTQzN2JmMDgsIDB4MDhkZDc2MmUsIDB4MjA5MDFhZjMsIDB4M2ExNGRmMTEsIDB4ZWRjNDRjNGUsIDB4MjcxOTcxYWYsCisJMHg2MWQ5N2QyYywgMHgwZWEyZDExMSwgMHgzNDhmMDVlMywgMHgzNjQ5N2JmMiwgMHgxNTk4ZWQ5NywgMHg5NWNmNTlmMSwKKwkweDc2NmIyY2Y5LCAweGJjYmIzNDY5LCAweDdhZTNmMjdjLCAweGU0M2VkMWQyLCAweGI5NTU3YmViLCAweDk5NGM3OTRmLAorCTB4ZmU2NTcxZmYsIDB4NTdmMzI4NmYsIDB4NDM0OThmZWQsIDB4YmNhMTMyYmUsIDB4ZWZhZjEwZGYsIDB4ZmMyOTdlNDcsCisJMHhiOWQwYTcyOSwgMHhiNTc5NTBhOCwgMHhlOTA4YzQwMSwgMHhmYzkxMjJlYiwgMHhlNzc4MjA5ZiwgMHgyNWJkZTQ2YSwKKwkweDRlZjVmNzIwLCAweDFlNjhjOTU5LCAweDc2NjBkYmJmLCAweDdjNDYyYzU3LCAweGE3MTQ2NjRlLCAweDI3YWFlODlkLAorCTB4YjkwMzY1YjksIDB4ZjhiMzcyNDUsIDB4Y2E2Y2ViNWMsIDB4ZTU4MzM4NDcsIDB4NjM4MTUxOWUsIDB4OGU1YWNiYjEsCisJMHg0NjM4YmU3MiwgMHgyNDU3MWY0ZiwgMHg1YmJkZDBhNCwgMHgxZDBlZmVkNSwgMHgwY2YwNzJmNywgMHg4MmE2Njc5NSwKKwkweGYzZTI1ZWY1LCAweDZjNzI0N2ZmLCAweDhlZTNlMzJjLCAweGZkM2EyNGJkLCAweDRmMWNkZTVjLCAweDkxMjM3OTI2LAorCTB4NWZlZDBhN2MsIDB4NjM2ZjM3OTUsIDB4YmUyMDY0Y2MsIDB4ZmJhMTY0NGYsIDB4NjEwYTc3MDAsIDB4OWRlNzg0NGUsCisJMHgzZjMwN2MyOCwgMHhmZjdkZDE5NywgMHg2NzNkOGFjMSwgMHgwMWQxZGU1NywgMHhjZWI4YTE0ZSwgMHhmNWIwNGVkOCwKKwkweGZjN2FmODgzLCAweDFiZjc1MzI1LCAweDhmOGVkYzZjLCAweDlhMjdlNGQ2LCAweDRiZjUzNWUyLCAweGVmOWFjOWFjLAorCTB4MzVjM2VjOTMsIDB4YjIzYjI3ZGYsIDB4MzJlYmY5MzUsIDB4ZmZlYTY5NDYsIDB4YzlhNDU5YzIsIDB4NTkzMDUwZGYsCisJMHgyZTRjYmY1MywgMHg2NjY1ZTRkMywgMHgwZTQ4NzdhNSwgMHhmYTFlZWQzNiwgMHhhN2ZkMWViMSwgMHhhNzFmYTFiNiwKKwkweGExNGY4NmY1LCAweDBlMGJmMGYxLCAweGEzYjVlMTYwLCAweDAwZTg2NzhiLCAweDg3NTE4NTQ2LCAweGZjODY0Y2VmLAorCTB4Njc5M2QxYzYsIDB4MGFlZjgwZTgsIDB4M2FmZTFmMDcsIDB4ZDM2ODU4MTksIDB4N2YzYzI5ZTgsIDB4NTNhZmUxZjUsCisJMHhmNDY1YmYyMCwgMHg4NjNmM2M3NSwgMHgzYWRjZjA5MSwgMHgyZjBjZWE3YSwgMHhlYTFjNTllMCwgMHhkMDM0NzQ3OSwKKwkweGVhOTcyZGYxLCAweGY4M2RhMjhmLCAweGU2ZDM2NWM3LCAweDRlZjg0YjI2LCAweDA2NjI1OTQwLCAweDhhNmNlN2NjLAorCTB4N2VmYzYxZTcsIDB4MTVhY2VjNzMsIDB4ZmM3NjExNzgsIDB4OGY3NGY1NzcsIDB4NzlhMzM3ZWQsIDB4ZmM4YjhlYmIsCisJMHg4YjhlOGQ1ZCwgMHhiYjBkMWRmYywgMHg1M2Y2ZjFjOCwgMHhjYmJlZjU1MywgMHg3ZTlhMGUwNCwgMHg2NDExNWZkZiwKKwkweGZkMDVhZjdlLCAweGRjNjkzOWNkLCAweGZkMTRjNGRmLCAweGRmZDE0YzRkLCAweGNkZmQxNGM0LCAweDZmZWU3YTM5LAorCTB4MjZmZThhNjIsIDB4ODliZmEzOTYsIDB4MzI0ZDViZTksIDB4YjkzNGVmYTUsIDB4NzI2ZjZkMjgsIDB4YmY3ZGRhNTMsCisJMHg2YWU3MjllMCwgMHhlZjM4MGEzZCwgMHg5ODViOGI0ZiwgMHgxMTE3ZTRjMywgMHg0YWU3YTE0ZSwgMHg0ZjlkZjQzYSwKKwkweDQ1Y2E3ZWQwLCAweDEyZmJjMGU2LCAweDM5NGUyMjg3LCAweDM5YWNiZjcwLCAweDJlNzQ0NGNmLCAweDRjM2JiNjc0LAorCTB4OTczMGJkZjAsIDB4YjYyZjliZTcsIDB4NjE3ZTUwM2IsIDB4OGU5ZWVkMWUsIDB4OTQ2Y2I2ZTgsIDB4MTZiNWNkYmYsCisJMHgzNWJiZWUyNywgMHgyM2M3ZjQ1ZiwgMHgxYmQ2MTQ5ZiwgMHg3MTRjZGVlOCwgMHhlOWM1Mjc2NywgMHhiZGZjMmQwYSwKKwkweGM3MTE0Mzg0LCAweDkxZTMyODhlLCAweDkxNzlkYTVjLCAweDI3N2M0NWY5LCAweGIwZWVkY2M3LCAweDNmNjBlMzJhLAorCTB4ZWEzMjZlMzAsIDB4MzAyNWMyYjcsIDB4YmY1YmY1MmUsIDB4YjBhOWZhOTgsIDB4ODQyYjhmNzQsIDB4ZTFmYTZiOGMsCisJMHg0MTBhMjc3MSwgMHgzMTc2YTZlMywgMHhjNzAxMTc3YSwgMHhmNWM2Njg3NSwgMHhmYzNmNzQ0YiwgMHg3OGMyNWZhMiwKKwkweGQzYjQ0NzYxLCAweDM1NGQ3MThlLCAweDIxZGY4YzVmLCAweGRmY2Y0NWJmLCAweGY4NzQyYzVmLCAweGI4OTNkNDI1LAorCTB4NWJlZjg5YmQsIDB4MzNkODgxYzYsIDB4MWYwZDc5ZDMsIDB4NDdhODY1YzksIDB4NWQ5ZGI5NzEsIDB4OWExNzlkN2MsCisJMHg5ZjkwMGJmYywgMHg2MDc3OTU4YSwgMHg3YmE1OGNjMCwgMHg3MzBjNGM5YiwgMHg5MTI4YmVhMiwgMHgzODM2M2JiZSwKKwkweGUzMzlkZjE3LCAweDFiMTVhMGVmLCAweDFmOTBkYmRkLCAweGRlNWM3NGViLCAweGRmMzMxOGIwLCAweGNmYjVkMDU3LAorCTB4M2JkNDE1ZmYsIDB4ZWM5ODNiMTksIDB4NGJmYjA0OTUsIDB4YjQwNDc1MmMsIDB4NDRjYWU0NWYsIDB4NWIyNGUzYmIsCisJMHg3NTY4NzI0ZiwgMHg4ZjdmZTc5NCwgMHgzMWJlN2EwNiwgMHhmNDUwNWViMywgMHg3NzYzZjUyNywgMHhmZGMwZWY4NSwKKwkweDg2NTc4ZTg4LCAweDRkMWYyMWU1LCAweDY0NWUzYTMzLCAweDFmN2ZiZmMwLCAweDNjZmM0NGRkLCAweDg3OTFjYTJkLAorCTB4N2RmZGFjMmYsIDB4OGY5ZTBhZjQsIDB4Mzc4OGJjNzMsIDB4NjlhY2FkODMsIDB4OGZmYzcxNDYsIDB4ZjE0NTJmM2YsCisJMHhhNzlhNzQwZCwgMHg3ZmI0M2EwYSwgMHg3NjUzNzNkNCwgMHgwNjM2MTNkMSwgMHhmYWViNTRlMCwgMHhkN2U3YzBjYSwKKwkweDcwNzhjMDY5LCAweGMxMDcxOGQ0LCAweDQ2NjFlMDZmLCAweDI3M2E5OGU3LCAweGUwNzZmODQ3LCAweGZhODBkZjdlLAorCTB4YjI4NzhjNmMsIDB4ZDYxZTQ3NGMsIDB4ZDI3N2QyNGIsIDB4ZWY4ZWYyN2QsIDB4YTgyN2ZkZjgsIDB4NTA1Mzc5MTksCisJMHg4Mzg5ZmVmYywgMHhmOGFmYWI5MiwgMHhkYzMxYzllMywgMHg2YTk0NWQ0ZSwgMHhhODc4ODc1OSwgMHg5NDRjOWJiMywKKwkweGU3NDhiYzFlLCAweDlkY2U5OTgyLCAweGQ5NmJmMThhLCAweGE5N2JmN2QwLCAweGZhZTE4ZWFmLCAweDQxYTU3OTIxLAorCTB4NzQ0MTAyMzEsIDB4MzBlNTk0YzIsIDB4MGNiZGU2YTYsIDB4YmJmNmQwZjQsIDB4OGJkZmJhYzMsIDB4NDMzMjcwMDMsCisJMHhkZWYzYzg5YSwgMHhlYjE3OGYxZCwgMHhhYzY1ZjUzNCwgMHhlMzFkZmRkZiwgMHhiZGE3YWNmNCwgMHg4ZmNkZGJmYywKKwkweGM2NTU0ZjJmLCAweGM3OTk3YTQzLCAweGQ1MGM3ZmM4LCAweDZkMGI2YjNiLCAweDg0M2YzYmVhLCAweGNjNjNjN2U3LAorCTB4NTIzZGU5ZGIsIDB4MTQ4Nzc5NDksIDB4NGUzMTVhZWEsIDB4M2RlOGNlMTEsIDB4MzdiZmMxYWUsIDB4OWU4MTlhZmIsCisJMHgzZDM5OWE3NiwgMHhkZDNjOGFhNywgMHhlYWZhZjIyOSwgMHhiYmVhYTUzYiwgMHg3YTE0Y2Y2YiwgMHhhM2NjMmI2ZSwKKwkweDhmZDRmYzdlLCAweGRmMWIzN2I0LCAweDZkNjc4OGNiLCAweDZlZmFiZTM0LCAweDAxMmY1YTk0LCAweDJiMDkyMGY0LAorCTB4ZTIzYTY3NWQsIDB4ZmIxMjUwYWIsIDB4NjNlN2U3ODQsIDB4MWQyMGU2OGEsIDB4YjJmMjY4NWMsIDB4Y2RmNDgyNGYsCisJMHhjNmM4ZjA4NSwgMHg0OWQ1ZmM2MCwgMHgzZjVhZjdkYSwgMHhkYTgxMzMxZiwgMHgxYjZiZWRhOSwgMHgyODRmYjIyNywKKwkweDNhMjdlOTc4LCAweDY5MTU0ZGFhLCAweDYyNGViZDFmLCAweDljM2JlMmFmLCAweGE4MGQ1OTIwLCAweGE3NzZkNTk3LAorCTB4NzhlMmRlNDAsIDB4YzVmYzgyZWYsIDB4YmI5MDNkZjQsIDB4M2VkMWU4OWYsIDB4ZmJlOTRlOWQsIDB4M2YyYTFlNGQsCisJMHg2OTRkNTRkZCwgMHhjYTllYTlhMCwgMHhhNDZhNmEzZiwgMHgyM2RiOTZmNCwgMHgxNjdmOTE3MiwgMHgzZWM2NWZlZCwKKwkweGRhZjdhMjA5LCAweDEwMjdiZDM2LCAweGQ0NTUzZjk0LCAweDUxYWQxZDM3LCAweDcyNTRlOGU4LCAweDFjOWZkZmRmLAorCTB4NTNiYmVkYzMsIDB4M2IzZTM4ZTMsIDB4ZjdjMGRlYzAsIDB4OTcyZTgwZGEsIDB4ZGJmZDZkNWIsIDB4ZmRjYTFkMWQsCisJMHhmOWUzYTNhZSwgMHgzYzQ3NjVmZSwgMHhjMzFmMmZjZiwgMHg2NDU5NmVmZCwgMHhlOGZlZDhhZCwgMHgzZmVmMDM3OCwKKwkweGVmYzZhYzQ1LCAweDdiZjc4ZGIyLCAweDc3YTQ1ZDJhLCAweGIxMzU3ZWE0LCAweDU4MzFmZWU4LCAweDczY2ExNjNmLAorCTB4YWVhN2YyN2EsIDB4NDFlNWRmZTIsIDB4YWY5ZDVjYmMsIDB4NDJiNmZkZmEsIDB4NjFlZWZhYWIsIDB4OGZjZjdmM2EsCisJMHg3YTAyZjdkZiwgMHhmYWQ1ZmVhNywgMHgzZTcwMjY2MywgMHg0YmVmYWQwYywgMHg0M2M5ZTdlNSwgMHhjMmE5ZjFlMSwKKwkweDY4MTdjNGI3LCAweDI0MWYyMzY3LCAweDlkNDVmMTA3LCAweGE1NDJmODgzLCAweGQ2ZmU5NTQzLCAweGE3Mzg3MjE2LAorCTB4MGYzYTE1MWEsIDB4MDdlZWU3ZTcsIDB4NzY4NDJlYTMsIDB4YjRjY2UzODMsIDB4YmJlMzIwOGYsIDB4OWQ5ZWIwY2IsCisJMHhhMTJmYzI4MiwgMHg2M2JjYTBmYywgMHhjYTgzZjJhYywgMHgwZmJkMmEwNywgMHhlZmUzM2UwNiwgMHg4Yzc1ZjMzNCwKKwkweDVmNzlmYTk1LCAweDdiNDc1OTU4LCAweDg0NWRjNDZjLCAweDJiN2E4M2Q3LCAweDEyYjFhZGVhLCAweGIwNzkyZjdmLAorCTB4ZWRjZWY1ZDgsIDB4MTFiMTlmYzgsIDB4OTY5MThjMGUsIDB4ZjdkNGIyYWMsIDB4ZmUzZWM3MjUsIDB4OTU0M2MyYWYsCisJMHhhM2MwZmQwYiwgMHhjYTBjMWMxNywgMHgxMjNmYzNiYiwgMHg1MGU3MjQwZSwgMHhmNmZkMjM4ZSwgMHg4YzRlYjcyMSwKKwkweDE3NzYyOWIxLCAweGM3Y2ZkZmE3LCAweDFkMjI2ZmM4LCAweDFkNjYwODc1LCAweDMwZTg3YmRlLCAweGYwNWY3ZGY3LAorCTB4MGViZTc4ZTgsIDB4MTZkNjhlOTUsIDB4ZTMwNzRhMzIsIDB4OTZmNjg3M2EsIDB4YmE3YWVhN2IsIDB4MjMwNzc5ZDcsCisJMHhjNjFhOTdmOSwgMHhhY2YxNDNjYiwgMHhmZTQ4MmJhZSwgMHhhOTc5YzE5ZCwgMHhlYzBjNjRmMCwgMHhhMTI3ZTgxZiwKKwkweGU4ZWY0MmM2LCAweGUwZTg1NmRkLCAweGQzZjAzNmZjLCAweDY3YWMwZGNhLCAweDNlOGEzNWZkLCAweGY4OTQ0YzdiLAorCTB4N2U4YWM4N2IsIDB4YTQxNzJlZTksIDB4MWE5OTY1OTksIDB4Y2Y0NzQzYmQsIDB4ZWZlMTVmM2EsIDB4NTY0NWZiOGEsCisJMHhhMzcyZWY4ZCwgMHgxNzFjMWQ2ZiwgMHhlNWM4NTIxZiwgMHgzY2Y0ZDc0MywgMHgyZjEzZjcxMSwgMHhmNzQyZDVmYywKKwkweGVhMGMyZjhiLCAweGNlZjY4ZDNjLCAweDUzM2Q1Njg1LCAweDJhOWIyM2RlLCAweDhiOWRkZTgwLCAweGY5MGMxMzNlLAorCTB4ZjM5ZWYyYTUsIDB4MGVmN2U4ZTcsIDB4MTc2ZDdhODMsIDB4YjViZGEzNGYsIDB4NGNjNGFiNjgsIDB4ZWI2MDllNzgsCisJMHgzZDIwYjczNywgMHg0ZjQ1N2JjZCwgMHg1YjlhOTllNywgMHg3YTQ3MWUzNywgMHhjMDRmYjczYywgMHg4NWQ5NmZlNywKKwkweDMxYzUwMjdkLCAweDdjMjI1YjZiLCAweDBhNWZhODY2LCAweGM3N2ZhYzc5LCAweGUzYzdjOTZlLCAweDM5YzUzMjhiLAorCTB4M2VmMTk0NmEsIDB4YTBhNWQ3MzEsIDB4ZWI3MTNlNWQsIDB4ZmI4NDNhNWQsIDB4OGIwMmVkYmMsIDB4YjQ4ZjdlODMsCisJMHhkZjBjNzlkZSwgMHg4ZGI3MzkxZCwgMHgzNjZiMmZkZiwgMHhmOWMwZWU0NywgMHgwY2ViNGE5NywgMHhjMTdjYTA4MywKKwkweDYzNWU1ZTc2LCAweGY3MGNmZDI5LCAweGNkM2MxNzQzLCAweDYwYjNmZTI4LCAweDhmZjkwNDZmLCAweDFmZjQ1YWYzLAorCTB4OGVlYzgyMDUsIDB4ZmNkYTZkZWEsIDB4NDA2NmQ2N2MsIDB4NTNiMDU4M2EsIDB4MDdiMzVlNWIsIDB4NzlmMjQxZjIsCisJMHgyZjEyYTE1MCwgMHgyOWIyY2UxOSwgMHhlM2MyZDI1ZSwgMHhlZjdjYWEwNywgMHhiOTdiNWY2ZCwgMHhkZTUwNmQxYywKKwkweDg5N2Y2NmZmLCAweDVmMGZmN2E1LCAweDIzZTkyNmY5LCAweDI5OTdjZjBiLCAweGZmOTAzM2Y5LCAweDE3OGUxYmVhLAorCTB4Y2E3NTJlMTUsIDB4YjNjNTVmZDgsIDB4Njc1ODM2ZGMsIDB4MmI2NjJiZGQsIDB4MDc3NWVkZmEsIDB4NzllMjQ2Y2UsCisJMHgwMTYxNDViMCwgMHhiZDk5MTc3YSwgMHhkZWQxNTkyYywgMHhlNGJmNjA3YiwgMHgxZWQ2Zjg0NSwgMHhmYjg5M2YzNCwKKwkweDllMmY3NTk4LCAweGExM2M2MDMwLCAweGIyNjJkZjc0LCAweGVmMzEyNjU3LCAweGZkOWJmNDRhLCAweDg5ZGFjOGEyLAorCTB4N2RlOWRhOGUsIDB4Y2U3NzI2NWYsIDB4MWMyZTdlYzMsIDB4MGVkMTViMzAsIDB4NGZmOTdiYTgsIDB4ZmNjNzZlYzcsCisJMHhhN2RkMDI4YiwgMHgyMDE4OTBiYywgMHg1NWI3OTkzYSwgMHgwYzQzN2JhMiwgMHgxZWZjYjQyZCwgMHhhZjEwOTEzYSwKKwkweDI4YjZlNzg4LCAweDBlZTU4ZjdhLCAweDE5ZTIzYmM0LCAweDQ2NDhlZWYwLCAweGQwNzFlMTNhLCAweGY0NGI0Zjc5LAorCTB4ZDliNWI5YmQsIDB4ZjljZmY1ODAsIDB4YmM1NTdlMzgsIDB4MDk0YjRhOTcsIDB4ZTcxZTBiY2YsIDB4NzViODljZjgsCisJMHhhNDMwZTZkNywgMHg2NGY1YTc4MywgMHg3NjgxMWY4ZiwgMHgwZDNiNzg4MywgMHhlMTVlMTgxZCwgMHhjNWQ4NWZmZCwKKwkweGQzNzc5MWNmLCAweDM3NjMwMWMxLCAweDJmM2NlMDFkLCAweGE3YzAwNzQ3LCAweDQ3MmZmN2E0LCAweDk3ZTg5ZDA3LAorCTB4ZGRmZmJmOTIsIDB4MGVkMGM3YjksIDB4ODdlN2UwOGYsIDB4ZDUxYjc3ZDUsIDB4MmUwNzFhNzcsIDB4ZGYxNDc1M2MsCisJMHhiZmIzNGFlNywgMHhhNTc3NzY0MCwgMHhjNWRhOGJlZCwgMHg5ZDA5ZGU4YywgMHg0YmU3ODg1MywgMHgwMmJkYmYyNiwKKwkweGNhNzI3N2QxLCAweDJmMTRkOWIzLCAweDZkNzYwN2Q1LCAweDc0NDM3OGMxLCAweDNhYzdjNTM4LCAweGUxYjZjYjkyLAorCTB4YjZjNTk4ZmIsIDB4YzJmNjkzNmYsIDB4Y2VmZDE2M2EsIDB4ZWIxMWU3NDgsIDB4M2ZjNjdlMTUsIDB4YmVhMjA3M2MsCisJMHhhNzc4MGM0YiwgMHgwN2I1MTlmMywgMHhjNjVjZmM4ZCwgMHhlMWZiZWQzZSwgMHhjZTljZjExZCwgMHg5NTlkMGM0YiwKKwkweDgwNGZkMThiLCAweDQxMWM3MGZlLCAweGMyZTlmZWU2LCAweDQ1MWRmYzgzLCAweGE4NWM5ZmQ1LCAweDQ3YjhhN2JlLAorCTB4NjA4MzZlZmIsIDB4M2RlYTliN2QsIDB4NzA0Mjk4NTAsIDB4ZDYzNzFhMTgsIDB4NzM3OTc2ODEsIDB4MGQ4NGYzMzksCisJMHhjMTdkMjFmZCwgMHg1YzdjYTlkZiwgMHhiNWZhOGJmMSwgMHgxYmQxZmIyNywgMHhiY2M5MWRhYSwgMHgxNWRhZjcyMSwKKwkweDAxNDc3NWI5LCAweGJiZDFlMzlmLCAweDdiZTFkMGRmLCAweGY5M2IxZDhjLCAweDNmY2MzYmVmLCAweDA2MmFmMjA4LAorCTB4MWFmNTE5ZjcsIDB4ZDRhNzUzYjksIDB4MGZlOTE0ZmYsIDB4NWJkZTc2ZTAsIDB4MDUyODkyZmYsIDB4OGJmNzk3Y2IsCisJMHhhNzlhOWZiMSwgMHg0ODc1M2Y3OSwgMHhmNTU3MTQ1NywgMHhmZTgzMGU2ZiwgMHgzM2QzNmNiZSwgMHg0YzA1OTdlNCwKKwkweDIzZmIzNzkxLCAweDRiZDQ2ZTI4LCAweGJlZGNlY2JlLCAweDUwZjdjZDEyLCAweDc2MDg1YWJhLCAweDk0MjIyZTI2LAorCTB4NjlmNmVhYmUsIDB4YTg1ZDNkZWIsIDB4NjcwZTdiZWMsIDB4ZmZmOWUwZDcsIDB4OTBlMDMxYWYsIDB4YmE1ZjIzZDcsCisJMHg4ZTY3ZTlkZiwgMHg2ZWVmZTQyOCwgMHhlZjY4Mjg3ZCwgMHgwNTZiMGZlZiwgMHg3N2VhMGY5NiwgMHg2M2M0Y2ZiOCwKKwkweGVhZmU0YWE0LCAweGZlNGQ1NmRkLCAweGE2YmIzNjlhLCAweDFkZmJiNWZlLCAweGZlZDllZjlhLCAweDExZjdjZDBjLAorCTB4N2M5YTlkYzcsIDB4YTY4MTdiNWUsIDB4NjRmN2M4ZmUsIDB4YzA1NDdlNGQsIDB4ZTYzZmE5YTUsIDB4ZWY5MzViYmMsCisJMHhmNGY1ODRjYSwgMHhlOWE4Y2Y2MSwgMHhhOWEwYmIyNCwgMHhkNjYxZDkzZiwgMHg0NjVkN2ZmNCwgMHg2NWRmMjZiNCwKKwkweGQ4YTNlMDUxLCAweGZiZmRhYTk5LCAweGZmNmU0MmE3LCAweDdjMmFhNjg2LCAweDhlZDRlMTdmLCAweDM3ZWRmYWEzLAorCTB4MmJjNzY4MTQsIDB4NWRlM2I1OTMsIDB4MWRmMDVlMjksIDB4ZmY5ZTlkNDEsIDB4ZjhhNjAyN2UsIDB4MzRiYTA5ZmIsCisJMHg5ODA5ZmJmZSwgMHhjMDRmZGZjNywgMHgwMTNmN2YxNCwgMHhlNGRkN2ZjYiwgMHhhNmJlZmNhNCwgMHgwNGJmY2EwMiwKKwkweGY3ZTYwOTdlLCAweGU5ODI5ZjgzLCAweDYwOWZlMGNiLCAweDc3ZTBlNWY5LCAweGI4ZjcxOTRjLCAweGNhMWJlZTMyLAorCTB4NGUxNTNmYjgsIDB4YmRmZDI5NmYsIDB4ZWY4N2Y0YTMsIDB4M2RmNGVhMGQsIDB4Nzk1ZDZiZGYsIDB4ZTNlMDI1ZTIsCisJMHg3NDY3ZGIyMiwgMHgwODZlNTk1ZiwgMHhhMzFjNjI5NCwgMHhlMTg5NzVmMywgMHhmMWU2NjdmOSwgMHg0MThhNmYxZCwKKwkweGExODAzNmZkLCAweDlkZGNjNDlkLCAweDZlM2VlMjZmLCAweGFkNDM4YmRkLCAweDgxZWZhZTc4LCAweDA3Nzg3ZmZkLAorCTB4MjdkODVmYmYsIDB4ZjBlNmJjNTEsIDB4ZDg5MWIzZmUsIDB4YzI5Nzk3Y2YsIDB4ZTkwYTMwZTksIDB4N2NkN2M4NDUsCisJMHgwZDdlNTAyYiwgMHg2NzczYzc3YywgMHhjYTRhZjc5MywgMHhhNDZkNjdiYiwgMHg1NTRjYmVlZiwgMHgyZmJhM2VmMywKKwkweGQ3YjNkZWVkLCAweGI4NWE3ODgwLCAweDdmN2QyZjdiLCAweGYzNWFmODFkLCAweGNkNzZmNzdkLCAweDg3ZDYyYjc3LAorCTB4NDdjZWExNzQsIDB4ZjdjZjg1NzEsIDB4YTlmOWZkYWIsIDB4N2YyYTRkN2UsIDB4ZGRmM2ZlM2YsIDB4NDE4ZTU2NDcsCisJMHg2YWI3YmM3ZCwgMHgxN2I1YzYwMCwgMHgzYjExMzllZSwgMHhmMWYwMDdmYiwgMHg2NmNmNGJkNSwgMHgzZGE4MWVhMiwKKwkweGQxZTcyOTIwLCAweDA3YjU3Zjc4LCAweGNmOWU0YWY0LCAweDZmNzUyNmJmLCAweDYzMzc5ZTI5LCAweGIzYmEwNDdiLAorCTB4NGY1YjI1ZjQsIDB4ZWUxNmM0ZTcsIDB4NzI4MzU1ZGYsIDB4ZWRjNjYxNzYsIDB4YjU3ZjhhN2EsIDB4ODNiYzRhNDksCisJMHg2MzUwZDNiZiwgMHg2YmFlZGM2NSwgMHhkZjEyM2FmYiwgMHhkYjdkZmZhOSwgMHgxZWYxZWJkMSwgMHgyM2MxYzc3NCwKKwkweGM3NGM1ZWY0LCAweDRmZTM0OTNlLCAweGYxY2IxZDhkLCAweGY3MmM3NjNiLCAweDc3ZGNiZWZmLCAweDA5Y2YxMjI0LAorCTB4ODQ3NmQwM2UsIDB4YTdlNzVkYzMsIDB4ZjI1NjFmZjUsIDB4YmMxMjkwMWQsIDB4ZmViNDRiZjcsIDB4Y2QyNDk3ZjksCisJMHhjMGI4MDFlZiwgMHhjZGZiYTE3MSwgMHg3MDIyZDNmYiwgMHhmOGRiMjc1ZCwgMHg3ZDQwZDM3OCwgMHhkNTZhNzk1MCwKKwkweDFiZmY5YzFjLCAweGU1M2NmMmY2LCAweGRkZmEzMjdkLCAweGFlYWI4ZWExLCAweDc2NzI4NWRiLCAweGU3ZDQ5YjYxLAorCTB4ZDgzOWY3NzksIDB4OThlZmNjMmYsIDB4ZWJlOWQzOWUsIDB4MWIxYzJmYTksIDB4YzM3ZjcwMDQsIDB4NzQ5YjIwMzUsCisJMHg2MmFmNTI4NCwgMHhhNTliZDcyYywgMHhlYTJhNGYwNiwgMHg0NzE2OTM5MSwgMHhmZGY5ZDIwNCwgMHg4ODExYTFhZSwKKwkweDYyOThjM2RmLCAweGJhNDllYmI5LCAweDFmNjBiZTA3LCAweGI1YTRlZjFmLCAweGVlZTkxMjNkLCAweDUyMTFiZWU0LAorCTB4MmRjYmZlZjAsIDB4ZTliYTdhY2EsIDB4NWU2ZjFiYmIsIDB4NmZiNTUzYzIsIDB4ZTlmYjA1YmIsIDB4OWYyZjFmYzEsCisJMHhmNTRhZDYzNiwgMHhiODlkZjBkZiwgMHg5M2FjZWQwNSwgMHhjMGRkZmMxOSwgMHhmZTQ2MDY2MywgMHhkYzNkYzJmNSwKKwkweDcwNzkzZTRlLCAweGZiZTBmNmYwLCAweDdjMTRkMzU5LCAweDdkZjA2NDc0LCAweGY1ZmIwYmY1LCAweDc3ZGJiZDRhLAorCTB4M2QzZDRkMzEsIDB4ZWQ0ZWQ3YzcsIDB4MzNiZWFjN2MsIDB4NWU3ZGExMGYsIDB4Njc0NGI4ZjMsIDB4ZjVmNDZhMWQsCisJMHg0ZmZlYjhiMSwgMHg1N2U3NjliNywgMHg0NmI5YzBhZCwgMHgwZDhkOGZlZiwgMHgwMzlhZDdhMiwgMHgyMTYzN2NkZCwKKwkweGYyYTAzZjNhLCAweGE5ZjA4Mzg5LCAweDg2NjRmMWUyLCAweGU3NjVlN2M0LCAweGVjZDVmOGVmLCAweGRkNzQ0NWRkLAorCTB4ZTNjNGJlM2IsIDB4MzFlZjgzYjcsIDB4NzRiZTI5MzksIDB4YjU1YTdmMTksIDB4MmRmYzgyMWIsIDB4YmQyM2JkZmEsCisJMHg5ODllNjg2YiwgMHg5YzFmNjNkMiwgMHgxYTFmOTQyZSwgMHg5ODdlODc5YiwgMHg5M2NjZmM5YiwgMHgxODViZWMwYywKKwkweGViZWQxNmIzLCAweDg5MWRmYTI4LCAweGQ3NmUzOGNkLCAweGZmYmQzZDNlLCAweGIwM2E2YjVmLCAweGVmMjNkZjAwLAorCTB4YzBhMzAyNzIsIDB4ZTliNmJiYmMsIDB4NDY2N2RmYmIsIDB4NjI5ZTc3M2IsIDB4ZjBlYTdlZTcsIDB4N2ZhMDRiZTQsCisJMHhiNDg5OTc2YiwgMHg5MjNkOWFiZSwgMHg1YzE3Y2YwZiwgMHg1N2RlZTQ1MCwgMHg0MDZmOTM3YiwgMHgyZTM5YWQ3YSwKKwkweDlhM2ZkMTU5LCAweDcwZmM5NmQ4LCAweDc3ZTkyZTYxLCAweGRhZWI1N2IyLCAweGI3NWM5ZGI4LCAweDU4YmIyMDViLAorCTB4MTU2YTQzYjUsIDB4NjI5Y2U0M2IsIDB4ZDY1YjlmMDcsIDB4NTdlM2VkYzksIDB4ZWExMWI2MDQsIDB4N2IwMzBkYWQsCisJMHg5YjVkZTYwNCwgMHhkYWVjODUzOSwgMHhjYWRkNjk1YSwgMHg0NzNjMGVjMSwgMHhlNjFiYjVhNSwgMHhlNzQ0M2MxZiwKKwkweGQxY2VjMGFlLCAweGFkZGMyZjk0LCAweDY5YjZkN2NkLCAweGY4YmZhYWYzLCAweDNiNmVkOGQyLCAweDM3ZmEzODYzLAorCTB4MWM2MTUyMjUsIDB4MGE5YmMzZjIsIDB4ZTc3ZjU1NWUsIDB4ZjQ5YzZiY2UsIDB4ZTgwZjI3ZmIsIDB4YjhkNDUzMWMsCisJMHhkMTZiYzIwNCwgMHhjN2NjMmYyYiwgMHhjMjZhZmI3OSwgMHgzNDdmZTQ5YywgMHhkYWUwOTZmZSwgMHhkN2VlMTdmMSwKKwkweDFiZGVlMDc0LCAweGYwZTMzM2YyLCAweGU5Y2ZkOGVkLCAweGYwNWU5MTdjLCAweDJjYmFlZmUxLCAweGZkODE1ZDQyLAorCTB4MzJkZjA0OTksIDB4YmI3YjNiOGMsIDB4MjkzZTQ5MjIsIDB4Y2ExYTA4ZTcsIDB4NjMyYWZmYjksIDB4YjJhNjE4MGMsCisJMHhlN2Y3MmM3ZSwgMHgzOGVhZjU0MywgMHgwZThhNDA1ZCwgMHhiMTgxMTM5MiwgMHhkOGFmNTQyOSwgMHhkZTU3Y2ZjMCwKKwkweGZkMjRlMTE5LCAweGVkYzRjNDM2LCAweDZlMjYyMWY1LCAweDc1ZDEwZmFmLCAweDg1ZGZhMzJlLCAweDdkZjAyNDE4LAorCTB4Njk5N2FjOGUsIDB4OWQ2ZDYwZmYsIDB4MDQxN2Y2ODUsIDB4ZTEwZTk1N2IsIDB4OTU1MDc2YjEsIDB4ODg3ZGU5MGUsCisJMHhmZDAzMmRiNSwgMHg4YzVmMzUzYSwgMHhlYzdiMzNkZiwgMHg0NzhiNTI4MywgMHg4Y2VjZTM4NywgMHgwNDdkOTQxNywKKwkweDc0Y2I0ZmFlLCAweDkwNzQ3ZDU2LCAweDk5NmM2NTdlLCAweDNkZWE3ZTY2LCAweDdlN2Q5ZmNjLCAweGE1OWY5ODU2LAorCTB4ZWY4MDdlNjcsIDB4NzVmZjZjMjgsIDB4ODZlYzkzYWUsIDB4ZjdmNTMyYTQsIDB4MmU0OWVhMWEsIDB4MTJmY2YwYTgsCisJMHg3MDE4YmRlOCwgMHg4MTZjNzc0NSwgMHgxZGI2NmE2ZSwgMHg5NmIyZmYyMiwgMHg3NmM0YWZiNSwgMHgxZDdjOTFhNSwKKwkweGJlZmUwNmE1LCAweDRmMTg2OTUxLCAweGZjYjhlMzc1LCAweGE1ZDI1MTJhLCAweGMzZjZiNGUzLCAweDdlYjI3MTkxLAorCTB4YzYzYmE0MWMsIDB4ZjJlMzRkYjksIDB4Nzk5NTNmNjgsIDB4NmYwZDdkNjEsIDB4NDNkNjc3ZjMsIDB4MTM5NDNlZTUsCisJMHg3YzBkN2QzZCwgMHg0NjZmZjI4OCwgMHhkNTRkNjBiZCwgMHhiZjljNjlkOCwgMHg2ZWEyZjExNiwgMHhmNmY4NWEzZSwKKwkweGVhMjdjNDkzLCAweGM2NmFjYzM5LCAweGEzNjY3YmY5LCAweGM0MWE5YWQ5LCAweGRmOTA4YjE3LCAweGMzNzdkZWQwLAorCTB4MTM4YzdjYmYsIDB4ZWI2YWJmZjAsIDB4ZTk5NzNhN2MsIDB4YTJiNThjNjksIDB4ZmE0OGI3NWYsIDB4N2UyNWY2OTIsCisJMHhkYTJkZGYyYywgMHhjZGZiY2RhZiwgMHgxMWZkZmU5YywgMHgxOTQ5ZjkwMiwgMHgwZGUzYmFlMywgMHgwYTQ5OGZjNCwKKwkweDA4Zjc2YzdmLCAweGZiNjAwZTc0LCAweGNmMWUzYTc3LCAweDdlMjgxMGFiLCAweDM2MTQzMzc3LCAweDYyNDk5NGRhLAorCTB4YmEyMmVhYmQsIDB4ZTMzMzcyNGYsIDB4NGI1OTYzNDcsIDB4M2RiYmYyOGMsIDB4Nzk2ZmI0MzEsIDB4OWJlZWIyOTMsCisJMHgyODQzZmU3NSwgMHhkYmVhOGU1NywgMHg3NDllMzE5MiwgMHhjNGU0ZDZiNCwgMHgxYjU5Y2JmZSwgMHhjMTVhNmZiZCwKKwkweDE1M2QyOWRhLCAweDlmYTJmNzVlLCAweDIyMjZmNzNhLCAweDYzYzlmZGRkLCAweGY2ZDY3OGE0LCAweDUwMjIzYmU1LAorCTB4ZTViMTY3YmUsIDB4MDQ0ZmRjNTYsIDB4YjdjNmVjNTAsIDB4NzNiM2ZiMDEsIDB4ZDUxZGY3NDIsIDB4MmY2MGM0ZmIsCisJMHgwMjdkMjFjNywgMHgxZDIxMjdmZSwgMHhkOGRjMDc5YywgMHg1ZmI3N2E3MywgMHgyMzE3YzdmOCwgMHgyYzVmN2YxMSwKKwkweDViOTZlMTc5LCAweDlkNWZmYTE5LCAweGE4MmQ0N2U0LCAweDVkZjc0NjVmLCAweDMzZGE5YzgxLCAweGFhZjA3YmYyLAorCTB4NWJjNTVkZTIsIDB4ZjAxZDVlMzcsIDB4YjBhZjE4MmYsIDB4OTM4NDA0YTYsIDB4YzkxOTY1ZjQsIDB4ZTg5MTdmYTUsCisJMHhmMGU1ZDY5YywgMHhiYzdkYzJhYSwgMHgwZTNiOWY4MiwgMHg4YTE1Zjk3MCwgMHhiNzBmMTU2ZiwgMHg0M2Y1YmJlMiwKKwkweDIzNmVlZjQ5LCAweGM5MjMzMTNjLCAweGI4N2E1MGNiLCAweDMwODBiZTFjLCAweGM0ZDkzY2U5LCAweGExZjkyMzE4LAorCTB4NGYyZTQ1ODMsIDB4MjgxM2NmMDcsIDB4ZjMzYjc5NWUsIDB4ZjQ4MDEyYmMsIDB4ZjVmN2YwOTYsIDB4YzcwYWRlZmMsCisJMHhiNzgyODU1YiwgMHgyZmRmMzEzZiwgMHg3MWZmOTIzMiwgMHhjZTMyM2I3OCwgMHg2MDZlMzRkZCwgMHhlNTBkYmU2ZiwKKwkweGIyZjhmZWQzLCAweDM3ZmNlMWM2LCAweDE4ZmE1ZjU1LCAweDNmMDg2M2YyLCAweDM3NmJmMDg3LCAweDJmZjA5ZDFlLAorCTB4YzY5ZThmMDgsIDB4NmVjYmUyNDgsIDB4YWU3YjRiN2MsIDB4N2ZlMjJmNGMsIDB4NWZiNThlMzAsIDB4YWY5M2Y5ZjAsCisJMHg0NjA1NWY4MCwgMHhmOGY4YmZiZiwgMHg1NGRlYWQzOCwgMHhhNWMyYTZmMSwgMHgwN2UwYjhiZiwgMHgyYWQ0N2ZjYywKKwkweGU3MGFiZWQwLCAweDc0OGRiYmUzLCAweDU3ZGQ0M2ZmLCAweDVlNGZmNzUxLCAweDVjZjVjNzE5LCAweGQ4MDFmYTY4LAorCTB4YjU1ZmI4NGIsIDB4NDBlNGUzMjYsIDB4MTk0ZjMzYjQsIDB4ZmVmODdlZDQsIDB4ZGFjYjA3ZWYsIDB4YjZmN2YxMTMsCisJMHhlOWUyMjgzZSwgMHhkZGZmMDMyOSwgMHg4NzJmMzUwZiwgMHgwN2U0YjhmMSwgMHhjMjJmNDZmMSwgMHhmODYxMDNlOSwKKwkweDFmMzNkNDA0LCAweGNmNWNmNzA4LCAweDA3MDY3MWYzLCAweDI2ZTNjYmU2LCAweDUzOTAzZGUwLCAweDc5OGUzNTdhLAorCTB4ZjA3ZjEyYmYsIDB4OGY5NDc5ZjEsIDB4MDI3YWE2MmMsIDB4MDc0YTVkZmYsIDB4ZjYxZGRlZmUsIDB4MTczNjA4MmIsCisJMHhiYjgzZTdjYywgMHg5ZDdkZThkMiwgMHg3MThkN2RlZSwgMHg0NjdmMGVkYywgMHhkYzc3NDc1OSwgMHhlMjgxNWVmZiwKKwkweDM1NTEzM2ZlLCAweDg0YzRmZWUxLCAweDg3N2MyZTJkLCAweDQzN2RmNGYzLCAweGI0ZGY2OWIzLCAweGVhM2UzYjQxLAorCTB4OTc4YTY0ZmQsIDB4ZmVlN2UwNmUsIDB4YWJlYTc1MmUsIDB4Yjc1YmY0ODIsIDB4YzhiZTJkYmUsIDB4ZDFlNGU3Y2IsCisJMHhiZmE4OGNlZiwgMHg4NmRiMjc0NywgMHhjN2RjZmY3MywgMHhkNTUwZGY3ZiwgMHg1ZmM3NWQ2NywgMHg3M2M3MDRiMCwKKwkweGRmZTI1MzNmLCAweDBmZTFmOWRkLCAweGMzZWIwNTI2LCAweDRkYWQ0ZjQzLCAweDBkYWE3ZWM3LCAweDA1YTcyY2RlLAorCTB4YjFlZTg3N2YsIDB4YWE1YmI0MjQsIDB4NGU5NTVhOWYsIDB4MGY1M2Y0ZjYsIDB4NTQ1ZmEzYTQsIDB4YmE2ZDYzYmQsCisJMHgwZjcwZjk0YywgMHhiZTNhNjVmOSwgMHgxYjllMmZlZSwgMHhkNGYzZTc0NSwgMHhkY2NhZjZmZSwgMHgxZDMwYThhZiwKKwkweDNkYmQ0MTJhLCAweDU2YWZlYWU1LCAweGRhNDFmZWUwLCAweGZmYzUwMjdkLCAweDE1ZjZiMDY2LCAweDMzMmI2N2E4LAorCTB4MTZiMTVmMzgsIDB4ZTg3ZmM5MTMsIDB4Nzc2YmY2OGYsIDB4NGVjNWZmMGQsIDB4NjQ2ZjA3OTQsIDB4ODFjZmQ1OWMsCisJMHgyMDNlMTI3YSwgMHhkNWRmMTAzNSwgMHhkZmEzYWRmMiwgMHg3ZmNkNWMwOSwgMHg3ZWE3YjAyNywgMHg1NmZmZWQyMiwKKwkweDlkZTgxNzJkLCAweGZjZjUxOWFiLCAweGYxYTRmMzc3LCAweDU5YzcwNGQxLCAweGQxOGZiM2FiLCAweDc5NGI1N2ZiLAorCTB4NmZhMzE0ZjksIDB4NjdlYzQ5ZGYsIDB4M2ZkZjgxOGIsIDB4ZTA5NGVlNjQsIDB4YjI5MjcwZmIsIDB4OWQ3MzM4NWYsCisJMHhjYTcxN2JmMiwgMHg2MzliNjkzOCwgMHg1M2FmMDdiNywgMHg1OTFkZjY1MiwgMHhkZjI0NzdlYSwgMHgzMmYwNTA2ZSwKKwkweDU3ODllOTc1LCAweDU0ZWZkMGVkLCAweDFlM2NjN2JkLCAweGU5YjNiZmJlLCAweDYxOWZhYTVjLCAweDNhMzNmNDFjLAorCTB4ZjA2Njk4NWYsIDB4ZDcxZjNhM2MsIDB4NzE0OGMzYmQsIDB4YzFhY2RjZDIsIDB4Y2ZkNDFjNTIsIDB4MTFiNDUyNTksCisJMHhhYjRiOTlkMywgMHg3MjhmOWQxZSwgMHhjZDk0ZDViOCwgMHhmOWYyMzU4ZiwgMHgxMTRlMDgzNSwgMHhlZDkxZjRlNSwKKwkweGI4NDJjZWI3LCAweDdmYzRkZjlkLCAweGZiNjFhYmZmLCAweGMyZGRmYTMwLCAweGFmZGVlNGZlLCAweGY5ZWZmODlhLAorCTB4YTI2NGRkM2QsIDB4MmIyNmQ5ZjQsIDB4Y2ZlYmEzYzMsIDB4ZmYyOWQ5MzUsIDB4NGEwZTRkYWYsIDB4Y2QzY2Y0ZDksCisJMHhkN2Y0ZDhlZiwgMHhlMTRiODhkZiwgMHhiOTczYmJmNCwgMHgzYmY0Y2RhYiwgMHgzOTQ2MGQ4OCwgMHgyYmMwM2M3NSwKKwkweDFkZGFhYWVkLCAweGMyZWIyODBmLCAweGJkYjJiOGY3LCAweDBlMTExM2M5LCAweDNlMmMwZmI5LCAweDc1YjNhNjg2LAorCTB4N2Q5N2RmM2MsIDB4MjRlYWU0ZjMsIDB4MmM3N2Q2MTQsIDB4N2NjNGYzM2QsIDB4NzhmYjdlZjgsIDB4MjcwODM1ZjcsCisJMHgxNDhiYjZkMywgMHg2MDcyMzhhNywgMHhiYmMyMjU1NSwgMHhhZjkxODc3YSwgMHhmOWY3NTk0ZiwgMHg4ZjcxZTk0ZCwKKwkweDc1Zjk3YzYyLCAweDE2MGRjNTNkLCAweGM0ZjMzYjZkLCAweDg3N2YwYzAzLCAweDk4MjFiMTc3LCAweGJkNzRhZmRlLAorCTB4N2VlNzhmNTcsIDB4YWFmOGU1ZTYsIDB4NzhmYzM4M2YsIDB4NDQ5YjVhYmUsIDB4ZjgwM2IzZmMsIDB4ZjNhN2YzMmEsCisJMHhjYmE1YTJkNSwgMHhjNmNiN2UwOCwgMHhiODQyNmZiYiwgMHg5MzdiZDc5ZCwgMHgwZmNlOWY5MCwgMHhlZTc0NGIxZiwKKwkweGY4MjA0NTdkLCAweGRiYmM3MmFiLCAweGJmZTA1NmFmLCAweDU3NWI2YzUwLCAweGM3MjNkYzk4LCAweDA0Yjk2MWJmLAorCTB4M2UwNzQzZGYsIDB4ZjlmYjQ3NGQsIDB4M2ZlNWZkOWIsIDB4NjA5N2VlYjgsIDB4MTg2MWZlZGQsIDB4MWE1MTMzYWYsCisJMHhlMGRmM2RmYSwgMHhmNTg0ZWExOSwgMHgzZWYzZjdlNSwgMHg2YWYxZDJlOCwgMHg1MzlmOWZmYywgMHgzNjIxM2ZjMCwKKwkweGU2MjE5ZGY4LCAweGQ0Zjk4MjhkLCAweDYxZmMxNDFjLCAweDI2Y2ZhODU5LCAweGJmNDNhNjdkLCAweDhmY2ZmYzExLAorCTB4MTk4Y2U3MzQsIDB4OWY0ODI4ZmIsIDB4Y2JkZjM3ZjcsIDB4NGZkODc1YTUsIDB4MWRkYzhmNWEsIDB4ZmNjODllZjksCisJMHg1NDdiN2E0MSwgMHg4M2Y5OGMyMCwgMHg3M2Y2ZWRjNiwgMHhmYjQwY2NhMCwgMHgxNzI0ZjE0ZSwgMHgyZTc4NmYxMCwKKwkweGUxODFjMmVjLCAweDk5ZmYzMDNiLCAweGMyZjFlMzgxLCAweGYxNGY2MDRiLCAweGYyOTMxMDc4LCAweGQ5ZjlkNjdiLAorCTB4NTBiMjJmODEsIDB4YjdhZTg2Y2UsIDB4ODgyZmU1ZWUsIDB4YWZmNjZhM2UsIDB4ZmFkMDI4YmEsIDB4Y2JhNjdmMjcsCisJMHgwZmZhZmNiYSwgMHgxNjQ1ZjUzZCwgMHg3ZDMzZWZlMiwgMHhiNmZkMWYyMCwgMHgxNjQwODYwYiwgMHhiN2VlYTFlMiwKKwkweDU4ZmY5ZTVjLCAweGYzZTVhODM4LCAweGY3ZTgxYjU3LCAweDEzMDRlYjNhLCAweGY0ODk0OWQxLCAweDJlMWZjNTI1LAorCTB4ODdmMWU3MWMsIDB4OTI0ZjAzYmEsIDB4YzgzYWVkM2MsIDB4YzQ4YjQwZTMsIDB4OGMzOGQyZjYsIDB4Mzk5ZmQ0OWIsCisJMHhjYmFjZjI4NiwgMHhlODMxZmRjZSwgMHgyYjcxZGU5ZiwgMHg0MWU4YWExYywgMHhkZTEyNjc1ZCwgMHg0ZGQ4M2JmNywKKwkweDNjOGZkYzBmLCAweDBjM2JmYzhmLCAweGYzYTM2OWZiLCAweDljMmIyY2JkLCAweDM5ZjE1ZGExLCAweDdjMzBmM2YyLAorCTB4MjU3OTMwYmYsIDB4ZGY3OWY5ZDIsIDB4OGY5NDFjYzAsIDB4YWRmZDY2NmYsIDB4YmY4NmUyOGUsIDB4YjI3YmE3MGYsCisJMHhlNjkyNmRiNSwgMHgzYWY3Nzk5YywgMHg3MDNmMTI3YywgMHgyOWZiNTRjNCwgMHhlN2MxYzk5YywgMHgxYjhlMGNiOSwKKwkweDgzN2U2ZWM4LCAweGJhMmUxM2VmLCAweDdiMTNmMzhhLCAweGVkNTNmMzk5LCAweDdiMDY0M2YyLCAweDE1YmI3ZjUwLAorCTB4YzhlZDUyN2UsIDB4MWJmZmJmMjksIDB4ODViM2U1ZjEsIDB4ZDUwNGZkMzIsIDB4ZmZjN2E1NGYsIDB4NGNmN2ZlOWYsCisJMHgzMzQxMmZmZiwgMHg4MDAwNjNlYywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YWE1ZmYwMCwKKwkweDU1NTQ3MDBkLCAweGJkZWYzZTk2LCAweGRkMjc0OWZlLCAweDEyNDIxMzQ5LCAweDQyMDY4NDA4LCAweDAzNjIxYTg4LAorCTB4YzRkNjcyODEsIDB4MjA2ZWZjZTksIDB4NmIwMWJiMzMsIDB4OGQwOGM0MmQsIDB4NzQ5ZDI0MjIsIDB4NmFlY2U4ODIsCisJMHgwMjFhNmViOSwgMHgzNjc1NjRhYywgMHgxZDQ3NTk4YywgMHg4MDlmOWI0NywgMHg5NDc2ZWMyOCwgMHgwZGEwYzA0MCwKKwkweDZiYTJjYjBhLCAweDNhMjZhYTQ1LCAweGFiNTQ1YjU1LCAweGE2ZTAwZWFjLCAweGQ2M2I4MjIzLCAweDNiZTdiOGUyLAorCTB4MWRkZGI1ZWYsIDB4YTZlZDRmZTIsIDB4ZWU3ZGJhOGEsIDB4OWVlN2I5Y2YsIDB4Y2U3N2NlN2IsIDB4NTJiNDhmM2QsCisJMHg2YTIyY2EyMiwgMHgyYTA4Y2RjZiwgMHg2ZWE2ZmYwYSwgMHg2ZDQ0NDVhMiwgMHhmNjdmMjQyOSwgMHhhZjFmNDU0MSwKKwkweDdkYmM2NGQzLCAweDU4YzlhMzQwLCAweGNlMDhlYjkzLCAweDQ3NTQ0MTllLCAweDQ1OWEyNmRkLCAweDY1NDI4NGI0LAorCTB4MjliZjcxYTQsIDB4Nzk1YmNiZjIsIDB4NmQwZGZlYmMsIDB4NjE5MzE3NDEsIDB4YjA2YWFkMWIsIDB4N2FhNmQ1MTMsCisJMHgxMzE0MzYwYiwgMHhhYWNhYWIwZCwgMHgwYmNjNjI4NiwgMHg0YjlkMmU5NSwgMHg3ZWZlMGRmNCwgMHg4NzliNzQ0YSwKKwkweDJhMjI0Zjk5LCAweGY2MGYxNGQzLCAweDE2OWM5ZDFiLCAweDhiNWRjOWRjLCAweDQ5MWJmYjk3LCAweGVhYTc5ODRkLAorCTB4NTM0Zjk4ZjMsIDB4YTM4MjdjMDgsIDB4ZDgxZDRiMjUsIDB4OTk2NGI0NjgsIDB4OGVlZjNlMjMsIDB4MDdkNmQyMzcsCisJMHhkMmExNGUzMSwgMHhmOWY2MTIzYiwgMHg2ODg1OGY0YiwgMHhjYjE3ZDEyMSwgMHg2NTBmYWExNywgMHhkYWFlNzlmMiwKKwkweDUxMzM3NDAzLCAweDI5ZWQ3NjhkLCAweDcwZGRmNzg1LCAweDA1NTY0Y2NjLCAweGFmYmM2N2ZjLCAweDY3MDIzOWYyLAorCTB4ZmE2NWVhMzQsIDB4NzkwYTQ3NTIsIDB4NGJjZWNjYWMsIDB4MWJjZjBmMWUsIDB4ZDgyOTNiOTksIDB4M2Y2ZmU3YzUsCisJMHhlNzg5OTBhMCwgMHhlZWIxMWRiNSwgMHg2ZDc5ZTE0YywgMHg5YmI2NDhlNiwgMHhmMDM2ZGRmNywgMHhkYjg3OGIzYiwKKwkweDJjZjdmZWY2LCAweGNmNThiOWFlLCAweDllNDMzNjQ3LCAweDZkZmExNTE0LCAweDE3NGZmMjc3LCAweGNlNjA3ZjkxLAorCTB4M2YzMTc3ZmIsIDB4ZjQ0ZDY5ZmYsIDB4NjdiZDM3ZWQsIDB4MDVkN2Q2MjEsIDB4NWFmZDhmOWUsIDB4ODJkNWY2MGUsCisJMHg1NmYwYTU2ZSwgMHgzY2ZkZGEyNywgMHg5YmJmNDhhZiwgMHhlNWRmZjg2ZiwgMHhiMzg2NTc1YywgMHhmOGJlN2UzOCwKKwkweGE3YTI1ZDM5LCAweDY5ZjhiZDE4LCAweGQ2MDJmNzNlLCAweDQzZWI0NjhiLCAweDIxZWU1OTc2LCAweDZlNzE3Yjk2LAorCTB4MjUyZThlY2UsIDB4NWZhZTlkNzEsIDB4NGI2OTc2OGYsIDB4OWQxNWNiMGUsIDB4NjYxNWI4YTksIDB4NmMwZDRkMTUsCisJMHg4NTFmNDI3NiwgMHgxNzk3YjM4YSwgMHhiOTdmNWY0NywgMHg5YmY0MmQ3NCwgMHg5ZGJkMmMxMiwgMHg5MGI1MTdjZiwKKwkweGM3ZTJjN2RjLCAweDA0YjQ5YmI2LCAweDZhMGYxNjc5LCAweDM0NDNkYzFlLCAweGM5MGU5YTk1LCAweGUyYTc3YmJkLAorCTB4NjFiY2E4M2UsIDB4ZDYxMjY3YTksIDB4MmI3YmJlOGQsIDB4Nzk1NTE5NmYsIDB4NzNmYWZkYmQsIDB4Nzk3NWNhMDQsCisJMHhjOWE5YjBjZSwgMHhkNzcyMWI3ZCwgMHg4MGVkZTVlNywgMHhjNDAwZDlmZSwgMHhmYWE5NGU4ZSwgMHhjNzk1MWVmZSwKKwkweGJmZDdjN2U3LCAweDQ2YTc5YzY4LCAweGYwODljZTJiLCAweDlkYzUwNmY4LCAweDlmNjcxY2UzLCAweGY1ODdiYjU4LAorCTB4ZTllZjg2YmUsIDB4YjQ2ZmJlNDUsIDB4NjkzODc1MmYsIDB4ZmRhMjZjY2QsIDB4ZmY0MmI5MWQsIDB4ZGE0Yjg3NzMsCisJMHhmNDkxNDc1MCwgMHgxNmUxZDJiZiwgMHgyZGM3NjBmYSwgMHhmMGVhMWY0MiwgMHg1MWQwM2QwOCwgMHg4ZWQxZWQyNywKKwkweDAzM2ZlOTA2LCAweDcwOGNmZjUxLCAweGUyZWMyMGEwLCAweDRhNmQ3YzE0LCAweDFjY2UxZTljLCAweDllNDk0ZjQzLAorCTB4MjRhOTljM2YsIDB4OTkxNDUzZDMsIDB4M2NiODcwZmYsIDB4YTVmYTYwMTgsIDB4OTM5Y2E3MzIsIDB4YzBkMWNhOGQsCisJMHg0YjRlNjhmYSwgMHhiNDBjYTEyZiwgMHg2NzRhNDFmOSwgMHgwMzdiYjFiYiwgMHgzZmZiYjYxZSwgMHg0M2RhZWRkNCwKKwkweDRiY2ZjNTMzLCAweGYzM2FhZjMwLCAweGRiZjg0NmNlLCAweDY5MmIyY2U1LCAweDFlYzNjZmFjLCAweGRlNjNkZmVmLAorCTB4MDU1NWQzZTksIDB4NjgzZmQxZGIsIDB4ZmVmOTViNzMsIDB4OTRkYzU3ODcsIDB4ZmY0N2JkMDEsIDB4Yjc4ZDIzNGQsCisJMHhiMDVhMjhhZSwgMHgwYWU5OTRiOSwgMHhjYzc2MjJiYiwgMHhjODZlNmVmYywgMHg0ZmM2YmI2NiwgMHhiODM1NTNlNiwKKwkweGUzYTRkNGJhLCAweDAyYjY3Mzg0LCAweGMxYWViN2ZkLCAweGRiMjYxYjNlLCAweGZjNzk1ODE2LCAweDU3ZjdiOTRhLAorCTB4ZjdhNjI3ZDgsIDB4MGFlYjI5ZGEsIDB4ZDk4YmQwYmMsIDB4ZjNjYWJlZjUsIDB4YTY2ZWZmMDIsIDB4ODBmNzllNWUsCisJMHhkZjY0OWRjMywgMHg4MjJiY2I0NywgMHg0NWM1OWJiMCwgMHgwN2NmMzZiMywgMHhkOWJhNzY3ZiwgMHhmNWJiM2ZiYywKKwkweDUxZTdjODdlLCAweGMxNGU5NGQzLCAweGI4MDk5NzMxLCAweGYzZmRjNDEwLCAweDQ1MmU5NTNlLCAweDcxNmMzMGVjLAorCTB4N2Y5OTMyOTksIDB4MmIyMmI1MzgsIDB4MTk0ZWViYzAsIDB4YjhkYTdkZjcsIDB4N2RjNjMzZWYsIDB4ZDVmZGMzYmYsCisJMHhmZGNiYmVkYywgMHgxZmI4ODc2OCwgMHg5ZTk4OGFlZCwgMHhkMDg1YTM0ZCwgMHgwZGE3ZjA1ZiwgMHhlZjQ0NzkyZiwKKwkweGEzYTBmOWEzLCAweDNiMGU1YTY2LCAweGQzM2YwMjVjLCAweDgxYmYyN2YxLCAweDVjYTI3OGU1LCAweDAzNmVlMzk3LAorCTB4NmI2ZTg2N2YsIDB4ODVkN2QzZTgsIDB4ODU4YjRmODQsIDB4NGJmZmIwYmMsIDB4OWY2MDlmNTgsIDB4ZjVmMTc1YjEsCisJMHg5YmIyZWQyNCwgMHhlN2MyOTAyOSwgMHgyMGI2YzNhMCwgMHg4OTUzNDRmNCwgMHgwZWNiNWY4MCwgMHg2OTJlMDhlNywKKwkweGNmOGFiMzI5LCAweDAxN2E2NDRmLCAweGFiZDI5ZTA5LCAweGFlNWU3ZDU2LCAweDg1ZmMyMTZiLCAweDhjZmIyNDc1LAorCTB4OTk4MGQ1MDQsIDB4Mzk5ZmM0ZWQsIDB4ZjJjOTk4NTQsIDB4MTY3ZTE4OGUsIDB4NDlmZDBmYTMsIDB4Y2ZmNmZjMTMsCisJMHhkN2RiOWE2NywgMHhmZTdjZmQxNCwgMHgxMzg1NDM2NSwgMHhhOWIxNWViMCwgMHg0ZWZmMzNiMCwgMHhlMWFjZmM3ZCwKKwkweDA2OTlmZTg3LCAweDk0M2NlMzNmLCAweDdkYzdjYTEyLCAweGNlMWQ4ZjQ0LCAweDJlZTk4N2JmLCAweDFlYWQ3ODdiLAorCTB4ODI4NWMyMDcsIDB4NWMyZTE0ZGYsIDB4NDI1NDljMDYsIDB4ZDQ0ZGM4ZTcsIDB4YWY3ZGZjNzcsIDB4NDdkMDI3ZTksCisJMHhmZGQwNzllOCwgMHhkM2FmN2ZjNywgMHg2NzM5ZGY0YSwgMHg1MGE0ZjhlMiwgMHhmZDA0ZTJiZSwgMHgzZGY3NDE4MSwKKwkweDQwOWRjMTNmLCAweDg3Mzk1ZjliLCAweGRmYTZjYjcxLCAweDMzMjdhYjdiLCAweGE3ODM1ODZlLCAweGZmMzc2MDNiLAorCTB4ZWQ5N2RiYTIsIDB4ZDAyN2ZmNDAsIDB4MmIxMWNiNWIsIDB4MGYyYjJlYzEsIDB4MGFmNjdmZjQsIDB4M2JmNGI3OGYsCisJMHhhOGZiODBkYywgMHhiYmU4ODY2NywgMHhjN2RlYzhmMywgMHg3ZDIzNmY2MSwgMHhhZTg3ZjE2NiwgMHhmZTdiYmZmZCwKKwkweDI1Njc5OTExLCAweDM1YmQ1Yjk4LCAweGNmYmM0YTU0LCAweGUzN2ZlM2QxLCAweGI0OWY2MTM1LCAweDZmZDAxNWQwLAorCTB4MzkxNzljNTcsIDB4ZmVlYTI3ZWEsIDB4YTlmMTU0M2QsIDB4ZjViZDAwMzcsIDB4YzQ2YmY4MWYsIDB4MGEwY2ZhYjUsCisJMHg2NWU5NmVjMCwgMHhlNDY2NDdiZSwgMHg2YTg2ZjU3YiwgMHhjNzcxZTEyYSwgMHg2ZmYwNGFkMCwgMHg4NmVhYzk3YiwKKwkweGNkNWVmYTlkLCAweDVmMWY4NGE5LCAweGZiMTRjY2YzLCAweDNiYjFiZTZiLCAweDNkNTc3MTFmLCAweDIzY2Y2ZmJhLAorCTB4MjM2Nzk4NTksIDB4Yzk5ZWRiYzgsIDB4ZjU3YWM0NzYsIDB4ZGQxNjNiNjksIDB4NmJiN2Y3MmYsIDB4ZjcyMDZmY2YsCisJMHg2NGVkMWIzZSwgMHgwM2NjY2QzZSwgMHg5OWVmMzVmYiwgMHhkMWYwMGMxZCwgMHhlM2ZhZmI1ZSwgMHgxYTg3Yjg5NSwKKwkweGU4M2RiOWVkLCAweGE2ZGJiMmJmLCAweDJkNjcwZjQyLCAweGY4NzI4YzllLCAweGJiYjM1OWUxLCAweGJhMGNlYjE3LAorCTB4MmVhMjc4NzksIDB4NTZhNDVhNGYsIDB4M2JhYjJmZWUsIDB4MzdkNzcxMWYsIDB4ODBiZmUxZjEsIDB4Zjc1YWY1ZGMsCisJMHgzY2UyY2ZmMywgMHgzODg0YWQ3YiwgMHhlYjFmNjE3MSwgMHhlODVkZDc4ZCwgMHgyZGM3Y2YzNSwgMHg5ODczZWM4ZiwKKwkweDk0OTcyZjYwLCAweDgyY2Y5NWVlLCAweGVmM2VhZjdmLCAweGY0NWJhZDkyLCAweDQzOWRlODE5LCAweDExZTc4ZmQ4LAorCTB4NjUyNWYyZTIsIDB4ODVmZjUyN2IsIDB4NWUyNWJkZGUsIDB4OTdjNWRmZDYsIDB4MDliZDhiZWEsIDB4MTdmMzFiZjYsCisJMHg1MjZiNmVkZiwgMHg2MDI0MTQ3YywgMHhiZjE5ZjI1YywgMHgzYjIwMTljOSwgMHg4MzY2ZGZjNywgMHg5OWU4NzhiYywKKwkweGJlMjk2NzkxLCAweDczN2VlMmZlLCAweDZhM2FjMmQ4LCAweDk0ZTZkMmI2LCAweGY4M2ZiOGNjLCAweDBlYmNmZWYyLAorCTB4M2JhOWYzZTcsIDB4MzRjNzkxMGEsIDB4ODRhYzg4MmYsIDB4NTFiMDVjNWYsIDB4N2JjZjJlNGEsIDB4YmU1Zjg4ZGIsCisJMHgyYTk3MWI4MywgMHg0ZjJkZGYyNSwgMHhjN2VlODU0ZCwgMHgzOGY1NzM1NywgMHgxNmMwNzU3NiwgMHgxZGRmMjgwYywKKwkweDgzYTNmZThmLCAweDhlY2NlZjljLCAweDY3YWY3N2QzLCAweDdlNzEyOTdlLCAweGFkNDI1YjZmLCAweDJkYjdkZTZlLAorCTB4NzM4ZmM3NTMsIDB4ZTMzZjdmM2MsIDB4Y2ZiMTk1NTgsIDB4ZTc5Mjg3YWEsIDB4Mjk5MTUyZGYsIDB4ODk2NmQzZjYsCisJMHhjNjBlMjIxNCwgMHg4OGFjMmZmOCwgMHgxMGE0NWFlMSwgMHg1ZDc2MzU3OCwgMHhlMDEzZDIzZCwgMHhlMDhhY2JjOCwKKwkweGYyYTBlZjg4LCAweGE4NmU5NmExLCAweDRmYWUzYjM0LCAweGE4MjA0YTVmLCAweDBmN2Y4Yzk1LCAweDdiOGM4YmI5LAorCTB4NTVlZjVlNjAsIDB4ZGJlNTdlZTgsIDB4OThkOGYzNmYsIDB4MjQ2YTRiNGYsIDB4YWI1Mzc5MWQsIDB4N2M4ZTkyMjMsCisJMHg0NmE4ZTQ2OCwgMHhjYmViOGQzYiwgMHgxOTlmZjE4YSwgMHg0NjQ5YWZkZiwgMHhmNjY0M2ZiOCwgMHg4ZmRiYzZkOCwKKwkweDZmM2M0MzhmLCAweDJhYjM3ZTFkLCAweGZkZDBhOTNlLCAweDRkMjA2OWE2LCAweDY0NjcyM2Y2LCAweGU5YjZlYzExLAorCTB4Mzg3NWU0YjksIDB4MWZjMTMzYTcsIDB4NjU3NjA2NDcsIDB4OGZlMjEzN2IsIDB4YWEzYjkwY2YsIDB4MTM3ZTI4N2MsCisJMHg3Y2EzZmFmZCwgMHhhNTRmODFkOCwgMHhmNmFiMGFjZCwgMHg2NWIxYWYyMiwgMHgzYTI5NGQwYSwgMHhlNWIxYjAxZCwKKwkweGE3YjRiZWZiLCAweDVlMmU3ZWMyLCAweDFlM2YxNTZkLCAweDczODIyMjUxLCAweDBhYWUyN2I5LCAweDIzOTg4YzNlLAorCTB4Y2E4ZTczODIsIDB4MThmYzExZmYsIDB4MDk1OTEwOTksIDB4YjRhZGNhZGMsIDB4YzlmMTk2YWYsIDB4MWUyZTk1OTEsCisJMHhhMGMyYjJmZiwgMHgwM2U0OTFhNywgMHg1NzMyMjc4NSwgMHhiNWVhNGYwMywgMHgzNzExYjdkMSwgMHgwOWQ5OTc2OSwKKwkweDdiZTk4OTNmLCAweGEyMjdhMTlkLCAweDc4M2I4NmM3LCAweGIzNDEwZmZjLCAweDRlNjFmMTBiLCAweDBiZTQ2MmE1LAorCTB4YjVmOWY4OTYsIDB4OTA4ZDNmYjgsIDB4Zjg0MWMwZWIsIDB4ZGRkZDkzNjcsIDB4ZmRjMWEzMmIsIDB4YmMxZjIwYWYsCisJMHhlNWRkZGIzMywgMHgzMjZmNWViYSwgMHhjYWNhZTU4NywgMHhlZTJkNmFmYywgMHhmYmRkM2IyOSwgMHhkZmNjMTU4ZiwKKwkweDA3YzkxYzVmLCAweDRiYjViMWNlLCAweGRkN2I2YTFjLCAweDQ3ZmIxM2JhLCAweDgwN2JhM2NkLCAweGRlMWMxNzVmLAorCTB4OWY1ODJiMjcsIDB4YWRhMTk2YWQsIDB4NjdkMjJjYTUsIDB4YTQyOWM4ZTYsIDB4NmY2MDRiZjgsIDB4YmRiYTIzODIsCisJMHhiMmVmMTQ4ZCwgMHg1NjFlOWYwOCwgMHg5NzY3ZWIyYSwgMHg0Yjk0MGY3MSwgMHhhMWY2MDNiNCwgMHhlNmZjZjdlOCwKKwkweDAwZWZhYmMwLCAweDY2ODY0NjZmLCAweGY1OGY0ZTA5LCAweDRmMDMwYmE3LCAweDNlMzcwM2E2LCAweDk4MWVmOGUwLAorCTB4NjBmZmVmMTMsIDB4ZmEwYjVlZjUsIDB4YzNiOGJmOTcsIDB4OWVmNmUxMTIsIDB4YmJlN2M5Y2QsIDB4MGNmNmVkN2MsCisJMHg5ZTNkMGJmOCwgMHhlYzdiMGZkMCwgMHhlYWM3YTY0OSwgMHg0ZTE5NzYwNSwgMHhlODgwODNmMiwgMHgyOWM3OWNmZCwKKwkweDBlNTRiN2YyLCAweGRmMGY0MWI1LCAweGQ2OThjYmQyLCAweDYzMTNlODEyLCAweGE5ZjMzMWU4LCAweGNlMWZjZjQxLAorCTB4YjZmODQ4NzksIDB4NDMwZjBiNGUsIDB4Y2MwNzIzNmYsIDB4ZTRlZjdjMDQsIDB4N2Y3NDI2YjgsIDB4MWFlZjEwNWEsCisJMHhhZGM3MDBmNSwgMHgyMTZlM2QyYywgMHgwZmE0YjQ1ZSwgMHg4Y2JkYzRhZCwgMHg5ODlkNWJmNCwgMHhhN2M4ZTliZiwKKwkweGRiM2YzOGY5LCAweGRiY2UzZTYzLCAweDM2NzBlNDcyLCAweGY3OGRjZWMxLCAweDZjYzdjNzA0LCAweDFmZjRiNzhjLAorCTB4MjRiYmM2YzksIDB4ODZhYWRmZDYsIDB4NDcxNzIxMGEsIDB4NDdlMDEyYjgsIDB4ODVhZmRmYWMsIDB4OGI3ZjIxMGIsCisJMHhmMTgyNTQzMiwgMHhmOTk2ZTQyOCwgMHg0OWEwNmI0YywgMHhlOGFhZDFjZSwgMHgzNDQ3NGY3ZSwgMHhmN2IxZjljMSwKKwkweDZlODU1MWY2LCAweDI1MGY4Y2FmLCAweDFkMzcwN2M4LCAweGIxMTI1NGJkLCAweGQ5YTBmMWM3LCAweGU4MTM5NWMwLAorCTB4ZGZmZGQ2MmYsIDB4MDljMGM4YjksIDB4YmYwY2RhNWUsIDB4YmMyNzA3MWYsIDB4ZjVhM2RjMzEsIDB4YWU3ZGM4MTYsCisJMHhiNjNiOTc0MiwgMHgzYmNhZjg1ZSwgMHg2ZGUzMjAyMywgMHg5OTJhNWRhZiwgMHhjNjc1OGM1OSwgMHhhM2MwNGEzYywKKwkweDAxN2M3MTU5LCAweDBlMGFlNDBlLCAweGYzNjczMjZjLCAweDJiY2Y3Y2I5LCAweGQyNWU0ZWVlLCAweDk2YjFiOGRjLAorCTB4ZDMzYWQzYTcsIDB4NmJkMGI1ZmQsIDB4NWRlNDA1MTMsIDB4YjFhZTU2MzcsIDB4ODU3MGY0NzYsIDB4NTUzZWJmN2UsCisJMHhmNmZiOGY3ZiwgMHg5NjRlYzEyOCwgMHg3ZDYzMjJlYiwgMHg5YmMxN2NlZSwgMHg1ZDY3ZjAzMCwgMHhmODVhYzZmNSwKKwkweDdlNTk3ZGRmLCAweGY5YmJlMjRiLCAweGVkYWZmODg3LCAweGFkZDdhNjQ5LCAweDMzOWI1OGRmLCAweDFlZmI5ZjhlLAorCTB4MTI2YTdlZGEsIDB4ZDlhZmNmNWQsIDB4ZGIzNmEzYmIsIDB4NGM3ZjdkNzUsIDB4OThiNjhiZWUsIDB4NDllNjk1OWMsCisJMHhiZTU4ZmE4OSwgMHhiNzEyNzZiMSwgMHhhZmZlNTJlYiwgMHg3ZGNmZDBmYSwgMHg4YzM1ODhmMSwgMHhiNWZhY2JiOCwKKwkweGZkYjdmY2UwLCAweDA5MjViZDcxLCAweDVmODA3ZmI3LCAweDlkNmIwNTMzLCAweGZlNWJiZTMzLCAweDEyYWI2ZGIxLAorCTB4NGY4MDU2MWUsIDB4ZTJiZDVmZWMsIDB4MDkzN2VjNjcsIDB4MThhYTZkZmIsIDB4NWE2OGE3NTMsIDB4Mzc3OTFkM2QsCisJMHg0ZjRmNTc3OSwgMHg2ZDhjNTNhYywgMHhhOGE3MjgxOSwgMHg0OWJkODhiNywgMHhkMmI4N2VjYiwgMHg2MjNlOGUzZCwKKwkweGQ0YWU2ZmYzLCAweDg2NGQ5ZjY0LCAweDZmYTk0ZjFkLCAweDFlMTVlNjc5LCAweDUzY2NiOTdmLCAweDU1N2VjOTU2LAorCTB4YmY5MmE5YWUsIDB4YTZhN2RkOGYsIDB4ODYwZmNmNTIsIDB4ODBiZjFkYjIsIDB4Y2QwNzQ1M2QsIDB4Yjk0OWY4NGUsCisJMHg0ZjMzZWJhNiwgMHhmYzJlZmNiZCwgMHhlMWRiMmYzMSwgMHgzNTdlNjRlYSwgMHhiY2ZhNjk1NSwgMHhlYTI3MzY2MywKKwkweDVmNjNkMTQwLCAweGZmZTA3YmU1LCAweGE1Y2JlYzViLCAweGQzYjI2MmNlLCAweDk1M2YxZTY0LCAweDNkZjA1NzNiLAorCTB4YzZjN2NmYjYsIDB4N2FhNTY5M2UsIDB4NjQ1ZWQzYmUsIDB4NTMzYWZlZmUsIDB4M2FkYmUzYjEsIDB4YzUxYmU0OTMsCisJMHgxMmQ5YzE2OSwgMHhmODkwYmY4NywgMHhlODVjMWQxNiwgMHhmN2MwNWNkNCwgMHhkNmZlMWRhMCwgMHg2NzdmZjVmZSwKKwkweDBjOGYwZTIzLCAweDBiYmE2N2ZlLCAweGQzZWQ3NWI4LCAweGI2Y2ZkODc0LCAweDgxZDM4ZjgxLCAweDY2MDYyNzBmLAorCTB4MWQ5ZWQwMzksIDB4MWZkMDM5NzIsIDB4MTZiOGZiYWQsIDB4MzY4Y2JhZjMsIDB4OGIzMDY3NWUsIDB4ZjYzNmIxOWMsCisJMHgxM2Q1OGU3ZSwgMHhjZGQxZGUxMiwgMHg3M2FmNmJkMCwgMHg2MTRiMmZkYiwgMHg4MmRkYTllZiwgMHhjZThlZmM2MywKKwkweGQ3ODhmYzQ0LCAweGUzMzk1YzE5LCAweGViMTI2NWQ1LCAweGY1YjMwNTBjLCAweGQ0NWEwMzNhLCAweDdhY2MwYTE5LAorCTB4ZWEzNDAxOWQsIDB4Njc1MTY4MGMsIDB4MGNlYTNmNDAsIDB4MDA2NzUxYTAsIDB4NjgwMzNhOGQsIDB4YTJkMDE5ZDQsCisJMHgyYmZlODBjZSwgMHhiY2IxNmJhOCwgMHg1MGRlNGU1MSwgMHhlY2QxYWFkZiwgMHhmNDBmZmY4MiwgMHhmNWU0NDE2YSwKKwkweDc0ZDMxYzBmLCAweGM0MTI4NzdhLCAweGZiYzY3ZjdkLCAweGFmNDYwZTIzLCAweDI4YjA3NWU4LCAweGU3Nzk1M2M3LAorCTB4ZmJjYjM0MWYsIDB4NWVkYTFhMjAsIDB4ZDZmNzEzMzcsIDB4NTU3MWI5YWYsIDB4ZDkzNzExMTcsIDB4YTNjZGRiMTQsCisJMHg2YTFmNTEyNywgMHgxYmRjNTNlZiwgMHgyZTVmZTg1ZCwgMHg1YzFiNmM3MiwgMHhmYTIzN2VmOCwgMHhkNTZlY2Q3YiwKKwkweDlhYmFmYjg1LCAweDZmOTdmYThkLCAweDU4ZWE1N2IwLCAweDJjYzczOWQ1LCAweDE1ZmJjZjcyLCAweGVmZmRlMWNhLAorCTB4NjRlZmVhYjAsIDB4MmNiZGM2YmYsIDB4OTU0NWIwZjcsIDB4MWQ2ZmRhM2MsIDB4Y2I0YmY3OTIsIDB4NGQ3MzhhOGIsCisJMHg3ZWRhMWU0MiwgMHgxMzgyZTdjYiwgMHg5ZGY0YjY5ZCwgMHhiMjFmZDc5MCwgMHhjNTI0ZDczOSwgMHg3ZGU0OGY1NywKKwkweGMxNzRmYzdlLCAweDQ1NDMzYzhkLCAweGE3ZDVhZjRjLCAweDdiNWVkZjkwLCAweGY5MjEzODAxLCAweGI0N2U0MjQ4LAorCTB4MzNmY2Q5ZDYsIDB4NWRhNDY3ZTQsIDB4N2VmY2UxMzMsIDB4NjQ0ZWU4N2UsIDB4NmQzZGQ2ZjksIDB4YjA5MjI4ZmUsCisJMHg5OTMwNzM3ZiwgMHg2ZGY2MGRmNiwgMHg5OWM4MjNjZCwgMHgwMzRhOGZkYywgMHg5NDNmYjJlMiwgMHg3NGFhMWZkYywKKwkweGM2OTI3ZDY0LCAweDNjZDFlNjNmLCAweGZmNzU1YmU0LCAweDNmNDBlNmI0LCAweGRiYjk3N2VmLCAweDYxY2FmOTJhLAorCTB4MjU3MGY3OGYsIDB4YjM0OWYxZmIsIDB4MjcyZmVhNDcsIDB4YmRlNGQ5OGYsIDB4OWNmYjdlNzUsIDB4OGQ0YmZhYTQsCisJMHgxZmVhNTUzNiwgMHhjNDhhY2MxYiwgMHhkZWU1MmJmMSwgMHhhYWNiYjA2MywgMHhlZWE1N2JiYSwgMHgxMGViOTU1MiwKKwkweGUxZDk4ZTdmLCAweDM3ODZmMmQxLCAweDVjYzM3N2MwLCAweDZhYmZkNDk3LCAweGUxMGJmNGFjLCAweGY3MmY3ZWM3LAorCTB4N2YxNjY4M2MsIDB4ODI1NGU5YWIsIDB4YzlhYmQzMmEsIDB4YWQ3ZjgxNmQsIDB4M2Q4YTc1NjIsIDB4Mjk4ZmVkOTksCisJMHg3OGFiMGZlYywgMHhiYjA0YzZhZiwgMHg5MTVkYjBkYSwgMHgxMDBhNDJiYywgMHg4Njk1ZTdhYywgMHhmZTBkNTczZSwKKwkweGZiMGE1N2ViLCAweDNkNTZiZGNiLCAweDU1NTNjZTBmLCAweGM1ZDc5ZmUxLCAweGRmZTc4YjcxLCAweGZjMGI1ZTQ3LAorCTB4NTVjNzFkNjYsIDB4NWY2NzFjYjQsIDB4MzdiZjcwOGYsIDB4OWViZTZhNmQsIDB4YzA3MmJiZTcsIDB4MzMxOWY1N2YsCisJMHg3MjZhNGYwMSwgMHg5NWU4NWU3ZSwgMHhmY2VkNWY3OCwgMHgwOTViZWY4NCwgMHg3MzdkYTVkZiwgMHhhOGUxZjdkMywKKwkweGM4NDkzZTg5LCAweDc1OWE0ZjZiLCAweGNhN2Q2MWZjLCAweGVjMTRlYjdiLCAweDVlM2VlYTU1LCAweDM0NzRjZjY5LAorCTB4OGNhMmJiNDksIDB4MzQwYmZmYzQsIDB4ZTAyZjZmM2QsIDB4NGE2NjcyYmIsIDB4ZWIwZmEyZGQsIDB4NmVlZGRhNmIsCisJMHgwYjg2M2ZlOCwgMHhiZWZjOGRiYiwgMHhlNzk2ZTU0MCwgMHg1YmQ1NGVlZCwgMHhkYzI5ZDMwYiwgMHhjYTViOGQzZiwKKwkweGU3NjE3ZTE0LCAweDVjNzFkNDdjLCAweDNkNGYzZmMyLCAweDdkMDVjMGJiLCAweDQzNzc2OTdjLCAweGM3MzkzNTFmLAorCTB4MzFkZGUxZTYsIDB4NzJmZmUwY2IsIDB4ZGM1NWMzNTksIDB4MDI5ZDI3OTcsIDB4NDM4ZjlmZDgsIDB4NWFkZmFjZGQsCisJMHg1ZDQxNDgxYywgMHg1MGQxZTQzZCwgMHgzOGE2M2YyNywgMHgxZWJmYWVmMSwgMHg3MTZmYjc0ZiwgMHgxNDBhY2ZjMiwKKwkweGI1YjdlYTI3LCAweGQ5MzVkZGE5LCAweGU2NzZiZmNjLCAweDljZjAzNzBjLCAweDYxZWE1NWYxLCAweDc2ZWFkYzIzLAorCTB4NTM1MDZiNzAsIDB4NmNhNmI1ZjQsIDB4ZmYwZGYzZDQsIDB4NTRhNmY3MjksIDB4ZDdmNzhhNGQsIDB4MWQxNDdlMWIsCisJMHhmMTFkMjJmYywgMHg2ZGQ0NDdmNSwgMHg4MDdmODM3NywgMHg4MzVlZWU2YywgMHhmZWEwZWMzZiwgMHhiZjUyNjlhNiwKKwkweGU1ZDFkOThkLCAweDYxM2IzOWZkLCAweGY0YWI1MzQ3LCAweGVmOGQ4ZDc1LCAweDBjNGY5MTk5LCAweGMxY2RlNmRkLAorCTB4N2NkNzJiZmUsIDB4Y2U1YjI1YmUsIDB4OGNiZDdlMzksIDB4YjgwMzM3NzEsIDB4MTY1ZWI2M2IsIDB4NDYzZGYxYzMsCisJMHg2Yjc4MWRmZCwgMHgyNmJhZWEzMiwgMHgzMjZiYWVhMywgMHhhMzI2YmFlYSwgMHhlYTMyNmJhZSwgMHhhZWEzMjZiYSwKKwkweGJhZWEzMjZiLCAweDZiYWVhMzI2LCAweDI2YmFlYTMyLCAweDk3YWUxM2E5LCAweDg3OGVkZGY2LCAweDA4ZWExZGE0LAorCTB4YmM0Mjc4YzgsIDB4YzdlYWI5YjgsIDB4NTUxNzVkZDUsIDB4YTU3NzUzOGQsIDB4YzQ4NjU3MTQsIDB4YmQ3YmY2NWQsCisJMHhjZWE2M2RkZSwgMHgyNmFlZmVjYSwgMHhlMGQ1N2JmOCwgMHg0MzFlN2I4NCwgMHg3MTYzZDI1ZSwgMHg2YjU0MzhiMywKKwkweDYwM2MxNmYxLCAweDU0ZjA3YzE3LCAweDhkNmY1YjhkLCAweGY1MmVjZmU5LCAweDliNjRjYmQ5LCAweDJjYTg3YjhmLAorCTB4NTE1MjY1OWEsIDB4MjNlZTM0YzcsIDB4ZGY4NGVmNTYsIDB4MWJmMDljZTAsIDB4ZDMxYmYwYjQsIDB4ZmNkZmI4ZWMsCisJMHg1ZGFlYzJkNiwgMHgwMTA5ZTdhYSwgMHg3MjZjMTNjOSwgMHgzMjM3NWJiZiwgMHgyZjdkMzBhZSwgMHhlNTcwOTMzOSwKKwkweGMyYjgzMWIzLCAweDkwMTU5YTBmLCAweDk1YTBlZDYzLCAweDIzM2Y3NGJhLCAweDM3MjU0ZmY4LCAweDBlM2Y5YzdmLAorCTB4OWM3NDg0Y2UsIDB4ZGExYTk2OTksIDB4YjVhNjdkODcsIDB4MTc5MWJhYTUsIDB4OWQ4YmJmYjMsIDB4ODhhNmRjOWQsCisJMHgwNmExYWZiZiwgMHhiYzFjNzdkOSwgMHg3YzllNDc0OSwgMHg3M2QxYzRlZiwgMHhmN2Y5ZTFiZiwgMHhmMjVkODNmZSwKKwkweGQ3OTNhZDlkLCAweGUwZmZmYTJlLCAweGFlOTU0ZDRkLCAweDg0Nzc1ZjhmLCAweDk2NTllNzdkLCAweDQzYjY1NGVhLAorCTB4MTZkNTU3OGUsIDB4YjhiYTkyMmEsIDB4NTBmZTJhOWEsIDB4NThhZTNkYTMsIDB4ZDM3N2EzODAsIDB4YjU3N2RjM2MsCisJMHhjODM5ZTFiNSwgMHgyZWZlYzM5OSwgMHhhMzJjZGZlZiwgMHg2YTFhNmJiZSwgMHhkOWY0Y2JkZSwgMHhiZTM3M2NlYywKKwkweDNkY2Q0ZGFiLCAweDgwMGIwNTQ0LCAweGIwYzU3NTQ3LCAweGFkZDRiM2FiLCAweDE5NjNkZDYwLCAweGJmODNiZmRlLAorCTB4YTdjYzVlZGMsIDB4OTZmZWUzNTYsIDB4YjNiNjk3NTMsIDB4Y2U2M2VlNGIsIDB4MzJmYmRjNDIsIDB4ZjUxZmFiYWIsCisJMHg5ZTZmMmQ4NiwgMHhiMmMyN2E5MCwgMHhkNDQyZDcwYywgMHg3OWJjYjYxYiwgMHg1YzczYTc1YSwgMHhlNTFiOGFmZCwKKwkweGFiYWIxM2IyLCAweDY2Zjg4MjdmLCAweDEwOWYzZWViLCAweDA5YTFmZDY3LCAweGMwZmI3NDQ5LCAweDA5ZjNlZWU0LAorCTB4M2YwNWFlNzEsIDB4M2Y0ZTlkZjgsIDB4YWZiODRjNTMsIDB4NWM5NDQzNTYsIDB4ZjIxZGJiZDUsIDB4NGJmZWViZjksCisJMHhhOGQzY2Y3ZiwgMHhhYWE3YzljNCwgMHg3NDljNWM3NCwgMHhlN2IwYzI4MiwgMHhmOTBlYzVkMSwgMHg3MTMzOTdmZSwKKwkweGRiZDQzY2ZkLCAweDEwYjVkOGE4LCAweGZkYWYzOGYzLCAweGUyZjhlYzM1LCAweGMxYTc5ZWFkLCAweDc3MzhjZjI3LAorCTB4MzU3OWYxMGUsIDB4MGQ5MGM3NTgsIDB4YmJlMzE5ZWQsIDB4ZGJkNTI5ZTQsIDB4M2QzNmI2ODgsIDB4MzU3ZTkyNjAsCisJMHg2ZGY2OGE1OCwgMHhmYTIwZjQzNSwgMHg4MTc2MmZkOSwgMHhmMzkzZWQ0ZiwgMHgzYTYyMmM2ZSwgMHhiNzlhMWFjZiwKKwkweGU5Nzg4ZWRlLCAweDczZmU4ZGQ5LCAweGVjNWU5ZTY1LCAweGRmZWViNjM3LCAweGU1OGY5YzY5LCAweGMzNzk4N2Q5LAorCTB4ZjllNGFhODUsIDB4NmRlYTM3YzMsIDB4NTVjMjJlY2MsIDB4MzcxZDBlM2EsIDB4OTNhY2E4ZmMsIDB4NThlN2ZiZTQsCisJMHhhNTVlMzlmYiwgMHhmZGY5NzgxYSwgMHg0N2JjYjM3MiwgMHg3ZTRjNGYyMCwgMHgwYTVkNWVlYSwgMHhhM2RlNTg3OSwKKwkweDYxYWZiYzg2LCAweDUyOTllYzljLCAweDdiNmVmOThmLCAweGM3N2VjODBkLCAweDdjNjUzYjBkLCAweGUzYWYzOTZjLAorCTB4YTY4NWI0YTMsIDB4MGRlNDA0ZTAsIDB4NGUwZDFlNTMsIDB4NzY1M2JjODAsIDB4ZGM1Y2RhOGMsIDB4YjUxODEwYmUsCisJMHhlMTc4N2YyMSwgMHhlODZkNDc2ZiwgMHg3NTQzYzE3ZiwgMHg1NmJmZTFlMywgMHhjMmRmMDlhZCwgMHgzZjU5NTFiMiwKKwkweDkyMWFmNzlkLCAweDA0ZThjMjc3LCAweDRkODU2ZmU0LCAweDZjMDI1OTZmLCAweGU2OWU3M2I3LCAweGI3ZjI5MzdkLAorCTB4ZDM2Mzg5MjIsIDB4ZmU5YTViMGQsIDB4ODdiMDRhYTgsIDB4ZTQ5MGNmZTksIDB4MjU5ZDU0YWIsIDB4ZGQxNGJlZTMsCisJMHgzZThmN2RmZiwgMHg2ZThlYzJhOCwgMHgwOWRjYjIwOCwgMHg2OWU3MzdmNiwgMHgxMjQ4ZTVkMywgMHg2YmFjYjBkZiwKKwkweGYzODM3MDMxLCAweDNmNzFhNGI1LCAweDNjYmU0NzMzLCAweGU0MjNjMGM1LCAweDM3OGM4ZDhmLCAweGJlYjdhNmZlLAorCTB4NzljOGJlNDIsIDB4OGM3ZTE4ZGMsIDB4MjYxYzMxNGQsIDB4ZWJlZjVkYzQsIDB4MjBmYzE3MTEsIDB4YmJkYWRlNzksCisJMHhmNzhhZDkxZSwgMHg3NmUzNTM2ZCwgMHhkNzhmYmM4YiwgMHhkYjQ1NmRmNCwgMHgyNTllZmFkYSwgMHg0Y2JmMjQ4NywKKwkweDY1ZjljZjlhLCAweDljOWQ3ZDEyLCAweDdiNjhlNDYzLCAweDM5YWRmM2YwLCAweDc2Y2JlY2UzLCAweDBlZDEyZDcwLAorCTB4Mzc0MzlhNGUsIDB4ZDI3YWJkZTAsIDB4NDgwZWVhOWYsIDB4MGZkZDA5MWMsIDB4NmFkOWQ5N2MsIDB4ZWNhZTIzNzcsCisJMHhkOGE1NTVmYSwgMHhhOWY1YjdkNywgMHhmYWE5OGYzMiwgMHhhNzUxZDk0NywgMHg1MjU0MGZjYywgMHg4N2U2ZmMxMSwKKwkweGUxZTAxMWRhLCAweDBjM2MyNGVjLCAweDg5NzJkZDQ4LCAweGRkYWU3MDQzLCAweGFkYjYwNzc4LCAweDEyM2U0YTcxLAorCTB4NTMzNmViZjMsIDB4OThhZGMzZTgsIDB4ZWY5MGU1OTcsIDB4NDViNzBjMTEsIDB4NmY3YzJjYTYsIDB4NGFlZWUyOWEsCisJMHgyZWNlMmJjOCwgMHg5ZDA0MTU5OSwgMHg4MzBhMTlkZCwgMHgxNWNmZThlZiwgMHhkNWM4ZWEzNywgMHhkNmFlM2E2OSwKKwkweDdiYWQwZGE4LCAweDM1MmRmYzc5LCAweDViZjFiODJjLCAweDZmZjMwN2UwLCAweDc2OTdhY2I3LCAweGIxNGNkOTQ1LAorCTB4MjkwYTVjZGIsIDB4NzA2N2ZmZmEsIDB4M2Q3YmM0MmQsIDB4NjdhZDNkZjYsIDB4MjBlZmIwNWIsIDB4ZjA0YWZiZGUsCisJMHg4ZmE4YjU5OSwgMHhlNDVkOTVmZSwgMHg4MGQ1MDY4OSwgMHgzM2QzY2Y5OSwgMHg3YmI3MDQ4MSwgMHhiODk0MmNlZSwKKwkweGM2ODZhNTEzLCAweDJjZmY5MWZiLCAweDZhM2E5NTRmLCAweDEzZDcwNGNmLCAweGQzZGE2ZWY4LCAweGY1ZTRhMzdjLAorCTB4YzdhNGZlODcsIDB4MjlhNWQxZmIsIDB4M2Q3MWU0NmUsIDB4NzExYjVjZjMsIDB4NWQ0NzllYWUsIDB4YTI5YWZlMzIsCisJMHhhMTNjMGJmMywgMHhhOTY3YTdlYiwgMHhlNjllY2U3ZSwgMHhjNTlmNzk0YywgMHg4NzY3YTFlZSwgMHhiZmJlMzI2NywKKwkweGU1YmMzMjU5LCAweDE4MDNhOGQ1LCAweDY2N2IxZmRmLCAweDRmYjczZjcwLCAweGRlNzcwZDI5LCAweDc1NzMzZTA3LAorCTB4Yjk5NDU3NzksIDB4ZGU0ZWRlZTQsIDB4N2IxM2UzNzksIDB4ZjE4NjdkNzQsIDB4ODk3ZGFjMWQsIDB4ZmVmZGU5MjMsCisJMHhjYjgwZmViZiwgMHgwMDIyMjBiMywgMHgwMDAwMDAwMAogfTsKIAogI2VuZGlmIC8qX19CTlgyWF9JTklUX1ZBTFVFU19IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCmluZGV4IGFlYTI2YjQuLmVkNjQ4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKQEAgLTIyLDE0ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgogI2luY2x1ZGUgImJueDJ4LmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1VQUE9SVF9DTDczIDAgLyogQ3VycmVudGx5IG5vICovCiAjZGVmaW5lIEVUSF9ITEVOCQkJMTQKICNkZWZpbmUgRVRIX09WUkVIRUFECQkoRVRIX0hMRU4gKyA4KS8qIDggZm9yIENSQyArIFZMQU4qLwogI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MApAQCAtMTM5LDYgKzEzNCwyNiBAQAogI2RlZmluZSBQSFlfU0dNSUlfRkxBRwkJCTB4MgogI2RlZmluZSBQSFlfU0VSREVTX0ZMQUcJCQkweDQKIAorLyogKi8KKyNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSCQkweDIKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0xDIAkJMHg3CisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9DT1BQRVIJMHgyMQorCisjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9BRERSCQkweDgKKwkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFIDB4NAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRQkgMHg4CisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUgkJMHgxNAorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUgCTE2CisjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19BRERSIAkJMHg0MAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyAweDEKKyNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUgCQkyCisKKyNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX1VOS05PV04gCQkJMHgwCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9MQyAgIAkJCTB4MQorI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfQUNUSVZFX0NPUFBFUl9DQUJMRQkJMHgyCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRQkweDMKKworI2RlZmluZSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSAJCQkweDAwNDQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NCwxMyArMTY5LDM0IEBACiAJCShfYmFuayArIChfYWRkciAmIDB4ZikpLCBcCiAJCV92YWwpCiAKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9waHlfbWRpbyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKLQkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCi0JCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKKwl1MzIgZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwkvKiBTZXQgQ2xhdXNlIDIyICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVCArIHBhcmFtcy0+cG9ydCoweDEwLCAxKTsKKwlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWY4MDAwKTsKKwl1ZGVsYXkoNTAwKTsKKwlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWQwMDBmKTsKKwl1ZGVsYXkoNTAwKTsKKwkgLyogU2V0IENsYXVzZSA0NSAqLworCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QgKyBwYXJhbXMtPnBvcnQqMHgxMCwgMCk7Cit9CitzdGF0aWMgdm9pZCBibngyeF9zZXRfcGh5X21kaW8oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IHBoeV9mbGFncykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwlpZiAocGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgeworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9TVCArCisJCQkgICBwYXJhbXMtPnBvcnQqMHgxOCwgMCk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCisJCQkgICBERUZBVUxUX1BIWV9ERVZfQUREUik7CisJfSBlbHNlIHsKKwkJYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3MocGFyYW1zKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX0RFVkFEICsKKwkJCSAgIHBhcmFtcy0+cG9ydCoweDEwLAorCQkJICAgREVGQVVMVF9QSFlfREVWX0FERFIpOworCX0KIH0KIAogc3RhdGljIHUzMiBibngyeF9iaXRzX2VuKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQpAQCAtMjc3LDggKzMxMywxMCBAQAogCQkJICAgcG9ydCo0LCAwKTsKIAl9CiAKLQkvKiBlbmFibGUgZW1hYyAqLwotCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDEpOworCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKKwkJICAgIEVNQUNfUlhfTU9ERV9SRVNFVCk7CisJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19UWF9NT0RFLAorCQkgICAgRU1BQ19UWF9NT0RFX1JFU0VUKTsKIAogCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkgewogCQkvKiBjb25maWcgR01JSSBtb2RlICovCkBAIC00OTgsNyArNTM2LDcgQEAKIAl1ZGVsYXkoNTAwKTsKIAlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX1NFVCwKIAkJICAgIHZhbCk7Ci0JYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcyk7CisJYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcywgcGh5X2ZsYWdzKTsKIH0KIAogdm9pZCBibngyeF9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC03NDksMTIgKzc4NywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGJueDJ4X2dldF9lbWFjX2Jhc2UodTMyIGV4dF9waHlfdHlwZSwgdTggcG9ydCkKK3N0YXRpYyB1MzIgYm54MnhfZ2V0X2VtYWNfYmFzZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZXh0X3BoeV90eXBlLCB1OCBwb3J0KQogewogCXUzMiBlbWFjX2Jhc2U7CiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6Ci0JCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzA7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkvKiBBbGwgTURDL01ESU8gaXMgZGlyZWN0ZWQgdGhyb3VnaCBzaW5nbGUgRU1BQyAqLworCQlpZiAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkpCisJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMwOworCQllbHNlCisJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMxOwogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCWVtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfRU1BQzAgOiBHUkNCQVNFX0VNQUMxOwpAQCAtNzcyLDExICs4MTUsMTIgQEAKIHsKIAl1MzIgdG1wLCBzYXZlZF9tb2RlOwogCXU4IGksIHJjID0gMDsKLQl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShleHRfcGh5X3R5cGUsIHBvcnQpOworCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGJwLCBleHRfcGh5X3R5cGUsIHBvcnQpOwogCiAJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CiAJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgogCSAqLworCiAJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwogCXRtcCA9IHNhdmVkX21vZGUgJiB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7CkBAIC04NDEsMTAgKzg4NSwxMSBAQAogCXUxNiBpOwogCXU4IHJjID0gMDsKIAotCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGV4dF9waHlfdHlwZSwgcG9ydCk7CisJdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoYnAsIGV4dF9waHlfdHlwZSwgcG9ydCk7CiAJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CiAJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgogCSAqLworCiAJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwogCXZhbCA9IHNhdmVkX21vZGUgJiAoKEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCkpOwpAQCAtOTY3LDYgKzEwMTIsOCBAQAogCQkJICAgICAgKG1paV9jb250cm9sIHwKIAkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKTsKIAorCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CisKIAkvKiB3YWl0IGZvciB0aGUgcmVzZXQgdG8gc2VsZiBjbGVhciAqLwogCWZvciAoaSA9IDA7IGkgPCBNRElPX0FDQ0VTU19USU1FT1VUOyBpKyspIHsKIAkJdWRlbGF5KDUpOwpAQCAtMTE1Niw2MiArMTIwMyw5IEBACiAJCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAogCQkJICAgICAgcmVnX3ZhbCk7CiAKLQkvKiBFbmFibGUgQ2xhdXNlIDczIEFuZWcgKi8KLQlpZiAoKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCi0JICAgIChTVVBQT1JUX0NMNzMpKSB7Ci0JCS8qIEVuYWJsZSBCQU0gU3RhdGlvbiBNYW5hZ2VyICovCisJLyogQ0w3MyBBdXRvbmVnIERpc2FibGVkICovCisJcmVnX3ZhbCA9IDA7CiAKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSwKLQkJCQkgICAoTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4gfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fU1RBVElPTl9NTkdSX0VOIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX05QX0FGVEVSX0JQX0VOKSk7Ci0KLQkJLyogTWVyZ2UgQ0w3MyBhbmQgQ0wzNyBhbmVnIHJlc29sdXRpb24gKi8KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKLQkJCQkgICAgICAmcmVnX3ZhbCk7Ci0KLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDMsCi0JCQkocmVnX3ZhbCB8Ci0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzX1VTRV9DTDczX0hDRF9NUikpOwotCi0JCS8qIFNldCB0aGUgQ0w3MyBBTiBzcGVlZCAqLwotCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwgJnJlZ192YWwpOwotCQkvKiBJbiB0aGUgU2VyRGVzIHdlIHN1cHBvcnQgb25seSB0aGUgMUcuCi0JCSAgIEluIHRoZSBYR1hTIHdlIHN1cHBvcnQgdGhlIDEwRyBLWDQKLQkJICAgYnV0IHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCB0aGUgS1IgKi8KLQkJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7Ci0JCQkvKiAxMEcgS1g0ICovCi0JCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQ7Ci0JCX0gZWxzZSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlc1xuIik7Ci0JCQkvKiAxMDAwTSBLWCAqLwotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMDAwTV9LWDsKLQkJfQotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsIHJlZ192YWwpOwotCi0JCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCi0JCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKLQl9IGVsc2UgewotCQkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KLQkJcmVnX3ZhbCA9IDA7Ci0JfQogCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKQEAgLTEzNDQsNDQgKzEzMzgsMjUgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbWlpX2NvbnRyb2w7CiAJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9yZXN0YXJ0X2F1dG9uZWdcbiIpOwotCWlmIChTVVBQT1JUX0NMNzMpIHsKLQkJLyogZW5hYmxlIGFuZCByZXN0YXJ0IGNsYXVzZSA3MyBhbmVnICovCi0JCXUxNiBhbl9jdHJsOworCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBCQU0vQ0wzNyBhbmVnICovCiAKLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCi0JCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCi0JCQkJICAmYW5fY3RybCk7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQlNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAotCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJCShhbl9jdHJsIHwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTiB8Ci0JCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfUkVTVEFSVF9BTikpOwotCi0JfSBlbHNlIHsKLQkJLyogRW5hYmxlIGFuZCByZXN0YXJ0IEJBTS9DTDM3IGFuZWcgKi8KLQkJdTE2IG1paV9jb250cm9sOwotCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAgICAgJm1paV9jb250cm9sKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgImJueDJ4X3Jlc3RhcnRfYXV0b25lZyBtaWlfY29udHJvbCBiZWZvcmUgPSAweCV4XG4iLAotCQkJIG1paV9jb250cm9sKTsKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICAgICAobWlpX2NvbnRyb2wgfAotCQkJCU1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKLQl9CisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgICZtaWlfY29udHJvbCk7CisJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAiYm54MnhfcmVzdGFydF9hdXRvbmVnIG1paV9jb250cm9sIGJlZm9yZSA9IDB4JXhcbiIsCisJCSBtaWlfY29udHJvbCk7CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgIChtaWlfY29udHJvbCB8CisJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKKwkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3Moc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC0xNzI2LDcgKzE3MDEsMTEgQEAKIAkJICAgICgoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KIAkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8CiAJCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KLQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSkpIHsKKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKKwkJICAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSkpIHsKIAkJCXZhcnMtPmF1dG9uZWcgPSBBVVRPX05FR19FTkFCTEVEOwogCiAJCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7CkBAIC0xNzcwLDM4ICsxNzQ5LDQ0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfc2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiBscF91cDI7CiAJdTE2IHR4X2RyaXZlcjsKKwl1MTYgYmFuazsKIAogCS8qIHJlYWQgcHJlY29tcCAqLwotCiAJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1JFR19CQU5LX09WRVJfMUcsCiAJCQkgICAgICBNRElPX09WRVJfMUdfTFBfVVAyLCAmbHBfdXAyKTsKIAotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19UWDAsCi0JCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsICZ0eF9kcml2ZXIpOwotCiAJLyogYml0cyBbMTA6N10gYXQgbHBfdXAyLCBwb3NpdGlvbmVkIGF0IFsxNToxMl0gKi8KIAlscF91cDIgPSAoKChscF91cDIgJiBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX01BU0spID4+CiAJCSAgIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfU0hJRlQpIDw8CiAJCSAgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUKTsKIAotCWlmICgobHBfdXAyICE9IDApICYmCi0JICAgIChscF91cDIgIT0gKHR4X2RyaXZlciAmIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLKSkpIHsKLQkJLyogcmVwbGFjZSB0eF9kcml2ZXIgYml0cyBbMTU6MTJdICovCi0JCXR4X2RyaXZlciAmPSB+TURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0s7Ci0JCXR4X2RyaXZlciB8PSBscF91cDI7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJaWYgKGxwX3VwMiA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1RYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1RYMSAtIE1ESU9fUkVHX0JBTktfVFgwKSkgeworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19UWDAsCi0JCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCB0eF9kcml2ZXIpOworCQkJCSAgICAgIGJhbmssCisJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCAmdHhfZHJpdmVyKTsKKworCQkvKiByZXBsYWNlIHR4X2RyaXZlciBiaXRzIFsxNToxMl0gKi8KKwkJaWYgKGxwX3VwMiAhPQorCQkgICAgKHR4X2RyaXZlciAmIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLKSkgeworCQkJdHhfZHJpdmVyICY9IH5NRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSzsKKwkJCXR4X2RyaXZlciB8PSBscF91cDI7CisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBiYW5rLAorCQkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsIHR4X2RyaXZlcik7CisJCX0KIAl9CiB9CiAKQEAgLTE5MDIsNiArMTg4NywyNSBAQAogCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4YTA0MCk7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCQkvKiBVbnNldCBMb3cgUG93ZXIgTW9kZSBhbmQgU1cgcmVzZXQgKi8KIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwpAQCAtMTkxOSw5ICsxOTIzLDYgQEAKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCQl7Ci0JCQl1MTYgZW1hY19iYXNlOwotCQkJZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMwIDoKLQkJCQkJR1JDQkFTRV9FTUFDMTsKIAogCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCiAJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLApAQCAtMTk0OSw2ICsxOTUwLDIzIEBACiAKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDE8PDE1KTsKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWRcbiIpOwogCQkJYnJlYWs7CkBAIC0xOTgwLDYgKzE5OTgsMzEgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICB1MzIgc2htZW1fYmFzZSwgdTMyIHNwaXJvbV92ZXIpCit7CisJRFAoTkVUSUZfTVNHX0xJTkssICJGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwKKwkJICh1MTYpKHNwaXJvbV92ZXI+PjE2KSwgKHUxNilzcGlyb21fdmVyKTsKKwlSRUdfV1IoYnAsIHNobWVtX2Jhc2UgKworCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJICAgIHBvcnRfbWJbcG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSwKKwkJCXNwaXJvbV92ZXIpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkciwKKwkJCQkgICAgdTMyIHNobWVtX2Jhc2UpCit7CisJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZmd192ZXIyKTsKKwlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LCBzaG1lbV9iYXNlLAorCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwpAQCAtMTk4OCw3ICsyMDMxLDYgQEAKIAkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KIAkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCXUxNiBmd192ZXIxLCBmd192ZXIyOwogCiAJLyogTmVlZCB0byB3YWl0IDIwMG1zIGFmdGVyIHJlc2V0ICovCiAJbXNsZWVwKDIwMCk7CkBAIC0yMDI0LDE0ICsyMDY2LDEwIEBACiAJLyogV2FpdCAxMDBtcyAqLwogCW1zbGVlcCgxMDApOwogCi0JLyogUHJpbnQgdGhlIFBIWSBGVyB2ZXJzaW9uICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOwotCURQKE5FVElGX01TR19MSU5LLCAiODA3MiBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7CisJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKKwkJCQlleHRfcGh5X3R5cGUsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiB9CiAKIHN0YXRpYyB1OCBibngyeF84MDczX2lzX3Nucl9uZWVkZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCkBAIC0yMDQ5LDcgKzIwODcsNyBAQAogCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAweGM4MDEsICZ2YWwpOworCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnZhbCk7CiAKIAlpZiAodmFsICE9IDEpIHsKIAkJLyogTm8gbmVlZCB0byB3b3JrYXJvdW5kIGluIDgwNzMgQTEgKi8KQEAgLTIwODEsNyArMjExOSw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgPiAwKSB7CiAJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCkBAIC0yMDk3LDcgKzIxMzUsOCBAQAogCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgMHhjODIwLCAmdmFsKTsKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX1NQRUVEX0xJTktfU1RBVFVTLAorCQkJICAgICAgJnZhbCk7CiAJCSAgLyogSWYgYml0IFsxNF0gPSAwIG9yIGJpdCBbMTNdID0gMCwgY29udGludWUgb24gd2l0aAogCQkgICBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gKFhBVUkgd29yay1hcm91bmQgbm90IHJlcXVpcmVkLAogCQkgICAgYXMgdGhlc2UgYml0cyBpbmRpY2F0ZSAyLjVHIG9yIDFHIGxpbmsgdXApLiAqLwpAQCAtMjExNSw3ICsyMTU0LDcgQEAKIAkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCQkJZXh0X3BoeV9hZGRyLAogCQkJCQlNRElPX1BNQV9ERVZBRCwKLQkJCQkJMHhjODQxLCAmdmFsKTsKKwkJCQkJTURJT19QTUFfUkVHXzgwNzNfWEFVSV9XQSwgJnZhbCk7CiAJCQkJaWYgKHZhbCAmICgxPDwxNSkpIHsKIAkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkJCSAgIlhBVUkgd29ya2Fyb3VuZCBoYXMgY29tcGxldGVkXG4iKTsKQEAgLTIxMzMsOSArMjE3Miw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKLQkJCQkJICB1OCBleHRfcGh5X2FkZHIpCisJCQkJCSAgdTggZXh0X3BoeV9hZGRyLCB1MzIgc2htZW1fYmFzZSkKIHsKLQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00gICovCiAJLyogRURDIGdyc3QgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LApAQCAtMjE4NSwxNyArMjIyMyw0OTYgQEAKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CiAKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmZndfdmVyMik7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICI4MDczIEZXIHZlcnNpb24gMHgleDoweCV4XG4iLCBmd192ZXIxLCBmd192ZXIyKTsKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXNobWVtX2Jhc2UpOworfQogCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJLyogTmVlZCB0byB3YWl0IDEwMG1zIGFmdGVyIHJlc2V0ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBTZXQgc2VyaWFsIGJvb3QgY29udHJvbCBmb3IgZXh0ZXJuYWwgbG9hZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCS8qIE1pY3JvIGNvbnRyb2xsZXIgcmUtYm9vdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKworCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIsCisJCSAgICAgICAweDczQTApOworCisJLyogQ2xlYXIgc29mdCByZXNldC4KKwlXaWxsIGF1dG9tYXRpY2FsbHkgcmVzZXQgbWljcm8tY29udHJvbGxlciByZS1ib290ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCisJLyogd2FpdCBmb3IgMTUwbXMgZm9yIG1pY3JvY29kZSBsb2FkICovCisJbXNsZWVwKDE1MCk7CisKKwkvKiBEaXNhYmxlIHNlcmlhbCBib290IGNvbnRyb2wsIHRyaXN0YXRlcyBwaW5zIFNTX04sIFNDSywgTU9TSSwgTUlTTyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKKworCW1zbGVlcCgyMDApOworCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCisJCQkJZXh0X3BoeV90eXBlLAorCQkJCWV4dF9waHlfYWRkciwKKwkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQl1OCBleHRfcGh5X2FkZHIsIHU4IHR4X2VuKQoreworCXUxNiB2YWw7CisJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIHRyYW5zbWl0dGVyIHR4X2VuPSV4IGZvciBwb3J0ICV4XG4iLAorCQkgdHhfZW4sIHBvcnQpOworCS8qIERpc2FibGUvRW5hYmxlIHRyYW5zbWl0dGVyICggVFggbGFzZXIgb2YgdGhlIFNGUCsgbW9kdWxlLikqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAmdmFsKTsKKworCWlmICh0eF9lbikKKwkJdmFsICY9IH4oMTw8MTUpOworCWVsc2UKKwkJdmFsIHw9ICgxPDwxNSk7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgdmFsKTsKK30KKworCitzdGF0aWMgdTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCisJCQkJICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKSB7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHZhbCwgaTsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJaWYgKGJ5dGVfY250ID4gMTYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJSZWFkaW5nIGZyb20gZWVwcm9tIGlzIgorCQkJICAgICIgaXMgbGltaXRlZCB0byAweGZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYnl0ZSBjb3VudCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0JZVEVfQ05ULAorCQkgICAgICAgKGJ5dGVfY250IHwgMHhhMDAwKSk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfTUVNX0FERFIsCisJCSAgICAgICBhZGRyKTsKKworCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsCisJCSAgICAgICAweDJjMGYpOworCisJLyogV2FpdCB1cCB0byA1MDB1cyBmb3IgY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spICE9CisJCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIkdvdCBiYWQgc3RhdHVzIDB4JXggd2hlbiByZWFkaW5nIGZyb20gU0ZQKyBFRVBST01cbiIsCisJCQkgKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCB0aGUgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IGJ5dGVfY250OyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX0JVRiArIGksICZ2YWwpOworCQlvX2J1ZltpXSA9ICh1OCkodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9NQVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUpCisJCQlyZXR1cm4gMDs7CisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X2dldF9zZnBfbW9kdWxlX3R5cGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICB1OCAqbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggdmFsOworCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9VTktOT1dOOworCisJLyogRmlyc3QgY2hlY2sgZm9yIGNvcHBlciBjYWJsZSAqLworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSLAorCQkJCSAgICAgICAxLAorCQkJCSAgICAgICAmdmFsKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBTRlArIG1vZHVsZSBFRVBST00iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUjoKKwl7CisJCXU4IGNvcHBlcl9tb2R1bGVfdHlwZTsKKwkJLyogQ2hlY2sgaWYgaXRzIGFjdGl2ZSBjYWJsZSggaW5jbHVkZXMgU0ZQKyBtb2R1bGUpCisJCW9mIHBhc3NpdmUgY2FibGUqLworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJCSAgICAgICBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQUREUiwKKwkJCQkJICAgICAgIDEsCisJCQkJCSAgICAgICAmY29wcGVyX21vZHVsZV90eXBlKSAhPQorCQkgICAgMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJIkZhaWxlZCB0byByZWFkIGNvcHBlci1jYWJsZS10eXBlIgorCQkJCSIgZnJvbSBTRlArIEVFUFJPTVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgorCQkgICAgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBY3RpdmUgQ29wcGVyIGNhYmxlIGRldGVjdGVkXG4iKTsKKwkJCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9BQ1RJVkVfQ09QUEVSX0NBQkxFOworCQl9IGVsc2UgaWYgKGNvcHBlcl9tb2R1bGVfdHlwZSAmCisJCQlTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfUEFTU0lWRSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiUGFzc2l2ZSBDb3BwZXIiCisJCQkJCSAgICAiIGNhYmxlIGRldGVjdGVkXG4iKTsKKwkJCQkqbW9kdWxlX3R5cGUgPQorCQkJCSAgICAgIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRTsKKwkJfSBlbHNlIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5rbm93biBjb3BwZXItY2FibGUtIgorCQkJCSAgICAgInR5cGUgMHgleCAhISFcbiIsIGNvcHBlcl9tb2R1bGVfdHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQzoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJPcHRpYyBtb2R1bGUgZGV0ZWN0ZWRcbiIpOworCQkqbW9kdWxlX3R5cGUgPSBTRlBfTU9EVUxFX1RZUEVfTEM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gZGV0ZXJtaW5lIG1vZHVsZSB0eXBlIDB4JXggISEhXG4iLAorCQkJIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWQgdGhlIHJlbGV2YW50IGZpZWxkIGZyb20gdGhlIG1vZHVsZSAoIFNGUCsgKSwKKwlhbmQgdmVyaWZ5IGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoaXMgYm9hcmQgKi8KK3N0YXRpYyB1OCBibngyeF92ZXJpZnlfc2ZwX21vZHVsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQl1OCBtb2R1bGVfdHlwZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCAqc3RyX3AsICp0bXBfYnVmOworCXUxNiBpOworCisjZGVmaW5lIENPTVBMSUFOQ0VfU1RSX0NOVCA2CisJdTggKmNvbXBsaWFuY2Vfc3RyW10gPSB7IkJyb2FkY29tIiwgIkpEU1UiLCAiTW9sZXggSW5jIiwgIlBJQ09MSUdIVCIsCisJCSJGSU5JU0FSIENPUlAuICAgIiwgIkFtcGhlbm9sIn07CisJdTggYnVmW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRV07CisJLyogUGFzc2l2ZSBDb3BwZXIgY2FibGVzIGFyZSBhbGxvd2VkIHRvIHBhcnRpY2lwYXRlLAorCXNpbmNlIHRoZSBtb2R1bGUgaXMgaGFyZHdpcmVkIHRvIHRoZSBjb3BwZXIgY2FibGUgKi8KKworCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJOT1QgZW5mb3JjaW5nIG1vZHVsZSB2ZXJpZmljYXRpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobW9kdWxlX3R5cGUgIT0gU0ZQX01PRFVMRV9UWVBFX0xDKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTm8gbmVlZCB0byB2ZXJpZnkgY29wcGVyIGNhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSW4gY2FzZSBvZiBub24gY29wcGVyIGNhYmxlIG9yIEFjdGl2ZSBjb3BwZXIgY2FibGUsCisJCXZlcmlmeSB0aGF0IHRoZSBTRlArIG1vZHVsZSBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIGJvYXJkKi8KKwlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFLAorCQkJCSAgICAgICBidWYpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBWZW5kb3ItTmFtZSBmcm9tIgorCQkJICAgICIgbW9kdWxlIEVFUFJPTVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQ09NUExJQU5DRV9TVFJfQ05UOyBpKyspIHsKKwkJc3RyX3AgPSBjb21wbGlhbmNlX3N0cltpXTsKKwkJdG1wX2J1ZiA9IGJ1ZjsKKwkJd2hpbGUgKCpzdHJfcCkgeworCQkJaWYgKCh1OCkoKnRtcF9idWYpICE9ICh1OCkoKnN0cl9wKSkKKwkJCQlicmVhazsKKwkJCXN0cl9wKys7CisJCQl0bXBfYnVmKys7CisJCX0KKworCQlpZiAoISgqc3RyX3ApKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgTW9kdWxlIHZlcmlmaWVkLCAiCisJCQkJICAgICAiaW5kZXg9JXhcbiIsIGkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJRFAoTkVUSUZfTVNHX0xJTkssICJJbmNvbXBsaWFudCBTRlArIG1vZHVsZS4gRGlzYWJsZSBtb2R1bGUgISEhXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgdTggYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJdTggbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBvcHRpb25zW1NGUF9FRVBST01fT1BUSU9OU19TSVpFXTsKKwl1OCBsaW1pdGluZ19tb2RlOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MTYgY3VyX2xpbWl0aW5nX21vZGU7CisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUsCisJCQkJICAgICAgIG9wdGlvbnMpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBPcHRpb24gZmllbGQgZnJvbSIKKwkJCSAgICAiIG1vZHVsZSBFRVBST01cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbGltaXRpbmdfbW9kZSA9ICEob3B0aW9uc1swXSAmCisJCQkgIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0spOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCSAgICAgICZjdXJfbGltaXRpbmdfbW9kZSk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJDdXJyZW50IExpbWl0aW5nIG1vZGUgaXMgMHgleFxuIiwKKwkJIGN1cl9saW1pdGluZ19tb2RlKTsKKworCWlmIChsaW1pdGluZ19tb2RlICYmCisJICAgIChtb2R1bGVfdHlwZSAhPSBTRlBfTU9EVUxFX1RZUEVfUEFTU0lWRV9DT1BQRVJfQ0FCTEUpKSB7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJNb2R1bGUgb3B0aW9ucyA9IDB4JXguU2V0dGluZyBMSU1JVElORyBNT0RFXG4iLAorCQkJIG9wdGlvbnNbMF0pOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJCSAgICAgICBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSk7CisJfSBlbHNlIHsgLyogTFJNIG1vZGUgKCBkZWZhdWx0ICkqLworCisJCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIG9wdGlvbnMgPSAweCV4LlNldHRpbmcgTFJNIE1PREVcbiIsCisJCQkgb3B0aW9uc1swXSk7CisKKwkJLyogQ2hhbmdpbmcgdG8gTFJNIG1vZGUgdGFrZXMgcXVpdGUgZmV3IHNlY29uZHMuCisJCVNvIGRvIGl0IG9ubHkgaWYgY3VycmVudCBtb2RlIGlzIGxpbWl0aW5nCisJCSggZGVmYXVsdCBpcyBMUk0gKSovCisJCWlmIChjdXJfbGltaXRpbmdfbW9kZSAhPSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSkKKwkJCXJldHVybiAwOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX0xSTV9NT0RFLAorCQkJICAgICAgIDApOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJCSAgICAgICAweDEyOCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDAsCisJCQkgICAgICAgMHg0MDA4KTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTFJNX01PREUsCisJCQkgICAgICAgMHhhYWFhKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXU4IHZhbDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdGltZW91dDsKKwkvKiBJbml0aWFsaXphdGlvbiB0aW1lIGFmdGVyIGhvdC1wbHVnIG1heSB0YWtlIHVwIHRvIDMwMG1zIGZvciBzb21lCisJcGh5cyB0eXBlICggZS5nLiBKRFNVICkgKi8KKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNjA7IHRpbWVvdXQrKykgeworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIDEsIDEsICZ2YWwpCisJCSAgICA9PSAwKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGluaXRpYWxpemF0aW9uICIKKwkJCQkgICAgICJ0b29rICVkIG1zXG4iLCB0aW1lb3V0ICogNSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltc2xlZXAoNSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdTggYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggbW9kdWxlX3R5cGU7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgZGV0ZWN0aW9uIGlzIG5vdCByZXF1aXJlZCAiCisJCQkgICAgImZvciB0aGlzIHBoeVxuIik7CisJCXJldHVybiAwOworCX0KKworCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgcGx1Z2dlZCBpbi9vdXQgZGV0ZWN0ZWQgb24gcG9ydCAlZFxuIiwKKwkJIHBhcmFtcy0+cG9ydCk7CisKKwlpZiAoYm54MnhfZ2V0X3NmcF9tb2R1bGVfdHlwZShwYXJhbXMsCisJCQkJICAgICZtb2R1bGVfdHlwZSkgIT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byBnZXQgdmFsaWQgbW9kdWxlIHR5cGVcbiIpOworCQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJICAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwkJCS8qIEluIGNhc2UgbW9kdWxlIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgaXQgdHJ5cyB0bworCQkJbGluayB1cC4gVGhlIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiBoZXJlIGlzIExSTSAvCisJCQlMSU1JVElORyBtb2RlIHdoaWNoIHNldCBhY2NvcmRpbmcgdG8gdGhlIG1vZHVsZS10eXBlKi8KKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIHJlYWQgbW9kdWxlLXR5cGUuIgorCQkJCSAgICAiUHJvYmFibHkgZHVlIHRvIEJpdCBTdHJldGNoaW5nLiIKKwkJCQkgICAgIiBQcm9jZWVkaW5nLi4uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChibngyeF92ZXJpZnlfc2ZwX21vZHVsZShwYXJhbXMsIG1vZHVsZV90eXBlKSAhPQorCQkgICAwKSB7CisJCS8qIGNoZWNrIFNGUCsgbW9kdWxlIGNvbXBhdGliaWxpdHkgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgdmVyaWZpY2F0aW9uIGZhaWxlZCEhXG4iKTsKKwkJLyogVHVybiBvbiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwYXJhbXMtPnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCisJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkvKiBDaGVjayBhbmQgc2V0IGxpbWl0aW5nIG1vZGUgLyBMUk0gbW9kZSAqLworCWJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUocGFyYW1zLCBtb2R1bGVfdHlwZSk7CisKKwkvKiBFbmFibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlICovCisJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgZXh0X3BoeV9hZGRyLCAxKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTMyIGdwaW9fdmFsOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJLyogU2V0IHZhbGlkIG1vZHVsZSBsZWQgb2ZmICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAorCQkJICBwYXJhbXMtPnBvcnQpOworCisJLyogR2V0IGN1cnJlbnQgZ3BpbyB2YWwgcmVmZWxlY3RpbmcgbW9kdWxlIHBsdWdnZWQgaW4gLyBvdXQqLworCWdwaW9fdmFsID0gYm54MnhfZ2V0X2dwaW8oYnAsICBNSVNDX1JFR0lTVEVSU19HUElPXzMsIHBvcnQpOworCisJLyogQ2FsbCB0aGUgaGFuZGxpbmcgZnVuY3Rpb24gaW4gY2FzZSBtb2R1bGUgaXMgZGV0ZWN0ZWQgKi8KKwlpZiAoZ3Bpb192YWwgPT0gMCkgeworCisJCWJueDJ4X3NldF9ncGlvX2ludChicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFIsCisJCQkJICAgICAgcG9ydCk7CisKKwkJaWYgKGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQocGFyYW1zKQorCQkgICAgPT0gMCkKKwkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKKwl9IGVsc2UgeworCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVCwKKwkJCQkgICAgICBwb3J0KTsKKwkJLyogTW9kdWxlIHdhcyBwbHVnZ2VkIG91dC4gKi8KKwkJLyogRGlzYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgKi8KKwkJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgIGV4dF9waHlfYWRkciwgMCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDd4X2ZvcmNlXzEwRyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKQEAgLTIyMzksNyArMjc1Niw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgPT0gMCkgewogCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCkBAIC0yMzc3LDMxICsyODk0LDQwIEBACiAJCSAgICAgICBNRElPX0FOX0RFVkFELAogCQkgICAgICAgTURJT19BTl9SRUdfQURWX1BBVVNFLCB2YWwpOwogfQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXUxNiBiYW5rLCBpID0gMDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAorCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfUlgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1JYMS1NRElPX1JFR19CQU5LX1JYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19SWDBfUlhfRVFfQk9PU1QsCisJCQkJCSAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfcnhbaV0pOworCX0KKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfVFgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19UWDEgLSBNRElPX1JFR19CQU5LX1RYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLAorCQkJCQkgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4W2ldKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAogCQkJCXN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKIAlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpIHsKLQkJdTE2IGJhbmssIHJ4X2VxOwotCi0JCXJ4X2VxID0gKChwYXJhbXMtPnNlcmRlc19jb25maWcgJgotCQkJICBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLKSA+PgotCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUKTsKLQotCQlEUChORVRJRl9NU0dfTElOSywgInNldHRpbmcgcnggZXEgdG8gMHgleFxuIiwgcnhfZXEpOwotCQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1JYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYX0FMTDsKLQkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEtTURJT19SRUdfQkFOS19SWDApKSB7Ci0JCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcG9ydCwKLQkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkJICAgICAgYmFuayAsCi0JCQkJCSAgICAgIE1ESU9fUlgwX1JYX0VRX0JPT1NULAotCQkJCQkgICAgICAoKHJ4X2VxICYKLQkJCQlNRElPX1JYMF9SWF9FUV9CT09TVF9FUVVBTElaRVJfQ1RSTF9NQVNLKSB8Ci0JCQkJTURJT19SWDBfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwpKTsKLQkJfQorCQlpZiAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgorCQkgICAgKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKQorCQkJYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHBhcmFtcyk7CiAKIAkJLyogZm9yY2VkIHNwZWVkIHJlcXVlc3RlZD8gKi8KIAkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgIT0gU1BFRURfQVVUT19ORUcpIHsKQEAgLTI1MDYsMTIgKzMwMzIsNTMgQEAKIAkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgICBNRElPX1dJU19ERVZBRCwKIAkJCQkgICAgICAgTURJT19XSVNfUkVHX0xBU0lfQ05UTCwgMHgxKTsKKworCQkJLyogQkNNODcwNSBkb2Vzbid0IGhhdmUgbWljcm9jb2RlLCBoZW5jZSB0aGUgMCAqLworCQkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKLQotCQkJbXNsZWVwKDEwKTsKKwkJCS8qIFdhaXQgdW50aWwgZncgaXMgbG9hZGVkICovCisJCQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOworCQkJCWlmICh2YWwpCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxMCk7CisJCQl9CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNiBpcyBpbml0aWFsaXplZCAiCisJCQkJImFmdGVyICVkIG1zXG4iLCBjbnQpOworCQkJaWYgKChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpIHsKKwkJCQl1OCBpOworCQkJCXUxNiByZWc7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlyZWcgPSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwICsKKwkJCQkJCWkqKE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDEgLQorCQkJCQkJICAgTURJT19YU184NzA2X1JFR19CQU5LX1JYMCk7CisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19YU19ERVZBRCwKKwkJCQkJCSAgICAgIHJlZywgJnZhbCk7CisJCQkJCS8qIENsZWFyIGZpcnN0IDMgYml0cyBvZiB0aGUgY29udHJvbCAqLworCQkJCQl2YWwgJj0gfjB4NzsKKwkJCQkJLyogU2V0IGNvbnRyb2wgYml0cyBhY2NvcmRpbmcgdG8KKwkJCQkJY29uZmlndWF0aW9uICovCisJCQkJCXZhbCB8PSAocGFyYW1zLT54Z3hzX2NvbmZpZ19yeFtpXSAmCisJCQkJCQkweDcpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgUlgiCisJCQkJCQkgIkVxdWFsaXplciB0byBCQ004NzA2IHJlZyAweCV4IgorCQkJCQkJICIgPC0tIHZhbCAweCV4XG4iLCByZWcsIHZhbCk7CisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJCQkgICAgICAgcmVnLCB2YWwpOworCQkJCX0KKwkJCX0KIAkJCS8qIEZvcmNlIHNwZWVkICovCiAJCQkvKiBGaXJzdCBlbmFibGUgTEFTSSAqLwogCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LApAQCAtMjU3OCw5ICszMTQ1LDk1IEBACiAJCQkJCSAgICAgICAweDEyMDApOwogCiAJCQl9Ci0KKwkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbml0aWFsaXppbmcgQkNNODcyNlxuIik7CisJCQlibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHBhcmFtcyk7CiAKKwkJCS8qIE5lZWQgdG8gY2FsbCBtb2R1bGUgZGV0ZWN0ZWQgb24gaW5pdGlhbGl6YXRpb24gc2luY2UKKwkJCXRoZSBtb2R1bGUgZGV0ZWN0aW9uIHRyaWdnZXJlZCBieSBhY3R1YWwgbW9kdWxlCisJCQlpbnNlcnRpb24gbWlnaHQgb2NjdXIgYmVmb3JlIGRyaXZlciBpcyBsb2FkZWQsIGFuZCB3aGVuCisJCQlkcml2ZXIgaXMgbG9hZGVkLCBpdCByZXNldCBhbGwgcmVnaXN0ZXJzLCBpbmNsdWRpbmcgdGhlCisJCQl0cmFuc21pdHRlciAqLworCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKKwkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgZm9yY2VcbiIpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweDQwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweEQpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4NSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCSAgICAgICAweDQwMCk7CisJCQl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09CisJCQkJICAgIFNQRUVEX0FVVE9fTkVHKSAmJgorCQkJCSAgICgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKSkpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgY2xhdXNlMzcgXG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0FEViwgMHgyMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0NMNzMsIDB4MDQwYyk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xELCAweDAwMjApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMDAwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIDB4MTIwMCk7CisKKwkJCQkvKiBFbmFibGUgUlgtQUxBUk0gY29udHJvbCB0byByZWNlaXZlCisJCQkJaW50ZXJydXB0IGZvciAxRyBzcGVlZCBjaGFuZ2UgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDQpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCQkgICAgICAgMHg0MDApOworCisJCQl9IGVsc2UgeyAvKiBEZWZhdWx0IDEwRy4gU2V0IG9ubHkgTEFTSSBjb250cm9sICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMSk7CisJCQl9CisKKwkJCS8qIFNldCBUWCBQcmVFbXBoYXNpcyBpZiBuZWVkZWQgKi8KKwkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFRYX0NUUkwxIDB4JXgsIgorCQkJCQkgIlRYX0NUUkwyIDB4JXhcbiIsCisJCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMSwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0pOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMiwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQl7CkBAIC0yNjI3LDcgKzMyODAsNyBAQAogCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgMHhjYTEzLAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLAogCQkJCSAgICAgICZ0bXAxKTsKIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0yNjk0LDcgKzMzNDcsNyBAQAogCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgMHg4MzI5LCAmdG1wMSk7CisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgJnRtcDEpOwogCiAJCQkJaWYgKCgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCiAJCQkJICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8yXzVHKSAmJgpAQCAtMjcwOCw3ICszMzYxLDcgQEAKIAkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCQkJCSBleHRfcGh5X2FkZHIsCiAJCQkJCSBNRElPX1BNQV9ERVZBRCwKLQkJCQkJIDB4YzgwMSwgJnBoeV92ZXIpOworCQkJCQkgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZwaHlfdmVyKTsKIAkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZGQgMi41R1xuIik7CiAJCQkJCWlmIChwaHlfdmVyID4gMCkKIAkJCQkJCXRtcDEgfD0gMTsKQEAgLTI3MjMsNyArMzM3Niw3IEBACiAJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgMHg4MzI5LCB0bXAxKTsKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgdG1wMSk7CiAJCQl9CiAKIAkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIElJICovCkBAIC0yNzk4LDYgKzM0NTEsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQl7CisJCQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAkJCURQKE5FVElGX01TR19MSU5LLAogCQkJCSJTZXR0aW5nIHRoZSBTRlg3MTAxIExBU0kgaW5kaWNhdGlvblxuIik7CiAKQEAgLTI4MjcsNiArMzQ4Miw1MCBAQAogCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCiAJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisKKwkJCS8qIFNhdmUgc3Bpcm9tIHZlcnNpb24gKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmZndfdmVyMSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIyLCAmZndfdmVyMik7CisKKwkJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24ocGFyYW1zLT5icCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLAorCQkJCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7CisKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSJTZXR0aW5nIHRoZSBCQ004NDgxIExBU0kgY29udHJvbFxuIik7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDEpOworCisJCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICBNRElPX0FOX1JFR19DVFJMLCAmdmFsKTsKKwkJCXZhbCB8PSAweDIwMDsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisKKwkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CisKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywKQEAgLTI5MTAsMzggKzM2MDksNDMgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYvODcyNlxuIik7CisJCQkvKiBDbGVhciBSWCBBbGFybSovCiAJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX0FMQVJNLAorCQkJCSAgICAgICZ2YWwyKTsKKwkJCS8qIGNsZWFyIExBU0kgaW5kaWNhdGlvbiovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2Lzg3MjYgTEFTSSBzdGF0dXMgMHgleC0tPiIKKwkJCQkgICAgICIweCV4XG4iLCB2YWwxLCB2YWwyKTsKIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7CisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19SWF9TRCwKKwkJCQkgICAgICAmcnhfc2QpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOwogCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfU0QsICZyeF9zZCk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCQkgICAgICBNRElPX1BDU19SRUdfU1RBVFVTLCAmcGNzX3N0YXR1cyk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsICZ2YWwyKTsKLQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IHJ4X3NkIDB4JXgiCisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYvODcyNiByeF9zZCAweCV4IgogCQkJICAgIiAgcGNzX3N0YXR1cyAweCV4IDFHYnBzIGxpbmtfc3RhdHVzIDB4JXhcbiIsCiAJCQkgICByeF9zZCwgcGNzX3N0YXR1cywgdmFsMik7CiAJCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4X3NkIGFuZApAQCAtMjk1MSwxOSArMzY1NSwzMSBAQAogCQkJZXh0X3BoeV9saW5rX3VwID0gKChyeF9zZCAmIHBjc19zdGF0dXMgJiAweDEpIHx8CiAJCQkJCSAgICh2YWwyICYgKDE8PDEpKSk7CiAJCQlpZiAoZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJaWYgKGV4dF9waHlfdHlwZSA9PQorCQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgeworCQkJCQkvKiBJZiB0cmFuc21pdHRlciBpcyBkaXNhYmxlZCwKKwkJCQkJaWdub3JlIGZhbHNlIGxpbmsgdXAgaW5kaWNhdGlvbiAqLworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkJCQkJICAgJnZhbDEpOworCQkJCQlpZiAodmFsMSAmICgxPDwxNSkpIHsKKwkJCQkJCURQKE5FVElGX01TR19MSU5LLCAiVHggaXMgIgorCQkJCQkJCSAgICAiZGlzYWJsZWRcbiIpOworCQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCiAJCQkJaWYgKHZhbDIgJiAoMTw8MSkpCiAJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwogCQkJCWVsc2UKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJfQogCi0JCQkvKiBjbGVhciBMQVNJIGluZGljYXRpb24qLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmdmFsMik7CiAJCQlicmVhazsKLQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJewpAQCAtMzAxOCw3ICszNzM0LDcgQEAKIAkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIDB4Y2ExMywKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKIAkJCQkgICAgICAmdmFsMSk7CiAKIAkJCS8qIENoZWNrIHRoZSBMQVNJICovCkBAIC0zMDYzLDE3ICszNzc5LDE3IEBACiAJCQkJCX0KIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkJICAgICAgMHg4MzA0LAotCQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCiAJCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0zMDkwLDcgKzM4MDYsNyBAQAogCQkJCQkgICAgICJhbl9saW5rX3N0YXR1cz0weCV4XG4iLAogCQkJCQkgIHZhbDIsIHZhbDEsIGFuMTAwMF9zdGF0dXMpOwogCi0JCQkJCWV4dF9waHlfbGlua191cCA9ICgoKHZhbDEgJiA0KSA9PSA0KSB8fAorCQkJCWV4dF9waHlfbGlua191cCA9ICgoKHZhbDEgJiA0KSA9PSA0KSB8fAogCQkJCQkJKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpKTsKIAkJCQlpZiAoZXh0X3BoeV9saW5rX3VwICYmCiAJCQkJICAgIGJueDJ4XzgwNzNfaXNfc25yX25lZWRlZChwYXJhbXMpKSB7CkBAIC0zMTE4LDExICszODM0LDExIEBACiAKIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICAgIDB4YzgyMCwKLQkJCQkJCSAgICAgICZsaW5rX3N0YXR1cyk7CisJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCisJCQkJCSAgICZsaW5rX3N0YXR1cyk7CiAKIAkJCQkvKiBCaXRzIDAuLjIgLS0+IHNwZWVkIGRldGVjdGVkLAogCQkJCSAgIGJpdHMgMTMuLjE1LS0+IGxpbmsgaXMgZG93biAqLwpAQCAtMzE1NiwxNyArMzg3MiwxNyBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBTZWUgaWYgMUcgbGluayBpcyB1cCBmb3IgdGhlIDgwNzIgKi8KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJCSAgICAgIDB4ODMwNCwKLQkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CiAJCQkJaWYgKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpIHsKIAkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CkBAIC0zMjI2LDcgKzM5NDIsNTMgQEAKIAkJCQkJICh2YWwyICYgKDE8PDE0KSkpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCS8qIENsZWFyIExBU0kgaW50ZXJydXB0ICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIExBU0kgc3RhdHVzIHJlZyA9IDB4JXhcbiIsCisJCQkJIHZhbDEpOwogCisJCQkvKiBDaGVjayAxMEctQmFzZVQgbGluayBzdGF0dXMgKi8KKwkJCS8qIENoZWNrIEdsb2JhbCBQTUQgc2lnbmFsIG9rICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX1NELAorCQkJCSAgICAgICZyeF9zZCk7CisJCQkvKiBDaGVjayBQQ1MgYmxvY2sgbG9jayAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIDEuYSA9IDB4JXgsIDEuMjAgPSAweCV4XG4iLAorCQkJCSByeF9zZCwgcGNzX3N0YXR1cyk7CisJCQlpZiAocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB7CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQl9IGVsc2UgeworCisJCQkJLyogQ2hlY2sgMTAwMC1CYXNlVCBsaW5rIHN0YXR1cyAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwgMHhGRkUxLAorCQkJCQkgICAgICAmdmFsMSk7CisKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsIDB4RkZFMSwKKwkJCQkJICAgICAgJnZhbDIpOworCQkJCURQKE5FVElGX01TR19MSU5LLCAiODQ4MSA3LkZGRTEgPSIKKwkJCQkJICAgICAiMHgleC0tPjB4JXhcbiIsIHZhbDEsIHZhbDIpOworCQkJCWlmICh2YWwyICYgKDE8PDIpKSB7CisJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCiAJCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKQEAgLTM0MjYsNyArNDE4OCw3IEBACiAJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCSAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAotCQkJICAgICAgICZjdHJsKTsKKwkJCSAgICAgICZjdHJsKTsKIAkJaWYgKCEoY3RybCAmICgxPDwxNSkpKSB7CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlJlc2V0IGNvbXBsZXRlZFxuXG4iKTsKIAkJCQlicmVhazsKQEAgLTM0NTIsOTEgKzQyMTQsMzkgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZXh0X3BoeV90eXBlID0gMDsKLQl1MTYgdmFsID0gMDsKLQl1OCBleHRfcGh5X2FkZHIgPSAwIDsKKwl1MzIgc3Bpcm9tX3ZlciA9IDA7CiAJdTggc3RhdHVzID0gMCA7Ci0JdTMyIHZlcl9udW07CiAKIAlpZiAodmVyc2lvbiA9PSBOVUxMIHx8IHBhcmFtcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXNwaXJvbV92ZXIgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwYXJhbXMtPnBvcnRdLmV4dF9waHlfZndfdmVyc2lvbikpOworCiAJLyogcmVzZXQgdGhlIHJldHVybmVkIHZhbHVlIHRvIHplcm8gKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAKIAkJaWYgKGxlbiA8IDUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBUYWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb25fZWYoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCS8qICB3YWl0IGZvciAxbXMgKi8KLQkJbXNsZWVwKDEpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmdmFsKTsKLQkJdmVyc2lvblsyXSA9ICh2YWwgJiAweEZGKTsKLQkJdmVyc2lvblszXSA9ICgodmFsICYgMHhGRjAwKT4+OCk7Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwKLQkJCSAgICAgICZ2YWwpOwotCQl2ZXJzaW9uWzBdID0gKHZhbCAmIDB4RkYpOwotCQl2ZXJzaW9uWzFdID0gKCh2YWwgJiAweEZGMDApPj44KTsKKwkJdmVyc2lvblswXSA9IChzcGlyb21fdmVyICYgMHhGRik7CisJCXZlcnNpb25bMV0gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMCkgPj4gODsKKwkJdmVyc2lvblsyXSA9IChzcGlyb21fdmVyICYgMHhGRjAwMDApID4+IDE2OworCQl2ZXJzaW9uWzNdID0gKHNwaXJvbV92ZXIgJiAweEZGMDAwMDAwKSA+PiAyNDsKIAkJdmVyc2lvbls0XSA9ICdcMCc7CiAKLQkJaWYgKCFkcml2ZXJfbG9hZGVkKQotCQkJYm54MnhfdHVybl9vZmZfc2YoYnAsIHBhcmFtcy0+cG9ydCk7CiAJCWJyZWFrOwogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JewotCQkvKiBUYWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb25fZWYoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7Ci0JCXZlcl9udW0gPSB2YWw8PDE2OwotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOwotCQl2ZXJfbnVtIHw9IHZhbDsKLQkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3Zlcih2ZXJfbnVtLCB2ZXJzaW9uLCBsZW4pOwotCQlicmVhazsKLQl9CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOwotCQl2ZXJfbnVtID0gdmFsPDwxNjsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmdmFsKTsKLQkJdmVyX251bSB8PSB2YWw7Ci0JCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIodmVyX251bSwgdmVyc2lvbiwgbGVuKTsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHNwaXJvbV92ZXIsIHZlcnNpb24sIGxlbik7CiAJCWJyZWFrOwotCiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CiAJCWJyZWFrOwogCkBAIC0zNjM2LDYgKzQzNDYsMTQgQEAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJleHRfcGh5X2xvb3BiYWNrOiA4NzA2XG4iKTsKIAkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlBNQS9QTUQgZXh0X3BoeV9sb29wYmFjazogODcyNlxuIik7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDB4MDAwMSk7CisJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJLyogU0ZYNzEwMV9YR1hTX1RFU1QxICovCiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKQEAgLTM5MDYsMTEgKzQ2MjQsMTMgQEAKIAogCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCiAJbm9uX2V4dF9waHkgPSAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKTsKKwkJICAgICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkpOwogCiAJaWYgKG5vbl9leHRfcGh5IHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkpIHsKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHx8CisJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkgfHwKKwkgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSkgewogCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKIAkJCWJueDJ4X3NldF9wYXJhbGxlbF9kZXRlY3Rpb24ocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOwogCQlibngyeF9pbml0X2ludGVybmFsX3BoeShwYXJhbXMsIHZhcnMpOwpAQCAtNDEwNCw2ICs0ODI0LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgYWRkcmVzcyA9IDB4JXhcbiIsIHBhcmFtcy0+cGh5X2FkZHIpOwogCiAJCWJueDJ4X2xpbmtfaW5pdGlhbGl6ZShwYXJhbXMsIHZhcnMpOwogCQltc2xlZXAoMzApOwpAQCAtNDExMiw3ICs0ODMzLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCitzdGF0aWMgdm9pZCBibngyeF84NzI2X3Jlc2V0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBleHRfcGh5X2FkZHIpCit7CisJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF84NzI2X3Jlc2V0X3BoeSBwb3J0ICVkXG4iLCBwb3J0KTsKKworCS8qIFNldCBzZXJpYWwgYm9vdCBjb250cm9sIGZvciBleHRlcm5hbCBsb2FkICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLCAweDAwMDEpOworCisJLyogRGlzYWJsZSBUcmFuc21pdHRlciAqLworCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsIDApOworCit9CisKK3U4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCSAgdTggcmVzZXRfZXh0X3BoeSkKIHsKIAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwpAQCAtNDE1MCwyOCArNDg4NywzNyBAQAogCSAqLwogCSAvKiBjbGVhciBsaW5rIGxlZCAqLwogCWJueDJ4X3NldF9sZWQoYnAsIHBvcnQsIExFRF9NT0RFX09GRiwgMCwgaHdfbGVkX21vZGUsIGNoaXBfaWQpOwotCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB7Ci0JCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKSB7Ci0JCQkvKiBIVyByZXNldCAqLwotCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKLQkJCQkJICBwb3J0KTsKLQorCWlmIChyZXNldF9leHRfcGh5KSB7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDgwNzMgcG9ydCAlZCBpbnRvICIKKwkJCQkgImxvdyBwb3dlciBtb2RlXG4iLAorCQkJCSBwb3J0KTsKIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCiAJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAogCQkJCQkgIHBvcnQpOwotCisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQl7CisJCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJCQlibngyeF84NzI2X3Jlc2V0X3BoeShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCS8qIEhXIHJlc2V0ICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKKwkJCQkJICBwb3J0KTsKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAorCQkJCQkgIHBvcnQpOwogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXNldCBleHRlcm5hbCBQSFlcbiIpOwotCQl9IGVsc2UgaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyA4MDczIHBvcnQgJWQgaW50byAiCi0JCQkJCSAibG93IHBvd2VyIG1vZGVcbiIsCi0JCQkJCSBwb3J0KTsKLQkJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCQlNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCi0JCQkJCQkgIHBvcnQpOwogCQl9CiAJfQogCS8qIHJlc2V0IHRoZSBTZXJEZXMvWEdYUyAqLwpAQCAtNDI0OCw3ICs0OTk0LDcgQEAKIAkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewogCQkJaWYgKCEodmFycy0+cGh5X2ZsYWdzICYKIAkJCSAgICAgIFBIWV9TR01JSV9GTEFHKSkKLQkJCQlibngyeF9zZXRfc2dtaWlfdHhfZHJpdmVyKHBhcmFtcyk7CisJCQkJYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHBhcmFtcyk7CiAJCX0KIAl9CiAKQEAgLTQzMzcsNiArNTA4Myw3IEBACiAKIAlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKIAkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSAmJgorCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpICYmCiAJICAgIChleHRfcGh5X2xpbmtfdXAgJiYgIXZhcnMtPnBoeV9saW5rX3VwKSkKIAkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKIApAQCAtNDM5OCw3ICs1MTQ1LDcgQEAKIAkJdTE2IGZ3X3ZlcjE7CiAKIAkJYm54MnhfYmNtODA3M19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSk7CisJCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwgc2htZW1fYmFzZSk7CiAKIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLApAQCAtNDQzNCw3ICs1MTgxLDcgQEAKIAogCS8qIFBBUlQzIC0gY29tcGxldGUgVFhfUE9XRVJfRE9XTiBwcm9jZXNzLCBhbmQgc2V0IEdQSU8yIGJhY2sgdG8gbG93ICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCS8qIFBoYXNlMiBvZiBQT1dFUl9ET1dOX1JFU0VUKi8KKwkJLyogUGhhc2UyIG9mIFBPV0VSX0RPV05fUkVTRVQgKi8KIAkJLyogUmVsZWFzZSBiaXQgMTAgKFJlbGVhc2UgVHggcG93ZXIgZG93bikgKi8KIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAogCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKQEAgLTQ0NjksMTIgKzUyMTYsNTEgQEAKIAogfQogCisKK3N0YXRpYyB1OCBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKK3sKKwl1OCBleHRfcGh5X2FkZHI7CisJdTMyIHZhbDsKKwlzOCBwb3J0OworCS8qIFVzZSBwb3J0MSBiZWNhdXNlIG9mIHRoZSBzdGF0aWMgcG9ydC1zd2FwICovCisJLyogRW5hYmxlIHRoZSBtb2R1bGUgZGV0ZWN0aW9uIGludGVycnVwdCAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJT19FVkVOVF9FTik7CisJdmFsIHw9ICgoMTw8TUlTQ19SRUdJU1RFUlNfR1BJT18zKXwKKwkJKDE8PChNSVNDX1JFR0lTVEVSU19HUElPXzMgKyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQpKSk7CisJUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOLCB2YWwpOworCisJYm54MnhfaHdfcmVzZXQoYnAsIDEpOworCW1zbGVlcCg1KTsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgeworCQkvKiBFeHRyYWN0IHRoZSBleHQgcGh5IGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCisJCXUzMiBleHRfcGh5X2NvbmZpZyA9IFJFR19SRChicCwgc2htZW1fYmFzZSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQlkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7CisKKwkJZXh0X3BoeV9hZGRyID0KKwkJCSgoZXh0X3BoeV9jb25maWcgJgorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI2X2NvbW1vbl9pbml0IDogZXh0X3BoeV9hZGRyID0gMHgleFxuIiwKKwkJCSBleHRfcGh5X2FkZHIpOworCisJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJCS8qIFNldCBmYXVsdCBtb2R1bGUgZGV0ZWN0ZWQgTEVEIG9uICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogdTggYm54MnhfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQogewogCXU4IHJjID0gMDsKIAl1MzIgZXh0X3BoeV90eXBlOwogCi0JRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9jb21tb25faW5pdF9waHlcbiIpOworCURQKE5FVElGX01TR19MSU5LLCAiQmVnaW4gY29tbW9uIHBoeSBpbml0XG4iKTsKIAogCS8qIFJlYWQgdGhlIGV4dF9waHlfdHlwZSBmb3IgYXJiaXRyYXJ5IHBvcnQoMCkgKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRSgKQEAgLTQ0ODgsNiArNTI3NCwxMiBAQAogCQlyYyA9IGJueDJ4XzgwNzNfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJLyogR1BJTzEgYWZmZWN0cyBib3RoIHBvcnRzLCBzbyB0aGVyZSdzIG5lZWQgdG8gcHVsbAorCQlpdCBmb3Igc2luZ2xlIHBvcnQgYWxvbmUgKi8KKwkJcmMgPSBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CisKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkgImJueDJ4X2NvbW1vbl9pbml0X3BoeTogZXh0X3BoeSAweCV4IG5vdCByZXF1aXJlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaAppbmRleCA0N2NiNTg1Li4xOWE4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKy8qIENvcHlyaWdodCAyMDA4LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCiAgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQpAQCAtNjYsOCArNjYsNiBAQAogCS8qIERldmljZSBwYXJhbWV0ZXJzICovCiAJdTggbWFjX2FkZHJbNl07CiAKLQotCiAJLyogc2htZW0gcGFyYW1ldGVycyAqLwogCXUzMiBzaG1lbV9iYXNlOwogCXUzMiBzcGVlZF9jYXBfbWFzazsKQEAgLTc3LDcgKzc1LDYgQEAKICNkZWZpbmUgU1dJVENIX0NGR19BVVRPX0RFVEVDVAlQT1JUX0ZFQVRVUkVfQ09OX1NXSVRDSF9BVVRPX0RFVEVDVAogCiAJdTE2IGh3X2xlZF9tb2RlOyAvKiBwYXJ0IG9mIHRoZSBod19jb25maWcgcmVhZCBmcm9tIHRoZSBzaG1lbSAqLwotCXUzMiBzZXJkZXNfY29uZmlnOwogCXUzMiBsYW5lX2NvbmZpZzsKIAl1MzIgZXh0X3BoeV9jb25maWc7CiAjZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKQkoZXh0X3BoeV9jb25maWcgJiBcCkBAIC04OSw2ICs4NiwxMiBAQAogCiAJLyogcGh5X2FkZHIgcG9wdWxhdGVkIGJ5IHRoZSBDTEMgKi8KIAl1OCBwaHlfYWRkcjsKKwl1MTYgeGd4c19jb25maWdfcnhbNF07IC8qIHByZWVtcGhhc2lzIHZhbHVlcyBmb3IgdGhlIHJ4IHNpZGUgKi8KKworCXUxNiB4Z3hzX2NvbmZpZ190eFs0XTsgLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgdHggc2lkZSAqLworCXUzMiBmZWF0dXJlX2NvbmZpZ19mbGFnczsKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCAoMTw8MCkKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRAkoMjw8MCkKIAkvKiBEZXZpY2UgcG9pbnRlciBwYXNzZWQgdG8gYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCXN0cnVjdCBibngyeCAqYnA7CiB9OwpAQCAtMTI1LDggKzEyOCwxMSBAQAogLyogSW5pdGlhbGl6ZSB0aGUgcGh5ICovCiB1OCBibngyeF9waHlfaW5pdChzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICpvdXRwdXQpOwogCi0vKiBSZXNldCB0aGUgbGluay4gU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGRyaXZlciBvciBpbnRlcmZhY2UgZ29lcyBkb3duICovCi11OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKTsKKy8qIFJlc2V0IHRoZSBsaW5rLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZHJpdmVyIG9yIGludGVyZmFjZSBnb2VzIGRvd24KKyAgIEJlZm9yZSBjYWxsaW5nIHBoeSBmaXJtd2FyZSB1cGdyYWRlLCB0aGUgcmVzZXRfZXh0X3BoeSBzaG91bGQgYmUgc2V0CisgICB0byAwICovCit1OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkgIHU4IHJlc2V0X2V4dF9waHkpOwogCiAvKiBibngyeF9saW5rX3VwZGF0ZSBzaG91bGQgYmUgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KIHU4IGJueDJ4X2xpbmtfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKm91dHB1dCk7CkBAIC0xNjMsNiArMTY5LDEwIEBACiAKIHU4IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X2NvbmZpZywKIAkJICAgICAgdTggZHJpdmVyX2xvYWRlZCwgY2hhciBkYXRhW10sIHUzMiBzaXplKTsKKy8qIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludCBzaG91bGQgYmUgY2FsbGVkIHVwb24gbW9kdWxlIGRldGVjdGlvbgorICAgaW50ZXJydXB0ICovCit2b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcyk7CisKIC8qIEdldCB0aGUgYWN0dWFsIGxpbmsgc3RhdHVzLiBJbiBjYXNlIGl0IHJldHVybnMgMCwgbGluayBpcyB1cCwKIAlvdGhlcndpc2UgbGluayBpcyBkb3duKi8KIHU4IGJueDJ4X3Rlc3RfbGluayhzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKTsKQEAgLTE3MCw0ICsxODAsNSBAQAogLyogT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIGV4dGVybmFsIHBoeSBhZnRlciBwb3dlciB1cCAqLwogdTggYm54MnhfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKTsKIAorCiAjZW5kaWYgLyogQk5YMlhfTElOS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKaW5kZXggZDNlNzc3NS4uMDBhNzhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpAQCAtNTAsMTUgKzUwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvemxpYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgorCiAjaW5jbHVkZSAiYm54MnguaCIKICNpbmNsdWRlICJibngyeF9pbml0LmgiCisjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40NS4yNiIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzAxLzI2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNDguMTA1IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMDMvMDIiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUgkJMHgwNDAyMDAKIAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nICovCkBAIC03MywyNiArNzEsMzIgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CiAKK3N0YXRpYyBpbnQgbXVsdGlfbW9kZSA9IDE7Cittb2R1bGVfcGFyYW0obXVsdGlfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlfbW9kZSwgIiBVc2UgcGVyLUNQVSBxdWV1ZXMiKTsKKwogc3RhdGljIGludCBkaXNhYmxlX3RwYTsKLXN0YXRpYyBpbnQgdXNlX2ludGE7Ci1zdGF0aWMgaW50IHBvbGw7Ci1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLwotc3RhdGljIGludCB1c2VfbXVsdGk7Ci0KIG1vZHVsZV9wYXJhbShkaXNhYmxlX3RwYSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbSh1c2VfaW50YSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3RwYSwgImRpc2FibGUgdGhlIFRQQSAoTFJPKSBmZWF0dXJlIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9pbnRhLCAidXNlIElOVCNBIGluc3RlYWQgb2YgTVNJLVgiKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9sbCwgInVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3RwYSwgIiBEaXNhYmxlIHRoZSBUUEEgKExSTykgZmVhdHVyZSIpOwogCi0jaWZkZWYgQk5YMlhfTVVMVEkKLW1vZHVsZV9wYXJhbSh1c2VfbXVsdGksIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9tdWx0aSwgInVzZSBwZXItQ1BVIHF1ZXVlcyIpOwotI2VuZGlmCitzdGF0aWMgaW50IGludF9tb2RlOworbW9kdWxlX3BhcmFtKGludF9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kZSwgIiBGb3JjZSBpbnRlcnJ1cHQgbW9kZSAoMSBJTlQjeDsgMiBNU0kpIik7CisKK3N0YXRpYyBpbnQgcG9sbDsKK21vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwb2xsLCAiIFVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7CisKK3N0YXRpYyBpbnQgbXJycyA9IC0xOworbW9kdWxlX3BhcmFtKG1ycnMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1ycnMsICIgRm9yY2UgTWF4IFJlYWQgUmVxIFNpemUgKDAuLjMpIChmb3IgZGVidWcpIik7CisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiIERlZmF1bHQgZGVidWcgbXNnbGV2ZWwiKTsKKworc3RhdGljIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLworCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJueDJ4X3dxOwogCiBlbnVtIGJueDJ4X2JvYXJkX3R5cGUgewpAQCAtMjEzLDcgKzIxNyw3IEBACiAJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKIAlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CiAKLQlEUChCTlgyWF9NU0dfT0ZGLCAiZG1hZTogb3Bjb2RlIDB4JTA4eFxuIgorCURQKEJOWDJYX01TR19PRkYsICJETUFFOiBvcGNvZGUgMHglMDh4XG4iCiAJICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCiAJCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgogCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCkBAIC0yMzQsNyArMjM4LDcgQEAKIAkJRFAoQk5YMlhfTVNHX09GRiwgIndiX2NvbXAgMHglMDh4XG4iLCAqd2JfY29tcCk7CiAKIAkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7CisJCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC0yODksNyArMjkzLDcgQEAKIAlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwogCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKIAotCURQKEJOWDJYX01TR19PRkYsICJkbWFlOiBvcGNvZGUgMHglMDh4XG4iCisJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKIAkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKIAkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCiAJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKQEAgLTMwNiw3ICszMTAsNyBAQAogCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7CiAKIAkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7CisJCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC00NjgsNyArNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2Z3X2R1bXAoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgbWFyaywgb2Zmc2V0OwotCXUzMiBkYXRhWzldOworCV9fYmUzMiBkYXRhWzldOwogCWludCB3b3JkOwogCiAJbWFyayA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKyAweGYxMDQpOwpAQCAtNTAyLDgzICs1MDYsMTA0IEBACiAKIAlCTlgyWF9FUlIoImJlZ2luIGNyYXNoIGR1bXAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7Ci0KLQkJQk5YMlhfRVJSKCJxdWV1ZVslZF06IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgotCQkJICAiICB0eF9iZF9wcm9kKCV4KSAgdHhfYmRfY29ucygleCkgICp0eF9jb25zX3NiKCV4KVxuIiwKLQkJCSAgaSwgZnAtPnR4X3BrdF9wcm9kLCBmcC0+dHhfcGt0X2NvbnMsIGZwLT50eF9iZF9wcm9kLAotCQkJICBmcC0+dHhfYmRfY29ucywgbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIHJ4X2JkX3Byb2QoJXgpICByeF9iZF9jb25zKCV4KSIKLQkJCSAgIiAgKnJ4X2JkX2NvbnNfc2IoJXgpICByeF9jb21wX3Byb2QoJXgpIgotCQkJICAiICByeF9jb21wX2NvbnMoJXgpICAqcnhfY29uc19zYigleClcbiIsCi0JCQkgIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfYmRfY29ucywKLQkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9iZF9jb25zX3NiKSwgZnAtPnJ4X2NvbXBfcHJvZCwKLQkJCSAgZnAtPnJ4X2NvbXBfY29ucywgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIHJ4X3NnZV9wcm9kKCV4KSAgbGFzdF9tYXhfc2dlKCV4KSIKLQkJCSAgIiAgZnBfY19pZHgoJXgpICAqc2JfY19pZHgoJXgpICBmcF91X2lkeCgleCkiCi0JCQkgICIgICpzYl91X2lkeCgleCkgIGJkIGRhdGEoJXgsJXgpXG4iLAotCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsIGZwLT5mcF9jX2lkeCwKLQkJCSAgZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCwKLQkJCSAgZnAtPmZwX3VfaWR4LAotCQkJICBmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAotCQkJICBod19wcm9kcy0+cGFja2V0c19wcm9kLCBod19wcm9kcy0+YmRzX3Byb2QpOwotCi0JCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXN0cnVjdCBzd190eF9iZCAqc3dfYmQgPSAmZnAtPnR4X2J1Zl9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoInBhY2tldFsleF09WyVwLCV4XVxuIiwgaiwKLQkJCQkgIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7Ci0JCX0KLQotCQlzdGFydCA9IFRYX0JEKGZwLT50eF9iZF9jb25zIC0gMTApOwotCQllbmQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyArIDI1NCk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqdHhfYmQgPSAodTMyICopJmZwLT50eF9kZXNjX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigidHhfYmRbJXhdPVsleDoleDoleDoleF1cbiIsCi0JCQkJICBqLCB0eF9iZFswXSwgdHhfYmRbMV0sIHR4X2JkWzJdLCB0eF9iZFszXSk7Ci0JCX0KLQotCQlzdGFydCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgLSAxMCk7Ci0JCWVuZCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgKyA1MDMpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnJ4X2JkID0gKHUzMiAqKSZmcC0+cnhfZGVzY19yaW5nW2pdOwotCQkJc3RydWN0IHN3X3J4X2JkICpzd19iZCA9ICZmcC0+cnhfYnVmX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigicnhfYmRbJXhdPVsleDoleF0gIHN3X2JkPVslcF1cbiIsCi0JCQkJICBqLCByeF9iZFsxXSwgcnhfYmRbMF0sIHN3X2JkLT5za2IpOwotCQl9Ci0KLQkJc3RhcnQgPSBSWF9TR0UoZnAtPnJ4X3NnZV9wcm9kKTsKLQkJZW5kID0gUlhfU0dFKGZwLT5sYXN0X21heF9zZ2UpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnJ4X3NnZSA9ICh1MzIgKikmZnAtPnJ4X3NnZV9yaW5nW2pdOwotCQkJc3RydWN0IHN3X3J4X3BhZ2UgKnN3X3BhZ2UgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJyeF9zZ2VbJXhdPVsleDoleF0gIHN3X3BhZ2U9WyVwXVxuIiwKLQkJCQkgIGosIHJ4X3NnZVsxXSwgcnhfc2dlWzBdLCBzd19wYWdlLT5wYWdlKTsKLQkJfQotCi0JCXN0YXJ0ID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgLSAxMCk7Ci0JCWVuZCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zICsgNTAzKTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICpjcWUgPSAodTMyICopJmZwLT5yeF9jb21wX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigiY3FlWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAotCQkJCSAgaiwgY3FlWzBdLCBjcWVbMV0sIGNxZVsyXSwgY3FlWzNdKTsKLQkJfQotCX0KLQorCS8qIEluZGljZXMgKi8KKwkvKiBDb21tb24gKi8KIAlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl94X2lkeCgldSkiCiAJCSAgIiAgZGVmX3RfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKIAkJICAiICBzcHFfcHJvZF9pZHgoJXUpXG4iLAogCQkgIGJwLT5kZWZfY19pZHgsIGJwLT5kZWZfdV9pZHgsIGJwLT5kZWZfeF9pZHgsIGJwLT5kZWZfdF9pZHgsCiAJCSAgYnAtPmRlZl9hdHRfaWR4LCBicC0+YXR0bl9zdGF0ZSwgYnAtPnNwcV9wcm9kX2lkeCk7CiAKKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCUJOWDJYX0VSUigiZnAlZDogcnhfYmRfcHJvZCgleCkgIHJ4X2JkX2NvbnMoJXgpIgorCQkJICAiICAqcnhfYmRfY29uc19zYigleCkgIHJ4X2NvbXBfcHJvZCgleCkiCisJCQkgICIgIHJ4X2NvbXBfY29ucygleCkgICpyeF9jb25zX3NiKCV4KVxuIiwKKwkJCSAgaSwgZnAtPnJ4X2JkX3Byb2QsIGZwLT5yeF9iZF9jb25zLAorCQkJICBsZTE2X3RvX2NwdSgqZnAtPnJ4X2JkX2NvbnNfc2IpLCBmcC0+cnhfY29tcF9wcm9kLAorCQkJICBmcC0+cnhfY29tcF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpKTsKKwkJQk5YMlhfRVJSKCIgICAgICByeF9zZ2VfcHJvZCgleCkgIGxhc3RfbWF4X3NnZSgleCkiCisJCQkgICIgIGZwX3VfaWR4KCV4KSAqc2JfdV9pZHgoJXgpXG4iLAorCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsCisJCQkgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCX0KKworCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7CisKKwkJQk5YMlhfRVJSKCJmcCVkOiB0eF9wa3RfcHJvZCgleCkgIHR4X3BrdF9jb25zKCV4KSIKKwkJCSAgIiAgdHhfYmRfcHJvZCgleCkgIHR4X2JkX2NvbnMoJXgpICAqdHhfY29uc19zYigleClcbiIsCisJCQkgIGksIGZwLT50eF9wa3RfcHJvZCwgZnAtPnR4X3BrdF9jb25zLCBmcC0+dHhfYmRfcHJvZCwKKwkJCSAgZnAtPnR4X2JkX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikpOworCQlCTlgyWF9FUlIoIiAgICAgIGZwX2NfaWR4KCV4KSAgKnNiX2NfaWR4KCV4KSIKKwkJCSAgIiAgYmQgZGF0YSgleCwleClcbiIsIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCisJCQkgIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsIGh3X3Byb2RzLT5iZHNfcHJvZCk7CisJfQorCisJLyogUmluZ3MgKi8KKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJYX0JEKGogKyAxKSkgeworCQkJdTMyICpyeF9iZCA9ICh1MzIgKikmZnAtPnJ4X2Rlc2NfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9iZCAqc3dfYmQgPSAmZnAtPnJ4X2J1Zl9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X2JkWyV4XT1bJXg6JXhdICBzd19iZD1bJXBdXG4iLAorCQkJCSAgaSwgaiwgcnhfYmRbMV0sIHJ4X2JkWzBdLCBzd19iZC0+c2tiKTsKKwkJfQorCisJCXN0YXJ0ID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCk7CisJCWVuZCA9IFJYX1NHRShmcC0+bGFzdF9tYXhfc2dlKTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gUlhfU0dFKGogKyAxKSkgeworCQkJdTMyICpyeF9zZ2UgPSAodTMyICopJmZwLT5yeF9zZ2VfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9wYWdlICpzd19wYWdlID0gJmZwLT5yeF9wYWdlX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCisJCQkJICBpLCBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7CisJCX0KKworCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOworCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJDUV9CRChqICsgMSkpIHsKKwkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IGNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGksIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7CisJCX0KKwl9CisKKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgeworCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcGFja2V0WyV4XT1bJXAsJXhdXG4iLAorCQkJCSAgaSwgaiwgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKKwkJfQorCisJCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7CisJCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gVFhfQkQoaiArIDEpKSB7CisJCQl1MzIgKnR4X2JkID0gKHUzMiAqKSZmcC0+dHhfZGVzY19yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHR4X2JkWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAorCQkJCSAgaSwgaiwgdHhfYmRbMF0sIHR4X2JkWzFdLCB0eF9iZFsyXSwgdHhfYmRbM10pOworCQl9CisJfQorCiAJYm54MnhfZndfZHVtcChicCk7CiAJYm54MnhfbWNfYXNzZXJ0KGJwKTsKIAlCTlgyWF9FUlIoImVuZCBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKQEAgLTU5MCwzNyArNjE1LDQ0IEBACiAJdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOwogCXUzMiB2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOwogCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKKwlpbnQgbXNpID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSA/IDEgOiAwOwogCiAJaWYgKG1zaXgpIHsKLQkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wOworCQl2YWwgJj0gfihIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJCSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCk7CiAJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKKwl9IGVsc2UgaWYgKG1zaSkgeworCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wOworCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAorCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKIAl9IGVsc2UgewogCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKIAotCQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBNU0ktWCAlZFxuIiwKLQkJICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKKwkJICAgdmFsLCBwb3J0LCBhZGRyKTsKIAogCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAKIAkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7CiAJfQogCi0JRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgTVNJLVggJWRcbiIsCi0JICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKwlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBtb2RlICVzXG4iLAorCSAgIHZhbCwgcG9ydCwgYWRkciwgKG1zaXggPyAiTVNJLVgiIDogKG1zaSA/ICJNU0kiIDogIklOVHgiKSkpOwogCiAJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewogCQkvKiBpbml0IGxlYWRpbmcvdHJhaWxpbmcgZWRnZSAqLwogCQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCQl2YWwgPSAoMHhmZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CisJCQl2YWwgPSAoMHhlZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CiAJCQlpZiAoYnAtPnBvcnQucG1mKQotCQkJCS8qIGVuYWJsZSBuaWcgYXR0ZW50aW9uICovCi0JCQkJdmFsIHw9IDB4MDEwMDsKKwkJCQkvKiBlbmFibGUgbmlnIGFuZCBncGlvMyBhdHRlbnRpb24gKi8KKwkJCQl2YWwgfD0gMHgxMTAwOwogCQl9IGVsc2UKIAkJCXZhbCA9IDB4ZmZmZjsKIApAQCAtNjQzLDE1ICs2NzUsMTkgQEAKIAlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAogCSAgIHZhbCwgcG9ydCwgYWRkcik7CiAKKwkvKiBmbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKIAlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAJaWYgKFJFR19SRChicCwgYWRkcikgIT0gdmFsKQogCQlCTlgyWF9FUlIoIkJVRyEgcHJvcGVyIHZhbCBub3QgcmVhZCBmcm9tIElHVSFcbiIpOworCiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2ludF9kaXNhYmxlX3N5bmMoc3RydWN0IGJueDJ4ICpicCwgaW50IGRpc2FibGVfaHcpCiB7CiAJaW50IG1zaXggPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSA/IDEgOiAwOwotCWludCBpOworCWludCBpLCBvZmZzZXQ7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyAqLwogCWF0b21pY19pbmMoJmJwLT5pbnRyX3NlbSk7CkBAIC02NjEsMTEgKzY5NywxMCBAQAogCiAJLyogbWFrZSBzdXJlIGFsbCBJU1JzIGFyZSBkb25lICovCiAJaWYgKG1zaXgpIHsKKwkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlWzBdLnZlY3Rvcik7CisJCW9mZnNldCA9IDE7CiAJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2ldLnZlY3Rvcik7Ci0KLQkJLyogb25lIG1vcmUgZm9yIHRoZSBTbG93IFBhdGggSVJRICovCi0JCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpXS52ZWN0b3IpOworCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3Rvcik7CiAJfSBlbHNlCiAJCXN5bmNocm9uaXplX2lycShicC0+cGRldi0+aXJxKTsKIApAQCAtNzQ4LDcgKzc4Myw2IEBACiAJLyogVGVsbCBjb21waWxlciB0aGF0IGNvbnN1bWVyIGFuZCBwcm9kdWNlciBjYW4gY2hhbmdlICovCiAJYmFycmllcigpOwogCXJldHVybiAoZnAtPnR4X3BrdF9wcm9kICE9IGZwLT50eF9wa3RfY29ucyk7Ci0KIH0KIAogLyogZnJlZSBza2IgaW4gdGhlIHBhY2tldCByaW5nIGF0IHBvcyBpZHgKQEAgLTg0Miw5ICs4NzYsMTAgQEAKIAlyZXR1cm4gKHMxNikoZnAtPmJwLT50eF9yaW5nX3NpemUpIC0gdXNlZDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCB3b3JrKQorc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJdTE2IGh3X2NvbnMsIHN3X2NvbnMsIGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKIAlpbnQgZG9uZSA9IDA7CiAKQEAgLTg1Myw2ICs4ODgsNyBAQAogCQlyZXR1cm47CiAjZW5kaWYKIAorCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoYnAtPmRldiwgZnAtPmluZGV4KTsKIAlod19jb25zID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKIAlzd19jb25zID0gZnAtPnR4X3BrdF9jb25zOwogCkBAIC04NzQsMzIgKzkxMCwzMCBAQAogCQliZF9jb25zID0gYm54MnhfZnJlZV90eF9wa3QoYnAsIGZwLCBwa3RfY29ucyk7CiAJCXN3X2NvbnMrKzsKIAkJZG9uZSsrOwotCi0JCWlmIChkb25lID09IHdvcmspCi0JCQlicmVhazsKIAl9CiAKIAlmcC0+dHhfcGt0X2NvbnMgPSBzd19jb25zOwogCWZwLT50eF9iZF9jb25zID0gYmRfY29uczsKIAotCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBzdGFydF94bWl0KCkKLQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCi0JICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdCBzdGFydF94bWl0KCkKLQkgKiB3aWxsIG1pc3MgaXQgYW5kIGNhdXNlIHRoZSBxdWV1ZSB0byBiZSBzdG9wcGVkIGZvcmV2ZXIuCi0JICovCi0Jc21wX21iKCk7Ci0KIAkvKiBUQkQgbmVlZCBhIHRocmVzaD8gKi8KLQlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSkpIHsKKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSkgewogCi0JCW5ldGlmX3R4X2xvY2soYnAtPmRldik7CisJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgJiYKKwkJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQorCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCisJCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKKwkJICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKKwkJICogZm9yZXZlci4KKwkJICovCisJCXNtcF9tYigpOworCisJCWlmICgobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSAmJgogCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSAmJgogCQkgICAgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOworCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCi0JCW5ldGlmX3R4X3VubG9jayhicC0+ZGV2KTsKKwkJX19uZXRpZl90eF91bmxvY2sodHhxKTsKIAl9CiB9CiAKQEAgLTkxMywxMiArOTQ3LDEyIEBACiAKIAlEUChCTlgyWF9NU0dfU1AsCiAJICAgImZwICVkICBjaWQgJWQgIGdvdCByYW1yb2QgIyVkICBzdGF0ZSBpcyAleCAgdHlwZSBpcyAlZFxuIiwKLQkgICBGUF9JRFgoZnApLCBjaWQsIGNvbW1hbmQsIGJwLT5zdGF0ZSwKKwkgICBmcC0+aW5kZXgsIGNpZCwgY29tbWFuZCwgYnAtPnN0YXRlLAogCSAgIHJyX2NxZS0+cmFtcm9kX2NxZS5yYW1yb2RfdHlwZSk7CiAKIAlicC0+c3BxX2xlZnQrKzsKIAotCWlmIChGUF9JRFgoZnApKSB7CisJaWYgKGZwLT5pbmRleCkgewogCQlzd2l0Y2ggKGNvbW1hbmQgfCBmcC0+c3RhdGUpIHsKIAkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIHwKIAkJCQkJCUJOWDJYX0ZQX1NUQVRFX09QRU5JTkcpOgpAQCAtMTA3OCw4ICsxMTEyLDcgQEAKIAogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+cGRldiwKIAkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAotCQkJCSAgICAgICBicC0+cnhfb2Zmc2V0ICsgUlhfQ09QWV9USFJFU0gsCi0JCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJICAgICAgIFJYX0NPUFlfVEhSRVNILCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJcHJvZF9yeF9idWYtPnNrYiA9IGNvbnNfcnhfYnVmLT5za2I7CiAJcGNpX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLApAQCAtMTI2MCw3ICsxMjkzLDcgQEAKIAkJICAgd2hlcmUgd2UgYXJlIGFuZCBkcm9wIHRoZSB3aG9sZSBwYWNrZXQgKi8KIAkJZXJyID0gYm54MnhfYWxsb2Nfcnhfc2dlKGJwLCBmcCwgc2dlX2lkeCk7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTEzNjUsNyArMTM5OCw3IEBACiAJCS8qIGVsc2UgZHJvcCB0aGUgcGFja2V0IGFuZCBrZWVwIHRoZSBidWZmZXIgaW4gdGhlIGJpbiAqLwogCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAogCQkgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBza2IgLSBkcm9wcGluZyBwYWNrZXQhXG4iKTsKLQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJfQogCiAJZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gPSBCTlgyWF9UUEFfU1RPUDsKQEAgLTEzNzYsNyArMTQwOSw3IEBACiAJCQkJCXUxNiBiZF9wcm9kLCB1MTYgcnhfY29tcF9wcm9kLAogCQkJCQl1MTYgcnhfc2dlX3Byb2QpCiB7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHJ4X3Byb2RzID0gezB9OworCXN0cnVjdCB1c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyByeF9wcm9kcyA9IHswfTsKIAlpbnQgaTsKIAogCS8qIFVwZGF0ZSBwcm9kdWNlcnMgKi8KQEAgLTEzOTQsMTYgKzE0MjcsMTYgQEAKIAkgKi8KIAl3bWIoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCi0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFRTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIEZQX0NMX0lEKGZwKSkgKyBpKjQsCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wcm9kdWNlcnMpLzQ7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX1JYX1BST0RTX09GRlNFVChCUF9QT1JUKGJwKSwgZnAtPmNsX2lkKSArIGkqNCwKIAkJICAgICAgICgodTMyICopJnJ4X3Byb2RzKVtpXSk7CiAKIAltbWlvd2IoKTsgLyoga2VlcCBwcm9kIHVwZGF0ZXMgb3JkZXJlZCAqLwogCiAJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKLQkgICAiV3JvdGU6IGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKLQkgICBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKKwkgICAicXVldWVbJWRdOiAgd3JvdGUgIGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKKwkgICBmcC0+aW5kZXgsIGJkX3Byb2QsIHJ4X2NvbXBfcHJvZCwgcnhfc2dlX3Byb2QpOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3J4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgYnVkZ2V0KQpAQCAtMTQzNyw3ICsxNDcwLDcgQEAKIAogCURQKE5FVElGX01TR19SWF9TVEFUVVMsCiAJICAgInF1ZXVlWyVkXTogIGh3X2NvbXBfY29ucyAldSAgc3dfY29tcF9jb25zICV1XG4iLAotCSAgIEZQX0lEWChmcCksIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKKwkgICBmcC0+aW5kZXgsIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKIAogCXdoaWxlIChzd19jb21wX2NvbnMgIT0gaHdfY29tcF9jb25zKSB7CiAJCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gTlVMTDsKQEAgLTE1MjcsNyArMTU2MCw3IEBACiAJCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKIAkJCQkgICAiRVJST1IgIGZsYWdzICV4ICByeCBwYWNrZXQgJXVcbiIsCiAJCQkJICAgY3FlX2ZwX2ZsYWdzLCBzd19jb21wX2NvbnMpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfZXJyX2Rpc2NhcmRfcGt0Kys7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X2Vycl9kaXNjYXJkX3BrdCsrOwogCQkJCWdvdG8gcmV1c2Vfcng7CiAJCQl9CiAKQEAgLTE1NDQsNyArMTU3Nyw3IEBACiAJCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJCSAgICJFUlJPUiAgcGFja2V0IGRyb3BwZWQgIgogCQkJCQkgICAiYmVjYXVzZSBvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQkJCWdvdG8gcmV1c2Vfcng7CiAJCQkJfQogCkBAIC0xNTcwLDcgKzE2MDMsNyBAQAogCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJICAgIkVSUk9SICBwYWNrZXQgZHJvcHBlZCBiZWNhdXNlICIKIAkJCQkgICAib2YgYWxsb2MgZmFpbHVyZVxuIik7Ci0JCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIHJldXNlX3J4OgogCQkJCWJueDJ4X3JldXNlX3J4X3NrYihmcCwgc2tiLCBiZF9jb25zLCBiZF9wcm9kKTsKIAkJCQlnb3RvIG5leHRfcng7CkBAIC0xNTgzLDEwICsxNjE2LDExIEBACiAJCQkJaWYgKGxpa2VseShCTlgyWF9SWF9DU1VNX09LKGNxZSkpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKLQkJCQkJYnAtPmV0aF9zdGF0cy5od19jc3VtX2VycisrOworCQkJCQlmcC0+ZXRoX3Ffc3RhdHMuaHdfY3N1bV9lcnIrKzsKIAkJCX0KIAkJfQogCisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBmcC0+aW5kZXgpOwogI2lmZGVmIEJDTV9WTEFOCiAJCWlmICgoYnAtPnZsZ3JwICE9IE5VTEwpICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpICYmCiAJCSAgICAobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYKQEAgLTE2MzIsNyArMTY2Niw3IEBACiB7CiAJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9IGZwX2Nvb2tpZTsKIAlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCBpbmRleCA9IEZQX0lEWChmcCk7CisJaW50IGluZGV4ID0gZnAtPmluZGV4OwogCiAJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7CkBAIC0xNjQxLDggKzE2NzUsOCBAQAogCX0KIAogCURQKEJOWDJYX01TR19GUCwgImdvdCBhbiBNU0ktWCBpbnRlcnJ1cHQgb24gSURYOlNCIFslZDolZF1cbiIsCi0JICAgaW5kZXgsIEZQX1NCX0lEKGZwKSk7Ci0JYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIFVTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKwkgICBpbmRleCwgZnAtPnNiX2lkKTsKKwlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgVVNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQpAQCAtMTY1NCwxNSArMTY4OCwxNCBAQAogCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CisJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBibngyeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldl9pbnN0YW5jZSk7CiAJdTE2IHN0YXR1cyA9IGJueDJ4X2Fja19pbnQoYnApOwogCXUxNiBtYXNrOwogCkBAIC0xNjcxLDcgKzE3MDQsNyBAQAogCQlEUChORVRJRl9NU0dfSU5UUiwgIm5vdCBvdXIgaW50ZXJydXB0IVxuIik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0JRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7CisJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAogCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewpAQCAtMTY5Myw3ICsxNzI2LDcgQEAKIAkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwogCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CisJCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CiAKIAkJc3RhdHVzICY9IH5tYXNrOwogCX0KQEAgLTE4MDYsMjYgKzE4MzksNTAgQEAKIC8qIEhXIExvY2sgZm9yIHNoYXJlZCBkdWFsIHBvcnQgUEhZcyAqLwogc3RhdGljIHZvaWQgYm54MnhfYWNxdWlyZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCiAJbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKIAotCWlmICgoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpIHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpCi0JCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCisJCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JaWYgKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkKLQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFXzgwNzJfTURJTyk7CisJaWYgKGJwLT5wb3J0Lm5lZWRfaHdfbG9jaykKKwkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX01ESU8pOwogCiAJbXV0ZXhfdW5sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOwogfQogCitpbnQgYm54MnhfZ2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisJaW50IHZhbHVlOworCisJaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlYWQgR1BJTyB2YWx1ZSAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPKTsKKworCS8qIGdldCB0aGUgcmVxdWVzdGVkIHBpbiB2YWx1ZSAqLworCWlmICgoZ3Bpb19yZWcgJiBncGlvX21hc2spID09IGdwaW9fbWFzaykKKwkJdmFsdWUgPSAxOworCWVsc2UKKwkJdmFsdWUgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJwaW4gJWQgIHZhbHVlIDB4JXhcbiIsIGdwaW9fbnVtLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKIGludCBibngyeF9zZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KQogewogCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KQEAgLTE4NzksNiArMTkzNiw1MiBAQAogCXJldHVybiAwOwogfQogCitpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpCit7CisJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgc3dhcCByZWdpc3RlciBpcyBzZXQgYW5kIGFjdGl2ZSAqLworCWludCBncGlvX3BvcnQgPSAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkgJiYKKwkJCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpKSBeIHBvcnQ7CisJaW50IGdwaW9fc2hpZnQgPSBncGlvX251bSArCisJCQkoZ3Bpb19wb3J0ID8gTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUIDogMCk7CisJdTMyIGdwaW9fbWFzayA9ICgxIDw8IGdwaW9fc2hpZnQpOworCXUzMiBncGlvX3JlZzsKKworCWlmIChncGlvX251bSA+IE1JU0NfUkVHSVNURVJTX0dQSU9fMykgeworCQlCTlgyWF9FUlIoIkludmFsaWQgR1BJTyAlZFxuIiwgZ3Bpb19udW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisJLyogcmVhZCBHUElPIGludCAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPX0lOVCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFI6CisJCURQKE5FVElGX01TR19MSU5LLCAiQ2xlYXIgR1BJTyBJTlQgJWQgKHNoaWZ0ICVkKSAtPiAiCisJCQkJICAgIm91dHB1dCBsb3dcbiIsIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgU0VUIGFuZCBzZXQgQ0xSICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9DTFJfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQ6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gSU5UICVkIChzaGlmdCAlZCkgLT4gIgorCQkJCSAgICJvdXRwdXQgaGlnaFxuIiwgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOworCQkvKiBjbGVhciBDTFIgYW5kIHNldCBTRVQgKi8KKwkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyk7CisJCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCVJFR19XUihicCwgTUlTQ19SRUdfR1BJT19JTlQsIGdwaW9fcmVnKTsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBibngyeF9zZXRfc3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc3Bpb19udW0sIHUzMiBtb2RlKQogewogCXUzMiBzcGlvX21hc2sgPSAoMSA8PCBzcGlvX251bSk7CkBAIC0xOTMzLDEzICsyMDM2LDE2IEBACiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKIAkJCQkJICBBRFZFUlRJU0VEX1BhdXNlKTsKIAkJYnJlYWs7CisKIAljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg6CiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgQURWRVJUSVNFRF9QYXVzZSk7CiAJCWJyZWFrOworCiAJY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOgogCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgIEFEVkVSVElTRURfUGF1c2UpOwpAQCAtMTk2NCw3ICsyMDcwLDggQEAKIAkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICE9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FKSB7CiAJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpIHsKIAkJCQlwcmludGsoIiwgcmVjZWl2ZSAiKTsKLQkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYKKwkJCQkgICAgQk5YMlhfRkxPV19DVFJMX1RYKQogCQkJCQlwcmludGsoIiYgdHJhbnNtaXQgIik7CiAJCQl9IGVsc2UgewogCQkJCXByaW50aygiLCB0cmFuc21pdCAiKTsKQEAgLTE5NzksNyArMjA4Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdTggYm54MnhfaW5pdGlhbF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHU4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSkKIHsKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQl1OCByYzsKQEAgLTE5OTUsMTggKzIxMDIsMjQgQEAKIAkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmNfYXV0b19hZHYgPSBCTlgyWF9GTE9XX0NUUkxfQk9USDsKIAogCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKworCQlpZiAobG9hZF9tb2RlID09IExPQURfRElBRykKKwkJCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfWEdYU18xMDsKKwogCQlyYyA9IGJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAogCQlibngyeF9jYWxjX2ZjX2FkdihicCk7CiAKLQkJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkKKwkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApICYmIGJwLT5saW5rX3ZhcnMubGlua191cCkgeworCQkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9MSU5LX1VQKTsKIAkJCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLQorCQl9CiAKIAkJcmV0dXJuIHJjOwogCX0KLQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCBpbml0aWFsaXppbmcgbGlua1xuIik7CisJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCBpbml0aWFsaXplIGxpbmtcbiIpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0yMDE5LDE3ICsyMTMyLDE3IEBACiAKIAkJYm54MnhfY2FsY19mY19hZHYoYnApOwogCX0gZWxzZQotCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCBzZXR0aW5nIGxpbmtcbiIpOworCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHNldCBsaW5rXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfX2xpbmtfcmVzZXQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisJCWJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsIDEpOwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAl9IGVsc2UKLQkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC1ub3QgcmVzZXR0aW5nIGxpbmtcbiIpOworCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHJlc2V0IGxpbmtcbiIpOwogfQogCiBzdGF0aWMgdTggYm54MnhfbGlua190ZXN0KHN0cnVjdCBibngyeCAqYnApCkBAIC0yMDQzLDExOSArMjE1Niw0MiBAQAogCXJldHVybiByYzsKIH0KIAotLyogQ2FsY3VsYXRlcyB0aGUgc3VtIG9mIHZuX21pbl9yYXRlcy4KLSAgIEl0J3MgbmVlZGVkIGZvciBmdXJ0aGVyIG5vcm1hbGl6aW5nIG9mIHRoZSBtaW5fcmF0ZXMuCi0KLSAgIFJldHVybnM6Ci0gICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMKLSAgICAgICBvcgotICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCi0gICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaXJuZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCi0gICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwKLSAgICAgYmUgc2V0IHRvIDEuCi0gKi8KLXN0YXRpYyB1MzIgYm54MnhfY2FsY192bl93c3VtKHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3BvcnRfbWlubWF4KHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IGksIHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgd3N1bSA9IDA7Ci0JaW50IGFsbF96ZXJvID0gMTsKKwl1MzIgcl9wYXJhbSA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCAvIDg7CisJdTMyIGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjOworCXUzMiB0X2ZhaXI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgRTFIVk5fTUFYOyBpKyspIHsKLQkJdTMyIHZuX2NmZyA9Ci0JCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnWzIqaSArIHBvcnRdLmNvbmZpZyk7Ci0JCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+Ci0JCQkJICAgICBGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOwotCQlpZiAoISh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpKSB7Ci0JCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KLQkJCWlmICghdm5fbWluX3JhdGUpCi0JCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7Ci0JCQllbHNlCi0JCQkJYWxsX3plcm8gPSAwOworCW1lbXNldCgmKGJwLT5jbW5nLnJzX3ZhcnMpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl9wb3J0KSk7CisJbWVtc2V0KCYoYnAtPmNtbmcuZmFpcl92YXJzKSwgMCwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSk7CiAKLQkJCXdzdW0gKz0gdm5fbWluX3JhdGU7Ci0JCX0KLQl9CisJLyogMTAwIHVzZWMgaW4gU0RNIHRpY2tzID0gMjUgc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfcGVyaW9kaWNfdGltZW91dCA9IFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQyAvIDQ7CiAKLQkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgRkFJUk5FU1MgKi8KLQlpZiAoYWxsX3plcm8pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHdzdW07Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfcG9ydF9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkgICBpbnQgZW5fZm5lc3MsCi0JCQkJICAgdTE2IHBvcnRfcmF0ZSwKLQkJCQkgICBzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgKm1fY21uZ19wb3J0KQotewotCXUzMiByX3BhcmFtID0gcG9ydF9yYXRlIC8gODsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpOwotCi0JbWVtc2V0KG1fY21uZ19wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSk7Ci0KLQkvKiBFbmFibGUgbWlubWF4IG9ubHkgaWYgd2UgYXJlIGluIGUxaG1mIG1vZGUgKi8KLQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCXUzMiBmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYzsKLQkJdTMyIHRfZmFpcjsKLQotCQkvKiBFbmFibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuY21uZ192bl9lbmFibGUgPSAxOwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuZmFpcm5lc3NfZW5hYmxlID0gZW5fZm5lc3MgPyAxIDogMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLnJhdGVfc2hhcGluZ19lbmFibGUgPSAxOwotCi0JCWlmICghZW5fZm5lc3MpCi0JCQlEUChORVRJRl9NU0dfSUZVUCwgIkFsbCBNSU4gdmFsdWVzIGFyZSB6ZXJvZXMiCi0JCQkgICAiICBmYWlybmVzcyB3aWxsIGJlIGRpc2FibGVkXG4iKTsKLQotCQkvKiAxMDAgdXNlYyBpbiBTRE0gdGlja3MgPSAyNSBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JCW1fY21uZ19wb3J0LT5yc192YXJzLnJzX3BlcmlvZGljX3RpbWVvdXQgPQotCQkJCQkJUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDIC8gNDsKLQotCQkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggbm8gdGltZXIgYXJtaW5nIHdpbGwgb2NjdXIKLQkJICAgMS4yNSBjb2VmZmljaWVudCBpcyBmb3IgdGhlIHRocmVzaG9sZCB0byBiZSBhIGxpdHRsZSBiaWdnZXIKLQkJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLwotCQltX2NtbmdfcG9ydC0+cnNfdmFycy5yc190aHJlc2hvbGQgPQorCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgorCSAgIDEuMjUgY29lZmZpY2llbnQgaXMgZm9yIHRoZSB0aHJlc2hvbGQgdG8gYmUgYSBsaXR0bGUgYmlnZ2VyCisJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfdGhyZXNob2xkID0KIAkJCQkoUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDICogcl9wYXJhbSAqIDUpIC8gNDsKIAotCQkvKiByZXNvbHV0aW9uIG9mIGZhaXJuZXNzIHRpbWVyICovCi0JCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjID0gUU1fQVJCX0JZVEVTIC8gcl9wYXJhbTsKLQkJLyogZm9yIDEwRyBpdCBpcyAxMDAwdXNlYy4gZm9yIDFHIGl0IGlzIDEwMDAwdXNlYy4gKi8KLQkJdF9mYWlyID0gVF9GQUlSX0NPRUYgLyBwb3J0X3JhdGU7CisJLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyB0aW1lciAqLworCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjID0gUU1fQVJCX0JZVEVTIC8gcl9wYXJhbTsKKwkvKiBmb3IgMTBHIGl0IGlzIDEwMDB1c2VjLiBmb3IgMUcgaXQgaXMgMTAwMDB1c2VjLiAqLworCXRfZmFpciA9IFRfRkFJUl9DT0VGIC8gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwogCi0JCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0KLQkJICAgdGhlIHRpbWVyIGFueW1vcmUgKi8KLQkJbV9jbW5nX3BvcnQtPmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCA9IFFNX0FSQl9CWVRFUzsKKwkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggd2Ugd29uJ3QgYXJtIHRoZSB0aW1lciBhbnltb3JlICovCisJYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkID0gUU1fQVJCX0JZVEVTOwogCi0JCS8qIHdlIG11bHRpcGx5IGJ5IDFlMy84IHRvIGdldCBieXRlcy9tc2VjLgotCQkgICBXZSBkb24ndCB3YW50IHRoZSBjcmVkaXRzIHRvIHBhc3MgYSBjcmVkaXQKLQkJICAgb2YgdGhlIFRfRkFJUipGQUlSX01FTSAoYWxnb3JpdGhtIHJlc29sdXRpb24pICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMudXBwZXJfYm91bmQgPQotCQkJCQkJcl9wYXJhbSAqIHRfZmFpciAqIEZBSVJfTUVNOwotCQkvKiBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9Ci0JCQkJCQlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAvIDQ7Ci0KLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgKi8KLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmNtbmdfdm5fZW5hYmxlID0gMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmZhaXJuZXNzX2VuYWJsZSA9IDA7Ci0JCW1fY21uZ19wb3J0LT5mbGFncy5yYXRlX3NoYXBpbmdfZW5hYmxlID0gMDsKLQotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgIlNpbmdsZSBmdW5jdGlvbiBtb2RlICBtaW5tYXggd2lsbCBiZSBkaXNhYmxlZFxuIik7Ci0JfQotCi0JLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkgKiA0LAotCQkgICAgICAgKCh1MzIgKikobV9jbW5nX3BvcnQpKVtpXSk7CisJLyogd2UgbXVsdGlwbHkgYnkgMWUzLzggdG8gZ2V0IGJ5dGVzL21zZWMuCisJICAgV2UgZG9uJ3Qgd2FudCB0aGUgY3JlZGl0cyB0byBwYXNzIGEgY3JlZGl0CisJICAgb2YgdGhlIHRfZmFpcipGQUlSX01FTSAoYWxnb3JpdGhtIHJlc29sdXRpb24pICovCisJYnAtPmNtbmcuZmFpcl92YXJzLnVwcGVyX2JvdW5kID0gcl9wYXJhbSAqIHRfZmFpciAqIEZBSVJfTUVNOworCS8qIHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9IGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjIC8gNDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfaW5pdF92bl9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMsCi0JCQkJICAgdTMyIHdzdW0sIHUxNiBwb3J0X3JhdGUsCi0JCQkJIHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCAqbV9jbW5nX3BvcnQpCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3ZuX21pbm1heChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKIHsKIAlzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuIG1fcnNfdm47CiAJc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuIG1fZmFpcl92bjsKQEAgLTIxNzEsMTcgKzIyMDcsMTggQEAKIAl9IGVsc2UgewogCQl2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CiAJCQkJRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQkJLyogSWYgRkFJUk5FU1MgaXMgZW5hYmxlZCAobm90IGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9lcykgYW5kCisJCS8qIElmIGZhaXJuZXNzIGlzIGVuYWJsZWQgKG5vdCBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvZXMpIGFuZAogCQkgICBpZiBjdXJyZW50IG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMS4KIAkJICAgVGhpcyBpcyBhIHJlcXVpcmVtZW50IG9mIHRoZSBhbGdvcml0aG0uICovCi0JCWlmICgodm5fbWluX3JhdGUgPT0gMCkgJiYgd3N1bSkKKwkJaWYgKGJwLT52bl93ZWlnaHRfc3VtICYmICh2bl9taW5fcmF0ZSA9PSAwKSkKIAkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwogCQl2bl9tYXhfcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+CiAJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKIAl9CiAKLQlEUChORVRJRl9NU0dfSUZVUCwgImZ1bmMgJWQ6IHZuX21pbl9yYXRlPSVkICB2bl9tYXhfcmF0ZT0lZCAgIgotCSAgICJ3c3VtPSVkXG4iLCBmdW5jLCB2bl9taW5fcmF0ZSwgdm5fbWF4X3JhdGUsIHdzdW0pOworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJmdW5jICVkOiB2bl9taW5fcmF0ZT0lZCAgdm5fbWF4X3JhdGU9JWQgIHZuX3dlaWdodF9zdW09JWRcbiIsCisJICAgZnVuYywgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlLCBicC0+dm5fd2VpZ2h0X3N1bSk7CiAKIAltZW1zZXQoJm1fcnNfdm4sIDAsIHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKSk7CiAJbWVtc2V0KCZtX2ZhaXJfdm4sIDAsIHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4pKTsKQEAgLTIxOTMsNTUgKzIyMzAsMjAgQEAKIAltX3JzX3ZuLnZuX2NvdW50ZXIucXVvdGEgPQogCQkJCSh2bl9tYXhfcmF0ZSAqIFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQykgLyA4OwogCi0jaWZkZWYgQk5YMlhfUEVSX1BST1RfUU9TCi0JLyogcGVyIHByb3RvY29sIGNvdW50ZXIgKi8KLQlmb3IgKHByb3RvY29sID0gMDsgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKSB7Ci0JCS8qIG1heGltYWwgTWJwcyBmb3IgdGhpcyBwcm90b2NvbCAqLwotCQltX3JzX3ZuLnByb3RvY29sX2NvdW50ZXJzW3Byb3RvY29sXS5yYXRlID0KLQkJCQkJCXByb3RvY29sX21heF9yYXRlW3Byb3RvY29sXTsKLQkJLyogdGhlIHF1b3RhIGluIGVhY2ggdGltZXIgcGVyaW9kIC0KLQkJICAgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIHRoaXMgcGVyaW9kICovCi0JCW1fcnNfdm4ucHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnF1b3RhID0KLQkJCSh1MzIpKHJzX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAqCi0JCQkgICgoZG91YmxlKW1fcnNfdm4uCi0JCQkJICAgcHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnJhdGUvOCkpOwotCX0KLSNlbmRpZgotCi0JaWYgKHdzdW0pIHsKKwlpZiAoYnAtPnZuX3dlaWdodF9zdW0pIHsKIAkJLyogY3JlZGl0IGZvciBlYWNoIHBlcmlvZCBvZiB0aGUgZmFpcm5lc3MgYWxnb3JpdGhtOgogCQkgICBudW1iZXIgb2YgYnl0ZXMgaW4gVF9GQUlSICh0aGUgdm4gc2hhcmUgdGhlIHBvcnQgcmF0ZSkuCi0JCSAgIHdzdW0gc2hvdWxkIG5vdCBiZSBsYXJnZXIgdGhhbiAxMDAwMCwgdGh1cwotCQkgICBUX0ZBSVJfQ09FRiAvICg4ICogd3N1bSkgd2lsbCBhbHdheXMgYmUgZ3JhdGVyIHRoYW4gemVybyAqLworCQkgICB2bl93ZWlnaHRfc3VtIHNob3VsZCBub3QgYmUgbGFyZ2VyIHRoYW4gMTAwMDAsIHRodXMKKwkJICAgVF9GQUlSX0NPRUYgLyAoOCAqIHZuX3dlaWdodF9zdW0pIHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIKKwkJICAgdGhhbiB6ZXJvICovCiAJCW1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgPQotCQkJbWF4KCh1NjQpKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8gKDggKiB3c3VtKSkpLAotCQkJICAgICh1NjQpKG1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CisJCQltYXgoKHUzMikodm5fbWluX3JhdGUgKiAoVF9GQUlSX0NPRUYgLworCQkJCQkJICg4ICogYnAtPnZuX3dlaWdodF9zdW0pKSksCisJCQkgICAgKHUzMikoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICogMikpOwogCQlEUChORVRJRl9NU0dfSUZVUCwgIm1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGE9JWRcbiIsCiAJCSAgIG1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEpOwogCX0KIAotI2lmZGVmIEJOWDJYX1BFUl9QUk9UX1FPUwotCWRvIHsKLQkJdTMyIHByb3RvY29sV2VpZ2h0U3VtID0gMDsKLQotCQlmb3IgKHByb3RvY29sID0gMDsgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKQotCQkJcHJvdG9jb2xXZWlnaHRTdW0gKz0KLQkJCQkJZHJ2SW5pdC5wcm90b2NvbF9taW5fcmF0ZVtwcm90b2NvbF07Ci0JCS8qIHBlciBwcm90b2NvbCBjb3VudGVyIC0KLQkJICAgTk9UIE5FRURFRCBJRiBOTyBQRVItUFJPVE9DT0wgQ09OR0VTVElPTiBNQU5BR0VNRU5UICovCi0JCWlmIChwcm90b2NvbFdlaWdodFN1bSA+IDApIHsKLQkJCWZvciAocHJvdG9jb2wgPSAwOwotCQkJICAgICBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspCi0JCQkJLyogY3JlZGl0IGZvciBlYWNoIHBlcmlvZCBvZiB0aGUKLQkJCQkgICBmYWlybmVzcyBhbGdvcml0aG0gLSBudW1iZXIgb2YgYnl0ZXMgaW4KLQkJCQkgICBUX0ZBSVIgKHRoZSBwcm90b2NvbCBzaGFyZSB0aGUgdm4gcmF0ZSkgKi8KLQkJCQltX2ZhaXJfdm4ucHJvdG9jb2xfY3JlZGl0X2RlbHRhW3Byb3RvY29sXSA9Ci0JCQkJCSh1MzIpKCh2bl9taW5fcmF0ZSAvIDgpICogdF9mYWlyICoKLQkJCQkJcHJvdG9jb2xfbWluX3JhdGUgLyBwcm90b2NvbFdlaWdodFN1bSk7Ci0JCX0KLQl9IHdoaWxlICgwKTsKLSNlbmRpZgotCiAJLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKS80OyBpKyspCiAJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKQEAgLTIyNTQsMTEgKzIyNTYsMTAgQEAKIAkJICAgICAgICgodTMyICopKCZtX2ZhaXJfdm4pKVtpXSk7CiB9CiAKKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgYm54MnhfbGlua19hdHRuKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IHZuOwotCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHN5bmNlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgKi8KIAlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwogCkBAIC0yMjY2LDYgKzIyNjcsMTkgQEAKIAogCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKIAorCQkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJCXUzMiBwYXVzZV9lbmFibGVkID0gMDsKKworCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCQkJCXBhdXNlX2VuYWJsZWQgPSAxOworCisJCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAorCQkJICAgICAgIHBhdXNlX2VuYWJsZWQpOworCQl9CisKIAkJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykgewogCQkJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzOwogCkBAIC0yMjgzLDM2ICsyMjk3LDM4IEBACiAJYm54MnhfbGlua19yZXBvcnQoYnApOwogCiAJaWYgKElTX0UxSE1GKGJwKSkgeworCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCQlpbnQgZnVuYzsKKwkJaW50IHZuOwogCiAJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgewogCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKIAkJCQljb250aW51ZTsKIAotCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBCUF9QT1JUKGJwKSk7CisJCQlmdW5jID0gKCh2biA8PCAxKSB8IHBvcnQpOwogCiAJCQkvKiBTZXQgdGhlIGF0dGVudGlvbiB0b3dhcmRzIG90aGVyIGRyaXZlcnMKIAkJCSAgIG9uIHRoZSBzYW1lIHBvcnQgKi8KIAkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wICsKIAkJCSAgICAgICAoTElOS19TWU5DX0FUVEVOVElPTl9CSVRfRlVOQ18wICsgZnVuYykqNCwgMSk7CiAJCX0KLQl9CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApICYmIChicC0+bGlua192YXJzLmxpbmVfc3BlZWQgPiAwKSkgewotCQlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgbV9jbW5nX3BvcnQ7Ci0JCXUzMiB3c3VtOwotCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7CisJCQlpbnQgaTsKIAotCQkvKiBJbml0IFJBVEUgU0hBUElORyBhbmQgRkFJUk5FU1MgY29udGV4dHMgKi8KLQkJd3N1bSA9IGJueDJ4X2NhbGNfdm5fd3N1bShicCk7Ci0JCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnAsIChpbnQpd3N1bSwKLQkJCQkJYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkLAotCQkJCQkmbV9jbW5nX3BvcnQpOwotCQlpZiAoSVNfRTFITUYoYnApKQorCQkJLyogSW5pdCByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGNvbnRleHRzICovCisJCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwKTsKKwogCQkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQotCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCwKLQkJCQkJd3N1bSwgYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkLAotCQkJCQkJICAgICAmbV9jbW5nX3BvcnQpOworCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCk7CisKKwkJCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQorCQkJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCQkgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSo0LAorCQkJCSAgICAgICAoKHUzMiAqKSgmYnAtPmNtbmcpKVtpXSk7CisJCX0KIAl9CiB9CiAKQEAgLTI0ODksNiArMjUwNSw3IEBACiAJdTMyIG5pZ19pbnRfbWFza19hZGRyID0gcG9ydCA/IE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDEgOgogCQkJCSAgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwOwogCXUzMiBhZXVfbWFzazsKKwl1MzIgbmlnX21hc2sgPSAwOwogCiAJaWYgKGJwLT5hdHRuX3N0YXRlICYgYXNzZXJ0ZWQpCiAJCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKQEAgLTI1MTQsNyArMjUzMSw3IEBACiAJCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKIAogCQkJLyogc2F2ZSBuaWcgaW50ZXJydXB0IG1hc2sgKi8KLQkJCWJwLT5uaWdfbWFzayA9IFJFR19SRChicCwgbmlnX2ludF9tYXNrX2FkZHIpOworCQkJbmlnX21hc2sgPSBSRUdfUkQoYnAsIG5pZ19pbnRfbWFza19hZGRyKTsKIAkJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIDApOwogCiAJCQlibngyeF9saW5rX2F0dG4oYnApOwpAQCAtMjU2OSw3ICsyNTg2LDcgQEAKIAogCS8qIG5vdyBzZXQgYmFjayB0aGUgbWFzayAqLwogCWlmIChhc3NlcnRlZCAmIEFUVE5fTklHX0ZPUl9GVU5DKSB7Ci0JCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIGJwLT5uaWdfbWFzayk7CisJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIG5pZ19tYXNrKTsKIAkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CiAJfQogfQpAQCAtMjU5MSw5ICsyNjA4LDggQEAKIAogCQlCTlgyWF9FUlIoIlNQSU81IGh3IGF0dGVudGlvblxuIik7CiAKLQkJc3dpdGNoIChicC0+Y29tbW9uLmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQkJY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KIAogCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLwpAQCAtMjYyNCw2ICsyNjQwLDEzIEBACiAJCX0KIAl9CiAKKwlpZiAoYXR0biAmIChBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIHwKKwkJICAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEpKSB7CisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoJmJwLT5saW5rX3BhcmFtcyk7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCX0KKwogCWlmIChhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKSB7CiAKIAkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKQEAgLTI2NDAsNyArMjY2Myw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmIChhdHRuICYgQk5YMlhfRE9PUlFfQVNTRVJUKSB7CisJaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfSFdfSU5URVJSVVBUKSB7CiAKIAkJdmFsID0gUkVHX1JEKGJwLCBET1JRX1JFR19ET1JRX0lOVF9TVFNfQ0xSKTsKIAkJQk5YMlhfRVJSKCJEQiBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKQEAgLTI4ODYsMTAgKzI5MDksNiBAQAogCWlmIChzdGF0dXMgJiAweDEpCiAJCWJueDJ4X2F0dG5faW50KGJwKTsKIAotCS8qIENTdG9ybSBldmVudHM6IHF1ZXJ5X3N0YXRzLCBwb3J0IGRlbGV0ZSByYW1yb2QgKi8KLQlpZiAoc3RhdHVzICYgMHgyKQotCQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0KIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQVRURU5USU9OX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2F0dF9pZHgpLAogCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgVVNUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX3VfaWR4KSwKQEAgLTI5MTQsNyArMjkzMyw3IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgWFNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCkBAIC0zMDAzLDE2ICszMDIyLDQxIEBACiAKICNkZWZpbmUgVVBEQVRFX0VYVEVORF9UU1RBVChzLCB0KSBcCiAJZG8geyBcCi0JCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIG9sZF90Y2xpZW50LT5zOyBcCi0JCW9sZF90Y2xpZW50LT5zID0gbGUzMl90b19jcHUodGNsaWVudC0+cyk7IFwKLQkJQUREX0VYVEVORF82NChmc3RhdHMtPnQjI19oaSwgZnN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF90Y2xpZW50LT5zKTsgXAorCQlvbGRfdGNsaWVudC0+cyA9IHRjbGllbnQtPnM7IFwKKwkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBVUERBVEVfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCW9sZF91Y2xpZW50LT5zID0gdWNsaWVudC0+czsgXAorCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFVQREFURV9FWFRFTkRfWFNUQVQocywgdCkgXAogCWRvIHsgXAotCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBvbGRfeGNsaWVudC0+czsgXAotCQlvbGRfeGNsaWVudC0+cyA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpOyBcCi0JCUFERF9FWFRFTkRfNjQoZnN0YXRzLT50IyNfaGksIGZzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfeGNsaWVudC0+cyk7IFwKKwkJb2xkX3hjbGllbnQtPnMgPSB4Y2xpZW50LT5zOyBcCisJCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIG1pbnVlbmQgLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfNjQobV9oaSwgc19oaSwgbV9sbywgc19sbykgXAorCWRvIHsgXAorCQlESUZGXzY0KG1faGksIG1faGksIHNfaGksIG1fbG8sIG1fbG8sIHNfbG8pOyBcCisJfSB3aGlsZSAoMCkKKworLyogbWludWVuZFtoaTpsb10gLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfRVhURU5EXzY0KG1faGksIG1fbG8sIHMpIFwKKwlkbyB7IFwKKwkJU1VCXzY0KG1faGksIDAsIG1fbG8sIHMpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVUJfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCVNVQl9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAogCX0gd2hpbGUgKDApCiAKIC8qCkBAIC0zMDM5LDExICszMDgzLDEyIEBACiB7CiAJaWYgKCFicC0+c3RhdHNfcGVuZGluZykgewogCQlzdHJ1Y3QgZXRoX3F1ZXJ5X3JhbXJvZF9kYXRhIHJhbXJvZF9kYXRhID0gezB9OwotCQlpbnQgcmM7CisJCWludCBpLCByYzsKIAogCQlyYW1yb2RfZGF0YS5kcnZfY291bnRlciA9IGJwLT5zdGF0c19jb3VudGVyKys7Ci0JCXJhbXJvZF9kYXRhLmNvbGxlY3RfcG9ydF8xYiA9IGJwLT5wb3J0LnBtZiA/IDEgOiAwOwotCQlyYW1yb2RfZGF0YS5jdHJfaWRfdmVjdG9yID0gKDEgPDwgQlBfQ0xfSUQoYnApKTsKKwkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0ID0gYnAtPnBvcnQucG1mID8gMSA6IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQkJcmFtcm9kX2RhdGEuY3RyX2lkX3ZlY3RvciB8PSAoMSA8PCBicC0+ZnBbaV0uY2xfaWQpOwogCiAJCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSwgMCwKIAkJCQkgICAoKHUzMiAqKSZyYW1yb2RfZGF0YSlbMV0sCkBAIC0zMDU5LDcgKzMxMDQsOSBAQAogc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CiAKKwlicC0+c3RhdHNfcGVuZGluZyA9IDA7CiAJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CiAJYnAtPnN0YXRzX2NvdW50ZXIgPSAwOwogCkBAIC0zMDgxLDkgKzMxMjgsMTkgQEAKIAkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDFfbG8pLCAyKTsKIAogCS8qIGZ1bmN0aW9uIHN0YXRzICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJbWVtc2V0KCZmcC0+b2xkX3RjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF91Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5vbGRfeGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+ZXRoX3Ffc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMpKTsKKwl9CisKIAltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQltZW1zZXQoJmJwLT5vbGRfdGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwotCW1lbXNldCgmYnAtPm9sZF94Y2xpZW50LCAwLCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CiAJbWVtc2V0KCZicC0+ZXRoX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cykpOwogCiAJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7CkBAIC0zMDk3LDYgKzMxNTQsOCBAQAogCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKIAogCSpzdGF0c19jb21wID0gRE1BRV9DT01QX1ZBTDsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCXJldHVybjsKIAogCS8qIGxvYWRlciAqLwogCWlmIChicC0+ZXhlY3V0ZXJfaWR4KSB7CkBAIC0zNDg2LDcgKzM1NDUsMTEgQEAKIHsKIAlzdHJ1Y3QgYm1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5ibWFjX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7Ci0Jc3RydWN0IHJlZ3BhaXIgZGlmZjsKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlzdHJ1Y3QgeworCQl1MzIgbG87CisJCXUzMiBoaTsKKwl9IGRpZmY7CiAKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JlcmIsIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmY3MsIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKQEAgLTM0OTYsNyArMzU1OSw3IEBACiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyamJyLCByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4Y2YsIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7Ci0JVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfYm1hY194cGYpOwogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9vdXR4b2Zmc2VudCk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0eHBmLCB0eF9zdGF0X2Zsb3djb250cm9sZG9uZSk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NjQsIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0cyk7CkBAIC0zNTE3LDEyICszNTgwLDIzIEBACiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0ZXJyLAogCQkJCXR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9ycyk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0dWZsLCB0eF9zdGF0X2JtYWNfdWZsKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF9ibWFjX3hwZl9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbyA9CisJCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfYm1hY194cGZfbG87CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2xvID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9sbzsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfZW1hY19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlzdHJ1Y3QgZW1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5lbWFjX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7CisJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAKIAlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9pZmhjaW5iYWRvY3RldHMpOwogCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHMpOwpAQCAtMzU1NSw2ICszNjI5LDI0IEBACiAJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG8gPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKKwlBRERfNjQoZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGksCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbywKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG8pOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b25zZW50X2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8gPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9uc2VudF9sbzsKKwlBRERfNjQoZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSwKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfaGksCisJICAgICAgIGVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8sCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2xvKTsKIH0KIAogc3RhdGljIGludCBibngyeF9od19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKQEAgLTM1NjMsNyArMzY1NSwxMSBAQAogCXN0cnVjdCBuaWdfc3RhdHMgKm9sZCA9ICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyk7CiAJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXN0cnVjdCByZWdwYWlyIGRpZmY7CisJc3RydWN0IHsKKwkJdTMyIGxvOworCQl1MzIgaGk7CisJfSBkaWZmOworCXUzMiBuaWdfdGltZXJfbWF4OwogCiAJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykKIAkJYm54MnhfYm1hY19zdGF0c191cGRhdGUoYnApOwpAQCAtMzU3Miw3ICszNjY4LDcgQEAKIAkJYm54MnhfZW1hY19zdGF0c191cGRhdGUoYnApOwogCiAJZWxzZSB7IC8qIHVucmVhY2hlZCAqLwotCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgZG1hZSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7CisJCUJOWDJYX0VSUigic3RhdHMgdXBkYXRlZCBieSBETUFFIGJ1dCBubyBNQUMgYWN0aXZlXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzU5NCwxMzQgKzM2OTAsMjExIEBACiAKIAlwc3RhdHMtPmhvc3RfcG9ydF9zdGF0c19zdGFydCA9ICsrcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfZW5kOwogCisJbmlnX3RpbWVyX21heCA9IFNITUVNX1JEKGJwLCBwb3J0X21iW0JQX1BPUlQoYnApXS5zdGF0X25pZ190aW1lcik7CisJaWYgKG5pZ190aW1lcl9tYXggIT0gZXN0YXRzLT5uaWdfdGltZXJfbWF4KSB7CisJCWVzdGF0cy0+bmlnX3RpbWVyX21heCA9IG5pZ190aW1lcl9tYXg7CisJCUJOWDJYX0VSUigiTklHIHRpbWVyIG1heCAoJXUpXG4iLCBlc3RhdHMtPm5pZ190aW1lcl9tYXgpOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKLQlpbnQgY2xfaWQgPSBCUF9DTF9JRChicCk7CiAJc3RydWN0IHRzdG9ybV9wZXJfcG9ydF9zdGF0cyAqdHBvcnQgPQotCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KLQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KLQkJCSZzdGF0cy0+eHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfeGNsaWVudCA9ICZicC0+b2xkX3hjbGllbnQ7CisJCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7CiAJc3RydWN0IGhvc3RfZnVuY19zdGF0cyAqZnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHMpOwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXUzMiBkaWZmOworCWludCBpOwogCi0JLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLwotCWlmICgodTE2KShsZTE2X3RvX2NwdSh0Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9Ci0JCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgdHN0b3JtIgotCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKLQkJICAgdGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9Ci0JCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgotCQkgICAiICB4c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKLQkJICAgeGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOwotCQlyZXR1cm4gLTI7Ci0JfQorCW1lbXNldCgmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0gMDsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0gMDsKKwllc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpID0gMDsKKwllc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvID0gMDsKKwllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSA9IDA7CisJZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8gPSAwOwogCi0JZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCWludCBjbF9pZCA9IGZwLT5jbF9pZDsKKwkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnRzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmZwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp1Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnVzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF91Y2xpZW50ID0gJmZwLT5vbGRfdWNsaWVudDsKKwkJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnhzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF94Y2xpZW50ID0gJmZwLT5vbGRfeGNsaWVudDsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmZnAtPmV0aF9xX3N0YXRzOworCQl1MzIgZGlmZjsKKworCQkvKiBhcmUgc3Rvcm0gc3RhdHMgdmFsaWQ/ICovCisJCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJCURQKEJOWDJYX01TR19TVEFUUywgIlslZF0gc3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgorCQkJICAgIiAgeHN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCisJCQkgICBpLCB4Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHRjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KKwkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgeworCQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAiWyVkXSBzdGF0cyBub3QgdXBkYXRlZCBieSB0c3Rvcm0iCisJCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJCSAgIGksIHRjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKKwkJCXJldHVybiAtMjsKKwkJfQorCQlpZiAoKHUxNikobGUxNl90b19jcHUodWNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQorCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHVzdG9ybSIKKwkJCSAgICIgIHVzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAorCQkJICAgaSwgdWNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQkJcmV0dXJuIC00OworCQl9CisKKwkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9CisJCXFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkgPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9ieXRlcy5oaSk7Ci0JZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyA9Ci0JZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMubG8pOwogCi0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5oaSk7Ci0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5sbyk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCisJCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfbXVsdGljYXN0X3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfYnJvYWRjYXN0X3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCwKKwkJCQkJZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHMpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKG5vX2J1ZmZfZGlzY2FyZCwgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlTVUJfRVhURU5EX1VTVEFUKHVjYXN0X25vX2J1ZmZfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChtY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChiY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9VU1RBVCh1Y2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7CisJCVVQREFURV9FWFRFTkRfVVNUQVQobWNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOworCQlVUERBVEVfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKKwkJcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5sbyk7CisKKwkJVVBEQVRFX0VYVEVORF9YU1RBVCh1bmljYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKwkJVVBEQVRFX0VYVEVORF9YU1RBVChtdWx0aWNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisJCVVQREFURV9FWFRFTkRfWFNUQVQoYnJvYWRjYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCisJCW9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkID0gdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZDsKKwkJb2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCA9IHRjbGllbnQtPnR0bDBfZGlzY2FyZDsKKworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyk7CisKKwkJQUREXzY0KGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkJICAgICAgIHFzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJCSAgICAgICBlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvLAorCQkgICAgICAgcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbyk7CisJCUFERF82NChlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSwgcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGksCisJCSAgICAgICBlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbywgcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8pOworCX0KKworCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpLAorCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvKTsKKworCW1lbWNweShlc3RhdHMsICYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpOworCisJQUREXzY0KGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2hpLAorCSAgICAgICBlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbyk7CiAJQUREXzY0KGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCiAJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGksCiAJICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8sCiAJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG8pOwogCi0JQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCi0JICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOwotCi0JVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfdW5pY2FzdF9wa3RzLCB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X211bHRpY2FzdF9wa3RzLAotCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKLQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9icm9hZGNhc3RfcGt0cywKLQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZCk7Ci0KLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmxvKTsKLQotCVVQREFURV9FWFRFTkRfWFNUQVQodW5pY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKLQlVUERBVEVfRVhURU5EX1hTVEFUKG11bHRpY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwotCVVQREFURV9FWFRFTkRfWFNUQVQoYnJvYWRjYXN0X3BrdHNfc2VudCwKLQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7Ci0KLQltZW1jcHkoZXN0YXRzLCAmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKLQotCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19maWx0ZXJfZGlzY2FyZCk7Ci0JZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+eHhvdmVyZmxvd19kaXNjYXJkKTsKLQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0KKwkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2ZpbHRlcl9kaXNjYXJkKTsKKwkJZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPQorCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT54eG92ZXJmbG93X2Rpc2NhcmQpOworCQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KIAkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+YnJiX3RydW5jYXRlX2Rpc2NhcmQpOwotCWVzdGF0cy0+bWFjX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2Rpc2NhcmQpOwotCi0Jb2xkX3RjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmhpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5sbyk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkpOwotCW9sZF90Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmxvKTsKLQlvbGRfdGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMubG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMubG8pOwotCW9sZF90Y2xpZW50LT50b3RhbF9yY3ZfcGt0cyA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9wa3RzKTsKLQotCW9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCk7Ci0Jb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCk7Ci0JZXN0YXRzLT5ub19idWZmX2Rpc2NhcmQgPQotCW9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQpOwotCW9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT50dGwwX2Rpc2NhcmQpOwotCi0Jb2xkX3hjbGllbnQtPnRvdGFsX3NlbnRfcGt0cyA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfcGt0cyk7Ci0Jb2xkX3hjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmhpKTsKLQlvbGRfeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmxvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQubG8pOwotCW9sZF94Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8pOwotCW9sZF94Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8pOworCQllc3RhdHMtPm1hY19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19kaXNjYXJkKTsKKwl9CiAKIAlmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19zdGFydCA9ICsrZnN0YXRzLT5ob3N0X2Z1bmNfc3RhdHNfZW5kOwogCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X25ldF9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmJwLT5vbGRfdGNsaWVudDsKIAlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOworCWludCBpOwogCiAJbnN0YXRzLT5yeF9wYWNrZXRzID0KIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpICsKQEAgLTM3MzMsMzQgKzM5MDYsMzMgQEAKIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSkgKwogCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKIAotCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpKTsKKwluc3RhdHMtPnJ4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSk7CiAKIAluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CiAKLQluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCArCi0JCQkgICAgIGVzdGF0cy0+bWFjX2Rpc2NhcmQ7CisJbnN0YXRzLT5yeF9kcm9wcGVkID0gZXN0YXRzLT5tYWNfZGlzY2FyZDsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbnN0YXRzLT5yeF9kcm9wcGVkICs9CisJCQlsZTMyX3RvX2NwdShicC0+ZnBbaV0ub2xkX3RjbGllbnQuY2hlY2tzdW1fZGlzY2FyZCk7CisKIAluc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOwogCiAJbnN0YXRzLT5tdWx0aWNhc3QgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSk7CiAKIAluc3RhdHMtPmNvbGxpc2lvbnMgPQotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19sbyArCi0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfbG8gKwotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCi0JZXN0YXRzLT5qYWJiZXJfcGFja2V0c19yZWNlaXZlZCA9Ci0JCQkJb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICsKLQkJCQllc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbzsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2hpKTsKIAogCW5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCQkJZXN0YXRzLT5yeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2xvICsKLQkJCQllc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkOwotCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBlc3RhdHMtPmJyYl9kcm9wX2xvICsgZXN0YXRzLT5icmJfdHJ1bmNhdGVfbG87Ci0JbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0gZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19sbzsKLQluc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfbG87Ci0JbnN0YXRzLT5yeF9maWZvX2Vycm9ycyA9IG9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQ7CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKTsKKwluc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5icmJfZHJvcF9oaSkgKworCQkJCSBibngyeF9oaWxvKCZlc3RhdHMtPmJyYl90cnVuY2F0ZV9oaSk7CisJbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaSk7CisJbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKTsKKwluc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkpOwogCW5zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkOwogCiAJbnN0YXRzLT5yeF9lcnJvcnMgPSBuc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKwpAQCAtMzc3MSw0NiArMzk0Myw2MSBAQAogCQkJICAgIG5zdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKIAogCW5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPQotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzX2xvOworCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpOworCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKTsKIAluc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKIAluc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOwogCW5zdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CiAKIAluc3RhdHMtPnR4X2Vycm9ycyA9IG5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgKwotCQkJICAgIG5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7CisJCQkgICAgbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyArCisJICAgIGJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCWludCBpOworCisJZXN0YXRzLT5kcml2ZXJfeG9mZiA9IDA7CisJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgPSAwOworCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCA9IDA7CisJZXN0YXRzLT5od19jc3VtX2VyciA9IDA7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOworCisJCWVzdGF0cy0+ZHJpdmVyX3hvZmYgKz0gcXN0YXRzLT5kcml2ZXJfeG9mZjsKKwkJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgKz0gcXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3Q7CisJCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCArPSBxc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQ7CisJCWVzdGF0cy0+aHdfY3N1bV9lcnIgKz0gcXN0YXRzLT5od19jc3VtX2VycjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKLQlpbnQgdXBkYXRlID0gMDsKIAogCWlmICgqc3RhdHNfY29tcCAhPSBETUFFX0NPTVBfVkFMKQogCQlyZXR1cm47CiAKIAlpZiAoYnAtPnBvcnQucG1mKQotCQl1cGRhdGUgPSAoYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKKwkJYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKTsKIAotCXVwZGF0ZSB8PSAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKLQotCWlmICh1cGRhdGUpCi0JCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOwotCi0JZWxzZSB7Ci0JCWlmIChicC0+c3RhdHNfcGVuZGluZykgewotCQkJYnAtPnN0YXRzX3BlbmRpbmcrKzsKLQkJCWlmIChicC0+c3RhdHNfcGVuZGluZyA9PSAzKSB7Ci0JCQkJQk5YMlhfRVJSKCJzdGF0cyBub3QgdXBkYXRlZCBmb3IgMyB0aW1lc1xuIik7Ci0JCQkJYm54MnhfcGFuaWMoKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KKwlpZiAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSAmJiAoYnAtPnN0YXRzX3BlbmRpbmcrKyA9PSAzKSkgeworCQlCTlgyWF9FUlIoInN0b3JtIHN0YXRzIHdlcmUgbm90IHVwZGF0ZWQgZm9yIDMgdGltZXNcbiIpOworCQlibngyeF9wYW5pYygpOworCQlyZXR1cm47CiAJfQogCisJYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShicCk7CisJYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShicCk7CisKIAlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1RJTUVSKSB7Ci0JCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmYnAtPm9sZF90Y2xpZW50OworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0KKwkJCQkJCQkmYnAtPmZwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwLT5ldGhfcV9zdGF0czsKIAkJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdHMgPSAmYnAtPmRldi0+c3RhdHM7CiAJCWludCBpOwpAQCAtMzgyNSwyMCArNDAxMiwyMiBAQAogCQkgICAgICAgKHUxNikobGUxNl90b19jcHUoKmJwLT5mcC0+cnhfY29uc19zYikgLQogCQkJICAgICBicC0+ZnAtPnJ4X2NvbXBfY29ucyksCiAJCSAgICAgICBsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSwgbnN0YXRzLT5yeF9wYWNrZXRzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgKFhvZmYgZXZlbnRzICV1KSAgYnJiIGRyb3BzICV1XG4iLAotCQkgICAgICAgbmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSA/ICJYb2ZmIiA6ICJYb24iLAotCQkgICAgICAgZXN0YXRzLT5kcml2ZXJfeG9mZiwgZXN0YXRzLT5icmJfZHJvcF9sbyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICVzIChYb2ZmIGV2ZW50cyAldSkgIGJyYiBkcm9wcyAldSAgIgorCQkJCSAgImJyYiB0cnVuY2F0ZSAldVxuIiwKKwkJICAgICAgIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpID8gIlhvZmYiIDogIlhvbiIpLAorCQkgICAgICAgcXN0YXRzLT5kcml2ZXJfeG9mZiwKKwkJICAgICAgIGVzdGF0cy0+YnJiX2Ryb3BfbG8sIGVzdGF0cy0+YnJiX3RydW5jYXRlX2xvKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInRzdGF0czogY2hlY2tzdW1fZGlzY2FyZCAldSAgIgotCQkJInBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICV1ICBub19idWZmX2Rpc2NhcmQgJXUgICIKKwkJCSJwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCAlbHUgIG5vX2J1ZmZfZGlzY2FyZCAlbHUgICIKIAkJCSJtYWNfZGlzY2FyZCAldSAgbWFjX2ZpbHRlcl9kaXNjYXJkICV1ICAiCiAJCQkieHhvdnJmbG93X2Rpc2NhcmQgJXUgIGJyYl90cnVuY2F0ZV9kaXNjYXJkICV1ICAiCiAJCQkidHRsMF9kaXNjYXJkICV1XG4iLAotCQkgICAgICAgb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkLCBlc3RhdHMtPm1hY19kaXNjYXJkLAotCQkgICAgICAgZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQsIGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkLAotCQkgICAgICAgZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCwKLQkJICAgICAgIG9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQpOworCQkgICAgICAgbGUzMl90b19jcHUob2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQpLAorCQkgICAgICAgYm54MnhfaGlsbygmcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCisJCSAgICAgICBibngyeF9oaWxvKCZxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSksCisJCSAgICAgICBlc3RhdHMtPm1hY19kaXNjYXJkLCBlc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCwKKwkJICAgICAgIGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkLAorCQkgICAgICAgbGUzMl90b19jcHUob2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCkpOwogCiAJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiWyVkXTogJWx1XHQlbHVcdCVsdVxuIiwgaSwKQEAgLTM5ODcsNyArNDE3Niw3IEBACiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwogCQlpbnQgcmM7CiAKLQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJYm54MnhfdHhfaW50KGZwKTsKIAkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOwogCX0KIApAQCAtNDAzNSwxMCArNDIyNCwxMCBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAKLQlibngyeF9pbml0X2ZpbGwoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIgKwogCQkJVVNUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCiAJCQlzaXplb2Yoc3RydWN0IHVzdG9ybV9zdGF0dXNfYmxvY2spLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiArCiAJCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9jaykvNCk7CiB9CkBAIC00MDkyLDE4ICs0MjgxLDE4IEBACiB7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKIAotCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCVVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCi0JCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiArCiAJCQlUU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgdHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSICsKKwkJCVVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIgKworCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCisJCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiArCisJCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2RlZl9zYihzdHJ1Y3QgYm54MnggKmJwLApAQCAtNDIzOSwxMCArNDQyOCw2IEBACiAJCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLAogCQkJCQkJICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCiAJCQkgYnAtPnJ4X3RpY2tzID8gMCA6IDEpOwotCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsCi0JCQkJCQkgICAgIFVfU0JfRVRIX1JYX0JEX0lOREVYKSwKLQkJCSBicC0+cnhfdGlja3MgPyAwIDogMSk7CiAKIAkJLyogSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUyAqLwogCQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwpAQCAtNDI3Myw4ICs0NDU4LDcgQEAKIAkJaWYgKGZwLT50cGFfc3RhdGVbaV0gPT0gQk5YMlhfVFBBX1NUQVJUKQogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKIAkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBicC0+cnhfYnVmX3NpemUsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwpAQCAtNDI4OSwxNiArNDQ3MywxMyBAQAogCXUxNiByaW5nX3Byb2QsIGNxZV9yaW5nX3Byb2Q7CiAJaW50IGksIGo7CiAKLQlicC0+cnhfYnVmX3NpemUgPSBicC0+ZGV2LT5tdHU7Ci0JYnAtPnJ4X2J1Zl9zaXplICs9IGJwLT5yeF9vZmZzZXQgKyBFVEhfT1ZSRUhFQUQgKwotCQlCQ01fUlhfRVRIX1BBWUxPQURfQUxJR047CisJYnAtPnJ4X2J1Zl9zaXplID0gYnAtPmRldi0+bXR1ICsgRVRIX09WUkVIRUFEICsgQk5YMlhfUlhfQUxJR047CisJRFAoTkVUSUZfTVNHX0lGVVAsCisJICAgIm10dSAlZCAgcnhfYnVmX3NpemUgJWRcbiIsIGJwLT5kZXYtPm10dSwgYnAtPnJ4X2J1Zl9zaXplKTsKIAogCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpIHsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJyeF9idWZfc2l6ZSAlZCAgZWZmZWN0aXZlX210dSAlZFxuIiwKLQkJICAgYnAtPnJ4X2J1Zl9zaXplLCBicC0+ZGV2LT5tdHUgKyBFVEhfT1ZSRUhFQUQpOwogCi0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQkJZm9yIChpID0gMDsgaSA8IG1heF9hZ2dfcXVldWVzOyBpKyspIHsKQEAgLTQzMjEsNyArNDUwMiw3IEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZwLT5yeF9iZF9jb25zID0gMDsKQEAgLTQzOTYsOCArNDU3Nyw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewogCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCi0JCQkJCSAgIiVkIHJ4IHNrYnNcbiIsIGkpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQkJCQkgICIlZCByeCBza2JzIG9uIHF1ZXVlWyVkXVxuIiwgaSwgaik7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJpbmdfcHJvZCA9IE5FWFRfUlhfSURYKHJpbmdfcHJvZCk7CkBAIC00NDMzLDcgKzQ2MTQsNyBAQAogewogCWludCBpLCBqOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7CkBAIC00NDg2LDI3ICs0NjY3LDIwIEBACiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0gYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXU4IHNiX2lkID0gRlBfU0JfSUQoZnApOwotCi0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKEJQX0NMX0lEKGJwKSB8Ci0JCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKKwkJdTggY2xfaWQgPSBmcC0+Y2xfaWQ7CisJCXU4IHNiX2lkID0gZnAtPnNiX2lkOwogCiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zYl9pbmRleF9udW1iZXJzID0KIAkJCQkJCUJOWDJYX1JYX1NCX0lOREVYX05VTTsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmNsaWVudElkID0gRlBfQ0xfSUQoZnApOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uY2xpZW50SWQgPSBjbF9pZDsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uZmxhZ3MgPQotCQkJVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfTUNfQUxJR05NRU5UOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWNfYWxpZ25tZW50X3NpemUgPQotCQkJQkNNX1JYX0VUSF9QQVlMT0FEX0FMSUdOOworCQkJKFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVCB8CisJCQkgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyk7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPQorCQkJCQkJY2xfaWQ7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tY19hbGlnbm1lbnRfbG9nX3NpemUgPQorCQkJCQkJQk5YMlhfUlhfQUxJR05fU0hJRlQ7CiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5iZF9idWZmX3NpemUgPQogCQkJCQkJYnAtPnJ4X2J1Zl9zaXplOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfcGFnZV9iYXNlX2hpID0KQEAgLTQ1MTgsMTMgKzQ2OTIsMjkgQEAKIAkJCQkoVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBIHwKIAkJCQkgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcpOwogCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9idWZmX3NpemUgPQotCQkJCQkodTE2KShCQ01fUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UpOworCQkJCSh1MTYpbWluKCh1MzIpU0dFX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFLAorCQkJCQkgKHUzMikweGZmZmYpOwogCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9wYWdlX2Jhc2VfaGkgPQogCQkJCQkJVTY0X0hJKGZwLT5yeF9zZ2VfbWFwcGluZyk7CiAJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2dlX3BhZ2VfYmFzZV9sbyA9CiAJCQkJCQlVNjRfTE8oZnAtPnJ4X3NnZV9tYXBwaW5nKTsKIAkJfQogCisJCWNvbnRleHQtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9CisJCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCisJCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcsCisJCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKKworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfbG8gPQorCQkJCQkJVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2xvID0KKwkJCQkJCVU2NF9MTyhmcC0+dHhfcHJvZHNfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnN0YXRpc3RpY3NfZGF0YSA9IChjbF9pZCB8CisJCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKIAkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc2JfaW5kZXhfbnVtYmVyID0KIAkJCQkJCUNfU0JfRVRIX1RYX0NRX0lOREVYOwogCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKQEAgLTQ1MzMsMTAgKzQ3MjMsNiBAQAogCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAogCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfWENNX0FHLAogCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7Ci0JCWNvbnRleHQtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9Ci0JCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCi0JCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcsCi0JCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKIAl9CiB9CiAKQEAgLTQ1NDUsMTQgKzQ3MzEsMTUgQEAKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwogCWludCBpOwogCi0JaWYgKCFpc19tdWx0aShicCkpCisJaWYgKGJwLT5tdWx0aV9tb2RlID09IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkKIAkJcmV0dXJuOwogCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJJbml0aWFsaXppbmcgaW5kaXJlY3Rpb24gdGFibGVcbiIpOworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJJbml0aWFsaXppbmcgaW5kaXJlY3Rpb24gdGFibGUgIG11bHRpX21vZGUgJWRcbiIsIGJwLT5tdWx0aV9tb2RlKTsKIAlmb3IgKGkgPSAwOyBpIDwgVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX1NJWkU7IGkrKykKIAkJUkVHX1dSOChicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKIAkJCVRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9PRkZTRVQoZnVuYykgKyBpLAotCQkJQlBfQ0xfSUQoYnApICsgKGkgJSBicC0+bnVtX3F1ZXVlcykpOworCQkJYnAtPmZwLT5jbF9pZCArIChpICUgYnAtPm51bV9yeF9xdWV1ZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgYm54Mnhfc2V0X2NsaWVudF9jb25maWcoc3RydWN0IGJueDJ4ICpicCkKQEAgLTQ1NjIsMTMgKzQ3NDksMTMgQEAKIAlpbnQgaTsKIAogCXRzdG9ybV9jbGllbnQubXR1ID0gYnAtPmRldi0+bXR1OwotCXRzdG9ybV9jbGllbnQuc3RhdGlzdGljc19jb3VudGVyX2lkID0gQlBfQ0xfSUQoYnApOwogCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzID0KLQkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEU7CisJCQkJKFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSB8CisJCQkJIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFKTsKICNpZmRlZiBCQ01fVkxBTgogCWlmIChicC0+cnhfbW9kZSAmJiBicC0+dmxncnAgJiYgKGJwLT5mbGFncyAmIEhXX1ZMQU5fUlhfRkxBRykpIHsKIAkJdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgfD0KLQkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRTsKKwkJCQlUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFOwogCQlEUChORVRJRl9NU0dfSUZVUCwgInZsYW4gcmVtb3ZhbCBlbmFibGVkXG4iKTsKIAl9CiAjZW5kaWYKQEAgLTQ1ODYsNiArNDc3Myw4IEBACiAJfQogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSBicC0+ZnBbaV0uY2xfaWQ7CisKIAkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwogCQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGJwLT5mcFtpXS5jbF9pZCksCiAJCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVswXSk7CkBAIC00NjE0LDE4ICs0ODAzLDIyIEBACiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2Ryb3BfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfZHJvcF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWNhc2UgQk5YMlhfUlhfTU9ERV9OT1JNQUw6CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWNhc2UgQk5YMlhfUlhfTU9ERV9BTExNVUxUSToKIAkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWNhc2UgQk5YMlhfUlhfTU9ERV9QUk9NSVNDOgogCQl0c3Rvcm1fbWFjX2ZpbHRlci51Y2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCUJOWDJYX0VSUigiQkFEIHJ4IG1vZGUgKCVkKVxuIiwgbW9kZSk7CiAJCWJyZWFrOwpAQCAtNDY3NiwxOSArNDg2OSw2NCBAQAogCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7CiB9CiAKKy8qIENhbGN1bGF0ZXMgdGhlIHN1bSBvZiB2bl9taW5fcmF0ZXMuCisgICBJdCdzIG5lZWRlZCBmb3IgZnVydGhlciBub3JtYWxpemluZyBvZiB0aGUgbWluX3JhdGVzLgorICAgUmV0dXJuczoKKyAgICAgc3VtIG9mIHZuX21pbl9yYXRlcy4KKyAgICAgICBvcgorICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCisgICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaW5lc3MgYWxnb3JpdGhtIHNob3VsZCBiZSBkZWFjdGl2YXRlZC4KKyAgICAgSWYgbm90IGFsbCBtaW5fcmF0ZXMgYXJlIHplcm8gdGhlbiB0aG9zZSB0aGF0IGFyZSB6ZXJvZXMgd2lsbCBiZSBzZXQgdG8gMS4KKyAqLworc3RhdGljIHZvaWQgYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGFsbF96ZXJvID0gMTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCB2bjsKKworCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKKwlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKKwkJaW50IGZ1bmMgPSAyKnZuICsgcG9ydDsKKwkJdTMyIHZuX2NmZyA9CisJCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7CisJCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CisJCQkJICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKKworCQkvKiBTa2lwIGhpZGRlbiB2bnMgKi8KKwkJaWYgKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkKKwkJCWNvbnRpbnVlOworCisJCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLworCQlpZiAoIXZuX21pbl9yYXRlKQorCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7CisJCWVsc2UKKwkJCWFsbF96ZXJvID0gMDsKKworCQlicC0+dm5fd2VpZ2h0X3N1bSArPSB2bl9taW5fcmF0ZTsKKwl9CisKKwkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgZmFpcm5lc3MgKi8KKwlpZiAoYWxsX3plcm8pCisJCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKK30KKwogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9mdW5jKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IHRzdG9ybV9ldGhfZnVuY3Rpb25fY29tbW9uX2NvbmZpZyB0c3Rvcm1fY29uZmlnID0gezB9OwogCXN0cnVjdCBzdGF0c19pbmRpY2F0aW9uX2ZsYWdzIHN0YXRzX2ZsYWdzID0gezB9OwogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKLQlpbnQgaTsKKwlpbnQgaSwgajsKKwl1MzIgb2Zmc2V0OwogCXUxNiBtYXhfYWdnX3NpemU7CiAKIAlpZiAoaXNfbXVsdGkoYnApKSB7Ci0JCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gTVVMVElfRkxBR1M7CisJCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gTVVMVElfRkxBR1MoYnApOwogCQl0c3Rvcm1fY29uZmlnLnJzc19yZXN1bHRfbWFzayA9IE1VTFRJX01BU0s7CiAJfQorCWlmIChJU19FMUhNRihicCkpCisJCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzIHw9CisJCQkJVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTTsKIAogCXRzdG9ybV9jb25maWcubGVhZGluZ19jbGllbnRfaWQgPSBCUF9MX0lEKGJwKTsKIApAQCAtNDY5OSwxNyArNDkzNywyOSBAQAogCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOyAvKiBubyByeCB1bnRpbCBsaW5rIGlzIHVwICovCiAJYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOwogCi0JLyogcmVzZXQgeHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGkrKykgewotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIEJQX0NMX0lEKGJwKSkgKwotCQkgICAgICAgaSo0LCAwKTsKLQl9Ci0JLyogcmVzZXQgdHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGkrKykgewotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIEJQX0NMX0lEKGJwKSkgKwotCQkgICAgICAgaSo0LCAwKTsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQl1OCBjbF9pZCA9IGJwLT5mcFtpXS5jbF9pZDsKKworCQkvKiByZXNldCB4c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCisJCW9mZnNldCA9IEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7CisJCWZvciAoaiA9IDA7CisJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQorCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOworCisJCS8qIHJlc2V0IHRzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KKwkJb2Zmc2V0ID0gQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJCSBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKKwkJZm9yIChqID0gMDsKKwkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCisJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7CisKKwkJLyogcmVzZXQgdXN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLworCQlvZmZzZXQgPSBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJIFVTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKKwkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKIAl9CiAKIAkvKiBJbml0IHN0YXRpc3RpY3MgcmVsYXRlZCBjb250ZXh0ICovCkBAIC00NzI1LDYgKzQ5NzUsMTEgQEAKIAlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAogCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOwogCisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7CisKIAlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksCiAJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7CiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKQEAgLTQ3NDQsNiArNDk5OSwxMyBAQAogCSAgICAgICBUU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKIAkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOwogCisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCSAgICAgICBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpLAorCSAgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCSAgICAgICBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewogCQlSRUdfV1I4KGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQsCiAJCQlJU19FMUhNRihicCkpOwpAQCAtNDc2MywyMCArNTAyNSw5MSBAQAogCQltaW4oKHUzMikobWluKCh1MzIpOCwgKHUzMilNQVhfU0tCX0ZSQUdTKSAqCiAJCQkgIFNHRV9QQUdFX1NJWkUgKiBQQUdFU19QRVJfU0dFKSwKIAkJICAgICh1MzIpMHhmZmZmKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpLAorCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCiAJCSAgICAgICBVNjRfTE8oZnAtPnJ4X2NvbXBfbWFwcGluZykpOwogCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgRlBfQ0xfSUQoZnApKSArIDQsCisJCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSArIDQsCiAJCSAgICAgICBVNjRfSEkoZnAtPnJ4X2NvbXBfbWFwcGluZykpOwogCiAJCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIEZQX0NMX0lEKGZwKSksCisJCQkgVVNUT1JNX01BWF9BR0dfU0laRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSwKIAkJCSBtYXhfYWdnX3NpemUpOwogCX0KKworCS8qIGRyb3BsZXNzIGZsb3cgY29udHJvbCAqLworCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWggcnhfcGF1c2UgPSB7MH07CisKKwkJcnhfcGF1c2UuYmRfdGhyX2xvdyA9IDI1MDsKKwkJcnhfcGF1c2UuY3FlX3Rocl9sb3cgPSAyNTA7CisJCXJ4X3BhdXNlLmNvcyA9IDE7CisJCXJ4X3BhdXNlLnNnZV90aHJfbG93ID0gMDsKKwkJcnhfcGF1c2UuYmRfdGhyX2hpZ2ggPSAzNTA7CisJCXJ4X3BhdXNlLmNxZV90aHJfaGlnaCA9IDM1MDsKKwkJcnhfcGF1c2Uuc2dlX3Rocl9oaWdoID0gMDsKKworCQlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgeworCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJCWlmICghZnAtPmRpc2FibGVfdHBhKSB7CisJCQkJcnhfcGF1c2Uuc2dlX3Rocl9sb3cgPSAxNTA7CisJCQkJcnhfcGF1c2Uuc2dlX3Rocl9oaWdoID0gMjUwOworCQkJfQorCisKKwkJCW9mZnNldCA9IEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkJIFVTVE9STV9FVEhfUklOR19QQVVTRV9EQVRBX09GRlNFVChwb3J0LAorCQkJCQkJCQkgICBmcC0+Y2xfaWQpOworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wYXVzZV9kYXRhX2UxaCkvNDsKKwkJCSAgICAgaisrKQorCQkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LAorCQkJCSAgICAgICAoKHUzMiAqKSZyeF9wYXVzZSlbal0pOworCQl9CisJfQorCisJbWVtc2V0KCYoYnAtPmNtbmcpLCAwLCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSk7CisKKwkvKiBJbml0IHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgY29udGV4dHMgKi8KKwlpZiAoSVNfRTFITUYoYnApKSB7CisJCWludCB2bjsKKworCQkvKiBEdXJpbmcgaW5pdCB0aGVyZSBpcyBubyBhY3RpdmUgbGluaworCQkgICBVbnRpbCBsaW5rIGlzIHVwLCBzZXQgbGluayByYXRlIHRvIDEwR2JwcyAqLworCQlicC0+bGlua192YXJzLmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCk7CisKKwkJYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKKworCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCisJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQpOworCisJCS8qIEVuYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCisJCWJwLT5jbW5nLmZsYWdzLmNtbmdfZW5hYmxlcyA9CisJCQkJCUNNTkdfRkxBR1NfUEVSX1BPUlRfUkFURV9TSEFQSU5HX1ZOOworCQlpZiAoYnAtPnZuX3dlaWdodF9zdW0pCisJCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgfD0KKwkJCQkJQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTjsKKwkJZWxzZQorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJBbGwgTUlOIHZhbHVlcyBhcmUgemVyb2VzIgorCQkJICAgIiAgZmFpcm5lc3Mgd2lsbCBiZSBkaXNhYmxlZFxuIik7CisJfSBlbHNlIHsKKwkJLyogcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBhcmUgZGlzYWJsZWQgKi8KKwkJRFAoTkVUSUZfTVNHX0lGVVAsCisJCSAgICJzaW5nbGUgZnVuY3Rpb24gbW9kZSAgbWlubWF4IHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCX0KKworCisJLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCisJaWYgKGJwLT5wb3J0LnBtZikKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQorCQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJICAgICAgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSAqIDQsCisJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBsb2FkX2NvZGUpCkBAIC00ODEzLDEzICs1MTQ2LDE3IEBACiAJCWZwLT5jbF9pZCA9IEJQX0xfSUQoYnApICsgaTsKIAkJZnAtPnNiX2lkID0gZnAtPmNsX2lkOwogCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgImJueDJ4X2luaXRfc2IoJXAsJXApIGluZGV4ICVkICBjbF9pZCAlZCAgc2IgJWRcbiIsCi0JCSAgIGJwLCBmcC0+c3RhdHVzX2JsaywgaSwgRlBfQ0xfSUQoZnApLCBGUF9TQl9JRChmcCkpOworCQkgICAicXVldWVbJWRdOiAgYm54MnhfaW5pdF9zYiglcCwlcCkgIGNsX2lkICVkICBzYiAlZFxuIiwKKwkJICAgaSwgYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+Y2xfaWQsIGZwLT5zYl9pZCk7CiAJCWJueDJ4X2luaXRfc2IoYnAsIGZwLT5zdGF0dXNfYmxrLCBmcC0+c3RhdHVzX2Jsa19tYXBwaW5nLAotCQkJICAgICAgRlBfU0JfSUQoZnApKTsKKwkJCSAgICAgIGZwLT5zYl9pZCk7CiAJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAJfQogCisJLyogZW5zdXJlIHN0YXR1cyBibG9jayBpbmRpY2VzIHdlcmUgcmVhZCAqLworCXJtYigpOworCisKIAlibngyeF9pbml0X2RlZl9zYihicCwgYnAtPmRlZl9zdGF0dXNfYmxrLCBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKIAkJCSAgREVGX1NCX0lEKTsKIAlibngyeF91cGRhdGVfZHNiX2lkeChicCk7CkBAIC01MTk3LDYgKzU1MzQsOCBAQAogCVJFR19XUihicCwgUFhQMl9SRUdfUlFfU1JDX0VORElBTl9NLCAxKTsKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0NEVV9FTkRJQU5fTSwgMSk7CiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9EQkdfRU5ESUFOX00sIDEpOworCS8qIG1ha2Ugc3VyZSB0aGlzIHZhbHVlIGlzIDAgKi8KKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0hDX0VORElBTl9NLCAwKTsKIAogLyoJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9QQkZfU1dBUF9NT0RFLCAxKTsgKi8KIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1FNX1NXQVBfTU9ERSwgMSk7CkBAIC01MjY1LDE0ICs1NjA0LDYgQEAKIAl9CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBCUkIxX0NPTU1PTl9TVEFSVCwgQlJCMV9DT01NT05fRU5EKTsKLQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpIHsKLQkJLyogZml4IGZvciBlbXVsYXRpb24gYW5kIEZQR0EgZm9yIG5vIHBhdXNlICovCi0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCwgNTEzKTsKLQkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8xLCA1MTMpOwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCwgMCk7Ci0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8xLCAwKTsKLQl9Ci0KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQ09NTU9OX1NUQVJULCBQUlNfQ09NTU9OX0VORCk7CiAJUkVHX1dSKGJwLCBQUlNfUkVHX0FfUFJTVV8yMCwgMHhmKTsKIAkvKiBzZXQgTklDIG1vZGUgKi8KQEAgLTUyODUsMzcgKzU2MTYsMTAgQEAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0RNX0NPTU1PTl9TVEFSVCwgVVNETV9DT01NT05fRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0RNX0NPTU1PTl9TVEFSVCwgWFNETV9DT01NT05fRU5EKTsKIAotCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJVFNUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlDU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVhTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJVVNUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCX0gZWxzZSB7IC8qIEUxICovCi0JCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQl9CisJYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0VNX0NPTU1PTl9TVEFSVCwgVFNFTV9DT01NT05fRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0VNX0NPTU1PTl9TVEFSVCwgVVNFTV9DT01NT05fRU5EKTsKQEAgLTUzMzcsOCArNTY0MSw3IEBACiAJCVJFR19XUihicCwgaSwgMHhjMGNhYzAxYSk7CiAJCS8qIFRPRE86IHJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgbWVhbmluZ2Z1bCAqLwogCX0KLQlpZiAoQ0hJUF9JU19FMUgoYnApKQotCQlibngyeF9pbml0X2Jsb2NrKGJwLCBTUkNIX0NPTU1PTl9TVEFSVCwgU1JDSF9DT01NT05fRU5EKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBTUkNIX0NPTU1PTl9TVEFSVCwgU1JDSF9DT01NT05fRU5EKTsKIAlSRUdfV1IoYnAsIFNSQ19SRUdfU09GVF9SU1QsIDApOwogCiAJaWYgKHNpemVvZih1bmlvbiBjZHVfY29udGV4dCkgIT0gMTAyNCkKQEAgLTUzNTcsNiArNTY2MCwxMSBAQAogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQ0ZDX0NPTU1PTl9TVEFSVCwgQ0ZDX0NPTU1PTl9FTkQpOwogCVJFR19XUihicCwgQ0ZDX1JFR19JTklUX1JFRywgMHg3RkYpOworCS8qIGVuYWJsZSBjb250ZXh0IHZhbGlkYXRpb24gaW50ZXJydXB0IGZyb20gQ0ZDICovCisJUkVHX1dSKGJwLCBDRkNfUkVHX0NGQ19JTlRfTUFTSywgMCk7CisKKwkvKiBzZXQgdGhlIHRocmVzaG9sZHMgdG8gcHJldmVudCBDRkMvQ0RVIHJhY2UgKi8KKwlSRUdfV1IoYnAsIENGQ19SRUdfREVCVUcwLCAweDIwMDIwMDAwKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIEhDX0NPTU1PTl9TVEFSVCwgSENfQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgTUlTQ19BRVVfQ09NTU9OX1NUQVJULCBNSVNDX0FFVV9DT01NT05fRU5EKTsKQEAgLTU0MDksOSArNTcxNywxNCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXN3aXRjaCAoYnAtPmNvbW1vbi5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7Ci0JY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCS8qIEZhbiBmYWlsdXJlIGlzIGluZGljYXRlZCBieSBTUElPIDUgKi8KIAkJYm54Mnhfc2V0X3NwaW8oYnAsIE1JU0NfUkVHSVNURVJTX1NQSU9fNSwKIAkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19TUElPX0lOUFVUX0hJX1opOwpAQCAtNTQ1MCw2ICs1NzYzLDcgQEAKIHN0YXRpYyBpbnQgYm54MnhfaW5pdF9wb3J0KHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwl1MzIgbG93LCBoaWdoOwogCXUzMiB2YWw7CiAKIAlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgcG9ydCBpbml0ICBwb3J0ICV4XG4iLCBwb3J0KTsKQEAgLTU0ODQsNiArNTc5OCw4IEBACiAJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9TUkMwX0wyUCArIGZ1bmMqNCwgUFhQX09ORV9JTFQoaSkpOwogI2VuZGlmCiAJLyogUG9ydCBDTXMgY29tZSBoZXJlICovCisJYm54MnhfaW5pdF9ibG9jayhicCwgKHBvcnQgPyBYQ01fUE9SVDFfU1RBUlQgOiBYQ01fUE9SVDBfU1RBUlQpLAorCQkJICAgICAocG9ydCA/IFhDTV9QT1JUMV9FTkQgOiBYQ01fUE9SVDBfRU5EKSk7CiAKIAkvKiBQb3J0IFFNIGNvbWVzIGhlcmUgKi8KICNpZmRlZiBCQ01fSVNDU0kKQEAgLTU0OTQsMTIgKzU4MTAsMzggQEAKIAkJCSAgICAgZnVuYyA/IFRJTUVSU19QT1JUMV9FTkQgOiBUSU1FUlNfUE9SVDBfRU5EKTsKICNlbmRpZgogCS8qIFBvcnQgRFEgY29tZXMgaGVyZSAqLwotCS8qIFBvcnQgQlJCMSBjb21lcyBoZXJlICovCisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCAocG9ydCA/IEJSQjFfUE9SVDFfU1RBUlQgOiBCUkIxX1BPUlQwX1NUQVJUKSwKKwkJCSAgICAgKHBvcnQgPyBCUkIxX1BPUlQxX0VORCA6IEJSQjFfUE9SVDBfRU5EKSk7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApICYmICFDSElQX0lTX0UxSChicCkpIHsKKwkJLyogbm8gcGF1c2UgZm9yIGVtdWxhdGlvbiBhbmQgRlBHQSAqLworCQlsb3cgPSAwOworCQloaWdoID0gNTEzOworCX0gZWxzZSB7CisJCWlmIChJU19FMUhNRihicCkpCisJCQlsb3cgPSAoKGJwLT5mbGFncyAmIE9ORV9QT1JUX0ZMQUcpID8gMTYwIDogMjQ2KTsKKwkJZWxzZSBpZiAoYnAtPmRldi0+bXR1ID4gNDA5NikgeworCQkJaWYgKGJwLT5mbGFncyAmIE9ORV9QT1JUX0ZMQUcpCisJCQkJbG93ID0gMTYwOworCQkJZWxzZSB7CisJCQkJdmFsID0gYnAtPmRldi0+bXR1OworCQkJCS8qICgyNCoxMDI0ICsgdmFsKjQpLzI1NiAqLworCQkJCWxvdyA9IDk2ICsgKHZhbC82NCkgKyAoKHZhbCAlIDY0KSA/IDEgOiAwKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlsb3cgPSAoKGJwLT5mbGFncyAmIE9ORV9QT1JUX0ZMQUcpID8gODAgOiAxNjApOworCQloaWdoID0gbG93ICsgNTY7CS8qIDE0KjEwMjQvMjU2ICovCisJfQorCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8wICsgcG9ydCo0LCBsb3cpOworCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCArIHBvcnQqNCwgaGlnaCk7CisKKwogCS8qIFBvcnQgUFJTIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFRTRE0gY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgQ1NETSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBVU0RNIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFhTRE0gY29tZXMgaGVyZSAqLworCiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IFRTRU1fUE9SVDFfU1RBUlQgOiBUU0VNX1BPUlQwX1NUQVJULAogCQkJICAgICBwb3J0ID8gVFNFTV9QT1JUMV9FTkQgOiBUU0VNX1BPUlQwX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IFVTRU1fUE9SVDFfU1RBUlQgOiBVU0VNX1BPUlQwX1NUQVJULApAQCAtNTUwOCw2ICs1ODUwLDcgQEAKIAkJCSAgICAgcG9ydCA/IENTRU1fUE9SVDFfRU5EIDogQ1NFTV9QT1JUMF9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBYU0VNX1BPUlQxX1NUQVJUIDogWFNFTV9QT1JUMF9TVEFSVCwKIAkJCSAgICAgcG9ydCA/IFhTRU1fUE9SVDFfRU5EIDogWFNFTV9QT1JUMF9FTkQpOworCiAJLyogUG9ydCBVUEIgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgWFBCIGNvbWVzIGhlcmUgKi8KIApAQCAtNTU2NiwzNiArNTkwOSw2MyBAQAogCS8qIFBvcnQgRU1BQzEgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgREJVIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IERCRyBjb21lcyBoZXJlICovCisKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gTklHX1BPUlQxX1NUQVJUIDogTklHX1BPUlQwX1NUQVJULAogCQkJICAgICBwb3J0ID8gTklHX1BPUlQxX0VORCA6IE5JR19QT1JUMF9FTkQpOwogCiAJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCArIHBvcnQqNCwgMSk7CiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCXUzMiB3c3VtOwotCQlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgbV9jbW5nX3BvcnQ7Ci0JCWludCB2bjsKLQogCQkvKiAweDIgZGlzYWJsZSBlMWhvdiwgMHgxIGVuYWJsZSAqLwogCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX01GICsgcG9ydCo0LAogCQkgICAgICAgKElTX0UxSE1GKGJwKSA/IDB4MSA6IDB4MikpOwogCi0JCS8qIEluaXQgUkFURSBTSEFQSU5HIGFuZCBGQUlSTkVTUyBjb250ZXh0cy4KLQkJICAgSW5pdGlhbGl6ZSBhcyBpZiB0aGVyZSBpcyAxMEcgbGluay4gKi8KLQkJd3N1bSA9IGJueDJ4X2NhbGNfdm5fd3N1bShicCk7Ci0JCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnAsIChpbnQpd3N1bSwgMTAwMDAsICZtX2NtbmdfcG9ydCk7Ci0JCWlmIChJU19FMUhNRihicCkpCi0JCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCi0JCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0LAotCQkJCQl3c3VtLCAxMDAwMCwgJm1fY21uZ19wb3J0KTsKKwkJLyogc3VwcG9ydCBwYXVzZSByZXF1ZXN0cyBmcm9tIFVTRE0sIFRTRE0gYW5kIEJSQiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19FR1JFU1NfU1JDX0VOQUJMRV8wICsgcG9ydCo0LCAweDcpOworCisJCXsKKwkJCVJFR19XUihicCwgTklHX1JFR19MTEZDX0VOQUJMRV8wICsgcG9ydCo0LCAwKTsKKwkJCVJFR19XUihicCwgTklHX1JFR19MTEZDX09VVF9FTl8wICsgcG9ydCo0LCAwKTsKKwkJCVJFR19XUihicCwgTklHX1JFR19QQVVTRV9FTkFCTEVfMCArIHBvcnQqNCwgMSk7CisJCX0KIAl9CiAKIAkvKiBQb3J0IE1DUCBjb21lcyBoZXJlICovCiAJLyogUG9ydCBETUFFIGNvbWVzIGhlcmUgKi8KIAotCXN3aXRjaCAoYnAtPmNvbW1vbi5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7Ci0JY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCXsKKwkJdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlLCBhZXVfZ3Bpb19tYXNrLCBvZmZzZXQ7CisKKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKKwkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1osIHBvcnQpOworCisJCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHRoZSBzd2FwIHJlZ2lzdGVyIGlzCisJCSAgIHNldCBhbmQgYWN0aXZlICovCisJCXN3YXBfdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCk7CisJCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOworCisJCS8qIFNlbGVjdCBmdW5jdGlvbiB1cG9uIHBvcnQtc3dhcCBjb25maWd1cmF0aW9uICovCisJCWlmIChwb3J0ID09IDApIHsKKwkJCW9mZnNldCA9IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMDsKKwkJCWFldV9ncGlvX21hc2sgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgPworCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEgOgorCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzA7CisJCX0gZWxzZSB7CisJCQlvZmZzZXQgPSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzA7CisJCQlhZXVfZ3Bpb19tYXNrID0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpID8KKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIDoKKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xOworCQl9CisJCXZhbCA9IFJFR19SRChicCwgb2Zmc2V0KTsKKwkJLyogYWRkIEdQSU8zIHRvIGdyb3VwICovCisJCXZhbCB8PSBhZXVfZ3Bpb19tYXNrOworCQlSRUdfV1IoYnAsIG9mZnNldCwgdmFsKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJLyogYWRkIFNQSU8gNSB0byBncm91cCAwICovCiAJCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKIAkJdmFsIHw9IEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81OwpAQCAtNTY0MSwxMCArNjAxMSwxNyBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwl1MzIgYWRkciwgdmFsOwogCWludCBpOwogCiAJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIGZ1bmMgaW5pdCAgZnVuYyAleFxuIiwgZnVuYyk7CiAKKwkvKiBzZXQgTVNJIHJlY29uZmlndXJlIGNhcGFiaWxpdHkgKi8KKwlhZGRyID0gKHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzApOworCXZhbCA9IFJFR19SRChicCwgYWRkcik7CisJdmFsIHw9IEhDX0NPTkZJR18wX1JFR19NU0lfQVRUTl9FTl8wOworCVJFR19XUihicCwgYWRkciwgdmFsKTsKKwogCWkgPSBGVU5DX0lMVF9CQVNFKGZ1bmMpOwogCiAJYm54MnhfaWx0X3dyKGJwLCBpLCBibngyeF9zcF9tYXBwaW5nKGJwLCBjb250ZXh0KSk7CkBAIC01Njc0LDkgKzYwNTEsNiBAQAogCX0KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBoY19saW1pdHNbZnVuY11bMF0sIGhjX2xpbWl0c1tmdW5jXVsxXSk7CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApKQotCQlSRUdfV1IoYnAsIEhDX1JFR19GVU5DX05VTV9QMCArIHBvcnQqNCwgZnVuYyk7Ci0KIAkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KIAlSRUdfV1IoYnAsIDB4MjExNCwgMHhmZmZmZmZmZik7CiAJUkVHX1dSKGJwLCAweDIxMjAsIDB4ZmZmZmZmZmYpOwpAQCAtNTgwNSwyMCArNjE3OSwxOSBAQAogCWludCBpOwogCiAJLyogZmFzdHBhdGggKi8KKwkvKiBDb21tb24gKi8KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCi0JCS8qIFN0YXR1cyBibG9ja3MgKi8KKwkJLyogc3RhdHVzIGJsb2NrcyAqLwogCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCiAJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKKwl9CisJLyogUnggKi8KKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCi0JCS8qIGZhc3QgcGF0aCByaW5nczogdHhfYnVmIHR4X2Rlc2MgcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwotCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKLQkJCSAgICAgICBibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOwotCisJCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCiAJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSk7CiAJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX21hcHBpbmcpLApAQCAtNTgzNSw2ICs2MjA4LDE1IEBACiAJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9tYXBwaW5nKSwKIAkJCSAgICAgICBCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CiAJfQorCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKKwl9CiAJLyogZW5kIG9mIGZhc3RwYXRoICovCiAKIAlCTlgyWF9QQ0lfRlJFRShicC0+ZGVmX3N0YXR1c19ibGssIGJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLApAQCAtNTg3NywyOSArNjI1OSwyMCBAQAogCWludCBpOwogCiAJLyogZmFzdHBhdGggKi8KKwkvKiBDb21tb24gKi8KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCQlibngyeF9mcChicCwgaSwgYnApID0gYnA7CiAKLQkJLyogU3RhdHVzIGJsb2NrcyAqLworCQkvKiBzdGF0dXMgYmxvY2tzICovCiAJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCiAJCQkJJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAogCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spICsKIAkJCQlzaXplb2Yoc3RydWN0IGV0aF90eF9kYl9kYXRhKSk7CisJfQorCS8qIFJ4ICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAotCQlibngyeF9mcChicCwgaSwgaHdfdHhfcHJvZHMpID0KLQkJCQkodm9pZCAqKShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsaykgKyAxKTsKLQotCQlibngyeF9mcChicCwgaSwgdHhfcHJvZHNfbWFwcGluZykgPQotCQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpICsKLQkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKTsKLQotCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKLQorCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwogCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpLAogCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfYmQpICogTlVNX1JYX0JEKTsKIAkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLApAQCAtNTkxOCw2ICs2MjkxLDIzIEBACiAJCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCiAJCQkJQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwogCX0KKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisKKwkJYm54MnhfZnAoYnAsIGksIGh3X3R4X3Byb2RzKSA9CisJCQkJKHZvaWQgKikoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspICsgMSk7CisKKwkJYm54MnhfZnAoYnAsIGksIHR4X3Byb2RzX21hcHBpbmcpID0KKwkJCQlibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayk7CisKKwkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCisJCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBzd190eF9iZCkgKiBOVU1fVFhfQkQpOworCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJfQogCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwogCiAJQk5YMlhfUENJX0FMTE9DKGJwLT5kZWZfc3RhdHVzX2JsaywgJmJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLApAQCAtNTk3MSw3ICs2MzYxLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKIAkJdTE2IGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKQEAgLTU5ODksNyArNjM3OSw3IEBACiB7CiAJaW50IGksIGo7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgewpAQCAtNjAwMSw4ICs2MzkxLDcgQEAKIAogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKIAkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBicC0+cnhfYnVmX3NpemUsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCQlyeF9idWYtPnNrYiA9IE5VTEw7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC02MDMzLDEwICs2NDIyLDYgQEAKIAkJICAgInN0YXRlICV4XG4iLCBpLCBicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsCiAJCSAgIGJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkpOwogCi0JCWlmIChibngyeF9mcChicCwgaSwgc3RhdGUpICE9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCkKLQkJCUJOWDJYX0VSUigiSVJRIG9mIGZwICMlZCBiZWluZyBmcmVlZCB3aGlsZSAiCi0JCQkJICAic3RhdGUgIT0gY2xvc2VkXG4iLCBpKTsKLQogCQlmcmVlX2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsICZicC0+ZnBbaV0pOwogCX0KIH0KQEAgLTYwNDgsMzIgKzY0MzMsMzcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7CiAJCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJWF9GTEFHOwogCisJfSBlbHNlIGlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgeworCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKKwkJcGNpX2Rpc2FibGVfbXNpKGJwLT5wZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lfRkxBRzsKKwogCX0gZWxzZQogCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBibngyeF9lbmFibGVfbXNpeChzdHJ1Y3QgYm54MnggKmJwKQogewotCWludCBpLCByYywgb2Zmc2V0OworCWludCBpLCByYywgb2Zmc2V0ID0gMTsKKwlpbnQgaWd1X3ZlYyA9IDA7CiAKLQlicC0+bXNpeF90YWJsZVswXS5lbnRyeSA9IDA7Ci0Jb2Zmc2V0ID0gMTsKLQlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbMF0uZW50cnkgPSAwIChzbG93cGF0aClcbiIpOworCWJwLT5tc2l4X3RhYmxlWzBdLmVudHJ5ID0gaWd1X3ZlYzsKKwlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbMF0uZW50cnkgPSAlZCAoc2xvd3BhdGgpXG4iLCBpZ3VfdmVjKTsKIAogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCWludCBpZ3VfdmVjID0gb2Zmc2V0ICsgaSArIEJQX0xfSUQoYnApOwotCisJCWlndV92ZWMgPSBCUF9MX0lEKGJwKSArIG9mZnNldCArIGk7CiAJCWJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLmVudHJ5ID0gaWd1X3ZlYzsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWyVkXS5lbnRyeSA9ICVkICIKIAkJICAgIihmYXN0cGF0aCAjJXUpXG4iLCBpICsgb2Zmc2V0LCBpZ3VfdmVjLCBpKTsKIAl9CiAKIAlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgJmJwLT5tc2l4X3RhYmxlWzBdLAotCQkJICAgICBicC0+bnVtX3F1ZXVlcyArIG9mZnNldCk7CisJCQkgICAgIEJOWDJYX05VTV9RVUVVRVMoYnApICsgb2Zmc2V0KTsKIAlpZiAocmMpIHsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0ktWCBpcyBub3QgYXR0YWluYWJsZVxuIik7Ci0JCXJldHVybiAtMTsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0ktWCBpcyBub3QgYXR0YWluYWJsZSAgcmMgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KKwogCWJwLT5mbGFncyB8PSBVU0lOR19NU0lYX0ZMQUc7CiAKIAlyZXR1cm4gMDsKQEAgLTYwOTEsMjcgKzY0ODEsNjAgQEAKIAl9CiAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlzcHJpbnRmKGZwLT5uYW1lLCAiJXMuZnAlZCIsIGJwLT5kZXYtPm5hbWUsIGkpOwogCQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwKLQkJCQkgYm54MnhfbXNpeF9mcF9pbnQsIDAsCi0JCQkJIGJwLT5kZXYtPm5hbWUsICZicC0+ZnBbaV0pOworCQkJCSBibngyeF9tc2l4X2ZwX2ludCwgMCwgZnAtPm5hbWUsIGZwKTsKIAkJaWYgKHJjKSB7Ci0JCQlCTlgyWF9FUlIoInJlcXVlc3QgZnAgIyVkIGlycSBmYWlsZWQgIHJjIC0lZFxuIiwKLQkJCQkgIGkgKyBvZmZzZXQsIC1yYyk7CisJCQlCTlgyWF9FUlIoInJlcXVlc3QgZnAgIyVkIGlycSBmYWlsZWQgIHJjICVkXG4iLCBpLCByYyk7CiAJCQlibngyeF9mcmVlX21zaXhfaXJxcyhicCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJYm54MnhfZnAoYnAsIGksIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKKwkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSVJROwogCX0KIAorCWkgPSBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKKwlpZiAoaXNfbXVsdGkoYnApKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkgICAgICAgIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwICVkIC0gJWRcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCisJCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXRdLnZlY3RvciwKKwkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwICVkXG4iLAorCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAorCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9lbmFibGVfbXNpKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHJjOworCisJcmMgPSBwY2lfZW5hYmxlX21zaShicC0+cGRldik7CisJaWYgKHJjKSB7CisJCURQKE5FVElGX01TR19JRlVQLCAiTVNJIGlzIG5vdCBhdHRhaW5hYmxlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJX0ZMQUc7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBibngyeF9yZXFfaXJxKHN0cnVjdCBibngyeCAqYnApCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKLQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJ4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKQorCQlmbGFncyA9IDA7CisJZWxzZQorCQlmbGFncyA9IElSUUZfU0hBUkVEOworCisJcmMgPSByZXF1ZXN0X2lycShicC0+cGRldi0+aXJxLCBibngyeF9pbnRlcnJ1cHQsIGZsYWdzLAogCQkJIGJwLT5kZXYtPm5hbWUsIGJwLT5kZXYpOwogCWlmICghcmMpCiAJCWJueDJ4X2ZwKGJwLCAwLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9JUlE7CkBAIC02MTIzLDcgKzY1NDYsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5hcGlfZW5hYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogfQogCkBAIC02MTMxLDcgKzY1NTQsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5hcGlfZGlzYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIH0KIApAQCAtNjEzOSwxMCArNjU2MiwxMCBAQAogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+aW50cl9zZW0pKSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKIAkJCWJueDJ4X25hcGlfZW5hYmxlKGJwKTsKIAkJCWJueDJ4X2ludF9lbmFibGUoYnApOworCQkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQorCQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKIAkJfQogCX0KIH0KQEAgLTYxNTEsMTAgKzY1NzQsOCBAQAogewogCWJueDJ4X2ludF9kaXNhYmxlX3N5bmMoYnAsIGRpc2FibGVfaHcpOwogCWJueDJ4X25hcGlfZGlzYWJsZShicCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKLQkJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KLQl9CisJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKKwlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLwogfQogCiAvKgpAQCAtNjE3MCw5ICs2NTkxLDkgQEAKIAkgKiB1bmljYXN0cyAwLTMxOnBvcnQwIDMyLTYzOnBvcnQxCiAJICogbXVsdGljYXN0IDY0LTEyNzpwb3J0MCAxMjgtMTkxOnBvcnQxCiAJICovCi0JY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gMjsKKwljb25maWctPmhkci5sZW5ndGggPSAyOwogCWNvbmZpZy0+aGRyLm9mZnNldCA9IHBvcnQgPyAzMiA6IDA7Ci0JY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCS8qIHByaW1hcnkgTUFDICovCkBAIC02MTk3LDkgKzY2MTgsOSBAQAogCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIpOwogCiAJLyogYnJvYWRjYXN0ICovCi0JY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9IDB4ZmZmZjsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0gMHhmZmZmOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIgPSAweGZmZmY7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1zYl9tYWNfYWRkciA9IGNwdV90b19sZTE2KDB4ZmZmZik7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9IGNwdV90b19sZTE2KDB4ZmZmZik7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9IGNwdV90b19sZTE2KDB4ZmZmZik7CiAJY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmZsYWdzID0gY3B1X3RvX2xlMTYocG9ydCk7CiAJaWYgKHNldCkKIAkJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0KQEAgLTYyMjgsOSArNjY0OSw5IEBACiAJICogdW5pY2FzdHM6IGJ5IGZ1bmMgbnVtYmVyCiAJICogbXVsdGljYXN0OiAyMCtGVU5DKjIwLCAyMCBlYWNoCiAJICovCi0JY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gMTsKKwljb25maWctPmhkci5sZW5ndGggPSAxOwogCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJQX0ZVTkMoYnApOwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkvKiBwcmltYXJ5IE1BQyAqLwpAQCAtNjI2NCw3ICs2Njg1LDcgQEAKIAkJCSAgICAgaW50ICpzdGF0ZV9wLCBpbnQgcG9sbCkKIHsKIAkvKiBjYW4gdGFrZSBhIHdoaWxlIGlmIGFueSBwb3J0IGlzIHJ1bm5pbmcgKi8KLQlpbnQgY250ID0gNTAwOworCWludCBjbnQgPSA1MDAwOwogCiAJRFAoTkVUSUZfTVNHX0lGVVAsICIlcyBmb3Igc3RhdGUgdG8gYmVjb21lICV4IG9uIElEWCBbJWRdXG4iLAogCSAgIHBvbGwgPyAicG9sbGluZyIgOiAid2FpdGluZyIsIHN0YXRlLCBpZHgpOwpAQCAtNjI4Miw4ICs2NzAzLDEyIEBACiAJCX0KIAogCQltYigpOyAvKiBzdGF0ZSBpcyBjaGFuZ2VkIGJ5IGJueDJ4X3NwX2V2ZW50KCkgKi8KLQkJaWYgKCpzdGF0ZV9wID09IHN0YXRlKQorCQlpZiAoKnN0YXRlX3AgPT0gc3RhdGUpIHsKKyNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJCQlEUChORVRJRl9NU0dfSUZVUCwgImV4aXQgIChjbnQgJWQpXG4iLCA1MDAwIC0gY250KTsKKyNlbmRpZgogCQkJcmV0dXJuIDA7CisJCX0KIAogCQltc2xlZXAoMSk7CiAJfQpAQCAtNjMxNiwxOSArNjc0MSw2OCBAQAogCiBzdGF0aWMgaW50IGJueDJ4X3NldHVwX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKIHsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07CisKIAkvKiByZXNldCBJR1Ugc3RhdGUgKi8KLQlibngyeF9hY2tfc2IoYnAsIGJwLT5mcFtpbmRleF0uc2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOworCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKIAogCS8qIFNFVFVQIHJhbXJvZCAqLwotCWJwLT5mcFtpbmRleF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsIGluZGV4LCAwKTsKKwlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsCisJCSAgICAgIGZwLT5jbF9pZCwgMCk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmV0dXJuIGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9PUEVOLCBpbmRleCwKLQkJCQkgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMCk7CisJCQkJICYoZnAtPnN0YXRlKSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOworCitzdGF0aWMgdm9pZCBibngyeF9zZXRfaW50X21vZGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgbnVtX3F1ZXVlczsKKworCXN3aXRjaCAoaW50X21vZGUpIHsKKwljYXNlIElOVF9NT0RFX0lOVHg6CisJY2FzZSBJTlRfTU9ERV9NU0k6CisJCW51bV9xdWV1ZXMgPSAxOworCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsCisJCSAgICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgbnVtX3F1ZXVlcyk7CisJCWJyZWFrOworCisJY2FzZSBJTlRfTU9ERV9NU0lYOgorCWRlZmF1bHQ6CisJCWlmIChicC0+bXVsdGlfbW9kZSA9PSBFVEhfUlNTX01PREVfUkVHVUxBUikKKwkJCW51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAorCQkJCQkgICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7CisJCWVsc2UKKwkJCW51bV9xdWV1ZXMgPSAxOworCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHJ4IHF1ZXVlcyB0byAlZCIKKwkJICAgIiAgbnVtYmVyIG9mIHR4IHF1ZXVlcyB0byAlZFxuIiwKKwkJICAgYnAtPm51bV9yeF9xdWV1ZXMsIGJwLT5udW1fdHhfcXVldWVzKTsKKwkJLyogaWYgd2UgY2FuJ3QgdXNlIE1TSS1YIHdlIG9ubHkgbmVlZCBvbmUgZnAsCisJCSAqIHNvIHRyeSB0byBlbmFibGUgTVNJLVggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCisJCSAqIGFuZCBmYWxsYmFjayB0byBNU0kgb3IgbGVnYWN5IElOVHggd2l0aCBvbmUgZnAKKwkJICovCisJCWlmIChibngyeF9lbmFibGVfbXNpeChicCkpIHsKKwkJCS8qIGZhaWxlZCB0byBlbmFibGUgTVNJLVggKi8KKwkJCW51bV9xdWV1ZXMgPSAxOworCQkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQkJYnAtPm51bV90eF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQkJaWYgKGJwLT5tdWx0aV9tb2RlKQorCQkJCUJOWDJYX0VSUigiTXVsdGkgcmVxdWVzdGVkIGJ1dCBmYWlsZWQgdG8gIgorCQkJCQkgICJlbmFibGUgTVNJLVggIHNldCBudW1iZXIgb2YgIgorCQkJCQkgICJxdWV1ZXMgdG8gJWRcbiIsIG51bV9xdWV1ZXMpOworCQl9CisJCWJyZWFrOworCX0KKwlicC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBicC0+bnVtX3R4X3F1ZXVlczsKK30KKwogc3RhdGljIHZvaWQgYm54Mnhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggcnRubF9sb2NrICovCkBAIC02MzM3LDU2ICs2ODExLDI4IEBACiAJdTMyIGxvYWRfY29kZTsKIAlpbnQgaSwgcmMgPSAwOwogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwlEUChORVRJRl9NU0dfSUZVUCwgImVudGVyICBsb2FkX21vZGUgJWRcbiIsIGxvYWRfbW9kZSk7CiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCiAJCXJldHVybiAtRVBFUk07CiAjZW5kaWYKIAogCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRDsKIAotCWlmICh1c2VfaW50YSkgewotCQlicC0+bnVtX3F1ZXVlcyA9IDE7Ci0KLQl9IGVsc2UgewotCQlpZiAoKHVzZV9tdWx0aSA+IDEpICYmICh1c2VfbXVsdGkgPD0gQlBfTUFYX1FVRVVFUyhicCkpKQotCQkJLyogdXNlciByZXF1ZXN0ZWQgbnVtYmVyICovCi0JCQlicC0+bnVtX3F1ZXVlcyA9IHVzZV9tdWx0aTsKLQotCQllbHNlIGlmICh1c2VfbXVsdGkpCi0JCQlicC0+bnVtX3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX29ubGluZV9jcHVzKCksCi0JCQkJCSAgICAgICBCUF9NQVhfUVVFVUVTKGJwKSk7Ci0JCWVsc2UKLQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgInNldCBudW1iZXIgb2YgcXVldWVzIHRvICVkXG4iLCBicC0+bnVtX3F1ZXVlcyk7Ci0KLQkJLyogaWYgd2UgY2FuJ3QgdXNlIE1TSS1YIHdlIG9ubHkgbmVlZCBvbmUgZnAsCi0JCSAqIHNvIHRyeSB0byBlbmFibGUgTVNJLVggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCi0JCSAqIGFuZCBmYWxsYmFjayB0byBNU0kgb3IgbGVnYWN5IElOVHggd2l0aCBvbmUgZnAKLQkJICovCi0JCXJjID0gYm54MnhfZW5hYmxlX21zaXgoYnApOwotCQlpZiAocmMpIHsKLQkJCS8qIGZhaWxlZCB0byBlbmFibGUgTVNJLVggKi8KLQkJCWJwLT5udW1fcXVldWVzID0gMTsKLQkJCWlmICh1c2VfbXVsdGkpCi0JCQkJQk5YMlhfRVJSKCJNdWx0aSByZXF1ZXN0ZWQgYnV0IGZhaWxlZCIKLQkJCQkJICAiIHRvIGVuYWJsZSBNU0ktWFxuIik7Ci0JCX0KLQl9CisJYm54Mnhfc2V0X2ludF9tb2RlKGJwKTsKIAogCWlmIChibngyeF9hbGxvY19tZW0oYnApKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcChicCwgaSwgZGlzYWJsZV90cGEpID0KIAkJCQkJKChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpID09IDApOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfYWRkKGJwLT5kZXYsICZibngyeF9mcChicCwgaSwgbmFwaSksCiAJCQkgICAgICAgYm54MnhfcG9sbCwgMTI4KTsKIAogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCWZwLT5wb2xsX25vX3dvcmsgPSAwOwpAQCAtNjQwNCwxNCArNjg1MCwyMiBAQAogCQkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7CiAJCQlnb3RvIGxvYWRfZXJyb3IxOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVhcbiIsIGJwLT5kZXYtPm5hbWUpOwogCX0gZWxzZSB7CisJCWlmICgocmMgIT0gLUVOT01FTSkgJiYgKGludF9tb2RlICE9IElOVF9NT0RFX0lOVHgpKQorCQkJYm54MnhfZW5hYmxlX21zaShicCk7CiAJCWJueDJ4X2Fja19pbnQoYnApOwogCQlyYyA9IGJueDJ4X3JlcV9pcnEoYnApOwogCQlpZiAocmMpIHsKIAkJCUJOWDJYX0VSUigiSVJRIHJlcXVlc3QgZmFpbGVkICByYyAlZCwgYWJvcnRpbmdcbiIsIHJjKTsKKwkJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykKKwkJCQlwY2lfZGlzYWJsZV9tc2koYnAtPnBkZXYpOwogCQkJZ290byBsb2FkX2Vycm9yMTsKIAkJfQorCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpIHsKKwkJCWJwLT5kZXYtPmlycSA9IGJwLT5wZGV2LT5pcnE7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSSAgSVJRICVkXG4iLAorCQkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5wZGV2LT5pcnEpOworCQl9CiAJfQogCiAJLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AKQEAgLTY0MzQsMTEgKzY4ODgsMTEgQEAKIAl9IGVsc2UgewogCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCi0JCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIGxvYWQgY291bnRzIGJlZm9yZSB1cyAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCAtIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWxvYWRfY291bnRbMF0rKzsKIAkJbG9hZF9jb3VudFsxICsgcG9ydF0rKzsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgbmV3IGxvYWQgY291bnRzICAgICAgICVkLCAlZCwgJWRcbiIsCisJCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIC0gbmV3IGxvYWQgY291bnRzICAlZCwgJWQsICVkXG4iLAogCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKIAkJaWYgKGxvYWRfY291bnRbMF0gPT0gMSkKIAkJCWxvYWRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTjsKQEAgLTY0ODUsNyArNjkzOSw3IEBACiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKQogCQlpZiAoYnAtPm1mX2NvbmZpZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfRElTQUJMRUQpIHsKLQkJCUJOWDJYX0VSUigiISEhICBtZl9jZmcgZnVuY3Rpb24gZGlzYWJsZWRcbiIpOworCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJtZl9jZmcgZnVuY3Rpb24gZGlzYWJsZWRcbiIpOwogCQkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRElTQUJMRUQ7CiAJCX0KIApAQCAtNjUwMiwxOSArNjk1NiwxOSBAQAogCQlibngyeF9zZXRfbWFjX2FkZHJfZTFoKGJwLCAxKTsKIAogCWlmIChicC0+cG9ydC5wbWYpCi0JCWJueDJ4X2luaXRpYWxfcGh5X2luaXQoYnApOworCQlibngyeF9pbml0aWFsX3BoeV9pbml0KGJwLCBsb2FkX21vZGUpOwogCiAJLyogU3RhcnQgZmFzdCBwYXRoICovCiAJc3dpdGNoIChsb2FkX21vZGUpIHsKIAljYXNlIExPQURfTk9STUFMOgogCQkvKiBUeCBxdWV1ZSBzaG91bGQgYmUgb25seSByZWVuYWJsZWQgKi8KLQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKKwkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOwogCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KIAkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBMT0FEX09QRU46Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGJwLT5kZXYpOworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGJwLT5kZXYpOwogCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KIAkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CiAJCWJyZWFrOwpAQCAtNjU0NywzMyArNzAwMSwzMiBAQAogCWJwLT5wb3J0LnBtZiA9IDA7CiAJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLwogCWJueDJ4X2ZyZWVfc2ticyhicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKIGxvYWRfZXJyb3IyOgogCS8qIFJlbGVhc2UgSVJRcyAqLwogCWJueDJ4X2ZyZWVfaXJxKGJwKTsKIGxvYWRfZXJyb3IxOgogCWJueDJ4X25hcGlfZGlzYWJsZShicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIAotCS8qIFRCRCB3ZSByZWFsbHkgbmVlZCB0byByZXNldCB0aGUgY2hpcAotCSAgIGlmIHdlIHdhbnQgdG8gcmVjb3ZlciBmcm9tIHRoaXMgKi8KIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgYm54Mnhfc3RvcF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCiB7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOwogCWludCByYzsKIAogCS8qIGhhbHQgdGhlIGNvbm5lY3Rpb24gKi8KLQlicC0+ZnBbaW5kZXhdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCBpbmRleCwgMCwgaW5kZXgsIDApOworCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7CisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgaW5kZXgsIDAsIGZwLT5jbF9pZCwgMCk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCBpbmRleCwKLQkJCSAgICAgICAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAxKTsKKwkJCSAgICAgICAmKGZwLT5zdGF0ZSksIDEpOwogCWlmIChyYykgLyogdGltZW91dCAqLwogCQlyZXR1cm4gcmM7CiAKQEAgLTY1ODIsMTMgKzcwMzUsMTMgQEAKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9DTE9TRUQsIGluZGV4LAotCQkJICAgICAgICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDEpOworCQkJICAgICAgICYoZnAtPnN0YXRlKSwgMSk7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3BfbGVhZGluZyhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUxNiBkc2Jfc3BfcHJvZF9pZHg7CisJX19sZTE2IGRzYl9zcF9wcm9kX2lkeDsKIAkvKiBpZiB0aGUgb3RoZXIgcG9ydCBpcyBoYW5kbGluZyB0cmFmZmljLAogCSAgIHRoaXMgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSAqLwogCWludCBjbnQgPSA1MDA7CkBAIC02NTk4LDcgKzcwNTEsNyBAQAogCiAJLyogU2VuZCBIQUxUIHJhbXJvZCAqLwogCWJwLT5mcFswXS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgMCwgMCwgQlBfQ0xfSUQoYnApLCAwKTsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCAwLCAwLCBicC0+ZnAtPmNsX2lkLCAwKTsKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9IQUxURUQsIDAsCkBAIC02NjIyLDkgKzcwNzUsOCBAQAogCQkJICAgKmJwLT5kc2Jfc3BfcHJvZCwgZHNiX3NwX3Byb2RfaWR4KTsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJCQlibngyeF9wYW5pYygpOwotI2Vsc2UKLQkJCXJjID0gLUVCVVNZOwogI2VuZGlmCisJCQlyYyA9IC1FQlVTWTsKIAkJCWJyZWFrOwogCQl9CiAJCWNudC0tOwpAQCAtNjY0Nyw4ICs3MDk5LDYgQEAKIAlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CiAJUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKIAotCVJFR19XUihicCwgSENfUkVHX0NPTkZJR18wICsgcG9ydCo0LCAweDEwMDApOwotCiAJLyogQ2xlYXIgSUxUICovCiAJYmFzZSA9IEZVTkNfSUxUX0JBU0UoZnVuYyk7CiAJZm9yIChpID0gYmFzZTsgaSA8IGJhc2UgKyBJTFRfUEVSX0ZVTkM7IGkrKykKQEAgLTY3MzAsMTUgKzcxODAsMTQgQEAKIAkvKiBSZWxlYXNlIElSUXMgKi8KIAlibngyeF9mcmVlX2lycShicCk7CiAKLQkvKiBXYWl0IHVudGlsIHR4IGZhc3QgcGF0aCB0YXNrcyBjb21wbGV0ZSAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJLyogV2FpdCB1bnRpbCB0eCBmYXN0cGF0aCB0YXNrcyBjb21wbGV0ZSAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCWNudCA9IDEwMDA7Ci0JCXNtcF9ybWIoKTsKIAkJd2hpbGUgKGJueDJ4X2hhc190eF93b3JrX3VubG9hZChmcCkpIHsKIAotCQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJCWJueDJ4X3R4X2ludChmcCk7CiAJCQlpZiAoIWNudCkgewogCQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBxdWV1ZVslZF1cbiIsCiAJCQkJCSAgaSk7CkBAIC02NzUxLDcgKzcyMDAsNiBAQAogCQkJfQogCQkJY250LS07CiAJCQltc2xlZXAoMSk7Ci0JCQlzbXBfcm1iKCk7CiAJCX0KIAl9CiAJLyogR2l2ZSBIVyB0aW1lIHRvIGRpc2NhcmQgb2xkIHR4IG1lc3NhZ2VzICovCkBAIC02NzYzLDE1ICs3MjExLDE1IEBACiAKIAkJYm54Mnhfc2V0X21hY19hZGRyX2UxKGJwLCAwKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoXzZiOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGg7IGkrKykKIAkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldKTsKIAotCQljb25maWctPmhkci5sZW5ndGhfNmIgPSBpOworCQljb25maWctPmhkci5sZW5ndGggPSBpOwogCQlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCiAJCQljb25maWctPmhkci5vZmZzZXQgPSBCTlgyWF9NQVhfRU1VTF9NVUxUSSooMSArIHBvcnQpOwogCQllbHNlCiAJCQljb25maWctPmhkci5vZmZzZXQgPSBCTlgyWF9NQVhfTVVMVElDQVNUKigxICsgcG9ydCk7Ci0JCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwkJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAkJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtNjgzNSwxMSArNzI4MywxMSBAQAogCWlmICghQlBfTk9NQ1AoYnApKQogCQlyZXNldF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7CiAJZWxzZSB7Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgbG9hZCBjb3VudHMgICAgICAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIC0gbG9hZCBjb3VudHMgICAgICAlZCwgJWQsICVkXG4iLAogCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKIAkJbG9hZF9jb3VudFswXS0tOwogCQlsb2FkX2NvdW50WzEgKyBwb3J0XS0tOwotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCAtIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWlmIChsb2FkX2NvdW50WzBdID09IDApCiAJCQlyZXNldF9jb2RlID0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT047CkBAIC02ODU5LDEzICs3MzA3LDE0IEBACiAJLyogUmVwb3J0IFVOTE9BRF9ET05FIHRvIE1DUCAqLwogCWlmICghQlBfTk9NQ1AoYnApKQogCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUpOworCiAJYnAtPnBvcnQucG1mID0gMDsKIAogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIApAQCAtNjkwNyw2ICs3MzU2LDY0IEBACiAgKiBJbml0IHNlcnZpY2UgZnVuY3Rpb25zCiAgKi8KIAorc3RhdGljIGlubGluZSB1MzIgYm54MnhfZ2V0X3ByZXRlbmRfcmVnKHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQoreworCXN3aXRjaCAoZnVuYykgeworCWNhc2UgMDogcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjA7CisJY2FzZSAxOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMTsKKwljYXNlIDI6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YyOworCWNhc2UgMzoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjM7CisJY2FzZSA0OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNDsKKwljYXNlIDU6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y1OworCWNhc2UgNjoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjY7CisJY2FzZSA3OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNzsKKwlkZWZhdWx0OgorCQlCTlgyWF9FUlIoIlVuc3VwcG9ydGVkIGZ1bmN0aW9uIGluZGV4OiAlZFxuIiwgZnVuYyk7CisJCXJldHVybiAodTMyKSgtMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibngyeF91bmRpX2ludF9kaXNhYmxlX2UxaChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgb3JpZ19mdW5jKQoreworCXUzMiByZWcgPSBibngyeF9nZXRfcHJldGVuZF9yZWcoYnAsIG9yaWdfZnVuYyksIG5ld192YWw7CisKKwkvKiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKKwkvKiBQcmV0ZW5kIHRvIGJlIGZ1bmN0aW9uIDAgKi8KKwlSRUdfV1IoYnAsIHJlZywgMCk7CisJLyogRmx1c2ggdGhlIEdSQyB0cmFuc2FjdGlvbiAoaW4gdGhlIGNoaXApICovCisJbmV3X3ZhbCA9IFJFR19SRChicCwgcmVnKTsKKwlpZiAobmV3X3ZhbCAhPSAwKSB7CisJCUJOWDJYX0VSUigiSG1tbS4uLiBQcmV0ZW5kIHJlZ2lzdGVyIHdhc24ndCB1cGRhdGVkOiAoMCwlZCkhXG4iLAorCQkJICBuZXdfdmFsKTsKKwkJQlVHKCk7CisJfQorCisJLyogRnJvbSBub3cgd2UgYXJlIGluIHRoZSAibGlrZS1FMSIgbW9kZSAqLworCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKKworCS8qIEZsdXNoIGFsbCBvdXRzdGFuZGluZyB3cml0ZXMgKi8KKwltbWlvd2IoKTsKKworCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGZ1bnRpb24gc2V0dGluZ3MgKi8KKwlSRUdfV1IoYnAsIHJlZywgb3JpZ19mdW5jKTsKKwluZXdfdmFsID0gUkVHX1JEKGJwLCByZWcpOworCWlmIChuZXdfdmFsICE9IG9yaWdfZnVuYykgeworCQlCTlgyWF9FUlIoIkhtbW0uLi4gUHJldGVuZCByZWdpc3RlciB3YXNuJ3QgdXBkYXRlZDogKCVkLCVkKSFcbiIsCisJCQkgIG9yaWdfZnVuYywgbmV3X3ZhbCk7CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VuZGlfaW50X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCit7CisJaWYgKENISVBfSVNfRTFIKGJwKSkKKwkJYm54MnhfdW5kaV9pbnRfZGlzYWJsZV9lMWgoYnAsIGZ1bmMpOworCWVsc2UKKwkJYm54MnhfaW50X2Rpc2FibGUoYnApOworfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfdW5kaV91bmxvYWQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgdmFsOwpAQCAtNjk1Nyw4ICs3NDY0LDcgQEAKIAkJCS8qIG5vdyBpdCdzIHNhZmUgdG8gcmVsZWFzZSB0aGUgbG9jayAqLwogCQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1VOREkpOwogCi0JCQlSRUdfV1IoYnAsIChCUF9QT1JUKGJwKSA/IEhDX1JFR19DT05GSUdfMSA6Ci0JCQkJICAgIEhDX1JFR19DT05GSUdfMCksIDB4MTAwMCk7CisJCQlibngyeF91bmRpX2ludF9kaXNhYmxlKGJwLCBmdW5jKTsKIAogCQkJLyogY2xvc2UgaW5wdXQgdHJhZmZpYyBhbmQgd2FpdCBmb3IgaXQgKi8KIAkJCS8qIERvIG5vdCByY3YgcGFja2V0cyB0byBCUkIgKi8KQEAgLTcwMjYsNiArNzUzMiwxMyBAQAogCWJwLT5saW5rX3BhcmFtcy5jaGlwX2lkID0gYnAtPmNvbW1vbi5jaGlwX2lkOwogCUJOWDJYX0RFVl9JTkZPKCJjaGlwIElEIGlzIDB4JXhcbiIsIGlkKTsKIAorCXZhbCA9IChSRUdfUkQoYnAsIDB4Mjg3NCkgJiAweDU1KTsKKwlpZiAoKGJwLT5jb21tb24uY2hpcF9pZCAmIDB4MSkgfHwKKwkgICAgKENISVBfSVNfRTEoYnApICYmIHZhbCkgfHwgKENISVBfSVNfRTFIKGJwKSAmJiAodmFsID09IDB4NTUpKSkgeworCQlicC0+ZmxhZ3MgfD0gT05FX1BPUlRfRkxBRzsKKwkJQk5YMlhfREVWX0lORk8oInNpbmdsZSBwb3J0IGRldmljZVxuIik7CisJfQorCiAJdmFsID0gUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfTlZNX0NGRzQpOwogCWJwLT5jb21tb24uZmxhc2hfc2l6ZSA9IChOVlJBTV8xTUJfU0laRSA8PAogCQkJCSAodmFsICYgTUNQUl9OVk1fQ0ZHNF9GTEFTSF9TSVpFKSk7CkBAIC03MDUwLDE1ICs3NTYzLDIxIEBACiAJCUJOWDJYX0VSUigiQkFEIE1DUCB2YWxpZGl0eSBzaWduYXR1cmVcbiIpOwogCiAJYnAtPmNvbW1vbi5od19jb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5jb25maWcpOwotCWJwLT5jb21tb24uYm9hcmQgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5ib2FyZCk7Ci0KLQlCTlgyWF9ERVZfSU5GTygiaHdfY29uZmlnIDB4JTA4eCAgYm9hcmQgMHglMDh4XG4iLAotCQkgICAgICAgYnAtPmNvbW1vbi5od19jb25maWcsIGJwLT5jb21tb24uYm9hcmQpOworCUJOWDJYX0RFVl9JTkZPKCJod19jb25maWcgMHglMDh4XG4iLCBicC0+Y29tbW9uLmh3X2NvbmZpZyk7CiAKIAlicC0+bGlua19wYXJhbXMuaHdfbGVkX21vZGUgPSAoKGJwLT5jb21tb24uaHdfY29uZmlnICYKIAkJCQkJU0hBUkVEX0hXX0NGR19MRURfTU9ERV9NQVNLKSA+PgogCQkJCSAgICAgICBTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX1NISUZUKTsKIAorCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyA9IDA7CisJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9mZWF0dXJlX2NvbmZpZy5jb25maWcpOworCWlmICh2YWwgJiBTSEFSRURfRkVBVF9DRkdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfQ0ZHX0VOQUJMRUQpCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQorCQkJCUZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQ7CisJZWxzZQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgJj0KKwkJCQl+RkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRDsKKwogCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5iY19yZXYpID4+IDg7CiAJYnAtPmNvbW1vbi5iY192ZXIgPSB2YWw7CiAJQk5YMlhfREVWX0lORk8oImJjX3ZlciAlWFxuIiwgdmFsKTsKQEAgLTcwNzcsNyArNzU5Niw3IEBACiAJCWJwLT5mbGFncyB8PSBOT19XT0xfRkxBRzsKIAl9CiAJQk5YMlhfREVWX0lORk8oIiVzV29MIGNhcGFibGVcbiIsCi0JCSAgICAgICAoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpID8gIk5vdCAiIDogIiIpOworCQkgICAgICAgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSA/ICJub3QgIiA6ICIiKTsKIAogCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtKTsKIAl2YWwyID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW1bNF0pOwpAQCAtNzE3MCwyNyArNzY4OSw2IEBACiAJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDUpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDYpXG4iLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4MDcyKVxuIiwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKQEAgLTcyMTYsNiArNzcxNCwzOSBAQAogCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA1KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA2KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcyNilcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKFNGWDcxMDEpXG4iLAogCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwpAQCAtNzIyNyw2ICs3NzU4LDIyIEBACiAJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKEJDTTg0ODEpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfVFAgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKIAkJCUJOWDJYX0VSUigiWEdYUyBQSFkgRmFpbHVyZSBkZXRlY3RlZCAweCV4XG4iLAogCQkJCSAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKQEAgLTc0NTIsMTIgKzc5OTksMTIgQEAKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCXUzMiB2YWwsIHZhbDI7CisJdTMyIGNvbmZpZzsKKwl1MTYgaTsKIAogCWJwLT5saW5rX3BhcmFtcy5icCA9IGJwOwogCWJwLT5saW5rX3BhcmFtcy5wb3J0ID0gcG9ydDsKIAotCWJwLT5saW5rX3BhcmFtcy5zZXJkZXNfY29uZmlnID0KLQkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnNlcmRlc19jb25maWcpOwogCWJwLT5saW5rX3BhcmFtcy5sYW5lX2NvbmZpZyA9CiAJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5sYW5lX2NvbmZpZyk7CiAJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnID0KQEAgLTc0NzAsMTAgKzgwMTcsMzUgQEAKIAlicC0+cG9ydC5saW5rX2NvbmZpZyA9CiAJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2ZlYXR1cmVfY29uZmlnW3BvcnRdLmxpbmtfY29uZmlnKTsKIAotCUJOWDJYX0RFVl9JTkZPKCJzZXJkZXNfY29uZmlnIDB4JTA4eCAgbGFuZV9jb25maWcgMHglMDh4XG4iCi0JICAgICBLRVJOX0lORk8gIiAgZXh0X3BoeV9jb25maWcgMHglMDh4ICBzcGVlZF9jYXBfbWFzayAweCUwOHgiCi0JCSAgICAgICAiICBsaW5rX2NvbmZpZyAweCUwOHhcbiIsCi0JCSAgICAgICBicC0+bGlua19wYXJhbXMuc2VyZGVzX2NvbmZpZywKKwkvKiBHZXQgdGhlIDQgbGFuZXMgeGd4cyBjb25maWcgcnggYW5kIHR4ICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl2YWwgPSBTSE1FTV9SRChicCwKKwkJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnhneHNfY29uZmlnX3J4W2k8PDFdKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3J4W2kgPDwgMV0gPSAoKHZhbD4+MTYpICYgMHhmZmZmKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3J4WyhpIDw8IDEpICsgMV0gPSAodmFsICYgMHhmZmZmKTsKKworCQl2YWwgPSBTSE1FTV9SRChicCwKKwkJCSAgIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnhneHNfY29uZmlnX3R4W2k8PDFdKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3R4W2kgPDwgMV0gPSAoKHZhbD4+MTYpICYgMHhmZmZmKTsKKwkJYnAtPmxpbmtfcGFyYW1zLnhneHNfY29uZmlnX3R4WyhpIDw8IDEpICsgMV0gPSAodmFsICYgMHhmZmZmKTsKKwl9CisKKwljb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5jb25maWcpOworCWlmIChjb25maWcgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRU5BQkxFRCkKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCQkJRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRDsKKwllbHNlCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyAmPQorCQkJCX5GRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEOworCisJLyogSWYgdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mIFdvTCwgc2V0IHRoZSBkZWZhdWx0IHN0YXRlIGFjY29yZGluZworCSAqIHRvIHRoZSBIVworCSAqLworCWJwLT53b2wgPSAoIShicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgJiYKKwkJICAgKGNvbmZpZyAmIFBPUlRfRkVBVFVSRV9XT0xfRU5BQkxFRCkpOworCisJQk5YMlhfREVWX0lORk8oImxhbmVfY29uZmlnIDB4JTA4eCAgZXh0X3BoeV9jb25maWcgMHglMDh4IgorCQkgICAgICAgIiAgc3BlZWRfY2FwX21hc2sgMHglMDh4ICBsaW5rX2NvbmZpZyAweCUwOHhcbiIsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMubGFuZV9jb25maWcsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2ssIGJwLT5wb3J0LmxpbmtfY29uZmlnKTsKQEAgLTc1MjAsNyArODA5Miw3IEBACiAJCQkJICAgICAgICIoMHglMDR4KVxuIiwKIAkJCQkgICAgICAgZnVuYywgYnAtPmUxaG92LCBicC0+ZTFob3YpOwogCQl9IGVsc2UgewotCQkJQk5YMlhfREVWX0lORk8oIlNpbmdsZSBmdW5jdGlvbiBtb2RlXG4iKTsKKwkJCUJOWDJYX0RFVl9JTkZPKCJzaW5nbGUgZnVuY3Rpb24gbW9kZVxuIik7CiAJCQlpZiAoQlBfRTFIVk4oYnApKSB7CiAJCQkJQk5YMlhfRVJSKCIhISEgIE5vIHZhbGlkIEUxSE9WIGZvciBmdW5jICVkLCIKIAkJCQkJICAiICBhYm9ydGluZ1xuIiwgZnVuYyk7CkBAIC03NTcwLDYgKzgxNDIsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9icChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJaW50IHRpbWVyX2ludGVydmFsOwogCWludCByYzsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nIHVudGlsIEhXIGlzIGluaXRpYWxpemVkICovCkBAIC03NTkzLDYgKzgxNjYsMTYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkgICAgICAgIk1DUCBkaXNhYmxlZCwgbXVzdCBsb2FkIGRldmljZXMgaW4gb3JkZXIhXG4iKTsKIAorCS8qIFNldCBtdWx0aSBxdWV1ZSBtb2RlICovCisJaWYgKChtdWx0aV9tb2RlICE9IEVUSF9SU1NfTU9ERV9ESVNBQkxFRCkgJiYKKwkgICAgKChpbnRfbW9kZSA9PSBJTlRfTU9ERV9JTlR4KSB8fCAoaW50X21vZGUgPT0gSU5UX01PREVfTVNJKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAiTXVsdGkgZGlzYWJsZWQgc2luY2UgaW50X21vZGUgcmVxdWVzdGVkIGlzIG5vdCBNU0ktWFxuIik7CisJCW11bHRpX21vZGUgPSBFVEhfUlNTX01PREVfRElTQUJMRUQ7CisJfQorCWJwLT5tdWx0aV9tb2RlID0gbXVsdGlfbW9kZTsKKworCiAJLyogU2V0IFRQQSBmbGFncyAqLwogCWlmIChkaXNhYmxlX3RwYSkgewogCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKQEAgLTc2MDIsMTggKzgxODUsMTggQEAKIAkJYnAtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiAJfQogCisJYnAtPm1ycnMgPSBtcnJzOwogCiAJYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKIAlicC0+cnhfcmluZ19zaXplID0gTUFYX1JYX0FWQUlMOwogCiAJYnAtPnJ4X2NzdW0gPSAxOwotCWJwLT5yeF9vZmZzZXQgPSAwOwogCiAJYnAtPnR4X3RpY2tzID0gNTA7CiAJYnAtPnJ4X3RpY2tzID0gMjU7CiAKLQlicC0+dGltZXJfaW50ZXJ2YWwgPSAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyA1KkhaIDogSFopOwotCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogYnAtPnRpbWVyX2ludGVydmFsKTsKKwl0aW1lcl9pbnRlcnZhbCA9IChDSElQX1JFVl9JU19TTE9XKGJwKSA/IDUqSFogOiBIWik7CisJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSAocG9sbCA/IHBvbGwgOiB0aW1lcl9pbnRlcnZhbCk7CiAKIAlpbml0X3RpbWVyKCZicC0+dGltZXIpOwogCWJwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGJwLT5jdXJyZW50X2ludGVydmFsOwpAQCAtNzY1OCwxNCArODI0MSwxNiBAQAogCiAJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CiAJCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CiAJCQljbWQtPnBvcnQgPSBQT1JUX1RQOwogCQkJYnJlYWs7CiAKQEAgLTc4ODcsNiArODQ3Miw4NCBAQAogCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKIH0KIAorI2RlZmluZSBJU19FMV9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMV9PTkxJTkUpID09IFJJX0UxX09OTElORSkKKyNkZWZpbmUgSVNfRTFIX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxSF9PTkxJTkUpID09IFJJX0UxSF9PTkxJTkUpCisKK3N0YXRpYyBpbnQgYm54MnhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RhdGljIHUzMiByZWdkdW1wX2xlbjsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChyZWdkdW1wX2xlbikKKwkJcmV0dXJuIHJlZ2R1bXBfbGVuOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSByZWdfYWRkcnNbaV0uc2l6ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV1JFR1NfQ09VTlRfRTE7IGkrKykKKwkJCWlmIChJU19FMV9PTkxJTkUod3JlZ19hZGRyc19lMVtpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UxW2ldLnNpemUgKgorCQkJCQkoMSArIHdyZWdfYWRkcnNfZTFbaV0ucmVhZF9yZWdzX2NvdW50KTsKKworCX0gZWxzZSB7IC8qIEUxSCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHJlZ19hZGRyc1tpXS5zaXplOworCisJCWZvciAoaSA9IDA7IGkgPCBXUkVHU19DT1VOVF9FMUg7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHdyZWdfYWRkcnNfZTFoW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHdyZWdfYWRkcnNfZTFoW2ldLnNpemUgKgorCQkJCQkoMSArIHdyZWdfYWRkcnNfZTFoW2ldLnJlYWRfcmVnc19jb3VudCk7CisJfQorCXJlZ2R1bXBfbGVuICo9IDQ7CisJcmVnZHVtcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcik7CisKKwlyZXR1cm4gcmVnZHVtcF9sZW47Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpfcCkKK3sKKwl1MzIgKnAgPSBfcCwgaSwgajsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZHVtcF9oZHIgZHVtcF9oZHIgPSB7MH07CisKKwlyZWdzLT52ZXJzaW9uID0gMDsKKwltZW1zZXQocCwgMCwgcmVncy0+bGVuKTsKKworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuOworCisJZHVtcF9oZHIuaGRyX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcikgLyA0KSAtIDE7CisJZHVtcF9oZHIuZHVtcF9zaWduID0gZHVtcF9zaWduX2FsbDsKKwlkdW1wX2hkci54c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFhTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci50c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFRTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci51c3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIFVTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci5jc3Rvcm1fd2FpdHAgPSBSRUdfUkQoYnAsIENTVE9STV9XQUlUUF9BRERSKTsKKwlkdW1wX2hkci5pbmZvID0gQ0hJUF9JU19FMShicCkgPyBSSV9FMV9PTkxJTkUgOiBSSV9FMUhfT05MSU5FOworCisJbWVtY3B5KHAsICZkdW1wX2hkciwgc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcikpOworCXAgKz0gZHVtcF9oZHIuaGRyX3NpemUgKyAxOworCisJaWYgKENISVBfSVNfRTEoYnApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlmb3IgKGogPSAwOyBqIDwgcmVnX2FkZHJzW2ldLnNpemU7IGorKykKKwkJCQkJKnArKyA9IFJFR19SRChicCwKKwkJCQkJCSAgICAgIHJlZ19hZGRyc1tpXS5hZGRyICsgaio0KTsKKworCX0gZWxzZSB7IC8qIEUxSCAqLworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCWZvciAoaiA9IDA7IGogPCByZWdfYWRkcnNbaV0uc2l6ZTsgaisrKQorCQkJCQkqcCsrID0gUkVHX1JEKGJwLAorCQkJCQkJICAgICAgcmVnX2FkZHJzW2ldLmFkZHIgKyBqKjQpOworCX0KK30KKwogc3RhdGljIHZvaWQgYm54MnhfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MDQ1LDcgKzg3MDgsNyBAQAogCQkJTUNQUl9OVk1fQUNDRVNTX0VOQUJMRV9XUl9FTikpKTsKIH0KIAotc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHUzMiAqcmV0X3ZhbCwKK3N0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZF9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCBfX2JlMzIgKnJldF92YWwsCiAJCQkJICB1MzIgY21kX2ZsYWdzKQogewogCWludCBjb3VudCwgaSwgcmM7CkBAIC04MDgxLDggKzg3NDQsNyBAQAogCQkJLyogd2UgcmVhZCBudnJhbSBkYXRhIGluIGNwdSBvcmRlcgogCQkJICogYnV0IGV0aHRvb2wgc2VlcyBpdCBhcyBhbiBhcnJheSBvZiBieXRlcwogCQkJICogY29udmVydGluZyB0byBiaWctZW5kaWFuIHdpbGwgZG8gdGhlIHdvcmsgKi8KLQkJCXZhbCA9IGNwdV90b19iZTMyKHZhbCk7Ci0JCQkqcmV0X3ZhbCA9IHZhbDsKKwkJCSpyZXRfdmFsID0gY3B1X3RvX2JlMzIodmFsKTsKIAkJCXJjID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC04MDk2LDcgKzg3NTgsNyBAQAogewogCWludCByYzsKIAl1MzIgY21kX2ZsYWdzOwotCXUzMiB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmICgob2Zmc2V0ICYgMHgwMykgfHwgKGJ1Zl9zaXplICYgMHgwMykgfHwgKGJ1Zl9zaXplID09IDApKSB7CiAJCURQKEJOWDJYX01TR19OVk0sCkBAIC04MjE1LDcgKzg4NzcsNyBAQAogCWludCByYzsKIAl1MzIgY21kX2ZsYWdzOwogCXUzMiBhbGlnbl9vZmZzZXQ7Ci0JdTMyIHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmNvbW1vbi5mbGFzaF9zaXplKSB7CiAJCURQKEJOWDJYX01TR19OVk0sICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0ICgweCV4KSArIgpAQCAtODM0NCw3ICs5MDA2LDcgQEAKIAkJCWlmICgoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHx8CiAJCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9ESVNBQkxFRCkpIHsKIAkJCQlyYyB8PSBibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsCi0JCQkJCQkgICAgICAgJmJwLT5saW5rX3ZhcnMpOworCQkJCQkJICAgICAgICZicC0+bGlua192YXJzLCAxKTsKIAkJCQlyYyB8PSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLAogCQkJCQkJICAgICAmYnAtPmxpbmtfdmFycyk7CiAJCQl9CkBAIC04NDM0LDcgKzkwOTYsOCBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZXBhdXNlLT5hdXRvbmVnID0gKGJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID09IEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgorCWVwYXVzZS0+YXV0b25lZyA9IChicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9PQorCQkJICAgQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCiAJCQkgIChicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpOwogCiAJZXBhdXNlLT5yeF9wYXVzZSA9ICgoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpID09CkBAIC04NTY2LDggKzkyMjksNyBAQAogCXsgIm52cmFtX3Rlc3QgKG9ubGluZSkiIH0sCiAJeyAiaW50ZXJydXB0X3Rlc3QgKG9ubGluZSkiIH0sCiAJeyAibGlua190ZXN0IChvbmxpbmUpIiB9LAotCXsgImlkbGUgY2hlY2sgKG9ubGluZSkiIH0sCi0JeyAiTUMgZXJyb3JzIChvbmxpbmUpIiB9CisJeyAiaWRsZSBjaGVjayAob25saW5lKSIgfQogfTsKIAogc3RhdGljIGludCBibngyeF9zZWxmX3Rlc3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTg3NTUsMjMgKzk0MTcsMjMgQEAKIAl1MTYgbGVuOwogCWludCByYyA9IC1FTk9ERVY7CiAKLQlpZiAobG9vcGJhY2tfbW9kZSA9PSBCTlgyWF9NQUNfTE9PUEJBQ0spIHsKKwkvKiBjaGVjayB0aGUgbG9vcGJhY2sgbW9kZSAqLworCXN3aXRjaCAobG9vcGJhY2tfbW9kZSkgeworCWNhc2UgQk5YMlhfUEhZX0xPT1BCQUNLOgorCQlpZiAoYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfWEdYU18xMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIEJOWDJYX01BQ19MT09QQkFDSzoKIAkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19CTUFDOwogCQlibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7Ci0KLQl9IGVsc2UgaWYgKGxvb3BiYWNrX21vZGUgPT0gQk5YMlhfUEhZX0xPT1BCQUNLKSB7Ci0JCXUxNiBjbnQgPSAxMDAwOwotCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX1hHWFNfMTA7Ci0JCWJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKLQkJLyogd2FpdCB1bnRpbCBsaW5rIHN0YXRlIGlzIHJlc3RvcmVkICovCi0JCWlmIChsaW5rX3VwKQotCQkJd2hpbGUgKGNudC0tICYmIGJueDJ4X3Rlc3RfbGluaygmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkJCSZicC0+bGlua192YXJzKSkKLQkJCQltc2xlZXAoMTApOwotCX0gZWxzZQorCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlwa3Rfc2l6ZSA9IDE1MTQ7CisJLyogcHJlcGFyZSB0aGUgbG9vcGJhY2sgcGFja2V0ICovCisJcGt0X3NpemUgPSAoKChicC0+ZGV2LT5tdHUgPCBFVEhfTUFYX1BBQ0tFVF9TSVpFKSA/CisJCSAgICAgYnAtPmRldi0+bXR1IDogRVRIX01BWF9QQUNLRVRfU0laRSkgKyBFVEhfSExFTik7CiAJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOwogCWlmICghc2tiKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTg3ODMsNiArOTQ0NSw3IEBACiAJZm9yIChpID0gRVRIX0hMRU47IGkgPCBwa3Rfc2l6ZTsgaSsrKQogCQlwYWNrZXRbaV0gPSAodW5zaWduZWQgY2hhcikgKGkgJiAweGZmKTsKIAorCS8qIHNlbmQgdGhlIGxvb3BiYWNrIHBhY2tldCAqLwogCW51bV9wa3RzID0gMDsKIAl0eF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpOwogCXJ4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYik7CkBAIC04ODA3LDEyICs5NDcwLDEwIEBACiAKIAl3bWIoKTsKIAotCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgPQotCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kKSArIDEpOworCWxlMTZfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCwgMSk7CiAJbWIoKTsgLyogRlcgcmVzdHJpY3Rpb246IG11c3Qgbm90IHJlb3JkZXIgd3JpdGluZyBuYmQgYW5kIHBhY2tldHMgKi8KLQlmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCA9Ci0JCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kKSArIDEpOwotCURPT1JCRUxMKGJwLCBGUF9JRFgoZnApLCAwKTsKKwlsZTMyX2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kLCAxKTsKKwlET09SQkVMTChicCwgZnAtPmluZGV4LCAwKTsKIAogCW1taW93YigpOwogCkBAIC04ODY3LDcgKzk1MjgsNyBAQAogCiBzdGF0aWMgaW50IGJueDJ4X3Rlc3RfbG9vcGJhY2soc3RydWN0IGJueDJ4ICpicCwgdTggbGlua191cCkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IDAsIHJlczsKIAogCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKIAkJcmV0dXJuIEJOWDJYX0xPT1BCQUNLX0ZBSUxFRDsKQEAgLTg4NzUsMTQgKzk1MzYsMTYgQEAKIAlibngyeF9uZXRpZl9zdG9wKGJwLCAxKTsKIAlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKIAotCWlmIChibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX01BQ19MT09QQkFDSywgbGlua191cCkpIHsKLQkJRFAoTkVUSUZfTVNHX1BST0JFLCAiTUFDIGxvb3BiYWNrIGZhaWxlZFxuIik7Ci0JCXJjIHw9IEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQ7CisJcmVzID0gYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9QSFlfTE9PUEJBQ0ssIGxpbmtfdXApOworCWlmIChyZXMpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAiICBQSFkgbG9vcGJhY2sgZmFpbGVkICAocmVzICVkKVxuIiwgcmVzKTsKKwkJcmMgfD0gQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRDsKIAl9CiAKLQlpZiAoYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9QSFlfTE9PUEJBQ0ssIGxpbmtfdXApKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIlBIWSBsb29wYmFjayBmYWlsZWRcbiIpOwotCQlyYyB8PSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVEOworCXJlcyA9IGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfTUFDX0xPT1BCQUNLLCBsaW5rX3VwKTsKKwlpZiAocmVzKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIiAgTUFDIGxvb3BiYWNrIGZhaWxlZCAgKHJlcyAlZClcbiIsIHJlcyk7CisJCXJjIHw9IEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQ7CiAJfQogCiAJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CkBAIC04OTA5LDE0ICs5NTcyLDE0IEBACiAJCXsgMHg3NzgsICAweDcwIH0sCiAJCXsgICAgIDAsICAgICAwIH0KIAl9OwotCXUzMiBidWZbMHgzNTAgLyA0XTsKKwlfX2JlMzIgYnVmWzB4MzUwIC8gNF07CiAJdTggKmRhdGEgPSAodTggKilidWY7CiAJaW50IGksIHJjOwogCXUzMiBtYWdpYywgY3N1bTsKIAogCXJjID0gYm54MnhfbnZyYW1fcmVhZChicCwgMCwgZGF0YSwgNCk7CiAJaWYgKHJjKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIm1hZ2ljIHZhbHVlIHJlYWQgKHJjIC0lZClcbiIsIC1yYyk7CisJCURQKE5FVElGX01TR19QUk9CRSwgIm1hZ2ljIHZhbHVlIHJlYWQgKHJjICVkKVxuIiwgcmMpOwogCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKIAl9CiAKQEAgLTg5MzMsNyArOTU5Niw3IEBACiAJCQkJICAgICAgbnZyYW1fdGJsW2ldLnNpemUpOwogCQlpZiAocmMpIHsKIAkJCURQKE5FVElGX01TR19QUk9CRSwKLQkJCSAgICJudnJhbV90YmxbJWRdIHJlYWQgZGF0YSAocmMgLSVkKVxuIiwgaSwgLXJjKTsKKwkJCSAgICJudnJhbV90YmxbJWRdIHJlYWQgZGF0YSAocmMgJWQpXG4iLCBpLCByYyk7CiAJCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKIAkJfQogCkBAIC04OTU4LDEyICs5NjIxLDEyIEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDA7CisJY29uZmlnLT5oZHIubGVuZ3RoID0gMDsKIAlpZiAoQ0hJUF9JU19FMShicCkpCiAJCWNvbmZpZy0+aGRyLm9mZnNldCA9IChCUF9QT1JUKGJwKSA/IDMyIDogMCk7CiAJZWxzZQogCQljb25maWctPmhkci5vZmZzZXQgPSBCUF9GVU5DKGJwKTsKLQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtOTAzNiw5ICs5Njk5LDYgQEAKIAkJCWJ1Zls1XSA9IDE7CiAJCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCQl9Ci0JYnVmWzddID0gYm54MnhfbWNfYXNzZXJ0KGJwKTsKLQlpZiAoYnVmWzddICE9IDApCi0JCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKICNpZmRlZiBCTlgyWF9FWFRSQV9ERUJVRwogCWJueDJ4X3BhbmljX2R1bXAoYnApOwpAQCAtOTA0OCw0MCArOTcwOCw5OCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJbG9uZyBvZmZzZXQ7CiAJaW50IHNpemU7CisJdTggc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGJueDJ4X3Ffc3RhdHNfYXJyW0JOWDJYX05VTV9RX1NUQVRTXSA9IHsKKy8qIDEgKi8JeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwgOCwgIlslZF06IHJ4X2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihlcnJvcl9ieXRlc19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfZXJyb3JfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfdWNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X21jYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAk4LCAiWyVkXTogcnhfZGlzY2FyZHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHJ4X2Vycl9kaXNjYXJkX3BrdCksCisJCQkJCSA0LCAiWyVkXTogcnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAorCXsgUV9TVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKKwkJCQkJIDQsICJbJWRdOiByeF9za2JfYWxsb2NfZGlzY2FyZCIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLCA0LCAiWyVkXTogcnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfSwKKworLyogMTAgKi97IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAk4LCAiWyVkXTogdHhfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJCQkJOCwgIlslZF06IHR4X3BhY2tldHMiIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWxvbmcgb2Zmc2V0OworCWludCBzaXplOwogCXUzMiBmbGFnczsKICNkZWZpbmUgU1RBVFNfRkxBR1NfUE9SVAkJMQogI2RlZmluZSBTVEFUU19GTEFHU19GVU5DCQkyCisjZGVmaW5lIFNUQVRTX0ZMQUdTX0JPVEgJCShTVEFUU19GTEFHU19GVU5DIHwgU1RBVFNfRkxBR1NfUE9SVCkKIAl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIH0gYm54Mnhfc3RhdHNfYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0vKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9ieXRlcyIgfSwKKy8qIDEgKi8JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2J5dGVzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIoZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9lcnJvcl9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAidHhfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9lcnJvcl9ieXRlcyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZXJyb3JfYnl0ZXMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAidHhfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X21hY19lcnJvcnMiIH0sCi0vKiAxMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfYmNhc3RfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfY3JjX2Vycm9ycyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYWxpZ25fZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9vdmVyc2l6ZV9wYWNrZXRzIiB9LAorLyogMTAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZyYWdtZW50cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9qYWJiZXJzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoeHhvdmVyZmxvd19kaXNjYXJkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZndfZGlzY2FyZHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihicmJfZHJvcF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2JyYl9kaXNjYXJkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX3RydW5jYXRlX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX3RydW5jYXRlIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfcGF1c2VfZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihuaWdfdGltZXJfbWF4KSwKKwkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jb25zdGFudF9wYXVzZV9ldmVudHMiIH0sCisvKiAyMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9LAorCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X2J5dGVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXJyb3JfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbWFjX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfY2Fycmllcl9lcnJvcnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3NpbmdsZV9jb2xsaXNpb25zIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X211bHRpX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCisvKiAzMCAqL3sgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9kZWZlcnJlZCIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2V4Y2Vzc19jb2xsaXNpb25zIiB9LApAQCAtOTA4OSwxNCArOTgwNyw2IEBACiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2xhdGVfY29sbGlzaW9ucyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c2NvbGxpc2lvbnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF90b3RhbF9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfZnJhZ21lbnRzIiB9LAotLyogMjAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2phYmJlcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9qYWJiZXJzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3VuZGVyc2l6ZV9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9vdmVyc2l6ZV9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY0b2N0ZXRzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNjRfYnl0ZV9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzcGt0czY1b2N0ZXRzdG8xMjdvY3RldHNfaGkpLApAQCAtOTEwOSw1MiArOTgxOSw0NiBAQAogCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaSksCiAJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTAyNF90b18xNTIyX2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAorLyogNDAgKi97IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAogCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzE1MjNfdG9fOTAyMl9ieXRlX3BhY2tldHMiIH0sCi0vKiAzMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfeG9uX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF94b2ZmX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfb3V0eG9uc2VudF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3hvbl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X291dHhvZmZzZW50X2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfeG9mZl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHh4b3ZlcmZsb3dfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2Z3X2Rpc2NhcmRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX2Ryb3BfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJicmJfZGlzY2FyZCIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGJyYl90cnVuY2F0ZV9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgImJyYl90cnVuY2F0ZSIgfSwKLS8qIDQwICoveyBTVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCi0vKiA0MiAqL3sgU1RBVFNfT0ZGU0VUMzIoaHdfY3N1bV9lcnIpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9CisJeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfc2VudF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3BhdXNlX2ZyYW1lcyIgfQogfTsKIAotI2RlZmluZSBJU19OT1RfRTFITUZfU1RBVChicCwgaSkgXAotCQkoSVNfRTFITUYoYnApICYmIChibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MgJiBTVEFUU19GTEFHU19QT1JUKSkKKyNkZWZpbmUgSVNfUE9SVF9TVEFUKGkpIFwKKwkoKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0JPVEgpID09IFNUQVRTX0ZMQUdTX1BPUlQpCisjZGVmaW5lIElTX0ZVTkNfU1RBVChpKQkJKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0ZVTkMpCisjZGVmaW5lIElTX0UxSE1GX01PREVfU1RBVChicCkgXAorCQkJKElTX0UxSE1GKGJwKSAmJiAhKGJwLT5tc2dsZXZlbCAmIEJOWDJYX01TR19TVEFUUykpCiAKIHN0YXRpYyB2b2lkIGJueDJ4X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpidWYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIGo7CisJaW50IGksIGosIGs7CiAKIAlzd2l0Y2ggKHN0cmluZ3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7Ci0JCQlpZiAoSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpKQotCQkJCWNvbnRpbnVlOwotCQkJc3RyY3B5KGJ1ZiArIGoqRVRIX0dTVFJJTkdfTEVOLAotCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltpXS5zdHJpbmcpOwotCQkJaisrOworCQlpZiAoaXNfbXVsdGkoYnApKSB7CisJCQlrID0gMDsKKwkJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspCisJCQkJCXNwcmludGYoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJCQlibngyeF9xX3N0YXRzX2FycltqXS5zdHJpbmcsIGkpOworCQkJCWsgKz0gQk5YMlhfTlVNX1FfU1RBVFM7CisJCQl9CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKKwkJCQlicmVhazsKKwkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fU1RBVFM7IGorKykKKwkJCQlzdHJjcHkoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltqXS5zdHJpbmcpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgeworCQkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApICYmIElTX1BPUlRfU1RBVChpKSkKKwkJCQkJY29udGludWU7CisJCQkJc3RyY3B5KGJ1ZiArIGoqRVRIX0dTVFJJTkdfTEVOLAorCQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbaV0uc3RyaW5nKTsKKwkJCQlqKys7CisJCQl9CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTkxNjcsMTMgKzk4NzEsMjIgQEAKIHN0YXRpYyBpbnQgYm54MnhfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIG51bV9zdGF0cyA9IDA7CisJaW50IGksIG51bV9zdGF0czsKIAotCWZvciAoaSA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgewotCQlpZiAoSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpKQotCQkJY29udGludWU7Ci0JCW51bV9zdGF0cysrOworCWlmIChpc19tdWx0aShicCkpIHsKKwkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1FfU1RBVFMgKiBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKKwkJaWYgKCFJU19FMUhNRl9NT0RFX1NUQVQoYnApKQorCQkJbnVtX3N0YXRzICs9IEJOWDJYX05VTV9TVEFUUzsKKwl9IGVsc2UgeworCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkgeworCQkJbnVtX3N0YXRzID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykKKwkJCQlpZiAoSVNfRlVOQ19TVEFUKGkpKQorCQkJCQludW1fc3RhdHMrKzsKKwkJfSBlbHNlCisJCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7CiAJfQorCiAJcmV0dXJuIG51bV9zdGF0czsKIH0KIApAQCAtOTE4MSwyOSArOTg5NCw3MSBAQAogCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqYnVmKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiAqaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7Ci0JaW50IGksIGo7CisJdTMyICpod19zdGF0cywgKm9mZnNldDsKKwlpbnQgaSwgaiwgazsKIAotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJaWYgKElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSAwKSB7Ci0JCQkvKiBza2lwIHRoaXMgY291bnRlciAqLwotCQkJYnVmW2pdID0gMDsKLQkJCWorKzsKLQkJCWNvbnRpbnVlOworCWlmIChpc19tdWx0aShicCkpIHsKKwkJayA9IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOworCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspIHsKKwkJCQlpZiAoYm54MnhfcV9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CisJCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJCWJ1ZltrICsgal0gPSAwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsKKwkJCQkJICBibngyeF9xX3N0YXRzX2FycltqXS5vZmZzZXQpOworCQkJCWlmIChibngyeF9xX3N0YXRzX2FycltqXS5zaXplID09IDQpIHsKKwkJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQkJYnVmW2sgKyBqXSA9ICh1NjQpICpvZmZzZXQ7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJCX0KKwkJCWsgKz0gQk5YMlhfTlVNX1FfU1RBVFM7CiAJCX0KLQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDQpIHsKLQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCi0JCQlidWZbal0gPSAodTY0KSAqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCk7Ci0JCQlqKys7Ci0JCQljb250aW51ZTsKKwkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpCisJCQlyZXR1cm47CisJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOworCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1NUQVRTOyBqKyspIHsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CisJCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW9mZnNldCA9IChod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltqXS5vZmZzZXQpOworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltqXS5zaXplID09IDQpIHsKKwkJCQkvKiA0LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KKwkJCWJ1ZltrICsgal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKIAkJfQotCQkvKiA4LWJ5dGUgY291bnRlciAqLwotCQlidWZbal0gPSBISUxPX1U2NCgqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCksCi0JCQkJICAqKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCArIDEpKTsKLQkJaisrOworCX0gZWxzZSB7CisJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOworCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7CisJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSAmJiBJU19QT1JUX1NUQVQoaSkpCisJCQkJY29udGludWU7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gMCkgeworCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJYnVmW2pdID0gMDsKKwkJCQlqKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbaV0ub2Zmc2V0KTsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSA0KSB7CisJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCWorKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIDgtYnl0ZSBjb3VudGVyICovCisJCQlidWZbal0gPSBISUxPX1U2NCgqb2Zmc2V0LCAqKG9mZnNldCArIDEpKTsKKwkJCWorKzsKKwkJfQogCX0KIH0KIApAQCAtOTI1MCw2ICsxMDAwNSw4IEBACiAJLmdldF9zZXR0aW5ncwkJPSBibngyeF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBibngyeF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IGJueDJ4X2dldF9kcnZpbmZvLAorCS5nZXRfcmVnc19sZW4JCT0gYm54MnhfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSBibngyeF9nZXRfcmVncywKIAkuZ2V0X3dvbAkJPSBibngyeF9nZXRfd29sLAogCS5zZXRfd29sCQk9IGJueDJ4X3NldF93b2wsCiAJLmdldF9tc2dsZXZlbAkJPSBibngyeF9nZXRfbXNnbGV2ZWwsCkBAIC05MzYyLDI1ICsxMDExOSw0MSBAQAogCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAKIAlpZiAoYm54MnhfaGFzX3R4X3dvcmsoZnApKQotCQlibngyeF90eF9pbnQoZnAsIGJ1ZGdldCk7CisJCWJueDJ4X3R4X2ludChmcCk7CiAKLQlpZiAoYm54MnhfaGFzX3J4X3dvcmsoZnApKQorCWlmIChibngyeF9oYXNfcnhfd29yayhmcCkpIHsKIAkJd29ya19kb25lID0gYm54MnhfcnhfaW50KGZwLCBidWRnZXQpOwotCXJtYigpOyAvKiBCTlgyWF9IQVNfV09SSygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2sgKi8KIAotCS8qIG11c3Qgbm90IGNvbXBsZXRlIGlmIHdlIGNvbnN1bWVkIGZ1bGwgYnVkZ2V0ICovCi0JaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmICFCTlgyWF9IQVNfV09SSyhmcCkpIHsKKwkJLyogbXVzdCBub3QgY29tcGxldGUgaWYgd2UgY29uc3VtZWQgZnVsbCBidWRnZXQgKi8KKwkJaWYgKHdvcmtfZG9uZSA+PSBidWRnZXQpCisJCQlnb3RvIHBvbGxfYWdhaW47CisJfQogCisJLyogQk5YMlhfSEFTX1dPUksoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrLCB0aHVzIHdlIG5lZWQgdG8KKwkgKiBlbnN1cmUgdGhhdCBzdGF0dXMgYmxvY2sgaW5kaWNlcyBoYXZlIGJlZW4gYWN0dWFsbHkgcmVhZAorCSAqIChibngyeF91cGRhdGVfZnBzYl9pZHgpIHByaW9yIHRvIHRoaXMgY2hlY2sgKEJOWDJYX0hBU19XT1JLKQorCSAqIHNvIHRoYXQgd2Ugd29uJ3Qgd3JpdGUgdGhlICJuZXdlciIgdmFsdWUgb2YgdGhlIHN0YXR1cyBibG9jayB0byBJR1UKKwkgKiAoaWYgdGhlcmUgd2FzIGEgRE1BIHJpZ2h0IGFmdGVyIEJOWDJYX0hBU19XT1JLIGFuZAorCSAqIGlmIHRoZXJlIGlzIG5vIHJtYiwgdGhlIG1lbW9yeSByZWFkaW5nIChibngyeF91cGRhdGVfZnBzYl9pZHgpCisJICogbWF5IGJlIHBvc3Rwb25lZCB0byByaWdodCBiZWZvcmUgYm54MnhfYWNrX3NiKS4gSW4gdGhpcyBjYXNlCisJICogdGhlcmUgd2lsbCBuZXZlciBiZSBhbm90aGVyIGludGVycnVwdCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIHVwZGF0ZQorCSAqIG9mIHRoZSBzdGF0dXMgYmxvY2ssIHdoaWxlIHRoZXJlIGlzIHN0aWxsIHVuaGFuZGxlZCB3b3JrLgorCSAqLworCXJtYigpOworCisJaWYgKCFCTlgyWF9IQVNfV09SSyhmcCkpIHsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiBwb2xsX3BhbmljOgogI2VuZGlmCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCi0JCWJueDJ4X2Fja19zYihicCwgRlBfU0JfSUQoZnApLCBVU1RPUk1fSUQsCisJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsCiAJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksIElHVV9JTlRfTk9QLCAxKTsKLQkJYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIENTVE9STV9JRCwKKwkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIENTVE9STV9JRCwKIAkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwgSUdVX0lOVF9FTkFCTEUsIDEpOwogCX0KKworcG9sbF9hZ2FpbjoKIAlyZXR1cm4gd29ya19kb25lOwogfQogCkBAIC05NDU2LDcgKzEwMjI5LDcgQEAKIAkJcmMgPSBYTUlUX1BMQUlOOwogCiAJZWxzZSB7Ci0JCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQVjYpKSB7CisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiAJCQlyYyA9IFhNSVRfQ1NVTV9WNjsKIAkJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJCXJjIHw9IFhNSVRfQ1NVTV9UQ1A7CkBAIC05NDc4LDcgKzEwMjUxLDkgQEAKIH0KIAogI2lmIChNQVhfU0tCX0ZSQUdTID49IE1BWF9GRVRDSF9CRCAtIDMpCi0vKiBjaGVjayBpZiBwYWNrZXQgcmVxdWlyZXMgbGluZWFyaXphdGlvbiAocGFja2V0IGlzIHRvbyBmcmFnbWVudGVkKSAqLworLyogY2hlY2sgaWYgcGFja2V0IHJlcXVpcmVzIGxpbmVhcml6YXRpb24gKHBhY2tldCBpcyB0b28gZnJhZ21lbnRlZCkKKyAgIG5vIG5lZWQgdG8gY2hlY2sgZnJhZ21lbnRhdGlvbiBpZiBwYWdlIHNpemUgPiA4SyAodGhlcmUgd2lsbCBiZSBubworICAgdmlvbGF0aW9uIHRvIEZXIHJlc3RyaWN0aW9ucykgKi8KIHN0YXRpYyBpbnQgYm54MnhfcGt0X3JlcV9saW4oc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgdTMyIHhtaXRfdHlwZSkKIHsKQEAgLTk1MzcsNyArMTAzMTIsNiBAQAogCQkJCXduZF9zdW0gLT0KIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1t3bmRfaWR4XS5zaXplOwogCQkJfQotCiAJCX0gZWxzZSB7CiAJCQkvKiBpbiBub24tTFNPIHRvbyBmcmFnbWVudGVkIHBhY2tldCBzaG91bGQgYWx3YXlzCiAJCQkgICBiZSBsaW5lYXJpemVkICovCkBAIC05NTY1LDYgKzEwMzM5LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZjsKIAlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZDsKIAlzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkICpwYmQgPSBOVUxMOwpAQCAtOTU4MSwxMiArMTAzNTYsMTQgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogI2VuZGlmCiAKLQlmcF9pbmRleCA9IChzbXBfcHJvY2Vzc29yX2lkKCkgJSBicC0+bnVtX3F1ZXVlcyk7CisJZnBfaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgZnBfaW5kZXgpOworCiAJZnAgPSAmYnAtPmZwW2ZwX2luZGV4XTsKIAogCWlmICh1bmxpa2VseShibngyeF90eF9hdmFpbChmcCkgPCAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDMpKSkgewotCQlicC0+ZXRoX3N0YXRzLmRyaXZlcl94b2ZmKyssCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKyssCisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJQk5YMlhfRVJSKCJCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC05NTk3LDggKzEwMzc0LDkgQEAKIAkgICBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUsIHhtaXRfdHlwZSk7CiAKICNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQotCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcml6ZSB0aGUgc2tiCi0JICAgKGR1ZSB0byBGVyByZXN0cmljdGlvbnMpICovCisJLyogRmlyc3QsIGNoZWNrIGlmIHdlIG5lZWQgdG8gbGluZWFyaXplIHRoZSBza2IgKGR1ZSB0byBGVworCSAgIHJlc3RyaWN0aW9ucykuIE5vIG5lZWQgdG8gY2hlY2sgZnJhZ21lbnRhdGlvbiBpZiBwYWdlIHNpemUgPiA4SworCSAgICh0aGVyZSB3aWxsIGJlIG5vIHZpb2xhdGlvbiB0byBGVyByZXN0cmljdGlvbnMpICovCiAJaWYgKGJueDJ4X3BrdF9yZXFfbGluKGJwLCBza2IsIHhtaXRfdHlwZSkpIHsKIAkJLyogU3RhdGlzdGljcyBvZiBsaW5lYXJpemF0aW9uICovCiAJCWJwLT5saW5fY250Kys7CkBAIC05NjYzLDkgKzEwNDQxLDkgQEAKIAkJaGxlbiA9IChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSArIHZsYW5fb2ZmKSAvIDI7CiAKIAkJLyogZm9yIG5vdyBOUyBmbGFnIGlzIG5vdCB1c2VkIGluIExpbnV4ICovCi0JCXBiZC0+Z2xvYmFsX2RhdGEgPSAoaGxlbiB8Ci0JCQkJICAgICgoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDIxUSkpIDw8Ci0JCQkJICAgICBFVEhfVFhfUEFSU0VfQkRfTExDX1NOQVBfRU5fU0hJRlQpKTsKKwkJcGJkLT5nbG9iYWxfZGF0YSA9CisJCQkoaGxlbiB8ICgoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIDw8CisJCQkJIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTl9TSElGVCkpOwogCiAJCXBiZC0+aXBfaGxlbiA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0KIAkJCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOwpAQCAtOTgwOSwxMiArMTA1ODcsMTAgQEAKIAkgKi8KIAl3bWIoKTsKIAotCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgPQotCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kKSArIG5iZCk7CisJbGUxNl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kLCBuYmQpOwogCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQotCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKLQlET09SQkVMTChicCwgRlBfSURYKGZwKSwgMCk7CisJbGUzMl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCwgMSk7CisJRE9PUkJFTEwoYnAsIGZwLT5pbmRleCwgMCk7CiAKIAltbWlvd2IoKTsKIApAQCAtOTgyNSwxMCArMTA2MDEsMTAgQEAKIAkJLyogV2Ugd2FudCBibngyeF90eF9pbnQgdG8gInNlZSIgdGhlIHVwZGF0ZWQgdHhfYmRfcHJvZAogCQkgICBpZiB3ZSBwdXQgVHggaW50byBYT0ZGIHN0YXRlLiAqLwogCQlzbXBfbWIoKTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlicC0+ZXRoX3N0YXRzLmRyaXZlcl94b2ZmKys7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKwkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKys7CiAJCWlmIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiAJfQogCWZwLT50eF9wa3QrKzsKIApAQCAtOTg2MSw3ICsxMDYzNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgZnJvbSBzZXRfbXVsdGljYXN0ICovCisvKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gZGV2X21jYXN0LmMgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05OTIwLDcgKzEwNjk2LDcgQEAKIAkJCQkgICBjb25maWctPmNvbmZpZ190YWJsZVtpXS4KIAkJCQkJCWNhbV9lbnRyeS5sc2JfbWFjX2FkZHIpOwogCQkJfQotCQkJb2xkID0gY29uZmlnLT5oZHIubGVuZ3RoXzZiOworCQkJb2xkID0gY29uZmlnLT5oZHIubGVuZ3RoOwogCQkJaWYgKG9sZCA+IGkpIHsKIAkJCQlmb3IgKDsgaSA8IG9sZDsgaSsrKSB7CiAJCQkJCWlmIChDQU1fSVNfSU5WQUxJRChjb25maWctPgpAQCAtOTkzOSw5ICsxMDcxNSw5IEBACiAJCQllbHNlCiAJCQkJb2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOwogCi0JCQljb25maWctPmhkci5sZW5ndGhfNmIgPSBpOworCQkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKIAkJCWNvbmZpZy0+aGRyLm9mZnNldCA9IG9mZnNldDsKLQkJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwkJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJCQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJCQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtMTAxMjcsNyArMTA5MDMsNyBAQAogCS5uZG9fb3BlbgkJPSBibngyeF9vcGVuLAogCS5uZG9fc3RvcAkJPSBibngyeF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gYm54Mnhfc3RhcnRfeG1pdCwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGJueDJ4X3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYm54Mnhfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBibngyeF9jaGFuZ2VfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bAkJPSBibngyeF9pb2N0bCwKQEAgLTEwMTQxLDcgKzEwOTE3LDYgQEAKICNlbmRpZgogfTsKIAotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEwMzIwLDcgKzExMDk1LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKIAogCS8qIGRldiB6ZXJvZWQgaW4gaW5pdF9ldGhlcmRldiAqLwotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqYnApKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgTUFYX0NPTlRFWFQpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDM0NywxNCArMTExMjIsMTQgQEAKIAkJZ290byBpbml0X29uZV9leGl0OwogCX0KIAotCWJwLT5jb21tb24ubmFtZSA9IGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpIFBDSS1FIHglZCAlcyBmb3VuZCBhdCBtZW0gJWx4LCIKLQkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYnAtPmNvbW1vbi5uYW1lLAorCSAgICAgICAiIElSUSAlZCwgIiwgZGV2LT5uYW1lLCBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCiAJICAgICAgIChDSElQX1JFVihicCkgPj4gMTIpICsgJ0EnLCAoQ0hJUF9NRVRBTChicCkgPj4gNCksCiAJICAgICAgIGJueDJ4X2dldF9wY2llX3dpZHRoKGJwKSwKIAkgICAgICAgKGJueDJ4X2dldF9wY2llX3NwZWVkKGJwKSA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKIAkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEpOwogCXByaW50ayhLRVJOX0NPTlQgIm5vZGUgYWRkciAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCiAJcmV0dXJuIDA7CiAKIGluaXRfb25lX2V4aXQ6CkBAIC0xMDQ4NiwxNSArMTEyNjEsMTUgQEAKIAkJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0KIAkJCQkJCWJueDJ4X3NwKGJwLCBtY2FzdF9jb25maWcpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGhfNmI7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aGRyLmxlbmd0aDsgaSsrKQogCQkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT5jb25maWdfdGFibGVbaV0pOwogCX0KIAogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5ldGlmX25hcGlfZGVsKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIApAQCAtMTA2MjEsOCArMTEzOTYsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBibngyeF9lcnJfaGFuZGxlciA9IHsKIAkuZXJyb3JfZGV0ZWN0ZWQgPSBibngyeF9pb19lcnJvcl9kZXRlY3RlZCwKLQkuc2xvdF9yZXNldCA9IGJueDJ4X2lvX3Nsb3RfcmVzZXQsCi0JLnJlc3VtZSA9IGJueDJ4X2lvX3Jlc3VtZSwKKwkuc2xvdF9yZXNldCAgICAgPSBibngyeF9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgICAgICAgICA9IGJueDJ4X2lvX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibngyeF9wY2lfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmggYi9kcml2ZXJzL25ldC9ibngyeF9yZWcuaAppbmRleCBkMDg0ZTVmYy4uYjhjZTZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTMwLDggKzMwLDIwIEBACiAgICBhZGRyZXNzIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCsxIGluaXRpYWxpemUgZnJlZSB0YWlsLiBBdCBhZGRyZXNzCiAgICBCUkIxX0lORF9GUkVFX0xJU1RfUFJTX0NSRFQrMiBpbml0aWFsaXplIHBhcnNlciBpbml0aWFsIGNyZWRpdC4gKi8KICNkZWZpbmUgQlJCMV9SRUdfRlJFRV9MSVNUX1BSU19DUkRUCQkJCSAweDYwMjAwCisvKiBbUlcgMTBdIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIEhpZ2hfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBkZS1hc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfSElHSF9MTEZDX0hJR0hfVEhSRVNIT0xEXzAJCQkgMHg2MDE0YworLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBIaWdoX2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0hJR0hfTExGQ19MT1dfVEhSRVNIT0xEXzAJCQkgMHg2MDEzYwogLyogW1JXIDIzXSBMTCBSQU0gZGF0YS4gKi8KICNkZWZpbmUgQlJCMV9SRUdfTExfUkFNIAkJCQkJIDB4NjEwMDAKKy8qIFtSVyAxMF0gVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhYm92ZSB3aGljaCB0aGUgTG93X2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgZGUtYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0xPV19MTEZDX0hJR0hfVEhSRVNIT0xEXzAJCQkgMHg2MDE2YworLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBMb3dfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBhc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfTE9XX0xMRkNfTE9XX1RIUkVTSE9MRF8wCQkJIDB4NjAxNWMKIC8qIFtSIDI0XSBUaGUgbnVtYmVyIG9mIGZ1bGwgYmxvY2tzLiAqLwogI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9CTE9DS1MJCQkJIDB4NjAwOTAKIC8qIFtTVCAzMl0gVGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCB0aGUgd3JpdGVfZnVsbCBzaWduYWwgdG93YXJkcyBNQUMgIzAKQEAgLTEyNSw2ICsxMzcsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIENDTV9SRUdfQ1FNX1BfV0VJR0hUCQkJCQkgMHhkMDBiOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBDQ01fUkVHX0NRTV9TX1dFSUdIVAkJCQkJIDB4ZDAwYmMKIC8qIFtSVyAxXSBJbnB1dCBTRE0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcyBkaXNyZWdhcmRlZDsKICAgIGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUgdHJlYXRlZCBhcyB1c3VhbDsKICAgIGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0xMzIsNiArMTQ4LDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU0RNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgQ0NNX1JFR19DU0RNX0xFTkdUSF9NSVMgCQkJCSAweGQwMTcwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU0RNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBDQ01fUkVHX0NTRE1fV0VJR0hUCQkJCQkgMHhkMDBiNAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIGZvciBRTSBmb3JtYXR0aW5nIGluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIFFNCiAgICBpbnB1dHMuICovCiAjZGVmaW5lIENDTV9SRUdfRVJSX0NDTV9IRFIJCQkJCSAweGQwMDk0CkBAIC0yMTEsNiArMjMxLDExIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU1RPUk0gaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBDQ01fUkVHX1NUT1JNX0xFTkdUSF9NSVMJCQkJIDB4ZDAxNmMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTVE9STSBpbnB1dCBpbiB0aGUgV1JSIChXZWlnaHRlZCBSb3VuZCByb2JpbikKKyAgIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDEobGVhc3QgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDIgKG1vcmUgcHJpb3JpdGlzZWQpOworICAgdGMuICovCisjZGVmaW5lIENDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHhkMDA5YwogLyogW1JXIDFdIElucHV0IHRzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0zMjMsNyArMzQ4LDExIEBACiAgICBzZXQgb25lIG9mIHRoZXNlIGJpdHMuIHRoZSBiaXQgZGVzY3JpcHRpb24gY2FuIGJlIGZvdW5kIGluIENGQwogICAgc3BlY2lmaWNhdGlvbnMgKi8KICNkZWZpbmUgQ0ZDX1JFR19FUlJPUl9WRUNUT1IJCQkJCSAweDEwNDAzYworLyogW1dCIDkzXSBMQ0lEIGluZm8gcmFtIGFjY2VzcyAqLworI2RlZmluZSBDRkNfUkVHX0lORk9fUkFNCQkJCQkgMHgxMDUwMDAKKyNkZWZpbmUgQ0ZDX1JFR19JTkZPX1JBTV9TSVpFCQkJCQkgMTAyNAogI2RlZmluZSBDRkNfUkVHX0lOSVRfUkVHCQkJCQkgMHgxMDQwNGMKKyNkZWZpbmUgQ0ZDX1JFR19JTlRFUkZBQ0VTCQkJCQkgMHgxMDQwNTgKIC8qIFtSVyAyNF0ge3dlaWdodF9sb2FkX2NsaWVudDdbMjowXSB0byB3ZWlnaHRfbG9hZF9jbGllbnQwWzI6MF19LiB0aGlzCiAgICBmaWVsZCBhbGxvd3MgY2hhbmdpbmcgdGhlIHByaW9yaXRpZXMgb2YgdGhlIHdlaWdodGVkLXJvdW5kLXJvYmluIGFyYml0ZXIKICAgIHdoaWNoIHNlbGVjdHMgd2hpY2ggQ0ZDIGxvYWQgY2xpZW50IHNob3VsZCBiZSBzZXJ2ZWQgbmV4dCAqLwpAQCAtMzM3LDggKzM2Niw2IEBACiAjZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0FMTE9DIAkJCQkgMHgxMDQwMjAKIC8qIFtSIDldIE51bWJlciBvZiBBcnJpdmluZyBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfQVJSSVZJTkcJCQkJIDB4MTA0MDA0Ci0vKiBbUiA5XSBOdW1iZXIgb2YgSW5zaWRlIExDSURzIGluIExpbmsgTGlzdCBCbG9jayAqLwotI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19JTlNJREUJCQkJIDB4MTA0MDA4CiAvKiBbUiA5XSBOdW1iZXIgb2YgTGVhdmluZyBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfTEVBVklORwkJCQkgMHgxMDQwMTgKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KQEAgLTczMCw2ICs3NTcsNyBAQAogI2RlZmluZSBET1JRX1JFR19TSFJUX0NNSEVBRAkJCQkJIDB4MTcwMDU0CiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wCQkJCSAoMHgxPDw0KQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMAkJCQkgKDB4MTw8MykKKyNkZWZpbmUgSENfQ09ORklHXzBfUkVHX01TSV9BVFROX0VOXzAJCQkJICgweDE8PDcpCiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMAkJCSAoMHgxPDwyKQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIAkJCSAoMHgxPDwxKQogI2RlZmluZSBIQ19SRUdfQUdHX0lOVF8wCQkJCQkgMHgxMDgwNTAKQEAgLTE0MTAsNiArMTQzOCwyOSBAQAogICAgVGhpcyBpcyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBwaW47IG5vdCB0aGUgZHJpdmUgdmFsdWUuIFdyaXRpbmcgdGhlc2UKICAgIGJpdHMgd2lsbCBoYXZlIG5vdCBlZmZlY3QuICovCiAjZGVmaW5lIE1JU0NfUkVHX0dQSU8JCQkJCQkgMHhhNDkwCisvKiBbUlcgOF0gVGhlc2UgYml0cyBlbmFibGUgdGhlIEdQSU9fSU5UcyB0byBzaWduYWxzIGV2ZW50IHRvIHRoZQorICAgSUdVL01DUC5hY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBtYXA6IFswXSBwMF9ncGlvXzA7IFsxXSBwMF9ncGlvXzE7IFsyXQorICAgcDBfZ3Bpb18yOyBbM10gcDBfZ3Bpb18zOyBbNF0gcDFfZ3Bpb18wOyBbNV0gcDFfZ3Bpb18xOyBbNl0gcDFfZ3Bpb18yOworICAgWzddIHAxX2dwaW9fMzsgKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1BJT19FVkVOVF9FTgkJCQkJIDB4YTJiYworLyogW1JXIDMyXSBHUElPIElOVC4gWzMxLTI4XSBPTERfQ0xSIHBvcnQxOyBbMjctMjRdIE9MRF9DTFIgcG9ydDA7IFdyaXRpbmcgYQorICAgJzEnIHRvIHRoZXNlIGJpdCBjbGVhcnMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSAjT0xEX1ZBTFVFIHJlZ2lzdGVyLgorICAgVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUgZmFsbGluZyBlZGdlIG9mIGNvcnJlc3BvbmRpbmcKKyAgIEdQSU8gaW5wdXQgKHJlc2V0IHZhbHVlIDApLiBbMjMtMTZdIE9MRF9TRVQgWzIzLTE2XSBwb3J0MTsgT0xEX1NFVCBwb3J0MDsKKyAgIFdyaXRpbmcgYSAnMScgdG8gdGhlc2UgYml0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSAjT0xEX1ZBTFVFCisgICByZWdpc3Rlci4gVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YKKyAgIGNvcnJlc3BvbmRpbmcgU1BJTyBpbnB1dCAocmVzZXQgdmFsdWUgMCkuIFsxNS0xMl0gT0xEX1ZBTFVFIFsxMS04XSBwb3J0MTsKKyAgIE9MRF9WQUxVRSBwb3J0MDsgUk87IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgR1BJTyBpbnB1dAorICAgdmFsdWUuIFdoZW4gdGhlIH5JTlRfU1RBVEUgYml0IGlzIHNldDsgdGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBPTEQgdmFsdWUKKyAgIG9mIHRoZSBwaW4gc3VjaCB0aGF0IGlmIH5JTlRfU1RBVEUgaXMgc2V0IGFuZCB0aGlzIGJpdCBpcyAnMCc7IHRoZW4gdGhlCisgICBpbnRlcnJ1cHQgaXMgZHVlIHRvIGEgbG93IHRvIGhpZ2ggZWRnZS4gSWYgfklOVF9TVEFURSBpcyBzZXQgYW5kIHRoaXMgYml0CisgICBpcyAnMSc7IHRoZW4gdGhlIGludGVycnVwdCBpcyBkdWUgdG8gYSBoaWdoIHRvIGxvdyBlZGdlIChyZXNldCB2YWx1ZSAwKS4KKyAgIFs3LTRdIElOVF9TVEFURSBwb3J0MTsgWzMtMF0gSU5UX1NUQVRFIFJPIHBvcnQwOyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZQorICAgY3VycmVudCBHUElPIGludGVycnVwdCBzdGF0ZSBmb3IgZWFjaCBHUElPIHBpbi4gVGhpcyBiaXQgaXMgY2xlYXJlZCB3aGVuCisgICB0aGUgYXBwcm9wcmlhdGUgI09MRF9TRVQgb3IgI09MRF9DTFIgY29tbWFuZCBiaXQgaXMgd3JpdHRlbi4gVGhpcyBiaXQgaXMKKyAgIHNldCB3aGVuIHRoZSBHUElPIGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZhbHVlIGluICNPTERfVkFMVUUKKyAgIChyZXNldCB2YWx1ZSAwKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1BJT19JTlQJCQkJCSAweGE0OTQKIC8qIFtSIDI4XSB0aGlzIGZpZWxkIGhvbGQgdGhlIGxhc3QgaW5mb3JtYXRpb24gdGhhdCBjYXVzZWQgcmVzZXJ2ZWQKICAgIGF0dGVudGlvbi4gYml0cyBbMTk6MF0gLSBhZGRyZXNzOyBbMjI6MjBdIGZ1bmN0aW9uOyBbMjNdIHJlc2VydmVkOwogICAgWzI3OjI0XSB0aGUgbWFzdGVyIHRoYXQgY2F1c2VkIHRoZSBhdHRlbnRpb24gLSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwpAQCAtMTU1NCw2ICsxNjA1LDE0IEBACiAgICBjb21tYW5kIGJpdCBpcyB3cml0dGVuLiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgU1BJTyBpbnB1dCBkb2VzIG5vdAogICAgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgaW4gI09MRF9WQUxVRSAocmVzZXQgdmFsdWUgMCkuICovCiAjZGVmaW5lIE1JU0NfUkVHX1NQSU9fSU5UCQkJCQkgMHhhNTAwCisvKiBbUlcgMzJdIHJlbG9hZCB2YWx1ZSBmb3IgY291bnRlciA0IGlmIHJlbG9hZDsgdGhlIHZhbHVlIHdpbGwgYmUgcmVsb2FkIGlmCisgICB0aGUgY291bnRlciByZWFjaGVkIHplcm8gYW5kIHRoZSByZWxvYWQgYml0CisgICAofm1pc2NfcmVnaXN0ZXJzX3N3X3RpbWVyX2NmZ180LnN3X3RpbWVyX2NmZ180WzFdICkgaXMgc2V0ICovCisjZGVmaW5lIE1JU0NfUkVHX1NXX1RJTUVSX1JFTE9BRF9WQUxfNAkJCQkgMHhhMmZjCisvKiBbUlcgMzJdIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBmb3Igc3cgdGltZXJzMS04LiB0aGVyZSBhcmUgOCBhZGRyZXNzZXMKKyAgIGluIHRoaXMgcmVnaXN0ZXIuIGFkZHJlcyAwIC0gdGltZXIgMTsgYWRkcmVzcyAtIHRpbWVyIDLvv71hZGRyZXNzIDcgLQorICAgdGltZXIgOCAqLworI2RlZmluZSBNSVNDX1JFR19TV19USU1FUl9WQUwJCQkJCSAweGE1YzAKIC8qIFtSVyAxXSBTZXQgYnkgdGhlIE1DUCB0byByZW1lbWJlciBpZiBvbmUgb3IgbW9yZSBvZiB0aGUgZHJpdmVycyBpcy9hcmUKICAgIGxvYWRlZDsgMC1wcmVwYXJlOyAtdW5wcmVwYXJlICovCiAjZGVmaW5lIE1JU0NfUkVHX1VOUFJFUEFSRUQJCQkJCSAweGE0MjQKQEAgLTE2NjAsNiArMTcxOSwxOSBAQAogLyogW1JXIDRdIGxlZCBtb2RlIGZvciBwb3J0MDogMCBNQUM7IDEtMyBQSFkxOyA0IE1BQzI7IDUtNyBQSFk0OyA4LU1BQzM7CiAgICA5LTExUEhZNzsgMTIgTUFDNDsgMTMtMTUgUEhZMTA7ICovCiAjZGVmaW5lIE5JR19SRUdfTEVEX01PREVfUDAJCQkJCSAweDEwMmYwCisvKiBbUlcgM10gZm9yIHBvcnQwIGVuYWJsZSBmb3IgbGxmYyBwcHAgYW5kIHBhdXNlLiBiMCAtIGJyYjEgZW5hYmxlOyBiMS0KKyAgIHRzZG0gZW5hYmxlOyBiMi0gdXNkbSBlbmFibGUgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzAJCQkgMHgxNjA3MAorLyogW1JXIDFdIFNBRkMgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgICB+cHBwX2VuYWJsZS5wcHBfZW5hYmxlID0gMCBhbmQgcGF1c2VfZW5hYmxlLnBhdXNlX2VuYWJsZSA9MCBmb3IgdGhlIHNhbWUKKyAgIHBvcnQgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0VOQUJMRV8wCQkJCQkgMHgxNjIwOAorLyogW1JXIDE2XSBjbGFzc2VzIGFyZSBoaWdoLXByaW9yaXR5IGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfSElHSF9QUklPUklUWV9DTEFTU0VTXzAJCQkgMHgxNjA1OAorLyogW1JXIDE2XSBjbGFzc2VzIGFyZSBsb3ctcHJpb3JpdHkgZm9yIHBvcnQwICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19MT1dfUFJJT1JJVFlfQ0xBU1NFU18wCQkJIDB4MTYwNjAKKy8qIFtSVyAxXSBPdXRwdXQgZW5hYmxlIG9mIG1lc3NhZ2UgdG8gTExGQyBCTUFDIElGIGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfT1VUX0VOXzAJCQkJCSAweDE2MGM4CiAjZGVmaW5lIE5JR19SRUdfTExIMF9BQ1BJX1BBVF8wX0NSQwkJCQkgMHgxMDE1YwogI2RlZmluZSBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfNl9MRU4JCQkJIDB4MTAxNTQKICNkZWZpbmUgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0sJCQkJIDB4MTAyNDQKQEAgLTE3MzAsNiArMTgwMiwxMCBAQAogI2RlZmluZSBOSUdfUkVHX05JR19JTlRfU1RTXzEJCQkJCSAweDEwM2MwCiAvKiBbUiAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgTklHX1JFR19OSUdfUFJUWV9TVFMJCQkJCSAweDEwM2QwCisvKiBbUlcgMV0gUGF1c2UgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgICB+c2FmY19lbmFibGUuc2FmY19lbmFibGUgPSAwIGFuZCBwcHBfZW5hYmxlLnBwcF9lbmFibGUgPTAgZm9yIHRoZSBzYW1lCisgICBwb3J0ICovCisjZGVmaW5lIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAJCQkJCSAweDE2MGMwCiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWCBQQkYgTFAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QQkZfTEJfSU5fRU4JCQkJCSAweDEwMGI0CiAvKiBbUlcgMV0gVmFsdWUgb2YgdGhpcyByZWdpc3RlciB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIHBvcnQgc3dhcCB3aGVuCkBAIC0xNzM5LDYgKzE4MTUsMTAgQEAKICNkZWZpbmUgTklHX1JFR19QUlNfRU9QX09VVF9FTgkJCQkJIDB4MTAxMDQKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYIHBhcnNlciByZXF1ZXN0IElGICovCiAjZGVmaW5lIE5JR19SRUdfUFJTX1JFUV9JTl9FTgkJCQkJIDB4MTAwYjgKKy8qIFtSVyA1XSBjb250cm9sIHRvIHNlcmRlcyAtIENMNDUgREVWQUQgKi8KKyNkZWZpbmUgTklHX1JFR19TRVJERVMwX0NUUkxfTURfREVWQUQJCQkJIDB4MTAzNzAKKy8qIFtSVyAxXSBjb250cm9sIHRvIHNlcmRlczsgMCAtIGNsYXVzZSA0NTsgMSAtIGNsYXVzZSAyMiAqLworI2RlZmluZSBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVAkJCQkgMHgxMDM2YwogLyogW1JXIDVdIGNvbnRyb2wgdG8gc2VyZGVzIC0gQ0wyMiBQSFlfQUREIGFuZCBDTDQ1IFBSVEFEICovCiAjZGVmaW5lIE5JR19SRUdfU0VSREVTMF9DVFJMX1BIWV9BRERSCQkJCSAweDEwMzc0CiAvKiBbUiAxXSBzdGF0dXMgZnJvbSBzZXJkZXMwIHRoYXQgaW5wdXRzIHRvIGludGVycnVwdCBsb2dpYyBvZiBsaW5rIHN0YXR1cyAqLwpAQCAtMTg4NSw2ICsxOTY1LDcgQEAKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzIJCQkgMHg0MDBlNAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMwkJCSAweDQwMGU4CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80CQkJIDB4NDAwZWMKKyNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzUJCQkgMHg0MDBmMAogLyogW1JXIDMyXSBUaGUgQ00gaGVhZGVyIGZvciBmbHVzaCBtZXNzYWdlIHdoZXJlICdsb2FkIGV4aXN0ZWQnIGJpdCBpbiBDRkMKICAgIGxvYWQgcmVzcG9uc2UgaXMgc2V0IGFuZCBwYWNrZXQgdHlwZSBpcyAwLiBVc2VkIGluIHBhY2tldCBzdGFydCBtZXNzYWdlCiAgICB0byBUQ00uICovCkBAIC0xODkzLDYgKzE5NzQsNyBAQAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMgkJCSAweDQwMGM0CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8zCQkJIDB4NDAwYzgKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzQJCQkgMHg0MDBjYworI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNQkJCSAweDQwMGQwCiAvKiBbUlcgMzJdIFRoZSBDTSBoZWFkZXIgZm9yIGEgbWF0Y2ggYW5kIHBhY2tldCB0eXBlIDEgZm9yIGxvb3BiYWNrIHBvcnQuCiAgICBVc2VkIGluIHBhY2tldCBzdGFydCBtZXNzYWdlIHRvIFRDTS4gKi8KICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfTE9PUEJBQ0tfVFlQRV8xCQkJCSAweDQwMDljCkBAIC0yMDM1LDYgKzIxMTcsMTkgQEAKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzUgCQkJCSAweDEyMDRlOAogI2RlZmluZSBQWFAyX1JFR19QR0xfSU5UX1hTRE1fNiAJCQkJIDB4MTIwNGVjCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9JTlRfWFNETV83IAkJCQkgMHgxMjA0ZjAKKy8qIFtSVyAzXSB0aGlzIGZpZWxkIGFsbG93cyBvbmUgZnVuY3Rpb24gdG8gcHJldGVuZCBiZWluZyBhbm90aGVyIGZ1bmN0aW9uCisgICB3aGVuIGFjY2Vzc2luZyBhbnkgQkFSIG1hcHBlZCByZXNvdXJjZSB3aXRoaW4gdGhlIGRldmljZS4gdGhlIHZhbHVlIG9mCisgICB0aGUgZmllbGQgaXMgdGhlIG51bWJlciBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGFjY2Vzc2VkCisgICBlZmZlY3RpdmVseS4gYWZ0ZXIgc29mdHdhcmUgd3JpdGUgdG8gdGhpcyBiaXQgaXQgbXVzdCByZWFkIGl0IGluIG9yZGVyIHRvCisgICBrbm93IHRoYXQgdGhlIG5ldyB2YWx1ZSBpcyB1cGRhdGVkICovCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjAJCQkJIDB4MTIwNjc0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjEJCQkJIDB4MTIwNjc4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjIJCQkJIDB4MTIwNjdjCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjMJCQkJIDB4MTIwNjgwCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjQJCQkJIDB4MTIwNjg0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjUJCQkJIDB4MTIwNjg4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjYJCQkJIDB4MTIwNjhjCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjcJCQkJIDB4MTIwNjkwCiAvKiBbUiAxXSB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHJlYWQgcmVxdWVzdCB3YXMgYmxvY2tlZCBiZWNhdXNlIG9mCiAgICBidXNfbWFzdGVyX2VuIHdhcyBkZWFzc2VydGVkICovCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9SRUFEX0JMT0NLRUQJCQkJIDB4MTIwNTY4CkBAIC0yNDk4LDYgKzI1OTMsMTEgQEAKICAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXI7CiAgICBxdWV1ZXMgNjMtMCAqLwogI2RlZmluZSBRTV9SRUdfQkFTRUFERFIgCQkJCQkgMHgxNjg5MDAKKy8qIFtSVyAzMl0gVGhlIGJhc2UgbG9naWNhbCBhZGRyZXNzIChpbiBieXRlcykgb2YgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gVGhlCisgICBpbmRleCBJIHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlci4gVGhlIDEyIGxzYnMgYXJlIGlnbm9yZSBhbmQKKyAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXI7CisgICBxdWV1ZXMgMTI3LTY0ICovCisjZGVmaW5lIFFNX1JFR19CQVNFQUREUl9FWFRfQQkJCQkJIDB4MTZlMTAwCiAvKiBbUlcgMTZdIFRoZSBieXRlIGNyZWRpdCBjb3N0IGZvciBlYWNoIHRhc2suIFRoaXMgdmFsdWUgaXMgZm9yIGJvdGggcG9ydHMgKi8KICNkZWZpbmUgUU1fUkVHX0JZVEVDUkRDT1NUCQkJCQkgMHgxNjgyMzQKIC8qIFtSVyAxNl0gVGhlIGluaXRpYWwgYnl0ZSBjcmVkaXQgdmFsdWUgZm9yIGJvdGggcG9ydHMuICovCkBAIC0zNDM4LDYgKzM1MzgsMTYgQEAKICNkZWZpbmUgU1JDX1JFR19LRVlSU1MwXzAJCQkJCSAweDQwNDA4CiAjZGVmaW5lIFNSQ19SRUdfS0VZUlNTMF83CQkJCQkgMHg0MDQyNAogI2RlZmluZSBTUkNfUkVHX0tFWVJTUzFfOQkJCQkJIDB4NDA0NTQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMAkJCQkJIDB4NDA0NTgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMQkJCQkJIDB4NDA0NWMKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMgkJCQkJIDB4NDA0NjAKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMwkJCQkJIDB4NDA0NjQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNAkJCQkJIDB4NDA0NjgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNQkJCQkJIDB4NDA0NmMKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNgkJCQkJIDB4NDA0NzAKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNwkJCQkJIDB4NDA0NzQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfOAkJCQkJIDB4NDA0NzgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfOQkJCQkJIDB4NDA0N2MKICNkZWZpbmUgU1JDX1JFR19MQVNURlJFRTAJCQkJCSAweDQwNTMwCiAjZGVmaW5lIFNSQ19SRUdfTlVNQkVSX0hBU0hfQklUUzAJCQkJIDB4NDA0MDAKIC8qIFtSVyAxXSBSZXNldCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lcy4gKi8KQEAgLTM0ODEsNiArMzU5MSwxMCBAQAogLyogW1JDIDFdIE1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0IHRoZSBJbiM5CiAgICBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFRDTV9SRUdfQ1NFTV9MRU5HVEhfTUlTIAkJCQkgMHg1MDE3NAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IGNzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfQ1NFTV9XRUlHSFQJCQkJCSAweDUwMGJjCiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEIGluIGNhc2Ugb2YgRXJyb3JGbGcgaXMgc2V0IGluIHRoZSBpbnB1dCBtZXNzYWdlLiAqLwogI2RlZmluZSBUQ01fUkVHX0VSUl9FVk5UX0lECQkJCQkgMHg1MDBhMAogLyogW1JXIDI4XSBUaGUgQ00gZXJyb25lb3VzIGhlYWRlciBmb3IgUU0gYW5kIFRpbWVycyBmb3JtYXR0aW5nLiAqLwpAQCAtMzUyNCw2ICszNjM4LDcgQEAKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHg1MDA1OAogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweDUwMDVjCiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4NTAwNjAKKyNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF81CQkJCQkgMHg1MDA2NAogLyogW1JXIDFdIElucHV0IHBiZiBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTM1NjMsNiArMzY3OCwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFRDTV9SRUdfU1RPUk1fVENNX0lGRU4JCQkJCSAweDUwMDEwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHg1MDBhYwogLyogW1JXIDFdIENNIC0gQ0ZDIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMgZGlzcmVnYXJkZWQ7CiAgICBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlIHRyZWF0ZWQgYXMgdXN1YWw7CiAgICBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMzU5OCwxMCArMzcxNywyMiBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFRDTV9SRUdfVE1fVENNX0lGRU4JCQkJCSAweDUwMDFjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgVGltZXJzIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RNX1dFSUdIVAkJCQkJIDB4NTAwZDAKIC8qIFtSVyA2XSBRTSBvdXRwdXQgaW5pdGlhbCBjcmVkaXQuIE1heCBjcmVkaXQgYXZhaWxhYmxlIC0gMzIuV3JpdGUgd3JpdGVzCiAgICB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY3JlZGl0CiAgICBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDMyIGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBUQ01fUkVHX1RRTV9JTklUX0NSRAkJCQkJIDB4NTAyMWMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAocHJpbWFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVFFNX1BfV0VJR0hUCQkJCQkgMHg1MDBjOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RRTV9TX1dFSUdIVAkJCQkJIDB4NTAwY2MKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFRDTV9SRUdfVFFNX1RDTV9IRFJfUAkJCQkJIDB4NTAwOTAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTM2MjgsNiArMzc1OSwxMCBAQAogLyogW1JDIDFdIE1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0IHRoZSBJbiM4CiAgICBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFRDTV9SRUdfVVNFTV9MRU5HVEhfTUlTIAkJCQkgMHg1MDE3MAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IHVzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVVNFTV9XRUlHSFQJCQkJCSAweDUwMGI4CiAvKiBbUlcgMjFdIEluZGlyZWN0IGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgWFggcHJvdGVjdGlvbgogICAgbWVjaGFuaXNtLiBUaGUgZmllbGRzIGFyZTogWzU6MF0gLSBsZW5ndGggb2YgdGhlIG1lc3NhZ2U7IDE1OjZdIC0gbWVzc2FnZQogICAgcG9pbnRlcjsgMjA6MTZdIC0gbmV4dCBwb2ludGVyLiAqLwpAQCAtMzY3Nyw2ICszODEyLDcgQEAKICNkZWZpbmUgVE1fUkVHX0VOX0NMMV9JTlBVVAkJCQkJIDB4MTY0MDBjCiAvKiBbUlcgMV0gRW5hYmxlIGNsaWVudDIgaW5wdXQuICovCiAjZGVmaW5lIFRNX1JFR19FTl9DTDJfSU5QVVQJCQkJCSAweDE2NDAxMAorI2RlZmluZSBUTV9SRUdfRU5fTElORUFSMF9USU1FUiAJCQkJIDB4MTY0MDE0CiAvKiBbUlcgMV0gRW5hYmxlIHJlYWwgdGltZSBjb3VudGVyLiAqLwogI2RlZmluZSBUTV9SRUdfRU5fUkVBTF9USU1FX0NOVCAJCQkJIDB4MTY0MGQ4CiAvKiBbUlcgMV0gRW5hYmxlIGZvciBUaW1lcnMgc3RhdGUgbWFjaGluZXMuICovCkBAIC0zNjg0LDE0ICszODIwLDIyIEBACiAvKiBbUlcgNF0gTG9hZCB2YWx1ZSBmb3IgZXhwaXJhdGlvbiBjcmVkaXQgY250LiBDRkMgbWF4IG51bWJlciBvZgogICAgb3V0c3RhbmRpbmcgbG9hZCByZXF1ZXN0cyBmb3IgdGltZXJzIChleHBpcmF0aW9uKSBjb250ZXh0IGxvYWRpbmcuICovCiAjZGVmaW5lIFRNX1JFR19FWFBfQ1JEQ05UX1ZBTAkJCQkJIDB4MTY0MjM4CisvKiBbUlcgMzJdIExpbmVhcjAgbG9naWMgYWRkcmVzcy4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjBfTE9HSUNfQUREUgkJCQkJIDB4MTY0MjQwCiAvKiBbUlcgMThdIExpbmVhcjAgTWF4IGFjdGl2ZSBjaWQgKGluIGJhbmtzIG9mIDMyIGVudHJpZXMpLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9NQVhfQUNUSVZFX0NJRAkJCQkgMHgxNjQwNDgKIC8qIFtXQiA2NF0gTGluZWFyMCBwaHkgYWRkcmVzcy4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTjBfUEhZX0FERFIJCQkJCSAweDE2NDI3MAorLyogW1JXIDFdIExpbmVhcjAgcGh5c2ljYWwgYWRkcmVzcyB2YWxpZC4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjBfUEhZX0FERFJfVkFMSUQJCQkJIDB4MTY0MjQ4CiAvKiBbUlcgMjRdIExpbmVhcjAgYXJyYXkgc2NhbiB0aW1lb3V0LiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9TQ0FOX1RJTUUJCQkJCSAweDE2NDAzYworLyogW1JXIDMyXSBMaW5lYXIxIGxvZ2ljIGFkZHJlc3MuICovCisjZGVmaW5lIFRNX1JFR19MSU4xX0xPR0lDX0FERFIJCQkJCSAweDE2NDI1MAogLyogW1dCIDY0XSBMaW5lYXIxIHBoeSBhZGRyZXNzLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMV9QSFlfQUREUgkJCQkJIDB4MTY0MjgwCisvKiBbUlcgMV0gTGluZWFyMSBwaHlzaWNhbCBhZGRyZXNzIHZhbGlkLiAqLworI2RlZmluZSBUTV9SRUdfTElOMV9QSFlfQUREUl9WQUxJRAkJCQkgMHgxNjQyNTgKIC8qIFtSVyA2XSBMaW5lYXIgdGltZXIgc2V0X2NsZWFyIGZpZm8gdGhyZXNob2xkLiAqLwogI2RlZmluZSBUTV9SRUdfTElOX1NFVENMUl9GSUZPX0FMRlVMTF9USFIJCQkgMHgxNjQwNzAKIC8qIFtSVyAyXSBMb2FkIHZhbHVlIGZvciBwY2kgYXJiaXRlciBjcmVkaXQgY250LiAqLwpAQCAtMzcwOCw2ICszODUyLDE3IEBACiAjZGVmaW5lIFRNX1JFR19UTV9JTlRfU1RTCQkJCQkgMHgxNjQwZjAKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wCQkJCSAweDQyMDM4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMQkJCQkgMHg0MjAzYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEwCQkJCSAweDQyMDYwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4NDIwNjQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHg0MjA2OAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzCQkJCSAweDQyMDZjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4NDIwNzAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNQkJCQkgMHg0MjA3NAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE2CQkJCSAweDQyMDc4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTcJCQkJIDB4NDIwN2MKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHg0MjA4MAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE5CQkJCSAweDQyMDg0CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHg0MjA0MAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweDQyMDg4CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjEJCQkJIDB4NDIwOGMKQEAgLTM3MjMsNiArMzg3OCwxOSBAQAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweDQyMGIwCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4NDIwYjQKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweDQyMDQ4CisvKiBbUlcgMV0gVGhlIFQgYml0IGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8wCQkJCQkgMHg0MjBiOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMQkJCQkJIDB4NDIwYmMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEwCQkJCQkgMHg0MjBlMAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTEJCQkJCSAweDQyMGU0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMgkJCQkJIDB4NDIwZTgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEzCQkJCQkgMHg0MjBlYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTQJCQkJCSAweDQyMGYwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNQkJCQkJIDB4NDIwZjQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE2CQkJCQkgMHg0MjBmOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTcJCQkJCSAweDQyMGZjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xOAkJCQkJIDB4NDIxMDAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE5CQkJCQkgMHg0MjEwNAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFRTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHg0MjAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTM5NjcsNiArNDEzNSwxMCBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIGRvcnEgaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX0RPUlFfTEVOR1RIX01JUyAJCQkJIDB4ZTAxNjgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBkb3JxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX0RPUlFfV0VJR0hUCQkJCQkgMHhlMDBjMAogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIEVycm9yRmxnIGlucHV0IG1lc3NhZ2UgYml0IGlzIHNldC4gKi8KICNkZWZpbmUgVUNNX1JFR19FUlJfRVZOVF9JRAkJCQkJIDB4ZTAwYTQKIC8qIFtSVyAyOF0gVGhlIENNIGVycm9uZW91cyBoZWFkZXIgZm9yIFFNIGFuZCBUaW1lcnMgZm9ybWF0dGluZy4gKi8KQEAgLTQwMzAsNiArNDIwMiwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFVDTV9SRUdfU1RPUk1fVUNNX0lGRU4JCQkJCSAweGUwMDEwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHhlMDBiMAogLyogW1JXIDRdIFRpbWVycyBvdXRwdXQgaW5pdGlhbCBjcmVkaXQuIE1heCBjcmVkaXQgYXZhaWxhYmxlIC0gMTUuV3JpdGUKICAgIHdyaXRlcyB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKICAgIGNyZWRpdCBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDQgYXQgc3RhcnQtdXAuICovCkBAIC00MDQwLDYgKzQyMTYsMTAgQEAKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwogI2RlZmluZSBVQ01fUkVHX1RNX1VDTV9JRkVOCQkJCQkgMHhlMDAxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19UTV9XRUlHSFQJCQkJCSAweGUwMGQ0CiAvKiBbUlcgMV0gSW5wdXQgdHNlbSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTQwOTIsNiArNDI3MiwxMCBAQAogICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgVUNNX1JFR19VUU1fUF9XRUlHSFQJCQkJCSAweGUwMGNjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHNlY29uZGFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfVVFNX1NfV0VJR0hUCQkJCQkgMHhlMDBkMAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChwcmltYXJ5KS4gKi8KICNkZWZpbmUgVUNNX1JFR19VUU1fVUNNX0hEUl9QCQkJCQkgMHhlMDA5NAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChzZWNvbmRhcnkpLiAqLwpAQCAtNDEwNyw2ICs0MjkxLDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU0RNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgVUNNX1JFR19VU0RNX0xFTkdUSF9NSVMgCQkJCSAweGUwMTU4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU0RNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1VTRE1fV0VJR0hUCQkJCQkgMHhlMDBjOAogLyogW1JXIDFdIElucHV0IHhzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC00MTE0LDYgKzQzMDIsMTAgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSB4c2VtIGludGVyZmFjZSBpc2RldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX1hTRU1fTEVOR1RIX01JUyAJCQkJIDB4ZTAxNjQKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCB4c2VtIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1hTRU1fV0VJR0hUCQkJCQkgMHhlMDBiYwogLyogW1JXIDIwXSBJbmRpcmVjdCBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIFhYIHByb3RlY3Rpb24KICAgIG1lY2hhbmlzbS4gVGhlIGZpZWxkcyBhcmU6WzU6MF0gLSBtZXNzYWdlIGxlbmd0aDsgMTQ6Nl0gLSBtZXNzYWdlCiAgICBwb2ludGVyOyAxOToxNV0gLSBuZXh0IHBvaW50ZXIuICovCkBAIC00MTYzLDYgKzQzNTUsNyBAQAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweGM0MGIwCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4YzQwYjQKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweGM0MDQ4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNQkJCQkgMHhjNDA0YwogLyogW1JXIDFdIEZvciBlYWNoIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IGluZGV4IHdoZXRoZXIgdGhlIG1vZGUgaXMgbm9ybWFsICgwKQogICAgb3IgYXV0by1tYXNrLW1vZGUgKDEpICovCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wIAkJCQkgMHhjNDFiOApAQCAtNDE3Nyw2ICs0MzcwLDggQEAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE3CQkJCSAweGM0MWZjCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xOAkJCQkgMHhjNDIwMAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTkJCQkJIDB4YzQyMDQKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzQgCQkJCSAweGM0MWM4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81IAkJCQkgMHhjNDFjYwogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjNDAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTQ0MjcsNiArNDYyMiwxMCBAQAogLyogW1JDIDFdIFNldCBhdCBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdAogICAgdGhlIGRvcnEgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBYQ01fUkVHX0RPUlFfTEVOR1RIX01JUyAJCQkJIDB4MjAyMzAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBkb3JxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX0RPUlFfV0VJR0hUCQkJCQkgMHgyMDBjYwogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIHRoZSBFcnJvckZsZyBpbnB1dCBtZXNzYWdlIGJpdCBpcyBzZXQuICovCiAjZGVmaW5lIFhDTV9SRUdfRVJSX0VWTlRfSUQJCQkJCSAweDIwMGIwCiAvKiBbUlcgMjhdIFRoZSBDTSBlcnJvbmVvdXMgaGVhZGVyIGZvciBRTSBhbmQgVGltZXJzIGZvcm1hdHRpbmcuICovCkBAIC00NDY1LDYgKzQ2NjQsMTAgQEAKIC8qIFtSQyAxXSBTZXQgYXQgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQKICAgIHRoZSBuaWcwIGludGVyZmFjZS4gKi8KICNkZWZpbmUgWENNX1JFR19OSUcwX0xFTkdUSF9NSVMgCQkJCSAweDIwMjM4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgbmlnMCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19OSUcwX1dFSUdIVAkJCQkJIDB4MjAwZDQKIC8qIFtSVyAxXSBJbnB1dCBuaWcxIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtNDUyMyw2ICs0NzI2LDEwIEBACiAgICB3cml0ZXMgdGhlIGluaXRpYWwgY3JlZGl0IHZhbHVlOyByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCiAgICBjcmVkaXQgY291bnRlci4gTXVzdCBiZSBpbml0aWFsaXplZCB0byA0IGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBYQ01fUkVHX1RNX0lOSVRfQ1JECQkJCQkgMHgyMDQxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19UTV9XRUlHSFQJCQkJCSAweDIwMGVjCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgZm9yIFRpbWVycyBleHBpcmF0aW9uIGNvbW1hbmQuICovCiAjZGVmaW5lIFhDTV9SRUdfVE1fWENNX0hEUgkJCQkJIDB4MjAwYTgKIC8qIFtSVyAxXSBUaW1lcnMgLSBDTSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCkBAIC00NjA4LDYgKzQ4MTUsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIFhDTV9SRUdfWFFNX1BfV0VJR0hUCQkJCQkgMHgyMDBlNAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX1hRTV9TX1dFSUdIVAkJCQkJIDB4MjAwZTgKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFhDTV9SRUdfWFFNX1hDTV9IRFJfUAkJCQkJIDB4MjAwYTAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTQ2NjUsNiArNDg3Niw4IEBACiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4MTY2MDYwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4MTY2MDY0CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4MTY2MDY4CisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4MTY2MDZjCisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4MTY2MDcwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHgxNjYwNDAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHgxNjYwODgKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHgxNjYwOGMKQEAgLTQ5NjQsOSArNTE3NywxMSBAQAogI2RlZmluZSBFTUFDX1JYX01PREVfRkxPV19FTgkJCQkJICgxTDw8MikKICNkZWZpbmUgRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcJCQkJICgxTDw8MTApCiAjZGVmaW5lIEVNQUNfUlhfTU9ERV9QUk9NSVNDVU9VUwkJCQkgKDFMPDw4KQorI2RlZmluZSBFTUFDX1JYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCiAjZGVmaW5lIEVNQUNfUlhfTVRVX1NJWkVfSlVNQk9fRU5BCQkJCSAoMUw8PDMxKQogI2RlZmluZSBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOCQkJCSAoMUw8PDMpCiAjZGVmaW5lIEVNQUNfVFhfTU9ERV9GTE9XX0VOCQkJCQkgKDFMPDw0KQorI2RlZmluZSBFTUFDX1RYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMAkJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18xCQkJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzIJCQkJCSAyCkBAIC00OTc2LDYgKzUxOTEsMTAgQEAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MJCQkJIDI0CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSAkJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1oJCQkJIDIKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyAJCQkgMjQKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUgkJCSAwCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQJCQkgMQorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TIAkJCSAxNgogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0xPVyAJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCAJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cJCQkJIDAKQEAgLTUwMTUsMTEgKzUyMzQsMTIgQEAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19PVVRQVVRfTE9XCQkJCSAwCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fU0VUX1BPUwkJCQkgOAogI2RlZmluZSBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRQkJCQkgMzEKLSNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8JCQkJIDAKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9HUElPCQkJCQkgMQorI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX01ESU8JCQkJCSAwCiAjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgCQkJIDMKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9TUElPCQkJCQkgMgogI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX1VOREkJCQkJCSA1CisjZGVmaW5lIFBSU19GTEFHX09WRVJFVEhfSVBWNAkJCQkJIDEKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfQlJCX1BBUklUWV9FUlJPUgkJICAgICAgKDE8PDE4KQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DQ01fSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MzEpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NEVV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDw5KQpAQCAtNTAzNCw2ICs1MjU0LDggQEAKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE1BRV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDwxMSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVAkgICAgICAoMTw8MTMpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1IJICAgICAgKDE8PDEyKQorI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wCQkgICAgICAoMTw8NSkKKyNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMQkJICAgICAgKDE8PDkpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0lHVV9QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxMikKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19IV19JTlRFUlJVUFQJCSAgICAgICgxPDwxNSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxNCkKQEAgLTUxODgsNyArNTQxMCw3IEBACiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX0lOVF9ESVNBQkxFCQkoMTw8MTApCiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX1JFU0VSVkVEIAkJKDB4MWY8PDExKQogI2RlZmluZSBQQ0lDRkdfU1RBVFVTX09GRlNFVAkJCQkweDA2Ci0jZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRAkJCQkweDA4CisjZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRF9PRkZTRVQJCQkweDA4CiAjZGVmaW5lIFBDSUNGR19DQUNIRV9MSU5FX1NJWkUJCQkJMHgwYwogI2RlZmluZSBQQ0lDRkdfTEFURU5DWV9USU1FUgkJCQkweDBkCiAjZGVmaW5lIFBDSUNGR19CQVJfMV9MT1cJCQkJMHgxMApAQCAtNTIxNiw5ICs1NDM4LDI4IEBACiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfU1RBVEUJCQkoMHgzPDwwKQogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9FTkFCTEUJCSgxPDw4KQogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9TVEFUVVMJCSgxPDwxNSkKKyNkZWZpbmUgUENJQ0ZHX01TSV9DQVBfSURfT0ZGU0VUCQkJMHg1OAorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfRU5BQkxFCQkoMHgxPDwxNikKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01DQVAgCQkoMHg3PDwxNykKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01FTkEgCQkoMHg3PDwyMCkKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MXzY0X0JJVF9BRERSX0NBUAkoMHgxPDwyMykKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01TSV9QVk1BU0tfQ0FQQUJMRQkoMHgxPDwyNCkKICNkZWZpbmUgUENJQ0ZHX0dSQ19BRERSRVNTCQkJCTB4NzgKICNkZWZpbmUgUENJQ0ZHX0dSQ19EQVRBIAkJCQkweDgwCisjZGVmaW5lIFBDSUNGR19NU0lYX0NBUF9JRF9PRkZTRVQJCQkweGEwCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfVEFCTEVfU0laRQkJKDB4N2ZmPDwxNikKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9SRVNFUlZFRAkJKDB4Nzw8MjcpCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfRlVOQ19NQVNLCQkoMHgxPDwzMCkKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9NU0lYX0VOQUJMRSAJKDB4MTw8MzEpCisKICNkZWZpbmUgUENJQ0ZHX0RFVklDRV9DT05UUk9MCQkJCTB4YjQKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVMJCQkJMHhiNgorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19DT1JSX0VSUl9ERVQJKDE8PDApCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX05PTl9GQVRBTF9FUlJfREVUCSgxPDwxKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19GQVRBTF9FUlJfREVUCSgxPDwyKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19VTlNVUF9SRVFfREVUCSgxPDwzKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19BVVhfUFdSX0RFVAkoMTw8NCkKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfTk9fUEVORAkJKDE8PDUpCiAjZGVmaW5lIFBDSUNGR19MSU5LX0NPTlRST0wJCQkJMHhiYwogCiAKQEAgLTUzNjMsNiArNTYwNCw0MiBAQAogI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKICNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCiAKKyNkZWZpbmUgTURJT19SRUdfQkFOS19UWDEJCQkJMHg4MDcwCisjZGVmaW5lIE1ESU9fVFgxX1RYX0RSSVZFUgkJCQkweDE3CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLCQkweGYwMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUCQkxMgorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9NQVNLIAkJMHgwZjAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX1NISUZUCQk4CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX01BU0sJCTB4MDBmMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9TSElGVAkJNAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfTUFTSwkJMHgwMDBlCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9TSElGVAkJMQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUNCVUYxVAkJCTEKKworI2RlZmluZSBNRElPX1JFR19CQU5LX1RYMgkJCQkweDgwODAKKyNkZWZpbmUgTURJT19UWDJfVFhfRFJJVkVSCQkJCTB4MTcKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0sJCTB4ZjAwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQJCTEyCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX01BU0sgCQkweDBmMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfU0hJRlQJCTgKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfTUFTSwkJMHgwMGYwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX1NISUZUCQk0CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9NQVNLCQkweDAwMGUKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX1NISUZUCQkxCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JQ0JVRjFUCQkJMQorCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfVFgzCQkJCTB4ODA5MAorI2RlZmluZSBNRElPX1RYM19UWF9EUklWRVIJCQkJMHgxNworI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSwkJMHhmMDAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVAkJMTIKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfTUFTSyAJCTB4MGYwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9TSElGVAkJOAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9NQVNLCQkweDAwZjAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfU0hJRlQJCTQKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX01BU0sJCTB4MDAwZQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCisKICNkZWZpbmUgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMAkJCTB4ODAwMAogI2RlZmluZSBNRElPX0JMT0NLMF9YR1hTX0NPTlRST0wJCQkweDEwCiAKQEAgLTU1NjYsOSArNTg0MywzMCBAQAogI2RlZmluZSBNRElPX1BNQV9SRUdfUk9NX1ZFUjIJCTB4Y2ExYQogI2RlZmluZSBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOCTB4Y2ExYgogI2RlZmluZSBNRElPX1BNQV9SRUdfUExMX0JBTkRXSURUSAkweGNhMWQKKyNkZWZpbmUgTURJT19QTUFfUkVHX0dFTl9DVFJMMgkJMHhjYTFlCisjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwwIAkweGNhMjMKKyNkZWZpbmUgTURJT19QTUFfUkVHX0xSTV9NT0RFCQkweGNhM2YKICNkZWZpbmUgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgJMHhjYTQ2CiAjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxIAkweGNhODUKIAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMIAkweDgwMDAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSwkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUJCTB4MDAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUJMHgwMDA0CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19JTl9QUk9HUkVTUwkweDAwMDgKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0ZBSUxFRAkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQllURV9DTlQJMHg4MDAyCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX01FTV9BRERSCTB4ODAwMworI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX0JVRgkweGM4MjAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9NQVNLIDB4ZmYKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDEJCTB4Y2EwMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMgkJMHhjYTA1CisKKworI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFVgkJCTB4YzgwMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUwkJMHhjODIwCisjZGVmaW5lIE1ESU9fUE1BX1JFR184MDczX1hBVUlfV0EJCQkweGM4NDEKKwogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9SRVNFVCAJMHhjMDAwCiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTA3X0xFRF9DTlRMCTB4YzAwNwogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9WRVIxCQkweGMwMjYKQEAgLTU1OTgsNiArNTg5NiwxMiBAQAogI2RlZmluZSBNRElPX1hTX1BMTF9TRVFVRU5DRVIJCTB4ODAwMAogI2RlZmluZSBNRElPX1hTX1NGWDcxMDFfWEdYU19URVNUMQkweGMwMGEKIAorI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwCTB4ODBiYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgxCTB4ODBjYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgyCTB4ODBkYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgzCTB4ODBlYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlhBCTB4ODBmYworCiAjZGVmaW5lIE1ESU9fQU5fREVWQUQJCQkweDcKIC8qaWVlZSovCiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NUUkwJCTB4MDAwMApAQCAtNTYxOSw2ICs1OTIzLDggQEAKICNkZWZpbmUgTURJT19BTl9SRUdfQ0wzN19GQ19MRAkJMHhmZmU0CiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NMMzdfRkNfTFAJCTB4ZmZlNQogCisjZGVmaW5lIE1ESU9fQU5fUkVHXzgwNzNfMl81RwkJMHg4MzI5CisKIAogI2RlZmluZSBJR1VfRlVOQ19CQVNFCQkJMHgwNDAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAppbmRleCA4YTgzZWIyLi5hMzA2MjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIC8vIEdlbmVyYWwgZGVmaW5pdGlvbnMKICNkZWZpbmUgQk9ORF9FVEhfUF9MQUNQRFUgICAgICAgMHg4ODA5Ci0jZGVmaW5lIFBLVF9UWVBFX0xBQ1BEVSAgICAgICAgIF9fY29uc3RhbnRfaHRvbnMoQk9ORF9FVEhfUF9MQUNQRFUpCisjZGVmaW5lIFBLVF9UWVBFX0xBQ1BEVSAgICAgICAgIGNwdV90b19iZTE2KEJPTkRfRVRIX1BfTEFDUERVKQogI2RlZmluZSBBRF9USU1FUl9JTlRFUlZBTCAgICAgICAxMDAgLyptc2VjKi8KIAogI2RlZmluZSBNVUxUSUNBU1RfTEFDUERVX0FERFIgICAgezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDJ9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggMjdmYjdmNS4uOGRjNmZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJX3VubG9ja19yeF9oYXNodGJsKGJvbmQpOwogCiAJLyppbml0aWFsaXplIHBhY2tldCB0eXBlKi8KLQlwa190eXBlLT50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApOworCXBrX3R5cGUtPnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BUlApOwogCXBrX3R5cGUtPmRldiA9IE5VTEw7CiAJcGtfdHlwZS0+ZnVuYyA9IHJsYl9hcnBfcmVjdjsKIApAQCAtODkyLDcgKzg5Miw3IEBACiAJbWVtc2V0KCZwa3QsIDAsIHNpemUpOwogCW1lbWNweShwa3QubWFjX2RzdCwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkocGt0Lm1hY19zcmMsIG1hY19hZGRyLCBFVEhfQUxFTik7Ci0JcGt0LnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0xPT1ApOworCXBrdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTE9PUCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0xQX0JVUlNUOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE2MjgsNiArMTYyOCwxMCBAQAogICogbm8gb3RoZXIgbG9ja3MgbWF5IGJlIGhlbGQuCiAgKi8KIHZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKQorCV9fcmVsZWFzZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKKwlfX3JlbGVhc2VzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQogewogCXN0cnVjdCBzbGF2ZSAqc3dhcF9zbGF2ZTsKIAlpbnQgaTsKQEAgLTE3MDQsNiArMTcwOCwxMCBAQAogICogQ2FsbGVkIHdpdGggUlROTAogICovCiBpbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcikKKwlfX3JlbGVhc2VzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCisJX19yZWxlYXNlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IGUwNTc4ZmUuLjljMzI2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTAwMiw2ICsxMDAyLDEwIEBACiBzdGF0aWMgdm9pZCBib25kX2RvX2ZhaWxfb3Zlcl9tYWMoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQkJICBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUsCiAJCQkJICBzdHJ1Y3Qgc2xhdmUgKm9sZF9hY3RpdmUpCisJX19yZWxlYXNlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCiB7CiAJdTggdG1wX21hY1tFVEhfQUxFTl07CiAJc3RydWN0IHNvY2thZGRyIHNhZGRyOwpAQCAtMTcxMCw2ICsxNzE0LDcgQEAKIAljYXNlIEJPTkRfTU9ERV9BTEI6CiAJCW5ld19zbGF2ZS0+c3RhdGUgPSBCT05EX1NUQVRFX0FDVElWRTsKIAkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3MobmV3X3NsYXZlKTsKKwkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9kZWJ1ZygiVGhpcyBzbGF2ZSBpcyBhbHdheXMgYWN0aXZlIGluIHRydW5rIG1vZGVcbiIpOwpAQCAtMzE5Myw2ICszMTk4LDggQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiBzdGF0aWMgdm9pZCAqYm9uZF9pbmZvX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gc2VxLT5wcml2YXRlOwogCWxvZmZfdCBvZmYgPSAwOwpAQCAtMzIzMiw2ICszMjM5LDggQEAKIH0KIAogc3RhdGljIHZvaWQgYm9uZF9pbmZvX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19yZWxlYXNlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHNlcS0+cHJpdmF0ZTsKIApAQCAtMzM2OSw3ICszMzc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYm9uZF9pbmZvX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gYm9uZF9pbmZvX3NlcV9zdGFydCwKIAkubmV4dCAgPSBib25kX2luZm9fc2VxX25leHQsCiAJLnN0b3AgID0gYm9uZF9pbmZvX3NlcV9zdG9wLApAQCAtMzUzNywxMSArMzU0NiwyNiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0NIQU5HRToKLQkJLyoKLQkJICogVE9ETzogaXMgdGhpcyB3aGF0IHdlIGdldCBpZiBzb21lYm9keQotCQkgKiBzZXRzIHVwIGEgaGllcmFyY2hpY2FsIGJvbmQsIHRoZW4gcm1tb2QncwotCQkgKiBvbmUgb2YgdGhlIHNsYXZlIGJvbmRpbmcgZGV2aWNlcz8KLQkJICovCisJCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEIHx8IGJvbmRfaXNfbGIoYm9uZCkpIHsKKwkJCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CisKKwkJCXNsYXZlID0gYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2Rldik7CisJCQlpZiAoc2xhdmUpIHsKKwkJCQl1MTYgb2xkX3NwZWVkID0gc2xhdmUtPnNwZWVkOworCQkJCXUxNiBvbGRfZHVwbGV4ID0gc2xhdmUtPmR1cGxleDsKKworCQkJCWJvbmRfdXBkYXRlX3NwZWVkX2R1cGxleChzbGF2ZSk7CisKKwkJCQlpZiAoYm9uZF9pc19sYihib25kKSkKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAob2xkX3NwZWVkICE9IHNsYXZlLT5zcGVlZCkKKwkJCQkJYm9uZF8zYWRfYWRhcHRlcl9zcGVlZF9jaGFuZ2VkKHNsYXZlKTsKKwkJCQlpZiAob2xkX2R1cGxleCAhPSBzbGF2ZS0+ZHVwbGV4KQorCQkJCQlib25kXzNhZF9hZGFwdGVyX2R1cGxleF9jaGFuZ2VkKHNsYXZlKTsKKwkJCX0KKwkJfQorCiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0RPV046CiAJCS8qCkBAIC00NzI0LDcgKzQ3NDgsNyBAQAogICovCiBpbnQgYm9uZF9wYXJzZV9wYXJtKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGJvbmRfcGFybV90YmwgKnRibCkKIHsKLQlpbnQgbW9kZSA9IC0xLCBpLCBydjsKKwlpbnQgbW9kZWludCA9IC0xLCBpLCBydjsKIAljaGFyICpwLCBtb2Rlc3RyW0JPTkRfTUFYX01PREVOQU1FX0xFTiArIDFdID0geyAwLCB9OwogCiAJZm9yIChwID0gKGNoYXIgKilidWY7ICpwOyBwKyspCkBAIC00NzM0LDEzICs0NzU4LDEzIEBACiAJaWYgKCpwKQogCQlydiA9IHNzY2FuZihidWYsICIlMjBzIiwgbW9kZXN0cik7CiAJZWxzZQotCQlydiA9IHNzY2FuZihidWYsICIlZCIsICZtb2RlKTsKKwkJcnYgPSBzc2NhbmYoYnVmLCAiJWQiLCAmbW9kZWludCk7CiAKIAlpZiAoIXJ2KQogCQlyZXR1cm4gLTE7CiAKIAlmb3IgKGkgPSAwOyB0YmxbaV0ubW9kZW5hbWU7IGkrKykgewotCQlpZiAobW9kZSA9PSB0YmxbaV0ubW9kZSkKKwkJaWYgKG1vZGVpbnQgPT0gdGJsW2ldLm1vZGUpCiAJCQlyZXR1cm4gdGJsW2ldLm1vZGU7CiAJCWlmIChzdHJjbXAobW9kZXN0ciwgdGJsW2ldLm1vZGVuYW1lKSA9PSAwKQogCQkJcmV0dXJuIHRibFtpXS5tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IGJiYmMzYmIuLjBlZmZlZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTI1MDYsNyArMjUwNiw3IEBACiAJaWYgKHN0YXR1cyAmIElOVFJfUlhfRE9ORV9BTFQpIHsgLyogaGFuZGxlIHJ4IHNlcGFyYXRlbHkgKi8KICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCByaW5nLCAwKTsKICNlbmRpZgpAQCAtMjU1Nyw3ICsyNTU3LDcgQEAKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9ET05FX0FMVCkgeyAvKiBoYW5kbGUgcnggc2VwYXJhdGVseSAqLwogI2lmZGVmIFVTRV9OQVBJCiAJCWNhc19tYXNrX2ludHIoY3ApOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY3AtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjcC0+bmFwaSk7CiAjZWxzZQogCQljYXNfcnhfcmluZ04oY3AsIDEsIDApOwogI2VuZGlmCkBAIC0yNjEzLDcgKzI2MTMsNyBAQAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkUpIHsKICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCAwLCAwKTsKICNlbmRpZgpAQCAtMjY5MSw3ICsyNjkxLDcgQEAKICNlbmRpZgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJaWYgKGVuYWJsZV9pbnRyKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQljYXNfdW5tYXNrX2ludHIoY3ApOwogCX0KIAlyZXR1cm4gY3JlZGl0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCmluZGV4IGQ5ODRiNzkuLjU4ZjZmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwpAQCAtMTYxMiw3ICsxNjEyLDcgQEAKIAlpbnQgd29ya19kb25lID0gcHJvY2Vzc19yZXNwb25zZXMoYWRhcHRlciwgYnVkZ2V0KTsKIAogCWlmIChsaWtlbHkod29ya19kb25lIDwgYnVkZ2V0KSkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JpdGVsKGFkYXB0ZXItPnNnZS0+cmVzcFEuY2lkeCwKIAkJICAgICAgIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX1NMRUVQSU5HKTsKIAl9CkBAIC0xNjMwLDcgKzE2MzAsNyBAQAogCiAJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAJCQlpZiAocHJvY2Vzc19wdXJlX3Jlc3BvbnNlcyhhZGFwdGVyKSkKLQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCQkJZWxzZSB7CiAJCQkJLyogbm8gZGF0YSwgbm8gTkFQSSBuZWVkZWQgKi8KIAkJCQl3cml0ZWwoc2dlLT5yZXNwUS5jaWR4LCBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7CkBAIC0xOTY3LDggKzE5NjcsNyBAQAogCQl0eF9zY2hlZF9zdG9wKHNnZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05QT1JUUzsgaSsrKQotCQlpZiAoc2dlLT5lc3BpYnVnX3NrYltpXSkKLQkJCWtmcmVlX3NrYihzZ2UtPmVzcGlidWdfc2tiW2ldKTsKKwkJa2ZyZWVfc2tiKHNnZS0+ZXNwaWJ1Z19za2JbaV0pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3BtYWMuYyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKaW5kZXggZjY2NTQ4Ny4uM2Y0NzZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3BtYWMuYworKysgYi9kcml2ZXJzL25ldC9jcG1hYy5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByeDogcG9sbGluZywgYnV0IG5vIHF1ZXVlXG4iLAogCQkJICAgICAgIHByaXYtPmRldi0+bmFtZSk7CiAJCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTE0LDcgKzUxNCw3IEBACiAJaWYgKHByb2Nlc3NlZCA9PSAwKSB7CiAJCS8qIHdlIHJhbiBvdXQgb2YgcGFja2V0cyB0byByZWFkLAogCQkgKiByZXZlcnQgdG8gaW50ZXJydXB0LWRyaXZlbiBtb2RlICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQljcG1hY193cml0ZShwcml2LT5yZWdzLCBDUE1BQ19SWF9JTlRfRU5BQkxFLCAxKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTM2LDcgKzUzNiw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJnByaXYtPnJ4X2xvY2spOwotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHByaXYtPmRldik7CiAJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKIApAQCAtODAyLDkgKzgwMiw5IEBACiAKIAlpZiAoc3RhdHVzICYgTUFDX0lOVF9SWCkgewogCQlxdWV1ZSA9IChzdGF0dXMgPj4gOCkgJiA3OwotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKIAkJCWNwbWFjX3dyaXRlKHByaXYtPnJlZ3MsIENQTUFDX1JYX0lOVF9DTEVBUiwgMSA8PCBxdWV1ZSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJCX0KIAl9CiAKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJcHJpdi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnX2xldmVsLCAweGZmKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgcGRhdGEtPmRldl9hZGRyLCBzaXplb2YoZGV2LT5kZXZfYWRkcikpOwogCi0JcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXS0+ZGV2LmJ1c19pZCwKKwlwcml2LT5waHkgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXS0+ZGV2KSwKIAkJCQkmY3BtYWNfYWRqdXN0X2xpbmssIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCWlmIChJU19FUlIocHJpdi0+cGh5KSkgewogCQlpZiAobmV0aWZfbXNnX2Rydihwcml2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggZmY2NDk3Ni4uNzQzM2I4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3M4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKQEAgLTUwMSw2ICs1MDEsMjEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXRfY2xvc2UsCisJLm5kb190eF90aW1lb3V0CQk9IG5ldF90aW1lb3V0LAorCS5uZG9fc3RhcnRfeG1pdCAJPSBuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19nZXRfc3RhdHMJCT0gbmV0X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBzZXRfbWFjX2FkZHJlc3MsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IG5ldF9wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGlzIGlzIHRoZSByZWFsIHByb2JlIHJvdXRpbmUuICBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICAgcHJvYmVzIG9uIHRoZSBJU0EgYnVzLiAgQSBnb29kIGRldmljZSBwcm9iZXMgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCiAgICB2ZXJpZmllcyB0aGF0IHRoZSBjb3JyZWN0IGRldmljZSBleGlzdHMgYW5kIGZ1bmN0aW9ucy4KQEAgLTg0MywxNyArODU4LDggQEAKIAkvKiBwcmludCB0aGUgZXRoZXJuZXQgYWRkcmVzcy4gKi8KIAlwcmludGsoIiwgTUFDICVwTSIsIGRldi0+ZGV2X2FkZHIpOwogCi0JZGV2LT5vcGVuCQk9IG5ldF9vcGVuOwotCWRldi0+c3RvcAkJPSBuZXRfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG5ldF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAJPSBuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbmV0X2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAJPSBzZXRfbWFjX2FkZHJlc3M7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlcgk9IG5ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKKwlkZXYtPm5ldGRldl9vcHMJPSAmbmV0X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7CiAKIAlwcmludGsoIlxuIik7CiAJaWYgKG5ldF9kZWJ1ZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAppbmRleCBhODlkOGNjLi43MTRkZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSAidDNjZGV2LmgiCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTY5LDYgKzY4LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRzdGF0czsKIAlpbnQgYWN0aXZpdHk7CiAJX19iZTMyIGlzY3NpX2lwdjRhZGRyOworCisJaW50IGxpbmtfZmF1bHQ7IC8qIGxpbmsgZmF1bHQgd2FzIGRldGVjdGVkICovCiB9OwogCiBlbnVtIHsJCQkJLyogYWRhcHRlciBmbGFncyAqLwpAQCAtODQsNiArODUsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXZvaWQgKnZhOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdTY0ICpwX2NudDsKKwlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpOwogfTsKIAogc3RydWN0IHJ4X2Rlc2M7CkBAIC05Miw2ICs5NSw3IEBACiBzdHJ1Y3Qgc2dlX2ZsIHsgICAgICAgICAgICAgICAgICAgICAvKiBTR0UgcGVyIGZyZWUtYnVmZmVyIGxpc3Qgc3RhdGUgKi8KIAl1bnNpZ25lZCBpbnQgYnVmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIFJ4IGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBjcmVkaXRzOyAgICAgICAvKiAjIG9mIGF2YWlsYWJsZSBSeCBidWZmZXJzICovCisJdW5zaWduZWQgaW50IHBlbmRfY3JlZDsgICAgIC8qIG5ldyBidWZmZXJzIHNpbmNlIGxhc3QgRkwgREIgcmluZyAqLwogCXVuc2lnbmVkIGludCBzaXplOyAgICAgICAgICAvKiBjYXBhY2l0eSBvZiBmcmVlIGxpc3QgKi8KIAl1bnNpZ25lZCBpbnQgY2lkeDsgICAgICAgICAgLyogY29uc3VtZXIgaW5kZXggKi8KIAl1bnNpZ25lZCBpbnQgcGlkeDsgICAgICAgICAgLyogcHJvZHVjZXIgaW5kZXggKi8KQEAgLTk5LDYgKzEwMyw3IEBACiAJc3RydWN0IGZsX3BnX2NodW5rIHBnX2NodW5rOy8qIHBhZ2UgY2h1bmsgY2FjaGUgKi8KIAl1bnNpZ25lZCBpbnQgdXNlX3BhZ2VzOyAgICAgLyogd2hldGhlciBGTCB1c2VzIHBhZ2VzIG9yIHNrX2J1ZmZzICovCiAJdW5zaWduZWQgaW50IG9yZGVyOwkgICAgLyogb3JkZXIgb2YgcGFnZSBhbGxvY2F0aW9ucyAqLworCXVuc2lnbmVkIGludCBhbGxvY19zaXplOyAgICAvKiBzaXplIG9mIGFsbG9jYXRlZCBidWZmZXIgKi8KIAlzdHJ1Y3QgcnhfZGVzYyAqZGVzYzsgICAgICAgLyogYWRkcmVzcyBvZiBIVyBSeCBkZXNjcmlwdG9yIHJpbmcgKi8KIAlzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2Rlc2M7ICAgLyogYWRkcmVzcyBvZiBTVyBSeCBkZXNjcmlwdG9yIHJpbmcgKi8KIAlkbWFfYWRkcl90ICAgcGh5c19hZGRyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBIVyByaW5nIHN0YXJ0ICovCkBAIC0xNzgsMTUgKzE4MywxMSBAQAogCVNHRV9QU1RBVF9UWF9DU1VNLAkvKiAjIG9mIFRYIGNoZWNrc3VtIG9mZmxvYWRzICovCiAJU0dFX1BTVEFUX1ZMQU5FWCwJLyogIyBvZiBWTEFOIHRhZyBleHRyYWN0aW9ucyAqLwogCVNHRV9QU1RBVF9WTEFOSU5TLAkvKiAjIG9mIFZMQU4gdGFnIGluc2VydGlvbnMgKi8KLQlTR0VfUFNUQVRfTFJPX0FHR1IsCS8qICMgb2YgcGFnZSBjaHVua3MgYWRkZWQgdG8gTFJPIHNlc3Npb25zICovCi0JU0dFX1BTVEFUX0xST19GTFVTSEVELAkvKiAjIG9mIGZsdXNoZWQgTFJPIHNlc3Npb25zICovCi0JU0dFX1BTVEFUX0xST19OT19ERVNDLAkvKiAjIG9mIG92ZXJmbG93biBMUk8gc2Vzc2lvbnMgKi8KIAogCVNHRV9QU1RBVF9NQVgJCS8qIG11c3QgYmUgbGFzdCAqLwogfTsKIAotI2RlZmluZSBUM19NQVhfTFJPX1NFUyA4Ci0jZGVmaW5lIFQzX01BWF9MUk9fTUFYX1BLVFMgNjQKK3N0cnVjdCBuYXBpX2dyb19mcmFnaW5mbzsKIAogc3RydWN0IHNnZV9xc2V0IHsJCS8qIGFuIFNHRSBxdWV1ZSBzZXQgKi8KIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcDsKQEAgLTE5NCwxNyArMTk1LDE0IEBACiAJc3RydWN0IHNnZV9yc3BxIHJzcHE7CiAJc3RydWN0IHNnZV9mbCBmbFtTR0VfUlhRX1BFUl9TRVRdOwogCXN0cnVjdCBzZ2VfdHhxIHR4cVtTR0VfVFhRX1BFUl9TRVRdOwotCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbVDNfTUFYX0xST19TRVNdOwotCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmxyb19mcmFnX3RibDsKLQlpbnQgbHJvX25mcmFnczsKKwlzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gbHJvX2ZyYWdfdGJsOwogCWludCBscm9fZW5hYmxlZDsKLQlpbnQgbHJvX2ZyYWdfbGVuOwogCXZvaWQgKmxyb192YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4X3E7CS8qIGFzc29jaWF0ZWQgbmV0ZGV2IFRYIHF1ZXVlICovCiAJdW5zaWduZWQgbG9uZyB0eHFfc3RvcHBlZDsJLyogd2hpY2ggVHggcXVldWVzIGFyZSBzdG9wcGVkICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdHhfcmVjbGFpbV90aW1lcjsJLyogcmVjbGFpbXMgVFggYnVmZmVycyAqLworCXN0cnVjdCB0aW1lcl9saXN0IHJ4X3JlY2xhaW1fdGltZXI7CS8qIHJlY2xhaW1zIFJYIGJ1ZmZlcnMgKi8KIAl1bnNpZ25lZCBsb25nIHBvcnRfc3RhdHNbU0dFX1BTVEFUX01BWF07CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIApAQCAtMjMwLDYgKzIyOCw3IEBACiAJdW5zaWduZWQgaW50IHNsb3dfaW50cl9tYXNrOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRzW0lSUV9OVU1fU1RBVFNdOwogCisJaW50IG1zaXhfbnZlY3RvcnM7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgc2hvcnQgdmVjOwogCQljaGFyIGRlc2NbMjJdOwpAQCAtMjQ3LDYgKzI0Niw3IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhZGFwX2NoZWNrX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGV4dF9pbnRyX2hhbmRsZXJfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmF0YWxfZXJyb3JfaGFuZGxlcl90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsaW5rX2ZhdWx0X2hhbmRsZXJfdGFzazsKIAogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIApAQCAtMjg5LDkgKzI4OSwxMiBAQAogdm9pZCB0M19vc19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0dXMsCiAJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsIGludCBmYyk7CiB2b2lkIHQzX29zX3BoeW1vZF9jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCk7Cit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpOwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKIAogdm9pZCB0M19zZ2Vfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2Vfc3RvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7Cit2b2lkIHQzX3N0YXJ0X3NnZV90aW1lcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zdG9wX3NnZV90aW1lcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19mcmVlX3NnZV9yZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggNWMzYzA1ZC4uZTFiMjI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMTAwNSw3ICsxMDA1LDggQEAKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCi0JaW50IGVyciwgbGFzaV9jdHJsOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGxhc2lfY3RybDsKIAogCWVyciA9IG1kaW9fcmVhZChwaHksIE1ESU9fREVWX1BNQV9QTUQsIExBU0lfQ1RSTCwgJmxhc2lfY3RybCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggZGI0ZjRmNS4uZTUwOGRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTE5MSw3ICsxOTEsOCBAQAogfTsKIAogc3RydWN0IGFkYXB0ZXJfaW5mbyB7Ci0JdW5zaWduZWQgY2hhciBucG9ydHM7CS8qICMgb2YgcG9ydHMgKi8KKwl1bnNpZ25lZCBjaGFyIG5wb3J0czA7ICAgICAgICAvKiAjIG9mIHBvcnRzIG9uIGNoYW5uZWwgMCAqLworCXVuc2lnbmVkIGNoYXIgbnBvcnRzMTsgICAgICAgIC8qICMgb2YgcG9ydHMgb24gY2hhbm5lbCAxICovCiAJdW5zaWduZWQgY2hhciBwaHlfYmFzZV9hZGRyOwkvKiBNRElPIFBIWSBiYXNlIGFkZHJlc3MgKi8KIAl1bnNpZ25lZCBpbnQgZ3Bpb19vdXQ7CS8qIEdQSU8gb3V0cHV0IHNldHRpbmdzICovCiAJdW5zaWduZWQgY2hhciBncGlvX2ludHJbTUFYX05QT1JUU107IC8qIEdQSU8gUEhZIElSUSBwaW5zICovCkBAIC0yODAsNiArMjgxLDcgQEAKIAl1bnNpZ25lZCBsb25nIG51bV90b2dnbGVkOyAvKiAjIHRpbWVzIHRvZ2dsZWQgVHhFbiBkdWUgdG8gc3R1Y2sgVFggKi8KIAl1bnNpZ25lZCBsb25nIG51bV9yZXNldHM7ICAvKiAjIHRpbWVzIHJlc2V0IGR1ZSB0byBzdHVjayBUWCAqLwogCisJdW5zaWduZWQgbG9uZyBsaW5rX2ZhdWx0czsgIC8qICMgZGV0ZWN0ZWQgbGluayBmYXVsdHMgKi8KIH07CiAKIHN0cnVjdCB0cF9taWJfc3RhdHMgewpAQCAtNDIxLDYgKzQyMyw3IEBACiAJdW5zaWduZWQgc2hvcnQgYl93bmRbTkNDVFJMX1dJTl07CiAKIAl1bnNpZ25lZCBpbnQgbnBvcnRzOwkvKiAjIG9mIGV0aGVybmV0IHBvcnRzICovCisJdW5zaWduZWQgaW50IGNoYW5fbWFwOyAgLyogYml0bWFwIG9mIGluLXVzZSBUeCBjaGFubmVscyAqLwogCXVuc2lnbmVkIGludCBzdGF0c191cGRhdGVfcGVyaW9kOwkvKiBNQUMgc3RhdHMgYWNjdW11bGF0aW9uIHBlcmlvZCAqLwogCXVuc2lnbmVkIGludCBsaW5rcG9sbF9wZXJpb2Q7CS8qIGxpbmsgcG9sbCBwZXJpb2QgaW4gMC4xcyAqLwogCXVuc2lnbmVkIGludCByZXY7CS8qIGNoaXAgcmV2aXNpb24gKi8KQEAgLTcwMSw2ICs3MDQsOCBAQAogdm9pZCB0M19pbnRyX2VuYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHQzX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHQzX2ludHJfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCB0M194Z21faW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwordm9pZCB0M194Z21faW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKIHZvaWQgdDNfcG9ydF9pbnRyX2VuYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKIHZvaWQgdDNfcG9ydF9pbnRyX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKQEAgLTcwOCw2ICs3MTMsNyBAQAogaW50IHQzX3BoeV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogCiB2b2lkIHQzX2xpbmtfY2hhbmdlZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpOwordm9pZCB0M19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCk7CiBpbnQgdDNfbGlua19zdGFydChzdHJ1Y3QgY3BoeSAqcGh5LCBzdHJ1Y3QgY21hYyAqbWFjLCBzdHJ1Y3QgbGlua19jb25maWcgKmxjKTsKIGNvbnN0IHN0cnVjdCBhZGFwdGVyX2luZm8gKnQzX2dldF9hZGFwdGVyX2luZm8odW5zaWduZWQgaW50IGJvYXJkX2lkKTsKIGludCB0M19zZWVwcm9tX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCBfX2xlMzIgKmRhdGEpOwpAQCAtNzQ0LDYgKzc1MCw4IEBACiAKIGludCB0M19tYWNfcmVzZXQoc3RydWN0IGNtYWMgKm1hYyk7CiB2b2lkIHQzYl9wY3NfcmVzZXQoc3RydWN0IGNtYWMgKm1hYyk7Cit2b2lkIHQzX21hY19kaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYyk7Cit2b2lkIHQzX21hY19lbmFibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKTsKIGludCB0M19tYWNfZW5hYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX2Rpc2FibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKTsKIGludCB0M19tYWNfc2V0X210dShzdHJ1Y3QgY21hYyAqbWFjLCB1bnNpZ25lZCBpbnQgbXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCBiYWI4YTkzLi4yYzJhYWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0xNzAsNiArMTcwLDQwIEBACiAJfQogfQogCit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXAtPnBvcnRbcG9ydF9pZF07CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHN0YXRlID09IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHN0YXRlKSB7CisJCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisKKwkJLyogQ2xlYXIgbG9jYWwgZmF1bHRzICovCisJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcCwgcGktPnBvcnRfaWQpOworCQl0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9JTlRfU1RBVFVTICsKKwkJCQkgICAgcGktPm1hYy5vZmZzZXQpOworCQl0M193cml0ZV9yZWcoYWRhcCwKKwkJCSAgICAgQV9YR01fSU5UX0NBVVNFICsgcGktPm1hYy5vZmZzZXQsCisJCQkgICAgIEZfWEdNX0lOVCk7CisKKwkJdDNfc2V0X3JlZ19maWVsZChhZGFwLAorCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsKKwkJCQkgcGktPm1hYy5vZmZzZXQsCisJCQkJIEZfWEdNX0lOVCwgRl9YR01fSU5UKTsKKwkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKKworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9UWCk7CisJfSBlbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlsaW5rX3JlcG9ydChkZXYpOworfQorCiAvKioKICAqCXQzX29zX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBsaW5rIHN0YXR1cyBjaGFuZ2VzCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rIGNoYW5nZQpAQCAtMTk3LDEwICsyMzEsMzQgQEAKIAlpZiAobGlua19zdGF0ICE9IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlpZiAobGlua19zdGF0KSB7CiAJCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLworCQkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsKKwkJCQkgICAgcGktPm1hYy5vZmZzZXQpOworCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsCisJCQkJICAgICBBX1hHTV9JTlRfQ0FVU0UgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkgICAgIEZfWEdNX0lOVCk7CisKKwkJCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwKKwkJCQkJIEFfWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkJIEZfWEdNX0lOVCwgRl9YR01fSU5UKTsKKwkJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJfSBlbHNlIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQlwaS0+cGh5Lm9wcy0+cG93ZXJfZG93bigmcGktPnBoeSwgMSk7CisKKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKKwkJCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwKKwkJCQkJIEFfWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJCQkJIEZfWEdNX0lOVCwgMCk7CisKKwkJCWlmIChpc18xMEcoYWRhcHRlcikpCisJCQkJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOworCisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOwogCQkJdDNfbWFjX2Rpc2FibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKIAkJCXQzX2xpbmtfc3RhcnQoJnBpLT5waHksIG1hYywgJnBpLT5saW5rX2NvbmZpZyk7CiAJCX0KQEAgLTMzOSw3ICszOTcsNyBAQAogCiAJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1swXS52ZWMsIGFkYXB0ZXIpOwogCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpCi0JCSAgICBuICs9IGFkYXAycGluZm8oYWRhcHRlciwgaSktPm5xc2V0czsKKwkJCW4gKz0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpKS0+bnFzZXRzOwogCiAJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAJCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2luZm9baSArIDFdLnZlYywKQEAgLTUwOSwxOSArNTY3LDkgQEAKIHsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKLQlpbnQgaSwgbHJvX29uID0gMTsKIAogCWFkYXB0ZXItPnBhcmFtcy5zZ2UucXNldFtxc2V0X2lkeF0ubHJvID0gISF2YWw7CiAJYWRhcHRlci0+c2dlLnFzW3FzZXRfaWR4XS5scm9fZW5hYmxlZCA9ICEhdmFsOwotCi0JLyogbGV0IGV0aHRvb2wgcmVwb3J0IExSTyBvbiBvbmx5IGlmIGFsbCBxdWV1ZXMgYXJlIExSTyBlbmFibGVkICovCi0JZm9yIChpID0gcGktPmZpcnN0X3FzZXQ7IGkgPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHM7ICsraSkKLQkJbHJvX29uICY9IGFkYXB0ZXItPnBhcmFtcy5zZ2UucXNldFtpXS5scm87Ci0KLQlpZiAobHJvX29uKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CiB9CiAKIC8qKgpAQCAtNTU0LDcgKzYwMiw2IEBACiAJCQkJJmFkYXAtPnBhcmFtcy5zZ2UucXNldFtxc2V0X2lkeF0sIG50eHEsIGRldiwKIAkJCQluZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaikpOwogCQkJaWYgKGVycikgewotCQkJCXQzX3N0b3Bfc2dlX3RpbWVycyhhZGFwKTsKIAkJCQl0M19mcmVlX3NnZV9yZXNvdXJjZXMoYWRhcCk7CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTk5OCw2ICsxMDQ1LDggQEAKIAkJc2V0dXBfcnNzKGFkYXApOwogCQlpZiAoIShhZGFwLT5mbGFncyAmIE5BUElfSU5JVCkpCiAJCQlpbml0X25hcGkoYWRhcCk7CisKKwkJdDNfc3RhcnRfc2dlX3RpbWVycyhhZGFwKTsKIAkJYWRhcC0+ZmxhZ3MgfD0gRlVMTF9JTklUX0RPTkU7CiAJfQogCkBAIC0xMTgzLDYgKzEyMzIsMTAgQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKIAorCS8qIFN0b3AgbGluayBmYXVsdCBpbnRlcnJ1cHRzICovCisJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CisJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKKwogCXQzX3BvcnRfaW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAlwaS0+cGh5Lm9wcy0+cG93ZXJfZG93bigmcGktPnBoeSwgMSk7CkBAIC0xMzA5LDYgKzEzNjIsNyBAQAogCSJDaGVja1RYRW5Ub2dnbGVkICAgIiwKIAkiQ2hlY2tSZXNldHMgICAgICAgICIsCiAKKwkiTGlua0ZhdWx0cyAgICAgICAgICIsCiB9OwogCiBzdGF0aWMgaW50IGdldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KQpAQCAtMTQzNCwxMyArMTQ4OCwxNSBAQAogCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfVkxBTklOUyk7CiAJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9UWF9DU1VNKTsKIAkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX1JYX0NTVU1fR09PRCk7Ci0JKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fQUdHUik7Ci0JKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fRkxVU0hFRCk7Ci0JKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9MUk9fTk9fREVTQyk7CisJKmRhdGErKyA9IDA7CisJKmRhdGErKyA9IDA7CisJKmRhdGErKyA9IDA7CiAJKmRhdGErKyA9IHMtPnJ4X2NvbmdfZHJvcHM7CiAKIAkqZGF0YSsrID0gcy0+bnVtX3RvZ2dsZWQ7CiAJKmRhdGErKyA9IHMtPm51bV9yZXNldHM7CisKKwkqZGF0YSsrID0gcy0+bGlua19mYXVsdHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdfYmxvY2tfZHVtcChzdHJ1Y3QgYWRhcHRlciAqYXAsIHZvaWQgKmJ1ZiwKQEAgLTE1NzYsNyArMTYzMiw2IEBACiAKIHN0YXRpYyBpbnQgc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCWludCBjYXA7CiAJc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwLT5saW5rX2NvbmZpZzsKIApAQCAtMTU4Niw3ICsxNjQxLDcgQEAKIAkJICogYmVpbmcgcmVxdWVzdGVkLgogCQkgKi8KIAkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHsKLQkJCWNhcCA9IHNwZWVkX2R1cGxleF90b19jYXBzKGNtZC0+c3BlZWQsIGNtZC0+ZHVwbGV4KTsKKwkJCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CiAJCQlpZiAobGMtPnN1cHBvcnRlZCAmIGNhcCkKIAkJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTgyNywyOCArMTg4Miw2IEBACiAJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7CiB9CiAKLXN0YXRpYyBpbnQgY3hnYjNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKLQotCWlmIChkYXRhICYgRVRIX0ZMQUdfTFJPKSB7Ci0JCWlmICghKHBpLT5yeF9vZmZsb2FkICYgVDNfUlhfQ1NVTSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlwaS0+cnhfb2ZmbG9hZCB8PSBUM19MUk87Ci0JCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyBpKyspCi0JCQlzZXRfcXNldF9scm8oZGV2LCBpLCAxKTsKLQotCX0gZWxzZSB7Ci0JCXBpLT5yeF9vZmZsb2FkICY9IH5UM19MUk87Ci0JCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyBpKyspCi0JCQlzZXRfcXNldF9scm8oZGV2LCBpLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBjeGdiX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBnZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHNldF9zZXR0aW5ncywKQEAgLTE4NzgsOCArMTkxMSw2IEBACiAJLmdldF9yZWdzID0gZ2V0X3JlZ3MsCiAJLmdldF93b2wgPSBnZXRfd29sLAogCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzID0gY3hnYjNfc2V0X2ZsYWdzLAogfTsKIAogc3RhdGljIGludCBpbl9yYW5nZShpbnQgdmFsLCBpbnQgbG8sIGludCBoaSkKQEAgLTI0NjAsOCArMjQ5MSwyMCBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKIAkJc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJaWYgKCEocC0+cGh5LmNhcHMgJiBTVVBQT1JURURfSVJRKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CisJCWlmIChwLT5saW5rX2ZhdWx0KSB7CisJCQlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CisKKwkJaWYgKCEocC0+cGh5LmNhcHMgJiBTVVBQT1JURURfSVJRKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgaSk7CisJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcC0+bWFjLm9mZnNldCk7CisKIAkJCXQzX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBpKTsKKwkJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBpKTsKKwkJfQogCX0KIH0KIApAQCAtMjUwNiw2ICsyNTQ5LDggQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKIAkJCQkJICAgICAgIGFkYXBfY2hlY2tfdGFzay53b3JrKTsKIAljb25zdCBzdHJ1Y3QgYWRhcHRlcl9wYXJhbXMgKnAgPSAmYWRhcHRlci0+cGFyYW1zOworCWludCBwb3J0OworCXVuc2lnbmVkIGludCB2LCBzdGF0dXMsIHJlc2V0OwogCiAJYWRhcHRlci0+Y2hlY2tfdGFza19jbnQrKzsKIApAQCAtMjUyNCw2ICsyNTY5LDU0IEBACiAJaWYgKHAtPnJldiA9PSBUM19SRVZfQjIpCiAJCWNoZWNrX3QzYjJfbWFjKGFkYXB0ZXIpOwogCisJLyoKKwkgKiBTY2FuIHRoZSBYR01BQydzIHRvIGNoZWNrIGZvciB2YXJpb3VzIGNvbmRpdGlvbnMgd2hpY2ggd2Ugd2FudCB0bworCSAqIG1vbml0b3IgaW4gYSBwZXJpb2RpYyBwb2xsaW5nIG1hbm5lciByYXRoZXIgdGhhbiB2aWEgYW4gaW50ZXJydXB0CisJICogY29uZGl0aW9uLiAgVGhpcyBpcyB1c2VkIGZvciBjb25kaXRpb25zIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBmbG9vZAorCSAqIHRoZSBzeXN0ZW0gd2l0aCBpbnRlcnJ1cHRzIGFuZCB3ZSBvbmx5IHJlYWxseSBuZWVkIHRvIGtub3cgdGhhdCB0aGUKKwkgKiBjb25kaXRpb25zIGFyZSAiaGFwcGVuaW5nIiAuLi4gIEZvciBlYWNoIGNvbmRpdGlvbiB3ZSBjb3VudCB0aGUKKwkgKiBkZXRlY3Rpb24gb2YgdGhlIGNvbmRpdGlvbiBhbmQgcmVzZXQgaXQgZm9yIHRoZSBuZXh0IHBvbGxpbmcgbG9vcC4KKwkgKi8KKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBvcnQpIHsKKwkJc3RydWN0IGNtYWMgKm1hYyA9ICAmYWRhcDJwaW5mbyhhZGFwdGVyLCBwb3J0KS0+bWFjOworCQl1MzIgY2F1c2U7CisKKwkJY2F1c2UgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfQ0FVU0UgKyBtYWMtPm9mZnNldCk7CisJCXJlc2V0ID0gMDsKKwkJaWYgKGNhdXNlICYgRl9SWEZJRk9fT1ZFUkZMT1cpIHsKKwkJCW1hYy0+c3RhdHMucnhfZmlmb19vdmZsKys7CisJCQlyZXNldCB8PSBGX1JYRklGT19PVkVSRkxPVzsKKwkJfQorCisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfQ0FVU0UgKyBtYWMtPm9mZnNldCwgcmVzZXQpOworCX0KKworCS8qCisJICogV2UgZG8gdGhlIHNhbWUgYXMgYWJvdmUgZm9yIEZMX0VNUFRZIGludGVycnVwdHMuCisJICovCisJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UpOworCXJlc2V0ID0gMDsKKworCWlmIChzdGF0dXMgJiBGX0ZMRU1QVFkpIHsKKwkJc3RydWN0IHNnZV9xc2V0ICpxcyA9ICZhZGFwdGVyLT5zZ2UucXNbMF07CisJCWludCBpID0gMDsKKworCQlyZXNldCB8PSBGX0ZMRU1QVFk7CisKKwkJdiA9ICh0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX1JTUFFfRkxfU1RBVFVTKSA+PiBTX0ZMMEVNUFRZKSAmCisJCSAgICAweGZmZmY7CisKKwkJd2hpbGUgKHYpIHsKKwkJCXFzLT5mbFtpXS5lbXB0eSArPSAodiAmIDEpOworCQkJaWYgKGkpCisJCQkJcXMrKzsKKwkJCWkgXj0gMTsKKwkJCXYgPj49IDE7CisJCX0KKwl9CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UsIHJlc2V0KTsKKwogCS8qIFNjaGVkdWxlIHRoZSBuZXh0IGNoZWNrIHVwZGF0ZSBpZiBhbnkgcG9ydCBpcyBhY3RpdmUuICovCiAJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKIAlpZiAoYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwICYgUE9SVF9NQVNLKQpAQCAtMjUzOCw5ICsyNjMxLDIzIEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCiAJCQkJCSAgICAgICBleHRfaW50cl9oYW5kbGVyX3Rhc2spOworCWludCBpOwogCisJLyogRGlzYWJsZSBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbaV07CisJCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgaSk7CisJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwLT5tYWMub2Zmc2V0KTsKKwl9CisKKwkvKiBSZS1lbmFibGUgbGluayBmYXVsdCBpbnRlcnJ1cHRzICovCiAJdDNfcGh5X2ludHJfaGFuZGxlcihhZGFwdGVyKTsKIAorCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkKKwkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXB0ZXIsIGkpOworCiAJLyogTm93IHJlZW5hYmxlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOwogCWlmIChhZGFwdGVyLT5zbG93X2ludHJfbWFzaykgewpAQCAtMjU3MywxMCArMjY4MCw0MiBAQAogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT53b3JrX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCBsaW5rX2ZhdWx0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAorCQkJCQkgICAgICAgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2spOworCWludCBpOworCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkJaWYgKHBpLT5saW5rX2ZhdWx0KQorCQkJdDNfbGlua19mYXVsdChhZGFwdGVyLCBpKTsKKwl9Cit9CisKK3ZvaWQgdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwb3J0X2lkXTsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7CisJcGktPmxpbmtfZmF1bHQgPSAxOworCXF1ZXVlX3dvcmsoY3hnYjNfd3EsICZhZGFwdGVyLT5saW5rX2ZhdWx0X2hhbmRsZXJfdGFzayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7Cit9CisKIHN0YXRpYyBpbnQgdDNfYWRhcHRlcl9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHJlc2V0KQogewogCWludCBpLCByZXQgPSAwOwogCisJaWYgKGlzX29mZmxvYWQoYWRhcHRlcikgJiYKKwkgICAgdGVzdF9iaXQoT0ZGTE9BRF9ERVZNQVBfQklULCAmYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwKSkgeworCQljeGdiM19lcnJfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1NUQVRVU19ET1dOLCAwKTsKKwkJb2ZmbG9hZF9jbG9zZSgmYWRhcHRlci0+dGRldik7CisJfQorCiAJLyogU3RvcCBhbGwgcG9ydHMgKi8KIAlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPnBvcnRbaV07CkBAIC0yNTg1LDEwICsyNzI0LDYgQEAKIAkJCWN4Z2JfY2xvc2UobmV0ZGV2KTsKIAl9CiAKLQlpZiAoaXNfb2ZmbG9hZChhZGFwdGVyKSAmJgotCSAgICB0ZXN0X2JpdChPRkZMT0FEX0RFVk1BUF9CSVQsICZhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApKQotCQlvZmZsb2FkX2Nsb3NlKCZhZGFwdGVyLT50ZGV2KTsKLQogCS8qIFN0b3AgU0dFIHRpbWVycyAqLwogCXQzX3N0b3Bfc2dlX3RpbWVycyhhZGFwdGVyKTsKIApAQCAtMjY0MCw2ICsyNzc1LDkgQEAKIAkJCX0KIAkJfQogCX0KKworCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpICYmICFvZmxkX2Rpc2FibGUpCisJCWN4Z2IzX2Vycl9ub3RpZnkoJmFkYXB0ZXItPnRkZXYsIE9GRkxPQURfU1RBVFVTX1VQLCAwKTsKIH0KIAogLyoKQEAgLTI2ODQsNyArMjgyMiw2IEBACiAJCUNIX0FMRVJUKGFkYXB0ZXIsICJGVyBzdGF0dXM6IDB4JXgsIDB4JXgsIDB4JXgsIDB4JXhcbiIsCiAJCQkgZndfc3RhdHVzWzBdLCBmd19zdGF0dXNbMV0sCiAJCQkgZndfc3RhdHVzWzJdLCBmd19zdGF0dXNbM10pOwotCiB9CiAKIC8qKgpAQCAtMjczNCw2ICsyODcxLDkgQEAKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCUNIX0FMRVJUKGFkYXB0ZXIsICJhZGFwdGVyIHJlY292ZXJpbmcsIFBFWCBFUlIgMHgleFxuIiwKKwkJIHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUENJRV9QRVhfRVJSKSk7CisKIAl0M19yZXN1bWVfcG9ydHMoYWRhcHRlcik7CiB9CiAKQEAgLTI3NTMsNyArMjg5Myw3IEBACiAJaW50IGksIGogPSAwOwogCWludCBudW1fY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwogCWludCBod3BvcnRzID0gYWRhcC0+cGFyYW1zLm5wb3J0czsKLQlpbnQgbnFzZXRzID0gU0dFX1FTRVRTOworCWludCBucXNldHMgPSBhZGFwLT5tc2l4X252ZWN0b3JzIC0gMTsKIAogCWlmIChhZGFwLT5wYXJhbXMucmV2ID4gMCAmJiBhZGFwLT5mbGFncyAmIFVTSU5HX01TSVgpIHsKIAkJaWYgKGh3cG9ydHMgPT0gMiAmJgpAQCAtMjc4MiwxOCArMjkyMiwyNSBAQAogc3RhdGljIGludCBfX2RldmluaXQgY3hnYl9lbmFibGVfbXNpeChzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBlbnRyaWVzW1NHRV9RU0VUUyArIDFdOworCWludCB2ZWN0b3JzOwogCWludCBpLCBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbnRyaWVzKTsgKytpKQorCXZlY3RvcnMgPSBBUlJBWV9TSVpFKGVudHJpZXMpOworCWZvciAoaSA9IDA7IGkgPCB2ZWN0b3JzOyArK2kpCiAJCWVudHJpZXNbaV0uZW50cnkgPSBpOwogCi0JZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXAtPnBkZXYsIGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcykpOworCXdoaWxlICgoZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXAtPnBkZXYsIGVudHJpZXMsIHZlY3RvcnMpKSA+IDApCisJCXZlY3RvcnMgPSBlcnI7CisKKwlpZiAoIWVyciAmJiB2ZWN0b3JzIDwgKGFkYXAtPnBhcmFtcy5ucG9ydHMgKyAxKSkKKwkJZXJyID0gLTE7CisKIAlpZiAoIWVycikgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbnRyaWVzKTsgKytpKQorCQlmb3IgKGkgPSAwOyBpIDwgdmVjdG9yczsgKytpKQogCQkJYWRhcC0+bXNpeF9pbmZvW2ldLnZlYyA9IGVudHJpZXNbaV0udmVjdG9yOwotCX0gZWxzZSBpZiAoZXJyID4gMCkKLQkJZGV2X2luZm8oJmFkYXAtPnBkZXYtPmRldiwKLQkJICAgICAgICJvbmx5ICVkIE1TSS1YIHZlY3RvcnMgbGVmdCwgbm90IHVzaW5nIE1TSS1YXG4iLCBlcnIpOworCQlhZGFwLT5tc2l4X252ZWN0b3JzID0gdmVjdG9yczsKKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODU5LDcgKzMwMDYsNyBAQAogCXN0YXRpYyBpbnQgdmVyc2lvbl9wcmludGVkOwogCiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0LCBtbWlvX2xlbjsKKwlyZXNvdXJjZV9zaXplX3QgbW1pb19zdGFydCwgbW1pb19sZW47CiAJY29uc3Qgc3RydWN0IGFkYXB0ZXJfaW5mbyAqYWk7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOwogCXN0cnVjdCBwb3J0X2luZm8gKnBpOwpAQCAtMjkzNSwxMCArMzA4MiwxMSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmFkYXB0ZXJfbGlzdCk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5leHRfaW50cl9oYW5kbGVyX3Rhc2ssIGV4dF9pbnRyX3Rhc2spOworCUlOSVRfV09SSygmYWRhcHRlci0+bGlua19mYXVsdF9oYW5kbGVyX3Rhc2ssIGxpbmtfZmF1bHRfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5mYXRhbF9lcnJvcl9oYW5kbGVyX3Rhc2ssIGZhdGFsX2Vycm9yX3Rhc2spOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5hZGFwX2NoZWNrX3Rhc2ssIHQzX2FkYXBfY2hlY2tfdGFzayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWktPm5wb3J0czsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGFpLT5ucG9ydHMwICsgYWktPm5wb3J0czE7ICsraSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCiAJCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgcG9ydF9pbmZvKSwgU0dFX1FTRVRTKTsKQEAgLTI5NjEsNyArMzEwOSw3IEBACiAJCW5ldGRldi0+bWVtX2VuZCA9IG1taW9fc3RhcnQgKyBtbWlvX2xlbiAtIDE7CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAkJaWYgKHBjaV91c2luZ19kYWMpCiAJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIApAQCAtMzAyOCw3ICszMTc2LDcgQEAKIAogb3V0X2ZyZWVfZGV2OgogCWlvdW5tYXAoYWRhcHRlci0+cmVncyk7Ci0JZm9yIChpID0gYWktPm5wb3J0cyAtIDE7IGkgPj0gMDsgLS1pKQorCWZvciAoaSA9IGFpLT5ucG9ydHMwICsgYWktPm5wb3J0czEgLSAxOyBpID49IDA7IC0taSkKIAkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCiAJCQlmcmVlX25ldGRldihhZGFwdGVyLT5wb3J0W2ldKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCmluZGV4IDJkN2Y2OWEuLjYyMGQ4MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKQEAgLTE1Myw2ICsxNTMsMTggQEAKIAltdXRleF91bmxvY2soJmN4Z2IzX2RiX2xvY2spOwogfQogCit2b2lkIGN4Z2IzX2Vycl9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKQoreworCXN0cnVjdCBjeGdiM19jbGllbnQgKmNsaWVudDsKKworCW11dGV4X2xvY2soJmN4Z2IzX2RiX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmY2xpZW50X2xpc3QsIGNsaWVudF9saXN0KSB7CisJCWlmIChjbGllbnQtPmVycl9oYW5kbGVyKQorCQkJY2xpZW50LT5lcnJfaGFuZGxlcih0ZGV2LCBzdGF0dXMsIGVycm9yKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjeGdiM19kYl9sb2NrKTsKK30KKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfaWZmX2Zyb21fbWFjKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWMsCiAJCQkJCSAgIHVuc2lnbmVkIGludCB2bGFuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCmluZGV4IGQ1MTRlNTAuLmE4ZThlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKQEAgLTY0LDEwICs2NCwxNiBAQAogdm9pZCBjeGdiM191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQpOwogdm9pZCBjeGdiM19hZGRfY2xpZW50cyhzdHJ1Y3QgdDNjZGV2ICp0ZGV2KTsKIHZvaWQgY3hnYjNfcmVtb3ZlX2NsaWVudHMoc3RydWN0IHQzY2RldiAqdGRldik7Cit2b2lkIGN4Z2IzX2Vycl9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKTsKIAogdHlwZWRlZiBpbnQgKCpjeGdiM19jcGxfaGFuZGxlcl9mdW5jKShzdHJ1Y3QgdDNjZGV2ICpkZXYsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KTsKIAorZW51bSB7CisJT0ZGTE9BRF9TVEFUVVNfVVAsCisJT0ZGTE9BRF9TVEFUVVNfRE9XTgorfTsKKwogc3RydWN0IGN4Z2IzX2NsaWVudCB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICgqYWRkKSAoc3RydWN0IHQzY2RldiAqKTsKQEAgLTc2LDYgKzgyLDcgQEAKIAlpbnQgKCpyZWRpcmVjdCkodm9pZCAqY3R4LCBzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQsCiAJCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXcsIHN0cnVjdCBsMnRfZW50cnkgKmwydCk7CiAJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKKwl2b2lkICgqZXJyX2hhbmRsZXIpKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcik7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCmluZGV4IGEwMzVkNWMyLi4xYjUzMjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCkBAIC0xNzAsNiArMTcwLDEwIEBACiAKICNkZWZpbmUgU19SU1BRMERJU0FCTEVEICAgIDgKIAorI2RlZmluZSBTX0ZMMEVNUFRZICAgIDE2CisjZGVmaW5lIFZfRkwwRU1QVFkoeCkgKCh4KSA8PCBTX0ZMMEVNUFRZKQorI2RlZmluZSBGX0ZMMEVNUFRZICAgIFZfRkwwRU1QVFkoMVUpCisKICNkZWZpbmUgQV9TR19FR1JfUkNRX0RSQl9USFJTSCAweDU0CiAKICNkZWZpbmUgU19ISVJDUURSQlRIUlNIICAgIDE2CkBAIC0yNTgsNiArMjYyLDEwIEBACiAjZGVmaW5lIFZfUlNQUUNSRURJVE9WRVJGT1coeCkgKCh4KSA8PCBTX1JTUFFDUkVESVRPVkVSRk9XKQogI2RlZmluZSBGX1JTUFFDUkVESVRPVkVSRk9XICAgIFZfUlNQUUNSRURJVE9WRVJGT1coMVUpCiAKKyNkZWZpbmUgU19GTEVNUFRZICAgIDEKKyNkZWZpbmUgVl9GTEVNUFRZKHgpICgoeCkgPDwgU19GTEVNUFRZKQorI2RlZmluZSBGX0ZMRU1QVFkgICAgVl9GTEVNUFRZKDFVKQorCiAjZGVmaW5lIEFfU0dfSU5UX0VOQUJMRSAweDYwCiAKICNkZWZpbmUgQV9TR19DTURRX0NSRURJVF9USCAweDY0CkBAIC0yMjA3LDYgKzIyMTUsMTUgQEAKIAogI2RlZmluZSBBX1hHTV9SWF9FWEFDVF9NQVRDSF9MT1dfOCAweDg1NAogCisjZGVmaW5lIEFfWEdNX0lOVF9TVEFUVVMgMHg4NmMKKworI2RlZmluZSBTX0xJTktGQVVMVENIQU5HRSAgICA5CisjZGVmaW5lIFZfTElOS0ZBVUxUQ0hBTkdFKHgpICgoeCkgPDwgU19MSU5LRkFVTFRDSEFOR0UpCisjZGVmaW5lIEZfTElOS0ZBVUxUQ0hBTkdFICAgIFZfTElOS0ZBVUxUQ0hBTkdFKDFVKQorCisjZGVmaW5lIEFfWEdNX1hHTV9JTlRfRU5BQkxFIDB4ODc0CisjZGVmaW5lIEFfWEdNX1hHTV9JTlRfRElTQUJMRSAweDg3OAorCiAjZGVmaW5lIEFfWEdNX1NUQVRfQ1RSTCAweDg4MAogCiAjZGVmaW5lIFNfQ0xSU1RBVFMgICAgMgpAQCAtMjQwNSw2ICsyNDIyLDEwIEBACiAjZGVmaW5lIFZfWEFVSVBDU0FMSUdOQ0hBTkdFKHgpICgoeCkgPDwgU19YQVVJUENTQUxJR05DSEFOR0UpCiAjZGVmaW5lIEZfWEFVSVBDU0FMSUdOQ0hBTkdFICAgIFZfWEFVSVBDU0FMSUdOQ0hBTkdFKDFVKQogCisjZGVmaW5lIFNfWEdNX0lOVCAgICAwCisjZGVmaW5lIFZfWEdNX0lOVCh4KSAoKHgpIDw8IFNfWEdNX0lOVCkKKyNkZWZpbmUgRl9YR01fSU5UICAgIFZfWEdNX0lOVCgxVSkKKwogI2RlZmluZSBBX1hHTV9JTlRfQ0FVU0UgMHg4ZDgKIAogI2RlZmluZSBBX1hHTV9YQVVJX0FDVF9DVFJMIDB4OGRjCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IGQzMTc5MWYuLjI2ZDM1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIFNHRV9SWF9DT1BZX1RIUkVTICAyNTYKICNkZWZpbmUgU0dFX1JYX1BVTExfTEVOICAgIDEyOAogCisjZGVmaW5lIFNHRV9QR19SU1ZEIFNNUF9DQUNIRV9CWVRFUwogLyoKICAqIFBhZ2UgY2h1bmsgc2l6ZSBmb3IgRkwwIGJ1ZmZlcnMgaWYgRkwwIGlzIHRvIGJlIHBvcHVsYXRlZCB3aXRoIHBhZ2UgY2h1bmtzLgogICogSXQgbXVzdCBiZSBhIGRpdmlzb3Igb2YgUEFHRV9TSVpFLiAgSWYgc2V0IHRvIDAgRkwwIHdpbGwgdXNlIHNrX2J1ZmZzCkBAIC01NywxNiArNTgsMjUgQEAKICAqLwogI2RlZmluZSBGTDBfUEdfQ0hVTktfU0laRSAgMjA0OAogI2RlZmluZSBGTDBfUEdfT1JERVIgMAorI2RlZmluZSBGTDBfUEdfQUxMT0NfU0laRSAoUEFHRV9TSVpFIDw8IEZMMF9QR19PUkRFUikKICNkZWZpbmUgRkwxX1BHX0NIVU5LX1NJWkUgKFBBR0VfU0laRSA+IDgxOTIgPyAxNjM4NCA6IDgxOTIpCiAjZGVmaW5lIEZMMV9QR19PUkRFUiAoUEFHRV9TSVpFID4gODE5MiA/IDAgOiAxKQorI2RlZmluZSBGTDFfUEdfQUxMT0NfU0laRSAoUEFHRV9TSVpFIDw8IEZMMV9QR19PUkRFUikKIAogI2RlZmluZSBTR0VfUlhfRFJPUF9USFJFUyAxNgorI2RlZmluZSBSWF9SRUNMQUlNX1BFUklPRCAoSFovNCkKIAogLyoKKyAqIE1heCBudW1iZXIgb2YgUnggYnVmZmVycyB3ZSByZXBsZW5pc2ggYXQgYSB0aW1lLgorICovCisjZGVmaW5lIE1BWF9SWF9SRUZJTEwgMTZVCisvKgogICogUGVyaW9kIG9mIHRoZSBUeCBidWZmZXIgcmVjbGFpbSB0aW1lci4gIFRoaXMgdGltZXIgZG9lcyBub3QgbmVlZCB0byBydW4KICAqIGZyZXF1ZW50bHkgYXMgVHggYnVmZmVycyBhcmUgdXN1YWxseSByZWNsYWltZWQgYnkgbmV3IFR4IHBhY2tldHMuCiAgKi8KICNkZWZpbmUgVFhfUkVDTEFJTV9QRVJJT0QgKEhaIC8gNCkKKyNkZWZpbmUgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyA2NFUKKyNkZWZpbmUgVFhfUkVDTEFJTV9DSFVOSyAxNlUKIAogLyogV1Igc2l6ZSBpbiBieXRlcyAqLwogI2RlZmluZSBXUl9MRU4gKFdSX0ZMSVRTICogOCkKQEAgLTMwNCwyMSArMzE0LDI1IEBACiAgKglyZWNsYWltX2NvbXBsZXRlZF90eCAtIHJlY2xhaW1zIGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycwogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCiAgKglAcTogdGhlIFR4IHF1ZXVlIHRvIHJlY2xhaW0gY29tcGxldGVkIGRlc2NyaXB0b3JzIGZyb20KKyAqCUBjaHVuazogbWF4aW11bSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gcmVjbGFpbQogICoKICAqCVJlY2xhaW1zIFR4IGRlc2NyaXB0b3JzIHRoYXQgdGhlIFNHRSBoYXMgaW5kaWNhdGVkIGl0IGhhcyBwcm9jZXNzZWQsCiAgKglhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgYnVmZmVycyBpZiBwb3NzaWJsZS4gIENhbGxlZCB3aXRoIHRoZSBUeAogICoJcXVldWUncyBsb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWNsYWltX2NvbXBsZXRlZF90eChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJc3RydWN0IHNnZV90eHEgKnEpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWNsYWltX2NvbXBsZXRlZF90eChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJCXN0cnVjdCBzZ2VfdHhxICpxLAorCQkJCQkJdW5zaWduZWQgaW50IGNodW5rKQogewogCXVuc2lnbmVkIGludCByZWNsYWltID0gcS0+cHJvY2Vzc2VkIC0gcS0+Y2xlYW5lZDsKIAorCXJlY2xhaW0gPSBtaW4oY2h1bmssIHJlY2xhaW0pOwogCWlmIChyZWNsYWltKSB7CiAJCWZyZWVfdHhfZGVzYyhhZGFwdGVyLCBxLCByZWNsYWltKTsKIAkJcS0+Y2xlYW5lZCArPSByZWNsYWltOwogCQlxLT5pbl91c2UgLT0gcmVjbGFpbTsKIAl9CisJcmV0dXJuIHEtPnByb2Nlc3NlZCAtIHEtPmNsZWFuZWQ7CiB9CiAKIC8qKgpAQCAtMzM0LDYgKzM0OCwyNiBAQAogCXJldHVybiBxLT5pbl91c2UgLSByIDwgKHEtPnNpemUgPj4gMSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFyX3J4X2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBzZ2VfZmwgKnEsCisJCQkgIHN0cnVjdCByeF9zd19kZXNjICpkKQoreworCWlmIChxLT51c2VfcGFnZXMgJiYgZC0+cGdfY2h1bmsucGFnZSkgeworCQkoKmQtPnBnX2NodW5rLnBfY250KS0tOworCQlpZiAoISpkLT5wZ19jaHVuay5wX2NudCkKKwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsCisJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKCZkLT5wZ19jaHVuaywgbWFwcGluZyksCisJCQkJICAgICAgIHEtPmFsbG9jX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJcHV0X3BhZ2UoZC0+cGdfY2h1bmsucGFnZSk7CisJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOworCX0gZWxzZSB7CisJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIoZCwgZG1hX2FkZHIpLAorCQkJCSBxLT5idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJa2ZyZWVfc2tiKGQtPnNrYik7CisJCWQtPnNrYiA9IE5VTEw7CisJfQorfQorCiAvKioKICAqCWZyZWVfcnhfYnVmcyAtIGZyZWUgdGhlIFJ4IGJ1ZmZlcnMgb24gYW4gU0dFIGZyZWUgbGlzdAogICoJQHBkZXY6IHRoZSBQQ0kgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWRhcHRlcgpAQCAtMzQ5LDE2ICszODMsOCBAQAogCXdoaWxlIChxLT5jcmVkaXRzLS0pIHsKIAkJc3RydWN0IHJ4X3N3X2Rlc2MgKmQgPSAmcS0+c2Rlc2NbY2lkeF07CiAKLQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBwY2lfdW5tYXBfYWRkcihkLCBkbWFfYWRkciksCi0JCQkJIHEtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAocS0+dXNlX3BhZ2VzKSB7Ci0JCQlpZiAoZC0+cGdfY2h1bmsucGFnZSkKLQkJCQlwdXRfcGFnZShkLT5wZ19jaHVuay5wYWdlKTsKLQkJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJa2ZyZWVfc2tiKGQtPnNrYik7Ci0JCQlkLT5za2IgPSBOVUxMOwotCQl9CisKKwkJY2xlYXJfcnhfZGVzYyhwZGV2LCBxLCBkKTsKIAkJaWYgKCsrY2lkeCA9PSBxLT5zaXplKQogCQkJY2lkeCA9IDA7CiAJfQpAQCAtNDAxLDE4ICs0MjcsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGxvY19wZ19jaHVuayhzdHJ1Y3Qgc2dlX2ZsICpxLCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2QsIGdmcF90IGdmcCwKK3N0YXRpYyBpbmxpbmUgaW50IGFkZF9vbmVfcnhfY2h1bmsoZG1hX2FkZHJfdCBtYXBwaW5nLCBzdHJ1Y3QgcnhfZGVzYyAqZCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZ2VuKQoreworCWQtPmFkZHJfbG8gPSBjcHVfdG9fYmUzMihtYXBwaW5nKTsKKwlkLT5hZGRyX2hpID0gY3B1X3RvX2JlMzIoKHU2NCkgbWFwcGluZyA+PiAzMik7CisJd21iKCk7CisJZC0+bGVuX2dlbiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjEoZ2VuKSk7CisJZC0+Z2VuMiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjIoZ2VuKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfcGdfY2h1bmsoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZ2VfZmwgKnEsCisJCQkgIHN0cnVjdCByeF9zd19kZXNjICpzZCwgZ2ZwX3QgZ2ZwLAogCQkJICB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJaWYgKCFxLT5wZ19jaHVuay5wYWdlKSB7CisJCWRtYV9hZGRyX3QgbWFwcGluZzsKKwogCQlxLT5wZ19jaHVuay5wYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CiAJCWlmICh1bmxpa2VseSghcS0+cGdfY2h1bmsucGFnZSkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcS0+cGdfY2h1bmsudmEgPSBwYWdlX2FkZHJlc3MocS0+cGdfY2h1bmsucGFnZSk7CisJCXEtPnBnX2NodW5rLnBfY250ID0gcS0+cGdfY2h1bmsudmEgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSAtCisJCQkJICAgIFNHRV9QR19SU1ZEOwogCQlxLT5wZ19jaHVuay5vZmZzZXQgPSAwOworCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIHEtPnBnX2NodW5rLnBhZ2UsCisJCQkJICAgICAgIDAsIHEtPmFsbG9jX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXBjaV91bm1hcF9hZGRyX3NldCgmcS0+cGdfY2h1bmssIG1hcHBpbmcsIG1hcHBpbmcpOwogCX0KIAlzZC0+cGdfY2h1bmsgPSBxLT5wZ19jaHVuazsKIAorCXByZWZldGNoKHNkLT5wZ19jaHVuay5wX2NudCk7CisKIAlxLT5wZ19jaHVuay5vZmZzZXQgKz0gcS0+YnVmX3NpemU7CiAJaWYgKHEtPnBnX2NodW5rLm9mZnNldCA9PSAoUEFHRV9TSVpFIDw8IG9yZGVyKSkKIAkJcS0+cGdfY2h1bmsucGFnZSA9IE5VTEw7CkBAIC00MjAsOSArNDY3LDIzIEBACiAJCXEtPnBnX2NodW5rLnZhICs9IHEtPmJ1Zl9zaXplOwogCQlnZXRfcGFnZShxLT5wZ19jaHVuay5wYWdlKTsKIAl9CisKKwlpZiAoc2QtPnBnX2NodW5rLm9mZnNldCA9PSAwKQorCQkqc2QtPnBnX2NodW5rLnBfY250ID0gMTsKKwllbHNlCisJCSpzZC0+cGdfY2h1bmsucF9jbnQgKz0gMTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmluZ19mbF9kYihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSkKK3sKKwlpZiAocS0+cGVuZF9jcmVkID49IHEtPmNyZWRpdHMgLyA0KSB7CisJCXEtPnBlbmRfY3JlZCA9IDA7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisJfQorfQorCiAvKioKICAqCXJlZmlsbF9mbCAtIHJlZmlsbCBhbiBTR0UgZnJlZS1idWZmZXIgbGlzdAogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCkBAIC00MzYsMzggKzQ5Nyw0MyBAQAogICovCiBzdGF0aWMgaW50IHJlZmlsbF9mbChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSwgaW50IG4sIGdmcF90IGdmcCkKIHsKLQl2b2lkICpidWZfc3RhcnQ7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJnEtPnNkZXNjW3EtPnBpZHhdOwogCXN0cnVjdCByeF9kZXNjICpkID0gJnEtPmRlc2NbcS0+cGlkeF07CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAogCXdoaWxlIChuLS0pIHsKKwkJZG1hX2FkZHJfdCBtYXBwaW5nOwogCQlpbnQgZXJyOwogCiAJCWlmIChxLT51c2VfcGFnZXMpIHsKLQkJCWlmICh1bmxpa2VseShhbGxvY19wZ19jaHVuayhxLCBzZCwgZ2ZwLCBxLT5vcmRlcikpKSB7CisJCQlpZiAodW5saWtlbHkoYWxsb2NfcGdfY2h1bmsoYWRhcCwgcSwgc2QsIGdmcCwKKwkJCQkJCSAgICBxLT5vcmRlcikpKSB7CiBub21lbToJCQkJcS0+YWxsb2NfZmFpbGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlidWZfc3RhcnQgPSBzZC0+cGdfY2h1bmsudmE7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKHEtPmJ1Zl9zaXplLCBnZnApOworCQkJbWFwcGluZyA9IHBjaV91bm1hcF9hZGRyKCZzZC0+cGdfY2h1bmssIG1hcHBpbmcpICsKKwkJCQkJCSBzZC0+cGdfY2h1bmsub2Zmc2V0OworCQkJcGNpX3VubWFwX2FkZHJfc2V0KHNkLCBkbWFfYWRkciwgbWFwcGluZyk7CiAKKwkJCWFkZF9vbmVfcnhfY2h1bmsobWFwcGluZywgZCwgcS0+Z2VuKTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShhZGFwLT5wZGV2LCBtYXBwaW5nLAorCQkJCQkJcS0+YnVmX3NpemUgLSBTR0VfUEdfUlNWRCwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0gZWxzZSB7CisJCQl2b2lkICpidWZfc3RhcnQ7CisKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IocS0+YnVmX3NpemUsIGdmcCk7CiAJCQlpZiAoIXNrYikKIAkJCQlnb3RvIG5vbWVtOwogCiAJCQlzZC0+c2tiID0gc2tiOwogCQkJYnVmX3N0YXJ0ID0gc2tiLT5kYXRhOwotCQl9Ci0KLQkJZXJyID0gYWRkX29uZV9yeF9idWYoYnVmX3N0YXJ0LCBxLT5idWZfc2l6ZSwgZCwgc2QsIHEtPmdlbiwKLQkJCQkgICAgIGFkYXAtPnBkZXYpOwotCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJaWYgKCFxLT51c2VfcGFnZXMpIHsKLQkJCQlrZnJlZV9za2Ioc2QtPnNrYik7Ci0JCQkJc2QtPnNrYiA9IE5VTEw7CisJCQllcnIgPSBhZGRfb25lX3J4X2J1ZihidWZfc3RhcnQsIHEtPmJ1Zl9zaXplLCBkLCBzZCwKKwkJCQkJICAgICBxLT5nZW4sIGFkYXAtPnBkZXYpOworCQkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCQljbGVhcl9yeF9kZXNjKGFkYXAtPnBkZXYsIHEsIHNkKTsKKwkJCQlicmVhazsKIAkJCX0KLQkJCWJyZWFrOwogCQl9CiAKIAkJZCsrOwpAQCAtNDc4LDE5ICs1NDQsMTkgQEAKIAkJCXNkID0gcS0+c2Rlc2M7CiAJCQlkID0gcS0+ZGVzYzsKIAkJfQotCQlxLT5jcmVkaXRzKys7CiAJCWNvdW50Kys7CiAJfQotCXdtYigpOwotCWlmIChsaWtlbHkoY291bnQpKQotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOworCisJcS0+Y3JlZGl0cyArPSBjb3VudDsKKwlxLT5wZW5kX2NyZWQgKz0gY291bnQ7CisJcmluZ19mbF9kYihhZGFwLCBxKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmVmaWxsX2ZsKHN0cnVjdCBhZGFwdGVyICphZGFwLCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKIHsKLQlyZWZpbGxfZmwoYWRhcCwgZmwsIG1pbigxNlUsIGZsLT5zaXplIC0gZmwtPmNyZWRpdHMpLAorCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKE1BWF9SWF9SRUZJTEwsIGZsLT5zaXplIC0gZmwtPmNyZWRpdHMpLAogCQkgIEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QKTsKIH0KIApAQCAtNTE1LDEzICs1ODEsMTUgQEAKIAl3bWIoKTsKIAl0by0+bGVuX2dlbiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjEocS0+Z2VuKSk7CiAJdG8tPmdlbjIgPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4yKHEtPmdlbikpOwotCXEtPmNyZWRpdHMrKzsKIAogCWlmICgrK3EtPnBpZHggPT0gcS0+c2l6ZSkgewogCQlxLT5waWR4ID0gMDsKIAkJcS0+Z2VuIF49IDE7CiAJfQotCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisKKwlxLT5jcmVkaXRzKys7CisJcS0+cGVuZF9jcmVkKys7CisJcmluZ19mbF9kYihhZGFwLCBxKTsKIH0KIAogLyoqCkBAIC01ODUsOCArNjUzLDggQEAKIAltZW1zZXQocS0+dHhxLCAwLCBzaXplb2Yoc3RydWN0IHNnZV90eHEpICogU0dFX1RYUV9QRVJfU0VUKTsKIAlxLT50eHFfc3RvcHBlZCA9IDA7CiAJcS0+dHhfcmVjbGFpbV90aW1lci5mdW5jdGlvbiA9IE5VTEw7IC8qIGZvciB0M19zdG9wX3NnZV90aW1lcnMoKSAqLwotCWtmcmVlKHEtPmxyb19mcmFnX3RibCk7Ci0JcS0+bHJvX25mcmFncyA9IHEtPmxyb19mcmFnX2xlbiA9IDA7CisJcS0+cnhfcmVjbGFpbV90aW1lci5mdW5jdGlvbiA9IE5VTEw7CisJcS0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzID0gcS0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKIApAQCAtNzMzLDcgKzgwMSw5IEBACiAJCXJldHVybiBza2I7CiAJfQogCi0JaWYgKHVubGlrZWx5KGZsLT5jcmVkaXRzIDwgZHJvcF90aHJlcykpCisJaWYgKHVubGlrZWx5KGZsLT5jcmVkaXRzIDwgZHJvcF90aHJlcykgJiYKKwkgICAgcmVmaWxsX2ZsKGFkYXAsIGZsLCBtaW4oTUFYX1JYX1JFRklMTCwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyAtIDEpLAorCQkgICAgICBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCkgPT0gMCkKIAkJZ290byByZWN5Y2xlOwogCiB1c2Vfb3JpZ19idWY6CkBAIC03NzAsMTkgKzg0MCwxOSBAQAogCXN0cnVjdCBza19idWZmICpuZXdza2IsICpza2I7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJmZsLT5zZGVzY1tmbC0+Y2lkeF07CiAKLQluZXdza2IgPSBza2IgPSBxLT5wZ19za2I7CisJZG1hX2FkZHJfdCBkbWFfYWRkciA9IHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkcik7CiAKKwluZXdza2IgPSBza2IgPSBxLT5wZ19za2I7CiAJaWYgKCFza2IgJiYgKGxlbiA8PSBTR0VfUlhfQ09QWV9USFJFUykpIHsKIAkJbmV3c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChsaWtlbHkobmV3c2tiICE9IE5VTEwpKSB7CiAJCQlfX3NrYl9wdXQobmV3c2tiLCBsZW4pOwotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGFkYXAtPnBkZXYsCi0JCQkJCSAgICBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLCBsZW4sCisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcC0+cGRldiwgZG1hX2FkZHIsIGxlbiwKIAkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQltZW1jcHkobmV3c2tiLT5kYXRhLCBzZC0+cGdfY2h1bmsudmEsIGxlbik7Ci0JCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYWRhcC0+cGRldiwKLQkJCQkJICAgIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksIGxlbiwKLQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYWRhcC0+cGRldiwgZG1hX2FkZHIsCisJCQkJCQkgICAgICAgbGVuLAorCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0gZWxzZSBpZiAoIWRyb3BfdGhyZXMpCiAJCQlyZXR1cm4gTlVMTDsKIHJlY3ljbGU6CkBAIC03OTUsMTYgKzg2NSwyNSBAQAogCWlmICh1bmxpa2VseShxLT5yeF9yZWN5Y2xlX2J1ZiB8fCAoIXNrYiAmJiBmbC0+Y3JlZGl0cyA8PSBkcm9wX3RocmVzKSkpCiAJCWdvdG8gcmVjeWNsZTsKIAorCXByZWZldGNoKHNkLT5wZ19jaHVuay5wX2NudCk7CisKIAlpZiAoIXNrYikKIAkJbmV3c2tiID0gYWxsb2Nfc2tiKFNHRV9SWF9QVUxMX0xFTiwgR0ZQX0FUT01JQyk7CisKIAlpZiAodW5saWtlbHkoIW5ld3NrYikpIHsKIAkJaWYgKCFkcm9wX3RocmVzKQogCQkJcmV0dXJuIE5VTEw7CiAJCWdvdG8gcmVjeWNsZTsKIAl9CiAKLQlwY2lfdW5tYXBfc2luZ2xlKGFkYXAtPnBkZXYsIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksCi0JCQkgZmwtPmJ1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShhZGFwLT5wZGV2LCBkbWFfYWRkciwgbGVuLAorCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCSgqc2QtPnBnX2NodW5rLnBfY250KS0tOworCWlmICghKnNkLT5wZ19jaHVuay5wX2NudCkKKwkJcGNpX3VubWFwX3BhZ2UoYWRhcC0+cGRldiwKKwkJCSAgICAgICBwY2lfdW5tYXBfYWRkcigmc2QtPnBnX2NodW5rLCBtYXBwaW5nKSwKKwkJCSAgICAgICBmbC0+YWxsb2Nfc2l6ZSwKKwkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCWlmICghc2tiKSB7CiAJCV9fc2tiX3B1dChuZXdza2IsIFNHRV9SWF9QVUxMX0xFTik7CiAJCW1lbWNweShuZXdza2ItPmRhdGEsIHNkLT5wZ19jaHVuay52YSwgU0dFX1JYX1BVTExfTEVOKTsKQEAgLTgxMywxNCArODkyLDE1IEBACiAJCQkJICAgbGVuIC0gU0dFX1JYX1BVTExfTEVOKTsKIAkJbmV3c2tiLT5sZW4gPSBsZW47CiAJCW5ld3NrYi0+ZGF0YV9sZW4gPSBsZW4gLSBTR0VfUlhfUFVMTF9MRU47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbmV3c2tiLT5kYXRhX2xlbjsKIAl9IGVsc2UgewogCQlza2JfZmlsbF9wYWdlX2Rlc2MobmV3c2tiLCBza2Jfc2hpbmZvKG5ld3NrYiktPm5yX2ZyYWdzLAogCQkJCSAgIHNkLT5wZ19jaHVuay5wYWdlLAogCQkJCSAgIHNkLT5wZ19jaHVuay5vZmZzZXQsIGxlbik7CiAJCW5ld3NrYi0+bGVuICs9IGxlbjsKIAkJbmV3c2tiLT5kYXRhX2xlbiArPSBsZW47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbGVuOwogCX0KLQluZXdza2ItPnRydWVzaXplICs9IG5ld3NrYi0+ZGF0YV9sZW47CiAKIAlmbC0+Y3JlZGl0cy0tOwogCS8qCkBAIC0xMDYzLDcgKzExNDMsNyBAQAogCXN0cnVjdCB0eF9kZXNjICpkID0gJnEtPmRlc2NbcGlkeF07CiAJc3RydWN0IGNwbF90eF9wa3QgKmNwbCA9IChzdHJ1Y3QgY3BsX3R4X3BrdCAqKWQ7CiAKLQljcGwtPmxlbiA9IGh0b25sKHNrYi0+bGVuIHwgMHg4MDAwMDAwMCk7CisJY3BsLT5sZW4gPSBodG9ubChza2ItPmxlbik7CiAJY250cmwgPSBWX1RYUEtUX0lOVEYocGktPnBvcnRfaWQpOwogCiAJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSAmJiBwaS0+dmxhbl9ncnApCkBAIC0xMTYxLDcgKzEyNDEsNyBAQAogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxaWR4KTsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0JcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CisJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAljcmVkaXRzID0gcS0+c2l6ZSAtIHEtPmluX3VzZTsKIAluZGVzYyA9IGNhbGNfdHhfZGVzY3Moc2tiKTsKQEAgLTE1NzAsNyArMTY1MCw3IEBACiAJdW5zaWduZWQgaW50IG5kZXNjID0gY2FsY190eF9kZXNjc19vZmxkKHNrYiksIHBpZHgsIGdlbjsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0gICAgICBhZ2FpbjpyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxKTsKK2FnYWluOglyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxLCBUWF9SRUNMQUlNX0NIVU5LKTsKIAogCXJldCA9IGNoZWNrX2Rlc2NfYXZhaWwoYWRhcCwgcSwgc2tiLCBuZGVzYywgVFhRX09GTEQpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CkBAIC0xNjEyLDcgKzE2OTIsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CiAKIAlzcGluX2xvY2soJnEtPmxvY2spOwotICAgICAgYWdhaW46cmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CithZ2FpbjoJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZxLT5zZW5kcSkpICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IGdlbiwgcGlkeDsKQEAgLTE5MzIsMTIgKzIwMTIsMTMgQEAKIAlza2JfcHVsbChza2IsIHNpemVvZigqcCkgKyBwYWQpOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXAtPnBvcnRbcC0+aWZmXSk7CiAJcGkgPSBuZXRkZXZfcHJpdihza2ItPmRldik7Ci0JaWYgKChwaS0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU0pICYmIHAtPmNzdW1fdmFsaWQgJiYgcC0+Y3N1bSA9PSBodG9ucygweGZmZmYpICYmCi0JICAgICFwLT5mcmFnbWVudCkgeworCWlmICgocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSAmJiBwLT5jc3VtX3ZhbGlkICYmCisJICAgIHAtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSAmJiAhcC0+ZnJhZ21lbnQpIHsKIAkJcXMtPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1JYX0NTVU1fR09PRF0rKzsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9IGVsc2UKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxcyAtICZhZGFwLT5zZ2UucXNbMF0pOwogCiAJaWYgKHVubGlrZWx5KHAtPnZsYW5fdmFsaWQpKSB7CiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CkBAIC0xOTQ1LDEwICsyMDI2LDggQEAKIAkJcXMtPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1ZMQU5FWF0rKzsKIAkJaWYgKGxpa2VseShncnApKQogCQkJaWYgKGxybykKLQkJCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKCZxcy0+bHJvX21nciwgc2tiLAotCQkJCQkJCSAgICAgZ3JwLAotCQkJCQkJCSAgICAgbnRvaHMocC0+dmxhbiksCi0JCQkJCQkJICAgICBwKTsKKwkJCQl2bGFuX2dyb19yZWNlaXZlKCZxcy0+bmFwaSwgZ3JwLAorCQkJCQkJIG50b2hzKHAtPnZsYW4pLCBza2IpOwogCQkJZWxzZSB7CiAJCQkJaWYgKHVubGlrZWx5KHBpLT5pc2NzaV9pcHY0YWRkciAmJgogCQkJCSAgICBpc19hcnAoc2tiKSkpIHsKQEAgLTE5NjUsNyArMjA0NCw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0gZWxzZSBpZiAocnEtPnBvbGxpbmcpIHsKIAkJaWYgKGxybykKLQkJCWxyb19yZWNlaXZlX3NrYigmcXMtPmxyb19tZ3IsIHNrYiwgcCk7CisJCQluYXBpX2dyb19yZWNlaXZlKCZxcy0+bmFwaSwgc2tiKTsKIAkJZWxzZSB7CiAJCQlpZiAodW5saWtlbHkocGktPmlzY3NpX2lwdjRhZGRyICYmIGlzX2FycChza2IpKSkKIAkJCQljeGdiM19hcnBfcHJvY2VzcyhhZGFwLCBza2IpOwpAQCAtMTk4MSw1OSArMjA2MCw2IEBACiB9CiAKIC8qKgotICoJbHJvX2ZyYW1lX29rIC0gY2hlY2sgaWYgYW4gaW5ncmVzcyBwYWNrZXQgaXMgZWxpZ2libGUgZm9yIExSTwotICoJQHA6IHRoZSBDUEwgaGVhZGVyIG9mIHRoZSBwYWNrZXQKLSAqCi0gKglSZXR1cm5zIHRydWUgaWYgYSByZWNlaXZlZCBwYWNrZXQgaXMgZWxpZ2libGUgZm9yIExSTy4KLSAqCVRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIHRydWU6Ci0gKgktIHBhY2tldCBpcyBUQ1AvSVAgRXRoZXJuZXQgSUkgKGNoZWNrZWQgZWxzZXdoZXJlKQotICoJLSBub3QgYW4gSVAgZnJhZ21lbnQKLSAqCS0gbm8gSVAgb3B0aW9ucwotICoJLSBUQ1AvSVAgY2hlY2tzdW1zIGFyZSBjb3JyZWN0Ci0gKgktIHRoZSBwYWNrZXQgaXMgZm9yIHRoaXMgaG9zdAotICovCi1zdGF0aWMgaW5saW5lIGludCBscm9fZnJhbWVfb2soY29uc3Qgc3RydWN0IGNwbF9yeF9wa3QgKnApCi17Ci0JY29uc3Qgc3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKShwICsgMSk7Ci0JY29uc3Qgc3RydWN0IGlwaGRyICppaCA9IChzdHJ1Y3QgaXBoZHIgKikoZWggKyAxKTsKLQotCXJldHVybiAoKigodTggKilwICsgMSkgJiAweDkwKSA9PSAweDEwICYmIHAtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSAmJgotCQllaC0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgJiYgaWgtPmlobCA9PSAoc2l6ZW9mKCppaCkgPj4gMik7Ci19Ci0KLXN0YXRpYyBpbnQgdDNfZ2V0X2xyb19oZWFkZXIodm9pZCAqKmVoLCAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsCi0JCQkgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpjcGwgPSBwcml2OwotCi0JaWYgKCFscm9fZnJhbWVfb2soY3BsKSkKLQkJcmV0dXJuIC0xOwotCi0JKmVoID0gKHN0cnVjdCBldGhoZHIgKikoY3BsICsgMSk7Ci0JKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKHN0cnVjdCBldGhoZHIgKikqZWggKyAxKTsKLQkqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopKChzdHJ1Y3QgaXBoZHIgKikqaXBoICsgMSk7Ci0KLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICB2b2lkICoqaXBoLCB2b2lkICoqdGNwaCwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgICB2b2lkICpwcml2KQotewotCXZvaWQgKmVoOwotCi0JcmV0dXJuIHQzX2dldF9scm9faGVhZGVyKCZlaCwgaXBoLCB0Y3BoLCBoZHJfZmxhZ3MsIHByaXYpOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqZWgsCi0JCQkgICAgICB2b2lkICoqaXBoLCB2b2lkICoqdGNwaCwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgICB2b2lkICpwcml2KQotewotCXJldHVybiB0M19nZXRfbHJvX2hlYWRlcihlaCwgaXBoLCB0Y3BoLCBoZHJfZmxhZ3MsIHByaXYpOwotfQotCi0vKioKICAqCWxyb19hZGRfcGFnZSAtIGFkZCBhIHBhZ2UgY2h1bmsgdG8gYW4gTFJPIHNlc3Npb24KICAqCUBhZGFwOiB0aGUgYWRhcHRlcgogICoJQHFzOiB0aGUgYXNzb2NpYXRlZCBxdWV1ZSBzZXQKQEAgLTIwNDksOCArMjA3NSw5IEBACiB7CiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkID0gJmZsLT5zZGVzY1tmbC0+Y2lkeF07CiAJc3RydWN0IGNwbF9yeF9wa3QgKmNwbDsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnID0gcXMtPmxyb19mcmFnX3RibDsKLQlpbnQgbnJfZnJhZ3MgPSBxcy0+bHJvX25mcmFncywgZnJhZ19sZW4gPSBxcy0+bHJvX2ZyYWdfbGVuOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnJ4X2ZyYWcgPSBxcy0+bHJvX2ZyYWdfdGJsLmZyYWdzOworCWludCBucl9mcmFncyA9IHFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3M7CisJaW50IGZyYWdfbGVuID0gcXMtPmxyb19mcmFnX3RibC5sZW47CiAJaW50IG9mZnNldCA9IDA7CiAKIAlpZiAoIW5yX2ZyYWdzKSB7CkBAIC0yMDYxLDIxICsyMDg4LDMzIEBACiAJZmwtPmNyZWRpdHMtLTsKIAogCWxlbiAtPSBvZmZzZXQ7Ci0JcGNpX3VubWFwX3NpbmdsZShhZGFwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLAotCQkJIGZsLT5idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcC0+cGRldiwKKwkJCQkgICAgcGNpX3VubWFwX2FkZHIoc2QsIGRtYV9hZGRyKSwKKwkJCQkgICAgZmwtPmJ1Zl9zaXplIC0gU0dFX1BHX1JTVkQsCisJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkoKnNkLT5wZ19jaHVuay5wX2NudCktLTsKKwlpZiAoISpzZC0+cGdfY2h1bmsucF9jbnQpCisJCXBjaV91bm1hcF9wYWdlKGFkYXAtPnBkZXYsCisJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnNkLT5wZ19jaHVuaywgbWFwcGluZyksCisJCQkgICAgICAgZmwtPmFsbG9jX3NpemUsCisJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXByZWZldGNoKHFzLT5scm9fdmEpOwogCiAJcnhfZnJhZyArPSBucl9mcmFnczsKIAlyeF9mcmFnLT5wYWdlID0gc2QtPnBnX2NodW5rLnBhZ2U7CiAJcnhfZnJhZy0+cGFnZV9vZmZzZXQgPSBzZC0+cGdfY2h1bmsub2Zmc2V0ICsgb2Zmc2V0OwogCXJ4X2ZyYWctPnNpemUgPSBsZW47CiAJZnJhZ19sZW4gKz0gbGVuOwotCXFzLT5scm9fbmZyYWdzKys7Ci0JcXMtPmxyb19mcmFnX2xlbiA9IGZyYWdfbGVuOworCXFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3MrKzsKKwlxcy0+bHJvX2ZyYWdfdGJsLmxlbiA9IGZyYWdfbGVuOworCiAKIAlpZiAoIWNvbXBsZXRlKQogCQlyZXR1cm47CiAKLQlxcy0+bHJvX25mcmFncyA9IHFzLT5scm9fZnJhZ19sZW4gPSAwOworCXFzLT5scm9fZnJhZ190YmwuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJY3BsID0gcXMtPmxyb192YTsKIAogCWlmICh1bmxpa2VseShjcGwtPnZsYW5fdmFsaWQpKSB7CkBAIC0yMDg0LDM2ICsyMTIzLDE1IEBACiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CiAKIAkJaWYgKGxpa2VseShncnAgIT0gTlVMTCkpIHsKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9mcmFncygmcXMtPmxyb19tZ3IsCi0JCQkJCQkgICAgICAgcXMtPmxyb19mcmFnX3RibCwKLQkJCQkJCSAgICAgICBmcmFnX2xlbiwgZnJhZ19sZW4sCi0JCQkJCQkgICAgICAgZ3JwLCBudG9ocyhjcGwtPnZsYW4pLAotCQkJCQkJICAgICAgIGNwbCwgMCk7Ci0JCQlyZXR1cm47CisJCQl2bGFuX2dyb19mcmFncygmcXMtPm5hcGksIGdycCwgbnRvaHMoY3BsLT52bGFuKSwKKwkJCQkgICAgICAgJnFzLT5scm9fZnJhZ190YmwpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbHJvX3JlY2VpdmVfZnJhZ3MoJnFzLT5scm9fbWdyLCBxcy0+bHJvX2ZyYWdfdGJsLAotCQkJICBmcmFnX2xlbiwgZnJhZ19sZW4sIGNwbCwgMCk7Ci19CisJbmFwaV9ncm9fZnJhZ3MoJnFzLT5uYXBpLCAmcXMtPmxyb19mcmFnX3RibCk7CiAKLS8qKgotICoJaW5pdF9scm9fbWdyIC0gaW5pdGlhbGl6ZSBhIExSTyBtYW5hZ2VyIG9iamVjdAotICoJQGxyb19tZ3I6IHRoZSBMUk8gbWFuYWdlciBvYmplY3QKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9scm9fbWdyKHN0cnVjdCBzZ2VfcXNldCAqcXMsIHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncikKLXsKLQlscm9fbWdyLT5kZXYgPSBxcy0+bmV0ZGV2OwotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5mcmFnX2FsaWduX3BhZCA9IE5FVF9JUF9BTElHTjsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gVDNfTUFYX0xST19TRVM7Ci0JbHJvX21nci0+bHJvX2FyciA9IHFzLT5scm9fZGVzYzsKLQlscm9fbWdyLT5nZXRfZnJhZ19oZWFkZXIgPSB0M19nZXRfZnJhZ19oZWFkZXI7Ci0JbHJvX21nci0+Z2V0X3NrYl9oZWFkZXIgPSB0M19nZXRfc2tiX2hlYWRlcjsKLQlscm9fbWdyLT5tYXhfYWdnciA9IFQzX01BWF9MUk9fTUFYX1BLVFM7Ci0JaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKLQkJbHJvX21nci0+bWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOworb3V0OgorCXFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKIC8qKgpAQCAtMjI4Miw2ICsyMzAwLDggQEAKIAkJCWlmIChmbC0+dXNlX3BhZ2VzKSB7CiAJCQkJdm9pZCAqYWRkciA9IGZsLT5zZGVzY1tmbC0+Y2lkeF0ucGdfY2h1bmsudmE7CiAKKwkJCQlwcmVmZXRjaCgmcXMtPmxyb19mcmFnX3RibCk7CisKIAkJCQlwcmVmZXRjaChhZGRyKTsKICNpZiBMMV9DQUNIRV9CWVRFUyA8IDEyOAogCQkJCXByZWZldGNoKGFkZHIgKyBMMV9DQUNIRV9CWVRFUyk7CkBAIC0yMzU2LDEwICsyMzc2LDYgQEAKIAl9CiAKIAlkZWxpdmVyX3BhcnRpYWxfYnVuZGxlKCZhZGFwLT50ZGV2LCBxLCBvZmZsb2FkX3NrYnMsIG5nYXRoZXJlZCk7Ci0JbHJvX2ZsdXNoX2FsbCgmcXMtPmxyb19tZ3IpOwotCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fQUdHUl0gPSBxcy0+bHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOwotCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fRkxVU0hFRF0gPSBxcy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9MUk9fTk9fREVTQ10gPSBxcy0+bHJvX21nci5zdGF0cy5ub19kZXNjOwogCiAJaWYgKHNsZWVwaW5nKQogCQljaGVja19yaW5nX2RiKGFkYXAsIHFzLCBzbGVlcGluZyk7CkBAIC0yNzc1LDcgKzI3OTEsOCBAQAogICovCiB2b2lkIHQzX3NnZV9lcnJfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCXVuc2lnbmVkIGludCB2LCBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSk7CisJdW5zaWduZWQgaW50IHYsIHN0YXR1cyA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfU0dfSU5UX0NBVVNFKSAmCisJCQkJIH5GX0ZMRU1QVFk7CiAKIAlpZiAoc3RhdHVzICYgU0dFX1BBUkVSUikKIAkJQ0hfQUxFUlQoYWRhcHRlciwgIlNHRSBwYXJpdHkgZXJyb3IgKDB4JXgpXG4iLApAQCAtMjgwNSwxMyArMjgyMiwxMyBAQAogfQogCiAvKioKLSAqCXNnZV90aW1lcl9jYiAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgYW4gU0dFIHFzZXQKKyAqCXNnZV90aW1lcl90eCAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgYW4gU0dFIHFzZXQKICAqCUBkYXRhOiB0aGUgU0dFIHF1ZXVlIHNldCB0byBtYWludGFpbgogICoKICAqCVJ1bnMgcGVyaW9kaWNhbGx5IGZyb20gYSB0aW1lciB0byBwZXJmb3JtIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxdWV1ZQogICoJc2V0LiAgSXQgcGVyZm9ybXMgdHdvIHRhc2tzOgogICoKLSAqCWEpIENsZWFucyB1cCBhbnkgY29tcGxldGVkIFR4IGRlc2NyaXB0b3JzIHRoYXQgbWF5IHN0aWxsIGJlIHBlbmRpbmcuCisgKglDbGVhbnMgdXAgYW55IGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycyB0aGF0IG1heSBzdGlsbCBiZSBwZW5kaW5nLgogICoJTm9ybWFsIGRlc2NyaXB0b3IgY2xlYW51cCBoYXBwZW5zIHdoZW4gbmV3IHBhY2tldHMgYXJlIGFkZGVkIHRvIGEgVHgKICAqCXF1ZXVlIHNvIHRoaXMgdGltZXIgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50IGFuZCBkb2VzIGFueSBjbGVhbnVwIG9ubHkKICAqCWlmIHRoZSBUeCBxdWV1ZSBoYXMgbm90IHNlZW4gYW55IG5ldyBwYWNrZXRzIGluIGEgd2hpbGUuICBXZSBtYWtlIGEKQEAgLTI4MjEsNTEgKzI4MzgsODcgQEAKICAqCXVwKS4gIFNpbmNlIGNvbnRyb2wgcXVldWVzIHVzZSBpbW1lZGlhdGUgZGF0YSBleGNsdXNpdmVseSB3ZSBkb24ndAogICoJYm90aGVyIGNsZWFuaW5nIHRoZW0gdXAgaGVyZS4KICAqCi0gKgliKSBSZXBsZW5pc2hlcyBSeCBxdWV1ZXMgdGhhdCBoYXZlIHJ1biBvdXQgZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4KKyAqLworc3RhdGljIHZvaWQgc2dlX3RpbWVyX3R4KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gKHN0cnVjdCBzZ2VfcXNldCAqKWRhdGE7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihxcy0+bmV0ZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBpLT5hZGFwdGVyOworCXVuc2lnbmVkIGludCB0YmRbU0dFX1RYUV9QRVJfU0VUXSA9IHswLCAwfTsKKwl1bnNpZ25lZCBsb25nIG5leHRfcGVyaW9kOworCisJaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKSkgeworCQl0YmRbVFhRX0VUSF0gPSByZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfRVRIXSwKKwkJCQkJCSAgICBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LKTsKKwkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jayk7CisJfQorCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spKSB7CisJCXRiZFtUWFFfT0ZMRF0gPSByZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfT0ZMRF0sCisJCQkJCQkgICAgIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTkspOworCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jayk7CisJfQorCisJbmV4dF9wZXJpb2QgPSBUWF9SRUNMQUlNX1BFUklPRCA+PgorCQkgICAgICAobWF4KHRiZFtUWFFfRVRIXSwgdGJkW1RYUV9PRkxEXSkgLworCQkgICAgICAgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyk7CisJbW9kX3RpbWVyKCZxcy0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIG5leHRfcGVyaW9kKTsKK30KKworLyoKKyAqCXNnZV90aW1lcl9yeCAtIHBlcmZvcm0gcGVyaW9kaWMgbWFpbnRlbmFuY2Ugb2YgYW4gU0dFIHFzZXQKKyAqCUBkYXRhOiB0aGUgU0dFIHF1ZXVlIHNldCB0byBtYWludGFpbgorICoKKyAqCWEpIFJlcGxlbmlzaGVzIFJ4IHF1ZXVlcyB0aGF0IGhhdmUgcnVuIG91dCBkdWUgdG8gbWVtb3J5IHNob3J0YWdlLgogICoJTm9ybWFsbHkgbmV3IFJ4IGJ1ZmZlcnMgYXJlIGFkZGVkIHdoZW4gZXhpc3Rpbmcgb25lcyBhcmUgY29uc3VtZWQgYnV0CiAgKgl3aGVuIG91dCBvZiBtZW1vcnkgYSBxdWV1ZSBjYW4gYmVjb21lIGVtcHR5LiAgV2UgdHJ5IHRvIGFkZCBvbmx5IGEgZmV3CiAgKglidWZmZXJzIGhlcmUsIHRoZSBxdWV1ZSB3aWxsIGJlIHJlcGxlbmlzaGVkIGZ1bGx5IGFzIHRoZXNlIG5ldyBidWZmZXJzCiAgKglhcmUgdXNlZCB1cCBpZiBtZW1vcnkgc2hvcnRhZ2UgaGFzIHN1YnNpZGVkLgorICoKKyAqCWIpIFJldHVybiBjb2FsZXNjZWQgcmVzcG9uc2UgcXVldWUgY3JlZGl0cyBpbiBjYXNlIGEgcmVzcG9uc2UgcXVldWUgaXMKKyAqCXN0YXJ2ZWQuCisgKgogICovCi1zdGF0aWMgdm9pZCBzZ2VfdGltZXJfY2IodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgc2dlX3RpbWVyX3J4KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzcGlubG9ja190ICpsb2NrOwogCXN0cnVjdCBzZ2VfcXNldCAqcXMgPSAoc3RydWN0IHNnZV9xc2V0ICopZGF0YTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHFzLT5hZGFwOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKKwl1MzIgc3RhdHVzOwogCi0JaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKSkgewotCQlyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfRVRIXSk7Ci0JCXNwaW5fdW5sb2NrKCZxcy0+dHhxW1RYUV9FVEhdLmxvY2spOwotCX0KLQlpZiAoc3Bpbl90cnlsb2NrKCZxcy0+dHhxW1RYUV9PRkxEXS5sb2NrKSkgewotCQlyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCAmcXMtPnR4cVtUWFFfT0ZMRF0pOwotCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jayk7Ci0JfQotCWxvY2sgPSAoYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSA/ICZxcy0+cnNwcS5sb2NrIDoKLQkJCQkJICAgICZhZGFwLT5zZ2UucXNbMF0ucnNwcS5sb2NrOwotCWlmIChzcGluX3RyeWxvY2tfaXJxKGxvY2spKSB7Ci0JCWlmICghbmFwaV9pc19zY2hlZHVsZWQoJnFzLT5uYXBpKSkgewotCQkJdTMyIHN0YXR1cyA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfU0dfUlNQUV9GTF9TVEFUVVMpOworCWxvY2sgPSBhZGFwLT5wYXJhbXMucmV2ID4gMCA/CisJICAgICAgICZxcy0+cnNwcS5sb2NrIDogJmFkYXAtPnNnZS5xc1swXS5yc3BxLmxvY2s7CiAKLQkJCWlmIChxcy0+ZmxbMF0uY3JlZGl0cyA8IHFzLT5mbFswXS5zaXplKQotCQkJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMF0pOwotCQkJaWYgKHFzLT5mbFsxXS5jcmVkaXRzIDwgcXMtPmZsWzFdLnNpemUpCi0JCQkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFsxXSk7CisJaWYgKCFzcGluX3RyeWxvY2tfaXJxKGxvY2spKQorCQlnb3RvIG91dDsKIAotCQkJaWYgKHN0YXR1cyAmICgxIDw8IHFzLT5yc3BxLmNudHh0X2lkKSkgewotCQkJCXFzLT5yc3BxLnN0YXJ2ZWQrKzsKLQkJCQlpZiAocXMtPnJzcHEuY3JlZGl0cykgewotCQkJCQlyZWZpbGxfcnNwcShhZGFwLCAmcXMtPnJzcHEsIDEpOwotCQkJCQlxcy0+cnNwcS5jcmVkaXRzLS07Ci0JCQkJCXFzLT5yc3BxLnJlc3RhcnRlZCsrOwotCQkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUywKLQkJCQkJCSAgICAgMSA8PCBxcy0+cnNwcS5jbnR4dF9pZCk7Ci0JCQkJfQorCWlmIChuYXBpX2lzX3NjaGVkdWxlZCgmcXMtPm5hcGkpKQorCQlnb3RvIHVubG9jazsKKworCWlmIChhZGFwLT5wYXJhbXMucmV2IDwgNCkgeworCQlzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTKTsKKworCQlpZiAoc3RhdHVzICYgKDEgPDwgcXMtPnJzcHEuY250eHRfaWQpKSB7CisJCQlxcy0+cnNwcS5zdGFydmVkKys7CisJCQlpZiAocXMtPnJzcHEuY3JlZGl0cykgeworCQkJCXFzLT5yc3BxLmNyZWRpdHMtLTsKKwkJCQlyZWZpbGxfcnNwcShhZGFwLCAmcXMtPnJzcHEsIDEpOworCQkJCXFzLT5yc3BxLnJlc3RhcnRlZCsrOworCQkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTLAorCQkJCQkgICAgIDEgPDwgcXMtPnJzcHEuY250eHRfaWQpOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycShsb2NrKTsKIAl9Ci0JbW9kX3RpbWVyKCZxcy0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKKworCWlmIChxcy0+ZmxbMF0uY3JlZGl0cyA8IHFzLT5mbFswXS5zaXplKQorCQlfX3JlZmlsbF9mbChhZGFwLCAmcXMtPmZsWzBdKTsKKwlpZiAocXMtPmZsWzFdLmNyZWRpdHMgPCBxcy0+ZmxbMV0uc2l6ZSkKKwkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFsxXSk7CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnEobG9jayk7CitvdXQ6CisJbW9kX3RpbWVyKCZxcy0+cnhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFJYX1JFQ0xBSU1fUEVSSU9EKTsKIH0KIAogLyoqCkBAIC0yOTA2LDEwICsyOTU5LDEwIEBACiB7CiAJaW50IGksIGF2YWlsLCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBzZ2VfcXNldCAqcSA9ICZhZGFwdGVyLT5zZ2UucXNbaWRdOwotCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciA9ICZxLT5scm9fbWdyOwogCiAJaW5pdF9xc2V0X2NudHh0KHEsIGlkKTsKLQlzZXR1cF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgc2dlX3RpbWVyX2NiLCAodW5zaWduZWQgbG9uZylxKTsKKwlzZXR1cF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgc2dlX3RpbWVyX3R4LCAodW5zaWduZWQgbG9uZylxKTsKKwlzZXR1cF90aW1lcigmcS0+cnhfcmVjbGFpbV90aW1lciwgc2dlX3RpbWVyX3J4LCAodW5zaWduZWQgbG9uZylxKTsKIAogCXEtPmZsWzBdLmRlc2MgPSBhbGxvY19yaW5nKGFkYXB0ZXItPnBkZXYsIHAtPmZsX3NpemUsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSwKQEAgLTI5ODUsMjUgKzMwMzgsMjMgQEAKIAlxLT5mbFsxXS51c2VfcGFnZXMgPSBGTDFfUEdfQ0hVTktfU0laRSA+IDA7CiAJcS0+ZmxbMF0ub3JkZXIgPSBGTDBfUEdfT1JERVI7CiAJcS0+ZmxbMV0ub3JkZXIgPSBGTDFfUEdfT1JERVI7CisJcS0+ZmxbMF0uYWxsb2Nfc2l6ZSA9IEZMMF9QR19BTExPQ19TSVpFOworCXEtPmZsWzFdLmFsbG9jX3NpemUgPSBGTDFfUEdfQUxMT0NfU0laRTsKIAotCXEtPmxyb19mcmFnX3RibCA9IGtjYWxsb2MoTUFYX0ZSQU1FX1NJWkUgLyBGTDFfUEdfQ0hVTktfU0laRSArIDEsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT5zZ2UucmVnX2xvY2spOwogCiAJLyogRkwgdGhyZXNob2xkIGNvbXBhcmlzb24gdXNlcyA8ICovCiAJcmV0ID0gdDNfc2dlX2luaXRfcnNwY250eHQoYWRhcHRlciwgcS0+cnNwcS5jbnR4dF9pZCwgaXJxX3ZlY19pZHgsCiAJCQkJICAgcS0+cnNwcS5waHlzX2FkZHIsIHEtPnJzcHEuc2l6ZSwKLQkJCQkgICBxLT5mbFswXS5idWZfc2l6ZSwgMSwgMCk7CisJCQkJICAgcS0+ZmxbMF0uYnVmX3NpemUgLSBTR0VfUEdfUlNWRCwgMSwgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJZm9yIChpID0gMDsgaSA8IFNHRV9SWFFfUEVSX1NFVDsgKytpKSB7CiAJCXJldCA9IHQzX3NnZV9pbml0X2ZsY250eHQoYWRhcHRlciwgcS0+ZmxbaV0uY250eHRfaWQsIDAsCiAJCQkJCSAgcS0+ZmxbaV0ucGh5c19hZGRyLCBxLT5mbFtpXS5zaXplLAotCQkJCQkgIHEtPmZsW2ldLmJ1Zl9zaXplLCBwLT5jb25nX3RocmVzLCAxLAotCQkJCQkgIDApOworCQkJCQkgIHEtPmZsW2ldLmJ1Zl9zaXplIC0gU0dFX1BHX1JTVkQsCisJCQkJCSAgcC0+Y29uZ190aHJlcywgMSwgMCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl91bmxvY2s7CiAJfQpAQCAtMzA0MSw4ICszMDkyLDYgQEAKIAlxLT50eF9xID0gbmV0ZGV2cTsKIAl0M191cGRhdGVfcXNldF9jb2FsZXNjZShxLCBwKTsKIAotCWluaXRfbHJvX21ncihxLCBscm9fbWdyKTsKLQogCWF2YWlsID0gcmVmaWxsX2ZsKGFkYXB0ZXIsICZxLT5mbFswXSwgcS0+ZmxbMF0uc2l6ZSwKIAkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVApOwogCWlmICghYXZhaWwpIHsKQEAgLTMwNjMsNyArMzExMiw2IEBACiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfR1RTLCBWX1JTUFEocS0+cnNwcS5jbnR4dF9pZCkgfAogCQkgICAgIFZfTkVXVElNRVIocS0+cnNwcS5ob2xkb2ZmX3RtcikpOwogCi0JbW9kX3RpbWVyKCZxLT50eF9yZWNsYWltX3RpbWVyLCBqaWZmaWVzICsgVFhfUkVDTEFJTV9QRVJJT0QpOwogCXJldHVybiAwOwogCiBlcnJfdW5sb2NrOgpAQCAtMzA3NCw2ICszMTIyLDI3IEBACiB9CiAKIC8qKgorICogICAgICB0M19zdGFydF9zZ2VfdGltZXJzIC0gc3RhcnQgU0dFIHRpbWVyIGNhbGwgYmFja3MKKyAqICAgICAgQGFkYXA6IHRoZSBhZGFwdGVyCisgKgorICogICAgICBTdGFydHMgZWFjaCBTR0UgcXVldWUgc2V0J3MgdGltZXIgY2FsbCBiYWNrCisgKi8KK3ZvaWQgdDNfc3RhcnRfc2dlX3RpbWVycyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTR0VfUVNFVFM7ICsraSkgeworCQlzdHJ1Y3Qgc2dlX3FzZXQgKnEgPSAmYWRhcC0+c2dlLnFzW2ldOworCisJaWYgKHEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCisJCW1vZF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKKworCWlmIChxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQltb2RfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CisJfQorfQorCisvKioKICAqCXQzX3N0b3Bfc2dlX3RpbWVycyAtIHN0b3AgU0dFIHRpbWVyIGNhbGwgYmFja3MKICAqCUBhZGFwOiB0aGUgYWRhcHRlcgogICoKQEAgLTMwODgsNiArMzE1Nyw4IEBACiAKIAkJaWYgKHEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCiAJCQlkZWxfdGltZXJfc3luYygmcS0+dHhfcmVjbGFpbV90aW1lcik7CisJCWlmIChxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQkJZGVsX3RpbWVyX3N5bmMoJnEtPnJ4X3JlY2xhaW1fdGltZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggYWMyYTk3NC4uMzFlZDMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC00OTMsMjAgKzQ5MywyMCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkYXB0ZXJfaW5mbyB0M19hZGFwX2luZm9bXSA9IHsKLQl7MiwgMCwKKwl7MSwgMSwgMCwKIAkgRl9HUElPMl9PRU4gfCBGX0dQSU80X09FTiB8CiAJIEZfR1BJTzJfT1VUX1ZBTCB8IEZfR1BJTzRfT1VUX1ZBTCwgeyBTX0dQSU8zLCBTX0dQSU81IH0sIDAsCiAJICZtaTFfbWRpb19vcHMsICJDaGVsc2lvIFBFOTAwMCJ9LAotCXsyLCAwLAorCXsxLCAxLCAwLAogCSBGX0dQSU8yX09FTiB8IEZfR1BJTzRfT0VOIHwKIAkgRl9HUElPMl9PVVRfVkFMIHwgRl9HUElPNF9PVVRfVkFMLCB7IFNfR1BJTzMsIFNfR1BJTzUgfSwgMCwKIAkgJm1pMV9tZGlvX29wcywgIkNoZWxzaW8gVDMwMiJ9LAotCXsxLCAwLAorCXsxLCAwLCAwLAogCSBGX0dQSU8xX09FTiB8IEZfR1BJTzZfT0VOIHwgRl9HUElPN19PRU4gfCBGX0dQSU8xMF9PRU4gfAogCSBGX0dQSU8xMV9PRU4gfCBGX0dQSU8xX09VVF9WQUwgfCBGX0dQSU82X09VVF9WQUwgfCBGX0dQSU8xMF9PVVRfVkFMLAogCSB7IDAgfSwgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9BVUksCiAJICZtaTFfbWRpb19leHRfb3BzLCAiQ2hlbHNpbyBUMzEwIn0sCi0JezIsIDAsCisJezEsIDEsIDAsCiAJIEZfR1BJTzFfT0VOIHwgRl9HUElPMl9PRU4gfCBGX0dQSU80X09FTiB8IEZfR1BJTzVfT0VOIHwgRl9HUElPNl9PRU4gfAogCSBGX0dQSU83X09FTiB8IEZfR1BJTzEwX09FTiB8IEZfR1BJTzExX09FTiB8IEZfR1BJTzFfT1VUX1ZBTCB8CiAJIEZfR1BJTzVfT1VUX1ZBTCB8IEZfR1BJTzZfT1VUX1ZBTCB8IEZfR1BJTzEwX09VVF9WQUwsCkBAIC01MTQsNyArNTE0LDcgQEAKIAkgJm1pMV9tZGlvX2V4dF9vcHMsICJDaGVsc2lvIFQzMjAifSwKIAl7fSwKIAl7fSwKLQl7MSwgMCwKKwl7MSwgMCwgMCwKIAkgRl9HUElPMV9PRU4gfCBGX0dQSU8yX09FTiB8IEZfR1BJTzRfT0VOIHwgRl9HUElPNl9PRU4gfCBGX0dQSU83X09FTiB8CiAJIEZfR1BJTzEwX09FTiB8IEZfR1BJTzFfT1VUX1ZBTCB8IEZfR1BJTzZfT1VUX1ZBTCB8IEZfR1BJTzEwX09VVF9WQUwsCiAJIHsgU19HUElPOSB9LCBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0FVSSwKQEAgLTExNTMsNiArMTE1MywzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHQzX2dhdGVfcnhfdHJhZmZpYyhzdHJ1Y3QgY21hYyAqbWFjLCB1MzIgKnJ4X2NmZywKKwkJCSAgICAgICB1MzIgKnJ4X2hhc2hfaGlnaCwgdTMyICpyeF9oYXNoX2xvdykKK3sKKwkvKiBzdG9wIFJ4IHVuaWNhc3QgdHJhZmZpYyAqLworCXQzX21hY19kaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKworCS8qIHN0b3AgYnJvYWRjYXN0LCBtdWx0aWNhc3QsIHByb21pc2N1b3VzIG1vZGUgdHJhZmZpYyAqLworCSpyeF9jZmcgPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRyk7CisJdDNfc2V0X3JlZ19maWVsZChtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRywKKwkJCSBGX0VOSEFTSE1DQVNUIHwgRl9ESVNCQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywKKwkJCSBGX0RJU0JDQVNUKTsKKworCSpyeF9oYXNoX2hpZ2ggPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCk7CisJdDNfd3JpdGVfcmVnKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfSEFTSF9ISUdILCAwKTsKKworCSpyeF9oYXNoX2xvdyA9IHQzX3JlYWRfcmVnKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfSEFTSF9MT1cpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XLCAwKTsKKworCS8qIExlYXZlIHRpbWUgdG8gZHJhaW4gbWF4IFJYIGZpZm8gKi8KKwltc2xlZXAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHQzX29wZW5fcnhfdHJhZmZpYyhzdHJ1Y3QgY21hYyAqbWFjLCB1MzIgcnhfY2ZnLAorCQkJICAgICAgIHUzMiByeF9oYXNoX2hpZ2gsIHUzMiByeF9oYXNoX2xvdykKK3sKKwl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwl0M19zZXRfcmVnX2ZpZWxkKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfQ0ZHLAorCQkJIEZfRU5IQVNITUNBU1QgfCBGX0RJU0JDQVNUIHwgRl9DT1BZQUxMRlJBTUVTLAorCQkJIHJ4X2NmZyk7CisJdDNfd3JpdGVfcmVnKG1hYy0+YWRhcHRlciwgQV9YR01fUlhfSEFTSF9ISUdILCByeF9oYXNoX2hpZ2gpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XLCByeF9oYXNoX2xvdyk7Cit9CiAKIC8qKgogICoJdDNfbGlua19jaGFuZ2VkIC0gaGFuZGxlIGludGVyZmFjZSBsaW5rIGNoYW5nZXMKQEAgLTExNzAsOSArMTIwMiwzMiBAQAogCXN0cnVjdCBjcGh5ICpwaHkgPSAmcGktPnBoeTsKIAlzdHJ1Y3QgY21hYyAqbWFjID0gJnBpLT5tYWM7CiAJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwaS0+bGlua19jb25maWc7CisJaW50IGZvcmNlX2xpbmtfZG93biA9IDA7CiAKIAlwaHktPm9wcy0+Z2V0X2xpbmtfc3RhdHVzKHBoeSwgJmxpbmtfb2ssICZzcGVlZCwgJmR1cGxleCwgJmZjKTsKIAorCWlmICghbGMtPmxpbmtfb2sgJiYgbGlua19vaykgeworCQl1MzIgcnhfY2ZnLCByeF9oYXNoX2hpZ2gsIHJ4X2hhc2hfbG93OworCQl1MzIgc3RhdHVzOworCisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBwb3J0X2lkKTsKKwkJdDNfZ2F0ZV9yeF90cmFmZmljKG1hYywgJnJ4X2NmZywgJnJ4X2hhc2hfaGlnaCwgJnJ4X2hhc2hfbG93KTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1JYX0NUUkwgKyBtYWMtPm9mZnNldCwgMCk7CisJCXQzX21hY19lbmFibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKKworCQlzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgbWFjLT5vZmZzZXQpOworCQlpZiAoc3RhdHVzICYgRl9MSU5LRkFVTFRDSEFOR0UpIHsKKwkJCW1hYy0+c3RhdHMubGlua19mYXVsdHMrKzsKKwkJCWZvcmNlX2xpbmtfZG93biA9IDE7CisJCX0KKwkJdDNfb3Blbl9yeF90cmFmZmljKG1hYywgcnhfY2ZnLCByeF9oYXNoX2hpZ2gsIHJ4X2hhc2hfbG93KTsKKworCQlpZiAoZm9yY2VfbGlua19kb3duKSB7CisJCQl0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoYWRhcHRlciwgcG9ydF9pZCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlpZiAobGMtPnJlcXVlc3RlZF9mYyAmIFBBVVNFX0FVVE9ORUcpCiAJCWZjICY9IGxjLT5yZXF1ZXN0ZWRfZmM7CiAJZWxzZQpAQCAtMTIwMiw2ICsxMjU3LDU3IEBACiAJdDNfb3NfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIHBvcnRfaWQsIGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjKTsKIH0KIAordm9pZCB0M19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgcG9ydF9pZCk7CisJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOworCXN0cnVjdCBjcGh5ICpwaHkgPSAmcGktPnBoeTsKKwlzdHJ1Y3QgbGlua19jb25maWcgKmxjID0gJnBpLT5saW5rX2NvbmZpZzsKKwlpbnQgbGlua19vaywgc3BlZWQsIGR1cGxleCwgZmMsIGxpbmtfZmF1bHQ7CisJdTMyIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdzsKKworCXQzX2dhdGVfcnhfdHJhZmZpYyhtYWMsICZyeF9jZmcsICZyeF9oYXNoX2hpZ2gsICZyeF9oYXNoX2xvdyk7CisKKwlpZiAoYWRhcHRlci0+cGFyYW1zLnJldiA+IDAgJiYgdXNlc194YXVpKGFkYXB0ZXIpKQorCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fWEFVSV9BQ1RfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOworCXQzX21hY19lbmFibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKKworCXQzX29wZW5fcnhfdHJhZmZpYyhtYWMsIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdyk7CisKKwlsaW5rX2ZhdWx0ID0gdDNfcmVhZF9yZWcoYWRhcHRlciwKKwkJCQkgQV9YR01fSU5UX1NUQVRVUyArIG1hYy0+b2Zmc2V0KTsKKwlsaW5rX2ZhdWx0ICY9IEZfTElOS0ZBVUxUQ0hBTkdFOworCisJcGh5LT5vcHMtPmdldF9saW5rX3N0YXR1cyhwaHksICZsaW5rX29rLCAmc3BlZWQsICZkdXBsZXgsICZmYyk7CisKKwlpZiAobGlua19mYXVsdCkgeworCQlsYy0+bGlua19vayA9IDA7CisJCWxjLT5zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisJCWxjLT5kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKKworCQl0M19vc19saW5rX2ZhdWx0KGFkYXB0ZXIsIHBvcnRfaWQsIDApOworCisJCS8qIEFjY291bnQgbGluayBmYXVsdHMgb25seSB3aGVuIHRoZSBwaHkgcmVwb3J0cyBhIGxpbmsgdXAgKi8KKwkJaWYgKGxpbmtfb2spCisJCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisKKwkJbXNsZWVwKDEwMDApOworCQl0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoYWRhcHRlciwgcG9ydF9pZCk7CisJfSBlbHNlIHsKKwkJaWYgKGxpbmtfb2spCisJCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fWEFVSV9BQ1RfQ1RSTCArIG1hYy0+b2Zmc2V0LAorCQkJCSAgICAgRl9UWEFDVEVOQUJMRSB8IEZfUlhFTik7CisKKwkJcGktPmxpbmtfZmF1bHQgPSAwOworCQlsYy0+bGlua19vayA9ICh1bnNpZ25lZCBjaGFyKWxpbmtfb2s7CisJCWxjLT5zcGVlZCA9IHNwZWVkIDwgMCA/IFNQRUVEX0lOVkFMSUQgOiBzcGVlZDsKKwkJbGMtPmR1cGxleCA9IGR1cGxleCA8IDAgPyBEVVBMRVhfSU5WQUxJRCA6IGR1cGxleDsKKwkJdDNfb3NfbGlua19mYXVsdChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rKTsKKwl9Cit9CisKIC8qKgogICoJdDNfbGlua19zdGFydCAtIGFwcGx5IGxpbmsgY29uZmlndXJhdGlvbiB0byBNQUMvUEhZCiAgKglAcGh5OiB0aGUgUEhZIHRvIHNldHVwCkBAIC0xMzIzLDcgKzE0MjksNyBAQAogI2RlZmluZSBNQzdfSU5UUl9NQVNLIChGX0FFIHwgRl9VRSB8IEZfQ0UgfCBWX1BFKE1fUEUpKQogI2RlZmluZSBYR01fSU5UUl9NQVNLIChWX1RYRklGT19QUlRZX0VSUihNX1RYRklGT19QUlRZX0VSUikgfCBcCiAJCSAgICAgICBWX1JYRklGT19QUlRZX0VSUihNX1JYRklGT19QUlRZX0VSUikgfCBcCi0JCSAgICAgICBGX1RYRklGT19VTkRFUlJVTiB8IEZfUlhGSUZPX09WRVJGTE9XKQorCQkgICAgICAgRl9UWEZJRk9fVU5ERVJSVU4pCiAjZGVmaW5lIFBDSVhfSU5UUl9NQVNLIChGX01TVERFVFBBUkVSUiB8IEZfU0lHVEFSQUJUIHwgRl9SQ1ZUQVJBQlQgfCBcCiAJCQlGX1JDVk1TVEFCVCB8IEZfU0lHU1lTRVJSIHwgRl9ERVRQQVJFUlIgfCBcCiAJCQlGX1NQTENNUERJUyB8IEZfVU5YU1BMQ01QIHwgRl9SQ1ZTUExDTVBFUlIgfCBcCkBAIC0xMzYwLDExICsxNDY2LDExIEBACiAJCSAgICAgICBWX1RYMVRQUEFSRVJSRU5CKE1fVFgxVFBQQVJFUlJFTkIpIHwgXAogCQkgICAgICAgVl9SWFRQUEFSRVJSRU5CKE1fUlhUUFBBUkVSUkVOQikgfCBcCiAJCSAgICAgICBWX01DQVBBUkVSUkVOQihNX01DQVBBUkVSUkVOQikpCisjZGVmaW5lIFhHTV9FWFRSQV9JTlRSX01BU0sgKEZfTElOS0ZBVUxUQ0hBTkdFKQogI2RlZmluZSBQTF9JTlRSX01BU0sgKEZfVDNEQkcgfCBGX1hHTUFDMF8wIHwgRl9YR01BQzBfMSB8IEZfTUM1QSB8IEZfUE0xX1RYIHwgXAogCQkgICAgICBGX1BNMV9SWCB8IEZfVUxQMl9UWCB8IEZfVUxQMl9SWCB8IEZfVFAxIHwgRl9DSU0gfCBcCiAJCSAgICAgIEZfTUM3X0NNIHwgRl9NQzdfUE1UWCB8IEZfTUM3X1BNUlggfCBGX1NHRTMgfCBGX1BDSU0wIHwgXAogCQkgICAgICBGX01QUzAgfCBGX0NQTF9TV0lUQ0gpCi0KIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIFBDSVgxIG1vZHVsZS4KICAqLwpAQCAtMTY5NSw3ICsxODAxLDE0IEBACiBzdGF0aWMgaW50IG1hY19pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBpZHgpCiB7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZhZGFwMnBpbmZvKGFkYXAsIGlkeCktPm1hYzsKLQl1MzIgY2F1c2UgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9JTlRfQ0FVU0UgKyBtYWMtPm9mZnNldCk7CisJLyoKKwkgKiBXZSBtYXNrIG91dCBpbnRlcnJ1cHQgY2F1c2VzIGZvciB3aGljaCB3ZSdyZSBub3QgdGFraW5nIGludGVycnVwdHMuCisJICogVGhpcyBhbGxvd3MgdXMgdG8gdXNlIHBvbGxpbmcgbG9naWMgdG8gbW9uaXRvciBzb21lIG9mIHRoZSBvdGhlcgorCSAqIGNvbmRpdGlvbnMgd2hlbiB0YWtpbmcgaW50ZXJydXB0cyB3b3VsZCBpbXBvc2UgdG9vIG11Y2ggbG9hZCBvbiB0aGUKKwkgKiBzeXN0ZW0uCisJICovCisJdTMyIGNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpICYKKwkJICAgIH5GX1JYRklGT19PVkVSRkxPVzsKIAogCWlmIChjYXVzZSAmIFZfVFhGSUZPX1BSVFlfRVJSKE1fVFhGSUZPX1BSVFlfRVJSKSkgewogCQltYWMtPnN0YXRzLnR4X2ZpZm9fcGFyaXR5X2VycisrOwpAQCAtMTcxNSwxMCArMTgyOCwyMCBAQAogCQltYWMtPnN0YXRzLnhhdWlfcGNzX2N0Y19lcnIrKzsKIAlpZiAoY2F1c2UgJiBGX1hBVUlQQ1NBTElHTkNIQU5HRSkKIAkJbWFjLT5zdGF0cy54YXVpX3Bjc19hbGlnbl9jaGFuZ2UrKzsKKwlpZiAoY2F1c2UgJiBGX1hHTV9JTlQpIHsKKwkJdDNfc2V0X3JlZ19maWVsZChhZGFwLAorCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgbWFjLT5vZmZzZXQsCisJCQkJIEZfWEdNX0lOVCwgMCk7CisJCW1hYy0+c3RhdHMubGlua19mYXVsdHMrKzsKKworCQl0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoYWRhcCwgaWR4KTsKKwl9CiAKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQsIGNhdXNlKTsKKwogCWlmIChjYXVzZSAmIFhHTV9JTlRSX0ZBVEFMKQogCQl0M19mYXRhbF9lcnIoYWRhcCk7CisKIAlyZXR1cm4gY2F1c2UgIT0gMDsKIH0KIApAQCAtMTkyNCw2ICsyMDQ3LDIyIEBACiAJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9QTF9JTlRfQ0FVU0UwKTsJLyogZmx1c2ggKi8KIH0KIAordm9pZCB0M194Z21faW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGlkeCk7CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fWEdNX0lOVF9FTkFCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJICAgICBYR01fRVhUUkFfSU5UUl9NQVNLKTsKK30KKwordm9pZCB0M194Z21faW50cl9kaXNhYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpZHgpOworCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hHTV9JTlRfRElTQUJMRSArIHBpLT5tYWMub2Zmc2V0LAorCQkgICAgIDB4N2ZmKTsKK30KKwogLyoqCiAgKgl0M19wb3J0X2ludHJfZW5hYmxlIC0gZW5hYmxlIHBvcnQtc3BlY2lmaWMgaW50ZXJydXB0cwogICoJQGFkYXB0ZXI6IGFzc29jaWF0ZWQgYWRhcHRlcgpAQCAtMTk4OSwxNiArMjEyOCw0MCBAQAogc3RhdGljIGludCB0M19zZ2Vfd3JpdGVfY29udGV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGlkLAogCQkJCXVuc2lnbmVkIGludCB0eXBlKQogewotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzAsIDB4ZmZmZmZmZmYpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzEsIDB4ZmZmZmZmZmYpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4ZmZmZmZmZmYpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzMsIDB4ZmZmZmZmZmYpOworCWlmICh0eXBlID09IEZfUkVTUE9OU0VRKSB7CisJCS8qCisJCSAqIENhbid0IHdyaXRlIHRoZSBSZXNwb25zZSBRdWV1ZSBDb250ZXh0IGJpdHMgZm9yCisJCSAqIEludGVycnVwdCBBcm1lZCBvciB0aGUgUmVzZXJ2ZSBiaXRzIGFmdGVyIHRoZSBjaGlwCisJCSAqIGhhcyBiZWVuIGluaXRpYWxpemVkIG91dCBvZiByZXNldC4gIFdyaXRpbmcgdG8gdGhlc2UKKwkJICogYml0cyBjYW4gY29uZnVzZSB0aGUgaGFyZHdhcmUuCisJCSAqLworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0swLCAweGZmZmZmZmZmKTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMSwgMHhmZmZmZmZmZik7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4MTdmZmZmZmYpOworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0szLCAweGZmZmZmZmZmKTsKKwl9IGVsc2UgeworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0swLCAweGZmZmZmZmZmKTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMSwgMHhmZmZmZmZmZik7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4ZmZmZmZmZmYpOworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0szLCAweGZmZmZmZmZmKTsKKwl9CiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9DTUQsCiAJCSAgICAgVl9DT05URVhUX0NNRF9PUENPREUoMSkgfCB0eXBlIHwgVl9DT05URVhUKGlkKSk7CiAJcmV0dXJuIHQzX3dhaXRfb3BfZG9uZShhZGFwdGVyLCBBX1NHX0NPTlRFWFRfQ01ELCBGX0NPTlRFWFRfQ01EX0JVU1ksCiAJCQkgICAgICAgMCwgU0dfQ09OVEVYVF9DTURfQVRURU1QVFMsIDEpOwogfQogCisvKioKKyAqCWNsZWFyX3NnZV9jdHh0IC0gY29tcGxldGVseSBjbGVhciBhbiBTR0UgY29udGV4dAorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAaWQ6IHRoZSBjb250ZXh0IGlkCisgKglAdHlwZTogdGhlIGNvbnRleHQgdHlwZQorICoKKyAqCUNvbXBsZXRlbHkgY2xlYXIgYW4gU0dFIGNvbnRleHQuICBVc2VkIHByZWRvbWluYW50bHkgYXQgcG9zdC1yZXNldAorICoJaW5pdGlhbGl6YXRpb24uICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCB3ZSBkb24ndCBza2lwIHdyaXRpbmcgdG8gYW55CisgKgkic2Vuc2l0aXZlIGJpdHMiIGluIHRoZSBjb250ZXh0cyB0aGUgd2F5IHRoYXQgdDNfc2dlX3dyaXRlX2NvbnRleHQoKQorICoJZG9lcyAuLi4KKyAqLwogc3RhdGljIGludCBjbGVhcl9zZ2VfY3R4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IGlkLAogCQkJICB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKQEAgLTIwMDYsNyArMjE2OSwxNCBAQAogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfREFUQTEsIDApOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfREFUQTIsIDApOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfREFUQTMsIDApOwotCXJldHVybiB0M19zZ2Vfd3JpdGVfY29udGV4dChhZGFwLCBpZCwgdHlwZSk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMCwgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMSwgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMiwgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9NQVNLMywgMHhmZmZmZmZmZik7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfQ09OVEVYVF9DTUQsCisJCSAgICAgVl9DT05URVhUX0NNRF9PUENPREUoMSkgfCB0eXBlIHwgVl9DT05URVhUKGlkKSk7CisJcmV0dXJuIHQzX3dhaXRfb3BfZG9uZShhZGFwLCBBX1NHX0NPTlRFWFRfQ01ELCBGX0NPTlRFWFRfQ01EX0JVU1ksCisJCQkgICAgICAgMCwgU0dfQ09OVEVYVF9DTURfQVRURU1QVFMsIDEpOwogfQogCiAvKioKQEAgLTI1OTAsMTAgKzI3NjAsMTAgQEAKIAkJICAgICBGX1RDUENIRUNLU1VNT0ZGTE9BRCB8IFZfSVBUVEwoNjQpKTsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9UQ1BfT1BUSU9OUywgVl9NVFVERUZBVUxUKDU3NikgfAogCQkgICAgIEZfTVRVRU5BQkxFIHwgVl9XSU5ET1dTQ0FMRU1PREUoMSkgfAotCQkgICAgIFZfVElNRVNUQU1QU01PREUoMCkgfCBWX1NBQ0tNT0RFKDEpIHwgVl9TQUNLUlgoMSkpOworCQkgICAgIFZfVElNRVNUQU1QU01PREUoMSkgfCBWX1NBQ0tNT0RFKDEpIHwgVl9TQUNLUlgoMSkpOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX0RBQ0tfQ09ORklHLCBWX0FVVE9TVEFURTMoMSkgfAogCQkgICAgIFZfQVVUT1NUQVRFMigxKSB8IFZfQVVUT1NUQVRFMSgwKSB8Ci0JCSAgICAgVl9CWVRFVEhSRVNIT0xEKDE2Mzg0KSB8IFZfTVNTVEhSRVNIT0xEKDIpIHwKKwkJICAgICBWX0JZVEVUSFJFU0hPTEQoMjY4ODApIHwgVl9NU1NUSFJFU0hPTEQoMikgfAogCQkgICAgIEZfQVVUT0NBUkVGVUwgfCBGX0FVVE9FTkFCTEUgfCBWX0RBQ0tfTU9ERSgxKSk7CiAJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1RQX0lOX0NPTkZJRywgRl9SWEZCQVJCUFJJTyB8IEZfVFhGQkFSQlBSSU8sCiAJCQkgRl9JUFY2RU5BQkxFIHwgRl9OSUNNT0RFKTsKQEAgLTMwNTcsMjAgKzMyMjcsMjIgQEAKIH0KIAogLyoKLSAqIFBlcmZvcm0gdGhlIGJpdHMgb2YgSFcgaW5pdGlhbGl6YXRpb24gdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBudW1iZXIKLSAqIG9mIGF2YWlsYWJsZSBwb3J0cy4KKyAqIFBlcmZvcm0gdGhlIGJpdHMgb2YgSFcgaW5pdGlhbGl6YXRpb24gdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBUeAorICogY2hhbm5lbHMgYmVpbmcgdXNlZC4KICAqLwotc3RhdGljIHZvaWQgaW5pdF9od19mb3JfYXZhaWxfcG9ydHMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBucG9ydHMpCitzdGF0aWMgdm9pZCBjaGFuX2luaXRfaHcoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBjaGFuX21hcCkKIHsKIAlpbnQgaTsKIAotCWlmIChucG9ydHMgPT0gMSkgeworCWlmIChjaGFuX21hcCAhPSAzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25lIGNoYW5uZWwgKi8KIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1VMUFJYX0NUTCwgRl9ST1VORF9ST0JJTiwgMCk7CiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9VTFBUWF9DT05GSUcsIEZfQ0ZHX1JSX0FSQiwgMCk7Ci0JCXQzX3dyaXRlX3JlZyhhZGFwLCBBX01QU19DRkcsIEZfVFBSWFBPUlRFTiB8IEZfVFBUWFBPUlQwRU4gfAotCQkJICAgICBGX1BPUlQwQUNUSVZFIHwgRl9FTkZPUkNFUEtUKTsKLQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfUE0xX1RYX0NGRywgMHhmZmZmZmZmZik7Ci0JfSBlbHNlIHsKKwkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfTVBTX0NGRywgRl9UUFJYUE9SVEVOIHwgRl9FTkZPUkNFUEtUIHwKKwkJCSAgICAgKGNoYW5fbWFwID09IDEgPyBGX1RQVFhQT1JUMEVOIHwgRl9QT1JUMEFDVElWRSA6CisJCQkJCSAgICAgIEZfVFBUWFBPUlQxRU4gfCBGX1BPUlQxQUNUSVZFKSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1BNMV9UWF9DRkcsCisJCQkgICAgIGNoYW5fbWFwID09IDEgPyAweGZmZmZmZmZmIDogMCk7CisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0d28gY2hhbm5lbHMgKi8KIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1VMUFJYX0NUTCwgMCwgRl9ST1VORF9ST0JJTik7CiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9VTFBUWF9DT05GSUcsIDAsIEZfQ0ZHX1JSX0FSQik7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1VMUFRYX0RNQV9XRUlHSFQsCkBAIC0zMzc4LDcgKzM1NTAsNyBAQAogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1BNMV9SWF9DRkcsIDB4ZmZmZmZmZmYpOwogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1BNMV9SWF9NT0RFLCAwKTsKIAl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9QTTFfVFhfTU9ERSwgMCk7Ci0JaW5pdF9od19mb3JfYXZhaWxfcG9ydHMoYWRhcHRlciwgYWRhcHRlci0+cGFyYW1zLm5wb3J0cyk7CisJY2hhbl9pbml0X2h3KGFkYXB0ZXIsIGFkYXB0ZXItPnBhcmFtcy5jaGFuX21hcCk7CiAJdDNfc2dlX2luaXQoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy5zZ2UpOwogCiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfVDNEQkdfR1BJT19BQ1RfTE9XLCBjYWxjX2dwaW9faW50cihhZGFwdGVyKSk7CkBAIC0zNjE1LDkgKzM3ODcsMTggQEAKIAlnZXRfcGNpX21vZGUoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy5wY2kpOwogCiAJYWRhcHRlci0+cGFyYW1zLmluZm8gPSBhaTsKLQlhZGFwdGVyLT5wYXJhbXMubnBvcnRzID0gYWktPm5wb3J0czsKKwlhZGFwdGVyLT5wYXJhbXMubnBvcnRzID0gYWktPm5wb3J0czAgKyBhaS0+bnBvcnRzMTsKKwlhZGFwdGVyLT5wYXJhbXMuY2hhbl9tYXAgPSAhIWFpLT5ucG9ydHMwIHwgKCEhYWktPm5wb3J0czEgPDwgMSk7CiAJYWRhcHRlci0+cGFyYW1zLnJldiA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfUkVWKTsKLQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMDsKKwkvKgorCSAqIFdlIHVzZWQgdG8gb25seSBydW4gdGhlICJhZGFwdGVyIGNoZWNrIHRhc2siIG9uY2UgYSBzZWNvbmQgaWYKKwkgKiB3ZSBoYWQgUEhZcyB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHRzICh3ZSB3b3VsZCBjaGVjaworCSAqIHRoZWlyIGxpbmsgc3RhdHVzIG9uY2UgYSBzZWNvbmQpLiAgTm93IHdlIGNoZWNrIG90aGVyIGNvbmRpdGlvbnMKKwkgKiBpbiB0aGF0IHJvdXRpbmUgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW1wb3NlIGEgdmVyeSBoaWdoCisJICogaW50ZXJydXB0IGxvYWQgb24gdGhlIHN5c3RlbS4gIEFzIHN1Y2gsIHdlIG5vdyBhbHdheXMgc2NhbiB0aGUKKwkgKiBhZGFwdGVyIHN0YXRlIG9uY2UgYSBzZWNvbmQgLi4uCisJICovCisJYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDEwOwogCWFkYXB0ZXItPnBhcmFtcy5zdGF0c191cGRhdGVfcGVyaW9kID0gaXNfMTBHKGFkYXB0ZXIpID8KIAkgICAgTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgOiAoTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgKiAxMCk7CiAJYWRhcHRlci0+cGFyYW1zLnBjaS52cGRfY2FwX2FkZHIgPQpAQCAtMzYzOCw3ICszODE5LDcgQEAKIAkJbWM3X3ByZXAoYWRhcHRlciwgJmFkYXB0ZXItPnBtdHgsIE1DN19QTVRYX0JBU0VfQUREUiwgIlBNVFgiKTsKIAkJbWM3X3ByZXAoYWRhcHRlciwgJmFkYXB0ZXItPmNtLCBNQzdfQ01fQkFTRV9BRERSLCAiQ00iKTsKIAotCQlwLT5uY2hhbiA9IGFpLT5ucG9ydHM7CisJCXAtPm5jaGFuID0gYWRhcHRlci0+cGFyYW1zLmNoYW5fbWFwID09IDMgPyAyIDogMTsKIAkJcC0+cG1yeF9zaXplID0gdDNfbWM3X3NpemUoJmFkYXB0ZXItPnBtcngpOwogCQlwLT5wbXR4X3NpemUgPSB0M19tYzdfc2l6ZSgmYWRhcHRlci0+cG10eCk7CiAJCXAtPmNtX3NpemUgPSB0M19tYzdfc2l6ZSgmYWRhcHRlci0+Y20pOwpAQCAtMzcwNyw3ICszODg4LDE0IEBACiAJCSAgICAgICBFVEhfQUxFTik7CiAJCWluaXRfbGlua19jb25maWcoJnAtPmxpbmtfY29uZmlnLCBwLT5waHkuY2Fwcyk7CiAJCXAtPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnAtPnBoeSwgMSk7Ci0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkpCisKKwkJLyoKKwkJICogSWYgdGhlIFBIWSBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0cyBmb3IgbGluayBzdGF0dXMKKwkJICogY2hhbmdlcywgc2NoZWR1bGUgYSBzY2FuIG9mIHRoZSBhZGFwdGVyIGxpbmtzIGF0IGxlYXN0CisJCSAqIG9uY2UgYSBzZWNvbmQuCisJCSAqLworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmCisJCSAgICBhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID4gMTApCiAJCQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMTA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKaW5kZXggYjFiMjVjMy4uN2JmOTYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjZGVmaW5lIERSVl9ERVNDICJDaGVsc2lvIFQzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYjMiCiAvKiBEcml2ZXIgdmVyc2lvbiAqLwotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjEta28iCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEuMi1rbyIKIAogLyogRmlybXdhcmUgdmVyc2lvbiAqLwogI2RlZmluZSBGV19WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgRldfVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIEZXX1ZFUlNJT05fTUlOT1IgMQogI2RlZmluZSBGV19WRVJTSU9OX01JQ1JPIDAKICNlbmRpZgkJCQkvKiBfX0NIRUxTSU9fVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCA5ZDc3ODY5Li5mODdmOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogc3RhdGljIGludCB0M2IyX21hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwotCXVuc2lnbmVkIGludCBvZnQgPSBtYWMtPm9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQsIHN0b3JlOworCWludCBpZHggPSBtYWNpZHgobWFjKTsKIAl1MzIgdmFsOwogCiAJaWYgKCFtYWNpZHgobWFjKSkKQEAgLTE1OCwxNCArMTU5LDI4IEBACiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9QT1JUMUFDVElWRSwgMCk7CiAKKwkvKiBTdG9wIE5JQyB0cmFmZmljIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFRYVE9HR0xFUyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDApOworCS8qIEVuc3VyZSBUWCBkcmFpbnMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1RYX0NGRyArIG9mdCwgRl9UWFBBVVNFRU4sIDApOworCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX1JFU0VUX0NUUkwgKyBvZnQsIEZfTUFDX1JFU0VUXyk7CiAJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUkVTRVRfQ1RSTCArIG9mdCk7ICAgIC8qIGZsdXNoICovCiAKKwkvKiBTdG9yZSBBX1RQX1RYX0RST1BfQ0ZHX0NIMCAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJc3RvcmUgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisKIAltc2xlZXAoMTApOwogCisJLyogQ2hhbmdlIERST1BfQ0ZHIHRvIDB4YzAwMDAwMTEgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLCAweGMwMDAwMDExKTsKKwogCS8qIENoZWNrIGZvciB4Z20gUnggZmlmbyBlbXB0eSAqLworCS8qIEluY3JlYXNlZCBsb29wIGNvdW50IHRvIDEwMDAgZnJvbSA1IGNvdmVyIDFHIGFuZCAxMDBNYnBzIGNhc2UgKi8KIAlpZiAodDNfd2FpdF9vcF9kb25lKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRV9FUlJfQ05UICsgb2Z0LAotCQkJICAgIDB4ODAwMDAwMDAsIDEsIDUsIDIpKSB7CisJCQkgICAgMHg4MDAwMDAwMCwgMSwgMTAwMCwgMikpIHsKIAkJQ0hfRVJSKGFkYXAsICJNQUMgJWQgUnggZmlmbyBkcmFpbiBmYWlsZWRcbiIsCiAJCSAgICAgICBtYWNpZHgobWFjKSk7CiAJCXJldHVybiAtMTsKQEAgLTE5MSwxMSArMjA2LDIxIEBACiAJCSAgICAgRl9ESVNQQVVTRUZSQU1FUyB8IEZfRU4xNTM2QkZSQU1FUyB8CiAJCSAgICAgRl9STUZDUyB8IEZfRU5KVU1CTyB8IEZfRU5IQVNITUNBU1QpOwogCi0JaWYgKCFtYWNpZHgobWFjKSkKKwkvKiBSZXN0b3JlIHRoZSBEUk9QX0NGRyAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0RBVEEsIHN0b3JlKTsKKworCWlmICghaWR4KQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMEFDVElWRSk7CiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMUFDVElWRSk7CiAKKwkvKiByZS1lbmFibGUgbmljIHRyYWZmaWMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAxKTsKKworCS8qICBTZXQ6IHJlLWVuYWJsZSBOSUMgdHJhZmZpYyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNiw3ICsyNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKQogewogCXVuc2lnbmVkIGludCBpLCByZWcgPSBtYWMtPm9mZnNldCArIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xOwogCkBAIC0yNDcsNyArMjcyLDcgQEAKIAl0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xKTsJLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlZyA9IG1hYy0+b2Zmc2V0ICsgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfSElHSF8xOwogCkBAIC0zMzIsMTggKzM1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwgbXR1KTsKIAotCS8qCi0JICogQWRqdXN0IHRoZSBQQVVTRSBmcmFtZSB3YXRlcm1hcmtzLiAgV2UgYWx3YXlzIHNldCB0aGUgTFdNLCBhbmQgdGhlCi0JICogSFdNIG9ubHkgaWYgZmxvdy1jb250cm9sIGlzIGVuYWJsZWQuCi0JICovCi0JaHdtID0gbWF4X3QodW5zaWduZWQgaW50LCBNQUNfUlhGSUZPX1NJWkUgLSAzICogbXR1LAotCQkgICAgTUFDX1JYRklGT19TSVpFICogMzggLyAxMDApOwotCWh3bSA9IG1pbihod20sIE1BQ19SWEZJRk9fU0laRSAtIDgxOTIpOwotCWx3bSA9IG1pbigzICogKGludCltdHUsIE1BQ19SWEZJRk9fU0laRSAvIDQpOwotCiAJaWYgKGFkYXAtPnBhcmFtcy5yZXYgPj0gVDNfUkVWX0IyICYmCiAJICAgICh0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQpICYgRl9SWEVOKSkgewotCQlkaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhtYWMpOwogCQl2ID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQpOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0LAogCQkJCSBGX0VOSEFTSE1DQVNUIHwgRl9DT1BZQUxMRlJBTUVTLCBGX0RJU0JDQVNUKTsKQEAgLTM1NSwxNCArMzcxLDE0IEBACiAJCWlmICh0M193YWl0X29wX2RvbmUoYWRhcCwgcmVnICsgbWFjLT5vZmZzZXQsCiAJCQkJICAgIEZfUlhGSUZPX0VNUFRZLCAxLCAyMCwgNSkpIHsKIAkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBtYWMtPm9mZnNldCwgdik7Ci0JCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQkJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRSArIG1hYy0+b2Zmc2V0LAogCQkJCSBWX1JYTUFYUEtUU0laRShNX1JYTUFYUEtUU0laRSksCiAJCQkJIFZfUlhNQVhQS1RTSVpFKG10dSkpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQsIHYpOwotCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKIAl9IGVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwKIAkJCQkgVl9SWE1BWFBLVFNJWkUoTV9SWE1BWFBLVFNJWkUpLApAQCAtNDUyLDkgKzQ2OCwxMiBAQAogCiAJaWYgKHdoaWNoICYgTUFDX0RJUkVDVElPTl9UWCkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOwotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwgMHhjMGVkZTQwMSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLAorCQkJICAgICBhZGFwLT5wYXJhbXMucmV2ID09IFQzX1JFVl9DID8KKwkJCSAgICAgMHhjNGZmZmYwMSA6IDB4YzBlZGU0MDEpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX01PREUpOwotCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVFBfUElPX0RBVEEsIDEgPDwgaWR4LCAxIDw8IGlkeCk7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9UUF9QSU9fREFUQSwgMSA8PCBpZHgsCisJCQkJIGFkYXAtPnBhcmFtcy5yZXYgPT0gVDNfUkVWX0MgPyAwIDogMSA8PCBpZHgpOwogCiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgb2Z0LCBGX1RYRU4pOwogCkBAIC01MTAsMTUgKzUyOSwxMiBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwogCXN0cnVjdCBtYWNfc3RhdHMgKnMgPSAmbWFjLT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgdHhfdGNudCwgdHhfeGNudDsKLQl1bnNpZ25lZCBpbnQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfeGNudDsKKwl1NjQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gMDsKIAl0eF94Y250ID0gMTsJCS8qIEJ5IGRlZmF1bHQgdHhfeGNudCBpcyBtYWtpbmcgcHJvZ3Jlc3MgKi8KIAl0eF90Y250ID0gbWFjLT50eF90Y250OwkvKiBJZiB0eF9tY250IGlzIHByb2dyZXNzaW5nIGlnbm9yZSB0eF90Y250ICovCi0JcnhfeGNudCA9IDE7CQkvKiBCeSBkZWZhdWx0IHJ4X3hjbnQgaXMgbWFraW5nIHByb2dyZXNzICovCiAJaWYgKHR4X21jbnQgPT0gbWFjLT50eF9tY250ICYmIG1hYy0+cnhfcGF1c2UgPT0gcy0+cnhfcGF1c2UpIHsKIAkJdHhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAogCQkJCQkJQV9YR01fVFhfU1BJNF9TT1BfRU9QX0NOVCArCkBAIC01MjksMTEgKzU0NSwxMSBAQAogCQkJdHhfdGNudCA9IChHX1RYRFJPUENOVENIMFJDVkQodDNfcmVhZF9yZWcoYWRhcCwKIAkJCQkJCSAgICAgIEFfVFBfUElPX0RBVEEpKSk7CiAJCX0gZWxzZSB7Ci0JCQlnb3RvIHJ4Y2hlY2s7CisJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CiAJCW1hYy0+dG9nZ2xlX2NudCA9IDA7Ci0JCWdvdG8gcnhjaGVjazsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCh0eF90Y250ICE9IG1hYy0+dHhfdGNudCkgJiYgKG1hYy0+dHhfeGNudCA9PSAwKSkgewpAQCAtNTQ2LDIzICs1NjIsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJbWFjLT50b2dnbGVfY250ID0gMDsKLQkJZ290byByeGNoZWNrOwotCX0KLQotcnhjaGVjazoKLQlpZiAocnhfbWNudCAhPSBtYWMtPnJ4X21jbnQpIHsKLQkJcnhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAotCQkJCQkJQV9YR01fUlhfU1BJNF9TT1BfRU9QX0NOVCArCi0JCQkJCQltYWMtPm9mZnNldCkpKSArCi0JCQkJCQkocy0+cnhfZmlmb19vdmZsIC0KLQkJCQkJCSBtYWMtPnJ4X29jbnQpOwotCQltYWMtPnJ4X29jbnQgPSBzLT5yeF9maWZvX292Zmw7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0JaWYgKG1hYy0+cnhfbWNudCAhPSBzLT5yeF9mcmFtZXMgJiYgcnhfeGNudCA9PSAwICYmCi0JICAgIG1hYy0+cnhfeGNudCA9PSAwKSB7Ci0JCXN0YXR1cyA9IDI7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTcwLDggKzU2OSw2IEBACiAJbWFjLT50eF90Y250ID0gdHhfdGNudDsKIAltYWMtPnR4X3hjbnQgPSB0eF94Y250OwogCW1hYy0+dHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQltYWMtPnJ4X3hjbnQgPSByeF94Y250OwotCW1hYy0+cnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKIAltYWMtPnJ4X3BhdXNlID0gcy0+cnhfcGF1c2U7CiAJaWYgKHN0YXR1cyA9PSAxKSB7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggN2NlMzA1My4uODYxYzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQlwcmludGsodmVyc2lvbik7CiAKIAlpZiAoYmRldikKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBiZGV2LT5idXNfaWQpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIGRldl9uYW1lKGJkZXYpKTsKIAllbHNlIHsKIAkJaSA9IDA7CiAJCWRldiA9IHJvb3RfbGFuY2VfZGV2OwpAQCAtMTEwNSwxMCArMTEwNSwxMCBAQAogCiAJCXN0YXJ0ID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5zdGFydDsKIAkJbGVuID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGJkZXYtPmJ1c19pZCkpIHsKKwkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoYmRldikpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IFVuYWJsZSB0byByZXNlcnZlIE1NSU8gcmVzb3VyY2VcbiIsCi0JCQkgICAgICAgYmRldi0+YnVzX2lkKTsKKwkJCSAgICAgICBkZXZfbmFtZShiZGV2KSk7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIGVycl9vdXRfZGV2OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA2NDQ1Y2VkZC4uNGVjMDU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0yOTM3LDcgKzI5MzcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAoaW50KShicC0+cmN2X2J1ZnNfdG9fcG9zdCk7IGkrKykKIAkJZm9yIChqID0gMDsgKGkgKyBqKSA8IChpbnQpUElfUkNWX0RBVEFfS19OVU1fRU5UUklFUzsgaiArPSBicC0+cmN2X2J1ZnNfdG9fcG9zdCkKIAkJewotCQkJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYiA9IF9fZGV2X2FsbG9jX3NrYihORVdfU0tCX1NJWkUsIEdGUF9OT0lPKTsKKwkJCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBfX25ldGRldl9hbGxvY19za2IoYnAtPmRldiwgTkVXX1NLQl9TSVpFLCBHRlBfTk9JTyk7CiAJCQlpZiAoIW5ld3NrYikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWJwLT5kZXNjcl9ibG9ja192aXJ0LT5yY3ZfZGF0YVtpK2pdLmxvbmdfMCA9ICh1MzIpIChQSV9SQ1ZfREVTQ1JfTV9TT1AgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggZTRjZWY0OS4uMzU3ZjU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC01NjYsNiArNTY2LDE4IEBACiAgICAgb3V0dyhDU1IwLCBERVBDQV9BRERSKTtcCiAgICAgb3V0dyhTVE9QLCBERVBDQV9EQVRBKQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRlcGNhX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBkZXBjYV9vcGVuLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBkZXBjYV9zdGFydF94bWl0LAorCS5uZG9fc3RvcCAJCT0gZGVwY2FfY2xvc2UsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19kb19pb2N0bCAJCT0gZGVwY2FfaW9jdGwsCisJLm5kb190eF90aW1lb3V0IAk9IGRlcGNhX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRlcGNhX2h3X2luaXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHA7CkBAIC02MDYsOCArNjE4LDggQEAKIAlpZiAoIW1lbV9zdGFydCB8fCBscC0+YWRhcHRlciA8IERFUENBIHx8IGxwLT5hZGFwdGVyID49dW5rbm93bikKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXByaW50ayAoIiVzOiAlcyBhdCAweCUwNGx4IiwKLQkgICAgICAgIGRldmljZS0+YnVzX2lkLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOworCXByaW50aygiJXM6ICVzIGF0IDB4JTA0bHgiLAorCSAgICAgICBkZXZfbmFtZShkZXZpY2UpLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOwogCiAJc3dpdGNoIChscC0+ZGVwY2FfYnVzKSB7CiAjaWZkZWYgQ09ORklHX01DQQpAQCAtNjY5LDcgKzY4MSw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCXNwcmludGYobHAtPmFkYXB0ZXJfbmFtZSwgIiVzICglcykiLAotCQlkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBkZXZpY2UtPmJ1c19pZCk7CisJCWRlcGNhX3NpZ25hdHVyZVtscC0+YWRhcHRlcl0sIGRldl9uYW1lKGRldmljZSkpOwogCXN0YXR1cyA9IC1FQlVTWTsKIAogCS8qIEluaXRpYWxpc2F0aW9uIEJsb2NrICovCkBAIC03OTMsMTIgKzgwNSw3IEBACiAJfQogCiAJLyogVGhlIERFUENBLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmRlcGNhX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZGVwY2Ffc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSAmZGVwY2FfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwgPSAmZGVwY2FfaW9jdGw7Ci0JZGV2LT50eF90aW1lb3V0ID0gZGVwY2FfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZGVwY2FfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogCWRldi0+bWVtX3N0YXJ0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggYmNmOTI5MS4uMjU0ZWM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTkzMCwxMyArOTMwLDE1IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKIAlib2FyZF9pbmZvX3QgKmRiID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW50X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHJlZ19zYXZlOwogCiAJZG05MDAwX2RiZyhkYiwgMywgImVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBBIHJlYWwgaW50ZXJydXB0IGNvbWluZyAqLwogCi0Jc3Bpbl9sb2NrKCZkYi0+bG9jayk7CisJLyogaG9sZGVycyBvZiBkYi0+bG9jayBtdXN0IGFsd2F5cyBibG9jayBJUlFzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTYXZlIHByZXZpb3VzIHJlZ2lzdGVyIGFkZHJlc3MgKi8KIAlyZWdfc2F2ZSA9IHJlYWRiKGRiLT5pb19hZGRyKTsKQEAgLTk3Miw3ICs5NzQsNyBAQAogCS8qIFJlc3RvcmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLwogCXdyaXRlYihyZWdfc2F2ZSwgZGItPmlvX2FkZHIpOwogCi0Jc3Bpbl91bmxvY2soJmRiLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG5ldC5jIGIvZHJpdmVycy9uZXQvZG5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9kbmV0LmMKQEAgLTAsMCArMSw5OTQgQEAKKy8qCisgKiBEYXZlIERORVQgRXRoZXJuZXQgQ29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2ZSBTLnIubC4gPHd3dy5kYXZlLmV1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcyBMdGQsIDx5YW5va0BlbWNyYWZ0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJkbmV0LmgiCisKKyN1bmRlZiBERUJVRworCisvKiBmdW5jdGlvbiBmb3IgcmVhZGluZyBpbnRlcm5hbCBNQUMgcmVnaXN0ZXIgKi8KK3UxNiBkbmV0X3JlYWR3X21hYyhzdHJ1Y3QgZG5ldCAqYnAsIHUxNiByZWcpCit7CisJdTE2IGRhdGFfcmVhZDsKKworCS8qIGlzc3VlIGEgcmVhZCAqLworCWRuZXRfd3JpdGVsKGJwLCByZWcsIE1BQ1JFR19BRERSKTsKKworCS8qIHNpbmNlIGEgcmVhZC93cml0ZSBvcCB0byB0aGUgTUFDIGlzIHZlcnkgc2xvdywKKwkgKiB3ZSBtdXN0IHdhaXQgYmVmb3JlIHJlYWRpbmcgdGhlIGRhdGEgKi8KKwluZGVsYXkoNTAwKTsKKworCS8qIHJlYWQgZGF0YSByZWFkIGZyb20gdGhlIE1BQyByZWdpc3RlciAqLworCWRhdGFfcmVhZCA9IGRuZXRfcmVhZGwoYnAsIE1BQ1JFR19EQVRBKTsKKworCS8qIGFsbCBkb25lICovCisJcmV0dXJuIGRhdGFfcmVhZDsKK30KKworLyogZnVuY3Rpb24gZm9yIHdyaXRpbmcgaW50ZXJuYWwgTUFDIHJlZ2lzdGVyICovCit2b2lkIGRuZXRfd3JpdGV3X21hYyhzdHJ1Y3QgZG5ldCAqYnAsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJLyogbG9hZCBkYXRhIHRvIHdyaXRlICovCisJZG5ldF93cml0ZWwoYnAsIHZhbCwgTUFDUkVHX0RBVEEpOworCisJLyogaXNzdWUgYSB3cml0ZSAqLworCWRuZXRfd3JpdGVsKGJwLCByZWcgfCBETkVUX0lOVEVSTkFMX1dSSVRFLCBNQUNSRUdfQUREUik7CisKKwkvKiBzaW5jZSBhIHJlYWQvd3JpdGUgb3AgdG8gdGhlIE1BQyBpcyB2ZXJ5IHNsb3csCisJICogd2UgbXVzdCB3YWl0IGJlZm9yZSBleGl0aW5nICovCisJbmRlbGF5KDUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZG5ldF9zZXRfaHdhZGRyKHN0cnVjdCBkbmV0ICpicCkKK3sKKwl1MTYgdG1wOworCisJdG1wID0gY3B1X3RvX2JlMTYoKigodTE2ICopIGJwLT5kZXYtPmRldl9hZGRyKSk7CisJZG5ldF93cml0ZXdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX01BQ19BRERSXzBfUkVHLCB0bXApOworCXRtcCA9IGNwdV90b19iZTE2KCooKHUxNiAqKSAoYnAtPmRldi0+ZGV2X2FkZHIgKyAyKSkpOworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9NQUNfQUREUl8xX1JFRywgdG1wKTsKKwl0bXAgPSBjcHVfdG9fYmUxNigqKCh1MTYgKikgKGJwLT5kZXYtPmRldl9hZGRyICsgNCkpKTsKKwlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfTUFDX0FERFJfMl9SRUcsIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbmV0X2dldF9od2FkZHIoc3RydWN0IGRuZXQgKmJwKQoreworCXUxNiB0bXA7CisJdTggYWRkcls2XTsKKworCS8qCisJICogZnJvbSBNQUMgZG9jczoKKwkgKiAiTm90ZSB0aGF0IHRoZSBNQUMgYWRkcmVzcyBpcyBzdG9yZWQgaW4gdGhlIHJlZ2lzdGVycyBpbiBIZXhhZGVjaW1hbAorCSAqIGZvcm0uIEZvciBleGFtcGxlLCB0byBzZXQgdGhlIE1BQyBBZGRyZXNzIHRvOiBBQy1ERS00OC0wMC0wMC04MAorCSAqIHdvdWxkIHJlcXVpcmUgd3JpdGluZyAweEFDIChvY3RldCAwKSB0byBhZGRyZXNzIDB4MEIgKGhpZ2ggYnl0ZSBvZgorCSAqIE1hY19hZGRyWzE1OjBdKSwgMHhERSAob2N0ZXQgMSkgdG8gYWRkcmVzcyAweDBBIChMb3cgYnl0ZSBvZgorCSAqIE1hY19hZGRyWzE1OjBdKSwgMHg0OCAob2N0ZXQgMikgdG8gYWRkcmVzcyAweDBEIChoaWdoIGJ5dGUgb2YKKwkgKiBNYWNfYWRkclsxNTowXSksIDB4MDAgKG9jdGV0IDMpIHRvIGFkZHJlc3MgMHgwQyAoTG93IGJ5dGUgb2YKKwkgKiBNYWNfYWRkclsxNTowXSksIDB4MDAgKG9jdGV0IDQpIHRvIGFkZHJlc3MgMHgwRiAoaGlnaCBieXRlIG9mCisJICogTWFjX2FkZHJbMTU6MF0pLCBhbmQgMHg4MCAob2N0ZXQgNSkgdG8gYWRkcmVzcyAqIDB4MEUgKExvdyBieXRlIG9mCisJICogTWFjX2FkZHJbMTU6MF0pLgorCSAqLworCXRtcCA9IGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX01BQ19BRERSXzBfUkVHKTsKKwkqKCh1MTYgKikgYWRkcikgPSBiZTE2X3RvX2NwdSh0bXApOworCXRtcCA9IGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX01BQ19BRERSXzFfUkVHKTsKKwkqKCh1MTYgKikgKGFkZHIgKyAyKSkgPSBiZTE2X3RvX2NwdSh0bXApOworCXRtcCA9IGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX01BQ19BRERSXzJfUkVHKTsKKwkqKCh1MTYgKikgKGFkZHIgKyA0KSkgPSBiZTE2X3RvX2NwdSh0bXApOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpCisJCW1lbWNweShicC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgc2l6ZW9mKGFkZHIpKTsKK30KKworc3RhdGljIGludCBkbmV0X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXN0cnVjdCBkbmV0ICpicCA9IGJ1cy0+cHJpdjsKKwl1MTYgdmFsdWU7CisKKwl3aGlsZSAoIShkbmV0X3JlYWR3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DVExfUkVHKQorCQkJCSYgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DTURfRklOKSkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBvbmx5IDUgYml0cyBhbGxvd2VkIGZvciBwaHktYWRkciBhbmQgcmVnX29mZnNldCAqLworCW1paV9pZCAmPSAweDFmOworCXJlZ251bSAmPSAweDFmOworCisJLyogcHJlcGFyZSByZWdfdmFsdWUgZm9yIGEgcmVhZCAqLworCXZhbHVlID0gKG1paV9pZCA8PCA4KTsKKwl2YWx1ZSB8PSByZWdudW07CisKKwkvKiB3cml0ZSBjb250cm9sIHdvcmQgKi8KKwlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ1RMX1JFRywgdmFsdWUpOworCisJLyogd2FpdCBmb3IgZW5kIG9mIHRyYW5zZmVyICovCisJd2hpbGUgKCEoZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ1RMX1JFRykKKwkJCQkmIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ01EX0ZJTikpCisJCWNwdV9yZWxheCgpOworCisJdmFsdWUgPSBkbmV0X3JlYWR3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19EQVRfUkVHKTsKKworCXByX2RlYnVnKCJtZGlvX3JlYWQgJTAyeDolMDJ4IDwtICUwNHhcbiIsIG1paV9pZCwgcmVnbnVtLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sCisJCQkgICB1MTYgdmFsdWUpCit7CisJc3RydWN0IGRuZXQgKmJwID0gYnVzLT5wcml2OworCXUxNiB0bXA7CisKKwlwcl9kZWJ1ZygibWRpb193cml0ZSAlMDJ4OiUwMnggPC0gJTA0eFxuIiwgbWlpX2lkLCByZWdudW0sIHZhbHVlKTsKKworCXdoaWxlICghKGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NUTF9SRUcpCisJCQkJJiBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NNRF9GSU4pKQorCQljcHVfcmVsYXgoKTsKKworCS8qIHByZXBhcmUgZm9yIGEgd3JpdGUgb3BlcmF0aW9uICovCisJdG1wID0gKDEgPDwgMTMpOworCisJLyogb25seSA1IGJpdHMgYWxsb3dlZCBmb3IgcGh5LWFkZHIgYW5kIHJlZ19vZmZzZXQgKi8KKwltaWlfaWQgJj0gMHgxZjsKKwlyZWdudW0gJj0gMHgxZjsKKworCS8qIG9ubHkgMTYgYml0cyBvbiBkYXRhICovCisJdmFsdWUgJj0gMHhmZmZmOworCisJLyogcHJlcGFyZSByZWdfdmFsdWUgZm9yIGEgd3JpdGUgKi8KKwl0bXAgfD0gKG1paV9pZCA8PCA4KTsKKwl0bXAgfD0gcmVnbnVtOworCisJLyogd3JpdGUgZGF0YSB0byB3cml0ZSBmaXJzdCAqLworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19EQVRfUkVHLCB2YWx1ZSk7CisKKwkvKiB3cml0ZSBjb250cm9sIHdvcmQgKi8KKwlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ1RMX1JFRywgdG1wKTsKKworCXdoaWxlICghKGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NUTF9SRUcpCisJCQkJJiBETkVUX0lOVEVSTkFMX0dNSUlfTU5HX0NNRF9GSU4pKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRuZXRfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbmV0X2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGJwLT5waHlfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIG1vZGVfcmVnLCBjdGxfcmVnOworCisJaW50IHN0YXR1c19jaGFuZ2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisKKwltb2RlX3JlZyA9IGRuZXRfcmVhZHdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX01PREVfUkVHKTsKKwljdGxfcmVnID0gZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JFRyk7CisKKwlpZiAocGh5ZGV2LT5saW5rKSB7CisJCWlmIChicC0+ZHVwbGV4ICE9IHBoeWRldi0+ZHVwbGV4KSB7CisJCQlpZiAocGh5ZGV2LT5kdXBsZXgpCisJCQkJY3RsX3JlZyAmPQorCQkJCSAgICB+KERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0VOQUJMRUhBTEZEVVApOworCQkJZWxzZQorCQkJCWN0bF9yZWcgfD0KKwkJCQkgICAgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRU5BQkxFSEFMRkRVUDsKKworCQkJYnAtPmR1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCQkJc3RhdHVzX2NoYW5nZSA9IDE7CisJCX0KKworCQlpZiAoYnAtPnNwZWVkICE9IHBoeWRldi0+c3BlZWQpIHsKKwkJCXN0YXR1c19jaGFuZ2UgPSAxOworCQkJc3dpdGNoIChwaHlkZXYtPnNwZWVkKSB7CisJCQljYXNlIDEwMDA6CisJCQkJbW9kZV9yZWcgfD0gRE5FVF9JTlRFUk5BTF9NT0RFX0dCSVRFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAwOgorCQkJY2FzZSAxMDoKKwkJCQltb2RlX3JlZyAmPSB+RE5FVF9JTlRFUk5BTF9NT0RFX0dCSVRFTjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiJXM6IEFjayEgIFNwZWVkICglZCkgaXMgbm90ICIKKwkJCQkgICAgICAgIjEwLzEwMC8xMDAwIVxuIiwgZGV2LT5uYW1lLAorCQkJCSAgICAgICBwaHlkZXYtPnNwZWVkKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJwLT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJCX0KKwl9CisKKwlpZiAocGh5ZGV2LT5saW5rICE9IGJwLT5saW5rKSB7CisJCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJCW1vZGVfcmVnIHw9CisJCQkgICAgKERORVRfSU5URVJOQUxfTU9ERV9SWEVOIHwgRE5FVF9JTlRFUk5BTF9NT0RFX1RYRU4pOworCQl9IGVsc2UgeworCQkJbW9kZV9yZWcgJj0KKwkJCSAgICB+KERORVRfSU5URVJOQUxfTU9ERV9SWEVOIHwKKwkJCSAgICAgIERORVRfSU5URVJOQUxfTU9ERV9UWEVOKTsKKwkJCWJwLT5zcGVlZCA9IDA7CisJCQlicC0+ZHVwbGV4ID0gLTE7CisJCX0KKwkJYnAtPmxpbmsgPSBwaHlkZXYtPmxpbms7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJaWYgKHN0YXR1c19jaGFuZ2UpIHsKKwkJZG5ldF93cml0ZXdfbWFjKGJwLCBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SRUcsIGN0bF9yZWcpOworCQlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfTU9ERV9SRUcsIG1vZGVfcmVnKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1c19jaGFuZ2UpIHsKKwkJaWYgKHBoeWRldi0+bGluaykKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwICglZC8lcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkLAorCQkJICAgICAgIERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZG5ldCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOworCWludCBwaHlfYWRkcjsKKworCS8qIGZpbmQgdGhlIGZpcnN0IHBoeSAqLworCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykgeworCQlpZiAoYnAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdKSB7CisJCQlwaHlkZXYgPSBicC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcGh5ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogVE9ETyA6IGFkZCBwaW5faXJxICovCisKKwkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCisJaWYgKGJwLT5jYXBhYmlsaXRpZXMgJiBETkVUX0hBU19STUlJKSB7CisJCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKKwkJCQkgICAgICZkbmV0X2hhbmRsZV9saW5rX2NoYW5nZSwgMCwKKwkJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKTsKKwl9IGVsc2UgeworCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCisJCQkJICAgICAmZG5ldF9oYW5kbGVfbGlua19jaGFuZ2UsIDAsCisJCQkJICAgICBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwl9CisKKwlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJfQorCisJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KKwlpZiAoYnAtPmNhcGFiaWxpdGllcyAmIERORVRfSEFTX0dJR0FCSVQpCisJCXBoeWRldi0+c3VwcG9ydGVkICY9IFBIWV9HQklUX0ZFQVRVUkVTOworCWVsc2UKKwkJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gUEhZX0JBU0lDX0ZFQVRVUkVTOworCisJcGh5ZGV2LT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0FzeW1fUGF1c2UgfCBTVVBQT1JURURfUGF1c2U7CisKKwlwaHlkZXYtPmFkdmVydGlzaW5nID0gcGh5ZGV2LT5zdXBwb3J0ZWQ7CisKKwlicC0+bGluayA9IDA7CisJYnAtPnNwZWVkID0gMDsKKwlicC0+ZHVwbGV4ID0gLTE7CisJYnAtPnBoeV9kZXYgPSBwaHlkZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbmV0X21paV9pbml0KHN0cnVjdCBkbmV0ICpicCkKK3sKKwlpbnQgZXJyLCBpOworCisJYnAtPm1paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7CisJaWYgKGJwLT5taWlfYnVzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYnAtPm1paV9idXMtPm5hbWUgPSAiZG5ldF9taWlfYnVzIjsKKwlicC0+bWlpX2J1cy0+cmVhZCA9ICZkbmV0X21kaW9fcmVhZDsKKwlicC0+bWlpX2J1cy0+d3JpdGUgPSAmZG5ldF9tZGlvX3dyaXRlOworCWJwLT5taWlfYnVzLT5yZXNldCA9ICZkbmV0X21kaW9fcmVzZXQ7CisKKwlzbnByaW50ZihicC0+bWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgMCk7CisKKwlicC0+bWlpX2J1cy0+cHJpdiA9IGJwOworCisJYnAtPm1paV9idXMtPmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkgKiBQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOworCWlmICghYnAtPm1paV9idXMtPmlycSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQorCQlicC0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShicC0+ZGV2LCBicC0+bWlpX2J1cyk7CisKKwlpZiAobWRpb2J1c19yZWdpc3RlcihicC0+bWlpX2J1cykpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvX2lycTsKKwl9CisKKwlpZiAoZG5ldF9taWlfcHJvYmUoYnAtPmRldikgIT0gMCkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1czsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF91bnJlZ2lzdGVyX2J1czoKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnAtPm1paV9idXMpOworZXJyX291dF9mcmVlX21kaW9faXJxOgorCWtmcmVlKGJwLT5taWlfYnVzLT5pcnEpOworZXJyX291dDoKKwltZGlvYnVzX2ZyZWUoYnAtPm1paV9idXMpOworCXJldHVybiBlcnI7Cit9CisKKy8qIEZvciBOZXB0dW5lIGJvYXJkOiBMSU5LMTAwMCBhcyBMaW5rIExFRCBhbmQgVFggYXMgYWN0aXZpdHkgTEVEICovCitpbnQgZG5ldF9waHlfbWFydmVsbF9maXh1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCAweDE4LCAweDQxNDgpOworfQorCitzdGF0aWMgdm9pZCBkbmV0X3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgZG5ldCAqYnApCit7CisJdTMyIF9faW9tZW0gKnJlZyA9IGJwLT5yZWdzICsgRE5FVF9SWF9QS1RfSUdOUl9DTlQ7CisJdTMyICpwID0gJmJwLT5od19zdGF0cy5yeF9wa3RfaWducjsKKwl1MzIgKmVuZCA9ICZicC0+aHdfc3RhdHMucnhfYnl0ZSArIDE7CisKKwlXQVJOX09OKCh1bnNpZ25lZCBsb25nKShlbmQgLSBwIC0gMSkgIT0KKwkJKERORVRfUlhfQllURV9DTlQgLSBETkVUX1JYX1BLVF9JR05SX0NOVCkgLyA0KTsKKworCWZvciAoOyBwIDwgZW5kOyBwKyssIHJlZysrKQorCQkqcCArPSByZWFkbChyZWcpOworCisJcmVnID0gYnAtPnJlZ3MgKyBETkVUX1RYX1VOSUNBU1RfQ05UOworCXAgPSAmYnAtPmh3X3N0YXRzLnR4X3VuaWNhc3Q7CisJZW5kID0gJmJwLT5od19zdGF0cy50eF9ieXRlICsgMTsKKworCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpKGVuZCAtIHAgLSAxKSAhPQorCQkoRE5FVF9UWF9CWVRFX0NOVCAtIERORVRfVFhfVU5JQ0FTVF9DTlQpIC8gNCk7CisKKwlmb3IgKDsgcCA8IGVuZDsgcCsrLCByZWcrKykKKwkJKnAgKz0gcmVhZGwocmVnKTsKK30KKworc3RhdGljIGludCBkbmV0X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBkbmV0ICpicCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZG5ldCwgbmFwaSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CisJaW50IG5wYWNrZXRzID0gMDsKKwl1bnNpZ25lZCBpbnQgcGt0X2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCAqZGF0YV9wdHI7CisJdTMyIGludF9lbmFibGU7CisJdTMyIGNtZF93b3JkOworCWludCBpOworCisJd2hpbGUgKG5wYWNrZXRzIDwgYnVkZ2V0KSB7CisJCS8qCisJCSAqIGJyZWFrIG91dCBvZiB3aGlsZSBsb29wIGlmIHRoZXJlIGFyZSBubyBtb3JlCisJCSAqIHBhY2tldHMgd2FpdGluZworCQkgKi8KKwkJaWYgKCEoZG5ldF9yZWFkbChicCwgUlhfRklGT19XQ05UKSA+PiAxNikpIHsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCQlpbnRfZW5hYmxlID0gZG5ldF9yZWFkbChicCwgSU5UUl9FTkIpOworCQkJaW50X2VuYWJsZSB8PSBETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9BRjsKKwkJCWRuZXRfd3JpdGVsKGJwLCBpbnRfZW5hYmxlLCBJTlRSX0VOQik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNtZF93b3JkID0gZG5ldF9yZWFkbChicCwgUlhfTEVOX0ZJRk8pOworCQlwa3RfbGVuID0gY21kX3dvcmQgJiAweEZGRkY7CisKKwkJaWYgKGNtZF93b3JkICYgMHhERjE4MDAwMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgcGFja2V0IHJlY2VpdmUgZXJyb3IgJXhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGNtZF93b3JkKTsKKworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4gKyA1KTsKKwkJaWYgKHNrYiAhPSBOVUxMKSB7CisJCQkvKiBBbGlnbiBJUCBvbiAxNiBieXRlIGJvdW5kYXJpZXMgKi8KKwkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCQkvKgorCQkJICogJ3NrYl9wdXQoKScgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiBza19idWZmCisJCQkgKiBkYXRhIGFyZWEuCisJCQkgKi8KKwkJCWRhdGFfcHRyID0gKHVuc2lnbmVkIGludCAqKXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKKwkJCWZvciAoaSA9IDA7IGkgPCAocGt0X2xlbiArIDMpID4+IDI7IGkrKykKKwkJCQkqZGF0YV9wdHIrKyA9IGRuZXRfcmVhZGwoYnAsIFJYX0RBVEFfRklGTyk7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCW5wYWNrZXRzKys7CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkgICAgICAgIiVzOiBObyBtZW1vcnkgdG8gYWxsb2NhdGUgYSBza19idWZmIG9mICIKKwkJCSAgICAgICAic2l6ZSAldS5cbiIsIGRldi0+bmFtZSwgcGt0X2xlbik7CisJfQorCisJYnVkZ2V0IC09IG5wYWNrZXRzOworCisJaWYgKG5wYWNrZXRzIDwgYnVkZ2V0KSB7CisJCS8qIFdlIHByb2Nlc3NlZCBhbGwgcGFja2V0cyBhdmFpbGFibGUuICBUZWxsIE5BUEkgaXQgY2FuCisJCSAqIHN0b3AgcG9sbGluZyB0aGVuIHJlLWVuYWJsZSByeCBpbnRlcnJ1cHRzICovCisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWludF9lbmFibGUgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX0VOQik7CisJCWludF9lbmFibGUgfD0gRE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPQUY7CisJCWRuZXRfd3JpdGVsKGJwLCBpbnRfZW5hYmxlLCBJTlRSX0VOQik7CisJCXJldHVybiAwOworCX0KKworCS8qIFRoZXJlIGFyZSBzdGlsbCBwYWNrZXRzIHdhaXRpbmcgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IGRuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGludF9zcmMsIGludF9lbmFibGUsIGludF9jdXJyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisKKwkvKiByZWFkIGFuZCBjbGVhciB0aGUgRE5FVCBpcnEgKGNsZWFyIG9uIHJlYWQpICovCisJaW50X3NyYyA9IGRuZXRfcmVhZGwoYnAsIElOVFJfU1JDKTsKKwlpbnRfZW5hYmxlID0gZG5ldF9yZWFkbChicCwgSU5UUl9FTkIpOworCWludF9jdXJyZW50ID0gaW50X3NyYyAmIGludF9lbmFibGU7CisKKwkvKiByZXN0YXJ0IHRoZSBxdWV1ZSBpZiB3ZSBoYWQgc3RvcHBlZCBpdCBmb3IgVFggZmlmbyBhbG1vc3QgZnVsbCAqLworCWlmIChpbnRfY3VycmVudCAmIERORVRfSU5UUl9TUkNfVFhfRklGT0FFKSB7CisJCWludF9lbmFibGUgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX0VOQik7CisJCWludF9lbmFibGUgJj0gfkRORVRfSU5UUl9FTkJfVFhfRklGT0FFOworCQlkbmV0X3dyaXRlbChicCwgaW50X2VuYWJsZSwgSU5UUl9FTkIpOworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCWhhbmRsZWQgPSAxOworCX0KKworCS8qIFJYIEZJRk8gZXJyb3IgY2hlY2tpbmcgKi8KKwlpZiAoaW50X2N1cnJlbnQgJgorCSAgICAoRE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPRkYgfCBETkVUX0lOVFJfU1JDX1JYX0RBVEFGSUZPRkYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJYIGZpZm8gZXJyb3IgJXgsIGlycSAleFxuIiwgX19mdW5jX18sCisJCSAgICAgICBkbmV0X3JlYWRsKGJwLCBSWF9TVEFUVVMpLCBpbnRfY3VycmVudCk7CisJCS8qIHdlIGNhbiBvbmx5IGZsdXNoIHRoZSBSWCBGSUZPcyAqLworCQlkbmV0X3dyaXRlbChicCwgRE5FVF9TWVNfQ1RMX1JYRklGT0ZMVVNILCBTWVNfQ1RMKTsKKwkJbmRlbGF5KDUwMCk7CisJCWRuZXRfd3JpdGVsKGJwLCAwLCBTWVNfQ1RMKTsKKwkJaGFuZGxlZCA9IDE7CisJfQorCisJLyogVFggRklGTyBlcnJvciBjaGVja2luZyAqLworCWlmIChpbnRfY3VycmVudCAmCisJICAgIChETkVUX0lOVFJfU1JDX1RYX0ZJRk9GVUxMIHwgRE5FVF9JTlRSX1NSQ19UWF9ESVNDRlJNKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUWCBmaWZvIGVycm9yICV4LCBpcnEgJXhcbiIsIF9fZnVuY19fLAorCQkgICAgICAgZG5ldF9yZWFkbChicCwgVFhfU1RBVFVTKSwgaW50X2N1cnJlbnQpOworCQkvKiB3ZSBjYW4gb25seSBmbHVzaCB0aGUgVFggRklGT3MgKi8KKwkJZG5ldF93cml0ZWwoYnAsIERORVRfU1lTX0NUTF9UWEZJRk9GTFVTSCwgU1lTX0NUTCk7CisJCW5kZWxheSg1MDApOworCQlkbmV0X3dyaXRlbChicCwgMCwgU1lTX0NUTCk7CisJCWhhbmRsZWQgPSAxOworCX0KKworCWlmIChpbnRfY3VycmVudCAmIERORVRfSU5UUl9TUkNfUlhfQ01ERklGT0FGKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgeworCQkJLyoKKwkJCSAqIFRoZXJlJ3Mgbm8gcG9pbnQgdGFraW5nIGFueSBtb3JlIGludGVycnVwdHMKKwkJCSAqIHVudGlsIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSBidWZmZXJzCisJCQkgKi8KKwkJCS8qIERpc2FibGUgUnggaW50ZXJydXB0cyBhbmQgc2NoZWR1bGUgTkFQSSBwb2xsICovCisJCQlpbnRfZW5hYmxlID0gZG5ldF9yZWFkbChicCwgSU5UUl9FTkIpOworCQkJaW50X2VuYWJsZSAmPSB+RE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPQUY7CisJCQlkbmV0X3dyaXRlbChicCwgaW50X2VuYWJsZSwgSU5UUl9FTkIpOworCQkJX19uYXBpX3NjaGVkdWxlKCZicC0+bmFwaSk7CisJCX0KKwkJaGFuZGxlZCA9IDE7CisJfQorCisJaWYgKCFoYW5kbGVkKQorCQlwcl9kZWJ1ZygiJXM6IGlycSAleCByZW1haW5zXG4iLCBfX2Z1bmNfXywgaW50X2N1cnJlbnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbmV0X3ByaW50X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBrOworCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiZGF0YToiKTsKKwlmb3IgKGsgPSAwOyBrIDwgc2tiLT5sZW47IGsrKykKKwkJcHJpbnRrKCIgJTAyeCIsICh1bnNpZ25lZCBpbnQpc2tiLT5kYXRhW2tdKTsKKwlwcmludGsoIlxuIik7Cit9CisjZWxzZQorI2RlZmluZSBkbmV0X3ByaW50X3NrYihza2IpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZG5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKwlzdHJ1Y3QgZG5ldCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB0eF9zdGF0dXMsIGlycV9lbmFibGU7CisJdW5zaWduZWQgaW50IGxlbiwgaSwgdHhfY21kLCB3cnN6OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpidWZwOworCisJdHhfc3RhdHVzID0gZG5ldF9yZWFkbChicCwgVFhfU1RBVFVTKTsKKworCXByX2RlYnVnKCJzdGFydF94bWl0OiBsZW4gJXUgaGVhZCAlcCBkYXRhICVwXG4iLAorCSAgICAgICBza2ItPmxlbiwgc2tiLT5oZWFkLCBza2ItPmRhdGEpOworCWRuZXRfcHJpbnRfc2tiKHNrYik7CisKKwkvKiBmcmFtZSBzaXplICh3b3JkcykgKi8KKwlsZW4gPSAoc2tiLT5sZW4gKyAzKSA+PiAyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisKKwl0eF9zdGF0dXMgPSBkbmV0X3JlYWRsKGJwLCBUWF9TVEFUVVMpOworCisJYnVmcCA9ICh1bnNpZ25lZCBpbnQgKikoKCh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEpICYgfjB4M1VMKTsKKwl3cnN6ID0gKHUzMikgc2tiLT5sZW4gKyAzOworCXdyc3ogKz0gKCh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEpICYgMHgzOworCXdyc3ogPj49IDI7CisJdHhfY21kID0gKCgoKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSkpICYgMHgwMykgPDwgMTYpIHwgKHUzMikgc2tiLT5sZW47CisKKwkvKiBjaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgKi8KKwlpZiAod3JzeiA8IChETkVUX0ZJRk9fU0laRSAtIGRuZXRfcmVhZGwoYnAsIFRYX0ZJRk9fV0NOVCkpKSB7CisJCWZvciAoaSA9IDA7IGkgPCB3cnN6OyBpKyspCisJCQlkbmV0X3dyaXRlbChicCwgKmJ1ZnArKywgVFhfREFUQV9GSUZPKTsKKworCQkvKgorCQkgKiBpbmZvcm0gTUFDIHRoYXQgYSBwYWNrZXQncyB3cml0dGVuIGFuZCByZWFkeSB0byBiZQorCQkgKiBzaGlwcGVkIG91dAorCQkgKi8KKwkJZG5ldF93cml0ZWwoYnAsIHR4X2NtZCwgVFhfTEVOX0ZJRk8pOworCX0KKworCWlmIChkbmV0X3JlYWRsKGJwLCBUWF9GSUZPX1dDTlQpID4gRE5FVF9GSUZPX1RYX0RBVEFfQUZfVEgpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQl0eF9zdGF0dXMgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX1NSQyk7CisJCWlycV9lbmFibGUgPSBkbmV0X3JlYWRsKGJwLCBJTlRSX0VOQik7CisJCWlycV9lbmFibGUgfD0gRE5FVF9JTlRSX0VOQl9UWF9GSUZPQUU7CisJCWRuZXRfd3JpdGVsKGJwLCBpcnFfZW5hYmxlLCBJTlRSX0VOQik7CisJfQorCisJLyogZnJlZSB0aGUgYnVmZmVyICovCisJZGV2X2tmcmVlX3NrYihza2IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRuZXRfcmVzZXRfaHcoc3RydWN0IGRuZXQgKmJwKQoreworCS8qIHB1dCB0c19tYWMgaW4gSURMRSBzdGF0ZSBpLmUuIGRpc2FibGUgcngvdHggKi8KKwlkbmV0X3dyaXRld19tYWMoYnAsIERORVRfSU5URVJOQUxfTU9ERV9SRUcsIERORVRfSU5URVJOQUxfTU9ERV9GQ0VOKTsKKworCS8qCisJICogUlggRklGTyBhbG1vc3QgZnVsbCB0aHJlc2hvbGQ6IG9ubHkgY21kIEZJRk8gYWxtb3N0IGZ1bGwgaXMKKwkgKiBpbXBsZW1lbnRlZCBmb3IgUlggc2lkZQorCSAqLworCWRuZXRfd3JpdGVsKGJwLCBETkVUX0ZJRk9fUlhfQ01EX0FGX1RILCBSWF9GSUZPX1RIKTsKKwkvKgorCSAqIFRYIEZJRk8gYWxtb3N0IGVtcHR5IHRocmVzaG9sZDogb25seSBkYXRhIEZJRk8gYWxtb3N0IGVtcHR5CisJICogaXMgaW1wbGVtZW50ZWQgZm9yIFRYIHNpZGUKKwkgKi8KKwlkbmV0X3dyaXRlbChicCwgRE5FVF9GSUZPX1RYX0RBVEFfQUVfVEgsIFRYX0ZJRk9fVEgpOworCisJLyogZmx1c2ggcngvdHggZmlmb3MgKi8KKwlkbmV0X3dyaXRlbChicCwgRE5FVF9TWVNfQ1RMX1JYRklGT0ZMVVNIIHwgRE5FVF9TWVNfQ1RMX1RYRklGT0ZMVVNILAorCQkJU1lTX0NUTCk7CisJbXNsZWVwKDEpOworCWRuZXRfd3JpdGVsKGJwLCAwLCBTWVNfQ1RMKTsKK30KKworc3RhdGljIHZvaWQgZG5ldF9pbml0X2h3KHN0cnVjdCBkbmV0ICpicCkKK3sKKwl1MzIgY29uZmlnOworCisJZG5ldF9yZXNldF9odyhicCk7CisJX19kbmV0X3NldF9od2FkZHIoYnApOworCisJY29uZmlnID0gZG5ldF9yZWFkd19tYWMoYnAsIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JFRyk7CisKKwlpZiAoYnAtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJLyogQ29weSBBbGwgRnJhbWVzICovCisJCWNvbmZpZyB8PSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9FTlBST01JU0M7CisJaWYgKCEoYnAtPmRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSkKKwkJLyogTm8gQnJvYWRDYXN0ICovCisJCWNvbmZpZyB8PSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SWE1VTFRJQ0FTVDsKKworCWNvbmZpZyB8PSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SWFBBVVNFIHwKKwkgICAgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUlhCUk9BRENBU1QgfAorCSAgICBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9EUk9QQ09OVFJPTCB8CisJICAgIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0RJU0NGWEZDUzsKKworCWRuZXRfd3JpdGV3X21hYyhicCwgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUkVHLCBjb25maWcpOworCisJLyogY2xlYXIgaXJxIGJlZm9yZSBlbmFibGluZyB0aGVtICovCisJY29uZmlnID0gZG5ldF9yZWFkbChicCwgSU5UUl9TUkMpOworCisJLyogZW5hYmxlIFJYL1RYIGludGVycnVwdCwgcmVjdiBwYWNrZXQgcmVhZHkgaW50ZXJydXB0ICovCisJZG5ldF93cml0ZWwoYnAsIERORVRfSU5UUl9FTkJfR0xPQkFMX0VOQUJMRSB8IERORVRfSU5UUl9FTkJfUlhfU1VNTUFSWSB8CisJCQlETkVUX0lOVFJfRU5CX1RYX1NVTU1BUlkgfCBETkVUX0lOVFJfRU5CX1JYX0ZJRk9FUlIgfAorCQkJRE5FVF9JTlRSX0VOQl9SWF9FUlJPUiB8IERORVRfSU5UUl9FTkJfUlhfRklGT0ZVTEwgfAorCQkJRE5FVF9JTlRSX0VOQl9UWF9GSUZPRlVMTCB8IERORVRfSU5UUl9FTkJfVFhfRElTQ0ZSTSB8CisJCQlETkVUX0lOVFJfRU5CX1JYX1BLVFJEWSwgSU5UUl9FTkIpOworfQorCitzdGF0aWMgaW50IGRuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBpZiB0aGUgcGh5IGlzIG5vdCB5ZXQgcmVnaXN0ZXIsIHJldHJ5IGxhdGVyICovCisJaWYgKCFicC0+cGh5X2RldikKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW5hcGlfZW5hYmxlKCZicC0+bmFwaSk7CisJZG5ldF9pbml0X2h3KGJwKTsKKworCXBoeV9zdGFydF9hbmVnKGJwLT5waHlfZGV2KTsKKworCS8qIHNjaGVkdWxlIGEgbGluayBzdGF0ZSBjaGVjayAqLworCXBoeV9zdGFydChicC0+cGh5X2Rldik7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmFwaV9kaXNhYmxlKCZicC0+bmFwaSk7CisKKwlpZiAoYnAtPnBoeV9kZXYpCisJCXBoeV9zdG9wKGJwLT5waHlfZGV2KTsKKworCWRuZXRfcmVzZXRfaHcoYnApOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRuZXRfcHJpbnRfcHJldHR5X2h3c3RhdHMoc3RydWN0IGRuZXRfc3RhdHMgKmh3c3RhdCkKK3sKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUlggc3RhdGlzdGljcyAiCisJCSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJfZGVidWcoIlJYX1BLVF9JR05SX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X3BrdF9pZ25yKTsKKwlwcl9kZWJ1ZygiUlhfTEVOX0NIS19FUlJfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfbGVuX2Noa19lcnIpOworCXByX2RlYnVnKCJSWF9MTkdfRlJNX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X2xuZ19mcm0pOworCXByX2RlYnVnKCJSWF9TSFJUX0ZSTV9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9zaHJ0X2ZybSk7CisJcHJfZGVidWcoIlJYX0lQR19WSU9MX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X2lwZ192aW9sKTsKKwlwcl9kZWJ1ZygiUlhfQ1JDX0VSUl9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9jcmNfZXJyKTsKKwlwcl9kZWJ1ZygiUlhfT0tfUEtUX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X29rX3BrdCk7CisJcHJfZGVidWcoIlJYX0NUTF9GUk1fQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfY3RsX2ZybSk7CisJcHJfZGVidWcoIlJYX1BBVVNFX0ZSTV9DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9wYXVzZV9mcm0pOworCXByX2RlYnVnKCJSWF9NVUxUSUNBU1RfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfbXVsdGljYXN0KTsKKwlwcl9kZWJ1ZygiUlhfQlJPQURDQVNUX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X2Jyb2FkY2FzdCk7CisJcHJfZGVidWcoIlJYX1ZMQU5fVEFHX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X3ZsYW5fdGFnKTsKKwlwcl9kZWJ1ZygiUlhfUFJFX1NIUklOS19DTlQgJS04eFxuIiwgaHdzdGF0LT5yeF9wcmVfc2hyaW5rKTsKKwlwcl9kZWJ1ZygiUlhfRFJJQl9OSUJfQ05UICUtOHhcbiIsIGh3c3RhdC0+cnhfZHJpYl9uaWIpOworCXByX2RlYnVnKCJSWF9VTlNVUF9PUENEX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X3Vuc3VwX29wY2QpOworCXByX2RlYnVnKCJSWF9CWVRFX0NOVCAlLTh4XG4iLCBod3N0YXQtPnJ4X2J5dGUpOworCXByX2RlYnVnKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUWCBzdGF0aXN0aWNzICIKKwkJICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcl9kZWJ1ZygiVFhfVU5JQ0FTVF9DTlQgJS04eFxuIiwgaHdzdGF0LT50eF91bmljYXN0KTsKKwlwcl9kZWJ1ZygiVFhfUEFVU0VfRlJNX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X3BhdXNlX2ZybSk7CisJcHJfZGVidWcoIlRYX01VTFRJQ0FTVF9DTlQgJS04eFxuIiwgaHdzdGF0LT50eF9tdWx0aWNhc3QpOworCXByX2RlYnVnKCJUWF9CUkRDQVNUX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X2JyZGNhc3QpOworCXByX2RlYnVnKCJUWF9WTEFOX1RBR19DTlQgJS04eFxuIiwgaHdzdGF0LT50eF92bGFuX3RhZyk7CisJcHJfZGVidWcoIlRYX0JBRF9GQ1NfQ05UICUtOHhcbiIsIGh3c3RhdC0+dHhfYmFkX2Zjcyk7CisJcHJfZGVidWcoIlRYX0pVTUJPX0NOVCAlLTh4XG4iLCBod3N0YXQtPnR4X2p1bWJvKTsKKwlwcl9kZWJ1ZygiVFhfQllURV9DTlQgJS04eFxuIiwgaHdzdGF0LT50eF9ieXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXQgPSAmZGV2LT5zdGF0czsKKwlzdHJ1Y3QgZG5ldF9zdGF0cyAqaHdzdGF0ID0gJmJwLT5od19zdGF0czsKKworCS8qIHJlYWQgc3RhdHMgZnJvbSBoYXJkd2FyZSAqLworCWRuZXRfdXBkYXRlX3N0YXRzKGJwKTsKKworCS8qIENvbnZlcnQgSFcgc3RhdHMgaW50byBuZXRkZXZpY2Ugc3RhdHMgKi8KKwluc3RhdC0+cnhfZXJyb3JzID0gKGh3c3RhdC0+cnhfbGVuX2Noa19lcnIgKworCQkJICAgIGh3c3RhdC0+cnhfbG5nX2ZybSArIGh3c3RhdC0+cnhfc2hydF9mcm0gKworCQkJICAgIC8qIGlnbm9yZSBJR1AgdmlvbGF0aW9uIGVycm9yCisJCQkgICAgaHdzdGF0LT5yeF9pcGdfdmlvbCArICovCisJCQkgICAgaHdzdGF0LT5yeF9jcmNfZXJyICsKKwkJCSAgICBod3N0YXQtPnJ4X3ByZV9zaHJpbmsgKworCQkJICAgIGh3c3RhdC0+cnhfZHJpYl9uaWIgKyBod3N0YXQtPnJ4X3Vuc3VwX29wY2QpOworCW5zdGF0LT50eF9lcnJvcnMgPSBod3N0YXQtPnR4X2JhZF9mY3M7CisJbnN0YXQtPnJ4X2xlbmd0aF9lcnJvcnMgPSAoaHdzdGF0LT5yeF9sZW5fY2hrX2VyciArCisJCQkJICAgaHdzdGF0LT5yeF9sbmdfZnJtICsKKwkJCQkgICBod3N0YXQtPnJ4X3NocnRfZnJtICsgaHdzdGF0LT5yeF9wcmVfc2hyaW5rKTsKKwluc3RhdC0+cnhfY3JjX2Vycm9ycyA9IGh3c3RhdC0+cnhfY3JjX2VycjsKKwluc3RhdC0+cnhfZnJhbWVfZXJyb3JzID0gaHdzdGF0LT5yeF9wcmVfc2hyaW5rICsgaHdzdGF0LT5yeF9kcmliX25pYjsKKwluc3RhdC0+cnhfcGFja2V0cyA9IGh3c3RhdC0+cnhfb2tfcGt0OworCW5zdGF0LT50eF9wYWNrZXRzID0gKGh3c3RhdC0+dHhfdW5pY2FzdCArCisJCQkgICAgIGh3c3RhdC0+dHhfbXVsdGljYXN0ICsgaHdzdGF0LT50eF9icmRjYXN0KTsKKwluc3RhdC0+cnhfYnl0ZXMgPSBod3N0YXQtPnJ4X2J5dGU7CisJbnN0YXQtPnR4X2J5dGVzID0gaHdzdGF0LT50eF9ieXRlOworCW5zdGF0LT5tdWx0aWNhc3QgPSBod3N0YXQtPnJ4X211bHRpY2FzdDsKKwluc3RhdC0+cnhfbWlzc2VkX2Vycm9ycyA9IGh3c3RhdC0+cnhfcGt0X2lnbnI7CisKKwlkbmV0X3ByaW50X3ByZXR0eV9od3N0YXRzKGh3c3RhdCk7CisKKwlyZXR1cm4gbnN0YXQ7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYnAtPnBoeV9kZXY7CisKKwlpZiAoIXBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChwaHlkZXYsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYnAtPnBoeV9kZXY7CisKKwlpZiAoIXBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChwaHlkZXYsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZG5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGJwLT5waHlfZGV2OworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFwaHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5ZGV2LCBpZl9taWkocnEpLCBjbWQpOworfQorCitzdGF0aWMgdm9pZCBkbmV0X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX05BTUUpOworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCAiMCIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGRuZXRfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSBkbmV0X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGRuZXRfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBkbmV0X2dldF9kcnZpbmZvLAorCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGRuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gZG5ldF9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBkbmV0X2dldF9zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gZG5ldF9zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwJCT0gZG5ldF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZG5ldCAqYnA7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwlpbnQgZXJyID0gLUVOWElPOworCXVuc2lnbmVkIGludCBtZW1fYmFzZSwgbWVtX3NpemUsIGlycTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbW1pbyByZXNvdXJjZSBkZWZpbmVkXG4iKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1fYmFzZSA9IHJlcy0+c3RhcnQ7CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9iYXNlLCBtZW1fc2l6ZSwgRFJWX05BTUUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZWdpb24gYXZhaWxhYmxlXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyID0gLUVOT01FTTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmJwKSk7CisJaWYgKCFkZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyogVE9ETzogQWN0dWFsbHksIHdlIGhhdmUgc29tZSBpbnRlcmVzdGluZyBmZWF0dXJlcy4uLiAqLworCWRldi0+ZmVhdHVyZXMgfD0gMDsKKworCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlicC0+ZGV2ID0gZGV2OworCisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZicC0+bG9jayk7CisKKwlicC0+cmVncyA9IGlvcmVtYXAobWVtX2Jhc2UsIG1lbV9zaXplKTsKKwlpZiAoIWJwLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLCBhYm9ydGluZy5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRuZXRfaW50ZXJydXB0LCAwLCBEUlZfTkFNRSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IElSUSAlZCAoZXJyb3IgJWQpXG4iLAorCQkgICAgICAgaXJxLCBlcnIpOworCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKKwl9CisKKwlkZXYtPm5ldGRldl9vcHMgPSAmZG5ldF9uZXRkZXZfb3BzOworCW5ldGlmX25hcGlfYWRkKGRldiwgJmJwLT5uYXBpLCBkbmV0X3BvbGwsIDY0KTsKKwlkZXYtPmV0aHRvb2xfb3BzID0gJmRuZXRfZXRodG9vbF9vcHM7CisKKwlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJwLT5yZWdzOworCisJYnAtPmNhcGFiaWxpdGllcyA9IGRuZXRfcmVhZGwoYnAsIFZFUkNBUFMpICYgRE5FVF9DQVBTX01BU0s7CisKKwlkbmV0X2dldF9od2FkZHIoYnApOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CisJCS8qIGNob29zZSBhIHJhbmRvbSBldGhlcm5ldCBhZGRyZXNzICovCisJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOworCQlfX2RuZXRfc2V0X2h3YWRkcihicCk7CisJfQorCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBQSFkgYm9hcmQgZml4dXAgKGZvciBNYXJ2ZWxsIDg4RTExMTEpICovCisJZXJyID0gcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQoMHgwMTQxMGNjMCwgMHhmZmZmZmZmMCwKKwkJCQkJIGRuZXRfcGh5X21hcnZlbGxfZml4dXApOworCS8qIHdlIGNhbiBsaXZlIHdpdGhvdXQgaXQsIHNvIGp1c3QgaXNzdWUgYSB3YXJuaW5nICovCisJaWYgKGVycikKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBQSFkgYm9hcmQgZml4dXAuXG4iKTsKKworCWlmIChkbmV0X21paV9pbml0KGJwKSAhPSAwKQorCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9uZXRkZXY7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRGF2ZSBETkVUIGF0IDB4JXAgKDB4JTA4eCkgaXJxICVkICVwTVxuIiwKKwkgICAgICAgYnAtPnJlZ3MsIG1lbV9iYXNlLCBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgImhhcyAlc21kaW8sICVzaXJxLCAlc2dpZ2FiaXQsICVzZG1hIFxuIiwKKwkgICAgICAgKGJwLT5jYXBhYmlsaXRpZXMgJiBETkVUX0hBU19NRElPKSA/ICIiIDogIm5vICIsCisJICAgICAgIChicC0+Y2FwYWJpbGl0aWVzICYgRE5FVF9IQVNfSVJRKSA/ICIiIDogIm5vICIsCisJICAgICAgIChicC0+Y2FwYWJpbGl0aWVzICYgRE5FVF9IQVNfR0lHQUJJVCkgPyAiIiA6ICJubyAiLAorCSAgICAgICAoYnAtPmNhcGFiaWxpdGllcyAmIERORVRfSEFTX0RNQSkgPyAiIiA6ICJubyAiKTsKKwlwaHlkZXYgPSBicC0+cGh5X2RldjsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKKwkgICAgICAgIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAorCSAgICAgICBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfdW5yZWdpc3Rlcl9uZXRkZXY6CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKK2Vycl9vdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CitlcnJfb3V0X2lvdW5tYXA6CisJaW91bm1hcChicC0+cmVncyk7CitlcnJfb3V0X2ZyZWVfZGV2OgorCWZyZWVfbmV0ZGV2KGRldik7CitlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRuZXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBkbmV0ICpicDsKKworCWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGRldikgeworCQlicCA9IG5ldGRldl9wcml2KGRldik7CisJCWlmIChicC0+cGh5X2RldikKKwkJCXBoeV9kaXNjb25uZWN0KGJwLT5waHlfZGV2KTsKKwkJbWRpb2J1c191bnJlZ2lzdGVyKGJwLT5taWlfYnVzKTsKKwkJa2ZyZWUoYnAtPm1paV9idXMtPmlycSk7CisJCW1kaW9idXNfZnJlZShicC0+bWlpX2J1cyk7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlpb3VubWFwKGJwLT5yZWdzKTsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZG5ldF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGRuZXRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkbmV0X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJkbmV0IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZG5ldF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG5ldF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZG5ldF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRuZXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZG5ldF9pbml0KTsKK21vZHVsZV9leGl0KGRuZXRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRGF2ZSBETkVUIEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWx5YSBZYW5vayA8eWFub2tAZW1jcmFmdC5jb20+LCAiCisJICAgICAgIk1hdHRlbyBWaXQgPG1hdHRlby52aXRAZGF2ZS5ldT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuaCBiL2RyaXZlcnMvbmV0L2RuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y1YjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5oCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogRGF2ZSBETkVUIEV0aGVybmV0IENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmUgUy5yLmwuIDx3d3cuZGF2ZS5ldT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9ETkVUX0gKKyNkZWZpbmUgX0RORVRfSAorCisjZGVmaW5lIERSVl9OQU1FCQkiZG5ldCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIwLjkuMSIKKyNkZWZpbmUgUEZYCQkJCURSVl9OQU1FICI6ICIKKworLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBkbmV0X3dyaXRlbChwb3J0LCB2YWx1ZSwgcmVnKQlcCisJd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIERORVRfIyNyZWcpCisjZGVmaW5lIGRuZXRfcmVhZGwocG9ydCwgcmVnKQlyZWFkbCgocG9ydCktPnJlZ3MgKyBETkVUXyMjcmVnKQorCisvKiBBTEwgRE5FVCBGSUZPIFJFR0lTVEVSUyAqLworI2RlZmluZSBETkVUX1JYX0xFTl9GSUZPCQkweDAwMAkvKiBSWF9MRU5fRklGTyAqLworI2RlZmluZSBETkVUX1JYX0RBVEFfRklGTwkJMHgwMDQJLyogUlhfREFUQV9GSUZPICovCisjZGVmaW5lIERORVRfVFhfTEVOX0ZJRk8JCTB4MDA4CS8qIFRYX0xFTl9GSUZPICovCisjZGVmaW5lIERORVRfVFhfREFUQV9GSUZPCQkweDAwQwkvKiBUWF9EQVRBX0ZJRk8gKi8KKworLyogQUxMIERORVQgQ09OVFJPTC9TVEFUVVMgUkVHSVNURVJTIE9GRlNFVFMgKi8KKyNkZWZpbmUgRE5FVF9WRVJDQVBTCQkJMHgxMDAJLyogVkVSQ0FQUyAqLworI2RlZmluZSBETkVUX0lOVFJfU1JDCQkJMHgxMDQJLyogSU5UUl9TUkMgKi8KKyNkZWZpbmUgRE5FVF9JTlRSX0VOQgkJCTB4MTA4CS8qIElOVFJfRU5CICovCisjZGVmaW5lIERORVRfUlhfU1RBVFVTCQkJMHgxMEMJLyogUlhfU1RBVFVTICovCisjZGVmaW5lIERORVRfVFhfU1RBVFVTCQkJMHgxMTAJLyogVFhfU1RBVFVTICovCisjZGVmaW5lIERORVRfUlhfRlJBTUVTX0NOVAkJMHgxMTQJLyogUlhfRlJBTUVTX0NOVCAqLworI2RlZmluZSBETkVUX1RYX0ZSQU1FU19DTlQJCTB4MTE4CS8qIFRYX0ZSQU1FU19DTlQgKi8KKyNkZWZpbmUgRE5FVF9SWF9GSUZPX1RICQkJMHgxMUMJLyogUlhfRklGT19USCAqLworI2RlZmluZSBETkVUX1RYX0ZJRk9fVEgJCQkweDEyMAkvKiBUWF9GSUZPX1RIICovCisjZGVmaW5lIERORVRfU1lTX0NUTAkJCTB4MTI0CS8qIFNZU19DVEwgKi8KKyNkZWZpbmUgRE5FVF9QQVVTRV9UTVIJCQkweDEyOAkvKiBQQVVTRV9UTVIgKi8KKyNkZWZpbmUgRE5FVF9SWF9GSUZPX1dDTlQJCTB4MTJDCS8qIFJYX0ZJRk9fV0NOVCAqLworI2RlZmluZSBETkVUX1RYX0ZJRk9fV0NOVAkJMHgxMzAJLyogVFhfRklGT19XQ05UICovCisKKy8qIEFMTCBETkVUIE1BQyBSRUdJU1RFUlMgKi8KKyNkZWZpbmUgRE5FVF9NQUNSRUdfREFUQQkJMHgyMDAJLyogTWFjLVJlZyBEYXRhICovCisjZGVmaW5lIERORVRfTUFDUkVHX0FERFIJCTB4MjA0CS8qIE1hYy1SZWcgQWRkciAgKi8KKworLyogQUxMIERORVQgUlggU1RBVElTVElDUyBDT1VOVEVSUyAgKi8KKyNkZWZpbmUgRE5FVF9SWF9QS1RfSUdOUl9DTlQJCTB4MzAwCisjZGVmaW5lIERORVRfUlhfTEVOX0NIS19FUlJfQ05UCQkweDMwNAorI2RlZmluZSBETkVUX1JYX0xOR19GUk1fQ05UCQkweDMwOAorI2RlZmluZSBETkVUX1JYX1NIUlRfRlJNX0NOVAkJMHgzMEMKKyNkZWZpbmUgRE5FVF9SWF9JUEdfVklPTF9DTlQJCTB4MzEwCisjZGVmaW5lIERORVRfUlhfQ1JDX0VSUl9DTlQJCTB4MzE0CisjZGVmaW5lIERORVRfUlhfT0tfUEtUX0NOVAkJMHgzMTgKKyNkZWZpbmUgRE5FVF9SWF9DVExfRlJNX0NOVAkJMHgzMUMKKyNkZWZpbmUgRE5FVF9SWF9QQVVTRV9GUk1fQ05UCQkweDMyMAorI2RlZmluZSBETkVUX1JYX01VTFRJQ0FTVF9DTlQJCTB4MzI0CisjZGVmaW5lIERORVRfUlhfQlJPQURDQVNUX0NOVAkJMHgzMjgKKyNkZWZpbmUgRE5FVF9SWF9WTEFOX1RBR19DTlQJCTB4MzJDCisjZGVmaW5lIERORVRfUlhfUFJFX1NIUklOS19DTlQJCTB4MzMwCisjZGVmaW5lIERORVRfUlhfRFJJQl9OSUJfQ05UCQkweDMzNAorI2RlZmluZSBETkVUX1JYX1VOU1VQX09QQ0RfQ05UCQkweDMzOAorI2RlZmluZSBETkVUX1JYX0JZVEVfQ05UCQkweDMzQworCisvKiBETkVUIFRYIFNUQVRJU1RJQ1MgQ09VTlRFUlMgKi8KKyNkZWZpbmUgRE5FVF9UWF9VTklDQVNUX0NOVAkJMHg0MDAKKyNkZWZpbmUgRE5FVF9UWF9QQVVTRV9GUk1fQ05UCQkweDQwNAorI2RlZmluZSBETkVUX1RYX01VTFRJQ0FTVF9DTlQJCTB4NDA4CisjZGVmaW5lIERORVRfVFhfQlJEQ0FTVF9DTlQJCTB4NDBDCisjZGVmaW5lIERORVRfVFhfVkxBTl9UQUdfQ05UCQkweDQxMAorI2RlZmluZSBETkVUX1RYX0JBRF9GQ1NfQ05UCQkweDQxNAorI2RlZmluZSBETkVUX1RYX0pVTUJPX0NOVAkJMHg0MTgKKyNkZWZpbmUgRE5FVF9UWF9CWVRFX0NOVAkJMHg0MUMKKworLyogU09NRSBJTlRFUk5BTCBNQUMtQ09SRSBSRUdJU1RFUiAqLworI2RlZmluZSBETkVUX0lOVEVSTkFMX01PREVfUkVHCQkweDAKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUkVHCTB4MgorI2RlZmluZSBETkVUX0lOVEVSTkFMX01BWF9QS1RfU0laRV9SRUcJMHg0CisjZGVmaW5lIERORVRfSU5URVJOQUxfSUdQX1JFRwkJMHg4CisjZGVmaW5lIERORVRfSU5URVJOQUxfTUFDX0FERFJfMF9SRUcJMHhhCisjZGVmaW5lIERORVRfSU5URVJOQUxfTUFDX0FERFJfMV9SRUcJMHhjCisjZGVmaW5lIERORVRfSU5URVJOQUxfTUFDX0FERFJfMl9SRUcJMHhlCisjZGVmaW5lIERORVRfSU5URVJOQUxfVFhfUlhfU1RTX1JFRwkweDEyCisjZGVmaW5lIERORVRfSU5URVJOQUxfR01JSV9NTkdfQ1RMX1JFRwkweDE0CisjZGVmaW5lIERORVRfSU5URVJOQUxfR01JSV9NTkdfREFUX1JFRwkweDE2CisKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9HTUlJX01OR19DTURfRklOCSgxIDw8IDE0KQorCisjZGVmaW5lIERORVRfSU5URVJOQUxfV1JJVEUJCSgxIDw8IDMxKQorCisvKiBNQUMtQ09SRSBSRUdJU1RFUiBGSUVMRFMgKi8KKworLyogTUFDLUNPUkUgTU9ERSBSRUdJU1RFUiBGSUVMRFMgKi8KKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9NT0RFX0dCSVRFTgkJCSgxIDw8IDApCisjZGVmaW5lIERORVRfSU5URVJOQUxfTU9ERV9GQ0VOCQkJCSgxIDw8IDEpCisjZGVmaW5lIERORVRfSU5URVJOQUxfTU9ERV9SWEVOCQkJCSgxIDw8IDIpCisjZGVmaW5lIERORVRfSU5URVJOQUxfTU9ERV9UWEVOCQkJCSgxIDw8IDMpCisKKy8qIE1BQy1DT1JFIFJYVFggQ09OVFJPTCBSRUdJU1RFUiBGSUVMRFMgKi8KKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUlhTSE9SVEZSQU1FCQkoMSA8PCA4KQorI2RlZmluZSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9SWEJST0FEQ0FTVAkJKDEgPDwgNykKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfUlhNVUxUSUNBU1QJCSgxIDw8IDQpCisjZGVmaW5lIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX1JYUEFVU0UJCSgxIDw8IDMpCisjZGVmaW5lIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0RJU1RYRkNTCQkoMSA8PCAyKQorI2RlZmluZSBETkVUX0lOVEVSTkFMX1JYVFhfQ09OVFJPTF9ESVNDRlhGQ1MJCSgxIDw8IDEpCisjZGVmaW5lIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0VOUFJPTUlTQwkJKDEgPDwgMCkKKyNkZWZpbmUgRE5FVF9JTlRFUk5BTF9SWFRYX0NPTlRST0xfRFJPUENPTlRST0wJCSgxIDw8IDYpCisjZGVmaW5lIERORVRfSU5URVJOQUxfUlhUWF9DT05UUk9MX0VOQUJMRUhBTEZEVVAJKDEgPDwgNSkKKworLyogU1lTVEVNIENPTlRST0wgUkVHSVNURVIgRklFTERTICovCisjZGVmaW5lIERORVRfU1lTX0NUTF9JR05PUkVORVhUUEtUCQkJKDEgPDwgMCkKKyNkZWZpbmUgRE5FVF9TWVNfQ1RMX1NFTkRQQVVTRQkJCQkoMSA8PCAyKQorI2RlZmluZSBETkVUX1NZU19DVExfUlhGSUZPRkxVU0gJCQkoMSA8PCAzKQorI2RlZmluZSBETkVUX1NZU19DVExfVFhGSUZPRkxVU0gJCQkoMSA8PCA0KQorCisvKiBUWCBTVEFUVVMgUkVHSVNURVIgRklFTERTICovCisjZGVmaW5lIERORVRfVFhfU1RBVFVTX0ZJRk9fQUxNT1NUX0VNUFRZCQkoMSA8PCAyKQorI2RlZmluZSBETkVUX1RYX1NUQVRVU19GSUZPX0FMTU9TVF9GVUxMCQkJKDEgPDwgMSkKKworLyogSU5URVJSVVBUIFNPVVJDRSBSRUdJU1RFUiBGSUVMRFMgKi8KKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19UWF9QS1RTRU5UCQkJKDEgPDwgMCkKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19UWF9GSUZPQUYJCQkJKDEgPDwgMSkKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19UWF9GSUZPQUUJCQkJKDEgPDwgMikKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19UWF9ESVNDRlJNCQkJKDEgPDwgMykKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19UWF9GSUZPRlVMTAkJCSgxIDw8IDQpCisjZGVmaW5lIERORVRfSU5UUl9TUkNfUlhfQ01ERklGT0FGCQkJKDEgPDwgOCkKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19SWF9DTURGSUZPRkYJCQkoMSA8PCA5KQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1JYX0RBVEFGSUZPRkYJCQkoMSA8PCAxMCkKKyNkZWZpbmUgRE5FVF9JTlRSX1NSQ19UWF9TVU1NQVJZCQkJKDEgPDwgMTYpCisjZGVmaW5lIERORVRfSU5UUl9TUkNfUlhfU1VNTUFSWQkJCSgxIDw8IDE3KQorI2RlZmluZSBETkVUX0lOVFJfU1JDX1BIWQkJCQkoMSA8PCAxOSkKKworLyogSU5URVJSVVBUIEVOQUJMRSBSRUdJU1RFUiBGSUVMRFMgKi8KKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9UWF9QS1RTRU5UCQkJKDEgPDwgMCkKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9UWF9GSUZPQUYJCQkJKDEgPDwgMSkKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9UWF9GSUZPQUUJCQkJKDEgPDwgMikKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9UWF9ESVNDRlJNCQkJKDEgPDwgMykKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9UWF9GSUZPRlVMTAkJCSgxIDw8IDQpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfUlhfUEtUUkRZCQkJCSgxIDw8IDgpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfUlhfRklGT0FGCQkJCSgxIDw8IDkpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfUlhfRklGT0VSUgkJCSgxIDw8IDEwKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1JYX0VSUk9SCQkJCSgxIDw8IDExKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1JYX0ZJRk9GVUxMCQkJKDEgPDwgMTIpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfUlhfRklGT0FFCQkJCSgxIDw8IDEzKQorI2RlZmluZSBETkVUX0lOVFJfRU5CX1RYX1NVTU1BUlkJCQkoMSA8PCAxNikKKyNkZWZpbmUgRE5FVF9JTlRSX0VOQl9SWF9TVU1NQVJZCQkJKDEgPDwgMTcpCisjZGVmaW5lIERORVRfSU5UUl9FTkJfR0xPQkFMX0VOQUJMRQkJCSgxIDw8IDE4KQorCisvKiBkZWZhdWx0IHZhbHVlczoKKyAqIGFsbW9zdCBlbXB0eSA9IGxlc3MgdGhhbiBvbmUgZnVsbCBzaXplZCBldGhlcm5ldCBmcmFtZSAobm8ganVtYm8pIGluc2lkZQorICogdGhlIGZpZm8gYWxtb3N0IGZ1bGwgPSBjYW4gd3JpdGUgbGVzcyB0aGFuIG9uZSBmdWxsIHNpemVkIGV0aGVybmV0IGZyYW1lCisgKiAobm8ganVtYm8pIGluc2lkZSB0aGUgZmlmbworICovCisjZGVmaW5lIERORVRfQ0ZHX1RYX0ZJRk9fRlVMTF9USFJFUwkyNQorI2RlZmluZSBETkVUX0NGR19SWF9GSUZPX0ZVTExfVEhSRVMJMjAKKworLyoKKyAqIENhcGFiaWxpdGllcy4gVXNlZCBieSB0aGUgZHJpdmVyIHRvIGtub3cgdGhlIGNhcGFiaWxpdGllcyB0aGF0IHRoZSBldGhlcm5ldAorICogY29udHJvbGxlciBpbnNpZGUgdGhlIEZQR0EgaGF2ZS4KKyAqLworCisjZGVmaW5lIERORVRfSEFTX01ESU8JCSgxIDw8IDApCisjZGVmaW5lIERORVRfSEFTX0lSUQkJKDEgPDwgMSkKKyNkZWZpbmUgRE5FVF9IQVNfR0lHQUJJVAkoMSA8PCAyKQorI2RlZmluZSBETkVUX0hBU19ETUEJCSgxIDw8IDMpCisKKyNkZWZpbmUgRE5FVF9IQVNfTUlJCQkoMSA8PCA0KSAvKiBvciBHTUlJICovCisjZGVmaW5lIERORVRfSEFTX1JNSUkJCSgxIDw8IDUpIC8qIG9yIFJHTUlJICovCisKKyNkZWZpbmUgRE5FVF9DQVBTX01BU0sJCTB4RkZGRgorCisjZGVmaW5lIERORVRfRklGT19TSVpFCQkxMDI0IC8qIDFLIHggMzIgYml0ICovCisjZGVmaW5lIERORVRfRklGT19UWF9EQVRBX0FGX1RICShETkVUX0ZJRk9fU0laRSAtIDM4NCkgLyogMzg0ID0gMTUzNiAvIDQgKi8KKyNkZWZpbmUgRE5FVF9GSUZPX1RYX0RBVEFfQUVfVEgJMzg0CisKKyNkZWZpbmUgRE5FVF9GSUZPX1JYX0NNRF9BRl9USAkoMSA8PCAxNikgLyoganVzdCBvbmUgZnJhbWUgaW5zaWRlIHRoZSBGSUZPICovCisKKy8qCisgKiBIYXJkd2FyZS1jb2xsZWN0ZWQgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IGRuZXRfc3RhdHMgeworCXUzMiByeF9wa3RfaWducjsKKwl1MzIgcnhfbGVuX2Noa19lcnI7CisJdTMyIHJ4X2xuZ19mcm07CisJdTMyIHJ4X3NocnRfZnJtOworCXUzMiByeF9pcGdfdmlvbDsKKwl1MzIgcnhfY3JjX2VycjsKKwl1MzIgcnhfb2tfcGt0OworCXUzMiByeF9jdGxfZnJtOworCXUzMiByeF9wYXVzZV9mcm07CisJdTMyIHJ4X211bHRpY2FzdDsKKwl1MzIgcnhfYnJvYWRjYXN0OworCXUzMiByeF92bGFuX3RhZzsKKwl1MzIgcnhfcHJlX3NocmluazsKKwl1MzIgcnhfZHJpYl9uaWI7CisJdTMyIHJ4X3Vuc3VwX29wY2Q7CisJdTMyIHJ4X2J5dGU7CisJdTMyIHR4X3VuaWNhc3Q7CisJdTMyIHR4X3BhdXNlX2ZybTsKKwl1MzIgdHhfbXVsdGljYXN0OworCXUzMiB0eF9icmRjYXN0OworCXUzMiB0eF92bGFuX3RhZzsKKwl1MzIgdHhfYmFkX2ZjczsKKwl1MzIgdHhfanVtYm87CisJdTMyIHR4X2J5dGU7Cit9OworCitzdHJ1Y3QgZG5ldCB7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpkZXY7CisJc3RydWN0IGRuZXRfc3RhdHMJCWh3X3N0YXRzOworCXVuc2lnbmVkIGludAkJCWNhcGFiaWxpdGllczsgLyogcmVhZCBmcm9tIEZQR0EgKi8KKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJCW5hcGk7CisKKwkvKiBQSFkgc3R1ZmYgKi8KKwlzdHJ1Y3QgbWlpX2J1cwkJCSptaWlfYnVzOworCXN0cnVjdCBwaHlfZGV2aWNlCQkqcGh5X2RldjsKKwl1bnNpZ25lZCBpbnQJCQlsaW5rOworCXVuc2lnbmVkIGludAkJCXNwZWVkOworCXVuc2lnbmVkIGludAkJCWR1cGxleDsKK307CisKKyNlbmRpZiAvKiBfRE5FVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggODZiYjg3Ni4uMDUwNGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlMTAwIgogI2RlZmluZSBEUlZfRVhUCQkJIi1OQVBJIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjMuNS4yMy1rNiJEUlZfRVhUCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjI0LWsyIkRSVl9FWFQKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiSW50ZWwoUikgUFJPLzEwMCBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKQEAgLTI0MCw2ICsyNDAsNyBAQAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTMsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTQsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTUsIDcpLAorCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwZmUsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMDksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMjksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDI0NDksIDIpLApAQCAtMjc1LDYgKzI3Niw3IEBACiAJcGh5XzgyNTYyX2VtID0gMHgwMzIwMDJBOCwKIAlwaHlfODI1NjJfZWsgPSAweDAzMTAwMkE4LAogCXBoeV84MjU2Ml9laCA9IDB4MDE3MDAyQTgsCisJcGh5XzgyNTUyX3YgID0gMHhkMDYxMDA0ZCwKIAlwaHlfdW5rbm93biAgPSAweEZGRkZGRkZGLAogfTsKIApAQCAtOTQzLDYgKzk0NSwyMiBAQAogCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLCBpbnQgZGF0YSkKIHsKKwlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgICgobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpICYmIChyZWcgPT0gTUlJX0JNQ1IpICYmCisJICAgICAoZGF0YSAmIChCTUNSX0FOUkVTVEFSVCB8IEJNQ1JfQU5FTkFCTEUpKSkgeworCQl1MTYgYWR2ZXJ0ID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKworCQkvKgorCQkgKiBXb3JrYXJvdW5kIFNpIGlzc3VlIHdoZXJlIHNvbWV0aW1lcyB0aGUgcGFydCB3aWxsIG5vdAorCQkgKiBhdXRvbmVnIHRvIDEwME1icHMgZXZlbiB3aGVuIGFkdmVydGlzZWQuCisJCSAqLworCQlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCQlkYXRhIHw9IEJNQ1JfU1BFRUQxMDAgfCBCTUNSX0ZVTExEUExYOworCQllbHNlIGlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwSEFMRikKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMDsKKwl9CisKIAltZGlvX2N0cmwobmV0ZGV2X3ByaXYobmV0ZGV2KSwgYWRkciwgbWRpX3dyaXRlLCByZWcsIGRhdGEpOwogfQogCkBAIC0xMjc2LDE2ICsxMjk0LDEyIEBACiAJaWYgKGFkZHIgPT0gMzIpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogU2VsZWN0ZWQgdGhlIHBoeSBhbmQgaXNvbGF0ZSB0aGUgcmVzdCAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7Ci0JCWlmIChhZGRyICE9IG5pYy0+bWlpLnBoeV9pZCkgewotCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwotCQl9IGVsc2UgewotCQkJYm1jciA9IG1kaW9fcmVhZChuZXRkZXYsIGFkZHIsIE1JSV9CTUNSKTsKLQkJCW1kaW9fd3JpdGUobmV0ZGV2LCBhZGRyLCBNSUlfQk1DUiwKLQkJCQlibWNyICYgfkJNQ1JfSVNPTEFURSk7Ci0JCX0KLQl9CisJLyogSXNvbGF0ZSBhbGwgdGhlIFBIWSBpZHMgKi8KKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykKKwkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOworCS8qIFNlbGVjdCB0aGUgZGlzY292ZXJlZCBQSFkgKi8KKwlibWNyICY9IH5CTUNSX0lTT0xBVEU7CisJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwogCiAJLyogR2V0IHBoeSBJRCAqLwogCWlkX2xvID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfUEhZU0lEMSk7CkBAIC0xMzAzLDcgKzEzMTcsMTggQEAKIAkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX05TQ19DT05HLCBjb25nKTsKIAl9CiAKLQlpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBhZHZlcnQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOworCisJCS8qIFdvcmthcm91bmQgU2kgbm90IGFkdmVydGlzaW5nIGZsb3ctY29udHJvbCBkdXJpbmcgYXV0b25lZyAqLworCQlhZHZlcnQgfD0gQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBhZHZlcnQpOworCisJCS8qIFJlc2V0IGZvciB0aGUgYWJvdmUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCAqLworCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUik7CisJCWJtY3IgfD0gQk1DUl9SRVNFVDsKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOworCX0gZWxzZSBpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCiAJICAgKG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX1RQSVNUQVRVUykgJiAweDgwMDApICYmCiAJCSEobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKIAkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLiAqLwpAQCAtMTk0NCw5ICsxOTY5LDkgQEAKIAlpZiAoc3RhdF9hY2sgJiBzdGF0X2Fja19ybnIpCiAJCW5pYy0+cnVfcnVubmluZyA9IFJVX1NVU1BFTkRFRDsKIAotCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKIAkJZTEwMF9kaXNhYmxlX2lycShuaWMpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZuaWMtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJm5pYy0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTk2Miw3ICsxOTg3LDcgQEAKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWUxMDBfZW5hYmxlX2lycShuaWMpOwogCX0KIApAQCAtMjEzNCw2ICsyMTU5LDkgQEAKIH0KIAogI2RlZmluZSBNSUlfTEVEX0NPTlRST0wJMHgxQgorI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERSAweDE5CisjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09OICAgICAgIDB4MDAwRiAvKiBMRURUWCBhbmQgTEVEX1JYIGJvdGggb24gKi8KKyNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT0ZGICAgICAgMHgwMDBBIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvZmYgKi8KIHN0YXRpYyB2b2lkIGUxMDBfYmxpbmtfbGVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSAoc3RydWN0IG5pYyAqKWRhdGE7CkBAIC0yMTQzLDEwICsyMTcxLDE5IEBACiAJCWxlZF9vbl81NTkgPSAweDA1LAogCQlsZWRfb25fNTU3ID0gMHgwNywKIAl9OworCXUxNiBsZWRfcmVnID0gTUlJX0xFRF9DT05UUk9MOwogCi0JbmljLT5sZWRzID0gKG5pYy0+bGVkcyAmIGxlZF9vbikgPyBsZWRfb2ZmIDoKLQkJKG5pYy0+bWFjIDwgbWFjXzgyNTU5X0QxMDFNKSA/IGxlZF9vbl81NTcgOiBsZWRfb25fNTU5OwotCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCBuaWMtPmxlZHMpOworCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgeworCQlsZWRfcmVnID0gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREU7CisKKwkJbmljLT5sZWRzID0gKG5pYy0+bGVkcyA9PSBFMTAwXzgyNTUyX0xFRF9PTikgPworCQkgICAgICAgICAgICBFMTAwXzgyNTUyX0xFRF9PRkYgOiBFMTAwXzgyNTUyX0xFRF9PTjsKKwl9IGVsc2UgeworCQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgorCQkgICAgICAgICAgICAobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6CisJCSAgICAgICAgICAgIGxlZF9vbl81NTk7CisJfQorCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgbmljLT5sZWRzKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOwogfQogCkBAIC0yMzc1LDEzICsyNDEyLDE1IEBACiBzdGF0aWMgaW50IGUxMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiBsZWRfcmVnID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDoKKwkgICAgICAgICAgICAgIE1JSV9MRURfQ09OVFJPTDsKIAogCWlmICghZGF0YSB8fCBkYXRhID4gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCiAJCWRhdGEgPSAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKIAlkZWxfdGltZXJfc3luYygmbmljLT5ibGlua190aW1lcik7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCAwKTsKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY4Niw2ICsyNzI1LDkgQEAKIAl9CiB9CiAKKyNkZWZpbmUgRTEwMF84MjU1Ml9TTUFSVFNQRUVEICAgMHgxNCAgIC8qIFNtYXJ0U3BlZWQgQ3RybCByZWdpc3RlciAqLworI2RlZmluZSBFMTAwXzgyNTUyX1JFVl9BTkVHICAgICAweDAyMDAgLyogUmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisjZGVmaW5lIEUxMDBfODI1NTJfQU5FR19OT1cgICAgIDB4MDQwMCAvKiBBdXRvLW5lZ290aWF0ZSBub3cgKi8KIHN0YXRpYyBpbnQgZTEwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTI2OTgsNiArMjc0MCwxNSBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJaWYgKChuaWMtPmZsYWdzICYgd29sX21hZ2ljKSB8IGUxMDBfYXNmKG5pYykpIHsKKwkJLyogZW5hYmxlIHJldmVyc2UgYXV0by1uZWdvdGlhdGlvbiAqLworCQlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVEKTsKKworCQkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELCBzbWFydHNwZWVkIHwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9SRVZfQU5FRyB8IEUxMDBfODI1NTJfQU5FR19OT1cpOworCQl9CiAJCWlmIChwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgdHJ1ZSkpCiAJCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCB0cnVlKTsKIAl9IGVsc2UgewpAQCAtMjcyMSw2ICsyNzcyLDE2IEBACiAJLyogYWNrIGFueSBwZW5kaW5nIHdha2UgZXZlbnRzLCBkaXNhYmxlIFBNRSAqLwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCAwLCAwKTsKIAorCS8qIGRpc2JhbGUgcmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQpOworCisJCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELAorCQkgICAgICAgICAgIHNtYXJ0c3BlZWQgJiB+KEUxMDBfODI1NTJfUkVWX0FORUcpKTsKKwl9CisKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMF91cChuaWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggZjU1ODFkZS4uZTlhNDE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0xODIsNyArMTgyLDYgQEAKIAkvKiBhcnJheSBvZiBidWZmZXIgaW5mb3JtYXRpb24gc3RydWN0cyAqLwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCi0Jc3BpbmxvY2tfdCB0eF9sb2NrOwogCXUxNiB0ZGg7CiAJdTE2IHRkdDsKIAlib29sIGxhc3RfdHhfdHNvOwpAQCAtMjM4LDcgKzIzNyw2IEBACiAJdTE2IGxpbmtfc3BlZWQ7CiAJdTE2IGxpbmtfZHVwbGV4OwogCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKLQlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA2YmQ2M2NjLi45M2I4NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC01NzcsMTIgKzU3NywzMCBAQAogCiB2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiByY3RsLCB0Y3RsOwogCiAJLyogc2lnbmFsIHRoYXQgd2UncmUgZG93biBzbyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBub3QKIAkgKiByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0aW1lciAqLwogCXNldF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCisJLyogZGlzYWJsZSByZWNlaXZlcyBpbiB0aGUgaGFyZHdhcmUgKi8KKwlyY3RsID0gZXIzMihSQ1RMKTsKKwlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJLyogZmx1c2ggYW5kIHNsZWVwIGJlbG93ICovCisKKwkvKiBjYW4gYmUgbmV0aWZfdHhfZGlzYWJsZSB3aGVuIE5FVElGX0ZfTExUWCBpcyByZW1vdmVkICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlICovCisJdGN0bCA9IGVyMzIoVENUTCk7CisJdGN0bCAmPSB+RTEwMDBfVENUTF9FTjsKKwlldzMyKFRDVEwsIHRjdGwpOworCS8qIGZsdXNoIGJvdGggZGlzYWJsZXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoICovCisJRTEwMDBfV1JJVEVfRkxVU0goKTsKKwltc2xlZXAoMTApOworCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtNTk1LDcgKzYxMyw2IEBACiAJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CiAJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAJZTEwMDBfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwpAQCAtMTA0OCw4ICsxMDY1LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CkBAIC0xMzY4LDggKzEzODMsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0KIAkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNpbmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMTYyNCw3ICsxNjM3LDYgQEAKIAogCXR4ZHItPm5leHRfdG9fdXNlID0gMDsKIAl0eGRyLT5uZXh0X3RvX2NsZWFuID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmdHhkci0+dHhfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODIsOCArMTg5NCw2IEBACiAgKiBlMTAwMF9zZXR1cF9yY3RsIC0gY29uZmlndXJlIHRoZSByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiBAYWRhcHRlcjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0JCQkoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCiBzdGF0aWMgdm9pZCBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yMDU2LDE3ICsyMDY2LDE0IEBACiBzdGF0aWMgdm9pZCBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICBzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yODY1LDExICsyODcyLDExIEBACiAJCXJldHVybiBmYWxzZTsKIAogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQljbWRfbGVuIHw9IEUxMDAwX1RYRF9DTURfVENQOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJLyogWFhYIG5vdCBoYW5kbGluZyBhbGwgSVBWNiBoZWFkZXJzICovCiAJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKQEAgLTI5MTUsMTMgKzI5MjIsMjEgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOworCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgZjsKLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisJb2Zmc2V0ID0gMDsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBtYXhfcGVyX3R4ZCk7CkBAIC0yOTU2LDE4ICsyOTcxLDE4IEBACiAJCQlzaXplIC09IDQ7CiAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKLQkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCi0JCQkJc2l6ZSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0yOTc1LDkgKzI5OTAsMTMgQEAKIAogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCQkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKQEAgLTI5OTMsMjMgKzMwMTIsMTYgQEAKIAkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCX0KIAl9CiAKLQlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0zMTg1LDcgKzMxOTcsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbXNzOwogCWludCBjb3VudCA9IDA7CkBAIC0zMjkwLDIyICszMzAxLDE1IEBACiAJICAgIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpKQogCQllMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oYWRhcHRlciwgc2tiKTsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKSkKLQkJLyogQ29sbGlzaW9uIC0gdGVsbCB1cHBlciBsYXllciB0byByZXF1ZXVlICovCi0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotCiAJLyogbmVlZDogY291bnQgKyAyIGRlc2MgZ2FwIHRvIGtlZXAgdGFpbCBmcm9tIHRvdWNoaW5nCiAJICogaGVhZCwgb3RoZXJ3aXNlIHRyeSBuZXh0IHRpbWUgKi8KLQlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKIAkJaWYgKHVubGlrZWx5KGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChhZGFwdGVyLCBza2IpKSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyLCBqaWZmaWVzICsgMSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJCX0KIAl9CkBAIC0zMzIwLDcgKzMzMjQsNiBAQAogCXRzbyA9IGUxMDAwX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IpOwogCWlmICh0c28gPCAwKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKQEAgLTMzMzYsMTYgKzMzMzksMjEgQEAKIAlpZiAobGlrZWx5KHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAotCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCSAgICAgICAgICAgICAgIGUxMDAwX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVyX3R4ZCwgbnJfZnJhZ3MsIG1zcykpOworCWNvdW50ID0gZTEwMDBfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QsIG1heF9wZXJfdHhkLAorCSAgICAgICAgICAgICAgICAgICAgIG5yX2ZyYWdzLCBtc3MpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBNQVhfU0tCX0ZSQUdTICsgMik7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTM2ODcsMTIgKzM2OTUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSkgeworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfSBlbHNlCiAJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAKQEAgLTM3NDcsMTYgKzM3NTUsMTggQEAKIAkJZXczMihJTUMsIH4wKTsKIAkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAl9Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpKSB7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwotCX0gZWxzZQorCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCX0gZWxzZSB7CiAJCS8qIHRoaXMgcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuISBpZiBpdCBkb2VzIGl0IGlzIGJhc2ljYWxseSBhCiAJCSAqIGJ1ZywgYnV0IG5vdCBhIGhhcmQgZXJyb3IsIHNvIGVuYWJsZSBpbnRzIGFuZCBjb250aW51ZSAqLwotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzc3MywyOCArMzc4MywyMSBAQAogCiAJYWRhcHRlciA9IG5ldGRldl9wcml2KHBvbGxfZGV2KTsKIAotCS8qIGUxMDAwX2NsZWFuIGlzIGNhbGxlZCBwZXItY3B1LiAgVGhpcyBsb2NrIHByb3RlY3RzCi0JICogdHhfcmluZ1swXSBmcm9tIGJlaW5nIGNsZWFuZWQgYnkgbXVsdGlwbGUgY3B1cwotCSAqIHNpbXVsdGFuZW91c2x5LiAgQSBmYWlsdXJlIG9idGFpbmluZyB0aGUgbG9jayBtZWFucwotCSAqIHR4X3JpbmdbMF0gaXMgY3VycmVudGx5IGJlaW5nIGNsZWFuZWQgYW55d2F5LiAqLwotCWlmIChzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spKSB7Ci0JCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwKLQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nWzBdKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCX0KKwl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nWzBdKTsKIAogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nWzBdLAogCSAgICAgICAgICAgICAgICAgICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGxpa2VseShhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpKQogCQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzgxMywxNSArMzgxNiwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwlib29sIGNsZWFuZWQ7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzPTAsIHRvdGFsX3R4X3BhY2tldHM9MDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgKSB7CisJd2hpbGUgKChlb3BfZGVzYy0+dXBwZXIuZGF0YSAmIGNwdV90b19sZTMyKEUxMDAwX1RYRF9TVEFUX0REKSkgJiYKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+Y291bnQpKSB7CisJCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKQEAgLTM4NDQsMTAgKzM4NDgsNiBAQAogCiAJCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgZW9wKTsKLSNkZWZpbmUgRTEwMDBfVFhfV0VJR0hUIDY0Ci0JCS8qIHdlaWdodCBvZiBhIHNvcnQgZm9yIHR4LCB0byBhdm9pZCBlbmRsZXNzIHRyYW5zbWl0IGNsZWFudXAgKi8KLQkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKQotCQkJYnJlYWs7CiAJfQogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CkBAIC0zODY5LDggKzM4NjksOCBAQAogCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgKwogCQkgICAgICAgICAgICAgICAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIApAQCAtMzg5Miw3ICszODkyLDcgQEAKIAkJCQlyZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCksCiAJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCiAJCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCwKIAkJCQllb3AsCiAJCQkJamlmZmllcywKIAkJCQllb3BfZGVzYy0+dXBwZXIuZmllbGRzLnN0YXR1cyk7CkBAIC0zOTAzLDcgKzM5MDMsNyBAQAogCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKLQlyZXR1cm4gY2xlYW5lZDsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggMDg5MDE2Mi4uNmMwMWEyMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC00MCw2ICs0MCw3IEBACiAgKiA4MjU3M0UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChDb3BwZXIpCiAgKiA4MjU3M0wgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCiAgKiA4MjU3NEwgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTgzViBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTYxLDYgKzYyLDcgQEAKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X3BoeV9pZF84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfY29wcGVyX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsCiAJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogc3RhdGljIHMzMiBlMTAwMF9maXhfbnZtX2NoZWNrc3VtXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtOTksNiArMTAxLDcgQEAKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfbTg4OwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXBoeS0+dHlwZQkJID0gZTEwMDBfcGh5X2JtOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTIxLDYgKzEyNCw3IEBACiAJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJaWYgKHBoeS0+aWQgIT0gQk1FMTAwMF9FX1BIWV9JRF9SMikKIAkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAkJYnJlYWs7CkBAIC0xNjQsNiArMTY4LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAoKChlZWNkID4+IDE1KSAmIDB4MykgPT0gMHgzKSB7CiAJCQludm0tPnR5cGUgPSBlMTAwMF9udm1fZmxhc2hfaHc7CiAJCQludm0tPndvcmRfc2l6ZSA9IDIwNDg7CkBAIC0yNTAsNyArMjU1LDcgQEAKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgogCQlmdW5jLT5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UgPQogCQkJZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzE7Ci0JCWZ1bmMtPmNoZWNrX2Zvcl9saW5rID0gZTEwMDBlX2NoZWNrX2Zvcl9zZXJkZXNfbGluazsKKwkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzE7CiAJCWZ1bmMtPmdldF9saW5rX3VwX2luZm8gPQogCQkJZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlczsKIAkJYnJlYWs7CkBAIC0yNjEsNiArMjY2LDcgQEAKIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwX2NoZWNrX21uZ19tb2RlXzgyNTc0OwogCQlmdW5jLT5sZWRfb24gPSBlMTAwMF9sZWRfb25fODI1NzQ7CiAJCWJyZWFrOwpAQCAtMzc0LDYgKzM4MCw3IEBACiAJCXJldHVybiBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKQEAgLTQ2Myw4ICs0NzAsMTUgQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTczICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXRfdmFsID0gZTEwMDBlX2FjcXVpcmVfbnZtKGh3KTsKKwkJYnJlYWs7CisJfQogCiAJaWYgKHJldF92YWwpCiAJCWUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzEoaHcpOwpAQCAtNTA0LDYgKzUxOCw3IEBACiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKGh3LCBvZmZzZXQsIHdvcmRzLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MToKQEAgLTc3OCw3ICs3OTMsMTAgQEAKIAkgKiBNdXN0IGFjcXVpcmUgdGhlIE1ESU8gb3duZXJzaGlwIGJlZm9yZSBNQUMgcmVzZXQuCiAJICogT3duZXJzaGlwIGRlZmF1bHRzIHRvIGZpcm13YXJlIGFmdGVyIGEgcmVzZXQuCiAJICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwogCQlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKIApAQCAtNzk0LDYgKzgxMiw5IEBACiAJCQltc2xlZXAoMik7CiAJCQlpKys7CiAJCX0gd2hpbGUgKGkgPCBNRElPX09XTkVSU0hJUF9USU1FT1VUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJY3RybCA9IGVyMzIoQ1RSTCk7CkBAIC04MTksOCArODQwLDE2IEBACiAJICogTmVlZCB0byB3YWl0IGZvciBQaHkgY29uZmlndXJhdGlvbiBjb21wbGV0aW9uIGJlZm9yZSBhY2Nlc3NpbmcKIAkgKiBOVk0gYW5kIFBoeS4KIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkKKworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCW1zbGVlcCgyNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBldmVudHMuICovCiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwpAQCAtODMwLDYgKzg1OSwxMCBAQAogCQlody0+ZGV2X3NwZWMuZTgyNTcxLmFsdF9tYWNfYWRkcl9pc19wcmVzZW50KQogCQkJZTEwMDBlX3NldF9sYWFfc3RhdGVfODI1NzEoaHcsIHRydWUpOwogCisJLyogUmVpbml0aWFsaXplIHRoZSA4MjU3MSBzZXJkZXMgbGluayBzdGF0ZSBtYWNoaW5lICovCisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJaHctPm1hYy5zZXJkZXNfbGlua19zdGF0ZSA9IGUxMDAwX3NlcmRlc19saW5rX2Rvd247CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg2LDE3ICs5MTksMjIgQEAKIAlldzMyKFRYRENUTCgwKSwgcmVnX2RhdGEpOwogCiAJLyogLi4uZm9yIGJvdGggcXVldWVzLiAqLwotCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzMgJiYgbWFjLT50eXBlICE9IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChtYWMtPnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJZTEwMDBlX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKGh3KTsKKwkJcmVnX2RhdGEgPSBlcjMyKEdDUik7CisJCXJlZ19kYXRhIHw9IEUxMDAwX0dDUl9MMV9BQ1RfV0lUSE9VVF9MMFNfUlg7CisJCWV3MzIoR0NSLCByZWdfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJlZ19kYXRhID0gZXIzMihUWERDVEwoMSkpOwogCQlyZWdfZGF0YSA9IChyZWdfZGF0YSAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfAogCQkJICAgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQiB8CiAJCQkgICBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKIAkJZXczMihUWERDVEwoMSksIHJlZ19kYXRhKTsKLQl9IGVsc2UgewotCQllMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOwotCQlyZWdfZGF0YSA9IGVyMzIoR0NSKTsKLQkJcmVnX2RhdGEgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKLQkJZXczMihHQ1IsIHJlZ19kYXRhKTsKKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTk2MSwxOCArOTk5LDMwIEBACiAJfQogCiAJLyogRGV2aWNlIENvbnRyb2wgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoQ1RSTCk7CiAJCXJlZyAmPSB+KDEgPDwgMjkpOwogCQlldzMyKENUUkwsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCS8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZWcgPSBlcjMyKENUUkxfRVhUKTsKIAkJcmVnICY9IH4oMSA8PCAyMyk7CiAJCXJlZyB8PSAoMSA8PCAyMik7CiAJCWV3MzIoQ1RSTF9FWFQsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHsKQEAgLTk4MCw5ICsxMDMwLDIzIEBACiAJCXJlZyB8PSBFMTAwMF9QQkFfRUNDX0NPUlJfRU47CiAJCWV3MzIoUEJBX0VDQywgcmVnKTsKIAl9CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBoYXJkd2FyZSBlcnJhdGEuCisJICogRW5zdXJlIHRoYXQgRE1BIER5bmFtaWMgQ2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkIG9uIDgyNTcxIGFuZCA4MjU3MgorCSAqLworCisgICAgICAgIGlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcxKSB8fAorICAgICAgICAgICAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcyKSkgeworICAgICAgICAgICAgICAgIHJlZyA9IGVyMzIoQ1RSTF9FWFQpOworICAgICAgICAgICAgICAgIHJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfRE1BX0RZTl9DTEtfRU47CisgICAgICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgcmVnKTsKKyAgICAgICAgfQorCiAKIAkvKiBQQ0ktRXggQ29udHJvbCBSZWdpc3RlcnMgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoR0NSKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihHQ1IsIHJlZyk7CkBAIC05OTAsNiArMTA1NCw5IEBACiAJCXJlZyA9IGVyMzIoR0NSMik7CiAJCXJlZyB8PSAxOwogCQlldzMyKEdDUjIsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXJldHVybjsKQEAgLTEwMDksNyArMTA3NiwxMCBAQAogCXUzMiB2ZnRhX29mZnNldCA9IDA7CiAJdTMyIHZmdGFfYml0X2luX3JlZyA9IDA7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmIChody0+bW5nX2Nvb2tpZS52bGFuX2lkICE9IDApIHsKIAkJCS8qCiAJCQkgKiBUaGUgVkZUQSBpcyBhIDQwOTZiIGJpdC1maWVsZCwgZWFjaCBpZGVudGlmeWluZwpAQCAtMTAyNCw2ICsxMDk0LDkgQEAKIAkJCXZmdGFfYml0X2luX3JlZyA9IDEgPDwgKGh3LT5tbmdfY29va2llLnZsYW5faWQgJgogCQkJCQkgICAgICAgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyk7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgRTEwMDBfVkxBTl9GSUxURVJfVEJMX1NJWkU7IG9mZnNldCsrKSB7CiAJCS8qCkBAIC0xMTIyLDkgKzExOTUsMTYgQEAKIAkgKiB0aGUgZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseQogCSAqIHNldCBpdCB0byBmdWxsLgogCSAqLwotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgJiYKLQkgICAgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2RlZmF1bHQpCi0JCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19kZWZhdWx0KQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIGUxMDAwZV9zZXR1cF9saW5rKGh3KTsKIH0KQEAgLTEyMDMsNiArMTI4MywxMzEgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfY2hlY2tfZm9yX3NlcmRlc19saW5rXzgyNTcxIC0gQ2hlY2sgZm9yIGxpbmsgKFNlcmRlcykKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBDaGVja3MgZm9yIGxpbmsgdXAgb24gdGhlIGhhcmR3YXJlLiAgSWYgbGluayBpcyBub3QgdXAgYW5kIHdlIGhhdmUKKyAqICBhIHNpZ25hbCwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGxpbmsgdXAuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2NoZWNrX2Zvcl9zZXJkZXNfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTMyIHJ4Y3c7CisJdTMyIGN0cmw7CisJdTMyIHN0YXR1czsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwljdHJsID0gZXIzMihDVFJMKTsKKwlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CisJcnhjdyA9IGVyMzIoUlhDVyk7CisKKwlpZiAoKHJ4Y3cgJiBFMTAwMF9SWENXX1NZTkNIKSAmJiAhKHJ4Y3cgJiBFMTAwMF9SWENXX0lWKSkgeworCisJCS8qIFJlY2VpdmVyIGlzIHN5bmNocm9uaXplZCB3aXRoIG5vIGludmFsaWQgYml0cy4gICovCisJCXN3aXRjaCAobWFjLT5zZXJkZXNfbGlua19zdGF0ZSkgeworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfY29tcGxldGU6CisJCQlpZiAoIShzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGxvc3QgbGluaywgcmV0cnkgYXV0b25lZyBiZWZvcmUKKwkJCQkgKiByZXBvcnRpbmcgbGluayBmYWlsdXJlCisJCQkJICovCisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiQU5fVVAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cDoKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIC9DLyBvcmRlcmVkIHNldHMsIHJlLWVuYWJsZQorCQkJICogYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciBhbmQgZGlzYWJsZQorCQkJICogZm9yY2VkIGxpbmsgaW4gdGhlIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGluIGFuCisJCQkgKiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsgcGFydG5lci4KKwkJCSAqLworCQkJaWYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpIHsKKwkJCQkvKiBFbmFibGUgYXV0b25lZywgYW5kIHVuZm9yY2UgbGluayB1cCAqLworCQkJCWV3MzIoVFhDVywgbWFjLT50eGN3KTsKKwkJCQlldzMyKENUUkwsCisJCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiRk9SQ0VEX1VQIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOgorCQkJLyoKKwkJCSAqIElmIHRoZSBMVSBiaXQgaXMgc2V0IGluIHRoZSBTVEFUVVMgcmVnaXN0ZXIsCisJCQkgKiBhdXRvbmVnIGhhcyBjb21wbGV0ZWQgc3VjZXNzZnVsbHkuIElmIG5vdCwKKwkJCSAqIHRyeSBmb3JpbmcgdGhlIGxpbmsgYmVjYXVzZSB0aGUgZmFyIGVuZCBtYXkgYmUKKwkJCSAqIGF2YWlsYWJsZSBidXQgbm90IGNhcGFibGUgb2YgYXV0b25lZ290aWF0aW9uLgorCQkJICovCisJCQlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKSAgeworCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlOworCQkJCWh3X2RiZyhodywgIkFOX1BST0cgICAtPiBBTl9VUFxuIik7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogRGlzYWJsZSBhdXRvbmVnLCBmb3JjZSBsaW5rIHVwIGFuZAorCQkJCSAqIGZ1bGwgZHVwbGV4LCBhbmQgY2hhbmdlIHN0YXRlIHRvIGZvcmNlZAorCQkJCSAqLworCQkJCWV3MzIoVFhDVywKKwkJCQkgICAgKG1hYy0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOworCQkJCWN0cmwgfD0gKEUxMDAwX0NUUkxfU0xVIHwgRTEwMDBfQ1RSTF9GRCk7CisJCQkJZXczMihDVFJMLCBjdHJsKTsKKworCQkJCS8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgYWZ0ZXIgbGluayB1cC4gKi8KKwkJCQlyZXRfdmFsID0KKwkJCQkgICAgZTEwMDBlX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKGh3KTsKKwkJCQlpZiAocmV0X3ZhbCkgeworCQkJCQlod19kYmcoaHcsICJFcnJvciBjb25maWcgZmxvdyBjb250cm9sXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19mb3JjZWRfdXA7CisJCQkJaHdfZGJnKGh3LCAiQU5fUFJPRyAgIC0+IEZPUkNFRF9VUFxuIik7CisJCQl9CisJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2Rvd246CisJCWRlZmF1bHQ6CisJCQkvKiBUaGUgbGluayB3YXMgZG93biBidXQgdGhlIHJlY2VpdmVyIGhhcyBub3cgZ2FpbmVkCisJCQkgKiB2YWxpZCBzeW5jLCBzbyBsZXRzIHNlZSBpZiB3ZSBjYW4gYnJpbmcgdGhlIGxpbmsKKwkJCSAqIHVwLiAqLworCQkJZXczMihUWENXLCBtYWMtPnR4Y3cpOworCQkJZXczMihDVFJMLAorCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0KKwkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOworCQkJaHdfZGJnKGh3LCAiRE9XTiAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShyeGN3ICYgRTEwMDBfUlhDV19TWU5DSCkpIHsKKwkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHN5bmMsIGFuZCBjYW4gdG9sZXJhdGUgb25lCisJCQkgKiBpbnZhbGlkIChJVikgY29kZXdvcmQgYmVmb3JlIGRlY2xhcmluZworCQkJICogbGluayBkb3duLCBzbyByZXJlYWQgdG8gbG9vayBhZ2FpbgorCQkJICovCisJCQl1ZGVsYXkoMTApOworCQkJcnhjdyA9IGVyMzIoUlhDVyk7CisJCQlpZiAocnhjdyAmIEUxMDAwX1JYQ1dfSVYpIHsKKwkJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IGZhbHNlOworCQkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF92YWxpZF9sZWRfZGVmYXVsdF84MjU3MSAtIFZlcmlmeSBhIHZhbGlkIGRlZmF1bHQgTEVEIGNvbmZpZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIE5WTSAoRUVQUk9NKQpAQCAtMTIyMCwxMSArMTQyNSwxOSBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpICYmCi0JICAgICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GNzQ2KQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUXzgyNTczOwotCWVsc2UgaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF8wMDAwIHx8ICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GRkZGKQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRjc0NikKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFRfODI1NzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfMDAwMCB8fAorCQkgICAgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCisJCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTcsMyArMTczMCwxOSBAQAogCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKIH07CiAKK3N0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTgzX2luZm8gPSB7CisJLm1hYwkJCT0gZTEwMDBfODI1ODMsCisJLmZsYWdzCQkJPSBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUgorCQkJCSAgfCBGTEFHX0hBU19XT0wKKwkJCQkgIHwgRkxBR19BUE1FX0lOX0NUUkwzCisJCQkJICB8IEZMQUdfUlhfQ1NVTV9FTkFCTEVECisJCQkJICB8IEZMQUdfSEFTX1NNQVJUX1BPV0VSX0RPV04KKwkJCQkgIHwgRkxBR19IQVNfQU1UCisJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKKwkucGJhCQkJPSAyMCwKKwkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKKwkubWFjX29wcwkJPSAmZTgyNTcxX21hY19vcHMsCisJLnBoeV9vcHMJCT0gJmU4Ml9waHlfb3BzX2JtLAorCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IGU2Y2FmMjkuLjI0M2FhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmFibGUgUGluIDcgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1JPX0RJUyAgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9ETUFfRFlOX0NMS19FTiAweDAwMDgwMDAwIC8qIERNQSBEeW5hbWljIENsb2NrIEdhdGluZyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9FSUFNRSAgICAgICAgICAweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDM3YmNiMTkuLmYzNzM2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xMDEsNiArMTAxLDcgQEAKIAlib2FyZF84MjU3MiwKIAlib2FyZF84MjU3MywKIAlib2FyZF84MjU3NCwKKwlib2FyZF84MjU4MywKIAlib2FyZF84MDAwM2VzMmxhbiwKIAlib2FyZF9pY2g4bGFuLAogCWJvYXJkX2ljaDlsYW4sCkBAIC0xOTUsOCArMTk2LDYgQEAKIAl1MTYgbGlua19kdXBsZXg7CiAJdTE2IGVlcHJvbV92ZXJzOwogCi0Jc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOyAvKiBwcmV2ZW50IGNvbmN1cnJlbnQgdGFpbCB1cGRhdGVzICovCi0KIAkvKiB0cmFjayBkZXZpY2UgdXAvZG93bi90ZXN0aW5nIHN0YXRlICovCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIApAQCAtNDAxLDYgKzQwMCw3IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzJfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3M19pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc0X2luZm87CitleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g4X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoOV9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2ljaDEwX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCBlNDg5NTZkLi40ZDI1ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTc5MCw2ICs3OTAsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAljYXNlIGUxMDAwX2ljaDhsYW46CiAJY2FzZSBlMTAwMF9pY2g5bGFuOgogCWNhc2UgZTEwMDBfaWNoMTBsYW46CkBAIC0xNTg5LDcgKzE1OTAsNyBAQAogCSpkYXRhID0gMDsKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAJCWludCBpID0gMDsKLQkJaHctPm1hYy5zZXJkZXNfaGFzX2xpbmsgPSAwOworCQlody0+bWFjLnNlcmRlc19oYXNfbGluayA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAppbmRleCAyZDRjZTA0Li5kOGI4MjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaApAQCAtMzM5LDYgKzMzOSw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0VfSUFNVAkJMHgxMDhDCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0wJCQkweDEwOUEKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc0TAkJCTB4MTBEMworI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzRMQQkJCTB4MTBGNgorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1ODNWICAgICAgICAgICAgICAgICAgICAgMHgxNTBDCiAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQJMHgxMDk2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfRFBUCTB4MTA5OApAQCAtMzc2LDYgKzM3OCw3IEBACiAJZTEwMDBfODI1NzIsCiAJZTEwMDBfODI1NzMsCiAJZTEwMDBfODI1NzQsCisJZTEwMDBfODI1ODMsCiAJZTEwMDBfODAwMDNlczJsYW4sCiAJZTEwMDBfaWNoOGxhbiwKIAllMTAwMF9pY2g5bGFuLApAQCAtNDU5LDYgKzQ2MiwxMyBAQAogCWUxMDAwX3NtYXJ0X3NwZWVkX29mZgogfTsKIAorZW51bSBlMTAwMF9zZXJkZXNfbGlua19zdGF0ZSB7CisJZTEwMDBfc2VyZGVzX2xpbmtfZG93biA9IDAsCisJZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19wcm9ncmVzcywKKwllMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlLAorCWUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cAorfTsKKwogLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7CiAJX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KQEAgLTc4Nyw2ICs3OTcsNyBAQAogCWJvb2wgaW5faWZzX21vZGU7CiAJYm9vbCBzZXJkZXNfaGFzX2xpbms7CiAJYm9vbCB0eF9wa3RfZmlsdGVyaW5nOworCWVudW0gZTEwMDBfc2VyZGVzX2xpbmtfc3RhdGUgc2VyZGVzX2xpbmtfc3RhdGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggZTQxNWU4MS4uNmQxYWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0zOTAsOCArMzkwLDYgQEAKIH0KIAogc3RhdGljIERFRklORV9NVVRFWChudm1fbXV0ZXgpOwotc3RhdGljIHBpZF90IG52bV9vd25lcl9waWQgPSAtMTsKLXN0YXRpYyBjaGFyIG52bV9vd25lcl9uYW1lW1RBU0tfQ09NTV9MRU5dID0gIiI7CiAKIC8qKgogICogIGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4gLSBBY3F1aXJlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZwpAQCAtNDA4LDE2ICs0MDYsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmbnZtX211dGV4KSkgewotCQlXQVJOKDEsIEtFUk5fRVJSICJlMTAwMGUgbXV0ZXggY29udGVudGlvbi4gT3duZWQgYnkgcHJvY2VzcyAiCi0JCSAgICAgIiVzIChwaWQgJWQpLCByZXF1aXJlZCBieSBwcm9jZXNzICVzIChwaWQgJWQpXG4iLAotCQkgICAgIG52bV9vd25lcl9uYW1lLCBudm1fb3duZXJfcGlkLAotCQkgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0KLQkJbXV0ZXhfbG9jaygmbnZtX211dGV4KTsKLQl9Ci0JbnZtX293bmVyX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlzdHJuY3B5KG52bV9vd25lcl9uYW1lLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwltdXRleF9sb2NrKCZudm1fbXV0ZXgpOwogCiAJd2hpbGUgKHRpbWVvdXQpIHsKIAkJZXh0Y25mX2N0cmwgPSBlcjMyKEVYVENORl9DVFJMKTsKQEAgLTQzNSw4ICs0MjQsNiBAQAogCQlod19kYmcoaHcsICJGVyBvciBIVyBoYXMgbG9ja2VkIHRoZSByZXNvdXJjZSBmb3IgdG9vIGxvbmcuXG4iKTsKIAkJZXh0Y25mX2N0cmwgJj0gfkUxMDAwX0VYVENORl9DVFJMX1NXRkxBRzsKIAkJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwotCQludm1fb3duZXJfcGlkID0gLTE7Ci0JCXN0cmNweShudm1fb3duZXJfbmFtZSwgIiIpOwogCQltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiAJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKIAl9CkBAIC00NjAsOCArNDQ3LDYgQEAKIAlleHRjbmZfY3RybCAmPSB+RTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKIAotCW52bV9vd25lcl9waWQgPSAtMTsKLQlzdHJjcHkobnZtX293bmVyX25hbWUsICIiKTsKIAltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCA2Njc0MTEwLi4xOGE0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC0xNTksNDEgKzE1OSw2IEBACiB9CiAKIC8qKgotICogIGUxMDAwX210YV9zZXQgLSBTZXQgbXVsdGljYXN0IGZpbHRlciB0YWJsZSBhZGRyZXNzCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAaGFzaF92YWx1ZTogZGV0ZXJtaW5lcyB0aGUgTVRBIHJlZ2lzdGVyIGFuZCBiaXQgdG8gc2V0Ci0gKgotICogIFRoZSBtdWx0aWNhc3QgdGFibGUgYWRkcmVzcyBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuCi0gKiAgVGhlIGhhc2hfdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCByZWdpc3RlciB0aGUgYml0IGlzIGluLCB0aGUKLSAqICBjdXJyZW50IHZhbHVlIGlzIHJlYWQsIHRoZSBuZXcgYml0IGlzIE9SJ2QgaW4gYW5kIHRoZSBuZXcgdmFsdWUgaXMKLSAqICB3cml0dGVuIGJhY2sgaW50byB0aGUgcmVnaXN0ZXIuCi0gKiovCi1zdGF0aWMgdm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKQotewotCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWcsIG10YTsKLQotCS8qCi0JICogVGhlIE1UQSBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuIEl0IGlzCi0JICogdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mICgzMiptdGFfcmVnX2NvdW50KSBiaXRzLiAgV2Ugd2FudCB0bwotCSAqIHNldCBiaXQgQml0QXJyYXlbaGFzaF92YWx1ZV0uIFNvIHdlIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcgotCSAqIHRoZSBiaXQgaXMgaW4sIHJlYWQgaXQsIE9SIGluIHRoZSBuZXcgYml0LCB0aGVuIHdyaXRlCi0JICogYmFjayB0aGUgbmV3IHZhbHVlLiAgVGhlIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKSBzZXJ2ZXMgYXMgYQotCSAqIG1hc2sgdG8gYml0cyAzMTo1IG9mIHRoZSBoYXNoIHZhbHVlIHdoaWNoIGdpdmVzIHVzIHRoZQotCSAqIHJlZ2lzdGVyIHdlJ3JlIG1vZGlmeWluZy4gIFRoZSBoYXNoIGJpdCB3aXRoaW4gdGhhdCByZWdpc3RlcgotCSAqIGlzIGRldGVybWluZWQgYnkgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGUgaGFzaCB2YWx1ZS4KLQkgKi8KLQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpOwotCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7Ci0KLQltdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBoYXNoX3JlZyk7Ci0KLQltdGEgfD0gKDEgPDwgaGFzaF9iaXQpOwotCi0JRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGhhc2hfcmVnLCBtdGEpOwotCWUxZV9mbHVzaCgpOwotfQotCi0vKioKICAqICBlMTAwMF9oYXNoX21jX2FkZHIgLSBHZW5lcmF0ZSBhIG11bHRpY2FzdCBoYXNoIHZhbHVlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcjogcG9pbnRlciB0byBhIG11bHRpY2FzdCBhZGRyZXNzCkBAIC0yODEsOCArMjQ2LDEzIEBACiAJCQkJCXU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAogCQkJCQl1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7Ci0JdTMyIGhhc2hfdmFsdWU7CiAJdTMyIGk7CisJdTMyICptY2FycmF5ID0ga3phbGxvYyhody0+bWFjLm10YV9yZWdfY291bnQgKiBzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIW1jYXJyYXkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aWNhc3QgYXJyYXkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCS8qCiAJICogTG9hZCB0aGUgZmlyc3Qgc2V0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgZXhhY3QKQEAgLTMwMiwyMCArMjcyLDI0IEBACiAJCX0KIAl9CiAKLQkvKiBDbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIE1UQSAqLwotCWh3X2RiZyhodywgIkNsZWFyaW5nIE1UQVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKSB7Ci0JCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBpLCAwKTsKLQkJZTFlX2ZsdXNoKCk7Ci0JfQotCiAJLyogTG9hZCBhbnkgcmVtYWluaW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KIAlmb3IgKDsgbWNfYWRkcl9jb3VudCA+IDA7IG1jX2FkZHJfY291bnQtLSkgeworCQl1MzIgaGFzaF92YWx1ZSwgaGFzaF9yZWcsIGhhc2hfYml0LCBtdGE7CiAJCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7CiAJCWh3X2RiZyhodywgIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOwotCQllMTAwMF9tdGFfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKKwkJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKKwkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKKwkJbXRhID0gKDEgPDwgaGFzaF9iaXQpOworCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7CiAJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKIAl9CisKKwkvKiB3cml0ZSB0aGUgaGFzaCB0YWJsZSBjb21wbGV0ZWx5ICovCisJZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKQorCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgbWNhcnJheVtpXSk7CisKKwllMWVfZmx1c2goKTsKKwlrZnJlZShtY2FycmF5KTsKIH0KIAogLyoqCkBAIC01MDEsNyArNDc1LDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NjYsNyArNTQwLDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfSBlbHNlIGlmICghKEUxMDAwX1RYQ1dfQU5FICYgZXIzMihUWENXKSkpIHsKIAkJLyoKIAkJICogSWYgd2UgZm9yY2UgbGluayBmb3Igbm9uLWF1dG8tbmVnb3RpYXRpb24gc3dpdGNoLCBjaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDkxODE3ZDAuLmJmYjJkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQ0LDEwICs0NCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogI2luY2x1ZGUgImUxMDAwLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zLjMtazYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMy40LWs0IgogY2hhciBlMTAwMGVfZHJpdmVyX25hbWVbXSA9ICJlMTAwMGUiOwogY29uc3QgY2hhciBlMTAwMGVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCkBAIC01Niw2ICs1Nyw3IEBACiAJW2JvYXJkXzgyNTcyXQkJPSAmZTEwMDBfODI1NzJfaW5mbywKIAlbYm9hcmRfODI1NzNdCQk9ICZlMTAwMF84MjU3M19pbmZvLAogCVtib2FyZF84MjU3NF0JCT0gJmUxMDAwXzgyNTc0X2luZm8sCisJW2JvYXJkXzgyNTgzXQkJPSAmZTEwMDBfODI1ODNfaW5mbywKIAlbYm9hcmRfODAwMDNlczJsYW5dCT0gJmUxMDAwX2VzMl9pbmZvLAogCVtib2FyZF9pY2g4bGFuXQkJPSAmZTEwMDBfaWNoOF9pbmZvLAogCVtib2FyZF9pY2g5bGFuXQkJPSAmZTEwMDBfaWNoOV9pbmZvLApAQCAtOTksOCArMTAxLDggQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCQkgbGUxNl90b19jcHUodmxhbikpOworCQl2bGFuX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBhZGFwdGVyLT52bGdycCwKKwkJCQkgbGUxNl90b19jcHUodmxhbiksIHNrYik7CiAJZWxzZQogCQluYXBpX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBza2IpOwogfQpAQCAtNTY1LDE1ICs1NjcsMTQgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF90eGJ1ZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ByaW50X3R4X2hhbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MjAsMTUgKzYyMSwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSAwOworCWJvb2wgY2xlYW5lZDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXMgPSAwLCB0b3RhbF90eF9wYWNrZXRzID0gMDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IDA7ICFjbGVhbmVkOyApIHsKKwl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkJZm9yIChjbGVhbmVkID0gMDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CkBAIC02NTQsMTAgKzY1Niw2IEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2RlZmluZSBFMTAwMF9UWF9XRUlHSFQgNjQKLQkJLyogd2VpZ2h0IG9mIGEgc29ydCBmb3IgdHgsIHRvIGF2b2lkIGVuZGxlc3MgdHJhbnNtaXQgY2xlYW51cCAqLwotCQlpZiAoY291bnQrKyA9PSBFMTAwMF9UWF9XRUlHSFQpCi0JCQlicmVhazsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKQEAgLTY3OCwxMyArNjc2LDExIEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7Ci0JCS8qCi0JCSAqIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKLQkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaQotCQkgKi8KKwkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCiAJCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gMDsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcAorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wCiAJCQkgICAgICAgKyAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAkJCWUxMDAwX3ByaW50X3R4X2hhbmcoYWRhcHRlcik7CkBAIC02OTUsNyArNjkxLDcgQEAKIAlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX3R4X2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7Ci0JcmV0dXJuIGNsZWFuZWQ7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPmNvdW50KTsKIH0KIAogLyoqCkBAIC0xMTUyLDcgKzExNDgsNyBAQAogCSAqIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNCiAJICovCiAKLQlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQkvKgogCQkgKiBJQ0g4IHdvcmthcm91bmQtLSBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gY2FibGUKQEAgLTExNzksMTIgKzExNzUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjE4LDcgKzEyMTQsNyBAQAogCSAqIElNQyB3cml0ZQogCSAqLwogCi0JaWYgKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgeworCWlmIChpY3IgJiBFMTAwMF9JQ1JfTFNDKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKIAkJLyoKIAkJICogSUNIOCB3b3JrYXJvdW5kLS0gQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIGNhYmxlCkBAIC0xMjQ2LDEyICsxMjQyLDEyIEBACiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI2NSw3ICsxMjYxLDggQEAKIAl1MzIgaWNyID0gZXIzMihJQ1IpOwogCiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpIHsKLQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKQEAgLTEyODIsNyArMTI3OSw4IEBACiAJfQogCiBub19saW5rX2ludGVycnVwdDoKLQlldzMyKElNUywgRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19PVEhFUik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWV3MzIoSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX09USEVSKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMjAsMTAgKzEzMTgsMTAgQEAKIAkJYWRhcHRlci0+cnhfcmluZy0+c2V0X2l0ciA9IDA7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2OTgsNyArMTY5Niw2IEBACiAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwogCiAJcmV0dXJuIDA7CiBlcnI6CkBAIC0yMDA3LDMyICsyMDA0LDI1IEBACiAJICAgICEoYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCAmIGFkYXB0ZXItPnR4X3JpbmctPmltc192YWwpKQogCQlnb3RvIGNsZWFuX3J4OwogCi0JLyoKLQkgKiBlMTAwMF9jbGVhbiBpcyBjYWxsZWQgcGVyLWNwdS4gIFRoaXMgbG9jayBwcm90ZWN0cwotCSAqIHR4X3JpbmcgZnJvbSBiZWluZyBjbGVhbmVkIGJ5IG11bHRpcGxlIGNwdXMKLQkgKiBzaW11bHRhbmVvdXNseS4gIEEgZmFpbHVyZSBvYnRhaW5pbmcgdGhlIGxvY2sgbWVhbnMKLQkgKiB0eF9yaW5nIGlzIGN1cnJlbnRseSBiZWluZyBjbGVhbmVkIGFueXdheS4KLQkgKi8KLQlpZiAoc3Bpbl90cnlsb2NrKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKSkgewotCQl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0JfQorCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlcik7CiAKIGNsZWFuX3J4OgogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKIAkJCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQotCQkJZXczMihJTVMsIGFkYXB0ZXItPnJ4X3JpbmctPmltc192YWwpOwotCQllbHNlCi0JCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKKwkJCQlldzMyKElNUywgYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCk7CisJCQllbHNlCisJCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJfQogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0yOTIyLDggKzI5MTIsNiBAQAogCWlmIChlMTAwMF9hbGxvY19xdWV1ZXMoYWRhcHRlcikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCiAJLyogRXhwbGljaXRseSBkaXNhYmxlIElSUSBzaW5jZSB0aGUgTklDIGNhbiBiZSBpbiBhbnkgc3RhdGUuICovCiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKQEAgLTMzMjAsNyArMzMwOCw3IEBACiAKIAlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSBlcjMyKEFMR05FUlJDKTsKIAlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gZXIzMihSWEVSUkMpOwotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpCisJaWYgKChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpICYmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQogCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBlcjMyKFROQ1JTKTsKIAlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyICs9IGVyMzIoQ0VYVEVSUik7CiAJYWRhcHRlci0+c3RhdHMudHNjdGMgKz0gZXIzMihUU0NUQyk7CkBAIC0zNzc3LDIzICszNzY1LDMwIEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTggY3NzOwogCXUzMiBjbWRfbGVuID0gRTEwMDBfVFhEX0NNRF9ERVhUOworCV9fYmUxNiBwcm90b2NvbDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKQorCQlwcm90b2NvbCA9IHZsYW5fZXRoX2hkcihza2IpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCWVsc2UKKwkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCS8qIFhYWCBub3QgaGFuZGxpbmcgYWxsIElQVjYgaGVhZGVycyAqLwogCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCWNtZF9sZW4gfD0gRTEwMDBfVFhEX0NNRF9UQ1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKQotCQkJZV93YXJuKCJjaGVja3N1bV9wYXJ0aWFsIHByb3RvPSV4IVxuIiwgc2tiLT5wcm90b2NvbCk7CisJCQllX3dhcm4oImNoZWNrc3VtX3BhcnRpYWwgcHJvdG89JXghXG4iLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KHByb3RvY29sKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzgzMiw0MiArMzgyNyw0MCBAQAogewogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCW9mZnNldCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCi0JCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCi0JCWlmIChtc3MgJiYgIW5yX2ZyYWdzICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KQotCQkJc2l6ZSAtPSA0OwotCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkvKiBzZXQgdGltZV9zdGFtcCAqYmVmb3JlKiBkbWEgdG8gaGVscCBhdm9pZCBhIHBvc3NpYmxlIHJhY2UgKi8KIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCXNpemUsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKLQkJCWFkYXB0ZXItPnR4X2RtYV9mYWlsZWQrKzsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CisJCWNvdW50Kys7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwotCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CisKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMzg3NSw0OSArMzg2OCwyNyBAQAogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKLQkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCQkgKiBpbiBUU08gbW9kZS4gIEFwcGVuZCA0LWJ5dGUgc2VudGluZWwgZGVzYyAqLwotCQkJaWYgKG1zcyAmJiBmID09IChucl9mcmFncy0xKSAmJiBzaXplID09IGxlbiAmJiBzaXplID4gOCkKLQkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQkgIGJ1ZmZlcl9pbmZvLT5kbWEpKSB7Ci0JCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkiVFggRE1BIHBhZ2UgbWFwIGZhaWxlZFxuIik7Ci0JCQkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCi0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KIAotCWlmIChpID09IDApCi0JCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7Ci0JZWxzZQotCQlpLS07Ci0KIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC00MDY5LDcgKzQwNDAsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IG1zczsKIAlpbnQgY291bnQgPSAwOwpAQCAtNDEzOCwxOCArNDEwOCwxMiBAQAogCWlmIChhZGFwdGVyLT5ody5tYWMudHhfcGt0X2ZpbHRlcmluZykKIAkJZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKGFkYXB0ZXIsIHNrYik7CiAKLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAkvKgogCSAqIG5lZWQ6IGNvdW50ICsgMiBkZXNjIGdhcCB0byBrZWVwIHRhaWwgZnJvbSB0b3VjaGluZwogCSAqIGhlYWQsIG90aGVyd2lzZSB0cnkgbmV4dCB0aW1lCiAJICovCi0JaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19WTEFOOwpAQCAtNDE2MSw3ICs0MTI1LDYgQEAKIAl0c28gPSBlMTAwMF90c28oYWRhcHRlciwgc2tiKTsKIAlpZiAodHNvIDwgMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApAQCAtNDE3OCwyMiArNDE0MSwyMCBAQAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAorCS8qIGlmIGNvdW50IGlzIDAgdGhlbiBtYXBwaW5nIGVycm9yIGhhcyBvY2N1cmVkICovCiAJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsIG5yX2ZyYWdzLCBtc3MpOwotCWlmIChjb3VudCA8IDApIHsKLQkJLyogaGFuZGxlIHBjaV9tYXBfc2luZ2xlKCkgZXJyb3IgaW4gZTEwMDBfdHhfbWFwICovCisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7CisKKwl9IGVsc2UgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CiAJfQogCi0JZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfZmxhZ3MsIGNvdW50KTsKLQotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwotCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ1NDMsNiArNDUwNCwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLworCWVyciA9IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGZhaWxlZCAiCisJCSAgICAgICAgICAgICAgICAgICAgIjB4JXhcbiIsIGVycik7CisJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KKwl9CisKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwpAQCAtNDYzNywyNCArNDYwNiwyOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBlcnI7CisJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAKIAllMTAwMGVfZGlzYWJsZV9sMWFzcG0ocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9IGVsc2UgeworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7CisJCWV3MzIoV1VTLCB+MCk7CisJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CiAKLQllMTAwMGVfcmVzZXQoYWRhcHRlcik7Ci0JZXczMihXVVMsIH4wKTsKLQotCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqCkBAIC00OTIyLDEyICs0ODk2LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQkvKgotCSAqIFdlIHNob3VsZCBub3QgYmUgdXNpbmcgTExUWCBhbnltb3JlLCBidXQgd2UgYXJlIHN0aWxsIFR4IGZhc3RlciB3aXRoCi0JICogaXQuCi0JICovCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0KIAlpZiAoZTEwMDBlX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odykpCiAJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfTU5HX1BUX0VOQUJMRUQ7CiAKQEAgLTUwOTEsNiArNTA1OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVycjsKIAogCS8qCiAJICogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC01MTI1LDYgKzUwOTQsMTIgQEAKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKKwkvKiBBRVIgZGlzYWJsZSAqLworCWVyciA9IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJICAgICAgICAicGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZmFpbGVkIDB4JXhcbiIsIGVycik7CisKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKQEAgLTUxNTYsNiArNTEzMSw4IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTczTCksIGJvYXJkXzgyNTczIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMKSwgYm9hcmRfODI1NzQgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMQSksIGJvYXJkXzgyNTc0IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgzViksIGJvYXJkXzgyNTgzIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCksCiAJICBib2FyZF84MDAwM2VzMmxhbiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTIxMDAuYyBiL2RyaXZlcnMvbmV0L2UyMTAwLmMKaW5kZXggYjA3YmExOS4uZDJmNmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTIxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMjEwMC5jCkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogCQlwcmludGsoIiAlMDJYIiwgc3RhdGlvbl9hZGRyW2ldKTsKIAogCWlmIChkZXYtPmlycSA8IDIpIHsKLQkJaW50IGlycWxpc3RbXSA9IHsxNSwxMSwxMCwxMiw1LDksMyw0fSwgaTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW50IGlycWxpc3RbXSA9IHsxNSwgMTEsIDEwLCAxMiwgNSwgOSwgMywgNH07CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycWxpc3QpOyBpKyspCiAJCQlpZiAocmVxdWVzdF9pcnEgKGlycWxpc3RbaV0sIE5VTEwsIDAsICJib2d1cyIsIE5VTEwpICE9IC1FQlVTWSkgewogCQkJCWRldi0+aXJxID0gaXJxbGlzdFtpXTsKIAkJCQlicmVhazsKIAkJCX0KLQkJaWYgKGkgPj0gOCkgeworCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGlycWxpc3QpKSB7CiAJCQlwcmludGsoIiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+aXJxKTsKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvLmMgYi9kcml2ZXJzL25ldC9lZXByby5jCmluZGV4IGUxODdjODguLmNjMmFiNjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXByby5jCisrKyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKQEAgLTczOSw2ICs3MzksMTcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZXByb19ldGh0b29sX29wczsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlZXByb19uZXRkZXZfb3BzID0geworIAkubmRvX29wZW4gICAgICAgICAgICAgICA9IGVlcHJvX29wZW4sCisgCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gZWVwcm9fY2xvc2UsCisgCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBlZXByb19zZW5kX3BhY2tldCwKKyAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisgCS5uZG9fdHhfdGltZW91dAkJPSBlZXByb190eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGlzIGlzIHRoZSByZWFsIHByb2JlIHJvdXRpbmUuICBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICAgcHJvYmVzIG9uIHRoZSBJU0EgYnVzLiAgQSBnb29kIGRldmljZSBwcm9iZSBhdm9pZHMgZG9pbmcgd3JpdGVzLCBhbmQKICAgIHZlcmlmaWVzIHRoYXQgdGhlIGNvcnJlY3QgZGV2aWNlIGV4aXN0cyBhbmQgZnVuY3Rpb25zLiAgKi8KQEAgLTg1MSwxMSArODYyLDcgQEAKICAJCX0KICAJfQogCi0gCWRldi0+b3BlbiAgICAgICAgICAgICAgID0gZWVwcm9fb3BlbjsKLSAJZGV2LT5zdG9wICAgICAgICAgICAgICAgPSBlZXByb19jbG9zZTsKLSAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgPSBlZXByb19zZW5kX3BhY2tldDsKLSAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotIAlkZXYtPnR4X3RpbWVvdXQJCT0gZWVwcm9fdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmVlcHJvX25ldGRldl9vcHM7CiAgCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwogCWRldi0+ZXRodG9vbF9vcHMJPSAmZWVwcm9fZXRodG9vbF9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCmluZGV4IDlmZjNmMmYuLjE2ODZkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwpAQCAtMTA0Myw2ICsxMDQzLDE3IEBACiAJbHAtPmxhc3RfdHggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVleHBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVleHBfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGVleHBfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGVleHBfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVleHBfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZWV4cF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKgogICogU2FuaXR5IGNoZWNrIHRoZSBzdXNwZWN0ZWQgRXRoZXJFeHByZXNzIGNhcmQKICAqIFJlYWQgaGFyZHdhcmUgYWRkcmVzcywgcmVzZXQgY2FyZCwgc2l6ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgYnVmZmVyCkBAIC0xMTYzLDExICsxMTc0LDcgQEAKIAlscC0+cnhfYnVmX3N0YXJ0ID0gVFhfQlVGX1NUQVJUICsgKGxwLT5udW1fdHhfYnVmcypUWF9CVUZfU0laRSk7CiAJbHAtPndpZHRoID0gYnVzd2lkdGg7CiAKLQlkZXYtPm9wZW4gPSBlZXhwX29wZW47Ci0JZGV2LT5zdG9wID0gZWV4cF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGVleHBfeG1pdDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZlZXhwX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gZWV4cF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZlZXhwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDIqSFo7CiAKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCmluZGV4IDYyNzFiOTQuLjZlMzE3Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJImVoZWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwOTYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAxMDAiCiAKIC8qIGVIRUEgY2FwYWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBETFBBUl9QT1JUX0FERF9SRU0gMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKaW5kZXggZGZlOTIyNi4uYWMwYzViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCkBAIC0xNTUsNiArMTU1LDggQEAKIAlpbnQgbnVtX2Z3X2hhbmRsZXMsIGssIGw7CiAKIAkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhhbmRsZXMgKi8KKwltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpIHsKIAkJbnVtX2FkYXB0ZXJzKys7CiAKQEAgLTE3NiwxNSArMTc4LDE5IEBACiAJaWYgKG51bV9md19oYW5kbGVzKSB7CiAJCWFyciA9IGt6YWxsb2MobnVtX2Z3X2hhbmRsZXMgKiBzaXplb2YoKmFyciksIEdGUF9LRVJORUwpOwogCQlpZiAoIWFycikKLQkJCXJldHVybjsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCisJCQlnb3RvIG91dDsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCiAJfSBlbHNlCiAJCWdvdG8gb3V0X3VwZGF0ZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkgeworCQlpZiAobnVtX2FkYXB0ZXJzID09IDApCisJCQlicmVhazsKKwogCQlmb3IgKGsgPSAwOyBrIDwgRUhFQV9NQVhfUE9SVFM7IGsrKykgewogCQkJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IGFkYXB0ZXItPnBvcnRba107CiAKLQkJCWlmICghcG9ydCB8fCAocG9ydC0+c3RhdGUgIT0gRUhFQV9QT1JUX1VQKSkKKwkJCWlmICghcG9ydCB8fCAocG9ydC0+c3RhdGUgIT0gRUhFQV9QT1JUX1VQKQorCQkJCXx8IChudW1fcG9ydHMgPT0gMCkpCiAJCQkJY29udGludWU7CiAKIAkJCWZvciAobCA9IDA7CkBAIC0yMDcsNiArMjEzLDcgQEAKIAkJCX0KIAkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CiAJCQlhcnJbaSsrXS5md2ggPSBwb3J0LT5xcF9lcS0+ZndfaGFuZGxlOworCQkJbnVtX3BvcnRzLS07CiAJCX0KIAogCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwpAQCAtMjE2LDE2ICsyMjMsMjAgQEAKIAkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CiAJCQlhcnJbaSsrXS5md2ggPSBhZGFwdGVyLT5tci5oYW5kbGU7CiAJCX0KKwkJbnVtX2FkYXB0ZXJzLS07CiAJfQogCiBvdXRfdXBkYXRlOgogCWtmcmVlKGVoZWFfZndfaGFuZGxlcy5hcnIpOwogCWVoZWFfZndfaGFuZGxlcy5hcnIgPSBhcnI7CiAJZWhlYV9md19oYW5kbGVzLm51bV9lbnRyaWVzID0gaTsKK291dDoKKwltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWhlYV9iY21jX3JlZ19lbnRyeSAqYXJyID0gTlVMTDsKIAlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCBlaGVhX21jX2xpc3QgKm1jX2VudHJ5OwpAQCAtMjMzLDYgKzI0NCw4IEBACiAJaW50IGkgPSAwOwogCWludCBrOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVoZWFfYmNtY19yZWdzLmxvY2ssIGZsYWdzKTsKKwogCS8qIERldGVybWluZSBudW1iZXIgb2YgcmVnaXN0cmF0aW9ucyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkKIAkJZm9yIChrID0gMDsgayA8IEVIRUFfTUFYX1BPUlRTOyBrKyspIHsKQEAgLTI1MCw3ICsyNjMsNyBAQAogCWlmIChudW1fcmVnaXN0cmF0aW9ucykgewogCQlhcnIgPSBremFsbG9jKG51bV9yZWdpc3RyYXRpb25zICogc2l6ZW9mKCphcnIpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFhcnIpCi0JCQlyZXR1cm47ICAvKiBLZWVwIHRoZSBleGlzdGluZyBhcnJheSAqLworCQkJZ290byBvdXQ7ICAvKiBLZWVwIHRoZSBleGlzdGluZyBhcnJheSAqLwogCX0gZWxzZQogCQlnb3RvIG91dF91cGRhdGU7CiAKQEAgLTI2MSw2ICsyNzQsOSBAQAogCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApKQogCQkJCWNvbnRpbnVlOwogCisJCQlpZiAobnVtX3JlZ2lzdHJhdGlvbnMgPT0gMCkKKwkJCQlnb3RvIG91dF91cGRhdGU7CisKIAkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CiAJCQlhcnJbaV0ucG9ydF9pZCA9IHBvcnQtPmxvZ2ljYWxfcG9ydF9pZDsKIAkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19CUk9BRENBU1QgfApAQCAtMjcyLDkgKzI4OCwxMyBAQAogCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX0JST0FEQ0FTVCB8CiAJCQkJCSAgRUhFQV9CQ01DX1ZMQU5JRF9BTEw7CiAJCQlhcnJbaSsrXS5tYWNhZGRyID0gcG9ydC0+bWFjX2FkZHI7CisJCQludW1fcmVnaXN0cmF0aW9ucyAtPSAyOwogCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jX2VudHJ5LAogCQkJCQkgICAgJnBvcnQtPm1jX2xpc3QtPmxpc3QsIGxpc3QpIHsKKwkJCQlpZiAobnVtX3JlZ2lzdHJhdGlvbnMgPT0gMCkKKwkJCQkJZ290byBvdXRfdXBkYXRlOworCiAJCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCQlhcnJbaV0ucG9ydF9pZCA9IHBvcnQtPmxvZ2ljYWxfcG9ydF9pZDsKIAkJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfU0NPUEVfQUxMIHwKQEAgLTI4OCw2ICszMDgsNyBAQAogCQkJCQkJICBFSEVBX0JDTUNfTVVMVElDQVNUIHwKIAkJCQkJCSAgRUhFQV9CQ01DX1ZMQU5JRF9BTEw7CiAJCQkJYXJyW2krK10ubWFjYWRkciA9IG1jX2VudHJ5LT5tYWNhZGRyOworCQkJCW51bV9yZWdpc3RyYXRpb25zIC09IDI7CiAJCQl9CiAJCX0KIAl9CkBAIC0yOTYsNiArMzE3LDggQEAKIAlrZnJlZShlaGVhX2JjbWNfcmVncy5hcnIpOwogCWVoZWFfYmNtY19yZWdzLmFyciA9IGFycjsKIAllaGVhX2JjbWNfcmVncy5udW1fZW50cmllcyA9IGk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhlYV9iY21jX3JlZ3MubG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVoZWFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMDgsNyArMzMxLDcgQEAKIAogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOwogCi0JY2IyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9BVE9NSUMpOworCWNiMiA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmICghY2IyKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IyIik7CiAJCWdvdG8gb3V0OwpAQCAtMzQxLDcgKzM2NCw3IEBACiAJc3RhdHMtPnJ4X3BhY2tldHMgPSByeF9wYWNrZXRzOwogCiBvdXRfaGVycjoKLQlrZnJlZShjYjIpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjIpOwogb3V0OgogCXJldHVybiBzdGF0czsKIH0KQEAgLTM3MCw4ICszOTMsNiBAQAogCQkJCQkJCSAgICAgIEVIRUFfTF9QS1RfU0laRSk7CiAJCQlpZiAoIXNrYl9hcnJfcnExW2luZGV4XSkgewogCQkJCXByLT5ycTFfc2tiYS5vc19za2JzID0gZmlsbF93cWVzIC0gaTsKLQkJCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCQkgICBkZXYtPm5hbWUsIGkpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zODcsMjYgKzQwOCwxOSBAQAogCWVoZWFfdXBkYXRlX3JxMWEocHItPnFwLCBhZGRlcik7CiB9CiAKLXN0YXRpYyBpbnQgZWhlYV9pbml0X2ZpbGxfcnExKHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciwgaW50IG5yX3JxMWEpCitzdGF0aWMgdm9pZCBlaGVhX2luaXRfZmlsbF9ycTEoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgbnJfcnExYSkKIHsKLQlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYl9hcnJfcnExID0gcHItPnJxMV9za2JhLmFycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHItPnBvcnQtPm5ldGRldjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBwci0+cnExX3NrYmEubGVuOyBpKyspIHsKIAkJc2tiX2Fycl9ycTFbaV0gPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgRUhFQV9MX1BLVF9TSVpFKTsKLQkJaWYgKCFza2JfYXJyX3JxMVtpXSkgewotCQkJZWhlYV9lcnJvcigiJXM6IG5vIG1lbSBmb3Igc2tiLyVkIHdxZXMgZmlsbGVkIiwKLQkJCQkgICBkZXYtPm5hbWUsIGkpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCWlmICghc2tiX2Fycl9ycTFbaV0pCisJCQlicmVhazsKIAl9CiAJLyogUmluZyBkb29yYmVsbCAqLwogCWVoZWFfdXBkYXRlX3JxMWEocHItPnFwLCBucl9ycTFhKTsKLW91dDoKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGVoZWFfcmVmaWxsX3JxX2RlZihzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsCkBAIC00MzUsMTAgKzQ0OSwxMiBAQAogCQl1NjQgdG1wX2FkZHI7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcGFja2V0X3NpemUpOwogCQlpZiAoIXNrYikgewotCQkJZWhlYV9lcnJvcigiJXM6IG5vIG1lbSBmb3Igc2tiLyVkIHdxZXMgZmlsbGVkIiwKLQkJCQkgICBwci0+cG9ydC0+bmV0ZGV2LT5uYW1lLCBpKTsKIAkJCXFfc2tiYS0+b3Nfc2ticyA9IGZpbGxfd3FlcyAtIGk7Ci0JCQlyZXQgPSAtRU5PTUVNOworCQkJaWYgKHFfc2tiYS0+b3Nfc2ticyA9PSBxX3NrYmEtPmxlbiAtIDIpIHsKKwkJCQllaGVhX2luZm8oIiVzOiBycSVpIHJhbiBkcnkgLSBubyBtZW0gZm9yIHNrYiIsCisJCQkJCSAgcHItPnBvcnQtPm5ldGRldi0+bmFtZSwgcnFfbnIpOworCQkJCXJldCA9IC1FTk9NRU07CisJCQl9CiAJCQlicmVhazsKIAkJfQogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CkBAIC04MzAsNyArODQ2LDcgQEAKIAl3aGlsZSAoKHJ4ICE9IGJ1ZGdldCkgfHwgZm9yY2VfaXJxKSB7CiAJCXByLT5wb2xsX2NvdW50ZXIgPSAwOwogCQlmb3JjZV9pcnEgPSAwOwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJZWhlYV9yZXNldF9jcV9lcChwci0+cmVjdl9jcSk7CiAJCWVoZWFfcmVzZXRfY3FfZXAocHItPnNlbmRfY3EpOwogCQllaGVhX3Jlc2V0X2NxX24xKHByLT5yZWN2X2NxKTsKQEAgLTg0MSw3ICs4NTcsNyBAQAogCQlpZiAoIWNxZSAmJiAhY3FlX3NrYikKIAkJCXJldHVybiByeDsKIAotCQlpZiAoIW5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpCisJCWlmICghbmFwaV9yZXNjaGVkdWxlKG5hcGkpKQogCQkJcmV0dXJuIHJ4OwogCiAJCWNxZV9za2IgPSBlaGVhX3Byb2NfY3FlcyhwciwgRUhFQV9QT0xMX01BWF9DUUVTKTsKQEAgLTg1OSw3ICs4NzUsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzOyBpKyspCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5wb3J0X3Jlc1tpXS5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmcG9ydC0+cG9ydF9yZXNbaV0ubmFwaSk7CiB9CiAjZW5kaWYKIApAQCAtODY3LDcgKzg4Myw3IEBACiB7CiAJc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByID0gcGFyYW07CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmcHItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnByLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTkxNSw3ICs5MzEsNyBAQAogCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiMCAqY2IwOwogCiAJLyogbWF5IGJlIGNhbGxlZCB2aWEgZWhlYV9uZXFfdGFza2xldCgpICovCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9BVE9NSUMpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmICghY2IwKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IwIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC05OTYsNyArMTAxMiw3IEBACiBvdXRfZnJlZToKIAlpZiAocmV0IHx8IG5ldGlmX21zZ19wcm9iZShwb3J0KSkKIAkJZWhlYV9kdW1wKGNiMCwgc2l6ZW9mKCpjYjApLCAiZWhlYV9zZW5zZV9wb3J0X2F0dHIiKTsKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMDA3LDcgKzEwMjMsNyBAQAogCXU2NCBocmV0OwogCWludCByZXQgPSAwOwogCi0JY2I0ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiNCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2I0KSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I0Iik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMDc1LDcgKzEwOTEsNyBAQAogCWlmICghcHJvcF9jYXJyaWVyX3N0YXRlIHx8IChwb3J0LT5waHlfbGluayA9PSBFSEVBX1BIWV9MSU5LX1VQKSkKIAkJbmV0aWZfY2Fycmllcl9vbihwb3J0LT5uZXRkZXYpOwogCi0Ja2ZyZWUoY2I0KTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2I0KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIwMSwxMSArMTIxNywxMSBAQAogCWludCByZXQ7CiAJc3RydWN0IGVoZWFfcXBfaW5pdF9hdHRyICppbml0X2F0dHIgPSAmcHItPnFwLT5pbml0X2F0dHI7CiAKLQlyZXQgPSBlaGVhX2luaXRfZmlsbF9ycTEocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMQotCQkJCSAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIKLQkJCQkgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzIC0gMSk7CisJZWhlYV9pbml0X2ZpbGxfcnExKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTEKKwkJCSAgICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMgorCQkJICAgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzIC0gMSk7CiAKLQlyZXQgfD0gZWhlYV9yZWZpbGxfcnEyKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIgLSAxKTsKKwlyZXQgPSBlaGVhX3JlZmlsbF9ycTIocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiAtIDEpOwogCiAJcmV0IHw9IGVoZWFfcmVmaWxsX3JxMyhwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzIC0gMSk7CiAKQEAgLTEzMDIsNyArMTMxOCw3IEBACiAJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwICpjYjA7CiAKIAlyZXQgPSAtRU5PTUVNOwotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkKIAkJZ290byBvdXQ7CiAKQEAgLTEzMzgsNyArMTM1NCw3IEBACiAJcmV0ID0gMDsKIAogb3V0X2ZyZWU6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc0OCw3ICsxNzY0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IwIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xNzY5LDggKzE3ODUsNiBAQAogCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG1hY19hZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAotCXNwaW5fbG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7Ci0KIAkvKiBEZXJlZ2lzdGVyIG9sZCBNQUMgaW4gcEhZUCAqLwogCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfVVApIHsKIAkJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX0RFUkVHX0JDTUMpOwpAQCAtMTc5MSw5ICsxODA1LDggQEAKIAogb3V0X3VwcmVnczoKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKLQlzcGluX3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiBvdXRfZnJlZToKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xODE3LDcgKzE4MzAsNyBAQAogCWlmICgoZW5hYmxlICYmIHBvcnQtPnByb21pc2MpIHx8ICghZW5hYmxlICYmICFwb3J0LT5wcm9taXNjKSkKIAkJcmV0dXJuOwogCi0JY2I3ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9BVE9NSUMpOworCWNiNyA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmICghY2I3KSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I3Iik7CiAJCWdvdG8gb3V0OwpAQCAtMTgzNiw3ICsxODQ5LDcgQEAKIAogCXBvcnQtPnByb21pc2MgPSBlbmFibGU7CiBvdXQ6Ci0Ja2ZyZWUoY2I3KTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2I3KTsKIAlyZXR1cm47CiB9CiAKQEAgLTE5NTMsOCArMTk2Niw2IEBACiAJfQogCWVoZWFfcHJvbWlzY3VvdXMoZGV2LCAwKTsKIAotCXNwaW5fbG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7Ci0KIAlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQllaGVhX2FsbG11bHRpKGRldiwgMSk7CiAJCWdvdG8gb3V0OwpAQCAtMTk4NCw3ICsxOTk1LDYgQEAKIAl9CiBvdXQ6CiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCXJldHVybjsKIH0KIApAQCAtMjIxNyw3ICsyMjI3LDcgQEAKIAogCXBvcnQtPnZncnAgPSBncnA7CiAKLQljYjEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IxID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjEpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKIAkJZ290byBvdXQ7CkBAIC0yMjI4LDcgKzIyMzgsNyBAQAogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKIAkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKIAotCWtmcmVlKGNiMSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMSk7CiBvdXQ6CiAJcmV0dXJuOwogfQpAQCAtMjI0MSw3ICsyMjUxLDcgQEAKIAlpbnQgaW5kZXg7CiAJdTY0IGhyZXQ7CiAKLQljYjEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IxID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjEpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKIAkJZ290byBvdXQ7CkBAIC0yMjYyLDcgKzIyNzIsNyBAQAogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKIAkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKIG91dDoKLQlrZnJlZShjYjEpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogCXJldHVybjsKIH0KIApAQCAtMjI3Niw3ICsyMjg2LDcgQEAKIAogCXZsYW5fZ3JvdXBfc2V0X2RldmljZShwb3J0LT52Z3JwLCB2aWQsIE5VTEwpOwogCi0JY2IxID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IxKSB7CiAJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IxIik7CiAJCWdvdG8gb3V0OwpAQCAtMjI5Nyw3ICsyMzA3LDcgQEAKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpCiAJCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3BvcnQgZmFpbGVkIik7CiBvdXQ6Ci0Ja2ZyZWUoY2IxKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IxKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIzMDksNyArMjMxOSw3IEBACiAJdTY0IGR1bW15NjQgPSAwOwogCXN0cnVjdCBoY3BfbW9kaWZ5X3FwX2NiMCAqY2IwOwogCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjM3Miw3ICsyMzgyLDcgQEAKIAogCXJldCA9IDA7CiBvdXQ6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDY1LDggKzI0NzUsNiBAQAogCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfVVApCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwotCiAJcmV0ID0gZWhlYV9wb3J0X3Jlc19zZXR1cChwb3J0LCBwb3J0LT5udW1fZGVmX3FwcywKIAkJCQkgIHBvcnQtPm51bV9hZGRfdHhfcXBzKTsKIAlpZiAocmV0KSB7CkBAIC0yNTAzLDggKzI1MTEsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCXJldCA9IGVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9SRUdfQkNNQyk7CiAJaWYgKHJldCkgewogCQlyZXQgPSAtRUlPOwpAQCAtMjUyNiwxMCArMjUzMiw3IEBACiAJCWVoZWFfaW5mbygiRmFpbGVkIHN0YXJ0aW5nICVzLiByZXQ9JWkiLCBkZXYtPm5hbWUsIHJldCk7CiAKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKLQlzcGluX3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7Ci0KIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjU3OSw5ICsyNTgyLDYgQEAKIAlpZiAocG9ydC0+c3RhdGUgPT0gRUhFQV9QT1JUX0RPV04pCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwotCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIAllaGVhX2Ryb3BfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAllaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHBvcnQsIEhfREVSRUdfQkNNQyk7CiAKQEAgLTI1OTAsNyArMjU5MCw2IEBACiAJcG9ydC0+c3RhdGUgPSBFSEVBX1BPUlRfRE9XTjsKIAogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIAogCXJldCA9IGVoZWFfY2xlYW5fYWxsX3BvcnRyZXMocG9ydCk7CiAJaWYgKHJldCkKQEAgLTI1OTgsNyArMjU5Nyw2IEBACiAJCQkgIGRldi0+bmFtZSwgcmV0KTsKIAogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNjY0LDcgKzI2NjIsNyBAQAogCXU2NCBkdW1teTY0ID0gMDsKIAl1MTYgZHVtbXkxNiA9IDA7CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yNzE2LDcgKzI3MTQsNyBAQAogCiAJcmV0ID0gMDsKIG91dDoKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3NjYsNyArMjc2NCw3IEBACiAJdTY0IGR1bW15NjQgPSAwOwogCXUxNiBkdW1teTE2ID0gMDsKIAotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTI4MTksNyArMjgxNyw3IEBACiAJCWVoZWFfcmVmaWxsX3JxMyhwciwgMCk7CiAJfQogb3V0OgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjk1MCw3ICsyOTQ4LDcgQEAKIAl1NjQgaHJldDsKIAlpbnQgcmV0OwogCi0JY2IgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjk2Nyw3ICsyOTY1LDcgQEAKIAlyZXQgPSAwOwogCiBvdXRfaGVycjoKLQlrZnJlZShjYik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjk4MSw3ICsyOTc5LDcgQEAKIAkqanVtYm8gPSAwOwogCiAJLyogKFRyeSB0bykgZW5hYmxlICpqdW1ibyBmcmFtZXMgKi8KLQljYjQgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2I0ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjQpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjQiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTMwMDksNyArMzAwNyw3IEBACiAJCX0gZWxzZQogCQkJcmV0ID0gLUVJTlZBTDsKIAotCQlrZnJlZShjYjQpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2I0KTsKIAl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTMwNDAsNyArMzAzOCw3IEBACiAJcG9ydC0+b2ZkZXYuZGV2LnBhcmVudCA9ICZwb3J0LT5hZGFwdGVyLT5vZmRldi0+ZGV2OwogCXBvcnQtPm9mZGV2LmRldi5idXMgPSAmaWJtZWJ1c19idXNfdHlwZTsKIAotCXNwcmludGYocG9ydC0+b2ZkZXYuZGV2LmJ1c19pZCwgInBvcnQlZCIsIHBvcnRfbmFtZV9jbnQrKyk7CisJZGV2X3NldF9uYW1lKCZwb3J0LT5vZmRldi5kZXYsICJwb3J0JWQiLCBwb3J0X25hbWVfY250KyspOwogCXBvcnQtPm9mZGV2LmRldi5yZWxlYXNlID0gbG9naWNhbF9wb3J0X3JlbGVhc2U7CiAKIAlyZXQgPSBvZl9kZXZpY2VfcmVnaXN0ZXIoJnBvcnQtPm9mZGV2KTsKQEAgLTMwNjksNiArMzA2NywyMiBAQAogCW9mX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5vZmRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWhlYV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlaGVhX29wZW4sCisJLm5kb19zdG9wCQk9IGVoZWFfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWhlYV9zdGFydF94bWl0LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlaGVhX25ldHBvbGwsCisjZW5kaWYKKwkubmRvX2dldF9zdGF0cwkJPSBlaGVhX2dldF9zdGF0cywKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGVoZWFfc2V0X21hY19hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gZWhlYV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGVoZWFfY2hhbmdlX210dSwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBlaGVhX3ZsYW5fcnhfcmVnaXN0ZXIsCisJLm5kb192bGFuX3J4X2FkZF92aWQJPSBlaGVhX3ZsYW5fcnhfYWRkX3ZpZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBlaGVhX3ZsYW5fcnhfa2lsbF92aWQKK307CisKIHN0cnVjdCBlaGVhX3BvcnQgKmVoZWFfc2V0dXBfc2luZ2xlX3BvcnQoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJIHUzMiBsb2dpY2FsX3BvcnRfaWQsCiAJCQkJCSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQpAQCAtMzEyMSwxOSArMzEzNSw5IEBACiAJLyogaW5pdGlhbGl6ZSBuZXRfZGV2aWNlIHN0cnVjdHVyZSAqLwogCW1lbWNweShkZXYtPmRldl9hZGRyLCAmcG9ydC0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAotCWRldi0+b3BlbiA9IGVoZWFfb3BlbjsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWhlYV9uZXRwb2xsOwotI2VuZGlmCi0JZGV2LT5zdG9wID0gZWhlYV9zdG9wOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZWhlYV9zdGFydF94bWl0OwotCWRldi0+Z2V0X3N0YXRzID0gZWhlYV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBlaGVhX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGVoZWFfc2V0X21hY19hZGRyOwotCWRldi0+Y2hhbmdlX210dSA9IGVoZWFfY2hhbmdlX210dTsKLQlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBlaGVhX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JZGV2LT52bGFuX3J4X2FkZF92aWQgPSBlaGVhX3ZsYW5fcnhfYWRkX3ZpZDsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBlaGVhX3ZsYW5fcnhfa2lsbF92aWQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmVoZWFfbmV0ZGV2X29wczsKKwllaGVhX3NldF9ldGh0b29sX29wcyhkZXYpOworCiAJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9UU08KIAkJICAgICAgfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFgKIAkJICAgICAgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSCkBAIC0zMTQyLDcgKzMxNDYsNiBAQAogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFSEVBX1dBVENIX0RPR19USU1FT1VUOwogCiAJSU5JVF9XT1JLKCZwb3J0LT5yZXNldF90YXNrLCBlaGVhX3Jlc2V0X3BvcnQpOwotCWVoZWFfc2V0X2V0aHRvb2xfb3BzKGRldik7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmV0KSB7CkBAIC0zMzcwLDcgKzMzNzMsNiBAQAogCQllaGVhX2Vycm9yKCJJbnZhbGlkIGlibWVidXMgZGV2aWNlIHByb2JlZCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKCphZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhZGFwdGVyKSB7CkBAIC0zNDUwLDExICszNDUyLDEyIEBACiAJZWhlYV9kZXN0cm95X2VxKGFkYXB0ZXItPm5lcSk7CiAKIG91dF9mcmVlX2FkOgorCWxpc3RfZGVsKCZhZGFwdGVyLT5saXN0KTsKIAlrZnJlZShhZGFwdGVyKTsKIAogb3V0OgogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0NzMsOCArMzQ3Niw2IEBACiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwotCiAJaWJtZWJ1c19mcmVlX2lycShhZGFwdGVyLT5uZXEtPmF0dHIuaXN0MSwgYWRhcHRlcik7CiAJdGFza2xldF9raWxsKCZhZGFwdGVyLT5uZXFfdGFza2xldCk7CiAKQEAgLTM0ODQsNyArMzQ4NSw2IEBACiAJa2ZyZWUoYWRhcHRlcik7CiAKIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MTgsMTIgKzM1MTgsMTQgQEAKIAkJLyogUmVhZGQgY2FuY2VsZWQgbWVtb3J5IGJsb2NrICovCiAJY2FzZSBNRU1fT05MSU5FOgogCQllaGVhX2luZm8oIm1lbW9yeSBpcyBnb2luZyBvbmxpbmUiKTsKKwkJc2V0X2JpdChfX0VIRUFfU1RPUF9YRkVSLCAmZWhlYV9kcml2ZXJfZmxhZ3MpOwogCQlpZiAoZWhlYV9hZGRfc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKIAkJCXJldHVybiBOT1RJRllfQkFEOwogCQllaGVhX3JlcmVnX21ycyhOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKIAkJZWhlYV9pbmZvKCJtZW1vcnkgaXMgZ29pbmcgb2ZmbGluZSIpOworCQlzZXRfYml0KF9fRUhFQV9TVE9QX1hGRVIsICZlaGVhX2RyaXZlcl9mbGFncyk7CiAJCWlmIChlaGVhX3JlbV9zZWN0X2JtYXAoYXJnLT5zdGFydF9wZm4sIGFyZy0+bnJfcGFnZXMpKQogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCWVoZWFfcmVyZWdfbXJzKE5VTEwpOwpAQCAtMzUzMSw2ICszNTMzLDkgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CisKKwllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7CisKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKaW5kZXggNDlkNzY2ZS4uMzc0NzQ1N2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmV0OwogCXU2NCAqcmJsb2NrOwogCi0JcmJsb2NrID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCXJibG9jayA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcmJsb2NrKSB7CiAJCWVoZWFfZXJyb3IoIkNhbm5vdCBhbGxvY2F0ZSByYmxvY2sgbWVtb3J5LiIpOwogCQlyZXR1cm47CkBAIC0xMDIyLDUgKzEwMjIsNSBAQAogCWVsc2UKIAkJZWhlYV9lcnJvcigiRXJyb3IgZGF0YSBjb3VsZCBub3QgYmUgZmV0Y2hlZDogJWxsWCIsIHJlc19oYW5kbGUpOwogCi0Ja2ZyZWUocmJsb2NrKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcmJsb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKaW5kZXggYTgzMmNjNS4uYzI2Y2VhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImVuaWMiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkJIkNpc2NvIDEwRyBFdGhlcm5ldCBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjAuNjQ4IgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4wLjkzMyIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYyIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgogCkBAIC05Nyw2ICs5Nyw3IEBACiAJX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX3JxIHJxWzFdOwogCXVuc2lnbmVkIGludCBycV9jb3VudDsKIAlpbnQgKCpycV9hbGxvY19idWYpKHN0cnVjdCB2bmljX3JxICpycSk7CisJdTY0IHJxX2JhZF9mY3M7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CiAJc3RydWN0IG5ldF9scm9fZGVzYyBscm9fZGVzY1tFTklDX0xST19NQVhfREVTQ107CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwppbmRleCA3ZDYwNTUxLi4wMzQwM2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKQEAgLTQwMCwxMCArNDAwLDEzIEBACiAJCXJldHVybiBJUlFfTk9ORTsJLyogbm90IG91ciBpbnRlcnJ1cHQgKi8KIAl9CiAKLQlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfTk9USUZZKSkKKwlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfTk9USUZZKSkgeworCQl2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfSU5UWF9OT1RJRlldKTsKIAkJZW5pY19ub3RpZnlfY2hlY2soZW5pYyk7CisJfQogCiAJaWYgKEVOSUNfVEVTVF9JTlRSKHBiYSwgRU5JQ19JTlRYX0VSUikpIHsKKwkJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX0lOVFhfRVJSXSk7CiAJCWVuaWNfbG9nX3FfZXJyb3IoZW5pYyk7CiAJCS8qIHNjaGVkdWxlIHJlY292ZXJ5IGZyb20gV1EvUlEgZXJyb3IgKi8KIAkJc2NoZWR1bGVfd29yaygmZW5pYy0+cmVzZXQpOwpAQCAtNDExLDggKzQxNCw4IEBACiAJfQogCiAJaWYgKEVOSUNfVEVTVF9JTlRSKHBiYSwgRU5JQ19JTlRYX1dRX1JRKSkgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZW5pYy0+bmFwaSkpCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZlbmljLT5uYXBpKTsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmZW5pYy0+bmFwaSkpCisJCQlfX25hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCX0gZWxzZSB7CiAJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19JTlRYX1dRX1JRXSk7CiAJfQpAQCAtNDQwLDcgKzQ0Myw3IEBACiAJICogd3JpdGVzKS4KIAkgKi8KIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZlbmljLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZlbmljLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTQ1MCw3ICs0NTMsNyBAQAogCXN0cnVjdCBlbmljICplbmljID0gZGF0YTsKIAogCS8qIHNjaGVkdWxlIE5BUEkgcG9sbGluZyBmb3IgUlEgY2xlYW51cCAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZlbmljLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZlbmljLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTQ3Niw2ICs0NzksOCBAQAogewogCXN0cnVjdCBlbmljICplbmljID0gZGF0YTsKIAorCXZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19NU0lYX0VSUl0pOworCiAJZW5pY19sb2dfcV9lcnJvcihlbmljKTsKIAogCS8qIHNjaGVkdWxlIHJlY292ZXJ5IGZyb20gV1EvUlEgZXJyb3IgKi8KQEAgLTQ4OCw4ICs0OTMsOCBAQAogewogCXN0cnVjdCBlbmljICplbmljID0gZGF0YTsKIAorCXZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19NU0lYX05PVElGWV0pOwogCWVuaWNfbm90aWZ5X2NoZWNrKGVuaWMpOwotCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19NU0lYX05PVElGWV0pOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNTcwLDExICs1NzUsMTEgQEAKIAkgKiB0byBlYWNoIFRDUCBzZWdtZW50IHJlc3VsdGluZyBmcm9tIHRoZSBUU08uCiAJICovCiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSkgeworCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgewogCQlpcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwogCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLT5zYWRkciwKIAkJCWlwX2hkcihza2IpLT5kYWRkciwgMCwgSVBQUk9UT19UQ1AsIDApOwotCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpKSB7CisJfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQVjYpKSB7CiAJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcHY2X2hkcihza2IpLT5zYWRkciwKIAkJCSZpcHY2X2hkcihza2IpLT5kYWRkciwgMCwgSVBQUk9UT19UQ1AsIDApOwogCX0KQEAgLTYxNiw3ICs2MjEsNyBAQAogCQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZyk7CiB9CiAKLS8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgcHJvY2VzcyBjb250ZXh0IHdpdGggQkhzIGRpc2FibGVkICovCisvKiBuZXRpZl90eF9sb2NrIGhlbGQsIHByb2Nlc3MgY29udGV4dCB3aXRoIEJIcyBkaXNhYmxlZCwgb3IgQkggKi8KIHN0YXRpYyBpbnQgZW5pY19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC02ODMsNyArNjg4LDcgQEAKIAluZXRfc3RhdHMtPnJ4X2J5dGVzID0gc3RhdHMtPnJ4LnJ4X2J5dGVzX29rOwogCW5ldF9zdGF0cy0+cnhfZXJyb3JzID0gc3RhdHMtPnJ4LnJ4X2Vycm9yczsKIAluZXRfc3RhdHMtPm11bHRpY2FzdCA9IHN0YXRzLT5yeC5yeF9tdWx0aWNhc3RfZnJhbWVzX29rOwotCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IHN0YXRzLT5yeC5yeF9jcmNfZXJyb3JzOworCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IGVuaWMtPnJxX2JhZF9mY3M7CiAJbmV0X3N0YXRzLT5yeF9kcm9wcGVkID0gc3RhdHMtPnJ4LnJ4X25vX2J1ZnM7CiAKIAlyZXR1cm4gbmV0X3N0YXRzOwpAQCAtOTI4LDEyICs5MzMsOCBAQAogCiAJaWYgKHBhY2tldF9lcnJvcikgewogCi0JCWlmIChieXRlc193cml0dGVuID4gMCAmJiAhZmNzX29rKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkJIiVzOiBwYWNrZXQgZXJyb3I6IGJhZCBGQ1NcbiIsCi0JCQkJCW5ldGRldi0+bmFtZSk7Ci0JCX0KKwkJaWYgKGJ5dGVzX3dyaXR0ZW4gPiAwICYmICFmY3Nfb2spCisJCQllbmljLT5ycV9iYWRfZmNzKys7CiAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIApAQCAtMTA2OCw4ICsxMDY5LDggQEAKIAkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJmVuaWMtPmxyb19tZ3IpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0pOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfSU5UWF9XUV9SUV0pOwogCX0KIAogCXJldHVybiBycV93b3JrX2RvbmU7CkBAIC0xMDk1LDkgKzEwOTYsOSBAQAogCiAJCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWNfcnFfYWxsb2NfYnVmKTsKIAotCQkvKiBBY2N1bXVsYXRlIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCisJCS8qIFJldHVybiBpbnRyIGV2ZW50IGNyZWRpdHMgZm9yIHRoaXMgcG9sbGluZwogCQkgKiBjeWNsZS4gIEFuIGludHIgZXZlbnQgaXMgdGhlIGNvbXBsZXRpb24gb2YgYQotCQkgKiBhIFdRIG9yIFJRIHBhY2tldC4KKwkJICogUlEgcGFja2V0LgogCQkgKi8KIAogCQl2bmljX2ludHJfcmV0dXJuX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSwKQEAgLTExMTIsNyArMTExMyw3IEBACiAJCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCiAJCQlscm9fZmx1c2hfYWxsKCZlbmljLT5scm9fbWdyKTsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX01TSVhfUlFdKTsKIAl9CiAKQEAgLTE0NjEsNiArMTQ2MiwyNiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZW5pY19zZXRfbmljY2ZnKHN0cnVjdCBlbmljICplbmljKQoreworCWNvbnN0IHU4IHJzc19kZWZhdWx0X2NwdSA9IDA7CisJY29uc3QgdTggcnNzX2hhc2hfdHlwZSA9IDA7CisJY29uc3QgdTggcnNzX2hhc2hfYml0cyA9IDA7CisJY29uc3QgdTggcnNzX2Jhc2VfY3B1ID0gMDsKKwljb25zdCB1OCByc3NfZW5hYmxlID0gMDsKKwljb25zdCB1OCB0c29faXBpZF9zcGxpdF9lbiA9IDA7CisJY29uc3QgdTggaWdfdmxhbl9zdHJpcF9lbiA9IDE7CisKKwkvKiBFbmFibGUgVkxBTiB0YWcgc3RyaXBwaW5nLiAgUlNTIG5vdCBlbmFibGVkICh5ZXQpLgorCSovCisKKwlyZXR1cm4gZW5pY19zZXRfbmljX2NmZyhlbmljLAorCQlyc3NfZGVmYXVsdF9jcHUsIHJzc19oYXNoX3R5cGUsCisJCXJzc19oYXNoX2JpdHMsIHJzc19iYXNlX2NwdSwKKwkJcnNzX2VuYWJsZSwgdHNvX2lwaWRfc3BsaXRfZW4sCisJCWlnX3ZsYW5fc3RyaXBfZW4pOworfQorCiBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgcmVzZXQpOwpAQCAtMTQ3Niw4ICsxNDk3LDEwIEBACiAKIAllbmljX3N0b3AoZW5pYy0+bmV0ZGV2KTsKIAllbmljX2Rldl9zb2Z0X3Jlc2V0KGVuaWMpOworCXZuaWNfZGV2X2luaXQoZW5pYy0+dmRldiwgMCk7CiAJZW5pY19yZXNldF9tY2FkZHJzKGVuaWMpOwogCWVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTsKKwllbmljX3NldF9uaWNjZmcoZW5pYyk7CiAJZW5pY19vcGVuKGVuaWMtPm5ldGRldik7CiAKIAlydG5sX3VubG9jaygpOwpAQCAtMTYyMCwxNCArMTY0Myw2IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKIAotCWNvbnN0IHU4IHJzc19kZWZhdWx0X2NwdSA9IDA7Ci0JY29uc3QgdTggcnNzX2hhc2hfdHlwZSA9IDA7Ci0JY29uc3QgdTggcnNzX2hhc2hfYml0cyA9IDA7Ci0JY29uc3QgdTggcnNzX2Jhc2VfY3B1ID0gMDsKLQljb25zdCB1OCByc3NfZW5hYmxlID0gMDsKLQljb25zdCB1OCB0c29faXBpZF9zcGxpdF9lbiA9IDA7Ci0JY29uc3QgdTggaWdfdmxhbl9zdHJpcF9lbiA9IDE7Ci0KIAkvKiBBbGxvY2F0ZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZS4gIFByaXZhdGUKIAkgKiBpbnN0YW5jZSBkYXRhIGlzIGluaXRpYWxpemVkIHRvIHplcm8uCiAJICovCkBAIC0xNzkzLDE0ICsxODA4LDcgQEAKIAogCWVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTsKIAotCS8qIEVuYWJsZSBWTEFOIHRhZyBzdHJpcHBpbmcuICBSU1Mgbm90IGVuYWJsZWQgKHlldCkuCi0JICovCi0KLQllcnIgPSBlbmljX3NldF9uaWNfY2ZnKGVuaWMsCi0JCXJzc19kZWZhdWx0X2NwdSwgcnNzX2hhc2hfdHlwZSwKLQkJcnNzX2hhc2hfYml0cywgcnNzX2Jhc2VfY3B1LAotCQlyc3NfZW5hYmxlLCB0c29faXBpZF9zcGxpdF9lbiwKLQkJaWdfdmxhbl9zdHJpcF9lbik7CisJZXJyID0gZW5pY19zZXRfbmljY2ZnKGVuaWMpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJIkZhaWxlZCB0byBjb25maWcgbmljLCBhYm9ydGluZy5cbiIpOwpAQCAtMTg1OCw3ICsxODY2LDYgQEAKIAlpZiAodXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAotCiAJZW5pYy0+Y3N1bV9yeF9lbmFibGVkID0gRU5JQ19TRVRUSU5HKGVuaWMsIFJYQ1NVTSk7CiAKIAllbmljLT5scm9fbWdyLm1heF9hZ2dyID0gRU5JQ19MUk9fTUFYX0FHR1I7CkBAIC0xODcwLDcgKzE4NzcsNiBAQAogCWVuaWMtPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7CiAJZW5pYy0+bHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwppbmRleCAxMTcwODU3Li5lMjFiOWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCkBAIC0zNCw2ICszNCw5IEBACiAJdW5zaWduZWQgaW50IGNvdW50OwogfTsKIAorI2RlZmluZSBWTklDX0RFVl9DQVBfSU5JVAkweDAwMDEKKyNkZWZpbmUgVk5JQ19ERVZfQ0FQX1BFUkJJCTB4MDAwMgorCiBzdHJ1Y3Qgdm5pY19kZXYgewogCXZvaWQgKnByaXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC01MCw2ICs1Myw3IEBACiAJZG1hX2FkZHJfdCBzdGF0c19wYTsKIAlzdHJ1Y3Qgdm5pY19kZXZjbWRfZndfaW5mbyAqZndfaW5mbzsKIAlkbWFfYWRkcl90IGZ3X2luZm9fcGE7CisJdTMyIGNhcF9mbGFnczsKIH07CiAKICNkZWZpbmUgVk5JQ19NQVhfUkVTX0hEUl9TSVpFIFwKQEAgLTU3NSw5ICs1NzksOSBAQAogewogCXU2NCBhMCA9ICh1MzIpYXJnLCBhMSA9IDA7CiAJaW50IHdhaXQgPSAxMDAwOwotICAgICAgICBpbnQgciA9IDA7CisJaW50IHIgPSAwOwogCi0JaWYgKHZuaWNfZGV2X2NhcGFibGUodmRldiwgQ01EX0lOSVQpKQorCWlmICh2ZGV2LT5jYXBfZmxhZ3MgJiBWTklDX0RFVl9DQVBfSU5JVCkKIAkJciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVCwgJmEwLCAmYTEsIHdhaXQpOwogCWVsc2UgewogCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX0lOSVRfdjEsICZhMCwgJmExLCB3YWl0KTsKQEAgLTU4Nyw4ICs1OTEsOCBAQAogCQkJdm5pY19kZXZfY21kKHZkZXYsIENNRF9NQUNfQUREUiwgJmEwLCAmYTEsIHdhaXQpOwogCQkJdm5pY19kZXZfY21kKHZkZXYsIENNRF9BRERSX0FERCwgJmEwLCAmYTEsIHdhaXQpOwogCQl9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHI7CisJfQorCXJldHVybiByOwogfQogCiBpbnQgdm5pY19kZXZfbGlua19zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQpAQCAtNjI2LDYgKzYzMCwyMiBAQAogCXJldHVybiB2ZGV2LT5ub3RpZnlfY29weS5tdHU7CiB9CiAKK3UzMiB2bmljX2Rldl9saW5rX2Rvd25fY250KHN0cnVjdCB2bmljX2RldiAqdmRldikKK3sKKwlpZiAoIXZuaWNfZGV2X25vdGlmeV9yZWFkeSh2ZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmRldi0+bm90aWZ5X2NvcHkubGlua19kb3duX2NudDsKK30KKwordTMyIHZuaWNfZGV2X25vdGlmeV9zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQoreworCWlmICghdm5pY19kZXZfbm90aWZ5X3JlYWR5KHZkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2ZGV2LT5ub3RpZnlfY29weS5zdGF0dXM7Cit9CisKIHZvaWQgdm5pY19kZXZfc2V0X2ludHJfbW9kZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCiAJZW51bSB2bmljX2Rldl9pbnRyX21vZGUgaW50cl9tb2RlKQogewpAQCAtNjgyLDYgKzcwMiwxMSBAQAogCWlmICghdmRldi0+ZGV2Y21kKQogCQlnb3RvIGVycl9vdXQ7CiAKKwl2ZGV2LT5jYXBfZmxhZ3MgPSAwOworCisJaWYgKHZuaWNfZGV2X2NhcGFibGUodmRldiwgQ01EX0lOSVQpKQorCQl2ZGV2LT5jYXBfZmxhZ3MgfD0gVk5JQ19ERVZfQ0FQX0lOSVQ7CisKIAlyZXR1cm4gdmRldjsKIAogZXJyX291dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAppbmRleCBiOWRjMTgyLi44YWE4ZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCkBAIC0xMDIsNiArMTAyLDggQEAKIHUzMiB2bmljX2Rldl9wb3J0X3NwZWVkKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB1MzIgdm5pY19kZXZfbXNnX2x2bChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogdTMyIHZuaWNfZGV2X210dShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwordTMyIHZuaWNfZGV2X2xpbmtfZG93bl9jbnQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKK3UzMiB2bmljX2Rldl9ub3RpZnlfc3RhdHVzKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiBpbnQgdm5pY19kZXZfY2xvc2Uoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9lbmFibGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9kaXNhYmxlKHN0cnVjdCB2bmljX2RldiAqdmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKaW5kZXggODA2MmM3NS4uMjU4N2YzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaApAQCAtMTkxLDcgKzE5MSw3IEBACiAJQ01EX0lOSVRfU1RBVFVTCQk9IF9DTURDKF9DTURfRElSX1JFQUQsIF9DTURfVlRZUEVfQUxMLCAzMSksCiAKIAkvKiBJTlQxMyBBUEk6ICh1NjQpYTA9cGFkZHIgdG8gdm5pY19pbnQxM19wYXJhbXMgc3RydWN0Ci0JICogICAgICAgICAgICAodTgpYTE9SU5UMTNfQ01EX3h4eCAqLworCSAqICAgICAgICAgICAgKHUzMilhMT1JTlQxM19DTURfeHh4ICovCiAJQ01EX0lOVDEzICAgICAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9GQywgMzIpLAogCiAJLyogbG9naWNhbCB1cGxpbmsgZW5hYmxlL2Rpc2FibGU6ICh1NjQpYTA6IDAvMT1kaXNhYmxlL2VuYWJsZSAqLwpAQCAtMjA3LDYgKzIwNywxMSBAQAogCSAqIGluOiAgKHUzMilhMD1jbWQKIAkgKiBvdXQ6ICh1MzIpYTA9ZXJybm8sIDA6dmFsaWQgY21kLCBhMT1zdXBwb3J0ZWQgVk5JQ19TVEZfKiBiaXRzICovCiAJQ01EX0NBUEFCSUxJVFkJCT0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfQUxMLCAzNiksCisKKwkvKiBwZXJzaXN0ZW50IGJpbmRpbmcgaW5mbworCSAqIGluOiAgKHU2NClhMD1wYWRkciBvZiBhcmcKKwkgKiAgICAgICh1MzIpYTE9Q01EX1BFUkJJX1hYWCAqLworCUNNRF9QRVJCSSAgICAgICAgICAgICAgID0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfRkMsIDM3KSwKIH07CiAKIC8qIGZsYWdzIGZvciBDTURfT1BFTiAqLwpAQCAtMjU5LDYgKzI2NCw3IEBACiAJdTMyIHN0YXR1czsJCS8qIHN0YXR1cyBiaXRzIChzZWUgVk5JQ19TVEZfKikgKi8KIAl1MzIgZXJyb3I7CQkvKiBlcnJvciBjb2RlIChzZWUgRVJSXyopIGZvciBmaXJzdCBFUlIgKi8KIAl1MzIgbGlua19kb3duX2NudDsJLyogcnVubmluZyBjb3VudCBvZiBsaW5rIGRvd24gdHJhbnNpdGlvbnMgKi8KKwl1MzIgcGVyYmlfcmVidWlsZF9jbnQ7CS8qIHJ1bm5pbmcgY291bnQgb2YgcGVyYmkgcmVidWlsZHMgKi8KIH07CiAjZGVmaW5lIFZOSUNfU1RGX0ZBVEFMX0VSUgkweDAwMDEJLyogZmF0YWwgZncgZXJyb3IgKi8KICNkZWZpbmUgVk5JQ19TVEZfU1REX1BBVVNFCTB4MDAwMgkvKiBzdGFuZGFyZCBsaW5rLWxldmVsIHBhdXNlIG9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaAppbmRleCBjZTYzM2E1Li45YTUzNjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKQEAgLTc2LDYgKzc2LDIwIEBACiAJaW93cml0ZTMyKGludF9jcmVkaXRfcmV0dXJuLCAmaW50ci0+Y3RybC0+aW50X2NyZWRpdF9yZXR1cm4pOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bmljX2ludHJfY3JlZGl0cyhzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKQoreworCXJldHVybiBpb3JlYWQzMigmaW50ci0+Y3RybC0+aW50X2NyZWRpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cyhzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKQoreworCXVuc2lnbmVkIGludCBjcmVkaXRzID0gdm5pY19pbnRyX2NyZWRpdHMoaW50cik7CisJaW50IHVubWFzayA9IDE7CisJaW50IHJlc2V0X3RpbWVyID0gMTsKKworCXZuaWNfaW50cl9yZXR1cm5fY3JlZGl0cyhpbnRyLCBjcmVkaXRzLCB1bm1hc2ssIHJlc2V0X3RpbWVyKTsKK30KKwogc3RhdGljIGlubGluZSB1MzIgdm5pY19pbnRyX2xlZ2FjeV9wYmEodTMyIF9faW9tZW0gKmxlZ2FjeV9wYmEpCiB7CiAJLyogcmVhZCBQQkEgd2l0aG91dCBjbGVhcmluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCmluZGV4IGE1MzliYzMuLmI2MGUyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKQEAgLTExMTQsOSArMTExNCw5IEBACiAKIAlpZiAoKHN0YXR1cyAmIEVwaWNOYXBpRXZlbnQpICYmICFlcC0+cmVzY2hlZHVsZV9pbl9wb2xsKSB7CiAJCXNwaW5fbG9jaygmZXAtPm5hcGlfbG9jayk7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmZXAtPm5hcGkpKSB7CiAJCQllcGljX25hcGlfaXJxX29mZihkZXYsIGVwKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZXAtPm5hcGkpOwogCQl9IGVsc2UKIAkJCWVwLT5yZXNjaGVkdWxlX2luX3BvbGwrKzsKIAkJc3Bpbl91bmxvY2soJmVwLT5uYXBpX2xvY2spOwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKIAogCQltb3JlID0gZXAtPnJlc2NoZWR1bGVfaW5fcG9sbDsKIAkJaWYgKCFtb3JlKSB7Ci0JCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJb3V0bChFcGljTmFwaUV2ZW50LCBpb2FkZHIgKyBJTlRTVEFUKTsKIAkJCWVwaWNfbmFwaV9pcnFfb24oZGV2LCBlcCk7CiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXFsLmMgYi9kcml2ZXJzL25ldC9lcWwuYwppbmRleCA0MDEyNTY5Li41MWVhZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcWwuYworKysgYi9kcml2ZXJzL25ldC9lcWwuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJYWRkX3RpbWVyKCZlcWwtPnRpbWVyKTsKIH0KIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGNvbnN0ID0KIAkiRXF1YWxpemVyMjAwMjogU2ltb24gSmFuZXMgKHNpbW9uQG5jbS5jb20pIGFuZCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pXG4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVxbF9uZXRkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoMTZpLmMgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwppbmRleCA1YzA0OGYyLi4wZDhiNmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGgxNmkuYworKysgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwpAQCAtNDc1LDYgKzQ3NSwxNyBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXRoMTZpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBldGgxNmlfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICAgICA9IGV0aDE2aV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgCT0gZXRoMTZpX3R4LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZXRoMTZpX211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZXRoMTZpX3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGV0aDE2aV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKIAlzdHJ1Y3QgZXRoMTZpX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01NDksMTIgKzU2MCw3IEBACiAJQklUQ0xSKGlvYWRkciArIENPTkZJR19SRUdfMSwgUE9XRVJVUCk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCi0JbWVtc2V0KGxwLCAwLCBzaXplb2Yoc3RydWN0IGV0aDE2aV9sb2NhbCkpOwotCWRldi0+b3BlbiAgICAgICAgICAgICAgID0gZXRoMTZpX29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgICAgPSBldGgxNmlfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgPSBldGgxNmlfdHg7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBldGgxNmlfbXVsdGljYXN0OwotCWRldi0+dHhfdGltZW91dCAJPSBldGgxNmlfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgICAgICAgICA9ICZldGgxNmlfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gVFhfVElNRU9VVDsKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWE5YjFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRob2MuYwpAQCAtMCwwICsxLDExMTIgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL25ldC9ldGhvYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQXZpb25pYyBEZXNpZ24gRGV2ZWxvcG1lbnQgR21iSAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQXZpb25pYyBEZXNpZ24gR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogV3JpdHRlbiBieSBUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAYXZpb25pYy1kZXNpZ24uZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9ldGhvYy5oPgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lCU1PREVSCQkweDAwCisjZGVmaW5lCUlOVF9TT1VSQ0UJMHgwNAorI2RlZmluZQlJTlRfTUFTSwkweDA4CisjZGVmaW5lCUlQR1QJCTB4MGMKKyNkZWZpbmUJSVBHUjEJCTB4MTAKKyNkZWZpbmUJSVBHUjIJCTB4MTQKKyNkZWZpbmUJUEFDS0VUTEVOCTB4MTgKKyNkZWZpbmUJQ09MTENPTkYJMHgxYworI2RlZmluZQlUWF9CRF9OVU0JMHgyMAorI2RlZmluZQlDVFJMTU9ERVIJMHgyNAorI2RlZmluZQlNSUlNT0RFUgkweDI4CisjZGVmaW5lCU1JSUNPTU1BTkQJMHgyYworI2RlZmluZQlNSUlBRERSRVNTCTB4MzAKKyNkZWZpbmUJTUlJVFhfREFUQQkweDM0CisjZGVmaW5lCU1JSVJYX0RBVEEJMHgzOAorI2RlZmluZQlNSUlTVEFUVVMJMHgzYworI2RlZmluZQlNQUNfQUREUjAJMHg0MAorI2RlZmluZQlNQUNfQUREUjEJMHg0NAorI2RlZmluZQlFVEhfSEFTSDAJMHg0OAorI2RlZmluZQlFVEhfSEFTSDEJMHg0YworI2RlZmluZQlFVEhfVFhDVFJMCTB4NTAKKworLyogbW9kZSByZWdpc3RlciAqLworI2RlZmluZQlNT0RFUl9SWEVOCSgxIDw8ICAwKSAvKiByZWNlaXZlIGVuYWJsZSAqLworI2RlZmluZQlNT0RFUl9UWEVOCSgxIDw8ICAxKSAvKiB0cmFuc21pdCBlbmFibGUgKi8KKyNkZWZpbmUJTU9ERVJfTk9QUkUJKDEgPDwgIDIpIC8qIG5vIHByZWFtYmxlICovCisjZGVmaW5lCU1PREVSX0JSTwkoMSA8PCAgMykgLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKyNkZWZpbmUJTU9ERVJfSUFNCSgxIDw8ICA0KSAvKiBpbmRpdmlkdWFsIGFkZHJlc3MgbW9kZSAqLworI2RlZmluZQlNT0RFUl9QUk8JKDEgPDwgIDUpIC8qIHByb21pc2N1b3VzIG1vZGUgKi8KKyNkZWZpbmUJTU9ERVJfSUZHCSgxIDw8ICA2KSAvKiBpbnRlcmZyYW1lIGdhcCBmb3IgaW5jb21pbmcgZnJhbWVzICovCisjZGVmaW5lCU1PREVSX0xPT1AJKDEgPDwgIDcpIC8qIGxvb3BiYWNrICovCisjZGVmaW5lCU1PREVSX05CTwkoMSA8PCAgOCkgLyogbm8gYmFjay1vZmYgKi8KKyNkZWZpbmUJTU9ERVJfRURFCSgxIDw8ICA5KSAvKiBleGNlc3MgZGVmZXIgZW5hYmxlICovCisjZGVmaW5lCU1PREVSX0ZVTExECSgxIDw8IDEwKSAvKiBmdWxsIGR1cGxleCAqLworI2RlZmluZQlNT0RFUl9SRVNFVAkoMSA8PCAxMSkgLyogRklYTUU6IHJlc2V0ICh1bmRvY3VtZW50ZWQpICovCisjZGVmaW5lCU1PREVSX0RDUkMJKDEgPDwgMTIpIC8qIGRlbGF5ZWQgQ1JDIGVuYWJsZSAqLworI2RlZmluZQlNT0RFUl9DUkMJKDEgPDwgMTMpIC8qIENSQyBlbmFibGUgKi8KKyNkZWZpbmUJTU9ERVJfSFVHRQkoMSA8PCAxNCkgLyogaHVnZSBwYWNrZXRzIGVuYWJsZSAqLworI2RlZmluZQlNT0RFUl9QQUQJKDEgPDwgMTUpIC8qIHBhZGRpbmcgZW5hYmxlZCAqLworI2RlZmluZQlNT0RFUl9SU00JKDEgPDwgMTYpIC8qIHJlY2VpdmUgc21hbGwgcGFja2V0cyAqLworCisvKiBpbnRlcnJ1cHQgc291cmNlIGFuZCBtYXNrIHJlZ2lzdGVycyAqLworI2RlZmluZQlJTlRfTUFTS19UWEYJKDEgPDwgMCkgLyogdHJhbnNtaXQgZnJhbWUgKi8KKyNkZWZpbmUJSU5UX01BU0tfVFhFCSgxIDw8IDEpIC8qIHRyYW5zbWl0IGVycm9yICovCisjZGVmaW5lCUlOVF9NQVNLX1JYRgkoMSA8PCAyKSAvKiByZWNlaXZlIGZyYW1lICovCisjZGVmaW5lCUlOVF9NQVNLX1JYRQkoMSA8PCAzKSAvKiByZWNlaXZlIGVycm9yICovCisjZGVmaW5lCUlOVF9NQVNLX0JVU1kJKDEgPDwgNCkKKyNkZWZpbmUJSU5UX01BU0tfVFhDCSgxIDw8IDUpIC8qIHRyYW5zbWl0IGNvbnRyb2wgZnJhbWUgKi8KKyNkZWZpbmUJSU5UX01BU0tfUlhDCSgxIDw8IDYpIC8qIHJlY2VpdmUgY29udHJvbCBmcmFtZSAqLworCisjZGVmaW5lCUlOVF9NQVNLX1RYCShJTlRfTUFTS19UWEYgfCBJTlRfTUFTS19UWEUpCisjZGVmaW5lCUlOVF9NQVNLX1JYCShJTlRfTUFTS19SWEYgfCBJTlRfTUFTS19SWEUpCisKKyNkZWZpbmUJSU5UX01BU0tfQUxMICggXAorCQlJTlRfTUFTS19UWEYgfCBJTlRfTUFTS19UWEUgfCBcCisJCUlOVF9NQVNLX1JYRiB8IElOVF9NQVNLX1JYRSB8IFwKKwkJSU5UX01BU0tfVFhDIHwgSU5UX01BU0tfUlhDIHwgXAorCQlJTlRfTUFTS19CVVNZIFwKKwkpCisKKy8qIHBhY2tldCBsZW5ndGggcmVnaXN0ZXIgKi8KKyNkZWZpbmUJUEFDS0VUTEVOX01JTihtaW4pCQkoKChtaW4pICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUJUEFDS0VUTEVOX01BWChtYXgpCQkoKChtYXgpICYgMHhmZmZmKSA8PCAgMCkKKyNkZWZpbmUJUEFDS0VUTEVOX01JTl9NQVgobWluLCBtYXgpCShQQUNLRVRMRU5fTUlOKG1pbikgfCBcCisJCQkJCVBBQ0tFVExFTl9NQVgobWF4KSkKKworLyogdHJhbnNtaXQgYnVmZmVyIG51bWJlciByZWdpc3RlciAqLworI2RlZmluZQlUWF9CRF9OVU1fVkFMKHgpCSgoKHgpIDw9IDB4ODApID8gKHgpIDogMHg4MCkKKworLyogY29udHJvbCBtb2R1bGUgbW9kZSByZWdpc3RlciAqLworI2RlZmluZQlDVFJMTU9ERVJfUEFTU0FMTAkoMSA8PCAwKSAvKiBwYXNzIGFsbCByZWNlaXZlIGZyYW1lcyAqLworI2RlZmluZQlDVFJMTU9ERVJfUlhGTE9XCSgxIDw8IDEpIC8qIHJlY2VpdmUgY29udHJvbCBmbG93ICovCisjZGVmaW5lCUNUUkxNT0RFUl9UWEZMT1cJKDEgPDwgMikgLyogdHJhbnNtaXQgY29udHJvbCBmbG93ICovCisKKy8qIE1JSSBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lCU1JSU1PREVSX0NMS0RJVih4KQkoKHgpICYgMHhmZSkgLyogbmVlZHMgdG8gYmUgYW4gZXZlbiBudW1iZXIgKi8KKyNkZWZpbmUJTUlJTU9ERVJfTk9QUkUJCSgxIDw8IDgpIC8qIG5vIHByZWFtYmxlICovCisKKy8qIE1JSSBjb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lCU1JSUNPTU1BTkRfU0NBTgkJKDEgPDwgMCkgLyogc2NhbiBzdGF0dXMgKi8KKyNkZWZpbmUJTUlJQ09NTUFORF9SRUFECQkoMSA8PCAxKSAvKiByZWFkIHN0YXR1cyAqLworI2RlZmluZQlNSUlDT01NQU5EX1dSSVRFCSgxIDw8IDIpIC8qIHdyaXRlIGNvbnRyb2wgZGF0YSAqLworCisvKiBNSUkgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZQlNSUlBRERSRVNTX0ZJQUQoeCkJCSgoKHgpICYgMHgxZikgPDwgMCkKKyNkZWZpbmUJTUlJQUREUkVTU19SR0FEKHgpCQkoKCh4KSAmIDB4MWYpIDw8IDgpCisjZGVmaW5lCU1JSUFERFJFU1NfQUREUihwaHksIHJlZykJKE1JSUFERFJFU1NfRklBRChwaHkpIHwgXAorCQkJCQlNSUlBRERSRVNTX1JHQUQocmVnKSkKKworLyogTUlJIHRyYW5zbWl0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJVFhfREFUQV9WQUwoeCkJKCh4KSAmIDB4ZmZmZikKKworLyogTUlJIHJlY2VpdmUgZGF0YSByZWdpc3RlciAqLworI2RlZmluZQlNSUlSWF9EQVRBX1ZBTCh4KQkoKHgpICYgMHhmZmZmKQorCisvKiBNSUkgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lCU1JSVNUQVRVU19MSU5LRkFJTAkoMSA8PCAwKQorI2RlZmluZQlNSUlTVEFUVVNfQlVTWQkJKDEgPDwgMSkKKyNkZWZpbmUJTUlJU1RBVFVTX0lOVkFMSUQJKDEgPDwgMikKKworLyogVFggYnVmZmVyIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJVFhfQkRfQ1MJCSgxIDw8ICAwKSAvKiBjYXJyaWVyIHNlbnNlIGxvc3QgKi8KKyNkZWZpbmUJVFhfQkRfREYJCSgxIDw8ICAxKSAvKiBkZWZlciBpbmRpY2F0aW9uICovCisjZGVmaW5lCVRYX0JEX0xDCQkoMSA8PCAgMikgLyogbGF0ZSBjb2xsaXNpb24gKi8KKyNkZWZpbmUJVFhfQkRfUkwJCSgxIDw8ICAzKSAvKiByZXRyYW5zbWlzc2lvbiBsaW1pdCAqLworI2RlZmluZQlUWF9CRF9SRVRSWV9NQVNLCSgweDAwZjApCisjZGVmaW5lCVRYX0JEX1JFVFJZKHgpCQkoKCh4KSAmIDB4MDBmMCkgPj4gIDQpCisjZGVmaW5lCVRYX0JEX1VSCQkoMSA8PCAgOCkgLyogdHJhbnNtaXR0ZXIgdW5kZXJydW4gKi8KKyNkZWZpbmUJVFhfQkRfQ1JDCQkoMSA8PCAxMSkgLyogVFggQ1JDIGVuYWJsZSAqLworI2RlZmluZQlUWF9CRF9QQUQJCSgxIDw8IDEyKSAvKiBwYWQgZW5hYmxlIGZvciBzaG9ydCBwYWNrZXRzICovCisjZGVmaW5lCVRYX0JEX1dSQVAJCSgxIDw8IDEzKQorI2RlZmluZQlUWF9CRF9JUlEJCSgxIDw8IDE0KSAvKiBpbnRlcnJ1cHQgcmVxdWVzdCBlbmFibGUgKi8KKyNkZWZpbmUJVFhfQkRfUkVBRFkJCSgxIDw8IDE1KSAvKiBUWCBidWZmZXIgcmVhZHkgKi8KKyNkZWZpbmUJVFhfQkRfTEVOKHgpCQkoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lCVRYX0JEX0xFTl9NQVNLCQkoMHhmZmZmIDw8IDE2KQorCisjZGVmaW5lCVRYX0JEX1NUQVRTCQkoVFhfQkRfQ1MgfCBUWF9CRF9ERiB8IFRYX0JEX0xDIHwgXAorCQkJCVRYX0JEX1JMIHwgVFhfQkRfUkVUUllfTUFTSyB8IFRYX0JEX1VSKQorCisvKiBSWCBidWZmZXIgZGVzY3JpcHRvciAqLworI2RlZmluZQlSWF9CRF9MQwkoMSA8PCAgMCkgLyogbGF0ZSBjb2xsaXNpb24gKi8KKyNkZWZpbmUJUlhfQkRfQ1JDCSgxIDw8ICAxKSAvKiBSWCBDUkMgZXJyb3IgKi8KKyNkZWZpbmUJUlhfQkRfU0YJKDEgPDwgIDIpIC8qIHNob3J0IGZyYW1lICovCisjZGVmaW5lCVJYX0JEX1RMCSgxIDw8ICAzKSAvKiB0b28gbG9uZyAqLworI2RlZmluZQlSWF9CRF9ETgkoMSA8PCAgNCkgLyogZHJpYmJsZSBuaWJibGUgKi8KKyNkZWZpbmUJUlhfQkRfSVMJKDEgPDwgIDUpIC8qIGludmFsaWQgc3ltYm9sICovCisjZGVmaW5lCVJYX0JEX09SCSgxIDw8ICA2KSAvKiByZWNlaXZlciBvdmVycnVuICovCisjZGVmaW5lCVJYX0JEX01JU1MJKDEgPDwgIDcpCisjZGVmaW5lCVJYX0JEX0NGCSgxIDw8ICA4KSAvKiBjb250cm9sIGZyYW1lICovCisjZGVmaW5lCVJYX0JEX1dSQVAJKDEgPDwgMTMpCisjZGVmaW5lCVJYX0JEX0lSUQkoMSA8PCAxNCkgLyogaW50ZXJydXB0IHJlcXVlc3QgZW5hYmxlICovCisjZGVmaW5lCVJYX0JEX0VNUFRZCSgxIDw8IDE1KQorI2RlZmluZQlSWF9CRF9MRU4oeCkJKCgoeCkgJiAweGZmZmYpIDw8IDE2KQorCisjZGVmaW5lCVJYX0JEX1NUQVRTCShSWF9CRF9MQyB8IFJYX0JEX0NSQyB8IFJYX0JEX1NGIHwgUlhfQkRfVEwgfCBcCisJCQlSWF9CRF9ETiB8IFJYX0JEX0lTIHwgUlhfQkRfT1IgfCBSWF9CRF9NSVNTKQorCisjZGVmaW5lCUVUSE9DX0JVRlNJWgkJMTUzNgorI2RlZmluZQlFVEhPQ19aTEVOCQk2NAorI2RlZmluZQlFVEhPQ19CRF9CQVNFCQkweDQwMAorI2RlZmluZQlFVEhPQ19USU1FT1VUCQkoSFogLyAyKQorI2RlZmluZQlFVEhPQ19NSUlfVElNRU9VVAkoMSArIChIWiAvIDUpKQorCisvKioKKyAqIHN0cnVjdCBldGhvYyAtIGRyaXZlci1wcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBpb2Jhc2U6CXBvaW50ZXIgdG8gSS9PIG1lbW9yeSByZWdpb24KKyAqIEBtZW1iYXNlOglwb2ludGVyIHRvIGJ1ZmZlciBtZW1vcnkgcmVnaW9uCisgKiBAbnVtX3R4OgludW1iZXIgb2Ygc2VuZCBidWZmZXJzCisgKiBAY3VyX3R4OglsYXN0IHNlbmQgYnVmZmVyIHdyaXR0ZW4KKyAqIEBkdHlfdHg6CWxhc3QgYnVmZmVyIGFjdHVhbGx5IHNlbnQKKyAqIEBudW1fcng6CW51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcnMKKyAqIEBjdXJfcng6CWN1cnJlbnQgcmVjZWl2ZSBidWZmZXIKKyAqIEBuZXRkZXY6CXBvaW50ZXIgdG8gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbmFwaToJTkFQSSBzdHJ1Y3R1cmUKKyAqIEBzdGF0czoJbmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcworICogQG1zZ19lbmFibGU6CWRldmljZSBzdGF0ZSBmbGFncworICogQHJ4X2xvY2s6CXJlY2VpdmUgbG9jaworICogQGxvY2s6CWRldmljZSBsb2NrCisgKiBAcGh5OglhdHRhY2hlZCBQSFkKKyAqIEBtZGlvOglNRElPIGJ1cyBmb3IgUEhZIGFjY2VzcworICogQHBoeV9pZDoJYWRkcmVzcyBvZiBhdHRhY2hlZCBQSFkKKyAqLworc3RydWN0IGV0aG9jIHsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CisKKwl1bnNpZ25lZCBpbnQgbnVtX3R4OworCXVuc2lnbmVkIGludCBjdXJfdHg7CisJdW5zaWduZWQgaW50IGR0eV90eDsKKworCXVuc2lnbmVkIGludCBudW1fcng7CisJdW5zaWduZWQgaW50IGN1cl9yeDsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJdTMyIG1zZ19lbmFibGU7CisKKwlzcGlubG9ja190IHJ4X2xvY2s7CisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbWRpbzsKKwlzOCBwaHlfaWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBldGhvY19iZCAtIGJ1ZmZlciBkZXNjcmlwdG9yCisgKiBAc3RhdDoJYnVmZmVyIHN0YXRpc3RpY3MKKyAqIEBhZGRyOglwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcworICovCitzdHJ1Y3QgZXRob2NfYmQgeworCXUzMiBzdGF0OworCXUzMiBhZGRyOworfTsKKworc3RhdGljIHUzMiBldGhvY19yZWFkKHN0cnVjdCBldGhvYyAqZGV2LCBsb2ZmX3Qgb2Zmc2V0KQoreworCXJldHVybiBpb3JlYWQzMihkZXYtPmlvYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX3dyaXRlKHN0cnVjdCBldGhvYyAqZGV2LCBsb2ZmX3Qgb2Zmc2V0LCB1MzIgZGF0YSkKK3sKKwlpb3dyaXRlMzIoZGF0YSwgZGV2LT5pb2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBldGhvY19yZWFkX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsIHN0cnVjdCBldGhvY19iZCAqYmQpCit7CisJbG9mZl90IG9mZnNldCA9IEVUSE9DX0JEX0JBU0UgKyAoaW5kZXggKiBzaXplb2Yoc3RydWN0IGV0aG9jX2JkKSk7CisJYmQtPnN0YXQgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgMCk7CisJYmQtPmFkZHIgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX3dyaXRlX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCisJCWNvbnN0IHN0cnVjdCBldGhvY19iZCAqYmQpCit7CisJbG9mZl90IG9mZnNldCA9IEVUSE9DX0JEX0JBU0UgKyAoaW5kZXggKiBzaXplb2Yoc3RydWN0IGV0aG9jX2JkKSk7CisJZXRob2Nfd3JpdGUoZGV2LCBvZmZzZXQgKyAwLCBiZC0+c3RhdCk7CisJZXRob2Nfd3JpdGUoZGV2LCBvZmZzZXQgKyA0LCBiZC0+YWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQoreworCXUzMiBpbWFzayA9IGV0aG9jX3JlYWQoZGV2LCBJTlRfTUFTSyk7CisJaW1hc2sgfD0gbWFzazsKKwlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX2Rpc2FibGVfaXJxKHN0cnVjdCBldGhvYyAqZGV2LCB1MzIgbWFzaykKK3sKKwl1MzIgaW1hc2sgPSBldGhvY19yZWFkKGRldiwgSU5UX01BU0spOworCWltYXNrICY9IH5tYXNrOworCWV0aG9jX3dyaXRlKGRldiwgSU5UX01BU0ssIGltYXNrKTsKK30KKworc3RhdGljIHZvaWQgZXRob2NfYWNrX2lycShzdHJ1Y3QgZXRob2MgKmRldiwgdTMyIG1hc2spCit7CisJZXRob2Nfd3JpdGUoZGV2LCBJTlRfU09VUkNFLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgZXRob2NfZW5hYmxlX3J4X2FuZF90eChzdHJ1Y3QgZXRob2MgKmRldikKK3sKKwl1MzIgbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CisJbW9kZSB8PSBNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTjsKKwlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKK30KKworc3RhdGljIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCit7CisJdTMyIG1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOworCW1vZGUgJj0gfihNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTik7CisJZXRob2Nfd3JpdGUoZGV2LCBNT0RFUiwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfaW5pdF9yaW5nKHN0cnVjdCBldGhvYyAqZGV2KQoreworCXN0cnVjdCBldGhvY19iZCBiZDsKKwlpbnQgaTsKKworCWRldi0+Y3VyX3R4ID0gMDsKKwlkZXYtPmR0eV90eCA9IDA7CisJZGV2LT5jdXJfcnggPSAwOworCisJLyogc2V0dXAgdHJhbnNtaXNzaW9uIGJ1ZmZlcnMgKi8KKwliZC5hZGRyID0gMDsKKwliZC5zdGF0ID0gVFhfQkRfSVJRIHwgVFhfQkRfQ1JDOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4OyBpKyspIHsKKwkJaWYgKGkgPT0gZGV2LT5udW1fdHggLSAxKQorCQkJYmQuc3RhdCB8PSBUWF9CRF9XUkFQOworCisJCWV0aG9jX3dyaXRlX2JkKGRldiwgaSwgJmJkKTsKKwkJYmQuYWRkciArPSBFVEhPQ19CVUZTSVo7CisJfQorCisJYmQuYWRkciA9IGRldi0+bnVtX3R4ICogRVRIT0NfQlVGU0laOworCWJkLnN0YXQgPSBSWF9CRF9FTVBUWSB8IFJYX0JEX0lSUTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yeDsgaSsrKSB7CisJCWlmIChpID09IGRldi0+bnVtX3J4IC0gMSkKKwkJCWJkLnN0YXQgfD0gUlhfQkRfV1JBUDsKKworCQlldGhvY193cml0ZV9iZChkZXYsIGRldi0+bnVtX3R4ICsgaSwgJmJkKTsKKwkJYmQuYWRkciArPSBFVEhPQ19CVUZTSVo7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfcmVzZXQoc3RydWN0IGV0aG9jICpkZXYpCit7CisJdTMyIG1vZGU7CisKKwkvKiBUT0RPOiByZXNldCBjb250cm9sbGVyPyAqLworCisJZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoZGV2KTsKKworCS8qIFRPRE86IHNldHVwIHJlZ2lzdGVycyAqLworCisJLyogZW5hYmxlIEZDUyBnZW5lcmF0aW9uIGFuZCBhdXRvbWF0aWMgcGFkZGluZyAqLworCW1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOworCW1vZGUgfD0gTU9ERVJfQ1JDIHwgTU9ERVJfUEFEOworCWV0aG9jX3dyaXRlKGRldiwgTU9ERVIsIG1vZGUpOworCisJLyogc2V0IGZ1bGwtZHVwbGV4IG1vZGUgKi8KKwltb2RlID0gZXRob2NfcmVhZChkZXYsIE1PREVSKTsKKwltb2RlIHw9IE1PREVSX0ZVTExEOworCWV0aG9jX3dyaXRlKGRldiwgTU9ERVIsIG1vZGUpOworCWV0aG9jX3dyaXRlKGRldiwgSVBHVCwgMHgxNSk7CisKKwlldGhvY19hY2tfaXJxKGRldiwgSU5UX01BU0tfQUxMKTsKKwlldGhvY19lbmFibGVfaXJxKGRldiwgSU5UX01BU0tfQUxMKTsKKwlldGhvY19lbmFibGVfcnhfYW5kX3R4KGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXRob2NfdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCBldGhvYyAqZGV2LAorCQlzdHJ1Y3QgZXRob2NfYmQgKmJkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXYtPm5ldGRldjsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX1RMKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IGZyYW1lIHRvbyBsb25nXG4iKTsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCXJldCsrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX1NGKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IGZyYW1lIHRvbyBzaG9ydFxuIik7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXQrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9ETikgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBkcmliYmxlIG5pYmJsZVxuIik7CisJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfQ1JDKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IHdyb25nIENSQ1xuIik7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlyZXQrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9PUikgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlJYOiBvdmVycnVuXG4iKTsKKwkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQlyZXQrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9NSVNTKQorCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX0xDKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IGxhdGUgY29sbGlzaW9uXG4iKTsKKwkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CisJCXJldCsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXRob2Nfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGltaXQ7ICsrY291bnQpIHsKKwkJdW5zaWduZWQgaW50IGVudHJ5OworCQlzdHJ1Y3QgZXRob2NfYmQgYmQ7CisKKwkJZW50cnkgPSBwcml2LT5udW1fdHggKyAocHJpdi0+Y3VyX3J4ICUgcHJpdi0+bnVtX3J4KTsKKwkJZXRob2NfcmVhZF9iZChwcml2LCBlbnRyeSwgJmJkKTsKKwkJaWYgKGJkLnN0YXQgJiBSWF9CRF9FTVBUWSkKKwkJCWJyZWFrOworCisJCWlmIChldGhvY191cGRhdGVfcnhfc3RhdHMocHJpdiwgJmJkKSA9PSAwKSB7CisJCQlpbnQgc2l6ZSA9IGJkLnN0YXQgPj4gMTY7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHNpemUpOworCQkJaWYgKGxpa2VseShza2IpKSB7CisJCQkJdm9pZCAqc3JjID0gcHJpdi0+bWVtYmFzZSArIGJkLmFkZHI7CisJCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksIHNyYywgc2l6ZSk7CisJCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOworCQkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJCQl9IGVsc2UgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKCZkZXYtPmRldiwgImxvdyBvbiBtZW1vcnkgLSAiCisJCQkJCQkJInBhY2tldCBkcm9wcGVkXG4iKTsKKworCQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIGNsZWFyIHRoZSBidWZmZXIgZGVzY3JpcHRvciBzbyBpdCBjYW4gYmUgcmV1c2VkICovCisJCWJkLnN0YXQgJj0gflJYX0JEX1NUQVRTOworCQliZC5zdGF0IHw9ICBSWF9CRF9FTVBUWTsKKwkJZXRob2Nfd3JpdGVfYmQocHJpdiwgZW50cnksICZiZCk7CisJCXByaXYtPmN1cl9yeCsrOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBldGhvY191cGRhdGVfdHhfc3RhdHMoc3RydWN0IGV0aG9jICpkZXYsIHN0cnVjdCBldGhvY19iZCAqYmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+bmV0ZGV2OworCisJaWYgKGJkLT5zdGF0ICYgVFhfQkRfTEMpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJUWDogbGF0ZSBjb2xsaXNpb25cbiIpOworCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBUWF9CRF9STCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiByZXRyYW5zbWl0IGxpbWl0XG4iKTsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFRYX0JEX1VSKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiVFg6IHVuZGVycnVuXG4iKTsKKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFRYX0JEX0NTKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiVFg6IGNhcnJpZXIgc2Vuc2UgbG9zdFxuIik7CisJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBUWF9CRF9TVEFUUykKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKworCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAoYmQtPnN0YXQgPj4gNCkgJiAweGY7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBiZC0+c3RhdCA+PiAxNjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXRob2NfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCXdoaWxlIChwcml2LT5kdHlfdHggIT0gcHJpdi0+Y3VyX3R4KSB7CisJCXVuc2lnbmVkIGludCBlbnRyeSA9IHByaXYtPmR0eV90eCAlIHByaXYtPm51bV90eDsKKwkJc3RydWN0IGV0aG9jX2JkIGJkOworCisJCWV0aG9jX3JlYWRfYmQocHJpdiwgZW50cnksICZiZCk7CisJCWlmIChiZC5zdGF0ICYgVFhfQkRfUkVBRFkpCisJCQlicmVhazsKKworCQllbnRyeSA9ICgrK3ByaXYtPmR0eV90eCkgJSBwcml2LT5udW1fdHg7CisJCSh2b2lkKWV0aG9jX3VwZGF0ZV90eF9zdGF0cyhwcml2LCAmYmQpOworCX0KKworCWlmICgocHJpdi0+Y3VyX3R4IC0gcHJpdi0+ZHR5X3R4KSA8PSAocHJpdi0+bnVtX3R4IC8gMikpCisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKworCWV0aG9jX2Fja19pcnEocHJpdiwgSU5UX01BU0tfVFgpOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGV0aG9jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBwZW5kaW5nOworCisJZXRob2NfZGlzYWJsZV9pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKwlwZW5kaW5nID0gZXRob2NfcmVhZChwcml2LCBJTlRfU09VUkNFKTsKKwlpZiAodW5saWtlbHkocGVuZGluZyA9PSAwKSkgeworCQlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX0FMTCk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlldGhvY19hY2tfaXJxKHByaXYsIElOVF9NQVNLX0FMTCk7CisKKwlpZiAocGVuZGluZyAmIElOVF9NQVNLX0JVU1kpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJwYWNrZXQgZHJvcHBlZFxuIik7CisJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwl9CisKKwlpZiAocGVuZGluZyAmIElOVF9NQVNLX1JYKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKQorCQkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwl9IGVsc2UgeworCQlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX1JYKTsKKwl9CisKKwlpZiAocGVuZGluZyAmIElOVF9NQVNLX1RYKQorCQlldGhvY190eChkZXYpOworCisJZXRob2NfZW5hYmxlX2lycShwcml2LCBJTlRfTUFTS19BTEwgJiB+SU5UX01BU0tfUlgpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBldGhvY19nZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4ICptYWMgPSAodTggKilhZGRyOworCXUzMiByZWc7CisKKwlyZWcgPSBldGhvY19yZWFkKHByaXYsIE1BQ19BRERSMCk7CisJbWFjWzJdID0gKHJlZyA+PiAyNCkgJiAweGZmOworCW1hY1szXSA9IChyZWcgPj4gMTYpICYgMHhmZjsKKwltYWNbNF0gPSAocmVnID4+ICA4KSAmIDB4ZmY7CisJbWFjWzVdID0gKHJlZyA+PiAgMCkgJiAweGZmOworCisJcmVnID0gZXRob2NfcmVhZChwcml2LCBNQUNfQUREUjEpOworCW1hY1swXSA9IChyZWcgPj4gIDgpICYgMHhmZjsKKwltYWNbMV0gPSAocmVnID4+ICAwKSAmIDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhvY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGV0aG9jLCBuYXBpKTsKKwlpbnQgd29ya19kb25lID0gMDsKKworCXdvcmtfZG9uZSA9IGV0aG9jX3J4KHByaXYtPm5ldGRldiwgYnVkZ2V0KTsKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCWV0aG9jX2VuYWJsZV9pcnEocHJpdiwgSU5UX01BU0tfUlgpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHksIGludCByZWcpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEVUSE9DX01JSV9USU1FT1VUOworCXN0cnVjdCBldGhvYyAqcHJpdiA9IGJ1cy0+cHJpdjsKKworCWV0aG9jX3dyaXRlKHByaXYsIE1JSUFERFJFU1MsIE1JSUFERFJFU1NfQUREUihwaHksIHJlZykpOworCWV0aG9jX3dyaXRlKHByaXYsIE1JSUNPTU1BTkQsIE1JSUNPTU1BTkRfUkVBRCk7CisKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJdTMyIHN0YXR1cyA9IGV0aG9jX3JlYWQocHJpdiwgTUlJU1RBVFVTKTsKKwkJaWYgKCEoc3RhdHVzICYgTUlJU1RBVFVTX0JVU1kpKSB7CisJCQl1MzIgZGF0YSA9IGV0aG9jX3JlYWQocHJpdiwgTUlJUlhfREFUQSk7CisJCQkvKiByZXNldCBNSUkgY29tbWFuZCByZWdpc3RlciAqLworCQkJZXRob2Nfd3JpdGUocHJpdiwgTUlJQ09NTUFORCwgMCk7CisJCQlyZXR1cm4gZGF0YTsKKwkJfQorCisJCXNjaGVkdWxlKCk7CisJfQorCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCBldGhvY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHksIGludCByZWcsIHUxNiB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEVUSE9DX01JSV9USU1FT1VUOworCXN0cnVjdCBldGhvYyAqcHJpdiA9IGJ1cy0+cHJpdjsKKworCWV0aG9jX3dyaXRlKHByaXYsIE1JSUFERFJFU1MsIE1JSUFERFJFU1NfQUREUihwaHksIHJlZykpOworCWV0aG9jX3dyaXRlKHByaXYsIE1JSVRYX0RBVEEsIHZhbCk7CisJZXRob2Nfd3JpdGUocHJpdiwgTUlJQ09NTUFORCwgTUlJQ09NTUFORF9XUklURSk7CisKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJdTMyIHN0YXQgPSBldGhvY19yZWFkKHByaXYsIE1JSVNUQVRVUyk7CisJCWlmICghKHN0YXQgJiBNSUlTVEFUVVNfQlVTWSkpCisJCQlyZXR1cm4gMDsKKworCQlzY2hlZHVsZSgpOworCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldGhvY19tZGlvX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKK30KKworc3RhdGljIGludCBldGhvY19tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKSB7CisJCXBoeSA9IHByaXYtPm1kaW8tPnBoeV9tYXBbaV07CisJCWlmIChwaHkpIHsKKwkJCWlmIChwcml2LT5waHlfaWQgIT0gLTEpIHsKKwkJCQkvKiBhdHRhY2ggdG8gc3BlY2lmaWVkIFBIWSAqLworCQkJCWlmIChwcml2LT5waHlfaWQgPT0gcGh5LT5hZGRyKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyogYXV0b3NlbGVjdCBQSFkgaWYgbm9uZSB3YXMgc3BlY2lmaWVkICovCisJCQkJaWYgKHBoeS0+YWRkciAhPSAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghcGh5KSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gUEhZIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwaHkgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHktPmRldiksICZldGhvY19tZGlvX3BvbGwsIDAsCisJCQlQSFlfSU5URVJGQUNFX01PREVfR01JSSk7CisJaWYgKElTX0VSUihwaHkpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKworCXByaXYtPnBoeSA9IHBoeTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhvY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWluX3R4ID0gMjsKKwl1bnNpZ25lZCBpbnQgbnVtX2JkOworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZXRob2NfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCWRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgVFgvUlggYnVmZmVycyAqLworCW51bV9iZCA9IChkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCArIDEpIC8gRVRIT0NfQlVGU0laOworCXByaXYtPm51bV90eCA9IG1pbihtaW5fdHgsIG51bV9iZCAvIDQpOworCXByaXYtPm51bV9yeCA9IG51bV9iZCAtIHByaXYtPm51bV90eDsKKwlldGhvY193cml0ZShwcml2LCBUWF9CRF9OVU0sIHByaXYtPm51bV90eCk7CisKKwlldGhvY19pbml0X3JpbmcocHJpdik7CisJZXRob2NfcmVzZXQocHJpdik7CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiIHJlc3VtaW5nIHF1ZXVlXG4iKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0gZWxzZSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiIHN0YXJ0aW5nIHF1ZXVlXG4iKTsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwl9CisKKwlwaHlfc3RhcnQocHJpdi0+cGh5KTsKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisKKwlpZiAobmV0aWZfbXNnX2lmdXAocHJpdikpIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiSS9POiAlMDhseCBNZW1vcnk6ICUwOGx4LSUwOGx4XG4iLAorCQkJCWRldi0+YmFzZV9hZGRyLCBkZXYtPm1lbV9zdGFydCwgZGV2LT5tZW1fZW5kKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhvY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CisKKwlpZiAocHJpdi0+cGh5KQorCQlwaHlfc3RvcChwcml2LT5waHkpOworCisJZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgocHJpdik7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1kaW8gPSBpZl9taWkoaWZyKTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ID0gTlVMTDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbWQgIT0gU0lPQ0dNSUlQSFkpIHsKKwkJaWYgKG1kaW8tPnBoeV9pZCA+PSBQSFlfTUFYX0FERFIpCisJCQlyZXR1cm4gLUVSQU5HRTsKKworCQlwaHkgPSBwcml2LT5tZGlvLT5waHlfbWFwW21kaW8tPnBoeV9pZF07CisJCWlmICghcGh5KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJcGh5ID0gcHJpdi0+cGh5OworCX0KKworCXJldHVybiBwaHlfbWlpX2lvY3RsKHBoeSwgbWRpbywgY21kKTsKK30KKworc3RhdGljIGludCBldGhvY19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgZXRob2Nfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCAqbWFjID0gKHU4ICopYWRkcjsKKworCWV0aG9jX3dyaXRlKHByaXYsIE1BQ19BRERSMCwgKG1hY1syXSA8PCAyNCkgfCAobWFjWzNdIDw8IDE2KSB8CisJCQkJICAgICAobWFjWzRdIDw8ICA4KSB8IChtYWNbNV0gPDwgIDApKTsKKwlldGhvY193cml0ZShwcml2LCBNQUNfQUREUjEsIChtYWNbMF0gPDwgIDgpIHwgKG1hY1sxXSA8PCAgMCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIG1vZGUgPSBldGhvY19yZWFkKHByaXYsIE1PREVSKTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gTlVMTDsKKwl1MzIgaGFzaFsyXSA9IHsgMCwgMCB9OworCisJLyogc2V0IGxvb3BiYWNrIG1vZGUgaWYgcmVxdWVzdGVkICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spCisJCW1vZGUgfD0gIE1PREVSX0xPT1A7CisJZWxzZQorCQltb2RlICY9IH5NT0RFUl9MT09QOworCisJLyogcmVjZWl2ZSBicm9hZGNhc3QgZnJhbWVzIGlmIHJlcXVlc3RlZCAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKKwkJbW9kZSAmPSB+TU9ERVJfQlJPOworCWVsc2UKKwkJbW9kZSB8PSAgTU9ERVJfQlJPOworCisJLyogZW5hYmxlIHByb21pc2N1b3VzIG1vZGUgaWYgcmVxdWVzdGVkICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJbW9kZSB8PSAgTU9ERVJfUFJPOworCWVsc2UKKwkJbW9kZSAmPSB+TU9ERVJfUFJPOworCisJZXRob2Nfd3JpdGUocHJpdiwgTU9ERVIsIG1vZGUpOworCisJLyogcmVjZWl2ZSBtdWx0aWNhc3QgZnJhbWVzICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJaGFzaFswXSA9IDB4ZmZmZmZmZmY7CisJCWhhc2hbMV0gPSAweGZmZmZmZmZmOworCX0gZWxzZSB7CisJCWZvciAobWMgPSBkZXYtPm1jX2xpc3Q7IG1jOyBtYyA9IG1jLT5uZXh0KSB7CisJCQl1MzIgY3JjID0gZXRoZXJfY3JjKG1jLT5kbWlfYWRkcmxlbiwgbWMtPmRtaV9hZGRyKTsKKwkJCWludCBiaXQgPSAoY3JjID4+IDI2KSAmIDB4M2Y7CisJCQloYXNoW2JpdCA+PiA1XSB8PSAxIDw8IChiaXQgJiAweDFmKTsKKwkJfQorCX0KKworCWV0aG9jX3dyaXRlKHByaXYsIEVUSF9IQVNIMCwgaGFzaFswXSk7CisJZXRob2Nfd3JpdGUocHJpdiwgRVRIX0hBU0gxLCBoYXNoWzFdKTsKK30KKworc3RhdGljIGludCBldGhvY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgdm9pZCBldGhvY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcGVuZGluZyA9IGV0aG9jX3JlYWQocHJpdiwgSU5UX1NPVVJDRSk7CisJaWYgKGxpa2VseShwZW5kaW5nKSkKKwkJZXRob2NfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmV0aG9jX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gJnByaXYtPnN0YXRzOworfQorCitzdGF0aWMgaW50IGV0aG9jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGhvY19iZCBiZDsKKwl1bnNpZ25lZCBpbnQgZW50cnk7CisJdm9pZCAqZGVzdDsKKworCWlmICh1bmxpa2VseShza2ItPmxlbiA+IEVUSE9DX0JVRlNJWikpIHsKKwkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJZW50cnkgPSBwcml2LT5jdXJfdHggJSBwcml2LT5udW1fdHg7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcHJpdi0+Y3VyX3R4Kys7CisKKwlldGhvY19yZWFkX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCWlmICh1bmxpa2VseShza2ItPmxlbiA8IEVUSE9DX1pMRU4pKQorCQliZC5zdGF0IHw9ICBUWF9CRF9QQUQ7CisJZWxzZQorCQliZC5zdGF0ICY9IH5UWF9CRF9QQUQ7CisKKwlkZXN0ID0gcHJpdi0+bWVtYmFzZSArIGJkLmFkZHI7CisJbWVtY3B5X3RvaW8oZGVzdCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwliZC5zdGF0ICY9IH4oVFhfQkRfU1RBVFMgfCBUWF9CRF9MRU5fTUFTSyk7CisJYmQuc3RhdCB8PSBUWF9CRF9MRU4oc2tiLT5sZW4pOworCWV0aG9jX3dyaXRlX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCisJYmQuc3RhdCB8PSBUWF9CRF9SRUFEWTsKKwlldGhvY193cml0ZV9iZChwcml2LCBlbnRyeSwgJmJkKTsKKworCWlmIChwcml2LT5jdXJfdHggPT0gKHByaXYtPmR0eV90eCArIHByaXYtPm51bV90eCkpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJzdG9wcGluZyBxdWV1ZVxuIik7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXRob2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBldGhvY19vcGVuLAorCS5uZG9fc3RvcCA9IGV0aG9jX3N0b3AsCisJLm5kb19kb19pb2N0bCA9IGV0aG9jX2lvY3RsLAorCS5uZG9fc2V0X2NvbmZpZyA9IGV0aG9jX2NvbmZpZywKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGV0aG9jX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGV0aG9jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgPSBldGhvY19jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCA9IGV0aG9jX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgPSBldGhvY19zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQgPSBldGhvY19zdGFydF94bWl0LAorfTsKKworLyoqCisgKiBldGhvY19wcm9iZSgpIC0gaW5pdGlhbGl6ZSBPcGVuQ29yZXMgZXRoZXJuZXQgTUFDCisgKiBwZGV2OglwbGF0Zm9ybSBkZXZpY2UKKyAqLworc3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1taW8gPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gTlVMTDsKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBOVUxMOworCXVuc2lnbmVkIGludCBwaHk7CisJaW50IHJldCA9IDA7CisKKwkvKiBhbGxvY2F0ZSBuZXR3b3JraW5nIGRldmljZSAqLworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZXRob2MpKTsKKwlpZiAoIW5ldGRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CisKKwkvKiBvYnRhaW4gSS9PIG1lbW9yeSBzcGFjZSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBJL08gbWVtb3J5IHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZyZWU7CisJfQorCisJbW1pbyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCByZXMtPm5hbWUpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZnJlZTsKKwl9CisKKwluZXRkZXYtPmJhc2VfYWRkciA9IG1taW8tPnN0YXJ0OworCisJLyogb2J0YWluIGJ1ZmZlciBtZW1vcnkgc3BhY2UgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gbWVtb3J5IHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZyZWU7CisJfQorCisJbWVtID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIHJlcy0+bmFtZSk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgbWVtb3J5IHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZyZWU7CisJfQorCisJbmV0ZGV2LT5tZW1fc3RhcnQgPSBtZW0tPnN0YXJ0OworCW5ldGRldi0+bWVtX2VuZCAgID0gbWVtLT5lbmQ7CisKKwkvKiBvYnRhaW4gZGV2aWNlIElSUSBudW1iZXIgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gSVJRXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZyZWU7CisJfQorCisJbmV0ZGV2LT5pcnEgPSByZXMtPnN0YXJ0OworCisJLyogc2V0dXAgZHJpdmVyLXByaXZhdGUgZGF0YSAqLworCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXByaXYtPm5ldGRldiA9IG5ldGRldjsKKworCXByaXYtPmlvYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIG5ldGRldi0+YmFzZV9hZGRyLAorCQkJbW1pby0+ZW5kIC0gbW1pby0+c3RhcnQgKyAxKTsKKwlpZiAoIXByaXYtPmlvYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSS9PIG1lbW9yeSBzcGFjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwcml2LT5tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgbmV0ZGV2LT5tZW1fc3RhcnQsCisJCQltZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxKTsKKwlpZiAoIXByaXYtPm1lbWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIG1lbW9yeSBzcGFjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBbGxvdyB0aGUgcGxhdGZvcm0gc2V0dXAgY29kZSB0byBwYXNzIGluIGEgTUFDIGFkZHJlc3MuICovCisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXN0cnVjdCBldGhvY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCQkoc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIHBkYXRhLT5od2FkZHIsIElGSFdBRERSTEVOKTsKKwkJcHJpdi0+cGh5X2lkID0gcGRhdGEtPnBoeV9pZDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSBnaXZlbiBNQUMgYWRkcmVzcyBpcyB2YWxpZC4gSWYgaXQgaXNuJ3QsIHJlYWQgdGhlCisJICogY3VycmVudCBNQUMgZnJvbSB0aGUgY29udHJvbGxlci4gKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcikpCisJCWV0aG9jX2dldF9tYWNfYWRkcmVzcyhuZXRkZXYsIG5ldGRldi0+ZGV2X2FkZHIpOworCisJLyogQ2hlY2sgdGhlIE1BQyBhZ2FpbiBmb3IgdmFsaWRpdHksIGlmIGl0IHN0aWxsIGlzbid0IGNob29zZSBhbmQKKwkgKiBwcm9ncmFtIGEgcmFuZG9tIG9uZS4gKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcikpCisJCXJhbmRvbV9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpOworCisJZXRob2Nfc2V0X21hY19hZGRyZXNzKG5ldGRldiwgbmV0ZGV2LT5kZXZfYWRkcik7CisKKwkvKiByZWdpc3RlciBNSUkgYnVzICovCisJcHJpdi0+bWRpbyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoIXByaXYtPm1kaW8pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlOworCX0KKworCXByaXYtPm1kaW8tPm5hbWUgPSAiZXRob2MtbWRpbyI7CisJc25wcmludGYocHJpdi0+bWRpby0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVzLSVkIiwKKwkJCXByaXYtPm1kaW8tPm5hbWUsIHBkZXYtPmlkKTsKKwlwcml2LT5tZGlvLT5yZWFkID0gZXRob2NfbWRpb19yZWFkOworCXByaXYtPm1kaW8tPndyaXRlID0gZXRob2NfbWRpb193cml0ZTsKKwlwcml2LT5tZGlvLT5yZXNldCA9IGV0aG9jX21kaW9fcmVzZXQ7CisJcHJpdi0+bWRpby0+cHJpdiA9IHByaXY7CisKKwlwcml2LT5tZGlvLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPm1kaW8tPmlycSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfbWRpbzsKKwl9CisKKwlmb3IgKHBoeSA9IDA7IHBoeSA8IFBIWV9NQVhfQUREUjsgcGh5KyspCisJCXByaXYtPm1kaW8tPmlycVtwaHldID0gUEhZX1BPTEw7CisKKwlyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtPm1kaW8pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXNcbiIpOworCQlnb3RvIGZyZWVfbWRpbzsKKwl9CisKKwlyZXQgPSBldGhvY19tZGlvX3Byb2JlKG5ldGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0byBwcm9iZSBNRElPIGJ1c1xuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXRoZXJfc2V0dXAobmV0ZGV2KTsKKworCS8qIHNldHVwIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZSAqLworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZldGhvY19uZXRkZXZfb3BzOworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhPQ19USU1FT1VUOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gMDsKKworCS8qIHNldHVwIE5BUEkgKi8KKwltZW1zZXQoJnByaXYtPm5hcGksIDAsIHNpemVvZihwcml2LT5uYXBpKSk7CisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmcHJpdi0+bmFwaSwgZXRob2NfcG9sbCwgNjQpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGludGVyZmFjZVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZ290byBvdXQ7CisKK2Vycm9yOgorCW1kaW9idXNfdW5yZWdpc3Rlcihwcml2LT5tZGlvKTsKK2ZyZWVfbWRpbzoKKwlrZnJlZShwcml2LT5tZGlvLT5pcnEpOworCW1kaW9idXNfZnJlZShwcml2LT5tZGlvKTsKK2ZyZWU6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGV0aG9jX3JlbW92ZSgpIC0gc2h1dGRvd24gT3BlbkNvcmVzIGV0aGVybmV0IE1BQworICogQHBkZXY6CXBsYXRmb3JtIGRldmljZQorICovCitzdGF0aWMgaW50IGV0aG9jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpZiAobmV0ZGV2KSB7CisJCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeSk7CisJCXByaXYtPnBoeSA9IE5VTEw7CisKKwkJaWYgKHByaXYtPm1kaW8pIHsKKwkJCW1kaW9idXNfdW5yZWdpc3Rlcihwcml2LT5tZGlvKTsKKwkJCWtmcmVlKHByaXYtPm1kaW8tPmlycSk7CisJCQltZGlvYnVzX2ZyZWUocHJpdi0+bWRpbyk7CisJCX0KKworCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCQlmcmVlX25ldGRldihuZXRkZXYpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGV0aG9jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IGV0aG9jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAtRU5PU1lTOworfQorI2Vsc2UKKyMgZGVmaW5lIGV0aG9jX3N1c3BlbmQgTlVMTAorIyBkZWZpbmUgZXRob2NfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXRob2NfZHJpdmVyID0geworCS5wcm9iZSAgID0gZXRob2NfcHJvYmUsCisJLnJlbW92ZSAgPSBldGhvY19yZW1vdmUsCisJLnN1c3BlbmQgPSBldGhvY19zdXNwZW5kLAorCS5yZXN1bWUgID0gZXRob2NfcmVzdW1lLAorCS5kcml2ZXIgID0geworCQkubmFtZSA9ICJldGhvYyIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV0aG9jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZldGhvY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXRob2NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZldGhvY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChldGhvY19pbml0KTsKK21vZHVsZV9leGl0KGV0aG9jX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAYXZpb25pYy1kZXNpZ24uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9wZW5Db3JlcyBFdGhlcm5ldCBNQUMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V3cmszLmMgYi9kcml2ZXJzL25ldC9ld3JrMy5jCmluZGV4IGI4NTIzMDMuLjFhNjg1YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V3cmszLmMKKysrIGIvZHJpdmVycy9uZXQvZXdyazMuYwpAQCAtMzg4LDYgKzM4OCwxOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXdyazNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZXdyazNfb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZXdyazNfcXVldWVfcGt0LAorCS5uZG9fc3RvcAkJPSBld3JrM19jbG9zZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2RvX2lvY3RsCQk9IGV3cmszX2lvY3RsLAorCS5uZG9fdHhfdGltZW91dAkJPSBld3JrM190aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdAogZXdyazNfaHdfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2xvbmcgaW9iYXNlKQogewpAQCAtNjAzLDE2ICs2MTUsMTEgQEAKIAkJcHJpbnRrKHZlcnNpb24pOwogCX0KIAkvKiBUaGUgRVdSSzMtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSBld3JrM19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZXdyazNfcXVldWVfcGt0OwotCWRldi0+c3RvcCA9IGV3cmszX2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwgPSBld3JrM19pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZXdyazNfbmV0ZGV2X29wczsKIAlpZiAobHAtPmFkYXB0ZXJfbmFtZVs0XSA9PSAnMycpCiAJCVNFVF9FVEhUT09MX09QUyhkZXYsICZldGh0b29sX29wc18yMDMpOwogCWVsc2UKIAkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBld3JrM190aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBRVUVVRV9QS1RfVElNRU9VVDsKIAogCWRldi0+bWVtX3N0YXJ0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKaW5kZXggZGFmNzI3MmMuLjg5MWJlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCkBAIC05Myw4ICs5Myw4IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICJcbiI7CiAKIAogLyogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gdXNlIFBDSSBtZW1vcnkgc3BhY2UsIGhvd2V2ZXIgc29tZSB4ODYgc3lzdGVtcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCAyNzY5MDgzLi5hNTE1YWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtMzYsNDYgKzM2LDMyIEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCisjaWZuZGVmIENPTkZJR19BUkNIX01YQwogI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9tY2ZzaW0uaD4KLSNpbmNsdWRlICJmZWMuaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZFQzIpCi0jZGVmaW5lCUZFQ19NQVhfUE9SVFMJMgotI2Vsc2UKLSNkZWZpbmUJRkVDX01BWF9QT1JUUwkxCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQotI2RlZmluZSBIQVZFX21paV9saW5rX2ludGVycnVwdAorI2luY2x1ZGUgImZlYy5oIgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2RlZmluZSBGRUNfQUxJR05NRU5UCTB4ZgorI2Vsc2UKKyNkZWZpbmUgRkVDX0FMSUdOTUVOVAkweDMKICNlbmRpZgogCiAvKgogICogRGVmaW5lIHRoZSBmaXhlZCBhZGRyZXNzIG9mIHRoZSBGRUMgaGFyZHdhcmUuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVjX2h3W10gPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpCi0JKE1DRl9NQkFSICsgMHg4NDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyN3gpCi0JKE1DRl9NQkFSICsgMHgxMDAwKSwKLQkoTUNGX01CQVIgKyAweDE4MDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KQotCShNQ0ZfTUJBUiArIDB4MTAwMCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIweCkKLQkoTUNGX01CQVIrMHgzMDAwMCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTMyeCkKLQkoTUNGX01CQVIrMHhmYzAzMDAwMCksCi0jZWxzZQotCSYoKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY3BtLmNwX2ZlYyksCi0jZW5kaWYKLX07CisjZGVmaW5lIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyCWZlY19tYWNfZGVmYXVsdFtdID0gewogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC05OCw2ICs4NCw3IEBACiAjZWxzZQogI2RlZmluZQlGRUNfRkxBU0hNQUMJMAogI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX001MjcyICovCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIHNvbWUgc3RydWN0dXJlcyB0byBzdXBwb3J0IGRpZmZlcmVudCBQSFlzCiAqLwpAQCAtMTYyLDcgKzE0OSw3IEBACiAgKiBhY2NvdW50IHdoZW4gc2V0dGluZyBpdC4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUzMngpCisgICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YQykKICNkZWZpbmUJT1BUX0ZSQU1FX1NJWkUJKFBLVF9NQVhCVUZfU0laRSA8PCAxNikKICNlbHNlCiAjZGVmaW5lCU9QVF9GUkFNRV9TSVpFCTAKQEAgLTE4Miw2ICsxNjksOCBAQAogCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAorCXN0cnVjdCBjbGsgKmNsazsKKwogCS8qIFRoZSBzYXZlZCBhZGRyZXNzIG9mIGEgc2VudC1pbi1wbGFjZSBwYWNrZXQvYnVmZmVyLCBmb3Igc2tmcmVlKCkuICovCiAJdW5zaWduZWQgY2hhciAqdHhfYm91bmNlW1RYX1JJTkdfU0laRV07CiAJc3RydWN0CXNrX2J1ZmYqIHR4X3NrYnVmZltUWF9SSU5HX1NJWkVdOwpAQCAtMTkwLDYgKzE3OSw3IEBACiAKIAkvKiBDUE0gZHVhbCBwb3J0IFJBTSByZWxhdGl2ZSBhZGRyZXNzZXMuCiAJKi8KKwlkbWFfYWRkcl90CWJkX2RtYTsKIAljYmRfdAkqcnhfYmRfYmFzZTsJCS8qIEFkZHJlc3Mgb2YgUnggYW5kIFR4IGJ1ZmZlcnMuICovCiAJY2JkX3QJKnR4X2JkX2Jhc2U7CiAJY2JkX3QJKmN1cl9yeCwgKmN1cl90eDsJCS8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSAqLwpAQCAtMzQyLDEwICszMzIsMTAgQEAKIAkgKgk0LWJ5dGUgYm91bmRhcmllcy4gVXNlIGJvdW5jZSBidWZmZXJzIHRvIGNvcHkgZGF0YQogCSAqCWFuZCBnZXQgaXQgYWxpZ25lZC4gVWdoLgogCSAqLwotCWlmIChiZHAtPmNiZF9idWZhZGRyICYgMHgzKSB7CisJaWYgKGJkcC0+Y2JkX2J1ZmFkZHIgJiBGRUNfQUxJR05NRU5UKSB7CiAJCXVuc2lnbmVkIGludCBpbmRleDsKIAkJaW5kZXggPSBiZHAgLSBmZXAtPnR4X2JkX2Jhc2U7Ci0JCW1lbWNweShmZXAtPnR4X2JvdW5jZVtpbmRleF0sICh2b2lkICopIGJkcC0+Y2JkX2J1ZmFkZHIsIGJkcC0+Y2JkX2RhdGxlbik7CisJCW1lbWNweShmZXAtPnR4X2JvdW5jZVtpbmRleF0sICh2b2lkICopc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJCWJkcC0+Y2JkX2J1ZmFkZHIgPSBfX3BhKGZlcC0+dHhfYm91bmNlW2luZGV4XSk7CiAJfQogCkBAIC0zNTksOCArMzQ5LDggQEAKIAkvKiBQdXNoIHRoZSBkYXRhIGNhY2hlIHNvIHRoZSBDUE0gZG9lcyBub3QgZ2V0IHN0YWxlIG1lbW9yeQogCSAqIGRhdGEuCiAJICovCi0JZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSArIHNrYi0+bGVuKTsKKwlkbWFfc3luY19zaW5nbGUoTlVMTCwgYmRwLT5jYmRfYnVmYWRkciwKKwkJCWJkcC0+Y2JkX2RhdGxlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAkvKiBTZW5kIGl0IG9uIGl0cyB3YXkuICBUZWxsIEZFQyBpdCdzIHJlYWR5LCBpbnRlcnJ1cHQgd2hlbiBkb25lLAogCSAqIGl0J3MgdGhlIGxhc3QgQkQgb2YgdGhlIGZyYW1lLCBhbmQgdG8gcHV0IHRoZSBDUkMgb24gdGhlIGVuZC4KQEAgLTYzMyw2ICs2MjMsOSBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAlkYXRhID0gKF9fdTgqKV9fdmEoYmRwLT5jYmRfYnVmYWRkcik7CiAKKwlkbWFfc3luY19zaW5nbGUoTlVMTCwgKHVuc2lnbmVkIGxvbmcpX19wYShkYXRhKSwKKwkJCXBrdF9sZW4gLSA0LCBETUFfRlJPTV9ERVZJQ0UpOworCiAJLyogVGhpcyBkb2VzIDE2IGJ5dGUgYWxpZ25tZW50LCBleGFjdGx5IHdoYXQgd2UgbmVlZC4KIAkgKiBUaGUgcGFja2V0IGxlbmd0aCBpbmNsdWRlcyBGQ1MsIGJ1dCB3ZSBkb24ndCB3YW50IHRvCiAJICogaW5jbHVkZSB0aGF0IHdoZW4gcGFzc2luZyB1cHN0cmVhbSBhcyBpdCBtZXNzZXMgdXAKQEAgLTExMTQsNyArMTEwNyw3IEBACiAvKiByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIDg3MjEgKi8KIAogI2RlZmluZSBNSUlfS1M4NzIxQkxfUlhFUkNSCTIxCi0jZGVmaW5lIE1JSV9LUzg3MjFCTF9JQ1NSCTIyCisjZGVmaW5lIE1JSV9LUzg3MjFCTF9JQ1NSCTI3CiAjZGVmaW5lCU1JSV9LUzg3MjFCTF9QSFlDUgkzMQogCiBzdGF0aWMgcGh5X2NtZF90IGNvbnN0IHBoeV9jbWRfa3M4NzIxYmxfY29uZmlnW10gPSB7CkBAIC0xMjIzLDU4ICsxMjE2LDMyIEBACiAjaWZkZWYgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKIHN0YXRpYyBpcnFyZXR1cm5fdAogbWlpX2xpbmtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBkZXZfaWQpOwotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKIC8qCi0gKglDb2RlIHNwZWNpZmljIHRvIENvbGRmaXJlIDUyNzIgc2V0dXAuCisgKglUaGlzIGlzIHNwZWNpZmljIHRvIHRoZSBNSUkgaW50ZXJydXB0IHNldHVwIG9mIHRoZSBNNTI3MkVWQi4KICAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9pbnRycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9taWlfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChyZXF1ZXN0X2lycSg2NiwgbWlpX2xpbmtfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiZmVjKE1JSSkiLCBkZXYpICE9IDApCisJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgZmVjKE1JSSkgSVJRKDY2KSFcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaWNycDsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCQlpcnFfaGFuZGxlcl90IGhhbmRsZXI7Ci0JfSAqaWRwLCBpZFtdID0gewotCQl7ICJmZWMoUlgpIiwgODYsIGZlY19lbmV0X2ludGVycnVwdCB9LAotCQl7ICJmZWMoVFgpIiwgODcsIGZlY19lbmV0X2ludGVycnVwdCB9LAotCQl7ICJmZWMoT1RIRVIpIiwgODgsIGZlY19lbmV0X2ludGVycnVwdCB9LAotCQl7ICJmZWMoTUlJKSIsIDY2LCBtaWlfbGlua19pbnRlcnJ1cHQgfSwKLQkJeyBOVUxMIH0sCi0JfTsKKwlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOworCSppY3JwID0gMHgwODAwMDAwMDsKK30KIAotCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVycy4gKi8KLQlmb3IgKGlkcCA9IGlkOyBpZHAtPm5hbWU7IGlkcCsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShpZHAtPmlycSwgaWRwLT5oYW5kbGVyLCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsIGRldikgIT0gMCkKLQkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsIGlkcC0+bmFtZSwgaWRwLT5pcnEpOwotCX0KLQotCS8qIFVubWFzayBpbnRlcnJ1cHQgYXQgQ29sZEZpcmUgNTI3MiBTSU0gKi8KLQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjMpOwotCSppY3JwID0gMHgwMDAwMGRkZDsKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7CisJLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLwogCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7CiAJKmljcnAgPSAweDBkMDAwMDAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7Ci0JZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOwotCi0JLyoKLQkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKLQkgKiBTZWUgNTI3MiBtYW51YWwgc2VjdGlvbiAxMS41Ljg6IE1TQ1IKLQkgKi8KLQlmZXAtPnBoeV9zcGVlZCA9ICgoKChNQ0ZfQ0xLIC8gNCkgLyAoMjUwMDAwMCAvIDEwKSkgKyA1KSAvIDEwKSAqIDI7Ci0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwotCi0JZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLX0KLQorI2lmZGVmIENPTkZJR19NNTI3Mgogc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTMwNyw1NDkgKzEyNzQsNiBAQAogCWlmIChpYXAgPT0gZmVjX21hY19kZWZhdWx0KQogCQkgZGV2LT5kZXZfYWRkcltFVEhfQUxFTi0xXSA9IGZlY19tYWNfZGVmYXVsdFtFVEhfQUxFTi0xXSArIGZlcC0+aW5kZXg7CiB9Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaWNycDsKLQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOwotCSppY3JwID0gMHgwODAwMDAwMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaWNycDsKLQkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCi0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKLQkqaWNycCA9IDB4MGQwMDAwMDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2xvY2FsaHdfc2V0dXAodm9pZCkKLXsKLX0KLQotLyoKLSAqCURvIG5vdCBuZWVkIHRvIG1ha2UgcmVnaW9uIHVuY2FjaGVkIG9uIDUyNzIuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3VuY2FjaGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpCi0KLS8qCi0gKglDb2RlIHNwZWNpZmljIHRvIENvbGRmaXJlIDUyMzAvNTIzMS81MjMyLzUyMzQvNTIzNSwKLSAqCXRoZSA1MjcwLzUyNzEvNTI3NC81Mjc1IGFuZCA1MjgwLzUyODIgc2V0dXBzLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFRYRikiLCAyMyB9LAotCQl7ICJmZWMoUlhGKSIsIDI3IH0sCi0JCXsgImZlYyhNSUkpIiwgMjkgfSwKLQkJeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IChmZXAtPmluZGV4KSA/IDEyOCA6IDY0OwotCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLCBkZXYpICE9IDApCi0JCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwotCX0KLQotCS8qIFVubWFzayBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIDUyODAvNTI4MiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCXsKLQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmljcnA7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICppbXJwOwotCQlpbnQgaSwgaWxpcDsKLQotCQliID0gKGZlcC0+aW5kZXgpID8gTUNGSUNNX0lOVEMxIDogTUNGSUNNX0lOVEMwOwotCQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKE1DRl9JUFNCQVIgKyBiICsKLQkJCU1DRklOVENfSUNSMCk7Ci0JCWZvciAoaSA9IDIzLCBpbGlwID0gMHgyODsgKGkgPCAzNik7IGkrKykKLQkJCWljcnBbaV0gPSBpbGlwLS07Ci0KLQkJaW1ycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgYiArCi0JCQlNQ0ZJTlRDX0lNUkgpOwotCQkqaW1ycCAmPSB+MHgwMDAwMDAwZjsKLQkJaW1ycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgYiArCi0JCQlNQ0ZJTlRDX0lNUkwpOwotCQkqaW1ycCAmPSB+MHhmZjgwMDAwMTsKLQl9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NNTI4eCkKLQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBNSUkgbGluZXMgKi8KLQl7Ci0JCXZvbGF0aWxlIHUxNiAqZ3Bpb19wYXNwYXI7Ci0JCXZvbGF0aWxlIHU4ICpncGlvX3BlaGxwYXI7Ci0KLQkJZ3Bpb19wYXNwYXIgPSAodm9sYXRpbGUgdTE2ICopIChNQ0ZfSVBTQkFSICsgMHgxMDAwNTYpOwotCQlncGlvX3BlaGxwYXIgPSAodm9sYXRpbGUgdTE2ICopIChNQ0ZfSVBTQkFSICsgMHgxMDAwNTgpOwotCQkqZ3Bpb19wYXNwYXIgfD0gMHgwZjAwOwotCQkqZ3Bpb19wZWhscGFyID0gMHhjMDsKLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX001Mjd4KQotCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIE1JSSBsaW5lcyAqLwotCXsKLQkJdm9sYXRpbGUgdTggKmdwaW9fcGFyX2ZlYzsKLQkJdm9sYXRpbGUgdTE2ICpncGlvX3Bhcl9mZWNpMmM7Ci0KLQkJZ3Bpb19wYXJfZmVjaTJjID0gKHZvbGF0aWxlIHUxNiAqKShNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOwotCQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBGRUMwIE1JSSBsaW5lcyAqLwotCQlncGlvX3Bhcl9mZWMgPSAodm9sYXRpbGUgdTggKikoTUNGX0lQU0JBUiArIDB4MTAwMDc4KTsKLQotCQkqZ3Bpb19wYXJfZmVjaTJjIHw9IDB4MGYwMDsKLQkJKmdwaW9fcGFyX2ZlYyB8PSAweGMwOwotCi0jaWYgZGVmaW5lZChDT05GSUdfRkVDMikKLQkJLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgRkVDMSBNSUkgbGluZXMgKi8KLQkJZ3Bpb19wYXJfZmVjID0gKHZvbGF0aWxlIHU4ICopKE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7Ci0KLQkJKmdwaW9fcGFyX2ZlY2kyYyB8PSAweDAwYTA7Ci0JCSpncGlvX3Bhcl9mZWMgfD0gMHhjMDsKLSNlbmRpZiAvKiBDT05GSUdfRkVDMiAqLwotCX0KLSNlbmRpZiAvKiBDT05GSUdfTTUyN3ggKi8KLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICogU2VlIDUyODIgbWFudWFsIHNlY3Rpb24gMTcuNS40Ljc6IE1TQ1IKLQkgKi8KLQlmZXAtPnBoeV9zcGVlZCA9ICgoKChNQ0ZfQ0xLIC8gMikgLyAoMjUwMDAwMCAvIDEwKSkgKyA1KSAvIDEwKSAqIDI7Ci0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwotCi0JZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCXVuc2lnbmVkIGNoYXIgKmlhcCwgdG1wYWRkcltFVEhfQUxFTl07Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0KLQlpZiAoRkVDX0ZMQVNITUFDKSB7Ci0JCS8qCi0JCSAqIEdldCBNQUMgYWRkcmVzcyBmcm9tIEZMQVNILgotCQkgKiBJZiBpdCBpcyBhbGwgMSdzIG9yIDAncywgdXNlIHRoZSBkZWZhdWx0LgotCQkgKi8KLQkJaWFwID0gRkVDX0ZMQVNITUFDOwotCQlpZiAoKGlhcFswXSA9PSAwKSAmJiAoaWFwWzFdID09IDApICYmIChpYXBbMl0gPT0gMCkgJiYKLQkJICAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgIChpYXBbM10gPT0gMHhmZikgJiYgKGlhcFs0XSA9PSAweGZmKSAmJiAoaWFwWzVdID09IDB4ZmYpKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCX0gZWxzZSB7Ci0JCSooKHVuc2lnbmVkIGxvbmcgKikgJnRtcGFkZHJbMF0pID0gZmVjcC0+ZmVjX2FkZHJfbG93OwotCQkqKCh1bnNpZ25lZCBzaG9ydCAqKSAmdG1wYWRkcls0XSkgPSAoZmVjcC0+ZmVjX2FkZHJfaGlnaCA+PiAxNik7Ci0JCWlhcCA9ICZ0bXBhZGRyWzBdOwotCX0KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBpYXAsIEVUSF9BTEVOKTsKLQotCS8qIEFkanVzdCBNQUMgaWYgdXNpbmcgZGVmYXVsdCBNQUMgYWRkcmVzcyAqLwotCWlmIChpYXAgPT0gZmVjX21hY19kZWZhdWx0KQotCQlkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZW5hYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2xvY2FsaHdfc2V0dXAodm9pZCkKLXsKLX0KLQotLyoKLSAqCURvIG5vdCBuZWVkIHRvIG1ha2UgcmVnaW9uIHVuY2FjaGVkIG9uIDUyNzIuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3VuY2FjaGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX001MjB4KQotCi0vKgotICoJQ29kZSBzcGVjaWZpYyB0byBDb2xkZmlyZSA1MjB4Ci0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOwotCWludCBiOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlc2MgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JfSAqaWRwLCBpZFtdID0gewotCQl7ICJmZWMoVFhGKSIsIDIzIH0sCi0JCXsgImZlYyhSWEYpIiwgMjcgfSwKLQkJeyAiZmVjKE1JSSkiLCAyOSB9LAotCQl7IE5VTEwgfSwKLQl9OwotCi0JZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQliID0gNjQgKyAxMzsKLQotCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVycy4gKi8KLQlmb3IgKGlkcCA9IGlkOyBpZHAtPm5hbWU7IGlkcCsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShiK2lkcC0+aXJxLCBmZWNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIGlkcC0+bmFtZSxkZXYpICE9IDApCi0JCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwotCX0KLQotCS8qIFVubWFzayBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCi0JewotCQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqaWNycDsKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgKmltcnA7Ci0KLQkJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsKLQkJCU1DRklOVENfSUNSMCk7Ci0JCWZvciAoYiA9IDM2OyAoYiA8IDQ5KTsgYisrKQotCQkJaWNycFtiXSA9IDB4MDQ7Ci0JCWltcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArCi0JCQlNQ0ZJTlRDX0lNUkgpOwotCQkqaW1ycCAmPSB+MHgwMDAxRkZGMDsKLQl9Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDKSB8PSAweGYwOwotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQ0kyQykgfD0gMHgwZjsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICogU2VlIDUyODIgbWFudWFsIHNlY3Rpb24gMTcuNS40Ljc6IE1TQ1IKLQkgKi8KLQlmZXAtPnBoeV9zcGVlZCA9ICgoKChNQ0ZfQ0xLIC8gMikgLyAoMjUwMDAwMCAvIDEwKSkgKyA1KSAvIDEwKSAqIDI7Ci0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwotCi0JZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCXVuc2lnbmVkIGNoYXIgKmlhcCwgdG1wYWRkcltFVEhfQUxFTl07Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0KLQlpZiAoRkVDX0ZMQVNITUFDKSB7Ci0JCS8qCi0JCSAqIEdldCBNQUMgYWRkcmVzcyBmcm9tIEZMQVNILgotCQkgKiBJZiBpdCBpcyBhbGwgMSdzIG9yIDAncywgdXNlIHRoZSBkZWZhdWx0LgotCQkgKi8KLQkJaWFwID0gRkVDX0ZMQVNITUFDOwotCQlpZiAoKGlhcFswXSA9PSAwKSAmJiAoaWFwWzFdID09IDApICYmIChpYXBbMl0gPT0gMCkgJiYKLQkJICAgKGlhcFszXSA9PSAwKSAmJiAoaWFwWzRdID09IDApICYmIChpYXBbNV0gPT0gMCkpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JCWlmICgoaWFwWzBdID09IDB4ZmYpICYmIChpYXBbMV0gPT0gMHhmZikgJiYgKGlhcFsyXSA9PSAweGZmKSAmJgotCQkgICAoaWFwWzNdID09IDB4ZmYpICYmIChpYXBbNF0gPT0gMHhmZikgJiYgKGlhcFs1XSA9PSAweGZmKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQl9IGVsc2UgewotCQkqKCh1bnNpZ25lZCBsb25nICopICZ0bXBhZGRyWzBdKSA9IGZlY3AtPmZlY19hZGRyX2xvdzsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgJnRtcGFkZHJbNF0pID0gKGZlY3AtPmZlY19hZGRyX2hpZ2ggPj4gMTYpOwotCQlpYXAgPSAmdG1wYWRkclswXTsKLQl9Ci0KLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgaWFwLCBFVEhfQUxFTik7Ci0KLQkvKiBBZGp1c3QgTUFDIGlmIHVzaW5nIGRlZmF1bHQgTUFDIGFkZHJlc3MgKi8KLQlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKLQkJZGV2LT5kZXZfYWRkcltFVEhfQUxFTi0xXSA9IGZlY19tYWNfZGVmYXVsdFtFVEhfQUxFTi0xXSArIGZlcC0+aW5kZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3VuY2FjaGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX001MzJ4KQotLyoKLSAqIENvZGUgc3BlY2lmaWMgZm9yIE01MzJ4Ci0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOwotCWludCBiOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlc2MgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JfSAqaWRwLCBpZFtdID0gewotCSAgICB7ICJmZWMoVFhGKSIsIDM2IH0sCi0JICAgIHsgImZlYyhSWEYpIiwgNDAgfSwKLQkgICAgeyAiZmVjKE1JSSkiLCA0MiB9LAotCSAgICB7IE5VTEwgfSwKLQl9OwotCi0JZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQliID0gKGZlcC0+aW5kZXgpID8gMTI4IDogNjQ7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwKLQkJCQlpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwotCX0KLQotCS8qIFVubWFzayBpbnRlcnJ1cHRzICovCi0JTUNGX0lOVEMwX0lDUjM2ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1IzNyA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSMzggPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjM5ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MCA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDEgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQyID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MyA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDQgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ1ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0NiA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDcgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ4ID0gMHgyOwotCi0JTUNGX0lOVEMwX0lNUkggJj0gfigKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM2IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM3IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM4IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM5IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQwIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQxIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQyIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQzIHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ0IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ1IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ2IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ3IHwKLQkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQ4ICk7Ci0KLQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBNSUkgbGluZXMgKi8KLQlNQ0ZfR1BJT19QQVJfRkVDSTJDIHw9ICgwIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURDX0VNREMgfAotCQlNQ0ZfR1BJT19QQVJfRkVDSTJDX1BBUl9NRElPX0VNRElPKTsKLQlNQ0ZfR1BJT19QQVJfRkVDID0gKDAgfAotCQlNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfN1dfRkVDIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDX01JSV9GRUMpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7Ci0JZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOwotCi0JLyoKLQkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKLQkgKi8KLQlmZXAtPnBoeV9zcGVlZCA9IChNQ0ZfQ0xLIC8gMykgLyAoMjUwMDAwMCAqIDIgKSAqIDI7Ci0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwotCi0JZmVjX3Jlc3RhcnQoZGV2LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCXVuc2lnbmVkIGNoYXIgKmlhcCwgdG1wYWRkcltFVEhfQUxFTl07Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0KLQlpZiAoRkVDX0ZMQVNITUFDKSB7Ci0JCS8qCi0JCSAqIEdldCBNQUMgYWRkcmVzcyBmcm9tIEZMQVNILgotCQkgKiBJZiBpdCBpcyBhbGwgMSdzIG9yIDAncywgdXNlIHRoZSBkZWZhdWx0LgotCQkgKi8KLQkJaWFwID0gRkVDX0ZMQVNITUFDOwotCQlpZiAoKGlhcFswXSA9PSAwKSAmJiAoaWFwWzFdID09IDApICYmIChpYXBbMl0gPT0gMCkgJiYKLQkJICAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgIChpYXBbM10gPT0gMHhmZikgJiYgKGlhcFs0XSA9PSAweGZmKSAmJiAoaWFwWzVdID09IDB4ZmYpKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCX0gZWxzZSB7Ci0JCSooKHVuc2lnbmVkIGxvbmcgKikgJnRtcGFkZHJbMF0pID0gZmVjcC0+ZmVjX2FkZHJfbG93OwotCQkqKCh1bnNpZ25lZCBzaG9ydCAqKSAmdG1wYWRkcls0XSkgPSAoZmVjcC0+ZmVjX2FkZHJfaGlnaCA+PiAxNik7Ci0JCWlhcCA9ICZ0bXBhZGRyWzBdOwotCX0KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBpYXAsIEVUSF9BTEVOKTsKLQotCS8qIEFkanVzdCBNQUMgaWYgdXNpbmcgZGVmYXVsdCBNQUMgYWRkcmVzcyAqLwotCWlmIChpYXAgPT0gZmVjX21hY19kZWZhdWx0KQotCQlkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZW5hYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2xvY2FsaHdfc2V0dXAodm9pZCkKLXsKLX0KLQotLyoKLSAqCURvIG5vdCBuZWVkIHRvIG1ha2UgcmVnaW9uIHVuY2FjaGVkIG9uIDUzMnguCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3VuY2FjaGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotI2Vsc2UKLQotLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gdGhlIE1QQzg2MFQgc2V0dXAuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcDsKLQotCWltbWFwID0gKGltbWFwX3QgKilJTUFQX0FERFI7CS8qIHBvaW50ZXIgdG8gaW50ZXJuYWwgcmVnaXN0ZXJzICovCi0KLQlpZiAocmVxdWVzdF84eHhpcnEoRkVDX0lOVEVSUlVQVCwgZmVjX2VuZXRfaW50ZXJydXB0LCAwLCAiZmVjIiwgZGV2KSAhPSAwKQotCQlwYW5pYygiQ291bGQgbm90IGFsbG9jYXRlIEZFQyBJUlEhIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQliZF90ICpiZDsKLQotCWJkID0gKGJkX3QgKilfX3JlczsKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYmQtPmJpX2VuZXRhZGRyLCBFVEhfQUxFTik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQlleHRlcm4gdWludCBfZ2V0X0lNTVIodm9pZCk7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXA7Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JaW1tYXAgPSAoaW1tYXBfdCAqKUlNQVBfQUREUjsJLyogcG9pbnRlciB0byBpbnRlcm5hbCByZWdpc3RlcnMgKi8KLQotCS8qIENvbmZpZ3VyZSBhbGwgb2YgcG9ydCBEIGZvciBNSUkuCi0JKi8KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZHBhciA9IDB4MWZmZjsKLQotCS8qIEJpdHMgbW92ZWQgZnJvbSBSZXYuIEQgb253YXJkLgotCSovCi0JaWYgKChfZ2V0X0lNTVIoKSAmIDB4ZmZmZikgPCAweDA1MDEpCi0JCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BkZGlyID0gMHgxYzU4OwkvKiBQcmUgcmV2LiBEICovCi0JZWxzZQotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciA9IDB4MWZmZjsJLyogUmV2LiBEIGFuZCBsYXRlciAqLwotCi0JLyogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JKi8KLQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQgPQotCQkoKGJkLT5iaV9idXNmcmVxICogMTAwMDAwMCkgLyAyNTAwMDAwKSAmIDB4N2U7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JLyogRW5hYmxlIE1JSSBjb21tYW5kIGZpbmlzaGVkIGludGVycnVwdAotCSovCi0JZmVjcC0+ZmVjX2l2ZWMgPSAoRkVDX0lOVEVSUlVQVC8yKSA8PCAyOTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfbG9jYWxod19zZXR1cCh2b2lkKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2hhc2ggPSBQS1RfTUFYQlVGX1NJWkU7Ci0JLyogRW5hYmxlIGJpZyBlbmRpYW4gYW5kIGRvbid0IGNhcmUgYWJvdXQgU0RNQSBGQy4KLQkqLwotCWZlY3AtPmZlY19mdW5fY29kZSA9IDB4NzgwMDAwMDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3VuY2FjaGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXB0ZV90ICpwdGU7Ci0JcHRlID0gdmFfdG9fcHRlKG1lbV9hZGRyKTsKLQlwdGVfdmFsKCpwdGUpIHw9IF9QQUdFX05PX0NBQ0hFOwotCWZsdXNoX3RsYl9wYWdlKGluaXRfbW0ubW1hcCwgbWVtX2FkZHIpOwotfQotCiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjA1NSw3ICsxNDc5LDkgQEAKIAkJcHJpbnRrKCJGRUM6IE5vIFBIWSBkZXZpY2UgZm91bmQuXG4iKTsKIAkJLyogRGlzYWJsZSBleHRlcm5hbCBNSUkgaW50ZXJmYWNlICovCiAJCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZCA9IDA7CisjaWZkZWYgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKIAkJZmVjX2Rpc2FibGVfcGh5X2ludHIoKTsKKyNlbmRpZgogCX0KIH0KIApAQCAtMjIzNywxMiArMTY2MywxMiBAQAogCiB9CiAKLS8qIEluaXRpYWxpemUgdGhlIEZFQyBFdGhlcm5ldCBvbiA4NjBUIChvciBDb2xkRmlyZSA1MjcyKS4KLSAqLwogIC8qCiAgICogWFhYOiAgV2UgbmVlZCB0byBjbGVhbiB1cCBvbiBmYWlsdXJlIGV4aXRzIGhlcmUuCisgICoKKyAgKiBpbmRleCBpcyBvbmx5IHVzZWQgaW4gbGVnYWN5IGNvZGUKICAgKi8KLWludCBfX2luaXQgZmVjX2VuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IF9faW5pdCBmZWNfZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nCW1lbV9hZGRyOwpAQCAtMjI1MCwxNSArMTY3NiwxMSBAQAogCWNiZF90CQkqY2JkX2Jhc2U7CiAJdm9sYXRpbGUgZmVjX3QJKmZlY3A7CiAJaW50IAkJaSwgajsKLQlzdGF0aWMgaW50CWluZGV4ID0gMDsKLQotCS8qIE9ubHkgYWxsb3cgdXMgdG8gYmUgcHJvYmVkIG9uY2UuICovCi0JaWYgKGluZGV4ID49IEZFQ19NQVhfUE9SVFMpCi0JCXJldHVybiAtRU5YSU87CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlciBkZXNjcmlwdG9ycy4KIAkqLwotCW1lbV9hZGRyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCW1lbV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwKKwkJCSZmZXAtPmJkX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1lbV9hZGRyID09IDApIHsKIAkJcHJpbnRrKCJGRUM6IGFsbG9jYXRlIGRlc2NyaXB0b3IgbWVtb3J5IGZhaWxlZD9cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIyNjksNyArMTY5MSw3IEBACiAKIAkvKiBDcmVhdGUgYW4gRXRoZXJuZXQgZGV2aWNlIGluc3RhbmNlLgogCSovCi0JZmVjcCA9ICh2b2xhdGlsZSBmZWNfdCAqKSBmZWNfaHdbaW5kZXhdOworCWZlY3AgPSAodm9sYXRpbGUgZmVjX3QgKilkZXYtPmJhc2VfYWRkcjsKIAogCWZlcC0+aW5kZXggPSBpbmRleDsKIAlmZXAtPmh3cCA9IGZlY3A7CkBAIC0yMjgwLDE4ICsxNzAyLDI0IEBACiAJZmVjcC0+ZmVjX2VjbnRybCA9IDE7CiAJdWRlbGF5KDEwKTsKIAotCS8qIFNldCB0aGUgRXRoZXJuZXQgYWRkcmVzcy4gIElmIHVzaW5nIG11bHRpcGxlIEVuZXRzIG9uIHRoZSA4eHgsCi0JICogdGhpcyBuZWVkcyBzb21lIHdvcmsgdG8gZ2V0IHVuaXF1ZSBhZGRyZXNzZXMuCi0JICoKLQkgKiBUaGlzIGlzIG91ciBkZWZhdWx0IE1BQyBhZGRyZXNzIHVubGVzcyB0aGUgdXNlciBjaGFuZ2VzCi0JICogaXQgdmlhIGV0aF9tYWNfYWRkciAob3VyIGRldi0+c2V0X21hY19hZGRyIGhhbmRsZXIpLgotCSAqLworCS8qIFNldCB0aGUgRXRoZXJuZXQgYWRkcmVzcyAqLworI2lmZGVmIENPTkZJR19NNTI3MgogCWZlY19nZXRfbWFjKGRldik7CisjZWxzZQorCXsKKwkJdW5zaWduZWQgbG9uZyBsOworCQlsID0gZmVjcC0+ZmVjX2FkZHJfbG93OworCQlkZXYtPmRldl9hZGRyWzBdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQlkZXYtPmRldl9hZGRyWzFdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMEZGMDAwMCkgPj4gMTYpOworCQlkZXYtPmRldl9hZGRyWzJdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMDAwRkYwMCkgPj4gOCk7CisJCWRldi0+ZGV2X2FkZHJbM10gPSAodW5zaWduZWQgY2hhcikoKGwgJiAweDAwMDAwMEZGKSA+PiAwKTsKKwkJbCA9IGZlY3AtPmZlY19hZGRyX2hpZ2g7CisJCWRldi0+ZGV2X2FkZHJbNF0gPSAodW5zaWduZWQgY2hhcikoKGwgJiAweEZGMDAwMDAwKSA+PiAyNCk7CisJCWRldi0+ZGV2X2FkZHJbNV0gPSAodW5zaWduZWQgY2hhcikoKGwgJiAweDAwRkYwMDAwKSA+PiAxNik7CisJfQorI2VuZGlmCiAKIAljYmRfYmFzZSA9IChjYmRfdCAqKW1lbV9hZGRyOwotCS8qIFhYWDogbWlzc2luZyBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlICovCi0KLQlmZWNfdW5jYWNoZShtZW1fYWRkcik7CiAKIAkvKiBTZXQgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvciBiYXNlLgogCSovCkBAIC0yMzEzLDggKzE3NDEsNiBAQAogCQltZW1fYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAkJLyogWFhYOiBtaXNzaW5nIGNoZWNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KIAotCQlmZWNfdW5jYWNoZShtZW1fYWRkcik7Ci0KIAkJLyogSW5pdGlhbGl6ZSB0aGUgQkQgZm9yIGV2ZXJ5IGZyYWdtZW50IGluIHRoZSBwYWdlLgogCQkqLwogCQlmb3IgKGo9MDsgajxGRUNfRU5FVF9SWF9GUlBQRzsgaisrKSB7CkBAIC0yMzU3LDEzICsxNzgzLDEzIEBACiAKIAkvKiBTZXQgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvciBiYXNlLgogCSovCi0JZmVjcC0+ZmVjX3JfZGVzX3N0YXJ0ID0gX19wYSgodWludCkoZmVwLT5yeF9iZF9iYXNlKSk7Ci0JZmVjcC0+ZmVjX3hfZGVzX3N0YXJ0ID0gX19wYSgodWludCkoZmVwLT50eF9iZF9iYXNlKSk7CisJZmVjcC0+ZmVjX3JfZGVzX3N0YXJ0ID0gZmVwLT5iZF9kbWE7CisJZmVjcC0+ZmVjX3hfZGVzX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZmVwLT5iZF9kbWEgKyBzaXplb2YoY2JkX3QpCisJCQkJKiBSWF9SSU5HX1NJWkU7CiAKLQkvKiBJbnN0YWxsIG91ciBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgdmFyaWVzIGRlcGVuZGluZyBvbgotCSAqIHRoZSBhcmNoaXRlY3R1cmUuCi0JKi8KLQlmZWNfcmVxdWVzdF9pbnRycyhkZXYpOworI2lmZGVmIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CisJZmVjX3JlcXVlc3RfbWlpX2ludHIoZGV2KTsKKyNlbmRpZgogCiAJZmVjcC0+ZmVjX2dycF9oYXNoX3RhYmxlX2hpZ2ggPSAwOwogCWZlY3AtPmZlY19ncnBfaGFzaF90YWJsZV9sb3cgPSAwOwpAQCAtMjM3NSw4ICsxODAxLDYgQEAKIAlmZWNwLT5mZWNfaGFzaF90YWJsZV9sb3cgPSAwOwogI2VuZGlmCiAKLQlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWZlY3A7Ci0KIAkvKiBUaGUgRkVDIEV0aGVybmV0IHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCiAJZGV2LT5vcGVuID0gZmVjX2VuZXRfb3BlbjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGZlY19lbmV0X3N0YXJ0X3htaXQ7CkBAIC0yMzkwLDcgKzE4MTQsMTYgQEAKIAltaWlfZnJlZSA9IG1paV9jbWRzOwogCiAJLyogc2V0dXAgTUlJIGludGVyZmFjZSAqLwotCWZlY19zZXRfbWlpKGRldiwgZmVwKTsKKwlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKKwlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7CisKKwkvKgorCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegorCSAqLworCWZlcC0+cGh5X3NwZWVkID0gKCgoKGNsa19nZXRfcmF0ZShmZXAtPmNsaykgLyAyICsgNDk5OTk5OSkKKwkJCQkJLyAyNTAwMDAwKSAvIDIpICYgMHgzRikgPDwgMTsKKwlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7CisJZmVjX3Jlc3RhcnQoZGV2LCAwKTsKIAogCS8qIENsZWFyIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLwogCWZlY3AtPmZlY19pZXZlbnQgPSAweGZmYzAwMDAwOwpAQCAtMjQwMyw3ICsxODM2LDYgQEAKIAlmZXAtPnBoeV9hZGRyID0gMDsKIAltaWlfcXVldWUoZGV2LCBta19taWlfcmVhZChNSUlfUkVHX1BIWUlSMSksIG1paV9kaXNjb3Zlcl9waHkpOwogCi0JaW5kZXgrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQzMCw3ICsxODYyLDYgQEAKIAkvKiBDbGVhciBhbnkgb3V0c3RhbmRpbmcgaW50ZXJydXB0LgogCSovCiAJZmVjcC0+ZmVjX2lldmVudCA9IDB4ZmZjMDAwMDA7Ci0JZmVjX2VuYWJsZV9waHlfaW50cigpOwogCiAJLyogU2V0IHN0YXRpb24gYWRkcmVzcy4KIAkqLwpAQCAtMjQ0NSwxMiArMTg3NiwxMSBAQAogCSovCiAJZmVjcC0+ZmVjX3JfYnVmZl9zaXplID0gUEtUX01BWEJMUl9TSVpFOwogCi0JZmVjX2xvY2FsaHdfc2V0dXAoKTsKLQogCS8qIFNldCByZWNlaXZlIGFuZCB0cmFuc21pdCBkZXNjcmlwdG9yIGJhc2UuCiAJKi8KLQlmZWNwLT5mZWNfcl9kZXNfc3RhcnQgPSBfX3BhKCh1aW50KShmZXAtPnJ4X2JkX2Jhc2UpKTsKLQlmZWNwLT5mZWNfeF9kZXNfc3RhcnQgPSBfX3BhKCh1aW50KShmZXAtPnR4X2JkX2Jhc2UpKTsKKwlmZWNwLT5mZWNfcl9kZXNfc3RhcnQgPSBmZXAtPmJkX2RtYTsKKwlmZWNwLT5mZWNfeF9kZXNfc3RhcnQgPSAodW5zaWduZWQgbG9uZylmZXAtPmJkX2RtYSArIHNpemVvZihjYmRfdCkKKwkJCQkqIFJYX1JJTkdfU0laRTsKIAogCWZlcC0+ZGlydHlfdHggPSBmZXAtPmN1cl90eCA9IGZlcC0+dHhfYmRfYmFzZTsKIAlmZXAtPmN1cl9yeCA9IGZlcC0+cnhfYmRfYmFzZTsKQEAgLTI1NTIsMzkgKzE5ODIsMTcxIEBACiAJLyogQ2xlYXIgb3V0c3RhbmRpbmcgTUlJIGNvbW1hbmQgaW50ZXJydXB0cy4KIAkqLwogCWZlY3AtPmZlY19pZXZlbnQgPSBGRUNfRU5FVF9NSUk7Ci0JZmVjX2VuYWJsZV9waHlfaW50cigpOwogCiAJZmVjcC0+ZmVjX2ltYXNrID0gRkVDX0VORVRfTUlJOwogCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZmVjX2VuZXRfbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0CitmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCBpLCBlcnI7CisJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwlpbnQgaSwgaXJxLCByZXQgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcjsKIAotCXByaW50aygiRkVDIEVORVQgVmVyc2lvbiAwLjJcbiIpOworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcikKKwkJcmV0dXJuIC1FTlhJTzsKIAotCWZvciAoaSA9IDA7IChpIDwgRkVDX01BWF9QT1JUUyk7IGkrKykgewotCQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUpKTsKLQkJaWYgKCFkZXYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJZXJyID0gZmVjX2VuZXRfaW5pdChkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlmcmVlX25ldGRldihkZXYpOwotCQkJY29udGludWU7CisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgcGRldi0+bmFtZSk7CisJaWYgKCFyKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogSW5pdCBuZXR3b3JrIGRldmljZSAqLworCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUpKTsKKwlpZiAoIW5kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CisKKwkvKiBzZXR1cCBib2FyZCBpbmZvIHN0cnVjdHVyZSAqLworCWZlcCA9IG5ldGRldl9wcml2KG5kZXYpOworCW1lbXNldChmZXAsIDAsIHNpemVvZigqZmVwKSk7CisKKwluZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKKworCWlmICghbmRldi0+YmFzZV9hZGRyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2lvcmVtYXA7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7CisKKwkvKiBUaGlzIGRldmljZSBoYXMgdXAgdG8gdGhyZWUgaXJxcyBvbiBzb21lIHBsYXRmb3JtcyAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKKwkJaWYgKGkgJiYgaXJxIDwgMCkKKwkJCWJyZWFrOworCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgcGRldi0+bmFtZSwgbmRldik7CisJCWlmIChyZXQpIHsKKwkJCXdoaWxlIChpID49IDApIHsKKwkJCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOworCQkJCWZyZWVfaXJxKGlycSwgbmRldik7CisJCQkJaS0tOworCQkJfQorCQkJZ290byBmYWlsZWRfaXJxOwogCQl9Ci0JCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7Ci0JCQkvKiBYWFg6IG1pc3NpbmcgY2xlYW51cCBoZXJlICovCi0JCQlmcmVlX25ldGRldihkZXYpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KKwl9CiAKLQkJcHJpbnRrKCIlczogZXRoZXJuZXQgJXBNXG4iLCBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOworCWZlcC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmVjX2NsayIpOworCWlmIChJU19FUlIoZmVwLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZmVwLT5jbGspOworCQlnb3RvIGZhaWxlZF9jbGs7CisJfQorCWNsa19lbmFibGUoZmVwLT5jbGspOworCisJcmV0ID0gZmVjX2VuZXRfaW5pdChuZGV2LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF9pbml0OworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkX3JlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZF9yZWdpc3RlcjoKK2ZhaWxlZF9pbml0OgorCWNsa19kaXNhYmxlKGZlcC0+Y2xrKTsKKwljbGtfcHV0KGZlcC0+Y2xrKTsKK2ZhaWxlZF9jbGs6CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOworCQlpZiAoaXJxID4gMCkKKwkJCWZyZWVfaXJxKGlycSwgbmRldik7CisJfQorZmFpbGVkX2lycToKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKiluZGV2LT5iYXNlX2FkZHIpOworZmFpbGVkX2lvcmVtYXA6CisJZnJlZV9uZXRkZXYobmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAorZmVjX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJZmVjX3N0b3AobmRldik7CisJY2xrX2Rpc2FibGUoZmVwLT5jbGspOworCWNsa19wdXQoZmVwLT5jbGspOworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKW5kZXYtPmJhc2VfYWRkcik7CisJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CisJZnJlZV9uZXRkZXYobmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZlY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOworCisJaWYgKG5kZXYpIHsKKwkJZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOworCQkJZmVjX3N0b3AobmRldik7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2ZlY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChuZGV2KSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCQlmZWNfZW5ldF9pbml0KG5kZXYsIDApOworCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmVjX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZSAgICA9ICJmZWMiLAorCQkub3duZXIJID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICA9IGZlY19wcm9iZSwKKwkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wKGZlY19kcnZfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IGZlY19zdXNwZW5kLAorCS5yZXN1bWUgID0gZmVjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitmZWNfZW5ldF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkZFQyBFdGhlcm5ldCBEcml2ZXJcbiIpOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZmVjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAorZmVjX2VuZXRfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmZWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2V4aXQoZmVjX2VuZXRfY2xlYW51cCk7CiBtb2R1bGVfaW5pdChmZWNfZW5ldF9tb2R1bGVfaW5pdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5oIGIvZHJpdmVycy9uZXQvZmVjLmgKaW5kZXggMjkyNzE5ZC4uNzZjNjRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmgKKysrIGIvZHJpdmVycy9uZXQvZmVjLmgKQEAgLTE0LDcgKzE0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkKKyAgICBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUzMngpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVhDKQogLyoKICAqCUp1c3QgZmlndXJlcywgTW90b3JvbGEgd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIG9mZnNldHMgZm9yCiAgKglyZWdpc3RlcnMgaW4gdGhlIHNhbWUgcGVyaXBoZXJhbCBkZXZpY2Ugb24gZGlmZmVyZW50IG1vZGVscwpAQCAtMTAzLDEyICsxMDMsMTkgQEAKIC8qCiAgKglEZWZpbmUgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLworI2lmZGVmIENPTkZJR19BUkNIX01YQwordHlwZWRlZiBzdHJ1Y3QgYnVmZGVzYyB7CisJdW5zaWduZWQgc2hvcnQgY2JkX2RhdGxlbjsJLyogRGF0YSBsZW5ndGggKi8KKwl1bnNpZ25lZCBzaG9ydCBjYmRfc2M7CS8qIENvbnRyb2wgYW5kIHN0YXR1cyBpbmZvICovCisJdW5zaWduZWQgbG9uZyBjYmRfYnVmYWRkcjsJLyogQnVmZmVyIGFkZHJlc3MgKi8KK30gY2JkX3Q7CisjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgYnVmZGVzYyB7CiAJdW5zaWduZWQgc2hvcnQJY2JkX3NjOwkJCS8qIENvbnRyb2wgYW5kIHN0YXR1cyBpbmZvICovCiAJdW5zaWduZWQgc2hvcnQJY2JkX2RhdGxlbjsJCS8qIERhdGEgbGVuZ3RoICovCiAJdW5zaWduZWQgbG9uZwljYmRfYnVmYWRkcjsJCS8qIEJ1ZmZlciBhZGRyZXNzICovCiB9IGNiZF90OwotCisjZW5kaWYKIAogLyoKICAqCVRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY291cnRlc3kgb2YgY29tbXByb2MuaCwgd2hpY2ggd2hlcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggYjgyNTFlOC4uYTg1OGM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqIERFVl9ORUVEX1RJTUVSSVJRIHdpbGwgbm90IGhhcm0geW91IG9uIHNhbmUgaGFyZHdhcmUsIG9ubHkgZ2VuZXJhdGluZyBhIGZldwogICogc3VwZXJmbHVvdXMgdGltZXIgaW50ZXJydXB0cyBmcm9tIHRoZSBuaWMuCiAgKi8KLSNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjYyIgorI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNjQiCiAjZGVmaW5lIERSVl9OQU1FCQkJImZvcmNlZGV0aCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODcsOCArODcsOCBAQAogI2RlZmluZSBERVZfSEFTX01TSV9YICAgICAgICAgICAgICAweDAwMDA4MCAgLyogZGV2aWNlIHN1cHBvcnRzIE1TSS1YICovCiAjZGVmaW5lIERFVl9IQVNfUE9XRVJfQ05UUkwgICAgICAgIDB4MDAwMTAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgcG93ZXIgc2F2aW5ncyAqLwogI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjEgICAgICAweDAwMDIwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAxICovCi0jZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMiAgICAgIDB4MDAwNDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDIgKi8KLSNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YzICAgICAgMHgwMDA4MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMyAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjIgICAgICAweDAwMDYwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAyICovCisjZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMyAgICAgIDB4MDAwZTAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDMgKi8KICNkZWZpbmUgREVWX0hBU19URVNUX0VYVEVOREVEICAgICAgMHgwMDEwMDAgIC8qIGRldmljZSBzdXBwb3J0cyBleHRlbmRlZCBkaWFnbm9zdGljIHRlc3QgKi8KICNkZWZpbmUgREVWX0hBU19NR01UX1VOSVQgICAgICAgICAgMHgwMDIwMDAgIC8qIGRldmljZSBzdXBwb3J0cyBtYW5hZ2VtZW50IHVuaXQgKi8KICNkZWZpbmUgREVWX0hBU19DT1JSRUNUX01BQ0FERFIgICAgMHgwMDQwMDAgIC8qIGRldmljZSBzdXBwb3J0cyBjb3JyZWN0IG1hYyBhZGRyZXNzIG9yZGVyICovCkBAIC0xMDIsNyArMTAyLDcgQEAKIGVudW0gewogCU52UmVnSXJxU3RhdHVzID0gMHgwMDAsCiAjZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUlJRVZFTlQJMHgwNDAKLSNkZWZpbmUgTlZSRUdfSVJRU1RBVF9NQVNLCQkweDgxZmYKKyNkZWZpbmUgTlZSRUdfSVJRU1RBVF9NQVNLCQkweDgzZmYKIAlOdlJlZ0lycU1hc2sgPSAweDAwNCwKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0VSUk9SCQkweDAwMDEKICNkZWZpbmUgTlZSRUdfSVJRX1JYCQkJMHgwMDAyCkBAIC0xMTMsMTcgKzExMywxMyBAQAogI2RlZmluZSBOVlJFR19JUlFfTElOSwkJCTB4MDA0MAogI2RlZmluZSBOVlJFR19JUlFfUlhfRk9SQ0VECQkweDAwODAKICNkZWZpbmUgTlZSRUdfSVJRX1RYX0ZPUkNFRAkJMHgwMTAwCi0jZGVmaW5lIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SCQkweDgwMDAKKyNkZWZpbmUgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IJCTB4ODIwMAogI2RlZmluZSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQJMHgwMGRmCiAjZGVmaW5lIE5WUkVHX0lSUU1BU0tfQ1BVCQkweDAwNjAKICNkZWZpbmUgTlZSRUdfSVJRX1RYX0FMTAkJKE5WUkVHX0lSUV9UWF9FUlJ8TlZSRUdfSVJRX1RYX09LfE5WUkVHX0lSUV9UWF9GT1JDRUQpCiAjZGVmaW5lIE5WUkVHX0lSUV9SWF9BTEwJCShOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19JUlFfUlhfRk9SQ0VEKQogI2RlZmluZSBOVlJFR19JUlFfT1RIRVIJCQkoTlZSRUdfSVJRX1RJTUVSfE5WUkVHX0lSUV9MSU5LfE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKQogCi0jZGVmaW5lIE5WUkVHX0lSUV9VTktOT1dOCSh+KE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGfE5WUkVHX0lSUV9UWF9FUlJ8IFwKLQkJCQkJTlZSRUdfSVJRX1RYX09LfE5WUkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfUlhfRk9SQ0VEfCBcCi0JCQkJCU5WUkVHX0lSUV9UWF9GT1JDRUR8TlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKQotCiAJTnZSZWdVbmtub3duU2V0dXBSZWc2ID0gMHgwMDgsCiAjZGVmaW5lIE5WUkVHX1VOS1NFVFVQNl9WQUwJCTMKIApAQCAtMTMyLDcgKzEyOCw3IEBACiAgKiBOVlJFR19QT0xMX0RFRkFVTFQ9OTcgd291bGQgcmVzdWx0IGluIGFuIGludGVydmFsIGxlbmd0aCBvZiAxIG1zCiAgKi8KIAlOdlJlZ1BvbGxpbmdJbnRlcnZhbCA9IDB4MDBjLAotI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfVEhST1VHSFBVVAk5NzAgLyogYmFja3VwIHR4IGNsZWFudXAgaWYgbG9vcCBtYXggcmVhY2hlZCAqLworI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfVEhST1VHSFBVVAk2NTUzNSAvKiBiYWNrdXAgdHggY2xlYW51cCBpZiBsb29wIG1heCByZWFjaGVkICovCiAjZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVF9DUFUJMTMKIAlOdlJlZ01TSU1hcDAgPSAweDAyMCwKIAlOdlJlZ01TSU1hcDEgPSAweDAyNCwKQEAgLTE1Nyw2ICsxNTMsOSBAQAogI2RlZmluZSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9BQ1EJMHgwMDAwZjAwMAogI2RlZmluZSBOVlJFR19YTUlUQ1RMX0hPU1RfTE9BREVECTB4MDAwMDQwMDAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9UWF9QQVRIX0VOCTB4MDEwMDAwMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9EQVRBX1NUQVJUCTB4MDAxMDAwMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9EQVRBX1JFQURZCTB4MDAwMTAwMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9EQVRBX0VSUk9SCTB4MDAwMjAwMDAKIAlOdlJlZ1RyYW5zbWl0dGVyU3RhdHVzID0gMHgwODgsCiAjZGVmaW5lIE5WUkVHX1hNSVRTVEFUX0JVU1kJMHgwMQogCkBAIC0yODksOCArMjg4LDEwIEBACiAjZGVmaW5lIE5WUkVHX1dBS0VVUEZMQUdTX0FDQ0VQVF9MSU5LQ0hBTkdFCTB4MDQKICNkZWZpbmUgTlZSRUdfV0FLRVVQRkxBR1NfRU5BQkxFCTB4MTExMQogCi0JTnZSZWdQYXR0ZXJuQ1JDID0gMHgyMDQsCi0JTnZSZWdQYXR0ZXJuTWFzayA9IDB4MjA4LAorCU52UmVnTWdtdFVuaXRHZXRWZXJzaW9uID0gMHgyMDQsCisjZGVmaW5lIE5WUkVHX01HTVRVTklUR0VUVkVSU0lPTiAgICAgCTB4MDEKKwlOdlJlZ01nbXRVbml0VmVyc2lvbiA9IDB4MjA4LAorI2RlZmluZSBOVlJFR19NR01UVU5JVFZFUlNJT04JCTB4MDgKIAlOdlJlZ1Bvd2VyQ2FwID0gMHgyNjgsCiAjZGVmaW5lIE5WUkVHX1BPV0VSQ0FQX0QzU1VQUAkoMTw8MzApCiAjZGVmaW5lIE5WUkVHX1BPV0VSQ0FQX0QyU1VQUAkoMTw8MjYpCkBAIC0zMDMsNiArMzA0LDggQEAKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMQkJMHgwMDAxCiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDIJCTB4MDAwMgogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QzCQkweDAwMDMKKwlOdlJlZ01nbXRVbml0Q29udHJvbCA9IDB4Mjc4LAorI2RlZmluZSBOVlJFR19NR01UVU5JVENPTlRST0xfSU5VU0UJMHgyMDAwMAogCU52UmVnVHhDbnQgPSAweDI4MCwKIAlOdlJlZ1R4WmVyb1JlWG10ID0gMHgyODQsCiAJTnZSZWdUeE9uZVJlWG10ID0gMHgyODgsCkBAIC00NjAsNyArNDYzLDcgQEAKIC8qIEdlbmVyYWwgZHJpdmVyIGRlZmF1bHRzICovCiAjZGVmaW5lIE5WX1dBVENIRE9HX1RJTUVPCSg1KkhaKQogCi0jZGVmaW5lIFJYX1JJTkdfREVGQVVMVAkJMTI4CisjZGVmaW5lIFJYX1JJTkdfREVGQVVMVAkJNTEyCiAjZGVmaW5lIFRYX1JJTkdfREVGQVVMVAkJMjU2CiAjZGVmaW5lIFJYX1JJTkdfTUlOCQkxMjgKICNkZWZpbmUgVFhfUklOR19NSU4JCTY0CkBAIC01ODIsMTEgKzU4NSwxNyBAQAogI2RlZmluZSBOVl9NU0lfWF9WRUNUT1JfVFggICAgMHgxCiAjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUl9PVEhFUiAweDIKIAorI2RlZmluZSBOVl9NU0lfUFJJVl9PRkZTRVQgMHg2OAorI2RlZmluZSBOVl9NU0lfUFJJVl9WQUxVRSAgMHhmZmZmZmZmZgorCiAjZGVmaW5lIE5WX1JFU1RBUlRfVFggICAgICAgICAweDEKICNkZWZpbmUgTlZfUkVTVEFSVF9SWCAgICAgICAgIDB4MgogCiAjZGVmaW5lIE5WX1RYX0xJTUlUX0NPVU5UICAgICAxNgogCisjZGVmaW5lIE5WX0RZTkFNSUNfVEhSRVNIT0xEICAgICAgICA0CisjZGVmaW5lIE5WX0RZTkFNSUNfTUFYX1FVSUVUX0NPVU5UICAyMDQ4CisKIC8qIHN0YXRpc3RpY3MgKi8KIHN0cnVjdCBudl9ldGh0b29sX3N0ciB7CiAJY2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07CkBAIC03NDQsMTEgKzc1MywxMyBAQAogCXUxNiBnaWdhYml0OwogCWludCBpbnRyX3Rlc3Q7CiAJaW50IHJlY292ZXJfZXJyb3I7CisJaW50IHF1aWV0X2NvdW50OwogCiAJLyogR2VuZXJhbCBkYXRhOiBSTyBmaWVsZHMgKi8KIAlkbWFfYWRkcl90IHJpbmdfYWRkcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAl1MzIgb3JpZ19tYWNbMl07CisJdTMyIGV2ZW50czsKIAl1MzIgaXJxbWFzazsKIAl1MzIgZGVzY192ZXI7CiAJdTMyIHR4cnhjdGxfYml0czsKQEAgLTc1OCw2ICs3NjksOCBAQAogCXUzMiByZWdpc3Rlcl9zaXplOwogCWludCByeF9jc3VtOwogCXUzMiBtYWNfaW5fdXNlOworCWludCBtZ210X3ZlcnNpb247CisJaW50IG1nbXRfc2VtYTsKIAogCXZvaWQgX19pb21lbSAqYmFzZTsKIApAQCAtODEyLDEzICs4MjUsMTggQEAKIAogCS8qIHBvd2VyIHNhdmVkIHN0YXRlICovCiAJdTMyIHNhdmVkX2NvbmZpZ19zcGFjZVtOVl9QQ0lfUkVHU1pfTUFYLzRdOworCisJLyogZm9yIGRpZmZlcmVudCBtc2kteCBpcnEgdHlwZSAqLworCWNoYXIgbmFtZV9yeFtJRk5BTVNJWiArIDNdOyAgICAgICAvKiAtcnggICAgKi8KKwljaGFyIG5hbWVfdHhbSUZOQU1TSVogKyAzXTsgICAgICAgLyogLXR4ICAgICovCisJY2hhciBuYW1lX290aGVyW0lGTkFNU0laICsgNl07ICAgIC8qIC1vdGhlciAqLwogfTsKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIGxvb3BzIHVudGlsIHdlIGFzc3VtZSB0aGF0IGEgYml0IGluIHRoZSBpcnEgbWFzawogICogaXMgc3R1Y2suIE92ZXJyaWRhYmxlIHdpdGggbW9kdWxlIHBhcmFtLgogICovCi1zdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDE1Oworc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSA0OwogCiAvKgogICogT3B0aW1pemF0aW9uIGNhbiBiZSBlaXRoZXIgdGhyb3VwdXQgbW9kZSBvciBjcHUgbW9kZQpAQCAtODI4LDkgKzg0NiwxMCBAQAogICovCiBlbnVtIHsKIAlOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVULAotCU5WX09QVElNSVpBVElPTl9NT0RFX0NQVQorCU5WX09QVElNSVpBVElPTl9NT0RFX0NQVSwKKwlOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDCiB9Owotc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CitzdGF0aWMgaW50IG9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfRFlOQU1JQzsKIAogLyoKICAqIFBvbGwgaW50ZXJ2YWwgZm9yIHRpbWVyIGlycQpAQCAtODU3LDcgKzg3Niw3IEBACiAJTlZfTVNJWF9JTlRfRElTQUJMRUQsCiAJTlZfTVNJWF9JTlRfRU5BQkxFRAogfTsKLXN0YXRpYyBpbnQgbXNpeCA9IE5WX01TSVhfSU5UX0RJU0FCTEVEOworc3RhdGljIGludCBtc2l4ID0gTlZfTVNJWF9JTlRfRU5BQkxFRDsKIAogLyoKICAqIERNQSA2NGJpdApAQCAtOTIzLDcgKzk0Miw3IEBACiAJCWRlbGF5bWF4IC09IGRlbGF5OwogCQlpZiAoZGVsYXltYXggPCAwKSB7CiAJCQlpZiAobXNnKQotCQkJCXByaW50ayhtc2cpOworCQkJCXByaW50aygiJXMiLCBtc2cpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IHdoaWxlICgocmVhZGwoYmFzZSArIG9mZnNldCkgJiBtYXNrKSAhPSB0YXJnZXQpOwpAQCAtMTA1Miw2ICsxMDcxLDI0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBudl9uYXBpX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKworCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbnZfbmFwaV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCisJbmFwaV9kaXNhYmxlKCZucC0+bmFwaSk7CisjZW5kaWYKK30KKwogI2RlZmluZSBNSUlfUkVBRAkoLTEpCiAvKiBtaWlfcnc6IHJlYWQvd3JpdGUgYSByZWdpc3RlciBvbiB0aGUgUEhZLgogICoKQEAgLTE3NjAsNyArMTc5Nyw3IEBACiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIEp1c3QgcmVzY2hlZHVsZSBOQVBJIHJ4IHByb2Nlc3NpbmcgKi8KLQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBudl9kb19yeF9yZWZpbGwodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMjM2NSwxNCArMjQwMiwxNiBAQAogICoKICAqIENhbGxlciBtdXN0IG93biBucC0+bG9jay4KICAqLwotc3RhdGljIHZvaWQgbnZfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBudl90eF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBmbGFnczsKKwlpbnQgdHhfd29yayA9IDA7CiAJc3RydWN0IHJpbmdfZGVzYyogb3JpZ19nZXRfdHggPSBucC0+Z2V0X3R4Lm9yaWc7CiAKIAl3aGlsZSAoKG5wLT5nZXRfdHgub3JpZyAhPSBucC0+cHV0X3R4Lm9yaWcpICYmCi0JICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5vcmlnLT5mbGFnbGVuKSkgJiBOVl9UWF9WQUxJRCkpIHsKKwkgICAgICAgISgoZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3R4Lm9yaWctPmZsYWdsZW4pKSAmIE5WX1RYX1ZBTElEKSAmJgorCSAgICAgICAodHhfd29yayA8IGxpbWl0KSkgewogCiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2RvbmU6IGZsYWdzIDB4JXguXG4iLAogCQkJCQlkZXYtPm5hbWUsIGZsYWdzKTsKQEAgLTIzOTgsNiArMjQzNyw3IEBACiAJCQkJfQogCQkJCWRldl9rZnJlZV9za2JfYW55KG5wLT5nZXRfdHhfY3R4LT5za2IpOwogCQkJCW5wLT5nZXRfdHhfY3R4LT5za2IgPSBOVUxMOworCQkJCXR4X3dvcmsrKzsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChmbGFncyAmIE5WX1RYMl9MQVNUUEFDS0VUKSB7CkBAIC0yNDE1LDYgKzI0NTUsNyBAQAogCQkJCX0KIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKIAkJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCQl0eF93b3JrKys7CiAJCQl9CiAJCX0KIAkJaWYgKHVubGlrZWx5KG5wLT5nZXRfdHgub3JpZysrID09IG5wLT5sYXN0X3R4Lm9yaWcpKQpAQCAtMjQyNiwxNyArMjQ2NywxOSBAQAogCQlucC0+dHhfc3RvcCA9IDA7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CisJcmV0dXJuIHR4X3dvcms7CiB9CiAKLXN0YXRpYyB2b2lkIG52X3R4X2RvbmVfb3B0aW1pemVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKK3N0YXRpYyBpbnQgbnZfdHhfZG9uZV9vcHRpbWl6ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGZsYWdzOworCWludCB0eF93b3JrID0gMDsKIAlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBvcmlnX2dldF90eCA9IG5wLT5nZXRfdHguZXg7CiAKIAl3aGlsZSAoKG5wLT5nZXRfdHguZXggIT0gbnAtPnB1dF90eC5leCkgJiYKIAkgICAgICAgISgoZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3R4LmV4LT5mbGFnbGVuKSkgJiBOVl9UWF9WQUxJRCkgJiYKLQkgICAgICAgKGxpbWl0LS0gPiAwKSkgeworCSAgICAgICAodHhfd29yayA8IGxpbWl0KSkgewogCiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2RvbmVfb3B0aW1pemVkOiBmbGFncyAweCV4LlxuIiwKIAkJCQkJZGV2LT5uYW1lLCBmbGFncyk7CkBAIC0yNDYwLDYgKzI1MDMsNyBAQAogCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKIAkJCW5wLT5nZXRfdHhfY3R4LT5za2IgPSBOVUxMOworCQkJdHhfd29yaysrOwogCiAJCQlpZiAobnAtPnR4X2xpbWl0KSB7CiAJCQkJbnZfdHhfZmxpcF9vd25lcnNoaXAoZGV2KTsKQEAgLTI0NzQsNiArMjUxOCw3IEBACiAJCW5wLT50eF9zdG9wID0gMDsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KKwlyZXR1cm4gdHhfd29yazsKIH0KIAogLyoKQEAgLTI1NDYsNyArMjU5MSw3IEBACiAKIAkvKiAyKSBjaGVjayB0aGF0IHRoZSBwYWNrZXRzIHdlcmUgbm90IHNlbnQgYWxyZWFkeTogKi8KIAlpZiAoIW52X29wdGltaXplZChucCkpCi0JCW52X3R4X2RvbmUoZGV2KTsKKwkJbnZfdHhfZG9uZShkZXYsIG5wLT50eF9yaW5nX3NpemUpOwogCWVsc2UKIAkJbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKIApAQCAtMjkwNyw2ICsyOTUyLDcgQEAKIAkJICogQ2hhbmdpbmcgdGhlIE1UVSBpcyBhIHJhcmUgZXZlbnQsIGl0IHNob3VsZG4ndCBtYXR0ZXIuCiAJCSAqLwogCQludl9kaXNhYmxlX2lycShkZXYpOworCQludl9uYXBpX2Rpc2FibGUoZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC0yOTM1LDYgKzI5ODEsNyBAQAogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkJbnZfbmFwaV9lbmFibGUoZGV2KTsKIAkJbnZfZW5hYmxlX2lycShkZXYpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMzNzUsNTAgKzM0MjIsNzEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG52X2NoYW5nZV9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdG90YWxfd29yaykKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX0RZTkFNSUMpIHsKKwkJaWYgKHRvdGFsX3dvcmsgPiBOVl9EWU5BTUlDX1RIUkVTSE9MRCkgeworCQkJLyogdHJhbnNpdGlvbiB0byBwb2xsIGJhc2VkIGludGVycnVwdHMgKi8KKwkJCW5wLT5xdWlldF9jb3VudCA9IDA7CisJCQlpZiAobnAtPmlycW1hc2sgIT0gTlZSRUdfSVJRTUFTS19DUFUpIHsKKwkJCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfQ1BVOworCQkJCXJldHVybiAxOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG5wLT5xdWlldF9jb3VudCA8IE5WX0RZTkFNSUNfTUFYX1FVSUVUX0NPVU5UKSB7CisJCQkJbnAtPnF1aWV0X2NvdW50Kys7CisJCQl9IGVsc2UgeworCQkJCS8qIHJlYWNoZWQgYSBwZXJpb2Qgb2YgbG93IGFjdGl2aXR5LCBzd2l0Y2gKKwkJCQkgICB0byBwZXIgdHgvcnggcGFja2V0IGludGVycnVwdHMgKi8KKwkJCQlpZiAobnAtPmlycW1hc2sgIT0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUKSB7CisJCQkJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxKGludCBmb28sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl1MzIgZXZlbnRzOwotCWludCBpOworI2lmbmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwlpbnQgdG90YWxfd29yayA9IDA7CisJaW50IGxvb3BfY291bnQgPSAwOworI2VuZGlmCiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxXG4iLCBkZXYtPm5hbWUpOwogCi0JZm9yIChpPTA7IDsgaSsrKSB7Ci0JCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKLQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKLQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQl9Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwotCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCi0JCQlicmVhazsKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKKwkJbnAtPmV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCX0gZWxzZSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCX0KKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgbnAtPmV2ZW50cyk7CisJaWYgKCEobnAtPmV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKKwkJcmV0dXJuIElSUV9OT05FOwogCi0JCW52X21zaV93b3JrYXJvdW5kKG5wKTsKLQotCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJbnZfdHhfZG9uZShkZXYpOwotCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCW52X21zaV93b3JrYXJvdW5kKG5wKTsKIAogI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX1JYX0FMTCkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAotCQkJLyogRGlzYWJsZSBmdXJ0aHVyIHJlY2VpdmUgaXJxJ3MgKi8KLQkJCW5wLT5pcnFtYXNrICY9IH5OVlJFR19JUlFfUlhfQUxMOworCS8qIERpc2FibGUgZnVydGh1ciBpcnEncworCSAgIChtc2l4IG5vdCBlbmFibGVkIHdpdGggbmFwaSkgKi8KKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CiAKLQkJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKLQkJCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KICNlbHNlCi0JCWlmIChudl9yeF9wcm9jZXNzKGRldiwgUlhfV09SS19QRVJfTE9PUCkpIHsKKwlkbworCXsKKwkJaW50IHdvcmsgPSAwOworCQlpZiAoKHdvcmsgPSBudl9yeF9wcm9jZXNzKGRldiwgUlhfV09SS19QRVJfTE9PUCkpKSB7CiAJCQlpZiAodW5saWtlbHkobnZfYWxsb2NfcngoZGV2KSkpIHsKIAkJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKQEAgLTM0MjYsNjUgKzM0OTQsNTYgQEAKIAkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJfQogCQl9Ci0jZW5kaWYKLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rX2lycShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQotCQlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSkgewotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCXdvcmsgKz0gbnZfdHhfZG9uZShkZXYsIFRYX1dPUktfUEVSX0xPT1ApOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCisJCWlmICghd29yaykKIAkJCWJyZWFrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKSB7Ci0JCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOwotCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBtYW55IGl0ZXJhdGlvbnMgKCVkKSBpbiBudl9uaWNfaXJxLlxuIiwgZGV2LT5uYW1lLCBpKTsKLQkJCWJyZWFrOwotCQl9CisJCXRvdGFsX3dvcmsgKz0gd29yazsKIAorCQlsb29wX2NvdW50Kys7CiAJfQorCXdoaWxlIChsb29wX2NvdW50IDwgbWF4X2ludGVycnVwdF93b3JrKTsKKworCWlmIChudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoZGV2LCB0b3RhbF93b3JrKSkgeworCQkvKiBzZXR1cCBuZXcgaXJxIG1hc2sgKi8KKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisKKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua19pcnEoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJZWxzZQorCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJcGNpX3B1c2goYmFzZSk7CisKKwkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKKwkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJfQorCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKyNlbmRpZgogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnEgY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0dXJuIElSUV9SRVRWQUwoaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiAvKioKQEAgLTM0OTcsNDUgKzM1NTYsMzggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCXUzMiBldmVudHM7Ci0JaW50IGk7CisjaWZuZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCWludCB0b3RhbF93b3JrID0gMDsKKwlpbnQgbG9vcF9jb3VudCA9IDA7CisjZW5kaWYKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfb3B0aW1pemVkXG4iLCBkZXYtPm5hbWUpOwogCi0JZm9yIChpPTA7IDsgaSsrKSB7Ci0JCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKLQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKLQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQl9Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwotCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCi0JCQlicmVhazsKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKKwkJbnAtPmV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCX0gZWxzZSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCX0KKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgbnAtPmV2ZW50cyk7CisJaWYgKCEobnAtPmV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKKwkJcmV0dXJuIElSUV9OT05FOwogCi0JCW52X21zaV93b3JrYXJvdW5kKG5wKTsKLQotCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwludl9tc2lfd29ya2Fyb3VuZChucCk7CiAKICNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAKLQkJCS8qIERpc2FibGUgZnVydGh1ciByZWNlaXZlIGlycSdzICovCi0JCQlucC0+aXJxbWFzayAmPSB+TlZSRUdfSVJRX1JYX0FMTDsKKwkvKiBEaXNhYmxlIGZ1cnRodXIgaXJxJ3MKKwkgICAobXNpeCBub3QgZW5hYmxlZCB3aXRoIG5hcGkpICovCisJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCi0JCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQl9CiAjZWxzZQotCQlpZiAobnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBSWF9XT1JLX1BFUl9MT09QKSkgeworCWRvCisJeworCQlpbnQgd29yayA9IDA7CisJCWlmICgod29yayA9IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgUlhfV09SS19QRVJfTE9PUCkpKSB7CiAJCQlpZiAodW5saWtlbHkobnZfYWxsb2Nfcnhfb3B0aW1pemVkKGRldikpKSB7CiAJCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCkBAIC0zNTQzLDY2ICszNTk1LDU3IEBACiAJCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJCX0KIAkJfQotI2VuZGlmCi0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfbGlua19pcnEoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rY2hhbmdlKGRldik7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkpIHsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9VTktOT1dOKSkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggdW5rbm93biBldmVudHMgMHgleC4gUGxlYXNlIHJlcG9ydFxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlwY2lfcHVzaChiYXNlKTsKIAotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKLQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7Ci0JCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOwotCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQl3b3JrICs9IG52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19QRVJfTE9PUCk7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisKKwkJaWYgKCF3b3JrKQogCQkJYnJlYWs7Ci0JCX0KIAotCQlpZiAodW5saWtlbHkoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOworCQl0b3RhbF93b3JrICs9IHdvcms7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKSB7Ci0JCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOwotCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBtYW55IGl0ZXJhdGlvbnMgKCVkKSBpbiBudl9uaWNfaXJxLlxuIiwgZGV2LT5uYW1lLCBpKTsKLQkJCWJyZWFrOwotCQl9Ci0KKwkJbG9vcF9jb3VudCsrOwogCX0KKwl3aGlsZSAobG9vcF9jb3VudCA8IG1heF9pbnRlcnJ1cHRfd29yayk7CisKKwlpZiAobnZfY2hhbmdlX2ludGVycnVwdF9tb2RlKGRldiwgdG90YWxfd29yaykpIHsKKwkJLyogc2V0dXAgbmV3IGlycSBtYXNrICovCisJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfQorCisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X2xpbmtfaXJxKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJfQorCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CisJfQorCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLworCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCWVsc2UKKwkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCXBjaV9wdXNoKGJhc2UpOworCisJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisKKyNlbmRpZgogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfb3B0aW1pemVkIGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKIAotCXJldHVybiBJUlFfUkVUVkFMKGkpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfdHgoaW50IGZvbywgdm9pZCAqZGF0YSkKQEAgLTM2MjcsMTAgKzM2NzAsNiBAQAogCQludl90eF9kb25lX29wdGltaXplZChkZXYsIFRYX1dPUktfUEVSX0xPT1ApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwogCi0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpKSB7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCBldmVudHMgMHgleC4gUHJvYmFibHkgVFggZmFpbC5cbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KIAkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCkBAIC0zNjU5LDEzICszNjk4LDIyIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5wLT5kZXY7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBwa3RzLCByZXRjb2RlOworCWludCByZXRjb2RlOworCWludCB0eF93b3JrLCByeF93b3JrOwogCiAJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7Ci0JCXBrdHMgPSBudl9yeF9wcm9jZXNzKGRldiwgYnVkZ2V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCXR4X3dvcmsgPSBudl90eF9kb25lKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwkJcnhfd29yayA9IG52X3J4X3Byb2Nlc3MoZGV2LCBidWRnZXQpOwogCQlyZXRjb2RlID0gbnZfYWxsb2NfcngoZGV2KTsKIAl9IGVsc2UgewotCQlwa3RzID0gbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBidWRnZXQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJdHhfd29yayA9IG52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwkJcnhfd29yayA9IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgYnVkZ2V0KTsKIAkJcmV0Y29kZSA9IG52X2FsbG9jX3J4X29wdGltaXplZChkZXYpOwogCX0KIApAQCAtMzY3Niw0NCArMzcyNCw0MiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwogCX0KIAotCWlmIChwa3RzIDwgYnVkZ2V0KSB7Ci0JCS8qIHJlLWVuYWJsZSByZWNlaXZlIGludGVycnVwdHMgKi8KKwludl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoZGV2LCB0eF93b3JrICsgcnhfd29yayk7CisKKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKLQotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCi0JCW5wLT5pcnFtYXNrIHw9IE5WUkVHX0lSUV9SWF9BTEw7Ci0JCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKLQkJCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJZWxzZQotCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQorCQludl9saW5rX2lycShkZXYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwogCX0KLQlyZXR1cm4gcGt0czsKKwlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCQludl9saW5rY2hhbmdlKGRldik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOworCX0KKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKKwkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CisJCXJldHVybiByeF93b3JrOworCX0KKworCWlmIChyeF93b3JrIDwgYnVkZ2V0KSB7CisJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzCisJCSAgIChtc2l4IG5vdCBlbmFibGVkIGluIG5hcGkpICovCisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKKworCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCX0KKwlyZXR1cm4gcnhfd29yazsKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi1zdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9yeChpbnQgZm9vLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTMyIGV2ZW50czsKLQotCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX1JYX0FMTDsKLQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0KLQlpZiAoZXZlbnRzKSB7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7Ci0JCS8qIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQlwY2lfcHVzaChiYXNlKTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotI2Vsc2UKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3J4KGludCBmb28sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwpAQCAtMzc2MCw3ICszODA2LDYgQEAKIAogCXJldHVybiBJUlFfUkVUVkFMKGkpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX290aGVyKGludCBmb28sIHZvaWQgKmRhdGEpCiB7CkBAIC0zODEwLDEwICszODU1LDYgQEAKIAkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggdW5rbm93biBldmVudHMgMHgleC4gUGxlYXNlIHJlcG9ydFxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQogCQlpZiAodW5saWtlbHkoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwogCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KQEAgLTM5MTgsMjEgKzM5NTksMjcgQEAKIAkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKIAkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUICYmICFpbnRyX3Rlc3QpIHsKIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgcnggaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCAmbnZfbmljX2lycV9yeCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJc3ByaW50ZihucC0+bmFtZV9yeCwgIiVzLXJ4IiwgZGV2LT5uYW1lKTsKKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLAorCQkJCQkJJm52X25pY19pcnFfcngsIElSUUZfU0hBUkVELCBucC0+bmFtZV9yeCwgZGV2KSAhPSAwKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciByeCAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CiAJCQkJCWdvdG8gb3V0X2VycjsKIAkJCQl9CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHR4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgJm52X25pY19pcnFfdHgsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXNwcmludGYobnAtPm5hbWVfdHgsICIlcy10eCIsIGRldi0+bmFtZSk7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwKKwkJCQkJCSZudl9uaWNfaXJxX3R4LCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfdHgsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCQkJCQlnb3RvIG91dF9mcmVlX3J4OwogCQkJCX0KIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgbGluayBhbmQgdGltZXIgaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLCAmbnZfbmljX2lycV9vdGhlciwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJc3ByaW50ZihucC0+bmFtZV9vdGhlciwgIiVzLW90aGVyIiwgZGV2LT5uYW1lKTsKKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLAorCQkJCQkJJm52X25pY19pcnFfb3RoZXIsIElSUUZfU0hBUkVELCBucC0+bmFtZV9vdGhlciwgZGV2KSAhPSAwKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciBsaW5rICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKQEAgLTQwNDYsMTkgKzQwOTMsMTkgQEAKIAkJCW1hc2sgfD0gTlZSRUdfSVJRX09USEVSOwogCQl9CiAJfQotCW5wLT5uaWNfcG9sbF9pcnEgPSAwOwotCiAJLyogZGlzYWJsZV9pcnEoKSBjb250YWlucyBzeW5jaHJvbml6ZV9pcnEsIHRodXMgbm8gaXJxIGhhbmRsZXIgY2FuIHJ1biBub3cgKi8KIAogCWlmIChucC0+cmVjb3Zlcl9lcnJvcikgewogCQlucC0+cmVjb3Zlcl9lcnJvciA9IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogTUFDIGluIHJlY292ZXJhYmxlIGVycm9yIHN0YXRlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBpbiByZWNvdmVyYWJsZSBlcnJvciBzdGF0ZVxuIiwgZGV2LT5uYW1lKTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCS8qIHN0b3AgZW5naW5lcyAqLwogCQkJbnZfc3RvcF9yeHR4KGRldik7CisJCQlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRSTCkKKwkJCQludl9tYWNfcmVzZXQoZGV2KTsKIAkJCW52X3R4cnhfcmVzZXQoZGV2KTsKIAkJCS8qIGRyYWluIHJ4IHF1ZXVlICovCiAJCQludl9kcmFpbl9yeHR4KGRldik7CkBAIC00MDc2LDYgKzQxMjMsMTEgQEAKIAkJCXBjaV9wdXNoKGJhc2UpOwogCQkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKIAkJCXBjaV9wdXNoKGJhc2UpOworCQkJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCQllbHNlCisJCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CiAKIAkJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCiAJCQludl9zdGFydF9yeHR4KGRldik7CkBAIC00MDg1LDExICs0MTM3LDExIEBACiAJCX0KIAl9CiAKLQogCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAlwY2lfcHVzaChiYXNlKTsKIAogCWlmICghdXNpbmdfbXVsdGlfaXJxcyhkZXYpKSB7CisJCW5wLT5uaWNfcG9sbF9pcnEgPSAwOwogCQlpZiAobnZfb3B0aW1pemVkKG5wKSkKIAkJCW52X25pY19pcnFfb3B0aW1pemVkKDAsIGRldik7CiAJCWVsc2UKQEAgLTQxMDAsMTggKzQxNTIsMjIgQEAKIAkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+cGNpX2Rldi0+aXJxKTsKIAl9IGVsc2UgewogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgJj0gfk5WUkVHX0lSUV9SWF9BTEw7CiAJCQludl9uaWNfaXJxX3J4KDAsIGRldik7CiAJCQllbmFibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKIAkJfQogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9UWF9BTEwpIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgJj0gfk5WUkVHX0lSUV9UWF9BTEw7CiAJCQludl9uaWNfaXJxX3R4KDAsIGRldik7CiAJCQllbmFibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yKTsKIAkJfQogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9PVEhFUikgeworCQkJbnAtPm5pY19wb2xsX2lycSAmPSB+TlZSRUdfSVJRX09USEVSOwogCQkJbnZfbmljX2lycV9vdGhlcigwLCBkZXYpOwogCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CiAJCX0KIAl9CisKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC00NTYwLDYgKzQ2MTYsNyBAQAogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQludl9kaXNhYmxlX2lycShkZXYpOworCQludl9uYXBpX2Rpc2FibGUoZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC00NjEyLDYgKzQ2NjksNyBAQAogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQluZXRpZl9hZGRyX3VubG9jayhkZXYpOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkJbnZfbmFwaV9lbmFibGUoZGV2KTsKIAkJbnZfZW5hYmxlX2lycShkZXYpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ3MzgsNyArNDc5Niw3IEBACiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bShkZXYsIGRhdGEpOworCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwogCWVsc2UKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpAQCAtNDc2NCwxMiArNDgyMiwxMiBAQAogCQllbHNlCiAJCQlyZXR1cm4gTlZfVEVTVF9DT1VOVF9CQVNFOwogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YxKQotCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YxX0NPVU5UOworCQlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YzKQorCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YzX0NPVU5UOwogCQllbHNlIGlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjIpCiAJCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjJfQ09VTlQ7Ci0JCWVsc2UgaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMykKLQkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WM19DT1VOVDsKKwkJZWxzZSBpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YxKQorCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YxX0NPVU5UOwogCQllbHNlCiAJCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgpAQCAtNTAzOCw5ICs1MDk2LDcgQEAKIAlpZiAodGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisJCQludl9uYXBpX2Rpc2FibGUoZGV2KTsKIAkJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpAQCAtNTA5OCw5ICs1MTU0LDcgQEAKIAkJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCiAJCQludl9zdGFydF9yeHR4KGRldik7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCQkJbmFwaV9lbmFibGUoJm5wLT5uYXBpKTsKLSNlbmRpZgorCQkJbnZfbmFwaV9lbmFibGUoZGV2KTsKIAkJCW52X2VuYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgbnAtPmlycW1hc2spOwogCQl9CiAJfQpAQCAtNTE2OSw2ICs1MjIzLDcgQEAKIC8qIFRoZSBtZ210IHVuaXQgYW5kIGRyaXZlciB1c2UgYSBzZW1hcGhvcmUgdG8gYWNjZXNzIHRoZSBwaHkgZHVyaW5nIGluaXQgKi8KIHN0YXRpYyBpbnQgbnZfbWdtdF9hY3F1aXJlX3NlbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJaW50IGk7CiAJdTMyIHR4X2N0cmwsIG1nbXRfc2VtYTsKQEAgLTUxOTEsOCArNTI0NiwxMCBAQAogCQkvKiB2ZXJpZnkgdGhhdCBzZW1hcGhvcmUgd2FzIGFjcXVpcmVkICovCiAJCXR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwogCQlpZiAoKCh0eF9jdHJsICYgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfTUFTSykgPT0gTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNRKSAmJgotCQkgICAgKCh0eF9jdHJsICYgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfTUFTSykgPT0gTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRSkpCisJCSAgICAoKHR4X2N0cmwgJiBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9NQVNLKSA9PSBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9GUkVFKSkgeworCQkJbnAtPm1nbXRfc2VtYSA9IDE7CiAJCQlyZXR1cm4gMTsKKwkJfQogCQllbHNlCiAJCQl1ZGVsYXkoNTApOwogCX0KQEAgLTUyMDAsNiArNTI1Nyw1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBudl9tZ210X3JlbGVhc2Vfc2VtYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgdHhfY3RybDsKKworCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01HTVRfVU5JVCkgeworCQlpZiAobnAtPm1nbXRfc2VtYSkgeworCQkJdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJCQl0eF9jdHJsICY9IH5OVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9BQ1E7CisJCQl3cml0ZWwodHhfY3RybCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgaW50IG52X21nbXRfZ2V0X3ZlcnNpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGRhdGFfcmVhZHkgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCXUzMiBkYXRhX3JlYWR5MiA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwlpbnQgcmVhZHkgPSAwOworCisJd3JpdGVsKE5WUkVHX01HTVRVTklUR0VUVkVSU0lPTiwgYmFzZSArIE52UmVnTWdtdFVuaXRHZXRWZXJzaW9uKTsKKwl3cml0ZWwoZGF0YV9yZWFkeSBeIE5WUkVHX1hNSVRDVExfREFUQV9TVEFSVCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwlzdGFydCA9IGppZmZpZXM7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0YXJ0ICsgNSpIWikpIHsKKwkJZGF0YV9yZWFkeTIgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCQlpZiAoKGRhdGFfcmVhZHkgJiBOVlJFR19YTUlUQ1RMX0RBVEFfUkVBRFkpICE9IChkYXRhX3JlYWR5MiAmIE5WUkVHX1hNSVRDVExfREFUQV9SRUFEWSkpIHsKKwkJCXJlYWR5ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCX0KKworCWlmICghcmVhZHkgfHwgKGRhdGFfcmVhZHkyICYgTlZSRUdfWE1JVENUTF9EQVRBX0VSUk9SKSkKKwkJcmV0dXJuIDA7CisKKwlucC0+bWdtdF92ZXJzaW9uID0gcmVhZGwoYmFzZSArIE52UmVnTWdtdFVuaXRWZXJzaW9uKSAmIE5WUkVHX01HTVRVTklUVkVSU0lPTjsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IG52X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTM0NCw5ICs1NDQ2LDcgQEAKIAlyZXQgPSBudl91cGRhdGVfbGlua3NwZWVkKGRldik7CiAJbnZfc3RhcnRfcnh0eChkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JbmFwaV9lbmFibGUoJm5wLT5uYXBpKTsKLSNlbmRpZgorCW52X25hcGlfZW5hYmxlKGRldik7CiAKIAlpZiAocmV0KSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKQEAgLTUzNzgsOSArNTQ3OCw3IEBACiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCW5wLT5pbl9zaHV0ZG93biA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7Ci0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JbmFwaV9kaXNhYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwludl9uYXBpX2Rpc2FibGUoZGV2KTsKIAlzeW5jaHJvbml6ZV9pcnEobnAtPnBjaV9kZXYtPmlycSk7CiAKIAlkZWxfdGltZXJfc3luYygmbnAtPm9vbV9raWNrKTsKQEAgLTU1NzEsMTQgKzU2NjksNiBAQAogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9UWDsKIAl9CiAKLQlucC0+bXNpX2ZsYWdzID0gMDsKLQlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpIHsKLQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfQ0FQQUJMRTsKLQl9Ci0JaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7Ci0JCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfQ0FQQUJMRTsKLQl9Ci0KIAlucC0+cGF1c2VfZmxhZ3MgPSBOVl9QQVVTRUZSQU1FX1JYX0NBUEFCTEUgfCBOVl9QQVVTRUZSQU1FX1JYX1JFUSB8IE5WX1BBVVNFRlJBTUVfQVVUT05FRzsKIAlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMSkgfHwKIAkgICAgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMikgfHwKQEAgLTU3MjMsMTQgKzU4MTMsMzUgQEAKIAl9IGVsc2UgewogCQlucC0+dHhfZmxhZ3MgPSBOVl9UWDJfVkFMSUQ7CiAJfQotCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKSB7Ci0JCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOwotCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLwotCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDM7Ci0JfSBlbHNlIHsKKworCW5wLT5tc2lfZmxhZ3MgPSAwOworCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0kpICYmIG1zaSkgeworCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9DQVBBQkxFOworCX0KKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJX1gpICYmIG1zaXgpIHsKKwkJLyogbXNpeCBoYXMgaGFkIHJlcG9ydGVkIGlzc3VlcyB3aGVuIG1vZGlmeWluZyBpcnFtYXNrCisJCSAgIGFzIGluIHRoZSBjYXNlIG9mIG5hcGksIHRoZXJlZm9yZSwgZGlzYWJsZSBmb3Igbm93CisJCSovCisjaWZuZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0NBUEFCTEU7CisjZW5kaWYKKwl9CisKKwlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfQ1BVKSB7CiAJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19DUFU7CiAJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSkgLyogc2V0IG51bWJlciBvZiB2ZWN0b3JzICovCiAJCQlucC0+bXNpX2ZsYWdzIHw9IDB4MDAwMTsKKwl9IGVsc2UgaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX0RZTkFNSUMgJiYKKwkJICAgIShpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9USU1FUklSUSkpIHsKKwkJLyogc3RhcnQgb2ZmIGluIHRocm91Z2hwdXQgbW9kZSAqLworCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKKwkJLyogcmVtb3ZlIHN1cHBvcnQgZm9yIG1zaXggbW9kZSAqLworCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9DQVBBQkxFOworCX0gZWxzZSB7CisJCW9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVDsKKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7CisJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSkgLyogc2V0IG51bWJlciBvZiB2ZWN0b3JzICovCisJCQlucC0+bXNpX2ZsYWdzIHw9IDB4MDAwMzsKIAl9CiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfVElNRVJJUlEpCkBAIC01NzcxLDE5ICs1ODgyLDI2IEBACiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKIAkJLyogbWFuYWdlbWVudCB1bml0IHJ1bm5pbmcgb24gdGhlIG1hYz8gKi8KLQkJaWYgKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpIHsKLQkJCW5wLT5tYWNfaW5fdXNlID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfTUdNVF9TVDsKLQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogbWdtdCB1bml0IGlzIHJ1bm5pbmcuIG1hYyBpbiB1c2UgJXguXG4iLCBwY2lfbmFtZShwY2lfZGV2KSwgbnAtPm1hY19pbl91c2UpOwotCQkJaWYgKG52X21nbXRfYWNxdWlyZV9zZW1hKGRldikpIHsKLQkJCQkvKiBtYW5hZ2VtZW50IHVuaXQgc2V0dXAgdGhlIHBoeSBhbHJlYWR5PyAqLwotCQkJCWlmICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLKSA9PQotCQkJCSAgICBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpIHsKLQkJCQkJLyogcGh5IGlzIGluaXRlZCBieSBtZ210IHVuaXQgKi8KLQkJCQkJcGh5aW5pdGlhbGl6ZWQgPSAxOwotCQkJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBoeSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IG1nbXQgdW5pdC5cbiIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiB3ZSBuZWVkIHRvIGluaXQgdGhlIHBoeSAqLwotCQkJCX0KKwkJaWYgKChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9NR01UX1NUKSAmJgorCQkgICAgKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpICYmCisJCSAgICBudl9tZ210X2FjcXVpcmVfc2VtYShkZXYpICYmCisJCSAgICBudl9tZ210X2dldF92ZXJzaW9uKGRldikpIHsKKwkJCW5wLT5tYWNfaW5fdXNlID0gMTsKKwkJCWlmIChucC0+bWdtdF92ZXJzaW9uID4gMCkgeworCQkJCW5wLT5tYWNfaW5fdXNlID0gcmVhZGwoYmFzZSArIE52UmVnTWdtdFVuaXRDb250cm9sKSAmIE5WUkVHX01HTVRVTklUQ09OVFJPTF9JTlVTRTsKKwkJCX0KKwkJCWRwcmludGsoS0VSTl9JTkZPICIlczogbWdtdCB1bml0IGlzIHJ1bm5pbmcuIG1hYyBpbiB1c2UgJXguXG4iLAorCQkJCXBjaV9uYW1lKHBjaV9kZXYpLCBucC0+bWFjX2luX3VzZSk7CisJCQkvKiBtYW5hZ2VtZW50IHVuaXQgc2V0dXAgdGhlIHBoeSBhbHJlYWR5PyAqLworCQkJaWYgKG5wLT5tYWNfaW5fdXNlICYmCisJCQkgICAgKChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX01BU0spID09CisJCQkgICAgIE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkpIHsKKwkJCQkvKiBwaHkgaXMgaW5pdGVkIGJ5IG1nbXQgdW5pdCAqLworCQkJCXBoeWluaXRpYWxpemVkID0gMTsKKwkJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBoeSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IG1nbXQgdW5pdC5cbiIsCisJCQkJCXBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogd2UgbmVlZCB0byBpbml0IHRoZSBwaHkgKi8KIAkJCX0KIAkJfQogCX0KQEAgLTU5NDUsNiArNjA2Myw4IEBACiAJLyogcmVzdG9yZSBhbnkgcGh5IHJlbGF0ZWQgY2hhbmdlcyAqLwogCW52X3Jlc3RvcmVfcGh5KGRldik7CiAKKwludl9tZ210X3JlbGVhc2Vfc2VtYShkZXYpOworCiAJLyogZnJlZSBhbGwgc3RydWN0dXJlcyAqLwogCWZyZWVfcmluZ3MoZGV2KTsKIAlpb3VubWFwKGdldF9od2Jhc2UoZGV2KSk7CkBAIC01OTk1LDYgKzYxMTUsOCBAQAogCWZvciAoaSA9IDA7aSA8PSBucC0+cmVnaXN0ZXJfc2l6ZS9zaXplb2YodTMyKTsgaSsrKQogCQl3cml0ZWwobnAtPnNhdmVkX2NvbmZpZ19zcGFjZVtpXSwgYmFzZStpKnNpemVvZih1MzIpKTsKIAorCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTlZfTVNJX1BSSVZfT0ZGU0VULCBOVl9NU0lfUFJJVl9WQUxVRSk7CisKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlyYyA9IG52X29wZW4oZGV2KTsKQEAgLTYwNjgsMTE1ICs2MTkwLDExNSBAQAogCX0sCiAJewkvKiBDSzgwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF84KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBDSzgwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF85KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1AwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQMDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDUxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAogCX0sCiAJewkvKiBNQ1A1MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTYpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE4KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIxKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI3KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzYpLApAQCAtNjE4NCwxNSArNjMwNiwxNSBAQAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM4KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJezAsfSwKIH07CkBAIC02MjIwLDcgKzYzNDIsNyBAQAogbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2ludGVycnVwdF93b3JrLCAiZm9yY2VkZXRoIG1heGltdW0gZXZlbnRzIGhhbmRsZWQgcGVyIGludGVycnVwdCIpOwogbW9kdWxlX3BhcmFtKG9wdGltaXphdGlvbl9tb2RlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4iKTsKK01PRFVMRV9QQVJNX0RFU0Mob3B0aW1pemF0aW9uX21vZGUsICJJbiB0aHJvdWdocHV0IG1vZGUgKDApLCBldmVyeSB0eCAmIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4gSW4gQ1BVIG1vZGUgKDEpLCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuIEluIGR5bmFtaWMgbW9kZSAoMiksIHRoZSBtb2RlIHRvZ2dsZXMgYmV0d2VlbiB0aHJvdWdocHV0IGFuZCBDUFUgbW9kZSBiYXNlZCBvbiBuZXR3b3JrIGxvYWQuIik7CiBtb2R1bGVfcGFyYW0ocG9sbF9pbnRlcnZhbCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocG9sbF9pbnRlcnZhbCwgIkludGVydmFsIGRldGVybWluZXMgaG93IGZyZXF1ZW50IHRpbWVyIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgWyh0aW1lX2luX21pY3JvX3NlY3MgKiAxMDApIC8gKDJeMTApXS4gTWluIGlzIDAgYW5kIE1heCBpcyA2NTUzNS4iKTsKIG1vZHVsZV9wYXJhbShtc2ksIGludCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCBjZTkwMGU1Li5iMDM3Y2U5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAogCWlmIChyZWNlaXZlZCA8IGJ1ZGdldCkgewogCQkvKiBkb25lICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkoKmZlcC0+b3BzLT5uYXBpX2VuYWJsZV9yeCkoZGV2KTsKIAl9CiAJcmV0dXJuIHJlY2VpdmVkOwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCQkJLyogTk9URTogaXQgaXMgcG9zc2libGUgZm9yIEZDQ3MgaW4gTkFQSSBtb2RlICAgICovCiAJCQkJLyogdG8gc3VibWl0IGEgc3B1cmlvdXMgaW50ZXJydXB0IHdoaWxlIGluIHBvbGwgICovCiAJCQkJaWYgKG5hcGlfb2spCi0JCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmZlcC0+bmFwaSk7CisJCQkJCV9fbmFwaV9zY2hlZHVsZSgmZmVwLT5uYXBpKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA3OWE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtMCwwICsxLDQ2OCBAQAorLyoKKyAqIEZyZWVzY2FsZSBQb3dlclFVSUNDIEV0aGVybmV0IERyaXZlciAtLSBNSUlNIGJ1cyBpbXBsZW1lbnRhdGlvbgorICogUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJTSByZWdzCisgKgorICogQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIEJhc2VkIG9uIGdpYW5mYXJfbWlpLmMgYW5kIHVjY19nZXRoX21paS5jIChMaSBZYW5nLCBLaW0gUGhpbGxpcHMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VjYy5oPgorCisjaW5jbHVkZSAiZ2lhbmZhci5oIgorI2luY2x1ZGUgImZzbF9wcV9tZGlvLmgiCisKKy8qCisgKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCisgKiBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKyAqIGdlbmVyaWMgbWRpbyBidXMgKHRpZWQgdG8gYSBzaW5nbGUgaW50ZXJmYWNlKSwgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMKKyAqIGRvbmUgYmVmb3JlIHJldHVybmluZy4gVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQorICogdGhlIFRCSSB3aGljaCBjb250cm9sIGludGVyZmFjZXMgbGlrZSBvbmNoaXAgU0VSREVTIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8KKyAqIHRoZSBsb2NhbCBtZGlvIHBpbnMsIHdoaWNoIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvcgorICogY29udHJvbGxpbmcgdGhlIGV4dGVybmFsIFBIWXMsIGZvciBleGFtcGxlLgorICovCitpbnQgZnNsX3BxX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCisJCWludCByZWdudW0sIHUxNiB2YWx1ZSkKK3sKKwkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHdyaXRlICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsIChtaWlfaWQgPDwgOCkgfCByZWdudW0pOworCisJLyogV3JpdGUgb3V0IHRoZSB2YWx1ZSB3ZSB3YW50ICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KKwl3aGlsZSAoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBidXMgZm9yIFBIWSBhdCBhZGRyIG1paV9pZCwgcmVnaXN0ZXIgcmVnbnVtLCBhbmQKKyAqIHJldHVybiB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgb3BlcmF0aW9uCisgKiBkb25lIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwKKyAqIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZ2VuZXJpYyBtZGlvIGJ1cworICogVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQorICogdGhlIFRCSSB3aGljaCwgaW4gdHVybiwgY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUworICogYW5kIGFyZSBhbHdheXMgdGllZCB0byB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZQorICogc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZWcuCisgKi8KK2ludCBmc2xfcHFfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLAorCQlpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXUxNiB2YWx1ZTsKKworCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gcmVhZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKKworCS8qIENsZWFyIG1paW1jb20sIGFuZCB0aGVuIGluaXRpYXRlIGEgcmVhZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCAwKTsKKwlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgTUlJX1JFQURfQ09NTUFORCk7CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCisJd2hpbGUgKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgKE1JSU1JTkRfTk9UVkFMSUQgfCBNSUlNSU5EX0JVU1kpKQorCQljcHVfcmVsYXgoKTsKKworCS8qIEdyYWIgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBmcm9tIG1paW1zdGF0ICovCisJdmFsdWUgPSBpbl9iZTMyKCZyZWdzLT5taWltc3RhdCk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCisgKiBvbiB0aGUgYnVzLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSByZXR1cm5pbmcuCisgKi8KK2ludCBmc2xfcHFfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCisJLyogV3JpdGUgdG8gdGhlIGxvY2FsIE1JSSByZWdzICovCisJcmV0dXJuKGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHJlZ3MsIG1paV9pZCwgcmVnbnVtLCB2YWx1ZSkpOworfQorCisvKgorICogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCisgKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuCisgKi8KK2ludCBmc2xfcHFfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCisJLyogUmVhZCB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KKwlyZXR1cm4oZnNsX3BxX2xvY2FsX21kaW9fcmVhZChyZWdzLCBtaWlfaWQsIHJlZ251bSkpOworfQorCisvKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7CisJaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOworCisJbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOworCisJLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfUkVTRVQpOworCisJLyogU2V0dXAgdGhlIE1JSSBNZ210IGNsb2NrIHNwZWVkICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfSU5JVF9WQUxVRSk7CisKKwkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLworCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpICYmIHRpbWVvdXQtLSkKKwkJY3B1X3JlbGF4KCk7CisKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCWlmICh0aW1lb3V0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsCisJCQkJYnVzLT5uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogQWxsb2NhdGUgYW4gYXJyYXkgd2hpY2ggcHJvdmlkZXMgaXJxICNzIGZvciBlYWNoIFBIWSBvbiB0aGUgZ2l2ZW4gYnVzICovCitzdGF0aWMgaW50ICpjcmVhdGVfaXJxX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWludCAqaXJxczsKKwlpbnQgaTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKKworCWlycXMgPSBrY2FsbG9jKFBIWV9NQVhfQUREUiwgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCisJaWYgKCFpcnFzKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKKwkJaXJxc1tpXSA9IFBIWV9QT0xMOworCisJd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wLCBjaGlsZCkpICE9IE5VTEwpIHsKKwkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKKwkJY29uc3QgdTMyICppZDsKKworCQlpZiAoaXJxID09IE5PX0lSUSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CisKKwkJaWYgKCFpZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqaWQgPCBQSFlfTUFYX0FERFIgJiYgKmlkID49IDApCisJCQlpcnFzWyppZF0gPSBpcnE7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCisJCQkJCSIlZCBpcyBub3QgYSB2YWxpZCBQSFkgYWRkcmVzc1xuIiwKKwkJCQkJbnAtPmZ1bGxfbmFtZSwgKmlkKTsKKwl9CisKKwlyZXR1cm4gaXJxczsKK30KKwordm9pZCBmc2xfcHFfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWNvbnN0IHUzMiAqYWRkcjsKKwl1NjQgdGFkZHIgPSBPRl9CQURfQUREUjsKKworCWFkZHIgPSBvZl9nZXRfYWRkcmVzcyhucCwgMCwgTlVMTCwgTlVMTCk7CisJaWYgKGFkZHIpCisJCXRhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIGFkZHIpOworCisJc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJWxseCIsIG5wLT5uYW1lLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXRhZGRyKTsKK30KKworLyogU2NhbiB0aGUgYnVzIGluIHJldmVyc2UsIGxvb2tpbmcgZm9yIGFuIGVtcHR5IHNwb3QgKi8KK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fZmluZF9mcmVlKHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzKQoreworCWludCBpOworCisJZm9yIChpID0gUEhZX01BWF9BRERSOyBpID4gMDsgaS0tKSB7CisJCXUzMiBwaHlfaWQ7CisKKwkJaWYgKGdldF9waHlfaWQobmV3X2J1cywgaSwgJnBoeV9pZCkpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKHBoeV9pZCA9PSAweGZmZmZmZmZmKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGk7Cit9CisKKworI2lmZGVmIENPTkZJR19HSUFORkFSCitzdGF0aWMgdTMyIF9faW9tZW0gKmdldF9nZmFyX3RiaXBhKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzKQoreworCXN0cnVjdCBnZmFyIF9faW9tZW0gKmVuZXRfcmVnczsKKworCS8qCisJICogVGhpcyBpcyBtaWxkbHkgZXZpbCwgYnV0IHNvIGlzIG91ciBoYXJkd2FyZSBmb3IgZG9pbmcgdGhpcy4KKwkgKiBBbHNvLCB3ZSBoYXZlIHRvIGNhc3QgYmFjayB0byBzdHJ1Y3QgZ2ZhciBiZWNhdXNlIG9mCisJICogZGVmaW5pdGlvbiB3ZWlyZG5lc3MgZG9uZSBpbiBnaWFuZmFyLmguCisJICovCisJZW5ldF9yZWdzID0gKHN0cnVjdCBnZmFyIF9faW9tZW0gKikKKwkJKChjaGFyIF9faW9tZW0gKilyZWdzIC0gb2Zmc2V0b2Yoc3RydWN0IGdmYXIsIGdmYXJfbWlpX3JlZ3MpKTsKKworCXJldHVybiAmZW5ldF9yZWdzLT50YmlwYTsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfVUNDX0dFVEgKK3N0YXRpYyBpbnQgZ2V0X3VjY19pZF9mb3JfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgZW5kLCB1MzIgKnVjY19pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgInVjY19nZXRoIikgeworCQlzdHJ1Y3QgcmVzb3VyY2UgdGVtcHJlczsKKworCQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmdGVtcHJlcyk7CisJCWlmIChlcnIpCisJCQljb250aW51ZTsKKworCQkvKiBpZiBvdXIgbWRpbyByZWdzIGZhbGwgd2l0aGluIHRoaXMgVUNDIHJlZ3MgcmFuZ2UgKi8KKwkJaWYgKChzdGFydCA+PSB0ZW1wcmVzLnN0YXJ0KSAmJiAoZW5kIDw9IHRlbXByZXMuZW5kKSkgeworCQkJLyogRmluZCB0aGUgaWQgb2YgdGhlIFVDQyAqLworCQkJY29uc3QgdTMyICppZDsKKworCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjZWxsLWluZGV4IiwgTlVMTCk7CisJCQlpZiAoIWlkKSB7CisJCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJCQlpZiAoIWlkKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJKnVjY19pZCA9ICppZDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKworCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICp0Ymk7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3M7CisJdTMyIF9faW9tZW0gKnRiaXBhOworCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOworCWludCB0YmlhZGRyID0gLTE7CisJdTY0IGFkZHIsIHNpemU7CisJaW50IGVyciA9IDA7CisKKwluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOworCWlmIChOVUxMID09IG5ld19idXMpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV3X2J1cy0+bmFtZSA9ICJGcmVlc2NhbGUgUG93ZXJRVUlDQyBNSUkgQnVzIiwKKwluZXdfYnVzLT5yZWFkID0gJmZzbF9wcV9tZGlvX3JlYWQsCisJbmV3X2J1cy0+d3JpdGUgPSAmZnNsX3BxX21kaW9fd3JpdGUsCisJbmV3X2J1cy0+cmVzZXQgPSAmZnNsX3BxX21kaW9fcmVzZXQsCisJZnNsX3BxX21kaW9fYnVzX25hbWUobmV3X2J1cy0+aWQsIG5wKTsKKworCS8qIFNldCB0aGUgUEhZIGJhc2UgYWRkcmVzcyAqLworCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgb2ZfZ2V0X2FkZHJlc3MobnAsIDAsICZzaXplLCBOVUxMKSk7CisJcmVncyA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7CisKKwlpZiAoTlVMTCA9PSByZWdzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfYnVzOworCX0KKworCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKKworCW5ld19idXMtPmlycSA9IGNyZWF0ZV9pcnFfbWFwKG5wKTsKKworCWlmIChOVUxMID09IG5ld19idXMtPmlycSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl91bm1hcF9yZWdzOworCX0KKworCW5ld19idXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmV3X2J1cyk7CisKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItdGJpIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZ2lhbmZhciIpKSB7CisjaWZkZWYgQ09ORklHX0dJQU5GQVIKKwkJdGJpcGEgPSBnZXRfZ2Zhcl90YmlwYShyZWdzKTsKKyNlbHNlCisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKyNlbmRpZgorCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsdWNjLW1kaW8iKSB8fAorCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJ1Y2NfZ2V0aF9waHkiKSkgeworI2lmZGVmIENPTkZJR19VQ0NfR0VUSAorCQl1MzIgaWQ7CisKKwkJdGJpcGEgPSAmcmVncy0+dXRiaXBhcjsKKworCQlpZiAoKGVyciA9IGdldF91Y2NfaWRfZm9yX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCAmaWQpKSkKKwkJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKworCQl1Y2Nfc2V0X3FlX211eF9taWlfbW5nKGlkIC0gMSk7CisjZWxzZQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisjZW5kaWYKKwl9IGVsc2UgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisJfQorCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgdGJpKSB7CisJCWlmICghc3RybmNtcCh0YmktPnR5cGUsICJ0YmktcGh5IiwgOCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodGJpKSB7CisJCWNvbnN0IHUzMiAqcHJvcCA9IG9mX2dldF9wcm9wZXJ0eSh0YmksICJyZWciLCBOVUxMKTsKKworCQlpZiAocHJvcCkKKwkJCXRiaWFkZHIgPSAqcHJvcDsKKwl9CisKKwlpZiAodGJpYWRkciA9PSAtMSkgeworCQlvdXRfYmUzMih0YmlwYSwgMCk7CisKKwkJdGJpYWRkciA9IGZzbF9wcV9tZGlvX2ZpbmRfZnJlZShuZXdfYnVzKTsKKwl9CisKKwkvKgorCSAqIFdlIGRlZmluZSBUQklQQSBhdCAwIHRvIGJlIGlsbGVnYWwsIG9wdGluZyB0byBmYWlsIGZvciBib2FyZHMgdGhhdAorCSAqIGhhdmUgUEhZcyBhdCAxLTMxLCByYXRoZXIgdGhhbiBjaGFuZ2UgdGJpcGEgYW5kIHJlc2Nhbi4KKwkgKi8KKwlpZiAodGJpYWRkciA9PSAwKSB7CisJCWVyciA9IC1FQlVTWTsKKworCQlnb3RvIGVycl9mcmVlX2lycXM7CisJfQorCisJb3V0X2JlMzIodGJpcGEsIHRiaWFkZHIpOworCisJLyoKKwkgKiBUaGUgVEJJUEhZLW9ubHkgYnVzZXMgd2lsbCBmaW5kIFBIWXMgYXQgZXZlcnkgYWRkcmVzcywKKwkgKiBzbyB3ZSBtYXNrIHRoZW0gYWxsIGJ1dCB0aGUgVEJJCisJICovCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSkKKwkJbmV3X2J1cy0+cGh5X21hc2sgPSB+KDEgPDwgdGJpYWRkcik7CisKKwllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOworCisJaWYgKGVycikgeworCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAorCQkJCW5ld19idXMtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycXM6CisJa2ZyZWUobmV3X2J1cy0+aXJxKTsKK2Vycl91bm1hcF9yZWdzOgorCWlvdW5tYXAocmVncyk7CitlcnJfZnJlZV9idXM6CisJa2ZyZWUobmV3X2J1cyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOworCisJZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CisKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilidXMtPnByaXYpOworCWJ1cy0+cHJpdiA9IE5VTEw7CisJbWRpb2J1c19mcmVlKGJ1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX3BxX21kaW9fbWF0Y2hbXSA9IHsKKwl7CisJCS50eXBlID0gIm1kaW8iLAorCQkuY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aF9waHkiLAorCX0sCisJeworCQkudHlwZSA9ICJtZGlvIiwKKwkJLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmc2xfcHFfbWRpb19kcml2ZXIgPSB7CisJLm5hbWUgPSAiZnNsLXBxX21kaW8iLAorCS5wcm9iZSA9IGZzbF9wcV9tZGlvX3Byb2JlLAorCS5yZW1vdmUgPSBmc2xfcHFfbWRpb19yZW1vdmUsCisJLm1hdGNoX3RhYmxlID0gZnNsX3BxX21kaW9fbWF0Y2gsCit9OworCitpbnQgX19pbml0IGZzbF9wcV9tZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmc2xfcHFfbWRpb19kcml2ZXIpOworfQorCit2b2lkIGZzbF9wcV9tZGlvX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsX3BxX21kaW9fZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbF9zeW5jKGZzbF9wcV9tZGlvX2luaXQpOworbW9kdWxlX2V4aXQoZnNsX3BxX21kaW9fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5oIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRhZDUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogRnJlZXNjYWxlIFBvd2VyUVVJQ0MgTURJTyBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCisgKiBEcml2ZXIgZm9yIHRoZSBNRElPIGJ1cyBjb250cm9sbGVyIG9uIEZyZWVzY2FsZSBQb3dlclFVSUNDIHByb2Nlc3NvcnMKKyAqCisgKiBBdXRob3I6IEFuZHkgRmxlbWluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2lmbmRlZiBfX0ZTTF9QUV9NRElPX0gKKyNkZWZpbmUgX19GU0xfUFFfTURJT19ICisKKyNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNSUlNSU5EX05PVFZBTElEICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1JSU1DRkdfSU5JVF9WQUxVRQkweDAwMDAwMDA3CisjZGVmaW5lIE1JSU1DRkdfUkVTRVQgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBNSUlfUkVBRF9DT01NQU5EICAgICAgIDB4MDAwMDAwMDEKKworc3RydWN0IGZzbF9wcV9tZGlvIHsKKwl1MzIgbWlpbWNmZzsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gcmVnICovCisJdTMyIG1paW1jb207CQkvKiBNSUkgbWFuYWdlbWVudCBjb21tYW5kIHJlZyAqLworCXUzMiBtaWltYWRkOwkJLyogTUlJIG1hbmFnZW1lbnQgYWRkcmVzcyByZWcgKi8KKwl1MzIgbWlpbWNvbjsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnICovCisJdTMyIG1paW1zdGF0OwkJLyogTUlJIG1hbmFnZW1lbnQgc3RhdHVzIHJlZyAqLworCXUzMiBtaWltaW5kOwkJLyogTUlJIG1hbmFnZW1lbnQgaW5kaWNhdGlvbiByZWcgKi8KKwl1OCByZXNlcnZlZFsyOF07CS8qIFNwYWNlIGhvbGRlciAqLworCXUzMiB1dGJpcGFyOwkJLyogVEJJIHBoeSBhZGRyZXNzIHJlZyAob25seSBvbiBVQ0MpICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitpbnQgZnNsX3BxX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK2ludCBmc2xfcHFfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAorCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pOworaW50IF9faW5pdCBmc2xfcHFfbWRpb19pbml0KHZvaWQpOwordm9pZCBmc2xfcHFfbWRpb19leGl0KHZvaWQpOwordm9pZCBmc2xfcHFfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKKyNlbmRpZiAvKiBGU0xfUFFfTURJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggOTgzMWIzZi4uNmEzODgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtOTMsNyArOTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlICJnaWFuZmFyLmgiCi0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKKyNpbmNsdWRlICJmc2xfcHFfbWRpby5oIgogCiAjZGVmaW5lIFRYX1RJTUVPVVQgICAgICAoMSpIWikKICN1bmRlZiBCUklFRl9HRkFSX0VSUk9SUwpAQCAtMTQwLDEzICsxNDAsMjYgQEAKIHZvaWQgZ2Zhcl9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfY2xlYXJfZXhhY3RfbWF0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX3NldF9tYWNfZm9yX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSwgdTggKmFkZHIpOwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGdmYXJfZXRodG9vbF9vcHM7CitzdGF0aWMgaW50IGdmYXJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiAKIE1PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZmFyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2Zhcl9lbmV0X29wZW4sCisJLm5kb19zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0LAorCS5uZG9fc3RvcCA9IGdmYXJfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGksCisJLm5kb190eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0LAorCS5uZG9fZG9faW9jdGwgPSBnZmFyX2lvY3RsLAorCS5uZG9fdmxhbl9yeF9yZWdpc3RlciA9IGdmYXJfdmxhbl9yeF9yZWdpc3RlciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2Zhcl9uZXRwb2xsLAorI2VuZGlmCit9OworCiAvKiBSZXR1cm5zIDEgaWYgaW5jb21pbmcgZnJhbWVzIHVzZSBhbiBGQ0IgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdmYXJfdXNlc19mY2Ioc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTE2Niw2ICsxNzksOSBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwcml2LT5ub2RlOwogCWNoYXIgYnVzX25hbWVbTUlJX0JVU19JRF9TSVpFXTsKKwljb25zdCB1MzIgKnN0YXNoOworCWNvbnN0IHUzMiAqc3Rhc2hfbGVuOworCWNvbnN0IHUzMiAqc3Rhc2hfaWR4OwogCiAJaWYgKCFucCB8fCAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTk1LDYgKzIxMSwyNiBAQAogCQl9CiAJfQogCisJc3Rhc2ggPSBvZl9nZXRfcHJvcGVydHkobnAsICJiZC1zdGFzaCIsIE5VTEwpOworCisJaWYoc3Rhc2gpIHsKKwkJcHJpdi0+ZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkc7CisJCXByaXYtPmJkX3N0YXNoX2VuID0gMTsKKwl9CisKKwlzdGFzaF9sZW4gPSBvZl9nZXRfcHJvcGVydHkobnAsICJyeC1zdGFzaC1sZW4iLCBOVUxMKTsKKworCWlmIChzdGFzaF9sZW4pCisJCXByaXYtPnJ4X3N0YXNoX3NpemUgPSAqc3Rhc2hfbGVuOworCisJc3Rhc2hfaWR4ID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicngtc3Rhc2gtaWR4IiwgTlVMTCk7CisKKwlpZiAoc3Rhc2hfaWR4KQorCQlwcml2LT5yeF9zdGFzaF9pbmRleCA9ICpzdGFzaF9pZHg7CisKKwlpZiAoc3Rhc2hfbGVuIHx8IHN0YXNoX2lkeCkKKwkJcHJpdi0+ZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HOworCiAJbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MobnApOwogCWlmIChtYWNfYWRkcikKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG1hY19hZGRyLCBNQUNfQUREUl9MRU4pOwpAQCAtMjU1LDcgKzI5MSw3IEBACiAJCW9mX25vZGVfcHV0KHBoeSk7CiAJCW9mX25vZGVfcHV0KG1kaW8pOwogCi0JCWdmYXJfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CisJCWZzbF9wcV9tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKIAkJc25wcmludGYocHJpdi0+cGh5X2J1c19pZCwgc2l6ZW9mKHByaXYtPnBoeV9idXNfaWQpLCAiJXM6JTAyeCIsCiAJCQkJYnVzX25hbWUsICppZCk7CiAJfQpAQCAtMzI5LDggKzM2NSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPmRldiA9IGRldjsKKwlwcml2LT5uZGV2ID0gZGV2OworCXByaXYtPm9mZGV2ID0gb2ZkZXY7CiAJcHJpdi0+bm9kZSA9IG9mZGV2LT5ub2RlOworCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCiAJZXJyID0gZ2Zhcl9vZl9pbml0KGRldik7CiAKQEAgLTM2OSwyMSArNDA3LDEyIEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb2ZkZXYtPmRldik7CiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCi0JZGV2LT5vcGVuID0gZ2Zhcl9lbmV0X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBnZmFyX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIGdmYXJfcG9sbCwgR0ZBUl9ERVZfV0VJR0hUKTsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZ2Zhcl9uZXRwb2xsOwotI2VuZGlmCi0JZGV2LT5zdG9wID0gZ2Zhcl9jbG9zZTsKLQlkZXYtPmNoYW5nZV9tdHUgPSBnZmFyX2NoYW5nZV9tdHU7CiAJZGV2LT5tdHUgPSAxNTAwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGk7CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmZ2Zhcl9uZXRkZXZfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmZ2Zhcl9ldGh0b29sX29wczsKLQlkZXYtPmRvX2lvY3RsID0gZ2Zhcl9pb2N0bDsKIAogCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pIHsKIAkJcHJpdi0+cnhfY3N1bV9lbmFibGUgPSAxOwpAQCAtMzkzLDExICs0MjIsOCBAQAogCiAJcHJpdi0+dmxncnAgPSBOVUxMOwogCi0JaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikgewotCQlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0KKwlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQl9CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIKSB7CiAJCXByaXYtPmV4dGVuZGVkX2hhc2ggPSAxOwpAQCAtNDI1LDcgKzQ1MSw3IEBACiAJCXByaXYtPmhhc2hfd2lkdGggPSA4OwogCiAJCXByaXYtPmhhc2hfcmVnc1swXSA9ICZwcml2LT5yZWdzLT5nYWRkcjA7Ci0gICAgICAgICAgICAgICAgcHJpdi0+aGFzaF9yZWdzWzFdID0gJnByaXYtPnJlZ3MtPmdhZGRyMTsKKwkJcHJpdi0+aGFzaF9yZWdzWzFdID0gJnByaXYtPnJlZ3MtPmdhZGRyMTsKIAkJcHJpdi0+aGFzaF9yZWdzWzJdID0gJnByaXYtPnJlZ3MtPmdhZGRyMjsKIAkJcHJpdi0+aGFzaF9yZWdzWzNdID0gJnByaXYtPnJlZ3MtPmdhZGRyMzsKIAkJcHJpdi0+aGFzaF9yZWdzWzRdID0gJnByaXYtPnJlZ3MtPmdhZGRyNDsKQEAgLTQ2Niw2ICs0OTIsOSBAQAogCQlnb3RvIHJlZ2lzdGVyX2ZhaWw7CiAJfQogCisJZGV2aWNlX2luaXRfd2FrZXVwKCZkZXYtPmRldiwKKwkJcHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQpOworCiAJLyogZmlsbCBvdXQgSVJRIG51bWJlciBhbmQgbmFtZSBmaWVsZHMgKi8KIAlsZW5fZGV2bmFtZSA9IHN0cmxlbihkZXYtPm5hbWUpOwogCXN0cm5jcHkoJnByaXYtPmludF9uYW1lX3R4WzBdLCBkZXYtPm5hbWUsIGxlbl9kZXZuYW1lKTsKQEAgLTUxMSw3ICs1NDAsNyBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgTlVMTCk7CiAKIAlpb3VubWFwKHByaXYtPnJlZ3MpOwotCWZyZWVfbmV0ZGV2KHByaXYtPmRldik7CisJZnJlZV9uZXRkZXYocHJpdi0+bmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMCw3ICs1NDksNyBAQAogc3RhdGljIGludCBnZmFyX3N1c3BlbmQoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXB2YWw7CiAKQEAgLTU2OSw3ICs1OTgsNyBAQAogc3RhdGljIGludCBnZmFyX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXB2YWw7CiAJaW50IG1hZ2ljX3BhY2tldCA9IHByaXYtPndvbF9lbiAmJgpAQCAtODM4LDEyICs4NjcsMTIgQEAKIAkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CiAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFJlY2VpdmUsIGRldik7CiAJfSBlbHNlIHsKLSAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0LCBkZXYpOworCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKIAl9CiAKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiAKLQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsCisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHR4YmQ4KSpwcml2LT50eF9yaW5nX3NpemUKIAkJCSsgc2l6ZW9mKHN0cnVjdCByeGJkOCkqcHJpdi0+cnhfcmluZ19zaXplLAogCQkJcHJpdi0+dHhfYmRfYmFzZSwKQEAgLTg2NSwxMiArODk0LDEyIEBACiAJCWlmICghcHJpdi0+dHhfc2tidWZmW2ldKQogCQkJY29udGludWU7CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCiAJCQkJdHhiZHAtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCXR4YmRwLT5sc3RhdHVzID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IHNrYl9zaGluZm8ocHJpdi0+dHhfc2tidWZmW2ldKS0+bnJfZnJhZ3M7IGorKykgewogCQkJdHhiZHArKzsKLQkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5kZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKKwkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAogCQkJCQl0eGJkcC0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAkJfQogCQl0eGJkcCsrOwpAQCAtODg3LDcgKzkxNiw3IEBACiAJaWYocHJpdi0+cnhfc2tidWZmICE9IE5VTEwpIHsKIAkJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCQlpZiAocHJpdi0+cnhfc2tidWZmW2ldKSB7Ci0JCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHJ4YmRwLT5idWZQdHIsCisJCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgcnhiZHAtPmJ1ZlB0ciwKIAkJCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLAogCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIApAQCAtOTUzLDcgKzk4Miw3IEBACiAJZ2Zhcl93cml0ZSgmcmVncy0+aW1hc2ssIElNQVNLX0lOSVRfQ0xFQVIpOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0JdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPmRldiwKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBkbWFfYWxsb2NfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2YgKHN0cnVjdCB0eGJkOCkgKiBwcml2LT50eF9yaW5nX3NpemUgKwogCQkJc2l6ZW9mIChzdHJ1Y3QgcnhiZDgpICogcHJpdi0+cnhfcmluZ19zaXplLAogCQkJJmFkZHIsIEdGUF9LRVJORUwpOwpAQCAtMTE2NSw3ICsxMTk0LDcgQEAKIHJ4X3NrYl9mYWlsOgogCWZyZWVfc2tiX3Jlc291cmNlcyhwcml2KTsKIHR4X3NrYl9mYWlsOgotCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCXNpemVvZihzdHJ1Y3QgdHhiZDgpKnByaXYtPnR4X3Jpbmdfc2l6ZQogCQkJKyBzaXplb2Yoc3RydWN0IHJ4YmQ4KSpwcml2LT5yeF9yaW5nX3NpemUsCiAJCQlwcml2LT50eF9iZF9iYXNlLApAQCAtMTE4Myw2ICsxMjEyLDggQEAKIAogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3JlY3ljbGUpOworCiAJLyogSW5pdGlhbGl6ZSBhIGJ1bmNoIG9mIHJlZ2lzdGVycyAqLwogCWluaXRfcmVnaXN0ZXJzKGRldik7CiAKQEAgLTEyMDMsMTMgKzEyMzQsMTQgQEAKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCBwcml2LT53b2xfZW4pOworCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdHhmY2IgKmdmYXJfYWRkX2ZjYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCB0eGZjYiAqZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoIChza2IsIEdNQUNfRkNCX0xFTik7Ci0KKwlzdHJ1Y3QgdHhmY2IgKmZjYiA9IChzdHJ1Y3QgdHhmY2IgKilza2JfcHVzaChza2IsIEdNQUNfRkNCX0xFTik7CiAJY2FjaGVhYmxlX21lbXplcm8oZmNiLCBHTUFDX0ZDQl9MRU4pOwogCiAJcmV0dXJuIGZjYjsKQEAgLTEyNzgsNiArMTMxMCwyMiBAQAogCiAJYmFzZSA9IHByaXYtPnR4X2JkX2Jhc2U7CiAKKwkvKiBtYWtlIHNwYWNlIGZvciBhZGRpdGlvbmFsIGhlYWRlciB3aGVuIGZjYiBpcyBuZWVkZWQgKi8KKwlpZiAoKChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB8fAorCQkJKHByaXYtPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkpICYmCisJCQkoc2tiX2hlYWRyb29tKHNrYikgPCBHTUFDX0ZDQl9MRU4pKSB7CisJCXN0cnVjdCBza19idWZmICpza2JfbmV3OworCisJCXNrYl9uZXcgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIEdNQUNfRkNCX0xFTik7CisJCWlmICghc2tiX25ldykgeworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJfQorCQlrZnJlZV9za2Ioc2tiKTsKKwkJc2tiID0gc2tiX25ldzsKKwl9CisKIAkvKiB0b3RhbCBudW1iZXIgb2YgZnJhZ21lbnRzIGluIHRoZSBTS0IgKi8KIAlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAKQEAgLTEzMTQsNyArMTM2Miw3IEBACiAJCQlpZiAoaSA9PSBucl9mcmFncyAtIDEpCiAJCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0xBU1QgfCBUWEJEX0lOVEVSUlVQVCk7CiAKLQkJCWJ1ZmFkZHIgPSBkbWFfbWFwX3BhZ2UoJmRldi0+ZGV2LAorCQkJYnVmYWRkciA9IGRtYV9tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlLAogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQlsZW5ndGgsCkBAIC0xMzQ2LDcgKzEzOTQsNyBAQAogCiAJLyogc2V0dXAgdGhlIFR4QkQgbGVuZ3RoIGFuZCBidWZmZXIgcG9pbnRlciBmb3IgdGhlIGZpcnN0IEJEICovCiAJcHJpdi0+dHhfc2tidWZmW3ByaXYtPnNrYl9jdXJ0eF0gPSBza2I7Ci0JdHhiZHBfc3RhcnQtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCXR4YmRwX3N0YXJ0LT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgc2tiLT5kYXRhLAogCQkJc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CiAKIAlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfQ1JDIHwgVFhCRF9SRUFEWSkgfCBza2JfaGVhZGxlbihza2IpOwpAQCAtMTM4OSw3ICsxNDM3LDcgQEAKIAkvKiBVbmxvY2sgcHJpdiAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogU3RvcHMgdGhlIGtlcm5lbCBxdWV1ZSwgYW5kIGhhbHRzIHRoZSBjb250cm9sbGVyICovCkBAIC0xMzk5LDYgKzE0NDcsNyBAQAogCiAJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKIAorCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+cnhfcmVjeWNsZSk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cmVzZXRfdGFzayk7CiAJc3RvcF9nZmFyKGRldik7CiAKQEAgLTE1MzEsNyArMTU4MCw3IEBACiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlLAogCQkJcmVzZXRfdGFzayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCXN0b3BfZ2ZhcihkZXYpOwpAQCAtMTU3OCw3ICsxNjI3LDcgQEAKIAkJCQkobHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSkKIAkJCWJyZWFrOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+ZGV2LAorCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LAogCQkJCWJkcC0+YnVmUHRyLAogCQkJCWJkcC0+bGVuZ3RoLAogCQkJCURNQV9UT19ERVZJQ0UpOwpAQCAtMTU4Nyw3ICsxNjM2LDcgQEAKIAkJYmRwID0gbmV4dF90eGJkKGJkcCwgYmFzZSwgdHhfcmluZ19zaXplKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgZnJhZ3M7IGkrKykgewotCQkJZG1hX3VubWFwX3BhZ2UoJmRldi0+ZGV2LAorCQkJZG1hX3VubWFwX3BhZ2UoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQkJCWJkcC0+YnVmUHRyLAogCQkJCQliZHAtPmxlbmd0aCwKIAkJCQkJRE1BX1RPX0RFVklDRSk7CkBAIC0xNTk1LDcgKzE2NDQsMTcgQEAKIAkJCWJkcCA9IG5leHRfdHhiZChiZHAsIGJhc2UsIHR4X3Jpbmdfc2l6ZSk7CiAJCX0KIAotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkvKgorCQkgKiBJZiB0aGVyZSdzIHJvb20gaW4gdGhlIHF1ZXVlIChsaW1pdCBpdCB0byByeF9idWZmZXJfc2l6ZSkKKwkJICogd2UgYWRkIHRoaXMgc2tiIGJhY2sgaW50byB0aGUgcG9vbCwgaWYgaXQncyB0aGUgcmlnaHQgc2l6ZQorCQkgKi8KKwkJaWYgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3JlY3ljbGUpIDwgcHJpdi0+cnhfcmluZ19zaXplICYmCisJCQkJc2tiX3JlY3ljbGVfY2hlY2soc2tiLCBwcml2LT5yeF9idWZmZXJfc2l6ZSArCisJCQkJCVJYQlVGX0FMSUdOTUVOVCkpCisJCQlfX3NrYl9xdWV1ZV9oZWFkKCZwcml2LT5yeF9yZWN5Y2xlLCBza2IpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCiAJCXByaXYtPnR4X3NrYnVmZltza2JfZGlydHl0eF0gPSBOVUxMOwogCiAJCXNrYl9kaXJ0eXR4ID0gKHNrYl9kaXJ0eXR4ICsgMSkgJgpAQCAtMTYyNiw5ICsxNjg1LDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAJc3Bpbl9sb2NrKCZwcml2LT5yeGxvY2spOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aW1hc2ssIElNQVNLX1JUWF9ESVNBQkxFRCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnByaXYtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIENsZWFyIElFVkVOVCwgc28gaW50ZXJydXB0cyBhcmVuJ3QgY2FsbGVkIGFnYWluCkBAIC0xNjU0LDcgKzE3MTMsNyBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBsc3RhdHVzOwogCi0JYmRwLT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwliZHAtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCBza2ItPmRhdGEsCiAJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAogCWxzdGF0dXMgPSBCRF9MRkxBRyhSWEJEX0VNUFRZIHwgUlhCRF9JTlRFUlJVUFQpOwpAQCAtMTY3NCw4ICsxNzMzLDEwIEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAKLQkvKiBXZSBoYXZlIHRvIGFsbG9jYXRlIHRoZSBza2IsIHNvIGtlZXAgdHJ5aW5nIHRpbGwgd2Ugc3VjY2VlZCAqLwotCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBwcml2LT5yeF9idWZmZXJfc2l6ZSArIFJYQlVGX0FMSUdOTUVOVCk7CisJc2tiID0gX19za2JfZGVxdWV1ZSgmcHJpdi0+cnhfcmVjeWNsZSk7CisJaWYgKCFza2IpCisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LAorCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplICsgUlhCVUZfQUxJR05NRU5UKTsKIAogCWlmICghc2tiKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE4MTIsNyArMTg3Myw3IEBACiAKIAkJc2tiID0gcHJpdi0+cnhfc2tidWZmW3ByaXYtPnNrYl9jdXJyeF07CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIGJkcC0+YnVmUHRyLAorCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCBiZHAtPmJ1ZlB0ciwKIAkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAogCQkvKiBXZSBkcm9wIHRoZSBmcmFtZSBpZiB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgYSBuZXcgYnVmZmVyICovCkBAIC0xODIzLDcgKzE4ODQsNyBAQAogCQkJaWYgKHVubGlrZWx5KCFuZXdza2IpKQogCQkJCW5ld3NrYiA9IHNrYjsKIAkJCWVsc2UgaWYgKHNrYikKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCV9fc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnJ4X3JlY3ljbGUsIHNrYik7CiAJCX0gZWxzZSB7CiAJCQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBwYWNrZXRzICovCiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTE4MzUsNiArMTg5Niw4IEBACiAJCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwogCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAorCQkJCWlmIChpbl9pcnEoKSB8fCBpcnFzX2Rpc2FibGVkKCkpCisJCQkJCXByaW50aygiSW50ZXJydXB0IHByb2JsZW0hXG4iKTsKIAkJCQlnZmFyX3Byb2Nlc3NfZnJhbWUoZGV2LCBza2IsIGFtb3VudF9wdWxsKTsKIAogCQkJfSBlbHNlIHsKQEAgLTE4NzAsNyArMTkzMyw3IEBACiBzdGF0aWMgaW50IGdmYXJfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCWludCB0eF9jbGVhbmVkID0gMDsKIAlpbnQgcnhfY2xlYW5lZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE4OTEsNyArMTk1NCw3IEBACiAJCXJldHVybiBidWRnZXQ7CiAKIAlpZiAocnhfY2xlYW5lZCA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQkvKiBDbGVhciB0aGUgaGFsdCBiaXQgaW4gUlNUQVQgKi8KIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cnN0YXQsIFJTVEFUX0NMRUFSX1JIQUxUKTsKQEAgLTIzMDgsMjMgKzIzNzEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2Zhcl9pbml0KHZvaWQpCiB7Ci0JaW50IGVyciA9IGdmYXJfbWRpb19pbml0KCk7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmFyX2RyaXZlcik7Ci0KLQlpZiAoZXJyKQotCQlnZmFyX21kaW9fZXhpdCgpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmFyX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnZmFyX2V4aXQodm9pZCkKIHsKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2Zhcl9kcml2ZXIpOwotCWdmYXJfbWRpb19leGl0KCk7CiB9CiAKIG1vZHVsZV9pbml0KGdmYXJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggZWFhODY4OS4uZGQ0OTlkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgotI2luY2x1ZGUgImdpYW5mYXJfbWlpLmgiCiAKIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGJlIGhhbmRsZWQgaW4gb25lIGNhbGwgb2YgZ2Zhcl9wb2xsICovCiAjZGVmaW5lIEdGQVJfREVWX1dFSUdIVCA2NApAQCAtMTI2LDkgKzEyNSwxMiBAQAogI2RlZmluZSBERUZBVUxUX1JYX0NPQUxFU0NFIDAKICNkZWZpbmUgREVGQVVMVF9SWENPVU5UCTAKIAotI2RlZmluZSBNSUlNQ0ZHX0lOSVRfVkFMVUUJMHgwMDAwMDAwNwotI2RlZmluZSBNSUlNQ0ZHX1JFU0VUICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0ZBUl9TVVBQT1JURUQgKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgXAorCQl8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgXAorCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIFwKKwkJfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCBcCisJCXwgU1VQUE9SVEVEX0F1dG9uZWcgXAorCQl8IFNVUFBPUlRFRF9NSUkpCiAKIC8qIFRCSSByZWdpc3RlciBhZGRyZXNzZXMgKi8KICNkZWZpbmUgTUlJX1RCSUNPTgkJMHgxMQpAQCAtNzM2LDcgKzczOCw4IEBACiAJc3BpbmxvY2tfdCByeGxvY2s7CiAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAogCS8qIHNrYiBhcnJheSBhbmQgaW5kZXggKi8KQEAgLTc1Niw2ICs3NTksOCBAQAogCXVuc2lnbmVkIGludCByeF9zdGFzaF9zaXplOwogCXVuc2lnbmVkIGludCByeF9zdGFzaF9pbmRleDsKIAorCXN0cnVjdCBza19idWZmX2hlYWQgcnhfcmVjeWNsZTsKKwogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKIAogCS8qIFVucHJvdGVjdGVkIGZpZWxkcyAqLwpAQCAtODI2LDggKzgzMSw3IEBACiBleHRlcm4gdm9pZCBnZmFyX3BoeV90ZXN0KHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCWludCBlbmFibGUsIHUzMiByZWdudW0sIHUzMiByZWFkKTsKIHZvaWQgZ2Zhcl9pbml0X3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGdmYXJfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKLQkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBnZmFyX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wczsKIAogI2VuZGlmIC8qIF9fR0lBTkZBUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCmluZGV4IDU5YjNiNWQuLmRiZjA2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCkBAIC02MDAsNiArNjAwLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5iZmxvY2ssIGZsYWdzKTsKIAlwcml2LT53b2xfZW4gPSB3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDID8gMSA6IDA7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZkZXYtPmRldiwgcHJpdi0+d29sX2VuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5iZmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OWE0MjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYworKysgL2Rldi9udWxsCkBAIC0xLDM3OSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwotICoKLSAqIEdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIC0tIE1JSU0gYnVzIGltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUlNIHJlZ3MKLSAqCi0gKiBBdXRob3I6IEFuZHkgRmxlbWluZwotICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGh5Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJnaWFuZmFyLmgiCi0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKLQotLyoKLSAqIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKLSAqIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQotICogZ2VuZXJpYyBtZGlvIGJ1cyAodGllZCB0byBhIHNpbmdsZSBpbnRlcmZhY2UpLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcwotICogZG9uZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCi0gKiB0aGUgVEJJIHdoaWNoIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMgYW5kIGFyZSBhbHdheXMgdGllZCB0bwotICogdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yCi0gKiBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGV4YW1wbGUuCi0gKi8KLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCi0JCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSkKLXsKLQkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHdyaXRlICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7Ci0KLQkvKiBXcml0ZSBvdXQgdGhlIHZhbHVlIHdlIHdhbnQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCi0Jd2hpbGUgKGdmYXJfcmVhZCgmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZWFkIHRoZSBidXMgZm9yIFBIWSBhdCBhZGRyIG1paV9pZCwgcmVnaXN0ZXIgcmVnbnVtLCBhbmQKLSAqIHJldHVybiB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgb3BlcmF0aW9uCi0gKiBkb25lIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwKLSAqIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZ2VuZXJpYyBtZGlvIGJ1cwotICogVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQotICogdGhlIFRCSSB3aGljaCwgaW50dXJuLCBjb250cm9sIGludGVyZmFjZXMgbGlrZSBvbmNoaXAgU0VSREVTCi0gKiBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvIHRoZSBsb2NhbCBtZGlvIHBpbnMsIHdoaWNoIG1heSBub3QgYmUgdGhlCi0gKiBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGV4dGVybmFsIFBIWXMsIGZvciBlZy4KLSAqLwotaW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQotewotCXUxNiB2YWx1ZTsKLQotCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gcmVhZCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1hZGQsIChtaWlfaWQgPDwgOCkgfCByZWdudW0pOwotCi0JLyogQ2xlYXIgbWlpbWNvbSwgYW5kIHRoZW4gaW5pdGlhdGUgYSByZWFkICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNvbSwgMCk7Ci0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNvbSwgTUlJX1JFQURfQ09NTUFORCk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCi0Jd2hpbGUgKGdmYXJfcmVhZCgmcmVncy0+bWlpbWluZCkgJiAoTUlJTUlORF9OT1RWQUxJRCB8IE1JSU1JTkRfQlVTWSkpCi0JCWNwdV9yZWxheCgpOwotCi0JLyogR3JhYiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGZyb20gbWlpbXN0YXQgKi8KLQl2YWx1ZSA9IGdmYXJfcmVhZCgmcmVncy0+bWlpbXN0YXQpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCi0gKiBvbiB0aGUgYnVzLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSByZXR1cm5pbmcuCi0gKiBBbGwgUEhZIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB0aHJvdWdoIHRoZSBUU0VDMSBNSUlNIHJlZ3MgKi8KLWludCBnZmFyX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQotCS8qIFdyaXRlIHRvIHRoZSBsb2NhbCBNSUkgcmVncyAqLwotCXJldHVybihnZmFyX2xvY2FsX21kaW9fd3JpdGUocmVncywgbWlpX2lkLCByZWdudW0sIHZhbHVlKSk7Ci19Ci0KLS8qIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAotICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWQotICogY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBUU0VDMSBNSUlNIHJlZ3MgKi8KLWludCBnZmFyX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQotCS8qIFJlYWQgdGhlIGxvY2FsIE1JSSByZWdzICovCi0JcmV0dXJuKGdmYXJfbG9jYWxfbWRpb19yZWFkKHJlZ3MsIG1paV9pZCwgcmVnbnVtKSk7Ci19Ci0KLS8qIFJlc2V0IHRoZSBNSUlNIHJlZ2lzdGVycywgYW5kIHdhaXQgZm9yIHRoZSBidXMgdG8gZnJlZSAqLwotc3RhdGljIGludCBnZmFyX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOwotCi0JbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWNmZywgTUlJTUNGR19SRVNFVCk7Ci0KLQkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX0lOSVRfVkFMVUUpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KLQl3aGlsZSAoKGdmYXJfcmVhZCgmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpICYmCi0JCQktLXRpbWVvdXQpCi0JCWNwdV9yZWxheCgpOwotCi0JbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQlpZih0aW1lb3V0ID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLAotCQkJCWJ1cy0+bmFtZSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEFsbG9jYXRlIGFuIGFycmF5IHdoaWNoIHByb3ZpZGVzIGlycSAjcyBmb3IgZWFjaCBQSFkgb24gdGhlIGdpdmVuIGJ1cyAqLwotc3RhdGljIGludCAqY3JlYXRlX2lycV9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlpbnQgKmlycXM7Ci0JaW50IGk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7Ci0KLQlpcnFzID0ga2NhbGxvYyhQSFlfTUFYX0FERFIsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghaXJxcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCi0JCWlycXNbaV0gPSBQSFlfUE9MTDsKLQotCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7Ci0JCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7Ci0JCWNvbnN0IHUzMiAqaWQ7Ci0KLQkJaWYgKGlycSA9PSBOT19JUlEpCi0JCQljb250aW51ZTsKLQotCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOwotCi0JCWlmICghaWQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKmlkIDwgUEhZX01BWF9BRERSICYmICppZCA+PSAwKQotCQkJaXJxc1sqaWRdID0gaXJxOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgotCQkJCQkiJWQgaXMgbm90IGEgdmFsaWQgUEhZIGFkZHJlc3NcbiIsCi0JCQkJCW5wLT5mdWxsX25hbWUsICppZCk7Ci0JfQotCi0JcmV0dXJuIGlycXM7Ci19Ci0KLQotdm9pZCBnZmFyX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQljb25zdCB1MzIgKnJlZzsKLQotCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCi0Jc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJXgiLCBucC0+bmFtZSwgcmVnID8gKnJlZyA6IDApOwotfQotCi0vKiBTY2FuIHRoZSBidXMgaW4gcmV2ZXJzZSwgbG9va2luZyBmb3IgYW4gZW1wdHkgc3BvdCAqLwotc3RhdGljIGludCBnZmFyX21kaW9fZmluZF9mcmVlKHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzKQotewotCWludCBpOwotCi0JZm9yIChpID0gUEhZX01BWF9BRERSOyBpID4gMDsgaS0tKSB7Ci0JCXUzMiBwaHlfaWQ7Ci0KLQkJaWYgKGdldF9waHlfaWQobmV3X2J1cywgaSwgJnBoeV9pZCkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHBoeV9pZCA9PSAweGZmZmZmZmZmKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAotCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVnczsKLQlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICplbmV0X3JlZ3M7Ci0Jc3RydWN0IG1paV9idXMgKm5ld19idXM7Ci0JaW50IGVyciA9IDA7Ci0JdTY0IGFkZHIsIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGJpOwotCWludCB0YmlhZGRyID0gLTE7Ci0KLQluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2aWNlX2luaXRfd2FrZXVwKCZvZmRldi0+ZGV2LCAxKTsKLQotCW5ld19idXMtPm5hbWUgPSAiR2lhbmZhciBNSUkgQnVzIiwKLQluZXdfYnVzLT5yZWFkID0gJmdmYXJfbWRpb19yZWFkLAotCW5ld19idXMtPndyaXRlID0gJmdmYXJfbWRpb193cml0ZSwKLQluZXdfYnVzLT5yZXNldCA9ICZnZmFyX21kaW9fcmVzZXQsCi0JZ2Zhcl9tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7Ci0KLQkvKiBTZXQgdGhlIFBIWSBiYXNlIGFkZHJlc3MgKi8KLQlhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIG9mX2dldF9hZGRyZXNzKG5wLCAwLCAmc2l6ZSwgTlVMTCkpOwotCXJlZ3MgPSBpb3JlbWFwKGFkZHIsIHNpemUpOwotCi0JaWYgKE5VTEwgPT0gcmVncykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9mcmVlX2J1czsKLQl9Ci0KLQluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7Ci0KLQluZXdfYnVzLT5pcnEgPSBjcmVhdGVfaXJxX21hcChucCk7Ci0KLQlpZiAobmV3X2J1cy0+aXJxID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5tYXBfcmVnczsKLQl9Ci0KLQluZXdfYnVzLT5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKLQlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG5ld19idXMpOwotCi0JLyoKLQkgKiBUaGlzIGlzIG1pbGRseSBldmlsLCBidXQgc28gaXMgb3VyIGhhcmR3YXJlIGZvciBkb2luZyB0aGlzLgotCSAqIEFsc28sIHdlIGhhdmUgdG8gY2FzdCBiYWNrIHRvIHN0cnVjdCBnZmFyX21paSBiZWNhdXNlIG9mCi0JICogZGVmaW5pdGlvbiB3ZWlyZG5lc3MgZG9uZSBpbiBnaWFuZmFyLmguCi0JICovCi0JZW5ldF9yZWdzID0gKHN0cnVjdCBnZmFyIF9faW9tZW0gKikKLQkJKChjaGFyICopcmVncyAtIG9mZnNldG9mKHN0cnVjdCBnZmFyLCBnZmFyX21paV9yZWdzKSk7Ci0KLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCB0YmkpIHsKLQkJaWYgKCFzdHJuY21wKHRiaS0+dHlwZSwgInRiaS1waHkiLCA4KSkKLQkJCWJyZWFrOwotCX0KLQotCWlmICh0YmkpIHsKLQkJY29uc3QgdTMyICpwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KHRiaSwgInJlZyIsIE5VTEwpOwotCi0JCWlmIChwcm9wKQotCQkJdGJpYWRkciA9ICpwcm9wOwotCX0KLQotCWlmICh0YmlhZGRyID09IC0xKSB7Ci0JCWdmYXJfd3JpdGUoJmVuZXRfcmVncy0+dGJpcGEsIDApOwotCi0JCXRiaWFkZHIgPSBnZmFyX21kaW9fZmluZF9mcmVlKG5ld19idXMpOwotCX0KLQotCS8qCi0JICogV2UgZGVmaW5lIFRCSVBBIGF0IDAgdG8gYmUgaWxsZWdhbCwgb3B0aW5nIHRvIGZhaWwgZm9yIGJvYXJkcyB0aGF0Ci0JICogaGF2ZSBQSFlzIGF0IDEtMzEsIHJhdGhlciB0aGFuIGNoYW5nZSB0YmlwYSBhbmQgcmVzY2FuLgotCSAqLwotCWlmICh0YmlhZGRyID09IDApIHsKLQkJZXJyID0gLUVCVVNZOwotCi0JCWdvdG8gZXJyX2ZyZWVfaXJxczsKLQl9Ci0KLQlnZmFyX3dyaXRlKCZlbmV0X3JlZ3MtPnRiaXBhLCB0YmlhZGRyKTsKLQotCS8qCi0JICogVGhlIFRCSVBIWS1vbmx5IGJ1c2VzIHdpbGwgZmluZCBQSFlzIGF0IGV2ZXJ5IGFkZHJlc3MsCi0JICogc28gd2UgbWFzayB0aGVtIGFsbCBidXQgdGhlIFRCSQotCSAqLwotCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikpCi0JCW5ld19idXMtPnBoeV9tYXNrID0gfigxIDw8IHRiaWFkZHIpOwotCi0JZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKLQotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAotCQkJCW5ld19idXMtPm5hbWUpOwotCQlnb3RvIGVycl9mcmVlX2lycXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlX2lycXM6Ci0Ja2ZyZWUobmV3X2J1cy0+aXJxKTsKLWVycl91bm1hcF9yZWdzOgotCWlvdW5tYXAocmVncyk7Ci1lcnJfZnJlZV9idXM6Ci0JbWRpb2J1c19mcmVlKG5ld19idXMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgaW50IGdmYXJfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCi17Ci0Jc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0KLQltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgTlVMTCk7Ci0KLQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilidXMtPnByaXYpOwotCWJ1cy0+cHJpdiA9IE5VTEw7Ci0Ja2ZyZWUoYnVzLT5pcnEpOwotCW1kaW9idXNfZnJlZShidXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdmYXJfbWRpb19tYXRjaFtdID0KLXsKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiLAotCX0sCi0JewotCQkudHlwZSA9ICJtZGlvIiwKLQkJLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsCi0JfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGdpYW5mYXJfbWRpb19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZnNsLWdpYW5mYXJfbWRpbyIsCi0JLm1hdGNoX3RhYmxlID0gZ2Zhcl9tZGlvX21hdGNoLAotCi0JLnByb2JlID0gZ2Zhcl9tZGlvX3Byb2JlLAotCS5yZW1vdmUgPSBnZmFyX21kaW9fcmVtb3ZlLAotfTsKLQotaW50IF9faW5pdCBnZmFyX21kaW9faW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdpYW5mYXJfbWRpb19kcml2ZXIpOwotfQotCi12b2lkIGdmYXJfbWRpb19leGl0KHZvaWQpCi17Ci0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdpYW5mYXJfbWRpb19kcml2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YzI0MmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9naWFuZmFyX21paS5oCi0gKgotICogR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBEcml2ZXIgZm9yIHRoZSBNRElPIGJ1cyBjb250cm9sbGVyIGluIHRoZSBHaWFuZmFyIHJlZ2lzdGVyIHNwYWNlCi0gKgotICogQXV0aG9yOiBBbmR5IEZsZW1pbmcKLSAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaWZuZGVmIF9fR0lBTkZBUl9NSUlfSAotI2RlZmluZSBfX0dJQU5GQVJfTUlJX0gKLQotc3RydWN0IGdmYXJfcHJpdmF0ZTsgLyogZm9yd2FyZCByZWYgKi8KLQotI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1JSU1JTkRfTk9UVkFMSUQgICAgICAgIDB4MDAwMDAwMDQKLQotI2RlZmluZSBNSUlfUkVBRF9DT01NQU5EICAgICAgIDB4MDAwMDAwMDEKLQotI2RlZmluZSBHRkFSX1NVUFBPUlRFRCAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiBcCi0JCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCBcCi0JCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgXAotCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIFwKLQkJfCBTVVBQT1JURURfQXV0b25lZyBcCi0JCXwgU1VQUE9SVEVEX01JSSkKLQotc3RydWN0IGdmYXJfbWlpIHsKLQl1MzIJbWlpbWNmZzsJLyogMHguNTIwIC0gTUlJIE1hbmFnZW1lbnQgQ29uZmlnIFJlZ2lzdGVyICovCi0JdTMyCW1paW1jb207CS8qIDB4LjUyNCAtIE1JSSBNYW5hZ2VtZW50IENvbW1hbmQgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbWFkZDsJLyogMHguNTI4IC0gTUlJIE1hbmFnZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotCXUzMgltaWltY29uOwkvKiAweC41MmMgLSBNSUkgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyICovCi0JdTMyCW1paW1zdGF0OwkvKiAweC41MzAgLSBNSUkgTWFuYWdlbWVudCBTdGF0dXMgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbWluZDsJLyogMHguNTM0IC0gTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9yIFJlZ2lzdGVyICovCi19OwotCi1pbnQgZ2Zhcl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7Ci1pbnQgZ2Zhcl9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSk7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAotCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKLXN0cnVjdCBtaWlfYnVzICpnZmFyX2dldF9taWlidXMoY29uc3Qgc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdik7Ci1pbnQgX19pbml0IGdmYXJfbWRpb19pbml0KHZvaWQpOwotdm9pZCBnZmFyX21kaW9fZXhpdCh2b2lkKTsKLQotdm9pZCBnZmFyX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYgLyogR0lBTkZBUl9QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCmluZGV4IDc4MmMyMDEuLmRkMjZkYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKQEAgLTUzLDYgKzUzLDkgQEAKIAl1MzIgdGVtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCEocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19CRF9TVEFTSElORykpCisJCXJldHVybiBjb3VudDsKKwogCS8qIEZpbmQgb3V0IHRoZSBuZXcgc2V0dGluZyAqLwogCWlmICghc3RybmNtcCgib24iLCBidWYsIGNvdW50IC0gMSkgfHwgIXN0cm5jbXAoIjEiLCBidWYsIGNvdW50IC0gMSkpCiAJCW5ld19zZXR0aW5nID0gMTsKQEAgLTgxLDcgKzg0LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGJkX3N0YXNoLCAwNjQ0LCBnZmFyX3Nob3dfYmRfc3Rhc2gsIGdmYXJfc2V0X2JkX3N0YXNoKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiZF9zdGFzaCwgMDY0NCwgZ2Zhcl9zaG93X2JkX3N0YXNoLCBnZmFyX3NldF9iZF9zdGFzaCk7CiAKIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19yeF9zdGFzaF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTEwMCw2ICsxMDMsOSBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElORykpCisJCXJldHVybiBjb3VudDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlpZiAobGVuZ3RoID4gcHJpdi0+cnhfYnVmZmVyX3NpemUpCiAJCWdvdG8gb3V0OwpAQCAtMTMwLDggKzEzNiw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihyeF9zdGFzaF9zaXplLCAwNjQ0LCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZSwKLQkgICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfc2l6ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocnhfc3Rhc2hfc2l6ZSwgMDY0NCwgZ2Zhcl9zaG93X3J4X3N0YXNoX3NpemUsCisJCSAgIGdmYXJfc2V0X3J4X3N0YXNoX3NpemUpOwogCiAvKiBTdGFzaGluZyB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHJ4X3N0YXNoX3NpemUgIT0gMCAqLwogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X3J4X3N0YXNoX2luZGV4KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE1Miw2ICsxNTgsOSBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElORykpCisJCXJldHVybiBjb3VudDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlpZiAoaW5kZXggPiBwcml2LT5yeF9zdGFzaF9zaXplKQogCQlnb3RvIG91dDsKQEAgLTE3Miw4ICsxODEsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIocnhfc3Rhc2hfaW5kZXgsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9pbmRleCwKLQkgICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfaW5kZXgpOworc3RhdGljIERFVklDRV9BVFRSKHJ4X3N0YXNoX2luZGV4LCAwNjQ0LCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgsCisJCSAgIGdmYXJfc2V0X3J4X3N0YXNoX2luZGV4KTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fdGhyZXNob2xkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yMTAsOCArMjE5LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fdGhyZXNob2xkLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQsCi0JICAgIGdmYXJfc2V0X2ZpZm9fdGhyZXNob2xkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3RocmVzaG9sZCwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fdGhyZXNob2xkLAorCQkgICBnZmFyX3NldF9maWZvX3RocmVzaG9sZCk7CiAKIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19maWZvX3N0YXJ2ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMjQ3LDcgKzI1Niw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZSwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlLCBnZmFyX3NldF9maWZvX3N0YXJ2ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlmb19zdGFydmUsIDA2NDQsIGdmYXJfc2hvd19maWZvX3N0YXJ2ZSwKKwkJICAgZ2Zhcl9zZXRfZmlmb19zdGFydmUpOwogCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb19zdGFydmVfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjg0LDggKzI5NCw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZV9vZmYsIDA2NDQsIGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYsCi0JICAgIGdmYXJfc2V0X2ZpZm9fc3RhcnZlX29mZik7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlmb19zdGFydmVfb2ZmLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb19zdGFydmVfb2ZmLAorCQkgICBnZmFyX3NldF9maWZvX3N0YXJ2ZV9vZmYpOwogCiB2b2lkIGdmYXJfaW5pdF9zeXNmcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjkzLDEyICszMDMsOSBAQAogCWludCByYzsKIAogCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgdmFsdWVzICovCi0JcHJpdi0+cnhfc3Rhc2hfc2l6ZSA9IERFRkFVTFRfU1RBU0hfTEVOR1RIOwotCXByaXYtPnJ4X3N0YXNoX2luZGV4ID0gREVGQVVMVF9TVEFTSF9JTkRFWDsKIAlwcml2LT5maWZvX3RocmVzaG9sZCA9IERFRkFVTFRfRklGT19UWF9USFI7CiAJcHJpdi0+Zmlmb19zdGFydmUgPSBERUZBVUxUX0ZJRk9fVFhfU1RBUlZFOwogCXByaXYtPmZpZm9fc3RhcnZlX29mZiA9IERFRkFVTFRfRklGT19UWF9TVEFSVkVfT0ZGOwotCXByaXYtPmJkX3N0YXNoX2VuID0gREVGQVVMVF9CRF9TVEFTSDsKIAogCS8qIENyZWF0ZSBvdXIgc3lzZnMgZmlsZXMgKi8KIAlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9iZF9zdGFzaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggN2U4YjNjNS4uMzEwZWUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iCiBLRVJOX0lORk8gIiAgIFNvbWUgbW9kaWZpY2F0aW9ucyBieSBFcmljIGthc3RlbiA8a2FzdGVuQG5zY2wubXN1LmVkdT5cbiIKIEtFUk5fSU5GTyAiICAgRnVydGhlciBtb2RpZmljYXRpb25zIGJ5IEtlaXRoIFVuZGVyd29vZCA8a2VpdGh1QHBhcmwuY2xlbXNvbi5lZHU+XG4iOwpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAKICAgICBjc3VtX2FkZChzdW0sIChpaCktPnNhZGRyICYgMHhmZmZmKTsgXAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+ZGFkZHIgPj4gMTYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciAmIDB4ZmZmZik7IFwKLSAgICBjc3VtX2FkZChzdW0sIF9fY29uc3RhbnRfaHRvbnMoSVBQUk9UT19VRFApKTsgXAorICAgIGNzdW1fYWRkKHN1bSwgY3B1X3RvX2JlMTYoSVBQUk9UT19VRFApKTsgXAogICAgIGNzdW1fYWRkKHN1bSwgKHVoKS0+bGVuKTsgXAogfSB3aGlsZSAoMCkKIApAQCAtMTI1NSw3ICsxMjU1LDcgQEAKICAgICBjc3VtX2FkZChzdW0sIChpaCktPnNhZGRyICYgMHhmZmZmKTsgXAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+ZGFkZHIgPj4gMTYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciAmIDB4ZmZmZik7IFwKLSAgICBjc3VtX2FkZChzdW0sIF9fY29uc3RhbnRfaHRvbnMoSVBQUk9UT19UQ1ApKTsgXAorICAgIGNzdW1fYWRkKHN1bSwgY3B1X3RvX2JlMTYoSVBQUk9UT19UQ1ApKTsgXAogICAgIGNzdW1fYWRkKHN1bSwgaHRvbnMobGVuKSk7IFwKIH0gd2hpbGUgKDApCiAjZW5kaWYKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJICAgIC8qIHRhY2sgb24gY2hlY2tzdW0gdGFnICovCiAJICAgIHUzMiB0YWd2YWwgPSAwOwogCSAgICBzdHJ1Y3QgZXRoaGRyICplaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwotCSAgICBpZiAoZWgtPmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkpIHsKKwkgICAgaWYgKGVoLT5oX3Byb3RvID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgewogCQlzdHJ1Y3QgaXBoZHIgKmloID0gKHN0cnVjdCBpcGhkciAqKSgoY2hhciAqKWVoICsgRVRIX0hMRU4pOwogCQlpZiAoaWgtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7CiAJCSAgICBzdHJ1Y3QgdWRwaGRyICp1aApAQCAtMTYwNSw3ICsxNjA1LDcgQEAKIAkJCQkgKi8KIAkJCQlpZiAobnRvaHMoaWgtPnRvdF9sZW4pID49IDQ2KXsKIAkJCQkJLyogZG9uJ3Qgd29ycnkgYWJvdXQgZnJhZ3MgKi8KLQkJCQkJaWYgKCEoaWgtPmZyYWdfb2ZmICYgX19jb25zdGFudF9odG9ucyhJUF9NRnxJUF9PRkZTRVQpKSkgeworCQkJCQlpZiAoIShpaC0+ZnJhZ19vZmYgJiBjcHVfdG9fYmUxNihJUF9NRnxJUF9PRkZTRVQpKSkgewogCQkJCQkJdTMyIGludiA9ICoodTMyICopICZidWZfYWRkcltkYXRhX3NpemUgLSAxNl07CiAJCQkJCQl1MzIgKnAgPSAodTMyICopICZidWZfYWRkcltkYXRhX3NpemUgLSAyMF07CiAJCQkJCQlyZWdpc3RlciB1MzIgY3JjLCBwX3IsIHBfcjE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwppbmRleCAyZDQwODk4Li4xNTUxNjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTMyMiwyMyArMzIyLDI1IEBACiAJLnJlYnVpbGQJPSBzcF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc3Bfb3Blbl9kZXYsCisJLm5kb19zdG9wCQk9IHNwX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzcF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gc3Bfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgc3Bfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uICovCi0JZGV2LT5tdHUJCT0gU0lYUF9NVFU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBzcF94bWl0OwotCWRldi0+b3BlbgkJPSBzcF9vcGVuX2RldjsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJnNwX25ldGRldl9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OwotCWRldi0+c3RvcAkJPSBzcF9jbG9zZTsKLQotCWRldi0+c2V0X21hY19hZGRyZXNzICAgID0gc3Bfc2V0X21hY19hZGRyZXNzOworCWRldi0+bXR1CQk9IFNJWFBfTVRVOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gQVgyNV9NQVhfSEVBREVSX0xFTjsKIAlkZXYtPmhlYWRlcl9vcHMgCT0gJnNwX2hlYWRlcl9vcHM7CiAKIAlkZXYtPmFkZHJfbGVuCQk9IEFYMjVfQUREUl9MRU47CiAJZGV2LT50eXBlCQk9IEFSUEhSRF9BWDI1OwogCWRldi0+dHhfcXVldWVfbGVuCT0gMTA7Ci0JZGV2LT50eF90aW1lb3V0CQk9IE5VTEw7CiAKIAkvKiBPbmx5IGFjdGl2YXRlZCBpbiBBWC4yNSBtb2RlICovCiAJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7CkBAIC03ODgsOSArNzkwLDkgQEAKIAogLyogSW5pdGlhbGl6ZSA2cGFjayBjb250cm9sIGRldmljZSAtLSByZWdpc3RlciA2cGFjayBsaW5lIGRpc2NpcGxpbmUgKi8KIAotc3RhdGljIGNoYXIgbXNnX2Jhbm5lcltdICBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKK3N0YXRpYyBjb25zdCBjaGFyIG1zZ19iYW5uZXJbXSAgX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCiAJIkFYLjI1OiA2cGFjayBkcml2ZXIsICIgU0lYUEFDS19WRVJTSU9OICJcbiI7Ci1zdGF0aWMgY2hhciBtc2dfcmVnZmFpbFtdIF9faW5pdGRhdGEgPSBLRVJOX0VSUiAgXAorc3RhdGljIGNvbnN0IGNoYXIgbXNnX3JlZ2ZhaWxbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIgIFwKIAkiNnBhY2s6IGNhbid0IHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZSAoZXJyID0gJWQpXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBzaXhwYWNrX2luaXRfZHJpdmVyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKaW5kZXggODFhNjVlMy4uYmI3OGMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwpAQCAtMjAzLDcgKzIwMyw2IEBACiAJCXVuc2lnbmVkIGNoYXIgYnVmW1RYQlVGRkVSX1NJWkVdOwogICAgICAgICB9IGhkbGN0eDsKIAotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1bnNpZ25lZCBpbnQgcHR0X2tleWVkOwogCXN0cnVjdCBza19idWZmICpza2I7ICAvKiBuZXh0IHRyYW5zbWl0IHBhY2tldCAgKi8KIApAQCAtNDIzLDcgKzQyMiw3IEBACiAJYmMtPmhkbGN0eC5idWZwdHIgPSBiYy0+aGRsY3R4LmJ1ZjsKIAliYy0+aGRsY3R4LmJ1ZmNudCA9IHdwIC0gYmMtPmhkbGN0eC5idWY7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCWJjLT5zdGF0cy50eF9wYWNrZXRzKys7CisJYmMtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC01NDcsNyArNTQ2LDcgQEAKIAlwa3RsZW4gPSBiYy0+aGRsY3J4LmJ1ZmNudC0yKzE7IC8qIEtJU1Mga2x1ZGdlICovCiAJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RsZW4pKSkgewogCQlwcmludGsoIiVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwotCQliYy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAljcCA9IHNrYl9wdXQoc2tiLCBwa3RsZW4pOwpAQCAtNTU1LDcgKzU1NCw3IEBACiAJbWVtY3B5KGNwLCBiYy0+aGRsY3J4LmJ1ZiwgcGt0bGVuIC0gMSk7CiAJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGRldik7CiAJbmV0aWZfcngoc2tiKTsKLQliYy0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogfQogCiBzdGF0aWMgaW50IHJlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNudCkKQEAgLTgwMiwxOSArODAxLDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmF5Y29tX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBiYXljb21fc3RhdGUgKmJjID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIAotCSAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLiAgVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlCi0JICogY2FyZCBvcGVuIG9yIGNsb3NlZC4gCi0JICovCi0JcmV0dXJuICZiYy0+c3RhdHM7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBlcHBfd2FrZXVwKHZvaWQgKmhhbmRsZSkKIHsKICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWhhbmRsZTsKQEAgLTEwNjUsMTAgKzEwNTEsMTAgQEAKIAkJaGkuZGF0YS5jcy5wdHQgPSAhIShiYy0+c3RhdCAmIEVQUF9QVFRCSVQpOwogCQloaS5kYXRhLmNzLmRjZCA9ICEoYmMtPnN0YXQgJiBFUFBfRENEQklUKTsKIAkJaGkuZGF0YS5jcy5wdHRfa2V5ZWQgPSBiYy0+cHR0X2tleWVkOwotCQloaS5kYXRhLmNzLnR4X3BhY2tldHMgPSBiYy0+c3RhdHMudHhfcGFja2V0czsKLQkJaGkuZGF0YS5jcy50eF9lcnJvcnMgPSBiYy0+c3RhdHMudHhfZXJyb3JzOwotCQloaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBiYy0+c3RhdHMucnhfcGFja2V0czsKLQkJaGkuZGF0YS5jcy5yeF9lcnJvcnMgPSBiYy0+c3RhdHMucnhfZXJyb3JzOworCQloaS5kYXRhLmNzLnR4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCWhpLmRhdGEuY3MudHhfZXJyb3JzID0gZGV2LT5zdGF0cy50eF9lcnJvcnM7CisJCWhpLmRhdGEuY3MucnhfcGFja2V0cyA9IGRldi0+c3RhdHMucnhfcGFja2V0czsKKwkJaGkuZGF0YS5jcy5yeF9lcnJvcnMgPSBkZXYtPnN0YXRzLnJ4X2Vycm9yczsKIAkJYnJlYWs7CQkKIAogCWNhc2UgSERMQ0RSVkNUTF9PTERHRVRTVEFUOgpAQCAtMTExNiw2ICsxMTAyLDE0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJheWNvbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkgICAgID0gZXBwX29wZW4sCisJLm5kb19zdG9wCSAgICAgPSBlcHBfY2xvc2UsCisJLm5kb19kb19pb2N0bAkgICAgID0gYmF5Y29tX2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gYmF5Y29tX3NlbmRfcGFja2V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYmF5Y29tX3NldF9tYWNfYWRkcmVzcywKK307CisKIC8qCiAgKiBDaGVjayBmb3IgYSBuZXR3b3JrIGFkYXB0b3Igb2YgdGhpcyB0eXBlLCBhbmQgcmV0dXJuICcwJyBpZiBvbmUgZXhpc3RzLgogICogSWYgZGV2LT5iYXNlX2FkZHIgPT0gMCwgcHJvYmUgYWxsIGxpa2VseSBsb2NhdGlvbnMuCkBAIC0xMTQzLDE3ICsxMTM3LDEyIEBACiAJLyoKIAkgKiBpbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0CiAJICovCi0JZGV2LT5vcGVuID0gZXBwX29wZW47Ci0JZGV2LT5zdG9wID0gZXBwX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSBiYXljb21faW9jdGw7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBiYXljb21fc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBiYXljb21fZ2V0X3N0YXRzOwogCiAJLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCiAJYmMtPnNrYiA9IE5VTEw7CiAJCisJZGV2LT5uZXRkZXZfb3BzID0gJmJheWNvbV9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBiYXljb21fc2V0X21hY19hZGRyZXNzOwogCQogCWRldi0+dHlwZSA9IEFSUEhSRF9BWDI1OyAgICAgICAgICAgLyogQUZfQVgyNSBkZXZpY2UgKi8KIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEFYMjVfTUFYX0hFQURFUl9MRU4gKyBBWDI1X0JQUV9IRUFERVJfTEVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKaW5kZXggNDZmOGYzMy4uZDUwOWIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCkBAIC04Nyw3ICs4Nyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9icHFldGhlci5oPgogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJBWC4yNTogYnBxZXRoZXIgZHJpdmVyIHZlcnNpb24gMDA0XG4iOworc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIkFYLjI1OiBicHFldGhlciBkcml2ZXIgdmVyc2lvbiAwMDRcbiI7CiAKIHN0YXRpYyBjaGFyIGJjYXN0X2FkZHJbNl09ezB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGfTsKIApAQCAtOTYsOCArOTcsOCBAQAogc3RhdGljIGludCBicHFfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYnBxX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBicHFfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0JQUSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJwcV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfQlBRKSwKIAkuZnVuYwk9IGJwcV9yY3YsCiB9OwogCkBAIC0xMTAsNyArMTExLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJwcV9saXN0OwkvKiBsaXN0IG9mIGJwcSBkZXZpY2VzIGNoYWluICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKmV0aGRldjsJLyogbGluayB0byBldGhlcm5ldCBkZXZpY2UgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqYXhkZXY7CS8qIGJwcSBkZXZpY2UgKGJwcSMpICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CS8qIHNvbWUgc3RhdGlzdGljcyAqLwogCWNoYXIgICBkZXN0X2FkZHJbNl07CQkvKiBldGhlciBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJY2hhciAgIGFjcHRfYWRkcls2XTsJCS8qIGFjY2VwdCBldGhlciBmcmFtZXMgZnJvbSB0aGlzIGFkZHJlc3Mgb25seSAqLwogfTsKQEAgLTIyMiw4ICsyMjIsOCBAQAogCXNrYl9wdWxsKHNrYiwgMik7CS8qIFJlbW92ZSB0aGUgbGVuZ3RoIGJ5dGVzICovCiAJc2tiX3RyaW0oc2tiLCBsZW4pOwkvKiBTZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAqLwogCi0JYnBxLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JYnBxLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAlwdHIgPSBza2JfcHVzaChza2IsIDEpOwogCSpwdHIgPSAwOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJYnBxID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmICgoZGV2ID0gYnBxX2dldF9ldGhlcl9kZXYoZGV2KSkgPT0gTlVMTCkgewotCQlicHEtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zMDAsOCArMzAwLDggQEAKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlkZXZfaGFyZF9oZWFkZXIoc2tiLCBkZXYsIEVUSF9QX0JQUSwgYnBxLT5kZXN0X2FkZHIsIE5VTEwsIDApOwotCWJwcS0+c3RhdHMudHhfcGFja2V0cysrOwotCWJwcS0+c3RhdHMudHhfYnl0ZXMrPXNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMrPXNrYi0+bGVuOwogICAKIAlkZXZfcXVldWVfeG1pdChza2IpOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTMwOSwxNiArMzA5LDYgQEAKIH0KIAogLyoKLSAqCVN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpicHFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJwcWRldiAqYnBxID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmYnBxLT5zdGF0czsKLX0KLQotLyoKICAqCVNldCBBWC4yNSBjYWxsc2lnbgogICovCiBzdGF0aWMgaW50IGJwcV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTM5Niw2ICszODYsNyBAQAogICoJUHJvYyBmaWxlc3lzdGVtCiAgKi8KIHN0YXRpYyB2b2lkICpicHFfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKFJDVSkKIHsKIAlpbnQgaSA9IDE7CiAJc3RydWN0IGJwcWRldiAqYnBxZGV2OwpAQCAtNDI4LDYgKzQxOSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJwcV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKFJDVSkKIHsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTQ1NCw3ICs0NDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwcV9zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwcV9zZXFvcHMgPSB7CiAJLnN0YXJ0ID0gYnBxX3NlcV9zdGFydCwKIAkubmV4dCA9IGJwcV9zZXFfbmV4dCwKIAkuc3RvcCA9IGJwcV9zZXFfc3RvcCwKQEAgLTQ3NywxNiArNDY5LDE3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJwcV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkgICAgID0gYnBxX29wZW4sCisJLm5kb19zdG9wCSAgICAgPSBicHFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBicHFfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGJwcV9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkgICAgID0gYnBxX2lvY3RsLAorfTsKIAogc3RhdGljIHZvaWQgYnBxX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJwcV94bWl0OwotCWRldi0+b3BlbgkgICAgID0gYnBxX29wZW47Ci0JZGV2LT5zdG9wCSAgICAgPSBicHFfY2xvc2U7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBicHFfc2V0X21hY19hZGRyZXNzOwotCWRldi0+Z2V0X3N0YXRzCSAgICAgPSBicHFfZ2V0X3N0YXRzOwotCWRldi0+ZG9faW9jdGwJICAgICA9IGJwcV9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMJICAgICA9ICZicHFfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJICAgICA9IGZyZWVfbmV0ZGV2OwogCiAJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCmluZGV4IGU2NzEwMzMuLjg4MWJmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAlpbnQgY2hpcDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzY2NfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwogCWludCBjaGFubmVsOwogCWludCBjYXJkX2Jhc2UsIHNjY19jbWQsIHNjY19kYXRhOwogCWludCB0bXJfY250LCB0bXJfY3RybCwgdG1yX21vZGU7CkBAIC0yMzksNyArMjM5LDYgQEAKIHN0YXRpYyBpbnQgc2NjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzY2NfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogc3RhdGljIGludCBzY2Nfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNjY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNjY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqc2EpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdHhfb24oc3RydWN0IHNjY19wcml2ICpwcml2KTsKQEAgLTQ0MSw2ICs0NDAsMTMgQEAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgJmF4MjVfZGVmYWRkciwgQVgyNV9BRERSX0xFTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2NjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gc2NjX29wZW4sCisJLm5kb19zdG9wID0gc2NjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHNjY19zZW5kX3BhY2tldCwKKwkubmRvX2RvX2lvY3RsID0gc2NjX2lvY3RsLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgc2V0dXBfYWRhcHRlcihpbnQgY2FyZF9iYXNlLCBpbnQgdHlwZSwgaW50IG4pCiB7CiAJaW50IGksIGlycSwgY2hpcDsKQEAgLTU3NiwxMSArNTgyLDcgQEAKIAkJc3ByaW50ZihkZXYtPm5hbWUsICJkbWFzY2MlaSIsIDIgKiBuICsgaSk7CiAJCWRldi0+YmFzZV9hZGRyID0gY2FyZF9iYXNlOwogCQlkZXYtPmlycSA9IGlycTsKLQkJZGV2LT5vcGVuID0gc2NjX29wZW47Ci0JCWRldi0+c3RvcCA9IHNjY19jbG9zZTsKLQkJZGV2LT5kb19pb2N0bCA9IHNjY19pb2N0bDsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzY2Nfc2VuZF9wYWNrZXQ7Ci0JCWRldi0+Z2V0X3N0YXRzID0gc2NjX2dldF9zdGF0czsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnNjY19uZXRkZXZfb3BzOwogCQlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwogCQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNjY19zZXRfbWFjX2FkZHJlc3M7CiAJfQpAQCAtOTYxLDE0ICs5NjMsNiBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2NjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzY2NfcHJpdiAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIGludCBzY2Nfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnNhKQogewogCW1lbWNweShkZXYtPmRldl9hZGRyLCAoKHN0cnVjdCBzb2NrYWRkciAqKSBzYSktPnNhX2RhdGEsCkBAIC0xMjE2LDE3ICsxMjEwLDE3IEBACiAJCX0KIAkJaWYgKHByaXYtPnJ4X292ZXIpIHsKIAkJCS8qIFdlIGhhZCBhbiBvdmVycnVuICovCi0JCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlpZiAocHJpdi0+cnhfb3ZlciA9PSAyKQotCQkJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCWVsc2UKLQkJCQlwcml2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCXByaXYtPnJ4X292ZXIgPSAwOwogCQl9IGVsc2UgaWYgKHJjICYgQ1JDX0VSUikgewogCQkJLyogQ291bnQgaW52YWxpZCBDUkMgb25seSBpZiBwYWNrZXQgbGVuZ3RoID49IG1pbmltdW0gKi8KIAkJCWlmIChjYiA+PSAxNSkgewotCQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCXByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGNiID49IDE1KSB7CkBAIC0xMjM5LDggKzEyMzMsOCBAQAogCQkJCQlwcml2LT5yeF9jb3VudCsrOwogCQkJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yeF93b3JrKTsKIAkJCQl9IGVsc2UgewotCQkJCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJcHJpdi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTI3NSw3ICsxMjY5LDcgQEAKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihjYiArIDEpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCS8qIERyb3AgcGFja2V0ICovCi0JCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfSBlbHNlIHsKIAkJCS8qIEZpbGwgYnVmZmVyICovCiAJCQlkYXRhID0gc2tiX3B1dChza2IsIGNiICsgMSk7CkBAIC0xMjgzLDggKzEyNzcsOCBAQAogCQkJbWVtY3B5KCZkYXRhWzFdLCBwcml2LT5yeF9idWZbaV0sIGNiKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBwcml2LT5kZXYpOwogCQkJbmV0aWZfcngoc2tiKTsKLQkJCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNiOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNiOwogCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yaW5nX2xvY2ssIGZsYWdzKTsKIAkJLyogTW92ZSB0YWlsICovCkBAIC0xMzUxLDE1ICsxMzQ1LDE1IEBACiAJCQl3cml0ZV9zY2MocHJpdiwgUjEsIEVYVF9JTlRfRU5BQiB8IFdUX0ZOX1JEWUZOKTsKIAkJaWYgKHJlcykgewogCQkJLyogVXBkYXRlIHBhY2tldCBzdGF0aXN0aWNzICovCi0JCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJCXByaXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJLyogT3RoZXIgdW5kZXJydW4gaW50ZXJydXB0cyBtYXkgYWxyZWFkeSBiZSB3YWl0aW5nICovCiAJCQl3cml0ZV9zY2MocHJpdiwgUjAsIFJFU19FWFRfSU5UKTsKIAkJCXdyaXRlX3NjYyhwcml2LCBSMCwgUkVTX0VYVF9JTlQpOwogCQl9IGVsc2UgewogCQkJLyogVXBkYXRlIHBhY2tldCBzdGF0aXN0aWNzICovCi0JCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBwcml2LT50eF9sZW5baV07CisJCQlwcml2LT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gcHJpdi0+dHhfbGVuW2ldOwogCQkJLyogUmVtb3ZlIGZyYW1lIGZyb20gRklGTyAqLwogCQkJcHJpdi0+dHhfdGFpbCA9IChpICsgMSkgJSBOVU1fVFhfQlVGOwogCQkJcHJpdi0+dHhfY291bnQtLTsKQEAgLTE0MjUsNyArMTQxOSw3IEBACiAJCXdyaXRlX3NjYyhwcml2LCBSMTUsIERDRElFKTsKIAkJcHJpdi0+cnIwID0gcmVhZF9zY2MocHJpdiwgUjApOwogCQlpZiAocHJpdi0+cnIwICYgRENEKSB7Ci0JCQlwcml2LT5zdGF0cy5jb2xsaXNpb25zKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAkJCXJ4X29uKHByaXYpOwogCQkJcHJpdi0+c3RhdGUgPSBSWF9PTjsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwppbmRleCA4ZWJhNjFhMS4uNjFkZTU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJcGt0X2xlbiA9IHMtPmhkbGNyeC5sZW4gLSAyICsgMTsgLyogS0lTUyBrbHVkZ2UgKi8KIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkgewogCQlwcmludGsoIiVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwotCQlzLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCWNwID0gc2tiX3B1dChza2IsIHBrdF9sZW4pOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJbWVtY3B5KGNwLCBzLT5oZGxjcnguYnVmZmVyLCBwa3RfbGVuIC0gMSk7CiAJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGRldik7CiAJbmV0aWZfcngoc2tiKTsKLQlzLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiB9CiAKIHZvaWQgaGRsY2Rydl9yZWNlaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqcykKQEAgLTMyNiw3ICszMjYsNyBAQAogCQkJcy0+aGRsY3R4LmxlbiA9IHBrdF9sZW4rMjsgLyogdGhlIGFwcGVuZGVkIENSQyAqLwogCQkJcy0+aGRsY3R4LnR4X3N0YXRlID0gMjsKIAkJCXMtPmhkbGN0eC5iaXRzdHJlYW0gPSAwOwotCQkJcy0+c3RhdHMudHhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJaWYgKCFzLT5oZGxjdHgubGVuKSB7CkBAIC00MjcsMTkgKzQyNyw2IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhkbGNkcnZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGhkbGNkcnZfc3RhdGUgKnNtID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIAotCSAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLiAgVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlCi0JICogY2FyZCBvcGVuIG9yIGNsb3NlZC4gCi0JICovCi0JcmV0dXJuICZzbS0+c3RhdHM7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIE9wZW4vaW5pdGlhbGl6ZSB0aGUgYm9hcmQuIFRoaXMgaXMgY2FsbGVkIChpbiB0aGUgY3VycmVudCBrZXJuZWwpCiAgKiBzb21ldGltZSBhZnRlciBib290aW5nIHdoZW4gdGhlICdpZmNvbmZpZycgcHJvZ3JhbSBpcyBydW4uCkBAIC01NjgsMTAgKzU1NSwxMCBAQAogCQliaS5kYXRhLmNzLnB0dCA9IGhkbGNkcnZfcHR0KHMpOwogCQliaS5kYXRhLmNzLmRjZCA9IHMtPmhkbGNyeC5kY2Q7CiAJCWJpLmRhdGEuY3MucHR0X2tleWVkID0gcy0+cHR0X2tleWVkOwotCQliaS5kYXRhLmNzLnR4X3BhY2tldHMgPSBzLT5zdGF0cy50eF9wYWNrZXRzOwotCQliaS5kYXRhLmNzLnR4X2Vycm9ycyA9IHMtPnN0YXRzLnR4X2Vycm9yczsKLQkJYmkuZGF0YS5jcy5yeF9wYWNrZXRzID0gcy0+c3RhdHMucnhfcGFja2V0czsKLQkJYmkuZGF0YS5jcy5yeF9lcnJvcnMgPSBzLT5zdGF0cy5yeF9lcnJvcnM7CisJCWJpLmRhdGEuY3MudHhfcGFja2V0cyA9IGRldi0+c3RhdHMudHhfcGFja2V0czsKKwkJYmkuZGF0YS5jcy50eF9lcnJvcnMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJYmkuZGF0YS5jcy5yeF9wYWNrZXRzID0gZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQliaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGRldi0+c3RhdHMucnhfZXJyb3JzOwogCQlicmVhazsJCQogCiAJY2FzZSBIRExDRFJWQ1RMX09MREdFVFNUQVQ6CkBAIC02MzAsNiArNjE3LDE0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkcnZfbmV0ZGV2ID0geworCS5uZG9fb3Blbgk9IGhkbGNkcnZfb3BlbiwKKwkubmRvX3N0b3AJPSBoZGxjZHJ2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNkcnZfc2VuZF9wYWNrZXQsCisJLm5kb19kb19pb2N0bAk9IGhkbGNkcnZfaW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBoZGxjZHJ2X3NldF9tYWNfYWRkcmVzcywKK307CisKIC8qCiAgKiBJbml0aWFsaXplIGZpZWxkcyBpbiBoZGxjZHJ2CiAgKi8KQEAgLTY2OSwyMSArNjY0LDEzIEBACiAJcy0+Yml0YnVmX2hkbGMuc2hyZWcgPSAweDgwOwogI2VuZGlmIC8qIEhETENEUlZfREVCVUcgKi8KIAotCS8qCi0JICogaW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdAotCSAqLwotCWRldi0+b3BlbiA9IGhkbGNkcnZfb3BlbjsKLQlkZXYtPnN0b3AgPSBoZGxjZHJ2X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgPSBoZGxjZHJ2X2lvY3RsOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsY2Rydl9zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IGhkbGNkcnZfZ2V0X3N0YXRzOwogCiAJLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCiAKIAlzLT5za2IgPSBOVUxMOwogCQorCWRldi0+bmV0ZGV2X29wcyA9ICZoZGxjZHJ2X25ldGRldjsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gaGRsY2Rydl9zZXRfbWFjX2FkZHJlc3M7CiAJCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7ICAgICAgICAgICAvKiBBRl9BWDI1IGRldmljZSAqLwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQVgyNV9NQVhfSEVBREVSX0xFTiArIEFYMjVfQlBRX0hFQURFUl9MRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwppbmRleCBiYmRiMzExLi4wMzJjMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKQEAgLTU5LDggKzU5LDYgQEAKIAl1bnNpZ25lZCBjaGFyCQkqeGhlYWQ7CS8qIHBvaW50ZXIgdG8gbmV4dCBieXRlIHRvIFhNSVQgKi8KIAlpbnQJCQl4bGVmdDsJLyogYnl0ZXMgbGVmdCBpbiBYTUlUIHF1ZXVlICAgICAqLwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7Ci0KIAkvKiBEZXRhaWxlZCBTTElQIHN0YXRpc3RpY3MuICovCiAJaW50CQltdHU7CQkvKiBPdXIgbXR1ICh0byBzcG90IGNoYW5nZXMhKSAgICovCiAJaW50CQlidWZmc2l6ZTsJLyogTWF4IGJ1ZmZlcnMgc2l6ZXMgICAgICAgICAgICAqLwpAQCAtMjUzLDcgKzI1MSw3IEBACiAJaWYgKGF4LT5yYnVmZlswXSA+IDB4MGYpIHsKIAkJaWYgKGF4LT5yYnVmZlswXSAmIDB4ODApIHsKIAkJCWlmIChjaGVja19jcmNfMTYoYXgtPnJidWZmLCBheC0+cmNvdW50KSA8IDApIHsKLQkJCQlheC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAogCQkJCXJldHVybjsKQEAgLTI2OCw3ICsyNjYsNyBAQAogCQkJKmF4LT5yYnVmZiAmPSB+MHg4MDsKIAkJfSBlbHNlIGlmIChheC0+cmJ1ZmZbMF0gJiAweDIwKSAgewogCQkJaWYgKGNoZWNrX2NyY19mbGV4KGF4LT5yYnVmZiwgYXgtPnJjb3VudCkgPCAwKSB7Ci0JCQkJYXgtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWF4LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtMjk1LDcgKzI5Myw3IEBACiAJaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKGNvdW50KSkgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIm1raXNzOiAlczogbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCSAgICAgICBheC0+ZGV2LT5uYW1lKTsKLQkJYXgtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJYXgtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCQlyZXR1cm47CiAJfQpAQCAtMzAzLDggKzMwMSw4IEBACiAJbWVtY3B5KHNrYl9wdXQoc2tiLGNvdW50KSwgYXgtPnJidWZmLCBjb3VudCk7CiAJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGF4LT5kZXYpOwogCW5ldGlmX3J4KHNrYik7Ci0JYXgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlheC0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CisJYXgtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWF4LT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OwogCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiB9CiAKQEAgLTM0NCw3ICszNDIsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJYXgtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCWF4LT5kZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCXNldF9iaXQoQVhGX0VSUk9SLCAmYXgtPmZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKQEAgLTQwNiw3ICs0MDQsNyBAQAogCQkJbWVtY3B5KGF4LT54YnVmZiwgYXgtPnhoZWFkLCBheC0+eGxlZnQpOwogCQl9IGVsc2UgIHsKIAkJCWF4LT54bGVmdCA9IDA7Ci0JCQlheC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KIAl9CiAKQEAgLTQxNyw3ICs0MTUsNyBAQAogCQkJbWVtY3B5KGF4LT5yYnVmZiwgb3JidWZmLCBheC0+cmNvdW50KTsKIAkJfSBlbHNlICB7CiAJCQlheC0+cmNvdW50ID0gMDsKLQkJCWF4LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJc2V0X2JpdChBWEZfRVJST1IsICZheC0+ZmxhZ3MpOwogCQl9CiAJfQpAQCAtNDQ0LDcgKzQ0Miw3IEBACiAJaWYgKGxlbiA+IGF4LT5tdHUpIHsJCS8qIFNpZ2gsIHNob3VsZG4ndCBvY2N1ciBCVVQgLi4uICovCiAJCWxlbiA9IGF4LT5tdHU7CiAJCXByaW50ayhLRVJOX0VSUiAibWtpc3M6ICVzOiB0cnVuY2F0aW5nIG92ZXJzaXplZCB0cmFuc21pdCBwYWNrZXQhXG4iLCBheC0+ZGV2LT5uYW1lKTsKLQkJYXgtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCXJldHVybjsKIAl9CkBAIC01MTgsOCArNTE2LDggQEAKIAogCXNldF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJmF4LT50dHktPmZsYWdzKTsKIAlhY3R1YWwgPSBheC0+dHR5LT5vcHMtPndyaXRlKGF4LT50dHksIGF4LT54YnVmZiwgY291bnQpOwotCWF4LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYXgtPnN0YXRzLnR4X2J5dGVzICs9IGFjdHVhbDsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGFjdHVhbDsKIAogCWF4LT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlheC0+eGxlZnQgPSBjb3VudCAtIGFjdHVhbDsKQEAgLTY2NCwzMiArNjYyLDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG1raXNzICpheCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJmF4LT5zdGF0czsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGF4X2hlYWRlcl9vcHMgPSB7CiAJLmNyZWF0ZSAgICA9IGF4X2hlYWRlciwKIAkucmVidWlsZCAgID0gYXhfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgPSBheF9vcGVuX2RldiwKKwkubmRvX3N0b3AgICAgICAgICAgICA9IGF4X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkgICAgID0gYXhfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGF4X3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIGF4X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogRmluaXNoIHNldHRpbmcgdXAgdGhlIERFVklDRSBpbmZvLiAqLwogCWRldi0+bXR1ICAgICAgICAgICAgID0gQVhfTVRVOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYXhfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IGF4X29wZW5fZGV2OwotCWRldi0+c3RvcCAgICAgICAgICAgID0gYXhfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICA9IGF4X2dldF9zdGF0czsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGF4X3NldF9tYWNfYWRkcmVzczsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAJZGV2LT5hZGRyX2xlbiAgICAgICAgPSAwOwogCWRldi0+dHlwZSAgICAgICAgICAgID0gQVJQSFJEX0FYMjU7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICAgPSAxMDsKIAlkZXYtPmhlYWRlcl9vcHMgICAgICA9ICZheF9oZWFkZXJfb3BzOworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJmF4X25ldGRldl9vcHM7CiAKIAogCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOwpAQCAtOTI5LDcgKzkyMyw3IEBACiAJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKGZwICE9IE5VTEwgJiYgKmZwKyspIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChBWEZfRVJST1IsICZheC0+ZmxhZ3MpKQotCQkJCWF4LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlheC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWNwKys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtOTgyLDkgKzk3Niw5IEBACiAJLndyaXRlX3dha2V1cAk9IG1raXNzX3dyaXRlX3dha2V1cAogfTsKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKIAkibWtpc3M6IEFYLjI1IE11bHRpa2lzcywgSGFucyBBbGJhcyBQRTFBWVhcbiI7Ci1zdGF0aWMgY2hhciBtc2dfcmVnZmFpbFtdIF9faW5pdGRhdGEgPSBLRVJOX0VSUiBcCitzdGF0aWMgY29uc3QgY2hhciBtc2dfcmVnZmFpbFtdIF9faW5pdGRhdGEgPSBLRVJOX0VSUiBcCiAJIm1raXNzOiBjYW4ndCByZWdpc3RlciBsaW5lIGRpc2NpcGxpbmUgKGVyciA9ICVkKVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbWtpc3NfaW5pdF9kcml2ZXIodm9pZCkKQEAgLTk5Myw4ICs5ODcsOSBAQAogCiAJcHJpbnRrKGJhbm5lcik7CiAKLQlpZiAoKHN0YXR1cyA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhOX0FYMjUsICZheF9sZGlzYykpICE9IDApCi0JCXByaW50ayhtc2dfcmVnZmFpbCk7CisJc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fQVgyNSwgJmF4X2xkaXNjKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXByaW50ayhtc2dfcmVnZmFpbCwgc3RhdHVzKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IGMwMTFhZjcuLmQ3MTJlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCkBAIC0xODQsNyArMTg0LDggQEAKIAogI2luY2x1ZGUgIno4NTMwLmgiCiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkFYLjI1OiBaODUzMCBTQ0MgZHJpdmVyIHZlcnNpb24gIlZFUlNJT04iLmRsMWJrZVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorCSJBWC4yNTogWjg1MzAgU0NDIGRyaXZlciB2ZXJzaW9uICJWRVJTSU9OIi5kbDFia2VcbiI7CiAKIHN0YXRpYyB2b2lkIHRfZHdhaXQodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCB0X3R4ZGVsYXkodW5zaWduZWQgbG9uZyk7CkBAIC0xNTQyLDIzICsxNTQzLDI0IEBACiAvKiAqCQkJICAgIE5ldHdvcmsgZHJpdmVyIG1ldGhvZHMJCSAgICAgICogKi8KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2NjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgPSBzY2NfbmV0X29wZW4sCisJLm5kb19zdG9wCSAgICAgPSBzY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkgICAgID0gc2NjX25ldF90eCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHNjY19uZXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZ2V0X3N0YXRzICAgICAgID0gc2NjX25ldF9nZXRfc3RhdHMsCisJLm5kb19kb19pb2N0bCAgICAgICAgPSBzY2NfbmV0X2lvY3RsLAorfTsKKwogLyogLS0tLT4gSW5pdGlhbGl6ZSBkZXZpY2UgPC0tLS0tICovCiAKIHN0YXRpYyB2b2lkIHNjY19uZXRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICA9IDE2OwkvKiBzaG91bGQgYmUgZW5vdWdoLi4uICovCiAKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHNjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IHNjY19uZXRfY2xvc2U7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNjY19uZXRfdHg7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmc2NjX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzICAgICAgPSAmYXgyNV9oZWFkZXJfb3BzOwogCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzY2NfbmV0X3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cyAgICAgICA9IHNjY19uZXRfZ2V0X3N0YXRzOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gc2NjX25ldF9pb2N0bDsKLQlkZXYtPnR4X3RpbWVvdXQgICAgICA9IE5VTEw7Ci0KIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCAgQVgyNV9BRERSX0xFTik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKICAKQEAgLTIwNzMsNyArMjA3NSw3IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjY19uZXRfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NjX25ldF9zZXFfb3BzID0gewogCS5zdGFydCAgPSBzY2NfbmV0X3NlcV9zdGFydCwKIAkubmV4dCAgID0gc2NjX25ldF9zZXFfbmV4dCwKIAkuc3RvcCAgID0gc2NjX25ldF9zZXFfc3RvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKaW5kZXggNTQwN2Y3NC4uNTAwYTQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKQEAgLTc3LDcgKzc3LDggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3QgY2hhciB5YW1fZHJ2bmFtZVtdID0gInlhbSI7Ci1zdGF0aWMgY2hhciB5YW1fZHJ2aW5mb1tdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIllBTSBkcml2ZXIgdmVyc2lvbiAwLjggYnkgRjFPQVQvRjZGQkJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB5YW1fZHJ2aW5mb1tdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorCSJZQU0gZHJpdmVyIHZlcnNpb24gMC44IGJ5IEYxT0FUL0Y2RkJCXG4iOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTE1LDEwICsxMTYsNiBAQAogCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCS8qIFN0YXRzIHNlY3Rpb24gKi8KLQotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCiAJaW50IG5iX3J4aW50OwogCWludCBuYl9tZGludDsKIApAQCAtNTA3LDcgKzUwNCw3IEBACiAJCX0gZWxzZSB7CiAJCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwotCQkJCSsreXAtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJCQkJKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CiAJCQl9IGVsc2UgewogCQkJCXVuc2lnbmVkIGNoYXIgKmNwOwogCQkJCWNwID0gc2tiX3B1dChza2IsIHBrdF9sZW4pOwpAQCAtNTE1LDcgKzUxMiw3IEBACiAJCQkJbWVtY3B5KGNwLCB5cC0+cnhfYnVmLCBwa3RfbGVuIC0gMSk7CiAJCQkJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJbmV0aWZfcngoc2tiKTsKLQkJCQkrK3lwLT5zdGF0cy5yeF9wYWNrZXRzOworCQkJCSsrZGV2LT5zdGF0cy5yeF9wYWNrZXRzOwogCQkJfQogCQl9CiAJfQpAQCAtNjc3LDcgKzY3NCw3IEBACiAJCQl5cC0+dHhfY291bnQgPSAxOwogCQkJeXAtPnR4X3N0YXRlID0gVFhfSEVBRDsKIAkJfQotCQkrK3lwLT5zdGF0cy50eF9wYWNrZXRzOworCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKIAkJYnJlYWs7CiAJY2FzZSBUWF9UQUlMOgogCQlpZiAoLS15cC0+dHhfY291bnQgPD0gMCkgewpAQCAtNzE2LDcgKzcxMyw3IEBACiAJCQloYW5kbGVkID0gMTsKIAogCQkJaWYgKGxzciAmIExTUl9PRSkKLQkJCQkrK3lwLT5zdGF0cy5yeF9maWZvX2Vycm9yczsKKwkJCQkrK2Rldi0+c3RhdHMucnhfZmlmb19lcnJvcnM7CiAKIAkJCXlwLT5kY2QgPSAobXNyICYgUlhfRENEKSA/IDEgOiAwOwogCkBAIC03NzgsMTYgKzc3NSwxNiBAQAogCXNlcV9wcmludGYoc2VxLCAiICBUeFRhaWwgICAldVxuIiwgeXAtPnR4dGFpbCk7CiAJc2VxX3ByaW50ZihzZXEsICIgIFNsb3RUaW1lICV1XG4iLCB5cC0+c2xvdCk7CiAJc2VxX3ByaW50ZihzZXEsICIgIFBlcnNpc3QgICV1XG4iLCB5cC0+cGVycyk7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIFR4RnJhbWVzICVsdVxuIiwgeXAtPnN0YXRzLnR4X3BhY2tldHMpOwotCXNlcV9wcmludGYoc2VxLCAiICBSeEZyYW1lcyAlbHVcbiIsIHlwLT5zdGF0cy5yeF9wYWNrZXRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgVHhGcmFtZXMgJWx1XG4iLCBkZXYtPnN0YXRzLnR4X3BhY2tldHMpOworCXNlcV9wcmludGYoc2VxLCAiICBSeEZyYW1lcyAlbHVcbiIsIGRldi0+c3RhdHMucnhfcGFja2V0cyk7CiAJc2VxX3ByaW50ZihzZXEsICIgIFR4SW50ICAgICV1XG4iLCB5cC0+bmJfbWRpbnQpOwogCXNlcV9wcmludGYoc2VxLCAiICBSeEludCAgICAldVxuIiwgeXAtPm5iX3J4aW50KTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgUnhPdmVyICAgJWx1XG4iLCB5cC0+c3RhdHMucnhfZmlmb19lcnJvcnMpOworCXNlcV9wcmludGYoc2VxLCAiICBSeE92ZXIgICAlbHVcbiIsIGRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMpOwogCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB5YW1fc2Vxb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB5YW1fc2Vxb3BzID0gewogCS5zdGFydCA9IHlhbV9zZXFfc3RhcnQsCiAJLm5leHQgPSB5YW1fc2VxX25leHQsCiAJLnN0b3AgPSB5YW1fc2VxX3N0b3AsCkBAIC04MTIsMjYgKzgwOSw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnlhbV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgeWFtX3BvcnQgKnlwOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JeXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmICh5cC0+bWFnaWMgIT0gWUFNX01BR0lDKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIAotCSAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLiAgVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlCi0JICogY2FyZCBvcGVuIG9yIGNsb3NlZC4gCi0JICovCi0JcmV0dXJuICZ5cC0+c3RhdHM7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgaW50IHlhbV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04NzcsMTAgKzg1NCwxMCBAQAogCiAJLyogUmVzZXQgb3ZlcnJ1bnMgZm9yIGFsbCBwb3J0cyAtIEZQR0EgcHJvZ3JhbW1pbmcgbWFrZXMgb3ZlcnJ1bnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJfUE9SVFM7IGkrKykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0geWFtX2RldnNbaV07Ci0JCXN0cnVjdCB5YW1fcG9ydCAqeXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQlpbmIoTFNSKGRldi0+YmFzZV9hZGRyKSk7Ci0JCXlwLT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IDA7CisJCXN0cnVjdCBuZXRfZGV2aWNlICp5YW1fZGV2ID0geWFtX2RldnNbaV07CisKKwkJaW5iKExTUih5YW1fZGV2LT5iYXNlX2FkZHIpKTsKKwkJeWFtX2Rldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSAwOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIiVzIGF0IGlvYmFzZSAweCVseCBpcnEgJXUgdWFydCAlc1xuIiwgZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEsCkBAIC0xMDY4LDYgKzEwNDUsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeWFtX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSB5YW1fb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IHlhbV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgICA9IHlhbV9zZW5kX3BhY2tldCwKKwkubmRvX2RvX2lvY3RsIAkgICAgID0geWFtX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0geWFtX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIHlhbV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB5YW1fcG9ydCAqeXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTA4OCwxOCArMTA3MywxMSBAQAogCWRldi0+YmFzZV9hZGRyID0geXAtPmlvYmFzZTsKIAlkZXYtPmlycSA9IHlwLT5pcnE7CiAKLQlkZXYtPm9wZW4gPSB5YW1fb3BlbjsKLQlkZXYtPnN0b3AgPSB5YW1fY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHlhbV9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHlhbV9zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IHlhbV9nZXRfc3RhdHM7Ci0KIAlza2JfcXVldWVfaGVhZF9pbml0KCZ5cC0+c2VuZF9xdWV1ZSk7CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmeWFtX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmF4MjVfaGVhZGVyX29wczsKIAotCWRldi0+c2V0X21hY19hZGRyZXNzID0geWFtX3NldF9tYWNfYWRkcmVzczsKLQogCWRldi0+dHlwZSA9IEFSUEhSRF9BWDI1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQVgyNV9NQVhfSEVBREVSX0xFTjsKIAlkZXYtPm10dSA9IEFYMjVfTVRVOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDg3YTcwNjYuLmE4MTVlMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJCSAgRU1BQ19GVFJfNDQwRVBfUEhZX0NMS19GSVgpKQogCQlEQkcoZGV2LCAiJXMiIE5MLCBlcnJvcik7CiAJZWxzZSBpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlc1xuIiwgZGV2LT5uZGV2LT5uYW1lLCBlcnJvcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkZXYtPm9mZGV2LT5ub2RlLT5mdWxsX25hbWUsIGVycm9yKTsKIH0KIAogLyogRU1BQyBQSFkgY2xvY2sgd29ya2Fyb3VuZDoKQEAgLTI1OTQsNiArMjU5NCw5IEBACiAJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQ2MGV4IikgfHwKIAkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGVtYWMtNDYwZ3QiKSkKIAkJCWRldi0+ZmVhdHVyZXMgfD0gRU1BQ19GVFJfNDYwRVhfUEhZX0NMS19GSVg7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQwNWV4IikgfHwKKwkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGVtYWMtNDA1ZXhyIikpCisJCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYOwogCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYzQiKSkgewogCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSX0VNQUM0OwogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00NDBneCIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDViNWJmOWYuLmMyNWJjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTkwNSw2ICs5MDUsMTcgQEAKIAlOVUxMCiB9OwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWJtbGFuYV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaWJtbGFuYV9vcGVuLAorCS5uZG9fc3RvcCAJCT0gaWJtbGFuYV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWJtbGFuYV90eCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlibWxhbmFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpYm1sYW5hX2luaXRfb25lKHN0cnVjdCBkZXZpY2UgKmtkZXYpCiB7CiAJc3RydWN0IG1jYV9kZXZpY2UgKm1kZXYgPSB0b19tY2FfZGV2aWNlKGtkZXYpOwpAQCAtOTczLDExICs5ODQsNyBAQAogCW1jYV9kZXZpY2Vfc2V0X2NsYWltKG1kZXYsIDEpOwogCiAJLyogc2V0IG1ldGhvZHMgKi8KLQotCWRldi0+b3BlbiA9IGlibWxhbmFfb3BlbjsKLQlkZXYtPnN0b3AgPSBpYm1sYW5hX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWJtbGFuYV90eDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlibWxhbmFfc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpYm1sYW5hX25ldGRldl9vcHM7CiAJZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCiAJLyogY29weSBvdXQgTUFDIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCBkZmE2MzQ4Li41YzYzMTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0xMDI4LDEwICsxMDI4LDEwIEBACiAKIAkJaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1NVQ0NFU1MpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCWlmIChpYm12ZXRoX3J4cV9wZW5kaW5nX2J1ZmZlcihhZGFwdGVyKSAmJgotCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkgICAgbmFwaV9yZXNjaGVkdWxlKG5hcGkpKSB7CiAJCQlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkJICAgICAgIFZJT19JUlFfRElTQUJMRSk7CiAJCQlnb3RvIHJlc3RhcnRfcG9sbDsKQEAgLTEwNDcsMTEgKzEwNDcsMTEgQEAKIAlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkgICAgICAgVklPX0lSUV9ESVNBQkxFKTsKIAkJaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1NVQ0NFU1MpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlCmluZGV4IDE5MjdiM2YuLjgzNzJjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBJbnRlbCA4MjU3NSBQQ0ktRXhwcmVzcyBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMyw1ICszMyw1IEBACiBvYmotJChDT05GSUdfSUdCKSArPSBpZ2IubwogCiBpZ2Itb2JqcyA6PSBpZ2JfbWFpbi5vIGlnYl9ldGh0b29sLm8gZTEwMDBfODI1NzUubyBcCi0JICAgIGUxMDAwX21hYy5vIGUxMDAwX252bS5vIGUxMDAwX3BoeS5vCisJICAgIGUxMDAwX21hYy5vIGUxMDAwX252bS5vIGUxMDAwX3BoeS5vIGUxMDAwX21ieC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKaW5kZXggMTNjYTczZi4uZWZkOWJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNjIsMTcgKzYyLDEyIEBACiBzdGF0aWMgczMyICBpZ2JfcmVzZXRfaW5pdF9zY3JpcHRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX3JlYWRfbWFjX2FkZHJfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogCi0KLXN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSB7Ci0JYm9vbCBzZ21paV9hY3RpdmU7Ci19OwotCiBzdGF0aWMgczMyIGlnYl9nZXRfaW52YXJpYW50c184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CiAJc3RydWN0IGUxMDAwX252bV9pbmZvICpudm0gPSAmaHctPm52bTsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwotCXN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSAqZGV2X3NwZWM7CisJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICogZGV2X3NwZWMgPSAmaHctPmRldl9zcGVjLl84MjU3NTsKIAl1MzIgZWVjZDsKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgc2l6ZTsKQEAgLTg1LDggKzgwLDEwIEBACiAJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc1OwogCQlicmVhazsKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3NjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9OUzoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CiAJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTQsMTcgKzkxLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogTUFDIGluaXRpYWxpemF0aW9uICovCi0JaHctPmRldl9zcGVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1KTsKLQotCS8qIERldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiAqLwotCWh3LT5kZXZfc3BlYyA9IGt6YWxsb2MoaHctPmRldl9zcGVjX3NpemUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFody0+ZGV2X3NwZWMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2X3NwZWMgPSAoc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICopaHctPmRldl9zcGVjOwotCiAJLyogU2V0IG1lZGlhIHR5cGUgKi8KIAkvKgogCSAqIFRoZSA4MjU3NSB1c2VzIGJpdHMgMjI6MjMgZm9yIGxpbmsgbW9kZS4gVGhlIG1vZGUgY2FuIGJlIGNoYW5nZWQKQEAgLTE5NSwxMyArMTgxLDEzIEBACiAKIAkvKiBQSFkgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIAlpZiAoaWdiX3NnbWlpX2FjdGl2ZV84MjU3NShodykpIHsKLQkJcGh5LT5vcHMucmVzZXRfcGh5ICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldF9zZ21paV84MjU3NTsKLQkJcGh5LT5vcHMucmVhZF9waHlfcmVnICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19zZ21paV84MjU3NTsKLQkJcGh5LT5vcHMud3JpdGVfcGh5X3JlZyAgICAgID0gaWdiX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzU7CisJCXBoeS0+b3BzLnJlc2V0ICAgICAgICAgICAgICA9IGlnYl9waHlfaHdfcmVzZXRfc2dtaWlfODI1NzU7CisJCXBoeS0+b3BzLnJlYWRfcmVnICAgICAgICAgICA9IGlnYl9yZWFkX3BoeV9yZWdfc2dtaWlfODI1NzU7CisJCXBoeS0+b3BzLndyaXRlX3JlZyAgICAgICAgICA9IGlnYl93cml0ZV9waHlfcmVnX3NnbWlpXzgyNTc1OwogCX0gZWxzZSB7Ci0JCXBoeS0+b3BzLnJlc2V0X3BoeSAgICAgICAgICA9IGlnYl9waHlfaHdfcmVzZXQ7Ci0JCXBoeS0+b3BzLnJlYWRfcGh5X3JlZyAgICAgICA9IGlnYl9yZWFkX3BoeV9yZWdfaWdwOwotCQlwaHktPm9wcy53cml0ZV9waHlfcmVnICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3A7CisJCXBoeS0+b3BzLnJlc2V0ICAgICAgICAgICAgICA9IGlnYl9waHlfaHdfcmVzZXQ7CisJCXBoeS0+b3BzLnJlYWRfcmVnICAgICAgICAgICA9IGlnYl9yZWFkX3BoeV9yZWdfaWdwOworCQlwaHktPm9wcy53cml0ZV9yZWcgICAgICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3A7CiAJfQogCiAJLyogU2V0IHBoeS0+cGh5X2FkZHIgYW5kIHBoeS0+aWQuICovCkBAIC0yMjksNiArMjE1LDEwIEBACiAJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAl9CiAKKwkvKiBpZiA4MjU3NiB0aGVuIGluaXRpYWxpemUgbWFpbGJveCBwYXJhbWV0ZXJzICovCisJaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF84MjU3NikKKwkJaWdiX2luaXRfbWJ4X3BhcmFtc19wZihodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUxLDcgKzQ0MSw3IEBACiAJICogU0ZQIGRvY3VtZW50YXRpb24gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyB0byBjb25maWd1cmUgdGhlIFNQRiBtb2R1bGUKIAkgKiB0byB3b3JrIG9uIFNHTUlJLiAgTm8gZnVydGhlciBkb2N1bWVudGF0aW9uIGlzIGdpdmVuLgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFCLCAweDgwODQpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUIsIDB4ODA4NCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC00ODAsMjggKzQ3MCwyOCBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBkYXRhOwogCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgJmRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWlmIChhY3RpdmUpIHsKIAkJZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QwX0xQTFU7Ci0JCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkJCQkJIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFdoZW4gTFBMVSBpcyBlbmFibGVkLCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCi0JCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJJmRhdGEpOwogCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWRhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDBfTFBMVTsKLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCQkgZGF0YSk7CiAJCS8qCiAJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZApAQCAtNTEwLDI0ICs1MDAsMjQgQEAKIAkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4KIAkJICovCiAJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29uKSB7Ci0JCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LAogCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKLQkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCUlHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CkBAIC04MDMsNyArNzkzLDcgQEAKIH0KIAogLyoqCi0gKiAgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcworICogIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0IC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQogICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCkBAIC04MTUsOSArODA1LDkgQEAKICAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKICAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuCiAgKiovCi12b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCit2b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7CiAJdTMyIGhhc2hfdmFsdWU7CiAJdTMyIGk7CkBAIC0xMDUxLDcgKzEwNDEsNyBAQAogCQkgKiBkZXBlbmRpbmcgb24gdXNlciBzZXR0aW5ncy4KIAkJICovCiAJCWh3X2RiZygiRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKLQkJcmV0X3ZhbCA9IGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KGh3KTsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmZvcmNlX3NwZWVkX2R1cGxleChodyk7CiAJCWlmIChyZXRfdmFsKSB7CiAJCQlod19kYmcoIkVycm9yIEZvcmNpbmcgU3BlZWQgYW5kIER1cGxleFxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTExMTAsNiArMTEwMCwxMyBAQAogCSAgICAgICBFMTAwMF9DVFJMX1NXRFBJTjE7CiAJd3IzMihFMTAwMF9DVFJMLCByZWcpOwogCisJLyogUG93ZXIgb24gcGh5IGZvciA4MjU3NiBmaWJlciBhZGFwdGVycyAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpIHsKKwkJcmVnID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJCXJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBOworCQl3cjMyKEUxMDAwX0NUUkxfRVhULCByZWcpOworCX0KKwogCS8qIFNldCBzd2l0Y2ggY29udHJvbCB0byBzZXJkZXMgZW5lcmd5IGRldGVjdCAqLwogCXJlZyA9IHJkMzIoRTEwMDBfQ09OTlNXKTsKIAlyZWcgfD0gRTEwMDBfQ09OTlNXX0VOUkdTUkM7CkBAIC0xMjI3LDIwICsxMjI0LDEyIEBACiAgKiovCiBzdGF0aWMgYm9vbCBpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0Jc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYzsKLQlib29sIHJldF92YWw7CisJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYyA9ICZody0+ZGV2X3NwZWMuXzgyNTc1OwogCi0JaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NSkgewotCQlyZXRfdmFsID0gZmFsc2U7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc1ICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NikKKwkJcmV0dXJuIGZhbHNlOwogCi0JZGV2X3NwZWMgPSAoc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICopaHctPmRldl9zcGVjOwotCi0JcmV0X3ZhbCA9IGRldl9zcGVjLT5zZ21paV9hY3RpdmU7Ci0KLW91dDoKLQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gZGV2X3NwZWMtPnNnbWlpX2FjdGl2ZTsKIH0KIAogLyoqCkBAIC0xNDMwLDYgKzE0MTksNDQgQEAKIAlyZDMyKEUxMDAwX01QQyk7CiB9CiAKKy8qKgorICogIGlnYl92bWRxX3NldF9sb29wYmFja19wZiAtIGVuYWJsZSBvciBkaXNhYmxlIHZtZHEgbG9vcGJhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdAorICogIEBlbmFibGU6IHN0YXRlIHRvIGVudGVyLCBlaXRoZXIgZW5hYmxlZCBvciBkaXNhYmxlZAorICoKKyAqICBlbmFibGVzL2Rpc2FibGVzIEwyIHN3aXRjaCBsb29wYmFjayBmdW5jdGlvbmFsaXR5LgorICoqLwordm9pZCBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJdTMyIGR0eHN3YyA9IHJkMzIoRTEwMDBfRFRYU1dDKTsKKworCWlmIChlbmFibGUpCisJCWR0eHN3YyB8PSBFMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTjsKKwllbHNlCisJCWR0eHN3YyAmPSB+RTEwMDBfRFRYU1dDX1ZNRFFfTE9PUEJBQ0tfRU47CisKKwl3cjMyKEUxMDAwX0RUWFNXQywgZHR4c3djKTsKK30KKworLyoqCisgKiAgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgdm1kcSByZXBsaWNhdGlvbgorICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CisgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCisgKgorICogIGVuYWJsZXMvZGlzYWJsZXMgcmVwbGljYXRpb24gb2YgcGFja2V0cyBhY3Jvc3MgbXVsdGlwbGUgcG9vbHMuCisgKiovCit2b2lkIGlnYl92bWRxX3NldF9yZXBsaWNhdGlvbl9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgdnRfY3RsID0gcmQzMihFMTAwMF9WVF9DVEwpOworCisJaWYgKGVuYWJsZSkKKwkJdnRfY3RsIHw9IEUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOOworCWVsc2UKKwkJdnRfY3RsICY9IH5FMTAwMF9WVF9DVExfVk1fUkVQTF9FTjsKKworCXdyMzIoRTEwMDBfVlRfQ1RMLCB2dF9jdGwpOworfQorCiBzdGF0aWMgc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zIGUxMDAwX21hY19vcHNfODI1NzUgPSB7CiAJLnJlc2V0X2h3ICAgICAgICAgICAgID0gaWdiX3Jlc2V0X2h3XzgyNTc1LAogCS5pbml0X2h3ICAgICAgICAgICAgICA9IGlnYl9pbml0X2h3XzgyNTc1LApAQCAtMTQ0MCwxNiArMTQ2NywxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlMTAwMF9waHlfb3BlcmF0aW9ucyBlMTAwMF9waHlfb3BzXzgyNTc1ID0gewotCS5hY3F1aXJlX3BoeSAgICAgICAgICA9IGlnYl9hY3F1aXJlX3BoeV84MjU3NSwKKwkuYWNxdWlyZSAgICAgICAgICAgICAgPSBpZ2JfYWNxdWlyZV9waHlfODI1NzUsCiAJLmdldF9jZmdfZG9uZSAgICAgICAgID0gaWdiX2dldF9jZmdfZG9uZV84MjU3NSwKLQkucmVsZWFzZV9waHkgICAgICAgICAgPSBpZ2JfcmVsZWFzZV9waHlfODI1NzUsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gaWdiX3JlbGVhc2VfcGh5XzgyNTc1LAogfTsKIAogc3RhdGljIHN0cnVjdCBlMTAwMF9udm1fb3BlcmF0aW9ucyBlMTAwMF9udm1fb3BzXzgyNTc1ID0gewotCS5hY3F1aXJlX252bSAgICAgICAgICA9IGlnYl9hY3F1aXJlX252bV84MjU3NSwKLQkucmVhZF9udm0gICAgICAgICAgICAgPSBpZ2JfcmVhZF9udm1fZWVyZCwKLQkucmVsZWFzZV9udm0gICAgICAgICAgPSBpZ2JfcmVsZWFzZV9udm1fODI1NzUsCi0JLndyaXRlX252bSAgICAgICAgICAgID0gaWdiX3dyaXRlX252bV9zcGksCisJLmFjcXVpcmUgICAgICAgICAgICAgID0gaWdiX2FjcXVpcmVfbnZtXzgyNTc1LAorCS5yZWFkICAgICAgICAgICAgICAgICA9IGlnYl9yZWFkX252bV9lZXJkLAorCS5yZWxlYXNlICAgICAgICAgICAgICA9IGlnYl9yZWxlYXNlX252bV84MjU3NSwKKwkud3JpdGUgICAgICAgICAgICAgICAgPSBpZ2Jfd3JpdGVfbnZtX3NwaSwKIH07CiAKIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc1X2luZm8gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCmluZGV4IGMxOTI4YjUuLmVhZjk3NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgX0UxMDAwXzgyNTc1X0hfCiAjZGVmaW5lIF9FMTAwMF84MjU3NV9IXwogCi12b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KHN0cnVjdCBlMTAwMF9odyosIHU4KiwgdTMyLCB1MzIsIHUzMik7Cit2b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyosIHU4KiwgdTMyLCB1MzIsIHUzMik7CiBleHRlcm4gdm9pZCBpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBpZ2JfcnhfZmlmb19mbHVzaF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIApAQCAtNDAsOCArNDAsMTEgQEAKICNkZWZpbmUgRTEwMDBfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogU2hpZnQgX2xlZnRfICovCiAjZGVmaW5lIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVMgICAgICAgICAgMHgwQTAwMDAwMAorI2RlZmluZSBFMTAwMF9TUlJDVExfRFJPUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCiAKICNkZWZpbmUgRTEwMDBfTVJRQ19FTkFCTEVfUlNTXzRRICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFMTAwMF9NUlFDX0VOQUJMRV9WTURRICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEUxMDAwX01SUUNfRU5BQkxFX1ZNRFFfUlNTXzJRICAgICAgIDB4MDAwMDAwMDUKICNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAgICAgICAgMHgwMDQwMDAwMAogI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUCAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQX0VYICAgIDB4MDEwMDAwMDAKQEAgLTU4LDkgKzYxLDYgQEAKICAgICBFMTAwMF9FSUNSX1JYX1FVRVVFMiB8ICAgIFwKICAgICBFMTAwMF9FSUNSX1JYX1FVRVVFMykKIAotI2RlZmluZSBFMTAwMF9FSU1TX1JYX1FVRVVFIEUxMDAwX0VJQ1JfUlhfUVVFVUUKLSNkZWZpbmUgRTEwMDBfRUlNU19UWF9RVUVVRSBFMTAwMF9FSUNSX1RYX1FVRVVFCi0KIC8qIEltbWVkaWF0ZSBJbnRlcnJ1cHQgUnggKEEuSy5BLiBMb3cgTGF0ZW5jeSBJbnRlcnJ1cHQpICovCiAKIC8qIFJlY2VpdmUgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCkBAIC05NSwxMiArOTUsNiBAQAogI2RlZmluZSBFMTAwMF9SWERBRFZfSERSQlVGTEVOX01BU0sgICAgICAweDdGRTAKICNkZWZpbmUgRTEwMDBfUlhEQURWX0hEUkJVRkxFTl9TSElGVCAgICAgNQogCi0vKiBSU1MgSGFzaCByZXN1bHRzICovCi0KLS8qIFJTUyBQYWNrZXQgVHlwZXMgYXMgaW5kaWNhdGVkIGluIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCAgICAgICAgMHgwMDAwMDAxMCAvKiBJUFY0IGhkciBwcmVzZW50ICovCi0jZGVmaW5lIEUxMDAwX1JYREFEVl9QS1RUWVBFX1RDUCAgICAgICAgIDB4MDAwMDAxMDAgLyogVENQIGhkciBwcmVzZW50ICovCi0KIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwogdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgewogCXN0cnVjdCB7CkBAIC0xMTYsNiArMTEwLDcgQEAKIH07CiAKIC8qIEFkdiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbmZpZyBNYXNrcyAqLworI2RlZmluZSBFMTAwMF9BRFZUWERfTUFDX1RTVEFNUCAgIDB4MDAwODAwMDAgLyogSUVFRTE1ODggVGltZXN0YW1wIHBhY2tldCAqLwogI2RlZmluZSBFMTAwMF9BRFZUWERfRFRZUF9DVFhUICAgIDB4MDAyMDAwMDAgLyogQWR2YW5jZWQgQ29udGV4dCBEZXNjcmlwdG9yICovCiAjZGVmaW5lIEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgICAgMHgwMDMwMDAwMCAvKiBBZHZhbmNlZCBEYXRhIERlc2NyaXB0b3IgKi8KICNkZWZpbmUgRTEwMDBfQURWVFhEX0RDTURfSUZDUyAgICAweDAyMDAwMDAwIC8qIEluc2VydCBGQ1MgKEV0aGVybmV0IENSQykgKi8KQEAgLTE0OSwxMSArMTQ0LDggQEAKICNkZWZpbmUgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSAgMHgwMjAwMDAwMCAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KIAogLyogRGlyZWN0IENhY2hlIEFjY2VzcyAoRENBKSBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfRU5BQkxFICAweDAwMDAwMDAwIC8qIERDQSBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX0RJU0FCTEUgMHgwMDAwMDAwMSAvKiBEQ0EgRGlzYWJsZSAqLwotCi0jZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMSAweDAwIC8qIERDQSBNb2RlIENCMSAqLwotI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjIgMHgwMiAvKiBEQ0EgTW9kZSBDQjIgKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfRElTQUJMRSAweDAxIC8qIERDQSBEaXNhYmxlICovCisjZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAgICAgMHgwMiAvKiBEQ0EgTW9kZSBDQjIgKi8KIAogI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0sgMHgwMDAwMDAxRiAvKiBSeCBDUFVJRCBNYXNrICovCiAjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFJ4IERlc2MgZW5hYmxlICovCkBAIC0xNzAsNCArMTYyLDQ0IEBACiAjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkxfQ1BVSURfU0hJRlQgMjQgLyogVHggQ1BVSUQgbm93IGluIHRoZSBsYXN0IGJ5dGUgKi8KICNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVCAyNCAvKiBSeCBDUFVJRCBub3cgaW4gdGhlIGxhc3QgYnl0ZSAqLwogCisjZGVmaW5lIE1BWF9OVU1fVkZTICAgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBFMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTiAoMSA8PCAzMSkgIC8qIGdsb2JhbCBWRiBMQiBlbmFibGUgKi8KKworLyogRWFzeSBkZWZpbmVzIGZvciBzZXR0aW5nIGRlZmF1bHQgcG9vbCwgd291bGQgbm9ybWFsbHkgYmUgbGVmdCBhIHplcm8gKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9TSElGVCA3CisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfTUFTSyAgKDB4NyA8PCBFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX1NISUZUKQorCisvKiBPdGhlciB1c2VmdWwgVk1EX0NUTCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9JR05PUkVfTUFDICAgICAgICAgKDEgPDwgMjgpCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9ESVNBQkxFX0RFRl9QT09MICAgKDEgPDwgMjkpCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOICAgICAgICAgKDEgPDwgMzApCisKKy8qIFBlciBWTSBPZmZsb2FkIHJlZ2lzdGVyIHNldHVwICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JMUE1MX01BU0sgMHgwMDAwM0ZGRiAvKiBMb25nIFBhY2tldCBNYXhpbXVtIExlbmd0aCBtYXNrICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX0xQRSAgICAgICAgMHgwMDAxMDAwMCAvKiBBY2NlcHQgTG9uZyBwYWNrZXQgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUlNTRSAgICAgICAweDAwMDIwMDAwIC8qIEVuYWJsZSBSU1MgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfQVVQRSAgICAgICAweDAxMDAwMDAwIC8qIEFjY2VwdCB1bnRhZ2dlZCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JPTVBFICAgICAgMHgwMjAwMDAwMCAvKiBBY2NlcHQgb3ZlcmZsb3cgbXVsdGljYXN0ICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JPUEUgICAgICAgMHgwNDAwMDAwMCAvKiBBY2NlcHQgb3ZlcmZsb3cgdW5pY2FzdCAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9CQU0gICAgICAgIDB4MDgwMDAwMDAgLyogQWNjZXB0IEJyb2FkY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX01QTUUgICAgICAgMHgxMDAwMDAwMCAvKiBNdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9TVFJWTEFOICAgIDB4NDAwMDAwMDAgLyogVmxhbiBzdHJpcHBpbmcgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1NUUkNSQyAgICAgMHg4MDAwMDAwMCAvKiBDUkMgc3RyaXBwaW5nIGVuYWJsZSAqLworCisjZGVmaW5lIEUxMDAwX1ZMVkZfQVJSQVlfU0laRSAgICAgMzIKKyNkZWZpbmUgRTEwMDBfVkxWRl9WTEFOSURfTUFTSyAgICAweDAwMDAwRkZGCisjZGVmaW5lIEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCAgMTIKKyNkZWZpbmUgRTEwMDBfVkxWRl9QT09MU0VMX01BU0sgICAoMHhGRiA8PCBFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQpCisjZGVmaW5lIEUxMDAwX1ZMVkZfTFZMQU4gICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUgIDB4ODAwMDAwMDAKKworI2RlZmluZSBFMTAwMF9JT1ZDVEwgMHgwNUJCQworI2RlZmluZSBFMTAwMF9JT1ZDVExfUkVVU0VfVkZRIDB4MDAwMDAwMDEKKworI2RlZmluZSBBTExfUVVFVUVTICAgMHhGRkZGCisKK3ZvaWQgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKK3ZvaWQgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAppbmRleCA0MGQwMzQyLi5hZDJkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNDIsMzMgKzQyLDExIEBACiAjZGVmaW5lIEUxMDAwX1dVRkNfRVggICAweDAwMDAwMDA0IC8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KICNkZWZpbmUgRTEwMDBfV1VGQ19NQyAgIDB4MDAwMDAwMDggLyogRGlyZWN0ZWQgTXVsdGljYXN0IFdha2V1cCBFbmFibGUgKi8KICNkZWZpbmUgRTEwMDBfV1VGQ19CQyAgIDB4MDAwMDAwMTAgLyogQnJvYWRjYXN0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19BUlAgIDB4MDAwMDAwMjAgLyogQVJQIFJlcXVlc3QgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19JUFY0IDB4MDAwMDAwNDAgLyogRGlyZWN0ZWQgSVB2NCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0lQVjYgMHgwMDAwMDA4MCAvKiBEaXJlY3RlZCBJUHY2IFBhY2tldCBXYWtldXAgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYMCAweDAwMDEwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0ZMWDEgMHgwMDAyMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMSBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19GTFgyIDB4MDAwNDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDIgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYMyAweDAwMDgwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAzIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0ZMWF9GSUxURVJTIDB4MDAwRjAwMDAgLyogTWFzayBmb3IgdGhlIDQgZmxleGlibGUgZmlsdGVycyAqLwotCi0vKiBXYWtlIFVwIFN0YXR1cyAqLwotCi0vKiBXYWtlIFVwIFBhY2tldCBMZW5ndGggKi8KLQotLyogRm91ciBGbGV4aWJsZSBGaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRTEwMDBfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCA0Ci0KLS8qIEVhY2ggRmxleGlibGUgRmlsdGVyIGlzIGF0IG1vc3QgMTI4ICgweDgwKSBieXRlcyBpbiBsZW5ndGggKi8KLSNkZWZpbmUgRTEwMDBfRkxFWElCTEVfRklMVEVSX1NJWkVfTUFYICAxMjgKLQogCiAvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLwotI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9HUEkxX0VOICAgMHgwMDAwMDAwMiAvKiBNYXBzIFNEUDUgdG8gR1BJMSAqLwotI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RBVEEgMHgwMDAwMDAxMCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmVhYmxlIFBpbiA0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDVfREFUQSAweDAwMDAwMDIwIC8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDUgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBIDB4MDAwMDAwODAgLyogVmFsdWUgb2YgU1cgRGVmaW5lYWJsZSBQaW4gNyAqLwotI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RJUiAgMHgwMDAwMDEwMCAvKiBEaXJlY3Rpb24gb2YgU0RQNCAwPWluIDE9b3V0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0VFX1JTVCAgICAweDAwMDAyMDAwIC8qIFJlaW5pdGlhbGl6ZSBmcm9tIEVFUFJPTSAqLworLyogUGh5c2ljYWwgRnVuYyBSZXNldCBEb25lIEluZGljYXRpb24gKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfUEZSU1REICAgIDB4MDAwMDQwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0sgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfUENJRV9TRVJERVMgIDB4MDBDMDAwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJICAgMHgwMDgwMDAwMApAQCAtMTAzLDEzICs4MSw3IEBACiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1ZQICAgICAgIDB4MDggICAgLyogSUVFRSBWTEFOIFBhY2tldCAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9VRFBDUyAgICAweDEwICAgIC8qIFVEUCB4c3VtIGNhbGN1bGF0ZWQgKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVENQQ1MgICAgMHgyMCAgICAvKiBUQ1AgeHN1bSBjYWxjdWxhdGVkICovCi0jZGVmaW5lIEUxMDAwX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX0NFICAgICAgICAweDAxICAgIC8qIENSQyBFcnJvciAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX1NFICAgICAgICAweDAyICAgIC8qIFN5bWJvbCBFcnJvciAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX1NFUSAgICAgICAweDA0ICAgIC8qIFNlcXVlbmNlIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfQ1hFICAgICAgIDB4MTAgICAgLyogQ2FycmllciBFeHRlbnNpb24gRXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX0VSUl9SWEUgICAgICAgMHg4MCAgICAvKiBSeCBEYXRhIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9TUENfVkxBTl9NQVNLIDB4MEZGRiAgLyogVkxBTiBJRCBpcyBpbiBsb3dlciAxMiBiaXRzICovCisjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1RTICAgICAgIDB4MTAwMDAgLyogUGt0IHdhcyB0aW1lIHN0YW1wZWQgKi8KIAogI2RlZmluZSBFMTAwMF9SWERFWFRfU1RBVEVSUl9DRSAgICAweDAxMDAwMDAwCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX1NFICAgIDB4MDIwMDAwMDAKQEAgLTExOSwxNCArOTEsNiBAQAogI2RlZmluZSBFMTAwMF9SWERFWFRfU1RBVEVSUl9JUEUgICAweDQwMDAwMDAwCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX1JYRSAgIDB4ODAwMDAwMDAKIAotLyogbWFzayB0byBkZXRlcm1pbmUgaWYgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZCBkdWUgdG8gZnJhbWUgZXJyb3JzICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCi0gICAgRTEwMDBfUlhEX0VSUl9DRSAgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9TRSAgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9TRVEgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9DWEUgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9SWEUpCi0KIC8qIFNhbWUgbWFzaywgYnV0IGZvciBleHRlbmRlZCBhbmQgcGFja2V0IHNwbGl0IGRlc2NyaXB0b3JzICovCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCiAgICAgRTEwMDBfUlhERVhUX1NUQVRFUlJfQ0UgIHwgICAgICAgICAgICBcCkBAIC0xNDUsMTYgKzEwOSwxMSBAQAogLyogTWFuYWdlbWVudCBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX01BTkNfU01CVVNfRU4gICAgICAweDAwMDAwMDAxIC8qIFNNQnVzIEVuYWJsZWQgLSBSTyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0FTRl9FTiAgICAgICAgMHgwMDAwMDAwMiAvKiBBU0YgRW5hYmxlZCAtIFJPICovCi0jZGVmaW5lIEUxMDAwX01BTkNfQVJQX0VOICAgICAgICAweDAwMDAyMDAwIC8qIEVuYWJsZSBBUlAgUmVxdWVzdCBGaWx0ZXJpbmcgKi8KIC8qIEVuYWJsZSBOZWlnaGJvciBEaXNjb3ZlcnkgRmlsdGVyaW5nICovCiAjZGVmaW5lIEUxMDAwX01BTkNfUkNWX1RDT19FTiAgICAweDAwMDIwMDAwIC8qIFJlY2VpdmUgVENPIFBhY2tldHMgRW5hYmxlZCAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0JMS19QSFlfUlNUX09OX0lERSAgIDB4MDAwNDAwMDAgLyogQmxvY2sgcGh5IHJlc2V0cyAqLwogLyogRW5hYmxlIE1BQyBhZGRyZXNzIGZpbHRlcmluZyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0VOX01BQ19BRERSX0ZJTFRFUiAgIDB4MDAxMDAwMDAKLS8qIEVuYWJsZSBNTkcgcGFja2V0cyB0byBob3N0IG1lbW9yeSAqLwotI2RlZmluZSBFMTAwMF9NQU5DX0VOX01ORzJIT1NUICAgMHgwMDIwMDAwMAotLyogRW5hYmxlIElQIGFkZHJlc3MgZmlsdGVyaW5nICovCi0KIAogLyogUmVjZWl2ZSBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX1JDVExfRU4gICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBlbmFibGUgKi8KQEAgLTE2MiwxNCArMTIxLDExIEBACiAjZGVmaW5lIEUxMDAwX1JDVExfVVBFICAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiB1bmljYXN0IHByb21pc2N1b3VzIGVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX01QRSAgICAgICAgICAgIDB4MDAwMDAwMTAgICAgLyogbXVsdGljYXN0IHByb21pc2N1b3VzIGVuYWIgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9MUEUgICAgICAgICAgICAweDAwMDAwMDIwICAgIC8qIGxvbmcgcGFja2V0IGVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9OTyAgICAgICAgIDB4MDAwMDAwMDAgICAgLyogbm8gbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9NQUMgICAgICAgIDB4MDAwMDAwNDAgICAgLyogTUFDIGxvb3BiYWNrIG1vZGUgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9MQk1fVENWUiAgICAgICAweDAwMDAwMEMwICAgIC8qIHRjdnIgbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgICAgIDB4MDAwMDAwMDAgICAgLyogcnggZGVzYyBtaW4gdGhyZXNob2xkIHNpemUgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9NT19TSElGVCAgICAgICAxMiAgICAgICAgICAgIC8qIG11bHRpY2FzdCBvZmZzZXQgc2hpZnQgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9CQU0gICAgICAgICAgICAweDAwMDA4MDAwICAgIC8qIGJyb2FkY2FzdCBlbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfUkNUTF9TWl8yMDQ4ICAgICAgICAweDAwMDAwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDIwNDggKi8KLSNkZWZpbmUgRTEwMDBfUkNUTF9TWl8xMDI0ICAgICAgICAweDAwMDEwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDEwMjQgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9TWl81MTIgICAgICAgICAweDAwMDIwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDUxMiAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzI1NiAgICAgICAgIDB4MDAwMzAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMjU2ICovCiAjZGVmaW5lIEUxMDAwX1JDVExfVkZFICAgICAgICAgICAgMHgwMDA0MDAwMCAgICAvKiB2bGFuIGZpbHRlciBlbmFibGUgKi8KQEAgLTIyNiwxMSArMTgyLDcgQEAKIC8qIGVuYWJsZSBsaW5rIHN0YXR1cyBmcm9tIGV4dGVybmFsIExJTktfMCBhbmQgTElOS18xIHBpbnMgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4wICAweDAwMDQwMDAwICAvKiBTV0RQSU4gMCB2YWx1ZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjEgIDB4MDAwODAwMDAgIC8qIFNXRFBJTiAxIHZhbHVlICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMiAgMHgwMDEwMDAwMCAgLyogU1dEUElOIDIgdmFsdWUgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4zICAweDAwMjAwMDAwICAvKiBTV0RQSU4gMyB2YWx1ZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzAgIDB4MDA0MDAwMDAgIC8qIFNXRFBJTiAwIElucHV0IG9yIG91dHB1dCAqLwotI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzIgIDB4MDEwMDAwMDAgIC8qIFNXRFBJTiAyIGlucHV0IG9yIG91dHB1dCAqLwotI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzMgIDB4MDIwMDAwMDAgIC8qIFNXRFBJTiAzIGlucHV0IG9yIG91dHB1dCAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1JTVCAgICAgIDB4MDQwMDAwMDAgIC8qIEdsb2JhbCByZXNldCAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1JGQ0UgICAgIDB4MDgwMDAwMDAgIC8qIFJlY2VpdmUgRmxvdyBDb250cm9sIGVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1RGQ0UgICAgIDB4MTAwMDAwMDAgIC8qIFRyYW5zbWl0IGZsb3cgY29udHJvbCBlbmFibGUgKi8KQEAgLTMwOCw5ICsyNjAsNyBAQAogI2RlZmluZSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUICAgRTEwMDBfQUxMX1NQRUVEX0RVUExFWAogCiAvKiBMRUQgQ29udHJvbCAqLwotI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX01BU0sgICAgICAgMHgwMDAwMDAwRgogI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX1NISUZUICAgICAgMAotI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9JVlJUICAgICAgICAgICAgMHgwMDAwMDA0MAogI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9CTElOSyAgICAgICAgICAgMHgwMDAwMDA4MAogCiAjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTiAgICAgICAgMHhFCkBAIC0zNTcsMTIgKzMwNyw3IEBACiAKICNkZWZpbmUgTUFYX0pVTUJPX0ZSQU1FX1NJWkUgICAgMHgzRjAwCiAKLS8qIEV4dGVuZGVkIENvbmZpZ3VyYXRpb24gQ29udHJvbCBhbmQgU2l6ZSAqLwotI2RlZmluZSBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRSAgICAgICAgMHgwMDAwMDA0MAotCiAvKiBQQkEgY29uc3RhbnRzICovCi0jZGVmaW5lIEUxMDAwX1BCQV8xNksgMHgwMDEwICAgIC8qIDE2S0IsIGRlZmF1bHQgVFggYWxsb2NhdGlvbiAqLwotI2RlZmluZSBFMTAwMF9QQkFfMjRLIDB4MDAxOAogI2RlZmluZSBFMTAwMF9QQkFfMzRLIDB4MDAyMgogI2RlZmluZSBFMTAwMF9QQkFfNjRLIDB4MDA0MCAgICAvKiA2NEtCICovCiAKQEAgLTM3OCw0MSArMzIzLDE1IEBACiAKIC8qIEludGVycnVwdCBDYXVzZSBSZWFkICovCiAjZGVmaW5lIEUxMDAwX0lDUl9UWERXICAgICAgICAgIDB4MDAwMDAwMDEgLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1RYUUUgICAgICAgICAgMHgwMDAwMDAwMiAvKiBUcmFuc21pdCBRdWV1ZSBlbXB0eSAqLwogI2RlZmluZSBFMTAwMF9JQ1JfTFNDICAgICAgICAgICAweDAwMDAwMDA0IC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBFMTAwMF9JQ1JfUlhTRVEgICAgICAgICAweDAwMDAwMDA4IC8qIHJ4IHNlcXVlbmNlIGVycm9yICovCiAjZGVmaW5lIEUxMDAwX0lDUl9SWERNVDAgICAgICAgIDB4MDAwMDAwMTAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAoMCkgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYTyAgICAgICAgICAgMHgwMDAwMDA0MCAvKiByeCBvdmVycnVuICovCiAjZGVmaW5lIEUxMDAwX0lDUl9SWFQwICAgICAgICAgIDB4MDAwMDAwODAgLyogcnggdGltZXIgaW50ciAocmluZyAwKSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfTURBQyAgICAgICAgICAweDAwMDAwMjAwIC8qIE1ESU8gYWNjZXNzIGNvbXBsZXRlICovCi0jZGVmaW5lIEUxMDAwX0lDUl9SWENGRyAgICAgICAgIDB4MDAwMDA0MDAgLyogUnggL2MvIG9yZGVyZWQgc2V0ICovCi0jZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4wICAgICAgIDB4MDAwMDA4MDAgLyogR1AgSW50IDAgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjEgICAgICAgMHgwMDAwMTAwMCAvKiBHUCBJbnQgMSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfR1BJX0VOMiAgICAgICAweDAwMDAyMDAwIC8qIEdQIEludCAyICovCi0jZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4zICAgICAgIDB4MDAwMDQwMDAgLyogR1AgSW50IDMgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1RYRF9MT1cgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBFMTAwMF9JQ1JfU1JQRCAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9BQ0sgICAgICAgICAgIDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBBY2sgZnJhbWUgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX01ORyAgICAgICAgICAgMHgwMDA0MDAwMCAvKiBNYW5hZ2VhYmlsaXR5IGV2ZW50ICovCi0jZGVmaW5lIEUxMDAwX0lDUl9ET0NLICAgICAgICAgIDB4MDAwODAwMDAgLyogRG9jay9VbmRvY2sgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1ZNTUIgICAgICAgICAgMHgwMDAwMDEwMCAvKiBWTSBNQiBldmVudCAqLwogLyogSWYgdGhpcyBiaXQgYXNzZXJ0ZWQsIHRoZSBkcml2ZXIgc2hvdWxkIGNsYWltIHRoZSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCAgMHg4MDAwMDAwMAotLyogcXVldWUgMCBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIEUxMDAwX0lDUl9SWERfRklGT19QQVIwIDB4MDAxMDAwMDAKLS8qIHF1ZXVlIDAgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfVFhEX0ZJRk9fUEFSMCAweDAwMjAwMDAwCi0vKiBob3N0IGFyYiByZWFkIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0hPU1RfQVJCX1BBUiAgMHgwMDQwMDAwMAotI2RlZmluZSBFMTAwMF9JQ1JfUEJfUEFSICAgICAgICAweDAwODAwMDAwIC8qIHBhY2tldCBidWZmZXIgcGFyaXR5IGVycm9yICovCi0vKiBxdWV1ZSAxIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjEgMHgwMTAwMDAwMAotLyogcXVldWUgMSBUeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIEUxMDAwX0lDUl9UWERfRklGT19QQVIxIDB4MDIwMDAwMDAKLS8qIEZXIGNoYW5nZWQgdGhlIHN0YXR1cyBvZiBESVNTVyBiaXQgaW4gdGhlIEZXU00gKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0RTVyAgICAgICAgICAgMHgwMDAwMDAyMAogLyogTEFOIGNvbm5lY3RlZCBkZXZpY2UgZ2VuZXJhdGVzIGFuIGludGVycnVwdCAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUEhZSU5UICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9FUFJTVCAgICAgICAgIDB4MDAxMDAwMDAgLyogTUUgaGFuZHdhcmUgcmVzZXQgb2NjdXJzICovCisjZGVmaW5lIEUxMDAwX0lDUl9ET1VUU1lOQyAgICAgIDB4MTAwMDAwMDAgLyogTklDIERNQSBvdXQgb2Ygc3luYyAqLwogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgQ2F1c2UgUmVhZCAqLwogI2RlZmluZSBFMTAwMF9FSUNSX1JYX1FVRVVFMCAgICAweDAwMDAwMDAxIC8qIFJ4IFF1ZXVlIDAgSW50ZXJydXB0ICovCkBAIC00MjMsNyArMzQyLDYgQEAKICNkZWZpbmUgRTEwMDBfRUlDUl9UWF9RVUVVRTEgICAgMHgwMDAwMDIwMCAvKiBUeCBRdWV1ZSAxIEludGVycnVwdCAqLwogI2RlZmluZSBFMTAwMF9FSUNSX1RYX1FVRVVFMiAgICAweDAwMDAwNDAwIC8qIFR4IFF1ZXVlIDIgSW50ZXJydXB0ICovCiAjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVFVUUzICAgIDB4MDAwMDA4MDAgLyogVHggUXVldWUgMyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRTEwMDBfRUlDUl9UQ1BfVElNRVIgICAgMHg0MDAwMDAwMCAvKiBUQ1AgVGltZXIgKi8KICNkZWZpbmUgRTEwMDBfRUlDUl9PVEhFUiAgICAgICAgMHg4MDAwMDAwMCAvKiBJbnRlcnJ1cHQgQ2F1c2UgQWN0aXZlICovCiAvKiBUQ1AgVGltZXIgKi8KIApAQCAtNDQxLDE3ICszNTksMTkgQEAKICAgICBFMTAwMF9JTVNfVFhEVyAgIHwgICAgXAogICAgIEUxMDAwX0lNU19SWERNVDAgfCAgICBcCiAgICAgRTEwMDBfSU1TX1JYU0VRICB8ICAgIFwKLSAgICBFMTAwMF9JTVNfTFNDKQorICAgIEUxMDAwX0lNU19MU0MgICAgfCAgICBcCisgICAgRTEwMDBfSU1TX0RPVVRTWU5DKQogCiAvKiBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KICNkZWZpbmUgRTEwMDBfSU1TX1RYRFcgICAgICBFMTAwMF9JQ1JfVFhEVyAgICAgIC8qIFRyYW5zbWl0IGRlc2Mgd3JpdHRlbiBiYWNrICovCiAjZGVmaW5lIEUxMDAwX0lNU19MU0MgICAgICAgRTEwMDBfSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1ZNTUIgICAgICBFMTAwMF9JQ1JfVk1NQiAgICAgIC8qIE1haWwgYm94IGFjdGl2aXR5ICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWFNFUSAgICAgRTEwMDBfSUNSX1JYU0VRICAgICAvKiByeCBzZXF1ZW5jZSBlcnJvciAqLwogI2RlZmluZSBFMTAwMF9JTVNfUlhETVQwICAgIEUxMDAwX0lDUl9SWERNVDAgICAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAqLwogI2RlZmluZSBFMTAwMF9JTVNfUlhUMCAgICAgIEUxMDAwX0lDUl9SWFQwICAgICAgLyogcnggdGltZXIgaW50ciAqLworI2RlZmluZSBFMTAwMF9JTVNfRE9VVFNZTkMgIEUxMDAwX0lDUl9ET1VUU1lOQyAvKiBOSUMgRE1BIG91dCBvZiBzeW5jICovCiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIFNldCAqLwotI2RlZmluZSBFMTAwMF9FSU1TX1RDUF9USU1FUiAgICBFMTAwMF9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KICNkZWZpbmUgRTEwMDBfRUlNU19PVEhFUiAgICAgICAgRTEwMDBfRUlDUl9PVEhFUiAgIC8qIEludGVycnVwdCBDYXVzZSBBY3RpdmUgKi8KIAogLyogSW50ZXJydXB0IENhdXNlIFNldCAqLwpAQCAtNDgxLDYgKzQwMSwxMCBAQAogICogbWFuYWdlYWJpbGl0eSBlbmFibGVkLCBhbGxvd2luZyB1cyByb29tIGZvciAxNSBtdWx0aWNhc3QgYWRkcmVzc2VzLgogICovCiAjZGVmaW5lIEUxMDAwX1JBSF9BViAgMHg4MDAwMDAwMCAgICAgICAgLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHZhbGlkICovCisjZGVmaW5lIEUxMDAwX1JBTF9NQUNfQUREUl9MRU4gNAorI2RlZmluZSBFMTAwMF9SQUhfTUFDX0FERFJfTEVOIDIKKyNkZWZpbmUgRTEwMDBfUkFIX1BPT0xfTUFTSyAweDAzRkMwMDAwCisjZGVmaW5lIEUxMDAwX1JBSF9QT09MXzEgMHgwMDA0MDAwMAogCiAvKiBFcnJvciBDb2RlcyAqLwogI2RlZmluZSBFMTAwMF9FUlJfTlZNICAgICAgMQpAQCAtNDkwLDEwICs0MTQsMTAgQEAKICNkZWZpbmUgRTEwMDBfRVJSX01BQ19JTklUIDUKICNkZWZpbmUgRTEwMDBfRVJSX1JFU0VUICAgOQogI2RlZmluZSBFMTAwMF9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkcgMTAKLSNkZWZpbmUgRTEwMDBfRVJSX0hPU1RfSU5URVJGQUNFX0NPTU1BTkQgMTEKICNkZWZpbmUgRTEwMDBfQkxLX1BIWV9SRVNFVCAgIDEyCiAjZGVmaW5lIEUxMDAwX0VSUl9TV0ZXX1NZTkMgMTMKICNkZWZpbmUgRTEwMDBfTk9UX0lNUExFTUVOVEVEIDE0CisjZGVmaW5lIEUxMDAwX0VSUl9NQlggICAgICAxNQogCiAvKiBMb29wIGxpbWl0IG9uIGhvdyBsb25nIHdlIHdhaXQgZm9yIGF1dG8tbmVnb3RpYXRpb24gdG8gY29tcGxldGUgKi8KICNkZWZpbmUgQ09QUEVSX0xJTktfVVBfTElNSVQgICAgICAgICAgICAgIDEwCkBAIC01MTAsMzAgKzQzNCw5IEBACiAvKiBGbG93IENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfRkNSVExfWE9ORSAweDgwMDAwMDAwICAgICAvKiBFbmFibGUgWE9OIGZyYW1lIHRyYW5zbWlzc2lvbiAqLwogCi0vKiBUcmFuc21pdCBDb25maWd1cmF0aW9uIFdvcmQgKi8KLSNkZWZpbmUgRTEwMDBfVFhDV19BTkUgICAgICAgIDB4ODAwMDAwMDAgICAgICAgIC8qIEF1dG8tbmVnIGVuYWJsZSAqLwotCi0vKiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gV29yZCAqLwotCi0vKiBQQ0kgRXhwcmVzcyBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0dDUl9SWERfTk9fU05PT1AgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBFMTAwMF9HQ1JfUlhEU0NXX05PX1NOT09QICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgRTEwMDBfR0NSX1JYRFNDUl9OT19TTk9PUCAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEUxMDAwX0dDUl9UWERfTk9fU05PT1AgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBFMTAwMF9HQ1JfVFhEU0NXX05PX1NOT09QICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUCAgICAgICAweDAwMDAwMDIwCi0KLSNkZWZpbmUgUENJRV9OT19TTk9PUF9BTEwgKEUxMDAwX0dDUl9SWERfTk9fU05PT1AgICAgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9SWERTQ1dfTk9fU05PT1AgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9SWERTQ1JfTk9fU05PT1AgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9UWERfTk9fU05PT1AgICAgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9UWERTQ1dfTk9fU05PT1AgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9UWERTQ1JfTk9fU05PT1ApCi0KIC8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9DUl9GVUxMX0RVUExFWCAgICAgIDB4MDEwMCAgLyogRkRYID0xLCBoYWxmIGR1cGxleCA9MCAqLwogI2RlZmluZSBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyAweDAyMDAgIC8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLwotI2RlZmluZSBNSUlfQ1JfUE9XRVJfRE9XTiAgICAgICAweDA4MDAgIC8qIFBvd2VyIGRvd24gKi8KICNkZWZpbmUgTUlJX0NSX0FVVE9fTkVHX0VOICAgICAgMHgxMDAwICAvKiBBdXRvIE5lZyBFbmFibGUgKi8KICNkZWZpbmUgTUlJX0NSX0xPT1BCQUNLICAgICAgICAgMHg0MDAwICAvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KICNkZWZpbmUgTUlJX0NSX1JFU0VUICAgICAgICAgICAgMHg4MDAwICAvKiAwID0gbm9ybWFsLCAxID0gUEhZIHJlc2V0ICovCkBAIC02MDksNiArNTEyLDcgQEAKICNkZWZpbmUgTlZNX0lEX0xFRF9TRVRUSU5HUyAgICAgICAgMHgwMDA0CiAvKiBGb3IgU0VSREVTIG91dHB1dCBhbXBsaXR1ZGUgYWRqdXN0bWVudC4gKi8KICNkZWZpbmUgTlZNX0lOSVRfQ09OVFJPTDJfUkVHICAgICAgMHgwMDBGCisjZGVmaW5lIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQiAgIDB4MDAxNAogI2RlZmluZSBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EgICAweDAwMjQKICNkZWZpbmUgTlZNX0FMVF9NQUNfQUREUl9QVFIgICAgICAgMHgwMDM3CiAjZGVmaW5lIE5WTV9DSEVDS1NVTV9SRUcgICAgICAgICAgIDB4MDAzRgpAQCAtNjYzLDEwICs1NjcsOCBAQAogI2RlZmluZSBJR1BfTEVEM19NT0RFICAgICAgICAgICAweDA3MDAwMDAwCiAKIC8qIFBDSS9QQ0ktWC9QQ0ktRVggQ29uZmlnIHNwYWNlICovCi0jZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9SRUdJU1RFUiAgICAgMHgwRQogI2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTICAgICAgICAgICAgIDB4MTIKIAotI2RlZmluZSBQQ0lfSEVBREVSX1RZUEVfTVVMVElGVU5DICAgIDB4ODAKICNkZWZpbmUgUENJRV9MSU5LX1dJRFRIX01BU0sgICAgICAgICAweDNGMAogI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfU0hJRlQgICAgICAgIDQKIApAQCAtNzYzLDQgKzY2NSw4IEBACiAjZGVmaW5lIEUxMDAwX0dFTl9DVExfQUREUkVTU19TSElGVCAgICAgOAogI2RlZmluZSBFMTAwMF9HRU5fUE9MTF9USU1FT1VUICAgICAgICAgIDY0MAogCisjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfU0hJRlQgICAgICAgICAgICAgICA1CisjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfTUFTSyAgICAgICAgICAgICAgICAweDdGCisjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfQklUX1NISUZUX01BU0sgICAgICAweDFGCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAppbmRleCA5OTUwNGE2Li42OGFhYzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF9yZWdzLmgiCiAjaW5jbHVkZSAiZTEwMDBfZGVmaW5lcy5oIgogCkBAIC00MSw2ICs0MCw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NiAgICAgICAgICAgICAgICAgICAgMHgxMEM5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiAgICAgICAgICAgICAgMHgxMEU2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMgICAgICAgICAgICAgMHgxMEU3CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUiAgICAgICAgMHgxMEU4CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9OUyAgICAgICAgICAgICAgICAgMHgxNTBBCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiAgICAgICAgICAgMHgxMEE3CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyAgICAgMHgxMEE5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSICAgICAgMHgxMEQ2CkBAIC0xNDQsMTQ0ICsxNDUsNiBAQAogCWUxMDAwX2ZjX2RlZmF1bHQgPSAweEZGCiB9OwogCi0KLS8qIFJlY2VpdmUgRGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX3J4X2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCi0JX19sZTE2IGxlbmd0aDsgICAgICAvKiBMZW5ndGggb2YgZGF0YSBETUFlZCBpbnRvIGRhdGEgYnVmZmVyICovCi0JX19sZTE2IGNzdW07ICAgICAgICAvKiBQYWNrZXQgY2hlY2tzdW0gKi8KLQl1OCAgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JdTggIGVycm9yczsgICAgICAvKiBEZXNjcmlwdG9yIEVycm9ycyAqLwotCV9fbGUxNiBzcGVjaWFsOwotfTsKLQotLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gRXh0ZW5kZWQgKi8KLXVuaW9uIGUxMDAwX3J4X2Rlc2NfZXh0ZW5kZWQgewotCXN0cnVjdCB7Ci0JCV9fbGU2NCBidWZmZXJfYWRkcjsKLQkJX19sZTY0IHJlc2VydmVkOwotCX0gcmVhZDsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgewotCQkJX19sZTMyIG1ycTsgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFJ4IFF1ZXVlcyAqLwotCQkJdW5pb24gewotCQkJCV9fbGUzMiByc3M7ICAgICAgICAgICAgLyogUlNTIEhhc2ggKi8KLQkJCQlzdHJ1Y3QgewotCQkJCQlfX2xlMTYgaXBfaWQ7ICAvKiBJUCBpZCAqLwotCQkJCQlfX2xlMTYgY3N1bTsgICAvKiBQYWNrZXQgQ2hlY2tzdW0gKi8KLQkJCQl9IGNzdW1faXA7Ci0JCQl9IGhpX2R3b3JkOwotCQl9IGxvd2VyOwotCQlzdHJ1Y3QgewotCQkJX19sZTMyIHN0YXR1c19lcnJvcjsgICAgIC8qIGV4dCBzdGF0dXMvZXJyb3IgKi8KLQkJCV9fbGUxNiBsZW5ndGg7Ci0JCQlfX2xlMTYgdmxhbjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KLQkJfSB1cHBlcjsKLQl9IHdiOyAgLyogd3JpdGViYWNrICovCi19OwotCi0jZGVmaW5lIE1BWF9QU19CVUZGRVJTIDQKLS8qIFJlY2VpdmUgRGVzY3JpcHRvciAtIFBhY2tldCBTcGxpdCAqLwotdW5pb24gZTEwMDBfcnhfZGVzY19wYWNrZXRfc3BsaXQgewotCXN0cnVjdCB7Ci0JCS8qIG9uZSBidWZmZXIgZm9yIHByb3RvY29sIGhlYWRlcihzKSwgdGhyZWUgZGF0YSBidWZmZXJzICovCi0JCV9fbGU2NCBidWZmZXJfYWRkcltNQVhfUFNfQlVGRkVSU107Ci0JfSByZWFkOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgbXJxOyAgICAgICAgICAgICAgLyogTXVsdGlwbGUgUnggUXVldWVzICovCi0JCQl1bmlvbiB7Ci0JCQkJX19sZTMyIHJzczsgICAgICAgICAgICAgIC8qIFJTUyBIYXNoICovCi0JCQkJc3RydWN0IHsKLQkJCQkJX19sZTE2IGlwX2lkOyAgICAvKiBJUCBpZCAqLwotCQkJCQlfX2xlMTYgY3N1bTsgICAgIC8qIFBhY2tldCBDaGVja3N1bSAqLwotCQkJCX0gY3N1bV9pcDsKLQkJCX0gaGlfZHdvcmQ7Ci0JCX0gbG93ZXI7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLwotCQkJX19sZTE2IGxlbmd0aDA7ICAgICAgICAgIC8qIGxlbmd0aCBvZiBidWZmZXIgMCAqLwotCQkJX19sZTE2IHZsYW47ICAgICAgICAgICAgIC8qIFZMQU4gdGFnICovCi0JCX0gbWlkZGxlOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2IGhlYWRlcl9zdGF0dXM7Ci0JCQlfX2xlMTYgbGVuZ3RoWzNdOyAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlcnMgMS0zICovCi0JCX0gdXBwZXI7Ci0JCV9fbGU2NCByZXNlcnZlZDsKLQl9IHdiOyAvKiB3cml0ZWJhY2sgKi8KLX07Ci0KLS8qIFRyYW5zbWl0IERlc2NyaXB0b3IgKi8KLXN0cnVjdCBlMTAwMF90eF9kZXNjIHsKLQlfX2xlNjQgYnVmZmVyX2FkZHI7ICAgICAgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCi0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBsZW5ndGg7ICAgIC8qIERhdGEgYnVmZmVyIGxlbmd0aCAqLwotCQkJdTggY3NvOyAgICAgICAgLyogQ2hlY2tzdW0gb2Zmc2V0ICovCi0JCQl1OCBjbWQ7ICAgICAgICAvKiBEZXNjcmlwdG9yIGNvbnRyb2wgKi8KLQkJfSBmbGFnczsKLQl9IGxvd2VyOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggY3NzOyAgICAgICAgLyogQ2hlY2tzdW0gc3RhcnQgKi8KLQkJCV9fbGUxNiBzcGVjaWFsOwotCQl9IGZpZWxkczsKLQl9IHVwcGVyOwotfTsKLQotLyogT2ZmbG9hZCBDb250ZXh0IERlc2NyaXB0b3IgKi8KLXN0cnVjdCBlMTAwMF9jb250ZXh0X2Rlc2MgewotCXVuaW9uIHsKLQkJX19sZTMyIGlwX2NvbmZpZzsKLQkJc3RydWN0IHsKLQkJCXU4IGlwY3NzOyAgICAgIC8qIElQIGNoZWNrc3VtIHN0YXJ0ICovCi0JCQl1OCBpcGNzbzsgICAgICAvKiBJUCBjaGVja3N1bSBvZmZzZXQgKi8KLQkJCV9fbGUxNiBpcGNzZTsgICAgIC8qIElQIGNoZWNrc3VtIGVuZCAqLwotCQl9IGlwX2ZpZWxkczsKLQl9IGxvd2VyX3NldHVwOwotCXVuaW9uIHsKLQkJX19sZTMyIHRjcF9jb25maWc7Ci0JCXN0cnVjdCB7Ci0JCQl1OCB0dWNzczsgICAgICAvKiBUQ1AgY2hlY2tzdW0gc3RhcnQgKi8KLQkJCXU4IHR1Y3NvOyAgICAgIC8qIFRDUCBjaGVja3N1bSBvZmZzZXQgKi8KLQkJCV9fbGUxNiB0dWNzZTsgICAgIC8qIFRDUCBjaGVja3N1bSBlbmQgKi8KLQkJfSB0Y3BfZmllbGRzOwotCX0gdXBwZXJfc2V0dXA7Ci0JX19sZTMyIGNtZF9hbmRfbGVuZ3RoOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggaGRyX2xlbjsgICAgLyogSGVhZGVyIGxlbmd0aCAqLwotCQkJX19sZTE2IG1zczsgICAgICAgLyogTWF4aW11bSBzZWdtZW50IHNpemUgKi8KLQkJfSBmaWVsZHM7Ci0JfSB0Y3Bfc2VnX3NldHVwOwotfTsKLQotLyogT2ZmbG9hZCBkYXRhIGRlc2NyaXB0b3IgKi8KLXN0cnVjdCBlMTAwMF9kYXRhX2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgICAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgYnVmZmVyIGFkZHJlc3MgKi8KLQl1bmlvbiB7Ci0JCV9fbGUzMiBkYXRhOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCi0JCQl1OCB0eXBfbGVuX2V4dDsKLQkJCXU4IGNtZDsKLQkJfSBmbGFnczsKLQl9IGxvd2VyOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggcG9wdHM7ICAgICAgLyogUGFja2V0IE9wdGlvbnMgKi8KLQkJCV9fbGUxNiBzcGVjaWFsOwotCQl9IGZpZWxkczsKLQl9IHVwcGVyOwotfTsKLQogLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLwogc3RydWN0IGUxMDAwX2h3X3N0YXRzIHsKIAl1NjQgY3JjZXJyczsKQEAgLTM1OSw2ICsyMjIsNyBAQAogCXU2NCBsZW5lcnJzOwogCXU2NCBzY3ZwYzsKIAl1NjQgaHJtcGM7CisJdTY0IGRvb3N5bmM7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X3N0YXRzIHsKQEAgLTQwOSw2ICsyNzMsNyBAQAogI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwX3BoeS5oIgogI2luY2x1ZGUgImUxMDAwX252bS5oIgorI2luY2x1ZGUgImUxMDAwX21ieC5oIgogCiBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgewogCXMzMiAgKCpjaGVja19mb3JfbGluaykoc3RydWN0IGUxMDAwX2h3ICopOwpAQCAtNDIyLDI1ICsyODcsMjUgQEAKIH07CiAKIHN0cnVjdCBlMTAwMF9waHlfb3BlcmF0aW9ucyB7Ci0JczMyICAoKmFjcXVpcmVfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7CisJczMyICAoKmFjcXVpcmUpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqY2hlY2tfcmVzZXRfYmxvY2spKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZm9yY2Vfc3BlZWRfZHVwbGV4KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmdldF9jZmdfZG9uZSkoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAJczMyICAoKmdldF9jYWJsZV9sZW5ndGgpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X3BoeV9pbmZvKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKnJlYWRfcGh5X3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2ICopOwotCXZvaWQgKCpyZWxlYXNlX3BoeSkoc3RydWN0IGUxMDAwX2h3ICopOwotCXMzMiAgKCpyZXNldF9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqcmVhZF9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpyZXNldCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXRfZDBfbHBsdV9zdGF0ZSkoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwogCXMzMiAgKCpzZXRfZDNfbHBsdV9zdGF0ZSkoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwotCXMzMiAgKCp3cml0ZV9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYpOworCXMzMiAgKCp3cml0ZV9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNik7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfbnZtX29wZXJhdGlvbnMgewotCXMzMiAgKCphY3F1aXJlX252bSkoc3RydWN0IGUxMDAwX2h3ICopOwotCXMzMiAgKCpyZWFkX252bSkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7Ci0Jdm9pZCAoKnJlbGVhc2VfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKndyaXRlX252bSkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CisJczMyICAoKmFjcXVpcmUpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqcmVhZCkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqd3JpdGUpKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYsIHUxNiwgdTE2ICopOwogfTsKIAogc3RydWN0IGUxMDAwX2luZm8gewpAQCAtNDgzLDcgKzM0OCw2IEBACiAJYm9vbCBhc2ZfZmlybXdhcmVfcHJlc2VudDsKIAlib29sIGF1dG9uZWc7CiAJYm9vbCBhdXRvbmVnX2ZhaWxlZDsKLQlib29sIGRpc2FibGVfYXY7CiAJYm9vbCBkaXNhYmxlX2h3X2luaXRfYml0czsKIAlib29sIGdldF9saW5rX3N0YXR1czsKIAlib29sIGlmc19wYXJhbXNfZm9yY2VkOwpAQCAtNTY1LDkgKzQyOSw0MCBAQAogCWVudW0gZTEwMDBfZmNfdHlwZSBvcmlnaW5hbF90eXBlOwogfTsKIAorc3RydWN0IGUxMDAwX21ieF9vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X3BhcmFtcykoc3RydWN0IGUxMDAwX2h3ICpodyk7CisJczMyICgqcmVhZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKKwlzMzIgKCpyZWFkX3Bvc3RlZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlX3Bvc3RlZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CisJczMyICgqY2hlY2tfZm9yX21zZykoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX2Fjaykoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX3JzdCkoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7Cit9OworCitzdHJ1Y3QgZTEwMDBfbWJ4X3N0YXRzIHsKKwl1MzIgbXNnc190eDsKKwl1MzIgbXNnc19yeDsKKworCXUzMiBhY2tzOworCXUzMiByZXFzOworCXUzMiByc3RzOworfTsKKworc3RydWN0IGUxMDAwX21ieF9pbmZvIHsKKwlzdHJ1Y3QgZTEwMDBfbWJ4X29wZXJhdGlvbnMgb3BzOworCXN0cnVjdCBlMTAwMF9tYnhfc3RhdHMgc3RhdHM7CisJdTMyIHRpbWVvdXQ7CisJdTMyIHVzZWNfZGVsYXk7CisJdTE2IHNpemU7Cit9OworCitzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgeworCWJvb2wgc2dtaWlfYWN0aXZlOworfTsKKwogc3RydWN0IGUxMDAwX2h3IHsKIAl2b2lkICpiYWNrOwotCXZvaWQgKmRldl9zcGVjOwogCiAJdTggX19pb21lbSAqaHdfYWRkcjsKIAl1OCBfX2lvbWVtICpmbGFzaF9hZGRyZXNzOwpAQCAtNTc4LDkgKzQ3MywxMiBAQAogCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAgcGh5OwogCXN0cnVjdCBlMTAwMF9udm1faW5mbyAgbnZtOwogCXN0cnVjdCBlMTAwMF9idXNfaW5mbyAgYnVzOworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyBtYng7CiAJc3RydWN0IGUxMDAwX2hvc3RfbW5nX2RoY3BfY29va2llIG1uZ19jb29raWU7CiAKLQl1MzIgZGV2X3NwZWNfc2l6ZTsKKwl1bmlvbiB7CisJCXN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NQlfODI1NzU7CisJfSBkZXZfc3BlYzsKIAogCXUxNiBkZXZpY2VfaWQ7CiAJdTE2IHN1YnN5c3RlbV92ZW5kb3JfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKaW5kZXggOTdmMDA0OS4uZjRjMzE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM3LDE5ICszNyw2IEBACiBzdGF0aWMgczMyIGlnYl9zZXRfZGVmYXVsdF9mYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgaWdiX3NldF9mY193YXRlcm1hcmtzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCi0vKioKLSAqICBpZ2JfcmVtb3ZlX2RldmljZSAtIEZyZWUgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIElmIGEgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZSB3YXMgYWxsb2NhdGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAqICBmcmVlIGl0LgotICoqLwotdm9pZCBpZ2JfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCS8qIEZyZWVpbmcgdGhlIGRldl9zcGVjIG1lbWJlciBvZiBlMTAwMF9odyBzdHJ1Y3R1cmUgKi8KLQlrZnJlZShody0+ZGV2X3NwZWMpOwotfQotCiBzdGF0aWMgczMyIGlnYl9yZWFkX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwpAQCAtMTMxLDYgKzExOCwzNyBAQAogfQogCiAvKioKKyAqICBpZ2JfdmZ0YV9zZXQgLSBlbmFibGUgb3IgZGlzYWJsZSB2bGFuIGluIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmlkOiBWTEFOIGlkIHRvIGFkZCBvciByZW1vdmUKKyAqICBAYWRkOiBpZiB0cnVlIGFkZCBmaWx0ZXIsIGlmIGZhbHNlIHJlbW92ZQorICoKKyAqICBTZXRzIG9yIGNsZWFycyBhIGJpdCBpbiB0aGUgVkxBTiBmaWx0ZXIgdGFibGUgYXJyYXkgYmFzZWQgb24gVkxBTiBpZAorICogIGFuZCBpZiB3ZSBhcmUgYWRkaW5nIG9yIHJlbW92aW5nIHRoZSBmaWx0ZXIKKyAqKi8KK3MzMiBpZ2JfdmZ0YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHZpZCwgYm9vbCBhZGQpCit7CisJdTMyIGluZGV4ID0gKHZpZCA+PiBFMTAwMF9WRlRBX0VOVFJZX1NISUZUKSAmIEUxMDAwX1ZGVEFfRU5UUllfTUFTSzsKKwl1MzIgbWFzayA9IDEgPDwgKHZpZCAmIEUxMDAwX1ZGVEFfRU5UUllfQklUX1NISUZUX01BU0spOworCXUzMiB2ZnRhID0gYXJyYXlfcmQzMihFMTAwMF9WRlRBLCBpbmRleCk7CisJczMyIHJldF92YWwgPSAwOworCisJLyogYml0IHdhcyBzZXQvY2xlYXJlZCBiZWZvcmUgd2Ugc3RhcnRlZCAqLworCWlmICgoISEodmZ0YSAmIG1hc2spKSA9PSBhZGQpIHsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOworCX0gZWxzZSB7CisJCWlmIChhZGQpCisJCQl2ZnRhIHw9IG1hc2s7CisJCWVsc2UKKwkJCXZmdGEgJj0gfm1hc2s7CisJfQorCisJaWdiX3dyaXRlX3ZmdGEoaHcsIGluZGV4LCB2ZnRhKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpZ2JfY2hlY2tfYWx0X21hY19hZGRyIC0gQ2hlY2sgZm9yIGFsdGVybmF0ZSBNQUMgYWRkcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtMTQ4LDcgKzE2Niw3IEBACiAJdTE2IG9mZnNldCwgbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQsIG52bV9kYXRhOwogCXU4IGFsdF9tYWNfYWRkcltFVEhfQUxFTl07CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9BTFRfTUFDX0FERFJfUFRSLCAxLAorCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fQUxUX01BQ19BRERSX1BUUiwgMSwKIAkJCQkgJm52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0KTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKQEAgLTE2NSw3ICsxODMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpICs9IDIpIHsKIAkJb2Zmc2V0ID0gbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQgKyAoaSA+PiAxKTsKLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CiAJCWlmIChyZXRfdmFsKSB7CiAJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtMjEzLDcgKzIzMSw4IEBACiAKIAlyYXJfaGlnaCA9ICgodTMyKSBhZGRyWzRdIHwgKCh1MzIpIGFkZHJbNV0gPDwgOCkpOwogCi0JaWYgKCFody0+bWFjLmRpc2FibGVfYXYpCisJLyogSWYgTUFDIGFkZHJlc3MgemVybywgbm8gbmVlZCB0byBzZXQgdGhlIEFWIGJpdCAqLworCWlmIChyYXJfbG93IHx8IHJhcl9oaWdoKQogCQlyYXJfaGlnaCB8PSBFMTAwMF9SQUhfQVY7CiAKIAl3cjMyKEUxMDAwX1JBTChpbmRleCksIHJhcl9sb3cpOwpAQCAtNTg4LDggKzYwNyw3IEBACiAJICogY29udHJvbCBzZXR0aW5nLCB0aGVuIHRoZSB2YXJpYWJsZSBody0+ZmMgd2lsbAogCSAqIGJlIGluaXRpYWxpemVkIGJhc2VkIG9uIGEgdmFsdWUgaW4gdGhlIEVFUFJPTS4KIAkgKi8KLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9JTklUX0NPTlRST0wyX1JFRywgMSwKLQkJCQkgICAgICAgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDJfUkVHLCAxLCAmbnZtX2RhdGEpOwogCiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CkBAIC03MjAsMTEgKzczOCwxMSBAQAogCQkgKiBoYXMgY29tcGxldGVkLiAgV2UgcmVhZCB0aGlzIHR3aWNlIGJlY2F1c2UgdGhpcyByZWcgaGFzCiAJCSAqIHNvbWUgInN0aWNreSIgKGxhdGNoZWQpIGJpdHMuCiAJCSAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLAorCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsCiAJCQkJCQkgICAmbWlpX3N0YXR1c19yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLAorCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsCiAJCQkJCQkgICAmbWlpX3N0YXR1c19yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNzQyLDExICs3NjAsMTEgQEAKIAkJICogUGFnZSBBYmlsaXR5IFJlZ2lzdGVyIChBZGRyZXNzIDUpIHRvIGRldGVybWluZSBob3cKIAkJICogZmxvdyBjb250cm9sIHdhcyBuZWdvdGlhdGVkLgogCQkgKi8KLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAorCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKIAkJCQkJICAgICZtaWlfbndheV9hZHZfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0xQX0FCSUxJVFksCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0xQX0FCSUxJVFksCiAJCQkJCSAgICAmbWlpX253YXlfbHBfYWJpbGl0eV9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtMTA0MSw3ICsxMDU5LDcgQEAKIHsKIAlzMzIgcmV0X3ZhbDsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX0lEX0xFRF9TRVRUSU5HUywgMSwgZGF0YSk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JRF9MRURfU0VUVElOR1MsIDEsIGRhdGEpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAppbmRleCBjYmVlNmFmLi5hMzRkZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTgsMTIgKzU4LDEyIEBACiAKIHZvaWQgaWdiX2NsZWFyX2h3X2NudHJzX2Jhc2Uoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9jbGVhcl92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyICBpZ2JfdmZ0YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHZpZCwgYm9vbCBhZGQpOwogdm9pZCBpZ2JfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfbXRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSk7CiB2b2lkIGlnYl9wdXRfaHdfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfcmFyX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYWRkciwgdTMyIGluZGV4KTsKIHMzMiAgaWdiX2NoZWNrX2FsdF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXZvaWQgaWdiX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3VwZGF0ZV9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3dyaXRlX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKQEAgLTgzLDEzICs4Myw4IEBACiAjZGVmaW5lIEUxMDAwX0ZXU01fTU9ERV9NQVNLICAweEUKICNkZWZpbmUgRTEwMDBfRldTTV9NT0RFX1NISUZUIDEKIAotI2RlZmluZSBFMTAwMF9NTkdfREhDUF9DT01NQU5EX1RJTUVPVVQgICAgICAgMTAKICNkZWZpbmUgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOICAgIDB4MgogCi0jZGVmaW5lIEUxMDAwX0hJQ1JfRU4gICAgICAgICAgICAgIDB4MDEgIC8qIEVuYWJsZSBiaXQgLSBSTyAqLwotLyogRHJpdmVyIHNldHMgdGhpcyBiaXQgd2hlbiBkb25lIHRvIHB1dCBjb21tYW5kIGluIFJBTSAqLwotI2RlZmluZSBFMTAwMF9ISUNSX0MgICAgICAgICAgICAgICAweDAyCi0KIGV4dGVybiB2b2lkIGUxMDAwX2luaXRfZnVuY3Rpb25fcG9pbnRlcnNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdTMyIGlnYl9oYXNoX21jX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKm1jX2FkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3MWM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJlMTAwMF9tYnguaCIKKworLyoqCisgKiAgaWdiX3JlYWRfbWJ4IC0gUmVhZHMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byByZWFkCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVseSByZWFkIG1lc3NhZ2UgZnJvbSBidWZmZXIKKyAqKi8KK3MzMiBpZ2JfcmVhZF9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCS8qIGxpbWl0IHJlYWQgdG8gc2l6ZSBvZiBtYWlsYm94ICovCisJaWYgKHNpemUgPiBtYngtPnNpemUpCisJCXNpemUgPSBtYngtPnNpemU7CisKKwlpZiAobWJ4LT5vcHMucmVhZCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWQoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3MzMiBpZ2Jfd3JpdGVfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChzaXplID4gbWJ4LT5zaXplKQorCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwllbHNlIGlmIChtYngtPm9wcy53cml0ZSkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9tc2cgLSBjaGVja3MgdG8gc2VlIGlmIHNvbWVvbmUgc2VudCB1cyBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaWdiX2NoZWNrX2Zvcl9tc2coc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAobWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9hY2sgLSBjaGVja3MgdG8gc2VlIGlmIHNvbWVvbmUgc2VudCB1cyBBQ0sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gY2hlY2sKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBTdGF0dXMgYml0IHdhcyBmb3VuZCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3MzMiBpZ2JfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfYWNrKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX3JzdCAtIGNoZWNrcyB0byBzZWUgaWYgb3RoZXIgc2lkZSBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gY2hlY2sKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBTdGF0dXMgYml0IHdhcyBmb3VuZCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3MzMiBpZ2JfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfcnN0KQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX3JzdChodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfcG9sbF9mb3JfbXNnIC0gV2FpdCBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uCisgKiovCitzdGF0aWMgczMyIGlnYl9wb2xsX2Zvcl9tc2coc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIW1ieC0+b3BzLmNoZWNrX2Zvcl9tc2cpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCkpIHsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJY291bnRkb3duLS07CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KK291dDoKKwlyZXR1cm4gY291bnRkb3duID8gMCA6IC1FMTAwMF9FUlJfTUJYOworfQorCisvKioKKyAqICBpZ2JfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGlnYl9wb2xsX2Zvcl9hY2soc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIW1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCWdvdG8gb3V0OworCisJd2hpbGUgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2soaHcsIG1ieF9pZCkpIHsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJY291bnRkb3duLS07CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KK291dDoKKwlyZXR1cm4gY291bnRkb3duID8gMCA6IC1FMTAwMF9FUlJfTUJYOworfQorCisvKioKKyAqICBpZ2JfcmVhZF9wb3N0ZWRfbWJ4IC0gV2FpdCBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24gYW5kIHJlY2VpdmUgbWVzc2FnZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQKKyAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuCisgKiovCitzMzIgaWdiX3JlYWRfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKCFtYngtPm9wcy5yZWFkKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpZ2JfcG9sbF9mb3JfbXNnKGh3LCBtYnhfaWQpOworCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfcG9zdGVkX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveCwgd2FpdCBmb3IgYWNrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kCisgKiAgcmVjZWl2ZWQgYW4gYWNrIHRvIHRoYXQgbWVzc2FnZSB3aXRoaW4gZGVsYXkgKiB0aW1lb3V0IHBlcmlvZAorICoqLworczMyIGlnYl93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmICghbWJ4LT5vcHMud3JpdGUpCisJCWdvdG8gb3V0OworCisJLyogc2VuZCBtc2cqLworCXJldF92YWwgPSBtYngtPm9wcy53cml0ZShodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJLyogaWYgbXNnIHNlbnQgd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGFuIGFjayAqLworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IGlnYl9wb2xsX2Zvcl9hY2soaHcsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX2luaXRfbWJ4X29wc19nZW5lcmljIC0gSW5pdGlhbGl6ZSBOVk0gZnVuY3Rpb24gcG9pbnRlcnMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBTZXR1cHMgdXAgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIG5vLW9wIGZ1bmN0aW9ucworICoqLwordm9pZCBlMTAwMF9pbml0X21ieF9vcHNfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJbWJ4LT5vcHMucmVhZF9wb3N0ZWQgPSBpZ2JfcmVhZF9wb3N0ZWRfbWJ4OworCW1ieC0+b3BzLndyaXRlX3Bvc3RlZCA9IGlnYl93cml0ZV9wb3N0ZWRfbWJ4OworfQorCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfYml0X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBtYXNrKQoreworCXUzMiBtYnZmaWNyID0gcmQzMihFMTAwMF9NQlZGSUNSKTsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1idmZpY3IgJiBtYXNrKSB7CisJCXJldF92YWwgPSAwOworCQl3cjMyKEUxMDAwX01CVkZJQ1IsIG1hc2spOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX21zZ19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBzZW50IG1haWwKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfbXNnX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmICghaWdiX2NoZWNrX2Zvcl9iaXRfcGYoaHcsIEUxMDAwX01CVkZJQ1JfVkZSRVFfVkYxIDw8IHZmX251bWJlcikpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWh3LT5tYnguc3RhdHMucmVxcysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX2Fja19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBBQ0tlZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9hY2tfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKCFpZ2JfY2hlY2tfZm9yX2JpdF9wZihodywgRTEwMDBfTUJWRklDUl9WRkFDS19WRjEgPDwgdmZfbnVtYmVyKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5hY2tzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfcnN0X3BmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgVkYgaGFzIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpZ2JfY2hlY2tfZm9yX3JzdF9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXUzMiB2ZmxyZSA9IHJkMzIoRTEwMDBfVkZMUkUpOworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAodmZscmUgJiAoMSA8PCB2Zl9udW1iZXIpKSB7CisJCXJldF92YWwgPSAwOworCQl3cjMyKEUxMDAwX1ZGTFJFLCAoMSA8PCB2Zl9udW1iZXIpKTsKKwkJaHctPm1ieC5zdGF0cy5yc3RzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl93cml0ZV9tYnhfcGYgLSBQbGFjZXMgYSBtZXNzYWdlIGluIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlcgorICoqLworc3RhdGljIHMzMiBpZ2Jfd3JpdGVfbWJ4X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJdTMyIHAydl9tYWlsYm94OworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9QRlUpOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgb3duZXJzaGlwIG5vdy4uLiAqLworCXAydl9tYWlsYm94ID0gcmQzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlcikpOworCWlmICghKHAydl9tYWlsYm94ICYgRTEwMDBfUDJWTUFJTEJPWF9QRlUpKSB7CisJCS8qIGZhaWxlZCB0byBncmFiIG93bmVyc2hpcCAqLworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisJCWdvdG8gb3V0X25vX3dyaXRlOworCX0KKworCS8qCisJICogZmx1c2ggYW55IGFjayBvciBtc2cgd2hpY2ggbWF5IGFscmVhZHkgYmUgaW4gdGhlIHF1ZXVlCisJICogYXMgdGhleSBhcmUgbGlrZWx5IHRoZSByZXN1bHQgb2YgYW4gZXJyb3IKKwkgKi8KKwlpZ2JfY2hlY2tfZm9yX2Fja19wZihodywgdmZfbnVtYmVyKTsKKwlpZ2JfY2hlY2tfZm9yX21zZ19wZihodywgdmZfbnVtYmVyKTsKKworCS8qIGNvcHkgdGhlIGNhbGxlciBzcGVjaWZpZWQgbWVzc2FnZSB0byB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJYXJyYXlfd3IzMihFMTAwMF9WTUJNRU0odmZfbnVtYmVyKSwgaSwgbXNnW2ldKTsKKworCS8qIEludGVycnVwdCBWRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGFuZCByZWxlYXNlIGJ1ZmZlciovCisJd3IzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlciksIEUxMDAwX1AyVk1BSUxCT1hfU1RTKTsKKworCS8qIHVwZGF0ZSBzdGF0cyAqLworCWh3LT5tYnguc3RhdHMubXNnc190eCsrOworCitvdXRfbm9fd3JpdGU6CisJcmV0dXJuIHJldF92YWw7CisKK30KKworLyoqCisgKiAgaWdiX3JlYWRfbWJ4X3BmIC0gUmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggYnVmZmVyIHRvIHRoZSBjYWxsZXIncworICogIG1lbW9yeSBidWZmZXIuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlcmUgd2FzCisgKiAgYSBtZXNzYWdlIGR1ZSB0byBhIFZGIHJlcXVlc3Qgc28gbm8gcG9sbGluZyBmb3IgbWVzc2FnZSBpcyBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGlnYl9yZWFkX21ieF9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJdTMyIHAydl9tYWlsYm94OworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9QRlUpOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgb3duZXJzaGlwIG5vdy4uLiAqLworCXAydl9tYWlsYm94ID0gcmQzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlcikpOworCWlmICghKHAydl9tYWlsYm94ICYgRTEwMDBfUDJWTUFJTEJPWF9QRlUpKSB7CisJCS8qIGZhaWxlZCB0byBncmFiIG93bmVyc2hpcCAqLworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisJCWdvdG8gb3V0X25vX3JlYWQ7CisJfQorCisJLyogY29weSB0aGUgbWVzc2FnZSB0byB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJbXNnW2ldID0gYXJyYXlfcmQzMihFMTAwMF9WTUJNRU0odmZfbnVtYmVyKSwgaSk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGUgbWVzc2FnZSBhbmQgcmVsZWFzZSBidWZmZXIgKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKKwlyZXRfdmFsID0gMDsKKworb3V0X25vX3JlYWQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX2luaXRfbWJ4X3BhcmFtc19wZiAtIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgcGYgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEluaXRpYWxpemVzIHRoZSBody0+bWJ4IHN0cnVjdCB0byBjb3JyZWN0IHZhbHVlcyBmb3IgcGYgbWFpbGJveAorICovCitzMzIgaWdiX2luaXRfbWJ4X3BhcmFtc19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisKKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CisJCW1ieC0+dGltZW91dCA9IDA7CisJCW1ieC0+dXNlY19kZWxheSA9IDA7CisKKwkJbWJ4LT5zaXplID0gRTEwMDBfVkZNQUlMQk9YX1NJWkU7CisKKwkJbWJ4LT5vcHMucmVhZCA9IGlnYl9yZWFkX21ieF9wZjsKKwkJbWJ4LT5vcHMud3JpdGUgPSBpZ2Jfd3JpdGVfbWJ4X3BmOworCQltYngtPm9wcy5yZWFkX3Bvc3RlZCA9IGlnYl9yZWFkX3Bvc3RlZF9tYng7CisJCW1ieC0+b3BzLndyaXRlX3Bvc3RlZCA9IGlnYl93cml0ZV9wb3N0ZWRfbWJ4OworCQltYngtPm9wcy5jaGVja19mb3JfbXNnID0gaWdiX2NoZWNrX2Zvcl9tc2dfcGY7CisJCW1ieC0+b3BzLmNoZWNrX2Zvcl9hY2sgPSBpZ2JfY2hlY2tfZm9yX2Fja19wZjsKKwkJbWJ4LT5vcHMuY2hlY2tfZm9yX3JzdCA9IGlnYl9jaGVja19mb3JfcnN0X3BmOworCisJCW1ieC0+c3RhdHMubXNnc190eCA9IDA7CisJCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJCW1ieC0+c3RhdHMucmVxcyA9IDA7CisJCW1ieC0+c3RhdHMuYWNrcyA9IDA7CisJCW1ieC0+c3RhdHMucnN0cyA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM5ODkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9FMTAwMF9NQlhfSF8KKyNkZWZpbmUgX0UxMDAwX01CWF9IXworCisjaW5jbHVkZSAiZTEwMDBfaHcuaCIKKworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfQUNLICAgMHgwMDAwMDAwMiAvKiBBY2sgbWVzc2FnZSByZWN2J2QgZnJvbSBWRiAqLworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1ZGVSAgIDB4MDAwMDAwMDQgLyogVkYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9QRlUgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfUlZGVSAgMHgwMDAwMDAxMCAvKiBSZXNldCBWRlUgLSB1c2VkIHdoZW4gVkYgc3R1Y2sgKi8KKworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGUkVRX01BU0sgMHgwMDAwMDBGRiAvKiBiaXRzIGZvciBWRiBtZXNzYWdlcyAqLworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGUkVRX1ZGMSAgMHgwMDAwMDAwMSAvKiBiaXQgZm9yIFZGIDEgbWVzc2FnZSAqLworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGQUNLX01BU0sgMHgwMEZGMDAwMCAvKiBiaXRzIGZvciBWRiBhY2tzICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZBQ0tfVkYxICAweDAwMDEwMDAwIC8qIGJpdCBmb3IgVkYgMSBhY2sgKi8KKworI2RlZmluZSBFMTAwMF9WRk1BSUxCT1hfU0laRSAgIDE2IC8qIDE2IDMyIGJpdCB3b3JkcyAtIDY0IGJ5dGVzICovCisKKy8qIElmIGl0J3MgYSBFMTAwMF9WRl8qIG1zZyB0aGVuIGl0IG9yaWdpbmF0ZXMgaW4gdGhlIFZGIGFuZCBpcyBzZW50IHRvIHRoZQorICogUEYuICBUaGUgcmV2ZXJzZSBpcyB0cnVlIGlmIGl0IGlzIEUxMDAwX1BGXyouCisgKiBNZXNzYWdlIEFDSydzIGFyZSB0aGUgdmFsdWUgb3InZCB3aXRoIDB4RjAwMDAwMDAKKyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dUWVBFX0FDSyAgICAgIDB4ODAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBBQ0sgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHVFlQRV9OQUNLICAgICAweDQwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgdG8gc2VuZCByZXF1ZXN0cyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dJTkZPX1NISUZUICAgIDE2CisvKiBiaXRzIDIzOjE2IGFyZSB1c2VkIGZvciBleHJhIGluZm8gZm9yIGNlcnRhaW4gbWVzc2FnZXMgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHSU5GT19NQVNLICAgICAoMHhGRiA8PCBFMTAwMF9WVF9NU0dJTkZPX1NISUZUKQorCisjZGVmaW5lIEUxMDAwX1ZGX1JFU0VUICAgICAgICAgICAgMHgwMSAvKiBWRiByZXF1ZXN0cyByZXNldCAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfTUFDX0FERFIgICAgIDB4MDIgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1BQyBhZGRyICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9NVUxUSUNBU1QgICAgMHgwMyAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUMgYWRkciAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfVkxBTiAgICAgICAgIDB4MDQgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZMQU4gKi8KKyNkZWZpbmUgRTEwMDBfVkZfU0VUX0xQRSAgICAgICAgICAweDA1IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTU9MUi5MUEUgKi8KKworI2RlZmluZSBFMTAwMF9QRl9DT05UUk9MX01TRyAgICAgIDB4MDEwMCAvKiBQRiBjb250cm9sIG1lc3NhZ2UgKi8KKworczMyIGlnYl9yZWFkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2Jfd3JpdGVfbWJ4KHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGlnYl9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX2NoZWNrX2Zvcl9tc2coc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzMzIgaWdiX2NoZWNrX2Zvcl9hY2soc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzMzIgaWdiX2NoZWNrX2Zvcl9yc3Qoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzMzIgaWdiX2luaXRfbWJ4X3BhcmFtc19wZihzdHJ1Y3QgZTEwMDBfaHcgKik7CisKKyNlbmRpZiAvKiBfRTEwMDBfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKaW5kZXggYTg0ZTRlNC4uYTg4YmZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQxOSw3ICs0MTksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMuYWNxdWlyZV9udm0oaHcpOworCXJldF92YWwgPSBody0+bnZtLm9wcy5hY3F1aXJlKGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCiAJbXNsZWVwKDEwKTsKIHJlbGVhc2U6Ci0JaHctPm52bS5vcHMucmVsZWFzZV9udm0oaHcpOworCWh3LT5udm0ub3BzLnJlbGVhc2UoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC00ODcsMTQgKzQ4NywxNCBAQAogCXMzMiAgcmV0X3ZhbDsKIAl1MTYgbnZtX2RhdGE7CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAkqcGFydF9udW0gPSAodTMyKShudm1fZGF0YSA8PCAxNik7CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9QQkFfT0ZGU0VUXzEsIDEsICZudm1fZGF0YSk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9QQkFfT0ZGU0VUXzEsIDEsICZudm1fZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwpAQCAtNTE1LDI5ICs1MTUsMjMgQEAKICAqKi8KIHMzMiBpZ2JfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXMzMiAgcmV0X3ZhbCA9IDA7Ci0JdTE2IG9mZnNldCwgbnZtX2RhdGEsIGk7CisJdTMyIHJhcl9oaWdoOworCXUzMiByYXJfbG93OworCXUxNiBpOwogCi0JZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpICs9IDIpIHsKLQkJb2Zmc2V0ID0gaSA+PiAxOwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaHctPm1hYy5wZXJtX2FkZHJbaV0gPSAodTgpKG52bV9kYXRhICYgMHhGRik7Ci0JCWh3LT5tYWMucGVybV9hZGRyW2krMV0gPSAodTgpKG52bV9kYXRhID4+IDgpOwotCX0KKwlyYXJfaGlnaCA9IHJkMzIoRTEwMDBfUkFIKDApKTsKKwlyYXJfbG93ID0gcmQzMihFMTAwMF9SQUwoMCkpOwogCi0JLyogRmxpcCBsYXN0IGJpdCBvZiBtYWMgYWRkcmVzcyBpZiB3ZSdyZSBvbiBzZWNvbmQgcG9ydCAqLwotCWlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQotCQlody0+bWFjLnBlcm1fYWRkcls1XSBePSAxOworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9SQUxfTUFDX0FERFJfTEVOOyBpKyspCisJCWh3LT5tYWMucGVybV9hZGRyW2ldID0gKHU4KShyYXJfbG93ID4+IChpKjgpKTsKKworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9SQUhfTUFDX0FERFJfTEVOOyBpKyspCisJCWh3LT5tYWMucGVybV9hZGRyW2krNF0gPSAodTgpKHJhcl9oaWdoID4+IChpKjgpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlody0+bWFjLmFkZHJbaV0gPSBody0+bWFjLnBlcm1fYWRkcltpXTsKIAotb3V0OgotCXJldHVybiByZXRfdmFsOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTU1NCw3ICs1NDgsNyBAQAogCXUxNiBpLCBudm1fZGF0YTsKIAogCWZvciAoaSA9IDA7IGkgPCAoTlZNX0NIRUNLU1VNX1JFRyArIDEpOyBpKyspIHsKLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBpLCAxLCAmbnZtX2RhdGEpOworCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgaSwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CkBAIC01ODcsNyArNTgxLDcgQEAKIAl1MTYgaSwgbnZtX2RhdGE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlZNX0NIRUNLU1VNX1JFRzsgaSsrKSB7Ci0JCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgaSwgMSwgJm52bV9kYXRhKTsKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGksIDEsICZudm1fZGF0YSk7CiAJCWlmIChyZXRfdmFsKSB7CiAJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTU5NSw3ICs1ODksNyBAQAogCQljaGVja3N1bSArPSBudm1fZGF0YTsKIAl9CiAJY2hlY2tzdW0gPSAodTE2KSBOVk1fU1VNIC0gY2hlY2tzdW07Ci0JcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlX252bShodywgTlZNX0NIRUNLU1VNX1JFRywgMSwgJmNoZWNrc3VtKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMud3JpdGUoaHcsIE5WTV9DSEVDS1NVTV9SRUcsIDEsICZjaGVja3N1bSk7CiAJaWYgKHJldF92YWwpCiAJCWh3X2RiZygiTlZNIFdyaXRlIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwppbmRleCAxN2ZkZGI5Li5kZTJkNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF9waHkuaCIKIAotc3RhdGljIHMzMiAgaWdiX2dldF9waHlfY2ZnX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgdm9pZCBpZ2JfcmVsZWFzZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgczMyICBpZ2JfYWNxdWlyZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgczMyICBpZ2JfcGh5X3Jlc2V0X2RzcChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgIGlnYl9waHlfc2V0dXBfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAJCQkJCSAgICAgICB1MTYgKnBoeV9jdHJsKTsKQEAgLTQzLDkgKzM5LDYgQEAKIC8qIENhYmxlIGxlbmd0aCB0YWJsZXMgKi8KIHN0YXRpYyBjb25zdCB1MTYgZTEwMDBfbTg4X2NhYmxlX2xlbmd0aF90YWJsZVtdID0KIAl7IDAsIDUwLCA4MCwgMTEwLCAxNDAsIDE0MCwgRTEwMDBfQ0FCTEVfTEVOR1RIX1VOREVGSU5FRCB9OwotI2RlZmluZSBNODhFMTAwMF9DQUJMRV9MRU5HVEhfVEFCTEVfU0laRSBcCi0JCShzaXplb2YoZTEwMDBfbTg4X2NhYmxlX2xlbmd0aF90YWJsZSkgLyBcCi0JCSBzaXplb2YoZTEwMDBfbTg4X2NhYmxlX2xlbmd0aF90YWJsZVswXSkpCiAKIHN0YXRpYyBjb25zdCB1MTYgZTEwMDBfaWdwXzJfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQogICAgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgNSwgOCwgMTEsIDEzLCAxNiwgMTgsIDIxLApAQCAtOTEsMTMgKzg0LDEzIEBACiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBwaHlfaWQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9JRDEsICZwaHlfaWQpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeS0+aWQgPSAodTMyKShwaHlfaWQgPDwgMTYpOwogCXVkZWxheSgyMCk7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0lEMiwgJnBoeV9pZCk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfSUQyLCAmcGh5X2lkKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTExOCwxMSArMTExLDExIEBACiB7CiAJczMyIHJldF92YWw7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAweEMxKTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDB4QzEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDApOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMCk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTI1Nyw5ICsyNTAsMTIgQEAKICAqKi8KIHMzMiBpZ2JfcmVhZF9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCiB7Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCi0JcmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZSkpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMjY4LDE2ICsyNjQsMTUgQEAKIAkJCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgKHUxNilvZmZzZXQpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJaWdiX3JlbGVhc2VfcGh5KGh3KTsKKwkJCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlyZXRfdmFsID0gaWdiX3JlYWRfcGh5X3JlZ19tZGljKGh3LAotCQkJCQkgIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCi0JCQkJCSAgZGF0YSk7CisJcmV0X3ZhbCA9IGlnYl9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKKwkJCQkJZGF0YSk7CiAKLQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0yOTQsOSArMjg5LDEyIEBACiAgKiovCiBzMzIgaWdiX3dyaXRlX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQogewotCXMzMiByZXRfdmFsOworCXMzMiByZXRfdmFsID0gMDsKIAotCXJldF92YWwgPSBpZ2JfYWNxdWlyZV9waHkoaHcpOworCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmUpKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlKGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTMwNSwxNiArMzAzLDE1IEBACiAJCQkJCQkgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCQkJCSAgICh1MTYpb2Zmc2V0KTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWlnYl9yZWxlYXNlX3BoeShodyk7CisJCQlody0+cGh5Lm9wcy5yZWxlYXNlKGh3KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JcmV0X3ZhbCA9IGlnYl93cml0ZV9waHlfcmVnX21kaWMoaHcsCi0JCQkJCSAgIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCisJcmV0X3ZhbCA9IGlnYl93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCiAJCQkJCSAgIGRhdGEpOwogCi0JaWdiX3JlbGVhc2VfcGh5KGh3KTsKKwlody0+cGh5Lm9wcy5yZWxlYXNlKGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMzM5LDggKzMzNiw3IEBACiAJfQogCiAJLyogRW5hYmxlIENSUyBvbiBUWC4gVGhpcyBtdXN0IGJlIHNldCBmb3IgaGFsZi1kdXBsZXggb3BlcmF0aW9uLiAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMzgzLDggKzM3OSw3IEBACiAJaWYgKHBoeS0+ZGlzYWJsZV9wb2xhcml0eV9jb3JyZWN0aW9uID09IDEpCiAJCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUw7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0zOTMsOCArMzg4LDcgQEAKIAkJICogRm9yY2UgVFhfQ0xLIGluIHRoZSBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlcgogCQkgKiB0byAyNU1IeiBjbG9jay4KIAkJICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCiAJCQkJCSAgICAgJnBoeV9kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKQEAgLTQxMyw4ICs0MDcsNyBAQAogCQkJcGh5X2RhdGEgfD0gKE04OEUxMDAwX0VQU0NSX01BU1RFUl9ET1dOU0hJRlRfMVggfAogCQkJCSAgICAgTTg4RTEwMDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUXzFYKTsKIAkJfQotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCiAJCQkJCSAgICAgcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNDQ5LDcgKzQ0Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZXNldF9waHkoaHcpOworCXJldF92YWwgPSBwaHktPm9wcy5yZXNldChodyk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJFcnJvciByZXNldHRpbmcgdGhlIFBIWS5cbiIpOwogCQlnb3RvIG91dDsKQEAgLTQ2NCw4ICs0NTcsOCBAQAogCSAqLwogCWlmIChwaHktPnR5cGUgPT0gZTEwMDBfcGh5X2lncCkgewogCQkvKiBkaXNhYmxlIGxwbHUgZDMgZHVyaW5nIGRyaXZlciBpbml0ICovCi0JCWlmIChody0+cGh5Lm9wcy5zZXRfZDNfbHBsdV9zdGF0ZSkKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5zZXRfZDNfbHBsdV9zdGF0ZShodywgZmFsc2UpOworCQlpZiAocGh5LT5vcHMuc2V0X2QzX2xwbHVfc3RhdGUpCisJCQlyZXRfdmFsID0gcGh5LT5vcHMuc2V0X2QzX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDNcbiIpOwogCQkJZ290byBvdXQ7CkBAIC00NzMsMTMgKzQ2NiwxMyBAQAogCX0KIAogCS8qIGRpc2FibGUgbHBsdSBkMCBkdXJpbmcgZHJpdmVyIGluaXQgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuc2V0X2QwX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMuc2V0X2QwX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIkVycm9yIERpc2FibGluZyBMUExVIEQwXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCS8qIENvbmZpZ3VyZSBtZGktbWRpeCBzZXR0aW5ncyAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC00OTcsNyArNDkwLDcgQEAKIAkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ1JfQVVUT19NRElYOwogCQlicmVhazsKIAl9Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTUxMCwzMyArNTAzLDMxIEBACiAJCSAqLwogCQlpZiAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gQURWRVJUSVNFXzEwMDBfRlVMTCkgewogCQkJLyogRGlzYWJsZSBTbWFydFNwZWVkICovCi0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAotCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLQkJCQkJCSAgICAgJmRhdGEpOworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LAorCQkJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQkJCQkJICAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJLyogU2V0IGF1dG8gTWFzdGVyL1NsYXZlIHJlc29sdXRpb24gcHJvY2VzcyAqLwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsCi0JCQkJCQkJICAgJmRhdGEpOworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgJj0gfkNSXzEwMDBUX01TX0VOQUJMRTsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwKLQkJCQkJCQkgICAgZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCAmZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtNTYwLDcgKzU1MSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsIGRhdGEpOworCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNjA5LDEyICs2MDAsMTIgQEAKIAkgKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gYnkgc2V0dGluZyB0aGUgQXV0byBOZWcgRW5hYmxlIGJpdCBhbmQKIAkgKiB0aGUgQXV0byBOZWcgUmVzdGFydCBiaXQgaW4gdGhlIFBIWSBjb250cm9sIHJlZ2lzdGVyLgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2N0cmwpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2N0cmwgfD0gKE1JSV9DUl9BVVRPX05FR19FTiB8IE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHKTsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9jdHJsKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtNjU2LDE1ICs2NDcsMTMgQEAKIAlwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmPSBwaHktPmF1dG9uZWdfbWFzazsKIAogCS8qIFJlYWQgdGhlIE1JSSBBdXRvLU5lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyIChBZGRyZXNzIDQpLiAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKLQkJCQkJICAgJm1paV9hdXRvbmVnX2Fkdl9yZWcpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0FVVE9ORUdfQURWLCAmbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgewogCQkvKiBSZWFkIHRoZSBNSUkgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLiAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAotCQkJCQkgICAgUEhZXzEwMDBUX0NUUkwsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX0NUUkwsCiAJCQkJCSAgICAmbWlpXzEwMDB0X2N0cmxfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKQEAgLTc4NSwxNyArNzc0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsCi0JCQkJCSAgICBtaWlfYXV0b25lZ19hZHZfcmVnKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWh3X2RiZygiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCiAJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICAgUEhZXzEwMDBUX0NUUkwsCi0JCQkJCSAgICAgIG1paV8xMDAwdF9jdHJsX3JlZyk7CisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsCisJCQkJCSAgICAgUEhZXzEwMDBUX0NUUkwsCisJCQkJCSAgICAgbWlpXzEwMDB0X2N0cmxfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC04MTksMTMgKzgwNywxMyBAQAogCXUxNiBwaHlfZGF0YTsKIAlib29sIGxpbms7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X3NldHVwKGh3LCAmcGh5X2RhdGEpOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTgzMywxNiArODIxLDE0IEBACiAJICogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgSUdQIHJlcXVpcmVzIE1ESQogCSAqIGZvcmNlZCB3aGVuZXZlciBzcGVlZCBhbmQgZHVwbGV4IGFyZSBmb3JjZWQuCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ1JfQVVUT19NRElYOwogCXBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ1JfRk9SQ0VfTURJX01ESVg7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtODk3LDIwICs4ODMsMTggQEAKIAkgKiBDbGVhciBBdXRvLUNyb3Nzb3ZlciB0byBmb3JjZSBNREkgbWFudWFsbHkuICBNODhFMTAwMCByZXF1aXJlcyBNREkKIAkgKiBmb3JjZWQgd2hlbmV2ZXIgc3BlZWQgYW5kIGR1cGxleCBhcmUgZm9yY2VkLgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9kYXRhICY9IH5NODhFMTAwMF9QU0NSX0FVVE9fWF9NT0RFOwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlod19kYmcoIk04OEUxMDAwIFBTQ1I6ICVYXG4iLCBwaHlfZGF0YSk7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtOTE5LDcgKzkwMyw3IEBACiAJLyogUmVzZXQgdGhlIHBoeSB0byBjb21taXQgY2hhbmdlcy4gKi8KIAlwaHlfZGF0YSB8PSBNSUlfQ1JfUkVTRVQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtOTQwLDcgKzkyNCw3IEBACiAJCQkgKiBXZSBkaWRuJ3QgZ2V0IGxpbmsuCiAJCQkgKiBSZXNldCB0aGUgRFNQIGFuZCBjcm9zcyBvdXIgZmluZ2Vycy4KIAkJCSAqLwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICAgTTg4RTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgICAgMHgwMDFkKTsKIAkJCWlmIChyZXRfdmFsKQpAQCAtOTU3LDggKzk0MSw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtOTY4LDggKzk1MSw3IEBACiAJICogdGhlIHJlc2V0IHZhbHVlIG9mIDIuNU1Iei4KIAkgKi8KIAlwaHlfZGF0YSB8PSBNODhFMTAwMF9FUFNDUl9UWF9DTEtfMjU7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05NzcsMTQgKzk1OSwxMiBAQAogCSAqIEluIGFkZGl0aW9uLCB3ZSBtdXN0IHJlLWVuYWJsZSBDUlMgb24gVHggZm9yIGJvdGggaGFsZiBhbmQgZnVsbAogCSAqIGR1cGxleC4KIAkgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlwaHlfZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FTU0VSVF9DUlNfT05fVFg7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0xMDcxLDE1ICsxMDUxLDEzIEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAotCQkJCQkgICAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFhY3RpdmUpIHsKIAkJZGF0YSAmPSB+SUdQMDJFMTAwMF9QTV9EM19MUExVOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkJCQkgICAgIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtMTA5MCwyNyArMTA2OCwyNyBAQAogCQkgKiBTbWFydFNwZWVkLCBzbyBwZXJmb3JtYW5jZSBpcyBtYWludGFpbmVkLgogCQkgKi8KIAkJaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb24pIHsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJICAgICAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCkBAIC0xMTIwLDIyICsxMDk4LDE5IEBACiAJCSAgIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBFMTAwMF9BTExfTk9UX0dJRykgfHwKIAkJICAgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAwX0FMTF8xMF9TUEVFRCkpIHsKIAkJZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QzX0xQTFU7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgICBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkJCQkgICAgICBkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAogCQkvKiBXaGVuIExQTFUgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGRpc2FibGUgU21hcnRTcGVlZCAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAotCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkgICAgICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAogCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkgICAgICBkYXRhKTsKIAl9CiAKQEAgLTExNzYsNyArMTE1MSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIG9mZnNldCwgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIG9mZnNldCwgJnBoeV9kYXRhKTsKIAogCWlmICghcmV0X3ZhbCkKIAkJcGh5LT5zcGVlZF9kb3duZ3JhZGVkID0gKHBoeV9kYXRhICYgbWFzaykgPyB0cnVlIDogZmFsc2U7CkBAIC0xMTk5LDcgKzExNzQsNyBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBkYXRhOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZkYXRhKTsKIAogCWlmICghcmV0X3ZhbCkKIAkJcGh5LT5jYWJsZV9wb2xhcml0eSA9IChkYXRhICYgTTg4RTEwMDBfUFNTUl9SRVZfUE9MQVJJVFkpCkBAIC0xMjI4LDggKzEyMDMsNyBAQAogCSAqIFBvbGFyaXR5IGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIHNwZWVkIG9mCiAJICogb3VyIGNvbm5lY3Rpb24uCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMsCi0JCQkJCSAgICZkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfU1RBVFVTLCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjQ2LDcgKzEyMjAsNyBAQAogCQltYXNrCT0gSUdQMDFFMTAwMF9QU1NSX1BPTEFSSVRZX1JFVkVSU0VEOwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIG9mZnNldCwgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgb2Zmc2V0LCAmZGF0YSk7CiAKIAlpZiAoIXJldF92YWwpCiAJCXBoeS0+Y2FibGVfcG9sYXJpdHkgPSAoZGF0YSAmIG1hc2spCkBAIC0xMjcxLDEwICsxMjQ1LDEwIEBACiAKIAkvKiBCcmVhayBhZnRlciBhdXRvbmVnIGNvbXBsZXRlcyBvciBQSFlfQVVUT19ORUdfTElNSVQgZXhwaXJlcy4gKi8KIAlmb3IgKGkgPSBQSFlfQVVUT19ORUdfTElNSVQ7IGkgPiAwOyBpLS0pIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKIAkJaWYgKHJldF92YWwpCiAJCQlicmVhazsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKIAkJaWYgKHJldF92YWwpCiAJCQlicmVhazsKIAkJaWYgKHBoeV9zdGF0dXMgJiBNSUlfU1JfQVVUT05FR19DT01QTEVURSkKQEAgLTEzMTAsMTAgKzEyODQsMTAgQEAKIAkJICogdHdpY2UgZHVlIHRvIHRoZSBsaW5rIGJpdCBiZWluZyBzdGlja3kuICBObyBoYXJtIGRvaW5nCiAJCSAqIGl0IGFjcm9zcyB0aGUgYm9hcmQuCiAJCSAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwogCQlpZiAocGh5X3N0YXR1cyAmIE1JSV9TUl9MSU5LX1NUQVRVUykKQEAgLTEzNTAsOCArMTMyNCw3IEBACiAJczMyIHJldF92YWw7CiAJdTE2IHBoeV9kYXRhLCBpbmRleDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywgJnBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTEzNzIsOCArMTM0NSw4IEBACiAgKgogICogIFRoZSBhdXRvbWF0aWMgZ2FpbiBjb250cm9sIChhZ2MpIG5vcm1hbGl6ZXMgdGhlIGFtcGxpdHVkZSBvZiB0aGUKICAqICByZWNlaXZlZCBzaWduYWwsIGFkanVzdGluZyBmb3IgdGhlIGF0dGVudWF0aW9uIHByb2R1Y2VkIGJ5IHRoZQotICogIGNhYmxlLiAgQnkgcmVhZGluZyB0aGUgQUdDIHJlZ2lzdGVycywgd2hpY2ggcmVwZXJlc2VudCB0aGUKLSAqICBjb2JpbmF0aW9uIG9mIGNvdXJzZSBhbmQgZmluZSBnYWluIHZhbHVlLCB0aGUgdmFsdWUgY2FuIGJlIHB1dAorICogIGNhYmxlLiAgQnkgcmVhZGluZyB0aGUgQUdDIHJlZ2lzdGVycywgd2hpY2ggcmVwcmVzZW50IHRoZQorICogIGNvbWJpbmF0aW9uIG9mIGNvYXJzZSBhbmQgZmluZSBnYWluIHZhbHVlLCB0aGUgdmFsdWUgY2FuIGJlIHB1dAogICogIGludG8gYSBsb29rdXAgdGFibGUgdG8gb2J0YWluIHRoZSBhcHByb3hpbWF0ZSBjYWJsZSBsZW5ndGgKICAqICBmb3IgZWFjaCBjaGFubmVsLgogICoqLwpAQCAtMTM5MiwxNCArMTM2NSwxMyBAQAogCiAJLyogUmVhZCB0aGUgQUdDIHJlZ2lzdGVycyBmb3IgYWxsIGNoYW5uZWxzICovCiAJZm9yIChpID0gMDsgaSA8IElHUDAyRTEwMDBfUEhZX0NIQU5ORUxfTlVNOyBpKyspIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgYWdjX3JlZ19hcnJheVtpXSwKLQkJCQkJCSAgICZwaHlfZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgYWdjX3JlZ19hcnJheVtpXSwgJnBoeV9kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAogCQkvKgogCQkgKiBHZXR0aW5nIGJpdHMgMTU6OSwgd2hpY2ggcmVwcmVzZW50IHRoZSBjb21iaW5hdGlvbiBvZgotCQkgKiBjb3Vyc2UgYW5kIGZpbmUgZ2FpbiB2YWx1ZXMuICBUaGUgcmVzdWx0IGlzIGEgbnVtYmVyCisJCSAqIGNvYXJzZSBhbmQgZmluZSBnYWluIHZhbHVlcy4gIFRoZSByZXN1bHQgaXMgYSBudW1iZXIKIAkJICogdGhhdCBjYW4gYmUgcHV0IGludG8gdGhlIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlCiAJCSAqIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aC4KIAkJICovCkBAIC0xNDU2LDcgKzE0MjgsNyBAQAogCXUxNiBwaHlfZGF0YTsKIAlib29sIGxpbms7CiAKLQlpZiAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJaWYgKHBoeS0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlod19kYmcoIlBoeSBpbmZvIGlzIG9ubHkgdmFsaWQgZm9yIGNvcHBlciBtZWRpYVxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKIAkJZ290byBvdXQ7CkBAIC0xNDcyLDMzICsxNDQ0LDI5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeS0+cG9sYXJpdHlfY29ycmVjdGlvbiA9IChwaHlfZGF0YSAmIE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUwpCi0JCQkJICAgPyB0cnVlCi0JCQkJICAgOiBmYWxzZTsKKwkJCQkgICA/IHRydWUgOiBmYWxzZTsKIAogCXJldF92YWwgPSBpZ2JfY2hlY2tfcG9sYXJpdHlfbTg4KGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5LT5pc19tZGl4ID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9NRElYKSA/IHRydWUgOiBmYWxzZTsKIAogCWlmICgocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX1NQRUVEKSA9PSBNODhFMTAwMF9QU1NSXzEwMDBNQlMpIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmdldF9jYWJsZV9sZW5ndGgoaHcpOworCQlyZXRfdmFsID0gcGh5LT5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKLQkJCQkJCSAgICZwaHlfZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV9kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtMTU1Miw4ICsxNTIwLDcgQEAKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywKLQkJCQkJICAgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTE1NjEsMTIgKzE1MjgsMTEgQEAKIAogCWlmICgoZGF0YSAmIElHUDAxRTEwMDBfUFNTUl9TUEVFRF9NQVNLKSA9PQogCSAgICBJR1AwMUUxMDAwX1BTU1JfU1BFRURfMTAwME1CUFMpIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmdldF9jYWJsZV9sZW5ndGgoaHcpOworCQlyZXRfdmFsID0gcGh5LT5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKLQkJCQkJCSAgICZkYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKQEAgLTE1OTksMTIgKzE1NjUsMTIgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2N0cmw7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9jdHJsKTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2N0cmwpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9jdHJsIHw9IE1JSV9DUl9SRVNFVDsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9jdHJsKTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTYzNSw3ICsxNjAxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTY1MCw3NCArMTYxNiwxNCBAQAogCiAJdWRlbGF5KDE1MCk7CiAKLQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCXBoeS0+b3BzLnJlbGVhc2UoaHcpOwogCi0JcmV0X3ZhbCA9IGlnYl9nZXRfcGh5X2NmZ19kb25lKGh3KTsKKwlyZXRfdmFsID0gcGh5LT5vcHMuZ2V0X2NmZ19kb25lKGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCi0vKiBJbnRlcm5hbCBmdW5jdGlvbiBwb2ludGVycyAqLwotCi0vKioKLSAqICBpZ2JfZ2V0X3BoeV9jZmdfZG9uZSAtIEdlbmVyaWMgUEhZIGNvbmZpZ3VyYXRpb24gZG9uZQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJldHVybiBzdWNjZXNzIGlmIHNpbGljb24gZmFtaWx5IGRpZCBub3QgaW1wbGVtZW50IGEgZmFtaWx5IHNwZWNpZmljCi0gKiAgZ2V0X2NmZ19kb25lIGZ1bmN0aW9uLgotICoqLwotc3RhdGljIHMzMiBpZ2JfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5nZXRfY2ZnX2RvbmUpCi0JCXJldHVybiBody0+cGh5Lm9wcy5nZXRfY2ZnX2RvbmUoaHcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGlnYl9yZWxlYXNlX3BoeSAtIEdlbmVyaWMgcmVsZWFzZSBQSFkKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICoKLSAqICBSZXR1cm4gaWYgc2lsaWNvbiBmYW1pbHkgZG9lcyBub3QgcmVxdWlyZSBhIHNlbWFwaG9yZSB3aGVuIGFjY2Vzc2luZyB0aGUKLSAqICBQSFkuCi0gKiovCi1zdGF0aWMgdm9pZCBpZ2JfcmVsZWFzZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlpZiAoaHctPnBoeS5vcHMucmVsZWFzZV9waHkpCi0JCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLX0KLQotLyoqCi0gKiAgaWdiX2FjcXVpcmVfcGh5IC0gR2VuZXJpYyBhY3F1aXJlIFBIWQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJldHVybiBzdWNjZXNzIGlmIHNpbGljb24gZmFtaWx5IGRvZXMgbm90IHJlcXVpcmUgYSBzZW1hcGhvcmUgd2hlbgotICogIGFjY2Vzc2luZyB0aGUgUEhZLgotICoqLwotc3RhdGljIHMzMiBpZ2JfYWNxdWlyZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlpZiAoaHctPnBoeS5vcHMuYWNxdWlyZV9waHkpCi0JCXJldHVybiBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXggLSBHZW5lcmljIGZvcmNlIFBIWSBzcGVlZC9kdXBsZXgKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICoKLSAqICBXaGVuIHRoZSBzaWxpY29uIGZhbWlseSBoYXMgbm90IGltcGxlbWVudGVkIGEgZm9yY2VkIHNwZWVkL2R1cGxleAotICogIGZ1bmN0aW9uIGZvciB0aGUgUEhZLCBzaW1wbHkgcmV0dXJuIDAuCi0gKiovCi1zMzIgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlpZiAoaHctPnBoeS5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4KQotCQlyZXR1cm4gaHctPnBoeS5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4KGh3KTsKLQotCXJldHVybiAwOwotfQotCiAvKioKICAqICBpZ2JfcGh5X2luaXRfc2NyaXB0X2lncDMgLSBJbml0cyB0aGUgSUdQMyBQSFkKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQpAQCAtMTczMCw3NSArMTYzNiw3NSBAQAogCiAJLyogUEhZIGluaXQgSUdQIDMgKi8KIAkvKiBFbmFibGUgcmlzZS9mYWxsLCAxMC1tb2RlIHdvcmsgaW4gY2xhc3MtQSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkY1QiwgMHg5MDE4KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MkY1QiwgMHg5MDE4KTsKIAkvKiBSZW1vdmUgYWxsIGNhcHMgZnJvbSBSZXBsaWNhIHBhdGggZmlsdGVyICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjUyLCAweDAwMDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRjUyLCAweDAwMDApOwogCS8qIEJpYXMgdHJpbW1pbmcgZm9yIEFEQywgQUZFIGFuZCBEcml2ZXIgKERlZmF1bHQpICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRkIxLCAweDhCMjQpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRkIxLCAweDhCMjQpOwogCS8qIEluY3JlYXNlIEh5YnJpZCBwb2x5IGJpYXMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDJGQjIsIDB4RjhGMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDJGQjIsIDB4RjhGMCk7CiAJLyogQWRkIDQlIHRvIFRYIGFtcGxpdHVkZSBpbiBHaWdhIG1vZGUgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwMTAsIDB4MTBCMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDIwMTAsIDB4MTBCMCk7CiAJLyogRGlzYWJsZSB0cmltbWluZyAoVFRUKSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MjAxMSwgMHgwMDAwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MjAxMSwgMHgwMDAwKTsKIAkvKiBQb2x5IERDIGNvcnJlY3Rpb24gdG8gOTQuNiUgKyAyJSBmb3IgYWxsIGNoYW5uZWxzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMERELCAweDI0OUEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyMERELCAweDI0OUEpOwogCS8qIEFCUyBEQyBjb3JyZWN0aW9uIHRvIDk1LjklICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMERFLCAweDAwRDMpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyMERFLCAweDAwRDMpOwogCS8qIEJHIHRlbXAgY3VydmUgdHJpbSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MjhCNCwgMHgwNENFKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MjhCNCwgMHgwNENFKTsKIAkvKiBJbmNyZWFzaW5nIEFEQyBPUEFNUCBzdGFnZSAxIGN1cnJlbnRzIHRvIG1heCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkY3MCwgMHgyOUU0KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MkY3MCwgMHgyOUU0KTsKIAkvKiBGb3JjZSAxMDAwICggcmVxdWlyZWQgZm9yIGVuYWJsaW5nIFBIWSByZWdzIGNvbmZpZ3VyYXRpb24pICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLCAweDAxNDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDAwLCAweDAxNDApOwogCS8qIFNldCB1cGRfZnJlcSB0byA2ICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjMwLCAweDE2MDYpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjMwLCAweDE2MDYpOwogCS8qIERpc2FibGUgTlBERkUgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzEsIDB4QjgxNCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGMzEsIDB4QjgxNCk7CiAJLyogRGlzYWJsZSBhZGFwdGl2ZSBmaXhlZCBGRkUgKERlZmF1bHQpICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjM1LCAweDAwMkEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjM1LCAweDAwMkEpOwogCS8qIEVuYWJsZSBGRkUgaHlzdGVyZXNpcyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUYzRSwgMHgwMDY3KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUYzRSwgMHgwMDY3KTsKIAkvKiBGaXhlZCBGRkUgZm9yIHNob3J0IGNhYmxlIGxlbmd0aHMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNTQsIDB4MDA2NSk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNTQsIDB4MDA2NSk7CiAJLyogRml4ZWQgRkZFIGZvciBtZWRpdW0gY2FibGUgbGVuZ3RocyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY1NSwgMHgwMDJBKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY1NSwgMHgwMDJBKTsKIAkvKiBGaXhlZCBGRkUgZm9yIGxvbmcgY2FibGUgbGVuZ3RocyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY1NiwgMHgwMDJBKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY1NiwgMHgwMDJBKTsKIAkvKiBFbmFibGUgQWRhcHRpdmUgQ2xpcCBUaHJlc2hvbGQgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzIsIDB4M0ZCMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzIsIDB4M0ZCMCk7CiAJLyogQUhUIHJlc2V0IGxpbWl0IHRvIDEgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzYsIDB4QzBGRik7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzYsIDB4QzBGRik7CiAJLyogU2V0IEFIVCBtYXN0ZXIgZGVsYXkgdG8gMTI3IG1zZWMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzcsIDB4MURFQyk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzcsIDB4MURFQyk7CiAJLyogU2V0IHNjYW4gYml0cyBmb3IgQUhUICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjc4LCAweEY5RUYpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjc4LCAweEY5RUYpOwogCS8qIFNldCBBSFQgUHJlc2V0IGJpdHMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzksIDB4MDIxMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzksIDB4MDIxMCk7CiAJLyogQ2hhbmdlIGludGVnX2ZhY3RvciBvZiBjaGFubmVsIEEgdG8gMyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTg5NSwgMHgwMDAzKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MTg5NSwgMHgwMDAzKTsKIAkvKiBDaGFuZ2UgcHJvcF9mYWN0b3Igb2YgY2hhbm5lbHMgQkNEIHRvIDggKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE3OTYsIDB4MDAwOCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE3OTYsIDB4MDAwOCk7CiAJLyogQ2hhbmdlIGNnX2ljb3VudCArIGVuYWJsZSBpbnRlZ2JwIGZvciBjaGFubmVscyBCQ0QgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE3OTgsIDB4RDAwOCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE3OTgsIDB4RDAwOCk7CiAJLyoKIAkgKiBDaGFuZ2UgY2dfaWNvdW50ICsgZW5hYmxlIGludGVnYnAgKyBjaGFuZ2UgcHJvcF9mYWN0b3JfbWFzdGVyCiAJICogdG8gOCBmb3IgY2hhbm5lbCBBCiAJICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxODk4LCAweEQ5MTgpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxODk4LCAweEQ5MTgpOwogCS8qIERpc2FibGUgQUhUIGluIFNsYXZlIG1vZGUgb24gY2hhbm5lbCBBICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxODdBLCAweDA4MDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxODdBLCAweDA4MDApOwogCS8qCiAJICogRW5hYmxlIExQTFUgYW5kIGRpc2FibGUgQU4gdG8gMTAwMCBpbiBub24tRDBhIHN0YXRlcywKIAkgKiBFbmFibGUgU1BEK0IyQgogCSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAxOSwgMHgwMDhEKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAxOSwgMHgwMDhEKTsKIAkvKiBFbmFibGUgcmVzdGFydCBBTiBvbiBhbjEwMDBfZGlzIGNoYW5nZSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAxQiwgMHgyMDgwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAxQiwgMHgyMDgwKTsKIAkvKiBFbmFibGUgd2hfZmlmbyByZWFkIGNsb2NrIGluIDEwLzEwMCBtb2RlcyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAxNCwgMHgwMDQ1KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAxNCwgMHgwMDQ1KTsKIAkvKiBSZXN0YXJ0IEFOLCBTcGVlZCBzZWxlY3Rpb24gaXMgMTAwMCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAwMCwgMHgxMzQwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAwMCwgMHgxMzQwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCmluZGV4IDhmOGZlMGEuLjMyMjhhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00NCw3ICs0NCw2IEBACiBzMzIgIGlnYl9jaGVja19kb3duc2hpZnQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9jaGVja19yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX2NvcHBlcl9saW5rX2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zMzIgIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfbTg4KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleF9pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAppbmRleCBiZGY1ZDgzLi4wYmQ3NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC03Myw4ICs3Myw3NSBAQAogI2RlZmluZSBFMTAwMF9UQ1BUSU1FUiAweDAxMDRDICAvKiBUQ1AgVGltZXIgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9GQ1JUTCAgICAweDAyMTYwICAvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgTG93IC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfRkNSVEggICAgMHgwMjE2OCAgLyogRmxvdyBDb250cm9sIFJlY2VpdmUgVGhyZXNob2xkIEhpZ2ggLSBSVyAqLwotI2RlZmluZSBFMTAwMF9SREZQQ1EoX24pICAoMHgwMjQzMCArICgweDQgKiAoX24pKSkKICNkZWZpbmUgRTEwMDBfRkNSVFYgICAgMHgwMjQ2MCAgLyogRmxvdyBDb250cm9sIFJlZnJlc2ggVGltZXIgVmFsdWUgLSBSVyAqLworCisvKiBJRUVFIDE1ODggVElNRVNZTkNIICovCisjZGVmaW5lIEUxMDAwX1RTWU5DVFhDVEwgMHgwQjYxNAorI2RlZmluZSBFMTAwMF9UU1lOQ1RYQ1RMX1ZBTElEICgxPDwwKQorI2RlZmluZSBFMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQgKDE8PDQpCisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDVEwgMHgwQjYyMAorI2RlZmluZSBFMTAwMF9UU1lOQ1JYQ1RMX1ZBTElEICgxPDwwKQorI2RlZmluZSBFMTAwMF9UU1lOQ1JYQ1RMX0VOQUJMRUQgKDE8PDQpCitlbnVtIHsKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDJfVjIgPSAwLAorCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9MNF9WMSA9ICgxPDwxKSwKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDJfTDRfVjIgPSAoMTw8MiksCisJRTEwMDBfVFNZTkNSWENUTF9UWVBFX0FMTCA9ICgxPDwzKSwKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfRVZFTlRfVjIgPSAoMTw8MykgfCAoMTw8MSksCit9OworI2RlZmluZSBFMTAwMF9UU1lOQ1JYQ0ZHIDB4MDVGNTAKK2VudW0geworCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX1NZTkNfTUVTU0FHRSA9IDA8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfREVMQVlfUkVRX01FU1NBR0UgPSAxPDwwLAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0ZPTExPV1VQX01FU1NBR0UgPSAyPDwwLAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0RFTEFZX1JFU1BfTUVTU0FHRSA9IDM8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfTUFOQUdFTUVOVF9NRVNTQUdFID0gNDw8MCwKKworCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1NZTkNfTUVTU0FHRSA9IDA8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfREVMQVlfUkVRX01FU1NBR0UgPSAxPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1BBVEhfREVMQVlfUkVRX01FU1NBR0UgPSAyPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1BBVEhfREVMQVlfUkVTUF9NRVNTQUdFID0gMzw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9GT0xMT1dVUF9NRVNTQUdFID0gODw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVNQX01FU1NBR0UgPSA5PDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1BBVEhfREVMQVlfRk9MTE9XVVBfTUVTU0FHRSA9IDB4QTw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9BTk5PVU5DRV9NRVNTQUdFID0gMHhCPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1NJR05BTExJTkdfTUVTU0FHRSA9IDB4Qzw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9NQU5BR0VNRU5UX01FU1NBR0UgPSAweEQ8PDgsCit9OworI2RlZmluZSBFMTAwMF9TWVNUSU1MIDB4MEI2MDAKKyNkZWZpbmUgRTEwMDBfU1lTVElNSCAweDBCNjA0CisjZGVmaW5lIEUxMDAwX1RJTUlOQ0EgMHgwQjYwOAorCisjZGVmaW5lIEUxMDAwX1JYTVRSTCAgICAgMHgwQjYzNAorI2RlZmluZSBFMTAwMF9SWFNUTVBMIDB4MEI2MjQKKyNkZWZpbmUgRTEwMDBfUlhTVE1QSCAweDBCNjI4CisjZGVmaW5lIEUxMDAwX1JYU0FUUkwgMHgwQjYyQworI2RlZmluZSBFMTAwMF9SWFNBVFJIIDB4MEI2MzAKKworI2RlZmluZSBFMTAwMF9UWFNUTVBMIDB4MEI2MTgKKyNkZWZpbmUgRTEwMDBfVFhTVE1QSCAweDBCNjFDCisKKyNkZWZpbmUgRTEwMDBfRVRRRjAgICAweDA1Q0IwCisjZGVmaW5lIEUxMDAwX0VUUUYxICAgMHgwNUNCNAorI2RlZmluZSBFMTAwMF9FVFFGMiAgIDB4MDVDQjgKKyNkZWZpbmUgRTEwMDBfRVRRRjMgICAweDA1Q0JDCisjZGVmaW5lIEUxMDAwX0VUUUY0ICAgMHgwNUNDMAorI2RlZmluZSBFMTAwMF9FVFFGNSAgIDB4MDVDQzQKKyNkZWZpbmUgRTEwMDBfRVRRRjYgICAweDA1Q0M4CisjZGVmaW5lIEUxMDAwX0VUUUY3ICAgMHgwNUNDQworCisvKiBGaWx0ZXJpbmcgUmVnaXN0ZXJzICovCisjZGVmaW5lIEUxMDAwX1NBUUYoX24pICgweDU5ODAgKyA0ICogKF9uKSkKKyNkZWZpbmUgRTEwMDBfREFRRihfbikgKDB4NTlBMCArIDQgKiAoX24pKQorI2RlZmluZSBFMTAwMF9TUFFGKF9uKSAoMHg1OUMwICsgNCAqIChfbikpCisjZGVmaW5lIEUxMDAwX0ZUUUYoX24pICgweDU5RTAgKyA0ICogKF9uKSkKKyNkZWZpbmUgRTEwMDBfU0FRRjAgRTEwMDBfU0FRRigwKQorI2RlZmluZSBFMTAwMF9EQVFGMCBFMTAwMF9EQVFGKDApCisjZGVmaW5lIEUxMDAwX1NQUUYwIEUxMDAwX1NQUUYoMCkKKyNkZWZpbmUgRTEwMDBfRlRRRjAgRTEwMDBfRlRRRigwKQorI2RlZmluZSBFMTAwMF9TWU5RRihfbikgKDB4MDU1RkMgKyAoNCAqIChfbikpKSAvKiBTWU4gUGFja2V0IFF1ZXVlIEZsdHIgKi8KKyNkZWZpbmUgRTEwMDBfRVRRRihfbikgICgweDA1Q0IwICsgKDQgKiAoX24pKSkgLyogRVR5cGUgUXVldWUgRmx0ciAqLworCiAvKiBTcGxpdCBhbmQgUmVwbGljYXRpb24gUlggQ29udHJvbCAtIFJXICovCiAvKgogICogQ29udmVuaWVuY2UgbWFjcm9zCkBAIC0xMTAsNyArMTc3LDYgQEAKIAkJCQkgICAgOiAoMHgwRTAxOCArICgoX24pICogMHg0MCkpKQogI2RlZmluZSBFMTAwMF9UWERDVEwoX24pICAoKF9uKSA8IDQgPyAoMHgwMzgyOCArICgoX24pICogMHgxMDApKSBcCiAJCQkJICAgIDogKDB4MEUwMjggKyAoKF9uKSAqIDB4NDApKSkKLSNkZWZpbmUgRTEwMDBfVEFSQyhfbikgICAgKDB4MDM4NDAgKyAoX24gPDwgOCkpCiAjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkwoX24pICgweDAzODE0ICsgKF9uIDw8IDgpKQogI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMKF9uKSAoMHgwMjgxNCArIChfbiA8PCA4KSkKICNkZWZpbmUgRTEwMDBfVERXQkFMKF9uKSAgKChfbikgPCA0ID8gKDB4MDM4MzggKyAoKF9uKSAqIDB4MTAwKSkgXApAQCAtMjI2LDE2ICsyOTIsMTQgQEAKICNkZWZpbmUgRTEwMDBfUkFIKF9pKSAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDA0ICsgKChfaSkgKiA4KSkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNTRFNCArICgoX2kgLSAxNikgKiA4KSkpCiAjZGVmaW5lIEUxMDAwX1ZGVEEgICAgIDB4MDU2MDAgIC8qIFZMQU4gRmlsdGVyIFRhYmxlIEFycmF5IC0gUlcgQXJyYXkgKi8KLSNkZWZpbmUgRTEwMDBfVk1EX0NUTCAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMICAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfV1VDICAgICAgMHgwNTgwMCAgLyogV2FrZXVwIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVUZDICAgICAweDA1ODA4ICAvKiBXYWtldXAgRmlsdGVyIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVVMgICAgICAweDA1ODEwICAvKiBXYWtldXAgU3RhdHVzIC0gUk8gKi8KICNkZWZpbmUgRTEwMDBfTUFOQyAgICAgMHgwNTgyMCAgLyogTWFuYWdlbWVudCBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfSVBBViAgICAgMHgwNTgzOCAgLyogSVAgQWRkcmVzcyBWYWxpZCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1dVUEwgICAgIDB4MDU5MDAgIC8qIFdha2V1cCBQYWNrZXQgTGVuZ3RoIC0gUlcgKi8KLSNkZWZpbmUgRTEwMDBfSE9TVF9JRiAgMHgwODgwMCAgLyogSG9zdCBJbnRlcmZhY2UgKi8KIAotI2RlZmluZSBFMTAwMF9NQU5DMkggICAgICAweDA1ODYwIC8qIE1hbmFnZW1lbnQgQ29udHJvbCBUbyBIb3N0IC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfU1dfRldfU1lOQyAgMHgwNUI1QyAvKiBTb2Z0d2FyZS1GaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gLSBSVyAqLwogI2RlZmluZSBFMTAwMF9DQ01DVEwgICAgICAweDA1QjQ4IC8qIENDTSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEUxMDAwX0dJT0NUTCAgICAgIDB4MDVCNDQgLyogR0lPIEFuYWxvZyBDb250cm9sIFJlZ2lzdGVyICovCkBAIC0yNDMsOSArMzA3LDcgQEAKICNkZWZpbmUgRTEwMDBfRkFDVFBTICAgIDB4MDVCMzAgLyogRnVuY3Rpb24gQWN0aXZlIGFuZCBQb3dlciBTdGF0ZSB0byBNTkcgKi8KICNkZWZpbmUgRTEwMDBfU1dTTSAgICAgIDB4MDVCNTAgLyogU1cgU2VtYXBob3JlICovCiAjZGVmaW5lIEUxMDAwX0ZXU00gICAgICAweDA1QjU0IC8qIEZXIFNlbWFwaG9yZSAqLwotI2RlZmluZSBFMTAwMF9EQ0FfSUQgICAgMHgwNUI3MCAvKiBEQ0EgUmVxdWVzdGVyIElEIEluZm9ybWF0aW9uIC0gUk8gKi8KICNkZWZpbmUgRTEwMDBfRENBX0NUUkwgIDB4MDVCNzQgLyogRENBIENvbnRyb2wgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9ISUNSICAgICAgMHgwOEYwMCAvKiBIb3N0IEludGVmYWNlIENvbnRyb2wgKi8KIAogLyogUlNTIHJlZ2lzdGVycyAqLwogI2RlZmluZSBFMTAwMF9NUlFDICAgICAgMHgwNTgxOCAvKiBNdWx0aXBsZSBSZWNlaXZlIENvbnRyb2wgLSBSVyAqLwpAQCAtMjU0LDE4ICszMTYsMjcgQEAKICNkZWZpbmUgRTEwMDBfSU1JUlZQICAgIDB4MDVBQzAgLyogSW1tZWRpYXRlIEludGVycnVwdCBSWCBWTEFOIFByaW9yaXR5IC0gUlcgKi8KIC8qIE1TSS1YIEFsbG9jYXRpb24gUmVnaXN0ZXIgKF9pKSAtIFJXICovCiAjZGVmaW5lIEUxMDAwX01TSVhCTShfaSkgICAgKDB4MDE2MDAgKyAoKF9pKSAqIDQpKQotLyogTVNJLVggVGFibGUgZW50cnkgYWRkciBsb3cgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVEFERChfaSkgICgweDBDMDAwICsgKChfaSkgKiAweDEwKSkKLS8qIE1TSS1YIFRhYmxlIGVudHJ5IGFkZHIgdXBwZXIgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVFVBREQoX2kpICgweDBDMDA0ICsgKChfaSkgKiAweDEwKSkKLS8qIE1TSS1YIFRhYmxlIGVudHJ5IG1lc3NhZ2UgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVE1TRyhfaSkgICgweDBDMDA4ICsgKChfaSkgKiAweDEwKSkKLS8qIE1TSS1YIFRhYmxlIGVudHJ5IHZlY3RvciBjdHJsIHJlZyAwIC0gUlcgKi8KLSNkZWZpbmUgRTEwMDBfTVNJWFZDVFJMKF9pKSAoMHgwQzAwQyArICgoX2kpICogMHgxMCkpCiAvKiBSZWRpcmVjdGlvbiBUYWJsZSAtIFJXIEFycmF5ICovCiAjZGVmaW5lIEUxMDAwX1JFVEEoX2kpICAoMHgwNUMwMCArICgoX2kpICogNCkpCiAjZGVmaW5lIEUxMDAwX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpIC8qIFJTUyBSYW5kb20gS2V5IC0gUlcgQXJyYXkgKi8KIAorLyogVlQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1IgICAweDAwQzgwIC8qIE1haWxib3ggVkYgQ2F1c2UgLSBSV0MgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklNUiAgIDB4MDBDODQgLyogTWFpbGJveCBWRiBpbnQgTWFzayAtIFJXICovCisjZGVmaW5lIEUxMDAwX1ZGTFJFICAgICAweDAwQzg4IC8qIFZGIFJlZ2lzdGVyIEV2ZW50cyAtIFJXQyAqLworI2RlZmluZSBFMTAwMF9WRlJFICAgICAgMHgwMEM4QyAvKiBWRiBSZWNlaXZlIEVuYWJsZXMgKi8KKyNkZWZpbmUgRTEwMDBfVkZURSAgICAgIDB4MDBDOTAgLyogVkYgVHJhbnNtaXQgRW5hYmxlcyAqLworI2RlZmluZSBFMTAwMF9RREUgICAgICAgMHgwMjQwOCAvKiBRdWV1ZSBEcm9wIEVuYWJsZSAtIFJXICovCisjZGVmaW5lIEUxMDAwX0RUWFNXQyAgICAweDAzNTAwIC8qIERNQSBUeCBTd2l0Y2ggQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JQTE9MUiAgICAweDA1QUYwIC8qIFJlcGxpY2F0aW9uIE9mZmxvYWQgLSBSVyAqLworI2RlZmluZSBFMTAwMF9JT1ZUQ0wgICAgMHgwNUJCQyAvKiBJT1YgQ29udHJvbCBSZWdpc3RlciAqLworLyogVGhlc2UgYWN0IHBlciBWRiBzbyBhbiBhcnJheSBmcmllbmRseSBtYWNybyBpcyB1c2VkICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1goX24pICAgKDB4MDBDMDAgKyAoNCAqIChfbikpKQorI2RlZmluZSBFMTAwMF9WTUJNRU0oX24pICAgICAgICgweDAwODAwICsgKDY0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZNT0xSKF9uKSAgICAgICAgKDB4MDVBRDAgKyAoNCAqIChfbikpKQorI2RlZmluZSBFMTAwMF9WTFZGKF9uKSAgICAgICAgICgweDA1RDAwICsgKDQgKiAoX24pKSkgLyogVkxBTiBWaXJ0dWFsIE1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZpbHRlciAtIFJXICovCisKICNkZWZpbmUgd3IzMihyZWcsIHZhbHVlKSAod3JpdGVsKHZhbHVlLCBody0+aHdfYWRkciArIHJlZykpCiAjZGVmaW5lIHJkMzIocmVnKSAocmVhZGwoaHctPmh3X2FkZHIgKyByZWcpKQogI2RlZmluZSB3cmZsKCkgKCh2b2lkKXJkMzIoRTEwMDBfU1RBVFVTKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaCBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAppbmRleCBhZWJlZjhlLi40ZTg0NjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzQsMjUgKzM0LDE1IEBACiAjaW5jbHVkZSAiZTEwMDBfbWFjLmgiCiAjaW5jbHVkZSAiZTEwMDBfODI1NzUuaCIKIAorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZWNvbXBhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CisKIHN0cnVjdCBpZ2JfYWRhcHRlcjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0jaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KLSNkZWZpbmUgTUFYX0xST19BR0dSICAgICAgICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIE1BWF9MUk9fREVTQ1JJUFRPUlMgICAgICAgICAgICAgICAgOAotI2VuZGlmCi0KLS8qIEludGVycnVwdCBkZWZpbmVzICovCi0jZGVmaW5lIElHQl9NSU5fRFlOX0lUUiAzMDAwCi0jZGVmaW5lIElHQl9NQVhfRFlOX0lUUiA5NjAwMAotCiAvKiAoKDEwMDAwMDAwMDBucyAvICg2MDAwaW50cy9zICogMTAyNG5zKSkgPDwgMiA9IDY0OCAqLwogI2RlZmluZSBJR0JfU1RBUlRfSVRSIDY0OAogCi0jZGVmaW5lIElHQl9EWU5fSVRSX1BBQ0tFVF9USFJFU0hPTEQgMgotI2RlZmluZSBJR0JfRFlOX0lUUl9MRU5HVEhfTE9XIDIwMAotI2RlZmluZSBJR0JfRFlOX0lUUl9MRU5HVEhfSElHSCAxMDAwCi0KIC8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqLwogI2RlZmluZSBJR0JfREVGQVVMVF9UWEQgICAgICAgICAgICAgICAgICAyNTYKICNkZWZpbmUgSUdCX01JTl9UWEQgICAgICAgICAgICAgICAgICAgICAgIDgwCkBAIC02Nyw4ICs1NywyMSBAQAogI2RlZmluZSBJR0JfTUlOX0lUUl9VU0VDUyAgICAgICAgICAgICAgICAgMTAKIAogLyogVHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVzICovCi0jZGVmaW5lIElHQl9NQVhfUlhfUVVFVUVTICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBJR0JfTUFYX1RYX1FVRVVFUyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSUdCX01BWF9SWF9RVUVVRVMgICAgIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID4gNiA/IDEgOiAyKSA6IDQpCisjZGVmaW5lIElHQl9NQVhfVFhfUVVFVUVTICAgICBJR0JfTUFYX1JYX1FVRVVFUworI2RlZmluZSBJR0JfQUJTX01BWF9UWF9RVUVVRVMgICAgIDQKKworI2RlZmluZSBJR0JfTUFYX1ZGX01DX0VOVFJJRVMgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElHQl9NQVhfVkZfRlVOQ1RJT05TICAgICAgICAgICAgICAgOAorI2RlZmluZSBJR0JfTUFYX1ZGVEFfRU5UUklFUyAgICAgICAgICAgICAgIDEyOAorCitzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHsKKwl1bnNpZ25lZCBjaGFyIHZmX21hY19hZGRyZXNzZXNbRVRIX0FMRU5dOworCXUxNiB2Zl9tY19oYXNoZXNbSUdCX01BWF9WRl9NQ19FTlRSSUVTXTsKKwl1MTYgbnVtX3ZmX21jX2hhc2hlczsKKwlib29sIGNsZWFyX3RvX3NlbmQ7Cit9OwogCiAvKiBSWCBkZXNjcmlwdG9yIGNvbnRyb2wgdGhyZXNob2xkcy4KICAqIFBUSFJFU0ggLSBNQUMgd2lsbCBjb25zaWRlciBwcmVmZXRjaCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiB0aGlzIG51bWJlciBvZgpAQCAtOTQsMTIgKzk3LDkgQEAKICNkZWZpbmUgSUdCX1JYQlVGRkVSXzUxMiAgIDUxMgogI2RlZmluZSBJR0JfUlhCVUZGRVJfMTAyNCAgMTAyNAogI2RlZmluZSBJR0JfUlhCVUZGRVJfMjA0OCAgMjA0OAotI2RlZmluZSBJR0JfUlhCVUZGRVJfNDA5NiAgNDA5NgotI2RlZmluZSBJR0JfUlhCVUZGRVJfODE5MiAgODE5MgogI2RlZmluZSBJR0JfUlhCVUZGRVJfMTYzODQgMTYzODQKIAotLyogUGFja2V0IEJ1ZmZlciBhbGxvY2F0aW9ucyAqLwotCisjZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CiAKIC8qIEhvdyBtYW55IFR4IERlc2NyaXB0b3JzIGRvIHdlIG5lZWQgdG8gY2FsbCBuZXRpZl93YWtlX3F1ZXVlID8gKi8KICNkZWZpbmUgSUdCX1RYX1FVRVVFX1dBS0UJMTYKQEAgLTE3NiwyOSArMTc2LDE4IEBACiAJCQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAkJCWludCBzZXRfaXRyOwogCQkJc3RydWN0IGlnYl9yaW5nICpidWRkeTsKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCQkJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0JCQlib29sIGxyb191c2VkOwotI2VuZGlmCiAJCX07CiAJfTsKIAogCWNoYXIgbmFtZVtJRk5BTVNJWiArIDVdOwogfTsKIAotI2RlZmluZSBJR0JfREVTQ19VTlVTRUQoUikgXAotCSgoKChSKS0+bmV4dF90b19jbGVhbiA+IChSKS0+bmV4dF90b191c2UpID8gMCA6IChSKS0+Y291bnQpICsgXAotCShSKS0+bmV4dF90b19jbGVhbiAtIChSKS0+bmV4dF90b191c2UgLSAxKQotCiAjZGVmaW5lIEUxMDAwX1JYX0RFU0NfQURWKFIsIGkpCSAgICBcCiAJKCYoKCh1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKICNkZWZpbmUgRTEwMDBfVFhfREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQogI2RlZmluZSBFMTAwMF9UWF9DVFhUREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHN0cnVjdCBlMTAwMF9hZHZfdHhfY29udGV4dF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQotI2RlZmluZSBFMTAwMF9HRVRfREVTQyhSLCBpLCB0eXBlKQkoJigoKHN0cnVjdCB0eXBlICopKChSKS5kZXNjKSlbaV0pKQotI2RlZmluZSBFMTAwMF9UWF9ERVNDKFIsIGkpCQlFMTAwMF9HRVRfREVTQyhSLCBpLCBlMTAwMF90eF9kZXNjKQotI2RlZmluZSBFMTAwMF9SWF9ERVNDKFIsIGkpCQlFMTAwMF9HRVRfREVTQyhSLCBpLCBlMTAwMF9yeF9kZXNjKQogCiAvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCiAKQEAgLTI0OCw3ICsyMzcsNiBAQAogCiAJdTY0IGh3X2NzdW1fZXJyOwogCXU2NCBod19jc3VtX2dvb2Q7Ci0JdTY0IHJ4X2hkcl9zcGxpdDsKIAl1MzIgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CiAJYm9vbCByeF9jc3VtOwogCXUzMiBnb3JjOwpAQCAtMjYyLDYgKzI1MCwxMCBAQAogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKwlzdHJ1Y3QgY3ljbGVjb3VudGVyIGN5Y2xlczsKKwlzdHJ1Y3QgdGltZWNvdW50ZXIgY2xvY2s7CisJc3RydWN0IHRpbWVjb21wYXJlIGNvbXBhcmU7CisJc3RydWN0IGh3dHN0YW1wX2NvbmZpZyBod3RzdGFtcF9jb25maWc7CiAKIAkvKiBzdHJ1Y3RzIGRlZmluZWQgaW4gZTEwMDBfaHcuaCAqLwogCXN0cnVjdCBlMTAwMF9odyBodzsKQEAgLTI4MywyNyArMjc1LDE3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXUzMiBlZXByb21fd29sOwogCi0JLyogZm9yIGlvcG9ydCBmcmVlICovCi0JaW50IGJhcnM7Ci0JaW50IG5lZWRfaW9wb3J0OwotCi0Jc3RydWN0IGlnYl9yaW5nICptdWx0aV90eF90YWJsZVtJR0JfTUFYX1RYX1FVRVVFU107Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQl1bnNpZ25lZCBpbnQgbHJvX21heF9hZ2dyOwotCXVuc2lnbmVkIGludCBscm9fYWdncmVnYXRlZDsKLQl1bnNpZ25lZCBpbnQgbHJvX2ZsdXNoZWQ7Ci0JdW5zaWduZWQgaW50IGxyb19ub19kZXNjOwotI2VuZGlmCisJc3RydWN0IGlnYl9yaW5nICptdWx0aV90eF90YWJsZVtJR0JfQUJTX01BWF9UWF9RVUVVRVNdOwogCXVuc2lnbmVkIGludCB0eF9yaW5nX2NvdW50OwogCXVuc2lnbmVkIGludCByeF9yaW5nX2NvdW50OworCXVuc2lnbmVkIGludCB2ZnNfYWxsb2NhdGVkX2NvdW50OworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGE7CiB9OwogCiAjZGVmaW5lIElHQl9GTEFHX0hBU19NU0kgICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIElHQl9GTEFHX01TSV9FTkFCTEUgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElHQl9GTEFHX0RDQV9FTkFCTEVEICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElHQl9GTEFHX0lOX05FVFBPTEwgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElHQl9GTEFHX1FVQURfUE9SVF9BICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElHQl9GTEFHX05FRURfQ1RYX0lEWCAgICAgICgxIDw8IDUpCisjZGVmaW5lIElHQl9GTEFHX0RDQV9FTkFCTEVEICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElHQl9GTEFHX1FVQURfUE9SVF9BICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElHQl9GTEFHX05FRURfQ1RYX0lEWCAgICAgICgxIDw8IDMpCiAKIGVudW0gZTEwMDBfc3RhdGVfdCB7CiAJX19JR0JfVEVTVElORywKQEAgLTMzMywyNCArMzE1LDI0IEBACiAKIHN0YXRpYyBpbmxpbmUgczMyIGlnYl9yZXNldF9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlpZiAoaHctPnBoeS5vcHMucmVzZXRfcGh5KQotCQlyZXR1cm4gaHctPnBoeS5vcHMucmVzZXRfcGh5KGh3KTsKKwlpZiAoaHctPnBoeS5vcHMucmVzZXQpCisJCXJldHVybiBody0+cGh5Lm9wcy5yZXNldChodyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBzMzIgaWdiX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCiB7Ci0JaWYgKGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZykKLQkJcmV0dXJuIGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKKwlpZiAoaHctPnBoeS5vcHMucmVhZF9yZWcpCisJCXJldHVybiBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHMzMiBpZ2Jfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKLQlpZiAoaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZykKLQkJcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIG9mZnNldCwgZGF0YSk7CisJaWYgKGh3LT5waHkub3BzLndyaXRlX3JlZykKKwkJcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCAzYzgzMWYxLi5mYjA5YzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTg4LDE2ICs4OCwxMSBAQAogCXsgInJ4X2xvbmdfYnl0ZV9jb3VudCIsIElHQl9TVEFUKHN0YXRzLmdvcmMpIH0sCiAJeyAicnhfY3N1bV9vZmZsb2FkX2dvb2QiLCBJR0JfU1RBVChod19jc3VtX2dvb2QpIH0sCiAJeyAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIElHQl9TVEFUKGh3X2NzdW1fZXJyKSB9LAotCXsgInJ4X2hlYWRlcl9zcGxpdCIsIElHQl9TVEFUKHJ4X2hkcl9zcGxpdCkgfSwKKwl7ICJ0eF9kbWFfb3V0X29mX3N5bmMiLCBJR0JfU1RBVChzdGF0cy5kb29zeW5jKSB9LAogCXsgImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgSUdCX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpIH0sCiAJeyAidHhfc21idXMiLCBJR0JfU1RBVChzdGF0cy5tZ3B0YykgfSwKIAl7ICJyeF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncHJjKSB9LAogCXsgImRyb3BwZWRfc21idXMiLCBJR0JfU1RBVChzdGF0cy5tZ3BkYykgfSwKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCXsgImxyb19hZ2dyZWdhdGVkIiwgSUdCX1NUQVQobHJvX2FnZ3JlZ2F0ZWQpIH0sCi0JeyAibHJvX2ZsdXNoZWQiLCBJR0JfU1RBVChscm9fZmx1c2hlZCkgfSwKLQl7ICJscm9fbm9fZGVzYyIsIElHQl9TVEFUKGxyb19ub19kZXNjKSB9LAotI2VuZGlmCiB9OwogCiAjZGVmaW5lIElHQl9RVUVVRV9TVEFUU19MRU4gXApAQCAtMjkzLDE1ICsyODgsMTUgQEAKIAogc3RhdGljIHUzMiBpZ2JfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7CisJcmV0dXJuIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSAhPSAwOwogfQogCiBzdGF0aWMgaW50IGlnYl9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlpZiAoZGF0YSkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKIAllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSFdfQ1NVTTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzEwLDE1ICszMDUsMTMgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKGRhdGEpCisJaWYgKGRhdGEpIHsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwotCi0JaWYgKGRhdGEpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCWVsc2UKKwl9IGVsc2UgeworCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKIAkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OworCX0KIAogCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUU08gaXMgJXNcbiIsCiAJCSBkYXRhID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CkBAIC00MDUsNyArMzk4LDcgQEAKIAlyZWdzX2J1ZmZbMzRdID0gcmQzMihFMTAwMF9STFBNTCk7CiAJcmVnc19idWZmWzM1XSA9IHJkMzIoRTEwMDBfUkZDVEwpOwogCXJlZ3NfYnVmZlszNl0gPSByZDMyKEUxMDAwX01SUUMpOwotCXJlZ3NfYnVmZlszN10gPSByZDMyKEUxMDAwX1ZNRF9DVEwpOworCXJlZ3NfYnVmZlszN10gPSByZDMyKEUxMDAwX1ZUX0NUTCk7CiAKIAkvKiBUcmFuc21pdCAqLwogCXJlZ3NfYnVmZlszOF0gPSByZDMyKEUxMDAwX1RDVEwpOwpAQCAtNTk4LDEyICs1OTEsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoaHctPm52bS50eXBlID09IGUxMDAwX252bV9lZXByb21fc3BpKQotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGZpcnN0X3dvcmQsCisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBmaXJzdF93b3JkLAogCQkJCQkgICAgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsCiAJCQkJCSAgICBlZXByb21fYnVmZik7CiAJZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKSB7Ci0JCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGZpcnN0X3dvcmQgKyBpLCAxLAorCQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGZpcnN0X3dvcmQgKyBpLCAxLAogCQkJCQkJICAgICZlZXByb21fYnVmZltpXSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlicmVhazsKQEAgLTY1MCwxNCArNjQzLDE0IEBACiAJaWYgKGVlcHJvbS0+b2Zmc2V0ICYgMSkgewogCQkvKiBuZWVkIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGZpcnN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KIAkJLyogb25seSB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBmaXJzdF93b3JkLCAxLAorCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgZmlyc3Rfd29yZCwgMSwKIAkJCQkJICAgICZlZXByb21fYnVmZlswXSk7CiAJCXB0cisrOwogCX0KIAlpZiAoKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSAmIDEpICYmIChyZXRfdmFsID09IDApKSB7CiAJCS8qIG5lZWQgcmVhZC9tb2RpZnkvd3JpdGUgb2YgbGFzdCBjaGFuZ2VkIEVFUFJPTSB3b3JkICovCiAJCS8qIG9ubHkgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBsYXN0X3dvcmQsIDEsCisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBsYXN0X3dvcmQsIDEsCiAJCQkJICAgJmVlcHJvbV9idWZmW2xhc3Rfd29yZCAtIGZpcnN0X3dvcmRdKTsKIAl9CiAKQEAgLTY3MCw3ICs2NjMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKQogCQllZXByb21fYnVmZltpXSA9IGNwdV90b19sZTE2KGVlcHJvbV9idWZmW2ldKTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy53cml0ZV9udm0oaHcsIGZpcnN0X3dvcmQsCisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlKGh3LCBmaXJzdF93b3JkLAogCQkJCSAgICAgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsIGVlcHJvbV9idWZmKTsKIAogCS8qIFVwZGF0ZSB0aGUgY2hlY2tzdW0gb3ZlciB0aGUgZmlyc3QgcGFydCBvZiB0aGUgRUVQUk9NIGlmIG5lZWRlZApAQCAtNjk0LDcgKzY4Nyw3IEBACiAKIAkvKiBFRVBST00gaW1hZ2UgdmVyc2lvbiAjIGlzIHJlcG9ydGVkIGFzIGZpcm13YXJlIHZlcnNpb24gIyBmb3IKIAkgKiA4MjU3NSBjb250cm9sbGVycyAqLwotCWFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZF9udm0oJmFkYXB0ZXItPmh3LCA1LCAxLCAmZWVwcm9tX2RhdGEpOworCWFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZCgmYWRhcHRlci0+aHcsIDUsIDEsICZlZXByb21fZGF0YSk7CiAJc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLAogCQkoZWVwcm9tX2RhdGEgJiAweEYwMDApID4+IDEyLAogCQkoZWVwcm9tX2RhdGEgJiAweDBGRjApID4+IDQsCkBAIC04NjMsMjMgKzg1NiwyNiBAQAogCXsgRTEwMDBfUkRCQUwoMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCiAJeyBFMTAwMF9SREJBSCgwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKIAl7IEUxMDAwX1JETEVOKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAotCXsgRTEwMDBfUkRCQUwoNCksICAweDQwLCAgOCwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9SREJBSCg0KSwgIDB4NDAsICA4LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1JETEVOKDQpLCAgMHg0MCwgIDgsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAotCS8qIEVuYWJsZSBhbGwgZm91ciBSWCBxdWV1ZXMgYmVmb3JlIHRlc3RpbmcuICovCi0JeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCAxLCAgV1JJVEVfTk9fVEVTVCwgMCwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSB9LAorCXsgRTEwMDBfUkRCQUwoNCksICAweDQwLCAxMiwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SREJBSCg0KSwgIDB4NDAsIDEyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JETEVOKDQpLCAgMHg0MCwgMTIsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAorCS8qIEVuYWJsZSBhbGwgUlggcXVldWVzIGJlZm9yZSB0ZXN0aW5nLiAqLworCXsgRTEwMDBfUlhEQ1RMKDApLCAweDEwMCwgNCwgIFdSSVRFX05PX1RFU1QsIDAsIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUgfSwKKwl7IEUxMDAwX1JYRENUTCg0KSwgMHg0MCwgMTIsICBXUklURV9OT19URVNULCAwLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCiAJLyogUkRIIGlzIHJlYWQtb25seSBmb3IgODI1NzYsIG9ubHkgdGVzdCBSRFQuICovCiAJeyBFMTAwMF9SRFQoMCksCSAgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCisJeyBFMTAwMF9SRFQoNCksCSAgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCiAJeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCA0LCAgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAorCXsgRTEwMDBfUlhEQ1RMKDQpLCAweDQwLCAxMiwgIFdSSVRFX05PX1RFU1QsIDAsIDAgfSwKIAl7IEUxMDAwX0ZDUlRILAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGMCwgMHgwMDAwRkZGMCB9LAogCXsgRTEwMDBfRkNUVFYsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCiAJeyBFMTAwMF9USVBHLAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHgzRkZGRkZGRiwgMHgzRkZGRkZGRiB9LAogCXsgRTEwMDBfVERCQUwoMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAogCXsgRTEwMDBfVERCQUgoMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAogCXsgRTEwMDBfVERMRU4oMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAotCXsgRTEwMDBfVERCQUwoNCksICAweDQwLCA4LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9UREJBSCg0KSwgIDB4NDAsIDgsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1RETEVOKDQpLCAgMHg0MCwgOCwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAorCXsgRTEwMDBfVERCQUwoNCksICAweDQwLCAxMiwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERCQUgoNCksICAweDQwLCAxMiwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERMRU4oNCksICAweDQwLCAxMiwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAogCXsgRTEwMDBfUkNUTCwJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweEZGRkZGRkZGLCAweDAwMDAwMDAwIH0sCiAJeyBFMTAwMF9SQ1RMLCAJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweDA0Q0ZCMEZFLCAweDAwM0ZGRkZCIH0sCiAJeyBFMTAwMF9SQ1RMLCAJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweDA0Q0ZCMEZFLCAweEZGRkZGRkZGIH0sCkBAIC05MjYsMTIgKzkyMiwxMyBAQAogc3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKIAkJCSAgICAgaW50IHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZSkKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBwYXQsIHZhbDsKIAl1MzIgX3Rlc3RbXSA9CiAJCXsweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGfTsKIAlmb3IgKHBhdCA9IDA7IHBhdCA8IEFSUkFZX1NJWkUoX3Rlc3QpOyBwYXQrKykgewotCQl3cml0ZWwoKF90ZXN0W3BhdF0gJiB3cml0ZSksIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7Ci0JCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCQl3cjMyKHJlZywgKF90ZXN0W3BhdF0gJiB3cml0ZSkpOworCQl2YWwgPSByZDMyKHJlZyk7CiAJCWlmICh2YWwgIT0gKF90ZXN0W3BhdF0gJiB3cml0ZSAmIG1hc2spKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJwYXR0ZXJuIHRlc3QgcmVnICUwNFggIgogCQkJCSJmYWlsZWQ6IGdvdCAweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLApAQCAtOTQ2LDkgKzk0MywxMCBAQAogc3RhdGljIGJvb2wgcmVnX3NldF9hbmRfY2hlY2soc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsCiAJCQkgICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZhbDsKLQl3cml0ZWwoKHdyaXRlICYgbWFzayksIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7Ci0JdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJd3IzMihyZWcsIHdyaXRlICYgbWFzayk7CisJdmFsID0gcmQzMihyZWcpOwogCWlmICgod3JpdGUgJiBtYXNrKSAhPSAodmFsICYgbWFzaykpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiIKIAkJCSIgZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsIHJlZywKQEAgLTEwMTQsMTIgKzEwMTIsMTQgQEAKIAkJZm9yIChpID0gMDsgaSA8IHRlc3QtPmFycmF5X2xlbjsgaSsrKSB7CiAJCQlzd2l0Y2ggKHRlc3QtPnRlc3RfdHlwZSkgewogCQkJY2FzZSBQQVRURVJOX1RFU1Q6Ci0JCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIHRlc3QtPnJlZ19vZmZzZXQpLAorCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsKKwkJCQkJCShpICogdGVzdC0+cmVnX29mZnNldCksCiAJCQkJCQl0ZXN0LT5tYXNrLAogCQkJCQkJdGVzdC0+d3JpdGUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTRVRfUkVBRF9URVNUOgotCQkJCVJFR19TRVRfQU5EX0NIRUNLKHRlc3QtPnJlZyArIChpICogdGVzdC0+cmVnX29mZnNldCksCisJCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsKKwkJCQkJCShpICogdGVzdC0+cmVnX29mZnNldCksCiAJCQkJCQl0ZXN0LT5tYXNrLAogCQkJCQkJdGVzdC0+d3JpdGUpOwogCQkJCWJyZWFrOwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAkqZGF0YSA9IDA7CiAJLyogUmVhZCBhbmQgYWRkIHVwIHRoZSBjb250ZW50cyBvZiB0aGUgRUVQUk9NICovCiAJZm9yIChpID0gMDsgaSA8IChOVk1fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykgewotCQlpZiAoKGFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZF9udm0oJmFkYXB0ZXItPmh3LCBpLCAxLCAmdGVtcCkpCisJCWlmICgoYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkKCZhZGFwdGVyLT5odywgaSwgMSwgJnRlbXApKQogCQkgICAgPCAwKSB7CiAJCQkqZGF0YSA9IDE7CiAJCQlicmVhazsKQEAgLTEwOTEsMTYgKzEwOTEsMTcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTMyIG1hc2ssIGkgPSAwLCBzaGFyZWRfaW50ID0gdHJ1ZTsKKwl1MzIgbWFzaywgaWNzX21hc2ssIGkgPSAwLCBzaGFyZWRfaW50ID0gdHJ1ZTsKIAl1MzIgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOwogCiAJKmRhdGEgPSAwOwogCiAJLyogSG9vayB1cCB0ZXN0IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLwotCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKKwlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQogCQkvKiBOT1RFOiB3ZSBkb24ndCB0ZXN0IE1TSS1YIGludGVycnVwdHMgaGVyZSwgeWV0ICovCiAJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSB7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSB7CiAJCXNoYXJlZF9pbnQgPSBmYWxzZTsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgJmlnYl90ZXN0X2ludHIsIDAsIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSkgewogCQkJKmRhdGEgPSAxOwpAQCAtMTExNiwxNiArMTExNywzMSBAQAogCX0KIAlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAidGVzdGluZyAlcyBpbnRlcnJ1cHRcbiIsCiAJCShzaGFyZWRfaW50ID8gInNoYXJlZCIgOiAidW5zaGFyZWQiKSk7Ci0KIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCXdyMzIoRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKIAltc2xlZXAoMTApOwogCisJLyogRGVmaW5lIGFsbCB3cml0YWJsZSBiaXRzIGZvciBJQ1MgKi8KKwlzd2l0Y2goaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NToKKwkJaWNzX21hc2sgPSAweDM3RjQ3RUREOworCQlicmVhazsKKwljYXNlIGUxMDAwXzgyNTc2OgorCQlpY3NfbWFzayA9IDB4NzdENEZCRkQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWljc19tYXNrID0gMHg3RkZGRkZGRjsKKwkJYnJlYWs7CisJfQorCiAJLyogVGVzdCBlYWNoIGludGVycnVwdCAqLwotCWZvciAoOyBpIDwgMTA7IGkrKykgeworCWZvciAoOyBpIDwgMzE7IGkrKykgewogCQkvKiBJbnRlcnJ1cHQgdG8gdGVzdCAqLwogCQltYXNrID0gMSA8PCBpOwogCisJCWlmICghKG1hc2sgJiBpY3NfbWFzaykpCisJCQljb250aW51ZTsKKwogCQlpZiAoIXNoYXJlZF9pbnQpIHsKIAkJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCB0byBiZSByZXBvcnRlZCBpbgogCQkJICogdGhlIGNhdXNlIHJlZ2lzdGVyIGFuZCB0aGVuIGZvcmNlIHRoZSBzYW1lCkBAIC0xMTM0LDggKzExNTAsMTIgQEAKIAkJCSAqIHRlc3QgZmFpbGVkLgogCQkJICovCiAJCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7Ci0JCQl3cjMyKEUxMDAwX0lNQywgfm1hc2sgJiAweDAwMDA3RkZGKTsKLQkJCXdyMzIoRTEwMDBfSUNTLCB+bWFzayAmIDB4MDAwMDdGRkYpOworCisJCQkvKiBGbHVzaCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCQl3cjMyKEUxMDAwX0lDUiwgfjApOworCisJCQl3cjMyKEUxMDAwX0lNQywgbWFzayk7CisJCQl3cjMyKEUxMDAwX0lDUywgbWFzayk7CiAJCQltc2xlZXAoMTApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CkBAIC0xMTUxLDYgKzExNzEsMTAgQEAKIAkJICogdGVzdCBmYWlsZWQuCiAJCSAqLwogCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CisKKwkJLyogRmx1c2ggYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQl3cjMyKEUxMDAwX0lDUiwgfjApOworCiAJCXdyMzIoRTEwMDBfSU1TLCBtYXNrKTsKIAkJd3IzMihFMTAwMF9JQ1MsIG1hc2spOwogCQltc2xlZXAoMTApOwpAQCAtMTE2OCwxMSArMTE5MiwxNSBAQAogCQkJICogdGVzdCBmYWlsZWQuCiAJCQkgKi8KIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLQkJCXdyMzIoRTEwMDBfSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOwotCQkJd3IzMihFMTAwMF9JQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7CisKKwkJCS8qIEZsdXNoIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJCXdyMzIoRTEwMDBfSUNSLCB+MCk7CisKKwkJCXdyMzIoRTEwMDBfSU1DLCB+bWFzayk7CisJCQl3cjMyKEUxMDAwX0lDUywgfm1hc2spOwogCQkJbXNsZWVwKDEwKTsKIAotCQkJaWYgKGFkYXB0ZXItPnRlc3RfaWNyKSB7CisJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CiAJCQkJKmRhdGEgPSA1OwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE4MCw3ICsxMjA4LDcgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwotCXdyMzIoRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKKwl3cjMyKEUxMDAwX0lNQywgfjApOwogCW1zbGVlcCgxMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtMTI0NCw2ICsxMjcyLDcgQEAKIAlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dGVzdF90eF9yaW5nOwogCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT50ZXN0X3J4X3Jpbmc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAl1MzIgcmN0bDsKIAlpbnQgaSwgcmV0X3ZhbDsKIApAQCAtMTI2MCw3ICsxMjg5LDcgQEAKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCi0JdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKIAkJCQkJICAgICAmdHhfcmluZy0+ZG1hKTsKQEAgLTEyNzQsNyArMTMwMyw3IEBACiAJCQkoKHU2NCkgdHhfcmluZy0+ZG1hICYgMHgwMDAwMDAwMEZGRkZGRkZGKSk7CiAJd3IzMihFMTAwMF9UREJBSCgwKSwgKCh1NjQpIHR4X3JpbmctPmRtYSA+PiAzMikpOwogCXdyMzIoRTEwMDBfVERMRU4oMCksCi0JCQl0eF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOworCQkJdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpKTsKIAl3cjMyKEUxMDAwX1RESCgwKSwgMCk7CiAJd3IzMihFMTAwMF9URFQoMCksIDApOwogCXdyMzIoRTEwMDBfVENUTCwKQEAgLTEyODMsMjcgKzEzMTIsMzEgQEAKIAkJCUUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRSA8PCBFMTAwMF9DT0xEX1NISUZUKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBlMTAwMF90eF9kZXNjICp0eF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgaSk7CisJCXVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjICp0eF9kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEwMjQ7CiAKKwkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBpKTsKIAkJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNrYikgewogCQkJcmV0X3ZhbCA9IDM7CiAJCQlnb3RvIGVycl9ub21lbTsKIAkJfQogCQlza2JfcHV0KHNrYiwgc2l6ZSk7Ci0JCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKLQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubGVuZ3RoID0gc2tiLT5sZW47Ci0JCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSA9Ci0JCQlwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAotCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJdHhfZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NCh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEpOwotCQl0eF9kZXNjLT5sb3dlci5kYXRhID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCQl0eF9kZXNjLT5sb3dlci5kYXRhIHw9IGNwdV90b19sZTMyKEUxMDAwX1RYRF9DTURfRU9QIHwKLQkJCQkJCSAgIEUxMDAwX1RYRF9DTURfSUZDUyB8Ci0JCQkJCQkgICBFMTAwMF9UWERfQ01EX1JTKTsKLQkJdHhfZGVzYy0+dXBwZXIuZGF0YSA9IDA7CisJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2tiLT5sZW47CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4X2Rlc2MtPnJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKKwkJdHhfZGVzYy0+cmVhZC5vbGluZm9fc3RhdHVzID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pIDw8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQ7CisJCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOworCQl0eF9kZXNjLT5yZWFkLmNtZF90eXBlX2xlbiB8PSBjcHVfdG9fbGUzMihFMTAwMF9UWERfQ01EX0VPUCB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX1RYRF9DTURfSUZDUyB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX1RYRF9DTURfUlMgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfQURWVFhEX0RDTURfREVYVCk7CiAJfQogCiAJLyogU2V0dXAgUnggZGVzY3JpcHRvciByaW5nIGFuZCBSeCBidWZmZXJzICovCkBAIC0xMzE5LDcgKzEzNTIsNyBAQAogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKLQlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3J4X2Rlc2MpOworCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyk7CiAJcnhfcmluZy0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHJ4X3JpbmctPnNpemUsCiAJCQkJCSAgICAgJnJ4X3JpbmctPmRtYSk7CiAJaWYgKCFyeF9yaW5nLT5kZXNjKSB7CkBAIC0xMzM4LDE2ICsxMzcxLDE3IEBACiAJd3IzMihFMTAwMF9SREgoMCksIDApOwogCXdyMzIoRTEwMDBfUkRUKDApLCAwKTsKIAlyY3RsICY9IH4oRTEwMDBfUkNUTF9MQk1fVENWUiB8IEUxMDAwX1JDVExfTEJNX01BQyk7Ci0JcmN0bCA9IEUxMDAwX1JDVExfRU4gfCBFMTAwMF9SQ1RMX0JBTSB8IEUxMDAwX1JDVExfU1pfMjA0OCB8Ci0JCUUxMDAwX1JDVExfUkRNVFNfSEFMRiB8CisJcmN0bCA9IEUxMDAwX1JDVExfRU4gfCBFMTAwMF9SQ1RMX0JBTSB8IEUxMDAwX1JDVExfUkRNVFNfSEFMRiB8CiAJCShhZGFwdGVyLT5ody5tYWMubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CiAJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKLQl3cjMyKEUxMDAwX1NSUkNUTCgwKSwgMCk7CisJd3IzMihFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTsKIAogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBlMTAwMF9yeF9kZXNjICpyeF9kZXNjID0gRTEwMDBfUlhfREVTQygqcnhfcmluZywgaSk7CisJCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCisJCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQlyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwogCQlza2IgPSBhbGxvY19za2IoSUdCX1JYQlVGRkVSXzIwNDggKyBORVRfSVBfQUxJR04sCiAJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CkBAIC0xMzU1LDExICsxMzg5LDExIEBACiAJCQlnb3RvIGVycl9ub21lbTsKIAkJfQogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKLQkJcnhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgSUdCX1JYQlVGRkVSXzIwNDgsCi0JCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXJ4X2Rlc2MtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQocnhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHQl9SWEJVRkZFUl8yMDQ4LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhfZGVzYy0+cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOwogCQltZW1zZXQoc2tiLT5kYXRhLCAweDAwLCBza2ItPmxlbik7CiAJfQogCkBAIC0xNDU4LDcgKzE0OTIsNyBAQAogCQkJIEUxMDAwX0NUUkxfVEZDRSB8CiAJCQkgRTEwMDBfQ1RSTF9MUlNUKTsKIAkJcmVnIHw9IEUxMDAwX0NUUkxfU0xVIHwKLQkJICAgICAgIEUxMDAwX0NUUkxfRkQ7IAorCQkgICAgICAgRTEwMDBfQ1RSTF9GRDsKIAkJd3IzMihFMTAwMF9DVFJMLCByZWcpOwogCiAJCS8qIFVuc2V0IHN3aXRjaCBjb250cm9sIHRvIHNlcmRlcyBlbmVyZ3kgZGV0ZWN0ICovCkBAIC0xNzQ1LDYgKzE3NzksMTUgQEAKIAkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSOgorCQkvKiBxdWFkIHBvcnQgYWRhcHRlcnMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgKi8KKwkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19RVUFEX1BPUlRfQSkpIHsKKwkJCXdvbC0+c3VwcG9ydGVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCS8qIHJldHVybiBzdWNjZXNzIGZvciBub24gZXhjbHVkZWQgYWRhcHRlciBwb3J0cyAqLworCQlyZXR2YWwgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBkdWFsIHBvcnQgY2FyZHMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgZnJvbSBub3cgb24KIAkJICogdW5sZXNzIGl0IHdhcyBlbmFibGVkIGluIHRoZSBlZXByb20gZm9yIHBvcnQgQgpAQCAtMTgyNyw5ICsxODcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogdG9nZ2xlIExFRCA0IHRpbWVzIHBlciBzZWNvbmQgPSAyICJibGlua3MiIHBlciBzZWNvbmQgKi8KLSNkZWZpbmUgSUdCX0lEX0lOVEVSVkFMCQkoSFovNCkKLQogLyogYml0IGRlZmluZXMgZm9yIGFkYXB0ZXItPmxlZF9zdGF0dXMgKi8KICNkZWZpbmUgSUdCX0xFRF9PTgkJMAogCkBAIC0xOTIxLDE4ICsxOTYxLDYgQEAKIAlpbnQgc3RhdF9jb3VudCA9IHNpemVvZihzdHJ1Y3QgaWdiX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWludCBqOwogCWludCBpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaW50IGFnZ3JlZ2F0ZWQgPSAwLCBmbHVzaGVkID0gMCwgbm9fZGVzYyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWFnZ3JlZ2F0ZWQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7Ci0JCWZsdXNoZWQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7Ci0JCW5vX2Rlc2MgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7Ci0JfQotCWFkYXB0ZXItPmxyb19hZ2dyZWdhdGVkID0gYWdncmVnYXRlZDsKLQlhZGFwdGVyLT5scm9fZmx1c2hlZCA9IGZsdXNoZWQ7Ci0JYWRhcHRlci0+bHJvX25vX2Rlc2MgPSBub19kZXNjOwotI2VuZGlmCiAKIAlpZ2JfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBJR0JfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IGE1MGRiNTMuLmNhODQyMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvbmV0X3RzdGFtcC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CkBAIC00OCwxMiArNDksMTIgQEAKICNlbmRpZgogI2luY2x1ZGUgImlnYi5oIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIxLjIuNDUtazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjMuMTYtazIiCiBjaGFyIGlnYl9kcml2ZXJfbmFtZVtdID0gImlnYiI7CiBjaGFyIGlnYl9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpZ2JfZHJpdmVyX3N0cmluZ1tdID0KIAkJCQkiSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciI7Ci1zdGF0aWMgY29uc3QgY2hhciBpZ2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY29uc3QgY2hhciBpZ2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICppZ2JfaW5mb190YmxbXSA9IHsKIAlbYm9hcmRfODI1NzVdID0gJmUxMDAwXzgyNTc1X2luZm8sCkBAIC02MSw4ICs2MiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWdiX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzYpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9OUyksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVHQl9RVUFEX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCkBAIC0xMDUsNyArMTA4LDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9vdGhlcihpbnQgaXJxLCB2b2lkICopOwogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfdHgoaW50IGlycSwgdm9pZCAqKTsKLXN0YXRpYyBpbnQgaWdiX2NsZWFuX3J4X3JpbmdfbXNpeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKICNpZmRlZiBDT05GSUdfSUdCX0RDQQogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9yeF9kY2Eoc3RydWN0IGlnYl9yaW5nICopOwogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV90eF9kY2Eoc3RydWN0IGlnYl9yaW5nICopOwpAQCAtMTE1LDkgKzExNyw2IEBACiBzdGF0aWMgaW50IGlnYl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGJvb2wgaWdiX2NsZWFuX3J4X2lycV9hZHYoc3RydWN0IGlnYl9yaW5nICosIGludCAqLCBpbnQpOwogc3RhdGljIHZvaWQgaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi1zdGF0aWMgaW50IGlnYl9nZXRfc2tiX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqLCB2b2lkICoqLCB1NjQgKiwgdm9pZCAqKTsKLSNlbmRpZgogc3RhdGljIGludCBpZ2JfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCBjbWQpOwogc3RhdGljIHZvaWQgaWdiX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CkBAIC0xMjUsNiArMTI0LDE2IEBACiBzdGF0aWMgdm9pZCBpZ2Jfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CiBzdGF0aWMgdm9pZCBpZ2Jfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYpOwogc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgdm9pZCBpZ2JfcGluZ19hbGxfdmZzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9tc2dfdGFzayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgaW50IGlnYl9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICosIHUzMik7CitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3NldF9yYWhfcG9vbChzdHJ1Y3QgZTEwMDBfaHcgKiwgaW50ICwgaW50KTsKK3N0YXRpYyB2b2lkIGlnYl9zZXRfbWNfbGlzdF9wb29scyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgaW50LCB1MTYpOworc3RhdGljIHZvaWQgaWdiX3ZtbV9jb250cm9sKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3Ztb2xyKHN0cnVjdCBlMTAwMF9odyAqLCBpbnQpOworc3RhdGljIGlubGluZSBpbnQgaWdiX3NldF92Zl9ybHBtbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBpZ2Jfc2V0X3ZmX21hYyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKTsKIAogc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqLCBwbV9tZXNzYWdlX3QpOwogI2lmZGVmIENPTkZJR19QTQpAQCAtMTM5LDEyICsxNDgsMTggQEAKIAkucHJpb3JpdHkJPSAwCiB9OwogI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogLyogZm9yIG5ldGR1bXAgLyBuZXQgY29uc29sZSAqLwogc3RhdGljIHZvaWQgaWdiX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgc3NpemVfdCBpZ2Jfc2V0X251bV92ZnMoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK3N0YXRpYyBzc2l6ZV90IGlnYl9zaG93X251bV92ZnMoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKik7CitERVZJQ0VfQVRUUihudW1fdmZzLCBTX0lSVUdPIHwgU19JV1VTUiwgaWdiX3Nob3dfbnVtX3ZmcywgaWdiX3NldF9udW1fdmZzKTsKKyNlbmRpZgogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaWdiX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICosCiAJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCk7CiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpZ2JfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqKTsKQEAgLTE3OCw2ICsxOTMsNTQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAorLyoqCisgKiBTY2FsZSB0aGUgTklDIGNsb2NrIGN5Y2xlIGJ5IGEgbGFyZ2UgZmFjdG9yIHNvIHRoYXQKKyAqIHJlbGF0aXZlbHkgc21hbGwgY2xvY2sgY29ycmVjdGlvbnMgY2FuIGJlIGFkZGVkIG9yCisgKiBzdWJzdHJhY3RlZCBhdCBlYWNoIGNsb2NrIHRpY2suIFRoZSBkcmF3YmFja3Mgb2YgYQorICogbGFyZ2UgZmFjdG9yIGFyZSBhKSB0aGF0IHRoZSBjbG9jayByZWdpc3RlciBvdmVyZmxvd3MKKyAqIG1vcmUgcXVpY2tseSAobm90IHN1Y2ggYSBiaWcgZGVhbCkgYW5kIGIpIHRoYXQgdGhlCisgKiBpbmNyZW1lbnQgcGVyIHRpY2sgaGFzIHRvIGZpdCBpbnRvIDI0IGJpdHMuCisgKgorICogTm90ZSB0aGF0CisgKiAgIFRJTUlOQ0EgPSBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyAqCisgKiAgICAgICAgICAgICBJR0JfVFNZTkNfU0NBTEUKKyAqICAgVElNSU5DQSArPSBUSU1JTkNBICogYWRqdXN0bWVudCBbcHBtXSAvIDFlOQorICoKKyAqIFRoZSBiYXNlIHNjYWxlIGZhY3RvciBpcyBpbnRlbnRpb25hbGx5IGEgcG93ZXIgb2YgdHdvCisgKiBzbyB0aGF0IHRoZSBkaXZpc2lvbiBpbiAlc3RydWN0IHRpbWVjb3VudGVyIGNhbiBiZSBkb25lIHdpdGgKKyAqIGEgc2hpZnQuCisgKi8KKyNkZWZpbmUgSUdCX1RTWU5DX1NISUZUICgxOSkKKyNkZWZpbmUgSUdCX1RTWU5DX1NDQUxFICgxPDxJR0JfVFNZTkNfU0hJRlQpCisKKy8qKgorICogVGhlIGR1cmF0aW9uIG9mIG9uZSBjbG9jayBjeWNsZSBvZiB0aGUgTklDLgorICoKKyAqIEB0b2RvIFRoaXMgaGFyZC1jb2RlZCB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBtaWdodCBjaGFuZ2UKKyAqIGluIGZ1dHVyZSBoYXJkd2FyZSByZXZpc2lvbnMuIEFkZCByZXZpc2lvbiBjaGVjay4KKyAqLworI2RlZmluZSBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyAxNgorCisjaWYgKElHQl9UU1lOQ19TQ0FMRSAqIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTKSA+PSAoMTw8MjQpCisjIGVycm9yIElHQl9UU1lOQ19TQ0FMRSBhbmQvb3IgSUdCX1RTWU5DX0NZQ0xFX1RJTUVfSU5fTkFOT1NFQ09ORFMgYXJlIHRvbyBsYXJnZSB0byBmaXQgaW50byBUSU1JTkNBCisjZW5kaWYKKworLyoqCisgKiBpZ2JfcmVhZF9jbG9jayAtIHJlYWQgcmF3IGN5Y2xlIGNvdW50ZXIgKHRvIGJlIHVzZWQgYnkgdGltZSBjb3VudGVyKQorICovCitzdGF0aWMgY3ljbGVfdCBpZ2JfcmVhZF9jbG9jayhjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICp0YykKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2YodGMsIHN0cnVjdCBpZ2JfYWRhcHRlciwgY3ljbGVzKTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXU2NCBzdGFtcDsKKworCXN0YW1wID0gIHJkMzIoRTEwMDBfU1lTVElNTCk7CisJc3RhbXAgfD0gKHU2NClyZDMyKEUxMDAwX1NZU1RJTUgpIDw8IDMyVUxMOworCisJcmV0dXJuIHN0YW1wOworfQorCiAjaWZkZWYgREVCVUcKIC8qKgogICogaWdiX2dldF9od19kZXZfbmFtZSAtIHJldHVybiBkZXZpY2UgbmFtZSBzdHJpbmcKQEAgLTE4OCw5ICsyNTEsNDQgQEAKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKIAlyZXR1cm4gYWRhcHRlci0+bmV0ZGV2LT5uYW1lOwogfQorCisvKioKKyAqIGlnYl9nZXRfdGltZV9zdHIgLSBmb3JtYXQgY3VycmVudCBOSUMgYW5kIHN5c3RlbSB0aW1lIGFzIHN0cmluZworICovCitzdGF0aWMgY2hhciAqaWdiX2dldF90aW1lX3N0cihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICBjaGFyIGJ1ZmZlclsxNjBdKQoreworCWN5Y2xlX3QgaHcgPSBhZGFwdGVyLT5jeWNsZXMucmVhZCgmYWRhcHRlci0+Y3ljbGVzKTsKKwlzdHJ1Y3QgdGltZXNwZWMgbmljID0gbnNfdG9fdGltZXNwZWModGltZWNvdW50ZXJfcmVhZCgmYWRhcHRlci0+Y2xvY2spKTsKKwlzdHJ1Y3QgdGltZXNwZWMgc3lzOworCXN0cnVjdCB0aW1lc3BlYyBkZWx0YTsKKwlnZXRuc3RpbWVvZmRheSgmc3lzKTsKKworCWRlbHRhID0gdGltZXNwZWNfc3ViKG5pYywgc3lzKTsKKworCXNwcmludGYoYnVmZmVyLAorCQkiSFcgJWxsdSwgTklDICVsZC4lMDlsdXMsIFNZUyAlbGQuJTA5bHVzLCBOSUMtU1lTICVsZHMgKyAlMDlsdW5zIiwKKwkJaHcsCisJCShsb25nKW5pYy50dl9zZWMsIG5pYy50dl9uc2VjLAorCQkobG9uZylzeXMudHZfc2VjLCBzeXMudHZfbnNlYywKKwkJKGxvbmcpZGVsdGEudHZfc2VjLCBkZWx0YS50dl9uc2VjKTsKKworCXJldHVybiBidWZmZXI7Cit9CiAjZW5kaWYKIAogLyoqCisgKiBpZ2JfZGVzY191bnVzZWQgLSBjYWxjdWxhdGUgaWYgd2UgaGF2ZSB1bnVzZWQgZGVzY3JpcHRvcnMKKyAqKi8KK3N0YXRpYyBpbnQgaWdiX2Rlc2NfdW51c2VkKHN0cnVjdCBpZ2JfcmluZyAqcmluZykKK3sKKwlpZiAocmluZy0+bmV4dF90b19jbGVhbiA+IHJpbmctPm5leHRfdG9fdXNlKQorCQlyZXR1cm4gcmluZy0+bmV4dF90b19jbGVhbiAtIHJpbmctPm5leHRfdG9fdXNlIC0gMTsKKworCXJldHVybiByaW5nLT5jb3VudCArIHJpbmctPm5leHRfdG9fY2xlYW4gLSByaW5nLT5uZXh0X3RvX3VzZSAtIDE7Cit9CisKKy8qKgogICogaWdiX2luaXRfbW9kdWxlIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCiAgKgogICogaWdiX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKQEAgLTI0Myw2ICszNDEsNyBAQAogc3RhdGljIHZvaWQgaWdiX2NhY2hlX3JpbmdfcmVnaXN0ZXIoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOworCXVuc2lnbmVkIGludCByYmFzZV9vZmZzZXQgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzY6CkBAIC0yNTIsOSArMzUxLDExIEBACiAJCSAqIGFuZCBjb250aW51ZSBjb25zdW1pbmcgcXVldWVzIGluIHRoZSBzYW1lIHNlcXVlbmNlCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gUV9JRFhfODI1NzYoaSk7CisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKworCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUV9JRFhfODI1NzYoaSk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBRX0lEWF84MjU3NihpKTsKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihpKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NToKIAlkZWZhdWx0OgpAQCAtMzU0LDcgKzQ1NSw3IEBACiAJCSAgIGEgdmVjdG9yIG51bWJlciBhbG9uZyB3aXRoIGEgInZhbGlkIiBiaXQuICBTYWRseSwgdGhlIGxheW91dAogCQkgICBvZiB0aGUgdGFibGUgaXMgc29tZXdoYXQgY291bnRlcmludHVpdGl2ZS4gKi8KIAkJaWYgKHJ4X3F1ZXVlID4gSUdCX04wX1FVRVVFKSB7Ci0JCQlpbmRleCA9IChyeF9xdWV1ZSA+PiAxKTsKKwkJCWluZGV4ID0gKHJ4X3F1ZXVlID4+IDEpICsgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAkJCWl2YXIgPSBhcnJheV9yZDMyKEUxMDAwX0lWQVIwLCBpbmRleCk7CiAJCQlpZiAocnhfcXVldWUgJiAweDEpIHsKIAkJCQkvKiB2ZWN0b3IgZ29lcyBpbnRvIHRoaXJkIGJ5dGUgb2YgcmVnaXN0ZXIgKi8KQEAgLTM2OSw3ICs0NzAsNyBAQAogCQkJYXJyYXlfd3IzMihFMTAwMF9JVkFSMCwgaW5kZXgsIGl2YXIpOwogCQl9CiAJCWlmICh0eF9xdWV1ZSA+IElHQl9OMF9RVUVVRSkgewotCQkJaW5kZXggPSAodHhfcXVldWUgPj4gMSk7CisJCQlpbmRleCA9ICh0eF9xdWV1ZSA+PiAxKSArIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAJCQlpdmFyID0gYXJyYXlfcmQzMihFMTAwMF9JVkFSMCwgaW5kZXgpOwogCQkJaWYgKHR4X3F1ZXVlICYgMHgxKSB7CiAJCQkJLyogdmVjdG9yIGdvZXMgaW50byBoaWdoIGJ5dGUgb2YgcmVnaXN0ZXIgKi8KQEAgLTQwNyw3ICs1MDgsNyBAQAogCQkvKiBUdXJuIG9uIE1TSS1YIGNhcGFiaWxpdHkgZmlyc3QsIG9yIG91ciBzZXR0aW5ncwogCQkgKiB3b24ndCBzdGljay4gIEFuZCBpdCB3aWxsIHRha2UgZGF5cyB0byBkZWJ1Zy4gKi8KIAkJd3IzMihFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8Ci0JCQkJICAgRTEwMDBfR1BJRV9QQkEgfCBFMTAwMF9HUElFX0VJQU1FIHwgCisJCQkJICAgRTEwMDBfR1BJRV9QQkEgfCBFMTAwMF9HUElFX0VJQU1FIHwKICAJCQkJICAgRTEwMDBfR1BJRV9OU0lDUik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CkBAIC01MDYsOSArNjA3LDYgQEAKIAkJCWdvdG8gb3V0OwogCQlyaW5nLT5pdHJfcmVnaXN0ZXIgPSBFMTAwMF9FSVRSKDApICsgKHZlY3RvciA8PCAyKTsKIAkJcmluZy0+aXRyX3ZhbCA9IGFkYXB0ZXItPml0cjsKLQkJLyogb3ZlcndyaXRlIHRoZSBwb2xsIHJvdXRpbmUgZm9yIE1TSVgsIHdlJ3ZlIGFscmVhZHkgZG9uZQotCQkgKiBuZXRpZl9uYXBpX2FkZCAqLwotCQlyaW5nLT5uYXBpLnBvbGwgPSAmaWdiX2NsZWFuX3J4X3JpbmdfbXNpeDsKIAkJdmVjdG9yKys7CiAJfQogCkBAIC01NDYsNiArNjQ0LDExIEBACiAJaW50IGVycjsKIAlpbnQgbnVtdmVjcywgaTsKIAorCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzLiAqLworCS8qIEhhdmluZyBtb3JlIHF1ZXVlcyB0aGFuIENQVXMgZG9lc24ndCBtYWtlIHNlbnNlLiAqLworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBtaW5fdCh1MzIsIElHQl9NQVhfUlhfUVVFVUVTLCBudW1fb25saW5lX2NwdXMoKSk7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9UWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwogCW51bXZlY3MgPSBhZGFwdGVyLT5udW1fdHhfcXVldWVzICsgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyArIDE7CiAJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0ga2NhbGxvYyhudW12ZWNzLCBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLAogCQkJCQlHRlBfS0VSTkVMKTsKQEAgLTY4Nyw3ICs3OTAsMTAgQEAKIAkJd3IzMihFMTAwMF9FSUFDLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKIAkJd3IzMihFMTAwMF9FSUFNLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKIAkJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKLQkJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MpOworCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCXdyMzIoRTEwMDBfTUJWRklNUiwgMHhGRik7CisJCXdyMzIoRTEwMDBfSU1TLCAoRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19WTU1CIHwKKwkJICAgICAgICAgICAgICAgICBFMTAwMF9JTVNfRE9VVFNZTkMpKTsKIAl9IGVsc2UgewogCQl3cjMyKEUxMDAwX0lNUywgSU1TX0VOQUJMRV9NQVNLKTsKIAkJd3IzMihFMTAwMF9JQU0sIElNU19FTkFCTEVfTUFTSyk7CkBAIC03NzgsMTIgKzg4NCwxMiBAQAogCiAJaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUoJmFkYXB0ZXItPmh3KTsKIAotCS8qIGNhbGwgSUdCX0RFU0NfVU5VU0VEIHdoaWNoIGFsd2F5cyBsZWF2ZXMKKwkvKiBjYWxsIGlnYl9kZXNjX3VudXNlZCB3aGljaCBhbHdheXMgbGVhdmVzCiAJICogYXQgbGVhc3QgMSBkZXNjcmlwdG9yIHVudXNlZCB0byBtYWtlIHN1cmUKIAkgKiBuZXh0X3RvX3VzZSAhPSBuZXh0X3RvX2NsZWFuICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKLQkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJpbmcsIElHQl9ERVNDX1VOVVNFRChyaW5nKSk7CisJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyaW5nLCBpZ2JfZGVzY191bnVzZWQocmluZykpOwogCX0KIAogCkBAIC04MTEsNiArOTE3LDEwIEBACiAJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKIAkJaWdiX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOwogCisJaWdiX3ZtbV9jb250cm9sKGFkYXB0ZXIpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOworCWlnYl9zZXRfdm1vbHIoaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpOworCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gKi8KIAlyZDMyKEUxMDAwX0lDUik7CiAJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CkBAIC04NTYsNiArOTY2LDEwIEBACiAKIAluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IGFkYXB0ZXItPnR4X3F1ZXVlX2xlbjsKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCisJLyogcmVjb3JkIHRoZSBzdGF0cyBiZWZvcmUgcmVzZXQqLworCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CisKIAlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKIAlhZGFwdGVyLT5saW5rX2R1cGxleCA9IDA7CiAKQEAgLTg4NiwxMSArMTAwMCwxNCBAQAogCS8qIFJlcGFydGl0aW9uIFBiYSBmb3IgZ3JlYXRlciB0aGFuIDlrIG10dQogCSAqIFRvIHRha2UgZWZmZWN0IENUUkwuUlNUIGlzIHJlcXVpcmVkLgogCSAqLwotCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzYpIHsKLQlwYmEgPSBFMTAwMF9QQkFfMzRLOwotCX0KLQllbHNlIHsKKwlzd2l0Y2ggKG1hYy0+dHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzY6CiAJCXBiYSA9IEUxMDAwX1BCQV82NEs7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzU6CisJZGVmYXVsdDoKKwkJcGJhID0gRTEwMDBfUEJBXzM0SzsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKChhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA+IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgJiYKQEAgLTkxMiw3ICsxMDI5LDcgQEAKIAkJLyogdGhlIHR4IGZpZm8gYWxzbyBzdG9yZXMgMTYgYnl0ZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR4CiAJCSAqIGJ1dCBkb24ndCBpbmNsdWRlIGV0aGVybmV0IEZDUyBiZWNhdXNlIGhhcmR3YXJlIGFwcGVuZHMgaXQgKi8KIAkJbWluX3R4X3NwYWNlID0gKGFkYXB0ZXItPm1heF9mcmFtZV9zaXplICsKLQkJCQlzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpIC0KKwkJCQlzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpIC0KIAkJCQlFVEhfRkNTX0xFTikgKiAyOwogCQltaW5fdHhfc3BhY2UgPSBBTElHTihtaW5fdHhfc3BhY2UsIDEwMjQpOwogCQltaW5fdHhfc3BhY2UgPj49IDEwOwpAQCAtOTU2LDYgKzEwNzMsMjAgQEAKIAlmYy0+c2VuZF94b24gPSAxOwogCWZjLT50eXBlID0gZmMtPm9yaWdpbmFsX3R5cGU7CiAKKwkvKiBkaXNhYmxlIHJlY2VpdmUgZm9yIGFsbCBWRnMgYW5kIHdhaXQgb25lIHNlY29uZCAqLworCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwIDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykKKwkJCWFkYXB0ZXItPnZmX2RhdGFbaV0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCisJCS8qIHBpbmcgYWxsIHRoZSBhY3RpdmUgdmZzIHRvIGxldCB0aGVtIGtub3cgd2UgYXJlIGdvaW5nIGRvd24gKi8KKwkJCWlnYl9waW5nX2FsbF92ZnMoYWRhcHRlcik7CisKKwkJLyogZGlzYWJsZSB0cmFuc21pdHMgYW5kIHJlY2VpdmVzICovCisJCXdyMzIoRTEwMDBfVkZSRSwgMCk7CisJCXdyMzIoRTEwMDBfVkZURSwgMCk7CisJfQorCiAJLyogQWxsb3cgdGltZSBmb3IgcGVuZGluZyBtYXN0ZXIgcmVxdWVzdHMgdG8gcnVuICovCiAJYWRhcHRlci0+aHcubWFjLm9wcy5yZXNldF9odygmYWRhcHRlci0+aHcpOwogCXdyMzIoRTEwMDBfV1VDLCAwKTsKQEAgLTk3MiwyMSArMTEwMyw2IEBACiAJaWdiX2dldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOwogfQogCi0vKioKLSAqIGlnYl9pc19uZWVkX2lvcG9ydCAtIGRldGVybWluZSBpZiBhbiBhZGFwdGVyIG5lZWRzIGlvcG9ydCByZXNvdXJjZXMgb3Igbm90Ci0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgYW4gYWRhcHRlciBuZWVkcyBpb3BvcnQgcmVzb3VyY2VzCi0gKiovCi1zdGF0aWMgaW50IGlnYl9pc19uZWVkX2lvcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewotCS8qIEN1cnJlbnRseSB0aGVyZSBhcmUgbm8gYWRhcHRlcnMgdGhhdCBuZWVkIGlvcG9ydCByZXNvdXJjZXMgKi8KLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlnYl9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiAJCT0gaWdiX29wZW4sCiAJLm5kb19zdG9wCQk9IGlnYl9jbG9zZSwKQEAgLTEwMjMsMjQgKzExMzksMTQgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3OwotCXN0cnVjdCBwY2lfZGV2ICp1c19kZXY7CiAJY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmVpID0gaWdiX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47Ci0JaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYywgcG9zOwotCXUxNiBlZXByb21fZGF0YSA9IDAsIHN0YXRlID0gMDsKKwlpbnQgZXJyLCBwY2lfdXNpbmdfZGFjOworCXUxNiBlZXByb21fZGF0YSA9IDA7CiAJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBJR0JfRUVQUk9NX0FQTUU7CiAJdTMyIHBhcnRfbnVtOwotCWludCBiYXJzLCBuZWVkX2lvcG9ydDsKIAotCS8qIGRvIG5vdCBhbGxvY2F0ZSBpb3BvcnQgYmFycyB3aGVuIG5vdCBuZWVkZWQgKi8KLQluZWVkX2lvcG9ydCA9IGlnYl9pc19uZWVkX2lvcG9ydChwZGV2KTsKLQlpZiAobmVlZF9pb3BvcnQpIHsKLQkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfSU8pOwotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQl9IGVsc2UgewotCQliYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwotCX0KKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA2MiwyOCArMTE2OCw5IEBACiAJCX0KIAl9CiAKLQkvKiA4MjU3NSByZXF1aXJlcyB0aGF0IHRoZSBwY2ktZSBsaW5rIHBhcnRuZXIgZGlzYWJsZSB0aGUgTDBzIHN0YXRlICovCi0Jc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUjoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUzoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSOgotCQl1c19kZXYgPSBwZGV2LT5idXMtPnNlbGY7Ci0JCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkodXNfZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7Ci0JCWlmIChwb3MpIHsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHVzX2RldiwgcG9zICsgUENJX0VYUF9MTktDVEwsCi0JCQkgICAgICAgICAgICAgICAgICAgICAmc3RhdGUpOwotCQkJc3RhdGUgJj0gflBDSUVfTElOS19TVEFURV9MMFM7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodXNfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSk7Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LAotCQkJCSAiRGlzYWJsaW5nIEFTUE0gTDBzIHVwc3RyZWFtIHN3aXRjaCBwb3J0ICVzXG4iLAotCQkJCSBwY2lfbmFtZSh1c19kZXYpKTsKLQkJfQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycywgaWdiX2RyaXZlcl9uYW1lKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdiX2RyaXZlcl9uYW1lKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wY2lfcmVnOwogCkBAIC0xMDk4LDcgKzExODUsOCBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJZXJyID0gLUVOT01FTTsKLQluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGlnYl9hZGFwdGVyKSwgSUdCX01BWF9UWF9RVUVVRVMpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaWdiX2FkYXB0ZXIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIElHQl9BQlNfTUFYX1RYX1FVRVVFUyk7CiAJaWYgKCFuZXRkZXYpCiAJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OwogCkBAIC0xMTExLDE1ICsxMTk5LDEzIEBACiAJaHcgPSAmYWRhcHRlci0+aHc7CiAJaHctPmJhY2sgPSBhZGFwdGVyOwogCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFOwotCWFkYXB0ZXItPmJhcnMgPSBiYXJzOwotCWFkYXB0ZXItPm5lZWRfaW9wb3J0ID0gbmVlZF9pb3BvcnQ7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAogCWVyciA9IC1FSU87Ci0JYWRhcHRlci0+aHcuaHdfYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOwotCWlmICghYWRhcHRlci0+aHcuaHdfYWRkcikKKwlody0+aHdfYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghaHctPmh3X2FkZHIpCiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmaWdiX25ldGRldl9vcHM7CkBAIC0xMTQ3LDggKzEyMzMsOSBAQAogCS8qIEluaXRpYWxpemUgc2tldy1zcGVjaWZpYyBjb25zdGFudHMgKi8KIAllcnIgPSBlaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2h3X2luaXQ7CisJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAllcnIgPSBpZ2Jfc3dfaW5pdChhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zd19pbml0OwpAQCAtMTE4MCwyNyArMTI2NywyNSBAQAogCQkJIlBIWSByZXNldCBpcyBibG9ja2VkIGR1ZSB0byBTT0wvSURFUiBzZXNzaW9uLlxuIik7CiAKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8Ci0JCQkgICBORVRJRl9GX0hXX0NTVU0gfAorCQkJICAgTkVUSUZfRl9JUF9DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9UWCB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fUlggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLSNlbmRpZgorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CiAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIAlhZGFwdGVyLT5lbl9tbmdfcHQgPSBpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoJmFkYXB0ZXItPmh3KTsKIAogCS8qIGJlZm9yZSByZWFkaW5nIHRoZSBOVk0sIHJlc2V0IHRoZSBjb250cm9sbGVyIHRvIHB1dCB0aGUgZGV2aWNlIGluIGEKQEAgLTEyMjcsMjUgKzEzMTIsMTUgQEAKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZpZ2Jfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOwotCi0JaW5pdF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIpOwotCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmZ1bmN0aW9uID0gJmlnYl91cGRhdGVfcGh5X2luZm87Ci0JYWRhcHRlci0+cGh5X2luZm9fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgJmlnYl93YXRjaGRvZywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CisJc2V0dXBfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLCAmaWdiX3VwZGF0ZV9waHlfaW5mbywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGlnYl9yZXNldF90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIGlnYl93YXRjaGRvZ190YXNrKTsKIAotCS8qIEluaXRpYWxpemUgbGluayAmIHJpbmcgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VyLWNoYW5nZWFibGUgKi8KLQlhZGFwdGVyLT50eF9yaW5nLT5jb3VudCA9IDI1NjsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQ7Ci0JYWRhcHRlci0+cnhfcmluZy0+Y291bnQgPSAyNTY7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IGFkYXB0ZXItPnJ4X3JpbmctPmNvdW50OwotCisJLyogSW5pdGlhbGl6ZSBsaW5rIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlci1jaGFuZ2VhYmxlICovCiAJYWRhcHRlci0+ZmNfYXV0b25lZyA9IHRydWU7CiAJaHctPm1hYy5hdXRvbmVnID0gdHJ1ZTsKIAlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IDB4MmY7CkBAIC0xMjUzLDcgKzEzMjgsNyBAQAogCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKIAlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAKLQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDM7CisJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBJR0JfREVGQVVMVF9JVFI7CiAJYWRhcHRlci0+aXRyID0gSUdCX1NUQVJUX0lUUjsKIAogCWlnYl92YWxpZGF0ZV9tZGlfc2V0dGluZyhodyk7CkBAIC0xMjY0LDEwICsxMzM5LDEwIEBACiAJICogZW5hYmxlIHRoZSBBQ1BJIE1hZ2ljIFBhY2tldCBmaWx0ZXIKIAkgKi8KIAotCWlmIChody0+YnVzLmZ1bmMgPT0gMCB8fAotCSAgICBody0+ZGV2aWNlX2lkID09IEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUikKLQkJaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSwgMSwKLQkJCQkgICAgICZlZXByb21fZGF0YSk7CisJaWYgKGh3LT5idXMuZnVuYyA9PSAwKQorCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EsIDEsICZlZXByb21fZGF0YSk7CisJZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IDEpCisJCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQiwgMSwgJmVlcHJvbV9kYXRhKTsKIAogCWlmIChlZXByb21fZGF0YSAmIGVlcHJvbV9hcG1lX21hc2spCiAJCWFkYXB0ZXItPmVlcHJvbV93b2wgfD0gRTEwMDBfV1VGQ19NQUc7CkBAIC0xMjg3LDYgKzEzNjIsMTYgQEAKIAkJaWYgKHJkMzIoRTEwMDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCiAJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIGlmIHF1YWQgcG9ydCBhZGFwdGVyLCBkaXNhYmxlIFdvTCBvbiBhbGwgYnV0IHBvcnQgQSAqLworCQlpZiAoZ2xvYmFsX3F1YWRfcG9ydF9hICE9IDApCisJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKKwkJZWxzZQorCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfUVVBRF9QT1JUX0E7CisJCS8qIFJlc2V0IGZvciBtdWx0aXBsZSBxdWFkIHBvcnQgYWRhcHRlcnMgKi8KKwkJaWYgKCsrZ2xvYmFsX3F1YWRfcG9ydF9hID09IDQpCisJCQlnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOworCQlicmVhazsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3b2wgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGVlcHJvbSBzZXR0aW5ncyAqLwpAQCAtMTMwOSwxNyArMTM5NCw4MiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiBzaW5jZSBpb3YgZnVuY3Rpb25hbGl0eSBpc24ndCBjcml0aWNhbCB0byBiYXNlIGRldmljZSBmdW5jdGlvbiB3ZQorCSAqIGNhbiBhY2NlcHQgZmFpbHVyZS4gIElmIGl0IGZhaWxzIHdlIGRvbid0IGFsbG93IGlvdiB0byBiZSBlbmFibGVkICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQllcnIgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIDApOworCQlpZiAoIWVycikKKwkJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV0ZGV2LT5kZXYsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJmRldl9hdHRyX251bV92ZnMpOworCQlpZiAoZXJyKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgSU9WXG4iKTsKKwl9CisKKyNlbmRpZgogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEQ0EgZW5hYmxlZFxuIik7CiAJCS8qIEFsd2F5cyB1c2UgQ0IyIG1vZGUsIGRpZmZlcmVuY2UgaXMgbWFza2VkCiAJCSAqIGluIHRoZSBDQiBkcml2ZXIuICovCi0JCXdyMzIoRTEwMDBfRENBX0NUUkwsIDIpOworCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjIpOwogCQlpZ2Jfc2V0dXBfZGNhKGFkYXB0ZXIpOwogCX0KICNlbmRpZgogCisJLyoKKwkgKiBJbml0aWFsaXplIGhhcmR3YXJlIHRpbWVyOiB3ZSBrZWVwIGl0IHJ1bm5pbmcganVzdCBpbiBjYXNlCisJICogdGhhdCBzb21lIHByb2dyYW0gbmVlZHMgaXQgbGF0ZXIgb24uCisJICovCisJbWVtc2V0KCZhZGFwdGVyLT5jeWNsZXMsIDAsIHNpemVvZihhZGFwdGVyLT5jeWNsZXMpKTsKKwlhZGFwdGVyLT5jeWNsZXMucmVhZCA9IGlnYl9yZWFkX2Nsb2NrOworCWFkYXB0ZXItPmN5Y2xlcy5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCk7CisJYWRhcHRlci0+Y3ljbGVzLm11bHQgPSAxOworCWFkYXB0ZXItPmN5Y2xlcy5zaGlmdCA9IElHQl9UU1lOQ19TSElGVDsKKwl3cjMyKEUxMDAwX1RJTUlOQ0EsCisJICAgICAoMTw8MjQpIHwKKwkgICAgIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTICogSUdCX1RTWU5DX1NDQUxFKTsKKyNpZiAwCisJLyoKKwkgKiBBdm9pZCByb2xsb3ZlciB3aGlsZSB3ZSBpbml0aWFsaXplIGJ5IHJlc2V0dGluZyB0aGUgdGltZSBjb3VudGVyLgorCSAqLworCXdyMzIoRTEwMDBfU1lTVElNTCwgMHgwMDAwMDAwMCk7CisJd3IzMihFMTAwMF9TWVNUSU1ILCAweDAwMDAwMDAwKTsKKyNlbHNlCisJLyoKKwkgKiBTZXQgcmVnaXN0ZXJzIHNvIHRoYXQgcm9sbG92ZXIgb2NjdXJzIHNvb24gdG8gdGVzdCB0aGlzLgorCSAqLworCXdyMzIoRTEwMDBfU1lTVElNTCwgMHgwMDAwMDAwMCk7CisJd3IzMihFMTAwMF9TWVNUSU1ILCAweEZGODAwMDAwKTsKKyNlbmRpZgorCXdyZmwoKTsKKwl0aW1lY291bnRlcl9pbml0KCZhZGFwdGVyLT5jbG9jaywKKwkJCSAmYWRhcHRlci0+Y3ljbGVzLAorCQkJIGt0aW1lX3RvX25zKGt0aW1lX2dldF9yZWFsKCkpKTsKKworCS8qCisJICogU3luY2hyb25pemUgb3VyIE5JQyBjbG9jayBhZ2FpbnN0IHN5c3RlbSB3YWxsIGNsb2NrLiBOSUMKKwkgKiB0aW1lIHN0YW1wIHJlYWRpbmcgcmVxdWlyZXMgfjN1cyBwZXIgc2FtcGxlLCBlYWNoIHNhbXBsZQorCSAqIHdhcyBwcmV0dHkgc3RhYmxlIGV2ZW4gdW5kZXIgbG9hZCA9PiBvbmx5IHJlcXVpcmUgMTAKKwkgKiBzYW1wbGVzIGZvciBlYWNoIG9mZnNldCBjb21wYXJpc29uLgorCSAqLworCW1lbXNldCgmYWRhcHRlci0+Y29tcGFyZSwgMCwgc2l6ZW9mKGFkYXB0ZXItPmNvbXBhcmUpKTsKKwlhZGFwdGVyLT5jb21wYXJlLnNvdXJjZSA9ICZhZGFwdGVyLT5jbG9jazsKKwlhZGFwdGVyLT5jb21wYXJlLnRhcmdldCA9IGt0aW1lX2dldF9yZWFsOworCWFkYXB0ZXItPmNvbXBhcmUubnVtX3NhbXBsZXMgPSAxMDsKKwl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIDApOworCisjaWZkZWYgREVCVUcKKwl7CisJCWNoYXIgYnVmZmVyWzE2MF07CisJCXByaW50ayhLRVJOX0RFQlVHCisJCQkiaWdiOiAlczogaHcgJXAgaW5pdGlhbGl6ZWQgdGltZXJcbiIsCisJCQlpZ2JfZ2V0X3RpbWVfc3RyKGFkYXB0ZXIsIGJ1ZmZlciksCisJCQkmYWRhcHRlci0+aHcpOworCX0KKyNlbmRpZgorCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTmV0d29yayBDb25uZWN0aW9uXG4iKTsKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiAoUENJZTolczolcykgJXBNXG4iLApAQCAtMTM1MiwxNSArMTUwMiwxNCBAQAogCWlmIChody0+Zmxhc2hfYWRkcmVzcykKIAkJaW91bm1hcChody0+Zmxhc2hfYWRkcmVzcyk7CiAKLQlpZ2JfcmVtb3ZlX2RldmljZShodyk7CiAJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOwogZXJyX3N3X2luaXQ6Ci1lcnJfaHdfaW5pdDoKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiBlcnJfYWxsb2NfZXRoZXJkZXY6Ci0JcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBiYXJzKTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pKTsKIGVycl9wY2lfcmVnOgogZXJyX2RtYToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0xMzgwLDkgKzE1MjksNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLSNpZmRlZiBDT05GSUdfSUdCX0RDQQogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0jZW5kaWYKIAlpbnQgZXJyOwogCiAJLyogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC0xMzk4LDcgKzE1NDUsNyBAQAogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKIAkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoJnBkZXYtPmRldik7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKLQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgMSk7CisJCXdyMzIoRTEwMDBfRENBX0NUUkwsIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0RJU0FCTEUpOwogCX0KICNlbmRpZgogCkBAIC0xNDExLDE1ICsxNTU4LDI5IEBACiAJaWYgKCFpZ2JfY2hlY2tfcmVzZXRfYmxvY2soJmFkYXB0ZXItPmh3KSkKIAkJaWdiX3Jlc2V0X3BoeSgmYWRhcHRlci0+aHcpOwogCi0JaWdiX3JlbW92ZV9kZXZpY2UoJmFkYXB0ZXItPmh3KTsKIAlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CiAKIAlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CiAKLQlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwotCWlmIChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQotCQlpb3VubWFwKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpOwotCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYWRhcHRlci0+YmFycyk7CisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiByZWNsYWltIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gVkZzICovCisJaWYgKGFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJLyogZGlzYWJsZSBpb3YgYW5kIGFsbG93IHRpbWUgZm9yIHRyYW5zYWN0aW9ucyB0byBjbGVhciAqLworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJbXNsZWVwKDUwMCk7CisKKwkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOworCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCW1zbGVlcCgxMDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSU9WIERpc2FibGVkXG4iKTsKKwl9CisjZW5kaWYKKwlpb3VubWFwKGh3LT5od19hZGRyKTsKKwlpZiAoaHctPmZsYXNoX2FkZHJlc3MpCisJCWlvdW5tYXAoaHctPmZsYXNoX2FkZHJlc3MpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgcGNpX3NlbGVjdF9iYXJzKHBkZXYsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1JFU09VUkNFX01FTSkpOwogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMTQ1NCwxMSArMTYxNSw2IEBACiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAJYWRhcHRlci0+bWluX2ZyYW1lX3NpemUgPSBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMuICovCi0JLyogSGF2aW5nIG1vcmUgcXVldWVzIHRoYW4gQ1BVcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuICovCi0JYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1RYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOwotCiAJLyogVGhpcyBjYWxsIG1heSBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBkZXBlbmRpbmcgb24KIAkgKiBpbnRlcnJ1cHQgbW9kZS4gKi8KIAlpZ2Jfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwpAQCAtMTUyMSw2ICsxNjc3LDEwIEBACiAJICogY2xlYW5fcnggaGFuZGxlciBiZWZvcmUgd2UgZG8gc28uICAqLwogCWlnYl9jb25maWd1cmUoYWRhcHRlcik7CiAKKwlpZ2Jfdm1tX2NvbnRyb2woYWRhcHRlcik7CisJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CisJaWdiX3NldF92bW9scihodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisKIAllcnIgPSBpZ2JfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVxX2lycTsKQEAgLTE1OTYsNyArMTc1Niw2IEBACiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotCiBpbnQgaWdiX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7CkBAIC0xNjEwLDcgKzE3NjksNyBAQAogCW1lbXNldCh0eF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCi0JdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLApAQCAtMTY1Nyw3ICsxODE2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSUdCX01BWF9UWF9RVUVVRVM7IGkrKykgewogCQlyX2lkeCA9IGkgJSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOwogCQlhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtpXSA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKLQl9CQorCX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjc2LDEzICsxODM1LDEzIEBACiAJaW50IGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW2ldOwogCQlqID0gcmluZy0+cmVnX2lkeDsKIAkJd3IzMihFMTAwMF9URExFTihqKSwKLQkJCQlyaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOworCQkgICAgIHJpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjKSk7CiAJCXRkYmEgPSByaW5nLT5kbWE7CiAJCXdyMzIoRTEwMDBfVERCQUwoaiksCi0JCQkJdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CisJCSAgICAgdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CiAJCXdyMzIoRTEwMDBfVERCQUgoaiksIHRkYmEgPj4gMzIpOwogCiAJCXJpbmctPmhlYWQgPSBFMTAwMF9UREgoaik7CkBAIC0xNzAyLDEyICsxODYxLDExIEBACiAJCXdyMzIoRTEwMDBfRENBX1RYQ1RSTChqKSwgdHhjdHJsKTsKIAl9CiAKLQotCi0JLyogVXNlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFR4IEludGVyIFBhY2tldCBHYXAgKElQRykgdGltZXIgKi8KKwkvKiBkaXNhYmxlIHF1ZXVlIDAgdG8gcHJldmVudCB0YWlsIGJ1bXAgdy9vIHJlLWNvbmZpZ3VyYXRpb24gKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJd3IzMihFMTAwMF9UWERDVEwoMCksIDApOwogCiAJLyogUHJvZ3JhbSB0aGUgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciAqLwotCiAJdGN0bCA9IHJkMzIoRTEwMDBfVENUTCk7CiAJdGN0bCAmPSB+RTEwMDBfVENUTF9DVDsKIAl0Y3RsIHw9IEUxMDAwX1RDVExfUFNQIHwgRTEwMDBfVENUTF9SVExDIHwKQEAgLTE3MzEsMjEgKzE4ODksMTIgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotCiBpbnQgaWdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplLCBkZXNjX2xlbjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIE1BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gdm1hbGxvYyhzaXplKTsKLQlpZiAoIXJ4X3JpbmctPmxyb19tZ3IubHJvX2FycikKLQkJZ290byBlcnI7Ci0JbWVtc2V0KHJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciwgMCwgc2l6ZSk7Ci0jZW5kaWYKLQogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJcnhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+YnVmZmVyX2luZm8pCkBAIC0xNzcyLDEwICsxOTIxLDYgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotI2VuZGlmCiAJdmZyZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOwogCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKIAkJInRoZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ1xuIik7CkBAIC0xODI0LDEzICsxOTY5LDEzIEBACiAJcmN0bCAmPSB+KEUxMDAwX1JDVExfTEJNX1RDVlIgfCBFMTAwMF9SQ1RMX0xCTV9NQUMpOwogCiAJcmN0bCB8PSBFMTAwMF9SQ1RMX0VOIHwgRTEwMDBfUkNUTF9CQU0gfCBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgfAotCQkoYWRhcHRlci0+aHcubWFjLm1jX2ZpbHRlcl90eXBlIDw8IEUxMDAwX1JDVExfTU9fU0hJRlQpOworCQkoaHctPm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAogCS8qCiAJICogZW5hYmxlIHN0cmlwcGluZyBvZiBDUkMuIEl0J3MgdW5saWtlbHkgdGhpcyB3aWxsIGJyZWFrIEJNQwogCSAqIHJlZGlyZWN0aW9uIGFzIGl0IGRpZCB3aXRoIGUxMDAwLiBOZXdlciBmZWF0dXJlcyByZXF1aXJlCiAJICogdGhhdCB0aGUgSFcgc3RyaXBzIHRoZSBDUkMuCi0JKi8KKwkgKi8KIAlyY3RsIHw9IEUxMDAwX1JDVExfU0VDUkM7CiAKIAkvKgpAQCAtMTg3NCw2ICsyMDE5LDMwIEBACiAJCXNycmN0bCB8PSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRjsKIAl9CiAKKwkvKiBBdHRlbnRpb24hISEgIEZvciBTUi1JT1YgUEYgZHJpdmVyIG9wZXJhdGlvbnMgeW91IG11c3QgZW5hYmxlCisJICogcXVldWUgZHJvcCBmb3IgYWxsIFZGIGFuZCBQRiBxdWV1ZXMgdG8gcHJldmVudCBoZWFkIG9mIGxpbmUgYmxvY2tpbmcKKwkgKiBpZiBhbiB1bi10cnVzdGVkIFZGIGRvZXMgbm90IHByb3ZpZGUgZGVzY3JpcHRvcnMgdG8gaGFyZHdhcmUuCisJICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKKwkJdTMyIHZtb2xyOworCisJCWogPSBhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHg7CisKKwkJLyogc2V0IGFsbCBxdWV1ZSBkcm9wIGVuYWJsZSBiaXRzICovCisJCXdyMzIoRTEwMDBfUURFLCBBTExfUVVFVUVTKTsKKwkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9EUk9QX0VOOworCisJCS8qIGRpc2FibGUgcXVldWUgMCB0byBwcmV2ZW50IHRhaWwgd3JpdGUgdy9vIHJlLWNvbmZpZyAqLworCQl3cjMyKEUxMDAwX1JYRENUTCgwKSwgMCk7CisKKwkJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKGopKTsKKwkJaWYgKHJjdGwgJiBFMTAwMF9SQ1RMX0xQRSkKKwkJCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX0xQRTsKKwkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAwKQorCQkJdm1vbHIgfD0gRTEwMDBfVk1PTFJfUlNTRTsKKwkJd3IzMihFMTAwMF9WTU9MUihqKSwgdm1vbHIpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKIAkJd3IzMihFMTAwMF9TUlJDVEwoaiksIHNycmN0bCk7CkBAIC0xODgzLDYgKzIwNTIsNTQgQEAKIH0KIAogLyoqCisgKiBpZ2JfcmxwbWxfc2V0IC0gc2V0IG1heGltdW0gcmVjZWl2ZSBwYWNrZXQgc2l6ZQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIG1heGltdW0gcmVjZWl2YWJsZSBwYWNrZXQgc2l6ZS4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9ybHBtbF9zZXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBtYXhfZnJhbWVfc2l6ZSA9IGFkYXB0ZXItPm1heF9mcmFtZV9zaXplOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKKworCWlmIChhZGFwdGVyLT52bGdycCkKKwkJbWF4X2ZyYW1lX3NpemUgKz0gVkxBTl9UQUdfU0laRTsKKworCS8qIGlmIHZmcyBhcmUgZW5hYmxlZCB3ZSBzZXQgUkxQTUwgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgcmVxdWVzdAorCSAqIHNpemUgYW5kIHNldCB0aGUgVk1PTFIgUkxQTUwgdG8gdGhlIHNpemUgd2UgbmVlZCAqLworCWlmIChwZl9pZCkgeworCQlpZ2Jfc2V0X3ZmX3JscG1sKGFkYXB0ZXIsIG1heF9mcmFtZV9zaXplLCBwZl9pZCk7CisJCW1heF9mcmFtZV9zaXplID0gTUFYX1NURF9KVU1CT19GUkFNRV9TSVpFICsgVkxBTl9UQUdfU0laRTsKKwl9CisKKwl3cjMyKEUxMDAwX1JMUE1MLCBtYXhfZnJhbWVfc2l6ZSk7Cit9CisKKy8qKgorICogaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2wgLSBDb25maWd1cmUgVlQgZGVmYXVsdCBwb29sCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgcG9vbAorICoqLworc3RhdGljIHZvaWQgaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2woc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKKwl1MzIgdnRjdGw7CisKKwkvKiBub3QgaW4gc3ItaW92IG1vZGUgLSBkbyBub3RoaW5nICovCisJaWYgKCFwZl9pZCkKKwkJcmV0dXJuOworCisJdnRjdGwgPSByZDMyKEUxMDAwX1ZUX0NUTCk7CisJdnRjdGwgJj0gfihFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX01BU0sgfAorCQkgICBFMTAwMF9WVF9DVExfRElTQUJMRV9ERUZfUE9PTCk7CisJdnRjdGwgfD0gcGZfaWQgPDwgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9TSElGVDsKKwl3cjMyKEUxMDAwX1ZUX0NUTCwgdnRjdGwpOworfQorCisvKioKICAqIGlnYl9jb25maWd1cmVfcnggLSBDb25maWd1cmUgcmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCkBAIC0xODk0LDcgKzIxMTEsNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJjdGwsIHJ4Y3N1bTsKIAl1MzIgcnhkY3RsOwotCWludCBpLCBqOworCWludCBpOwogCiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJjdGwgPSByZDMyKEUxMDAwX1JDVEwpOwpAQCAtMTkwOCwxNCArMjEyNSwxNCBAQAogCS8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kCiAJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwotCQlqID0gcmluZy0+cmVnX2lkeDsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCWludCBqID0gcmluZy0+cmVnX2lkeDsKIAkJcmRiYSA9IHJpbmctPmRtYTsKIAkJd3IzMihFMTAwMF9SREJBTChqKSwKLQkJCQlyZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKKwkJICAgICByZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKIAkJd3IzMihFMTAwMF9SREJBSChqKSwgcmRiYSA+PiAzMik7CiAJCXdyMzIoRTEwMDBfUkRMRU4oaiksCi0JCQkgICAgICAgcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpKTsKKwkJICAgICByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYykpOwogCiAJCXJpbmctPmhlYWQgPSBFMTAwMF9SREgoaik7CiAJCXJpbmctPnRhaWwgPSBFMTAwMF9SRFQoaik7CkBAIC0xOTI5LDE2ICsyMTQ2LDYgQEAKIAkJcnhkY3RsIHw9IElHQl9SWF9IVEhSRVNIIDw8IDg7CiAJCXJ4ZGN0bCB8PSBJR0JfUlhfV1RIUkVTSCA8PCAxNjsKIAkJd3IzMihFMTAwMF9SWERDVEwoaiksIHJ4ZGN0bCk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQkJLyogSW50aXRpYWwgTFJPIFNldHRpbmdzICovCi0JCXJpbmctPmxyb19tZ3IubWF4X2FnZ3IgPSBNQVhfTFJPX0FHR1I7Ci0JCXJpbmctPmxyb19tZ3IubWF4X2Rlc2MgPSBNQVhfTFJPX0RFU0NSSVBUT1JTOwotCQlyaW5nLT5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaWdiX2dldF9za2JfaGRyOwotCQlyaW5nLT5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfTkFQSSB8IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKLQkJcmluZy0+bHJvX21nci5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLSNlbmRpZgogCX0KIAogCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID4gMSkgewpAQCAtMTk2Myw3ICsyMTcwLDEwIEBACiAJCQkJd3JpdGVsKHJldGEuZHdvcmQsCiAJCQkJICAgICAgIGh3LT5od19hZGRyICsgRTEwMDBfUkVUQSgwKSArIChqICYgfjMpKTsKIAkJfQotCQltcnFjID0gRTEwMDBfTVJRQ19FTkFCTEVfUlNTXzRROworCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCW1ycWMgPSBFMTAwMF9NUlFDX0VOQUJMRV9WTURRX1JTU18yUTsKKwkJZWxzZQorCQkJbXJxYyA9IEUxMDAwX01SUUNfRU5BQkxFX1JTU180UTsKIAogCQkvKiBGaWxsIG91dCBoYXNoIGZ1bmN0aW9uIHNlZWRzICovCiAJCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKQpAQCAtMTk4OCwyNyArMjE5OCwyMyBAQAogCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1BDU0Q7CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBtdWx0aS1xdWV1ZSBmb3Igc3ItaW92ICovCisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJd3IzMihFMTAwMF9NUlFDLCBFMTAwMF9NUlFDX0VOQUJMRV9WTURRKTsKIAkJLyogRW5hYmxlIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KIAkJcnhjc3VtID0gcmQzMihFMTAwMF9SWENTVU0pOwotCQlpZiAoYWRhcHRlci0+cnhfY3N1bSkgewotCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTDsKKwkJaWYgKGFkYXB0ZXItPnJ4X2NzdW0pCisJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1RVT0ZMIHwgRTEwMDBfUlhDU1VNX0lQUENTRTsKKwkJZWxzZQorCQkJcnhjc3VtICY9IH4oRTEwMDBfUlhDU1VNX1RVT0ZMIHwgRTEwMDBfUlhDU1VNX0lQUENTRSk7CiAKLQkJCS8qIEVuYWJsZSBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMKLQkJCSAqIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHBhY2tldC1zcGxpdC4gKi8KLQkJCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKLQkJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX0lQUENTRTsKLQkJfSBlbHNlIHsKLQkJCXJ4Y3N1bSAmPSB+RTEwMDBfUlhDU1VNX1RVT0ZMOwotCQkJLyogZG9uJ3QgbmVlZCB0byBjbGVhciBJUFBDU0UgYXMgaXQgZGVmYXVsdHMgdG8gMCAqLwotCQl9CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0KIAotCWlmIChhZGFwdGVyLT52bGdycCkKLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOwotCWVsc2UKLQkJd3IzMihFMTAwMF9STFBNTCwgYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOworCS8qIFNldCB0aGUgZGVmYXVsdCBwb29sIGZvciB0aGUgUEYncyBmaXJzdCBxdWV1ZSAqLworCWlnYl9jb25maWd1cmVfdnRfZGVmYXVsdF9wb29sKGFkYXB0ZXIpOworCisJaWdiX3JscG1sX3NldChhZGFwdGVyKTsKIAogCS8qIEVuYWJsZSBSZWNlaXZlcyAqLwogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CkBAIC0yMDUxLDE0ICsyMjU3LDEwIEBACiBzdGF0aWMgdm9pZCBpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICBzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQlidWZmZXJfaW5mby0+ZG1hLAotCQkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGgsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCX0KKwlidWZmZXJfaW5mby0+ZG1hID0gMDsKIAlpZiAoYnVmZmVyX2luZm8tPnNrYikgeworCQlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGJ1ZmZlcl9pbmZvLT5za2IsCisJCSAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOwogCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAl9CkBAIC0yMTI3LDExICsyMzI5LDYgQEAKIAl2ZnJlZShyeF9yaW5nLT5idWZmZXJfaW5mbyk7CiAJcnhfcmluZy0+YnVmZmVyX2luZm8gPSBOVUxMOwogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7Ci0jZW5kaWYgCi0KIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHJ4X3JpbmctPnNpemUsIHJ4X3JpbmctPmRlc2MsIHJ4X3JpbmctPmRtYSk7CiAKIAlyeF9yaW5nLT5kZXNjID0gTlVMTDsKQEAgLTIyMzEsMTUgKzI0MjgsMTggQEAKIHN0YXRpYyBpbnQgaWdiX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCW1lbWNweShhZGFwdGVyLT5ody5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGh3LT5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlhZGFwdGVyLT5ody5tYWMub3BzLnJhcl9zZXQoJmFkYXB0ZXItPmh3LCBhZGFwdGVyLT5ody5tYWMuYWRkciwgMCk7CisJaHctPm1hYy5vcHMucmFyX3NldChodywgaHctPm1hYy5hZGRyLCAwKTsKKworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjU5LDcgKzI0NTksNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQl1OCAgKm10YV9saXN0OworCXU4ICAqbXRhX2xpc3QgPSBOVUxMOwogCXUzMiByY3RsOwogCWludCBpOwogCkBAIC0yMjgwLDE3ICsyNDgwLDE1IEBACiAJfQogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAKLQlpZiAoIW5ldGRldi0+bWNfY291bnQpIHsKLQkJLyogbm90aGluZyB0byBwcm9ncmFtLCBzbyBjbGVhciBtYyBsaXN0ICovCi0JCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KGh3LCBOVUxMLCAwLCAxLAotCQkJCQkgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKLQkJcmV0dXJuOworCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7CisJCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJCWlmICghbXRhX2xpc3QpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSAgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtdWx0aWNhc3QgZmlsdGVyIGxpc3RcbiIpOworCQkJcmV0dXJuOworCQl9CiAJfQogCi0JbXRhX2xpc3QgPSBremFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlDKTsKLQlpZiAoIW10YV9saXN0KQotCQlyZXR1cm47Ci0KIAkvKiBUaGUgc2hhcmVkIGZ1bmN0aW9uIGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCiAJbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwogCkBAIC0yMzAwLDggKzI0OTgsMTMgQEAKIAkJbWVtY3B5KG10YV9saXN0ICsgKGkqRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCW1jX3B0ciA9IG1jX3B0ci0+bmV4dDsKIAl9Ci0JaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoaHcsIG10YV9saXN0LCBpLCAxLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGksCisJICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDEsCisJICAgICAgICAgICAgICAgICAgICAgICAgbWFjLT5yYXJfZW50cnlfY291bnQpOworCisJaWdiX3NldF9tY19saXN0X3Bvb2xzKGFkYXB0ZXIsIGksIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOworCiAJa2ZyZWUobXRhX2xpc3QpOwogfQogCkBAIC0yMzE0LDYgKzI1MTcsNDYgQEAKIH0KIAogLyoqCisgKiBpZ2JfaGFzX2xpbmsgLSBjaGVjayBzaGFyZWQgY29kZSBmb3IgbGluayBhbmQgZGV0ZXJtaW5lIHVwL2Rvd24KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGRyaXZlciBwcml2YXRlIGluZm8KKyAqKi8KK3N0YXRpYyBib29sIGlnYl9oYXNfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlib29sIGxpbmtfYWN0aXZlID0gZmFsc2U7CisJczMyIHJldF92YWwgPSAwOworCisJLyogZ2V0X2xpbmtfc3RhdHVzIGlzIHNldCBvbiBMU0MgKGxpbmsgc3RhdHVzKSBpbnRlcnJ1cHQgb3IKKwkgKiByeCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQuICBnZXRfbGlua19zdGF0dXMgd2lsbCBzdGF5CisJICogZmFsc2UgdW50aWwgdGhlIGUxMDAwX2NoZWNrX2Zvcl9saW5rIGVzdGFibGlzaGVzIGxpbmsKKwkgKiBmb3IgY29wcGVyIGFkYXB0ZXJzIE9OTFkKKwkgKi8KKwlzd2l0Y2ggKGh3LT5waHkubWVkaWFfdHlwZSkgeworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI6CisJCWlmIChody0+bWFjLmdldF9saW5rX3N0YXR1cykgeworCQkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJCWxpbmtfYWN0aXZlID0gIWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzOworCQl9IGVsc2UgeworCQkJbGlua19hY3RpdmUgPSB0cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKKwkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJbGlua19hY3RpdmUgPSAhIShyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpOworCQlicmVhazsKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgorCQlyZXRfdmFsID0gaHctPm1hYy5vcHMuY2hlY2tfZm9yX2xpbmsoaHcpOworCQlsaW5rX2FjdGl2ZSA9IGh3LT5tYWMuc2VyZGVzX2hhc19saW5rOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV91bmtub3duOgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGlua19hY3RpdmU7Cit9CisKKy8qKgogICogaWdiX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCiAgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCiAgKiovCkBAIC0yMzI5LDM0ICsyNTcyLDE2IEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBpZ2JfYWRhcHRlciwgd2F0Y2hkb2dfdGFzayk7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CiAJdTMyIGxpbms7CiAJdTMyIGVpY3MgPSAwOwotCXMzMiByZXRfdmFsOwogCWludCBpOwogCi0JaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmCi0JICAgIChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKQorCWxpbmsgPSBpZ2JfaGFzX2xpbmsoYWRhcHRlcik7CisJaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmIGxpbmspCiAJCWdvdG8gbGlua191cDsKIAotCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluaygmYWRhcHRlci0+aHcpOwotCWlmICgocmV0X3ZhbCA9PSBFMTAwMF9FUlJfUEhZKSAmJgotCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykgJiYKLQkgICAgKHJkMzIoRTEwMDBfQ1RSTCkgJgotCSAgICAgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUpKQotCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJICJHaWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7Ci0KLQlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKLQkgICAgIShyZDMyKEUxMDAwX1RYQ1cpICYgRTEwMDBfVFhDV19BTkUpKQotCQlsaW5rID0gbWFjLT5zZXJkZXNfaGFzX2xpbms7Ci0JZWxzZQotCQlsaW5rID0gcmQzMihFMTAwMF9TVEFUVVMpICYKLQkJCQkgICAgICBFMTAwMF9TVEFUVVNfTFU7Ci0KIAlpZiAobGluaykgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJdTMyIGN0cmw7CkBAIC0yMzk1LDYgKzI2MjAsOSBAQAogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7CiAKKwkJCWlnYl9waW5nX2FsbF92ZnMoYWRhcHRlcik7CisKKwkJCS8qIGxpbmsgc3RhdGUgaGFzIGNoYW5nZWQsIHNjaGVkdWxlIHBoeSBpbmZvIHVwZGF0ZSAqLwogCQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCiAJCQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CkBAIC0yNDA4LDYgKzI2MzYsMTAgQEAKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCisJCQlpZ2JfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCisJCQkvKiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkLCBzY2hlZHVsZSBwaHkgaW5mbyB1cGRhdGUgKi8KIAkJCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCQltb2RfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLAogCQkJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwpAQCAtMjQxNyw5ICsyNjQ5LDkgQEAKIGxpbmtfdXA6CiAJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAotCW1hYy0+dHhfcGFja2V0X2RlbHRhID0gYWRhcHRlci0+c3RhdHMudHB0IC0gYWRhcHRlci0+dHB0X29sZDsKKwlody0+bWFjLnR4X3BhY2tldF9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLnRwdCAtIGFkYXB0ZXItPnRwdF9vbGQ7CiAJYWRhcHRlci0+dHB0X29sZCA9IGFkYXB0ZXItPnN0YXRzLnRwdDsKLQltYWMtPmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKKwlody0+bWFjLmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKIAlhZGFwdGVyLT5jb2xjX29sZCA9IGFkYXB0ZXItPnN0YXRzLmNvbGM7CiAKIAlhZGFwdGVyLT5nb3JjID0gYWRhcHRlci0+c3RhdHMuZ29yYyAtIGFkYXB0ZXItPmdvcmNfb2xkOwpAQCAtMjQzMCw3ICsyNjYyLDcgQEAKIAlpZ2JfdXBkYXRlX2FkYXB0aXZlKCZhZGFwdGVyLT5odyk7CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpICsgMSA8IHR4X3JpbmctPmNvdW50KSB7CisJCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgKyAxIDwgdHhfcmluZy0+Y291bnQpIHsKIAkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAogCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKIAkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgpAQCAtMjU3Niw3ICsyODA4LDcgQEAKIAkJaWYgKGJ5dGVzID4gMjUwMDApIHsKIAkJCWlmIChwYWNrZXRzID4gMzUpCiAJCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7Ci0JCX0gZWxzZSBpZiAoYnl0ZXMgPCA2MDAwKSB7CisJCX0gZWxzZSBpZiAoYnl0ZXMgPCAxNTAwKSB7CiAJCQlyZXR2YWwgPSBsb3dfbGF0ZW5jeTsKIAkJfQogCQlicmVhazsKQEAgLTI2MDgsMTUgKzI4NDAsMTMgQEAKIAkJCQkJICAgIGFkYXB0ZXItPnR4X2l0ciwKIAkJCQkJICAgIGFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX3BhY2tldHMsCiAJCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyk7Ci0KIAkJY3VycmVudF9pdHIgPSBtYXgoYWRhcHRlci0+cnhfaXRyLCBhZGFwdGVyLT50eF9pdHIpOwogCX0gZWxzZSB7CiAJCWN1cnJlbnRfaXRyID0gYWRhcHRlci0+cnhfaXRyOwogCX0KIAogCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLwotCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmCi0JICAgIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQogCQljdXJyZW50X2l0ciA9IGxvd19sYXRlbmN5OwogCiAJc3dpdGNoIChjdXJyZW50X2l0cikgewpAQCAtMjY2OCw2ICsyODk4LDcgQEAKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1ZMQU4JCTB4MDAwMDAwMDIKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1RTTwkJMHgwMDAwMDAwNAogI2RlZmluZSBJR0JfVFhfRkxBR1NfSVBWNAkJMHgwMDAwMDAwOAorI2RlZmluZSBJR0JfVFhfRkxBR1NfVFNUQU1QICAgICAgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1ZMQU5fTUFTSwkweGZmZmYwMDAwCiAjZGVmaW5lIElHQl9UWF9GTEFHU19WTEFOX1NISUZUCTE2CiAKQEAgLTI3MzMsNyArMjk2NCw3IEBACiAJbXNzX2w0bGVuX2lkeCA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplIDw8IEUxMDAwX0FEVlRYRF9NU1NfU0hJRlQpOwogCW1zc19sNGxlbl9pZHggfD0gKGw0bGVuIDw8IEUxMDAwX0FEVlRYRF9MNExFTl9TSElGVCk7CiAKLQkvKiBDb250ZXh0IGluZGV4IG11c3QgYmUgdW5pcXVlIHBlciByaW5nLiAqLworCS8qIEZvciA4MjU3NSwgY29udGV4dCBpbmRleCBtdXN0IGJlIHVuaXF1ZSBwZXIgcmluZy4gKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19ORUVEX0NUWF9JRFgpCiAJCW1zc19sNGxlbl9pZHggfD0gdHhfcmluZy0+cXVldWVfaW5kZXggPDwgNDsKIApAQCAtMjc3OCwxMyArMzAwOSwyNCBAQAogCQl0dV9jbWQgfD0gKEUxMDAwX1RYRF9DTURfREVYVCB8IEUxMDAwX0FEVlRYRF9EVFlQX0NUWFQpOwogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQlfX2JlMTYgcHJvdG9jb2w7CisKKwkJCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgeworCQkJCWNvbnN0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmhkciA9CisJCQkJICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIqKXNrYi0+ZGF0YTsKKworCQkJCXByb3RvY29sID0gdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJCX0gZWxzZSB7CisJCQkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCQkJfQorCisJCQlzd2l0Y2ggKHByb3RvY29sKSB7CisJCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJCQl0dV9jbWQgfD0gRTEwMDBfQURWVFhEX1RVQ01EX0lQVjQ7CiAJCQkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KIAkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOwpAQCAtMjgwMyw2ICszMDQ1LDggQEAKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfTkVFRF9DVFhfSURYKQogCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0KIAkJCQljcHVfdG9fbGUzMih0eF9yaW5nLT5xdWV1ZV9pbmRleCA8PCA0KTsKKwkJZWxzZQorCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0gMDsKIAogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKQEAgLTI4MTUsOCArMzA1OSw2IEBACiAKIAkJcmV0dXJuIHRydWU7CiAJfQotCi0KIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI4MzEsMjUgKzMwNzMsMzMgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCUJVR19PTihsZW4gPj0gSUdCX01BWF9EQVRBX1BFUl9UWEQpOwogCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBsZW47CiAJLyogc2V0IHRpbWVfc3RhbXAgKmJlZm9yZSogZG1hIHRvIGhlbHAgYXZvaWQgYSBwb3NzaWJsZSByYWNlICovCiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKLQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgc2tiLT5kYXRhLCBsZW4sCi0JCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CisJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtjb3VudF07CiAJY291bnQrKzsKLQlpKys7Ci0JaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCWkgPSAwOwogCiAJZm9yIChmID0gMDsgZiA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGYrKykgewogCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwogCisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7CiAKQEAgLTI4NTgsMTkgKzMxMDgsMTAgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGxlbjsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJCWZyYWctPnBhZ2UsCi0JCQkJCQlmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkJCWxlbiwKLQkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbY291bnRdOwogCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CiAJfQogCi0JaSA9ICgoaSA9PSAwKSA/IHR4X3JpbmctPmNvdW50IC0gMSA6IGkgLSAxKTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0yODkzLDYgKzMxMzQsOSBAQAogCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFHU19WTEFOKQogCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVkxFOwogCisJaWYgKHR4X2ZsYWdzICYgSUdCX1RYX0ZMQUdTX1RTVEFNUCkKKwkJY21kX3R5cGVfbGVuIHw9IEUxMDAwX0FEVlRYRF9NQUNfVFNUQU1QOworCiAJaWYgKHR4X2ZsYWdzICYgSUdCX1RYX0ZMQUdTX1RTTykgewogCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVFNFOwogCkBAIC0yOTU1LDcgKzMxOTksNyBAQAogCiAJLyogV2UgbmVlZCB0byBjaGVjayBhZ2FpbiBpbiBhIGNhc2UgYW5vdGhlciBDUFUgaGFzIGp1c3QKIAkgKiBtYWRlIHJvb20gYXZhaWxhYmxlLiAqLwotCWlmIChJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPCBzaXplKQorCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgPCBzaXplKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQSByZXByaWV2ZSEgKi8KQEAgLTI5NjcsMTMgKzMyMTEsMTEgQEAKIHN0YXRpYyBpbnQgaWdiX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKIHsKLQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IHNpemUpCisJaWYgKGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSA+PSBzaXplKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gX19pZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOwogfQogCi0jZGVmaW5lIFRYRF9VU0VfQ09VTlQoUykgKCgoUykgPj4gKElHQl9NQVhfVFhEX1BXUikpICsgMSkKLQogc3RhdGljIGludCBpZ2JfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQpAQCAtMjk4MSwxMSArMzIyMywxMCBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgaW50IGZpcnN0OwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7Ci0JdW5zaWduZWQgaW50IGxlbjsKIAl1OCBoZHJfbGVuID0gMDsKKwlpbnQgY291bnQgPSAwOwogCWludCB0c28gPSAwOwotCi0JbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwl1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4OwogCiAJaWYgKHRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTMwMDYsNyArMzI0NywyMSBAQAogCQkvKiB0aGlzIGlzIGEgaGFyZCBlcnJvciAqLwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCXNrYl9vcnBoYW4oc2tiKTsKKworCS8qCisJICogVE9ETzogY2hlY2sgdGhhdCB0aGVyZSBjdXJyZW50bHkgaXMgbm8gb3RoZXIgcGFja2V0IHdpdGgKKwkgKiB0aW1lIHN0YW1waW5nIGluIHRoZSBxdWV1ZQorCSAqCisJICogV2hlbiBkb2luZyB0aW1lIHN0YW1waW5nLCBrZWVwIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzb2NrZXQKKwkgKiBhIHdoaWxlIGxvbmdlcjogaXQgaXMgc3RpbGwgbmVlZGVkIGJ5IHNrYl9od3RzdGFtcF90eCgpLAorCSAqIGNhbGxlZCBlaXRoZXIgaW4gaWdiX3R4X2h3dHN0YW1wKCkgb3IgYnkgb3VyIGNhbGxlciB3aGVuCisJICogZG9pbmcgc29mdHdhcmUgdGltZSBzdGFtcGluZy4KKwkgKi8KKwlzaHR4ID0gc2tiX3R4KHNrYik7CisJaWYgKHVubGlrZWx5KHNodHgtPmhhcmR3YXJlKSkgeworCQlzaHR4LT5pbl9wcm9ncmVzcyA9IDE7CisJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19UU1RBTVA7CisJfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfVkxBTjsKQEAgLTMwMTcsNyArMzI3Miw2IEBACiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19JUFY0OwogCiAJZmlyc3QgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKLQogCXRzbyA9IHNrYl9pc19nc28oc2tiKSA/IGlnYl90c29fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsCiAJCQkJCSAgICAgICZoZHJfbGVuKSA6IDA7CiAKQEAgLTMwMjgsMTggKzMyODIsMjcgQEAKIAogCWlmICh0c28pCiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19UU087Ci0JZWxzZSBpZiAoaWdiX3R4X2NzdW1fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpKQotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCi0JCQkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX0NTVU07CisJZWxzZSBpZiAoaWdiX3R4X2NzdW1fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpICYmCisJICAgICAgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQorCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfQ1NVTTsKIAotCWlnYl90eF9xdWV1ZV9hZHYoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCi0JCQkgaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCksCi0JCQkgc2tiLT5sZW4sIGhkcl9sZW4pOworCS8qCisJICogY291bnQgcmVmbGVjdHMgZGVzY3JpcHRvcnMgbWFwcGVkLCBpZiAwIHRoZW4gbWFwcGluZyBlcnJvcgorCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqLworCWNvdW50ID0gaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQlpZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyA0KTsKKwlpZiAoY291bnQpIHsKKwkJaWdiX3R4X3F1ZXVlX2FkdihhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywgY291bnQsCisJCQkgICAgICAgICBza2ItPmxlbiwgaGRyX2xlbik7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWlnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDQpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKKwl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMzA1MCw3ICszMzEzLDcgQEAKIAlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3Jpbmc7CiAKIAlpbnQgcl9pZHggPSAwOwotCXJfaWR4ID0gc2tiLT5xdWV1ZV9tYXBwaW5nICYgKElHQl9NQVhfVFhfUVVFVUVTIC0gMSk7CisJcl9pZHggPSBza2ItPnF1ZXVlX21hcHBpbmcgJiAoSUdCX0FCU19NQVhfVFhfUVVFVUVTIC0gMSk7CiAJdHhfcmluZyA9IGFkYXB0ZXItPm11bHRpX3R4X3RhYmxlW3JfaWR4XTsKIAogCS8qIFRoaXMgZ29lcyBiYWNrIHRvIHRoZSBxdWVzdGlvbiBvZiBob3cgdG8gbG9naWNhbGx5IG1hcCBhIHR4IHF1ZXVlCkBAIC0zMDcyLDggKzMzMzUsOCBAQAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCiAJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwotCXdyMzIoRTEwMDBfRUlDUywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayAmCi0JCX4oRTEwMDBfRUlNU19UQ1BfVElNRVIgfCBFMTAwMF9FSU1TX09USEVSKSk7CisJd3IzMihFMTAwMF9FSUNTLAorCSAgICAgKGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgJiB+YWRhcHRlci0+ZWltc19vdGhlcikpOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0zMDkxLDggKzMzNTQsNyBAQAogICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgogICogVGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IHVwZGF0ZWQgZnJvbSB0aGUgdGltZXIgY2FsbGJhY2suCiAgKiovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotaWdiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZ2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMzExOCw3ICszMzgwLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0jZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CiAJaWYgKG1heF9mcmFtZSA+IE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJNVFUgPiA5MjE2IG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTI2LDYgKzMzODcsNyBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CisKIAkvKiBpZ2JfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBtYXhfZnJhbWU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKQEAgLTMxNTEsNiArMzQxMywxMiBAQAogI2Vsc2UKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IFBBR0VfU0laRSAvIDI7CiAjZW5kaWYKKworCS8qIGlmIHNyLWlvdiBpcyBlbmFibGVkIHdlIG5lZWQgdG8gZm9yY2UgYnVmZmVyIHNpemUgdG8gMUsgb3IgbGFyZ2VyICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgJiYKKwkgICAgKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPCBJR0JfUlhCVUZGRVJfMTAyNCkpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJR0JfUlhCVUZGRVJfMTAyNDsKKwogCS8qIGFkanVzdCBhbGxvY2F0aW9uIGlmIExQRSBwcm90ZWN0cyB1cywgYW5kIHdlIGFyZW4ndCB1c2luZyBTQlAgKi8KIAlpZiAoKG1heF9mcmFtZSA9PSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pIHx8CiAJICAgICAobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkKQEAgLTMyOTUsOCArMzU2Myw3IEBACiAJLyogUGh5IFN0YXRzICovCiAJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlpZiAoKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKLQkJICAgKCFpZ2JfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkgICAgICAmcGh5X3RtcCkpKSB7CisJCSAgICghaWdiX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV90bXApKSkgewogCQkJcGh5X3RtcCAmPSBQSFlfSURMRV9FUlJPUl9DT1VOVF9NQVNLOwogCQkJYWRhcHRlci0+cGh5X3N0YXRzLmlkbGVfZXJyb3JzICs9IHBoeV90bXA7CiAJCX0KQEAgLTMzMDgsNyArMzU3NSw2IEBACiAJYWRhcHRlci0+c3RhdHMubWdwZGMgKz0gcmQzMihFMTAwMF9NR1RQREMpOwogfQogCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9vdGhlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwpAQCAtMzMxNywxNSArMzU4MywyNCBAQAogCXUzMiBpY3IgPSByZDMyKEUxMDAwX0lDUik7CiAKIAkvKiByZWFkaW5nIElDUiBjYXVzZXMgYml0IDMxIG9mIEVJQ1IgdG8gYmUgY2xlYXJlZCAqLwotCWlmICghKGljciAmIEUxMDAwX0lDUl9MU0MpKQotCQlnb3RvIG5vX2xpbmtfaW50ZXJydXB0OwotCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKLQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KLQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKLQkKLW5vX2xpbmtfaW50ZXJydXB0OgotCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDKTsKKworCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CisKKwkvKiBDaGVjayBmb3IgYSBtYWlsYm94IGV2ZW50ICovCisJaWYgKGljciAmIEUxMDAwX0lDUl9WTU1CKQorCQlpZ2JfbXNnX3Rhc2soYWRhcHRlcik7CisKKwlpZiAoaWNyICYgRTEwMDBfSUNSX0xTQykgeworCQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7CisJCS8qIGd1YXJkIGFnYWluc3QgaW50ZXJydXB0IHdoZW4gd2UncmUgZ29pbmcgZG93biAqLworCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJfQorCisJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MgfCBFMTAwMF9JTVNfRE9VVFNZTkMgfCBFMTAwMF9JTVNfVk1NQik7CiAJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX290aGVyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTMzNDEsNiArMzYxNiw3IEBACiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfdHhfZGNhKHR4X3JpbmcpOwogI2VuZGlmCisKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CiAJdHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiAKQEAgLTMzNjEsMTMgKzM2MzcsMTEgQEAKIAlpZiAoKHJpbmctPmFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgJiYgcmluZy0+c2V0X2l0cikgewogCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCQljYXNlIGUxMDAwXzgyNTc2OgotCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsCi0JCQkgICAgIHJpbmctPml0cl92YWwgfAorCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsIHJpbmctPml0cl92YWwgfAogCQkJICAgICAweDgwMDAwMDAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsCi0JCQkgICAgIHJpbmctPml0cl92YWwgfAorCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsIHJpbmctPml0cl92YWwgfAogCQkJICAgICAocmluZy0+aXRyX3ZhbCA8PCAxNikpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTMzODUsOCArMzY1OSw4IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKHJ4X3JpbmcpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnJ4X3JpbmctPm5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZyeF9yaW5nLT5uYXBpKSkKKwkJX19uYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKIAogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKHJ4X3JpbmctPmFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCkBAIC0zNDA4LDExICszNjgyLDExIEBACiAJCWRjYV9yeGN0cmwgPSByZDMyKEUxMDAwX0RDQV9SWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfcnhjdHJsICY9IH5FMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfcnhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV9yeGN0cmwgJj0gfkUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV9yeGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3J4Y3RybCB8PSBFMTAwMF9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCQlkY2FfcnhjdHJsIHw9IEUxMDAwX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CkBAIC0zNDM1LDExICszNzA5LDExIEBACiAJCWRjYV90eGN0cmwgPSByZDMyKEUxMDAwX0RDQV9UWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfdHhjdHJsICY9IH5FMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfdHhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV90eGN0cmwgJj0gfkUxMDAwX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV90eGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3R4Y3RybCB8PSBFMTAwMF9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwogCQl3cjMyKEUxMDAwX0RDQV9UWENUUkwocSksIGRjYV90eGN0cmwpOwpAQCAtMzQ3OSw3ICszNzUzLDcgQEAKIAkJCWJyZWFrOwogCQkvKiBBbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZAogCQkgKiBpbiB0aGUgQ0IgZHJpdmVyLiAqLwotCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAyKTsKKwkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyKTsKIAkJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKGRldikgPT0gMCkgewogCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGVuYWJsZWRcbiIpOwpAQCAtMzQ5NCw3ICszNzY4LDcgQEAKIAkJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKGRldik7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKIAkJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKLQkJCXdyMzIoRTEwMDBfRENBX0NUUkwsIDEpOworCQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfRElTQUJMRSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMzUxNCw2ICszNzg4LDMyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19JR0JfRENBICovCiAKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQlwaW5nID0gRTEwMDBfUEZfQ09OVFJPTF9NU0c7CisJCWlmIChhZGFwdGVyLT52Zl9kYXRhW2ldLmNsZWFyX3RvX3NlbmQpCisJCQlwaW5nIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmcGluZywgMSwgaSk7CisJfQorfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICB1MzIgKm1zZ2J1ZiwgdTMyIHZmKQoreworCWludCBuID0gKG1zZ2J1ZlswXSAmIEUxMDAwX1ZUX01TR0lORk9fTUFTSykgPj4gRTEwMDBfVlRfTVNHSU5GT19TSElGVDsKKwl1MTYgKmhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGEgPSAmYWRhcHRlci0+dmZfZGF0YVt2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHVwIHRvIDMwIGhhc2ggdmFsdWVzIHN1cHBvcnRlZCAqLworCWlmIChuID4gMzApCisJCW4gPSAzMDsKKworCS8qIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmX2RhdGEtPm51bV92Zl9tY19oYXNoZXMgPSBuOworCisJLyogVkZzIGFyZSBsaW1pdGVkIHRvIHVzaW5nIHRoZSBNVEEgaGFzaCB0YWJsZSBmb3IgdGhlaXIgbXVsdGljYXN0CisJICogYWRkcmVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2ldID0gaGFzaF9saXN0W2ldOzsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpZ2Jfc2V0X211bHRpKGFkYXB0ZXItPm5ldGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlICp2Zl9kYXRhOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQl2Zl9kYXRhID0gJmFkYXB0ZXItPnZmX2RhdGFbaV07CisJCWZvciAoaiA9IDA7IGogPCB2Zl9kYXRhLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspCisJCQlpZ2JfbXRhX3NldChodywgdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2pdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9jbGVhcl92Zl92ZnRhKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBvb2xfbWFzaywgcmVnLCB2aWQ7CisJaW50IGk7CisKKwlwb29sX21hc2sgPSAxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKyB2Zik7CisKKwkvKiBGaW5kIHRoZSB2bGFuIGZpbHRlciBmb3IgdGhpcyBpZCAqLworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9WTFZGX0FSUkFZX1NJWkU7IGkrKykgeworCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCisJCS8qIHJlbW92ZSB0aGUgdmYgZnJvbSB0aGUgcG9vbCAqLworCQlyZWcgJj0gfnBvb2xfbWFzazsKKworCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1BPT0xTRUxfTUFTSykgJiYKKwkJICAgIChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQlyZWcgPSAwOworCQkJdmlkID0gcmVnICYgRTEwMDBfVkxWRl9WTEFOSURfTUFTSzsKKwkJCWlnYl92ZnRhX3NldChodywgdmlkLCBmYWxzZSk7CisJCX0KKworCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CisJfQorfQorCitzdGF0aWMgczMyIGlnYl92bHZmX3NldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2aWQsIGJvb2wgYWRkLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnLCBpOworCisJLyogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gVkZzIGFyZSBub3QgZW5hYmxlZCAqLworCWlmICghYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJcmV0dXJuIC0xOworCisJLyogRmluZCB0aGUgdmxhbiBmaWx0ZXIgZm9yIHRoaXMgaWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJcmVnID0gcmQzMihFMTAwMF9WTFZGKGkpKTsKKwkJaWYgKChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpICYmCisJCSAgICB2aWQgPT0gKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX01BU0spKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFkZCkgeworCQlpZiAoaSA9PSBFMTAwMF9WTFZGX0FSUkFZX1NJWkUpIHsKKwkJCS8qIERpZCBub3QgZmluZCBhIG1hdGNoaW5nIFZMQU4gSUQgZW50cnkgdGhhdCB3YXMKKwkJCSAqIGVuYWJsZWQuICBTZWFyY2ggZm9yIGEgZnJlZSBmaWx0ZXIgZW50cnksIGkuZS4KKwkJCSAqIG9uZSB3aXRob3V0IHRoZSBlbmFibGUgYml0IHNldAorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCQkJCWlmICghKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFKSB7CisJCQkvKiBGb3VuZCBhbiBlbmFibGVkL2F2YWlsYWJsZSBlbnRyeSAqLworCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKTsKKworCQkJLyogaWYgIWVuYWJsZWQgd2UgbmVlZCB0byBzZXQgdGhpcyB1cCBpbiB2ZnRhICovCisJCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQkJLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUsIGlmIGJpdCBhbHJlYWR5IHNldAorCQkJCSAqIFBGIG11c3QgaGF2ZSBhZGRlZCBpdCBvdXRzaWRlIG9mIHRhYmxlICovCisJCQkJaWYgKGlnYl92ZnRhX3NldChodywgdmlkLCB0cnVlKSkKKwkJCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArCisJCQkJCQlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KTsKKwkJCQlyZWcgfD0gRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFOworCQkJfQorCQkJcmVnICY9IH5FMTAwMF9WTFZGX1ZMQU5JRF9NQVNLOworCQkJcmVnIHw9IHZpZDsKKworCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRSkgeworCQkJLyogcmVtb3ZlIHZmIGZyb20gdGhlIHBvb2wgKi8KKwkJCXJlZyAmPSB+KDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKSk7CisJCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQkJaWYgKCEocmVnICYgRTEwMDBfVkxWRl9QT09MU0VMX01BU0spKSB7CisJCQkJcmVnID0gMDsKKwkJCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOworCQkJfQorCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnYnVmLCB1MzIgdmYpCit7CisJaW50IGFkZCA9IChtc2didWZbMF0gJiBFMTAwMF9WVF9NU0dJTkZPX01BU0spID4+IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQ7CisJaW50IHZpZCA9IChtc2didWZbMV0gJiBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLKTsKKworCXJldHVybiBpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBhZGQsIHZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogZGlzYWJsZSBtYWlsYm94IGZ1bmN0aW9uYWxpdHkgZm9yIHZmICovCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCisJLyogcmVzZXQgb2ZmbG9hZHMgdG8gZGVmYXVsdHMgKi8KKwlpZ2Jfc2V0X3Ztb2xyKGh3LCB2Zik7CisKKwkvKiByZXNldCB2bGFucyBmb3IgZGV2aWNlICovCisJaWdiX2NsZWFyX3ZmX3ZmdGEoYWRhcHRlciwgdmYpOworCisJLyogcmVzZXQgbXVsdGljYXN0IHRhYmxlIGFycmF5IGZvciB2ZiAqLworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLm51bV92Zl9tY19oYXNoZXMgPSAwOworCisJLyogRmx1c2ggYW5kIHJlc2V0IHRoZSBtdGEgd2l0aCB0aGUgbmV3IHZhbHVlcyAqLworCWlnYl9zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9tc2coc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzOworCXUzMiByZWcsIG1zZ2J1ZlszXTsKKwl1OCAqYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKKworCS8qIHByb2Nlc3MgYWxsIHRoZSBzYW1lIGl0ZW1zIGNsZWFyZWQgaW4gYSBmdW5jdGlvbiBsZXZlbCByZXNldCAqLworCWlnYl92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7CisKKwkvKiBzZXQgdmYgbWFjIGFkZHJlc3MgKi8KKwlpZ2JfcmFyX3NldChodywgdmZfbWFjLCB2ZiArIDEpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCB2ZiArIDEpOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IHJkMzIoRTEwMDBfVkZURSk7CisJd3IzMihFMTAwMF9WRlRFLCByZWcgfCAoMSA8PCB2ZikpOworCXJlZyA9IHJkMzIoRTEwMDBfVkZSRSk7CisJd3IzMihFMTAwMF9WRlJFLCByZWcgfCAoMSA8PCB2ZikpOworCisJLyogZW5hYmxlIG1haWxib3ggZnVuY3Rpb25hbGl0eSBmb3IgdmYgKi8KKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCS8qIHJlcGx5IHRvIHJlc2V0IHdpdGggYWNrIGFuZCB2ZiBtYWMgYWRkcmVzcyAqLworCW1zZ2J1ZlswXSA9IEUxMDAwX1ZGX1JFU0VUIHwgRTEwMDBfVlRfTVNHVFlQRV9BQ0s7CisJbWVtY3B5KGFkZHIsIHZmX21hYywgNik7CisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAzLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWNfYWRkcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnLCBpbnQgdmYpCit7CisJCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAoY2hhciAqKSZtc2dbMV07CisJCWludCBlcnIgPSAtMTsKKworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJCWVyciA9IGlnYl9zZXRfdmZfbWFjKGFkYXB0ZXIsIHZmLCBhZGRyKTsKKworCQlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyB2b2lkIGlnYl9yY3ZfYWNrX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kKQorCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmbXNnLCAxLCB2Zik7Cit9CisKKworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2ZjsKKworCWZvciAodmYgPSAwOyB2ZiA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IHZmKyspIHsKKwkJLyogcHJvY2VzcyBhbnkgcmVzZXQgcmVxdWVzdHMgKi8KKwkJaWYgKCFpZ2JfY2hlY2tfZm9yX3JzdChodywgdmYpKSB7CisJCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CisJCQlpZ2JfdmZfcmVzZXRfZXZlbnQoYWRhcHRlciwgdmYpOworCQl9CisKKwkJLyogcHJvY2VzcyBhbnkgbWVzc2FnZXMgcGVuZGluZyAqLworCQlpZiAoIWlnYl9jaGVja19mb3JfbXNnKGh3LCB2ZikpCisJCQlpZ2JfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaWdiX2NoZWNrX2Zvcl9hY2soaHcsIHZmKSkKKwkJCWlnYl9yY3ZfYWNrX2Zyb21fdmYoYWRhcHRlciwgdmYpOworCisJfQorfQorCitzdGF0aWMgaW50IGlnYl9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gRTEwMDBfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCisJcmV0dmFsID0gaWdiX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSAgICAgICAgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKEUxMDAwX1ZUX01TR1RZUEVfQUNLIHwgRTEwMDBfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHJlc2V0IGl0IHNob3VsZCBub3QgYmUKKwkgKiBhbGxvd2VkIHRvIHN0YXJ0IGFueSBjb25maWd1cmF0aW9uLgorCSAqLworCisJaWYgKG1zZ2J1ZlswXSA9PSBFMTAwMF9WRl9SRVNFVCkgeworCQlpZ2JfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCkgeworCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDEsIHZmKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzd2l0Y2ggKChtc2didWZbMF0gJiAweEZGRkYpKSB7CisJY2FzZSBFMTAwMF9WRl9TRVRfTUFDX0FERFI6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfbWFjX2FkZHIoYWRhcHRlciwgbXNnYnVmLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX01VTFRJQ0FTVDoKKwkJcmV0dmFsID0gaWdiX3NldF92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQlicmVhazsKKwljYXNlIEUxMDAwX1ZGX1NFVF9MUEU6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfcmxwbWwoYWRhcHRlciwgbXNnYnVmWzFdLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX1ZMQU46CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfdmxhbihhZGFwdGVyLCBtc2didWYsIHZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5oYW5kbGVkIE1zZyAlMDh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSAtMTsKKwkJYnJlYWs7CisJfQorCisJLyogbm90aWZ5IHRoZSBWRiBvZiB0aGUgcmVzdWx0cyBvZiB3aGF0IGl0IHNlbnQgdXMgKi8KKwlpZiAocmV0dmFsKQorCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCWVsc2UKKwkJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQUNLOworCisJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKioKICAqIGlnYl9pbnRyX21zaSAtIEludGVycnVwdCBIYW5kbGVyCiAgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCkBAIC0zNTI5LDE5ICs0MTE5LDI0IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKGFkYXB0ZXItPnJ4X3JpbmcpOwogCisJaWYoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CisJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KKwkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOworCX0KKwogCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCi0gKiBpZ2JfaW50ciAtIEludGVycnVwdCBIYW5kbGVyCisgKiBpZ2JfaW50ciAtIExlZ2FjeSBJbnRlcnJ1cHQgSGFuZGxlcgogICogQGlycTogaW50ZXJydXB0IG51bWJlcgogICogQGRhdGE6IHBvaW50ZXIgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiovCkBAIC0zNTUzLDcgKzQxNDgsNiBAQAogCS8qIEludGVycnVwdCBBdXRvLU1hc2suLi51cG9uIHJlYWRpbmcgSUNSLCBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQuICBObwogCSAqIG5lZWQgZm9yIHRoZSBJTUMgd3JpdGUgKi8KIAl1MzIgaWNyID0gcmQzMihFMTAwMF9JQ1IpOwotCXUzMiBlaWNyID0gMDsKIAlpZiAoIWljcikKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIApAQCAtMzU2NCw3ICs0MTU4LDEwIEBACiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWVpY3IgPSByZDMyKEUxMDAwX0VJQ1IpOworCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CiAKIAlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKQEAgLTM1NzMsMTEgKzQxNzAsMzEgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5yeF9yaW5nWzBdLm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3J4X2lycV9lbmFibGUoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpIHsKKwkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPT0gMSkKKwkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOworCQllbHNlCisJCQlpZ2JfdXBkYXRlX3JpbmdfaXRyKHJ4X3JpbmcpOworCX0KKworCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQorCQkJd3IzMihFMTAwMF9FSU1TLCByeF9yaW5nLT5laW1zX3ZhbHVlKTsKKwkJZWxzZQorCQkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQorfQorCiAvKioKICAqIGlnYl9wb2xsIC0gTkFQSSBSeCBwb2xsaW5nIGNhbGxiYWNrCiAgKiBAbmFwaTogbmFwaSBwb2xsaW5nIHN0cnVjdHVyZQpAQCAtMzU4Niw3MCArNDIwMyw2NCBAQAogc3RhdGljIGludCBpZ2JfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpZ2JfcmluZywgbmFwaSk7Ci0Jc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCB0eF9jbGVhbl9jb21wbGV0ZSwgd29ya19kb25lID0gMDsKLQotCS8qIHRoaXMgcG9sbCByb3V0aW5lIG9ubHkgc3VwcG9ydHMgb25lIHR4IGFuZCBvbmUgcnggcXVldWUgKi8KLSNpZmRlZiBDT05GSUdfSUdCX0RDQQotCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQotCQlpZ2JfdXBkYXRlX3R4X2RjYSgmYWRhcHRlci0+dHhfcmluZ1swXSk7Ci0jZW5kaWYKLQl0eF9jbGVhbl9jb21wbGV0ZSA9IGlnYl9jbGVhbl90eF9pcnEoJmFkYXB0ZXItPnR4X3JpbmdbMF0pOwotCi0jaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKLQkJaWdiX3VwZGF0ZV9yeF9kY2EoJmFkYXB0ZXItPnJ4X3JpbmdbMF0pOwotI2VuZGlmCi0JaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbMF0sICZ3b3JrX2RvbmUsIGJ1ZGdldCk7Ci0KLQkvKiBJZiBubyBUeCBhbmQgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwotCWlmICgodHhfY2xlYW5fY29tcGxldGUgJiYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkpIHx8Ci0JICAgICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKLQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGlnYl9jbGVhbl9yeF9yaW5nX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQotewotCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaWdiX3JpbmcsIG5hcGkpOwotCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCWludCB3b3JrX2RvbmUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKKwlpZiAocnhfcmluZy0+YWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaWdiX3VwZGF0ZV9yeF9kY2EocnhfcmluZyk7CiAjZW5kaWYKIAlpZ2JfY2xlYW5fcnhfaXJxX2FkdihyeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCi0KLQkvKiBJZiBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCi0JaWYgKCh3b3JrX2RvbmUgPT0gMCkgfHwgIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSB7Ci0JCQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9PSAxKQotCQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwotCQkJZWxzZQotCQkJCWlnYl91cGRhdGVfcmluZ19pdHIocnhfcmluZyk7Ci0JCX0KLQotCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQl3cjMyKEUxMDAwX0VJTVMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOwotCi0JCXJldHVybiAwOworCWlmIChyeF9yaW5nLT5idWRkeSkgeworI2lmZGVmIENPTkZJR19JR0JfRENBCisJCWlmIChyeF9yaW5nLT5hZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQorCQkJaWdiX3VwZGF0ZV90eF9kY2EocnhfcmluZy0+YnVkZHkpOworI2VuZGlmCisJCWlmICghaWdiX2NsZWFuX3R4X2lycShyeF9yaW5nLT5idWRkeSkpCisJCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAJfQogCi0JcmV0dXJuIDE7CisJLyogSWYgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWdiX3J4X2lycV9lbmFibGUocnhfcmluZyk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworLyoqCisgKiBpZ2JfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc2tiOiBwYWNrZXQgdGhhdCB3YXMganVzdCBzZW50CisgKgorICogSWYgd2Ugd2VyZSBhc2tlZCB0byBkbyBoYXJkd2FyZSBzdGFtcGluZyBhbmQgc3VjaCBhIHRpbWUgc3RhbXAgaXMKKyAqIGF2YWlsYWJsZSwgdGhlbiBpdCBtdXN0IGhhdmUgYmVlbiBmb3IgdGhpcyBza2IgaGVyZSBiZWNhdXNlIHdlIG9ubHkKKyAqIGFsbG93IG9ubHkgb25lIHN1Y2ggcGFja2V0IGludG8gdGhlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBpZ2JfdHhfaHd0c3RhbXAoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHggPSBza2JfdHgoc2tiKTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKHVubGlrZWx5KHNodHgtPmhhcmR3YXJlKSkgeworCQl1MzIgdmFsaWQgPSByZDMyKEUxMDAwX1RTWU5DVFhDVEwpICYgRTEwMDBfVFNZTkNUWENUTF9WQUxJRDsKKwkJaWYgKHZhbGlkKSB7CisJCQl1NjQgcmVndmFsID0gcmQzMihFMTAwMF9UWFNUTVBMKTsKKwkJCXU2NCBuczsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wczsKKworCQkJbWVtc2V0KCZzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKHNoaHd0c3RhbXBzKSk7CisJCQlyZWd2YWwgfD0gKHU2NClyZDMyKEUxMDAwX1RYU1RNUEgpIDw8IDMyOworCQkJbnMgPSB0aW1lY291bnRlcl9jeWMydGltZSgmYWRhcHRlci0+Y2xvY2ssCisJCQkJCQkgIHJlZ3ZhbCk7CisJCQl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOworCQkJc2hod3RzdGFtcHMuc3lzdHN0YW1wID0KKwkJCQl0aW1lY29tcGFyZV90cmFuc2Zvcm0oJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCXNrYl90c3RhbXBfdHgoc2tiLCAmc2hod3RzdGFtcHMpOworCQl9CisJfQogfQogCiAvKioKQEAgLTM2OTAsNiArNDMwMSw4IEBACiAJCQkJCSAgICBza2ItPmxlbjsKIAkJCQl0b3RhbF9wYWNrZXRzICs9IHNlZ3M7CiAJCQkJdG90YWxfYnl0ZXMgKz0gYnl0ZWNvdW50OworCisJCQkJaWdiX3R4X2h3dHN0YW1wKGFkYXB0ZXIsIHNrYik7CiAJCQl9CiAKIAkJCWlnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLCBidWZmZXJfaW5mbyk7CkBAIC0zNjk5LDcgKzQzMTIsNiBAQAogCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCiAJCQkJaSA9IDA7CiAJCX0KLQogCQllb3AgPSB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOwogCQllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOwogCX0KQEAgLTM3MDgsNyArNDMyMCw3IEBACiAKIAlpZiAodW5saWtlbHkoY291bnQgJiYKIAkJICAgICBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKLQkJICAgICBJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPj0gSUdCX1RYX1FVRVVFX1dBS0UpKSB7CisJCSAgICAgaWdiX2Rlc2NfdW51c2VkKHR4X3JpbmcpID49IElHQl9UWF9RVUVVRV9XQUtFKSkgewogCQkvKiBNYWtlIHN1cmUgdGhhdCBhbnlib2R5IHN0b3BwaW5nIHRoZSBxdWV1ZSBhZnRlciB0aGlzCiAJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgogCQkgKi8KQEAgLTM3NjQsNDQgKzQzNzYsMTEgQEAKIAlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLSAvKioKLSAqIGlnYl9nZXRfc2tiX2hkciAtIGhlbHBlciBmdW5jdGlvbiBmb3IgTFJPIGhlYWRlciBwcm9jZXNzaW5nCi0gKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgYWRkZWQgdG8gTFJPIHBhY2tldAotICogQGlwaGRyOiBwb2ludGVyIHRvIGlwIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEB0Y3BoOiBwb2ludGVyIHRvIHRjcCBoZWFkZXIgc3RydWN0dXJlCi0gKiBAaGRyX2ZsYWdzOiBwb2ludGVyIHRvIGhlYWRlciBmbGFncwotICogQHByaXY6IHBvaW50ZXIgdG8gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBmb3IgdGhlIGN1cnJlbnQgc2tfYnVmZgotICoqLwotc3RhdGljIGludCBpZ2JfZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwaGRyLCB2b2lkICoqdGNwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKLQl1MTYgcGt0X3R5cGUgPSByeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5wa3RfaW5mbyAmCi0JICAgICAgICAgICAgICAgKEUxMDAwX1JYREFEVl9QS1RUWVBFX0lQVjQgfCBFMTAwMF9SWERBRFZfUEtUVFlQRV9UQ1ApOwotCi0JLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZhbGlkIElQdjQgVENQIHBhY2tldCAqLwotCWlmIChwa3RfdHlwZSAhPSAoRTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCB8Ci0JICAgICAgICAgICAgICAgICAgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogU2V0IG5ldHdvcmsgaGVhZGVycyAqLwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2hkcmxlbihza2IpKTsKLQkqaXBoZHIgPSBpcF9oZHIoc2tiKTsKLQkqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCi0JcmV0dXJuIDA7Ci0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSUdCX0xSTyAqLwotCiAvKioKICAqIGlnYl9yZWNlaXZlX3NrYiAtIGhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgcnggaW5kaWNhdGlvbnMKLSAqIEByaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyByZWNldmluZyB0aGlzIHBhY2tldCAKKyAqIEByaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyByZWNldmluZyB0aGlzIHBhY2tldAogICogQHN0YXR1czogZGVzY3JpcHRvciBzdGF0dXMgZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZQotICogQHZsYW46IGRlc2NyaXB0b3IgdmxhbiBmaWVsZCBhcyB3cml0dGVuIGJ5IGhhcmR3YXJlIChubyBsZS9iZSBjb252ZXJzaW9uKQorICogQHJ4X2Rlc2M6IHJlY2VpdmUgZGVzY3JpcHRvciBjb250YWluaW5nIHZsYW4gYW5kIHR5cGUgaW5mb3JtYXRpb24uCiAgKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgaW5kaWNhdGVkIHRvIHN0YWNrCiAgKiovCiBzdGF0aWMgdm9pZCBpZ2JfcmVjZWl2ZV9za2Ioc3RydWN0IGlnYl9yaW5nICpyaW5nLCB1OCBzdGF0dXMsCkBAIC0zODExLDMxICs0MzkwLDIzIEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICogYWRhcHRlciA9IHJpbmctPmFkYXB0ZXI7CiAJYm9vbCB2bGFuX2V4dHJhY3RlZCA9IChhZGFwdGVyLT52bGdycCAmJiAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKTsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyAmJgotCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByaW5nLT5xdWV1ZV9pbmRleCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CiAJCWlmICh2bGFuX2V4dHJhY3RlZCkKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKLQkJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52bGdycCwKLQkJCSAgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKLQkJCSAgICAgICAgICAgICAgICAgICByeF9kZXNjKTsKKwkJCXZsYW5fZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIGFkYXB0ZXItPnZsZ3JwLAorCQkJICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKKwkJCSAgICAgICAgICAgICAgICAgc2tiKTsKIAkJZWxzZQotCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLHNrYiwgcnhfZGVzYyk7Ci0JCXJpbmctPmxyb191c2VkID0gMTsKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIHNrYik7CiAJfSBlbHNlIHsKLSNlbmRpZgogCQlpZiAodmxhbl9leHRyYWN0ZWQpCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKIAkJCSAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnZsYW4pKTsKIAkJZWxzZQotCiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCiAJfQotI2VuZGlmCiB9CiAKLQogc3RhdGljIGlubGluZSB2b2lkIGlnYl9yeF9jaGVja3N1bV9hZHYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgICAgICB1MzIgc3RhdHVzX2Vyciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTM4NjMsMTcgKzQ0MzQsMTkgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvICwgKm5leHRfYnVmZmVyOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAlib29sIGNsZWFuZWQgPSBmYWxzZTsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAKQEAgLTM4ODEsNyArNDQ1NCwzMCBAQAogCQlpZiAoKndvcmtfZG9uZSA+PSBidWRnZXQpCiAJCQlicmVhazsKIAkJKCp3b3JrX2RvbmUpKys7Ci0JCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJbmV4dF9yeGQgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CisJCXByZWZldGNoKG5leHRfcnhkKTsKKwkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisKKwkJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKKwkJY2xlYW5lZCA9IHRydWU7CisJCWNsZWFuZWRfY291bnQrKzsKKworCQlpZiAoIWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsKKwkJCQkJICAgTkVUX0lQX0FMSUdOLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCQkJZ290byBzZW5kX3VwOworCQl9CiAKIAkJLyogSFcgd2lsbCBub3QgRE1BIGluIGRhdGEgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIGJ1ZmZlciwgZXZlbgogCQkgKiBpZiBpdCBwYXJzZXMgdGhlIChORlMsIG9mIGNvdXJzZSkgaGVhZGVyIHRvIGJlIGxhcmdlci4gIEluCkBAIC0zODkzLDI2ICs0NDg5LDkgQEAKIAkJaWYgKGhsZW4gPiBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKIAkJCWhsZW4gPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKIAotCQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGgpOwotCQljbGVhbmVkID0gdHJ1ZTsKLQkJY2xlYW5lZF9jb3VudCsrOwotCi0JCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7Ci0JCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7Ci0JCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwotCQlpZiAoIWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsKLQkJCQkJICAgTkVUX0lQX0FMSUdOLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCQkJZ290byBzZW5kX3VwOwotCQl9Ci0KIAkJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSArCi0JCQkJCSAgIE5FVF9JUF9BTElHTiwKKwkJCQkJIGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplICsgTkVUX0lQX0FMSUdOLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBobGVuKTsKIAkJfQpAQCAtMzkzOCwxMyArNDUxNyw2IEBACiAKIAkJCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOwogCQl9Ci1zZW5kX3VwOgotCQlpKys7Ci0JCWlmIChpID09IHJ4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7Ci0JCW5leHRfcnhkID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwotCQlwcmVmZXRjaChuZXh0X3J4ZCk7Ci0JCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCiAJCWlmICghKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9FT1ApKSB7CiAJCQlidWZmZXJfaW5mby0+c2tiID0gbmV4dF9idWZmZXItPnNrYjsKQEAgLTM5NTMsNiArNDUyNSw0NyBAQAogCQkJbmV4dF9idWZmZXItPmRtYSA9IDA7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQorc2VuZF91cDoKKwkJLyoKKwkJICogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBSWCByZWdpc3RlcnMgY29udGFpbgorCQkgKiB0aGUgdGltZSBzdGFtcC4gTm8gb3RoZXIgcGFja2V0IHdpbGwgYmUgdGltZQorCQkgKiBzdGFtcGVkIHVudGlsIHdlIHJlYWQgdGhlc2UgcmVnaXN0ZXJzLCBzbyByZWFkIHRoZQorCQkgKiByZWdpc3RlcnMgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSBhZ2Fpbi4gQmVjYXVzZQorCQkgKiBvbmx5IG9uZSBwYWNrZXQgY2FuIGJlIHRpbWUgc3RhbXBlZCBhdCBhIHRpbWUsIHdlCisJCSAqIGtub3cgdGhhdCB0aGUgcmVnaXN0ZXIgdmFsdWVzIG11c3QgYmVsb25nIHRvIHRoaXMKKwkJICogb25lIGhlcmUgYW5kIHRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIHRvIGNvbXBhcmUKKwkJICogYW55IG9mIHRoZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgc3RvcmVkIGZvciBpdC4KKwkJICoKKwkJICogSWYgbm90aGluZyB3ZW50IHdyb25nLCB0aGVuIGl0IHNob3VsZCBoYXZlIGEKKwkJICogc2tiX3NoYXJlZF90eCB0aGF0IHdlIGNhbiB0dXJuIGludG8gYQorCQkgKiBza2Jfc2hhcmVkX2h3dHN0YW1wcy4KKwkJICoKKwkJICogVE9ETzogY2FuIHRpbWUgc3RhbXBpbmcgYmUgdHJpZ2dlcmVkICh0aHVzIGxvY2tpbmcKKwkJICogdGhlIHJlZ2lzdGVycykgd2l0aG91dCB0aGUgcGFja2V0IHJlYWNoaW5nIHRoaXMgcG9pbnQKKwkJICogaGVyZT8gSW4gdGhhdCBjYXNlIFJYIHRpbWUgc3RhbXBpbmcgd291bGQgZ2V0IHN0dWNrLgorCQkgKgorCQkgKiBUT0RPOiBpbiAidGltZSBzdGFtcCBhbGwgcGFja2V0cyIgbW9kZSB0aGlzIGJpdCBpcworCQkgKiBub3Qgc2V0LiBOZWVkIGEgZ2xvYmFsIGZsYWcgZm9yIHRoaXMgbW9kZSBhbmQgdGhlbgorCQkgKiBhbHdheXMgcmVhZCB0aGUgcmVnaXN0ZXJzLiBDYW5ub3QgYmUgZG9uZSB3aXRob3V0CisJCSAqIGEgcmFjZSBjb25kaXRpb24uCisJCSAqLworCQlpZiAodW5saWtlbHkoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX1RTKSkgeworCQkJdTY0IHJlZ3ZhbDsKKwkJCXU2NCBuczsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqc2hod3RzdGFtcHMgPQorCQkJCXNrYl9od3RzdGFtcHMoc2tiKTsKKworCQkJV0FSTighKHJkMzIoRTEwMDBfVFNZTkNSWENUTCkgJiBFMTAwMF9UU1lOQ1JYQ1RMX1ZBTElEKSwKKwkJCSAgICAgImlnYjogbm8gUlggdGltZSBzdGFtcCBhdmFpbGFibGUgZm9yIHRpbWUgc3RhbXBlZCBwYWNrZXQiKTsKKwkJCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfUlhTVE1QTCk7CisJCQlyZWd2YWwgfD0gKHU2NClyZDMyKEUxMDAwX1JYU1RNUEgpIDw8IDMyOworCQkJbnMgPSB0aW1lY291bnRlcl9jeWMydGltZSgmYWRhcHRlci0+Y2xvY2ssIHJlZ3ZhbCk7CisJCQl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCW1lbXNldChzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKCpzaGh3dHN0YW1wcykpOworCQkJc2hod3RzdGFtcHMtPmh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOworCQkJc2hod3RzdGFtcHMtPnN5c3RzdGFtcCA9CisJCQkJdGltZWNvbXBhcmVfdHJhbnNmb3JtKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CisJCX0KIAogCQlpZiAoc3RhdGVyciAmIEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0spIHsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CkBAIC0zOTgwLDE5ICs0NTkzLDExIEBACiAJCS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLwogCQlyeF9kZXNjID0gbmV4dF9yeGQ7CiAJCWJ1ZmZlcl9pbmZvID0gbmV4dF9idWZmZXI7Ci0KIAkJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAJfQogCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7Ci0JY2xlYW5lZF9jb3VudCA9IElHQl9ERVNDX1VOVVNFRChyeF9yaW5nKTsKLQotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7Ci0JCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOwotCQlyeF9yaW5nLT5scm9fdXNlZCA9IDA7Ci0JfQotI2VuZGlmCisJY2xlYW5lZF9jb3VudCA9IGlnYl9kZXNjX3VudXNlZChyeF9yaW5nKTsKIAogCWlmIChjbGVhbmVkX2NvdW50KQogCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocnhfcmluZywgY2xlYW5lZF9jb3VudCk7CkBAIC00MDA2LDcgKzQ2MTEsNiBAQAogCXJldHVybiBjbGVhbmVkOwogfQogCi0KIC8qKgogICogaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2IC0gUmVwbGFjZSB1c2VkIHJlY2VpdmUgYnVmZmVyczsgcGFja2V0IHNwbGl0CiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtNDAyMSwxMCArNDYyNSwxNyBAQAogCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpOworCWludCBidWZzejsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKIAlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAorCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKKwkJYnVmc3ogPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKKwllbHNlCisJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKKwlidWZzeiArPSBORVRfSVBfQUxJR047CisKIAl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CiAJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAKQEAgLTQwNDAsMjMgKzQ2NTEsMTQgQEAKIAkJCQlidWZmZXJfaW5mby0+cGFnZV9vZmZzZXQgXj0gUEFHRV9TSVpFIC8gMjsKIAkJCX0KIAkJCWJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKHBkZXYsCi0JCQkJCSAgICAgYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJcGNpX21hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5wYWdlLAogCQkJCQkgICAgIGJ1ZmZlcl9pbmZvLT5wYWdlX29mZnNldCwKIAkJCQkJICAgICBQQUdFX1NJWkUgLyAyLAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAogCQlpZiAoIWJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWludCBidWZzejsKLQotCQkJaWYgKGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKQotCQkJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7Ci0JCQllbHNlCi0JCQkJYnVmc3ogPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwotCQkJYnVmc3ogKz0gTkVUX0lQX0FMSUdOOwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGJ1ZnN6KTsKLQogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJCWdvdG8gbm9fYnVmZmVyczsKQEAgLTQwNzIsNyArNDY3NCw2IEBACiAJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAogCQkJCQkJCSAgYnVmc3osCiAJCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKIAkJICogZWFjaCB3cml0ZS1iYWNrIGVyYXNlcyB0aGlzIGluZm8uICovCkBAIC00MTQyLDYgKzQ3NDMsMTYzIEBACiB9CiAKIC8qKgorICogaWdiX2h3dHN0YW1wX2lvY3RsIC0gY29udHJvbCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nCisgKiBAbmV0ZGV2OgorICogQGlmcmVxOgorICogQGNtZDoKKyAqCisgKiBPdXRnb2luZyB0aW1lIHN0YW1waW5nIGNhbiBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZC4gUGxheSBuaWNlIGFuZAorICogZGlzYWJsZSBpdCB3aGVuIHJlcXVlc3RlZCwgYWx0aG91Z2ggaXQgc2hvdWxkbid0IGNhc2UgYW55IG92ZXJoZWFkCisgKiB3aGVuIG5vIHBhY2tldCBuZWVkcyBpdC4gQXQgbW9zdCBvbmUgcGFja2V0IGluIHRoZSBxdWV1ZSBtYXkgYmUKKyAqIG1hcmtlZCBmb3IgdGltZSBzdGFtcGluZywgb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gdGVsbAorICogZm9yIHN1cmUgdG8gd2hpY2ggcGFja2V0IHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIGJlbG9uZ3MuCisgKgorICogSW5jb21pbmcgdGltZSBzdGFtcGluZyBoYXMgdG8gYmUgY29uZmlndXJlZCB2aWEgdGhlIGhhcmR3YXJlCisgKiBmaWx0ZXJzLiBOb3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkLCBpbiBwYXJ0aWN1bGFyIGV2ZW50CisgKiB0eXBlIGhhcyB0byBiZSBzcGVjaWZpZWQuIE1hdGNoaW5nIHRoZSBraW5kIG9mIGV2ZW50IHBhY2tldCBpcworICogbm90IHN1cHBvcnRlZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICJhbGwgVjIgZXZlbnRzIHJlZ2FyZGxlc3Mgb2YKKyAqIGxldmVsIDIgb3IgNCIuCisgKgorICoqLworc3RhdGljIGludCBpZ2JfaHd0c3RhbXBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNvbmZpZzsKKwl1MzIgdHN5bmNfdHhfY3RsX2JpdCA9IEUxMDAwX1RTWU5DVFhDVExfRU5BQkxFRDsKKwl1MzIgdHN5bmNfcnhfY3RsX2JpdCA9IEUxMDAwX1RTWU5DUlhDVExfRU5BQkxFRDsKKwl1MzIgdHN5bmNfcnhfY3RsX3R5cGUgPSAwOworCXUzMiB0c3luY19yeF9jZmcgPSAwOworCWludCBpc19sNCA9IDA7CisJaW50IGlzX2wyID0gMDsKKwlzaG9ydCBwb3J0ID0gMzE5OyAvKiBQVFAgKi8KKwl1MzIgcmVndmFsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjb25maWcsIGlmci0+aWZyX2RhdGEsIHNpemVvZihjb25maWcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8KKwlpZiAoY29uZmlnLmZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY29uZmlnLnR4X3R5cGUpIHsKKwljYXNlIEhXVFNUQU1QX1RYX09GRjoKKwkJdHN5bmNfdHhfY3RsX2JpdCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfVFhfT046CisJCXRzeW5jX3R4X2N0bF9iaXQgPSBFMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCXN3aXRjaCAoY29uZmlnLnJ4X2ZpbHRlcikgeworCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CisJCXRzeW5jX3J4X2N0bF9iaXQgPSAwOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6CisJCS8qCisJCSAqIHJlZ2lzdGVyIFRTWU5DUlhDRkcgbXVzdCBiZSBzZXQsIHRoZXJlZm9yZSBpdCBpcyBub3QKKwkJICogcG9zc2libGUgdG8gdGltZSBzdGFtcCBib3RoIFN5bmMgYW5kIERlbGF5X1JlcSBtZXNzYWdlcworCQkgKiA9PiBmYWxsIGJhY2sgdG8gdGltZSBzdGFtcGluZyBhbGwgcGFja2V0cworCQkgKi8KKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfQUxMOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0w0X1YxOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9TWU5DX01FU1NBR0U7CisJCWlzX2w0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUToKKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDRfVjE7CisJCXRzeW5jX3J4X2NmZyA9IEUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0RFTEFZX1JFUV9NRVNTQUdFOworCQlpc19sNCA9IDE7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOgorCQl0c3luY19yeF9jdGxfdHlwZSA9IEUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9MNF9WMjsKKwkJdHN5bmNfcnhfY2ZnID0gRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU1lOQ19NRVNTQUdFOworCQlpc19sMiA9IDE7CisJCWlzX2w0ID0gMTsKKwkJY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9TT01FOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVROgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0wyX0w0X1YyOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVFfTUVTU0FHRTsKKwkJaXNfbDIgPSAxOworCQlpc19sNCA9IDE7CisJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfU09NRTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0VWRU5UX1YyOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDsKKwkJaXNfbDIgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwkvKiBlbmFibGUvZGlzYWJsZSBUWCAqLworCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfVFNZTkNUWENUTCk7CisJcmVndmFsID0gKHJlZ3ZhbCAmIH5FMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQpIHwgdHN5bmNfdHhfY3RsX2JpdDsKKwl3cjMyKEUxMDAwX1RTWU5DVFhDVEwsIHJlZ3ZhbCk7CisKKwkvKiBlbmFibGUvZGlzYWJsZSBSWCwgZGVmaW5lIHdoaWNoIFBUUCBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RTWU5DUlhDVEwpOworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+RTEwMDBfVFNZTkNSWENUTF9FTkFCTEVEKSB8IHRzeW5jX3J4X2N0bF9iaXQ7CisJcmVndmFsID0gKHJlZ3ZhbCAmIH4weEUpIHwgdHN5bmNfcnhfY3RsX3R5cGU7CisJd3IzMihFMTAwMF9UU1lOQ1JYQ1RMLCByZWd2YWwpOworCXdyMzIoRTEwMDBfVFNZTkNSWENGRywgdHN5bmNfcnhfY2ZnKTsKKworCS8qCisJICogRXRoZXJ0eXBlIEZpbHRlciBRdWV1ZSBGaWx0ZXJbMF1bMTU6MF0gPSAweDg4RjcKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFdGhlcnR5cGUgdG8gZmlsdGVyIG9uKQorCSAqIEV0aGVydHlwZSBGaWx0ZXIgUXVldWUgRmlsdGVyWzBdWzI2XSA9IDB4MSAoRW5hYmxlIGZpbHRlcikKKwkgKiBFdGhlcnR5cGUgRmlsdGVyIFF1ZXVlIEZpbHRlclswXVszMF0gPSAweDEgKEVuYWJsZSBUaW1lc3RhbXBpbmcpCisJICovCisJd3IzMihFMTAwMF9FVFFGMCwgaXNfbDIgPyAweDQ0MDA4OGY3IDogMCk7CisKKwkvKiBMNCBRdWV1ZSBGaWx0ZXJbMF06IG9ubHkgZmlsdGVyIGJ5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCAqLworCXdyMzIoRTEwMDBfU1BRRjAsIGh0b25zKHBvcnQpKTsKKwl3cjMyKEUxMDAwX0lNSVJFWFQoMCksIGlzX2w0ID8KKwkgICAgICgoMTw8MTIpIHwgKDE8PDE5KSAvKiBieXBhc3Mgc2l6ZSBhbmQgY29udHJvbCBmbGFncyAqLykgOiAwKTsKKwl3cjMyKEUxMDAwX0lNSVIoMCksIGlzX2w0ID8KKwkgICAgIChodG9ucyhwb3J0KQorCSAgICAgIHwgKDA8PDE2KSAvKiBpbW1lZGlhdGUgaW50ZXJydXB0IGRpc2FibGVkICovCisJICAgICAgfCAwIC8qICgxPDwxNykgYml0IGNsZWFyZWQ6IGRvIG5vdCBieXBhc3MKKwkJICAgICBkZXN0aW5hdGlvbiBwb3J0IGNoZWNrICovKQorCQk6IDApOworCXdyMzIoRTEwMDBfRlRRRjAsIGlzX2w0ID8KKwkgICAgICgweDExIC8qIFVEUCAqLworCSAgICAgIHwgKDE8PDE1KSAvKiBWRiBub3QgY29tcGFyZWQgKi8KKwkgICAgICB8ICgxPDwyNykgLyogRW5hYmxlIFRpbWVzdGFtcGluZyAqLworCSAgICAgIHwgKDc8PDI4KSAvKiBvbmx5IHNvdXJjZSBwb3J0IGZpbHRlciBlbmFibGVkLAorCQkJICAgc291cmNlL3RhcmdldCBhZGRyZXNzIGFuZCBwcm90b2NvbAorCQkJICAgbWFza2VkICovKQorCSAgICAgOiAoKDE8PDE1KSB8ICgxNTw8MjgpIC8qIGFsbCBtYXNrIGJpdHMgc2V0ID0gZmlsdGVyIG5vdAorCQkJCSAgICAgIGVuYWJsZWQgKi8pKTsKKworCXdyZmwoKTsKKworCWFkYXB0ZXItPmh3dHN0YW1wX2NvbmZpZyA9IGNvbmZpZzsKKworCS8qIGNsZWFyIFRYL1JYIHRpbWUgc3RhbXAgcmVnaXN0ZXJzLCBqdXN0IHRvIGJlIHN1cmUgKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RYU1RNUEgpOworCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfUlhTVE1QSCk7CisKKwlyZXR1cm4gY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZjb25maWcsIHNpemVvZihjb25maWcpKSA/CisJCS1FRkFVTFQgOiAwOworfQorCisvKioKICAqIGlnYl9pb2N0bCAtCiAgKiBAbmV0ZGV2OgogICogQGlmcmVxOgpAQCAtNDE1NCw2ICs0OTEyLDggQEAKIAljYXNlIFNJT0NHTUlJUkVHOgogCWNhc2UgU0lPQ1NNSUlSRUc6CiAJCXJldHVybiBpZ2JfbWlpX2lvY3RsKG5ldGRldiwgaWZyLCBjbWQpOworCWNhc2UgU0lPQ1NIV1RTVEFNUDoKKwkJcmV0dXJuIGlnYl9od3RzdGFtcF9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtNDE4MCw4ICs0OTQwLDYgQEAKIAkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKIAkJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKIAkJaWdiX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOwogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOwpAQCAtNDE5MiwxMCArNDk1MCwxMCBAQAogCQkJaWdiX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBhZGFwdGVyLT5tbmdfdmxhbl9pZCk7CiAJCQlhZGFwdGVyLT5tbmdfdmxhbl9pZCA9IElHQl9NTkdfVkxBTl9OT05FOwogCQl9Ci0JCXdyMzIoRTEwMDBfUkxQTUwsCi0JCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOwogCX0KIAorCWlnYl9ybHBtbF9zZXQoYWRhcHRlcik7CisKIAlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogfQpAQCAtNDIwNCwyNCArNDk2MiwyNSBAQAogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgdmZ0YSwgaW5kZXg7CisJaW50IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAotCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgorCWlmICgoaHctPm1uZ19jb29raWUuc3RhdHVzICYKIAkgICAgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTikgJiYKIAkgICAgKHZpZCA9PSBhZGFwdGVyLT5tbmdfdmxhbl9pZCkpCiAJCXJldHVybjsKLQkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLwotCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7Ci0JdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOwotCXZmdGEgfD0gKDEgPDwgKHZpZCAmIDB4MUYpKTsKLQlpZ2Jfd3JpdGVfdmZ0YSgmYWRhcHRlci0+aHcsIGluZGV4LCB2ZnRhKTsKKworCS8qIGFkZCB2aWQgdG8gdmx2ZiBpZiBzci1pb3YgaXMgZW5hYmxlZCwKKwkgKiBpZiB0aGF0IGZhaWxzIGFkZCBkaXJlY3RseSB0byBmaWx0ZXIgdGFibGUgKi8KKwlpZiAoaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIHZpZCwgdHJ1ZSwgcGZfaWQpKQorCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgdHJ1ZSk7CisKIH0KIAogc3RhdGljIHZvaWQgaWdiX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIHZmdGEsIGluZGV4OworCWludCBwZl9pZCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAKIAlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOwpAQCAtNDIzNywxMSArNDk5NiwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogcmVtb3ZlIFZJRCBmcm9tIGZpbHRlciB0YWJsZSAqLwotCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7Ci0JdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOwotCXZmdGEgJj0gfigxIDw8ICh2aWQgJiAweDFGKSk7Ci0JaWdiX3dyaXRlX3ZmdGEoJmFkYXB0ZXItPmh3LCBpbmRleCwgdmZ0YSk7CisJLyogcmVtb3ZlIHZpZCBmcm9tIHZsdmYgaWYgc3ItaW92IGlzIGVuYWJsZWQsCisJICogaWYgbm90IGluIHZsdmYgcmVtb3ZlIGZyb20gdmZ0YSAqLworCWlmIChpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBmYWxzZSwgcGZfaWQpKQorCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKQEAgLTQyOTgsNyArNTA1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC00MzkwLDEwICs1MTQ3LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCi0JCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWVsc2UKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJpZ2I6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwpAQCAtNDQxNCw2ICs1MTY4LDExIEBACiAJLyogZTEwMDBfcG93ZXJfdXBfcGh5KGFkYXB0ZXIpOyAqLwogCiAJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCisJLyogbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93IHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZQorCSAqIGRyaXZlci4gKi8KKwlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CisKIAl3cjMyKEUxMDAwX1dVUywgfjApOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtNDQyNCwxMCArNTE4Myw2IEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKLQkvKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCi0JICogZHJpdmVyLiAqLwotCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKLQogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00NDQ2LDIyICs1MjAxLDI3IEBACiBzdGF0aWMgdm9pZCBpZ2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgaTsKLQlpbnQgd29ya19kb25lID0gMDsKIAotCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLQlhZGFwdGVyLT5mbGFncyB8PSBJR0JfRkxBR19JTl9ORVRQT0xMOworCWlmICghYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CisJCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwkJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKKwkJcmV0dXJuOworCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl90eF9pcnEoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CisJCXdyMzIoRTEwMDBfRUlNQywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisJCWlnYl9jbGVhbl90eF9pcnEodHhfcmluZyk7CisJCXdyMzIoRTEwMDBfRUlNUywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisJfQogCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbaV0sCi0JCQkJICAgICAmd29ya19kb25lLAotCQkJCSAgICAgYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpLndlaWdodCk7Ci0KLQlhZGFwdGVyLT5mbGFncyAmPSB+SUdCX0ZMQUdfSU5fTkVUUE9MTDsKLQlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOworCQl3cjMyKEUxMDAwX0VJTUMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOworCQluYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwl9CiB9CiAjZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIApAQCAtNDUwNCwxMiArNTI2NCw3IEBACiAJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAJaW50IGVycjsKIAotCWlmIChhZGFwdGVyLT5uZWVkX2lvcG9ydCkKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JZWxzZQotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7Ci0KLQlpZiAoZXJyKSB7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CkBAIC00NTYyLDQgKzUzMTcsMTcyIEBACiAJaWdiX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3NldF92bW9scihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgdmZuKQoreworCXUzMiByZWdfZGF0YTsKKworCXJlZ19kYXRhID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKKwlyZWdfZGF0YSB8PSBFMTAwMF9WTU9MUl9CQU0gfAkgLyogQWNjZXB0IGJyb2FkY2FzdCAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1JPUEUgfCAgIC8qIEFjY2VwdCBwYWNrZXRzIG1hdGNoZWQgaW4gVVRBICovCisJICAgICAgICAgICAgRTEwMDBfVk1PTFJfUk9NUEUgfCAgLyogQWNjZXB0IHBhY2tldHMgbWF0Y2hlZCBpbiBNVEEgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9BVVBFIHwgICAvKiBBY2NlcHQgdW50YWdnZWQgcGFja2V0cyAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1NUUlZMQU47IC8qIFN0cmlwIHZsYW4gdGFncyAqLworCXdyMzIoRTEwMDBfVk1PTFIodmZuKSwgcmVnX2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZ2Jfc2V0X3ZmX3JscG1sKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmZuKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHZtb2xyOworCisJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKHZmbikpOworCXZtb2xyICY9IH5FMTAwMF9WTU9MUl9STFBNTF9NQVNLOworCXZtb2xyIHw9IHNpemUgfCBFMTAwMF9WTU9MUl9MUEU7CisJd3IzMihFMTAwMF9WTU9MUih2Zm4pLCB2bW9scik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfcmFoX3Bvb2woc3RydWN0IGUxMDAwX2h3ICpodywgaW50IHBvb2wsIGludCBlbnRyeSkKK3sKKwl1MzIgcmVnX2RhdGE7CisKKwlyZWdfZGF0YSA9IHJkMzIoRTEwMDBfUkFIKGVudHJ5KSk7CisJcmVnX2RhdGEgJj0gfkUxMDAwX1JBSF9QT09MX01BU0s7CisJcmVnX2RhdGEgfD0gRTEwMDBfUkFIX1BPT0xfMSA8PCBwb29sOzsKKwl3cjMyKEUxMDAwX1JBSChlbnRyeSksIHJlZ19kYXRhKTsKK30KKworc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIGludCBlbnRyeV9jb3VudCwgdTE2IHRvdGFsX3Jhcl9maWx0ZXJzKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGkgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ICsgMTsKKworCWlmICgoaSArIGVudHJ5X2NvdW50KSA8IHRvdGFsX3Jhcl9maWx0ZXJzKQorCQl0b3RhbF9yYXJfZmlsdGVycyA9IGkgKyBlbnRyeV9jb3VudDsKKworCWZvciAoOyBpIDwgdG90YWxfcmFyX2ZpbHRlcnM7IGkrKykKKwkJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgaSk7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHJhcl9lbnRyeSA9IHZmICsgMTsgLyogVkYgTUFDIGFkZHJlc3NlcyBzdGFydCBhdCBlbnRyeSAxICovCisKKwlpZ2JfcmFyX3NldChodywgbWFjX2FkZHIsIHJhcl9lbnRyeSk7CisKKwltZW1jcHkoYWRhcHRlci0+dmZfZGF0YVt2Zl0udmZfbWFjX2FkZHJlc3NlcywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCByYXJfZW50cnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl92bW1fY29udHJvbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnX2RhdGE7CisKKwlpZiAoIWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXJldHVybjsKKworCS8qIFZGJ3MgbmVlZCBQRiByZXNldCBpbmRpY2F0aW9uIGJlZm9yZSB0aGV5CisJICogY2FuIHNlbmQvcmVjZWl2ZSBtYWlsICovCisJcmVnX2RhdGEgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwlyZWdfZGF0YSB8PSBFMTAwMF9DVFJMX0VYVF9QRlJTVEQ7CisJd3IzMihFMTAwMF9DVFJMX0VYVCwgcmVnX2RhdGEpOworCisJaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKGh3LCB0cnVlKTsKKwlpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoaHcsIHRydWUpOworfQorCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKK3N0YXRpYyBzc2l6ZV90IGlnYl9zaG93X251bV92ZnMoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlnYl9zZXRfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXVuc2lnbmVkIGludCBudW1fdmZzLCBpOworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOworCWludCBlcnI7CisKKwlzc2NhbmYoYnVmLCAiJXUiLCAmbnVtX3Zmcyk7CisKKwlpZiAobnVtX3ZmcyA+IDcpCisJCW51bV92ZnMgPSA3OworCisJLyogdmFsdWUgdW5jaGFuZ2VkIGRvIG5vdGhpbmcgKi8KKwlpZiAobnVtX3ZmcyA9PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQlyZXR1cm4gY291bnQ7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaWdiX2Nsb3NlKG5ldGRldik7CisKKwlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOworCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOworCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOworCWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPSAwOworCisJLyogcmVjbGFpbSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIFZGcyBzaW5jZSB3ZSBhcmUgY2hhbmdpbmcgY291bnQgKi8KKwlpZiAoYWRhcHRlci0+dmZfZGF0YSkgeworCQkvKiBkaXNhYmxlIGlvdiBhbmQgYWxsb3cgdGltZSBmb3IgdHJhbnNhY3Rpb25zIHRvIGNsZWFyICovCisJCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOworCQltc2xlZXAoNTAwKTsKKworCQlrZnJlZShhZGFwdGVyLT52Zl9kYXRhKTsKKwkJYWRhcHRlci0+dmZfZGF0YSA9IE5VTEw7CisJCXdyMzIoRTEwMDBfSU9WQ1RMLCBFMTAwMF9JT1ZDVExfUkVVU0VfVkZRKTsKKwkJbXNsZWVwKDEwMCk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJT1YgRGlzYWJsZWRcbiIpOworCX0KKworCWlmIChudW1fdmZzKSB7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBrY2FsbG9jKG51bV92ZnMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghYWRhcHRlci0+dmZfZGF0YSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIFZGIHByaXZhdGUgIgorCQkJCSJkYXRhIC0gSU9WIGVuYWJsZSBmYWlsZWRcbiIpOworCQl9IGVsc2UgeworCQkJZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTsKKwkJCWlmICghZXJyKSB7CisJCQkJYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCA9IG51bV92ZnM7CisJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkIHZmcyBhbGxvY2F0ZWRcbiIsIG51bV92ZnMpOworCQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyBpKyspIHsKKwkJCQkJcmFuZG9tX2V0aGVyX2FkZHIobWFjX2FkZHIpOworCQkJCQlpZ2Jfc2V0X3ZmX21hYyhhZGFwdGVyLCBpLCBtYWNfYWRkcik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlrZnJlZShhZGFwdGVyLT52Zl9kYXRhKTsKKwkJCQlhZGFwdGVyLT52Zl9kYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCWlnYl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWdiX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKTsKKwlpZ2JfcmVzZXQoYWRhcHRlcik7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaWdiX29wZW4obmV0ZGV2KTsKKworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLwogLyogaWdiX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCmluZGV4IDE3Nzc5ZjkuLmFkMTc5NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKQEAgLTI1OSw2ICsyNTksMjAgQEAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fZnVuY19fKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhbGlfaXJjY19zaXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGFsaV9pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGFsaV9pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19zaXJfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGFsaV9pcmNjX25ldF9pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWxpX2lyY2NfZmlyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBhbGlfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYWxpX2lyY2NfZmlyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBhbGlfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gYWxpX2lyY2Nfb3BlbiAoaW50IGksIGNoaXBpb190ICppbmYpCiAgKgpAQCAtMzYxLDEwICszNzUsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IGFsaV9pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gYWxpX2lyY2NfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gYWxpX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpAQCAtOTc0LDcgKzk4NSw3IEBACiAJCWFsaV9pcmNjX2Zpcl9jaGFuZ2Vfc3BlZWQoc2VsZiwgYmF1ZCk7CQkJCiAJCQogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQ7CQkKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmFsaV9pcmNjX2Zpcl9vcHM7CiAJCQkJCiAJCS8qIEVuYWJsZSBJbnRlcnV1cHQgKi8KIAkJc2VsZi0+aWVyID0gSUVSX0VPTTsgLy8gYmVuamFtaW4gMjAwMC8xMS8yMCAwNzoyNFBNCQkJCQkKQEAgLTk4OCw3ICs5OTksNyBAQAogCQlhbGlfaXJjY19zaXJfY2hhbmdlX3NwZWVkKHNlbGYsIGJhdWQpOwogCQkJCQogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCX0KIAkKIAkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggNmYzZTdmNy4uNmI2NTQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtMTUyNCw2ICsxNTI0LDEzIEBACiAgIGZyZWVfbmV0ZGV2KHNlbGYtPm5ldGRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdG9zaG9ib2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSB0b3Nob2JvZV9uZXRfb3BlbiwKKwkubmRvX3N0b3AJPSB0b3Nob2JvZV9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CT0gdG9zaG9ib2VfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwJPSB0b3Nob2JvZV9uZXRfaW9jdGwsCit9OworCiBzdGF0aWMgaW50CiB0b3Nob2JvZV9vcGVuIChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkaWQpCiB7CkBAIC0xNjU3LDEwICsxNjY0LDcgQEAKICNlbmRpZgogCiAgIFNFVF9ORVRERVZfREVWKGRldiwgJnBjaV9kZXYtPmRldik7Ci0gIGRldi0+aGFyZF9zdGFydF94bWl0ID0gdG9zaG9ib2VfaGFyZF94bWl0OwotICBkZXYtPm9wZW4gPSB0b3Nob2JvZV9uZXRfb3BlbjsKLSAgZGV2LT5zdG9wID0gdG9zaG9ib2VfbmV0X2Nsb3NlOwotICBkZXYtPmRvX2lvY3RsID0gdG9zaG9ib2VfbmV0X2lvY3RsOworICBkZXYtPm5ldGRldl9vcHMgPSAmdG9zaG9ib2VfbmV0ZGV2X29wczsKIAogICBlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCAzYTIyZGM0Li4wMDZiYTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC0xNDAxLDYgKzE0MDEsMTQgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmRhX3VzYl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGlyZGFfdXNiX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGlyZGFfdXNiX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsICAgPSBpcmRhX3VzYl9uZXRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0ID0gaXJkYV91c2JfaGFyZF94bWl0LAorCS5uZG9fdHhfdGltZW91dAk9IGlyZGFfdXNiX25ldF90aW1lb3V0LAorfTsKKwogLyoKICAqIEluaXRpYWxpc2UgdGhlIG5ldHdvcmsgc2lkZSBvZiB0aGUgaXJkYS11c2IgaW5zdGFuY2UKICAqIENhbGxlZCB3aGVuIGEgbmV3IFVTQiBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIGluIGlyZGFfdXNiX3Byb2JlKCkKQEAgLTE0MTEsMTUgKzE0MTksOSBAQAogCiAJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaXJkYV91c2JfaW5pdF9xb3Moc2VsZik7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmlyZGFfdXNiX25ldGRldl9vcHM7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlyZGFfdXNiX2hhcmRfeG1pdDsKLQluZXRkZXYtPnR4X3RpbWVvdXQJPSBpcmRhX3VzYl9uZXRfdGltZW91dDsKLQluZXRkZXYtPndhdGNoZG9nX3RpbWVvICA9IDI1MCpIWi8xMDAwOwkvKiAyNTAgbXMgPiBVU0IgdGltZW91dCAqLwotCW5ldGRldi0+b3BlbiAgICAgICAgICAgID0gaXJkYV91c2JfbmV0X29wZW47Ci0JbmV0ZGV2LT5zdG9wICAgICAgICAgICAgPSBpcmRhX3VzYl9uZXRfY2xvc2U7Ci0JbmV0ZGV2LT5kb19pb2N0bCAgICAgICAgPSBpcmRhX3VzYl9uZXRfaW9jdGw7CisJaXJkYV91c2JfaW5pdF9xb3Moc2VsZik7CiAKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggYjRhNjE3MS4uOWQ4MTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtNDE4LDYgKzQxOCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMga2luZ3N1bl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQsCisJLm5kb19vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgICAgICAgPSBraW5nc3VuX25ldF9pb2N0bCwKK307CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKQEAgLTUyMCwxMCArNTI2LDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZraW5nc3VuLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBraW5nc3VuX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gICAgICAgICAgICA9IGtpbmdzdW5fbmV0X29wZW47Ci0JbmV0LT5zdG9wICAgICAgICAgICAgPSBraW5nc3VuX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsICAgICAgICA9IGtpbmdzdW5fbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZraW5nc3VuX29wczsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IDU1MzIyZmIuLmI2ZmZlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtNjY4LDYgKzY2OCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMga3M5NTlfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdAk9IGtzOTU5X2hhcmRfeG1pdCwKKwkubmRvX29wZW4JPSBrczk1OV9uZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBrczk1OV9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGtzOTU5X25ldF9pb2N0bCwKK307CiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC03ODAsMTAgKzc4Niw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga3M5NTlfaGFyZF94bWl0OwotCW5ldC0+b3BlbiA9IGtzOTU5X25ldF9vcGVuOwotCW5ldC0+c3RvcCA9IGtzOTU5X25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsID0ga3M5NTlfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZrczk1OV9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCA1YjMyN2IwLi42NGRmMjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTU2Miw2ICs1NjIsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtzZGF6emxlX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBrc2RhenpsZV9oYXJkX3htaXQsCisJLm5kb19vcGVuCT0ga3NkYXp6bGVfbmV0X29wZW4sCisJLm5kb19zdG9wCT0ga3NkYXp6bGVfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBrc2RhenpsZV9uZXRfaW9jdGwsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC02ODQsMTAgKzY5MSw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga3NkYXp6bGVfaGFyZF94bWl0OwotCW5ldC0+b3BlbiA9IGtzZGF6emxlX25ldF9vcGVuOwotCW5ldC0+c3RvcCA9IGtzZGF6emxlX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsID0ga3NkYXp6bGVfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZrc2RhenpsZV9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IDg1ZTg4ZGEuLmZhYzUwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC04NzMsNiArODczLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBtY3NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gbWNzX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBtY3NfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgPSBtY3NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UgaW4gdGhlCiAgKiBzeXN0ZW0uICBOZWVkIHRvIHZlcmlmeSB0aGUgZGV2aWNlIGFuZCBpZiBpdCBpcywgdGhlbiBzdGFydCBoYW5kbGluZyBpdC4KQEAgLTkxOSwxMSArOTI2LDcgQEAKIAkvKiBTcGVlZCBjaGFuZ2Ugd29yayBpbml0aWFsaXNhdGlvbiovCiAJSU5JVF9XT1JLKCZtY3MtPndvcmssIG1jc19zcGVlZF93b3JrKTsKIAotCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1jc19oYXJkX3htaXQ7Ci0JbmRldi0+b3BlbiA9IG1jc19uZXRfb3BlbjsKLQluZGV2LT5zdG9wID0gbWNzX25ldF9jbG9zZTsKLQluZGV2LT5kb19pb2N0bCA9IG1jc19uZXRfaW9jdGw7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZtY3NfbmV0ZGV2X29wczsKIAogCWlmICghaW50Zi0+Y3VyX2FsdHNldHRpbmcpCiAJCWdvdG8gZXJyb3IyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCmluZGV4IDYxZTUwOWMuLjQ1ZmQ5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKQEAgLTMzMSw2ICszMzEsMjAgQEAKIAlwbnBfcmVnaXN0ZXJlZCA9IDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNjX2lyY2Nfc2lyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuc2NfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBuc2NfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X3NpciwKKwkubmRvX2RvX2lvY3RsICAgPSBuc2NfaXJjY19uZXRfaW9jdGwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zY19pcmNjX2Zpcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gbnNjX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9maXIsCisJLm5kb19kb19pb2N0bCAgID0gbnNjX2lyY2NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIG5zY19pcmNjX29wZW4gKGlvYmFzZSwgaXJxKQogICoKQEAgLTQ0MSwxMCArNDU1LDcgQEAKIAlzZWxmLT50eF9maWZvLnRhaWwgPSBzZWxmLT50eF9idWZmLmhlYWQ7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXI7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgPSBuc2NfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IG5zY19pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IG5zY19pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbnNjX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKQEAgLTEzMjAsMTIgKzEzMzEsMTIgQEAKIAlzd2l0Y2hfYmFuayhpb2Jhc2UsIEJBTkswKTsgCiAJaWYgKHNwZWVkID4gMTE1MjAwKSB7CiAJCS8qIEluc3RhbGwgRklSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9maXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZuc2NfaXJjY19maXJfb3BzOwogCQlpZXIgPSBJRVJfU0ZJRl9JRTsKIAkJbnNjX2lyY2NfZG1hX3JlY2VpdmUoc2VsZik7CiAJfSBlbHNlIHsKIAkJLyogSW5zdGFsbCBTSVIgeG1pdCBoYW5kbGVyICovCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnNjX2lyY2NfaGFyZF94bWl0X3NpcjsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJm5zY19pcmNjX3Npcl9vcHM7CiAJCWllciA9IElFUl9SWEhETF9JRTsKIAl9CiAJLyogU2V0IG91ciBjdXJyZW50IGludGVycnVwdCBtYXNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCmluZGV4IDViNTg2MjQuLmQ5NDA4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCkBAIC03NTMsNyArNzUzLDggQEAKIAlkZXYtPnJ4X2J1ZmYudHJ1ZXNpemUgPSBJUkRBX1NLQl9NQVhfTVRVOyAKIAogCS8qIEJvb3RzdHJhcCBaZXJvQ29weSBSeCAqLwotCWRldi0+cnhfYnVmZi5za2IgPSBfX2Rldl9hbGxvY19za2IoZGV2LT5yeF9idWZmLnRydWVzaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPnJ4X2J1ZmYuc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldi0+bmV0ZGV2LCBkZXYtPnJ4X2J1ZmYudHJ1ZXNpemUsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCWlmIChkZXYtPnJ4X2J1ZmYuc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNrYl9yZXNlcnZlKGRldi0+cnhfYnVmZi5za2IsIDEpOwpAQCAtNzc5LDggKzc4MCw3IEBACiAKIHN0YXRpYyB2b2lkIHNpcmRldl9mcmVlX2J1ZmZlcnMoc3RydWN0IHNpcl9kZXYgKmRldikKIHsKLQlpZiAoZGV2LT5yeF9idWZmLnNrYikKLQkJa2ZyZWVfc2tiKGRldi0+cnhfYnVmZi5za2IpOworCWtmcmVlX3NrYihkZXYtPnJ4X2J1ZmYuc2tiKTsKIAlrZnJlZShkZXYtPnR4X2J1ZmYuaGVhZCk7CiAJZGV2LT5yeF9idWZmLmhlYWQgPSBkZXYtPnR4X2J1ZmYuaGVhZCA9IE5VTEw7CiAJZGV2LT5yeF9idWZmLnNrYiA9IE5VTEw7CkBAIC04NjUsNiArODY1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2lyZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBzaXJkZXZfaGFyZF94bWl0LAorCS5uZG9fb3Blbgk9IHNpcmRldl9vcGVuLAorCS5uZG9fc3RvcAk9IHNpcmRldl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0gc2lyZGV2X2lvY3RsLAorfTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzaXJfZGV2ICogc2lyZGV2X2dldF9pbnN0YW5jZShjb25zdCBzdHJ1Y3Qgc2lyX2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtOTA4LDEwICs5MTQsNyBAQAogCWRldi0+bmV0ZGV2ID0gbmRldjsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNpcmRldl9oYXJkX3htaXQ7Ci0JbmRldi0+b3BlbiA9IHNpcmRldl9vcGVuOwotCW5kZXYtPnN0b3AgPSBzaXJkZXZfY2xvc2U7Ci0JbmRldi0+ZG9faW9jdGwgPSBzaXJkZXZfaW9jdGw7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZzaXJkZXZfb3BzOwogCiAJaWYgKHJlZ2lzdGVyX25ldGRldihuZGV2KSkgewogCQlJUkRBX0VSUk9SKCIlcygpLCByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGRkNzNjY2UuLjU5ZDc5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC00ODYsNiArNDg2LDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzbXNjX2lyY2NfbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzZWxmLT5pby5zcGVlZCA+IDExNTIwMCkKKwkJcmV0dXJuIAlzbXNjX2lyY2NfaGFyZF94bWl0X2Zpcihza2IsIGRldik7CisJZWxzZQorCQlyZXR1cm4gCXNtc2NfaXJjY19oYXJkX3htaXRfc2lyKHNrYiwgZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbXNjX2lyY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBzbXNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc21zY19pcmNjX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsICAgPSBzbXNjX2lyY2NfbmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19uZXRfeG1pdCwKKyNpZiBTTVNDX0lSQ0MyX0NfTkVUX1RJTUVPVVQKKwkubmRvX3R4X3RpbWVvdXQJPSBzbXNjX2lyY2NfdGltZW91dCwKKyNlbmRpZgorfTsKKwogLyoKICAqIEZ1bmN0aW9uIHNtc2NfaXJjY19vcGVuIChmaXJiYXNlLCBzaXJiYXNlLCBkbWEsIGlycSkKICAqCkBAIC01MTksMTQgKzUzOSwxMCBAQAogCQlnb3RvIGVycl9vdXQxOwogCX0KIAotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc21zY19pcmNjX2hhcmRfeG1pdF9zaXI7CiAjaWYgU01TQ19JUkNDMl9DX05FVF9USU1FT1VUCi0JZGV2LT50eF90aW1lb3V0CSAgICAgPSBzbXNjX2lyY2NfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvICA9IEhaICogMjsgIC8qIEFsbG93IGVub3VnaCB0aW1lIGZvciBzcGVlZCBjaGFuZ2UgKi8KICNlbmRpZgotCWRldi0+b3BlbiAgICAgICAgICAgID0gc21zY19pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gc21zY19pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IHNtc2NfaXJjY19uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNtc2NfaXJjY19uZXRkZXZfb3BzOwogCiAJc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAJc2VsZi0+bmV0ZGV2ID0gZGV2OwpAQCAtOTk1LDkgKzEwMTEsNiBAQAogCiAJLyogUmVzZXQgZXZlcnl0aGluZyAqLwogCi0JLyogSW5zdGFsbCBGSVIgdHJhbnNtaXQgaGFuZGxlciAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc21zY19pcmNjX2hhcmRfeG1pdF9maXI7Ci0KIAkvKiBDbGVhciBGSUZPICovCiAJb3V0YihpbmIoZmlyX2Jhc2UgKyBJUkNDX0xDUl9BKSB8IElSQ0NfTENSX0FfRklGT19SRVNFVCwgZmlyX2Jhc2UgKyBJUkNDX0xDUl9BKTsKIApAQCAtMTg5NCw3ICsxOTA3LDYgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCWRldiA9IHNlbGYtPm5ldGRldjsKIAlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc21zY19pcmNjX2hhcmRfeG1pdF9zaXI7CiAKIAlmaXJfYmFzZSA9IHNlbGYtPmlvLmZpcl9iYXNlOwogCXNpcl9iYXNlID0gc2VsZi0+aW8uc2lyX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKaW5kZXggOGIxNjU4Yy4uOGU1ZTQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwpAQCAtMTAwNyw2ICsxMDA3LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdGlyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gc3Rpcl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBzdGlyX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBzdGlyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBzdGlyX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKICAqIGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBvdXJzLCBhbmQgaW4KQEAgLTEwNTQsMTAgKzEwNjEsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJnN0aXItPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHN0aXJfaGFyZF94bWl0OwotCW5ldC0+b3BlbiAgICAgICAgICAgID0gc3Rpcl9uZXRfb3BlbjsKLQluZXQtPnN0b3AgICAgICAgICAgICA9IHN0aXJfbmV0X2Nsb3NlOwotCW5ldC0+ZG9faW9jdGwgICAgICAgID0gc3Rpcl9uZXRfaW9jdGw7CisJbmV0LT5uZXRkZXZfb3BzID0gJnN0aXJfbmV0ZGV2X29wczsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwppbmRleCA4YjNlNTQ1Li44NjQ3OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCkBAIC0zMTAsNiArMzEwLDE5IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyICgmdmlhX2RyaXZlcik7IAogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZpYV9pcmNjX3Npcl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X3NpciwKKwkubmRvX29wZW4gPSB2aWFfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZpYV9pcmNjX2Zpcl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X2ZpciwKKwkubmRvX29wZW4gPSB2aWFfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiB2aWFfaXJjY19vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC00MjgsMTAgKzQ0MSw3IEBACiAJc2VsZi0+dHhfZmlmby50YWlsID0gc2VsZi0+dHhfYnVmZi5oZWFkOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfc2lyOwotCWRldi0+b3BlbiA9IHZpYV9pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCA9IHZpYV9pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gdmlhX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19zaXJfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKQEAgLTc5OCwxMSArODA4LDExIEBACiAKIAlpZiAoc3BlZWQgPiAxMTUyMDApIHsKIAkJLyogSW5zdGFsbCBGSVIgeG1pdCBoYW5kbGVyICovCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X2ZpcjsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnZpYV9pcmNjX2Zpcl9vcHM7CiAJCXZpYV9pcmNjX2RtYV9yZWNlaXZlKHNlbGYpOwogCX0gZWxzZSB7CiAJCS8qIEluc3RhbGwgU0lSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19zaXJfb3BzOwogCX0KIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IDcyM2M0NTguLjEyNDNiYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC0xNTczLDYgKzE1NzMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bHNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gdmxzaV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHZsc2lfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gdmxzaV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gdmxzaV9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSB2bHNpX3R4X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IHZsc2lfaXJkYV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXZsc2lfaXJkYV9kZXZfdCAqaWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtMTYwOCwxMSArMTYxNiw3IEBACiAJbmRldi0+ZmxhZ3MgfD0gSUZGX1BPUlRTRUwgfCBJRkZfQVVUT01FRElBOwogCW5kZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047CiAgCi0JbmRldi0+b3BlbgkgICAgICA9IHZsc2lfb3BlbjsKLQluZGV2LT5zdG9wCSAgICAgID0gdmxzaV9jbG9zZTsKLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2bHNpX2hhcmRfc3RhcnRfeG1pdDsKLQluZGV2LT5kb19pb2N0bAkgICAgICA9IHZsc2lfaW9jdGw7Ci0JbmRldi0+dHhfdGltZW91dCAgICAgID0gdmxzaV90eF90aW1lb3V0OworCW5kZXYtPm5ldGRldl9vcHMgPSAmdmxzaV9uZXRkZXZfb3BzOwogCW5kZXYtPndhdGNoZG9nX3RpbWVvICA9IDUwMCpIWi8xMDAwOwkvKiBtYXguIGFsbG93ZWQgdHVybiB0aW1lIGZvciBJckxBUCAqLwogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKaW5kZXggZGMwYTJlNC4uZDA4ODM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYwpAQCAtMTQwLDYgKzE0MCwxMyBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3ODM5NzdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB3ODM5NzdhZl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSB3ODM5NzdhZl9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gdzgzOTc3YWZfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHc4Mzk3N2FmX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiB3ODM5NzdhZl9vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC0yMzEsMTEgKzIzOCw3IEBACiAJc2VsZi0+cnhfYnVmZi5kYXRhID0gc2VsZi0+cnhfYnVmZi5oZWFkOwogCXNlbGYtPm5ldGRldiA9IGRldjsKIAotCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdzgzOTc3YWZfaGFyZF94bWl0OwotCWRldi0+b3BlbiAgICAgICAgICAgID0gdzgzOTc3YWZfbmV0X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSB3ODM5NzdhZl9uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSB3ODM5NzdhZl9uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzCT0gJnc4Mzk3N19uZXRkZXZfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggZWVlMjhkMy4uNGIwZWE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC04ODcsMTkgKzg4NywxMyBAQAogaXhnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQotCWlmIChidWZmZXJfaW5mby0+ZG1hKQotCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLCBidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkgICAgICAgICAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCS8qIG9rYXkgdG8gY2FsbCBrZnJlZV9za2IgaGVyZSBpbnN0ZWFkIG9mIGtmcmVlX3NrYl9hbnkgYmVjYXVzZQotCSAqIHRoaXMgaXMgbmV2ZXIgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0ICovCi0JaWYgKGJ1ZmZlcl9pbmZvLT5za2IpCi0JCWRldl9rZnJlZV9za2IoYnVmZmVyX2luZm8tPnNrYik7Ci0KLQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAlidWZmZXJfaW5mby0+ZG1hID0gMDsKKwlpZiAoYnVmZmVyX2luZm8tPnNrYikgeworCQlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGJ1ZmZlcl9pbmZvLT5za2IsCisJCSAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOworCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwl9CiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSAwOwogCS8qIHRoZXNlIGZpZWxkcyBtdXN0IGFsd2F5cyBiZSBpbml0aWFsaXplZCBpbiB0eAogCSAqIGJ1ZmZlcl9pbmZvLT5sZW5ndGggPSAwOwpAQCAtMTI3NSwxNyArMTI2OSwyMyBAQAogewogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOwogCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87Ci0JaW50IGxlbiA9IHNrYi0+bGVuOworCWludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CiAJdW5zaWduZWQgaW50IG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCXVuc2lnbmVkIGludCBmOwotCi0JbGVuIC09IHNrYi0+ZGF0YV9sZW47CisJZG1hX2FkZHJfdCAqbWFwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCisJaWYgKHNrYl9kbWFfbWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCiAJd2hpbGUgKGxlbikgewogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKIAkJV0FSTl9PTihidWZmZXJfaW5mby0+ZG1hICE9IDApOwogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQorCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwWzBdICsgb2Zmc2V0OwogCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKIAkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCiAJCQkJc2l6ZSwKQEAgLTEzMDcsNyArMTMwNywxMSBAQAogCQlsZW4gLT0gc2l6ZTsKIAkJb2Zmc2V0ICs9IHNpemU7CiAJCWNvdW50Kys7Ci0JCWlmICgrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOworCQlpZiAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0xMzE4LDYgKzEzMjIsMTAgQEAKIAkJb2Zmc2V0ID0gMDsKIAogCQl3aGlsZSAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgSVhHQl9NQVhfREFUQV9QRVJfVFhEKTsKIApAQCAtMTMyOSwyMSArMTMzNywxNCBAQAogCiAJCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKIAkJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKLQkJCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJCXBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCQlmcmFnLT5wYWdlLAotCQkJCQlmcmFnLT5wYWdlX29mZnNldCArIG9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gMDsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKIAkJfQogCX0KLQlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0xNDQ1LDYgKzE0NDYsNyBAQAogCXVuc2lnbmVkIGludCBmaXJzdDsKIAl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOwogCWludCB2bGFuX2lkID0gMDsKKwlpbnQgY291bnQgPSAwOwogCWludCB0c287CiAKIAlpZiAodGVzdF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncykpIHsKQEAgLTE0NzksMTMgKzE0ODEsMTkgQEAKIAllbHNlIGlmIChpeGdiX3R4X2NzdW0oYWRhcHRlciwgc2tiKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19DU1VNOwogCi0JaXhnYl90eF9xdWV1ZShhZGFwdGVyLCBpeGdiX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0KSwgdmxhbl9pZCwKLQkJCXR4X2ZsYWdzKTsKKwljb3VudCA9IGl4Z2JfdHhfbWFwKGFkYXB0ZXIsIHNrYiwgZmlyc3QpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWl4Z2JfdHhfcXVldWUoYWRhcHRlciwgY291bnQsIHZsYW5faWQsIHR4X2ZsYWdzKTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsIERFU0NfTkVFREVEKTsKIAotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQlpeGdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCAmYWRhcHRlci0+dHhfcmluZywgREVTQ19ORUVERUQpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWFkYXB0ZXItPnR4X3JpbmcuYnVmZmVyX2luZm9bZmlyc3RdLnRpbWVfc3RhbXAgPSAwOworCQlhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTE3MjEsMTQgKzE3MjksMTQgQEAKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIHJlZ2lzdGVyIGZvciBwb2xsLiBUaGUgZmx1c2gKIAkJICBvZiB0aGUgcG9zdGVkIHdyaXRlIGlzIGludGVudGlvbmFsbHkgbGVmdCBvdXQuCiAJCSovCiAKIAkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIH4wKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE3NDksNyArMTc1Nyw3IEBACiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAoIXRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQogCQkJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCX0KQEAgLTE4MTgsNyArMTgyNiw3IEBACiAJCS8qIGRldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKIAkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaSAqLwogCQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IGZhbHNlOwotCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKKwkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCAmJgogCQkgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArIEhaKQogCQkgICAmJiAhKElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYKIAkJICAgICAgICBJWEdCX1NUQVRVU19UWE9GRikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKaW5kZXggNmU3ZWY3Ni4uYjNmODIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisjIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMzLDYgKzMzLDcgQEAKIG9iai0kKENPTkZJR19JWEdCRSkgKz0gaXhnYmUubwogCiBpeGdiZS1vYmpzIDo9IGl4Z2JlX21haW4ubyBpeGdiZV9jb21tb24ubyBpeGdiZV9ldGh0b29sLm8gXAotICAgICAgICAgICAgICBpeGdiZV84MjU5OC5vIGl4Z2JlX3BoeS5vCisgICAgICAgICAgICAgIGl4Z2JlXzgyNTk5Lm8gaXhnYmVfODI1OTgubyBpeGdiZV9waHkubwogCi1peGdiZS0kKENPTkZJR19JWEdCRV9EQ0IpICs9ICBpeGdiZV9kY2IubyBpeGdiZV9kY2JfODI1OTgubyBpeGdiZV9kY2JfbmwubworaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfZGNiXzgyNTk5Lm8gaXhnYmVfZGNiX25sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IGUxMTIwMDguLmMyNjQzM2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgpAQCAtNzIsNiArNzEsNyBAQAogI2RlZmluZSBJWEdCRV9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIElYR0JFX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KICNkZWZpbmUgSVhHQkVfUlhCVUZGRVJfMjA0OCAgMjA0OAorI2RlZmluZSBJWEdCRV9NQVhfUlhCVUZGRVIgICAxNjM4NCAgLyogbGFyZ2VzdCBzaXplIGZvciBhIHNpbmdsZSBkZXNjcmlwdG9yICovCiAKICNkZWZpbmUgSVhHQkVfUlhfSERSX1NJWkUgSVhHQkVfUlhCVUZGRVJfMjU2CiAKQEAgLTg4LDkgKzg4LDYgQEAKICNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9QUklPX01BU0sgICAweDAwMDBlMDAwCiAjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKIAotI2RlZmluZSBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTICAgICAgIDgKLSNkZWZpbmUgSVhHQkVfTUFYX0xST19BR0dSRUdBVEUgICAgICAgICAzMgotCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTE0MiwyMSArMTM5LDI1IEBACiAJLyogY3B1IGZvciB0eCBxdWV1ZSAqLwogCWludCBjcHU7CiAjZW5kaWYKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlib29sIGxyb191c2VkOwogCXN0cnVjdCBpeGdiZV9xdWV1ZV9zdGF0cyBzdGF0czsKLQl1MTYgdl9pZHg7IC8qIG1hcHMgZGlyZWN0bHkgdG8gdGhlIGluZGV4IGZvciB0aGlzIHJpbmcgaW4gdGhlIGhhcmR3YXJlCi0JICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKLQkgICAgICAgICAgICogYW5kIGZyaWVuZHMgdGhhdCByZXByZXNlbnRzIHRoZSB2ZWN0b3IgZm9yIHRoaXMgcmluZyAqLworCXU2NCB2X2lkeDsgLyogbWFwcyBkaXJlY3RseSB0byB0aGUgaW5kZXggZm9yIHRoaXMgcmluZyBpbiB0aGUgaGFyZHdhcmUKKwkgICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKKwkgICAgICAgICAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KIAogCiAJdTE2IHdvcmtfbGltaXQ7ICAgICAgICAgICAgICAgIC8qIG1heCB3b3JrIHBlciBpbnRlcnJ1cHQgKi8KIAl1MTYgcnhfYnVmX2xlbjsKIH07CiAKLSNkZWZpbmUgUklOR19GX0RDQiAgMAotI2RlZmluZSBSSU5HX0ZfVk1EUSAxCi0jZGVmaW5lIFJJTkdfRl9SU1MgIDIKK2VudW0gaXhnYmVfcmluZ19mX2VudW0geworCVJJTkdfRl9OT05FID0gMCwKKwlSSU5HX0ZfRENCLAorCVJJTkdfRl9WTURRLAorCVJJTkdfRl9SU1MsCisKKwlSSU5HX0ZfQVJSQVlfU0laRSAgICAgIC8qIG11c3QgYmUgbGFzdCBpbiBlbnVtIHNldCAqLworfTsKKwogI2RlZmluZSBJWEdCRV9NQVhfRENCX0lORElDRVMgICA4CiAjZGVmaW5lIElYR0JFX01BWF9SU1NfSU5ESUNFUyAgMTYKICNkZWZpbmUgSVhHQkVfTUFYX1ZNRFFfSU5ESUNFUyAxNgpAQCAtMTY1LDggKzE2Niw4IEBACiAJaW50IG1hc2s7CiB9OwogCi0jZGVmaW5lIE1BWF9SWF9RVUVVRVMgNjQKLSNkZWZpbmUgTUFYX1RYX1FVRVVFUyAzMgorI2RlZmluZSBNQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDEyOAogCiAjZGVmaW5lIE1BWF9SWF9QQUNLRVRfQlVGRkVSUyAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4IDogMSkKQEAgLTE4OCwxMCArMTg5LDExIEBACiB9OwogCiAvKiBIZWxwZXIgbWFjcm9zIHRvIHN3aXRjaCBiZXR3ZWVuIGludHMvc2VjIGFuZCB3aGF0IHRoZSByZWdpc3RlciB1c2VzLgotICogQW5kIHllcywgaXQncyB0aGUgc2FtZSBtYXRoIGdvaW5nIGJvdGggd2F5cy4KKyAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuICBUaGUgbG93ZXN0IHZhbHVlCisgKiBzdXBwb3J0ZWQgYnkgYWxsIG9mIHRoZSBpeGdiZSBoYXJkd2FyZSBpcyA4LgogICovCiAjZGVmaW5lIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhfZWl0cikgXAotCSgoX2VpdHIpID8gKDEwMDAwMDAwMDAgLyAoKF9laXRyKSAqIDI1NikpIDogMCkKKwkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDgpCiAjZGVmaW5lIEVJVFJfUkVHX1RPX0lOVFNfUEVSX1NFQyBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcKIAogI2RlZmluZSBJWEdCRV9ERVNDX1VOVVNFRChSKSBcCkBAIC0yMTAsOSArMjEyLDE1IEBACiAjZGVmaW5lIE9USEVSX1ZFQ1RPUiAxCiAjZGVmaW5lIE5PTl9RX1ZFQ1RPUlMgKE9USEVSX1ZFQ1RPUikKIAotI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgMTYKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OSA2NAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTkgNjQKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OCAxOAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTggMTYKKworI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk5CisjZGVmaW5lIE1BWF9NU0lYX0NPVU5UIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTkKKwogI2RlZmluZSBNSU5fTVNJWF9RX1ZFQ1RPUlMgMgotI2RlZmluZSBNQVhfTVNJWF9DT1VOVCAoTUFYX01TSVhfUV9WRUNUT1JTICsgTk9OX1FfVkVDVE9SUykKICNkZWZpbmUgTUlOX01TSVhfQ09VTlQgKE1JTl9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KQEAgLTIyMiw3ICsyMzAsNyBAQAogCXUxNiBiZF9udW1iZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yIHFfdmVjdG9yW01BWF9NU0lYX1FfVkVDVE9SU107Ci0JY2hhciBuYW1lW01BWF9NU0lYX0NPVU5UXVtJRk5BTVNJWiArIDVdOworCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA5XTsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyBkY2JfY2ZnOwogCXN0cnVjdCBpeGdiZV9kY2JfY29uZmlnIHRlbXBfZGNiX2NmZzsKIAl1OCBkY2Jfc2V0X2JpdG1hcDsKQEAgLTI0NywxMCArMjU1LDEyIEBACiAJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3Jpbmc7CS8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCiAJaW50IG51bV9yeF9xdWV1ZXM7CiAJdTY0IGh3X2NzdW1fcnhfZXJyb3I7CisJdTY0IGh3X3J4X25vX2RtYV9yZXNvdXJjZXM7CiAJdTY0IGh3X2NzdW1fcnhfZ29vZDsKIAl1NjQgbm9uX2VvcF9kZXNjczsKIAlpbnQgbnVtX21zaXhfdmVjdG9yczsKLQlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVszXTsKKwlpbnQgbWF4X21zaXhfcV92ZWN0b3JzOyAgICAgICAgIC8qIHRydWUgY291bnQgb2YgcV92ZWN0b3JzIGZvciBkZXZpY2UgKi8KKwlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVtSSU5HX0ZfQVJSQVlfU0laRV07CiAJc3RydWN0IG1zaXhfZW50cnkgKm1zaXhfZW50cmllczsKIAogCXU2NCByeF9oZHJfc3BsaXQ7CkBAIC0yNzQsNiArMjg0LDcgQEAKICNkZWZpbmUgSVhHQkVfRkxBR19EQ0FfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTEpCiAjZGVmaW5lIElYR0JFX0ZMQUdfSU1JUl9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEyKQogI2RlZmluZSBJWEdCRV9GTEFHX01RX0NBUEFCTEUgICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMykKKyNkZWZpbmUgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTQpCiAjZGVmaW5lIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE2KQogI2RlZmluZSBJWEdCRV9GTEFHX1JTU19DQVBBQkxFICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNykKICNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTgpCkBAIC0yODEsNyArMjkyLDggQEAKICNkZWZpbmUgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFICAgICAgICAgICAgICh1MzIpKDEgPDwgMjApCiAjZGVmaW5lIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSAgICAgICAgICAgICAodTMyKSgxIDw8IDIyKQogI2RlZmluZSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyMykKLSNkZWZpbmUgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjQpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNSkKIAogLyogZGVmYXVsdCB0byB0cnlpbmcgZm9yIGZvdXIgc2Vjb25kcyAqLwogI2RlZmluZSBJWEdCRV9UUllfTElOS19USU1FT1VUICg0ICogSFopCkBAIC0zMDEsOSArMzEzLDYgQEAKIAogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTY0IHR4X2J1c3k7Ci0JdTY0IGxyb19hZ2dyZWdhdGVkOwotCXU2NCBscm9fZmx1c2hlZDsKLQl1NjQgbHJvX25vX2Rlc2M7CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CiAKQEAgLTMxNCw2ICszMjMsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2ZwX3Rhc2s7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc2ZwX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHNmcF9jb25maWdfbW9kdWxlX3Rhc2s7CisJdTMyIHdvbDsKKwl1MTYgZWVwcm9tX3ZlcnNpb247CiB9OwogCiBlbnVtIGl4YmdlX3N0YXRlX3QgewpAQCAtMzI1LDkgKzMzOCwxMSBAQAogCiBlbnVtIGl4Z2JlX2JvYXJkcyB7CiAJYm9hcmRfODI1OTgsCisJYm9hcmRfODI1OTksCiB9OwogCiBleHRlcm4gc3RydWN0IGl4Z2JlX2luZm8gaXhnYmVfODI1OThfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OV9pbmZvOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIGV4dGVybiBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgZGNibmxfb3BzOwogZXh0ZXJuIGludCBpeGdiZV9jb3B5X2RjYl9jZmcoc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKnNyY19kY2JfY2ZnLApAQCAtMzUyLDUgKzM2Nyw2IEBACiBleHRlcm4gaW50IGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGl4Z2JlX25hcGlfZGVsX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZV93cml0ZV9laXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICosIGludCwgdTMyKTsKIAogI2VuZGlmIC8qIF9JWEdCRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKaW5kZXggYWQ1Njk5ZC4uZWQyNjVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTAsNiArNTAsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSk7CiAKIC8qKgorICogIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTggLSBHZXRzIE1TSS1YIHZlY3RvciBjb3VudAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCisgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KKyAqKi8KK3N0YXRpYyB1MTYgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IG1zaXhfY291bnQ7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJRV9NU0lYXzgyNTk4X0NBUFMsCisJICAgICAgICAgICAgICAgICAgICAgJm1zaXhfY291bnQpOworCW1zaXhfY291bnQgJj0gSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLOworCisJLyogTVNJLVggY291bnQgaXMgemVyby1iYXNlZCBpbiBIVywgc28gaW5jcmVtZW50IHRvIGdpdmUgcHJvcGVyIHZhbHVlICovCisJbXNpeF9jb3VudCsrOworCisJcmV0dXJuIG1zaXhfY291bnQ7Cit9CisKKy8qKgogICovCiBzdGF0aWMgczMyIGl4Z2JlX2dldF9pbnZhcmlhbnRzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CkBAIC01OCw2ICs3OSw5IEBACiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQ7CiAKKwkvKiBTZXQgdGhlIGJ1cyBpbmZvcm1hdGlvbiBwcmlvciB0byBQSFkgaWRlbnRpZmljYXRpb24gKi8KKwltYWMtPm9wcy5nZXRfYnVzX2luZm8oaHcpOworCiAJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIHBoeSB0eXBlICovCiAJaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOwogCkBAIC0xMDYsNiArMTMwLDcgQEAKIAltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFXzgyNTk4X1JBUl9FTlRSSUVTOwogCW1hYy0+bWF4X3J4X3F1ZXVlcyA9IElYR0JFXzgyNTk4X01BWF9SWF9RVUVVRVM7CiAJbWFjLT5tYXhfdHhfcXVldWVzID0gSVhHQkVfODI1OThfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk4KGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMTI0LDE4ICsxNDksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpCiB7CiAJczMyIHN0YXR1cyA9IDA7Ci0JczMyIGF1dG9jX3JlZzsKIAotCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0KLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvY19yZWcgJj0gfklYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRTsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19hdHRhY2hfdHlwZTsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQl9Ci0KLQlzd2l0Y2ggKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CisJLyoKKwkgKiBEZXRlcm1pbmUgbGluayBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdGhlIHN0b3JlZCB2YWx1ZSBvZiBBVVRPQywKKwkgKiB3aGljaCByZXByZXNlbnRzIEVFUFJPTSBkZWZhdWx0cy4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CiAJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjoKIAkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKIAkJKmF1dG9uZWcgPSBmYWxzZTsKQEAgLTE1NCw5ICsxNzMsOSBAQAogCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTjoKIAljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU46CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKLQkJaWYgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCiAJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0JCWlmIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19LWF9TVVBQKQorCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKIAkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOwogCQkqYXV0b25lZyA9IHRydWU7CiAJCWJyZWFrOwpAQCAtMjEzLDYgKzIzMiwxMCBAQAogCiAJLyogTWVkaWEgdHlwZSBmb3IgSTgyNTk4IGlzIGJhc2VkIG9uIGRldmljZSBJRCAqLwogCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmU7CisJCWJyZWFrOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QUZfU0lOR0xFX1BPUlQ6CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OThFQl9DWDQ6CkBAIC0yMzUsNiArMjU4LDEwMiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mY19lbmFibGVfODI1OTggLSBFbmFibGUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBwYWNrZXRidWZfbnVtOiBwYWNrZXQgYnVmZmVyIG51bWJlciAoMC03KQorICoKKyAqICBFbmFibGUgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZmNfZW5hYmxlXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgZmN0cmxfcmVnOworCXUzMiBybWNzX3JlZzsKKwl1MzIgcmVnOworCisJZmN0cmxfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKKwlmY3RybF9yZWcgJj0gfihJWEdCRV9GQ1RSTF9SRkNFIHwgSVhHQkVfRkNUUkxfUlBGQ0UpOworCisJcm1jc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7CisJcm1jc19yZWcgJj0gfihJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFkgfCBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6IEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogMTogUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQKKwkgKiAgICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCWZjdHJsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJZmN0cmxfcmVnIHw9IElYR0JFX0ZDVFJMX1JGQ0U7CisJCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybF9yZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUk1DUywgcm1jc19yZWcpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLCBlbmFibGUgWE9OLiAqLworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTChwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAoaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkUpKTsKKwkJfSBlbHNlIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgaHctPmZjLmxvd193YXRlcik7CisJCX0KKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIKHBhY2tldGJ1Zl9udW0pLAorCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyIHwgSVhHQkVfRkNSVEhfRkNFTikpOworCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0pKTsKKwlpZiAoKHBhY2tldGJ1Zl9udW0gJiAxKSA9PSAwKQorCQlyZWcgPSAocmVnICYgMHhGRkZGMDAwMCkgfCBody0+ZmMucGF1c2VfdGltZTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiAweDAwMDBGRkZGKSB8IChody0+ZmMucGF1c2VfdGltZSA8PCAxNik7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtIC8gMiksIHJlZyk7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGl4Z2JlX3NldHVwX2ZjXzgyNTk4IC0gQ29uZmlndXJlIGZsb3cgY29udHJvbCBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKQEAgLTI0NCwxMTAgKzM2Myw2NCBAQAogICoqLwogc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9mY184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKIHsKLQl1MzIgZnJjdGxfcmVnOwotCXUzMiBybWNzX3JlZzsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBzcGVlZDsKKwlib29sIGxpbmtfdXA7CiAKKwkvKiBWYWxpZGF0ZSB0aGUgcGFja2V0YnVmIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAocGFja2V0YnVmX251bSA8IDAgfHwgcGFja2V0YnVmX251bSA+IDcpIHsKIAkJaHdfZGJnKGh3LCAiSW52YWxpZCBwYWNrZXQgYnVmZmVyIG51bWJlciBbJWRdLCBleHBlY3RlZCByYW5nZSBpcyIKIAkJICAgICAgICAgICIgMC03XG4iLCBwYWNrZXRidWZfbnVtKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OwogCX0KIAotCWZyY3RsX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7Ci0JZnJjdGxfcmVnICY9IH4oSVhHQkVfRkNUUkxfUkZDRSB8IElYR0JFX0ZDVFJMX1JQRkNFKTsKLQotCXJtY3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotCXJtY3NfcmVnICY9IH4oSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIHwgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7Ci0KIAkvKgotCSAqIDEwIGdpZyBwYXJ0cyBkbyBub3QgaGF2ZSBhIHdvcmQgaW4gdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlCi0JICogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gZnVsbC4KLQkgKi8KLQlpZiAoaHctPmZjLnR5cGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOwotCi0JLyoKLQkgKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0IGluCi0JICogY2FzZSB3ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQgaHViCi0JICogb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRpZXMuCi0JICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKLQotCS8qCi0JICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgImZsb3dfY29udHJvbCIgcGFyYW1ldGVyIGFyZToKLQkgKiAwOiBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAotCSAqIDE6IFJ4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gcmVjZWl2ZSBwYXVzZSBmcmFtZXMgYnV0IG5vdAotCSAqICAgIHNlbmQgcGF1c2UgZnJhbWVzKS4KLQkgKiAyOiBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dCB3ZSBkbyBub3QKLQkgKiAgICBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpCi0JICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgotCSAqIG90aGVyOiBJbnZhbGlkLgotCSAqLwotCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKLQljYXNlIGl4Z2JlX2ZjX25vbmU6Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6Ci0JCS8qCi0JCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLAotCQkgKiBhbmQgVHggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLgotCQkgKi8KLQkJZnJjdGxfcmVnIHw9IElYR0JFX0ZDVFJMX1JGQ0U7Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfdHhfcGF1c2U6Ci0JCS8qCi0JCSAqIFR4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgUnggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLAotCQkgKiBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4KLQkJICovCi0JCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfZnVsbDoKLQkJLyoKLQkJICogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBhIHNvZnR3YXJlCi0JCSAqIG92ZXItcmlkZS4KLQkJICovCi0JCWZyY3RsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOwotCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuICBUaGUgdmFsdWUgc2hvdWxkIGJlIDAtMy4gKi8KLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEVuYWJsZSA4MDIuM3ggYmFzZWQgZmxvdyBjb250cm9sIHNldHRpbmdzLiAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUUkwsIGZyY3RsX3JlZyk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9STUNTLCBybWNzX3JlZyk7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBpbnZhbGlkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24sIHplcm9zIGFyZSBjb21wbGV0ZWx5Ci0JICogaW52YWxpZCBmb3IgYWxsIHBhcmFtZXRlcnMgdXNlZCBwYXN0IHRoaXMgcG9pbnQsIGFuZCBpZiB3ZSBlbmFibGUKLQkgKiBmbG93IGNvbnRyb2wgd2l0aCB6ZXJvIHdhdGVyIG1hcmtzLCB3ZSBibGFzdCBmbG93IGNvbnRyb2wgcGFja2V0cy4KKwkgKiBWYWxpZGF0ZSB0aGUgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uLiAgWmVybyB3YXRlciBtYXJrcyBhcmUgaW52YWxpZAorCSAqIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGp1c3QgYmxhc3Qgb3V0IGZjIHBhY2tldHMuCiAJICovCiAJaWYgKCFody0+ZmMubG93X3dhdGVyIHx8ICFody0+ZmMuaGlnaF93YXRlciB8fCAhaHctPmZjLnBhdXNlX3RpbWUpIHsKLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHN0cnVjdHVyZSBpbml0aWFsaXplZCBpbmNvcnJlY3RseVxuIik7Ci0JCXJldHVybiBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlod19kYmcoaHcsICJJbnZhbGlkIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvblxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBSZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIKLQkgKiBtYXJrcyBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mCi0JICogWE9OIGZyYW1lcy4KKwkgKiBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIG1vZGUuICBTdHJpY3QgSUVFRSBtb2RlIGRvZXMgbm90IGFsbG93CisJICogaXhnYmVfZmNfcnhfcGF1c2UgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHRlc3RpbmcgYW5vbWFsaWVzLgogCSAqLwotCWlmIChody0+ZmMudHlwZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKSB7Ci0JCWlmIChody0+ZmMuc2VuZF94b24pIHsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCi0JCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7Ci0JCX0gZWxzZSB7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgIGh3LT5mYy5sb3dfd2F0ZXIpOwotCQl9Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEgocGFja2V0YnVmX251bSksCi0JCSAgICAgICAgICAgICAgICAoaHctPmZjLmhpZ2hfd2F0ZXIpfElYR0JFX0ZDUlRIX0ZDRU4pOworCWlmIChody0+ZmMuc3RyaWN0X2llZWUgJiYgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJCWh3X2RiZyhodywgIml4Z2JlX2ZjX3J4X3BhdXNlIG5vdCB2YWxpZCBpbiBzdHJpY3QgSUVFRSBtb2RlXG4iKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OwogCX0KIAotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYoMCksIGh3LT5mYy5wYXVzZV90aW1lKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCS8qCisJICogMTBnaWcgcGFydHMgZG8gbm90IGhhdmUgYSB3b3JkIGluIHRoZSBFRVBST00gdG8gZGV0ZXJtaW5lIHRoZQorCSAqIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmcsIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGZ1bGwuCisJICovCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19kZWZhdWx0KQorCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOwogCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBTYXZlIG9mZiB0aGUgcmVxdWVzdGVkIGZsb3cgY29udHJvbCBtb2RlIGZvciB1c2UgbGF0ZXIuICBEZXBlbmRpbmcKKwkgKiBvbiB0aGUgbGluayBwYXJ0bmVyJ3MgY2FwYWJpbGl0aWVzLCB3ZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhpcyBtb2RlLgorCSAqLworCisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhdXRvbmVnIG9yIG5vdC4gKi8KKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlciAmJiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCisJCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKKworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9mY19lbmFibGVfODI1OTgoaHcsIHBhY2tldGJ1Zl9udW0pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgpAQCAtMzY0LDI3ICs0MzcsMTcgQEAKIAl1MzIgaTsKIAlzMzIgc3RhdHVzID0gMDsKIAotCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0KLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvY19yZWcgJj0gfklYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRTsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19hdHRhY2hfdHlwZTsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwotCQlJWEdCRV9XUklURV9GTFVTSChodyk7Ci0JCW1zbGVlcCg1MCk7Ci0JfQotCiAJLyogUmVzdGFydCBsaW5rICovCisJYXV0b2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKIAlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwogCiAJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLwogCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewotCQlpZiAoaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKLQkJICAgIGh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOKSB7CisJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTiB8fAorCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU4pIHsKIAkJCWxpbmtzX3JlZyA9IDA7IC8qIEp1c3QgaW4gY2FzZSBBdXRvbmVnIHRpbWUgPSAwICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfQVVUT19ORUdfVElNRTsgaSsrKSB7CiAJCQkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKQEAgLTQwNCw3ICs0NjcsNiBAQAogCSAqIGNhc2Ugd2UgZ2V0IGRpc2Nvbm5lY3RlZCBhbmQgdGhlbiByZWNvbm5lY3RlZCBpbnRvIGEgZGlmZmVyZW50IGh1YgogCSAqIG9yIHN3aXRjaCB3aXRoIGRpZmZlcmVudCBGbG93IENvbnRyb2wgY2FwYWJpbGl0aWVzLgogCSAqLwotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CiAJaXhnYmVfc2V0dXBfZmNfODI1OTgoaHcsIDApOwogCiAJLyogQWRkIGRlbGF5IHRvIGZpbHRlciBvdXQgbm9pc2VzIGR1cmluZyBpbml0aWFsIGxpbmsgc2V0dXAgKi8KQEAgLTUwOCwzNyArNTcwLDQzIEBACiAgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCiB7Ci0JczMyIHN0YXR1cyA9IDA7CisJczMyICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX2NhcGFiaWxpdGllcyA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKwl1MzIgICAgICAgICAgICAgIGN1cnJfYXV0b2MgICAgICAgID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwl1MzIgICAgICAgICAgICAgIGF1dG9jICAgICAgICAgICAgID0gY3Vycl9hdXRvYzsKKwl1MzIgICAgICAgICAgICAgIGxpbmtfbW9kZSAgICAgICAgID0gYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSzsKIAotCS8qIElmIHNwZWVkIGlzIDEwRywgdGhlbiBjaGVjayBmb3IgQ1g0IG9yIFhBVUkuICovCi0JaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgJiYKLQkgICAgKCEoaHctPm1hYy5saW5rX2F0dGFjaF90eXBlICYgSVhHQkVfQVVUT0NfMTBHX0tYNCkpKSB7Ci0JCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjsKLQl9IGVsc2UgaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSAmJiAoIWF1dG9uZWcpKSB7Ci0JCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOOwotCX0gZWxzZSBpZiAoYXV0b25lZykgewotCQkvKiBCWCBtb2RlIC0gQXV0b25lZ290aWF0ZSAxRyAqLwotCQlpZiAoIShody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgJiBJWEdCRV9BVVRPQ18xR19QTUFfUE1EKSkKLQkJCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xR19BTjsKLQkJZWxzZSAvKiBLWC9LWDQgbW9kZSAqLwotCQkJaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTjsKLQl9IGVsc2UgeworCS8qIENoZWNrIHRvIHNlZSBpZiBzcGVlZCBwYXNzZWQgaW4gaXMgc3VwcG9ydGVkLiAqLworCWl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OChodywgJmxpbmtfY2FwYWJpbGl0aWVzLCAmYXV0b25lZyk7CisJc3BlZWQgJj0gbGlua19jYXBhYmlsaXRpZXM7CisKKwlpZiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKQogCQlzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKKworCS8qIFNldCBLWDQvS1ggc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWQgcmVxdWVzdGVkICovCisJZWxzZSBpZiAobGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKKwkgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTikgeworCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSzsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWDRfU1VQUDsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkKKwkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0tYX1NVUFA7CisJCWlmIChhdXRvYyAhPSBjdXJyX2F1dG9jKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOwogCX0KIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTsKIAotCQlody0+bWFjLmxpbmtfc2V0dGluZ3NfbG9hZGVkID0gdHJ1ZTsKIAkJLyoKIAkJICogU2V0dXAgYW5kIHJlc3RhcnQgdGhlIGxpbmsgYmFzZWQgb24gdGhlIG5ldyB2YWx1ZXMgaW4KIAkJICogaXhnYmVfaHcgVGhpcyB3aWxsIHdyaXRlIHRoZSBBVVRPQyByZWdpc3RlciBiYXNlZCBvbiB0aGUgbmV3CiAJCSAqIHN0b3JlZCB2YWx1ZXMKIAkJICovCi0JCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKKwkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC01NjEsMTAgKzYyOSw2IEBACiAJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCiAJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7CiAKLQkvKiBTZXQgTUFDIHRvIEtYL0tYNCBhdXRvbmVnLCB3aGljaCBkZWZhdWx0cyB0byBQYXJhbGxlbCBkZXRlY3Rpb24gKi8KLQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPSAoSVhHQkVfQVVUT0NfMTBHX0tYNCB8IElYR0JFX0FVVE9DXzFHX0tYKTsKLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOOwotCiAJLyogU2V0IHVwIE1BQyAqLwogCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIApAQCAtNTkxLDEwICs2NTUsNiBAQAogCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmtfc3BlZWQoaHcsIHNwZWVkLCBhdXRvbmVnLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAotCS8qIFNldCBNQUMgdG8gS1gvS1g0IGF1dG9uZWcsIHdoaWNoIGRlZmF1bHRzIHRvIFBhcmFsbGVsIGRldGVjdGlvbiAqLwotCWh3LT5tYWMubGlua19hdHRhY2hfdHlwZSA9IChJWEdCRV9BVVRPQ18xMEdfS1g0IHwgSVhHQkVfQVVUT0NfMUdfS1gpOwotCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU19LWDRfQU47Ci0KIAkvKiBTZXQgdXAgTUFDICovCiAJaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwogCkBAIC02OTQsMjQgKzc1NCwxNiBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR0hFQ0NSLCBnaGVjY3IpOwogCiAJLyoKLQkgKiBBVVRPQyByZWdpc3RlciB3aGljaCBzdG9yZXMgbGluayBzZXR0aW5ncyBnZXRzIGNsZWFyZWQKLQkgKiBhbmQgcmVsb2FkZWQgZnJvbSBFRVBST00gYWZ0ZXIgcmVzZXQuIFdlIG5lZWQgdG8gcmVzdG9yZQotCSAqIG91ciBzdG9yZWQgdmFsdWUgZnJvbSBpbml0IGluIGNhc2UgU1cgY2hhbmdlZCB0aGUgYXR0YWNoCi0JICogdHlwZSBvciBzcGVlZC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgYW5kIGxpbmsgc2V0dGluZ3MKLQkgKiBoYXZlIG5vdCBiZWVuIHN0b3JlZCwgc3RvcmUgZGVmYXVsdCBzZXR0aW5ncyBmcm9tIEFVVE9DLgorCSAqIFN0b3JlIHRoZSBvcmlnaW5hbCBBVVRPQyB2YWx1ZSBpZiBpdCBoYXMgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiBBVVRPQyB2YWx1ZSBzaW5jZSB0aGUgcmVzZXQgb3BlcmF0aW9uIHNldHMgYmFjayB0byBkZWF1bHRzLgogCSAqLwogCWF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRSk7Ci0JCWF1dG9jICY9IH4oSVhHQkVfQVVUT0NfTE1TX01BU0spOwotCQlhdXRvYyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOwotCX0gZWxzZSB7Ci0JCWh3LT5tYWMubGlua19hdHRhY2hfdHlwZSA9Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAoYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUpOwotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSAoYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSyk7Ci0JCWh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQgPSB0cnVlOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIGlmIChhdXRvYyAhPSBody0+bWFjLm9yaWdfYXV0b2MpIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgaHctPm1hYy5vcmlnX2F1dG9jKTsKIAl9CiAKIAkvKiBTdG9yZSB0aGUgcGVybWFuZW50IG1hYyBhZGRyZXNzICovCkBAIC05OTcsMTEgKzEwNDksMTggQEAKICAqCiAgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KICAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHUzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7Ci0JczMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOwogCiAJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTg6CisJCS8qIERlZmF1bHQgZGV2aWNlIElEIGlzIG1lenphbmluZSBjYXJkIEtYL0tYNCAqLworCQlwaHlzaWNhbF9sYXllciA9IChJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX0tYNCB8CisJCQkJICBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9LWCk7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0JYOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4RUJfQ1g0OgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0NYNF9EVUFMX1BPUlQ6CiAJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9DWDQ7CkBAIC0xMDU1LDggKzExMTQsMTEgQEAKIAkuY2xlYXJfaHdfY250cnMJCT0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCiAJLmdldF9tZWRpYV90eXBlCQk9ICZpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OCwKIAkuZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllciA9ICZpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk4LAorCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYywKIAkuZ2V0X21hY19hZGRyCQk9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKIAkuc3RvcF9hZGFwdGVyCQk9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKKwkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKKwkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKIAkucmVhZF9hbmFsb2dfcmVnOAk9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk4LAogCS53cml0ZV9hbmFsb2dfcmVnOAk9ICZpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OCwKIAkuc2V0dXBfbGluawkJPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFlN2UwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpAQCAtMCwwICsxLDEyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgorCisjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTICAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X01DX1RCTF9TSVpFICAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRSAgMTI4CisKK3MzMiBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOworZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpsaW5rX3VwLCBib29sIGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzdGF0aWMgczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZyk7CitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKK3MzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7CitzMzIgaXhnYmVfY2xlYXJfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7CitzMzIgaXhnYmVfc2V0X3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZsYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZpbmQsIGJvb2wgdmxhbl9vbik7CitzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9ibGlua19sZWRfc3RvcF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOworczMyIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOworczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4ICp2YWwpOworczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCk7CitzMzIgaXhnYmVfc3RhcnRfaHdfcmV2XzBfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwordTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CisKK3ZvaWQgaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKKwkJLyogU2V0IHVwIGR1YWwgc3BlZWQgU0ZQKyBzdXBwb3J0ICovCisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXI7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXI7CisJfSBlbHNlIHsKKwkJbWFjLT5vcHMuc2V0dXBfbGluayA9CisJCSAgICAgICAgICAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTk7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5OworCX0KK30KKworczMyIGl4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQsIGRhdGFfdmFsdWU7CisKKwlpZiAoaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV91bmtub3duKSB7CisJCWl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KGh3KTsKKwkJcmV0X3ZhbCA9IGl4Z2JlX2dldF9zZnBfaW5pdF9zZXF1ZW5jZV9vZmZzZXRzKGh3LCAmbGlzdF9vZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vZmZzZXQpOworCisJCWlmIChyZXRfdmFsICE9IDApCisJCQlnb3RvIHNldHVwX3NmcF9vdXQ7CisKKwkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOworCQl3aGlsZSAoZGF0YV92YWx1ZSAhPSAweGZmZmYpIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgZGF0YV92YWx1ZSk7CisJCQlJWEdCRV9XUklURV9GTFVTSChodyk7CisJCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCArK2RhdGFfb2Zmc2V0LCAmZGF0YV92YWx1ZSk7CisJCX0KKwkJLyogTm93IHJlc3RhcnQgRFNQICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgMHgwMDAwMDEwMik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgMHgwMDAwMGIxZCk7CisJCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl9CisKK3NldHVwX3NmcF9vdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTkgLSBHZXRzIE1TSS1YIHZlY3RvciBjb3VudAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCisgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KKyAqKi8KK3UzMiBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwl1MTYgbXNpeF9jb3VudDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBJWEdCRV9QQ0lFX01TSVhfODI1OTlfQ0FQUywKKwkgICAgICAgICAgICAgICAgICAgICAmbXNpeF9jb3VudCk7CisJbXNpeF9jb3VudCAmPSBJWEdCRV9QQ0lFX01TSVhfVEJMX1NaX01BU0s7CisKKwkvKiBNU0ktWCBjb3VudCBpcyB6ZXJvLWJhc2VkIGluIEhXLCBzbyBpbmNyZW1lbnQgdG8gZ2l2ZSBwcm9wZXIgdmFsdWUgKi8KKwltc2l4X2NvdW50Kys7CisKKwlyZXR1cm4gbXNpeF9jb3VudDsKK30KKworc3RhdGljIHMzMiBpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJc3RydWN0IGl4Z2JlX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsKKworCS8qIFNldCB0aGUgYnVzIGluZm9ybWF0aW9uIHByaW9yIHRvIFBIWSBpZGVudGlmaWNhdGlvbiAqLworCW1hYy0+b3BzLmdldF9idXNfaW5mbyhodyk7CisKKwkvKiBDYWxsIFBIWSBpZGVudGlmeSByb3V0aW5lIHRvIGdldCB0aGUgQ3Ugb3IgU0ZJIHBoeSB0eXBlICovCisJcmV0X3ZhbCA9IHBoeS0+b3BzLmlkZW50aWZ5KGh3KTsKKworCWlmIChyZXRfdmFsID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkKKwkJZ290byBnZXRfaW52YXJpYW50c19vdXQ7CisKKwlpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShodyk7CisKKwkvKiBTZXR1cCBTRlAgbW9kdWxlIGlmIHRoZXJlIGlzIG9uZSBwcmVzZW50LiAqLworCXJldF92YWwgPSBtYWMtPm9wcy5zZXR1cF9zZnAoaHcpOworCisJLyogSWYgY29wcGVyIG1lZGlhLCBvdmVyd3JpdGUgd2l0aCBjb3BwZXIgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKwlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB7CisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTk7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTk7CisJCW1hYy0+b3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyA9CisJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5OworCX0KKworCS8qIFBIWSBJbml0ICovCisJc3dpdGNoIChody0+cGh5LnR5cGUpIHsKKwljYXNlIGl4Z2JlX3BoeV90bjoKKwkJcGh5LT5vcHMuY2hlY2tfbGluayA9ICZpeGdiZV9jaGVja19waHlfbGlua190bng7CisJCXBoeS0+b3BzLmdldF9maXJtd2FyZV92ZXJzaW9uID0KKwkJICAgICAgICAgICAgICAgICAgJml4Z2JlX2dldF9waHlfZmlybXdhcmVfdmVyc2lvbl90bng7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW1hYy0+bWNmdF9zaXplID0gSVhHQkVfODI1OTlfTUNfVEJMX1NJWkU7CisJbWFjLT52ZnRfc2l6ZSA9IElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRTsKKwltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTOworCW1hYy0+bWF4X3J4X3F1ZXVlcyA9IElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVM7CisJbWFjLT5tYXhfdHhfcXVldWVzID0gSVhHQkVfODI1OTlfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KGh3KTsKKworZ2V0X2ludmFyaWFudHNfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkgLSBEZXRlcm1pbmVzIGxpbmsgY2FwYWJpbGl0aWVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogcG9pbnRlciB0byBsaW5rIHNwZWVkCisgKiAgQG5lZ290aWF0aW9uOiB0cnVlIHdoZW4gYXV0b25lZyBvciBhdXRvdHJ5IGlzIGVuYWJsZWQKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgbGluayBjYXBhYmlsaXRpZXMgYnkgcmVhZGluZyB0aGUgQVVUT0MgcmVnaXN0ZXIuCisgKiovCitzMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpuZWdvdGlhdGlvbikKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCXN3aXRjaCAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0spIHsKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IGZhbHNlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzFHX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUw6CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1I6CisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LUl9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TX1NHTUlJXzFHXzEwME06CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKKwkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKKwkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMIHwKKwkJICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OSAtIERldGVybWluZXMgbGluayBjYXBhYmlsaXRpZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogYm9vbGVhbiBhdXRvLW5lZ290aWF0aW9uIHZhbHVlCisgKgorICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJdTE2IHNwZWVkX2FiaWxpdHk7CisKKwkqc3BlZWQgPSAwOworCSphdXRvbmVnID0gdHJ1ZTsKKworCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBJWEdCRV9NRElPX1BIWV9TUEVFRF9BQklMSVRZLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX01ESU9fUE1BX1BNRF9ERVZfVFlQRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3BlZWRfYWJpbGl0eSk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKHNwZWVkX2FiaWxpdHkgJiBJWEdCRV9NRElPX1BIWV9TUEVFRF8xMEcpCisJCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgSVhHQkVfTURJT19QSFlfU1BFRURfMUcpCisJCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OSAtIEdldCBtZWRpYSB0eXBlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBSZXR1cm5zIHRoZSBtZWRpYSB0eXBlIChmaWJlciwgY29wcGVyLCBiYWNrcGxhbmUpCisgKiovCitlbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwllbnVtIGl4Z2JlX21lZGlhX3R5cGUgbWVkaWFfdHlwZTsKKworCS8qIERldGVjdCBpZiB0aGVyZSBpcyBhIGNvcHBlciBQSFkgYXR0YWNoZWQuICovCisJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfY3VfdW5rbm93biB8fAorCSAgICBody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3RuKSB7CisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcjsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTk6CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0OgorCQkvKiBEZWZhdWx0IGRldmljZSBJRCBpcyBtZXp6YW5pbmUgY2FyZCBLWC9LWDQgKi8KKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2ZpYmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV91bmtub3duOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIG1lZGlhX3R5cGU7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5IC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KKyAqICBSZXN0YXJ0cyB0aGUgbGluay4gIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgYXV0b2NfcmVnOworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisJczMyIHN0YXR1cyA9IDA7CisKKwkvKiBSZXN0YXJ0IGxpbmsgKi8KKwlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jX3JlZyB8PSBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jX3JlZyk7CisKKwkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCisJaWYgKGh3LT5waHkuYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CisJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJKSB7CisJCQlsaW5rc19yZWcgPSAwOyAvKiBKdXN0IGluIGNhc2UgQXV0b25lZyB0aW1lID0gMCAqLworCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgeworCQkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJCQkJaWYgKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxMDApOworCQkJfQorCQkJaWYgKCEobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkpIHsKKwkJCQlzdGF0dXMgPSBJWEdCRV9FUlJfQVVUT05FR19OT1RfQ09NUExFVEU7CisJCQkJaHdfZGJnKGh3LCAiQXV0b25lZyBkaWQgbm90IGNvbXBsZXRlLlxuIik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJc3RhdHVzID0gaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhodywgMCk7CisKKwkvKiBBZGQgZGVsYXkgdG8gZmlsdGVyIG91dCBub2lzZXMgZHVyaW5nIGluaXRpYWwgbGluayBzZXR1cCAqLworCW1zbGVlcCg1MCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KKyAqICBSZXN0YXJ0cyB0aGUgbGluayBmb3IgbXVsdGktc3BlZWQgZmliZXIgYXQgMUcgc3BlZWQsIGlmIGxpbmsKKyAqICBmYWlscyBhdCAxMEcuCisgKiAgUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF84MjU5OV9BVVRPTkVHOworCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsIGxpbmtfc3BlZWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0IE1BQyBsaW5rIHNwZWVkCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgd2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGlzIG5lZWRlZAorICoKKyAqICBTZXQgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGFuZCByZXN0YXJ0cyBsaW5rLgorICoqLworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlpeGdiZV9saW5rX3NwZWVkIHBoeV9saW5rX3NwZWVkOworCWl4Z2JlX2xpbmtfc3BlZWQgaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCXUzMiBzcGVlZGNudCA9IDA7CisJdTMyIGVzZHBfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VTRFApOworCWJvb2wgbGlua191cCA9IGZhbHNlOworCWJvb2wgbmVnb3RpYXRpb247CisKKwkvKiBNYXNrIG9mZiByZXF1ZXN0ZWQgYnV0IG5vbi1zdXBwb3J0ZWQgc3BlZWRzICovCisJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmcGh5X2xpbmtfc3BlZWQsICZuZWdvdGlhdGlvbik7CisJc3BlZWQgJj0gcGh5X2xpbmtfc3BlZWQ7CisKKwkvKgorCSAqIFRyeSBlYWNoIHNwZWVkIG9uZSBieSBvbmUsIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QuICBXZSBkbyB0aGlzIGluCisJICogc29mdHdhcmUgYmVjYXVzZSAxMGdiIGZpYmVyIGRvZXNuJ3Qgc3VwcG9ydCBzcGVlZCBhdXRvbmVnb3RpYXRpb24uCisJICovCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpIHsKKwkJc3BlZWRjbnQrKzsKKwkJaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisKKwkJLyogU2V0IGhhcmR3YXJlIFNEUCdzICovCisJCWVzZHBfcmVnIHw9IChJWEdCRV9FU0RQX1NEUDVfRElSIHwgSVhHQkVfRVNEUF9TRFA1KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FU0RQLCBlc2RwX3JlZyk7CisKKwkJaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCisJCW1zbGVlcCg1MCk7CisKKwkJLyogSWYgd2UgaGF2ZSBsaW5rLCBqdXN0IGp1bXAgb3V0ICovCisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZwaHlfbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwkJaWYgKGxpbmtfdXApCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSB7CisJCXNwZWVkY250Kys7CisJCWlmIChoaWdoZXN0X2xpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKQorCQkJaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKworCQkvKiBTZXQgaGFyZHdhcmUgU0RQJ3MgKi8KKwkJZXNkcF9yZWcgJj0gfklYR0JFX0VTRFBfU0RQNTsKKwkJZXNkcF9yZWcgfD0gSVhHQkVfRVNEUF9TRFA1X0RJUjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FU0RQLCBlc2RwX3JlZyk7CisKKwkJaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoCisJCQlodywgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCwgYXV0b25lZywKKwkJCWF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisKKwkJbXNsZWVwKDUwKTsKKworCQkvKiBJZiB3ZSBoYXZlIGxpbmssIGp1c3QganVtcCBvdXQgKi8KKwkJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnBoeV9saW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOworCQlpZiAobGlua191cCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgZGlkbid0IGdldCBsaW5rLiAgQ29uZmlndXJlIGJhY2sgdG8gdGhlIGhpZ2hlc3Qgc3BlZWQgd2UgdHJpZWQsCisJICogKGlmIHRoZXJlIHdhcyBtb3JlIHRoYW4gb25lKS4gIFdlIGNhbGwgb3Vyc2VsdmVzIGJhY2sgd2l0aCBqdXN0IHRoZQorCSAqIHNpbmdsZSBoaWdoZXN0IHNwZWVkIHRoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLgorCSAqLworCWlmIChzcGVlZGNudCA+IDEpCisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0X2xpbmtfc3BlZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5IC0gRGV0ZXJtaW5lIGxpbmsgYW5kIHNwZWVkIHN0YXR1cworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBsaW5rX3VwOiB0cnVlIHdoZW4gbGluayBpcyB1cAorICogIEBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGU6IGJvb2wgdXNlZCB0byB3YWl0IGZvciBsaW5rIHVwIG9yIG5vdAorICoKKyAqICBSZWFkcyB0aGUgbGlua3MgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGlmIGxpbmsgaXMgdXAgYW5kIHRoZSBjdXJyZW50IHNwZWVkCisgKiovCitzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpCit7CisJdTMyIGxpbmtzX3JlZzsKKwl1MzIgaTsKKworCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJaWYgKGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfTElOS19VUF9USU1FOyBpKyspIHsKKwkJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkgeworCQkJCSpsaW5rX3VwID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJKmxpbmtfdXAgPSBmYWxzZTsKKwkJCX0KKwkJCW1zbGVlcCgxMDApOworCQkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkKKwkJCSpsaW5rX3VwID0gdHJ1ZTsKKwkJZWxzZQorCQkJKmxpbmtfdXAgPSBmYWxzZTsKKwl9CisKKwlpZiAoKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX1NQRUVEXzgyNTk5KSA9PQorCSAgICBJWEdCRV9MSU5LU19TUEVFRF8xMEdfODI1OTkpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCWVsc2UgaWYgKChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSkgPT0KKwkgICAgICAgICBJWEdCRV9MSU5LU19TUEVFRF8xR184MjU5OSkKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwllbHNlCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7CisKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OSAtIFNldCBNQUMgbGluayBzcGVlZAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCXUzMiBhdXRvYzIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MyKTsKKwl1MzIgbGlua19tb2RlID0gYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwl1MzIgcG1hX3BtZF8xZyA9IGF1dG9jICYgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9NQVNLOworCXUzMiBwbWFfcG1kXzEwZ19zZXJpYWwgPSBhdXRvYzIgJiBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX01BU0s7CisJdTMyIGxpbmtzX3JlZzsKKwl1MzIgaTsKKwlpeGdiZV9saW5rX3NwZWVkIGxpbmtfY2FwYWJpbGl0aWVzID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHNwZWVkIHBhc3NlZCBpbiBpcyBzdXBwb3J0ZWQuICovCisJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmbGlua19jYXBhYmlsaXRpZXMsICZhdXRvbmVnKTsKKwlzcGVlZCAmPSBsaW5rX2NhcGFiaWxpdGllczsKKworCWlmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV04pIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJfSBlbHNlIGlmIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCSAgICAgICAgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJKSB7CisJCS8qIFNldCBLWDQvS1gvS1Igc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWQgcmVxdWVzdGVkICovCisJCWF1dG9jICY9IH4oSVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSyB8IElYR0JFX0FVVE9DX0tSX1NVUFApOworCQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKwkJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWDRfU1VQUDsKKwkJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LUl9TVVBQKQorCQkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0tSX1NVUFA7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWF9TVVBQOworCX0gZWxzZSBpZiAoKHBtYV9wbWRfMWcgPT0gSVhHQkVfQVVUT0NfMUdfU0ZJKSAmJgorCSAgICAgICAgICAgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTiB8fAorCSAgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMUdfQU4pKSB7CisJCS8qIFN3aXRjaCBmcm9tIDFHIFNGSSB0byAxMEcgU0ZJIGlmIHJlcXVlc3RlZCAqLworCQlpZiAoKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSAmJgorCQkgICAgKHBtYV9wbWRfMTBnX3NlcmlhbCA9PSBJWEdCRV9BVVRPQzJfMTBHX1NGSSkpIHsKKwkJCWF1dG9jICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMOworCQl9CisJfSBlbHNlIGlmICgocG1hX3BtZF8xMGdfc2VyaWFsID09IElYR0JFX0FVVE9DMl8xMEdfU0ZJKSAmJgorCSAgICAgICAgICAgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTCkpIHsKKwkJLyogU3dpdGNoIGZyb20gMTBHIFNGSSB0byAxRyBTRkkgaWYgcmVxdWVzdGVkICovCisJCWlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgJiYKKwkJICAgIChwbWFfcG1kXzFnID09IElYR0JFX0FVVE9DXzFHX1NGSSkpIHsKKwkJCWF1dG9jICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwkJCWlmIChhdXRvbmVnKQorCQkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0xNU18xR19BTjsKKwkJCWVsc2UKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBSZXN0YXJ0IGxpbmsgKi8KKwkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOworCisJCS8qIE9ubHkgcG9sbCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBpZiBzcGVjaWZpZWQgdG8gZG8gc28gKi8KKwkJaWYgKGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCQkJaWYgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSIHx8CisJCQkgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkJCSAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkJCWxpbmtzX3JlZyA9IDA7IC8qSnVzdCBpbiBjYXNlIEF1dG9uZWcgdGltZT0wKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfQVVUT19ORUdfVElNRTsgaSsrKSB7CisJCQkJCWxpbmtzX3JlZyA9CisJCQkJCSAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCQkJCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkKKwkJCQkJCWJyZWFrOworCQkJCQltc2xlZXAoMTAwKTsKKwkJCQl9CisJCQkJaWYgKCEobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkpIHsKKwkJCQkJc3RhdHVzID0KKwkJCQkJICAgICAgICBJWEdCRV9FUlJfQVVUT05FR19OT1RfQ09NUExFVEU7CisJCQkJCWh3X2RiZyhodywgIkF1dG9uZWcgZGlkIG5vdCAiCisJCQkJCSAgICAgICAiY29tcGxldGUuXG4iKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoaHcsIDApOworCisJCS8qIEFkZCBkZWxheSB0byBmaWx0ZXIgb3V0IG5vaXNlcyBkdXJpbmcgaW5pdGlhbCBsaW5rIHNldHVwICovCisJCW1zbGVlcCg1MCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkgLSBTZXR1cCBjb3BwZXIgbGluayBzZXR0aW5ncworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzdGFydHMgdGhlIGxpbmsgb24gUEhZIGFuZCB0aGVuIE1BQy4gUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzOworCisJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCisJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7CisKKwkvKiBTZXQgdXAgTUFDICovCisJaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgdGhlIFBIWSBhdXRvbmVnIGFkdmVydGlzZWQgZmllbGQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAorICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSBpZiB3YWl0aW5nIGlzIG5lZWRlZCB0byBjb21wbGV0ZQorICoKKyAqICBSZXN0YXJ0cyBsaW5rIG9uIFBIWSBhbmQgTUFDIGJhc2VkIG9uIHNldHRpbmdzIHBhc3NlZCBpbi4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzOworCisJLyogU2V0dXAgdGhlIFBIWSBhY2NvcmRpbmcgdG8gaW5wdXQgc3BlZWQgKi8KKwlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisJLyogU2V0IHVwIE1BQyAqLworCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5IC0gUGVyZm9ybSBoYXJkd2FyZSByZXNldAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcworICogIGFuZCBjbGVhcnMgYWxsIGludGVycnVwdHMsIHBlcmZvcm0gYSBQSFkgcmVzZXQsIGFuZCBwZXJmb3JtIGEgbGluayAoTUFDKQorICogIHJlc2V0LgorICoqLworczMyIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIGN0cmwsIGN0cmxfZXh0OworCXUzMiBpOworCXUzMiBhdXRvYzsKKwl1MzIgYXV0b2MyOworCisJLyogQ2FsbCBhZGFwdGVyIHN0b3AgdG8gZGlzYWJsZSB0eC9yeCBhbmQgY2xlYXIgaW50ZXJydXB0cyAqLworCWh3LT5tYWMub3BzLnN0b3BfYWRhcHRlcihodyk7CisKKwkvKiBSZXNldCBQSFkgKi8KKwlody0+cGh5Lm9wcy5yZXNldChodyk7CisKKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIGZyb20gaGFuZ2luZyBieSBkaXNhYmxpbmcgUENJLUUgbWFzdGVyCisJICogYWNjZXNzIGFuZCB2ZXJpZnkgbm8gcGVuZGluZyByZXF1ZXN0cyBiZWZvcmUgcmVzZXQKKwkgKi8KKwlpZiAoaXhnYmVfZGlzYWJsZV9wY2llX21hc3RlcihodykgIT0gMCkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkc7CisJCWh3X2RiZyhodywgIlBDSS1FIE1hc3RlciBkaXNhYmxlIHBvbGxpbmcgaGFzIGZhaWxlZC5cbiIpOworCX0KKworCS8qCisJICogSXNzdWUgZ2xvYmFsIHJlc2V0IHRvIHRoZSBNQUMuICBUaGlzIG5lZWRzIHRvIGJlIGEgU1cgcmVzZXQuCisJICogSWYgbGluayByZXNldCBpcyB1c2VkLCBpdCBtaWdodCByZXNldCB0aGUgTUFDIHdoZW4gbW5nIGlzIHVzaW5nIGl0CisJICovCisJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgSVhHQkVfQ1RSTF9SU1QpKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwkvKiBQb2xsIGZvciByZXNldCBiaXQgdG8gc2VsZi1jbGVhciBpbmRpY2F0aW5nIHJlc2V0IGlzIGNvbXBsZXRlICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJdWRlbGF5KDEpOworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOworCQlpZiAoIShjdHJsICYgSVhHQkVfQ1RSTF9SU1QpKQorCQkJYnJlYWs7CisJfQorCWlmIChjdHJsICYgSVhHQkVfQ1RSTF9SU1QpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX1JFU0VUX0ZBSUxFRDsKKwkJaHdfZGJnKGh3LCAiUmVzZXQgcG9sbGluZyBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsKKwl9CisJLyogQ2xlYXIgUEYgUmVzZXQgRG9uZSBiaXQgc28gUEYvVkYgTWFpbCBPcHMgY2FuIHdvcmsgKi8KKwljdHJsX2V4dCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCk7CisJY3RybF9leHQgfD0gSVhHQkVfQ1RSTF9FWFRfUEZSU1REOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKworCW1zbGVlcCg1MCk7CisKKworCisJLyoKKwkgKiBTdG9yZSB0aGUgb3JpZ2luYWwgQVVUT0MvQVVUT0MyIHZhbHVlcyBpZiB0aGV5IGhhdmUgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiB2YWx1ZXMgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBzZXRzIGJhY2sgdG8gZGVmYXVsdHMuCisJICovCisJYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jMiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQzIpOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19hdXRvYzIgPSBhdXRvYzI7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKGF1dG9jICE9IGh3LT5tYWMub3JpZ19hdXRvYykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIChody0+bWFjLm9yaWdfYXV0b2MgfAorCQkJICAgICAgICAgICAgICAgIElYR0JFX0FVVE9DX0FOX1JFU1RBUlQpKTsKKworCQlpZiAoKGF1dG9jMiAmIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLKSAhPQorCQkgICAgKGh3LT5tYWMub3JpZ19hdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykpIHsKKwkJCWF1dG9jMiAmPSB+SVhHQkVfQVVUT0MyX1VQUEVSX01BU0s7CisJCQlhdXRvYzIgfD0gKGh3LT5tYWMub3JpZ19hdXRvYzIgJgorCQkJICAgICAgICAgICBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSyk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DMiwgYXV0b2MyKTsKKwkJfQorCX0KKworCS8qIFN0b3JlIHRoZSBwZXJtYW5lbnQgbWFjIGFkZHJlc3MgKi8KKwlody0+bWFjLm9wcy5nZXRfbWFjX2FkZHIoaHcsIGh3LT5tYWMucGVybV9hZGRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkgLSBEaXNhc3NvY2lhdGUgYSBWTURxIHBvb2wgaW5kZXggZnJvbSBhIHJ4IGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0CisgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGRpc2Fzc29jaWF0ZQorICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXggdG8gcmVtb3ZlIGZyb20gdGhlIHJhcgorICoqLworczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpCit7CisJdTMyIG1wc2FyX2xvLCBtcHNhcl9oaTsKKwl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKKworCWlmIChyYXIgPCByYXJfZW50cmllcykgeworCQltcHNhcl9sbyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpKTsKKwkJbXBzYXJfaGkgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSk7CisKKwkJaWYgKCFtcHNhcl9sbyAmJiAhbXBzYXJfaGkpCisJCQlnb3RvIGRvbmU7CisKKwkJaWYgKHZtZHEgPT0gSVhHQkVfQ0xFQVJfVk1EUV9BTEwpIHsKKwkJCWlmIChtcHNhcl9sbykgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSwgMCk7CisJCQkJbXBzYXJfbG8gPSAwOworCQkJfQorCQkJaWYgKG1wc2FyX2hpKSB7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCAwKTsKKwkJCQltcHNhcl9oaSA9IDA7CisJCQl9CisJCX0gZWxzZSBpZiAodm1kcSA8IDMyKSB7CisJCQltcHNhcl9sbyAmPSB+KDEgPDwgdm1kcSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIG1wc2FyX2xvKTsKKwkJfSBlbHNlIHsKKwkJCW1wc2FyX2hpICY9IH4oMSA8PCAodm1kcSAtIDMyKSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhciksIG1wc2FyX2hpKTsKKwkJfQorCisJCS8qIHdhcyB0aGF0IHRoZSBsYXN0IHBvb2wgdXNpbmcgdGhpcyByYXI/ICovCisJCWlmIChtcHNhcl9sbyA9PSAwICYmIG1wc2FyX2hpID09IDAgJiYgcmFyICE9IDApCisJCQlody0+bWFjLm9wcy5jbGVhcl9yYXIoaHcsIHJhcik7CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiUkFSIGluZGV4ICVkIGlzIG91dCBvZiByYW5nZS5cbiIsIHJhcik7CisJfQorCitkb25lOgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdm1kcV84MjU5OSAtIEFzc29jaWF0ZSBhIFZNRHEgcG9vbCBpbmRleCB3aXRoIGEgcnggYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3QKKyAqICBAcmFyOiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXggdG8gYXNzb2NpYXRlIHdpdGggYSBWTURxIGluZGV4CisgKiAgQHZtZHE6IFZNRHEgcG9vbCBpbmRleAorICoqLworczMyIGl4Z2JlX3NldF92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQoreworCXUzMiBtcHNhcjsKKwl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKKworCWlmIChyYXIgPCByYXJfZW50cmllcykgeworCQlpZiAodm1kcSA8IDMyKSB7CisJCQltcHNhciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpKTsKKwkJCW1wc2FyIHw9IDEgPDwgdm1kcTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSwgbXBzYXIpOworCQl9IGVsc2UgeworCQkJbXBzYXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSk7CisJCQltcHNhciB8PSAxIDw8ICh2bWRxIC0gMzIpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCBtcHNhcik7CisJCX0KKwl9IGVsc2UgeworCQlod19kYmcoaHcsICJSQVIgaW5kZXggJWQgaXMgb3V0IG9mIHJhbmdlLlxuIiwgcmFyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF92ZnRhXzgyNTk5IC0gU2V0IFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEB2bGFuOiBWTEFOIGlkIHRvIHdyaXRlIHRvIFZMQU4gZmlsdGVyCisgKiAgQHZpbmQ6IFZNRHEgb3V0cHV0IGluZGV4IHRoYXQgbWFwcyBxdWV1ZSB0byBWTEFOIGlkIGluIFZGVkZCCisgKiAgQHZsYW5fb246IGJvb2xlYW4gZmxhZyB0byB0dXJuIG9uL29mZiBWTEFOIGluIFZGVkYKKyAqCisgKiAgVHVybiBvbi9vZmYgc3BlY2lmaWVkIFZMQU4gaW4gdGhlIFZMQU4gZmlsdGVyIHRhYmxlLgorICoqLworczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLCB1MzIgdmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZsYW5fb24pCit7CisJdTMyIHJlZ2luZGV4OworCXUzMiBiaXRpbmRleDsKKwl1MzIgYml0czsKKwl1MzIgZmlyc3RfZW1wdHlfc2xvdDsKKworCWlmICh2bGFuID4gNDA5NSkKKwkJcmV0dXJuIElYR0JFX0VSUl9QQVJBTTsKKworCS8qCisJICogdGhpcyBpcyBhIDIgcGFydCBvcGVyYXRpb24gLSBmaXJzdCB0aGUgVkZUQSwgdGhlbiB0aGUKKwkgKiBWTFZGIGFuZCBWTFZGQiBpZiB2aW5kIGlzIHNldAorCSAqLworCisJLyogUGFydCAxCisJICogVGhlIFZGVEEgaXMgYSBiaXRzdHJpbmcgbWFkZSB1cCBvZiAxMjggMzItYml0IHJlZ2lzdGVycworCSAqIHRoYXQgZW5hYmxlIHRoZSBwYXJ0aWN1bGFyIFZMQU4gaWQsIG11Y2ggbGlrZSB0aGUgTVRBOgorCSAqICAgIGJpdHNbMTEtNV06IHdoaWNoIHJlZ2lzdGVyCisJICogICAgYml0c1s0LTBdOiAgd2hpY2ggYml0IGluIHRoZSByZWdpc3RlcgorCSAqLworCXJlZ2luZGV4ID0gKHZsYW4gPj4gNSkgJiAweDdGOworCWJpdGluZGV4ID0gdmxhbiAmIDB4MUY7CisJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRBKHJlZ2luZGV4KSk7CisJaWYgKHZsYW5fb24pCisJCWJpdHMgfD0gKDEgPDwgYml0aW5kZXgpOworCWVsc2UKKwkJYml0cyAmPSB+KDEgPDwgYml0aW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCksIGJpdHMpOworCisKKwkvKiBQYXJ0IDIKKwkgKiBJZiB0aGUgdmluZCBpcyBzZXQKKwkgKiAgIEVpdGhlciB2bGFuX29uCisJICogICAgIG1ha2Ugc3VyZSB0aGUgdmxhbiBpcyBpbiBWTFZGCisJICogICAgIHNldCB0aGUgdmluZCBiaXQgaW4gdGhlIG1hdGNoaW5nIFZMVkZCCisJICogICBPciAhdmxhbl9vbgorCSAqICAgICBjbGVhciB0aGUgcG9vbCBiaXQgYW5kIHBvc3NpYmx5IHRoZSB2aW5kCisJICovCisJaWYgKHZpbmQpIHsKKwkJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCisJCWZpcnN0X2VtcHR5X3Nsb3QgPSAwOworCisJCWZvciAocmVnaW5kZXggPSAxOyByZWdpbmRleCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgcmVnaW5kZXgrKykgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSk7CisJCQlpZiAoIWJpdHMgJiYgIWZpcnN0X2VtcHR5X3Nsb3QpCisJCQkJZmlyc3RfZW1wdHlfc2xvdCA9IHJlZ2luZGV4OworCQkJZWxzZSBpZiAoKGJpdHMgJiAweDBGRkYpID09IHZsYW4pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVnaW5kZXggPj0gSVhHQkVfVkxWRl9FTlRSSUVTKSB7CisJCQlpZiAoZmlyc3RfZW1wdHlfc2xvdCkKKwkJCQlyZWdpbmRleCA9IGZpcnN0X2VtcHR5X3Nsb3Q7CisJCQllbHNlIHsKKwkJCQlod19kYmcoaHcsICJObyBzcGFjZSBpbiBWTFZGLlxuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQlpZiAodmxhbl9vbikgeworCQkJLyogc2V0IHRoZSBwb29sIGJpdCAqLworCQkJaWYgKHZpbmQgPCAzMikgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOworCQkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSwgYml0cyk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOworCQkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBjbGVhciB0aGUgcG9vbCBiaXQgKi8KKwkJCWlmICh2aW5kIDwgMzIpIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOworCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKKwkJCX0gZWxzZSB7CisJCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7CisJCQkJYml0cyAmPSB+KDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQkJYml0cyB8PSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOworCQkJfQorCQl9CisKKwkJaWYgKGJpdHMpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLAorCQkJICAgICAgICAgICAgICAgIChJWEdCRV9WTFZGX1ZJRU4gfCB2bGFuKSk7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCksIDApOworCX0KKworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9jbGVhcl92ZnRhXzgyNTk5IC0gQ2xlYXIgVkxBTiBmaWx0ZXIgdGFibGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsZWFycyB0aGUgVkxBTiBmaWxlciB0YWJsZSwgYW5kIHRoZSBWTURxIGluZGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyCisgKiovCitzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGh3LT5tYWMudmZ0X3NpemU7IG9mZnNldCsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEob2Zmc2V0KSwgMCk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgb2Zmc2V0KyspIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKG9mZnNldCksIDApOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkZCKG9mZnNldCAqIDIpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGQigob2Zmc2V0ICogMikgKyAxKSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OSAtIEJsaW5rIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGluZGV4OiBsZWQgbnVtYmVyIHRvIGJsaW5rCisgKiovCitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0YXJ0XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCkKK3sKKwl1MzIgbGVkX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MRURDVEwpOworCisJbGVkX3JlZyAmPSB+SVhHQkVfTEVEX01PREVfTUFTSyhpbmRleCk7CisJbGVkX3JlZyB8PSBJWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkgLSBTdG9wIGJsaW5raW5nIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGluZGV4OiBsZWQgbnVtYmVyIHRvIHN0b3AgYmxpbmtpbmcKKyAqKi8KK3MzMiBpeGdiZV9ibGlua19sZWRfc3RvcF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIGxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9CTElOSyhpbmRleCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9MRURDVEwsIGxlZF9yZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkgLSBJbml0aWFsaXplIHRoZSBVbmljYXN0IFRhYmxlIEFycmF5CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoqLworczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCWludCBpOworCWh3X2RiZyhodywgIiBDbGVhcmluZyBVVEFcbiIpOworCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1VUQShpKSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OSAtIFJlYWRzIDggYml0IE9tZXIgYW5hbG9nIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWc6IGFuYWxvZyByZWdpc3RlciB0byByZWFkCisgKiAgQHZhbDogcmVhZCB2YWx1ZQorICoKKyAqICBQZXJmb3JtcyByZWFkIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCisgKiovCitzMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKQoreworCXUzMiAgY29yZV9jdGw7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIElYR0JFX0NPUkVDVExfV1JJVEVfQ01EIHwKKwkgICAgICAgICAgICAgICAgKHJlZyA8PCA4KSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgxMCk7CisJY29yZV9jdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ09SRUNUTCk7CisJKnZhbCA9ICh1OCljb3JlX2N0bDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OSAtIFdyaXRlcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVnOiBhdGxhcyByZWdpc3RlciB0byB3cml0ZQorICogIEB2YWw6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIHdyaXRlIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggdmFsKQoreworCXUzMiAgY29yZV9jdGw7CisKKwljb3JlX2N0bCA9IChyZWcgPDwgOCkgfCB2YWw7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DT1JFQ1RMLCBjb3JlX2N0bCk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc3RhcnRfaHdfODI1OTkgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbi4KKyAqICBUaGVuIHBlcmZvcm1zIGRldmljZS1zcGVjaWZpYzoKKyAqICBDbGVhcnMgdGhlIHJhdGUgbGltaXRlciByZWdpc3RlcnMuCisgKiovCitzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcV9udW07CisKKwlpeGdiZV9zdGFydF9od19nZW5lcmljKGh3KTsKKworCS8qIENsZWFyIHRoZSByYXRlIGxpbWl0ZXJzICovCisJZm9yIChxX251bSA9IDA7IHFfbnVtIDwgaHctPm1hYy5tYXhfdHhfcXVldWVzOyBxX251bSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIHFfbnVtKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRCQ05SQywgMCk7CisJfQorCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkgLSBHZXQgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBwaHlzaWNhbCBsYXllciBtb2R1bGUgZm91bmQgb24gdGhlIGN1cnJlbnQgYWRhcHRlci4KKyAqKi8KK3MzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX1BIWV9BRERSX0lOVkFMSUQ7CisJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfc2ZwX21vZHVsZV9nZW5lcmljKGh3KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5IC0gUmV0dXJucyBwaHlzaWNhbCBsYXllciB0eXBlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHBoeXNpY2FsIGxheWVyIGNhcGFiaWxpdGllcyBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICoqLwordTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCXU4IGNvbXBfY29kZXNfMTBnID0gMDsKKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKwkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCisJCXBoeXNpY2FsX2xheWVyID0gKElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfS1g0IHwKKwkJICAgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1gpOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCWh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisKKwkJc3dpdGNoIChody0+cGh5LnNmcF90eXBlKSB7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3U6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTE6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1NGUF9QTFVTX0NVOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfc3I6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfU1I7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9zZnBfdHlwZV9scjoKKwkJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9MUjsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMToKKwkJCWh3LT5waHkub3BzLnJlYWRfaTJjX2VlcHJvbShodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9TRkZfMTBHQkVfQ09NUF9DT0RFUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcF9jb2Rlc18xMGcpOworCQkJaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCXBoeXNpY2FsX2xheWVyID0KKwkJCQkgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9TUjsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCXBoeXNpY2FsX2xheWVyID0KKwkJCQkgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9MUjsKKwkJCWVsc2UKKwkJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCWRlZmF1bHQ6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiBwaHlzaWNhbF9sYXllcjsKK30KKworLyoqCisgKiAgaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OSAtIEVuYWJsZSB0aGUgUnggRE1BIHVuaXQgb24gODI1OTkKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHJlZ3ZhbDogcmVnaXN0ZXIgdmFsdWUgdG8gd3JpdGUgdG8gUlhDVFJMCisgKgorICogIEVuYWJsZXMgdGhlIFJ4IERNQSB1bml0IGZvciA4MjU5OQorICoqLworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3sKKyNkZWZpbmUgSVhHQkVfTUFYX1NFQ1JYX1BPTEwgMzAKKwlpbnQgaTsKKwlpbnQgc2VjcnhyZWc7CisKKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIDgyNTk5IHNpbGljb24gZXJyYXRhIHdoZW4gZW5hYmxpbmcgdGhlIFJ4IGRhdGFwYXRoLgorCSAqIElmIHRyYWZmaWMgaXMgaW5jb21pbmcgYmVmb3JlIHdlIGVuYWJsZSB0aGUgUnggdW5pdCwgaXQgY291bGQgaGFuZworCSAqIHRoZSBSeCBETUEgdW5pdC4gIFRoZXJlZm9yZSwgbWFrZSBzdXJlIHRoZSBzZWN1cml0eSBlbmdpbmUgaXMKKwkgKiBjb21wbGV0ZWx5IGRpc2FibGVkIHByaW9yIHRvIGVuYWJsaW5nIHRoZSBSeCB1bml0LgorCSAqLworCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCk7CisJc2VjcnhyZWcgfD0gSVhHQkVfU0VDUlhDVFJMX1JYX0RJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCwgc2VjcnhyZWcpOworCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfU0VDUlhfUE9MTDsgaSsrKSB7CisJCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYU1RBVCk7CisJCWlmIChzZWNyeHJlZyAmIElYR0JFX1NFQ1JYU1RBVF9TRUNSWF9SRFkpCisJCQlicmVhazsKKwkJZWxzZQorCQkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiBGb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5ICovCisJaWYgKGkgPj0gSVhHQkVfTUFYX1NFQ1JYX1BPTEwpCisJCWh3X2RiZyhodywgIlJ4IHVuaXQgYmVpbmcgZW5hYmxlZCBiZWZvcmUgc2VjdXJpdHkgIgorCQkgICAgICAgInBhdGggZnVsbHkgZGlzYWJsZWQuICBDb250aW51aW5nIHdpdGggaW5pdC5cbiIpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJlZ3ZhbCk7CisJc2VjcnhyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU0VDUlhDVFJMKTsKKwlzZWNyeHJlZyAmPSB+SVhHQkVfU0VDUlhDVFJMX1JYX0RJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCwgc2VjcnhyZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIG1hY19vcHNfODI1OTkgPSB7CisJLmluaXRfaHcgICAgICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9od19nZW5lcmljLAorCS5yZXNldF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3Jlc2V0X2h3XzgyNTk5LAorCS5zdGFydF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3N0YXJ0X2h3XzgyNTk5LAorCS5jbGVhcl9od19jbnRycyAgICAgICAgID0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCisJLmdldF9tZWRpYV90eXBlICAgICAgICAgPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTksCisJLmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIgPSAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OSwKKwkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5LAorCS5nZXRfbWFjX2FkZHIgICAgICAgICAgID0gJml4Z2JlX2dldF9tYWNfYWRkcl9nZW5lcmljLAorCS5zdG9wX2FkYXB0ZXIgICAgICAgICAgID0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAorCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLAorCS5zZXRfbGFuX2lkICAgICAgICAgICAgID0gJml4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llLAorCS5yZWFkX2FuYWxvZ19yZWc4ICAgICAgID0gJml4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTksCisJLndyaXRlX2FuYWxvZ19yZWc4ICAgICAgPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTksCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTksCisJLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTksCisJLmNoZWNrX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTksCisJLmdldF9saW5rX2NhcGFiaWxpdGllcyAgPSAmaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5LAorCS5sZWRfb24gICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLAorCS5sZWRfb2ZmICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vZmZfZ2VuZXJpYywKKwkuYmxpbmtfbGVkX3N0YXJ0ICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTksCisJLmJsaW5rX2xlZF9zdG9wICAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTksCisJLnNldF9yYXIgICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3Jhcl9nZW5lcmljLAorCS5jbGVhcl9yYXIgICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3Jhcl9nZW5lcmljLAorCS5zZXRfdm1kcSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92bWRxXzgyNTk5LAorCS5jbGVhcl92bWRxICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZtZHFfODI1OTksCisJLmluaXRfcnhfYWRkcnMgICAgICAgICAgPSAmaXhnYmVfaW5pdF9yeF9hZGRyc19nZW5lcmljLAorCS51cGRhdGVfdWNfYWRkcl9saXN0ICAgID0gJml4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYywKKwkudXBkYXRlX21jX2FkZHJfbGlzdCAgICA9ICZpeGdiZV91cGRhdGVfbWNfYWRkcl9saXN0X2dlbmVyaWMsCisJLmVuYWJsZV9tYyAgICAgICAgICAgICAgPSAmaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMsCisJLmRpc2FibGVfbWMgICAgICAgICAgICAgPSAmaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljLAorCS5jbGVhcl92ZnRhICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZmdGFfODI1OTksCisJLnNldF92ZnRhICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3ZmdGFfODI1OTksCisJLnNldHVwX2ZjICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYywKKwkuaW5pdF91dGFfdGFibGVzICAgICAgICA9ICZpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTksCisJLnNldHVwX3NmcCAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfc2ZwX21vZHVsZXNfODI1OTksCit9OworCitzdGF0aWMgc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIGVlcHJvbV9vcHNfODI1OTkgPSB7CisJLmluaXRfcGFyYW1zICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX2dlbmVyaWMsCisJLnJlYWQgICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYywKKwkud3JpdGUgICAgICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYywKKwkudmFsaWRhdGVfY2hlY2tzdW0gICAgICA9ICZpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW1fZ2VuZXJpYywKKwkudXBkYXRlX2NoZWNrc3VtICAgICAgICA9ICZpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3RydWN0IGl4Z2JlX3BoeV9vcGVyYXRpb25zIHBoeV9vcHNfODI1OTkgPSB7CisJLmlkZW50aWZ5ICAgICAgICAgICAgICAgPSAmaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5LAorCS5pZGVudGlmeV9zZnAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYywKKwkucmVzZXQgICAgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9waHlfZ2VuZXJpYywKKwkucmVhZF9yZWcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZWFkX3BoeV9yZWdfZ2VuZXJpYywKKwkud3JpdGVfcmVnICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9waHlfcmVnX2dlbmVyaWMsCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfZ2VuZXJpYywKKwkuc2V0dXBfbGlua19zcGVlZCAgICAgICA9ICZpeGdiZV9zZXR1cF9waHlfbGlua19zcGVlZF9nZW5lcmljLAorCS5yZWFkX2kyY19ieXRlICAgICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYywKKwkud3JpdGVfaTJjX2J5dGUgICAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljLAorCS5yZWFkX2kyY19lZXByb20gICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljLAorCS53cml0ZV9pMmNfZWVwcm9tICAgICAgID0gJml4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYywKK307CisKK3N0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk5X2luZm8gPSB7CisJLm1hYyAgICAgICAgICAgICAgICAgICAgPSBpeGdiZV9tYWNfODI1OTlFQiwKKwkuZ2V0X2ludmFyaWFudHMgICAgICAgICA9ICZpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OSwKKwkubWFjX29wcyAgICAgICAgICAgICAgICA9ICZtYWNfb3BzXzgyNTk5LAorCS5lZXByb21fb3BzICAgICAgICAgICAgID0gJmVlcHJvbV9vcHNfODI1OTksCisJLnBoeV9vcHMgICAgICAgICAgICAgICAgPSAmcGh5X29wc184MjU5OSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IGY2N2M2ODQuLjhjZmQzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAorI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCiAKQEAgLTgwLDkgKzgxLDYgQEAKIAkvKiBDbGVhciB0aGUgVkxBTiBmaWx0ZXIgdGFibGUgKi8KIAlody0+bWFjLm9wcy5jbGVhcl92ZnRhKGh3KTsKIAotCS8qIFNldCB1cCBsaW5rICovCi0JaHctPm1hYy5vcHMuc2V0dXBfbGluayhodyk7Ci0KIAkvKiBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycyAqLwogCWh3LT5tYWMub3BzLmNsZWFyX2h3X2NudHJzKGh3KTsKIApAQCAtMjU0LDYgKzI1Miw4MSBAQAogfQogCiAvKioKKyAqICBpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYyAtIEdlbmVyaWMgc2V0IFBDSSBidXMgaW5mbworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB0aGUgUENJIGJ1cyBpbmZvIChzcGVlZCwgd2lkdGgsIHR5cGUpIHdpdGhpbiB0aGUgaXhnYmVfaHcgc3RydWN0dXJlCisgKiovCitzMzIgaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTE2IGxpbmtfc3RhdHVzOworCisJaHctPmJ1cy50eXBlID0gaXhnYmVfYnVzX3R5cGVfcGNpX2V4cHJlc3M7CisKKwkvKiBHZXQgdGhlIG5lZ290aWF0ZWQgbGluayB3aWR0aCBhbmQgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJX0xJTktfU1RBVFVTLAorCSAgICAgICAgICAgICAgICAgICAgICZsaW5rX3N0YXR1cyk7CisKKwlzd2l0Y2ggKGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfV0lEVEgpIHsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzE6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94MTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF8yOgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDI7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfV0lEVEhfNDoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0OworCQlicmVhazsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzg6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF91bmtub3duOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfU1BFRUQpIHsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDA6CisJCWh3LT5idXMuc3BlZWQgPSBpeGdiZV9idXNfc3BlZWRfMjUwMDsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19TUEVFRF81MDAwOgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkXzUwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3LT5idXMuc3BlZWQgPSBpeGdiZV9idXNfc3BlZWRfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorCisJbWFjLT5vcHMuc2V0X2xhbl9pZChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUgLSBTZXQgTEFOIGlkIGZvciBQQ0llIG11bHRpcGxlIHBvcnQgZGV2aWNlcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIERldGVybWluZXMgdGhlIExBTiBmdW5jdGlvbiBpZCBieSByZWFkaW5nIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzCisgKiAgYW5kIHN3YXBzIHRoZSBwb3J0IHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAqKi8KK3ZvaWQgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8gKmJ1cyA9ICZody0+YnVzOworCXUzMiByZWc7CisKKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU1RBVFVTKTsKKwlidXMtPmZ1bmMgPSAocmVnICYgSVhHQkVfU1RBVFVTX0xBTl9JRCkgPj4gSVhHQkVfU1RBVFVTX0xBTl9JRF9TSElGVDsKKwlidXMtPmxhbl9pZCA9IGJ1cy0+ZnVuYzsKKworCS8qIGNoZWNrIGZvciBhIHBvcnQgc3dhcCAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQUNUUFMpOworCWlmIChyZWcgJiBJWEdCRV9GQUNUUFNfTEZTKQorCQlidXMtPmZ1bmMgXj0gMHgxOworfQorCisvKioKICAqICBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyAtIEdlbmVyaWMgc3RvcCBUeC9SeCB1bml0cwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0zOTMsNiArNDY2LDczIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljIC0gV3JpdGVzIDE2IGJpdCB2YWx1ZSB0byBFRVBST00KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHdyaXR0ZW4gdG8KKyAqICBAZGF0YTogMTYgYml0IHdvcmQgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NCisgKgorICogIElmIGl4Z2JlX2VlcHJvbV91cGRhdGVfY2hlY2tzdW0gaXMgbm90IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLCB0aGUKKyAqICBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCisgKiovCitzMzIgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1OCB3cml0ZV9vcGNvZGUgPSBJWEdCRV9FRVBST01fV1JJVEVfT1BDT0RFX1NQSTsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUHJlcGFyZSB0aGUgRUVQUk9NIGZvciB3cml0aW5nICAqLworCXN0YXR1cyA9IGl4Z2JlX2FjcXVpcmVfZWVwcm9tKGh3KTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoaXhnYmVfcmVhZHlfZWVwcm9tKGh3KSAhPSAwKSB7CisJCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CisJCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOworCQl9CisJfQorCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQkvKiAgU2VuZCB0aGUgV1JJVEUgRU5BQkxFIGNvbW1hbmQgKDggYml0IG9wY29kZSApICAqLworCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIElYR0JFX0VFUFJPTV9XUkVOX09QQ09ERV9TUEksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOworCisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQkvKgorCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQorCQkgKiBvcGNvZGUKKwkJICovCisJCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQorCQkJd3JpdGVfb3Bjb2RlIHw9IElYR0JFX0VFUFJPTV9BOF9PUENPREVfU1BJOworCisJCS8qIFNlbmQgdGhlIFdyaXRlIGNvbW1hbmQgKDgtYml0IG9wY29kZSArIGFkZHIpICovCisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgd3JpdGVfb3Bjb2RlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVQUk9NX09QQ09ERV9CSVRTKTsKKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCAodTE2KShvZmZzZXQqMiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+ZWVwcm9tLmFkZHJlc3NfYml0cyk7CisKKwkJLyogU2VuZCB0aGUgZGF0YSAqLworCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoZGF0YSA8PCA4KTsKKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBkYXRhLCAxNik7CisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQltc2xlZXAoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkpOworCQkvKiBEb25lIHdpdGggd3JpdGluZyAtIHJlbGVhc2UgdGhlIEVFUFJPTSAqLworCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiAgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgYml0LWJhbmcKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKQEAgLTUyMSw3ICs2NjEsNyBAQAogc3RhdGljIHMzMiBpeGdiZV9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiBzdGF0dXMgPSAwOwotCXUzMiBlZWM7CisJdTMyIGVlYyA9IDA7CiAJdTMyIGk7CiAKIAlpZiAoaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSAhPSAwKQpAQCAtMTQ5MCw2ICsxNjMwLDMyNiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mY19lbmFibGUgLSBFbmFibGUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBwYWNrZXRidWZfbnVtOiBwYWNrZXQgYnVmZmVyIG51bWJlciAoMC03KQorICoKKyAqICBFbmFibGUgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqKi8KK3MzMiBpeGdiZV9mY19lbmFibGUoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBtZmxjbl9yZWc7CisJdTMyIGZjY2ZnX3JlZzsKKwl1MzIgcmVnOworCisJbWZsY25fcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwltZmxjbl9yZWcgJj0gfihJWEdCRV9NRkxDTl9SRkNFIHwgSVhHQkVfTUZMQ05fUlBGQ0UpOworCisJZmNjZmdfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDQ0ZHKTsKKwlmY2NmZ19yZWcgJj0gfihJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCB8IElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFkpOworCisJLyoKKwkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIGZjLmN1cnJlbnRfbW9kZSBhcmU6CisJICogMDogRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAxOiBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLAorCSAqICAgIGJ1dCBub3Qgc2VuZCBwYXVzZSBmcmFtZXMpLgorCSAqIDI6IFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIDQ6IFByaW9yaXR5IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCW1mbGNuX3JlZyB8PSBJWEdCRV9NRkxDTl9SRkNFOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCWZjY2ZnX3JlZyB8PSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWDsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19mdWxsOgorCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLworCQltZmxjbl9yZWcgfD0gSVhHQkVfTUZMQ05fUkZDRTsKKwkJZmNjZmdfcmVnIHw9IElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfRENCCisJY2FzZSBpeGdiZV9mY19wZmM6CisJCWdvdG8gb3V0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCBtZmxjbl9yZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNDRkcsIGZjY2ZnX3JlZyk7CisKKwkvKiBTZXQgdXAgYW5kIGVuYWJsZSBSeCBoaWdoL2xvdyB3YXRlciBtYXJrIHRocmVzaG9sZHMsIGVuYWJsZSBYT04uICovCisJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgJiBpeGdiZV9mY190eF9wYXVzZSkgeworCQlpZiAoaHctPmZjLnNlbmRfeG9uKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAoaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkUpKTsKKwkJZWxzZQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICBody0+ZmMubG93X3dhdGVyKTsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KHBhY2tldGJ1Zl9udW0pLAorCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyIHwgSVhHQkVfRkNSVEhfRkNFTikpOworCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0pKTsKKwlpZiAoKHBhY2tldGJ1Zl9udW0gJiAxKSA9PSAwKQorCQlyZWcgPSAocmVnICYgMHhGRkZGMDAwMCkgfCBody0+ZmMucGF1c2VfdGltZTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiAweDAwMDBGRkZGKSB8IChody0+ZmMucGF1c2VfdGltZSA8PCAxNik7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtIC8gMiksIHJlZyk7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2ZjX2F1dG9uZWcgLSBDb25maWd1cmUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBOZWdvdGlhdGVzIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMgd2l0aCBsaW5rIHBhcnRuZXIgdXNpbmcgYXV0b25lZyBhbmQKKyAqICBhcHBsaWVzIHRoZSByZXN1bHRzLgorICoqLworczMyIGl4Z2JlX2ZjX2F1dG9uZWcoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGksIHJlZywgcGNzX2FuYWR2X3JlZywgcGNzX2xwYWJfcmVnOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5BKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6ICBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAorCSAqIDE6ICBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLAorCSAqICAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQKKwkgKiAgICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogIEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiA0OiAgUHJpb3JpdHkgRmxvdyBDb250cm9sIGlzIGVuYWJsZWQuCisJICogb3RoZXI6IEludmFsaWQuCisJICovCisJc3dpdGNoIChody0+ZmMuY3VycmVudF9tb2RlKSB7CisJY2FzZSBpeGdiZV9mY19ub25lOgorCQkvKiBGbG93IGNvbnRyb2wgY29tcGxldGVseSBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4gKi8KKwkJcmVnICY9IH4oSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFIHwgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19yeF9wYXVzZToKKwkJLyoKKwkJICogUnggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQgYW5kIFR4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4gU2luY2UgdGhlcmUgcmVhbGx5CisJCSAqIGlzbid0IGEgd2F5IHRvIGFkdmVydGlzZSB0aGF0IHdlIGFyZSBjYXBhYmxlIG9mIFJYCisJCSAqIFBhdXNlIE9OTFksIHdlIHdpbGwgYWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBib3RoCisJCSAqIHN5bW1ldHJpYyBhbmQgYXN5bW1ldHJpYyBSeCBQQVVTRS4gIExhdGVyLCB3ZSB3aWxsCisJCSAqIGRpc2FibGUgdGhlIGFkYXB0ZXIncyBhYmlsaXR5IHRvIHNlbmQgUEFVU0UgZnJhbWVzLgorCQkgKi8KKwkJcmVnIHw9IChJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgfCBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCXJlZyB8PSAoSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJcmVnICY9IH4oSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19mdWxsOgorCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLworCQlyZWcgfD0gKElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSB8IElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19EQ0IKKwljYXNlIGl4Z2JlX2ZjX3BmYzoKKwkJZ290byBvdXQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CisJCXJldF92YWwgPSAtSVhHQkVfRVJSX0NPTkZJRzsKKwkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUENTMUdBTkEsIHJlZyk7CisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHTENUTCk7CisKKwkvKiBTZXQgUENTIHJlZ2lzdGVyIGZvciBhdXRvbmVnICovCisJLyogRW5hYmxlIGFuZCByZXN0YXJ0IGF1dG9uZWcgKi8KKwlyZWcgfD0gSVhHQkVfUENTMUdMQ1RMX0FOX0VOQUJMRSB8IElYR0JFX1BDUzFHTENUTF9BTl9SRVNUQVJUOworCisJLyogRGlzYWJsZSBBTiB0aW1lb3V0ICovCisJaWYgKGh3LT5mYy5zdHJpY3RfaWVlZSkKKwkJcmVnICY9IH5JWEdCRV9QQ1MxR0xDVExfQU5fMUdfVElNRU9VVF9FTjsKKworCWh3X2RiZyhodywgIkNvbmZpZ3VyaW5nIEF1dG9uZWc7IFBDU19MQ1RMID0gMHglMDhYXG4iLCByZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUENTMUdMQ1RMLCByZWcpOworCisJLyogU2VlIGlmIGF1dG9uZWdvdGlhdGlvbiBoYXMgc3VjY2VlZGVkICovCisJaHctPm1hYy5hdXRvbmVnX3N1Y2NlZWRlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEZJQkVSX0xJTktfVVBfTElNSVQ7IGkrKykgeworCQltc2xlZXAoMTApOworCQlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUENTMUdMU1RBKTsKKwkJaWYgKChyZWcgJiAoSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgfAorCQkgICAgIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSkpID09CisJCSAgICAoSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgfAorCQkgICAgIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSkpIHsKKwkJCWlmICghKHJlZyAmIElYR0JFX1BDUzFHTFNUQV9BTl9USU1FRF9PVVQpKQorCQkJCWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQpIHsKKwkJLyogQXV0b25lZyBmYWlsZWQgdG8gYWNoaWV2ZSBhIGxpbmssIHNvIHdlIHR1cm4gZmMgb2ZmICovCisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19ub25lOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBOT05FLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUmVhZCB0aGUgQU4gYWR2ZXJ0aXNlbWVudCBhbmQgTFAgYWJpbGl0eSByZWdpc3RlcnMgYW5kIHJlc29sdmUKKwkgKiBsb2NhbCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgYWNjb3JkaW5nbHkKKwkgKi8KKwlwY3NfYW5hZHZfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5BKTsKKwlwY3NfbHBhYl9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUENTMUdBTkxQKTsKKwlpZiAoKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCShwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpKSB7CisJCS8qCisJCSAqIE5vdyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIHNlbGVjdGVkIFJ4IE9OTFkKKwkJICogb2YgcGF1c2UgZnJhbWVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBoYWQgdG8gYWR2ZXJ0aXNlCisJCSAqIEZVTEwgZmxvdyBjb250cm9sIGJlY2F1c2Ugd2UgY291bGQgbm90IGFkdmVydGlzZSBSWAorCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KKwkJICogdHVybiBPRkYgdGhlIFRSQU5TTUlTU0lPTiBvZiBQQVVTRSBmcmFtZXMuCisJCSAqLworCQlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwpIHsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19mdWxsOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gRlVMTC5cbiIpOworCQl9IGVsc2UgeworCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAoIShwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkgICAocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3R4X3BhdXNlOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBUWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOworCX0gZWxzZSBpZiAoKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKSAmJgorCQkgICAhKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOworCX0gZWxzZSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19ub25lOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBOT05FLlxuIik7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMgLSBTZXQgdXAgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIHVwIGZsb3cgY29udHJvbC4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9mY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwlpeGdiZV9saW5rX3NwZWVkIHNwZWVkOworCWJvb2wgbGlua191cDsKKworI2lmZGVmIENPTkZJR19EQ0IKKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3BmYykgeworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCQlnb3RvIG91dDsKKwl9CisKKyNlbmRpZgorCS8qIFZhbGlkYXRlIHRoZSBwYWNrZXRidWYgY29uZmlndXJhdGlvbiAqLworCWlmIChwYWNrZXRidWZfbnVtIDwgMCB8fCBwYWNrZXRidWZfbnVtID4gNykgeworCQlod19kYmcoaHcsICJJbnZhbGlkIHBhY2tldCBidWZmZXIgbnVtYmVyIFslZF0sIGV4cGVjdGVkIHJhbmdlICIKKwkJICAgICAgICJpcyAwLTdcbiIsIHBhY2tldGJ1Zl9udW0pOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uLiAgWmVybyB3YXRlciBtYXJrcyBhcmUgaW52YWxpZAorCSAqIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGp1c3QgYmxhc3Qgb3V0IGZjIHBhY2tldHMuCisJICovCisJaWYgKCFody0+ZmMubG93X3dhdGVyIHx8ICFody0+ZmMuaGlnaF93YXRlciB8fCAhaHctPmZjLnBhdXNlX3RpbWUpIHsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCB3YXRlciBtYXJrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIG1vZGUuICBTdHJpY3QgSUVFRSBtb2RlIGRvZXMgbm90IGFsbG93CisJICogaXhnYmVfZmNfcnhfcGF1c2UgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHRlc3RpbmcgYW5vbWFsaWVzLgorCSAqLworCWlmIChody0+ZmMuc3RyaWN0X2llZWUgJiYgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJCWh3X2RiZyhodywgIml4Z2JlX2ZjX3J4X3BhdXNlIG5vdCB2YWxpZCBpbiBzdHJpY3QgIgorCQkgICAgICAgIklFRUUgbW9kZVxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIDEwZ2lnIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgRUVQUk9NIHRvIGRldGVybWluZSB0aGUKKwkgKiBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBmdWxsLgorCSAqLworCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKKworCS8qCisJICogU2F2ZSBvZmYgdGhlIHJlcXVlc3RlZCBmbG93IGNvbnRyb2wgbW9kZSBmb3IgdXNlIGxhdGVyLiAgRGVwZW5kaW5nCisJICogb24gdGhlIGxpbmsgcGFydG5lcidzIGNhcGFiaWxpdGllcywgd2UgbWF5IG9yIG1heSBub3QgdXNlIHRoaXMgbW9kZS4KKwkgKi8KKwlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGF1dG9uZWcgb3Igbm90LiAqLworCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZzcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKKwkJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2F1dG9uZWcoaHcpOworCisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2VuYWJsZShodywgcGFja2V0YnVmX251bSk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgaXhnYmVfZGlzYWJsZV9wY2llX21hc3RlciAtIERpc2FibGUgUENJLWV4cHJlc3MgbWFzdGVyIGFjY2VzcwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0xNTk3LDMgKzIwNTcsMTYgQEAKIAlpeGdiZV9yZWxlYXNlX2VlcHJvbV9zZW1hcGhvcmUoaHcpOwogfQogCisvKioKKyAqICBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMgLSBFbmFibGUgdGhlIFJ4IERNQSB1bml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWd2YWw6IHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlIHRvIFJYQ1RSTAorICoKKyAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdAorICoqLworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKQoreworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWd2YWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDE5MmY4ZDAuLjdlOTRkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzcsMTIgKzM3LDE0IEBACiBzMzIgaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICpwYmFfbnVtKTsKIHMzMiBpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpOwogczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogczMyIGl4Z2JlX2xlZF9vbl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiBzMzIgaXhnYmVfbGVkX29mZl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiAKIHMzMiBpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSk7CiBzMzIgaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CkBAIC02MSw2ICs2MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgYWRkcl9jb3VudCwgaXhnYmVfbWNfYWRkcl9pdHIgZnVuYyk7CiBzMzIgaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKTsKK3MzMiBpeGdiZV9zZXR1cF9mY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKTsKK3MzMiBpeGdiZV9mY19lbmFibGUoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2t0ZXRidWZfbnVtKTsKK3MzMiBpeGdiZV9mY19hdXRvbmVnKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogCiBzMzIgaXhnYmVfdmFsaWRhdGVfbWFjX2FkZHIodTggKm1hY19hZGRyKTsKIHMzMiBpeGdiZV9hY3F1aXJlX3N3Zndfc3luYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWFzayk7CkBAIC03Miw2ICs3OCwxMyBAQAogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFRyhhLCByZWcsIHZhbHVlKSB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKIAorI2lmbmRlZiB3cml0ZXEKKyNkZWZpbmUgd3JpdGVxKHZhbCwgYWRkcikgd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsgXAorICAgIHdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7CisjZW5kaWYKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUc2NChhLCByZWcsIHZhbHVlKSB3cml0ZXEoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKKwogI2RlZmluZSBJWEdCRV9SRUFEX1JFRyhhLCByZWcpIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpKQogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpIChcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCmluZGV4IGUyZTI4YWMuLmExNTYyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKICNpbmNsdWRlICJpeGdiZV9kY2IuaCIKICNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTguaCIKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKIAogLyoqCiAgKiBpeGdiZV9kY2JfY29uZmlnIC0gU3RydWN0IGNvbnRhaW5pbmcgRENCIHNldHRpbmdzLgpAQCAtMjE1LDYgKzIxNiw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OChodywgc3RhdHMsIHRjX2NvdW50KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkoaHcsIHN0YXRzLCB0Y19jb3VudCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjMyLDYgKzIzNSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTgoaHcsIHN0YXRzLCB0Y19jb3VudCk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShodywgc3RhdHMsIHRjX2NvdW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDgsNiArMjUzLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjQsNiArMjcxLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjgwLDYgKzI4OSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5Niw2ICszMDcsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTEsNiArMzI0LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk4KGh3KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoaHcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyNyw2ICszNDIsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9od19jb25maWdfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAppbmRleCA3NWY2ZWZlLi42NGE5ZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTc1LDYgKzc1LDI2IEBACiAJcHJpb19saW5rCiB9OwogCisvKiBEQ0IgY2FwYWJpbGl0eSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9EQ0JfUEdfU1VQUE9SVCAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9EQ0JfUEZDX1NVUFBPUlQgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9EQ0JfQkNOX1NVUFBPUlQgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9EQ0JfVVAyVENfU1VQUE9SVCAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJWEdCRV9EQ0JfR1NQX1NVUFBPUlQgICAgICAgMHgwMDAwMDAxMAorCisjZGVmaW5lIElYR0JFX0RDQl84X1RDX1NVUFBPUlQgICAgICAweDgwCisKK3N0cnVjdCBkY2Jfc3VwcG9ydCB7CisJLyogRENCIGNhcGFiaWxpdGllcyAqLworCXUzMiBjYXBhYmlsaXRpZXM7CisKKwkvKiBFYWNoIGJpdCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIFRDcyBjb25maWd1cmFibGUgaW4gdGhlIGh3LgorCSAqIElmIDggdHJhZmZpYyBjbGFzc2VzIGNhbiBiZSBjb25maWd1cmVkLCB0aGUgdmFsdWUgaXMgMHg4MC4KKwkgKi8KKwl1OCAgdHJhZmZpY19jbGFzc2VzOworCXU4ICBwZmNfdHJhZmZpY19jbGFzc2VzOworfTsKKwogLyogVHJhZmZpYyBjbGFzcyBiYW5kd2lkdGggYWxsb2NhdGlvbiBwZXIgZGlyZWN0aW9uICovCiBzdHJ1Y3QgdGNfYndfYWxsb2MgewogCXU4IGJ3Z19pZDsJCSAgLyogQmFuZHdpZHRoIEdyb3VwIChCV0cpIElEICovCkBAIC0xMDgsMzggKzEyOCwxOCBAQAogCXBiYV84MF80OCAgICAgIC8qIFBCQVswLTNdIGVhY2ggdXNlIDgwS0IsIFBCQVs0LTddIGVhY2ggdXNlIDQ4S0IgKi8KIH07CiAKLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBtYW55IHZhbHVlcyBlbmNvZGVkIGFzIGZpeGVkLXBvaW50Ci0gKiBudW1iZXJzLCBtZWFuaW5nIHRoYXQgc29tZSBvZiBiaXRzIGFyZSBkZWRpY2F0ZWQgdG8gdGhlCi0gKiBtYWduaXR1ZGUgYW5kIG90aGVycyB0byB0aGUgZnJhY3Rpb24gcGFydC4gSW4gdGhlIGNvbW1lbnRzCi0gKiB0aGlzIGlzIHNob3duIGFzIGY9biwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGJpdHMuCi0gKiBUaGVzZSBmcmFjdGlvbiBiaXRzIGFyZSBhbHdheXMgdGhlIGxvdy1vcmRlciBiaXRzLiBUaGUgc2l6ZQotICogb2YgdGhlIG1hZ25pdHVkZSBpcyBub3Qgc3BlY2lmaWVkLgotICovCi1zdHJ1Y3QgYmNuX2NvbmZpZyB7Ci0JdTMyIHJwX2FkbWluX21vZGVbTUFYX1RSQUZGSUNfQ0xBU1NdOyAvKiBCQ04gZW5hYmxlZCwgcGVyIFRDICovCi0JdTMyIGJjbmFfb3B0aW9uWzJdOyAvKiBCQ05BIFBvcnQgKyBNQUMgQWRkciAqLwotCXUzMiBycF93OyAgICAgICAgLyogRGVyaXZhdGl2ZSBXZWlnaHQsIGY9MyAqLwotCXUzMiBycF9naTsgICAgICAgLyogSW5jcmVhc2UgR2FpbiwgZj0xMiAqLwotCXUzMiBycF9nZDsgICAgICAgLyogRGVjcmVhc2UgR2FpbiwgZj0xMiAqLwotCXUzMiBycF9ydTsgICAgICAgLyogUmF0ZSBVbml0ICovCi0JdTMyIHJwX2FscGhhOyAgICAvKiBNYXggRGVjcmVhc2UgRmFjdG9yLCBmPTEyICovCi0JdTMyIHJwX2JldGE7ICAgICAvKiBNYXggSW5jcmVhc2UgRmFjdG9yLCBmPTEyICovCi0JdTMyIHJwX3JpOyAgICAgICAvKiBJbml0aWFsIFJhdGUgKi8KLQl1MzIgcnBfdGQ7ICAgICAgIC8qIERyaWZ0IEludGVydmFsIFRpbWVyICovCi0JdTMyIHJwX3JkOyAgICAgICAvKiBEcmlmdCBJbmNyZWFzZSAqLwotCXUzMiBycF90bWF4OyAgICAgLyogU2V2ZXJlIENvbmdlc3Rpb24gQmFja29mZiBUaW1lciBSYW5nZSAqLwotCXUzMiBycF9ybWluOyAgICAgLyogU2V2ZXJlIENvbmdlc3Rpb24gUmVzdGFydCBSYXRlICovCi0JdTMyIHJwX3dydHQ7ICAgICAvKiBSVFQgTW92aW5nIEF2ZXJhZ2UgV2VpZ2h0ICovCitzdHJ1Y3QgZGNiX251bV90Y3MgeworCXU4IHBnX3RjczsKKwl1OCBwZmNfdGNzOwogfTsKIAogc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgewotCXN0cnVjdCBiY25fY29uZmlnIGJjbjsKLQorCXN0cnVjdCBkY2Jfc3VwcG9ydCBzdXBwb3J0OworCXN0cnVjdCBkY2JfbnVtX3RjcyBudW1fdGNzOwogCXN0cnVjdCB0Y19jb25maWd1cmF0aW9uIHRjX2NvbmZpZ1tNQVhfVFJBRkZJQ19DTEFTU107CiAJdTggICAgIGJ3X3BlcmNlbnRhZ2VbMl1bTUFYX0JXX0dST1VQXTsgLyogT25lIGVhY2ggZm9yIFR4L1J4ICovCi0KLQlib29sICByb3VuZF9yb2Jpbl9lbmFibGU7CisJYm9vbCAgIHBmY19tb2RlX2VuYWJsZTsKKwlib29sICAgcm91bmRfcm9iaW5fZW5hYmxlOwogCiAJZW51bSBkY2JfcnhfcGJhX2NmZyByeF9wYmFfY2ZnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCmluZGV4IDJjMDQ2YjAuLjYyMjA2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjk4LDcgKzI5OCw2IEBACiAJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZyAmPSB+SVhHQkVfUk1DU19URkNFXzgwMl8zWDsKIAkvKiBjb3JyZWN0IHRoZSByZXBvcnRpbmcgb2Ygb3VyIGZsb3cgY29udHJvbCBzdGF0dXMgKi8KLQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX25vbmU7CiAJcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWTsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JNQ1MsIHJlZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKaW5kZXggMWU2YTMxMy4uZWJiZTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYwpAQCAtMCwwICsxLDQ2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIml4Z2JlLmgiCisjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYi5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgorCisvKioKKyAqIGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkgLSBSZXR1cm5zIHN0YXR1cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKyAqIEB0Y19jb3VudDogIE51bWJlciBvZiBlbGVtZW50cyBpbiBid2dfYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0dXMgZGF0YSBmb3IgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzc2VzIGluIHVzZS4KKyAqLworczMyIGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB0Y19jb3VudCkKK3sKKwlpbnQgdGM7CisKKwlpZiAodGNfY291bnQgPiBNQVhfVFJBRkZJQ19DTEFTUykKKwkJcmV0dXJuIERDQl9FUlJfUEFSQU07CisJLyogU3RhdGlzdGljcyBwZXJ0YWluaW5nIHRvIGVhY2ggdHJhZmZpYyBjbGFzcyAqLworCWZvciAodGMgPSAwOyB0YyA8IHRjX2NvdW50OyB0YysrKSB7CisJCS8qIFRyYW5zbWl0dGVkIFBhY2tldHMgKi8KKwkJc3RhdHMtPnFwdGNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKHRjKSk7CisJCS8qIFRyYW5zbWl0dGVkIEJ5dGVzICovCisJCXN0YXRzLT5xYnRjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyh0YykpOworCQkvKiBSZWNlaXZlZCBQYWNrZXRzICovCisJCXN0YXRzLT5xcHJjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSQyh0YykpOworCQkvKiBSZWNlaXZlZCBCeXRlcyAqLworCQlzdGF0cy0+cWJyY1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCUkModGMpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OSAtIFJldHVybiBDQkZDIHN0YXR1cyBkYXRhCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKyAqIEB0Y19jb3VudDogIE51bWJlciBvZiBlbGVtZW50cyBpbiBid2dfYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBDQkZDIHN0YXR1cyBkYXRhIGZvciBlYWNoIG9mIHRoZSBUcmFmZmljIENsYXNzZXMuCisgKi8KK3MzMiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpCit7CisJaW50IHRjOworCisJaWYgKHRjX2NvdW50ID4gTUFYX1RSQUZGSUNfQ0xBU1MpCisJCXJldHVybiBEQ0JfRVJSX1BBUkFNOworCWZvciAodGMgPSAwOyB0YyA8IHRjX2NvdW50OyB0YysrKSB7CisJCS8qIFByaW9yaXR5IFhPRkYgVHJhbnNtaXR0ZWQgKi8KKwkJc3RhdHMtPnB4b2ZmdHhjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPRkZUWEModGMpKTsKKwkJLyogUHJpb3JpdHkgWE9GRiBSZWNlaXZlZCAqLworCQlzdGF0cy0+cHhvZmZyeGNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QWE9GRlJYQ05UKHRjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19wYWNrZXRfYnVmZmVyc184MjU5OSAtIENvbmZpZ3VyZSBEQ0IgcGFja2V0IGJ1ZmZlcnMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHBhY2tldCBidWZmZXJzIGZvciBEQ0IgbW9kZS4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgdmFsdWUgPSBJWEdCRV9SWFBCU0laRV82NEtCOworCXU4ICBpID0gMDsKKworCS8qIFNldHVwIFJ4IHBhY2tldCBidWZmZXIgc2l6ZXMgKi8KKwlzd2l0Y2ggKGRjYl9jb25maWctPnJ4X3BiYV9jZmcpIHsKKwljYXNlIHBiYV84MF80ODoKKwkJLyogU2V0dXAgdGhlIGZpcnN0IGZvdXIgYXQgODBLQiAqLworCQl2YWx1ZSA9IElYR0JFX1JYUEJTSVpFXzgwS0I7CisJCWZvciAoOyBpIDwgNDsgaSsrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgdmFsdWUpOworCQkvKiBTZXR1cCB0aGUgbGFzdCBmb3VyIGF0IDQ4S0IuLi5kb24ndCByZS1pbml0IGkgKi8KKwkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV80OEtCOworCQkvKiBGYWxsIFRocm91Z2ggKi8KKwljYXNlIHBiYV9lcXVhbDoKKwlkZWZhdWx0OgorCQlmb3IgKDsgaSA8IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsgaSsrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgdmFsdWUpOworCisJCS8qIFNldHVwIFR4IHBhY2tldCBidWZmZXIgc2l6ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsgaSsrKSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYUEJTSVpFKGkpLAorCQkJICAgICAgICAgICAgICAgIElYR0JFX1RYUEJTSVpFXzIwS0IpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCVEhSRVNIKGkpLAorCQkJICAgICAgICAgICAgICAgIElYR0JFX1RYUEJUSFJFU0hfRENCKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkgLSBDb25maWcgUnggRGF0YSBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBSeCBQYWNrZXQgQXJiaXRlciBhbmQgY3JlZGl0cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXN0cnVjdCB0Y19id19hbGxvYyAgICAqcDsKKwl1MzIgICAgcmVnICAgICAgICAgICA9IDA7CisJdTMyICAgIGNyZWRpdF9yZWZpbGwgPSAwOworCXUzMiAgICBjcmVkaXRfbWF4ICAgID0gMDsKKwl1OCAgICAgaSAgICAgICAgICAgICA9IDA7CisKKwkvKiBEaXNhYmxlIHRoZSBhcmJpdGVyIGJlZm9yZSBjaGFuZ2luZyBwYXJhbWV0ZXJzICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIElYR0JFX1JUUlBDU19BUkJESVMpOworCisJLyogTWFwIGFsbCB0cmFmZmljIGNsYXNzZXMgdG8gdGhlaXIgVVAsIDEgdG8gMSAqLworCXJlZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCXJlZyB8PSAoaSA8PCAoaSAqIElYR0JFX1JUUlVQMlRDX1VQX1NISUZUKSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJVUDJUQywgcmVnKTsKKworCS8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzIGNyZWRpdHMgYW5kIHByaW9yaXR5ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJcCA9ICZkY2JfY29uZmlnLT50Y19jb25maWdbaV0ucGF0aFtEQ0JfUlhfQ09ORklHXTsKKworCQljcmVkaXRfcmVmaWxsID0gcC0+ZGF0YV9jcmVkaXRzX3JlZmlsbDsKKwkJY3JlZGl0X21heCAgICA9IHAtPmRhdGFfY3JlZGl0c19tYXg7CisJCXJlZyA9IGNyZWRpdF9yZWZpbGwgfCAoY3JlZGl0X21heCA8PCBJWEdCRV9SVFJQVDRDX01DTF9TSElGVCk7CisKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRSUFQ0Q19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2xpbmspCisJCQlyZWcgfD0gSVhHQkVfUlRSUFQ0Q19MU1A7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQVDRDKGkpLCByZWcpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIFJ4IHBhY2tldCBwbGFuZSAocmVjeWNsZSBtb2RlOyBXU1ApIGFuZAorCSAqIGVuYWJsZSBhcmJpdGVyCisJICovCisJcmVnID0gSVhHQkVfUlRSUENTX1JSTSB8IElYR0JFX1JUUlBDU19SQUM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OSAtIENvbmZpZyBUeCBEZXNjLiBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBUeCBEZXNjcmlwdG9yIEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJc3RydWN0IHRjX2J3X2FsbG9jICpwOworCXUzMiAgICByZWcsIG1heF9jcmVkaXRzOworCXU4ICAgICBpOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCBJWEdCRV9SVFREQ1NfQVJCRElTKTsKKworCS8qIENsZWFyIHRoZSBwZXItVHggcXVldWUgY3JlZGl0czsgd2UgdXNlIHBlci1UQyBpbnN0ZWFkICovCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIGkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERUMUMsIDApOworCX0KKworCS8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzIGNyZWRpdHMgYW5kIHByaW9yaXR5ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJcCA9ICZkY2JfY29uZmlnLT50Y19jb25maWdbaV0ucGF0aFtEQ0JfVFhfQ09ORklHXTsKKwkJbWF4X2NyZWRpdHMgPSBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGVzY19jcmVkaXRzX21heDsKKwkJcmVnID0gbWF4X2NyZWRpdHMgPDwgSVhHQkVfUlRURFQyQ19NQ0xfU0hJRlQ7CisJCXJlZyB8PSBwLT5kYXRhX2NyZWRpdHNfcmVmaWxsOworCQlyZWcgfD0gKHUzMikocC0+YndnX2lkKSA8PCBJWEdCRV9SVFREVDJDX0JXR19TSElGVDsKKworCQlpZiAocC0+cHJpb190eXBlID09IHByaW9fZ3JvdXApCisJCQlyZWcgfD0gSVhHQkVfUlRURFQyQ19HU1A7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2xpbmspCisJCQlyZWcgfD0gSVhHQkVfUlRURFQyQ19MU1A7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREVDJDKGkpLCByZWcpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIFR4IGRlc2NyaXB0b3IgcGxhbmUgKHJlY3ljbGUgbW9kZTsgV1NQKSBhbmQKKwkgKiBlbmFibGUgYXJiaXRlcgorCSAqLworCXJlZyA9IElYR0JFX1JUVERDU19URFBBQyB8IElYR0JFX1JUVERDU19URFJNOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkgLSBDb25maWcgVHggRGF0YSBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBUeCBQYWNrZXQgQXJiaXRlciBhbmQgY3JlZGl0cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzdHJ1Y3QgdGNfYndfYWxsb2MgKnA7CisJdTMyIHJlZzsKKwl1OCBpOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUENTLCBJWEdCRV9SVFRQQ1NfQVJCRElTKTsKKworCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KKwlyZWcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQorCQlyZWcgfD0gKGkgPDwgKGkgKiBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUVVAyVEMsIHJlZyk7CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1RYX0NPTkZJR107CisJCXJlZyA9IHAtPmRhdGFfY3JlZGl0c19yZWZpbGw7CisJCXJlZyB8PSAodTMyKShwLT5kYXRhX2NyZWRpdHNfbWF4KSA8PCBJWEdCRV9SVFRQVDJDX01DTF9TSElGVDsKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRUUFQyQ19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2dyb3VwKQorCQkJcmVnIHw9IElYR0JFX1JUVFBUMkNfR1NQOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUVFBUMkNfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUFQyQyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBUeCBwYWNrZXQgcGxhbmUgKHJlY3ljbGUgbW9kZTsgU1A7IGFyYiBkZWxheSkgYW5kCisJICogZW5hYmxlIGFyYml0ZXIKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFRQQ1NfVFBQQUMgfCBJWEdCRV9SVFRQQ1NfVFBSTSB8CisJICAgICAgKElYR0JFX1JUVFBDU19BUkJEX0RDQiA8PCBJWEdCRV9SVFRQQ1NfQVJCRF9TSElGVCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRQQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OSAtIENvbmZpZ3VyZSBwcmlvcml0eSBmbG93IGNvbnRyb2wKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIFByaW9yaXR5IEZsb3cgQ29udHJvbCAoUEZDKSBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwl1MzIgaSwgcmVnOworCisJLyogSWYgUEZDIGlzIGRpc2FibGVkIGdsb2JhbGx5IHRoZW4gZmFsbCBiYWNrIHRvIExGQy4gKi8KKwlpZiAoIWRjYl9jb25maWctPnBmY19tb2RlX2VuYWJsZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJCWh3LT5tYWMub3BzLnNldHVwX2ZjKGh3LCBpKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ29uZmlndXJlIFBGQyBUeCB0aHJlc2hvbGRzIHBlciBUQyAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCS8qIENvbmZpZyBhbmQgcmVtZW1iZXIgVHggKi8KKwkJaWYgKGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX2Z1bGwgfHwKKwkJICAgIGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX3R4KSB7CisJCQlyZWcgPSBody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU47CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KGkpLCByZWcpOworCQkJcmVnID0gaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCByZWcpOworCQl9IGVsc2UgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShpKSwgMCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCAwKTsKKwkJfQorCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gaHctPmZjLnBhdXNlX3RpbWUgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCWZvciAoaSA9IDA7IGkgPCAoTUFYX1RSQUZGSUNfQ0xBU1MgLyAyKTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFRWKGkpLCByZWcpOworCisJLyogQ29uZmlndXJlIGZsb3cgY29udHJvbCByZWZyZXNoIHRocmVzaG9sZCB2YWx1ZSAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVFYsIGh3LT5mYy5wYXVzZV90aW1lIC8gMik7CisKKwkvKiBFbmFibGUgVHJhbnNtaXQgUEZDICovCisJcmVnID0gSVhHQkVfRkNDRkdfVEZDRV9QUklPUklUWTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDQ0ZHLCByZWcpOworCisJLyoKKwkgKiBFbmFibGUgUmVjZWl2ZSBQRkMKKwkgKiBXZSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KKwkgKiB3ZSBhcmUgaW4gUEZDIG1vZGUuCisJICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwlyZWcgJj0gfklYR0JFX01GTENOX1JGQ0U7CisJcmVnIHw9IElYR0JFX01GTENOX1JQRkNFOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUZMQ04sIHJlZyk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OSAtIENvbmZpZyB0cmFmZmljIGNsYXNzIHN0YXRpc3RpY3MKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgcXVldWUgc3RhdGlzdGljcyByZWdpc3RlcnMsIGFsbCBxdWV1ZXMgYmVsb25naW5nIHRvIHNhbWUgdHJhZmZpYworICogY2xhc3MgdXNlcyBhIHNpbmdsZSBzZXQgb2YgcXVldWUgc3RhdGlzdGljcyBjb3VudGVycy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcmVnID0gMDsKKwl1OCAgaSAgID0gMDsKKworCS8qCisJICogUmVjZWl2ZSBRdWV1ZXMgc3RhdHMgc2V0dGluZworCSAqIDMyIFJRU01SIHJlZ2lzdGVycywgZWFjaCBjb25maWd1cmluZyA0IHF1ZXVlcy4KKwkgKiBTZXQgYWxsIDE2IHF1ZXVlcyBvZiBlYWNoIFRDIHRvIHRoZSBzYW1lIHN0YXQKKwkgKiB3aXRoIFRDICduJyBnb2luZyB0byBzdGF0ICduJy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlyZWcgPSAweDAxMDEwMTAxICogKGkgLyA0KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SUVNNUihpKSwgcmVnKTsKKwl9CisJLyoKKwkgKiBUcmFuc21pdCBRdWV1ZXMgc3RhdHMgc2V0dGluZworCSAqIDMyIFRRU00gcmVnaXN0ZXJzLCBlYWNoIGNvbnRyb2xsaW5nIDQgcXVldWVzLgorCSAqIFNldCBhbGwgcXVldWVzIG9mIGVhY2ggVEMgdG8gdGhlIHNhbWUgc3RhdAorCSAqIHdpdGggVEMgJ24nIGdvaW5nIHRvIHN0YXQgJ24nLgorCSAqIFR4IHF1ZXVlcyBhcmUgYWxsb2NhdGVkIG5vbi11bmlmb3JtbHkgdG8gVENzOgorCSAqIDMyLCAzMiwgMTYsIDE2LCA4LCA4LCA4LCA4LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChpIDwgOCkKKwkJCXJlZyA9IDB4MDAwMDAwMDA7CisJCWVsc2UgaWYgKGkgPCAxNikKKwkJCXJlZyA9IDB4MDEwMTAxMDE7CisJCWVsc2UgaWYgKGkgPCAyMCkKKwkJCXJlZyA9IDB4MDIwMjAyMDI7CisJCWVsc2UgaWYgKGkgPCAyNCkKKwkJCXJlZyA9IDB4MDMwMzAzMDM7CisJCWVsc2UgaWYgKGkgPCAyNikKKwkJCXJlZyA9IDB4MDQwNDA0MDQ7CisJCWVsc2UgaWYgKGkgPCAyOCkKKwkJCXJlZyA9IDB4MDUwNTA1MDU7CisJCWVsc2UgaWYgKGkgPCAzMCkKKwkJCXJlZyA9IDB4MDYwNjA2MDY7CisJCWVsc2UKKwkJCXJlZyA9IDB4MDcwNzA3MDc7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFFTTShpKSwgcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnXzgyNTk5IC0gQ29uZmlndXJlIGdlbmVyYWwgRENCIHBhcmFtZXRlcnMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIGdlbmVyYWwgRENCIHBhcmFtZXRlcnMuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHJlZzsKKwl1MzIgcTsKKworCS8qIERpc2FibGUgdGhlIFR4IGRlc2MgYXJiaXRlciBzbyB0aGF0IE1UUUMgY2FuIGJlIGNoYW5nZWQgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKKwlyZWcgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcmVnKTsKKworCS8qIEVuYWJsZSBEQ0IgZm9yIFJ4IHdpdGggOCBUQ3MgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVJRQyk7CisJc3dpdGNoIChyZWcgJiBJWEdCRV9NUlFDX01SUUVfTUFTSykgeworCWNhc2UgMDoKKwljYXNlIElYR0JFX01SUUNfUlQ0VENFTjoKKwkJLyogUlNTIGRpc2FibGVkIGNhc2VzICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVDhUQ0VOOworCQlicmVhazsKKwljYXNlIElYR0JFX01SUUNfUlNTRU46CisJY2FzZSBJWEdCRV9NUlFDX1JUUlNTNFRDRU46CisJCS8qIFJTUyBlbmFibGVkIGNhc2VzICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVFJTUzhUQ0VOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCB2YWx1ZSwgYXNzdW1lIHN0YWxlIGRhdGEsIG92ZXJ3cml0ZSBubyBSU1MgKi8KKwkJcmVnID0gKHJlZyAmIH5JWEdCRV9NUlFDX01SUUVfTUFTSykgfCBJWEdCRV9NUlFDX1JUOFRDRU47CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgcmVnKTsKKworCS8qIEVuYWJsZSBEQ0IgZm9yIFR4IHdpdGggOCBUQ3MgKi8KKwlyZWcgPSBJWEdCRV9NVFFDX1JUX0VOQSB8IElYR0JFX01UUUNfOFRDXzhUUTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIHJlZyk7CisKKwkvKiBEaXNhYmxlIGRyb3AgZm9yIGFsbCBxdWV1ZXMgKi8KKwlmb3IgKHEgPSAwOyBxIDwgMTI4OyBxKyspCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUURFLCBxIDw8IElYR0JFX1FERV9JRFhfU0hJRlQpOworCisJLyogRW5hYmxlIHRoZSBUeCBkZXNjIGFyYml0ZXIgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKKwlyZWcgJj0gfklYR0JFX1JUVERDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5IC0gQ29uZmlndXJlIGFuZCBlbmFibGUgRENCCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBkY2Igc2V0dGluZ3MgYW5kIGVuYWJsZSBkY2IgbW9kZS4KKyAqLworczMyIGl4Z2JlX2RjYl9od19jb25maWdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCWl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfODI1OTkoaHcpOworCWl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShodyk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVlMjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0RDQl84MjU5OV9DT05GSUdfSF8KKyNkZWZpbmUgX0RDQl84MjU5OV9DT05GSUdfSF8KKworLyogRENCIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1JUVERDU19URFBBQyAgICAgIDB4MDAwMDAwMDEgLyogMCBSb3VuZCBSb2JpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAxIFdTUCAtIFdlaWdodGVkIFN0cmljdCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVk1QQUMgICAgICAweDAwMDAwMDAyIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBXUlIgLSBXZWlnaHRlZCBSb3VuZCBSb2JpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVERSTSAgICAgICAweDAwMDAwMDEwIC8qIFRyYW5zbWl0IFJlY3ljbGUgTW9kZSAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIERDQiBhcmJpdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0JEUE0gICAgICAgMHgwMDQwMDAwMCAvKiBCeXBhc3MgRGF0YSBQaXBlIC0gbXVzdCBjbGVhciEgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0JQQkZTTSAgICAgMHgwMDgwMDAwMCAvKiBCeXBhc3MgUEIgRnJlZSBTcGFjZSAtIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2xlYXIhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfU1BFRURfQ0hHICAweDgwMDAwMDAwIC8qIExpbmsgc3BlZWQgY2hhbmdlICovCisKKy8qIFJlY2VpdmUgVVAyVEMgbWFwcGluZyAqLworI2RlZmluZSBJWEdCRV9SVFJVUDJUQ19VUF9TSElGVCAzCisvKiBUcmFuc21pdCBVUDJUQyBtYXBwaW5nICovCisjZGVmaW5lIElYR0JFX1JUVFVQMlRDX1VQX1NISUZUIDMKKworI2RlZmluZSBJWEdCRV9SVFJQVDRDX01DTF9TSElGVCAxMiAvKiBPZmZzZXQgdG8gTWF4IENyZWRpdCBMaW1pdCBzZXR0aW5nICovCisjZGVmaW5lIElYR0JFX1JUUlBUNENfQldHX1NISUZUIDkgIC8qIE9mZnNldCB0byBCV0cgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19HU1AgICAgICAgMHg0MDAwMDAwMCAvKiBHU1AgZW5hYmxlIGJpdCAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRDX0xTUCAgICAgICAweDgwMDAwMDAwIC8qIExTUCBlbmFibGUgYml0ICovCisKKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9NUEJFTiAgICAgMHgwMDAwMDAxMCAvKiBETUEgY29uZmlnIGZvciBtdWx0aXBsZSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBidWZmZXJzIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX01DRU4gICAgICAweDAwMDAwMDQwIC8qIERNQSBjb25maWcgZm9yIG11bHRpcGxlIGNvcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKFJTUykgZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFJUUlBDUyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTX1JSTSAgICAgICAgMHgwMDAwMDAwMiAvKiBSZWNlaXZlIFJlY3ljbGUgTW9kZSBlbmFibGUgKi8KKy8qIFJlY2VpdmUgQXJiaXRyYXRpb24gQ29udHJvbDogMCBSb3VuZCBSb2JpbiwgMSBERlAgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTX1JBQyAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9SVFJQQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIEFyYml0cmF0aW9uIGRpc2FibGUgYml0ICovCisKKy8qIFJUVERUMkMgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JUVERUMkNfTUNMX1NISUZUIDEyCisjZGVmaW5lIElYR0JFX1JUVERUMkNfQldHX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfUlRURFQyQ19HU1AgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9SVFREVDJDX0xTUCAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19NQ0xfU0hJRlQgMTIKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19CV0dfU0hJRlQgOQorI2RlZmluZSBJWEdCRV9SVFRQVDJDX0dTUCAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfTFNQICAgICAgIDB4ODAwMDAwMDAKKworLyogUlRUUENTIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfVFBQQUMgICAgICAweDAwMDAwMDIwIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBTUCAtIFN0cmljdCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIEFyYml0ZXIgZGlzYWJsZSAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfVFBSTSAgICAgICAweDAwMDAwMTAwIC8qIFRyYW5zbWl0IFJlY3ljbGUgTW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRfU0hJRlQgMjIKKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRfRENCICAgMHg0ICAgICAgICAvKiBBcmJpdHJhdGlvbiBkZWxheSBpbiBEQ0IgbW9kZSAqLworCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFXzIwS0IgICAgIDB4MDAwMDUwMDAgLyogMjBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFXzQwS0IgICAgIDB4MDAwMEEwMDAgLyogNDBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzQ4S0IgICAgIDB4MDAwMEMwMDAgLyogNDhLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzY0S0IgICAgIDB4MDAwMTAwMDAgLyogNjRLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzgwS0IgICAgIDB4MDAwMTQwMDAgLyogODBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzEyOEtCICAgIDB4MDAwMjAwMDAgLyogMTI4S0IgUGFja2V0IEJ1ZmZlciAqLworCisjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0hfRENCICAgIDB4QSAgICAgICAgLyogVEhSRVNIIHZhbHVlIGZvciBEQ0IgbW9kZSAqLworCisKKy8qIERDQiBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgQVBJcyAqLworCisvKiBEQ0IgUEZDIGZ1bmN0aW9ucyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9nZXRfcGZjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2h3X3N0YXRzICpzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB0Y19jb3VudCk7CisKKy8qIERDQiB0cmFmZmljIGNsYXNzIHN0YXRzICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpOworCisvKiBEQ0IgY29uZmlnIGFyYml0ZXJzICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CitzMzIgaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKTsKKworCisvKiBEQ0IgaHcgaW5pdGlhbGl6YXRpb24gKi8KK3MzMiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqY29uZmlnKTsKKworI2VuZGlmIC8qIF9EQ0JfODI1OTlfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggNDEyOTk3NjkuLjBhODczMWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgQklUX1BHX1JYCTB4MDQKICNkZWZpbmUgQklUX1BHX1RYCTB4MDgKICNkZWZpbmUgQklUX0JDTiAgICAgICAgIDB4MTAKKyNkZWZpbmUgQklUX0xJTktTUEVFRCAgIDB4ODAKIAogaW50IGl4Z2JlX2NvcHlfZGNiX2NmZyhzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqc3JjX2RjYl9jZmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkc3RfZGNiX2NmZywgaW50IHRjX21heCkKQEAgLTg5LDI1ICs5MCw2IEBACiAJCQlzcmNfZGNiX2NmZy0+dGNfY29uZmlnW2kgLSBEQ0JfUEZDX1VQX0FUVFJfMF0uZGNiX3BmYzsKIAl9CiAKLQlmb3IgKGkgPSBEQ0JfQkNOX0FUVFJfUlBfMDsgaSA8IERDQl9CQ05fQVRUUl9SUF9BTEw7IGkrKykgewotCQlkc3RfZGNiX2NmZy0+YmNuLnJwX2FkbWluX21vZGVbaSAtIERDQl9CQ05fQVRUUl9SUF8wXSA9Ci0JCQlzcmNfZGNiX2NmZy0+YmNuLnJwX2FkbWluX21vZGVbaSAtIERDQl9CQ05fQVRUUl9SUF8wXTsKLQl9Ci0JZHN0X2RjYl9jZmctPmJjbi5iY25hX29wdGlvblswXSA9IHNyY19kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMF07Ci0JZHN0X2RjYl9jZmctPmJjbi5iY25hX29wdGlvblsxXSA9IHNyY19kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMV07Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9hbHBoYSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfYWxwaGE7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9iZXRhID0gc3JjX2RjYl9jZmctPmJjbi5ycF9iZXRhOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfZ2QgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2dkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfZ2kgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2dpOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfdG1heCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfdG1heDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3RkID0gc3JjX2RjYl9jZmctPmJjbi5ycF90ZDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JtaW4gPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JtaW47Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF93ID0gc3JjX2RjYl9jZmctPmJjbi5ycF93OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcmQgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcnUgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3J1OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfd3J0dCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfd3J0dDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JpID0gc3JjX2RjYl9jZmctPmJjbi5ycF9yaTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMjAsMTIgKzEwMiw2IEBACiAJcmV0dXJuICEhKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk7CiB9CiAKLXN0YXRpYyB1MTYgaXhnYmVfZGNiX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qIEFsbCB0cmFmZmljIHNob3VsZCBkZWZhdWx0IHRvIGNsYXNzIDAgKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU4IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBzdGF0ZSkKIHsKIAl1OCBlcnIgPSAwOwpAQCAtMTUzLDggKzEyOSw4IEBACiAJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwogCQlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKIAkJYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7Ci0JCW5ldGRldi0+c2VsZWN0X3F1ZXVlID0gJml4Z2JlX2RjYl9zZWxlY3RfcXVldWU7CiAKKwkJYWRhcHRlci0+aHcuZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19wZmM7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JTU19FTkFCTEVEOwogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwogCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CkBAIC0xNjMsNiArMTM5LDcgQEAKIAl9IGVsc2UgewogCQkvKiBUdXJuIG9mZiBEQ0IgKi8KIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQkJYWRhcHRlci0+aHcuZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19kZWZhdWx0OwogCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CiAJCQlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKQEAgLTE3Miw3ICsxNDksNiBAQAogCQkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CiAJCQlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKIAkJCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOwotCQkJbmV0ZGV2LT5zZWxlY3RfcXVldWUgPSBOVUxMOwogCiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKIAkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CkBAIC00NDQsMTc1ICs0MjAsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZ2V0YmNucnAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LAotCQkJCSAgdTggKnNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9hZG1pbl9tb2RlW3ByaW9yaXR5XTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRiY25jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGVudW1faW5kZXgsCi0JCQkJICB1MzIgKnNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0Jc3dpdGNoIChlbnVtX2luZGV4KSB7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8wOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV07Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0FMUEhBOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FscGhhOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CRVRBOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2JldGE7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dEOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HSToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9naTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVE1BWDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90bWF4OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9URDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90ZDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUk1JTjoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ybWluOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3c7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JEOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SVToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ydTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfV1JUVDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93cnR0OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SSToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yaTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnNldHRpbmcgPSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX3NldGJjbnJwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKLQkJCQkgdTggc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldID0gc2V0dGluZzsKLQotCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldICE9Ci0JICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldKQotCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotfQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9zZXRiY25jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGVudW1faW5kZXgsCi0JCQkJIHUzMiBzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXN3aXRjaCAoZW51bV9pbmRleCkgewotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdICE9Ci0JCQlhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdICE9Ci0JCQlhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0FMUEhBOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FscGhhID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWxwaGEgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FscGhhKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkVUQToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9iZXRhID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYmV0YSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYmV0YSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dEOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2QgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0k6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2kgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9naSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2kpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9UTUFYOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RtYXggPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90bWF4ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90bWF4KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVEQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdGQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90ZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdGQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9STUlOOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JtaW4gPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ybWluICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ybWluKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVzoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93ID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdyAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdykKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JEOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmQgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUlU6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcnUgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ydSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcnUpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XUlRUOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3dydHQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93cnR0ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93cnR0KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkk6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmkgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yaSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmkpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KIHN0cnVjdCBkY2JubF9ydG5sX29wcyBkY2JubF9vcHMgPSB7CiAJLmdldHN0YXRlCT0gaXhnYmVfZGNibmxfZ2V0X3N0YXRlLAogCS5zZXRzdGF0ZQk9IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZSwKQEAgLTYzMyw5ICs0NDAsNSBAQAogCS5zZXRudW10Y3MJPSBpeGdiZV9kY2JubF9zZXRudW10Y3MsCiAJLmdldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfZ2V0cGZjc3RhdGUsCiAJLnNldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfc2V0cGZjc3RhdGUsCi0JLmdldGJjbmNmZyAgICAgID0gaXhnYmVfZGNibmxfZ2V0YmNuY2ZnLAotCS5nZXRiY25ycCAgICAgICA9IGl4Z2JlX2RjYm5sX2dldGJjbnJwLAotCS5zZXRiY25jZmcgICAgICA9IGl4Z2JlX2RjYm5sX3NldGJjbmNmZywKLQkuc2V0YmNucnAgICAgICAgPSBpeGdiZV9kY2JubF9zZXRiY25ycAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDY3Zjg3YTcuLjE4ZWNiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC04OSw4ICs4OSw3IEBACiAJeyJyeF9oZWFkZXJfc3BsaXQiLCBJWEdCRV9TVEFUKHJ4X2hkcl9zcGxpdCl9LAogCXsiYWxsb2NfcnhfcGFnZV9mYWlsZWQiLCBJWEdCRV9TVEFUKGFsbG9jX3J4X3BhZ2VfZmFpbGVkKX0sCiAJeyJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpfSwKLQl7Imxyb19hZ2dyZWdhdGVkIiwgSVhHQkVfU1RBVChscm9fYWdncmVnYXRlZCl9LAotCXsibHJvX2ZsdXNoZWQiLCBJWEdCRV9TVEFUKGxyb19mbHVzaGVkKX0sCisJeyJyeF9ub19kbWFfcmVzb3VyY2VzIiwgSVhHQkVfU1RBVChod19yeF9ub19kbWFfcmVzb3VyY2VzKX0sCiB9OwogCiAjZGVmaW5lIElYR0JFX1FVRVVFX1NUQVRTX0xFTiBcCkBAIC0xMzIsNiArMTMxLDI2IEBACiAJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwogCiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCX0gZWxzZSBpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lKSB7CisJCS8qIFNldCBhcyBGSUJSRSB1bnRpbCBTRVJERVMgZGVmaW5lZCBpbiBrZXJuZWwgKi8KKwkJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCVNVUFBPUlRFRF9GSUJSRSk7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWJyZWFrOworCQljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfRklCUkUpOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCQlicmVhazsKKwkJfQogCX0gZWxzZSB7CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CiAJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKQEAgLTIwNiwxMyArMjI1LDEzIEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlwYXVzZS0+YXV0b25lZyA9IChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19mdWxsID8gMSA6IDApOworCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfZnVsbCA/IDEgOiAwKTsKIAotCWlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCWlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7Ci0JfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY190eF9wYXVzZSkgeworCX0gZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY190eF9wYXVzZSkgewogCQlwYXVzZS0+dHhfcGF1c2UgPSAxOwotCX0gZWxzZSBpZiAoaHctPmZjLnR5cGUgPT0gaXhnYmVfZmNfZnVsbCkgeworCX0gZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19mdWxsKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7CiAJfQpAQCAtMjI2LDIyICsyNDUsMTcgQEAKIAogCWlmICgocGF1c2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8CiAJICAgIChwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKSkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOwogCWVsc2UgaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKIAllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY190eF9wYXVzZTsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfdHhfcGF1c2U7CiAJZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX25vbmU7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKLQkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CisJaHctPm1hYy5vcHMuc2V0dXBfZmMoaHcsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTYsNyArNDcwLDcgQEAKIAlyZWdzX2J1ZmZbODI1XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JUDZBVCk7CiAJcmVnc19idWZmWzgyNl0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTCk7CiAJcmVnc19idWZmWzgyN10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTSk7Ci0JcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCk7CisJcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCgwKSk7CiAKIAlyZWdzX2J1ZmZbODI5XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAlyZWdzX2J1ZmZbODMwXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EUE1DUyk7CkBAIC02NjEsMTAgKzY3NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJY2hhciBmaXJtd2FyZV92ZXJzaW9uWzMyXTsKIAogCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCBpeGdiZV9kcml2ZXJfbmFtZSwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgaXhnYmVfZHJpdmVyX3ZlcnNpb24sIDMyKTsKLQlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCAzMik7CisKKwlzcHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sICIlZC4lZC0lZCIsCisJICAgICAgICAoYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweEYwMDApID4+IDEyLAorCSAgICAgICAgKGFkYXB0ZXItPmVlcHJvbV92ZXJzaW9uICYgMHgwRkYwKSA+PiA0LAorCSAgICAgICAgYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweDAwMEYpOworCisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBmaXJtd2FyZV92ZXJzaW9uLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKIAlkcnZpbmZvLT5uX3N0YXRzID0gSVhHQkVfU1RBVFNfTEVOOwogCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gaXhnYmVfZ2V0X3JlZ3NfbGVuKG5ldGRldik7CkBAIC04MDgsMTUgKzgyOSw2IEBACiAJaW50IHN0YXRfY291bnQgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWludCBqLCBrOwogCWludCBpOwotCXU2NCBhZ2dyZWdhdGVkID0gMCwgZmx1c2hlZCA9IDAsIG5vX2Rlc2MgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJYWdncmVnYXRlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQkJZmx1c2hlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQkJbm9fZGVzYyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKLQl9Ci0JYWRhcHRlci0+bHJvX2FnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVkOwotCWFkYXB0ZXItPmxyb19mbHVzaGVkID0gZmx1c2hlZDsKLQlhZGFwdGVyLT5scm9fbm9fZGVzYyA9IG5vX2Rlc2M7CiAKIAlpeGdiZV91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAJZm9yIChpID0gMDsgaSA8IElYR0JFX0dMT0JBTF9TVEFUU19MRU47IGkrKykgewpAQCAtODk3LDEyICs5MDksNTAgQEAKIHN0YXRpYyB2b2lkIGl4Z2JlX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewotCXdvbC0+c3VwcG9ydGVkID0gMDsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwKKwkgICAgICAgICAgICAgICAgIFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOwogCXdvbC0+d29sb3B0cyA9IDA7CiAKKwlpZiAoIWRldmljZV9jYW5fd2FrZXVwKCZhZGFwdGVyLT5wZGV2LT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19FWCkKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfVUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfTUMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01DQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX0JDKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9CQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19NQUcpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGl4Z2JlX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlhZGFwdGVyLT53b2wgPSAwOworCisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX0VYOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19NQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfQkM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX01BRzsKKworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTk2NSw0MCArMTAxNSw0NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBpOwogCiAJaWYgKGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpCiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0ud29ya19saW1pdCA9IGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CiAKIAlpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gMSkgeworCQkvKiBjaGVjayB0aGUgbGltaXRzICovCisJCWlmICgoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPiBJWEdCRV9NQVhfSU5UX1JBVEUpIHx8CisJCSAgICAoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPCBJWEdCRV9NSU5fSU5UX1JBVEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJLyogc3RvcmUgdGhlIHZhbHVlIGluIGludHMvc2Vjb25kICovCiAJCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjczsKIAogCQkvKiBzdGF0aWMgdmFsdWUgb2YgaW50ZXJydXB0IHJhdGUgKi8KIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwotCQkvKiBjbGVhciB0aGUgbG93ZXIgYml0ICovCisJCS8qIGNsZWFyIHRoZSBsb3dlciBiaXQgYXMgaXRzIHVzZWQgZm9yIGR5bmFtaWMgc3RhdGUgKi8KIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgJj0gfjE7CiAJfSBlbHNlIGlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPT0gMSkgewogCQkvKiAxIG1lYW5zIGR5bmFtaWMgbW9kZSAqLwogCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gMjAwMDA7CiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKIAl9IGVsc2UgewotCQkvKiBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgZGlzYWJsZSBlaXRyLCB3aGljaCBpcyBiZXN0Ci0JCSAqIHNlcnZlZCBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgcmF0ZSB2ZXJ5IGhpZ2ggKi8KLQkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDMwMDAwMDA7CisJCS8qCisJCSAqIGFueSBvdGhlciB2YWx1ZSBtZWFucyBkaXNhYmxlIGVpdHIsIHdoaWNoIGlzIGJlc3QKKwkJICogc2VydmVkIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCByYXRlIHZlcnkgaGlnaAorCQkgKi8KKwkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IElYR0JFX01BWF9JTlRfUkFURTsKIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAwOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7CiAJCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSAmYWRhcHRlci0+cV92ZWN0b3JbaV07CiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJLyogdHggdmVjdG9yIGdldHMgaGFsZiB0aGUgcmF0ZSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKIAkJZWxzZQogCQkJLyogcnggb25seSBvciBtaXhlZCAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoaSksCi0JCSAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcocV92ZWN0b3ItPmVpdHIpKTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCBpLAorCQkgICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAxMiw2ICsxMDY5LDcgQEAKIAkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGl4Z2JlX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgICAgICAgICAgICAgICA9IGl4Z2JlX2dldF9yZWdzLAogCS5nZXRfd29sICAgICAgICAgICAgICAgID0gaXhnYmVfZ2V0X3dvbCwKKwkuc2V0X3dvbCAgICAgICAgICAgICAgICA9IGl4Z2JlX3NldF93b2wsCiAJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBpeGdiZV9ud2F5X3Jlc2V0LAogCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4gICAgICAgICA9IGl4Z2JlX2dldF9lZXByb21fbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGQyZjRkNWYuLjc5YWE4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00NywxMiArNDcsMTMgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMy4zMC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC44LWsyIgogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047Ci1zdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4iOworc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppeGdiZV9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU5OF0gPSAmaXhnYmVfODI1OThfaW5mbywKKwlbYm9hcmRfODI1OTldID0gJml4Z2JlXzgyNTk5X2luZm8sCiB9OwogCiAvKiBpeGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQpAQCAtNjQsNiArNjUsOCBAQAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmVfcGNpX3RibFtdID0geworCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4KSwKKwkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFGX0RVQUxfUE9SVCksCiAJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThBRl9TSU5HTEVfUE9SVCksCkBAIC04Miw2ICs4NSwxMiBAQAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4RUJfU0ZQX0xPTSksCiAJIGJvYXJkXzgyNTk4IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThfQlgpLAorCSBib2FyZF84MjU5OCB9LAorCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk5X0tYNCksCisJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfU0ZQKSwKKwkgYm9hcmRfODI1OTkgfSwKIAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCwgfQpAQCAtMTI1LDE3ICsxMzQsNTMgQEAKIAkgICAgICAgICAgICAgICAgY3RybF9leHQgfCBJWEdCRV9DVFJMX0VYVF9EUlZfTE9BRCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdmFyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgaW50X2FsbG9jX2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbXNpeF92ZWN0b3IpCisvKgorICogaXhnYmVfc2V0X2l2YXIgLSBzZXQgdGhlIElWQVIgcmVnaXN0ZXJzLCBtYXBwaW5nIGludGVycnVwdCBjYXVzZXMgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEBkaXJlY3Rpb246IDAgZm9yIFJ4LCAxIGZvciBUeCwgLTEgZm9yIG90aGVyIGNhdXNlcworICogQHF1ZXVlOiBxdWV1ZSB0byBtYXAgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvCisgKiBAbXNpeF92ZWN0b3I6IHRoZSB2ZWN0b3IgdG8gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlCisgKgorICovCitzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXZhcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgczggZGlyZWN0aW9uLAorCSAgICAgICAgICAgICAgICAgICB1OCBxdWV1ZSwgdTggbXNpeF92ZWN0b3IpCiB7CiAJdTMyIGl2YXIsIGluZGV4OwotCi0JbXNpeF92ZWN0b3IgfD0gSVhHQkVfSVZBUl9BTExPQ19WQUw7Ci0JaW5kZXggPSAoaW50X2FsbG9jX2VudHJ5ID4+IDIpICYgMHgxRjsKLQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSKGluZGV4KSk7Ci0JaXZhciAmPSB+KDB4RkYgPDwgKDggKiAoaW50X2FsbG9jX2VudHJ5ICYgMHgzKSkpOwotCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8ICg4ICogKGludF9hbGxvY19lbnRyeSAmIDB4MykpKTsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSKGluZGV4KSwgaXZhcik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpZiAoZGlyZWN0aW9uID09IC0xKQorCQkJZGlyZWN0aW9uID0gMDsKKwkJaW5kZXggPSAoKChkaXJlY3Rpb24gKiA2NCkgKyBxdWV1ZSkgPj4gMikgJiAweDFGOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpKTsKKwkJaXZhciAmPSB+KDB4RkYgPDwgKDggKiAocXVldWUgJiAweDMpKSk7CisJCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8ICg4ICogKHF1ZXVlICYgMHgzKSkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJaWYgKGRpcmVjdGlvbiA9PSAtMSkgeworCQkJLyogb3RoZXIgY2F1c2VzICovCisJCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJCWluZGV4ID0gKChxdWV1ZSAmIDEpICogOCk7CisJCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSX01JU0MpOworCQkJaXZhciAmPSB+KDB4RkYgPDwgaW5kZXgpOworCQkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfSVZBUl9NSVNDLCBpdmFyKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogdHggb3IgcnggY2F1c2VzICovCisJCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJCWluZGV4ID0gKCgxNiAqIChxdWV1ZSAmIDEpKSArICg4ICogZGlyZWN0aW9uKSk7CisJCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lWQVIocXVldWUgPj4gMSkpOworCQkJaXZhciAmPSB+KDB4RkYgPDwgaW5kZXgpOworCQkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JVkFSKHF1ZXVlID4+IDEpLCBpdmFyKTsKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTIwMCwzOSArMjQ1LDM5IEBACiAjZGVmaW5lIERFU0NfTkVFREVEIChUWERfVVNFX0NPVU5UKElYR0JFX01BWF9EQVRBX1BFUl9UWEQpIC8qIHNrYi0+ZGF0YSAqLyArIFwKIAlNQVhfU0tCX0ZSQUdTICogVFhEX1VTRV9DT1VOVChQQUdFX1NJWkUpICsgMSkgLyogZm9yIGNvbnRleHQgKi8KIAotI2RlZmluZSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcocmluZykgKFwKLQkqKHZvbGF0aWxlIHUzMiAqKSBcCi0JKCh1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqKShyaW5nKS0+ZGVzYyArIChyaW5nKS0+Y291bnQpKQogc3RhdGljIHZvaWQgaXhnYmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAogLyoqCiAgKiBpeGdiZV9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHR4X3Jpbmc6IHR4IHJpbmcgdG8gY2xlYW4KKyAqCisgKiByZXR1cm5zIHRydWUgaWYgdHJhbnNtaXQgd29yayBpcyBkb25lCiAgKiovCiBzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCiB7Ci0JdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2M7Ci0Jc3RydWN0IGl4Z2JlX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBpOwotCXUzMiBoZWFkLCBvbGRoZWFkOwotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MsICplb3BfZGVzYzsKKwlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaSwgZW9wLCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CiAKLQlybWIoKTsKLQloZWFkID0gR0VUX1RYX0hFQURfRlJPTV9SSU5HKHR4X3JpbmcpOwotCWhlYWQgPSBsZTMyX3RvX2NwdShoZWFkKTsKIAlpID0gdHhfcmluZy0+bmV4dF90b19jbGVhbjsKLQl3aGlsZSAoMSkgewotCQl3aGlsZSAoaSAhPSBoZWFkKSB7CisJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCisJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT53b3JrX2xpbWl0KSkgeworCQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwkJZm9yICggOyAhY2xlYW5lZDsgY291bnQrKykgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CiAJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOwogCQkJc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKIAotCQkJaWYgKHNrYikgeworCQkJaWYgKGNsZWFuZWQgJiYgc2tiKSB7CiAJCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKIAogCQkJCS8qIGdzb19zZWdzIGlzIGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciB0Y3AgKi8KQEAgLTI0NywyMyArMjkyLDE3IEBACiAJCQlpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhfYnVmZmVyX2luZm8pOwogCisJCQl0eF9kZXNjLT53Yi5zdGF0dXMgPSAwOworCiAJCQlpKys7CiAJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKIAkJCQlpID0gMDsKLQotCQkJY291bnQrKzsKLQkJCWlmIChjb3VudCA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlnb3RvIGRvbmVfY2xlYW5pbmc7CiAJCX0KLQkJb2xkaGVhZCA9IGhlYWQ7Ci0JCXJtYigpOwotCQloZWFkID0gR0VUX1RYX0hFQURfRlJPTV9SSU5HKHR4X3JpbmcpOwotCQloZWFkID0gbGUzMl90b19jcHUoaGVhZCk7Ci0JCWlmIChoZWFkID09IG9sZGhlYWQpCi0JCQlnb3RvIGRvbmVfY2xlYW5pbmc7Ci0JfSAvKiB3aGlsZSAoMSkgKi8KIAotZG9uZV9jbGVhbmluZzoKKwkJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwkJZW9wX2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKKwl9CisKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKIAogI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQpAQCAtMjkxLDE3ICszMzAsMTYgQEAKIAl9CiAKIAkvKiByZS1hcm0gdGhlIGludGVycnVwdCAqLwotCWlmICgodG90YWxfcGFja2V0cyA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KSB8fAotCSAgICAoY291bnQgPT0gdHhfcmluZy0+Y291bnQpKQorCWlmIChjb3VudCA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KQogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCB0eF9yaW5nLT52X2lkeCk7CiAKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7Ci0JdHhfcmluZy0+c3RhdHMuYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CiAJdHhfcmluZy0+c3RhdHMucGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOworCXR4X3JpbmctPnN0YXRzLmJ5dGVzICs9IHRvdGFsX2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwotCXJldHVybiAodG90YWxfcGFja2V0cyA/IHRydWUgOiBmYWxzZSk7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpOwogfQogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQpAQCAtMzE0LDEzICszNTIsMTkgQEAKIAogCWlmIChyeF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7Ci0JCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOwotCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7CisJCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJcnhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJcnhjdHJsIHw9IElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CiAJCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwogCQlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKLQkJCSAgICBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCSAgICAgICAgICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSwgcnhjdHJsKTsKIAkJcnhfcmluZy0+Y3B1ID0gY3B1OwogCX0KQEAgLTMzNiw4ICszODAsMTQgQEAKIAogCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSk7Ci0JCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwotCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7CisJCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSwgdHhjdHJsKTsKIAkJdHhfcmluZy0+Y3B1ID0gY3B1OwpAQCAtNDAzLDIzICs0NTMsMjEgQEAKICAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAogICogQHJ4X2Rlc2M6IHJ4IGRlc2NyaXB0b3IKICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX3JlY2VpdmVfc2tiKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorc3RhdGljIHZvaWQgaXhnYmVfcmVjZWl2ZV9za2Ioc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCiB7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcV92ZWN0b3ItPm5hcGk7CiAJYm9vbCBpc192bGFuID0gKHN0YXR1cyAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKIAl1MTYgdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CiAKLQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCi0JICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHFfdmVjdG9yIC0gJmFkYXB0ZXItPnFfdmVjdG9yWzBdKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4gJiYgKHRhZyAhPSAwKSkKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmxncnAsIHRhZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfZGVzYyk7CisJCQl2bGFuX2dyb19yZWNlaXZlKG5hcGksIGFkYXB0ZXItPnZsZ3JwLCB0YWcsIHNrYik7CiAJCWVsc2UKLQkJCWxyb19yZWNlaXZlX3NrYigmcmluZy0+bHJvX21nciwgc2tiLCByeF9kZXNjKTsKLQkJcmluZy0+bHJvX3VzZWQgPSB0cnVlOworCQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCX0gZWxzZSB7CiAJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkgewogCQkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4gJiYgKHRhZyAhPSAwKSkKQEAgLTQ3MCw2ICs1MTgsMTkgQEAKIAlhZGFwdGVyLT5od19jc3VtX3J4X2dvb2QrKzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX3JlbGVhc2VfcnhfZGVzYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywgdTMyIHZhbCkKK3sKKwkvKgorCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CisJICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKKwkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAorCSAqIHN1Y2ggYXMgSUEtNjQpLgorCSAqLworCXdtYigpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRUKHJ4X3JpbmctPnJlZ19pZHgpLCB2YWwpOworfQorCiAvKioKICAqIGl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBwYWNrZXQgc3BsaXQKICAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC00ODIsNiArNTQzLDcgQEAKIAl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKIAlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpiaTsKIAl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYnVmc3ogPSByeF9yaW5nLT5yeF9idWZfbGVuICsgTkVUX0lQX0FMSUdOOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fdXNlOwogCWJpID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOwpAQCAtNTExLDkgKzU3Myw3IEBACiAKIAkJaWYgKCFiaS0+c2tiKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIChyeF9yaW5nLT5yeF9idWZfbGVuICsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIE5FVF9JUF9BTElHTikpOworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsIGJ1ZnN6KTsKIAogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwpAQCAtNTI4LDggKzU4OCw3IEBACiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAKIAkJCWJpLT5za2IgPSBza2I7Ci0JCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBidWZzeiwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9CiAJCS8qIFJlZnJlc2ggdGhlIGRlc2MgZXZlbiBpZiBidWZmZXJfYWRkcnMgZGlkbid0IGNoYW5nZSBiZWNhdXNlCkBAIC01NTMsMTQgKzYxMiw3IEBACiAJCWlmIChpLS0gPT0gMCkKIAkJCWkgPSAocnhfcmluZy0+Y291bnQgLSAxKTsKIAotCQkvKgotCQkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdwotCQkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQotCQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAotCQkgKiBzdWNoIGFzIElBLTY0KS4KLQkJICovCi0JCXdtYigpOwotCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCQlpeGdiZV9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCByeF9yaW5nLCBpKTsKIAl9CiB9CiAKQEAgLTU3NCwxMCArNjI2LDExIEBACiAJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5wa3RfaW5mbzsKIH0KIAotc3RhdGljIGJvb2wgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorc3RhdGljIGJvb2wgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQogeworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGl4Z2JlX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKQEAgLTY3OCw3ICs3MzEsNyBAQAogCQl0b3RhbF9yeF9wYWNrZXRzKys7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKLQkJaXhnYmVfcmVjZWl2ZV9za2IoYWRhcHRlciwgc2tiLCBzdGF0ZXJyLCByeF9yaW5nLCByeF9kZXNjKTsKKwkJaXhnYmVfcmVjZWl2ZV9za2IocV92ZWN0b3IsIHNrYiwgc3RhdGVyciwgcnhfZGVzYyk7CiAKIG5leHRfZGVzYzoKIAkJcnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yID0gMDsKQEAgLTY5NiwxMSArNzQ5LDYgQEAKIAkJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAJfQogCi0JaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7Ci0JCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOwotCQlyeF9yaW5nLT5scm9fdXNlZCA9IGZhbHNlOwotCX0KLQogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCWNsZWFuZWRfY291bnQgPSBJWEdCRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKIApAQCAtNzMxLDcgKzc3OSw4IEBACiAKIAlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAotCS8qIFBvcHVsYXRlIHRoZSBJVkFSIHRhYmxlIGFuZCBzZXQgdGhlIElUUiB2YWx1ZXMgdG8gdGhlCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQogCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCiAJICovCiAJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CkBAIC03NDIsNyArNzkxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NTIsNyArODAxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NjEsMTUgKzgxMCwyMyBAQAogCQkvKiBpZiB0aGlzIGlzIGEgdHggb25seSB2ZWN0b3IgaGFsdmUgdGhlIGludGVycnVwdCByYXRlICovCiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKLQkJZWxzZQorCQllbHNlIGlmIChxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJLyogcnggb25seSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwogCisJCS8qCisJCSAqIHNpbmNlIHRoaXMgaXMgaW5pdGlhbCBzZXQgdXAgZG9uJ3QgbmVlZCB0byBjYWxsCisJCSAqIGl4Z2JlX3dyaXRlX2VpdHIgaGVscGVyCisJCSAqLwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwKIAkJICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfT1RIRVJfQ0FVU0VTX0lOREVYLCB2X2lkeCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgSVhHQkVfSVZBUl9PVEhFUl9DQVVTRVNfSU5ERVgsCisJCSAgICAgICAgICAgICAgIHZfaWR4KTsKKwllbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgLTEsIDEsIHZfaWR4KTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgMTk1MCk7CiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KQEAgLTg0NSwxMCArOTAyLDM1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBpeGdiZV93cml0ZV9laXRyIC0gd3JpdGUgRUlUUiByZWdpc3RlciBpbiBoYXJkd2FyZSBzcGVjaWZpYyB3YXkKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0CisgKiBAdl9pZHg6IHZlY3RvciBpbmRleCBpbnRvIHFfdmVjdG9yIGFycmF5CisgKiBAaXRyX3JlZzogbmV3IHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gKnJlZ2lzdGVyKiBmb3JtYXQsIG5vdCBpbnRzL3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1hZGUgdG8gYmUgY2FsbGVkIGJ5IGV0aHRvb2wgYW5kIGJ5IHRoZSBkcml2ZXIKKyAqIHdoZW4gaXQgbmVlZHMgdG8gdXBkYXRlIEVJVFIgcmVnaXN0ZXJzIGF0IHJ1bnRpbWUuICBIYXJkd2FyZQorICogc3BlY2lmaWMgcXVpcmtzL2RpZmZlcmVuY2VzIGFyZSB0YWtlbiBjYXJlIG9mIGhlcmUuCisgKi8KK3ZvaWQgaXhnYmVfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LCB1MzIgaXRyX3JlZykKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KKwkJaXRyX3JlZyB8PSAoaXRyX3JlZyA8PCAxNik7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKgorCQkgKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW4KKwkJICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0CisJCSAqLworCQlpdHJfcmVnIHw9IElYR0JFX0VJVFJfQ05UX1dESVM7CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcpOworfQorCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyX21zaXgoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIG5ld19pdHI7CiAJdTggY3VycmVudF9pdHIsIHJldF9pdHI7CiAJaW50IGksIHJfaWR4LCB2X2lkeCA9ICgodm9pZCAqKXFfdmVjdG9yIC0gKHZvaWQgKikoYWRhcHRlci0+cV92ZWN0b3IpKSAvCkBAIC05MDMsMTQgKzk4NSwxMyBAQAogCiAJaWYgKG5ld19pdHIgIT0gcV92ZWN0b3ItPmVpdHIpIHsKIAkJdTMyIGl0cl9yZWc7CisKKwkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUsIG5vdCB0aGUgc21vb3RoZWQgb25lICovCisJCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJLyogZG8gYW4gZXhwb25lbnRpYWwgc21vb3RoaW5nICovCiAJCW5ld19pdHIgPSAoKHFfdmVjdG9yLT5laXRyICogOTApLzEwMCkgKyAoKG5ld19pdHIgKiAxMCkvMTAwKTsKLQkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQlpdHJfcmVnID0gRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKG5ld19pdHIpOwotCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KLQkJRFBSSU5USyhUWF9FUlIsIERFQlVHLCAid3JpdGluZyBlaXRyKCVkKTogJTA4WFxuIiwgdl9pZHgsCi0JCSAgICAgICAgaXRyX3JlZyk7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgaXRyX3JlZyk7CiAJfQogCiAJcmV0dXJuOwpAQCAtOTI4LDYgKzEwMDksMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX3NmcF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVpY3IpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMSkgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMSk7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJfSBlbHNlIGlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMikgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMik7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCX0gZWxzZSB7CisJCS8qIEludGVycnVwdCBpc24ndCBmb3IgdXMuLi4gKi8KKwkJcmV0dXJuOworCX0KK30KKwogc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfbHNjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC05NDYsMTMgKzEwNDUsMjUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKKwl1MzIgZWljcjsKKworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgU2lsaWNvbiBlcnJhdGEuICBVc2UgY2xlYXItYnktd3JpdGUgaW5zdGVhZAorCSAqIG9mIGNsZWFyLWJ5LXJlYWQuICBSZWFkaW5nIHdpdGggRUlDUyB3aWxsIHJldHVybiB0aGUKKwkgKiBpbnRlcnJ1cHQgY2F1c2VzIHdpdGhvdXQgY2xlYXJpbmcsIHdoaWNoIGxhdGVyIGJlIGRvbmUKKwkgKiB3aXRoIHRoZSB3cml0ZSB0byBFSUNSLgorCSAqLworCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUyk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBlaWNyKTsKIAogCWlmIChlaWNyICYgSVhHQkVfRUlDUl9MU0MpCiAJCWl4Z2JlX2NoZWNrX2xzYyhhZGFwdGVyKTsKIAotCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVMsIElYR0JFX0VJTVNfT1RIRVIpOwogCkBAIC0xMDE1LDcgKzExMjYsNyBAQAogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhpcyB2ZWN0b3Igb25seSAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIHJ4X3JpbmctPnZfaWR4KTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnFfdmVjdG9yLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEwNTIsMTIgKzExNjMsMTIgQEAKIAkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgogCi0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCiAJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgcnhfcmluZy0+dl9pZHgpOwpAQCAtMTA5NSw3ICsxMjA2LDcgQEAKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKLQkJaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJCWl4Z2JlX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAkJZW5hYmxlX21hc2sgfD0gcnhfcmluZy0+dl9pZHg7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKIAkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC0xMTA1LDggKzEyMTYsOCBAQAogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBlbmFibGVfbWFzayk7CkBAIC0xMjc2LDcgKzEzODcsNiBAQAogCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yOwogCXU4IGN1cnJlbnRfaXRyOwogCXUzMiBuZXdfaXRyID0gcV92ZWN0b3ItPmVpdHI7CkBAIC0xMzExLDM1ICsxNDIxLDE5IEBACiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+ZWl0cikgewogCQl1MzIgaXRyX3JlZzsKKworCQkvKiBzYXZlIHRoZSBhbGdvcml0aG0gdmFsdWUgaGVyZSwgbm90IHRoZSBzbW9vdGhlZCBvbmUgKi8KKwkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KIAkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOwotCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7Ci0JCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoMCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCAwLCBpdHJfcmVnKTsKIAl9CiAKIAlyZXR1cm47CiB9CiAKIC8qKgotICogaXhnYmVfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCB+MCk7Ci0JSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKLQkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKLQl9IGVsc2UgewotCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKLQl9Ci19Ci0KLS8qKgogICogaXhnYmVfaXJxX2VuYWJsZSAtIEVuYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KQEAgLTEzNDksNyArMTQ0MywyMSBAQAogCW1hc2sgPSBJWEdCRV9FSU1TX0VOQUJMRV9NQVNLOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSkKIAkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAxOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQltYXNrIHw9IElYR0JFX0VJTVNfRUNDOworCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMjsKKwl9CisKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBtYXNrKTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJLyogZW5hYmxlIHRoZSByZXN0IG9mIHRoZSBxdWV1ZSB2ZWN0b3JzICovCisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVNfRVgoMSksCisJCSAgICAgICAgICAgICAgICAoSVhHQkVfRUlNU19SVFhfUVVFVUUgPDwgMTYpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgyKSwKKwkJICAgICAgICAgICAgICAgICgoSVhHQkVfRUlNU19SVFhfUVVFVUUgPDwgMTYpIHwKKwkJICAgICAgICAgICAgICAgICAgSVhHQkVfRUlNU19SVFhfUVVFVUUpKTsKKwl9CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtMTM2NSw2ICsxNDczLDEyIEBACiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgZWljcjsKIAorCS8qCisJICogV29ya2Fyb3VuZCBmb3Igc2lsaWNvbiBlcnJhdGEuICBNYXNrIHRoZSBpbnRlcnJ1cHRzCisJICogYmVmb3JlIHRoZSByZWFkIG9mIEVJQ1IuCisJICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1DLCBJWEdCRV9JUlFfQ0xFQVJfTUFTSyk7CisKIAkvKiBmb3IgTkFQSSwgdXNpbmcgRUlBTSB0byBhdXRvLW1hc2sgdHgvcnggaW50ZXJydXB0IGJpdHMgb24gcmVhZAogCSAqIHRoZXJlZm9yZSBubyBleHBsaWN0IGludGVycnVwdCBkaXNhYmxlIGlzIG5lY2Vzc2FyeSAqLwogCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUik7CkBAIC0xMzc5LDE1ICsxNDkzLDE4IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOworCiAJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgewogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX2J5dGVzID0gMDsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9ieXRlcyA9IDA7CiAJCS8qIHdvdWxkIGRpc2FibGUgaW50ZXJydXB0cyBoZXJlIGJ1dCBFSUFNIGRpc2FibGVkIGl0ICovCi0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE0NTksNiArMTU3NiwzOSBAQAogfQogCiAvKioKKyAqIGl4Z2JlX2lycV9kaXNhYmxlIC0gTWFzayBvZmYgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhlIE5JQworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfaXJxX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgfjApOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDEpLCB+MCk7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMiksIH4wKTsKKwl9CisJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKKwkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKKwl9IGVsc2UgeworCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgbWFzayA9IElYR0JFX0VJTVNfUlRYX1FVRVVFOworCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDEpLCBtYXNrIDw8IDE2KTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgyKSwKKwkJICAgICAgICAgICAgICAgIChtYXNrIDw8IDE2IHwgbWFzaykpOworCX0KKwkvKiBza2lwIHRoZSBmbHVzaCAqLworfQorCisvKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9tc2lfYW5kX2xlZ2FjeSAtIEluaXRpYWxpemUgUElOIChJTlRBLi4uKSBhbmQgTVNJIGludGVycnVwdHMKICAqCiAgKiovCkBAIC0xNDY5LDggKzE2MTksOCBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUigwKSwKIAkgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGFkYXB0ZXItPmVpdHJfcGFyYW0pKTsKIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoMCksIDApOwotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoMCksIDApOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIDAsIDApOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIDAsIDApOwogCiAJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgMCwgMCk7CiAJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgMCwgMCk7CkBAIC0xNDg2LDcgKzE2MzYsNyBAQAogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfY29uZmlndXJlX3R4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXU2NCB0ZGJhLCB0ZHdiYTsKKwl1NjQgdGRiYTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBpLCBqLCB0ZGxlbiwgdHhjdHJsOwogCkBAIC0xNDk5LDExICsxNjQ5LDYgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBTChqKSwKIAkJICAgICAgICAgICAgICAgICh0ZGJhICYgRE1BXzMyQklUX01BU0spKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBSChqKSwgKHRkYmEgPj4gMzIpKTsKLQkJdGR3YmEgPSByaW5nLT5kbWEgKwotCQkgICAgICAgIChyaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYykpOwotCQl0ZHdiYSB8PSBJWEdCRV9URFdCQUxfSEVBRF9XQl9FTkFCTEU7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERXQkFMKGopLCB0ZHdiYSAmIERNQV8zMkJJVF9NQVNLKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFdCQUgoaiksICh0ZHdiYSA+PiAzMikpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGopLCB0ZGxlbik7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGopLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaiksIDApOwpAQCAtMTUxNiwyNiArMTY2MSwyNSBAQAogCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChqKSwgdHhjdHJsKTsKIAl9CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBXZSBlbmFibGUgOCB0cmFmZmljIGNsYXNzZXMsIERDQiBvbmx5ICovCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIChJWEdCRV9NVFFDX1JUX0VOQSB8CisJCQkgICAgICAgICAgICAgICAgSVhHQkVfTVRRQ184VENfOFRRKSk7CisJfQogfQogCi0jZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQJMgorI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUIDIKIAogc3RhdGljIHZvaWQgaXhnYmVfY29uZmlndXJlX3NycmN0bChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IGluZGV4KQogewogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nOwogCXUzMiBzcnJjdGw7Ci0JaW50IHF1ZXVlMDsKKwlpbnQgcXVldWUwID0gMDsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAKLQkvKiBwcm9ncmFtIG9uZSBzcnJjdGwgcmVnaXN0ZXIgcGVyIFZNRHEgaW5kZXggKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCkgewotCQlsb25nIHNoaWZ0LCBsZW47Ci0JCW1hc2sgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2s7Ci0JCWxlbiA9IHNpemVvZihhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdLm1hc2spICogODsKLQkJc2hpZnQgPSBmaW5kX2ZpcnN0X2JpdCgmbWFzaywgbGVuKTsKLQkJcXVldWUwID0gaW5kZXggJiBtYXNrOwotCQlpbmRleCA9IChpbmRleCAmIG1hc2spID4+IHNoaWZ0OwotCS8qIHByb2dyYW0gb25lIHNycmN0bCBwZXIgUlNTIHF1ZXVlIHNpbmNlIFJEUlhDVEwuTVZNRU4gaXMgZW5hYmxlZCAqLworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlxdWV1ZTAgPSBpbmRleDsKIAl9IGVsc2UgewogCQltYXNrID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrOwogCQlxdWV1ZTAgPSBpbmRleCAmIG1hc2s7CkBAIC0xNTUwLDcgKzE2OTQsMTQgQEAKIAlzcnJjdGwgJj0gfklYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7Ci0JCXNycmN0bCB8PSBJWEdCRV9SWEJVRkZFUl8yMDQ4ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwkJdTE2IGJ1ZnN6ID0gSVhHQkVfUlhCVUZGRVJfMjA0ODsKKwkJLyogZ3JvdyB0aGUgYW1vdW50IHdlIGNhbiByZWNlaXZlIG9uIGxhcmdlIHBhZ2UgbWFjaGluZXMgKi8KKwkJaWYgKGJ1ZnN6IDwgKFBBR0VfU0laRSAvIDIpKQorCQkJYnVmc3ogPSAoUEFHRV9TSVpFIC8gMik7CisJCS8qIGNhcCB0aGUgYnVmc3ogYXQgb3VyIGxhcmdlc3QgZGVzY3JpcHRvciBzaXplICovCisJCWJ1ZnN6ID0gbWluKCh1MTYpSVhHQkVfTUFYX1JYQlVGRkVSLCBidWZzeik7CisKKwkJc3JyY3RsIHw9IGJ1ZnN6ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAkJc3JyY3RsIHw9IElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTOwogCQlzcnJjdGwgfD0gKChJWEdCRV9SWF9IRFJfU0laRSA8PAogCQkgICAgICAgICAgICBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUKSAmCkBAIC0xNTY1LDQwICsxNzE2LDExIEBACiAJCQlzcnJjdGwgfD0gcnhfcmluZy0+cnhfYnVmX2xlbiA+PgogCQkJICAgICAgICAgIElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAl9CisKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9TUlJDVEwoaW5kZXgpLCBzcnJjdGwpOwogfQogCiAvKioKLSAqIGl4Z2JlX2dldF9za2JfaGRyIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBMUk8gaGVhZGVyIHByb2Nlc3NpbmcKLSAqIEBza2I6IHBvaW50ZXIgdG8gc2tfYnVmZiB0byBiZSBhZGRlZCB0byBMUk8gcGFja2V0Ci0gKiBAaXBoZHI6IHBvaW50ZXIgdG8gaXAgaGVhZGVyIHN0cnVjdHVyZQotICogQHRjcGg6IHBvaW50ZXIgdG8gdGNwIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEBoZHJfZmxhZ3M6IHBvaW50ZXIgdG8gaGVhZGVyIGZsYWdzCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhCi0gKiovCi1zdGF0aWMgaW50IGl4Z2JlX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKLQotCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBJUHY0IFRDUCBwYWNrZXQgKi8KLQlpZiAoISgoaXhnYmVfZ2V0X3BrdF9pbmZvKHJ4X2Rlc2MpICYgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBWNCkgJiYKLQkgICAgIChpeGdiZV9nZXRfcGt0X2luZm8ocnhfZGVzYykgJiBJWEdCRV9SWERBRFZfUEtUVFlQRV9UQ1ApKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogU2V0IG5ldHdvcmsgaGVhZGVycyAqLwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2hkcmxlbihza2IpKTsKLQkqaXBoZHIgPSBpcF9oZHIoc2tiKTsKLQkqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFBBR0VfVVNFX0NPVU5UKFMpICgoKFMpID4+IFBBR0VfU0hJRlQpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoUykgJiAoUEFHRV9TSVpFIC0gMSkpID8gMSA6IDApKQotCi0vKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9yeCAtIENvbmZpZ3VyZSA4MjU5eCBSZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKQEAgLTE2MTYsOCArMTczOCw3IEBACiAJICAgICAgICAgICAgICAgICAgMHhBNTRGMkJFQywgMHhFQTQ5QUY3QywgMHhFMjE0QUQzRCwgMHhCODU1QUFCRSwKIAkgICAgICAgICAgICAgICAgICAweDZBM0U2N0VBLCAweDE0MzY0RDE3LCAweDNCRUQyMDBEfTsKIAl1MzIgZmN0cmwsIGhscmVnMDsKLQl1MzIgcGFnZXM7Ci0JdTMyIHJldGEgPSAwLCBtcnFjOworCXUzMiByZXRhID0gMCwgbXJxYyA9IDA7CiAJdTMyIHJkcnhjdGw7CiAJaW50IHJ4X2J1Zl9sZW47CiAKQEAgLTE2MjcsNiArMTc0OCwxNCBAQAogCS8qIFNldCB0aGUgUlggYnVmZmVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKIAkJcnhfYnVmX2xlbiA9IElYR0JFX1JYX0hEUl9TSVpFOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkvKiBQU1JUWVBFIG11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gODI1OTkgKi8KKwkJCXUzMiBwc3J0eXBlID0gSVhHQkVfUFNSVFlQRV9UQ1BIRFIgfAorCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX1VEUEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfSVBWNEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfSVBWNkhEUjsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUFNSVFlQRSgwKSwgcHNydHlwZSk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAobmV0ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQogCQkJcnhfYnVmX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOwpAQCAtMTYzNyw2ICsxNzY2LDcgQEAKIAlmY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNUUkwpOwogCWZjdHJsIHw9IElYR0JFX0ZDVFJMX0JBTTsKIAlmY3RybCB8PSBJWEdCRV9GQ1RSTF9EUEY7IC8qIGRpc2NhcmQgcGF1c2UgZnJhbWVzIHdoZW4gRkMgZW5hYmxlZCAqLworCWZjdHJsIHw9IElYR0JFX0ZDVFJMX1BNQ0Y7CiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNUUkwsIGZjdHJsKTsKIAogCWhscmVnMCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ITFJFRzApOwpAQCAtMTY0Niw4ICsxNzc2LDYgQEAKIAkJaGxyZWcwIHw9IElYR0JFX0hMUkVHMF9KVU1CT0VOOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSExSRUcwLCBobHJlZzApOwogCi0JcGFnZXMgPSBQQUdFX1VTRV9DT1VOVChhZGFwdGVyLT5uZXRkZXYtPm10dSk7Ci0KIAlyZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0uY291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOwogCS8qIGRpc2FibGUgcmVjZWl2ZXMgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlyeGN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKQEAgLTE2NjYsMzcgKzE3OTQsNDQgQEAKIAkJYWRhcHRlci0+cnhfcmluZ1tpXS5oZWFkID0gSVhHQkVfUkRIKGopOwogCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnRhaWwgPSBJWEdCRV9SRFQoaik7CiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfYnVmX2xlbiA9IHJ4X2J1Zl9sZW47Ci0JCS8qIEludGl0aWFsIExSTyBTZXR0aW5ncyAqLwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IubWF4X2FnZ3IgPSBJWEdCRV9NQVhfTFJPX0FHR1JFR0FURTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLm1heF9kZXNjID0gSVhHQkVfTUFYX0xST19ERVNDUklQVE9SUzsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaXhnYmVfZ2V0X3NrYl9oZHI7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5mZWF0dXJlcyA9IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKLQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX05FVFBPTEwpKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzIHw9IExST19GX05BUEk7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAkJaXhnYmVfY29uZmlndXJlX3NycmN0bChhZGFwdGVyLCBqKTsKIAl9CiAKLQkvKgotCSAqIEZvciBWTURxIHN1cHBvcnQgb2YgZGlmZmVyZW50IGRlc2NyaXB0b3IgdHlwZXMgb3IKLQkgKiBidWZmZXIgc2l6ZXMgdGhyb3VnaCB0aGUgdXNlIG9mIG11bHRpcGxlIFNSUkNUTAotCSAqIHJlZ2lzdGVycywgUkRSWENUTC5NVk1FTiBtdXN0IGJlIHNldCB0byAxCi0JICoKLQkgKiBhbHNvLCB0aGUgbWFudWFsIGRvZXNuJ3QgbWVudGlvbiBpdCBjbGVhcmx5IGJ1dCBEQ0EgaGludHMKLQkgKiB3aWxsIG9ubHkgdXNlIHF1ZXVlIDAncyB0YWdzIHVubGVzcyB0aGlzIGJpdCBpcyBzZXQuICBTaWRlCi0JICogZWZmZWN0cyBvZiBzZXR0aW5nIHRoaXMgYml0IGFyZSBvbmx5IHRoYXQgU1JSQ1RMIG11c3QgYmUKLQkgKiBmdWxseSBwcm9ncmFtbWVkIFswLi4xNV0KLQkgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJgotCSAgICAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8IElYR0JFX0ZMQUdfVk1EUV9FTkFCTEVEKSkgeworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJLyoKKwkJICogRm9yIFZNRHEgc3VwcG9ydCBvZiBkaWZmZXJlbnQgZGVzY3JpcHRvciB0eXBlcyBvcgorCQkgKiBidWZmZXIgc2l6ZXMgdGhyb3VnaCB0aGUgdXNlIG9mIG11bHRpcGxlIFNSUkNUTAorCQkgKiByZWdpc3RlcnMsIFJEUlhDVEwuTVZNRU4gbXVzdCBiZSBzZXQgdG8gMQorCQkgKgorCQkgKiBhbHNvLCB0aGUgbWFudWFsIGRvZXNuJ3QgbWVudGlvbiBpdCBjbGVhcmx5IGJ1dCBEQ0EgaGludHMKKwkJICogd2lsbCBvbmx5IHVzZSBxdWV1ZSAwJ3MgdGFncyB1bmxlc3MgdGhpcyBiaXQgaXMgc2V0LiAgU2lkZQorCQkgKiBlZmZlY3RzIG9mIHNldHRpbmcgdGhpcyBiaXQgYXJlIG9ubHkgdGhhdCBTUlJDVEwgbXVzdCBiZQorCQkgKiBmdWxseSBwcm9ncmFtbWVkIFswLi4xNV0KKwkJICovCiAJCXJkcnhjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkRSWENUTCk7CiAJCXJkcnhjdGwgfD0gSVhHQkVfUkRSWENUTF9NVk1FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMLCByZHJ4Y3RsKTsKIAl9CiAKKwkvKiBQcm9ncmFtIE1SUUMgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgcXVldWVzICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlpbnQgbWFzayA9IGFkYXB0ZXItPmZsYWdzICYgKAorCQkJCUlYR0JFX0ZMQUdfUlNTX0VOQUJMRUQKKwkJCQl8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQKKwkJCQkpOworCisJCXN3aXRjaCAobWFzaykgeworCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKKwkJCW1ycWMgPSBJWEdCRV9NUlFDX1JTU0VOOworCQkJYnJlYWs7CisJCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgorCQkJbXJxYyA9IElYR0JFX01SUUNfUlQ4VENFTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgewogCQkvKiBGaWxsIG91dCByZWRpcmVjdGlvbiB0YWJsZSAqLwogCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDEyODsgaSsrLCBqKyspIHsKQEAgLTE3MTMsMTkgKzE4NDgsMTcgQEAKIAkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JTU1JLKGkpLCBzZWVkW2ldKTsKIAotCQltcnFjID0gSVhHQkVfTVJRQ19SU1NFTgorCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU0VOOwogCQkgICAgLyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqLwotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0Ci0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVgKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNgotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYX1VEUDsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKKwkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0CisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjYKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQOwogCX0KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIG1ycWMpOwogCiAJcnhjc3VtID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1NVTSk7CiAKQEAgLTE3NDIsNiArMTg3NSwxMiBAQAogCX0KIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDU1VNLCByeGNzdW0pOworCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlyZHJ4Y3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JEUlhDVEwpOworCQlyZHJ4Y3RsIHw9IElYR0JFX1JEUlhDVExfQ1JDU1RSSVA7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRSWENUTCwgcmRyeGN0bCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKQEAgLTE3NzUsNiArMTkxNCw3IEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXUzMiBjdHJsOworCWludCBpLCBqOwogCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWl4Z2JlX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtMTc4NiwxOCArMTkyNiwyNCBAQAogCSAqIG5vdCBpbiBEQ0IgbW9kZS4KIAkgKi8KIAljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMKTsKLQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FOwotCWN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47Ci0JSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7Ci0JaXhnYmVfdmxhbl9yeF9hZGRfdmlkKG5ldGRldiwgMCk7Ci0KLQlpZiAoZ3JwKSB7Ci0JCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KLQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7Ci0JCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUU7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKIAkJY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOworCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSk7CisJCQljdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWERDVEwoaiksIGN0cmwpOworCQl9CiAJfQorCWl4Z2JlX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIDApOwogCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWl4Z2JlX2lycV9lbmFibGUoYWRhcHRlcik7CkBAIC0xOTYwLDkgKzIxMDYsMjEgQEAKIAl9CiAJLyogRW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwogCXZsbmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxOQ1RSTCk7Ci0JdmxuY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOwotCXZsbmN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCXZsbmN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKKwkJdmxuY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQl2bG5jdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJdmxuY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOworCQkJdmxuY3RybCB8PSBJWEdCRV9SWERDVExfVk1FOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwoaiksIHZsbmN0cmwpOworCQl9CisJfQogCWh3LT5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgMCwgMCwgdHJ1ZSk7CiB9CiAKQEAgLTE5OTMsMTMgKzIxNTEsMTE1IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgLSAxKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9pc19zZnAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzd2l0Y2ggKGh3LT5waHkudHlwZSkgeworCWNhc2UgaXhnYmVfcGh5X3NmcF9hdmFnbzoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfZnRsOgorCWNhc2UgaXhnYmVfcGh5X3NmcF9pbnRlbDoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfdW5rbm93bjoKKwljYXNlIGl4Z2JlX3BoeV90d190eWNvOgorCWNhc2UgaXhnYmVfcGh5X3R3X3Vua25vd246CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2xpbmtfY29uZmlnIC0gc2V0IHVwIFNGUCsgbGluaworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgeworCQkJLyoKKwkJCSAqIEluIG11bHRpc3BlZWQgZmliZXIgc2V0dXBzLCB0aGUgZGV2aWNlIG1heSBub3QgaGF2ZQorCQkJICogaGFkIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB3aGVuIHRoZSBkcml2ZXIgbG9hZGVkLgorCQkJICogSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24KKwkJCSAqIGNvdWxkbid0IGdldCB0aGUgTUFDIGludG8gMTBHIG9yIDFHIG1vZGUsIHNvIHdlJ2xsCisJCQkgKiBuZXZlciBoYXZlIGEgbGluayBzdGF0dXMgY2hhbmdlIGludGVycnVwdCBmaXJlLgorCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgorCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgorCQkJICovCisJCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQorCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRGlyZWN0IEF0dGFjaCBDdSBhbmQgbm9uLW11bHRpc3BlZWQgZmliZXIgbW9kdWxlcworCQkJICogc3RpbGwgbmVlZCB0byBiZSBjb25maWd1cmVkIHByb3Blcmx5IHByaW9yIHRvCisJCQkgKiBhdHRlbXB0aW5nIGxpbmsuCisJCQkgKi8KKwkJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0spKQorCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCQl9Cit9CisKKy8qKgorICogaXhnYmVfbm9uX3NmcF9saW5rX2NvbmZpZyAtIHNldCB1cCBub24tU0ZQKyBsaW5rCisgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGF1dG9uZWc7CisJYm9vbCBsaW5rX3VwID0gZmFsc2U7CisJdTMyIHJldCA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCisJaWYgKGh3LT5tYWMub3BzLmNoZWNrX2xpbmspCisJCXJldCA9IGh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZhdXRvbmVnLCAmbGlua191cCwgZmFsc2UpOworCisJaWYgKHJldCkKKwkJZ290byBsaW5rX2NmZ19vdXQ7CisKKwlpZiAoaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKQorCQlyZXQgPSBody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcsICZhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh3LT5tYWMuYXV0b25lZyk7CisJaWYgKHJldCkKKwkJZ290byBsaW5rX2NmZ19vdXQ7CisKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJcmV0ID0gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgbGlua191cCk7CitsaW5rX2NmZ19vdXQ6CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBJWEdCRV9NQVhfUlhfREVTQ19QT0xMIDEwCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnhyKQoreworCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1tyeHJdLnJlZ19pZHg7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsgaysrKSB7CisJCWlmIChJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICBJWEdCRV9SWERDVEwoaikpICYgSVhHQkVfUlhEQ1RMX0VOQUJMRSkKKwkJCWJyZWFrOworCQllbHNlCisJCQltc2xlZXAoMSk7CisJfQorCWlmIChrID49IElYR0JFX01BWF9SWF9ERVNDX1BPTEwpIHsKKwkJRFBSSU5USyhEUlYsIEVSUiwgIlJYRENUTC5FTkFCTEUgb24gUnggcXVldWUgJWQgIgorCQkgICAgICAgICJub3Qgc2V0IHdpdGhpbiB0aGUgcG9sbGluZyBwZXJpb2RcbiIsIHJ4cik7CisJfQorCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsICZhZGFwdGVyLT5yeF9yaW5nW3J4cl0sCisJICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5yeF9yaW5nW3J4cl0uY291bnQgLSAxKSk7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfdXBfY29tcGxldGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBpLCBqID0gMDsKKwlpbnQgbnVtX3J4X3JpbmdzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlpbnQgZXJyOwogCWludCBtYXhfZnJhbWUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAJdTMyIHR4ZGN0bCwgcnhkY3RsLCBtaGFkZDsKKwl1MzIgZG1hdHhjdGw7CiAJdTMyIGdwaWU7CiAKIAlpeGdiZV9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKQEAgLTIwMzEsNiArMjI5MSwxMyBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dQSUUsIGdwaWUpOwogCX0KIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZ3BpZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUElFKTsKKwkJZ3BpZSB8PSBJWEdCRV9TRFAxX0dQSUVOOworCQlncGllIHw9IElYR0JFX1NEUDJfR1BJRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisJfQorCiAJbWhhZGQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUhBREQpOwogCWlmIChtYXhfZnJhbWUgIT0gKG1oYWRkID4+IElYR0JFX01IQUREX01GU19TSElGVCkpIHsKIAkJbWhhZGQgJj0gfklYR0JFX01IQUREX01GU19NQVNLOwpAQCAtMjA0NCwxMSArMjMxMSwyMyBAQAogCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJLyogZW5hYmxlIFdUSFJFU0g9OCBkZXNjcmlwdG9ycywgdG8gZW5jb3VyYWdlIGJ1cnN0IHdyaXRlYmFjayAqLwogCQl0eGRjdGwgfD0gKDggPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwgdHhkY3RsKTsKKwl9CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qIERNQVRYQ1RMLkVOIG11c3QgYmUgc2V0IGFmdGVyIGFsbCBUeCBxdWV1ZSBjb25maWcgaXMgZG9uZSAqLworCQlkbWF0eGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCk7CisJCWRtYXR4Y3RsIHw9IElYR0JFX0RNQVRYQ1RMX1RFOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMLCBkbWF0eGN0bCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCXR4ZGN0bCB8PSBJWEdCRV9UWERDVExfRU5BQkxFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwgdHhkY3RsKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7CiAJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CiAJCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOwogCQkvKiBlbmFibGUgUFRIUkVTSD0zMiBkZXNjcmlwdG9ycyAoaGFsZiB0aGUgaW50ZXJuYWwgY2FjaGUpCkBAIC0yMDU3LDE5ICsyMzM2LDIyIEBACiAJCXJ4ZGN0bCB8PSAweDAwMjA7CiAJCXJ4ZGN0bCB8PSBJWEdCRV9SWERDVExfRU5BQkxFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgcnhkY3RsKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJCWl4Z2JlX3J4X2Rlc2NfcXVldWVfZW5hYmxlKGFkYXB0ZXIsIGkpOwogCX0KIAkvKiBlbmFibGUgYWxsIHJlY2VpdmVzICovCiAJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1RSTCk7Ci0JcnhkY3RsIHw9IChJWEdCRV9SWENUUkxfRE1CWVBTIHwgSVhHQkVfUlhDVFJMX1JYRU4pOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGRjdGwpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCXJ4ZGN0bCB8PSAoSVhHQkVfUlhDVFJMX0RNQllQUyB8IElYR0JFX1JYQ1RSTF9SWEVOKTsKKwllbHNlCisJCXJ4ZGN0bCB8PSBJWEdCRV9SWENUUkxfUlhFTjsKKwlody0+bWFjLm9wcy5lbmFibGVfcnhfZG1hKGh3LCByeGRjdGwpOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpCiAJCWl4Z2JlX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOwogCWVsc2UKIAkJaXhnYmVfY29uZmlndXJlX21zaV9hbmRfbGVnYWN5KGFkYXB0ZXIpOwogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwotCiAJY2xlYXJfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAlpeGdiZV9uYXBpX2VuYWJsZV9hbGwoYWRhcHRlcik7CiAKQEAgLTIwNzgsNiArMjM2MCwyOCBAQAogCiAJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAorCS8qCisJICogRm9yIGhvdC1wbHVnZ2FibGUgU0ZQKyBkZXZpY2VzLCBhIG5ldyBTRlArIG1vZHVsZSBtYXkgaGF2ZQorCSAqIGFycml2ZWQgYmVmb3JlIGludGVycnVwdHMgd2VyZSBlbmFibGVkLiAgV2UgbmVlZCB0byBraWNrIG9mZgorCSAqIHRoZSBTRlArIG1vZHVsZSBzZXR1cCBmaXJzdCwgdGhlbiB0cnkgdG8gYnJpbmcgdXAgbGluay4KKwkgKiBJZiB3ZSdyZSBub3QgaG90LXBsdWdnYWJsZSBTRlArLCB3ZSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGxpbmsKKwkgKiBhbmQgYnJpbmcgaXQgdXAuCisJICovCisJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnkoaHcpOworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIlBIWSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgTklDICVkXG4iLCBlcnIpOworCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChpeGdiZV9pc19zZnAoaHcpKSB7CisJCWl4Z2JlX3NmcF9saW5rX2NvbmZpZyhhZGFwdGVyKTsKKwl9IGVsc2UgeworCQllcnIgPSBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKGh3KTsKKwkJaWYgKGVycikKKwkJCURQUklOVEsoUFJPQkUsIEVSUiwgImxpbmtfY29uZmlnIEZBSUxFRCAlZFxuIiwgZXJyKTsKKwl9CisKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC0yMTA0LDYgKzI0MDgsOCBAQAogCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLwogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCXJldHVybiBpeGdiZV91cF9jb21wbGV0ZShhZGFwdGVyKTsKIH0KIApAQCAtMjE2NSw4ICsyNDcxLDEwIEBACiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCi0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5oZWFkKTsKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCWlmIChyeF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPmhlYWQpOworCWlmIChyeF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOwogfQogCiAvKioKQEAgLTIxOTcsOCArMjUwNSwxMCBAQAogCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIAotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7Ci0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKKwlpZiAodHhfcmluZy0+aGVhZCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT5oZWFkKTsKKwlpZiAodHhfcmluZy0+dGFpbCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKIH0KIAogLyoqCkBAIC0yMjYxLDYgKzI1NzEsMTEgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwoaiksCiAJCSAgICAgICAgICAgICAgICAodHhkY3RsICYgfklYR0JFX1RYRENUTF9FTkFCTEUpKTsKIAl9CisJLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRE1BVFhDVEwsCisJCSAgICAgICAgICAgICAgICAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMKSAmCisJCSAgICAgICAgICAgICAgICAgfklYR0JFX0RNQVRYQ1RMX1RFKSk7CiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCkBAIC0yMjk3LDEwICsyNjEyLDEwIEBACiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSBjb250YWluZXJfb2YobmFwaSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOworCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPQorCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7Ci0JaW50IHR4X2NsZWFuZWQsIHdvcmtfZG9uZSA9IDA7CisJaW50IHR4X2NsZWFuX2NvbXBsZXRlLCB3b3JrX2RvbmUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKQEAgLTIzMDksMTkgKzI2MjQsMTkgQEAKIAl9CiAjZW5kaWYKIAotCXR4X2NsZWFuZWQgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7Ci0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJdHhfY2xlYW5fY29tcGxldGUgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7CisJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCBhZGFwdGVyLT5yeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCi0JaWYgKHR4X2NsZWFuZWQpCisJaWYgKCF0eF9jbGVhbl9jb21wbGV0ZSkKIAkJd29ya19kb25lID0gYnVkZ2V0OwogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHIoYWRhcHRlcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJCWl4Z2JlX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwogfQpAQCAtMjM1Myw2OCArMjY2OCw3NiBAQAogCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9zZXRfZGNiX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgbnJxID0gMSwgbnRxID0gMTsKLQlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2ksIHJzc19tOwotCWludCBkY2JfaSwgZGNiX207CisJYm9vbCByZXQgPSBmYWxzZTsKIAotCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzICovCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewotCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6Ci0JCWRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7Ci0JCWRjYl9tID0gMDsKLQkJcnNzX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKLQkJcnNzX20gPSAwOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKLQkJZmVhdHVyZV9tYXNrIHw9IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7Ci0KLQkJc3dpdGNoIChhZGFwdGVyLT5mbGFncyAmIGZlYXR1cmVfbWFzaykgewotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlkY2JfbSA9IDB4NyA8PCAzOwotCQkJcnNzX2kgPSBtaW4oOCwgcnNzX2kpOwotCQkJcnNzX20gPSAweDc7Ci0JCQlucnEgPSBkY2JfaSAqIHJzc19pOwotCQkJbnRxID0gbWluKE1BWF9UWF9RVUVVRVMsIGRjYl9pICogcnNzX2kpOwotCQkJYnJlYWs7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJZGNiX20gPSAweDcgPDwgMzsKLQkJCW5ycSA9IGRjYl9pOwotCQkJbnRxID0gZGNiX2k7Ci0JCQlicmVhazsKLQkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6Ci0JCQlyc3NfbSA9IDB4RjsKLQkJCW5ycSA9IHJzc19pOwotCQkJbnRxID0gcnNzX2k7Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQlkZWZhdWx0OgotCQkJZGNiX2kgPSAwOwotCQkJZGNiX20gPSAwOwotCQkJcnNzX2kgPSAwOwotCQkJcnNzX20gPSAwOwotCQkJbnJxID0gMTsKLQkJCW50cSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIFNhbml0eSBjaGVjaywgd2Ugc2hvdWxkIG5ldmVyIGhhdmUgemVybyBxdWV1ZXMgKi8KLQkJbnJxID0gKG5ycSA/OjEpOwotCQludHEgPSAobnRxID86MSk7Ci0KLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMgPSBkY2JfaTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLm1hc2sgPSBkY2JfbTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3NfaTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2sgPSByc3NfbTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbnJxID0gMTsKLQkJbnRxID0gMTsKLQkJYnJlYWs7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0ubWFzayA9IDB4NyA8PCAzOworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOwogCX0KIAotCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBucnE7Ci0JYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IG50cTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qKgorICogaXhnYmVfc2V0X3Jzc19xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgUlNTCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgb3VyICJiYXNlIiBtdWx0aXF1ZXVlIG1vZGUuICBSU1MgKFJlY2VpdmUgU2lkZSBTY2FsaW5nKSB3aWxsIHRyeQorICogdG8gYWxsb2NhdGUgb25lIFJ4IHF1ZXVlIHBlciBDUFUsIGFuZCBpZiBhdmFpbGFibGUsIG9uZSBUeCBxdWV1ZSBwZXIgQ1BVLgorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9zZXRfcnNzX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzayA9IDB4RjsKKwkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9CisJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKKwkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9CisJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKKwkJcmV0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlyZXQgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaXhnYmVfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGFudAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcXVldWUgYWxsb2NhdGlvbiByb3V0aW5lLiAgVGhlIG9yZGVyIGhlcmUgaXMgdmVyeQorICogaW1wb3J0YW50LCBzdGFydGluZyB3aXRoIHRoZSAibW9zdCIgbnVtYmVyIG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLAorICogYW5kIGVuZGluZyB3aXRoIHRoZSBzbWFsbGVzdCBzZXQgb2YgZmVhdHVyZXMuICBUaGlzIHdheSBsYXJnZSBjb21iaW5hdGlvbnMKKyAqIGNhbiBiZSBhbGxvY2F0ZWQgaWYgdGhleSdyZSB0dXJuZWQgb24sIGFuZCBzbWFsbGVyIGNvbWJpbmF0aW9ucyBhcmUgdGhlCisgKiBmYWxsdGhyb3VnaCBjb25kaXRpb25zLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIFN0YXJ0IHdpdGggYmFzZSBjYXNlICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDE7CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisJaWYgKGl4Z2JlX3NldF9kY2JfcXVldWVzKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKyNlbmRpZgorCWlmIChpeGdiZV9zZXRfcnNzX3F1ZXVlcyhhZGFwdGVyKSkKKwkJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9hY3F1aXJlX21zaXhfdmVjdG9ycyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTI0NjAsNzEgKzI3ODMsMTA0IEBACiAJCWl4Z2JlX3NldF9udW1fcXVldWVzKGFkYXB0ZXIpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEOyAvKiBXb290ISAqLwotCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gdmVjdG9yczsKKwkJLyoKKwkJICogQWRqdXN0IGZvciBvbmx5IHRoZSB2ZWN0b3JzIHdlJ2xsIHVzZSwgd2hpY2ggaXMgbWluaW11bQorCQkgKiBvZiBtYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTLCBvciB0aGUgbnVtYmVyIG9mCisJCSAqIHZlY3RvcnMgd2Ugd2VyZSBhbGxvY2F0ZWQuCisJCSAqLworCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gbWluKHZlY3RvcnMsCisJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTKTsKIAl9CiB9CiAKIC8qKgorICogaXhnYmVfY2FjaGVfcmluZ19yc3MgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgUlNTCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIENhY2hlIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2Zmc2V0cyBmb3IgUlNTIHRvIHRoZSBhc3NpZ25lZCByaW5ncy4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19yc3Moc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisvKioKKyAqIGl4Z2JlX2NhY2hlX3JpbmdfZGNiIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIERDQgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBDYWNoZSB0aGUgZGVzY3JpcHRvciByaW5nIG9mZnNldHMgZm9yIERDQiB0byB0aGUgYXNzaWduZWQgcmluZ3MuCisgKgorICoqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3JpbmdfZGNiKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCWJvb2wgcmV0ID0gZmFsc2U7CisJaW50IGRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAzOworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMjsKKwkJCX0KKwkJCXJldCA9IHRydWU7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgNDsKKwkJCX0KKwkJCXJldCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyoqCiAgKiBpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCiAgKgogICogT25jZSB3ZSBrbm93IHRoZSBmZWF0dXJlLXNldCBlbmFibGVkIGZvciB0aGUgZGV2aWNlLCB3ZSdsbCBjYWNoZQogICogdGhlIHJlZ2lzdGVyIG9mZnNldCB0aGUgZGVzY3JpcHRvciByaW5nIGlzIGFzc2lnbmVkIHRvLgorICoKKyAqIE5vdGUsIHRoZSBvcmRlciB0aGUgdmFyaW91cyBmZWF0dXJlIGNhbGxzIGlzIGltcG9ydGFudC4gIEl0IG11c3Qgc3RhcnQgd2l0aAorICogdGhlICJtb3N0IiBmZWF0dXJlcyBlbmFibGVkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZW4gdHJpY2tsZSBkb3duIHRvIHRoZQorICogbGVhc3QgYW1vdW50IG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLgogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2k7Ci0JaW50IGksIHR4cl9pZHgsIHJ4cl9pZHg7Ci0JaW50IGRjYl9pOworCS8qIHN0YXJ0IHdpdGggZGVmYXVsdCBjYXNlICovCisJYWRhcHRlci0+cnhfcmluZ1swXS5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT50eF9yaW5nWzBdLnJlZ19pZHggPSAwOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKLQkJZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKLQkJcnNzX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKLQkJdHhyX2lkeCA9IDA7Ci0JCXJ4cl9pZHggPSAwOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKLQkJZmVhdHVyZV9tYXNrIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7Ci0JCXN3aXRjaCAoYWRhcHRlci0+ZmxhZ3MgJiBmZWF0dXJlX21hc2spIHsKLQkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQlpbnQgajsKLQkJCQkvKiBSeCBmaXJzdCAqLwotCQkJCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBqKyspIHsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tyeHJfaWR4XS5yZWdfaWR4ID0KLQkJCQkJCWkgPDwgMyB8IGo7Ci0JCQkJCXJ4cl9pZHgrKzsKLQkJCQl9Ci0JCQkJLyogVHggbm93ICovCi0JCQkJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGorKykgewotCQkJCQlhZGFwdGVyLT50eF9yaW5nW3R4cl9pZHhdLnJlZ19pZHggPQotCQkJCQkJaSA8PCAyIHwgKGogPj4gMSk7Ci0JCQkJCWlmIChqICYgMSkKLQkJCQkJCXR4cl9pZHgrKzsKLQkJCQl9Ci0JCQl9Ci0JCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7Ci0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAzOwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMjsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKLQkJCWJyZWFrOwotCQljYXNlIDA6Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorCWlmIChpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKSkKKwkJcmV0dXJuOworCisjZW5kaWYKKwlpZiAoaXhnYmVfY2FjaGVfcmluZ19yc3MoYWRhcHRlcikpCisJCXJldHVybjsKIH0KIAogLyoqCkBAIC0yNTMyLDcgKzI4ODgsOCBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBXZSBhbGxvY2F0ZSBvbmUgcmluZyBwZXIgcXVldWUgYXQgcnVuLXRpbWUgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUKLSAqIG51bWJlciBvZiBxdWV1ZXMgYXQgY29tcGlsZS10aW1lLgorICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuICBUaGUgcG9sbGluZ19uZXRkZXYgYXJyYXkgaXMKKyAqIGludGVuZGVkIGZvciBNdWx0aXF1ZXVlLCBidXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGEgc2luZ2xlIHF1ZXVlLgogICoqLwogc3RhdGljIGludCBpeGdiZV9hbGxvY19xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0yNzExLDcgKzMwNjgsOCBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZV9hZGFwdGVyICopZGF0YTsKIAotCS8qIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCisJLyoKKwkgKiBEbyB0aGUgc2ZwX3RpbWVyIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZQogCSAqIGRlbGF5cyB0aGF0IHNmcCsgZGV0ZWN0aW9uIHJlcXVpcmVzCiAJICovCiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX3Rhc2spOwpAQCAtMjc4NSw2ICszMTQzLDEwIEBACiAJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3M7CiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIAlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyA9IElYR0JFX01BWF9EQ0JfSU5ESUNFUzsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTg7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJLyogQ29uZmlndXJlIERDQiB0cmFmZmljIGNsYXNzZXMgKi8KQEAgLTI4MDUsMjEgKzMxNjcsMTQgQEAKIAkgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMpOwogCiAjZW5kaWYKLQlpZiAoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUgJiYKLQkgICAgKGh3LT5tYWMub3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikpCi0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRTsKIAogCS8qIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBpeGdiZV9mY19ub25lOwotCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfbm9uZTsKKwlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19ub25lOwogCWh3LT5mYy5oaWdoX3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUSDsKIAlody0+ZmMubG93X3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUTDsKIAlody0+ZmMucGF1c2VfdGltZSA9IElYR0JFX0RFRkFVTFRfRkNQQVVTRTsKIAlody0+ZmMuc2VuZF94b24gPSB0cnVlOwogCi0JLyogc2VsZWN0IDEwRyBsaW5rIGJ5IGRlZmF1bHQgKi8KLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU47Ci0KIAkvKiBlbmFibGUgaXRyIGJ5IGRlZmF1bHQgaW4gZHluYW1pYyBtb2RlICovCiAJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAxOwogCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAyMDAwMDsKQEAgLTI4NjYsOCArMzIyMSw3IEBACiAJbWVtc2V0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCS8qIHJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KLQl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpICsKLQkgICAgICAgICAgICAgICAgc2l6ZW9mKHUzMik7CisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKIAl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CiAKIAl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKQEAgLTI5MjYsMTIgKzMyODAsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgc2l6ZTsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKCFyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIsIDAsIHNpemUpOwotCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKSB7CkBAIC0yOTYwLDggKzMzMDgsNiBAQAogCXJldHVybiAwOwogCiBhbGxvY19mYWlsZWQ6Ci0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zMDI0LDcgKzMzNzAsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTMwMzksOSArMzM4Niw2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotCiAJaXhnYmVfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCByeF9yaW5nKTsKIAogCXZmcmVlKHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKTsKQEAgLTMwNjMsNyArMzQwNyw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT5yeF9yaW5nW2ldLmRlc2MpCisJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzEyNiw2ICszNDcxLDggQEAKIAogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCWVyciA9IGl4Z2JlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcV9pcnE7CkBAIC0zMTgwLDYgKzM1MjcsNyBAQAogLyoqCiAgKiBpeGdiZV9uYXBpX2FkZF9hbGwgLSBwcmVwIG5hcGkgc3RydWN0cyBmb3IgdXNlCiAgKiBAYWRhcHRlcjogcHJpdmF0ZSBzdHJ1Y3QKKyAqCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gbmFwaV9hZGQgZWFjaCBwb3NzaWJsZSBxX3ZlY3Rvci0+bmFwaQogICovCiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTMyNTIsNyArMzYwMCw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwogCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtMzI3MSw2ICszNjE4LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsLCBmY3RybDsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgcmV0dmFsID0gMDsKICNlbmRpZgpAQCAtMzI5MywxMCArMzY0MywzNSBAQAogCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0jZW5kaWYKIAotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKyNlbmRpZgorCWlmICh3dWZjKSB7CisJCWl4Z2JlX3NldF9yeF9tb2RlKG5ldGRldik7CisKKwkJLyogdHVybiBvbiBhbGwtbXVsdGkgbW9kZSBpZiB3YWtlIG9uIG11bHRpY2FzdCBpcyBlbmFibGVkICovCisJCWlmICh3dWZjICYgSVhHQkVfV1VGQ19NQykgeworCQkJZmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJZmN0cmwgfD0gSVhHQkVfRkNUUkxfTVBFOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOworCQl9CisKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJY3RybCB8PSBJWEdCRV9DVFJMX0dJT19ESVM7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTCwgY3RybCk7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9XVUZDLCB3dWZjKTsKKwl9IGVsc2UgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVQywgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfV1VGQywgMCk7CisJfQorCisJaWYgKHd1ZmMgJiYgaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJfSBlbHNlIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwl9CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKQEAgLTMzMjIsNiArMzY5NywxMiBAQAogCXU2NCB0b3RhbF9tcGMgPSAwOwogCXUzMiBpLCBtaXNzZWRfcnggPSAwLCBtcGMsIGJwcmMsIGx4b24sIGx4b2ZmLCB4b25fb2ZmX3RvdDsKIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlhZGFwdGVyLT5od19yeF9ub19kbWFfcmVzb3VyY2VzICs9CisJCQkgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCX0KKwogCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NSQ0VSUlMpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJLyogZm9yIHBhY2tldCBidWZmZXJzIG5vdCB1c2VkLCB0aGUgcmVnaXN0ZXIgc2hvdWxkIHJlYWQgMCAqLwpAQCAtMzMyOSwzMiArMzcxMCw1NSBAQAogCQltaXNzZWRfcnggKz0gbXBjOwogCQlhZGFwdGVyLT5zdGF0cy5tcGNbaV0gKz0gbXBjOwogCQl0b3RhbF9tcGMgKz0gYWRhcHRlci0+c3RhdHMubXBjW2ldOwotCQlhZGFwdGVyLT5zdGF0cy5ybmJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STkJDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJCWFkYXB0ZXItPnN0YXRzLnJuYmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JOQkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xcHRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKGkpKTsKIAkJYWRhcHRlci0+c3RhdHMucWJ0Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFwcmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xYnJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OUlhDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05SWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5xcHJkY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPTlJYQyhpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQyhpKSk7CisJCX0KIAkJYWRhcHRlci0+c3RhdHMucHhvbnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OVFhDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvZmZyeGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWEMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5weG9mZnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlRYQyhpKSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGVFhDKGkpKTsKIAl9CiAJYWRhcHRlci0+c3RhdHMuZ3ByYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR1BSQyk7CiAJLyogd29yayBhcm91bmQgaGFyZHdhcmUgY291bnRpbmcgaXNzdWUgKi8KIAlhZGFwdGVyLT5zdGF0cy5ncHJjIC09IG1pc3NlZF9yeDsKIAogCS8qIDgyNTk4IGhhcmR3YXJlIG9ubHkgaGFzIGEgMzIgYml0IGNvdW50ZXIgaW4gdGhlIGhpZ2ggcmVnaXN0ZXIgKi8KLQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7Ci0JYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOwotCWFkYXB0ZXItPnN0YXRzLnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDTCk7CisJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7IC8qIHRvIGNsZWFyICovCisJCWFkYXB0ZXItPnN0YXRzLmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKTsgLyogdG8gY2xlYXIgKi8KKwkJYWRhcHRlci0+c3RhdHMudG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOyAvKiB0byBjbGVhciAqLworCQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDTlQpOworCQlhZGFwdGVyLT5zdGF0cy5seG9mZnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWENOVCk7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsKKwkJYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOworCQlhZGFwdGVyLT5zdGF0cy50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOworCX0KIAlicHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0JQUkMpOwogCWFkYXB0ZXItPnN0YXRzLmJwcmMgKz0gYnByYzsKIAlhZGFwdGVyLT5zdGF0cy5tcHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFJDKTsKLQlhZGFwdGVyLT5zdGF0cy5tcHJjIC09IGJwcmM7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJYWRhcHRlci0+c3RhdHMubXByYyAtPSBicHJjOwogCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk9DKTsKIAlhZGFwdGVyLT5zdGF0cy5wcmM2NCArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDNjQpOwogCWFkYXB0ZXItPnN0YXRzLnByYzEyNyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTI3KTsKQEAgLTMzNjMsOCArMzc2Nyw2IEBACiAJYWRhcHRlci0+c3RhdHMucHJjMTAyMyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTAyMyk7CiAJYWRhcHRlci0+c3RhdHMucHJjMTUyMiArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTUyMik7CiAJYWRhcHRlci0+c3RhdHMucmxlYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkxFQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKIAlseG9uID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05UWEMpOwogCWFkYXB0ZXItPnN0YXRzLmx4b250eGMgKz0gbHhvbjsKIAlseG9mZiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlRYQyk7CkBAIC0zNDE2LDE3ICszODE4LDU0IEBACiAJLyogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKIAkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcyAqLwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCXU2NCBlaWNzID0gMDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspCisJCQllaWNzIHw9ICgxIDw8IGkpOworCiAJCS8qIENhdXNlIHNvZnR3YXJlIGludGVycnVwdCB0byBlbnN1cmUgcnggcmluZ3MgYXJlIGNsZWFuZWQgKi8KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKLQkJCXUzMiBlaWNzID0KLQkJCSAoMSA8PCAoYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlMpKSAtIDE7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsIGVpY3MpOwotCQl9IGVsc2UgewotCQkJLyogRm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueSBiaXRzIHRoYXQKLQkJCSAqIGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMgb3BlcmF0aW9uIHdvdWxkCi0JCQkgKiBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yIGFueSBiaXQgaW4gRUlBTSAqLwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOworCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCQljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsICh1MzIpZWljcyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogZm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueQorCQkJCSAqIGJpdHMgdGhhdCBhcmUgZW5hYmxlZCBmb3IgRUlBTSwgYmVjYXVzZSB0aGlzCisJCQkJICogb3BlcmF0aW9uIHdvdWxkIHNldCAqYm90aCogRUlNUyBhbmQgRUlDUyBmb3IKKwkJCQkgKiBhbnkgYml0IGluIEVJQU0KKwkJCQkgKi8KKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsCisJCQkJICAgICAoSVhHQkVfRUlDU19UQ1BfVElNRVIgfCBJWEdCRV9FSUNTX09USEVSKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCQkJLyoKKwkJCQkgKiBFSUNTKDAuLjE1KSBmaXJzdCAwLTE1IHEgdmVjdG9ycworCQkJCSAqIEVJQ1NbMV0gKDE2Li4zMSkgcSB2ZWN0b3JzIDE2LTMxCisJCQkJICogRUlDU1syXSAoMC4uMzEpIHEgdmVjdG9ycyAzMi02MworCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRikpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDU19FWCgxKSwKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRjAwMDApKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1NfRVgoMiksCisJCQkJICAgICAgICAgICAgICAgICh1MzIpKGVpY3MgPj4gMzIpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBmb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55CisJCQkJICogYml0cyB0aGF0IGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMKKwkJCQkgKiBvcGVyYXRpb24gd291bGQgc2V0ICpib3RoKiBFSU1TIGFuZCBFSUNTIGZvcgorCQkJCSAqIGFueSBiaXQgaW4gRUlBTQorCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJLyogUmVzZXQgdGhlIHRpbWVyICovCiAJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCkBAIC0zNDM3LDYgKzM4NzYsNTUgQEAKIH0KIAogLyoqCisgKiBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGNvbmZpZ3VyZSBtdWx0aXNwZWVkIGZpYmVyCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBhdXRvbmVnOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOworCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCisJCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIGEgbmV3IFNGUCsgbW9kdWxlCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVycjsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOworCWVyciA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiUEhZIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBOSUMgJWRcbiIsIGVycik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCXJldHVybjsKKwl9CisJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCWlmICghYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spCisJCS8qIFRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIERBIFR3aW5heCBjb25uZWN0aW9ucyAqLworCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSzsKK30KKworLyoqCiAgKiBpeGdiZV93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCiAgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCiAgKiovCkBAIC0zNDY2LDEwICszOTU0LDIwIEBACiAKIAlpZiAobGlua191cCkgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKLQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotI2RlZmluZSBGTE9XX1JYIChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpCi0jZGVmaW5lIEZMT1dfVFggKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKQorCQkJYm9vbCBmbG93X3J4LCBmbG93X3R4OworCisJCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkJdTMyIG1mbGNuID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwkJCQl1MzIgZmNjZmcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNDRkcpOworCQkJCWZsb3dfcnggPSAobWZsY24gJiBJWEdCRV9NRkxDTl9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOworCQkJfSBlbHNlIHsKKwkJCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOworCQkJCWZsb3dfcnggPSAoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKwkJCX0KKwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYmU6ICVzIE5JQyBMaW5rIGlzIFVwICVzLCAiCiAJCQkgICAgICAgIkZsb3cgQ29udHJvbDogJXNcbiIsCiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lLApAQCAtMzQ3Nyw5ICszOTc1LDkgQEAKIAkJCSAgICAgICAgIjEwIEdicHMiIDoKIAkJCSAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/CiAJCQkgICAgICAgICAiMSBHYnBzIiA6ICJ1bmtub3duIHNwZWVkIikpLAotCQkJICAgICAgICgoRkxPV19SWCAmJiBGTE9XX1RYKSA/ICJSWC9UWCIgOgotCQkJICAgICAgICAoRkxPV19SWCA/ICJSWCIgOgotCQkJICAgICAgICAoRkxPV19UWCA/ICJUWCIgOiAiTm9uZSIpKSkpOworCQkJICAgICAgICgoZmxvd19yeCAmJiBmbG93X3R4KSA/ICJSWC9UWCIgOgorCQkJICAgICAgICAoZmxvd19yeCA/ICJSWCIgOgorCQkJICAgICAgICAoZmxvd190eCA/ICJUWCIgOiAiTm9uZSIpKSkpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCX0gZWxzZSB7CkBAIC0zNjE5LDEzICs0MTE3LDEzIEBACiAKIAkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQkJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKIAkJCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJCQl0eXBlX3R1Y21kX21saGwgfD0KIAkJCQkJICAgICAgICBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUDsKIAkJCQlicmVhazsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCiAJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQpAQCAtMzgyMyw2ICs0MzIxLDE2IEBACiAJcmV0dXJuIF9faXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOwogfQogCitzdGF0aWMgdTE2IGl4Z2JlX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCisJCXJldHVybiAwOyAgLyogQWxsIHRyYWZmaWMgc2hvdWxkIGRlZmF1bHQgdG8gY2xhc3MgMCAqLworCisJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKK30KKwogc3RhdGljIGludCBpeGdiZV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzk0OCwzMSArNDQ1NiwxMyBAQAogfQogI2VuZGlmCiAKLS8qKgotICogaXhnYmVfbGlua19jb25maWcgLSBzZXQgdXAgaW5pdGlhbCBsaW5rIHdpdGggZGVmYXVsdCBzcGVlZCBhbmQgZHVwbGV4Ci0gKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQotICoqLwotc3RhdGljIGludCBpeGdiZV9saW5rX2NvbmZpZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQotewotCXUzMiBhdXRvbmVnID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0KLQkvKiBtdXN0IGFsd2F5cyBhdXRvbmVnIGZvciBib3RoIDFHIGFuZCAxMEcgbGluayAqLwotCWh3LT5tYWMuYXV0b25lZyA9IHRydWU7Ci0KLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgJiYKLQkgICAgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikpCi0JCWF1dG9uZWcgPSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk4X0FVVE9ORUc7Ci0KLQlyZXR1cm4gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXhnYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gCQk9IGl4Z2JlX29wZW4sCiAJLm5kb19zdG9wCQk9IGl4Z2JlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpeGdiZV94bWl0X2ZyYW1lLAorCS5uZG9fc2VsZWN0X3F1ZXVlCT0gaXhnYmVfc2VsZWN0X3F1ZXVlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IGl4Z2JlX2dldF9zdGF0cywKKwkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IGl4Z2JlX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXhnYmVfc2V0X3J4X21vZGUsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpeGdiZV9zZXRfbWFjLApAQCAtNDAwNiw3ICs0NDk2LDcgQEAKIAljb25zdCBzdHJ1Y3QgaXhnYmVfaW5mbyAqaWkgPSBpeGdiZV9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7Ci0JdTE2IGxpbmtfc3RhdHVzLCBsaW5rX3NwZWVkLCBsaW5rX3dpZHRoOworCXUxNiBwbV92YWx1ZSA9IDA7CiAJdTMyIHBhcnRfbnVtLCBlZWM7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTQxMDUsNiArNDU5NSwxMyBAQAogCiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5zZnBfdGFzaywgaXhnYmVfc2ZwX3Rhc2spOwogCisJLyogbXVsdGlzcGVlZCBmaWJlciBoYXMgaXRzIG93biB0YXNrbGV0LCBjYWxsZWQgZnJvbSBHUEkgU0RQMSBjb250ZXh0ICovCisJSU5JVF9XT1JLKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2ssIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayk7CisKKwkvKiBhIG5ldyBTRlArIG1vZHVsZSBhcnJpdmFsLCBjYWxsZWQgZnJvbSBHUEkgU0RQMiBjb250ZXh0ICovCisJSU5JVF9XT1JLKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrLAorCSAgICAgICAgICBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKKwogCWVyciA9IGlpLT5nZXRfaW52YXJpYW50cyhodyk7CiAJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9QUkVTRU5UKSB7CiAJCS8qIHN0YXJ0IGEga2VybmVsIHRocmVhZCB0byB3YXRjaCBmb3IgYSBtb2R1bGUgdG8gYXJyaXZlICovCkBAIC00MTQxLDcgKzQ2MzgsNyBAQAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKQEAgLTQxODUsMjYgKzQ2ODIsNDEgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zd19pbml0OwogCisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9LWDQ6CisjZGVmaW5lIElYR0JFX1BDSUVfUE1DU1IgMHg0NAorCQlhZGFwdGVyLT53b2wgPSBJWEdCRV9XVUZDX01BRzsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJRV9QTUNTUiwgJnBtX3ZhbHVlKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIElYR0JFX1BDSUVfUE1DU1IsCisJCSAgICAgICAgICAgICAgICAgICAgICAocG1fdmFsdWUgfCAoMSA8PCA4KSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhZGFwdGVyLT53b2wgPSAwOworCQlicmVhazsKKwl9CisJZGV2aWNlX2luaXRfd2FrZXVwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHRydWUpOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIElYR0JFX1BDSV9MSU5LX1NUQVRVUywgJmxpbmtfc3RhdHVzKTsKLQlsaW5rX3NwZWVkID0gbGlua19zdGF0dXMgJiBJWEdCRV9QQ0lfTElOS19TUEVFRDsKLQlsaW5rX3dpZHRoID0gbGlua19zdGF0dXMgJiBJWEdCRV9QQ0lfTElOS19XSURUSDsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiKFBDSSBFeHByZXNzOiVzOiVzKSAlcE1cbiIsCi0JICAgICAgICAoKGxpbmtfc3BlZWQgPT0gSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMCkgPyAiNS4wR2IvcyIgOgotCSAgICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDApID8gIjIuNUdiL3MiIDoKLQkgICAgICAgICAiVW5rbm93biIpLAotCSAgICAgICAgKChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzgpID8gIldpZHRoIHg4IiA6Ci0JICAgICAgICAgKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfNCkgPyAiV2lkdGggeDQiIDoKLQkgICAgICAgICAobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF8yKSA/ICJXaWR0aCB4MiIgOgotCSAgICAgICAgIChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzEpID8gIldpZHRoIHgxIiA6CisJICAgICAgICAoKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzUwMDApID8gIjUuMEdiL3MiOgorCSAgICAgICAgIChody0+YnVzLnNwZWVkID09IGl4Z2JlX2J1c19zcGVlZF8yNTAwKSA/ICIyLjVHYi9zIjoiVW5rbm93biIpLAorCSAgICAgICAgKChody0+YnVzLndpZHRoID09IGl4Z2JlX2J1c193aWR0aF9wY2llX3g4KSA/ICJXaWR0aCB4OCIgOgorCSAgICAgICAgIChody0+YnVzLndpZHRoID09IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0KSA/ICJXaWR0aCB4NCIgOgorCSAgICAgICAgIChody0+YnVzLndpZHRoID09IGl4Z2JlX2J1c193aWR0aF9wY2llX3gxKSA/ICJXaWR0aCB4MSIgOgogCSAgICAgICAgICJVbmtub3duIiksCiAJICAgICAgICBuZXRkZXYtPmRldl9hZGRyKTsKIAlpeGdiZV9yZWFkX3BiYV9udW1fZ2VuZXJpYyhodywgJnBhcnRfbnVtKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCi0JICAgICAgICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCi0JICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CisJaWYgKGl4Z2JlX2lzX3NmcChodykgJiYgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9ub3RfcHJlc2VudCkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFNGUCs6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKKwkJICAgICAgICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsIGh3LT5waHkuc2ZwX3R5cGUsCisJCSAgICAgICAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOworCWVsc2UKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAorCQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwKKwkJICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CiAKLQlpZiAobGlua193aWR0aCA8PSBJWEdCRV9QQ0lfTElOS19XSURUSF80KSB7CisJaWYgKGh3LT5idXMud2lkdGggPD0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlBDSS1FeHByZXNzIGJhbmR3aWR0aCBhdmFpbGFibGUgZm9yICIKIAkJICAgICAgICAgInRoaXMgY2FyZCBpcyBub3Qgc3VmZmljaWVudCBmb3Igb3B0aW1hbCAiCiAJCSAgICAgICAgICJwZXJmb3JtYW5jZS5cbiIpOwpAQCAtNDIxMiwxNiArNDcyNCwxMiBAQAogCQkgICAgICAgICAiUENJLUV4cHJlc3Mgc2xvdCBpcyByZXF1aXJlZC5cbiIpOwogCX0KIAorCS8qIHNhdmUgb2ZmIEVFUFJPTSB2ZXJzaW9uIG51bWJlciAqLworCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIDB4MjksICZhZGFwdGVyLT5lZXByb21fdmVyc2lvbik7CisKIAkvKiByZXNldCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCiAJaHctPm1hYy5vcHMuc3RhcnRfaHcoaHcpOwogCi0JLyogbGlua19jb25maWcgZGVwZW5kcyBvbiBzdGFydF9odyBiZWluZyBjYWxsZWQgYXQgbGVhc3Qgb25jZSAqLwotCWVyciA9IGl4Z2JlX2xpbmtfY29uZmlnKGh3KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInNldHVwX2xpbmtfc3BlZWQgRkFJTEVEICVkXG4iLCBlcnIpOwotCQlnb3RvIGVycl9yZWdpc3RlcjsKLQl9Ci0KIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCiAJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CkBAIC00MjUyLDYgKzQ3NjAsOCBAQAogCWNsZWFyX2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwogCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZnBfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwogCWlvdW5tYXAoaHctPmh3X2FkZHIpOwogZXJyX2lvcmVtYXA6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTQyODgsNiArNDc5OCw4IEBACiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKQEAgLTQzNzEsNyArNDg4Myw3IEBACiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKLQorCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9XVVMsIH4wKTsKIAkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwppbmRleCA1YTg2NjlhLi4xNGU5NjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMyLDYgKzMyLDE4IEBACiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCiAKK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdGFydChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdG9wKHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2kyY19hY2soc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX3JhaXNlX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpOworc3RhdGljIHZvaWQgaXhnYmVfbG93ZXJfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCk7CitzdGF0aWMgczMyIGl4Z2JlX3NldF9pMmNfZGF0YShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCwgYm9vbCBkYXRhKTsKK3N0YXRpYyBib29sIGl4Z2JlX2dldF9pMmNfZGF0YSh1MzIgKmkyY2N0bCk7CitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfYnVzX2NsZWFyKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogc3RhdGljIGJvb2wgaXhnYmVfdmFsaWRhdGVfcGh5X2FkZHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHBoeV9hZGRyKTsKIHN0YXRpYyBlbnVtIGl4Z2JlX3BoeV90eXBlIGl4Z2JlX2dldF9waHlfdHlwZV9mcm9tX2lkKHUzMiBwaHlfaWQpOwogc3RhdGljIHMzMiBpeGdiZV9nZXRfcGh5X2lkKHN0cnVjdCBpeGdiZV9odyAqaHcpOwpAQCAtNTQzLDggKzU1NSw5IEBACiAJdTggaWRlbnRpZmllciA9IDA7CiAJdTggY29tcF9jb2Rlc18xZyA9IDA7CiAJdTggY29tcF9jb2Rlc18xMGcgPSAwOwotCXU4IG91aV9ieXRlc1s0XSA9IHswLCAwLCAwLCAwfTsKKwl1OCBvdWlfYnl0ZXNbM10gPSB7MCwgMCwgMH07CiAJdTggdHJhbnNtaXNzaW9uX21lZGlhID0gMDsKKwl1MTYgZW5mb3JjZV9zZnAgPSAwOwogCiAJc3RhdHVzID0gaHctPnBoeS5vcHMucmVhZF9pMmNfZWVwcm9tKGh3LCBJWEdCRV9TRkZfSURFTlRJRklFUiwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlkZW50aWZpZXIpOwpAQCAtNTY0LDE4ICs1NzcsNDggQEAKIAogCQkvKiBJRCBNb2R1bGUKIAkJICogPT09PT09PT09Ci0JCSAqIDAJU0ZQX0RBX0NVCi0JCSAqIDEJU0ZQX1NSCi0JCSAqIDIJU0ZQX0xSCisJCSAqIDAgICAgU0ZQX0RBX0NVCisJCSAqIDEgICAgU0ZQX1NSCisJCSAqIDIgICAgU0ZQX0xSCisJCSAqIDMgICAgU0ZQX0RBX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKwkJICogNCAgICBTRlBfREFfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA1ICAgIFNGUF9TUi9MUl9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDYgICAgU0ZQX1NSL0xSX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKIAkJICovCi0JCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJiBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2RhX2N1OwotCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9zcjsKLQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfbHI7Ci0JCWVsc2UKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfZGFfY3U7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfc3I7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfbHI7CisJCQllbHNlCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3Vua25vd247CisJCX0gZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKKwkJCQlpZiAoaHctPmJ1cy5sYW5faWQgPT0gMCkKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMDsKKwkJCQllbHNlCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTE7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlpZiAoaHctPmJ1cy5sYW5faWQgPT0gMCkKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMDsKKwkJCQllbHNlCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlpZiAoaHctPmJ1cy5sYW5faWQgPT0gMCkKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMDsKKwkJCQllbHNlCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE7CisJCQllbHNlCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3Vua25vd247CisJCX0KIAogCQkvKiBEZXRlcm1pbmUgUEhZIHZlbmRvciAqLwogCQlpZiAoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV91bmtub3duKSB7CkBAIC02MDcsNiArNjUwLDkgQEAKIAkJCWNhc2UgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQVZBR086CiAJCQkJaHctPnBoeS50eXBlID0gaXhnYmVfcGh5X3NmcF9hdmFnbzsKIAkJCQlicmVhazsKKwkJCWNhc2UgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfSU5URUw6CisJCQkJaHctPnBoeS50eXBlID0gaXhnYmVfcGh5X3NmcF9pbnRlbDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmCiAJCQkJICAgIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCkBAIC02MTYsNyArNjYyLDI4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJc3RhdHVzID0gMDsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQiB8fAorCQkgICAgKGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfc3IgJiYKKwkJICAgICBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX2xyICYmCisJCSAgICAgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwICYmCisJCSAgICAgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxKSkgeworCQkJc3RhdHVzID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUEhZX0VORk9SQ0VfSU5URUxfU0ZQX09GRlNFVCwKKwkJICAgICAgICAgICAgICAgICAgICAmZW5mb3JjZV9zZnApOworCQlpZiAoIShlbmZvcmNlX3NmcCAmIElYR0JFX1BIWV9BTExPV19BTllfU0ZQKSkgeworCQkJLyogTWFrZSBzdXJlIHdlJ3JlIGEgc3VwcG9ydGVkIFBIWSB0eXBlICovCisJCQlpZiAoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV9zZnBfaW50ZWwpIHsKKwkJCQlzdGF0dXMgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlod19kYmcoaHcsICJTRlArIG1vZHVsZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQlzdGF0dXMgPSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAwOworCQl9CiAJfQogCiBvdXQ6CkBAIC02NTEsNyArNzE4LDcgQEAKIAlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9QSFlfSU5JVF9PRkZTRVRfTkwsIGxpc3Rfb2Zmc2V0KTsKIAogCWlmICgoISpsaXN0X29mZnNldCkgfHwgKCpsaXN0X29mZnNldCA9PSAweEZGRkYpKQotCQlyZXR1cm4gSVhHQkVfRVJSX1BIWTsKKwkJcmV0dXJuIElYR0JFX0VSUl9TRlBfTk9fSU5JVF9TRVFfUFJFU0VOVDsKIAogCS8qIFNoaWZ0IG9mZnNldCB0byBmaXJzdCBJRCB3b3JkICovCiAJKCpsaXN0X29mZnNldCkrKzsKQEAgLTY4OCw2ICs3NTUsNTAxIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljIC0gUmVhZHMgOCBiaXQgRUVQUk9NIHdvcmQgb3ZlciBJMkMgaW50ZXJmYWNlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogRUVQUk9NIGJ5dGUgb2Zmc2V0IHRvIHJlYWQKKyAqICBAZWVwcm9tX2RhdGE6IHZhbHVlIHJlYWQKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSByZWFkIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZS4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqZWVwcm9tX2RhdGEpCit7CisJcmV0dXJuIGh3LT5waHkub3BzLnJlYWRfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0kyQ19FRVBST01fREVWX0FERFIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tX2RhdGEpOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMgLSBXcml0ZXMgOCBiaXQgRUVQUk9NIHdvcmQgb3ZlciBJMkMgaW50ZXJmYWNlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogRUVQUk9NIGJ5dGUgb2Zmc2V0IHRvIHdyaXRlCisgKiAgQGVlcHJvbV9kYXRhOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyBieXRlIHdyaXRlIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZS4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGVlcHJvbV9kYXRhKQoreworCXJldHVybiBody0+cGh5Lm9wcy53cml0ZV9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0kyQ19FRVBST01fREVWX0FERFIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbV9kYXRhKTsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljIC0gUmVhZHMgOCBiaXQgd29yZCBvdmVyIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IGJ5dGUgb2Zmc2V0IHRvIHJlYWQKKyAqICBAZGF0YTogdmFsdWUgcmVhZAorICoKKyAqICBQZXJmb3JtcyBieXRlIHJlYWQgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlIGF0CisgKiAgYSBzcGVjaWZpZWQgZGVpdmNlIGFkZHJlc3MuCisgKiovCitzMzIgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIG1heF9yZXRyeSA9IDE7CisJdTMyIHJldHJ5ID0gMDsKKwlib29sIG5hY2sgPSAxOworCisJZG8geworCQlpeGdiZV9pMmNfc3RhcnQoaHcpOworCisJCS8qIERldmljZSBBZGRyZXNzIGFuZCB3cml0ZSBpbmRpY2F0aW9uICovCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgZGV2X2FkZHIpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBieXRlX29mZnNldCk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlpeGdiZV9pMmNfc3RhcnQoaHcpOworCisJCS8qIERldmljZSBBZGRyZXNzIGFuZCByZWFkIGluZGljYXRpb24gKi8KKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCAoZGV2X2FkZHIgfCAweDEpKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlKGh3LCBkYXRhKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KGh3LCBuYWNrKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWl4Z2JlX2kyY19zdG9wKGh3KTsKKwkJYnJlYWs7CisKK2ZhaWw6CisJCWl4Z2JlX2kyY19idXNfY2xlYXIoaHcpOworCQlyZXRyeSsrOworCQlpZiAocmV0cnkgPCBtYXhfcmV0cnkpCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSByZWFkIGVycm9yIC0gUmV0cnlpbmcuXG4iKTsKKwkJZWxzZQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgcmVhZCBlcnJvci5cbiIpOworCisJfSB3aGlsZSAocmV0cnkgPCBtYXhfcmV0cnkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYyAtIFdyaXRlcyA4IGJpdCB3b3JkIG92ZXIgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogYnl0ZSBvZmZzZXQgdG8gd3JpdGUKKyAqICBAZGF0YTogdmFsdWUgdG8gd3JpdGUKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSB3cml0ZSBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UgYXQKKyAqICBhIHNwZWNpZmllZCBkZXZpY2UgYWRkcmVzcy4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4IGRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIG1heF9yZXRyeSA9IDE7CisJdTMyIHJldHJ5ID0gMDsKKworCWRvIHsKKwkJaXhnYmVfaTJjX3N0YXJ0KGh3KTsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGRldl9hZGRyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBkYXRhKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWl4Z2JlX2kyY19zdG9wKGh3KTsKKwkJYnJlYWs7CisKK2ZhaWw6CisJCWl4Z2JlX2kyY19idXNfY2xlYXIoaHcpOworCQlyZXRyeSsrOworCQlpZiAocmV0cnkgPCBtYXhfcmV0cnkpCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSB3cml0ZSBlcnJvciAtIFJldHJ5aW5nLlxuIik7CisJCWVsc2UKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHdyaXRlIGVycm9yLlxuIik7CisJfSB3aGlsZSAocmV0cnkgPCBtYXhfcmV0cnkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfaTJjX3N0YXJ0IC0gU2V0cyBJMkMgc3RhcnQgY29uZGl0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIEkyQyBzdGFydCBjb25kaXRpb24gKEhpZ2ggLT4gTG93IG9uIFNEQSB3aGlsZSBTQ0wgaXMgSGlnaCkKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdGFydChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCS8qIFN0YXJ0IGNvbmRpdGlvbiBtdXN0IGJlZ2luIHdpdGggZGF0YSBhbmQgY2xvY2sgaGlnaCAqLworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMSk7CisJaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBTZXR1cCB0aW1lIGZvciBzdGFydCBjb25kaXRpb24gKDQuN3VzKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9TVV9TVEEpOworCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAwKTsKKworCS8qIEhvbGQgdGltZSBmb3Igc3RhcnQgY29uZGl0aW9uICg0dXMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0hEX1NUQSk7CisKKwlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKworfQorCisvKioKKyAqICBpeGdiZV9pMmNfc3RvcCAtIFNldHMgSTJDIHN0b3AgY29uZGl0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIEkyQyBzdG9wIGNvbmRpdGlvbiAoTG93IC0+IEhpZ2ggb24gU0RBIHdoaWxlIFNDTCBpcyBIaWdoKQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0b3Aoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwkvKiBTdG9wIGNvbmRpdGlvbiBtdXN0IGJlZ2luIHdpdGggZGF0YSBsb3cgYW5kIGNsb2NrIGhpZ2ggKi8KKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDApOworCWl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogU2V0dXAgdGltZSBmb3Igc3RvcCBjb25kaXRpb24gKDR1cykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfU1VfU1RPKTsKKworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMSk7CisKKwkvKiBidXMgZnJlZSB0aW1lIGJldHdlZW4gc3RvcCBhbmQgc3RhcnQgKDQuN3VzKSovCisJdWRlbGF5KElYR0JFX0kyQ19UX0JVRik7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlIC0gQ2xvY2tzIGluIG9uZSBieXRlIHZpYSBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgYnl0ZSB0byBjbG9jayBpbgorICoKKyAqICBDbG9ja3MgaW4gb25lIGJ5dGUgZGF0YSB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJczMyIGk7CisJYm9vbCBiaXQgPSAwOworCisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfaW5faTJjX2JpdChodywgJmJpdCk7CisJCSpkYXRhIHw9IGJpdCA8PCBpOworCisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZSAtIENsb2NrcyBvdXQgb25lIGJ5dGUgdmlhIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogZGF0YSBieXRlIGNsb2NrZWQgb3V0CisgKgorICogIENsb2NrcyBvdXQgb25lIGJ5dGUgZGF0YSB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJczMyIGk7CisJdTMyIGkyY2N0bDsKKwlib29sIGJpdCA9IDA7CisKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQliaXQgPSAoZGF0YSA+PiBpKSAmIDB4MTsKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoaHcsIGJpdCk7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJfQorCisJLyogUmVsZWFzZSBTREEgbGluZSAoc2V0IGhpZ2gpICovCisJaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJaTJjY3RsIHw9IElYR0JFX0kyQ19EQVRBX09VVDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgaTJjY3RsKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9pMmNfYWNrIC0gUG9sbHMgZm9yIEkyQyBBQ0sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsb2NrcyBpbi9vdXQgb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2kyY19hY2soc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzOworCXUzMiBpID0gMDsKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJdTMyIHRpbWVvdXQgPSAxMDsKKwlib29sIGFjayA9IDE7CisKKwlzdGF0dXMgPSBpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBNaW5pbXVtIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCS8qIFBvbGwgZm9yIEFDSy4gIE5vdGUgdGhhdCBBQ0sgaW4gSTJDIHNwZWMgaXMKKwkgKiB0cmFuc2l0aW9uIGZyb20gMSB0byAwICovCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQlpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwkJYWNrID0gaXhnYmVfZ2V0X2kyY19kYXRhKCZpMmNjdGwpOworCisJCXVkZWxheSgxKTsKKwkJaWYgKGFjayA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFjayA9PSAxKSB7CisJCWh3X2RiZyhodywgIkkyQyBhY2sgd2FzIG5vdCByZWNlaXZlZC5cbiIpOworCQlzdGF0dXMgPSBJWEdCRV9FUlJfSTJDOworCX0KKworCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfaW5faTJjX2JpdCAtIENsb2NrcyBpbiBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogcmVhZCBkYXRhIHZhbHVlCisgKgorICogIENsb2NrcyBpbiBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwlzdGF0dXMgPSBpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJKmRhdGEgPSBpeGdiZV9nZXRfaTJjX2RhdGEoJmkyY2N0bCk7CisKKwlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0IC0gQ2xvY2tzIGluL291dCBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogZGF0YSB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBDbG9ja3Mgb3V0IG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgZGF0YSkKK3sKKwlzMzIgc3RhdHVzOworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCXN0YXR1cyA9IGl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgZGF0YSk7CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXN0YXR1cyA9IGl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbmltdW0gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCQlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzLgorCQkgKiBUaGlzIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgZGF0YSBob2xkIHRpbWUuCisJCSAqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfSTJDOworCQlod19kYmcoaHcsICJJMkMgZGF0YSB3YXMgbm90IHNldCB0byAlWFxuIiwgZGF0YSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKy8qKgorICogIGl4Z2JlX3JhaXNlX2kyY19jbGsgLSBSYWlzZXMgdGhlIEkyQyBTQ0wgY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqCisgKiAgUmFpc2VzIHRoZSBJMkMgY2xvY2sgbGluZSAnMCctPicxJworICoqLworc3RhdGljIHMzMiBpeGdiZV9yYWlzZV9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKQoreworCXMzMiBzdGF0dXMgPSAwOworCisJKmkyY2N0bCB8PSBJWEdCRV9JMkNfQ0xLX09VVDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKworCS8qIFNDTCByaXNlIHRpbWUgKDEwMDBucykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfUklTRSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9sb3dlcl9pMmNfY2xrIC0gTG93ZXJzIHRoZSBJMkMgU0NMIGNsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKgorICogIExvd2VycyB0aGUgSTJDIGNsb2NrIGxpbmUgJzEnLT4nMCcKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2xvd2VyX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpCit7CisKKwkqaTJjY3RsICY9IH5JWEdCRV9JMkNfQ0xLX09VVDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKworCS8qIFNDTCBmYWxsIHRpbWUgKDMwMG5zKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9GQUxMKTsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X2kyY19kYXRhIC0gU2V0cyB0aGUgSTJDIGRhdGEgYml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKiAgQGRhdGE6IEkyQyBkYXRhIHZhbHVlICgwIG9yIDEpIHRvIHNldAorICoKKyAqICBTZXRzIHRoZSBJMkMgZGF0YSBiaXQKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0X2kyY19kYXRhKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsLCBib29sIGRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwlpZiAoZGF0YSkKKwkJKmkyY2N0bCB8PSBJWEdCRV9JMkNfREFUQV9PVVQ7CisJZWxzZQorCQkqaTJjY3RsICY9IH5JWEdCRV9JMkNfREFUQV9PVVQ7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgKmkyY2N0bCk7CisKKwkvKiBEYXRhIHJpc2UvZmFsbCAoMTAwMG5zLzMwMG5zKSBhbmQgc2V0LXVwIHRpbWUgKDI1MG5zKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9SSVNFICsgSVhHQkVfSTJDX1RfRkFMTCArIElYR0JFX0kyQ19UX1NVX0RBVEEpOworCisJLyogVmVyaWZ5IGRhdGEgd2FzIHNldCBjb3JyZWN0bHkgKi8KKwkqaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJaWYgKGRhdGEgIT0gaXhnYmVfZ2V0X2kyY19kYXRhKGkyY2N0bCkpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0kyQzsKKwkJaHdfZGJnKGh3LCAiRXJyb3IgLSBJMkMgZGF0YSB3YXMgbm90IHNldCB0byAlWC5cbiIsIGRhdGEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9pMmNfZGF0YSAtIFJlYWRzIHRoZSBJMkMgU0RBIGRhdGEgYml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKgorICogIFJldHVybnMgdGhlIEkyQyBkYXRhIGJpdCB2YWx1ZQorICoqLworc3RhdGljIGJvb2wgaXhnYmVfZ2V0X2kyY19kYXRhKHUzMiAqaTJjY3RsKQoreworCWJvb2wgZGF0YTsKKworCWlmICgqaTJjY3RsICYgSVhHQkVfSTJDX0RBVEFfSU4pCisJCWRhdGEgPSAxOworCWVsc2UKKwkJZGF0YSA9IDA7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiAgaXhnYmVfaTJjX2J1c19jbGVhciAtIENsZWFycyB0aGUgSTJDIGJ1cworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2xlYXJzIHRoZSBJMkMgYnVzIGJ5IHNlbmRpbmcgbmluZSBjbG9jayBwdWxzZXMuCisgKiAgVXNlZCB3aGVuIGRhdGEgbGluZSBpcyBzdHVjayBsb3cuCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfYnVzX2NsZWFyKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCXUzMiBpOworCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwkJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43dXMqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKwl9CisKKwkvKiBQdXQgdGhlIGkyYyBidXMgYmFjayB0byBkZWZhdWx0IHN0YXRlICovCisJaXhnYmVfaTJjX3N0b3AoaHcpOworfQorCisvKioKICAqICBpeGdiZV9jaGVja19waHlfbGlua190bnggLSBEZXRlcm1pbmUgbGluayBhbmQgc3BlZWQgc3RhdHVzCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmgKaW5kZXggNDNhOTdiYy4uY2M1ZjFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC01NCwxNCArNTQsMTUgQEAKICNkZWZpbmUgSVhHQkVfSTJDX0VFUFJPTV9TVEFUVVNfSU5fUFJPR1JFU1MgIDB4MwogCiAvKiBCaXQtc2hpZnQgbWFjcm9zICovCi0jZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUwX1NISUZUICAgIDEyCi0jZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUxX1NISUZUICAgIDgKLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTJfU0hJRlQgICAgNAorI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMF9TSElGVCAgICAyNAorI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMV9TSElGVCAgICAxNgorI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMl9TSElGVCAgICA4CiAKIC8qIFZlbmRvciBPVUlzOiBmb3JtYXQgb2YgT1VJIGlzIDB4W2J5dGUwXVtieXRlMV1bYnl0ZTJdWzAwXSAqLwogI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9UWUNPICAgICAweDAwNDA3NjAwCiAjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0ZUTCAgICAgIDB4MDA5MDY1MDAKICNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQVZBR08gICAgMHgwMDE3NkEwMAorI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9JTlRFTCAgICAweDAwMUIyMTAwCiAKIC8qIEkyQyBTREEgYW5kIFNDTCB0aW1pbmcgcGFyYW1ldGVycyBmb3Igc3RhbmRhcmQgbW9kZSAqLwogI2RlZmluZSBJWEdCRV9JMkNfVF9IRF9TVEEgIDQKQEAgLTEwMSw1ICsxMDIsMTIgQEAKIHMzMiBpeGdiZV9nZXRfc2ZwX2luaXRfc2VxdWVuY2Vfb2Zmc2V0cyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqbGlzdF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhX29mZnNldCk7Ci0KK3MzMiBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRldl9hZGRyLCB1OCAqZGF0YSk7CitzMzIgaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRldl9hZGRyLCB1OCBkYXRhKTsKK3MzMiBpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqZWVwcm9tX2RhdGEpOworczMyIGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZWVwcm9tX2RhdGEpOwogI2VuZGlmIC8qIF9JWEdCRV9QSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCBmMDExYzU3Li4yYjJlY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzQsNiArMzQsOCBAQAogI2RlZmluZSBJWEdCRV9JTlRFTF9WRU5ET1JfSUQgICAweDgwODYKIAogLyogRGV2aWNlIElEcyAqLworI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTggICAgICAgICAgICAgICAweDEwQjYKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X0JYICAgICAgICAgICAgMHgxNTA4CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEFGX0RVQUxfUE9SVCAgIDB4MTBDNgogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThBRl9TSU5HTEVfUE9SVCAweDEwQzcKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4RUJfU0ZQX0xPTSAgICAgMHgxMERCCkBAIC00Myw2ICs0NSw5IEBACiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9EQV9EVUFMX1BPUlQgIDB4MTBGMQogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThfU1JfRFVBTF9QT1JUX0VNICAgICAgMHgxMEUxCiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEVCX1hGX0xSICAgICAgIDB4MTBGNAorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTkgICAgICAgICAgICAgICAweDEwRDgKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X0tYNCAgICAgICAgICAgMHgxMEY3CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9TRlAgICAgICAgICAgIDB4MTBGQgogCiAvKiBHZW5lcmFsIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9DVFJMICAgICAgMHgwMDAwMApAQCAtNTAsOSArNTUsMTIgQEAKICNkZWZpbmUgSVhHQkVfQ1RSTF9FWFQgIDB4MDAwMTgKICNkZWZpbmUgSVhHQkVfRVNEUCAgICAgIDB4MDAwMjAKICNkZWZpbmUgSVhHQkVfRU9EU0RQICAgIDB4MDAwMjgKKyNkZWZpbmUgSVhHQkVfSTJDQ1RMICAgIDB4MDAwMjgKICNkZWZpbmUgSVhHQkVfTEVEQ1RMICAgIDB4MDAyMDAKICNkZWZpbmUgSVhHQkVfRlJUSU1FUiAgIDB4MDAwNDgKICNkZWZpbmUgSVhHQkVfVENQVElNRVIgIDB4MDAwNEMKKyNkZWZpbmUgSVhHQkVfQ09SRVNQQVJFIDB4MDA2MDAKKyNkZWZpbmUgSVhHQkVfRVhWRVQgICAgIDB4MDUwNzgKIAogLyogTlZNIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9FRUMgICAgICAgMHgxMDAxMApAQCAtNjYsNiArNzQsMTkgQEAKICNkZWZpbmUgSVhHQkVfRkxPUCAgICAgIDB4MTAxM0MKICNkZWZpbmUgSVhHQkVfR1JDICAgICAgIDB4MTAyMDAKIAorLyogR2VuZXJhbCBSZWNlaXZlIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfR1JDX01ORyAgMHgwMDAwMDAwMSAvKiBNYW5hZ2VhYmlsaXR5IEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9HUkNfQVBNRSAweDAwMDAwMDAyIC8qIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW5hYmxlICovCisKKyNkZWZpbmUgSVhHQkVfVlBERElBRzAgIDB4MTAyMDQKKyNkZWZpbmUgSVhHQkVfVlBERElBRzEgIDB4MTAyMDgKKworLyogSTJDQ1RMIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9JMkNfQ0xLX0lOICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfSTJDX0NMS19PVVQgICAweDAwMDAwMDAyCisjZGVmaW5lIElYR0JFX0kyQ19EQVRBX0lOICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9JMkNfREFUQV9PVVQgIDB4MDAwMDAwMDgKKwogLyogSW50ZXJydXB0IFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9FSUNSICAgICAgMHgwMDgwMAogI2RlZmluZSBJWEdCRV9FSUNTICAgICAgMHgwMDgwOApAQCAtNzMsMjggKzk0LDYzIEBACiAjZGVmaW5lIElYR0JFX0VJTUMgICAgICAweDAwODg4CiAjZGVmaW5lIElYR0JFX0VJQUMgICAgICAweDAwODEwCiAjZGVmaW5lIElYR0JFX0VJQU0gICAgICAweDAwODkwCi0jZGVmaW5lIElYR0JFX0VJVFIoX2kpICAoKChfaSkgPD0gMjMpID8gKDB4MDA4MjAgKyAoKF9pKSAqIDQpKSA6ICgweDAxMjMwMCArICgoX2kpICogNCkpKQorI2RlZmluZSBJWEdCRV9FSUNTX0VYKF9pKSAgICgweDAwQTkwICsgKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX0VJTVNfRVgoX2kpICAgKDB4MDBBQTAgKyAoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfRUlNQ19FWChfaSkgICAoMHgwMEFCMCArIChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9FSUFNX0VYKF9pKSAgICgweDAwQUQwICsgKF9pKSAqIDQpCisvKgorICogODI1OTggRUlUUiBpcyAxNiBiaXRzIGJ1dCBzZXQgdGhlIGxpbWl0cyBiYXNlZCBvbiB0aGUgbWF4CisgKiBzdXBwb3J0ZWQgYnkgYWxsIGl4Z2JlIGhhcmR3YXJlLiAgODI1OTkgRUlUUiBpcyBvbmx5IDEyIGJpdHMsCisgKiB3aXRoIHRoZSBsb3dlciAzIGFsd2F5cyB6ZXJvLgorICovCisjZGVmaW5lIElYR0JFX01BWF9JTlRfUkFURSA0ODgyODEKKyNkZWZpbmUgSVhHQkVfTUlOX0lOVF9SQVRFIDk1NgorI2RlZmluZSBJWEdCRV9NQVhfRUlUUiAgICAgMHgwMDAwMEZGOAorI2RlZmluZSBJWEdCRV9NSU5fRUlUUiAgICAgOAorI2RlZmluZSBJWEdCRV9FSVRSKF9pKSAgKCgoX2kpIDw9IDIzKSA/ICgweDAwODIwICsgKChfaSkgKiA0KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEyMzAwICsgKCgoX2kpIC0gMjQpICogNCkpKQorI2RlZmluZSBJWEdCRV9FSVRSX0lUUl9JTlRfTUFTSyAweDAwMDAwRkY4CisjZGVmaW5lIElYR0JFX0VJVFJfTExJX01PRCAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSVhHQkVfRUlUUl9DTlRfV0RJUyAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBJWEdCRV9JVkFSKF9pKSAgKDB4MDA5MDAgKyAoKF9pKSAqIDQpKSAvKiAyNCBhdCAweDkwMC0weDk2MCAqLworI2RlZmluZSBJWEdCRV9JVkFSX01JU0MgMHgwMEEwMCAvKiBtaXNjIE1TSS1YIGludGVycnVwdCBjYXVzZXMgKi8KKyNkZWZpbmUgSVhHQkVfRUlUUlNFTCAgIDB4MDA4OTQKICNkZWZpbmUgSVhHQkVfTVNJWFQgICAgIDB4MDAwMDAgLyogTVNJLVggVGFibGUuIDB4MDAwMCAtIDB4MDFDICovCiAjZGVmaW5lIElYR0JFX01TSVhQQkEgICAweDAyMDAwIC8qIE1TSS1YIFBlbmRpbmcgYml0IGFycmF5ICovCiAjZGVmaW5lIElYR0JFX1BCQUNMKF9pKSAoKChfaSkgPT0gMCkgPyAoMHgxMTA2OCkgOiAoMHgxMTBDMCArICgoX2kpICogNCkpKQogI2RlZmluZSBJWEdCRV9HUElFICAgICAgMHgwMDg5OAogCiAvKiBGbG93IENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0ZDQURCVUwgICAweDAzMjEwCisjZGVmaW5lIElYR0JFX0ZDQURCVUggICAweDAzMjE0CisjZGVmaW5lIElYR0JFX0ZDQU1BQ0wgICAweDA0MzI4CisjZGVmaW5lIElYR0JFX0ZDQU1BQ0ggICAweDA0MzJDCisjZGVmaW5lIElYR0JFX0ZDUlRIXzgyNTk5KF9pKSAoMHgwMzI2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfRkNSVExfODI1OTkoX2kpICgweDAzMjIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9QRkNUT1AgICAgMHgwMzAwOAogI2RlZmluZSBJWEdCRV9GQ1RUVihfaSkgKDB4MDMyMDAgKyAoKF9pKSAqIDQpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCiAjZGVmaW5lIElYR0JFX0ZDUlRMKF9pKSAoMHgwMzIyMCArICgoX2kpICogOCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfRkNSVEgoX2kpICgweDAzMjYwICsgKChfaSkgKiA4KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9GQ1JUViAgICAgMHgwMzJBMAorI2RlZmluZSBJWEdCRV9GQ0NGRyAgICAgMHgwM0QwMAogI2RlZmluZSBJWEdCRV9URkNTICAgICAgMHgwQ0UwMAogCiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgSVhHQkVfUkRCQUwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDAwICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAwMCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JEQkFIKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMDQgKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SRExFTihfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDggKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDA4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRIKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDEwICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAxMCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JEVChfaSkgICAoKChfaSkgPCA2NCkgPyAoMHgwMTAxOCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMTggKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SWERDVEwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDI4ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAyOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JEQkFMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDAwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRCQUgoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMDQgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRExFTihfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAwOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JESChfaSkgICAoKChfaSkgPCA2NCkgPyAoMHgwMTAxMCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDEwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRUKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDE4ICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMTggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SWERDVEwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDI4ICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDI4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkREQ0MgICAgICAweDAyRjIwCisjZGVmaW5lIElYR0JFX1JYTUVNV1JBUCAgMHgwMzE5MAorI2RlZmluZSBJWEdCRV9TVEFSQ1RSTCAgIDB4MDMwMjQKIC8qCiAgKiBTcGxpdCBhbmQgUmVwbGljYXRpb24gUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVycwogICogMDAtMTUgOiAweDAyMTAwICsgbio0CkBAIC0xMjcsMTAgKzE4MywxNSBAQAogI2RlZmluZSBJWEdCRV9EUkVDQ0NUTF9ESVNBQkxFIDAKIC8qIE11bHRpY2FzdCBUYWJsZSBBcnJheSAtIDEyOCBlbnRyaWVzICovCiAjZGVmaW5lIElYR0JFX01UQShfaSkgICAoMHgwNTIwMCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX1JBTChfaSkgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDAgKyAoKF9pKSAqIDgpKSA6ICgweDBBMjAwICsgKChfaSkgKiA4KSkpCi0jZGVmaW5lIElYR0JFX1JBSChfaSkgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDQgKyAoKF9pKSAqIDgpKSA6ICgweDBBMjA0ICsgKChfaSkgKiA4KSkpCisjZGVmaW5lIElYR0JFX1JBTChfaSkgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDAgKyAoKF9pKSAqIDgpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQTIwMCArICgoX2kpICogOCkpKQorI2RlZmluZSBJWEdCRV9SQUgoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDA0ICsgKChfaSkgKiA4KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEyMDQgKyAoKF9pKSAqIDgpKSkKKyNkZWZpbmUgSVhHQkVfTVBTQVJfTE8oX2kpICgweDBBNjAwICsgKChfaSkgKiA4KSkKKyNkZWZpbmUgSVhHQkVfTVBTQVJfSEkoX2kpICgweDBBNjA0ICsgKChfaSkgKiA4KSkKIC8qIFBhY2tldCBzcGxpdCByZWNlaXZlIHR5cGUgKi8KLSNkZWZpbmUgSVhHQkVfUFNSVFlQRShfaSkgICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDgwICsgKChfaSkgKiA0KSkgOiAoMHgwRUEwMCArICgoX2kpICogNCkpKQorI2RlZmluZSBJWEdCRV9QU1JUWVBFKF9pKSAgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0ODAgKyAoKF9pKSAqIDQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBFQTAwICsgKChfaSkgKiA0KSkpCiAvKiBhcnJheSBvZiA0MDk2IDEtYml0IHZsYW4gZmlsdGVycyAqLwogI2RlZmluZSBJWEdCRV9WRlRBKF9pKSAgKDB4MEEwMDAgKyAoKF9pKSAqIDQpKQogLyphcnJheSBvZiA0MDk2IDQtYml0IHZsYW4gdm1kcSBpbmRpY2VzICovCkBAIC0xMzksNiArMjAwLDI4IEBACiAjZGVmaW5lIElYR0JFX1ZMTkNUUkwgICAweDA1MDg4CiAjZGVmaW5lIElYR0JFX01DU1RDVFJMICAweDA1MDkwCiAjZGVmaW5lIElYR0JFX01SUUMgICAgICAweDA1ODE4CisjZGVmaW5lIElYR0JFX1NBUUYoX2kpICAoMHgwRTAwMCArICgoX2kpICogNCkpIC8qIFNvdXJjZSBBZGRyZXNzIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9EQVFGKF9pKSAgKDB4MEUyMDAgKyAoKF9pKSAqIDQpKSAvKiBEZXN0LiBBZGRyZXNzIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9TRFBRRihfaSkgKDB4MEU0MDAgKyAoKF9pKSAqIDQpKSAvKiBTcmMgRGVzdC4gQWRkciBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfRlRRRihfaSkgICgweDBFNjAwICsgKChfaSkgKiA0KSkgLyogRml2ZSBUdXBsZSBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRihfaSkgICgweDA1MTI4ICsgKChfaSkgKiA0KSkgLyogRVR5cGUgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0VUUVMoX2kpICAoMHgwRUMwMCArICgoX2kpICogNCkpIC8qIEVUeXBlIFF1ZXVlIFNlbGVjdCAqLworI2RlZmluZSBJWEdCRV9TWU5RRiAgICAgMHgwRUMzMCAvKiBTWU4gUGFja2V0IFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9SUVRDICAgICAgMHgwRUM3MAorI2RlZmluZSBJWEdCRV9NVFFDICAgICAgMHgwODEyMAorI2RlZmluZSBJWEdCRV9WTFZGKF9pKSAgKDB4MEYxMDAgKyAoKF9pKSAqIDQpKSAgLyogNjQgb2YgdGhlc2UgKDAtNjMpICovCisjZGVmaW5lIElYR0JFX1ZMVkZCKF9pKSAoMHgwRjIwMCArICgoX2kpICogNCkpICAvKiAxMjggb2YgdGhlc2UgKDAtMTI3KSAqLworI2RlZmluZSBJWEdCRV9WVF9DVEwgICAgMHgwNTFCMAorI2RlZmluZSBJWEdCRV9WRlJFKF9pKSAgKDB4MDUxRTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WRlRFKF9pKSAgKDB4MDgxMTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9RREUgICAgICAgMHgyRjA0CisjZGVmaW5lIElYR0JFX1ZNT0xSKF9pKSAoMHgwRjAwMCArICgoX2kpICogNCkpIC8qIDY0IHRvdGFsICovCisjZGVmaW5lIElYR0JFX1VUQShfaSkgICAoMHgwRjQwMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUkNUTChfaSkgICAgICAgICgweDBGNjAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SVkxBTihfaSkgICAgICAgKDB4MEY2MTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJWTShfaSkgICAgICAgICAoMHgwRjYzMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX0wzNFRfSU1JUihfaSkgICAgICAoMHgwRTgwMCArICgoX2kpICogNCkpIC8qMTI4IG9mIHRoZXNlICgwLTEyNykqLworI2RlZmluZSBJWEdCRV9MTElUSFJFU0ggMHgwRUM5MAogI2RlZmluZSBJWEdCRV9JTUlSKF9pKSAgKDB4MDVBODAgKyAoKF9pKSAqIDQpKSAgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9JTUlSRVhUKF9pKSAgICAgICAoMHgwNUFBMCArICgoX2kpICogNCkpICAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0lNSVJWUCAgICAweDA1QUMwCkBAIC0xNDYsNyArMjI5LDYgQEAKICNkZWZpbmUgSVhHQkVfUkVUQShfaSkgICgweDA1QzAwICsgKChfaSkgKiA0KSkgIC8qIDMyIG9mIHRoZXNlICgwLTMxKSAqLwogI2RlZmluZSBJWEdCRV9SU1NSSyhfaSkgKDB4MDVDODAgKyAoKF9pKSAqIDQpKSAgLyogMTAgb2YgdGhlc2UgKDAtOSkgKi8KIAotCiAvKiBUcmFuc21pdCBETUEgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1REQkFMKF9pKSAoMHgwNjAwMCArICgoX2kpICogMHg0MCkpIC8qIDMyIG9mIHRoZXNlICgwLTMxKSovCiAjZGVmaW5lIElYR0JFX1REQkFIKF9pKSAoMHgwNjAwNCArICgoX2kpICogMHg0MCkpCkBAIC0xNTgsNyArMjQwLDIwIEBACiAjZGVmaW5lIElYR0JFX1REV0JBSChfaSkgKDB4MDYwM0MgKyAoKF9pKSAqIDB4NDApKQogI2RlZmluZSBJWEdCRV9EVFhDVEwgICAgMHgwN0UwMAogCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMICAweDA0QTgwCisjZGVmaW5lIElYR0JFX0RUWE1YU1pSUSAgICAgMHgwODEwMAorI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdMICAgIDB4MDRBODgKKyNkZWZpbmUgSVhHQkVfRFRYVENQRkxHSCAgICAweDA0QThDCisjZGVmaW5lIElYR0JFX0xCRFJQRU4gICAgICAgMHgwQ0EwMAorI2RlZmluZSBJWEdCRV9UWFBCVEhSRVNIKF9pKSAoMHgwNDk1MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgMCAtIDcgKi8KKworI2RlZmluZSBJWEdCRV9ETUFUWENUTF9URSAgICAgICAweDEgLyogVHJhbnNtaXQgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX05TICAgICAgIDB4MiAvKiBObyBTbm9vcCBMU08gaGRyIGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9ETUFUWENUTF9HRFYgICAgICAweDggLyogR2xvYmFsIERvdWJsZSBWTEFOICovCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX1ZUX1NISUZUIDE2ICAvKiBWTEFOIEV0aGVyVHlwZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMKF9pKSAgICAoMHgwNzIwMCArICgoX2kpICogNCkpIC8qIDE2IG9mIHRoZXNlICgwLTE1KSAqLworLyogVHggRENBIENvbnRyb2wgcmVnaXN0ZXIgOiAxMjggb2YgdGhlc2UgKDAtMTI3KSAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KF9pKSAgKDB4MDYwMEMgKyAoKF9pKSAqIDB4NDApKQogI2RlZmluZSBJWEdCRV9USVBHICAgICAgMHgwQ0IwMAogI2RlZmluZSBJWEdCRV9UWFBCU0laRShfaSkgICAgICAoMHgwQ0MwMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfTU5HVFhNQVAgIDB4MENEMTAKQEAgLTE3NSw5ICsyNzAsNjkgQEAKIAogI2RlZmluZSBJWEdCRV9XVVBMICAgICAgMHgwNTkwMAogI2RlZmluZSBJWEdCRV9XVVBNICAgICAgMHgwNUEwMCAvKiB3YWtlIHVwIHBrdCBtZW1vcnkgMHg1QTAwLTB4NUE3QyAqLwotI2RlZmluZSBJWEdCRV9GSEZUICAgICAgMHgwOTAwMCAvKiBGbGV4IGhvc3QgZmlsdGVyIHRhYmxlIDkwMDAtOTNGQyAqLworI2RlZmluZSBJWEdCRV9GSEZUKF9uKSAgICAgKDB4MDkwMDAgKyAoX24gKiAweDEwMCkpIC8qIEZsZXggaG9zdCBmaWx0ZXIgdGFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkhGVF9FWFQoX24pICgweDA5ODAwICsgKF9uICogMHgxMDApKSAvKiBFeHQgRmxleGlibGUgSG9zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZpbHRlciBUYWJsZSAqLwogCi0vKiBNdXNpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCAgICAgICAgIDQKKyNkZWZpbmUgSVhHQkVfRVhUX0ZMRVhJQkxFX0ZJTFRFUl9DT1VOVF9NQVggICAgIDIKKworLyogRWFjaCBGbGV4aWJsZSBGaWx0ZXIgaXMgYXQgbW9zdCAxMjggKDB4ODApIGJ5dGVzIGluIGxlbmd0aCAqLworI2RlZmluZSBJWEdCRV9GTEVYSUJMRV9GSUxURVJfU0laRV9NQVggIDEyOAorI2RlZmluZSBJWEdCRV9GSEZUX0xFTkdUSF9PRkZTRVQgICAgICAgIDB4RkMgIC8qIExlbmd0aCBieXRlIGluIEZIRlQgKi8KKyNkZWZpbmUgSVhHQkVfRkhGVF9MRU5HVEhfTUFTSyAgICAgICAgICAweDBGRiAvKiBMZW5ndGggaW4gbG93ZXIgYnl0ZSAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgcG93ZXIgbWFuYWdlbWVudCBhbmQgd2FrZXVwIHJlZ2lzdGVycyAqLworLyogV2FrZSBVcCBDb250cm9sICovCisjZGVmaW5lIElYR0JFX1dVQ19QTUVfRU4gICAgIDB4MDAwMDAwMDIgLyogUE1FIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUNfUE1FX1NUQVRVUyAweDAwMDAwMDA0IC8qIFBNRSBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfV1VDX0FEVkQzV1VDICAgMHgwMDAwMDAxMCAvKiBEM0NvbGQgd2FrZSB1cCBjYXAuIGVuYWJsZSovCisKKy8qIFdha2UgVXAgRmlsdGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19MTktDIDB4MDAwMDAwMDEgLyogTGluayBTdGF0dXMgQ2hhbmdlIFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19NQUcgIDB4MDAwMDAwMDIgLyogTWFnaWMgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19FWCAgIDB4MDAwMDAwMDQgLyogRGlyZWN0ZWQgRXhhY3QgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01DICAgMHgwMDAwMDAwOCAvKiBEaXJlY3RlZCBNdWx0aWNhc3QgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0JDICAgMHgwMDAwMDAxMCAvKiBCcm9hZGNhc3QgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0FSUCAgMHgwMDAwMDAyMCAvKiBBUlAgUmVxdWVzdCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0lQVjQgMHgwMDAwMDA0MCAvKiBEaXJlY3RlZCBJUHY0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfSVBWNiAweDAwMDAwMDgwIC8qIERpcmVjdGVkIElQdjYgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19NTkcgIDB4MDAwMDAxMDAgLyogRGlyZWN0ZWQgTWdtdCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworCisjZGVmaW5lIElYR0JFX1dVRkNfSUdOT1JFX1RDTyAgIDB4MDAwMDgwMDAgLyogSWdub3JlIFdha2VPbiBUQ08gcGFja2V0cyAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDAgMHgwMDAxMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgxIDB4MDAwMjAwMDAgLyogRmxleGlibGUgRmlsdGVyIDEgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMiAweDAwMDQwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAyIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDMgMHgwMDA4MDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMyBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFg0IDB4MDAxMDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDQgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYNSAweDAwMjAwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciA1IEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWF9GSUxURVJTICAgICAweDAwMEYwMDAwIC8qIE1hc2sgZm9yIDQgZmxleCBmaWx0ZXJzICovCisjZGVmaW5lIElYR0JFX1dVRkNfRVhUX0ZMWF9GSUxURVJTIDB4MDAzMDAwMDAgLyogTWFzayBmb3IgRXh0LiBmbGV4IGZpbHRlcnMgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19BTExfRklMVEVSUyAgICAgMHgwMDNGMDBGRiAvKiBNYXNrIGZvciBhbGwgNiB3YWtldXAgZmlsdGVycyovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYX09GRlNFVCAgICAgIDE2IC8qIE9mZnNldCB0byB0aGUgRmxleGlibGUgRmlsdGVycyBiaXRzICovCisKKy8qIFdha2UgVXAgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1dVU19MTktDICBJWEdCRV9XVUZDX0xOS0MKKyNkZWZpbmUgSVhHQkVfV1VTX01BRyAgIElYR0JFX1dVRkNfTUFHCisjZGVmaW5lIElYR0JFX1dVU19FWCAgICBJWEdCRV9XVUZDX0VYCisjZGVmaW5lIElYR0JFX1dVU19NQyAgICBJWEdCRV9XVUZDX01DCisjZGVmaW5lIElYR0JFX1dVU19CQyAgICBJWEdCRV9XVUZDX0JDCisjZGVmaW5lIElYR0JFX1dVU19BUlAgICBJWEdCRV9XVUZDX0FSUAorI2RlZmluZSBJWEdCRV9XVVNfSVBWNCAgSVhHQkVfV1VGQ19JUFY0CisjZGVmaW5lIElYR0JFX1dVU19JUFY2ICBJWEdCRV9XVUZDX0lQVjYKKyNkZWZpbmUgSVhHQkVfV1VTX01ORyAgIElYR0JFX1dVRkNfTU5HCisjZGVmaW5lIElYR0JFX1dVU19GTFgwICBJWEdCRV9XVUZDX0ZMWDAKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDEgIElYR0JFX1dVRkNfRkxYMQorI2RlZmluZSBJWEdCRV9XVVNfRkxYMiAgSVhHQkVfV1VGQ19GTFgyCisjZGVmaW5lIElYR0JFX1dVU19GTFgzICBJWEdCRV9XVUZDX0ZMWDMKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDQgIElYR0JFX1dVRkNfRkxYNAorI2RlZmluZSBJWEdCRV9XVVNfRkxYNSAgSVhHQkVfV1VGQ19GTFg1CisjZGVmaW5lIElYR0JFX1dVU19GTFhfRklMVEVSUyAgSVhHQkVfV1VGQ19GTFhfRklMVEVSUworCisvKiBXYWtlIFVwIFBhY2tldCBMZW5ndGggKi8KKyNkZWZpbmUgSVhHQkVfV1VQTF9MRU5HVEhfTUFTSyAweEZGRkYKKworLyogRENCIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9STUNTICAgICAgMHgwM0QwMAogI2RlZmluZSBJWEdCRV9EUE1DUyAgICAgMHgwN0Y0MAogI2RlZmluZSBJWEdCRV9QRFBNQ1MgICAgMHgwQ0QwMApAQCAtMTkwLDYgKzM0NSwxMjIgQEAKICNkZWZpbmUgSVhHQkVfVERQVDJUQ1NSKF9pKSAgICAgKDB4MENENDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAKIAorLyogU2VjdXJpdHkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMICAgICAgICAgMHgwODgwMAorI2RlZmluZSBJWEdCRV9TRUNUWFNUQVQgICAgICAgICAweDA4ODA0CisjZGVmaW5lIElYR0JFX1NFQ1RYQlVGRkFGICAgICAgIDB4MDg4MDgKKyNkZWZpbmUgSVhHQkVfU0VDVFhNSU5JRkcgICAgICAgMHgwODgxMAorI2RlZmluZSBJWEdCRV9TRUNUWFNUQVQgICAgICAgICAweDA4ODA0CisjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTCAgICAgICAgIDB4MDhEMDAKKyNkZWZpbmUgSVhHQkVfU0VDUlhTVEFUICAgICAgICAgMHgwOEQwNAorCisvKiBTZWN1cml0eSBCaXQgRmllbGRzIGFuZCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfU0VDVFhfRElTICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1RYX0RJUyAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9TVE9SRV9GT1JXQVJEICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVF9TRUNUWF9SRFkgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNUWFNUQVRfRUNDX1RYRVJSICAgICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSBJWEdCRV9TRUNSWENUUkxfU0VDUlhfRElTICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDUlhDVFJMX1JYX0RJUyAgICAgICAgICAweDAwMDAwMDAyCisKKyNkZWZpbmUgSVhHQkVfU0VDUlhTVEFUX1NFQ1JYX1JEWSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1JYU1RBVF9FQ0NfUlhFUlIgICAgICAgMHgwMDAwMDAwMgorCisvKiBMaW5rU2VjIChNYWNTZWMpIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhDQVAgICAgICAgICAweDA4QTAwCisjZGVmaW5lIElYR0JFX0xTRUNSWENBUCAgICAgICAgIDB4MDhGMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTCAgICAgICAgMHgwOEEwNAorI2RlZmluZSBJWEdCRV9MU0VDVFhTQ0wgICAgICAgICAweDA4QTA4IC8qIFNDSSBMb3cgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYU0NIICAgICAgICAgMHgwOEEwQyAvKiBTQ0kgSGlnaCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhTQSAgICAgICAgICAweDA4QTEwCisjZGVmaW5lIElYR0JFX0xTRUNUWFBOMCAgICAgICAgIDB4MDhBMTQKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUE4xICAgICAgICAgMHgwOEExOAorI2RlZmluZSBJWEdCRV9MU0VDVFhLRVkwKF9uKSAgICAoMHgwOEExQyArICg0ICogKF9uKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYS0VZMShfbikgICAgKDB4MDhBMkMgKyAoNCAqIChfbikpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkwgICAgICAgIDB4MDhGMDQKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYU0NMICAgICAgICAgMHgwOEYwOAorI2RlZmluZSBJWEdCRV9MU0VDUlhTQ0ggICAgICAgICAweDA4RjBDCisjZGVmaW5lIElYR0JFX0xTRUNSWFNBKF9pKSAgICAgICgweDA4RjEwICsgKDQgKiAoX2kpKSkgLyogMiBvZiB0aGVzZSAoMC0xKSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhQTihfaSkgICAgICAoMHgwOEYxOCArICg0ICogKF9pKSkpIC8qIDIgb2YgdGhlc2UgKDAtMSkgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYS0VZKF9uLCBfbSkgKDB4MDhGMjAgKyAoKDB4MTAgKiAoX24pKSArICg0ICogKF9tKSkpKQorI2RlZmluZSBJWEdCRV9MU0VDVFhVVCAgICAgICAgICAweDA4QTNDIC8qIE91dFBrdHNVbnRhZ2dlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhQS1RFICAgICAgICAweDA4QTQwIC8qIE91dFBrdHNFbmNyeXB0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUEtUUCAgICAgICAgMHgwOEE0NCAvKiBPdXRQa3RzUHJvdGVjdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWE9DVEUgICAgICAgIDB4MDhBNDggLyogT3V0T2N0ZXRzRW5jcnlwdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWE9DVFAgICAgICAgIDB4MDhBNEMgLyogT3V0T2N0ZXRzUHJvdGVjdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVUICAgICAgICAgIDB4MDhGNDAgLyogSW5Qa3RzVW50YWdnZWQvSW5Qa3RzTm9UYWcgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYT0NURCAgICAgICAgMHgwOEY0NCAvKiBJbk9jdGV0c0RlY3J5cHRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPQ1RWICAgICAgICAweDA4RjQ4IC8qIEluT2N0ZXRzVmFsaWRhdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWEJBRCAgICAgICAgIDB4MDhGNEMgLyogSW5Qa3RzQmFkVGFnICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE5PU0NJICAgICAgIDB4MDhGNTAgLyogSW5Qa3RzTm9TY2kgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVU5TQ0kgICAgICAgMHgwOEY1NCAvKiBJblBrdHNVbmtub3duU2NpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVOQ0ggICAgICAgIDB4MDhGNTggLyogSW5Qa3RzVW5jaGVja2VkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWERFTEFZICAgICAgIDB4MDhGNUMgLyogSW5Qa3RzRGVsYXllZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhMQVRFICAgICAgICAweDA4RjYwIC8qIEluUGt0c0xhdGUgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYT0soX24pICAgICAgKDB4MDhGNjQgKyAoMHgwNCAqIChfbikpKSAvKiBJblBrdHNPayAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhJTlYoX24pICAgICAoMHgwOEY2QyArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c0ludmFsaWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTlYoX24pICAgICAgKDB4MDhGNzQgKyAoMHgwNCAqIChfbikpKSAvKiBJblBrdHNOb3RWYWxpZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVTlNBICAgICAgICAweDA4RjdDIC8qIEluUGt0c1VudXNlZFNhICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE5VU0EgICAgICAgIDB4MDhGODAgLyogSW5Qa3RzTm90VXNpbmdTYSAqLworCisvKiBMaW5rU2VjIChNYWNTZWMpIEJpdCBGaWVsZHMgYW5kIE1hc2tzICovCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUF9TVU1fTUFTSyAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDQVBfU1VNX1NISUZUICAgICAgIDE2CisjZGVmaW5lIElYR0JFX0xTRUNSWENBUF9TVU1fTUFTSyAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBJWEdCRV9MU0VDUlhDQVBfU1VNX1NISUZUICAgICAgIDE2CisKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9FTl9NQVNLICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfRElTQUJMRSAgICAgICAgMHgwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfQVVUSCAgICAgICAgICAgMHgxCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfQVVUSF9FTkNSWVBUICAgMHgyCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfQUlTQ0kgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX1BOVEhSU0hfTUFTSyAgIDB4RkZGRkZGMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9SU1ZfTUFTSyAgICAgICAweDAwMDAwMEQ4CisKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9FTl9NQVNLICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRU5fU0hJRlQgICAgICAgMgorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0RJU0FCTEUgICAgICAgIDB4MAorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0NIRUNLICAgICAgICAgIDB4MQorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1NUUklDVCAgICAgICAgIDB4MgorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0RST1AgICAgICAgICAgIDB4MworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1BMU0ggICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9SUCAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfUlNWX01BU0sgICAgICAgMHhGRkZGRkYzMworCisvKiBJcFNlYyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfSVBTVFhJRFggICAgICAgICAgMHgwODkwMAorI2RlZmluZSBJWEdCRV9JUFNUWFNBTFQgICAgICAgICAweDA4OTA0CisjZGVmaW5lIElYR0JFX0lQU1RYS0VZKF9pKSAgICAgICgweDA4OTA4ICsgKDQgKiAoX2kpKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9JUFNSWElEWCAgICAgICAgICAweDA4RTAwCisjZGVmaW5lIElYR0JFX0lQU1JYSVBBRERSKF9pKSAgICgweDA4RTA0ICsgKDQgKiAoX2kpKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9JUFNSWFNQSSAgICAgICAgICAweDA4RTE0CisjZGVmaW5lIElYR0JFX0lQU1JYSVBJRFggICAgICAgIDB4MDhFMTgKKyNkZWZpbmUgSVhHQkVfSVBTUlhLRVkoX2kpICAgICAgKDB4MDhFMUMgKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYU0FMVCAgICAgICAgIDB4MDhFMkMKKyNkZWZpbmUgSVhHQkVfSVBTUlhNT0QgICAgICAgICAgMHgwOEUzMAorCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9TVE9SRV9GT1JXQVJEX0VOQUJMRSAgICAweDQKKworLyogRENCIHJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9SVFJQQ1MgICAgICAweDAyNDMwCisjZGVmaW5lIElYR0JFX1JUVERDUyAgICAgIDB4MDQ5MDAKKyNkZWZpbmUgSVhHQkVfUlRUUENTICAgICAgMHgwQ0QwMAorI2RlZmluZSBJWEdCRV9SVFJVUDJUQyAgICAweDAzMDIwCisjZGVmaW5lIElYR0JFX1JUVFVQMlRDICAgIDB4MEM4MDAKKyNkZWZpbmUgSVhHQkVfUlRSUFQ0QyhfaSkgKDB4MDIxNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUUlBUNFMoX2kpICgweDAyMTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREVDJDKF9pKSAoMHgwNDkxMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRURFQyUyhfaSkgKDB4MDQ5MzAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVFBUMkMoX2kpICgweDBDRDIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFRQVDJTKF9pKSAoMHgwQ0Q0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRURFFTRUwgICAgMHgwNDkwNAorI2RlZmluZSBJWEdCRV9SVFREVDFDICAgICAweDA0OTA4CisjZGVmaW5lIElYR0JFX1JUVERUMVMgICAgIDB4MDQ5MEMKKyNkZWZpbmUgSVhHQkVfUlRURFRFQ0MgICAgMHgwNDk5MAorI2RlZmluZSBJWEdCRV9SVFREVEVDQ19OT19CQ04gICAweDAwMDAwMTAwCisjZGVmaW5lIElYR0JFX1JUVEJDTlJDICAgIDB4MDQ5ODQKIAogLyogU3RhdHMgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0NSQ0VSUlMgICAweDA0MDAwCkBAIC0yMDQsNiArNDc1LDExIEBACiAjZGVmaW5lIElYR0JFX0xYT05SWEMgICAweDBDRjYwCiAjZGVmaW5lIElYR0JFX0xYT0ZGVFhDICAweDAzRjY4CiAjZGVmaW5lIElYR0JFX0xYT0ZGUlhDICAweDBDRjY4CisjZGVmaW5lIElYR0JFX0xYT05SWENOVCAweDA0MUE0CisjZGVmaW5lIElYR0JFX0xYT0ZGUlhDTlQgMHgwNDFBOAorI2RlZmluZSBJWEdCRV9QWE9OUlhDTlQoX2kpICAgICAoMHgwNDE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUFhPRkZSWENOVChfaSkgICAgKDB4MDQxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1BYT04yT0ZGQ05UKF9pKSAgICgweDAzMjQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9QWE9OVFhDKF9pKSAgICAgICAoMHgwM0YwMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgM0YwMC0zRjFDKi8KICNkZWZpbmUgSVhHQkVfUFhPTlJYQyhfaSkgICAgICAgKDB4MENGMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIENGMDAtQ0YxQyovCiAjZGVmaW5lIElYR0JFX1BYT0ZGVFhDKF9pKSAgICAgICgweDAzRjIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAzRjIwLTNGM0MqLwpAQCAtMjQzLDE0ICs1MTksMjAgQEAKICNkZWZpbmUgSVhHQkVfTVBUQyAgICAgIDB4MDQwRjAKICNkZWZpbmUgSVhHQkVfQlBUQyAgICAgIDB4MDQwRjQKICNkZWZpbmUgSVhHQkVfWEVDICAgICAgIDB4MDQxMjAKKyNkZWZpbmUgSVhHQkVfU1NWUEMgICAgIDB4MDg3ODAKIAotI2RlZmluZSBJWEdCRV9SUVNNUihfaSkgKDB4MDIzMDAgKyAoKF9pKSAqIDQpKSAvKiAxNiBvZiB0aGVzZSAqLwotI2RlZmluZSBJWEdCRV9UUVNNUihfaSkgKCgoX2kpIDw9IDcpID8gKDB4MDczMDAgKyAoKF9pKSAqIDQpKSA6ICgweDA4NjAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX1JRU01SKF9pKSAoMHgwMjMwMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1RRU01SKF9pKSAoKChfaSkgPD0gNykgPyAoMHgwNzMwMCArICgoX2kpICogNCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDA4NjAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX1RRU00oX2kpICAoMHgwODYwMCArICgoX2kpICogNCkpCiAKICNkZWZpbmUgSVhHQkVfUVBSQyhfaSkgKDB4MDEwMzAgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9RUFRDKF9pKSAoMHgwNjAzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1FCUkMoX2kpICgweDAxMDM0ICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUUJUQyhfaSkgKDB4MDYwMzQgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9RUFJEQyhfaSkgKDB4MDE0MzAgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9RQlRDX0woX2kpICgweDA4NzAwICsgKChfaSkgKiAweDgpKSAvKiAxNiBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9RQlRDX0goX2kpICgweDA4NzA0ICsgKChfaSkgKiAweDgpKSAvKiAxNiBvZiB0aGVzZSAqLwogCiAvKiBNYW5hZ2VtZW50ICovCiAjZGVmaW5lIElYR0JFX01BVlRWKF9pKSAoMHgwNTAxMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KQEAgLTI2Myw2ICs1NDUsOSBAQAogI2RlZmluZSBJWEdCRV9NTUFMKF9pKSAgKDB4MDU5MTAgKyAoKF9pKSAqIDgpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCiAjZGVmaW5lIElYR0JFX01NQUgoX2kpICAoMHgwNTkxNCArICgoX2kpICogOCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfRlRGVCAgICAgIDB4MDk0MDAgLyogMHg5NDAwLTB4OTdGQyAqLworI2RlZmluZSBJWEdCRV9NRVRGKF9pKSAgKDB4MDUxOTAgKyAoKF9pKSAqIDQpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX01ERUZfRVhUKF9pKSAoMHgwNTE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfTFNXRlcgICAgIDB4MTUwMTQKIAogLyogQVJDIFN1YnN5c3RlbSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfSElDUiAgICAgIDB4MTVGMDAKQEAgLTI5NSwxNiArNTgwLDY1IEBACiAjZGVmaW5lIElYR0JFX0RDQV9JRCAgICAweDExMDcwCiAjZGVmaW5lIElYR0JFX0RDQV9DVFJMICAweDExMDc0CiAKKy8qIFBDSWUgcmVnaXN0ZXJzIDgyNTk5LXNwZWNpZmljICovCisjZGVmaW5lIElYR0JFX0dDUl9FWFQgICAgICAgICAgIDB4MTEwNTAKKyNkZWZpbmUgSVhHQkVfR1NDTF81XzgyNTk5ICAgICAgMHgxMTAzMAorI2RlZmluZSBJWEdCRV9HU0NMXzZfODI1OTkgICAgICAweDExMDM0CisjZGVmaW5lIElYR0JFX0dTQ0xfN184MjU5OSAgICAgIDB4MTEwMzgKKyNkZWZpbmUgSVhHQkVfR1NDTF84XzgyNTk5ICAgICAgMHgxMTAzQworI2RlZmluZSBJWEdCRV9QSFlBRFJfODI1OTkgICAgICAweDExMDQwCisjZGVmaW5lIElYR0JFX1BIWURBVF84MjU5OSAgICAgIDB4MTEwNDQKKyNkZWZpbmUgSVhHQkVfUEhZQ1RMXzgyNTk5ICAgICAgMHgxMTA0OAorI2RlZmluZSBJWEdCRV9QQkFDTFJfODI1OTkgICAgICAweDExMDY4CisjZGVmaW5lIElYR0JFX0NJQUFfODI1OTkgICAgICAgIDB4MTEwODgKKyNkZWZpbmUgSVhHQkVfQ0lBRF84MjU5OSAgICAgICAgMHgxMTA4QworI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMF84MjU5OSAweDExMDkwCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18xXzgyNTk5IDB4MTEwOTQKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzJfODI1OTkgMHgxMTA5OAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfM184MjU5OSAweDExMDlDCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR180XzgyNTk5IDB4MTEwQTAKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzVfODI1OTkgMHgxMTBBNAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNl84MjU5OSAweDExMEE4CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR183XzgyNTk5IDB4MTEwQzAKKyNkZWZpbmUgSVhHQkVfSU5UUlBUX0NTUl84MjU5OSAgMHgxMTBCMAorI2RlZmluZSBJWEdCRV9JTlRSUFRfTUFTS184MjU5OSAweDExMEI4CisjZGVmaW5lIElYR0JFX0NEUV9NQlJfODI1OTkgICAgIDB4MTEwQjQKKyNkZWZpbmUgSVhHQkVfTUlTQ19SRUdfODI1OTkgICAgMHgxMTBGMAorI2RlZmluZSBJWEdCRV9FQ0NfQ1RSTF8wXzgyNTk5ICAweDExMTAwCisjZGVmaW5lIElYR0JFX0VDQ19DVFJMXzFfODI1OTkgIDB4MTExMDQKKyNkZWZpbmUgSVhHQkVfRUNDX1NUQVRVU184MjU5OSAgMHgxMTBFMAorI2RlZmluZSBJWEdCRV9CQVJfQ1RSTF84MjU5OSAgICAweDExMEY0CisKKy8qIFRpbWUgU3luYyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfVFNZTkNSWENUTCAweDA1MTg4IC8qIFJ4IFRpbWUgU3luYyBDb250cm9sIHJlZ2lzdGVyIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFNZTkNUWENUTCAweDA4QzAwIC8qIFR4IFRpbWUgU3luYyBDb250cm9sIHJlZ2lzdGVyIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfUlhTVE1QTCAgICAweDA1MUU4IC8qIFJ4IHRpbWVzdGFtcCBMb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9SWFNUTVBIICAgIDB4MDUxQTQgLyogUnggdGltZXN0YW1wIEhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9SWFNBVFJMICAgIDB4MDUxQTAgLyogUnggdGltZXN0YW1wIGF0dHJpYnV0ZSBsb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9SWFNBVFJIICAgIDB4MDUxQTggLyogUnggdGltZXN0YW1wIGF0dHJpYnV0ZSBoaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhNVFJMICAgICAweDA1MTIwIC8qIFJYIG1lc3NhZ2UgdHlwZSByZWdpc3RlciBsb3cgLSBSVyAqLworI2RlZmluZSBJWEdCRV9UWFNUTVBMICAgIDB4MDhDMDQgLyogVHggdGltZXN0YW1wIHZhbHVlIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1RYU1RNUEggICAgMHgwOEMwOCAvKiBUeCB0aW1lc3RhbXAgdmFsdWUgSGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1NZU1RJTUwgICAgMHgwOEMwQyAvKiBTeXN0ZW0gdGltZSByZWdpc3RlciBMb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9TWVNUSU1IICAgIDB4MDhDMTAgLyogU3lzdGVtIHRpbWUgcmVnaXN0ZXIgSGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1RJTUlOQ0EgICAgMHgwOEMxNCAvKiBJbmNyZW1lbnQgYXR0cmlidXRlcyByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX1JYVURQICAgICAgMHgwOEMxQyAvKiBUaW1lIFN5bmMgUnggVURQIFBvcnQgLSBSVyAqLworCiAvKiBEaWFnbm9zdGljIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9SRFNUQVRDVEwgICAweDAyQzIwCiAjZGVmaW5lIElYR0JFX1JEU1RBVChfaSkgICgweDAyQzAwICsgKChfaSkgKiA0KSkgLyogMHgwMkMwMC0weDAyQzFDICovCiAjZGVmaW5lIElYR0JFX1JESE1QTiAgICAgIDB4MDJGMDgKICNkZWZpbmUgSVhHQkVfUklDX0RXKF9pKSAgKDB4MDJGMTAgKyAoKF9pKSAqIDQpKQogI2RlZmluZSBJWEdCRV9SRFBST0JFICAgICAweDAyRjIwCisjZGVmaW5lIElYR0JFX1JETUFNICAgICAgIDB4MDJGMzAKKyNkZWZpbmUgSVhHQkVfUkRNQUQgICAgICAgMHgwMkYzNAogI2RlZmluZSBJWEdCRV9URFNUQVRDVEwgICAweDA3QzIwCiAjZGVmaW5lIElYR0JFX1REU1RBVChfaSkgICgweDA3QzAwICsgKChfaSkgKiA0KSkgLyogMHgwN0MwMCAtIDB4MDdDMUMgKi8KICNkZWZpbmUgSVhHQkVfVERITVBOICAgICAgMHgwN0YwOAorI2RlZmluZSBJWEdCRV9UREhNUE4yICAgICAweDA4MkZDCisjZGVmaW5lIElYR0JFX1RYREVTQ0lDICAgIDB4MDgyQ0MKICNkZWZpbmUgSVhHQkVfVElDX0RXKF9pKSAgKDB4MDdGMTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9USUNfRFcyKF9pKSAoMHgwODJCMCArICgoX2kpICogNCkpCiAjZGVmaW5lIElYR0JFX1REUFJPQkUgICAgIDB4MDdGMjAKICNkZWZpbmUgSVhHQkVfVFhCVUZDVFJMICAgMHgwQzYwMAogI2RlZmluZSBJWEdCRV9UWEJVRkRBVEEwICAweDBDNjEwCkBAIC0zMzIsNiArNjY2LDggQEAKICNkZWZpbmUgSVhHQkVfVFhEQVRBUkRQVFIoX2kpICAgKDB4MEM3MjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEM3MjAtQzcyQyovCiAjZGVmaW5lIElYR0JFX1RYREVTQ1JEUFRSKF9pKSAgICgweDBDNzMwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDNzMwLUM3M0MqLwogI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMIDB4MTEwNkMKKyNkZWZpbmUgSVhHQkVfUENJRUVDQ0NUTDAgMHgxMTEwMAorI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMMSAweDExMTA0CiAjZGVmaW5lIElYR0JFX1BCVFhFQ0MgICAweDBDMzAwCiAjZGVmaW5lIElYR0JFX1BCUlhFQ0MgICAweDAzMzAwCiAjZGVmaW5lIElYR0JFX0dIRUNDUiAgICAweDExMEIwCkBAIC0zNTcsMjQgKzY5Myw2MSBAQAogI2RlZmluZSBJWEdCRV9NU1JXRCAgICAgMHgwNDI2MAogI2RlZmluZSBJWEdCRV9NTEFERCAgICAgMHgwNDI2NAogI2RlZmluZSBJWEdCRV9NSEFERCAgICAgMHgwNDI2OAorI2RlZmluZSBJWEdCRV9NQVhGUlMgICAgMHgwNDI2OAogI2RlZmluZSBJWEdCRV9UUkVHICAgICAgMHgwNDI2QwogI2RlZmluZSBJWEdCRV9QQ1NTMSAgICAgMHgwNDI4OAogI2RlZmluZSBJWEdCRV9QQ1NTMiAgICAgMHgwNDI4QwogI2RlZmluZSBJWEdCRV9YUENTUyAgICAgMHgwNDI5MAorI2RlZmluZSBJWEdCRV9NRkxDTiAgICAgMHgwNDI5NAogI2RlZmluZSBJWEdCRV9TRVJERVNDICAgMHgwNDI5OAogI2RlZmluZSBJWEdCRV9NQUNTICAgICAgMHgwNDI5QwogI2RlZmluZSBJWEdCRV9BVVRPQyAgICAgMHgwNDJBMAogI2RlZmluZSBJWEdCRV9MSU5LUyAgICAgMHgwNDJBNAorI2RlZmluZSBJWEdCRV9MSU5LUzIgICAgMHgwNDMyNAogI2RlZmluZSBJWEdCRV9BVVRPQzIgICAgMHgwNDJBOAogI2RlZmluZSBJWEdCRV9BVVRPQzMgICAgMHgwNDJBQwogI2RlZmluZSBJWEdCRV9BTkxQMSAgICAgMHgwNDJCMAogI2RlZmluZSBJWEdCRV9BTkxQMiAgICAgMHgwNDJCNAogI2RlZmluZSBJWEdCRV9BVExBU0NUTCAgMHgwNDgwMAorI2RlZmluZSBJWEdCRV9NTU5HQyAgICAgMHgwNDJEMAorI2RlZmluZSBJWEdCRV9BTkxQTlAxICAgMHgwNDJENAorI2RlZmluZSBJWEdCRV9BTkxQTlAyICAgMHgwNDJEOAorI2RlZmluZSBJWEdCRV9LUlBDU0ZDICAgMHgwNDJFMAorI2RlZmluZSBJWEdCRV9LUlBDU1MgICAgMHgwNDJFNAorI2RlZmluZSBJWEdCRV9GRUNTMSAgICAgMHgwNDJFOAorI2RlZmluZSBJWEdCRV9GRUNTMiAgICAgMHgwNDJFQworI2RlZmluZSBJWEdCRV9TTUFEQVJDVEwgMHgxNEYxMAorI2RlZmluZSBJWEdCRV9NUFZDICAgICAgMHgwNDMxOAorI2RlZmluZSBJWEdCRV9TR01JSUMgICAgMHgwNDMxNAorCisvKiBPbWVyIENPUkVDVEwgKi8KKyNkZWZpbmUgSVhHQkVfQ09SRUNUTCAgICAgICAgICAgMHgwMTRGMDAKKy8qIEJBUkNUUkwgKi8KKyNkZWZpbmUgSVhHQkVfQkFSQ1RSTCAgICAgICAgICAgMHgxMTBGNAorI2RlZmluZSBJWEdCRV9CQVJDVFJMX0ZMU0laRSAgICAweDA3MDAKKyNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9DU1JTSVpFICAgMHgyMDAwCiAKIC8qIFJEUlhDVEwgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfUkRNVFNfMV8yICAgICAweDAwMDAwMDAwIC8qIFJ4IERlc2MgTWluIFRocmVzaG9sZCBTaXplICovCisjZGVmaW5lIElYR0JFX1JEUlhDVExfQ1JDU1RSSVAgICAgICAweDAwMDAwMDAyIC8qIENSQyBTdHJpcCAqLwogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX01WTUVOICAgICAgICAgMHgwMDAwMDAyMAogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0RNQUlET05FICAgICAgMHgwMDAwMDAwOCAvKiBETUEgaW5pdCBjeWNsZSBkb25lICovCisjZGVmaW5lIElYR0JFX1JEUlhDVExfQUdHRElTICAgICAgICAweDAwMDEwMDAwIC8qIEFnZ3JlZ2F0aW9uIGRpc2FibGUgKi8KKworLyogUlFUQyBCaXQgTWFza3MgYW5kIFNoaWZ0cyAqLworI2RlZmluZSBJWEdCRV9SUVRDX1NISUZUX1RDKF9pKSAgICAgKChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDMF9NQVNLICAgICAgICAgKDB4NyA8PCAwKQorI2RlZmluZSBJWEdCRV9SUVRDX1RDMV9NQVNLICAgICAgICAgKDB4NyA8PCA0KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDMl9NQVNLICAgICAgICAgKDB4NyA8PCA4KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDM19NQVNLICAgICAgICAgKDB4NyA8PCAxMikKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzRfTUFTSyAgICAgICAgICgweDcgPDwgMTYpCisjZGVmaW5lIElYR0JFX1JRVENfVEM1X01BU0sgICAgICAgICAoMHg3IDw8IDIwKQorI2RlZmluZSBJWEdCRV9SUVRDX1RDNl9NQVNLICAgICAgICAgKDB4NyA8PCAyNCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzdfTUFTSyAgICAgICAgICgweDcgPDwgMjgpCisKKy8qIFBTUlRZUEUuUlFQTCBCaXQgbWFza3MgYW5kIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfUlFQTF9NQVNLICAgICAweDcKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9SUVBMX1NISUZUICAgIDI5CiAKIC8qIENUUkwgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0NUUkxfR0lPX0RJUyAgICAgIDB4MDAwMDAwMDQgLyogR2xvYmFsIElPIE1hc3RlciBEaXNhYmxlIGJpdCAqLwpAQCAtMzg5LDYgKzc2Miw3IEBACiAjZGVmaW5lIElYR0JFX01IQUREX01GU19TSElGVCAgIDE2CiAKIC8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCisjZGVmaW5lIElYR0JFX0NUUkxfRVhUX1BGUlNURCAgIDB4MDAwMDQwMDAgLyogUGh5c2ljYWwgRnVuY3Rpb24gUmVzZXQgRG9uZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9OU19ESVMgICAweDAwMDEwMDAwIC8qIE5vIFNub29wIGRpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfUk9fRElTICAgMHgwMDAyMDAwMCAvKiBSZWxheGVkIE9yZGVyaW5nIGRpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfRFJWX0xPQUQgMHgxMDAwMDAwMCAvKiBEcml2ZXIgbG9hZGVkIGJpdCBmb3IgRlcgKi8KQEAgLTQwMSw2ICs3NzUsOCBAQAogI2RlZmluZSBJWEdCRV9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjIgMHgwMiAvKiBEQ0EgTW9kZSBDQjIgKi8KIAogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0sgMHgwMDAwMDAxRiAvKiBSeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTS184MjU5OSAgMHhGRjAwMDAwMCAvKiBSeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfU0hJRlRfODI1OTkgMjQgLyogUnggQ1BVSUQgU2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTiAoMSA8PCA1KSAvKiBEQ0EgUnggRGVzYyBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9IRUFEX0RDQV9FTiAoMSA8PCA2KSAvKiBEQ0EgUnggRGVzYyBoZWFkZXIgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfREFUQV9EQ0FfRU4gKDEgPDwgNykgLyogRENBIFJ4IERlc2MgcGF5bG9hZCBlbmFibGUgKi8KQEAgLTQwOSw2ICs3ODUsOCBAQAogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTiAoMSA8PCAxNSkgLyogRENBIFJ4IFNwbGl0IEhlYWRlciBSTyAqLwogCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfTUFTSyAweDAwMDAwMDFGIC8qIFR4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5ICAweEZGMDAwMDAwIC8qIFR4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9TSElGVF84MjU5OSAyNCAvKiBUeCBDUFVJRCBTaGlmdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOICgxIDw8IDUpIC8qIERDQSBUeCBEZXNjIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX1RYX1dCX1JPX0VOICgxIDw8IDExKSAvKiBUeCBEZXNjIHdyaXRlYmFjayBSTyBiaXQgKi8KICNkZWZpbmUgSVhHQkVfRENBX01BWF9RVUVVRVNfODI1OTggICAxNiAvKiBEQ0EgcmVncyBvbmx5IG9uIDE2IHF1ZXVlcyAqLwpAQCAtNDUyLDYgKzgzMCw4IEBACiAjZGVmaW5lIElYR0JFX0FUTEFTX1BETl9UWF8xR19RTF9BTEwgICAgMHhGMAogI2RlZmluZSBJWEdCRV9BVExBU19QRE5fVFhfQU5fUUxfQUxMICAgIDB4RjAKIAorLyogT21lciBiaXQgbWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfQ09SRUNUTF9XUklURV9DTUQgICAgICAgICAweDAwMDEwMDAwCiAKIC8qIERldmljZSBUeXBlIGRlZmluaXRpb25zIGZvciBuZXcgcHJvdG9jb2wgTURJTyBjb21tYW5kcyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfREVWX1RZUEUgICAgICAgICAgICAgICAweDEKQEAgLTQ3OSw4ICs4NTksMTEgQEAKICNkZWZpbmUgSVhHQkVfTURJT19QSFlfU1BFRURfQUJJTElUWSAgIDB4NCAvKiBTcGVlZCBBYmlsaXR5IFJlZyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BIWV9TUEVFRF8xMEcgICAgICAgMHgwMDAxIC8qIDEwRyBjYXBhYmxlICovCiAjZGVmaW5lIElYR0JFX01ESU9fUEhZX1NQRUVEXzFHICAgICAgICAweDAwMTAgLyogMUcgY2FwYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRElPX1BIWV9FWFRfQUJJTElUWSAgICAgICAgMHhCIC8qIEV4dCBBYmlsaXR5IFJlZyAqLworI2RlZmluZSBJWEdCRV9NRElPX1BIWV8xMEdCQVNFVF9BQklMSVRZICAgMHgwMDA0IC8qIDEwR0Jhc2VUIGNhcGFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QSFlfMTAwMEJBU0VUX0FCSUxJVFkgIDB4MDAyMCAvKiAxMDAwQmFzZVQgY2FwYWJsZSAqLwogCi0jZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX0FERFIgICAgIDB4QzMwQSAvKiBQSFlfWFMgU0RBL1NDTCBBZGRyZXNzIFJlZyAqLworI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9BRERSICAgICAweEMzMEEgLyogUEhZX1hTIFNEQS9TQ0wgQWRkciBSZWcgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfREFUQSAgICAgMHhDMzBCIC8qIFBIWV9YUyBTREEvU0NMIERhdGEgUmVnICovCiAjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX1NUQVQgICAgIDB4QzMwQyAvKiBQSFlfWFMgU0RBL1NDTCBTdGF0dXMgUmVnICovCiAKQEAgLTQ5NSw3ICs4NzgsNyBAQAogI2RlZmluZSBJWEdCRV9QSFlfUkVWSVNJT05fTUFTSyAgICAgICAgMHhGRkZGRkZGMAogI2RlZmluZSBJWEdCRV9NQVhfUEhZX0FERFIgICAgICAgICAgICAgMzIKIAotLyogUEhZIElEcyAqLworLyogUEhZIElEcyovCiAjZGVmaW5lIFROMTAxMF9QSFlfSUQgICAgMHgwMEExOTQxMAogI2RlZmluZSBUTlhfRldfUkVWICAgICAgIDB4QgogI2RlZmluZSBRVDIwMjJfUEhZX0lEICAgIDB4MDA0M0E0MDAKQEAgLTUxNSwxNSArODk4LDIyIEBACiAjZGVmaW5lIElYR0JFX0NPTlRST0xfTkwgICAgICAgICAweDAwMEYKICNkZWZpbmUgSVhHQkVfQ09OVFJPTF9FT0xfTkwgICAgIDB4MEZGRgogI2RlZmluZSBJWEdCRV9DT05UUk9MX1NPTF9OTCAgICAgMHgwMDAwCisjZGVmaW5lIElYR0JFX1BIWV9FTkZPUkNFX0lOVEVMX1NGUF9PRkZTRVQgMHgwMDJDCisjZGVmaW5lIElYR0JFX1BIWV9BTExPV19BTllfU0ZQICAgICAgICAgICAgMHgxCiAKIC8qIEdlbmVyYWwgcHVycG9zZSBJbnRlcnJ1cHQgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX1NEUDBfR1BJRU4gICAgICAgICAweDAwMDAwMDAxIC8qIFNEUDAgKi8KICNkZWZpbmUgSVhHQkVfU0RQMV9HUElFTiAgICAgICAgIDB4MDAwMDAwMDIgLyogU0RQMSAqLworI2RlZmluZSBJWEdCRV9TRFAyX0dQSUVOICAgICAgICAgMHgwMDAwMDAwNCAvKiBTRFAyICovCiAjZGVmaW5lIElYR0JFX0dQSUVfTVNJWF9NT0RFICAgICAweDAwMDAwMDEwIC8qIE1TSS1YIG1vZGUgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9PQ0QgICAgICAgICAgIDB4MDAwMDAwMjAgLyogT3RoZXIgQ2xlYXIgRGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9HUElFX0VJTUVOICAgICAgICAgMHgwMDAwMDA0MCAvKiBJbW1lZGlhdGUgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9HUElFX0VJQU1FICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBJWEdCRV9HUElFX1BCQV9TVVBQT1JUICAgMHg4MDAwMDAwMAorI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV9NQVNLICAgMHgwMDAwQzAwMCAvKiBWVCBNb2RlIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfMTYgICAgIDB4MDAwMDQwMDAgLyogMTYgVkZzIDggcXVldWVzIHBlciBWRiAqLworI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV8zMiAgICAgMHgwMDAwODAwMCAvKiAzMiBWRnMgNCBxdWV1ZXMgcGVyIFZGICovCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzY0ICAgICAweDAwMDBDMDAwIC8qIDY0IFZGcyAyIHF1ZXVlcyBwZXIgVkYgKi8KIAogLyogVHJhbnNtaXQgRmxvdyBDb250cm9sIHN0YXR1cyAqLwogI2RlZmluZSBJWEdCRV9URkNTX1RYT0ZGICAgICAgICAgMHgwMDAwMDAwMQpAQCAtNTY0LDYgKzk1NCwyMSBAQAogI2RlZmluZSBJWEdCRV9WTURfQ1RMX1ZNRFFfRU4gICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgSVhHQkVfVk1EX0NUTF9WTURRX0ZJTFRFUiAweDAwMDAwMDAyCiAKKy8qIFZUX0NUTCBiaXRtYXNrcyAqLworI2RlZmluZSBJWEdCRV9WVF9DVExfRElTX0RFRlBMICAweDIwMDAwMDAwIC8qIGRpc2FibGUgZGVmYXVsdCBwb29sICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9SRVBMRU4gICAgIDB4NDAwMDAwMDAgLyogcmVwbGljYXRpb24gZW5hYmxlZCAqLworI2RlZmluZSBJWEdCRV9WVF9DVExfVlRfRU5BQkxFICAweDAwMDAwMDAxICAvKiBFbmFibGUgVlQgTW9kZSAqLworCisvKiBWTU9MUiBiaXRtYXNrcyAqLworI2RlZmluZSBJWEdCRV9WTU9MUl9BVVBFICAgICAgICAweDAxMDAwMDAwIC8qIGFjY2VwdCB1bnRhZ2dlZCBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX1JPTVBFICAgICAgIDB4MDIwMDAwMDAgLyogYWNjZXB0IHBhY2tldHMgaW4gTVRBIHRibCAqLworI2RlZmluZSBJWEdCRV9WTU9MUl9ST1BFICAgICAgICAweDA0MDAwMDAwIC8qIGFjY2VwdCBwYWNrZXRzIGluIFVDIHRibCAqLworI2RlZmluZSBJWEdCRV9WTU9MUl9CQU0gICAgICAgICAweDA4MDAwMDAwIC8qIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cyAqLworI2RlZmluZSBJWEdCRV9WTU9MUl9NUEUgICAgICAgICAweDEwMDAwMDAwIC8qIG11bHRpY2FzdCBwcm9taXNjdW91cyAqLworCisvKiBWRlJFIGJpdG1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfVkZSRV9FTkFCTEVfQUxMICAgMHhGRkZGRkZGRgorCiAvKiBSREhNUE4gYW5kIFRESE1QTiBiaXRtYXNrcyAqLwogI2RlZmluZSBJWEdCRV9SREhNUE5fUkRJQ0FERFIgICAgICAgMHgwMDdGRjgwMAogI2RlZmluZSBJWEdCRV9SREhNUE5fUkRJQ1JEUkVRICAgICAgMHgwMDgwMDAwMApAQCAtNTcyLDEzICs5NzcsMzkgQEAKICNkZWZpbmUgSVhHQkVfVERITVBOX1RESUNSRFJFUSAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgSVhHQkVfVERITVBOX1RESUNBRERSX1NISUZUIDExCiAKKyNkZWZpbmUgSVhHQkVfUkRNQU1fTUVNX1NFTF9TSElGVCAgIDEzCisjZGVmaW5lIElYR0JFX1JETUFNX0RXT1JEX1NISUZUICAgICA5CisjZGVmaW5lIElYR0JFX1JETUFNX0RFU0NfQ09NUF9GSUZPICAxCisjZGVmaW5lIElYR0JFX1JETUFNX0RGQ19DTURfRklGTyAgICAyCisjZGVmaW5lIElYR0JFX1JETUFNX1RDTl9TVEFUVVNfUkFNICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1dCX0NPTExfRklGTyAgICA1CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19DTlRfUkFNICAgICA2CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlQgICA4CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9SQU0gICAweEEKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01fRklGT19SQU5HRSAgICAgMTM1CisjZGVmaW5lIElYR0JFX1JETUFNX0RFU0NfQ09NX0ZJRk9fQ09VTlQgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREZDX0NNRF9GSUZPX1JBTkdFICAgICAgNDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREZDX0NNRF9GSUZPX0NPVU5UICAgICAgNworI2RlZmluZSBJWEdCRV9SRE1BTV9UQ05fU1RBVFVTX1JBTV9SQU5HRSAgICAyNTYKKyNkZWZpbmUgSVhHQkVfUkRNQU1fVENOX1NUQVRVU19SQU1fQ09VTlQgICAgOQorI2RlZmluZSBJWEdCRV9SRE1BTV9XQl9DT0xMX0ZJRk9fUkFOR0UgICAgICA4CisjZGVmaW5lIElYR0JFX1JETUFNX1dCX0NPTExfRklGT19DT1VOVCAgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX0NOVF9SQU1fUkFOR0UgICAgICAgNjQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX0NOVF9SQU1fQ09VTlQgICAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfQ05UX1JBTkdFICAgICAzMgorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfQ05UX0NPVU5UICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9SQU1fUkFOR0UgICAgIDEyOAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfUkFNX0NPVU5UICAgICA4CisKKyNkZWZpbmUgSVhHQkVfVFhERVNDSUNfUkVBRFkgICAgICAgIDB4ODAwMDAwMDAKKwogLyogUmVjZWl2ZSBDaGVja3N1bSBDb250cm9sICovCiAjZGVmaW5lIElYR0JFX1JYQ1NVTV9JUFBDU0UgICAgIDB4MDAwMDEwMDAgICAvKiBJUCBwYXlsb2FkIGNoZWNrc3VtIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9SWENTVU1fUENTRCAgICAgICAweDAwMDAyMDAwICAgLyogcGFja2V0IGNoZWNrc3VtIGRpc2FibGVkICovCiAKIC8qIEZDUlRMIEJpdCBNYXNrcyAqLwotI2RlZmluZSBJWEdCRV9GQ1JUTF9YT05FICAgICAgICAweDgwMDAwMDAwICAvKiBiaXQgMzEsIFhPTiBlbmFibGUgKi8KLSNkZWZpbmUgSVhHQkVfRkNSVEhfRkNFTiAgICAgICAgMHg4MDAwMDAwMCAgLyogUnggRmxvdyBjb250cm9sIGVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9GQ1JUTF9YT05FICAgICAgICAweDgwMDAwMDAwICAvKiBYT04gZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0ZDUlRIX0ZDRU4gICAgICAgIDB4ODAwMDAwMDAgIC8qIFBhY2tldCBidWZmZXIgZmMgZW5hYmxlICovCiAKIC8qIFBBUCBiaXQgbWFza3MqLwogI2RlZmluZSBJWEdCRV9QQVBfVFhQQVVTRUNOVF9NQVNLICAgMHgwMDAwRkZGRiAvKiBQYXVzZSBjb3VudGVyIG1hc2sgKi8KQEAgLTU4OCwxOSArMTAxOSwyOSBAQAogLyogUmVjZWl2ZSBBcmJpdHJhdGlvbiBDb250cm9sOiAwIFJvdW5kIFJvYmluLCAxIERGUCAqLwogI2RlZmluZSBJWEdCRV9STUNTX1JBQyAgICAgICAgICAweDAwMDAwMDA0CiAjZGVmaW5lIElYR0JFX1JNQ1NfREZQICAgICAgICAgIElYR0JFX1JNQ1NfUkFDIC8qIERlZmljaXQgRml4ZWQgUHJpb3JpdHkgZW5hICovCi0jZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV84MDJfM1ggIDB4MDAwMDAwMDggLyogVHggUHJpb3JpdHkgZmxvdyBjb250cm9sIGVuYSAqLwotI2RlZmluZSBJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFkgMHgwMDAwMDAxMCAvKiBUeCBQcmlvcml0eSBmbG93IGNvbnRyb2wgZW5hICovCisjZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV84MDJfM1ggICAgICAgICAweDAwMDAwMDA4IC8qIFR4IFByaW9yaXR5IEZDIGVuYSAqLworI2RlZmluZSBJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFkgICAgICAgMHgwMDAwMDAxMCAvKiBUeCBQcmlvcml0eSBGQyBlbmEgKi8KICNkZWZpbmUgSVhHQkVfUk1DU19BUkJESVMgICAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdHJhdGlvbiBkaXNhYmxlIGJpdCAqLwogCisvKiBGQ0NGRyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1ggICAgICAgICAweDAwMDAwMDA4IC8qIFR4IGxpbmsgRkMgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFkgICAgICAgMHgwMDAwMDAxMCAvKiBUeCBwcmlvcml0eSBGQyBlbmFibGUgKi8KIAogLyogSW50ZXJydXB0IHJlZ2lzdGVyIGJpdG1hc2tzICovCiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBSZWFkICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfUlRYX1FVRVVFICAgIDB4MDAwMEZGRkYgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNSX0ZMT1dfRElSICAgICAweDAwMDEwMDAwIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1JfUlhfTUlTUyAgICAgIDB4MDAwMjAwMDAgLyogUGFja2V0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJQ1JfUENJICAgICAgICAgIDB4MDAwNDAwMDAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNSX01BSUxCT1ggICAgICAweDAwMDgwMDAwIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfTFNDICAgICAgICAgIDB4MDAxMDAwMDAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCisjZGVmaW5lIElYR0JFX0VJQ1JfTElOS1NFQyAgICAgIDB4MDAyMDAwMDAgLyogUE4gVGhyZXNob2xkICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfTU5HICAgICAgICAgIDB4MDA0MDAwMDAgLyogTWFuYWdlYWJpbGl0eSBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9HUElfU0RQMCAgICAgMHgwMTAwMDAwMCAvKiBHZW4gUHVycG9zZSBJbnRlcnJ1cHQgb24gU0RQMCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0dQSV9TRFAxICAgICAweDAyMDAwMDAwIC8qIEdlbiBQdXJwb3NlIEludGVycnVwdCBvbiBTRFAxICovCisjZGVmaW5lIElYR0JFX0VJQ1JfR1BJX1NEUDIgICAgIDB4MDQwMDAwMDAgLyogR2VuIFB1cnBvc2UgSW50ZXJydXB0IG9uIFNEUDIgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9FQ0MgICAgICAgICAgMHgxMDAwMDAwMCAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9QQlVSICAgICAgICAgMHgxMDAwMDAwMCAvKiBQYWNrZXQgQnVmZmVyIEhhbmRsZXIgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9ESEVSICAgICAgICAgMHgyMDAwMDAwMCAvKiBEZXNjcmlwdG9yIEhhbmRsZXIgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9UQ1BfVElNRVIgICAgMHg0MDAwMDAwMCAvKiBUQ1AgVGltZXIgKi8KQEAgLTYwOCwxMCArMTA0OSwxNiBAQAogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgQ2F1c2UgU2V0ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19GTE9XX0RJUiAgICAgSVhHQkVfRUlDUl9GTE9XX0RJUiAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19SWF9NSVNTICAgICAgSVhHQkVfRUlDUl9SWF9NSVNTICAgLyogUGt0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJQ1NfUENJICAgICAgICAgIElYR0JFX0VJQ1JfUENJICAgICAgIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19MU0MgICAgICAgICAgSVhHQkVfRUlDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfTU5HICAgICAgICAgIElYR0JFX0VJQ1JfTU5HICAgICAgIC8qIE1ORyBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19HUElfU0RQMCAgICAgSVhHQkVfRUlDUl9HUElfU0RQMCAgLyogU0RQMCBHZW4gUHVycG9zZSBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19HUElfU0RQMSAgICAgSVhHQkVfRUlDUl9HUElfU0RQMSAgLyogU0RQMSBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19HUElfU0RQMiAgICAgSVhHQkVfRUlDUl9HUElfU0RQMiAgLyogU0RQMiBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19FQ0MgICAgICAgICAgSVhHQkVfRUlDUl9FQ0MgICAgICAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfUEJVUiAgICAgICAgIElYR0JFX0VJQ1JfUEJVUiAgICAgIC8qIFBrdCBCdWYgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19ESEVSICAgICAgICAgSVhHQkVfRUlDUl9ESEVSICAgICAgLyogRGVzYyBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfVENQX1RJTUVSICAgIElYR0JFX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwpAQCAtNjE5LDEwICsxMDY2LDE2IEBACiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIFNldCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJTVNfRkxPV19ESVIgICAgIElYR0JFX0VJQ1JfRkxPV19ESVIgIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTVNfUlhfTUlTUyAgICAgIElYR0JFX0VJQ1JfUlhfTUlTUyAgIC8qIFBhY2tldCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSU1TX1BDSSAgICAgICAgICBJWEdCRV9FSUNSX1BDSSAgICAgICAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTVNfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTVNfTFNDICAgICAgICAgIElYR0JFX0VJQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBJWEdCRV9FSU1TX01ORyAgICAgICAgICBJWEdCRV9FSUNSX01ORyAgICAgICAvKiBNTkcgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJTVNfR1BJX1NEUDAgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDAgIC8qIFNEUDAgR2VuIFB1cnBvc2UgSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTVNfR1BJX1NEUDEgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDEgIC8qIFNEUDEgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTVNfR1BJX1NEUDIgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDIgIC8qIFNEUDIgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTVNfRUNDICAgICAgICAgIElYR0JFX0VJQ1JfRUNDICAgICAgIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1TX1BCVVIgICAgICAgICBJWEdCRV9FSUNSX1BCVVIgICAgICAvKiBQa3QgQnVmIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJTVNfREhFUiAgICAgICAgIElYR0JFX0VJQ1JfREhFUiAgICAgIC8qIERlc2NyIEhhbmRsZXIgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02MzAsMTAgKzEwODMsMTYgQEAKIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgQ2xlYXIgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSU1DX0ZMT1dfRElSICAgICBJWEdCRV9FSUNSX0ZMT1dfRElSICAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSU1DX1JYX01JU1MgICAgICBJWEdCRV9FSUNSX1JYX01JU1MgICAvKiBQYWNrZXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19QQ0kgICAgICAgICAgSVhHQkVfRUlDUl9QQ0kgICAgICAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSU1DX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLwogI2RlZmluZSBJWEdCRV9FSU1DX0xTQyAgICAgICAgICBJWEdCRV9FSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19NTkcgICAgICAgICAgSVhHQkVfRUlDUl9NTkcgICAgICAgLyogTU5HIEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSU1DX0dQSV9TRFAwICAgICBJWEdCRV9FSUNSX0dQSV9TRFAwICAvKiBTRFAwIEdlbiBQdXJwb3NlIEludCAqLwogI2RlZmluZSBJWEdCRV9FSU1DX0dQSV9TRFAxICAgICBJWEdCRV9FSUNSX0dQSV9TRFAxICAvKiBTRFAxIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSU1DX0dQSV9TRFAyICAgICBJWEdCRV9FSUNSX0dQSV9TRFAyICAvKiBTRFAyIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSU1DX0VDQyAgICAgICAgICBJWEdCRV9FSUNSX0VDQyAgICAgICAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19QQlVSICAgICAgICAgSVhHQkVfRUlDUl9QQlVSICAgICAgLyogUGt0IEJ1ZiBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX0RIRVIgICAgICAgICBJWEdCRV9FSUNSX0RIRVIgICAgICAvKiBEZXNjIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJTUNfVENQX1RJTUVSICAgIElYR0JFX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwpAQCAtNjU2LDYgKzExMTUsMzMgQEAKICNkZWZpbmUgSVhHQkVfSU1JUkVYVF9DVFJMX1NZTiAgICAweDAwMDIwMDAwICAvKiBDaGVjayBTWU4gYml0IGluIGhlYWRlciAqLwogI2RlZmluZSBJWEdCRV9JTUlSRVhUX0NUUkxfRklOICAgIDB4MDAwNDAwMDAgIC8qIENoZWNrIEZJTiBiaXQgaW4gaGVhZGVyICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFRfQ1RSTF9CUCAgICAgMHgwMDA4MDAwMCAgLyogQnlwYXNzIGNoZWNrIG9mIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBJWEdCRV9JTUlSX1NJWkVfQlBfODI1OTkgIDB4MDAwMDEwMDAgLyogUGFja2V0IHNpemUgYnlwYXNzICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9VUkdfODI1OTkgMHgwMDAwMjAwMCAvKiBDaGVjayBVUkcgYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfQUNLXzgyNTk5IDB4MDAwMDQwMDAgLyogQ2hlY2sgQUNLIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1BTSF84MjU5OSAweDAwMDA4MDAwIC8qIENoZWNrIFBTSCBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9SU1RfODI1OTkgMHgwMDAxMDAwMCAvKiBDaGVjayBSU1QgYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfU1lOXzgyNTk5IDB4MDAwMjAwMDAgLyogQ2hlY2sgU1lOIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX0ZJTl84MjU5OSAweDAwMDQwMDAwIC8qIENoZWNrIEZJTiBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9CUF84MjU5OSAgMHgwMDA4MDAwMCAvKiBCeXBhc3MgY2hlY2sgb2YgY29udHJvbCBiaXRzICovCisjZGVmaW5lIElYR0JFX0lNSVJfTExJX0VOXzgyNTk5ICAgMHgwMDEwMDAwMCAvKiBFbmFibGVzIGxvdyBsYXRlbmN5IEludCAqLworI2RlZmluZSBJWEdCRV9JTUlSX1JYX1FVRVVFX01BU0tfODI1OTkgIDB4MDAwMDAwN0YgLyogUnggUXVldWUgTWFzayAqLworI2RlZmluZSBJWEdCRV9JTUlSX1JYX1FVRVVFX1NISUZUXzgyNTk5IDIxIC8qIFJ4IFF1ZXVlIFNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0lNSVJWUF9QUklPUklUWV9NQVNLICAgICAgMHgwMDAwMDAwNyAvKiBWTEFOIHByaW9yaXR5IG1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUlZQX1BSSU9SSVRZX0VOICAgICAgICAweDAwMDAwMDA4IC8qIFZMQU4gcHJpb3JpdHkgZW5hYmxlICovCisKKyNkZWZpbmUgSVhHQkVfTUFYX0ZUUUZfRklMVEVSUyAgICAgICAgICAxMjgKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9NQVNLICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfVENQICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX1VEUCAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9TQ1RQICAgICAgICAyCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJJT1JJVFlfTUFTSyAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJWEdCRV9GVFFGX1BSSU9SSVRZX1NISUZUICAgICAgIDIKKyNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX01BU0sgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9TSElGVCAgICAgICAgICAgOAorI2RlZmluZSBJWEdCRV9GVFFGXzVUVVBMRV9NQVNLX01BU0sgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgSVhHQkVfRlRRRl81VFVQTEVfTUFTS19TSElGVCAgICAyNQorI2RlZmluZSBJWEdCRV9GVFFGX1BPT0xfTUFTS19FTiAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfRlRRRl9RVUVVRV9FTkFCTEUgICAgICAgICAweDgwMDAwMDAwCiAKIC8qIEludGVycnVwdCBjbGVhciBtYXNrICovCiAjZGVmaW5lIElYR0JFX0lSUV9DTEVBUl9NQVNLICAgIDB4RkZGRkZGRkYKQEAgLTY3NSw2ICsxMTYxLDMxIEBACiAKICNkZWZpbmUgSVhHQkVfSVZBUl9BTExPQ19WQUwgICAgMHg4MCAvKiBJbnRlcnJ1cHQgQWxsb2NhdGlvbiB2YWxpZCAqLwogCisvKiBFVFlQRSBRdWV1ZSBGaWx0ZXIvU2VsZWN0IEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9NQVhfRVRRRl9GSUxURVJTICA4CisjZGVmaW5lIElYR0JFX0VUUUZfQkNOICAgICAgICAgIDB4MTAwMDAwMDAgLyogYml0IDI4ICovCisjZGVmaW5lIElYR0JFX0VUUUZfMTU4OCAgICAgICAgIDB4NDAwMDAwMDAgLyogYml0IDMwICovCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0VOICAgIDB4ODAwMDAwMDAgLyogYml0IDMxICovCisjZGVmaW5lIElYR0JFX0VUUUZfUE9PTF9FTkFCTEUgICAoMSA8PCAyNikgLyogYml0IDI2ICovCisKKyNkZWZpbmUgSVhHQkVfRVRRU19SWF9RVUVVRSAgICAgMHgwMDdGMDAwMCAvKiBiaXRzIDIyOjE2ICovCisjZGVmaW5lIElYR0JFX0VUUVNfUlhfUVVFVUVfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSVhHQkVfRVRRU19MTEkgICAgICAgICAgMHgyMDAwMDAwMCAvKiBiaXQgMjkgKi8KKyNkZWZpbmUgSVhHQkVfRVRRU19RVUVVRV9FTiAgICAgMHg4MDAwMDAwMCAvKiBiaXQgMzEgKi8KKworLyoKKyAqIEVUUUYgZmlsdGVyIGxpc3Q6IG9uZSBzdGF0aWMgZmlsdGVyIHBlciBmaWx0ZXIgY29uc3VtZXIuIFRoaXMgaXMKKyAqICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIGZpbHRlciBjb2xsaXNpb25zIGxhdGVyLiBBZGQgbmV3IGZpbHRlcnMKKyAqICAgICAgICAgICAgICAgICAgIGhlcmUhIQorICoKKyAqIEN1cnJlbnQgZmlsdGVyczoKKyAqICAgIEVBUE9MIDgwMi4xeCAoMHg4ODhlKTogRmlsdGVyIDAKKyAqICAgIEJDTiAoMHg4OTA0KTogICAgICAgICAgRmlsdGVyIDEKKyAqICAgIDE1ODggKDB4ODhmNyk6ICAgICAgICAgRmlsdGVyIDMKKyAqLworI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9FQVBPTCAgICAgICAgICAwCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0JDTiAgICAgICAgICAgIDEKKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfMTU4OCAgICAgICAgICAgMwogLyogVkxBTiBDb250cm9sIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX1ZFVCAgICAgICAweDAwMDBGRkZGICAvKiBiaXRzIDAtMTUgKi8KICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9DRkkgICAgICAgMHgxMDAwMDAwMCAgLyogYml0IDI4ICovCkBAIC02ODIsMjEgKzExOTMsMjggQEAKICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9WRkUgICAgICAgMHg0MDAwMDAwMCAgLyogYml0IDMwICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVk1FICAgICAgIDB4ODAwMDAwMDAgIC8qIGJpdCAzMSAqLwogCisvKiBWTEFOIHBvb2wgZmlsdGVyaW5nIG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZMVkZfVklFTiAgICAgICAgIDB4ODAwMDAwMDAgIC8qIGZpbHRlciBpcyB2YWxpZCAqLworI2RlZmluZSBJWEdCRV9WTFZGX0VOVFJJRVMgICAgICA2NAogCiAjZGVmaW5lIElYR0JFX0VUSEVSTkVUX0lFRUVfVkxBTl9UWVBFIDB4ODEwMCAgLyogODAyLjFxIHByb3RvY29sICovCiAKIC8qIFNUQVRVUyBCaXQgTWFza3MgKi8KLSNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRCAgICAgMHgwMDAwMDAwQyAvKiBMQU4gSUQgKi8KLSNkZWZpbmUgSVhHQkVfU1RBVFVTX0dJTyAgICAgICAgMHgwMDA4MDAwMCAvKiBHSU8gTWFzdGVyIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRCAgICAgICAgIDB4MDAwMDAwMEMgLyogTEFOIElEICovCisjZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSURfU0hJRlQgICAyICAgICAgICAgIC8qIExBTiBJRCBTaGlmdCovCisjZGVmaW5lIElYR0JFX1NUQVRVU19HSU8gICAgICAgICAgICAweDAwMDgwMDAwIC8qIEdJTyBNYXN0ZXIgRW5hYmxlIFN0YXR1cyAqLwogCiAjZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSURfMCAgIDB4MDAwMDAwMDAgLyogTEFOIElEIDAgKi8KICNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF8xICAgMHgwMDAwMDAwNCAvKiBMQU4gSUQgMSAqLwogCiAvKiBFU0RQIEJpdCBNYXNrcyAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDQgMHgwMDAwMDAwMSAvKiBTRFA0IERhdGEgVmFsdWUgKi8KLSNkZWZpbmUgSVhHQkVfRVNEUF9TRFA1IDB4MDAwMDAwMDIgLyogU0RQNSBEYXRhIFZhbHVlICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQMCAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQMSAweDAwMDAwMDAyCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNCAweDAwMDAwMDEwIC8qIFNEUDQgRGF0YSBWYWx1ZSAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDUgMHgwMDAwMDAyMCAvKiBTRFA1IERhdGEgVmFsdWUgKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA2IDB4MDAwMDAwNDAgLyogU0RQNiBEYXRhIFZhbHVlICovCiAjZGVmaW5lIElYR0JFX0VTRFBfU0RQNF9ESVIgICAgIDB4MDAwMDAwMDQgLyogU0RQNCBJTyBkaXJlY3Rpb24gKi8KLSNkZWZpbmUgSVhHQkVfRVNEUF9TRFA1X0RJUiAgICAgMHgwMDAwMDAwOCAvKiBTRFA1IElPIGRpcmVjdGlvbiAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDVfRElSICAgICAweDAwMDAyMDAwIC8qIFNEUDUgSU8gZGlyZWN0aW9uICovCiAKIC8qIExFRENUTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfTEVEX0lWUlRfQkFTRSAgICAgIDB4MDAwMDAwNDAKQEAgLTcxOSw2ICsxMjM3LDcgQEAKICNkZWZpbmUgSVhHQkVfTEVEX09GRiAgICAgICAgICAgMHhGCiAKIC8qIEFVVE9DIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9BVVRPQ19LWDRfS1hfU1VQUF9NQVNLIDB4QzAwMDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfS1g0X1NVUFAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19LWF9TVVBQICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX1BBVVNFICAgICAgIDB4MzAwMDAwMDAKQEAgLTcyNyw5ICsxMjQ2LDE3IEBACiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JYX0xPT1NFIDB4MDEwMDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUlhfRFJJRlQgMHgwMDgwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SWF9BTElHTiAweDAwN0MwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DX0ZFQ0EgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfRkVDUiAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQ19LUl9TVVBQICAgICAweDAwMDEwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JFU1RBUlQgIDB4MDAwMDEwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfRkxVICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfU0hJRlQgICAxMworI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTCAgICAgICgweDMgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSICAgICAgICgweDQgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfU0dNSUlfMUdfMTAwTSAgICgweDUgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOICgweDYgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJICgweDcgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfTUFTSyAgICAgICAgICAgICgweDcgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTiAgICgweDAgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU4gICgweDEgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQpAQCAtNzM4LDE1ICsxMjY1LDI0IEBACiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU4gICAgKDB4NiA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRSAgICAgKDB4NyA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKIAotI2RlZmluZSBJWEdCRV9BVVRPQ18xR19QTUFfUE1EICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRCAgICAgICAgMHgwMDAwMDE4MAotI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCA3Ci0jZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQgOQorI2RlZmluZSBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX01BU0sgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUICAgOQorI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9NQVNLICAgMHgwMDAwMDE4MAorI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCAgNwogI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfWEFVSSAgICgweDAgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19LWDQgICAgKDB4MSA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX0NYNCAgICAoMHgyIDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xR19CWCAgICAgICgweDAgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfS1ggICAgICAoMHgxIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1NGSSAgICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ18xR19LWF9CWCAgICgweDEgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKKworI2RlZmluZSBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSyAgMHhGRkZGMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX01BU0sgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCAxNgorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX0tSICAoMHgwIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfWEZJICgweDEgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19TRkkgKDB4MiA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQogCiAvKiBMSU5LUyBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCAgMHg4MDAwMDAwMApAQCAtNzU2LDYgKzEyOTIsNyBAQAogI2RlZmluZSBJWEdCRV9MSU5LU19SWF9NT0RFICAgICAweDA2MDAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX1RYX01PREUgICAgIDB4MDE4MDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfWEdYU19FTiAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBJWEdCRV9MSU5LU19TR01JSV9FTiAgICAweDAyMDAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX1BDU18xR19FTiAgIDB4MDAyMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfMUdfQU5fRU4gICAgMHgwMDEwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19LWF9BTl9JRExFICAweDAwMDgwMDAwCkBAIC03NjUsOSArMTMwMiwzNSBAQAogI2RlZmluZSBJWEdCRV9MSU5LU19UTF9GQVVMVCAgICAweDAwMDAxMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX1NJR05BTCAgICAgIDB4MDAwMDBGMDAKIAorI2RlZmluZSBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBJWEdCRV9MSU5LU19TUEVFRF8xMEdfODI1OTkgMHgzMDAwMDAwMAorI2RlZmluZSBJWEdCRV9MSU5LU19TUEVFRF8xR184MjU5OSAgMHgyMDAwMDAwMAorI2RlZmluZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTkgMHgxMDAwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LX1VQX1RJTUUgICAgICA5MCAvKiA5LjAgU2Vjb25kcyAqLwogI2RlZmluZSBJWEdCRV9BVVRPX05FR19USU1FICAgICA0NSAvKiA0LjUgU2Vjb25kcyAqLwogCisjZGVmaW5lIEZJQkVSX0xJTktfVVBfTElNSVQgICAgIDUwCisKKy8qIFBDUzFHTFNUQSBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgICAgICAgICAxCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9TWU5LX09LICAgICAgICAgMHgxMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fQ09NUExFVEUgICAgIDB4MTAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX1BBR0VfUlggICAgICAweDIwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9USU1FRF9PVVQgICAgMHg0MDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fUkVNT1RFX0ZBVUxUIDB4ODAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX0VSUk9SX1JXUyAgICAweDEwMDAwMAorCisjZGVmaW5lIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSAgICAgICAgMHg4MAorI2RlZmluZSBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UgICAgICAgIDB4MTAwCisKKy8qIFBDUzFHTENUTCBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0FOXzFHX1RJTUVPVVRfRU4gIDB4MDAwNDAwMDAgLyogUENTIDFHIGF1dG9uZWcgdG8gZW4gKi8KKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0ZMVl9MSU5LX1VQICAgICAxCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9GT1JDRV9MSU5LICAgICAgMHgyMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfTE9XX0xJTktfTEFUQ0ggIDB4NDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0FOX0VOQUJMRSAgICAgICAweDEwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9BTl9SRVNUQVJUICAgICAgMHgyMDAwMAorCiAvKiBTVyBTZW1hcGhvcmUgUmVnaXN0ZXIgYml0bWFza3MgKi8KICNkZWZpbmUgSVhHQkVfU1dTTV9TTUJJIDB4MDAwMDAwMDEgLyogRHJpdmVyIFNlbWFwaG9yZSBiaXQgKi8KICNkZWZpbmUgSVhHQkVfU1dTTV9TV0VTTUJJIDB4MDAwMDAwMDIgLyogRlcgU2VtYXBob3JlIGJpdCAqLwpAQCAtODE5LDYgKzEzODIsMTEgQEAKICNkZWZpbmUgSVhHQkVfRldfUFRSICAgICAgICAgICAgMHgwRgogI2RlZmluZSBJWEdCRV9QQkFOVU0wX1BUUiAgICAgICAweDE1CiAjZGVmaW5lIElYR0JFX1BCQU5VTTFfUFRSICAgICAgIDB4MTYKKyNkZWZpbmUgSVhHQkVfUENJRV9NU0lYXzgyNTk5X0NBUFMgIDB4NzIKKyNkZWZpbmUgSVhHQkVfUENJRV9NU0lYXzgyNTk4X0NBUFMgIDB4NjIKKworLyogTVNJLVggY2FwYWJpbGl0eSBmaWVsZHMgbWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLICAgICAweDdGRgogCiAvKiBMZWdhY3kgRUVQUk9NIHdvcmQgb2Zmc2V0cyAqLwogI2RlZmluZSBJWEdCRV9JU0NTSV9CT09UX0NBUFMgICAgICAgICAgIDB4MDAzMwpAQCAtODY3LDYgKzE0MzUsOCBAQAogI2RlZmluZSBJWEdCRV9QQ0lfTElOS19TUEVFRCAgICAgIDB4RgogI2RlZmluZSBJWEdCRV9QQ0lfTElOS19TUEVFRF8yNTAwIDB4MQogI2RlZmluZSBJWEdCRV9QQ0lfTElOS19TUEVFRF81MDAwIDB4MgorI2RlZmluZSBJWEdCRV9QQ0lfSEVBREVSX1RZUEVfUkVHSVNURVIgIDB4MEUKKyNkZWZpbmUgSVhHQkVfUENJX0hFQURFUl9UWVBFX01VTFRJRlVOQyAweDgwCiAKIC8qIE51bWJlciBvZiAxMDAgbWljcm9zZWNvbmRzIHdlIHdhaXQgZm9yIFBDSSBFeHByZXNzIG1hc3RlciBkaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX1BDSV9NQVNURVJfRElTQUJMRV9USU1FT1VUIDgwMApAQCAtOTE5LDYgKzE0ODksNyBAQAogI2RlZmluZSBJWEdCRV9SWENUUkxfUlhFTiAgICAgICAweDAwMDAwMDAxICAvKiBFbmFibGUgUmVjZWl2ZXIgKi8KICNkZWZpbmUgSVhHQkVfUlhDVFJMX0RNQllQUyAgICAgMHgwMDAwMDAwMiAgLyogRGVzY3JpcHRvciBNb25pdG9yIEJ5cGFzcyAqLwogI2RlZmluZSBJWEdCRV9SWERDVExfRU5BQkxFICAgICAweDAyMDAwMDAwICAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX1ZNRSAgICAgICAgMHg0MDAwMDAwMCAgLyogVkxBTiBtb2RlIGVuYWJsZSAqLwogCiAjZGVmaW5lIElYR0JFX0ZDVFJMX1NCUCAweDAwMDAwMDAyIC8qIFN0b3JlIEJhZCBQYWNrZXQgKi8KICNkZWZpbmUgSVhHQkVfRkNUUkxfTVBFIDB4MDAwMDAxMDAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzIEVuYSovCkBAIC05MjksOSArMTUwMCwyMyBAQAogLyogUmVjZWl2ZSBQcmlvcml0eSBGbG93IENvbnRyb2wgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0ZDVFJMX1JQRkNFIDB4MDAwMDQwMDAKICNkZWZpbmUgSVhHQkVfRkNUUkxfUkZDRSAweDAwMDA4MDAwIC8qIFJlY2VpdmUgRmxvdyBDb250cm9sIEVuYSAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9QTUNGICAgICAgICAweDAwMDAwMDAxIC8qIFBhc3MgTUFDIENvbnRyb2wgRnJhbWVzICovCisjZGVmaW5lIElYR0JFX01GTENOX0RQRiAgICAgICAgIDB4MDAwMDAwMDIgLyogRGlzY2FyZCBQYXVzZSBGcmFtZSAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9SUEZDRSAgICAgICAweDAwMDAwMDA0IC8qIFJlY2VpdmUgUHJpb3JpdHkgRkMgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01GTENOX1JGQ0UgICAgICAgIDB4MDAwMDAwMDggLyogUmVjZWl2ZSBGQyBFbmFibGUgKi8KIAogLyogTXVsdGlwbGUgUmVjZWl2ZSBRdWV1ZSBDb250cm9sICovCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTRU4gICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qIFJTUyBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19NUlFFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RiAvKiBCaXRzIDM6MCAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUOFRDRU4gICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIDggVEMgbm8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfUlQ0VENFTiAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgLyogNCBUQyBubyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVFJTUzhUQ0VOICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiA4IFRDIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUUlNTNFRDRU4gICAgICAgICAgICAweDAwMDAwMDA1IC8qIDQgVEMgdy8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfVk1EUUVOICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggLyogVk1EcTIgNjQgcG9vbHMgbm8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfVk1EUVJTUzMyRU4gICAgICAgICAgIDB4MDAwMDAwMEEgLyogVk1EcTIgMzIgcG9vbHMgdy8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfVk1EUVJTUzY0RU4gICAgICAgICAgIDB4MDAwMDAwMEIgLyogVk1EcTIgNjQgcG9vbHMgdy8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfVk1EUVJUOFRDRU4gICAgICAgICAgIDB4MDAwMDAwMEMgLyogVk1EcTIvUlQgMTYgcG9vbCA4IFRDICovCisjZGVmaW5lIElYR0JFX01SUUNfVk1EUVJUNFRDRU4gICAgICAgICAgIDB4MDAwMDAwMEQgLyogVk1EcTIvUlQgMzIgcG9vbCA0IFRDICovCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX01BU0sgICAgICAgIDB4RkZGRjAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AgICAgMHgwMDAxMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0ICAgICAgICAweDAwMDIwMDAwCkBAIC05NDIsNiArMTUyNywxMiBAQAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUCAgICAweDAwNDAwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWF9VRFAgMHgwMTAwMDAwMAorI2RlZmluZSBJWEdCRV9NUlFDX0wzTDRUWFNXRU4gICAgICAgICAgICAweDAwMDA4MDAwCisKKy8qIFF1ZXVlIERyb3AgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1FERV9FTkFCTEUgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfUURFX0lEWF9NQVNLICAgMHgwMDAwN0YwMAorI2RlZmluZSBJWEdCRV9RREVfSURYX1NISUZUICAgICAgICAgICA4CiAKICNkZWZpbmUgSVhHQkVfVFhEX1BPUFRTX0lYU00gMHgwMSAgICAgICAvKiBJbnNlcnQgSVAgY2hlY2tzdW0gKi8KICNkZWZpbmUgSVhHQkVfVFhEX1BPUFRTX1RYU00gMHgwMiAgICAgICAvKiBJbnNlcnQgVENQL1VEUCBjaGVja3N1bSAqLwpAQCAtOTUzLDEwICsxNTQ0LDI1IEBACiAjZGVmaW5lIElYR0JFX1RYRF9DTURfVkxFICAgIDB4NDAwMDAwMDAgLyogQWRkIFZMQU4gdGFnICovCiAjZGVmaW5lIElYR0JFX1RYRF9TVEFUX0REICAgIDB4MDAwMDAwMDEgLyogRGVzY3JpcHRvciBEb25lICovCiAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX1NUQVRVU19TRUNQICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfSU5WQUxJRF9QUk9UT0NPTCAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9JTlZBTElEX0xFTkdUSCAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0FVVEhfRkFJTEVEICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfQklUX01BU0sgICAgICAgICAgICAgICAweDE4MDAwMDAwCisvKiBNdWx0aXBsZSBUcmFuc21pdCBRdWV1ZSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIElYR0JFX01UUUNfUlRfRU5BICAgICAgIDB4MSAvKiBEQ0IgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01UUUNfVlRfRU5BICAgICAgIDB4MiAvKiBWTURRMiBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ182NFFfMVBCICAgICAgMHgwIC8qIDY0IHF1ZXVlcyAxIHBhY2sgYnVmZmVyICovCisjZGVmaW5lIElYR0JFX01UUUNfNjRWRiAgICAgICAgIDB4OCAvKiAyIFRYIFF1ZXVlcyBwZXIgcG9vbCB3LzY0VkYncyAqLworI2RlZmluZSBJWEdCRV9NVFFDXzhUQ184VFEgICAgICAweEMgLyogOCBUQyBpZiBSVF9FTkEgb3IgOCBUUSBpZiBWVF9FTkEgKi8KKwogLyogUmVjZWl2ZSBEZXNjcmlwdG9yIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9ERCAgICAgICAweDAxICAgIC8qIERlc2NyaXB0b3IgRG9uZSAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9FT1AgICAgICAweDAyICAgIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRkxNICAgICAgMHgwNCAgICAvKiBGRGlyIE1hdGNoICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1ZQICAgICAgIDB4MDggICAgLyogSUVFRSBWTEFOIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfTUFTSyAgIDB4MDAwRkZGRjAgLyogTmV4dCBEZXNjcmlwdG9yIEluZGV4ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9ORVhUUF9TSElGVCAgMHgwMDAwMDAwNAogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9VRFBDUyAgICAweDEwICAgIC8qIFVEUCB4c3VtIGNhbGN1bGF0ZWQgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTDRDUyAgICAgMHgyMCAgICAvKiBMNCB4c3VtIGNhbGN1bGF0ZWQgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfSVBDUyAgICAgMHg0MCAgICAvKiBJUCB4c3VtIGNhbGN1bGF0ZWQgKi8KQEAgLTk2NSw2ICsxNTcxLDEwIEBACiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1ZFWFQgICAgIDB4MjAwICAgLyogMXN0IFZMQU4gZm91bmQgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQViAgICAgMHg0MDAgICAvKiBWYWxpZCBVRFAgY2hlY2tzdW0gKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRFlOSU5UICAgMHg4MDAgICAvKiBQa3QgY2F1c2VkIElOVCB2aWEgRFlOSU5UICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0xMSU5UICAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBMb3cgTGF0ZW5jeSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVFMgICAgICAgMHgxMDAwMCAvKiBUaW1lIFN0YW1wICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1NFQ1AgICAgIDB4MjAwMDAgLyogU2VjdXJpdHkgUHJvY2Vzc2luZyAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MQiAgICAgICAweDQwMDAwIC8qIExvb3BiYWNrIFN0YXR1cyAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9BQ0sgICAgICAweDgwMDAgIC8qIEFDSyBQYWNrZXQgaW5kaWNhdGlvbiAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0NFICAgICAgICAweDAxICAgIC8qIENSQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0xFICAgICAgICAweDAyICAgIC8qIExlbmd0aCBFcnJvciAqLwpAQCAtOTczLDYgKzE1ODMsOCBAQAogI2RlZmluZSBJWEdCRV9SWERfRVJSX1VTRSAgICAgICAweDIwICAgIC8qIFVuZGVyc2l6ZSBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX1RDUEUgICAgICAweDQwICAgIC8qIFRDUC9VRFAgQ2hlY2tzdW0gRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9JUEUgICAgICAgMHg4MCAgICAvKiBJUCBDaGVja3N1bSBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX01BU0sgICAgICAgICAgIDB4ZmZmMDAwMDAgLyogUkRFU0MuRVJST1JTIG1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9TSElGVCAgICAgICAgICAyMCAgICAgICAgIC8qIFJERVNDLkVSUk9SUyBzaGlmdCAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0hCTyAgICAweDAwODAwMDAwIC8qSGVhZGVyIEJ1ZmZlciBPdmVyZmxvdyAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0NFICAgICAweDAxMDAwMDAwIC8qIENSQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0xFICAgICAweDAyMDAwMDAwIC8qIExlbmd0aCBFcnJvciAqLwpAQCAtOTg3LDkgKzE1OTksMjMgQEAKICNkZWZpbmUgSVhHQkVfUlhEX0NGSV9NQVNLICAgICAgMHgxMDAwICAvKiBDRkkgaXMgYml0IDEyICovCiAjZGVmaW5lIElYR0JFX1JYRF9DRklfU0hJRlQgICAgIDEyCiAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfREQgICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9ERCAgLyogRG9uZSAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9FT1AgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0VPUCAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZMTSAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRkxNIC8qIEZEaXIgTWF0Y2ggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfVlAgICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9WUCAgLyogSUVFRSBWTEFOIFBrdCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9NQVNLICAgICAgICAgIDB4MDAwZmZmZmYgLyogU3RhdC9ORVhUUDogYml0IDAtMTkgKi8KKworLyogUFNSVFlQRSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9UQ1BIRFIgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX1VEUEhEUiAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNEhEUiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9JUFY2SERSICAgMHgwMDAwMDIwMAogCiAvKiBTUlJDVEwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVCAgICAgMTAgICAgIC8qIHNvIG1hbnkgS0JzICovCisjZGVmaW5lIElYR0JFX1NSUkNUTF9SRE1UU19TSElGVCAgICAgICAgMjIKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX01BU0sgICAgICAgICAweDAxQzAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9EUk9QX0VOICAgICAgICAgICAgMHgxMDAwMDAwMAogI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVQS1RfTUFTSyAgICAgIDB4MDAwMDAwN0YKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSX01BU0sgICAgICAweDAwMDAzRjAwCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9MRUdBQ1kgICAgMHgwMDAwMDAwMApAQCAtMTAwNCw2ICsxNjMwLDcgQEAKIAogI2RlZmluZSBJWEdCRV9SWERBRFZfUlNTVFlQRV9NQVNLICAgICAgIDB4MDAwMDAwMEYKICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTSyAgICAgICAweDAwMDBGRkYwCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0tfRVggICAgMHgwMDAxRkZGMAogI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0sgICAgIDB4MDAwMDdGRTAKICNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9TSElGVCAgICA1CiAjZGVmaW5lIElYR0JFX1JYREFEVl9TUExJVEhFQURFUl9FTiAgICAgMHgwMDAwMTAwMApAQCAtMTAzMSw2ICsxNjU4LDIwIEBACiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX1VEUCAgICAgICAgMHgwMDAwMDIwMCAvKiBVRFAgaGRyIHByZXNlbnQgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfU0NUUCAgICAgICAweDAwMDAwNDAwIC8qIFNDVFAgaGRyIHByZXNlbnQgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTkZTICAgICAgICAweDAwMDAwODAwIC8qIE5GUyBoZHIgcHJlc2VudCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFNFQ19FU1AgIDB4MDAwMDEwMDAgLyogSVBTZWMgRVNQICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0lQU0VDX0FIICAgMHgwMDAwMjAwMCAvKiBJUFNlYyBBSCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9MSU5LU0VDICAgIDB4MDAwMDQwMDAgLyogTGlua1NlYyBFbmNhcCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9FVFFGICAgICAgIDB4MDAwMDgwMDAgLyogUEtUVFlQRSBpcyBFVFFGIGluZGV4ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0VUUUZfTUFTSyAgMHgwMDAwMDA3MCAvKiBFVFFGIGhhcyA4IGluZGljZXMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfRVRRRl9TSElGVCA0ICAgICAgICAgIC8qIFJpZ2h0LXNoaWZ0IDQgYml0cyAqLworCisvKiBTZWN1cml0eSBQcm9jZXNzaW5nIGJpdCBJbmRpY2F0aW9uICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfU1RBVFVTX1NFQ1AgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfTk9fU0FfTUFUQ0ggICAweDA4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfUkVQTEFZX0VSUk9SICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfQklUX01BU0sgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9MTktTRUNfRVJST1JfQkFEX1NJRyAgICAgICAweDE4MDAwMDAwCisKIC8qIE1hc2tzIHRvIGRldGVybWluZSBpZiBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkIGR1ZSB0byBmcmFtZSBlcnJvcnMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUlhEX0VSUl9DRSB8IFwKQEAgLTEwNjAsNiArMTcwMSwxNCBAQAogI2RlZmluZSBJWEdCRV9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUICAweDAwMEQgLyogUHJpb3JpdHkgaW4gdXBwZXIgMyBvZiAxNiAqLwogI2RlZmluZSBJWEdCRV9UWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUICBJWEdCRV9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUCiAKKy8qIExpdHRsZSBFbmRpYW4gZGVmaW5lcyAqLworI2lmbmRlZiBfX2xlMzIKKyNkZWZpbmUgX19sZTMyICB1MzIKKyNlbmRpZgorI2lmbmRlZiBfX2xlNjQKKyNkZWZpbmUgX19sZTY0ICB1NjQKKworI2VuZGlmCiAKIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBMZWdhY3kgKi8KIHN0cnVjdCBpeGdiZV9sZWdhY3lfdHhfZGVzYyB7CkBAIC0xMTQ3LDYgKzE3OTYsOSBAQAogCiAvKiBBZHYgVHJhbnNtaXQgRGVzY3JpcHRvciBDb25maWcgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUQUxFTl9NQVNLICAgICAgMHgwMDAwRkZGRiAvKiBEYXRhIGJ1ZiBsZW5ndGgoYnl0ZXMpICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9NQUNfTElOS1NFQyAgICAgIDB4MDAwNDAwMDAgLyogSW5zZXJ0IExpbmtTZWMgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0lQU0VDX1NBX0lOREVYX01BU0sgICAweDAwMDAwM0ZGIC8qIElQU2VjIFNBIGluZGV4ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9JUFNFQ19FU1BfTEVOX01BU0sgICAgMHgwMDAwMDFGRiAvKiBJUFNlYyBFU1AgbGVuZ3RoICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVFlQX01BU0sgIDB4MDBGMDAwMDAgLyogRFRZUCBtYXNrICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQgIDB4MDAyMDAwMDAgLyogQWR2YW5jZWQgQ29udGV4dCBEZXNjICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVFlQX0RBVEEgIDB4MDAzMDAwMDAgLyogQWR2YW5jZWQgRGF0YSBEZXNjcmlwdG9yICovCkBAIC0xMTgxLDYgKzE4MzMsOSBAQAogI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUCAgIDB4MDAwMDA4MDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFRDUCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1NDVFAgIDB4MDAwMDEwMDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFNDVFAgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX01LUlJFUSAgICAweDAwMDAyMDAwIC8qUmVxIHJlcXVpcmVzIE1hcmtlcnMgYW5kIENSQyovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19JUFNFQyAgICAgIDB4MDAwMDA0MDAgLyogSVBTZWMgb2ZmbG9hZCByZXF1ZXN0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9JUFNFQ19UWVBFX0VTUCAweDAwMDAyMDAwIC8qIElQU2VjIFR5cGUgRVNQICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9JUFNFQ19FTkNSWVBUX0VOIDB4MDAwMDQwMDAvKiBFU1AgRW5jcnlwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0w0TEVOX1NISUZUICAgICA4ICAvKiBBZHYgY3R4dCBMNExFTiBzaGlmdCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfTVNTX1NISUZUICAgICAgIDE2ICAvKiBBZHYgY3R4dCBNU1Mgc2hpZnQgKi8KIApAQCAtMTE5NCw2ICsxODQ5LDEyIEBACiAjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMIDB4MDA4MAogI2RlZmluZSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk4X0FVVE9ORUcgKElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfODI1OTlfQVVUT05FRyAoSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorCisjZGVmaW5lIElYR0JFX1BDSUVfREVWX0NUUkxfMiAweEM4CisjZGVmaW5lIFBDSUVfQ09NUExfVE9fVkFMVUUgMHgwNQogCiAvKiBQaHlzaWNhbCBsYXllciB0eXBlICovCiB0eXBlZGVmIHUzMiBpeGdiZV9waHlzaWNhbF9sYXllcjsKQEAgLTEyMTAsNyArMTg3MSw2IEBACiAjZGVmaW5lIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0tYICAweDAyMDAKICNkZWZpbmUgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfQlggIDB4MDQwMAogCi0KIGVudW0gaXhnYmVfZWVwcm9tX3R5cGUgewogCWl4Z2JlX2VlcHJvbV91bmluaXRpYWxpemVkID0gMCwKIAlpeGdiZV9lZXByb21fc3BpLApAQCAtMTIyMCwxMiArMTg4MCwxNCBAQAogZW51bSBpeGdiZV9tYWNfdHlwZSB7CiAJaXhnYmVfbWFjX3Vua25vd24gPSAwLAogCWl4Z2JlX21hY184MjU5OEVCLAorCWl4Z2JlX21hY184MjU5OUVCLAogCWl4Z2JlX251bV9tYWNzCiB9OwogCiBlbnVtIGl4Z2JlX3BoeV90eXBlIHsKIAlpeGdiZV9waHlfdW5rbm93biA9IDAsCiAJaXhnYmVfcGh5X3RuLAorCWl4Z2JlX3BoeV9jdV91bmtub3duLAogCWl4Z2JlX3BoeV9xdCwKIAlpeGdiZV9waHlfeGF1aSwKIAlpeGdiZV9waHlfbmwsCkBAIC0xMjM0LDIyICsxODk2LDMxIEBACiAJaXhnYmVfcGh5X3NmcF9hdmFnbywKIAlpeGdiZV9waHlfc2ZwX2Z0bCwKIAlpeGdiZV9waHlfc2ZwX3Vua25vd24sCisJaXhnYmVfcGh5X3NmcF9pbnRlbCwKIAlpeGdiZV9waHlfZ2VuZXJpYwogfTsKIAogLyoKICAqIFNGUCsgbW9kdWxlIHR5cGUgSURzOgogICoKLSAqIElECU1vZHVsZSBUeXBlCisgKiBJRCAgIE1vZHVsZSBUeXBlCiAgKiA9PT09PT09PT09PT09Ci0gKiAwCVNGUF9EQV9DVQotICogMQlTRlBfU1IKLSAqIDIJU0ZQX0xSCisgKiAwICAgIFNGUF9EQV9DVQorICogMSAgICBTRlBfU1IKKyAqIDIgICAgU0ZQX0xSCisgKiAzICAgIFNGUF9EQV9DVV9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisgKiA0ICAgIFNGUF9EQV9DVV9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCisgKiA1ICAgIFNGUF9TUi9MUl9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisgKiA2ICAgIFNGUF9TUi9MUl9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCiAgKi8KIGVudW0gaXhnYmVfc2ZwX3R5cGUgewogCWl4Z2JlX3NmcF90eXBlX2RhX2N1ID0gMCwKIAlpeGdiZV9zZnBfdHlwZV9zciA9IDEsCiAJaXhnYmVfc2ZwX3R5cGVfbHIgPSAyLAorCWl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwID0gMywKKwlpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMSA9IDQsCisJaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMCA9IDUsCisJaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMSA9IDYsCiAJaXhnYmVfc2ZwX3R5cGVfbm90X3ByZXNlbnQgPSAweEZGRkUsCiAJaXhnYmVfc2ZwX3R5cGVfdW5rbm93biA9IDB4RkZGRgogfTsKQEAgLTEyNjMsMTQgKzE5MzQsNTEgQEAKIH07CiAKIC8qIEZsb3cgQ29udHJvbCBTZXR0aW5ncyAqLwotZW51bSBpeGdiZV9mY190eXBlIHsKK2VudW0gaXhnYmVfZmNfbW9kZSB7CiAJaXhnYmVfZmNfbm9uZSA9IDAsCiAJaXhnYmVfZmNfcnhfcGF1c2UsCiAJaXhnYmVfZmNfdHhfcGF1c2UsCiAJaXhnYmVfZmNfZnVsbCwKKyNpZmRlZiBDT05GSUdfRENCCisJaXhnYmVfZmNfcGZjLAorI2VuZGlmCiAJaXhnYmVfZmNfZGVmYXVsdAogfTsKIAorLyogUENJIGJ1cyB0eXBlcyAqLworZW51bSBpeGdiZV9idXNfdHlwZSB7CisJaXhnYmVfYnVzX3R5cGVfdW5rbm93biA9IDAsCisJaXhnYmVfYnVzX3R5cGVfcGNpLAorCWl4Z2JlX2J1c190eXBlX3BjaXgsCisJaXhnYmVfYnVzX3R5cGVfcGNpX2V4cHJlc3MsCisJaXhnYmVfYnVzX3R5cGVfcmVzZXJ2ZWQKK307CisKKy8qIFBDSSBidXMgc3BlZWRzICovCitlbnVtIGl4Z2JlX2J1c19zcGVlZCB7CisJaXhnYmVfYnVzX3NwZWVkX3Vua25vd24gPSAwLAorCWl4Z2JlX2J1c19zcGVlZF8zMywKKwlpeGdiZV9idXNfc3BlZWRfNjYsCisJaXhnYmVfYnVzX3NwZWVkXzEwMCwKKwlpeGdiZV9idXNfc3BlZWRfMTIwLAorCWl4Z2JlX2J1c19zcGVlZF8xMzMsCisJaXhnYmVfYnVzX3NwZWVkXzI1MDAsCisJaXhnYmVfYnVzX3NwZWVkXzUwMDAsCisJaXhnYmVfYnVzX3NwZWVkX3Jlc2VydmVkCit9OworCisvKiBQQ0kgYnVzIHdpZHRocyAqLworZW51bSBpeGdiZV9idXNfd2lkdGggeworCWl4Z2JlX2J1c193aWR0aF91bmtub3duID0gMCwKKwlpeGdiZV9idXNfd2lkdGhfcGNpZV94MSwKKwlpeGdiZV9idXNfd2lkdGhfcGNpZV94MiwKKwlpeGdiZV9idXNfd2lkdGhfcGNpZV94NCA9IDQsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDggPSA4LAorCWl4Z2JlX2J1c193aWR0aF8zMiwKKwlpeGdiZV9idXNfd2lkdGhfNjQsCisJaXhnYmVfYnVzX3dpZHRoX3Jlc2VydmVkCit9OworCiBzdHJ1Y3QgaXhnYmVfYWRkcl9maWx0ZXJfaW5mbyB7CiAJdTMyIG51bV9tY19hZGRyczsKIAl1MzIgcmFyX3VzZWRfY291bnQ7CkBAIC0xMjgwLDYgKzE5ODgsMTYgQEAKIAlib29sIHVzZXJfc2V0X3Byb21pc2M7CiB9OwogCisvKiBCdXMgcGFyYW1ldGVycyAqLworc3RydWN0IGl4Z2JlX2J1c19pbmZvIHsKKwllbnVtIGl4Z2JlX2J1c19zcGVlZCBzcGVlZDsKKwllbnVtIGl4Z2JlX2J1c193aWR0aCB3aWR0aDsKKwllbnVtIGl4Z2JlX2J1c190eXBlIHR5cGU7CisKKwl1MTYgZnVuYzsKKwl1MTYgbGFuX2lkOworfTsKKwogLyogRmxvdyBjb250cm9sIHBhcmFtZXRlcnMgKi8KIHN0cnVjdCBpeGdiZV9mY19pbmZvIHsKIAl1MzIgaGlnaF93YXRlcjsgLyogRmxvdyBDb250cm9sIEhpZ2gtd2F0ZXIgKi8KQEAgLTEyODcsOCArMjAwNSw4IEBACiAJdTE2IHBhdXNlX3RpbWU7IC8qIEZsb3cgQ29udHJvbCBQYXVzZSB0aW1lciAqLwogCWJvb2wgc2VuZF94b247IC8qIEZsb3cgY29udHJvbCBzZW5kIFhPTiAqLwogCWJvb2wgc3RyaWN0X2llZWU7IC8qIFN0cmljdCBJRUVFIG1vZGUgKi8KLQllbnVtIGl4Z2JlX2ZjX3R5cGUgdHlwZTsgLyogVHlwZSBvZiBmbG93IGNvbnRyb2wgKi8KLQllbnVtIGl4Z2JlX2ZjX3R5cGUgb3JpZ2luYWxfdHlwZTsKKwllbnVtIGl4Z2JlX2ZjX21vZGUgY3VycmVudF9tb2RlOyAvKiBGQyBtb2RlIGluIGVmZmVjdCAqLworCWVudW0gaXhnYmVfZmNfbW9kZSByZXF1ZXN0ZWRfbW9kZTsgLyogRkMgbW9kZSByZXF1ZXN0ZWQgYnkgY2FsbGVyICovCiB9OwogCiAvKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbGxlY3RlZCBieSB0aGUgTUFDICovCkBAIC0xMzQ4LDYgKzIwNjYsMTQgQEAKIAl1NjQgcXB0Y1sxNl07CiAJdTY0IHFicmNbMTZdOwogCXU2NCBxYnRjWzE2XTsKKwl1NjQgcXByZGNbMTZdOworCXU2NCBweG9uMm9mZmNbOF07CisJdTY0IGZkaXJ1c3RhdF9hZGQ7CisJdTY0IGZkaXJ1c3RhdF9yZW1vdmU7CisJdTY0IGZkaXJmc3RhdF9mYWRkOworCXU2NCBmZGlyZnN0YXRfZnJlbW92ZTsKKwl1NjQgZmRpcm1hdGNoOworCXU2NCBmZGlybWlzczsKIH07CiAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KQEAgLTEzNzIsMTIgKzIwOTgsMTUgQEAKIAlzMzIgKCpzdGFydF9odykoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmNsZWFyX2h3X2NudHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJZW51bSBpeGdiZV9tZWRpYV90eXBlICgqZ2V0X21lZGlhX3R5cGUpKHN0cnVjdCBpeGdiZV9odyAqKTsKLQlzMzIgKCpnZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJdTMyICgqZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcikoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmdldF9tYWNfYWRkcikoc3RydWN0IGl4Z2JlX2h3ICosIHU4ICopOwogCXMzMiAoKnN0b3BfYWRhcHRlcikoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmdldF9idXNfaW5mbykoc3RydWN0IGl4Z2JlX2h3ICopOworCXZvaWQgKCpzZXRfbGFuX2lkKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqcmVhZF9hbmFsb2dfcmVnOCkoc3RydWN0IGl4Z2JlX2h3KiwgdTMyLCB1OCopOwogCXMzMiAoKndyaXRlX2FuYWxvZ19yZWc4KShzdHJ1Y3QgaXhnYmVfaHcqLCB1MzIsIHU4KTsKKwlzMzIgKCpzZXR1cF9zZnApKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCplbmFibGVfcnhfZG1hKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyKTsKIAogCS8qIExpbmsgKi8KIAlzMzIgKCpzZXR1cF9saW5rKShzdHJ1Y3QgaXhnYmVfaHcgKik7CkBAIC0xNDMzLDcgKzIxNjIsNyBAQAogc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvIHsKIAlzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgIG9wczsKIAllbnVtIGl4Z2JlX2VlcHJvbV90eXBlICAgICAgICAgIHR5cGU7Ci0JdTMyCQkJCXNlbWFwaG9yZV9kZWxheTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZV9kZWxheTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfc2l6ZTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYml0czsKIH07CkBAIC0xNDQ5LDExICsyMTc4LDEyIEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcmFyX2VudHJpZXM7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfdHhfcXVldWVzOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3J4X3F1ZXVlczsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfYXR0YWNoX3R5cGU7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX21vZGVfc2VsZWN0OwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19zZXR0aW5nc19sb2FkZWQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbXNpeF92ZWN0b3JzOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19hdXRvYzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfYXV0b2MyOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZDsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWc7Ci0JYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX2ZhaWxlZDsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfc3VjY2VlZGVkOwogfTsKIAogc3RydWN0IGl4Z2JlX3BoeV9pbmZvIHsKQEAgLTE0NjcsNiArMjE5Nyw3IEBACiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldF9kaXNhYmxlOwogCWl4Z2JlX2F1dG9uZWdfYWR2ZXJ0aXNlZCAgICAgICAgYXV0b25lZ19hZHZlcnRpc2VkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcjsKIH07CiAKIHN0cnVjdCBpeGdiZV9odyB7CkBAIC0xNDc3LDYgKzIyMDgsNyBAQAogCXN0cnVjdCBpeGdiZV9mY19pbmZvCQlmYzsKIAlzdHJ1Y3QgaXhnYmVfcGh5X2luZm8JCXBoeTsKIAlzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8JZWVwcm9tOworCXN0cnVjdCBpeGdiZV9idXNfaW5mbwkJYnVzOwogCXUxNgkJCQlkZXZpY2VfaWQ7CiAJdTE2CQkJCXZlbmRvcl9pZDsKIAl1MTYJCQkJc3Vic3lzdGVtX2RldmljZV9pZDsKQEAgLTE1MTUsNiArMjI0Nyw3IEBACiAjZGVmaW5lIElYR0JFX0VSUl9JMkMgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTgKICNkZWZpbmUgSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgIC0xOQogI2RlZmluZSBJWEdCRV9FUlJfU0ZQX05PVF9QUkVTRU5UICAgICAgICAgICAgICAgLTIwCisjZGVmaW5lIElYR0JFX0VSUl9TRlBfTk9fSU5JVF9TRVFfUFJFU0VOVCAgICAgICAtMjEKICNkZWZpbmUgSVhHQkVfTk9UX0lNUExFTUVOVEVEICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAogI2VuZGlmIC8qIF9JWEdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwppbmRleCAwMTQ3NDU3Li5kM2JmMmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAoaXhwMjAwMF9yZWdfcmVhZChJWFAyMDAwX0lSUV9USERfUkFXX1NUQVRVU19BXzApICYgMHgwMGZmKTsKIAotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9TRVRfQV8wLCAweDAwZmYpOwogCiAJcmV0dXJuIHJ4OwpAQCAtMjA0LDcgKzIwNCw3IEBACiAKIAkJaXhwMjAwMF9yZWdfd3JiKElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfQ0xFQVJfQV8wLCAweDAwZmYpOwogCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmaXAtPm5hcGkpKSkgewotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmaXAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZpcC0+bmFwaSk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJpeHAyMDAwOiBpcnEgd2hpbGUgcG9sbGluZyEhXG4iKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwppbmRleCAzMzRmZjllLi4xNDI0OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYworKysgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwpAQCAtMTMxLDcgKzEzMSw4IEBACiAJaWYgKHNvbmljX2RlYnVnICAmJiAgdmVyc2lvbl9wcmludGVkKysgPT0gMCkKIAkJcHJpbnRrKHZlcnNpb24pOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNvbmljIGV0aGVybmV0IGZvdW5kIGF0IDB4JTA4bHgsICIsIGxwLT5kZXZpY2UtPmJ1c19pZCwgZGV2LT5iYXNlX2FkZHIpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBTb25pYyBldGhlcm5ldCBmb3VuZCBhdCAweCUwOGx4LCAiLAorCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgZGV2LT5iYXNlX2FkZHIpOwogCiAJLyoKIAkgKiBQdXQgdGhlIHNvbmljIGludG8gc29mdHdhcmUgcmVzZXQsIHRoZW4KQEAgLTE1Niw3ICsxNTcsOCBAQAogCWlmICgobHAtPmRlc2NyaXB0b3JzID0gZG1hX2FsbG9jX2NvaGVyZW50KGxwLT5kZXZpY2UsCiAJCQkJU0laRU9GX1NPTklDX0RFU0MgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSwKIAkJCQkmbHAtPmRlc2NyaXB0b3JzX2xhZGRyLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsIGxwLT5kZXZpY2UtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzLlxuIiwKKwkJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2ptZS5jCmluZGV4IGE2ZTFhMzUuLjg2MGRjZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5jCkBAIC00MjksMTAgKzQyOSw5IEBACiAKIAkJam1lLT5waHlsaW5rID0gcGh5bGluazsKIAotCQlnaGMgPSBqbWUtPnJlZ19naGMgJiB+KEdIQ19TUEVFRF8xME0gfAotCQkJCQlHSENfU1BFRURfMTAwTSB8Ci0JCQkJCUdIQ19TUEVFRF8xMDAwTSB8Ci0JCQkJCUdIQ19EUFgpOworCQlnaGMgPSBqbWUtPnJlZ19naGMgJiB+KEdIQ19TUEVFRCB8IEdIQ19EUFggfAorCQkJCUdIQ19UT19DTEtfUENJRSB8IEdIQ19UWE1BQ19DTEtfUENJRSB8CisJCQkJR0hDX1RPX0NMS19HUEhZIHwgR0hDX1RYTUFDX0NMS19HUEhZKTsKIAkJc3dpdGNoIChwaHlsaW5rICYgUEhZX0xJTktfU1BFRURfTUFTSykgewogCQljYXNlIFBIWV9MSU5LX1NQRUVEXzEwTToKIAkJCWdoYyB8PSBHSENfU1BFRURfMTBNIHwKQEAgLTE4MzQsNyArMTgzMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWptZV9maWxsX2ZpcnN0X3R4X2Rlc2Moc3RydWN0IGptZV9hZGFwdGVyICpqbWUsIHN0cnVjdCBza19idWZmICpza2IsIGludCBpZHgpCitqbWVfZmlsbF90eF9kZXNjKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWR4KQogewogCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gam1lLT50eHJpbmc7CiAJc3RydWN0IHR4ZGVzYyAqdHhkZXNjOwpAQCAtMTg2NCw2ICsxODYzLDcgQEAKIAlpZiAoam1lX3R4X3Rzbyhza2IsICZ0eGRlc2MtPmRlc2MxLm1zcywgJmZsYWdzKSkKIAkJam1lX3R4X2NzdW0oam1lLCBza2IsICZmbGFncyk7CiAJam1lX3R4X3ZsYW4oc2tiLCAmdHhkZXNjLT5kZXNjMS52bGFuLCAmZmxhZ3MpOworCWptZV9tYXBfdHhfc2tiKGptZSwgc2tiLCBpZHgpOwogCXR4ZGVzYy0+ZGVzYzEuZmxhZ3MgPSBmbGFnczsKIAkvKgogCSAqIFNldCB0eCBidWZmZXIgaW5mbyBhZnRlciB0ZWxsaW5nIE5JQyB0byBzZW5kCkBAIC0xOTMzLDggKzE5MzMsNyBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0Jam1lX21hcF90eF9za2Ioam1lLCBza2IsIGlkeCk7Ci0Jam1lX2ZpbGxfZmlyc3RfdHhfZGVzYyhqbWUsIHNrYiwgaWR4KTsKKwlqbWVfZmlsbF90eF9kZXNjKGptZSwgc2tiLCBpZHgpOwogCiAJandyaXRlMzIoam1lLCBKTUVfVFhDUywgam1lLT5yZWdfdHhjcyB8CiAJCQkJVFhDU19TRUxFQ1RfUVVFVUUwIHwKQEAgLTI1OTEsNiArMjU5MCwxNiBAQAogc3RhdGljIGludAogam1lX3BjaV9kbWE2NChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKKwlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTAgJiYKKwkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQorCQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCQlyZXR1cm4gMTsKKworCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCAmJgorCSAgICAhcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNDBCSVRfTUFTSykpCisJCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV80MEJJVF9NQVNLKSkKKwkJCXJldHVybiAxOworCiAJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkKIAkJaWYgKCFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQogCQkJcmV0dXJuIDA7CkBAIC0yODU3LDcgKzI4NjYsMTEgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfc2hhZG93OwogCX0KIAotCW1zZ19wcm9iZShqbWUsICJKTUMyNTAgZ2lnYWJpdCVzIHZlcjoleCByZXY6JXggbWFjYWRkcjolcE1cbiIsCisJbXNnX3Byb2JlKGptZSwgIiVzJXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKKwkJKGptZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTApID8KKwkJCSJKTUMyNTAgR2lnYWJpdCBFdGhlcm5ldCIgOgorCQkJKGptZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNjApID8KKwkJCQkiSk1DMjYwIEZhc3QgRXRoZXJuZXQiIDogIlVua25vd24iLAogCQkoam1lLT5mcGdhdmVyICE9IDApID8gIiAoRlBHQSkiIDogIiIsCiAJCShqbWUtPmZwZ2F2ZXIgIT0gMCkgPyBqbWUtPmZwZ2F2ZXIgOiBqbWUtPmNoaXByZXYsCiAJCWptZS0+cmV2LCBuZXRkZXYtPmRldl9hZGRyKTsKQEAgLTMwMDMsNyArMzAxNiw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogam1lX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkpNaWNyb24gSk1DMjUwIGdpZ2FiaXQgZXRoZXJuZXQgIgorCXByaW50ayhLRVJOX0lORk8gUEZYICJKTWljcm9uIEpNQzJYWCBldGhlcm5ldCAiCiAJICAgICAgICJkcml2ZXIgdmVyc2lvbiAlc1xuIiwgRFJWX1ZFUlNJT04pOwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZqbWVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ptZS5oIGIvZHJpdmVycy9uZXQvam1lLmgKaW5kZXggNTE1NDQxMS4uMDk5NmEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvam1lLmgKKysrIGIvZHJpdmVycy9uZXQvam1lLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgX19KTUVfSF9JTkNMVURFRF9fCiAKICNkZWZpbmUgRFJWX05BTUUJImptZSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC4zIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjQiCiAjZGVmaW5lIFBGWAkJRFJWX05BTUUgIjogIgogCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTAJMHgwMjUwCkBAIC0zOTgsMTUgKzM5OCwxNSBAQAogI2RlZmluZSBKTUVfTkFQSV9XRUlHSFQodykgaW50IHcKICNkZWZpbmUgSk1FX05BUElfV0VJR0hUX1ZBTCh3KSB3CiAjZGVmaW5lIEpNRV9OQVBJX1dFSUdIVF9TRVQodywgcikKLSNkZWZpbmUgSk1FX1JYX0NPTVBMRVRFKGRldiwgbmFwaXMpIG5ldGlmX3J4X2NvbXBsZXRlKG5hcGlzKQorI2RlZmluZSBKTUVfUlhfQ09NUExFVEUoZGV2LCBuYXBpcykgbmFwaV9jb21wbGV0ZShuYXBpcykKICNkZWZpbmUgSk1FX05BUElfRU5BQkxFKHByaXYpIG5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKICNkZWZpbmUgSk1FX05BUElfRElTQUJMRShwcml2KSBcCiAJaWYgKCFuYXBpX2Rpc2FibGVfcGVuZGluZygmcHJpdi0+bmFwaSkpIFwKIAkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKICNkZWZpbmUgSk1FX1JYX1NDSEVEVUxFX1BSRVAocHJpdikgXAotCW5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpCisJbmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKQogI2RlZmluZSBKTUVfUlhfU0NIRURVTEUocHJpdikgXAotCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnByaXYtPm5hcGkpOworCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAKIC8qCiAgKiBKbWFjIEFkYXB0ZXIgUHJpdmF0ZSBkYXRhCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rb3JpbmEuYyBiL2RyaXZlcnMvbmV0L2tvcmluYS5jCmluZGV4IDc1MDEwY2EuLjM4ZDY2NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tvcmluYS5jCisrKyBiL2RyaXZlcnMvbmV0L2tvcmluYS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJCQlETUFfU1RBVF9IQUxUIHwgRE1BX1NUQVRfRVJSKSwKIAkJCQkmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzbSk7CiAKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCiAJCWlmIChkbWFzICYgRE1BX1NUQVRfRVJSKQogCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogRE1BIGVycm9yXG4iLCBkZXYtPm5hbWUpOwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAKIAl3b3JrX2RvbmUgPSBrb3JpbmFfcngoZGV2LCBidWRnZXQpOwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJd3JpdGVsKHJlYWRsKCZscC0+cnhfZG1hX3JlZ3MtPmRtYXNtKSAmCiAJCQl+KERNQV9TVEFUX0RPTkUgfCBETUFfU1RBVF9IQUxUIHwgRE1BX1NUQVRfRVJSKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbmNlLmMgYi9kcml2ZXJzL25ldC9sYW5jZS5jCmluZGV4IGQ3YWZiOTMuLjYzMzgwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvbGFuY2UuYwpAQCAtMzkxLDcgKzM5MSw4IEBACiAgICAqLwogc3RhdGljIGludCBfX2luaXQgZG9fbGFuY2VfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgKnBvcnQsIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgKnBvcnQ7CisJaW50IHJlc3VsdDsKIAogCWlmIChoaWdoX21lbW9yeSA8PSBwaHlzX3RvX3ZpcnQoMTYqMTAyNCoxMDI0KSkKIAkJbGFuY2VfbmVlZF9pc2FfYm91bmNlX2J1ZmZlcnMgPSAwOwpAQCAtNDUzLDE2ICs0NTQsMjggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxhbmNlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBsYW5jZV9vcGVuLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYW5jZV9zdGFydF94bWl0LAorCS5uZG9fc3RvcAkJPSBsYW5jZV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBsYW5jZV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGxhbmNlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGxhbmNlX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyLCBpbnQgaXJxLCBpbnQgb3B0aW9ucykKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHA7Ci0JbG9uZyBkbWFfY2hhbm5lbHM7CQkJLyogTWFyayBzcHVyaW91c2x5LWJ1c3kgRE1BIGNoYW5uZWxzICovCisJdW5zaWduZWQgbG9uZyBkbWFfY2hhbm5lbHM7CS8qIE1hcmsgc3B1cmlvdXNseS1idXN5IERNQSBjaGFubmVscyAqLwogCWludCBpLCByZXNldF92YWwsIGxhbmNlX3ZlcnNpb247CiAJY29uc3QgY2hhciAqY2hpcG5hbWU7CiAJLyogRmxhZ3MgZm9yIHNwZWNpZmljIGNoaXBzIG9yIGJvYXJkcy4gKi8KLQl1bnNpZ25lZCBjaGFyIGhwSjI0MDVBID0gMDsJCS8qIEhQIElTQSBhZGFwdG9yICovCi0JaW50IGhwX2J1aWx0aW4gPSAwOwkJCS8qIEhQIG9uLWJvYXJkIGV0aGVybmV0LiAqLwotCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247CQkJLyogQWxyZWFkeSBwcmludGVkIHZlcnNpb24gaW5mby4gKi8KKwl1bnNpZ25lZCBjaGFyIGhwSjI0MDVBID0gMDsJLyogSFAgSVNBIGFkYXB0b3IgKi8KKwlpbnQgaHBfYnVpbHRpbiA9IDA7CQkvKiBIUCBvbi1ib2FyZCBldGhlcm5ldC4gKi8KKwlzdGF0aWMgaW50IGRpZF92ZXJzaW9uOwkJLyogQWxyZWFkeSBwcmludGVkIHZlcnNpb24gaW5mby4gKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXZvaWQgX19pb21lbSAqYmlvczsKQEAgLTcxMywxMiArNzI2LDcgQEAKIAkJcHJpbnRrKHZlcnNpb24pOwogCiAJLyogVGhlIExBTkNFLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gbGFuY2Vfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhbmNlX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gbGFuY2VfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBsYW5jZV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gbGFuY2VfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbGFuY2VfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbHA0ODZlLmMgYi9kcml2ZXJzL25ldC9scDQ4NmUuYwppbmRleCA0ZDFhMDU5Li5kNDRiZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9scDQ4NmUuYworKysgYi9kcml2ZXJzL25ldC9scDQ4NmUuYwpAQCAtOTUyLDYgKzk1MiwxNyBAQAogCQkodW5zaWduZWQgY2hhcikgYWRkWzEyXSwgKHVuc2lnbmVkIGNoYXIpIGFkZFsxM10pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGk1OTZfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gaTU5Nl9vcGVuLAorCS5uZG9fc3RvcAkJPSBpNTk2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpNTk2X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGk1OTZfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbHA0ODZlX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKIAlzdHJ1Y3QgaTU5Nl9wcml2YXRlICpscDsKIAl1bnNpZ25lZCBjaGFyIGV0aF9hZGRyWzZdID0geyAwLCAweGFhLCAwLCAwLCAwLCAwIH07CkBAIC0xMDE0LDEyICsxMDI1LDggQEAKIAlwcmludGsoIlxuIik7CiAKIAkvKiBUaGUgTFA0ODZFLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmk1OTZfb3BlbjsKLQlkZXYtPnN0b3AgPSAmaTU5Nl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZpNTk2X3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpNTk2X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT50eF90aW1lb3V0ID0gaTU5Nl90eF90aW1lb3V0OwogCiAjaWYgMAogCS8qIHNlbGZ0ZXN0IHJlcG9ydHMgMHgzMjA5MjVhZSAtIGRvbid0IGtub3cgd2hhdCB0aGF0IG1lYW5zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNiLmMgYi9kcml2ZXJzL25ldC9tYWNiLmMKaW5kZXggZjZjNDkzNi4uZjUwNTAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjYi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY2IuYwpAQCAtMjExLDEwICsyMTEsMTAgQEAKIAogCS8qIGF0dGFjaCB0aGUgbWFjIHRvIHRoZSBwaHkgKi8KIAlpZiAocGRhdGEgJiYgcGRhdGEtPmlzX3JtaWkpIHsKLQkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJCSZtYWNiX2hhbmRsZV9saW5rX2NoYW5nZSwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOwogCX0gZWxzZSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkmbWFjYl9oYW5kbGVfbGlua19jaGFuZ2UsIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCX0KIApAQCAtNTEzLDcgKzUxMyw2IEBACiBzdGF0aWMgaW50IG1hY2JfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IG1hY2IgKmJwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBtYWNiLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnAtPmRldjsKIAlpbnQgd29ya19kb25lOwogCXUzMiBzdGF0dXM7CiAKQEAgLTUyNyw3ICs1MjYsNyBAQAogCQkgKiB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgbGFzdCB0aW1lLCBhbmQgbm8gcGFja2V0cwogCQkgKiBoYXZlIGJlZW4gcmVjZWl2ZWQgc2luY2UuCiAJCSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC01MzgsMTMgKzUzNywxMyBAQAogCQlkZXZfd2FybigmYnAtPnBkZXYtPmRldiwKIAkJCSAiTm8gUlggYnVmZmVycyBjb21wbGV0ZSwgc3RhdHVzID0gJTAybHhcbiIsCiAJCQkgKHVuc2lnbmVkIGxvbmcpc3RhdHVzKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWdvdG8gb3V0OwogCX0KIAogCXdvcmtfZG9uZSA9IG1hY2JfcngoYnAsIGJ1ZGdldCk7CiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkvKgogCSAqIFdlJ3ZlIGRvbmUgd2hhdCB3ZSBjYW4gdG8gY2xlYW4gdGhlIGJ1ZmZlcnMuIE1ha2Ugc3VyZSB3ZQpAQCAtNTc5LDcgKzU3OCw3IEBACiAJCX0KIAogCQlpZiAoc3RhdHVzICYgTUFDQl9SWF9JTlRfRkxBR1MpIHsKLQkJCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKKwkJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgewogCQkJCS8qCiAJCQkJICogVGhlcmUncyBubyBwb2ludCB0YWtpbmcgYW55IG1vcmUgaW50ZXJydXB0cwogCQkJCSAqIHVudGlsIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSBidWZmZXJzCkBAIC01ODcsNyArNTg2LDcgQEAKIAkJCQltYWNiX3dyaXRlbChicCwgSURSLCBNQUNCX1JYX0lOVF9GTEFHUyk7CiAJCQkJZGV2X2RiZygmYnAtPnBkZXYtPmRldiwKIAkJCQkJInNjaGVkdWxpbmcgUlggc29mdGlycVxuIik7Ci0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYnAtPm5hcGkpOworCQkJCV9fbmFwaV9zY2hlZHVsZSgmYnAtPm5hcGkpOwogCQkJfQogCQl9CiAKQEAgLTEwNzcsNyArMTA3Niw3IEBACiAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBicC0+cGRldi0+ZGV2LmRyaXZlci0+bmFtZSk7CiAJc3RyY3B5KGluZm8tPnZlcnNpb24sICIkUmV2aXNpb246IDEuMTQgJCIpOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgYnAtPnBkZXYtPmRldi5idXNfaWQpOworCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoJmJwLT5wZGV2LT5kZXYpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBtYWNiX2V0aHRvb2xfb3BzID0gewpAQCAtMTIzNCw4ICsxMjMzLDggQEAKIAogCXBoeWRldiA9IGJwLT5waHlfZGV2OwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgotCQkiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCQkiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsIGRldi0+bmFtZSwKKwkJcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwppbmRleCAyMDViYjA1Li41MjcxNjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKQEAgLTE3Niw3ICsxNzYsOCBAQAogCWlmICgobHAtPmRlc2NyaXB0b3JzID0gZG1hX2FsbG9jX2NvaGVyZW50KGxwLT5kZXZpY2UsCiAJICAgICAgICAgICAgU0laRU9GX1NPTklDX0RFU0MgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSwKIAkgICAgICAgICAgICAmbHAtPmRlc2NyaXB0b3JzX2xhZGRyLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsIGxwLT5kZXZpY2UtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzLlxuIiwKKwkJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0zMzcsNyArMzM4LDcgQEAKIAkJc29uaWNfdmVyc2lvbl9wcmludGVkID0gMTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9uYm9hcmQgLyBjb21tLXNsb3QgU09OSUMgYXQgMHglMDhseFxuIiwKLQkgICAgICAgbHAtPmRldmljZS0+YnVzX2lkLCBkZXYtPmJhc2VfYWRkcik7CisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBkZXYtPmJhc2VfYWRkcik7CiAKIAkvKiBUaGUgUG93ZXJCb29rJ3MgU09OSUMgaXMgMTYgYml0IGFsd2F5cy4gKi8KIAlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1BCNTIwKSB7CkBAIC0zNzAsMTAgKzM3MSwxMCBAQAogCX0KIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICIlczogcmV2aXNpb24gMHglMDR4LCB1c2luZyAlZCBiaXQgRE1BIGFuZCByZWdpc3RlciBvZmZzZXQgJWRcbiIsCi0JICAgICAgIGxwLT5kZXZpY2UtPmJ1c19pZCwgc3IsIGxwLT5kbWFfYml0bW9kZT8zMjoxNiwgbHAtPnJlZ19vZmZzZXQpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgc3IsIGxwLT5kbWFfYml0bW9kZT8zMjoxNiwgbHAtPnJlZ19vZmZzZXQpOwogCiAjaWYgMCAvKiBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gZmluZCBvdXQgaG93IE1hY09TIGNvbmZpZ3VyZWQgdGhlIGNhcmQuICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGxwLT5kZXZpY2UtPmJ1c19pZCwKKwlwcmludGsoS0VSTl9JTkZPICIlczogRENSOiAweCUwNHgsIERDUjI6IDB4JTA0eFxuIiwgZGV2X25hbWUobHAtPmRldmljZSksCiAJICAgICAgIFNPTklDX1JFQUQoU09OSUNfRENSKSAmIDB4ZmZmZiwgU09OSUNfUkVBRChTT05JQ19EQ1IyKSAmIDB4ZmZmZik7CiAjZW5kaWYKIApAQCAtNTI1LDEyICs1MjYsMTIgQEAKIAkJc29uaWNfdmVyc2lvbl9wcmludGVkID0gMTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGluIHNsb3QgJVhcbiIsCi0JICAgICAgIGxwLT5kZXZpY2UtPmJ1c19pZCwgbmRldi0+Ym9hcmQtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKKwkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSksIG5kZXYtPmJvYXJkLT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJldmlzaW9uIDB4JTA0eCwgdXNpbmcgJWQgYml0IERNQSBhbmQgcmVnaXN0ZXIgb2Zmc2V0ICVkXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIFNPTklDX1JFQUQoU09OSUNfU1IpLCBkbWFfYml0bW9kZT8zMjoxNiwgcmVnX29mZnNldCk7CisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBTT05JQ19SRUFEKFNPTklDX1NSKSwgZG1hX2JpdG1vZGU/MzI6MTYsIHJlZ19vZmZzZXQpOwogCiAjaWYgMCAvKiBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gZmluZCBvdXQgaG93IE1hY09TIGNvbmZpZ3VyZWQgdGhlIGNhcmQuICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGxwLT5kZXZpY2UtPmJ1c19pZCwKKwlwcmludGsoS0VSTl9JTkZPICIlczogRENSOiAweCUwNHgsIERDUjI6IDB4JTA0eFxuIiwgZGV2X25hbWUobHAtPmRldmljZSksCiAJICAgICAgIFNPTklDX1JFQUQoU09OSUNfRENSKSAmIDB4ZmZmZiwgU09OSUNfUkVBRChTT05JQ19EQ1IyKSAmIDB4ZmZmZik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCmluZGV4IDdlMjRiNTAuLjcwZDNlZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC02MCw2ICs2MCw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfYWRkKHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbikKK3sKKwlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0ID0gdmxhbi0+cG9ydDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdmxhbi0+ZGV2LT5kZXZfYWRkcjsKKworCWhsaXN0X2FkZF9oZWFkX3JjdSgmdmxhbi0+aGxpc3QsICZwb3J0LT52bGFuX2hhc2hbYWRkcls1XV0pOworfQorCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfZGVsKHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbikKK3sKKwlobGlzdF9kZWxfcmN1KCZ2bGFuLT5obGlzdCk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hY3ZsYW5faGFzaF9jaGFuZ2VfYWRkcihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuKTsKKwkvKiBOb3cgdGhhdCB3ZSBhcmUgdW5oYXNoZWQgaXQgaXMgc2FmZSB0byBjaGFuZ2UgdGhlIGRldmljZQorCSAqIGFkZHJlc3Mgd2l0aG91dCBjb25mdXNpbmcgcGFja2V0IGRlbGl2ZXJ5LgorCSAqLworCW1lbWNweSh2bGFuLT5kZXYtPmRldl9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisJbWFjdmxhbl9oYXNoX2FkZCh2bGFuKTsKK30KKworc3RhdGljIGludCBtYWN2bGFuX2FkZHJfYnVzeShjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJLyogVGVzdCB0byBzZWUgaWYgdGhlIHNwZWNpZmllZCBtdWx0aWNhc3QgYWRkcmVzcyBpcworCSAqIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yCisJICogYW5vdGhlciBtYWN2bGFuLgorCSAqLworCWlmIChtZW1jbXAocG9ydC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJCXJldHVybiAxOworCisJaWYgKG1hY3ZsYW5faGFzaF9sb29rdXAocG9ydCwgYWRkcikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG1hY3ZsYW5fYnJvYWRjYXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KQogewpAQCAtMTg0LDEwICsyMjUsMTMgQEAKIHN0YXRpYyBpbnQgbWFjdmxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0ID0gdmxhbi0+cG9ydDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYgPSB2bGFuLT5sb3dlcmRldjsKIAlpbnQgZXJyOwogCisJZXJyID0gLUVCVVNZOworCWlmIChtYWN2bGFuX2FkZHJfYnVzeSh2bGFuLT5wb3J0LCBkZXYtPmRldl9hZGRyKSkKKwkJZ290byBvdXQ7CisKIAllcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xOTYsOCArMjQwLDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGRlbF91bmljYXN0OwogCX0KLQotCWhsaXN0X2FkZF9oZWFkX3JjdSgmdmxhbi0+aGxpc3QsICZwb3J0LT52bGFuX2hhc2hbZGV2LT5kZXZfYWRkcls1XV0pOworCW1hY3ZsYW5faGFzaF9hZGQodmxhbik7CiAJcmV0dXJuIDA7CiAKIGRlbF91bmljYXN0OgpAQCAtMjE3LDggKzI2MCw3IEBACiAKIAlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAotCWhsaXN0X2RlbF9yY3UoJnZsYW4tPmhsaXN0KTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKKwltYWN2bGFuX2hhc2hfZGVsKHZsYW4pOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMTYgKzI3NCwyMSBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0OworCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCS8qIEp1c3QgY29weSBpbiB0aGUgbmV3IGFkZHJlc3MgKi8KKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQkvKiBSZWhhc2ggYW5kIHVwZGF0ZSB0aGUgZGV2aWNlIGZpbHRlcnMgKi8KKwkJaWYgKG1hY3ZsYW5fYWRkcl9idXN5KHZsYW4tPnBvcnQsIGFkZHItPnNhX2RhdGEpKQorCQkJcmV0dXJuIC1FQlVTWTsKIAotCWVyciA9IGRldl91bmljYXN0X2FkZChsb3dlcmRldiwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWRldl91bmljYXN0X2RlbGV0ZShsb3dlcmRldiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQlpZiAoKGVyciA9IGRldl91bmljYXN0X2FkZChsb3dlcmRldiwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pKSkKKwkJCXJldHVybiBlcnI7CiAKLW91dDoKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCQlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCQltYWN2bGFuX2hhc2hfY2hhbmdlX2FkZHIodmxhbiwgYWRkci0+c2FfZGF0YSk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00NjEsMTIgKzUwOCwxMyBAQAogCWlmIChsb3dlcmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIERvbid0IGFsbG93IG1hY3ZsYW5zIG9uIHRvcCBvZiBvdGhlciBtYWN2bGFucyAtIGl0cyBub3QgcmVhbGx5Ci0JICogd3JvbmcsIGJ1dCBsb2NrZGVwIGNhbid0IGhhbmRsZSBpdCBhbmQgaXRzIG5vdCB1c2VmdWwgZm9yIGFueXRoaW5nCi0JICogeW91IGNvdWxkbid0IGRvIGRpcmVjdGx5IG9uIHRvcCBvZiB0aGUgcmVhbCBkZXZpY2UuCisJLyogV2hlbiBjcmVhdGluZyBtYWN2bGFucyBvbiB0b3Agb2Ygb3RoZXIgbWFjdmxhbnMgLSB1c2UKKwkgKiB0aGUgcmVhbCBkZXZpY2UgYXMgdGhlIGxvd2VyZGV2LgogCSAqLwotCWlmIChsb3dlcmRldi0+cnRubF9saW5rX29wcyA9PSBkZXYtPnJ0bmxfbGlua19vcHMpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChsb3dlcmRldi0+cnRubF9saW5rX29wcyA9PSBkZXYtPnJ0bmxfbGlua19vcHMpIHsKKwkJc3RydWN0IG1hY3ZsYW5fZGV2ICpsb3dlcnZsYW4gPSBuZXRkZXZfcHJpdihsb3dlcmRldik7CisJCWxvd2VyZGV2ID0gbG93ZXJ2bGFuLT5sb3dlcmRldjsKKwl9CiAKIAlpZiAoIXRiW0lGTEFfTVRVXSkKIAkJZGV2LT5tdHUgPSBsb3dlcmRldi0+bXR1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWlwc25ldC5jIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCmluZGV4IDRlN2E1ZmEuLjY2NDgzNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYworKysgYi9kcml2ZXJzL25ldC9taXBzbmV0LmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogewogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IG1pcHNuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJaW50IGVycjsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZXRkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgbmV0ZGV2KTsKIAogCW5ldGRldi0+b3BlbgkJCT0gbWlwc25ldF9vcGVuOwogCW5ldGRldi0+c3RvcAkJCT0gbWlwc25ldF9jbG9zZTsKQEAgLTI5MywyMyArMjkzLDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgbWlwc25ldF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1pcHNuZXRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgc2l6ZW9mKHN0cnVjdCBtaXBzbmV0X3JlZ3MpKTsKIAlmcmVlX25ldGRldihkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1pcHNuZXRfZHJpdmVyID0gewotCS5uYW1lCT0gbWlwc25ldF9zdHJpbmcsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBtaXBzbmV0X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChtaXBzbmV0X2RldmljZV9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWlwc25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gbWlwc25ldF9zdHJpbmcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtaXBzbmV0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWlwc25ldF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pcHNuZXRfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTMxOSw3ICszMjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIk1JUFNOZXQgRXRoZXJuZXQgZHJpdmVyLiBWZXJzaW9uOiAlcy4gIgogCSAgICAgICAiKGMpMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLlxuIiwgTUlQU05FVF9WRVJTSU9OKTsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCkBAIC0zMjgsNyArMzMwLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG1pcHNuZXRfZXhpdF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtaXBzbmV0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1pcHNuZXRfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKaW5kZXggYTdhOTdiZi4uMjEwNDBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9tbHg0L01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogb2JqLSQoQ09ORklHX01MWDRfQ09SRSkJCSs9IG1seDRfY29yZS5vCiAKIG1seDRfY29yZS15IDo9CWFsbG9jLm8gY2F0YXMubyBjbWQubyBjcS5vIGVxLm8gZncubyBpY20ubyBpbnRmLm8gbWFpbi5vIG1jZy5vIFwKLQkJbXIubyBwZC5vIHBvcnQubyBwcm9maWxlLm8gcXAubyByZXNldC5vIHNycS5vCisJCW1yLm8gcGQubyBwb3J0Lm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzZW5zZS5vIHNycS5vCiAKIG9iai0kKENPTkZJR19NTFg0X0VOKSAgICAgICAgICAgICAgICs9IG1seDRfZW4ubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKaW5kZXggZjA5NGVlMC4uYWE5Njc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYwpAQCAtNDIsNyArNDIsNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhjYXRhc19sb2NrKTsKIAogc3RhdGljIExJU1RfSEVBRChjYXRhc19saXN0KTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2F0YXNfd3E7CiBzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGNhdGFzX3dvcms7CiAKIHN0YXRpYyBpbnQgaW50ZXJuYWxfZXJyX3Jlc2V0ID0gMTsKQEAgLTc3LDcgKzc2LDcgQEAKIAkJCWxpc3RfYWRkKCZwcml2LT5jYXRhc19lcnIubGlzdCwgJmNhdGFzX2xpc3QpOwogCQkJc3Bpbl91bmxvY2soJmNhdGFzX2xvY2spOwogCi0JCQlxdWV1ZV93b3JrKGNhdGFzX3dxLCAmY2F0YXNfd29yayk7CisJCQlxdWV1ZV93b3JrKG1seDRfd3EsICZjYXRhc193b3JrKTsKIAkJfQogCX0gZWxzZQogCQltb2RfdGltZXIoJnByaXYtPmNhdGFzX2Vyci50aW1lciwKQEAgLTE0NiwxOCArMTQ1LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmNhdGFzX2xvY2spOwogfQogCi1pbnQgX19pbml0IG1seDRfY2F0YXNfaW5pdCh2b2lkKQordm9pZCAgX19pbml0IG1seDRfY2F0YXNfaW5pdCh2b2lkKQogewogCUlOSVRfV09SSygmY2F0YXNfd29yaywgY2F0YXNfcmVzZXQpOwotCi0JY2F0YXNfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibWx4NF9lcnIiKTsKLQlpZiAoIWNhdGFzX3dxKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIG1seDRfY2F0YXNfY2xlYW51cCh2b2lkKQotewotCWRlc3Ryb3lfd29ya3F1ZXVlKGNhdGFzX3dxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwppbmRleCBjNjFiMGJkLi5hNDEzMGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCkBAIC03NjgsNiArNzY4LDcgQEAKIAogCQlza2ItPmlwX3N1bW1lZCA9IGlwX3N1bW1lZDsKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGNxLT5yaW5nKTsKIAogCQkvKiBQdXNoIGl0IHVwIHRoZSBzdGFjayAqLwogCQlpZiAocHJpdi0+dmxncnAgJiYgKGJlMzJfdG9fY3B1KGNxZS0+dmxhbl9teV9xcG4pICYKQEAgLTgxNCw3ICs4MTUsNyBAQAogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihjcS0+ZGV2KTsKIAogCWlmIChwcml2LT5wb3J0X3VwKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmY3EtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZjcS0+bmFwaSk7CiAJZWxzZQogCQltbHg0X2VuX2FybV9jcShwcml2LCBjcSk7CiB9CkBAIC04MzQsNyArODM1LDcgQEAKIAkJSU5DX1BFUkZfQ09VTlRFUihwcml2LT5wc3RhdHMubmFwaV9xdW90YSk7CiAJZWxzZSB7CiAJCS8qIERvbmUgZm9yIG5vdyAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJbWx4NF9lbl9hcm1fY3EocHJpdiwgY3EpOwogCX0KIAlyZXR1cm4gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZXEuYyBiL2RyaXZlcnMvbmV0L21seDQvZXEuYwppbmRleCAyYzE5YmZmN2MuLjg4MzBkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZXEuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCWludCBjcW47CiAJaW50IGVxZXNfZm91bmQgPSAwOwogCWludCBzZXRfY2kgPSAwOworCWludCBwb3J0OwogCiAJd2hpbGUgKChlcWUgPSBuZXh0X2VxZV9zdyhlcSkpKSB7CiAJCS8qCkBAIC0yMDMsMTEgKzIwNCwxNiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfUE9SVF9DSEFOR0U6Ci0JCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwKLQkJCQkJICAgIGVxZS0+c3VidHlwZSA9PSBNTFg0X1BPUlRfQ0hBTkdFX1NVQlRZUEVfQUNUSVZFID8KLQkJCQkJICAgIE1MWDRfREVWX0VWRU5UX1BPUlRfVVAgOgotCQkJCQkgICAgTUxYNF9ERVZfRVZFTlRfUE9SVF9ET1dOLAotCQkJCQkgICAgYmUzMl90b19jcHUoZXFlLT5ldmVudC5wb3J0X2NoYW5nZS5wb3J0KSA+PiAyOCk7CisJCQlwb3J0ID0gYmUzMl90b19jcHUoZXFlLT5ldmVudC5wb3J0X2NoYW5nZS5wb3J0KSA+PiAyODsKKwkJCWlmIChlcWUtPnN1YnR5cGUgPT0gTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0RPV04pIHsKKwkJCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwgTUxYNF9ERVZfRVZFTlRfUE9SVF9ET1dOLAorCQkJCQkJICAgIHBvcnQpOworCQkJCW1seDRfcHJpdihkZXYpLT5zZW5zZS5kb19zZW5zZV9wb3J0W3BvcnRdID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsIE1MWDRfREVWX0VWRU5UX1BPUlRfVVAsCisJCQkJCQkgICAgcG9ydCk7CisJCQkJbWx4NF9wcml2KGRldiktPnNlbnNlLmRvX3NlbnNlX3BvcnRbcG9ydF0gPSAwOworCQkJfQogCQkJYnJlYWs7CiAKIAkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfQ1FfRVJST1I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDZlZjI0OTAuLmE2NmY1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC01MSw2ICs1MSw4IEBACiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptbHg0X3dxOworCiAjaWZkZWYgQ09ORklHX01MWDRfREVCVUcKIAogaW50IG1seDRfZGVidWdfbGV2ZWwgPSAwOwpAQCAtOTgsMjQgKzEwMCwyMyBAQAogTU9EVUxFX1BBUk1fREVTQyh1c2VfcHJpbywgIkVuYWJsZSBzdGVlcmluZyBieSBWTEFOIHByaW9yaXR5IG9uIEVUSCBwb3J0cyAiCiAJCSAgIigwLzEsIGRlZmF1bHQgMCkiKTsKIAotc3RhdGljIGludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAotCQkJCSAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKQoraW50IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgICBlbnVtIG1seDRfcG9ydF90eXBlICpwb3J0X3R5cGUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0cyAtIDE7IGkrKykgewotCQlpZiAocG9ydF90eXBlW2ldICE9IHBvcnRfdHlwZVtpKzFdICYmCi0JCSAgICAhKGRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0RQRFApKSB7Ci0JCQltbHg0X2VycihkZXYsICJPbmx5IHNhbWUgcG9ydCB0eXBlcyBzdXBwb3J0ZWQgIgotCQkJCSAib24gdGhpcyBIQ0EsIGFib3J0aW5nLlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBvcnRfdHlwZVtpXSAhPSBwb3J0X3R5cGVbaSArIDFdKSB7CisJCQlpZiAoIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgeworCQkJCW1seDRfZXJyKGRldiwgIk9ubHkgc2FtZSBwb3J0IHR5cGVzIHN1cHBvcnRlZCAiCisJCQkJCSAib24gdGhpcyBIQ0EsIGFib3J0aW5nLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAocG9ydF90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0VUSCAmJgorCQkJICAgIHBvcnRfdHlwZVtpICsgMV0gPT0gTUxYNF9QT1JUX1RZUEVfSUIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JaWYgKChwb3J0X3R5cGVbMF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSAmJgotCSAgICAocG9ydF90eXBlWzFdID09IE1MWDRfUE9SVF9UWVBFX0lCKSkgewotCQltbHg0X2VycihkZXYsICJldGgtaWIgY29uZmlndXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKIAkJaWYgKCEocG9ydF90eXBlW2ldICYgZGV2LT5jYXBzLnN1cHBvcnRlZF90eXBlW2krMV0pKSB7CkBAIC0yMjUsNiArMjI2LDkgQEAKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbaV0gPSBNTFg0X1BPUlRfVFlQRV9JQjsKIAkJZWxzZQogCQkJZGV2LT5jYXBzLnBvcnRfdHlwZVtpXSA9IE1MWDRfUE9SVF9UWVBFX0VUSDsKKwkJZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPSBkZXYtPmNhcHMucG9ydF90eXBlW2ldOworCQltbHg0X3ByaXYoZGV2KS0+c2Vuc2Uuc2Vuc2VfYWxsb3dlZFtpXSA9CisJCQlkZXYtPmNhcHMuc3VwcG9ydGVkX3R5cGVbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTzsKIAogCQlpZiAoZGV2LT5jYXBzLmxvZ19udW1fbWFjcyA+IGRldl9jYXAtPmxvZ19tYXhfbWFjc1tpXSkgewogCQkJZGV2LT5jYXBzLmxvZ19udW1fbWFjcyA9IGRldl9jYXAtPmxvZ19tYXhfbWFjc1tpXTsKQEAgLTI2MywxNCArMjY3LDE2IEBACiAgKiBDaGFuZ2UgdGhlIHBvcnQgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlLgogICogRXZlcnkgdXNlciBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgaG9sZCB0aGUgcG9ydCBtdXRleC4KICAqLwotc3RhdGljIGludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAotCQkJCSAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcykKK2ludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcykKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgY2hhbmdlID0gMDsKIAlpbnQgcG9ydDsKIAogCWZvciAocG9ydCA9IDA7IHBvcnQgPCAgZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKSB7CisJCS8qIENoYW5nZSB0aGUgcG9ydCB0eXBlIG9ubHkgaWYgdGhlIG5ldyB0eXBlIGlzIGRpZmZlcmVudAorCQkgKiBmcm9tIHRoZSBjdXJyZW50LCBhbmQgbm90IHNldCB0byBBdXRvICovCiAJCWlmIChwb3J0X3R5cGVzW3BvcnRdICE9IGRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydCArIDFdKSB7CiAJCQljaGFuZ2UgPSAxOwogCQkJZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0ICsgMV0gPSBwb3J0X3R5cGVzW3BvcnRdOwpAQCAtMzAyLDEwICszMDgsMTcgQEAKIAlzdHJ1Y3QgbWx4NF9wb3J0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IG1seDRfcG9ydF9pbmZvLAogCQkJCQkJICAgcG9ydF9hdHRyKTsKIAlzdHJ1Y3QgbWx4NF9kZXYgKm1kZXYgPSBpbmZvLT5kZXY7CisJY2hhciB0eXBlWzhdOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCi0JCSAgICAgICBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9JQiA/Ci0JCSAgICAgICAiaWIiIDogImV0aCIpOworCXNwcmludGYodHlwZSwgIiVzIiwKKwkJKG1kZXYtPmNhcHMucG9ydF90eXBlW2luZm8tPnBvcnRdID09IE1MWDRfUE9SVF9UWVBFX0lCKSA/CisJCSJpYiIgOiAiZXRoIik7CisJaWYgKG1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKQorCQlzcHJpbnRmKGJ1ZiwgImF1dG8gKCVzKVxuIiwgdHlwZSk7CisJZWxzZQorCQlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB0eXBlKTsKKworCXJldHVybiBzdHJsZW4oYnVmKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3BvcnRfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0zMTcsNiArMzMwLDcgQEAKIAlzdHJ1Y3QgbWx4NF9kZXYgKm1kZXYgPSBpbmZvLT5kZXY7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihtZGV2KTsKIAllbnVtIG1seDRfcG9ydF90eXBlIHR5cGVzW01MWDRfTUFYX1BPUlRTXTsKKwllbnVtIG1seDRfcG9ydF90eXBlIG5ld190eXBlc1tNTFg0X01BWF9QT1JUU107CiAJaW50IGk7CiAJaW50IGVyciA9IDA7CiAKQEAgLTMyNCwyNiArMzM4LDU2IEBACiAJCWluZm8tPnRtcF90eXBlID0gTUxYNF9QT1JUX1RZUEVfSUI7CiAJZWxzZSBpZiAoIXN0cmNtcChidWYsICJldGhcbiIpKQogCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0VUSDsKKwllbHNlIGlmICghc3RyY21wKGJ1ZiwgImF1dG9cbiIpKQorCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0FVVE87CiAJZWxzZSB7CiAJCW1seDRfZXJyKG1kZXYsICIlcyBpcyBub3Qgc3VwcG9ydGVkIHBvcnQgdHlwZVxuIiwgYnVmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbWx4NF9zdG9wX3NlbnNlKG1kZXYpOwogCW11dGV4X2xvY2soJnByaXYtPnBvcnRfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKQotCQl0eXBlc1tpXSA9IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA/IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA6Ci0JCQkJCW1kZXYtPmNhcHMucG9ydF90eXBlW2krMV07CisJLyogUG9zc2libGUgdHlwZSBpcyBhbHdheXMgdGhlIG9uZSB0aGF0IHdhcyBkZWxpdmVyZWQgKi8KKwltZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaW5mby0+cG9ydF0gPSBpbmZvLT50bXBfdHlwZTsKIAotCWVyciA9IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMobWRldiwgdHlwZXMpOworCWZvciAoaSA9IDA7IGkgPCBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CisJCXR5cGVzW2ldID0gcHJpdi0+cG9ydFtpKzFdLnRtcF90eXBlID8gcHJpdi0+cG9ydFtpKzFdLnRtcF90eXBlIDoKKwkJCQkJbWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2krMV07CisJCWlmICh0eXBlc1tpXSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKQorCQkJdHlwZXNbaV0gPSBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpKzFdOworCX0KKworCWlmICghKG1kZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgeworCQlmb3IgKGkgPSAxOyBpIDw9IG1kZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJCWlmIChtZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykgeworCQkJCW1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpXSA9IG1kZXYtPmNhcHMucG9ydF90eXBlW2ldOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycikgeworCQltbHg0X2VycihtZGV2LCAiQXV0byBzZW5zaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBIQ0EuICIKKwkJCSAgICAgICAiU2V0IG9ubHkgJ2V0aCcgb3IgJ2liJyBmb3IgYm90aCBwb3J0cyAiCisJCQkgICAgICAgIihzaG91bGQgYmUgdGhlIHNhbWUpXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWx4NF9kb19zZW5zZV9wb3J0cyhtZGV2LCBuZXdfdHlwZXMsIHR5cGVzKTsKKworCWVyciA9IG1seDRfY2hlY2tfcG9ydF9wYXJhbXMobWRldiwgbmV3X3R5cGVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDE7IGkgPD0gbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKLQkJcHJpdi0+cG9ydFtpXS50bXBfdHlwZSA9IDA7CisJLyogV2UgYXJlIGFib3V0IHRvIGFwcGx5IHRoZSBjaGFuZ2VzIGFmdGVyIHRoZSBjb25maWd1cmF0aW9uCisJICogd2FzIHZlcmlmaWVkLCBubyBuZWVkIHRvIHJlbWVtYmVyIHRoZSB0ZW1wb3JhcnkgdHlwZXMKKwkgKiBhbnkgbW9yZSAqLworCWZvciAoaSA9IDA7IGkgPCBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKQorCQlwcml2LT5wb3J0W2kgKyAxXS50bXBfdHlwZSA9IDA7CiAKLQllcnIgPSBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKG1kZXYsIHR5cGVzKTsKKwllcnIgPSBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKG1kZXYsIG5ld190eXBlcyk7CiAKIG91dDoKKwltbHg0X3N0YXJ0X3NlbnNlKG1kZXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtMTExNyw2ICsxMTYxLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wb3J0OwogCisJbWx4NF9zZW5zZV9pbml0KGRldik7CisJbWx4NF9zdGFydF9zZW5zZShkZXYpOworCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTExODIsNiArMTIyOSw3IEBACiAJaW50IHA7CiAKIAlpZiAoZGV2KSB7CisJCW1seDRfc3RvcF9zZW5zZShkZXYpOwogCQltbHg0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiAKIAkJZm9yIChwID0gMTsgcCA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBwKyspIHsKQEAgLTEyMzAsNiArMTI3OCw4IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzNjKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFFEUiBQQ0llIGdlbjIgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNjgpIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgRU4gMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzUwKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEVOIDEwR2lnRSBQQ0llIGdlbjIgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNzIpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UIDEwR2lnRSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc1YSkgfSwgLyogTVQyNTQ1OCBDb25uZWN0WCBFTiAxMEdCQVNFLVQrR2VuMiAxMEdpZ0UgKi8KIAl7IDAsIH0KIH07CiAKQEAgLTEyNjQsOSArMTMxNCwxMSBAQAogCWlmIChtbHg0X3ZlcmlmeV9wYXJhbXMoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBtbHg0X2NhdGFzX2luaXQoKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCW1seDRfY2F0YXNfaW5pdCgpOworCisJbWx4NF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJtbHg0Iik7CisJaWYgKCFtbHg0X3dxKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1seDRfZHJpdmVyKTsKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CkBAIC0xMjc1LDcgKzEzMjcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IG1seDRfY2xlYW51cCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWx4NF9kcml2ZXIpOwotCW1seDRfY2F0YXNfY2xlYW51cCgpOworCWRlc3Ryb3lfd29ya3F1ZXVlKG1seDRfd3EpOwogfQogCiBtb2R1bGVfaW5pdChtbHg0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmggYi9kcml2ZXJzL25ldC9tbHg0L21seDQuaAppbmRleCBlMDIxM2JhZC4uNWJkNzljMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbWx4NC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbHg0L2RyaXZlci5oPgpAQCAtMjc2LDYgKzI3NywxMyBAQAogCXN0cnVjdCBtbHg0X3ZsYW5fdGFibGUJdmxhbl90YWJsZTsKIH07CiAKK3N0cnVjdCBtbHg0X3NlbnNlIHsKKwlzdHJ1Y3QgbWx4NF9kZXYJCSpkZXY7CisJdTgJCQlkb19zZW5zZV9wb3J0W01MWDRfTUFYX1BPUlRTICsgMV07CisJdTgJCQlzZW5zZV9hbGxvd2VkW01MWDRfTUFYX1BPUlRTICsgMV07CisJc3RydWN0IGRlbGF5ZWRfd29yawlzZW5zZV9wb2xsOworfTsKKwogc3RydWN0IG1seDRfcHJpdiB7CiAJc3RydWN0IG1seDRfZGV2CQlkZXY7CiAKQEAgLTMwNSw2ICszMTMsNyBAQAogCXN0cnVjdCBtbHg0X3VhcgkJZHJpdmVyX3VhcjsKIAl2b2lkIF9faW9tZW0JICAgICAgICprYXI7CiAJc3RydWN0IG1seDRfcG9ydF9pbmZvCXBvcnRbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAgICAgICBzZW5zZTsKIAlzdHJ1Y3QgbXV0ZXgJCXBvcnRfbXV0ZXg7CiB9OwogCkBAIC0zMTMsNiArMzIyLDEwIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbHg0X3ByaXYsIGRldik7CiB9CiAKKyNkZWZpbmUgTUxYNF9TRU5TRV9SQU5HRQkoSFogKiAzKQorCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1seDRfd3E7CisKIHUzMiBtbHg0X2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCk7CiB2b2lkIG1seDRfYml0bWFwX2ZyZWUoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIHUzMiBvYmopOwogdTMyIG1seDRfYml0bWFwX2FsbG9jX3JhbmdlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCBpbnQgY250LCBpbnQgYWxpZ24pOwpAQCAtMzQ2LDggKzM1OSw3IEBACiAKIHZvaWQgbWx4NF9zdGFydF9jYXRhc19wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF9zdG9wX2NhdGFzX3BvbGwoc3RydWN0IG1seDRfZGV2ICpkZXYpOwotaW50IG1seDRfY2F0YXNfaW5pdCh2b2lkKTsKLXZvaWQgbWx4NF9jYXRhc19jbGVhbnVwKHZvaWQpOwordm9pZCBtbHg0X2NhdGFzX2luaXQodm9pZCk7CiBpbnQgbWx4NF9yZXN0YXJ0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgbWx4NF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogdm9pZCBtbHg0X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKQEAgLTM3OSw2ICszOTEsMTcgQEAKIAogdm9pZCBtbHg0X2hhbmRsZV9jYXRhc19lcnIoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogCit2b2lkIG1seDRfZG9fc2Vuc2VfcG9ydHMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqc3R5cGUsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqZGVmYXVsdHMpOwordm9pZCBtbHg0X3N0YXJ0X3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9zdG9wX3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9zZW5zZV9pbml0KHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKTsKK2ludCBtbHg0X2NoYW5nZV9wb3J0X3R5cGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlcyk7CisKIHZvaWQgbWx4NF9pbml0X21hY190YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbWFjX3RhYmxlICp0YWJsZSk7CiB2b2lkIG1seDRfaW5pdF92bGFuX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF92bGFuX3RhYmxlICp0YWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKaW5kZXggMGEwNTdlNS4uN2NjZTMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKQEAgLTI5OCwyMCArMjk4LDE3IEBACiB7CiAJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CiAJaW50IGVycjsKLQl1OCBpc19ldGggPSBkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID09IE1MWDRfUE9SVF9UWVBFX0VUSDsKIAogCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CiAJaWYgKElTX0VSUihtYWlsYm94KSkKIAkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CiAKIAltZW1zZXQobWFpbGJveC0+YnVmLCAwLCAyNTYpOwotCWlmIChpc19ldGgpIHsKLQkJKCh1OCAqKSBtYWlsYm94LT5idWYpWzNdID0gNjsKLQkJKChfX2JlMTYgKikgbWFpbGJveC0+YnVmKVs0XSA9IGNwdV90b19iZTE2KDEgPDwgMTUpOwotCQkoKF9fYmUxNiAqKSBtYWlsYm94LT5idWYpWzZdID0gY3B1X3RvX2JlMTYoMSA8PCAxNSk7Ci0JfSBlbHNlCi0JCSgoX19iZTMyICopIG1haWxib3gtPmJ1ZilbMV0gPSBkZXYtPmNhcHMuaWJfcG9ydF9kZWZfY2FwW3BvcnRdOwotCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBwb3J0LCBpc19ldGgsIE1MWDRfQ01EX1NFVF9QT1JULAorCWlmIChkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID09IE1MWDRfUE9SVF9UWVBFX0VUSCkKKwkJcmV0dXJuIDA7CisKKwkoKF9fYmUzMiAqKSBtYWlsYm94LT5idWYpWzFdID0gZGV2LT5jYXBzLmliX3BvcnRfZGVmX2NhcFtwb3J0XTsKKwllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgcG9ydCwgMCwgTUxYNF9DTURfU0VUX1BPUlQsCiAJCSAgICAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0IpOwogCiAJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1MDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisKKyNpbmNsdWRlICJtbHg0LmgiCisKK3N0YXRpYyBpbnQgbWx4NF9TRU5TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnR5cGUpCit7CisJdTY0IG91dF9wYXJhbTsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IG1seDRfY21kX2ltbShkZXYsIDAsICZvdXRfcGFyYW0sIHBvcnQsIDAsCisJCQkgICBNTFg0X0NNRF9TRU5TRV9QT1JULCBNTFg0X0NNRF9USU1FX0NMQVNTX0IpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiU2Vuc2UgY29tbWFuZCBmYWlsZWQgZm9yIHBvcnQ6ICVkXG4iLCBwb3J0KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAob3V0X3BhcmFtID4gMikgeworCQltbHg0X2VycihkZXYsICJTZW5zZSByZXR1cm5lZCBpbGxlZ2FsIHZhbHVlOiAweCVsbHhcbiIsIG91dF9wYXJhbSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJKnR5cGUgPSBvdXRfcGFyYW07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWx4NF9kb19zZW5zZV9wb3J0cyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSBlbnVtIG1seDRfcG9ydF90eXBlICpzdHlwZSwKKwkJCSBlbnVtIG1seDRfcG9ydF90eXBlICpkZWZhdWx0cykKK3sKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmbWx4NF9wcml2KGRldiktPnNlbnNlOworCWludCBlcnI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykgeworCQlzdHlwZVtpIC0gMV0gPSAwOworCQlpZiAoc2Vuc2UtPmRvX3NlbnNlX3BvcnRbaV0gJiYgc2Vuc2UtPnNlbnNlX2FsbG93ZWRbaV0gJiYKKwkJICAgIGRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE8pIHsKKwkJCWVyciA9IG1seDRfU0VOU0VfUE9SVChkZXYsIGksICZzdHlwZVtpIC0gMV0pOworCQkJaWYgKGVycikKKwkJCQlzdHlwZVtpIC0gMV0gPSBkZWZhdWx0c1tpIC0gMV07CisJCX0gZWxzZQorCQkJc3R5cGVbaSAtIDFdID0gZGVmYXVsdHNbaSAtIDFdOworCX0KKworCS8qCisJICogQWRqdXN0IHBvcnQgY29uZmlndXJhdGlvbjoKKwkgKiBJZiBwb3J0IDEgc2Vuc2VkIG5vdGhpbmcgYW5kIHBvcnQgMiBpcyBJQiwgc2V0IGJvdGggYXMgSUIKKwkgKiBJZiBwb3J0IDIgc2Vuc2VkIG5vdGhpbmcgYW5kIHBvcnQgMSBpcyBFdGgsIHNldCBib3RoIGFzIEV0aAorCSAqLworCWlmIChzdHlwZVswXSA9PSBNTFg0X1BPUlRfVFlQRV9FVEgpIHsKKwkJZm9yIChpID0gMTsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IE1MWDRfUE9SVF9UWVBFX0VUSDsKKwl9CisJaWYgKHN0eXBlW2Rldi0+Y2Fwcy5udW1fcG9ydHMgLSAxXSA9PSBNTFg0X1BPUlRfVFlQRV9JQikgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0cyAtIDE7IGkrKykKKwkJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IE1MWDRfUE9SVF9UWVBFX0lCOworCX0KKworCS8qCisJICogSWYgc2Vuc2VkIG5vdGhpbmcsIHJlbWFpbiBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisJICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJc3R5cGVbaV0gPSBzdHlwZVtpXSA/IHN0eXBlW2ldIDogZGVmYXVsdHNbaV07CisKK30KKworc3RhdGljIHZvaWQgbWx4NF9zZW5zZV9wb3J0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X3NlbnNlLAorCQkJCQkJc2Vuc2VfcG9sbCk7CisJc3RydWN0IG1seDRfZGV2ICpkZXYgPSBzZW5zZS0+ZGV2OworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwllbnVtIG1seDRfcG9ydF90eXBlIHN0eXBlW01MWDRfTUFYX1BPUlRTXTsKKworCW11dGV4X2xvY2soJnByaXYtPnBvcnRfbXV0ZXgpOworCW1seDRfZG9fc2Vuc2VfcG9ydHMoZGV2LCBzdHlwZSwgJmRldi0+Y2Fwcy5wb3J0X3R5cGVbMV0pOworCisJaWYgKG1seDRfY2hlY2tfcG9ydF9wYXJhbXMoZGV2LCBzdHlwZSkpCisJCWdvdG8gc2Vuc2VfYWdhaW47CisKKwlpZiAobWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhkZXYsIHN0eXBlKSkKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGNoYW5nZSBwb3J0X3R5cGVzXG4iKTsKKworc2Vuc2VfYWdhaW46CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsobWx4NF93cSAsICZzZW5zZS0+c2Vuc2VfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoTUxYNF9TRU5TRV9SQU5HRSkpOworfQorCit2b2lkIG1seDRfc3RhcnRfc2Vuc2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X3NlbnNlICpzZW5zZSA9ICZwcml2LT5zZW5zZTsKKworCWlmICghKGRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0RQRFApKQorCQlyZXR1cm47CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsobWx4NF93cSAsICZzZW5zZS0+c2Vuc2VfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoTUxYNF9TRU5TRV9SQU5HRSkpOworfQorCit2b2lkIG1seDRfc3RvcF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm1seDRfcHJpdihkZXYpLT5zZW5zZS5zZW5zZV9wb2xsKTsKK30KKwordm9pZCAgbWx4NF9zZW5zZV9pbml0KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmcHJpdi0+c2Vuc2U7CisJaW50IHBvcnQ7CisKKwlzZW5zZS0+ZGV2ID0gZGV2OworCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKQorCQlzZW5zZS0+ZG9fc2Vuc2VfcG9ydFtwb3J0XSA9IDE7CisKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZzZW5zZS0+c2Vuc2VfcG9sbCwgbWx4NF9zZW5zZV9wb3J0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDEzZjExZjQuLmE1NmQ5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiBzdGF0aWMgY2hhciBtdjY0M3h4X2V0aF9kcml2ZXJfbmFtZVtdID0gIm12NjQzeHhfZXRoIjsKQEAgLTIyNyw2ICsyMjgsMTIgQEAKICNkZWZpbmUgUlhfRU5BQkxFX0lOVEVSUlVQVAkJMHgyMDAwMDAwMAogI2RlZmluZSBSWF9GSVJTVF9ERVNDCQkJMHgwODAwMDAwMAogI2RlZmluZSBSWF9MQVNUX0RFU0MJCQkweDA0MDAwMDAwCisjZGVmaW5lIFJYX0lQX0hEUl9PSwkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgUlhfUEtUX0lTX0lQVjQJCQkweDAxMDAwMDAwCisjZGVmaW5lIFJYX1BLVF9JU19FVEhFUk5FVFYyCQkweDAwODAwMDAwCisjZGVmaW5lIFJYX1BLVF9MQVlFUjRfVFlQRV9NQVNLCQkweDAwNjAwMDAwCisjZGVmaW5lIFJYX1BLVF9MQVlFUjRfVFlQRV9UQ1BfSVBWNAkweDAwMDAwMDAwCisjZGVmaW5lIFJYX1BLVF9JU19WTEFOX1RBR0dFRAkJMHgwMDA4MDAwMAogCiAvKiBUWCBkZXNjcmlwdG9yIGNvbW1hbmQgKi8KICNkZWZpbmUgVFhfRU5BQkxFX0lOVEVSUlVQVAkJMHgwMDgwMDAwMApAQCAtMjg2LDYgKzI5Myw5IEBACiAjZGVmaW5lIFRYX0JXX0NPTlRST0xfT0xEX0xBWU9VVAkxCiAjZGVmaW5lIFRYX0JXX0NPTlRST0xfTkVXX0xBWU9VVAkyCiAKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogCiAvKiBwZXItcG9ydCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBtaWJfY291bnRlcnMgewpAQCAtMzIxLDYgKzMzMSwxMiBAQAogCXUzMiBsYXRlX2NvbGxpc2lvbjsKIH07CiAKK3N0cnVjdCBscm9fY291bnRlcnMgeworCXUzMiBscm9fYWdncmVnYXRlZDsKKwl1MzIgbHJvX2ZsdXNoZWQ7CisJdTMyIGxyb19ub19kZXNjOworfTsKKwogc3RydWN0IHJ4X3F1ZXVlIHsKIAlpbnQgaW5kZXg7CiAKQEAgLTMzNCw2ICszNTAsOSBAQAogCWRtYV9hZGRyX3QgcnhfZGVzY19kbWE7CiAJaW50IHJ4X2Rlc2NfYXJlYV9zaXplOwogCXN0cnVjdCBza19idWZmICoqcnhfc2tiOworCisJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CisJc3RydWN0IG5ldF9scm9fZGVzYyBscm9fYXJyWzhdOwogfTsKIAogc3RydWN0IHR4X3F1ZXVlIHsKQEAgLTM2OSw2ICszODgsOCBAQAogCXNwaW5sb2NrX3QgbWliX2NvdW50ZXJzX2xvY2s7CiAJc3RydWN0IG1pYl9jb3VudGVycyBtaWJfY291bnRlcnM7CiAKKwlzdHJ1Y3QgbHJvX2NvdW50ZXJzIGxyb19jb3VudGVyczsKKwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7CiAKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKQEAgLTM4NSw3ICs0MDYsNyBAQAogCS8qCiAJICogUlggc3RhdGUuCiAJICovCi0JaW50IGRlZmF1bHRfcnhfcmluZ19zaXplOworCWludCByeF9yaW5nX3NpemU7CiAJdW5zaWduZWQgbG9uZyByeF9kZXNjX3NyYW1fYWRkcjsKIAlpbnQgcnhfZGVzY19zcmFtX3NpemU7CiAJaW50IHJ4cV9jb3VudDsKQEAgLTM5NSw3ICs0MTYsNyBAQAogCS8qCiAJICogVFggc3RhdGUuCiAJICovCi0JaW50IGRlZmF1bHRfdHhfcmluZ19zaXplOworCWludCB0eF9yaW5nX3NpemU7CiAJdW5zaWduZWQgbG9uZyB0eF9kZXNjX3NyYW1fYWRkcjsKIAlpbnQgdHhfZGVzY19zcmFtX3NpemU7CiAJaW50IHR4cV9jb3VudDsKQEAgLTQ5MywxMiArNTE0LDQwIEBACiAKIAogLyogcnggbmFwaSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CittdjY0M3h4X2dldF9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCisJCSAgICAgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGNtZF9zdHMgPSAodW5zaWduZWQgbG9uZylwcml2OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGlzIHBhY2tldCBpcyBFdGhlcm5ldCBJSSwgaXMgbm90IFZMQU4KKwkgKiB0YWdnZWQsIGlzIElQdjQsIGhhcyBhIHZhbGlkIElQIGhlYWRlciwgYW5kIGlzIFRDUC4KKwkgKi8KKwlpZiAoKGNtZF9zdHMgJiAoUlhfSVBfSERSX09LIHwgUlhfUEtUX0lTX0lQVjQgfAorCQkgICAgICAgUlhfUEtUX0lTX0VUSEVSTkVUVjIgfCBSWF9QS1RfTEFZRVI0X1RZUEVfTUFTSyB8CisJCSAgICAgICBSWF9QS1RfSVNfVkxBTl9UQUdHRUQpKSAhPQorCSAgICAoUlhfSVBfSERSX09LIHwgUlhfUEtUX0lTX0lQVjQgfAorCSAgICAgUlhfUEtUX0lTX0VUSEVSTkVUVjIgfCBSWF9QS1RfTEFZRVI0X1RZUEVfVENQX0lQVjQpKQorCQlyZXR1cm4gLTE7CisKKwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBpcF9oZHJsZW4oc2tiKSk7CisJKmlwaGRyID0gaXBfaGRyKHNrYik7CisJKnRjcGggPSB0Y3BfaGRyKHNrYik7CisJKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ4cV9wcm9jZXNzKHN0cnVjdCByeF9xdWV1ZSAqcnhxLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHJ4cV90b19tcChyeHEpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZtcC0+ZGV2LT5zdGF0czsKKwlpbnQgbHJvX2ZsdXNoX25lZWRlZDsKIAlpbnQgcng7CiAKKwlscm9fZmx1c2hfbmVlZGVkID0gMDsKIAlyeCA9IDA7CiAJd2hpbGUgKHJ4IDwgYnVkZ2V0ICYmIHJ4cS0+cnhfZGVzY19jb3VudCkgewogCQlzdHJ1Y3QgcnhfZGVzYyAqcnhfZGVzYzsKQEAgLTU1OCw3ICs2MDcsMTMgQEAKIAkJaWYgKGNtZF9zdHMgJiBMQVlFUl80X0NIRUNLU1VNX09LKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbXAtPmRldik7Ci0JCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisKKwkJaWYgKHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCisJCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCQkJbHJvX3JlY2VpdmVfc2tiKCZyeHEtPmxyb19tZ3IsIHNrYiwgKHZvaWQgKiljbWRfc3RzKTsKKwkJCWxyb19mbHVzaF9uZWVkZWQgPSAxOworCQl9IGVsc2UKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKIAkJY29udGludWU7CiAKQEAgLTU3OSw2ICs2MzQsOSBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCisJaWYgKGxyb19mbHVzaF9uZWVkZWQpCisJCWxyb19mbHVzaF9hbGwoJnJ4cS0+bHJvX21ncik7CisKIAlpZiAocnggPCBidWRnZXQpCiAJCW1wLT53b3JrX3J4ICY9IH4oMSA8PCByeHEtPmluZGV4KTsKIApAQCAtOTA3LDcgKzk2NSw3IEBACiAKIAkJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCQlpZiAoc2tiX3F1ZXVlX2xlbigmbXAtPnJ4X3JlY3ljbGUpIDwKLQkJCQkJbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplICYmCisJCQkJCW1wLT5yeF9yaW5nX3NpemUgJiYKIAkJCSAgICBza2JfcmVjeWNsZV9jaGVjayhza2IsIG1wLT5za2Jfc2l6ZSArCiAJCQkJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLSAxKSkKIAkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZtcC0+cnhfcmVjeWNsZSwgc2tiKTsKQEAgLTExNTgsNiArMTIxNiwyNiBAQAogCXJldHVybiBzdGF0czsKIH0KIAorc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZ3JhYl9scm9fc3RhdHMoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXUzMiBscm9fYWdncmVnYXRlZCA9IDA7CisJdTMyIGxyb19mbHVzaGVkID0gMDsKKwl1MzIgbHJvX25vX2Rlc2MgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wLT5yeHFfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgcnhfcXVldWUgKnJ4cSA9IG1wLT5yeHEgKyBpOworCisJCWxyb19hZ2dyZWdhdGVkICs9IHJ4cS0+bHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOworCQlscm9fZmx1c2hlZCArPSByeHEtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKKwkJbHJvX25vX2Rlc2MgKz0gcnhxLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CisJfQorCisJbXAtPmxyb19jb3VudGVycy5scm9fYWdncmVnYXRlZCA9IGxyb19hZ2dyZWdhdGVkOworCW1wLT5scm9fY291bnRlcnMubHJvX2ZsdXNoZWQgPSBscm9fZmx1c2hlZDsKKwltcC0+bHJvX2NvdW50ZXJzLmxyb19ub19kZXNjID0gbHJvX25vX2Rlc2M7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTMyIG1pYl9yZWFkKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gcmRsKG1wLCBNSUJfQ09VTlRFUlMobXAtPnBvcnRfbnVtKSArIG9mZnNldCk7CkBAIC0xMjIxLDYgKzEyOTksODUgQEAKIH0KIAogCisvKiBpbnRlcnJ1cHQgY29hbGVzY2luZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBIYXJkd2FyZSBjb2FsZXNjaW5nIHBhcmFtZXRlcnMgYXJlIHNldCBpbiB1bml0cyBvZiA2NCB0X2NsaworICogY3ljbGVzLiAgSS5lLjoKKyAqCisgKgljb2FsX2RlbGF5X2luX3VzZWMgPSA2NDAwMDAwMCAqIHJlZ2lzdGVyX3ZhbHVlIC8gdF9jbGtfcmF0ZQorICoKKyAqCXJlZ2lzdGVyX3ZhbHVlID0gY29hbF9kZWxheV9pbl91c2VjICogdF9jbGtfcmF0ZSAvIDY0MDAwMDAwCisgKgorICogSW4gdGhlIC0+c2V0KigpIG1ldGhvZHMsIHdlIHJvdW5kIHRoZSBjb21wdXRlZCByZWdpc3RlciB2YWx1ZQorICogdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcnhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJdTMyIHZhbCA9IHJkbHAobXAsIFNETUFfQ09ORklHKTsKKwl1NjQgdGVtcDsKKworCWlmIChtcC0+c2hhcmVkLT5leHRlbmRlZF9yeF9jb2FsX2xpbWl0KQorCQl0ZW1wID0gKCh2YWwgJiAweDAyMDAwMDAwKSA+PiAxMCkgfCAoKHZhbCAmIDB4MDAzZmZmODApID4+IDcpOworCWVsc2UKKwkJdGVtcCA9ICh2YWwgJiAweDAwM2ZmZjAwKSA+PiA4OworCisJdGVtcCAqPSA2NDAwMDAwMDsKKwlkb19kaXYodGVtcCwgbXAtPnNoYXJlZC0+dF9jbGspOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpdGVtcDsKK30KKworc3RhdGljIHZvaWQgc2V0X3J4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBpbnQgdXNlYykKK3sKKwl1NjQgdGVtcDsKKwl1MzIgdmFsOworCisJdGVtcCA9ICh1NjQpdXNlYyAqIG1wLT5zaGFyZWQtPnRfY2xrOworCXRlbXAgKz0gMzE5OTk5OTk7CisJZG9fZGl2KHRlbXAsIDY0MDAwMDAwKTsKKworCXZhbCA9IHJkbHAobXAsIFNETUFfQ09ORklHKTsKKwlpZiAobXAtPnNoYXJlZC0+ZXh0ZW5kZWRfcnhfY29hbF9saW1pdCkgeworCQlpZiAodGVtcCA+IDB4ZmZmZikKKwkJCXRlbXAgPSAweGZmZmY7CisJCXZhbCAmPSB+MHgwMjNmZmY4MDsKKwkJdmFsIHw9ICh0ZW1wICYgMHg4MDAwKSA8PCAxMDsKKwkJdmFsIHw9ICh0ZW1wICYgMHg3ZmZmKSA8PCA3OworCX0gZWxzZSB7CisJCWlmICh0ZW1wID4gMHgzZmZmKQorCQkJdGVtcCA9IDB4M2ZmZjsKKwkJdmFsICY9IH4weDAwM2ZmZjAwOworCQl2YWwgfD0gKHRlbXAgJiAweDNmZmYpIDw8IDg7CisJfQorCXdybHAobXAsIFNETUFfQ09ORklHLCB2YWwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF90eF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCkKK3sKKwl1NjQgdGVtcDsKKworCXRlbXAgPSAocmRscChtcCwgVFhfRklGT19VUkdFTlRfVEhSRVNIT0xEKSAmIDB4M2ZmZjApID4+IDQ7CisJdGVtcCAqPSA2NDAwMDAwMDsKKwlkb19kaXYodGVtcCwgbXAtPnNoYXJlZC0+dF9jbGspOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpdGVtcDsKK30KKworc3RhdGljIHZvaWQgc2V0X3R4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBpbnQgdXNlYykKK3sKKwl1NjQgdGVtcDsKKworCXRlbXAgPSAodTY0KXVzZWMgKiBtcC0+c2hhcmVkLT50X2NsazsKKwl0ZW1wICs9IDMxOTk5OTk5OworCWRvX2Rpdih0ZW1wLCA2NDAwMDAwMCk7CisKKwlpZiAodGVtcCA+IDB4M2ZmZikKKwkJdGVtcCA9IDB4M2ZmZjsKKworCXdybHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCwgdGVtcCA8PCA0KTsKK30KKworCiAvKiBldGh0b29sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyB7CiAJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOwpAQCAtMTIzNyw2ICsxMzk0LDEwIEBACiAJeyAjbSwgRklFTERfU0laRU9GKHN0cnVjdCBtaWJfY291bnRlcnMsIG0pLAkJXAogCSAgLTEsIG9mZnNldG9mKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlLCBtaWJfY291bnRlcnMubSkgfQogCisjZGVmaW5lIExST1NUQVQobSkJCQkJCQlcCisJeyAjbSwgRklFTERfU0laRU9GKHN0cnVjdCBscm9fY291bnRlcnMsIG0pLAkJXAorCSAgLTEsIG9mZnNldG9mKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlLCBscm9fY291bnRlcnMubSkgfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG12NjQzeHhfZXRoX3N0YXRzIG12NjQzeHhfZXRoX3N0YXRzW10gPSB7CiAJU1NUQVQocnhfcGFja2V0cyksCiAJU1NUQVQodHhfcGFja2V0cyksCkBAIC0xMjc2LDEyICsxNDM3LDE1IEBACiAJTUlCU1RBVChiYWRfY3JjX2V2ZW50KSwKIAlNSUJTVEFUKGNvbGxpc2lvbiksCiAJTUlCU1RBVChsYXRlX2NvbGxpc2lvbiksCisJTFJPU1RBVChscm9fYWdncmVnYXRlZCksCisJTFJPU1RBVChscm9fZmx1c2hlZCksCisJTFJPU1RBVChscm9fbm9fZGVzYyksCiB9OwogCiBzdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCittdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5KHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0Jc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwogCiAJZXJyID0gcGh5X3JlYWRfc3RhdHVzKG1wLT5waHkpOwpAQCAtMTI5OCwxMCArMTQ2Miw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLW12NjQzeHhfZXRoX2dldF9zZXR0aW5nc19waHlsZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCittdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsCiAJCQkJIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIHBvcnRfc3RhdHVzOwogCiAJcG9ydF9zdGF0dXMgPSByZGxwKG1wLCBQT1JUX1NUQVRVUyk7CkBAIC0xMzM0LDEwICsxNDk3LDI0IEBACiB9CiAKIHN0YXRpYyBpbnQKK212NjQzeHhfZXRoX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG1wLT5waHkgIT0gTlVMTCkKKwkJcmV0dXJuIG12NjQzeHhfZXRoX2dldF9zZXR0aW5nc19waHkobXAsIGNtZCk7CisJZWxzZQorCQlyZXR1cm4gbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeWxlc3MobXAsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQKIG12NjQzeHhfZXRoX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCisJaWYgKG1wLT5waHkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgogCSAqIFRoZSBNQUMgZG9lcyBub3Qgc3VwcG9ydCAxMDAwYmFzZVRfSGFsZi4KIAkgKi8KQEAgLTEzNDYsMTMgKzE1MjMsNiBAQAogCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KG1wLT5waHksIGNtZCk7CiB9CiAKLXN0YXRpYyBpbnQKLW12NjQzeHhfZXRoX3NldF9zZXR0aW5nc19waHlsZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCiBzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQogewpAQCAtMTM2NywxMiArMTUzNywxMCBAQAogewogCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXR1cm4gZ2VucGh5X3Jlc3RhcnRfYW5lZyhtcC0+cGh5KTsKLX0KKwlpZiAobXAtPnBoeSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotc3RhdGljIGludCBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0X3BoeWxlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZ2VucGh5X3Jlc3RhcnRfYW5lZyhtcC0+cGh5KTsKIH0KIAogc3RhdGljIHUzMiBtdjY0M3h4X2V0aF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTM4MCw2ICsxNTQ4LDg2IEBACiAJcmV0dXJuICEhbmV0aWZfY2Fycmllcl9vayhkZXYpOwogfQogCitzdGF0aWMgaW50CittdjY0M3h4X2V0aF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwllYy0+cnhfY29hbGVzY2VfdXNlY3MgPSBnZXRfcnhfY29hbChtcCk7CisJZWMtPnR4X2NvYWxlc2NlX3VzZWNzID0gZ2V0X3R4X2NvYWwobXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK212NjQzeHhfZXRoX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNldF9yeF9jb2FsKG1wLCBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOworCXNldF90eF9jb2FsKG1wLCBlYy0+dHhfY29hbGVzY2VfdXNlY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittdjY0M3h4X2V0aF9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXIpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWVyLT5yeF9tYXhfcGVuZGluZyA9IDQwOTY7CisJZXItPnR4X21heF9wZW5kaW5nID0gNDA5NjsKKwllci0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJZXItPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKworCWVyLT5yeF9wZW5kaW5nID0gbXAtPnJ4X3Jpbmdfc2l6ZTsKKwllci0+dHhfcGVuZGluZyA9IG1wLT50eF9yaW5nX3NpemU7CisJZXItPnJ4X21pbmlfcGVuZGluZyA9IDA7CisJZXItPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworfQorCitzdGF0aWMgaW50CittdjY0M3h4X2V0aF9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXIpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChlci0+cnhfbWluaV9wZW5kaW5nIHx8IGVyLT5yeF9qdW1ib19wZW5kaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1wLT5yeF9yaW5nX3NpemUgPSBlci0+cnhfcGVuZGluZyA8IDQwOTYgPyBlci0+cnhfcGVuZGluZyA6IDQwOTY7CisJbXAtPnR4X3Jpbmdfc2l6ZSA9IGVyLT50eF9wZW5kaW5nIDwgNDA5NiA/IGVyLT50eF9wZW5kaW5nIDogNDA5NjsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbXY2NDN4eF9ldGhfc3RvcChkZXYpOworCQlpZiAobXY2NDN4eF9ldGhfb3BlbihkZXYpKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmZGV2LT5kZXYsCisJCQkJICAgImZhdGFsIGVycm9yIG9uIHJlLW9wZW5pbmcgZGV2aWNlIGFmdGVyICIKKwkJCQkgICAicmluZyBwYXJhbSBjaGFuZ2VcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMgorbXY2NDN4eF9ldGhfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuICEhKHJkbHAobXAsIFBPUlRfQ09ORklHKSAmIDB4MDIwMDAwMDApOworfQorCitzdGF0aWMgaW50CittdjY0M3h4X2V0aF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhfY3N1bSkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJd3JscChtcCwgUE9SVF9DT05GSUcsIHJ4X2NzdW0gPyAweDAyMDAwMDAwIDogMHgwMDAwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgdWludDMyX3Qgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKQogewpAQCAtMTQwMyw2ICsxNjUxLDcgQEAKIAogCW12NjQzeHhfZXRoX2dldF9zdGF0cyhkZXYpOwogCW1pYl9jb3VudGVyc191cGRhdGUobXApOworCW12NjQzeHhfZXRoX2dyYWJfbHJvX3N0YXRzKG1wKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG12NjQzeHhfZXRoX3N0YXRzKTsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyAqc3RhdDsKQEAgLTE0MzQsMjEgKzE2ODMsMTggQEAKIAkuZ2V0X2RydmluZm8JCT0gbXY2NDN4eF9ldGhfZ2V0X2RydmluZm8sCiAJLm53YXlfcmVzZXQJCT0gbXY2NDN4eF9ldGhfbndheV9yZXNldCwKIAkuZ2V0X2xpbmsJCT0gbXY2NDN4eF9ldGhfZ2V0X2xpbmssCisJLmdldF9jb2FsZXNjZQkJPSBtdjY0M3h4X2V0aF9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZQkJPSBtdjY0M3h4X2V0aF9zZXRfY29hbGVzY2UsCisJLmdldF9yaW5ncGFyYW0JCT0gbXY2NDN4eF9ldGhfZ2V0X3JpbmdwYXJhbSwKKwkuc2V0X3JpbmdwYXJhbQkJPSBtdjY0M3h4X2V0aF9zZXRfcmluZ3BhcmFtLAorCS5nZXRfcnhfY3N1bQkJPSBtdjY0M3h4X2V0aF9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gbXY2NDN4eF9ldGhfc2V0X3J4X2NzdW0sCisJLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCiAJLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9zdHJpbmdzCQk9IG12NjQzeHhfZXRoX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IG12NjQzeHhfZXRoX2dldF9ldGh0b29sX3N0YXRzLAotCS5nZXRfc3NldF9jb3VudAkJPSBtdjY0M3h4X2V0aF9nZXRfc3NldF9jb3VudCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbXY2NDN4eF9ldGhfZXRodG9vbF9vcHNfcGh5bGVzcyA9IHsKLQkuZ2V0X3NldHRpbmdzCQk9IG12NjQzeHhfZXRoX2dldF9zZXR0aW5nc19waHlsZXNzLAotCS5zZXRfc2V0dGluZ3MJCT0gbXY2NDN4eF9ldGhfc2V0X3NldHRpbmdzX3BoeWxlc3MsCi0JLmdldF9kcnZpbmZvCQk9IG12NjQzeHhfZXRoX2dldF9kcnZpbmZvLAotCS5ud2F5X3Jlc2V0CQk9IG12NjQzeHhfZXRoX253YXlfcmVzZXRfcGh5bGVzcywKLQkuZ2V0X2xpbmsJCT0gbXY2NDN4eF9ldGhfZ2V0X2xpbmssCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF9zdHJpbmdzCQk9IG12NjQzeHhfZXRoX2dldF9zdHJpbmdzLAotCS5nZXRfZXRodG9vbF9zdGF0cwk9IG12NjQzeHhfZXRoX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCisJLnNldF9mbGFncwkJPSBldGh0b29sX29wX3NldF9mbGFncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQsCiB9OwogCkBAIC0xNjM3LDcgKzE4ODMsNyBAQAogCiAJcnhxLT5pbmRleCA9IGluZGV4OwogCi0JcnhxLT5yeF9yaW5nX3NpemUgPSBtcC0+ZGVmYXVsdF9yeF9yaW5nX3NpemU7CisJcnhxLT5yeF9yaW5nX3NpemUgPSBtcC0+cnhfcmluZ19zaXplOwogCiAJcnhxLT5yeF9kZXNjX2NvdW50ID0gMDsKIAlyeHEtPnJ4X2N1cnJfZGVzYyA9IDA7CkBAIC0xNjgzLDYgKzE5MjksMTkgQEAKIAkJCQkJbmV4dGkgKiBzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpOwogCX0KIAorCXJ4cS0+bHJvX21nci5kZXYgPSBtcC0+ZGV2OworCW1lbXNldCgmcnhxLT5scm9fbWdyLnN0YXRzLCAwLCBzaXplb2YocnhxLT5scm9fbWdyLnN0YXRzKSk7CisJcnhxLT5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKKwlyeHEtPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJcnhxLT5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJcnhxLT5scm9fbWdyLm1heF9kZXNjID0gQVJSQVlfU0laRShyeHEtPmxyb19hcnIpOworCXJ4cS0+bHJvX21nci5tYXhfYWdnciA9IDMyOworCXJ4cS0+bHJvX21nci5mcmFnX2FsaWduX3BhZCA9IDA7CisJcnhxLT5scm9fbWdyLmxyb19hcnIgPSByeHEtPmxyb19hcnI7CisJcnhxLT5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gbXY2NDN4eF9nZXRfc2tiX2hlYWRlcjsKKworCW1lbXNldCgmcnhxLT5scm9fYXJyLCAwLCBzaXplb2YocnhxLT5scm9fYXJyKSk7CisKIAlyZXR1cm4gMDsKIAogCkBAIC0xNzM3LDcgKzE5OTYsNyBAQAogCiAJdHhxLT5pbmRleCA9IGluZGV4OwogCi0JdHhxLT50eF9yaW5nX3NpemUgPSBtcC0+ZGVmYXVsdF90eF9yaW5nX3NpemU7CisJdHhxLT50eF9yaW5nX3NpemUgPSBtcC0+dHhfcmluZ19zaXplOwogCiAJdHhxLT50eF9kZXNjX2NvdW50ID0gMDsKIAl0eHEtPnR4X2N1cnJfZGVzYyA9IDA7CkBAIC0yMDMwLDExICsyMjg5LDYgQEAKIAl9CiAKIAkvKgotCSAqIEFkZCBjb25maWd1cmVkIHVuaWNhc3QgYWRkcmVzcyB0byBhZGRyZXNzIGZpbHRlciB0YWJsZS4KLQkgKi8KLQltdjY0M3h4X2V0aF9wcm9ncmFtX3VuaWNhc3RfZmlsdGVyKG1wLT5kZXYpOwotCi0JLyoKIAkgKiBSZWNlaXZlIGFsbCB1bm1hdGNoZWQgdW5pY2FzdCwgVENQLCBVRFAsIEJQRFUgYW5kIGJyb2FkY2FzdAogCSAqIGZyYW1lcyB0byBSWCBxdWV1ZSAjMCwgYW5kIGluY2x1ZGUgdGhlIHBzZXVkby1oZWFkZXIgd2hlbgogCSAqIGNhbGN1bGF0aW5nIHJlY2VpdmUgY2hlY2tzdW1zLgpAQCAtMjA0Nyw2ICsyMzAxLDExIEBACiAJd3JscChtcCwgUE9SVF9DT05GSUdfRVhULCAweDAwMDAwMDAwKTsKIAogCS8qCisJICogQWRkIGNvbmZpZ3VyZWQgdW5pY2FzdCBhZGRyZXNzZXMgdG8gYWRkcmVzcyBmaWx0ZXIgdGFibGUuCisJICovCisJbXY2NDN4eF9ldGhfcHJvZ3JhbV91bmljYXN0X2ZpbHRlcihtcC0+ZGV2KTsKKworCS8qCiAJICogRW5hYmxlIHRoZSByZWNlaXZlIHF1ZXVlcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbXAtPnJ4cV9jb3VudDsgaSsrKSB7CkBAIC0yMDYxLDM2ICsyMzIwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9yeF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IGRlbGF5KQotewotCXVuc2lnbmVkIGludCBjb2FsID0gKChtcC0+c2hhcmVkLT50X2NsayAvIDEwMDAwMDApICogZGVsYXkpIC8gNjQ7Ci0JdTMyIHZhbDsKLQotCXZhbCA9IHJkbHAobXAsIFNETUFfQ09ORklHKTsKLQlpZiAobXAtPnNoYXJlZC0+ZXh0ZW5kZWRfcnhfY29hbF9saW1pdCkgewotCQlpZiAoY29hbCA+IDB4ZmZmZikKLQkJCWNvYWwgPSAweGZmZmY7Ci0JCXZhbCAmPSB+MHgwMjNmZmY4MDsKLQkJdmFsIHw9IChjb2FsICYgMHg4MDAwKSA8PCAxMDsKLQkJdmFsIHw9IChjb2FsICYgMHg3ZmZmKSA8PCA3OwotCX0gZWxzZSB7Ci0JCWlmIChjb2FsID4gMHgzZmZmKQotCQkJY29hbCA9IDB4M2ZmZjsKLQkJdmFsICY9IH4weDAwM2ZmZjAwOwotCQl2YWwgfD0gKGNvYWwgJiAweDNmZmYpIDw8IDg7Ci0JfQotCXdybHAobXAsIFNETUFfQ09ORklHLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdHhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGludCBkZWxheSkKLXsKLQl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwotCi0JaWYgKGNvYWwgPiAweDNmZmYpCi0JCWNvYWwgPSAweDNmZmY7Ci0Jd3JscChtcCwgVFhfRklGT19VUkdFTlRfVEhSRVNIT0xELCAoY29hbCAmIDB4M2ZmZikgPDwgNCk7Ci19Ci0KIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3JlY2FsY19za2Jfc2l6ZShzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCiB7CiAJaW50IHNrYl9zaXplOwpAQCAtMjE1OSwxMyArMjM4OCw4IEBACiAJCX0KIAl9CiAKLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCiAJcG9ydF9zdGFydChtcCk7CiAKLQlzZXRfcnhfY29hbChtcCwgMCk7Ci0Jc2V0X3R4X2NvYWwobXAsIDApOwotCiAJd3JscChtcCwgSU5UX01BU0tfRVhULCBJTlRfRVhUX0xJTktfUEhZIHwgSU5UX0VYVF9UWCk7CiAJd3JscChtcCwgSU5UX01BU0ssIElOVF9UWF9FTkQgfCBJTlRfUlggfCBJTlRfRVhUKTsKIApAQCAtMjUzMSwxNyArMjc1NSwxNyBAQAogCWVsc2UKIAkJdWNfYWRkcl9nZXQobXAsIGRldi0+ZGV2X2FkZHIpOwogCi0JbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplID0gREVGQVVMVF9SWF9RVUVVRV9TSVpFOworCW1wLT5yeF9yaW5nX3NpemUgPSBERUZBVUxUX1JYX1FVRVVFX1NJWkU7CiAJaWYgKHBkLT5yeF9xdWV1ZV9zaXplKQotCQltcC0+ZGVmYXVsdF9yeF9yaW5nX3NpemUgPSBwZC0+cnhfcXVldWVfc2l6ZTsKKwkJbXAtPnJ4X3Jpbmdfc2l6ZSA9IHBkLT5yeF9xdWV1ZV9zaXplOwogCW1wLT5yeF9kZXNjX3NyYW1fYWRkciA9IHBkLT5yeF9zcmFtX2FkZHI7CiAJbXAtPnJ4X2Rlc2Nfc3JhbV9zaXplID0gcGQtPnJ4X3NyYW1fc2l6ZTsKIAogCW1wLT5yeHFfY291bnQgPSBwZC0+cnhfcXVldWVfY291bnQgPyA6IDE7CiAKLQltcC0+ZGVmYXVsdF90eF9yaW5nX3NpemUgPSBERUZBVUxUX1RYX1FVRVVFX1NJWkU7CisJbXAtPnR4X3Jpbmdfc2l6ZSA9IERFRkFVTFRfVFhfUVVFVUVfU0laRTsKIAlpZiAocGQtPnR4X3F1ZXVlX3NpemUpCi0JCW1wLT5kZWZhdWx0X3R4X3Jpbmdfc2l6ZSA9IHBkLT50eF9xdWV1ZV9zaXplOworCQltcC0+dHhfcmluZ19zaXplID0gcGQtPnR4X3F1ZXVlX3NpemU7CiAJbXAtPnR4X2Rlc2Nfc3JhbV9hZGRyID0gcGQtPnR4X3NyYW1fYWRkcjsKIAltcC0+dHhfZGVzY19zcmFtX3NpemUgPSBwZC0+dHhfc3JhbV9zaXplOwogCkBAIC0yNTg4LDcgKzI4MTIsNyBAQAogCiAJcGh5X3Jlc2V0KG1wKTsKIAotCXBoeV9hdHRhY2gobXAtPmRldiwgcGh5LT5kZXYuYnVzX2lkLCAwLCBQSFlfSU5URVJGQUNFX01PREVfR01JSSk7CisJcGh5X2F0dGFjaChtcC0+ZGV2LCBkZXZfbmFtZSgmcGh5LT5kZXYpLCAwLCBQSFlfSU5URVJGQUNFX01PREVfR01JSSk7CiAKIAlpZiAoc3BlZWQgPT0gMCkgewogCQlwaHktPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKQEAgLTI2MzIsNiArMjg1NiwyMSBAQAogCXdybHAobXAsIFBPUlRfU0VSSUFMX0NPTlRST0wsIHBzY3IpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG12NjQzeHhfZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG12NjQzeHhfZXRoX29wZW4sCisJLm5kb19zdG9wCQk9IG12NjQzeHhfZXRoX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IG12NjQzeHhfZXRoX3htaXQsCisJLm5kb19zZXRfcnhfbW9kZQk9IG12NjQzeHhfZXRoX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbXY2NDN4eF9ldGhfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gbXY2NDN4eF9ldGhfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG12NjQzeHhfZXRoX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9IG12NjQzeHhfZXRoX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gbXY2NDN4eF9ldGhfZ2V0X3N0YXRzLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBtdjY0M3h4X2V0aF9uZXRwb2xsLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IG12NjQzeHhfZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKnBkOwpAQCAtMjY3MiwxMiArMjkxMSwxMCBAQAogCWlmIChwZC0+cGh5X2FkZHIgIT0gTVY2NDNYWF9FVEhfUEhZX05PTkUpCiAJCW1wLT5waHkgPSBwaHlfc2NhbihtcCwgcGQtPnBoeV9hZGRyKTsKIAotCWlmIChtcC0+cGh5ICE9IE5VTEwpIHsKKwlpZiAobXAtPnBoeSAhPSBOVUxMKQogCQlwaHlfaW5pdChtcCwgcGQtPnNwZWVkLCBwZC0+ZHVwbGV4KTsKLQkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRoX2V0aHRvb2xfb3BzKTsKLQl9IGVsc2UgewotCQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbXY2NDN4eF9ldGhfZXRodG9vbF9vcHNfcGh5bGVzcyk7Ci0JfQorCisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRoX2V0aHRvb2xfb3BzKTsKIAogCWluaXRfcHNjcihtcCwgcGQtPnNwZWVkLCBwZC0+ZHVwbGV4KTsKIApAQCAtMjcwNSwxOCArMjk0Miw4IEBACiAJQlVHX09OKCFyZXMpOwogCWRldi0+aXJxID0gcmVzLT5zdGFydDsKIAotCWRldi0+Z2V0X3N0YXRzID0gbXY2NDN4eF9ldGhfZ2V0X3N0YXRzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbXY2NDN4eF9ldGhfeG1pdDsKLQlkZXYtPm9wZW4gPSBtdjY0M3h4X2V0aF9vcGVuOwotCWRldi0+c3RvcCA9IG12NjQzeHhfZXRoX3N0b3A7Ci0JZGV2LT5zZXRfcnhfbW9kZSA9IG12NjQzeHhfZXRoX3NldF9yeF9tb2RlOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbXY2NDN4eF9ldGhfc2V0X21hY19hZGRyZXNzOwotCWRldi0+ZG9faW9jdGwgPSBtdjY0M3h4X2V0aF9pb2N0bDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1OwotCWRldi0+dHhfdGltZW91dCA9IG12NjQzeHhfZXRoX3R4X3RpbWVvdXQ7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IG12NjQzeHhfZXRoX25ldHBvbGw7Ci0jZW5kaWYKKwlkZXYtPm5ldGRldl9vcHMgPSAmbXY2NDN4eF9ldGhfbmV0ZGV2X29wczsKKwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAyICogSFo7CiAJZGV2LT5iYXNlX2FkZHIgPSAwOwogCkBAIC0yNzI4LDYgKzI5NTUsMTEgQEAKIAlpZiAobXAtPnNoYXJlZC0+d2luX3Byb3RlY3QpCiAJCXdybChtcCwgV0lORE9XX1BST1RFQ1QobXAtPnBvcnRfbnVtKSwgbXAtPnNoYXJlZC0+d2luX3Byb3RlY3QpOwogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCXNldF9yeF9jb2FsKG1wLCAyNTApOworCXNldF90eF9jb2FsKG1wLCAwKTsKKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggZTljMTI5Ni4uYWVhOWZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xMzI0LDYgKzEzMjQsNyBAQAogCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gMDsKIAl9CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgc3MgLSAmbWdwLT5zc1swXSk7CiAKIAlpZiAobWdwLT5jc3VtX2ZsYWcpIHsKIAkJaWYgKChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgfHwKQEAgLTE1MTQsNyArMTUxNSw3IEBACiAJd29ya19kb25lID0gbXlyaTEwZ2VfY2xlYW5fcnhfZG9uZShzcywgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXB1dF9iZTMyKGh0b25sKDMpLCBzcy0+aXJxX2NsYWltKTsKIAl9CiAJcmV0dXJuIHdvcmtfZG9uZTsKQEAgLTE1MzIsNyArMTUzMyw3IEBACiAJLyogYW4gaW50ZXJydXB0IG9uIGEgbm9uLXplcm8gcmVjZWl2ZS1vbmx5IHNsaWNlIGlzIGltcGxpY2l0bHkKIAkgKiB2YWxpZCAgc2luY2UgTVNJLVggaXJxcyBhcmUgbm90IHNoYXJlZCAqLwogCWlmICgobWdwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9PSAxKSAmJiAoc3MgIT0gbWdwLT5zcykpIHsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnNzLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmc3MtPm5hcGkpOwogCQlyZXR1cm4gKElSUV9IQU5ETEVEKTsKIAl9CiAKQEAgLTE1NDMsNyArMTU0NCw3IEBACiAJLyogbG93IGJpdCBpbmRpY2F0ZXMgcmVjZWl2ZXMgYXJlIHByZXNlbnQsIHNvIHNjaGVkdWxlCiAJICogbmFwaSBwb2xsIGhhbmRsZXIgKi8KIAlpZiAoc3RhdHMtPnZhbGlkICYgMSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnNzLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmc3MtPm5hcGkpOwogCiAJaWYgKCFtZ3AtPm1zaV9lbmFibGVkICYmICFtZ3AtPm1zaXhfZW5hYmxlZCkgewogCQlwdXRfYmUzMigwLCBtZ3AtPmlycV9kZWFzc2VydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaAppbmRleCBjYWE2Y2JiLi42MmExY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIE1DUF9UWVBFX0VUSCAweDQ1NTQ0ODIwCS8qICJFVEggIiAqLwogI2RlZmluZSBNQ1BfVFlQRV9NQ1AwIDB4NGQ0MzUwMzAJLyogIk1DUDAiICovCiAjZGVmaW5lIE1DUF9UWVBFX0RGTFQgMHgyMDIwMjAyMAkvKiAiICAgICIgKi8KKyNkZWZpbmUgTUNQX1RZUEVfRVRIWiAweDQ1NTQ0ODVhCS8qICJFVEhaIiAqLwogCiBzdHJ1Y3QgbWNwX2dlbl9oZWFkZXIgewogCS8qIHRoZSBmaXJzdCA0IGZpZWxkcyBhcmUgZmlsbGVkIGF0IGNvbXBpbGUgdGltZSAqLwpAQCAtNDMsNyArNDQsMTUgQEAKIAl1bnNpZ25lZCBtc2l4X3RhYmxlX2FkZHI7CS8qIHN0YXJ0IGFkZHJlc3Mgb2YgbXNpeCB0YWJsZSBpbiBmaXJtd2FyZSAqLwogCXVuc2lnbmVkIGJzc19hZGRyOwkvKiBzdGFydCBvZiBic3MgKi8KIAl1bnNpZ25lZCBmZWF0dXJlczsKKwl1bnNpZ25lZCBlZV9oZHJfYWRkcjsKIAkvKiA4ICovCiB9OwogCitzdHJ1Y3Qgem1jcF9pbmZvIHsKKwl1bnNpZ25lZCBpbmZvX2xlbjsKKwl1bnNpZ25lZCB6bWNwX2FkZHI7CisJdW5zaWduZWQgem1jcF9sZW47CisJdW5zaWduZWQgbWNwX2VkYXRhOworfTsKKwogI2VuZGlmCQkJCS8qIF9fTVlSSTEwR0VfTUNQX0dFTl9IRUFERVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCmluZGV4IDg5OWVkMDYuLjA4NTM0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCkBAIC03NDgsNyArNzQ4LDcgQEAKIAlzd2l0Y2ggKGV0aC0+aF9wcm90bykKIAl7CiAjaWZkZWYgQ09ORklHX0lORVQKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogIAkJcmV0dXJuIGFycF9maW5kKGV0aC0+aF9kZXN0LCBza2IpOwogI2VuZGlmCiAKQEAgLTg5Niw2ICs4OTYsMTcgQEAKIAkuY2FjaGVfdXBkYXRlCT0gbXlyaV9oZWFkZXJfY2FjaGVfdXBkYXRlLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBteXJpX29wcyA9IHsKKwkubmRvX29wZW4JCT0gbXlyaV9vcGVuLAorCS5uZG9fc3RvcAkJPSBteXJpX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBteXJpX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBteXJpX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG15cmlfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbXlyaV9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgbXlyaV9zYnVzX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CkBAIC0xMDQ4LDEzICsxMDU5LDkgQEAKIAlzYnVzX3dyaXRlbCgoMSA8PCBpKSwgbXAtPmNyZWdzICsgTVlSSUNUUkxfSVJRTFZMKTsKIAogCW1wLT5kZXYgPSBkZXY7Ci0JZGV2LT5vcGVuID0gJm15cmlfb3BlbjsKLQlkZXYtPnN0b3AgPSAmbXlyaV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZteXJpX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJm15cmlfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZteXJpX3NldF9tdWx0aWNhc3Q7CiAJZGV2LT5pcnEgPSBvcC0+aXJxc1swXTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbXlyaV9vcHM7CiAKIAkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciBub3cuICovCiAJREVUKCgiUmVxdWVzdGluZyBNWVJJY29tIElSUSBsaW5lLlxuIikpOwpAQCAtMTA2NSw3ICsxMDcyLDYgQEAKIAl9CiAKIAlkZXYtPm10dQkJPSBNWVJJTkVUX01UVTsKLQlkZXYtPmNoYW5nZV9tdHUJCT0gbXlyaV9jaGFuZ2VfbXR1OwogCWRldi0+aGVhZGVyX29wcwkJPSAmbXlyaV9oZWFkZXJfb3BzOwogCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAoRVRIX0hMRU4gKyBNWVJJX1BBRF9MRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IGM1ZGVjNTQuLmM5YmZlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogI2RlZmluZSBOQVRTRU1JX1JYX0xJTUlUCTIwNDYJLyogbWF4aW11bSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgKi8KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAgIEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRwODM4MXggZHJpdmVyLCB2ZXJzaW9uICIKICAgICAgIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIlxuIgogICBLRVJOX0lORk8gIiAgb3JpZ2luYWxseSBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgpAQCAtMjE5OCwxMCArMjE5OCwxMCBAQAogCiAJcHJlZmV0Y2goJm5wLT5yeF9za2J1ZmZbbnAtPmN1cl9yeCAlIFJYX1JJTkdfU0laRV0pOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkgewogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIHJlZ2lzdGVyIGZvciBwb2xsICovCiAJCW5hdHNlbWlfaXJxX2Rpc2FibGUoZGV2KTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCSAgICAgICAJICAgICAgICIlczogSWdub3JpbmcgaW50ZXJydXB0LCBzdGF0dXMgJSMwOHgsIG1hc2sgJSMwOHguXG4iLApAQCAtMjI1Myw3ICsyMjUzLDcgQEAKIAkJbnAtPmludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgSW50clN0YXR1cyk7CiAJfSB3aGlsZSAobnAtPmludHJfc3RhdHVzKTsKIAotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkvKiBSZWVuYWJsZSBpbnRlcnJ1cHRzIHByb3ZpZGluZyBub3RoaW5nIGlzIHRyeWluZyB0byBzaHV0CiAJICogdGhlIGNoaXAgZG93bi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMmstcGNpLmMgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCmluZGV4IGYwOTBkM2IuLmViNjZmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwpAQCAtNjIsOCArNjIsOSBAQAogI2luY2x1ZGUgIjgzOTAuaCIKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgRC4gQmVja2VyL1AuIEdvcnRtYWtlclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIEQuIEJlY2tlci9QLiBHb3J0bWFrZXJcbiI7CiAKICNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQogI2RlZmluZSBpbmxfbGUoYWRkcikgIGxlMzJfdG9fY3B1KGlubChhZGRyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMzIxMC5jIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKaW5kZXggZmFjNDNmZC4uNmE4NDNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUzMjEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogCQlpZiAocGh5c19tZW0gPCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJuZTMyMTAuYzogQ2FyZCBSQU0gb3ZlcmxhcHMgd2l0aCBub3JtYWwgbWVtb3J5ISEhXG4iKTsKIAkJCXByaW50ayhLRVJOX0NSSVQgIm5lMzIxMC5jOiBVc2UgRUlTQSBTQ1UgdG8gc2V0IGNhcmQgbWVtb3J5IGJlbG93IDFNQixcbiIpOwotCQkJcHJpbnRrKEtFUk5fQ1JJVCAibmUzMjEwLmM6IG9yIHRvIGFuIGFkZHJlc3MgYWJvdmUgMHglbHguXG4iLCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKKwkJCXByaW50ayhLRVJOX0NSSVQgIm5lMzIxMC5jOiBvciB0byBhbiBhZGRyZXNzIGFib3ZlIDB4JWxseC5cbiIsCisJCQkJKHU2NCl2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKIAkJCXByaW50ayhLRVJOX0NSSVQgIm5lMzIxMC5jOiBEcml2ZXIgTk9UIGluc3RhbGxlZC5cbiIpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQppbmRleCA4ZTdjNGM5Li5jZjAxYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogIyBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjEsMTEgKzIxLDEwIEBACiAjIAogIyBDb250YWN0IEluZm9ybWF0aW9uOgogIyAgICBpbmZvQG5ldHhlbi5jb20KLSMgTmV0WGVuLAotIyAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0jIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorIyBOZXRYZW4gSW5jLAorIyAxODkyMiBGb3JnZSBEcml2ZQorIyBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICMKLSMgTWFrZWZpbGUgZm9yIHRoZSBOZXRYZW4gTklDIERyaXZlcgogIwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IGY0ZGQ5YWMuLmM0MDgxNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsOSArMjIsMTAgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCisgKgogICovCiAKICNpZm5kZWYgX05FVFhFTl9OSUNfSF8KQEAgLTY1LDggKzY2LDggQEAKIAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA0CiAjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiAxMQotI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC4xMSIKKyNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiAzMAorI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC4zMCIKIAogI2RlZmluZSBORVRYRU5fVkVSU0lPTl9DT0RFKGEsIGIsIGMpCSgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCiAKQEAgLTc3LDE5ICs3OCwxOSBAQAogCiAjZGVmaW5lIFBIQU5fVkVORE9SX0lEIDB4NDA0MAogCi0jZGVmaW5lIFJDVl9ERVNDX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCByY3ZfZGVzYykgKiBhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCkKLSNkZWZpbmUgU1RBVFVTX0RFU0NfUklOR1NJWkUJXAotCShzaXplb2Yoc3RydWN0IHN0YXR1c19kZXNjKSogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCi0jZGVmaW5lIExST19ERVNDX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHJjdkRlc2NfdCkgKiBhZGFwdGVyLT5tYXhfbHJvX3J4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFRYX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlcikgKiBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCkKLSNkZWZpbmUgUkNWX0JVRkZTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyKSAqIHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCkKKyNkZWZpbmUgUkNWX0RFU0NfUklOR1NJWkUocmRzX3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCByY3ZfZGVzYykgKiAocmRzX3JpbmcpLT5udW1fZGVzYykKKyNkZWZpbmUgUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyKSAqIHJkc19yaW5nLT5udW1fZGVzYykKKyNkZWZpbmUgU1RBVFVTX0RFU0NfUklOR1NJWkUoc2RzX3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykgKiAoc2RzX3JpbmcpLT5udW1fZGVzYykKKyNkZWZpbmUgVFhfQlVGRl9SSU5HU0laRShhZGFwdGVyKQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bnVtX3R4ZCkKKyNkZWZpbmUgVFhfREVTQ19SSU5HU0laRShhZGFwdGVyKQlcCisJKHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICogYWRhcHRlci0+bnVtX3R4ZCkKKwogI2RlZmluZSBmaW5kX2RpZmZfYW1vbmcoYSxiLHJhbmdlKSAoKGEpPChiKT8oKGIpLShhKSk6KChiKSsocmFuZ2UpLShhKSkpCiAKLSNkZWZpbmUgTkVUWEVOX05FVERFVl9TVEFUVVMJCTB4MQogI2RlZmluZSBORVRYRU5fUkNWX1BST0RVQ0VSX09GRlNFVAkwCiAjZGVmaW5lIE5FVFhFTl9SQ1ZfUEVHX0RCX0lECQkyCiAjZGVmaW5lIE5FVFhFTl9IT1NUX0RVTU1ZX0RNQV9TSVpFIDEwMjQKQEAgLTE4OCwyMiArMTg5LDEyIEBACiAvKiBIb3N0IHdyaXRlcyB0aGUgZm9sbG93aW5nIHRvIG5vdGlmeSB0aGF0IGl0IGhhcyBkb25lIHRoZSBpbml0LWhhbmRzaGFrZSAqLwogI2RlZmluZSBQSEFOX0lOSVRJQUxJWkVfQUNLCTB4ZjAwZgogCi0jZGVmaW5lIE5VTV9SQ1ZfREVTQ19SSU5HUwkzCS8qIE5vIG9mIFJjdiBEZXNjcmlwdG9yIGNvbnRleHRzICovCisjZGVmaW5lIE5VTV9SQ1ZfREVTQ19SSU5HUwkzCisjZGVmaW5lIE5VTV9TVFNfREVTQ19SSU5HUwk0CiAKLS8qIGRlc2NyaXB0b3IgdHlwZXMgKi8KLSNkZWZpbmUgUkNWX0RFU0NfTk9STUFMCQkweDAxCi0jZGVmaW5lIFJDVl9ERVNDX0pVTUJPCQkweDAyCi0jZGVmaW5lIFJDVl9ERVNDX0xSTwkJMHgwNAotI2RlZmluZSBSQ1ZfREVTQ19OT1JNQUxfQ1RYSUQJMAotI2RlZmluZSBSQ1ZfREVTQ19KVU1CT19DVFhJRAkxCi0jZGVmaW5lIFJDVl9ERVNDX0xST19DVFhJRAkyCi0KLSNkZWZpbmUgUkNWX0RFU0NfVFlQRShJRCkgXAotCSgoSUQgPT0gUkNWX0RFU0NfSlVNQk9fQ1RYSUQpCVwKLQkJPyBSQ1ZfREVTQ19KVU1CTwlcCi0JCTogKChJRCA9PSBSQ1ZfREVTQ19MUk9fQ1RYSUQpCVwKLQkJCT8gUkNWX0RFU0NfTFJPIDoJXAotCQkJKFJDVl9ERVNDX05PUk1BTCkpKQorI2RlZmluZSBSQ1ZfUklOR19OT1JNQUwJMAorI2RlZmluZSBSQ1ZfUklOR19KVU1CTwkxCisjZGVmaW5lIFJDVl9SSU5HX0xSTwkyCiAKICNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SUwkJNDA5NgogI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTCQkxNjM4NApAQCAtMzU3LDEwICszNDgsNyBAQAogCQlfX2xlNjQgYWRkcl9idWZmZXIxOwogCX07CiAKLQlfX2xlMTYgYnVmZmVyMV9sZW5ndGg7Ci0JX19sZTE2IGJ1ZmZlcjJfbGVuZ3RoOwotCV9fbGUxNiBidWZmZXIzX2xlbmd0aDsKLQlfX2xlMTYgYnVmZmVyNF9sZW5ndGg7CisJX19sZTE2IGJ1ZmZlcl9sZW5ndGhbNF07CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC0zOTEsMTEgKzM3OSw4IEBACiAjZGVmaW5lIFNUQVRVU19DS1NVTV9PSwkJKDIpCiAKIC8qIG93bmVyIGJpdHMgb2Ygc3RhdHVzX2Rlc2MgKi8KLSNkZWZpbmUgU1RBVFVTX09XTkVSX0hPU1QJKDB4MSkKLSNkZWZpbmUgU1RBVFVTX09XTkVSX1BIQU5UT00JKDB4MikKLQotI2RlZmluZSBORVRYRU5fUFJPVF9JUAkJKDEpCi0jZGVmaW5lIE5FVFhFTl9QUk9UX1VOS05PV04JKDApCisjZGVmaW5lIFNUQVRVU19PV05FUl9IT1NUCSgweDFVTEwgPDwgNTYpCisjZGVmaW5lIFNUQVRVU19PV05FUl9QSEFOVE9NCSgweDJVTEwgPDwgNTYpCiAKIC8qIE5vdGU6IHNpemVvZihzdGF0dXNfZGVzYykgc2hvdWxkIGFsd2F5cyBiZSBhIG11dGxpcGxlIG9mIDIgKi8KIApAQCAtNDIxLDE1ICs0MDYsNiBAQAogI2RlZmluZSBuZXR4ZW5fZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEpCVwKIAkoKChzdHNfZGF0YSkgPj4gNTgpICYgMHgwM0YpCiAKLSNkZWZpbmUgbmV0eGVuX2dldF9zdHNfb3duZXIoc3RhdHVzX2Rlc2MpCVwKLQkoKGxlNjRfdG9fY3B1KChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEpID4+IDU2KSAmIDB4MDMpCi0jZGVmaW5lIG5ldHhlbl9zZXRfc3RzX293bmVyKHN0YXR1c19kZXNjLCB2YWwpCXsgXAotCShzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEgPSBcCi0JCSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhICYgXAotCQl+Y3B1X3RvX2xlNjQoMHgzVUxMIDw8IDU2KSkgfCBcCi0JCWNwdV90b19sZTY0KCh1NjQpKCh2YWwpICYgMHgzKSA8PCA1Nik7IFwKLX0KLQogc3RydWN0IHN0YXR1c19kZXNjIHsKIAkvKiBCaXQgcGF0dGVybjogMC0zIHBvcnQsIDQtNyBzdGF0dXMsIDgtMTEgdHlwZSwgMTItMjcgdG90YWxfbGVuZ3RoCiAJICAgMjgtNDMgcmVmZXJlbmNlX2hhbmRsZSwgNDQtNDcgcHJvdG9jb2wsIDQ4LTUyIHBrdF9vZmZzZXQKQEAgLTcxMiw2ICs2ODgsMTUgQEAKIAlORVRYRU5fRklYRURfU1RBUlQgPSAweDNGMDAwMAkvKiBiYWNrdXAgb2YgY3JiaW5pdCAqLwogfSBuZXR4ZW5fZmxhc2hfbWFwX3Q7CiAKKyNkZWZpbmUgTlhfRldfVkVSU0lPTl9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4NDA4KQorI2RlZmluZSBOWF9GV19TSVpFX09GRlNFVAkoTkVUWEVOX1VTRVJfU1RBUlQrMHg0MGMpCisjZGVmaW5lIE5YX0JJT1NfVkVSU0lPTl9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4ODNjKQorI2RlZmluZSBOWF9GV19NQUdJQ19PRkZTRVQJKE5FVFhFTl9CUkRDRkdfU1RBUlQrMHgxMjgpCisjZGVmaW5lIE5YX0ZXX01JTl9TSVpFCQkoMHgzZmZmZmYpCisjZGVmaW5lIE5YX1AyX01OX1JPTUlNQUdFCTAKKyNkZWZpbmUgTlhfUDNfQ1RfUk9NSU1BR0UJMQorI2RlZmluZSBOWF9QM19NTl9ST01JTUFHRQkyCisKICNkZWZpbmUgTkVUWEVOX1VTRVJfU1RBUlRfT0xEIE5FVFhFTl9QWEVfU1RBUlQJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAogI2RlZmluZSBORVRYRU5fRkxBU0hfU1RBUlQJCShORVRYRU5fQ1JCSU5JVF9TVEFSVCkKQEAgLTczOSw3ICs3MjQsNyBAQAogI2VuZGlmCiAKIC8qIE51bWJlciBvZiBzdGF0dXMgZGVzY3JpcHRvcnMgdG8gaGFuZGxlIHBlciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFYX1NUQVRVU19IQU5ETEUJKDEyOCkKKyNkZWZpbmUgTUFYX1NUQVRVU19IQU5ETEUJKDY0KQogCiAvKgogICogbmV0eGVuX3NrYl9mcmFne30gaXMgdG8gY29udGFpbiBtYXBwaW5nIGluZm8gZm9yIGVhY2ggU0cgbGlzdC4gVGhpcwpAQCAtNzgzLDkgKzc2OCw2IEBACiAJdTY0IGRtYTsKIAl1MTYgcmVmX2hhbmRsZTsKIAl1MTYgc3RhdGU7Ci0JdTMyIGxyb19leHBlY3RlZF9mcmFnczsKLQl1MzIgbHJvX2N1cnJlbnRfZnJhZ3M7Ci0JdTMyIGxyb19sZW5ndGg7CiB9OwogCiAvKiBCb2FyZCB0eXBlcyAqLwpAQCAtODAwLDIxICs3ODIsMTkgQEAKIAl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMDsKIAl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMTsKIAl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMjsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKIAl2b2lkIF9faW9tZW0gKmRiX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBkYl9sZW47CiAJdW5zaWduZWQgbG9uZyBwY2lfbGVuMDsKIAotCXU4IGN1dF90aHJvdWdoOwogCWludCBxZHJfc25fd2luZG93OwogCWludCBkZHJfbW5fd2luZG93OwogCXVuc2lnbmVkIGxvbmcgbW5fd2luX2NyYjsKIAl1bnNpZ25lZCBsb25nIG1zX3dpbl9jcmI7CiAKKwl1OCBjdXRfdGhyb3VnaDsKIAl1OCByZXZpc2lvbl9pZDsKLQl1MTYgYm9hcmRfdHlwZTsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gYm9hcmRjZmc7CisJdTE2IHBvcnRfdHlwZTsKKwlpbnQgYm9hcmRfdHlwZTsKIAl1MzIgbGlua3VwOwogCS8qIEFkZHJlc3Mgb2YgY21kIHJpbmcgaW4gUGhhbnRvbSAqLwogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqY21kX2Rlc2NfaGVhZDsKQEAgLTgyMyw4ICs4MDMsNiBAQAogCWludCBwY2lfZnVuYzsKIH07CiAKLSNkZWZpbmUgUkNWX1JJTkdfTFJPCVJDVl9ERVNDX0xSTwotCiAjZGVmaW5lIE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRQk2NAkvKiBXaXRoIEZDUyAqLwogI2RlZmluZSBFVEhFUk5FVF9GQ1NfU0laRQkJNAogCkBAIC04NTAsMTYgKzgyOCwzNiBAQAogICogYmUgb25lIFJjdiBEZXNjcmlwdG9yIGZvciBub3JtYWwgcGFja2V0cywgb25lIGZvciBqdW1ibyBhbmQgbWF5IGJlIG90aGVycy4KICAqLwogc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgewotCXUzMiBmbGFnczsKIAl1MzIgcHJvZHVjZXI7Ci0JZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci0JdTMyIGNyYl9yY3ZfcHJvZHVjZXI7CS8qIHJlZyBvZmZzZXQgKi8KLQlzdHJ1Y3QgcmN2X2Rlc2MgKmRlc2NfaGVhZDsJLyogYWRkcmVzcyBvZiByeCByaW5nIGluIFBoYW50b20gKi8KLQl1MzIgbWF4X3J4X2Rlc2NfY291bnQ7CisJdTMyIGNyYl9yY3ZfcHJvZHVjZXI7CisJdTMyIG51bV9kZXNjOwogCXUzMiBkbWFfc2l6ZTsKIAl1MzIgc2tiX3NpemU7Ci0Jc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CS8qIHJ4IGJ1ZmZlcnMgZm9yIHJlY2VpdmUgICAqLworCXUzMiBmbGFnczsKKwlzdHJ1Y3QgcmN2X2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmX2FycjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlzcGlubG9ja190IGxvY2s7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7Cit9OworCitzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyB7CisJdTMyIGNvbnN1bWVyOworCXUzMiBjcmJfc3RzX2NvbnN1bWVyOworCXUzMiBjcmJfaW50cl9tYXNrOworCXUzMiBudW1fZGVzYzsKKworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdFtOVU1fUkNWX0RFU0NfUklOR1NdOworCisJdTE2IGNsZWFuX3R4OworCXUxNiBwb3N0X3J4ZDsKKwlpbnQgaXJxOworCisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJY2hhciBuYW1lW0lGTkFNU0laKzRdOwogfTsKIAogLyoKQEAgLTg3NCwxMCArODcyLDcgQEAKIAl1MTYgdmlydF9wb3J0OwogCiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgcmRzX3JpbmdzW05VTV9SQ1ZfREVTQ19SSU5HU107Ci0JdTMyIHN0YXR1c19yeF9jb25zdW1lcjsKLQl1MzIgY3JiX3N0c19jb25zdW1lcjsJLyogcmVnIG9mZnNldCAqLwotCWRtYV9hZGRyX3QgcmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcjsKLQlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKnJjdl9zdGF0dXNfZGVzY19oZWFkOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nIHNkc19yaW5nc1tOVU1fU1RTX0RFU0NfUklOR1NdOwogfTsKIAogLyogTmV3IEhXIGNvbnRleHQgY3JlYXRpb24gKi8KQEAgLTEyMDMsMTMgKzExOTgsMTMgQEAKICNkZWZpbmUgTkVUWEVOX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXAogCSgoYWRhcHRlciktPmZsYWdzICYgKE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQgfCBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkpCiAKLSNkZWZpbmUgTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSCTEKKyNkZWZpbmUgTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSCU5VTV9TVFNfREVTQ19SSU5HUwogI2RlZmluZSBORVRYRU5fTVNJWF9UQkxfU1BBQ0UJCTgxOTIKICNkZWZpbmUgTkVUWEVOX1BDSV9SRUdfTVNJWF9UQkwJCTB4NDQKIAogI2RlZmluZSBORVRYRU5fREJfTUFQU0laRV9CWVRFUyAgICAJMHgxMDAwCiAKLSNkZWZpbmUgTkVUWEVOX05FVERFVl9XRUlHSFQgMTIwCisjZGVmaW5lIE5FVFhFTl9ORVRERVZfV0VJR0hUIDEyOAogI2RlZmluZSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQyA3NzcKICNkZWZpbmUgTkVUWEVOX05JQ19QRUdfVFVORSAwCiAKQEAgLTEyMjQsNyArMTIxOSw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlpbnQgcGNpX3VzaW5nX2RhYzsKLQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CiAJaW50IG10dTsKIAlpbnQgcG9ydG51bTsKQEAgLTEyMzYsNyArMTIzMCw2IEBACiAJbnhfbWFjX2xpc3RfdAkqbWFjX2xpc3Q7CiAKIAlzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cjsKLQl1MzIJY3JiX2ludHJfbWFzazsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ190YXNrOwogCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwpAQCAtMTI0NiwyMCArMTIzOSwyMCBAQAogCXUzMiBjcmJfd2luOwogCXJ3bG9ja190IGFkYXB0ZXJfbG9jazsKIAotCXVpbnQ2NF90IGRtYV9tYXNrOwotCiAJdTMyIGNtZF9wcm9kdWNlcjsKIAlfX2xlMzIgKmNtZF9jb25zdW1lcjsKIAl1MzIgbGFzdF9jbWRfY29uc3VtZXI7CiAJdTMyIGNyYl9hZGRyX2NtZF9wcm9kdWNlcjsKIAl1MzIgY3JiX2FkZHJfY21kX2NvbnN1bWVyOworCXNwaW5sb2NrX3QgdHhfY2xlYW5fbG9jazsKIAotCXUzMiBtYXhfdHhfZGVzY19jb3VudDsKLQl1MzIgbWF4X3J4X2Rlc2NfY291bnQ7Ci0JdTMyIG1heF9qdW1ib19yeF9kZXNjX2NvdW50OwotCXUzMiBtYXhfbHJvX3J4X2Rlc2NfY291bnQ7CisJdTMyIG51bV90eGQ7CisJdTMyIG51bV9yeGQ7CisJdTMyIG51bV9qdW1ib19yeGQ7CisJdTMyIG51bV9scm9fcnhkOwogCiAJaW50IG1heF9yZHNfcmluZ3M7CisJaW50IG1heF9zZHNfcmluZ3M7CiAKIAl1MzIgZmxhZ3M7CiAJdTMyIGlycTsKQEAgLTEyNjcsOSArMTI2MCw5IEBACiAJdTMyIHRlbXA7CiAKIAl1MzIgZndfbWFqb3I7CisJdTMyIGZ3X3ZlcnNpb247CiAKLQl1OCBtc2l4X3N1cHBvcnRlZDsKLQl1OCBtYXhfcG9zc2libGVfcnNzX3JpbmdzOworCWludCBtc2l4X3N1cHBvcnRlZDsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSXTsKIAogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlcl9zdGF0cyBzdGF0czsKQEAgLTEyNzksNyArMTI3Miw2IEBACiAJdTE2IHN0YXRlOwogCXUxNiBsaW5rX2F1dG9uZWc7CiAJaW50IHJ4X2NzdW07Ci0JaW50IHN0YXR1czsKIAogCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqY21kX2J1Zl9hcnI7CS8qIENvbW1hbmQgYnVmZmVycyBmb3IgeG1pdCAqLwogCkBAIC0xMjg3LDcgKzEyNzksNyBAQAogCSAqIFJlY2VpdmUgaW5zdGFuY2VzLiBUaGVzZSBjYW4gYmUgZWl0aGVyIG9uZSBwZXIgcG9ydCwKIAkgKiBvciBvbmUgcGVyIHBlZywgZXRjLgogCSAqLwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0IHJlY3ZfY3R4W01BWF9SQ1ZfQ1RYXTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eDsKIAogCWludCBpc191cDsKIAlzdHJ1Y3QgbmV0eGVuX2R1bW15X2RtYSBkdW1teV9kbWE7CkBAIC0xMzk4LDYgKzEzOTAsOCBAQAogdm9pZCBuZXR4ZW5fbmljX3JlYWRfdzEoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgaW5kZXgsIHUzMiAqdmFsdWUpOwogCiBpbnQgbmV0eGVuX25pY19nZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBuZXR4ZW5fbmljX2dldF9maXJtd2FyZV9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX25pY193b2xfc3VwcG9ydGVkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKIGludCBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbik7CkBAIC0xNDcxLDE1ICsxNDY1LDE2IEBACiBpbnQgbmV0eGVuX2luaXRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX25pY19jbGVhcl9zdGF0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGN0eCwKLQkJCSAgICB1MzIgcmluZ2lkKTsKK3ZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByaW5naWQsCisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyk7CiBpbnQgbmV0eGVuX3Byb2Nlc3NfY21kX3Jpbmcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLXUzMiBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHgsIGludCBtYXgpOworaW50IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZywgaW50IG1heCk7CiB2b2lkIG5ldHhlbl9wMl9uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogdm9pZCBuZXR4ZW5fcDNfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmV0eGVuX3AzX2ZyZWVfbWFjX2xpc3Qoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5fcDNfbmljX3NldF9wcm9taXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyKTsKIGludCBuZXR4ZW5fY29uZmlnX2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBuZXR4ZW5fY29uZmlnX3JzcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpOwogCiBpbnQgbnhfZndfY21kX3NldF9tdHUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KTsKIGludCBuZXR4ZW5fbmljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwpAQCAtMTU5NSw3ICsxNTkwLDYgQEAKIH0KIAogCi1pbnQgbmV0eGVuX2lzX2ZsYXNoX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9nZXRfZmxhc2hfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBfX2xlNjQgKm1hYyk7CiBpbnQgbmV0eGVuX3AzX2dldF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIF9fbGU2NCAqbWFjKTsKIGV4dGVybiB2b2lkIG5ldHhlbl9jaGFuZ2VfcmluZ3BhcmFtKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCmluZGV4IDc0NmJkYjQuLjkyMzQ0NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw5ICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC0xNDEsNyArMTQxLDcgQEAKIG54X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSkKIHsKIAl1MzIgcmNvZGUgPSBOWF9SQ09ERV9TVUNDRVNTOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlpZiAocmVjdl9jdHgtPnN0YXRlID09IE5YX0hPU1RfQ1RYX1NUQVRFX0FDVElWRSkKIAkJcmNvZGUgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCkBAIC0xNjksNiArMTY5LDcgQEAKIAlueF9jYXJkcnNwX3Jkc19yaW5nX3QgKnByc3BfcmRzOwogCW54X2NhcmRyc3Bfc2RzX3JpbmdfdCAqcHJzcF9zZHM7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKIAogCWRtYV9hZGRyX3QgaG9zdHJxX3BoeXNfYWRkciwgY2FyZHJzcF9waHlzX2FkZHI7CiAJdTY0IHBoeXNfYWRkcjsKQEAgLTE3OSwxMSArMTgwLDEwIEBACiAKIAlpbnQgZXJyOwogCi0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4WzBdOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAotCS8qIG9ubHkgb25lIHNkcyByaW5nIGZvciBub3cgKi8KIAlucmRzX3JpbmdzID0gYWRhcHRlci0+bWF4X3Jkc19yaW5nczsKLQluc2RzX3JpbmdzID0gMTsKKwluc2RzX3JpbmdzID0gYWRhcHRlci0+bWF4X3Nkc19yaW5nczsKIAogCXJxX3NpemUgPQogCQlTSVpFT0ZfSE9TVFJRX1JYKG54X2hvc3RycV9yeF9jdHhfdCwgbnJkc19yaW5ncywgbnNkc19yaW5ncyk7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tpXTsKIAogCQlwcnFfcmRzW2ldLmhvc3RfcGh5c19hZGRyID0gY3B1X3RvX2xlNjQocmRzX3JpbmctPnBoeXNfYWRkcik7Ci0JCXBycV9yZHNbaV0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJcHJxX3Jkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+bnVtX2Rlc2MpOwogCQlwcnFfcmRzW2ldLnJpbmdfa2luZCA9IGNwdV90b19sZTMyKGkpOwogCQlwcnFfcmRzW2ldLmJ1ZmZfc2l6ZSA9IGNwdV90b19sZTY0KHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAJfQpAQCAtMjM5LDExICsyMzksMTQgQEAKIAlwcnFfc2RzID0gKG54X2hvc3RycV9zZHNfcmluZ190ICopKHBycS0+ZGF0YSArCiAJCQlsZTMyX3RvX2NwdShwcnEtPnNkc19yaW5nX29mZnNldCkpOwogCi0JcHJxX3Nkc1swXS5ob3N0X3BoeXNfYWRkciA9Ci0JCWNwdV90b19sZTY0KHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKLQlwcnFfc2RzWzBdLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKLQkvKiBvbmx5IG9uZSBtc2l4IHZlY3RvciBmb3Igbm93ICovCi0JcHJxX3Nkc1swXS5tc2lfaW5kZXggPSBjcHVfdG9fbGUxNigwKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnNkc19yaW5nczsgaSsrKSB7CisKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tpXTsKKworCQlwcnFfc2RzW2ldLmhvc3RfcGh5c19hZGRyID0gY3B1X3RvX2xlNjQoc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCXBycV9zZHNbaV0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIoc2RzX3JpbmctPm51bV9kZXNjKTsKKwkJcHJxX3Nkc1tpXS5tc2lfaW5kZXggPSBjcHVfdG9fbGUxNihpKTsKKwl9CiAKIAlwaHlzX2FkZHIgPSBob3N0cnFfcGh5c19hZGRyOwogCWVyciA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKQEAgLTI3MiwxMSArMjc1LDE2IEBACiAKIAlwcnNwX3NkcyA9ICgobnhfY2FyZHJzcF9zZHNfcmluZ190ICopCiAJCQkmcHJzcC0+ZGF0YVtsZTMyX3RvX2NwdShwcnNwLT5zZHNfcmluZ19vZmZzZXQpXSk7Ci0JcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbMF0uaG9zdF9jb25zdW1lcl9jcmIpOwotCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOwogCi0JcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbMF0uaW50ZXJydXB0X2NyYik7Ci0JYWRhcHRlci0+Y3JiX2ludHJfbWFzayA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUocHJzcC0+bnVtX3Nkc19yaW5ncyk7IGkrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW2ldOworCisJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmhvc3RfY29uc3VtZXJfY3JiKTsKKwkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbaV0uaW50ZXJydXB0X2NyYik7CisJCXNkc19yaW5nLT5jcmJfaW50cl9tYXNrID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCX0KIAogCXJlY3ZfY3R4LT5zdGF0ZSA9IGxlMzJfdG9fY3B1KHByc3AtPmhvc3RfY3R4X3N0YXRlKTsKIAlyZWN2X2N0eC0+Y29udGV4dF9pZCA9IGxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOwpAQCAtMjkyLDcgKzMwMCw3IEBACiBzdGF0aWMgdm9pZAogbnhfZndfY21kX2Rlc3Ryb3lfcnhfY3R4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbMF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKQEAgLTM2Miw3ICszNzAsNyBAQAogCXBycV9jZHMtPmhvc3RfcGh5c19hZGRyID0KIAkJY3B1X3RvX2xlNjQoYWRhcHRlci0+YWh3LmNtZF9kZXNjX3BoeXNfYWRkcik7CiAKLQlwcnFfY2RzLT5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJcHJxX2Nkcy0+cmluZ19zaXplID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bnVtX3R4ZCk7CiAKIAlwaHlzX2FkZHIgPSBycV9waHlzX2FkZHI7CiAJZXJyID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLApAQCAtNDg4LDMwICs0OTYsMjggQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwotCWludCBjdHgsIHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCByaW5nOwogCWludCBmdW5jX2lkID0gYWRhcHRlci0+cG9ydG51bTsKIAogCWFkYXB0ZXItPmN0eF9kZXNjLT5jbWRfcmluZ19hZGRyID0KIAkJY3B1X3RvX2xlNjQoYWRhcHRlci0+YWh3LmNtZF9kZXNjX3BoeXNfYWRkcik7CiAJYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX3NpemUgPQotCQljcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJCWNwdV90b19sZTMyKGFkYXB0ZXItPm51bV90eGQpOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAotCQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnJjdl9jdHhbcmluZ10ucmN2X3JpbmdfYWRkciA9Ci0JCQkJY3B1X3RvX2xlNjQocmRzX3JpbmctPnBoeXNfYWRkcik7Ci0JCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19zaXplID0KLQkJCQljcHVfdG9fbGUzMihyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQl9Ci0JCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19hZGRyID0KLQkJCWNwdV90b19sZTY0KHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKLQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX3NpemUgPQotCQkJY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyID0KKwkJCWNwdV90b19sZTY0KHJkc19yaW5nLT5waHlzX2FkZHIpOworCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19zaXplID0KKwkJCWNwdV90b19sZTMyKHJkc19yaW5nLT5udW1fZGVzYyk7CiAJfQorCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbMF07CisJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX2FkZHIgPSBjcHVfdG9fbGU2NChzZHNfcmluZy0+cGh5c19hZGRyKTsKKwlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3Jpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHNkc19yaW5nLT5udW1fZGVzYyk7CiAKIAlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9DVFhfQUREUl9SRUdfTE8oZnVuY19pZCksCiAJCQlsb3dlcjMyKGFkYXB0ZXItPmN0eF9kZXNjX3BoeXNfYWRkcikpOwpAQCAtNTMzLDkgKzUzOSwxMyBAQAogCXUzMiBzdGF0ZSA9IDA7CiAJdm9pZCAqYWRkcjsKIAlpbnQgZXJyID0gMDsKLQlpbnQgY3R4LCByaW5nOworCWludCByaW5nOwogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKIAllcnIgPSBuZXR4ZW5fcmVjZWl2ZV9wZWdfcmVhZHkoYWRhcHRlcik7CiAJaWYgKGVycikgewpAQCAtNTQ0LDEyICs1NTQsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKIAkJCXNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSArIHNpemVvZih1aW50MzJfdCksCiAJCQkmYWRhcHRlci0+Y3R4X2Rlc2NfcGh5c19hZGRyKTsKIAogCWlmIChhZGRyID09IE5VTEwpIHsKLQkJRFBSSU5USyhFUlIsICJmYWlsZWQgdG8gYWxsb2NhdGUgaHcgY29udGV4dFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBodyBjb250ZXh0XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCkpOwpAQCAtNTYyLDYxICs1NzIsNTcgQEAKIAkJKF9fbGUzMiAqKSgoKGNoYXIgKilhZGRyKSArIHNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSk7CiAKIAkvKiBjbWQgZGVzYyByaW5nICovCi0JYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQlzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqCi0JCQlhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCwKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKKwkJCVRYX0RFU0NfUklOR1NJWkUoYWRhcHRlciksCiAJCQkmaHctPmNtZF9kZXNjX3BoeXNfYWRkcik7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2MgcmluZ1xuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSB0eCBkZXNjIHJpbmdcbiIsCisJCQkJbmV0ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaHctPmNtZF9kZXNjX2hlYWQgPSAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopYWRkcjsKIAotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eF07CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJLyogcnggZGVzYyByaW5nICovCi0JCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCQkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJCVJDVl9ERVNDX1JJTkdTSVpFLAotCQkJCQkmcmRzX3JpbmctPnBoeXNfYWRkcik7Ci0JCQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgcnggIgotCQkJCQkiZGVzYyByaW5nWyVkXVxuIiwKLQkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgcmluZyk7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycl9vdXRfZnJlZTsKLQkJCX0KLQkJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKLQotCQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9Ci0JCQkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KLQkJCQkJY3JiX3Jjdl9wcm9kdWNlcltyaW5nXTsKLQkJfQotCi0JCS8qIHN0YXR1cyBkZXNjIHJpbmcgKi8KKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAJCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFLAotCQkJCSZyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7CisJCQkJUkNWX0RFU0NfUklOR1NJWkUocmRzX3JpbmcpLAorCQkJCSZyZHNfcmluZy0+cGh5c19hZGRyKTsKIAkJaWYgKGFkZHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgc3RzIGRlc2MgcmluZ1xuIiwKLQkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcmRzIHJpbmcgWyVkXVxuIiwKKwkJCQluZXRkZXYtPm5hbWUsIHJpbmcpOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyX291dF9mcmVlOwogCQl9Ci0JCXJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCA9IChzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKilhZGRyOworCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCByY3ZfZGVzYyAqKWFkZHI7CiAKIAkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyID0KKwkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0KIAkJCQlyZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uCi0JCQkJY3JiX3N0c19jb25zdW1lcjsKKwkJCQljcmJfcmN2X3Byb2R1Y2VyW3JpbmddOwogCX0KIAorCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKworCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZyksCisJCQkJJnNkc19yaW5nLT5waHlzX2FkZHIpOworCQlpZiAoYWRkciA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgc2RzIHJpbmcgWyVkXVxuIiwKKwkJCQluZXRkZXYtPm5hbWUsIHJpbmcpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQl9CisJCXNkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHN0YXR1c19kZXNjICopYWRkcjsKKwl9CisKKwogCWlmIChhZGFwdGVyLT5md19tYWpvciA+PSA0KSB7CiAJCWFkYXB0ZXItPmludHJfc2NoZW1lID0gSU5UUl9TQ0hFTUVfUEVSUE9SVDsKIAkJYWRhcHRlci0+bXNpX21vZGUgPSBNU0lfTU9ERV9NVUxUSUZVTkM7CkBAIC02MjgsMTIgKzYzNCwxNiBAQAogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfSBlbHNlIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1swXTsKKwkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPQorCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW2FkYXB0ZXItPnBvcnRudW1dLmNyYl9zdHNfY29uc3VtZXI7CiAKIAkJYWRhcHRlci0+aW50cl9zY2hlbWUgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKIAkJCQlDUkJfTklDX0NBUEFCSUxJVElFU19GVyk7CiAJCWFkYXB0ZXItPm1zaV9tb2RlID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJQ1JCX05JQ19NU0lfTU9ERV9GVyk7Ci0JCWFkYXB0ZXItPmNyYl9pbnRyX21hc2sgPSBzd19pbnRfbWFza1thZGFwdGVyLT5wb3J0bnVtXTsKKwkJcmVjdl9jdHgtPnNkc19yaW5nc1swXS5jcmJfaW50cl9tYXNrID0KKwkJCQlzd19pbnRfbWFza1thZGFwdGVyLT5wb3J0bnVtXTsKIAogCQllcnIgPSBuZXR4ZW5faW5pdF9vbGRfY3R4KGFkYXB0ZXIpOwogCQlpZiAoZXJyKSB7CkBAIC02NTQsNyArNjY0LDggQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwotCWludCBjdHgsIHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCByaW5nOwogCiAJaWYgKGFkYXB0ZXItPmZ3X21ham9yID49IDQpIHsKIAkJbnhfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KGFkYXB0ZXIpOwpAQCAtNjczLDMyICs2ODQsMzQgQEAKIAlpZiAoYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgIT0gTlVMTCkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCiAJCQkJc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgKgotCQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAorCQkJCWFkYXB0ZXItPm51bV90eGQsCiAJCQkJYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQsCiAJCQkJYWRhcHRlci0+YWh3LmNtZF9kZXNjX3BoeXNfYWRkcik7CiAJCWFkYXB0ZXItPmFody5jbWRfZGVzY19oZWFkID0gTlVMTDsKIAl9CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAotCQkJaWYgKHJkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewotCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkJCVJDVl9ERVNDX1JJTkdTSVpFLAotCQkJCQkJcmRzX3JpbmctPmRlc2NfaGVhZCwKLQkJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOwotCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOwotCQkJfQotCQl9Ci0KLQkJaWYgKHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCAhPSBOVUxMKSB7CisJCWlmIChyZHNfcmluZy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUsCi0JCQkJCXJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCwKLQkJCQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gTlVMTDsKKwkJCQkJUkNWX0RFU0NfUklOR1NJWkUocmRzX3JpbmcpLAorCQkJCQlyZHNfcmluZy0+ZGVzY19oZWFkLAorCQkJCQlyZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOworCQl9CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCisJCWlmIChzZHNfcmluZy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZyksCisJCQkJc2RzX3JpbmctPmRlc2NfaGVhZCwKKwkJCQlzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJCXNkc19yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCmluZGV4IDA4OTRhN2IuLmE2NzdmZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqIGV0aHRvb2wgc3VwcG9ydCBmb3IgbmV0eGVuIG5pYworICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMTE4LDEwICsxMTUsOSBAQAogbmV0eGVuX25pY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvICpib2FyZGluZm8gPSAmYWRhcHRlci0+YWh3LmJvYXJkY2ZnOwogCiAJLyogcmVhZCB3aGljaCBtb2RlICovCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAogCQkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAogCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKQEAgLTE0MCw3ICsxMzYsNyBAQAogCQllY21kLT5kdXBsZXggPSBhZGFwdGVyLT5saW5rX2R1cGxleDsKIAkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmxpbmtfYXV0b25lZzsKIAotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQl1MzIgdmFsOwogCiAJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX1BPUlRfTU9ERV9BRERSLCAmdmFsLCA0KTsKQEAgLTE3Miw3ICsxNjgsNyBAQAogCWVjbWQtPnBoeV9hZGRyZXNzID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKLQlzd2l0Y2ggKChuZXR4ZW5fYnJkdHlwZV90KSBib2FyZGluZm8tPmJvYXJkX3R5cGUpIHsKKwlzd2l0Y2ggKChuZXR4ZW5fYnJkdHlwZV90KWFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKQEAgLTE4OCw3ICsxODQsNyBAQAogCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX1RQOwogCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKLQkJZWNtZC0+YXV0b25lZyA9IChib2FyZGluZm8tPmJvYXJkX3R5cGUgPT0KKwkJZWNtZC0+YXV0b25lZyA9IChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PQogCQkJCSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQpID8KIAkJICAgIChBVVRPTkVHX0RJU0FCTEUpIDogKGFkYXB0ZXItPmxpbmtfYXV0b25lZyk7CiAJCWJyZWFrOwpAQCAtMjE1LDcgKzIxMSw3IEBACiAJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOgotCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAkJCWVjbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEX0ZJQlJFIHwgU1VQUE9SVEVEX1RQKTsKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9CkBAIC0yMzEsNyArMjI3LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJuZXR4ZW4tbmljOiBVbnN1cHBvcnRlZCBib2FyZCBtb2RlbCAlZFxuIiwKLQkJICAgICAgIChuZXR4ZW5fYnJkdHlwZV90KSBib2FyZGluZm8tPmJvYXJkX3R5cGUpOworCQkgICAgICAgKG5ldHhlbl9icmR0eXBlX3QpYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI0NSw3ICsyNDEsNyBAQAogCV9fdTMyIHN0YXR1czsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCS8qIGF1dG9uZWdvdGlhdGlvbiAqLwogCQlpZiAoYWRhcHRlci0+cGh5X3dyaXRlCiAJCSAgICAmJiBhZGFwdGVyLT5waHlfd3JpdGUoYWRhcHRlciwKQEAgLTQzMyw3ICs0MjksNyBAQAogCWludCB2YWw7CiAKIAkvKiByZWFkIHdoaWNoIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQlpZiAoYWRhcHRlci0+cGh5X3JlYWQKIAkJICAgICYmIGFkYXB0ZXItPnBoeV9yZWFkKGFkYXB0ZXIsCiAJCQkJCSBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKQEAgLTQ0Myw3ICs0MzksNyBAQAogCQkJdmFsID0gbmV0eGVuX2dldF9waHlfbGluayhzdGF0dXMpOwogCQkJcmV0dXJuICF2YWw7CiAJCX0KLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJdmFsID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9YR19TVEFURSk7CiAJCXJldHVybiAodmFsID09IFhHX0xJTktfVVApID8gMCA6IDE7CiAJfQpAQCAtNDczLDk1ICs0NjksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLXN0YXRpYyBpbnQKLW5ldHhlbl9uaWNfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKLQkJCXU4ICogYnl0ZXMpCi17Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgb2Zmc2V0ID0gZWVwcm9tLT5vZmZzZXQ7Ci0Jc3RhdGljIGludCBmbGFzaF9zdGFydDsKLQlzdGF0aWMgaW50IHJlYWR5X3RvX2ZsYXNoOwotCWludCByZXQ7Ci0KLQlpZiAoZmxhc2hfc3RhcnQgPT0gMCkgewotCQluZXR4ZW5faGFsdF9wZWdzKGFkYXB0ZXIpOwotCQlyZXQgPSBuZXR4ZW5fZmxhc2hfdW5sb2NrKGFkYXB0ZXIpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmxhc2ggdW5sb2NrIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmbGFzaCB1bmxvY2tlZC4gXG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWNvbmRhcnkoYWRhcHRlcik7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmxhc2ggZXJhc2UgZmFpbGVkLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNlY29uZGFyeSBmbGFzaCBlcmFzZWQgc3VjY2Vzc2Z1bGx5LlxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlmbGFzaF9zdGFydCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChvZmZzZXQgPT0gTkVUWEVOX0JPT1RMRF9TVEFSVCkgewotCQlyZXQgPSBuZXR4ZW5fZmxhc2hfZXJhc2VfcHJpbWFyeShhZGFwdGVyKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCBlcmFzZSBmYWlsZWQuXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXJldCA9IG5ldHhlbl9yb21fc2UoYWRhcHRlciwgTkVUWEVOX1VTRVJfU1RBUlQpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCQlyZXR1cm4gcmV0OwotCQlyZXQgPSBuZXR4ZW5fcm9tX3NlKGFkYXB0ZXIsIE5FVFhFTl9GSVhFRF9TVEFSVCk7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykKLQkJCXJldHVybiByZXQ7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByaW1hcnkgZmxhc2ggZXJhc2VkIHN1Y2Nlc3NmdWxseVxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCi0JCXJldCA9IG5ldHhlbl9iYWNrdXBfY3JiaW5pdChhZGFwdGVyKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDUkJpbml0IGJhY2t1cCBmYWlsZWQuXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ1JCaW5pdCBiYWNrdXAgZG9uZS5cbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmVhZHlfdG9fZmxhc2ggPSAxOwotCX0KLQotCWlmICghcmVhZHlfdG9fZmxhc2gpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCB3cml0ZSBzZXF1ZW5jZSwgcmV0dXJuaW5nLi4uXG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoYWRhcHRlciwgb2Zmc2V0LCBieXRlcywgZWVwcm9tLT5sZW4pOwotfQotI2VuZGlmIC8qIDAgKi8KLQogc3RhdGljIHZvaWQKIG5ldHhlbl9uaWNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKIAogCXJpbmctPnJ4X3BlbmRpbmcgPSAwOwogCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfUkNWX0NUWDsgKytpKSB7Ci0JCXJpbmctPnJ4X3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHhbaV0uCi0JCSAgICByZHNfcmluZ3NbUkNWX0RFU0NfTk9STUFMX0NUWElEXS5tYXhfcnhfZGVzY19jb3VudDsKLQkJcmluZy0+cnhfanVtYm9fcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eFtpXS4KLQkJICAgIHJkc19yaW5nc1tSQ1ZfREVTQ19KVU1CT19DVFhJRF0ubWF4X3J4X2Rlc2NfY291bnQ7Ci0JfQotCXJpbmctPnR4X3BlbmRpbmcgPSBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudDsKKwlyaW5nLT5yeF9wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4LgorCQlyZHNfcmluZ3NbUkNWX1JJTkdfTk9STUFMXS5udW1fZGVzYzsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4LgorCQlyZHNfcmluZ3NbUkNWX1JJTkdfSlVNQk9dLm51bV9kZXNjOworCXJpbmctPnR4X3BlbmRpbmcgPSBhZGFwdGVyLT5udW1fdHhkOwogCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQorCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQogCQlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CiAJZWxzZQogCQlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwpAQCAtNTc5LDcgKzUwMCw3IEBACiAJX191MzIgdmFsOwogCWludCBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJCXJldHVybjsKIAkJLyogZ2V0IGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwpAQCAtNjAyLDcgKzUyMyw3IEBACiAJCQkJcGF1c2UtPnR4X3BhdXNlID0gIShuZXR4ZW5fZ2JfZ2V0X2diM19tYXNrKHZhbCkpOwogCQkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfWEdfUE9SVFMpKQogCQkJcmV0dXJuOwogCQlwYXVzZS0+cnhfcGF1c2UgPSAxOwpAQCAtNjEzLDcgKzUzNCw3IEBACiAJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKG5ldHhlbl94Z19nZXRfeGcxX21hc2sodmFsKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSIiVzOiBVbmtub3duIGJvYXJkIHR5cGU6ICV4XG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPmFody5ib2FyZF90eXBlKTsKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5haHcucG9ydF90eXBlKTsKIAl9CiB9CiAKQEAgLTYyNSw3ICs1NDYsNyBAQAogCV9fdTMyIHZhbDsKIAlpbnQgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CiAJLyogcmVhZCBtb2RlICovCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9HQkVfUE9SVFMpKQogCQkJcmV0dXJuIC1FSU87CiAJCS8qIHNldCBmbG93IGNvbnRyb2wgKi8KQEAgLTY2OSw3ICs1OTAsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9QQVVTRV9DVEwsIHZhbCk7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfWEdfUE9SVFMpKQogCQkJcmV0dXJuIC1FSU87CiAJCW5ldHhlbl9uaWNfcmVhZF93MChhZGFwdGVyLCBORVRYRU5fTklVX1hHX1BBVVNFX0NUTCwgJnZhbCk7CkBAIC02ODgsNyArNjA5LDcgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmtub3duIGJvYXJkIHR5cGU6ICV4XG4iLAogCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpOworCQkJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTgxMCw2ICs3MzEsNTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK25ldHhlbl9uaWNfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgd29sX2NmZyA9IDA7CisKKwl3b2wtPnN1cHBvcnRlZCA9IDA7CisJd29sLT53b2xvcHRzID0gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm47CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJR19OVik7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKQorCQl3b2wtPnN1cHBvcnRlZCB8PSBXQUtFX01BR0lDOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUcpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgd29sX2NmZyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHdvbC0+d29sb3B0cyAmIH5XQUtFX01BR0lDKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJR19OVik7CisJaWYgKCEod29sX2NmZyAmICgxIDw8IGFkYXB0ZXItPnBvcnRudW0pKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUcpOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQl3b2xfY2ZnIHw9IDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtOworCWVsc2UKKwkJd29sX2NmZyAmPSB+KDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKTsKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRywgd29sX2NmZyk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNldCB0aGUgY29hbGVzY2luZyBwYXJhbWV0ZXJzLiBDdXJyZW50bHkgb25seSBub3JtYWwgaXMgc3VwcG9ydGVkLgogICogSWYgcnhfY29hbGVzY2VfdXNlY3MgPT0gMCBvciByeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9PSAwIHRoZW4gc2V0IHRoZQpAQCAtOTA2LDkgKzg3NCw2IEBACiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4gPSBuZXR4ZW5fbmljX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tID0gbmV0eGVuX25pY19nZXRfZWVwcm9tLAotI2lmIDAKLQkuc2V0X2VlcHJvbSA9IG5ldHhlbl9uaWNfc2V0X2VlcHJvbSwKLSNlbmRpZgogCS5nZXRfcmluZ3BhcmFtID0gbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19zZXRfcGF1c2VwYXJhbSwKQEAgLTkxNiw2ICs4ODEsOCBAQAogCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3RzbyA9IG5ldHhlbl9uaWNfZ2V0X3RzbywKIAkuc2V0X3RzbyA9IG5ldHhlbl9uaWNfc2V0X3RzbywKKwkuZ2V0X3dvbCA9IG5ldHhlbl9uaWNfZ2V0X3dvbCwKKwkuc2V0X3dvbCA9IG5ldHhlbl9uaWNfc2V0X3dvbCwKIAkuc2VsZl90ZXN0ID0gbmV0eGVuX25pY19kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzID0gbmV0eGVuX25pY19nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBuZXR4ZW5fbmljX2dldF9ldGh0b29sX3N0YXRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAppbmRleCBlODBmOWUzLi4wMTZjNjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsOSArMjIsMTAgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCisgKgogICovCiAKICNpZm5kZWYgX19ORVRYRU5fTklDX0hEUl9IXwpAQCAtMzYyLDEyICszNjMsNiBAQAogI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX0xQQwlcCiAJKChORVRYRU5fSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19MUENfQ1JCX0FHVF9BRFIpCiAKLS8qCi0gKiBNQVhfUkNWX0NUWCA6IFRoZSBudW1iZXIgb2YgcmVjZWl2ZSBjb250ZXh0cyB0aGF0IGFyZSBhdmFpbGFibGUgb24KLSAqIHRoZSBwaGFudG9tLgotICovCi0jZGVmaW5lIE1BWF9SQ1ZfQ1RYCQkJMQotCiAjZGVmaW5lIE5FVFhFTl9TUkVfSU5UX1NUQVRVUwkJKE5FVFhFTl9DUkJfU1JFICsgMHgwMDAzNCkKICNkZWZpbmUgTkVUWEVOX1NSRV9QQklfQUNUSVZFX1NUQVRVUwkoTkVUWEVOX0NSQl9TUkUgKyAweDAxMDE0KQogI2RlZmluZSBORVRYRU5fU1JFX0wxUkVfQ1RMCQkoTkVUWEVOX0NSQl9TUkUgKyAweDAzMDAwKQpAQCAtODU4LDYgKzg1MywxMiBAQAogI2RlZmluZSBORVRYRU5fUE9SVF9NT0RFX0FERFIJCShORVRYRU5fQ0FNX1JBTSgweDI0KSkKICNkZWZpbmUgTkVUWEVOX1dPTF9QT1JUX01PREUJCShORVRYRU5fQ0FNX1JBTSgweDE5OCkpCiAKKyNkZWZpbmUgTkVUWEVOX1dPTF9DT05GSUdfTlYJCShORVRYRU5fQ0FNX1JBTSgweDE4NCkpCisjZGVmaW5lIE5FVFhFTl9XT0xfQ09ORklHCQkoTkVUWEVOX0NBTV9SQU0oMHgxODgpKQorCisjZGVmaW5lIE5YX1BFR19UVU5FX01OX1BSRVNFTlQJCTB4MQorI2RlZmluZSBOWF9QRUdfVFVORV9DQVBBQklMSVRZCQkoTkVUWEVOX0NBTV9SQU0oMHgwMmMpKQorCiAjZGVmaW5lIE5FVFhFTl9DQU1fUkFNX0RNQV9XQVRDSERPR19DVFJMCQkoMHgxNCkKIAogI2RlZmluZQlJU1JfTVNJX0lOVF9UUklHR0VSKEZVTkMpIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9NU0lfRihGVU5DKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCA4MjFjZmY2Li41MDI2ODExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqIFNvdXJjZSBmaWxlIGZvciBOSUMgcm91dGluZXMgdG8gYWNjZXNzIHRoZSBQaGFudG9tIGhhcmR3YXJlCisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC0zNSw3ICszMiw3IEBACiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgogI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKIAotCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAogI2RlZmluZSBNQVNLKG4pICgoMVVMTDw8KG4pKS0xKQpAQCAtNTE4LDcgKzUxNSw3IEBACiAJCQkmY21kX2Rlc2NfYXJyW2ldLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CiAKIAkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwKLQkJCQlhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJCQkJYWRhcHRlci0+bnVtX3R4ZCk7CiAJCWkrKzsKIAogCX0gd2hpbGUgKGkgIT0gbnJfZWxlbWVudHMpOwpAQCAtNjczLDYgKzY3MCw1MyBAQAogCXJldHVybiBydjsKIH0KIAorI2RlZmluZSBSU1NfSEFTSFRZUEVfSVBfVENQCTB4MworCitpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQoreworCW54X25pY19yZXFfdCByZXE7CisJdTY0IHdvcmQ7CisJaW50IGksIHJ2OworCisJdTY0IGtleVtdID0geyAweGJlYWMwMWZhNmE0MmI3M2JVTEwsIDB4ODAzMGYyMGM3N2NiMmRhM1VMTCwKKwkJCTB4YWU3YjMwYjRkMGNhMmJjYlVMTCwgMHg0M2EzOGZiMDQxNjcyNTNkVUxMLAorCQkJMHgyNTViMGVjMjZkNWE1NmRhVUxMIH07CisKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YobnhfbmljX3JlcV90KSk7CisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChOWF9IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IE5YX05JQ19IMkNfT1BDT0RFX0NPTkZJR19SU1MgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJLyoKKwkgKiBSU1MgcmVxdWVzdDoKKwkgKiBiaXRzIDMtMDogaGFzaF9tZXRob2QKKwkgKiAgICAgIDUtNDogaGFzaF90eXBlX2lwdjQKKwkgKgk3LTY6IGhhc2hfdHlwZV9pcHY2CisJICoJICA4OiBlbmFibGUKKwkgKiAgICAgICAgOTogdXNlIGluZGlyZWN0aW9uIHRhYmxlCisJICogICAgNDctMTA6IHJlc2VydmVkCisJICogICAgNjMtNDg6IGluZGlyZWN0aW9uIHRhYmxlIG1hc2sKKwkgKi8KKwl3b3JkID0gICgodTY0KShSU1NfSEFTSFRZUEVfSVBfVENQICYgMHgzKSA8PCA0KSB8CisJCSgodTY0KShSU1NfSEFTSFRZUEVfSVBfVENQICYgMHgzKSA8PCA2KSB8CisJCSgodTY0KShlbmFibGUgJiAweDEpIDw8IDgpIHwKKwkJKCgweDdVTEwpIDw8IDQ4KTsKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCh3b3JkKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlyZXEud29yZHNbaSsxXSA9IGNwdV90b19sZTY0KGtleVtpXSk7CisKKworCXJ2ID0gbmV0eGVuX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgY29uZmlndXJlIFJTU1xuIiwKKwkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCX0KKworCXJldHVybiBydjsKK30KKwogLyoKICAqIG5ldHhlbl9uaWNfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CiAgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKQEAgLTcwNiwzNCArNzUwLDExIEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgbmV0eGVuX2lzX2ZsYXNoX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JY29uc3QgaW50IGxvY3NbXSA9IHsgMCwgMHg0LCAweDEwMCwgMHg0MDAwLCAweDQxMjggfTsKLQlpbnQgYWRkciwgdmFsMDEsIHZhbDAyLCBpLCBqOwotCi0JLyogaWYgdGhlIGZsYXNoIHNpemUgbGVzcyB0aGFuIDRNYiwgbWFrZSBodWdlIHdhciBjcnkgYW5kIGRpZSAqLwotCWZvciAoaiA9IDE7IGogPCA0OyBqKyspIHsKLQkJYWRkciA9IGogKiBORVRYRU5fTklDX1dJTkRPV19NQVJHSU47Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvY3MpOyBpKyspIHsKLQkJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBsb2NzW2ldLCAmdmFsMDEpID09IDAKLQkJCSAgICAmJiBuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCAoYWRkciArIGxvY3NbaV0pLAotCQkJCQkJICAgICZ2YWwwMikgPT0gMCkgewotCQkJCWlmICh2YWwwMSA9PSB2YWwwMikKLQkJCQkJcmV0dXJuIC0xOwotCQkJfSBlbHNlCi0JCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbmV0eGVuX2dldF9mbGFzaF9ibG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBiYXNlLAogCQkJCSAgaW50IHNpemUsIF9fbGUzMiAqIGJ1ZikKIHsKLQlpbnQgaSwgYWRkcjsKKwlpbnQgaSwgdiwgYWRkcjsKIAlfX2xlMzIgKnB0cjMyOwotCXUzMiB2OwogCiAJYWRkciA9IGJhc2U7CiAJcHRyMzIgPSBidWY7CkBAIC05MzYsMTMgKzk1NywxMiBAQAogCXUzMiB3aW5fcmVhZDsKIAogCWFkYXB0ZXItPmNyYl93aW4gPSBDUkJfSEkoKm9mZik7Ci0Jd3JpdGVsKGFkYXB0ZXItPmNyYl93aW4sICh2b2lkICopKENSQl9XSU5ET1dfMk0gKwotCQlhZGFwdGVyLT5haHcucGNpX2Jhc2UwKSk7CisJd3JpdGVsKGFkYXB0ZXItPmNyYl93aW4sIChhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgQ1JCX1dJTkRPV18yTSkpOwogCS8qCiAJICogUmVhZCBiYWNrIHZhbHVlIHRvIG1ha2Ugc3VyZSB3cml0ZSBoYXMgZ29uZSB0aHJvdWdoIGJlZm9yZSB0cnlpbmcKIAkgKiB0byB1c2UgaXQuCiAJICovCi0Jd2luX3JlYWQgPSByZWFkbCgodm9pZCAqKShDUkJfV0lORE9XXzJNICsgYWRhcHRlci0+YWh3LnBjaV9iYXNlMCkpOworCXdpbl9yZWFkID0gcmVhZGwoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9XSU5ET1dfMk0pOwogCWlmICh3aW5fcmVhZCAhPSBhZGFwdGVyLT5jcmJfd2luKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFdyaXR0ZW4gY3Jid2luICgweCV4KSAhPSAiCiAJCQkJIlJlYWQgY3Jid2luICgweCV4KSwgb2ZmPTB4JWx4XG4iLApAQCAtOTUyLDI0ICs5NzIsNjkgQEAKIAkJKHVsb25nKWFkYXB0ZXItPmFody5wY2lfYmFzZTA7CiB9CiAKLWludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50CituZXR4ZW5fZG9fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKmZ3bmFtZSwKKwkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKIHsKLQlpbnQgaTsKLQl1MzIgZGF0YSwgc2l6ZSA9IDA7Ci0JdTMyIGZsYXNoYWRkciA9IE5FVFhFTl9CT09UTERfU1RBUlQ7CisJdTY0ICpwdHI2NDsKKwl1MzIgaSwgZmxhc2hhZGRyLCBzaXplOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAotCXNpemUgPSAoTkVUWEVOX0lNQUdFX1NUQVJUIC0gTkVUWEVOX0JPT1RMRF9TVEFSVCkvNDsKKwlpZiAoZncpCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJsb2FkaW5nIGZpcm13YXJlIGZyb20gZmlsZSAlc1xuIiwgZnduYW1lKTsKKwllbHNlCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJsb2FkaW5nIGZpcm13YXJlIGZyb20gZmxhc2hcbiIpOwogCiAJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKIAkJCQlORVRYRU5fUk9NVVNCX0dMQl9DQVNfUlNULCAxKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGZsYXNoYWRkciwgKGludCAqKSZkYXRhKSAhPSAwKQotCQkJcmV0dXJuIC1FSU87CisJaWYgKGZ3KSB7CisJCV9fbGU2NCBkYXRhOwogCi0JCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUoYWRhcHRlciwgZmxhc2hhZGRyLCAmZGF0YSwgNCk7Ci0JCWZsYXNoYWRkciArPSA0OworCQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKikmZnctPmRhdGFbTkVUWEVOX0JPT1RMRF9TVEFSVF07CisJCWZsYXNoYWRkciA9IE5FVFhFTl9CT09UTERfU1RBUlQ7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJZGF0YSA9IGNwdV90b19sZTY0KHB0cjY0W2ldKTsKKwkJCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUoYWRhcHRlciwgZmxhc2hhZGRyLCAmZGF0YSwgOCk7CisJCQlmbGFzaGFkZHIgKz0gODsKKwkJfQorCisJCXNpemUgPSAqKHUzMiAqKSZmdy0+ZGF0YVtOWF9GV19TSVpFX09GRlNFVF07CisJCXNpemUgPSAoX19mb3JjZSB1MzIpY3B1X3RvX2xlMzIoc2l6ZSkgLyA4OworCisJCXB0cjY0ID0gKHU2NCAqKSZmdy0+ZGF0YVtORVRYRU5fSU1BR0VfU1RBUlRdOworCQlmbGFzaGFkZHIgPSBORVRYRU5fSU1BR0VfU1RBUlQ7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJZGF0YSA9IGNwdV90b19sZTY0KHB0cjY0W2ldKTsKKworCQkJaWYgKGFkYXB0ZXItPnBjaV9tZW1fd3JpdGUoYWRhcHRlciwKKwkJCQkJCWZsYXNoYWRkciwgJmRhdGEsIDgpKQorCQkJCXJldHVybiAtRUlPOworCisJCQlmbGFzaGFkZHIgKz0gODsKKwkJfQorCX0gZWxzZSB7CisJCXUzMiBkYXRhOworCisJCXNpemUgPSAoTkVUWEVOX0lNQUdFX1NUQVJUIC0gTkVUWEVOX0JPT1RMRF9TVEFSVCkgLyA0OworCQlmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJCQlmbGFzaGFkZHIsIChpbnQgKikmZGF0YSkgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJaWYgKGFkYXB0ZXItPnBjaV9tZW1fd3JpdGUoYWRhcHRlciwKKwkJCQkJCWZsYXNoYWRkciwgJmRhdGEsIDQpKQorCQkJCXJldHVybiAtRUlPOworCisJCQlmbGFzaGFkZHIgKz0gNDsKKwkJfQogCX0KIAltc2xlZXAoMSk7CiAKQEAgLTk4NiwxMiArMTA1MSwxMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgY29uc3QgY2hhciAqZnduYW1lLAorCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCV9fbGUzMiB2YWw7CisJdTMyIG1ham9yLCBtaW5vciwgYnVpbGQsIHZlciwgbWluX3ZlciwgYmlvczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpZiAoZnctPnNpemUgPCBOWF9GV19NSU5fU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtOWF9GV19NQUdJQ19PRkZTRVRdKTsKKwlpZiAoKF9fZm9yY2UgdTMyKXZhbCAhPSBORVRYRU5fQkRJTkZPX01BR0lDKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IGNwdV90b19sZTMyKCoodTMyICopJmZ3LT5kYXRhW05YX0ZXX1ZFUlNJT05fT0ZGU0VUXSk7CisJbWFqb3IgPSAoX19mb3JjZSB1MzIpdmFsICYgMHhmZjsKKwltaW5vciA9ICgoX19mb3JjZSB1MzIpdmFsID4+IDgpICYgMHhmZjsKKwlidWlsZCA9IChfX2ZvcmNlIHUzMil2YWwgPj4gMTY7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJbWluX3ZlciA9IE5FVFhFTl9WRVJTSU9OX0NPREUoNCwgMCwgMjE2KTsKKwllbHNlCisJCW1pbl92ZXIgPSBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNik7CisKKwl2ZXIgPSBORVRYRU5fVkVSU0lPTl9DT0RFKG1ham9yLCBtaW5vciwgYnVpbGQpOworCisJaWYgKChtYWpvciA+IF9ORVRYRU5fTklDX0xJTlVYX01BSk9SKSB8fCAodmVyIDwgbWluX3ZlcikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSIlczogZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKKwkJCQlmd25hbWUsIG1ham9yLCBtaW5vciwgYnVpbGQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtOWF9CSU9TX1ZFUlNJT05fT0ZGU0VUXSk7CisJbmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgTlhfQklPU19WRVJTSU9OX09GRlNFVCwgKGludCAqKSZiaW9zKTsKKwlpZiAoKF9fZm9yY2UgdTMyKXZhbCAhPSBiaW9zKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmaXJtd2FyZSBiaW9zIGlzIGluY29tcGF0aWJsZVxuIiwKKwkJCQlmd25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBmbGFzaGVkIGZpcm13YXJlIGlzIG5ld2VyICovCisJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCisJCQlOWF9GV19WRVJTSU9OX09GRlNFVCwgKGludCAqKSZ2YWwpKQorCQlyZXR1cm4gLUVJTzsKKwltYWpvciA9IChfX2ZvcmNlIHUzMil2YWwgJiAweGZmOworCW1pbm9yID0gKChfX2ZvcmNlIHUzMil2YWwgPj4gOCkgJiAweGZmOworCWJ1aWxkID0gKF9fZm9yY2UgdTMyKXZhbCA+PiAxNjsKKwlpZiAoTkVUWEVOX1ZFUlNJT05fQ09ERShtYWpvciwgbWlub3IsIGJ1aWxkKSA+IHZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fQ0FNX1JBTSgweDFmYyksCisJCQlORVRYRU5fQkRJTkZPX01BR0lDKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKmZ3X25hbWVbXSA9IHsgIm54cm9taW1nLmJpbiIsICJueDNmd2N0LmJpbiIsICJueDNmd21uLmJpbiIgfTsKKworaW50IG5ldHhlbl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgY2FwYWJpbGl0eSwgZmxhc2hlZF92ZXI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgZndfdHlwZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHJjID0gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWZ3X3R5cGUgPSBOWF9QMl9NTl9ST01JTUFHRTsKKwkJZ290byByZXF1ZXN0X2Z3OworCX0gZWxzZSB7CisJCWZ3X3R5cGUgPSBOWF9QM19DVF9ST01JTUFHRTsKKwkJZ290byByZXF1ZXN0X2Z3OworCX0KKworcmVxdWVzdF9tbjoKKwljYXBhYmlsaXR5ID0gMDsKKworCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCisJCQlOWF9GV19WRVJTSU9OX09GRlNFVCwgKGludCAqKSZmbGFzaGVkX3Zlcik7CisJaWYgKGZsYXNoZWRfdmVyID49IE5FVFhFTl9WRVJTSU9OX0NPREUoNCwgMCwgMjIwKSkgeworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJTlhfUEVHX1RVTkVfQ0FQQUJJTElUWSwgJmNhcGFiaWxpdHksIDQpOworCQlpZiAoY2FwYWJpbGl0eSAmIE5YX1BFR19UVU5FX01OX1BSRVNFTlQpIHsKKwkJCWZ3X3R5cGUgPSBOWF9QM19NTl9ST01JTUFHRTsKKwkJCWdvdG8gcmVxdWVzdF9mdzsKKwkJfQorCX0KKworcmVxdWVzdF9mdzoKKwlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19uYW1lW2Z3X3R5cGVdLCAmcGRldi0+ZGV2KTsKKwlpZiAocmMgIT0gMCkgeworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQkJbXNsZWVwKDEpOworCQkJZ290byByZXF1ZXN0X21uOworCQl9CisKKwkJZncgPSBOVUxMOworCQlnb3RvIGxvYWRfZnc7CisJfQorCisJcmMgPSBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoYWRhcHRlciwgZndfbmFtZVtmd190eXBlXSwgZncpOworCWlmIChyYyAhPSAwKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJCWlmIChmd190eXBlID09IE5YX1AzX0NUX1JPTUlNQUdFKSB7CisJCQltc2xlZXAoMSk7CisJCQlnb3RvIHJlcXVlc3RfbW47CisJCX0KKworCQlmdyA9IE5VTEw7CisJfQorCitsb2FkX2Z3OgorCXJjID0gbmV0eGVuX2RvX2xvYWRfZmlybXdhcmUoYWRhcHRlciwgZndfbmFtZVtmd190eXBlXSwgZncpOworCisJaWYgKGZ3KQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gcmM7Cit9CisKIGludAogbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdWxvbmcgb2ZmLCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXZvaWQgX19pb21lbSAqYWRkcjsKIAorCUJVR19PTihsZW4gIT0gNCk7CisKIAlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsKIAkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7CiAJfSBlbHNlIHsJCS8qIFdpbmRvdyAwICovCkBAIC05OTksMzcgKzExODcsMTMgQEAKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCX0KIAotCURQUklOVEsoSU5GTywgIndyaXRpbmcgdG8gYmFzZSAlbHggb2Zmc2V0ICVsbHggYWRkciAlcCIKLQkJIiBkYXRhICVsbHggbGVuICVkXG4iLAotCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIsCi0JCSoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSwgbGVuKTsKIAlpZiAoIWFkZHIpIHsKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJd3JpdGViKCoodTggKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJd3JpdGV3KCoodTE2ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHUzMiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQl3cml0ZXEoKih1NjQgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURQUklOVEsoSU5GTywKLQkJCSJ3cml0aW5nIGRhdGEgJWx4IHRvIG9mZnNldCAlbGx4LCBudW0gd29yZHM9JWRcbiIsCi0JCQkqKHVuc2lnbmVkIGxvbmcgKilkYXRhLCBvZmYsIChsZW4gPj4gMykpOworCXdyaXRlbCgqKHUzMiAqKSBkYXRhLCBhZGRyKTsKIAotCQluZXR4ZW5fbmljX2h3X2Jsb2NrX3dyaXRlNjQoKHU2NCBfX2lvbWVtICopIGRhdGEsIGFkZHIsCi0JCQkJCSAgICAobGVuID4+IDMpKTsKLQkJYnJlYWs7Ci0JfQogCWlmICghQUREUl9JTl9XSU5ET1cxKG9mZikpCiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIApAQCAtMTA0Miw2ICsxMjA2LDggQEAKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKSB7CS8qIFdpbmRvdyAxICovCiAJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwogCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLwpAQCAtMTA0OSwzMSArMTIxNSwxMiBAQAogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CiAJfQogCi0JRFBSSU5USyhJTkZPLCAicmVhZGluZyBmcm9tIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXBcbiIsCi0JCXBjaV9iYXNlKGFkYXB0ZXIsIG9mZiksIG9mZiwgYWRkcik7CiAJaWYgKCFhZGRyKSB7CiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIAkJcmV0dXJuIDE7CiAJfQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQkqKHU4ICopIGRhdGEgPSByZWFkYihhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHUxNiAqKSBkYXRhID0gcmVhZHcoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKih1MzIgKikgZGF0YSA9IHJlYWRsKGFkZHIpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCSoodTY0ICopIGRhdGEgPSByZWFkcShhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQoKHU2NCBfX2lvbWVtICopIGRhdGEsIGFkZHIsCi0JCQkJCSAgIChsZW4gPj4gMykpOwotCQlicmVhazsKLQl9Ci0JRFBSSU5USyhJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOworCisJKih1MzIgKilkYXRhID0gcmVhZGwoYWRkcik7CiAKIAlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CkBAIC0xMDg4LDYgKzEyMzUsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCBydjsKIAorCUJVR19PTihsZW4gIT0gNCk7CisKIAlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmLCBsZW4pOwogCiAJaWYgKHJ2ID09IC0xKSB7CkBAIC0xMTAxLDM0ICsxMjUwLDEyIEBACiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJbmV0eGVuX25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCAmb2ZmKTsKLQl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJ3cml0ZSBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbGVuPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCBsZW4pOwotCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCXdyaXRlYigqKHVpbnQ4X3QgKilkYXRhLCAodm9pZCAqKW9mZik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJd3JpdGV3KCoodWludDE2X3QgKilkYXRhLCAodm9pZCAqKW9mZik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJd3JpdGVsKCoodWludDMyX3QgKilkYXRhLCAodm9pZCAqKW9mZik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd3JpdGVxKCoodWludDY0X3QgKilkYXRhLCAodm9pZCAqKW9mZik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURQUklOVEsoMSwgSU5GTywKLQkJCSJ3cml0aW5nIGRhdGEgJWx4IHRvIG9mZnNldCAlbGx4LCBudW0gd29yZHM9JWRcbiIsCi0JCQkqKHVuc2lnbmVkIGxvbmcgKilkYXRhLCBvZmYsIChsZW4+PjMpKTsKLQkJYnJlYWs7Ci0JfQotCWlmIChydiA9PSAxKSB7CisJCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgKHZvaWQgX19pb21lbSAqKW9mZik7CiAJCWNyYl93aW5fdW5sb2NrKGFkYXB0ZXIpOwogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JfQorCX0gZWxzZQorCQl3cml0ZWwoKih1aW50MzJfdCAqKWRhdGEsICh2b2lkIF9faW9tZW0gKilvZmYpOworCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDAsNiArMTI2Nyw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IHJ2OwogCisJQlVHX09OKGxlbiAhPSA0KTsKKwogCXJ2ID0gbmV0eGVuX25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKGFkYXB0ZXIsICZvZmYsIGxlbik7CiAKIAlpZiAocnYgPT0gLTEpIHsKQEAgLTExNTMsMzMgKzEyODIsMTEgQEAKIAkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJY3JiX3dpbl9sb2NrKGFkYXB0ZXIpOwogCQluZXR4ZW5fbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsICZvZmYpOwotCX0KLQotCURQUklOVEsoMSwgSU5GTywgInJlYWQgZnJvbSBvZmZzZXQgJWx4LCBsZW49JWRcbiIsIG9mZiwgbGVuKTsKLQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQkqKHVpbnQ4X3QgKilkYXRhID0gcmVhZGIoKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSoodWludDE2X3QgKilkYXRhID0gcmVhZHcoKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCSoodWludDY0X3QgKilkYXRhID0gcmVhZHEoKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkICVseFxuIiwgKih1bnNpZ25lZCBsb25nICopZGF0YSk7Ci0KLQlpZiAocnYgPT0gMSkgeworCQkqKHVpbnQzMl90ICopZGF0YSA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilvZmYpOwogCQljcmJfd2luX3VubG9jayhhZGFwdGVyKTsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KKwl9IGVsc2UKKwkJKih1aW50MzJfdCAqKWRhdGEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb2ZmKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ0MSwxMCArMTU0OCw5IEBACiAJCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHI7CisJdm9pZCBfX2lvbWVtICphZGRyLCAqbWVtX3B0ciA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJdTY0IHN0YXJ0OwotCXVpbnQ4X3QgKm1lbV9wdHIgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBtZW1fcGFnZTsKIApAQCAtMTQ2NCw3ICsxNTcwLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWFkZHIgPSAodm9pZCAqKShwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpKTsKKwlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KTsKIAlpZiAoIWFkZHIpIHsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCQltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCAwKTsKQEAgLTE1MDMsNyArMTYwOSw2IEBACiAJCWJyZWFrOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOwogCiAJaWYgKG1lbV9wdHIpCiAJCWlvdW5tYXAobWVtX3B0cik7CkBAIC0xNTE1LDEwICsxNjIwLDkgQEAKIAkJdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOworCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwogCWludCByZXQgPSAwOwogCXU2NCBzdGFydDsKLQl1aW50OF90ICptZW1fcHRyID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7CiAKQEAgLTE1MzgsNyArMTY0Miw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCk7CiAJaWYgKCFhZGRyKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CkBAIC0xNTc1LDggKzE2NzksNiBAQAogCQlicmVhazsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCURQUklOVEsoMSwgSU5GTywgIndyaXRpbmcgZGF0YSAlbGx4IHRvIG9mZnNldCAlbGx4XG4iLAotCQkJKih1bnNpZ25lZCBsb25nIGxvbmcgKilkYXRhLCBzdGFydCk7CiAJaWYgKG1lbV9wdHIpCiAJCWlvdW5tYXAobWVtX3B0cik7CiAJcmV0dXJuIHJldDsKQEAgLTE1ODgsMTAgKzE2OTAsMTEgQEAKIG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzLCBtZW1fY3JiOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKIAlpbnQJICAgICBpLCBqLCByZXQgPSAwLCBsb29wLCBzelsyXSwgb2ZmMDsKIAl1aW50MzJfdCAgICAgIHRlbXA7CiAJdWludDY0X3QgICAgICBvZmY4LCB0bXB3LCB3b3JkWzJdID0gezAsIDB9OworCXZvaWQgX19pb21lbSAqbWVtX2NyYjsKIAogCS8qCiAJICogSWYgbm90IE1OLCBnbyBjaGVjayBmb3IgTVMgb3IgaW52YWxpZC4KQEAgLTE2MDUsNyArMTcwOCw3IEBACiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMCkpID8gc2l6ZSA6ICg4IC0gb2ZmMCk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAJbG9vcCA9ICgob2ZmMCArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JbWVtX2NyYiA9ICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCWlmICgoc2l6ZSAhPSA4KSB8fCAob2ZmMCAhPSAwKSkgIHsKIAkJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewpAQCAtMTY0MywyOCArMTc0NiwyOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewogCQl3cml0ZWwoKHVpbnQzMl90KShvZmY4ICsgKGkgPDwgMykpLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTykpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAkJd3JpdGVsKDAsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwogCQl3cml0ZWwod29yZFtpXSAmIDB4ZmZmZmZmZmYsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfTE8pKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfTE8pKTsKIAkJd3JpdGVsKCh3b3JkW2ldID4+IDMyKSAmIDB4ZmZmZmZmZmYsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEkpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEkpKTsKIAkJd3JpdGVsKE1JVV9UQV9DVExfRU5BQkxFfE1JVV9UQV9DVExfV1JJVEUsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVHxNSVVfVEFfQ1RMX0VOQUJMRXxNSVVfVEFfQ1RMX1dSSVRFLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CiAJCQl0ZW1wID0gcmVhZGwoCi0JCQkgICAgICh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCSAgICAgKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXByaW50aygiJXM6ICVzIEZhaWwgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIiwKLQkJCQkJX19mdW5jX18sIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIik7CiAJCQlyZXQgPSAtMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjc5LDEwICsxNzgzLDExIEBACiBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzLCBtZW1fY3JiOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKIAlpbnQJICAgICBpLCBqID0gMCwgaywgc3RhcnQsIGVuZCwgbG9vcCwgc3pbMl0sIG9mZjBbMl07CiAJdWludDMyX3QgICAgICB0ZW1wOwogCXVpbnQ2NF90ICAgICAgb2ZmOCwgdmFsLCB3b3JkWzJdID0gezAsIDB9OworCXZvaWQgX19pb21lbSAqbWVtX2NyYjsKIAogCiAJLyoKQEAgLTE2OTcsMzEgKzE4MDIsMzIgQEAKIAlzelswXSA9IChzaXplIDwgKDggLSBvZmYwWzBdKSkgPyBzaXplIDogKDggLSBvZmYwWzBdKTsKIAlzelsxXSA9IHNpemUgLSBzelswXTsKIAlsb29wID0gKChvZmYwWzBdICsgc2l6ZSAtIDEpID4+IDMpICsgMTsKLQltZW1fY3JiID0gKHVuc2lnbmVkIGxvbmcpcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CisJbWVtX2NyYiA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CiAJCXdyaXRlbCgodWludDMyX3QpKG9mZjggKyAoaSA8PCAzKSksCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTykpOwogCQl3cml0ZWwoMCwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKSk7CiAJCXdyaXRlbChNSVVfVEFfQ1RMX0VOQUJMRSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAJCXdyaXRlbChNSVVfVEFfQ1RMX1NUQVJUfE1JVV9UQV9DVExfRU5BQkxFLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CiAJCQl0ZW1wID0gcmVhZGwoCi0JCQkgICAgICAodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkgICAgICAobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOwogCQkJaWYgKCh0ZW1wICYgTUlVX1RBX0NUTF9CVVNZKSA9PSAwKQogCQkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgRmFpbCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCV9fZnVuY19fLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHJlYWQgdGhyb3VnaCBhZ2VudFxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNzI5LDcgKzE4MzUsNyBAQAogCQllbmQgICA9IChvZmYwW2ldICsgc3pbaV0gLSAxKSA+PiAyOwogCQlmb3IgKGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykgewogCQkJd29yZFtpXSB8PSAoKHVpbnQ2NF90KSByZWFkbCgKLQkJCQkgICAgKHZvaWQgKikobWVtX2NyYiArCisJCQkJICAgIChtZW1fY3JiICsKIAkJCQkgICAgTUlVX1RFU1RfQUdUX1JEREFUQShrKSkpIDw8ICgzMiprKSk7CiAJCX0KIAl9CkBAIC0xNzYxLDcgKzE4NjcsNiBAQAogCQkqKHVpbnQ2NF90ICopZGF0YSA9IHZhbDsKIAkJYnJlYWs7CiAJfQotCURQUklOVEsoMSwgSU5GTywgInJlYWQgJWxseFxuIiwgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg1Nyw4ICsxOTYyLDkgQEAKIAkJfQogCiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWwgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIiwKLQkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byB3cml0ZSB0aHJvdWdoIGFnZW50XG4iKTsKIAkJCXJldCA9IC0xOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5MjcsOCArMjAzMyw5IEBACiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsIHRvIHJlYWQgdGhyb3VnaCBhZ2VudFxuIiwKLQkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTk3MCw3ICsyMDc3LDYgQEAKIAkJKih1aW50NjRfdCAqKWRhdGEgPSB2YWw7CiAJCWJyZWFrOwogCX0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMDUsNjIgKzIxMTEsNDYgQEAKIAlyZXR1cm4gdGVtcDsKIH0KIAotI2lmIDAKLWludAotbmV0eGVuX25pY19lcmFzZV9weGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1BYRV9TVEFSVCwgMCkgPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJhc2UgcHhlIGZhaWxlZFxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBydiA9IDA7Ci0JaW50IGFkZHIgPSBORVRYRU5fQlJEQ0ZHX1NUQVJUOwotCXN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbyAqYm9hcmRpbmZvOwotCWludCBpbmRleDsKLQl1MzIgKnB0cjMyOworCWludCBvZmZzZXQsIGJvYXJkX3R5cGUsIG1hZ2ljLCBoZWFkZXJfdmVyc2lvbjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlib2FyZGluZm8gPSAmYWRhcHRlci0+YWh3LmJvYXJkY2ZnOwotCXB0cjMyID0gKHUzMiAqKSBib2FyZGluZm87CisJb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCisJCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgbWFnaWMpOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZtYWdpYykpCisJCXJldHVybiAtRUlPOwogCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbykgLyBzaXplb2YodTMyKTsKLQkgICAgIGluZGV4KyspIHsKLQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHB0cjMyKSA9PSAtMSkgewotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJcHRyMzIrKzsKLQkJYWRkciArPSBzaXplb2YodTMyKTsKLQl9Ci0JaWYgKGJvYXJkaW5mby0+bWFnaWMgIT0gTkVUWEVOX0JESU5GT19NQUdJQykgewotCQlwcmludGsoIiVzOiBFUlJPUiByZWFkaW5nICVzIGJvYXJkIGNvbmZpZy4iCi0JCSAgICAgICAiIFJlYWQgJXgsIGV4cGVjdGVkICV4XG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAotCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIGJvYXJkaW5mby0+bWFnaWMsIE5FVFhFTl9CRElORk9fTUFHSUMpOwotCQlydiA9IC0xOwotCX0KLQlpZiAoYm9hcmRpbmZvLT5oZWFkZXJfdmVyc2lvbiAhPSBORVRYRU5fQkRJTkZPX1ZFUlNJT04pIHsKLQkJcHJpbnRrKCIlczogVW5rbm93biBib2FyZCBjb25maWcgdmVyc2lvbi4iCi0JCSAgICAgICAiIFJlYWQgJXgsIGV4cGVjdGVkICV4XG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAotCQkgICAgICAgYm9hcmRpbmZvLT5oZWFkZXJfdmVyc2lvbiwgTkVUWEVOX0JESU5GT19WRVJTSU9OKTsKLQkJcnYgPSAtMTsKKwlvZmZzZXQgPSBORVRYRU5fQlJEQ0ZHX1NUQVJUICsKKwkJb2Zmc2V0b2Yoc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvLCBoZWFkZXJfdmVyc2lvbik7CisJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmhlYWRlcl92ZXJzaW9uKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobWFnaWMgIT0gTkVUWEVOX0JESU5GT19NQUdJQyB8fAorCQkJaGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJpbnZhbGlkIGJvYXJkIGNvbmZpZywgbWFnaWM9JTA4eCwgdmVyc2lvbj0lMDh4XG4iLAorCQkJbWFnaWMsIGhlYWRlcl92ZXJzaW9uKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGJvYXJkaW5mby0+Ym9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NKSB7CisJb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCisJCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgYm9hcmRfdHlwZSk7CisJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmJvYXJkX3R5cGUpKQorCQlyZXR1cm4gLUVJTzsKKworCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gYm9hcmRfdHlwZTsKKworCWlmIChib2FyZF90eXBlID09IE5FVFhFTl9CUkRUWVBFX1AzXzRfR0JfTU0pIHsKIAkJdTMyIGdwaW8gPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsCiAJCQkJTkVUWEVOX1JPTVVTQl9HTEJfUEFEX0dQSU9fSSk7CiAJCWlmICgoZ3BpbyAmIDB4ODAwMCkgPT0gMCkKLQkJCWJvYXJkaW5mby0+Ym9hcmRfdHlwZSA9IE5FVFhFTl9CUkRUWVBFX1AzXzEwR19UUDsKKwkJCWJvYXJkX3R5cGUgPSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA7CiAJfQogCi0Jc3dpdGNoICgobmV0eGVuX2JyZHR5cGVfdCkgYm9hcmRpbmZvLT5ib2FyZF90eXBlKSB7CisJc3dpdGNoICgobmV0eGVuX2JyZHR5cGVfdClib2FyZF90eXBlKSB7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gTkVUWEVOX05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEc6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaOgpAQCAtMjA3Niw3ICsyMTY2LDcgQEAKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19TRlBfUVQ6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfWEdCRTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IE5FVFhFTl9OSUNfWEdCRTsKIAkJYnJlYWs7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9CRDoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AxX1NCOgpAQCAtMjA4NSwyMCArMjE3NSwxOSBAQAogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQjoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0JfTU06Ci0JCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gTkVUWEVOX05JQ19HQkU7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX0dCRTsKIAkJYnJlYWs7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gKGFkYXB0ZXItPnBvcnRudW0gPCAyKSA/CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSAoYWRhcHRlci0+cG9ydG51bSA8IDIpID8KIAkJCU5FVFhFTl9OSUNfWEdCRSA6IE5FVFhFTl9OSUNfR0JFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBVbmtub3duKCV4KVxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSk7Ci0JCXJ2ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5rbm93biBib2FyZCB0eXBlICV4XG4iLCBib2FyZF90eXBlKTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IE5FVFhFTl9OSUNfWEdCRTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIHJ2OworCXJldHVybiAwOwogfQogCiAvKiBOSVUgYWNjZXNzIHNlY3Rpb25zICovCkBAIC0yMTQ0LDcgKzIyMzMsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAogCQkJCU5FVFhFTl9QT1JUX01PREVfQUREUiwgJnBvcnRfbW9kZSwgNCk7CiAJCWlmIChwb3J0X21vZGUgPT0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUCkgewpAQCAtMjE5OSwzMiArMjI4OCwyNyBAQAogCX0KIH0KIAotdm9pZCBuZXR4ZW5fbmljX2ZsYXNoX3ByaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdTMyIGZ3X21ham9yID0gMDsKLQl1MzIgZndfbWlub3IgPSAwOwotCXUzMiBmd19idWlsZCA9IDA7CisJdTMyIGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQ7CiAJY2hhciBicmRfbmFtZVtORVRYRU5fTUFYX1NIT1JUX05BTUVdOwogCWNoYXIgc2VyaWFsX251bVszMl07Ci0JaW50IGksIGFkZHI7Ci0JX19sZTMyICpwdHIzMjsKLQotCXN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICYoYWRhcHRlci0+YWh3LmJvYXJkY2ZnKTsKKwlpbnQgaSwgYWRkciwgdmFsOworCWludCAqcHRyMzI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCiAJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMDsKIAotCXB0cjMyID0gKHUzMiAqKSZzZXJpYWxfbnVtOworCXB0cjMyID0gKGludCAqKSZzZXJpYWxfbnVtOwogCWFkZHIgPSBORVRYRU5fVVNFUl9TVEFSVCArCiAJICAgICAgIG9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fbmV3X3VzZXJfaW5mbywgc2VyaWFsX251bSk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgcHRyMzIpID09IC0xKSB7Ci0JCQlwcmludGsoIiVzOiBFUlJPUiByZWFkaW5nICVzIGJvYXJkIHVzZXJhcmVhLlxuIiwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAotCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgJnZhbCkgPT0gLTEpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHJlYWRpbmcgYm9hcmQgaW5mb1xuIik7CiAJCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwogCQkJcmV0dXJuOwogCQl9Ci0JCXB0cjMyKys7CisJCXB0cjMyW2ldID0gY3B1X3RvX2xlMzIodmFsKTsKIAkJYWRkciArPSBzaXplb2YodTMyKTsKIAl9CiAKQEAgLTIyMzMsMjMgKzIzMTcsNDggQEAKIAlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX1NVQiwgJmZ3X2J1aWxkLCA0KTsKIAogCWFkYXB0ZXItPmZ3X21ham9yID0gZndfbWFqb3I7CisJYWRhcHRlci0+ZndfdmVyc2lvbiA9IE5FVFhFTl9WRVJTSU9OX0NPREUoZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAKIAlpZiAoYWRhcHRlci0+cG9ydG51bSA9PSAwKSB7Ci0JCWdldF9icmRfbmFtZV9ieV90eXBlKGJvYXJkX2luZm8tPmJvYXJkX3R5cGUsIGJyZF9uYW1lKTsKKwkJZ2V0X2JyZF9uYW1lX2J5X3R5cGUoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUsIGJyZF9uYW1lKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJOZXRYZW4gJXMgQm9hcmQgUy9OICVzICBDaGlwIHJldiAweCV4XG4iLAogCQkJCWJyZF9uYW1lLCBzZXJpYWxfbnVtLCBhZGFwdGVyLT5haHcucmV2aXNpb25faWQpOwotCQlwcmludGsoS0VSTl9JTkZPICJOZXRYZW4gRmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZFxuIiwKLQkJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKIAl9CiAKLQlpZiAoTkVUWEVOX1ZFUlNJT05fQ09ERShmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKSA8Ci0JCQlORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKKwlpZiAoYWRhcHRlci0+ZndfdmVyc2lvbiA8IE5FVFhFTl9WRVJTSU9OX0NPREUoMywgNCwgMjE2KSkgewogCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkIHVuc3VwcG9ydGVkXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkIHVuc3VwcG9ydGVkXG4iLAogCQkJCWZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwogCQlyZXR1cm47CiAJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWRcbiIsCisJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKKwkJCQlORVRYRU5fTUlVX01OX0NPTlRST0wsICZpLCA0KTsKKwkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKGkgJiAweDQpID8gMSA6IDA7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJmaXJtd2FyZSBydW5uaW5nIGluICVzIG1vZGVcbiIsCisJCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA/ICJjdXQtdGhyb3VnaCIgOiAibGVnYWN5Iik7CisJfQogfQogCitpbnQKK25ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHdvbF9jZmc7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuIDA7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJR19OVik7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKSB7CisJCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHKTsKKwkJaWYgKHdvbF9jZmcgJiAoMSA8PCBhZGFwdGVyLT5wb3J0bnVtKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKaW5kZXggYWFlNzM3ZC4uMDRiNDdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBTdHJ1Y3R1cmVzLCBlbnVtcywgYW5kIG1hY3JvcyBmb3IgdGhlIE1BQworICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtNTQsMzcgKzUxLDEyIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfaHdfYmxvY2tfd3JpdGU2NCh1NjQgX19pb21lbSAqIGRhdGFfcHRyLAotCQkJCQkgICAgICAgdTY0IF9faW9tZW0gKiBhZGRyLAotCQkJCQkgICAgICAgaW50IG51bV93b3JkcykKLXsKLQlpbnQgbnVtOwotCWZvciAobnVtID0gMDsgbnVtIDwgbnVtX3dvcmRzOyBudW0rKykgewotCQl3cml0ZXEocmVhZHEoKHZvaWQgX19pb21lbSAqKWRhdGFfcHRyKSwgYWRkcik7Ci0JCWFkZHIrKzsKLQkJZGF0YV9wdHIrKzsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2h3X2Jsb2NrX3JlYWQ2NCh1NjQgX19pb21lbSAqIGRhdGFfcHRyLAotCQkJCQkgICAgICB1NjQgX19pb21lbSAqIGFkZHIsIGludCBudW1fd29yZHMpCi17Ci0JaW50IG51bTsKLQlmb3IgKG51bSA9IDA7IG51bSA8IG51bV93b3JkczsgbnVtKyspIHsKLQkJd3JpdGVxKHJlYWRxKCh2b2lkIF9faW9tZW0gKilhZGRyKSwgZGF0YV9wdHIpOwotCQlhZGRyKys7Ci0JCWRhdGFfcHRyKys7Ci0JfQotCi19Ci0KIHN0cnVjdCBuZXR4ZW5fYWRhcHRlcjsKIAogI2RlZmluZSBORVRYRU5fUENJX01BUFNJWkVfQllURVMgIChORVRYRU5fUENJX01BUFNJWkUgPDwgMjApCiAKIHN0cnVjdCBuZXR4ZW5fcG9ydDsKIHZvaWQgbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIG5ldHhlbl9uaWNfZmxhc2hfcHJpbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAogdHlwZWRlZiB1OCBuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90WzZdOwogCkBAIC0xNDgsMzMgKzEyMCw2IEBACiAjZGVmaW5lIG5ldHhlbl9nYl9nZXRfc29mdF9yZXNldChjb25maWdfd29yZCkJXAogCQlfbmV0eGVuX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDMxKQogCi0vKgotICogTklVIEdCIE1BQyBDb25maWcgUmVnaXN0ZXIgMSAoYXBwbGllcyB0byBHQjAsIEdCMSwgR0IyLCBHQjMpCi0gKgotICoJQml0IDAJICAgIDogZHVwbGV4ID0+IDE6ZnVsbCBkdXBsZXggbW9kZSwgMDpoYWxmIGR1cGxleAotICoJQml0IDEJICAgIDogY3JjX2VuYWJsZSA9PiAxOmFwcGVuZCBDUkMgdG8geG1pdCBmcmFtZXMsIDA6ZG9udCBhcHBlbmQKLSAqCUJpdCAyCSAgICA6IHBhZHNob3J0ID0+IDE6cGFkIHNob3J0IGZyYW1lcyBhbmQgYWRkIENSQywgMDpkb250IHBhZAotICoJQml0IDQJICAgIDogY2hlY2tsZW5ndGggPT4gMTpjaGVjayBmcmFtZWxlbiB3aXRoIGFjdHVhbCwwOmRvbnQgY2hlY2sKLSAqCUJpdCA1CSAgICA6IGh1Z2VmcmFtZXMgPT4gMTphbGxvdyBvdmVyc2l6ZSB4bWl0IGZyYW1lcywgMDpkb250IGFsbG93Ci0gKglCaXRzIDgtOSAgICA6IGludGZtb2RlID0+IDAxOm5pYmJsZSAoMTAvMTAwKSwgMTA6Ynl0ZSAoMTAwMCkKLSAqCUJpdHMgMTItMTUgIDogcHJlYW1ibGVsZW4gPT4gcHJlYW1ibGUgZmllbGQgbGVuZ3RoIGluIGJ5dGVzLCBkZWZhdWx0IDcKLSAqLwotCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfZHVwbGV4KGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMCkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9jcmNfZW5hYmxlKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMSkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9wYWRzaG9ydChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDIpCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfY2hlY2tsZW5ndGgoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCA0KQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2h1Z2VmcmFtZXMoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCA1KQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X3ByZWFtYmxlbGVuKGNvbmZpZ193b3JkLCB2YWwpCVwKLQkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpIDw8IDEyKSAmIDB4RjAwMCkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9pbnRmbW9kZShjb25maWdfd29yZCwgdmFsKQkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAoKHZhbCkgPDwgOCkgJiAweDMwMCkKLQogI2RlZmluZSBuZXR4ZW5fZ2JfZ2V0X3N0YXRpb25hZGRyZXNzX2xvdyhjb25maWdfd29yZCkgKChjb25maWdfd29yZCkgPj4gMTYpCiAKICNkZWZpbmUgbmV0eGVuX2diX3NldF9taWlfbWdtdF9jbG9ja3NlbGVjdChjb25maWdfd29yZCwgdmFsKQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggZmZkMzdiZS4uMDc1OWMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU291cmNlIGZpbGUgZm9yIE5JQyByb3V0aW5lcyB0byBpbml0aWFsaXplIHRoZSBQaGFudG9tIEhhcmR3YXJlCisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC01MiwxNyArNDksOSBAQAogCiAjZGVmaW5lIE5FVFhFTl9OSUNfWERNQV9SRVNFVCAweDgwMDBmZgogCi1zdGF0aWMgdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQl1aW50MzJfdCBjdHgsIHVpbnQzMl90IHJpbmdpZCk7Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2xvY2tlZF93cml0ZV9yZWcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQl1bnNpZ25lZCBsb25nIG9mZiwgaW50ICpkYXRhKQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCXdyaXRlbCgqZGF0YSwgYWRkcik7Ci19Ci0jZW5kaWYgIC8qICAwICAqLworc3RhdGljIHZvaWQKK25ldHhlbl9wb3N0X3J4X2J1ZmZlcnNfbm9kYihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyk7CiAKIHN0YXRpYyB2b2lkIGNyYl9hZGRyX3RyYW5zZm9ybV9zZXR1cCh2b2lkKQogewpAQCAtMTYwLDIzICsxNDksMjEgQEAKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWY7Ci0JaW50IGksIGN0eGlkLCByaW5nOworCWludCBpLCByaW5nOwogCi0JZm9yIChjdHhpZCA9IDA7IGN0eGlkIDwgTUFYX1JDVl9DVFg7ICsrY3R4aWQpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4aWRdOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCQkJZm9yIChpID0gMDsgaSA8IHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudDsgKytpKSB7Ci0JCQkJcnhfYnVmID0gJihyZHNfcmluZy0+cnhfYnVmX2FycltpXSk7Ci0JCQkJaWYgKHJ4X2J1Zi0+c3RhdGUgPT0gTkVUWEVOX0JVRkZFUl9GUkVFKQotCQkJCQljb250aW51ZTsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQlyeF9idWYtPmRtYSwKLQkJCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSwKLQkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQkJaWYgKHJ4X2J1Zi0+c2tiICE9IE5VTEwpCi0JCQkJCWRldl9rZnJlZV9za2JfYW55KHJ4X2J1Zi0+c2tiKTsKLQkJCX0KKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCWZvciAoaSA9IDA7IGkgPCByZHNfcmluZy0+bnVtX2Rlc2M7ICsraSkgeworCQkJcnhfYnVmID0gJihyZHNfcmluZy0+cnhfYnVmX2FycltpXSk7CisJCQlpZiAocnhfYnVmLT5zdGF0ZSA9PSBORVRYRU5fQlVGRkVSX0ZSRUUpCisJCQkJY29udGludWU7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCXJ4X2J1Zi0+ZG1hLAorCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsCisJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlpZiAocnhfYnVmLT5za2IgIT0gTlVMTCkKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7CiAJCX0KIAl9CiB9CkBAIC0xODgsNyArMTc1LDcgQEAKIAlpbnQgaSwgajsKIAogCWNtZF9idWYgPSBhZGFwdGVyLT5jbWRfYnVmX2FycjsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhkOyBpKyspIHsKIAkJYnVmZnJhZyA9IGNtZF9idWYtPmZyYWdfYXJyYXk7CiAJCWlmIChidWZmcmFnLT5kbWEpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgYnVmZnJhZy0+ZG1hLApAQCAtMjA0LDcgKzE5MSw2IEBACiAJCQkJYnVmZnJhZy0+ZG1hID0gMFVMTDsKIAkJCX0KIAkJfQotCQkvKiBGcmVlIHRoZSBza2Igd2UgcmVjZWl2ZWQgaW4gbmV0eGVuX25pY194bWl0X2ZyYW1lICovCiAJCWlmIChjbWRfYnVmLT5za2IpIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KGNtZF9idWYtPnNrYik7CiAJCQljbWRfYnVmLT5za2IgPSBOVUxMOwpAQCAtMjE3LDE4ICsyMDMsMTcgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwotCWludCBjdHgsIHJpbmc7CisJaW50IHJpbmc7CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyBjdHgrKykgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCQkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyKSB7Ci0JCQkJdmZyZWUocmRzX3JpbmctPnJ4X2J1Zl9hcnIpOwotCQkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gTlVMTDsKLQkJCX0KKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FycikgeworCQkJdmZyZWUocmRzX3JpbmctPnJ4X2J1Zl9hcnIpOworCQkJcmRzX3JpbmctPnJ4X2J1Zl9hcnIgPSBOVUxMOwogCQl9CiAJfQorCiAJaWYgKGFkYXB0ZXItPmNtZF9idWZfYXJyKQogCQl2ZnJlZShhZGFwdGVyLT5jbWRfYnVmX2Fycik7CiAJcmV0dXJuOwpAQCAtMjM4LDkwICsyMjMsOTcgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOwotCWludCBjdHgsIHJpbmcsIGksIG51bV9yeF9idWZzOworCWludCByaW5nLCBpLCBudW1fcnhfYnVmczsKIAogCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqY21kX2J1Zl9hcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCWNtZF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqKXZtYWxsb2MoVFhfUklOR1NJWkUpOworCWNtZF9idWZfYXJyID0KKwkJKHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqKXZtYWxsb2MoVFhfQlVGRl9SSU5HU0laRShhZGFwdGVyKSk7CiAJaWYgKGNtZF9idWZfYXJyID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGNtZCBidWZmZXIgcmluZ1xuIiwKIAkJICAgICAgIG5ldGRldi0+bmFtZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoY21kX2J1Zl9hcnIsIDAsIFRYX1JJTkdTSVpFKTsKKwltZW1zZXQoY21kX2J1Zl9hcnIsIDAsIFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikpOwogCWFkYXB0ZXItPmNtZF9idWZfYXJyID0gY21kX2J1Zl9hcnI7CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyBjdHgrKykgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOwotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCQkJc3dpdGNoIChSQ1ZfREVTQ19UWVBFKHJpbmcpKSB7Ci0JCQljYXNlIFJDVl9ERVNDX05PUk1BTDoKLQkJCQlyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQgPQotCQkJCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19OT1JNQUw7Ci0JCQkJaWYgKGFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkgewotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQotCQkJCQkJTlhfQ1RfREVGQVVMVF9SWF9CVUZfTEVOOwotCQkJCQlyZHNfcmluZy0+c2tiX3NpemUgPQotCQkJCQkJTlhfQ1RfREVGQVVMVF9SWF9CVUZfTEVOOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0RNQV9NQVBfTEVOOwotCQkJCQlyZHNfcmluZy0+c2tiX3NpemUgPQotCQkJCQkJTUFYX1JYX0JVRkZFUl9MRU5HVEg7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIFJDVl9ERVNDX0pVTUJPOgotCQkJCXJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCA9Ci0JCQkJCWFkYXB0ZXItPm1heF9qdW1ib19yeF9kZXNjX2NvdW50OwotCQkJCXJkc19yaW5nLT5mbGFncyA9IFJDVl9ERVNDX0pVTUJPOwotCQkJCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQotCQkJCQkJTlhfUDNfUlhfSlVNQk9fQlVGX01BWF9MRU47Ci0JCQkJZWxzZQotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQotCQkJCQkJTlhfUDJfUlhfSlVNQk9fQlVGX01BWF9MRU47CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlzd2l0Y2ggKHJpbmcpIHsKKwkJY2FzZSBSQ1ZfUklOR19OT1JNQUw6CisJCQlyZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fcnhkOworCQkJaWYgKGFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkgeworCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9CisJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKIAkJCQlyZHNfcmluZy0+c2tiX3NpemUgPQotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgKyBORVRfSVBfQUxJR047Ci0JCQkJYnJlYWs7CisJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKKwkJCX0gZWxzZSB7CisJCQkJcmRzX3JpbmctPmRtYV9zaXplID0gUlhfRE1BX01BUF9MRU47CisJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KKwkJCQkJTUFYX1JYX0JVRkZFUl9MRU5HVEg7CisJCQl9CisJCQlicmVhazsKIAotCQkJY2FzZSBSQ1ZfUklOR19MUk86Ci0JCQkJcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50ID0KLQkJCQkJYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50OwotCQkJCXJkc19yaW5nLT5mbGFncyA9IFJDVl9ERVNDX0xSTzsKLQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9MUk9fRE1BX01BUF9MRU47Ci0JCQkJcmRzX3JpbmctPnNrYl9zaXplID0gTUFYX1JYX0xST19CVUZGRVJfTEVOR1RIOwotCQkJCWJyZWFrOworCQljYXNlIFJDVl9SSU5HX0pVTUJPOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX2p1bWJvX3J4ZDsKKwkJCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9CisJCQkJCU5YX1AzX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCQkJZWxzZQorCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9CisJCQkJCU5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCQkJcmRzX3JpbmctPnNrYl9zaXplID0KKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgKyBORVRfSVBfQUxJR047CisJCQlicmVhazsKIAotCQkJfQotCQkJcmRzX3JpbmctPnJ4X2J1Zl9hcnIgPSAoc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKikKLQkJCQl2bWFsbG9jKFJDVl9CVUZGU0laRSk7Ci0JCQlpZiAocmRzX3JpbmctPnJ4X2J1Zl9hcnIgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCQkJCSJyeCBidWZmZXIgcmluZyAlZFxuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lLCByaW5nKTsKLQkJCQkvKiBmcmVlIHdoYXRldmVyIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCAqLwotCQkJCWdvdG8gZXJyX291dDsKLQkJCX0KLQkJCW1lbXNldChyZHNfcmluZy0+cnhfYnVmX2FyciwgMCwgUkNWX0JVRkZTSVpFKTsKLQkJCUlOSVRfTElTVF9IRUFEKCZyZHNfcmluZy0+ZnJlZV9saXN0KTsKLQkJCS8qCi0JCQkgKiBOb3cgZ28gdGhyb3VnaCBhbGwgb2YgdGhlbSwgc2V0IHJlZmVyZW5jZSBoYW5kbGVzCi0JCQkgKiBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlcy4KLQkJCSAqLwotCQkJbnVtX3J4X2J1ZnMgPSByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQ7Ci0JCQlyeF9idWYgPSByZHNfcmluZy0+cnhfYnVmX2FycjsKLQkJCWZvciAoaSA9IDA7IGkgPCBudW1fcnhfYnVmczsgaSsrKSB7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmcnhfYnVmLT5saXN0LAotCQkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOwotCQkJCXJ4X2J1Zi0+cmVmX2hhbmRsZSA9IGk7Ci0JCQkJcnhfYnVmLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKLQkJCQlyeF9idWYrKzsKLQkJCX0KKwkJY2FzZSBSQ1ZfUklOR19MUk86CisJCQlyZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fbHJvX3J4ZDsKKwkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0xST19ETUFfTUFQX0xFTjsKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IE1BWF9SWF9MUk9fQlVGRkVSX0xFTkdUSDsKKwkJCWJyZWFrOworCiAJCX0KKwkJcmRzX3JpbmctPnJ4X2J1Zl9hcnIgPSAoc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKikKKwkJCXZtYWxsb2MoUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpKTsKKwkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkJInJ4IGJ1ZmZlciByaW5nICVkXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CisJCQkvKiBmcmVlIHdoYXRldmVyIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCAqLworCQkJZ290byBlcnJfb3V0OworCQl9CisJCW1lbXNldChyZHNfcmluZy0+cnhfYnVmX2FyciwgMCwgUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkvKgorCQkgKiBOb3cgZ28gdGhyb3VnaCBhbGwgb2YgdGhlbSwgc2V0IHJlZmVyZW5jZSBoYW5kbGVzCisJCSAqIGFuZCBwdXQgdGhlbSBpbiB0aGUgcXVldWVzLgorCQkgKi8KKwkJbnVtX3J4X2J1ZnMgPSByZHNfcmluZy0+bnVtX2Rlc2M7CisJCXJ4X2J1ZiA9IHJkc19yaW5nLT5yeF9idWZfYXJyOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X2J1ZnM7IGkrKykgeworCQkJbGlzdF9hZGRfdGFpbCgmcnhfYnVmLT5saXN0LAorCQkJCQkmcmRzX3JpbmctPmZyZWVfbGlzdCk7CisJCQlyeF9idWYtPnJlZl9oYW5kbGUgPSBpOworCQkJcnhfYnVmLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKKwkJCXJ4X2J1ZisrOworCQl9CisJCXNwaW5fbG9ja19pbml0KCZyZHNfcmluZy0+bG9jayk7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlzZHNfcmluZy0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzW3JpbmddLnZlY3RvcjsKKwkJc2RzX3JpbmctPmNsZWFuX3R4ID0gKHJpbmcgPT0gMCk7CisJCXNkc19yaW5nLT5wb3N0X3J4ZCA9IChyaW5nID09IDApOworCQlzZHNfcmluZy0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCXNkc19yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV9yeGQ7CisKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgaSsrKQorCQkJSU5JVF9MSVNUX0hFQUQoJnNkc19yaW5nLT5mcmVlX2xpc3RbaV0pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzMzLDcgKzMyNSw3IEBACiAKIHZvaWQgbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vcHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5wb3J0X3R5cGUpIHsKIAljYXNlIE5FVFhFTl9OSUNfR0JFOgogCQlhZGFwdGVyLT5lbmFibGVfcGh5X2ludGVycnVwdHMgPQogCQkgICAgbmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzOwpAQCAtMzk5LDkgKzM5MSw2IEBACiAKIHN0YXRpYyBsb25nIHJvbV9tYXhfdGltZW91dCA9IDEwMDsKIHN0YXRpYyBsb25nIHJvbV9sb2NrX3RpbWVvdXQgPSAxMDAwMDsKLSNpZiAwCi1zdGF0aWMgbG9uZyByb21fd3JpdGVfdGltZW91dCA9IDcwMDsKLSNlbmRpZgogCiBzdGF0aWMgaW50IHJvbV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTQ1MiwzOCArNDQxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLXN0YXRpYyBpbnQgbmV0eGVuX3JvbV93cmVuKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBTZXQgd3JpdGUgZW5hYmxlIGxhdGNoIGluIFJPTSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKLQkJCSAgICAgTTI1UF9JTlNUUl9XUkVOKTsKLQlpZiAobmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcikpIHsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBuZXR4ZW5fcmRjcmJyZWcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgZGF0YSA9IDB4ZGVhZGRlYWQ7Ci0JZGF0YSA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgYWRkcik7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0eGVuX2RvX3JvbV9yZHNyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfUkRTUik7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIG5ldHhlbl9yZGNyYnJlZyhhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9SREFUQSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgbmV0eGVuX3JvbV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiB2YWw7CkBAIC00OTMsNDQgKzQ1MCw2IEBACiAKIH0KIAotI2lmIDAKLXN0YXRpYyBpbnQgbmV0eGVuX3JvbV93aXBfcG9sbChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbG9uZyB0aW1lb3V0ID0gMDsKLQlsb25nIHdpcCA9IDE7Ci0JaW50IHZhbDsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOwotCXdoaWxlICh3aXAgIT0gMCkgewotCQl2YWwgPSBuZXR4ZW5fZG9fcm9tX3Jkc3IoYWRhcHRlcik7Ci0JCXdpcCA9IHZhbCAmIDE7Ci0JCXRpbWVvdXQrKzsKLQkJaWYgKHRpbWVvdXQgPiByb21fbWF4X3RpbWVvdXQpIHsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19yb21fZmFzdF93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAotCQkJICAgICBpbnQgZGF0YSkKLXsKLQlpZiAobmV0eGVuX3JvbV93cmVuKGFkYXB0ZXIpKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fV0RBVEEsIGRhdGEpOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FERFJFU1MsIGFkZHIpOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FCWVRFX0NOVCwgMyk7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLAotCQkJICAgICBNMjVQX0lOU1RSX1BQKTsKLQlpZiAobmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcikpIHsKLQkJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgZG9fcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgaW50IGFkZHIsIGludCAqdmFscCkKIHsKQEAgLTU5NywyODQgKzUxNiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmIDAKLWludCBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGRhdGEpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldCA9IGRvX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsIGFkZHIsIGRhdGEpOwotCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgIGludCBhZGRyLCB1OCAqYnl0ZXMsIHNpemVfdCBzaXplKQotewotCWludCBhZGRyaWR4ID0gYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQotCXdoaWxlIChhZGRyaWR4IDwgKGFkZHIgKyBzaXplKSkgewotCQlpbnQgbGFzdF9hdHRlbXB0ID0gMDsKLQkJaW50IHRpbWVvdXQgPSAwOwotCQlpbnQgZGF0YTsKLQotCQlkYXRhID0gbGUzMl90b19jcHUoKCooX19sZTMyKilieXRlcykpOwotCQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLCBhZGRyaWR4LCBkYXRhKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXdoaWxlKDEpIHsKLQkJCWludCBkYXRhMTsKLQotCQkJcmV0ID0gZG9fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyaWR4LCAmZGF0YTEpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQotCQkJaWYgKGRhdGExID09IGRhdGEpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICh0aW1lb3V0KysgPj0gcm9tX3dyaXRlX3RpbWVvdXQpIHsKLQkJCQlpZiAobGFzdF9hdHRlbXB0KysgPCA0KSB7Ci0JCQkJCXJldCA9IGRvX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsCi0JCQkJCQkJCWFkZHJpZHgsIGRhdGEpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJEYXRhIHdyaXRlIGRpZCBub3QgIgotCQkJCQkgICAic3VjY2VlZCBhdCBhZGRyZXNzIDB4JXhcbiIsIGFkZHJpZHgpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlieXRlcyArPSA0OwotCQlhZGRyaWR4ICs9IDQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAotCQkJCQl1OCAqYnl0ZXMsIHNpemVfdCBzaXplKQotewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gcm9tX2xvY2soYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkb19yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBhZGRyLCBieXRlcywgc2l6ZSk7Ci0JbmV0eGVuX3JvbV91bmxvY2soYWRhcHRlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd3JzcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBuZXR4ZW5fcm9tX3dyZW4oYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fV0RBVEEsIGRhdGEpOwotCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAotCQkJCQlORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsIDB4MSk7Ci0KLQlyZXQgPSBuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fcmRzcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJvbV9sb2NrKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gbmV0eGVuX2RvX3JvbV9yZHNyKGFkYXB0ZXIpOwotCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBuZXR4ZW5fYmFja3VwX2NyYmluaXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQgPSBGTEFTSF9TVUNDRVNTOwotCWludCB2YWw7Ci0JY2hhciAqYnVmZmVyID0ga21hbGxvYyhORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCS8qIHVubG9jayBzZWN0b3IgNjMgKi8KLQl2YWwgPSBuZXR4ZW5fcm9tX3Jkc3IoYWRhcHRlcik7Ci0JdmFsID0gdmFsICYgMHhlMzsKLQlyZXQgPSBuZXR4ZW5fcm9tX3dyc3IoYWRhcHRlciwgdmFsKTsKLQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JcmV0ID0gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JLyogY29weSAgc2VjdG9yIDAgdG8gc2VjdG9yIDYzICovCi0JcmV0ID0gbmV0eGVuX3JvbV9mYXN0X3JlYWRfd29yZHMoYWRhcHRlciwgTkVUWEVOX0NSQklOSVRfU1RBUlQsCi0JCQkJCWJ1ZmZlciwgTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JcmV0ID0gbmV0eGVuX3JvbV9mYXN0X3dyaXRlX3dvcmRzKGFkYXB0ZXIsIE5FVFhFTl9GSVhFRF9TVEFSVCwKLQkJCQkJYnVmZmVyLCBORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkUpOwotCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykKLQkJZ290byBvdXRfa2ZyZWU7Ci0KLQkvKiBsb2NrIHNlY3RvciA2MyAqLwotCXZhbCA9IG5ldHhlbl9yb21fcmRzcihhZGFwdGVyKTsKLQlpZiAoISh2YWwgJiAweDgpKSB7Ci0JCXZhbCB8PSAoMHgxIDw8IDIpOwotCQkvKiBsb2NrIHNlY3RvciA2MyAqLwotCQlpZiAobmV0eGVuX3JvbV93cnNyKGFkYXB0ZXIsIHZhbCkgPT0gMCkgewotCQkJcmV0ID0gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLQkJCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykKLQkJCQlnb3RvIG91dF9rZnJlZTsKLQotCQkJLyogbG9jayBTUiB3cml0ZXMgKi8KLQkJCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCQkJZ290byBvdXRfa2ZyZWU7Ci0JCX0KLQl9Ci0KLW91dF9rZnJlZToKLQlrZnJlZShidWZmZXIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0eGVuX2RvX3JvbV9zZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKQotewotCW5ldHhlbl9yb21fd3JlbihhZGFwdGVyKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKLQkJCSAgICAgTTI1UF9JTlNUUl9TRSk7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FCWVRFX0NOVCwgMCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX2VyYXNlZF9mbGFzaChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKQotewotCWludCBpOwotCWludCB2YWw7Ci0JaW50IGNvdW50ID0gMCwgZXJhc2VkX2Vycm9ycyA9IDA7Ci0JaW50IHJhbmdlOwotCi0JcmFuZ2UgPSAoYWRkciA9PSBORVRYRU5fVVNFUl9TVEFSVCkgPwotCQlORVRYRU5fRklYRURfU1RBUlQgOiBhZGRyICsgTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFOwotCi0JZm9yIChpID0gYWRkcjsgaSA8IHJhbmdlOyBpICs9IDQpIHsKLQkJbmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgaSwgJnZhbCk7Ci0JCWlmICh2YWwgIT0gMHhmZmZmZmZmZikKLQkJCWVyYXNlZF9lcnJvcnMrKzsKLQkJY291bnQrKzsKLQl9Ci0KLQlpZiAoZXJhc2VkX2Vycm9ycykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiMHgleCBvdXQgb2YgMHgleCB3b3JkcyBmYWlsIHRvIGJlIGVyYXNlZCAiCi0JCQkiZm9yIHNlY3RvciBhZGRyZXNzOiAleFxuIiwgZXJhc2VkX2Vycm9ycywgY291bnQsIGFkZHIpOwotfQotCi1pbnQgbmV0eGVuX3JvbV9zZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKQotewotCWludCByZXQgPSAwOwotCWlmIChyb21fbG9jayhhZGFwdGVyKSAhPSAwKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0ID0gbmV0eGVuX2RvX3JvbV9zZShhZGFwdGVyLCBhZGRyKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQltc2xlZXAoMzApOwotCWNoZWNrX2VyYXNlZF9mbGFzaChhZGFwdGVyLCBhZGRyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY3Rpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgICAgaW50IHN0YXJ0LCBpbnQgZW5kKQotewotCWludCByZXQgPSBGTEFTSF9TVUNDRVNTOwotCWludCBpOwotCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotCQlyZXQgPSBuZXR4ZW5fcm9tX3NlKGFkYXB0ZXIsIGkgKiBORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkUpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLW5ldHhlbl9mbGFzaF9lcmFzZV9zZWNvbmRhcnkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQgPSBGTEFTSF9TVUNDRVNTOwotCWludCBzdGFydCwgZW5kOwotCi0Jc3RhcnQgPSBORVRYRU5fU0VDT05EQVJZX1NUQVJUIC8gTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFOwotCWVuZCAgID0gTkVUWEVOX1VTRVJfU1RBUlQgLyBORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkU7Ci0JcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY3Rpb25zKGFkYXB0ZXIsIHN0YXJ0LCBlbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50Ci1uZXR4ZW5fZmxhc2hfZXJhc2VfcHJpbWFyeShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHJldCA9IEZMQVNIX1NVQ0NFU1M7Ci0JaW50IHN0YXJ0LCBlbmQ7Ci0KLQlzdGFydCA9IE5FVFhFTl9QUklNQVJZX1NUQVJUIC8gTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFOwotCWVuZCAgID0gTkVUWEVOX1NFQ09OREFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQlyZXQgPSBuZXR4ZW5fZmxhc2hfZXJhc2Vfc2VjdGlvbnMoYWRhcHRlciwgc3RhcnQsIGVuZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIG5ldHhlbl9oYWx0X3BlZ3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzAgKyAweDNjLCAxKTsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHgzYywgMSk7Ci0JIG5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMiArIDB4M2MsIDEpOwotCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzMgKyAweDNjLCAxKTsKLX0KLQotaW50IG5ldHhlbl9mbGFzaF91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gbmV0eGVuX3JvbV93cnNyKGFkYXB0ZXIsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gbmV0eGVuX3JvbV93cmVuKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KICNkZWZpbmUgTkVUWEVOX0JPQVJEVFlQRQkJMHg0MDA4CiAjZGVmaW5lIE5FVFhFTl9CT0FSRE5VTSAJCTB4NDAwYwogI2RlZmluZSBORVRYRU5fQ0hJUE5VTQkJCTB4NDAxMApAQCAtMTE2OCw2ICs4MDksNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbmV0eGVuX2FsbG9jX3J4X3NrYihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZywKKwkJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgZG1hOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWJ1ZmZlci0+c2tiID0gZGV2X2FsbG9jX3NrYihyZHNfcmluZy0+c2tiX3NpemUpOworCWlmICghYnVmZmVyLT5za2IpCisJCXJldHVybiAxOworCisJc2tiID0gYnVmZmVyLT5za2I7CisKKwlpZiAoIWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKworCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJCXJkc19yaW5nLT5kbWFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZG1hKSkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlidWZmZXItPnNrYiA9IE5VTEw7CisJCXJldHVybiAxOworCX0KKworCWJ1ZmZlci0+c2tiID0gc2tiOworCWJ1ZmZlci0+ZG1hID0gZG1hOworCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0JVU1k7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBza19idWZmICpuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZywgdTE2IGluZGV4LCB1MTYgY2tzdW0pCiB7CkBAIC0xMTkyLDE2NCArODY3LDEyMSBAQAogCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJYnVmZmVyLT5za2IgPSBOVUxMOwotCiBub19za2I6CiAJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKLQlidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzID0gMDsKLQlidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyA9IDA7Ci0JbGlzdF9hZGRfdGFpbCgmYnVmZmVyLT5saXN0LCAmcmRzX3JpbmctPmZyZWVfbGlzdCk7CiAJcmV0dXJuIHNrYjsKIH0KIAotLyoKLSAqIG5ldHhlbl9wcm9jZXNzX3JjdigpIHNlbmQgdGhlIHJlY2VpdmVkIHBhY2tldCB0byB0aGUgcHJvdG9jb2wgc3RhY2suCi0gKiBhbmQgaWYgdGhlIG51bWJlciBvZiByZWNlaXZlcyBleGNlZWRzIFJYX0JVRkZFUlNfUkVGSUxMLCB0aGVuIHdlCi0gKiBpbnZva2UgdGhlIHJvdXRpbmUgdG8gc2VuZCBtb3JlIHJ4IGJ1ZmZlcnMgdG8gdGhlIFBoYW50b20uLi4KLSAqLwotc3RhdGljIHZvaWQgbmV0eGVuX3Byb2Nlc3NfcmN2KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGN0eGlkLAotCQlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2MsIHN0cnVjdCBzdGF0dXNfZGVzYyAqZnJhZ19kZXNjKQorc3RhdGljIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICoKK25ldHhlbl9wcm9jZXNzX3JjdihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCWludCByaW5nLCBpbnQgaW5kZXgsIGludCBsZW5ndGgsIGludCBja3N1bSwgaW50IHBrdF9vZmZzZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1NjQgc3RzX2RhdGEgPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhKTsKLQlpbnQgaW5kZXggPSBuZXR4ZW5fZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEpOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4aWRdKTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUzMiBsZW5ndGggPSBuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YSk7Ci0JdTMyIGRlc2NfY3R4OwotCXUxNiBwa3Rfb2Zmc2V0ID0gMCwgY2tzdW07Ci0Jc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JZGVzY19jdHggPSBuZXR4ZW5fZ2V0X3N0c190eXBlKHN0c19kYXRhKTsKLQlpZiAodW5saWtlbHkoZGVzY19jdHggPj0gTlVNX1JDVl9ERVNDX1JJTkdTKSkgewotCQlwcmludGsoIiVzOiAlcyBCYWQgUmN2IGRlc2NyaXB0b3IgcmluZ1xuIiwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9CisJaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm51bV9kZXNjKSkKKwkJcmV0dXJuIE5VTEw7CiAKLQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW2Rlc2NfY3R4XTsKLQlpZiAodW5saWtlbHkoaW5kZXggPiByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpKSB7Ci0JCURQUklOVEsoRVJSLCAiR290IGEgYnVmZmVyIGluZGV4OiV4IE1heCBpcyAleFxuIiwKLQkJCWluZGV4LCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQlyZXR1cm47Ci0JfQogCWJ1ZmZlciA9ICZyZHNfcmluZy0+cnhfYnVmX2FycltpbmRleF07Ci0JaWYgKGRlc2NfY3R4ID09IFJDVl9ERVNDX0xST19DVFhJRCkgewotCQlidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzKys7Ci0JCWlmIChuZXR4ZW5fZ2V0X3N0c19kZXNjX2xyb19sYXN0X2ZyYWcoZGVzYykpIHsKLQkJCWJ1ZmZlci0+bHJvX2V4cGVjdGVkX2ZyYWdzID0KLQkJCSAgICBuZXR4ZW5fZ2V0X3N0c19kZXNjX2xyb19jbnQoZGVzYyk7Ci0JCQlidWZmZXItPmxyb19sZW5ndGggPSBsZW5ndGg7Ci0JCX0KLQkJaWYgKGJ1ZmZlci0+bHJvX2N1cnJlbnRfZnJhZ3MgIT0gYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MpIHsKLQkJCWlmIChidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyAhPSAwKSB7Ci0JCQkJcHJpbnRrKCJMUk86IChyZWZoYW5kbGU6JXgpIHJlY3YgZnJhZy4gIgotCQkJCSAgICAgICAid2FpdCBmb3IgbGFzdC4gZmxhZ3M6ICV4IGV4cGVjdGVkOiVkICIKLQkJCQkgICAgICAgImhhdmU6JWRcbiIsIGluZGV4LAotCQkJCSAgICAgICBuZXR4ZW5fZ2V0X3N0c19kZXNjX2xyb19sYXN0X2ZyYWcoZGVzYyksCi0JCQkJICAgICAgIGJ1ZmZlci0+bHJvX2V4cGVjdGVkX2ZyYWdzLAotCQkJCSAgICAgICBidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCX0KLQotCWNrc3VtID0gbmV0eGVuX2dldF9zdHNfc3RhdHVzKHN0c19kYXRhKTsKIAogCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsIHJkc19yaW5nLCBpbmRleCwgY2tzdW0pOwogCWlmICghc2tiKQotCQlyZXR1cm47CisJCXJldHVybiBidWZmZXI7CiAKLQlpZiAoZGVzY19jdHggPT0gUkNWX0RFU0NfTFJPX0NUWElEKSB7Ci0JCS8qIFRydWUgbGVuZ3RoIHdhcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgbGFzdCBwa3QgKi8KLQkJc2tiX3B1dChza2IsIGJ1ZmZlci0+bHJvX2xlbmd0aCk7Ci0JfSBlbHNlIHsKLQkJaWYgKGxlbmd0aCA+IHJkc19yaW5nLT5za2Jfc2l6ZSkKLQkJCXNrYl9wdXQoc2tiLCByZHNfcmluZy0+c2tiX3NpemUpOwotCQllbHNlCi0JCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKwlpZiAobGVuZ3RoID4gcmRzX3JpbmctPnNrYl9zaXplKQorCQlza2JfcHV0KHNrYiwgcmRzX3JpbmctPnNrYl9zaXplKTsKKwllbHNlCisJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCi0JCXBrdF9vZmZzZXQgPSBuZXR4ZW5fZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhKTsKLQkJaWYgKHBrdF9vZmZzZXQpCi0JCQlza2JfcHVsbChza2IsIHBrdF9vZmZzZXQpOwotCX0KKworCWlmIChwa3Rfb2Zmc2V0KQorCQlza2JfcHVsbChza2IsIHBrdF9vZmZzZXQpOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAotCS8qCi0JICogcnggYnVmZmVyIGNoYWluaW5nIGlzIGRpc2FibGVkLCB3YWxrIGFuZCBmcmVlCi0JICogYW55IHNwdXJpb3VzIHJ4IGJ1ZmZlciBjaGFpbi4KLQkgKi8KLQlpZiAoZnJhZ19kZXNjKSB7Ci0JCXUxNiBpLCBucl9mcmFncyA9IGRlc2MtPm5yX2ZyYWdzOworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKLQkJCWluZGV4ID0gbGUxNl90b19jcHUoZnJhZ19kZXNjLT5mcmFnX2hhbmRsZXNbaV0pOwotCQkJc2tiID0gbmV0eGVuX3Byb2Nlc3NfcnhidWYoYWRhcHRlciwKLQkJCQkJcmRzX3JpbmcsIGluZGV4LCBja3N1bSk7Ci0JCQlpZiAoc2tiKQotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCX0KLQkJYWRhcHRlci0+c3RhdHMucnhkcm9wcGVkKys7Ci0JfSBlbHNlIHsKLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwlhZGFwdGVyLT5zdGF0cy5ub19yY3YrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzICs9IGxlbmd0aDsKIAotCQlhZGFwdGVyLT5zdGF0cy5ub19yY3YrKzsKLQkJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7Ci0JfQorCXJldHVybiBidWZmZXI7CiB9CiAKLS8qIFByb2Nlc3MgUmVjZWl2ZSBzdGF0dXMgcmluZyAqLwotdTMyIG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGN0eGlkLCBpbnQgbWF4KQorI2RlZmluZSBuZXR4ZW5fbWVyZ2VfcnhfYnVmZmVycyhsaXN0LCBoZWFkKSBcCisJZG8geyBsaXN0X3NwbGljZV90YWlsX2luaXQobGlzdCwgaGVhZCk7IH0gd2hpbGUgKDApOworCitpbnQKK25ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZywgaW50IG1heCkKIHsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpkZXNjX2hlYWQgPSByZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQ7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpkZXNjLCAqZnJhZ19kZXNjOwotCXUzMiBjb25zdW1lciA9IHJlY3ZfY3R4LT5zdGF0dXNfcnhfY29uc3VtZXI7Ci0JaW50IGNvdW50ID0gMCwgcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cjsKKworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhidWY7CisKKwl1MzIgY29uc3VtZXIgPSBzZHNfcmluZy0+Y29uc3VtZXI7CisKKwlpbnQgY291bnQgPSAwOwogCXU2NCBzdHNfZGF0YTsKLQl1MTYgb3Bjb2RlOworCWludCBvcGNvZGUsIHJpbmcsIGluZGV4LCBsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0OwogCiAJd2hpbGUgKGNvdW50IDwgbWF4KSB7Ci0JCWRlc2MgPSAmZGVzY19oZWFkW2NvbnN1bWVyXTsKLQkJaWYgKCEobmV0eGVuX2dldF9zdHNfb3duZXIoZGVzYykgJiBTVEFUVVNfT1dORVJfSE9TVCkpIHsKLQkJCURQUklOVEsoRVJSLCAiZGVzYyAlcCBvd25lZGJ5ICV4XG4iLCBkZXNjLAotCQkJCW5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpKTsKLQkJCWJyZWFrOwotCQl9Ci0KKwkJZGVzYyA9ICZzZHNfcmluZy0+ZGVzY19oZWFkW2NvbnN1bWVyXTsKIAkJc3RzX2RhdGEgPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhKTsKKworCQlpZiAoIShzdHNfZGF0YSAmIFNUQVRVU19PV05FUl9IT1NUKSkKKwkJCWJyZWFrOworCisJCXJpbmcgICA9IG5ldHhlbl9nZXRfc3RzX3R5cGUoc3RzX2RhdGEpOworCQlpZiAocmluZyA+IFJDVl9SSU5HX0pVTUJPKQorCQkJY29udGludWU7CisKIAkJb3Bjb2RlID0gbmV0eGVuX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhKTsKLQkJZnJhZ19kZXNjID0gTlVMTDsKLQkJaWYgKG9wY29kZSA9PSBORVRYRU5fTklDX1JYUEtUX0RFU0MpIHsKLQkJCWlmIChkZXNjLT5ucl9mcmFncykgewotCQkJCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsCi0JCQkJCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JCQkJZnJhZ19kZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07Ci0JCQkJbmV0eGVuX3NldF9zdHNfb3duZXIoZnJhZ19kZXNjLAotCQkJCQkJU1RBVFVTX09XTkVSX1BIQU5UT00pOwotCQkJfQotCQl9CiAKLQkJbmV0eGVuX3Byb2Nlc3NfcmN2KGFkYXB0ZXIsIGN0eGlkLCBkZXNjLCBmcmFnX2Rlc2MpOworCQlpbmRleCAgPSBuZXR4ZW5fZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEpOworCQlsZW5ndGggPSBuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YSk7CisJCWNrc3VtICA9IG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSk7CisJCXBrdF9vZmZzZXQgPSBuZXR4ZW5fZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhKTsKIAotCQluZXR4ZW5fc2V0X3N0c19vd25lcihkZXNjLCBTVEFUVVNfT1dORVJfUEhBTlRPTSk7CisJCXJ4YnVmID0gbmV0eGVuX3Byb2Nlc3NfcmN2KGFkYXB0ZXIsIHJpbmcsIGluZGV4LAorCQkJCWxlbmd0aCwgY2tzdW0sIHBrdF9vZmZzZXQpOwogCi0JCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsCi0JCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlpZiAocnhidWYpCisJCQlsaXN0X2FkZF90YWlsKCZyeGJ1Zi0+bGlzdCwgJnNkc19yaW5nLT5mcmVlX2xpc3RbcmluZ10pOworCisJCWRlc2MtPnN0YXR1c19kZXNjX2RhdGEgPSBjcHVfdG9fbGU2NChTVEFUVVNfT1dORVJfUEhBTlRPTSk7CisKKwkJY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChjb25zdW1lciwgc2RzX3JpbmctPm51bV9kZXNjKTsKIAkJY291bnQrKzsKIAl9Ci0JZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykKLQkJbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKGFkYXB0ZXIsIGN0eGlkLCByaW5nKTsKIAotCS8qIHVwZGF0ZSB0aGUgY29uc3VtZXIgaW5kZXggaW4gcGhhbnRvbSAqLworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0KKwkJCSZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSkgeworCQkJbGlzdF9mb3JfZWFjaChjdXIsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSB7CisJCQkJcnhidWYgPSBsaXN0X2VudHJ5KGN1ciwKKwkJCQkJCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyLCBsaXN0KTsKKwkJCQluZXR4ZW5fYWxsb2Nfcnhfc2tiKGFkYXB0ZXIsIHJkc19yaW5nLCByeGJ1Zik7CisJCQl9CisJCQlzcGluX2xvY2soJnJkc19yaW5nLT5sb2NrKTsKKwkJCW5ldHhlbl9tZXJnZV9yeF9idWZmZXJzKCZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddLAorCQkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKKwkJfQorCisJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnNfbm9kYihhZGFwdGVyLCByZHNfcmluZyk7CisJfQorCiAJaWYgKGNvdW50KSB7Ci0JCXJlY3ZfY3R4LT5zdGF0dXNfcnhfY29uc3VtZXIgPSBjb25zdW1lcjsKLQotCQkvKiBXaW5kb3cgPSAxICovCisJCXNkc19yaW5nLT5jb25zdW1lciA9IGNvbnN1bWVyOwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCi0JCQkJcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIsIGNvbnN1bWVyKTsKKwkJCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciwgY29uc3VtZXIpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTEzNjYsNyArOTk4LDExIEBACiAJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqZnJhZzsKIAlpbnQgZG9uZSA9IDA7CiAKKwlpZiAoIXNwaW5fdHJ5bG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jaykpCisJCXJldHVybiAxOworCiAJbGFzdF9jb25zdW1lciA9IGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyOworCWJhcnJpZXIoKTsgLyogY21kX2NvbnN1bWVyIGNhbiBjaGFuZ2UgdW5kZXJuZWF0aCAqLwogCWNvbnN1bWVyID0gbGUzMl90b19jcHUoKihhZGFwdGVyLT5jbWRfY29uc3VtZXIpKTsKIAogCXdoaWxlIChsYXN0X2NvbnN1bWVyICE9IGNvbnN1bWVyKSB7CkBAIC0xMzg5LDcgKzEwMjUsNyBAQAogCQl9CiAKIAkJbGFzdF9jb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGxhc3RfY29uc3VtZXIsCi0JCQkJCSAgICAgICBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJCQkJCSAgICAgICBhZGFwdGVyLT5udW1fdHhkKTsKIAkJaWYgKCsrY291bnQgPj0gTUFYX1NUQVRVU19IQU5ETEUpCiAJCQlicmVhazsKIAl9CkBAIC0xNDE3LDc1ICsxMDUzLDU1IEBACiAJICogVGhlcmUgaXMgc3RpbGwgYSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiBhbmQgdGhlIGhvc3QgY291bGQgbWlzcyBhbgogCSAqIGludGVycnVwdC4gVGhlIGNhcmQgaGFzIHRvIHRha2UgY2FyZSBvZiB0aGlzLgogCSAqLworCWJhcnJpZXIoKTsgLyogY21kX2NvbnN1bWVyIGNhbiBjaGFuZ2UgdW5kZXJuZWF0aCAqLwogCWNvbnN1bWVyID0gbGUzMl90b19jcHUoKihhZGFwdGVyLT5jbWRfY29uc3VtZXIpKTsKIAlkb25lID0gKGxhc3RfY29uc3VtZXIgPT0gY29uc3VtZXIpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAogCXJldHVybiAoZG9uZSk7CiB9CiAKLS8qCi0gKiBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzIHB1dHMgYnVmZmVyIGluIHRoZSBQaGFudG9tIG1lbW9yeQotICovCi12b2lkIG5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgY3R4LCB1MzIgcmluZ2lkKQordm9pZAorbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByaW5naWQsCisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7Ci0Jc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0gTlVMTDsKLQl1aW50IHByb2R1Y2VyOwogCXN0cnVjdCByY3ZfZGVzYyAqcGRlc2M7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcjsKLQlpbnQgY291bnQgPSAwOworCWludCBwcm9kdWNlciwgY291bnQgPSAwOwogCW5ldHhlbl9jdHhfbXNnIG1zZyA9IDA7Ci0JZG1hX2FkZHJfdCBkbWE7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAotCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ2lkXTsKLQogCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOwotCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKIAotCS8qIFdlIGNhbiBzdGFydCB3cml0aW5nIHJ4IGRlc2NyaXB0b3JzIGludG8gdGhlIHBoYW50b20gbWVtb3J5LiAqLworCXNwaW5fbG9jaygmcmRzX3JpbmctPmxvY2spOworCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHJkc19yaW5nLT5za2Jfc2l6ZSk7Ci0JCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJYnJlYWs7Ci0JCX0KKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CiAKLQkJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCi0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCi0JCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKLQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZG1hKSkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCWJyZWFrOworCQlpZiAoIWJ1ZmZlci0+c2tiKSB7CisJCQlpZiAobmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgYnVmZmVyKSkKKwkJCQlicmVhazsKIAkJfQogCiAJCWNvdW50Kys7Ci0JCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKIAotCQlidWZmZXItPnNrYiA9IHNrYjsKLQkJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfQlVTWTsKLQkJYnVmZmVyLT5kbWEgPSBkbWE7Ci0KIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwogCQlwZGVzYyA9ICZyZHNfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJcGRlc2MtPmFkZHJfYnVmZmVyID0gY3B1X3RvX2xlNjQoZG1hKTsKKwkJcGRlc2MtPmFkZHJfYnVmZmVyID0gY3B1X3RvX2xlNjQoYnVmZmVyLT5kbWEpOwogCQlwZGVzYy0+cmVmZXJlbmNlX2hhbmRsZSA9IGNwdV90b19sZTE2KGJ1ZmZlci0+cmVmX2hhbmRsZSk7CiAJCXBkZXNjLT5idWZmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmRzX3JpbmctPmRtYV9zaXplKTsKIAotCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bnVtX2Rlc2MpOwogCX0KLQkvKiBpZiB3ZSBkaWQgYWxsb2NhdGUgYnVmZmVycywgdGhlbiB3cml0ZSB0aGUgY291bnQgdG8gUGhhbnRvbSAqLworCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CisKIAlpZiAoY291bnQpIHsKIAkJcmRzX3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7Ci0JCQkvKiBXaW5kb3cgPSAxICovCiAJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKIAkJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKLQkJCQkocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50LTEpKTsKKwkJCQkocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm51bV9kZXNjLTEpKTsKIAogCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7CiAJCQkvKgpAQCAtMTQ5Niw5ICsxMTEyLDggQEAKIAkJCW5ldHhlbl9zZXRfbXNnX3BlZ19pZChtc2csIE5FVFhFTl9SQ1ZfUEVHX0RCX0lEKTsKIAkJCW5ldHhlbl9zZXRfbXNnX3ByaXZpZChtc2cpOwogCQkJbmV0eGVuX3NldF9tc2dfY291bnQobXNnLAotCQkJCQkgICAgICgocHJvZHVjZXIgLQotCQkJCQkgICAgICAgMSkgJiAocmRzX3JpbmctPgotCQkJCQkJICAgICBtYXhfcnhfZGVzY19jb3VudCAtIDEpKSk7CisJCQkJCSAgICAgKChwcm9kdWNlciAtIDEpICYKKwkJCQkJICAgICAgKHJkc19yaW5nLT5udW1fZGVzYyAtIDEpKSk7CiAJCQluZXR4ZW5fc2V0X21zZ19jdHhpZChtc2csIGFkYXB0ZXItPnBvcnRudW0pOwogCQkJbmV0eGVuX3NldF9tc2dfb3Bjb2RlKG1zZywgTkVUWEVOX1JDVl9QUk9EVUNFUihyaW5naWQpKTsKIAkJCXdyaXRlbChtc2csCkBAIC0xNTA4LDY4ICsxMTIzLDQ5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQl1aW50MzJfdCBjdHgsIHVpbnQzMl90IHJpbmdpZCkKK3N0YXRpYyB2b2lkCituZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJihhZGFwdGVyLT5yZWN2X2N0eFtjdHhdKTsKLQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcgPSBOVUxMOwotCXUzMiBwcm9kdWNlcjsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IGNvdW50ID0gMDsKKwlpbnQgcHJvZHVjZXIsIGNvdW50ID0gMDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwotCWRtYV9hZGRyX3QgZG1hOwotCi0JcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5naWRdOwogCiAJcHJvZHVjZXIgPSByZHNfcmluZy0+cHJvZHVjZXI7CisJaWYgKCFzcGluX3RyeWxvY2soJnJkc19yaW5nLT5sb2NrKSkKKwkJcmV0dXJuOworCiAJaGVhZCA9ICZyZHNfcmluZy0+ZnJlZV9saXN0OwotCS8qIFdlIGNhbiBzdGFydCB3cml0aW5nIHJ4IGRlc2NyaXB0b3JzIGludG8gdGhlIHBoYW50b20gbWVtb3J5LiAqLwogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCi0JCXNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKLQkJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCQlicmVhazsKLQkJfQorCQlidWZmZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyLCBsaXN0KTsKIAotCQlpZiAoIWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkKLQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0KLQkJZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAotCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBkbWEpKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJYnJlYWs7CisJCWlmICghYnVmZmVyLT5za2IpIHsKKwkJCWlmIChuZXR4ZW5fYWxsb2Nfcnhfc2tiKGFkYXB0ZXIsIHJkc19yaW5nLCBidWZmZXIpKQorCQkJCWJyZWFrOwogCQl9CiAKIAkJY291bnQrKzsKLQkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOwogCi0JCWJ1ZmZlci0+c2tiID0gc2tiOwotCQlidWZmZXItPnN0YXRlID0gTkVUWEVOX0JVRkZFUl9CVVNZOwotCQlidWZmZXItPmRtYSA9IGRtYTsKLQogCQkvKiBtYWtlIGEgcmN2IGRlc2NyaXB0b3IgICovCiAJCXBkZXNjID0gJnJkc19yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOwogCQlwZGVzYy0+cmVmZXJlbmNlX2hhbmRsZSA9IGNwdV90b19sZTE2KGJ1ZmZlci0+cmVmX2hhbmRsZSk7CiAJCXBkZXNjLT5idWZmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmRzX3JpbmctPmRtYV9zaXplKTsKIAkJcGRlc2MtPmFkZHJfYnVmZmVyID0gY3B1X3RvX2xlNjQoYnVmZmVyLT5kbWEpOwogCi0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJkc19yaW5nLT5udW1fZGVzYyk7CiAJfQogCi0JLyogaWYgd2UgZGlkIGFsbG9jYXRlIGJ1ZmZlcnMsIHRoZW4gd3JpdGUgdGhlIGNvdW50IHRvIFBoYW50b20gKi8KIAlpZiAoY291bnQpIHsKIAkJcmRzX3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7Ci0JCQkvKiBXaW5kb3cgPSAxICovCiAJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKIAkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyLAotCQkJCShwcm9kdWNlci0xKSAmIChyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQtMSkpOworCQkJCShwcm9kdWNlciAtIDEpICYgKHJkc19yaW5nLT5udW1fZGVzYyAtIDEpKTsKIAkJCXdtYigpOwogCX0KKwlzcGluX3VubG9jaygmcmRzX3JpbmctPmxvY2spOwogfQogCiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDEzMDg3NzguLjFhZjQ3MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqICBNYWluIHNvdXJjZSBmaWxlIGZvciBOZXRYZW4gTklDIERyaXZlciBvbiBMaW51eAorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtOTcsMjAgKzk0LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5ldHhlbl9wY2lfdGJsKTsKIAotLyoKLSAqIEluIG5ldHhlbl9uaWNfZG93bigpLCB3ZSBtdXN0IHdhaXQgZm9yIGFueSBwZW5kaW5nIGNhbGxiYWNrIHJlcXVlc3RzIGludG8KLSAqIG5ldHhlbl93YXRjaGRvZ190YXNrKCkgdG8gY29tcGxldGU7IGVnIG90aGVyd2lzZSB0aGUgd2F0Y2hkb2dfdGltZXIgY291bGQgYmUKLSAqIHJlZW5hYmxlZCByaWdodCBhZnRlciBpdCBpcyBkZWxldGVkIGluIG5ldHhlbl9uaWNfZG93bigpLgotICogRkxVU0hfU0NIRURVTEVEX1dPUksoKSAgZG9lcyB0aGlzIHN5bmNocm9uaXphdGlvbi4KLSAqCi0gKiBOb3JtYWxseSwgc2NoZWR1bGVfd29yaygpL2ZsdXNoX3NjaGVkdWxlZF93b3JrKCkgY291bGQgaGF2ZSB3b3JrZWQsIGJ1dAotICogbmV0eGVuX25pY19jbG9zZSgpIGlzIGludm9rZWQgd2l0aCBrZXJuZWwgcnRubCBsb2NrIGhlbGQuIG5ldGlmX2NhcnJpZXJfb2ZmKCkKLSAqIGNhbGwgaW4gbmV0eGVuX25pY19jbG9zZSgpIHRyaWdnZXJzIGEgc2NoZWR1bGVfd29yaygmbGlua3dhdGNoX3dvcmspLCBhbmQgYQotICogc3Vic2VxdWVudCBjYWxsIHRvIGZsdXNoX3NjaGVkdWxlZF93b3JrKCkgaW4gbmV0eGVuX25pY19kb3duKCkgd291bGQgY2F1c2UKLSAqIGxpbmt3YXRjaF9ldmVudCgpIHRvIGJlIGV4ZWN1dGVkIHdoaWNoIGFsc28gYXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgcnRubAotICogbG9jayB0aHVzIGNhdXNpbmcgYSBkZWFkbG9jay4KLSAqLwotCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5ldHhlbl93b3JrcTsKICNkZWZpbmUgU0NIRURVTEVfV09SSyh0cCkJcXVldWVfd29yayhuZXR4ZW5fd29ya3EsIHRwKQogI2RlZmluZSBGTFVTSF9TQ0hFRFVMRURfV09SSygpCWZsdXNoX3dvcmtxdWV1ZShuZXR4ZW5fd29ya3EpCkBAIC0xNTIsMTMwICsxMzUsMTQ4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cltdID0gTlhfTEVHQUNZX0lOVFJfQ09ORklHOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19kaXNhYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19kaXNhYmxlX2ludChzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcpCiB7Ci0JYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLCBhZGFwdGVyLT5jcmJfaW50cl9tYXNrLCAwKTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgc2RzX3JpbmctPmNyYl9pbnRyX21hc2ssIDApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19lbmFibGVfaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2VuYWJsZV9pbnQoc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQogewotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMHgxKTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgc2RzX3JpbmctPmNyYl9pbnRyX21hc2ssIDB4MSk7CiAKIAlpZiAoIU5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpKQogCQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlKGFkYXB0ZXIsCiAJCQkJYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X21hc2tfcmVnLCAweGZiZmYpOwogfQogCitzdGF0aWMgdm9pZAorbmV0eGVuX25hcGlfYWRkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCisJCWFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPSAobnVtX29ubGluZV9jcHVzKCkgPj0gNCkgPyA0IDogMjsKKwllbHNlCisJCWFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPSAxOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZzZHNfcmluZy0+bmFwaSwKKwkJCQluZXR4ZW5fbmljX3BvbGwsIE5FVFhFTl9ORVRERVZfV0VJR0hUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmFwaV9lbmFibGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5hcGlfZW5hYmxlKCZzZHNfcmluZy0+bmFwaSk7CisJCW5ldHhlbl9uaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25hcGlfZGlzYWJsZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmV0eGVuX25pY19kaXNhYmxlX2ludChzZHNfcmluZyk7CisJCW5hcGlfZGlzYWJsZSgmc2RzX3JpbmctPm5hcGkpOworCX0KK30KKwogc3RhdGljIGludCBueF9zZXRfZG1hX21hc2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1aW50OF90IHJldmlzaW9uX2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlpbnQgZXJyOwotCXVpbnQ2NF90IG1hc2s7CisJdWludDY0X3QgbWFzaywgY21hc2s7CiAKLSNpZmRlZiBDT05GSUdfSUE2NAotCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzMyQklUX01BU0s7Ci0jZWxzZQotCWlmIChyZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkgewotCQkvKiBzaG91bGQgZ28gdG8gRE1BXzY0QklUX01BU0sgKi8KLQkJYWRhcHRlci0+ZG1hX21hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQkJbWFzayA9IERNQV8zOUJJVF9NQVNLOwotCX0gZWxzZSBpZiAocmV2aXNpb25faWQgPT0gTlhfUDNfQTIpIHsKLQkJYWRhcHRlci0+ZG1hX21hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQkJbWFzayA9IERNQV8zOUJJVF9NQVNLOwotCX0gZWxzZSBpZiAocmV2aXNpb25faWQgPT0gTlhfUDJfQzEpIHsKLQkJYWRhcHRlci0+ZG1hX21hc2sgPSBETUFfMzVCSVRfTUFTSzsKLQkJbWFzayA9IERNQV8zNUJJVF9NQVNLOwotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzMyQklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKLQkJZ290byBzZXRfMzJfYml0X21hc2s7Ci0JfQorCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAwOwogCisJbWFzayA9IERNQV8zMkJJVF9NQVNLOwogCS8qCiAJICogQ29uc2lzdGVudCBETUEgbWFzayBpcyBzZXQgdG8gMzIgYml0IGJlY2F1c2UgaXQgY2Fubm90IGJlIHNldCB0bwogCSAqIDM1IGJpdHMuIEZvciBQMyBhbHNvIGxlYXZlIGl0IGF0IDMyIGJpdHMgZm9yIG5vdy4gT25seSB0aGUgcmluZ3MKIAkgKiBjb21lIG9mZiB0aGlzIHBvb2wuCiAJICovCisJY21hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworI2lmbmRlZiBDT05GSUdfSUE2NAorCWlmIChyZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKKwkJbWFzayA9IERNQV8zOUJJVF9NQVNLOworCWVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AyX0MxKQorCQltYXNrID0gRE1BXzM1QklUX01BU0s7CisjZW5kaWYKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBtYXNrKSA9PSAwICYmCi0JCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgPT0gMCkgeworCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgY21hc2spID09IDApIHsKIAkJYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDE7CiAJCXJldHVybiAwOwogCX0KLXNldF8zMl9iaXRfbWFzazoKLSNlbmRpZiAvKiBDT05GSUdfSUE2NCAqLwogCi0JZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JaWYgKCFlcnIpCi0JCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JaWYgKGVycikgewotCQlEUFJJTlRLKEVSUiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmc6JWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qIFVwZGF0ZSBhZGRyZXNzYWJsZSByYW5nZSBpZiBmaXJtd2FyZSBzdXBwb3J0cyBpdCAqLworc3RhdGljIGludAorbnhfdXBkYXRlX2RtYV9tYXNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgY2hhbmdlLCBzaGlmdCwgZXJyOworCXVpbnQ2NF90IG1hc2ssIG9sZF9tYXNrOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWNoYW5nZSA9IDA7CisKKwlzaGlmdCA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgQ1JCX0RNQV9TSElGVCk7CisJaWYgKHNoaWZ0ID49IDMyKQorCQlyZXR1cm4gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpICYmIChzaGlmdCA+IDkpKQorCQljaGFuZ2UgPSAxOworCWVsc2UgaWYgKChhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPT0gTlhfUDJfQzEpICYmIChzaGlmdCA8PSA0KSkKKwkJY2hhbmdlID0gMTsKKworCWlmIChjaGFuZ2UpIHsKKwkJb2xkX21hc2sgPSBwZGV2LT5kbWFfbWFzazsKKwkJbWFzayA9ICgxVUxMPDwoMzIrc2hpZnQpKSAtIDE7CisKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBtYXNrKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIG9sZF9tYXNrKTsKIAl9CiAKLQlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbmV0eGVuX2NoZWNrX29wdGlvbnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUpIHsKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX0hNRVo6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19YR19MT006Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfQ1g0OgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNF9MUDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX0lNRVo6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1BMVVM6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9DVDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19YRlA6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMDAwMF9CQVNFX1Q6CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKQorCQlhZGFwdGVyLT5udW1fcnhkID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7CisJZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKLQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0OgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVo6CisJZWxzZQogCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JCWJyZWFrOwogCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19SRUZfUUc6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTToKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKLQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOwotCQlicmVhazsKKwlhZGFwdGVyLT5udW1fdHhkID0gTUFYX0NNRF9ERVNDUklQVE9SU19IT1NUOworCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOworCWFkYXB0ZXItPm51bV9scm9fcnhkID0gTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlM7CiAKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEc6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzJHOgotCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19UUDoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKLQkJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKLQkJCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIGJvYXJkIHR5cGUoMHgleClcbiIsCi0JCQkJYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUpOwotCQlicmVhazsKLQl9Ci0KLQlhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCA9IE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVDsKLQlhZGFwdGVyLT5tYXhfanVtYm9fcnhfZGVzY19jb3VudCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlM7Ci0JYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50ID0gTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlM7Ci0KLQlhZGFwdGVyLT5tYXhfcG9zc2libGVfcnNzX3JpbmdzID0gMTsKIAlyZXR1cm47CiB9CiAKQEAgLTMzNiw3ICszMzcsNyBAQAogewogCXUzMiB2YWwsIGRhdGE7CiAKLQl2YWwgPSBhZGFwdGVyLT5haHcuYm9hcmRjZmcuYm9hcmRfdHlwZTsKKwl2YWwgPSBhZGFwdGVyLT5haHcuYm9hcmRfdHlwZTsKIAlpZiAoKHZhbCA9PSBORVRYRU5fQlJEVFlQRV9QM19ITUVaKSB8fAogCQkodmFsID09IE5FVFhFTl9CUkRUWVBFX1AzX1hHX0xPTSkpIHsKIAkJaWYgKHBvcnRfbW9kZSA9PSBORVRYRU5fUE9SVF9NT0RFXzgwMl8zX0FQKSB7CkBAIC00MDUsOSArNDA2LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAotCWlmIChuZXR4ZW5faXNfZmxhc2hfc3VwcG9ydGVkKGFkYXB0ZXIpICE9IDApCi0JCXJldHVybiAtRUlPOwotCiAJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIAkJaWYgKG5ldHhlbl9wM19nZXRfbWFjX2FkZHIoYWRhcHRlciwgJm1hY19hZGRyKSAhPSAwKQogCQkJcmV0dXJuIC1FSU87CkBAIC00NTcsNDIgKzQ1NSw0NTggQEAKICNlbmRpZgogfTsKIAotLyoKLSAqIG5ldHhlbl9uaWNfcHJvYmUoKQotICoKLSAqIFRoZSBMaW51eCBzeXN0ZW0gd2lsbCBpbnZva2UgdGhpcyBhZnRlciBpZGVudGlmeWluZyB0aGUgdmVuZG9yIElEIGFuZAotICogZGV2aWNlIElkIGluIHRoZSBwY2lfdGJsIHN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZS4KLSAqCi0gKiBBIHF1YWQgcG9ydCBjYXJkIGhhcyBvbmUgb3BlcmF0aW9uYWwgUENJIGNvbmZpZyBzcGFjZSwgKGZ1bmN0aW9uIDApLAotICogd2hpY2ggaXMgdXNlZCB0byBhY2Nlc3MgYWxsIGZvdXIgcG9ydHMuCi0gKgotICogVGhpcyByb3V0aW5lIHdpbGwgaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciwgYW5kIHNldHVwIHRoZSBnbG9iYWwgcGFyYW1ldGVycwotICogYWxvbmcgd2l0aCB0aGUgcG9ydCdzIHNwZWNpZmljIHN0cnVjdHVyZS4KLSAqLworc3RhdGljIHZvaWQKK25ldHhlbl9zZXR1cF9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCAqbGVnYWN5X2ludHJwOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWFkYXB0ZXItPmZsYWdzICY9IH4oTkVUWEVOX05JQ19NU0lfRU5BQkxFRCB8IE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKTsKKwlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IC0xOworCWFkYXB0ZXItPm1zaV9tb2RlID0gLTE7CisKKwlpZiAoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID49IE5YX1AzX0IwKQorCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbYWRhcHRlci0+YWh3LnBjaV9mdW5jXTsKKwllbHNlCisJCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50clswXTsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci5pbnRfdmVjX2JpdCA9IGxlZ2FjeV9pbnRycC0+aW50X3ZlY19iaXQ7CisJYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X3N0YXR1c19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9zdGF0dXNfcmVnOworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X21hc2tfcmVnOworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnBjaV9pbnRfcmVnID0gbGVnYWN5X2ludHJwLT5wY2lfaW50X3JlZzsKKworCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMCk7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQpIHsKKworCQluZXR4ZW5faW5pdF9tc2l4X2VudHJpZXMoYWRhcHRlcik7CisJCWlmIChwY2lfZW5hYmxlX21zaXgocGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLAorCQkJCQlNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVIpKQorCQkJZ290byByZXF1ZXN0X21zaTsKKworCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSVhfRU5BQkxFRDsKKwkJbmV0eGVuX3NldF9tc2l4X2JpdChwZGV2LCAxKTsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaS14IGludGVycnVwdHNcbiIpOworCisJfSBlbHNlIHsKK3JlcXVlc3RfbXNpOgorCQlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQ7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOworCQl9IGVsc2UKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBsZWdhY3kgaW50ZXJydXB0c1xuIik7CisJCWFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3IgPSBwZGV2LT5pcnE7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX3RlYXJkb3duX2ludHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCisJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9jbGVhbnVwX3BjaV9tYXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5haHcuZGJfYmFzZSAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody5kYl9iYXNlKTsKKwlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTApOworCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UxICE9IE5VTEwpCisJCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSk7CisJaWYgKGFkYXB0ZXItPmFody5wY2lfYmFzZTIgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UyKTsKK30KKworc3RhdGljIGludAorbmV0eGVuX3NldHVwX3BjaV9tYXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXZvaWQgX19pb21lbSAqbWVtX3B0cjAgPSBOVUxMOworCXZvaWQgX19pb21lbSAqbWVtX3B0cjEgPSBOVUxMOworCXZvaWQgX19pb21lbSAqbWVtX3B0cjIgPSBOVUxMOworCXZvaWQgX19pb21lbSAqZGJfcHRyID0gTlVMTDsKKworCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2UsIG1lbV9sZW4sIGRiX2Jhc2UsIGRiX2xlbiA9IDAsIHBjaV9sZW4wID0gMDsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgcGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisKKwlpbnQgZXJyID0gMDsKKworCS8qCisJICogU2V0IHRoZSBDUkIgd2luZG93IHRvIGludmFsaWQuIElmIGFueSByZWdpc3RlciBpbiB3aW5kb3cgMCBpcworCSAqIGFjY2Vzc2VkIGl0IHNob3VsZCBzZXQgdGhlIHdpbmRvdyB0byAwIGFuZCB0aGVuIHJlc2V0IGl0IHRvIDEuCisJICovCisJYWRhcHRlci0+Y3Vycl93aW5kb3cgPSAyNTU7CisJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAtMTsKKwlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IC0xOworCisJLyogcmVtYXAgcGh5cyBhZGRyZXNzICovCisJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CS8qIDAgaXMgZm9yIEJBUiAwICovCisJbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJcGNpX2xlbjAgPSAwOworCisJYWRhcHRlci0+aHdfd3JpdGVfd3ggPSBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzEyOE07CisJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8xMjhNOworCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzEyOE07CisJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8xMjhNOworCWFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzEyOE07CisJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9IG5ldHhlbl9uaWNfcGNpX3dyaXRlX25vcm1hbGl6ZV8xMjhNOworCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNOworCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzEyOE07CisJYWRhcHRlci0+cGNpX21lbV93cml0ZSA9IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8xMjhNOworCisJLyogMTI4IE1lZyBvZiBtZW1vcnkgKi8KKwlpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzEyOE1CX1NJWkUpIHsKKwkJbWVtX3B0cjAgPSBpb3JlbWFwKG1lbV9iYXNlLCBGSVJTVF9QQUdFX0dST1VQX1NJWkUpOworCQltZW1fcHRyMSA9IGlvcmVtYXAobWVtX2Jhc2UgKyBTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwKKwkJCQlTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCwKKwkJCQlUSElSRF9QQUdFX0dST1VQX1NJWkUpOworCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzMyTUJfU0laRSkgeworCQltZW1fcHRyMSA9IGlvcmVtYXAobWVtX2Jhc2UsIFNFQ09ORF9QQUdFX0dST1VQX1NJWkUpOworCQltZW1fcHRyMiA9IGlvcmVtYXAobWVtX2Jhc2UgKyBUSElSRF9QQUdFX0dST1VQX1NUQVJUIC0KKwkJCVNFQ09ORF9QQUdFX0dST1VQX1NUQVJULCBUSElSRF9QQUdFX0dST1VQX1NJWkUpOworCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzJNQl9TSVpFKSB7CisJCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTTsKKwkJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTTsKKwkJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk07CisJCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPQorCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNOworCQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8yTTsKKwkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9CisJCQluZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk07CisJCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTTsKKwkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk07CisJCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk07CisKKwkJbWVtX3B0cjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CisJCWlmIChtZW1fcHRyMCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFBDSSBiYXIgMFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlwY2lfbGVuMCA9IG1lbV9sZW47CisKKwkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAwOworCQlhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9IDA7CisKKwkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfTU5fV0lORE9XICsKKwkJCShwY2lfZnVuYyAqIDB4MjApOworCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiA9IDB4MTAwMDAwICsgUENJWF9TTl9XSU5ET1c7CisJCWlmIChwY2lfZnVuYyA8IDQpCisJCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiArPSAocGNpX2Z1bmMgKiAweDIwKTsKKwkJZWxzZQorCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0KKwkJCQkJMHhBMCArICgocGNpX2Z1bmMgLSA0KSAqIDB4MTApOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZE1CIG1lbW9yeSBtYXBcbiIsIChpbnQpKG1lbV9sZW4+PjIwKSk7CisKKwlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7CisJYWRhcHRlci0+YWh3LnBjaV9sZW4wID0gcGNpX2xlbjA7CisJYWRhcHRlci0+YWh3LnBjaV9iYXNlMSA9IG1lbV9wdHIxOworCWFkYXB0ZXItPmFody5wY2lfYmFzZTIgPSBtZW1fcHRyMjsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlnb3RvIHNraXBfZG9vcmJlbGw7CisKKwlkYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOwkvKiBkb29yYmVsbCBpcyBvbiBiYXIgNCAqLworCWRiX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7CisKKwlpZiAoZGJfbGVuID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vcmJlbGwgaXMgZGlzYWJsZWRcbiIsCisJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlkYl9wdHIgPSBpb3JlbWFwKGRiX2Jhc2UsIE5FVFhFTl9EQl9NQVBTSVpFX0JZVEVTKTsKKwlpZiAoIWRiX3B0cikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgbWFwLiIsCisJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKK3NraXBfZG9vcmJlbGw6CisJYWRhcHRlci0+YWh3LmRiX2Jhc2UgPSBkYl9wdHI7CisJYWRhcHRlci0+YWh3LmRiX2xlbiA9IGRiX2xlbjsKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwluZXR4ZW5fY2xlYW51cF9wY2lfbWFwKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHZhbCwgZXJyLCBmaXJzdF9ib290OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWludCBmaXJzdF9kcml2ZXIgPSAwOworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWlmIChhZGFwdGVyLT5haHcucGNpX2Z1bmMgPT0gMCkKKwkJCWZpcnN0X2RyaXZlciA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKKwkJCWZpcnN0X2RyaXZlciA9IDE7CisJfQorCisJaWYgKCFmaXJzdF9kcml2ZXIpCisJCXJldHVybiAwOworCisJZmlyc3RfYm9vdCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAorCQkJTkVUWEVOX0NBTV9SQU0oMHgxZmMpKTsKKworCWVyciA9IG5ldHhlbl9jaGVja19od19pbml0KGFkYXB0ZXIsIGZpcnN0X2Jvb3QpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgaW4gaW5pdCBIVyBpbml0IHNlcXVlbmNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZmlyc3RfYm9vdCAhPSAweDU1NTU1NTU1KSB7CisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwKKwkJCQkJQ1JCX0NNRFBFR19TVEFURSwgMCk7CisJCW5ldHhlbl9waW5pdF9mcm9tX3JvbShhZGFwdGVyLCAwKTsKKwkJbXNsZWVwKDEpOworCX0KKworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQsIDB4NTU1NTU1NTUpOworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQluZXR4ZW5fc2V0X3BvcnRfbW9kZShhZGFwdGVyKTsKKworCW5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKworCQkvKiBJbml0aWFsaXplIG11bHRpY2FzdCBhZGRyIHBvb2wgb3duZXJzICovCisJCXZhbCA9IDB4NzY1NDsKKwkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKQorCQkJdmFsIHw9IDB4MGYwMDAwMDA7CisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCU5FVFhFTl9NQUNfQUREUl9DTlRMX1JFRywgdmFsKTsKKworCX0KKworCWVyciA9IG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyoKKwkgKiBUZWxsIHRoZSBoYXJkd2FyZSBvdXIgdmVyc2lvbiBudW1iZXIuCisJICovCisJdmFsID0gKF9ORVRYRU5fTklDX0xJTlVYX01BSk9SIDw8IDE2KQorCQl8ICgoX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgPDwgOCkpCisJCXwgKF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04pOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0RSSVZFUl9WRVJTSU9OLCB2YWwpOworCisJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLworCWVyciA9IG5ldHhlbl9waGFudG9tX2luaXQoYWRhcHRlciwgTkVUWEVOX05JQ19QRUdfVFVORSk7CisJaWYgKGVycikgeworCQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfcmVxdWVzdF9pcnEoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWlycV9oYW5kbGVyX3QgaGFuZGxlcjsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IGVyciwgcmluZzsKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlpZiAoKGFkYXB0ZXItPm1zaV9tb2RlICE9IE1TSV9NT0RFX01VTFRJRlVOQykgfHwKKwkJKGFkYXB0ZXItPmludHJfc2NoZW1lICE9IElOVFJfU0NIRU1FX1BFUlBPUlQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGludGVycnVwdCBzY2hlbWUgaXMgIgorCQkJCSJpbmNvbXBhdGlibGUgd2l0aCBkcml2ZXJcbiIsCisJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCisJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpeF9pbnRyOworCWVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKKwkJaGFuZGxlciA9IG5ldHhlbl9tc2lfaW50cjsKKwllbHNlIHsKKwkJZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJCWhhbmRsZXIgPSBuZXR4ZW5faW50cjsKKwl9CisJYWRhcHRlci0+aXJxID0gbmV0ZGV2LT5pcnE7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCXNwcmludGYoc2RzX3JpbmctPm5hbWUsICIlMTZzWyVkXSIsIG5ldGRldi0+bmFtZSwgcmluZyk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHNkc19yaW5nLT5pcnEsIGhhbmRsZXIsCisJCQkJICBmbGFncywgc2RzX3JpbmctPm5hbWUsIHNkc19yaW5nKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2ZyZWVfaXJxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCWZyZWVfaXJxKHNkc19yaW5nLT5pcnEsIHNkc19yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfdXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBhZGFwdGVyLT5pbml0X3BvcnQoYWRhcHRlciwgYWRhcHRlci0+cGh5c2ljYWxfcG9ydCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3J0ICVkXG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPnBvcnRudW0pOworCQlyZXR1cm4gZXJyOworCX0KKwlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyKTsKKworCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyKTsKKworCW5ldHhlbl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2KTsKKwlpZiAoYWRhcHRlci0+c2V0X210dSkKKwkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7CisKKwlhZGFwdGVyLT5haHcubGlua3VwID0gMDsKKwltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKKworCW5ldHhlbl9uYXBpX2VuYWJsZShhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID4gMSkKKwkJbmV0eGVuX2NvbmZpZ19yc3MoYWRhcHRlciwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uaWNfZG93bihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT5zdG9wX3BvcnQpCisJCWFkYXB0ZXItPnN0b3BfcG9ydChhZGFwdGVyKTsKKworCW5ldHhlbl9yZWxlYXNlX3R4X2J1ZmZlcnMoYWRhcHRlcik7CisKKwlGTFVTSF9TQ0hFRFVMRURfV09SSygpOworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Cit9CisKKworc3RhdGljIGludAorbmV0eGVuX25pY19hdHRhY2goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBlcnIsIHJpbmc7CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCisJZXJyID0gbmV0eGVuX2luaXRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXQgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQorCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMzsKKwllbHNlCisJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAyOworCisJZXJyID0gbmV0eGVuX2FsbG9jX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgc3cgcmVzb3VyY2VzXG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJbmV0eGVuX25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKKworCWVyciA9IG5ldHhlbl9hbGxvY19od19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIGh3IHJlc291cmNlc1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXRfZnJlZV9zdzsKKwl9CisKKwlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7CisJCWFkYXB0ZXItPmNyYl9hZGRyX2NtZF9wcm9kdWNlciA9CisJCQljcmJfY21kX3Byb2R1Y2VyW2FkYXB0ZXItPnBvcnRudW1dOworCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfY29uc3VtZXIgPQorCQkJY3JiX2NtZF9jb25zdW1lclthZGFwdGVyLT5wb3J0bnVtXTsKKworCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7CisJCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9jb25zdW1lcihhZGFwdGVyLCAwKTsKKwl9CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnJkc19yaW5nc1tyaW5nXTsKKwkJbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhhZGFwdGVyLCByaW5nLCByZHNfcmluZyk7CisJfQorCisJZXJyID0gbmV0eGVuX25pY19yZXF1ZXN0X2lycShhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gc2V0dXAgaW50ZXJydXB0XG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CisJCWdvdG8gZXJyX291dF9mcmVlX3J4YnVmOworCX0KKworCWFkYXB0ZXItPmlzX3VwID0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUM7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9yeGJ1ZjoKKwluZXR4ZW5fcmVsZWFzZV9yeF9idWZmZXJzKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9vdXRfZnJlZV9zdzoKKwluZXR4ZW5fZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uaWNfZGV0YWNoKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwluZXR4ZW5fbmljX2ZyZWVfaXJxKGFkYXB0ZXIpOworCisJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKKwluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJYWRhcHRlci0+aXNfdXAgPSAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogbmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOwotCXZvaWQgX19pb21lbSAqbWVtX3B0cjAgPSBOVUxMOwotCXZvaWQgX19pb21lbSAqbWVtX3B0cjEgPSBOVUxMOwotCXZvaWQgX19pb21lbSAqbWVtX3B0cjIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9lbmQ7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0OwotCi0KLQl1OCBfX2lvbWVtICpkYl9wdHIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2UsIG1lbV9sZW4sIGRiX2Jhc2UsIGRiX2xlbiwgcGNpX2xlbjAgPSAwOwogCWludCBpID0gMCwgZXJyOwotCWludCBmaXJzdF9kcml2ZXIsIGZpcnN0X2Jvb3Q7Ci0JdTMyIHZhbDsKIAlpbnQgcGNpX2Z1bmNfaWQgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7Ci0Jc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKIAl1aW50OF90IHJldmlzaW9uX2lkOwogCi0JaWYgKHBjaV9mdW5jX2lkID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOwotCiAJaWYgKHBkZXYtPmNsYXNzICE9IDB4MDIwMDAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJOZXRYZW4gZnVuY3Rpb24gJWQsIGNsYXNzICV4IHdpbGwgbm90ICIKIAkJCQkiYmUgZW5hYmxlZC5cbiIscGNpX2Z1bmNfaWQsIHBkZXYtPmNsYXNzKTsKQEAgLTU0MiwxMzAgKzk1NiwxNCBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAKIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKLQlhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9IC0xOwotCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gLTE7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spOwogCi0JLyogcmVtYXAgcGh5cyBhZGRyZXNzICovCi0JbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CS8qIDAgaXMgZm9yIEJBUiAwICovCi0JbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7Ci0JcGNpX2xlbjAgPSAwOwotCi0JYWRhcHRlci0+aHdfd3JpdGVfd3ggPSBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzEyOE07Ci0JYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8xMjhNOwotCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzEyOE07Ci0JYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzEyOE07Ci0JYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9IG5ldHhlbl9uaWNfcGNpX3dyaXRlX25vcm1hbGl6ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNOwotCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzEyOE07Ci0JYWRhcHRlci0+cGNpX21lbV93cml0ZSA9IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8xMjhNOwotCi0JLyogMTI4IE1lZyBvZiBtZW1vcnkgKi8KLQlpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzEyOE1CX1NJWkUpIHsKLQkJbWVtX3B0cjAgPSBpb3JlbWFwKG1lbV9iYXNlLCBGSVJTVF9QQUdFX0dST1VQX1NJWkUpOwotCQltZW1fcHRyMSA9IGlvcmVtYXAobWVtX2Jhc2UgKyBTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwKLQkJCQlTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCwKLQkJCQlUSElSRF9QQUdFX0dST1VQX1NJWkUpOwotCQlmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gRklSU1RfUEFHRV9HUk9VUF9TVEFSVDsKLQkJZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IEZJUlNUX1BBR0VfR1JPVVBfRU5EOwotCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzMyTUJfU0laRSkgewotCQltZW1fcHRyMSA9IGlvcmVtYXAobWVtX2Jhc2UsIFNFQ09ORF9QQUdFX0dST1VQX1NJWkUpOwotCQltZW1fcHRyMiA9IGlvcmVtYXAobWVtX2Jhc2UgKyBUSElSRF9QQUdFX0dST1VQX1NUQVJUIC0KLQkJCVNFQ09ORF9QQUdFX0dST1VQX1NUQVJULCBUSElSRF9QQUdFX0dST1VQX1NJWkUpOwotCQlmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gMDsKLQkJZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IDA7Ci0JfSBlbHNlIGlmIChtZW1fbGVuID09IE5FVFhFTl9QQ0lfMk1CX1NJWkUpIHsKLQkJYWRhcHRlci0+aHdfd3JpdGVfd3ggPSBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzJNOwotCQlhZGFwdGVyLT5od19yZWFkX3d4ID0gbmV0eGVuX25pY19od19yZWFkX3d4XzJNOwotCQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZSA9Ci0JCQluZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzJNOwotCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplID0KLQkJCW5ldHhlbl9uaWNfcGNpX3dyaXRlX25vcm1hbGl6ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3NldF93aW5kb3cgPSBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93XzJNOwotCQlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8yTTsKLQkJYWRhcHRlci0+cGNpX21lbV93cml0ZSA9IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8yTTsKLQotCQltZW1fcHRyMCA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKTsKLQkJaWYgKG1lbV9wdHIwID09IE5VTEwpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgUENJIGJhciAwXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJcGNpX2xlbjAgPSBtZW1fbGVuOwotCQlmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gMDsKLQkJZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IDA7Ci0KLQkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAwOwotCQlhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9IDA7Ci0KLQkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfTU5fV0lORE9XICsKLQkJCShwY2lfZnVuY19pZCAqIDB4MjApOwotCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiA9IDB4MTAwMDAwICsgUENJWF9TTl9XSU5ET1c7Ci0JCWlmIChwY2lfZnVuY19pZCA8IDQpCi0JCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiArPSAocGNpX2Z1bmNfaWQgKiAweDIwKTsKLQkJZWxzZQotCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0KLQkJCQkJMHhBMCArICgocGNpX2Z1bmNfaWQgLSA0KSAqIDB4MTApOwotCX0gZWxzZSB7Ci0JCWVyciA9IC1FSU87CisJZXJyID0gbmV0eGVuX3NldHVwX3BjaV9tYXAoYWRhcHRlcik7CisJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwotCX0KLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZE1CIG1lbW9yeSBtYXBcbiIsIChpbnQpKG1lbV9sZW4+PjIwKSk7Ci0KLQlkYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOwkvKiBkb29yYmVsbCBpcyBvbiBiYXIgNCAqLwotCWRiX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7Ci0KLQlpZiAoZGJfbGVuID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vcmJlbGwgaXMgZGlzYWJsZWRcbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9pb3VubWFwOwotCX0KLQlEUFJJTlRLKElORk8sICJkb29yYmVsbCBpb3JlbWFwIGZyb20gJWx4IGEgc2l6ZSBvZiAlbHhcbiIsIGRiX2Jhc2UsCi0JCWRiX2xlbik7Ci0KLQlkYl9wdHIgPSBpb3JlbWFwKGRiX2Jhc2UsIE5FVFhFTl9EQl9NQVBTSVpFX0JZVEVTKTsKLQlpZiAoIWRiX3B0cikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgbWFwLiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9pb3VubWFwOwotCX0KLQlEUFJJTlRLKElORk8sICJkb29yYmVsbCBpb3JlbWFwZWQgYXQgJXBcbiIsIGRiX3B0cik7Ci0KLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7Ci0JYWRhcHRlci0+YWh3LnBjaV9sZW4wID0gcGNpX2xlbjA7Ci0JYWRhcHRlci0+YWh3LmZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQgPSBmaXJzdF9wYWdlX2dyb3VwX3N0YXJ0OwotCWFkYXB0ZXItPmFody5maXJzdF9wYWdlX2dyb3VwX2VuZCAgID0gZmlyc3RfcGFnZV9ncm91cF9lbmQ7Ci0JYWRhcHRlci0+YWh3LnBjaV9iYXNlMSA9IG1lbV9wdHIxOwotCWFkYXB0ZXItPmFody5wY2lfYmFzZTIgPSBtZW1fcHRyMjsKLQlhZGFwdGVyLT5haHcuZGJfYmFzZSA9IGRiX3B0cjsKLQlhZGFwdGVyLT5haHcuZGJfbGVuID0gZGJfbGVuOwotCi0JbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwKLQkJCW5ldHhlbl9uaWNfcG9sbCwgTkVUWEVOX05FVERFVl9XRUlHSFQpOwotCi0JaWYgKHJldmlzaW9uX2lkID49IE5YX1AzX0IwKQotCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbcGNpX2Z1bmNfaWRdOwotCWVsc2UKLQkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyWzBdOwotCi0JYWRhcHRlci0+bGVnYWN5X2ludHIuaW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OwotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnID0gbGVnYWN5X2ludHJwLT50Z3Rfc3RhdHVzX3JlZzsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3RfbWFza19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9tYXNrX3JlZzsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci5wY2lfaW50X3JlZyA9IGxlZ2FjeV9pbnRycC0+cGNpX2ludF9yZWc7Ci0KLQkvKiB0aGlzIHdpbGwgYmUgcmVhZCBmcm9tIEZXIGxhdGVyICovCi0JYWRhcHRlci0+aW50cl9zY2hlbWUgPSAtMTsKLQlhZGFwdGVyLT5tc2lfbW9kZSA9IC0xOwogCiAJLyogVGhpcyB3aWxsIGJlIHJlc2V0IGZvciBtZXp6IGNhcmRzICAqLwogCWFkYXB0ZXItPnBvcnRudW0gPSBwY2lfZnVuY19pZDsKLQlhZGFwdGVyLT5zdGF0dXMgICAmPSB+TkVUWEVOX05FVERFVl9TVEFUVVM7CiAJYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CiAJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkKQEAgLTY5MywxMiArOTkxLDYgQEAKIAkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAl9CiAKLQkvKgotCSAqIFNldCB0aGUgQ1JCIHdpbmRvdyB0byBpbnZhbGlkLiBJZiBhbnkgcmVnaXN0ZXIgaW4gd2luZG93IDAgaXMKLQkgKiBhY2Nlc3NlZCBpdCBzaG91bGQgc2V0IHRoZSB3aW5kb3cgdG8gMCBhbmQgdGhlbiByZXNldCBpdCB0byAxLgotCSAqLwotCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OwotCiAJaWYgKG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcikgIT0gMCkgewogCQlwcmludGsoIiVzOiBFcnJvciBnZXR0aW5nIGJvYXJkIGNvbmZpZyBpbmZvLlxuIiwKIAkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKQEAgLTcwOSw3ICsxMDAxLDcgQEAKIAluZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhhZGFwdGVyKTsKIAogCS8qIE1lenogY2FyZHMgaGF2ZSBQQ0kgZnVuY3Rpb24gMCwyLDMgZW5hYmxlZCAqLwotCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUpIHsKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWjoKIAkJaWYgKHBjaV9mdW5jX2lkID49IDIpCkBAIC03MTksODIgKzEwMTEsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyoKLQkgKiBUaGlzIGNhbGwgd2lsbCBzZXR1cCB2YXJpb3VzIG1heCByeC90eCBjb3VudHMuCi0JICogSXQgbXVzdCBiZSBkb25lIGJlZm9yZSBhbnkgYnVmZmVyL3JpbmcgYWxsb2NhdGlvbnMuCi0JICovCi0JbmV0eGVuX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCi0JZmlyc3RfZHJpdmVyID0gMDsKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCWlmIChhZGFwdGVyLT5haHcucGNpX2Z1bmMgPT0gMCkKLQkJCWZpcnN0X2RyaXZlciA9IDE7Ci0JfSBlbHNlIHsKLQkJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKLQkJCWZpcnN0X2RyaXZlciA9IDE7Ci0JfQorCW54X3VwZGF0ZV9kbWFfbWFzayhhZGFwdGVyKTsKIAotCWlmIChmaXJzdF9kcml2ZXIpIHsKLQkJZmlyc3RfYm9vdCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSk7Ci0KLQkJZXJyID0gbmV0eGVuX2NoZWNrX2h3X2luaXQoYWRhcHRlciwgZmlyc3RfYm9vdCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGluaXQgSFcgaW5pdCBzZXF1ZW5jZVxuIiwKLQkJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQkJfQotCi0JCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpCi0JCQluZXR4ZW5fc2V0X3BvcnRfbW9kZShhZGFwdGVyKTsKLQotCQlpZiAoZmlyc3RfYm9vdCAhPSAweDU1NTU1NTU1KSB7Ci0JCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCi0JCQkJCQlDUkJfQ01EUEVHX1NUQVRFLCAwKTsKLQkJCW5ldHhlbl9waW5pdF9mcm9tX3JvbShhZGFwdGVyLCAwKTsKLQkJCW1zbGVlcCgxKTsKLQkJfQotCQluZXR4ZW5fbG9hZF9maXJtd2FyZShhZGFwdGVyKTsKLQotCQlpZiAoTlhfSVNfUkVWSVNJT05fUDIocmV2aXNpb25faWQpKSB7Ci0KLQkJCS8qIEluaXRpYWxpemUgbXVsdGljYXN0IGFkZHIgcG9vbCBvd25lcnMgKi8KLQkJCXZhbCA9IDB4NzY1NDsKLQkJCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCi0JCQkJdmFsIHw9IDB4MGYwMDAwMDA7Ci0JCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKLQkJCQkJTkVUWEVOX01BQ19BRERSX0NOVExfUkVHLCB2YWwpOwotCi0JCX0KLQotCQllcnIgPSBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQotCQkvKgotCQkgKiBUZWxsIHRoZSBoYXJkd2FyZSBvdXIgdmVyc2lvbiBudW1iZXIuCi0JCSAqLwotCQlpID0gKF9ORVRYRU5fTklDX0xJTlVYX01BSk9SIDw8IDE2KQotCQkJfCAoKF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDw8IDgpKQotCQkJfCAoX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTik7Ci0JCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0RSSVZFUl9WRVJTSU9OLCBpKTsKLQotCQkvKiBIYW5kc2hha2Ugd2l0aCB0aGUgY2FyZCBiZWZvcmUgd2UgcmVnaXN0ZXIgdGhlIGRldmljZXMuICovCi0JCWVyciA9IG5ldHhlbl9waGFudG9tX2luaXQoYWRhcHRlciwgTkVUWEVOX05JQ19QRUdfVFVORSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9vZmZsb2FkOwotCi0JfQkvKiBmaXJzdF9kcml2ZXIgKi8KLQotCW5ldHhlbl9uaWNfZmxhc2hfcHJpbnQoYWRhcHRlcik7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKLQkJCQlORVRYRU5fTUlVX01OX0NPTlRST0wsICZ2YWwsIDQpOwotCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPSAodmFsICYgMHg0KSA/IDEgOiAwOwotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgcnVubmluZyBpbiAlcyBtb2RlXG4iLAotCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPyAiY3V0IHRocm91Z2giIDogImxlZ2FjeSIpOwotCX0KKwluZXR4ZW5fbmljX2dldF9maXJtd2FyZV9pbmZvKGFkYXB0ZXIpOwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIGZpcm13YXJlIGdhdmUgdXMgYSB2aXJ0dWFsLXBoeXNpY2FsIHBvcnQgbWFwcGluZy4KQEAgLTgwNyw0MSArMTAzMCwxMyBAQAogCQkJYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IGk7CiAJfQogCi0JYWRhcHRlci0+ZmxhZ3MgJj0gfihORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpOworCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOwogCi0JbmV0eGVuX3NldF9tc2l4X2JpdChwZGV2LCAwKTsKKwluZXR4ZW5fc2V0dXBfaW50cihhZGFwdGVyKTsKIAotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpIHsKLQkJaWYgKChtZW1fbGVuICE9IE5FVFhFTl9QQ0lfMTI4TUJfU0laRSkgJiYKLQkJCW1lbV9sZW4gIT0gTkVUWEVOX1BDSV8yTUJfU0laRSkKLQkJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gMDsKLQl9CisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yOwogCi0JaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7Ci0KLQkJbmV0eGVuX2luaXRfbXNpeF9lbnRyaWVzKGFkYXB0ZXIpOwotCi0JCWlmIChwY2lfZW5hYmxlX21zaXgocGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLAotCQkJCQlNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVIpKQotCQkJZ290byByZXF1ZXN0X21zaTsKLQotCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSVhfRU5BQkxFRDsKLQkJbmV0eGVuX3NldF9tc2l4X2JpdChwZGV2LCAxKTsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaS14IGludGVycnVwdHNcbiIpOwotCi0JfSBlbHNlIHsKLXJlcXVlc3RfbXNpOgotCQlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKLQkJCWFkYXB0ZXItPmZsYWdzIHw9IE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQ7Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOwotCQl9IGVsc2UKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBsZWdhY3kgaW50ZXJydXB0c1xuIik7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKLQllbHNlCi0JCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOworCW5ldHhlbl9uYXBpX2FkZChhZGFwdGVyLCBuZXRkZXYpOwogCiAJZXJyID0gbmV0eGVuX3JlY2VpdmVfcGVnX3JlYWR5KGFkYXB0ZXIpOwogCWlmIChlcnIpCkBAIC04NzAsNyArMTA2NSw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CiAJY2FzZSBORVRYRU5fTklDX0dCRToKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKIAkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwpAQCAtODg0LDI1ICsxMDc5LDEyIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZGlzYWJsZV9tc2k6Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCW5ldHhlbl90ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOwogCi1lcnJfb3V0X2ZyZWVfb2ZmbG9hZDoKLQlpZiAoZmlyc3RfZHJpdmVyKQotCQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwogCiBlcnJfb3V0X2lvdW5tYXA6Ci0JaWYgKGRiX3B0cikKLQkJaW91bm1hcChkYl9wdHIpOwotCi0JaWYgKG1lbV9wdHIwKQotCQlpb3VubWFwKG1lbV9wdHIwKTsKLQlpZiAobWVtX3B0cjEpCi0JCWlvdW5tYXAobWVtX3B0cjEpOwotCWlmIChtZW1fcHRyMikKLQkJaW91bm1hcChtZW1fcHRyMik7CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAogZXJyX291dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtOTMwLDkgKzExMTIsNyBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKIAlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpIHsKLQkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQluZXR4ZW5fcmVsZWFzZV9yeF9idWZmZXJzKGFkYXB0ZXIpOwotCQluZXR4ZW5fZnJlZV9zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOwogCiAJCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQkJbmV0eGVuX3AzX2ZyZWVfbWFjX2xpc3QoYWRhcHRlcik7CkBAIC05NDEsMjAgKzExMjEsOSBAQAogCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCiAJCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKIAotCWlmIChhZGFwdGVyLT5pcnEpCi0JCWZyZWVfaXJxKGFkYXB0ZXItPmlycSwgYWRhcHRlcik7CisJbmV0eGVuX3RlYXJkb3duX2ludHIoYWRhcHRlcik7CiAKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpeChwZGV2KTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQotCQlwY2lfZGlzYWJsZV9tc2kocGRldik7Ci0KLQlpb3VubWFwKGFkYXB0ZXItPmFody5kYl9iYXNlKTsKLQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTApOwotCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UxICE9IE5VTEwpCi0JCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSk7Ci0JaWYgKGFkYXB0ZXItPmFody5wY2lfYmFzZTIgIT0gTlVMTCkKLQkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UyKTsKKwluZXR4ZW5fY2xlYW51cF9wY2lfbWFwKGFkYXB0ZXIpOwogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC05NjMsMTI1ICsxMTMyLDk1IEBACiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIH0KIAotLyoKLSAqIENhbGxlZCB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgaXMgbWFkZSBhY3RpdmUKLSAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQotICovCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnI7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYWRhcHRlci0+Y3Vycl93aW5kb3cgPSAyNTU7CisKKwllcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc3RhcnQgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IG5ldHhlbl9uaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVyciA9IDA7Ci0JaW50IGN0eCwgcmluZzsKLQlpcnFfaGFuZGxlcl90IGhhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IElSUUZfU0FNUExFX1JBTkRPTTsKIAogCWlmIChhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2gpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7Ci0JCWVyciA9IG5ldHhlbl9pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOwotCQlpZiAoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXQgZmlybXdhcmVcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAyOwotCi0JCWVyciA9IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgc3cgcmVzb3VyY2VzXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOworCQllcnIgPSBuZXR4ZW5fbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQluZXR4ZW5fbmljX2NsZWFyX3N0YXRzKGFkYXB0ZXIpOwotCi0JCWVyciA9IG5ldHhlbl9hbGxvY19od19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgaHcgcmVzb3VyY2VzXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfc3c7Ci0JCX0KLQotCQlpZiAoKGFkYXB0ZXItPm1zaV9tb2RlICE9IE1TSV9NT0RFX01VTFRJRlVOQykgfHwKLQkJCShhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlybXdhcmUgaW50ZXJydXB0IHNjaGVtZSBpcyAiCi0JCQkJCSJpbmNvbXBhdGlibGUgd2l0aCBkcml2ZXJcbiIsCi0JCQkJCW5ldGRldi0+bmFtZSk7Ci0JCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfaHc7Ci0JCX0KLQotCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7Ci0JCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIgPQotCQkJCWNyYl9jbWRfcHJvZHVjZXJbYWRhcHRlci0+cG9ydG51bV07Ci0JCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfY29uc3VtZXIgPQotCQkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV07Ci0KLQkJCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihhZGFwdGVyLCAwKTsKLQkJCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9jb25zdW1lcihhZGFwdGVyLCAwKTsKLQkJfQotCi0JCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKQotCQkJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgY3R4LCByaW5nKTsKLQkJfQotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKLQkJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpeF9pbnRyOwotCQllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCi0JCQloYW5kbGVyID0gbmV0eGVuX21zaV9pbnRyOwotCQllbHNlIHsKLQkJCWZsYWdzIHw9IElSUUZfU0hBUkVEOwotCQkJaGFuZGxlciA9IG5ldHhlbl9pbnRyOwotCQl9Ci0JCWFkYXB0ZXItPmlycSA9IG5ldGRldi0+aXJxOwotCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGhhbmRsZXIsCi0JCQkJICBmbGFncywgbmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJyZXF1ZXN0X2lycSBmYWlsZWQgd2l0aDogJWRcbiIsIGVycik7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKLQkJfQotCi0JCWFkYXB0ZXItPmlzX3VwID0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUM7CiAJfQogCi0JLyogRG9uZSBoZXJlIGFnYWluIHNvIHRoYXQgZXZlbiBpZiBwaGFudG9tIHN3IG92ZXJ3cm90ZSBpdCwKLQkgKiB3ZSBzZXQgaXQgKi8KLQllcnIgPSBhZGFwdGVyLT5pbml0X3BvcnQoYWRhcHRlciwgYWRhcHRlci0+cGh5c2ljYWxfcG9ydCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3J0ICVkXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPnBvcnRudW0pOwotCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7Ci0JfQotCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOwotCi0JbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKGFkYXB0ZXIpOwotCi0JbmV0eGVuX3NldF9tdWx0aWNhc3RfbGlzdChuZXRkZXYpOwotCWlmIChhZGFwdGVyLT5zZXRfbXR1KQotCQlhZGFwdGVyLT5zZXRfbXR1KGFkYXB0ZXIsIG5ldGRldi0+bXR1KTsKLQotCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOwotCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwotCi0JbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOwotCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OwogCiAJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAogCXJldHVybiAwOwogCi1lcnJfb3V0X2ZyZWVfaXJxOgotCWZyZWVfaXJxKGFkYXB0ZXItPmlycSwgYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfcnhidWY6Ci0JbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKLWVycl9vdXRfZnJlZV9odzoKLQluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfc3c6Ci0JbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworZXJyX291dDoKKwluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDkyLDIwICsxMjMxLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQotCWlmIChhZGFwdGVyLT5zdG9wX3BvcnQpCi0JCWFkYXB0ZXItPnN0b3BfcG9ydChhZGFwdGVyKTsKLQotCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7Ci0KLQluZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOwotCi0JRkxVU0hfU0NIRURVTEVEX1dPUksoKTsKLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwotCisJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMTcsNyArMTI0Myw3IEBACiAJX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKIAl1MTYgZmxhZ3MgPSAwOwogCi0JaWYgKHByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgewogCQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYi0+ZGF0YTsKIAkJcHJvdG9jb2wgPSB2aC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKIAkJZmxhZ3MgPSBGTEFHU19WTEFOX1RBR0dFRDsKQEAgLTExMzAsMjEgKzEyNTYsMjEgQEAKIAkJZGVzYy0+dG90YWxfaGRyX2xlbmd0aCA9CiAJCQlza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOwogCi0JCW9wY29kZSA9IChwcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpKSA/CisJCW9wY29kZSA9IChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgPwogCQkJCVRYX1RDUF9MU082IDogVFhfVENQX0xTTzsKIAkJdHNvID0gdHJ1ZTsKIAogCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQl1OCBsNHByb3RvOwogCi0JCWlmIChwcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSkgeworCQlpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCQlsNHByb3RvID0gaXBfaGRyKHNrYiktPnByb3RvY29sOwogCiAJCQlpZiAobDRwcm90byA9PSBJUFBST1RPX1RDUCkKIAkJCQlvcGNvZGUgPSBUWF9UQ1BfUEtUOwogCQkJZWxzZSBpZihsNHByb3RvID09IElQUFJPVE9fVURQKQogCQkJCW9wY29kZSA9IFRYX1VEUF9QS1Q7Ci0JCX0gZWxzZSBpZiAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSkgeworCQl9IGVsc2UgaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQVjYpKSB7CiAJCQlsNHByb3RvID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKIAogCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCkBAIC0xMTc3LDcgKzEzMDMsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQKK25ldHhlbl9jbGVhcl9jbWRkZXNjKHU2NCAqZGVzYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkZXNjW2ldID0gMFVMTDsKK30KKworc3RhdGljIGludAorbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgbmV0eGVuX2hhcmR3YXJlX2NvbnRleHQgKmh3ID0gJmFkYXB0ZXItPmFodzsKQEAgLTExOTEsNyArMTMyNiw3IEBACiAKIAl1MzIgcHJvZHVjZXIsIGNvbnN1bWVyOwogCWludCBmcmFnX2NvdW50LCBub19vZl9kZXNjOwotCXUzMiBudW1fdHhkID0gYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7CisJdTMyIG51bV90eGQgPSBhZGFwdGVyLT5udW1fdHhkOwogCWJvb2wgaXNfdHNvID0gZmFsc2U7CiAKIAlmcmFnX2NvdW50ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CkBAIC0xMjEwLDcgKzEzNDUsNyBAQAogCiAJLyogQ29weSB0aGUgZGVzY3JpcHRvcnMgaW50byB0aGUgaGFyZHdhcmUgICAgKi8KIAlod2Rlc2MgPSAmaHctPmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdOwotCW1lbXNldChod2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApKTsKKwluZXR4ZW5fY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKIAkvKiBUYWtlIHNrYi0+ZGF0YSBpdHNlbGYgKi8KIAlwYnVmID0gJmFkYXB0ZXItPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKIApAQCAtMTIyOSw3ICsxMzY0LDcgQEAKIAluZXR4ZW5fc2V0X3R4X2ZyYWdzX2xlbihod2Rlc2MsIGZyYWdfY291bnQsIHNrYi0+bGVuKTsKIAluZXR4ZW5fc2V0X3R4X3BvcnQoaHdkZXNjLCBhZGFwdGVyLT5wb3J0bnVtKTsKIAotCWh3ZGVzYy0+YnVmZmVyMV9sZW5ndGggPSBjcHVfdG9fbGUxNihmaXJzdF9zZWdfbGVuKTsKKwlod2Rlc2MtPmJ1ZmZlcl9sZW5ndGhbMF0gPSBjcHVfdG9fbGUxNihmaXJzdF9zZWdfbGVuKTsKIAlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KGJ1ZmZyYWctPmRtYSk7CiAKIAlmb3IgKGkgPSAxLCBrID0gMTsgaSA8IGZyYWdfY291bnQ7IGkrKywgaysrKSB7CkBAIC0xMjQyLDcgKzEzNzcsNyBAQAogCQkJayA9IDA7CiAJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKIAkJCWh3ZGVzYyA9ICZody0+Y21kX2Rlc2NfaGVhZFtwcm9kdWNlcl07Ci0JCQltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CisJCQluZXR4ZW5fY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKIAkJCXBidWYgPSAmYWRhcHRlci0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOwogCQkJcGJ1Zi0+c2tiID0gTlVMTDsKIAkJfQpAQCAtMTI2MiwyMSArMTM5NywxOCBAQAogCQlidWZmcmFnLT5kbWEgPSB0ZW1wX2RtYTsKIAkJYnVmZnJhZy0+bGVuZ3RoID0gdGVtcF9sZW47CiAKKwkJaHdkZXNjLT5idWZmZXJfbGVuZ3RoW2tdID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQlzd2l0Y2ggKGspIHsKIAkJY2FzZSAwOgotCQkJaHdkZXNjLT5idWZmZXIxX2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCWh3ZGVzYy0+YnVmZmVyMl9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMiA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlod2Rlc2MtPmJ1ZmZlcjNfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjMgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJaHdkZXNjLT5idWZmZXI0X2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXI0ID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEzOTEsNyArMTUyMyw3IEBACiAJCWxpbmt1cCA9ICh2YWwgPT0gWEdfTElOS19VUF9QMyk7CiAJfSBlbHNlIHsKIAkJdmFsID0gYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9YR19TVEFURSk7Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKKwkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCiAJCQlsaW5rdXAgPSAodmFsID4+IHBvcnQpICYgMTsKIAkJZWxzZSB7CiAJCQl2YWwgPSAodmFsID4+IHBvcnQqOCkgJiAweGZmOwpAQCAtMTQ1OCwxMyArMTU5MCwxMSBAQAogCXByaW50ayhLRVJOX0VSUiAiJXMgJXM6IHRyYW5zbWl0IHRpbWVvdXQsIHJlc2V0dGluZy5cbiIsCiAJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAKLQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOwotCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKIAogCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOwotCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CiAJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogfQogCkBAIC0xNTAyLDcgKzE2MzIsOCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CiAJdTMyIHN0YXR1cyA9IDA7CiAKIAlzdGF0dXMgPSBhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOwpAQCAtMTUzMyw3ICsxNjY0LDcgQEAKIAogCS8qIGNsZWFyIGludGVycnVwdCAqLwogCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpCi0JCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7CisJCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc2RzX3JpbmcpOwogCiAJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAogCQkJYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X3N0YXR1c19yZWcsCkBAIC0xNTQyLDYxICsxNjczLDQ5IEBACiAJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKIAlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOwogCi0JbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX21zaV9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCiAJLyogY2xlYXIgaW50ZXJydXB0ICovCiAJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAogCQkJbXNpX3RndF9zdGF0dXNbYWRhcHRlci0+YWh3LnBjaV9mdW5jXSwgMHhmZmZmZmZmZik7CiAKLQluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX21zaXhfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKIAotCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG5ldHhlbl9hZGFwdGVyLCBuYXBpKTsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPQorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcsIG5hcGkpOworCisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKIAlpbnQgdHhfY29tcGxldGU7Ci0JaW50IGN0eDsKIAlpbnQgd29ya19kb25lOwogCiAJdHhfY29tcGxldGUgPSBuZXR4ZW5fcHJvY2Vzc19jbWRfcmluZyhhZGFwdGVyKTsKIAotCXdvcmtfZG9uZSA9IDA7Ci0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJLyoKLQkJICogRmFpcm5lc3MgaXNzdWUuIFRoaXMgd2lsbCBnaXZlIHVuZHVlIHdlaWdodCB0byB0aGUKLQkJICogcmVjZWl2ZSBjb250ZXh0IDAuCi0JCSAqLwotCi0JCS8qCi0JCSAqIFRvIGF2b2lkIHN0YXJ2YXRpb24sIHdlIGdpdmUgZWFjaCBvZiBvdXIgcmVjZWl2ZXJzLAotCQkgKiBhIGZyYWN0aW9uIG9mIHRoZSBxdW90YS4gU29tZXRpbWVzLCBpdCBtaWdodCBoYXBwZW4gdGhhdCB3ZQotCQkgKiBoYXZlIGVub3VnaCBxdW90YSB0byBwcm9jZXNzIGV2ZXJ5IHBhY2tldCwgYnV0IHNpbmNlIGFsbCB0aGUKLQkJICogcGFja2V0cyBhcmUgb24gb25lIGNvbnRleHQsIGl0IGdldHMgb25seSBoYWxmIG9mIHRoZSBxdW90YSwKLQkJICogYW5kIGVuZHMgdXAgbm90IHByb2Nlc3NpbmcgaXQuCi0JCSAqLwotCQl3b3JrX2RvbmUgKz0gbmV0eGVuX3Byb2Nlc3NfcmN2X3JpbmcoYWRhcHRlciwgY3R4LAotCQkJCQkJICAgICBidWRnZXQgLyBNQVhfUkNWX0NUWCk7Ci0JfQorCXdvcmtfZG9uZSA9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHNkc19yaW5nLCBidWRnZXQpOwogCiAJaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmIHR4X2NvbXBsZXRlKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKCZhZGFwdGVyLT5uYXBpKTsKLQkJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOworCQluYXBpX2NvbXBsZXRlKCZzZHNfcmluZy0+bmFwaSk7CisJCW5ldHhlbl9uaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CiAJfQogCiAJcmV0dXJuIHdvcmtfZG9uZTsKQEAgLTE2MTYsMTMgKzE3MzUsMTcgQEAKIAkubmFtZSA9IG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCiAJLmlkX3RhYmxlID0gbmV0eGVuX3BjaV90YmwsCiAJLnByb2JlID0gbmV0eGVuX25pY19wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AobmV0eGVuX25pY19yZW1vdmUpCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5ldHhlbl9uaWNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IG5ldHhlbl9uaWNfc3VzcGVuZCwKKwkucmVzdW1lID0gbmV0eGVuX25pY19yZXN1bWUKIH07CiAKIC8qIERyaXZlciBSZWdpc3RyYXRpb24gb24gTmV0WGVuIGNhcmQgICAgKi8KIAogc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCiB7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX3N0cmluZyk7CisKIAlpZiAoKG5ldHhlbl93b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJuZXR4ZW4iKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKaW5kZXggYzNiOWM4My4uZDg1MjAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgTmV0d29yayBJbnRlcmZhY2UgVW5pdCBoL3cgYmxvY2suCisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC0yOTksMTQgKzI5Niw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIDAKLWludCBuZXR4ZW5fbml1X3hnYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0FDVElWRV9JTlQsIC0xKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIHN0YXRpYyBpbnQgbmV0eGVuX25pdV9nYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCWludCByZXN1bHQgPSAwOwpAQCAtNDY3LDEwNCArNDU2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBuZXR4ZW5fbml1X2diZV9oYW5kbGVfcGh5X2ludGVycnVwdCAtIEhhbmRsZXMgR2JFIFBIWSBpbnRlcnJ1cHRzCi0gKiBAcGFyYW0gZW5hYmxlIDAgbWVhbnMgZG9uJ3QgZW5hYmxlIHRoZSBwb3J0Ci0gKgkJIDEgbWVhbnMgZW5hYmxlIChvciByZS1lbmFibGUpIHRoZSBwb3J0Ci0gKi8KLWludCBuZXR4ZW5fbml1X2diZV9oYW5kbGVfcGh5X2ludGVycnVwdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCWludCBwb3J0LCBsb25nIGVuYWJsZSkKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlfX3UzMiBpbnRfc3JjOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5FVFhFTjogSGFuZGxpbmcgUEhZIGludGVycnVwdCBvbiBwb3J0ICVkIgotCSAgICAgICAiIChkZXZpY2UgZW5hYmxlID0gJWQpXG4iLCAoaW50KXBvcnQsIChpbnQpZW5hYmxlKTsKLQotCS8qCi0JICogVGhlIHJlYWQgb2YgdGhlIFBIWSBJTlQgc3RhdHVzIHdpbGwgY2xlYXIgdGhlIHBlbmRpbmcKLQkgKiBpbnRlcnJ1cHQgc3RhdHVzCi0JICovCi0JaWYgKG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKGFkYXB0ZXIsCi0JCQkJICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9JTlRfU1RBVFVTLAotCQkJCSAgICAmaW50X3NyYykgIT0gMCkKLQkJcmVzdWx0ID0gLUVJTlZBTDsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBIWSBJbnRlcnJ1cHQgc291cmNlID0gMHgleCBcbiIsIGludF9zcmMpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2phYmJlcihpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJqYWJiZXIgSW50ZXJydXB0ICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X3BvbGFyaXR5X2NoYW5nZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAicG9sYXJpdHkgY2hhbmdlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9lbmVyZ3lfZGV0ZWN0KGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImVuZXJneSBkZXRlY3QgXG4iKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9kb3duc2hpZnQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZG93bnNoaWZ0IFxuIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfbWRpX3hvdmVyX2NoYW5nZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAibWRpX3hvdmVyX2NoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZmlmb19vdmVyX3VuZGVyZmxvdyhpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJmaWZvX292ZXJfdW5kZXJmbG93ICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2ZhbHNlX2NhcnJpZXIoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmFsc2VfY2FycmllciAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9zeW1ib2xfZXJyb3IoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAic3ltYm9sX2Vycm9yICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2F1dG9uZWdfY29tcGxldGVkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImF1dG9uZWdfY29tcGxldGVkICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X3BhZ2VfcmVjZWl2ZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAicGFnZV9yZWNlaXZlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9kdXBsZXhfY2hhbmdlZChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJkdXBsZXhfY2hhbmdlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2Vycm9yKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImF1dG9uZWdfZXJyb3IgIik7Ci0JCWlmICgobmV0eGVuX2dldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoaW50X3NyYykpCi0JCSAgICB8fCAobmV0eGVuX2dldF9waHlfaW50X2xpbmtfc3RhdHVzX2NoYW5nZWQoaW50X3NyYykpKSB7Ci0JCQlfX3UzMiBzdGF0dXM7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCQkgICAgICAgInNwZWVkX2NoYW5nZWQgb3IgbGluayBzdGF0dXMgY2hhbmdlZCIpOwotCQkJaWYgKG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkCi0JCQkgICAgKGFkYXB0ZXIsCi0JCQkgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAotCQkJICAgICAmc3RhdHVzKSA9PSAwKSB7Ci0JCQkJaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMikgewotCQkJCQlwcmludGsKLQkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCi0JCQkJCSAgICAgIiB0byAxMDAwIE1icHNcbiIpOwotCQkJCQluZXR4ZW5fbml1X2diZV9zZXRfZ21paV9tb2RlKGFkYXB0ZXIsCi0JCQkJCQkJCSAgICAgcG9ydCwKLQkJCQkJCQkJICAgICBlbmFibGUpOwotCQkJCX0gZWxzZSBpZiAobmV0eGVuX2dldF9waHlfc3BlZWQoc3RhdHVzKSA9PSAxKSB7Ci0JCQkJCXByaW50awotCQkJCQkgICAgKEtFUk5fSU5GTyBQRlggIkxpbmsgc3BlZWQgY2hhbmdlZCIKLQkJCQkJICAgICAiIHRvIDEwMCBNYnBzXG4iKTsKLQkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlKGFkYXB0ZXIsCi0JCQkJCQkJCSAgICBwb3J0LAotCQkJCQkJCQkgICAgZW5hYmxlKTsKLQkJCQl9IGVsc2UgaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMCkgewotCQkJCQlwcmludGsKLQkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCi0JCQkJCSAgICAgIiB0byAxMCBNYnBzXG4iKTsKLQkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlKGFkYXB0ZXIsCi0JCQkJCQkJCSAgICBwb3J0LAotCQkJCQkJCQkgICAgZW5hYmxlKTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJFUlJPUiByZWFkaW5nICIKLQkJCQkJICAgICAgICJQSFkgc3RhdHVzLiBJbnZhbGlkIHNwZWVkLlxuIik7Ci0JCQkJCXJlc3VsdCA9IC0xOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCSAgICAgICAiRVJST1IgcmVhZGluZyBQSFkgc3RhdHVzLlxuIik7Ci0JCQkJcmVzdWx0ID0gLTE7Ci0JCQl9Ci0KLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQogLyoKICAqIFJldHVybiB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNzLgogICogTm90ZSB0aGF0IHRoZSBwYXNzZWQtaW4gdmFsdWUgbXVzdCBhbHJlYWR5IGJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KQEAgLTY0MSw4NiArNTMyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qIEVuYWJsZSBhIEdiRSBpbnRlcmZhY2UgKi8KLWludCBuZXR4ZW5fbml1X2VuYWJsZV9nYmVfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgICAgaW50IHBvcnQsIG5ldHhlbl9uaXVfZ2JlX2lmbW9kZV90IG1vZGUpCi17Ci0JX191MzIgbWFjX2NmZzA7Ci0JX191MzIgbWFjX2NmZzE7Ci0JX191MzIgbWlpX2NmZzsKLQotCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX3NvZnRfcmVzZXQobWFjX2NmZzApOwotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkgICAmbWFjX2NmZzAsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX2VuYWJsZV90eChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX2VuYWJsZV9yeChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOwotCW5ldHhlbl9nYl90eF9yZXNldF9wYihtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3J4X3Jlc2V0X3BiKG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfdHhfcmVzZXRfbWFjKG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfcnhfcmVzZXRfbWFjKG1hY19jZmcwKTsKLQotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkgICAmbWFjX2NmZzAsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQltYWNfY2ZnMSA9IDA7Ci0JbmV0eGVuX2diX3NldF9wcmVhbWJsZWxlbihtYWNfY2ZnMSwgMHhmKTsKLQluZXR4ZW5fZ2Jfc2V0X2R1cGxleChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9jcmNfZW5hYmxlKG1hY19jZmcxKTsKLQluZXR4ZW5fZ2Jfc2V0X3BhZHNob3J0KG1hY19jZmcxKTsKLQluZXR4ZW5fZ2Jfc2V0X2NoZWNrbGVuZ3RoKG1hY19jZmcxKTsKLQluZXR4ZW5fZ2Jfc2V0X2h1Z2VmcmFtZXMobWFjX2NmZzEpOwotCi0JaWYgKG1vZGUgPT0gTkVUWEVOX05JVV8xMF8xMDBfTUIpIHsKLQkJbmV0eGVuX2diX3NldF9pbnRmbW9kZShtYWNfY2ZnMSwgMSk7Ci0JCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAotCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMShwb3J0KSwKLQkJCQkJICAgJm1hY19jZmcxLCA0KSkKLQkJCXJldHVybiAtRUlPOwotCi0JCS8qIHNldCBtaWkgbW9kZSAqLwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsKLQkJCQkJICAgIChwb3J0IDw8IDMpLCAwKTsKLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX01JSV9NT0RFICsKLQkJCQkJICAgIChwb3J0IDw8IDMpLCAxKTsKLQotCX0gZWxzZSBpZiAobW9kZSA9PSBORVRYRU5fTklVXzEwMDBfTUIpIHsKLQkJbmV0eGVuX2diX3NldF9pbnRmbW9kZShtYWNfY2ZnMSwgMik7Ci0JCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLAotCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMShwb3J0KSwKLQkJCQkJICAgJm1hY19jZmcxLCA0KSkKLQkJCXJldHVybiAtRUlPOwotCQkvKiBzZXQgZ21paSBtb2RlICovCi0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9HTUlJX01PREUgKwotCQkJCQkgICAgKHBvcnQgPDwgMyksIDEpOwotCX0KLQltaWlfY2ZnID0gMDsKLQluZXR4ZW5fZ2Jfc2V0X21paV9tZ210X2Nsb2Nrc2VsZWN0KG1paV9jZmcsIDcpOwotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTkZJRyhwb3J0KSwKLQkJCQkgICAmbWlpX2NmZywgNCkpCi0JCXJldHVybiAtRUlPOwotCW1hY19jZmcwID0gMDsKLQluZXR4ZW5fZ2JfZW5hYmxlX3R4KG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfZW5hYmxlX3J4KG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfdW5zZXRfcnhfZmxvd2N0bChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3Vuc2V0X3R4X2Zsb3djdGwobWFjX2NmZzApOwotCi0JaWYgKGFkYXB0ZXItPmh3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAotCQkJCSAgICZtYWNfY2ZnMCwgNCkpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQogLyogRGlzYWJsZSBhIEdiRSBpbnRlcmZhY2UgKi8KIGludCBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewpAQCAtODY5LDM5ICs2ODAsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotLyoKLSAqIFJldHVybiB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNzLgotICogTm90ZSB0aGF0IHRoZSBwYXNzZWQtaW4gdmFsdWUgbXVzdCBhbHJlYWR5IGJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KLSAqLwotaW50IG5ldHhlbl9uaXVfeGdfbWFjYWRkcl9nZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdCAqIGFkZHIpCi17Ci0JaW50IHBoeSA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JdTMyIHN0YXRpb25oaWdoOwotCXUzMiBzdGF0aW9ubG93OwotCXU4IHZhbFs4XTsKLQotCWlmIChhZGRyID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChwaHkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSwKLQkJCQkgICZzdGF0aW9uaGlnaCwgNCkpCi0JCXJldHVybiAtRUlPOwotCWlmIChhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wXzEsCi0JCQkJICAmc3RhdGlvbmxvdywgNCkpCi0JCXJldHVybiAtRUlPOwotCSgoX19sZTMyICopdmFsKVsxXSA9IGNwdV90b19sZTMyKHN0YXRpb25oaWdoKTsKLQkoKF9fbGUzMiAqKXZhbClbMF0gPSBjcHVfdG9fbGUzMihzdGF0aW9ubG93KTsKLQotCW1lbWNweShhZGRyLCB2YWwgKyAyLCA2KTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQogaW50IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1MzIgbW9kZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCmluZGV4IGIyOTNhZGMuLjUwMTgzMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsOSArMjIsMTAgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCisgKgogICovCiAKICNpZm5kZWYgX19OSUNfUEhBTl9SRUdfSF8KQEAgLTkwLDYgKzkxLDcgQEAKICNkZWZpbmUgQ1JCX1JYX0xST19TVEFSVF9OVU0gICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzApCiAjZGVmaW5lIENSQl9NUE9SVF9NT0RFICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGM0KQkvKiBNdWx0aXBvcnQgTW9kZSAqLwogI2RlZmluZSBDUkJfQ01EX1JJTkdfU0laRSAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjOCkKKyNkZWZpbmUgQ1JCX0RNQV9TSElGVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4Y2MpCiAjZGVmaW5lIENSQl9JTlRfVkVDVE9SICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGQ0KQogI2RlZmluZSBDUkJfQ1RYX1JFU0VUICAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkOCkKICNkZWZpbmUgQ1JCX0hPU1RfU1RTX1BST0QgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZGMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUyLmMgYi9kcml2ZXJzL25ldC9uaTUyLmMKaW5kZXggYThiY2MwMC4uNzdkNDRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1Mi5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTIuYwpAQCAtNDQxLDYgKzQ0MSwxOCBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmk1Ml9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuaTUyX29wZW4sCisJLm5kb19zdG9wCQk9IG5pNTJfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbmk1Ml9nZXRfc3RhdHMsCisJLm5kb190eF90aW1lb3V0IAk9IG5pNTJfdGltZW91dCwKKwkubmRvX3N0YXJ0X3htaXQgCT0gbmk1Ml9zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbmk1Ml9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKIAlpbnQgaSwgc2l6ZSwgcmV0dmFsOwpAQCAtNTYxLDE1ICs1NzMsOCBAQAogCQlwcmludGsoIklSUSAlZCAoYXNzaWduZWQgYW5kIG5vdCBjaGVja2VkISkuXG4iLCBkZXYtPmlycSk7CiAJfQogCi0JZGV2LT5vcGVuCQk9IG5pNTJfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbmk1Ml9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkJPSBuaTUyX2dldF9zdGF0czsKLQlkZXYtPnR4X3RpbWVvdXQgCT0gbmk1Ml90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmbmk1Ml9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWi8yMDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAJPSBuaTUyX3NlbmRfcGFja2V0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotCi0JZGV2LT5pZl9wb3J0IAkJPSAwOwogCiAJcmV0dXJuIDA7CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTY1LmMgYi9kcml2ZXJzL25ldC9uaTY1LmMKaW5kZXggMjU0MDU3Mi4uNjQ3NGYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L25pNjUuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJdm9pZCAqdG1kYm91bmNlW1RNRE5VTV07CiAJaW50IHRtZGJvdW5jZW51bTsKIAlpbnQgbG9jayx4bWl0X3F1ZXVlZDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwogCXZvaWQgKnNlbGY7CiAJaW50IGNtZHJfYWRkcjsKIAlpbnQgY2FyZG5vOwpAQCAtMjU3LDcgKzI1Nyw2IEBACiBzdGF0aWMgaW50ICBuaTY1X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgbmk2NV9hbGxvY19idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBuaTY1X2ZyZWVfYnVmZmVyKHN0cnVjdCBwcml2ICpwKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmk2NV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbnQgaXJxdGFiW10gX19pbml0ZGF0YSA9IHsgOSwxMiwxNSw1IH07IC8qIGlycSBjb25maWctdHJhbnNsYXRlICovCkBAIC00MDEsNiArNDAwLDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuaTY1X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5pNjVfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmk2NV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbmk2NV9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbmk2NV90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKgogICogdGhpcyBpcyB0aGUgcmVhbCBjYXJkIHByb2JlIC4uCiAgKi8KQEAgLTQ4MSw4ICs0OTEsOSBAQAogCWVsc2UgewogCQlpZihkZXYtPmRtYSA9PSAwKSB7CiAJCS8qICdzdHVjayB0ZXN0JyBmcm9tIGxhbmNlLmMgKi8KLQkJCWxvbmcgZG1hX2NoYW5uZWxzID0gKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKSB8Ci0JCQkJCSAgICAoaW5iKERNQTJfU1RBVF9SRUcpICYgMHhmMCk7CisJCQl1bnNpZ25lZCBsb25nIGRtYV9jaGFubmVscyA9CisJCQkJKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKQorCQkJCXwgKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOwogCQkJZm9yKGk9MTtpPDU7aSsrKSB7CiAJCQkJaW50IGRtYSA9IGRtYXRhYltpXTsKIAkJCQlpZih0ZXN0X2JpdChkbWEsJmRtYV9jaGFubmVscykgfHwgcmVxdWVzdF9kbWEoZG1hLCJuaTY1MTAiKSkKQEAgLTU0OCwxMyArNTU5LDkgQEAKIAl9CiAKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKLQlkZXYtPm9wZW4JCT0gbmk2NV9vcGVuOwotCWRldi0+c3RvcAkJPSBuaTY1X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gbmk2NV9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gbmk2NV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuaTY1X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaLzI7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbmk2NV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7CisKIAlyZXR1cm4gMDsgLyogZXZlcnl0aGluZyBpcyBPSyAqLwogfQogCkBAIC04OTcsMTcgKzkwNCwxNiBAQAogCiAJCWlmKGNzcjAgJiBDU1IwX0VSUikKIAkJewotCQkJc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7CiAJCQlpZihkZWJ1Z2xldmVsID4gMSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBnZW5lcmFsIGVycm9yOiAlMDR4LlxuIixkZXYtPm5hbWUsY3NyMCk7CiAJCQlpZihjc3IwICYgQ1NSMF9CQUJMKQotCQkJCXAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZihjc3IwICYgQ1NSMF9NSVNTKSB7CiAJCQkJaW50IGk7CiAJCQkJZm9yKGk9MDtpPFJNRE5VTTtpKyspCiAJCQkJCXByaW50aygiJTAyeCAiLHAtPnJtZGhlYWRbaV0udS5zLnN0YXR1cyk7CiAJCQkJcHJpbnRrKCJcbiIpOwotCQkJCXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQl9CiAJCQlpZihjc3IwICYgQ1NSMF9NRVJSKSB7CiAJCQkJaWYoZGVidWdsZXZlbCA+IDEpCkBAIC05MjIsOCArOTI4LDcgQEAKICBpbnQgajsKICBmb3Ioaj0wO2o8Uk1ETlVNO2orKykKICB7Ci0Jc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IGksayxudW0xLG51bTI7CisJaW50IGksIG51bTI7CiAJZm9yKGk9Uk1ETlVNLTE7aT4wO2ktLSkgewogCQkgbnVtMiA9IChwLT5ybWRudW0gKyBpKSAmIChSTUROVU0tMSk7CiAJCSBpZighKHAtPnJtZGhlYWRbbnVtMl0udS5zLnN0YXR1cyAmIFJDVl9PV04pKQpAQCAtOTMxLDYgKzkzNiw3IEBACiAJfQogCiAJaWYoaSkgeworCQlpbnQgaywgbnVtMTsKIAkJZm9yKGs9MDtrPFJNRE5VTTtrKyspIHsKIAkJCW51bTEgPSAocC0+cm1kbnVtICsgaykgJiAoUk1ETlVNLTEpOwogCQkJaWYoIShwLT5ybWRoZWFkW251bTFdLnUucy5zdGF0dXMgJiBSQ1ZfT1dOKSkKQEAgLTk0Miw3ICs5NDgsNiBAQAogCQlpZihkZWJ1Z2xldmVsID4gMCkKIAkJewogCQkJY2hhciBidWZbMjU2XSwqYnVmMTsKLQkJCWludCBrOwogCQkJYnVmMSA9IGJ1ZjsKIAkJCWZvcihrPTA7azxSTUROVU07aysrKSB7CiAJCQkJc3ByaW50ZihidWYxLCIlMDJ4ICIsKHAtPnJtZGhlYWRba10udS5zLnN0YXR1cykpOyAvKiAmIFJDVl9PV04pICk7ICovCkBAIC05OTgsMTIgKzEwMDMsMTIgQEAKICNlbmRpZgogCQkgLyogY2hlY2tpbmcgc29tZSBlcnJvcnMgKi8KIAkJCWlmKHRtZHAtPnN0YXR1czIgJiBYTUlUX1JUUlkpCi0JCQkJcC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQlpZih0bWRwLT5zdGF0dXMyICYgWE1JVF9MQ0FSKQotCQkJCXAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJaWYodG1kcC0+c3RhdHVzMiAmIChYTUlUX0JVRkYgfCBYTUlUX1VGTE8gKSkgewogCQkvKiB0aGlzIHN0b3BzIHRoZSB4bWl0dGVyICovCi0JCQkJcC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkJaWYoZGVidWdsZXZlbCA+IDApCiAJCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFhtaXQgRklGTy9CVUZGIGVycm9yXG4iLGRldi0+bmFtZSk7CiAJCQkJaWYocC0+ZmVhdHVyZXMgJiBJTklUX1JJTkdfQkVGT1JFX1NUQVJUKSB7CkBAIC0xMDE3LDEyICsxMDIyLDEyIEBACiAJCQlpZihkZWJ1Z2xldmVsID4gMikKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB4bWl0LWVycm9yOiAlMDR4ICUwMngtJTA0eFxuIixkZXYtPm5hbWUsY3NyMCwoaW50KSB0bWRzdGF0LChpbnQpIHRtZHAtPnN0YXR1czIpOwogCQkJaWYoIShjc3IwICYgQ1NSMF9CQUJMKSkgLyogZG9uJ3QgY291bnQgZXJyb3JzIHR3aWNlICovCi0JCQkJcC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCXRtZHAtPnN0YXR1czIgPSAwOwogCQl9CiAJCWVsc2UgewotCQkJcC0+c3RhdHMudHhfYnl0ZXMgLT0gKHNob3J0KSh0bWRwLT5ibGVuKTsKLQkJCXAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgLT0gKHNob3J0KSh0bWRwLT5ibGVuKTsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQl9CiAKICNpZmRlZiBYTVRfVklBX1NLQgpAQCAtMTA1OCw3ICsxMDYzLDcgQEAKIAkJCWlmKCEocm1kc3RhdCAmIFJDVl9FUlIpKSB7CiAJCQkJaWYocm1kc3RhdCAmIFJDVl9TVEFSVCkKIAkJCQl7Ci0JCQkJCXAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlY3YsIHBhY2tldCB0b28gbG9uZzogJWRcbiIsZGV2LT5uYW1lLHJtZHAtPm1sZW4gJiAweDBmZmYpOwogCQkJCX0KIAkJCX0KQEAgLTEwNjcsMTYgKzEwNzIsMTYgQEAKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVjZWl2ZS1lcnJvcjogJTA0eCwgbGFuY2Utc3RhdHVzOiAlMDR4LyUwNHhcbiIsCiAJCQkJCQkJCQlkZXYtPm5hbWUsKGludCkgcm1kc3RhdCxjc3IwLChpbnQpIGludyhQT1JUK0xfREFUQVJFRykgKTsKIAkJCQlpZihybWRzdGF0ICYgUkNWX0ZSQU0pCi0JCQkJCXAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJCWlmKHJtZHN0YXQgJiBSQ1ZfT0ZMTykKLQkJCQkJcC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJCWlmKHJtZHN0YXQgJiBSQ1ZfQ1JDKQotCQkJCQlwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJCWlmKHJtZHN0YXQgJiBSQ1ZfQlVGX0VSUikKLQkJCQkJcC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJfQogCQkJaWYoIShjc3IwICYgQ1NSMF9NSVNTKSkgLyogZG9uJ3QgY291bnQgZXJyb3JzIHR3aWNlICovCi0JCQkJcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJfQogCQllbHNlIGlmKCAobGVuID0gKHJtZHAtPm1sZW4gJiAweDBmZmYpIC0gNCkgPj0gNjApCiAJCXsKQEAgLTExMDcsMjAgKzExMTIsMjAgQEAKIAkJCQlza2JfcHV0KHNrYixsZW4pOwogCQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgKHVuc2lnbmVkIGNoYXIgKikgcC0+cmVjdmJvdW5jZVtwLT5ybWRudW1dLGxlbik7CiAjZW5kaWYKLQkJCQlwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJcC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7CiAJCQkJbmV0aWZfcngoc2tiKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBhbGxvYyBuZXcgc2tfYnVmZlxuIixkZXYtPm5hbWUpOwotCQkJCXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCX0KIAkJfQogCQllbHNlIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZlZCBydW50IHBhY2tldFxuIixkZXYtPm5hbWUpOwotCQkJcC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQl9CiAJCXJtZHAtPmJsZW4gPSAtKFJfQlVGX1NJWkUtOCk7CiAJCXJtZHAtPm1sZW4gPSAwOwpAQCAtMTIxNCwyMyArMTIxOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmk2NV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotI2lmIDAKLQlpbnQgaTsKLQlzdHJ1Y3QgcHJpdiAqcCA9IGRldi0+bWxfcHJpdjsKLQlmb3IoaT0wO2k8Uk1ETlVNO2krKykKLQl7Ci0JCXN0cnVjdCBybWQgKnJtZHAgPSBwLT5ybWRoZWFkICsgKChwLT5ybWRudW0gKyBpKSAmIChSTUROVU0tMSkpOwotCQlwcmludGsoIiUwMnggIixybWRwLT51LnMuc3RhdHVzKTsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0KLQlyZXR1cm4gJigoc3RydWN0IHByaXYgKilkZXYtPm1sX3ByaXYpLT5zdGF0czsKLX0KLQogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYoIW5pNjVfbGFuY2VfcmVpbml0KGRldikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IDBjMGI3NTIuLjUwYzExMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC0xMTE1LDYgKzExMTUsMTMwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbGlua19zdGF0dXNfbWlpKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJaW50IGVycjsKKwlpbnQgYm1zciwgYWR2ZXJ0LCBjdHJsMTAwMCwgc3RhdDEwMDAsIGxwYSwgYm1jciwgZXN0YXR1czsKKwlpbnQgc3VwcG9ydGVkLCBhZHZlcnRpc2luZywgYWN0aXZlX3NwZWVkLCBhY3RpdmVfZHVwbGV4OworCisJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNQ1IpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlibWNyID0gZXJyOworCisJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlibXNyID0gZXJyOworCisJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSk7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQlyZXR1cm4gZXJyOworCWFkdmVydCA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9MUEEpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlscGEgPSBlcnI7CisKKwlpZiAobGlrZWx5KGJtc3IgJiBCTVNSX0VTVEFURU4pKSB7CisJCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9FU1RBVFVTKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJZXN0YXR1cyA9IGVycjsKKworCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQ1RSTDEwMDApOworCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCQlyZXR1cm4gZXJyOworCQljdHJsMTAwMCA9IGVycjsKKworCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfU1RBVDEwMDApOworCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCQlyZXR1cm4gZXJyOworCQlzdGF0MTAwMCA9IGVycjsKKwl9IGVsc2UKKwkJZXN0YXR1cyA9IGN0cmwxMDAwID0gc3RhdDEwMDAgPSAwOworCisJc3VwcG9ydGVkID0gMDsKKwlpZiAoYm1zciAmIEJNU1JfQU5FR0NBUEFCTEUpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfQXV0b25lZzsKKwlpZiAoYm1zciAmIEJNU1JfMTBIQUxGKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZjsKKwlpZiAoYm1zciAmIEJNU1JfMTBGVUxMKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwYmFzZVRfRnVsbDsKKwlpZiAoYm1zciAmIEJNU1JfMTAwSEFMRikKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmOworCWlmIChibXNyICYgQk1TUl8xMDBGVUxMKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7CisJaWYgKGVzdGF0dXMgJiBFU1RBVFVTXzEwMDBfVEhBTEYpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGY7CisJaWYgKGVzdGF0dXMgJiBFU1RBVFVTXzEwMDBfVEZVTEwpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJbHAtPnN1cHBvcnRlZCA9IHN1cHBvcnRlZDsKKworCWFkdmVydGlzaW5nID0gMDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwSEFMRikKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMEZVTEwpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwSEFMRikKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwRlVMTCkKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCWlmIChjdHJsMTAwMCAmIEFEVkVSVElTRV8xMDAwSEFMRikKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZjsKKwlpZiAoY3RybDEwMDAgJiBBRFZFUlRJU0VfMTAwMEZVTEwpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisKKwlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJaW50IG5lZywgbmVnMTAwMDsKKworCQlscC0+YWN0aXZlX2F1dG9uZWcgPSAxOworCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CisKKwkJbmVnID0gYWR2ZXJ0ICYgbHBhOworCQluZWcxMDAwID0gKGN0cmwxMDAwIDw8IDIpICYgc3RhdDEwMDA7CisKKwkJaWYgKG5lZzEwMDAgJiAoTFBBXzEwMDBGVUxMIHwgTFBBXzEwMDBIQUxGKSkKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWVsc2UgaWYgKG5lZyAmIExQQV8xMDApCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDA7CisJCWVsc2UgaWYgKG5lZyAmIChMUEFfMTBIQUxGIHwgTFBBXzEwRlVMTCkpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDsKKwkJZWxzZQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfSU5WQUxJRDsKKworCQlpZiAoKG5lZzEwMDAgJiBMUEFfMTAwMEZVTEwpIHx8IChuZWcgJiBMUEFfRFVQTEVYKSkKKwkJCWFjdGl2ZV9kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWxzZSBpZiAoYWN0aXZlX3NwZWVkICE9IFNQRUVEX0lOVkFMSUQpCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCWVsc2UKKwkJCWFjdGl2ZV9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKKwl9IGVsc2UgeworCQlscC0+YWN0aXZlX2F1dG9uZWcgPSAwOworCisJCWlmICgoYm1jciAmIEJNQ1JfU1BFRUQxMDAwKSAmJiAhKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSkKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWVsc2UgaWYgKGJtY3IgJiBCTUNSX1NQRUVEMTAwKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTAwOworCQllbHNlCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDsKKworCQlpZiAoYm1jciAmIEJNQ1JfRlVMTERQTFgpCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UKKwkJCWFjdGl2ZV9kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwl9CisKKwlscC0+YWN0aXZlX2FkdmVydGlzaW5nID0gYWR2ZXJ0aXNpbmc7CisJbHAtPmFjdGl2ZV9zcGVlZCA9IGFjdGl2ZV9zcGVlZDsKKwlscC0+YWN0aXZlX2R1cGxleCA9IGFjdGl2ZV9kdXBsZXg7CisJKmxpbmtfdXBfcCA9ICEhKGJtc3IgJiBCTVNSX0xTVEFUVVMpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbGlua19zdGF0dXNfMWdfcmdtaWkoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQogewogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKQEAgLTExNzEsNiArMTI5NSwyMiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbGlua19zdGF0dXNfMWcoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQoreworCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCWVyciA9IGxpbmtfc3RhdHVzX21paShucCwgbGlua191cF9wKTsKKwlscC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9UUDsKKwlscC0+YWN0aXZlX2FkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYmNtODcwNF9yZXNldChzdHJ1Y3Qgbml1ICpucCkKIHsKIAlpbnQgZXJyLCBsaW1pdDsKQEAgLTE2NzYsMzkgKzE4MTYsODggQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JLyogWFhYIGNvbmZpZ3VyYWJsZSBYWFggKi8KLQkvKiBYWFggZm9yIG5vdyBkb24ndCBhZHZlcnRpc2UgaGFsZi1kdXBsZXggb3IgYXN5bSBwYXVzZS4uLiBYWFggKi8KLQlhZHYgPSBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVSVElTRV9QQVVTRV9DQVA7Ci0JaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKLQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7Ci0JaWYgKGJtc3IgJiBCTVNSXzEwMEZVTEwpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQllcnIgPSBtaWlfd3JpdGUobnAsIG5wLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSwgYWR2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCWlmIChscC0+YXV0b25lZykgeworCQl1MTYgY3RybDEwMDA7CiAKLQlpZiAoYm1zciAmIEJNU1JfRVNUQVRFTikgewotCQl1MTYgY3RybDEwMDAgPSAwOwotCi0JCWlmIChlc3RhdCAmIEVTVEFUVVNfMTAwMF9URlVMTCkKLQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKLQkJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9DVFJMMTAwMCwgY3RybDEwMDApOworCQlhZHYgPSBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVSVElTRV9QQVVTRV9DQVA7CisJCWlmICgoYm1zciAmIEJNU1JfMTBIQUxGKSAmJgorCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKSkKKwkJCWFkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwRlVMTCkgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkpCisJCQlhZHYgfD0gQURWRVJUSVNFXzEwRlVMTDsKKwkJaWYgKChibXNyICYgQk1TUl8xMDBIQUxGKSAmJgorCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikpCisJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CisJCWlmICgoYm1zciAmIEJNU1JfMTAwRlVMTCkgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOworCQllcnIgPSBtaWlfd3JpdGUobnAsIG5wLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSwgYWR2KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisKKwkJaWYgKGxpa2VseShibXNyICYgQk1TUl9FU1RBVEVOKSkgeworCQkJY3RybDEwMDAgPSAwOworCQkJaWYgKChlc3RhdCAmIEVTVEFUVVNfMTAwMF9USEFMRikgJiYKKwkJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikpCisJCQkJY3RybDEwMDAgfD0gQURWRVJUSVNFXzEwMDBIQUxGOworCQkJaWYgKChlc3RhdCAmIEVTVEFUVVNfMTAwMF9URlVMTCkgJiYKKwkJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkpCisJCQkJY3RybDEwMDAgfD0gQURWRVJUSVNFXzEwMDBGVUxMOworCQkJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsCisJCQkJCU1JSV9DVFJMMTAwMCwgY3RybDEwMDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKwl9IGVsc2UgeworCQkvKiAhbHAtPmF1dG9uZWcgKi8KKwkJaW50IGZ1bGxkcHg7CisKKwkJaWYgKGxwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCWJtY3IgfD0gQk1DUl9GVUxMRFBMWDsKKwkJCWZ1bGxkcHggPSAxOworCQl9IGVsc2UgaWYgKGxwLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCQlmdWxsZHB4ID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGxwLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisJCQkvKiBpZiBYLWZ1bGwgcmVxdWVzdGVkIHdoaWxlIG5vdCBzdXBwb3J0ZWQsIG9yCisJCQkgICBYLWhhbGYgcmVxdWVzdGVkIHdoaWxlIG5vdCBzdXBwb3J0ZWQuLi4gKi8KKwkJCWlmICgoZnVsbGRweCAmJiAhKGVzdGF0ICYgRVNUQVRVU18xMDAwX1RGVUxMKSkgfHwKKwkJCQkoIWZ1bGxkcHggJiYgIShlc3RhdCAmIEVTVEFUVVNfMTAwMF9USEFMRikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwMDsKKwkJfSBlbHNlIGlmIChscC0+c3BlZWQgPT0gU1BFRURfMTAwKSB7CisJCQlpZiAoKGZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMDBGVUxMKSkgfHwKKwkJCQkoIWZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMDBIQUxGKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDA7CisJCX0gZWxzZSBpZiAobHAtPnNwZWVkID09IFNQRUVEXzEwKSB7CisJCQlpZiAoKGZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMEZVTEwpKSB8fAorCQkJCSghZnVsbGRweCAmJiAhKGJtc3IgJiBCTVNSXzEwSEFMRikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KLQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwogCiAJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSLCBibWNyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisjaWYgMAogCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwlibWNyID0gZXJyOworCiAJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotI2lmIDAKKwlibXNyID0gZXJyOworCiAJcHJfaW5mbyhQRlggIlBvcnQgJXUgYWZ0ZXIgTUlJIGluaXQgYm1jclslMDR4XSBibXNyWyUwNHhdXG4iLAogCQlucC0+cG9ydCwgYm1jciwgYm1zcik7CiAjZW5kaWYKQEAgLTIwNTQsODcgKzIyNDMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbGlua19zdGF0dXNfMWcoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQotewotCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKLQl1MTYgY3VycmVudF9zcGVlZCwgYm1zcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4IGN1cnJlbnRfZHVwbGV4OwotCWludCBlcnIsIGxpbmtfdXA7Ci0KLQlsaW5rX3VwID0gMDsKLQljdXJyZW50X3NwZWVkID0gU1BFRURfSU5WQUxJRDsKLQljdXJyZW50X2R1cGxleCA9IERVUExFWF9JTlZBTElEOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmIChucC0+bGlua19jb25maWcubG9vcGJhY2tfbW9kZSAhPSBMT09QQkFDS19ESVNBQkxFRCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1TUik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OwotCi0JYm1zciA9IGVycjsKLQlpZiAoYm1zciAmIEJNU1JfTFNUQVRVUykgewotCQl1MTYgYWR2LCBscGEsIGNvbW1vbiwgZXN0YXQ7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWFkdiA9IGVycjsKLQotCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfTFBBKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQkJbHBhID0gZXJyOwotCi0JCWNvbW1vbiA9IGFkdiAmIGxwYTsKLQotCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfRVNUQVRVUyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWVzdGF0ID0gZXJyOwotCi0JCWxpbmtfdXAgPSAxOwotCQlpZiAoZXN0YXQgJiAoRVNUQVRVU18xMDAwX1RGVUxMIHwgRVNUQVRVU18xMDAwX1RIQUxGKSkgewotCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQlpZiAoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpCi0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJCWVsc2UKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9IQUxGOwotCQl9IGVsc2UgewotCQkJaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMDBCQVNFNCkgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZSBpZiAoY29tbW9uICYgQURWRVJUSVNFXzEwMEZVTEwpIHsKLQkJCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQl9IGVsc2UgaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMDBIQUxGKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9IQUxGOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTBGVUxMKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQl9IGVsc2UgaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMEhBTEYpIHsKLQkJCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTA7Ci0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZQotCQkJCWxpbmtfdXAgPSAwOwotCQl9Ci0JfQotCWxwLT5hY3RpdmVfc3BlZWQgPSBjdXJyZW50X3NwZWVkOwotCWxwLT5hY3RpdmVfZHVwbGV4ID0gY3VycmVudF9kdXBsZXg7Ci0JZXJyID0gMDsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7Ci0KLQkqbGlua191cF9wID0gbGlua191cDsKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW50IG5pdV9saW5rX3N0YXR1cyhzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCiB7CiAJY29uc3Qgc3RydWN0IG5pdV9waHlfb3BzICpvcHMgPSBucC0+cGh5X29wczsKQEAgLTIyODQsNyArMjM5Miw2IEBACiAJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOwogCXVuc2lnbmVkIGxvbmcgY3RybF9yZWcsIHRlc3RfY2ZnX3JlZywgcGxsX2NmZywgaTsKIAl1NjQgY3RybF92YWwsIHRlc3RfY2ZnX3ZhbCwgc2lnLCBtYXNrLCB2YWw7Ci0JaW50IGVycjsKIAl1NjQgcmVzZXRfdmFsOwogCiAJc3dpdGNoIChucC0+cG9ydCkgewpAQCAtMjMzNyw2ICsyNDQ0LDcgQEAKIAkvKiBJbml0aWFsaXplIGFsbCA0IGxhbmVzIG9mIHRoZSBTRVJERVMuICAqLwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJdTMyIHJ4dHhfY3RybCwgZ2x1ZTA7CisJCWludCBlcnI7CiAKIAkJZXJyID0gZXNyX3JlYWRfcnh0eF9jdHJsKG5wLCBpLCAmcnh0eF9jdHJsKTsKIAkJaWYgKGVycikKQEAgLTI0NTYsNyArMjU2NCw3IEBACiAKIAkJY2FzZSBOSVVfRkxBR1NfMTBHOgogCQkJLyogMTBHIGNvcHBlciAqLwotCQkJdHAgPSAmcGh5X3RlbXBsYXRlXzFnX2NvcHBlcjsKKwkJCXRwID0gJnBoeV90ZW1wbGF0ZV8xMGdfY29wcGVyOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBOSVVfRkxBR1NfRklCRVI6CkBAIC0yODczLDcgKzI5ODEsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAogc3RhdGljIGludCB0Y2FtX3VzZXJfaXBfY2xhc3Nfc2V0KHN0cnVjdCBuaXUgKm5wLCB1bnNpZ25lZCBsb25nIGNsYXNzLAogCQkJCSAgaW50IGlwdjYsIHU2NCBwcm90b2NvbF9pZCwKIAkJCQkgIHU2NCB0b3NfbWFzaywgdTY0IHRvc192YWwpCkBAIC0yOTAxLDcgKzMwMDgsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCB0Y2FtX2Vhcmx5X2luaXQoc3RydWN0IG5pdSAqbnApCiB7CkBAIC0zMTY4LDYgKzMyNzQsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogRW50cmllcyBmb3IgdGhlIHBvcnRzIGFyZSBpbnRlcmxlYXZlZCBpbiB0aGUgVENBTSAqLworc3RhdGljIHUxNiB0Y2FtX2dldF9pbmRleChzdHJ1Y3Qgbml1ICpucCwgdTE2IGlkeCkKK3sKKwkvKiBPbmUgZW50cnkgcmVzZXJ2ZWQgZm9yIElQIGZyYWdtZW50IHJ1bGUgKi8KKwlpZiAoaWR4ID49IChucC0+Y2xhcy50Y2FtX3N6IC0gMSkpCisJCWlkeCA9IDA7CisJcmV0dXJuIChucC0+Y2xhcy50Y2FtX3RvcCArICgoaWR4KzEpICogbnAtPnBhcmVudC0+bnVtX3BvcnRzKSk7Cit9CisKK3N0YXRpYyB1MTYgdGNhbV9nZXRfc2l6ZShzdHJ1Y3Qgbml1ICpucCkKK3sKKwkvKiBPbmUgZW50cnkgcmVzZXJ2ZWQgZm9yIElQIGZyYWdtZW50IHJ1bGUgKi8KKwlyZXR1cm4gbnAtPmNsYXMudGNhbV9zeiAtIDE7Cit9CisKK3N0YXRpYyB1MTYgdGNhbV9nZXRfdmFsaWRfZW50cnlfY250KHN0cnVjdCBuaXUgKm5wKQoreworCS8qIE9uZSBlbnRyeSByZXNlcnZlZCBmb3IgSVAgZnJhZ21lbnQgcnVsZSAqLworCXJldHVybiBucC0+Y2xhcy50Y2FtX3ZhbGlkX2VudHJpZXMgLSAxOworfQorCiBzdGF0aWMgdm9pZCBuaXVfcnhfc2tiX2FwcGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCSAgICAgIHUzMiBvZmZzZXQsIHUzMiBzaXplKQogewpAQCAtMzM5MCw2ICszNTE3LDcgQEAKIAlycC0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBucC0+ZGV2KTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnAtPnJ4X2NoYW5uZWwpOwogCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKIAlyZXR1cm4gbnVtX3JjcjsKQEAgLTM2NjksNyArMzc5Nyw3IEBACiAJd29ya19kb25lID0gbml1X3BvbGxfY29yZShucCwgbHAsIGJ1ZGdldCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQluaXVfbGRnX3JlYXJtKG5wLCBscCwgMSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC00MDg4LDEyICs0MjE2LDEyIEBACiBzdGF0aWMgdm9pZCBuaXVfc2NoZWR1bGVfbmFwaShzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IG5pdV9sZGcgKmxwLAogCQkJICAgICAgdTY0IHYwLCB1NjQgdjEsIHU2NCB2MikKIHsKLQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKSkgewogCQlscC0+djAgPSB2MDsKIAkJbHAtPnYxID0gdjE7CiAJCWxwLT52MiA9IHYyOwogCQlfX25pdV9mYXN0cGF0aF9pbnRlcnJ1cHQobnAsIGxwLT5sZGdfbnVtLCB2MCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJfQogfQogCkBAIC00ODkwLDggKzUwMTgsNyBAQAogCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CiAJaW50IGluZGV4LCBlcnI7CiAKLQkvKiBYWFggZml4IHRoaXMgYWxsb2NhdGlvbiBzY2hlbWUgWFhYICovCi0JaW5kZXggPSBjcC0+dGNhbV9pbmRleDsKKwlpbmRleCA9IGNwLT50Y2FtX3RvcDsKIAl0cCA9ICZwYXJlbnQtPnRjYW1baW5kZXhdOwogCiAJLyogTm90ZSB0aGF0IHRoZSBub3BvcnQgYml0IGlzIHRoZSBzYW1lIGluIGJvdGggaXB2NCBhbmQKQEAgLTQ5MDgsNiArNTAzNSw4IEBACiAJZXJyID0gdGNhbV9hc3NvY193cml0ZShucCwgaW5kZXgsIHRwLT5hc3NvY19kYXRhKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOworCXRwLT52YWxpZCA9IDE7CisJY3AtPnRjYW1fdmFsaWRfZW50cmllcysrOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjExLDEwICs1MzQwLDEwIEBACiAJaWYgKG5wLT5mbGFncyAmIE5JVV9GTEFHU18xMEcpIHsKIAkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfWEdNSUk7CiAJfSBlbHNlIHsKLQkJaWYgKGxwLT5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwKQotCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfTUlJOwotCQllbHNlCisJCWlmIChscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDApCiAJCQl2YWwgfD0gWE1BQ19DT05GSUdfTU9ERV9HTUlJOworCQllbHNlCisJCQl2YWwgfD0gWE1BQ19DT05GSUdfTU9ERV9NSUk7CiAJfQogCiAJbnc2NF9tYWMoWE1BQ19DT05GSUcsIHZhbCk7CkBAIC02NDQ2LDExICs2NTc1LDExIEBACiAKIAlpcHY2ID0gaWhsID0gMDsKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpcF9wcm90byA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKIAkJaWhsID0gaXBfaGRyKHNrYiktPmlobDsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCWlwX3Byb3RvID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKIAkJaWhsID0gKDQwID4+IDIpOwogCQlpcHY2ID0gMTsKQEAgLTY3MDIsMTcgKzY4MzEsMjcgQEAKIAltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCWNtZC0+cGh5X2FkZHJlc3MgPSBucC0+cGh5X2FkZHI7CiAJY21kLT5zdXBwb3J0ZWQgPSBscC0+c3VwcG9ydGVkOwotCWNtZC0+YWR2ZXJ0aXNpbmcgPSBscC0+YWR2ZXJ0aXNpbmc7Ci0JY21kLT5hdXRvbmVnID0gbHAtPmF1dG9uZWc7CisJY21kLT5hZHZlcnRpc2luZyA9IGxwLT5hY3RpdmVfYWR2ZXJ0aXNpbmc7CisJY21kLT5hdXRvbmVnID0gbHAtPmFjdGl2ZV9hdXRvbmVnOwogCWNtZC0+c3BlZWQgPSBscC0+YWN0aXZlX3NwZWVkOwogCWNtZC0+ZHVwbGV4ID0gbHAtPmFjdGl2ZV9kdXBsZXg7CisJY21kLT5wb3J0ID0gKG5wLT5mbGFncyAmIE5JVV9GTEFHU19GSUJFUikgPyBQT1JUX0ZJQlJFIDogUE9SVF9UUDsKKwljbWQtPnRyYW5zY2VpdmVyID0gKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YQ1ZSX1NFUkRFUykgPworCQlYQ1ZSX0VYVEVSTkFMIDogWENWUl9JTlRFUk5BTDsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5pdV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKKworCWxwLT5hZHZlcnRpc2luZyA9IGNtZC0+YWR2ZXJ0aXNpbmc7CisJbHAtPnNwZWVkID0gY21kLT5zcGVlZDsKKwlscC0+ZHVwbGV4ID0gY21kLT5kdXBsZXg7CisJbHAtPmF1dG9uZWcgPSBjbWQtPmF1dG9uZWc7CisJcmV0dXJuIG5pdV9pbml0X2xpbmsobnApOwogfQogCiBzdGF0aWMgdTMyIG5pdV9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTY3MjcsNiArNjg2NiwxNiBAQAogCW5wLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKK3N0YXRpYyBpbnQgbml1X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobnAtPmxpbmtfY29uZmlnLmF1dG9uZWcpCisJCXJldHVybiBuaXVfaW5pdF9saW5rKG5wKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5pdV9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTY3NzgsNiArNjkyNyw3NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBuaXVfZXRoZmxvd190b19sM3Byb3RvKGludCBmbG93X3R5cGUsIHU4ICpwaWQpCit7CisJc3dpdGNoIChmbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVENQX1Y2X0ZMT1c6CisJCSpwaWQgPSBJUFBST1RPX1RDUDsKKwkJYnJlYWs7CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFVEUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19VRFA7CisJCWJyZWFrOworCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19TQ1RQOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19BSDsKKwkJYnJlYWs7CisJY2FzZSBFU1BfVjRfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19FU1A7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpwaWQgPSAwOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2NsYXNzX3RvX2V0aGZsb3codTY0IGNsYXNzLCBpbnQgKmZsb3dfdHlwZSkKK3sKKwlzd2l0Y2ggKGNsYXNzKSB7CisJY2FzZSBDTEFTU19DT0RFX1RDUF9JUFY0OgorCQkqZmxvd190eXBlID0gVENQX1Y0X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VRFBfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFVEUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfQUhfRVNQX0lQVjQ6CisJCSpmbG93X3R5cGUgPSBBSF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfU0NUUF9JUFY0OgorCQkqZmxvd190eXBlID0gU0NUUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVENQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBUQ1BfVjZfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1VEUF9JUFY2OgorCQkqZmxvd190eXBlID0gVURQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjoKKwkJKmZsb3dfdHlwZSA9IEFIX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9TQ1RQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBTQ1RQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0cxOgorCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0cyOgorCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0czOgorCWNhc2UgQ0xBU1NfQ09ERV9VU0VSX1BST0c0OgorCQkqZmxvd190eXBlID0gSVBfVVNFUl9GTE9XOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBuaXVfZXRoZmxvd190b19jbGFzcyhpbnQgZmxvd190eXBlLCB1NjQgKmNsYXNzKQogewogCXN3aXRjaCAoZmxvd190eXBlKSB7CkBAIC02Nzg3LDcgKzcwMDUsOCBAQAogCWNhc2UgVURQX1Y0X0ZMT1c6CiAJCSpjbGFzcyA9IENMQVNTX0NPREVfVURQX0lQVjQ7CiAJCWJyZWFrOwotCWNhc2UgQUhfRVNQX1Y0X0ZMT1c6CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CiAJCSpjbGFzcyA9IENMQVNTX0NPREVfQUhfRVNQX0lQVjQ7CiAJCWJyZWFrOwogCWNhc2UgU0NUUF9WNF9GTE9XOgpAQCAtNjc5OSw3ICs3MDE4LDggQEAKIAljYXNlIFVEUF9WNl9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY2OwogCQlicmVhazsKLQljYXNlIEFIX0VTUF9WNl9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY2OwogCQlicmVhazsKIAljYXNlIFNDVFBfVjZfRkxPVzoKQEAgLTY4MTYsOCArNzAzNiw2IEBACiB7CiAJdTY0IGV0aGZsb3cgPSAwOwogCi0JaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfUE9SVCkKLQkJZXRoZmxvdyB8PSBSWEhfREVWX1BPUlQ7CiAJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfTDJEQSkKIAkJZXRoZmxvdyB8PSBSWEhfTDJEQTsKIAlpZiAoZmxvd19rZXkgJiBGTE9XX0tFWV9WTEFOKQpAQCAtNjg0MSw4ICs3MDU5LDYgQEAKIHsKIAl1NjQga2V5ID0gMDsKIAotCWlmIChldGhmbG93ICYgUlhIX0RFVl9QT1JUKQotCQlrZXkgfD0gRkxPV19LRVlfUE9SVDsKIAlpZiAoZXRoZmxvdyAmIFJYSF9MMkRBKQogCQlrZXkgfD0gRkxPV19LRVlfTDJEQTsKIAlpZiAoZXRoZmxvdyAmIFJYSF9WTEFOKQpAQCAtNjg2NCw0MSArNzA4MCwyNzkgQEAKIAogfQogCi1zdGF0aWMgaW50IG5pdV9nZXRfaGFzaF9vcHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCitzdGF0aWMgaW50IG5pdV9nZXRfaGFzaF9vcHRzKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKQogewotCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1NjQgY2xhc3M7CiAKLQljbWQtPmRhdGEgPSAwOworCW5mYy0+ZGF0YSA9IDA7CiAKLQlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKGNtZC0+Zmxvd190eXBlLCAmY2xhc3MpKQorCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MobmZjLT5mbG93X3R5cGUsICZjbGFzcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0gQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSAmCiAJICAgIFRDQU1fS0VZX0RJU0MpCi0JCWNtZC0+ZGF0YSA9IFJYSF9ESVNDQVJEOworCQluZmMtPmRhdGEgPSBSWEhfRElTQ0FSRDsKIAllbHNlCi0KLQkJY21kLT5kYXRhID0gbml1X2Zsb3drZXlfdG9fZXRoZmxvdyhucC0+cGFyZW50LT5mbG93X2tleVtjbGFzcyAtCisJCW5mYy0+ZGF0YSA9IG5pdV9mbG93a2V5X3RvX2V0aGZsb3cobnAtPnBhcmVudC0+Zmxvd19rZXlbY2xhc3MgLQogCQkJCQkJICAgICAgQ0xBU1NfQ09ERV9VU0VSX1BST0cxXSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbml1X3NldF9oYXNoX29wdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3N0YXRpYyB2b2lkIG5pdV9nZXRfaXA0ZnNfZnJvbV90Y2FtX2tleShzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwLAorCQkJCQlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCkKK3sKKworCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPSAodHAtPmtleVszXSAmIFRDQU1fVjRLRVkzX1NBRERSKSA+PgorCQlUQ0FNX1Y0S0VZM19TQUREUl9TSElGVDsKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0gKHRwLT5rZXlbM10gJiBUQ0FNX1Y0S0VZM19EQUREUikgPj4KKwkJVENBTV9WNEtFWTNfREFERFJfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9ICh0cC0+a2V5X21hc2tbM10gJiBUQ0FNX1Y0S0VZM19TQUREUikgPj4KKwkJVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9ICh0cC0+a2V5X21hc2tbM10gJiBUQ0FNX1Y0S0VZM19EQUREUikgPj4KKwkJVENBTV9WNEtFWTNfREFERFJfU0hJRlQ7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0c3JjID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyk7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9CisJCWNwdV90b19iZTMyKGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRkc3QgPQorCQljcHVfdG9fYmUzMihmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwlmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMudG9zID0gKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9UT1MpID4+CisJCVRDQU1fVjRLRVkyX1RPU19TSElGVDsKKwlmc3AtPm1fdS50Y3BfaXA0X3NwZWMudG9zID0gKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1RPUykgPj4KKwkJVENBTV9WNEtFWTJfVE9TX1NISUZUOworCisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJKCh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpID4+IDE2OworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQkoKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCSBUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVCkgJiAweGZmZmY7CisJCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCSgodHAtPmtleV9tYXNrWzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpID4+IDE2OworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQkoKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSAmIDB4ZmZmZjsKKworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucHNyYyA9CisJCQljcHVfdG9fYmUxNihmc3AtPmhfdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5wZHN0ID0KKwkJCWNwdV90b19iZTE2KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5wZHN0KTsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQljcHVfdG9fYmUxNihmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWJyZWFrOworCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQlmc3AtPmhfdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCQlmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQ7CisKKwkJZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCWNwdV90b19iZTMyKGZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSk7CisJCWZzcC0+bV91LmFoX2lwNF9zcGVjLnNwaSA9CisJCQljcHVfdG9fYmUzMihmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkpOworCQlicmVhazsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQkodHAtPmtleV9tYXNrWzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKworCQlmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQljcHVfdG9fYmUzMihmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisJCWZzcC0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzID0KKwkJCWNwdV90b19iZTMyKGZzcC0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKworCQlmc3AtPmhfdS51c3JfaXA0X3NwZWMucHJvdG8gPQorCQkJKHRwLT5rZXlbMl0gJiBUQ0FNX1Y0S0VZMl9QUk9UTykgPj4KKwkJCVRDQU1fVjRLRVkyX1BST1RPX1NISUZUOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMucHJvdG8gPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BST1RPKSA+PgorCQkJVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQ7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmlwX3ZlciA9IEVUSF9SWF9ORkNfSVA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9ldGh0b29sX3RjYW1fZW50cnkoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0gJm5mYy0+ZnM7CisJdTE2IGlkeDsKKwl1NjQgY2xhc3M7CisJaW50IHJldCA9IDA7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgKHUxNiluZmMtPmZzLmxvY2F0aW9uKTsKKworCXRwID0gJnBhcmVudC0+dGNhbVtpZHhdOworCWlmICghdHAtPnZhbGlkKSB7CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgZW50cnkgWyVkXSBpbnZhbGlkIGZvciBpZHhbJWRdXG4iLAorCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCAodTE2KW5mYy0+ZnMubG9jYXRpb24sIGlkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGZpbGwgdGhlIGZsb3cgc3BlYyBlbnRyeSAqLworCWNsYXNzID0gKHRwLT5rZXlbMF0gJiBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFKSA+PgorCQlUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFX1NISUZUOworCXJldCA9IG5pdV9jbGFzc190b19ldGhmbG93KGNsYXNzLCAmZnNwLT5mbG93X3R5cGUpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBuaXVfY2xhc3NfdG9fZXRoZmxvdyBmYWlsZWRcbiIsCisJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZnNwLT5mbG93X3R5cGUgPT0gQUhfVjRfRkxPVyB8fCBmc3AtPmZsb3dfdHlwZSA9PSBBSF9WNl9GTE9XKSB7CisJCXUzMiBwcm90byA9ICh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUFJPVE8pID4+CisJCQlUQ0FNX1Y0S0VZMl9QUk9UT19TSElGVDsKKwkJaWYgKHByb3RvID09IElQUFJPVE9fRVNQKSB7CisJCQlpZiAoZnNwLT5mbG93X3R5cGUgPT0gQUhfVjRfRkxPVykKKwkJCQlmc3AtPmZsb3dfdHlwZSA9IEVTUF9WNF9GTE9XOworCQkJZWxzZQorCQkJCWZzcC0+Zmxvd190eXBlID0gRVNQX1Y2X0ZMT1c7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGZzcC0+Zmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQluaXVfZ2V0X2lwNGZzX2Zyb21fdGNhbV9rZXkodHAsIGZzcCk7CisJCWJyZWFrOworCWNhc2UgVENQX1Y2X0ZMT1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwljYXNlIFNDVFBfVjZfRkxPVzoKKwljYXNlIEFIX1Y2X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJbml1X2dldF9pcDRmc19mcm9tX3RjYW1fa2V5KHRwLCBmc3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAodHAtPmFzc29jX2RhdGEgJiBUQ0FNX0FTU09DREFUQV9ESVNDKQorCQlmc3AtPnJpbmdfY29va2llID0gUlhfQ0xTX0ZMT1dfRElTQzsKKwllbHNlCisJCWZzcC0+cmluZ19jb29raWUgPSAodHAtPmFzc29jX2RhdGEgJiBUQ0FNX0FTU09DREFUQV9PRkZTRVQpID4+CisJCQlUQ0FNX0FTU09DREFUQV9PRkZTRVRfU0hJRlQ7CisKKwkvKiBwdXQgdGhlIHRjYW0gc2l6ZSBoZXJlICovCisJbmZjLT5kYXRhID0gdGNhbV9nZXRfc2l6ZShucCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfZ2V0X2V0aHRvb2xfdGNhbV9hbGwoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMsCisJCQkJICAgIHUzMiAqcnVsZV9sb2NzKQoreworCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OworCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CisJaW50IGksIGlkeCwgY250OworCXUxNiBuX2VudHJpZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJLyogcHV0IHRoZSB0Y2FtIHNpemUgaGVyZSAqLworCW5mYy0+ZGF0YSA9IHRjYW1fZ2V0X3NpemUobnApOworCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisJbl9lbnRyaWVzID0gbmZjLT5ydWxlX2NudDsKKwlmb3IgKGNudCA9IDAsIGkgPSAwOyBpIDwgbmZjLT5kYXRhOyBpKyspIHsKKwkJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsIGkpOworCQl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKwkJaWYgKCF0cC0+dmFsaWQpCisJCQljb250aW51ZTsKKwkJcnVsZV9sb2NzW2NudF0gPSBpOworCQljbnQrKzsKKwl9CisJbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCWlmIChuX2VudHJpZXMgIT0gY250KSB7CisJCS8qIHByaW50IHdhcm5pbmcsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfZ2V0X2V0aHRvb2xfdGNhbV9hbGwsICIKKwkJCSJuX2VudHJpZXNbJWRdICE9IGNudFslZF0hISFcblxuIiwKKwkJCW5wLT5wYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBuX2VudHJpZXMsIGNudCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9uZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCwKKwkJICAgICAgIHZvaWQgKnJ1bGVfbG9jcykKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX0dSWEZIOgorCQlyZXQgPSBuaXVfZ2V0X2hhc2hfb3B0cyhucCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCQljbWQtPmRhdGEgPSBucC0+bnVtX3J4X3JpbmdzOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6CisJCWNtZC0+cnVsZV9jbnQgPSB0Y2FtX2dldF92YWxpZF9lbnRyeV9jbnQobnApOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwkJcmV0ID0gbml1X2dldF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKKwkJcmV0ID0gbml1X2dldF9ldGh0b29sX3RjYW1fYWxsKG5wLCBjbWQsICh1MzIgKilydWxlX2xvY3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9zZXRfaGFzaF9vcHRzKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKQorewogCXU2NCBjbGFzczsKIAl1NjQgZmxvd19rZXkgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKGNtZC0+Zmxvd190eXBlLCAmY2xhc3MpKQorCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MobmZjLT5mbG93X3R5cGUsICZjbGFzcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNsYXNzIDwgQ0xBU1NfQ09ERV9VU0VSX1BST0cxIHx8CiAJICAgIGNsYXNzID4gQ0xBU1NfQ09ERV9TQ1RQX0lQVjYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNtZC0+ZGF0YSAmIFJYSF9ESVNDQVJEKSB7CisJaWYgKG5mYy0+ZGF0YSAmIFJYSF9ESVNDQVJEKSB7CiAJCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOwogCQlmbG93X2tleSA9IG5wLT5wYXJlbnQtPnRjYW1fa2V5W2NsYXNzIC0KIAkJCQkJICAgICAgIENMQVNTX0NPREVfVVNFUl9QUk9HMV07CkBAIC02OTIzLDcgKzczNzcsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFuaXVfZXRoZmxvd190b19mbG93a2V5KGNtZC0+ZGF0YSwgJmZsb3dfa2V5KSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2Zsb3drZXkobmZjLT5kYXRhLCAmZmxvd19rZXkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOwpAQCAtNjkzNCw2ICs3Mzg4LDMzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBuaXVfZ2V0X3RjYW1rZXlfZnJvbV9pcDRmcyhzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCwKKwkJCQkgICAgICAgc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cCwKKwkJCQkgICAgICAgaW50IGwyX3JkY190YWIsIHU2NCBjbGFzcykKK3sKKwl1OCBwaWQgPSAwOworCXUzMiBzaXAsIGRpcCwgc2lwbSwgZGlwbSwgc3BpLCBzcGltOworCXUxNiBzcG9ydCwgZHBvcnQsIHNwbSwgZHBtOworCisJc2lwID0gYmUzMl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyk7CisJc2lwbSA9IGJlMzJfdG9fY3B1KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWRpcCA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCWRpcG0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKworCXRwLT5rZXlbMF0gPSBjbGFzcyA8PCBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFX1NISUZUOworCXRwLT5rZXlfbWFza1swXSA9IFRDQU1fVjRLRVkwX0NMQVNTX0NPREU7CisJdHAtPmtleVsxXSA9ICh1NjQpbDJfcmRjX3RhYiA8PCBUQ0FNX1Y0S0VZMV9MMlJEQ05VTV9TSElGVDsKKwl0cC0+a2V5X21hc2tbMV0gPSBUQ0FNX1Y0S0VZMV9MMlJEQ05VTTsKKworCXRwLT5rZXlbM10gPSAodTY0KXNpcCA8PCBUQ0FNX1Y0S0VZM19TQUREUl9TSElGVDsKKwl0cC0+a2V5WzNdIHw9IGRpcDsKKworCXRwLT5rZXlfbWFza1szXSA9ICh1NjQpc2lwbSA8PCBUQ0FNX1Y0S0VZM19TQUREUl9TSElGVDsKKwl0cC0+a2V5X21hc2tbM10gfD0gZGlwbTsKKworCXRwLT5rZXlbMl0gfD0gKCh1NjQpZnNwLT5oX3UudGNwX2lwNF9zcGVjLnRvcyA8PAorCQkgICAgICAgVENBTV9WNEtFWTJfVE9TX1NISUZUKTsKKwl0cC0+a2V5X21hc2tbMl0gfD0gKCh1NjQpZnNwLT5tX3UudGNwX2lwNF9zcGVjLnRvcyA8PAorCQkJICAgIFRDQU1fVjRLRVkyX1RPU19TSElGVCk7CisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwkJc3BvcnQgPSBiZTE2X3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCXNwbSA9IGJlMTZfdG9fY3B1KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjKTsKKwkJZHBvcnQgPSBiZTE2X3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWRwbSA9IGJlMTZfdG9fY3B1KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wZHN0KTsKKworCQl0cC0+a2V5WzJdIHw9ICgoKHU2NClzcG9ydCA8PCAxNikgfCBkcG9ydCk7CisJCXRwLT5rZXlfbWFza1syXSB8PSAoKCh1NjQpc3BtIDw8IDE2KSB8IGRwbSk7CisJCW5pdV9ldGhmbG93X3RvX2wzcHJvdG8oZnNwLT5mbG93X3R5cGUsICZwaWQpOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJc3BpID0gYmUzMl90b19jcHUoZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpKTsKKwkJc3BpbSA9IGJlMzJfdG9fY3B1KGZzcC0+bV91LmFoX2lwNF9zcGVjLnNwaSk7CisKKwkJdHAtPmtleVsyXSB8PSBzcGk7CisJCXRwLT5rZXlfbWFza1syXSB8PSBzcGltOworCQluaXVfZXRoZmxvd190b19sM3Byb3RvKGZzcC0+Zmxvd190eXBlLCAmcGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCXNwaSA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKwkJc3BpbSA9IGJlMzJfdG9fY3B1KGZzcC0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKTsKKworCQl0cC0+a2V5WzJdIHw9IHNwaTsKKwkJdHAtPmtleV9tYXNrWzJdIHw9IHNwaW07CisJCXBpZCA9IGZzcC0+aF91LnVzcl9pcDRfc3BlYy5wcm90bzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdHAtPmtleVsyXSB8PSAoKHU2NClwaWQgPDwgVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQpOworCWlmIChwaWQpIHsKKwkJdHAtPmtleV9tYXNrWzJdIHw9IFRDQU1fVjRLRVkyX1BST1RPOworCX0KK30KKworc3RhdGljIGludCBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeShzdHJ1Y3Qgbml1ICpucCwKKwkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKQoreworCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OworCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3AgPSAmbmZjLT5mczsKKwlzdHJ1Y3Qgbml1X3JkY190YWJsZXMgKnJkY190YWJsZSA9ICZwYXJlbnQtPnJkY19ncm91cF9jZmdbbnAtPnBvcnRdOworCWludCBsMl9yZGNfdGFibGUgPSByZGNfdGFibGUtPmZpcnN0X3RhYmxlX251bTsKKwl1MTYgaWR4OworCXU2NCBjbGFzczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIsIHJldDsKKworCXJldCA9IDA7CisKKwlpZHggPSBuZmMtPmZzLmxvY2F0aW9uOworCWlmIChpZHggPj0gdGNhbV9nZXRfc2l6ZShucCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZzcC0+Zmxvd190eXBlID09IElQX1VTRVJfRkxPVykgeworCQlpbnQgaTsKKwkJaW50IGFkZF91c3JfY2xzID0gMDsKKwkJaW50IGlwdjYgPSAwOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYyAqdXNwZWMgPSAmZnNwLT5oX3UudXNyX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYyAqdW1hc2sgPSAmZnNwLT5tX3UudXNyX2lwNF9zcGVjOworCisJCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJCWZvciAoaSA9IDA7IGkgPCBOSVVfTDNfUFJPR19DTFM7IGkrKykgeworCQkJaWYgKHBhcmVudC0+bDNfY2xzW2ldKSB7CisJCQkJaWYgKHVzcGVjLT5wcm90byA9PSBwYXJlbnQtPmwzX2Nsc19waWRbaV0pIHsKKwkJCQkJY2xhc3MgPSBwYXJlbnQtPmwzX2Nsc1tpXTsKKwkJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldKys7CisJCQkJCWFkZF91c3JfY2xzID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBQcm9ncmFtIG5ldyB1c2VyIElQIGNsYXNzICovCisJCQkJc3dpdGNoIChpKSB7CisJCQkJY2FzZSAwOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HMjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HMzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQljbGFzcyA9IENMQVNTX0NPREVfVVNFUl9QUk9HNDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICh1c3BlYy0+aXBfdmVyID09IEVUSF9SWF9ORkNfSVA2KQorCQkJCQlpcHY2ID0gMTsKKwkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3Nfc2V0KG5wLCBjbGFzcywgaXB2NiwKKwkJCQkJCQkgICAgIHVzcGVjLT5wcm90bywKKwkJCQkJCQkgICAgIHVzcGVjLT50b3MsCisJCQkJCQkJICAgICB1bWFzay0+dG9zKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dDsKKworCQkJCXJldCA9IHRjYW1fdXNlcl9pcF9jbGFzc19lbmFibGUobnAsIGNsYXNzLCAxKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dDsKKwkJCQlwYXJlbnQtPmwzX2Nsc1tpXSA9IGNsYXNzOworCQkJCXBhcmVudC0+bDNfY2xzX3BpZFtpXSA9IHVzcGVjLT5wcm90bzsKKwkJCQlwYXJlbnQtPmwzX2Nsc19yZWZjbnRbaV0rKzsKKwkJCQlhZGRfdXNyX2NscyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFhZGRfdXNyX2NscykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJCSJDb3VsZCBub3QgZmluZC9pbnNlcnQgY2xhc3MgZm9yIHBpZCAlZFxuIiwKKwkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCB1c3BlYy0+cHJvdG8pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhmc3AtPmZsb3dfdHlwZSwgJmNsYXNzKSkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCWlkeCA9IHRjYW1fZ2V0X2luZGV4KG5wLCBpZHgpOworCXRwID0gJnBhcmVudC0+dGNhbVtpZHhdOworCisJbWVtc2V0KHRwLCAwLCBzaXplb2YoKnRwKSk7CisKKwkvKiBmaWxsIGluIHRoZSB0Y2FtIGtleSBhbmQgbWFzayAqLworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCW5pdV9nZXRfdGNhbWtleV9mcm9tX2lwNGZzKGZzcCwgdHAsIGwyX3JkY190YWJsZSwgY2xhc3MpOworCQlicmVhazsKKwljYXNlIFRDUF9WNl9GTE9XOgorCWNhc2UgVURQX1Y2X0ZMT1c6CisJY2FzZSBTQ1RQX1Y2X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCWNhc2UgRVNQX1Y2X0ZMT1c6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJImZsb3cgJWQgZm9yIElQdjYgbm90IGltcGxlbWVudGVkXG5cbiIsCisJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBmc3AtPmZsb3dfdHlwZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCWNhc2UgSVBfVVNFUl9GTE9XOgorCQlpZiAoZnNwLT5oX3UudXNyX2lwNF9zcGVjLmlwX3ZlciA9PSBFVEhfUlhfTkZDX0lQNCkgeworCQkJbml1X2dldF90Y2Fta2V5X2Zyb21faXA0ZnMoZnNwLCB0cCwgbDJfcmRjX3RhYmxlLAorCQkJCQkJICAgY2xhc3MpOworCQl9IGVsc2UgeworCQkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJInVzciBmbG93IGZvciBJUHY2IG5vdCBpbXBsZW1lbnRlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJIlVua25vd24gZmxvdyB0eXBlICVkXG5cbiIsCisJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBmc3AtPmZsb3dfdHlwZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGZpbGwgaW4gdGhlIGFzc29jIGRhdGEgKi8KKwlpZiAoZnNwLT5yaW5nX2Nvb2tpZSA9PSBSWF9DTFNfRkxPV19ESVNDKSB7CisJCXRwLT5hc3NvY19kYXRhID0gVENBTV9BU1NPQ0RBVEFfRElTQzsKKwl9IGVsc2UgeworCQlpZiAoZnNwLT5yaW5nX2Nvb2tpZSA+PSBucC0+bnVtX3J4X3JpbmdzKSB7CisJCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIEluIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCisJCQkJIkludmFsaWQgUlggcmluZyAlbGxkXG5cbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKKwkJCQkobG9uZyBsb25nKSBmc3AtPnJpbmdfY29va2llKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQl0cC0+YXNzb2NfZGF0YSA9IChUQ0FNX0FTU09DREFUQV9UUkVTX1VTRV9PRkZTRVQgfAorCQkJCSAgKGZzcC0+cmluZ19jb29raWUgPDwKKwkJCQkgICBUQ0FNX0FTU09DREFUQV9PRkZTRVRfU0hJRlQpKTsKKwl9CisKKwllcnIgPSB0Y2FtX3dyaXRlKG5wLCBpZHgsIHRwLT5rZXksIHRwLT5rZXlfbWFzayk7CisJaWYgKGVycikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJZXJyID0gdGNhbV9hc3NvY193cml0ZShucCwgaWR4LCB0cC0+YXNzb2NfZGF0YSk7CisJaWYgKGVycikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB2YWxpZGF0ZSB0aGUgZW50cnkgKi8KKwl0cC0+dmFsaWQgPSAxOworCW5wLT5jbGFzLnRjYW1fdmFsaWRfZW50cmllcysrOworb3V0OgorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9kZWxfZXRodG9vbF90Y2FtX2VudHJ5KHN0cnVjdCBuaXUgKm5wLCB1MzIgbG9jKQoreworCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OworCXN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHA7CisJdTE2IGlkeDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBjbGFzczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChsb2MgPj0gdGNhbV9nZXRfc2l6ZShucCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgbG9jKTsKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKworCS8qIGlmIHRoZSBlbnRyeSBpcyBvZiBhIHVzZXIgZGVmaW5lZCBjbGFzcywgdGhlbiB1cGRhdGUqLworCWNsYXNzID0gKHRwLT5rZXlbMF0gJiBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFKSA+PgorCQlUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFX1NISUZUOworCisJaWYgKGNsYXNzID49IENMQVNTX0NPREVfVVNFUl9QUk9HMSAmJiBjbGFzcyA8PSBDTEFTU19DT0RFX1VTRVJfUFJPRzQpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBOSVVfTDNfUFJPR19DTFM7IGkrKykgeworCQkJaWYgKHBhcmVudC0+bDNfY2xzW2ldID09IGNsYXNzKSB7CisJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldLS07CisJCQkJaWYgKCFwYXJlbnQtPmwzX2Nsc19yZWZjbnRbaV0pIHsKKwkJCQkJLyogZGlzYWJsZSBjbGFzcyAqLworCQkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3NfZW5hYmxlKG5wLAorCQkJCQkJCQkJY2xhc3MsCisJCQkJCQkJCQkwKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCWdvdG8gb3V0OworCQkJCQlwYXJlbnQtPmwzX2Nsc1tpXSA9IDA7CisJCQkJCXBhcmVudC0+bDNfY2xzX3BpZFtpXSA9IDA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IE5JVV9MM19QUk9HX0NMUykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeSwiCisJCQkJIlVzciBjbGFzcyAweCVsbHggbm90IGZvdW5kIFxuIiwKKwkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGNsYXNzKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IHRjYW1fZmx1c2gobnAsIGlkeCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBpbnZhbGlkYXRlIHRoZSBlbnRyeSAqLworCXRwLT52YWxpZCA9IDA7CisJbnAtPmNsYXMudGNhbV92YWxpZF9lbnRyaWVzLS07CitvdXQ6CisJbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbml1X3NldF9uZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3sKKwlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX1NSWEZIOgorCQlyZXQgPSBuaXVfc2V0X2hhc2hfb3B0cyhucCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMSU5TOgorCQlyZXQgPSBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeShucCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMREVMOgorCQlyZXQgPSBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeShucCwgY21kLT5mcy5sb2NhdGlvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IG5pdV94bWFjX3N0YXRfa2V5c1tdID0gewpAQCAtNzE1OCw2ICs3OTM3LDcgQEAKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCQk9IG5pdV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBuaXVfc2V0X21zZ2xldmVsLAorCS5ud2F5X3Jlc2V0CQk9IG5pdV9ud2F5X3Jlc2V0LAogCS5nZXRfZWVwcm9tX2xlbgkJPSBuaXVfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JCT0gbml1X2dldF9lZXByb20sCiAJLmdldF9zZXR0aW5ncwkJPSBuaXVfZ2V0X3NldHRpbmdzLApAQCAtNzE2Niw4ICs3OTQ2LDggQEAKIAkuZ2V0X3N0YXRzX2NvdW50CT0gbml1X2dldF9zdGF0c19jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBuaXVfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLnBoeXNfaWQJCT0gbml1X3BoeXNfaWQsCi0JLmdldF9yeGhhc2gJCT0gbml1X2dldF9oYXNoX29wdHMsCi0JLnNldF9yeGhhc2gJCT0gbml1X3NldF9oYXNoX29wdHMsCisJLmdldF9yeG5mYwkJPSBuaXVfZ2V0X25mYywKKwkuc2V0X3J4bmZjCQk9IG5pdV9zZXRfbmZjLAogfTsKIAogc3RhdGljIGludCBuaXVfbGRnX2Fzc2lnbl9sZG4oc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQsCkBAIC04MjM3LDcgKzkwMTcsOCBAQAogCW5pdWRiZyhQUk9CRSwgIm5pdV9jbGFzc2lmaWVyX3N3c3RhdGVfaW5pdDogbnVtX3RjYW0oJWQpXG4iLAogCSAgICAgICBucC0+cGFyZW50LT50Y2FtX251bV9lbnRyaWVzKTsKIAotCWNwLT50Y2FtX2luZGV4ID0gKHUxNikgbnAtPnBvcnQ7CisJY3AtPnRjYW1fdG9wID0gKHUxNikgbnAtPnBvcnQ7CisJY3AtPnRjYW1fc3ogPSBucC0+cGFyZW50LT50Y2FtX251bV9lbnRyaWVzIC8gbnAtPnBhcmVudC0+bnVtX3BvcnRzOwogCWNwLT5oMV9pbml0ID0gMHhmZmZmZmZmZjsKIAljcC0+aDJfaW5pdCA9IDB4ZmZmZjsKIApAQCAtODI1Nyw3ICs5MDM4LDkgQEAKIAkJCSAgIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKIAkJCSAgIEFEVkVSVElTRURfQXV0b25lZyk7CiAJbHAtPnNwZWVkID0gbHAtPmFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7Ci0JbHAtPmR1cGxleCA9IGxwLT5hY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJbHAtPmR1cGxleCA9IERVUExFWF9GVUxMOworCWxwLT5hY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJbHAtPmF1dG9uZWcgPSAxOwogI2lmIDAKIAlscC0+bG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX01BQzsKIAlscC0+YWN0aXZlX3NwZWVkID0gU1BFRURfMTAwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuaCBiL2RyaXZlcnMvbmV0L25pdS5oCmluZGV4IGUxYTczOTIuLjg3NTRlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5oCisrKyBiL2RyaXZlcnMvbmV0L25pdS5oCkBAIC0zMDA0LDcgKzMwMDQsOSBAQAogCXN0cnVjdCBuaXVfYWx0bWFjX3JkYwlhbHRfbWFjX21hcHBpbmdzWzE2XTsKIAlzdHJ1Y3Qgbml1X3ZsYW5fcmRjCXZsYW5fbWFwcGluZ3NbRU5FVF9WTEFOX1RCTF9OVU1fRU5UUklFU107CiAKLQl1MTYJCQl0Y2FtX2luZGV4OworCXUxNgkJCXRjYW1fdG9wOworCXUxNgkJCXRjYW1fc3o7CisJdTE2CQkJdGNhbV92YWxpZF9lbnRyaWVzOwogCXUxNgkJCW51bV9hbHRfbWFjX21hcHBpbmdzOwogCiAJdTMyCQkJaDFfaW5pdDsKQEAgLTMwNDAsNiArMzA0Miw3IEBACiB9OwogCiBzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgeworCXU4CQkJdmFsaWQ7CiAJdTY0CQkJa2V5WzRdOwogCXU2NAkJCWtleV9tYXNrWzRdOwogCXU2NAkJCWFzc29jX2RhdGE7CkBAIC0zMTA3LDEwICszMTEwLDE1IEBACiAJc3RydWN0IHBoeV9wcm9iZV9pbmZvCXBoeV9wcm9iZV9pbmZvOwogCiAJc3RydWN0IG5pdV90Y2FtX2VudHJ5CXRjYW1bTklVX1RDQU1fRU5UUklFU19NQVhdOwotCXU2NAkJCWwyX2Nsc1syXTsKLQl1NjQJCQlsM19jbHNbNF07CisKKyNkZWZpbmUJTklVX0wyX1BST0dfQ0xTCQkyCisjZGVmaW5lCU5JVV9MM19QUk9HX0NMUwkJNAorCXU2NAkJCWwyX2Nsc1tOSVVfTDJfUFJPR19DTFNdOworCXU2NAkJCWwzX2Nsc1tOSVVfTDNfUFJPR19DTFNdOwogCXU2NAkJCXRjYW1fa2V5WzEyXTsKIAl1NjQJCQlmbG93X2tleVsxMl07CisJdTE2CQkJbDNfY2xzX3JlZmNudFtOSVVfTDNfUFJPR19DTFNdOworCXU4CQkJbDNfY2xzX3BpZFtOSVVfTDNfUFJPR19DTFNdOwogfTsKIAogc3RydWN0IG5pdV9vcHMgewpAQCAtMzEzMSwxNiArMzEzOSwxOSBAQAogfTsKIAogc3RydWN0IG5pdV9saW5rX2NvbmZpZyB7CisJdTMyCQkJCXN1cHBvcnRlZDsKKwogCS8qIERlc2NyaWJlcyB3aGF0IHdlJ3JlIHRyeWluZyB0byBnZXQuICovCiAJdTMyCQkJCWFkdmVydGlzaW5nOwotCXUzMgkJCQlzdXBwb3J0ZWQ7CiAJdTE2CQkJCXNwZWVkOwogCXU4CQkJCWR1cGxleDsKIAl1OAkJCQlhdXRvbmVnOwogCiAJLyogRGVzY3JpYmVzIHdoYXQgd2UgYWN0dWFsbHkgaGF2ZS4gKi8KKwl1MzIJCQkJYWN0aXZlX2FkdmVydGlzaW5nOwogCXUxNgkJCQlhY3RpdmVfc3BlZWQ7CiAJdTgJCQkJYWN0aXZlX2R1cGxleDsKKwl1OAkJCQlhY3RpdmVfYXV0b25lZzsKICNkZWZpbmUgU1BFRURfSU5WQUxJRAkJMHhmZmZmCiAjZGVmaW5lIERVUExFWF9JTlZBTElECQkweGZmCiAjZGVmaW5lIEFVVE9ORUdfSU5WQUxJRAkJMHhmZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IGU4MDI5NGQuLjIyMWIwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTQwOSw3ICs0MDksNyBAQAogc3RydWN0IHJ4X2luZm8gewogCXNwaW5sb2NrX3QJbG9jazsKIAlpbnQJCXVwOwotCWxvbmcJCWlkbGU7CisJdW5zaWduZWQgbG9uZwlpZGxlOwogCiAJc3RydWN0IHNrX2J1ZmYJKnNrYnNbTlJfUlhfREVTQ107CiAKQEAgLTgyMiw4ICs4MjIsNyBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2LT5yeF9pbmZvLnNrYnNbaV07CiAJCWRldi0+cnhfaW5mby5za2JzW2ldID0gTlVMTDsKIAkJY2xlYXJfcnhfZGVzYyhkZXYsIGkpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCmluZGV4IGQwMzQ5ZTcuLjVlZWI1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYworKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKQEAgLTk3MCw3ICs5NzAsNyBAQAogCWlmICgqY2hhbi0+c3RhdHVzICYgUEFTX1NUQVRVU19FUlJPUikKIAkJcmVnIHw9IFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfRElOVEM7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZtYWMtPm5hcGkpOwogCiAJd3JpdGVfaW9iX3JlZyhQQVNfSU9CX0RNQV9SWENIX1JFU0VUKGNoYW4tPmNobm8pLCByZWcpOwogCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCiAJbW9kX3RpbWVyKCZ0eHJpbmctPmNsZWFuX3RpbWVyLCBqaWZmaWVzICsgKFRYX0NMRUFOX0lOVEVSVkFMKSoyKTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZtYWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm1hYy0+bmFwaSk7CiAKIAlpZiAocmVnKQogCQl3cml0ZV9pb2JfcmVnKFBBU19JT0JfRE1BX1RYQ0hfUkVTRVQoY2hhbi0+Y2hubyksIHJlZyk7CkBAIC0xNjM5LDcgKzE2MzksNyBAQAogCXBrdHMgPSBwYXNlbWlfbWFjX2NsZWFuX3J4KHJ4X3JpbmcobWFjKSwgYnVkZ2V0KTsKIAlpZiAocGt0cyA8IGJ1ZGdldCkgewogCQkvKiBhbGwgZG9uZSwgbm8gbW9yZSBwYWNrZXRzIHByZXNlbnQgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJcGFzZW1pX21hY19yZXN0YXJ0X3J4X2ludHIobWFjKTsKIAkJcGFzZW1pX21hY19yZXN0YXJ0X3R4X2ludHIobWFjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKaW5kZXggMjQwNGE4My4uOGYzODcyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKQEAgLTI1Nyw2ICsyNTcsMTggQEAKIAlsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKIAl3aXRoIENhcmQgU2VydmljZXMuCiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbDNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcCAJCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsCQk9IGVsM19pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgaW50IHRjNTc0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewpAQCAtMjg0LDE4ICsyOTYsOSBAQAogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCi0JLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsM19zdGFydF94bWl0OwotCWRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bCA9ICZlbDNfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmVsM19uZXRkZXZfb3BzOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwotCWRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLQlkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotCWRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCiAKIAlyZXR1cm4gdGM1NzRfY29uZmlnKGxpbmspOwogfSAvKiB0YzU3NF9hdHRhY2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKaW5kZXggMWUwMWI4YTYuLmNkZjY2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xNjksNiArMTY5LDE5IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVsM19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWwzX29wZW4sCisJLm5kb19zdG9wIAkJPSBlbDNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGVsM19zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDNfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gZWwzX2NvbmZpZywKKwkubmRvX2dldF9zdGF0cwkJPSBlbDNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IHRjNTg5X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHA7CkBAIC0xOTUsMTcgKzIwOCw5IEBACiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAKLSAgICAvKiBUaGUgRUwzLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWwzX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJmVsM19jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZWwzX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0gICAgZGV2LT5vcGVuID0gJmVsM19vcGVuOwotICAgIGRldi0+c3RvcCA9ICZlbDNfY2xvc2U7Ci0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCi0gICAgZGV2LT50eF90aW1lb3V0ID0gZWwzX3R4X3RpbWVvdXQ7CisgICAgZGV2LT5uZXRkZXZfb3BzID0gJmVsM19uZXRkZXZfb3BzOwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCisKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKIAogICAgIHJldHVybiB0YzU4OV9jb25maWcobGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDBhZmE3MjAuLjUwMWE4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgIi4uLzgzOTAuaCIKIApAQCAtOTEsNiArOTIsMTAgQEAKIHN0YXRpYyBpbnQgYXhuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCBheG5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBheG5ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZWlfaXJxX3dyYXBwZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGVpX3dhdGNoZG9nKHVfbG9uZyBhcmcpOwpAQCAtMTA4LDcgKzExMyw2IEBACiAKIHN0YXRpYyB2b2lkIGF4bmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCi1zdGF0aWMgdm9pZCBheGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIEFYODgxOTBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnRwKTsKIHN0YXRpYyBpbnQgYXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNiArMTM4LDE5IEBACiAJcmV0dXJuIHA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGF4bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IGF4bmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gYXhuZXRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0CQk9IGF4bmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGF4bmV0X3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIGF4bmV0X2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0xNDYsMTUgKzE2MywxNyBAQAogewogICAgIGF4bmV0X2Rldl90ICppbmZvOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisgICAgc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWw7CiAKICAgICBERUJVRygwLCAiYXhuZXRfYXR0YWNoKClcbiIpOwogCi0gICAgZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgZWlfZGV2aWNlKSArIHNpemVvZihheG5ldF9kZXZfdCksCi0JCQkiZXRoJWQiLCBheGRldl9zZXR1cCk7Ci0KKyAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGVpX2RldmljZSkgKyBzaXplb2YoYXhuZXRfZGV2X3QpKTsKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKIAorICAgIGVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKyAgICBzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7CisKICAgICBpbmZvID0gUFJJVihkZXYpOwogICAgIGluZm8tPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gZGV2OwpAQCAtMTYzLDEwICsxODIsMTAgQEAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBkZXYtPm9wZW4gPSAmYXhuZXRfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmYXhuZXRfY2xvc2U7Ci0gICAgZGV2LT5kb19pb2N0bCA9ICZheG5ldF9pb2N0bDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmYXhuZXRfbmV0ZGV2X29wczsKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOworICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCiAgICAgcmV0dXJuIGF4bmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogYXhuZXRfYXR0YWNoICovCkBAIC04NjEsNyArODgwLDcgQEAKIAogICAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbl84MzkwID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25fODM5MFtdID0gS0VSTl9JTkZPIFwKICAgICAiODM5MC5jOnYxLjEwY3ZzIDkvMjMvOTQgRG9uYWxkIEJlY2tlciAoYmVja2VyQHNjeWxkLmNvbSlcbiI7CiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTkwNSwxNCArOTI0LDEyIEBACiAvKiBJbmRleCB0byBmdW5jdGlvbnMuICovCiBzdGF0aWMgdm9pZCBlaV90eF9pbnRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWlfdHhfZXJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgYXhuZXRfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVpX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlaV9yeF9vdmVycnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBSb3V0aW5lcyBnZW5lcmljIHRvIE5TODM5MC1iYXNlZCBib2FyZHMuICovCiBzdGF0aWMgdm9pZCBOUzgzOTBfdHJpZ2dlcl9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBsZW5ndGgsCiAJCQkJCQkJCWludCBzdGFydF9wYWdlKTsKLXN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGRvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyoKQEAgLTk1NCwxNSArOTcxLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotCS8qIFRoZSBjYXJkIEkvTyBwYXJ0IG9mIHRoZSBkcml2ZXIgKGUuZy4gM2M1MDMpIGNhbiBob29rIGEgVHggdGltZW91dAotCSAgICB3cmFwcGVyIHRoYXQgZG9lcyBlLmcuIG1lZGlhIGNoZWNrICYgdGhlbiBjYWxscyBheG5ldF90eF90aW1lb3V0LiAqLwotCWlmIChkZXYtPnR4X3RpbWVvdXQgPT0gTlVMTCkKLQkJIGRldi0+dHhfdGltZW91dCA9IGF4bmV0X3R4X3RpbWVvdXQ7Ci0JaWYgKGRldi0+d2F0Y2hkb2dfdGltZW8gPD0gMCkKLQkJIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCi0KIAkvKgogCSAqCUdyYWIgdGhlIHBhZ2UgbG9jayBzbyB3ZSBvd24gdGhlIHJlZ2lzdGVyIHNldCwgdGhlbiBjYWxsCiAJICoJdGhlIGluaXQgZnVuY3Rpb24uCkBAIC0xNzAxLDMwICsxNzA5LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfbG9jayhkZXYpLCBmbGFncyk7CiB9CQogCi0vKioKLSAqIGF4ZGV2X3NldHVwIC0gaW5pdCByZXN0IG9mIDgzOTAgZGV2aWNlIHN0cnVjdAotICogQGRldjogbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIHRvIGluaXQKLSAqCi0gKiBJbml0aWFsaXplIHRoZSByZXN0IG9mIHRoZSA4MzkwIGRldmljZSBzdHJ1Y3R1cmUuICBEbyBOT1QgX19pbml0Ci0gKiB0aGlzLCBhcyBpdCBpcyB1c2VkIGJ5IDgzOTAgYmFzZWQgbW9kdWxhciBkcml2ZXJzIHRvby4KLSAqLwotCi1zdGF0aWMgdm9pZCBheGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsOwotCWlmIChlaV9kZWJ1ZyA+IDEpCi0JCXByaW50ayh2ZXJzaW9uXzgzOTApOwotICAgIAotCWVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKiluZXRkZXZfcHJpdihkZXYpOwotCXNwaW5fbG9ja19pbml0KCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLSAgICAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZheG5ldF9zdGFydF94bWl0OwotCWRldi0+Z2V0X3N0YXRzCT0gZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLQotCWV0aGVyX3NldHVwKGRldik7Ci19Ci0KIC8qIFRoaXMgcGFnZSBvZiBmdW5jdGlvbnMgc2hvdWxkIGJlIDgzOTAgZ2VuZXJpYyAqLwogLyogRm9sbG93IE5hdGlvbmFsIFNlbWkncyByZWNvbW1lbmRhdGlvbnMgZm9yIGluaXRpYWxpemluZyB0aGUgIk5JQyIuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCmluZGV4IDY5ZGNmYmIuLjgxZTY2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtMTAwLDcgKzEwMCw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgZmpuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgZmpuX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZmpuX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpmam5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBmam5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwpAQCAtMTE4LDcgKzExNyw2IEBACiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IG5vZGU7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgbG9uZyBvcGVuX3RpbWU7CiAgICAgdWludCB0eF9zdGFydGVkOjE7CiAgICAgdWludCB0eF9xdWV1ZTsKQEAgLTIyOSw2ICsyMjcsMTggQEAKICNkZWZpbmUgQkFOS18xVSAgICAgICAgICAgICAgMHgyNCAvKiBiYW5rIDEgKENPTkZJR18xKSAqLwogI2RlZmluZSBCQU5LXzJVICAgICAgICAgICAgICAweDI4IC8qIGJhbmsgMiAoQ09ORklHXzEpICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmpuX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBmam5fb3BlbiwKKwkubmRvX3N0b3AJCT0gZmpuX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBmam5fc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZmpuX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfY29uZmlnIAk9IGZqbl9jb25maWcsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBmbXZqMTh4X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGxvY2FsX2luZm9fdCAqbHA7CkBAIC0yNjAsMTcgKzI3MCw5IEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgLyogVGhlIEZNVkoxOHggc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZmam5fc3RhcnRfeG1pdDsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmZmpuX2NvbmZpZzsKLSAgICBkZXYtPmdldF9zdGF0cyA9ICZmam5fZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwotICAgIGRldi0+b3BlbiA9ICZmam5fb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmZmpuX2Nsb3NlOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IGZqbl90eF90aW1lb3V0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZmam5fbmV0ZGV2X29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgorCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKICAgICByZXR1cm4gZm12ajE4eF9jb25maWcobGluayk7CkBAIC03OTMsNyArNzk1LDcgQEAKIAlmam5fcngoZGV2KTsKICAgICB9CiAgICAgaWYgKHR4X3N0YXQgJiBGX1RNVF9SRFkpIHsKLQlscC0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+c2VudCA7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IGxwLT5zZW50IDsKICAgICAgICAgbHAtPnNlbnQgPSAwIDsKIAlpZiAobHAtPnR4X3F1ZXVlKSB7CiAJICAgIG91dGIoRE9fVFggfCBscC0+dHhfcXVldWUsIGlvYWRkciArIFRYX1NUQVJUKTsKQEAgLTg0MCw3ICs4NDIsNyBAQAogCSAgIGh0b25zKGludyhpb2FkZHIgKyA2KSksIGh0b25zKGludyhpb2FkZHIgKyA4KSksCiAJICAgaHRvbnMoaW53KGlvYWRkciArMTApKSwgaHRvbnMoaW53KGlvYWRkciArMTIpKSwKIAkgICBodG9ucyhpbncoaW9hZGRyICsxNCkpKTsKLSAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICAvKiBUb0RvOiBXZSBzaG91bGQgdHJ5IHRvIHJlc3RhcnQgdGhlIGFkYXB0b3IuLi4gKi8KICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOwogICAgIGZqbl9yZXNldChkZXYpOwpAQCAtODgwLDcgKzg4Miw3IEBACiAKIAlERUJVRyg0LCAiJXM6IFRyYW5zbWl0dGluZyBhIHBhY2tldCBvZiBsZW5ndGggJWx1LlxuIiwKIAkgICAgICBkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nKXNrYi0+bGVuKTsKLQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIERpc2FibGUgYm90aCBpbnRlcnJ1cHRzLiAqLwogCW91dHcoMHgwMDAwLCBpb2FkZHIgKyBUWF9JTlRSKTsKQEAgLTEwMDgsNyArMTAxMCw2IEBACiAKIHN0YXRpYyB2b2lkIGZqbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IGJvZ3VzY291bnQgPSAxMDsJLyogNSAtPiAxMDogYnkgYWd5IDE5OTQwOTIyICovCiAKQEAgLTEwMjcsMTEgKzEwMjgsMTEgQEAKIAl9CiAjZW5kaWYKIAlpZiAoKHN0YXR1cyAmIDB4RjApICE9IDB4MjApIHsJLyogVGhlcmUgd2FzIGFuIGVycm9yLiAqLwotCSAgICBscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX0xFTl9FUlIpIGxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX0FMR19FUlIpIGxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkgICAgaWYgKHN0YXR1cyAmIEZfQ1JDX0VSUikgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkgICAgaWYgKHN0YXR1cyAmIEZfT1ZSX0ZMTykgbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJICAgIGlmIChzdGF0dXMgJiBGX0xFTl9FUlIpIGRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCSAgICBpZiAoc3RhdHVzICYgRl9BTEdfRVJSKSBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCSAgICBpZiAoc3RhdHVzICYgRl9DUkNfRVJSKSBkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfT1ZSX0ZMTykgZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCX0gZWxzZSB7CiAJICAgIHVfc2hvcnQgcGt0X2xlbiA9IGludyhpb2FkZHIgKyBEQVRBUE9SVCk7CiAJICAgIC8qIE1hbGxvYyB1cCBuZXcgYnVmZmVyLiAqLwpAQCAtMTA0MSw3ICsxMDQyLDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVGhlIEZNVi0xOHggY2xhaW1lZCBhIHZlcnkgIgogCQkgICAgICAgImxhcmdlIHBhY2tldCwgc2l6ZSAlZC5cbiIsIGRldi0+bmFtZSwgcGt0X2xlbik7CiAJCW91dGIoRl9TS1BfUEtULCBpb2FkZHIgKyBSWF9TS0lQKTsKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlicmVhazsKIAkgICAgfQogCSAgICBza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4rMik7CkBAIC0xMDQ5LDcgKzEwNTAsNyBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgIgogCQkgICAgICAgInBhY2tldCAobGVuICVkKS5cbiIsIGRldi0+bmFtZSwgcGt0X2xlbik7CiAJCW91dGIoRl9TS1BfUEtULCBpb2FkZHIgKyBSWF9TS0lQKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWJyZWFrOwogCSAgICB9CiAKQEAgLTEwNzAsOCArMTA3MSw4IEBACiAjZW5kaWYKIAogCSAgICBuZXRpZl9yeChza2IpOwotCSAgICBscC0+c3RhdHMucnhfcGFja2V0cysrOwotCSAgICBscC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkgICAgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJICAgIGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAl9CiAJaWYgKC0tYm9ndXNjb3VudCA8PSAwKQogCSAgICBicmVhazsKQEAgLTExOTEsMTQgKzExOTIsNiBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpmam5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgcmV0dXJuICZscC0+c3RhdHM7Ci19IC8qIGZqbl9nZXRfc3RhdHMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KIC8qCiAgIFNldCB0aGUgbXVsdGljYXN0L3Byb21pc2N1b3VzIG1vZGUgZm9yIHRoaXMgYWRhcHRvci4KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggZWM3YzU4OC4uMDJlZjYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtNDM2LDYgKzQzNiwxOSBAQAogCiBzdGF0aWMgdm9pZCBubWNsYW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWFjZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBtYWNlX29wZW4sCisJLm5kb19zdG9wCQk9IG1hY2VfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG1hY2Vfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbWFjZV90eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZwkJPSBtYWNlX2NvbmZpZywKKwkubmRvX2dldF9zdGF0cwkJPSBtYWNlX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbm1jbGFuX2F0dGFjaAogCUNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nIGxvY2FsIGRhdGEKQEAgLTQ3NCwxNyArNDg3LDkgQEAKIAogICAgIGxwLT50eF9mcmVlX2ZyYW1lcz1BTTIxNTBfTUFYX1RYX0ZSQU1FUzsKIAotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJm1hY2Vfc3RhcnRfeG1pdDsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmbWFjZV9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmbWFjZV9nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZtYWNlX25ldGRldl9vcHM7CiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0gICAgZGV2LT5vcGVuID0gJm1hY2Vfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmbWFjZV9jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBtYWNlX3R4X3RpbWVvdXQ7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKIAogICAgIHJldHVybiBubWNsYW5fY29uZmlnKGxpbmspOwogfSAvKiBubWNsYW5fYXR0YWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IGE2OTk5NDAuLjJmYmY5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgIi4uLzgzOTAuaCIKIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpAQCAtMjMzLDYgKzIzNCwyMyBAQAogCXJldHVybiAocGNuZXRfZGV2X3QgKikocCArIHNpemVvZihzdHJ1Y3QgZWlfZGV2aWNlKSk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gcGNuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gcGNuZXRfY2xvc2UsCisJLm5kb19zZXRfY29uZmlnCQk9IHNldF9jb25maWcsCisJLm5kb19zdGFydF94bWl0IAk9IGVpX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAorCS5uZG9fZG9faW9jdGwgCQk9IGVpX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlaV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciAJPSBlaV9wb2xsLAorI2VuZGlmCit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIHBjbmV0X2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0yNjAsOSArMjc4LDcgQEAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBkZXYtPm9wZW4gPSAmcGNuZXRfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmcGNuZXRfY2xvc2U7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJnNldF9jb25maWc7CisgICAgZGV2LT5uZXRkZXZfb3BzID0gJnBjbmV0X25ldGRldl9vcHM7CiAKICAgICByZXR1cm4gcGNuZXRfY29uZmlnKGxpbmspOwogfSAvKiBwY25ldF9hdHRhY2ggKi8KQEAgLTY0MCwxOCArNjU2LDEyIEBACiAKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKIAotICAgIGlmIChpbmZvLT5mbGFncyAmIChJU19ETDEwMDE5fElTX0RMMTAwMjIpKSB7Ci0JZGV2LT5kb19pb2N0bCA9ICZlaV9pb2N0bDsKKyAgICBpZiAoaW5mby0+ZmxhZ3MgJiAoSVNfREwxMDAxOXxJU19ETDEwMDIyKSkKIAltaWlfcGh5X3Byb2JlKGRldik7Ci0gICAgfQogCiAgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKICAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0gICAgZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaV9wb2xsOwotI2VuZGlmCi0KICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX05PVElDRSAicGNuZXRfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CiAJbGluay0+ZGV2X25vZGUgPSBOVUxMOwpAQCAtMTE4Myw2ICsxMTkzLDEwIEBACiAgICAgcGNuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7CiAgICAgdTE2ICpkYXRhID0gKHUxNiAqKSZycS0+aWZyX2lmcnU7CiAgICAgdW5zaWduZWQgaW50IG1paV9hZGRyID0gZGV2LT5iYXNlX2FkZHIgKyBETElOS19HUElPOworCisgICAgaWYgKCEoaW5mby0+ZmxhZ3MgJiAoSVNfREwxMDAxOXxJU19ETDEwMDIyKSkpCisJcmV0dXJuIC1FSU5WQUw7CisKICAgICBzd2l0Y2ggKGNtZCkgewogICAgIGNhc2UgU0lPQ0dNSUlQSFk6CiAJZGF0YVswXSA9IGluZm8tPnBoeV9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKaW5kZXggZmNjZDUzZS4uNzc0MjMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIHNwaW5sb2NrX3QJCQlsb2NrOwogICAgIHVfc2hvcnQJCQltYW5maWQ7CiAgICAgdV9zaG9ydAkJCWNhcmRpZDsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKwogICAgIGRldl9ub2RlX3QJCQlub2RlOwogICAgIHN0cnVjdCBza19idWZmCQkqc2F2ZWRfc2tiOwogICAgIGludAkJCQlwYWNrZXRzX3dhaXRpbmc7CkBAIC0yODksNyArMjg5LDYgQEAKIHN0YXRpYyBpbnQgc21jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc21jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgc21jX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHM5a19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIHZvaWQgc21jX3NldF94Y3ZyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZl9wb3J0KTsKQEAgLTMwMSw2ICszMDAsMTkgQEAKIHN0YXRpYyBpbnQgc21jX2xpbmtfb2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzbWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gc21jX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzbWNfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gc21jX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfY29uZmlnIAk9IHM5a19jb25maWcsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2RvX2lvY3RsCQk9ICZzbWNfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgIHNtYzkxYzkyX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0zMzYsMTggKzM0OCw5IEBACiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKICAgICAvKiBUaGUgU01DOTFjOTItc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZzbWNfc3RhcnRfeG1pdDsKLSAgICBkZXYtPmdldF9zdGF0cyA9ICZzbWNfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZzOWtfY29uZmlnOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwotICAgIGRldi0+b3BlbiA9ICZzbWNfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmc21jX2Nsb3NlOwotICAgIGRldi0+ZG9faW9jdGwgPSAmc21jX2lvY3RsOworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZzbWNfbmV0ZGV2X29wczsKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmZXRodG9vbF9vcHMpOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IHNtY190eF90aW1lb3V0OwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCiAKICAgICBzbWMtPm1paV9pZi5kZXYgPSBkZXY7CiAgICAgc21jLT5taWlfaWYubWRpb19yZWFkID0gbWRpb19yZWFkOwpAQCAtMTI5MSw3ICsxMjk0LDcgQEAKIAlyZXR1cm47CiAgICAgfQogCi0gICAgc21jLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKyAgICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogICAgIC8qIFRoZSBjYXJkIHNob3VsZCB1c2UgdGhlIGp1c3QtYWxsb2NhdGVkIGJ1ZmZlci4gKi8KICAgICBvdXR3KHBhY2tldF9ubywgaW9hZGRyICsgUE5SX0FSUik7CiAgICAgLyogcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFja2V0ICovCkBAIC0xMzQwLDcgKzEzNDMsNyBAQAogICAgIHByaW50ayhLRVJOX05PVElDRSAiJXM6IFNNQzkxYzkyIHRyYW5zbWl0IHRpbWVkIG91dCwgIgogCSAgICJUeF9zdGF0dXMgJTIuMnggc3RhdHVzICU0LjR4LlxuIiwKIAkgICBkZXYtPm5hbWUsIGludyhpb2FkZHIpJjB4ZmYsIGludyhpb2FkZHIgKyAyKSk7Ci0gICAgc21jLT5zdGF0cy50eF9lcnJvcnMrKzsKKyAgICBkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogICAgIHNtY19yZXNldChkZXYpOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogICAgIHNtYy0+c2F2ZWRfc2tiID0gTlVMTDsKQEAgLTEzNjIsNyArMTM2NSw3IEBACiAKICAgICBpZiAoc21jLT5zYXZlZF9za2IpIHsKIAkvKiBUSElTIFNIT1VMRCBORVZFUiBIQVBQRU4uICovCi0Jc21jLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludGVybmFsIGVycm9yIC0tIHNlbnQgcGFja2V0IHdoaWxlIGJ1c3kuXG4iLAogCSAgICAgICBkZXYtPm5hbWUpOwogCXJldHVybiAxOwpAQCAtMTM3NSw3ICsxMzc4LDcgQEAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBGYXIgdG9vIGJpZyBwYWNrZXQgZXJyb3IuXG4iLCBkZXYtPm5hbWUpOwogCWRldl9rZnJlZV9za2IgKHNrYik7CiAJc21jLT5zYXZlZF9za2IgPSBOVUxMOwotCXNtYy0+c3RhdHMudHhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCXJldHVybiAwOwkJLyogRG8gbm90IHJlLXF1ZXVlIHRoaXMgcGFja2V0LiAqLwogICAgIH0KICAgICAvKiBBIHBhY2tldCBpcyBub3cgd2FpdGluZy4gKi8KQEAgLTE0MzMsMTEgKzE0MzYsMTEgQEAKIAogICAgIHR4X3N0YXR1cyA9IGludyhpb2FkZHIgKyBEQVRBXzEpOwogCi0gICAgc21jLT5zdGF0cy50eF9lcnJvcnMrKzsKLSAgICBpZiAodHhfc3RhdHVzICYgVFNfTE9TVENBUikgc21jLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwotICAgIGlmICh0eF9zdGF0dXMgJiBUU19MQVRDT0wpICBzbWMtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKyAgICBkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworICAgIGlmICh0eF9zdGF0dXMgJiBUU19MT1NUQ0FSKSBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisgICAgaWYgKHR4X3N0YXR1cyAmIFRTX0xBVENPTCkgIGRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogICAgIGlmICh0eF9zdGF0dXMgJiBUU18xNkNPTCkgewotCXNtYy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJc21jLT50eF9lcnIrKzsKICAgICB9CiAKQEAgLTE0NzQsMTAgKzE0NzcsMTAgQEAKICAgICAvKiBDb3VsZCBiZSBhIGNvdW50ZXIgcm9sbC1vdmVyIHdhcm5pbmc6IHVwZGF0ZSBzdGF0cy4gKi8KICAgICBjYXJkX3N0YXRzID0gaW53KGlvYWRkciArIENPVU5URVIpOwogICAgIC8qIHNpbmdsZSBjb2xsaXNpb25zICovCi0gICAgc21jLT5zdGF0cy5jb2xsaXNpb25zICs9IGNhcmRfc3RhdHMgJiAweEY7CisgICAgZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IGNhcmRfc3RhdHMgJiAweEY7CiAgICAgY2FyZF9zdGF0cyA+Pj0gNDsKICAgICAvKiBtdWx0aXBsZSBjb2xsaXNpb25zICovCi0gICAgc21jLT5zdGF0cy5jb2xsaXNpb25zICs9IGNhcmRfc3RhdHMgJiAweEY7CisgICAgZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IGNhcmRfc3RhdHMgJiAweEY7CiAjaWYgMCAJCS8qIFRoZXNlIGFyZSBmb3Igd2hlbiBsaW51eCBzdXBwb3J0cyB0aGVzZSBzdGF0aXN0aWNzICovCiAgICAgY2FyZF9zdGF0cyA+Pj0gNDsJCQkvKiBkZWZlcnJlZCAqLwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CQkJLyogZXhjZXNzIGRlZmVycmVkICovCkBAIC0xNTUxLDcgKzE1NTQsNyBAQAogCWlmIChzdGF0dXMgJiBJTV9UWF9FTVBUWV9JTlQpIHsKIAkgICAgb3V0dyhJTV9UWF9FTVBUWV9JTlQsIGlvYWRkciArIElOVEVSUlVQVCk7CiAJICAgIG1hc2sgJj0gfklNX1RYX0VNUFRZX0lOVDsKLQkgICAgc21jLT5zdGF0cy50eF9wYWNrZXRzICs9IHNtYy0+cGFja2V0c193YWl0aW5nOworCSAgICBkZXYtPnN0YXRzLnR4X3BhY2tldHMgKz0gc21jLT5wYWNrZXRzX3dhaXRpbmc7CiAJICAgIHNtYy0+cGFja2V0c193YWl0aW5nID0gMDsKIAl9CiAJaWYgKHN0YXR1cyAmIElNX0FMTE9DX0lOVCkgewpAQCAtMTU2Nyw4ICsxNTcwLDggQEAKIAkgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KIAlpZiAoc3RhdHVzICYgSU1fUlhfT1ZSTl9JTlQpIHsKLQkgICAgc21jLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkgICAgc21jLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJICAgIGlmIChzbWMtPmR1cGxleCkKIAkJc21jLT5yeF9vdnJuID0gMTsgLyogbmVlZCBNQ19SRVNFVCBvdXRzaWRlIHNtY19pbnRlcnJ1cHQgKi8KIAkgICAgb3V0dyhJTV9SWF9PVlJOX0lOVCwgaW9hZGRyICsgSU5URVJSVVBUKTsKQEAgLTE2MTgsNyArMTYyMSw2IEBACiAKIHN0YXRpYyB2b2lkIHNtY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IHJ4X3N0YXR1czsKICAgICBpbnQgcGFja2V0X2xlbmd0aDsJLyogQ2F1dGlvbjogbm90IGZyYW1lIGxlbmd0aCwgcmF0aGVyIHdvcmRzCkBAIC0xNjQ5LDcgKzE2NTEsNyBAQAogCQogCWlmIChza2IgPT0gTlVMTCkgewogCSAgICBERUJVRygxLCAiJXM6IExvdyBtZW1vcnksIHBhY2tldCBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lKTsKLQkgICAgc21jLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJICAgIGRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCSAgICBvdXR3KE1DX1JFTEVBU0UsIGlvYWRkciArIE1NVV9DTUQpOwogCSAgICByZXR1cm47CiAJfQpAQCAtMTY2MiwxOCArMTY2NCwxOCBAQAogCQogCW5ldGlmX3J4KHNrYik7CiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQlzbWMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlzbWMtPnN0YXRzLnJ4X2J5dGVzICs9IHBhY2tldF9sZW5ndGg7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwYWNrZXRfbGVuZ3RoOwogCWlmIChyeF9zdGF0dXMgJiBSU19NVUxUSUNBU1QpCi0JICAgIHNtYy0+c3RhdHMubXVsdGljYXN0Kys7CisJICAgIGRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAgICAgfSBlbHNlIHsKIAkvKiBlcnJvciAuLi4gKi8KLQlzbWMtPnN0YXRzLnJ4X2Vycm9ycysrOworCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCi0JaWYgKHJ4X3N0YXR1cyAmIFJTX0FMR05FUlIpICBzbWMtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCWlmIChyeF9zdGF0dXMgJiBSU19BTEdORVJSKSAgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAlpZiAocnhfc3RhdHVzICYgKFJTX1RPT1NIT1JUIHwgUlNfVE9PTE9ORykpCi0JICAgIHNtYy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCWlmIChyeF9zdGF0dXMgJiBSU19CQURDUkMpCXNtYy0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwlpZiAocnhfc3RhdHVzICYgUlNfQkFEQ1JDKQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICAgICB9CiAgICAgLyogTGV0IHRoZSBNTVUgZnJlZSB0aGUgbWVtb3J5IG9mIHRoaXMgcGFja2V0LiAqLwogICAgIG91dHcoTUNfUkVMRUFTRSwgaW9hZGRyICsgTU1VX0NNRCk7CkBAIC0xNjgxLDE1ICsxNjgzLDYgQEAKICAgICByZXR1cm47CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNtY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgLyogTm90aGluZyB0byB1cGRhdGUgLSB0aGUgOTFjOTIgaXMgYSBwcmV0dHkgcHJpbWF0aXZlIGNoaXAuICovCi0gICAgcmV0dXJuICZzbWMtPnN0YXRzOwotfQotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIENhbGN1bGF0ZSB2YWx1ZXMgZm9yIHRoZSBoYXJkd2FyZSBtdWx0aWNhc3QgZmlsdGVyIGhhc2ggdGFibGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwppbmRleCBmZWY3ZTE4Li5hMzY4NWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3Qgbm9kZTsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwogICAgIGludCBjYXJkX3R5cGU7CiAgICAgaW50IHByb2JlX3BvcnQ7CiAgICAgaW50IHNpbGljb247IC8qIHNpbGljb24gcmV2aXNpb24uIDA9b2xkIENFMiwgMT1TY2lwcGVyLCA0PU1vaGF3ayAqLwpAQCAtMzU1LDcgKzM1NSw2IEBACiBzdGF0aWMgaW50IGRvX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB4aXJjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB4aXJjMnBzX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfYWRkcmVzc2VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzZXRfY2FyZF90eXBlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBjb25zdCB2b2lkICpzKTsKQEAgLTU0Niw2ICs1NDUsMTkgQEAKIAogLyo9PT09PT09PT09PT09IE1haW4gYnVsayBvZiBmdW5jdGlvbnMJPT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZG9fb3BlbiwKKwkubmRvX3N0b3AJCT0gZG9fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZG9fc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0geGlyY190eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZwkJPSBkb19jb25maWcsCisJLm5kb19kb19pb2N0bAkJPSBkb19pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqKioqKioqKioqKioqKioKICAqIHhpcmMycHNfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKICAqIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZApAQCAtNTgxLDE5ICs1OTMsMTAgQEAKICAgICBsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKICAgICAvKiBGaWxsIGluIGNhcmQgc3BlY2lmaWMgZW50cmllcyAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmRvX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJmRvX2NvbmZpZzsKLSAgICBkZXYtPmdldF9zdGF0cyA9ICZkb19nZXRfc3RhdHM7Ci0gICAgZGV2LT5kb19pb2N0bCA9ICZkb19pb2N0bDsKLSAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0gICAgZGV2LT5vcGVuID0gJmRvX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmRvX3N0b3A7Ci0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCi0gICAgZGV2LT50eF90aW1lb3V0ID0geGlyY190eF90aW1lb3V0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOworICAgIGRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogICAgIElOSVRfV09SSygmbG9jYWwtPnR4X3RpbWVvdXRfdGFzaywgeGlyYzJwc190eF90aW1lb3V0X3Rhc2spOwotI2VuZGlmCiAKICAgICByZXR1cm4geGlyYzJwc19jb25maWcobGluayk7CiB9IC8qIHhpcmMycHNfYXR0YWNoICovCkBAIC0xMTcyLDcgKzExNzUsNyBAQAogCWlmIChieXRlc19yY3ZkID4gbWF4cnhfYnl0ZXMgJiYgKHJzciAmIFBrdFJ4T2spKSB7CiAJICAgIC8qIHRvbyBtYW55IGJ5dGVzIHJlY2VpdmVkIGR1cmluZyB0aGlzIGludCwgZHJvcCB0aGUgcmVzdCBvZiB0aGUKIAkgICAgICogcGFja2V0cyAqLwotCSAgICBscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkgICAgREVCVUcoMiwgIiVzOiBSWCBkcm9wLCB0b28gbXVjaCBkb25lXG4iLCBkZXYtPm5hbWUpOwogCX0gZWxzZSBpZiAocnNyICYgUGt0UnhPaykgewogCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTE4Niw3ICsxMTg5LDcgQEAKIAkgICAgaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtOT1RfWElSQyAibG93IG1lbW9yeSwgcGFja2V0IGRyb3BwZWQgKHNpemU9JXUpXG4iLAogCQkgICAgICAgcGt0bGVuKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJICAgIH0gZWxzZSB7IC8qIG9rYXkgZ2V0IHRoZSBwYWNrZXQgKi8KIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAkJaWYgKGxwLT5zaWxpY29uID09IDAgKSB7IC8qIHdvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVnICovCkBAIC0xMjQyLDI0ICsxMjQ1LDI0IEBACiAJCX0KIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJbmV0aWZfcngoc2tiKTsKLQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdGxlbjsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0bGVuOwogCQlpZiAoIShyc3IgJiBQaHlQa3QpKQotCQkgICAgbHAtPnN0YXRzLm11bHRpY2FzdCsrOworCQkgICAgZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkgICAgfQogCX0gZWxzZSB7IC8qIGJhZCBwYWNrZXQgKi8KIAkgICAgREVCVUcoNSwgInJzcj0lIzAyeFxuIiwgcnNyKTsKIAl9CiAJaWYgKHJzciAmIFBrdFRvb0xvbmcpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCSAgICBERUJVRygzLCAiJXM6IFBhY2tldCB0b28gbG9uZ1xuIiwgZGV2LT5uYW1lKTsKIAl9CiAJaWYgKHJzciAmIENSQ0VycikgewotCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkgICAgREVCVUcoMywgIiVzOiBDUkMgZXJyb3JcbiIsIGRldi0+bmFtZSk7CiAJfQogCWlmIChyc3IgJiBBbGlnbkVycikgewotCSAgICBscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsgLyogb2theSA/ICovCisJICAgIGRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsgLyogb2theSA/ICovCiAJICAgIERFQlVHKDMsICIlczogQWxpZ25tZW50IGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCX0KIApAQCAtMTI3MCw3ICsxMjczLDcgQEAKIAlldGhfc3RhdHVzID0gR2V0Qnl0ZShYSVJDUkVHX0VTUik7CiAgICAgfQogICAgIGlmIChyeF9zdGF0dXMgJiAweDEwKSB7IC8qIFJlY2VpdmUgb3ZlcnJ1biAqLwotCWxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAlQdXRCeXRlKFhJUkNSRUdfQ1IsIENsZWFyUnhPdnJ1bik7CiAJREVCVUcoMywgInJlY2VpdmUgb3ZlcnJ1biBjbGVhcmVkXG4iKTsKICAgICB9CkBAIC0xMjgzLDExICsxMjg2LDExIEBACiAJbm4gPSBHZXRCeXRlKFhJUkNSRUcwX1BUUik7CiAJbHAtPmxhc3RfcHRyX3ZhbHVlID0gbm47CiAJaWYgKG5uIDwgbikgLyogcm9sbG92ZXIgKi8KLQkgICAgbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gMjU2IC0gbjsKKwkgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IDI1NiAtIG47CiAJZWxzZSBpZiAobiA9PSBubikgeyAvKiBoYXBwZW5zIHNvbWV0aW1lcyAtIGRvbid0IGtub3cgd2h5ICovCiAJICAgIERFQlVHKDAsICJQVFIgbm90IGNoYW5nZWQ/XG4iKTsKIAl9IGVsc2UKLQkgICAgbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gbHAtPmxhc3RfcHRyX3ZhbHVlIC0gbjsKKwkgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IGxwLT5sYXN0X3B0cl92YWx1ZSAtIG47CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogICAgIH0KICAgICBpZiAodHhfc3RhdHVzICYgMHgwMDAyKSB7CS8qIEV4ZWNlc3NpdmUgY29sbGlzc2lvbnMgKi8KQEAgLTEyOTUsNyArMTI5OCw3IEBACiAJUHV0Qnl0ZShYSVJDUkVHX0NSLCBSZXN0YXJ0VHgpOyAgLyogcmVzdGFydCB0cmFuc21pdHRlciBwcm9jZXNzICovCiAgICAgfQogICAgIGlmICh0eF9zdGF0dXMgJiAweDAwNDApCi0JbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCiAgICAgLyogcmVjYWxjdWxhdGUgb3VyIHdvcmsgY2h1bmsgc28gdGhhdCB3ZSBsaW1pdCB0aGUgZHVyYXRpb24gb2YgdGhpcwogICAgICAqIElTUiB0byBhYm91dCAxLzEwIG9mIGEgc2Vjb25kLgpAQCAtMTM1Myw3ICsxMzU2LDcgQEAKIHhpcmNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKyAgICBkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogICAgIHByaW50ayhLRVJOX05PVElDRSAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dFxuIiwgZGV2LT5uYW1lKTsKICAgICBzY2hlZHVsZV93b3JrKCZscC0+dHhfdGltZW91dF90YXNrKTsKIH0KQEAgLTE0MDksMjAgKzE0MTIsMTEgQEAKIAogICAgIGRldl9rZnJlZV9za2IgKHNrYik7CiAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0gICAgbHAtPnN0YXRzLnR4X2J5dGVzICs9IHBrdGxlbjsKKyAgICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHBrdGxlbjsKICAgICBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotZG9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLSAgICAvKglscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IEdldEJ5dGUoPykgKi8KLSAgICByZXR1cm4gJmxwLT5zdGF0czsKLX0KLQogLyoqKioqKioqKioqKioqKioKICAqIFNldCBhbGwgYWRkcmVzc2VzOiBUaGlzIGZpcnN0IG9uZSBpcyB0aGUgaW5kaXZpZHVhbCBhZGRyZXNzLAogICogdGhlIG5leHQgOSBhZGRyZXNzZXMgYXJlIHRha2VuIGZyb20gdGhlIG11bHRpY2FzdCBsaXN0IGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDY2NWE0MjguLjgwMTI0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTEzOTcsNyArMTM5Nyw3IEBACiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJLyogY2xlYXIgaW50ZXJydXB0IG1hc2tzICovCiAJCXZhbCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMyk7CkBAIC0yNTkyLDE0ICsyNTkyLDE0IEBACiAJCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMCk7CiAJCQkvKiB1bmxpa2UgZm9yIHRoZSBsYW5jZSwgdGhlcmUgaXMgbm8gcmVzdGFydCBuZWVkZWQgKi8KIAkJfQotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgewogCQkJdTE2IHZhbDsKIAkJCS8qIHNldCBpbnRlcnJ1cHQgbWFza3MgKi8KIAkJCXZhbCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMyk7CiAJCQl2YWwgfD0gMHg1ZjAwOwogCQkJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMywgdmFsKTsKIAkJCW1taW93YigpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJCQlicmVhazsKIAkJfQogCQljc3IwID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwppbmRleCBhZjI4ZmY3Li4zMzk4NGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCkBAIC0yMDIsMTYgKzIwMiwyMSBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOwogCXN0cnVjdCBtZGlvX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IHJldDsKIAogCXBkYXRhID0ga3phbGxvYyhzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwZGF0YS0+bWRjID0gb2ZfZ2V0X2dwaW8ob2ZkZXYtPm5vZGUsIDApOwotCXBkYXRhLT5tZGlvID0gb2ZfZ2V0X2dwaW8ob2ZkZXYtPm5vZGUsIDEpOwotCi0JaWYgKHBkYXRhLT5tZGMgPCAwIHx8IHBkYXRhLT5tZGlvIDwgMCkKKwlyZXQgPSBvZl9nZXRfZ3BpbyhvZmRldi0+bm9kZSwgMCk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CisJcGRhdGEtPm1kYyA9IHJldDsKKworCXJldCA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAxKTsKKwlpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG91dF9mcmVlOworCXBkYXRhLT5tZGlvID0gcmV0OwogCiAJd2hpbGUgKChucCA9IG9mX2dldF9uZXh0X2NoaWxkKG9mZGV2LT5ub2RlLCBucCkpKQogCQlpZiAoIXN0cmNtcChucC0+dHlwZSwgImV0aGVybmV0LXBoeSIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCA4MTFhNjM3NjkuLmI3NTQwMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTk4LDcgKzk5LDcgQEAKIAlidXMtPmRldi5wYXJlbnQgPSBidXMtPnBhcmVudDsKIAlidXMtPmRldi5jbGFzcyA9ICZtZGlvX2J1c19jbGFzczsKIAlidXMtPmRldi5ncm91cHMgPSBOVUxMOwotCWRldl9zZXRfbmFtZSgmYnVzLT5kZXYsIGJ1cy0+aWQpOworCWRldl9zZXRfbmFtZSgmYnVzLT5kZXYsICIlcyIsIGJ1cy0+aWQpOwogCiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZidXMtPmRldik7CiAJaWYgKGVycikgewpAQCAtMjg2LDMzICsyODcsNTggQEAKIAkJKHBoeWRldi0+cGh5X2lkICYgcGh5ZHJ2LT5waHlfaWRfbWFzaykpOwogfQogCitzdGF0aWMgYm9vbCBtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gcGh5ZGV2LT5kZXYuZHJpdmVyOworCXN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYgPSB0b19waHlfZHJpdmVyKGRydik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi0+YXR0YWNoZWRfZGV2OworCisJaWYgKCFkcnYgfHwgIXBoeWRydi0+c3VzcGVuZCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogUEhZIG5vdCBhdHRhY2hlZD8gTWF5IHN1c3BlbmQuICovCisJaWYgKCFuZXRkZXYpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBEb24ndCBzdXNwZW5kIFBIWSBpZiB0aGUgYXR0Y2hlZCBuZXRkZXYgcGFyZW50IG1heSB3YWtldXAuCisJICogVGhlIHBhcmVudCBtYXkgcG9pbnQgdG8gYSBQQ0kgZGV2aWNlLCBhcyBpbiB0ZzMgZHJpdmVyLgorCSAqLworCWlmIChuZXRkZXYtPmRldi5wYXJlbnQgJiYgZGV2aWNlX21heV93YWtldXAobmV0ZGV2LT5kZXYucGFyZW50KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBBbHNvIGRvbid0IHN1c3BlbmQgUEhZIGlmIHRoZSBuZXRkZXYgaXRzZWxmIG1heSB3YWtldXAuIFRoaXMKKwkgKiBpcyB0aGUgY2FzZSBmb3IgZGV2aWNlcyB3L28gdW5kZXJsYXlpbmcgcHdyLiBtZ210LiBhd2FyZSBidXMsCisJICogZS5nLiBTb0MgZGV2aWNlcy4KKwkgKi8KKwlpZiAoZGV2aWNlX21heV93YWtldXAoJm5ldGRldi0+ZGV2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIC8qIFN1c3BlbmQgYW5kIHJlc3VtZS4gIENvcGllZCBmcm9tIHBsYXRmb3JtX3N1c3BlbmQgYW5kCiAgKiBwbGF0Zm9ybV9yZXN1bWUKICAqLwogc3RhdGljIGludCBtZGlvX2J1c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZHJ2KTsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKIAotCWlmIChkcnYgJiYgcGh5ZHJ2LT5zdXNwZW5kICYmICFkZXZpY2VfbWF5X3dha2V1cChwaHlkZXYtPmRldi5wYXJlbnQpKQotCQlyZXQgPSBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKLQotCXJldHVybiByZXQ7CisJaWYgKCFtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQocGh5ZGV2KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBoeWRydi0+c3VzcGVuZChwaHlkZXYpOwogfQogCiBzdGF0aWMgaW50IG1kaW9fYnVzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQogewotCWludCByZXQgPSAwOwotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkcnYpOworCXN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYgPSB0b19waHlfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpOwogCi0JaWYgKGRydiAmJiBwaHlkcnYtPnJlc3VtZSAmJiAhZGV2aWNlX21heV93YWtldXAocGh5ZGV2LT5kZXYucGFyZW50KSkKLQkJcmV0ID0gcGh5ZHJ2LT5yZXN1bWUocGh5ZGV2KTsKLQotCXJldHVybiByZXQ7CisJaWYgKCFtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQocGh5ZGV2KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBoeWRydi0+cmVzdW1lKHBoeWRldik7CiB9CiAKIHN0cnVjdCBidXNfdHlwZSBtZGlvX2J1c190eXBlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IGU0ZWRlNjAuLjU4YjczYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTQxNCw3ICs0MTQsNiBAQAogCiBzdGF0aWMgdm9pZCBwaHlfY2hhbmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBwaHlfc3RhdGVfbWFjaGluZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgcGh5X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIC8qKgogICogcGh5X3N0YXJ0X21hY2hpbmUgLSBzdGFydCBQSFkgc3RhdGUgbWFjaGluZSB0cmFja2luZwpAQCAtNDM0LDExICs0MzMsOCBAQAogewogCXBoeWRldi0+YWRqdXN0X3N0YXRlID0gaGFuZGxlcjsKIAotCUlOSVRfV09SSygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgcGh5X3N0YXRlX21hY2hpbmUpOwotCWluaXRfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyKTsKLQlwaHlkZXYtPnBoeV90aW1lci5mdW5jdGlvbiA9ICZwaHlfdGltZXI7Ci0JcGh5ZGV2LT5waHlfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaHlkZXY7Ci0JbW9kX3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lciwgamlmZmllcyArIEhaKTsKKwlJTklUX0RFTEFZRURfV09SSygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgcGh5X3N0YXRlX21hY2hpbmUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgamlmZmllcyArIEhaKTsKIH0KIAogLyoqCkBAIC00NTEsOCArNDQ3LDcgQEAKICAqLwogdm9pZCBwaHlfc3RvcF9tYWNoaW5lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7Ci0JZGVsX3RpbWVyX3N5bmMoJnBoeWRldi0+cGh5X3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBoeWRldi0+c3RhdGVfcXVldWUpOwogCiAJbXV0ZXhfbG9jaygmcGh5ZGV2LT5sb2NrKTsKIAlpZiAocGh5ZGV2LT5zdGF0ZSA+IFBIWV9VUCkKQEAgLTY4MCwxMSArNjc1LDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGlycV9lbmFibGVfZXJyOwogCi0JLyogU3RvcCB0aW1lciBhbmQgcnVuIHRoZSBzdGF0ZSBxdWV1ZSBub3cuICBUaGUgd29yayBmdW5jdGlvbiBmb3IKLQkgKiBzdGF0ZV9xdWV1ZSB3aWxsIHN0YXJ0IHRoZSB0aW1lciB1cCBhZ2Fpbi4KLQkgKi8KLQlkZWxfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyKTsKLQlzY2hlZHVsZV93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwkvKiByZXNjaGVkdWxlIHN0YXRlIHF1ZXVlIHdvcmsgdG8gcnVuIGFzIHNvb24gYXMgcG9zc2libGUgKi8KKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBoeWRldi0+c3RhdGVfcXVldWUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSwgMCk7CiAKIAlyZXR1cm47CiAKQEAgLTc2MSwxNCArNzU0LDEzIEBACiAvKioKICAqIHBoeV9zdGF0ZV9tYWNoaW5lIC0gSGFuZGxlIHRoZSBzdGF0ZSBtYWNoaW5lCiAgKiBAd29yazogd29ya19zdHJ1Y3QgdGhhdCBkZXNjcmliZXMgdGhlIHdvcmsgdG8gYmUgZG9uZQotICoKLSAqIERlc2NyaXB0aW9uOiBTY2hlZHVsZWQgYnkgdGhlIHN0YXRlX3F1ZXVlIHdvcmtxdWV1ZSBlYWNoIHRpbWUKLSAqICAgcGh5X3RpbWVyIGlzIHRyaWdnZXJlZC4KICAqLwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0KLQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGh5X2RldmljZSwgc3RhdGVfcXVldWUpOworCQkJY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgcGh5X2RldmljZSwgc3RhdGVfcXVldWUpOwogCWludCBuZWVkc19hbmVnID0gMDsKIAlpbnQgZXJyID0gMDsKIApAQCAtOTQ2LDE3ICs5MzgsNiBAQAogCWlmIChlcnIgPCAwKQogCQlwaHlfZXJyb3IocGh5ZGV2KTsKIAotCW1vZF90aW1lcigmcGh5ZGV2LT5waHlfdGltZXIsIGppZmZpZXMgKyBQSFlfU1RBVEVfVElNRSAqIEhaKTsKLX0KLQotLyogUEhZIHRpbWVyIHdoaWNoIHNjaGVkdWxlcyB0aGUgc3RhdGUgbWFjaGluZSB3b3JrICovCi1zdGF0aWMgdm9pZCBwaHlfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSAoc3RydWN0IHBoeV9kZXZpY2UgKilkYXRhOwotCi0JLyoKLQkgKiBQSFkgSS9PIG9wZXJhdGlvbnMgY2FuIHBvdGVudGlhbGx5IHNsZWVwIHNvIHdlIGVuc3VyZSB0aGF0Ci0JICogaXQncyBkb25lIGZyb20gYSBwcm9jZXNzIGNvbnRleHQKLQkgKi8KLQlzY2hlZHVsZV93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsCisJCQkJamlmZmllcyArIFBIWV9TVEFURV9USU1FICogSFopOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKaW5kZXggMTM4NzE4Ny4uNTEyM2JiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYworKysgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCkBAIC0xNTksNiArMTU5LDMwIEBACiAJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLCB9CiB9OwogCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbGFuODcxMF9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAwMDdjMGYwLCAvKiBPVUk9MHgwMDgwMGYsIE1vZGVsIz0weDBmICovCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiU01TQyBMQU44NzEwL0xBTjg3MjAiLAorCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZQorCQkJCXwgU1VQUE9SVEVEX0FzeW1fUGF1c2UpLAorCS5mbGFncwkJPSBQSFlfSEFTX0lOVEVSUlVQVCB8IFBIWV9IQVNfTUFHSUNBTkVHLAorCisJLyogYmFzaWMgZnVuY3Rpb25zICovCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuY29uZmlnX2luaXQJPSBzbXNjX3BoeV9jb25maWdfaW5pdCwKKworCS8qIElSUSByZWxhdGVkICovCisJLmFja19pbnRlcnJ1cHQJPSBzbXNjX3BoeV9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IHNtc2NfcGh5X2NvbmZpZ19pbnRyLAorCisJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGdlbnBoeV9yZXN1bWUsCisKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsIH0KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHNtc2NfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xNzksOCArMjAzLDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI0OwogCisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlciAoJmxhbjg3MTBfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjU7CisKIAlyZXR1cm4gMDsKIAorZXJyNToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW45MTF4X2ludF9kcml2ZXIpOwogZXJyNDoKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44NzAwX2RyaXZlcik7CiBlcnIzOgpAQCAtMTkzLDYgKzIyMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbXNjX2V4aXQodm9pZCkKIHsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44NzEwX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuOTExeF9pbnRfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIgKCZsYW44NzAwX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODE4N19kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwppbmRleCA2NTY3ZmFiLi42ZGU4Mzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwpAQCAtMTU3LDYgKzE1Nyw3IEBACiB7CiAJc3RydWN0IGFzeW5jcHBwICphcDsKIAlpbnQgZXJyOworCWludCBzcGVlZDsKIAogCWlmICh0dHktPm9wcy0+d3JpdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTg3LDYgKzE4OCw4IEBACiAJYXAtPmNoYW4ucHJpdmF0ZSA9IGFwOwogCWFwLT5jaGFuLm9wcyA9ICZhc3luY19vcHM7CiAJYXAtPmNoYW4ubXR1ID0gUFBQX01SVTsKKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYXAtPmNoYW4uc3BlZWQgPSBzcGVlZDsKIAllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yMzMsMTEgKzIzNiw5IEBACiAJdGFza2xldF9raWxsKCZhcC0+dHNrKTsKIAogCXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKLQlpZiAoYXAtPnJwa3QpCi0JCWtmcmVlX3NrYihhcC0+cnBrdCk7CisJa2ZyZWVfc2tiKGFwLT5ycGt0KTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5ycXVldWUpOwotCWlmIChhcC0+dHBrdCkKLQkJa2ZyZWVfc2tiKGFwLT50cGt0KTsKKwlrZnJlZV9za2IoYXAtPnRwa3QpOwogCWtmcmVlKGFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggN2IyNzI4Yi4uOGVlOTE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC00OSw2ICs0OSwxMCBAQAogI2luY2x1ZGUgPG5ldC9zbGhjX3ZqLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKwogI2RlZmluZSBQUFBfVkVSU0lPTgkiMi40LjIiCiAKIC8qCkBAIC0xMzEsNiArMTM1LDcgQEAKIAlzdHJ1Y3Qgc29ja19maWx0ZXIgKmFjdGl2ZV9maWx0ZXI7LyogZmlsdGVyIGZvciBwa3RzIHRvIHJlc2V0IGlkbGUgKi8KIAl1bnNpZ25lZCBwYXNzX2xlbiwgYWN0aXZlX2xlbjsKICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqLworCXN0cnVjdCBuZXQJKnBwcF9uZXQ7CS8qIHRoZSBuZXQgd2UgYmVsb25nIHRvICovCiB9OwogCiAvKgpAQCAtMTU1LDEyICsxNjAsMTQgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGNoYW5fc2VtOwkvKiBwcm90ZWN0cyBgY2hhbicgZHVyaW5nIGNoYW4gaW9jdGwgKi8KIAlzcGlubG9ja190CWRvd25sOwkJLyogcHJvdGVjdHMgYGNoYW4nLCBmaWxlLnhxIGRlcXVldWUgKi8KIAlzdHJ1Y3QgcHBwCSpwcHA7CQkvKiBwcHAgdW5pdCB3ZSdyZSBjb25uZWN0ZWQgdG8gKi8KKwlzdHJ1Y3QgbmV0CSpjaGFuX25ldDsJLyogdGhlIG5ldCBjaGFubmVsIGJlbG9uZ3MgdG8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsaXN0OwkJLyogbGluayBpbiBsaXN0IG9mIGNoYW5uZWxzIHBlciB1bml0ICovCiAJcndsb2NrX3QJdXBsOwkJLyogcHJvdGVjdHMgYHBwcCcgKi8KICNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOSwogCXU4CQlhdmFpbDsJCS8qIGZsYWcgdXNlZCBpbiBtdWx0aWxpbmsgc3R1ZmYgKi8KIAl1OAkJaGFkX2ZyYWc7CS8qID49IDEgZnJhZ21lbnRzIGhhdmUgYmVlbiBzZW50ICovCiAJdTMyCQlsYXN0c2VxOwkvKiBNUDogbGFzdCBzZXF1ZW5jZSAjIHJlY2VpdmVkICovCisJaW50ICAgICBzcGVlZDsJCS8qIHNwZWVkIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBwcCBjaGFubmVsKi8KICNlbmRpZiAvKiBDT05GSUdfUFBQX01VTFRJTElOSyAqLwogfTsKIApAQCAtMTczLDI2ICsxODAsMzUgQEAKICAqIGNoYW5uZWwuZG93bmwuCiAgKi8KIAotLyoKLSAqIGFsbF9wcHBfbXV0ZXggcHJvdGVjdHMgdGhlIGFsbF9wcHBfdW5pdHMgbWFwcGluZy4KLSAqIEl0IGFsc28gZW5zdXJlcyB0aGF0IGZpbmRpbmcgYSBwcHAgdW5pdCBpbiB0aGUgYWxsX3BwcF91bml0cyBtYXAKLSAqIGFuZCB1cGRhdGluZyBpdHMgZmlsZS5yZWZjbnQgZmllbGQgaXMgYXRvbWljLgotICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGFsbF9wcHBfbXV0ZXgpOwogc3RhdGljIGF0b21pY190IHBwcF91bml0X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7Ci1zdGF0aWMgREVGSU5FX0lEUihwcHBfdW5pdHNfaWRyKTsKLQotLyoKLSAqIGFsbF9jaGFubmVsc19sb2NrIHByb3RlY3RzIGFsbF9jaGFubmVscyBhbmQgbGFzdF9jaGFubmVsX2luZGV4LAotICogYW5kIHRoZSBhdG9taWNpdHkgb2YgZmluZCBhIGNoYW5uZWwgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudAotICogZmllbGQuCi0gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWxsX2NoYW5uZWxzX2xvY2spOwotc3RhdGljIExJU1RfSEVBRChhbGxfY2hhbm5lbHMpOwotc3RhdGljIExJU1RfSEVBRChuZXdfY2hhbm5lbHMpOwotc3RhdGljIGludCBsYXN0X2NoYW5uZWxfaW5kZXg7CiBzdGF0aWMgYXRvbWljX3QgY2hhbm5lbF9jb3VudCA9IEFUT01JQ19JTklUKDApOwogCisvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgcHBwX25ldF9pZDsKK3N0cnVjdCBwcHBfbmV0IHsKKwkvKiB1bml0cyB0byBwcHAgbWFwcGluZyAqLworCXN0cnVjdCBpZHIgdW5pdHNfaWRyOworCisJLyoKKwkgKiBhbGxfcHBwX211dGV4IHByb3RlY3RzIHRoZSB1bml0c19pZHIgbWFwcGluZy4KKwkgKiBJdCBhbHNvIGVuc3VyZXMgdGhhdCBmaW5kaW5nIGEgcHBwIHVuaXQgaW4gdGhlIHVuaXRzX2lkcgorCSAqIG1hcCBhbmQgdXBkYXRpbmcgaXRzIGZpbGUucmVmY250IGZpZWxkIGlzIGF0b21pYy4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggYWxsX3BwcF9tdXRleDsKKworCS8qIGNoYW5uZWxzICovCisJc3RydWN0IGxpc3RfaGVhZCBhbGxfY2hhbm5lbHM7CisJc3RydWN0IGxpc3RfaGVhZCBuZXdfY2hhbm5lbHM7CisJaW50IGxhc3RfY2hhbm5lbF9pbmRleDsKKworCS8qCisJICogYWxsX2NoYW5uZWxzX2xvY2sgcHJvdGVjdHMgYWxsX2NoYW5uZWxzIGFuZAorCSAqIGxhc3RfY2hhbm5lbF9pbmRleCwgYW5kIHRoZSBhdG9taWNpdHkgb2YgZmluZAorCSAqIGEgY2hhbm5lbCBhbmQgdXBkYXRpbmcgaXRzIGZpbGUucmVmY250IGZpZWxkLgorCSAqLworCXNwaW5sb2NrX3QgYWxsX2NoYW5uZWxzX2xvY2s7Cit9OworCiAvKiBHZXQgdGhlIFBQUCBwcm90b2NvbCBudW1iZXIgZnJvbSBhIHNrYiAqLwogI2RlZmluZSBQUFBfUFJPVE8oc2tiKQkoKChza2IpLT5kYXRhWzBdIDw8IDgpICsgKHNrYiktPmRhdGFbMV0pCiAKQEAgLTIxNiw4ICsyMzIsOCBAQAogI2RlZmluZSBzZXFfYWZ0ZXIoYSwgYikJCSgoczMyKSgoYSkgLSAoYikpID4gMCkKIAogLyogUHJvdG90eXBlcy4gKi8KLXN0YXRpYyBpbnQgcHBwX3VuYXR0YWNoZWRfaW9jdGwoc3RydWN0IHBwcF9maWxlICpwZiwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCBwcHBfdW5hdHRhY2hlZF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcHBfZmlsZSAqcGYsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3htaXRfcHJvY2VzcyhzdHJ1Y3QgcHBwICpwcHApOwogc3RhdGljIHZvaWQgcHBwX3NlbmRfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCk7CkBAIC0yNDAsMTIgKzI1NiwxMiBAQAogc3RhdGljIHZvaWQgcHBwX2NjcF9jbG9zZWQoc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyBzdHJ1Y3QgY29tcHJlc3NvciAqZmluZF9jb21wcmVzc29yKGludCB0eXBlKTsKIHN0YXRpYyB2b2lkIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdCk7Ci1zdGF0aWMgc3RydWN0IHBwcCAqcHBwX2NyZWF0ZV9pbnRlcmZhY2UoaW50IHVuaXQsIGludCAqcmV0cCk7CitzdGF0aWMgc3RydWN0IHBwcCAqcHBwX2NyZWF0ZV9pbnRlcmZhY2Uoc3RydWN0IG5ldCAqbmV0LCBpbnQgdW5pdCwgaW50ICpyZXRwKTsKIHN0YXRpYyB2b2lkIGluaXRfcHBwX2ZpbGUoc3RydWN0IHBwcF9maWxlICpwZiwgaW50IGtpbmQpOwogc3RhdGljIHZvaWQgcHBwX3NodXRkb3duX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApOwogc3RhdGljIHZvaWQgcHBwX2Rlc3Ryb3lfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcCk7Ci1zdGF0aWMgc3RydWN0IHBwcCAqcHBwX2ZpbmRfdW5pdChpbnQgdW5pdCk7Ci1zdGF0aWMgc3RydWN0IGNoYW5uZWwgKnBwcF9maW5kX2NoYW5uZWwoaW50IHVuaXQpOworc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9maW5kX3VuaXQoc3RydWN0IHBwcF9uZXQgKnBuLCBpbnQgdW5pdCk7CitzdGF0aWMgc3RydWN0IGNoYW5uZWwgKnBwcF9maW5kX2NoYW5uZWwoc3RydWN0IHBwcF9uZXQgKnBuLCBpbnQgdW5pdCk7CiBzdGF0aWMgaW50IHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpOwogc3RhdGljIGludCBwcHBfZGlzY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gpOwogc3RhdGljIHZvaWQgcHBwX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoKTsKQEAgLTI1Niw2ICsyNzIsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqcHBwX2NsYXNzOwogCisvKiBwZXIgbmV0LW5hbWVzcGFjZSBkYXRhICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBfbmV0ICpwcHBfcGVybmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlCVUdfT04oIW5ldCk7CisKKwlyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCBwcHBfbmV0X2lkKTsKK30KKwogLyogVHJhbnNsYXRlcyBhIFBQUCBwcm90b2NvbCBudW1iZXIgdG8gYSBOUCBpbmRleCAoTlAgPT0gbmV0d29yayBwcm90b2NvbCkgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHByb3RvX3RvX25waW5kZXgoaW50IHByb3RvKQogewpAQCAtNTQ0LDcgKzU2OCw4IEBACiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAKIAlpZiAoIXBmKQotCQlyZXR1cm4gcHBwX3VuYXR0YWNoZWRfaW9jdGwocGYsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0dXJuIHBwcF91bmF0dGFjaGVkX2lvY3RsKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywKKwkJCQkJcGYsIGZpbGUsIGNtZCwgYXJnKTsKIAogCWlmIChjbWQgPT0gUFBQSU9DREVUQUNIKSB7CiAJCS8qCkBAIC03NjMsMTIgKzc4OCwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcHBwX3VuYXR0YWNoZWRfaW9jdGwoc3RydWN0IHBwcF9maWxlICpwZiwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHBwcF9maWxlICpwZiwKKwkJCXN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgdW5pdCwgZXJyID0gLUVGQVVMVDsKIAlzdHJ1Y3QgcHBwICpwcHA7CiAJc3RydWN0IGNoYW5uZWwgKmNoYW47CisJc3RydWN0IHBwcF9uZXQgKnBuOwogCWludCBfX3VzZXIgKnAgPSAoaW50IF9fdXNlciAqKWFyZzsKIAogCWxvY2tfa2VybmVsKCk7CkBAIC03NzcsNyArODAzLDcgQEAKIAkJLyogQ3JlYXRlIGEgbmV3IHBwcCB1bml0ICovCiAJCWlmIChnZXRfdXNlcih1bml0LCBwKSkKIAkJCWJyZWFrOwotCQlwcHAgPSBwcHBfY3JlYXRlX2ludGVyZmFjZSh1bml0LCAmZXJyKTsKKwkJcHBwID0gcHBwX2NyZWF0ZV9pbnRlcmZhY2UobmV0LCB1bml0LCAmZXJyKTsKIAkJaWYgKCFwcHApCiAJCQlicmVhazsKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gJnBwcC0+ZmlsZTsKQEAgLTc5MiwyOSArODE4LDMxIEBACiAJCS8qIEF0dGFjaCB0byBhbiBleGlzdGluZyBwcHAgdW5pdCAqLwogCQlpZiAoZ2V0X3VzZXIodW5pdCwgcCkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYWxsX3BwcF9tdXRleCk7CiAJCWVyciA9IC1FTlhJTzsKLQkJcHBwID0gcHBwX2ZpbmRfdW5pdCh1bml0KTsKKwkJcG4gPSBwcHBfcGVybmV0KG5ldCk7CisJCW11dGV4X2xvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKKwkJcHBwID0gcHBwX2ZpbmRfdW5pdChwbiwgdW5pdCk7CiAJCWlmIChwcHApIHsKIAkJCWF0b21pY19pbmMoJnBwcC0+ZmlsZS5yZWZjbnQpOwogCQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gJnBwcC0+ZmlsZTsKIAkJCWVyciA9IDA7CiAJCX0KLQkJbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQUFBJT0NBVFRDSEFOOgogCQlpZiAoZ2V0X3VzZXIodW5pdCwgcCkpCiAJCQlicmVhazsKLQkJc3Bpbl9sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CiAJCWVyciA9IC1FTlhJTzsKLQkJY2hhbiA9IHBwcF9maW5kX2NoYW5uZWwodW5pdCk7CisJCXBuID0gcHBwX3Blcm5ldChuZXQpOworCQlzcGluX2xvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CisJCWNoYW4gPSBwcHBfZmluZF9jaGFubmVsKHBuLCB1bml0KTsKIAkJaWYgKGNoYW4pIHsKIAkJCWF0b21pY19pbmMoJmNoYW4tPmZpbGUucmVmY250KTsKIAkJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZjaGFuLT5maWxlOwogCQkJZXJyID0gMDsKIAkJfQotCQlzcGluX3VubG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmcG4tPmFsbF9jaGFubmVsc19sb2NrKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtODM0LDYgKzg2Miw1MSBAQAogCS5yZWxlYXNlCT0gcHBwX3JlbGVhc2UKIH07CiAKK3N0YXRpYyBfX25ldF9pbml0IGludCBwcHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBwcHBfbmV0ICpwbjsKKwlpbnQgZXJyOworCisJcG4gPSBremFsbG9jKHNpemVvZigqcG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlkcl9pbml0KCZwbi0+dW5pdHNfaWRyKTsKKwltdXRleF9pbml0KCZwbi0+YWxsX3BwcF9tdXRleCk7CisKKwlJTklUX0xJU1RfSEVBRCgmcG4tPmFsbF9jaGFubmVscyk7CisJSU5JVF9MSVNUX0hFQUQoJnBuLT5uZXdfY2hhbm5lbHMpOworCisJc3Bpbl9sb2NrX2luaXQoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBwcHBfbmV0X2lkLCBwbik7CisJaWYgKGVycikgeworCQlrZnJlZShwbik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCk7CisJaWRyX2Rlc3Ryb3koJnBuLT51bml0c19pZHIpOworCS8qCisJICogaWYgc29tZW9uZSBoYXMgY2FjaGVkIG91ciBuZXQgdGhlbgorCSAqIGZ1cnRoZXIgbmV0X2dlbmVyaWMgY2FsbCB3aWxsIHJldHVybiBOVUxMCisJICovCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCwgTlVMTCk7CisJa2ZyZWUocG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcF9uZXRfb3BzID0geworCS5pbml0ID0gcHBwX2luaXRfbmV0LAorCS5leGl0ID0gcHBwX2V4aXRfbmV0LAorfTsKKwogI2RlZmluZSBQUFBfTUFKT1IJMTA4CiAKIC8qIENhbGxlZCBhdCBib290IHRpbWUgaWYgcHBwIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwKQEAgLTg0MywyNSArOTE2LDM2IEBACiAJaW50IGVycjsKIAogCXByaW50ayhLRVJOX0lORk8gIlBQUCBnZW5lcmljIGRyaXZlciB2ZXJzaW9uICIgUFBQX1ZFUlNJT04gIlxuIik7Ci0JZXJyID0gcmVnaXN0ZXJfY2hyZGV2KFBQUF9NQUpPUiwgInBwcCIsICZwcHBfZGV2aWNlX2ZvcHMpOwotCWlmICghZXJyKSB7Ci0JCXBwcF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInBwcCIpOwotCQlpZiAoSVNfRVJSKHBwcF9jbGFzcykpIHsKLQkJCWVyciA9IFBUUl9FUlIocHBwX2NsYXNzKTsKLQkJCWdvdG8gb3V0X2NocmRldjsKLQkJfQotCQlkZXZpY2VfY3JlYXRlKHBwcF9jbGFzcywgTlVMTCwgTUtERVYoUFBQX01BSk9SLCAwKSwgTlVMTCwKLQkJCSAgICAgICJwcHAiKTsKKworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBfbmV0X2lkLCAmcHBwX25ldF9vcHMpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgUFBQIHBlcm5ldCBkZXZpY2UgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CiAJfQogCi1vdXQ6Ci0JaWYgKGVycikKKwllcnIgPSByZWdpc3Rlcl9jaHJkZXYoUFBQX01BSk9SLCAicHBwIiwgJnBwcF9kZXZpY2VfZm9wcyk7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBQUFAgZGV2aWNlICglZClcbiIsIGVycik7Ci0JcmV0dXJuIGVycjsKKwkJZ290byBvdXRfbmV0OworCX0KKworCXBwcF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInBwcCIpOworCWlmIChJU19FUlIocHBwX2NsYXNzKSkgeworCQllcnIgPSBQVFJfRVJSKHBwcF9jbGFzcyk7CisJCWdvdG8gb3V0X2NocmRldjsKKwl9CisKKwkvKiBub3QgYSBiaWcgZGVhbCBpZiB3ZSBmYWlsIGhlcmUgOi0pICovCisJZGV2aWNlX2NyZWF0ZShwcHBfY2xhc3MsIE5VTEwsIE1LREVWKFBQUF9NQUpPUiwgMCksIE5VTEwsICJwcHAiKTsKKworCXJldHVybiAwOwogCiBvdXRfY2hyZGV2OgogCXVucmVnaXN0ZXJfY2hyZGV2KFBQUF9NQUpPUiwgInBwcCIpOwotCWdvdG8gb3V0Oworb3V0X25ldDoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHBwcF9uZXRfaWQsICZwcHBfbmV0X29wcyk7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTkwOCw3ICs5OTIsNyBAQAogCiAgb3V0ZjoKIAlrZnJlZV9za2Ioc2tiKTsKLQkrK3BwcC0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkOworCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwogCXJldHVybiAwOwogfQogCkBAIC05NjksNiArMTA1Myw3IEBACiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAzOwogCWRldi0+dHlwZSA9IEFSUEhSRF9QUFA7CiAJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUCB8IElGRl9NVUxUSUNBU1Q7CisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogfQogCiAvKgpAQCAtMTE2MSw4ICsxMjQ2LDcgQEAKIAlyZXR1cm47CiAKICBkcm9wOgotCWlmIChza2IpCi0JCWtmcmVlX3NrYihza2IpOworCWtmcmVlX3NrYihza2IpOwogCSsrcHBwLT5kZXYtPnN0YXRzLnR4X2Vycm9yczsKIH0KIApAQCAtMTIyNCwxMzggKzEzMDgsMTgxIEBACiAgKi8KIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBsZW4sIGZyYWdzaXplOwotCWludCBpLCBiaXRzLCBoZHJsZW4sIG10dTsKLQlpbnQgZmxlbjsKLQlpbnQgbmF2YWlsLCBuZnJlZTsKLQlpbnQgbmJpZ2dlcjsKKwlpbnQJbGVuLCB0b3RsZW47CisJaW50CWksIGJpdHMsIGhkcmxlbiwgbXR1OworCWludAlmbGVuOworCWludAluYXZhaWwsCW5mcmVlLCBuemVybzsKKwlpbnQJbmJpZ2dlcjsKKwlpbnQJdG90c3BlZWQ7CisJaW50CXRvdGZyZWU7CiAJdW5zaWduZWQgY2hhciAqcCwgKnE7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAlzdHJ1Y3QgY2hhbm5lbCAqcGNoOwogCXN0cnVjdCBza19idWZmICpmcmFnOwogCXN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbjsKIAotCW5mcmVlID0gMDsJLyogIyBjaGFubmVscyB3aGljaCBoYXZlIG5vIHBhY2tldCBhbHJlYWR5IHF1ZXVlZCAqLworCXRvdHNwZWVkID0gMDsgLyp0b3RhbCBiaXRyYXRlIG9mIHRoZSBidW5kbGUqLworCW5mcmVlID0JMDsJLyogIyBjaGFubmVscyB3aGljaAloYXZlIG5vCXBhY2tldCBhbHJlYWR5IHF1ZXVlZCAqLwogCW5hdmFpbCA9IDA7CS8qIHRvdGFsICMgb2YgdXNhYmxlIGNoYW5uZWxzIChub3QgZGVyZWdpc3RlcmVkKSAqLworCW56ZXJvID0JMDsgLyogbnVtYmVyIG9mCWNoYW5uZWxzIHdpdGggemVybyBzcGVlZCBhc3NvY2lhdGVkKi8KKwl0b3RmcmVlCT0gMDsgLyp0b3RhbCAjIG9mIGNoYW5uZWxzIGF2YWlsYWJsZSBhbmQKKwkJCQkgICpoYXZpbmcgbm8gcXVldWVkIHBhY2tldHMgYmVmb3JlCisJCQkJICAqc3RhcnRpbmcgdGhlIGZyYWdtZW50YXRpb24qLworCiAJaGRybGVuID0gKHBwcC0+ZmxhZ3MgJiBTQ19NUF9YU0hPUlRTRVEpPyBNUEhEUkxFTl9TU046IE1QSERSTEVOOwotCWkgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocGNoLCAmcHBwLT5jaGFubmVscywgY2xpc3QpIHsKKwlpID0JMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBwcC0+Y2hhbm5lbHMsIGNsaXN0KQl7CiAJCW5hdmFpbCArPSBwY2gtPmF2YWlsID0gKHBjaC0+Y2hhbiAhPSBOVUxMKTsKLQkJaWYgKHBjaC0+YXZhaWwpIHsKKwkJcGNoLT5zcGVlZCA9IHBjaC0+Y2hhbi0+c3BlZWQ7CisJCWlmIChwY2gtPmF2YWlsKQl7CiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpIHx8Ci0JCQkgICAgIXBjaC0+aGFkX2ZyYWcpIHsKLQkJCQlwY2gtPmF2YWlsID0gMjsKLQkJCQkrK25mcmVlOwotCQkJfQotCQkJaWYgKCFwY2gtPmhhZF9mcmFnICYmIGkgPCBwcHAtPm54Y2hhbikKLQkJCQlwcHAtPm54Y2hhbiA9IGk7CisJCQkJIXBjaC0+aGFkX2ZyYWcpCXsKKwkJCQkJaWYgKHBjaC0+c3BlZWQgPT0gMCkKKwkJCQkJCW56ZXJvKys7CisJCQkJCWVsc2UKKwkJCQkJCXRvdHNwZWVkICs9IHBjaC0+c3BlZWQ7CisKKwkJCQkJcGNoLT5hdmFpbCA9IDI7CisJCQkJCSsrbmZyZWU7CisJCQkJCSsrdG90ZnJlZTsKKwkJCQl9CisJCQlpZiAoIXBjaC0+aGFkX2ZyYWcgJiYgaQk8IHBwcC0+bnhjaGFuKQorCQkJCXBwcC0+bnhjaGFuCT0gaTsKIAkJfQogCQkrK2k7CiAJfQotCiAJLyoKLQkgKiBEb24ndCBzdGFydCBzZW5kaW5nIHRoaXMgcGFja2V0IHVubGVzcyBhdCBsZWFzdCBoYWxmIG9mCi0JICogdGhlIGNoYW5uZWxzIGFyZSBmcmVlLiAgVGhpcyBnaXZlcyBtdWNoIGJldHRlciBUQ1AKLQkgKiBwZXJmb3JtYW5jZSBpZiB3ZSBoYXZlIGEgbG90IG9mIGNoYW5uZWxzLgorCSAqIERvbid0IHN0YXJ0IHNlbmRpbmcgdGhpcwlwYWNrZXQgdW5sZXNzIGF0IGxlYXN0IGhhbGYJb2YKKwkgKiB0aGUgY2hhbm5lbHMJYXJlCWZyZWUuICBUaGlzCWdpdmVzIG11Y2ggYmV0dGVyIFRDUAorCSAqIHBlcmZvcm1hbmNlIGlmIHdlIGhhdmUgYQlsb3QJb2YgY2hhbm5lbHMuCiAJICovCi0JaWYgKG5mcmVlID09IDAgfHwgbmZyZWUgPCBuYXZhaWwgLyAyKQotCQlyZXR1cm4gMDsJLyogY2FuJ3QgdGFrZSBub3csIGxlYXZlIGl0IGluIHhtaXRfcGVuZGluZyAqLworCWlmIChuZnJlZSA9PSAwIHx8IG5mcmVlCTwgbmF2YWlsIC8gMikKKwkJcmV0dXJuIDA7IC8qIGNhbid0IHRha2Ugbm93LCBsZWF2ZSBpdCBpbiB4bWl0X3BlbmRpbmcJKi8KIAogCS8qIERvIHByb3RvY29sIGZpZWxkIGNvbXByZXNzaW9uIChYWFggdGhpcyBzaG91bGQgYmUgb3B0aW9uYWwpICovCi0JcCA9IHNrYi0+ZGF0YTsKLQlsZW4gPSBza2ItPmxlbjsKKwlwID0Jc2tiLT5kYXRhOworCWxlbgk9IHNrYi0+bGVuOwogCWlmICgqcCA9PSAwKSB7CiAJCSsrcDsKIAkJLS1sZW47CiAJfQogCi0JLyoKLQkgKiBEZWNpZGUgb24gZnJhZ21lbnQgc2l6ZS4KLQkgKiBXZSBjcmVhdGUgYSBmcmFnbWVudCBmb3IgZWFjaCBmcmVlIGNoYW5uZWwgcmVnYXJkbGVzcyBvZgotCSAqIGhvdyBzbWFsbCB0aGV5IGFyZSAoaS5lLiBldmVuIDAgbGVuZ3RoKSBpbiBvcmRlciB0byBtaW5pbWl6ZQotCSAqIHRoZSB0aW1lIHRoYXQgaXQgd2lsbCB0YWtlIHRvIGRldGVjdCB3aGVuIGEgY2hhbm5lbCBkcm9wcwotCSAqIGEgZnJhZ21lbnQuCi0JICovCi0JZnJhZ3NpemUgPSBsZW47Ci0JaWYgKG5mcmVlID4gMSkKLQkJZnJhZ3NpemUgPSBESVZfUk9VTkRfVVAoZnJhZ3NpemUsIG5mcmVlKTsKLQkvKiBuYmlnZ2VyIGNoYW5uZWxzIGdldCBmcmFnc2l6ZSBieXRlcywgdGhlIHJlc3QgZ2V0IGZyYWdzaXplLTEsCi0JICAgZXhjZXB0IGlmIG5iaWdnZXI9PTAsIHRoZW4gdGhleSBhbGwgZ2V0IGZyYWdzaXplLiAqLwotCW5iaWdnZXIgPSBsZW4gJSBuZnJlZTsKKwl0b3RsZW4gPSBsZW47CisJbmJpZ2dlcgk9IGxlbiAlCW5mcmVlOwogCi0JLyogc2tpcCB0byB0aGUgY2hhbm5lbCBhZnRlciB0aGUgb25lIHdlIGxhc3QgdXNlZAotCSAgIGFuZCBzdGFydCBhdCB0aGF0IG9uZSAqLworCS8qIHNraXAJdG8gdGhlIGNoYW5uZWwgYWZ0ZXIgdGhlIG9uZSB3ZQlsYXN0IHVzZWQKKwkgICBhbmQgc3RhcnQgYXQJdGhhdCBvbmUgKi8KIAlsaXN0ID0gJnBwcC0+Y2hhbm5lbHM7Ci0JZm9yIChpID0gMDsgaSA8IHBwcC0+bnhjaGFuOyArK2kpIHsKKwlmb3IJKGkgPSAwOwlpIDwJcHBwLT5ueGNoYW47ICsraSkgewogCQlsaXN0ID0gbGlzdC0+bmV4dDsKLQkJaWYgKGxpc3QgPT0gJnBwcC0+Y2hhbm5lbHMpIHsKLQkJCWkgPSAwOworCQlpZiAobGlzdCA9PQkmcHBwLT5jaGFubmVscykJeworCQkJaSA9CTA7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCS8qIGNyZWF0ZSBhIGZyYWdtZW50IGZvciBlYWNoIGNoYW5uZWwgKi8KKwkvKiBjcmVhdGUgYQlmcmFnbWVudCBmb3IgZWFjaCBjaGFubmVsICovCiAJYml0cyA9IEI7Ci0Jd2hpbGUgKG5mcmVlID4gMCB8fCBsZW4gPiAwKSB7CisJd2hpbGUgKG5mcmVlID4gMCAmJglsZW4JPiAwKSB7CiAJCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlpZiAobGlzdCA9PSAmcHBwLT5jaGFubmVscykgewotCQkJaSA9IDA7CisJCWlmIChsaXN0ID09CSZwcHAtPmNoYW5uZWxzKQl7CisJCQlpID0JMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXBjaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGNoYW5uZWwsIGNsaXN0KTsKKwkJcGNoCT0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY2hhbm5lbCwgY2xpc3QpOwogCQkrK2k7CiAJCWlmICghcGNoLT5hdmFpbCkKIAkJCWNvbnRpbnVlOwogCiAJCS8qCi0JCSAqIFNraXAgdGhpcyBjaGFubmVsIGlmIGl0IGhhcyBhIGZyYWdtZW50IHBlbmRpbmcgYWxyZWFkeSBhbmQKLQkJICogd2UgaGF2ZW4ndCBnaXZlbiBhIGZyYWdtZW50IHRvIGFsbCBvZiB0aGUgZnJlZSBjaGFubmVscy4KKwkJICogU2tpcAl0aGlzIGNoYW5uZWwgaWYJaXQgaGFzIGEgZnJhZ21lbnQgcGVuZGluZyBhbHJlYWR5IGFuZAorCQkgKiB3ZSBoYXZlbid0IGdpdmVuCWEgZnJhZ21lbnQgdG8gYWxsIG9mIHRoZSBmcmVlIGNoYW5uZWxzLgogCQkgKi8KIAkJaWYgKHBjaC0+YXZhaWwgPT0gMSkgewotCQkJaWYgKG5mcmVlID4gMCkKKwkJCWlmIChuZnJlZSA+CTApCiAJCQkJY29udGludWU7CiAJCX0gZWxzZSB7Ci0JCQktLW5mcmVlOwogCQkJcGNoLT5hdmFpbCA9IDE7CiAJCX0KIAogCQkvKiBjaGVjayB0aGUgY2hhbm5lbCdzIG10dSBhbmQgd2hldGhlciBpdCBpcyBzdGlsbCBhdHRhY2hlZC4gKi8KIAkJc3Bpbl9sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAkJaWYgKHBjaC0+Y2hhbiA9PSBOVUxMKSB7Ci0JCQkvKiBjYW4ndCB1c2UgdGhpcyBjaGFubmVsLCBpdCdzIGJlaW5nIGRlcmVnaXN0ZXJlZCAqLworCQkJLyogY2FuJ3QgdXNlIHRoaXMgY2hhbm5lbCwgaXQncwliZWluZyBkZXJlZ2lzdGVyZWQgKi8KKwkJCWlmIChwY2gtPnNwZWVkID09IDApCisJCQkJbnplcm8tLTsKKwkJCWVsc2UKKwkJCQl0b3RzcGVlZCAtPQlwY2gtPnNwZWVkOworCiAJCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CiAJCQlwY2gtPmF2YWlsID0gMDsKLQkJCWlmICgtLW5hdmFpbCA9PSAwKQorCQkJdG90bGVuID0gbGVuOworCQkJdG90ZnJlZS0tOworCQkJbmZyZWUtLTsKKwkJCWlmICgtLW5hdmFpbCA9PQkwKQogCQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKgotCQkgKiBDcmVhdGUgYSBmcmFnbWVudCBmb3IgdGhpcyBjaGFubmVsIG9mCi0JCSAqIG1pbihtYXgobXR1KzItaGRybGVuLCA0KSwgZnJhZ3NpemUsIGxlbikgYnl0ZXMuCi0JCSAqIElmIG10dSsyLWhkcmxlbiA8IDQsIHRoYXQgaXMgYSByaWRpY3Vsb3VzbHkgc21hbGwKLQkJICogTVRVLCBzbyB3ZSB1c2UgbXR1ID0gMiArIGhkcmxlbi4KKwkJKmlmIHRoZSBjaGFubmVsIHNwZWVkIGlzIG5vdCBzZXQgZGl2aWRlCisJCSp0aGUgcGFja2V0CWV2ZW5seSBhbW9uZyB0aGUgZnJlZSBjaGFubmVsczsKKwkJKm90aGVyd2lzZSBkaXZpZGUgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVlZAorCQkqb2YgdGhlIGNoYW5uZWwgd2UgYXJlIGdvaW5nIHRvIHRyYW5zbWl0IG9uCisJCSovCisJCWlmIChwY2gtPnNwZWVkID09IDApIHsKKwkJCWZsZW4gPSB0b3RsZW4vbmZyZWUJOworCQkJaWYgKG5iaWdnZXIgPiAwKSB7CisJCQkJZmxlbisrOworCQkJCW5iaWdnZXItLTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZsZW4gPSAoKCh0b3RmcmVlIC0gbnplcm8pKih0b3RsZW4gKyBoZHJsZW4qdG90ZnJlZSkpIC8KKwkJCQkoKHRvdHNwZWVkKnRvdGZyZWUpL3BjaC0+c3BlZWQpKSAtIGhkcmxlbjsKKwkJCWlmIChuYmlnZ2VyID4gMCkgeworCQkJCWZsZW4gKz0gKCh0b3RmcmVlIC0gbnplcm8pKnBjaC0+c3BlZWQpL3RvdHNwZWVkOworCQkJCW5iaWdnZXIgLT0gKCh0b3RmcmVlIC0gbnplcm8pKnBjaC0+c3BlZWQpLworCQkJCQkJCXRvdHNwZWVkOworCQkJfQorCQl9CisJCW5mcmVlLS07CisKKwkJLyoKKwkJICpjaGVjawlpZiB3ZSBhcmUgb24gdGhlIGxhc3QgY2hhbm5lbCBvcgorCQkgKndlIGV4Y2VkZWQgdGhlIGxlbmdodAlvZiB0aGUgZGF0YQl0bworCQkgKmZyYWdtZW50CiAJCSAqLwotCQlpZiAoZnJhZ3NpemUgPiBsZW4pCi0JCQlmcmFnc2l6ZSA9IGxlbjsKLQkJZmxlbiA9IGZyYWdzaXplOwotCQltdHUgPSBwY2gtPmNoYW4tPm10dSArIDIgLSBoZHJsZW47Ci0JCWlmIChtdHUgPCA0KQotCQkJbXR1ID0gNDsKKwkJaWYgKChuZnJlZSA9PSAwKSB8fCAoZmxlbiA+IGxlbikpCisJCQlmbGVuID0gbGVuOworCQkvKgorCQkgKml0IGlzIG5vdCB3b3J0aCB0byB0eCBvbiBzbG93IGNoYW5uZWxzOgorCQkgKmluIHRoYXQgY2FzZSBmcm9tIHRoZSByZXN1bHRpbmcgZmxlbiBhY2NvcmRpbmcgdG8gdGhlCisJCSAqYWJvdmUgZm9ybXVsYSB3aWxsIGJlIGVxdWFsIG9yIGxlc3MgdGhhbiB6ZXJvLgorCQkgKlNraXAgdGhlIGNoYW5uZWwgaW4gdGhpcyBjYXNlCisJCSAqLworCQlpZiAoZmxlbiA8PQkwKSB7CisJCQlwY2gtPmF2YWlsID0gMjsKKwkJCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbXR1CT0gcGNoLT5jaGFuLT5tdHUgKyAyIC0gaGRybGVuOworCQlpZiAobXR1CTwgNCkKKwkJCW10dQk9IDQ7CiAJCWlmIChmbGVuID4gbXR1KQogCQkJZmxlbiA9IG10dTsKLQkJaWYgKGZsZW4gPT0gbGVuICYmIG5mcmVlID09IDApCi0JCQliaXRzIHw9IEU7Ci0JCWZyYWcgPSBhbGxvY19za2IoZmxlbiArIGhkcmxlbiArIChmbGVuID09IDApLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGZsZW4gPT0JbGVuKQorCQkJYml0cyB8PQlFOworCQlmcmFnID0gYWxsb2Nfc2tiKGZsZW4gKwloZHJsZW4gKyAoZmxlbiA9PSAwKSwgR0ZQX0FUT01JQyk7CiAJCWlmICghZnJhZykKIAkJCWdvdG8gbm9za2I7Ci0JCXEgPSBza2JfcHV0KGZyYWcsIGZsZW4gKyBoZHJsZW4pOworCQlxID0Jc2tiX3B1dChmcmFnLCBmbGVuICsgaGRybGVuKTsKIAotCQkvKiBtYWtlIHRoZSBNUCBoZWFkZXIgKi8KKwkJLyogbWFrZQl0aGUJTVAgaGVhZGVyICovCiAJCXFbMF0gPSBQUFBfTVAgPj4gODsKIAkJcVsxXSA9IFBQUF9NUDsKIAkJaWYgKHBwcC0+ZmxhZ3MgJiBTQ19NUF9YU0hPUlRTRVEpIHsKLQkJCXFbMl0gPSBiaXRzICsgKChwcHAtPm54c2VxID4+IDgpICYgMHhmKTsKKwkJCXFbMl0gPSBiaXRzCSsgKChwcHAtPm54c2VxID4+IDgpICYgMHhmKTsKIAkJCXFbM10gPSBwcHAtPm54c2VxOwogCQl9IGVsc2UgewogCQkJcVsyXSA9IGJpdHM7CkBAIC0xMzY0LDQzICsxNDkxLDI4IEBACiAJCQlxWzVdID0gcHBwLT5ueHNlcTsKIAkJfQogCi0JCS8qCi0JCSAqIENvcHkgdGhlIGRhdGEgaW4uCi0JCSAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgYSBidWcgaW4gb2xkZXIgdmVyc2lvbnMgb2YKLQkJICogdGhlIExpbnV4IFBQUCBtdWx0aWxpbmsgcmVjb25zdHJ1Y3Rpb24gY29kZSB3aGVyZSBpdAotCQkgKiBkcm9wcyAwLWxlbmd0aCBmcmFnbWVudHMuICBUaGVyZWZvcmUgd2UgbWFrZSBzdXJlIHRoZQotCQkgKiBmcmFnbWVudCBoYXMgYXQgbGVhc3Qgb25lIGJ5dGUgb2YgZGF0YS4gIEFueSBieXRlcwotCQkgKiB3ZSBhZGQgaW4gdGhpcyBzaXR1YXRpb24gd2lsbCBlbmQgdXAgYXMgcGFkZGluZyBvbiB0aGUKLQkJICogZW5kIG9mIHRoZSByZWNvbnN0cnVjdGVkIHBhY2tldC4KLQkJICovCi0JCWlmIChmbGVuID09IDApCi0JCQkqc2tiX3B1dChmcmFnLCAxKSA9IDA7Ci0JCWVsc2UKLQkJCW1lbWNweShxICsgaGRybGVuLCBwLCBmbGVuKTsKKwkJbWVtY3B5KHEgKyBoZHJsZW4sIHAsIGZsZW4pOwogCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0+Y2hhbjsKLQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkgfHwKLQkJICAgICFjaGFuLT5vcHMtPnN0YXJ0X3htaXQoY2hhbiwgZnJhZykpCisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpCXx8CisJCQkhY2hhbi0+b3BzLT5zdGFydF94bWl0KGNoYW4sIGZyYWcpKQogCQkJc2tiX3F1ZXVlX3RhaWwoJnBjaC0+ZmlsZS54cSwgZnJhZyk7Ci0JCXBjaC0+aGFkX2ZyYWcgPSAxOworCQlwY2gtPmhhZF9mcmFnID0JMTsKIAkJcCArPSBmbGVuOwotCQlsZW4gLT0gZmxlbjsKKwkJbGVuCS09IGZsZW47CiAJCSsrcHBwLT5ueHNlcTsKIAkJYml0cyA9IDA7CiAJCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKLQotCQlpZiAoLS1uYmlnZ2VyID09IDAgJiYgZnJhZ3NpemUgPiAwKQotCQkJLS1mcmFnc2l6ZTsKIAl9Ci0JcHBwLT5ueGNoYW4gPSBpOworCXBwcC0+bnhjaGFuCT0gaTsKIAogCXJldHVybiAxOwogCiAgbm9za2I6CiAJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCWlmIChwcHAtPmRlYnVnICYgMSkKLQkJcHJpbnRrKEtFUk5fRVJSICJQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCSJQUFA6IG5vIG1lbW9yeQkoZnJhZ21lbnQpXG4iKTsKIAkrK3BwcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAJKytwcHAtPm54c2VxOwogCXJldHVybiAxOwkvKiBhYmFuZG9uIHRoZSBmcmFtZSAqLwpAQCAtMTk4NiwxOSArMjA5OCwyNyBAQAogICogQ2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIAotLyoKLSAqIENyZWF0ZSBhIG5ldywgdW5hdHRhY2hlZCBwcHAgY2hhbm5lbC4KLSAqLwotaW50Ci1wcHBfcmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCisvKiBDcmVhdGUgYSBuZXcsIHVuYXR0YWNoZWQgcHBwIGNoYW5uZWwuICovCitpbnQgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQoreworCXJldHVybiBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoY3VycmVudC0+bnNwcm94eS0+bmV0X25zLCBjaGFuKTsKK30KKworLyogQ3JlYXRlIGEgbmV3LCB1bmF0dGFjaGVkIHBwcCBjaGFubmVsIGZvciBzcGVjaWZpZWQgbmV0LiAqLworaW50IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqcGNoOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAogCXBjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFubmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwY2gpCiAJCXJldHVybiAtRU5PTUVNOworCisJcG4gPSBwcHBfcGVybmV0KG5ldCk7CisKIAlwY2gtPnBwcCA9IE5VTEw7CiAJcGNoLT5jaGFuID0gY2hhbjsKKwlwY2gtPmNoYW5fbmV0ID0gbmV0OwogCWNoYW4tPnBwcCA9IHBjaDsKIAlpbml0X3BwcF9maWxlKCZwY2gtPmZpbGUsIENIQU5ORUwpOwogCXBjaC0+ZmlsZS5oZHJsZW4gPSBjaGFuLT5oZHJsZW47CkBAIC0yMDA4LDExICsyMTI4LDEzIEBACiAJaW5pdF9yd3NlbSgmcGNoLT5jaGFuX3NlbSk7CiAJc3Bpbl9sb2NrX2luaXQoJnBjaC0+ZG93bmwpOwogCXJ3bG9ja19pbml0KCZwY2gtPnVwbCk7Ci0Jc3Bpbl9sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7Ci0JcGNoLT5maWxlLmluZGV4ID0gKytsYXN0X2NoYW5uZWxfaW5kZXg7Ci0JbGlzdF9hZGQoJnBjaC0+bGlzdCwgJm5ld19jaGFubmVscyk7CisKKwlzcGluX2xvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CisJcGNoLT5maWxlLmluZGV4ID0gKytwbi0+bGFzdF9jaGFubmVsX2luZGV4OworCWxpc3RfYWRkKCZwY2gtPmxpc3QsICZwbi0+bmV3X2NoYW5uZWxzKTsKIAlhdG9taWNfaW5jKCZjaGFubmVsX2NvdW50KTsKLQlzcGluX3VubG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNTMsOSArMjE3NSwxMSBAQAogcHBwX3VucmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGNoYW5uZWwgKnBjaCA9IGNoYW4tPnBwcDsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CiAKIAlpZiAoIXBjaCkKIAkJcmV0dXJuOwkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCiAJY2hhbi0+cHBwID0gTlVMTDsKIAogCS8qCkBAIC0yMDY4LDkgKzIxOTIsMTIgQEAKIAlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CiAJdXBfd3JpdGUoJnBjaC0+Y2hhbl9zZW0pOwogCXBwcF9kaXNjb25uZWN0X2NoYW5uZWwocGNoKTsKLQlzcGluX2xvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKworCXBuID0gcHBwX3Blcm5ldChwY2gtPmNoYW5fbmV0KTsKKwlzcGluX2xvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CiAJbGlzdF9kZWwoJnBjaC0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG4tPmFsbF9jaGFubmVsc19sb2NrKTsKKwogCXBjaC0+ZmlsZS5kZWFkID0gMTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBjaC0+ZmlsZS5yd2FpdCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBjaC0+ZmlsZS5yZWZjbnQpKQpAQCAtMjM5NSw5ICsyNTIyLDEwIEBACiAgKiB1bml0ID09IC0xIG1lYW5zIGFsbG9jYXRlIGEgbmV3IG51bWJlci4KICAqLwogc3RhdGljIHN0cnVjdCBwcHAgKgotcHBwX2NyZWF0ZV9pbnRlcmZhY2UoaW50IHVuaXQsIGludCAqcmV0cCkKK3BwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgaW50IHVuaXQsIGludCAqcmV0cCkKIHsKIAlzdHJ1Y3QgcHBwICpwcHA7CisJc3RydWN0IHBwcF9uZXQgKnBuOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCWludCByZXQgPSAtRU5PTUVNOwogCWludCBpOwpAQCAtMjQwNiw2ICsyNTM0LDggQEAKIAlpZiAoIWRldikKIAkJZ290byBvdXQxOwogCisJcG4gPSBwcHBfcGVybmV0KG5ldCk7CisKIAlwcHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXBwcC0+ZGV2ID0gZGV2OwogCXBwcC0+bXJ1ID0gUFBQX01SVTsKQEAgLTI0MjEsMTcgKzI1NTEsMjMgQEAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcHAtPm1ycSk7CiAjZW5kaWYgLyogQ09ORklHX1BQUF9NVUxUSUxJTksgKi8KIAorCS8qCisJICogZHJ1bSByb2xsOiBkb24ndCBmb3JnZXQgdG8gc2V0CisJICogdGhlIG5ldCBkZXZpY2UgaXMgYmVsb25nIHRvCisJICovCisJZGV2X25ldF9zZXQoZGV2LCBuZXQpOworCiAJcmV0ID0gLUVFWElTVDsKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKKwltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CiAKIAlpZiAodW5pdCA8IDApIHsKLQkJdW5pdCA9IHVuaXRfZ2V0KCZwcHBfdW5pdHNfaWRyLCBwcHApOworCQl1bml0ID0gdW5pdF9nZXQoJnBuLT51bml0c19pZHIsIHBwcCk7CiAJCWlmICh1bml0IDwgMCkgewogCQkJKnJldHAgPSB1bml0OwogCQkJZ290byBvdXQyOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHVuaXRfZmluZCgmcHBwX3VuaXRzX2lkciwgdW5pdCkpCisJCWlmICh1bml0X2ZpbmQoJnBuLT51bml0c19pZHIsIHVuaXQpKQogCQkJZ290byBvdXQyOyAvKiB1bml0IGFscmVhZHkgZXhpc3RzICovCiAJCS8qCiAJCSAqIGlmIGNhbGxlciBuZWVkIGEgc3BlY2lmaWVkIHVuaXQgbnVtYmVyCkBAIC0yNDQyLDcgKzI1NzgsNyBAQAogCQkgKiBmYWlyIGJ1dCBhdCBsZWFzdCBwcHBkIHdpbGwgYXNrIHVzIHRvIGFsbG9jYXRlCiAJCSAqIG5ldyB1bml0IGluIHRoaXMgY2FzZSBzbyB1c2VyIGlzIGhhcHB5IDopCiAJCSAqLwotCQl1bml0ID0gdW5pdF9zZXQoJnBwcF91bml0c19pZHIsIHBwcCwgdW5pdCk7CisJCXVuaXQgPSB1bml0X3NldCgmcG4tPnVuaXRzX2lkciwgcHBwLCB1bml0KTsKIAkJaWYgKHVuaXQgPCAwKQogCQkJZ290byBvdXQyOwogCX0KQEAgLTI0NTMsMjAgKzI1ODksMjIgQEAKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQl1bml0X3B1dCgmcHBwX3VuaXRzX2lkciwgdW5pdCk7CisJCXVuaXRfcHV0KCZwbi0+dW5pdHNfaWRyLCB1bml0KTsKIAkJcHJpbnRrKEtFUk5fRVJSICJQUFA6IGNvdWxkbid0IHJlZ2lzdGVyIGRldmljZSAlcyAoJWQpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCByZXQpOwogCQlnb3RvIG91dDI7CiAJfQogCisJcHBwLT5wcHBfbmV0ID0gbmV0OworCiAJYXRvbWljX2luYygmcHBwX3VuaXRfY291bnQpOwotCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CiAKIAkqcmV0cCA9IDA7CiAJcmV0dXJuIHBwcDsKIAogb3V0MjoKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCWZyZWVfbmV0ZGV2KGRldik7CiBvdXQxOgogCSpyZXRwID0gcmV0OwpAQCAtMjQ5Miw3ICsyNjMwLDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIHBwcF9zaHV0ZG93bl9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKQogewotCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKKworCXBuID0gcHBwX3Blcm5ldChwcHAtPnBwcF9uZXQpOworCW11dGV4X2xvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKKwogCS8qIFRoaXMgd2lsbCBjYWxsIGRldl9jbG9zZSgpIGZvciB1cy4gKi8KIAlwcHBfbG9jayhwcHApOwogCWlmICghcHBwLT5jbG9zaW5nKSB7CkBAIC0yNTAyLDExICsyNjQ0LDEyIEBACiAJfSBlbHNlCiAJCXBwcF91bmxvY2socHBwKTsKIAotCXVuaXRfcHV0KCZwcHBfdW5pdHNfaWRyLCBwcHAtPmZpbGUuaW5kZXgpOworCXVuaXRfcHV0KCZwbi0+dW5pdHNfaWRyLCBwcHAtPmZpbGUuaW5kZXgpOwogCXBwcC0+ZmlsZS5kZWFkID0gMTsKIAlwcHAtPm93bmVyID0gTlVMTDsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBwcC0+ZmlsZS5yd2FpdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKKworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogfQogCiAvKgpAQCAtMjU0Myw4ICsyNjg2LDcgQEAKIAlwcHAtPmFjdGl2ZV9maWx0ZXIgPSBOVUxMOwogI2VuZGlmIC8qIENPTkZJR19QUFBfRklMVEVSICovCiAKLQlpZiAocHBwLT54bWl0X3BlbmRpbmcpCi0JCWtmcmVlX3NrYihwcHAtPnhtaXRfcGVuZGluZyk7CisJa2ZyZWVfc2tiKHBwcC0+eG1pdF9wZW5kaW5nKTsKIAogCWZyZWVfbmV0ZGV2KHBwcC0+ZGV2KTsKIH0KQEAgLTI1NTQsOSArMjY5Niw5IEBACiAgKiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGxvY2tlZCB0aGUgYWxsX3BwcF9tdXRleC4KICAqLwogc3RhdGljIHN0cnVjdCBwcHAgKgotcHBwX2ZpbmRfdW5pdChpbnQgdW5pdCkKK3BwcF9maW5kX3VuaXQoc3RydWN0IHBwcF9uZXQgKnBuLCBpbnQgdW5pdCkKIHsKLQlyZXR1cm4gdW5pdF9maW5kKCZwcHBfdW5pdHNfaWRyLCB1bml0KTsKKwlyZXR1cm4gdW5pdF9maW5kKCZwbi0+dW5pdHNfaWRyLCB1bml0KTsKIH0KIAogLyoKQEAgLTI1NjgsMjAgKzI3MTAsMjIgQEAKICAqIHdoZW4gd2UgaGF2ZSBhIGxvdCBvZiBjaGFubmVscyBpbiB1c2UuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2hhbm5lbCAqCi1wcHBfZmluZF9jaGFubmVsKGludCB1bml0KQorcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KQogewogCXN0cnVjdCBjaGFubmVsICpwY2g7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJm5ld19jaGFubmVscywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocGNoLCAmcG4tPm5ld19jaGFubmVscywgbGlzdCkgewogCQlpZiAocGNoLT5maWxlLmluZGV4ID09IHVuaXQpIHsKLQkJCWxpc3RfbW92ZSgmcGNoLT5saXN0LCAmYWxsX2NoYW5uZWxzKTsKKwkJCWxpc3RfbW92ZSgmcGNoLT5saXN0LCAmcG4tPmFsbF9jaGFubmVscyk7CiAJCQlyZXR1cm4gcGNoOwogCQl9CiAJfQotCWxpc3RfZm9yX2VhY2hfZW50cnkocGNoLCAmYWxsX2NoYW5uZWxzLCBsaXN0KSB7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBuLT5hbGxfY2hhbm5lbHMsIGxpc3QpIHsKIAkJaWYgKHBjaC0+ZmlsZS5pbmRleCA9PSB1bml0KQogCQkJcmV0dXJuIHBjaDsKIAl9CisKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjU5MiwxMSArMjczNiwxNCBAQAogcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgcHBwICpwcHA7CisJc3RydWN0IHBwcF9uZXQgKnBuOwogCWludCByZXQgPSAtRU5YSU87CiAJaW50IGhkcmxlbjsKIAotCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwotCXBwcCA9IHBwcF9maW5kX3VuaXQodW5pdCk7CisJcG4gPSBwcHBfcGVybmV0KHBjaC0+Y2hhbl9uZXQpOworCisJbXV0ZXhfbG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOworCXBwcCA9IHBwcF9maW5kX3VuaXQocG4sIHVuaXQpOwogCWlmICghcHBwKQogCQlnb3RvIG91dDsKIAl3cml0ZV9sb2NrX2JoKCZwY2gtPnVwbCk7CkBAIC0yNjIwLDcgKzI3NjcsNyBAQAogIG91dGw6CiAJd3JpdGVfdW5sb2NrX2JoKCZwY2gtPnVwbCk7CiAgb3V0OgotCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjY3Nyw3ICsyODI0LDcgQEAKIAl1bnJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiKTsKIAlkZXZpY2VfZGVzdHJveShwcHBfY2xhc3MsIE1LREVWKFBQUF9NQUpPUiwgMCkpOwogCWNsYXNzX2Rlc3Ryb3kocHBwX2NsYXNzKTsKLQlpZHJfZGVzdHJveSgmcHBwX3VuaXRzX2lkcik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBfbmV0X2lkLCAmcHBwX25ldF9vcHMpOwogfQogCiAvKgpAQCAtMjc0Myw2ICsyODkwLDcgQEAKIG1vZHVsZV9pbml0KHBwcF9pbml0KTsKIG1vZHVsZV9leGl0KHBwcF9jbGVhbnVwKTsKIAorRVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwpOwogRVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfY2hhbm5lbCk7CiBFWFBPUlRfU1lNQk9MKHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwpOwogRVhQT1JUX1NZTUJPTChwcHBfY2hhbm5lbF9pbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwppbmRleCAxZTg5MmI3Li5kMmZhMmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogewogCXN0cnVjdCBzeW5jcHBwICphcDsKIAlpbnQgZXJyOworCWludCBzcGVlZDsKIAogCWlmICh0dHktPm9wcy0+d3JpdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMjM0LDYgKzIzNSw4IEBACiAJYXAtPmNoYW4ub3BzID0gJnN5bmNfb3BzOwogCWFwLT5jaGFuLm10dSA9IFBQUF9NUlU7CiAJYXAtPmNoYW4uaGRybGVuID0gMjsJLyogZm9yIEEvQyBieXRlcyAqLworCXNwZWVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwlhcC0+Y2hhbi5zcGVlZCA9IHNwZWVkOwogCWVyciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKCZhcC0+Y2hhbik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKQEAgLTI4MSw4ICsyODQsNyBAQAogCiAJcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCXNrYl9xdWV1ZV9wdXJnZSgmYXAtPnJxdWV1ZSk7Ci0JaWYgKGFwLT50cGt0KQotCQlrZnJlZV9za2IoYXAtPnRwa3QpOworCWtmcmVlX3NrYihhcC0+dHBrdCk7CiAJa2ZyZWUoYXApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCBjMjJiMzA1Li5mMDAzMWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTc4LDM4ICs3OCw3MyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBQUFBPRV9IQVNIX0JJVFMgNAotI2RlZmluZSBQUFBPRV9IQVNIX1NJWkUgKDE8PFBQUE9FX0hBU0hfQklUUykKLQotc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7CisjZGVmaW5lIFBQUE9FX0hBU0hfU0laRSAoMSA8PCBQUFBPRV9IQVNIX0JJVFMpCisjZGVmaW5lIFBQUE9FX0hBU0hfTUFTSwkoUFBQT0VfSEFTSF9TSVpFIC0gMSkKIAogc3RhdGljIGludCBwcHBvZV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgX19wcHBvZV94bWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wczsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHBwcG9lX2hhc2hfbG9jayk7Ci0KIHN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzOwogCisvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgcHBwb2VfbmV0X2lkOworc3RydWN0IHBwcG9lX25ldCB7CisJLyoKKwkgKiB3ZSBjb3VsZCB1c2UgX3NpbmdsZV8gaGFzaCB0YWJsZSBmb3IgYWxsCisJICogbmV0cyBieSBpbmplY3RpbmcgbmV0IGlkIGludG8gdGhlIGhhc2ggYnV0CisJICogaXQgd291bGQgaW5jcmVhc2UgaGFzaCBjaGFpbnMgYW5kIGFkZAorCSAqIGEgZmV3IGFkZGl0aW9uYWwgbWF0aCBjb21wYXJhdGlvbnMgbWVzc3kKKwkgKiBhcyB3ZWxsLCBtb3Jlb3ZlciBpbiBjYXNlIG9mIFNNUCBsZXNzIGxvY2tpbmcKKwkgKiBjb250cm92ZXJzeSBoZXJlCisJICovCisJc3RydWN0IHBwcG94X3NvY2sgKmhhc2hfdGFibGVbUFBQT0VfSEFTSF9TSVpFXTsKKwlyd2xvY2tfdCBoYXNoX2xvY2s7Cit9OworCisvKiB0byBlbGltaW5hdGUgYSByYWNlIGJ0dyBwcHBvZV9mbHVzaF9kZXYgYW5kIHBwcG9lX3JlbGVhc2UgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmx1c2hfbG9jayk7CisKKy8qCisgKiBQUFBvRSBjb3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIHN0YWdlczoKKyAqIDEpIERpc2NvdmVyeSBzdGFnZSAodG8gb2J0YWluIHJlbW90ZSBNQUMgYW5kIFNlc3Npb24gSUQpCisgKiAyKSBTZXNzaW9uIHN0YWdlIChNQUMgYW5kIFNJRCBhcmUga25vd24pCisgKgorICogRXRoZXJuZXQgZnJhbWVzIGhhdmUgYSBzcGVjaWFsIHRhZyBmb3IgdGhpcyBidXQKKyAqIHdlIHVzZSBzaW1wbGllciBhcHByb2FjaCBiYXNlZCBvbiBzZXNzaW9uIGlkCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFnZV9zZXNzaW9uKF9fYmUxNiBzaWQpCit7CisJcmV0dXJuIHNpZCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvZV9uZXQgKnBwcG9lX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJQlVHX09OKCFuZXQpOworCisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY21wXzJfYWRkcihzdHJ1Y3QgcHBwb2VfYWRkciAqYSwgc3RydWN0IHBwcG9lX2FkZHIgKmIpCiB7Ci0JcmV0dXJuIChhLT5zaWQgPT0gYi0+c2lkICYmCi0JCShtZW1jbXAoYS0+cmVtb3RlLCBiLT5yZW1vdGUsIEVUSF9BTEVOKSA9PSAwKSk7CisJcmV0dXJuIGEtPnNpZCA9PSBiLT5zaWQgJiYgIW1lbWNtcChhLT5yZW1vdGUsIGItPnJlbW90ZSwgRVRIX0FMRU4pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjbXBfYWRkcihzdHJ1Y3QgcHBwb2VfYWRkciAqYSwgX19iZTE2IHNpZCwgY2hhciAqYWRkcikKIHsKLQlyZXR1cm4gKGEtPnNpZCA9PSBzaWQgJiYKLQkJKG1lbWNtcChhLT5yZW1vdGUsYWRkcixFVEhfQUxFTikgPT0gMCkpOworCXJldHVybiBhLT5zaWQgPT0gc2lkICYmICFtZW1jbXAoYS0+cmVtb3RlLCBhZGRyLCBFVEhfQUxFTik7CiB9CiAKLSNpZiA4JVBQUE9FX0hBU0hfQklUUworI2lmIDggJSBQUFBPRV9IQVNIX0JJVFMKICNlcnJvciA4IG11c3QgYmUgYSBtdWx0aXBsZSBvZiBQUFBPRV9IQVNIX0JJVFMKICNlbmRpZgogCkBAIC0xMTgsNjkgKzE1Myw3MSBAQAogCXVuc2lnbmVkIGNoYXIgaGFzaCA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwIDsgaSA8IEVUSF9BTEVOIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCiAJCWhhc2ggXj0gYWRkcltpXTsKLQl9Ci0JZm9yIChpID0gMCA7IGkgPCBzaXplb2Yoc2lkX3QpKjggOyBpICs9IDggKXsKLQkJaGFzaCBePSAoX19mb3JjZSBfX3UzMilzaWQ+Pmk7Ci0JfQotCWZvciAoaSA9IDggOyAoaT4+PTEpID49IFBQUE9FX0hBU0hfQklUUyA7ICkgewotCQloYXNoIF49IGhhc2g+Pmk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2lkX3QpICogODsgaSArPSA4KQorCQloYXNoIF49IChfX2ZvcmNlIF9fdTMyKXNpZCA+PiBpOworCWZvciAoaSA9IDg7IChpID4+PSAxKSA+PSBQUFBPRV9IQVNIX0JJVFM7KQorCQloYXNoIF49IGhhc2ggPj4gaTsKIAotCXJldHVybiBoYXNoICYgKCBQUFBPRV9IQVNIX1NJWkUgLSAxICk7CisJcmV0dXJuIGhhc2ggJiBQUFBPRV9IQVNIX01BU0s7CiB9CiAKLS8qIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKml0ZW1faGFzaF90YWJsZVtQUFBPRV9IQVNIX1NJWkVdOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqICBTZXQvZ2V0L2RlbGV0ZS9yZWhhc2ggaXRlbXMgIChpbnRlcm5hbCB2ZXJzaW9ucykKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcHBwb3hfc29jayAqX19nZXRfaXRlbShfX2JlMTYgc2lkLCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgcHBwb3hfc29jayAqX19nZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCwKKwkJCQl1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleCkKIHsKIAlpbnQgaGFzaCA9IGhhc2hfaXRlbShzaWQsIGFkZHIpOwogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07CisJcmV0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CisJd2hpbGUgKHJldCkgeworCQlpZiAoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KQorCQkJcmV0dXJuIHJldDsKIAotCXdoaWxlIChyZXQgJiYgIShjbXBfYWRkcigmcmV0LT5wcHBvZV9wYSwgc2lkLCBhZGRyKSAmJiByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkpCiAJCXJldCA9IHJldC0+bmV4dDsKKwl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IF9fc2V0X2l0ZW0oc3RydWN0IHBwcG94X3NvY2sgKnBvKQorc3RhdGljIGludCBfX3NldF9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBzdHJ1Y3QgcHBwb3hfc29jayAqcG8pCiB7CiAJaW50IGhhc2ggPSBoYXNoX2l0ZW0ocG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSk7CiAJc3RydWN0IHBwcG94X3NvY2sgKnJldDsKIAotCXJldCA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlyZXQgPSBwbi0+aGFzaF90YWJsZVtoYXNoXTsKIAl3aGlsZSAocmV0KSB7Ci0JCWlmIChjbXBfMl9hZGRyKCZyZXQtPnBwcG9lX3BhLCAmcG8tPnBwcG9lX3BhKSAmJiByZXQtPnBwcG9lX2lmaW5kZXggPT0gcG8tPnBwcG9lX2lmaW5kZXgpCisJCWlmIChjbXBfMl9hZGRyKCZyZXQtPnBwcG9lX3BhLCAmcG8tPnBwcG9lX3BhKSAmJgorCQkgICAgcmV0LT5wcHBvZV9pZmluZGV4ID09IHBvLT5wcHBvZV9pZmluZGV4KQogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAogCQlyZXQgPSByZXQtPm5leHQ7CiAJfQogCi0JcG8tPm5leHQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07Ci0JaXRlbV9oYXNoX3RhYmxlW2hhc2hdID0gcG87CisJcG8tPm5leHQgPSBwbi0+aGFzaF90YWJsZVtoYXNoXTsKKwlwbi0+aGFzaF90YWJsZVtoYXNoXSA9IHBvOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHBwb3hfc29jayAqX19kZWxldGVfaXRlbShfX2JlMTYgc2lkLCBjaGFyICphZGRyLCBpbnQgaWZpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgcHBwb3hfc29jayAqX19kZWxldGVfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCwKKwkJCQkJY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJaW50IGhhc2ggPSBoYXNoX2l0ZW0oc2lkLCBhZGRyKTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcmV0LCAqKnNyYzsKIAotCXJldCA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKLQlzcmMgPSAmaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCXJldCA9IHBuLT5oYXNoX3RhYmxlW2hhc2hdOworCXNyYyA9ICZwbi0+aGFzaF90YWJsZVtoYXNoXTsKIAogCXdoaWxlIChyZXQpIHsKLQkJaWYgKGNtcF9hZGRyKCZyZXQtPnBwcG9lX3BhLCBzaWQsIGFkZHIpICYmIHJldC0+cHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7CisJCWlmIChjbXBfYWRkcigmcmV0LT5wcHBvZV9wYSwgc2lkLCBhZGRyKSAmJgorCQkgICAgcmV0LT5wcHBvZV9pZmluZGV4ID09IGlmaW5kZXgpIHsKIAkJCSpzcmMgPSByZXQtPm5leHQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTk3LDQ2ICsyMzQsNTQgQEAKICAqICBTZXQvZ2V0L2RlbGV0ZS9yZWhhc2ggaXRlbXMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmdldF9pdGVtKF9fYmUxNiBzaWQsCi0JCQkJCSB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmdldF9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLAorCQkJCQl1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleCkKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CiAKLQlyZWFkX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JcG8gPSBfX2dldF9pdGVtKHNpZCwgYWRkciwgaWZpbmRleCk7CisJcmVhZF9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlwbyA9IF9fZ2V0X2l0ZW0ocG4sIHNpZCwgYWRkciwgaWZpbmRleCk7CiAJaWYgKHBvKQogCQlzb2NrX2hvbGQoc2tfcHBwb3gocG8pKTsKLQlyZWFkX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwlyZWFkX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAKIAlyZXR1cm4gcG87CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmdldF9pdGVtX2J5X2FkZHIoc3RydWN0IHNvY2thZGRyX3BwcG94ICpzcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmdldF9pdGVtX2J5X2FkZHIoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkJc3RydWN0IHNvY2thZGRyX3BwcG94ICpzcCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCXN0cnVjdCBwcHBveF9zb2NrICpwcHBveF9zb2NrOworCiAJaW50IGlmaW5kZXg7CiAKLQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBzcC0+c2FfYWRkci5wcHBvZS5kZXYpOwotCWlmKCFkZXYpCisJZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKKwlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CisKIAlpZmluZGV4ID0gZGV2LT5pZmluZGV4OworCXBuID0gbmV0X2dlbmVyaWMobmV0LCBwcHBvZV9uZXRfaWQpOworCXBwcG94X3NvY2sgPSBnZXRfaXRlbShwbiwgc3AtPnNhX2FkZHIucHBwb2Uuc2lkLAorCQkJCXNwLT5zYV9hZGRyLnBwcG9lLnJlbW90ZSwgaWZpbmRleCk7CiAJZGV2X3B1dChkZXYpOwotCXJldHVybiBnZXRfaXRlbShzcC0+c2FfYWRkci5wcHBvZS5zaWQsIHNwLT5zYV9hZGRyLnBwcG9lLnJlbW90ZSwgaWZpbmRleCk7CisKKwlyZXR1cm4gcHBwb3hfc29jazsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqZGVsZXRlX2l0ZW0oX19iZTE2IHNpZCwgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpkZWxldGVfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCwKKwkJCQkJY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IHBwcG94X3NvY2sgKnJldDsKIAotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JcmV0ID0gX19kZWxldGVfaXRlbShzaWQsIGFkZHIsIGlmaW5kZXgpOwotCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlyZXQgPSBfX2RlbGV0ZV9pdGVtKHBuLCBzaWQsIGFkZHIsIGlmaW5kZXgpOworCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqICBIYW5kbGVyIGZvciBkZXZpY2UgZXZlbnRzLgpAQCAtMjQ2LDI1ICsyOTEsMzMgQEAKIAogc3RhdGljIHZvaWQgcHBwb2VfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IGhhc2g7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CisJaW50IGk7CisKIAlCVUdfT04oZGV2ID09IE5VTEwpOwogCi0Jd3JpdGVfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKLQlmb3IgKGhhc2ggPSAwOyBoYXNoIDwgUFBQT0VfSEFTSF9TSVpFOyBoYXNoKyspIHsKLQkJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7CisJaWYgKCFwbikgLyogYWxyZWFkeSBmcmVlZCAqLworCQlyZXR1cm47CisKKwl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBQT0VfSEFTSF9TSVpFOyBpKyspIHsKKwkJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcG4tPmhhc2hfdGFibGVbaV07CiAKIAkJd2hpbGUgKHBvICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzb2NrICpzayA9IHNrX3BwcG94KHBvKTsKKwkJCXN0cnVjdCBzb2NrICpzazsKIAkJCWlmIChwby0+cHBwb2VfZGV2ICE9IGRldikgewogCQkJCXBvID0gcG8tPm5leHQ7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlzayA9IHNrX3BwcG94KHBvKTsKKwkJCXNwaW5fbG9jaygmZmx1c2hfbG9jayk7CiAJCQlwby0+cHBwb2VfZGV2ID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrKCZmbHVzaF9sb2NrKTsKIAkJCWRldl9wdXQoZGV2KTsKIAotCiAJCQkvKiBXZSBhbHdheXMgZ3JhYiB0aGUgc29ja2V0IGxvY2ssIGZvbGxvd2VkIGJ5IHRoZQotCQkJICogcHBwb2VfaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkCisJCQkgKiBoYXNoX2xvY2ssIGluIHRoYXQgb3JkZXIuICBTaW5jZSB3ZSBzaG91bGQKIAkJCSAqIGhvbGQgdGhlIHNvY2sgbG9jayB3aGlsZSBkb2luZyBhbnkgdW5iaW5kaW5nLAogCQkJICogd2UgbmVlZCB0byByZWxlYXNlIHRoZSBsb2NrIHdlJ3JlIGhvbGRpbmcuCiAJCQkgKiBIb2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBzb2NrIHNvIGl0IGRvZXNuJ3QgZGlzYXBwZWFyCkBAIC0yNzMsNyArMzI2LDcgQEAKIAogCQkJc29ja19ob2xkKHNrKTsKIAotCQkJd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCQkJd3JpdGVfdW5sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAkJCWxvY2tfc29jayhzayk7CiAKIAkJCWlmIChzay0+c2tfc3RhdGUgJiAoUFBQT1hfQ09OTkVDVEVEIHwgUFBQT1hfQk9VTkQpKSB7CkBAIC0yODksMjAgKzM0MiwxNyBAQAogCQkJICogV2hpbGUgdGhlIGxvY2sgd2FzIGRyb3BwZWQgdGhlIGNoYWluIGNvbnRlbnRzIG1heQogCQkJICogaGF2ZSBjaGFuZ2VkLgogCQkJICovCi0JCQl3cml0ZV9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCQkJcG8gPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07CisJCQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwkJCXBvID0gcG4tPmhhc2hfdGFibGVbaV07CiAJCX0KIAl9Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIHB0cjsKLQotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAogCS8qIE9ubHkgbG9vayBhdCBzb2NrZXRzIHRoYXQgYXJlIHVzaW5nIHRoaXMgc3BlY2lmaWMgZGV2aWNlLiAqLwogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTMyNCwxMiArMzc0LDEwIEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBwb2Vfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBwcHBvZV9kZXZpY2VfZXZlbnQsCiB9OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBEbyB0aGUgcmVhbCB3b3JrIG9mIHJlY2VpdmluZyBhIFBQUG9FIFNlc3Npb24gZnJhbWUuCkBAIC0zNDMsOCArMzkxLDggQEAKIAlpZiAoc2stPnNrX3N0YXRlICYgUFBQT1hfQk9VTkQpIHsKIAkJcHBwX2lucHV0KCZwby0+Y2hhbiwgc2tiKTsKIAl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSAmIFBQUE9YX1JFTEFZKSB7Ci0JCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcigmcG8tPnBwcG9lX3JlbGF5KTsKLQorCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoZGV2X25ldChwby0+cHBwb2VfZGV2KSwKKwkJCQkJCSZwby0+cHBwb2VfcmVsYXkpOwogCQlpZiAocmVsYXlfcG8gPT0gTlVMTCkKIAkJCWdvdG8gYWJvcnRfa2ZyZWU7CiAKQEAgLTM3MywyMiArNDIxLDE4IEBACiAgKiBSZWNlaXZlIHdyYXBwZXIgY2FsbGVkIGluIEJIIGNvbnRleHQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQotCitzdGF0aWMgaW50IHBwcG9lX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAJaW50IGxlbjsKIAotCWlmICghKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSkKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJZ290byBkcm9wOwotCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpKSkKIAkJZ290byBkcm9wOwogCkBAIC00MDIsNyArNDQ2LDggQEAKIAlpZiAocHNrYl90cmltX3Jjc3VtKHNrYiwgbGVuKSkKIAkJZ290byBkcm9wOwogCi0JcG8gPSBnZXRfaXRlbShwaC0+c2lkLCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBkZXYtPmlmaW5kZXgpOworCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7CisJcG8gPSBnZXRfaXRlbShwbiwgcGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKIAlpZiAoIXBvKQogCQlnb3RvIGRyb3A7CiAKQEAgLTQyMCwxOSArNDY1LDE2IEBACiAgKiBUaGlzIGlzIHNvbGVseSBmb3IgZGV0ZWN0aW9uIG9mIFBBRFQgZnJhbWVzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV9kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LAotCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCitzdGF0aWMgaW50IHBwcG9lX2Rpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIAogewogCXN0cnVjdCBwcHBvZV9oZHIgKnBoOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKIAotCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQotCQlnb3RvIGFib3J0OwotCi0JaWYgKCEoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpKQorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQogCQlnb3RvIG91dDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSkpCkBAIC00NDIsNyArNDg0LDggQEAKIAlpZiAocGgtPmNvZGUgIT0gUEFEVF9DT0RFKQogCQlnb3RvIGFib3J0OwogCi0JcG8gPSBnZXRfaXRlbShwaC0+c2lkLCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBkZXYtPmlmaW5kZXgpOworCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7CisJcG8gPSBnZXRfaXRlbShwbiwgcGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKIAlpZiAocG8pIHsKIAkJc3RydWN0IHNvY2sgKnNrID0gc2tfcHBwb3gocG8pOwogCkBAIC00NzAsMTcgKzUxMywxNyBAQAogCXJldHVybiBORVRfUlhfU1VDQ0VTUzsgLyogTGllcy4uLiA6LSkgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZXNfcHR5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BQUF9TRVMpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZXNfcHR5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpLAogCS5mdW5jCT0gcHBwb2VfcmN2LAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZWRfcHR5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BQUF9ESVNDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VkX3B0eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBfRElTQyksCiAJLmZ1bmMJPSBwcHBvZV9kaXNjX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG8gcHBwb2Vfc2tfcHJvdG8gPSB7CitzdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJICA9ICJQUFBPRSIsCiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IHBwcG94X3NvY2spLApAQCAtNDkzLDM4ICs1MzYsMzcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBwcHBvZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewotCWludCBlcnJvciA9IC1FTk9NRU07CiAJc3RydWN0IHNvY2sgKnNrOwogCiAJc2sgPSBza19hbGxvYyhuZXQsIFBGX1BQUE9YLCBHRlBfS0VSTkVMLCAmcHBwb2Vfc2tfcHJvdG8pOwogCWlmICghc2spCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKIAotCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7Ci0Jc29jay0+b3BzICAgPSAmcHBwb2Vfb3BzOworCXNvY2stPnN0YXRlCT0gU1NfVU5DT05ORUNURUQ7CisJc29jay0+b3BzCT0gJnBwcG9lX29wczsKIAotCXNrLT5za19iYWNrbG9nX3JjdiA9IHBwcG9lX3Jjdl9jb3JlOwotCXNrLT5za19zdGF0ZQkgICA9IFBQUE9YX05PTkU7Ci0Jc2stPnNrX3R5cGUJICAgPSBTT0NLX1NUUkVBTTsKLQlzay0+c2tfZmFtaWx5CSAgID0gUEZfUFBQT1g7Ci0Jc2stPnNrX3Byb3RvY29sCSAgID0gUFhfUFJPVE9fT0U7CisJc2stPnNrX2JhY2tsb2dfcmN2CT0gcHBwb2VfcmN2X2NvcmU7CisJc2stPnNrX3N0YXRlCQk9IFBQUE9YX05PTkU7CisJc2stPnNrX3R5cGUJCT0gU09DS19TVFJFQU07CisJc2stPnNrX2ZhbWlseQkJPSBQRl9QUFBPWDsKKwlzay0+c2tfcHJvdG9jb2wJCT0gUFhfUFJPVE9fT0U7CiAKLQllcnJvciA9IDA7Ci1vdXQ6CXJldHVybiBlcnJvcjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwcHBvZV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOwogCiAJaWYgKCFzaykKIAkJcmV0dXJuIDA7CiAKIAlsb2NrX3NvY2soc2spOwotCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpeworCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJcmV0dXJuIC1FQkFERjsKIAl9CkBAIC01MzQsMjYgKzU3NiwzOSBAQAogCS8qIFNpZ25hbCB0aGUgZGVhdGggb2YgdGhlIHNvY2tldC4gKi8KIAlzay0+c2tfc3RhdGUgPSBQUFBPWF9ERUFEOwogCisJLyoKKwkgKiBwcHBvZV9mbHVzaF9kZXYgY291bGQgbGVhZCB0byBhIHJhY2Ugd2l0aAorCSAqIHRoaXMgcm91dGluZSBzbyB3ZSB1c2UgZmx1c2hfbG9jayB0byBlbGltaW5hdGUKKwkgKiBzdWNoIGEgY2FzZSAod2Ugb25seSBuZWVkIHBlci1uZXQgc3BlY2lmaWMgZGF0YSkKKwkgKi8KKwlzcGluX2xvY2soJmZsdXNoX2xvY2spOworCXBvID0gcHBwb3hfc2soc2spOworCWlmICghcG8tPnBwcG9lX2RldikgeworCQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7CisJCWdvdG8gb3V0OworCX0KKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KHBvLT5wcHBvZV9kZXYpKTsKKwlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7CiAKLQkvKiBXcml0ZSBsb2NrIG9uIGhhc2ggbG9jayBwcm90ZWN0cyB0aGUgZW50aXJlICJwbyIgc3RydWN0IGZyb20KLQkgKiBjb25jdXJyZW50IHVwZGF0ZXMgdmlhIHBwcG9lX2ZsdXNoX2Rldi4gVGhlICJwbyIgc3RydWN0IHNob3VsZAotCSAqIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgaGFzaCB0YWJsZSBjb250ZW50cywgdGh1cyBwcm90ZWN0ZWQKLQkgKiBieSB0aGUgaGFzaCB0YWJsZSBsb2NrICovCi0Jd3JpdGVfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkvKgorCSAqIHByb3RlY3QgInBvIiBmcm9tIGNvbmN1cnJlbnQgdXBkYXRlcworCSAqIG9uIHBwcG9lX2ZsdXNoX2RldgorCSAqLworCXdyaXRlX2xvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcG8gPSBwcHBveF9zayhzayk7Ci0JaWYgKHBvLT5wcHBvZV9wYS5zaWQpIHsKLQkJX19kZWxldGVfaXRlbShwby0+cHBwb2VfcGEuc2lkLAotCQkJICAgICAgcG8tPnBwcG9lX3BhLnJlbW90ZSwgcG8tPnBwcG9lX2lmaW5kZXgpOwotCX0KKwlpZiAoc3RhZ2Vfc2Vzc2lvbihwby0+cHBwb2VfcGEuc2lkKSkKKwkJX19kZWxldGVfaXRlbShwbiwgcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwKKwkJCQlwby0+cHBwb2VfaWZpbmRleCk7CiAKIAlpZiAocG8tPnBwcG9lX2RldikgewogCQlkZXZfcHV0KHBvLT5wcHBvZV9kZXYpOwogCQlwby0+cHBwb2VfZGV2ID0gTlVMTDsKIAl9CiAKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAorb3V0OgogCXNvY2tfb3JwaGFuKHNrKTsKIAlzb2NrLT5zayA9IE5VTEw7CiAKQEAgLTU2NCwxNCArNjE5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdXNlcnZhZGRyLAogCQkgIGludCBzb2NrYWRkcl9sZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3AgPSAoc3RydWN0IHNvY2thZGRyX3BwcG94ICopIHVzZXJ2YWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqKXVzZXJ2YWRkcjsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKIAlpbnQgZXJyb3I7CiAKIAlsb2NrX3NvY2soc2spOwpAQCAtNTgyLDQ0ICs2MzcsNDUgQEAKIAogCS8qIENoZWNrIGZvciBhbHJlYWR5IGJvdW5kIHNvY2tldHMgKi8KIAllcnJvciA9IC1FQlVTWTsKLQlpZiAoKHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkgJiYgc3AtPnNhX2FkZHIucHBwb2Uuc2lkKQorCWlmICgoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSAmJgorCSAgICAgc3RhZ2Vfc2Vzc2lvbihzcC0+c2FfYWRkci5wcHBvZS5zaWQpKQogCQlnb3RvIGVuZDsKIAogCS8qIENoZWNrIGZvciBhbHJlYWR5IGRpc2Nvbm5lY3RlZCBzb2NrZXRzLCBvbiBhdHRlbXB0cyB0byBkaXNjb25uZWN0ICovCiAJZXJyb3IgPSAtRUFMUkVBRFk7Ci0JaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKSAmJiAhc3AtPnNhX2FkZHIucHBwb2Uuc2lkICkKKwlpZiAoKHNrLT5za19zdGF0ZSAmIFBQUE9YX0RFQUQpICYmCisJICAgICAhc3RhZ2Vfc2Vzc2lvbihzcC0+c2FfYWRkci5wcHBvZS5zaWQpKQogCQlnb3RvIGVuZDsKIAogCWVycm9yID0gMDsKLQlpZiAocG8tPnBwcG9lX3BhLnNpZCkgeworCisJLyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqLworCWlmIChzdGFnZV9zZXNzaW9uKHBvLT5wcHBvZV9wYS5zaWQpKSB7CiAJCXBwcG94X3VuYmluZF9zb2NrKHNrKTsKLQotCQkvKiBEZWxldGUgdGhlIG9sZCBiaW5kaW5nICovCi0JCWRlbGV0ZV9pdGVtKHBvLT5wcHBvZV9wYS5zaWQscG8tPnBwcG9lX3BhLnJlbW90ZSxwby0+cHBwb2VfaWZpbmRleCk7Ci0KLQkJaWYocG8tPnBwcG9lX2RldikKKwkJaWYgKHBvLT5wcHBvZV9kZXYpIHsKKwkJCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQocG8tPnBwcG9lX2RldikpOworCQkJZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsCisJCQkJcG8tPnBwcG9lX3BhLnJlbW90ZSwgcG8tPnBwcG9lX2lmaW5kZXgpOwogCQkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKLQorCQl9CiAJCW1lbXNldChza19wcHBveChwbykgKyAxLCAwLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBveF9zb2NrKSAtIHNpemVvZihzdHJ1Y3Qgc29jaykpOwotCiAJCXNrLT5za19zdGF0ZSA9IFBQUE9YX05PTkU7CiAJfQogCi0JLyogRG9uJ3QgcmUtYmluZCBpZiBzaWQ9PTAgKi8KLQlpZiAoc3AtPnNhX2FkZHIucHBwb2Uuc2lkICE9IDApIHsKLQkJZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKLQorCS8qIFJlLWJpbmQgaW4gc2Vzc2lvbiBzdGFnZSBvbmx5ICovCisJaWYgKHN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkgewogCQllcnJvciA9IC1FTk9ERVY7CisJCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7CiAJCWlmICghZGV2KQogCQkJZ290byBlbmQ7CiAKIAkJcG8tPnBwcG9lX2RldiA9IGRldjsKIAkJcG8tPnBwcG9lX2lmaW5kZXggPSBkZXYtPmlmaW5kZXg7Ci0KLQkJd3JpdGVfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKLQkJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpewotCQkJd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCQlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwkJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKKwkJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlnb3RvIGVycl9wdXQ7CiAJCX0KIApAQCAtNjI3LDggKzY4Myw4IEBACiAJCSAgICAgICAmc3AtPnNhX2FkZHIucHBwb2UsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwcG9lX2FkZHIpKTsKIAotCQllcnJvciA9IF9fc2V0X2l0ZW0ocG8pOwotCQl3cml0ZV91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJCWVycm9yID0gX19zZXRfaXRlbShwbiwgcG8pOworCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQlpZiAoZXJyb3IgPCAwKQogCQkJZ290byBlcnJfcHV0OwogCkBAIC02MzksNyArNjk1LDcgQEAKIAkJcG8tPmNoYW4ucHJpdmF0ZSA9IHNrOwogCQlwby0+Y2hhbi5vcHMgPSAmcHBwb2VfY2hhbl9vcHM7CiAKLQkJZXJyb3IgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmcG8tPmNoYW4pOworCQllcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChkZXZfbmV0KGRldiksICZwby0+Y2hhbik7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXJyX3B1dDsKIApAQCAtNjQ4LDcgKzcwNCw3IEBACiAKIAlwby0+bnVtID0gc3AtPnNhX2FkZHIucHBwb2Uuc2lkOwogCi0gZW5kOgorZW5kOgogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycm9yOwogZXJyX3B1dDoKQEAgLTY1OSw3ICs3MTUsNiBAQAogCWdvdG8gZW5kOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2VfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogCQkgIGludCAqdXNvY2thZGRyX2xlbiwgaW50IHBlZXIpCiB7CkBAIC02NzgsNyArNzMzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IHBwcG9lX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNjkwLDcgKzc0NCw2IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBQUElPQ0dNUlU6CiAJCWVyciA9IC1FTlhJTzsKLQogCQlpZiAoIShzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpKQogCQkJYnJlYWs7CiAKQEAgLTY5OCw3ICs3NTEsNyBAQAogCQlpZiAocHV0X3VzZXIocG8tPnBwcG9lX2Rldi0+bXR1IC0KIAkJCSAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpIC0KIAkJCSAgICAgUFBQX0hEUkxFTiwKLQkJCSAgICAgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJCSAgICAgKGludCBfX3VzZXIgKilhcmcpKQogCQkJYnJlYWs7CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtNzA5LDcgKzc2Miw3IEBACiAJCQlicmVhazsKIAogCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoZ2V0X3VzZXIodmFsLChpbnQgX191c2VyICopIGFyZykpCisJCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKSkKIAkJCWJyZWFrOwogCiAJCWlmICh2YWwgPCAocG8tPnBwcG9lX2Rldi0+bXR1CkBAIC03MjIsNyArNzc1LDcgQEAKIAogCWNhc2UgUFBQSU9DU0ZMQUdTOgogCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBhcmcpKQorCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQlicmVhazsKIAkJZXJyID0gMDsKIAkJYnJlYWs7CkBAIC03NDksMTMgKzgwMiwxMiBAQAogCiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmIChwby0+cHBwb2VfcmVsYXkuc2FfZmFtaWx5ICE9IEFGX1BQUE9YIHx8Ci0JCSAgICBwby0+cHBwb2VfcmVsYXkuc2FfcHJvdG9jb2whPSBQWF9QUk9UT19PRSkKKwkJICAgIHBvLT5wcHBvZV9yZWxheS5zYV9wcm90b2NvbCAhPSBQWF9QUk9UT19PRSkKIAkJCWJyZWFrOwogCiAJCS8qIENoZWNrIHRoYXQgdGhlIHNvY2tldCByZWZlcmVuY2VkIGJ5IHRoZSBhZGRyZXNzCiAJCSAgIGFjdHVhbGx5IGV4aXN0cy4gKi8KLQkJcmVsYXlfcG8gPSBnZXRfaXRlbV9ieV9hZGRyKCZwby0+cHBwb2VfcmVsYXkpOwotCisJCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcihzb2NrX25ldChzayksICZwby0+cHBwb2VfcmVsYXkpOwogCQlpZiAoIXJlbGF5X3BvKQogCQkJYnJlYWs7CiAKQEAgLTc4MSw3ICs4MzMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKQogewpAQCAtODA4LDcgKzg1OSw3IEBACiAJZGV2ID0gcG8tPnBwcG9lX2RldjsKIAogCWVycm9yID0gLUVNU0dTSVpFOwotIAlpZiAodG90YWxfbGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQorCWlmICh0b3RhbF9sZW4gPiAoZGV2LT5tdHUgKyBkZXYtPmhhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gZW5kOwogCiAKQEAgLTgyNiwxMyArODc3LDEyIEBACiAJc2tiLT5kZXYgPSBkZXY7CiAKIAlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BQUF9TRVMpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBfU0VTKTsKIAotCXBoID0gKHN0cnVjdCBwcHBvZV9oZHIgKikgc2tiX3B1dChza2IsIHRvdGFsX2xlbiArIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSk7Ci0Jc3RhcnQgPSAoY2hhciAqKSAmcGgtPnRhZ1swXTsKKwlwaCA9IChzdHJ1Y3QgcHBwb2VfaGRyICopc2tiX3B1dChza2IsIHRvdGFsX2xlbiArIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSk7CisJc3RhcnQgPSAoY2hhciAqKSZwaC0+dGFnWzBdOwogCiAJZXJyb3IgPSBtZW1jcHlfZnJvbWlvdmVjKHN0YXJ0LCBtLT5tc2dfaW92LCB0b3RhbF9sZW4pOwotCiAJaWYgKGVycm9yIDwgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlbmQ7CkBAIC04NTMsNyArOTAzLDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHhtaXQgZnVuY3Rpb24gZm9yIGludGVybmFsIHVzZS4KQEAgLTg4OCw3ICs5MzcsNyBAQAogCXBoLT5zaWQJPSBwby0+bnVtOwogCXBoLT5sZW5ndGggPSBodG9ucyhkYXRhX2xlbik7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyk7CiAJc2tiLT5kZXYgPSBkZXY7CiAKIAlkZXZfaGFyZF9oZWFkZXIoc2tiLCBkZXYsIEVUSF9QX1BQUF9TRVMsCkBAIC05MDMsNyArOTUyLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogeG1pdCBmdW5jdGlvbiBjYWxsZWQgYnkgZ2VuZXJpYyBQUFAgZHJpdmVyCkBAIC05MTIsMTEgKzk2MCwxMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKikgY2hhbi0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLT5wcml2YXRlOwogCXJldHVybiBfX3BwcG9lX3htaXQoc2ssIHNrYik7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHMgPSB7CiAJLnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LAogfTsKQEAgLTkzNSw3ICs5ODIsNiBAQAogCiAJc2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzICYgfk1TR19ET05UV0FJVCwKIAkJCQlmbGFncyAmIE1TR19ET05UV0FJVCwgJmVycm9yKTsKLQogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZW5kOwogCkBAIC05NjgsNDQgKzEwMTQsNDcgQEAKIAlkZXZfbmFtZSA9IHBvLT5wcHBvZV9wYS5kZXY7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUwOFggJXBNICU4c1xuIiwKLQkJICAgcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOworCQlwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSk7CiBvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwcHBveF9zb2NrICpwcHBvZV9nZXRfaWR4KGxvZmZfdCBwb3MpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpwcHBvZV9nZXRfaWR4KHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAKLQlmb3IgKDsgaSA8IFBQUE9FX0hBU0hfU0laRTsgaSsrKSB7Ci0JCXBvID0gaXRlbV9oYXNoX3RhYmxlW2ldOworCWZvciAoaSA9IDA7IGkgPCBQUFBPRV9IQVNIX1NJWkU7IGkrKykgeworCQlwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCQl3aGlsZSAocG8pIHsKIAkJCWlmICghcG9zLS0pCiAJCQkJZ290byBvdXQ7CiAJCQlwbyA9IHBvLT5uZXh0OwogCQl9CiAJfQorCiBvdXQ6CiAJcmV0dXJuIHBvOwogfQogCiBzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKHBwcG9lX2hhc2hfbG9jaykKKwlfX2FjcXVpcmVzKHBuLT5oYXNoX2xvY2spCiB7CisJc3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpOwogCWxvZmZfdCBsID0gKnBvczsKIAotCXJlYWRfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKLQlyZXR1cm4gbCA/IHBwcG9lX2dldF9pZHgoLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjsKKwlyZWFkX2xvY2tfYmgoJnBuLT5oYXNoX2xvY2spOworCXJldHVybiBsID8gcHBwb2VfZ2V0X2lkeChwbiwgLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIAogc3RhdGljIHZvaWQgKnBwcG9lX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCiAJKysqcG9zOwogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlwbyA9IHBwcG9lX2dldF9pZHgoMCk7CisJCXBvID0gcHBwb2VfZ2V0X2lkeChwbiwgMCk7CiAJCWdvdG8gb3V0OwogCX0KIAlwbyA9IHY7CkBAIC0xMDE1LDIyICsxMDY0LDI0IEBACiAJCWludCBoYXNoID0gaGFzaF9pdGVtKHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUpOwogCiAJCXdoaWxlICgrK2hhc2ggPCBQUFBPRV9IQVNIX1NJWkUpIHsKLQkJCXBvID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCQkJcG8gPSBwbi0+aGFzaF90YWJsZVtoYXNoXTsKIAkJCWlmIChwbykKIAkJCQlicmVhazsKIAkJfQogCX0KKwogb3V0OgogCXJldHVybiBwbzsKIH0KIAogc3RhdGljIHZvaWQgcHBwb2Vfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi0JX19yZWxlYXNlcyhwcHBvZV9oYXNoX2xvY2spCisJX19yZWxlYXNlcyhwbi0+aGFzaF9sb2NrKQogewotCXJlYWRfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTsKKwlyZWFkX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2Vfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2Vfc2VxX29wcyA9IHsKIAkuc3RhcnQJCT0gcHBwb2Vfc2VxX3N0YXJ0LAogCS5uZXh0CQk9IHBwcG9lX3NlcV9uZXh0LAogCS5zdG9wCQk9IHBwcG9lX3NlcV9zdG9wLApAQCAtMTAzOSw3ICsxMDkwLDggQEAKIAogc3RhdGljIGludCBwcHBvZV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnBwcG9lX3NlcV9vcHMpOworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZwcHBvZV9zZXFfb3BzLAorCQkJc2l6ZW9mKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2Vfc2VxX2ZvcHMgPSB7CkBAIC0xMDQ3LDc0ICsxMDk5LDExNSBAQAogCS5vcGVuCQk9IHBwcG9lX3NlcV9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBwcHBvZV9wcm9jX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7Ci0KLQlwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAicHBwb2UiLCBTX0lSVUdPLCAmcHBwb2Vfc2VxX2ZvcHMpOwotCWlmICghcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZSAvKiBDT05GSUdfUFJPQ19GUyAqLwotc3RhdGljIGlubGluZSBpbnQgcHBwb2VfcHJvY19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHMgPSB7Ci0gICAgLmZhbWlseQkJPSBBRl9QUFBPWCwKLSAgICAub3duZXIJCT0gVEhJU19NT0RVTEUsCi0gICAgLnJlbGVhc2UJCT0gcHBwb2VfcmVsZWFzZSwKLSAgICAuYmluZAkJPSBzb2NrX25vX2JpbmQsCi0gICAgLmNvbm5lY3QJCT0gcHBwb2VfY29ubmVjdCwKLSAgICAuc29ja2V0cGFpcgkJPSBzb2NrX25vX3NvY2tldHBhaXIsCi0gICAgLmFjY2VwdAkJPSBzb2NrX25vX2FjY2VwdCwKLSAgICAuZ2V0bmFtZQkJPSBwcHBvZV9nZXRuYW1lLAotICAgIC5wb2xsCQk9IGRhdGFncmFtX3BvbGwsCi0gICAgLmxpc3RlbgkJPSBzb2NrX25vX2xpc3RlbiwKLSAgICAuc2h1dGRvd24JCT0gc29ja19ub19zaHV0ZG93biwKLSAgICAuc2V0c29ja29wdAkJPSBzb2NrX25vX3NldHNvY2tvcHQsCi0gICAgLmdldHNvY2tvcHQJCT0gc29ja19ub19nZXRzb2Nrb3B0LAotICAgIC5zZW5kbXNnCQk9IHBwcG9lX3NlbmRtc2csCi0gICAgLnJlY3Ztc2cJCT0gcHBwb2VfcmVjdm1zZywKLSAgICAubW1hcAkJPSBzb2NrX25vX21tYXAsCi0gICAgLmlvY3RsCQk9IHBwcG94X2lvY3RsLAorCS5mYW1pbHkJCT0gQUZfUFBQT1gsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlCT0gcHBwb2VfcmVsZWFzZSwKKwkuYmluZAkJPSBzb2NrX25vX2JpbmQsCisJLmNvbm5lY3QJPSBwcHBvZV9jb25uZWN0LAorCS5zb2NrZXRwYWlyCT0gc29ja19ub19zb2NrZXRwYWlyLAorCS5hY2NlcHQJCT0gc29ja19ub19hY2NlcHQsCisJLmdldG5hbWUJPSBwcHBvZV9nZXRuYW1lLAorCS5wb2xsCQk9IGRhdGFncmFtX3BvbGwsCisJLmxpc3RlbgkJPSBzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24JPSBzb2NrX25vX3NodXRkb3duLAorCS5zZXRzb2Nrb3B0CT0gc29ja19ub19zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CT0gc29ja19ub19nZXRzb2Nrb3B0LAorCS5zZW5kbXNnCT0gcHBwb2Vfc2VuZG1zZywKKwkucmVjdm1zZwk9IHBwcG9lX3JlY3Ztc2csCisJLm1tYXAJCT0gc29ja19ub19tbWFwLAorCS5pb2N0bAkJPSBwcHBveF9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHBwb3hfcHJvdG8gcHBwb2VfcHJvdG8gPSB7Ci0gICAgLmNyZWF0ZQk9IHBwcG9lX2NyZWF0ZSwKLSAgICAuaW9jdGwJPSBwcHBvZV9pb2N0bCwKLSAgICAub3duZXIJPSBUSElTX01PRFVMRSwKKwkuY3JlYXRlCT0gcHBwb2VfY3JlYXRlLAorCS5pb2N0bAk9IHBwcG9lX2lvY3RsLAorCS5vd25lcgk9IFRISVNfTU9EVUxFLAogfTsKIAotCi1zdGF0aWMgaW50IF9faW5pdCBwcHBvZV9pbml0KHZvaWQpCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHBwb2VfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCWludCBlcnIgPSBwcm90b19yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8sIDApOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCWludCBlcnI7CiAKKwlwbiA9IGt6YWxsb2Moc2l6ZW9mKCpwbiksIEdGUF9LRVJORUwpOworCWlmICghcG4pCisJCXJldHVybiAtRU5PTUVNOworCisJcndsb2NrX2luaXQoJnBuLT5oYXNoX2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkLCBwbik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLSAJZXJyID0gcmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UsICZwcHBvZV9wcm90byk7CisJcGRlID0gcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAicHBwb2UiLCBTX0lSVUdPLCAmcHBwb2Vfc2VxX2ZvcHMpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCFwZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKHBuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcG9lX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKworCXByb2NfbmV0X3JlbW92ZShuZXQsICJwcHBvZSIpOworCXBuID0gbmV0X2dlbmVyaWMobmV0LCBwcHBvZV9uZXRfaWQpOworCS8qCisJICogaWYgc29tZW9uZSBoYXMgY2FjaGVkIG91ciBuZXQgdGhlbgorCSAqIGZ1cnRoZXIgbmV0X2dlbmVyaWMgY2FsbCB3aWxsIHJldHVybiBOVUxMCisJICovCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkLCBOVUxMKTsKKwlrZnJlZShwbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwb2VfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcG9lX2luaXRfbmV0LAorCS5leGl0ID0gcHBwb2VfZXhpdF9uZXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcHBvZV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHByb3RvX3JlZ2lzdGVyKCZwcHBvZV9za19wcm90bywgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSByZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PRSwgJnBwcG9lX3Byb3RvKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG9lX3Byb3RvOwogCi0JZXJyID0gcHBwb2VfcHJvY19pbml0KCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnBwcG9lX25ldF9pZCwgJnBwcG9lX25ldF9vcHMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHBwb3hfcHJvdG87CiAKIAlkZXZfYWRkX3BhY2soJnBwcG9lc19wdHlwZSk7CiAJZGV2X2FkZF9wYWNrKCZwcHBvZWRfcHR5cGUpOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHBwb2Vfbm90aWZpZXIpOwotb3V0OgotCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKKwogb3V0X3VucmVnaXN0ZXJfcHBwb3hfcHJvdG86CiAJdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PRSk7CiBvdXRfdW5yZWdpc3Rlcl9wcHBvZV9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7Ci0JZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBwcG9lX2V4aXQodm9pZCkKQEAgLTExMjMsNyArMTIxNiw3IEBACiAJZGV2X3JlbW92ZV9wYWNrKCZwcHBvZXNfcHR5cGUpOwogCWRldl9yZW1vdmVfcGFjaygmcHBwb2VkX3B0eXBlKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHBwb2Vfbm90aWZpZXIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJwcHBvZSIsIGluaXRfbmV0LnByb2NfbmV0KTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHBwcG9lX25ldF9pZCwgJnBwcG9lX25ldF9vcHMpOwogCXByb3RvX3VucmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2wydHAuYyBiL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMKaW5kZXggZjFhOTQ2NzguLjViMDdkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2wydHAuYwpAQCAtOTAsNyArOTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KQEAgLTIwNCw2ICsyMDYsNyBAQAogCXN0cnVjdCBzb2NrCQkqc29jazsJCS8qIFBhcmVudCBzb2NrZXQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBLZWVwIGEgbGlzdCBvZiBhbGwgb3BlbgogCQkJCQkJICogcHJlcGFyZWQgc29ja2V0cyAqLworCXN0cnVjdCBuZXQJCSpwcHBvbDJ0cF9uZXQ7CS8qIHRoZSBuZXQgd2UgYmVsb25nIHRvICovCiAKIAlhdG9taWNfdAkJcmVmX2NvdW50OwogfTsKQEAgLTIyNyw4ICsyMzAsMjAgQEAKIHN0YXRpYyBhdG9taWNfdCBwcHBvbDJ0cF9zZXNzaW9uX2NvdW50Owogc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7IHBwcG9sMnRwX3htaXQgLCBOVUxMIH07CiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyBwcHBvbDJ0cF9vcHM7Ci1zdGF0aWMgTElTVF9IRUFEKHBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgcHBwb2wydHBfbmV0X2lkOworc3RydWN0IHBwcG9sMnRwX25ldCB7CisJc3RydWN0IGxpc3RfaGVhZCBwcHBvbDJ0cF90dW5uZWxfbGlzdDsKKwlyd2xvY2tfdCBwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwcHBvbDJ0cF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9sMnRwX25ldF9pZCk7Cit9CiAKIC8qIEhlbHBlcnMgdG8gb2J0YWluIHR1bm5lbC9zZXNzaW9uIGNvbnRleHRzIGZyb20gc29ja2V0cy4KICAqLwpAQCAtMzIxLDE4ICszMzYsMTkgQEAKIAogLyogTG9va3VwIGEgdHVubmVsIGJ5IGlkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICpwcHBvbDJ0cF90dW5uZWxfZmluZCh1MTYgdHVubmVsX2lkKQorc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnBwcG9sMnRwX3R1bm5lbF9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTE2IHR1bm5lbF9pZCkKIHsKLQlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWwgPSBOVUxMOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbiA9IHBwcG9sMnRwX3Blcm5ldChuZXQpOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1bm5lbCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0LCBsaXN0KSB7CisJcmVhZF9sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dW5uZWwsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHR1bm5lbC0+c3RhdHMudHVubmVsX2lkID09IHR1bm5lbF9pZCkgewotCQkJcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCQkJcmVhZF91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAkJCXJldHVybiB0dW5uZWw7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEyODcsMTAgKzEzMDMsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgcHBwb2wydHBfdHVubmVsX2ZyZWUoc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsKQogeworCXN0cnVjdCBwcHBvbDJ0cF9uZXQgKnBuID0gcHBwb2wydHBfcGVybmV0KHR1bm5lbC0+cHBwb2wydHBfbmV0KTsKKwogCS8qIFJlbW92ZSBmcm9tIHNvY2tldCBsaXN0ICovCi0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAogCWF0b21pY19kZWMoJnBwcG9sMnRwX3R1bm5lbF9jb3VudCk7CiAJa2ZyZWUodHVubmVsKTsKQEAgLTE0NDQsMTMgKzE0NjIsMTQgQEAKIC8qIEludGVybmFsIGZ1bmN0aW9uIHRvIHByZXBhcmUgYSB0dW5uZWwgKFVEUCkgc29ja2V0IHRvIGhhdmUgUFBQb1gKICAqIHNvY2tldHMgYXR0YWNoZWQgdG8gaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KGludCBmZCwgdTE2IHR1bm5lbF9pZCwKLQkJCQkJCSAgIGludCAqZXJyb3IpCitzdGF0aWMgc3RydWN0IHNvY2sgKnBwcG9sMnRwX3ByZXBhcmVfdHVubmVsX3NvY2tldChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCWludCBmZCwgdTE2IHR1bm5lbF9pZCwgaW50ICplcnJvcikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CiAJc3RydWN0IHNvY2sgKnJldCA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIHR1bm5lbCBVRFAgc29ja2V0IGZyb20gdGhlIGZkLCB3aGljaCB3YXMgb3BlbmVkIGJ5CkBAIC0xNTI0LDExICsxNTQzLDE1IEBACiAJLyogTWlzYyBpbml0ICovCiAJcndsb2NrX2luaXQoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKKwkvKiBUaGUgbmV0IHdlIGJlbG9uZyB0byAqLworCXR1bm5lbC0+cHBwb2wydHBfbmV0ID0gbmV0OworCXBuID0gcHBwb2wydHBfcGVybmV0KG5ldCk7CisKIAkvKiBBZGQgdHVubmVsIHRvIG91ciBsaXN0ICovCiAJSU5JVF9MSVNUX0hFQUQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJnR1bm5lbC0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZCgmdHVubmVsLT5saXN0LCAmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAlhdG9taWNfaW5jKCZwcHBvbDJ0cF90dW5uZWxfY291bnQpOwogCiAJLyogQnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGUgdHVubmVsIGNvbnRleHQgaXMgZGVsZXRlZApAQCAtMTYyOSw3ICsxNjUyLDggQEAKIAkgKiB0dW5uZWwgaWQuCiAJICovCiAJaWYgKChzcC0+cHBwb2wydHAuc19zZXNzaW9uID09IDApICYmIChzcC0+cHBwb2wydHAuZF9zZXNzaW9uID09IDApKSB7Ci0JCXR1bm5lbF9zb2NrID0gcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KHNwLT5wcHBvbDJ0cC5mZCwKKwkJdHVubmVsX3NvY2sgPSBwcHBvbDJ0cF9wcmVwYXJlX3R1bm5lbF9zb2NrZXQoc29ja19uZXQoc2spLAorCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLmZkLAogCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLnNfdHVubmVsLAogCQkJCQkJCSAgICAgJmVycm9yKTsKIAkJaWYgKHR1bm5lbF9zb2NrID09IE5VTEwpCkBAIC0xNjM3LDcgKzE2NjEsNyBAQAogCiAJCXR1bm5lbCA9IHR1bm5lbF9zb2NrLT5za191c2VyX2RhdGE7CiAJfSBlbHNlIHsKLQkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc3AtPnBwcG9sMnRwLnNfdHVubmVsKTsKKwkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc29ja19uZXQoc2spLCBzcC0+cHBwb2wydHAuc190dW5uZWwpOwogCiAJCS8qIEVycm9yIGlmIHdlIGNhbid0IGZpbmQgdGhlIHR1bm5lbCAqLwogCQllcnJvciA9IC1FTk9FTlQ7CkBAIC0xNzI1LDcgKzE3NDksNyBAQAogCXBvLT5jaGFuLm9wcwkgPSAmcHBwb2wydHBfY2hhbl9vcHM7CiAJcG8tPmNoYW4ubXR1CSA9IHNlc3Npb24tPm10dTsKIAotCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwllcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChzb2NrX25ldChzayksICZwby0+Y2hhbik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVuZF9wdXRfdHVuOwogCkBAIC0yMzQ3LDggKzIzNzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSB7Ci0Jc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOyAvKiBjdXJyZW50IHR1bm5lbCAqLwotCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOyAvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKKwlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CQkvKiBjdXJyZW50IHR1bm5lbCAqLworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwkvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpuZXh0X3Nlc3Npb24oc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiAqY3VycikKQEAgLTIzODQsMTcgKzI0MDksMTggQEAKIAlyZXR1cm4gc2Vzc2lvbjsKIH0KIAotc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKm5leHRfdHVubmVsKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCitzdGF0aWMgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqbmV4dF90dW5uZWwoc3RydWN0IHBwcG9sMnRwX25ldCAqcG4sCisJCQkJCSAgIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDsKIAotCXJlYWRfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfaXNfbGFzdCgmY3Vyci0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkgeworCXJlYWRfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCWlmIChsaXN0X2lzX2xhc3QoJmN1cnItPmxpc3QsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QpKSB7CiAJCWdvdG8gb3V0OwogCX0KIAl0dW5uZWwgPSBsaXN0X2VudHJ5KGN1cnItPmxpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiBvdXQ6Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gdHVubmVsOwogfQpAQCAtMjQwMiw2ICsyNDI4LDcgQEAKIHN0YXRpYyB2b2lkICpwcHBvbDJ0cF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKm9mZnMpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IFNFUV9TVEFSVF9UT0tFTjsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbjsKIAlsb2ZmX3QgcG9zID0gKm9mZnM7CiAKIAlpZiAoIXBvcykKQEAgLTI0MDksMTQgKzI0MzYsMTUgQEAKIAogCUJVR19PTihtLT5wcml2YXRlID09IE5VTEwpOwogCXBkID0gbS0+cHJpdmF0ZTsKKwlwbiA9IHBwcG9sMnRwX3Blcm5ldChzZXFfZmlsZV9uZXQobSkpOwogCiAJaWYgKHBkLT50dW5uZWwgPT0gTlVMTCkgewotCQlpZiAoIWxpc3RfZW1wdHkoJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkKLQkJCXBkLT50dW5uZWwgPSBsaXN0X2VudHJ5KHBwcG9sMnRwX3R1bm5lbF9saXN0Lm5leHQsIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwsIGxpc3QpOworCQlpZiAoIWxpc3RfZW1wdHkoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdCkpCisJCQlwZC0+dHVubmVsID0gbGlzdF9lbnRyeShwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiAJfSBlbHNlIHsKIAkJcGQtPnNlc3Npb24gPSBuZXh0X3Nlc3Npb24ocGQtPnR1bm5lbCwgcGQtPnNlc3Npb24pOwogCQlpZiAocGQtPnNlc3Npb24gPT0gTlVMTCkgewotCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBkLT50dW5uZWwpOworCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBuLCBwZC0+dHVubmVsKTsKIAkJfQogCX0KIApAQCAtMjUxNyw3ICsyNTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0gewogCS5zdGFydAkJPSBwcHBvbDJ0cF9zZXFfc3RhcnQsCiAJLm5leHQJCT0gcHBwb2wydHBfc2VxX25leHQsCiAJLnN0b3AJCT0gcHBwb2wydHBfc2VxX3N0b3AsCkBAIC0yNTMwLDUxICsyNTU4LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzZXFfZmlsZSAqbTsKLQlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJnBwcG9sMnRwX3NlcV9vcHMpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBvdXIgcHJvY19kYXRhIGZvciBhY2Nlc3MgbGF0ZXIgKi8KLQlyZXQgPSAtRU5PTUVNOwotCW0tPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAobS0+cHJpdmF0ZSA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCXBkID0gbS0+cHJpdmF0ZTsKLQlyZXQgPSAwOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2wydHBfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7CiB9CiAKLS8qIENhbGxlZCB3aGVuIC9wcm9jIGZpbGUgYWNjZXNzIGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWtmcmVlKG0tPnByaXZhdGUpOwotCW0tPnByaXZhdGUgPSBOVUxMOwotCi0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwcHBvbDJ0cF9wcm9jX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcHBvbDJ0cF9wcm9jOwotCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjA2LDYgKzI2MDEsNTcgQEAKIAkuaW9jdGwJCT0gcHBwb2wydHBfaW9jdGwKIH07CiAKK3N0YXRpYyBfX25ldF9pbml0IGludCBwcHBvbDJ0cF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwlyd2xvY2tfaW5pdCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBwbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwZGUgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJwcHBvbDJ0cCIsIFNfSVJVR08sICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCFwZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKHBuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcG9sMnRwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKworCXByb2NfbmV0X3JlbW92ZShuZXQsICJwcHBvbDJ0cCIpOworCXBuID0gbmV0X2dlbmVyaWMobmV0LCBwcHBvbDJ0cF9uZXRfaWQpOworCS8qCisJICogaWYgc29tZW9uZSBoYXMgY2FjaGVkIG91ciBuZXQgdGhlbgorCSAqIGZ1cnRoZXIgbmV0X2dlbmVyaWMgY2FsbCB3aWxsIHJldHVybiBOVUxMCisJICovCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBOVUxMKTsKKwlrZnJlZShwbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwb2wydHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcG9sMnRwX2luaXRfbmV0LAorCS5leGl0ID0gcHBwb2wydHBfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBwcHBvbDJ0cF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTI2MTcsMjMgKzI2NjMsMTcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG9sMnRwX3Byb3RvOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcHBvbDJ0cF9wcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAicHBwb2wydHAiLCAwLAotCQkJCQkgICAgICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOwotCWlmICghcHBwb2wydHBfcHJvYykgewotCQllcnIgPSAtRU5PTUVNOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvbDJ0cF9uZXRfaWQsICZwcHBvbDJ0cF9uZXRfb3BzKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCiAJcHJpbnRrKEtFUk5fSU5GTyAiUFBQb0wyVFAga2VybmVsIGRyaXZlciwgJXNcbiIsCiAJICAgICAgIFBQUE9MMlRQX0RSVl9WRVJTSU9OKTsKIAogb3V0OgogCXJldHVybiBlcnI7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0wyVFApOwotI2VuZGlmCiBvdXRfdW5yZWdpc3Rlcl9wcHBvbDJ0cF9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvbDJ0cF9za19wcm90byk7CiAJZ290byBvdXQ7CkBAIC0yNjQyLDEwICsyNjgyLDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvbDJ0cF9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PTDJUUCk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJwcHBvbDJ0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgogCXByb3RvX3VucmVnaXN0ZXIoJnBwcG9sMnRwX3NrX3Byb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggMDNhZWNjOS4uNGY2ZDMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC0xMDgsOSArMTA4LDYgQEAKIHsKIAlpbnQgcmMgPSAtRVBST1RPVFlQRTsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQogCWlmIChwcm90b2NvbCA8IDAgfHwgcHJvdG9jb2wgPiBQWF9NQVhfUFJPVE8pCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKaW5kZXggNGI1NjRlZC4uMzA5MDBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgdG9wIG9mIGJ1ZmZlciAqLwogCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBWTEFOX0hMRU4sIDIgKiBFVEhfQUxFTik7CiAKLQl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSk7CiAJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHRhZyk7CiAKIAlyZXR1cm4gc2tiOwpAQCAtMTQwMyw2ICsxNDAzLDE5IEBACiAJCWF0b21pY19kZWMoJmNhcmQtPnR4X3RpbWVvdXRfdGFza19jb3VudGVyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZWxpY19uZXRkZXZpY2Vfb3BzID0geworCS5uZG9fb3BlbiA9IGdlbGljX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IGdlbGljX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogLyoqCiAgKiBnZWxpY19ldGhlcl9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQxMiwyMSArMTQyNSwxMiBAQAogc3RhdGljIHZvaWQgZ2VsaWNfZXRoZXJfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewotCW5ldGRldi0+b3BlbiA9ICZnZWxpY19uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfbmV0X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZ2VsaWNfbmV0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZ2VsaWNfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmZ2VsaWNfbmV0X2NoYW5nZV9tdHU7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmZ2VsaWNfbmV0X3R4X3RpbWVvdXQ7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEdFTElDX05FVF9XQVRDSERPR19USU1FT1VUOwogCS8qIE5BUEkgKi8KIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsIG5hcGksCiAJCSAgICAgICBnZWxpY19uZXRfcG9sbCwgR0VMSUNfTkVUX05BUElfV0VJR0hUKTsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmdlbGljX2V0aGVyX2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZWxpY19uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmdlbGljX25ldGRldmljZV9vcHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCAzMzVkYTQ4My4uYTVhYzJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTI2OTcsNiArMjY5NywxOSBAQAogCiAvKiAtLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdlbGljX3dsX25ldGRldmljZV9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2VsaWNfd2xfb3BlbiwKKwkubmRvX3N0b3AgPSBnZWxpY193bF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCkBAIC0yNzExLDIxICsyNzI0LDEyIEBACiAJc3RydWN0IGdlbGljX3dsX2luZm8gKndsOwogCXdsID0gcG9ydF93bChuZXRkZXZfcHJpdihuZXRkZXYpKTsKIAlCVUdfT04oIXdsKTsKLQluZXRkZXYtPm9wZW4gPSAmZ2VsaWNfd2xfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfd2xfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZnZWxpY19uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZnZWxpY19uZXRfc2V0X211bHRpOwotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZnZWxpY19uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7Ci0JbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwotCS8qIHR4IHdhdGNoZG9nICovCi0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJmdlbGljX25ldF90eF90aW1lb3V0OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBHRUxJQ19ORVRfV0FUQ0hET0dfVElNRU9VVDsKIAogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZ2VsaWNfd2xfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IGdlbGljX25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmZ2VsaWNfd2xfbmV0ZGV2aWNlX29wczsKKwluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7CisJbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDE4OWVjMjkuLjhiMjgyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAKIAlpZiAodHhfY2xlYW5lZCArIHJ4X2NsZWFuZWQgIT0gYnVkZ2V0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfdXBkYXRlX3NtYWxsX2J1ZnFfcHJvZF9pbmRleChxZGV2KTsKIAkJcWxfdXBkYXRlX2xyZ19idWZxX3Byb2RfaW5kZXgocWRldik7CiAJCXdyaXRlbChxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXgsCkBAIC0yMzUxLDggKzIzNTEsOCBAQAogCQlzcGluX3VubG9jaygmcWRldi0+YWRhcHRlcl9sb2NrKTsKIAl9IGVsc2UgaWYgKHZhbHVlICYgSVNQX0lNUl9ESVNBQkxFX0NNUExfSU5UKSB7CiAJCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZxZGV2LT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcWRldi0+bmFwaSkpKSB7CisJCQlfX25hcGlfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCBlNmZkY2U5Li5mY2IxNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtMjgsOCArMjgsOCBAQAogICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUUxHRV9WRU5ET1JfSUQgICAgMHgxMDc3Ci0jZGVmaW5lIFFMR0VfREVWSUNFX0lEICAgIDB4ODAxMgotCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMTIJMHg4MDEyCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMDAJMHg4MDAwCiAjZGVmaW5lIE1BWF9DUFVTIDgKICNkZWZpbmUgTUFYX1RYX1JJTkdTIE1BWF9DUFVTCiAjZGVmaW5lIE1BWF9SWF9SSU5HUyAoKE1BWF9DUFVTICogMikgKyAxKQpAQCAtMTY0LDcgKzE2NCw3IEBACiAJQ1NSX1JQID0gKDEgPDwgMTApLAogCUNTUl9DTURfUEFSTV9TSElGVCA9IDIyLAogCUNTUl9DTURfTk9QID0gMHgwMDAwMDAwMCwKLQlDU1JfQ01EX1NFVF9SU1QgPSAweDEwMDAwMDAsCisJQ1NSX0NNRF9TRVRfUlNUID0gMHgxMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9SU1QgPSAweDIwMDAwMDAwLAogCUNTUl9DTURfU0VUX1BBVVNFID0gMHgzMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9QQVVTRSA9IDB4NDAwMDAwMDAsCkBAIC00MjQsNyArNDI0LDcgQEAKIAlSWF9TWU1CT0xfRVJSID0gMHgwMDAwMDM3MCwKIAlSWF9NQUNfRVJSID0gMHgwMDAwMDM3OCwKIAlSWF9DVExfUEtUUyA9IDB4MDAwMDAzODAsCi0JUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODQsCisJUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODgsCiAJUlhfNjRfUEtUUyA9IDB4MDAwMDAzOTAsCiAJUlhfNjVfVE9fMTI3X1BLVFMgPSAweDAwMDAwMzk4LAogCVJYXzEyOF8yNTVfUEtUUyA9IDB4MDAwMDAzYTAsCkBAIC03MzMsNiArNzMzLDExIEBACiAJQUVOX0xJTktfRE9XTiA9IDB4MDAwMDgwMTIsCiAJQUVOX0lEQ19DTVBMVCA9IDB4MDAwMDgxMDAsCiAJQUVOX0lEQ19SRVEgPSAweDAwMDA4MTAxLAorCUFFTl9JRENfRVhUID0gMHgwMDAwODEwMiwKKwlBRU5fRENCWF9DSEcgPSAweDAwMDA4MTEwLAorCUFFTl9BRU5fTE9TVCA9IDB4MDAwMDgxMjAsCisJQUVOX0FFTl9TRlBfSU4gPSAweDAwMDA4MTMwLAorCUFFTl9BRU5fU0ZQX09VVCA9IDB4MDAwMDgxMzEsCiAJQUVOX0ZXX0lOSVRfRE9ORSA9IDB4MDAwMDg0MDAsCiAJQUVOX0ZXX0lOSVRfRkFJTCA9IDB4MDAwMDg0MDEsCiAKQEAgLTc0Miw0MCArNzQ3LDQ4IEBACiAJTUJfQ01EX01CX1RFU1QgPSAweDAwMDAwMDA2LAogCU1CX0NNRF9DU1VNX1RFU1QgPSAweDAwMDAwMDA3LAkvKiBWZXJpZnkgQ2hlY2tzdW0gKi8KIAlNQl9DTURfQUJPVVRfRlcgPSAweDAwMDAwMDA4LAorCU1CX0NNRF9DT1BZX1JJU0NfUkFNID0gMHgwMDAwMDAwYSwKIAlNQl9DTURfTE9BRF9SSVNDX1JBTSA9IDB4MDAwMDAwMGIsCiAJTUJfQ01EX0RVTVBfUklTQ19SQU0gPSAweDAwMDAwMDBjLAogCU1CX0NNRF9XUklURV9SQU0gPSAweDAwMDAwMDBkLAorCU1CX0NNRF9JTklUX1JJU0NfUkFNID0gMHgwMDAwMDAwZSwKIAlNQl9DTURfUkVBRF9SQU0gPSAweDAwMDAwMDBmLAogCU1CX0NNRF9TVE9QX0ZXID0gMHgwMDAwMDAxNCwKIAlNQl9DTURfTUFLRV9TWVNfRVJSID0gMHgwMDAwMDAyYSwKKwlNQl9DTURfV1JJVEVfU0ZQID0gMHgwMDAwMDAzMCwKKwlNQl9DTURfUkVBRF9TRlAgPSAweDAwMDAwMDMxLAogCU1CX0NNRF9JTklUX0ZXID0gMHgwMDAwMDA2MCwKLQlNQl9DTURfR0VUX0lOSVRfQ0IgPSAweDAwMDAwMDYxLAorCU1CX0NNRF9HRVRfSUZDQiA9IDB4MDAwMDAwNjEsCiAJTUJfQ01EX0dFVF9GV19TVEFURSA9IDB4MDAwMDAwNjksCiAJTUJfQ01EX0lEQ19SRVEgPSAweDAwMDAwMTAwLAkvKiBJbnRlci1Ecml2ZXIgQ29tbXVuaWNhdGlvbiAqLwogCU1CX0NNRF9JRENfQUNLID0gMHgwMDAwMDEwMSwJLyogSW50ZXItRHJpdmVyIENvbW11bmljYXRpb24gKi8KIAlNQl9DTURfU0VUX1dPTF9NT0RFID0gMHgwMDAwMDExMCwJLyogV2FrZSBPbiBMYW4gKi8KLQlNQl9XT0xfRElTQUJMRSA9IDB4MDAwMDAwMDAsCi0JTUJfV09MX01BR0lDX1BLVCA9IDB4MDAwMDAwMDEsCi0JTUJfV09MX0ZMVFIgPSAweDAwMDAwMDAyLAotCU1CX1dPTF9VQ0FTVCA9IDB4MDAwMDAwMDQsCi0JTUJfV09MX01DQVNUID0gMHgwMDAwMDAwOCwKLQlNQl9XT0xfQkNBU1QgPSAweDAwMDAwMDEwLAotCU1CX1dPTF9MSU5LX1VQID0gMHgwMDAwMDAyMCwKLQlNQl9XT0xfTElOS19ET1dOID0gMHgwMDAwMDA0MCwKKwlNQl9XT0xfRElTQUJMRSA9IDAsCisJTUJfV09MX01BR0lDX1BLVCA9ICgxIDw8IDEpLAorCU1CX1dPTF9GTFRSID0gKDEgPDwgMiksCisJTUJfV09MX1VDQVNUID0gKDEgPDwgMyksCisJTUJfV09MX01DQVNUID0gKDEgPDwgNCksCisJTUJfV09MX0JDQVNUID0gKDEgPDwgNSksCisJTUJfV09MX0xJTktfVVAgPSAoMSA8PCA2KSwKKwlNQl9XT0xfTElOS19ET1dOID0gKDEgPDwgNyksCiAJTUJfQ01EX1NFVF9XT0xfRkxUUiA9IDB4MDAwMDAxMTEsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLwotCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLworCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsIC8qIFdha2UgT24gTGFuIEZpbHRlciAqLwogCU1CX0NNRF9TRVRfV09MX01BR0lDID0gMHgwMDAwMDExMywJLyogV2FrZSBPbiBMYW4gTWFnaWMgUGFja2V0ICovCi0JTUJfQ01EX0NMRUFSX1dPTF9NQUdJQyA9IDB4MDAwMDAxMTQsCS8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9DTEVBUl9XT0xfTUFHSUMgPSAweDAwMDAwMTE0LC8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9TRVRfV09MX0lNTUVEID0gMHgwMDAwMDExNSwKIAlNQl9DTURfUE9SVF9SRVNFVCA9IDB4MDAwMDAxMjAsCiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCi0JTUJfQ01EX1NFVF9BU0lDX1ZPTFRTID0gMHgwMDAwMDEzMCwKLQlNQl9DTURfR0VUX1NOU19EQVRBID0gMHgwMDAwMDEzMSwJLyogVGVtcCBhbmQgVm9sdCBTZW5zZSBkYXRhLiAqLworCU1CX0NNRF9HRVRfTElOS19TVFMgPSAweDAwMDAwMTI0LAogCiAJLyogTWFpbGJveCBDb21tYW5kIFN0YXR1cy4gKi8KIAlNQl9DTURfU1RTX0dPT0QgPSAweDAwMDA0MDAwLAkvKiBTdWNjZXNzLiAqLwogCU1CX0NNRF9TVFNfSU5UUk1EVCA9IDB4MDAwMDEwMDAsCS8qIEludGVybWVkaWF0ZSBDb21wbGV0ZS4gKi8KLQlNQl9DTURfU1RTX0VSUiA9IDB4MDAwMDQwMDUsCS8qIEVycm9yLiAqLworCU1CX0NNRF9TVFNfSU5WTERfQ01EID0gMHgwMDAwNDAwMSwJLyogSW52YWxpZC4gKi8KKwlNQl9DTURfU1RTX1hGQ19FUlIgPSAweDAwMDA0MDAyLAkvKiBJbnRlcmZhY2UgRXJyb3IuICovCisJTUJfQ01EX1NUU19DU1VNX0VSUiA9IDB4MDAwMDQwMDMsCS8qIENzdW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19FUlIgPSAweDAwMDA0MDA1LAkvKiBTeXN0ZW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19QQVJBTV9FUlIgPSAweDAwMDA0MDA2LAkvKiBQYXJhbWV0ZXIgRXJyb3IuICovCiB9OwogCiBzdHJ1Y3QgbWJveF9wYXJhbXMgewpAQCAtNzg1LDcgKzc5OCw3IEBACiAJaW50IG91dF9jb3VudDsKIH07CiAKLXN0cnVjdCBmbGFzaF9wYXJhbXMgeworc3RydWN0IGZsYXNoX3BhcmFtc184MDEyIHsKIAl1OCBkZXZfaWRfc3RyWzRdOwogCV9fbGUxNiBzaXplOwogCV9fbGUxNiBjc3VtOwpAQCAtNzk1LDYgKzgwOCw0MyBAQAogCV9fbGUxNiByZXM7CiB9OwogCisvKiA4MDAwIGRldmljZSdzIGZsYXNoIGlzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICogYXQgYSBkaWZmZXJlbnQgb2Zmc2V0IGluIGZsYXNoLgorICovCisjZGVmaW5lIEZVTkMwX0ZMQVNIX09GRlNFVCAweDE0MDIwMAorI2RlZmluZSBGVU5DMV9GTEFTSF9PRkZTRVQgMHgxNDA2MDAKKworLyogRmxhc2ggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgeworCXU4IGRldl9pZF9zdHJbNF07CS8qICI4MDAwIiAqLworCV9fbGUxNiB2ZXI7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGNzdW07CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMTYgdG90YWxfc2l6ZTsKKwlfX2xlMTYgZW50cnlfY291bnQ7CisJdTggZGF0YV90eXBlMDsKKwl1OCBkYXRhX3NpemUwOworCXU4IG1hY19hZGRyWzZdOworCXU4IGRhdGFfdHlwZTE7CisJdTggZGF0YV9zaXplMTsKKwl1OCBtYWNfYWRkcjFbNl07CisJdTggZGF0YV90eXBlMjsKKwl1OCBkYXRhX3NpemUyOworCV9fbGUxNiB2bGFuX2lkOworCXU4IGRhdGFfdHlwZTM7CisJdTggZGF0YV9zaXplMzsKKwlfX2xlMTYgbGFzdDsKKwl1OCByZXNlcnZlZDFbNDY0XTsKKwlfX2xlMTYJc3Vic3lzX3Zlbl9pZDsKKwlfX2xlMTYJc3Vic3lzX2Rldl9pZDsKKwl1OCByZXNlcnZlZDJbNF07Cit9OworCit1bmlvbiBmbGFzaF9wYXJhbXMgeworCXN0cnVjdCBmbGFzaF9wYXJhbXNfODAxMiBmbGFzaF9wYXJhbXNfODAxMjsKKwlzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgZmxhc2hfcGFyYW1zXzgwMDA7Cit9OwogCiAvKgogICogZG9vcmJlbGwgc3BhY2UgZm9yIHRoZSByeCByaW5nIGNvbnRleHQKQEAgLTkyNyw2ICs5NzcsNyBAQAogCXU4IGZsYWdzMTsKICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX09JCTB4MDEJLyogT3ZlcmlkZSBpbnRyIGRlbGF5ICovCiAjZGVmaW5lIElCX01BQ19JT0NCX1JTUF9JCTB4MDIJLyogRGlzYmxlIEludHIgR2VuZXJhdGlvbiAqLworI2RlZmluZSBJQl9NQUNfQ1NVTV9FUlJfTUFTSyAweDFjCS8qIEEgbWFzayB0byB1c2UgZm9yIGNzdW0gZXJycyAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfVEUJMHgwNAkvKiBDaGVja3N1bSBlcnJvciAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfTlUJMHgwOAkvKiBObyBjaGVja3N1bSByY3ZkICovCiAjZGVmaW5lIElCX01BQ19JT0NCX1JTUF9JRQkweDEwCS8qIElQdjQgY2hlY2tzdW0gZXJyb3IgKi8KQEAgLTk2Nyw2ICsxMDE4LDcgQEAKIAlfX2xlMTYgdmxhbl9pZDsJCS8qIDEyIGJpdHMgKi8KICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX0MJMHgxMDAwCS8qIFZMQU4gQ0ZJIGJpdCAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfQ09TX1NISUZUCTEyCS8qIGNsYXNzIG9mIHNlcnZpY2UgdmFsdWUgKi8KKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSwkweDBmZmZmCiAKIAlfX2xlMTYgcmVzZXJ2ZWQxOwogCV9fbGUzMiByZXNlcnZlZDJbNl07CkBAIC0xMDMyLDYgKzEwODQsNyBAQAogI2RlZmluZSBRX0xFTl9DUFBfMTYJMHgwMDAxCiAjZGVmaW5lIFFfTEVOX0NQUF8zMgkweDAwMDIKICNkZWZpbmUgUV9MRU5fQ1BQXzY0CTB4MDAwMworI2RlZmluZSBRX0xFTl9DUFBfNTEyCTB4MDAwNgogCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUV9QUklfU0hJRlQJMQogI2RlZmluZSBRX0ZMQUdTX0xDCTB4MTAwMApAQCAtMTMxMywyNyArMTM2Niw0OSBAQAogCVFMX0RNQTY0ID0gKDEgPDwgNSksCiAJUUxfUFJPTUlTQ1VPVVMgPSAoMSA8PCA2KSwKIAlRTF9BTExNVUxUSSA9ICgxIDw8IDcpLAorCVFMX1BPUlRfQ0ZHID0gKDEgPDwgOCksCisJUUxfQ0FNX1JUX1NFVCA9ICgxIDw8IDkpLAogfTsKIAogLyogbGlua19zdGF0dXMgYml0IGRlZmluaXRpb25zICovCiBlbnVtIHsKLQlMT09QQkFDS19NQVNLID0gMHgwMDAwMDcwMCwKLQlMT09QQkFDS19QQ1MgPSAweDAwMDAwMTAwLAotCUxPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCi0JTE9PUEJBQ0tfRVhUID0gMHgwMDAwMDMwMCwKLQlQQVVTRV9NQVNLID0gMHgwMDAwMDBjMCwKLQlQQVVTRV9TVEQgPSAweDAwMDAwMDQwLAotCVBBVVNFX1BSSSA9IDB4MDAwMDAwODAsCi0JU1BFRURfTUFTSyA9IDB4MDAwMDAwMzgsCi0JU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAotCVNQRUVEXzFHYiA9IDB4MDAwMDAwMDgsCi0JU1BFRURfMTBHYiA9IDB4MDAwMDAwMTAsCi0JTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAotCUxJTktfVFlQRV9YRkkgPSAweDAwMDAwMDAxLAotCUxJTktfVFlQRV9YQVVJID0gMHgwMDAwMDAwMiwKLQlMSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKLQlMSU5LX1RZUEVfWEFVSV9CUCA9IDB4MDAwMDAwMDQsCi0JTElOS19UWVBFXzEwR0JBU0VUID0gMHgwMDAwMDAwNSwKKwlTVFNfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDA3MDAsCisJU1RTX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAxMDAsCisJU1RTX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCisJU1RTX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAzMDAsCisJU1RTX1BBVVNFX01BU0sgPSAweDAwMDAwMGMwLAorCVNUU19QQVVTRV9TVEQgPSAweDAwMDAwMDQwLAorCVNUU19QQVVTRV9QUkkgPSAweDAwMDAwMDgwLAorCVNUU19TUEVFRF9NQVNLID0gMHgwMDAwMDAzOCwKKwlTVFNfU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAorCVNUU19TUEVFRF8xR2IgPSAweDAwMDAwMDA4LAorCVNUU19TUEVFRF8xMEdiID0gMHgwMDAwMDAxMCwKKwlTVFNfTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAorCVNUU19MSU5LX1RZUEVfWEZJID0gMHgwMDAwMDAwMSwKKwlTVFNfTElOS19UWVBFX1hBVUkgPSAweDAwMDAwMDAyLAorCVNUU19MSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKKwlTVFNfTElOS19UWVBFX1hBVUlfQlAgPSAweDAwMDAwMDA0LAorCVNUU19MSU5LX1RZUEVfMTBHQkFTRVQgPSAweDAwMDAwMDA1LAorfTsKKworLyogbGlua19jb25maWcgYml0IGRlZmluaXRpb25zICovCitlbnVtIHsKKwlDRkdfSlVNQk9fRlJBTUVfU0laRSA9IDB4MDAwMTAwMDAsCisJQ0ZHX1BBVVNFX01BU0sgPSAweDAwMDAwMDYwLAorCUNGR19QQVVTRV9TVEQgPSAweDAwMDAwMDIwLAorCUNGR19QQVVTRV9QUkkgPSAweDAwMDAwMDQwLAorCUNGR19EQ0JYID0gMHgwMDAwMDAxMCwKKwlDRkdfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDAwMDcsCisJQ0ZHX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAwMDIsCisJQ0ZHX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAwMDQsCisJQ0ZHX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAwMDYsCisJQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkUgPSAweDAwMDAyNTgwLAorfTsKKworc3RydWN0IG5pY19vcGVyYXRpb25zIHsKKworCWludCAoKmdldF9mbGFzaCkgKHN0cnVjdCBxbF9hZGFwdGVyICopOworCWludCAoKnBvcnRfaW5pdGlhbGl6ZSkgKHN0cnVjdCBxbF9hZGFwdGVyICopOwogfTsKIAogLyoKQEAgLTEzNzYsNiArMTQ1MSw4IEBACiAKIAl1MzIgbWFpbGJveF9pbjsKIAl1MzIgbWFpbGJveF9vdXQ7CisJc3RydWN0IG1ib3hfcGFyYW1zIGlkY19tYmM7CisJc3RydWN0IG11dGV4CW1waV9tdXRleDsKIAogCWludCB0eF9yaW5nX3NpemU7CiAJaW50IHJ4X3Jpbmdfc2l6ZTsKQEAgLTE0MTEsOCArMTQ4OCwxMCBAQAogCXUzMiBwb3J0X2xpbmtfdXA7CiAJdTMyIHBvcnRfaW5pdDsKIAl1MzIgbGlua19zdGF0dXM7CisJdTMyIGxpbmtfY29uZmlnOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKIAotCXN0cnVjdCBmbGFzaF9wYXJhbXMgZmxhc2g7CisJdW5pb24gZmxhc2hfcGFyYW1zIGZsYXNoOwogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnFfd29ya3F1ZXVlOwpAQCAtMTQyMCw2ICsxNDk5LDExIEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc2ljX3Jlc2V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3BvcnRfY2ZnX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfaWRjX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gaWRlX2NvbXBsZXRpb247CisJc3RydWN0IG5pY19vcGVyYXRpb25zICpuaWNfb3BzOworCXUxNiBkZXZpY2VfaWQ7CiB9OwogCiAvKgpAQCAtMTQ5Miw2ICsxNTc2LDEwIEBACiB1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CiB2b2lkIHFsX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgcWxfcmVhZF94Z21hY19yZWc2NChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTY0ICpkYXRhKTsKK3ZvaWQgcWxfbXBpX2lkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiAKICNpZiAxCiAjZGVmaW5lIFFMX0FMTF9EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggMzc5Yjg5NS4uNDBhNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtODMsNiArODMsMTAgQEAKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWVbM107CisKKwlpID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKQEAgLTExMSwxMiArMTE1LDE2IEBACiAJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGksIHZhbHVlWzFdLCB2YWx1ZVswXSk7CiAJCX0KIAl9CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiB9CiAKIHZvaWQgcWxfZHVtcF9yb3V0aW5nX2VudHJpZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IGk7CiAJdTMyIHZhbHVlOworCWkgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXZhbHVlID0gMDsKIAkJaWYgKHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpKSB7CkBAIC0xMzEsNiArMTM5LDcgQEAKIAkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwgdmFsdWUpOwogCQl9CiAJfQorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIH0KIAogdm9pZCBxbF9kdW1wX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCA5ZDkyMmUyLi5hNTAwNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGw7CiAJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQlpZiAoKHFkZXYtPmxpbmtfc3RhdHVzICYgTElOS19UWVBFX01BU0spID09IExJTktfVFlQRV8xMEdCQVNFVCkgeworCWlmICgocWRldi0+bGlua19zdGF0dXMgJiBTVFNfTElOS19UWVBFX01BU0spID09CisJCQkJU1RTX0xJTktfVFlQRV8xMEdCQVNFVCkgewogCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BdXRvbmVnKTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDhlYTcyZGMuLjE3MGQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNTgsOCArNTgsOCBAQAogICAgIE5FVElGX01TR19JRlVQIHwKICAgICBORVRJRl9NU0dfUlhfRVJSIHwKICAgICBORVRJRl9NU0dfVFhfRVJSIHwKLSAgICBORVRJRl9NU0dfVFhfUVVFVUVEIHwKLSAgICBORVRJRl9NU0dfSU5UUiB8IE5FVElGX01TR19UWF9ET05FIHwgTkVUSUZfTVNHX1JYX1NUQVRVUyB8CisvKiAgTkVUSUZfTVNHX1RYX1FVRVVFRCB8ICovCisvKiAgTkVUSUZfTVNHX0lOVFIgfCBORVRJRl9NU0dfVFhfRE9ORSB8IE5FVElGX01TR19SWF9TVEFUVVMgfCAqLwogLyogTkVUSUZfTVNHX1BLVERBVEEgfCAqLwogICAgIE5FVElGX01TR19IVyB8IE5FVElGX01TR19XT0wgfCAwOwogCkBAIC03NSw3ICs3NSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycV90eXBlLCAiMCA9IE1TSS1YLCAxID0gTVNJLCAyID0gTGVnYWN5LiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWxnZV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KIH07CkBAIC0yNDcsOSArMjQ4LDYgQEAKIAl1MzIgb2Zmc2V0ID0gMDsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUM6CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CkBAIC0zMDgsNyArMzA2LDYgQEAKIAkJc3RhdHVzID0gLUVQRVJNOwogCX0KIGV4aXQ6Ci0JcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIxLDkgKzMxOCw2IEBACiAJdTMyIG9mZnNldCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX01BQzoKIAljYXNlIE1BQ19BRERSX1RZUEVfQ0FNX01BQzoKQEAgLTMzNCw3ICszMjgsNyBAQAogCQkJICAgIChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKIAkJCSAgICAoYWRkcls1XSk7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIkFkZGluZyAlcyBhZGRyZXNzICVwTSIKIAkJCQkiIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAogCQkJCSgodHlwZSA9PQpAQCAtNDE1LDcgKzQwOSw2IEBACiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQyNiwxMCArNDE5LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXhpdDsKLQogCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBSVF9JRFgsIFJUX0lEWF9NVywgMCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBleGl0OwpAQCAtNDQxLDcgKzQzMCw2IEBACiAJCWdvdG8gZXhpdDsKIAkqdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgUlRfREFUQSk7CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00NTMsMTMgKzQ0MSw5IEBACiBzdGF0aWMgaW50IHFsX3NldF9yb3V0aW5nX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGluZGV4LCB1MzIgbWFzaywKIAkJCSAgICAgIGludCBlbmFibGUpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsgLyogUmV0dXJuIGVycm9yIGlmIG5vIG1hc2sgbWF0Y2guICovCiAJdTMyIHZhbHVlID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0KIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAogCQkiJXMgJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAogCQkoZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKQEAgLTU1NSw3ICs1MzksNiBAQAogCQlxbF93cml0ZTMyKHFkZXYsIFJUX0RBVEEsIGVuYWJsZSA/IG1hc2sgOiAwKTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MDQsNyArNTg3LDYgQEAKIHN0YXRpYyB1MzIgcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCiB7CiAJdTMyIHZhciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHg7CiAKIAkvKiBIVyBkaXNhYmxlcyBmb3IgdXMgaWYgd2UncmUgTVNJWCBtdWx0aSBpbnRlcnJ1cHRzIGFuZApAQCAtNjE0LDE0ICs1OTYsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAljdHggPSBxZGV2LT5pbnRyX2NvbnRleHQgKyBpbnRyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAoIWF0b21pY19yZWFkKCZjdHgtPmlycV9jbnQpKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwKIAkJY3R4LT5pbnRyX2Rpc19tYXNrKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CiAJfQogCWF0b21pY19pbmMoJmN0eC0+aXJxX2NudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlyZXR1cm4gdmFyOwogfQogCkBAIC02NDEsNiArNjIzLDI4IEBACiAKIH0KIAorc3RhdGljIGludCBxbF92YWxpZGF0ZV9mbGFzaChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHNpemUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgc3RhdHVzLCBpOworCXUxNiBjc3VtID0gMDsKKwlfX2xlMTYgKmZsYXNoID0gKF9fbGUxNiAqKSZxZGV2LT5mbGFzaDsKKworCXN0YXR1cyA9IHN0cm5jbXAoKGNoYXIgKikmcWRldi0+Zmxhc2gsIHN0ciwgNCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgZmxhc2ggc2lnbmF0dXJlLlxuIik7CisJCXJldHVybglzdGF0dXM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY3N1bSArPSBsZTE2X3RvX2NwdSgqZmxhc2grKyk7CisKKwlpZiAoY3N1bSkKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKKworCXJldHVybiBjc3VtOworfQorCiBzdGF0aWMgaW50IHFsX3JlYWRfZmxhc2hfd29yZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgaW50IG9mZnNldCwgX19sZTMyICpkYXRhKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtNjY1LDIzICs2NjksNzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHFsX2dldF9mbGFzaF9wYXJhbXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCitzdGF0aWMgaW50IHFsX2dldF84MDAwX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwl1MzIgaSwgc2l6ZTsKKwlpbnQgc3RhdHVzOworCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CisJdTMyIG9mZnNldDsKKworCS8qIEdldCBmbGFzaCBvZmZzZXQgZm9yIGZ1bmN0aW9uIGFuZCBhZGp1c3QKKwkgKiBmb3IgZHdvcmQgYWNjZXNzLgorCSAqLworCWlmICghcWRldi0+ZnVuYykKKwkJb2Zmc2V0ID0gRlVOQzBfRkxBU0hfT0ZGU0VUIC8gc2l6ZW9mKHUzMik7CisJZWxzZQorCQlvZmZzZXQgPSBGVU5DMV9GTEFTSF9PRkZTRVQgLyBzaXplb2YodTMyKTsKKworCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MzIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHArKykgeworCQlzdGF0dXMgPSBxbF9yZWFkX2ZsYXNoX3dvcmQocWRldiwgaStvZmZzZXQsIHApOworCQlpZiAoc3RhdHVzKSB7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMDAiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDAwLm1hY19hZGRyKSkgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShxZGV2LT5uZGV2LT5kZXZfYWRkciwKKwkJcWRldi0+Zmxhc2guZmxhc2hfcGFyYW1zXzgwMDAubWFjX2FkZHIsCisJCXFkZXYtPm5kZXYtPmFkZHJfbGVuKTsKKworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9GTEFTSF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX2dldF84MDEyX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlpbnQgaTsKIAlpbnQgc3RhdHVzOwogCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CiAJdTMyIG9mZnNldCA9IDA7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MzIpOwogCiAJLyogU2Vjb25kIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBmb2xsb3cgdGhlIGZpcnN0CiAJICogZnVuY3Rpb24ncy4KIAkgKi8KIAlpZiAocWRldi0+ZnVuYykKLQkJb2Zmc2V0ID0gc2l6ZW9mKHFkZXYtPmZsYXNoKSAvIHNpemVvZih1MzIpOworCQlvZmZzZXQgPSBzaXplOwogCiAJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fRkxBU0hfTUFTSykpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihxZGV2LT5mbGFzaCkgLyBzaXplb2YodTMyKTsgaSsrLCBwKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CkBAIC02ODksNiArNzQ1LDI1IEBACiAJCX0KIAogCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMTIiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDEyLm1hY19hZGRyKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KHFkZXYtPm5kZXYtPmRldl9hZGRyLAorCQlxZGV2LT5mbGFzaC5mbGFzaF9wYXJhbXNfODAxMi5tYWNfYWRkciwKKwkJcWRldi0+bmRldi0+YWRkcl9sZW4pOworCiBleGl0OgogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spOwogCXJldHVybiBzdGF0dXM7CkBAIC03NTksMTMgKzgzNCwyNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgcWxfODAwMF9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSBxbF9tYl9nZXRfZndfc3RhdGUocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCS8qIFdha2UgdXAgYSB3b3JrZXIgdG8gZ2V0L3NldCB0aGUgVFgvUlggZnJhbWUgc2l6ZXMuICovCisJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyogVGFrZSB0aGUgTUFDIENvcmUgb3V0IG9mIHJlc2V0LgogICogRW5hYmxlIHN0YXRpc3RpY3MgY291bnRpbmcuCiAgKiBUYWtlIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlciBvdXQgb2YgcmVzZXQuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGRvbmUgaW4gdGhlIE1QSSBmaXJtd2FyZSBhdCBhCiAgKiBsYXRlciBkYXRlLgogICovCi1zdGF0aWMgaW50IHFsX3BvcnRfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3N0YXRpYyBpbnQgcWxfODAxMl9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGRhdGE7CkBAIC04ODEsNyArOTY4LDggQEAKIC8qIFByb2Nlc3MgKHJlZmlsbCkgYSBsYXJnZSBidWZmZXIgcXVldWUuICovCiBzdGF0aWMgdm9pZCBxbF91cGRhdGVfbGJxKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKLQlpbnQgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgc3RhcnRfaWR4ID0gY2xlYW5faWR4OwogCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYzsKIAl1NjQgbWFwOwogCWludCBpOwpAQCAtOTI4LDE5ICsxMDE2LDIzIEBACiAJCXJ4X3JpbmctPmxicV9wcm9kX2lkeCArPSAxNjsKIAkJaWYgKHJ4X3JpbmctPmxicV9wcm9kX2lkeCA9PSByeF9yaW5nLT5sYnFfbGVuKQogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKKwkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OworCX0KKworCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7CiAJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKIAkJCSJsYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKIAkJcWxfd3JpdGVfZGJfcmVnKHJ4X3JpbmctPmxicV9wcm9kX2lkeCwKIAkJCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnKTsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OwogCX0KIH0KIAogLyogUHJvY2VzcyAocmVmaWxsKSBhIHNtYWxsIGJ1ZmZlciBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIHFsX3VwZGF0ZV9zYnEoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWludCBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBzdGFydF9pZHggPSBjbGVhbl9pZHg7CiAJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjOwogCXU2NCBtYXA7CiAJaW50IGk7CkBAIC05OTAsMTMgKzEwODIsMTUgQEAKIAkJcnhfcmluZy0+c2JxX3Byb2RfaWR4ICs9IDE2OwogCQlpZiAocnhfcmluZy0+c2JxX3Byb2RfaWR4ID09IHJ4X3JpbmctPnNicV9sZW4pCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSAwOworCQlyeF9yaW5nLT5zYnFfZnJlZV9jbnQgLT0gMTY7CisJfQorCisJaWYgKHN0YXJ0X2lkeCAhPSBjbGVhbl9pZHgpIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAogCQkJInNicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwogCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAogCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwotCi0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCAtPSAxNjsKIAl9CiB9CiAKQEAgLTE0MTIsNiArMTUwNiw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiB2bGFuX2lkID0gKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKKwkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spCiAKIAlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CiAKQEAgLTE0MzYsMzEgKzE1MzIsNTMgQEAKIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1ApIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiUHJvbWlzY3VvdXMgUGFja2V0LlxuIik7CiAJfQotCWlmIChpYl9tYWNfcnNwLT5mbGFnczEgJiAoSUJfTUFDX0lPQ0JfUlNQX0lFIHwgSUJfTUFDX0lPQ0JfUlNQX1RFKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgRVJSLAotCQkJIkJhZCBjaGVja3N1bSBmb3IgdGhpcyAlcyBwYWNrZXQuXG4iLAotCQkJKChpYl9tYWNfcnNwLT4KLQkJCSAgZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpID8gIlRDUCIgOiAiVURQIikpOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JfSBlbHNlIGlmIChxZGV2LT5yeF9jc3VtICYmCi0JCSAgICgoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHx8Ci0JCSAgICAoKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSAmJgotCQkgICAgICEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX05VKSkpKSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIlJYIGNoZWNrc3VtIGRvbmUhXG4iKTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCS8qIElmIHJ4IGNoZWNrc3VtIGlzIG9uLCBhbmQgdGhlcmUgYXJlIG5vCisJICogY3N1bSBvciBmcmFtZSBlcnJvcnMuCisJICovCisJaWYgKHFkZXYtPnJ4X2NzdW0gJiYKKwkJIShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfRVJSX01BU0spICYmCisJCSEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0NTVU1fRVJSX01BU0spKSB7CisJCS8qIFRDUCBmcmFtZS4gKi8KKwkJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9UKSB7CisJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCisJCQkJCSJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJfSBlbHNlIGlmICgoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1UpICYmCisJCQkJKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9WNCkpIHsKKwkJLyogVW5mcmFnbWVudGVkIGlwdjQgVURQIGZyYW1lLiAqLworCQkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopIHNrYi0+ZGF0YTsKKwkJCWlmICghKGlwaC0+ZnJhZ19vZmYgJgorCQkJCWNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCisJCQkJCQkiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCX0KKwkJfQogCX0KKwogCXFkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlxZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQlpZiAocWRldi0+dmxncnAgJiYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiUGFzc2luZyBhIFZMQU4gcGFja2V0IHVwc3RyZWFtLlxuIik7Ci0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHFkZXYtPnZsZ3JwLAotCQkJCWxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpKTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwKKwkJcnhfcmluZy0+Y3FfaWQgLSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJgorCQkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSAmJgorCQkJKHZsYW5faWQgIT0gMCkpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwKKwkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJQYXNzaW5nIGEgbm9ybWFsIHBhY2tldCB1cHN0cmVhbS5cbiIpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQlpZiAocWRldi0+dmxncnAgJiYKKwkJCShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVikgJiYKKwkJCSh2bGFuX2lkICE9IDApKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KIH0KIApAQCAtMTUwNywxNCArMTYyNSwxMiBAQAogLyogRmlyZSB1cCBhIGhhbmRsZXIgdG8gcmVzZXQgdGhlIE1QSSBwcm9jZXNzb3IuICovCiB2b2lkIHFsX3F1ZXVlX2Z3X2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9yZXNldF93b3JrLCAwKTsKIH0KIAogdm9pZCBxbF9xdWV1ZV9hc2ljX2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCS8qIENsZWFyIGFkYXB0ZXIgdXAgYml0IHRvIHNpZ25hbCB0aGUgcmVjb3ZlcnkKQEAgLTE1NjksNiArMTY4NSw3IEBACiAJc3RydWN0IG9iX21hY19pb2NiX3JzcCAqbmV0X3JzcCA9IE5VTEw7CiAJaW50IGNvdW50ID0gMDsKIAorCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwogCS8qIFdoaWxlIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLiAqLwogCXdoaWxlIChwcm9kICE9IHJ4X3JpbmctPmNuc21yX2lkeCkgewogCkBAIC0xNTk0LDE1ICsxNzExLDE2IEBACiAJCXByb2QgPSBxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpOwogCX0KIAlxbF93cml0ZV9jcV9pZHgocnhfcmluZyk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocWRldi0+bmRldikgJiYgbmV0X3JzcCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbbmV0X3JzcC0+dHhxX2lkeF07CisJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW25ldF9yc3AtPnR4cV9pZHhdOworCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpICYmCisJCQkJCW5ldF9yc3AgIT0gTlVMTCkgewogCQlpZiAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnF1ZXVlX3N0b3BwZWQpICYmCiAJCSAgICAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSA+ICh0eF9yaW5nLT53cV9sZW4gLyA0KSkpCiAJCQkvKgogCQkJICogVGhlIHF1ZXVlIGdvdCBzdG9wcGVkIGJlY2F1c2UgdGhlIHR4X3Jpbmcgd2FzIGZ1bGwuCiAJCQkgKiBXYWtlIGl0IHVwLCBiZWNhdXNlIGl0J3Mgbm93IGF0IGxlYXN0IDI1JSBlbXB0eS4KIAkJCSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShxZGV2LT5uZGV2KTsKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTE2NjMsNyArMTc4MSw3IEBACiAJCXJ4X3JpbmctPmNxX2lkKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIHJ4X3JpbmctPmlycSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNjg5LDE5ICsxODA3LDI5IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZW5hYmxlX2JpdCA9IE1BQ19BRERSX0U7CisJaW50IHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcKIAkgICAgKHFkZXYsICh1OCAqKSAmZW5hYmxlX2JpdCwgTUFDX0FERFJfVFlQRV9WTEFOLCB2aWQpKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgdmxhbiBhZGRyZXNzLlxuIik7CiAJfQogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcWxfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXUzMiBlbmFibGVfYml0ID0gMDsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnCkBAIC0xNzA5LDYgKzE4MzcsNyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBjbGVhciB2bGFuIGFkZHJlc3MuXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCiB9CiAKQEAgLTE3NDgsNyArMTg3Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcWxnZV9tc2l4X3J4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcgPSBkZXZfaWQ7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTgzNCw3ICsxOTYzLDcgQEAKIAkJCQkJCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywKIAkJCQkJCQkgICAgICAwKTsKIAkJCQllbHNlCi0JCQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwkJCQkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAJCQkJd29ya19kb25lKys7CiAJCQl9CiAJCX0KQEAgLTE5MjMsMTUgKzIwNTIsMTggQEAKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCB0c287CiAJc3RydWN0IHR4X3JpbmcgKnR4X3Jpbmc7Ci0JdTMyIHR4X3JpbmdfaWR4ID0gKHUzMikgUUxfVFhRX0lEWChxZGV2LCBza2IpOworCXUzMiB0eF9yaW5nX2lkeCA9ICh1MzIpIHNrYi0+cXVldWVfbWFwcGluZzsKIAogCXR4X3JpbmcgPSAmcWRldi0+dHhfcmluZ1t0eF9yaW5nX2lkeF07CiAKKwlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ0eF9yaW5nLT50eF9jb3VudCkgPCAyKSkgewogCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgSU5GTywKIAkJCSIlczogc2h1dHRpbmcgZG93biB0eCBxdWV1ZSAlZCBkdSB0byBsYWNrIG9mIHJlc291cmNlcy5cbiIsCiAJCQlfX2Z1bmNfXywgdHhfcmluZ19pZHgpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHR4X3JpbmctPndxX2lkKTsKIAkJYXRvbWljX2luYygmdHhfcmluZy0+cXVldWVfc3RvcHBlZCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC0yMDEyLDYgKzIxNDQsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgUlggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWVtc2V0KHFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwgUEFHRV9TSVpFLAogCQkJCSAmcWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2RtYSk7CkBAIC0yMDIwLDYgKzIxNTMsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgVFggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl93cXBfc2hfYXJlYTsKIAl9CisJbWVtc2V0KHFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXJldHVybiAwOwogCiBlcnJfd3FwX3NoX2FyZWE6CkBAIC0yMTA0LDQ3ICsyMjM4LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBBbGxvY2F0ZSBhbmQgbWFwIGEgcGFnZSBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBsYnEuCi0gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2NfbGJxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCi0JCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOwotCXU2NCBtYXA7Ci0JX19sZTY0ICpicSA9IHJ4X3JpbmctPmxicV9iYXNlOwotCi0JZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmxicV9sZW47IGkrKykgewotCQlsYnFfZGVzYyA9ICZyeF9yaW5nLT5sYnFbaV07Ci0JCW1lbXNldChsYnFfZGVzYywgMCwgc2l6ZW9mKGxicV9kZXNjKSk7Ci0JCWxicV9kZXNjLT5hZGRyID0gYnE7Ci0JCWxicV9kZXNjLT5pbmRleCA9IGk7Ci0JCWxicV9kZXNjLT5wLmxicV9wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKHVubGlrZWx5KCFsYnFfZGVzYy0+cC5sYnFfcGFnZSkpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiZmFpbGVkIGFsbG9jX3BhZ2UoKS5cbiIpOwotCQkJZ290byBtZW1fZXJyb3I7Ci0JCX0gZWxzZSB7Ci0JCQltYXAgPSBwY2lfbWFwX3BhZ2UocWRldi0+cGRldiwKLQkJCQkJICAgbGJxX2Rlc2MtPnAubGJxX3BhZ2UsCi0JCQkJCSAgIDAsIFBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCQkiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7Ci0JCQkJZ290byBtZW1fZXJyb3I7Ci0JCQl9Ci0JCQlwY2lfdW5tYXBfYWRkcl9zZXQobGJxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCQlwY2lfdW5tYXBfbGVuX3NldChsYnFfZGVzYywgbWFwbGVuLCBQQUdFX1NJWkUpOwotCQkJKmxicV9kZXNjLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwKTsKLQkJfQotCQlicSsrOwotCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnJvcjoKLQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCXJldHVybiAtRU5PTUVNOwotfQotCiBzdGF0aWMgdm9pZCBxbF9mcmVlX3NicV9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKIAlpbnQgaTsKQEAgLTIxNjcsNjMgKzIyNjAsNzIgQEAKIAl9CiB9CiAKLS8qIEFsbG9jYXRlIGFuZCBtYXAgYW4gc2tiIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIHNicS4gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2Nfc2JxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisvKiBGcmVlIGFsbCBsYXJnZSBhbmQgc21hbGwgcnggYnVmZmVycyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBjb21wbGV0aW9uIHF1ZXVlcyBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHFsX2ZyZWVfcnhfYnVmZmVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKKworCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOworCQlpZiAocnhfcmluZy0+bGJxKQorCQkJcWxfZnJlZV9sYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKKwkJaWYgKHJ4X3JpbmctPnNicSkKKwkJCXFsX2ZyZWVfc2JxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CisJCWlmIChyeF9yaW5nLT50eXBlICE9IFRYX1EpCisJCQlxbF91cGRhdGVfYnVmZmVyX3F1ZXVlcyhxZGV2LCByeF9yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2luaXRfbGJxX3Jpbmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCit7CisJaW50IGk7CisJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOworCV9fbGU2NCAqYnEgPSByeF9yaW5nLT5sYnFfYmFzZTsKKworCW1lbXNldChyeF9yaW5nLT5sYnEsIDAsIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2Yoc3RydWN0IGJxX2Rlc2MpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+bGJxX2xlbjsgaSsrKSB7CisJCWxicV9kZXNjID0gJnJ4X3JpbmctPmxicVtpXTsKKwkJbWVtc2V0KGxicV9kZXNjLCAwLCBzaXplb2YoKmxicV9kZXNjKSk7CisJCWxicV9kZXNjLT5pbmRleCA9IGk7CisJCWxicV9kZXNjLT5hZGRyID0gYnE7CisJCWJxKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9pbml0X3NicV9yaW5nKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewogCWludCBpOwogCXN0cnVjdCBicV9kZXNjICpzYnFfZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXU2NCBtYXA7CiAJX19sZTY0ICpicSA9IHJ4X3JpbmctPnNicV9iYXNlOwogCisJbWVtc2V0KHJ4X3JpbmctPnNicSwgMCwgcnhfcmluZy0+c2JxX2xlbiAqIHNpemVvZihzdHJ1Y3QgYnFfZGVzYykpOwogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5zYnFfbGVuOyBpKyspIHsKIAkJc2JxX2Rlc2MgPSAmcnhfcmluZy0+c2JxW2ldOwotCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZihzYnFfZGVzYykpOworCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZigqc2JxX2Rlc2MpKTsKIAkJc2JxX2Rlc2MtPmluZGV4ID0gaTsKIAkJc2JxX2Rlc2MtPmFkZHIgPSBicTsKLQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LCByeF9yaW5nLT5zYnFfYnVmX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJzbWFsbCBidWZmIGFsbG9jIGZhaWxlZCBmb3IgJWQgYnl0ZXMgYXQgaW5kZXggJWQuXG4iLAotCQkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSwgaSk7Ci0JCQlnb3RvIG1lbV9lcnI7Ci0JCX0KLQkJc2tiX3Jlc2VydmUoc2tiLCBRTEdFX1NCX1BBRCk7Ci0JCXNicV9kZXNjLT5wLnNrYiA9IHNrYjsKLQkJLyoKLQkJICogTWFwIG9ubHkgaGFsZiB0aGUgYnVmZmVyLiBCZWNhdXNlIHRoZQotCQkgKiBvdGhlciBoYWxmIG1heSBnZXQgc29tZSBkYXRhIGNvcGllZCB0byBpdAotCQkgKiB3aGVuIHRoZSBjb21wbGV0aW9uIGFycml2ZXMuCi0JCSAqLwotCQltYXAgPSBwY2lfbWFwX3NpbmdsZShxZGV2LT5wZGV2LAotCQkJCSAgICAgc2tiLT5kYXRhLAotCQkJCSAgICAgcnhfcmluZy0+c2JxX2J1Zl9zaXplIC8gMiwKLQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJQQ0kgbWFwcGluZyBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gbWVtX2VycjsKLQkJfQotCQlwY2lfdW5tYXBfYWRkcl9zZXQoc2JxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCXBjaV91bm1hcF9sZW5fc2V0KHNicV9kZXNjLCBtYXBsZW4sIHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpOwotCQkqc2JxX2Rlc2MtPmFkZHIgPSBjcHVfdG9fbGU2NChtYXApOwogCQlicSsrOwogCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnI6Ci0JcWxfZnJlZV9zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgcWxfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF9mcmVlX3NicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCiAJLyogRnJlZSB0aGUgc21hbGwgYnVmZmVyIHF1ZXVlLiAqLwogCWlmIChyeF9yaW5nLT5zYnFfYmFzZSkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCkBAIC0yMzAxLDExICsyNDAzLDcgQEAKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCi0JCWlmIChxbF9hbGxvY19zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIlNtYWxsIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwotCQkJZ290byBlcnJfbWVtOwotCQl9CisJCXFsX2luaXRfc2JxX3JpbmcocWRldiwgcnhfcmluZyk7CiAJfQogCiAJaWYgKHJ4X3JpbmctPmxicV9sZW4pIHsKQEAgLTIzMzMsMTQgKzI0MzEsNyBAQAogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIGJ1ZmZlcnMuCi0JCSAqLwotCQlpZiAocWxfYWxsb2NfbGJxX2J1ZmZlcnMocWRldiwgcnhfcmluZykpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJMYXJnZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gZXJyX21lbTsKLQkJfQorCQlxbF9pbml0X2xicV9yaW5nKHFkZXYsIHJ4X3JpbmcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQzNCw2ICsyNTI1LDcgQEAKIAkgICAgcWRldi0+ZG9vcmJlbGxfYXJlYSArIChEQl9QQUdFX1NJWkUgKiAoMTI4ICsgcnhfcmluZy0+Y3FfaWQpKTsKIAlpbnQgZXJyID0gMDsKIAl1MTYgYnFfbGVuOworCXU2NCB0bXA7CiAKIAkvKiBTZXQgdXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgZm9yIHRoaXMgcmluZy4gKi8KIAlyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcgPSBzaGFkb3dfcmVnOwpAQCAtMjQ3OSw3ICsyNTcxLDggQEAKIAkgICAgRkxBR1NfTEk7CQkvKiBMb2FkIGlycSBkZWxheSB2YWx1ZXMgKi8KIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTEw7CS8qIExvYWQgbGJxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+bGJxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPmxicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+bGJxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9idWZfc2l6ZSA9PSA2NTUzNikgPyAwIDoKQEAgLTI0ODgsMjUgKzI1ODEsMjYgQEAKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9sZW4gPT0gNjU1MzYpID8gMCA6CiAJCQkodTE2KSByeF9yaW5nLT5sYnFfbGVuOwogCQljcWljYi0+bGJxX2xlbiA9IGNwdV90b19sZTE2KGJxX2xlbik7Ci0JCXJ4X3JpbmctPmxicV9wcm9kX2lkeCA9IHJ4X3JpbmctPmxicV9sZW4gLSAxNjsKKwkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKIAkJcnhfcmluZy0+bGJxX2N1cnJfaWR4ID0gMDsKLQkJcnhfcmluZy0+bGJxX2NsZWFuX2lkeCA9IHJ4X3JpbmctPmxicV9wcm9kX2lkeDsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250ID0gMTY7CisJCXJ4X3JpbmctPmxicV9jbGVhbl9pZHggPSAwOworCQlyeF9yaW5nLT5sYnFfZnJlZV9jbnQgPSByeF9yaW5nLT5sYnFfbGVuOwogCX0KIAlpZiAocnhfcmluZy0+c2JxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTFM7CS8qIExvYWQgc2JxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+c2JxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPnNicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+c2JxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJY3FpY2ItPnNicV9idWZfc2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNigoKHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpICsgOCkgJiAweGZmZmZmZmY4KTsKKwkJICAgIGNwdV90b19sZTE2KCh1MTYpKHJ4X3JpbmctPnNicV9idWZfc2l6ZS8yKSk7CiAJCWJxX2xlbiA9IChyeF9yaW5nLT5zYnFfbGVuID09IDY1NTM2KSA/IDAgOgogCQkJKHUxNikgcnhfcmluZy0+c2JxX2xlbjsKIAkJY3FpY2ItPnNicV9sZW4gPSBjcHVfdG9fbGUxNihicV9sZW4pOwotCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSByeF9yaW5nLT5zYnFfbGVuIC0gMTY7CisJCXJ4X3JpbmctPnNicV9wcm9kX2lkeCA9IDA7CiAJCXJ4X3JpbmctPnNicV9jdXJyX2lkeCA9IDA7Ci0JCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfcHJvZF9pZHg7Ci0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCA9IDE2OworCQlyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gMDsKKwkJcnhfcmluZy0+c2JxX2ZyZWVfY250ID0gcnhfcmluZy0+c2JxX2xlbjsKIAl9CiAJc3dpdGNoIChyeF9yaW5nLT50eXBlKSB7CiAJY2FzZSBUWF9ROgpAQCAtMjU1MiwyNCArMjY0NiwxMyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW52YWxpZCByeF9yaW5nLT50eXBlID0gJWQuXG4iLAogCQkJcnhfcmluZy0+dHlwZSk7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CiAJZXJyID0gcWxfd3JpdGVfY2ZnKHFkZXYsIGNxaWNiLCBzaXplb2Yoc3RydWN0IGNxaWNiKSwKIAkJCSAgIENGR19MQ1EsIHJ4X3JpbmctPmNxX2lkKTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBDUUlDQi5cbiIpOwotCS8qCi0JICogQWR2YW5jZSB0aGUgcHJvZHVjZXIgaW5kZXggZm9yIHRoZSBidWZmZXIgcXVldWVzLgotCSAqLwotCXdtYigpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+bGJxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPmxicV9wcm9kX2lkeF9kYl9yZWcpOwotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI2MTYsNyArMjY5OSw3IEBACiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgdHhfcmluZy5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJTdWNjZXNzZnVsbHkgbG9hZGVkIFdRSUNCLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgV1FJQ0IuXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjU4LDcgKzI3NDEsNyBAQAogCQkgICAgKHFkZXYtPnBkZXYsIHFkZXYtPm1zaV94X2VudHJ5LCBxZGV2LT5yeF9yaW5nX2NvdW50KSkgewogCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CiAJCQlxZGV2LT5pbnRyX2NvdW50ID0gcWRldi0+cnhfcmluZ19jb3VudDsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKIAkJCQlxZGV2LT5pbnRyX2NvdW50KTsKIAkJCXJldHVybjsKQEAgLTI3ODUsMTEgKzI4NjgsMTEgQEAKIAkJCWlmICh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKIAkJCQlmcmVlX2lycShxZGV2LT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsCiAJCQkJCSAmcWRldi0+cnhfcmluZ1tpXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKKwkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgREVCVUcsCiAJCQkJCSJmcmVlaW5nIG1zaXggaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9IGVsc2UgewogCQkJCWZyZWVfaXJxKHFkZXYtPnBkZXYtPmlycSwgJnFkZXYtPnJ4X3JpbmdbMF0pOwotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBFUlIsCisJCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLAogCQkJCQkiZnJlZWluZyBtc2kgaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9CiAJCX0KQEAgLTI4MjAsNyArMjkwMyw3IEBACiAJCQkJCWkpOwogCQkJCWdvdG8gZXJyX2lycTsKIAkJCX0gZWxzZSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLAorCQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJCSJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcyVzJXMsIHdpdGggbmFtZSAlcy5cbiIsCiAJCQkJCWksCiAJCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQpAQCAtMjg5NSwxNCArMjk3OCwxNCBAQAogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2Nl9oYXNoX2tleVswXSwgNDApOwogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2NF9oYXNoX2tleVswXSwgMTYpOwogCi0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJJbml0aWFsaXppbmcgUlNTLlxuIik7CiAKIAlzdGF0dXMgPSBxbF93cml0ZV9jZmcocWRldiwgcmljYiwgc2l6ZW9mKHJpY2IpLCBDRkdfTFIsIDApOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBSSUNCLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgUklDQi5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJTdWNjZXNzZnVsbHkgbG9hZGVkIFJJQ0IuXG4iKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yOTEyLDEzICsyOTk1LDE3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGk7CiAKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCiAJLyogQ2xlYXIgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSByb3V0aW5nIHRhYmxlLiAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAwLCAwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIENBTSBwYWNrZXRzLlxuIik7Ci0JCQlyZXR1cm4gc3RhdHVzOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC0yOTI2LDEzICszMDEzLDEzIEBACiAJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBlcnJvciBwYWNrZXRzLlxuIik7Ci0JCXJldHVybiBzdGF0dXM7CisJCWdvdG8gZXhpdDsKIAl9CiAJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9CQ0FTVF9TTE9ULCBSVF9JRFhfQkNBU1QsIDEpOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgYnJvYWRjYXN0IHBhY2tldHMuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byBleGl0OwogCX0KIAkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgaW5ib3VuZCBxdWV1ZSwgdGhlbiB0dXJuIG9uIFJTUyBpbiB0aGUKIAkgKiByb3V0aW5nIGJsb2NrLgpAQCAtMjk0MywxNyArMzAzMCwzOSBAQAogCQlpZiAoc3RhdHVzKSB7CiAJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgTUFUQ0ggUlNTIHBhY2tldHMuXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0NBTV9ISVRfU0xPVCwKIAkJCQkgICAgUlRfSURYX0NBTV9ISVQsIDEpOwotCWlmIChzdGF0dXMpIHsKKwlpZiAoc3RhdHVzKQogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gcGFja2V0cy5cbiIpOworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAorCQkJICAgICBNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMgKiBNQVhfQ1EpOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KKworCXN0YXR1cyA9IHFsX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yOTcwLDkgKzMwNzksOSBAQAogCW1hc2sgPSB2YWx1ZSA8PCAxNjsKIAlxbF93cml0ZTMyKHFkZXYsIFNZUywgbWFzayB8IHZhbHVlKTsKIAotCS8qIFNldCB0aGUgZGVmYXVsdCBxdWV1ZS4gKi8KLQl2YWx1ZSA9IE5JQ19SQ1ZfQ0ZHX0RGUTsKLQltYXNrID0gTklDX1JDVl9DRkdfREZRX01BU0s7CisJLyogU2V0IHRoZSBkZWZhdWx0IHF1ZXVlLCBhbmQgVkxBTiBiZWhhdmlvci4gKi8KKwl2YWx1ZSA9IE5JQ19SQ1ZfQ0ZHX0RGUSB8IE5JQ19SQ1ZfQ0ZHX1JWOworCW1hc2sgPSBOSUNfUkNWX0NGR19ERlFfTUFTSyB8IChOSUNfUkNWX0NGR19SViA8PCAxNik7CiAJcWxfd3JpdGUzMihxZGV2LCBOSUNfUkNWX0NGRywgKG1hc2sgfCB2YWx1ZSkpOwogCiAJLyogU2V0IHRoZSBNUEkgaW50ZXJydXB0IHRvIGVuYWJsZWQuICovCkBAIC0zMDIxLDI4ICszMTMwLDI0IEBACiAJCX0KIAl9CiAKLQlzdGF0dXMgPSBxbF9wb3J0X2luaXRpYWxpemUocWRldik7Ci0JaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQorCS8qIEluaXRpYWxpemUgdGhlIHBvcnQgYW5kIHNldCB0aGUgbWF4IGZyYW1lc2l6ZS4gKi8KKwlzdGF0dXMgPSBxZGV2LT5uaWNfb3BzLT5wb3J0X2luaXRpYWxpemUocWRldik7CisgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICBRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7CisgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgfQogCi0Jc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAotCQkJCSAgICAgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKTsKKwkvKiBTZXQgdXAgdGhlIE1BQyBhZGRyZXNzIGFuZCBmcmFtZSByb3V0aW5nIGZpbHRlci4gKi8KKwlzdGF0dXMgPSBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgbWFjIGFkZHJlc3MuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlzdGF0dXMgPSBxbF9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwotCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBTdGFydCBOQVBJIGZvciB0aGUgUlNTIHF1ZXVlcy4gKi8KIAlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCisJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCiAJCQlpKTsKIAkJbmFwaV9lbmFibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAJfQpAQCAtMzA1NCwzNiArMzE1OSwyMyBAQAogc3RhdGljIGludCBxbF9hZGFwdGVyX3Jlc2V0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCXUzMiB2YWx1ZTsKLQlpbnQgbWF4X3dhaXRfdGltZTsKIAlpbnQgc3RhdHVzID0gMDsKLQlpbnQgcmVzZXRDbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsKKwkJbWF4KCh1bnNpZ25lZCBsb25nKTEsIHVzZWNzX3RvX2ppZmZpZXMoMzApKTsKIAotI2RlZmluZSBNQVhfUkVTRVRfQ05UICAgMQotaXNzdWVSZXNldDoKLQlyZXNldENudCsrOwotCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywgIklzc3VlIHNvZnQgcmVzZXQgdG8gY2hpcC5cbiIpOwogCXFsX3dyaXRlMzIocWRldiwgUlNUX0ZPLCAoUlNUX0ZPX0ZSIDw8IDE2KSB8IFJTVF9GT19GUik7Ci0JLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuICovCi0JbWF4X3dhaXRfdGltZSA9IDM7Ci0JUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLCAiV2FpdCAlZCBzZWNvbmRzIGZvciByZXNldCB0byBjb21wbGV0ZS5cbiIsCi0JCW1heF93YWl0X3RpbWUpOworCiAJZG8gewogCQl2YWx1ZSA9IHFsX3JlYWQzMihxZGV2LCBSU1RfRk8pOwogCQlpZiAoKHZhbHVlICYgUlNUX0ZPX0ZSKSA9PSAwKQogCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF9qaWZmaWVzKSk7CiAKLQkJc3NsZWVwKDEpOwotCX0gd2hpbGUgKCgtLW1heF93YWl0X3RpbWUpKTsKIAlpZiAodmFsdWUgJiBSU1RfRk9fRlIpIHsKIAkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKLQkJCSJTdHVjayBpbiBTb2Z0UmVzZXQ6ICBGU0NfU1I6MHglMDh4XG4iLCB2YWx1ZSk7Ci0JCWlmIChyZXNldENudCA8IE1BWF9SRVNFVF9DTlQpCi0JCQlnb3RvIGlzc3VlUmVzZXQ7Ci0JfQotCWlmIChtYXhfd2FpdF90aW1lID09IDApIHsKLQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKIAkJCSJFVElNRU9VVCEhISBlcnJvcmVkIG91dCBvZiByZXNldHRpbmcgdGhlIGNoaXAhXG4iKTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzEwNiwxMiArMzE5OCwxMCBAQAogCiBzdGF0aWMgaW50IHFsX2FkYXB0ZXJfZG93bihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CiAJaW50IGksIHN0YXR1cyA9IDA7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwogCiAJLyogRG9uJ3Qga2lsbCB0aGUgcmVzZXQgd29ya2VyIHRocmVhZCBpZiB3ZQogCSAqIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZWNvdmVyeS4KQEAgLTMxMjAsNiArMzIxMCw4IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+YXNpY19yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAKIAkvKiBUaGUgZGVmYXVsdCBxdWV1ZSBhdCBpbmRleCAwIGlzIGFsd2F5cyBwcm9jZXNzZWQgaW4KIAkgKiBhIHdvcmtxdWV1ZS4KQEAgLTMxNDksNiArMzI0MSwxMyBAQAogCiAJcWxfdHhfcmluZ19jbGVhbihxZGV2KTsKIAorCS8qIENhbGwgbmV0aWZfbmFwaV9kZWwoKSBmcm9tIGNvbW1vbiBwb2ludC4KKwkgKi8KKwlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykKKwkJbmV0aWZfbmFwaV9kZWwoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CisKKwlxbF9mcmVlX3J4X2J1ZmZlcnMocWRldik7CisKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCXN0YXR1cyA9IHFsX2FkYXB0ZXJfcmVzZXQocWRldik7CiAJaWYgKHN0YXR1cykKQEAgLTMxNjIsMjEgKzMyNjEsMTkgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJZXJyID0gcWxfYWRhcHRlcl9pbml0aWFsaXplKHFkZXYpOwogCWlmIChlcnIpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgYWRhcHRlci5cbiIpOwogCQlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CiAJCWdvdG8gZXJyX2luaXQ7CiAJfQotCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CisJcWxfYWxsb2NfcnhfYnVmZmVycyhxZGV2KTsKKwlpZiAoKHFsX3JlYWQzMihxZGV2LCBTVFMpICYgcWRldi0+cG9ydF9pbml0KSkKKwkJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKIAlxbF9lbmFibGVfaW50ZXJydXB0cyhxZGV2KTsKIAlxbF9lbmFibGVfYWxsX2NvbXBsZXRpb25faW50ZXJydXB0cyhxZGV2KTsKLQlpZiAoKHFsX3JlYWQzMihxZGV2LCBTVFMpICYgcWRldi0+cG9ydF9pbml0KSkgewotCQluZXRpZl9jYXJyaWVyX29uKHFkZXYtPm5kZXYpOwotCQluZXRpZl9zdGFydF9xdWV1ZShxZGV2LT5uZGV2KTsKLQl9CisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhxZGV2LT5uZGV2KTsKIAogCXJldHVybiAwOwogZXJyX2luaXQ6CkBAIC0zMTg0LDI4ICszMjgxLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHFsX2N5Y2xlX2FkYXB0ZXIoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IHFsX2FkYXB0ZXJfZG93bihxZGV2KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGVycm9yOwotCi0Jc3RhdHVzID0gcWxfYWRhcHRlcl91cChxZGV2KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGVycm9yOwotCi0JcmV0dXJuIHN0YXR1czsKLWVycm9yOgotCVFQUklOVEsocWRldiwgSUZVUCwgQUxFUlQsCi0JCSJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKLQlydG5sX2xvY2soKTsKLQlkZXZfY2xvc2UocWRldi0+bmRldik7Ci0JcnRubF91bmxvY2soKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCiBzdGF0aWMgdm9pZCBxbF9yZWxlYXNlX2FkYXB0ZXJfcmVzb3VyY2VzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCXFsX2ZyZWVfbWVtX3Jlc291cmNlcyhxZGV2KTsKQEAgLTMyODYsNiArMzM2MSw3IEBACiAJICogY29tcGxldGlvbiBoYW5kbGVyIHJ4X3JpbmdzLgogCSAqLwogCXFkZXYtPnJ4X3JpbmdfY291bnQgPSBxZGV2LT50eF9yaW5nX2NvdW50ICsgcWRldi0+cnNzX3JpbmdfY291bnQgKyAxOworCW5ldGlmX3NldF9nc29fbWF4X3NpemUocWRldi0+bmRldiwgNjU1MzYpOwogCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnR4X3JpbmdfY291bnQ7IGkrKykgewogCQl0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbaV07CkBAIC0zMzkyLDYgKzM0NjgsOCBAQAogCiAJaWYgKG5kZXYtPm10dSA9PSAxNTAwICYmIG5ld19tdHUgPT0gOTAwMCkgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNoYW5naW5nIHRvIGp1bWJvIE1UVS5cbiIpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLAorCQkJCSZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgMCk7CiAJfSBlbHNlIGlmIChuZGV2LT5tdHUgPT0gOTAwMCAmJiBuZXdfbXR1ID09IDE1MDApIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDaGFuZ2luZyB0byBub3JtYWwgTVRVLlxuIik7CiAJfSBlbHNlIGlmICgobmRldi0+bXR1ID09IDE1MDAgJiYgbmV3X210dSA9PSAxNTAwKSB8fApAQCAtMzQxNCw4ICszNDkyLDExIEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQlpbnQgaTsKKwlpbnQgaSwgc3RhdHVzOwogCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJLyoKIAkgKiBTZXQgb3IgY2xlYXIgcHJvbWlzY3VvdXMgbW9kZSBpZiBhCkBAIC0zNDcxLDE0ICszNTUyLDE5IEBACiAJfQogCiAJaWYgKG5kZXYtPm1jX2NvdW50KSB7CisJCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGV4aXQ7CiAJCWZvciAoaSA9IDAsIG1jX3B0ciA9IG5kZXYtPm1jX2xpc3Q7IG1jX3B0cjsKIAkJICAgICBpKyssIG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkKIAkJCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBtY19wdHItPmRtaV9hZGRyLAogCQkJCQkJTUFDX0FERFJfVFlQRV9NVUxUSV9NQUMsIGkpKSB7CiAJCQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLAogCQkJCQkiRmFpbGVkIHRvIGxvYWRtdWx0aWNhc3QgYWRkcmVzcy5cbiIpOworCQkJCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KKwkJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJCWlmIChxbF9zZXRfcm91dGluZ19yZWcKIAkJICAgIChxZGV2LCBSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCwgUlRfSURYX01DQVNUX01BVENILCAxKSkgewogCQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLApAQCAtMzQ4OSwxMyArMzU3NSwxNCBAQAogCX0KIGV4aXQ6CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIH0KIAogc3RhdGljIGludCBxbGdlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWxfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7Ci0JaW50IHJldCA9IDA7CisJaW50IHN0YXR1czsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMzUwNCwxNSArMzU5MSwxNyBAQAogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZGV2LT5hZGRyX2xlbik7CiAKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKLQlpZiAocWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbmRldi0+ZGV2X2FkZHIsCi0JCQlNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMpKSB7LyogVW5pY2FzdCAqLwotCQlRUFJJTlRLKHFkZXYsIEhXLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBNQUMgYWRkcmVzcy5cbiIpOwotCQlyZXQgPSAtMTsKLQl9CisJc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbmRldi0+ZGV2X2FkZHIsCisJCQlNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMgKiBNQVhfQ1EpOwogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKLQotCXJldHVybiByZXQ7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBIVywgRVJSLCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgdm9pZCBxbGdlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0zNTI1LDkgKzM2MTQsMzcgQEAKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxfYWRhcHRlciwgYXNpY19yZXNldF93b3JrLndvcmspOwotCXFsX2N5Y2xlX2FkYXB0ZXIocWRldik7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHFsX2FkYXB0ZXJfZG93bihxZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gcWxfYWRhcHRlcl91cChxZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuOworZXJyb3I6CisJUVBSSU5USyhxZGV2LCBJRlVQLCBBTEVSVCwKKwkJIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2VcbiIpOworCXJ0bmxfbG9jaygpOworCXNldF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKKwlkZXZfY2xvc2UocWRldi0+bmRldik7CisJcnRubF91bmxvY2soKTsKIH0KIAorc3RhdGljIHN0cnVjdCBuaWNfb3BlcmF0aW9ucyBxbGE4MDEyX25pY19vcHMgPSB7CisJLmdldF9mbGFzaAkJPSBxbF9nZXRfODAxMl9mbGFzaF9wYXJhbXMsCisJLnBvcnRfaW5pdGlhbGl6ZQk9IHFsXzgwMTJfcG9ydF9pbml0aWFsaXplLAorfTsKKworc3RhdGljIHN0cnVjdCBuaWNfb3BlcmF0aW9ucyBxbGE4MDAwX25pY19vcHMgPSB7CisJLmdldF9mbGFzaAkJPSBxbF9nZXRfODAwMF9mbGFzaF9wYXJhbXMsCisJLnBvcnRfaW5pdGlhbGl6ZQk9IHFsXzgwMDBfcG9ydF9pbml0aWFsaXplLAorfTsKKworCiBzdGF0aWMgdm9pZCBxbF9nZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlxZGV2LT5mdW5jID0KQEAgLTM1NDYsNiArMzY2MywxMSBAQAogCQlxZGV2LT5tYWlsYm94X291dCA9IFBST0NfQUREUl9NUElfUklTQyB8IFBST0NfQUREUl9GVU5DMF9NQk87CiAJfQogCXFkZXYtPmNoaXBfcmV2X2lkID0gcWxfcmVhZDMyKHFkZXYsIFJFVl9JRCk7CisJcWRldi0+ZGV2aWNlX2lkID0gcWRldi0+cGRldi0+ZGV2aWNlOworCWlmIChxZGV2LT5kZXZpY2VfaWQgPT0gUUxHRV9ERVZJQ0VfSURfODAxMikKKwkJcWRldi0+bmljX29wcyA9ICZxbGE4MDEyX25pY19vcHM7CisJZWxzZSBpZiAocWRldi0+ZGV2aWNlX2lkID09IFFMR0VfREVWSUNFX0lEXzgwMDApCisJCXFkZXYtPm5pY19vcHMgPSAmcWxhODAwMF9uaWNfb3BzOwogfQogCiBzdGF0aWMgdm9pZCBxbF9yZWxlYXNlX2FsbChzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTM2MzgsMjQgKzM3NjAsMjAgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCXFsX2dldF9ib2FyZF9pbmZvKHFkZXYpOwogCXFkZXYtPm5kZXYgPSBuZGV2OwogCXFkZXYtPnBkZXYgPSBwZGV2OworCXFsX2dldF9ib2FyZF9pbmZvKHFkZXYpOwogCXFkZXYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2cpOwogCXNwaW5fbG9ja19pbml0KCZxZGV2LT5od19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcWRldi0+c3RhdHNfbG9jayk7CiAKIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCi0JZXJyID0gcWxfZ2V0X2ZsYXNoX3BhcmFtcyhxZGV2KTsKKwllcnIgPSBxZGV2LT5uaWNfb3BzLT5nZXRfZmxhc2gocWRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIEZMQVNILlxuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocWRldi0+Zmxhc2gubWFjX2FkZHIpKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQltZW1jcHkobmRldi0+ZGV2X2FkZHIsIHFkZXYtPmZsYXNoLm1hY19hZGRyLCBuZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5kZXYtPnBlcm1fYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKIAogCS8qIFNldCB1cCB0aGUgZGVmYXVsdCByaW5nIHNpemVzLiAqLwpAQCAtMzY3OCw2ICszNzk2LDEwIEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPmFzaWNfcmVzZXRfd29yaywgcWxfYXNpY19yZXNldF93b3JrKTsKIAlJTklUX0RFTEFZRURfV09SSygmcWRldi0+bXBpX3Jlc2V0X3dvcmssIHFsX21waV9yZXNldF93b3JrKTsKIAlJTklUX0RFTEFZRURfV09SSygmcWRldi0+bXBpX3dvcmssIHFsX21waV93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmssIHFsX21waV9wb3J0X2NmZ193b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcWRldi0+bXBpX2lkY193b3JrLCBxbF9tcGlfaWRjX3dvcmspOworCW11dGV4X2luaXQoJnFkZXYtPm1waV9tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZxZGV2LT5pZGVfY29tcGxldGlvbik7CiAKIAlpZiAoIWNhcmRzX2ZvdW5kKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlc1xuIiwgRFJWX1NUUklORyk7CkBAIC0zNzE1LDcgKzM4MzcsOCBAQAogCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQgPSAwOwogCWludCBlcnIgPSAwOwogCi0JbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgcWxfYWRhcHRlcikpOworCW5kZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IHFsX2FkYXB0ZXIpLAorCQkJbWluKE1BWF9DUFVTLCAoaW50KW51bV9vbmxpbmVfY3B1cygpKSk7CiAJaWYgKCFuZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMzczNSw2ICszODU4LDcgQEAKIAkJCSAgfCBORVRJRl9GX1RTT19FQ04KIAkJCSAgfCBORVRJRl9GX0hXX1ZMQU5fVFgKIAkJCSAgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKTsKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAogCWlmICh0ZXN0X2JpdChRTF9ETUE2NCwgJnFkZXYtPmZsYWdzKSkKIAkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwpAQCAtMzc1Nyw3ICszODgxLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJbmV0aWZfY2Fycmllcl9vZmYobmRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAlxbF9kaXNwbGF5X2Rldl9pbmZvKG5kZXYpOwogCWNhcmRzX2ZvdW5kKys7CiAJcmV0dXJuIDA7CkBAIC0zODExLDcgKzM5MzQsNiBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJbmV0aWZfY2Fycmllcl9vZmYobmRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAlxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpOwogCiAJLyogTWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwpAQCAtMzg1Myw3ICszOTc1LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwotCWludCBlcnIsIGk7CisJaW50IGVycjsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CiAKQEAgLTM4NjMsOSArMzk4NSw2IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWZvciAoaSA9IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKQotCQluZXRpZl9uYXBpX2RlbCgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKLQogCWVyciA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKaW5kZXggZmEzMTg5MS4uOWY4MWI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwpAQCAtMSw2ICsxLDI2IEBACiAjaW5jbHVkZSAicWxnZS5oIgogCi1zdGF0aWMgaW50IHFsX3JlYWRfbWJveF9yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsIHUzMiAqZGF0YSkKK3N0YXRpYyB2b2lkIHFsX2Rpc3BsYXlfbWJfc3RzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAorCQkJCQkJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBpOworCXN0YXRpYyBjaGFyICplcnJfc3RzW10gPSB7CisJCSJDb21tYW5kIENvbXBsZXRlIiwKKwkJIkNvbW1hbmQgTm90IFN1cHBvcnRlZCIsCisJCSJIb3N0IEludGVyZmFjZSBFcnJvciIsCisJCSJDaGVja3N1bSBFcnJvciIsCisJCSJVbnVzZWQgQ29tcGxldGlvbiBTdGF0dXMiLAorCQkiVGVzdCBGYWlsZWQiLAorCQkiQ29tbWFuZCBQYXJhbWV0ZXIgRXJyb3IifTsKKworCVFQUklOVEsocWRldiwgRFJWLCBERUJVRywgIiVzLlxuIiwKKwkJZXJyX3N0c1ttYmNwLT5tYm94X291dFswXSAmIDB4MDAwMDAwMGZdKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWJjcC0+b3V0X2NvdW50OyBpKyspCisJCVFQUklOVEsocWRldiwgRFJWLCBERUJVRywgIm1ib3hfb3V0WyVkXSA9IDB4JS4wOHguXG4iLAorCQkJCWksIG1iY3AtPm1ib3hfb3V0W2ldKTsKK30KKworaW50IHFsX3JlYWRfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQogewogCWludCBzdGF0dXM7CiAJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KQEAgLTE5LDYgKzM5LDMyIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAoraW50IHFsX3dyaXRlX21waV9yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsIHUzMiBkYXRhKQoreworCWludCBzdGF0dXMgPSAwOworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9yZWdfcmR5KHFkZXYsIFBST0NfQUREUiwgUFJPQ19BRERSX1JEWSwgUFJPQ19BRERSX0VSUik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCS8qIHdyaXRlIHRoZSBkYXRhIHRvIHRoZSBkYXRhIHJlZyAqLworCXFsX3dyaXRlMzIocWRldiwgUFJPQ19EQVRBLCBkYXRhKTsKKwkvKiB0cmlnZ2VyIHRoZSB3cml0ZSAqLworCXFsX3dyaXRlMzIocWRldiwgUFJPQ19BRERSLCByZWcpOworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9yZWdfcmR5KHFkZXYsIFBST0NfQUREUiwgUFJPQ19BRERSX1JEWSwgUFJPQ19BRERSX0VSUik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgcWxfc29mdF9yZXNldF9tcGlfcmlzYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzOworCXN0YXR1cyA9IHFsX3dyaXRlX21waV9yZWcocWRldiwgMHgwMDAwMTAxMCwgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKwogc3RhdGljIGludCBxbF9nZXRfbWJfc3RzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CiAJaW50IGksIHN0YXR1czsKQEAgLTI4LDcgKzc0LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlmb3IgKGkgPSAwOyBpIDwgbWJjcC0+b3V0X2NvdW50OyBpKyspIHsKIAkJc3RhdHVzID0KLQkJICAgIHFsX3JlYWRfbWJveF9yZWcocWRldiwgcWRldi0+bWFpbGJveF9vdXQgKyBpLAorCQkgICAgcWxfcmVhZF9tcGlfcmVnKHFkZXYsIHFkZXYtPm1haWxib3hfb3V0ICsgaSwKIAkJCQkgICAgICZtYmNwLT5tYm94X291dFtpXSk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJGYWlsZWQgbWFpbGJveCByZWFkLlxuIik7CkBAIC0zOSw2MyArODUsNzQ0IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyogV2FpdCBmb3IgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kIHRvIGNvbXBsZXRlLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgcWxfd2FpdF9tYnhfY21kX2NtcGx0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBjb3VudCA9IDUwOwkvKiBUT0RPOiBhcmJpdHJhcnkgZm9yIG5vdy4gKi8KKwl1MzIgdmFsdWU7CisKKwlkbyB7CisJCXZhbHVlID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CisJCWlmICh2YWx1ZSAmIFNUU19QSSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoVURFTEFZX0RFTEFZKTsgLyogMTB1cyAqLworCX0gd2hpbGUgKC0tY291bnQpOworCXJldHVybiAtRVRJTUVET1VUOworfQorCisvKiBFeGVjdXRlIGEgc2luZ2xlIG1haWxib3ggY29tbWFuZC4KKyAqIENhbGxlciBtdXN0IGhvbGQgUFJPQ19BRERSIHNlbWFwaG9yZS4KKyAqLworc3RhdGljIGludCBxbF9leGVjX21iX2NtZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBpLCBzdGF0dXM7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSdzIG5vdGhpbmcgcGVuZGluZy4KKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uCisJICovCisJaWYgKHFsX3JlYWQzMihxZGV2LCBDU1IpICYgQ1NSX0hSSSkKKwkJcmV0dXJuIC1FSU87CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1BST0NfUkVHX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIEZpbGwgdGhlIG91dGJvdW5kIG1haWxib3hlcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWJjcC0+aW5fY291bnQ7IGkrKykgeworCQlzdGF0dXMgPSBxbF93cml0ZV9tcGlfcmVnKHFkZXYsIHFkZXYtPm1haWxib3hfaW4gKyBpLAorCQkJCQkJbWJjcC0+bWJveF9pbltpXSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKwl9CisJLyoKKwkgKiBXYWtlIHVwIHRoZSBNUEkgZmlybXdhcmUuCisJICovCisJcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfU0VUX0gyUl9JTlQpOworZW5kOgorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1BST0NfUkVHX01BU0spOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFdlIGFyZSBiZWluZyBhc2tlZCBieSBmaXJtd2FyZSB0byBhY2NlcHQKKyAqIGEgY2hhbmdlIHRvIHRoZSBwb3J0LiAgVGhpcyBpcyBvbmx5CisgKiBhIGNoYW5nZSB0byBtYXggZnJhbWUgc2l6ZXMgKFR4L1J4KSwgcGF1c2UKKyAqIHBhcmFtdGVycywgb3IgbG9vcGJhY2sgbW9kZS4gV2Ugd2FrZSB1cCBhIHdvcmtlcgorICogdG8gaGFuZGxlciBwcm9jZXNzaW5nIHRoaXMgc2luY2UgYSBtYWlsYm94IGNvbW1hbmQKKyAqIHdpbGwgbmVlZCB0byBiZSBzZW50IHRvIEFDSyB0aGUgcmVxdWVzdC4KKyAqLworc3RhdGljIGludCBxbF9pZGNfcmVxX2FlbihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZxZGV2LT5pZGNfbWJjOworCisJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkVudGVyIVxuIik7CisJLyogR2V0IHRoZSBzdGF0dXMgZGF0YSBhbmQgc3RhcnQgdXAgYSB0aHJlYWQgdG8KKwkgKiBoYW5kbGUgdGhlIHJlcXVlc3QuCisJICovCisJbWJjcCA9ICZxZGV2LT5pZGNfbWJjOworCW1iY3AtPm91dF9jb3VudCA9IDQ7CisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOworCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOworCX0gZWxzZQl7CisJCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGVhcmx5IHNvCisJCSAqIHdlIGRvbid0IGdldCBhbm90aGVyIGludGVycnVwdAorCQkgKiB3aGVuIHdlIGxlYXZlIG1waV93b3JrZXIuCisJCSAqLworCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLCAmcWRldi0+bXBpX2lkY193b3JrLCAwKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogUHJvY2VzcyBhbiBpbnRlci1kZXZpY2UgZXZlbnQgY29tcGxldGlvbi4KKyAqIElmIGdvb2QsIHNpZ25hbCB0aGUgY2FsbGVyJ3MgY29tcGxldGlvbi4KKyAqLworc3RhdGljIGludCBxbF9pZGNfY21wbHRfYWVuKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CisJbWJjcC0+b3V0X2NvdW50ID0gNDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb3VsZCBub3QgcmVhZCBNUEksIHJlc2V0dGluZyBSSVNDIVxuIik7CisJCXFsX3F1ZXVlX2Z3X2Vycm9yKHFkZXYpOworCX0gZWxzZQorCQkvKiBXYWtlIHVwIHRoZSBzbGVlcGluZyBtcGlfaWRjX3dvcmsgdGhyZWFkIHRoYXQgaXMKKwkJICogd2FpdGluZyBmb3IgdGhpcyBldmVudC4KKwkJICovCisJCWNvbXBsZXRlKCZxZGV2LT5pZGVfY29tcGxldGlvbik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgdm9pZCBxbF9saW5rX3VwKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKIAltYmNwLT5vdXRfY291bnQgPSAyOwogCi0JaWYgKHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCkpCi0JCWdvdG8gZXhpdDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSIlczogQ291bGQgbm90IGdldCBtYWlsYm94IHN0YXR1cy5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KIAogCXFkZXYtPmxpbmtfc3RhdHVzID0gbWJjcC0+bWJveF9vdXRbMV07CiAJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxpbmsgVXAuXG4iKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgSU5GTywgIkxpbmsgU3RhdHVzID0gMHglLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzFdKTsKLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2socWRldi0+bmRldikpIHsKLQkJUVBSSU5USyhxZGV2LCBMSU5LLCBJTkZPLCAiTGluayBpcyBVcC5cbiIpOwotCQluZXRpZl9jYXJyaWVyX29uKHFkZXYtPm5kZXYpOwotCQluZXRpZl93YWtlX3F1ZXVlKHFkZXYtPm5kZXYpOworCisJLyogSWYgd2UncmUgY29taW5nIGJhY2sgZnJvbSBhbiBJREMgZXZlbnQKKwkgKiB0aGVuIHNldCB1cCB0aGUgQ0FNIGFuZCBmcmFtZSByb3V0aW5nLgorCSAqLworCWlmICh0ZXN0X2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpKSB7CisJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOworCQlpZiAoc3RhdHVzKSB7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKKwkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlCisJCQljbGVhcl9iaXQoUUxfQ0FNX1JUX1NFVCwgJnFkZXYtPmZsYWdzKTsKIAl9Ci1leGl0OgotCS8qIENsZWFyIHRoZSBNUEkgZmlybXdhcmUgc3RhdHVzLiAqLwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOworCisJLyogUXVldWUgdXAgYSB3b3JrZXIgdG8gY2hlY2sgdGhlIGZyYW1lCisJICogc2l6ZSBpbmZvcm1hdGlvbiwgYW5kIGZpeCBpdCBpZiBpdCdzIG5vdAorCSAqIHRvIG91ciBsaWtpbmcuCisJICovCisJaWYgKCF0ZXN0X2JpdChRTF9QT1JUX0NGRywgJnFkZXYtPmZsYWdzKSkgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiUXVldWUgUG9ydCBDb25maWcgV29ya2VyIVxuIik7CisJCXNldF9iaXQoUUxfUE9SVF9DRkcsICZxZGV2LT5mbGFncyk7CisJCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGVhcmx5IHNvCisJCSAqIHdlIGRvbid0IGdldCBhbm90aGVyIGludGVycnVwdAorCQkgKiB3aGVuIHdlIGxlYXZlIG1waV93b3JrZXIgZHBjLgorCQkgKi8KKwkJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwKKwkJCQkmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmssIDApOworCX0KKworCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX2xpbmtfZG93bihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQogeworCWludCBzdGF0dXM7CisKIAltYmNwLT5vdXRfY291bnQgPSAzOwogCi0JaWYgKHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCkpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIGRpZCBub3QgaW5pdGlhbGl6ZSFcbiIpOwotCQlnb3RvIGV4aXQ7CisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBkb3duIEFFTiBicm9rZW4hXG4iKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOworfQorCitzdGF0aWMgaW50IHFsX3NmcF9pbihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBzdGF0dXM7CisKKwltYmNwLT5vdXRfY291bnQgPSA1OworCisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIGluIEFFTiBicm9rZW4hXG4iKTsKKwllbHNlCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJTRlAgaW5zZXJ0aW9uIGRldGVjdGVkLlxuIik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX3NmcF9vdXQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKK3sKKwlpbnQgc3RhdHVzOworCisJbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlNGUCBvdXQgQUVOIGJyb2tlbiFcbiIpOworCWVsc2UKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlNGUCByZW1vdmFsIGRldGVjdGVkLlxuIik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX2Flbl9sb3N0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKworCW1iY3AtPm91dF9jb3VudCA9IDY7CisKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMb3N0IEFFTiBicm9rZW4hXG4iKTsKKwllbHNlIHsKKwkJaW50IGk7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMb3N0IEFFTiBkZXRlY3RlZC5cbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbWJjcC0+b3V0X2NvdW50OyBpKyspCisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJCWksIG1iY3AtPm1ib3hfb3V0W2ldKTsKKwogCX0KIAotCWlmIChuZXRpZl9jYXJyaWVyX29rKHFkZXYtPm5kZXYpKSB7Ci0JCVFQUklOVEsocWRldiwgTElOSywgSU5GTywgIkxpbmsgaXMgRG93bi5cbiIpOwotCQluZXRpZl9jYXJyaWVyX29mZihxZGV2LT5uZGV2KTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShxZGV2LT5uZGV2KTsKLQl9Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxpbmsgRG93bi5cbiIpOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMaW5rIFN0YXR1cyA9IDB4JS4wOHguXG4iLCBtYmNwLT5tYm94X291dFsxXSk7Ci1leGl0OgotCS8qIENsZWFyIHRoZSBNUEkgZmlybXdhcmUgc3RhdHVzLiAqLwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX2luaXRfZndfZG9uZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQogeworCWludCBzdGF0dXM7CisKIAltYmNwLT5vdXRfY291bnQgPSAyOwogCi0JaWYgKHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCkpIHsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIGRpZCBub3QgaW5pdGlhbGl6ZSFcbiIpOwotCQlnb3RvIGV4aXQ7CisJfSBlbHNlIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIFJldmlzaW9uICA9IDB4JS4wOHguXG4iLAorCQkJbWJjcC0+bWJveF9vdXRbMV0pOworCQlzdGF0dXMgPSBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKKwkJaWYgKHN0YXR1cykKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKIAl9Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIGluaXRpYWxpemVkIVxuIik7Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIHN0YXR1cyA9IDB4JS4wOHguXG4iLAotCQltYmNwLT5tYm94X291dFswXSk7Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIFJldmlzaW9uICA9IDB4JS4wOHguXG4iLAotCQltYmNwLT5tYm94X291dFsxXSk7Ci1leGl0OgotCS8qIENsZWFyIHRoZSBNUEkgZmlybXdhcmUgc3RhdHVzLiAqLworfQorCisvKiBQcm9jZXNzIGFuIGFzeW5jIGV2ZW50IGFuZCBjbGVhciBpdCB1bmxlc3MgaXQncyBhbgorICogZXJyb3IgY29uZGl0aW9uLgorICogIFRoaXMgY2FuIGdldCBjYWxsZWQgaXRlcmF0aXZlbHkgZnJvbSB0aGUgbXBpX3dvcmsgdGhyZWFkCisgKiAgd2hlbiBldmVudHMgYXJyaXZlIHZpYSBhbiBpbnRlcnJ1cHQuCisgKiAgSXQgYWxzbyBnZXRzIGNhbGxlZCB3aGVuIGEgbWFpbGJveCBjb21tYW5kIGlzIHBvbGxpbmcgZm9yCisgKiAgaXQncyBjb21wbGV0aW9uLiAqLworc3RhdGljIGludCBxbF9tcGlfaGFuZGxlcihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBzdGF0dXM7CisJaW50IG9yaWdfY291bnQgPSBtYmNwLT5vdXRfY291bnQ7CisKKwkvKiBKdXN0IGdldCBtYWlsYm94IHplcm8gZm9yIG5vdy4gKi8KKwltYmNwLT5vdXRfY291bnQgPSAxOworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKKwkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKKwkJZ290byBlbmQ7CisJfQorCisJc3dpdGNoIChtYmNwLT5tYm94X291dFswXSkgeworCisJLyogVGhpcyBjYXNlIGlzIG9ubHkgYWN0aXZlIHdoZW4gd2UgYXJyaXZlIGhlcmUKKwkgKiBhcyBhIHJlc3VsdCBvZiBpc3N1aW5nIGEgbWFpbGJveCBjb21tYW5kIHRvCisJICogdGhlIGZpcm13YXJlLgorCSAqLworCWNhc2UgTUJfQ01EX1NUU19JTlRSTURUOgorCWNhc2UgTUJfQ01EX1NUU19HT09EOgorCWNhc2UgTUJfQ01EX1NUU19JTlZMRF9DTUQ6CisJY2FzZSBNQl9DTURfU1RTX1hGQ19FUlI6CisJY2FzZSBNQl9DTURfU1RTX0NTVU1fRVJSOgorCWNhc2UgTUJfQ01EX1NUU19FUlI6CisJY2FzZSBNQl9DTURfU1RTX1BBUkFNX0VSUjoKKwkJLyogV2UgY2FuIG9ubHkgZ2V0IG1haWxib3ggc3RhdHVzIGlmIHdlJ3JlIHBvbGxpbmcgZnJvbSBhbgorCQkgKiB1bmZpbmlzaGVkIGNvbW1hbmQuICBHZXQgdGhlIHJlc3Qgb2YgdGhlIHN0YXR1cyBkYXRhIGFuZAorCQkgKiByZXR1cm4gYmFjayB0byB0aGUgY2FsbGVyLgorCQkgKiBXZSBvbmx5IGVuZCB1cCBoZXJlIHdoZW4gd2UncmUgcG9sbGluZyBmb3IgYSBtYWlsYm94CisJCSAqIGNvbW1hbmQgY29tcGxldGlvbi4KKwkJICovCisJCW1iY3AtPm91dF9jb3VudCA9IG9yaWdfY291bnQ7CisJCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBXZSBhcmUgYmVpbmcgYXNrZWQgYnkgZmlybXdhcmUgdG8gYWNjZXB0CisJICogYSBjaGFuZ2UgdG8gdGhlIHBvcnQuICBUaGlzIGlzIG9ubHkKKwkgKiBhIGNoYW5nZSB0byBtYXggZnJhbWUgc2l6ZXMgKFR4L1J4KSwgcGF1c2UKKwkgKiBwYXJhbXRlcnMsIG9yIGxvb3BiYWNrIG1vZGUuCisJICovCisJY2FzZSBBRU5fSURDX1JFUToKKwkJc3RhdHVzID0gcWxfaWRjX3JlcV9hZW4ocWRldik7CisJCWJyZWFrOworCisJLyogUHJvY2VzcyBhbmQgaW5ib3VuZCBJREMgZXZlbnQuCisJICogVGhpcyB3aWxsIGhhcHBlbiB3aGVuIHdlJ3JlIHRyeWluZyB0bworCSAqIGNoYW5nZSB0eC9yeCBtYXggZnJhbWUgc2l6ZSwgY2hhbmdlIHBhdXNlCisJICogcGFyYW10ZXJzIG9yIGxvb3BiYWNrIG1vZGUuCisJICovCisJY2FzZSBBRU5fSURDX0NNUExUOgorCWNhc2UgQUVOX0lEQ19FWFQ6CisJCXN0YXR1cyA9IHFsX2lkY19jbXBsdF9hZW4ocWRldik7CisJCWJyZWFrOworCisJY2FzZSBBRU5fTElOS19VUDoKKwkJcWxfbGlua191cChxZGV2LCBtYmNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9MSU5LX0RPV046CisJCXFsX2xpbmtfZG93bihxZGV2LCBtYmNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9GV19JTklUX0RPTkU6CisJCS8qIElmIHdlJ3JlIGluIHByb2Nlc3Mgb24gZXhlY3V0aW5nIHRoZSBmaXJtd2FyZSwKKwkJICogdGhlbiBjb252ZXJ0IHRoZSBzdGF0dXMgdG8gbm9ybWFsIG1haWxib3ggc3RhdHVzLgorCQkgKi8KKwkJaWYgKG1iY3AtPm1ib3hfaW5bMF0gPT0gTUJfQ01EX0VYX0ZXKSB7CisJCQltYmNwLT5vdXRfY291bnQgPSBvcmlnX2NvdW50OworCQkJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJCW1iY3AtPm1ib3hfb3V0WzBdID0gTUJfQ01EX1NUU19HT09EOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlxbF9pbml0X2Z3X2RvbmUocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJY2FzZSBBRU5fQUVOX1NGUF9JTjoKKwkJcWxfc2ZwX2luKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0FFTl9TRlBfT1VUOgorCQlxbF9zZnBfb3V0KHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCS8qIFRoaXMgZXZlbnQgY2FuIGFycml2ZSBhdCBib290IHRpbWUgb3IgYWZ0ZXIgYW4KKwkgKiBNUEkgcmVzZXQgaWYgdGhlIGZpcm13YXJlIGZhaWxlZCB0byBpbml0aWFsaXplLgorCSAqLworCWNhc2UgQUVOX0ZXX0lOSVRfRkFJTDoKKwkJLyogSWYgd2UncmUgaW4gcHJvY2VzcyBvbiBleGVjdXRpbmcgdGhlIGZpcm13YXJlLAorCQkgKiB0aGVuIGNvbnZlcnQgdGhlIHN0YXR1cyB0byBub3JtYWwgbWFpbGJveCBzdGF0dXMuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfRVhfRlcpIHsKKwkJCW1iY3AtPm91dF9jb3VudCA9IG9yaWdfY291bnQ7CisJCQlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCQkJbWJjcC0+bWJveF9vdXRbMF0gPSBNQl9DTURfU1RTX0VSUjsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGaXJtd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CisJCWJyZWFrOworCisJY2FzZSBBRU5fU1lTX0VSUjoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJTeXN0ZW0gRXJyb3IuXG4iKTsKKwkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CisJCXN0YXR1cyA9IC1FSU87CisJCWJyZWFrOworCisJY2FzZSBBRU5fQUVOX0xPU1Q6CisJCXFsX2Flbl9sb3N0KHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiVW5zdXBwb3J0ZWQgQUUgJS4wOHguXG4iLCBtYmNwLT5tYm94X291dFswXSk7CisJCS8qIENsZWFyIHRoZSBNUEkgZmlybXdhcmUgc3RhdHVzLiAqLworCX0KK2VuZDoKIAlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9DTFJfUjJQQ0lfSU5UKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBFeGVjdXRlIGEgc2luZ2xlIG1haWxib3ggY29tbWFuZC4KKyAqIG1iY3AgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHUzMi4gIEVhY2gKKyAqIGVsZW1lbnQgaW4gdGhlIGFycmF5IGNvbnRhaW5zIHRoZSB2YWx1ZSBmb3IgaXQncworICogcmVzcGVjdGl2ZSBtYWlsYm94IHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50IHFsX21haWxib3hfY29tbWFuZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBzdGF0dXMsIGNvdW50OworCisJbXV0ZXhfbG9jaygmcWRldi0+bXBpX211dGV4KTsKKworCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGZvciBNUEkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikpOworCisJLyogTG9hZCB0aGUgbWFpbGJveCByZWdpc3RlcnMgYW5kIHdha2UgdXAgTVBJIFJJU0MuICovCisJc3RhdHVzID0gcWxfZXhlY19tYl9jbWQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlbmQ7CisKKworCS8qIElmIHdlJ3JlIGdlbmVyYXRpbmcgYSBzeXN0ZW0gZXJyb3IsIHRoZW4gdGhlcmUncyBub3RoaW5nCisJICogdG8gd2FpdCBmb3IuCisJICovCisJaWYgKG1iY3AtPm1ib3hfaW5bMF0gPT0gTUJfQ01EX01BS0VfU1lTX0VSUikKKwkJZ290byBlbmQ7CisKKwkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZS4gV2UgbG9vcAorCSAqIGhlcmUgYmVjYXVzZSBzb21lIEFFTiBtaWdodCBhcnJpdmUgd2hpbGUKKwkgKiB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgbWFpbGJveCBjb21tYW5kIHRvCisJICogY29tcGxldGUuIElmIG1vcmUgdGhhbiA1IGFycml2ZSB0aGVuIHdlIGNhbgorCSAqIGFzc3VtZSBzb21ldGhpbmcgaXMgd3JvbmcuICovCisJY291bnQgPSA1OworCWRvIHsKKwkJLyogV2FpdCBmb3IgdGhlIGludGVycnVwdCB0byBjb21lIGluLiAqLworCQlzdGF0dXMgPSBxbF93YWl0X21ieF9jbWRfY21wbHQocWRldik7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKworCQkvKiBQcm9jZXNzIHRoZSBldmVudC4gIElmIGl0J3MgYW4gQUVOLCBpdAorCQkgKiB3aWxsIGJlIGhhbmRsZWQgaW4tbGluZSBvciBhIHdvcmtlcgorCQkgKiB3aWxsIGJlIHNwYXduZWQuIElmIGl0J3Mgb3VyIGNvbXBsZXRpb24KKwkJICogd2Ugd2lsbCBjYXRjaCBpdCBiZWxvdy4KKwkJICovCisJCXN0YXR1cyA9IHFsX21waV9oYW5kbGVyKHFkZXYsIG1iY3ApOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBlbmQ7CisKKwkJLyogSXQncyBlaXRoZXIgdGhlIGNvbXBsZXRpb24gZm9yIG91ciBtYWlsYm94CisJCSAqIGNvbW1hbmQgY29tcGxldGUgb3IgYW4gQUVOLiAgSWYgaXQncyBvdXIKKwkJICogY29tcGxldGlvbiB0aGVuIGdldCBvdXQuCisJCSAqLworCQlpZiAoKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApID09CisJCQkJCU1CX0NNRF9TVFNfR09PRCkgfHwKKwkJCSgobWJjcC0+bWJveF9vdXRbMF0gJiAweDAwMDBmMDAwKSA9PQorCQkJCQlNQl9DTURfU1RTX0lOVFJNRFQpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoLS1jb3VudCk7CisKKwlpZiAoIWNvdW50KSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1haWxib3ggY29tcGxldGUuXG4iKTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogTm93IHdlIGNhbiBjbGVhciB0aGUgaW50ZXJydXB0IGNvbmRpdGlvbgorCSAqIGFuZCBsb29rIGF0IG91ciBzdGF0dXMuCisJICovCisJcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisKKwlpZiAoKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApICE9CisJCQkJCU1CX0NNRF9TVFNfR09PRCkgJiYKKwkJKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApICE9CisJCQkJCU1CX0NNRF9TVFNfSU5UUk1EVCkpIHsKKwkJcWxfZGlzcGxheV9tYl9zdHMocWRldiwgbWJjcCk7CisJCXN0YXR1cyA9IC1FSU87CisJfQorZW5kOgorCW11dGV4X3VubG9jaygmcWRldi0+bXBpX211dGV4KTsKKwkvKiBFbmQgcG9sbGVkIG1vZGUgZm9yIE1QSSAqLworCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSB8IElOVFJfTUFTS19QSSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogR2V0IGZ1bmN0aW9uYWwgc3RhdGUgZm9yIE1QSSBmaXJtd2FyZS4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgorICovCitpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzID0gMDsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDE7CisJbWJjcC0+b3V0X2NvdW50ID0gMjsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfR0VUX0ZXX1NUQVRFOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIEdldCBGaXJtd2FyZSBTdGF0ZS5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKworCS8qIElmIGJpdCB6ZXJvIGlzIHNldCBpbiBtYnggMSB0aGVuIHRoZSBmaXJtd2FyZSBpcworCSAqIHJ1bm5pbmcsIGJ1dCBub3QgaW5pdGlhbGl6ZWQuICBUaGlzIHNob3VsZCBuZXZlcgorCSAqIGhhcHBlbi4KKwkgKi8KKwlpZiAobWJjcC0+bWJveF9vdXRbMV0gJiAxKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmlybXdhcmUgd2FpdGluZyBmb3IgaW5pdGlhbGl6YXRpb24uXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBTZW5kIGFuZCBBQ0sgbWFpbGJveCBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZSB0bworICogbGV0IGl0IGNvbnRpbnVlIHdpdGggdGhlIGNoYW5nZS4KKyAqLworaW50IHFsX21iX2lkY19hY2soc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gNTsKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9JRENfQUNLOworCW1iY3AtPm1ib3hfaW5bMV0gPSBxZGV2LT5pZGNfbWJjLm1ib3hfb3V0WzFdOworCW1iY3AtPm1ib3hfaW5bMl0gPSBxZGV2LT5pZGNfbWJjLm1ib3hfb3V0WzJdOworCW1iY3AtPm1ib3hfaW5bM10gPSBxZGV2LT5pZGNfbWJjLm1ib3hfb3V0WzNdOworCW1iY3AtPm1ib3hfaW5bNF0gPSBxZGV2LT5pZGNfbWJjLm1ib3hfb3V0WzRdOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIElEQyBBQ0sgc2VuZC5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgbGluayBzZXR0aW5ncyBhbmQgbWF4aW11bSBmcmFtZSBzaXplIHNldHRpbmdzCisgKiBmb3IgdGhlIGN1cnJlbnQgcG9ydC4KKyAqIE1vc3QgbGlrZWx5IHdpbGwgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgcWxfbWJfc2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzID0gMDsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDM7CisJbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfU0VUX1BPUlRfQ0ZHOworCW1iY3AtPm1ib3hfaW5bMV0gPSBxZGV2LT5saW5rX2NvbmZpZzsKKwltYmNwLT5tYm94X2luWzJdID0gcWRldi0+bWF4X2ZyYW1lX3NpemU7CisKKworCXN0YXR1cyA9IHFsX21haWxib3hfY29tbWFuZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5UUk1EVCkgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIlBvcnQgQ29uZmlnIHNlbnQsIHdhaXQgZm9yIElEQy5cbiIpOworCX0gZWxzZQlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIFNldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogR2V0IGxpbmsgc2V0dGluZ3MgYW5kIG1heGltdW0gZnJhbWUgc2l6ZSBzZXR0aW5ncworICogZm9yIHRoZSBjdXJyZW50IHBvcnQuCisgKiBNb3N0IGxpa2VseSB3aWxsIGJsb2NrLgorICovCitzdGF0aWMgaW50IHFsX21iX2dldF9wb3J0X2NmZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7CisJaW50IHN0YXR1cyA9IDA7CisKKwltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOworCisJbWJjcC0+aW5fY291bnQgPSAxOworCW1iY3AtPm91dF9jb3VudCA9IDM7CisKKwltYmNwLT5tYm94X2luWzBdID0gTUJfQ01EX0dFVF9QT1JUX0NGRzsKKworCXN0YXR1cyA9IHFsX21haWxib3hfY29tbWFuZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkZhaWxlZCBHZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfSBlbHNlCXsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLAorCQkJIlBhc3NlZCBHZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CisJCXFkZXYtPmxpbmtfY29uZmlnID0gbWJjcC0+bWJveF9vdXRbMV07CisJCXFkZXYtPm1heF9mcmFtZV9zaXplID0gbWJjcC0+bWJveF9vdXRbMl07CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIElEQyAtIEludGVyIERldmljZSBDb21tdW5pY2F0aW9uLi4uCisgKiBTb21lIGZpcm13YXJlIGNvbW1hbmRzIHJlcXVpcmUgY29uc2VudCBvZiBhZGphY2VudCBGQ09FCisgKiBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIHRoZSBPSywgb3IgYQorICogY291bnRlci1yZXF1ZXN0IGZvciBhIGxpdHRsZSBtb3JlIHRpbWUuaQorICogVGhlIGZpcm13YXJlIHdpbGwgY29tcGxldGUgdGhlIHJlcXVlc3QgaWYgdGhlIG90aGVyCisgKiBmdW5jdGlvbiBkb2Vzbid0IHJlc3BvbmQuCisgKi8KK3N0YXRpYyBpbnQgcWxfaWRjX3dhaXQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1cyA9IC1FVElNRURPVVQ7CisJbG9uZyB3YWl0X3RpbWUgPSAxICogSFo7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CisJZG8geworCQkvKiBXYWl0IGhlcmUgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlCisJCSAqIHZpYSB0aGUgSURDIHByb2Nlc3MuCisJCSAqLworCQl3YWl0X3RpbWUgPQorCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxZGV2LT5pZGVfY29tcGxldGlvbiwKKwkJCQkJCQl3YWl0X3RpbWUpOworCQlpZiAoIXdhaXRfdGltZSkgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCQkiSURDIFRpbWVvdXQuXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIE5vdyBleGFtaW5lIHRoZSByZXNwb25zZSBmcm9tIHRoZSBJREMgcHJvY2Vzcy4KKwkJICogV2UgbWlnaHQgaGF2ZSBhIGdvb2QgY29tcGxldGlvbiBvciBhIHJlcXVlc3QgZm9yCisJCSAqIG1vcmUgd2FpdCB0aW1lLgorCQkgKi8KKwkJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IEFFTl9JRENfRVhUKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgVGltZSBFeHRlbnNpb24gZnJvbSBmdW5jdGlvbi5cbiIpOworCQkJd2FpdF90aW1lICs9IChtYmNwLT5tYm94X291dFsxXSA+PiA4KSAmIDB4MDAwMDAwMGY7CisJCX0gZWxzZSBpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gQUVOX0lEQ19DTVBMVCkgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCQkiSURDIFN1Y2Nlc3MuXG4iKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkJIklEQzogSW52YWxpZCBTdGF0ZSAweCUuMDR4LlxuIiwKKwkJCQltYmNwLT5tYm94X291dFswXSk7CisJCQlzdGF0dXMgPSAtRUlPOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICh3YWl0X3RpbWUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogQVBJIGNhbGxlZCBpbiB3b3JrIHRocmVhZCBjb250ZXh0IHRvIHNldCBuZXcgVFgvUlgKKyAqIG1heGltdW0gZnJhbWUgc2l6ZSB2YWx1ZXMgdG8gbWF0Y2ggTVRVLgorICovCitzdGF0aWMgaW50IHFsX3NldF9wb3J0X2NmZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzOworCXN0YXR1cyA9IHFsX21iX3NldF9wb3J0X2NmZyhxZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IHFsX2lkY193YWl0KHFkZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHdvcmtlciB0aHJlYWRzIHRoYXQgcHJvY2VzcworICogZXZlbnRzIHRoYXQgbWF5IHNsZWVwIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uCisgKi8KKworLyogVGhpcyB0aHJlYWQgZ2V0cyB0aGUgbWF4aW11bSBUWCBhbmQgUlggZnJhbWUgc2l6ZSB2YWx1ZXMKKyAqIGZyb20gdGhlIGZpcm13YXJlIGFuZCwgaWYgbmVjZXNzYXJ5LCBjaGFuZ2VzIHRoZW0gdG8gbWF0Y2gKKyAqIHRoZSBNVFUgc2V0dGluZy4KKyAqLwordm9pZCBxbF9tcGlfcG9ydF9jZmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9wb3J0X2NmZ193b3JrLndvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcWxfbWJfZ2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IEZhaWxlZCB0byBnZXQgcG9ydCBjb25maWcgZGF0YS5cbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAobmRldi0+bXR1IDw9IDI1MDApCisJCWdvdG8gZW5kOworCWVsc2UgaWYgKHFkZXYtPmxpbmtfY29uZmlnICYgQ0ZHX0pVTUJPX0ZSQU1FX1NJWkUgJiYKKwkJCXFkZXYtPm1heF9mcmFtZV9zaXplID09CisJCQlDRkdfREVGQVVMVF9NQVhfRlJBTUVfU0laRSkKKwkJZ290byBlbmQ7CisKKwlxZGV2LT5saW5rX2NvbmZpZyB8PQlDRkdfSlVNQk9fRlJBTUVfU0laRTsKKwlxZGV2LT5tYXhfZnJhbWVfc2l6ZSA9IENGR19ERUZBVUxUX01BWF9GUkFNRV9TSVpFOworCXN0YXR1cyA9IHFsX3NldF9wb3J0X2NmZyhxZGV2KTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQnVnOiBGYWlsZWQgdG8gc2V0IHBvcnQgY29uZmlnIGRhdGEuXG4iKTsKKwkJZ290byBlcnI7CisJfQorZW5kOgorCWNsZWFyX2JpdChRTF9QT1JUX0NGRywgJnFkZXYtPmZsYWdzKTsKKwlyZXR1cm47CitlcnI6CisJcWxfcXVldWVfZndfZXJyb3IocWRldik7CisJZ290byBlbmQ7Cit9CisKKy8qIFByb2Nlc3MgYW4gaW50ZXItZGV2aWNlIHJlcXVlc3QuICBUaGlzIGlzIGlzc3VlcyBieQorICogdGhlIGZpcm13YXJlIGluIHJlc3BvbnNlIHRvIGFub3RoZXIgZnVuY3Rpb24gcmVxdWVzdGluZworICogYSBjaGFuZ2UgdG8gdGhlIHBvcnQuIFdlIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgYSBjaGFuZ2UKKyAqIGhhcyBiZWVuIG1hZGUgYW5kIHRoZW4gc2VuZCBhIG1haWxib3ggY29tbWFuZCBBQ0tpbmcKKyAqIHRoZSBjaGFuZ2UgcmVxdWVzdC4KKyAqLwordm9pZCBxbF9tcGlfaWRjX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBtcGlfaWRjX3dvcmsud29yayk7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwl1MzIgYWVuOworCisJYWVuID0gbWJjcC0+bWJveF9vdXRbMV0gPj4gMTY7CisKKwlzd2l0Y2ggKGFlbikgeworCWRlZmF1bHQ6CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQnVnOiBVbmhhbmRsZWQgSURDIGFjdGlvbi5cbiIpOworCQlicmVhazsKKwljYXNlIE1CX0NNRF9QT1JUX1JFU0VUOgorCWNhc2UgTUJfQ01EX1NFVF9QT1JUX0NGRzoKKwljYXNlIE1CX0NNRF9TVE9QX0ZXOgorCQluZXRpZl9jYXJyaWVyX29mZihxZGV2LT5uZGV2KTsKKwkJLyogU2lnbmFsIHRoZSByZXN1bHRpbmcgbGluayB1cCBBRU4KKwkJICogdGhhdCB0aGUgZnJhbWUgcm91dGluZyBhbmQgbWFjIGFkZHIKKwkJICogbmVlZHMgdG8gYmUgc2V0LgorCQkgKiAqLworCQlzZXRfYml0KFFMX0NBTV9SVF9TRVQsICZxZGV2LT5mbGFncyk7CisJCXN0YXR1cyA9IHFsX21iX2lkY19hY2socWRldik7CisJCWlmIChzdGF0dXMpIHsKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQnVnOiBObyBwZW5kaW5nIElEQyFcbiIpOworCQl9CisJfQogfQogCiB2b2lkIHFsX21waV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTEwNCwzNyArODMxLDE2IEBACiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxfYWRhcHRlciwgbXBpX3dvcmsud29yayk7CiAJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKIAlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOwotCW1iY3AtPm91dF9jb3VudCA9IDE7CisKKwltdXRleF9sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOwogCiAJd2hpbGUgKHFsX3JlYWQzMihxZGV2LCBTVFMpICYgU1RTX1BJKSB7Ci0JCWlmIChxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJDb3VsZCBub3QgcmVhZCBNUEksIHJlc2V0dGluZyBBU0lDIVxuIik7Ci0JCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOwotCQl9Ci0KLQkJc3dpdGNoIChtYmNwLT5tYm94X291dFswXSkgewotCQljYXNlIEFFTl9MSU5LX1VQOgotCQkJcWxfbGlua191cChxZGV2LCBtYmNwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFFTl9MSU5LX0RPV046Ci0JCQlxbF9saW5rX2Rvd24ocWRldiwgbWJjcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBRU5fRldfSU5JVF9ET05FOgotCQkJcWxfaW5pdF9md19kb25lKHFkZXYsIG1iY3ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUJfQ01EX1NUU19HT09EOgotCQkJYnJlYWs7Ci0JCWNhc2UgQUVOX0ZXX0lOSVRfRkFJTDoKLQkJY2FzZSBBRU5fU1lTX0VSUjoKLQkJY2FzZSBNQl9DTURfU1RTX0VSUjoKLQkJCXFsX3F1ZXVlX2Z3X2Vycm9yKHFkZXYpOwotCQlkZWZhdWx0OgotCQkJLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JCQlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9DTFJfUjJQQ0lfSU5UKTsKLQkJCWJyZWFrOwotCQl9CisJCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisJCW1iY3AtPm91dF9jb3VudCA9IDE7CisJCXFsX21waV9oYW5kbGVyKHFkZXYsIG1iY3ApOwogCX0KKworCW11dGV4X3VubG9jaygmcWRldi0+bXBpX211dGV4KTsKIAlxbF9lbmFibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgMCk7CiB9CiAKQEAgLTE0Miw5ICs4NDgsOCBAQAogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0KIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBtcGlfcmVzZXRfd29yay53b3JrKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkiRW50ZXIsIHFkZXYgPSAlcC4uXG4iLCBxZGV2KTsKLQlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9TRVRfUlNUKTsKLQltc2xlZXAoNTApOwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SU1QpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX2lkY193b3JrKTsKKwlxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHFkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjYwNDAuYyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKaW5kZXggYjJkY2RiNS4uMGEzN2Y5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjYwNDAuYworKysgYi9kcml2ZXJzL25ldC9yNjA0MC5jCkBAIC00OSwxMiArNDksMTIgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInI2MDQwIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yMSIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIjA5SmFuMjAwOSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMjIiCisjZGVmaW5lIERSVl9SRUxEQVRFCSIyNU1hcjIwMDkiCiAKIC8qIFBIWSBDSElQIEFkZHJlc3MgKi8KICNkZWZpbmUgUEhZMV9BRERSCTEJLyogRm9yIE1BQzEgKi8KLSNkZWZpbmUgUEhZMl9BRERSCTIJLyogRm9yIE1BQzIgKi8KKyNkZWZpbmUgUEhZMl9BRERSCTMJLyogRm9yIE1BQzIgKi8KICNkZWZpbmUgUEhZX01PREUJMHgzMTAwCS8qIFBIWSBDSElQIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgUEhZX0NBUAkJMHgwMUUxCS8qIFBIWSBDSElQIFJlZ2lzdGVyIDQgKi8KIApAQCAtNDg0LDEyICs0ODQsMTIgQEAKIAkvKiBGcmVlIERlc2NyaXB0b3IgbWVtb3J5ICovCiAJaWYgKGxwLT5yeF9yaW5nKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgUlhfREVTQ19TSVpFLCBscC0+cnhfcmluZywgbHAtPnJ4X3JpbmdfZG1hKTsKLQkJbHAtPnJ4X3JpbmcgPSAwOworCQlscC0+cnhfcmluZyA9IE5VTEw7CiAJfQogCiAJaWYgKGxwLT50eF9yaW5nKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfREVTQ19TSVpFLCBscC0+dHhfcmluZywgbHAtPnR4X3JpbmdfZG1hKTsKLQkJbHAtPnR4X3JpbmcgPSAwOworCQlscC0+dHhfcmluZyA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02NzYsNyArNjc2LDcgQEAKIAl3b3JrX2RvbmUgPSByNjA0MF9yeChkZXYsIGJ1ZGdldCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKiBFbmFibGUgUlggaW50ZXJydXB0ICovCiAJCWlvd3JpdGUxNihpb3JlYWQxNihpb2FkZHIgKyBNSUVSKSB8IFJYX0lOVFMsIGlvYWRkciArIE1JRVIpOwogCX0KQEAgLTcxMyw3ICs3MTMsNyBAQAogCiAJCS8qIE1hc2sgb2ZmIFJYIGludGVycnVwdCAqLwogCQltaXNyICY9IH5SWF9JTlRTOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJfQogCiAJLyogVFggaW50ZXJydXB0IHJlcXVlc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IGIzNDczNDAuLjA2YzUzNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtODEsOSArODEsOSBAQAogI2RlZmluZSBSVEw4MTY5X1RYX1RJTUVPVVQJKDYqSFopCiAjZGVmaW5lIFJUTDgxNjlfUEhZX1RJTUVPVVQJKDEwKkhaKQogCi0jZGVmaW5lIFJUTF9FRVBST01fU0lHCQkweDgxMjkKKyNkZWZpbmUgUlRMX0VFUFJPTV9TSUcJCWNwdV90b19sZTMyKDB4ODEyOSkKKyNkZWZpbmUgUlRMX0VFUFJPTV9TSUdfTUFTSwljcHVfdG9fbGUzMigweGZmZmYpCiAjZGVmaW5lIFJUTF9FRVBST01fU0lHX0FERFIJMHgwMDAwCi0jZGVmaW5lIFJUTF9FRVBST01fTUFDX0FERFIJMHgwMDA3CiAKIC8qIHdyaXRlL3JlYWQgTU1JTyByZWdpc3RlciAqLwogI2RlZmluZSBSVExfVzgocmVnLCB2YWw4KQl3cml0ZWIgKCh2YWw4KSwgaW9hZGRyICsgKHJlZykpCkBAIC0yOTMsMTEgKzI5Myw2IEBACiAJLyogQ2ZnOTM0NkJpdHMgKi8KIAlDZmc5MzQ2X0xvY2sJPSAweDAwLAogCUNmZzkzNDZfVW5sb2NrCT0gMHhjMCwKLQlDZmc5MzQ2X1Byb2dyYW0JPSAweDgwLAkJLyogUHJvZ3JhbW1pbmcgbW9kZSAqLwotCUNmZzkzNDZfRUVDUwk9IDB4MDgsCQkvKiBDaGlwIHNlbGVjdCAqLwotCUNmZzkzNDZfRUVTSwk9IDB4MDQsCQkvKiBTZXJpYWwgZGF0YSBjbG9jayAqLwotCUNmZzkzNDZfRUVESQk9IDB4MDIsCQkvKiBEYXRhIGlucHV0ICovCi0JQ2ZnOTM0Nl9FRURPCT0gMHgwMSwJCS8qIERhdGEgb3V0cHV0ICovCiAKIAkvKiByeF9tb2RlX2JpdHMgKi8KIAlBY2NlcHRFcnIJPSAweDIwLApAQCAtMzEwLDcgKzMwNSw2IEBACiAJLyogUnhDb25maWdCaXRzICovCiAJUnhDZmdGSUZPU2hpZnQJPSAxMywKIAlSeENmZ0RNQVNoaWZ0CT0gIDgsCi0JUnhDZmc5MzU2U0VMCT0gIDYsIAkJLyogRUVQUk9NIHR5cGU6IDAgPSA5MzQ2LCAxID0gOTM1NiAqLwogCiAJLyogVHhDb25maWdCaXRzICovCiAJVHhJbnRlckZyYW1lR2FwU2hpZnQgPSAyNCwKQEAgLTE5NjksMTA4ICsxOTYzLDYgQEAKIAogfTsKIAotLyogRGVsYXkgYmV0d2VlbiBFRVBST00gY2xvY2sgdHJhbnNpdGlvbnMuIEZvcmNlIG91dCBidWZmZXJlZCBQQ0kgd3JpdGVzLiAqLwotI2RlZmluZSBSVExfRUVQUk9NX0RFTEFZKCkJUlRMX1I4KENmZzkzNDYpCi0jZGVmaW5lIFJUTF9FRVBST01fUkVBRF9DTUQJNgotCi0vKiByZWFkIDE2Yml0IHdvcmQgc3RvcmVkIGluIEVFUFJPTS4gRUVQUk9NIGlzIGFkZHJlc3NlZCBieSB3b3Jkcy4gKi8KLXN0YXRpYyB1MTYgcnRsX2VlcHJvbV9yZWFkKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgYWRkcikKLXsKLQl1MTYgcmVzdWx0ID0gMDsKLQlpbnQgY21kLCBjbWRfbGVuLCBpOwotCi0JLyogY2hlY2sgZm9yIEVFUFJPTSBhZGRyZXNzIHNpemUgKGluIGJpdHMpICovCi0JaWYgKFJUTF9SMzIoUnhDb25maWcpICYgKDEgPDwgUnhDZmc5MzU2U0VMKSkgewotCQkvKiBFRVBST00gaXMgOTNDNTYgKi8KLQkJY21kX2xlbiA9IDMgKyA4OyAvKiAzIGJpdHMgZm9yIGNvbW1hbmQgaWQgYW5kIDggZm9yIGFkZHJlc3MgKi8KLQkJY21kID0gKFJUTF9FRVBST01fUkVBRF9DTUQgPDwgOCkgfCAoYWRkciAmIDB4ZmYpOwotCX0gZWxzZSB7Ci0JCS8qIEVFUFJPTSBpcyA5M0M0NiAqLwotCQljbWRfbGVuID0gMyArIDY7IC8qIDMgYml0cyBmb3IgY29tbWFuZCBpZCBhbmQgNiBmb3IgYWRkcmVzcyAqLwotCQljbWQgPSAoUlRMX0VFUFJPTV9SRUFEX0NNRCA8PCA2KSB8IChhZGRyICYgMHgzZik7Ci0JfQotCi0JLyogZW50ZXIgcHJvZ3JhbW1pbmcgbW9kZSAqLwotCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1Byb2dyYW0gfCBDZmc5MzQ2X0VFQ1MpOwotCVJUTF9FRVBST01fREVMQVkoKTsKLQotCS8qIHdyaXRlIGNvbW1hbmQgYW5kIHJlcXVlc3RlZCBhZGRyZXNzICovCi0Jd2hpbGUgKGNtZF9sZW4tLSkgewotCQl1OCB4ID0gQ2ZnOTM0Nl9Qcm9ncmFtIHwgQ2ZnOTM0Nl9FRUNTOwotCi0JCXggfD0gKGNtZCAmICgxIDw8IGNtZF9sZW4pKSA/IENmZzkzNDZfRUVESSA6IDA7Ci0KLQkJLyogd3JpdGUgYSBiaXQgKi8KLQkJUlRMX1c4KENmZzkzNDYsIHgpOwotCQlSVExfRUVQUk9NX0RFTEFZKCk7Ci0KLQkJLyogcmFpc2UgY2xvY2sgKi8KLQkJUlRMX1c4KENmZzkzNDYsIHggfCBDZmc5MzQ2X0VFU0spOwotCQlSVExfRUVQUk9NX0RFTEFZKCk7Ci0JfQotCi0JLyogbG93ZXIgY2xvY2sgKi8KLQlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Qcm9ncmFtIHwgQ2ZnOTM0Nl9FRUNTKTsKLQlSVExfRUVQUk9NX0RFTEFZKCk7Ci0KLQkvKiByZWFkIGJhY2sgMTZiaXQgdmFsdWUgKi8KLQlmb3IgKGkgPSAxNjsgaSA+IDA7IGktLSkgewotCQkvKiByYWlzZSBjbG9jayAqLwotCQlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Qcm9ncmFtIHwgQ2ZnOTM0Nl9FRUNTIHwgQ2ZnOTM0Nl9FRVNLKTsKLQkJUlRMX0VFUFJPTV9ERUxBWSgpOwotCi0JCXJlc3VsdCA8PD0gMTsKLQkJcmVzdWx0IHw9IChSVExfUjgoQ2ZnOTM0NikgJiBDZmc5MzQ2X0VFRE8pID8gMSA6IDA7Ci0KLQkJLyogbG93ZXIgY2xvY2sgKi8KLQkJUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfUHJvZ3JhbSB8IENmZzkzNDZfRUVDUyk7Ci0JCVJUTF9FRVBST01fREVMQVkoKTsKLQl9Ci0KLQlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Qcm9ncmFtKTsKLQkvKiBsZWF2ZSBwcm9ncmFtbWluZyBtb2RlICovCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBydGxfaW5pdF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKLQkJCQkgdm9pZCBfX2lvbWVtICppb2FkZHIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGNpX2RldjsKLQl1MTYgeDsKLQl1OCBtYWNbOF07Ci0KLQkvKiByZWFkIEVFUFJPTSBzaWduYXR1cmUgKi8KLQl4ID0gcnRsX2VlcHJvbV9yZWFkKGlvYWRkciwgUlRMX0VFUFJPTV9TSUdfQUREUik7Ci0KLQlpZiAoeCAhPSBSVExfRUVQUk9NX1NJRykgewotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTWlzc2luZyBFRVBST00gc2lnbmF0dXJlOiAlMDR4XG4iLCB4KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHJlYWQgTUFDIGFkZHJlc3MgKi8KLQl4ID0gcnRsX2VlcHJvbV9yZWFkKGlvYWRkciwgUlRMX0VFUFJPTV9NQUNfQUREUik7Ci0JbWFjWzBdID0geCAmIDB4ZmY7Ci0JbWFjWzFdID0geCA+PiA4OwotCXggPSBydGxfZWVwcm9tX3JlYWQoaW9hZGRyLCBSVExfRUVQUk9NX01BQ19BRERSICsgMSk7Ci0JbWFjWzJdID0geCAmIDB4ZmY7Ci0JbWFjWzNdID0geCA+PiA4OwotCXggPSBydGxfZWVwcm9tX3JlYWQoaW9hZGRyLCBSVExfRUVQUk9NX01BQ19BRERSICsgMik7Ci0JbWFjWzRdID0geCAmIDB4ZmY7Ci0JbWFjWzVdID0geCA+PiA4OwotCi0JaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKLQkJREVDTEFSRV9NQUNfQlVGKGJ1Zik7Ci0KLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQyBhZGRyZXNzIGZvdW5kIGluIEVFUFJPTTogJXNcbiIsCi0JCQkgcHJpbnRfbWFjKGJ1ZiwgbWFjKSk7Ci0JfQotCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSkKLQkJcnRsX3Jhcl9zZXQodHAsIG1hYyk7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0CiBydGw4MTY5X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMjI0OSw4ICsyMTQxLDYgQEAKIAogCXRwLT5tbWlvX2FkZHIgPSBpb2FkZHI7CiAKLQlydGxfaW5pdF9tYWNfYWRkcmVzcyh0cCwgaW9hZGRyKTsKLQogCS8qIEdldCBNQUMgYWRkcmVzcyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU47IGkrKykKIAkJZGV2LT5kZXZfYWRkcltpXSA9IFJUTF9SOChNQUMwICsgaSk7CkBAIC0zMzYzLDEzICszMjUzLDYgQEAKIAkJb3B0czEgfD0gRmlyc3RGcmFnOwogCX0gZWxzZSB7CiAJCWxlbiA9IHNrYi0+bGVuOwotCi0JCWlmICh1bmxpa2VseShsZW4gPCBFVEhfWkxFTikpIHsKLQkJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQkJZ290byBlcnJfdXBkYXRlX3N0YXRzOwotCQkJbGVuID0gRVRIX1pMRU47Ci0JCX0KLQogCQlvcHRzMSB8PSBGaXJzdEZyYWcgfCBMYXN0RnJhZzsKIAkJdHAtPnR4X3NrYltlbnRyeV0uc2tiID0gc2tiOwogCX0KQEAgLTM0MDcsNyArMzI5MCw2IEBACiBlcnJfc3RvcDoKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmV0ID0gTkVUREVWX1RYX0JVU1k7Ci1lcnJfdXBkYXRlX3N0YXRzOgogCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCWdvdG8gb3V0OwogfQpAQCAtMzcxMSw4ICszNTkzLDggQEAKIAkJUlRMX1cxNihJbnRyTWFzaywgdHAtPmludHJfZXZlbnQgJiB+dHAtPm5hcGlfZXZlbnQpOwogCQl0cC0+aW50cl9tYXNrID0gfnRwLT5uYXBpX2V2ZW50OwogCi0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSkKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkpCisJCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAkJZWxzZSBpZiAobmV0aWZfbXNnX2ludHIodHApKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJydXB0ICUwNHggaW4gcG9sbFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CkBAIC0zNzMzLDcgKzM2MTUsNyBAQAogCXJ0bDgxNjlfdHhfaW50ZXJydXB0KGRldiwgdHAsIGlvYWRkcik7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQl0cC0+aW50cl9tYXNrID0gMHhmZmZmOwogCQkvKgogCQkgKiAyMDA0MDQyNjogdGhlIGJhcnJpZXIgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkIGJ1dCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Jpb25ldC5jIGIvZHJpdmVycy9uZXQvcmlvbmV0LmMKaW5kZXggYTZmZDI3YS4uZWM1OWUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcmlvbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvcmlvbmV0LmMKQEAgLTM2Miw4ICszNjIsNyBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IFJJT05FVF9SWF9SSU5HX1NJWkU7IGkrKykKLQkJaWYgKHJuZXQtPnJ4X3NrYltpXSkKLQkJCWtmcmVlX3NrYihybmV0LT5yeF9za2JbaV0pOworCQlrZnJlZV9za2Iocm5ldC0+cnhfc2tiW2ldKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsICZyaW9uZXRfcGVlcnMsIG5vZGUpIHsKIAkJaWYgKHJpb25ldF9hY3RpdmVbcGVlci0+cmRldi0+ZGVzdGlkXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IGY1YzU3YzAuLjE2ODY4YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTI4NTIsNyArMjg1Miw3IEBACiAJczJpb19jaGtfcnhfYnVmZmVycyhuaWMsIHJpbmcpOwogCiAJaWYgKHBrdHNfcHJvY2Vzc2VkIDwgYnVkZ2V0X29yZykgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJLypSZSBFbmFibGUgTVNJLVJ4IFZlY3RvciovCiAJCWFkZHIgPSAodTggX19pb21lbSAqKSZiYXIwLT54bXNpX21hc2tfcmVnOwogCQlhZGRyICs9IDcgLSByaW5nLT5yaW5nX25vOwpAQCAtMjg4OSw3ICsyODg5LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAocGt0c19wcm9jZXNzZWQgPCBidWRnZXRfb3JnKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKiBSZSBlbmFibGUgdGhlIFJ4IGludGVycnVwdHMgZm9yIHRoZSByaW5nICovCiAJCXdyaXRlcSgwLCAmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKIAkJcmVhZGwoJmJhcjAtPnJ4X3RyYWZmaWNfbWFzayk7CkBAIC0zODYyLDcgKzM4NjIsNyBAQAogCXJldCA9IHBjaV9lbmFibGVfbXNpeChuaWMtPnBkZXYsIG5pYy0+ZW50cmllcywgbmljLT5udW1fZW50cmllcyk7CiAJLyogV2UgZmFpbCBpbml0IGlmIGVycm9yIG9yIHdlIGdldCBsZXNzIHZlY3RvcnMgdGhhbiBtaW4gcmVxdWlyZWQgKi8KIAlpZiAocmV0KSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVuYWJsaW5nIE1TSVggZmFpbGVkXG4iLCBuaWMtPmRldi0+bmFtZSk7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogRW5hYmxpbmcgTVNJLVggZmFpbGVkXG4iKTsKIAkJa2ZyZWUobmljLT5lbnRyaWVzKTsKIAkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAogCQkJKz0gKG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpKTsKQEAgLTQzNDIsNyArNDM0Miw3IEBACiAJCXZhbDggPSAocmluZy0+cmluZ19ubyA9PSAwKSA/IDB4N2YgOiAweGZmOwogCQl3cml0ZWIodmFsOCwgYWRkcik7CiAJCXZhbDggPSByZWFkYihhZGRyKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnJpbmctPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZyaW5nLT5uYXBpKTsKIAl9IGVsc2UgewogCQlyeF9pbnRyX2hhbmRsZXIocmluZywgMCk7CiAJCXMyaW9fY2hrX3J4X2J1ZmZlcnMoc3AsIHJpbmcpOwpAQCAtNDc4OSw3ICs0Nzg5LDcgQEAKIAogCQlpZiAoY29uZmlnLT5uYXBpKSB7CiAJCQlpZiAocmVhc29uICYgR0VOX0lOVFJfUlhUUkFGRklDKSB7Ci0JCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnNwLT5uYXBpKTsKKwkJCQluYXBpX3NjaGVkdWxlKCZzcC0+bmFwaSk7CiAJCQkJd3JpdGVxKFMySU9fTUlOVVNfT05FLCAmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKIAkJCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5yeF90cmFmZmljX2ludCk7CiAJCQkJcmVhZGwoJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKQEAgLTcyMjAsNyArNzIyMCw2IEBACiAKIAkvKiBJbml0aWFsaXNlIG5hcGkgKi8KIAlpZiAoY29uZmlnLT5uYXBpKSB7Ci0JCWludCBpOwogCQlpZiAoY29uZmlnLT5pbnRyX3R5cGUgPT0gIE1TSV9YKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy5yeF9yaW5nX251bTsgaSsrKQogCQkJCW5hcGlfZW5hYmxlKCZzcC0+bWFjX2NvbnRyb2wucmluZ3NbaV0ubmFwaSk7CkBAIC03NTQyLDYgKzc1NDEsNyBAQAogCiAJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiBzZW5kX3VwOgorCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByaW5nX25vKTsKIAlxdWV1ZV9yeF9mcmFtZShza2IsIFJYRF9HRVRfVkxBTl9UQUcocnhkcC0+Q29udHJvbF8yKSk7CiBhZ2dyZWdhdGU6CiAJc3AtPm1hY19jb250cm9sLnJpbmdzW3Jpbmdfbm9dLnJ4X2J1ZnNfbGVmdCAtPSAxOwpAQCAtODAwOSw4ICs4MDA5LDcgQEAKIAkJaWYgKHJldCkgewogCiAJCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCSAgIiVzOiBNU0ktWCByZXF1ZXN0ZWQgYnV0IGZhaWxlZCB0byBlbmFibGVcbiIsCi0JCQkgIGRldi0+bmFtZSk7CisJCQkgICJzMmlvOiBNU0ktWCByZXF1ZXN0ZWQgYnV0IGZhaWxlZCB0byBlbmFibGVcbiIpOwogCQkJc3AtPmNvbmZpZy5pbnRyX3R5cGUgPSBJTlRBOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCmluZGV4IDMxZTM4ZmEuLjg4ZGQyZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYworKysgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKQEAgLTIwMzksOSArMjAzOSw5IEBACiAJCXNiZG1hX3R4X3Byb2Nlc3Moc2MsJihzYy0+c2JtX3R4ZG1hKSwgMCk7CiAKIAlpZiAoaXNyICYgKE1fTUFDX0lOVF9DSEFOTkVMIDw8IFNfTUFDX1JYX0NIMCkpIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnNjLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZzYy0+bmFwaSkpIHsKIAkJCV9fcmF3X3dyaXRlcSgwLCBzYy0+c2JtX2ltcik7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZzYy0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnNjLT5uYXBpKTsKIAkJCS8qIERlcGVuZCBvbiB0aGUgZXhpdCBmcm9tIHBvbGwgdG8gcmVlbmFibGUgaW50ciAqLwogCQl9CiAJCWVsc2UgewpAQCAtMjQ3OCw3ICsyNDc4LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlwaHlfZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlfZGV2LT5kZXYuYnVzX2lkLCAmc2JtYWNfbWlpX3BvbGwsIDAsCisJcGh5X2RldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeV9kZXYtPmRldiksICZzYm1hY19taWlfcG9sbCwgMCwKIAkJCSAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKTsKIAlpZiAoSVNfRVJSKHBoeV9kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjUwMCw3ICsyNTAwLDcgQEAKIAogCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCiAJCWRldi0+bmFtZSwgcGh5X2Rldi0+ZHJ2LT5uYW1lLAotCQlwaHlfZGV2LT5kZXYuYnVzX2lkLCBwaHlfZGV2LT5pcnEpOworCQlkZXZfbmFtZSgmcGh5X2Rldi0+ZGV2KSwgcGh5X2Rldi0+aXJxKTsKIAogCXNjLT5waHlfZGV2ID0gcGh5X2RldjsKIApAQCAtMjY2Nyw3ICsyNjY3LDcgQEAKIAlzYmRtYV90eF9wcm9jZXNzKHNjLCAmKHNjLT5zYm1fdHhkbWEpLCAxKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKICNpZmRlZiBDT05GSUdfU0JNQUNfQ09BTEVTQ0UKIAkJX19yYXdfd3JpdGVxKCgoTV9NQUNfSU5UX0VPUF9DT1VOVCB8IE1fTUFDX0lOVF9FT1BfVElNRVIpIDw8IFNfTUFDX1RYX0NIMCkgfApAQCAtMjY5Nyw3ICsyNjk3LDcgQEAKIAlzYm1fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIXNibV9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIiwKLQkJICAgICAgIHBsZGV2LT5kZXYuYnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKCZwbGRldi0+ZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X291dDsKIAl9CkBAIC0yNzA4LDcgKzI3MDgsNyBAQAogCSAqIElmIHdlIGZpbmQgYSB6ZXJvLCBza2lwIHRoaXMgTUFDLgogCSAqLwogCXNibWFjX29yaWdfaHdhZGRyID0gX19yYXdfcmVhZHEoc2JtX2Jhc2UgKyBSX01BQ19FVEhFUk5FVF9BRERSKTsKLQlwcl9kZWJ1ZygiJXM6ICVzY29uZmlndXJpbmcgTUFDIGF0IDB4JTA4THhcbiIsIHBsZGV2LT5kZXYuYnVzX2lkLAorCXByX2RlYnVnKCIlczogJXNjb25maWd1cmluZyBNQUMgYXQgMHglMDhMeFxuIiwgZGV2X25hbWUoJnBsZGV2LT5kZXYpLAogCQkgc2JtYWNfb3JpZ19od2FkZHIgPyAiIiA6ICJub3QgIiwgKGxvbmcgbG9uZylyZXMtPnN0YXJ0KTsKIAlpZiAoc2JtYWNfb3JpZ19od2FkZHIgPT0gMCkgewogCQllcnIgPSAwOwpAQCAtMjcyMSw3ICsyNzIxLDcgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHNibWFjX3NvZnRjKSk7CiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGV0aGVyZGV2XG4iLAotCQkgICAgICAgcGxkZXYtPmRldi5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoJnBsZGV2LT5kZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCmluZGV4IDhiNzViZWYuLmMxM2NiZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYworKysgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKQEAgLTEzLDYgKzEzLDkgQEAKICAqICBCb3RoIGFyZSBhbG1vc3QgaWRlbnRpY2FsIGFuZCBzZWVtIHRvIGJlIGJhc2VkIG9uIHBjaS1za2VsZXRvbi5jCiAgKgogICogIFJld3JpdHRlbiBmb3IgMi42IGJ5IENlc2FyIEVkdWFyZG8gQmFycm9zCisgKgorICogIEEgZGF0YXNoZWV0IGZvciB0aGlzIGNoaXAgY2FuIGJlIGZvdW5kIGF0CisgKiAgaHR0cDovL3d3dy5zaWxhbi5jb20uY24vZW5nbGlzaC9wcm9kdWN0cy9wZGYvU0M5MjAzMUFZLnBkZgogICovCiAKIC8qIE5vdGUgYWJvdXQgc2V0X21hY19hZGRyZXNzOiBJIGRvbid0IGtub3cgaG93IHRvIGNoYW5nZSB0aGUgaGFyZHdhcmUKQEAgLTMxLDEzICszNCw3IEBACiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSUxBTgkJMHgxOTA0Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lMQU5fU0M5MjAzMQkweDIwMzEKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUxBTl84MTM5RAkweDgxMzkKLQogI2RlZmluZSBTQzkyMDMxX05BTUUgInNjOTIwMzEiCi0jZGVmaW5lIFNDOTIwMzFfREVTQ1JJUFRJT04gIlNpbGFuIFNDOTIwMzEgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBkcml2ZXIiCi0jZGVmaW5lIFNDOTIwMzFfVkVSU0lPTiAiMi4wYyIKIAogLyogQkFSIDAgaXMgTU1JTywgQkFSIDEgaXMgUElPICovCiAjaWZuZGVmIFNDOTIwMzFfVVNFX0JBUgpAQCAtMTI2NCw3ICsxMjYxLDYgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHByaXYtPnBkZXY7CiAKIAlzdHJjcHkoZHJ2aW5mby0+ZHJpdmVyLCBTQzkyMDMxX05BTUUpOwotCXN0cmNweShkcnZpbmZvLT52ZXJzaW9uLCBTQzkyMDMxX1ZFUlNJT04pOwogCXN0cmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUocGRldikpOwogfQogCkBAIC0xNDIzLDYgKzE0MTksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNjOTIwMzFfcHJpdiAqcHJpdjsKIAl1MzIgbWFjMCwgbWFjMTsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmICh1bmxpa2VseShlcnIgPCAwKSkKQEAgLTE0OTcsNiArMTQ5NCwxNCBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9yZWdpc3Rlcl9uZXRkZXY7CiAKKyNpZiBTQzkyMDMxX1VTRV9CQVIgPT0gMAorCWJhc2VfYWRkciA9IGRldi0+bWVtX3N0YXJ0OworI2VsaWYgU0M5MjAzMV9VU0VfQkFSID09IDEKKwliYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKyNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gIiVzOiBTQzkyMDMxIGF0IDB4JWx4LCAlcE0sIElSUSAlZFxuIiwgZGV2LT5uYW1lLAorCQkJYmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CisKIAlyZXR1cm4gMDsKIAogb3V0X3JlZ2lzdGVyX25ldGRldjoKQEAgLTE1ODYsOCArMTU5MSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzYzkyMDMxX3BjaV9kZXZpY2VfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCBQQ0lfREVWSUNFX0lEX1NJTEFOX1NDOTIwMzEpIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIFBDSV9ERVZJQ0VfSURfU0lMQU5fODEzOUQpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIDB4MjAzMSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHg4MTM5KSB9LAogCXsgMCwgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzYzkyMDMxX3BjaV9kZXZpY2VfaWRfdGFibGUpOwpAQCAtMTYwMyw3ICsxNjA4LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2M5MjAzMV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBTQzkyMDMxX0RFU0NSSVBUSU9OICIgIiBTQzkyMDMxX1ZFUlNJT04gIlxuIik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjOTIwMzFfcGNpX2RyaXZlcik7CiB9CiAKQEAgLTE2MTcsNSArMTYyMSw0IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkNlc2FyIEVkdWFyZG8gQmFycm9zIDxjZXNhcmJAY2VzYXJiLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTihTQzkyMDMxX0RFU0NSSVBUSU9OKTsKLU1PRFVMRV9WRVJTSU9OKFNDOTIwMzFfVkVSU0lPTik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbGFuIFNDOTIwMzEgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMgYi9kcml2ZXJzL25ldC9zZWVxODAwNS5jCmluZGV4IDEyYThmZmYuLmViYmJlMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKKysrIGIvZHJpdmVycy9uZXQvc2VlcTgwMDUuYwpAQCAtMTQzLDYgKzE0MywxNyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2VlcTgwMDVfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc2VlcTgwMDVfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2VlcTgwMDVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IHNlZXE4MDA1X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dAkJPSBzZWVxODAwNV90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGlzIGlzIHRoZSByZWFsIHByb2JlIHJvdXRpbmUuICBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICAgcHJvYmVzIG9uIHRoZSBJU0EgYnVzLiAgQSBnb29kIGRldmljZSBwcm9iZXMgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCiAgICB2ZXJpZmllcyB0aGF0IHRoZSBjb3JyZWN0IGRldmljZSBleGlzdHMgYW5kIGZ1bmN0aW9ucy4gICovCkBAIC0zMzIsMTIgKzM0Myw4IEBACiAJCSB9CiAJfQogI2VuZGlmCi0JZGV2LT5vcGVuCQk9IHNlZXE4MDA1X29wZW47Ci0JZGV2LT5zdG9wCQk9IHNlZXE4MDA1X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0IAk9IHNlZXE4MDA1X3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dAkJPSBzZWVxODAwNV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZzZWVxODAwNV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWi8yMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKIAlkZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3NmYy9LY29uZmlnCmluZGV4IGM1MzU0MDguLjEyYTgyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9LY29uZmlnCkBAIC0yLDcgKzIsNiBAQAogCXRyaXN0YXRlICJTb2xhcmZsYXJlIFNvbGFyc3Rvcm0gU0ZDNDAwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIElORVQKIAlzZWxlY3QgTUlJCi0Jc2VsZWN0IElORVRfTFJPCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IEkyQwogCXNlbGVjdCBJMkNfQUxHT0JJVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmggYi9kcml2ZXJzL25ldC9zZmMvYml0ZmllbGQuaAppbmRleCBkOTVjMjE4Li5kNTRkODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvYml0ZmllbGQuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvYml0ZmllbGQuaApAQCAtNTQzLDcgKzU0Myw3IEBACiAKIC8qIFN0YXRpYyBpbml0aWFsaXNlciAqLwogI2RlZmluZSBFRlhfT1dPUkQzMihhLCBiLCBjLCBkKQkJCQkJCVwKLQl7IC51MzIgPSB7IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYSksIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYiksIFwKLQkJICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihjKSwgX19jb25zdGFudF9jcHVfdG9fbGUzMihkKSB9IH0KKwl7IC51MzIgPSB7IGNwdV90b19sZTMyKGEpLCBjcHVfdG9fbGUzMihiKSwgXAorCQkgICBjcHVfdG9fbGUzMihjKSwgY3B1X3RvX2xlMzIoZCkgfSB9CiAKICNlbmRpZiAvKiBFRlhfQklURklFTERfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCmluZGV4IDY0OTAzNDkuLjUxODJhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKQEAgLTI2LDcgKzI2LDcgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gKHN0cnVjdCBlZnhfbmljICopY29udGV4dDsKIAlzdHJ1Y3QgZWZ4X2JsaW5rZXIgKmJsID0gJmVmeC0+Ym9hcmRfaW5mby5ibGlua2VyOwotCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkKGVmeCwgYmwtPnN0YXRlKTsKKwllZngtPmJvYXJkX2luZm8uc2V0X2lkX2xlZChlZngsIGJsLT5zdGF0ZSk7CiAJYmwtPnN0YXRlID0gIWJsLT5zdGF0ZTsKIAlpZiAoYmwtPnJlc3VibWl0KQogCQltb2RfdGltZXIoJmJsLT50aW1lciwgamlmZmllcyArIEJMSU5LX0lOVEVSVkFMKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJYmxpbmtlci0+cmVzdWJtaXQgPSBmYWxzZTsKIAkJaWYgKGJsaW5rZXItPnRpbWVyLmZ1bmN0aW9uKQogCQkJZGVsX3RpbWVyX3N5bmMoJmJsaW5rZXItPnRpbWVyKTsKLQkJZWZ4LT5ib2FyZF9pbmZvLnNldF9mYXVsdF9sZWQoZWZ4LCBmYWxzZSk7CisJCWVmeC0+Ym9hcmRfaW5mby5pbml0X2xlZHMoZWZ4KTsKIAl9CiB9CiAKQEAgLTE4NSw3ICsxODUsNyBAQAogI2RlZmluZSBTRkU0MDAyX1JYX0xFRCAgICAoMCkJLyogR3JlZW4gKi8KICNkZWZpbmUgU0ZFNDAwMl9UWF9MRUQgICAgKDEpCS8qIEFtYmVyICovCiAKLXN0YXRpYyBpbnQgc2ZlNDAwMl9pbml0X2xlZHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3N0YXRpYyB2b2lkIHNmZTQwMDJfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJLyogU2V0IHRoZSBUWCBhbmQgUlggTEVEcyB0byByZWZsZWN0IHN0YXR1cyBhbmQgYWN0aXZpdHksIGFuZCB0aGUKIAkgKiBmYXVsdCBMRUQgb2ZmICovCkBAIC0xOTQsMTEgKzE5NCw5IEBACiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX1JYX0xFRCwKIAkJICAgIFFVQUtFX0xFRF9SWExJTksgfCBRVUFLRV9MRURfTElOS19BQ1RTVEFUKTsKIAl4ZnBfc2V0X2xlZChlZngsIFNGRTQwMDJfRkFVTFRfTEVELCBRVUFLRV9MRURfT0ZGKTsKLQllZngtPmJvYXJkX2luZm8uYmxpbmtlci5sZWRfbnVtID0gU0ZFNDAwMl9GQVVMVF9MRUQ7Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNmZTQwMDJfZmF1bHRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpCitzdGF0aWMgdm9pZCBzZmU0MDAyX3NldF9pZF9sZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSkKIHsKIAl4ZnBfc2V0X2xlZChlZngsIFNGRTQwMDJfRkFVTFRfTEVELCBzdGF0ZSA/IFFVQUtFX0xFRF9PTiA6CiAJCQlRVUFLRV9MRURfT0ZGKTsKQEAgLTIyMiw3ICsyMjAsNjcgQEAKIAkJcmV0dXJuIHJjOwogCWVmeC0+Ym9hcmRfaW5mby5tb25pdG9yID0gc2ZlNDAwMl9jaGVja19odzsKIAllZngtPmJvYXJkX2luZm8uaW5pdF9sZWRzID0gc2ZlNDAwMl9pbml0X2xlZHM7Ci0JZWZ4LT5ib2FyZF9pbmZvLnNldF9mYXVsdF9sZWQgPSBzZmU0MDAyX2ZhdWx0X2xlZDsKKwllZngtPmJvYXJkX2luZm8uc2V0X2lkX2xlZCA9IHNmZTQwMDJfc2V0X2lkX2xlZDsKKwllZngtPmJvYXJkX2luZm8uYmxpbmsgPSBib2FyZF9ibGluazsKKwllZngtPmJvYXJkX2luZm8uZmluaSA9IGVmeF9maW5pX2xtODc7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3VwcG9ydCBmb3IgdGhlIFNGTjQxMTJGCisgKgorICovCitzdGF0aWMgdTggc2ZuNDExMmZfbG04N19jaGFubmVsID0gMHgwMzsgLyogdXNlIEFJTiBub3QgRkFOIGlucHV0cyAqLworCitzdGF0aWMgY29uc3QgdTggc2ZuNDExMmZfbG04N19yZWdzW10gPSB7CisJTE04N19JTl9MSU1JVFMoMCwgMHg4MywgMHg5MSksCQkvKiAyLjVWOiAgMS44ViArLy0gNSUgKi8KKwlMTTg3X0lOX0xJTUlUUygxLCAweDUxLCAweDVhKSwJCS8qIFZjY3AxOiAxLjJWICsvLSA1JSAqLworCUxNODdfSU5fTElNSVRTKDIsIDB4YjYsIDB4Y2EpLAkJLyogMy4zVjogIDMuM1YgKy8tIDUlICovCisJTE04N19JTl9MSU1JVFMoNCwgMHhiMCwgMHhlMCksCQkvKiAxMlY6ICAgMTEtMTRWICovCisJTE04N19JTl9MSU1JVFMoNSwgMHg0NCwgMHg0YiksCQkvKiBWY2NwMjogMS4wViArLy0gNSUgKi8KKwlMTTg3X0FJTl9MSU1JVFMoMSwgMHg5MSwgMHhhMSksCQkvKiBBSU4yOiAgMS41ViArLy0gNSUgKi8KKwlMTTg3X1RFTVBfSU5UX0xJTUlUUygxMCwgNjApLAkJLyogYm9hcmQgKi8KKwlMTTg3X1RFTVBfRVhUMV9MSU1JVFMoMTAsIDcwKSwJCS8qIEZhbGNvbiAqLworCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc2ZuNDExMmZfaHdtb25faW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygibG04NyIsIDB4MmUpLAorCS5wbGF0Zm9ybV9kYXRhCT0gJnNmbjQxMTJmX2xtODdfY2hhbm5lbCwKKwkuaXJxCQk9IC0xLAorfTsKKworI2RlZmluZSBTRk40MTEyRl9BQ1RfTEVECTAKKyNkZWZpbmUgU0ZONDExMkZfTElOS19MRUQJMQorCitzdGF0aWMgdm9pZCBzZm40MTEyZl9pbml0X2xlZHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwl4ZnBfc2V0X2xlZChlZngsIFNGTjQxMTJGX0FDVF9MRUQsCisJCSAgICBRVUFLRV9MRURfUlhMSU5LIHwgUVVBS0VfTEVEX0xJTktfQUNUKTsKKwl4ZnBfc2V0X2xlZChlZngsIFNGTjQxMTJGX0xJTktfTEVELAorCQkgICAgUVVBS0VfTEVEX1JYTElOSyB8IFFVQUtFX0xFRF9MSU5LX1NUQVQpOworfQorCitzdGF0aWMgdm9pZCBzZm40MTEyZl9zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpCit7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9MSU5LX0xFRCwKKwkJICAgIHN0YXRlID8gUVVBS0VfTEVEX09OIDogUVVBS0VfTEVEX09GRik7Cit9CisKK3N0YXRpYyBpbnQgc2ZuNDExMmZfY2hlY2tfaHcoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwkvKiBNYXNrIG91dCB1bnVzZWQgc2Vuc29ycyAqLworCXJldHVybiBlZnhfY2hlY2tfbG04NyhlZngsIH4weDQ4KTsKK30KKworc3RhdGljIGludCBzZm40MTEyZl9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJaW50IHJjID0gZWZ4X2luaXRfbG04NyhlZngsICZzZm40MTEyZl9od21vbl9pbmZvLCBzZm40MTEyZl9sbTg3X3JlZ3MpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWVmeC0+Ym9hcmRfaW5mby5tb25pdG9yID0gc2ZuNDExMmZfY2hlY2tfaHc7CisJZWZ4LT5ib2FyZF9pbmZvLmluaXRfbGVkcyA9IHNmbjQxMTJmX2luaXRfbGVkczsKKwllZngtPmJvYXJkX2luZm8uc2V0X2lkX2xlZCA9IHNmbjQxMTJmX3NldF9pZF9sZWQ7CiAJZWZ4LT5ib2FyZF9pbmZvLmJsaW5rID0gYm9hcmRfYmxpbms7CiAJZWZ4LT5ib2FyZF9pbmZvLmZpbmkgPSBlZnhfZmluaV9sbTg3OwogCXJldHVybiAwOwpAQCAtMjQzLDYgKzMwMSw4IEBACiAJeyBFRlhfQk9BUkRfU0ZFNDAwMiwgIlNGRTQwMDIiLCAiWEZQIGFkYXB0ZXIiLCBzZmU0MDAyX2luaXQgfSwKIAl7IEVGWF9CT0FSRF9TRk40MTExVCwgIlNGTjQxMTFUIiwgIjEwMC8xMDAwLzEwR0JBU0UtVCBhZGFwdGVyIiwKIAkgIHNmbjQxMTF0X2luaXQgfSwKKwl7IEVGWF9CT0FSRF9TRk40MTEyRiwgIlNGTjQxMTJGIiwgIlNGUCsgYWRhcHRlciIsCisJICBzZm40MTEyZl9pbml0IH0sCiB9OwogCiB2b2lkIGVmeF9zZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1MTYgcmV2aXNpb25faW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaCBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaAppbmRleCBkOTNjNmM2Li40NDk0MmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCkBAIC0xNSw2ICsxNSw3IEBACiAJRUZYX0JPQVJEX1NGRTQwMDEgPSAxLAogCUVGWF9CT0FSRF9TRkU0MDAyID0gMiwKIAlFRlhfQk9BUkRfU0ZONDExMVQgPSAweDUxLAorCUVGWF9CT0FSRF9TRk40MTEyRiA9IDB4NTIsCiB9OwogCiBleHRlcm4gdm9pZCBlZnhfc2V0X2JvYXJkX2luZm8oc3RydWN0IGVmeF9uaWMgKmVmeCwgdTE2IHJldmlzaW9uX2luZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IGFiMGUwOWIuLjAwYzIzYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTEzMyw2ICsxMzMsMTYgQEAKIG1vZHVsZV9wYXJhbShwaHlfZmxhc2hfY2ZnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwaHlfZmxhc2hfY2ZnLCAiU2V0IFBIWXMgaW50byByZWZsYXNoIG1vZGUgaW5pdGlhbGx5Iik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpcnFfYWRhcHRfbG93X3RocmVzaCA9IDEwMDAwOworbW9kdWxlX3BhcmFtKGlycV9hZGFwdF9sb3dfdGhyZXNoLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2FkYXB0X2xvd190aHJlc2gsCisJCSAiVGhyZXNob2xkIHNjb3JlIGZvciByZWR1Y2luZyBJUlEgbW9kZXJhdGlvbiIpOworCitzdGF0aWMgdW5zaWduZWQgaXJxX2FkYXB0X2hpZ2hfdGhyZXNoID0gMjAwMDA7Cittb2R1bGVfcGFyYW0oaXJxX2FkYXB0X2hpZ2hfdGhyZXNoLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2FkYXB0X2hpZ2hfdGhyZXNoLAorCQkgIlRocmVzaG9sZCBzY29yZSBmb3IgaW5jcmVhc2luZyBJUlEgbW9kZXJhdGlvbiIpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcwpAQCAtMTgyLDcgKzE5Miw2IEBACiAJCWNoYW5uZWwtPnJ4X3BrdCA9IE5VTEw7CiAJfQogCi0JZWZ4X2ZsdXNoX2xybyhjaGFubmVsKTsKIAllZnhfcnhfc3RyYXRlZ3koY2hhbm5lbCk7CiAKIAllZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKCZlZngtPnJ4X3F1ZXVlW2NoYW5uZWwtPmNoYW5uZWxdKTsKQEAgLTIyNCwxMiArMjMzLDQxIEBACiAJcnhfcGFja2V0cyA9IGVmeF9wcm9jZXNzX2NoYW5uZWwoY2hhbm5lbCwgYnVkZ2V0KTsKIAogCWlmIChyeF9wYWNrZXRzIDwgYnVkZ2V0KSB7CisJCXN0cnVjdCBlZnhfbmljICplZnggPSBjaGFubmVsLT5lZng7CisKKwkJaWYgKGNoYW5uZWwtPnVzZWRfZmxhZ3MgJiBFRlhfVVNFRF9CWV9SWCAmJgorCQkgICAgZWZ4LT5pcnFfcnhfYWRhcHRpdmUgJiYKKwkJICAgIHVubGlrZWx5KCsrY2hhbm5lbC0+aXJxX2NvdW50ID09IDEwMDApKSB7CisJCQl1bnNpZ25lZCBvbGRfaXJxX21vZGVyYXRpb24gPSBjaGFubmVsLT5pcnFfbW9kZXJhdGlvbjsKKworCQkJaWYgKHVubGlrZWx5KGNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgPAorCQkJCSAgICAgaXJxX2FkYXB0X2xvd190aHJlc2gpKSB7CisJCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPQorCQkJCQltYXhfdChpbnQsCisJCQkJCSAgICAgIGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC0KKwkJCQkJICAgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiwKKwkJCQkJICAgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTik7CisJCQl9IGVsc2UgaWYgKHVubGlrZWx5KGNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgPgorCQkJCQkgICAgaXJxX2FkYXB0X2hpZ2hfdGhyZXNoKSkgeworCQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0KKwkJCQkJbWluKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uICsKKwkJCQkJICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04sCisJCQkJCSAgICBlZngtPmlycV9yeF9tb2RlcmF0aW9uKTsKKwkJCX0KKworCQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uICE9IG9sZF9pcnFfbW9kZXJhdGlvbikKKwkJCQlmYWxjb25fc2V0X2ludF9tb2RlcmF0aW9uKGNoYW5uZWwpOworCisJCQljaGFubmVsLT5pcnFfY291bnQgPSAwOworCQkJY2hhbm5lbC0+aXJxX21vZF9zY29yZSA9IDA7CisJCX0KKwogCQkvKiBUaGVyZSBpcyBubyByYWNlIGhlcmU7IGFsdGhvdWdoIG5hcGlfZGlzYWJsZSgpIHdpbGwKLQkJICogb25seSB3YWl0IGZvciBuZXRpZl9yeF9jb21wbGV0ZSgpLCB0aGlzIGlzbid0IGEgcHJvYmxlbQorCQkgKiBvbmx5IHdhaXQgZm9yIG5hcGlfY29tcGxldGUoKSwgdGhpcyBpc24ndCBhIHByb2JsZW0KIAkJICogc2luY2UgZWZ4X2NoYW5uZWxfcHJvY2Vzc2VkKCkgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZgogCQkgKiBpbnRlcnJ1cHRzIGhhdmUgYWxyZWFkeSBiZWVuIGRpc2FibGVkLgogCQkgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWVmeF9jaGFubmVsX3Byb2Nlc3NlZChjaGFubmVsKTsKIAl9CiAKQEAgLTU1OCw2ICs1OTYsOCBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIGVmeF9maW5pX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisKIC8qIFRoaXMgY2FsbCByZWluaXRpYWxpc2VzIHRoZSBNQUMgdG8gcGljayB1cCBuZXcgUEhZIHNldHRpbmdzLiBUaGUKICAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIG1hY19sb2NrICovCiB2b2lkIF9fZWZ4X3JlY29uZmlndXJlX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU5Myw4ICs2MzMsOCBAQAogCiBmYWlsOgogCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlY29uZmlndXJlIE1BQ1xuIik7Ci0JZWZ4LT5waHlfb3AtPmZpbmkoZWZ4KTsKLQllZngtPnBvcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwllZngtPnBvcnRfZW5hYmxlZCA9IGZhbHNlOworCWVmeF9maW5pX3BvcnQoZWZ4KTsKIH0KIAogLyogUmVpbml0aWFsaXNlIHRoZSBNQUMgdG8gcGljayB1cCBuZXcgUEhZIHNldHRpbmdzLCBldmVuIGlmIHRoZSBwb3J0IGlzCkBAIC04NTQsMjAgKzg5NCwyNyBAQAogICogaW50ZXJydXB0cyBhY3Jvc3MgdGhlbS4gKi8KIHN0YXRpYyBpbnQgZWZ4X3dhbnRlZF9yeF9xdWV1ZXModm9pZCkKIHsKLQljcHVtYXNrX3QgY29yZV9tYXNrOworCWNwdW1hc2tfdmFyX3QgY29yZV9tYXNrOwogCWludCBjb3VudDsKIAlpbnQgY3B1OwogCi0JY3B1c19jbGVhcihjb3JlX21hc2spOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJmNvcmVfbWFzaywgR0ZQX0tFUk5FTCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImVmeC5jOiBhbGxvY2F0aW9uIGZhaWx1cmUsIGlycSBiYWxhbmNpbmcgaG9iYmxlZFxuIik7CisJCXJldHVybiAxOworCX0KKworCWNwdW1hc2tfY2xlYXIoY29yZV9tYXNrKTsKIAljb3VudCA9IDA7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKCFjcHVfaXNzZXQoY3B1LCBjb3JlX21hc2spKSB7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGNvcmVfbWFzaykpIHsKIAkJCSsrY291bnQ7Ci0JCQljcHVzX29yKGNvcmVfbWFzaywgY29yZV9tYXNrLAotCQkJCXRvcG9sb2d5X2NvcmVfc2libGluZ3MoY3B1KSk7CisJCQljcHVtYXNrX29yKGNvcmVfbWFzaywgY29yZV9tYXNrLAorCQkJCSAgIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpKTsKIAkJfQogCX0KIAorCWZyZWVfY3B1bWFza192YXIoY29yZV9tYXNrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTk5MCw3ICsxMDM3LDcgQEAKIAllZnhfc2V0X2NoYW5uZWxzKGVmeCk7CiAKIAkvKiBJbml0aWFsaXNlIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBzZXR0aW5ncyAqLwotCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfaXJxX21vZF91c2VjLCByeF9pcnFfbW9kX3VzZWMpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfaXJxX21vZF91c2VjLCByeF9pcnFfbW9kX3VzZWMsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg3LDcgKzEyMzQsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTZXQgaW50ZXJydXB0IG1vZGVyYXRpb24gcGFyYW1ldGVycyAqLwotdm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsIGludCByeF91c2VjcykKK3ZvaWQgZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IHR4X3VzZWNzLCBpbnQgcnhfdXNlY3MsCisJCQkgICAgIGJvb2wgcnhfYWRhcHRpdmUpCiB7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CkBAIC0xMTk3LDYgKzEyNDUsOCBAQAogCWVmeF9mb3JfZWFjaF90eF9xdWV1ZSh0eF9xdWV1ZSwgZWZ4KQogCQl0eF9xdWV1ZS0+Y2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSB0eF91c2VjczsKIAorCWVmeC0+aXJxX3J4X2FkYXB0aXZlID0gcnhfYWRhcHRpdmU7CisJZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbiA9IHJ4X3VzZWNzOwogCWVmeF9mb3JfZWFjaF9yeF9xdWV1ZShyeF9xdWV1ZSwgZWZ4KQogCQlyeF9xdWV1ZS0+Y2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByeF91c2VjczsKIH0KQEAgLTEyNjksMTggKzEzMTksMTEgQEAKIHN0YXRpYyBpbnQgZWZ4X2luaXRfbmFwaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKLQlpbnQgcmM7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKIAkJY2hhbm5lbC0+bmFwaV9kZXYgPSBlZngtPm5ldF9kZXY7Ci0JCXJjID0gZWZ4X2xyb19pbml0KCZjaGFubmVsLT5scm9fbWdyLCBlZngpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVycjsKIAl9CiAJcmV0dXJuIDA7Ci0gZXJyOgotCWVmeF9maW5pX25hcGkoZWZ4KTsKLQlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIGVmeF9maW5pX25hcGkoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTEyODgsNyArMTMzMSw2IEBACiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCiAJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7Ci0JCWVmeF9scm9fZmluaSgmY2hhbm5lbC0+bHJvX21ncik7CiAJCWNoYW5uZWwtPm5hcGlfZGV2ID0gTlVMTDsKIAl9CiB9CkBAIC0xNjc2LDcgKzE3MTgsOCBAQAogCQkJcmMgPSBlZngtPnBoeV9vcC0+aW5pdChlZngpOwogCQkJaWYgKHJjKQogCQkJCW9rID0gZmFsc2U7Ci0JCX0gZWxzZQorCQl9CisJCWlmICghb2spCiAJCQllZngtPnBvcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAl9CiAKQEAgLTE4NTcsOCArMTkwMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWZ4X2JvYXJkIGVmeF9kdW1teV9ib2FyZF9pbmZvID0gewogCS5pbml0CQk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKLQkuaW5pdF9sZWRzCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAotCS5zZXRfZmF1bHRfbGVkCT0gZWZ4X3BvcnRfZHVtbXlfb3BfYmxpbmssCisJLmluaXRfbGVkcwk9IGVmeF9wb3J0X2R1bW15X29wX3ZvaWQsCisJLnNldF9pZF9sZWQJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKIAkubW9uaXRvcgk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKIAkuYmxpbmsJCT0gZWZ4X3BvcnRfZHVtbXlfb3BfYmxpbmssCiAJLmZpbmkJCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKQEAgLTIxMjAsNyArMjE2Myw3IEBACiAJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAogCQkJICAgICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOwogCWlmIChscm8pCi0JCW5ldF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQluZXRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAkvKiBNYXNrIGZvciBmZWF0dXJlcyB0aGF0IGFsc28gYXBwbHkgdG8gVkxBTiBkZXZpY2VzICovCiAJbmV0X2Rldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfU0cgfAogCQkJCSAgIE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfVFNPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaCBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaAppbmRleCA1NWQwZjEzLi5kYTE1N2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCkBAIC01Miw3ICs1Miw3IEBACiBleHRlcm4gdm9pZCBlZnhfc3VzcGVuZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9yZXN1bWUoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsCi0JCQkJICAgIGludCByeF91c2Vjcyk7CisJCQkJICAgIGludCByeF91c2VjcywgYm9vbCByeF9hZGFwdGl2ZSk7CiBleHRlcm4gaW50IGVmeF9yZXF1ZXN0X3Bvd2VyKHN0cnVjdCBlZnhfbmljICplZngsIGludCBtdywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBlZnhfaGV4X2R1bXAoY29uc3QgdTggKiwgdW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwogCkBAIC04MCw3ICs4MCw3IEBACiAJCSAgY2hhbm5lbC0+Y2hhbm5lbCwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJY2hhbm5lbC0+d29ya19wZW5kaW5nID0gdHJ1ZTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZjaGFubmVsLT5uYXBpX3N0cik7CisJbmFwaV9zY2hlZHVsZSgmY2hhbm5lbC0+bmFwaV9zdHIpOwogfQogCiAjZW5kaWYgLyogRUZYX0VGWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCA3YjU5MjRjMC4uNjQzMDlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCkBAIC01MjksNyArNTI5LDE0IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCi0JcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJmVmeC0+bWlpKTsKKwlpZiAoZWZ4LT5waHlfb3AtPm1tZHMgJiBERVZfUFJFU0VOVF9CSVQoTURJT19NTURfQU4pKSB7CisJCW1kaW9fY2xhdXNlNDVfc2V0X2ZsYWcoZWZ4LCBlZngtPm1paS5waHlfaWQsIE1ESU9fTU1EX0FOLAorCQkJCSAgICAgICBNRElPX01NRFJFR19DVFJMMSwKKwkJCQkgICAgICAgX19mZnMoQk1DUl9BTlJFU1RBUlQpLCB0cnVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiBzdGF0aWMgdTMyIGVmeF9ldGh0b29sX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQpAQCAtNTk3LDcgKzYwNCw2IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwotCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKIAogCW1lbXNldChjb2FsZXNjZSwgMCwgc2l6ZW9mKCpjb2FsZXNjZSkpOwpAQCAtNjE1LDE0ICs2MjEsOCBAQAogCQl9CiAJfQogCi0JLyogRmluZCBsb3dlc3QgSVJRIG1vZGVyYXRpb24gYWNyb3NzIGFsbCB1c2VkIFJYIHF1ZXVlcyAqLwotCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPSB+KCh1MzIpIDApOwotCWVmeF9mb3JfZWFjaF9yeF9xdWV1ZShyeF9xdWV1ZSwgZWZ4KSB7Ci0JCWNoYW5uZWwgPSByeF9xdWV1ZS0+Y2hhbm5lbDsKLQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSkKLQkJCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPQotCQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uOwotCX0KKwljb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlID0gZWZ4LT5pcnFfcnhfYWRhcHRpdmU7CisJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IGVmeC0+aXJxX3J4X21vZGVyYXRpb247CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNiwxMCArNjM2LDkgQEAKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwotCXVuc2lnbmVkIHR4X3VzZWNzLCByeF91c2VjczsKKwl1bnNpZ25lZCB0eF91c2VjcywgcnhfdXNlY3MsIGFkYXB0aXZlOwogCi0JaWYgKGNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgfHwKLQkgICAgY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSkKKwlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcyB8fCBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3MpIHsKQEAgLTY1MCw2ICs2NDksNyBAQAogCiAJcnhfdXNlY3MgPSBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxOwogCXR4X3VzZWNzID0gY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2lycTsKKwlhZGFwdGl2ZSA9IGNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7CiAKIAkvKiBJZiB0aGUgY2hhbm5lbCBpcyBzaGFyZWQgb25seSBhbGxvdyBSWCBwYXJhbWV0ZXJzIHRvIGJlIHNldCAqLwogCWVmeF9mb3JfZWFjaF90eF9xdWV1ZSh0eF9xdWV1ZSwgZWZ4KSB7CkBAIC02NjEsNyArNjYxLDcgQEAKIAkJfQogCX0KIAotCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfdXNlY3MsIHJ4X3VzZWNzKTsKKwllZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihlZngsIHR4X3VzZWNzLCByeF91c2VjcywgYWRhcHRpdmUpOwogCiAJLyogUmVzZXQgY2hhbm5lbCB0byBwaWNrIHVwIG5ldyBtb2RlcmF0aW9uIHZhbHVlLiAgTm90ZSB0aGF0CiAJICogdGhpcyBtYXkgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgaXJxX21vZGVyYXRpb24gZmllbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwppbmRleCBkNTM3OGU2Li5kNDYyOWFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwpAQCAtMzksMTEgKzM5LDE2IEBACiAgKiBAbmV4dF9idWZmZXJfdGFibGU6IEZpcnN0IGF2YWlsYWJsZSBidWZmZXIgdGFibGUgaWQKICAqIEBwY2lfZGV2MjogVGhlIHNlY29uZGFyeSBQQ0kgZGV2aWNlIGlmIHByZXNlbnQKICAqIEBpMmNfZGF0YTogT3BlcmF0aW9ucyBhbmQgc3RhdGUgZm9yIEkyQyBiaXQtYmFzaGluZyBhbGdvcml0aG0KKyAqIEBpbnRfZXJyb3JfY291bnQ6IE51bWJlciBvZiBpbnRlcm5hbCBlcnJvcnMgc2VlbiByZWNlbnRseQorICogQGludF9lcnJvcl9leHBpcmU6IFRpbWUgYXQgd2hpY2ggZXJyb3IgY291bnQgd2lsbCBiZSBleHBpcmVkCiAgKi8KIHN0cnVjdCBmYWxjb25fbmljX2RhdGEgewogCXVuc2lnbmVkIG5leHRfYnVmZmVyX3RhYmxlOwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2MjsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgaTJjX2RhdGE7CisKKwl1bnNpZ25lZCBpbnRfZXJyb3JfY291bnQ7CisJdW5zaWduZWQgbG9uZyBpbnRfZXJyb3JfZXhwaXJlOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTksOCArMTI0LDEyIEBACiAjZGVmaW5lIEZBTENPTl9FVlFfU0laRSA0MDk2CiAjZGVmaW5lIEZBTENPTl9FVlFfTUFTSyAoRkFMQ09OX0VWUV9TSVpFIC0gMSkKIAotLyogTWF4IG51bWJlciBvZiBpbnRlcm5hbCBlcnJvcnMuIEFmdGVyIHRoaXMgcmVzZXRzIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAqLwotI2RlZmluZSBGQUxDT05fTUFYX0lOVF9FUlJPUlMgNAorLyogSWYgRkFMQ09OX01BWF9JTlRfRVJST1JTIGludGVybmFsIGVycm9ycyBvY2N1ciB3aXRoaW4KKyAqIEZBTENPTl9JTlRfRVJST1JfRVhQSVJFIHNlY29uZHMsIHdlIGNvbnNpZGVyIHRoZSBOSUMgYnJva2VuIGFuZAorICogZGlzYWJsZSBpdC4KKyAqLworI2RlZmluZSBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSAzNjAwCisjZGVmaW5lIEZBTENPTl9NQVhfSU5UX0VSUk9SUyA1CiAKIC8qIFdlIHBvbGwgZm9yIGV2ZW50cyBldmVyeSBGTFVTSF9JTlRFUlZBTCBtcywgYW5kIGNoZWNrIEZMVVNIX1BPTExfQ09VTlQgdGltZXMKICAqLwpAQCAtMTQ2LDEzICsxNTUsNiBAQAogLyogRHVtbXkgU1JBTSBzaXplIGNvZGUgKi8KICNkZWZpbmUgU1JNX05CX0JTWl9PTkNISVBfT05MWSAoLTEpCiAKLS8qIEJlIG5pY2UgaWYgdGhlc2UgKG9yIGVxdWl2Likgd2VyZSBpbiBsaW51eC9wY2lfcmVncy5oLCBidXQgdGhleSdyZSBub3QuICovCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUxfTEJOCTE4Ci0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9TQ0xfTEJOCTI2Ci0jZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1BBWUxPQURfTEJOCTUKLSNkZWZpbmUgUENJX0VYUF9MTktTVEFfTE5LX1dJRAkJMHgzZjAKLSNkZWZpbmUgUENJX0VYUF9MTktTVEFfTE5LX1dJRF9MQk4JNAotCiAjZGVmaW5lIEZBTENPTl9JU19EVUFMX0ZVTkMoZWZ4KQkJXAogCShmYWxjb25fcmV2KGVmeCkgPCBGQUxDT05fUkVWX0IwKQogCkBAIC0zMzgsMTAgKzM0MCwxMCBAQAogCW5pY19kYXRhLT5uZXh0X2J1ZmZlcl90YWJsZSArPSBidWZmZXItPmVudHJpZXM7CiAKIAlFRlhfTE9HKGVmeCwgImFsbG9jYXRpbmcgc3BlY2lhbCBidWZmZXJzICVkLSVkIGF0ICVsbHgrJXggIgotCQkiKHZpcnQgJXAgcGh5cyAlbHgpXG4iLCBidWZmZXItPmluZGV4LAorCQkiKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwgYnVmZmVyLT5pbmRleCwKIAkJYnVmZmVyLT5pbmRleCArIGJ1ZmZlci0+ZW50cmllcyAtIDEsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpYnVmZmVyLT5kbWFfYWRkciwgbGVuLAotCQlidWZmZXItPmFkZHIsIHZpcnRfdG9fcGh5cyhidWZmZXItPmFkZHIpKTsKKwkJKHU2NClidWZmZXItPmRtYV9hZGRyLCBsZW4sCisJCWJ1ZmZlci0+YWRkciwgKHU2NCl2aXJ0X3RvX3BoeXMoYnVmZmVyLT5hZGRyKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MywxMCArMzU1LDEwIEBACiAJCXJldHVybjsKIAogCUVGWF9MT0coZWZ4LCAiZGVhbGxvY2F0aW5nIHNwZWNpYWwgYnVmZmVycyAlZC0lZCBhdCAlbGx4KyV4ICIKLQkJIih2aXJ0ICVwIHBoeXMgJWx4KVxuIiwgYnVmZmVyLT5pbmRleCwKKwkJIih2aXJ0ICVwIHBoeXMgJWxseClcbiIsIGJ1ZmZlci0+aW5kZXgsCiAJCWJ1ZmZlci0+aW5kZXggKyBidWZmZXItPmVudHJpZXMgLSAxLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWJ1ZmZlci0+ZG1hX2FkZHIsIGJ1ZmZlci0+bGVuLAotCQlidWZmZXItPmFkZHIsIHZpcnRfdG9fcGh5cyhidWZmZXItPmFkZHIpKTsKKwkJKHU2NClidWZmZXItPmRtYV9hZGRyLCBidWZmZXItPmxlbiwKKwkJYnVmZmVyLT5hZGRyLCAodTY0KXZpcnRfdG9fcGh5cyhidWZmZXItPmFkZHIpKTsKIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQoZWZ4LT5wY2lfZGV2LCBidWZmZXItPmxlbiwgYnVmZmVyLT5hZGRyLAogCQkJICAgIGJ1ZmZlci0+ZG1hX2FkZHIpOwpAQCAtNzI3LDYgKzcyOSw5IEBACiAJCXR4X2V2X2Rlc2NfcHRyID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfREVTQ19QVFIpOwogCQl0eF9ldl9xX2xhYmVsID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfUV9MQUJFTCk7CiAJCXR4X3F1ZXVlID0gJmVmeC0+dHhfcXVldWVbdHhfZXZfcV9sYWJlbF07CisJCWNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgKz0KKwkJCSh0eF9ldl9kZXNjX3B0ciAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50KSAmCisJCQllZngtPnR5cGUtPnR4ZF9yaW5nX21hc2s7CiAJCWVmeF94bWl0X2RvbmUodHhfcXVldWUsIHR4X2V2X2Rlc2NfcHRyKTsKIAl9IGVsc2UgaWYgKEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX1dRX0ZGX0ZVTEwpKSB7CiAJCS8qIFJld3JpdGUgdGhlIEZJRk8gd3JpdGUgcG9pbnRlciAqLwpAQCAtODk2LDYgKzkwMSw4IEBACiAJCQlkaXNjYXJkID0gdHJ1ZTsKIAl9CiAKKwljaGFubmVsLT5pcnFfbW9kX3Njb3JlICs9IDI7CisKIAkvKiBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0ICovCiAJZWZ4X3J4X3BhY2tldChyeF9xdWV1ZSwgcnhfZXZfZGVzY19wdHIsIHJ4X2V2X2J5dGVfY250LAogCQkgICAgICBjaGVja3N1bW1lZCwgZGlzY2FyZCk7CkBAIC0xMDczLDE0ICsxMDgwLDE1IEBACiAJCSAqIHByb2dyYW0gaXMgYmFzZWQgYXQgMC4gIFNvIGFjdHVhbCBpbnRlcnJ1cHQgbW9kZXJhdGlvbgogCQkgKiBhY2hpZXZlZCBpcyAoKHggKyAxKSAqIHJlcykuCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgcmVzID0gNTsKLQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLT0gKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uICUgcmVzKTsKLQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgcmVzKQotCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByZXM7CisJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC09IChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAlCisJCQkJCSAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTikKKwkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0gRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTjsKIAkJRUZYX1BPUFVMQVRFX0RXT1JEXzIodGltZXJfY21kLAogCQkJCSAgICAgVElNRVJfTU9ERSwgVElNRVJfTU9ERV9JTlRfSExET0ZGLAogCQkJCSAgICAgVElNRVJfVkFMLAotCQkJCSAgICAgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC8gcmVzKSAtIDEpOworCQkJCSAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLworCQkJCSAgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiAtIDEpOwogCX0gZWxzZSB7CiAJCUVGWF9QT1BVTEFURV9EV09SRF8yKHRpbWVyX2NtZCwKIAkJCQkgICAgIFRJTUVSX01PREUsIFRJTUVSX01PREVfRElTLApAQCAtMTE4NywzMSArMTE5NSwyOSBAQAogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7Ci0JdW5zaWduZWQgaW50IHJlYWRfcHRyLCBpOworCXVuc2lnbmVkIGludCByZWFkX3B0ciA9IGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cjsKKwl1bnNpZ25lZCBpbnQgZW5kX3B0ciA9IChyZWFkX3B0ciAtIDEpICYgRkFMQ09OX0VWUV9NQVNLOwogCi0JcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7Ci0JZm9yIChpID0gMDsgaSA8IEZBTENPTl9FVlFfU0laRTsgKytpKSB7CisJZG8gewogCQllZnhfcXdvcmRfdCAqZXZlbnQgPSBmYWxjb25fZXZlbnQoY2hhbm5lbCwgcmVhZF9wdHIpOwogCQlpbnQgZXZfY29kZSwgZXZfc3ViX2NvZGUsIGV2X3F1ZXVlOwogCQlib29sIGV2X2ZhaWxlZDsKKwogCQlpZiAoIWZhbGNvbl9ldmVudF9wcmVzZW50KGV2ZW50KSkKIAkJCWJyZWFrOwogCiAJCWV2X2NvZGUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBFVl9DT0RFKTsKLQkJaWYgKGV2X2NvZGUgIT0gRFJJVkVSX0VWX0RFQ09ERSkKLQkJCWNvbnRpbnVlOwotCiAJCWV2X3N1Yl9jb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRFJJVkVSX0VWX1NVQl9DT0RFKTsKLQkJc3dpdGNoIChldl9zdWJfY29kZSkgewotCQljYXNlIFRYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERToKKwkJaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkgICAgZXZfc3ViX2NvZGUgPT0gVFhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfVFhfREVTQ1FfSUQpOwogCQkJaWYgKGV2X3F1ZXVlIDwgRUZYX1RYX1FVRVVFX0NPVU5UKSB7CiAJCQkJdHhfcXVldWUgPSBlZngtPnR4X3F1ZXVlICsgZXZfcXVldWU7CiAJCQkJdHhfcXVldWUtPmZsdXNoZWQgPSB0cnVlOwogCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFOgorCQl9IGVsc2UgaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkJICAgZXZfc3ViX2NvZGUgPT0gUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfUlhfREVTQ1FfSUQpOwogCQkJZXZfZmFpbGVkID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwKQEAgLTEyMjUsMTEgKzEyMzEsMTAgQEAKIAkJCQllbHNlCiAJCQkJCXJ4X3F1ZXVlLT5mbHVzaGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwogCQl9CiAKIAkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIEZBTENPTl9FVlFfTUFTSzsKLQl9CisJfSB3aGlsZSAocmVhZF9wdHIgIT0gZW5kX3B0cik7CiB9CiAKIC8qIEhhbmRsZSB0eCBhbmQgcnggZmx1c2hlcyBhdCB0aGUgc2FtZSB0aW1lLCBzaW5jZSB0aGV5IHJ1biBpbgpAQCAtMTM3Nyw3ICsxMzgyLDYgQEAKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOwogCWVmeF9vd29yZF90IGZhdGFsX2ludHI7CiAJaW50IGVycm9yLCBtZW1fcGVycjsKLQlzdGF0aWMgaW50IG5faW50X2Vycm9yczsKIAogCWZhbGNvbl9yZWFkKGVmeCwgJmZhdGFsX2ludHIsIEZBVEFMX0lOVFJfUkVHX0tFUik7CiAJZXJyb3IgPSBFRlhfT1dPUkRfRklFTEQoZmF0YWxfaW50ciwgSU5UX0tFUl9FUlJPUik7CkBAIC0xNDA0LDcgKzE0MDgsMTQgQEAKIAkJcGNpX2NsZWFyX21hc3RlcihuaWNfZGF0YS0+cGNpX2RldjIpOwogCWZhbGNvbl9kaXNhYmxlX2ludGVycnVwdHMoZWZ4KTsKIAotCWlmICgrK25faW50X2Vycm9ycyA8IEZBTENPTl9NQVhfSU5UX0VSUk9SUykgeworCS8qIENvdW50IGVycm9ycyBhbmQgcmVzZXQgb3IgZGlzYWJsZSB0aGUgTklDIGFjY29yZGluZ2x5ICovCisJaWYgKG5pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPT0gMCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIG5pY19kYXRhLT5pbnRfZXJyb3JfZXhwaXJlKSkgeworCQluaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50ID0gMDsKKwkJbmljX2RhdGEtPmludF9lcnJvcl9leHBpcmUgPQorCQkJamlmZmllcyArIEZBTENPTl9JTlRfRVJST1JfRVhQSVJFICogSFo7CisJfQorCWlmICgrK25pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPCBGQUxDT05fTUFYX0lOVF9FUlJPUlMpIHsKIAkJRUZYX0VSUihlZngsICJTWVNURU0gRVJST1IgLSByZXNldCBzY2hlZHVsZWRcbiIpOwogCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX0lOVF9FUlJPUik7CiAJfSBlbHNlIHsKQEAgLTE0MjMsNiArMTQzNCw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGRldl9pZDsKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOworCWlycXJldHVybl90IHJlc3VsdCA9IElSUV9OT05FOwogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKIAllZnhfZHdvcmRfdCByZWc7CiAJdTMyIHF1ZXVlczsKQEAgLTE0MzcsMjMgKzE0NDksMjQgQEAKIAlpZiAodW5saWtlbHkoc3lzZXJyKSkKIAkJcmV0dXJuIGZhbGNvbl9mYXRhbF9pbnRlcnJ1cHQoZWZ4KTsKIAotCWlmIChxdWV1ZXMgPT0gMCkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JZWZ4LT5sYXN0X2lycV9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKLQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7Ci0KIAkvKiBTY2hlZHVsZSBwcm9jZXNzaW5nIG9mIGFueSBpbnRlcnJ1cHRpbmcgcXVldWVzICovCi0JY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07Ci0Jd2hpbGUgKHF1ZXVlcykgewotCQlpZiAocXVldWVzICYgMHgwMSkKKwllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKKwkJaWYgKChxdWV1ZXMgJiAxKSB8fAorCQkgICAgZmFsY29uX2V2ZW50X3ByZXNlbnQoCisJCQkgICAgZmFsY29uX2V2ZW50KGNoYW5uZWwsIGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cikpKSB7CiAJCQllZnhfc2NoZWR1bGVfY2hhbm5lbChjaGFubmVsKTsKLQkJY2hhbm5lbCsrOworCQkJcmVzdWx0ID0gSVJRX0hBTkRMRUQ7CisJCX0KIAkJcXVldWVzID4+PSAxOwogCX0KIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlpZiAocmVzdWx0ID09IElSUV9IQU5ETEVEKSB7CisJCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJRUZYX1RSQUNFKGVmeCwgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX0RXT1JEX0ZNVCAiXG4iLAorCQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC0yMjQ5LDYgKzIyNjIsNyBAQAogCQllZngtPnBoeV9vcCA9ICZmYWxjb25fc2Z0OTAwMV9waHlfb3BzOwogCQlicmVhazsKIAljYXNlIFBIWV9UWVBFX1FUMjAyMkMyOgorCWNhc2UgUEhZX1RZUEVfUVQyMDI1QzoKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3hmcF9waHlfb3BzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjM0MywxMCArMjM1NywxMCBAQAogCQkJCSBGQUxDT05fTUFDX1NUQVRTX1NJWkUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCUVGWF9MT0coZWZ4LCAic3RhdHMgYnVmZmVyIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbHgpXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWVmeC0+c3RhdHNfYnVmZmVyLmRtYV9hZGRyLAorCUVGWF9MT0coZWZ4LCAic3RhdHMgYnVmZmVyIGF0ICVsbHggKHZpcnQgJXAgcGh5cyAlbGx4KVxuIiwKKwkJKHU2NCllZngtPnN0YXRzX2J1ZmZlci5kbWFfYWRkciwKIAkJZWZ4LT5zdGF0c19idWZmZXIuYWRkciwKLQkJdmlydF90b19waHlzKGVmeC0+c3RhdHNfYnVmZmVyLmFkZHIpKTsKKwkJKHU2NCl2aXJ0X3RvX3BoeXMoZWZ4LT5zdGF0c19idWZmZXIuYWRkcikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTIxLDkgKzI5MzUsOSBAQAogCQlnb3RvIGZhaWw0OwogCUJVR19PTihlZngtPmlycV9zdGF0dXMuZG1hX2FkZHIgJiAweDBmKTsKIAotCUVGWF9MT0coZWZ4LCAiSU5UX0tFUiBhdCAlbGx4ICh2aXJ0ICVwIHBoeXMgJWx4KVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyllZngtPmlycV9zdGF0dXMuZG1hX2FkZHIsCi0JCWVmeC0+aXJxX3N0YXR1cy5hZGRyLCB2aXJ0X3RvX3BoeXMoZWZ4LT5pcnFfc3RhdHVzLmFkZHIpKTsKKwlFRlhfTE9HKGVmeCwgIklOVF9LRVIgYXQgJWxseCAodmlydCAlcCBwaHlzICVsbHgpXG4iLAorCQkodTY0KWVmeC0+aXJxX3N0YXR1cy5kbWFfYWRkciwKKwkJZWZ4LT5pcnFfc3RhdHVzLmFkZHIsICh1NjQpdmlydF90b19waHlzKGVmeC0+aXJxX3N0YXR1cy5hZGRyKSk7CiAKIAlmYWxjb25fcHJvYmVfc3BpX2RldmljZXMoZWZ4KTsKIApAQCAtMzExMyw4ICszMTI3LDEwIEBACiAJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAorCS8qIFJlbW92ZSBJMkMgYWRhcHRlciBhbmQgY2xlYXIgaXQgaW4gcHJlcGFyYXRpb24gZm9yIGEgcmV0cnkgKi8KIAlyYyA9IGkyY19kZWxfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAJQlVHX09OKHJjKTsKKwltZW1zZXQoJmVmeC0+aTJjX2FkYXAsIDAsIHNpemVvZihlZngtPmkyY19hZGFwKSk7CiAKIAlmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKGVmeCk7CiAJZmFsY29uX2ZyZWVfYnVmZmVyKGVmeCwgJmVmeC0+aXJxX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmggYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmgKaW5kZXggNzg2OWMzZC4uNzdmMmUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIHZvaWQgZmFsY29uX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGZhbGNvbl9maW5pX2ludGVycnVwdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAorI2RlZmluZSBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OIDUKKwogLyogR2xvYmFsIFJlc291cmNlcyAqLwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oCmluZGV4IGMxNmRhMzEuLjg4ODMwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2lvLmgKQEAgLTIzOCwxOCArMjM4LDIxIEBACiAvKiBXcml0ZSBkd29yZCB0byBGYWxjb24gcGFnZS1tYXBwZWQgcmVnaXN0ZXIgd2l0aCBhbiBleHRyYSBsb2NrLgogICoKICAqIEFzIGZvciBmYWxjb25fd3JpdGVsX3BhZ2UoKSwgYnV0IGZvciBhIHJlZ2lzdGVyIHRoYXQgc3VmZmVycyBmcm9tCi0gKiBTRkMgYnVnIDMxODEuIFRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVIGNvbGxlY3RvciBjYW5ub3QgYmUKLSAqIGNvbmZ1c2VkLiAqLworICogU0ZDIGJ1ZyAzMTgxLiAgSWYgd3JpdGluZyB0byBwYWdlIDAsIHRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVCisgKiBjb2xsZWN0b3IgY2Fubm90IGJlIGNvbmZ1c2VkLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmFsY29uX3dyaXRlbF9wYWdlX2xvY2tlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAogCQkJCQkgICAgIGVmeF9kd29yZF90ICp2YWx1ZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOworCWlmIChwYWdlID09IDApCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAJZmFsY29uX3dyaXRlbChlZngsIHZhbHVlLCBGQUxDT05fUEFHRURfUkVHKHBhZ2UsIHJlZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZSA9PSAwKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiB9CiAKICNlbmRpZiAvKiBFRlhfRkFMQ09OX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKaW5kZXggZjllMmY5NS4uOWY1ZWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKQEAgLTE3LDYgKzE3LDIxIEBACiAjaW5jbHVkZSAiYm9hcmRzLmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKIAordW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKQoreworCXVuc2lnbmVkIG91aSA9IDA7CisJaW50IGk7CisKKwkvKiBUaGUgYml0cyBvZiB0aGUgT1VJIGFyZSBkZXNpZ25hdGVkIGEuLngsIHdpdGggYT0wIGFuZCBiIHZhcmlhYmxlLgorCSAqIEluIHRoZSBpZCByZWdpc3RlciBjIGlzIHRoZSBNU0IgYnV0IHRoZSBPVUkgaXMgY29udmVudGlvbmFsbHkKKwkgKiB3cml0dGVuIGFzIGJ5dGVzIGguLmEsIHAuLmksIHguLnEuICBSZW9yZGVyIHRoZSBiaXRzIGFjY29yZGluZ2x5LiAqLworCWZvciAoaSA9IDA7IGkgPCAyMjsgKytpKQorCQlpZiAoaWQgJiAoMSA8PCAoaSArIDEwKSkpCisJCQlvdWkgfD0gMSA8PCAoaSBeIDcpOworCisJcmV0dXJuIG91aTsKK30KKwogaW50IG1kaW9fY2xhdXNlNDVfcmVzZXRfbW1kKHN0cnVjdCBlZnhfbmljICpwb3J0LCBpbnQgbW1kLAogCQkJICAgIGludCBzcGlucywgaW50IHNwaW50aW1lKQogewpAQCAtMTI1LDI0ICsxNDAsMjUgQEAKIGludCBtZGlvX2NsYXVzZTQ1X2NoZWNrX21tZHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgdW5zaWduZWQgaW50IG1tZF9tYXNrLCB1bnNpZ25lZCBpbnQgZmF0YWxfbWFzaykKIHsKKwlpbnQgbW1kID0gMCwgcHJvYmVfbW1kLCBkZXZzMCwgZGV2czE7CiAJdTMyIGRldmljZXM7Ci0JaW50IG1tZCA9IDAsIHByb2JlX21tZDsKIAogCS8qIEhpc3RvcmljYWxseSB3ZSBoYXZlIHByb2JlZCB0aGUgUEhZWFMgdG8gZmluZCBvdXQgd2hhdCBkZXZpY2VzIGFyZQogCSAqIHByZXNlbnQsYnV0IHRoYXQgZG9lc24ndCB3b3JrIHNvIHdlbGwgaWYgdGhlIFBIWVhTIGlzbid0IGV4cGVjdGVkCiAJICogdG8gZXhpc3QsIGlmIHNvIGp1c3QgZmluZCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBzdXBwbGllZC4gKi8KIAlwcm9iZV9tbWQgPSAobW1kX21hc2sgJiBNRElPX01NRFJFR19ERVZTX1BIWVhTKSA/IE1ESU9fTU1EX1BIWVhTIDoKIAkgICAgX19mZnMobW1kX21hc2spOwotCWRldmljZXMgPSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApIHwKLQkJICAgbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpIDw8IDE2KTsKIAogCS8qIENoZWNrIGFsbCB0aGUgZXhwZWN0ZWQgTU1EcyBhcmUgcHJlc2VudCAqLwotCWlmIChkZXZpY2VzIDwgMCkgeworCWRldnMwID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApOworCWRldnMxID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpOworCWlmIChkZXZzMCA8IDAgfHwgZGV2czEgPCAwKSB7CiAJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlYWQgZGV2aWNlcyBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCWRldmljZXMgPSBkZXZzMCB8IChkZXZzMSA8PCAxNik7CiAJaWYgKChkZXZpY2VzICYgbW1kX21hc2spICE9IG1tZF9tYXNrKSB7CiAJCUVGWF9FUlIoZWZ4LCAicmVxdWlyZWQgTU1EcyBub3QgcHJlc2VudDogZ290ICV4LCAiCiAJCQkid2FudGVkICV4XG4iLCBkZXZpY2VzLCBtbWRfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaCBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCmluZGV4IDhiYTQ5NzcuLjcwMTRkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCkBAIC03MCwxMCArNzAsMTAgQEAKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX0xCTgkoMSkKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX1dJRFRICSgxKQogCi0vKiBCaXRzIGluIElEIHJlZyAqLwotI2RlZmluZSBNRElPX0lEX1JFVihfaWQzMikJKF9pZDMyICYgMHhmKQotI2RlZmluZSBNRElPX0lEX01PREVMKF9pZDMyKQkoKF9pZDMyID4+IDQpICYgMHgzZikKLSNkZWZpbmUgTURJT19JRF9PVUkoX2lkMzIpCShfaWQzMiA+PiAxMCkKKy8qIEJpdHMgaW4gY29tYmluZWQgSUQgcmVncyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZGlvX2lkX3Jldih1MzIgaWQpIHsgcmV0dXJuIGlkICYgMHhmOyB9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1kaW9faWRfbW9kZWwodTMyIGlkKSB7IHJldHVybiAoaWQgPj4gNCkgJiAweDNmOyB9CitleHRlcm4gdW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKTsKIAogLyogQml0cyBpbiBNTURSRUdfREVWUzAvMS4gU29tZW9uZSB0aG91Z2h0ZnVsbHkgbGF5ZWQgdGhpbmdzIG91dAogICogc28gdGhlICdiaXQgcHJlc2VudCcgYml0IG51bWJlciBvZiBhbiBNTUQgaXMgdGhlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL210ZC5jIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCmluZGV4IDY2NWNhZmIuLjgyMGMyMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbXRkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgRUZYX0RSSVZFUl9OQU1FICJzZmNfbXRkIgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJzcGkuaCIKKyNpbmNsdWRlICJlZnguaCIKIAogI2RlZmluZSBFRlhfU1BJX1ZFUklGWV9CVUZfTEVOIDE2CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IGUwMTlhZDEuLmUxNjllNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMjUsMTUgKzI1LDExIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlICJlbnVtLmgiCiAjaW5jbHVkZSAiYml0ZmllbGQuaCIKIAotI2RlZmluZSBFRlhfTUFYX0xST19ERVNDUklQVE9SUyA4Ci0jZGVmaW5lIEVGWF9NQVhfTFJPX0FHR1IgTUFYX1NLQl9GUkFHUwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBCdWlsZCBkZWZpbml0aW9ucwpAQCAtMzQwLDEzICszMzYsMTIgQEAKICAqIEBldmVudHFfcmVhZF9wdHI6IEV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlcgogICogQGxhc3RfZXZlbnRxX3JlYWRfcHRyOiBMYXN0IGV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlciB2YWx1ZS4KICAqIEBldmVudHFfbWFnaWM6IEV2ZW50IHF1ZXVlIG1hZ2ljIHZhbHVlIGZvciBkcml2ZXItZ2VuZXJhdGVkIHRlc3QgZXZlbnRzCi0gKiBAbHJvX21ncjogTFJPIHN0YXRlCisgKiBAaXJxX2NvdW50OiBOdW1iZXIgb2YgSVJRcyBzaW5jZSBsYXN0IGFkYXB0aXZlIG1vZGVyYXRpb24gZGVjaXNpb24KKyAqIEBpcnFfbW9kX3Njb3JlOiBJUlEgbW9kZXJhdGlvbiBzY29yZQogICogQHJ4X2FsbG9jX2xldmVsOiBXYXRlcm1hcmsgYmFzZWQgaGV1cmlzdGljIGNvdW50ZXIgZm9yIHB1c2hpbmcgZGVzY3JpcHRvcnMKICAqCWFuZCBkaWFnbm9zdGljIGNvdW50ZXJzCiAgKiBAcnhfYWxsb2NfcHVzaF9wYWdlczogUlggYWxsb2NhdGlvbiBtZXRob2QgY3VycmVudGx5IGluIHVzZSBmb3IgcHVzaGluZwogICoJZGVzY3JpcHRvcnMKLSAqIEByeF9hbGxvY19wb3BfcGFnZXM6IFJYIGFsbG9jYXRpb24gbWV0aG9kIGN1cnJlbnRseSBpbiB1c2UgZm9yIHBvcHBpbmcKLSAqCWRlc2NyaXB0b3JzCiAgKiBAbl9yeF90b2JlX2Rpc2M6IENvdW50IG9mIFJYX1RPQkVfRElTQyBlcnJvcnMKICAqIEBuX3J4X2lwX2ZyYWdfZXJyOiBDb3VudCBvZiBSWCBJUCBmcmFnbWVudCBlcnJvcnMKICAqIEBuX3J4X2lwX2hkcl9jaGtzdW1fZXJyOiBDb3VudCBvZiBSWCBJUCBoZWFkZXIgY2hlY2tzdW0gZXJyb3JzCkBAIC0zNzEsMTAgKzM2NiwxMSBAQAogCXVuc2lnbmVkIGludCBsYXN0X2V2ZW50cV9yZWFkX3B0cjsKIAl1bnNpZ25lZCBpbnQgZXZlbnRxX21hZ2ljOwogCi0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CisJdW5zaWduZWQgaW50IGlycV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX21vZF9zY29yZTsKKwogCWludCByeF9hbGxvY19sZXZlbDsKIAlpbnQgcnhfYWxsb2NfcHVzaF9wYWdlczsKLQlpbnQgcnhfYWxsb2NfcG9wX3BhZ2VzOwogCiAJdW5zaWduZWQgbl9yeF90b2JlX2Rpc2M7CiAJdW5zaWduZWQgbl9yeF9pcF9mcmFnX2VycjsKQEAgLTM5NCwxMyArMzkwLDExIEBACiAKIC8qKgogICogc3RydWN0IGVmeF9ibGlua2VyIC0gUy9XIExFRCBibGlua2luZyBjb250ZXh0Ci0gKiBAbGVkX251bTogTEVEIElEIChib2FyZC1zcGVjaWZpYyBtZWFuaW5nKQogICogQHN0YXRlOiBDdXJyZW50IHN0YXRlIC0gb24gb3Igb2ZmCiAgKiBAcmVzdWJtaXQ6IFRpbWVyIHJlc3VibWlzc2lvbiBmbGFnCiAgKiBAdGltZXI6IENvbnRyb2wgdGltZXIgZm9yIGJsaW5raW5nCiAgKi8KIHN0cnVjdCBlZnhfYmxpbmtlciB7Ci0JaW50IGxlZF9udW07CiAJYm9vbCBzdGF0ZTsKIAlib29sIHJlc3VibWl0OwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtNDEzLDggKzQwNyw4IEBACiAgKiBAbWFqb3I6IE1ham9yIHJldi4gKCdBJywgJ0InIC4uLikKICAqIEBtaW5vcjogTWlub3IgcmV2LiAoMCwgMSwgLi4uKQogICogQGluaXQ6IEluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uCi0gKiBAaW5pdF9sZWRzOiBTZXRzIHVwIGJvYXJkIExFRHMKLSAqIEBzZXRfZmF1bHRfbGVkOiBUdXJucyB0aGUgZmF1bHQgTEVEIG9uIG9yIG9mZgorICogQGluaXRfbGVkczogU2V0cyB1cCBib2FyZCBMRURzLiBNYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCisgKiBAc2V0X2lkX2xlZDogVHVybnMgdGhlIGlkZW50aWZpY2F0aW9uIExFRCBvbiBvciBvZmYKICAqIEBibGluazogU3RhcnRzL3N0b3BzIGJsaW5raW5nCiAgKiBAbW9uaXRvcjogQm9hcmQtc3BlY2lmaWMgaGVhbHRoIGNoZWNrIGZ1bmN0aW9uCiAgKiBAZmluaTogQ2xlYW51cCBmdW5jdGlvbgpAQCAtNDMwLDkgKzQyNCw5IEBACiAJLyogQXMgdGhlIExFRHMgYXJlIHR5cGljYWxseSBhdHRhY2hlZCB0byB0aGUgUEhZLCBMRURzCiAJICogaGF2ZSBhIHNlcGFyYXRlIGluaXQgY2FsbGJhY2sgdGhhdCBoYXBwZW5zIGxhdGVyIHRoYW4KIAkgKiBib2FyZCBpbml0LiAqLwotCWludCAoKmluaXRfbGVkcykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKmluaXRfbGVkcykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKnNldF9pZF9sZWQpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKTsKIAlpbnQgKCptb25pdG9yKSAoc3RydWN0IGVmeF9uaWMgKm5pYyk7Ci0Jdm9pZCAoKnNldF9mYXVsdF9sZWQpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKTsKIAl2b2lkICgqYmxpbmspIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXJ0KTsKIAl2b2lkICgqZmluaSkgKHN0cnVjdCBlZnhfbmljICpuaWMpOwogCXN0cnVjdCBlZnhfYmxpbmtlciBibGlua2VyOwpAQCAtNDU5LDYgKzQ1Myw3IEBACiAJUEhZX1RZUEVfUVQyMDIyQzIgPSA0LAogCVBIWV9UWVBFX1BNODM1OCA9IDYsCiAJUEhZX1RZUEVfU0ZUOTAwMUEgPSA4LAorCVBIWV9UWVBFX1FUMjAyNUMgPSA5LAogCVBIWV9UWVBFX1NGVDkwMDFCID0gMTAsCiAJUEhZX1RZUEVfTUFYCS8qIEluc2VydCBhbnkgbmV3IGl0ZW1zIGJlZm9yZSB0aGlzICovCiB9OwpAQCAtNzEzLDYgKzcwOCw4IEBACiAgKiBAbWVtYmFzZTogTWVtb3J5IEJBUiB2YWx1ZQogICogQGJpdV9sb2NrOiBCSVUgKGJ1cyBpbnRlcmZhY2UgdW5pdCkgbG9jawogICogQGludGVycnVwdF9tb2RlOiBJbnRlcnJ1cHQgbW9kZQorICogQGlycV9yeF9hZGFwdGl2ZTogQWRhcHRpdmUgSVJRIG1vZGVyYXRpb24gZW5hYmxlZCBmb3IgUlggZXZlbnQgcXVldWVzCisgKiBAaXJxX3J4X21vZGVyYXRpb246IElSUSBtb2RlcmF0aW9uIHRpbWUgZm9yIFJYIGV2ZW50IHF1ZXVlcwogICogQGkyY19hZGFwOiBJMkMgYWRhcHRlcgogICogQGJvYXJkX2luZm86IEJvYXJkLWxldmVsIGluZm9ybWF0aW9uCiAgKiBAc3RhdGU6IERldmljZSBzdGF0ZSBmbGFnLiBTZXJpYWxpc2VkIGJ5IHRoZSBydG5sX2xvY2suCkBAIC03OTQsNiArNzkxLDggQEAKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CiAJc3BpbmxvY2tfdCBiaXVfbG9jazsKIAllbnVtIGVmeF9pbnRfbW9kZSBpbnRlcnJ1cHRfbW9kZTsKKwlib29sIGlycV9yeF9hZGFwdGl2ZTsKKwl1bnNpZ25lZCBpbnQgaXJxX3J4X21vZGVyYXRpb247CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAJc3RydWN0IGVmeF9ib2FyZCBib2FyZF9pbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3BoeS5oIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCmluZGV4IDA3ZTg1NWMuLmMxY2ZmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvcGh5LmgKQEAgLTE4LDEyICsxOCwxNiBAQAogCiBleHRlcm4gdm9pZCB0ZW54cHJlc3NfcGh5X2JsaW5rKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgYmxpbmspOwogCisvKiBXYWl0IGZvciB0aGUgUEhZIHRvIGJvb3QuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIFBIWSBmYWlsZWQKKyAqIHRvIGJvb3QgZHVlIHRvIGNvcnJ1cHQgZmxhc2gsIG9yIHNvbWUgb3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZS4gKi8KK2V4dGVybiBpbnQgc2Z0OTAwMV93YWl0X2Jvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFeHBvcnRlZCBmdW5jdGlvbnMgZnJvbSB0aGUgZHJpdmVyIGZvciBYRlAgb3B0aWNhbCBQSFlzCisgKiBBTUNDL1F1YWtlIFFUMjB4eCBQSFlzCiAgKi8KIGV4dGVybiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl94ZnBfcGh5X29wczsKIAotLyogVGhlIFFVQUtFIFhGUCBQSFkgcHJvdmlkZXMgdmFyaW91cyBIL1cgY29udHJvbCBzdGF0ZXMgZm9yIExFRHMgKi8KKy8qIFRoZXNlIFBIWXMgcHJvdmlkZSB2YXJpb3VzIEgvVyBjb250cm9sIHN0YXRlcyBmb3IgTEVEcyAqLwogI2RlZmluZSBRVUFLRV9MRURfTElOS19JTlZBTAkoMCkKICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfU1RBVAkoMSkKICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfQUNUCSgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMgYi9kcml2ZXJzL25ldC9zZmMvcnguYwppbmRleCBiOGJhNGJiLi42NmQ3ZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvcnguYwpAQCAtOTksMTA5ICs5OSw2IEBACiB9CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTGludXggZ2VuZXJpYyBMUk8gaGFuZGxpbmcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi1zdGF0aWMgaW50IGVmeF9scm9fZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwX2hkciwKLQkJCSAgICAgICB2b2lkICoqdGNwdWRwX2hkciwgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsID0gcHJpdjsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQlzdHJ1Y3QgdGNwaGRyICp0aDsKLQotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7Ci0JaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApIHx8IGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCWdvdG8gZmFpbDsKLQotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgaXBoLT5paGwgKiA0KTsKLQotCSp0Y3B1ZHBfaGRyID0gdGg7Ci0JKmlwX2hkciA9IGlwaDsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCi0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKLQlyZXR1cm4gMDsKLWZhaWw6Ci0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX1NLQjsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgZWZ4X2dldF9mcmFnX2hkcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqbWFjX2hkciwKLQkJCSAgICB2b2lkICoqaXBfaGRyLCB2b2lkICoqdGNwdWRwX2hkciwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPSBwcml2OwotCXN0cnVjdCBldGhoZHIgKmVoOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCi0JLyogV2Ugc3VwcG9ydCBFdGhlcklJIGFuZCBWTEFOIGVuY2Fwc3VsYXRlZCBJUHY0ICovCi0JZWggPSBwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldDsKLQkqbWFjX2hkciA9IGVoOwotCi0JaWYgKGVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSkgewotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKGVoICsgMSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopZWg7Ci0JCWlmICh2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKQotCQkJZ290byBmYWlsOwotCi0JCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikodmVoICsgMSk7Ci0JfQotCSppcF9oZHIgPSBpcGg7Ci0KLQkvKiBXZSBjYW4gb25seSBkbyBMUk8gb3ZlciBUQ1AgKi8KLQlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKLQkJZ290byBmYWlsOwotCi0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQkqdGNwdWRwX2hkciA9IChzdHJ1Y3QgdGNwaGRyICopKCh1OCAqKSBpcGggKyBpcGgtPmlobCAqIDQpOwotCi0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKLQlyZXR1cm4gMDsKLSBmYWlsOgotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9TS0I7Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQgZWZ4X2xyb19pbml0KHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciwgc3RydWN0IGVmeF9uaWMgKmVmeCkKLXsKLQlzaXplX3QgcyA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIEVGWF9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgKmxyb19hcnI7Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgTFJPIGRlc2NyaXB0b3JzIHN0cnVjdHVyZSAqLwotCWxyb19hcnIgPSBremFsbG9jKHMsIEdGUF9LRVJORUwpOwotCWlmIChscm9fYXJyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHJvX21nci0+bHJvX2FyciA9IGxyb19hcnI7Ci0JbHJvX21nci0+bWF4X2Rlc2MgPSBFRlhfTUFYX0xST19ERVNDUklQVE9SUzsKLQlscm9fbWdyLT5tYXhfYWdnciA9IEVGWF9NQVhfTFJPX0FHR1I7Ci0JbHJvX21nci0+ZnJhZ19hbGlnbl9wYWQgPSBFRlhfUEFHRV9TS0JfQUxJR047Ci0KLQlscm9fbWdyLT5nZXRfc2tiX2hlYWRlciA9IGVmeF9scm9fZ2V0X3NrYl9oZHI7Ci0JbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gZWZ4X2dldF9mcmFnX2hkcjsKLQlscm9fbWdyLT5kZXYgPSBlZngtPm5ldF9kZXY7Ci0KLQlscm9fbWdyLT5mZWF0dXJlcyA9IExST19GX05BUEk7Ci0KLQkvKiBXZSBjYW4gcGFzcyBwYWNrZXRzIHVwIHdpdGggdGhlIGNoZWNrc3VtIGludGFjdCAqLwotCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCi0JbHJvX21nci0+aXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGVmeF9scm9fZmluaShzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpCi17Ci0Ja2ZyZWUobHJvX21nci0+bHJvX2Fycik7Ci0JbHJvX21nci0+bHJvX2FyciA9IE5VTEw7Ci19Ci0KIC8qKgogICogZWZ4X2luaXRfcnhfYnVmZmVyX3NrYiAtIGNyZWF0ZSBuZXcgUlggYnVmZmVyIHVzaW5nIHNrYi1iYXNlZCBhbGxvY2F0aW9uCiAgKgpAQCAtNTQ5LDc3ICs0NDYsMzEgQEAKIHN0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYpCiB7Ci0Jc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyID0gJmNoYW5uZWwtPmxyb19tZ3I7Ci0Jdm9pZCAqcHJpdiA9IGNoYW5uZWw7CisJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJmNoYW5uZWwtPm5hcGlfc3RyOwogCiAJLyogUGFzcyB0aGUgc2tiL3BhZ2UgaW50byB0aGUgTFJPIGVuZ2luZSAqLwogCWlmIChyeF9idWYtPnBhZ2UpIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBmcmFnczsKKwkJc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvIGluZm87CiAKLQkJZnJhZ3MucGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJZnJhZ3MucGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpOwotCQlmcmFncy5zaXplID0gcnhfYnVmLT5sZW47CisJCWluZm8uZnJhZ3NbMF0ucGFnZSA9IHJ4X2J1Zi0+cGFnZTsKKwkJaW5mby5mcmFnc1swXS5wYWdlX29mZnNldCA9IGVmeF9yeF9idWZfb2Zmc2V0KHJ4X2J1Zik7CisJCWluZm8uZnJhZ3NbMF0uc2l6ZSA9IHJ4X2J1Zi0+bGVuOworCQlpbmZvLm5yX2ZyYWdzID0gMTsKKwkJaW5mby5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaW5mby5sZW4gPSByeF9idWYtPmxlbjsKIAotCQlscm9fcmVjZWl2ZV9mcmFncyhscm9fbWdyLCAmZnJhZ3MsIHJ4X2J1Zi0+bGVuLAotCQkJCSAgcnhfYnVmLT5sZW4sIHByaXYsIDApOworCQluYXBpX2dyb19mcmFncyhuYXBpLCAmaW5mbyk7CiAKIAkJRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPnNrYik7CiAJCXJ4X2J1Zi0+cGFnZSA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJRUZYX0JVR19PTl9QQVJBTk9JRCghcnhfYnVmLT5za2IpOwogCi0JCWxyb19yZWNlaXZlX3NrYihscm9fbWdyLCByeF9idWYtPnNrYiwgcHJpdik7CisJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgcnhfYnVmLT5za2IpOwogCQlyeF9idWYtPnNrYiA9IE5VTEw7CiAJfQogfQogCi0vKiBBbGxvY2F0ZSBhbmQgY29uc3RydWN0IGFuIFNLQiBhcm91bmQgYSBzdHJ1Y3QgcGFnZS4qLwotc3RhdGljIHN0cnVjdCBza19idWZmICplZnhfcnhfbWtfc2tiKHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYsCi0JCQkJICAgICBzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAotCQkJCSAgICAgaW50IGhkcl9sZW4pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIEFsbG9jYXRlIGFuIFNLQiB0byBzdG9yZSB0aGUgaGVhZGVycyAqLwotCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZWZ4LT5uZXRfZGV2LCBoZHJfbGVuICsgRUZYX1BBR0VfU0tCX0FMSUdOKTsKLQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCUVGWF9FUlJfUkwoZWZ4LCAiUlggb3V0IG9mIG1lbW9yeSBmb3Igc2tiXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JRUZYX0JVR19PTl9QQVJBTk9JRChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKTsKLQlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+bGVuIDwgaGRyX2xlbik7Ci0KLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCXNrYl9yZXNlcnZlKHNrYiwgRUZYX1BBR0VfU0tCX0FMSUdOKTsKLQotCXNrYi0+bGVuID0gcnhfYnVmLT5sZW47Ci0Jc2tiLT50cnVlc2l6ZSA9IHJ4X2J1Zi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKLQltZW1jcHkoc2tiLT5kYXRhLCByeF9idWYtPmRhdGEsIGhkcl9sZW4pOwotCXNrYi0+dGFpbCArPSBoZHJfbGVuOwotCi0JLyogQXBwZW5kIHRoZSByZW1haW5pbmcgcGFnZSBvbnRvIHRoZSBmcmFnIGxpc3QgKi8KLQlpZiAodW5saWtlbHkocnhfYnVmLT5sZW4gPiBoZHJfbGVuKSkgewotCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKLQkJZnJhZy0+cGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJZnJhZy0+cGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpICsgaGRyX2xlbjsKLQkJZnJhZy0+c2l6ZSA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDE7Ci0JCXNrYi0+ZGF0YV9sZW4gPSBmcmFnLT5zaXplOwotCX0gZWxzZSB7Ci0JCV9fZnJlZV9wYWdlcyhyeF9idWYtPnBhZ2UsIGVmeC0+cnhfYnVmZmVyX29yZGVyKTsKLQkJc2tiLT5kYXRhX2xlbiA9IDA7Ci0JfQotCi0JLyogT3duZXJzaGlwIGhhcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSByeF9idWYgdG8gc2tiICovCi0JcnhfYnVmLT5wYWdlID0gTlVMTDsKLQotCS8qIE1vdmUgcGFzdCB0aGUgZXRoZXJuZXQgaGVhZGVyICovCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZWZ4LT5uZXRfZGV2KTsKLQotCXJldHVybiBza2I7Ci19Ci0KIHZvaWQgZWZ4X3J4X3BhY2tldChzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSwgdW5zaWduZWQgaW50IGluZGV4LAogCQkgICB1bnNpZ25lZCBpbnQgbGVuLCBib29sIGNoZWNrc3VtbWVkLCBib29sIGRpc2NhcmQpCiB7CkBAIC02ODcsNyArNTM4LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCBscm8gPSAhIShlZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pOwogCiAJLyogSWYgd2UncmUgaW4gbG9vcGJhY2sgdGVzdCwgdGhlbiBwYXNzIHRoZSBwYWNrZXQgZGlyZWN0bHkgdG8gdGhlCiAJICogbG9vcGJhY2sgbGF5ZXIsIGFuZCBmcmVlIHRoZSByeF9idWYgaGVyZQpAQCAtNzA5LDQxICs1NTksMjMgQEAKIAkJCQkJCSAgICAgICBlZngtPm5ldF9kZXYpOwogCX0KIAotCS8qIEJvdGggb3VyIGdlbmVyaWMtTFJPIGFuZCBTRkMtU1NSIHN1cHBvcnQgc2tiIGFuZCBwYWdlIGJhc2VkCi0JICogYWxsb2NhdGlvbiwgYnV0IG5laXRoZXIgc3VwcG9ydCBzd2l0Y2hpbmcgZnJvbSBvbmUgdG8gdGhlCi0JICogb3RoZXIgb24gdGhlIGZseS4gSWYgd2Ugc3BvdCB0aGF0IHRoZSBhbGxvY2F0aW9uIG1vZGUgaGFzCi0JICogY2hhbmdlZCwgdGhlbiBmbHVzaCB0aGUgTFJPIHN0YXRlLgotCSAqLwotCWlmICh1bmxpa2VseShjaGFubmVsLT5yeF9hbGxvY19wb3BfcGFnZXMgIT0gKHJ4X2J1Zi0+cGFnZSAhPSBOVUxMKSkpIHsKLQkJZWZ4X2ZsdXNoX2xybyhjaGFubmVsKTsKLQkJY2hhbm5lbC0+cnhfYWxsb2NfcG9wX3BhZ2VzID0gKHJ4X2J1Zi0+cGFnZSAhPSBOVUxMKTsKLQl9Ci0JaWYgKGxpa2VseShjaGVja3N1bW1lZCAmJiBscm8pKSB7CisJaWYgKGxpa2VseShjaGVja3N1bW1lZCB8fCByeF9idWYtPnBhZ2UpKSB7CiAJCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1Zik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQkvKiBGb3JtIGFuIHNrYiBpZiByZXF1aXJlZCAqLwotCWlmIChyeF9idWYtPnBhZ2UpIHsKLQkJaW50IGhkcl9sZW4gPSBtaW4ocnhfYnVmLT5sZW4sIEVGWF9TS0JfSEVBREVSUyk7Ci0JCXNrYiA9IGVmeF9yeF9ta19za2IocnhfYnVmLCBlZngsIGhkcl9sZW4pOwotCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCQllZnhfZnJlZV9yeF9idWZmZXIoZWZ4LCByeF9idWYpOwotCQkJZ290byBkb25lOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogV2Ugbm93IG93biB0aGUgU0tCICovCi0JCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCQlyeF9idWYtPnNrYiA9IE5VTEw7Ci0JfQorCS8qIFdlIG5vdyBvd24gdGhlIFNLQiAqLworCXNrYiA9IHJ4X2J1Zi0+c2tiOworCXJ4X2J1Zi0+c2tiID0gTlVMTDsKIAogCUVGWF9CVUdfT05fUEFSQU5PSUQocnhfYnVmLT5wYWdlKTsKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+c2tiKTsKIAlFRlhfQlVHX09OX1BBUkFOT0lEKCFza2IpOwogCiAJLyogU2V0IHRoZSBTS0IgZmxhZ3MgKi8KLQlpZiAodW5saWtlbHkoIWNoZWNrc3VtbWVkIHx8ICFlZngtPnJ4X2NoZWNrc3VtX2VuYWJsZWQpKQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGNoYW5uZWwtPmNoYW5uZWwpOwogCiAJLyogUGFzcyB0aGUgcGFja2V0IHVwICovCiAJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKQEAgLTc2MCw3ICs1OTIsNyBAQAogCWVudW0gZWZ4X3J4X2FsbG9jX21ldGhvZCBtZXRob2QgPSByeF9hbGxvY19tZXRob2Q7CiAKIAkvKiBPbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBwYWdlIGJhc2VkIGFsbG9jYXRpb24gaWYgTFJPIGlzIGVuYWJsZWQgKi8KLQlpZiAoIShjaGFubmVsLT5lZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJaWYgKCEoY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSkgewogCQltZXRob2QgPSBSWF9BTExPQ19NRVRIT0RfU0tCOwogCX0gZWxzZSBpZiAobWV0aG9kID09IFJYX0FMTE9DX01FVEhPRF9BVVRPKSB7CiAJCS8qIENvbnN0cmFpbiB0aGUgcnhfYWxsb2NfbGV2ZWwgKi8KQEAgLTg2NSwxMSArNjk3LDYgQEAKIAlyeF9xdWV1ZS0+YnVmZmVyID0gTlVMTDsKIH0KIAotdm9pZCBlZnhfZmx1c2hfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlscm9fZmx1c2hfYWxsKCZjaGFubmVsLT5scm9fbWdyKTsKLX0KLQogCiBtb2R1bGVfcGFyYW0ocnhfYWxsb2NfbWV0aG9kLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9hbGxvY19tZXRob2QsICJBbGxvY2F0aW9uIG1ldGhvZCB1c2VkIGZvciBSWCBidWZmZXJzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcnguaCBiL2RyaXZlcnMvbmV0L3NmYy9yeC5oCmluZGV4IDBlODhhOWQuLjQyZWU3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5oCkBAIC0xNyw5ICsxNyw2IEBACiB2b2lkIGVmeF9pbml0X3J4X3F1ZXVlKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIHZvaWQgZWZ4X2ZpbmlfcnhfcXVldWUoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUpOwogCi1pbnQgZWZ4X2xyb19pbml0KHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciwgc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci12b2lkIGVmeF9scm9fZmluaShzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpOwotdm9pZCBlZnhfZmx1c2hfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CiB2b2lkIGVmeF9yeF9zdHJhdGVneShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogdm9pZCBlZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIHZvaWQgZWZ4X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCmluZGV4IGNiMjVhZTUuLjRlYWM1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJlZnguaCIKICNpbmNsdWRlICJwaHkuaCIKQEAgLTM5OCw2ICszOTksNyBAQAogCiBpbnQgc2ZuNDExMXRfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCWludCBpID0gMDsKIAlpbnQgcmM7CiAKIAllZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50ID0KQEAgLTQxNiwxMyArNDE4LDIwIEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfaHdtb247CiAKLQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKLQkJZWZ4X3N0YXRzX2Rpc2FibGUoZWZ4KTsKLQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKLQl9CisJZG8geworCQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKKwkJCS8qIFBIWSBtYXkgbm90IGdlbmVyYXRlIGEgMTU2LjI1IE1IeiBjbG9jayBhbmQgTUFDCisJCQkgKiBzdGF0cyBmZXRjaCB3aWxsIGZhaWwuICovCisJCQllZnhfc3RhdHNfZGlzYWJsZShlZngpOworCQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKKwkJfQorCQlyYyA9IHNmdDkwMDFfd2FpdF9ib290KGVmeCk7CisJCWlmIChyYyA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOworCX0gd2hpbGUgKHJjID09IC1FSU5WQUwgJiYgKytpIDwgMik7CiAKLQlyZXR1cm4gMDsKLQorCWRldmljZV9yZW1vdmVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsICZkZXZfYXR0cl9waHlfZmxhc2hfY2ZnKTsKIGZhaWxfaHdtb246CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGVmeC0+Ym9hcmRfaW5mby5od21vbl9jbGllbnQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwppbmRleCBmMGVmZDI0Li5lNjFkYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCkBAIC04LDYgKzgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiZWZ4LmgiCiAjaW5jbHVkZSAibWRpb18xMGcuaCIKQEAgLTE1NywxNCArMTU4LDE2IEBACiAjZGVmaW5lIFBDU18xMEdCQVNFVF9CTEtMS19XSURUSCAxCiAKIC8qIEJvb3Qgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBDU19CT09UX1NUQVRVU19SRUcJNTMyNDgKLSNkZWZpbmUgUENTX0JPT1RfRkFUQUxfRVJSX0xCTgkoMCkKLSNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfTEJOCSgxKQotI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSAkoMikKLSNkZWZpbmUgUENTX0JPT1RfQ09NUExFVEVfTEJOCSgzKQotCi0jZGVmaW5lIFBDU19CT09UX01BWF9ERUxBWQkoMTAwKQotI2RlZmluZSBQQ1NfQk9PVF9QT0xMX0RFTEFZCSgxMCkKKyNkZWZpbmUgUENTX0JPT1RfU1RBVFVTX1JFRwkJNTMyNDgKKyNkZWZpbmUgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOCTAKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfTEJOCQkxCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX1dJRFRICQkyCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0lOSVQJCTAKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfV0FJVF9NRElPCTEKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfQ0hFQ0tTVU0JMgorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19KVU1QCQkzCisjZGVmaW5lIFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOCTMKKyNkZWZpbmUgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTgk0CiAKIC8qIDEwME0vMUcgUEhZIHJlZ2lzdGVycyAqLwogI2RlZmluZSBHUEhZX1hDT05UUk9MX1JFRwk0OTE1MgpAQCAtMjI5LDQwICsyMzIsNjIgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwaHlfc2hvcnRfcmVhY2gsIDA2NDQsIHNob3dfcGh5X3Nob3J0X3JlYWNoLAogCQkgICBzZXRfcGh5X3Nob3J0X3JlYWNoKTsKIAotLyogQ2hlY2sgdGhhdCB0aGUgQzE2NiBoYXMgYm9vdGVkIHN1Y2Nlc3NmdWxseSAqLwotc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2NoZWNrKHN0cnVjdCBlZnhfbmljICplZngpCitpbnQgc2Z0OTAwMV93YWl0X2Jvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlpbnQgcGh5X2lkID0gZWZ4LT5taWkucGh5X2lkOwotCWludCBjb3VudCA9IFBDU19CT09UX01BWF9ERUxBWSAvIFBDU19CT09UX1BPTExfREVMQVk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaICsgMTsKIAlpbnQgYm9vdF9zdGF0OwogCi0JLyogV2FpdCBmb3IgdGhlIGJvb3QgdG8gY29tcGxldGUgKG9yIG5vdCkgKi8KLQl3aGlsZSAoY291bnQpIHsKLQkJYm9vdF9zdGF0ID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLAorCWZvciAoOzspIHsKKwkJYm9vdF9zdGF0ID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAogCQkJCQkgICAgICAgTURJT19NTURfUENTLAogCQkJCQkgICAgICAgUENTX0JPT1RfU1RBVFVTX1JFRyk7Ci0JCWlmIChib290X3N0YXQgJiAoMSA8PCBQQ1NfQk9PVF9DT01QTEVURV9MQk4pKQotCQkJYnJlYWs7Ci0JCWNvdW50LS07Ci0JCXVkZWxheShQQ1NfQk9PVF9QT0xMX0RFTEFZKTsKLQl9CisJCWlmIChib290X3N0YXQgPj0gMCkgeworCQkJRUZYX0xPRyhlZngsICJQSFkgYm9vdCBzdGF0dXMgPSAlI3hcbiIsIGJvb3Rfc3RhdCk7CisJCQlzd2l0Y2ggKGJvb3Rfc3RhdCAmCisJCQkJKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAorCQkJCSAoMyA8PCBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCQkgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pIHwKKwkJCQkgKDEgPDwgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTikpKSB7CisJCQljYXNlICgoMSA8PCBQQ1NfQk9PVF9GQVRBTF9FUlJPUl9MQk4pIHwKKwkJCSAgICAgIChQQ1NfQk9PVF9QUk9HUkVTU19DSEVDS1NVTSA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikpOgorCQkJY2FzZSAoKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSB8CisJCQkgICAgICAoUENTX0JPT1RfUFJPR1JFU1NfSU5JVCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pKToKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNhc2UgKChQQ1NfQk9PVF9QUk9HUkVTU19XQUlUX01ESU8gPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSk6CisJCQkJcmV0dXJuIChlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkgPworCQkJCQkwIDogLUVJTzsKKwkJCWNhc2UgKChQQ1NfQk9PVF9QUk9HUkVTU19KVU1QIDw8CisJCQkgICAgICAgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9DT0RFX1NUQVJURURfTEJOKSk6CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfSlVNUCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4pKToKKwkJCQlyZXR1cm4gKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSA/CisJCQkJCS1FSU8gOiAwOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoYm9vdF9zdGF0ICYgKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSkKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAotCWlmICghY291bnQpIHsKLQkJRUZYX0VSUihlZngsICIlczogUEhZIGJvb3QgdGltZWQgb3V0LiBMYXN0IHN0YXR1cyAiCi0JCQkiJXhcbiIsIF9fZnVuY19fLAotCQkJKGJvb3Rfc3RhdCA+PiBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pICYKLQkJCSgoMSA8PCBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSCkgLSAxKSk7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAotCXJldHVybiAwOworCQltc2xlZXAoNTApOworCX0KIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3NfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7CiAJaW50IHJlZzsKLQlpbnQgcmM7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CiAJCS8qIEVuYWJsZSAzMTIuNSBNSHogY2xvY2sgKi8KQEAgLTI4NSwxMCArMzEwLDYgQEAKIAkJCQkgICAgICAgZmFsc2UpOwogCX0KIAotCXJjID0gdGVueHByZXNzX3BoeV9jaGVjayhlZngpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQogCS8qIFNldCB0aGUgTEVEcyB1cCBhczogR3JlZW4gPSBMaW5rLCBBbWJlciA9IExpbmsvQWN0LCBSZWQgPSBPZmYgKi8KIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CiAJCW1kaW9fY2xhdXNlNDVfc2V0X2ZsYWcoZWZ4LCBwaHlfaWQsIE1ESU9fTU1EX1BNQVBNRCwKQEAgLTI5OSw3ICszMjAsNyBAQAogCQkJCSAgICBQTUFfUE1EX0xFRF9PVkVSUl9SRUcsIFBNQV9QTURfTEVEX0RFRkFVTFQpOwogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU3MSwxNSArNTkyLDE0IEBACiBzdGF0aWMgdm9pZCB0ZW54cHJlc3NfcGh5X3BvbGwoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgdGVueHByZXNzX3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7Ci0JYm9vbCBjaGFuZ2UgPSBmYWxzZSwgbGlua19vazsKLQl1bnNpZ25lZCBsaW5rX2ZjOworCWJvb2wgY2hhbmdlID0gZmFsc2U7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7Ci0JCWxpbmtfb2sgPSBzZng3MTAxX2xpbmtfb2soZWZ4KTsKKwkJYm9vbCBsaW5rX29rID0gc2Z4NzEwMV9saW5rX29rKGVmeCk7CiAJCWlmIChsaW5rX29rICE9IGVmeC0+bGlua191cCkgewogCQkJY2hhbmdlID0gdHJ1ZTsKIAkJfSBlbHNlIHsKLQkJCWxpbmtfZmMgPSBtZGlvX2NsYXVzZTQ1X2dldF9wYXVzZShlZngpOworCQkJdW5zaWduZWQgaW50IGxpbmtfZmMgPSBtZGlvX2NsYXVzZTQ1X2dldF9wYXVzZShlZngpOwogCQkJaWYgKGxpbmtfZmMgIT0gZWZ4LT5saW5rX2ZjKQogCQkJCWNoYW5nZSA9IHRydWU7CiAJCX0KQEAgLTY3OSwxMiArNjk5LDEwIEBACiB7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CiAJaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKLQlpbnQgcmMgPSAwLCByYzIsIGksIHJlc19yZWc7CisJaW50IHJjID0gMCwgcmMyLCBpLCBjdHJsX3JlZywgcmVzX3JlZzsKIAotCWlmICghKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkpCi0JCXJldHVybiAwOwotCi0JZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZlY21kKTsKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKQorCQllZngtPnBoeV9vcC0+Z2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOwogCiAJLyogSW5pdGlhbGlzZSBjYWJsZSBkaWFnbm9zdGljIHJlc3VsdHMgdG8gdW5rbm93biBmYWlsdXJlICovCiAJZm9yIChpID0gMTsgaSA8IDk7ICsraSkKQEAgLTY5MiwxOCArNzEwLDIyIEBACiAKIAkvKiBSdW4gY2FibGUgZGlhZ25vc3RpY3M7IHdhaXQgdXAgdG8gNSBzZWNvbmRzIGZvciB0aGVtIHRvIGNvbXBsZXRlLgogCSAqIEEgY2FibGUgZmF1bHQgaXMgbm90IGEgc2VsZi10ZXN0IGZhaWx1cmUsIGJ1dCBhIHRpbWVvdXQgaXMuICovCisJY3RybF9yZWcgPSAoKDEgPDwgQ0RJQUdfQ1RSTF9JTU1FRF9MQk4pIHwKKwkJICAgIChDRElBR19DVFJMX0xFTl9NRVRSRVMgPDwgQ0RJQUdfQ1RSTF9MRU5fVU5JVF9MQk4pKTsKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIEJyZWFrIHRoZSBsaW5rIGluIG9yZGVyIHRvIHJ1biBmdWxsIGRpYWdub3N0aWNzLiAgV2UKKwkJICogbXVzdCByZXNldCB0aGUgUEhZIHRvIHJlc3VtZSBub3JtYWwgc2VydmljZS4gKi8KKwkJY3RybF9yZWcgfD0gKDEgPDwgQ0RJQUdfQ1RSTF9CUktfTElOS19MQk4pOworCX0KIAltZGlvX2NsYXVzZTQ1X3dyaXRlKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCi0JCQkgICAgUE1BX1BNRF9DRElBR19DVFJMX1JFRywKLQkJCSAgICAoMSA8PCBDRElBR19DVFJMX0lNTUVEX0xCTikgfAotCQkJICAgICgxIDw8IENESUFHX0NUUkxfQlJLX0xJTktfTEJOKSB8Ci0JCQkgICAgKENESUFHX0NUUkxfTEVOX01FVFJFUyA8PCBDRElBR19DVFJMX0xFTl9VTklUX0xCTikpOworCQkJICAgIFBNQV9QTURfQ0RJQUdfQ1RSTF9SRUcsIGN0cmxfcmVnKTsKIAlpID0gMDsKIAl3aGlsZSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCiAJCQkJICBQTUFfUE1EX0NESUFHX0NUUkxfUkVHKSAmCiAJICAgICAgICgxIDw8IENESUFHX0NUUkxfSU5fUFJPR19MQk4pKSB7CiAJCWlmICgrK2kgPT0gNTApIHsKIAkJCXJjID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gcmVzZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCQltc2xlZXAoMTAwKTsKIAl9CkBAIC03MjgsMTcgKzc1MCwxOCBAQAogCQkJcmVzdWx0c1s1ICsgaV0gPSBsZW5fcmVnOwogCX0KIAotCS8qIFdlIG11c3QgcmVzZXQgdG8gZXhpdCBjYWJsZSBkaWFnbm9zdGljIG1vZGUuICBUaGUgQklTVCB3aWxsCi0JICogYWxzbyBydW4gd2hlbiB3ZSBkbyB0aGlzLiAqLwotcmVzZXQ6Ci0JcmMyID0gdGVueHByZXNzX3NwZWNpYWxfcmVzZXQoZWZ4KTsKLQlyZXN1bHRzWzBdID0gcmMyID8gLTEgOiAxOwotCWlmICghcmMpCi0JCXJjID0gcmMyOworb3V0OgorCWlmIChmbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKKwkJLyogUmVzZXQsIHJ1bm5pbmcgdGhlIEJJU1QgYW5kIHRoZW4gcmVzdW1pbmcgbm9ybWFsIHNlcnZpY2UuICovCisJCXJjMiA9IHRlbnhwcmVzc19zcGVjaWFsX3Jlc2V0KGVmeCk7CisJCXJlc3VsdHNbMF0gPSByYzIgPyAtMSA6IDE7CisJCWlmICghcmMpCisJCQlyYyA9IHJjMjsKIAotCXJjMiA9IGVmeC0+cGh5X29wLT5zZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7Ci0JaWYgKCFyYykKLQkJcmMgPSByYzI7CisJCXJjMiA9IGVmeC0+cGh5X29wLT5zZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7CisJCWlmICghcmMpCisJCQlyYyA9IHJjMjsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHguYyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCmluZGV4IGRhM2U5ZmYuLmQ2NjgxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCkBAIC0xNjIsNiArMTYyLDE0IEBACiAJLyogR2V0IHNpemUgb2YgdGhlIGluaXRpYWwgZnJhZ21lbnQgKi8KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCisJLyogUGFkIGlmIG5lY2Vzc2FyeSAqLworCWlmIChFRlhfV09SS0FST1VORF8xNTU5MihlZngpICYmIHNrYi0+bGVuIDw9IDMyKSB7CisJCUVGWF9CVUdfT05fUEFSQU5PSUQoc2tiLT5kYXRhX2xlbik7CisJCWxlbiA9IDMyICsgMTsKKwkJaWYgKHNrYl9wYWQoc2tiLCBsZW4gLSBza2ItPmxlbikpCisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKwogCWZpbGxfbGV2ZWwgPSB0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50IC0gdHhfcXVldWUtPm9sZF9yZWFkX2NvdW50OwogCXFfc3BhY2UgPSBlZngtPnR5cGUtPnR4ZF9yaW5nX21hc2sgLSAxIC0gZmlsbF9sZXZlbDsKIApAQCAtMzc2LDYgKzM4NCw5IEBACiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwogCisJaWYgKHVubGlrZWx5KGVmeC0+cG9ydF9pbmhpYml0ZWQpKQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKIAlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQogCQl0eF9xdWV1ZSA9ICZlZngtPnR4X3F1ZXVlW0VGWF9UWF9RVUVVRV9PRkZMT0FEX0NTVU1dOwogCWVsc2UKQEAgLTM5Nyw3ICs0MDgsNyBAQAogCSAqIHNlcGFyYXRlcyB0aGUgdXBkYXRlIG9mIHJlYWRfY291bnQgZnJvbSB0aGUgdGVzdCBvZgogCSAqIHN0b3BwZWQuICovCiAJc21wX21iKCk7Ci0JaWYgKHVubGlrZWx5KHR4X3F1ZXVlLT5zdG9wcGVkKSkgeworCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkgJiYgbGlrZWx5KGVmeC0+cG9ydF9lbmFibGVkKSkgewogCQlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50OwogCQlpZiAoZmlsbF9sZXZlbCA8IEVGWF9ORVRERVZfVFhfVEhSRVNIT0xEKHR4X3F1ZXVlKSkgewogCQkJRUZYX0JVR19PTl9QQVJBTk9JRCghZWZ4X2Rldl9yZWdpc3RlcmVkKGVmeCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmggYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAppbmRleCA3OGRlNjhmLi5jODIxYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaApAQCAtMzYsNiArMzYsOCBAQAogI2RlZmluZSBFRlhfV09SS0FST1VORF8xMTQ4MiBFRlhfV09SS0FST1VORF9BTFdBWVMKIC8qIEZsdXNoIGV2ZW50cyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIHRvIGFwcGVhciAqLwogI2RlZmluZSBFRlhfV09SS0FST1VORF8xMTU1NyBFRlhfV09SS0FST1VORF9BTFdBWVMKKy8qIFRydW5jYXRlZCBJUHY0IHBhY2tldHMgY2FuIGNvbmZ1c2UgdGhlIFRYIHBhY2tldCBwYXJzZXIgKi8KKyNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTU1OTIgRUZYX1dPUktBUk9VTkRfQUxXQVlTCiAKIC8qIFNwdXJpb3VzIHBhcml0eSBlcnJvcnMgaW4gVFNPUlQgYnVmZmVycyAqLwogI2RlZmluZSBFRlhfV09SS0FST1VORF81MTI5IEVGWF9XT1JLQVJPVU5EX0ZBTENPTl9BCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYwppbmRleCAyZDUwYjZlLi5iYjFlZjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKQEAgLTcsOCArNyw4IEBACiAgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqLwogLyoKLSAqIERyaXZlciBmb3IgWEZQIG9wdGljYWwgUEhZcyAocGx1cyBzb21lIHN1cHBvcnQgc3BlY2lmaWMgdG8gdGhlIFF1YWtlIDIwMjIvMzIpCi0gKiBTZWUgd3d3LmFtY2MuY29tIGZvciBkZXRhaWxzIChzZWFyY2ggZm9yIHF0MjAzMikKKyAqIERyaXZlciBmb3IgU0ZQKyBhbmQgWEZQIG9wdGljYWwgUEhZcyBwbHVzIHNvbWUgc3VwcG9ydCBzcGVjaWZpYyB0byB0aGUKKyAqIEFNQ0MgUVQyMHh4IGFkYXB0ZXJzOyBzZWUgd3d3LmFtY2MuY29tIGZvciBkZXRhaWxzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0zMSw2ICszMSwyMSBAQAogLyogUXVha2Utc3BlY2lmaWMgTURJTyByZWdpc3RlcnMgKi8KICNkZWZpbmUgTURJT19RVUFLRV9MRUQwX1JFRwkoMHhEMDA2KQogCisvKiBRVDIwMjVDIG9ubHkgKi8KKyNkZWZpbmUgUENTX0ZXX0hFQVJUQkVBVF9SRUcJMHhkN2VlCisjZGVmaW5lIFBDU19GV19IRUFSVEJfTEJOCTAKKyNkZWZpbmUgUENTX0ZXX0hFQVJUQl9XSURUSAk4CisjZGVmaW5lIFBDU19VQzgwNTFfU1RBVFVTX1JFRwkweGQ3ZmQKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19MQk4JMAorI2RlZmluZSBQQ1NfVUNfU1RBVFVTX1dJRFRICTgKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19GV19TQVZFCTB4MjAKKyNkZWZpbmUgUE1BX1BNRF9GVFhfQ1RSTDJfUkVHCTB4YzMwOQorI2RlZmluZSBQTUFfUE1EX0ZUWF9TVEFUSUNfTEJOCTEzCisjZGVmaW5lIFBNQV9QTURfVkVORDFfUkVHCTB4YzAwMQorI2RlZmluZSBQTUFfUE1EX1ZFTkQxX0xCVFhEX0xCTgkxNQorI2RlZmluZSBQQ1NfVkVORDFfUkVHCSAgIAkweGMwMDAKKyNkZWZpbmUgUENTX1ZFTkQxX0xCVFhEX0xCTgk1CisKIHZvaWQgeGZwX3NldF9sZWQoc3RydWN0IGVmeF9uaWMgKnAsIGludCBsZWQsIGludCBtb2RlKQogewogCWludCBhZGRyID0gTURJT19RVUFLRV9MRUQwX1JFRyArIGxlZDsKQEAgLTQ1LDcgKzYwLDQ5IEBACiAjZGVmaW5lIFhGUF9NQVhfUkVTRVRfVElNRSA1MDAKICNkZWZpbmUgWEZQX1JFU0VUX1dBSVQgMTAKIAotLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWSkgYXMgZG9pbmcKK3N0YXRpYyBpbnQgcXQyMDI1Y193YWl0X3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFo7CisJaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKKwlpbnQgcmVnLCBvbGRfY291bnRlciA9IDA7CisKKwkvKiBXYWl0IGZvciBmaXJtd2FyZSBoZWFydGJlYXQgdG8gc3RhcnQgKi8KKwlmb3IgKDs7KSB7CisJCWludCBjb3VudGVyOworCQlyZWcgPSBtZGlvX2NsYXVzZTQ1X3JlYWQoZWZ4LCBwaHlfaWQsIE1ESU9fTU1EX1BDUywKKwkJCQkJIFBDU19GV19IRUFSVEJFQVRfUkVHKTsKKwkJaWYgKHJlZyA8IDApCisJCQlyZXR1cm4gcmVnOworCQljb3VudGVyID0gKChyZWcgPj4gUENTX0ZXX0hFQVJUQl9MQk4pICYKKwkJCSAgICAoKDEgPDwgUENTX0ZXX0hFQVJUQl9XSURUSCkgLSAxKSk7CisJCWlmIChvbGRfY291bnRlciA9PSAwKQorCQkJb2xkX2NvdW50ZXIgPSBjb3VudGVyOworCQllbHNlIGlmIChjb3VudGVyICE9IG9sZF9jb3VudGVyKQorCQkJYnJlYWs7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCW1zbGVlcCgxMCk7CisJfQorCisJLyogV2FpdCBmb3IgZmlybXdhcmUgc3RhdHVzIHRvIGxvb2sgZ29vZCAqLworCWZvciAoOzspIHsKKwkJcmVnID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QQ1MsCisJCQkJCSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcpOworCQlpZiAocmVnIDwgMCkKKwkJCXJldHVybiByZWc7CisJCWlmICgocmVnICYKKwkJICAgICAoKDEgPDwgUENTX1VDX1NUQVRVU19XSURUSCkgLSAxKSA8PCBQQ1NfVUNfU1RBVFVTX0xCTikgPj0KKwkJICAgIFBDU19VQ19TVEFUVVNfRldfU0FWRSkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMTAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWXMpIGFzIGRvaW5nCiAgKiBhIGNvbXBsZXRlIHNvZnQgcmVzZXQuCiAgKi8KIHN0YXRpYyBpbnQgeGZwX3Jlc2V0X3BoeShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNTgsNiArMTE1LDEyIEBACiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwogCisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQlyYyA9IHF0MjAyNWNfd2FpdF9yZXNldChlZngpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBmYWlsOworCX0KKwogCS8qIFdhaXQgMjUwbXMgZm9yIHRoZSBQSFkgdG8gY29tcGxldGUgYm9vdHVwICovCiAJbXNsZWVwKDI1MCk7CiAKQEAgLTczLDcgKzEzNiw3IEBACiAJcmV0dXJuIHJjOwogCiAgZmFpbDoKLQlFRlhfRVJSKGVmeCwgIlhGUDogcmVzZXQgdGltZWQgb3V0IVxuIik7CisJRUZYX0VSUihlZngsICJQSFkgcmVzZXQgdGltZWQgb3V0XG4iKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTg4LDE1ICsxNTEsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOwogCi0JRUZYX0lORk8oZWZ4LCAiWEZQOiBQSFkgSUQgcmVnICV4IChPVUkgJXggbW9kZWwgJXggcmV2aXNpb24iCi0JCSAiICV4KVxuIiwgZGV2aWQsIE1ESU9fSURfT1VJKGRldmlkKSwgTURJT19JRF9NT0RFTChkZXZpZCksCi0JCSBNRElPX0lEX1JFVihkZXZpZCkpOworCUVGWF9JTkZPKGVmeCwgIlBIWSBJRCByZWcgJXggKE9VSSAlMDZ4IG1vZGVsICUwMnggcmV2aXNpb24gJXgpXG4iLAorCQkgZGV2aWQsIG1kaW9faWRfb3VpKGRldmlkKSwgbWRpb19pZF9tb2RlbChkZXZpZCksCisJCSBtZGlvX2lkX3JldihkZXZpZCkpOwogCiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKIAogCXJjID0geGZwX3Jlc2V0X3BoeShlZngpOwogCi0JRUZYX0lORk8oZWZ4LCAiWEZQOiBQSFkgaW5pdCAlcy5cbiIsCisJRUZYX0lORk8oZWZ4LCAiUEhZIGluaXQgJXMuXG4iLAogCQkgcmMgPyAiZmFpbGVkIiA6ICJzdWNjZXNzZnVsIik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwpAQCAtMTMxLDEyICsxOTQsMjggQEAKIHsKIAlzdHJ1Y3QgeGZwX3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7CiAKLQkvKiBSZXNldCB0aGUgUEhZIHdoZW4gbW92aW5nIGZyb20gdHggb2ZmIHRvIHR4IG9uICovCi0JaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSAmJgotCSAgICAocGh5X2RhdGEtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpKQotCQl4ZnBfcmVzZXRfcGh5KGVmeCk7CisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgcmVnaXN0ZXIgYml0cyB3aGljaCBjYW4KKwkJICogZGlzYWJsZSBUWCAoYW5kIHNhdmUgcG93ZXIpIG9uIGRpcmVjdC1hdHRhY2ggY2FibGVzCisJCSAqIG9yIG9wdGljYWwgdHJhbnNjZWl2ZXJzLCB2YXJ5aW5nIHNvbWV3aGF0IGJldHdlZW4KKwkJICogZmlybXdhcmUgdmVyc2lvbnMuICBPbmx5ICdzdGF0aWMgbW9kZScgYXBwZWFycyB0bworCQkgKiBjb3ZlciBldmVyeXRoaW5nLiAqLworCQltZGlvX2NsYXVzZTQ1X3NldF9mbGFnKAorCQkJZWZ4LCBlZngtPm1paS5waHlfaWQsIE1ESU9fTU1EX1BNQVBNRCwKKwkJCVBNQV9QTURfRlRYX0NUUkwyX1JFRywgUE1BX1BNRF9GVFhfU1RBVElDX0xCTiwKKwkJCWVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9UWF9ESVNBQkxFRCB8fAorCQkJZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX0xPV19QT1dFUiB8fAorCQkJZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BDUyB8fAorCQkJZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BNQVBNRCk7CisJfSBlbHNlIHsKKwkJLyogUmVzZXQgdGhlIFBIWSB3aGVuIG1vdmluZyBmcm9tIHR4IG9mZiB0byB0eCBvbiAqLworCQlpZiAoIShlZngtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpICYmCisJCSAgICAocGh5X2RhdGEtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpKQorCQkJeGZwX3Jlc2V0X3BoeShlZngpOwogCi0JbWRpb19jbGF1c2U0NV90cmFuc21pdF9kaXNhYmxlKGVmeCk7CisJCW1kaW9fY2xhdXNlNDVfdHJhbnNtaXRfZGlzYWJsZShlZngpOworCX0KKwogCW1kaW9fY2xhdXNlNDVfcGh5X3JlY29uZmlndXJlKGVmeCk7CiAKIAlwaHlfZGF0YS0+cGh5X21vZGUgPSBlZngtPnBoeV9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCA3ZjhlNTE0Li43YjE4ODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtNjg3LDYgKzY4Nyw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZXRkZXY7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKIAl1MzIgaW9hZGRyLCBib2d1c2NudCA9IFJYX1JJTkdfU0laRTsKIAl1MzIgaW50cl9zdGF0dXMgPSAwOwogCkBAIC02OTYsNyArNjk3LDEzIEBACiAJLyogR2V0IGludGVycnB0IHN0YXQgKi8KIAlpbnRyX3N0YXR1cyA9IGN0cmxfaW5sKGlvYWRkciArIEVFU1IpOwogCS8qIENsZWFyIGludGVycnVwdCAqLwotCWN0cmxfb3V0bChpbnRyX3N0YXR1cywgaW9hZGRyICsgRUVTUik7CisJaWYgKGludHJfc3RhdHVzICYgKEVFU1JfRlJDIHwgRUVTUl9STUFGIHwgRUVTUl9SUkYgfAorCQkJRUVTUl9SVExGIHwgRUVTUl9SVFNGIHwgRUVTUl9QUkUgfCBFRVNSX0NFUkYgfAorCQkJVFhfQ0hFQ0sgfCBFRVNSX0VSUl9DSEVDSykpIHsKKwkJY3RybF9vdXRsKGludHJfc3RhdHVzLCBpb2FkZHIgKyBFRVNSKTsKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJfSBlbHNlCisJCWdvdG8gb3RoZXJfaXJxOwogCiAJaWYgKGludHJfc3RhdHVzICYgKEVFU1JfRlJDIHwgLyogRnJhbWUgcmVjdiovCiAJCQlFRVNSX1JNQUYgfCAvKiBNdWx0aSBjYXN0IGFkZHJlc3MgcmVjdiovCkBAIC03MjMsOSArNzMwLDEwIEBACiAJCSAgICAgICBuZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CiAJfQogCitvdGhlcl9pcnE6CiAJc3Bpbl91bmxvY2soJm1kcC0+bG9jayk7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc2hfZXRoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTg0NCw3ICs4NTIsMTMgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEobmRldi0+aXJxLCAmc2hfZXRoX2ludGVycnVwdCwgMCwgbmRldi0+bmFtZSwgbmRldik7CisJcmV0ID0gcmVxdWVzdF9pcnEobmRldi0+aXJxLCAmc2hfZXRoX2ludGVycnVwdCwKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKKwkJCQlJUlFGX1NIQVJFRCwKKyNlbHNlCisJCQkJMCwKKyNlbmRpZgorCQkJCW5kZXYtPm5hbWUsIG5kZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW4gbm90IGFzc2lnbiBJUlEgbnVtYmVyIHRvICVzXG4iLCBDQVJETkFNRSk7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguaCBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCmluZGV4IDczYmM3MTguLjE1MzdlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCkBAIC00Myw4ICs0Myw4IEBACiAKICNkZWZpbmUgU0g3NzYzX1NLQl9BTElHTiAzMgogLyogQ2hpcCBCYXNlIEFkZHJlc3MgKi8KLSMgZGVmaW5lIFNIX1RTVV9BRERSICAweEZGRTAxODAwCi0jIGRlZmluZSBBUlNUUiAJCSAgMHhGRkUwMTgwMAorIyBkZWZpbmUgU0hfVFNVX0FERFIJMHhGRUUwMTgwMAorIyBkZWZpbmUgQVJTVFIJCQlTSF9UU1VfQUREUgogCiAvKiBDaGlwIFJlZ2lzdGVycyAqLwogLyogRS1ETUFDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IGJlNDQ2NWJjLi44YTcwZGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtODAsOCArODAsOCBAQAogI2RlZmluZSBTSVM5MDBfTU9EVUxFX05BTUUgInNpczkwMCIKICNkZWZpbmUgU0lTOTAwX0RSVl9WRVJTSU9OICJ2MS4wOC4xMCBBcHIuIDIgMjAwNiIKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPICJzaXM5MDAuYzogIiBTSVM5MDBfRFJWX1ZFUlNJT04gIlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPICJzaXM5MDAuYzogIiBTSVM5MDBfRFJWX1ZFUlNJT04gIlxuIjsKIAogc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSA0MDsKIHN0YXRpYyBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDEyODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaAppbmRleCA5NDMyNTkxLi4xNzU4ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCkBAIC00NjcsNSArNDY3LDIyIEBACiAjZW5kaWYJLyogREVCVUdfQlJEICYmIERFQlVHICovCiB9IDsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmZGRpX2FkZHIgZmRkaV9icm9hZGNhc3Q7CisKK2V4dGVybiB2b2lkIGFsbF9zZWxlY3Rpb25fY3JpdGVyaWEoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIHZvaWQgY2FyZF9zdG9wKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIGluaXRfYm9hcmQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqbWFjX2FkZHIpOworZXh0ZXJuIGludCBpbml0X2ZwbHVzKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIGluaXRfcGxjKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiBpbnQgaW5pdF9zbXQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqIG1hY19hZGRyKTsKK2V4dGVybiB2b2lkIG1hYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IHN0dSwgdV9zaG9ydCBzdGwpOworZXh0ZXJuIHZvaWQgbWFjMl9pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgY29kZV9zMnUsIHVfc2hvcnQgY29kZV9zMmwpOworZXh0ZXJuIHZvaWQgbWFjM19pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgY29kZV9zM3UsIHVfc2hvcnQgY29kZV9zM2wpOworZXh0ZXJuIGludCBwY21fc3RhdHVzX3R3aXN0ZWQoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIHZvaWQgcGxjMV9pcnEoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIHZvaWQgcGxjMl9pcnEoc3RydWN0IHNfc21jICpzbWMpOworZXh0ZXJuIHZvaWQgcmVhZF9hZGRyZXNzKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CitleHRlcm4gdm9pZCB0aW1lcl9pcnEoc3RydWN0IHNfc21jICpzbWMpOworCiAjZW5kaWYJLyogX1NDTUVDTV8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9od210bS5jIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCmluZGV4IDQyMThlOTcuLmQzMjJmMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYworKysgYi9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKQEAgLTk3LDIzICs5NywxNSBAQAogCiBleHRlcm4gdm9pZCogbWFjX2Rydl9nZXRfc3BhY2Uoc3RydWN0IHNfc21jICpzbWMsIHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkKiBtYWNfZHJ2X2dldF9kZXNjX21lbShzdHJ1Y3Qgc19zbWMgKnNtYywgdW5zaWduZWQgaW50IHNpemUpOwotZXh0ZXJuIHZvaWQgaW5pdF9ib2FyZChzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICptYWNfYWRkcik7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X2ZpbGxfcnhkKHN0cnVjdCBzX3NtYyAqc21jKTsKLWV4dGVybiB2b2lkIHBsYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIG1hY19kcnZfdHhfY29tcGxldGUoc3RydWN0IHNfc21jICpzbWMsCiAJCQkJdm9sYXRpbGUgc3RydWN0IHNfc210X2ZwX3R4ZCAqdHhkKTsKLWV4dGVybiB2b2lkIHBsYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKLWV4dGVybiB2b2lkIG1hYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IHN0dSwgdV9zaG9ydCBzdGwpOwotZXh0ZXJuIHZvaWQgbWFjMl9pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgY29kZV9zMnUsIHVfc2hvcnQgY29kZV9zMmwpOwotZXh0ZXJuIHZvaWQgbWFjM19pcnEoc3RydWN0IHNfc21jICpzbWMsIHVfc2hvcnQgY29kZV9zM3UsIHVfc2hvcnQgY29kZV9zM2wpOwotZXh0ZXJuIHZvaWQgdGltZXJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIG1hY19kcnZfcnhfY29tcGxldGUoc3RydWN0IHNfc21jICpzbWMsCiAJCQkJdm9sYXRpbGUgc3RydWN0IHNfc210X2ZwX3J4ZCAqcnhkLAogCQkJCWludCBmcmFnX2NvdW50LCBpbnQgbGVuKTsKIGV4dGVybiB2b2lkIG1hY19kcnZfcmVxdWV1ZV9yeGQoc3RydWN0IHNfc21jICpzbWMsIAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF9yeGQgKnJ4ZCwKIAkJCQlpbnQgZnJhZ19jb3VudCk7Ci1leHRlcm4gdm9pZCBpbml0X3BsYyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X2NsZWFyX3J4ZChzdHJ1Y3Qgc19zbWMgKnNtYywKIAkJCSAgICAgIHZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF9yeGQgKnJ4ZCwgaW50IGZyYWdfY291bnQpOwogCkBAIC0xMzYsNyArMTI4LDYgQEAKIAkJCSBpbnQgZmxhZyk7CiAjZW5kaWYKIAotZXh0ZXJuIGludCBpbml0X2ZwbHVzKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiBpbnQgbWFjX2Rydl9yeF9pbml0KHN0cnVjdCBzX3NtYyAqc21jLCBpbnQgbGVuLCBpbnQgZmMsIGNoYXIgKmxvb2tfYWhlYWQsCiAJCQkgICBpbnQgbGFfbGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYyBiL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKaW5kZXggNzRlMTI5Zi4uZjFkZjJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCkBAIC0xOTgsOSArMTk4LDYgQEAKIHN0YXRpYyBjb25zdCBpbnQgcGxjX2ltc2tfYWN0ID0gUExfUENNX0NPREUgfCBQTF9UUkFDRV9QUk9QIHwgUExfUENNX0JSRUFLIHwKIAkJCVBMX1BDTV9FTkFCTEVEIHwgUExfU0VMRl9URVNUIHwgUExfRUJVRl9FUlI7CiAKLS8qIGV4dGVybmFsIGZ1bmN0aW9ucyAqLwotdm9pZCBhbGxfc2VsZWN0aW9uX2NyaXRlcmlhKHN0cnVjdCBzX3NtYyAqc21jKTsKLQogLyogaW50ZXJuYWwgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBwY21fZnNtKHN0cnVjdCBzX3NtYyAqc21jLCBzdHJ1Y3Qgc19waHkgKnBoeSwgaW50IGNtZCk7CiBzdGF0aWMgdm9pZCBwY19yY29kZV9hY3Rpb25zKHN0cnVjdCBzX3NtYyAqc21jLCBpbnQgYml0LCBzdHJ1Y3Qgc19waHkgKnBoeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwppbmRleCA5YTAwZTU1Li5lMTRhZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTEzNSwxNCArMTM1LDExIEBACiAKIC8vIEV4dGVybmFsIGZ1bmN0aW9ucyBmcm9tIHRoZSBoYXJkd2FyZSBtb2R1bGUKIGV4dGVybiB1X2ludCBtYWNfZHJ2X2NoZWNrX3NwYWNlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVhZF9hZGRyZXNzKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7Ci1leHRlcm4gdm9pZCBjYXJkX3N0b3Aoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIGludCBtYWNfZHJ2X2luaXQoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgaHdtX3R4X2ZyYWcoc3RydWN0IHNfc21jICpzbWMsIGNoYXIgZmFyICogdmlydCwgdV9sb25nIHBoeXMsCiAJCQlpbnQgbGVuLCBpbnQgZnJhbWVfc3RhdHVzKTsKIGV4dGVybiBpbnQgaHdtX3R4X2luaXQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciBmYywgaW50IGZyYWdfY291bnQsCiAJCSAgICAgICBpbnQgZnJhbWVfbGVuLCBpbnQgZnJhbWVfc3RhdHVzKTsKLWV4dGVybiBpbnQgaW5pdF9zbXQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqIG1hY19hZGRyKTsKIGV4dGVybiB2b2lkIGZkZGlfaXNyKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIGh3bV9yeF9mcmFnKHN0cnVjdCBzX3NtYyAqc21jLCBjaGFyIGZhciAqIHZpcnQsIHVfbG9uZyBwaHlzLAogCQkJaW50IGxlbiwgaW50IGZyYW1lX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NtdC5jIGIvZHJpdmVycy9uZXQvc2tmcC9zbXQuYwppbmRleCA4MDUzODNiLi44M2QxNmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKQEAgLTU1LDE2ICs1NSw2IEBACiB9IDsKIAogLyoKLSAqIGV4dGVybmFsIHZhcmlhYmxlcwotICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGZkZGlfYWRkciBmZGRpX2Jyb2FkY2FzdCA7Ci0KLS8qCi0gKiBleHRlcm5hbCBmdW5jdGlvbnMKLSAqLwotaW50IHBjbV9zdGF0dXNfdHdpc3RlZChzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci0KLS8qCiAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KICNpZmRlZglMSVRUTEVfRU5ESUFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggYzlkYmIwNi4uOTUyZDM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMzIxNCw3ICszMjE0LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmh3X2xvY2ssIGZsYWdzKTsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlody0+aW50cl9tYXNrIHw9IG5hcGltYXNrW3NrZ2UtPnBvcnRdOwogCQlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwogCQlza2dlX3JlYWQzMihodywgQjBfSU1TSyk7CkBAIC0zMzc3LDcgKzMzNzcsNyBAQAogCWlmIChzdGF0dXMgJiAoSVNfWEExX0Z8SVNfUjFfRikpIHsKIAkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGh3LT5kZXZbMF0pOwogCQlody0+aW50cl9tYXNrICY9IH4oSVNfWEExX0Z8SVNfUjFfRik7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CiAJfQogCiAJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1RYMSkKQEAgLTMzOTcsNyArMzM5Nyw3IEBACiAKIAkJaWYgKHN0YXR1cyAmIChJU19YQTJfRnxJU19SMl9GKSkgewogCQkJaHctPmludHJfbWFzayAmPSB+KElTX1hBMl9GfElTX1IyX0YpOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CiAJCX0KIAogCQlpZiAoc3RhdHVzICYgSVNfUEFfVE9fUlgyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggOTk0NzAzYy4uZDAxYzU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMTA2OCwxMyArMTA2OCwxNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHNreTJfcnhfbWFwX3NrYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHJ4X3JpbmdfaW5mbyAqcmUsCitzdGF0aWMgaW50IHNreTJfcnhfbWFwX3NrYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHJ4X3JpbmdfaW5mbyAqcmUsCiAJCQkgICAgdW5zaWduZWQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmUtPnNrYjsKIAlpbnQgaTsKIAogCXJlLT5kYXRhX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCByZS0+ZGF0YV9hZGRyKSkpCisJCXJldHVybiAtRUlPOworCiAJcGNpX3VubWFwX2xlbl9zZXQocmUsIGRhdGFfc2l6ZSwgc2l6ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKQpAQCAtMTA4Myw2ICsxMDg2LDcgQEAKIAkJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQsCiAJCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCiAJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBza3kyX3J4X3VubWFwX3NrYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHJ4X3JpbmdfaW5mbyAqcmUpCkBAIC0xMzU0LDcgKzEzNTgsMTIgQEAKIAkJaWYgKCFyZS0+c2tiKQogCQkJZ290byBub21lbTsKIAotCQlza3kyX3J4X21hcF9za2IoaHctPnBkZXYsIHJlLCBza3kyLT5yeF9kYXRhX3NpemUpOworCQlpZiAoc2t5Ml9yeF9tYXBfc2tiKGh3LT5wZGV2LCByZSwgc2t5Mi0+cnhfZGF0YV9zaXplKSkgeworCQkJZGV2X2tmcmVlX3NrYihyZS0+c2tiKTsKKwkJCXJlLT5za2IgPSBOVUxMOworCQkJZ290byBub21lbTsKKwkJfQorCiAJCXNreTJfcnhfc3VibWl0KHNreTIsIHJlKTsKIAl9CiAKQEAgLTE1NDcsNyArMTU1Niw3IEBACiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJc3RydWN0IHNreTJfdHhfbGUgKmxlID0gTlVMTDsKIAlzdHJ1Y3QgdHhfcmluZ19pbmZvICpyZTsKLQl1bnNpZ25lZCBpLCBsZW47CisJdW5zaWduZWQgaSwgbGVuLCBmaXJzdF9zbG90OwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAl1MTYgbXNzOwogCXU4IGN0cmw7CkBAIC0xNTU1LDEzICsxNTY0LDE3IEBACiAgCWlmICh1bmxpa2VseSh0eF9hdmFpbChza3kyKSA8IHR4X2xlX3JlcShza2IpKSkKICAgCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKLQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X3F1ZXVlZChza3kyKSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVldWVkLCBzbG90ICV1LCBsZW4gJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNreTItPnR4X3Byb2QsIHNrYi0+bGVuKTsKLQogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGh3LT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGh3LT5wZGV2LCBtYXBwaW5nKSkKKwkJZ290byBtYXBwaW5nX2Vycm9yOworCisJZmlyc3Rfc2xvdCA9IHNreTItPnR4X3Byb2Q7CisJaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9xdWV1ZWQoc2t5MikpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBmaXJzdF9zbG90LCBza2ItPmxlbik7CisKIAkvKiBTZW5kIGhpZ2ggYml0cyBpZiBuZWVkZWQgKi8KIAlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKIAkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7CkBAIC0xNjQ4LDYgKzE2NjEsOSBAQAogCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGh3LT5wZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKIAkJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihody0+cGRldiwgbWFwcGluZykpCisJCQlnb3RvIG1hcHBpbmdfdW53aW5kOworCiAJCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkgewogCQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7CiAJCQlsZS0+YWRkciA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobWFwcGluZykpOwpAQCAtMTY3Niw2ICsxNjkyLDM0IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlyZXR1cm4gTkVUREVWX1RYX09LOworCittYXBwaW5nX3Vud2luZDoKKwlmb3IgKGkgPSBmaXJzdF9zbG90OyBpICE9IHNreTItPnR4X3Byb2Q7IGkgPSBSSU5HX05FWFQoaSwgVFhfUklOR19TSVpFKSkgeworCQlsZSA9IHNreTItPnR4X2xlICsgaTsKKwkJcmUgPSBza3kyLT50eF9yaW5nICsgaTsKKworCQlzd2l0Y2gobGUtPm9wY29kZSAmIH5IV19PV05FUikgeworCQljYXNlIE9QX0xBUkdFU0VORDoKKwkJY2FzZSBPUF9QQUNLRVQ6CisJCQlwY2lfdW5tYXBfc2luZ2xlKGh3LT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJCQkgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnJlYWs7CisJCWNhc2UgT1BfQlVGRkVSOgorCQkJcGNpX3VubWFwX3BhZ2UoaHctPnBkZXYsIHBjaV91bm1hcF9hZGRyKHJlLCBtYXBhZGRyKSwKKwkJCQkgICAgICAgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKKwkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNreTItPnR4X3Byb2QgPSBmaXJzdF9zbG90OworbWFwcGluZ19lcnJvcjoKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlkZXZfd2FybigmaHctPnBkZXYtPmRldiwgIiVzOiB0eCBtYXBwaW5nIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpAQCAtMjE5MSw3ICsyMjM1LDExIEBACiAKIAlwcmVmZXRjaChza2ItPmRhdGEpOwogCXJlLT5za2IgPSBuc2tiOwotCXNreTJfcnhfbWFwX3NrYihza3kyLT5ody0+cGRldiwgcmUsIGhkcl9zcGFjZSk7CisJaWYgKHNreTJfcnhfbWFwX3NrYihza3kyLT5ody0+cGRldiwgcmUsIGhkcl9zcGFjZSkpIHsKKwkJZGV2X2tmcmVlX3NrYihuc2tiKTsKKwkJcmUtPnNrYiA9IHNrYjsKKwkJcmV0dXJuIE5VTEw7CisJfQogCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCiAJCXNrYl9wdXRfZnJhZ3Moc2tiLCBoZHJfc3BhY2UsIGxlbmd0aCk7CkBAIC0yNjg3LDEzICsyNzM1LDYgQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQkvKiBCdWcvRXJyYXRhIHdvcmthcm91bmQ/Ci0JICogTmVlZCB0byBraWNrIHRoZSBUWCBpcnEgbW9kZXJhdGlvbiB0aW1lci4KLQkgKi8KLQlpZiAoc2t5Ml9yZWFkOChodywgU1RBVF9UWF9USU1FUl9DVFJMKSA9PSBUSU1fU1RBUlQpIHsKLQkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUT1ApOwotCQlza3kyX3dyaXRlOChodywgU1RBVF9UWF9USU1FUl9DVFJMLCBUSU1fU1RBUlQpOwotCX0KIAluYXBpX2NvbXBsZXRlKG5hcGkpOwogCXNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9MSVNSKTsKIGRvbmU6CkBAIC0zODY0LDYgKzM5MDUsODYgQEAKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnNreTJfZGVidWc7CiAKKworLyoKKyAqIFJlYWQgYW5kIHBhcnNlIHRoZSBmaXJzdCBwYXJ0IG9mIFZpdGFsIFByb2R1Y3QgRGF0YQorICovCisjZGVmaW5lIFZQRF9TSVpFCTEyOAorI2RlZmluZSBWUERfTUFHSUMJMHg4MgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZwZF90YWcgeworCWNoYXIgdGFnWzJdOworCWNoYXIgKmxhYmVsOworfSB2cGRfdGFnc1tdID0geworCXsgIlBOIiwJIlBhcnQgTnVtYmVyIiB9LAorCXsgIkVDIiwgIkVuZ2luZWVyaW5nIExldmVsIiB9LAorCXsgIk1OIiwgIk1hbnVmYWN0dXJlciIgfSwKKwl7ICJTTiIsICJTZXJpYWwgTnVtYmVyIiB9LAorCXsgIllBIiwgIkFzc2V0IFRhZyIgfSwKKwl7ICJWTCIsICJGaXJzdCBFcnJvciBMb2cgTWVzc2FnZSIgfSwKKwl7ICJWRiIsICJTZWNvbmQgRXJyb3IgTG9nIE1lc3NhZ2UiIH0sCisJeyAiVkIiLCAiQm9vdCBBZ2VudCBST00gQ29uZmlndXJhdGlvbiIgfSwKKwl7ICJWRSIsICJFRkkgVU5ESSBDb25maWd1cmF0aW9uIiB9LAorfTsKKworc3RhdGljIHZvaWQgc2t5Ml9zaG93X3ZwZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHNreTJfaHcgKmh3KQoreworCXNpemVfdCB2cGRfc2l6ZTsKKwlsb2ZmX3Qgb2ZmczsKKwl1OCBsZW47CisJdW5zaWduZWQgY2hhciAqYnVmOworCXUxNiByZWcyOworCisJcmVnMiA9IHNreTJfcGNpX3JlYWQxNihodywgUENJX0RFVl9SRUcyKTsKKwl2cGRfc2l6ZSA9IDEgPDwgKCAoKHJlZzIgJiBQQ0lfVlBEX1JPTV9TWikgPj4gMTQpICsgOCk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiVzIFByb2R1Y3QgRGF0YVxuIiwgcGNpX25hbWUoaHctPnBkZXYpKTsKKwlidWYgPSBrbWFsbG9jKHZwZF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlzZXFfcHV0cyhzZXEsICJubyBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwY2lfcmVhZF92cGQoaHctPnBkZXYsIDAsIHZwZF9zaXplLCBidWYpIDwgMCkgeworCQlzZXFfcHV0cyhzZXEsICJWUEQgcmVhZCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYnVmWzBdICE9IFZQRF9NQUdJQykgeworCQlzZXFfcHJpbnRmKHNlcSwgIlZQRCB0YWcgbWlzbWF0Y2g6ICUjeFxuIiwgYnVmWzBdKTsKKwkJZ290byBvdXQ7CisJfQorCWxlbiA9IGJ1ZlsxXTsKKwlpZiAobGVuID09IDAgfHwgbGVuID4gdnBkX3NpemUgLSA0KSB7CisJCXNlcV9wcmludGYoc2VxLCAiSW52YWxpZCBpZCBsZW5ndGg6ICVkXG4iLCBsZW4pOworCQlnb3RvIG91dDsKKwl9CisKKwlzZXFfcHJpbnRmKHNlcSwgIiUuKnNcbiIsIGxlbiwgYnVmICsgMyk7CisJb2ZmcyA9IGxlbiArIDM7CisKKwl3aGlsZSAob2ZmcyA8IHZwZF9zaXplIC0gNCkgeworCQlpbnQgaTsKKworCQlpZiAoIW1lbWNtcCgiUlciLCBidWYgKyBvZmZzLCAyKSkJLyogZW5kIG1hcmtlciAqLworCQkJYnJlYWs7CisJCWxlbiA9IGJ1ZltvZmZzICsgMl07CisJCWlmIChvZmZzICsgbGVuICsgMyA+PSB2cGRfc2l6ZSkKKwkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwZF90YWdzKTsgaSsrKSB7CisJCQlpZiAoIW1lbWNtcCh2cGRfdGFnc1tpXS50YWcsIGJ1ZiArIG9mZnMsIDIpKSB7CisJCQkJc2VxX3ByaW50ZihzZXEsICIgJXM6ICUuKnNcbiIsCisJCQkJCSAgIHZwZF90YWdzW2ldLmxhYmVsLCBsZW4sIGJ1ZiArIG9mZnMgKyAzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlvZmZzICs9IGxlbiArIDM7CisJfQorb3V0OgorCWtmcmVlKGJ1Zik7Cit9CisKIHN0YXRpYyBpbnQgc2t5Ml9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZXEtPnByaXZhdGU7CkBAIC0zODczLDE0ICszOTk0LDE4IEBACiAJdW5zaWduZWQgaWR4LCBsYXN0OwogCWludCBzb3A7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FTkVURE9XTjsKKwlza3kyX3Nob3dfdnBkKHNlcSwgaHcpOwogCi0Jc2VxX3ByaW50ZihzZXEsICJJUlEgc3JjPSV4IG1hc2s9JXggY29udHJvbD0leFxuIiwKKwlzZXFfcHJpbnRmKHNlcSwgIlxuSVJRIHNyYz0leCBtYXNrPSV4IGNvbnRyb2w9JXhcbiIsCiAJCSAgIHNreTJfcmVhZDMyKGh3LCBCMF9JU1JDKSwKIAkJICAgc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spLAogCQkgICBza3kyX3JlYWQzMihodywgQjBfWTJfU1BfSUNSKSk7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlzZXFfcHJpbnRmKHNlcSwgIm5ldHdvcmsgbm90IHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAluYXBpX2Rpc2FibGUoJmh3LT5uYXBpKTsKIAlsYXN0ID0gc2t5Ml9yZWFkMTYoaHcsIFNUQVRfUFVUX0lEWCk7CiAKQEAgLTQyMDQsNjkgKzQzMjksNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiBSZWFkIGFuZCBwYXJzZSB0aGUgZmlyc3QgcGFydCBvZiBWaXRhbCBQcm9kdWN0IERhdGEKLSAqLwotI2RlZmluZSBWUERfU0laRQkxMjgKLSNkZWZpbmUgVlBEX01BR0lDCTB4ODIKLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHNreTJfdnBkX2luZm8oc3RydWN0IHNreTJfaHcgKmh3KQotewotCWludCBjYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGh3LT5wZGV2LCBQQ0lfQ0FQX0lEX1ZQRCk7Ci0JY29uc3QgdTggKnA7Ci0JdTggKnZwZF9idWYgPSBOVUxMOwotCXUxNiBsZW47Ci0Jc3RhdGljIHN0cnVjdCB2cGRfdGFnIHsKLQkJY2hhciB0YWdbMl07Ci0JCWNoYXIgKmxhYmVsOwotCX0gdnBkX3RhZ3NbXSA9IHsKLQkJeyAiUE4iLAkiUGFydCBOdW1iZXIiIH0sCi0JCXsgIkVDIiwgIkVuZ2luZWVyaW5nIExldmVsIiB9LAotCQl7ICJNTiIsICJNYW51ZmFjdHVyZXIiIH0sCi0JfTsKLQotCWlmICghY2FwKQotCQlnb3RvIG91dDsKLQotCXZwZF9idWYgPSBrbWFsbG9jKFZQRF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXZwZF9idWYpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHNreTJfdnBkX3JlYWQoaHcsIGNhcCwgdnBkX2J1ZiwgMCwgVlBEX1NJWkUpKQotCQlnb3RvIG91dDsKLQotCWlmICh2cGRfYnVmWzBdICE9IFZQRF9NQUdJQykKLQkJZ290byBvdXQ7Ci0JbGVuID0gdnBkX2J1ZlsxXTsKLQlpZiAobGVuID09IDAgfHwgbGVuID4gVlBEX1NJWkUgLSA0KQotCQlnb3RvIG91dDsKLQlwID0gdnBkX2J1ZiArIDM7Ci0JZGV2X2luZm8oJmh3LT5wZGV2LT5kZXYsICIlLipzXG4iLCBsZW4sIHApOwotCXAgKz0gbGVuOwotCi0Jd2hpbGUgKHAgPCB2cGRfYnVmICsgVlBEX1NJWkUgLSA0KSB7Ci0JCWludCBpOwotCi0JCWlmICghbWVtY21wKCJSVyIsIHAsIDIpKQkvKiBlbmQgbWFya2VyICovCi0JCQlicmVhazsKLQotCQlsZW4gPSBwWzJdOwotCQlpZiAobGVuID4gKHAgLSB2cGRfYnVmKSAtIDQpCi0JCQlicmVhazsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2cGRfdGFncyk7IGkrKykgewotCQkJaWYgKCFtZW1jbXAodnBkX3RhZ3NbaV0udGFnLCBwLCAyKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgJXM6ICUuKnNcbiIsCi0JCQkJICAgICAgIHZwZF90YWdzW2ldLmxhYmVsLCBsZW4sIHAgKyAzKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlwICs9IGxlbiArIDM7Ci0JfQotb3V0OgotCWtmcmVlKHZwZF9idWYpOwotfQotCiAvKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB5dWtvbjIgY2hpcHNldCBvbmx5ICovCiBzdGF0aWMgY29uc3QgY2hhciAqc2t5Ml9uYW1lKHU4IGNoaXBpZCwgY2hhciAqYnVmLCBpbnQgc3opCiB7CkBAIC00Mjk0LDYgKzQzNTYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNreTJfaHcgKmh3OwogCWludCBlcnIsIHVzaW5nX2RhYyA9IDAsIHdvbF9kZWZhdWx0OworCXUzMiByZWc7CiAJY2hhciBidWYxWzE2XTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDMyNyw2ICs0MzkwLDM0IEBACiAJCX0KIAl9CiAKKwkvKiBHZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorCSAqIE5vdGU6IG9ubHkgcmVndWxhciBQQ0kgY29uZmlnIGFjY2VzcyBvbmNlIHRvIHRlc3QgZm9yIEhXIGlzc3VlcworCSAqICAgICAgIG90aGVyIFBDSSBhY2Nlc3MgdGhyb3VnaCBzaGFyZWQgbWVtb3J5IGZvciBzcGVlZCBhbmQgdG8KKwkgKgkgYXZvaWQgTU1DT05GSUcgcHJvYmxlbXMuCisJICovCisJZXJyID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9ERVZfUkVHMiwgJnJlZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQQ0kgcmVhZCBjb25maWcgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVnaW9uczsKKwl9CisKKwkvKiBzaXplIG9mIGF2YWlsYWJsZSBWUEQsIG9ubHkgaW1wYWN0IHN5c2ZzICovCisJZXJyID0gcGNpX3ZwZF90cnVuY2F0ZShwZGV2LCAxdWwgPDwgKCgocmVnICYgUENJX1ZQRF9ST01fU1opID4+IDE0KSArIDgpKTsKKwlpZiAoZXJyKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ2FuJ3Qgc2V0IFZQRCBzaXplXG4iKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCS8qIFRoZSBzazk4bGluIHZlbmRvciBkcml2ZXIgdXNlcyBoYXJkd2FyZSBieXRlIHN3YXBwaW5nIGJ1dAorCSAqIHRoaXMgZHJpdmVyIHVzZXMgc29mdHdhcmUgc3dhcHBpbmcuCisJICovCisJcmVnICY9IH5QQ0lfUkVWX0RFU0M7CisJZXJyID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LFBDSV9ERVZfUkVHMiwgcmVnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSB3cml0ZSBjb25maWcgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVnaW9uczsKKwl9CisjZW5kaWYKKwogCXdvbF9kZWZhdWx0ID0gZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikgPyBXQUtFX01BR0lDIDogMDsKIAogCWVyciA9IC1FTk9NRU07CkBAIC00MzQ0LDE4ICs0NDM1LDYgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfaHc7CiAJfQogCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JLyogVGhlIHNrOThsaW4gdmVuZG9yIGRyaXZlciB1c2VzIGhhcmR3YXJlIGJ5dGUgc3dhcHBpbmcgYnV0Ci0JICogdGhpcyBkcml2ZXIgdXNlcyBzb2Z0d2FyZSBzd2FwcGluZy4KLQkgKi8KLQl7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcyKTsKLQkJcmVnICY9IH5QQ0lfUkVWX0RFU0M7Ci0JCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMiwgcmVnKTsKLQl9Ci0jZW5kaWYKLQogCS8qIHJpbmcgZm9yIHN0YXR1cyByZXNwb25zZXMgKi8KIAlody0+c3RfbGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBTVEFUVVNfTEVfQllURVMsICZody0+c3RfZG1hKTsKIAlpZiAoIWh3LT5zdF9sZSkKQEAgLTQzNzAsOCArNDQ0OSw2IEBACiAKIAlza3kyX3Jlc2V0KGh3KTsKIAotCXNreTJfdnBkX2luZm8oaHcpOwotCiAJZGV2ID0gc2t5Ml9pbml0X25ldGRldihodywgMCwgdXNpbmdfZGFjLCB3b2xfZGVmYXVsdCk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKaW5kZXggMjAzM2ZlZS4uMDI5MWVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKQEAgLTE0Miw5ICsxNDIsNiBAQAogCWludCBiYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgaXJxID0gZGV2LT5pcnE7CiAKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gJnVsdHJhX3BvbGw7Ci0jZW5kaWYKIAlpZiAoYmFzZV9hZGRyID4gMHgxZmYpCQkvKiBDaGVjayBhIHNpbmdsZSBzcGVjaWZpZWQgbG9jYXRpb24uICovCiAJCXJldHVybiB1bHRyYV9wcm9iZTEoZGV2LCBiYXNlX2FkZHIpOwogCWVsc2UgaWYgKGJhc2VfYWRkciAhPSAwKQkvKiBEb24ndCBwcm9iZSBhdCBhbGwuICovCkBAIC0xOTksNyArMTk2LDcgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIgCT0gZWlfcG9sbCwKKwkubmRvX3BvbGxfY29udHJvbGxlciAJPSB1bHRyYV9wb2xsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYwppbmRleCBjYjZjMDk3Li43YTU1NGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKQEAgLTE1Myw2ICsxNTMsMjIgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdWx0cmEzMl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gdWx0cmEzMl9vcGVuLAorCS5uZG9fc3RvcCAJCT0gdWx0cmEzMl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWlfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBlaV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlaV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWlfcG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBfX2luaXQgdWx0cmEzMl9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKIAlpbnQgaSwgZWRnZSwgbWVkaWEsIHJldHZhbDsKQEAgLTI3MywxMSArMjg5LDggQEAKIAllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJnVsdHJhMzJfYmxvY2tfb3V0cHV0OwogCWVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSAmdWx0cmEzMl9nZXRfODM5MF9oZHI7CiAJZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSAmdWx0cmEzMl9yZXNldF84MzkwOwotCWRldi0+b3BlbiA9ICZ1bHRyYTMyX29wZW47Ci0JZGV2LT5zdG9wID0gJnVsdHJhMzJfY2xvc2U7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVpX3BvbGw7Ci0jZW5kaWYKKworCWRldi0+bmV0ZGV2X29wcyA9ICZ1bHRyYTMyX25ldGRldl9vcHM7CiAJTlM4MzkwX2luaXQoZGV2LCAwKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDIyM2NkZTAuLjI5MzYxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTE1NDUsNyArMTU0NSw3IEBACiB7CiAJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAogc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfbndheXJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMgYi9kcml2ZXJzL25ldC9zbWM5MTk0LmMKaW5kZXggMThkNjUzYi4uOWE3OTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTE5NC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwpAQCAtODMxLDYgKzgzMSwxNyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQkgPSBzbWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gc21jX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBzbWNfd2FpdF90b19zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJICAgIAk9IHNtY190aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLiBGdW5jdGlvbjogc21jX3Byb2JlKCBpbnQgaW9hZGRyICkKICAuCkBAIC0xMDQ0LDEyICsxMDU1LDggQEAKICAgCSAgCWdvdG8gZXJyX291dDsKICAgICAgIAl9CiAKLQlkZXYtPm9wZW4JCSAgICAgICAgPSBzbWNfb3BlbjsKLQlkZXYtPnN0b3AJCSAgICAgICAgPSBzbWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgCT0gc21jX3dhaXRfdG9fc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQkgICAgCT0gc21jX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQkJPSAmc21jX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwkJPSBIWi8yMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCAJPSBzbWNfc2V0X211bHRpY2FzdF9saXN0OwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggYjIxNWE4ZC4uZmRjYmFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTE2MTQsNyArMTYxNCw3IEBACiB7CiAJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAogc3RhdGljIGludCBzbWNfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE2NDMsNiArMTY0MywxMTcgQEAKIAlscC0+bXNnX2VuYWJsZSA9IGxldmVsOwogfQogCitzdGF0aWMgaW50IHNtY193cml0ZV9lZXByb21fd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkciwgdTE2IHdvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBsb2FkIHdvcmQgaW50byBHUCByZWdpc3RlciAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJU01DX1NFVF9HUChscCwgd29yZCk7CisJLyogc2V0IHRoZSBhZGRyZXNzIHRvIHB1dCB0aGUgZGF0YSBpbiBFRVBST00gKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCVNNQ19TRVRfUFRSKGxwLCBhZGRyKTsKKwkvKiB0ZWxsIGl0IHRvIHdyaXRlICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9TVE9SRSkpOworCS8qIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLworCWRvIHsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKFNNQ19HRVRfQ1RMKGxwKSAmIENUTF9TVE9SRSk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19yZWFkX2VlcHJvbV93b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBhZGRyLCB1MTYgKndvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBzZXQgdGhlIEVFUFJPTSBhZGRyZXNzIHRvIGdldCB0aGUgZGF0YSBmcm9tICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX1BUUihscCwgYWRkciB8IFBUUl9SRUFEKTsKKwkvKiB0ZWxsIGl0IHRvIGxvYWQgKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCVNNQ19TRVRfR1AobHAsIDB4ZmZmZik7CS8qIGluaXQgdG8ga25vd24gKi8KKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9SRUxPQUQpKTsKKwkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChTTUNfR0VUX0NUTChscCkgJiBDVExfUkVMT0FEKTsKKwkvKiByZWFkIHdvcmQgZnJvbSBHUCByZWdpc3RlciAqLworCSp3b3JkID0gU01DX0dFVF9HUChscCk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMHgyMyAqIDI7Cit9CisKK3N0YXRpYyBpbnQgc21jX2V0aHRvb2xfZ2V0ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgaW1heDsKKworCURCRygxLCAiUmVhZGluZyAlZCBieXRlcyBhdCAlZCgweCV4KVxuIiwKKwkJZWVwcm9tLT5sZW4sIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCk7CisJaW1heCA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tLT5sZW47IGkgKz0gMikgeworCQlpbnQgcmV0OworCQl1MTYgd2J1ZjsKKwkJaW50IG9mZnNldCA9IGkgKyBlZXByb20tPm9mZnNldDsKKwkJaWYgKG9mZnNldCA+IGltYXgpCisJCQlicmVhazsKKwkJcmV0ID0gc21jX3JlYWRfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgJndidWYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCQlEQkcoMiwgIlJlYWQgMHgleCBmcm9tIDB4JXhcbiIsIHdidWYsIG9mZnNldCA+PiAxKTsKKwkJZGF0YVtpXSA9ICh3YnVmID4+IDgpICYgMHhmZjsKKwkJZGF0YVtpKzFdID0gd2J1ZiAmIDB4ZmY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX3NldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGk7CisJaW50IGltYXg7CisKKwlEQkcoMSwgIldyaXRpbmcgJWQgYnl0ZXMgdG8gJWQoMHgleClcbiIsCisJCQllZXByb20tPmxlbiwgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+b2Zmc2V0KTsKKwlpbWF4ID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbihkZXYpOworCWZvciAoaSA9IDA7IGkgPCBlZXByb20tPmxlbjsgaSArPSAyKSB7CisJCWludCByZXQ7CisJCXUxNiB3YnVmOworCQlpbnQgb2Zmc2V0ID0gaSArIGVlcHJvbS0+b2Zmc2V0OworCQlpZiAob2Zmc2V0ID4gaW1heCkKKwkJCWJyZWFrOworCQl3YnVmID0gKGRhdGFbaV0gPDwgOCkgfCBkYXRhW2kgKyAxXTsKKwkJREJHKDIsICJXcml0aW5nIDB4JXggdG8gMHgleFxuIiwgd2J1Ziwgb2Zmc2V0ID4+IDEpOworCQlyZXQgPSBzbWNfd3JpdGVfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgd2J1Zik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21jX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSBzbWNfZXRodG9vbF9nZXRzZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gc21jX2V0aHRvb2xfc2V0c2V0dGluZ3MsCkBAIC0xNjUyLDggKzE3NjMsMjIgQEAKIAkuc2V0X21zZ2xldmVsCT0gc21jX2V0aHRvb2xfc2V0bXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQJPSBzbWNfZXRodG9vbF9ud2F5cmVzZXQsCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLS8vCS5nZXRfZWVwcm9tCT0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tLAotLy8JLnNldF9lZXByb20JPSBzbWNfZXRodG9vbF9zZXRlZXByb20sCisJLmdldF9lZXByb21fbGVuID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX2dldGVlcHJvbSwKKwkuc2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX3NldGVlcHJvbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBzbWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNtY19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHNtY190aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNtY19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKIH07CiAKIC8qCkBAIC0xODY1LDE2ICsxOTkwLDkgQEAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldCB2YWx1ZXMuICovCiAJZXRoZXJfc2V0dXAoZGV2KTsKIAotCWRldi0+b3BlbiA9IHNtY19vcGVuOwotCWRldi0+c3RvcCA9IHNtY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtY19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gc21jX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc21jX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZzbWNfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHNtY19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAogCXRhc2tsZXRfaW5pdCgmbHAtPnR4X3Rhc2ssIHNtY19oYXJkd2FyZV9zZW5kX3BrdCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKIAlJTklUX1dPUksoJmxwLT5waHlfY29uZmlndXJlLCBzbWNfcGh5X2NvbmZpZ3VyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IGM0Y2NkMTIuLmVkOWFlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0xMTQxLDYgKzExNDEsMTYgQEAKIAogI2RlZmluZSBTTUNfR0VUX01JSShscCkJCVNNQ19pbncoaW9hZGRyLCBNSUlfUkVHKGxwKSkKIAorI2RlZmluZSBTTUNfR0VUX0dQKGxwKQkJU01DX2ludyhpb2FkZHIsIEdQX1JFRyhscCkpCisKKyNkZWZpbmUgU01DX1NFVF9HUChscCwgeCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUobHApKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIFNNQ19SRUcobHAsIDgsIDEpKTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCVNNQ19vdXR3KHgsIGlvYWRkciwgR1BfUkVHKGxwKSk7CQlcCisJfSB3aGlsZSAoMCkKKwogI2RlZmluZSBTTUNfU0VUX01JSShscCwgeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgTUlJX1JFRyhscCkpCiAKICNkZWZpbmUgU01DX0dFVF9NSVIobHApCQlTTUNfaW53KGlvYWRkciwgTUlSX1JFRyhscCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwppbmRleCA5YTc4ZGFlLi5hZjhmNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKQEAgLTM2OCw0OCArMzY4LDUzIEBACiAJcmV0dXJuIHJlZzsKIH0KIAotLyogQXV0b2RldGVjdHMgYW5kIGluaXRpYWxpc2VzIGV4dGVybmFsIHBoeSBmb3IgU01TQzkxMTUgYW5kIFNNU0M5MTE3IGZsYXZvcnMuCi0gKiBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgcmV0dXJucyAtRU5PREVWIHRvIHJldmVydCBiYWNrIHRvIGludGVybmFsIHBoeS4KLSAqIFBlcmZvcm1lZCBhdCBpbml0aWFsaXNhdGlvbiBvbmx5LCBzbyBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi1zdGF0aWMgaW50IHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKKy8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkuIEFzc3VtZXMgdHggYW5kIHJ4IGFyZSBzdG9wcGVkLiAqLworc3RhdGljIHZvaWQgc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCiB7CiAJdW5zaWduZWQgaW50IGh3Y2ZnID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEhXX0NGRyk7CiAKLQkvKiBFeHRlcm5hbCBwaHkgaXMgcmVxdWVzdGVkLCBzdXBwb3J0ZWQsIGFuZCBkZXRlY3RlZCAqLwotCWlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkvKiBEaXNhYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLworCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7CisJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CisJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byBzdG9wICovCiAKLQkJLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeS4gQXNzdW1pbmcgdHggYW5kIHJ4IGFyZSBzdG9wcGVkCi0JCSAqIGJlY2F1c2Ugc21zYzkxMXhfcGh5X2luaXRpYWxpc2UgaXMgY2FsbGVkIGJlZm9yZQotCQkgKiBzbXNjOTExeF9yeF9pbml0aWFsaXNlIGFuZCB0eF9pbml0aWFsaXNlLiAqLworCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkgKi8KKwlod2NmZyB8PSBIV19DRkdfRVhUX1BIWV9FTl87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKIAotCQkvKiBEaXNhYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLwotCQlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOwotCQlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfQ0xLX0RJU187Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0JCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gc3RvcCAqLworCS8qIEVuYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KKwlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOworCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gcmVzdGFydCAqLwogCi0JCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkgKi8KLQkJaHdjZmcgfD0gSFdfQ0ZHX0VYVF9QSFlfRU5fOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCWh3Y2ZnIHw9IEhXX0NGR19TTUlfU0VMXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworfQogCi0JCS8qIEVuYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KLQkJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKLQkJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0VYVF9QSFlfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCQl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHJlc3RhcnQgKi8KKy8qIEF1dG9kZXRlY3RzIGFuZCBlbmFibGVzIGV4dGVybmFsIHBoeSBpZiBwcmVzZW50IG9uIHN1cHBvcnRlZCBjaGlwcy4KKyAqIGF1dG9kZXRlY3Rpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlY2lmeWluZyBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkKKyAqIG9yIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSBpbiB0aGUgcGxhdGZvcm1fZGF0YSBmbGFncy4gKi8KK3N0YXRpYyB2b2lkIHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaHdjZmcgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSFdfQ0ZHKTsKIAotCQlod2NmZyB8PSBIV19DRkdfU01JX1NFTF87Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0KLQkJU01TQ19UUkFDRShIVywgIlN1Y2Nlc3NmdWxseSBzd2l0Y2hlZCB0byBleHRlcm5hbCBQSFkiKTsKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSkgeworCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CisJfSBlbHNlIGlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfRk9SQ0VfRVhURVJOQUxfUEhZKSB7CisJCVNNU0NfVFJBQ0UoSFcsICJGb3JjaW5nIGV4dGVybmFsIFBIWSIpOworCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CisJfSBlbHNlIGlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkJU01TQ19UUkFDRShIVywgIkhXX0NGRyBFWFRfUEhZX0RFVCBzZXQsIHVzaW5nIGV4dGVybmFsIFBIWSIpOworCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKIAkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CiAJfSBlbHNlIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAiTm8gZXh0ZXJuYWwgUEhZIGRldGVjdGVkLCAiCi0JCQkiVXNpbmcgaW50ZXJuYWwgUEhZIGluc3RlYWQuIik7Ci0JCS8qIFVzZSBpbnRlcm5hbCBwaHkgKi8KLQkJcmV0dXJuIC1FTk9ERVY7CisJCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgY2xlYXIsIHVzaW5nIGludGVybmFsIFBIWSIpOworCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEZldGNoZXMgYSB0eCBzdGF0dXMgb3V0IG9mIHRoZSBzdGF0dXMgZmlmbyAqLwpAQCAtNzY5LDcgKzc3NCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJJnNtc2M5MTF4X3BoeV9hZGp1c3RfbGluaywgMCwgcGRhdGEtPmNvbmZpZy5waHlfaW50ZXJmYWNlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewpAQCAtNzc4LDcgKzc4Myw4IEBACiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsCisJCWRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CkBAIC04MjQsMjIgKzgzMCwxOCBAQAogCiAJcGRhdGEtPm1paV9idXMtPnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKLQogCXN3aXRjaCAocGRhdGEtPmlkcmV2ICYgMHhGRkZGMDAwMCkgewogCWNhc2UgMHgwMTE3MDAwMDoKIAljYXNlIDB4MDExNTAwMDA6CiAJY2FzZSAweDExN0EwMDAwOgogCWNhc2UgMHgxMTVBMDAwMDoKIAkJLyogRXh0ZXJuYWwgUEhZIHN1cHBvcnRlZCwgdHJ5IHRvIGF1dG9kZXRlY3QgKi8KLQkJaWYgKHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHBkYXRhKSA8IDApIHsKLQkJCVNNU0NfVFJBQ0UoSFcsICJObyBleHRlcm5hbCBQSFkgZGV0ZWN0ZWQsICIKLQkJCQkidXNpbmcgaW50ZXJuYWwgUEhZIik7Ci0JCX0KKwkJc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwocGRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTTVNDX1RSQUNFKEhXLCAiRXh0ZXJuYWwgUEhZIGlzIG5vdCBzdXBwb3J0ZWQsICIKIAkJCSJ1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJCWJyZWFrOwogCX0KIApAQCAtODkzLDIyICs4OTUsMjIgQEAKIAkJCVNNU0NfV0FSTklORyhIVywKIAkJCQkiUGFja2V0IHRhZyByZXNlcnZlZCBiaXQgaXMgaGlnaCIpOwogCQl9IGVsc2UgewotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDA4MDAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVNfKSkgewogCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQl9IGVsc2UgewogCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gKHR4X3N0YXQgPj4gMTYpOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwMTAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVhDRVNTX0NPTF8pKSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OwogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gMTsKIAkJCX0gZWxzZSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9CiAJCQkJICAgICgodHhfc3RhdCA+PiAzKSAmIDB4Rik7CiAJCQl9Ci0JCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIDB4MDAwMDA4MDApKQorCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfTE9TVF9DQVJSSUVSXykpCiAJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSAxOwotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwMjAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfTEFURV9DT0xfKSkgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCX0KQEAgLTkyMiwxOSArOTI0LDE3IEBACiB7CiAJaW50IGNyY19lcnIgPSAwOwogCi0JaWYgKHVubGlrZWx5KHJ4c3RhdCAmIDB4MDAwMDgwMDApKSB7CisJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19FU18pKSB7CiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWlmICh1bmxpa2VseShyeHN0YXQgJiAweDAwMDAwMDAyKSkgeworCQlpZiAodW5saWtlbHkocnhzdGF0ICYgUlhfU1RTX0NSQ19FUlJfKSkgewogCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQljcmNfZXJyID0gMTsKIAkJfQogCX0KIAlpZiAobGlrZWx5KCFjcmNfZXJyKSkgewotCQlpZiAodW5saWtlbHkoKHJ4c3RhdCAmIDB4MDAwMDEwMjApID09IDB4MDAwMDEwMjApKSB7Ci0JCQkvKiBGcmFtZSB0eXBlIGluZGljYXRlcyBsZW5ndGgsCi0JCQkgKiBhbmQgbGVuZ3RoIGVycm9yIGlzIHNldCAqLworCQlpZiAodW5saWtlbHkoKHJ4c3RhdCAmIFJYX1NUU19GUkFNRV9UWVBFXykgJiYKKwkJCSAgICAgKHJ4c3RhdCAmIFJYX1NUU19MRU5HVEhfRVJSXykpKQogCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCX0KIAkJaWYgKHJ4c3RhdCAmIFJYX1NUU19NQ0FTVF8pCiAJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCX0KQEAgLTk1Myw3ICs5NTMsNyBAQAogCQlkbyB7CiAJCQl1ZGVsYXkoMSk7CiAJCQl2YWwgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgUlhfRFBfQ1RSTCk7Ci0JCX0gd2hpbGUgKC0tdGltZW91dCAmJiAodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykpOworCQl9IHdoaWxlICgodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykgJiYgLS10aW1lb3V0KTsKIAogCQlpZiAodW5saWtlbHkodGltZW91dCA9PSAwKSkKIAkJCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiCkBAIC05ODQsNyArOTg0LDcgQEAKIAkJCS8qIFdlIHByb2Nlc3NlZCBhbGwgcGFja2V0cyBhdmFpbGFibGUuICBUZWxsIE5BUEkgaXQgY2FuCiAJCQkgKiBzdG9wIHBvbGxpbmcgdGhlbiByZS1lbmFibGUgcnggaW50ZXJydXB0cyAqLwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCBJTlRfU1RTX1JTRkxfKTsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKIAkJCXRlbXAgfD0gSU5UX0VOX1JTRkxfRU5fOwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAogLyogU2V0cyB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzIHRvIGRldl9hZGRyLCBjYWxsZWQgd2l0aCBtYWNfbG9jayBoZWxkICovCiBzdGF0aWMgdm9pZAotc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTggZGV2X2FkZHJbNl0pCitzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3Moc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1OCBkZXZfYWRkcls2XSkKIHsKIAl1MzIgbWFjX2hpZ2gxNiA9IChkZXZfYWRkcls1XSA8PCA4KSB8IGRldl9hZGRyWzRdOwogCXUzMiBtYWNfbG93MzIgPSAoZGV2X2FkZHJbM10gPDwgMjQpIHwgKGRldl9hZGRyWzJdIDw8IDE2KSB8CkBAIC0xMTYwLDggKzExNjAsOCBAQAogCiAJLyogTWFrZSBzdXJlIEVFUFJPTSBoYXMgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgc2V0dGluZyBHUElPX0NGRyAqLwogCXRpbWVvdXQgPSA1MDsKLQl3aGlsZSAoKHRpbWVvdXQtLSkgJiYKLQkgICAgICAgKHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKSAmIEUyUF9DTURfRVBDX0JVU1lfKSkgeworCXdoaWxlICgoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEUyUF9DTUQpICYgRTJQX0NNRF9FUENfQlVTWV8pICYmCisJICAgICAgIC0tdGltZW91dCkgewogCQl1ZGVsYXkoMTApOwogCX0KIApAQCAtMTE3NCw3ICsxMTc0LDcgQEAKIAkvKiBUaGUgc29mdCByZXNldCBhYm92ZSBjbGVhcmVkIHRoZSBkZXZpY2UncyBNQUMgYWRkcmVzcywKIAkgKiByZXN0b3JlIGl0IGZyb20gbG9jYWwgY29weSAoc2V0IGluIHByb2JlKSAqLwogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7Ci0Jc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAogCS8qIEluaXRpYWxpc2UgaXJxcywgYnV0IGxlYXZlIGFsbCBzb3VyY2VzIGRpc2FibGVkICovCkBAIC0xMjI1LDYgKzEyMjUsMTAgQEAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJTTVNDOTExeC85MjF4IGlkZW50aWZpZWQgYXQgJSMwOGx4LCBJUlE6ICVkXG4iLAogCQkgKHVuc2lnbmVkIGxvbmcpcGRhdGEtPmlvYWRkciwgZGV2LT5pcnEpOwogCisJLyogUmVzZXQgdGhlIGxhc3Qga25vd24gZHVwbGV4IGFuZCBjYXJyaWVyICovCisJcGRhdGEtPmxhc3RfZHVwbGV4ID0gLTE7CisJcGRhdGEtPmxhc3RfY2FycmllciA9IC0xOworCiAJLyogQnJpbmcgdGhlIFBIWSB1cCAqLwogCXBoeV9zdGFydChwZGF0YS0+cGh5X2Rldik7CiAKQEAgLTEyNDYsNyArMTI1MCw3IEBACiAJbmFwaV9lbmFibGUoJnBkYXRhLT5uYXBpKTsKIAogCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKLQl0ZW1wIHw9IChJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fUlNGTF9FTl8pOworCXRlbXAgfD0gKElOVF9FTl9UREZBX0VOXyB8IElOVF9FTl9SU0ZMX0VOXyB8IElOVF9FTl9SWFNUT1BfSU5UX0VOXyk7CiAJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCiAJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKQEAgLTE0MTgsMTEgKzE0MjIsNiBAQAogCiAJCQkvKiBSZXF1ZXN0IHRoZSBoYXJkd2FyZSB0byBzdG9wLCB0aGVuIHBlcmZvcm0gdGhlCiAJCQkgKiB1cGRhdGUgd2hlbiB3ZSBnZXQgYW4gUlhfU1RPUCBpbnRlcnJ1cHQgKi8KLQkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SWFNUT1BfSU5UXyk7Ci0JCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JCQl0ZW1wIHw9IElOVF9FTl9SWFNUT1BfSU5UX0VOXzsKLQkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKLQogCQkJdGVtcCA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBNQUNfQ1IpOwogCQkJdGVtcCAmPSB+KE1BQ19DUl9SWEVOXyk7CiAJCQlzbXNjOTExeF9tYWNfd3JpdGUocGRhdGEsIE1BQ19DUiwgdGVtcCk7CkBAIC0xNDYxLDExICsxNDYwLDkgQEAKIAkJLyogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBtdWx0aWNhc3QgdXBkYXRlIHNjaGVkdWxlZCBhbmQKIAkJICogaXQgaXMgbm93IHNhZmUgdG8gY29tcGxldGUgdGhlIHVwZGF0ZSAqLwogCQlTTVNDX1RSQUNFKElOVFIsICJSWCBTdG9wIGludGVycnVwdCIpOwotCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JCXRlbXAgJj0gKH5JTlRfRU5fUlhTVE9QX0lOVF9FTl8pOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7CiAJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SWFNUT1BfSU5UXyk7Ci0JCXNtc2M5MTF4X3J4X211bHRpY2FzdF91cGRhdGVfd29ya2Fyb3VuZChwZGF0YSk7CisJCWlmIChwZGF0YS0+bXVsdGljYXN0X3VwZGF0ZV9wZW5kaW5nKQorCQkJc21zYzkxMXhfcnhfbXVsdGljYXN0X3VwZGF0ZV93b3JrYXJvdW5kKHBkYXRhKTsKIAkJc2VydmljZWQgPSBJUlFfSEFORExFRDsKIAl9CiAKQEAgLTE0ODUsMTYgKzE0ODIsMTYgQEAKIAl9CiAKIAlpZiAobGlrZWx5KGludHN0cyAmIGludGVuICYgSU5UX1NUU19SU0ZMXykpIHsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwZGF0YS0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZwZGF0YS0+bmFwaSkpKSB7CiAJCQkvKiBEaXNhYmxlIFJ4IGludGVycnVwdHMgKi8KIAkJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKIAkJCXRlbXAgJj0gKH5JTlRfRU5fUlNGTF9FTl8pOwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCQkJLyogU2NoZWR1bGUgYSBOQVBJIHBvbGwgKi8KLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcGRhdGEtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJU01TQ19XQVJOSU5HKFJYX0VSUiwKLQkJCQkibmV0aWZfcnhfc2NoZWR1bGVfcHJlcCBmYWlsZWQiKTsKKwkJCQkibmFwaV9zY2hlZHVsZV9wcmVwIGZhaWxlZCIpOwogCQl9CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMTUxMSw2ICsxNTA4LDMxIEBACiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIAorc3RhdGljIGludCBzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwkvKiBPbiBvbGRlciBoYXJkd2FyZSByZXZpc2lvbnMgd2UgY2Fubm90IGNoYW5nZSB0aGUgbWFjIGFkZHJlc3MKKwkgKiByZWdpc3RlcnMgd2hpbGUgcmVjZWl2aW5nIGRhdGEuICBOZXdlciBkZXZpY2VzIGNhbiBzYWZlbHkgY2hhbmdlCisJICogdGhpcyBhdCBhbnkgdGltZS4gKi8KKwlpZiAocGRhdGEtPmdlbmVyYXRpb24gPD0gMSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisKKwlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOworCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOworCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKwogLyogU3RhbmRhcmQgaW9jdGxzIGZvciBtaWktdG9vbCAqLwogc3RhdGljIGludCBzbXNjOTExeF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKQEAgLTE1NDUsNyArMTU2Nyw3IEBACiB7CiAJc3RybGNweShpbmZvLT5kcml2ZXIsIFNNU0NfQ0hJUE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGluZm8tPnZlcnNpb24sIFNNU0NfRFJWX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsCisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKIAkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKQEAgLTE2NTgsNiArMTY4MCw3IEBACiAJCQkJCSAgdTggYWRkcmVzcywgdTggZGF0YSkKIHsKIAl1MzIgb3AgPSBFMlBfQ01EX0VQQ19DTURfRVJBU0VfIHwgYWRkcmVzczsKKwl1MzIgdGVtcDsKIAlpbnQgcmV0OwogCiAJU01TQ19UUkFDRShEUlYsICJhZGRyZXNzIDB4JXgsIGRhdGEgMHgleCIsIGFkZHJlc3MsIGRhdGEpOwpAQCAtMTY2Niw2ICsxNjg5LDEwIEBACiAJaWYgKCFyZXQpIHsKIAkJb3AgPSBFMlBfQ01EX0VQQ19DTURfV1JJVEVfIHwgYWRkcmVzczsKIAkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBFMlBfREFUQSwgKHUzMilkYXRhKTsKKworCQkvKiBXb3JrYXJvdW5kIGZvciBoYXJkd2FyZSByZWFkLWFmdGVyLXdyaXRlIHJlc3RyaWN0aW9uICovCisJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgQllURV9URVNUKTsKKwogCQlyZXQgPSBzbXNjOTExeF9lZXByb21fc2VuZF9jbWQocGRhdGEsIG9wKTsKIAl9CiAKQEAgLTE3NDEsMTIgKzE3NjgsMjcgQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNtc2M5MTF4X3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2RvX2lvY3RsCQk9IHNtc2M5MTF4X2RvX2lvY3RsLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNtc2M5MTF4X3BvbGxfY29udHJvbGxlciwKICNlbmRpZgogfTsKIAorLyogY29waWVzIHRoZSBjdXJyZW50IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgdG8gZGV2LT5kZXZfYWRkciAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBtYWNfaGlnaDE2ID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJIKTsKKwl1MzIgbWFjX2xvdzMyID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJMKTsKKworCWRldi0+ZGV2X2FkZHJbMF0gPSAodTgpKG1hY19sb3czMik7CisJZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkobWFjX2xvdzMyID4+IDgpOworCWRldi0+ZGV2X2FkZHJbMl0gPSAodTgpKG1hY19sb3czMiA+PiAxNik7CisJZGV2LT5kZXZfYWRkclszXSA9ICh1OCkobWFjX2xvdzMyID4+IDI0KTsKKwlkZXYtPmRldl9hZGRyWzRdID0gKHU4KShtYWNfaGlnaDE2KTsKKwlkZXYtPmRldl9hZGRyWzVdID0gKHU4KShtYWNfaGlnaDE2ID4+IDgpOworfQorCiAvKiBJbml0aWFsaXppbmcgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlcywgb25seSBjYWxsZWQgZnJvbSBwcm9iZSAqLwogc3RhdGljIGludCBfX2RldmluaXQgc21zYzkxMXhfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTgzNCw2ICsxODc2LDEyIEBACiAJCVNNU0NfV0FSTklORyhQUk9CRSwKIAkJCSJUaGlzIGRyaXZlciBpcyBub3QgaW50ZW5kZWQgZm9yIHRoaXMgY2hpcCByZXZpc2lvbiIpOwogCisJLyogd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgYW4gZWVwcm9tLCB3aGVyZSB0aGUgbWFjIGFkZHJlc3MKKwkgKiBpcyBzdG9yZWQgZWxzZXdoZXJlIGFuZCBzZXQgYnkgdGhlIGJvb3Rsb2FkZXIuICBUaGlzIHNhdmVzIHRoZQorCSAqIG1hYyBhZGRyZXNzIGJlZm9yZSByZXNldHRpbmcgdGhlIGRldmljZSAqLworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfU0FWRV9NQUNfQUREUkVTUykKKwkJc21zYzkxMXhfcmVhZF9tYWNfYWRkcmVzcyhkZXYpOworCiAJLyogUmVzZXQgdGhlIExBTjkxMXggKi8KIAlpZiAoc21zYzkxMXhfc29mdF9yZXNldChwZGF0YSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTg5MiwxMSArMTk0MCwxMCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhOwogCXN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgKmNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqaXJxX3JlczsKIAl1bnNpZ25lZCBpbnQgaW50Y2ZnID0gMDsKLQlpbnQgcmVzX3NpemU7CisJaW50IHJlc19zaXplLCBpcnFfZmxhZ3M7CiAJaW50IHJldHZhbDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCXByX2luZm8oIiVzOiBEcml2ZXIgdmVyc2lvbiAlcy5cbiIsIFNNU0NfQ0hJUE5BTUUsIFNNU0NfRFJWX1ZFUlNJT04pOwogCkBAIC0xOTE5LDYgKzE5NjYsMTQgQEAKIAl9CiAJcmVzX3NpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQ7CiAKKwlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWlycV9yZXMpIHsKKwkJcHJfd2FybmluZygiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBpcnEgcmVzb3VyY2UuXG4iLAorCQkJU01TQ19DSElQTkFNRSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0XzA7CisJfQorCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUsIFNNU0NfQ0hJUE5BTUUpKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBvdXRfMDsKQEAgLTE5MzUsNyArMTk5MCw4IEBACiAKIAlwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJZGV2LT5pcnEgPSBpcnFfcmVzLT5zdGFydDsKKwlpcnFfZmxhZ3MgPSBpcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCXBkYXRhLT5pb2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzX3NpemUpOwogCiAJLyogY29weSBjb25maWcgcGFyYW1ldGVycyBhY3Jvc3MgdG8gcGRhdGEgKi8KQEAgLTE5NjgsOCArMjAyNCw4IEBACiAJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIDApOwogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgMHhGRkZGRkZGRik7CiAKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc21zYzkxMXhfaXJxaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICAgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbXNjOTExeF9pcnFoYW5kbGVyLAorCQkJICAgICBpcnFfZmxhZ3MgfCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJU01TQ19XQVJOSU5HKFBST0JFLAogCQkJIlVuYWJsZSB0byBjbGFpbSByZXF1ZXN0ZWQgaXJxOiAlZCIsIGRldi0+aXJxKTsKQEAgLTIwMDAsMTkgKzIwNTYsMTIgQEAKIAogCS8qIENoZWNrIGlmIG1hYyBhZGRyZXNzIGhhcyBiZWVuIHNwZWNpZmllZCB3aGVuIGJyaW5naW5nIGludGVyZmFjZSB1cCAqLwogCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7Ci0JCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAJCVNNU0NfVFJBQ0UoUFJPQkUsICJNQUMgQWRkcmVzcyBpcyBzcGVjaWZpZWQgYnkgY29uZmlndXJhdGlvbiIpOwogCX0gZWxzZSB7CiAJCS8qIFRyeSByZWFkaW5nIG1hYyBhZGRyZXNzIGZyb20gZGV2aWNlLiBpZiBFRVBST00gaXMgcHJlc2VudAogCQkgKiBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldCAqLwotCQl1MzIgbWFjX2hpZ2gxNiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSSCk7Ci0JCXUzMiBtYWNfbG93MzIgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkwpOwotCQlkZXYtPmRldl9hZGRyWzBdID0gKHU4KShtYWNfbG93MzIpOwotCQlkZXYtPmRldl9hZGRyWzFdID0gKHU4KShtYWNfbG93MzIgPj4gOCk7Ci0JCWRldi0+ZGV2X2FkZHJbMl0gPSAodTgpKG1hY19sb3czMiA+PiAxNik7Ci0JCWRldi0+ZGV2X2FkZHJbM10gPSAodTgpKG1hY19sb3czMiA+PiAyNCk7Ci0JCWRldi0+ZGV2X2FkZHJbNF0gPSAodTgpKG1hY19oaWdoMTYpOwotCQlkZXYtPmRldl9hZGRyWzVdID0gKHU4KShtYWNfaGlnaDE2ID4+IDgpOworCQlzbXNjOTExeF9yZWFkX21hY19hZGRyZXNzKGRldik7CiAKIAkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKIAkJCS8qIGVlcHJvbSB2YWx1ZXMgYXJlIHZhbGlkICBzbyB1c2UgdGhlbSAqLwpAQCAtMjAyMSw3ICsyMDcwLDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIGVlcHJvbSB2YWx1ZXMgYXJlIGludmFsaWQsIGdlbmVyYXRlIHJhbmRvbSBNQUMgKi8KIAkJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwotCQkJc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwkJCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAJCQlTTVNDX1RSQUNFKFBST0JFLAogCQkJCSJNQUMgQWRkcmVzcyBpcyBzZXQgdG8gcmFuZG9tX2V0aGVyX2FkZHIiKTsKIAkJfQpAQCAtMjAyOSw4ICsyMDc4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAotCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlc1xuIiwKLQkJIHByaW50X21hYyhtYWMsIGRldi0+ZGV2X2FkZHIpKTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5oIGIvZHJpdmVycy9uZXQvc21zYzkxMXguaAppbmRleCAyYjc2NjU0Li5iNTcxNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKQEAgLTgxLDEyICs4MSwxOSBAQAogCiAjZGVmaW5lIFJYX1NUQVRVU19GSUZPCQkJMHg0MAogI2RlZmluZSBSWF9TVFNfRVNfCQkJMHgwMDAwODAwMAorI2RlZmluZSBSWF9TVFNfTEVOR1RIX0VSUl8JCTB4MDAwMDEwMDAKICNkZWZpbmUgUlhfU1RTX01DQVNUXwkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgUlhfU1RTX0ZSQU1FX1RZUEVfCQkweDAwMDAwMDIwCisjZGVmaW5lIFJYX1NUU19DUkNfRVJSXwkJCTB4MDAwMDAwMDIKIAogI2RlZmluZSBSWF9TVEFUVVNfRklGT19QRUVLCQkweDQ0CiAKICNkZWZpbmUgVFhfU1RBVFVTX0ZJRk8JCQkweDQ4CiAjZGVmaW5lIFRYX1NUU19FU18JCQkweDAwMDA4MDAwCisjZGVmaW5lIFRYX1NUU19MT1NUX0NBUlJJRVJfCQkweDAwMDAwODAwCisjZGVmaW5lIFRYX1NUU19OT19DQVJSSUVSXwkJMHgwMDAwMDQwMAorI2RlZmluZSBUWF9TVFNfTEFURV9DT0xfCQkweDAwMDAwMjAwCisjZGVmaW5lIFRYX1NUU19FWENFU1NfQ09MXwkJMHgwMDAwMDEwMAogCiAjZGVmaW5lIFRYX1NUQVRVU19GSUZPX1BFRUsJCTB4NEMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKaW5kZXggNGUxNWFlMC4uNTk1OWFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCkBAIC02NzAsNyArNjcwLDcgQEAKIAkJCXNtc2M5NDIwX3BjaV9mbHVzaF93cml0ZShwZCk7CiAKIAkJCWludHNfdG9fY2xlYXIgfD0gKERNQUNfU1RTX1JYXyB8IERNQUNfU1RTX05JU18pOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBkLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnBkLT5uYXBpKTsKIAkJfQogCiAJCWlmIChpbnRzX3RvX2NsZWFyKQpAQCAtODA3LDcgKzgwNyw3IEBACiAJaWYgKHBkLT5yeF9jc3VtKSB7CiAJCXUxNiBod19jc3VtID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYl90YWlsX3BvaW50ZXIoc2tiKSArCiAJCQlORVRfSVBfQUxJR04gKyBwYWNrZXRfbGVuZ3RoICsgNCk7Ci0JCXB1dF91bmFsaWduZWRfbGUxNihjcHVfdG9fbGUxNihod19jc3VtKSwgJnNrYi0+Y3N1bSk7CisJCXB1dF91bmFsaWduZWRfbGUxNihod19jc3VtLCAmc2tiLT5jc3VtKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAl9CiAKQEAgLTg5Myw3ICs4OTMsNyBAQAogCXNtc2M5NDIwX3BjaV9mbHVzaF93cml0ZShwZCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKCZwZC0+bmFwaSk7CisJCW5hcGlfY29tcGxldGUoJnBkLT5uYXBpKTsKIAogCQkvKiByZS1lbmFibGUgUlggRE1BIGludGVycnVwdHMgKi8KIAkJZG1hX2ludHJfZW5hID0gc21zYzk0MjBfcmVnX3JlYWQocGQsIERNQUNfSU5UUl9FTkEpOwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAlzbXNjX2luZm8oUFJPQkUsICJQSFkgYWRkciAlZCwgcGh5X2lkIDB4JTA4WCIsIHBoeWRldi0+YWRkciwKIAkJcGh5ZGV2LT5waHlfaWQpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkmc21zYzk0MjBfcGh5X2FkanVzdF9saW5rLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKIAl9CiAKIAlwcl9pbmZvKCIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEpOwogCiAJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KIAlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoUEhZX0JBU0lDX0ZFQVRVUkVTIHwgU1VQUE9SVEVEX1BhdXNlIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCA4OGQyYzY3Li45MGU2NjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogCS8qIGlmIGFsbCBwYWNrZXRzIGFyZSBpbiB0aGUgc3RhY2ssIGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZXR1cm4gMCAqLwogCS8qIGlmIG5vdCwgcmV0dXJuIDEgKi8KIAlpZiAocGFja2V0c19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlzcGlkZXJfbmV0X3J4X2lycV9vbihjYXJkKTsKIAkJY2FyZC0+aWdub3JlX3J4X3JhbWZ1bGwgPSAwOwogCX0KQEAgLTE1MjgsNyArMTUyOCw3IEBACiAJCQlzcGlkZXJfbmV0X3JlZmlsbF9yeF9jaGFpbihjYXJkKTsKIAkJCXNwaWRlcl9uZXRfZW5hYmxlX3J4ZG1hYyhjYXJkKTsKIAkJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCX0KIAkJc2hvd19lcnJvciA9IDA7CiAJCWJyZWFrOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCXNwaWRlcl9uZXRfZW5hYmxlX3J4ZG1hYyhjYXJkKTsKIAkJY2FyZC0+bnVtX3J4X2ludHMgKys7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKIApAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCXNwaWRlcl9uZXRfZW5hYmxlX3J4ZG1hYyhjYXJkKTsKIAkJY2FyZC0+bnVtX3J4X2ludHMgKys7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKIApAQCAtMTY1NiwxMSArMTY1NiwxMSBAQAogCiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX1JYSU5UICkgewogCQlzcGlkZXJfbmV0X3J4X2lycV9vZmYoY2FyZCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwogCX0KIAlpZiAoc3RhdHVzX3JlZyAmIFNQSURFUl9ORVRfVFhJTlQpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CiAKIAlpZiAoc3RhdHVzX3JlZyAmIFNQSURFUl9ORVRfTElOS0lOVCkKIAkJc3BpZGVyX25ldF9saW5rX3Jlc2V0KG5ldGRldik7CkBAIC0yMjU5LDYgKzIyNTksMjMgQEAKIAljYXJkLT5zcGlkZXJfc3RhdHMudHhfdGltZW91dHMrKzsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcGlkZXJfbmV0X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc3BpZGVyX25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBzcGlkZXJfbmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHNwaWRlcl9uZXRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNwaWRlcl9uZXRfc2V0X211bHRpLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gc3BpZGVyX25ldF9zZXRfbWFjLAorCS5uZG9fY2hhbmdlX210dQkJPSBzcGlkZXJfbmV0X2NoYW5nZV9tdHUsCisJLm5kb19kb19pb2N0bAkJPSBzcGlkZXJfbmV0X2RvX2lvY3RsLAorCS5uZG9fdHhfdGltZW91dAkJPSBzcGlkZXJfbmV0X3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLyogSFcgVkxBTiAqLworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLyogcG9sbCBjb250cm9sbGVyICovCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzcGlkZXJfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZiAvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLworfTsKKwogLyoqCiAgKiBzcGlkZXJfbmV0X3NldHVwX25ldGRldl9vcHMgLSBpbml0aWFsaXphdGlvbiBvZiBuZXRfZGV2aWNlIG9wZXJhdGlvbnMKICAqIEBuZXRkZXY6IG5ldF9kZXZpY2Ugc3RydWN0dXJlCkBAIC0yMjY4LDIxICsyMjg1LDggQEAKIHN0YXRpYyB2b2lkCiBzcGlkZXJfbmV0X3NldHVwX25ldGRldl9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQluZXRkZXYtPm9wZW4gPSAmc3BpZGVyX25ldF9vcGVuOwotCW5ldGRldi0+c3RvcCA9ICZzcGlkZXJfbmV0X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc3BpZGVyX25ldF94bWl0OwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNwaWRlcl9uZXRfc2V0X211bHRpOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gJnNwaWRlcl9uZXRfc2V0X21hYzsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmc3BpZGVyX25ldF9jaGFuZ2VfbXR1OwotCW5ldGRldi0+ZG9faW9jdGwgPSAmc3BpZGVyX25ldF9kb19pb2N0bDsKLQkvKiB0eCB3YXRjaGRvZyAqLwotCW5ldGRldi0+dHhfdGltZW91dCA9ICZzcGlkZXJfbmV0X3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnNwaWRlcl9uZXRfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBTUElERVJfTkVUX1dBVENIRE9HX1RJTUVPVVQ7Ci0JLyogSFcgVkxBTiAqLwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLyogcG9sbCBjb250cm9sbGVyICovCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSAmc3BpZGVyX25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIAkvKiBldGh0b29sIG9wcyAqLwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmc3BpZGVyX25ldF9ldGh0b29sX29wczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IGRhM2E3NmIuLmZjYjk0M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAjZGVmaW5lIEZJUk1XQVJFX1RYCSJhZGFwdGVjL3N0YXJmaXJlX3R4LmJpbiIKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogS0VSTl9JTkZPICJzdGFyZmlyZS5jOnYxLjAzIDcvMjYvMjAwMCAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgogS0VSTl9JTkZPICIgKHVub2ZmaWNpYWwgMi4yLzIuNCBrZXJuZWwgcG9ydCwgdmVyc2lvbiAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CiAKQEAgLTEzNDIsOCArMTM0Miw4IEBACiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKSB7CiAJCQl1MzIgZW5hYmxlOwogCi0JCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkpIHsKLQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbnAtPm5hcGkpKSkgeworCQkJCV9fbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCQkJCWVuYWJsZSA9IHJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOwogCQkJCWVuYWJsZSAmPSB+KEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSk7CiAJCQkJd3JpdGVsKGVuYWJsZSwgaW9hZGRyICsgSW50ckVuYWJsZSk7CkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCQlpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCX0gd2hpbGUgKGludHJfc3RhdHVzICYgKEludHJSeERvbmUgfCBJbnRyUnhFbXB0eSkpOwogCi0JbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJFbmFibGUpOwogCWludHJfc3RhdHVzIHw9IEludHJSeERvbmUgfCBJbnRyUnhFbXB0eTsKIAl3cml0ZWwoaW50cl9zdGF0dXMsIGlvYWRkciArIEludHJFbmFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCmluZGV4IDdmNjljN2YuLjUwMTdkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYworKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKQEAgLTEwNzQsNiArMTA3NCwxOCBAQAogCS5nZXRfbGluawkJPSBiaWdtYWNfZ2V0X2xpbmssCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJpZ21hY19vcHMgPSB7CisJLm5kb19vcGVuCQk9IGJpZ21hY19vcGVuLAorCS5uZG9fc3RvcAkJPSBiaWdtYWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGJpZ21hY19zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGJpZ21hY19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBiaWdtYWNfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYmlnbWFjX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYmlnbWFjX2V0aGVyX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJICAgICAgIHN0cnVjdCBvZl9kZXZpY2UgKnFlY19vcCkKIHsKQEAgLTExODcsMTYgKzExOTksOCBAQAogCWJwLT5kZXYgPSBkZXY7CiAKIAkvKiBTZXQgbGlua3MgdG8gb3VyIEJpZ01BQyBvcGVuIGFuZCBjbG9zZSByb3V0aW5lcy4gKi8KLQlkZXYtPm9wZW4gPSAmYmlnbWFjX29wZW47Ci0JZGV2LT5zdG9wID0gJmJpZ21hY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZiaWdtYWNfc3RhcnRfeG1pdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmJpZ21hY19ldGh0b29sX29wczsKLQotCS8qIFNldCBsaW5rcyB0byBCaWdNQUMgc3RhdGlzdGljIGFuZCBtdWx0aS1jYXN0IGxvYWRpbmcgY29kZS4gKi8KLQlkZXYtPmdldF9zdGF0cyA9ICZiaWdtYWNfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmJpZ21hY19zZXRfbXVsdGljYXN0OwotCi0JZGV2LT50eF90aW1lb3V0ID0gJmJpZ21hY190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZiaWdtYWNfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwogCiAJLyogRmluaXNoIG5ldCBkZXZpY2UgcmVnaXN0cmF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKaW5kZXggNDM2OTViNy4uYzM5OWIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCkBAIC0xMDksOCArMTA5LDkgQEAKICNlbmRpZgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VuZGFuY2UgQWx0YSBFdGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggMGZjYjc1MC4uYzAyNDM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTkyMSw3ICs5MjEsNyBAQAogCQlncC0+c3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQpOwogCX0gd2hpbGUgKGdwLT5zdGF0dXMgJiBHUkVHX1NUQVRfTkFQSSk7CiAKLQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlnZW1fZW5hYmxlX2ludHMoZ3ApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKQEAgLTk0NCw3ICs5NDQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZ3AtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmZ3AtPm5hcGkpKSB7CiAJCXUzMiBnZW1fc3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQpOwogCiAJCWlmIChnZW1fc3RhdHVzID09IDApIHsKQEAgLTk1NCw3ICs5NTQsNyBAQAogCQl9CiAJCWdwLT5zdGF0dXMgPSBnZW1fc3RhdHVzOwogCQlnZW1fZGlzYWJsZV9pbnRzKGdwKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZ3AtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmdwLT5uYXBpKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwpAQCAtMjk5OCw4ICsyOTk4LDExIEBACiAJLm5kb19kb19pb2N0bAkJPSBnZW1faW9jdGwsCiAJLm5kb190eF90aW1lb3V0CQk9IGdlbV90eF90aW1lb3V0LAogCS5uZG9fY2hhbmdlX210dQkJPSBnZW1fY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBnZW1fc2V0X21hY19hZGRyZXNzLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgICAgPSBnZW1fcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW1faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0zMTYxLDEwICszMTY0LDYgQEAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCWRldi0+ZG1hID0gMDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGdlbV9zZXRfbWFjX2FkZHJlc3M7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGdlbV9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAogCS8qIFNldCB0aGF0IG5vdywgaW4gY2FzZSBQTSBraWNrcyBpbiBub3cgKi8KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggZDRmYjRhYy4uNGU5YmQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTI2NDksOCArMjY0OSw2IEBACiAJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlzYnVzX2RwID0gdG9fb2ZfZGV2aWNlKG9wLT5kZXYucGFyZW50KS0+bm9kZTsKLQlpZiAoaXNfcWZlKQotCQlzYnVzX2RwID0gdG9fb2ZfZGV2aWNlKG9wLT5kZXYucGFyZW50LT5wYXJlbnQpLT5ub2RlOwogCiAJLyogV2UgY2FuIG1hdGNoIFBDSSBkZXZpY2VzIHRvbywgZG8gbm90IGFjY2VwdCB0aG9zZSBoZXJlLiAqLwogCWlmIChzdHJjbXAoc2J1c19kcC0+bmFtZSwgInNidXMiKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCmluZGV4IDE2YzUyOGQuLmFmYzdiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwpAQCAtMTMxMSw2ICsxMzExLDE3IEBACiAJLmdldF9saW5rCQk9IHNwYXJjX2xhbmNlX2dldF9saW5rLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcGFyY19sYW5jZV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxhbmNlX29wZW4sCisJLm5kb19zdG9wCQk9IGxhbmNlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYW5jZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbGFuY2Vfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbGFuY2VfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzcGFyY19sYW5jZV9wcm9iZV9vbmUoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJCSAgIHN0cnVjdCBvZl9kZXZpY2UgKmxlZG1hLAogCQkJCQkgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpsZWJ1ZmZlcikKQEAgLTE0NjIsMTMgKzE0NzMsOSBAQAogCiAJbHAtPmRldiA9IGRldjsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKLQlkZXYtPm9wZW4gPSAmbGFuY2Vfb3BlbjsKLQlkZXYtPnN0b3AgPSAmbGFuY2VfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbGFuY2Vfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmbGFuY2VfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZsYW5jZV9zZXRfbXVsdGljYXN0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmc3BhcmNfbGFuY2VfZXRodG9vbF9vcHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNwYXJjX2xhbmNlX29wczsKIAogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnFlLmMgYi9kcml2ZXJzL25ldC9zdW5xZS5jCmluZGV4IGZlMGMzZjIuLmM2ZWM2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnFlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VucWUuYwpAQCAtODI5LDYgKzgyOSwxNyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFlY19vcHMgPSB7CisJLm5kb19vcGVuCQk9IHFlX29wZW4sCisJLm5kb19zdG9wCQk9IHFlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBxZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcWVfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gcWVfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBxZWNfZXRoZXJfaW5pdChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkOwpAQCAtODkzLDE1ICs5MDQsMTEgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9wLT5kZXYpOwogCi0JZGV2LT5vcGVuID0gcWVfb3BlbjsKLQlkZXYtPnN0b3AgPSBxZV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHFlX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBxZV9zZXRfbXVsdGljYXN0OwotCWRldi0+dHhfdGltZW91dCA9IHFlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7CiAJZGV2LT5pcnEgPSBvcC0+aXJxc1swXTsKIAlkZXYtPmRtYSA9IDA7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZxZV9ldGh0b29sX29wczsKKwlkZXYtPm5ldGRldl9vcHMgPSAmcWVjX29wczsKIAogCXJlcyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW52bmV0LmMgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKaW5kZXggNjExMjMwZi4uYTgyZmIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnZuZXQuYwpAQCAtMTAxMiw2ICsxMDEyLDE2IEBACiBzdGF0aWMgTElTVF9IRUFEKHZuZXRfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHZuZXRfbGlzdF9tdXRleCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm5ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdm5ldF9jbG9zZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHZuZXRfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB2bmV0X3NldF9tYWNfYWRkciwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB2bmV0X2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IHZuZXRfc3RhcnRfeG1pdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgdm5ldCAqIF9fZGV2aW5pdCB2bmV0X25ldyhjb25zdCB1NjQgKmxvY2FsX21hYykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTA0MCwxNSArMTA1MCw5IEBACiAJSU5JVF9MSVNUX0hFQUQoJnZwLT5saXN0KTsKIAl2cC0+bG9jYWxfbWFjID0gKmxvY2FsX21hYzsKIAotCWRldi0+b3BlbiA9IHZuZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB2bmV0X2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdm5ldF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHZuZXRfc2V0X21hY19hZGRyOwotCWRldi0+dHhfdGltZW91dCA9IHZuZXRfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdm5ldF9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2bmV0X2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBWTkVUX1RYX1RJTUVPVVQ7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gdm5ldF9jaGFuZ2VfbXR1OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdm5ldF9zdGFydF94bWl0OwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IGJjZDBlNjAuLmI1MmExYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogCX0KIAogCS8qIGF0dGFjaCB0aGUgbWFjIHRvIHRoZSBwaHkgKi8KLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkgICAgICZ0Y19oYW5kbGVfbGlua19jaGFuZ2UsIDAsCiAJCQkgICAgIGxwLT5jaGlwdHlwZSA9PSBUQzM1ODE1X1RYNDkzOSA/CiAJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJIDogUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CkBAIC03MzUsNyArNzM1LDcgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCiAJCSIobWlpX2J1czpwaHlfYWRkcj0lcywgaWQ9JXgpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsCisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCXBoeWRldi0+cGh5X2lkKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCkBAIC0xNjA5LDggKzE2MDksOCBAQAogCWlmICghKGRtYWN0bCAmIERNQV9JbnRNYXNrKSkgewogCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAkJdGNfd3JpdGVsKGRtYWN0bCB8IERNQV9JbnRNYXNrLCAmdHItPkRNQV9DdGwpOwotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpCisJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnRlcnJ1cHQgdGFrZW4gaW4gcG9sbFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMTkxOSw3ICsxOTE5LDcgQEAKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5ETUFfQ3RsKSAmIH5ETUFfSW50TWFzaywgJnRyLT5ETUFfQ3RsKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCmluZGV4IGE3YTRkYzQuLjdkZWJkMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCkBAIC02Myw3ICs2Myw2IEBACiAgKi8KIAogI2luY2x1ZGUgInRlaHV0aS5oIgotI2luY2x1ZGUgInRlaHV0aV9mdy5oIgogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBiZHhfcGNpX3RibFtdID0gewogCXsweDFGQzksIDB4MzAwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCkBAIC0yNjUsOCArMjY0LDggQEAKIAkJYmR4X2lzcl9leHRyYShwcml2LCBpc3IpOwogCiAJaWYgKGlzciAmIChJUl9SWF9ERVNDXzAgfCBJUl9UWF9GUkVFXzApKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpKSB7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSkgeworCQkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAkJCVJFVChJUlFfSEFORExFRCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBOT1RFOiB3ZSBnZXQgaGVyZSBpZiBpbnRyIGhhcyBzbGlwcGVkIGludG8gd2luZG93CkBAIC0zMDIsNyArMzAxLDcgQEAKIAkJICogZGV2aWNlIGxvY2sgYW5kIGFsbG93IHdhaXRpbmcgdGFza3MgKGVnIHJtbW9kKSB0byBhZHZhbmNlKSAqLwogCQlwcml2LT5uYXBpX3N0b3AgPSAwOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQliZHhfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0zMTgsMjggKzMxNyw0MSBAQAogCiBzdGF0aWMgaW50IGJkeF9md19sb2FkKHN0cnVjdCBiZHhfcHJpdiAqcHJpdikKIHsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAlpbnQgbWFzdGVyLCBpOworCWludCByYzsKIAogCUVOVEVSOwogCW1hc3RlciA9IFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU0VNQVBIT1JFKTsKIAlpZiAoIVJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSAmJiBtYXN0ZXIpIHsKLQkJYmR4X3R4X3B1c2hfZGVzY19zYWZlKHByaXYsIHNfZmlybUxvYWQsIHNpemVvZihzX2Zpcm1Mb2FkKSk7CisJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsICJ0ZWh1dGkvZmlybXdhcmUuYmluIiwgJnByaXYtPnBkZXYtPmRldik7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCQliZHhfdHhfcHVzaF9kZXNjX3NhZmUocHJpdiwgKGNoYXIgKilmdy0+ZGF0YSwgZnctPnNpemUpOwogCQltZGVsYXkoMTAwKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0JCWlmIChSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykpCi0JCQlicmVhazsKKwkJaWYgKFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSkgeworCQkJcmMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KIAkJbWRlbGF5KDIpOwogCX0KKwlyYyA9IC1FSU87CitvdXQ6CiAJaWYgKG1hc3RlcikKIAkJV1JJVEVfUkVHKHByaXYsIHJlZ0lOSVRfU0VNQVBIT1JFLCAxKTsKKwlpZiAoZncpCisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JaWYgKGkgPT0gMjAwKSB7CisJaWYgKHJjKSB7CiAJCUVSUigiJXM6IGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKLQkJREJHKCJWUEMgPSAweCV4IFZJQyA9IDB4JXggSU5JVF9TVEFUVVMgPSAweCV4IGk9JWRcbiIsCi0JCSAgICBSRUFEX1JFRyhwcml2LCByZWdWUEMpLAotCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVklDKSwgUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpLCBpKTsKLQkJUkVUKC1FSU8pOworCQlpZiAocmMgPT0gLUVJTykKKwkJCURCRygiVlBDID0gMHgleCBWSUMgPSAweCV4IElOSVRfU1RBVFVTID0gMHgleCBpPSVkXG4iLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZQQyksCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVklDKSwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUyksIGkpOworCQlSRVQocmMpOwogCX0gZWxzZSB7CiAJCURCRygiJXM6IGZpcm13YXJlIGxvYWRpbmcgc3VjY2Vzc1xuIiwgcHJpdi0+bmRldi0+bmFtZSk7CiAJCVJFVCgwKTsKQEAgLTYxNywxMyArNjI5LDYgQEAKIAlSRVQocmMpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYmR4X2Zpcm13YXJlX2VuZGlhbmVzcyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNfZmlybUxvYWQpOyBpKyspCi0JCXNfZmlybUxvYWRbaV0gPSBDUFVfQ0hJUF9TV0FQMzIoc19maXJtTG9hZFtpXSk7Ci19Ci0KIHN0YXRpYyBpbnQgYmR4X3JhbmdlX2NoZWNrKHN0cnVjdCBiZHhfcHJpdiAqcHJpdiwgdTMyIG9mZnNldCkKIHsKIAlyZXR1cm4gKG9mZnNldCA+ICh1MzIpIChCRFhfUkVHU19TSVpFIC8gcHJpdi0+bmljLT5wb3J0X251bSkpID8KQEAgLTI1MDEsNyArMjUwNiw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBiZHhfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlFTlRFUjsKLQliZHhfZmlybXdhcmVfZW5kaWFuZXNzKCk7CiAJaW5pdF90eGRfc2l6ZXMoKTsKIAlwcmludF9kcml2ZXJfaWQoKTsKIAlSRVQocGNpX3JlZ2lzdGVyX2RyaXZlcigmYmR4X3BjaV9kcml2ZXIpKTsKQEAgLTI1MjEsMyArMjUyNSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKEJEWF9EUlZfREVTQyk7CitNT0RVTEVfRklSTVdBUkUoInRlaHV0aS9maXJtd2FyZS5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKaW5kZXggZWZhZjg0ZC4uZGVjNjdlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmgKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKiBDb21waWxlIFRpbWUgU3dpdGNoZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oIGIvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNjAzYTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcxMiArMCwwIEBACi0vKgotICogVGVodXRpIE5ldHdvcmtzKFIpIE5ldHdvcmsgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotLyogTG9hZGluZyBGaXJtd2FyZSAqLwotLyogSU5UX01FTSBWZXIgKi8KLXN0YXRpYyB1MzIgc19maXJtTG9hZFtdID0gewotCTB4MDAwZjAwMDIsCi0JMHg0MDcxODAwMCwKLQkweDAwMDAwMDJkLAotCTB4YzAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAxLAotCTB4MDAwMDAwMmQsCi0JMHhjMDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDIsCi0JMHgwMDAwMDAyZCwKLQkweGMxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMywKLQkweDAwMDAwMDJkLAotCTB4YzE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA0LAotCTB4MDAwMDAwMmQsCi0JMHhjMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDUsCi0JMHgwMDAwMDAyZCwKLQkweGMyODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNiwKLQkweDAwMDAwMDJkLAotCTB4YzMwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA3LAotCTB4MDAwMDAwMmQsCi0JMHhjMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDgsCi0JMHgwMDAwMDAyZCwKLQkweGM0MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOSwKLQkweDAwMDAwMDJkLAotCTB4YzQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBhLAotCTB4MDAwMDAwMmQsCi0JMHhjNTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGIsCi0JMHgwMDAwMDAyZCwKLQkweGM1ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYywKLQkweDAwMDAwMDJkLAotCTB4YzYwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBkLAotCTB4MDAwMDAwMmQsCi0JMHhjNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGUsCi0JMHgwMDAwMDAyZCwKLQkweGM3MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZiwKLQkweDAwMDAwMDJkLAotCTB4Yzc4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEwLAotCTB4MDAwMDAwMmQsCi0JMHhjODAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTEsCi0JMHgwMDAwMDAyZCwKLQkweGM4ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMiwKLQkweDAwMDAwMDJkLAotCTB4YzkwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEzLAotCTB4MDAwMDAwMmQsCi0JMHhjOTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTQsCi0JMHgwMDAwMDAyZCwKLQkweGNhMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNSwKLQkweDAwMDAwMDJkLAotCTB4Y2E4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE2LAotCTB4MDAwMDAwMmQsCi0JMHhjYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTcsCi0JMHgwMDAwMDAyZCwKLQkweGNiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOCwKLQkweDAwMDAwMDJkLAotCTB4Y2MwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE5LAotCTB4MDAwMDAwMmQsCi0JMHhjYzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWEsCi0JMHgwMDAwMDAyZCwKLQkweGNkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYiwKLQkweDAwMDAwMDJkLAotCTB4Y2Q4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFjLAotCTB4MDAwMDAwMmQsCi0JMHhjZTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWQsCi0JMHgwMDAwMDAyZCwKLQkweGNlODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZSwKLQkweDAwMDAwMDJkLAotCTB4Y2YwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFmLAotCTB4MDAwMDAwMmQsCi0JMHhjZjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjAsCi0JMHgwMDAwMDAyZCwKLQkweGQwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMSwKLQkweDAwMDAwMDJkLAotCTB4ZDA4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIyLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjMsCi0JMHgwMDAwMDAyZCwKLQkweGQxODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNCwKLQkweDAwMDAwMDJkLAotCTB4ZDIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI1LAotCTB4MDAwMDAwMmQsCi0JMHhkMjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjYsCi0JMHgwMDAwMDAyZCwKLQkweGQzMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNywKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI4LAotCTB4MDAwMDAwMmQsCi0JMHhkNDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjksCi0JMHgwMDAwMDAyZCwKLQkweGQ0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYSwKLQkweDAwMDAwMDJkLAotCTB4ZDUwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJiLAotCTB4MDAwMDAwMmQsCi0JMHhkNTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmMsCi0JMHgwMDAwMDAyZCwKLQkweGQ2MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZCwKLQkweDAwMDAwMDJkLAotCTB4ZDY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJlLAotCTB4MDAwMDAwMmQsCi0JMHhkNzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmYsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMCwKLQkweDAwMDAwMDJkLAotCTB4ZDgwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMxLAotCTB4MDAwMDAwMmQsCi0JMHhkODgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzIsCi0JMHgwMDAwMDAyZCwKLQkweGQ5MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMywKLQkweDAwMDAwMDJkLAotCTB4ZDk4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM0LAotCTB4MDAwMDAwMmQsCi0JMHhkYTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzUsCi0JMHgwMDAwMDAyZCwKLQkweGRhODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNiwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM3LAotCTB4MDAwMDAwMmQsCi0JMHhkYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzgsCi0JMHgwMDAwMDA3YiwKLQkweGRkNjA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNhLAotCTB4MDAwMDAwMmQsCi0JMHhkYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2IsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYywKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY0LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDNkMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA3MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDczLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzNzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2EsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0YWEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDFlNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg4LAotCTB4MDAwMDAwM2YsCi0JMHhkNzgwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODksCi0JMHgwMDAwMDAzZiwKLQkweGQ3OTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YSwKLQkweDAwMDAwMDU5LAotCTB4ZDc4MDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhiLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhlLAotCTB4MDAwMDAwMmQsCi0JMHhkN2Q2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGYsCi0JMHgwMDAwMDAxOCwKLQkweDE3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTIsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ZDgwMGI4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MywKLQkweDAwMDAwMDE4LAotCTB4MTdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0YWE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwOTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDE5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE5LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwYzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI4LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjksCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMxLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2IsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNkLAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2UsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAzNzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZiwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDA0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQwLAotCTB4MDAwMDAwM2YsCi0JMHhkMTg0MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDQsCi0JMHgwMDAwMDAzZiwKLQkweGQxN2ZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNSwKLQkweDAwMDAwMDNmLAotCTB4ZDE3ZmZmODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRjLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGQsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRmLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTAsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMSwKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU1LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTYsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNywKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxMzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU4LAotCTB4MDAwMDAwOTQsCi0JMHgwMDBiMzEzYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTksCi0JMHgwMDAwMDA5NCwKLQkweDAwMDkzMTNkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYSwKLQkweDAwMDAwMDk0LAotCTB4MDAwNzMxM2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGViLAotCTB4MDAwMDAwOTQsCi0JMHgwMDA1M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWMsCi0JMHgwMDAwMDAwOSwKLQkweGMxZWQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZCwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMGI3ODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjIsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY0LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjUsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY3LAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjgsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZkLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmUsCi0JMHgwMDAwMDAxOCwKLQkweDFkMmQzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZiwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAwLAotCTB4MDAwMDAwMTgsCi0JMHgxZDEzM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDEsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMiwKLQkweDAwMDAwMDE4LAotCTB4MWQxYjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOCwKLQkweDAwMDAwMDA5LAotCTB4YzUyZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA5LAotCTB4MDAwMDAwMjksCi0JMHhkMjAxMDA2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZSwKLQkweDAwMDAwMDA5LAotCTB4YzIyOTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBmLAotCTB4MDAwMDAwMjksCi0JMHhkMjAwMDA2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE1LAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE4LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTksCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYSwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFiLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWMsCi0JMHgwMDAwMDAxOCwKLQkweDFkMGYzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjIsCi0JMHgwMDAwMDAwOSwKLQkweGM1MmQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMywKLQkweDAwMDAwMDJkLAotCTB4ZDEwODAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI0LAotCTB4MDAwMDAwMDgsCi0JMHgyM2MzM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjUsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNiwKLQkweDAwMDAwMDNmLAotCTB4ZDMwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI3LAotCTB4MDAwMDAwM2YsCi0JMHhkMzA0MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjgsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODE0MDg1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOSwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJhLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDc4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmIsCi0JMHgwMDAwMDAzZiwKLQkweGQxZmZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYywKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM2LAotCTB4MDAwMDAwNjEsCi0JMHhmNjAwMDQ2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzcsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOCwKLQkweDAwMDAwMDE4LAotCTB4M2Q2YjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM5LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMDU4YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2EsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODEwMTA2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYiwKLQkweDAwMDAwMDJkLAotCTB4ZDIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNjLAotCTB4MDAwMDAwMjEsCi0JMHhkMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2QsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNmLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDAsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQyLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NCwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ1LAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDYsCi0JMHgwMDAwMDA0OSwKLQkweGQxN2EzM2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NywKLQkweDAwMDAwMDJmLAotCTB4ZDE3MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ4LAotCTB4MDAwMDAwMmYsCi0JMHhkMTYxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDksCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGMsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRlLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUxLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU0LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTUsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU3LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTgsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVhLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWIsCi0JMHgwMDAwMDAyZCwKLQkweGQxNmMwN2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YywKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWUsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYwLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYzLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjQsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZjLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmQsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE3ODMzZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZmLAotCTB4MDAwMDAwMmYsCi0JMHhkMTcxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzAsCi0JMHgwMDAwMDAyZiwKLQkweGQxNjEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NCwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc1LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc4LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzksCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2MsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdlLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2YsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgxLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODIsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MywKLQkweDAwMDAwMDJkLAotCTB4ZDE2ODA3ZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg0LAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YywKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThkLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGUsCi0JMHgwMDAwMDAwOCwKLQkweDIyNzkwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDA2MGMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkwLAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxMDEwNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkzLAotCTB4MDAwMDAwM2YsCi0JMHhkNTAwMDEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTQsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NSwKLQkweDAwMDAwMDNmLAotCTB4ZDU4MDAyMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk2LAotCTB4MDAwMDAwM2YsCi0JMHhkNTgwMDIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OCwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk5LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWEsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM0ZTksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTljLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzU2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWQsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlmLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTAsCi0JMHgwMDAwMDA0MSwKLQkweGQ1MDAzNTZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTMsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDY4MDNiMDcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE1LAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWYsCi0JMHgwMDAwMDA2MSwKLQkweGY2MDAwNDZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIxLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjIsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMywKLQkweDAwMDAwMDQ5LAotCTB4ZDY4MDNiMDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI0LAotCTB4MDAwMDAwNDksCi0JMHhkNTgwM2IwOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM1ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYywKLQkweDAwMDAwMDQxLAotCTB4ZDYwMDA3ZWMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJkLAotCTB4MDAwMDAwNDEsCi0JMHhkNTgwMDg2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmUsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZiwKLQkweDAwMDAwMDE4LAotCTB4MzdlZDAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzEsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDIwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMiwKLQkweDAwMDAwMDNmLAotCTB4ZDUxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMzLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM2LAotCTB4MDAwMDAwMjEsCi0JMHhkNTAwMDBlYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzcsCi0JMHgwMDAwMDA0OSwKLQkweGRkMGUzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOCwKLQkweDAwMDAwMDM1LAotCTB4ZDEwNDAwN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM5LAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2EsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYiwKLQkweDAwMDAwMDNmLAotCTB4ZDUwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNjLAotCTB4MDAwMDAwM2YsCi0JMHhkNTE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNmLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDAsCi0JMHgwMDAwMDA1MSwKLQkweGY1MDAwMGVhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDMsCi0JMHgwMDAwMDA0OSwKLQkweGRkMGUzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNCwKLQkweDAwMDAwMDM1LAotCTB4ZDEwNDgwN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ1LAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDYsCi0JMHgwMDAwMDAzZiwKLQkweGM3N2Y3ZjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNywKLQkweDAwMDAwMDNmLAotCTB4Yzc3ZjdmMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwNDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDksCi0JMHgwMDAwMDAzZiwKLQkweGQxMDNjMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYSwKLQkweDAwMDAwMDI1LAotCTB4ZGUyMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRiLAotCTB4MDAwMDAwNDksCi0JMHhkZTgwMjc0ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRlLAotCTB4MDAwMDAwMzUsCi0JMHhkMTAwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGYsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMCwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDFkM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTUsCi0JMHgwMDAwMDA3ZCwKLQkweGM3NjBhNzEzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNiwKLQkweDAwMDAwMDMxLAotCTB4YzA4MDAwNDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU3LAotCTB4MDAwMDAwMzEsCi0JMHhjNDAwMDA0OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTgsCi0JMHgwMDAwMDAzMSwKLQkweGMyODAwMDQ1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjQsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmEsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYTE0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZmLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA1MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYTk1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA4LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA2MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjExLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGIxNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDE4MDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxNjAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEzMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDUwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2YsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMTkwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjk3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY1LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYzE4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZlLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGIxNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFjMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2UsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYzk5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBkMWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGQ5YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWQ4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGUxYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDBmMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTYsCi0JMHgwMDAwMDA3ZCwKLQkweGM3NjBhNzEzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NywKLQkweDAwMDAwMDMxLAotCTB4YzA4MDAwNDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk4LAotCTB4MDAwMDAwMzEsCi0JMHhjNDAwMDA0OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTksCi0JMHgwMDAwMDAzMSwKLQkweGMyODAwMDQ1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YSwKLQkweDAwMDAwMDMxLAotCTB4ZDY4MDAwNmQsCi0vKiBCUkRYX0lOSVRfU0RSQU0gKi8KLQkweDAwMGYwMDBmLAotCTB4MDA3MDAwNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA0MCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMDA2NCwKLQkweDAwMDAwMDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMjQwMCwKLQkweDAwMDAyODAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMjg4MCwKLQkweDAwMDAwMTgwLAotCTB4MDAwMDAwMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMTdkLAotCTB4MDAwMDAwMDgsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwOSwKLQkweDAwMDA1MDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLS8qIEJSRFhfSU5JVCAqLwotCTB4MDAwZjAwMGYsCi0JMHgwMDcwMDFmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDQwLAotCTB4MDAwMDAxMDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAwMDY0LAotCTB4MDAwMDAwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAyNDAwLAotCTB4MDAwMDI4MDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAyODgwLAotCTB4MDAwMDAxODAsCi0JMHgwMDAwMDAwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAxN2QsCi0JMHgwMDAwMDAwOCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDA5LAotCTB4MDAwMDUwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotLyogWkVST19JTklUICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzAwMDAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKLS8qIFpFUk9fSU5JVCAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcwMDAwMCwKLQkweDAwMDAwMDAxLAotCTB4MDAwMDAwMDAsCi0vKiBMb2FkaW5nIG9wZXJhdGlvbmFsIEZpcm13YXJlICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAwLAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDEsCi0JMHgwMDAwMDAwNCwKLQkweDAxZDEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAzLAotCTB4MDAwMDAwMDQsCi0JMHgwMjg5M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDQsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNSwKLQkweDAwMDAwMDA0LAotCTB4MDI4NTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA2LAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDE4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDcsCi0JMHgwMDAwMDAwNCwKLQkweDAzZmQzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOCwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjgsCi0JMHgwMDAwMDA0OSwKLQkweGMwMDAzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOSwKLQkweDAwMDAwMDQ5LAotCTB4YzA4MDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJhLAotCTB4MDAwMDAwNDksCi0JMHhjMTAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmIsCi0JMHgwMDAwMDA0OSwKLQkweGMxODAzYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYywKLQkweDAwMDAwMDI5LAotCTB4ZGY2MDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJkLAotCTB4MDAwMDAwNDksCi0JMHhkZjQ0M2I3ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmUsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYwLAotCTB4MDAwMDAwM2YsCi0JMHhkZjAwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjEsCi0JMHgwMDAwMDAyZCwKLQkweGRkZTAwZjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYzLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0MDE4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjQsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMTUwMDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NSwKLQkweDAwMDAwMDdhLAotCTB4MTAyMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY2LAotCTB4MDAwMDAwN2EsCi0JMHgzMDIwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjcsCi0JMHgwMDAwMDAyMSwKLQkweGQwMjQwMDYwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDQwMDI4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFiYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YiwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWZiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZjLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZSwKLQkweDAwMDAwMDc5LAotCTB4ZmQyMTAxMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZmLAotCTB4MDAwMDAwN2QsCi0JMHhmZDJiNDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzAsCi0JMHgwMDAwMDA0MCwKLQkweDNkMDAzMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MSwKLQkweDAwMDAwMDQ4LAotCTB4MWQwMDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcyLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQwNTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NCwKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc4LAotCTB4MDAwMDAwMjEsCi0JMHhlMzM3MWY3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzksCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2MsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdlLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2YsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MCwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZjAwMDA4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTAsCi0JMHgwMDAwMDAyZCwKLQkweGQwMDgwODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMSwKLQkweDAwMDAwMDA4LAotCTB4MjFiNWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEyLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDE4MTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNCwKLQkweDAwMDAwMDdkLAotCTB4ZmQwMTgwODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE1LAotCTB4MDAwMDAwNzksCi0JMHhkMDkwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTYsCi0JMHgwMDAwMDA0OSwKLQkweGQwNTgzYjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNywKLQkweDAwMDAwMDQ5LAotCTB4ZDIwNDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE4LAotCTB4MDAwMDAwM2QsCi0JMHhkZDQwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTksCi0JMHgwMDAwMDAyNCwKLQkweDMyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYSwKLQkweDAwMDAwMDNkLAotCTB4ZGQ3ZmY4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFiLAotCTB4MDAwMDAwMjksCi0JMHhkMDIwMDE3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWMsCi0JMHgwMDAwMDA0OSwKLQkweGQwYTQzYjBlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZCwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQyZmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFlLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMCwKLQkweDAwMDAwMDM4LAotCTB4MzAwMDAxZTAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIxLAotCTB4MDAwMDAwMzksCi0JMHhkMDAwMDE2MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjIsCi0JMHgwMDAwMDA3OSwKLQkweGQxYjEzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMywKLQkweDAwMDAwMDJkLAotCTB4ZGRlMDBmZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI0LAotCTB4MDAwMDAwNDksCi0JMHhkMDgwMzBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjUsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzE3YjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNiwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI3LAotCTB4MDAwMDAwN2QsCi0JMHhmZDM3NDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjgsCi0JMHgwMDAwMDAwOCwKLQkweDAxN2QzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAwMzg3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYywKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTA0MDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJkLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxN2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmUsCi0JMHgwMDAwMDA0OSwKLQkweGQzMDAzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZiwKLQkweDAwMDAwMDc5LAotCTB4ZDM4MWJiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMwLAotCTB4MDAwMDAwN2YsCi0JMHhkMTAxYjI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzEsCi0JMHgwMDAwMDA0OCwKLQkweDUxMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMiwKLQkweDAwMDAwMDNkLAotCTB4ZGQ0MDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMzLAotCTB4MDAwMDAwMDgsCi0JMHgwMTk1MzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzQsCi0JMHgwMDAwMDAyMSwKLQkweGQzMDAwNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNSwKLQkweDAwMDAwMDIwLAotCTB4NTM4MDAwZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDgwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzcsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiMzY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWIzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM5LAotCTB4MDAwMDAwNzUsCi0JMHhmMTAxODY2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2EsCi0JMHgwMDAwMDA3NSwKLQkweGQyMDFiMTY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYiwKLQkweDAwMDAwMDc4LAotCTB4MWQwMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNjLAotCTB4MDAwMDAwMjUsCi0JMHhkZDAwMDFlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2QsCi0JMHgwMDAwMDAwOCwKLQkweDAxYjEzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMSwKLQkweDAwMDAwMDIxLAotCTB4ZTMzNzlmNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQyLAotCTB4MDAwMDAwNDksCi0JMHhkMzAwM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDMsCi0JMHgwMDAwMDA3OSwKLQkweGQzODFiYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNCwKLQkweDAwMDAwMDdmLAotCTB4ZDEwMWIyN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ1LAotCTB4MDAwMDAwNDgsCi0JMHg1MTAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDYsCi0JMHgwMDAwMDA3NSwKLQkweGQyMDFiMTY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNywKLQkweDAwMDAwMDc4LAotCTB4MWQwMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDksCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFjMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYSwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA4MDgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGMsCi0JMHgwMDAwMDA3OCwKLQkweDNkMDFjMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTgsCi0JMHgwMDAwMDA0OSwKLQkweGQxOGUzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOSwKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVhLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWIsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYywKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVkLAotCTB4MDAwMDAwNDksCi0JMHhkMjA0M2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWUsCi0JMHgwMDAwMDA0OSwKLQkweGQyODQzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYwLAotCTB4MDAwMDAwOTQsCi0JMHgwMDEzNDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMGI0MzYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQ4ZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYzLAotCTB4MDAwMDAwOTQsCi0JMHgwMDFiNDk2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjQsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmY0MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY2LAotCTB4MDAwMDAwMWQsCi0JMHhmZDJiODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjcsCi0JMHgwMDAwMDAzMCwKLQkweDMxODM4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOCwKLQkweDAwMDAwMDMwLAotCTB4MTE4MjgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY5LAotCTB4MDAwMDAwMWQsCi0JMHhmZDI1ODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmEsCi0JMHgwMDAwMDAzMCwKLQkweDMxODMwMDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYiwKLQkweDAwMDAwMDMwLAotCTB4MTE4MjAwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZjLAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmQsCi0JMHgwMDAwMDAxZCwKLQkweGZkMDk4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZSwKLQkweDAwMDAwMDMwLAotCTB4MzE4M2QzNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZmLAotCTB4MDAwMDAwMzAsCi0JMHgxMTgzZDI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDAsCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAyLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDMsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNCwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA1LAotCTB4MDAwMDAwMjUsCi0JMHhkMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDYsCi0JMHgwMDAwMDAxOCwKLQkweDdkNzdmZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNywKLQkweDAwMDAwMDQ5LAotCTB4ZGUyMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA4LAotCTB4MDAwMDAwNDksCi0JMHhkZTgwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDksCi0JMHgwMDAwMDAyMSwKLQkweGQxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzFlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMGUzYjc4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZCwKLQkweDAwMDAwMDYxLAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMCwKLQkweDAwMDAwMDM1LAotCTB4ZGQwMDAwZmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTExLAotCTB4MDAwMDAwMTgsCi0JMHgzYjdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTUsCi0JMHgwMDAwMDAyMSwKLQkweGQxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwNDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE3LAotCTB4MDAwMDAwNjEsCi0JMHhmMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFhLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYywKLQkweDAwMDAwMDI1LAotCTB4ZDIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFkLAotCTB4MDAwMDAwOTgsCi0JMHg2MDVkYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDQwODNiMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQxLAotCTB4MDAwMDAwMDksCi0JMHhjMjhiM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDIsCi0JMHgwMDAwMDAzZiwKLQkweGQ0MDAwMzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MywKLQkweDAwMDAwMDA5LAotCTB4YzI4YjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ0LAotCTB4MDAwMDAwNDksCi0JMHhkNDBlM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2NDIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NiwKLQkweDAwMDAwMDJmLAotCTB4ZDI4MTQwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ3LAotCTB4MDAwMDAwMmQsCi0JMHhkMjg0MDM2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRkLAotCTB4MDAwMDAwMzEsCi0JMHhkMzAzZDI2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGUsCi0JMHgwMDAwMDA0OSwKLQkweGRlNDAzYjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUzLAotCTB4MDAwMDAwNDksCi0JMHhkNTgwM2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTQsCi0JMHgwMDAwMDAyMSwKLQkweGRlNDAwMGU2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU2LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTcsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OCwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU5LAotCTB4MDAwMDAwNDksCi0JMHhkNTAwM2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZSwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVmLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDE2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjAsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjU0NGU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MSwKLQkweDAwMDAwMDk0LAotCTB4MDAyMzQxZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYyLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE3NDU2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjMsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0MjY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NCwKLQkweDAwMDAwMDk0LAotCTB4MDAyNzQyZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY1LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJkNDM2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjYsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmQ0NDY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NywKLQkweDAwMDAwMDk0LAotCTB4MDAzMzQzZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY4LAotCTB4MDAwMDAwMDQsCi0JMHgwMzk3M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjksCi0JMHgwMDAwMDAwZCwKLQkweGUzMGRjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YSwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZiLAotCTB4MDAwMDAwMzAsCi0JMHgxMjAyMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmMsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZCwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZlLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmYsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQ2MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MCwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDQwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcxLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzIsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MywKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc0LAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0MjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzUsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc3LAotCTB4MDAwMDAwMGQsCi0JMHhlMzYzYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzgsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDMyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OSwKLQkweDAwMDAwMDMwLAotCTB4MTIwMzAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdhLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgzMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2IsCi0JMHgwMDAwMDA0OSwKLQkweGQyODAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YywKLQkweDAwMDAwMDBkLAotCTB4ZTMwZGMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdkLAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2UsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDI4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjAyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MiwKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgzLAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0MjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODQsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg2LAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODcsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg5LAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YiwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThjLAotCTB4MDAwMDAwOTgsCi0JMHg4MDY5M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGQsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTAsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkyLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDNjMDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk1LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTYsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTliLAotCTB4MDAwMDAwNDksCi0JMHhkM2EwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWMsCi0JMHgwMDAwMDAxOSwKLQkweGRkNjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTllLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWExLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTIsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMywKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE0LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTUsCi0JMHgwMDAwMDA5OCwKLQkweDgwMzczYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNiwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFkLAotCTB4MDAwMDAwNDksCi0JMHhkMzgwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWUsCi0JMHgwMDAwMDAxOSwKLQkweGRkNmZiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIwLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjEsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMiwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIzLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjQsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNSwKLQkweDAwMDAwMDk4LAotCTB4ODAxNzNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI2LAotCTB4MDAwMDAwNDksCi0JMHhkZTQwM2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmQsCi0JMHgwMDAwMDAyMSwKLQkweGQyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZSwKLQkweDAwMDAwMDE5LAotCTB4ZDNlZjdiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJmLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzYsCi0JMHgwMDAwMDAyZCwKLQkweGRkNTQwMTgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNywKLQkweDAwMDAwMDc5LAotCTB4ZjNlMDgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM4LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMzY3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzksCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2MsCi0JMHgwMDAwMDA1OSwKLQkweGZkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDFjMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNlLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2YsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQxLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDIsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMywKLQkweDAwMDAwMDMxLAotCTB4ZDQ4Mzg4NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ0LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDUsCi0JMHgwMDAwMDA3OSwKLQkweGYxODE5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNiwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ3LAotCTB4MDAwMDAwOTgsCi0JMHg4MDUzYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDgsCi0JMHgwMDAwMDAxOSwKLQkweGRkN2Y3Yjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOSwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmYsCi0JMHgwMDAwMDA0OSwKLQkweGQxODQzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMywKLQkweDAwMDAwMDY1LAotCTB4ZjE4MDAyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA0LAotCTB4MDAwMDAwMTgsCi0JMHg3ZDdkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2ExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzAsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotLyogRklOSVNIIElOSVQgRGVzY3JpcHRvciAqLwotCTB4MDAwZjAwMDIsCi0JMHg4MDcxODdjNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCBkYWJkZjU5Li5mN2VmY2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgSmVmZiBHYXJ6aWsgKGpnYXJ6aWtAcG9ib3guY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA0IFN1biBNaWNyb3N5c3RlbXMgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KICAqCiAgKiBGaXJtd2FyZSBpczoKICAqCURlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZCBzb3VyY2UgY29kZSwKQEAgLTY4LDggKzY4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuOTciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRGVjZW1iZXIgMTAsIDIwMDgiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45OCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJGZWJydWFyeSAyNSwgMjAwOSIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC04NjAsNyArODYwLDcgQEAKIAogc3RhdGljIGludCB0ZzNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpicCwgaW50IG1paV9pZCwgaW50IHJlZykKIHsKLQlzdHJ1Y3QgdGczICp0cCA9IChzdHJ1Y3QgdGczICopYnAtPnByaXY7CisJc3RydWN0IHRnMyAqdHAgPSBicC0+cHJpdjsKIAl1MzIgdmFsOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19QQVVTRUQpCkBAIC04NzQsNyArODc0LDcgQEAKIAogc3RhdGljIGludCB0ZzNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnAsIGludCBtaWlfaWQsIGludCByZWcsIHUxNiB2YWwpCiB7Ci0Jc3RydWN0IHRnMyAqdHAgPSAoc3RydWN0IHRnMyAqKWJwLT5wcml2OworCXN0cnVjdCB0ZzMgKnRwID0gYnAtPnByaXY7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX1BBVVNFRCkKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC0yMDUwLDggKzIwNTAsNiBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfc2lnX3Bvc3RfcmVzZXQoc3RydWN0IHRnMyAqLCBpbnQpOwogc3RhdGljIGludCB0ZzNfaGFsdF9jcHUoc3RydWN0IHRnMyAqLCB1MzIpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICopOwotc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICopOwogCiBzdGF0aWMgdm9pZCB0ZzNfcG93ZXJfZG93bl9waHkoc3RydWN0IHRnMyAqdHAsIGJvb2wgZG9fbG93X3Bvd2VyKQogewpAQCAtMjEwOCw2ICsyMTA2LDE5NCBAQAogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7CisJCWludCBpOworCisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkgeworCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX1NFVDEpOworCQkJZm9yIChpID0gMDsgaSA8IDgwMDA7IGkrKykgeworCQkJCWlmICh0cjMyKE5WUkFNX1NXQVJCKSAmIFNXQVJCX0dOVDEpCisJCQkJCWJyZWFrOworCQkJCXVkZWxheSgyMCk7CisJCQl9CisJCQlpZiAoaSA9PSA4MDAwKSB7CisJCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisJCXRwLT5udnJhbV9sb2NrX2NudCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID4gMCkKKwkJCXRwLT5udnJhbV9sb2NrX2NudC0tOworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApCisJCQl0dzMyX2YoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgeworCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CisKKwkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzIHwgQUNDRVNTX0VOQUJMRSk7CisJfQorfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7CisJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKKworCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgJiB+QUNDRVNTX0VOQUJMRSk7CisJfQorfQorCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKKwkJCQkJdTMyIG9mZnNldCwgdTMyICp2YWwpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCWlmIChvZmZzZXQgPiBFRVBST01fQUREUl9BRERSX01BU0sgfHwgKG9mZnNldCAlIDQpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpICYgfihFRVBST01fQUREUl9BRERSX01BU0sgfAorCQkJCQlFRVBST01fQUREUl9ERVZJRF9NQVNLIHwKKwkJCQkJRUVQUk9NX0FERFJfUkVBRCk7CisJdHczMihHUkNfRUVQUk9NX0FERFIsCisJICAgICB0bXAgfAorCSAgICAgKDAgPDwgRUVQUk9NX0FERFJfREVWSURfU0hJRlQpIHwKKwkgICAgICgob2Zmc2V0IDw8IEVFUFJPTV9BRERSX0FERFJfU0hJRlQpICYKKwkgICAgICBFRVBST01fQUREUl9BRERSX01BU0spIHwKKwkgICAgIEVFUFJPTV9BRERSX1JFQUQgfCBFRVBST01fQUREUl9TVEFSVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisJCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKKworCQlpZiAodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKwlpZiAoISh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkqdmFsID0gdHIzMihHUkNfRUVQUk9NX0RBVEEpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIE5WUkFNX0NNRF9USU1FT1VUIDEwMDAwCisKK3N0YXRpYyBpbnQgdGczX252cmFtX2V4ZWNfY21kKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZyYW1fY21kKQoreworCWludCBpOworCisJdHczMihOVlJBTV9DTUQsIG52cmFtX2NtZCk7CisJZm9yIChpID0gMDsgaSA8IE5WUkFNX0NNRF9USU1FT1VUOyBpKyspIHsKKwkJdWRlbGF5KDEwKTsKKwkJaWYgKHRyMzIoTlZSQU1fQ01EKSAmIE5WUkFNX0NNRF9ET05FKSB7CisJCQl1ZGVsYXkoMTApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBOVlJBTV9DTURfVElNRU9VVCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHRnM19udnJhbV9waHlzX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKKwkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCisKKwkJYWRkciA9ICgoYWRkciAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKKwkJCUFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICsKKwkJICAgICAgIChhZGRyICUgdHAtPm52cmFtX3BhZ2VzaXplKTsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgdTMyIHRnM19udnJhbV9sb2dpY2FsX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKKwkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCisKKwkJYWRkciA9ICgoYWRkciA+PiBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAqCisJCQl0cC0+bnZyYW1fcGFnZXNpemUpICsKKwkJICAgICAgIChhZGRyICYgKCgxIDw8IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpIC0gMSkpOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIE5PVEU6IERhdGEgcmVhZCBpbiBmcm9tIE5WUkFNIGlzIGJ5dGVzd2FwcGVkIGFjY29yZGluZyB0bworICogdGhlIGJ5dGVzd2FwcGluZyBzZXR0aW5ncyBmb3IgYWxsIG90aGVyIHJlZ2lzdGVyIGFjY2Vzc2VzLgorICogdGczIGRldmljZXMgYXJlIEJFIGRldmljZXMsIHNvIG9uIGEgQkUgbWFjaGluZSwgdGhlIGRhdGEKKyAqIHJldHVybmVkIHdpbGwgYmUgZXhhY3RseSBhcyBpdCBpcyBzZWVuIGluIE5WUkFNLiAgT24gYSBMRQorICogbWFjaGluZSwgdGhlIDMyLWJpdCB2YWx1ZSB3aWxsIGJlIGJ5dGVzd2FwcGVkLgorICovCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkKKwkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOworCisJb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKKworCWlmIChvZmZzZXQgPiBOVlJBTV9BRERSX01TSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB0ZzNfbnZyYW1fbG9jayh0cCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKKworCXR3MzIoTlZSQU1fQUREUiwgb2Zmc2V0KTsKKwlyZXQgPSB0ZzNfbnZyYW1fZXhlY19jbWQodHAsIE5WUkFNX0NNRF9SRCB8IE5WUkFNX0NNRF9HTyB8CisJCU5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOworCisJaWYgKHJldCA9PSAwKQorCQkqdmFsID0gdHIzMihOVlJBTV9SRERBVEEpOworCisJdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHRwKTsKKworCXRnM19udnJhbV91bmxvY2sodHApOworCisJcmV0dXJuIHJldDsKK30KKworLyogRW5zdXJlcyBOVlJBTSBkYXRhIGlzIGluIGJ5dGVzdHJlYW0gZm9ybWF0LiAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9iZTMyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2JlMzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcmVzID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnYpOworCWlmICghcmVzKQorCQkqdmFsID0gY3B1X3RvX2JlMzIodik7CisJcmV0dXJuIHJlczsKK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIF9fdGczX3NldF9tYWNfYWRkcihzdHJ1Y3QgdGczICp0cCwgaW50IHNraXBfbWFjXzEpCiB7CiAJdTMyIGFkZHJfaGlnaCwgYWRkcl9sb3c7CkBAIC00MzM5LDYgKzQ1MjUsMTMgQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB0cC0+ZGV2KTsKKworCQlpZiAobGVuID4gKHRwLT5kZXYtPm10dSArIEVUSF9ITEVOKSAmJgorCQkgICAgc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gbmV4dF9wa3Q7CisJCX0KKwogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJCWlmICh0cC0+dmxncnAgIT0gTlVMTCAmJgogCQkgICAgZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4pIHsKQEAgLTQ0NjEsNyArNDY1NCw3IEBACiAJCQlzYmxrLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwogCiAJCWlmIChsaWtlbHkoIXRnM19oYXNfd29yayh0cCkpKSB7Ci0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQl0ZzNfcmVzdGFydF9pbnRzKHRwKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NDcxLDcgKzQ2NjQsNyBAQAogCiB0eF9yZWNvdmVyeToKIAkvKiB3b3JrX2RvbmUgaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gYnVkZ2V0LiAqLwotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJc2NoZWR1bGVfd29yaygmdHAtPnJlc2V0X3Rhc2spOwogCXJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC00NTIwLDcgKzQ3MTMsNyBAQAogCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CiAKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDU0NSw3ICs0NzM4LDcgQEAKIAkgKi8KIAl0dzMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLCAweDAwMDAwMDAxKTsKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoMSk7CiB9CkBAIC00NTg3LDcgKzQ3ODAsNyBAQAogCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CiAJaWYgKGxpa2VseSh0ZzNfaGFzX3dvcmsodHApKSkgewogCQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyogTm8gd29yaywgc2hhcmVkIGludGVycnVwdCBwZXJoYXBzPyAgcmUtZW5hYmxlCiAJCSAqIGludGVycnVwdHMsIGFuZCBmbHVzaCB0aGF0IFBDSSB3cml0ZQpAQCAtNDYzMyw3ICs0ODI2LDcgQEAKIAl0dzMyX21haWxib3hfZihNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOwogCWlmICh0ZzNfaXJxX3N5bmModHApKQogCQlnb3RvIG91dDsKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CiAJCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CiAJCS8qIFVwZGF0ZSBsYXN0X3RhZyB0byBtYXJrIHRoYXQgdGhpcyBzdGF0dXMgaGFzIGJlZW4KIAkJICogc2Vlbi4gQmVjYXVzZSBpbnRlcnJ1cHQgbWF5IGJlIHNoYXJlZCwgd2UgbWF5IGJlCkBAIC00NjQxLDcgKzQ4MzQsNyBAQAogCQkgKiBpZiB0ZzNfcG9sbCgpIGlzIG5vdCBzY2hlZHVsZWQuCiAJCSAqLwogCQl0cC0+bGFzdF90YWcgPSBzYmxrLT5zdGF0dXNfdGFnOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0KIG91dDoKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKQEAgLTU2MzEsNjIgKzU4MjQsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKLQkJaW50IGk7Ci0KLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKSB7Ci0JCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfU0VUMSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODAwMDsgaSsrKSB7Ci0JCQkJaWYgKHRyMzIoTlZSQU1fU1dBUkIpICYgU1dBUkJfR05UMSkKLQkJCQkJYnJlYWs7Ci0JCQkJdWRlbGF5KDIwKTsKLQkJCX0KLQkJCWlmIChpID09IDgwMDApIHsKLQkJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCX0KLQkJdHAtPm52cmFtX2xvY2tfY250Kys7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7Ci0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPiAwKQotCQkJdHAtPm52cmFtX2xvY2tfY250LS07Ci0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkKLQkJCXR3MzJfZihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOwotCX0KLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7Ci0JCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKLQotCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKLQl9Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKLQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHRnM19hcGVfc2VuZF9ldmVudChzdHJ1Y3QgdGczICp0cCwgdTMyIGV2ZW50KQogewogCWludCBpOwpAQCAtNjgyNCw3ICs2OTYxLDggQEAKIAlfX3RnM19zZXRfbWFjX2FkZHIodHAsIDApOwogCiAJLyogTVRVICsgZXRoZXJuZXQgaGVhZGVyICsgRkNTICsgb3B0aW9uYWwgVkxBTiB0YWcgKi8KLQl0dzMyKE1BQ19SWF9NVFVfU0laRSwgdHAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyA4KTsKKwl0dzMyKE1BQ19SWF9NVFVfU0laRSwKKwkgICAgIHRwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU4pOwogCiAJLyogVGhlIHNsb3QgdGltZSBpcyBjaGFuZ2VkIGJ5IHRnM19zZXR1cF9waHkgaWYgd2UKIAkgKiBydW4gYXQgZ2lnYWJpdCB3aXRoIGhhbGYgZHVwbGV4LgpAQCAtODM4NiwxNyArODUyNCwxMyBAQAogCXJldHVybiB0cC0+bnZyYW1fc2l6ZTsKIH0KIAotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9sZShzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19sZTMyICp2YWwpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9zd2FiKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCk7Ci0KIHN0YXRpYyBpbnQgdGczX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwogCXU4ICAqcGQ7CiAJdTMyIGksIG9mZnNldCwgbGVuLCBiX29mZnNldCwgYl9jb3VudDsKLQlfX2xlMzIgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtODQxNSw3ICs4NTQ5LDcgQEAKIAkJCS8qIGkuZS4gb2Zmc2V0PTEgbGVuPTIgKi8KIAkJCWJfY291bnQgPSBsZW47CiAJCX0KLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldC1iX29mZnNldCwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldC1iX29mZnNldCwgJnZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQltZW1jcHkoZGF0YSwgKChjaGFyKikmdmFsKSArIGJfb2Zmc2V0LCBiX2NvdW50KTsKQEAgLTg0MjcsNyArODU2MSw3IEBACiAJLyogcmVhZCBieXRlcyB1cHRvIHRoZSBsYXN0IDQgYnl0ZSBib3VuZGFyeSAqLwogCXBkID0gJmRhdGFbZWVwcm9tLT5sZW5dOwogCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gKGxlbiAmIDMpKTsgaSArPSA0KSB7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQgKyBpLCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJnZhbCk7CiAJCWlmIChyZXQpIHsKIAkJCWVlcHJvbS0+bGVuICs9IGk7CiAJCQlyZXR1cm4gcmV0OwpAQCAtODQ0MSw3ICs4NTc1LDcgQEAKIAkJcGQgPSAmZGF0YVtlZXByb20tPmxlbl07CiAJCWJfY291bnQgPSBsZW4gJiAzOwogCQliX29mZnNldCA9IG9mZnNldCArIGxlbiAtIGJfY291bnQ7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBiX29mZnNldCwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIGJfb2Zmc2V0LCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCW1lbWNweShwZCwgJnZhbCwgYl9jb3VudCk7CkBAIC04NDU4LDcgKzg1OTIsNyBAQAogCWludCByZXQ7CiAJdTMyIG9mZnNldCwgbGVuLCBiX29mZnNldCwgb2RkX2xlbjsKIAl1OCAqYnVmOwotCV9fbGUzMiBzdGFydCwgZW5kOworCV9fYmUzMiBzdGFydCwgZW5kOwogCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTg0NzEsNyArODYwNSw3IEBACiAKIAlpZiAoKGJfb2Zmc2V0ID0gKG9mZnNldCAmIDMpKSkgewogCQkvKiBhZGp1c3RtZW50cyB0byBzdGFydCBvbiByZXF1aXJlZCA0IGJ5dGUgYm91bmRhcnkgKi8KLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldC1iX29mZnNldCwgJnN0YXJ0KTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmc3RhcnQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbGVuICs9IGJfb2Zmc2V0OwpAQCAtODQ4NSw3ICs4NjE5LDcgQEAKIAkJLyogYWRqdXN0bWVudHMgdG8gZW5kIG9uIHJlcXVpcmVkIDQgYnl0ZSBib3VuZGFyeSAqLwogCQlvZGRfbGVuID0gMTsKIAkJbGVuID0gKGxlbiArIDMpICYgfjM7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQrbGVuLTQsICZlbmQpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQrbGVuLTQsICZlbmQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC04NTQ0LDcgKzg2NzgsNyBAQAogCQljbWQtPmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4OwogCX0KIAljbWQtPnBoeV9hZGRyZXNzID0gUEhZX0FERFI7Ci0JY21kLT50cmFuc2NlaXZlciA9IDA7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJY21kLT5hdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLmF1dG9uZWc7CiAJY21kLT5tYXh0eHBrdCA9IDA7CiAJY21kLT5tYXhyeHBrdCA9IDA7CkBAIC04NTYxLDI2ICs4Njk1LDU4IEBACiAJCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KHRwLT5tZGlvX2J1cy0+cGh5X21hcFtQSFlfQUREUl0sIGNtZCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgewotCQkvKiBUaGVzZSBhcmUgdGhlIG9ubHkgdmFsaWQgYWR2ZXJ0aXNlbWVudCBiaXRzIGFsbG93ZWQuICAqLwotCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCi0JCSAgICAoY21kLT5hZHZlcnRpc2luZyAmIH4oQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgQURWRVJUSVNFRF9BdXRvbmVnIHwKLQkJCQkJICBBRFZFUlRJU0VEX0ZJQlJFKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogRmliZXIgY2FuIG9ubHkgZG8gU1BFRURfMTAwMC4gICovCi0JCWVsc2UgaWYgKChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpICYmCi0JCQkgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBDb3BwZXIgY2Fubm90IGZvcmNlIFNQRUVEXzEwMDAuICAqLwotCX0gZWxzZSBpZiAoKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkgJiYKLQkJICAgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkpCisJaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSAmJgorCSAgICBjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmICgoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSAmJgotCQkgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpCisKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgorCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCAmJgorCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCXUzMiBtYXNrID0gQURWRVJUSVNFRF9BdXRvbmVnIHwKKwkJCSAgIEFEVkVSVElTRURfUGF1c2UgfAorCQkJICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQorCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCisJCQltYXNrIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfVFA7CisJCWVsc2UKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF9GSUJSRTsKKworCQlpZiAoY21kLT5hZHZlcnRpc2luZyAmIH5tYXNrKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWFzayAmPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCk7CisKKwkJY21kLT5hZHZlcnRpc2luZyAmPSBtYXNrOworCX0gZWxzZSB7CisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKKwkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgorCQkJICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogCXRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gY21kLT5hdXRvbmVnOwpAQCAtOTAyNSwxMCArOTE5MSwxMCBAQAogc3RhdGljIGludCB0ZzNfdGVzdF9udnJhbShzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgY3N1bSwgbWFnaWM7Ci0JX19sZTMyICpidWY7CisJX19iZTMyICpidWY7CiAJaW50IGksIGosIGssIGVyciA9IDAsIHNpemU7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKQpAQCAtOTA2MiwxNCArOTIyOCwxNSBAQAogCiAJZXJyID0gLUVJTzsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHNpemU7IGkgKz0gNCwgaisrKSB7Ci0JCWlmICgoZXJyID0gdGczX252cmFtX3JlYWRfbGUodHAsIGksICZidWZbal0pKSAhPSAwKQorCQllcnIgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBpLCAmYnVmW2pdKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA8IHNpemUpCiAJCWdvdG8gb3V0OwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCi0JbWFnaWMgPSBzd2FiMzIobGUzMl90b19jcHUoYnVmWzBdKSk7CisJbWFnaWMgPSBiZTMyX3RvX2NwdShidWZbMF0pOwogCWlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0KIAkgICAgVEczX0VFUFJPTV9NQUdJQ19GVykgewogCQl1OCAqYnVmOCA9ICh1OCAqKSBidWYsIGNzdW04ID0gMDsKQEAgLTkwOTgsNyArOTI2NSw3IEBACiAJaWYgKChtYWdpYyAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PQogCSAgICBURzNfRUVQUk9NX01BR0lDX0hXKSB7CiAJCXU4IGRhdGFbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKLQkgICAgICAgCXU4IHBhcml0eVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOworCQl1OCBwYXJpdHlbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKIAkJdTggKmJ1ZjggPSAodTggKikgYnVmOwogCiAJCS8qIFNlcGFyYXRlIHRoZSBwYXJpdHkgYml0cyBhbmQgdGhlIGRhdGEgYnl0ZXMuICAqLwpAQCAtOTE0MSwxMyArOTMwOCwxMyBAQAogCiAJLyogQm9vdHN0cmFwIGNoZWNrc3VtIGF0IG9mZnNldCAweDEwICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopIGJ1ZiwgMHgxMCk7Ci0JaWYoY3N1bSAhPSBsZTMyX3RvX2NwdShidWZbMHgxMC80XSkpCisJaWYgKGNzdW0gIT0gYmUzMl90b19jcHUoYnVmWzB4MTAvNF0pKQogCQlnb3RvIG91dDsKIAogCS8qIE1hbnVmYWN0dXJpbmcgYmxvY2sgc3RhcnRzIGF0IG9mZnNldCAweDc0LCBjaGVja3N1bSBhdCAweGZjICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopICZidWZbMHg3NC80XSwgMHg4OCk7Ci0JaWYgKGNzdW0gIT0gbGUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQotCQkgZ290byBvdXQ7CisJaWYgKGNzdW0gIT0gYmUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQorCQlnb3RvIG91dDsKIAogCWVyciA9IDA7CiAKQEAgLTk4NTYsOCArMTAwMjMsMTIgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJdHAtPnZsZ3JwID0gZ3JwOworCQlyZXR1cm47CisJfQorCisJdGczX25ldGlmX3N0b3AodHApOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKQEAgLTk4NjYsOCArMTAwMzcsNyBAQAogCS8qIFVwZGF0ZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcgYml0IGluIFJYX01PREUgcmVnaXN0ZXIuICovCiAJX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdGFydCh0cCk7CisJdGczX25ldGlmX3N0YXJ0KHRwKTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiB9CkBAIC05OTc0LDcgKzEwMTQ0LDcgQEAKIAogCXRwLT5udnJhbV9zaXplID0gRUVQUk9NX0NISVBfU0laRTsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmbWFnaWMpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmbWFnaWMpICE9IDApCiAJCXJldHVybjsKIAogCWlmICgobWFnaWMgIT0gVEczX0VFUFJPTV9NQUdJQykgJiYKQEAgLTk5OTAsNyArMTAxNjAsNyBAQAogCWN1cnNpemUgPSAweDEwOwogCiAJd2hpbGUgKGN1cnNpemUgPCB0cC0+bnZyYW1fc2l6ZSkgewotCQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgY3Vyc2l6ZSwgJnZhbCkgIT0gMCkKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBjdXJzaXplLCAmdmFsKSAhPSAwKQogCQkJcmV0dXJuOwogCiAJCWlmICh2YWwgPT0gbWFnaWMpCkBAIC0xMDAwNiw3ICsxMDE3Niw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkgIT0gMCkKIAkJcmV0dXJuOwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCkBAIC0xMDAxNyw3ICsxMDE4NywxOCBAQAogCiAJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweGYwLCAmdmFsKSA9PSAwKSB7CiAJCWlmICh2YWwgIT0gMCkgewotCQkJdHAtPm52cmFtX3NpemUgPSAodmFsID4+IDE2KSAqIDEwMjQ7CisJCQkvKiBUaGlzIGlzIGNvbmZ1c2luZy4gIFdlIHdhbnQgdG8gb3BlcmF0ZSBvbiB0aGUKKwkJCSAqIDE2LWJpdCB2YWx1ZSBhdCBvZmZzZXQgMHhmMi4gIFRoZSB0ZzNfbnZyYW1fcmVhZCgpCisJCQkgKiBjYWxsIHdpbGwgcmVhZCBmcm9tIE5WUkFNIGFuZCBieXRlc3dhcCB0aGUgZGF0YQorCQkJICogYWNjb3JkaW5nIHRvIHRoZSBieXRlc3dhcHBpbmcgc2V0dGluZ3MgZm9yIGFsbAorCQkJICogb3RoZXIgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGlzIGVuc3VyZXMgdGhlIGRhdGEgd2UKKwkJCSAqIHdhbnQgd2lsbCBhbHdheXMgcmVzaWRlIGluIHRoZSBsb3dlciAxNi1iaXRzLgorCQkJICogSG93ZXZlciwgdGhlIGRhdGEgaW4gTlZSQU0gaXMgaW4gTEUgZm9ybWF0LCB3aGljaAorCQkJICogbWVhbnMgdGhlIGRhdGEgZnJvbSB0aGUgTlZSQU0gcmVhZCB3aWxsIGFsd2F5cyBiZQorCQkJICogb3Bwb3NpdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIENQVS4gIFRoZSAxNi1iaXQKKwkJCSAqIGJ5dGVzd2FwIHRoZW4gYnJpbmdzIHRoZSBkYXRhIHRvIENQVSBlbmRpYW5uZXNzLgorCQkJICovCisJCQl0cC0+bnZyYW1fc2l6ZSA9IHN3YWIxNigodTE2KSh2YWwgJiAweDAwMDBmZmZmKSkgKiAxMDI0OwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTA0NjgsMTQxICsxMDY0OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKLQkJCQkJdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JdTMyIHRtcDsKLQlpbnQgaTsKLQotCWlmIChvZmZzZXQgPiBFRVBST01fQUREUl9BRERSX01BU0sgfHwKLQkgICAgKG9mZnNldCAlIDQpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpICYgfihFRVBST01fQUREUl9BRERSX01BU0sgfAotCQkJCQlFRVBST01fQUREUl9ERVZJRF9NQVNLIHwKLQkJCQkJRUVQUk9NX0FERFJfUkVBRCk7Ci0JdHczMihHUkNfRUVQUk9NX0FERFIsCi0JICAgICB0bXAgfAotCSAgICAgKDAgPDwgRUVQUk9NX0FERFJfREVWSURfU0hJRlQpIHwKLQkgICAgICgob2Zmc2V0IDw8IEVFUFJPTV9BRERSX0FERFJfU0hJRlQpICYKLQkgICAgICBFRVBST01fQUREUl9BRERSX01BU0spIHwKLQkgICAgIEVFUFJPTV9BRERSX1JFQUQgfCBFRVBST01fQUREUl9TVEFSVCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKLQotCQlpZiAodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQlpZiAoISh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkqdmFsID0gdHIzMihHUkNfRUVQUk9NX0RBVEEpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIE5WUkFNX0NNRF9USU1FT1VUIDEwMDAwCi0KLXN0YXRpYyBpbnQgdGczX252cmFtX2V4ZWNfY21kKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZyYW1fY21kKQotewotCWludCBpOwotCi0JdHczMihOVlJBTV9DTUQsIG52cmFtX2NtZCk7Ci0JZm9yIChpID0gMDsgaSA8IE5WUkFNX0NNRF9USU1FT1VUOyBpKyspIHsKLQkJdWRlbGF5KDEwKTsKLQkJaWYgKHRyMzIoTlZSQU1fQ01EKSAmIE5WUkFNX0NNRF9ET05FKSB7Ci0JCQl1ZGVsYXkoMTApOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkgPT0gTlZSQU1fQ01EX1RJTUVPVVQpIHsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgdGczX252cmFtX3BoeXNfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgotCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKLQotCQlhZGRyID0gKChhZGRyIC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PAotCQkJQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKwotCQkgICAgICAgKGFkZHIgJSB0cC0+bnZyYW1fcGFnZXNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLXN0YXRpYyB1MzIgdGczX252cmFtX2xvZ2ljYWxfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgotCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKLQotCQlhZGRyID0gKChhZGRyID4+IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICoKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSkgKwotCQkgICAgICAgKGFkZHIgJiAoKDEgPDwgQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgLSAxKSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCi0JCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKLQotCW9mZnNldCA9IHRnM19udnJhbV9waHlzX2FkZHIodHAsIG9mZnNldCk7Ci0KLQlpZiAob2Zmc2V0ID4gTlZSQU1fQUREUl9NU0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gdGczX252cmFtX2xvY2sodHApOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7Ci0KLQl0dzMyKE5WUkFNX0FERFIsIG9mZnNldCk7Ci0JcmV0ID0gdGczX252cmFtX2V4ZWNfY21kKHRwLCBOVlJBTV9DTURfUkQgfCBOVlJBTV9DTURfR08gfAotCQlOVlJBTV9DTURfRklSU1QgfCBOVlJBTV9DTURfTEFTVCB8IE5WUkFNX0NNRF9ET05FKTsKLQotCWlmIChyZXQgPT0gMCkKLQkJKnZhbCA9IHN3YWIzMih0cjMyKE5WUkFNX1JEREFUQSkpOwotCi0JdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHRwKTsKLQotCXRnM19udnJhbV91bmxvY2sodHApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9sZShzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19sZTMyICp2YWwpCi17Ci0JdTMyIHY7Ci0JaW50IHJlcyA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2KTsKLQlpZiAoIXJlcykKLQkJKnZhbCA9IGNwdV90b19sZTMyKHYpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfc3dhYihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JaW50IGVycjsKLQl1MzIgdG1wOwotCi0JZXJyID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnRtcCk7Ci0JKnZhbCA9IHN3YWIzMih0bXApOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgdGczX252cmFtX3dyaXRlX2Jsb2NrX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKIAkJCQkgICAgdTMyIG9mZnNldCwgdTMyIGxlbiwgdTggKmJ1ZikKIHsKQEAgLTEwNjExLDEzICsxMDY1NywxMyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CiAJCXUzMiBhZGRyOwotCQlfX2xlMzIgZGF0YTsKKwkJX19iZTMyIGRhdGE7CiAKIAkJYWRkciA9IG9mZnNldCArIGk7CiAKIAkJbWVtY3B5KCZkYXRhLCBidWYgKyBpLCA0KTsKIAotCQl0dzMyKEdSQ19FRVBST01fREFUQSwgbGUzMl90b19jcHUoZGF0YSkpOworCQl0dzMyKEdSQ19FRVBST01fREFUQSwgYmUzMl90b19jcHUoZGF0YSkpOwogCiAJCXZhbCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKIAkJdHczMihHUkNfRUVQUk9NX0FERFIsIHZhbCB8IEVFUFJPTV9BRERSX0NPTVBMRVRFKTsKQEAgLTEwNjY3LDggKzEwNzEzLDkgQEAKIAkJcGh5X2FkZHIgPSBvZmZzZXQgJiB+cGFnZW1hc2s7CiAKIAkJZm9yIChqID0gMDsgaiA8IHBhZ2VzaXplOyBqICs9IDQpIHsKLQkJCWlmICgocmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIHBoeV9hZGRyICsgaiwKLQkJCQkJCShfX2xlMzIgKikgKHRtcCArIGopKSkpCisJCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBwaHlfYWRkciArIGosCisJCQkJCQkgIChfX2JlMzIgKikgKHRtcCArIGopKTsKKwkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJldCkKQEAgLTEwNzE1LDcgKzEwNzYyLDcgQEAKIAkJCV9fYmUzMiBkYXRhOwogCiAJCQlkYXRhID0gKigoX19iZTMyICopICh0bXAgKyBqKSk7Ci0JCQkvKiBzd2FiMzIobGUzMl90b19jcHUoZGF0YSkpLCBhY3R1YWxseSAqLworCiAJCQl0dzMyKE5WUkFNX1dSREFUQSwgYmUzMl90b19jcHUoZGF0YSkpOwogCiAJCQl0dzMyKE5WUkFNX0FERFIsIHBoeV9hZGRyICsgaik7CkBAIC0xMTMwMSwyNCArMTEzNDgsMjUgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX3BhcnRubyhzdHJ1Y3QgdGczICp0cCkKIHsKLQl1bnNpZ25lZCBjaGFyIHZwZF9kYXRhWzI1Nl07CisJdW5zaWduZWQgY2hhciB2cGRfZGF0YVsyNTZdOyAgIC8qIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIG1hZ2ljOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MCwgJm1hZ2ljKSkKIAkJZ290byBvdXRfbm90X2ZvdW5kOwogCiAJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpIHsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7CiAJCQl1MzIgdG1wOwogCi0JCQlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MTAwICsgaSwgJnRtcCkpCisJCQkvKiBUaGUgZGF0YSBpcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCBpbiBOVlJBTS4KKwkJCSAqIFVzZSB0aGUgYmlnLWVuZGlhbiByZWFkIHJvdXRpbmVzIHRvIHByZXNlcnZlCisJCQkgKiB0aGUgYnl0ZSBvcmRlciBhcyBpdCBleGlzdHMgaW4gTlZSQU0uCisJCQkgKi8KKwkJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCAweDEwMCArIGksICZ0bXApKQogCQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAotCQkJdnBkX2RhdGFbaSArIDBdID0gKCh0bXAgPj4gIDApICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgMV0gPSAoKHRtcCA+PiAgOCkgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAyXSA9ICgodG1wID4+IDE2KSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDNdID0gKCh0bXAgPj4gMjQpICYgMHhmZik7CisJCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdG1wLCBzaXplb2YodG1wKSk7CiAJCX0KIAl9IGVsc2UgewogCQlpbnQgdnBkX2NhcDsKQEAgLTExMzQ0LDcgKzExMzkyLDcgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgdnBkX2NhcCArIFBDSV9WUERfREFUQSwKIAkJCQkJICAgICAgJnRtcCk7CiAJCQl2ID0gY3B1X3RvX2xlMzIodG1wKTsKLQkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ2LCA0KTsKKwkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ2LCBzaXplb2YodikpOwogCQl9CiAJfQogCkBAIC0xMTQwNCwxNSArMTE0NTIsNzkgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkgfHwKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkgfHwKIAkgICAgKHZhbCAmIDB4ZmMwMDAwMDApICE9IDB4MGMwMDAwMDAgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgNCwgJnZhbCkgfHwKKwkgICAgdGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZ2YWwpIHx8CiAJICAgIHZhbCAhPSAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfYmNfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWwsIG9mZnNldCwgc3RhcnQsIHZlcl9vZmZzZXQ7CisJaW50IGk7CisJYm9vbCBuZXd2ZXIgPSBmYWxzZTsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHhjLCAmb2Zmc2V0KSB8fAorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgMHg0LCAmc3RhcnQpKQorCQlyZXR1cm47CisKKwlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQorCQlyZXR1cm47CisKKwlpZiAoKHZhbCAmIDB4ZmMwMDAwMDApID09IDB4MGMwMDAwMDApIHsKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSkKKwkJCXJldHVybjsKKworCQlpZiAodmFsID09IDApCisJCQluZXd2ZXIgPSB0cnVlOworCX0KKworCWlmIChuZXd2ZXIpIHsKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJb2Zmc2V0ID0gb2Zmc2V0ICsgdmVyX29mZnNldCAtIHN0YXJ0OworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gNCkgeworCQkJX19iZTMyIHY7CisJCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJnYpKQorCQkJCXJldHVybjsKKworCQkJbWVtY3B5KHRwLT5md192ZXIgKyBpLCAmdiwgc2l6ZW9mKHYpKTsKKwkJfQorCX0gZWxzZSB7CisJCXUzMiBtYWpvciwgbWlub3I7CisKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBURzNfTlZNX1BUUkVWX0JDVkVSLCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJbWFqb3IgPSAodmVyX29mZnNldCAmIFRHM19OVk1fQkNWRVJfTUFKTVNLKSA+PgorCQkJVEczX05WTV9CQ1ZFUl9NQUpTRlQ7CisJCW1pbm9yID0gdmVyX29mZnNldCAmIFRHM19OVk1fQkNWRVJfTUlOTVNLOworCQlzbnByaW50ZigmdHAtPmZ3X3ZlclswXSwgMzIsICJ2JWQuJTAyZCIsIG1ham9yLCBtaW5vcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfaHdzYl92ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgbWFqb3IsIG1pbm9yOworCisJLyogVXNlIG5hdGl2ZSBlbmRpYW4gcmVwcmVzZW50YXRpb24gKi8KKwlpZiAodGczX252cmFtX3JlYWQodHAsIFRHM19OVk1fSFdTQl9DRkcxLCAmdmFsKSkKKwkJcmV0dXJuOworCisJbWFqb3IgPSAodmFsICYgVEczX05WTV9IV1NCX0NGRzFfTUFKTVNLKSA+PgorCQlURzNfTlZNX0hXU0JfQ0ZHMV9NQUpTRlQ7CisJbWlub3IgPSAodmFsICYgVEczX05WTV9IV1NCX0NGRzFfTUlOTVNLKSA+PgorCQlURzNfTlZNX0hXU0JfQ0ZHMV9NSU5TRlQ7CisKKwlzbnByaW50ZigmdHAtPmZ3X3ZlclswXSwgMzIsICJzYiB2JWQuJTAyZCIsIG1ham9yLCBtaW5vcik7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9zYl92ZXIoc3RydWN0IHRnMyAqdHAsIHUzMiB2YWwpCiB7CiAJdTMyIG9mZnNldCwgbWFqb3IsIG1pbm9yLCBidWlsZDsKQEAgLTExNDM4LDcgKzExNTUwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKIAkJcmV0dXJuOwogCiAJYnVpbGQgPSAodmFsICYgVEczX0VFUFJPTV9TQl9FREhfQkxEX01BU0spID4+CkBAIC0xMTQ1OCw0OSArMTE1NzAsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9md192ZXIoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfbWdtdGZ3X3ZlcihzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgdmFsLCBvZmZzZXQsIHN0YXJ0OwotCXUzMiB2ZXJfb2Zmc2V0OwotCWludCBpLCBiY250OwotCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZ2YWwpKQotCQlyZXR1cm47Ci0KLQlpZiAodmFsICE9IFRHM19FRVBST01fTUFHSUMpIHsKLQkJaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19GVykKLQkJCXRnM19yZWFkX3NiX3Zlcih0cCwgdmFsKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4YywgJm9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgMHg0LCAmc3RhcnQpKQotCQlyZXR1cm47Ci0KLQlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOwotCi0JaWYgKCF0ZzNfZndfaW1nX2lzX3ZhbGlkKHRwLCBvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDgsICZ2ZXJfb2Zmc2V0KSkKLQkJcmV0dXJuOwotCi0Jb2Zmc2V0ID0gb2Zmc2V0ICsgdmVyX29mZnNldCAtIHN0YXJ0OwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7Ci0JCV9fbGUzMiB2OwotCQlpZiAodGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCArIGksICZ2KSkKLQkJCXJldHVybjsKLQotCQltZW1jcHkodHAtPmZ3X3ZlciArIGksICZ2LCA0KTsKLQl9Ci0KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQotCQlyZXR1cm47CisJaW50IGksIHZsZW47CiAKIAlmb3IgKG9mZnNldCA9IFRHM19OVk1fRElSX1NUQVJUOwogCSAgICAgb2Zmc2V0IDwgVEczX05WTV9ESVJfRU5EOwogCSAgICAgb2Zmc2V0ICs9IFRHM19OVk1fRElSRU5UX1NJWkUpIHsKLQkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkpCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKIAkJCXJldHVybjsKIAogCQlpZiAoKHZhbCA+PiBURzNfTlZNX0RJUlRZUEVfU0hJRlQpID09IFRHM19OVk1fRElSVFlQRV9BU0ZJTkkpCkBAIC0xMTUxMiwzNiArMTE1OTAsODcgQEAKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKIAkJc3RhcnQgPSAweDA4MDAwMDAwOwotCWVsc2UgaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCAtIDQsICZzdGFydCkpCisJZWxzZSBpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCAtIDQsICZzdGFydCkpCiAJCXJldHVybjsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA0LCAmb2Zmc2V0KSB8fAorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJm9mZnNldCkgfHwKIAkgICAgIXRnM19md19pbWdfaXNfdmFsaWQodHAsIG9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgOCwgJnZhbCkpCisJICAgIHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA4LCAmdmFsKSkKIAkJcmV0dXJuOwogCiAJb2Zmc2V0ICs9IHZhbCAtIHN0YXJ0OwogCi0JYmNudCA9IHN0cmxlbih0cC0+ZndfdmVyKTsKKwl2bGVuID0gc3RybGVuKHRwLT5md192ZXIpOwogCi0JdHAtPmZ3X3ZlcltiY250KytdID0gJywnOwotCXRwLT5md192ZXJbYmNudCsrXSA9ICcgJzsKKwl0cC0+ZndfdmVyW3ZsZW4rK10gPSAnLCc7CisJdHAtPmZ3X3Zlclt2bGVuKytdID0gJyAnOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlfX2xlMzIgdjsKLQkJaWYgKHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQsICZ2KSkKKwkJX19iZTMyIHY7CisJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQsICZ2KSkKIAkJCXJldHVybjsKIAogCQlvZmZzZXQgKz0gc2l6ZW9mKHYpOwogCi0JCWlmIChiY250ID4gVEczX1ZFUl9TSVpFIC0gc2l6ZW9mKHYpKSB7Ci0JCQltZW1jcHkoJnRwLT5md192ZXJbYmNudF0sICZ2LCBURzNfVkVSX1NJWkUgLSBiY250KTsKKwkJaWYgKHZsZW4gPiBURzNfVkVSX1NJWkUgLSBzaXplb2YodikpIHsKKwkJCW1lbWNweSgmdHAtPmZ3X3Zlclt2bGVuXSwgJnYsIFRHM19WRVJfU0laRSAtIHZsZW4pOwogCQkJYnJlYWs7CiAJCX0KIAotCQltZW1jcHkoJnRwLT5md192ZXJbYmNudF0sICZ2LCBzaXplb2YodikpOwotCQliY250ICs9IHNpemVvZih2KTsKKwkJbWVtY3B5KCZ0cC0+ZndfdmVyW3ZsZW5dLCAmdiwgc2l6ZW9mKHYpKTsKKwkJdmxlbiArPSBzaXplb2Yodik7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZGFzaF92ZXIoc3RydWN0IHRnMyAqdHApCit7CisJaW50IHZsZW47CisJdTMyIGFwZWRhdGE7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHx8CisJICAgICEodHAtPnRnM19mbGFncyAgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX1NFR19TSUcpOworCWlmIChhcGVkYXRhICE9IEFQRV9TRUdfU0lHX01BR0lDKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfU1RBVFVTKTsKKwlpZiAoIShhcGVkYXRhICYgQVBFX0ZXX1NUQVRVU19SRUFEWSkpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9GV19WRVJTSU9OKTsKKworCXZsZW4gPSBzdHJsZW4odHAtPmZ3X3Zlcik7CisKKwlzbnByaW50ZigmdHAtPmZ3X3Zlclt2bGVuXSwgVEczX1ZFUl9TSVpFIC0gdmxlbiwgIiBEQVNIIHYlZC4lZC4lZC4lZCIsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX01BSk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fTUFKU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9NSU5NU0spID4+IEFQRV9GV19WRVJTSU9OX01JTlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fUkVWTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9SRVZTRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX0JMRE1TSykpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWw7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpKQorCQlyZXR1cm47CisKKwlpZiAodmFsID09IFRHM19FRVBST01fTUFHSUMpCisJCXRnM19yZWFkX2JjX3Zlcih0cCk7CisJZWxzZSBpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0ZXKQorCQl0ZzNfcmVhZF9zYl92ZXIodHAsIHZhbCk7CisJZWxzZSBpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0hXKQorCQl0ZzNfcmVhZF9od3NiX3Zlcih0cCk7CisJZWxzZQorCQlyZXR1cm47CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKKwkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQorCQlyZXR1cm47CisKKwl0ZzNfcmVhZF9tZ210ZndfdmVyKHRwKTsKIAogCXRwLT5md192ZXJbVEczX1ZFUl9TSVpFIC0gMV0gPSAwOwogfQpAQCAtMTIzMTIsMTQgKzEyNDQxLDEwIEBACiAJfQogCWlmICghYWRkcl9vaykgewogCQkvKiBOZXh0LCB0cnkgTlZSQU0uICovCi0JCWlmICghdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCi0JCSAgICAhdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7Ci0JCQlkZXYtPmRldl9hZGRyWzBdID0gKChoaSA+PiAxNikgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbMV0gPSAoKGhpID4+IDI0KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclsyXSA9ICgobG8gPj4gIDApICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzNdID0gKChsbyA+PiAgOCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbNF0gPSAoKGxvID4+IDE2KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkcls1XSA9ICgobG8gPj4gMjQpICYgMHhmZik7CisJCWlmICghdGczX252cmFtX3JlYWRfYmUzMih0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKKwkJICAgICF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgeworCQkJbWVtY3B5KCZkZXYtPmRldl9hZGRyWzBdLCAoKGNoYXIgKikmaGkpICsgMiwgMik7CisJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMl0sIChjaGFyICopJmxvLCBzaXplb2YobG8pKTsKIAkJfQogCQkvKiBGaW5hbGx5IGp1c3QgZmV0Y2ggaXQgb3V0IG9mIHRoZSBNQUMgY29udHJvbCByZWdzLiAqLwogCQllbHNlIHsKQEAgLTEzMjAwLDYgKzEzMzI1LDkgQEAKIAkJfQogCiAJCXRnM19hcGVfbG9ja19pbml0KHRwKTsKKworCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpCisJCQl0ZzNfcmVhZF9kYXNoX3Zlcih0cCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNTA4ZGVmMy4uY2I0YzYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTE3MTksNiArMTcxOSwxMiBAQAogCiAjZGVmaW5lIFRHM19PVFBfREVGQVVMVAkJCTB4Mjg2YzE2NDAKIAorLyogSGFyZHdhcmUgU2VsZmJvb3QgTlZSQU0gbGF5b3V0ICovCisjZGVmaW5lIFRHM19OVk1fSFdTQl9DRkcxCQkweDAwMDAwMDA0CisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpNU0sJMHhmODAwMDAwMAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUFKU0ZUCTI3CisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5NU0sJMHgwN2MwMDAwMAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUlOU0ZUCTIyCiAKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQwkJMHg2Njk5NTVhYQogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDX0ZXCQkweGE1MDAwMDAwCkBAIC0xNzM3LDYgKzE3NDMsMTAgQEAKICNkZWZpbmUgVEczX05WTV9ESVJFTlRfU0laRQkJMHhjCiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9TSElGVAkJMjQKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX0FTRklOSQkJMQorI2RlZmluZSBURzNfTlZNX1BUUkVWX0JDVkVSCQkweDk0CisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUFKTVNLCQkweDAwMDBmZjAwCisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUFKU0ZUCQk4CisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUlOTVNLCQkweDAwMDAwMGZmCiAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIwX0VESF9PRkYJMHgxMAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjJfRURIX09GRgkweDE0CkBAIC0xOTY3LDYgKzE5NzcsMTQgQEAKIC8qIEFQRSBzaGFyZWQgbWVtb3J5LiAgQWNjZXNzaWJsZSB0aHJvdWdoIEJBUjEgKi8KICNkZWZpbmUgVEczX0FQRV9GV19TVEFUVVMJCTB4NDAwYwogI2RlZmluZSAgQVBFX0ZXX1NUQVRVU19SRUFEWQkJIDB4MDAwMDAxMDAKKyNkZWZpbmUgVEczX0FQRV9GV19WRVJTSU9OCQkweDQwMTgKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSk1TSwkJIDB4ZmYwMDAwMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSlNGVAkJIDI0CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NSU5NU0sJCSAweDAwZmYwMDAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NSU5TRlQJCSAxNgorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fUkVWTVNLCQkgMHgwMDAwZmYwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fUkVWU0ZUCQkgOAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fQkxETVNLCQkgMHgwMDAwMDBmZgogI2RlZmluZSBURzNfQVBFX0hPU1RfU0VHX1NJRwkJMHg0MjAwCiAjZGVmaW5lICBBUEVfSE9TVF9TRUdfU0lHX01BR0lDCQkgMHg0ODRmNTM1NAogI2RlZmluZSBURzNfQVBFX0hPU1RfU0VHX0xFTgkJMHg0MjA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCmluZGV4IDQzODUzZTMuLjRhNjVmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCkBAIC0yNzQsNiArMjc0LDE1IEBACiAJCiAJcmV0dXJuIDsgCiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeGxfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0geGxfb3BlbiwKKwkubmRvX3N0b3AJCT0geGxfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHhsX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHhsX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB4bF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHhsX3NldF9tYWNfYWRkcmVzcywKK307CiAgCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB4bF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpIApAQCAtMzM3LDEzICszNDYsNyBAQAogCQlyZXR1cm4gaSA7IAogCX0JCQkJCiAKLQlkZXYtPm9wZW49JnhsX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQ9JnhsX3htaXQ7Ci0JZGV2LT5jaGFuZ2VfbXR1PSZ4bF9jaGFuZ2VfbXR1OwotCWRldi0+c3RvcD0meGxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bD1OVUxMOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZ4bF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcz0meGxfc2V0X21hY19hZGRyZXNzIDsgCisJZGV2LT5uZXRkZXZfb3BzID0gJnhsX25ldGRldl9vcHM7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LGRldikgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKaW5kZXggYjU2NmQ2ZC4uYjlkYjFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKQEAgLTkyLDYgKzkyLDggQEAKIAlvdXR3KHZhbCwgZGV2LT5iYXNlX2FkZHIgKyByZWcpOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFieXNzX25ldGRldl9vcHM7CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFieXNzX2F0dGFjaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsJCiAJc3RhdGljIGludCB2ZXJzaW9ucHJpbnRlZDsKQEAgLTE1Nyw4ICsxNTksNyBAQAogCiAJbWVtY3B5KHRwLT5Qcm9kdWN0SUQsICJNYWRnZSBQQ0kgMTYvNCBNazIiLCBQUk9EX0lEX1NJWkUgKyAxKTsKIAkJCi0JZGV2LT5vcGVuID0gYWJ5c3Nfb3BlbjsKLQlkZXYtPnN0b3AgPSBhYnlzc19jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYWJ5c3NfbmV0ZGV2X29wczsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CkBAIC00NTAsNiArNDUxLDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFieXNzX2luaXQgKHZvaWQpCiB7CisJYWJ5c3NfbmV0ZGV2X29wcyA9IHRtczM4MHRyX25ldGRldl9vcHM7CisKKwlhYnlzc19uZXRkZXZfb3BzLm5kb19vcGVuID0gYWJ5c3Nfb3BlbjsKKwlhYnlzc19uZXRkZXZfb3BzLm5kb19zdG9wID0gYWJ5c3NfY2xvc2U7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWJ5c3NfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCBmYTdiY2U2ZTAuLjlkODk2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCkBAIC0yMDAsNyArMjAwLDYgQEAKIHN0YXRpYyB2b2lkCWlibXRyX3Jlc2V0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0KnRtcixzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkCXRva19yZXJ1bih1bnNpZ25lZCBsb25nIGRldl9hZGRyKTsKIHN0YXRpYyB2b2lkCWlibXRyX3JlYWRsb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IAluZXRfZGV2aWNlX3N0YXRzICp0b2tfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludAlpYm10cl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwogc3RhdGljIHZvaWQJZmluZF90dXJib19hZGFwdGVycyhpbnQgKmlvbGlzdCk7CiAKQEAgLTgxNiwxOCArODE1LDIxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0cmRldl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB0b2tfb3BlbiwKKwkubmRvX3N0b3AJCT0gdG9rX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB0b2tfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0b2tfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpYm10cl9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgdHJkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJU0VUX1BBR0UodGktPnNyYl9wYWdlKTsKICAgICAgICAgdGktPm9wZW5fZmFpbHVyZSA9IE5PICAgIDsKLQlkZXYtPm9wZW4gPSB0b2tfb3BlbjsKLQlkZXYtPnN0b3AgPSB0b2tfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB0b2tfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSB0b2tfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdG9rX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpYm10cl9jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZ0cmRldl9uZXRkZXZfb3BzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYwLDcgKzE0NjIsNyBAQAogCQkJCQkiJTAyWFxuIiwKIAkJCQkJKGludClyZXRjb2RlLCAoaW50KXJlYWRiKHRpLT5zc2IgKyA2KSk7CiAJCQllbHNlCi0JCQkJdGktPnRyX3N0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIFhNSVRfWElEX0NNRDoKIAkJCURQUklOVEsoInhtaXQgeGlkIHJldF9jb2RlOiAlMDJYXG4iLApAQCAtMTY0Niw3ICsxNjQ4LDcgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKLQl0aS0+dHJfc3RhdHMudHhfYnl0ZXMgKz0gdGktPmN1cnJlbnRfc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0aS0+Y3VycmVudF9za2ItPmxlbjsKIAlkZXZfa2ZyZWVfc2tiX2lycSh0aS0+Y3VycmVudF9za2IpOwogCXRpLT5jdXJyZW50X3NrYiA9IE5VTEw7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMTcyMiw3ICsxNzI0LDcgQEAKIAlpZiAocmVhZGIobGxjICsgb2Zmc2V0b2Yoc3RydWN0IHRybGxjLCBsbGMpKSAhPSBVSV9DTUQpIHsKIAkJU0VUX1BBR0UodGktPmFzYl9wYWdlKTsKIAkJd3JpdGViKERBVEFfTE9TVCwgdGktPmFzYiArIFJFVENPREVfT0ZTVCk7Ci0JCXRpLT50cl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CiAJCXJldHVybjsKIAl9CkBAIC0xNzU3LDcgKzE3NTksNyBAQAogCiAJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihza2Jfc2l6ZSkpKSB7CiAJCURQUklOVEsoIm91dCBvZiBtZW1vcnkuIGZyYW1lIGRyb3BwZWQuXG4iKTsKLQkJdGktPnRyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCVNFVF9QQUdFKHRpLT5hc2JfcGFnZSk7CiAJCXdyaXRlYihEQVRBX0xPU1QsIHRpLT5hc2IgKyBvZmZzZXRvZihzdHJ1Y3QgYXNiX3JlYywgcmV0X2NvZGUpKTsKIAkJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwpAQCAtMTgxMyw4ICsxODE1LDggQEAKIAogCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKIAotCXRpLT50cl9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQl0aS0+dHJfc3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKElQdjRfcCkgewpAQCAtMTg3NiwyMSArMTg3OCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogdG9rX2dldF9zdGF0cygpOiAgQmFzaWNhbGx5IGEgc2NhZmZvbGQgcm91dGluZSB3aGljaCB3aWxsIHJldHVybgotICAgdGhlIGFkZHJlc3Mgb2YgdGhlIHRyX3N0YXRpc3RpY3Mgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aAotICAgdGhpcyBkZXZpY2UgLS0gdGhlIHRyLi4uLiBzdHJ1Y3R1cmUgaXMgYW4gZXRobmV0IGxvb2stYWxpa2UKLSAgIHNvIGF0IGxlYXN0IGZvciB0aGlzIGl0ZXJhdGlvbiBtYXkgc3VmZmljZS4gICAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnRva19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotCXN0cnVjdCB0b2tfaW5mbyAqdG9raTsKLQl0b2tpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZ0b2tpLT50cl9zdGF0czsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgaW50IGlibXRyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggMjM5Yzc1Mi4uZjMwOWI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTIwNyw3ICsyMDcsNiBAQAogc3RhdGljIGludCBzdHJlYW1lcl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHN0cmVhbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdHJlYW1lcl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX2FyYl9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CkBAIC0yMjIsNiArMjIxLDE4IEBACiAjZW5kaWYKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0cmVhbWVyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHN0cmVhbWVyX29wZW4sCisJLm5kb19zdG9wCQk9IHN0cmVhbWVyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzdHJlYW1lcl94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBzdHJlYW1lcl9jaGFuZ2VfbXR1LAorI2lmIFNUUkVBTUVSX0lPQ1RMCisJLm5kb19kb19pb2N0bAkJPSBzdHJlYW1lcl9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc3RyZWFtZXJfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzdHJlYW1lcl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTMyMSwxOCArMzMyLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdHJlYW1lcl9wcml2LT5zcmJfd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3RyZWFtZXJfcHJpdi0+dHJiX3dhaXQpOwogCi0JZGV2LT5vcGVuID0gJnN0cmVhbWVyX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc3RyZWFtZXJfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmc3RyZWFtZXJfY2hhbmdlX210dTsKLQlkZXYtPnN0b3AgPSAmc3RyZWFtZXJfY2xvc2U7Ci0jaWYgU1RSRUFNRVJfSU9DVEwKLQlkZXYtPmRvX2lvY3RsID0gJnN0cmVhbWVyX2lvY3RsOwotI2Vsc2UKLQlkZXYtPmRvX2lvY3RsID0gTlVMTDsKLSNlbmRpZgotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnN0cmVhbWVyX3NldF9yeF9tb2RlOwotCWRldi0+Z2V0X3N0YXRzID0gJnN0cmVhbWVyX2dldF9zdGF0czsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5uZXRkZXZfb3BzID0gJnN0cmVhbWVyX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJZGV2LT5iYXNlX2FkZHI9cGlvX3N0YXJ0OwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CkBAIC02MTYsOCArNjE2LDYgQEAKIAlwcmludGsoIlNJU1IgTWFzayA9ICUwNHhcbiIsIHJlYWR3KHN0cmVhbWVyX21taW8gKyBTSVNSX01BU0spKTsKICNlbmRpZgogCWRvIHsKLQkJaW50IGk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IFNSQl9DT01NQU5EX1NJWkU7IGkgKz0gMikgewogCQkJd3JpdGV3KDAsIHN0cmVhbWVyX21taW8gKyBMQVBESU5DKTsKIAkJfQpAQCAtOTM3LDcgKzkzNSw3IEBACiAJCQlpZiAoc2tiID09IE5VTEwpIAogCQkJewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IHBhY2tldCB0byB1cHBlciBsYXllcnMuIFxuIiwJZGV2LT5uYW1lKTsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9IGVsc2UgewkvKiB3ZSBhbGxvY2F0ZWQgYW4gc2tiIE9LICovCiAJCQkJaWYgKGJ1ZmZlcl9jbnQgPT0gMSkgewogCQkJCQkvKiByZWxlYXNlIHRoZSBETUEgbWFwcGluZyAqLwpAQCAtMTAwOSw4ICsxMDA3LDggQEAKIAkJCQkJLyogc2VuZCB1cCB0byB0aGUgcHJvdG9jb2wgKi8KIAkJCQkJbmV0aWZfcngoc2tiKTsKIAkJCQl9Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMucnhfcGFja2V0cysrOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAkJCX0JLyogaWYgc2tiID09IG51bGwgKi8KIAkJfQkJLyogZW5kIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3JzICovCiAKQEAgLTEwNTMsOCArMTA1MSw4IEBACiAJCQkJd2hpbGUoc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1soc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyArIDEpICYgKFNUUkVBTUVSX1RYX1JJTkdfU0laRSAtIDEpXS5zdGF0dXMpIHsKIAkJCQlzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzID0gKHN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgKyAxKSAmIChTVFJFQU1FUl9UWF9SSU5HX1NJWkUgLSAxKTsKIAkJCQlzdHJlYW1lcl9wcml2LT5mcmVlX3R4X3JpbmdfZW50cmllcysrOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnR4X2J5dGVzICs9IHN0cmVhbWVyX3ByaXYtPnR4X3Jpbmdfc2tiW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW47Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19za2Jbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShzdHJlYW1lcl9wcml2LT50eF9yaW5nX3NrYltzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXSk7CiAJCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1tzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS5idWZmZXIgPSAweGRlYWRiZWVmOwogCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3R4X3Jpbmdbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10uc3RhdHVzID0gMDsKQEAgLTE0ODQsMTMgKzE0ODIsNiBAQAogCX0JCQkvKiBzd2l0Y2ggc3JiWzBdICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RyZWFtZXJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHN0cmVhbWVyX3ByaXZhdGUgKnN0cmVhbWVyX3ByaXY7Ci0Jc3RyZWFtZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCmluZGV4IDEzY2NlZTYuLjNjNThkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCkBAIC0yOTksNyArMjk5LDYgQEAKIAlpbnQgdHhfcmluZ19mcmVlLCB0eF9yaW5nX2xhc3Rfc3RhdHVzLCByeF9yaW5nX2xhc3RfcmVjZWl2ZWQsCiAJICAgIGZyZWVfdHhfcmluZ19lbnRyaWVzOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RyZWFtZXJfc3RhdHM7CiAJX191MTYgc3RyZWFtZXJfbGFuX3N0YXR1czsKIAlfX3U4IHN0cmVhbWVyX3Jpbmdfc3BlZWQ7CiAJX191MTYgcGt0X2J1Zl9zejsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCmluZGV4IDkxN2I0ZDIuLjQ1NmY4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJcmV0dXJuOwogfQogCi0KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWFkZ2VtY19uZXRkZXZfb3BzIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1hZGdlbWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewkKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQlnb3RvIGdldG91dDsKIAl9CiAKLQlkZXYtPmRtYSA9IDA7CisJZGV2LT5uZXRkZXZfb3BzID0gJm1hZGdlbWNfbmV0ZGV2X29wczsKIAogCWNhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FyZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhcmQ9PU5VTEwpIHsKQEAgLTM0OCw5ICszNDgsNiBAQAogCiAJbWVtY3B5KHRwLT5Qcm9kdWN0SUQsICJNYWRnZSBNQ0EgMTYvNCAgICAiLCBQUk9EX0lEX1NJWkUgKyAxKTsKIAotCWRldi0+b3BlbiA9IG1hZGdlbWNfb3BlbjsKLQlkZXYtPnN0b3AgPSBtYWRnZW1jX2Nsb3NlOwotCiAJdHAtPnRtc3ByaXYgPSBjYXJkOwogCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIGRldik7CiAKQEAgLTY5Miw4ICs2ODksNiBAQAogCQogCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICItLS0tLS0tXG4iKTsKIAlpZiAoY3VyY2FyZCkgewotCQlzdHJ1Y3QgbmV0X2xvY2FsICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JCQogCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiQ2FyZCBSZXZpc2lvbjogJWRcbiIsIGN1cmNhcmQtPmNhcmRyZXYpOwogCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiUkFNIFNpemU6ICVka2JcbiIsIGN1cmNhcmQtPnJhbXNpemUpOwogCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiQ2FibGUgdHlwZTogJXNcbiIsIChjdXJjYXJkLT5jYWJsZXR5cGUpPyJTVFAvREI5IjoiVVRQL1JKLTQ1Iik7CkBAIC03NjAsNiArNzU1LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1hZGdlbWNfaW5pdCAodm9pZCkKIHsKKwltYWRnZW1jX25ldGRldl9vcHMgPSB0bXMzODB0cl9uZXRkZXZfb3BzOworCW1hZGdlbWNfbmV0ZGV2X29wcy5uZG9fb3BlbiA9IG1hZGdlbWNfb3BlbjsKKwltYWRnZW1jX25ldGRldl9vcHMubmRvX3N0b3AgPSBtYWRnZW1jX2Nsb3NlOworCiAJcmV0dXJuIG1jYV9yZWdpc3Rlcl9kcml2ZXIgKCZtYWRnZW1jX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IGVjYjVjN2MuLmQwNjhhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiBzdGF0aWMgdm9pZCBvbHltcGljX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgb2x5bXBpY19mcmVlbWVtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgIAogc3RhdGljIGlycXJldHVybl90IG9seW1waWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBvbHltcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgOyAKIHN0YXRpYyB2b2lkIG9seW1waWNfYXJiX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwpAQCAtMTk1LDYgKzE5NCwxNSBAQAogc3RhdGljIHZvaWQgb2x5bXBpY19hc2JfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAKIHN0YXRpYyBpbnQgb2x5bXBpY19wcm9jX2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpIDsgCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb2x5bXBpY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBvbHltcGljX29wZW4sCisJLm5kb19zdG9wCQk9IG9seW1waWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG9seW1waWNfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gb2x5bXBpY19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gb2x5bXBpY19zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG9seW1waWNfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgb2x5bXBpY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2IDsgCkBAIC0yNTMsMTQgKzI2MSw3IEBACiAJCWdvdG8gb3BfZnJlZV9pb21hcDsKIAl9CQkJCQogCi0JZGV2LT5vcGVuPSZvbHltcGljX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQ9Jm9seW1waWNfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHU9Jm9seW1waWNfY2hhbmdlX210dTsKLQlkZXYtPnN0b3A9Jm9seW1waWNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bD1OVUxMOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZvbHltcGljX3NldF9yeF9tb2RlOwotCWRldi0+Z2V0X3N0YXRzPSZvbHltcGljX2dldF9zdGF0cyA7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3M9Jm9seW1waWNfc2V0X21hY19hZGRyZXNzIDsgIAorCWRldi0+bmV0ZGV2X29wcyA9ICZvbHltcGljX25ldGRldl9vcHM7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LGRldikgOyAKQEAgLTY5OCw3ICs2OTksNiBAQAogCWlmIChvbHltcGljX3ByaXYtPm9seW1waWNfbmV0d29ya19tb25pdG9yKSB7IAogCQl1OCBfX2lvbWVtICpvYXQ7CiAJCXU4IF9faW9tZW0gKm9wdDsKLQkJaW50IGk7CiAJCXU4IGFkZHJbNl07CiAJCW9hdCA9IChvbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgb2x5bXBpY19wcml2LT5vbHltcGljX2FkZHJfdGFibGVfYWRkcik7CiAJCW9wdCA9IChvbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgb2x5bXBpY19wcml2LT5vbHltcGljX3Bhcm1zX2FkZHIpOwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCQkJfSAKIAkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCArPSBpIDsgCiAJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgJj0gKE9MWU1QSUNfUlhfUklOR19TSVpFIC0xKSA7IAotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9lcnJvcnMrKzsJIAorCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQl9IGVsc2UgewkKIAkJCQogCQkJCWlmIChidWZmZXJfY250ID09IDEpIHsKQEAgLTc5Niw3ICs3OTYsNyBAQAogCiAJCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IHBhY2tldCB0byB1cHBlciBsYXllcnMuIFxuIixkZXYtPm5hbWUpIDsKLQkJCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2Ryb3BwZWQrKyA7IAorCQkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQkJLyogVXBkYXRlIGNvdW50ZXJzIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHRyYW5zZmVyIHRoZSBmcmFtZSAqLwogCQkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCArPSBpIDsgCiAJCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICY9IChPTFlNUElDX1JYX1JJTkdfU0laRSAtMSkgOyAgCkBAIC04NjIsOCArODYyLDggQEAKIAkJCQkJCXNrYi0+cHJvdG9jb2wgPSB0cl90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkJCQkJbmV0aWZfcngoc2tiKSA7IAogCQkJCQl9IAotCQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfcGFja2V0cysrIDsgCi0JCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGggOyAKKwkJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKysgOworCQkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCA7CiAJCQkJfSAvKiBpZiBza2IgPT0gbnVsbCAqLwogCQkJfSAvKiBJZiBzdGF0dXMgJiAweDNiICovCiAKQEAgLTk3MSw4ICs5NzEsOCBAQAogCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cysrOwogCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyAmPSAoT0xZTVBJQ19UWF9SSU5HX1NJWkUtMSk7CiAJCQkJb2x5bXBpY19wcml2LT5mcmVlX3R4X3JpbmdfZW50cmllcysrOwotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy50eF9ieXRlcyArPSBvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKLQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMudHhfcGFja2V0cysrIDsgCisJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKyA7CiAJCQkJcGNpX3VubWFwX3NpbmdsZShvbHltcGljX3ByaXYtPnBkZXYsIAogCQkJCQlsZTMyX3RvX2NwdShvbHltcGljX3ByaXYtPm9seW1waWNfdHhfcmluZ1tvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLmJ1ZmZlciksIAogCQkJCQlvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbixQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTEzNDQsMTMgKzEzNDQsNiBAQAogCiB9IAogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBvbHltcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvbHltcGljX3ByaXZhdGUgKm9seW1waWNfcHJpdiA7Ci0Jb2x5bXBpY19wcml2PW5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzOyAKLX0KLQogc3RhdGljIGludCBvbHltcGljX3NldF9tYWNfYWRkcmVzcyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHIgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oCmluZGV4IDEwZmJiYTAuLjMwNjMxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaApAQCAtMjc1LDcgKzI3NSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3Jpbmdfc2tiW09MWU1QSUNfVFhfUklOR19TSVpFXSwgKnJ4X3Jpbmdfc2tiW09MWU1QSUNfUlhfUklOR19TSVpFXTsJCiAJaW50IHR4X3JpbmdfZnJlZSwgdHhfcmluZ19sYXN0X3N0YXR1cywgcnhfcmluZ19sYXN0X3JlY2VpdmVkLHJ4X3N0YXR1c19sYXN0X3JlY2VpdmVkLCBmcmVlX3R4X3JpbmdfZW50cmllczsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG9seW1waWNfc3RhdHMgOwogCXUxNiBvbHltcGljX2xhbl9zdGF0dXMgOwogCXU4IG9seW1waWNfcmluZ19zcGVlZCA7CiAJdTE2IHBrdF9idWZfc3ogOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCmluZGV4IGI4Yzk1NWYuLjE2ZTg3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYwpAQCAtMTE2LDYgKzExNiw4IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHJvdGVvbl9uZXRkZXZfb3BzIF9fcmVhZF9tb3N0bHk7CisKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICp0cDsKQEAgLTE2Nyw4ICsxNjksNyBAQAogCiAJdHAtPnRtc3ByaXYgPSBOVUxMOwogCi0JZGV2LT5vcGVuID0gcHJvdGVvbl9vcGVuOwotCWRldi0+c3RvcCA9IHRtczM4MHRyX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcyA9ICZwcm90ZW9uX25ldGRldl9vcHM7CiAKIAlpZiAoZGV2LT5pcnEgPT0gMCkKIAl7CkBAIC0zNTIsNiArMzUzLDEwIEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAorCXByb3Rlb25fbmV0ZGV2X29wcyA9IHRtczM4MHRyX25ldGRldl9vcHM7CisJcHJvdGVvbl9uZXRkZXZfb3BzLm5kb19vcGVuID0gcHJvdGVvbl9vcGVuOworCXByb3Rlb25fbmV0ZGV2X29wcy5uZG9fc3RvcCA9IHRtczM4MHRyX2Nsb3NlOworCiAJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwcm90ZW9uX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMKaW5kZXggYzBmNThmMC4uNDZkYjVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMKQEAgLTEzMyw2ICsxMzMsOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNrX2lzYV9uZXRkZXZfb3BzIF9fcmVhZF9tb3N0bHk7CisKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICp0cDsKQEAgLTE4NCw4ICsxODYsNyBAQAogCiAJdHAtPnRtc3ByaXYgPSBOVUxMOwogCi0JZGV2LT5vcGVuID0gc2tfaXNhX29wZW47Ci0JZGV2LT5zdG9wID0gdG1zMzgwdHJfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNrX2lzYV9uZXRkZXZfb3BzOwogCiAJaWYgKGRldi0+aXJxID09IDApCiAJewpAQCAtMzYyLDYgKzM2MywxMCBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IGksIG51bSA9IDAsIGVyciA9IDA7CiAKKwlza19pc2FfbmV0ZGV2X29wcyA9IHRtczM4MHRyX25ldGRldl9vcHM7CisJc2tfaXNhX25ldGRldl9vcHMubmRvX29wZW4gPSBza19pc2Ffb3BlbjsKKwlza19pc2FfbmV0ZGV2X29wcy5uZG9fc3RvcCA9IHRtczM4MHRyX2Nsb3NlOworCiAJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwppbmRleCA1MGViMjljLi5hOTFkOWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwpAQCAtNjEsNyArNjEsOCBAQAogCiAjaW5jbHVkZSAic21jdHIuaCIgICAgICAgICAgICAgICAvKiBPdXIgU3R1ZmYgKi8KIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gInNtY3RyLmM6IHYxLjQgNy8xMi8wMCBieSBqc2NobHN0QHNhbWJhLm9yZ1xuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0KKwlLRVJOX0lORk8gInNtY3RyLmM6IHYxLjQgNy8xMi8wMCBieSBqc2NobHN0QHNhbWJhLm9yZ1xuIjsKIHN0YXRpYyBjb25zdCBjaGFyIGNhcmRuYW1lW10gPSAic21jdHIiOwogCiAKQEAgLTEyMyw3ICsxMjQsNiBAQAogc3RhdGljIGludCBzbWN0cl9nZXRfcGh5c2ljYWxfZHJvcF9udW1iZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgX191OCAqc21jdHJfZ2V0X3J4X3BvaW50ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2hvcnQgcXVldWUpOwogc3RhdGljIGludCBzbWN0cl9nZXRfc3RhdGlvbl9pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc21jdHJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIEZDQmxvY2sgKnNtY3RyX2dldF90eF9mY2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191MTYgcXVldWUsCiAgICAgICAgIF9fdTE2IGJ5dGVzX2NvdW50KTsKIHN0YXRpYyBpbnQgc21jdHJfZ2V0X3Vwc3RyZWFtX25laWdoYm9yX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0zNjMyLDYgKzM2MzIsMTQgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtY3RyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgID0gc21jdHJfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgPSBzbWN0cl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgPSBzbWN0cl9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJICAgPSBzbWN0cl90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzICAgICA9IHNtY3RyX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNtY3RyX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IHNtY3RyX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQogewpAQCAtMzY4MiwxMyArMzY5MCw4IEBACiAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClkZXYtPmJhc2VfYWRkciwKICAgICAgICAgICAgICAgICBkZXYtPmlycSwgdHAtPnJvbV9iYXNlLCB0cC0+cmFtX2Jhc2UpOwogCi0gICAgICAgIGRldi0+b3BlbiAgICAgICAgICAgICAgID0gc21jdHJfb3BlbjsKLSAgICAgICAgZGV2LT5zdG9wICAgICAgICAgICAgICAgPSBzbWN0cl9jbG9zZTsKLSAgICAgICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgPSBzbWN0cl9zZW5kX3BhY2tldDsKLSAgICAgICAgZGV2LT50eF90aW1lb3V0CQk9IHNtY3RyX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNtY3RyX25ldGRldl9vcHM7CiAgICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWjsKLSAgICAgICAgZGV2LT5nZXRfc3RhdHMgICAgICAgICAgPSBzbWN0cl9nZXRfc3RhdHM7Ci0gICAgICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNtY3RyX3NldF9tdWx0aWNhc3RfbGlzdDsKICAgICAgICAgcmV0dXJuICgwKTsKIAogb3V0OgpAQCAtNDM5Miw1MiArNDM5NSw0MiBAQAogICAgICAgICB7CiAgICAgICAgICAgICAgICAgY2FzZSBSSU5HX1JFQ09WRVJZOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJpbmcgUmVjb3ZlcnlcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBSSU5HX1JFQ09WRVJZOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFNJTkdMRV9TVEFUSU9OOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpbmdsZSBTdGF0aW5vblxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFNJTkdMRV9TVEFUSU9OOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIENPVU5URVJfT1ZFUkZMT1c6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ291bnRlciBPdmVyZmxvd1xuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IENPVU5URVJfT1ZFUkZMT1c7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUkVNT1ZFX1JFQ0VJVkVEOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlbW92ZSBSZWNlaXZlZFxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFJFTU9WRV9SRUNFSVZFRDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBBVVRPX1JFTU9WQUxfRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQXV0byBSZW1vdmUgRXJyb3JcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBBVVRPX1JFTU9WQUxfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgTE9CRV9XSVJFX0ZBVUxUOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExvYmUgV2lyZSBGYXVsdFxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IExPQkVfV0lSRV9GQVVMVDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBUUkFOU01JVF9CRUFDT046CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogVHJhbnNtaXQgQmVhY29uXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gVFJBTlNNSVRfQkVBQ09OOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFNPRlRfRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU29mdCBFcnJvclxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFNPRlRfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgSEFSRF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBIYXJkIEVycm9yXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gSEFSRF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBTSUdOQUxfTE9TUzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBTaWduYWwgTG9zc1xuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFNJR05BTF9MT1NTOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuaAppbmRleCA1MmRmN2RkLi42ZTU3MDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuaAorKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuaApAQCAtOTc3LDcgKzk3Nyw2IEBACiAJX191OAkJbW9uaXRvcl9zdGF0ZV9yZWFkeTsKIAlfX3UxNgkJcmluZ19zdGF0dXM7CiAJX191OAkJcmluZ19zdGF0dXNfZmxhZ3M7Ci0JX191OAkJY3VycmVudF9yaW5nX3N0YXR1czsKIAlfX3U4CQlzdGF0ZTsKIAogCV9fdTgJCWpvaW5fc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jCmluZGV4IDViZTM0YzIuLmIxMWJiNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jCkBAIC0yMzMwLDYgKzIzMzAsMTcgQEAKIAkJRE1BX0JJRElSRUNUSU9OQUwpOwogfQogCitjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdG1zMzgwdHJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdG1zMzgwdHJfb3BlbiwKKwkubmRvX3N0b3AJCT0gdG1zMzgwdHJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHRtczM4MHRyX3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dAkJPSB0bXMzODB0cl90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHRtczM4MHRyX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHRtczM4MHRyX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHRtczM4MHRyX3NldF9tYWNfYWRkcmVzcywKK307CitFWFBPUlRfU1lNQk9MKHRtczM4MHRyX25ldGRldl9vcHMpOworCiBpbnQgdG1zZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICp0bXNfbG9jYWw7CkBAIC0yMzUzLDE2ICsyMzY0LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCQotCS8qIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjYXJkIGRyaXZlciBpZiBuZWVkZWQgKi8KLQlkZXYtPm9wZW4JCT0gdG1zMzgwdHJfb3BlbjsKLQlkZXYtPnN0b3AJCT0gdG1zMzgwdHJfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bAkJPSBOVUxMOyAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHRtczM4MHRyX3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dAkJPSB0bXMzODB0cl90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmdG1zMzgwdHJfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFo7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gdG1zMzgwdHJfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnRtczM4MHRyX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcwk9IHRtczM4MHRyX3NldF9tYWNfYWRkcmVzczsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuaAppbmRleCA3YWY3NmQ3Li42MGIzMGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuaAorKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAvKiBtb2R1bGUgcHJvdG90eXBlcyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0bXMzODB0cl9uZXRkZXZfb3BzOwogaW50IHRtczM4MHRyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgdG1zMzgwdHJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpcnFyZXR1cm5fdCB0bXMzODB0cl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYwppbmRleCBlMjE1MGIzLi5mOTJmZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCkBAIC0xNTIsMTMgKzE1MiwxMyBAQAogCiAJdHAtPnRtc3ByaXYgPSBjYXJkaW5mbzsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZ0bXMzODB0cl9uZXRkZXZfb3BzOworCiAJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCB0bXMzODB0cl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfb3V0X3Rtc2RldjsKIAotCWRldi0+b3BlbiA9IHRtczM4MHRyX29wZW47Ci0JZGV2LT5zdG9wID0gdG1zMzgwdHJfY2xvc2U7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCmluZGV4IGE5ZmQyYjIuLmJiNDNlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYworKysgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKQEAgLTg4OCw3ICs4ODgsNyBAQAogCiAJaWYgKG51bV9yZWNlaXZlZCA8IGJ1ZGdldCkgewogCQlkYXRhLT5yeHBlbmRpbmcgPSAwOwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0lOVE1BU0ssCiAJCQkJICAgICBUU0lfUkVBRChUU0kxMDhfRUNfSU5UTUFTSykKQEAgLTkxNSwxMSArOTE1LDExIEBACiAJICoKIAkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhpcyBjb2RlIHJhY2VzIHdpdGggdHNpMTA4X3BvbGwoKSwgd2hpY2ggbWFza3MKIAkgKiB0aGUgaW50ZXJydXB0cyBhZnRlciB0c2kxMDhfaXJxX29uZSgpIHJlYWQgdGhlIG1hc2ssIGJ1dCBiZWZvcmUKLQkgKiBuZXRpZl9yeF9zY2hlZHVsZSBpcyBjYWxsZWQuICBJdCBjb3VsZCBhbHNvIGhhcHBlbiBkdWUgdG8gY2FsbHMKKwkgKiBuYXBpX3NjaGVkdWxlIGlzIGNhbGxlZC4gIEl0IGNvdWxkIGFsc28gaGFwcGVuIGR1ZSB0byBjYWxscwogCSAqIGZyb20gdHNpMTA4X2NoZWNrX3J4cmluZygpLgogCSAqLwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmRhdGEtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmZGF0YS0+bmFwaSkpIHsKIAkJLyogTWFzaywgcmF0aGVyIHRoYW4gYWNrLCB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAgVGhlIGFjawogCQkgKiB3aWxsIGhhcHBlbiBpbiB0c2kxMDhfcG9sbCgpLgogCQkgKi8KQEAgLTkzMCw3ICs5MzAsNyBAQAogCQkJCSAgICAgfCBUU0kxMDhfSU5UX1JYVEhSRVNIIHwKIAkJCQkgICAgIFRTSTEwOF9JTlRfUlhPVkVSUlVOIHwgVFNJMTA4X0lOVF9SWEVSUk9SIHwKIAkJCQkgICAgIFRTSTEwOF9JTlRfUlhXQUlUKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZGF0YS0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmZGF0YS0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIHdoaWxlIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKaW5kZXggNjQxOGY3NC4uZjk0OTFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCkBAIC00NzksNyArNDc5LDggQEAKIAogI2luY2x1ZGUgImRlNHg1LmgiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0gImRlNHg1LmM6VjAuNTQ2IDIwMDEvMDIvMjIgZGF2aWVzQG1hbmlhYy51bHRyYW5ldC5jb21cbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyAiZGU0eDUuYzpWMC41NDYgMjAwMS8wMi8yMiBkYXZpZXNAbWFuaWFjLnVsdHJhbmV0LmNvbVxuIjsKIAogI2RlZmluZSBjX2NoYXIgY29uc3QgY2hhcgogCkBAIC0zOTQxLDggKzM5NDIsOCBAQAogCXN0cmNweShuYW1lLCAiREU0MzQvNSIpOwogCXJldHVybiBzdGF0dXM7CiAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWFyY2ggZm9yIGEgREVDIG5hbWUgaW4gdGhlIFNST00gKi8KLQlpbnQgaSA9ICooKGNoYXIgKikmbHAtPnNyb20gKyAxOSkgKiAzOwotCXN0cm5jcHkobmFtZSwgKGNoYXIgKikmbHAtPnNyb20gKyAyNiArIGksIDgpOworCWludCB0bXAgPSAqKChjaGFyICopJmxwLT5zcm9tICsgMTkpICogMzsKKwlzdHJuY3B5KG5hbWUsIChjaGFyICopJmxwLT5zcm9tICsgMjYgKyB0bXAsIDgpOwogICAgIH0KICAgICBuYW1lWzhdID0gJ1wwJzsKICAgICBmb3IgKGk9MDsgaTxzaWdsZW47IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDJlNWM5OTkuLmUyYzlkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCiAvKiBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBwcmludGVkX3ZlcnNpb247Ci1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogCUtFUk5fSU5GTyBEUlZfTkFNRSAiOiBEYXZpY29tIERNOXh4eCBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKIAlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCmluZGV4IDZjMzQyOGEuLmM4ZDIyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIHsKICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIH0KIAogaW50IHR1bGlwX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtMTQwLDYgKzE0MCw3IEBACiAgICAgICAgICAgICAgICAvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0IGlzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KICAgICAgICAgICAgICAgIHdoaWxlICggISAodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyAmIGNwdV90b19sZTMyKERlc2NPd25lZCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMzMiBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKwkJICAgICAgIHNob3J0IHBrdF9sZW47CiAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSA9PSB0cC0+Y3VyX3J4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUxLDggKzE1MiwyOCBAQAogCQkgICAgICAgaWYgKCsrd29ya19kb25lID49IGJ1ZGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5vdF9kb25lOwogCi0gICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHgzODAwODMwMCkgIT0gMHgwMzAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweDM4MDAwMzAwKSAhPSAweDAzMDApIHsKKwkJICAgICAgIC8qCisJCQkqIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4KKwkJCSogKE1heSBub3QgYmUgY29uc2lkZXJlZCB2YWxpZCB1bnRpbCB3ZSBoYXZlCisJCQkqIGNoZWNrZWQgc3RhdHVzIGZvciBSeExlbmd0aE92ZXIyMDQ3IGJpdHMpCisJCQkqLworCQkgICAgICAgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CisKKwkJICAgICAgIC8qCisJCQkqIE1heGltdW0gcGt0X2xlbiBpcyAxNTE4ICgxNTE0ICsgdmxhbiBoZWFkZXIpCisJCQkqIEFueXRoaW5nIGhpZ2hlciB0aGFuIHRoaXMgaXMgYWx3YXlzIGludmFsaWQKKwkJCSogcmVnYXJkbGVzcyBvZiBSeExlbmd0aE92ZXIyMDQ3IGJpdHMKKwkJCSovCisKKwkJICAgICAgIGlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJCSAgICAgIFJ4RGVzY0NSQ0Vycm9yIHwKKwkJCQkgICAgICBSeERlc2NDb2xsaXNpb25TZWVuIHwKKwkJCQkgICAgICBSeERlc2NSdW50IHwKKwkJCQkgICAgICBSeERlc2NEZXNjRXJyIHwKKwkJCQkgICAgICBSeFdob2xlUGt0KSkgIT0gUnhXaG9sZVBrdAorCQkJICAgfHwgcGt0X2xlbiA+IDE1MTgpIHsKKwkJCSAgICAgICBpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCQkJICAgICAgUnhXaG9sZVBrdCkpICE9IFJ4V2hvbGVQa3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMSkKQEAgLTE2MSwzMCArMTgyLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAmIFJ4RGVzY0ZhdGFsRXJyKSB7CisJCQkgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHVsaXBfZGVidWcgPiAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlOC44eC5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfZXJyb3JzKys7IC8qIGVuZCBvZiBhIHBhY2tldC4qLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDg5MCkgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQkgICAgICAgaWYgKHBrdF9sZW4gPiAxNTE4IHx8CisJCQkJCSAgIChzdGF0dXMgJiBSeERlc2NSdW50KSkKKwkJCQkJICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDAwMDQpIHRwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDAwMDIpIHRwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwMDAxKSB0cC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2I7CiAKLSNpZm5kZWYgZmluYWxfdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwa3RfbGVuID4gMTUxOCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEJvZ3VzIHBhY2tldCBzaXplIG9mICVkICglI3gpLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4sIHBrdF9sZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2xlbiA9IDE1MTg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgbWluaW1hbGx5LXNpemVkIHNrYnVmZi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGt0X2xlbiA8IHR1bGlwX3J4X2NvcHlicmVhawpAQCAtMzAwLDcgKzMxNCw3IEBACiAKICAgICAgICAgIC8qIFJlbW92ZSB1cyBmcm9tIHBvbGxpbmcgbGlzdCBhbmQgZW5hYmxlIFJYIGludHIuICovCiAKLSAgICAgICAgIG5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworICAgICAgICAgbmFwaV9jb21wbGV0ZShuYXBpKTsKICAgICAgICAgIGlvd3JpdGUzMih0dWxpcF90YmxbdHAtPmNoaXBfaWRdLnZhbGlkX2ludHJzLCB0cC0+YmFzZV9hZGRyK0NTUjcpOwogCiAgICAgICAgICAvKiBUaGUgbGFzdCBvcCBoYXBwZW5zIGFmdGVyIHBvbGwgY29tcGxldGlvbi4gV2hpY2ggbWVhbnMgdGhlIGZvbGxvd2luZzoKQEAgLTMzMywxMCArMzQ3LDEwIEBACiAKICAgICAgICAgIC8qIFRoaW5rOiB0aW1lcl9wZW5kaW5nKCkgd2FzIGFuIGV4cGxpY2l0IHNpZ25hdHVyZSBvZiBidWcuCiAgICAgICAgICAgKiBUaW1lciBjYW4gYmUgcGVuZGluZyBub3cgYnV0IGZpcmVkIGFuZCBjb21wbGV0ZWQKLSAgICAgICAgICAqIGJlZm9yZSB3ZSBkaWQgbmV0aWZfcnhfY29tcGxldGUoKS4gU2VlPyBXZSB3b3VsZCBsb3NlIGl0LiAqLworICAgICAgICAgICogYmVmb3JlIHdlIGRpZCBuYXBpX2NvbXBsZXRlKCkuIFNlZT8gV2Ugd291bGQgbG9zZSBpdC4gKi8KIAogICAgICAgICAgLyogcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBwb2xsaW5nIGxpc3QgKi8KLSAgICAgICAgIG5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworICAgICAgICAgbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogICAgICAgICAgcmV0dXJuIHdvcmtfZG9uZTsKIH0KQEAgLTM1NiwxNCArMzcwLDM1IEBACiAJLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCBpcyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAJd2hpbGUgKCAhICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzICYgY3B1X3RvX2xlMzIoRGVzY093bmVkKSkpIHsKIAkJczMyIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOworCQlzaG9ydCBwa3RfbGVuOwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDUpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICU4Ljh4LlxuIiwKIAkJCQkgICBkZXYtPm5hbWUsIGVudHJ5LCBzdGF0dXMpOwogCQlpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkKIAkJCWJyZWFrOwotCQlpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewotCQkJaWYgKChzdGF0dXMgJiAweDM4MDAwMzAwKSAhPSAweDAzMDApIHsKKworCQkvKgorCQkgIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4KKwkJICAoTWF5IG5vdCBiZSBjb25zaWRlcmVkIHZhbGlkIHVudGlsIHdlIGhhdmUKKwkJICBjaGVja2VkIHN0YXR1cyBmb3IgUnhMZW5ndGhPdmVyMjA0NyBiaXRzKQorCQkqLworCQlwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKKwkJLyoKKwkJICBNYXhpbXVtIHBrdF9sZW4gaXMgMTUxOCAoMTUxNCArIHZsYW4gaGVhZGVyKQorCQkgIEFueXRoaW5nIGhpZ2hlciB0aGFuIHRoaXMgaXMgYWx3YXlzIGludmFsaWQKKwkJICByZWdhcmRsZXNzIG9mIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cworCQkqLworCisJCWlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJICAgICAgIFJ4RGVzY0NSQ0Vycm9yIHwKKwkJCSAgICAgICBSeERlc2NDb2xsaXNpb25TZWVuIHwKKwkJCSAgICAgICBSeERlc2NSdW50IHwKKwkJCSAgICAgICBSeERlc2NEZXNjRXJyIHwKKwkJCSAgICAgICBSeFdob2xlUGt0KSkgICAgICAgICE9IFJ4V2hvbGVQa3QKKwkJICAgICB8fCBwa3RfbGVuID4gMTUxOCkgeworCQkJaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkgICAgIFJ4V2hvbGVQa3QpKSAgICAgICAgICE9IFJ4V2hvbGVQa3QpIHsKIAkJCQkvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogCQkJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKQEAgLTM3MiwzMSArNDA3LDIyIEBACiAJCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCX0KLQkJCX0gZWxzZSBpZiAoc3RhdHVzICYgUnhEZXNjRmF0YWxFcnIpIHsKKwkJCX0gZWxzZSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKIAkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAogCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJCXRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCi0JCQkJaWYgKHN0YXR1cyAmIDB4MDg5MCkgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlpZiAocGt0X2xlbiA+IDE1MTggfHwKKwkJCQkgICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQorCQkJCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiAweDAwMDQpIHRwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDAyKSB0cC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiAweDAwMDEpIHRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJfQogCQl9IGVsc2UgewotCQkJLyogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLiAqLwotCQkJc2hvcnQgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0jaWZuZGVmIGZpbmFsX3ZlcnNpb24KLQkJCWlmIChwa3RfbGVuID4gMTUxOCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCb2d1cyBwYWNrZXQgc2l6ZSBvZiAlZCAoJSN4KS5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgcGt0X2xlbiwgcGt0X2xlbik7Ci0JCQkJcGt0X2xlbiA9IDE1MTg7Ci0JCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCX0KLSNlbmRpZgotCiAJCQkvKiBDaGVjayBpZiB0aGUgcGFja2V0IGlzIGxvbmcgZW5vdWdoIHRvIGFjY2VwdCB3aXRob3V0IGNvcHlpbmcKIAkJCSAgIHRvIGEgbWluaW1hbGx5LXNpemVkIHNrYnVmZi4gKi8KIAkJCWlmIChwa3RfbGVuIDwgdHVsaXBfcnhfY29weWJyZWFrCkBAIC01MTksNyArNTQ1LDcgQEAKIAkJCXJ4ZCsrOwogCQkJLyogTWFzayBSWCBpbnRycyBhbmQgYWRkIHRoZSBkZXZpY2UgdG8gcG9sbCBsaXN0LiAqLwogCQkJaW93cml0ZTMyKHR1bGlwX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMmflJ4UG9sbEludCwgaW9hZGRyICsgQ1NSNyk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJCQlpZiAoIShjc3I1Jn4oQWJub3JtYWxJbnRyfE5vcm1hbEludHJ8UnhQb2xsSW50fFRQTG5rUGFzcykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKaW5kZXggOTFjZjljOC4uZGFkZGZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCkBAIC02OSwxMSArNjksMTAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bWlpX2xvY2ssIGZsYWdzKTsKIAlpZiAodHAtPmNoaXBfaWQgPT0gTEM4MkMxNjgpIHsKLQkJaW50IGkgPSAxMDAwOwogCQlpb3dyaXRlMzIoMHg2MDAyMDAwMCArIChwaHlfaWQ8PDIzKSArIChsb2NhdGlvbjw8MTgpLCBpb2FkZHIgKyAweEEwKTsKIAkJaW9yZWFkMzIoaW9hZGRyICsgMHhBMCk7CiAJCWlvcmVhZDMyKGlvYWRkciArIDB4QTApOwotCQl3aGlsZSAoLS1pID4gMCkgeworCQlmb3IgKGkgPSAxMDAwOyBpID49IDA7IC0taSkgewogCQkJYmFycmllcigpOwogCQkJaWYgKCAhICgocmV0dmFsID0gaW9yZWFkMzIoaW9hZGRyICsgMHhBMCkpICYgMHg4MDAwMDAwMCkpCiAJCQkJYnJlYWs7CkBAIC0xMzEsMTMgKzEzMCwxMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5taWlfbG9jaywgZmxhZ3MpOwogCWlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewotCQlpbnQgaSA9IDEwMDA7CiAJCWlvd3JpdGUzMihjbWQsIGlvYWRkciArIDB4QTApOwotCQlkbyB7CisJCWZvciAoaSA9IDEwMDA7IGkgPj0gMDsgLS1pKSB7CiAJCQliYXJyaWVyKCk7CiAJCQlpZiAoICEgKGlvcmVhZDMyKGlvYWRkciArIDB4QTApICYgMHg4MDAwMDAwMCkpCiAJCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKC0taSA+IDApOworCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5taWlfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggMTlhYmJjMy4uMGFmYTJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC0yMDEsOCArMjAxLDM4IEBACiAJRGVzY1N0YXJ0UGt0ID0gMHgyMDAwMDAwMCwKIAlEZXNjRW5kUmluZyAgPSAweDAyMDAwMDAwLAogCURlc2NVc2VMaW5rICA9IDB4MDEwMDAwMDAsCi0JUnhEZXNjRmF0YWxFcnIgPSAweDAwODAwMCwKKworCS8qCisJICogRXJyb3Igc3VtbWFyeSBmbGFnIGlzIGxvZ2ljYWwgb3Igb2YgJ0NSQyBFcnJvcicsICdDb2xsaXNpb24gU2VlbicsCisJICogJ0ZyYW1lIFRvbyBMb25nJywgJ1J1bnQnIGFuZCAnRGVzY3JpcHRvciBFcnJvcicgZmxhZ3MgZ2VuZXJhdGVkCisJICogd2l0aGluIHR1bGlwIGNoaXAuCisJICovCisJUnhEZXNjRXJyb3JTdW1tYXJ5ID0gMHg4MDAwLAorCVJ4RGVzY0NSQ0Vycm9yID0gMHgwMDAyLAorCVJ4RGVzY0NvbGxpc2lvblNlZW4gPSAweDAwNDAsCisKKwkvKgorCSAqICdGcmFtZSBUb28gTG9uZycgZmxhZyBpcyBzZXQgaWYgcGFja2V0IGxlbmd0aCBpbmNsdWRpbmcgQ1JDIGV4Y2VlZHMKKwkgKiAxNTE4LiAgSG93ZXZlciwgYSBmdWxsIHNpemVkIFZMQU4gdGFnZ2VkIGZyYW1lIGlzIDE1MjIgYnl0ZXMKKwkgKiBpbmNsdWRpbmcgQ1JDLgorCSAqCisJICogVGhlIHR1bGlwIGNoaXAgZG9lcyBub3QgYmxvY2sgb3ZlcnNpemVkIGZyYW1lcywgYW5kIGlmIHRoaXMgZmxhZyBpcworCSAqIHNldCBvbiBhIHJlY2VpdmUgZGVzY3JpcHRvciBpdCBkb2VzIG5vdCBpbmRpY2F0ZSB0aGUgZnJhbWUgaGFzIGJlZW4KKwkgKiB0cnVuY2F0ZWQuICBUaGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGFsc28gaW5jbHVkZXMgdGhlIGFjdHVhbCBsZW5ndGguCisJICogVGhlcmVmb3JlIHdlIGNhbiBzYWZldHkgaWdub3JlIHRoaXMgZmxhZyBhbmQgY2hlY2sgdGhlIGxlbmd0aAorCSAqIG91cnNlbHZlcy4KKwkgKi8KKwlSeERlc2NGcmFtZVRvb0xvbmcgPSAweDAwODAsCisJUnhEZXNjUnVudCA9IDB4MDgwMCwKKwlSeERlc2NEZXNjRXJyID0gMHg0MDAwLAogCVJ4V2hvbGVQa3QgICA9IDB4MDAwMDAzMDAsCisJLyoKKwkgKiBUb3AgdGhyZWUgYml0cyBvZiAxNCBiaXQgZnJhbWUgbGVuZ3RoIChzdGF0dXMgYml0cyAyNy0yOSkgc2hvdWxkCisJICogbmV2ZXIgYmUgc2V0IGFzIHRoYXQgd291bGQgbWFrZSBmcmFtZSBvdmVyIDIwNDcgYnl0ZXMuIFRoZSBSZWNlaXZlCisJICogV2F0Y2hkb2cgZmxhZyAoYml0IDQpIG1heSBpbmRpY2F0ZSB0aGUgbGVuZ3RoIGlzIG92ZXIgMjA0OCBhbmQgdGhlCisJICogbGVuZ3RoIGZpZWxkIGlzIGludmFsaWQuCisJICovCisJUnhMZW5ndGhPdmVyMjA0NyA9IDB4MzgwMDAwMTAKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCmluZGV4IGJlZTc1ZmEuLjJhYmI1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKQEAgLTI1NSw2ICsyNTUsNyBAQAogCiBzdGF0aWMgdm9pZCB0dWxpcF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdHVsaXBfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgdHVsaXBfZnJlZV9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTUwMiwxNiArNTAzLDIxIEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpKQotCQlyZXR1cm4gcmV0dmFsOwotCiAJdHVsaXBfaW5pdF9yaW5nIChkZXYpOwogCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmcmVlX3Jpbmc7CisKIAl0dWxpcF91cCAoZGV2KTsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOwogCiAJcmV0dXJuIDA7CisKK2ZyZWVfcmluZzoKKwl0dWxpcF9mcmVlX3JpbmcgKGRldik7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC03NjgsMjMgKzc3NCwxMSBAQAogCXR1bGlwX3NldF9wb3dlcl9zdGF0ZSAodHAsIDAsIDEpOwogfQogCi0KLXN0YXRpYyBpbnQgdHVsaXBfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0dWxpcF9mcmVlX3JpbmcgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5iYXNlX2FkZHI7CiAJaW50IGk7CiAKLQluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOwotCi0JdHVsaXBfZG93biAoZGV2KTsKLQotCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUyLjJ4LlxuIiwKLQkJCWRldi0+bmFtZSwgaW9yZWFkMzIgKGlvYWRkciArIENTUjUpKTsKLQotCWZyZWVfaXJxIChkZXYtPmlycSwgZGV2KTsKLQogCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRwLT5yeF9idWZmZXJzW2ldLnNrYjsKQEAgLTgwMyw2ICs3OTcsNyBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJfQogCX0KKwogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHAtPnR4X2J1ZmZlcnNbaV0uc2tiOwogCkBAIC04MTQsNiArODA5LDI0IEBACiAJCXRwLT50eF9idWZmZXJzW2ldLnNrYiA9IE5VTEw7CiAJCXRwLT50eF9idWZmZXJzW2ldLm1hcHBpbmcgPSAwOwogCX0KK30KKworc3RhdGljIGludCB0dWxpcF9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPmJhc2VfYWRkcjsKKworCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CisKKwl0dWxpcF9kb3duIChkZXYpOworCisJaWYgKHR1bGlwX2RlYnVnID4gMSkKKwkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAorCQkJZGV2LT5uYW1lLCBpb3JlYWQzMiAoaW9hZGRyICsgQ1NSNSkpOworCisJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOworCisJdHVsaXBfZnJlZV9yaW5nIChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggMDMwZTAyZS4uYzIyN2RiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAJS0VSTl9JTkZPIERSVl9OQU1FICI6IFVMaSBNNTI2MS9NNTI2MyBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKIAlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCBmNDY3YmY4Li5jNjFhMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTEzOSw5ICsxMzksMTAgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4qLwogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAoMi40IHBvcnQpICIgRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2luaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICgyLjQgcG9ydCkgIgorCURSVl9SRUxEQVRFICIgIERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCisJS0VSTl9JTkZPICIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZHJpdmVycy5odG1sXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDA5ZmVhMzEuLmExYjA2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC02Myw2ICs2Myw4IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODcsMjYgKzg5LDEyNyBAQAogCXVuc2lnbmVkIGNoYXIJYWRkcltGTFRfRVhBQ1RfQ09VTlRdW0VUSF9BTEVOXTsKIH07CiAKK3N0cnVjdCB0dW5fZmlsZSB7CisJYXRvbWljX3QgY291bnQ7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OworfTsKKworc3RydWN0IHR1bl9zb2NrOworCiBzdHJ1Y3QgdHVuX3N0cnVjdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKKwlzdHJ1Y3QgdHVuX2ZpbGUJCSp0ZmlsZTsKIAl1bnNpZ25lZCBpbnQgCQlmbGFnczsKLQlpbnQJCQlhdHRhY2hlZDsKIAl1aWRfdAkJCW93bmVyOwogCWdpZF90CQkJZ3JvdXA7CiAKLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWFkcTsKIAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luYzsKIAogCXN0cnVjdCB0YXBfZmlsdGVyICAgICAgIHR4Zmx0OworCXN0cnVjdCBzb2NrCQkqc2s7CisJc3RydWN0IHNvY2tldAkJc29ja2V0OwogCiAjaWZkZWYgVFVOX0RFQlVHCiAJaW50IGRlYnVnOwogI2VuZGlmCiB9OwogCitzdHJ1Y3QgdHVuX3NvY2sgeworCXN0cnVjdCBzb2NrCQlzazsKKwlzdHJ1Y3QgdHVuX3N0cnVjdAkqdHVuOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHVuX3NvY2sgKnR1bl9zayhzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayk7Cit9CisKK3N0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJaW50IGVycjsKKworCUFTU0VSVF9SVE5MKCk7CisKKwkvKiBDaGVjayBwZXJtaXNzaW9ucyAqLworCWlmICgoKHR1bi0+b3duZXIgIT0gLTEgJiYgY3JlZC0+ZXVpZCAhPSB0dW4tPm93bmVyKSB8fAorCSAgICAgKHR1bi0+Z3JvdXAgIT0gLTEgJiYgIWluX2Vncm91cF9wKHR1bi0+Z3JvdXApKSkgJiYKKwkJIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwluZXRpZl90eF9sb2NrX2JoKHR1bi0+ZGV2KTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKHRmaWxlLT50dW4pCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVCVVNZOworCWlmICh0dW4tPnRmaWxlKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisJdGZpbGUtPnR1biA9IHR1bjsKKwl0dW4tPnRmaWxlID0gdGZpbGU7CisJZGV2X2hvbGQodHVuLT5kZXYpOworCWF0b21pY19pbmMoJnRmaWxlLT5jb3VudCk7CisKK291dDoKKwluZXRpZl90eF91bmxvY2tfYmgodHVuLT5kZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJLyogRGV0YWNoIGZyb20gbmV0IGRldmljZSAqLworCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOworCXRmaWxlLT50dW4gPSBOVUxMOworCXR1bi0+dGZpbGUgPSBOVUxMOworCW5ldGlmX3R4X3VubG9ja19iaCh0dW4tPmRldik7CisKKwkvKiBEcm9wIHJlYWQgcXVldWUgKi8KKwlza2JfcXVldWVfcHVyZ2UoJnR1bi0+cmVhZHEpOworCisJLyogRHJvcCB0aGUgZXh0cmEgY291bnQgb24gdGhlIG5ldCBkZXZpY2UgKi8KKwlkZXZfcHV0KHR1bi0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgdHVuX2RldGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXJ0bmxfbG9jaygpOworCV9fdHVuX2RldGFjaCh0dW4pOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqX190dW5fZ2V0KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IE5VTEw7CisKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmdGZpbGUtPmNvdW50KSkKKwkJdHVuID0gdGZpbGUtPnR1bjsKKworCXJldHVybiB0dW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2dldChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gX190dW5fZ2V0KGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHR1bl9wdXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gdHVuLT50ZmlsZTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0ZmlsZS0+Y291bnQpKQorCQl0dW5fZGV0YWNoKHRmaWxlLT50dW4pOworfQorCiAvKiBUQVAgZmlsdGVydGluZyAqLwogc3RhdGljIHZvaWQgYWRkcl9oYXNoX3NldCh1MzIgKm1hc2ssIGNvbnN0IHU4ICphZGRyKQogewpAQCAtMjE5LDEzICszMjIsMjMgQEAKIAogLyogTmV0d29yayBkZXZpY2UgcGFydCBvZiB0aGUgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgdHVuX25ldF9pZDsKLXN0cnVjdCB0dW5fbmV0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHM7CiAKKy8qIE5ldCBkZXZpY2UgZGV0YWNoIGZyb20gZmQuICovCitzdGF0aWMgdm9pZCB0dW5fbmV0X3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJLyogSW5mb3JtIHRoZSBtZXRob2RzIHRoZXkgbmVlZCB0byBzdG9wIHVzaW5nIHRoZSBkZXYuCisJICovCisJaWYgKHRmaWxlKSB7CisJCXdha2VfdXBfYWxsKCZ0ZmlsZS0+cmVhZF93YWl0KTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRmaWxlLT5jb3VudCkpCisJCQlfX3R1bl9kZXRhY2godHVuKTsKKwl9Cit9CisKIC8qIE5ldCBkZXZpY2Ugb3Blbi4gKi8KIHN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yNDgsNyArMzYxLDcgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX25ldF94bWl0ICVkXG4iLCB0dW4tPmRldi0+bmFtZSwgc2tiLT5sZW4pOwogCiAJLyogRHJvcCBwYWNrZXQgaWYgaW50ZXJmYWNlIGlzIG5vdCBhdHRhY2hlZCAqLwotCWlmICghdHVuLT5hdHRhY2hlZCkKKwlpZiAoIXR1bi0+dGZpbGUpCiAJCWdvdG8gZHJvcDsKIAogCS8qIERyb3AgaWYgdGhlIGZpbHRlciBkb2VzIG5vdCBsaWtlIGl0LgpAQCAtMjgwLDcgKzM5Myw3IEBACiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCiAJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fRkFTWU5DKQogCQlraWxsX2Zhc3luYygmdHVuLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+cmVhZF93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+dGZpbGUtPnJlYWRfd2FpdCk7CiAJcmV0dXJuIDA7CiAKIGRyb3A6CkBAIC0zMTIsNiArNDI1LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCkBAIC0zMTksNiArNDMzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb191bmluaXQJCT0gdHVuX25ldF91bmluaXQsCiAJLm5kb19vcGVuCQk9IHR1bl9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gdHVuX25ldF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHVuX25ldF94bWl0LApAQCAtMzY1LDg2ICs0ODAsNjYgQEAKIC8qIFBvbGwgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHVuX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSB0dW4tPnNrOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCWlmICghdHVuKQotCQlyZXR1cm4gLUVCQURGRDsKKwkJcmV0dXJuIFBPTExFUlI7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9wb2xsXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJnR1bi0+cmVhZF93YWl0LCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJnRmaWxlLT5yZWFkX3dhaXQsIHdhaXQpOwogCiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnR1bi0+cmVhZHEpKQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CiAKKwlpZiAoc29ja193cml0ZWFibGUoc2spIHx8CisJICAgICghdGVzdF9hbmRfc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykgJiYKKwkgICAgIHNvY2tfd3JpdGVhYmxlKHNrKSkpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKKwlpZiAodHVuLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkKKwkJbWFzayA9IFBPTExFUlI7CisKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIG1hc2s7CiB9CiAKIC8qIHByZXBhZCBpcyB0aGUgYW1vdW50IHRvIHJlc2VydmUgYXQgZnJvbnQuICBsZW4gaXMgbGVuZ3RoIGFmdGVyIHRoYXQuCiAgKiBsaW5lYXIgaXMgYSBoaW50IGFzIHRvIGhvdyBtdWNoIHRvIGNvcHkgKHVzdWFsbHkgaGVhZGVycykuICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc2l6ZV90IHByZXBhZCwgc2l6ZV90IGxlbiwgc2l6ZV90IGxpbmVhciwKLQkJCQkgICAgIGdmcF90IGdmcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKKwkJCQkJICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sCisJCQkJCSAgICBzaXplX3QgbGluZWFyLCBpbnQgbm9ibG9jaykKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSB0dW4tPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlza2IgPSBhbGxvY19za2IocHJlcGFkICsgbGVuLCBnZnB8X19HRlBfTk9XQVJOKTsKLQlpZiAoc2tiKSB7Ci0JCXNrYl9yZXNlcnZlKHNrYiwgcHJlcGFkKTsKLQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCXJldHVybiBza2I7Ci0JfQorCWludCBlcnI7CiAKIAkvKiBVbmRlciBhIHBhZ2U/ICBEb24ndCBib3RoZXIgd2l0aCBwYWdlZCBza2IuICovCiAJaWYgKHByZXBhZCArIGxlbiA8IFBBR0VfU0laRSkKLQkJcmV0dXJuIE5VTEw7CisJCWxpbmVhciA9IGxlbjsKIAotCS8qIFN0YXJ0IHdpdGggYSBub3JtYWwgc2tiLCBhbmQgYWRkIHBhZ2VzLiAqLwotCXNrYiA9IGFsbG9jX3NrYihwcmVwYWQgKyBsaW5lYXIsIGdmcCk7CisJc2tiID0gc29ja19hbGxvY19zZW5kX3Bza2Ioc2ssIHByZXBhZCArIGxpbmVhciwgbGVuIC0gbGluZWFyLCBub2Jsb2NrLAorCQkJCSAgICZlcnIpOwogCWlmICghc2tiKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogCXNrYl9yZXNlcnZlKHNrYiwgcHJlcGFkKTsKIAlza2JfcHV0KHNrYiwgbGluZWFyKTsKLQotCWxlbiAtPSBsaW5lYXI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1NLQl9GUkFHUzsgaSsrKSB7Ci0JCXNrYl9mcmFnX3QgKmYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQlmLT5wYWdlID0gYWxsb2NfcGFnZShnZnB8X19HRlBfWkVSTyk7Ci0JCWlmICghZi0+cGFnZSkKLQkJCWJyZWFrOwotCi0JCWYtPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJZi0+c2l6ZSA9IFBBR0VfU0laRTsKLQotCQlza2ItPmRhdGFfbGVuICs9IFBBR0VfU0laRTsKLQkJc2tiLT5sZW4gKz0gUEFHRV9TSVpFOwotCQlza2ItPnRydWVzaXplICs9IFBBR0VfU0laRTsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCi0JCWlmIChsZW4gPCBQQUdFX1NJWkUpIHsKLQkJCWxlbiA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlsZW4gLT0gUEFHRV9TSVpFOwotCX0KLQotCS8qIFRvbyBsYXJnZSwgb3IgYWxsb2MgZmFpbD8gKi8KLQlpZiAodW5saWtlbHkobGVuKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJc2tiID0gTlVMTDsKLQl9CisJc2tiLT5kYXRhX2xlbiA9IGxlbiAtIGxpbmVhcjsKKwlza2ItPmxlbiArPSBsZW4gLSBsaW5lYXI7CiAKIAlyZXR1cm4gc2tiOwogfQogCiAvKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi8KLXN0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCisJCQkJICAgICAgIHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgICAgaW50IG5vYmxvY2spCiB7Ci0Jc3RydWN0IHR1bl9waSBwaSA9IHsgMCwgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkgfTsKKwlzdHJ1Y3QgdHVuX3BpIHBpID0geyAwLCBjcHVfdG9fYmUxNihFVEhfUF9JUCkgfTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBsZW4gPSBjb3VudCwgYWxpZ24gPSAwOwogCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciBnc28gPSB7IDAgfTsKQEAgLTQ3NCw5ICs1NjksMTEgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghKHNrYiA9IHR1bl9hbGxvY19za2IoYWxpZ24sIGxlbiwgZ3NvLmhkcl9sZW4sIEdGUF9LRVJORUwpKSkgewotCQl0dW4tPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQlyZXR1cm4gLUVOT01FTTsKKwlza2IgPSB0dW5fYWxsb2Nfc2tiKHR1biwgYWxpZ24sIGxlbiwgZ3NvLmhkcl9sZW4sIG5vYmxvY2spOworCWlmIChJU19FUlIoc2tiKSkgeworCQlpZiAoUFRSX0VSUihza2IpICE9IC1FQUdBSU4pCisJCQl0dW4tPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCX0KIAogCWlmIChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2lvdmVjKHNrYiwgMCwgaXYsIGxlbikpIHsKQEAgLTU2MiwxNCArNjU5LDIwIEBACiBzdGF0aWMgc3NpemVfdCB0dW5fY2hyX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgcG9zKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOworCXNzaXplX3QgcmVzdWx0OwogCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfd3JpdGUgJWxkXG4iLCB0dW4tPmRldi0+bmFtZSwgY291bnQpOwogCi0JcmV0dXJuIHR1bl9nZXRfdXNlcih0dW4sIChzdHJ1Y3QgaW92ZWMgKikgaXYsIGlvdl9sZW5ndGgoaXYsIGNvdW50KSk7CisJcmVzdWx0ID0gdHVuX2dldF91c2VyKHR1biwgKHN0cnVjdCBpb3ZlYyAqKWl2LCBpb3ZfbGVuZ3RoKGl2LCBjb3VudCksCisJCQkgICAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwl0dW5fcHV0KHR1bik7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi8KQEAgLTY0Miw3ICs3NDUsOCBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNzaXplX3QgbGVuLCByZXQgPSAwOwpAQCAtNjUzLDEwICs3NTcsMTIgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9yZWFkXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKIAlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7Ci0JaWYgKGxlbiA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChsZW4gPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAotCWFkZF93YWl0X3F1ZXVlKCZ0dW4tPnJlYWRfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZ0ZmlsZS0+cmVhZF93YWl0LCAmd2FpdCk7CiAJd2hpbGUgKGxlbikgewogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIApAQCAtNjcwLDYgKzc3NiwxMCBAQAogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlicmVhazsKIAkJCX0KKwkJCWlmICh0dW4tPmRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJLyogTm90aGluZyB0byByZWFkLCBsZXQncyBzbGVlcCAqLwogCQkJc2NoZWR1bGUoKTsKQEAgLTY4Myw4ICs3OTMsMTAgQEAKIAl9CiAKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmdHVuLT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdGZpbGUtPnJlYWRfd2FpdCwgJndhaXQpOwogCitvdXQ6CisJdHVuX3B1dCh0dW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY5Myw1NCArODA1LDc4IEBACiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ0dW4tPnJlYWRxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dW4tPnJlYWRfd2FpdCk7CiAKIAl0dW4tPm93bmVyID0gLTE7CiAJdHVuLT5ncm91cCA9IC0xOwogCiAJZGV2LT5ldGh0b29sX29wcyA9ICZ0dW5fZXRodG9vbF9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogfQogCi1zdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9nZXRfYnlfbmFtZShzdHJ1Y3QgdHVuX25ldCAqdG4sIGNvbnN0IGNoYXIgKm5hbWUpCisvKiBUcml2aWFsIHNldCBvZiBuZXRsaW5rIG9wcyB0byBhbGxvdyBkZWxldGluZyB0dW4gb3IgdGFwCisgKiBkZXZpY2Ugd2l0aCBuZXRsaW5rLgorICovCitzdGF0aWMgaW50IHR1bl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0dW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKKwkua2luZAkJPSBEUlZfTkFNRSwKKwkucHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0dW5fc3RydWN0KSwKKwkuc2V0dXAJCT0gdHVuX3NldHVwLAorCS52YWxpZGF0ZQk9IHR1bl92YWxpZGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIHR1bl9zb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCi0JQVNTRVJUX1JUTkwoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1biwgJnRuLT5kZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cm5jbXAodHVuLT5kZXYtPm5hbWUsIG5hbWUsIElGTkFNU0laKSkKLQkJICAgIHJldHVybiB0dW47Ci0JfQorCWlmICghc29ja193cml0ZWFibGUoc2spKQorCQlyZXR1cm47CiAKLQlyZXR1cm4gTlVMTDsKKwlpZiAoc2stPnNrX3NsZWVwICYmIHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNrX3NsZWVwKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoc2stPnNrX3NsZWVwKTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJdHVuID0gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuOworCWtpbGxfZmFzeW5jKCZ0dW4tPmZhc3luYywgU0lHSU8sIFBPTExfT1VUKTsKIH0KIAorc3RhdGljIHZvaWQgdHVuX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQoreworCWRldl9wdXQoY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuLT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHByb3RvIHR1bl9wcm90byA9IHsKKwkubmFtZQkJPSAidHVuIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0dW5fc29jayksCit9OworCiBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewotCXN0cnVjdCB0dW5fbmV0ICp0bjsKKwlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQpOwotCXR1biA9IHR1bl9nZXRfYnlfbmFtZSh0biwgaWZyLT5pZnJfbmFtZSk7Ci0JaWYgKHR1bikgewotCQlpZiAodHVuLT5hdHRhY2hlZCkKLQkJCXJldHVybiAtRUJVU1k7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKTsKKwlpZiAoZGV2KSB7CisJCWlmICgoaWZyLT5pZnJfZmxhZ3MgJiBJRkZfVFVOKSAmJiBkZXYtPm5ldGRldl9vcHMgPT0gJnR1bl9uZXRkZXZfb3BzKQorCQkJdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJZWxzZSBpZiAoKGlmci0+aWZyX2ZsYWdzICYgSUZGX1RBUCkgJiYgZGV2LT5uZXRkZXZfb3BzID09ICZ0YXBfbmV0ZGV2X29wcykKKwkJCXR1biA9IG5ldGRldl9wcml2KGRldik7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIENoZWNrIHBlcm1pc3Npb25zICovCi0JCWlmICgoKHR1bi0+b3duZXIgIT0gLTEgJiYKLQkJICAgICAgY3JlZC0+ZXVpZCAhPSB0dW4tPm93bmVyKSB8fAotCQkgICAgICh0dW4tPmdyb3VwICE9IC0xICYmCi0JCSAgICAgIGNyZWQtPmVnaWQgIT0gdHVuLT5ncm91cCkpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQorCQllcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9Ci0JZWxzZSBpZiAoX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZSB7CiAJCWNoYXIgKm5hbWU7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtNzcxLDI1ICs5MDcsNDUgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKwkJZGV2LT5ydG5sX2xpbmtfb3BzID0gJnR1bl9saW5rX29wczsKIAogCQl0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCQl0dW4tPmRldiA9IGRldjsKIAkJdHVuLT5mbGFncyA9IGZsYWdzOwogCQl0dW4tPnR4Zmx0LmNvdW50ID0gMDsKIAorCQllcnIgPSAtRU5PTUVNOworCQlzayA9IHNrX2FsbG9jKG5ldCwgQUZfVU5TUEVDLCBHRlBfS0VSTkVMLCAmdHVuX3Byb3RvKTsKKwkJaWYgKCFzaykKKwkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCisJCS8qIFRoaXMgcmVmIGNvdW50IGlzIGZvciB0dW4tPnNrLiAqLworCQlkZXZfaG9sZChkZXYpOworCQlzb2NrX2luaXRfZGF0YSgmdHVuLT5zb2NrZXQsIHNrKTsKKwkJc2stPnNrX3dyaXRlX3NwYWNlID0gdHVuX3NvY2tfd3JpdGVfc3BhY2U7CisJCXNrLT5za19kZXN0cnVjdCA9IHR1bl9zb2NrX2Rlc3RydWN0OworCQlzay0+c2tfc25kYnVmID0gSU5UX01BWDsKKwkJc2stPnNrX3NsZWVwID0gJnRmaWxlLT5yZWFkX3dhaXQ7CisKKwkJdHVuLT5zayA9IHNrOworCQljb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW4gPSB0dW47CisKIAkJdHVuX25ldF9pbml0KGRldik7CiAKIAkJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKIAkJCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKIAkJCWlmIChlcnIgPCAwKQotCQkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCQkJCWdvdG8gZXJyX2ZyZWVfc2s7CiAJCX0KIAorCQllcnIgPSAtRUlOVkFMOwogCQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0JCWxpc3RfYWRkKCZ0dW4tPmxpc3QsICZ0bi0+ZGV2X2xpc3QpOworCQllcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9zZXRfaWZmXG4iLCB0dW4tPmRldi0+bmFtZSk7CkBAIC04MDksMTAgKzk2NSw2IEBACiAJZWxzZQogCQl0dW4tPmZsYWdzICY9IH5UVU5fVk5FVF9IRFI7CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSB0dW47Ci0JdHVuLT5hdHRhY2hlZCA9IDE7Ci0JZ2V0X25ldChkZXZfbmV0KHR1bi0+ZGV2KSk7Ci0KIAkvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW4KIAkgKiB4b2ZmIHN0YXRlLgogCSAqLwpAQCAtODIyLDYgKzk3NCw4IEBACiAJc3RyY3B5KGlmci0+aWZyX25hbWUsIHR1bi0+ZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIAorIGVycl9mcmVlX3NrOgorCXNvY2tfcHV0KHNrKTsKICBlcnJfZnJlZV9kZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKICBmYWlsZWQ6CkBAIC04MzAsNyArOTg0LDcgQEAKIAogc3RhdGljIGludCB0dW5fZ2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOwogCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwpAQCAtODU1LDYgKzEwMDksNyBAQAogCWlmICh0dW4tPmZsYWdzICYgVFVOX1ZORVRfSERSKQogCQlpZnItPmlmcl9mbGFncyB8PSBJRkZfVk5FVF9IRFI7CiAKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMSwzMiArMTA1NiwxNyBAQAogc3RhdGljIGludCB0dW5fY2hyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXZvaWQgX191c2VyKiBhcmdwID0gKHZvaWQgX191c2VyKilhcmc7CiAJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgc25kYnVmOwogCWludCByZXQ7CiAKIAlpZiAoY21kID09IFRVTlNFVElGRiB8fCBfSU9DX1RZUEUoY21kKSA9PSAweDg5KQogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgYXJncCwgc2l6ZW9mIGlmcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChjbWQgPT0gVFVOU0VUSUZGICYmICF0dW4pIHsKLQkJaW50IGVycjsKLQotCQlpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOwotCi0JCXJ0bmxfbG9jaygpOwotCQllcnIgPSB0dW5fc2V0X2lmZihjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsIGZpbGUsICZpZnIpOwotCQlydG5sX3VubG9jaygpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mKGlmcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChjbWQgPT0gVFVOR0VURkVBVFVSRVMpIHsKIAkJLyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogIndoYXQgSUZGIGZsYWdzIGFyZSB2YWxpZD8iLgogCQkgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5ldmVyIGNoZWNrZWQgZm9yIGludmFsaWQgZmxhZ3Mgb24KQEAgLTkzNiwxOSArMTA3NiwzOSBAQAogCQkJCSh1bnNpZ25lZCBpbnQgX191c2VyKilhcmdwKTsKIAl9CiAKKwl0dW4gPSBfX3R1bl9nZXQodGZpbGUpOworCWlmIChjbWQgPT0gVFVOU0VUSUZGICYmICF0dW4pIHsKKwkJaW50IGVycjsKKworCQlpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOworCisJCXJ0bmxfbG9jaygpOworCQllcnIgPSB0dW5fc2V0X2lmZih0ZmlsZS0+bmV0LCBmaWxlLCAmaWZyKTsKKwkJcnRubF91bmxvY2soKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIHNpemVvZihpZnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisKKwogCWlmICghdHVuKQogCQlyZXR1cm4gLUVCQURGRDsKIAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX2lvY3RsIGNtZCAlZFxuIiwgdHVuLT5kZXYtPm5hbWUsIGNtZCk7CiAKKwlyZXQgPSAwOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUVU5HRVRJRkY6CiAJCXJldCA9IHR1bl9nZXRfaWZmKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgZmlsZSwgJmlmcik7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YoaWZyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBUVU5TRVROT0NTVU06CkBAIC0xMDAwLDcgKzExNjAsNyBAQAogCQkJcmV0ID0gMDsKIAkJfQogCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OworCQlicmVhazsKIAogI2lmZGVmIFRVTl9ERUJVRwogCWNhc2UgVFVOU0VUREVCVUc6CkBAIC0xMDExLDI0ICsxMTcxLDI1IEBACiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBzZXRfb2ZmbG9hZCh0dW4tPmRldiwgYXJnKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKIAljYXNlIFRVTlNFVFRYRklMVEVSOgogCQkvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi8KKwkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKCh0dW4tPmZsYWdzICYgVFVOX1RZUEVfTUFTSykgIT0gVFVOX1RBUF9ERVYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gdXBkYXRlX2ZpbHRlcigmdHVuLT50eGZsdCwgKHZvaWQgX191c2VyICopYXJnKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKIAljYXNlIFNJT0NHSUZIV0FERFI6CiAJCS8qIEdldCBodyBhZGRyZXMgKi8KIAkJbWVtY3B5KGlmci5pZnJfaHdhZGRyLnNhX2RhdGEsIHR1bi0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCQlpZnIuaWZyX2h3YWRkci5zYV9mYW1pbHkgPSB0dW4tPmRldi0+dHlwZTsKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YgaWZyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCiAJY2FzZSBTSU9DU0lGSFdBRERSOgogCQkvKiBTZXQgaHcgYWRkcmVzcyAqLwpAQCAtMTAzOCwxOCArMTE5OSwzNSBAQAogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gZGV2X3NldF9tYWNfYWRkcmVzcyh0dW4tPmRldiwgJmlmci5pZnJfaHdhZGRyKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisKKwljYXNlIFRVTkdFVFNOREJVRjoKKwkJc25kYnVmID0gdHVuLT5zay0+c2tfc25kYnVmOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZzbmRidWYsIHNpemVvZihzbmRidWYpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBUVU5TRVRTTkRCVUY6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc25kYnVmLCBhcmdwLCBzaXplb2Yoc25kYnVmKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCXR1bi0+c2stPnNrX3NuZGJ1ZiA9IHNuZGJ1ZjsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfTsKIAotCXJldHVybiAwOworCXR1bl9wdXQodHVuKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHR1bl9jaHJfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOwogCWludCByZXQ7CiAKIAlpZiAoIXR1bikKQEAgLTEwNzEsNDIgKzEyNDksNTAgQEAKIAlyZXQgPSAwOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0dW5fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogeworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7CiAJY3ljbGVfa2VybmVsX2xvY2soKTsKIAlEQkcxKEtFUk5fSU5GTyAidHVuWDogdHVuX2Nocl9vcGVuXG4iKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJdGZpbGUgPSBrbWFsbG9jKHNpemVvZigqdGZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRmaWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhdG9taWNfc2V0KCZ0ZmlsZS0+Y291bnQsIDApOworCXRmaWxlLT50dW4gPSBOVUxMOworCXRmaWxlLT5uZXQgPSBnZXRfbmV0KGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdGZpbGUtPnJlYWRfd2FpdCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdGZpbGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHVuX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CiAKLQlpZiAoIXR1bikKLQkJcmV0dXJuIDA7CiAKLQlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9jbG9zZVxuIiwgdHVuLT5kZXYtPm5hbWUpOworCWlmICh0dW4pIHsKKwkJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfY2xvc2VcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKIAotCXJ0bmxfbG9jaygpOworCQlydG5sX2xvY2soKTsKKwkJX190dW5fZGV0YWNoKHR1bik7CiAKLQkvKiBEZXRhY2ggZnJvbSBuZXQgZGV2aWNlICovCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQl0dW4tPmF0dGFjaGVkID0gMDsKLQlwdXRfbmV0KGRldl9uZXQodHVuLT5kZXYpKTsKKwkJLyogSWYgZGVzaXJlYWJsZSwgdW5yZWdpc3RlciB0aGUgbmV0ZGV2aWNlLiAqLworCQlpZiAoISh0dW4tPmZsYWdzICYgVFVOX1BFUlNJU1QpKSB7CisJCQlzb2NrX3B1dCh0dW4tPnNrKTsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKKwkJfQogCi0JLyogRHJvcCByZWFkIHF1ZXVlICovCi0Jc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKLQotCWlmICghKHR1bi0+ZmxhZ3MgJiBUVU5fUEVSU0lTVCkpIHsKLQkJbGlzdF9kZWwoJnR1bi0+bGlzdCk7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKKwkJcnRubF91bmxvY2soKTsKIAl9CiAKLQlydG5sX3VubG9jaygpOworCXB1dF9uZXQodGZpbGUtPm5ldCk7CisJa2ZyZWUodGZpbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg3LDcgKzEzNzMsNyBAQAogc3RhdGljIHUzMiB0dW5fZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gdHVuLT5hdHRhY2hlZDsKKwlyZXR1cm4gISF0dW4tPnRmaWxlOwogfQogCiBzdGF0aWMgdTMyIHR1bl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTIxNiw0NSArMTQwMiw2IEBACiAJLnNldF9yeF9jc3VtCT0gdHVuX3NldF9yeF9jc3VtCiB9OwogCi1zdGF0aWMgaW50IHR1bl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0Jc3RydWN0IHR1bl9uZXQgKnRuOwotCi0JdG4gPSBrbWFsbG9jKHNpemVvZigqdG4pLCBHRlBfS0VSTkVMKTsKLQlpZiAodG4gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlJTklUX0xJU1RfSEVBRCgmdG4tPmRldl9saXN0KTsKLQotCWlmIChuZXRfYXNzaWduX2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkLCB0bikpIHsKLQkJa2ZyZWUodG4pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdHVuX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlzdHJ1Y3QgdHVuX25ldCAqdG47Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgKm54dDsKLQotCXRuID0gbmV0X2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkKTsKLQotCXJ0bmxfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0dW4sIG54dCwgJnRuLT5kZXZfbGlzdCwgbGlzdCkgewotCQlEQkcoS0VSTl9JTkZPICIlcyBjbGVhbmVkIHVwXG4iLCB0dW4tPmRldi0+bmFtZSk7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQotCWtmcmVlKHRuKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB0dW5fbmV0X29wcyA9IHsKLQkuaW5pdCA9IHR1bl9pbml0X25ldCwKLQkuZXhpdCA9IHR1bl9leGl0X25ldCwKLX07CiAKIHN0YXRpYyBpbnQgX19pbml0IHR1bl9pbml0KHZvaWQpCiB7CkBAIC0xMjYzLDEwICsxNDEwLDEwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidHVuOiAlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCXByaW50ayhLRVJOX0lORk8gInR1bjogJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCi0JcmV0ID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7CisJcmV0ID0gcnRubF9saW5rX3JlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0dW46IENhbid0IHJlZ2lzdGVyIHBlcm5ldCBvcHNcbiIpOwotCQlnb3RvIGVycl9wZXJuZXQ7CisJCXByaW50ayhLRVJOX0VSUiAidHVuOiBDYW4ndCByZWdpc3RlciBsaW5rX29wc1xuIik7CisJCWdvdG8gZXJyX2xpbmtvcHM7CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmdHVuX21pc2NkZXYpOwpAQCAtMTI3NCwxOCArMTQyMSwxNyBAQAogCQlwcmludGsoS0VSTl9FUlIgInR1bjogQ2FuJ3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2UgJWRcbiIsIFRVTl9NSU5PUik7CiAJCWdvdG8gZXJyX21pc2M7CiAJfQotCXJldHVybiAwOwotCisJcmV0dXJuICAwOwogZXJyX21pc2M6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOwotZXJyX3Blcm5ldDoKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmdHVuX2xpbmtfb3BzKTsKK2Vycl9saW5rb3BzOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHR1bl9jbGVhbnVwKHZvaWQpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOworCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogfQogCiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmggYi9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MmQ2OWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi1maXJtd2FyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzc3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCi0gKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKLSAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKLSAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCi0gKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKLSAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KLSAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCi0gKi8KLQotIC8qIHZlciAwMy4wMDEuMDA4ICovCi1zdGF0aWMgY29uc3QgdTggdHlwaG9vbl9maXJtd2FyZV9pbWFnZVtdID0gewotMHg1NCwgMHg1OSwgMHg1MCwgMHg0OCwgMHg0ZiwgMHg0ZiwgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4Y2IsIDB4OTksIDB4YjEsIDB4ZDQsCi0weDRjLCAweGI4LCAweGQwLCAweDRiLCAweDMyLCAweDAyLCAweGQ0LCAweGVlLCAweDczLCAweDdlLCAweDBiLCAweDEzLAotMHg5YiwgMHhjMCwgMHhhZSwgMHhmNCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmYywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MzksIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4ZWEsCi0weDA0LCAweDAwLCAweDAwLCAweGVhLCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDAwLCAweGVhLAotMHgwMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgzMiwgMHgwMiwgMHgwMCwgMHhlYSwgMHhjNSwgMHgxNCwgMHgwMCwgMHhlYSwKLTB4MDcsIDB4MDAsIDB4MmQsIDB4ZTksIDB4MGUsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4MGYsIDB4ZTEsCi0weGQwLCAweDIwLCAweDlmLCAweGU1LCAweDEyLCAweGZmLCAweDJmLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAotMHgwMSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwNCwgMHgyMCwgMHg4MSwgMHhlNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHhlMSwKLTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4YTAsIDB4ZTEsCi0weDBlLCAweGIwLCAweGEwLCAweGUxLCAweDAwLCAweDAwLCAweGEwLCAweGUzLCAweGE4LCAweDEwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHhhNCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTMsCi0weDAwLCAweDAwLCAweDgxLCAweGU1LCAweGQ3LCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg4OCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkYiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4N2MsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDc0LCAweGQwLCAweDlmLCAweGU1LCAweGQxLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg2YywgMHhkMCwgMHg5ZiwgMHhlNSwgMHg5YiwgMHgxNCwgMHgwMCwgMHhlYiwgMHhkMywgMHgwMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4NjAsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4NjAsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDYwLCAweDEwLCAweDlmLCAweGU1LCAweDYwLCAweDIwLCAweDlmLCAweGU1LCAweGRiLCAweGZmLCAweGZmLCAweGViLAotMHg1YywgMHgwMCwgMHg5ZiwgMHhlNSwgMHg1YywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHhhMCwgMHhlMywKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4NTQsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NTQsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weGQ0LCAweGZmLCAweGZmLCAweGViLCAweDBhLCAweDAwLCAweGEwLCAweGUxLCAweDBiLCAweGYwLCAweGEwLCAweGUxLAotMHhkMywgMHgxMCwgMHhhMCwgMHhlMywgMHgwMSwgMHhmMCwgMHgyMSwgMHhlMSwgMHhkNCwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4M2MsIDB4YTAsIDB4OWYsIDB4ZTUsIDB4MWEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4YzYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDE1LCAweDIxLCAweGZmLCAweGZmLCAweDBjLCAweDAwLCAweDEwLCAweDAwLCAweDFjLCAweDAwLCAweDEwLCAweDAwLAotMHgzYywgMHgzOCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzNywgMHgwMCwgMHg4MCwgMHhmYywgMHgzZiwgMHgwMCwgMHg4MCwKLTB4N2MsIDB4MzQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsCi0weGFkLCAweGRlLCAweGFkLCAweGRlLCAweGIwLCAweGJiLCAweDAwLCAweDAwLCAweDI0LCAweGFiLCAweDIwLCAweDQwLAotMHg0OCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhiZCwgMHhiYSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1OCwgMHg1NywgMHgwMCwgMHgwMCwgMHg4NiwgMHg0YiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHhmZiwgMHhmZiwKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NGQsIDB4MDAsIDB4MjQsIDB4MjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDFlLCAweGQwLCAweDM4LCAweDFjLCAweDEwLCAweDQ5LCAweDA0LCAweGYwLCAweDdiLCAweGZkLCAweDI5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHgyOCwgMHgxNSwgMHhkMCwgMHgzOCwgMHgwMSwgMHgwZCwgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4NDEsIDB4NmIsIDB4ODAsIDB4MjksCi0weDBjLCAweGQyLCAweDAxLCAweDMxLCAweDQxLCAweDYzLCAweDI4LCAweDY4LCAweGMxLCAweDY5LCAweGMwLCAweDQ2LAotMHgyOSwgMHg2MCwgMHgzOSwgMHgwNywgMHg0MSwgMHg2MCwgMHgwNCwgMHg2MiwgMHhjNywgMHg2MiwgMHhiMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsCi0weGVlLCAweDA1LCAweDAwLCAweDAwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweDAyLCAweDQ5LCAweDBhLCAweDY4LAotMHhjMCwgMHg0NiwgMHhjMiwgMHg2MSwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDAwLCAweDEwLCAweGEwLCAweGUxLAotMHhjMCwgMHgxMCwgMHg4MSwgMHhlMywgMHgwMSwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsCi0weGMwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHhjMCwgMHgwMCwgMHhjMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4NDAsIDB4MDAsIDB4ODAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLAotMHg4MCwgMHgwMCwgMHgxMCwgMHhlMywgMHg4MCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsCi0weDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweDEzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ZTAsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDIwLCAweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDgwLCAweGUwLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHg2NCwgMHgyOCwgMHgwNCwgMHhkMywKLTB4NjQsIDB4MjAsIDB4MzgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDMsIDB4ZTAsIDB4MzgsIDB4NjMsCi0weDA0LCAweDQ5LCAweDA1LCAweGYwLCAweDAxLCAweGZiLCAweDc4LCAweDYzLCAweGI4LCAweDYzLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4OCwgMHgxMywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4YjQsIDB4MTAsIDB4NGIsIDB4MDAsIDB4MjIsIDB4MWYsIDB4NmIsIDB4NjQsIDB4MmYsIDB4MDMsIDB4ZDIsCi0weDA5LCAweDY4LCAweDA5LCAweDY4LCAweDQ5LCAweDA4LCAweDAyLCAweGQyLCAweDEwLCAweDFjLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHgxOSwgMHgxYywgMHhkYiwgMHg2YiwgMHg0ZiwgMHg2YiwgMHhiYiwgMHg0MiwgMHgwNSwgMHhkMiwKLTB4NDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTgsIDB4MTgsIDB4YzgsIDB4NjMsIDB4ZjEsIDB4ZTcsCi0weDQxLCAweDY4LCAweDA1LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDA0LCAweDQ4LCAweGMxLCAweDZiLAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MywgMHgwMiwgMHgyMCwgMHhlOCwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDE1LCAweDRjLCAweDAwLCAweDIwLCAweDIxLCAweDZiLCAweDY0LCAweDI5LCAweDBiLCAweGQyLCAweGI5LCAweDZlLAotMHg0OSwgMHgwOCwgMHgwOCwgMHhkMywgMHgyMSwgMHg2YywgMHhhMiwgMHg2YiwgMHg5MSwgMHg0MiwgMHgwNywgMHhkMiwKLTB4ZmEsIDB4MWQsIDB4MzksIDB4MzIsIDB4NTIsIDB4OGIsIDB4ODksIDB4MTgsIDB4MjEsIDB4NjQsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLAotMHgzOCwgMHg2YiwgMHgwMiwgMHhmMCwgMHgyZCwgMHhmZSwgMHgzOCwgMHgxYywgMHgwMiwgMHhmMCwgMHhlOCwgMHhmYSwKLTB4MDEsIDB4MjAsIDB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsIDB4YzgsIDB4NzMsIDB4MDUsIDB4NDksCi0weDBhLCAweDZjLCAweDEyLCAweDE4LCAweDBhLCAweDY0LCAweDA0LCAweDQ5LCAweDhhLCAweDZkLCAweDEyLCAweDE4LAotMHg4YSwgMHg2NSwgMHhlNCwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MGEsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDIsIDB4MjMsCi0weDE4LCAweDQwLCAweDA5LCAweDRhLCAweDAwLCAweDIxLCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweGQxLCAweDYzLAotMHgxMSwgMHg2NCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwNiwgMHg0OCwgMHgwNywgMHg2OCwgMHg3YiwgMHgxYywKLTB4MDMsIDB4NjAsIDB4MGEsIDB4MmYsIDB4ZjcsIDB4ZDMsIDB4MDEsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMCwgMHgwYywgMHgxMCwgMHgxOCwgMHgwYSwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MDksIDB4MGMsIDB4NTEsIDB4MTgsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MGMsIDB4MDUsIDB4ZDAsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAwLCAweDBjLCAweDA4LCAweDE4LCAweDAxLCAweDBjLCAweGY5LCAweGQxLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwKLTB4MTgsIDB4ZDAsIDB4NGYsIDB4MDgsIDB4N2IsIDB4MWUsIDB4MDAsIDB4MmYsCi0weDA2LCAweGQwLCAweDA3LCAweDg4LCAweGJhLCAweDE4LCAweDAyLCAweDMwLCAweDFmLCAweDFjLCAweDAxLCAweDNiLAotMHgwMCwgMHgyZiwgMHhmOCwgMHhkMSwgMHg0OSwgMHgwOCwgMHgwMywgMHhkMywgMHgwMCwgMHg4OCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODIsIDB4MTgsIDB4MTAsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDExLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLCAweGY5LCAweGQxLCAweDEwLCAweDA0LCAweDAwLCAweDBjLAotMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4MywgMHg4OSwgMHhjNywgMHg4OSwgMHhmYiwgMHgxOCwKLTB4MDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDAsIDB4N2EsIDB4MDAsIDB4MDIsCi0weGM3LCAweDE4LCAweDM4LCAweDBjLCAweDA1LCAweGQwLCAweDM4LCAweDA0LCAweDAwLCAweDBjLCAweDNiLCAweDBjLAotMHhjNywgMHgxOCwgMHgzOCwgMHgwYywgMHhmOSwgMHhkMSwgMHgwOCwgMHgxYywgMHgxMSwgMHgxYywgMHhmZiwgMHhmNywKLTB4YzgsIDB4ZmYsIDB4MDEsIDB4MWMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjAsIDB4ZmYsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDAyLCAweDIzLCAweDgyLCAweDY4LCAweDFhLCAweDQwLAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgwZiwgMHhkMCwgMHgwYSwgMHg0YSwgMHg5MywgMHg2OSwgMHgwMSwgMHgzMywKLTB4OTMsIDB4NjEsIDB4MGEsIDB4NjgsIDB4OGIsIDB4NjgsIDB4OWEsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MWMsIDB4MTgsCi0weDU3LCAweDgxLCAweDA5LCAweDY5LCAweDEwLCAweDFjLCAweGZmLCAweGY3LCAweGFjLCAweGZmLCAweGMwLCAweDQzLAotMHg2MCwgMHg4MSwgMHgzOCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MjMsIDB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDExLCAweGQwLCAweDRhLCAweDY4LCAweDUyLCAweDA5LCAweDBlLCAweGQzLAotMHgwOSwgMHg0YSwgMHgxMywgMHg2YSwgMHgwMSwgMHgzMywgMHgxMywgMHg2MiwgMHhjYiwgMHg2OCwgMHgwMiwgMHg2OCwKLTB4OWMsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4M2EsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsCi0weDAwLCAweGYwLCAweDJlLCAweGY4LCAweDIwLCAweDgyLCAweDM4LCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHg4MCwgMHgyMywKLTB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZDAsIDB4NGEsIDB4NjgsCi0weDkyLCAweDA5LCAweDEyLCAweGQzLCAweDBiLCAweDRhLCAweGQzLCAweDY5LCAweDAxLCAweDMzLCAweGQzLCAweDYxLAotMHhjYiwgMHg2OCwgMHgwMiwgMHg2OCwgMHg5ZiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzYSwKLTB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDEsCi0weDA0LCAweDQ4LCAweGMwLCAweDQ2LCAweGY4LCAweDgwLCAweDIwLCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4YjAsIDB4YjUsIDB4MTQsIDB4MWMsIDB4MDUsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4NjksIDB4YjksIDB4NjgsCi0weDQxLCAweDE4LCAweDM4LCAweDY4LCAweGZmLCAweGY3LCAweDUzLCAweGZmLCAweGMwLCAweDQzLCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzOSwgMHhmZiwgMHgwNCwgMHgxYywgMHhiOCwgMHg2OCwKLTB4NzksIDB4NjksIDB4NDAsIDB4MTgsIDB4NjksIDB4NjgsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4MmEsIDB4NjgsCi0weDEyLCAweDE4LCAweDA5LCAweDFhLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAweDA1LCAweGY5LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgyNiwgMHhmZiwgMHgwNCwgMHgxYywKLTB4ZTAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweGMwLCAweDA4LCAweDFhLCAweGQzLCAweGI4LCAweDZhLAotMHhmOSwgMHg2YiwgMHg0MCwgMHgxOCwgMHg3OSwgMHg2YywgMHgwMCwgMHhmMCwgMHhlZCwgMHhmOCwgMHhjMCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4NDgsIDB4MDcsIDB4ZDAsIDB4MjAsIDB4MjMsIDB4YjksIDB4NjksCi0weDE5LCAweDQzLCAweGI5LCAweDYxLCAweDAxLCAweDZiLCAweDAxLCAweDMxLCAweDAxLCAweDYzLCAweDA3LCAweGUwLAotMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHhiOSwgMHg2OSwgMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHg0MSwgMHg2YSwKLTB4MDEsIDB4MzEsIDB4NDEsIDB4NjIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweDQxLCAweDA5LAotMHgxYywgMHhkMywgMHhjMCwgMHgwOCwgMHgxYSwgMHhkMywgMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHgwMCwgMHg3YiwKLTB4MDYsIDB4MjgsIDB4MTUsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4ZjgsIDB4MDEsIDB4MWMsCi0weDBhLCAweDQ4LCAweDA3LCAweGQwLCAweDQwLCAweDIzLCAweGI5LCAweDY5LAotMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywgMHgwNywgMHhlMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4YjksIDB4NjksIDB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4YzEsIDB4NmEsCi0weDAxLCAweDMxLCAweGMxLCAweDYyLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHg4MSwgMHgwOSwKLTB4MmMsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MmEsIDB4ZDMsIDB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4MDAsIDB4N2IsCi0weDExLCAweDI4LCAweDI1LCAweGQxLCAweGI4LCAweDZhLCAweDM5LCAweDZjLCAweDQwLCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwNiwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwNSwgMHgwNCwgMHgyZCwgMHgwYywKLTB4MGYsIDB4NGMsIDB4MTEsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWYsIDB4ZjgsIDB4MDAsIDB4MjgsCi0weDBjLCAweGQwLCAweGE4LCAweDQyLCAweDAyLCAweGQxLCAweDBjLCAweDRiLCAweDk4LCAweDQyLCAweDA3LCAweGQwLAotMHg4MCwgMHgyMywgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywgMHhiOCwgMHg2MSwgMHg2MCwgMHg2YiwgMHgwMSwgMHgzMCwKLTB4NjAsIDB4NjMsIDB4MDcsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsCi0weGI4LCAweDYxLCAweGEwLCAweDZhLCAweDAxLCAweDMwLCAweGEwLCAweDYyLCAweDAwLCAweDIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4ZjAsIDB4YjUsIDB4ZmYsIDB4YjAsIDB4OTksIDB4YjAsIDB4MDQsIDB4MWMsIDB4ZTAsIDB4NmIsIDB4NjEsIDB4NmMsCi0weDA5LCAweDE4LCAweDAzLCAweGFhLCAweDg1LCAweDE4LCAweGEzLCAweDZhLCAweDAwLCAweDIwLCAweDhhLCAweDA4LAotMHgwMSwgMHgzMiwgMHg5NywgMHg5MiwgMHgwNywgMHhkMCwgMHg4MiwgMHgwMCwgMHg5ZiwgMHg1OCwgMHgwMywgMHhhZSwKLTB4YjcsIDB4NTAsIDB4OTcsIDB4OWEsIDB4MDEsIDB4MzAsIDB4ODIsIDB4NDIsIDB4ZjcsIDB4ZDgsIDB4NjAsIDB4NmEsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDA0LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LAotMHgwMiwgMHg5MCwgMHgwMiwgMHhhZiwgMHgzZiwgMHg4OCwgMHgwMywgMHhhOCwgMHhmZiwgMHhmNywgMHg4NywgMHhmZSwKLTB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmQsIDB4ZmUsCi0weDA3LCAweDFjLCAweGUwLCAweDZiLCAweGExLCAweDZjLCAweDQwLCAweDE4LCAweDYxLCAweDZhLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwOCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwKLTB4MDEsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4YTIsIDB4NmEsCi0weDEyLCAweDE4LCAweDA5LCAweDFhLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAweDJmLCAweGY4LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg1MCwgMHhmZSwgMHgwNywgMHgxYywKLTB4YTgsIDB4ODksIDB4ZTksIDB4ODksIDB4MDgsIDB4MTgsIDB4MjksIDB4OGEsIDB4MDgsIDB4MTgsIDB4NjksIDB4OGEsCi0weDA4LCAweDE4LCAweDY5LCAweDdhLCAweDA5LCAweDAyLCAweDA4LCAweDE4LCAweGExLCAweDZjLCAweDYyLCAweDZjLAotMHg4OSwgMHgxYSwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMSwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDksIDB4MTgsIDB4MDgsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4MDQsCi0weDAwLCAweDBjLCAweDA5LCAweDBjLCAweDQxLCAweDE4LCAweDA4LCAweDBjLCAweGY5LCAweGQxLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgyZiwgMHhmZSwgMHhjMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3ZiwgMHhiMCwKLTB4MTksIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI5LCAweDJlLCAweGQwLCAweDgzLCAweDA3LCAweDliLCAweDBmLCAweGRjLCAweDAwLCAweDQ3LCAweDE4LAotMHgwNCwgMHgyNSwgMHhlZiwgMHgxYiwgMHhiZiwgMHgwNywgMHhiZiwgMHgwZiwgMHhmZiwgMHgwMCwgMHg4MCwgMHgwOCwKLTB4ODAsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDMsIDB4MzEsIDB4ODksIDB4MDgsIDB4NGQsIDB4MWUsIDB4MDIsIDB4YzgsCi0weGUxLCAweDQwLCAweGExLCAweDQwLCAweDZiLCAweDFlLCAweDAwLCAweDJkLCAweDA5LCAweGQwLCAweDBjLCAweDA0LAotMHgyNCwgMHgwYywgMHhhMiwgMHgxOCwgMHgwOSwgMHgwYywgMHg4YSwgMHgxOCwgMHgwMiwgMHhjOCwgMHgxYywgMHgxYywKLTB4MDEsIDB4M2IsIDB4MDAsIDB4MmMsIDB4ZjUsIDB4ZDEsIDB4YjksIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZjgsIDB4NDAsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDg5LCAweDE4LCAweDAwLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLAotMHgwNSwgMHhkMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMSwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywKLTB4ZjksIDB4ZDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDkwLCAweGI0LCAweDAwLCAweDIwLCAweDAxLCAweDI3LCAweDExLCAweDQ5LCAweDQyLCAweDAwLCAweDEyLCAweDE4LAotMHhkMiwgMHgwMCwgMHg1MywgMHgxOCwgMHg5YywgMHg2OCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDMsIDB4MWIsIDB4MGIsIDB4OGEsIDB4NTgsCi0weDEyLCAweDAzLCAweDEyLCAweDBiLCAweDkzLCAweDQyLCAweDBjLCAweGQxLCAweDAxLCAweDMwLCAweDA0LCAweDI4LAotMHhlYywgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg2YSwgMHgwMSwgMHgwMywgMHgwOSwgMHgwYiwgMHgwNywgMHg0OCwKLTB4MDAsIDB4NmYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZiLCAweGU3LCAweGE4LCAweDAzLCAweDAwLCAweDgwLAotMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5OCwgMHhiNCwgMHgxNCwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4ODMsIDB4MDAsIDB4MTMsIDB4NDgsIDB4YzAsIDB4NTgsIDB4MDcsIDB4MDMsCi0weDNmLCAweDBiLCAweDEyLCAweDQ4LCAweGMwLCAweDU4LCAweDAyLCAweDAzLCAweDEyLCAweDBiLCAweDExLCAweDQ4LAotMHhjMCwgMHg1OCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHgxMCwgMHg0YywgMHhlNCwgMHg1OCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDEsIDB4MjEsCi0weDk4LCAweDQyLCAweDAxLCAweGQxLCAweDA4LCAweDFjLCAweDA5LCAweGUwLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LAotMHgxMCwgMHgxYSwgMHhkYSwgMHgxYiwgMHg4MCwgMHgxOCwgMHgwMCwgMHhlMCwgMHgxOCwgMHgxYSwgMHg4NCwgMHg0MiwKLTB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4OTgsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weDIwLCAweDA0LCAweDAwLCAweDgwLCAweDI4LCAweDA0LCAweDAwLCAweDgwLCAweDA4LCAweDA0LCAweDAwLCAweDgwLAotMHgxOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgxMywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzYSwKLTB4ODAsIDB4MDAsIDB4MGIsIDB4MWMsIDB4MTMsIDB4NDksIDB4MGYsIDB4NTgsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsCi0weDBiLCAweDU4LCAweGMwLCAweDQ2LCAweDVhLCAweDYwLCAweDBhLCAweDU4LCAweDA4LCAweDMyLCAweDEwLCAweDRiLAotMHgxYiwgMHg1OCwgMHg5YSwgMHg0MiwgMHgwMSwgMHhkMywgMHgwZiwgMHg0YSwgMHgxMiwgMHg1OCwgMHgwZiwgMHg0YiwKLTB4MWYsIDB4NTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsCi0weDE3LCAweDAzLCAweDNmLCAweDBiLCAweDlmLCAweDQyLCAweDA2LCAweGQxLCAweDBhLCAweDQ4LCAweGMxLCAweDY4LAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MCwgMHgwMSwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwOCwgMHg0YiwKLTB4MWIsIDB4NTgsIDB4YzAsIDB4NDYsIDB4MWEsIDB4NjAsIDB4MGEsIDB4NTAsIDB4MDAsIDB4MjAsIDB4ZjYsIDB4ZTcsCi0weDA4LCAweDA0LCAweDAwLCAweDgwLCAweDI4LCAweDA0LCAweDAwLCAweDgwLCAweDIwLCAweDA0LCAweDAwLCAweDgwLAotMHgxOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4ZmYsIDB4NWYsIDB4MmQsIDB4ZTksIDB4NDgsIDB4ZmUsIDB4ZmYsIDB4ZWIsIDB4MDEsIDB4YjYsIDB4YTAsIDB4ZTMsCi0weDAxLCAweGIxLCAweDhiLCAweGUyLCAweDAyLCAweDhhLCAweGEwLCAweGUzLCAweDAxLCAweDdhLCAweGEwLCAweGUzLAotMHgwMSwgMHhhOSwgMHhhMCwgMHhlMywgMHgwMSwgMHg1NiwgMHhhMCwgMHhlMywgMHhjOCwgMHg2MCwgMHg5ZiwgMHhlNSwKLTB4YzgsIDB4OTAsIDB4OWYsIDB4ZTUsIDB4MTQsIDB4NDAsIDB4OWIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZTMsCi0weDJjLCAweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDBhLCAweDE0LCAweGUzLCAweDExLCAweDAwLCAweDAwLCAweDBhLAotMHgwYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg1MCwgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsCi0weDAxLCAweDBhLCAweGMwLCAweGUzLCAweDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAotMHgxNCwgMHg3MCwgMHg4NSwgMHhlNSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwYSwgMHgxNCwgMHhlMywKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDIsIDB4MGEsIDB4YzAsIDB4ZTMsCi0weDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LCAweDE0LCAweDgwLCAweDg1LCAweGU1LAotMHgwMSwgMHgwOSwgMHgxNCwgMHhlMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwKLTB4MDEsIDB4MDksIDB4YzAsIDB4ZTMsIDB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweGEwLCAweDg1LCAweGU1LCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDQwLCAweDAwLCAweDAwLCAweDFiLAotMHgwMSwgMHgwMCwgMHgxNCwgMHhlMywgMHg1NCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwYiwgMHgxNCwgMHhlMywKLTB4NjcsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDEsIDB4MGIsIDB4MTQsIDB4ZTMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDE4LCAweDAwLCAweDk5LCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDE4LCAweDAwLCAweDg5LCAweGU1LAotMHhkNSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMSwgMHgwYSwgMHhjMCwgMHhlMywKLTB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweDcwLCAweDg1LCAweGU1LCAweGUxLCAweGZmLCAweGZmLCAweGVhLCAweGZmLCAweDVmLCAweGJkLCAweGU4LAotMHgwNCwgMHhmMCwgMHg1ZSwgMHhlMiwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4MTAsIDB4MTAsIDB4MWYsIDB4ZTUsIDB4MTQsIDB4MzAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4YzMsIDB4ZTEsCi0weDE0LCAweDIwLCAweDgxLCAweGU1LCAweDAxLCAweDE2LCAweGEwLCAweGUzLCAweDBjLCAweDIwLCAweDgxLCAweGU1LAotMHgwYiwgMHgxMiwgMHhhMCwgMHhlMywgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHgxOCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4YjAsIDB4MjQsIDB4ZDEsIDB4ZTEsIDB4MDEsIDB4MjAsIDB4ODIsIDB4ZTIsIDB4YjAsIDB4MjQsIDB4YzEsIDB4ZTEsCi0weDNjLCAweDIwLCAweDkxLCAweGU1LCAweDAwLCAweDAwLCAweDgyLCAweGUxLCAweDNjLCAweDAwLCAweDgxLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDEsIDB4MGIsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsCi0weDE0LCAweDAwLCAweDgxLCAweGU1LCAweDAwLCAweDFhLCAweDgxLCAweGUxLCAweDI0LCAweDIwLCAweDkxLCAweGU1LAotMHg3MCwgMHgwMCwgMHgxZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgyMCwgMHg4MCwgMHhlNSwKLTB4MjgsIDB4MTAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTAsIDB4ODAsIDB4ZTUsCi0weDJjLCAweDIwLCAweDkwLCAweGU1LCAweDAxLCAweDIwLCAweDgyLCAweGUyLCAweDJjLCAweDIwLCAweDgwLCAweGU1LAotMHgzZiwgMHgwMCwgMHgwMSwgMHhlMiwgMHgzZiwgMHgwMCwgMHg1MCwgMHhlMywgMHgxZSwgMHhmZiwgMHgyZiwgMHgxMSwKLTB4MTgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4ODEsIDB4ZTIsCi0weDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAyLCAweDE4LCAweGEwLCAweGUzLCAweDBiLCAweDAyLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDAxLCAweDA4LCAweDExLCAweGUzLCAweDBiLCAweDEwLCAweGEwLCAweGUzLCAweDAyLCAweDE5LCAweDgxLCAweGUyLAotMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgyMCwgMHg5MCwgMHhlNSwgMHg0MiwgMHgyOCwgMHhiMCwgMHhlMSwKLTB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MDIsIDB4MGMsIDB4MTAsIDB4ZTMsCi0weDAyLCAweDAwLCAweDAwLCAweDBhLCAweDA2LCAweDA3LCAweGEwLCAweGUzLCAweDRjLCAweDExLCAweDgwLCAweGU1LAotMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwYywgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDA2LCAweGEwLCAweGUzLCAweDAxLCAweDAxLCAweDgwLCAweGUyLAotMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgwOCwgMHgxMSwgMHhlMywgMHgwYywgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDIsIDB4MTksIDB4ODEsIDB4ZTIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MjAsIDB4OTAsIDB4ZTUsCi0weDQyLCAweDI4LCAweGIwLCAweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDkwLCAweGU1LAotMHgwMiwgMHgwYywgMHgxMCwgMHhlMywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNiwgMHgwNywgMHhhMCwgMHhlMywKLTB4NGMsIDB4MTEsIDB4ODAsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4NGMsIDB4MDAsIDB4MWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweDgwLCAweGU1LCAweGZmLCAweGZmLCAweGZmLCAweGVhLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMiwgMHgxYiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywKLTB4MTQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4MjEsIDB4MWYsIDB4ZTUsCi0weDE0LCAweDMwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweGU1LAotMHgxYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MTQsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsCi0weDFjLCAweDEwLCAweDgyLCAweGU1LCAweDBjLCAweDEwLCAweDgwLCAweGU1LCAweDFjLCAweDEwLCAweDkyLCAweGU1LAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4YzAsIDB4MjEsIDB4MWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAxLCAweDE2LCAweGEwLCAweGUzLCAweDE0LCAweDAwLCAweDgyLCAweGU1LCAweDBjLCAweDAwLCAweDgxLCAweGU1LAotMHgxYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDE3LCAweGY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHg5MiwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDksIDB4ZjgsIDB4MDAsIDB4MjgsCi0weDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDg0LCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNCwgMHgwNywgMHg2OCwgMHgzYSwgMHg3OCwgMHhkMiwgMHgwNywKLTB4ZDIsIDB4MGYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4ZmYsIDB4MjIsIDB4MDEsIDB4MzIsCi0weDQyLCAweDYwLCAweDAwLCAweGUwLCAweDQ0LCAweDYwLCAweDNhLCAweDdiLCAweDdiLCAweDdiLCAweDFiLCAweDAyLAotMHgxYSwgMHg0MywgMHg4MSwgMHgyYSwgMHgwOCwgMHhkMSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg0MiwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4MDQsIDB4MjIsIDB4YmYsIDB4MTgsIDB4ODIsIDB4NjAsIDB4MDAsIDB4ZTAsCi0weDg0LCAweDYwLCAweDNhLCAweDdiLCAweDdiLCAweDdiLCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDA4LCAweDJhLAotMHgwNiwgMHhkMSwgMHgwNiwgMHgyMywgMHg0MSwgMHg2OCwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwKLTB4MGUsIDB4MzEsIDB4M2MsIDB4ZTAsIDB4YzEsIDB4MjMsIDB4ZGIsIDB4MDAsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDEsCi0weDQxLCAweDY4LCAweDI0LCAweDRiLCAweDE5LCAweDQzLCAweDNlLCAweGUwLCAweDIzLCAweDRiLCAweDlhLCAweDQyLAotMHgwNCwgMHhkMSwgMHgwMSwgMHgyMywgMHgxYiwgMHgwMywgMHg0MSwgMHg2OCwgMHgxOSwgMHg0MywgMHgzNiwgMHhlMCwKLTB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsCi0weDEyLCAweDBjLCAweDJlLCAweDNhLCAweDFjLCAweDRiLCAweDlhLCAweDQyLCAweDJkLCAweGQ4LCAweDAxLCAweDI1LAotMHg0MiwgMHg2OCwgMHgxNSwgMHg0MywgMHg0NSwgMHg2MCwgMHhiYSwgMHg3YiwgMHhmYiwgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWEsIDB4NDMsIDB4MTgsIDB4NGIsIDB4OWEsIDB4NDIsIDB4MjIsIDB4ZDEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsCi0weDQ0LCAweGNiLCAweDliLCAweDA3LCAweGRiLCAweDBlLCAweGRhLCAweDQwLCAweDViLCAweDQyLCAweDIwLCAweDMzLAotMHg5ZSwgMHg0MCwgMHgxNiwgMHg0MywgMHgwMywgMHgyZSwgMHgxOCwgMHhkMSwgMHgzOSwgMHg3ZCwgMHg3YiwgMHg3ZCwKLTB4MWIsIDB4MDIsIDB4MTksIDB4NDMsIDB4MDgsIDB4MjksIDB4MDcsIDB4ZDEsIDB4MDQsIDB4MjEsIDB4MjksIDB4NDMsCi0weDQxLCAweDYwLCAweDgxLCAweDY4LCAweDE2LCAweDMxLCAweDgxLCAweDYwLCAweDAxLCAweDIxLCAweDBhLCAweGUwLAotMHhjMSwgMHgyMywgMHhkYiwgMHgwMCwgMHg5OSwgMHg0MiwgMHgwNCwgMHhkMSwgMHgwMSwgMHgyMSwgMHg4OSwgMHgwMywKLTB4MjksIDB4NDMsIDB4NDEsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4ODQsIDB4NjAsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MWMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDgwLCAweDAwLCAweDAwLAotMHhhZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhYSwgMHhhYSwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNCwgMHg0MiwgMHg2OCwKLTB4ZDEsIDB4MDgsIDB4M2YsIDB4ZDMsIDB4MDEsIDB4NjgsIDB4ODMsIDB4NjgsIDB4NTksIDB4MTgsIDB4MDIsIDB4MzksCi0weDhmLCAweDc4LCAweDNmLCAweDA3LCAweDNmLCAweDBmLCAweDA1LCAweDJmLCAweDAzLCAweGQxLCAweGRhLCAweDFkLAotMHgwZCwgMHgzMiwgMHhjMiwgMHg2MCwgMHgwNSwgMHhlMCwgMHhiZiwgMHgwMCwgMHhkYiwgMHgxOSwgMHhjMywgMHg2MCwKLTB4MDgsIDB4MjMsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4OGEsIDB4NzgsIDB4MTIsIDB4MDcsIDB4MTIsIDB4MGYsCi0weDkyLCAweDAwLCAweDAyLCAweDYxLCAweDBhLCAweDc5LCAweDRiLCAweDc5LCAweDFiLCAweDAyLCAweDFhLCAweDQzLAotMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4NDIsIDB4NjEsIDB4Y2EsIDB4N2EsIDB4MDYsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4MTAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDEwLCAweGUwLCAweDExLCAweDJhLCAweDAzLCAweGQxLCAweDIwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwYSwgMHhlMCwgMHgzMywgMHgyYSwgMHgwMywgMHhkMSwgMHg0MCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MzIsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4ODAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweGM5LCAweDdhLCAweGMwLCAweDQ2LCAweDAxLCAweDc2LAotMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwYSwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MCwgMHg0YiwgMHg3OCwKLTB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4OGIsIDB4NzgsIDB4MWIsIDB4MDQsIDB4MWEsIDB4NDMsCi0weDAyLCAweDYwLCAweGM5LCAweDc4LCAweDA5LCAweDA2LCAweDExLCAweDQzLCAweDAxLCAweDYwLCAweDcwLCAweDQ3LAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHg0OCwgMHg2OCwgMHg4MCwgMHgwOSwgMHgyNiwgMHhkMywgMHhiOCwgMHg2YSwKLTB4YzksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDIsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDExLCAweDIzLCAweDliLCAweDAyLCAweDk4LCAweDQyLAotMHgxOCwgMHhkMSwgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjIsIDB4MzgsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4ZGEsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsCi0weDk1LCAweGZkLCAweDAxLCAweDIwLCAweDA3LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDczLCAweDA3LCAweDQ5LAotMHg0YSwgMHg2YywgMHgxMiwgMHgxOCwgMHg0YSwgMHg2NCwgMHgwNiwgMHg0OSwgMHg4YSwgMHg2ZCwgMHgxMiwgMHgxOCwKLTB4OGEsIDB4NjUsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmEsIDB4ZTcsCi0weDE4LCAweDFhLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHg4MSwgMHgwNywgMHgxOSwgMHhkMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDEsIDB4MWQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDIsIDB4MDIsCi0weDEyLCAweDBlLCAweDEyLCAweDA2LCAweDAwLCAweDBhLCAweGZmLCAweDIzLCAweDFiLCAweDA0LCAweDE4LCAweDQwLAotMHgxMCwgMHg0MywgMHgwYSwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxMCwgMHg0MywgMHgwOSwgMHgwMiwKLTB4MWIsIDB4MGEsIDB4MTksIDB4NDAsIDB4MDgsIDB4NDMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAxLCAweDA2LCAweDAyLCAweDAyLCAweGZmLCAweDIzLCAweDFiLCAweDA0LAotMHgxYSwgMHg0MCwgMHgxMSwgMHg0MywgMHgwMiwgMHgwYSwgMHgxYiwgMHgwYSwgMHgxYSwgMHg0MCwgMHgxMSwgMHg0MywKLTB4MDAsIDB4MGUsIDB4MDgsIDB4NDMsIDB4ZWQsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MjMsCi0weDgxLCAweDZiLCAweDE5LCAweDQwLCAweDAwLCAweDIyLCAweDAwLCAweDI5LCAweDQ2LCAweGQwLCAweGM3LCAweDFkLAotMHgzOSwgMHgzNywgMHgzOSwgMHg3YiwgMHgzMywgMHgyOSwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOSwgMHgzZiwgMHhkMSwKLTB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGEsIDB4NjUsIDB4YzQsIDB4MWQsIDB4MmQsIDB4MzQsIDB4Y2QsIDB4MWQsCi0weDJkLCAweDM1LCAweDAwLCAweDIyLCAweDkzLCAweDAwLCAweGU2LCAweDU4LCAweGMwLCAweDQ2LCAweGVlLCAweDUwLAotMHgwMSwgMHgzMiwgMHgwNywgMHgyYSwgMHhmOCwgMHhkMywgMHg4MiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0YSwgMHg2MywKLTB4ODIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjIsIDB4N2EsIDB4OGIsIDB4Y2IsIDB4MWQsIDB4MzksIDB4MzMsCi0weDVhLCAweDgzLCAweDQwLCAweDZhLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLCAweDEyLCAweDQ4LCAweDAxLCAweDI3LAotMHg0MiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMCwgMHhkMSwgMHhjMiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMywgMHhkMSwKLTB4NDIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsIDB4MDEsIDB4NjEsIDB4YzEsIDB4NjAsIDB4MDEsIDB4NmEsCi0weDAyLCAweDI5LCAweDAyLCAweGQzLCAweDIwLCAweDMwLCAweDA3LCAweDcxLCAweDBjLCAweGUwLCAweDAwLCAweGYwLAotMHgxMywgMHhmOCwgMHgwOSwgMHhlMCwgMHhjMiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMSwgMHgwMSwgMHg2MSwKLTB4YzEsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4MDIsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTEsIDB4NjUsIDB4MDEsIDB4NjEsCi0weDM4LCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDEwLCAweDFjLCAweGZhLCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgxZSwgMHg0OSwgMHgwMCwgMHgyMiwgMHhjYiwgMHg2OCwKLTB4MDAsIDB4MmIsIDB4MzQsIDB4ZDAsIDB4YzgsIDB4MWQsIDB4ZjksIDB4MzAsIDB4ODMsIDB4NjIsIDB4Y2IsIDB4NjgsCi0weDliLCAweDZhLCAweGMwLCAweDQ2LCAweGMzLCAweDYyLCAweGNmLCAweDY5LCAweDdiLCAweDAwLCAweGRmLCAweDE5LAotMHg3ZiwgMHgwMiwgMHgxNywgMHg0YiwgMHhmZiwgMHgxOCwgMHhmZiwgMHgzNywgMHg2NSwgMHgzNywgMHg4MywgMHg2MywKLTB4MDcsIDB4NjMsIDB4Y2IsIDB4MWQsIDB4ZmYsIDB4MzMsIDB4NWEsIDB4MzMsIDB4MWEsIDB4NzIsIDB4Y2IsIDB4NjksCi0weDAwLCAweDJiLCAweDAxLCAweGQwLCAweGNhLCAweDYxLCAweDAxLCAweGUwLCAweDAxLCAweDIzLCAweGNiLCAweDYxLAotMHgwZiwgMHgxYywgMHhjOSwgMHg2OCwgMHg0OSwgMHg2YSwgMHgwOSwgMHg4OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywKLTB4ZjgsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4M2EsIDB4MzAsIDB4NDIsIDB4NjAsIDB4MDIsIDB4ODIsIDB4ODIsIDB4NjAsCi0weGMyLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNlLCAweGZhLCAweDM4LCAweDZhLCAweDAxLCAweDMwLAotMHgzOCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwYSwgMHhmOCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLCAweGY5LCAweDFkLCAweGY5LCAweDMxLAotMHg4OCwgMHg2YSwgMHhjMiwgMHgxZCwgMHgyZCwgMHgzMiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMiwKLTB4MWEsIDB4NDMsIDB4YzgsIDB4NmEsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4ODAsIDB4MTgsCi0weDgyLCAweDc5LCAweGMzLCAweDc5LCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDEzLCAweDAyLCAweDEyLCAweDBhLAotMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMiwgMHgzOCwKLTB4OTIsIDB4MDQsIDB4OTIsIDB4MGMsIDB4MDAsIDB4MjYsIDB4MjUsIDB4NGQsCi0weGVjLCAweDFkLCAweGZmLCAweDM0LCAweDNhLCAweDM0LCAweDAwLCAweDJhLCAweDA0LCAweGQwLCAweDIwLCAweDhhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOCwgMHg0MywgMHgyYiwgMHhlMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4YzIsIDB4MWQsIDB4MGQsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MzAsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDEwLCAweDQzLCAweDAzLCAweDFjLAotMHhmOCwgMHgxZCwgMHhmZiwgMHgzMCwgMHg0YSwgMHgzMCwgMHg4MiwgMHg3OCwgMHhjOCwgMHg2YiwgMHgxOSwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZGEsIDB4MjAsIDB4OGEsIDB4ZmYsIDB4MjMsCi0weDAxLCAweDMzLCAweDE4LCAweDQzLCAweDBlLCAweGUwLCAweGY5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLAotMHgwOCwgMHg2MCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxYywgMHhmOCwKLTB4MDAsIDB4MjgsIDB4MTQsIDB4ZDEsIDB4MjAsIDB4OGEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MTgsIDB4NDMsCi0weDIwLCAweDgyLCAweDIxLCAweDhhLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGEyLCAweGZiLCAweGU4LCAweDY4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1NCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4ZTgsIDB4NjAsIDB4MzAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsCi0weGZhLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDA3LCAweDFjLAotMHhmYywgMHgxZCwgMHhmOSwgMHgzNCwgMHhhMCwgMHg2YiwgMHhhNiwgMHg2YSwgMHhjNSwgMHgxZCwgMHgwZCwgMHgzNSwKLTB4MzgsIDB4NDgsIDB4YzAsIDB4NmEsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDIsIDB4MTgsCi0weDAxLCAweDIwLCAweDgwLCAweDA3LCAweDEwLCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgwMCwgMHg5MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkMCwgMHgxZCwgMHgwNSwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MzgsIDB4MWMsIDB4MjksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZmEsIDB4YTgsIDB4ODgsCi0weDQxLCAweDA3LCAweDAxLCAweGQwLCAweDAwLCAweDIwLCAweDUxLCAweGUwLCAweDI5LCAweDg5LCAweDA5LCAweDE4LAotMHg2MCwgMHg2YiwgMHg4MSwgMHg0MiwgMHhmOCwgMHhkOCwgMHg2OSwgMHg4OSwgMHhlYSwgMHg4OCwgMHg4OSwgMHgxOCwKLTB4ODEsIDB4NDIsIDB4ZjMsIDB4ZDgsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MjUsIDB4ZDEsIDB4ZTAsIDB4NmEsCi0weGYxLCAweDZiLCAweDQwLCAweDE4LCAweDcxLCAweDZjLCAweGZhLCAweDFkLCAweGNkLCAweDMyLCAweDAxLCAweGYwLAotMHgzMywgMHhmOSwgMHhmYSwgMHgxZCwgMHhmZiwgMHgzMiwgMHgzYSwgMHgzMiwgMHhlMCwgMHg2YSwgMHg1MSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4YzMsIDB4MWQsIDB4MDMsIDB4MzMsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NWUsIDB4NTgsCi0weGM5LCAweDE5LCAweGZmLCAweDMxLCAweDAxLCAweDMxLCAweDRlLCAweDYxLCAweDAxLCAweDMwLCAweDA0LCAweDI4LAotMHhmNiwgMHhkMywgMHhlMCwgMHg2YSwgMHg1MSwgMHg2OSwgMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4NDMsIDB4MDAsIDB4Y2EsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsCi0weGZhLCAweGQzLCAweDI5LCAweDFjLCAweDExLCAweDRhLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweGFlLCAweGZiLAotMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg2MCwgMHg2YiwgMHgwMiwgMHg0MywgMHgwMSwgMHgyMCwgMHgyMSwgMHg2YiwKLTB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmIsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NjAsIDB4NmIsIDB4MDIsIDB4NDMsCi0weDAwLCAweDIwLCAweGUxLCAweDZhLCAweGZmLCAweGY3LCAweDllLCAweGZiLCAweGExLCAweDZiLCAweDA4LCAweDRhLAotMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHg5OSwgMHhmYiwgMHgwMywgMHgyMCwgMHgwNiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDU0LCAweDAwLCAweDAzLCAweDAwLCAweDE0LCAweDAwLCAweDBmLCAweDAwLAotMHg2YywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg4ZCwgMHhiMCwgMHgwMCwgMHgyMCwgMHhiNSwgMHg0YSwKLTB4ZDUsIDB4MWQsIDB4ZjksIDB4MzUsIDB4NjgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4YjMsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGE4LCAweDZhLCAweGM0LCAweDFkLCAweDJkLCAweDM0LCAweGIxLCAweDQ4LAotMHhjMCwgMHg2YSwgMHhkNywgMHgxZCwgMHhmZiwgMHgzNywgMHgzYSwgMHgzNywgMHgzOSwgMHg2OCwgMHg0YiwgMHgwMCwKLTB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsCi0weDA1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA4LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOSwgMHg5MCwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwYSwKLTB4MGEsIDB4OTAsIDB4MGEsIDB4OTgsIDB4YTQsIDB4NGUsIDB4MDEsIDB4MjgsIDB4NTksIDB4ZDEsIDB4MjgsIDB4NmIsCi0weGEyLCAweDY4LCAweDgwLCAweDE4LCAweGEyLCAweDRhLCAweDIxLCAweDY5LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHhmMCwgMHgyNiwgMHhmOSwgMHgyOCwgMHg2YiwgMHg3OSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4OTgsIDB4NGIsCi0weGQzLCAweDE4LCAweGZmLCAweDMzLCAweDAxLCAweDMzLCAweDViLCAweDY5LCAweGMwLCAweDQ2LCAweDhiLCAweDUwLAotMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHgzMSwgMHgxYywgMHg4MiwgMHgwMCwKLTB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDQsIDB4YWUsCi0weGIzLCAweDUwLCAweDAxLCAweDMwLCAweDAzLCAweDI4LCAweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDA4LCAweDkwLAotMHg5MCwgMHg0OSwgMHg0MiwgMHgwMCwgMHg4YiwgMHg1YSwgMHhiMiwgMHg1YSwgMHg5MywgMHg0MiwgMHgxMywgMHhkMCwKLTB4OGUsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4YjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweDM4LCAweDhhLCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDcxLCAweGUwLCAweDM4LCAweDhhLAotMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHg2ZCwgMHhlMCwgMHgwMCwgMHhmMCwgMHgxMSwgMHhmOSwgMHgwMSwgMHhmMCwKLTB4NjcsIDB4ZmYsIDB4ZjUsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZTMsIDB4ZDMsIDB4MDgsIDB4OTgsCi0weDAwLCAweDI4LCAweDBjLCAweGQxLCAweGI4LCAweDY4LCAweDQxLCAweDFjLCAweGI5LCAweDYwLCAweDAwLCAweDI4LAotMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHgwMiwgMHhlMCwgMHgzOCwgMHg4YSwKLTB4MDQsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODIsIDB4NzgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4NzgsIDB4NjAsCi0weDYyLCAweGUwLCAweDBhLCAweDk4LCAweDAyLCAweDI4LCAweDVmLCAweGQxLCAweDA5LCAweDk4LCAweDQwLCAweDBjLAotMHg3MywgMHhkMywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsCi0weDBjLCAweDM4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDAwLCAweDIxLCAweDhhLCAweDAwLCAweDZiLCAweDRiLAotMHhkNiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNCwgMHhhZSwKLTB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjMsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MWUsCi0weDBjLCAweDkzLCAweDY4LCAweDRhLCAweDE2LCAweDZiLCAweGMwLCAweDQ2LCAweDBiLCAweDk2LCAweDhhLCAweDAwLAotMHgwYywgMHg5YiwgMHg5YiwgMHgxOCwgMHgwYiwgMHg5ZSwgMHg5ZSwgMHgxOSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksCi0weGYxLCAweGQzLCAweDY5LCAweDQ2LCAweDhiLCAweDFjLCAweDA3LCAweDkzLCAweDAwLCAweDIxLCAweDA4LCAweDkxLAotMHgwNCwgMHhhZSwgMHg0YSwgMHgwMCwgMHgwNywgMHg5YiwgMHg5YiwgMHg1YSwgMHhiMiwgMHg1YSwgMHg5MywgMHg0MiwKLTB4MTEsIDB4ZDAsIDB4NTgsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4ZjgsIDB4NjgsCi0weDQxLCAweDFjLCAweGY5LCAweDYwLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDM4LCAweDhhLCAweDIwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMiwgMHhlMCwgMHgzOCwgMHg4YSwgMHg4MCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MiwKLTB4OGYsIDB4ZTcsIDB4MDEsIDB4MzEsIDB4MDYsIDB4MjksIDB4ZTQsIDB4ZDMsIDB4MDgsIDB4OTksIDB4MDAsIDB4MjksCi0weDBkLCAweGQxLCAweGY5LCAweDY4LCAweDRhLCAweDFjLCAweGZhLCAweDYwLCAweDAwLCAweDI5LCAweDA0LCAweGQxLAotMHgzOSwgMHg4YSwgMHgwMiwgMHgyMywgMHgxOSwgMHg0MywgMHgwMywgMHhlMCwgMHgwYywgMHhlMCwgMHgzOSwgMHg4YSwKLTB4MDgsIDB4MjMsIDB4MTksIDB4NDMsIDB4MzksIDB4ODIsIDB4MjksIDB4NmIsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDAxLCAweDM4LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDIwLCAweDc2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgxMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDAsIDB4ZTAsIDB4MTksIDB4ZTAsIDB4MzUsIDB4NDgsIDB4MmEsIDB4NmIsCi0weGMwLCAweDQ2LCAweGVhLCAweDYyLCAweDA0LCAweDI5LCAweDRmLCAweGQxLCAweDAxLCAweDIxLCAweGM2LCAweDFkLAotMHhmZiwgMHgzNiwgMHg1YSwgMHgzNiwgMHgzMSwgMHg3MiwgMHgwYSwgMHg5OSwgMHgwMiwgMHgyOSwgMHgxZSwgMHhkMSwKLTB4MDksIDB4OTksIDB4MDksIDB4MGUsIDB4NDksIDB4MDYsIDB4MWEsIDB4ZDEsIDB4ZTEsIDB4MWQsIDB4MDUsIDB4MzEsCi0weDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDM5LCAweDFhLCAweGUwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweGY5LCAweDY4LCAweDRhLCAweDFjLCAweGZhLCAweDYwLCAweDAwLCAweDI5LCAweGJjLCAweGQxLAotMHhiNiwgMHhlNywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMSwgMHgxZCwKLTB4MDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4YTEsIDB4NjAsCi0weGU4LCAweDZhLCAweGMwLCAweDQ2LCAweDIwLCAweDYwLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDg4LCAweGZjLAotMHgyMCwgMHg3ZSwgMHgzMywgMHgyOCwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwMSwgMHgyMSwKLTB4MTQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YjksIDB4NjAsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDg1LCAweGY4LCAweDI4LCAweDZiLCAweGE5LCAweDZhLCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDIwLCAweDFjLAotMHhmZiwgMHhmNywgMHhjMCwgMHhmZCwgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwZSwgMHhlMCwgMHgwMCwgMHgyMCwKLTB4MzAsIDB4NzIsIDB4MTEsIDB4ZTAsIDB4MzMsIDB4MjksIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjksIDB4MGQsIDB4ZDEsCi0weDA3LCAweDFjLCAweDAwLCAweGYwLCAweDcxLCAweGY4LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGIwLCAweGZkLAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMSwgMHhmMCwgMHg3MCwgMHhmZSwgMHgwZCwgMHhiMCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4ZjYsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg0MCwgMHgwNywgMHgwMCwgMHg4MCwgMHg4MiwgMHgwNywgMHgwMCwgMHg4MCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MjUsIDB4NDgsCi0weDQxLCAweDY4LCAweDAxLCAweDMxLCAweDQxLCAweDYwLCAweDI0LCAweDRmLCAweGY5LCAweDFkLCAweGY5LCAweDMxLAotMHgwMCwgMHgyNCwgMHg4OCwgMHg2YSwgMHhmYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5NCwgMHg2MSwgMHgwNCwgMHgyMiwKLTB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NjAsIDB4MTAsIDB4MjIsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDlhLCAweDYxLCAweGZhLCAweDFkLCAweGZmLCAweDMyLCAweDVhLCAweDMyLCAweDEzLCAweDdhLCAweDFiLCAweDRhLAotMHgwMCwgMHgyYiwgMHgwYiwgMHhkMCwgMHgxNSwgMHg4YSwgMHgyZSwgMHgwYSwgMHgzNiwgMHgwMiwgMHgzMywgMHgyMywKLTB4MmIsIDB4NDAsIDB4OWIsIDB4MDAsIDB4MWUsIDB4NDMsIDB4Y2MsIDB4MjMsIDB4MmIsIDB4NDAsIDB4OWIsIDB4MDgsCi0weDMzLCAweDQzLCAweDEzLCAweDgyLCAweDEyLCAweDhhLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDgzLAotMHg0YSwgMHg2YiwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MSwgMHgwYSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4ODIsIDB4NjIsIDB4YzQsIDB4NjIsIDB4YzMsIDB4MWQsIDB4MzksIDB4MzMsIDB4NGEsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDVhLCAweDgzLCAweDA0LCAweDIzLCAweDAyLCAweDY4LCAweDFhLCAweDQzLCAweDAyLCAweDYwLCAweDg4LCAweDZhLAotMHgwMSwgMHhmMCwgMHgzMiwgMHhmYSwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1NCwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjgsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhhYywgMHgwNywgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHhjMSwgMHgxZCwgMHhmOSwgMHgzMSwgMHg4YSwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDEsIDB4MWQsIDB4NDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weDBiLCAweDA2LCAweDFiLCAweDBlLCAweDAxLCAweDI3LCAweGMxLCAweDFkLCAweGZmLCAweDMxLCAweDRhLCAweDMxLAotMHgzMywgMHgyYiwgMHgwNSwgMHhkMSwgMHg4YiwgMHg3MCwgMHgwMSwgMHgxYywgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGYsIDB4ZjgsIDB4MDYsIDB4ZTAsIDB4MzIsIDB4MmIsIDB4MDgsIDB4ZDEsIDB4OGIsIDB4NzAsIDB4MDEsIDB4MWMsCi0weDEwLCAweDFjLCAweDAwLCAweGYwLCAweDNjLCAweGY4LCAweDM4LCAweDFjLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg4OCwgMHg3MCwgMHhmOSwgMHhlNywgMHg5MCwgMHhiNCwgMHhjYSwgMHgxZCwKLTB4ZjksIDB4MzIsIDB4MzMsIDB4MjcsIDB4Y2MsIDB4MWQsIDB4ZmYsIDB4MzQsIDB4NGEsIDB4MzQsIDB4ZDMsIDB4NmEsCi0weGMwLCAweDQ2LCAweGE3LCAweDcwLCAweGZmLCAweDMxLCAweDQxLCAweDMxLCAweDA3LCAweDZjLCAweGMwLCAweDQ2LAotMHg0ZiwgMHg2MSwgMHhmYiwgMHgxOCwgMHgzOSwgMHgxYywgMHg5ZiwgMHgxZSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4ZmMsIDB4MWMsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4OWIsIDB4MDAsCi0weDFiLCAweDA0LCAweDFiLCAweDBjLCAweGM5LCAweDE4LCAweDA4LCAweDMxLCAweDAxLCAweDY0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhiOSwgMHgxYywgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgzNCwgMHgzMCwgMHgwMSwgMHg3NiwKLTB4ZjgsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4YjksIDB4MWQsCi0weDE5LCAweDQzLCAweGQwLCAweDYzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDQzLAotMHhkMCwgMHg2MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjYSwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4YzUsIDB4MWQsIDB4MmQsIDB4MzUsIDB4MzIsIDB4MjAsIDB4Y2YsIDB4MWQsCi0weGZmLCAweDM3LCAweDRhLCAweDM3LCAweGQzLCAweDZhLCAweGMwLCAweDQ2LCAweGI4LCAweDcwLCAweGNjLCAweDFkLAotMHhmZiwgMHgzNCwgMHgzYSwgMHgzNCwgMHhlOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MSwgMHgxMCwgMHgzMCwKLTB4ZTgsIDB4NjAsIDB4NjAsIDB4NjksIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDM4LCAweDFkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweGI5LCAweDFjLCAweDE5LCAweDQzLAotMHhkMCwgMHg2MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHg0MywgMHhkMCwgMHg2MywKLTB4ZjgsIDB4MWQsIDB4MDMsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4ZmMsIDB4ZmIsIDB4MjAsIDB4NjIsIDB4ZjgsIDB4MWQsCi0weDA3LCAweDMwLCAweGZmLCAweGY3LCAweGY3LCAweGZiLCAweDYwLCAweDYyLCAweDAwLCAweDIwLCAweDI4LCAweDc2LAotMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmNywgMHhiNSwgMHg4MSwgMHhiMCwgMHgwMSwgMHg5OCwKLTB4YzcsIDB4MWQsIDB4ZjksIDB4MzcsIDB4YjgsIDB4NmEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDA1LCAweDM0LCAweDIzLCAweDQzLCAweDFjLCAweDY4LCAweGZmLCAweDIzLCAweGZlLCAweDMzLCAweDIzLCAweDQwLAotMHg3ZiwgMHg2YiwgMHgzZiwgMHgwNCwgMHgzYiwgMHg0MywgMHgwYiwgMHg2MCwgMHgzNCwgMHgzMCwgMHgxYywgMHgxYywKLTB4ODAsIDB4MjMsIDB4MjMsIDB4NDAsIDB4MDEsIDB4OWYsIDB4ZmYsIDB4MzcsIDB4NDEsIDB4MzcsIDB4MDAsIDB4MmIsCi0weDNjLCAweGQwLCAweDBjLCAweDIzLCAweDAwLCAweDkzLCAweDAwLCAweDIzLCAweDlkLCAweDAwLCAweGFlLCAweDE4LAotMHgzNiwgMHg2OSwgMHg2ZCwgMHgxOCwgMHg2ZSwgMHg2MSwgMHgwMSwgMHgzMywgMHgwNSwgMHgyYiwgMHhmNywgMHhkMywKLTB4MDAsIDB4MjMsIDB4OWQsIDB4MDAsIDB4YWUsIDB4MTgsIDB4NzYsIDB4NmEsIDB4NmQsIDB4MTgsIDB4YWUsIDB4NjIsCi0weDAxLCAweDMzLCAweDA1LCAweDJiLCAweGY3LCAweGQzLCAweDAxLCAweDliLCAweGZmLCAweDMzLCAweDUxLCAweDMzLAotMHg5YiwgMHg3OCwgMHgzMywgMHgyYiwgMHgwZSwgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwKLTB4MDEsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGM1LCAweDFkLCAweDBkLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDE2LCAweGUwLAotMHg3YiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwKLTB4MGQsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4N2QsIDB4NjksIDB4NWQsIDB4MWIsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGM2LCAweDFkLCAweDAxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweGViLCAweDE4LAotMHgwYywgMHgzYiwgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMywgMHgwMCwgMHg5MywgMHg0YiwgMHg4MSwgMHhjYiwgMHg4MCwKLTB4NjMsIDB4MDksIDB4NDksIDB4ZDMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzQsIDB4MWQsIDB4MDUsIDB4MzQsCi0weDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDgxLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhjNCwgMHgxZCwgMHgwZCwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwYywgMHg4OSwgMHgxYiwgMHgxYiwKLTB4MDAsIDB4OWMsIDB4MWMsIDB4MWIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDIwLCAweDE4LCAweDg4LCAweDgwLCAweDM4LCAweDZhLCAweDA0LCAweDBlLCAweGZmLCAweDIzLAotMHgxYiwgMHgwNCwgMHgwMywgMHg0MCwgMHgxYiwgMHgwYSwgMHgxYywgMHg0MywgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4MDMsIDB4NDAsIDB4MWIsIDB4MDIsIDB4MjMsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4YzgsIDB4NjAsCi0weDc4LCAweDZhLCAweDA3LCAweDBlLCAweGZmLCAweDIzLCAweDFiLCAweDA0LCAweDAzLCAweDQwLCAweDFiLCAweDBhLAotMHgxZiwgMHg0MywgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgwMywgMHg0MCwgMHgxYiwgMHgwMiwgMHgzYiwgMHg0MywKLTB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NjEsIDB4ZDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjMsCi0weDkwLCAweDZiLCAweGMwLCAweDQ2LCAweDA4LCAweDY0LCAweDUwLCAweDZjLCAweGMwLCAweDQ2LCAweDQ4LCAweDY0LAotMHgxMCwgMHg2YywgMHhjMCwgMHg0NiwgMHg4OCwgMHg2NCwgMHhkMCwgMHg2YywgMHhjMCwgMHg0NiwgMHhjOCwgMHg2NCwKLTB4OTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjUsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MGIsIDB4ODEsCi0weDhiLCAweDgwLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwZiwgMHg0YSwgMHg5MywgMHg4OSwgMHgwMSwgMHgzMywgMHg5MywgMHg4MSwgMHhjMiwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4MDQsIDB4MjMsIDB4OTAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzMsIDB4NjAsIDB4MTAsIDB4MjMsIDB4ODMsIDB4NjEsCi0weGNiLCAweDBhLCAweDAxLCAweGQzLCAweDE4LCAweDIzLCAweDgzLCAweDYxLCAweGMxLCAweDgzLCAweDUxLCAweDZiLAotMHhjMCwgMHg0NiwgMHhjMSwgMHg4MSwgMHg1MSwgMHg2YiwgMHhjMiwgMHgxZCwgMHgzOSwgMHgzMiwgMHg1MSwgMHg4MywKLTB4MDQsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4ZjgsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgxYiwgMHg0YywgMHgyMCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgxYiwgMHhkMiwgMHgwMCwgMHgyMCwKLTB4ZTcsIDB4MWQsIDB4MTksIDB4MzcsIDB4MzgsIDB4NzEsIDB4ZTEsIDB4NjgsIDB4ZTAsIDB4MWQsIDB4ZjksIDB4MzAsCi0weDAwLCAweDI5LCAweDE1LCAweGQwLCAweDQyLCAweDZhLCAweDAwLCAweDJhLCAweDEyLCAweGQxLCAweDAxLCAweDI1LAotMHgwYSwgMHhlMCwgMHhmZiwgMHhmNywgMHg4OSwgMHhmYiwgMHgwMCwgMHgyOCwgMHgwOSwgMHhkMSwgMHgyMCwgMHg2YSwKLTB4MDIsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4M2QsIDB4NzEsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsCi0weDM4LCAweDc5LCAweDAwLCAweDI4LCAweGYxLCAweGQwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHg2YSwgMHgwMCwgMHgyOCwgMHhmOSwgMHhkMSwgMHgwMCwgMHgyOSwgMHhmNywgMHhkMSwgMHg2MCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MDQsIDB4ZDAsIDB4MDYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsIDB4YTgsIDB4ZmMsCi0weGVmLCAweGU3LCAweDYwLCAweDY4LCAweDAwLCAweDI4LCAweGVjLCAweGQwLCAweDAwLCAweGYwLCAweDVhLCAweGY4LAotMHhlOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MjAsIDB4MjMsIDB4YjgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4MDEsIDB4MjQsCi0weDAwLCAweDI1LCAweDAwLCAweDI4LCAweDBiLCAweGQxLCAweDM4LCAweDZhLCAweDAwLCAweDI4LCAweDAzLCAweGQxLAotMHgyOCwgMHgxYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxZiwgMHg0OCwgMHgwMSwgMHg2ZSwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4NjYsIDB4MDMsIDB4ZTAsIDB4NDgsIDB4NjgsIDB4YzQsIDB4MjMsIDB4MTgsIDB4NDAsCi0weDAzLCAweGQxLCAweDM4LCAweDZhLCAweDAwLCAweGYwLCAweDBjLCAweGZjLCAweDJmLCAweGUwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHgxYywgMHhmYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYSwgMHhiOCwgMHg2OCwKLTB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4ZDEsIDB4ZmIsIDB4YjgsIDB4NjgsCi0weDM5LCAweDZhLCAweGMwLCAweDQ2LCAweDg4LCAweDYwLCAweDM4LCAweDZhLCAweGMwLCAweDQ2LCAweGM1LCAweDYwLAotMHgxMCwgMHg0OCwgMHg0MSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgxMSwgMHhkMSwgMHhjMSwgMHg2OCwgMHgwMCwgMHgyOSwKLTB4MDksIDB4ZDEsIDB4NDEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDEsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsCi0weDgxLCAweDYwLCAweDQxLCAweDYwLCAweDAwLCAweGYwLCAweDE0LCAweGY4LCAweDBiLCAweGUwLCAweDM5LCAweDZhLAotMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHg0MSwgMHg2MCwgMHgwNiwgMHhlMCwgMHgzOSwgMHg2YSwgMHg4MiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZDEsIDB4NjAsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4MjAsIDB4MWMsCi0weGJkLCAweGU3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHg5MCwgMHhiNSwgMHgwYiwgMHg0YywgMHg2NywgMHg2OCwgMHgwMCwgMHgyZiwgMHgwZiwgMHhkMCwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGEsIDB4ZDEsIDB4NjAsIDB4NjgsIDB4YzAsIDB4NjgsCi0weGMwLCAweDQ2LCAweDYwLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGMzLCAweGZiLCAweDAwLCAweDIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZmUsIDB4MWQsIDB4NDksIDB4MzYsCi0weDMwLCAweDc4LCAweDQwLCAweDAwLCAweGMwLCAweDE5LCAweDg1LCAweDhiLCAweDMzLCAweDRjLCAweDM0LCAweDRiLAotMHg5ZCwgMHg0MiwgMHgzYywgMHhkMCwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MWQsIDB4ZjksIDB4MzEsIDB4NDgsIDB4ODAsIDB4NmEsIDB4NTgsIDB4MjEsIDB4NjksIDB4NDMsIDB4NDAsIDB4MTgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgyYywgMHg0ZCwgMHgwMSwgMHgyOCwgMHgxYSwgMHhkMSwgMHgzMCwgMHg3OCwgMHhjMCwgMHgxOSwgMHhjMSwgMHgxZCwKLTB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsIDB4ODAsIDB4MTgsIDB4MDksIDB4N2IsIDB4ZWEsIDB4MWQsCi0weDIxLCAweDMyLCAweDAwLCAweGYwLCAweGUzLCAweGZjLCAweDMwLCAweDc4LCAweGMwLCAweDE5LCAweDIwLCAweDMwLAotMHgwMCwgMHg3OSwgMHgzOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjMsIDB4NDIsIDB4MDAsIDB4OGIsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZmEsIDB4ZDMsCi0weGEwLCAweDg4LCAweDQxLCAweDA3LCAweDBiLCAweGQxLCAweDIxLCAweDg5LCAweDA5LCAweDE4LCAweDc4LCAweDY4LAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg4MSwgMHg0MiwgMHgwNCwgMHhkOCwgMHg2MSwgMHg4OSwgMHhlMiwgMHg4OCwKLTB4ODksIDB4MTgsIDB4ODEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDIxLCAweDFjLCAweDE0LCAweDRhLCAweDAwLCAweDIwLCAweGZlLCAweGY3LCAweDVhLCAweGZmLAotMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg0MywKLTB4MDEsIDB4MjAsIDB4MzksIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NTIsIDB4ZmYsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsCi0weDc4LCAweDY4LCAweDAyLCAweDQzLCAweDAwLCAweDIwLCAweDM5LCAweDY4LCAweGZlLCAweGY3LCAweDRhLCAweGZmLAotMHgwYiwgMHg0OSwgMHgwYywgMHg0YSwgMHgwMSwgMHgyMCwgMHhmZSwgMHhmNywgMHg0NSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4ZTksIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4MDIsIDB4MjEsIDB4ZWEsIDB4MWQsIDB4ZjksIDB4MzIsCi0weDUxLCAweDYyLCAweGQ5LCAweGU3LCAweDI4LCAweGFjLCAweDIwLCAweDQwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwKLTB4MTQsIDB4YWMsIDB4MjAsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsCi0weDAwLCAweDIxLCAweDRmLCAweDQ4LCAweGMyLCAweDFkLCAweGY5LCAweDMyLCAweDUxLCAweDYyLCAweDAxLCAweDIxLAotMHhjOSwgMHgwNCwgMHg0ZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgxOSwgMHgzMSwKLTB4NDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4NGEsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsCi0weDliLCAweGZiLCAweDg3LCAweGUwLCAweDQ1LCAweDQ4LCAweDQ3LCAweDY4LCAweGZjLCAweDFkLCAweDQ5LCAweDM0LAotMHgyMSwgMHg3OCwgMHg0OCwgMHgwMCwgMHhjMCwgMHgxOSwgMHg4MCwgMHg4YiwgMHg0NCwgMHg0YSwgMHg5MiwgMHg2YSwKLTB4NTgsIDB4MjMsIDB4NTgsIDB4NDMsIDB4MTUsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZWEsIDB4MWQsCi0weDA1LCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDA4LCAweDM1LCAweDJiLCAweDQzLCAweDFkLCAweDY4LAotMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgyYiwgMHg0MCwgMHgxYiwgMHgwYSwgMHgzYywgMHg0ZCwgMHgwMSwgMHgyYiwKLTB4MjQsIDB4ZDEsIDB4YzgsIDB4MTksIDB4YzEsIDB4MWQsIDB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsCi0weDgwLCAweDE4LCAweDM5LCAweDRhLCAweDA5LCAweDdiLCAweDAwLCAweGYwLCAweGM1LCAweGZjLCAweDIwLCAweDc4LAotMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgMHgwMCwgMHg3OSwgMHgzOSwgMHg2OCwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyMCwKLTB4ODIsIDB4MDAsIDB4NTMsIDB4MTksIDB4OWIsIDB4NmUsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzAsCi0weDAzLCAweDI4LCAweGY3LCAweGQzLCAweGNhLCAweDFkLCAweDA1LCAweDMyLCAweDY5LCAweDQ2LCAweDAwLCAweDIwLAotMHg0MywgMHgwMCwgMHhjZCwgMHg1YSwgMHhjMCwgMHg0NiwgMHhkNSwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwKLTB4ZjgsIDB4ZDMsIDB4MmQsIDB4ZTAsIDB4MDIsIDB4MmIsIDB4MmIsIDB4ZDEsIDB4MTEsIDB4MGEsIDB4MjksIDB4ZDMsCi0weDAwLCAweDIxLCAweDhhLCAweDAwLCAweDUzLCAweDE5LCAweDliLCAweDZlLCAweDZlLCAweDQ2LCAweGIzLCAweDUwLAotMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmNywgMHhkMywgMHgyMSwgMHg3OCwgMHg0OSwgMHgwMCwgMHhjOSwgMHgxOSwKLTB4MDksIDB4OGYsIDB4M2EsIDB4NjgsIDB4OGIsIDB4MTgsIDB4NmEsIDB4NDYsIDB4MDAsIDB4MjEsIDB4NGQsIDB4MDAsCi0weDU2LCAweDViLCAweGMwLCAweDQ2LCAweDVlLCAweDUzLCAweDAxLCAweDMxLCAweDA2LCAweDI5LCAweGY4LCAweGQzLAotMHgxOSwgMHg0OSwgMHg4YSwgMHg2YSwgMHgxMywgMHgxOCwgMHgxYSwgMHg2ZCwgMHgwMCwgMHg5ZCwgMHg1NSwgMHg0MCwKLTB4MTksIDB4NGEsIDB4ZDYsIDB4NjgsIDB4NzUsIDB4NDAsIDB4MWQsIDB4NjUsIDB4ODksIDB4NmEsIDB4MDgsIDB4MTgsCi0weDQxLCAweDZkLCAweDAyLCAweDliLCAweDU5LCAweDQwLCAweDkyLCAweDY5LCAweDUxLCAweDQwLCAweDQxLCAweDY1LAotMHgyMCwgMHg3OCwgMHg0MSwgMHgxZSwgMHgyMSwgMHg3MCwgMHgwMCwgMHgyOCwgMHgwZCwgMHhkMCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZjQsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MGQsIDB4ZDEsIDB4MDgsIDB4NGEsIDB4NTAsIDB4NjgsCi0weGMwLCAweDY4LCAweGMwLCAweDQ2LCAweDUwLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGE0LCAweGZhLAotMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3MywgMHhmYSwgMHgwMSwgMHhmMCwgMHhkZSwgMHhmYSwKLTB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDM4LCAweDA0LCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg5NCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4NjksIDB4NGIsIDB4OWYsIDB4NmEsIDB4NTgsIDB4MjMsIDB4NWEsIDB4NDMsCi0weGJhLCAweDE4LCAweGMzLCAweDFkLCAweDQ5LCAweDMzLCAweDFmLCAweDc4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhkNCwgMHgxZCwgMHgwMSwgMHgzNCwgMHgyMywgMHg0MywgMHgxZCwgMHg2OCwgMHg0MywgMHg2OCwgMHgxYywgMHgwNCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4MDUsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDFjLCAweDQzLCAweDQyLCAweDIzLCAweDFjLCAweDQzLCAweDBjLCAweDYwLCAweGZmLCAweDI2LCAweDM2LCAweDAyLAotMHgyZSwgMHg0MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5ZSwgMHg0MiwgMHg3NCwgMHhkMSwgMHg2YiwgMHgwYywKLTB4MmIsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksCi0weGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDdiLCAweDAwLCAweDFiLCAweDE4LCAweDFiLCAweDhmLCAweDRjLCAweDg5LAotMHgxYiwgMHgxYiwgMHhjYiwgMHg4MCwgMHgwMCwgMHgyNCwgMHhhNiwgMHgwMCwgMHgwMSwgMHg5NiwgMHhiMywgMHgxOCwKLTB4ZGUsIDB4MWQsIDB4MDksIDB4MzYsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDAxLCAweDllLCAweDc2LCAweDE4LCAweDczLCAweDYxLCAweDAxLCAweDM0LCAweDA1LCAweDJjLCAweGYwLCAweGQzLAotMHgwMCwgMHgyNCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg5NiwgMHhiMywgMHgxOCwgMHhkZSwgMHgxZCwgMHgxZCwgMHgzNiwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDAsIDB4OWUsIDB4NzYsIDB4MTgsCi0weGIzLCAweDYyLCAweDAxLCAweDM0LCAweDA1LCAweDJjLCAweGYwLCAweGQzLCAweDA2LCAweGUwLCAweDAwLCAweDIzLAotMHg0YiwgMHg4MSwgMHhjYiwgMHg4MCwgMHg0MCwgMHgyMywgMHg5YywgMHg0MywgMHgwYywgMHg2MCwgMHgyMywgMHgxYywKLTB4NmIsIDB4MGUsIDB4NGEsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksIDB4MTAsIDB4MzMsCi0weDBiLCAweDgxLCAweDdiLCAweDAwLCAweDFiLCAweDE4LCAweDFiLCAweDhmLCAweDBmLCAweDg5LCAweGRiLCAweDFiLAotMHg4YiwgMHg4MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHgzNSwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDMxLCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDY0LCAweGFiLCAweDBlLAotMHgyMSwgMHhkMiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHgzZCwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDM5LCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDhiLCAweDY0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHg0NSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4Y2IsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4NDEsIDB4MzQsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDY1LCAweDAwLCAweGUwLCAweDBmLCAweGUwLCAweGZiLCAweDFmLAotMHgwMSwgMHgzYiwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHgwNywgMHg2OCwgMHhmZiwgMHgxOCwgMHgwMywgMHg2OSwKLTB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MmMsIDB4ZTAsIDB4MDAsIDB4MjMsCi0weDBiLCAweDgxLCAweDhiLCAweDgwLCAweDI4LCAweGUwLCAweDAwLCAweDIzLCAweDhiLCAweDgwLCAweDBiLCAweDgxLAotMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3YSwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHg3YiwgMHgwMCwKLTB4MTgsIDB4MTgsIDB4MDAsIDB4OGUsIDB4YzAsIDB4NDYsIDB4YzgsIDB4ODAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsCi0weGJiLCAweDE4LCAweGRjLCAweDFkLCAweDA5LCAweDM0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHg3ZiwgMHgxOCwgMHg3YiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwNSwgMHgyOCwgMHhmMiwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsIDB4YmIsIDB4MTgsIDB4ZGMsIDB4MWQsIDB4MWQsIDB4MzQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDdmLCAweDE4LCAweGJiLCAweDYyLCAweDAxLCAweDMwLAotMHgwNSwgMHgyOCwgMHhmMiwgMHhkMywgMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MWYsIDB4MWMsIDB4M2IsIDB4MGMsIDB4MTgsIDB4ZDIsCi0weDE3LCAweDZkLCAweDExLCAweDRiLCAweGMwLCAweDQ2LCAweGRmLCAweDYwLCAweDUyLCAweDZkLCAweGMwLCAweDQ2LAotMHgxYSwgMHg2MSwgMHhjNywgMHg2MCwgMHgxYSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MSwgMHhkOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4ZDgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ODAsIDB4MTgsIDB4NjksCi0weGMwLCAweDQ2LCAweDg4LCAweDgwLCAweDE4LCAweDY5LCAweDAwLCAweDBjLCAweGM4LCAweDgwLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHg0YSwgMHg4OCwgMHgxMiwgMHgwNCwgMHgwYiwgMHg4OCwgMHgxYSwgMHg0MywgMHhjMiwgMHg2MCwKLTB4OGEsIDB4ODgsIDB4YzksIDB4ODgsIDB4MDksIDB4MDQsIDB4MTEsIDB4NDMsIDB4MDEsIDB4NjEsIDB4ZjIsIDB4ZTcsCi0weDJjLCAweDA3LCAweDAwLCAweDgwLCAweGYxLCAweGI1LCAweDg4LCAweGIwLCAweDAwLCAweDIyLCAweDA4LCAweDk4LAotMHgwMCwgMHg2YSwgMHgwOCwgMHg5YiwgMHg5OSwgMHg2OCwgMHg0OSwgMHgwYSwgMHgwMiwgMHhkMywgMHgwMSwgMHgyNywKLTB4ZmYsIDB4MDMsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4OGIsIDB4MDAsIDB4MmIsIDB4MTksIDB4ZDAsCi0weGEzLCAweDQ5LCAweDg5LCAweDZhLCAweDFjLCAweDFjLCAweDU4LCAweDIzLCAweDYzLCAweDQzLCAweGM5LCAweDE4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1OCwgMHgzOSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDcsIDB4ZTAsCi0weDQxLCAweDhiLCAweDAwLCAweDI5LCAweDAyLCAweGQwLCAweDBjLCAweDIzLAotMHgxZiwgMHg0MywgMHgwMSwgMHhlMCwgMHgwNCwgMHgyMywgMHgxZiwgMHg0MywgMHg4MywgMHg4YSwgMHgwMCwgMHgyYiwKLTB4MTgsIDB4ZDAsIDB4OTUsIDB4NDksIDB4ODksIDB4NmEsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIDB4NjMsIDB4NDMsCi0weGM5LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDU4LCAweDM5LCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMiwgMHgyOSwgMHgwMSwgMHhkMSwgMHgwZiwgMHg0MywgMHgwNywgMHhlMCwKLTB4YzEsIDB4OGEsIDB4MDAsIDB4MjksIDB4MDIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDIzLCAweDFmLCAweDQzLCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweDA3LCAweDkxLCAweDRiLCAweDg5LAotMHgwYywgMHg4OSwgMHgxYywgMHgxOSwgMHgyNCwgMHgwNCwgMHgyNCwgMHgwYywgMHgwOCwgMHg5ZCwgMHgyZCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4OTUsIDB4YzksIDB4ODgsIDB4N2QsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4MWEsIDB4MWMsCi0weGMzLCAweDFkLCAweDE5LCAweDMzLCAweDFhLCAweDcyLCAweDA3LCAweDlhLCAweDkyLCAweDg5LCAweGMwLCAweDQ2LAotMHgxYSwgMHg3MywgMHgwNywgMHg5YSwgMHgxMiwgMHg4OSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg4NiwgMHgwNCwgMHg4NywKLTB4ODIsIDB4OGEsIDB4MDEsIDB4M2EsIDB4ODIsIDB4ODMsIDB4MDEsIDB4MjIsIDB4MTksIDB4NzEsIDB4MDgsIDB4OWIsCi0weDFiLCAweDY4LCAweDViLCAweDE4LCAweDViLCAweDc4LCAweDliLCAweDAwLCAweDFiLCAweDA0LCAweDFiLCAweDBjLAotMHgwOCwgMHgzMywgMHg1OSwgMHgxOCwgMHhiYiwgMHgwOCwgMHg0NywgMHhkMywgMHgwNywgMHg5YiwgMHg1YiwgMHg4OSwKLTB4ODUsIDB4MTgsIDB4MDYsIDB4OTUsIDB4MjAsIDB4MzUsIDB4MmIsIDB4NzIsIDB4MDcsIDB4OWIsIDB4OWIsIDB4ODksCi0weGMwLCAweDQ2LCAweDJiLCAweDczLCAweDA3LCAweDliLCAweDFiLCAweDg5LCAweDJlLCAweDFjLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgwNSwgMHg5NSwgMHgyYiwgMHg4NiwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMCwgMHhjMywgMHg4YSwKLTB4MDAsIDB4ZTAsIDB4ODMsIDB4OGEsIDB4MDEsIDB4M2IsIDB4MDUsIDB4OWQsIDB4YzAsIDB4NDYsIDB4YWIsIDB4ODMsCi0weDMxLCAweDcxLCAweDY1LCAweDRiLCAweDlkLCAweDZhLCAweDA1LCAweDliLCAweDllLCAweDhiLCAweDU4LCAweDIzLAotMHg3MywgMHg0MywgMHhlYiwgMHgxOCwgMHhkZCwgMHgxZCwgMHgwMSwgMHgzNSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsIDB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDEsIDB4ZDEsIDB4MDgsIDB4MzEsCi0weDAwLCAweGUwLCAweDEwLCAweDMxLCAweDgxLCAweDIzLCAweDViLCAweDAyLCAweDFkLCAweDQwLCAweDlkLCAweDQyLAotMHgwMywgMHhkMSwgMHhlMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwNSwgMHg5YiwKLTB4YzAsIDB4NDYsIDB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsCi0weDliLCAweDdiLCAweDA2LCAweDlkLCAweDQwLCAweDM1LCAweDJiLCAweDcwLCAweDJiLCAweDc4LCAweDAyLCAweDMzLAotMHhlMywgMHgxYSwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwMSwgMHgzMiwgMHhiYiwgMHgwOCwgMHg5YiwgMHgwNywKLTB4NmQsIDB4ZDAsIDB4ODMsIDB4MTgsIDB4MjAsIDB4MzMsIDB4MDQsIDB4OTMsIDB4MTksIDB4NzIsIDB4MDEsIDB4OWIsCi0weDVkLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA3LAotMHgxYiwgMHgwZiwgMHg5YiwgMHgwMCwgMHgwNCwgMHg5ZSwgMHhjMCwgMHg0NiwgMHgzMywgMHg3MywgMHgwMCwgMHg5NSwKLTB4MmIsIDB4NzgsIDB4MWIsIDB4MDcsIDB4MWIsIDB4MGYsIDB4OWIsIDB4MDAsIDB4MDQsIDB4OWQsIDB4YzAsIDB4NDYsCi0weDJiLCAweDczLCAweDAwLCAweDlkLCAweGViLCAweDc4LCAweGFkLCAweDc4LCAweDFiLCAweDAyLCAweDFkLCAweDQzLAotMHgyYiwgMHgwMiwgMHgyZCwgMHgwYSwgMHgyZCwgMHgwNiwgMHgyZCwgMHgwZSwgMHgyYiwgMHg0MywgMHg1NSwgMHgwMCwKLTB4MmQsIDB4MTgsIDB4MmIsIDB4ODYsIDB4MDQsIDB4OWIsIDB4YzAsIDB4NDYsIDB4NTksIDB4NzIsIDB4MDQsIDB4OWIsCi0weDFiLCAweDdiLCAweDJlLCAweDFjLCAweDA0LCAweDlkLCAweGMwLCAweDQ2LCAweDZiLCAweDczLCAweDMzLCAweDhlLAotMHhjMCwgMHg0NiwgMHg3MywgMHg4NiwgMHgwMCwgMHg5ZCwgMHgyYiwgMHg3OCwgMHgxYiwgMHgwNywgMHgxYiwgMHgwZiwKLTB4OWIsIDB4MDAsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4NTksIDB4MTgsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NDAsCi0weDBlLCAweGQwLCAweDM0LCAweDg3LCAweDAzLCAweDhiLCAweDAxLCAweDNiLCAweGIzLCAweDgzLCAweDEzLCAweDFjLAotMHgxYiwgMHgxOCwgMHgyMCwgMHgzMywgMHgxOSwgMHg3MSwgMHgwMSwgMHg5YiwgMHg1YiwgMHgxOCwgMHg1YiwgMHg3OCwKLTB4OWIsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDgsIDB4MzEsIDB4MDEsIDB4MzIsIDB4M2IsIDB4MDksIDB4MzcsIDB4ZDMsCi0weDAwLCAweDJkLCAweDAxLCAweGQwLCAweDQzLCAweDhiLCAweDAwLCAweGUwLCAweDAzLCAweDhiLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgwMSwgMHgzYiwgMHhhYiwgMHg4MywgMHg4MywgMHgxOCwgMHgwMywgMHg5MywgMHgyMCwgMHgzMywKLTB4MTksIDB4NzEsIDB4MjAsIDB4NGIsIDB4OWQsIDB4NmEsIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MDIsIDB4OTMsCi0weDllLCAweDhiLCAweDU4LCAweDIzLCAweDczLCAweDQzLCAweGViLCAweDE4LCAweGRkLCAweDFkLCAweDAxLCAweDM1LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwKLTB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4MTUsIDB4ZTAsCi0weDEwLCAweDMxLCAweDgxLCAweDIzLCAweDViLCAweDAyLCAweDFkLCAweDQwLCAweDlkLCAweDQyLCAweDAzLCAweGQxLAotMHhlMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwMiwgMHg5YiwgMHhjMCwgMHg0NiwKLTB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsIDB4OWIsIDB4N2IsCi0weDAzLCAweDljLCAweDQwLCAweDM0LCAweDIzLCAweDcwLCAweDAxLCAweDMyLCAweDA3LCAweDliLCAweGMwLCAweDQ2LAotMHhkOSwgMHg4MCwgMHg1MSwgMHgxZSwgMHhjMywgMHgxZCwgMHg0OSwgMHgzMywgMHgxOSwgMHg3MCwgMHgwNywgMHg2MSwKLTB4MDQsIDB4MmEsIDB4MDYsIDB4ZDIsIDB4MDYsIDB4NDksIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4OTksIDB4ODMsCi0weDAxLCAweDMyLCAweDA0LCAweDJhLCAweGY5LCAweGQzLCAweDA5LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NDgsIDB4MDEsIDB4NjgsCi0weDAxLCAweDMxLCAweDAxLCAweDYwLCAweDM4LCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDc4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5MCwgMHhiOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwZCwgMHg0OCwKLTB4NDEsIDB4NjgsIDB4YzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDRmLCAweGY4LCAweGI4LCAweDY4LCAweDQwLCAweDA5LCAweDA2LCAweGQzLCAweDEwLCAweDIzLCAweDAyLCAweDk4LAotMHgxOCwgMHg0MywgMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMiwgMHhmMCwgMHhlMSwgMHhmZiwgMHg2OCwgMHg0NiwKLTB4MDIsIDB4ZjAsIDB4OWEsIDB4ZmUsIDB4MGMsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDhjLCAweGIwLAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OCwgMHgwNSwgMHg0YiwgMHgxOSwgMHg0MywKLTB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4NjgsIDB4NDYsIDB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmUsCi0weDBjLCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAotMHgwMiwgMHg2YSwgMHgwMywgMHg2OCwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MCwgMHg0MCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NTAsIDB4NjAsIDB4NDAsIDB4MzIsIDB4NDgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTAsIDB4ODAsIDB4YzgsIDB4NjgsCi0weGMwLCAweDQ2LCAweGQwLCAweDgwLCAweDQ4LCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDgxLCAweDg4LCAweDY4LAotMHhjMCwgMHg0NiwgMHg1MCwgMHg4MSwgMHgwOCwgMHg3ZSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg3MywgMHgwOCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4OTAsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDQsIDB4NDksIDB4MDgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAwLCAweGQxLCAweDcwLCAweDQ3LCAweGMyLCAweDY4LCAweGMwLCAweDQ2LCAweDBhLCAweDYwLCAweGZhLCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0OSwgMHgwYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjMiwgMHg2MCwKLTB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDEyLCAweDRmLCAweDdjLCAweDdmLCAweDAxLCAweDM0LCAweDdjLCAweDc3LCAweDAzLCAweDIzLCAweGZjLCAweDFkLAotMHgxOSwgMHgzNCwgMHgzOCwgMHg2MiwgMHg3OSwgMHg2MiwgMHgyMywgMHg3MiwgMHgwZSwgMHg0YywgMHgyNSwgMHg2OCwKLTB4NmIsIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MjMsIDB4NjgsIDB4MWIsIDB4MGMsIDB4MTAsIDB4ZDEsIDB4MjQsIDB4NjgsCi0weGEzLCAweDBhLCAweDBkLCAweGQzLCAweDAxLCAweDIzLCAweDBhLCAweDRmLCAweGMwLCAweDQ2LCAweGZiLCAweDYyLAotMHgwOSwgMHg0ZiwgMHgwYSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhkZiwgMHg2MCwgMHg5OSwgMHg2MCwgMHg1OCwgMHg2MCwKLTB4MTAsIDB4MWMsIDB4MTgsIDB4NjAsIDB4MDEsIDB4MzIsIDB4ZmIsIDB4ZTcsIDB4MTAsIDB4MWMsIDB4MzgsIDB4NjQsCi0weDAxLCAweDMyLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMiwgMHg4MSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4ZjAsIDB4YjUsIDB4NDcsIDB4NGYsIDB4MzgsIDB4NjgsIDB4NDcsIDB4NGUsIDB4NDcsIDB4NGQsIDB4MDcsIDB4MjMsCi0weDViLCAweDAyLCAweGVjLCAweDE4LCAweDAwLCAweDI4LCAweDFkLCAweGQxLCAweDIwLCAweDZiLCAweDAxLCAweDMwLAotMHgyMCwgMHg2MywgMHg0NCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg0MywgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDAsIDB4MjksIDB4MTMsIDB4ZDAsIDB4YzEsIDB4MWQsIDB4NjksIDB4MzEsIDB4MDksIDB4N2IsIDB4MDAsIDB4MjksCi0weDBlLCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAxLCAweDZkLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHg4MSwgMHg2MSwgMHhjMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHgwNCwgMHhkMCwgMHhmMSwgMHg2YywKLTB4MDEsIDB4MzEsIDB4ZjEsIDB4NjQsIDB4MDEsIDB4ZjAsIDB4NTAsIDB4ZmUsCi0weDM4LCAweDY4LCAweDAxLCAweDI4LCAweDE3LCAweGQxLCAweDM3LCAweDQ4LCAweDQxLCAweDY5LCAweDAwLCAweDI5LAotMHgxMywgMHhkMCwgMHhjMSwgMHgxZCwgMHg2OSwgMHgzMSwgMHgwOSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwZSwgMHhkMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDEsIDB4NmQsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4YzAsIDB4NDYsCi0weDgxLCAweDYxLCAweGMyLCAweDY5LCAweDkxLCAweDQyLCAweDA0LCAweGQwLCAweGYxLCAweDZjLCAweDAxLCAweDMxLAotMHhmMSwgMHg2NCwgMHgwMSwgMHhmMCwgMHgzNSwgMHhmZSwgMHgzOCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgyZiwgMHhkMSwKLTB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZWUsIDB4MTgsIDB4NzAsIDB4N2IsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsCi0weDAwLCAweDIwLCAweDcwLCAweDczLCAweDAwLCAweGYwLCAweDRhLCAweGZkLCAweDMwLCAweDdiLCAweDAwLCAweDI4LAotMHgwMiwgMHhkMCwgMHg3OCwgMHg2OCwgMHgwMiwgMHhmMCwgMHhhYSwgMHhmZiwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwKLTB4ZTgsIDB4MTgsIDB4YzAsIDB4OGIsIDB4MDQsIDB4MjYsIDB4MDYsIDB4NDAsIDB4ZTAsIDB4NmEsIDB4YjAsIDB4NDIsCi0weDE0LCAweGQwLCAweGY4LCAweDY4LCAweDAxLCAweDMwLCAweGY4LCAweDYwLCAweDE5LCAweDI4LCAweDExLCAweGQzLAotMHgxYiwgMHg0OCwgMHgwMSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwZCwgMHhkMSwgMHhmZiwgMHgzMCwgMHg0MSwgMHgzMCwKLTB4NDAsIDB4NzgsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4YjgsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmYsCi0weDAwLCAweDIwLCAweGY4LCAweDYwLCAweGU2LCAweDYyLCAweDAxLCAweGUwLCAweDAwLCAweDIwLCAweGY4LCAweDYwLAotMHgzOCwgMHg2OCwgMHgwMywgMHgyOCwgMHgwYiwgMHhkMSwgMHhlYywgMHgxZCwgMHg3OSwgMHgzNCwgMHhlMCwgMHg2YiwKLTB4ODAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MDcsIDB4ZmMsIDB4MDIsIDB4MjMsCi0weGUwLCAweDZiLCAweDk4LCAweDQzLCAweGUwLCAweDYzLCAweDM4LCAweDY4LCAweDAxLCAweDMwLCAweDM4LCAweDYwLAotMHgwMywgMHgyOCwgMHgwMSwgMHhkOSwgMHgwMCwgMHgyMCwgMHgzOCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLAotMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgxZCwgMHg0OCwKLTB4ODQsIDB4OGEsIDB4MWQsIDB4NGEsIDB4MTMsIDB4OGEsIDB4YzEsIDB4MWQsIDB4MDksIDB4MzEsIDB4MDEsIDB4MjcsCi0weDljLCAweDQyLCAweDAzLCAweGQxLCAweDQzLCAweDhhLCAweDU0LCAweDhhLCAweGEzLCAweDQyLCAweDEwLCAweGQwLAotMHgwYiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgwZCwgMHhkMCwgMHg0YiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgwYSwgMHhkMCwKLTB4NDQsIDB4OGIsIDB4OTMsIDB4OGEsIDB4OWMsIDB4NDIsIDB4MDQsIDB4ZGMsIDB4MTMsIDB4NGIsIDB4YzAsIDB4NDYsCi0weDVmLCAweDYwLCAweDk3LCAweDgyLCAweDAxLCAweGUwLCAweDAxLCAweDMzLCAweDkzLCAweDgyLCAweGMzLCAweDhiLAotMHg1YywgMHgxYywgMHhjNCwgMHg4MywgMHg4NCwgMHg4YiwgMHhhMywgMHg0MiwgMHgwZSwgMHhkYiwgMHg4NCwgMHg4YSwKLTB4MDUsIDB4OGIsIDB4MDAsIDB4MjMsIDB4YWMsIDB4NDIsIDB4MDUsIDB4ZGEsIDB4NDQsIDB4OGEsIDB4YzUsIDB4OGEsCi0weGFjLCAweDQyLCAweDAxLCAweGRhLCAweDRiLCAweDcwLCAweDAwLCAweGUwLCAweDRmLCAweDcwLCAweDQzLCAweDgyLAotMHg4MywgMHg4MiwgMHhjMywgMHg4MywgMHg0MSwgMHg4YSwgMHhjMCwgMHg0NiwgMHg1MSwgMHg4MiwgMHg4MCwgMHg4YSwKLTB4YzAsIDB4NDYsIDB4MTAsIDB4ODIsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDNjLCAweDA0LCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAweGY3LCAweGI1LCAweDkxLCAweGIwLAotMHg2YiwgMHg0NiwgMHg4NCwgMHgxZSwgMHgxMiwgMHg5OSwgMHgxNCwgMHgyOSwgMHgxYSwgMHhkOSwgMHgwMCwgMHgyMCwKLTB4ODEsIDB4MDAsIDB4NjcsIDB4NTgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDEwLCAweDI4LCAweGY2LCAweGQzLCAweDAwLCAweDIxLCAweDA1LCAweDIwLCAweDg3LCAweDAwLAotMHhkNiwgMHg1OSwgMHg0ZiwgMHgxYywgMHgzZCwgMHgwNiwgMHgyZCwgMHgwZSwgMHgwZiwgMHgxYywgMHhiZiwgMHgwMCwKLTB4ZGUsIDB4NTEsIDB4MjksIDB4MWMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsCi0weGYxLCAweGQzLCAweDA5LCAweGUwLCAweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDYzLCAweDU4LCAweGMwLCAweDQ2LAotMHg1MywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNiwgMHgyOCwgMHhmNiwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4NzIsIDB4NjAsIDB4NzIsIDB4YTAsIDB4NzIsIDB4MjAsIDB4NzMsCi0weDYwLCAweDczLCAweDEyLCAweDk5LCAweDE0LCAweDI5LCAweDM3LCAweGQ5LCAweDY5LCAweDQ2LCAweDhlLCAweDFjLAotMHg5MSwgMHg3OCwgMHgwOSwgMHgwNywgMHgwOSwgMHgwZiwgMHg4OSwgMHgwMCwgMHgxNCwgMHgzOSwgMHgwZCwgMHgwNiwKLTB4MmQsIDB4MTYsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmQsIDB4MWIsIDB4ZGQsIDB4ZjAsIDB4MTksIDB4MTAsIDB4YTksCi0weDAwLCAweGYwLCAweDNkLCAweGY4LCAweDAwLCAweDI4LCAweDBlLCAweGQwLAotMHgwMCwgMHgyMCwgMHgxMCwgMHhhOSwgMHgwOSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkZCwgMHgwMCwgMHgyMiwKLTB4MzksIDB4MTgsIDB4NzIsIDB4NTQsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YTksCi0weDA5LCAweDc4LCAweDg4LCAweDQyLCAweGY2LCAweGRiLCAweDEwLCAweGE4LCAweDAwLCAweDc4LCAweDM4LCAweDE4LAotMHgwNywgMHgwNiwgMHgzZiwgMHgwZSwgMHhhZiwgMHg0MiwgMHhlMywgMHhkYiwgMHg2OCwgMHg0NiwgMHhlMiwgMHgxZCwKLTB4MGQsIDB4MzIsIDB4MDAsIDB4MjEsIDB4YWIsIDB4MDgsIDB4NWYsIDB4MWMsIDB4MDgsIDB4ZDAsIDB4OGIsIDB4MDAsCi0weGM0LCAweDU4LCAweGMwLCAweDQ2LCAweGQ0LCAweDUwLCAweDAxLCAweDMxLCAweDA5LCAweDA2LCAweDA5LCAweDBlLAotMHg4ZiwgMHg0MiwgMHhmNiwgMHhkOCwgMHgxNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4OTAsIDB4YjQsIDB4ODcsIDB4MWUsIDB4MDAsIDB4MjAsIDB4ODksIDB4MDgsIDB4NGIsIDB4MWMsIDB4MDgsIDB4ZDAsCi0weDgxLCAweDAwLCAweDU0LCAweDU4LCAweGMwLCAweDQ2LCAweDdjLCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MywgMHg0MiwgMHhmNiwgMHhkOCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwKLTB4MDIsIDB4NzgsIDB4ZDIsIDB4MDYsIDB4ZDIsIDB4MGUsIDB4MDAsIDB4MjMsIDB4MDEsIDB4MjcsIDB4MDEsIDB4MmEsCi0weDAxLCAweGRjLCAweDBmLCAweDcwLCAweDExLCAweGUwLCAweDQwLCAweDc4LCAweGMwLCAweDQ2LCAweDA4LCAweDcwLAotMHgxNCwgMHgyYSwgMHgwNCwgMHhkMSwgMHgwOCwgMHg0OCwgMHgwMSwgMHg3YSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg3MiwKLTB4MDcsIDB4ZTAsIDB4MDIsIDB4MmEsIDB4MDUsIDB4ZDAsIDB4MDUsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4MDYsIDB4MmEsCi0weDAxLCAweGQwLCAweDE1LCAweDJhLCAweDAyLCAweGQxLCAweDE4LCAweDFjLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHgzOCwgMHgxYywgMHhmYiwgMHhlNywgMHhlMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHgwZiwgMHg0OCwKLTB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksIDB4NDEsIDB4NjEsCi0weGQxLCAweDYwLCAweDAwLCAweDIxLCAweGExLCAweDIyLCAweDUyLCAweDAzLCAweDkxLCAweDYxLCAweDE5LCAweDFjLAotMHgwOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4ODAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NjEsIDB4ZmUsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDA0LCAweDQ4LCAweDQxLCAweDg4LCAweDAxLCAweDMxLCAweDQxLCAweDgwLCAweGY4LCAweGU3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhlMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODYsIDB4YjAsIDB4OTUsIDB4NGEsIDB4ZDAsIDB4NjgsCi0weGQ3LCAweDFkLCAweDc5LCAweDM3LCAweDAxLCAweDI4LCAweDA5LCAweGQxLCAweDM4LCAweDg5LCAweDAwLCAweDI4LAotMHgwNiwgMHhkMSwgMHhkMCwgMHg2ZiwgMHgwMiwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MTQsIDB4MjAsIDB4MzgsIDB4ODEsIDB4OGUsIDB4NGMsIDB4NjEsIDB4NmEsIDB4OGUsIDB4NDgsIDB4YzMsIDB4NmIsCi0weDU5LCAweDE4LCAweGMxLCAweDYzLCAweGEwLCAweDZhLCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGQ0LCAweDE4LAotMHhhMCwgMHg2MiwgMHgyMSwgMHg2YSwgMHgwOSwgMHgwMywgMHgwOSwgMHgwYiwgMHg4MSwgMHg0MiwgMHgwNSwgMHhkMSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsIDB4ODcsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTAsCi0weGJiLCAweDhhLCAweDU4LCAweDFjLCAweGI4LCAweDgyLCAweDNkLCAweDhiLCAweDAxLCAweDIwLCAweDAwLCAweDIxLAotMHhhYiwgMHg0MiwgMHgwNCwgMHhkYiwgMHhkMywgMHgxZCwgMHg4OSwgMHgzMywgMHg1OCwgMHg3MCwgMHhiOSwgMHg4MiwKLTB4ZjksIDB4ODMsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MDUsIDB4OTMsIDB4NWIsIDB4NjksCi0weDBmLCAweDJiLCAweDczLCAweGQyLCAweDAwLCAweDIxLCAweDdjLCAweDRmLCAweGMwLCAweDQ2LCAweDM5LCAweDYxLAotMHgyMSwgMHg2YSwgMHg4YSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg0YiwgMHg2OCwgMHgxZSwgMHgwYywKLTB4MzYsIDB4MDQsIDB4ZmQsIDB4MWYsIDB4MDksIDB4M2QsIDB4MDAsIDB4MmUsIDB4MDUsIDB4ZDEsIDB4M2IsIDB4MmEsCi0weDAzLCAweGQzLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDlhLCAweDQyLCAweDAxLCAweGQ5LCAweGE4LCAweDczLAotMHhjOCwgMHhlMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsIDB4MDMsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDc5LCAweDgyLCAweDQ5LCAweDA5LCAweDA1LCAweDMxLCAweDA5LCAweDA2LCAweDA5LCAweDBlLAotMHg2OSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5NiwgMHg2OSwgMHg0OCwgMHg0MywgMHg2YSwgMHhjMCwgMHg0NiwKLTB4MDEsIDB4OTMsIDB4ODMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTMsIDB4YzIsIDB4MWQsIDB4MTEsIDB4MzIsCi0weDgwLCAweDY5LCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDkyLCAweDY4LCAweGIzLCAweDA3LCAweDFhLCAweDQzLAotMHgxMiwgMHg2OCwgMHg5MCwgMHg0MiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MGQsIDB4ZTAsIDB4OTAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4OWIsIDB4MTgsIDB4MWEsIDB4MDEsIDB4OWIsCi0weGQyLCAweDFhLCAweDgyLCAweDE4LCAweDAwLCAweGUwLCAweDEyLCAweDFhLCAweDAxLCAweDIwLCAweDA5LCAweDAxLAotMHg5MSwgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyOCwgMHg2NSwgMHhkMSwgMHg1MSwgMHg0OSwKLTB4MjAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NjIsIDB4ZDAsIDB4MDUsIDB4OTksIDB4NDgsIDB4NjksIDB4MDEsIDB4MzAsCi0weDQ4LCAweDYxLCAweDAyLCAweDIwLCAweDIxLCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHhhNywgMHhmYywgMHg3OCwgMHg2MywgMHhiZSwgMHg2MCwgMHg0OSwgMHg0OSwgMHgyMiwgMHg2YSwgMHhhMywgMHg2YiwKLTB4ZDMsIDB4MTgsIDB4NjYsIDB4NmIsIDB4YjMsIDB4NDIsIDB4MDAsIDB4ZDksIDB4MjIsIDB4NmIsIDB4YzAsIDB4NDYsCi0weGJhLCAweDYyLCAweGJhLCAweDZhLCAweDBjLCAweDMyLCAweGZhLCAweDYyLCAweDAwLCAweDIyLCAweGZhLCAweDYxLAotMHgwMywgMHhhYSwgMHg1MiwgMHg4OCwgMHhkMiwgMHgwOSwgMHgwMywgMHhkMywgMHgwMSwgMHgyMiwgMHgwMCwgMHhlMCwKLTB4N2IsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjIsIDB4N2EsIDB4NjAsIDB4N2EsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDAyLCAweDYwLCAweDc4LCAweDhhLCAweDQxLCAweDRlLCAweDYwLCAweDI4LCAweDA0LCAweGRjLCAweGIwLCAweDgzLAotMHg3OCwgMHg4YSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MywgMHgwOCwgMHhlMCwgMHg2MCwgMHgyMCwgMHhiMCwgMHg4MywKLTB4NzksIDB4OGEsIDB4ZjgsIDB4NmEsIDB4NDIsIDB4MTgsIDB4NjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDgsCi0weGYxLCAweDgzLCAweDAwLCAweDIyLCAweDNhLCAweDYzLCAweDA1LCAweGUwLCAweDIxLCAweDZiLCAweGMwLCAweDQ2LAotMHgzOSwgMHg2MywgMHg2MSwgMHg2YiwgMHgwOCwgMHgxYSwgMHhmMCwgMHg4MywgMHgyZCwgMHg0OSwgMHg3OCwgMHg2YiwKLTB4NDIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YmEsIDB4NjAsIDB4ODIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NjAsCi0weDAyLCAweDY5LCAweGMwLCAweDQ2LCAweDdhLCAweDYxLCAweDQwLCAweDY5LCAweGMwLCAweDQ2LCAweGI4LCAweDYxLAotMHgyZSwgMHg0YiwgMHhjOCwgMHgxOCwgMHgwNCwgMHg5MCwgMHgwMCwgMHhmMCwgMHgzNywgMHhmOSwgMHgwNCwgMHg5OCwKLTB4MDAsIDB4ZjAsIDB4ODgsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4ZjYsIDB4ZmEsIDB4NzgsIDB4OGEsIDB4ZjEsIDB4OGIsCi0weDg4LCAweDQyLCAweDA0LCAweGQxLCAweGY5LCAweDZhLCAweDA4LCAweDE4LCAweDA0LCAweGUwLCAweDM4LCAweGUwLAotMHgzMiwgMHhlMCwgMHgzYSwgMHg2YiwgMHgxMCwgMHgxOCwgMHg0MCwgMHgxYSwgMHg4MSwgMHgwNywgMHgwMiwgMHhkMCwKLTB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDQsIDB4MzAsIDB4NjEsIDB4NmIsIDB4MDksIDB4MWEsIDB4YTIsIDB4NmIsCi0weDkxLCAweDQyLCAweDAwLCAweGQyLCAweDIwLCAweDZiLCAweGMwLCAweDQ2LCAweDIwLCAweDYyLCAweGU4LCAweDdiLAotMHgwMCwgMHgyOCwgMHgwOCwgMHhkMCwgMHgwMCwgMHgyMiwgMHhlYSwgMHg3MywgMHgwNSwgMHg5OSwgMHg0OCwgMHg2OSwKLTB4MDEsIDB4MzgsIDB4NDgsIDB4NjEsIDB4NzgsIDB4NmIsIDB4MDAsIDB4ZjAsIDB4NzMsIDB4ZmEsIDB4MTgsIDB4NDgsCi0weDgwLCAweDZhLCAweDgwLCAweDA2LCAweDgwLCAweDBlLCAweDAxLCAweDI4LCAweDBhLCAweGQxLCAweDIwLCAweDZhLAotMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHgwYiwgMHg0YywgMHhhMSwgMHg2YSwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMCwKLTB4MDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsCi0weDA4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDA2LCAweGUwLCAweGUwLCAweDY4LCAweDAwLCAweDI4LAotMHgwMSwgMHhkMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHhmYSwgMHgwMSwgMHgyMCwgMHhhOCwgMHg3MywgMHhlZCwgMHhlNywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDFhLCAweDAwLCAweDgwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYSwgMHgwMCwgMHg4MCwgMHhjNCwgMHgwYiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NzgsIDB4NmEsIDB4NDAsIDB4ODksCi0weGZmLCAweDIxLCAweDAxLCAweDMxLCAweDAxLCAweDQwLCAweDEwLCAweDQ4LCAweDAyLCAweGQxLCAweDgxLCAweDZjLAotMHgwMSwgMHgzMSwgMHg4MSwgMHg2NCwgMHg3OSwgMHg2YSwgMHg0OSwgMHg4OSwgMHg0OSwgMHgwYiwgMHgwMiwgMHhkMiwKLTB4NDEsIDB4NmMsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjQsIDB4MGIsIDB4NDgsIDB4NDEsIDB4NmEsIDB4MDEsIDB4MzEsCi0weDQxLCAweDYyLCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLCAweDM4LCAweDZiLAotMHgwMCwgMHhmMCwgMHhmOCwgMHhmYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiMywgMHhmOCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NzMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDE4LCAweDFhLCAweDAwLCAweDgwLAotMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgMHgwMCwgMHgyMiwgMHhmOSwgMHgxZCwgMHg2MSwgMHgzMSwgMHgwZCwgMHgxYywKLTB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4NDAsIDB4ODksCi0weDAzLCAweDBjLCAweDAxLCAweGQyLCAweDQwLCAweDBhLCAweDAzLCAweGQyLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhjMSwgMHhmZiwgMHg2NywgMHhlMCwgMHgzNSwgMHg0OCwgMHhjMCwgMHg2YiwgMHgwMCwgMHgwOSwgMHgxZiwgMHhkMywKLTB4MDgsIDB4NzgsIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NDMsIDB4MDAsIDB4Y2MsIDB4NWEsCi0weDMxLCAweDRlLCAweDllLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweDFiLCAweDg4LAotMHg5YywgMHg0MiwgMHgwZSwgMHhkMCwgMHhiOCwgMHg2OSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MSwKLTB4ZjgsIDB4NjgsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDI3LCAweGY5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDc0LCAweGY4LCAweDQ2LCAweGUwLCAweDAxLCAweDMwLAotMHgwMywgMHgyOCwgMHhlMywgMHhkYiwgMHgwMiwgMHgyMCwgMHg0MywgMHgwMCwgMHg1YywgMHgxOCwgMHhlNCwgMHg4OCwKLTB4MjIsIDB4NGUsIDB4OWUsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4MWIsIDB4ODgsCi0weDljLCAweDQyLCAweDAzLCAweGQxLCAweDAxLCAweDIzLCAweDAxLCAweDM4LCAweGQ4LCAweDQyLCAweGYwLCAweGRjLAotMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwgMHhjNCwgMHhkMCwgMHgxYiwgMHg0ZSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4ZjAsIDB4MTgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MjQsIDB4ZDAsIDB4N2QsIDB4NjMsIDB4MDAsIDB4OTgsCi0weDQwLCAweDg5LCAweDAwLCAweDBjLCAweDFmLCAweGQyLCAweDAwLCAweDI0LCAweDJkLCAweDIzLCAweDliLCAweDAxLAotMHhmMCwgMHgxOCwgMHhjMCwgMHg2YiwgMHgzNSwgMHgxYywgMHgwMCwgMHgyOCwgMHgxNywgMHhkMCwgMHhmZSwgMHgxZCwKLTB4MmQsIDB4MzYsIDB4YTIsIDB4MDAsIDB4NTIsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsCi0weGQyLCAweDZiLCAweDM4LCAweDFjLCAweDMxLCAweDFjLCAweDAyLCAweGYwLCAweDdiLCAweGZjLCAweDAxLCAweDI4LAotMHgwZSwgMHhkMCwgMHgwMSwgMHgzNCwgMHhhMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKLTB4YzAsIDB4MTgsIDB4YzAsIDB4NmIsIDB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MmEsCi0weDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA4LCAweGY4LCAweGY4LCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NjksIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjEsCi0weGY4LCAweDY4LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDc4LCAweDZhLCAweDQwLCAweDg5LAotMHgwMSwgMHgwYywgMHgwZSwgMHhkMiwgMHg0MCwgMHgwYSwgMHgwYywgMHhkMywgMHgzOCwgMHg2OCwgMHg0MCwgMHgwOCwKLTB4MDIsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGMsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGJiLCAweGY4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA4LCAweGY4LCAweDAyLCAweGUwLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgzMCwgMHhmZiwgMHgwMSwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDEsIDB4MjEsIDB4MDAsIDB4NmIsIDB4NDAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weGIwLCAweGI0LCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweDA5LCAweDhiLCAweDg5LCAweDA4LCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg4NCwgMHg2YSwgMHhjMiwgMHgxZCwgMHg2MSwgMHgzMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyOSwKLTB4MGMsIDB4ZGQsIDB4ODcsIDB4MDAsIDB4M2QsIDB4MTksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGQzLCAweDUxLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHg4OCwgMHg0MiwgMHhmMiwgMHhkYiwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHhhMCwgMHhiMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsIDB4MjEsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDBiLCAweDkxLCAweGMxLCAweDFkLCAweDUzLCAweDMxLCAweDE5LCAweDQzLCAweDFmLCAweDkxLAotMHgwOSwgMHg2OCwgMHgwMSwgMHhhZiwgMHhmYSwgMHgxZCwgMHgzOSwgMHgzMiwgMHgxZSwgMHg5MiwgMHgxNywgMHhhYiwKLTB4NTksIDB4ODAsIDB4M2EsIDB4NDksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGEsIDB4NmEsIDB4MTMsIDB4NDMsCi0weGNjLCAweDFkLCAweDExLCAweDM0LCAweDg5LCAweDY5LCAweDA5LCAweDAzLCAweDA5LCAweDBiLCAweDIyLCAweDY5LAotMHhlNSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxZCwgMHg5NSwgMHhmYywgMHgxZCwgMHgzOSwgMHgzNCwgMHg2NCwgMHg4YiwKLTB4NjQsIDB4MDksIDB4MDUsIDB4MzQsIDB4MjQsIDB4MDYsIDB4MjQsIDB4MGUsIDB4MWMsIDB4OTQsIDB4NTYsIDB4MWEsCi0weDFiLCAweDk2LCAweDFjLCAweDljLCAweDJlLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDAxLCAweDI2LAotMHgxZCwgMHg5ZCwgMHgxYSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwMSwgMHhkMSwgMHgzMiwgMHgxYywgMHgwYiwgMHhlMCwKLTB4OTEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4NTIsIDB4MWIsIDB4MWIsIDB4OWUsIDB4YjUsIDB4MTgsIDB4MDAsIDB4ZTAsCi0weDU1LCAweDFhLCAweDAxLCAweDIyLCAweDI0LCAweDAxLCAweGFjLCAweDQyLAotMHgwMCwgMHhkMywgMHgwMCwgMHgyMiwgMHgwMSwgMHgyYSwgMHhlNiwgMHhkMSwgMHg5MSwgMHgwNywgMHgwMSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4OTMsIDB4MDcsIDB4MDEsIDB4MWQsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDc5LCAweDYwLCAweGMxLCAweDFkLCAweDAxLCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MCwgMHgxZiwgMHg5OSwgMHgwOSwgMHg2OCwgMHgxZSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4NTEsIDB4ODMsIDB4YzEsIDB4MWQsIDB4MWQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDM4LCAweDYzLCAweDc5LCAweDYyLCAweGMxLCAweDFkLCAweDExLCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MSwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YzEsIDB4MWQsIDB4MTcsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDgzLCAweDBlLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhjMCwgMHg0NiwgMHhmOCwgMHg4MSwgMHgzOCwgMHg2OCwgMHg0MCwgMHgwOCwgMHgwMiwgMHhkMywgMHgzOCwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4NWMsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDU4LCAweGZmLCAweDIwLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHhmOCwgMHhiNSwgMHgwNywgMHgxYywKLTB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4NDEsIDB4OGIsIDB4MzksIDB4NGEsIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZGQsCi0weDQyLCAweDgzLCAweDQyLCAweDhiLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDAxLCAweDIwLCAweDNhLCAweDFkLAotMHgwNiwgMHhjYSwgMHhiYiwgMHg2YSwgMHgwMiwgMHhmMCwgMHgwZSwgMHhmZiwgMHgzMywgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MzMsIDB4NGUsIDB4MzAsIDB4NmEsIDB4MzMsIDB4NGMsIDB4ZTEsIDB4NmQsIDB4NDEsIDB4MTgsCi0weDM4LCAweDZiLCAweGMzLCAweDFkLCAweDA1LCAweDMzLCAweDAxLCAweDIwLCAweDcyLCAweDZhLCAweDAyLCAweGYwLAotMHhmYiwgMHhmZSwgMHhlMCwgMHg2ZCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgyNSwgMHhiMSwgMHg2YSwgMHg4MSwgMHg0MiwKLTB4MDEsIDB4ZDgsIDB4ZTUsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4ZTAsIDB4NjUsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsCi0weDIwLCAweDFjLCAweGUxLCAweDZkLCAweGU0LCAweDE4LCAweDIyLCAweDY4LCAweDkyLCAweDAwLCAweDI3LCAweDRiLAotMHhjMCwgMHg0NiwgMHg5OSwgMHg1MCwgMHgyNiwgMHg0OCwgMHhjMSwgMHg2YiwgMHg0YSwgMHgwOCwgMHgwNSwgMHhkMywKLTB4NDksIDB4MDgsIDB4NDksIDB4MDAsIDB4YzEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZDYsIDB4ZmYsCi0weDIyLCAweDRhLCAweDFmLCAweDQ4LCAweGMxLCAweDFkLCAweDg5LCAweDMxLCAweDBiLCAweDc4LCAweDAwLCAweDJiLAotMHgwMiwgMHhkMCwgMHg0OSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkMSwgMHgxZSwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MjAsIDB4NjgsIDB4ODAsIDB4MDAsIDB4MTksIDB4NGIsIDB4YzMsIDB4MTgsIDB4MDUsIDB4Y2UsCi0weGMxLCAweDFkLCAweDExLCAweDMxLCAweDAxLCAweDIwLCAweDAyLCAweGYwLCAweGM3LCAweGZlLCAweDE0LCAweDQ4LAotMHgyMSwgMHg2OCwgMHgwMSwgMHgzMSwgMHgyMSwgMHg2MCwgMHgxNywgMHgyOSwgMHgwMCwgMHhkMywgMHgyNSwgMHg2MCwKLTB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGQsIDB4NjUsIDB4NzksIDB4NmEsIDB4M2EsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDUxLCAweDYyLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDY4LCAweDAwLCAweDI5LAotMHgwMywgMHhkMSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHgwNCwgMHhlMCwgMHgzOSwgMHg2YiwKLTB4YzIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjUsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsCi0weGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGVhLCAweDA1LCAweDAwLCAweDAwLAotMHgxOCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NDQsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsCi0weDA0LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGI1LCAweDExLCAweDRlLCAweGZmLCAweDI1LCAweDAxLCAweDM1LAotMHgxMCwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzNSwgMHg2MCwgMHg3OCwgMHg2OSwgMHgwMSwgMHgzOCwgMHg3OCwgMHg2MSwKLTB4YmMsIDB4NjgsIDB4MDAsIDB4MmMsIDB4MTAsIDB4ZDAsIDB4MjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjAsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDIxLCAweGY4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDA0LCAweGZhLAotMHgwOCwgMHg0OCwgMHg4MCwgMHg2YSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwNywgMHhlOSwgMHhkMSwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4NDgsIDB4YzEsIDB4NzksIDB4MDEsIDB4MzEsIDB4YzEsIDB4NzEsCi0weGY3LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDFiLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4MDEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDM4LCAweDY4LCAweGMwLCAweDA4LAotMHgwOSwgMHhkMywgMHgxZCwgMHg0OCwgMHgwMSwgMHg2YSwgMHgwMSwgMHgzOSwgMHgwMSwgMHg2MiwgMHgyMCwgMHgzMCwKLTB4MDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZmUsIDB4ZjcsIDB4ZTksIDB4ZmQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGY4LCAweDFkLCAweDFkLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDE2LCAweDRjLAotMHg2MSwgMHg2YSwgMHg4MSwgMHg0MiwgMHgyMSwgMHhkMSwgMHgwMSwgMHgxYywgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjksIDB4MWEsIDB4ZDEsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZjgsCi0weDYwLCAweDYyLCAweDYwLCAweDZhLCAweDIxLCAweDZhLCAweDg4LCAweDQyLCAweDA1LCAweGQwLCAweDAxLCAweDIxLAotMHg4OSwgMHgwNywgMHgwMSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHhmMiwgMHhkMCwgMHg1MSwgMHgyMSwKLTB4ODksIDB4MDMsIDB4NjIsIDB4NmEsIDB4MjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4NjAsIDB4NmIsCi0weGEyLCAweDZiLCAweDgwLCAweDFhLCAweDA0LCAweDM4LCAweGM4LCAweDYwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3OSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmNywgMHhlNywKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGMxLCAweDFkLCAweDAxLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLAotMHgwOCwgMHgxOCwgMHgwZCwgMHgzMCwgMHg4MSwgMHgwNywgMHgwMiwgMHhkMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwKLTB4MDQsIDB4MzAsIDB4MDQsIDB4NDksIDB4OGEsIDB4NmIsIDB4MTIsIDB4MTgsIDB4NGIsIDB4NmIsIDB4OWEsIDB4NDIsCi0weDAwLCAweGQ5LCAweDA4LCAweDZiLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwNCwgMHg0OCwgMHhjMCwgMHg2OCwgMHgxMCwgMHgyOCwgMHgwMSwgMHhkMywgMHgwMCwgMHhmMCwKLTB4MDUsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weDg4LCAweGI1LCAweDBjLCAweDRmLCAweDM4LCAweDc5LCAweDAwLCAweDI4LCAweDExLCAweGQxLCAweDBiLCAweDQ5LAotMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhmNSwgMHhmZCwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMCwgMHgwMSwgMHgyMCwKLTB4MzgsIDB4NzEsIDB4MDgsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDcsIDB4NDgsIDB4NDIsIDB4NjgsCi0weDA3LCAweDRiLCAweDAxLCAweDY4LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweGRmLCAweGZkLCAweDg4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHhmNSwgMHgyYywgMHhmZiwgMHhmZiwKLTB4MTAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDkwLCAweGI1LCAweDAxLCAweDIwLCAweDQwLCAweDAyLCAweDEwLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLAotMHgwZiwgMHg0ZiwgMHgxMCwgMHgyMSwgMHhmOCwgMHgxZCwgMHgzZCwgMHgzMCwgMHgwMiwgMHhmMCwgMHg0YywgMHhmYywKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZmMsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsCi0weDAwLCAweGYwLCAweDE0LCAweGY4LCAweDAwLCAweDIwLCAweGM5LCAweDIzLCAweDFiLCAweDAxLCAweGY5LCAweDE4LAotMHgwOCwgMHg3MSwgMHhlMCwgMHg2OCwgMHgxMCwgMHgyOCwgMHgwNCwgMHhkMywgMHgwMSwgMHgyMCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4NDgsIDB4NzMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDM3LCAweDQ4LAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMSwgMHgxOCwgMHhjOSwgMHg2OCwgMHgzNSwgMHg0ZCwgMHgxMCwgMHgyOSwKLTB4MDAsIDB4ZDksIDB4MTAsIDB4MjEsIDB4NjksIDB4NjIsIDB4MzIsIDB4NDgsIDB4YzEsIDB4NmMsIDB4MDAsIDB4NmUsCi0weDgxLCAweDQyLCAweDA3LCAweGQ5LCAweDA4LCAweDFhLCAweDA3LCAweDA5LCAweDAwLCAweDI0LCAweDY4LCAweDZhLAotMHhiOCwgMHg0MiwgMHgxMiwgMHhkMiwgMHgwNywgMHgxYywgMHgxMCwgMHhlMCwgMHg4MSwgMHg0MiwgMHgyYSwgMHhkMiwKLTB4MmMsIDB4NGEsIDB4NTIsIDB4NmIsIDB4MTAsIDB4MWEsIDB4MDcsIDB4MDksIDB4NjgsIDB4NmEsIDB4YjgsIDB4NDIsCi0weDA1LCAweGQ5LCAweDBjLCAweDA5LCAweDM5LCAweDE5LCAweDg4LCAweDQyLCAweDAzLCAweGQyLCAweGM0LCAweDFiLAotMHgwMSwgMHhlMCwgMHgwMCwgMHgyNCwgMHgwNywgMHgxYywgMHgzZSwgMHgxOSwgMHgzMCwgMHgwMSwgMHgyNSwgMHg0OSwKLTB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4M2QsIDB4ZDAsIDB4MjMsIDB4NDgsIDB4MDAsIDB4MmMsCi0weDFhLCAweGQxLCAweDFlLCAweDQ5LCAweDNhLCAweDAxLCAweDZmLCAweDYyLCAweDA5LCAweDZlLCAweDhjLCAweDE4LAotMHgxZCwgMHg0ZCwgMHg2YiwgMHg2YiwgMHhhMywgMHg0MiwgMHgwMCwgMHhkOCwgMHhlNCwgMHgxYSwgMHgxZSwgMHg0YiwKLTB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4ZWEsIDB4NmEsIDB4NTEsIDB4MTgsCi0weDJhLCAweDZiLCAweDAzLCAweDFjLCAweDIwLCAweGUwLCAweDFiLCAweDQ4LCAweDAxLCAweDZiLCAweDAxLCAweDMxLAotMHgwMSwgMHg2MywgMHgwMCwgMHgyMCwgMHg2OCwgMHg2MiwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MTAsIDB4NDksIDB4MjQsIDB4MDEsIDB4M2YsIDB4MDEsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4M2EsIDB4NDMsCi0weDZlLCAweDYyLCAweDAwLCAweDkyLCAweDBlLCAweDRkLCAweGVhLCAweDZhLCAweDA5LCAweDZlLCAweDUxLCAweDE4LAotMHgwMywgMHgxYywgMHgwNiwgMHgxYywgMHgwMCwgMHgyMCwgMHgyYSwgMHg2YiwgMHgwMiwgMHhmMCwgMHg0YSwgMHhmZCwKLTB4MGMsIDB4NGEsIDB4MjIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YmIsIDB4MTksIDB4ZTksIDB4NmEsIDB4MmEsIDB4NmIsCi0weDAwLCAweDIwLCAweDAyLCAweGYwLCAweDQxLCAweGZkLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAweDA0LCAweDY2LAotMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwMSwgMHgyMCwgMHhkYSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NWQsIDB4MmUsIDB4ZmYsIDB4ZmYsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDM2LCAweDAyLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwNCwgMHg0OCwgMHgwMSwgMHg2ZSwgMHgwNCwgMHg0YSwgMHg4MCwgMHgzMCwgMHhkMSwgMHg2MCwgMHgwMiwgMHgyMywKLTB4YzEsIDB4NmIsIDB4MTksIDB4NDMsIDB4YzEsIDB4NjMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDAxLCAweDIwLCAweDgwLCAweDAyLAotMHgxYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHgyNywgMHgxYiwgMHg0ZSwgMHgzMywgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZjUsIDB4MTgsIDB4NjgsIDB4NmEsIDB4MDAsIDB4MjgsIDB4MWQsIDB4ZDksIDB4MTksIDB4NGMsCi0weDY4LCAweDQ2LCAweDEwLCAweDIxLCAweDAyLCAweGYwLCAweDkwLCAweGZiLCAweDY4LCAweDQ2LCAweDAwLCAweGYwLAotMHgzMywgMHhmOCwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMCwgMHgxNSwgMHg0OSwgMHg0OCwgMHg2OSwgMHgwMSwgMHgzMCwKLTB4NDgsIDB4NjEsIDB4MGEsIDB4ZTAsIDB4MTMsIDB4NDksIDB4NjAsIDB4N2IsIDB4MDEsIDB4MzAsIDB4NjAsIDB4NzMsCi0weDg4LCAweDc5LCAweDAxLCAweDMwLCAweDg4LCAweDcxLCAweDExLCAweDQ4LCAweDAwLCAweDY4LCAweDAyLCAweGYwLAotMHg2NSwgMHhmOSwgMHg2OCwgMHg2YSwgMHgwMSwgMHgzNywgMHhiOCwgMHg0MiwgMHhlMiwgMHhkOCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MjEsCi0weDgxLCAweDczLCAweGZmLCAweGY3LCAweDA1LCAweGZiLCAweGZmLCAweGY3LCAweGUzLCAweGZlLCAweDA0LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDU4LCAweDA0LCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDE3LCAweDRmLAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOSwgMHgxOCwgMHgwMCwgMHgyMiwgMHhjYiwgMHg2OCwgMHgwMCwgMHgyYiwKLTB4MjMsIDB4ZDAsIDB4MDEsIDB4M2IsIDB4Y2IsIDB4NjAsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZmYsIDB4MTgsCi0weGJiLCAweDY5LCAweDFjLCAweDZkLCAweGMwLCAweDQ2LCAweGJjLCAweDYxLCAweDA0LCAweDY4LCAweGMwLCAweDQ2LAotMHg1YywgMHg2MCwgMHg0NCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5YywgMHg2MCwgMHg4NCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MWMsIDB4NjEsIDB4YzAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTgsIDB4NjEsIDB4MWEsIDB4NjUsIDB4MDgsIDB4NjksCi0weDQyLCAweDFjLCAweDBhLCAweDYxLCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDM4LCAweDZhLCAweGMwLCAweDQ2LAotMHgwMywgMHg2NSwgMHgwMCwgMHhlMCwgMHhmYiwgMHg2MSwgMHgzYiwgMHg2MiwgMHgxOCwgMHgxYywgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDBhLCAweDRhLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQxLCAweDE4LCAweGM4LCAweDY5LCAweDE5LCAweDIzLAotMHhkYiwgMHgwMSwgMHhkMiwgMHgxOCwgMHgxMywgMHg2OSwgMHgwMCwgMHgyYiwgMHgwNiwgMHhkMCwgMHgwMSwgMHgzYiwKLTB4MTMsIDB4NjEsIDB4Y2EsIDB4NjksIDB4MTIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4Y2EsIDB4NjEsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIxLCAweDExLCAweDYxLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwNiwgMHg0YSwgMHgxMSwgMHg2OSwgMHg0YiwgMHgxYywgMHgxMywgMHg2MSwgMHg0MCwgMHgzMiwgMHgwMCwgMHgyOSwKLTB4MDEsIDB4ZDAsIDB4ZDEsIDB4NjksIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4ZDAsIDB4NjEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDA2LCAweDRhLCAweGQxLCAweDY4LAotMHg0YiwgMHgxYywgMHhkMywgMHg2MCwgMHg0MCwgMHgzMiwgMHgwMCwgMHgyOSwgMHgwMSwgMHhkMCwgMHg5MSwgMHg2OSwKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4OTAsIDB4NjEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGU4LCAweDFhLCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDAwLCAweDIxLAotMHgwZiwgMHg0YSwgMHg5NywgMHg4OSwgMHg5MiwgMHg2YSwgMHg0YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHg5YiwgMHg4YSwKLTB4MDAsIDB4MmIsIDB4MTIsIDB4ZDAsIDB4YmIsIDB4NDIsIDB4MTAsIDB4ZGMsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsCi0weDYzLCAweDQzLCAweGQzLCAweDE4LCAweGRjLCAweDFmLCAweDQ5LCAweDNjLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMywgMHgyYiwgMHgwMiwgMHhkMCwKLTB4MDAsIDB4MjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksIDB4ZTQsIDB4ZDMsCi0weDAxLCAweDIwLCAweGY4LCAweGU3LCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweGY3LCAweGI1LCAweDg2LCAweGIwLAotMHgzZCwgMHg0YSwgMHgwNywgMHgxYywgMHhkMSwgMHg2OSwgMHg4ZiwgMHg0MCwgMHgwMywgMHgxYywgMHgxNCwgMHg2YSwKLTB4ZTMsIDB4NDAsIDB4NWYsIDB4NDAsIDB4MDcsIDB4OWUsIDB4OGUsIDB4NDAsIDB4NzcsIDB4NDAsIDB4Y2YsIDB4NDAsCi0weDk0LCAweDY5LCAweGMwLCAweDQ2LCAweDA1LCAweDk0LCAweDAzLCAweDFjLCAweGEzLCAweDQwLCAweDAwLCAweDI1LAotMHgxNCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5NCwgMHgwMCwgMHgyYywgMHg1ZCwgMHhkOSwgMHgxYywgMHgxYywKLTB4MzIsIDB4NGUsIDB4MjYsIDB4NDMsIDB4OTQsIDB4NjksIDB4ZTYsIDB4NDAsIDB4MzMsIDB4MWMsIDB4MDMsIDB4OTYsCi0weDUzLCAweDZhLCAweGMwLCAweDQ2LCAweDAyLCAweDkzLCAweGQyLCAweDZhLCAweGMwLCAweDQ2LCAweDAxLCAweDkyLAotMHhiYiwgMHgwMCwgMHgwMiwgMHg5YSwgMHhkMiwgMHg1OCwgMHgxMywgMHgxYywgMHgwNSwgMHg5YywgMHhlMywgMHg0MCwKLTB4MDMsIDB4OWMsIDB4YTMsIDB4NDIsIDB4M2UsIDB4ZDEsIDB4OGEsIDB4NDAsIDB4Y2EsIDB4NDAsIDB4MTQsIDB4MWMsCi0weDYzLCAweDAwLCAweDFiLCAweDE5LCAweDViLCAweDAxLCAweDAxLCAweDlhLCAweGQyLCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHgwMSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwKLTB4MWIsIDB4MGUsIDB4MDMsIDB4MmIsIDB4MmMsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsCi0weDUxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA3LCAweDllLCAweDFlLCAweDQwLCAweDAwLCAweDk2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHg0OSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4ODMsIDB4NDIsIDB4MWIsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4NGQsIDB4MzYsCi0weDMzLCAweDQzLCAweDFiLCAweDY4LCAweDAwLCAweDllLCAweGIzLCAweDQyLCAweDEyLCAweGQxLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwOCwgMHg5YiwKLTB4MzIsIDB4MmIsIDB4MDQsIDB4ZDEsIDB4MDIsIDB4MmEsIDB4MDcsIDB4ZDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MTQsCi0weDBmLCAweGUwLCAweDA4LCAweDliLCAweDMzLCAweDJiLCAweDAxLCAweGQxLCAweDAxLCAweDJhLCAweGY3LCAweGQwLAotMHgwNCwgMHg5YSwgMHgwMSwgMHgzNywgMHg5NywgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyNywgMHgwNCwgMHg5YSwKLTB4MDEsIDB4MzUsIDB4YWEsIDB4NDIsIDB4YWUsIDB4ZDgsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDksIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgyNywgMHg0ZCwgMHg2OCwgMHg2OSwgMHgwMCwgMHgyOCwKLTB4MDYsIDB4ZDAsIDB4MjYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4MmIsIDB4ZjgsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIzLCAweDRjLCAweDAwLCAweDI2LCAweGEwLCAweDY4LCAweDIzLCAweDRmLAotMHgwMCwgMHgyOCwgMHgxNiwgMHhkMCwgMHgwZiwgMHhlMCwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMiwgMHhkMywKLTB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4MGYsIDB4ZTAsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsIDB4ZGUsIDB4ZmUsCi0weDAwLCAweDI4LCAweGVhLCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAxLCAweGQzLCAweDAxLCAweDIwLAotMHgzOCwgMHg3MSwgMHhlOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwKLTB4ZTksIDB4ZDAsIDB4NjgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NjAsCi0weGZlLCAweGY3LCAweGJjLCAweGZiLCAweDAwLCAweDI4LCAweGQ2LCAweGQxLCAweDY4LCAweDY4LCAweDAwLCAweDI4LAotMHhmNiwgMHhkMSwgMHgxMSwgMHhlMCwgMHgwMCwgMHgyOCwgMHhkMCwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4Y2EsIDB4ZTcsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsCi0weGI5LCAweGZlLCAweDAwLCAweDI4LCAweGM1LCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAxLCAweGQzLAotMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHhlOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhiZCwgMHhkMCwgMHgzOCwgMHg3OSwKLTB4MDAsIDB4MjgsIDB4ZTcsIDB4ZDAsIDB4YjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDVjLCAweDA0LCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDhjLCAweDA2LCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MWQsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweDAxLCAweGYwLCAweDlkLCAweGZjLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDQxLCAweDY4LAotMHgxOSwgMHg0MCwgMHgwYywgMHgwZiwgMHg2MSwgMHgwMSwgMHgwOSwgMHgxYiwgMHg4OSwgMHgwMCwgMHgxOCwgMHg0YSwKLTB4OGYsIDB4MTgsIDB4MDEsIDB4MjEsIDB4MzksIDB4ODAsIDB4ODEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjUsCi0weDQxLCAweDZhLCAweGMwLCAweDQ2LCAweDc5LCAweDY3LCAweGI5LCAweDZjLCAweGZhLCAweDZjLCAweDg5LCAweDE4LAotMHhiOSwgMHg2NCwgMHgwMCwgMHgyMSwgMHhmOSwgMHg2NCwgMHhiYSwgMHg2YiwgMHgzYiwgMHg2ZCwgMHhkMiwgMHgxOCwKLTB4YmEsIDB4NjMsIDB4MzksIDB4NjUsIDB4NDIsIDB4NmEsIDB4MjAsIDB4MzIsIDB4NTEsIDB4NzEsIDB4NzksIDB4NmQsCi0weDdhLCAweDZmLCAweGQyLCAweDZkLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGZjLCAweGY3LCAweGNhLCAweGZmLAotMHgyMCwgMHgwMSwgMHgwOSwgMHg0OSwgMHg0MCwgMHgxOCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4NzgsIDB4NmYsIDB4MDEsIDB4ZjAsIDB4YzYsIDB4ZmIsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg0MCwgMHgyMCwKLTB4MTIsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4NTksIDB4ZmMsIDB4MDcsIDB4MWMsCi0weDQwLCAweDY4LCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLCAweDA2LCAweDBmLCAweDcwLCAweDAxLAotMHg4MCwgMHgxYiwgMHg4MCwgMHgwMCwgMHgwYywgMHg0OSwgMHg0NCwgMHgxOCwgMHhiOCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4NjAsIDB4NjUsIDB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjcsIDB4ODAsIDB4NmYsIDB4MDUsIDB4MWQsCi0weGU1LCAweDYzLCAweGI5LCAweDY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDg5LCAweGY5LCAweDM4LCAweDFjLAotMHgyMSwgMHgxYywgMHgzMiwgMHgxYywgMHgyYiwgMHgxYywgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDRiLCAweDZmLCAweDliLCAweDZmLCAweDFmLCAweDFkLCAweGNmLCAweDYzLCAweDA1LCAweDY4LAotMHgwMCwgMHgyMywgMHg4NCwgMHg2OSwgMHhhNCwgMHgwOCwgMHgwOCwgMHhkMCwgMHg5YywgMHgwMCwgMHgyZSwgMHg1OSwKLTB4YzAsIDB4NDYsIDB4M2UsIDB4NTEsIDB4ODQsIDB4NjksIDB4YTQsIDB4MDgsIDB4MDEsIDB4MzMsIDB4OWMsIDB4NDIsCi0weGY2LCAweGQ4LCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweDAzLCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhmZiwgMHhiNSwgMHg4MSwgMHhiMCwgMHgwNCwgMHgxYywgMHgxZCwgMHgxYywgMHgwZiwgMHgxYywKLTB4NDYsIDB4NDgsIDB4MDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjEsIDB4ZjksIDB4MWQsIDB4NTEsIDB4MzEsCi0weGJkLCAweDY1LCAweDAwLCAweDkxLCAweDIwLCAweDFjLCAweGZkLCAweGY3LCAweDVkLCAweGZjLCAweGY4LCAweDZkLAotMHg0MCwgMHgwOSwgMHgzNiwgMHhkMiwgMHhiOCwgMHg2ZCwgMHgwNiwgMHg3YiwgMHg0MywgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWUsIDB4NDMsIDB4MTcsIDB4MjEsIDB4NDksIDB4MDIsIDB4MDEsIDB4NzMsIDB4MGIsIDB4MGEsIDB4NDMsIDB4NzMsCi0weDAwLCAweDk5LCAweDIwLCAweDFjLCAweGZkLCAweGY3LCAweDRjLCAweGZjLCAweGI4LCAweDZkLCAweGMwLCAweDQ2LAotMHgwNiwgMHg3MywgMHgzMywgMHgwYSwgMHg0MywgMHg3MywgMHhmOCwgMHg2ZCwgMHg0MCwgMHgwOSwgMHgyMCwgMHhkMiwKLTB4NjAsIDB4NjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDMsIDB4OTgsIDB4MDEsIDB4ZjAsIDB4Y2MsIDB4ZmMsCi0weDYwLCAweDY4LCAweDMyLCAweDRiLCAweDE4LCAweDQzLCAweDYwLCAweDYwLCAweDIwLCAweDFjLCAweDAxLCAweGYwLAotMHgzNSwgMHhmZCwgMHgwMCwgMHgyNSwgMHg3ZCwgMHg2MCwgMHhiZCwgMHg2MCwgMHgzZCwgMHg2NCwgMHg3ZCwgMHg2NCwKLTB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzEsIDB4ZmYsIDB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDM4LCAweDgwLCAweDdkLCAweDYyLCAweDI5LCAweDQ4LCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHhhMCwgMHhmYiwgMHg0NCwgMHhlMCwgMHgyMCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjQsIDB4NjAsIDB4NjgsCi0weDAyLCAweDA0LCAweDEyLCAweDBjLCAweDc4LCAweDZlLCAweDAxLCAweDI2LCAweGMxLCAweDFkLCAweDBkLCAweDMxLAotMHg4YSwgMHg0MiwgMHgwMiwgMHhkMiwgMHgzYSwgMHg2NCwgMHgwOCwgMHgxYywgMHgwZSwgMHhlMCwgMHg0MSwgMHgxOSwKLTB4ODksIDB4ODksIDB4ZjAsIDB4MjMsIDB4MTksIDB4NDAsIDB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsCi0weGY4LCAweDYwLCAweGY5LCAweDYxLCAweDYxLCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDgxLCAweDQyLAotMHgxNiwgMHhkMiwgMHgzOSwgMHg2NCwgMHg2MywgMHg2OCwgMHgxOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg0MCwgMHgxYSwKLTB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODIsIDB4MDAsIDB4YTAsIDB4NjEsCi0weDIwLCAweDY4LCAweDA5LCAweDE4LCAweDliLCAweDE4LCAweDYzLCAweDYwLCAweGMzLCAweDFmLCAweDA1LCAweDNiLAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmYSwgMHg3ZSwgMHg4MCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4YmYsIDB4ZmIsIDB4MGIsIDB4ZTAsIDB4YjksIDB4NjgsIDB4MDgsIDB4MWEsIDB4MDAsIDB4MjUsIDB4NzgsIDB4NjIsCi0weGJkLCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDNjLCAweGZjLCAweDIwLCAweDFjLCAweDM5LCAweDFjLAotMHgwMCwgMHhmMCwgMHg2NCwgMHhmOCwgMHgwNSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsCi0weGYwLCAweGI1LCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDZjLCAweGY5LCAweDZiLCAweDBkLCAweDE4LAotMHgyMSwgMHg2OCwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhhMiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwYiwgMHhkOSwKLTB4ODIsIDB4MDAsIDB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weGMwLCAweDQ2LCAweGFiLCAweDUwLCAweGEyLCAweDY5LCAweDAxLCAweDMwLCAweDgyLCAweDQyLCAweGYzLCAweGQ4LAotMHg3OCwgMHg2ZSwgMHhmOSwgMHg2YiwgMHgwOSwgMHgxOCwgMHg4OSwgMHg4OSwgMHhmMCwgMHgyMywgMHgxOSwgMHg0MCwKLTB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsIDB4ZjgsIDB4NjAsIDB4ZjksIDB4NjEsIDB4MjAsIDB4NjgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAxLCAweDY4LCAweDc4LCAweDZjLAotMHhmYywgMHhmNywgMHg5NSwgMHhmZiwgMHg3OCwgMHg2NCwgMHg2MCwgMHg2OCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4ZjgsIDB4NjgsIDB4ODEsIDB4NDIsIDB4MTksIDB4ZDIsIDB4MzksIDB4NjQsIDB4NjMsIDB4NjgsIDB4MTksIDB4MDQsCi0weDA5LCAweDBjLCAweDQwLCAweDFhLCAweDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgyLCAweDAwLCAweGEwLCAweDYxLAotMHgyMCwgMHg2OCwgMHgwOSwgMHgxOCwgMHg5YiwgMHgxOCwgMHg2MywgMHg2MCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4ZmEsIDB4MDEsIDB4MjAsIDB4NzgsIDB4ODAsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDVlLCAweGZiLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGI5LCAweDY4LAotMHgwOCwgMHgxYSwgMHg3OCwgMHg2MiwgMHgwMCwgMHgyMCwgMHhiOCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZDksIDB4ZmIsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4ZjgsIDB4ZWYsIDB4ZTcsCi0weGYwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDhlLCAweDQ4LCAweDQxLCAweDY5LAotMHgwMSwgMHgzMSwgMHg0MSwgMHg2MSwgMHgwMywgMHgyMCwgMHgwMCwgMHgwNywgMHg2MSwgMHg2OCwgMHgwOCwgMHg0MCwKLTB4MDYsIDB4MGYsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4NjgsIDB4MTEsIDB4MTgsIDB4ZmIsIDB4NjgsCi0weGQyLCAweDFhLCAweDdiLCAweDY4LCAweDlkLCAweDFhLCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDM4LCAweDFjLAotMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwgMHgyNiwgMHhmYSwgMHgwMCwgMHgyMCwgMHg3OCwgMHg4MCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MmUsIDB4ZmIsIDB4NjAsIDB4NjgsIDB4NDAsIDB4MTksIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDYwLCAweDYwLCAweDMwLCAweDFjLCAweDAxLCAweGYwLCAweGUwLCAweGZiLCAweDdkLCAweDRlLCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhmMCwgMHgxOCwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgxOSwgMHhkMCwgMHgwMCwgMHgyNSwKLTB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MTIsIDB4ZDAsCi0weGFhLCAweDAwLCAweDkyLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LCAweGQyLCAweDY4LAotMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMSwgMHhmMCwgMHgxYywgMHhmZSwgMHgwMSwgMHgzNSwgMHhhOCwgMHgwMCwKLTB4ODAsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsCi0weGVjLCAweGQxLCAweGY4LCAweDZiLCAweDAxLCAweDFmLCAweDhhLCAweDFjLCAweGZhLCAweDYzLCAweGZhLCAweDY4LAotMHg3ZCwgMHg2YywgMHgwMCwgMHhmMCwgMHhiYiwgMHhmOSwgMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTAsIDB4ZmYsIDB4MDMsIDB4OTAsIDB4ZjksIDB4NmIsIDB4M2EsIDB4NmUsCi0weDhlLCAweDE4LCAweDIwLCAweDY4LCAweDEyLCAweDE4LCAweDAxLCAweDkyLCAweDdhLCAweDZlLCAweDhkLCAweDE4LAotMHgxMSwgMHgxOCwgMHgwMiwgMHg5MSwgMHhjOCwgMHgxZCwgMHgwOSwgMHgzMCwgMHhlMCwgMHg2MCwgMHhiMSwgMHg4OCwKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDc4LCAweDYxLCAweDY4LCAweDY4LCAweDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwKLTB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDgsIDB4NDMsIDB4MzgsIDB4NjEsIDB4YTgsIDB4ODksCi0weDA5LCAweDIzLCAweDFiLCAweDAyLCAweDE4LCAweDQwLCAweGI4LCAweDYxLAotMHhhOCwgMHg4OSwgMHg5OCwgMHg0MywgMHhhOCwgMHg4MSwgMHhhOCwgMHg4OSwgMHgwMiwgMHg5OSwgMHhjMCwgMHg0NiwKLTB4ODgsIDB4ODEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4ODAsIDB4YjAsIDB4ODAsIDB4NzAsIDB4ODEsIDB4NjgsIDB4NjAsCi0weDI4LCAweDgyLCAweGI5LCAweDZlLCAweDMwLCAweDFjLCAweGZjLCAweGY3LCAweGU4LCAweGZlLCAweDM4LCAweDg2LAotMHhmYSwgMHg2OSwgMHgzMCwgMHgxYywgMHgyOSwgMHgxYywgMHhmYywgMHhmNywgMHgwMywgMHhmZiwgMHg3OCwgMHg4NiwKLTB4M2QsIDB4OGUsIDB4NzgsIDB4OGUsIDB4MDMsIDB4OTksIDB4ZmMsIDB4ZjcsIDB4YzgsIDB4ZmUsIDB4MDAsIDB4OTAsCi0weDYwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDM5LCAweDZlLCAweDQxLCAweDFhLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg3YSwgMHg2ZSwgMHg4MiwgMHgxYSwgMHgxMywgMHgwNCwgMHgxYiwgMHgwYywgMHgxYSwgMHgwMiwKLTB4MWIsIDB4MGEsIDB4MWEsIDB4NDMsIDB4MTYsIDB4MDQsIDB4MzYsIDB4MGMsIDB4YmEsIDB4NjgsIDB4ODIsIDB4NDIsCi0weDAxLCAweGQyLCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweDEwLCAweDFhLCAweGI4LCAweDYwLCAweDA4LCAweDAyLAotMHgwOSwgMHgxMiwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4YTMsIDB4ZmUsCi0weDA1LCAweDFjLCAweDAwLCAweDk4LCAweDMxLCAweDFjLCAweGZjLCAweGY3LCAweDllLCAweGZlLCAweDA2LCAweDFjLAotMHg3OCwgMHg2OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwYSwgMHgwOCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4ODAsIDB4MjgsIDB4MWMsCi0weGZjLCAweGY3LCAweDhmLCAweGZlLCAweDc5LCAweDY5LCAweDAxLCAweDMxLCAweGMwLCAweDQzLCAweDc5LCAweDYxLAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg4MSwgMHgzOCwgMHg2OSwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwKLTB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsCi0weDAyLCAweDQwLCAweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDAxLCAweDQzLCAweDMwLCAweDFjLAotMHhmYywgMHhmNywgMHg3NywgMHhmZSwgMHgzOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg4OSwgMHgxOCwgMHgzOSwgMHg2MSwKLTB4YjksIDB4NjgsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDEsIDB4MDIsIDB4OTksIDB4ODksIDB4ODksIDB4YmEsIDB4NjksCi0weDExLCAweDQzLCAweDAyLCAweDlhLCAweGMwLCAweDQ2LCAweDkxLCAweDgxLCAweGI5LCAweDY5LCAweGZjLCAweGY3LAotMHg2NiwgMHhmZSwgMHgyMCwgMHg4MiwgMHgwMCwgMHgyMCwgMHg2MCwgMHg4MiwgMHhmOCwgMHg2ZCwgMHg0MSwgMHgwOCwKLTB4MTYsIDB4ZDMsIDB4ODAsIDB4MGEsIDB4MGEsIDB4ZDMsIDB4NjAsIDB4NjgsIDB4MTAsIDB4MzgsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDIxLCAweDY4LCAweGMwLCAweDQ2LAotMHgwOCwgMHg4MiwgMHgwOSwgMHhlMCwgMHg2MCwgMHg2OCwgMHgwYywgMHgzOCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ODgsIDB4ODEsCi0weDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMSwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2ZSwgMHg0ZCwgMHgyOCwgMHg2OSwKLTB4MDEsIDB4MjIsIDB4MDQsIDB4OTksIDB4OGEsIDB4NDAsIDB4OTAsIDB4NDMsIDB4MjgsIDB4NjEsIDB4MDQsIDB4OTgsCi0weDQzLCAweDAxLCAweDE4LCAweDFhLCAweDgwLCAweDAwLCAweDE2LCAweDFjLCAweDY5LCAweDQ5LCAweDQ0LCAweDE4LAotMHhlMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHhhMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwKLTB4MDAsIDB4MjYsIDB4MjYsIDB4ZTAsIDB4NjUsIDB4NDgsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjEsCi0weDA0LCAweDk4LCAweGZjLCAweGY3LCAweDA5LCAweGZkLCAweDA3LCAweDFjLCAweDAzLCAweGQxLCAweDI4LCAweDY5LAotMHgzMCwgMHg0MywgMHgyOCwgMHg2MSwgMHhiNSwgMHhlMCwgMHhhMCwgMHg2OCwgMHg2NSwgMHg2OCwgMHhhOCwgMHg0MiwKLTB4MDAsIDB4ZDIsIDB4MDUsIDB4MWMsIDB4YTEsIDB4NmMsIDB4YTksIDB4NDIsIDB4MTYsIDB4ZDIsIDB4NDAsIDB4MWEsCi0weDYyLCAweDZhLCAweDEwLCAweDFhLCAweDAwLCAweDI2LCAweDYwLCAweDYyLCAweGE2LCAweDYwLCAweGE2LCAweDYyLAotMHgyMCwgMHg4OCwgMHg0OCwgMHgyMywgMHgxOCwgMHg0MywgMHgyMCwgMHg4MCwgMHgwZCwgMHgxYywgMHgwOSwgMHhkMSwKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTksIDB4ZmQsIDB4MDMsIDB4MjAsIDB4NjAsIDB4ODAsIDB4NjYsIDB4NjAsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDhkLCAweGY5LCAweDk2LCAweGUwLCAweGUxLCAweDY4LCAweDM4LCAweDY4LAotMHgwOSwgMHgxOCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgyMCwgMHgxYywgMHgwMiwgMHgzOSwgMHgyYSwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4Y2QsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZDcsIDB4ZjksIDB4ZTAsIDB4NjgsCi0weDQ2LCAweDE5LCAweDc4LCAweDY4LCAweDMwLCAweDQzLCAweDc4LCAweDYwLCAweDA0LCAweDk4LCAweDMxLCAweDFjLAotMHgwMSwgMHhmMCwgMHg4OCwgMHhmYSwgMHgyMSwgMHg2ZSwgMHgwMCwgMHg5OCwKLTB4MDgsIDB4MTgsIDB4MDEsIDB4OTAsIDB4NzAsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NjEsIDB4NmUsCi0weDcxLCAweDFhLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDExLCAweDAyLCAweDEyLCAweDBhLCAweDExLCAweDQzLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMiwgMHg5MSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwYSwgMHgwOCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjAsIDB4OGUsCi0weGZjLCAweGY3LCAweGNiLCAweGZkLCAweDA2LCAweDFjLCAweDYwLCAweDhlLCAweDAyLCAweDk5LCAweGZjLCAweGY3LAotMHhjNiwgMHhmZCwgMHgwMywgMHg5MCwgMHg2MCwgMHg2OSwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwKLTB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDgxLCAweDgwLCAweDMwLCAweDFjLCAweGZjLCAweGY3LCAweGI3LCAweGZkLCAweDYxLCAweDY5LCAweDAxLCAweDMxLAotMHhjMCwgMHg0MywgMHg2MSwgMHg2MSwgMHgwMSwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MSwgMHg2MCwgMHg2ZSwKLTB4MDAsIDB4OTksIDB4NDYsIDB4MTgsIDB4MjAsIDB4NjksIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLAotMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMSwgMHg0MywgMHg3MSwgMHg2MCwgMHgwMywgMHg5OCwKLTB4ZmMsIDB4ZjcsIDB4OWIsIDB4ZmQsIDB4MjEsIDB4NjksIDB4NDksIDB4MTksIDB4MjEsIDB4NjEsIDB4YTEsIDB4NjgsCi0weDQ5LCAweDFiLCAweGExLCAweDYwLCAweDA2LCAweGQxLCAweGIxLCAweDg5LCAweGEyLCAweDY5LCAweDExLCAweDQzLAotMHhiMSwgMHg4MSwgMHhhMSwgMHg2OSwgMHhmYywgMHhmNywgMHg4ZCwgMHhmZCwgMHgzOCwgMHg4MiwgMHg2MSwgMHg2ZSwKLTB4MzgsIDB4NjgsIDB4MDksIDB4MTgsIDB4MGUsIDB4MzEsIDB4ZjksIDB4NjAsIDB4ZTIsIDB4NjgsIDB4MDAsIDB4OTksCi0weDA0LCAweDM4LCAweDAwLCAweGYwLCAweDRjLCAweGY4LCAweDAyLCAweDIwLCAweDc4LCAweDgyLCAweGUwLCAweDZkLAotMHg0MSwgMHgwOCwgMHgxNiwgMHhkMywgMHg4MCwgMHgwYSwgMHgwYSwgMHhkMywgMHg3OCwgMHg2OCwgMHgxMCwgMHgzOCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MzksIDB4NjgsCi0weGMwLCAweDQ2LCAweGM4LCAweDgxLCAweDA5LCAweGUwLCAweDc4LCAweDY4LCAweDBjLCAweDM4LCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4ODEsIDB4MDUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhmNywgMHhiNSwgMHgwMywgMHgxYywgMHgwZiwgMHgxYywgMHgwMCwgMHgyMCwgMHgxYywgMHg2OCwgMHgyNiwgMHgwNCwKLTB4MzEsIDB4MWMsIDB4MWQsIDB4MWQsIDB4ZmMsIDB4ZjcsIDB4NTEsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OWEsCi0weGQxLCAweDFjLCAweDg5LCAweDA4LCAweDAxLCAweDM5LCAweDRhLCAweDFlLCAweDAyLCAweDkyLCAweDAwLCAweDI5LAotMHgwZCwgMHhkMCwgMHgyMSwgMHgwYywgMHgxMCwgMHhjZCwgMHgyMiwgMHgwNCwgMHgwYSwgMHg0MywgMHgxMSwgMHgxYywKLTB4MTYsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4NDAsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OTksIDB4NGEsIDB4MWUsCi0weDAyLCAweDkyLCAweDAwLCAweDI5LCAweGYxLCAweGQxLCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg4OSwgMHgwOCwgMHg4OSwgMHgwMCwgMHgwMywgMHgzMiwKLTB4OTMsIDB4MDgsIDB4NWEsIDB4MWUsIDB4MDAsIDB4MmIsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4YzksIDB4MDgsIDB4YzAsCi0weDEzLCAweDFjLCAweDAxLCAweDNhLCAweDAwLCAweDJiLCAweGY5LCAweGQxLCAweDcwLCAweDQ3LCAweGZmLCAweGI1LAotMHg4NiwgMHhiMCwgMHgxNywgMHgxYywgMHgwMCwgMHgyNiwgMHgwNiwgMHg5OCwgMHg4MCwgMHg2YywgMHhjMCwgMHgxYiwKLTB4MDYsIDB4OTksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjQsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MDYsIDB4OTksCi0weDg5LCAweDZiLCAweGMwLCAweDQ2LCAweDAxLCAweDkxLCAweDA2LCAweDk5LCAweDRjLCAweDZiLCAweDY3LCAweGUwLAotMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgMHg2MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwKLTB4YTEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTEsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsIDB4YjksIDB4NDIsCi0weDA4LCAweGQyLCAweDAyLCAweGFkLCAweDZkLCAweDg4LCAweDAyLCAweGE5LCAweDQ5LCAweDg4LCAweDdmLCAweDFhLAotMHgwMCwgMHgyMSwgMHgwMiwgMHhhYiwgMHg1OSwgMHg4MCwgMHgxOSwgMHhlMCwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwKLTB4YzksIDB4MWIsIDB4MDIsIDB4YWIsIDB4NTksIDB4ODAsIDB4M2QsIDB4MWMsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MjEsCi0weDQ5LCAweDA2LCAweDA3LCAweDliLCAweDlhLCAweDA3LCAweDkyLCAweDBmLCAweDBkLCAweGQwLCAweGViLCAweDA2LAotMHhkYiwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyYiwgMHgwOCwgMHhkMywgMHgxZSwgMHgyYiwgMHgwMiwgMHhkMSwKLTB4MDMsIDB4MmEsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MmEsCi0weDAxLCAweGQzLCAweDAxLCAweDI2LCAweDAwLCAweDIxLCAweDI5LCAweDQzLCAweDAxLCAweDQzLCAweDBhLCAweDFjLAotMHgwMCwgMHg5MSwgMHgwMCwgMHgyMCwgMHgwMywgMHg5OSwgMHgwNCwgMHg5YSwgMHgwNywgMHg5YiwgMHgwMSwgMHhmMCwKLTB4NWIsIDB4ZmYsIDB4MDcsIDB4OTksIDB4NDksIDB4MTksIDB4MDcsIDB4OTEsIDB4MDAsIDB4MmUsIDB4MGEsIDB4ZDAsCi0weDFkLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDFkLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHgwMCwgMHgyMCwgMHgwNywgMHg5YiwgMHgwMSwgMHhmMCwgMHg0YywgMHhmZiwgMHgwMCwgMHgyNiwgMHgwMiwgMHhhOCwKLTB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDAsIDB4MDMsIDB4OTgsIDB4NDAsIDB4MTksIDB4MDMsIDB4OTAsCi0weDAyLCAweDk4LCAweGMwLCAweDQ2LCAweDIwLCAweDYwLCAweDAzLCAweDk4LCAweGMwLCAweDQ2LCAweDYwLCAweDYwLAotMHgwNCwgMHg5OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MCwgMHgwMywgMHhlMCwgMHgwMSwgMHg5OCwgMHgwMSwgMHgzOCwKLTB4MDEsIDB4OTAsIDB4MTAsIDB4MzQsIDB4MDYsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDQsIDB4NjMsIDB4MDEsIDB4OTgsCi0weDA2LCAweDk5LCAweGMwLCAweDQ2LCAweDg4LCAweDYzLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDAyLCAweGQwLAotMHgwMSwgMHg5OSwgMHgwMCwgMHgyOSwgMHg5MiwgMHhkMSwgMHgwOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDYsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDksIDB4OWIsIDB4MDEsIDB4ZjAsCi0weDFmLCAweGZmLCAweDBhLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg1MywgMHgwMiwKLTB4OTAsIDB4YjUsIDB4MGMsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAxLCAweDY4LCAweDM4LCAweDhhLCAweGZjLCAweGY3LCAweDg1LCAweGZjLAotMHhjMCwgMHg0MywgMHhmOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHg3OCwgMHg4YSwgMHgzOSwgMHg2OCwKLTB4MDgsIDB4MWEsIDB4MzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4OGIsIDB4ZjksIDB4MzgsIDB4MWMsCi0weGZjLCAweGY3LCAweDhjLCAweGZiLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDMzLCAweGZlLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwMSwgMHg4OCwgMHg4YSwgMHgwOSwgMHgyMSwgMHhkMywKLTB4Y2EsIDB4MDksIDB4MWYsIDB4ZDIsIDB4OGEsIDB4MDgsIDB4MWQsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODAsCi0weDQxLCAweDgwLCAweDQ3LCAweDZmLCAweDQwLCAweDZkLCAweGZhLCAweDFkLCAweDE5LCAweDMyLCAweDUxLCAweDcxLAotMHhmYSwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MCwgMHgzYSwgMHg2ZSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MCwKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjMsIDB4YzEsIDB4NmIsIDB4NDksIDB4MDgsIDB4NDksIDB4MDAsCi0weGMxLCAweDYzLCAweDAxLCAweDIwLCAweDAwLCAweGYwLCAweGNjLCAweGZmLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHg2YiwgMHhmZiwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHgyMywgMHgxOSwgMHg0MywKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4NDksIDB4MDksIDB4ZjYsIDB4ZDIsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjgsCi0weGYzLCAweGU3LCAweDAwLCAweDAwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgxMCwgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyNCwgMHg1ZSwgMHgxZSwgMHgwMCwgMHgyYiwgMHgxOSwgMHhkMCwKLTB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4NDEsIDB4ODgsIDB4MGMsIDB4MTksIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDc5LCAweDYwLCAweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYwLCAweGMxLCAweDY4LAotMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMCwgMHgzNywgMHhlOSwgMHg2YSwgMHg4MSwgMHg0MiwKLTB4MDIsIDB4ZDgsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZWMsIDB4ZmYsIDB4MzEsIDB4MWMsIDB4MDEsIDB4M2UsCi0weDAwLCAweDI5LCAweGU1LCAweGQxLCAweDIwLCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgyMSwgMHhjMSwgMHg2MSwgMHgwNSwgMHg0OSwgMHgwYSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwKLTB4MDgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4NGEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDAsIDB4NjEsIDB4NDgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAwLCAweDgwLCAweDAzLCAweDQ5LCAweDA4LCAweDY4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHhjMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4ODEsIDB4NjcsIDB4MDUsIDB4NDksIDB4OGEsIDB4NjgsCi0weDAwLCAweDJhLCAweDAxLCAweGQxLCAweDg4LCAweDYwLCAweDAyLCAweGUwLCAweGNhLCAweDY4LCAweGMwLCAweDQ2LAotMHg5MCwgMHg2NywgMHhjOCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4MDMsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4ODIsIDB4NmYsIDB4YzAsIDB4NDYsCi0weDhhLCAweDYwLCAweDcwLCAweDQ3LCAweGQwLCAweDJjLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHg4MCwgMHgyMCwgMHgxMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmZiwgMHhmNywKLTB4ZDUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NDEsIDB4NjgsCi0weDE5LCAweDQwLCAweDBhLCAweDBmLCAweDUxLCAweDAxLCAweDg5LCAweDFhLCAweDg5LCAweDAwLCAweDBkLCAweDRiLAotMHhjOSwgMHgxOCwgMHg0YiwgMHg4OCwgMHgwMCwgMHgyYiwgMHgwNCwgMHhkMSwgMHgxMSwgMHgxYywgMHhmZiwgMHhmNywKLTB4M2IsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4ZmYsIDB4ZjcsCi0weDA1LCAweGZjLCAweGY4LCAweGU3LCAweDAyLCAweDJiLCAweGY2LCAweGQxLCAweGZmLCAweGY3LCAweDRlLCAweGZiLAotMHhmMywgMHhlNywgMHgwNCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHhlZSwgMHhlNywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAwLCAweGI1LCAweDIwLCAweDIwLCAweDBkLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGZmLCAweGY3LAotMHhiZiwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgMHgwMSwgMHg4OCwgMHgyMCwgMHgyMywgMHgxOSwgMHg0MywKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4MTAsIDB4MjMsIDB4OTksIDB4NDMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsCi0weDA5LCAweDBhLCAweDAxLCAweGQzLCAweGZmLCAweGY3LCAweDJlLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMywgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHhmOCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4OTgsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDIyLCAweDQ4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDIyLCAweDQ4LCAweGMzLCAweDFkLCAweDQxLCAweDMzLAotMHg0MSwgMHg2ZCwgMHg4MiwgMHg2ZCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg5YywgMHg2OCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OTgsIDB4NDIsIDB4MDAsIDB4ZDEsCi0weDBjLCAweGUwLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDEwLCAweDFhLCAweDU5LCAweDFhLCAweDQxLCAweDE4LAotMHgwMCwgMHhlMCwgMHgxOSwgMHgxYSwgMHgwMSwgMHgyMCwgMHgxMCwgMHgyOSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsIDB4NzgsIDB4NmEsIDB4ZjksIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsCi0weGI4LCAweDZhLCAweGY5LCAweDZhLCAweGMwLCAweDQ2LCAweDQ4LCAweDYwLCAweDEwLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHhmYiwgMHg2YSwgMHgwZiwgMHg0OCwgMHg0MiwgMHg2ZCwgMHgwMywgMHgyMCwgMHgzOSwgMHg2YSwKLTB4MDEsIDB4ZjAsIDB4ZTIsIDB4ZmQsIDB4MzgsIDB4ODgsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsCi0weDM4LCAweDg4LCAweDQwLCAweDIzLCAweDk4LCAweDQzLCAweDM4LCAweDgwLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHg1NSwgMHhmZiwgMHg5OCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsIDB4ZjcsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDA4LCAweDAwLCAweDExLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgyYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKLTB4ZmQsIDB4ZmUsIDB4MDcsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsCi0weDA1LCAweDBmLCAweDY4LCAweDAxLCAweDQwLCAweDFiLCAweDgwLCAweDAwLCAweDI2LCAweDQ5LCAweDQ0LCAweDE4LAotMHgyMCwgMHg4OCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywgMHgyMCwgMHg4MCwgMHgyMCwgMHg4OCwgMHg0MSwgMHgwOCwKLTB4MzQsIDB4ZDMsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YTAsIDB4NmMsIDB4ZTEsIDB4NmMsCi0weDQwLCAweDE4LCAweGEwLCAweDY0LCAweDAwLCAweDIwLCAweGUwLCAweDY0LCAweGExLCAweDZiLCAweDIyLCAweDZkLAotMHg4OSwgMHgxOCwgMHhhMSwgMHg2MywgMHgyMCwgMHg2NSwgMHhiOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NSwKLTB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NzgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4NzgsIDB4NjAsIDB4NjEsIDB4NjgsCi0weDM2LCAweDMxLCAweDk0LCAweDI5LCAweDA0LCAweGQ4LCAweDM4LCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYwLAotMHgzOCwgMHgyMCwgMHgwMywgMHhlMCwgMHg5NCwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MCwgMHg5NCwgMHgyMCwKLTB4YjgsIDB4NjEsIDB4MzksIDB4NjgsIDB4NzgsIDB4NjgsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4MWMsCi0weGNiLCAweDFmLCAweDA1LCAweDNiLCAweGZmLCAweGY3LCAweGQ3LCAweGZkLCAweDAyLCAweDIwLCAweDYwLCAweDgwLAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkZiwgMHhmZSwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MDcsIDB4ZmEsIDB4MjgsIDB4MDEsIDB4MDYsIDB4NDksIDB4NDAsIDB4MTgsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLAotMHhlZiwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDAsIDB4MjcsCi0weDBmLCAweDRjLCAweDBkLCAweGUwLCAweDQyLCAweDZiLCAweDAxLCAweDNhLCAweDQyLCAweDYzLCAweDAwLCAweDJhLAotMHgwNSwgMHhkYywgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0MiwgMHg2MywgMHhjMCwgMHg2YSwgMHgwMSwgMHhmMCwKLTB4YzYsIDB4ZjksIDB4MDEsIDB4MzcsIDB4MGIsIDB4MmYsIDB4MDcsIDB4ZDIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTksCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDZhLCAweDAwLCAweDI5LCAweGU5LCAweGQxLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDEwLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDMxLCAweGMxLCAweDYwLCAweDBmLCAweDQ5LCAweGM4LCAweDY4LAotMHgwMSwgMHgyOCwgMHgxNywgMHhkMSwgMHhjOCwgMHgxZCwgMHg3OSwgMHgzMCwgMHgwMiwgMHg4OSwgMHgwMCwgMHgyYSwKLTB4MTIsIDB4ZDAsIDB4MDEsIDB4M2EsIDB4MDIsIDB4ODEsIDB4MDIsIDB4ODksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsCi0weDQyLCAweDg5LCAweDAwLCAweDJhLCAweDA4LCAweGQxLCAweGM5LCAweDZmLCAweDAyLCAweDIzLCAweDBhLCAweDY4LAotMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MSwgMHgwMSwgMHgyMSwgMHgwMCwgMHhlMCwKLTB4MDAsIDB4MjEsIDB4NDEsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDA3LCAweDFjLCAweDAxLCAweDIzLCAweGY4LCAweDFkLAotMHg2OSwgMHgzMCwgMHgwMywgMHg3MywgMHgxZSwgMHg0OCwgMHhjMiwgMHgxZCwgMHg3OSwgMHgzMiwgMHg1NCwgMHg4YSwKLTB4NjEsIDB4MWMsIDB4NTEsIDB4ODIsIDB4ZDUsIDB4OGEsIDB4MDAsIDB4MjEsIDB4YWMsIDB4NDIsIDB4MDQsIDB4ZGIsCi0weGM0LCAweDFkLCAweDg5LCAweDM0LCAweDYzLCAweDcwLCAweDUxLCAweDgyLCAweGQxLCAweDgzLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgzYSwgMHg2ZCwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiYSwgMHg2MSwKLTB4ZmIsIDB4NjksIDB4OWEsIDB4NDIsIDB4MDYsIDB4ZDEsIDB4ZjgsIDB4NmMsIDB4MTIsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc5LCAweDYxLCAweDQxLCAweDY5LAotMHhmYSwgMHg2YywgMHg5MSwgMHg0MywgMHg0MSwgMHg2MSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHhjMSwgMHg2MCwKLTB4MzgsIDB4NjksIDB4MDIsIDB4MjgsIDB4ZjEsIDB4ZDAsIDB4YjgsIDB4NjksIDB4ZjksIDB4NjksIDB4NDEsIDB4MWEsCi0weDAxLCAweGQ1LCAweDc4LCAweDZkLCAweDQxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBlLCAweGY4LAotMHhmOSwgMHg2OSwgMHgwOSwgMHgxOCwgMHhmOSwgMHg2MSwgMHg3OCwgMHg2ZCwgMHg4MSwgMHg0MiwgMHhlMiwgMHhkMywKLTB4MDgsIDB4MWEsIDB4ZjgsIDB4NjEsIDB4ZGYsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweGY4LCAweGI1LCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweGZmLCAweDIzLAotMHgyMSwgMHgzMywgMHg5ZiwgMHg0MiwgMHgwMSwgMHhkOSwgMHhmZiwgMHgyNywgMHgyMSwgMHgzNywgMHhlMSwgMHg2ZSwKLTB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4Y2IsIDB4ZmMsIDB4MmQsIDB4NGQsIDB4MDAsIDB4MjgsIDB4MTMsIDB4ZDEsCi0weGUwLCAweDFkLCAweDQ5LCAweDMwLCAweDAxLCAweDdhLCAweDAxLCAweDIzLCAweDE5LCAweDQzLCAweDAxLCAweDcyLAotMHgyOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgyOSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4YjAsIDB4ZmMsIDB4MDAsIDB4MjAsIDB4ZjgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIwLCAweDY5LCAweDAxLCAweDMwLCAweDIwLCAweDYxLCAweDIzLCAweDQ5LAotMHhjOCwgMHgxZCwgMHhiOSwgMHgzMCwgMHgwMiwgMHg2YiwgMHg5MiwgMHgwMCwgMHg1MSwgMHgxOCwgMHhjMCwgMHgzMSwKLTB4MGYsIDB4NjEsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODksIDB4MDcsIDB4ODksIDB4MGYsIDB4MDEsIDB4NjMsCi0weDIwLCAweDZiLCAweGMyLCAweDE5LCAweDYxLCAweDZkLCAweDhhLCAweDQyLCAweDAzLCAweGQ4LCAweDIzLCAweDIyLAotMHgxMiwgMHgwNSwgMHgzYSwgMHg0MywgMHgwNSwgMHhlMCwgMHgwOSwgMHgxYSwgMHg3ZSwgMHgxYSwgMHgwNywgMHhkMSwKLTB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsIDB4MDksIDB4MTgsCi0weGEyLCAweDZlLCAweDEwLCAweGUwLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDBhLCAweDQzLCAweDAwLCAweDkyLAotMHg2MSwgMHg2ZSwgMHgwOSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhhMiwgMHg2ZSwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwKLTB4N2QsIDB4ZmMsIDB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MzIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsCi0weGEyLCAweDZlLCAweDAwLCAweDIwLCAweDJiLCAweDFjLCAweDAxLCAweGYwLCAweDczLCAweGZjLCAweDIwLCAweDZiLAotMHhjMCwgMHgxOSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg2MSwgMHg2ZCwgMHg4MSwgMHg0MiwgMHgwMCwgMHhkOCwKLTB4NDAsIDB4MWEsIDB4MjAsIDB4NjMsIDB4MzgsIDB4MWMsIDB4YjgsIDB4ZTcsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDA0LCAweDAwLCAweDFiLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwMywgMHgwZCwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MGMsIDB4NDksIDB4YzgsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDIsIDB4N2EsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDAzLCAweGQwLCAweDA3LCAweDcyLCAweDA4LCAweDFjLCAweGZmLCAweGY3LAotMHgzNywgMHhmZiwgMHgwOCwgMHg0OSwgMHhjOCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMiwgMHg3YSwgMHgwMCwgMHgyYSwKLTB4MDMsIDB4ZDAsIDB4MDcsIDB4NzIsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MmQsIDB4ZmYsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLAotMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMCwgMHgyMCwgMHgxOCwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4ZjgsIDB4NjAsIDB4MTYsIDB4NDgsCi0weGM0LCAweDFkLCAweGI5LCAweDM0LCAweDYxLCAweDZiLCAweDg5LCAweDAwLCAweDA5LCAweDE4LCAweGMwLCAweDMxLAotMHgwOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg5MiwgMHgwMCwgMHhkMiwgMHgxOSwgMHg1MSwgMHg2NCwgMHg2MSwgMHg2YiwKLTB4ODksIDB4MDAsIDB4MDgsIDB4MTgsIDB4YzAsIDB4MzAsIDB4MDEsIDB4NjksIDB4NzgsIDB4NjgsIDB4ODAsIDB4MDAsCi0weGMwLCAweDE5LCAweGMwLCAweDZiLCAweDAxLCAweGYwLCAweGEyLCAweGZhLCAweDAxLCAweDIzLCAweDc4LCAweDY4LAotMHg1OCwgMHg0MCwgMHg3OCwgMHg2MCwgMHg2MCwgMHg2YiwgMHgwMSwgMHgzMCwgMHg4MCwgMHgwNywgMHg4MCwgMHgwZiwKLTB4NjAsIDB4NjMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsIDB4NDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA3LCAweGY4LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MzksIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NjgsCi0weDgwLCAweDA5LCAweDAxLCAweGQzLCAweDAyLCAweDIwLCAweDAwLCAweGUwLCAweDc4LCAweDZmLCAweGZjLCAweGY3LAotMHg1OSwgMHhmOCwgMHgwNCwgMHgxYywgMHgwNiwgMHhkMSwgMHgwMSwgMHgyMCwgMHhmOSwgMHgxZCwgMHgxOSwgMHgzMSwKLTB4MDgsIDB4NzEsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjgsIDB4NmMsIDB4MmYsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGJhLCAweDZhLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweDAwLCAweGYwLAotMHg1OSwgMHhmOCwgMHg2NywgMHg2MiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGIsIDB4ZmQsIDB4ZWMsIDB4ZTcsIDB4ZjksIDB4NmQsIDB4MDksIDB4NjgsIDB4MDksIDB4MTgsIDB4MDksIDB4MDksCi0weDA5LCAweDAxLCAweDdhLCAweDZkLCAweDhhLCAweDQyLCAweDAwLCAweGQ4LCAweDg5LCAweDFhLCAweGExLCAweDYyLAotMHhiOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0YSwgMHg2YywgMHgwMCwgMHgyYSwgMHgwNywgMHhkMCwKLTB4NGEsIDB4NmMsIDB4MTIsIDB4MWEsIDB4NGEsIDB4NjQsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4YjksIDB4NmEsCi0weDA4LCAweDE4LCAweGI4LCAweDYyLCAweDM4LCAweDY4LCAweGI5LCAweDZhLCAweDgwLCAweDAwLCAweGMwLCAweDE5LAotMHg0MiwgMHg2YiwgMHg5MSwgMHg0MiwgMHgwZSwgMHhkMywgMHgwMCwgMHgyMSwgMHg0MSwgMHg2NCwgMHhiOCwgMHg2YSwKLTB4MzksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4NDksIDB4NmIsIDB4NDAsIDB4MWEsIDB4YjgsIDB4NjIsCi0weGI5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweGM5LCAweDZiLCAweDQwLCAweDE4LCAweGI4LCAweDYyLAotMHhiOCwgMHg2OCwgMHg4MSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0OSwgMHg2YywgMHgwMCwgMHgyOSwgMHhiOCwgMHhkMSwKLTB4YjksIDB4NmEsIDB4ZmEsIDB4NmIsIDB4OTEsIDB4NDIsIDB4YjQsIDB4ZDAsIDB4M2EsIDB4NmMsIDB4OTEsIDB4NDIsCi0weGIxLCAweGQwLCAweDAxLCAweDIzLCAweDU4LCAweDQwLCAweGI4LCAweDYwLCAweDgwLCAweDAwLCAweGMwLCAweDE5LAotMHhjMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHhmOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwKLTB4MDEsIDB4MzgsIDB4ZjgsIDB4NjAsIDB4MzgsIDB4NjksIDB4MDAsIDB4MjgsIDB4YTEsIDB4ZDAsIDB4MDEsIDB4MzgsCi0weDM4LCAweDYxLCAweDllLCAweGU3LCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHhmNywgMHhiNSwgMHg5MCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyMCwgMHgwNSwgMHg5MCwKLTB4MDIsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MDEsIDB4OTIsIDB4ZjksIDB4NDgsIDB4YzAsIDB4NmEsIDB4YzAsIDB4NDYsCi0weGE4LCAweDYxLCAweGEwLCAweDY4LCAweDgxLCAweDAwLCAweDA5LCAweDE5LCAweDQ5LCAweDZiLCAweGMwLCAweDQ2LAotMHgyMCwgMHg2MCwgMHhlMSwgMHg2MiwgMHgxMiwgMHg5YSwgMHhkMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhOCwgMHg2MCwKLTB4MTIsIDB4OWEsIDB4NTEsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MGMsIDB4OTEsIDB4ZjAsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweGQ3LCAweDFkLCAweDA5LCAweDM3LCAweGUwLCAweDZhLAotMHhjMSwgMHgxYiwgMHgwOSwgMHgwOSwgMHhlMywgMHgxZCwgMHgxOSwgMHgzMywgMHgwYywgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MGYsIDB4OTMsIDB4ZWIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MGUsIDB4OTMsIDB4OTEsIDB4NDIsIDB4MDEsIDB4ZDMsCi0weGI4LCAweDQyLCAweDIxLCAweGQ4LCAweGUxLCAweDY4LCAweDAyLCAweDI5LCAweDFlLCAweGQyLCAweDAxLCAweDIwLAotMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MSwgMHgwMCwgMHgyMCwgMHgwMywgMHg5OSwgMHgwMSwgMHhmMCwKLTB4NTcsIDB4ZmIsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsIDB4MDEsIDB4MzAsCi0weGQ4LCAweDYzLCAweDAxLCAweDIwLCAweDgwLCAweDA2LCAweDAwLCAweDI3LCAweDY4LCAweDYwLCAweGFmLCAweDYxLAotMHhkZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHhkZCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4ZGMsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4M2EsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4NWMsIDB4ZTMsCi0weGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDdiLCAweGZjLCAweDA3LCAweDFjLAotMHhkNywgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHg2NCwgMHhkMCwgMHgzOCwgMHg3OCwgMHg0MCwgMHgwNywKLTB4NDAsIDB4MGYsIDB4MDMsIDB4MjgsIDB4NjAsIDB4ZDEsIDB4MDUsIDB4OTgsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDA1LCAweDkwLCAweDM4LCAweDc4LCAweGYwLCAweDIzLCAweDE4LCAweDQwLCAweDU4LCAweGQxLAotMHhlMCwgMHg2YSwgMHhjMCwgMHgxYiwgMHgwMCwgMHgwOSwgMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHgwMiwgMHhkMiwKLTB4ZTAsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MDUsIDB4ZDMsIDB4Y2IsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDgzLCAweGZmLCAweDA2LCAweDFjLCAweDA2LCAweGQxLCAweDAzLCAweDliLCAweDI4LCAweDFjLCAweDM5LCAweDFjLAotMHgyMiwgMHgxYywgMHgwMCwgMHhmMCwgMHg4YiwgMHhmYywgMHgxNiwgMHhlMSwgMHgyZSwgMHg2MiwgMHhmOCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4YjgsIDB4ODksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4YzEsIDB4NDksCi0weGM5LCAweDY4LCAweDAwLCAweGYwLCAweDcwLCAweGZmLCAweGY4LCAweDg5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLAotMHhiZCwgMHg0OSwgMHhjOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg2OSwgMHhmZiwgMHg3YSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NzIsIDB4NjEsIDB4YjksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjEsIDB4NjEsIDB4MzAsIDB4MWMsIDB4YjgsIDB4NDksCi0weDA5LCAweDY4LCAweDAwLCAweGYwLCAweDVlLCAweGZmLCAweDAwLCAweDI4LCAweDE3LCAweGQxLCAweDMwLCAweDFjLAotMHhiNCwgMHg0OSwgMHg0OSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg1NywgMHhmZiwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwKLTB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjcsIDB4ZmMsIDB4MDcsIDB4MWMsCi0weDY4LCAweDY4LCAweGFmLCAweDRiLCAweDE4LCAweDQzLCAweDY4LCAweDYwLCAweDAwLCAweDIwLCAweGE4LCAweDYxLAotMHhhYywgMHgyMywgMHhhOCwgMHg2OCwgMHg5OCwgMHg0MywgMHhhOCwgMHg2MCwgMHhiMCwgMHhlMCwgMHhhOCwgMHg2OSwKLTB4YTgsIDB4MjgsIDB4MDEsIDB4ZDIsIDB4YTgsIDB4MjAsIDB4YTgsIDB4NjEsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsCi0weGI4LCAweDQyLCAweDZjLCAweGQ4LCAweDljLCAweGUwLCAweGE1LCAweGUwLCAweGE0LCAweGUwLCAweDEwLCAweDI4LAotMHg2OCwgMHhkMSwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg2OCwgMHg2OCwgMHgxOCwgMHg0MCwgMHgwMSwgMHgwZiwKLTB4NDgsIDB4MDEsIDB4NDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4YTAsIDB4NGEsIDB4ODIsIDB4MTgsIDB4MDEsIDB4OTIsCi0weDc4LCAweDg4LCAweDQyLCAweDBiLCAweDMxLCAweGQzLCAweDgyLCAweDBiLCAweDJmLCAweGQzLCAweDlkLCAweDQ4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwMiwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg4MCwKLTB4NzgsIDB4ODgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsCi0weGI4LCAweDY4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYwLCAweDc4LCAweDY4LCAweDAxLCAweDlhLAotMHhjMCwgMHg0NiwgMHgxMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2NCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4OGYsIDB4NDksIDB4NDAsIDB4MTgsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYzLCAweDAxLCAweDlhLCAweDUwLCAweDY4LCAweDM2LCAweDMwLAotMHg5NCwgMHgyOCwgMHgwMSwgMHhkOCwgMHgzOCwgMHgyMCwgMHgwMCwgMHhlMCwgMHg5NCwgMHgyMCwgMHhhOCwgMHg2MSwKLTB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MjgsIDB4ZDgsIDB4NTgsIDB4ZTAsIDB4N2EsIDB4ODgsCi0weDkyLCAweDBiLCAweDAzLCAweGQzLCAweDg1LCAweDQ4LCAweGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDIzLCAweGUwLAotMHgwMSwgMHgyMiwgMHgxMiwgMHgwMywgMHgwMiwgMHg0MCwgMHg4MywgMHg0YiwgMHgxZCwgMHhkMCwgMHgwMywgMHg5MywKLTB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIDB4YjgsIDB4NjgsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYwLCAweDc4LCAweDY4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHgxMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4OTAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4NzUsIDB4NDksCi0weDQwLCAweDE4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYzLCAweDAyLCAweGUwLCAweDMzLCAweGUwLAotMHgyYSwgMHhlMCwgMHgwMywgMHg5MywgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MSwKLTB4MTIsIDB4OWEsIDB4NTAsIDB4NzgsIDB4MDUsIDB4OTksIDB4NDMsIDB4MWEsIDB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsCi0weGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDkyLCAweGZiLAotMHgwNywgMHgxYywgMHgwMSwgMHg5YSwgMHg1MCwgMHg2YiwgMHg5MSwgMHg2YiwgMHgwOSwgMHgwMSwgMHg0MCwgMHgxOCwKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4N2QsIDB4ZmIsIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweGQwLCAweDY0LCAweDAxLCAweDlhLCAweDBiLCAweDliLCAweGMwLCAweDQ2LCAweDEzLCAweDY1LAotMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg2OCwgMHg2OCwgMHgxOCwgMHg0MywgMHg2OCwgMHg2MCwgMHgwMCwgMHgyMCwKLTB4YTgsIDB4NjEsIDB4MGQsIDB4ZTAsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDcxLCAweGZiLCAweDA3LCAweDFjLCAweDM4LCAweDc4LCAweDQwLCAweDA3LAotMHg0MCwgMHgwZiwgMHgwMywgMHgyOCwgMHgwMCwgMHhkMSwgMHhmOCwgMHhlNiwgMHhhOCwgMHg2OSwgMHgwMywgMHg5OSwKLTB4MDEsIDB4ZjAsIDB4MjYsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MmEsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsCi0weDAwLCAweGYwLCAweDc5LCAweGZiLCAweGE4LCAweDY4LCAweDgwLCAweDA5LCAweDA0LCAweGQzLCAweDMwLCAweDFjLAotMHg0OSwgMHg0OSwgMHg0OSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg4MSwgMHhmZSwgMHg0MSwgMHg0OSwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4ZjAsIDB4MTQsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsCi0weDAxLCAweDMwLCAweGQ4LCAweDYzLCAweDExLCAweGUwLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LAotMHg0OCwgMHg3MSwgMHg4MCwgMHgwNiwgMHgwMCwgMHgyNywgMHg2OCwgMHg2MCwgMHhhZiwgMHg2MSwgMHgzYSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MzksIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MzksIDB4NGIsCi0weDAwLCAweDIwLCAweDAxLCAweGYwLCAweGYzLCAweGY5LCAweDAwLCAweDIwLCAweDE1LCAweGUyLCAweDA1LCAweDk4LAotMHgwYywgMHg5OSwgMHgwOCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwYywgMHg5MCwgMHgwYiwgMHg5MCwKLTB4MGMsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsCi0weDQ4LCAweDcxLCAweDI4LCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkwLCAweDAwLCAweDI2LCAweDAwLCAweDIwLAotMHgwOCwgMHg5MCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg5MiwgMHgwYywgMHg5OCwgMHgwMSwgMHgzOCwgMHgwZCwgMHg5MCwKLTB4YTMsIDB4ZTAsIDB4NzgsIDB4ODgsIDB4OGEsIDB4MWIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4OTAsIDB4NDIsCi0weDA1LCAweGRkLCAweDA3LCAweDkyLCAweDgwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweDkwLAotMHgwMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgwOCwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwNywgMHhkMSwgMHgwZCwgMHg5OCwKLTB4MGEsIDB4OWEsIDB4OTAsIDB4NDIsIDB4MDcsIDB4ZGQsIDB4MDcsIDB4OTgsIDB4MzAsIDB4MTgsIDB4ODgsIDB4NDIsCi0weDAzLCAweGQ4LCAweDAxLCAweDIwLCAweDQwLCAweDA1LCAweDA2LCAweDkwLCAweDFjLCAweGUwLCAweDExLCAweDIwLAotMHg0MCwgMHgwNSwgMHgwNiwgMHg5MCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMSwKLTB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDYsIDB4OTAsIDB4YjEsIDB4MDcsIDB4ODksIDB4MGYsIDB4MGYsIDB4ZDAsCi0weDA3LCAweDk4LCAweGMwLCAweDA2LCAweGMwLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDI4LCAweDA5LCAweGRiLAotMHgxZSwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyOSwKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MDIsIDB4OTAsIDB4ZGUsIDB4ZTcsIDB4MGEsIDB4OWEsIDB4MDAsIDB4MmEsCi0weDA0LCAweGQxLCAweDAxLCAweDIzLCAweGRiLCAweDA1LCAweDA2LCAweDk4LCAweDE4LCAweDQzLCAweDA2LCAweDkwLAotMHgwNywgMHg5OCwgMHgwNiwgMHg5OSwgMHgwOCwgMHg0MywgMHgwMiwgMHgxYywgMHgwMCwgMHg5MCwgMHgwNCwgMHg5OCwKLTB4ODMsIDB4MTksIDB4MWQsIDB4ZTAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDksIDB4ZmYsIDB4ZmYsCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDEyLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHg2MCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NTUsIDB4MzIsIDB4ZmYsIDB4ZmYsCi0weGFjLCAweDVlLCAweDIxLCAweDQwLCAweDBkLCAweDNkLCAweGZmLCAweGZmLCAweGNkLCAweDMxLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4NmIsIDB4ZjksIDB4MDcsIDB4OTgsIDB4MzYsIDB4MTgsIDB4MDIsIDB4OTgsCi0weDAwLCAweDI4LCAweDE2LCAweGQwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDA0LCAweGQxLAotMHgwOSwgMHgyMywgMHg1YiwgMHgwNCwgMHgwNiwgMHg5OCwgMHgxOCwgMHg0MywgMHgwNiwgMHg5MCwgMHgwNiwgMHg5OCwKLTB4YzIsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4YzEsIDB4NDgsCi0weDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweDUxLCAweGY5LCAweDAwLCAweDIwLAotMHgwMiwgMHg5MCwgMHgwOCwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMSwgMHgwYiwgMHg5YiwgMHgwMSwgMHgzYiwKLTB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MGMsIDB4ZDgsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDhhLCAweGZhLCAweDA3LCAweDFjLCAweDA3LCAweGUwLCAweDc4LCAweDY4LCAweDA3LCAweDlhLAotMHg4MCwgMHgxOCwgMHg3OCwgMHg2MCwgMHg3OCwgMHg4OCwgMHgwNywgMHg5YSwgMHg4MCwgMHgxYSwgMHg3OCwgMHg4MCwKLTB4MGEsIDB4OWEsIDB4NTAsIDB4MWMsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGEsIDB4OTIsIDB4MGMsIDB4OTgsCi0weDBhLCAweDlhLCAweDgyLCAweDQyLCAweDAzLCAweGRhLCAweGE5LCAweDY5LCAweGIxLCAweDQyLCAweDAwLCAweGQ5LAotMHg1MywgMHhlNywgMHhhOCwgMHg2OSwgMHhiMCwgMHg0MiwgMHg2YiwgMHhkMSwgMHhhOCwgMHg2OCwgMHgwMSwgMHgwOSwKLTB4NjksIDB4ZDIsIDB4MDgsIDB4OWEsIDB4MDAsIDB4MmEsIDB4NTYsIDB4ZDAsIDB4MGMsIDB4OTksIDB4MGEsIDB4OWEsCi0weDhhLCAweDQyLCAweDNlLCAweGRiLCAweGIxLCAweDA3LCAweDg5LCAweDBmLCAweDBjLCAweGQwLCAweDA4LCAweDlhLAotMHhkMiwgMHgwNiwgMHhkMiwgMHgwZSwgMHgwYiwgMHhkMCwgMHgxZSwgMHgyYSwgMHgwNiwgMHhkYiwgMHgxZSwgMHgyYSwKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDAsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDIsCi0weDAyLCAweDk5LCAweDAwLCAweDI5LCAweDIxLCAweGQwLCAweDA4LCAweDlhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4MDEsIDB4ZjksIDB4MDgsIDB4OTgsIDB4MzYsIDB4MTgsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsCi0weDAyLCAweGQwLCAweDAxLCAweDIwLCAweDQwLCAweDA2LCAweDAwLCAweGUwLCAweDkyLCAweDQ4LCAweDAxLCAweDIyLAotMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHg4ZSwgMHg0OCwgMHgwMSwgMHg2ZCwKLTB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZWMsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4OTAsCi0weDE1LCAweGUwLCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAweDQwLCAweDA2LAotMHgwMCwgMHhlMCwgMHg4OCwgMHg0OCwgMHgwOCwgMHg5YSwgMHgwMiwgMHg0MywgMHgwMCwgMHhlMCwgMHgwOCwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsCi0weDA2LCAweGNhLCAweDAxLCAweGYwLCAweGQ1LCAweGY4LCAweDA4LCAweDk4LCAweDM2LCAweDE4LCAweDEwLCAweDM3LAotMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxNCwgMHhmYSwKLTB4MDcsIDB4MWMsIDB4NjgsIDB4NjgsIDB4ODAsIDB4MGUsIDB4NmIsIDB4ZDIsIDB4MGEsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDA5LCAweDkwLCAweDBjLCAweDk5LCAweDg4LCAweDQyLCAweDVjLCAweGRhLCAweDBkLCAweDk4LCAweDA5LCAweDk5LAotMHg4OCwgMHg0MiwgMHgwMywgMHhkMCwgMHg3YSwgMHg4OCwgMHgxZSwgMHhlMCwgMHg1ZiwgMHhlMCwgMHg1ZSwgMHhlMCwKLTB4NzgsIDB4ODgsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDYsIDB4MDIsIDB4NDMsIDB4YTksIDB4NjgsIDB4OGMsIDB4MjMsCi0weDE5LCAweDQwLCAweDAyLCAweGQxLCAweDA5LCAweDIzLCAweDViLCAweDA0LCAweDFhLCAweDQzLCAweGIxLCAweDA3LAotMHg4OSwgMHgwZiwgMHgwZSwgMHhkMCwgMHhjMywgMHgwNiwgMHhkYiwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyYiwKLTB4MDksIDB4ZGIsIDB4MWUsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MDEsIDB4ZTAsCi0weDAyLCAweDI5LCAweDAyLCAweGQzLCAweDAxLCAweDIxLCAweDAyLCAweDkxLCAweDAyLCAweDFjLCAweDA5LCAweDk4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwNSwgMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCi0weDhmLCAweGY4LCAweDc4LCAweDg4LCAweDg2LCAweDE5LCAweDEwLCAweDM3LCAweDAyLCAweDk4LCAweDAwLCAweDI4LAotMHgxNCwgMHhkMCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDYsIDB4MDAsIDB4ZTAsIDB4NTcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDUzLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLAotMHgwMSwgMHhmMCwgMHg3NiwgMHhmOCwgMHgwMCwgMHgyMCwgMHgwMiwgMHg5MCwgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwKLTB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDksIDB4OTgsCi0weDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA5LCAweDkwLAotMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHhhMiwgMHhkYiwgMHg2OCwgMHg2OCwgMHgzMCwgMHg0MywgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NjgsIDB4NjAsIDB4ZTgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmEsIDB4MjgsIDB4ZTAsCi0weDI3LCAweGUwLCAweGE4LCAweDY4LCAweDAwLCAweDA5LCAweDE0LCAweGQzLCAweDY4LCAweDY4LCAweDgwLCAweDBlLAotMHgxNSwgMHhkMiwgMHgwMSwgMHg5YSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHgwMSwgMHg5YSwgMHg1MCwgMHg2YiwKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODksIDB4ZjksIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweDkwLCAweDY0LCAweDAxLCAweDlhLCAweDBiLCAweDliLCAweGMwLCAweDQ2LCAweDkzLCAweDYzLAotMHgwMywgMHhlMCwgMHhlOCwgMHg2YSwgMHgzMSwgMHgxYywgMHgwMCwgMHhmMCwgMHg1ZCwgMHhmYSwgMHg2OCwgMHg2OCwKLTB4MzAsIDB4NDMsIDB4NjgsIDB4NjAsIDB4YTgsIDB4NjksIDB4YjAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDgwLCAweDFiLCAweDAwLCAweGYwLCAweGVlLCAweGY5LCAweGFlLCAweDYxLCAweGE4LCAweDY4LAotMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwYiwgMHhkMCwgMHgyZiwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MmEsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weDAwLCAweDIwLCAweDAxLCAweGYwLCAweDIzLCAweGY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIwLCAweDZkLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwgMHhlMSwgMHg2OSwgMHg4MSwgMHg0MiwKLTB4MTIsIDB4ZDAsIDB4MjIsIDB4NjksIDB4MDIsIDB4MmEsIDB4MGYsIDB4ZDIsIDB4NDEsIDB4MWEsIDB4MDEsIDB4ZDUsCi0weDYwLCAweDZkLCAweDQxLCAweDE4LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDNmLCAweGZiLCAweGUxLCAweDY5LAotMHg0MCwgMHgxOCwgMHhlMCwgMHg2MSwgMHg2MSwgMHg2ZCwgMHg4OCwgMHg0MiwgMHgyNCwgMHhkMywgMHg0MCwgMHgxYSwKLTB4ZTAsIDB4NjEsIDB4MjEsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MWYsIDB4ZDEsIDB4MjAsIDB4NjksIDB4MDIsIDB4MjgsCi0weDFjLCAweGQyLCAweDAxLCAweDIwLCAweDYwLCAweDYxLCAweDE4LCAweDQ4LCAweDQxLCAweDY5LCAweGUyLCAweDZjLAotMHgwYSwgMHg0MywgMHg0MiwgMHg2MSwgMHg4MSwgMHg2OSwgMHhlMywgMHg2YywgMHg5OSwgMHg0MywgMHg4MSwgMHg2MSwKLTB4MDEsIDB4MjEsIDB4MDksIDB4MDUsIDB4Y2EsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjEsCi0weDhiLCAweDAyLCAweDIwLCAweDZkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLAotMHhlMSwgMHg2OSwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHhjYywgMHhmYSwKLTB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZjksIDB4MGMsIDB4OTgsIDB4MDUsIDB4OTksIDB4NDAsIDB4MTgsCi0weDAwLCAweDAxLCAweDEwLCAweDMwLCAweDY4LCAweDYxLCAweDEzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MTIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDQwLCAweDIwLCAweDJkLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHgwMywgMHhmOSwgMHgwNywgMHgxYywgMHg4MSwgMHg2OSwgMHg0NCwgMHg2YSwgMHhhMCwgMHg2ZiwgMHgwMCwgMHhmMCwKLTB4NDUsIDB4ZmUsIDB4MDAsIDB4MjAsIDB4ZTEsIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4NzksIDB4NjgsCi0weGM5LCAweDBlLCAweDA5LCAweGQzLCAweGY4LCAweDZhLCAweDAwLCAweDAxLCAweDI0LCAweDQ5LCAweDQwLCAweDE4LAotMHgyNCwgMHg0YiwgMHhjMCwgMHgxOCwgMHgwMSwgMHg2OCwgMHgwMSwgMHgzOSwgMHgwMSwgMHg2MCwgMHgzNiwgMHhlMCwKLTB4ZTEsIDB4NmQsIDB4MDksIDB4NjgsIDB4MjIsIDB4NmUsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4MjAsIDB4NGUsCi0weGY1LCAweDFkLCAweDc5LCAweDM1LCAweDAxLCAweDIzLCAweGU5LCAweDZiLCAweDE5LCAweDQzLCAweGU5LCAweDYzLAotMHhiOSwgMHg2YSwgMHhlMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhiOSwgMHg2YSwgMHgyMiwgMHg2ZSwKLTB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4NjEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YTksIDB4NmIsCi0weDAxLCAweDMxLCAweGE5LCAweDYzLCAweDA4LCAweDI5LCAweDA3LCAweGQzLCAweGE4LCAweDYzLCAweDAxLCAweDIwLAotMHgwMCwgMHhmMCwgMHg4NiwgMHhmOCwgMHhlOCwgMHg2YiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHhlOCwgMHg2MywKLTB4NzgsIDB4NjgsIDB4ODEsIDB4MGUsIDB4MGYsIDB4ZDIsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjEsIDB4MTgsCi0weGM5LCAweDY4LCAweDAwLCAweDI5LCAweDA2LCAweGQwLCAweDAwLCAweDA4LCAweDA0LCAweGQyLCAweDIwLCAweDFjLAotMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHg0MywgMHhmOCwgMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MDUsIDB4ZmEsIDB4MzgsIDB4MWMsIDB4ZmIsIDB4ZjcsIDB4MDYsIDB4ZmMsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDBiLCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhiNCwgMHgwYywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsCi0weDAxLCAweDc5LCAweDAwLCAweDI5LCAweDA0LCAweGQwLCAweDAwLCAweDIxLCAweDAxLCAweDcxLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHg1NiwgMHhmYiwgMHhmOCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgwZCwgMHhkMCwgMHhiOCwgMHg2OCwKLTB4ODAsIDB4MDAsIDB4YzIsIDB4MTksIDB4NTAsIDB4NmMsIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDAsIDB4YjgsIDB4NmEsCi0weDQxLCAweDc4LCAweDA5LCAweDAxLCAweDEwLCAweDMxLCAweDUyLCAweDZiLCAweDEwLCAweDFhLCAweDg4LCAweDQyLAotMHgwNSwgMHhkMywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0MiwgMHhmYiwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MjgsIDB4ZmEsIDB4ZjgsIDB4ZTcsIDB4NzgsIDB4NjgsCi0weDgwLCAweDAwLCAweGMwLCAweDE5LCAweGMwLCAweDZiLCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweGYxLCAweGU3LAotMHhiMCwgMHhiNSwgMHg4NywgMHhiMCwgMHgwZiwgMHgxYywgMHg4MCwgMHg2ZiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKLTB4MDAsIDB4MjQsIDB4MTMsIDB4NGQsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZTgsIDB4MTgsIDB4ODAsIDB4NjksCi0weDAwLCAweDI4LCAweDE3LCAweGQwLCAweDY5LCAweDQ2LCAweGEyLCAweDAwLCAweDUyLCAweDE5LCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhkMiwgMHgxOCwgMHg5MiwgMHg2OSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5MiwgMHhmYiwKLTB4MDAsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MDEsIDB4MzQsIDB4YTAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGMwLCAweDE4LCAweDgwLCAweDY5LCAweDAwLCAweDI4LCAweGVhLCAweGQxLCAweDAxLCAweGUwLAotMHgwMSwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5ZCwgMHhmOSwgMHgwNywgMHhiMCwKLTB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGI4LCAweGI1LCAweGMyLCAweDA3LCAweGQyLCAweDBmLCAweDE2LCAweDRjLCAweDE2LCAweDQ5LCAweDAxLCAweGQwLAotMHgwOCwgMHgyMiwgMHgwOCwgMHhlMCwgMHg4MiwgMHgwOCwgMHgwNSwgMHhkMywgMHgwYywgMHgyMiwgMHhhNCwgMHgxOCwKLTB4MGIsIDB4NjgsIDB4ZGYsIDB4MWQsIDB4MTUsIDB4MzcsIDB4MDMsIDB4ZTAsIDB4MWMsIDB4MjIsIDB4MGIsIDB4NjgsCi0weGRmLCAweDFkLCAweDA5LCAweDM3LCAweDBmLCAweDRiLCAweDFkLCAweDc4LCAweDAwLCAweDJkLCAweDEzLCAweGQwLAotMHg1YiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgxMCwgMHhkMCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHgxYSwgMHg0MywKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4NWIsIDB4MDgsIDB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NGEsIDB4NjgsCi0weDAxLCAweDIwLCAweDM5LCAweDFjLCAweDIzLCAweDFjLCAweDAwLCAweGYwLCAweGRmLCAweGZlLCAweGI4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMywgMHgyMywgMHgxYiwgMHgwNiwgMHgxYSwgMHg0MywgMHhmMSwgMHhlNywKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4ZjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDIxLCAweGMxLCAweDYxLCAweDA1LCAweDQ5LCAweDhhLCAweDY4LCAweDAwLCAweDJhLCAweDAxLCAweGQxLAotMHg4OCwgMHg2MCwgMHgwMiwgMHhlMCwgMHhjYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMCwgMHg2MSwgMHhjOCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDMsIDB4NDksIDB4ODgsIDB4NjgsCi0weDAwLCAweDI4LCAweDAyLCAweGQwLCAweGMyLCAweDY5LCAweGMwLCAweDQ2LCAweDhhLCAweDYwLCAweDcwLCAweDQ3LAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgxYywgMHgwMSwgMHgyMywgMHg4OCwgMHg2OCwgMHg1OCwgMHg0MCwKLTB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4M2EsIDB4Y2EsIDB4NjAsIDB4MGEsIDB4NjksIDB4MDEsIDB4M2EsCi0weDgwLCAweDAwLCAweDBhLCAweDYxLCAweDQyLCAweDE4LCAweGQwLCAweDZiLCAweDUzLCAweDZiLCAweGMwLCAweDQ2LAotMHhjYiwgMHg2MiwgMHgwYiwgMHg2OCwgMHg5YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHg2YywgMHg1MywgMHg2YywKLTB4YzksIDB4MTgsIDB4NTEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4OGEsIDB4NjgsIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsCi0weGQzLCAweDZiLCAweDgzLCAweDQyLCAweDE3LCAweGQxLCAweGQwLCAweDFkLCAweDNkLCAweDMwLCAweDBhLCAweDY4LAotMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHg2YywgMHgwMywgMHg2OCwgMHg5YSwgMHgxYSwgMHgwMiwgMHg2MCwKLTB4MDEsIDB4MjMsIDB4ODgsIDB4NjgsIDB4NTgsIDB4NDAsIDB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4MzIsCi0weGNhLCAweDYwLCAweDBhLCAweDY5LCAweDAxLCAweDMyLCAweDgwLCAweDAwLCAweDQwLCAweDE4LCAweDBhLCAweDYxLAotMHg0MCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHg3MCwgMHg0NywgMHhiOCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MWQsIDB4MWMsIDB4MTcsIDB4MWMsIDB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDksIDB4ZmYsCi0weDAwLCAweDIwLCAweDI5LCAweDFjLCAweDAwLCAweGYwLCAweDdjLCAweGZlLCAweDAxLCAweDIwLCAweGY5LCAweDFkLAotMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHg4MCwgMHgwNiwgMHg2MCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhhMCwgMHg2MSwKLTB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDYsIDB4NDgsCi0weDAxLCAweDZkLCAweDQyLCAweDZkLCAweDA1LCAweDRiLCAweDAwLCAweDIwLCAweDAwLCAweGYwLCAweDYyLCAweGZlLAotMHhiOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwMiwKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDYsIDB4NDksIDB4MGEsIDB4NjgsCi0weDEwLCAweDE4LCAweDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LAotMHgwMywgMHg0OSwgMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsCi0weDA2LCAweDQ5LCAweDBhLCAweDY4LCAweDEwLCAweDE4LCAweDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLAotMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMywgMHg0OSwgMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDA2LCAweDQ5LCAweDBhLCAweDY4LCAweDEwLCAweDE4LAotMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMywgMHg0OSwKLTB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsIDB4NzAsIDB4NDcsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAyLCAweDQ4LCAweDQxLCAweDc5LCAweDAxLCAweDMxLCAweDQxLCAweDcxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg5MCwgMHhiNCwgMHg4MiwgMHgwMCwKLTB4MTcsIDB4NGIsIDB4OWEsIDB4NTgsIDB4OGIsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODksIDB4MDgsIDB4MGIsIDB4MWQsCi0weDAxLCAweGUwLCAweDg5LCAweDA4LCAweGNiLCAweDFjLCAweDExLCAweDY5LCAweGQ3LCAweDY4LCAweDEyLCAweDRjLAotMHg4MCwgMHgwMCwgMHgyMCwgMHg1OCwgMHg0MCwgMHg2OCwgMHhiOSwgMHg0MiwgMHgwMywgMHhkMSwgMHg4MSwgMHg0MiwKLTB4MTksIDB4ZDksIDB4MTEsIDB4NjgsIDB4MTcsIDB4ZTAsIDB4MDAsIDB4MjQsIDB4YjksIDB4NDIsIDB4MDksIDB4ZDksCi0weDgxLCAweDQyLCAweDEyLCAweGQ5LCAweDExLCAweDY4LCAweDc4LCAweDFhLCAweDAwLCAweGQ1LCAweDAzLCAweDMwLAotMHg4MCwgMHgxMCwgMHg5OCwgMHg0MiwgMHgwYiwgMHhkOCwgMHgwNywgMHhlMCwgMHg4MSwgMHg0MiwgMHgwNSwgMHhkOCwKLTB4NzgsIDB4MWEsIDB4MDAsIDB4ZDUsIDB4MDMsIDB4MzAsIDB4ODAsIDB4MTAsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDgsCi0weDIwLCAweDFjLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweGM4LCAweDFkLCAweDA1LCAweDMwLCAweGZhLCAweGU3LAotMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4MCwgMHgwMCwgMHgwZiwgMHg0YSwgMHgxNywgMHg1OCwKLTB4ODgsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODgsIDB4MDgsIDB4MDQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4ODgsIDB4MDgsCi0weDAzLCAweDMwLCAweDM5LCAweDY5LCAweDdhLCAweDY4LCAweDkxLCAweDQyLCAweDA5LCAweGQ5LCAweDM5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgzOSwgMHg2MSwgMHhmOSwgMHg2OCwgMHg3YSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwMiwgMHhkOSwKLTB4MzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4ODEsIDB4MDAsIDB4MzgsIDB4NjksIDB4MDAsIDB4ZjAsCi0weGQxLCAweGZkLCAweDM4LCAweDYxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwMywgMHgyMSwgMHgwOSwgMHgwNywgMHgwMSwgMHg0MCwKLTB4MGMsIDB4MGYsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjIsIDB4OTIsIDB4MDcsIDB4MDIsIDB4NDAsCi0weGEzLCAweDAwLCAweDFjLCAweDRmLCAweGZmLCAweDU4LCAweDg5LCAweDA3LCAweDg5LCAweDBmLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHg4MCwgMHgwOCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgyYSwKLTB4MDEsIDB4ZDAsIDB4MDIsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MzAsIDB4ZjksIDB4NjgsIDB4N2EsIDB4NjgsCi0weDkxLCAweDQyLCAweDAyLCAweGQ5LCAweDM5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDgxLCAweDAwLAotMHhmOCwgMHg2OCwgMHgwMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHhmOCwgMHg2MCwgMHgwZiwgMHg0OCwgMHgwMCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MjAsIDB4MWMsCi0weGZlLCAweGY3LCAweGNhLCAweGZjLCAweDBiLCAweDQ5LCAweGM4LCAweDFkLCAweDE5LCAweDMwLCAweDAzLCAweDc5LAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgwNSwgMHhkMSwgMHgwOSwgMHg0OSwgMHhjOCwgMHgxZCwgMHgxOSwgMHgzMCwKLTB4MDMsIDB4NzksIDB4MDAsIDB4MmIsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4NzEsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDc5LCAweGY5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDcwLCAweDA0LCAweDAwLCAweDgwLAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MmIsIDB4NDksIDB4MDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDEsIDB4NDEsIDB4NjgsCi0weDI5LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDgxLCAweDY4LAotMHg0OSwgMHgwOCwgMHgwMiwgMHhkMywgMHgwOSwgMHgyMSwgMHgwOSwgMHgwNCwgMHgwMSwgMHhlMCwgMHgwZCwgMHgyMSwKLTB4MDksIDB4MDQsIDB4MGMsIDB4YzgsIDB4MDgsIDB4MzgsIDB4MTksIDB4NDMsIDB4ODcsIDB4NjgsIDB4YmIsIDB4MGEsCi0weDAzLCAweGQzLCAweDQzLCAweDY4LCAweDViLCAweDA4LCAweDAwLCAweGQzLCAweDAxLCAweDMxLCAweDQwLCAweDY4LAotMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwgMHgwNywgMHgwZiwgMHhmOCwgMHgwMCwgMHgxZCwgMHg0YywKLTB4MDAsIDB4MTksIDB4MjMsIDB4NjgsIDB4YzAsIDB4MTgsIDB4NTAsIDB4MzAsIDB4MDAsIDB4NzksIDB4MDEsIDB4MjgsCi0weDEwLCAweGQxLCAweDYwLCAweDY4LCAweDAxLCAweDI4LCAweDBkLCAweGQwLCAweDEwLCAweDFjLCAweDAwLCAweGYwLAotMHg3MSwgMHhmOCwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDM4LCAweDAxLCAweDAwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDAzLCAweDZiLAotMHg1ZCwgMHgxYywgMHgwNSwgMHg2MywgMHhiZCwgMHgwMiwgMHgyZCwgMHgxOSwgMHhkYiwgMHgwMCwgMHhlYiwgMHgxOCwKLTB4ODAsIDB4MzMsIDB4MTksIDB4NjMsIDB4ZGEsIDB4NjIsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsCi0weDAxLCAweDIxLCAweGI5LCAweDQwLCAweDIyLCAweDY4LCAweDExLCAweDQzLCAweDIxLCAweDYwLCAweDAxLCAweDZiLAotMHg4MCwgMHgyOSwgMHhlMiwgMHhkMywgMHgwMCwgMHgyMSwgMHgwMSwgMHg2MywgMHhkZiwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDFmLCAweDRlLCAweDcwLCAweDY4LCAweDAwLCAweDI4LCAweDM2LCAweGQxLCAweDAwLCAweDI0LAotMHhiMSwgMHg2OCwgMHg0OCwgMHgxYywgMHhjOSwgMHgwMCwgMHg4OSwgMHgxOSwgMHhiMCwgMHg2MCwgMHgzMiwgMHg2OCwKLTB4ODksIDB4MTgsIDB4NjAsIDB4MzEsIDB4MGQsIDB4N2IsIDB4MDgsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4YjQsIDB4NjAsCi0weDI4LCAweDAxLCAweDgwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDg3LCAweDZiLAotMHgwMCwgMHgyZiwgMHgyMSwgMHhkMCwgMHhjMSwgMHg2YSwgMHg0YiwgMHgxYywgMHhhYSwgMHgwMiwgMHg5MiwgMHgxOSwKLTB4YzksIDB4MDAsIDB4NTEsIDB4MTgsIDB4ODAsIDB4MzEsIDB4YzMsIDB4NjIsIDB4Y2EsIDB4NmEsIDB4MDksIDB4NmIsCi0weDAxLCAweDNmLCAweDg3LCAweDYzLCAweDgwLCAweDJiLCAweDAwLCAweGQzLCAweGM0LCAweDYyLCAweDAwLCAweDJmLAotMHgwNiwgMHhkMSwgMHgwMSwgMHgyNywgMHhhZiwgMHg0MCwgMHgzYiwgMHgxYywgMHhkYiwgMHg0MywgMHgzNywgMHg2OCwKLTB4M2IsIDB4NDAsIDB4MzMsIDB4NjAsIDB4NDMsIDB4NmIsIDB4MDEsIDB4M2IsIDB4NDMsIDB4NjMsIDB4MTAsIDB4MWMsCi0weDM3LCAweDFjLCAweDAwLCAweGYwLCAweDA5LCAweGY4LCAweDc4LCAweDY4LCAweDAwLCAweDI4LCAweGM5LCAweGQwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4Y2QsIDB4MGYsIDB4ZWQsIDB4MDcsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MjcsIDB4MmUsIDB4NGIsCi0weDJlLCAweDRhLCAweDAwLCAweDJkLCAweDFkLCAweGQwLCAweGQ4LCAweDZhLCAweDAxLCAweDMwLCAweGQ4LCAweDYyLAotMHgxMCwgMHgxYywgMHg1MiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHgwMiwgMHg2OSwgMHg1MywgMHgxYywKLTB4OTIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MDMsIDB4NjEsIDB4OTEsIDB4NjEsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsCi0weDQxLCAweDYxLCAweDAyLCAweDY5LCAweDBmLCAweDJhLCAweDAwLCAweGQzLCAweDA3LCAweDYxLCAweDBmLCAweDI5LAotMHgwMCwgMHhkMywgMHg0NCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZWUsIDB4ZmUsIDB4ZjgsIDB4ZTcsIDB4MTUsIDB4NjksIDB4NmUsIDB4MWMsIDB4YWQsIDB4MDAsCi0weGFkLCAweDE4LCAweDE2LCAweDYxLCAweGE5LCAweDYxLCAweDU1LCAweDY5LCAweDAxLCAweDM1LCAweDU1LCAweDYxLAotMHgxNiwgMHg2OSwgMHgwZiwgMHgyZSwgMHgwMCwgMHhkMywgMHgxNywgMHg2MSwgMHgwZiwgMHgyZCwgMHgwMCwgMHhkMywKLTB4NTQsIDB4NjAsIDB4OGMsIDB4MDIsIDB4YTQsIDB4MGEsIDB4MTYsIDB4NGYsIDB4M2EsIDB4NmYsIDB4ZmQsIDB4NjgsCi0weGY5LCAweDFkLCAweDc5LCAweDMxLCAweDAxLCAweDJkLCAweDBjLCAweGQxLCAweGRiLCAweDZkLCAweDViLCAweDA4LAotMHgwOSwgMHhkMywgMHgwYiwgMHg4OSwgMHgwMCwgMHgyYiwgMHgwNiwgMHhkMSwgMHhmZCwgMHg2ZiwgMHgwMywgMHgzYiwKLTB4MmUsIDB4NjgsIDB4MzMsIDB4NDAsIDB4MmIsIDB4NjAsIDB4MTQsIDB4MjMsIDB4MGIsIDB4ODEsIDB4MTAsIDB4NjAsCi0weDgwLCAweDA3LCAweDgwLCAweDBhLCAweDIwLCAweDQzLCAweDAzLCAweDA0LCAweDAwLCAweGQwLCAweDAxLCAweDM4LAotMHg1MCwgMHg2MCwgMHgwOSwgMHg2YSwgMHgwOCwgMHgzMiwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkOCwgMHgwNywgMHg0YSwKLTB4MDAsIDB4MGQsIDB4MDIsIDB4ZDMsIDB4NTEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4ODIsIDB4NjEsIDB4M2EsIDB4NjcsCi0weGJlLCAweGU3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwKLTB4YjAsIDB4YjUsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MTYsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDE1LCAweDRjLCAweDAwLCAweDI1LCAweDY3LCAweDY5LCAweDAwLCAweDJmLAotMHgxNiwgMHhkMCwgMHhlMCwgMHg2OCwgMHg0MSwgMHgxYywgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhlMSwgMHg2MCwKLTB4ODAsIDB4NjksIDB4MDEsIDB4M2YsIDB4ZmYsIDB4ZjcsIDB4OTQsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MGYsIDB4MjgsCi0weDAwLCAweGQzLCAweGU1LCAweDYwLCAweGUwLCAweDY4LCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDgwLCAweDY5LAotMHgwMCwgMHgwOCwgMHgwMSwgMHhkMywgMHgwMCwgMHgyZiwgMHhlYSwgMHhkMSwgMHg2NywgMHg2MSwgMHgwMywgMHhlMCwKLTB4MDgsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4NjUsIDB4NjAsIDB4MjAsIDB4NjgsCi0weDAwLCAweDI4LCAweDAxLCAweGQwLCAweGZmLCAweGY3LCAweDI2LCAweGZmLCAweGIwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MTAsIDB4MjMsCi0weDgyLCAweDY4LCAweDEzLCAweDQwLCAweDAwLCAweDIxLCAweDAwLCAweDJiLCAweDE1LCAweGQwLCAweDBjLCAweDRiLAotMHgxYSwgMHg0MCwgMHgxMiwgMHgwMSwgMHg4MSwgMHgyNCwgMHgxNCwgMHg0MywgMHgwMiwgMHg2OCwgMHgxNSwgMHg2OCwKLTB4MTMsIDB4MWQsIDB4ODAsIDB4Y2IsIDB4MWIsIDB4NjgsIDB4MDQsIDB4M2EsIDB4MDIsIDB4NjAsIDB4MjAsIDB4YzIsCi0weDgwLCAweGMyLCAweDA4LCAweGMyLCAweDE0LCAweDYwLCAweDQyLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwNCwgMHgzMiwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHgwOCwgMHgxYywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4ZjAsIDB4ZmYsIDB4MGYsIDB4ZjAsIDB4YjQsIDB4ODIsIDB4NjgsIDB4NTMsIDB4MDksIDB4MzQsIDB4ZDMsCi0weDFiLCAweDRiLCAweDFhLCAweDQwLCAweDEyLCAweDAxLCAweDgxLCAweDI2LCAweDE2LCAweDQzLCAweDAzLCAweDY4LAotMHgxZCwgMHg2OCwgMHgxZiwgMHgxZCwgMHgxMCwgMHhjZiwgMHgzZiwgMHg2OCwgMHgwNCwgMHgzYiwgMHgwMywgMHg2MCwKLTB4MjAsIDB4YzMsIDB4MTAsIDB4YzMsIDB4ODAsIDB4YzMsIDB4MWUsIDB4NjAsIDB4NDMsIDB4NjgsIDB4MWYsIDB4MWQsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDNiLCAweDQzLCAweDQzLCAweDYwLCAweGNiLCAweDZiLCAweDE4LCAweDFmLAotMHhjOCwgMHg2MywgMHg4MCwgMHhjYiwgMHg4MCwgMHhjMCwgMHgxYywgMHg2OCwgMHgxZiwgMHgxZCwgMHgwMywgMHgxZCwKLTB4MDQsIDB4NjAsIDB4MzgsIDB4MWMsIDB4M2YsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MWYsIDB4NjAsIDB4MWYsIDB4MWQsCi0weDQzLCAweDY4LCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDgxLCAweDIzLCAweDIzLCAweDQzLCAweDNiLCAweDYwLAotMHg0MCwgMHg2OCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwNCwgMHgxMCwgMHg0MywgMHg3OCwgMHg2MCwgMHgwOCwgMHg2ZSwKLTB4MDQsIDB4MzAsIDB4MDgsIDB4NjYsIDB4NDgsIDB4NmUsIDB4MDQsIDB4MzAsIDB4NDgsIDB4NjYsIDB4MDAsIDB4MjAsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweGYwLCAweGZmLCAweDBmLCAweDgwLCAweGI0LCAweDgxLCAweDZhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjYSwgMHgxZCwgMHgwNSwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwKLTB4Y2YsIDB4MWQsIDB4MDEsIDB4MzcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDBmLCAweDFkLCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LAotMHg4YiwgMHg2MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgwYywgMHhjMSwKLTB4MDIsIDB4NjIsIDB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjIsIDB4MDQsIDB4MjMsIDB4ODEsIDB4NjksCi0weDE5LCAweDQzLCAweDgxLCAweDYxLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDkxLCAweDYxLCAweDgxLCAweDZhLAotMHgwNCwgMHgzMSwgMHg4MSwgMHg2MiwgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2MiwgMHhjMSwgMHgxZCwKLTB4MzksIDB4MzEsIDB4NGEsIDB4OGIsIDB4MDQsIDB4M2EsIDB4NGEsIDB4ODMsIDB4NDksIDB4OGIsIDB4MDIsIDB4NmIsCi0weDQwLCAweDMyLCAweDUxLCAweDgzLCAweGMxLCAweDg5LCAweDA0LCAweDM5LCAweGMxLCAweDgxLCAweGMxLCAweDY4LAotMHgwMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4MjAsIDB4NDcsIDB4MjgsIDB4NDcsCi0weDMwLCAweDQ3LCAweDM4LCAweDQ3LCAweDMwLCAweDQwLCAweDJkLCAweGU5LCAweDBjLCAweGMwLCAweDlkLCAweGU1LAotMHgwYywgMHg0OCwgMHhhMCwgMHhlMSwgMHgyNCwgMHg0OCwgMHhiMCwgMHhlMSwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDEsIDB4YzAsIDB4NGMsIDB4ZTIsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4NjQsIDB4NTEsIDB4OWYsIDB4ZTUsCi0weDk0LCAweDUwLCAweDIwLCAweGUwLCAweDAwLCAweDUwLCAweDkwLCAweGU1LCAweDE0LCAweDQwLCAweDkwLCAweGU1LAotMHgwMCwgMHgzMCwgMHg4NSwgMHhlNSwgMHgwNCwgMHhjMCwgMHg4NSwgMHhlNSwgMHgwOCwgMHgxMCwgMHg4NSwgMHhlNSwKLTB4MGMsIDB4MjAsIDB4ODUsIDB4ZTUsIDB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDEwLCAweDUwLCAweDg1LCAweGUyLCAweDAxLCAweDAwLCAweDU1LCAweGUxLCAweDBjLCAweDUwLCAweDkwLCAweDU1LAotMHgwNCwgMHgwMCwgMHg1NSwgMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4NTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCi0weDMwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDMwLCAweDkzLCAweGU1LAotMHgwOCwgMHgyMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgzMSwgMHg4MywgMHhlMywgMHgwMiwgMHgzNiwgMHg4MywgMHhlMywKLTB4MDMsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTQsIDB4MzAsIDB4ODAsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4MWEsCi0weDAxLCAweDAwLCAweGEwLCAweGUzLCAweGY0LCAweGZmLCAweGZmLCAweGVhLCAweDAxLCAweDA2LCAweDFjLCAweGUzLAotMHhmMSwgMHhmZiwgMHhmZiwgMHgwYSwgMHhlYywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMiwgMHhjNiwgMHhjYywgMHhlMywKLTB4NTQsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4ZTQsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4NTAsIDB4MTAsIDB4OTEsIDB4ZTUsCi0weGQ5LCAweGZmLCAweGZmLCAweGVhLCAweGYwLCAweDQ3LCAweDJkLCAweGU5LCAweDIwLCAweGMwLCAweDlkLCAweGU1LAotMHgwYywgMHg2OCwgMHhhMCwgMHhlMSwgMHgyNiwgMHg2OCwgMHhiMCwgMHhlMSwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4YjgsIDB4NTAsIDB4OWYsIDB4ZTUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZTAsCi0weDA1LCAweDAwLCAweDgwLCAweGUwLCAweDA4LCAweDQwLCAweDkwLCAweGU1LCAweDA0LCAweDgwLCAweDkwLCAweGU1LAotMHgwMCwgMHg3MCwgMHhhMCwgMHhlMywgMHgxZiwgMHhjMCwgMHhhMCwgMHhlMywgMHgwMiwgMHhjNCwgMHg4YywgMHhlMywKLTB4MDAsIDB4NTAsIDB4OTAsIDB4ZTUsIDB4MTAsIDB4OTAsIDB4OTAsIDB4ZTUsIDB4MTQsIDB4YTAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDMwLCAweDg1LCAweGU1LCAweDA0LCAweGMwLCAweDg1LCAweGU1LCAweDA4LCAweDEwLCAweDg1LCAweGU1LAotMHgwYywgMHgyMCwgMHg4NSwgMHhlNSwgMHgxMCwgMHg1MCwgMHg4NSwgMHhlMiwgMHgwOSwgMHgwMCwgMHg1NSwgMHhlMSwKLTB4MGMsIDB4NTAsIDB4OTAsIDB4NTUsIDB4MGEsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDAzLCAweDcwLCAweDE3LCAweGUyLCAweDIwLCAweDEwLCAweDgxLCAweGUyLCAweDIwLCAweDMwLCAweDgzLCAweGUyLAotMHgwYSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHg2MCwgMHg5NiwgMHhlMiwgMHgwMSwgMHg3MCwgMHg4NywgMHhlMiwKLTB4MDksIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjAsIDB4NjAsIDB4NDYsIDB4ZTIsIDB4MjAsIDB4MDAsIDB4NTYsIDB4ZTMsCi0weGVjLCAweGZmLCAweGZmLCAweGNhLCAweDAwLCAweDcwLCAweGEwLCAweGUzLCAweDAxLCAweGMwLCAweDQ2LCAweGUyLAotMHgwMiwgMHhjNCwgMHg4YywgMHhlMywgMHgwMCwgMHg2MCwgMHhhMCwgMHhlMywgMHhlNywgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4NTAsIDB4ODgsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDUwLCAweDgwLCAweGU1LCAweDAxLCAweDAwLCAweGEwLCAweGUxLCAweGYwLCAweDQ3LCAweGJkLCAweGU4LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHhhMCwgMHg5NCwgMHhlNSwgMHgwYSwgMHgwMCwgMHg1NSwgMHhlMSwKLTB4MTQsIDB4YTAsIDB4ODAsIDB4ZTUsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weGY1LCAweGZmLCAweGZmLCAweGVhLCAweGE4LCAweDAzLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHgwMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2OCwgMHg4MiwgMHg5ZiwgMHhlNSwgMHgwYiwgMHg5MiwgMHhhMCwgMHhlMywKLTB4NjQsIDB4YTIsIDB4OWYsIDB4ZTUsIDB4NTgsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsCi0weDU0LCAweGIwLCAweDlhLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDNmLCAweDQwLCAweDJkLCAweGU5LAotMHgwMCwgMHgwMCwgMHg0ZiwgMHhlMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgxMiwgMHgwMCwgMHg1MCwgMHhlMywKLTB4NTQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDA0LCAweDUwLCAweGEwLCAweGUzLCAweDAwLCAweDQwLCAweDk5LCAweGU1LAotMHgwOSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHg1MywgMHgwMCwgMHgwMCwgMHgxYiwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MjAsIDB4MDAsIDB4MTQsIDB4ZTMsCi0weDU5LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDA3LCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLAotMHgwMSwgMHgwNiwgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwOCwgMHgwMCwgMHgxNCwgMHhlMywKLTB4NDUsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDUsIDB4MTQsIDB4ZTMsIDB4NGEsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAyLCAweDA4LCAweDE0LCAweGUzLCAweDRiLCAweDAwLCAweDAwLCAweDFiLCAweGU1LCAweDBlLCAweDE0LCAweGUzLAotMHgwNywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNCwgMHgyMCwgMHg5OCwgMHhlNSwgMHgwYywgMHgxMCwgMHg5OCwgMHhlNSwKLTB4MDQsIDB4MzAsIDB4NTIsIDB4ZTIsIDB4M2MsIDB4MzAsIDB4YTAsIDB4YjMsIDB4MDQsIDB4MzAsIDB4ODgsIDB4ZTUsCi0weDAyLCAweDAwLCAweDkxLCAweGU3LCAweDBmLCAweGUwLCAweGEwLCAweGUxLAotMHgxMCwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHg1MCwgMHg1NSwgMHhlMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MGMsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDFiLCAweGZmLCAweDJmLCAweDExLCAweDA4LCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAotMHgwYiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHgwYywgMHgxNCwgMHhlMywgMHg5OCwgMHgwMSwgMHg5ZiwgMHgxNSwKLTB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MTQsIDB4ZTMsCi0weDhjLCAweDAxLCAweDlmLCAweDE1LCAweDBmLCAweGUwLCAweGEwLCAweDExLCAweDEwLCAweGZmLCAweDJmLCAweDExLAotMHgwMSwgMHgwOSwgMHgxNCwgMHhlMywgMHg4MCwgMHgwMSwgMHg5ZiwgMHgxNSwgMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwKLTB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDE2LCAweDAwLCAweDAwLCAweDBhLCAweDU0LCAweGUwLCAweDhmLCAweGUyLCAweDA0LCAweDAwLCAweDE0LCAweGUzLAotMHg0MCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwYSwgMHgxNCwgMHhlMywKLTB4NDQsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDksIDB4MTQsIDB4ZTMsCi0weDQ4LCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDAyLCAweDE0LCAweGUzLAotMHg0YywgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwNCwgMHgxNCwgMHhlMywKLTB4NTAsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsCi0weDIxLCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDBlLCAweDAwLCAweDAwLCAweDFiLAotMHgxMCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MDQsIDB4NTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ZTIsCi0weDFiLCAweGZmLCAweDJmLCAweDExLCAweDNmLCAweDQwLCAweGJkLCAweGU4LCAweDA0LCAweGYwLCAweDVlLCAweGUyLAotMHhjMCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHg2MSwgMHhlMSwgMHhmYSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MTgsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDU0LCAweGIwLCAweDlhLCAweGU1LCAweDFjLCAweDEwLCAweDlhLCAweGU1LCAweDE0LCAweDAwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyMCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MjQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDI4LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweDJjLCAweDEwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MzQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDM4LCAweGUwLCAweDlhLCAweGU1LCAweDNjLCAweDEwLCAweDlhLCAweGU1LCAweDE4LCAweDAwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzOCwgMHhlMCwgMHg5YSwgMHhlNSwgMHgzYywgMHgxMCwgMHg5YSwgMHhlNSwKLTB4MTQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NjQsIDB4MjAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDMwLCAweDkyLCAweGU1LCAweDAwLCAweDMwLCAweDUzLCAweGUwLCAweDBhLCAweDAwLCAweDAwLCAweGJhLAotMHgwMCwgMHgzMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwOCwgMHgzMCwgMHg5MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4OTEsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MTAsIDB4ODAsIDB4ZTcsCi0weDA0LCAweDMwLCAweDUzLCAweGUyLCAweDNjLCAweDMwLCAweGEwLCAweGIzLCAweDA4LCAweDMwLCAweDgyLCAweGU1LAotMHgwMSwgMHgwMCwgMHhhMCwgMHhlMywgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzYywgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDAwLCAweDAwLCAweGEwLCAweGUzLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAweDEwLCAweDAwLCAweDlmLCAweGU1LAotMHgwOCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwNCwgMHgxMCwgMHg1MSwgMHhlMiwgMHgzYywgMHgxMCwgMHhhMCwgMHhiMywKLTB4MDgsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGNjLCAweDA0LCAweDAwLCAweDgwLCAweDcxLCAweDJiLCAweGZmLCAweGZmLCAweGQxLCAweDNkLCAweGZmLCAweGZmLAotMHhjOSwgMHgyYiwgMHhmZiwgMHhmZiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhjOSwgMHgxYywgMHg4OSwgMHgwOCwKLTB4ODksIDB4MDAsIDB4MDEsIDB4MjMsIDB4ODUsIDB4NGEsIDB4NWIsIDB4MDcsIDB4MTgsIDB4NDMsIDB4MTMsIDB4NjgsCi0weDViLCAweDE4LCAweDEzLCAweDYwLCAweDAwLCAweDFmLCAweDgxLCAweGEzLCAweDViLCAweDFhLCAweDE4LCAweDQ3LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weDk4LCAweDAwLCAweDlmLCAweGU1LCAweDk4LCAweDEwLCAweDlmLCAweGU1LCAweDAxLCAweDIwLCAweDQwLCAweGUwLAotMHg5NCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsCi0weDAwLCAweDAwLCAweDAwLCAweDBhLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAweDc4LCAweDAwLCAweDlmLCAweGU1LAotMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwgMHg3NCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg3NCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsCi0weDAzLCAweDAwLCAweDUwLCAweGUxLCAweDAzLCAweDAwLCAweDAwLCAweDFhLCAweDA0LCAweDEwLCAweDgxLCAweGUyLAotMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4NTAsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsIDB4NGMsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDRjLCAweDEwLCAweDlmLCAweGU1LCAweDAxLCAweDIwLCAweDQwLCAweGUwLCAweDJjLCAweDMwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwKLTB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0weGY4LCAweGZmLCAweGZmLCAweGVhLCAweDI4LCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweDgwLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg3YywgMHgzNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwKLTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4YzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MzcsIDB4MDAsIDB4ODAsCi0weDgwLCAweDM0LCAweDAwLCAweDgwLCAweGM0LCAweDA0LCAweDAwLCAweDgwLCAweGZjLCAweDNmLCAweDAwLCAweDgwLAotMHg0MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhjOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzEsIDB4ZWEsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MzksIDB4ZmUsIDB4ZmYsIDB4ZWEsCi0weDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDYzLCAweGZlLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLAotMHgxYiwgMHhmZiwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YiwgMHhlYSwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDI4LCAweDA0LCAweDAwLCAweDAwLCAweGY4LCAweDNkLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLAotMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwYiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4ZmYsIDB4MDYsIDB4NTQsCi0weDAzLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDA0LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhhMSwgMHgwNSwgMHhmZiwgMHhmZiwgMHgwNCwgMHhmZiwgMHgwNywgMHg1NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKLTB4YjUsIDB4MDQsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDUsIDB4ZmYsIDB4ZmYsCi0weDA1LCAweGZmLCAweDA1LCAweDU0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDA0LCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwNSwgMHhmZiwgMHhmZiwgMHgwMSwgMHhmZiwgMHgwNCwgMHgwMCwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTgsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDYxLCAweDBlLCAweGZmLCAweGZmLCAweDAyLCAweGZmLCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhhMSwgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDBkLCAweGZmLCAweGZmLCAweDA2LCAweDAwLCAweGZmLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg1MCwgMHhmZiwgMHhmZiwgMHg4MSwgMHg1MCwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NDgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NzUsIDB4MjEsIDB4NDAsIDB4MWIsIDB4NzUsIDB4MjEsIDB4NDAsCi0weDMxLCAweDc1LCAweDIxLCAweDQwLCAweDQ5LCAweDc1LCAweDIxLCAweDQwLAotMHg1NSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg2MywgMHg3NSwgMHgyMSwgMHg0MCwgMHg3ZCwgMHg3NSwgMHgyMSwgMHg0MCwKLTB4YTksIDB4NzUsIDB4MjEsIDB4NDAsIDB4NmQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzUsIDB4NzYsIDB4MjEsIDB4NDAsCi0weGQzLCAweDc2LCAweDIxLCAweDQwLCAweGRkLCAweDc2LCAweDIxLCAweDQwLCAweGU3LCAweDc2LCAweDIxLCAweDQwLAotMHg5OSwgMHg3NywgMHgyMSwgMHg0MCwgMHhhNywgMHg3NywgMHgyMSwgMHg0MCwgMHhiNSwgMHg3NywgMHgyMSwgMHg0MCwKLTB4NjEsIDB4NzgsIDB4MjEsIDB4NDAsIDB4NWYsIDB4N2MsIDB4MjEsIDB4NDAsIDB4ZTksIDB4N2MsIDB4MjEsIDB4NDAsCi0weDg5LCAweDdkLCAweDIxLCAweDQwLCAweGJkLCAweDdlLCAweDIxLCAweDQwLCAweGM5LCAweDdlLCAweDIxLCAweDQwLAotMHgyOSwgMHg3ZiwgMHgyMSwgMHg0MCwgMHg4ZCwgMHg3ZiwgMHgyMSwgMHg0MCwgMHhiOSwgMHg3ZiwgMHgyMSwgMHg0MCwKLTB4ZGQsIDB4N2YsIDB4MjEsIDB4NDAsIDB4MWQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4NDUsIDB4ODAsIDB4MjEsIDB4NDAsCi0weDhkLCAweDgwLCAweDIxLCAweDQwLCAweDlkLCAweDgwLCAweDIxLCAweDQwLCAweGM1LCAweDgwLCAweDIxLCAweDQwLAotMHhkNSwgMHg4MCwgMHgyMSwgMHg0MCwgMHgxZCwgMHg4MSwgMHgyMSwgMHg0MCwgMHg1YiwgMHg4MSwgMHgyMSwgMHg0MCwKLTB4YjEsIDB4ODEsIDB4MjEsIDB4NDAsIDB4MTEsIDB4ODIsIDB4MjEsIDB4NDAsIDB4MWIsIDB4ODIsIDB4MjEsIDB4NDAsCi0weDFmLCAweDgyLCAweDIxLCAweDQwLCAweDhkLCAweDgyLCAweDIxLCAweDQwLCAweGQ5LCAweDgyLCAweDIxLCAweDQwLAotMHgzMSwgMHg4MywgMHgyMSwgMHg0MCwgMHg2ZCwgMHg4MywgMHgyMSwgMHg0MCwgMHhkMSwgMHg4MywgMHgyMSwgMHg0MCwKLTB4MDksIDB4ODQsIDB4MjEsIDB4NDAsIDB4MTksIDB4ODQsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODQsIDB4MjEsIDB4NDAsCi0weDYxLCAweDg0LCAweDIxLCAweDQwLCAweDc1LCAweDg0LCAweDIxLCAweDQwLCAweDlkLCAweDg0LCAweDIxLCAweDQwLAotMHhhNywgMHg4NCwgMHgyMSwgMHg0MCwgMHhiMSwgMHg4NCwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4NSwgMHgyMSwgMHg0MCwKLTB4NDUsIDB4ODUsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODUsIDB4MjEsIDB4NDAsIDB4YzUsIDB4ODUsIDB4MjEsIDB4NDAsCi0weGNmLCAweDg1LCAweDIxLCAweDQwLCAweGQ5LCAweDg1LCAweDIxLCAweDQwLCAweGUzLCAweDg1LCAweDIxLCAweDQwLAotMHhlZCwgMHg4NSwgMHgyMSwgMHg0MCwgMHhmNywgMHg4NSwgMHgyMSwgMHg0MCwgMHgwMSwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4MGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MTUsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MDEsIDB4ODksIDB4MjEsIDB4NDAsCi0weDFmLCAweDg2LCAweDIxLCAweDQwLCAweDI5LCAweDg2LCAweDIxLCAweDQwLCAweDMzLCAweDg2LCAweDIxLCAweDQwLAotMHgzZCwgMHg4NiwgMHgyMSwgMHg0MCwgMHg2NSwgMHg4NiwgMHgyMSwgMHg0MCwgMHg2ZiwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4ZDEsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZTUsIDB4ODYsIDB4MjEsIDB4NDAsCi0weGVmLCAweDg2LCAweDIxLCAweDQwLCAweGY5LCAweDg2LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHgwMywgMHg4NywgMHgyMSwgMHg0MCwgMHg2OSwgMHg4NywgMHgyMSwgMHg0MCwgMHhiNSwgMHg4NywgMHgyMSwgMHg0MCwKLTB4ZjksIDB4ODcsIDB4MjEsIDB4NDAsIDB4MDksIDB4ODgsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDU1LCAweDg4LCAweDIxLCAweDQwLCAweDU5LCAweDg4LCAweDIxLCAweDQwLCAweDVkLCAweDg4LCAweDIxLCAweDQwLAotMHhiNSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhkZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHhlOSwgMHg4OCwgMHgyMSwgMHg0MCwKLTB4ZWQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjEsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4ODgsIDB4MjEsIDB4NDAsCi0weGY5LCAweDg4LCAweDIxLCAweDQwLCAweGZkLCAweDg4LCAweDIxLCAweDQwLCAweDJkLCAweDg1LCAweDIxLCAweDQwLAotMHg4OSwgMHg4NSwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4MGQsIDB4ODksIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4ZTEsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4NmIsIDB4NzgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4N2IsIDB4MjEsIDB4NDAsIDB4MzEsIDB4N2MsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg1OCwgMHgwMSwgMHgxOCwgMHg0MCwKLTB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDAxLCAweDE4LCAweDQwLCAweDY4LCAweDAxLCAweDE4LCAweDQwLAotMHgyNCwgMHg4MywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NzgsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgxOCwgMHg0MCwKLTB4ODgsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsIDB4MjQsIDB4YWIsIDB4MjAsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwOCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwYywgMHgwMCwgMHgxMiwgMHgwMCwKLTB4MWMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsCi0weGE0LCAweGE4LCAweDIwLCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhkMSwgMHhhOCwgMHgyMSwgMHg0MCwgMHgyZCwgMHhhYSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4ODksIDB4NzAsIDB4MjEsIDB4NDAsIDB4YzksIDB4YTEsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1NywgMHg4OSwgMHgyMSwgMHg0MCwgMHhkMSwgMHhhOCwgMHgyMSwgMHg0MCwgMHhjNSwgMHgyZiwgMHhmZiwgMHhmZiwKLTB4MDUsIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4MjAsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YTcsIDB4MjEsIDB4NDAsCi0weDM0LCAweDJlLCAweDAwLCAweDgwLCAweDQ4LCAweDJlLCAweDAwLCAweDgwLCAweDVjLCAweDJlLCAweDAwLCAweDgwLAotMHgzMCwgMHgzMywgMHgzYSwgMHgzMSwgMHgzMSwgMHgzYSwgMHgzMSwgMHgzMSwgMHgwMCwgMHgzMCwgMHgzNywgMHgyZiwKLTB4MzIsIDB4MzMsIDB4MmYsIDB4MzAsIDB4MzEsIDB4MDAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MzUsCi0weDM2LCAweDM5LCAweDAwLCAweDQzLCAweDZmLCAweDcwLCAweDc5LCAweDcyLCAweDY5LCAweDY3LCAweDY4LCAweDc0LAotMHgyMCwgMHgyOCwgMHg2MywgMHgyOSwgMHgyMCwgMHgzMiwgMHgzMCwgMHgzMCwgMHgzMSwgMHgyMCwgMHgzMywgMHg0MywKLTB4NmYsIDB4NmQsIDB4MjAsIDB4NDMsIDB4NmYsIDB4NzIsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjksCi0weDZmLCAweDZlLCAweDBhLCAweDAwLCAweDA4LCAweDEwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg1MywgMHhmZiwgMHhmZiwKLTB4MjcsIDB4ZjAsIDB4N2QsIDB4ZmQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGUsIDB4ODIsIDB4MDAsCi0weDAxLCAweDQwLCAweDY0LCAweDA0LCAweDY0LCAweDJkLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHg2OSwgMHgzZSwgMHhmZiwgMHhmZiwgMHhjOSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhkNSwgMHgyNCwgMHhmZiwgMHhmZiwKLTB4YzksIDB4M2IsIDB4ZmYsIDB4ZmYsIDB4MjksIDB4M2MsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4MWEsIDB4ZmYsIDB4ZmYsCi0weDY1LCAweDExLCAweGZmLCAweGZmLCAweGNjLCAweDUzLCAweGZmLCAweGZmLCAweDIxLCAweDQwLCAweGZmLCAweGZmLAotMHg4OSwgMHg3MCwgMHgyMSwgMHg0MCwgMHg0OSwgMHg3MiwgMHgyMSwgMHg0MCwgMHhkOSwgMHgzZiwgMHhmZiwgMHhmZiwKLTB4MjEsIDB4OWEsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MjQsIDB4ZmYsIDB4ZmYsIDB4NjQsIDB4NTMsIDB4ZmYsIDB4ZmYsCi0weDhjLCAweDUzLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4YjAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MGUsIDB4MDAsIDB4MDAsCi0weDAwLCAweDZlLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhlZCwgMHg4OSwgMHgyMSwgMHg0MCwgMHg4YiwgMHg4OSwgMHgyMSwgMHg0MCwgMHhhNSwgMHg4YywgMHgyMSwgMHg0MCwKLTB4MDUsIDB4OGQsIDB4MjEsIDB4NDAsIDB4Y2QsIDB4OGQsIDB4MjEsIDB4NDAsIDB4OGIsIDB4OGIsIDB4MjEsIDB4NDAsCi0weGE5LCAweDhlLCAweDIxLCAweDQwLCAweDE1LCAweDhmLCAweDIxLCAweDQwLCAweDY5LCAweDhiLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwgMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHgyZCwgMHhiZSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MjAsIDB4MGEsIDB4NGEsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZDEsIDB4MTgsIDB4MmQsIDB4MjMsCi0weDliLCAweDAxLCAweGQzLCAweDE4LCAweDg4LCAweDYxLCAweGQ4LCAweDYwLCAweGQ4LCAweDYzLCAweDgwLCAweDMyLAotMHhjOCwgMHg2MCwgMHgwOCwgMHg2MSwgMHg0OCwgMHg2MSwgMHhkMCwgMHg2MiwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjAsIDB4ODgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGZlLCAweDAzLCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDBjLCAweDFjLCAweDA1LCAweDFjLAotMHgwMCwgMHgyMywgMHgwMCwgMHg5MywgMHhmZiwgMHhmNywgMHhkZSwgMHhmZiwgMHg2OCwgMHg0OSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4Y2YsIDB4MTgsIDB4NzgsIDB4NjgsIDB4MjgsIDB4NDAsCi0weDAwLCAweDIyLCAweGY4LCAweDYwLCAweDNhLCAweDYxLCAweGJhLCAweDY4LCAweDIyLCAweDQwLCAweDdhLCAweDYxLAotMHgwYywgMHgxYywgMHg0MSwgMHgwOSwgMHgwMywgMHhkMiwgMHg1MSwgMHgwOSwgMHgwMSwgMHhkMiwgMHg4MCwgMHgwYSwKLTB4MDIsIDB4ZDMsIDB4NjAsIDB4NDgsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4ZjksIDB4NjgsCi0weDQ5LCAweDA5LCAweDAzLCAweGQyLCAweDc5LCAweDY5LCAweDQ5LCAweDA5LCAweDAwLCAweGQyLCAweDAwLCAweDIwLAotMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwMywgMHhmMCwgMHhkNCwgMHhmYSwgMHhmOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4NzAsIDB4ZDAsIDB4MDAsIDB4MjMsIDB4MDIsIDB4OTMsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NGEsIDB4MDEsIDB4MjMsCi0weDE4LCAweDQzLCAweGY4LCAweDYwLCAweDAwLCAweDIwLCAweGQ1LCAweDFkLCAweDc5LCAweDM1LCAweDAzLCAweDk1LAotMHgwMSwgMHgyNCwgMHgwMCwgMHgyMSwgMHg0ZiwgMHg0ZCwgMHhmYSwgMHg2OCwgMHgyMiwgMHg0MCwgMHgzOSwgMHhkMCwKLTB4OGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4OTIsIDB4MDAsIDB4NGUsIDB4NGIsIDB4OWIsIDB4NWMsIDB4MWUsIDB4MWMsCi0weDgzLCAweDQyLCAweDA0LCAweGQwLCAweDRiLCAweDRiLCAweGQzLCAweDE4LCAweDViLCAweDc4LCAweDgzLCAweDQyLAotMHgyYywgMHhkMSwgMHg0OSwgMHg0YiwgMHhkMiwgMHgxOCwgMHhkMywgMHg3OCwgMHgwMywgMHg5ZCwgMHhlZCwgMHg2YSwKLTB4YWIsIDB4NDIsIDB4MDIsIDB4ZDksIDB4MDMsIDB4OWQsIDB4YzAsIDB4NDYsIDB4ZWIsIDB4NjIsIDB4NTMsIDB4NjgsCi0weDViLCAweDA4LCAweDAxLCAweGQzLCAweDAxLCAweDIzLCAweDAwLCAweDkzLCAweDg2LCAweDQyLCAweDBhLCAweGQxLAotMHg5NSwgMHg2OCwgMHgwMiwgMHg5YiwgMHg1ZSwgMHgxYywgMHgwMiwgMHg5NiwgMHg5YiwgMHgwMCwgMHgzYywgMHg0ZSwKLTB4OWUsIDB4MTksIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjMsIDB4MTgsIDB4OWQsIDB4NjEsIDB4NTMsIDB4NzgsCi0weDgzLCAweDQyLCAweDBkLCAweGQxLCAweGQyLCAweDY4LCAweDAxLCAweDliLCAweDVkLCAweDFjLCAweDAxLCAweDk1LAotMHg5YiwgMHgwMCwgMHgzNSwgMHg0ZCwgMHg1ZCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwKLTB4ZGEsIDB4NjAsIDB4M2EsIDB4NjksIDB4MDEsIDB4MzIsIDB4M2EsIDB4NjEsIDB4NjQsIDB4MDAsIDB4MDEsIDB4MzEsCi0weDBiLCAweDI5LCAweGJkLCAweGQzLCAweDAxLCAweDMwLCAweDA5LCAweDI4LCAweGI4LCAweGQzLCAweDAwLCAweDIwLAotMHgwMiwgMHg5YiwgMHg5OSwgMHgwMCwgMHgyYiwgMHg0YSwgMHg4OSwgMHgxOCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4YzksIDB4MTgsIDB4ODgsIDB4NjEsIDB4MDEsIDB4OWIsIDB4OTksIDB4MDAsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsCi0weDliLCAweDAxLCAweGM5LCAweDE4LCAweGM4LCAweDYwLCAweDAwLCAweDliLCAweDAwLCAweDJiLCAweDBjLCAweGQxLAotMHg4MSwgMHgwMCwgMHg4OSwgMHgxOCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhjOSwgMHgxOCwgMHhjYiwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4OGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDgsIDB4ZTAsCi0weDA3LCAweGUwLCAweDAzLCAweDlkLCAweGU4LCAweDZhLCAweDMwLCAweDI4LCAweDAzLCAweGQyLCAweDMwLCAweDIwLAotMHgwMywgMHg5ZCwgMHhjMCwgMHg0NiwgMHhlOCwgMHg2MiwgMHgxOSwgMHg0YSwgMHg3OCwgMHg2OSwgMHgwMCwgMHgyOCwKLTB4MmEsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjEsIDB4MDAsIDB4MjAsCi0weDAxLCAweDI0LCAweDAwLCAweDIyLCAweDEzLCAweDRlLCAweDdiLCAweDY5LCAweDIzLCAweDQwLCAweDEwLCAweGQwLAotMHg5MywgMHgwMCwgMHg5YiwgMHgxOCwgMHg5YiwgMHgwMCwgMHgxMiwgMHg0ZCwgMHg1YiwgMHgxOSwgMHg5ZCwgMHg3OCwKLTB4ODUsIDB4NDIsIDB4MDgsIDB4ZDEsIDB4MWQsIDB4NjksIDB4MGIsIDB4MWMsIDB4OWIsIDB4MDAsIDB4OWUsIDB4MTksCi0weDJkLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweGRkLCAweDYzLCAweDAxLCAweDMxLCAweDY0LCAweDAwLAotMHgwMSwgMHgzMiwgMHgwYiwgMHgyYSwgMHhlNiwgMHhkMywgMHgwMSwgMHgzMCwgMHgwOSwgMHgyOCwgMHhlMSwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODksIDB4MDAsIDB4MDQsIDB4NGEsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGM5LCAweDE4LCAweGM4LCAweDYzLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgzMCwgMHg1MywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCi0weDE4LCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAotMHgxMCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKLTB4MDgsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzgsIDB4NTIsIDB4ZmYsIDB4ZmYsCi0weDg4LCAweDUxLCAweGZmLCAweGZmLCAweGQ1LCAweGIwLCAweDIxLCAweDQwLCAweGYwLCAweGI1LCAweDA0LCAweDIwLAotMHgxYSwgMHg0OSwgMHgwMSwgMHgyNSwgMHgwOCwgMHg2MCwgMHgxYSwgMHg0ZiwgMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwKLTB4ZjgsIDB4MTgsIDB4MDUsIDB4NzMsIDB4MTgsIDB4NDgsIDB4NDEsIDB4NmIsIDB4MmMsIDB4MDUsIDB4MDAsIDB4MjAsCi0weDdhLCAweDZlLCAweDE3LCAweDRiLCAweDhhLCAweDQyLCAweDFkLCAweGQwLAotMHgxOSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgxNywgMHhkMSwgMHhkOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwKLTB4NDksIDB4NzgsIDB4MWUsIDB4MWMsIDB4MDAsIDB4MjksIDB4MTAsIDB4ZDEsIDB4YjAsIDB4NjAsIDB4MTAsIDB4MjAsCi0weDcwLCAweDYwLCAweDEwLCAweDRhLCAweDEwLCAweDQ5LCAweGZmLCAweGY3LCAweGMzLCAweGZmLCAweDAwLCAweDI4LAotMHgwNywgMHhkMCwgMHgzNSwgMHg3MywgMHgwNCwgMHgyMywgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywgMHhiOCwgMHg2MSwKLTB4MjAsIDB4NjEsIDB4MDAsIDB4ZjAsIDB4MTcsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDE4LCAweDczLCAweDA0LCAweDIzLCAweGI4LCAweDY5LCAweDk4LCAweDQzLCAweGI4LCAweDYxLCAweDIwLCAweDYxLAotMHhmNSwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weDdkLCAweDcxLCAweDIxLCAweDQwLCAweGY4LCAweGI1LCAweDE1LCAweDRmLCAweDM5LCAweDZjLCAweDE1LCAweDQ4LAotMHg0MCwgMHg2ZSwgMHgwYywgMHgxYSwgMHgxNCwgMHg0ZSwgMHg3MSwgMHg2OCwgMHgxNCwgMHg0ZCwgMHhhMSwgMHg0MiwKLTB4MDYsIDB4ZDgsIDB4MTQsIDB4NGEsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YjksIDB4NmIsIDB4MDksIDB4MTgsCi0weGZhLCAweDZiLCAweDExLCAweGUwLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDIyLCAweDQzLCAweDAwLCAweDkyLAotMHhiOSwgMHg2YiwgMHgwOSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhmYSwgMHg2YiwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywKLTB4OGQsIDB4ZmYsIDB4NzAsIDB4NjgsIDB4MDAsIDB4MWIsIDB4MGEsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weGI5LCAweDZiLCAweGZhLCAweDZiLCAweDAwLCAweDIwLCAweDJiLCAweDFjLCAweGZmLCAweGY3LCAweDgyLCAweGZmLAotMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDAwLCAweDAwLCAweDM3LCAweDAyLCAweGYwLCAweGI1LCAweDJiLCAweDRmLCAweGI4LCAweDY4LCAweDc5LCAweDY4LAotMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgMHgyOSwgMHg0YSwgMHhmZiwgMHhmNywgMHg2MywgMHhmZiwgMHgwMSwgMHgyMCwKLTB4YzAsIDB4MDIsIDB4MjgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YjksIDB4NjgsIDB4MzgsIDB4MWMsCi0weDI2LCAweDRkLCAweDAwLCAweDI0LCAweDI2LCAweDRlLCAweGVmLCAweDFkLCAweDc5LCAweDM3LCAweDAwLCAweDI5LAotMHgzMSwgMHhkMSwgMHgzMSwgMHg2OCwgMHgwYSwgMHg3OCwgMHgxMiwgMHgwYSwgMHgwMywgMHhkMiwgMHgwNCwgMHg3MywKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MGMsIDB4ZDEsCi0weDA1LCAweDFjLCAweDQwLCAweDY4LCAweDAwLCAweGYwLCAweDNlLCAweGY5LCAweDMwLCAweDY4LCAweDAwLCAweGYwLAotMHg2NywgMHhmOCwgMHgwMCwgMHgyOCwgMHgyNiwgMHhkMSwgMHgyYywgMHg3MywgMHhmZiwgMHhmNywgMHg1OCwgMHhmZiwKLTB4MjIsIDB4ZTAsIDB4MDksIDB4MDEsIDB4MDcsIDB4MWMsIDB4NDEsIDB4NjAsIDB4MDgsIDB4MWMsIDB4MTcsIDB4NGEsCi0weDE3LCAweDQ5LCAweGZmLCAweGY3LCAweDM1LCAweGZmLCAweDAwLCAweDI4LCAweDA3LCAweGQxLCAweDNjLCAweDczLAotMHgwNCwgMHgyMywgMHhhOCwgMHg2OSwgMHg5OCwgMHg0MywgMHg5OSwgMHgwNCwgMHhhOCwgMHg2MSwgMHgwOCwgMHg2MSwKLTB4ZGEsIDB4ZTcsIDB4MTAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MTAsIDB4MjAsIDB4YjgsIDB4NjAsCi0weGZmLCAweGY3LCAweDgyLCAweGZmLCAweGQyLCAweGU3LCAweDA1LCAweDFjLCAweDQwLCAweDY4LCAweDAwLCAweGYwLAotMHgxNywgMHhmOSwgMHgzMCwgMHg2OCwgMHgwMCwgMHhmMCwgMHg0MCwgMHhmOCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhkMCwKLTB4MDIsIDB4MjMsIDB4ZjgsIDB4NmIsIDB4MTgsIDB4NDMsIDB4ZjgsIDB4NjMsIDB4YzQsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDI4LCAweDA1LCAweDAwLCAweDgwLCAweGE1LCAweDU1LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4N2QsIDB4NzEsIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDMsIDB4MTAsIDB4NDksCi0weDAwLCAweDI3LCAweDA4LCAweDYwLCAweDBmLCAweDRjLCAweGUwLCAweDFkLCAweGZmLCAweDMwLCAweDNhLCAweDMwLAotMHg0NywgMHg3MCwgMHhlMCwgMHg2OSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg2OSwgMHgwMCwgMHhmMCwKLTB4ZDcsIDB4ZjgsIDB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZTcsIDB4NjEsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDIwLCAweGUwLCAweDYxLCAweDA3LCAweDQ4LCAweDAyLCAweDIzLCAweGMxLCAweDZiLCAweDE5LCAweDQzLAotMHhjMSwgMHg2MywgMHgyNywgMHg3MywgMHhmZiwgMHhmNywgMHgwMCwgMHhmZiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weGU4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDc4LCAweDg4LAotMHg2ZCwgMHgyOCwgMHgwMywgMHhkYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZjcsIDB4ZjgsIDB4MTcsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MGQsIDB4NDksIDB4MDksIDB4NTgsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweGNiLCAweGZlLCAweDAwLCAweDI4LCAweDBmLCAweGQxLCAweDM5LCAweDc4LCAweGM5LCAweDA5LAotMHgwYywgMHhkMywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmOCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhlOCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHgwMiwgMHgxYywgMHg0MSwgMHg0YiwKLTB4ZGQsIDB4MWQsIDB4ZmYsIDB4MzUsIDB4M2EsIDB4MzUsIDB4MmYsIDB4NzgsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDAsCi0weDAwLCAweDI3LCAweDAwLCAweGUwLCAweDAxLCAweDI3LCAweDJmLCAweDcwLCAweDJmLCAweDc4LCAweGZiLCAweDAwLAotMHhkYiwgMHgxOSwgMHg1YiwgMHgwMSwgMHgzYSwgMHg0ZiwgMHhkYywgMHgxOSwgMHg0MCwgMHg3OCwgMHgwMCwgMHgwMSwKLTB4YzcsIDB4MWQsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjAsIDB4ODMsIDB4MDAsIDB4ZDYsIDB4NTgsIDB4YzAsIDB4NDYsCi0weGU2LCAweDUwLCAweDAxLCAweDMwLCAweDA0LCAweDI4LCAweGY4LCAweGQzLCAweDAwLCAweDI5LCAweDBmLCAweGQwLAotMHgwMCwgMHgyMiwgMHhiYiwgMHgwOCwgMHgwMSwgMHg5MywgMHg4MywgMHg0MiwgMHgwYiwgMHhkOSwgMHgxMywgMHgxYywKLTB4OWIsIDB4MDAsIDB4Y2IsIDB4NTgsIDB4ODYsIDB4MDAsIDB4YTMsIDB4NTEsIDB4MDEsIDB4OWIsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMyLCAweDgzLCAweDQyLCAweGY1LCAweGQ4LCAweDAwLCAweGUwLCAweDEwLCAweDI3LCAweDJiLCAweDQ4LAotMHgwMiwgMHg2ZCwgMHg4MCwgMHg2ZSwgMHgyYSwgMHg0OSwgMHg4MiwgMHg0MiwgMHgwMywgMHhkOCwgMHg4MiwgMHgxYSwKLTB4Y2IsIDB4NmMsIDB4OWEsIDB4MWEsIDB4MDAsIDB4ZTAsIDB4MTIsIDB4MWEsIDB4YmEsIDB4NDIsIDB4MDUsIDB4ZDgsCi0weDI2LCAweDQ4LCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLCAweDAxLCAweDIwLCAweDM3LCAweGUwLAotMHhjMywgMHgxOSwgMHhjYSwgMHg2YywgMHg5MywgMHg0MiwgMHgwOCwgMHhkOCwgMHgyMiwgMHg0YSwgMHgzYSwgMHg0MywKLTB4MDAsIDB4OTIsIDB4MGEsIDB4MWMsIDB4NDksIDB4NmMsIDB4MDksIDB4MTgsIDB4OTIsIDB4NmMsIDB4MjMsIDB4MWMsCi0weDEyLCAweGUwLCAweDE2LCAweDFhLCAweDAwLCAweDk2LCAweDFiLCAweDQ5LCAweDQ5LCAweDZjLCAweDA5LCAweDE4LAotMHgxOSwgMHg0OCwgMHg4MiwgMHg2YywgMHgwMywgMHgyMCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg1ZSwgMHhmZSwKLTB4YjgsIDB4MWIsIDB4MTgsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YTMsIDB4MTksIDB4MTQsIDB4NDgsCi0weDgyLCAweDZjLCAweDQxLCAweDZjLCAweDAzLCAweDIwLCAweGZmLCAweGY3LCAweDUzLCAweGZlLCAweDAxLCAweDIwLAotMHgwZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg2OCwgMHg3MCwgMHg4YSwgMHg2OSwgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwKLTB4MTcsIDB4NjEsIDB4OGEsIDB4NjksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MjcsIDB4OGYsIDB4NjEsCi0weDAwLCAweGUwLCAweDg4LCAweDYxLCAweDBjLCAweDQ4LCAweDAyLCAweDIzLCAweGMxLCAweDZiLCAweDE5LCAweDQzLAotMHhjMSwgMHg2MywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0ZiwgMHg3MywKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weDUwLCAweGJhLCAweDIwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMiwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDksIDB4OGEsIDB4NmUsIDB4MTAsIDB4MTgsIDB4MDcsIDB4NGEsCi0weGQyLCAweDZjLCAweDEzLCAweDA0LCAweDFiLCAweDBjLCAweDgzLCAweDQyLCAweDAwLCAweGQ4LCAweDgwLCAweDFhLAotMHg4OCwgMHg2NiwgMHg4OCwgMHg2ZSwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwgMHg3MCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsCi0weDA2LCAweDQ5LCAweDRhLCAweDZlLCAweDEwLCAweDE4LCAweDA2LCAweDRhLCAweDEyLCAweDZjLCAweDgyLCAweDQyLAotMHgwMCwgMHhkOCwgMHg4MCwgMHgxYSwgMHg0OCwgMHg2NiwgMHg0OCwgMHg2ZSwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDA1LCAweDIyLCAweDBhLCAweDYwLCAweDgyLCAweDg4LCAweGMwLCAweDQ2LAotMHg4YSwgMHg4MCwgMHgwMCwgMHgyMiwgMHg0YSwgMHg3MCwgMHg0MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MCwKLTB4Y2EsIDB4ODAsIDB4OGEsIDB4NjAsIDB4Y2EsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDUsIDB4MjIsIDB4MDIsIDB4NjAsCi0weDAwLCAweDIyLCAweDgyLCAweDgwLCAweDQyLCAweDcwLCAweDQxLCAweDgwLCAweGMyLCAweDgwLCAweDgyLCAweDYwLAotMHhjMiwgMHg2MCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHgwZSwgMHg0OCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGRkLCAweGZmLCAweDM4LCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMSwgMHgyNywgMHhkZiwgMHg4MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4MTEsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MzgsIDB4MWMsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjMSwgMHg4OCwgMHgwOSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4OTEsIDB4ODEsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4YmQsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weDQwLCAweDAyLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhmNSwgMHhmZSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzMsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAxLCAweDIwLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcxLCAweGExLCAweDIxLAotMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MjAsIDB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzEsIDB4ZmYsIDB4MjEsIDB4YTEsIDB4MjIsCi0weDUyLCAweDAzLCAweDAxLCAweDMxLCAweDkxLCAweDYwLCAweDcwLCAweDQ3LCAweDI4LCAweDBmLCAweDAwLCAweDgwLAotMHgwMiwgMHgyMCwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsCi0weDcwLCAweDQ3LCAweGMwLCAweDg4LCAweGMwLCAweDA2LCAweGMwLCAweDBlLCAweGExLCAweDIxLCAweDQ5LCAweDAzLAotMHg0OCwgMHg2MSwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDgsIDB4NDksIDB4MGYsIDB4NmIsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDcxLCAweGZmLCAweGY4LCAweDA2LCAweGMwLCAweDBlLCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHhhOSwgMHhmZSwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDgwLCAweGI1LCAweDg1LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHg1YiwgMHhmZiwgMHhmOCwgMHg4OCwgMHgwNCwgMHhhOSwgMHgwMywgMHhmMCwgMHhjOSwgMHhmZiwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGYsIDB4ZDAsIDB4MDEsIDB4YTgsCi0weDQwLCAweDg4LCAweDgwLCAweDA4LCAweDAzLCAweDM4LCAweDgwLCAweDA4LCAweDAxLCAweDMwLCAweDA0LCAweDNiLAotMHg1OCwgMHg3MCwgMHgwNCwgMHg5OCwgMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgMHg0MCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDUsIDB4ZTAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDA0LCAweDk4LCAweGMxLCAweDFkLCAweDAxLCAweDMxLAotMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHg3NSwgMHhmZSwgMHgwMSwgMHgyMCwgMHgwNSwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTQsIDB4NGYsIDB4MzksIDB4N2IsCi0weDAwLCAweDI5LCAweDIwLCAweGQxLCAweGY5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLCAweDQ5LCAweDc4LAotMHgwMCwgMHgyOSwgMHgxYSwgMHhkMSwgMHgxMCwgMHg0OSwgMHgwNSwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwOCwgMHgyMiwKLTB4MDAsIDB4YWIsIDB4NWEsIDB4ODAsIDB4OTgsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MDAsIDB4YWIsIDB4NTgsIDB4NzAsCi0weDAwLCAweDI0LCAweGRjLCAweDgwLCAweDA4LCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDQ4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwMSwgMHgyMCwgMHgzOCwgMHg3MywgMHg2OCwgMHg0NiwgMHgwOCwgMHgzMSwKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDAsIDB4M2MsIDB4NzMsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZjksIDB4ZmUsIDB4YmEsIDB4NjgsIDB4MGQsIDB4NGMsIDB4MGUsIDB4NDgsCi0weDAwLCAweDJhLCAweDA1LCAweGQxLCAweDBkLCAweDQ5LCAweGZmLCAweGY3LCAweGU0LCAweGZjLCAweDAwLCAweDI4LAotMHgwYywgMHhkYSwgMHgwNSwgMHhlMCwgMHhiOSwgMHg4OCwgMHgwYiwgMHg0YiwgMHhmZiwgMHhmNywgMHhkZiwgMHhmYywKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZGEsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDIyLCAweGZlLCAweDAwLCAweDIwLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MGQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NTksIDB4YmQsIDB4MjEsIDB4NDAsCi0weDAwLCAweGI1LCAweGMwLCAweDg4LCAweDAzLCAweGYwLCAweDJlLCAweGZmLCAweDAwLCAweDIwLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhlMiwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZGQsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDAxLCAweDFjLCAweDAyLCAweDIwLCAweDAwLCAweGYwLCAweDAyLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhiMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHgwOCwgMHgxYywgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4YjUsIDB4ZmUsIDB4MjEsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4YTQsIDB4ZmMsIDB4MDQsIDB4MWMsIDB4MjAsIDB4NGEsCi0weDAwLCAweDIxLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGEwLCAweGZjLCAweDAwLCAweDI4LCAweDI3LCAweGQwLAotMHgwNCwgMHhhOSwgMHgxZCwgMHg0YSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg5OSwgMHhmYywgMHgwNCwgMHhhOCwKLTB4MDAsIDB4MjMsIDB4MDEsIDB4MmYsIDB4MDYsIDB4ZDEsIDB4MGMsIDB4YWEsIDB4MDIsIDB4MzIsIDB4MDAsIDB4MjEsCi0weDEzLCAweDYwLCAweDAxLCAweDMxLCAweDEwLCAweDI5LCAweGZiLCAweGQzLCAweDAxLCAweDY4LCAweDA0LCAweDI5LAotMHgwNCwgMHhkOSwgMHg4OSwgMHgwOCwgMHgwMywgMHgzOSwgMHg4OSwgMHgwOCwgMHgwMSwgMHgzMSwgMHgwMCwgMHhlMCwKLTB4MTksIDB4MWMsIDB4MDAsIDB4YWIsIDB4NTksIDB4NzAsIDB4MDYsIDB4YTksIDB4MDksIDB4NzgsIDB4YzAsIDB4NDYsCi0weGQ5LCAweDgwLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA3LCAweDk4LCAweGMwLCAweDQ2LAotMHgwMywgMHg5MCwgMHgwNCwgMHgzMywgMHgwOCwgMHhhZCwgMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmUsIDB4ZmMsIDB4NjgsIDB4NDYsCi0weDI5LCAweDFjLCAweGZmLCAweGY3LCAweGI3LCAweGZkLCAweDAxLCAweDIwLCAweDQ2LCAweGIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg1OSwgMHhiMSwgMHgyMSwgMHg0MCwKLTB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsCi0weDAyLCAweDIwLCAweDAwLCAweGYwLCAweDEwLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwMSwgMHgxYywgMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHhhMiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGYwLCAweGI1LCAweGM3LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDFjLAotMHgwMSwgMHhhOSwgMHhmZiwgMHhmNywgMHg0ZCwgMHhmZSwgMHgyMSwgMHg0OCwgMHhmZiwgMHhmNywgMHgzYywgMHhmYywKLTB4MDAsIDB4OTAsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NjgsIDB4MDQsIDB4MzAsIDB4ZmMsIDB4MmEsCi0weDI1LCAweGQ4LCAweGZmLCAweDIzLCAweDA5LCAweDMzLCAweDk4LCAweDQyLCAweDIxLCAweGQ4LCAweDE5LCAweDJjLAotMHgxZiwgMHhkOCwgMHhmZCwgMHg4OCwgMHhmOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MCwgMHhmOSwgMHgxZCwKLTB4MDksIDB4MzEsIDB4MDYsIDB4YWIsIDB4MDAsIDB4MjAsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZGQsCi0weDQwLCAweGM5LCAweDQwLCAweGMzLCAweDQwLCAweGM5LCAweDQwLCAweGMzLCAweDQwLCAweGM5LCAweDQwLCAweGMzLAotMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg3OCwKLTB4ODYsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MjAsIDB4MWMsIDB4MDUsIDB4YTksIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDIxLCAweGZjLCAweDAwLCAweDI4LCAweDA1LCAweGQwLCAweDAxLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMSwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNywgMHg0OSwgMHgwMCwgMHg5OCwgMHhmZiwgMHhmNywKLTB4MDYsIDB4ZmMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4NGYsIDB4ZmQsIDB4MDEsIDB4MjAsCi0weDQ3LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLAotMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHgxYiwgMHhmZSwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4ZmMsIDB4ODgsIDB4MjUsIDB4NGQsCi0weDY4LCAweDY4LCAweDAxLCAweDMwLCAweDY5LCAweDQ2LCAweDY4LCAweDYwLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhmNSwgMHhmZCwgMHgxMCwgMHgyYywgMHgwOCwgMHhkMywgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MTcsIDB4ZTAsCi0weDc4LCAweDc4LCAweDgyLCAweDAwLCAweGZiLCAweDFkLCAweDA5LCAweDMzLCAweDAwLCAweDIwLCAweGI5LCAweDY4LAotMHgwMCwgMHgyYSwgMHgxNSwgMHhkOSwgMHg0MCwgMHhjYiwgMHgwZiwgMHgxYywKLTB4MDEsIDB4MzEsIDB4YmUsIDB4NDIsIDB4MGQsIDB4ZDAsIDB4MDAsIDB4YWEsIDB4MTIsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDFhLCAweDQzLCAweDAwLCAweGFiLCAweDFhLCAweDcwLCAweDA0LCAweDIyLCAweGRhLCAweDgwLCAweDAyLCAweDkwLAotMHgwMywgMHg5MSwgMHgwNCwgMHgzMywgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgxNSwgMHhlMCwgMHgwMSwgMHgzMCwKLTB4OTAsIDB4NDIsIDB4ZTksIDB4ZDMsIDB4MDAsIDB4YWIsIDB4NWMsIDB4NzAsIDB4MDIsIDB4OTQsIDB4NjksIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkxLCAweGEyLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweDMzLCAweDAwLCAweDJhLAotMHgwNSwgMHhkOSwgMHgwZiwgMHgxYywgMHg4MCwgMHhjMywgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMSwgMHg5MCwgMHg0MiwKLTB4ZjksIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmMsIDB4MDEsIDB4MjAsCi0weDQ2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDljLCAweDAzLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgyMywgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMSwgMHg0MiwgMHgwOSwgMHgwMCwgMHhkMywKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MjcsIDB4M2EsIDB4MWMsIDB4NDMsIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4MjIsCi0weDExLCAweDQzLCAweDFlLCAweDRhLCAweDIwLCAweDI0LCAweGQzLCAweDY4LCAweDAxLCAweDJiLCAweDJlLCAweGQxLAotMHg4MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgwYywgMHg0MywgMHgyMCwgMHgxYywgMHgxYiwgMHgyMywKLTB4ZGIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4OGIsIDB4MDksIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDQsIDB4MjcsCi0weDM4LCAweDQzLCAweGQxLCAweDZmLCAweDA5LCAweDY4LCAweDA5LCAweDBhLCAweDA3LCAweGQyLCAweGQxLCAweDFkLAotMHg3OSwgMHgzMSwgMHgwOSwgMHg2OCwgMHgwOSwgMHg2OCwgMHgwOSwgMHgwYSwgMHgwMSwgMHhkMywgMHgwOCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4NzksIDB4MDMsIDB4MjksCi0weDAyLCAweGQxLCAweGZmLCAweDIzLCAweDAxLCAweDMzLCAweDE4LCAweDQzLCAweDBiLCAweDQ5LCAweDA5LCAweDZhLAotMHgxMCwgMHgyMiwgMHg0YiwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMiwgMHgxMCwgMHg0MywgMHg4OSwgMHgwNywKLTB4ODksIDB4MGYsIDB4ODksIDB4MDEsIDB4MDgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MGMsCi0weDAwLCAweGQyLCAweDAwLCAweDI0LCAweDBjLCAweDQzLCAweDIwLCAweDFjLCAweGVjLCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4M2EsIDB4NGMsIDB4MjAsIDB4MWMsIDB4MDQsIDB4ZjAsIDB4MDcsIDB4ZmEsIDB4MzksIDB4NDgsCi0weGUzLCAweDIzLCAweDFiLCAweDAxLCAweGM3LCAweDE4LCAweGI5LCAweDc5LCAweDM3LCAweDRlLCAweGM1LCAweDFkLAotMHg3OSwgMHgzNSwgMHgwNiwgMHgyOSwgMHg2MiwgMHhkMiwgMHgwMiwgMHhhMywgMHg1YiwgMHg1YywgMHg1YiwgMHgwMCwKLTB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsIDB4MDMsIDB4MGUsIDB4MWUsIDB4MzcsIDB4NGUsIDB4NTUsIDB4MDEsIDB4MjAsCi0weGI4LCAweDcxLCAweDAwLCAweDIwLCAweGIwLCAweDYwLCAweGZmLCAweGY3LCAweDk1LCAweGZmLCAweDA1LCAweDIzLAotMHg5OCwgMHg0MywgMHgwMCwgMHhmMCwgMHg2ZiwgMHhmOCwgMHgwYywgMHhlMCwgMHhmZiwgMHhmNywgMHg4ZSwgMHhmZiwKLTB4YzAsIDB4MDgsIDB4MDYsIDB4ZDMsIDB4YjAsIDB4NjgsIDB4NDEsIDB4MWMsIDB4YjEsIDB4NjAsIDB4MGEsIDB4MjgsCi0weDAzLCAweGQ5LCAweDA0LCAweDIwLCAweDAwLCAweGUwLCAweDAyLCAweDIwLCAweGI4LCAweDcxLCAweDY0LCAweDIyLAotMHgyMCwgMHgxYywgMHgyYiwgMHhlMCwgMHgwNiwgMHgxYywgMHhjMCwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MjAsIDB4YjgsIDB4NzEsIDB4MjAsIDB4MWMsIDB4MjAsIDB4NGEsCi0weDAwLCAweDIxLCAweDA0LCAweGYwLCAweDk5LCAweGY5LCAweGYwLCAweDZmLCAweDA0LCAweDIzLCAweDAxLCAweDY4LAotMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgyOCwgMHg2OCwgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4MjEsIDB4YjksIDB4NzEsIDB4MjksIDB4NjgsCi0weDA0LCAweDIzLCAweDBhLCAweDY4LCAweDlhLCAweDQzLCAweDBhLCAweDYwLCAweGMwLCAweDZmLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmZiwgMHhmNywgMHg1YSwgMHhmZiwgMHgwOCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MjAsIDB4MWMsIDB4MTAsIDB4NGEsIDB4MDAsIDB4MjEsIDB4MDQsIDB4ZjAsCi0weDc3LCAweGY5LCAweGU1LCAweGU3LCAweGZmLCAweGY3LCAweDRlLCAweGZmLCAweDA0LCAweDIzLCAweDE4LCAweDQzLAotMHgwMCwgMHhmMCwgMHgyOCwgMHhmOCwgMHhkZSwgMHhlNywgMHgwMCwgMHgyMCwgMHgyOSwgMHg2OCwgMHg2MCwgMHgyMywKLTB4MGEsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmEsIDB4ZDUsIDB4ZTcsCi0weDA2LCAweDIwLCAweGI4LCAweDcxLCAweGQyLCAweGU3LCAweDAwLCAweDAwLCAweGE5LCAweDc5LCAweDIxLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5YywgMHgwMywgMHgwMCwgMHg4MCwgMHgzMCwgMHg3NSwgMHgwMCwgMHgwMCwKLTB4MTAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MjAsCi0weDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDcxLCAweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwNCwgMHhmMCwgMHg0ZSwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YTksIDB4NzksIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MzEsIDB4NDgsIDB4MDAsIDB4NjgsCi0weDc5LCAweDA4LCAweDAzLCAweGQzLCAweDEwLCAweDIzLCAweDAxLCAweDFjLCAweDk5LCAweDQzLCAweDAxLCAweGUwLAotMHgxMCwgMHgyMSwgMHgwMSwgMHg0MywgMHgyZCwgMHg0YywgMHhlMiwgMHg2OCwgMHgwMSwgMHgyYSwgMHgwNSwgMHhkMSwKLTB4MjIsIDB4NzksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTksIDB4NDMsCi0weDgxLCAweDQyLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweDAxLCAweDYwLCAweGUwLCAweDY4LAotMHgwMSwgMHgyOCwgMHgyMCwgMHhkMSwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlMCwgMHgxOCwgMHg4MCwgMHg4YiwKLTB4ZjksIDB4MDgsIDB4MDQsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4MDEsIDB4MWMsIDB4OTksIDB4NDMsCi0weDAxLCAweGUwLCAweDAxLCAweDIxLCAweGM5LCAweDAyLCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHgxYSwgMHhmYiwgMHgzOCwgMHgwOSwgMHgwNywgMHhkMywgMHhlMCwgMHg2ZiwgMHg4MCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZTAsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MDAsIDB4ZTAsCi0weGUwLCAweDZmLCAweDgwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDE1LCAweDQ4LAotMHgwMSwgMHg2YSwgMHg3OCwgMHgwOSwgMHgwMywgMHhkMywgMHhmZiwgMHgyMCwgMHgwMSwgMHgzMCwgMHgwOCwgMHg0MywKLTB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDgsIDB4MWMsIDB4MDEsIDB4MzMsIDB4OTgsIDB4NDMsIDB4ODAsIDB4MDgsCi0weDgwLCAweDAwLCAweGJhLCAweDA5LCAweDkyLCAweDA3LCAweDkyLCAweDBmLCAweDEwLCAweDQzLCAweDg4LCAweDQyLAotMHgwMiwgMHhkMCwgMHgwYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwgMHhlMSwgMHg2OCwgMHgwMSwgMHgyOSwKLTB4MDgsIDB4ZDEsIDB4NzksIDB4MGEsIDB4MDYsIDB4ZDMsIDB4ZmYsIDB4MjMsIDB4MDQsIDB4MzMsIDB4MTgsIDB4NDAsCi0weDAzLCAweDI4LCAweDAxLCAweGQxLCAweGZmLCAweGY3LCAweDhlLCAweGZmLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsCi0weGIxLCAweGZlLCAweDgwLCAweDA5LCAweDFiLCAweGQyLCAweDBmLCAweDQ4LCAweGUzLCAweDIzLCAweDFiLCAweDAxLAotMHhjMSwgMHgxOCwgMHg0YSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgxNCwgMHhkMSwgMHgwMSwgMHgyMiwgMHg0YSwgMHg3MSwKLTB4MDAsIDB4MjcsIDB4ODAsIDB4MzAsIDB4MDAsIDB4NjgsIDB4NjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsCi0weDAxLCAweDYwLCAweDA4LCAweDQ4LCAweDA2LCAweGUwLCAweDAyLCAweDIwLCAweDAyLCAweGYwLCAweDhjLCAweGZjLAotMHgwNywgMHgyMCwgMHgwMiwgMHhmMCwgMHg1YiwgMHhmYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgzNiwgMHhmYSwKLTB4ZjUsIDB4ZTcsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHgzNywgMHhmYywgMHhmZiwgMHhmNywgMHg4NSwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHgwOCwgMHg0OCwKLTB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDcsIDB4NDgsIDB4MDAsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDY3LCAweGZiLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweDE3LCAweGZjLCAweGY4LCAweDg4LCAweGZmLCAweGY3LCAweDQyLCAweGZmLAotMHhmZiwgMHhmNywgMHg2MiwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGIwLCAweGI1LCAweGM2LCAweGIwLCAweGM3LCAweDg4LCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHgwMSwgMHhmYywgMHgwMSwgMHgyNCwgMHgxYSwgMHg0YiwgMHg5ZiwgMHg0MiwgMHgwYSwgMHhkOSwgMHgwMCwgMHhhOCwKLTB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsCi0weGQ4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDIwLCAweGUwLCAweDE0LCAweDQ4LCAweGZmLCAweGY3LAotMHhlMSwgMHhmOSwgMHgwNSwgMHgxYywgMHgxMywgMHg0YSwgMHgzOCwgMHgxYywgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywKLTB4ZGQsIDB4ZjksIDB4MTIsIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDgsIDB4ZjksIDB4MDEsIDB4MmYsCi0weDA2LCAweGQxLCAweDBjLCAweGE5LCAweDAwLCAweDIwLCAweDAwLCAweDIyLAotMHgwYSwgMHg2MCwgMHgwMSwgMHgzMCwgMHgxMCwgMHgyOCwgMHhmYiwgMHhkMywgMHgxMCwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4NTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDUsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDA2LCAweGE5LCAweGZmLCAweGY3LCAweDBmLCAweGZiLCAweDIwLCAweDFjLAotMHg0NiwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmZiwgMHgwMSwgMHgwMCwgMHgwMCwKLTB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhiYiwgMHhmYiwgMHhmYywgMHg4OCwgMHg3OCwgMHg3OCwgMHgwMSwgMHgyNSwgMHgxMCwgMHgyOCwgMHgwMSwgMHhkMSwKLTB4MTksIDB4MmMsIDB4MDksIDB4ZDksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDA0LCAweDMzLCAweDI3LCAweGUwLAotMHhiOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MCwgMHhmOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MCwKLTB4MDYsIDB4YWEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIDB4MDAsIDB4MjEsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MjgsCi0weDBkLCAweGRkLCAweDAwLCAweDIwLCAweDQwLCAweGNiLCAweDQwLCAweGMyLCAweDAxLCAweDMwLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwNCwgMHgyOCwgMHhmOCwgMHhkYiwgMHg0OCwgMHgxYywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4NzgsIDB4NzgsIDB4ODgsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MGIsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4N2UsIDB4ZjksCi0weDA3LCAweDFjLCAweDBhLCAweDRhLCAweDIwLCAweDFjLCAweDA0LCAweGE5LCAweGZmLCAweGY3LCAweDdhLCAweGY5LAotMHgwOCwgMHg0OSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg3NSwgMHhmOSwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4YmUsIDB4ZmEsIDB4MjgsIDB4MWMsIDB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweGM1LCAweGFmLCAweDIxLCAweDQwLAotMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwMCwgMHgyNywKLTB4ZTYsIDB4ODgsIDB4YTIsIDB4NjgsIDB4NDcsIDB4NDksIDB4MDgsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDAsCi0weDAwLCAweDJlLCAweDAxLCAweGQwLCAweDAxLCAweDJlLCAweDAxLCAweGQxLCAweDAxLCAweDI3LCAweDAxLCAweGUwLAotMHgwNCwgMHgyZSwgMHgwMCwgMHhkMSwgMHgwMywgMHgyNiwgMHgwMSwgMHgyNSwgMHg0MSwgMHg0OCwgMHgwNSwgMHgyZSwKLTB4NjYsIDB4ZDIsIDB4MDIsIDB4YTMsIDB4OWIsIDB4NWQsIDB4NWIsIDB4MDAsIDB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsCi0weDAzLCAweDA2LCAweDA4LCAweDBjLCAweDEwLCAweDAwLCAweDA1LCAweDgwLCAweDAwLCAweDIzLCAweDAzLCAweGUwLAotMHgwNSwgMHg4MCwgMHgwNSwgMHhlMCwgMHgwMCwgMHgyMywgMHgwMywgMHg4MCwgMHg0MywgMHg4MCwgMHgwNiwgMHhlMCwKLTB4MDAsIDB4MjMsIDB4MDMsIDB4ODAsIDB4NDUsIDB4ODAsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsCi0weDAzLCAweDgwLCAweGNiLCAweDFkLCAweDc5LCAweDMzLCAweDllLCAweDg5LCAweDAxLCAweDIzLCAweDViLCAweDAyLAotMHg5ZSwgMHg0MiwgMHgwMiwgMHhkYiwgMHhkMiwgMHgwNywgMHhkMiwgMHgwZiwgMHgwMCwgMHhlMCwgMHgwMSwgMHgyMiwKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4ODksIDB4ODgsIDB4ZmYsIDB4MjMsIDB4ZTEsIDB4MzMsCi0weDk5LCAweDQzLCAweDAxLCAweDIzLCAweDE5LCAweDQzLCAweDA2LCAweDg4LCAweGZmLCAweDMzLCAweDllLCAweDQyLAotMHgwZCwgMHhkMSwgMHhmZiwgMHgyMCwgMHhlMSwgMHgzMCwgMHgwOCwgMHg0MywgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MjAsIDB4ZTAsIDB4MDEsIDB4MjEsCi0weDg5LCAweDAyLCAweDAxLCAweDQzLCAweDFjLCAweGUwLCAweDAxLCAweDJlLCAweDBhLCAweGQxLCAweDQwLCAweDg4LAotMHgwMSwgMHgyOCwgMHgwNCwgMHhkMSwgMHg2MCwgMHgyMywgMHgxOSwgMHg0MywgMHgwMCwgMHgyYSwgMHgxMywgMHhkMCwKLTB4MGMsIDB4ZTAsIDB4MjAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MGYsIDB4ZTAsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZDEsCi0weDQwLCAweDg4LCAweDAxLCAweDI4LCAweDA4LCAweGQxLCAweGZmLCAweDIzLCAweDgxLCAweDMzLCAweDE5LCAweDQzLAotMHgwMCwgMHgyYSwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOSwgMHg0MywgMHgwMSwgMHhlMCwKLTB4ODAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDksIDB4MjEsCi0weDQ5LCAweDAyLCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDcwLCAweGY5LCAweDAwLCAweDJmLCAweDAyLCAweGQxLAotMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhmZiwgMHhlNywgMHg2OSwgMHg0NiwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsCi0weDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDA0LCAweDMzLAotMHhmZiwgMHhmNywgMHgyMiwgMHhmYSwgMHgyOCwgMHgxYywgMHgwNCwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDg4LCAweDFjLCAweDAwLCAweDgwLCAweGMwLCAweDg4LCAweDUxLCAweDIxLCAweDg5LCAweDAzLCAweDA4LCAweDYyLAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHgxNiwgMHg0ZiwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwKLTB4MDcsIDB4ZDEsIDB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4NDAsIDB4OGEsIDB4ODAsIDB4MjEsCi0weDAxLCAweDQzLCAweDFiLCAweDIwLCAweDA3LCAweGUwLCAweDZkLCAweDIzLCAweDViLCAweDAxLCAweGY4LCAweDE4LAotMHg4MCwgMHg4YiwgMHgwMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMSwgMHg0MywgMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwKLTB4MzMsIDB4ZjksIDB4MDEsIDB4MjAsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4MDgsIDB4ODAsCi0weDQ4LCAweDgwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGY4LCAweDE4LCAweDgwLCAweDhiLCAweDAxLCAweDIzLAotMHgxYiwgMHgwMywgMHg5OCwgMHg0MywgMHg0MSwgMHgyMSwgMHgwOSwgMHgwMiwgMHgwMSwgMHg0MywgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDE3LCAweDRmLCAweGY4LCAweDY4LCAweDAxLCAweDI4LAotMHgwOCwgMHhkMSwgMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg0MCwgMHg4YSwgMHg4MCwgMHgyMywKLTB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MWIsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGY4LCAweDE4LCAweDgwLCAweDhiLCAweDAxLCAweDIzLCAweDViLCAweDAzLCAweDk4LCAweDQzLCAweDAxLCAweDFjLAotMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHgwMSwgMHhmOSwgMHhmZiwgMHgyMCwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwKLTB4ZjksIDB4MTgsIDB4MDEsIDB4MzAsIDB4MDgsIDB4ODAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjgsIDB4MTgsCi0weDgwLCAweDhiLCAweDQxLCAweDIzLCAweDFiLCAweDAyLCAweDk4LCAweDQzLCAweDA5LCAweDIxLCAweDQ5LCAweDAyLAotMHgwMSwgMHg0MywgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhlZSwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA4LCAweDQ5LCAweGNmLCAweDZhLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDY5LCAweGZhLCAweGI4LCAweDA1LAotMHg4MCwgMHgwZCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4YTEsIDB4ZjksIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDQwLCAweGMwLCAweDg4LCAweDlmLCAweDIzLCAweDE4LCAweDQwLCAweDA1LCAweDQ5LAotMHhjOSwgMHg2YSwgMHgxYiwgMHgyMywgMHg1YiwgMHgwMSwgMHgxOSwgMHg0MCwgMHgwOCwgMHg0MywgMHgwMywgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDQwLCAweDAwLCAweDE0LCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDBkLCAweDQ5LCAweDBmLCAweDZhLAotMHgwMSwgMHgyZiwgMHgwMSwgMHhkMSwgMHhmZiwgMHgwMywgMHgwNywgMHhlMCwgMHgwMiwgMHgyZiwgMHgwMSwgMHhkMSwKLTB4M2YsIDB4MDMsIDB4MDMsIDB4ZTAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4ZmYsIDB4MDIsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDM1LCAweGZhLCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg2ZiwgMHhmOSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NDAsIDB4YzIsIDB4ODgsIDB4YTEsIDB4MjAsCi0weDQwLCAweDAzLCAweDAwLCAweDIxLCAweDAxLCAweDIzLCAweDViLCAweDAzLCAweDlhLCAweDQyLCAweDAxLCAweGQxLAotMHgwMiwgMHgyMiwgMHgwNCwgMHhlMCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg5YSwgMHg0MiwgMHgwMiwgMHhkMSwKLTB4MDEsIDB4MjIsIDB4MDIsIDB4NjIsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4NjIsIDB4MDgsIDB4MWMsIDB4NzAsIDB4NDcsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDAyLCAweGYwLCAweDlmLCAweGY4LCAweDY5LCAweDQ2LAotMHgwNCwgMHgxYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgwYSwgMHhmYSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwKLTB4MDksIDB4NGYsIDB4ZjgsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDQwLCAweGY5LCAweGY4LCAweDZkLCAweGMwLCAweDA3LCAweGMwLCAweDBmLCAweDA1LCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4ZTMsIDB4ZjksIDB4MDYsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDFiLCAweGY5LCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweDg3LCAweDY4LAotMHhmZiwgMHhmNywgMHhjNiwgMHhmOSwgMHgyMCwgMHgyZiwgMHgwNywgMHhkMiwgMHg3OCwgMHgwMCwgMHgwYywgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDYsIDB4ZTAsCi0weDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLAotMHgwMiwgMHgyMCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweGMxLCAweDg4LCAweDgyLCAweDY4LAotMHgyMCwgMHgyYSwgMHgwNCwgMHhkMiwgMHgxMCwgMHgxYywgMHgwMiwgMHhmMCwgMHgxNywgMHhmOCwgMHgwMCwgMHgyMCwKLTB4MTAsIDB4ZTAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4OWEsIDB4ZjksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsCi0weDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgwNCwgMHgzMywgMHhmZiwgMHhmNywgMHhjZCwgMHhmOCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzcsIDB4ODgsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDgzLCAweGY5LCAweDEwLCAweDQ4LCAweGZlLCAweGY3LCAweDcyLCAweGZmLAotMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHgwMiwgMHhmMCwgMHhmMiwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNiwgMHhkMCwKLTB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MzYsIDB4ZmYsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsCi0weDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDA3LCAweDQ5LCAweDIwLCAweDFjLAotMHhmZSwgMHhmNywgMHg1ZiwgMHhmZiwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHhhOCwgMHhmOCwKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDI0LCAweDAyLCAweGZmLCAweGZmLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweGIwLCAweGI1LCAweDg0LCAweGIwLAotMHhjNywgMHg4OCwgMHg2OSwgMHg0NiwgMHg4NCwgMHg2OCwgMHhmZiwgMHhmNywgMHg1NywgMHhmOSwgMHgxMCwgMHg0OCwKLTB4ZmUsIDB4ZjcsIDB4NDYsIDB4ZmYsIDB4MGYsIDB4NGEsIDB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4ZmUsIDB4ZjcsCi0weDQzLCAweGZmLCAweDAwLCAweDI4LCAweDA2LCAweGQwLCAweDBkLCAweDRiLCAweDAyLCAweDIwLCAweDM5LCAweDFjLAotMHgyMiwgMHgxYywgMHhmZSwgMHhmNywgMHgzYywgMHhmZiwgMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4MzIsIDB4ZmYsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDdiLCAweGY4LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg1OSwgMHhiMSwgMHgyMSwgMHg0MCwKLTB4NTksIDB4YjAsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsCi0weDQzLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LAotMHhjMiwgMHg4OCwgMHgxOSwgMHg0YiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMCwgMHgyYSwgMHgwMywgMHhkMSwKLTB4MTgsIDB4NmIsIDB4MTAsIDB4MjMsIDB4OTgsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MmEsIDB4MDQsIDB4ZDEsCi0weDE4LCAweDZiLCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDQ4LCAweDYxLCAweDFmLCAweGUwLCAweDAyLCAweDJhLAotMHgxZCwgMHhkMSwgMHhjMiwgMHg2OCwgMHg4NywgMHg2OCwgMHgwMCwgMHgyMCwgMHgzYiwgMHgxYywgMHhjMywgMHg0MCwKLTB4ZGIsIDB4MDcsIDB4ZGIsIDB4MGYsIDB4OWIsIDB4MDIsIDB4MDMsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDIwLCAweDI4LCAweGYzLCAweGRiLCAweDAwLCAweDIwLCAweDEzLCAweDFjLAotMHhjMywgMHg0MCwgMHhkYiwgMHgwNywgMHhkYiwgMHgwZiwgMHg5YiwgMHgwMiwgMHhjNywgMHgxZCwgMHgxOSwgMHgzNywKLTB4M2IsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MjAsIDB4MjgsCi0weGYxLCAweGRiLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHg4MCwgMHhiNCwgMHhjMiwgMHg4OCwgMHg4MSwgMHg2OCwgMHgxMCwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMCwgMHg0MywKLTB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjAsIDB4MGMsIDB4NGIsCi0weGMwLCAweDQ2LCAweDFhLCAweDgwLCAweDBhLCAweDBjLCAweDE3LCAweDAyLAotMHgxMiwgMHgxMiwgMHgzYSwgMHg0MywgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg0MiwgMHg2MCwgMHg1YSwgMHg4MCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4MDIsIDB4MDksIDB4MGEsIDB4MTEsIDB4NDMsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDgxLCAweDYwLCAweDk5LCAweDgwLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MTMsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTMsIDB4MDIsIDB4MTIsIDB4MTIsCi0weDEzLCAweDQzLCAweDRhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDFmLCAweDFjLCAweDEzLCAweDAyLAotMHgxMiwgMHgxMiwgMHgxMywgMHg0MywgMHg4OSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHgwMiwKLTB4MDksIDB4MTIsIDB4MTEsIDB4NDMsIDB4MGMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4NjksIDB4NDYsIDB4MWQsIDB4MWMsCi0weGZmLCAweGY3LCAweGFlLCAweGY4LCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDI4LCAweDA0LCAweDIwLCAweDQzLAotMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhlNSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMxLCAweDg4LCAweDgyLCAweDY4LCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgxMCwgMHgwYywgMHgwMywgMHgwMiwKLTB4MDAsIDB4MTIsIDB4MTgsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4NjEsIDB4MTAsIDB4MDQsCi0weDAwLCAweDBjLCAweDAyLCAweDAyLCAweDAwLCAweDBhLCAweDEwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHg0OCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTYsIDB4NGIsIDB4ZDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsCi0weDBhLCAweDAyLCAweDA5LCAweDEyLCAweDExLCAweDQzLCAweDFhLCAweDY5LCAweDEyLCAweDA0LCAweDEyLCAweDBjLAotMHgxNywgMHgwMiwgMHgxMiwgMHgxMiwgMHgzYSwgMHg0MywgMHg1YiwgMHg2OSwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywKLTB4MWYsIDB4MDIsIDB4MWIsIDB4MTIsIDB4M2IsIDB4NDMsIDB4MWYsIDB4MDQsIDB4M2YsIDB4MGMsIDB4MDUsIDB4MjMsCi0weDAwLCAweDkzLCAweDg0LCAweDg4LCAweDAxLCAweGFiLCAweDFjLCAweDgwLCAweDAwLCAweDI0LCAweDA0LCAweDNiLAotMHg1YywgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkOSwgMHg4MCwgMHgxMCwgMHgwNCwKLTB4MzgsIDB4NDMsIDB4MDIsIDB4OTAsIDB4MDMsIDB4OTQsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDk1LCAweGZmLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYiwgMHg0OSwgMHg4YSwgMHg2YSwKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsCi0weDA0LCAweDNiLCAweDU5LCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGRhLCAweDgwLAotMHgwMiwgMHg5MSwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHhmZSwgMHhmNywgMHg3OSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYiwgMHg0OSwgMHgwYSwgMHg2YSwKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsCi0weDA0LCAweDNiLCAweDU5LCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGRhLCAweDgwLAotMHgwMiwgMHg5MSwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHhmZSwgMHhmNywgMHg1NSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhmZSwgMHhmNywKLTB4ZjQsIDB4ZmQsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzUsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGY3LCAweGZmLCAweDA2LCAweDQ4LAotMHgwMCwgMHg2YiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4MmYsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGZkLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmOCwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZjMsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweDEwLCAweDQ4LCAweGZlLCAweGY3LCAweGM2LCAweGZkLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMSwKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NzEsIDB4MGMsIDB4NDgsIDB4MDIsIDB4NjgsIDB4NTIsIDB4MGMsCi0weDA1LCAweGQyLCAweDAyLCAweDY4LCAweDEyLCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLAotMHgwMywgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhjNywgMHg2MCwgMHgwMiwgMHhlMCwgMHgwNywgMHg0OCwKLTB4YzAsIDB4NDYsIDB4MDcsIDB4NjQsIDB4MDgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGQ1LCAweDk0LCAweDIxLCAweDQwLCAweDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMCwKLTB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4Y2IsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDg4LCAweDFjLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIwLAotMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MiwgMHgxNSwgMHgyMCwgMHhmZiwgMHhmNywgMHhiZiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4ZjAsCi0weGY5LCAweGZmLCAweDAxLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwNywgMHgxYywgMHhmOCwgMHg4OCwgMHgwMiwgMHhmMCwgMHhmZSwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwKLTB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4ODIsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweGJiLCAweGZlLCAweDAxLCAweDIwLAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsCi0weDZkLCAweGZmLCAweDAxLCAweDI3LCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDA5LCAweDQ4LCAweDgxLCAweDg5LAotMHgwOSwgMHgwNCwgMHhjMiwgMHg4OSwgMHgxMSwgMHg0MywgMHgwMiwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwOSwgMHgwNCwKLTB4YzAsIDB4ODgsIDB4MDgsIDB4NDMsIDB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDliLCAweGZlLCAweDM4LCAweDFjLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg2OSwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NjQsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweDVmLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHg1YSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4NTUsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NTAsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDRiLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0NiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NDEsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweDNjLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHgzNywgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHgzMiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDgsIDB4YTksIDB4ZmUsIDB4ZjcsCi0weDEzLCAweGZmLCAweDY5LCAweDQ2LCAweDA4LCAweGE4LCAweDAyLCAweGYwLCAweGE5LCAweGZmLCAweDAyLCAweDIwLAotMHgwOCwgMHhhYiwgMHg1OCwgMHg3MCwgMHg2OSwgMHg0NiwgMHgwOCwgMHhhOCwgMHhmZSwgMHhmNywgMHg0OCwgMHhmZSwKLTB4MDEsIDB4MjAsIDB4MGMsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weDE5LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLAotMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHhmOCwgMHhmZSwgMHhmYSwgMHg4OCwgMHgxMiwgMHg0OSwKLTB4MDEsIDB4MjQsIDB4YzgsIDB4MWQsIDB4ODksIDB4MzAsIDB4MDAsIDB4MmEsIDB4MGYsIDB4ZDAsIDB4MDQsIDB4NzAsCi0weDQ0LCAweDcwLCAweGI4LCAweDY4LCAweDAwLCAweDBjLCAweDgwLCAweDMxLCAweGM4LCAweDgyLCAweGI4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MywgMHhmOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg0OCwgMHg4MywgMHhmOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ODgsIDB4ODMsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjEsCi0weDAxLCAweDcwLCAweDQxLCAweDcwLCAweDA2LCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgxNywgMHhmZSwgMHgyMCwgMHgxYywgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweGUzLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHhkZSwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4ZDksIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZDQsIDB4ZmUsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGNmLCAweGZlLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywKLTB4ZmUsIDB4ZjcsIDB4YWUsIDB4ZmUsIDB4ZjgsIDB4ODgsIDB4MDMsIDB4MjQsIDB4ZTQsIDB4MDQsIDB4MDQsIDB4NDMsCi0weDAzLCAweDIzLCAweGRiLCAweDA0LCAweDljLCAweDQyLCAweDAyLCAweGQzLCAweDBmLCAweDRiLCAweDljLCAweDQyLAotMHgwNiwgMHhkOSwgMHgwZiwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmUsIDB4ZjcsIDB4ZGMsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDcsIDB4MjAsIDB4NDMsIDB4MDAsIDB4NjgsCi0weDAwLCAweDIxLCAweDAwLCAweGFiLCAweDU5LCAweDcwLCAweGZhLCAweDg4LCAweGMwLCAweDQ2LCAweGRhLCAweDgwLAotMHgwMiwgMHg5MCwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHgwNCwgMHgzMywgMHhmZSwgMHhmNywgMHhjYywgMHhmZCwKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGUwLCAweDAwLCAweDE4LCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHg3YiwgMHhmZSwgMHhmOCwgMHg4OCwKLTB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MTgsIDB4NDMsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4MGEsIDB4NGIsCi0weDk4LCAweDQyLCAweDA4LCAweGQ5LCAweDA5LCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhhYiwgMHhmZCwgMHgwMSwgMHgyMCwgMHgwMywgMHhlMCwgMHhiOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDE4LCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg4MCwgMHhiNSwgMHg4NiwgMHhiMCwgMHgwMiwgMHhhOSwgMHhmZSwgMHhmNywgMHg1NywgMHhmZSwgMHgwMSwgMHgyNywKLTB4MDIsIDB4YWIsIDB4NWYsIDB4NzAsIDB4MDAsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MGEsIDB4NDgsIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA0LCAweDkxLCAweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkxLCAweGMxLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MCwgMHg2OSwgMHg0NiwKLTB4MDIsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4ODEsIDB4ZmQsIDB4MzgsIDB4MWMsIDB4MDYsIDB4YjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGMxLCAweDY4LAotMHg4MCwgMHg2OCwgMHhmZSwgMHhmNywgMHg0NywgMHhmYiwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsCi0weDY4LCAweDQ2LCAweDUwLCAweDIxLCAweGZlLCAweGY3LCAweDM2LCAweGZlLCAweDAxLCAweGFiLCAweDVjLCAweDgwLAotMHgwMiwgMHg5NywgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHg2MSwgMHhmZCwgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsCi0weDY4LCAweDQ2LCAweDUxLCAweDIxLCAweGZlLCAweGY3LCAweDI0LCAweGZlLCAweDAxLCAweGFiLCAweDVmLCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHg1MCwgMHhmZCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDAwLCAweDI3LCAweDEyLCAweDQ5LCAweDA5LCAweDY4LCAweDEyLCAweDRhLAotMHgxMiwgMHg2YiwgMHgxMCwgMHgyMywgMHgxYSwgMHg0MCwgMHgwMSwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwMCwgMHhkMCwKLTB4MDEsIDB4MjcsIDB4OGEsIDB4MGMsIDB4MDMsIDB4ZDMsIDB4M2EsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDIsIDB4MjcsCi0weDE3LCAweDQzLCAweGM5LCAweDBjLCAweDAzLCAweGQzLCAweDM5LCAweDA0LCAweDA5LCAweDBjLCAweDA0LCAweDI3LAotMHgwZiwgMHg0MywgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhlYywgMHhmZCwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwKLTB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MjYsIDB4ZmQsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZDcsIDB4ZmQsIDB4MDYsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDBmLCAweGZkLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZGQsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4Y2IsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDgwLCAweGI1LCAweDg1LCAweGIwLCAweDAxLCAweGE5LCAweGZlLCAweGY3LCAweGFiLCAweGZkLCAweDAwLCAweDIwLAotMHgwMSwgMHhhYiwgMHg1OCwgMHg3MCwgMHgwYywgMHg0OSwgMHhjOSwgMHg2OCwgMHgwMSwgMHgyNywgMHgwMSwgMHgyOSwKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTcsIDB4MDEsIDB4ZTAsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTAsCi0weDY4LCAweDQ2LCAweDAxLCAweGYwLCAweDMzLCAweGZkLCAweDAyLCAweGFiLCAweDAwLCAweDk4LCAweGMwLCAweDQ2LAotMHg1OCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgwMSwgMHhhOCwgMHhmZSwgMHhmNywgMHhkMywgMHhmYywgMHgzOCwgMHgxYywKLTB4MDUsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDA0LCAweDQ5LCAweDAwLCAweDIwLCAweDAwLCAweDIyLCAweDBhLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHg2OCwgMHgyOCwgMHhmYSwgMHhkMywgMHg3MCwgMHg0NywgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MjIsIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDMsIDB4NDAsIDB4MWEsIDB4MDEsIDB4MzIsIDB4ODgsIDB4NDIsCi0weGZiLCAweGQyLCAweDEwLCAweDFjLCAweDcwLCAweDQ3LCAweDg4LCAweDQyLCAweDAyLCAweGQzLCAweDQwLCAweDFhLAotMHg4OCwgMHg0MiwgMHhmYywgMHhkMiwgMHg3MCwgMHg0NywgMHg5MCwgMHhiNCwgMHgwMSwgMHgxYywgMHhmZiwgMHgyNywKLTB4MDQsIDB4MjksIDB4MjcsIDB4ZGEsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NGEsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsCi0weGRiLCAweDAwLCAweGQ0LCAweDU4LCAweDYzLCAweDBjLCAweDFhLCAweGQyLCAweDRiLCAweDAwLCAweDU5LCAweDE4LAotMHhjOSwgMHgwMCwgMHg1NywgMHg1OCwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwgMHhkYiwgMHgwMCwgMHhkNywgMHg1MCwKLTB4ODksIDB4MTgsIDB4OWEsIDB4MTgsIDB4NGYsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NjAsIDB4OGIsIDB4NjgsCi0weGMwLCAweDQ2LCAweDkzLCAweDYwLCAweDBiLCAweDY5LCAweGMwLCAweDQ2LCAweDEzLCAweDYxLCAweDRiLCAweDY5LAotMHhjMCwgMHg0NiwgMHg1MywgMHg2MSwgMHhjOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMSwgMHg2MCwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDQsIDB4MjgsIDB4ZDksIDB4ZGIsCi0weDM4LCAweDFjLCAweGY2LCAweGU3LCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweGY3LCAweGI1LCAweGM0LCAweGIwLAotMHgwNCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0NiwgMHg5YSwgMHgxMSwgMHgyMSwgMHgxMSwgMHg0MCwgMHg2ZSwgMHhkMCwKLTB4MDAsIDB4MjcsIDB4NzksIDB4MDAsIDB4YzksIDB4MTksIDB4YzksIDB4MDAsIDB4NTcsIDB4NGEsIDB4NTEsIDB4NTgsCi0weDQ5LCAweDBjLCAweDAzLCAweGQyLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA0LCAweGUwLAotMHg3OSwgMHgxYywgMHgwZiwgMHgwNiwgMHgzZiwgMHgwZSwgMHgwNCwgMHgyZiwgMHhlZiwgMHhkYiwgMHgwMCwgMHgyOCwKLTB4NWIsIDB4ZDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MjEsCi0weDAwLCAweDIwLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDg4LCAweGZhLCAweDA0LCAweGE5LCAweDAwLCAweDIwLAotMHg4MiwgMHgwMCwgMHg4YSwgMHg1OCwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHhhMiwgMHg0MiwgMHgwMywgMHhkMSwKLTB4NzIsIDB4MWMsIDB4MTYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDEwLCAweDI4LCAweGYwLCAweGRiLCAweDAwLCAweDJlLCAweDNkLCAweGQwLCAweDA0LCAweDJjLAotMHgzZSwgMHhkMSwgMHg4MCwgMHgwMCwgMHgwOCwgMHg1OCwgMHg0MCwgMHgwMSwgMHg4MCwgMHgwZCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4OTIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmEsCi0weDAwLCAweDIxLCAweDAxLCAweDkxLCAweDAyLCAweGE4LCAweDA1LCAweDk5LCAweDQ5LCAweDBjLCAweDg5LCAweDA1LAotMHgyOSwgMHhkMCwgMHhjMSwgMHg2OCwgMHgwYSwgMHgwNiwgMHgxMiwgMHgwZSwgMHg0NSwgMHg5YiwgMHg5YSwgMHg0MiwKLTB4MTEsIDB4ZDEsIDB4YzAsIDB4NjgsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDUwLCAweGZhLAotMHgwMSwgMHg5OSwgMHgwMiwgMHg5ZCwgMHg0OCwgMHgxYywgMHgwMSwgMHgwNiwKLTB4MDksIDB4MGUsIDB4MDEsIDB4OTEsIDB4MGUsIDB4ZTAsIDB4NDgsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDkyLCAweDEwLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLAotMHgzZiwgMHhmYSwgMHgwMiwgMHhhOCwgMHgwNSwgMHg5OSwgMHg0OSwgMHgwYywgMHg4OSwgMHgwNSwgMHhkOCwgMHhkMSwKLTB4MDEsIDB4OTksIDB4MDAsIDB4MjksIDB4MGYsIDB4ZDEsIDB4ZmYsIDB4MjAsIDB4M2QsIDB4ZTAsIDB4NDAsIDB4ZTAsCi0weDgwLCAweDAwLCAweDA4LCAweDU4LCAweDQwLCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLCAweDAwLCAweDkyLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHgyOCwgMHhmYSwKLTB4MDIsIDB4OWQsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDQsIDB4NDYsIDB4OWEsIDB4MTAsIDB4NDMsIDB4NzksIDB4MDAsCi0weGM5LCAweDE5LCAweGM5LCAweDAwLCAweDE3LCAweDRhLCAweGMwLCAweDQ2LCAweDUwLCAweDUwLCAweDMwLCAweDFjLAotMHg4ZSwgMHgxOCwgMHg3MCwgMHg2MCwgMHgxMCwgMHgyMCwgMHgwNCwgMHgyYywgMHgwMCwgMHhkMCwgMHgwYywgMHgyMCwKLTB4MDQsIDB4MWMsIDB4YjAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MjAsIDB4MjEsIDB4NDYsIDB4OWEsIDB4MTEsIDB4NDAsCi0weDIwLCAweDI5LCAweDAwLCAweGQwLCAweDI4LCAweDFjLCAweDMwLCAweDYxLCAweDI4LCAweDE5LCAweGZmLCAweDIxLAotMHhmZiwgMHgzMCwgMHgwOCwgMHgzMCwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHgxOSwgMHhmZiwgMHg0MywgMHgwMSwKLTB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NzAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NTAsIDB4MjEsCi0weDQ2LCAweDlhLCAweDExLCAweDQwLCAweDUwLCAweDI5LCAweDAwLCAweGQxLCAweDI4LCAweDFjLCAweGYwLCAweDYwLAotMHgzOCwgMHgxYywgMHg0NywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmZiwgMHgyMCwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4YjQsIDB4MDAsIDB4MjMsCi0weDAwLCAweDIyLCAweDAwLCAweDI5LCAweDA2LCAweGQ5LCAweDg3LCAweDVjLCAweDdiLCAweDQwLCAweDFiLCAweDA2LAotMHgxYiwgMHgwZSwgMHgwMSwgMHgzMiwgMHg4YSwgMHg0MiwgMHhmOCwgMHhkMywgMHhkOCwgMHg0MywgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDQsIDB4MjgsCi0weDA3LCAweGRhLCAweDQxLCAweDAwLCAweDA5LCAweDE4LCAweGM5LCAweDAwLCAweDQ1LCAweDkxLCAweDQxLCAweDRhLAotMHg1MSwgMHg1OCwgMHg0YiwgMHgwYywgMHgwMiwgMHhkMiwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHg3NiwgMHhlMCwKLTB4MDEsIDB4MjMsIDB4NWIsIDB4MDQsIDB4MTksIDB4NDAsIDB4NDMsIDB4MDAsIDB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsCi0weDNhLCAweDRhLCAweDE0LCAweDE4LCAweDAwLCAweDI5LCAweDYxLCAweGQwLCAweDAwLCAweDIxLCAweDAyLCAweDkxLAotMHgyMCwgMHg2OSwgMHhhMSwgMHg2OCwgMHg0NSwgMHgxOCwgMHgzMCwgMHhkMCwgMHhmZiwgMHgyMSwgMHg2OCwgMHgxZSwKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZmUsIDB4NjEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4OTAsCi0weDAxLCAweDk4LCAweDgxLCAweDQyLCAweDAyLCAweGQxLCAweGE2LCAweDY4LCAweGFmLCAweDFiLCAweDA5LCAweGUwLAotMHgwMCwgMHgyNiwgMHhmZiwgMHgyMSwgMHgyOCwgMHgxYywgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhjNywgMHhmZSwKLTB4MDcsIDB4MWMsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4MjcsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDAxLCAweDk4LCAweDMxLCAweDFjLCAweDAzLCAweGFhLCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweDllLCAweGY5LAotMHgwMywgMHhhOCwgMHgzOSwgMHgxYywgMHhmZiwgMHhmNywgMHhhYywgMHhmZiwgMHhjMCwgMHg0MywgMHgwMiwgMHg5OSwKLTB4NDgsIDB4NDAsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDIsIDB4OTEsIDB4ZWQsIDB4MWIsIDB4YTAsIDB4NjgsCi0weGE4LCAweDQyLCAweDAwLCAweGQxLCAweDAwLCAweDI1LCAweDAwLCAweDJkLCAweGNlLCAweGQ4LCAweDAyLCAweDk5LAotMHhjZiwgMHg0MywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHg2MCwgMHg2OCwKLTB4MDMsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4ZjksIDB4MjAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsCi0weDA1LCAweDk4LCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDM5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLAotMHgwNSwgMHg5MCwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwNSwgMHg5MCwgMHgwYywgMHgyMSwKLTB4MDMsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmYsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MDUsIDB4OTksCi0weDk5LCAweDQzLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDAwLCAweDAyLCAweDA4LCAweDQzLCAweDA1LCAweDkwLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHg2MCwgMHg2OCwgMHgwMywgMHhhYSwgMHgwMCwgMHhmMCwgMHhjYSwgMHhmOSwKLTB4MDAsIDB4MjAsIDB4NDUsIDB4OTksIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NTAsIDB4YzEsIDB4NDMsCi0weDYxLCAweDYwLCAweGExLCAweDYwLCAweGUxLCAweDYwLCAweDIxLCAweDYxLCAweDYxLCAweDYxLCAweDQ2LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4YjAsIDB4YjQsIDB4NGMsIDB4NDIsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZGIsCi0weDBjLCAweDFjLCAweDAwLCAweDI3LCAweGZmLCAweDQzLCAweDA0LCAweDI4LCAweDIxLCAweGRhLCAweDEyLCAweDRkLAotMHg0MywgMHgwMCwgMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgwMSwgMHgyYSwgMHgwNSwgMHhkMCwKLTB4MDIsIDB4MmEsIDB4MDksIDB4ZDAsIDB4MDMsIDB4MmEsIDB4MTYsIDB4ZDEsIDB4MDEsIDB4NjksIDB4MGIsIDB4ZTAsCi0weDAwLCAweDI5LCAweDEyLCAweGRiLCAweDAyLCAweDY5LCAweDhhLCAweDQyLCAweDBmLCAweGQzLCAweDA1LCAweGUwLAotMHgwMCwgMHgyOSwgMHgwNywgMHhkYSwgMHhjMSwgMHg2OCwgMHhhMSwgMHg0MiwgMHgwOSwgMHhkMywgMHgwOSwgMHgxYiwKLTB4YzEsIDB4NjAsIDB4YzAsIDB4NjgsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YzEsIDB4NjgsIDB4MDksIDB4MTksCi0weDAyLCAweDY5LCAweDkxLCAweDQyLCAweGY2LCAweGQ5LCAweDM4LCAweDFjLCAweGY2LCAweGU3LCAweDAwLCAweDAwLAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNywgMHgxYywgMHgwZCwgMHgxYywKLTB4MDAsIDB4MjEsIDB4MDIsIDB4OTEsIDB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZDIsIDB4MDAsIDB4MmMsIDB4NDksCi0weDhiLCAweDU4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDAxLCAweDkzLCAweDAwLCAweDIzLCAweGRiLCAweDQzLAotMHgwNCwgMHgyOCwgMHgwMiwgMHhkYSwgMHgwMSwgMHg5OCwgMHg0MCwgMHgwOCwgMHgwMSwgMHhkMiwgMHgxOCwgMHgxYywKLTB4NDYsIDB4ZTAsIDB4NTQsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4YzIsIDB4MTksIDB4MjEsIDB4NjksIDB4OGEsIDB4NDIsCi0weDAwLCAweGQ5LCAweDBmLCAweDFhLCAweDAwLCAweDJmLCAweDNjLCAweGQ5LCAweGEwLCAweDY4LCAweGUxLCAweDY4LAotMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHgwZCwgMHhmZSwgMHg2MSwgMHg2OCwKLTB4NDYsIDB4MTgsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsCi0weGZmLCAweGY3LCAweDBkLCAweGZlLCAweGMyLCAweDE5LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweDhhLCAweDQyLAotMHgxNCwgMHhkOSwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwYiwgMHgxYSwgMHgwMywgMHg5MywKLTB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZTEsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weDAzLCAweDliLCAweGMwLCAweDE4LCAweGUwLCAweDYwLCAweDAzLCAweDliLCAweDVkLCAweDE5LCAweGZmLCAweDFhLAotMHgwMiwgMHg5OCwgMHgxOCwgMHgxOCwgMHgwMiwgMHg5MCwgMHgxMCwgMHhlMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGNkLCAweGY4LCAweGUwLCAweDY4LCAweGMwLCAweDE5LCAweGVkLCAweDE5LCAweGUwLCAweDYwLCAweDAyLCAweDk4LAotMHhjMCwgMHgxOSwgMHgwMiwgMHg5MCwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZiwgMHhjMiwgMHhkOCwgMHgwMiwgMHg5OCwKLTB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsCi0weGYwLCAweGI1LCAweDgzLCAweGIwLCAweDE3LCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDIxLCAweDAxLCAweDkxLAotMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHhkMiwgMHgwMCwgMHgwMiwgMHg5MiwgMHgzMCwgMHg0OSwgMHg4YSwgMHg1OCwKLTB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MDAsIDB4MjQsIDB4ZTQsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MDEsIDB4ZGEsCi0weDUwLCAweDA5LCAweDAxLCAweGQyLCAweDIwLCAweDFjLCAweDUxLCAweGUwLCAweDAyLCAweDlhLCAweDU0LCAweDE4LAotMHhlMCwgMHg2OCwgMHhjMiwgMHgxOSwgMHg2MCwgMHg2OSwgMHg4MiwgMHg0MiwgMHgwMSwgMHhkOSwgMHgyMiwgMHg2OSwKLTB4ODcsIDB4MWEsIDB4MDAsIDB4MmYsIDB4NDUsIDB4ZDksIDB4MjUsIDB4NGUsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsCi0weDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGE3LCAweGZkLCAweDYxLCAweDY4LAotMHg0MCwgMHgxOCwgMHgwMCwgMHg5MCwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmQsIDB4MDIsIDB4OWEsIDB4YjEsIDB4NTgsIDB4MDEsIDB4MjMsCi0weDViLCAweDA0LCAweDE5LCAweDQzLCAweGIxLCAweDUwLCAweGMxLCAweDE5LCAweGZmLCAweDIyLCAweDA5LCAweDMyLAotMHg5MSwgMHg0MiwgMHgxMywgMHhkOSwgMHgxMywgMHgxYSwgMHgwMSwgMHgxYywgMHgwMCwgMHg5OCwgMHgyYSwgMHgxYywKLTB4MWUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZGYsIDB4ZjgsIDB4ZTAsIDB4NjgsIDB4ODAsIDB4MTksIDB4NzUsIDB4MTksCi0weGUwLCAweDYwLCAweDIxLCAweDY5LCAweDg4LCAweDQyLCAweDAwLCAweGQ5LCAweDIwLCAweDYxLCAweGJmLCAweDFiLAotMHgwMSwgMHg5OCwgMHgzMCwgMHgxOCwgMHgwMSwgMHg5MCwgMHgxMiwgMHhlMCwgMHgwMSwgMHgxYywgMHgwMCwgMHg5ZSwKLTB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2IsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weGMwLCAweDE5LCAweGVkLCAweDE5LCAweGUwLCAweDYwLCAweDIxLCAweDY5LCAweDg4LCAweDQyLCAweDAwLCAweGQ5LAotMHgyMCwgMHg2MSwgMHgwMSwgMHg5OCwgMHhjMCwgMHgxOSwgMHgwMSwgMHg5MCwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZiwKLTB4YjksIDB4ZDgsIDB4MDEsIDB4OTgsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweGIwLCAweGI1LCAweGMzLCAweGIwLAotMHgwYywgMHgxYywgMHgwMCwgMHgyNywgMHhmYSwgMHg0MywgMHgwNCwgMHgyOCwgMHgwNiwgMHhkYSwgMHg0MSwgMHgwMCwKLTB4MDksIDB4MTgsIDB4YzksIDB4MDAsIDB4MTQsIDB4NDgsIDB4NDUsIDB4NTgsIDB4NmIsIDB4MGMsIDB4MDQsIDB4ZDIsCi0weDEwLCAweDFjLCAweDQzLCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDYyLCAweDA5LAotMHgxYiwgMHhkMywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwOCwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwYywgMHgyMywKLTB4MDAsIDB4MjEsIDB4MDEsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4ZjgsIDB4MTEsIDB4MmMsIDB4MGQsIDB4ZDAsCi0weDEyLCAweDJjLCAweDBkLCAweGQwLCAweDEzLCAweDJjLCAweDA1LCAweGQwLCAweDE0LCAweDJjLCAweDBhLCAweGQxLAotMHgwMywgMHg5OCwgMHgwMCwgMHgwNCwgMHgwNywgMHgwZSwgMHgwNiwgMHhlMCwgMHgwMywgMHg5OCwgMHgwNywgMHgwNiwKLTB4M2YsIDB4MGUsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4OWYsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4OWYsIDB4MzgsIDB4MWMsCi0weGRiLCAweGU3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweDAzLCAweDQ5LCAweDAwLCAweDIwLAotMHgwMCwgMHgyMiwgMHgwYSwgMHg1NCwgMHgwMSwgMHgzMCwgMHg2MCwgMHgyOCwgMHhmYiwgMHhkMywgMHg3MCwgMHg0NywKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4MDIsIDB4ZjAsIDB4NmYsIDB4ZmEsIDB4NTcsIDB4MjAsCi0weDAyLCAweGYwLCAweGNjLCAweGY5LCAweDAyLCAweGYwLCAweDQwLCAweGY5LCAweDAwLCAweDBhLCAweGZiLCAweGQzLAotMHgwMiwgMHhmMCwgMHg0ZSwgMHhmYSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwKLTB4MDcsIDB4OWQsIDB4MTQsIDB4MWMsIDB4MWYsIDB4MWMsIDB4MzAsIDB4NGEsIDB4ZDIsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDE2LCAweDY4LCAweDllLCAweDQzLCAweDE2LCAweDYwLCAweDMzLCAweDFjLCAweGZmLCAweDIyLCAweDAxLCAweDMyLAotMHgyYSwgMHg0MCwgMHg0MCwgMHgwMiwgMHgwOCwgMHg0MywgMHgwNSwgMHgwYSwgMHgwNiwgMHgxYywgMHgwMCwgMHgwYywKLTB4MDEsIDB4OTAsIDB4MDAsIDB4MmEsIDB4MjAsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NGIsIDB4ZmEsIDB4NTMsIDB4MjAsCi0weDAyLCAweGYwLCAweGE4LCAweGY5LCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDAyLCAweGYwLAotMHhhMywgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHhhMCwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4OWQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4MjMsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmYsIDB4MDIsIDB4ZjAsCi0weDM3LCAweGZhLCAweDU0LCAweDIwLCAweDAyLCAweGYwLCAweDk0LCAweGY5LCAweDAwLCAweDk4LCAweDAyLCAweGYwLAotMHg5MSwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4ZSwgMHhmOSwgMHgzMCwgMHgxYywgMHgxNCwgMHhlMCwKLTB4MDIsIDB4ZjAsIDB4MmEsIDB4ZmEsIDB4NTIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ODcsIDB4ZjksIDB4MDEsIDB4OTgsCi0weDAyLCAweGYwLCAweDg0LCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDgxLCAweGY5LCAweDMwLCAweDFjLAotMHgwMiwgMHhmMCwgMHg3ZSwgMHhmOSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3YiwgMHhmOSwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4NzgsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDcyLCAweGY5LCAweDAwLCAweDJmLCAweDA1LCAweGQ5LCAweDAyLCAweGYwLCAweGU0LCAweGY4LAotMHgyMCwgMHg3MCwgMHgwMSwgMHgzNCwgMHgwMSwgMHgzZiwgMHhmOSwgMHhkMSwgMHgwMiwgMHhmMCwgMHhmMCwgMHhmOSwKLTB4MDQsIDB4NGEsIDB4ZDAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCi0weDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHgxNCwgMHgxYywgMHgxZiwgMHgxYywgMHg0MiwgMHgwMiwgMHgwYSwgMHg0MywKLTB4MTUsIDB4MWMsIDB4MDEsIDB4MjgsIDB4NTQsIDB4ZDAsIDB4MmMsIDB4NDksIDB4YzgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLCAweGM4LCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMiwgMHhmMCwgMHhlNiwgMHhmOSwgMHg1MywgMHgyMCwgMHgwMiwgMHhmMCwKLTB4NDMsIDB4ZjksIDB4MjgsIDB4MGMsIDB4MDYsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4M2YsIDB4ZjksIDB4MjgsIDB4MGEsCi0weDAxLCAweDkwLCAweDAwLCAweDkwLCAweDAyLCAweGYwLCAweDNhLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLAotMHgzNywgMHhmOSwgMHgwMiwgMHhmMCwgMHhiZCwgMHhmOSwgMHhmZiwgMHhmNywgMHg2MSwgMHhmZiwgMHgwMiwgMHhmMCwKLTB4ZDEsIDB4ZjksIDB4ODQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MmUsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDJiLCAweGY5LCAweDAwLCAweDk4LCAweDAyLCAweGYwLCAweDI4LCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLAotMHgyNSwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwNSwgMHhkOSwgMHgyMCwgMHg3OCwgMHgwMSwgMHgzNCwgMHgwMiwgMHhmMCwKLTB4MWYsIDB4ZjksIDB4MDEsIDB4M2YsIDB4ZjksIDB4ZDEsIDB4MDIsIDB4ZjAsIDB4YTMsIDB4ZjksIDB4MDIsIDB4ZjAsCi0weGI5LCAweGY5LCAweDgzLCAweDIwLCAweDAyLCAweGYwLCAweDE2LCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAotMHgxMywgMHhmOSwgMHgwMSwgMHg5OCwgMHgwMiwgMHhmMCwgMHgxMCwgMHhmOSwKLTB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4OTMsIDB4ZjksIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA3LCAweDQ5LCAweGM4LCAweDZmLCAweDQwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLAotMHgwMiwgMHg2MCwgMHhjOCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDAxLCAweGYwLCAweDhmLCAweGY4LCAweDA2LCAweDRmLAotMHhjMCwgMHg0NiwgMHhmOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHhmMiwgMHhmOCwgMHg3OCwgMHg4MCwgMHgwMSwgMHhmMCwKLTB4YjEsIDB4ZjgsIDB4MzgsIDB4NzEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweGYwLCAweDA1LCAweGY5LCAweDAyLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MGIsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MTEsIDB4ZDEsIDB4YzEsIDB4NmYsIDB4MDIsIDB4MjMsCi0weDBhLCAweDY4LCAweDFhLCAweDQzLCAweDBhLCAweDYwLCAweGMxLCAweDZmLCAweDgwLCAweDIzLCAweDBhLCAweDY4LAotMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMSwgMHgxOCwgMHgwOCwgMHg2OCwgMHg4MiwgMHgyMywgMHgwMiwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDRhLCAweDQ5LCAweGNhLCAweDFkLCAweDlkLCAweDMyLAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHhkNywgMHg1MCwgMHgwMSwgMHgzMCwgMHgxNywgMHgyOCwKLTB4ZmEsIDB4ZDMsIDB4NDYsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4YTcsIDB4NTAsIDB4MDEsIDB4MzAsCi0weDIwLCAweDI4LCAweGZhLCAweGQzLCAweDQzLCAweDRhLCAweDAwLCAweDIwLCAweDgzLCAweDAwLCAweGQ3LCAweDUwLAotMHgwMSwgMHgzMCwgMHgyMCwgMHgyOCwgMHhmYSwgMHhkMywgMHhhNywgMHg2MSwgMHg5NywgMHg2MSwgMHg0ZiwgMHg2NSwKLTB4OGYsIDB4NjUsIDB4M2YsIDB4NGQsIDB4YzAsIDB4NDYsIDB4MmYsIDB4NjAsIDB4NmYsIDB4NjAsIDB4YWYsIDB4NjAsCi0weGFmLCAweDYxLCAweGVmLCAweDYwLCAweDJmLCAweDYxLCAweDZmLCAweDYxLCAweDAwLCAweDIwLCAweGMxLCAweDAwLAotMHgwOSwgMHgxOCwgMHg0OSwgMHgwMSwgMHgzNSwgMHg0YiwgMHhjOSwgMHgxOCwgMHg4NiwgMHgwMCwgMHhjYiwgMHgxZCwKLTB4ZjksIDB4MzMsIDB4MzQsIDB4NGMsIDB4MzQsIDB4MTksIDB4ZTMsIDB4NjMsIDB4MTEsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGNiLCAweDE4LCAweDYzLCAweDYzLCAweDBkLCAweDIzLCAweDliLCAweDAxLCAweGNiLCAweDE4LCAweGI0LCAweDE4LAotMHhlMywgMHg2MywgMHgyMywgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg2MSwgMHg2MywgMHgwMSwgMHgzMCwKLTB4MDIsIDB4MjgsIDB4ZTQsIDB4ZGIsIDB4MjksIDB4NDgsIDB4YzEsIDB4MWQsIDB4ZjksIDB4MzEsIDB4MjksIDB4NGMsCi0weGMwLCAweDQ2LCAweGExLCAweDYyLCAweDYxLCAweDZiLCAweDBkLCAweDIzLCAweDliLCAweDAxLCAweGUxLCAweDYyLAotMHhjMSwgMHgxOCwgMHg5MSwgMHg2MiwgMHg1MSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhkMSwgMHg2MiwgMHgwOCwgMHgyMSwKLTB4ZTEsIDB4NjQsIDB4MjUsIDB4NDksIDB4YzAsIDB4NDYsIDB4MjEsIDB4NjUsIDB4MjQsIDB4NDksIDB4MGIsIDB4NjksCi0weGMwLCAweDQ2LCAweDYzLCAweDY1LCAweGMzLCAweDFkLCAweDRkLCAweDMzLCAweGUzLCAweDY1LCAweDI1LCAweDY2LAotMHg4YiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg2MywgMHg2NiwgMHhjYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMywgMHg2NiwKLTB4MWUsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZTMsIDB4NjYsIDB4MjcsIDB4NjcsIDB4MGIsIDB4MjMsIDB4ZGIsIDB4MDEsCi0weGMzLCAweDE4LCAweGEzLCAweDY3LCAweDY3LCAweDY3LCAweDAxLCAweDI2LCAweGUzLCAweDFkLCAweDY5LCAweDMzLAotMHg2NiwgMHg2MSwgMHhlNywgMHg2MSwgMHgxZiwgMHg3MywgMHgwMiwgMHgyMywgMHhkMywgMHg2NCwgMHgxNywgMHg0YiwKLTB4YzAsIDB4NDYsIDB4MTMsIDB4NjUsIDB4Y2IsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTMsIDB4NjUsIDB4YzMsIDB4MWQsCi0weDUxLCAweDMzLCAweGQzLCAweDY1LCAweDJiLCAweDFkLCAweDEzLCAweDY2LCAweDRiLCAweDY5LCAweGMwLCAweDQ2LAotMHg1MywgMHg2NiwgMHg4OSwgMHg2OSwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2NiwgMHgwZiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4ZDEsIDB4NjYsIDB4MTYsIDB4NjcsIDB4MGYsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4OTAsIDB4NjcsCi0weDU2LCAweDY3LCAweGQ3LCAweDYxLCAweGQwLCAweDFkLCAweDY5LCAweDMwLCAweDU2LCAweDYxLCAweDA3LCAweDczLAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MzAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDAwLCAweDU1LCAweGZmLCAweGZmLCAweDM4LCAweDAxLCAweDE4LCAweDAwLAotMHgxMCwgMHg1NSwgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgxZSwgMHg0YSwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZDcsIDB4MTgsIDB4ZjksIDB4NzMsIDB4MTksIDB4MjMsCi0weGRiLCAweDAxLCAweGQwLCAweDE4LCAweDAxLCAweDI0LCAweGNkLCAweDIzLCAweDFiLCAweDAxLCAweGQzLCAweDE4LAotMHhjMSwgMHg2MSwgMHgxYywgMHg3MCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHg5OSwgMHg2MCwKLTB4YjksIDB4NzMsIDB4NTksIDB4NjEsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MTksIDB4NjAsCi0weDEzLCAweDRiLCAweDUxLCAweDI3LCAweGJmLCAweDAzLCAweDAzLCAweDYzLCAweDNiLCAweDYwLCAweDg0LCAweDY5LAotMHhlNCwgMHgxOCwgMHg0NCwgMHg2MywgMHgwNCwgMHgzYywgMHg3YywgMHg2MCwgMHgwMSwgMHgyNCwgMHhlNCwgMHgwMiwKLTB4ODQsIDB4NjMsIDB4MGUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4YmMsIDB4NjAsIDB4MDQsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDQ0LCAweDYyLCAweDg0LCAweDY5LCAweGU0LCAweDE4LCAweDBiLCAweDRiLCAweGUzLCAweDE4LCAweGZiLCAweDYwLAotMHgwMywgMHg2YiwgMHhjMCwgMHg0NiwgMHg4MywgMHg2MiwgMHg0MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMywgMHg2MiwKLTB4YzEsIDB4NjMsIDB4NTEsIDB4NjQsIDB4OTEsIDB4NjQsIDB4ZDEsIDB4NjUsIDB4ZDEsIDB4NjYsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHhmYywgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHhmNywgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MWIsIDB4NDksIDB4YzksIDB4MjMsIDB4MWIsIDB4MDEsIDB4YzgsIDB4MTgsIDB4MDIsIDB4NzEsIDB4MDEsIDB4MjAsCi0weGJiLCAweDIzLCAweDFiLCAweDAxLCAweGNiLCAweDE4LCAweDU4LCAweDczLCAweDE3LCAweDQ4LCAweDAzLCAweDFjLAotMHgwMCwgMHgyNywgMHhkYywgMHgxZCwgMHhjMSwgMHgzNCwgMHgxYywgMHg2NSwgMHgyMywgMHgxYywgMHgwMSwgMHgzNywKLTB4M2YsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MWEsIDB4NjUsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4Y2YsIDB4MTgsCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGNiLCAweDE4LCAweDNhLCAweDYxLCAweDk4LCAweDYxLCAweDQwLCAweDIwLAotMHhmOCwgMHg2MCwgMHhkYSwgMHg2MSwgMHgxYSwgMHg2MiwgMHhjYSwgMHg2NCwgMHgwYSwgMHg2NiwgMHgwYywgMHg0OCwKLTB4YzAsIDB4NDYsIDB4YzIsIDB4NjAsIDB4MGIsIDB4NDgsIDB4MDAsIDB4NmIsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsCi0weGY4LCAweDYzLCAweDBhLCAweDQ4LCAweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDE5LCAweDgwLCAweDQxLCAweDY4LAotMHhjMCwgMHg0NiwgMHg1OSwgMHg4MCwgMHg4MCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5OCwgMHg4MCwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YmMsIDB4MjAsIDB4NDAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLCAweDQwLCAweDAwLCAweDE0LCAweDQwLAotMHgwMCwgMHgyMCwgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MywgMHhjYiwgMHgxZCwgMHhmZiwgMHgzMywKLTB4M2EsIDB4MzMsIDB4ODgsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MTgsIDB4NzAsIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDEwLCAweDY1LCAweDUwLCAweDY2LCAweDkwLCAweDY2LCAweDA4LCAweDcwLCAweDU4LCAweDcwLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHgwOCwgMHg3MywgMHg3MCwgMHg0NywgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4MmYsIDB4NDksIDB4MmYsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDExLCAweDYxLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweGM4LCAweDE4LCAweDUwLCAweDYxLCAweDJkLCAweDQ4LAotMHhjMCwgMHg0NiwgMHgxMCwgMHg2MiwgMHhkYiwgMHgwMCwgMHhjMywgMHgxOCwgMHg1MywgMHg2MiwgMHgwMCwgMHgyMywKLTB4MTMsIDB4NjMsIDB4NTMsIDB4NjMsIDB4MjksIDB4NGEsIDB4MmEsIDB4NGYsIDB4ZDQsIDB4MWQsIDB4ZmYsIDB4MzQsCi0weGZhLCAweDM0LCAweDE0LCAweGM3LCAweDA4LCAweDNmLCAweDNiLCAweDYxLCAweDFjLCAweDFmLCAweDdjLCAweDYxLAotMHgyNiwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHhiOCwgMHg2MSwgMHg3OSwgMHg2MSwgMHhmOCwgMHg2MiwKLTB4M2IsIDB4NjMsIDB4N2IsIDB4NjQsIDB4YmEsIDB4NjQsIDB4ZmEsIDB4NjUsIDB4MjIsIDB4NGYsIDB4ZmUsIDB4MWQsCi0weGY5LCAweDM2LCAweDIyLCAweDRkLCAweGVjLCAweDFkLCAweDc5LCAweDM0LCAweDI2LCAweDYyLCAweDUxLCAweDI2LAotMHhiNiwgMHgwMywgMHgzNywgMHg2MSwgMHgyNCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3NCwgMHg2MSwgMHgyZiwgMHg2NywKLTB4MWQsIDB4NGQsIDB4MDksIDB4MjcsIDB4N2YsIDB4MDQsIDB4ZWMsIDB4MWQsIDB4NzUsIDB4MzQsIDB4N2MsIDB4NjAsCi0weDNkLCAweDYwLCAweDFiLCAweDRjLCAweGMwLCAweDQ2LCAweDNjLCAweDYxLCAweGU2LCAweDFkLCAweDc1LCAweDM2LAotMHg3ZSwgMHg2MSwgMHgxOSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHg3YywgMHg2MCwgMHgzZCwgMHg2MCwgMHgwZiwgMHgxYywKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4MjQsIDB4MDEsIDB4MzQsIDB4MWQsIDB4MWMsIDB4OGIsIDB4MDAsIDB4ZmQsIDB4NTAsCi0weDAxLCAweDMxLCAweGExLCAweDQyLCAweGZhLCAweGQzLCAweDAxLCAweDFjLCAweDAwLCAweDIwLCAweDAxLCAweDI3LAotMHhmZiwgMHgwMiwgMHg4MywgMHgwMCwgMHhjZCwgMHg1MCwgMHgwMSwgMHgzMCwgMHhiOCwgMHg0MiwgMHhmYSwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NTUsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODAsIDB4MjgsIDB4ZmEsIDB4ZDMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDI0LCAweGEzLCAweDIwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgyNCwgMHg4MywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwKLTB4ODAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE4LCAweDIwLCAweDQwLCAweGE0LCAweGE4LCAweDIwLCAweDQwLAotMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhiOCwgMHhiNSwgMHgyYywgMHg0OCwgMHhmZCwgMHhmNywgMHhiYSwgMHhmZCwKLTB4MDEsIDB4MjAsIDB4MmIsIDB4NDksIDB4MGEsIDB4NjgsIDB4NTIsIDB4MGMsIDB4MDYsIDB4ZDIsIDB4MGEsIDB4NjgsCi0weDEyLCAweDBjLCAweDAyLCAweGQxLCAweDBhLCAweDY4LCAweDkyLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIwLAotMHgwNCwgMHgwNiwgMHgyNCwgMHgwZSwgMHgyNSwgMHg0YSwgMHhkNywgMHgxZCwgMHgwZCwgMHgzNywgMHgwMCwgMHgyMywKLTB4MDAsIDB4MjAsIDB4OWQsIDB4MDAsIDB4NzgsIDB4NTEsIDB4MDEsIDB4MzMsIDB4MDQsIDB4MmIsIDB4ZmEsIDB4ZDMsCi0weDAxLCAweDI3LCAweDNmLCAweDA1LCAweDUwLCAweDYxLCAweGY4LCAweDYwLCAweGQwLCAweDYxLCAweGY4LCAweDYxLAotMHgwMCwgMHgyMywgMHhkYiwgMHg0MywgMHg5MywgMHg2MSwgMHgzYiwgMHg2MSwgMHgxMywgMHg2MiwgMHgzYiwgMHg2MiwKLTB4MDAsIDB4MjcsIDB4MWIsIDB4NGIsIDB4OGQsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4OGQsIDB4NjksCi0weGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDAwLCAweDJjLCAweDBiLCAweGQwLCAweGRkLCAweDZiLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5NSwgMHg5ZCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHg1ZCwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTUsIDB4MWQsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MzcsIDB4NDAsIDB4MmYsCi0weGU4LCAweGQzLCAweDAwLCAweDI3LCAweDZjLCAweDQ2LCAweDAxLCAweDIzLCAweDViLCAweDA3LCAweDFjLCAweDQzLAotMHgwMSwgMHhlMCwgMHgyMCwgMHg2MCwgMHgwMSwgMHgzNywgMHgwZCwgMHg2OCwgMHgyYiwgMHgwOSwgMHgwMiwgMHhkMiwKLTB4ODAsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MmYsIDB4MDMsIDB4ZDMsIDB4MDgsIDB4NDksCi0weDRiLCAweDZlLCAweDAxLCAweDMzLCAweDRiLCAweDY2LCAweGQwLCAweDYyLCAweGI4LCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDkwLCAweGI0LCAweDAwLCAweDIxLCAweDBlLCAweDRmLCAweDBmLCAweDRhLCAweDAwLCAweDIwLCAweDRjLCAweDAxLAotMHg2NCwgMHgxYSwgMHhhNCwgMHgwMCwgMHhhMywgMHgxOCwgMHg1OCwgMHg2MCwgMHg5OCwgMHg2MCwgMHgxOCwgMHg2NCwKLTB4NTgsIDB4NjQsIDB4MTAsIDB4NTMsIDB4NTgsIDB4ODAsIDB4Y2MsIDB4MDAsIDB4ZTQsIDB4MTksIDB4OTgsIDB4NjcsCi0weGRjLCAweDYyLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGVlLCAweGQzLCAweDA2LCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHg0OCwgMHg2MCwgMHg4OCwgMHg2MCwgMHhjOCwgMHg2MCwgMHgwOCwgMHg2MSwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NjYsIDB4MjEsIDB4NDAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDY0LCAweDIxLCAweDA1LCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDYzLAotMHgwMCwgMHgyMSwgMHhjOSwgMHg0MywgMHg0MSwgMHg2MywgMHg4MSwgMHg2MywgMHgwMCwgMHgyMSwgMHhjMSwgMHg2MywKLTB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjAsCi0weDQwLCAweDAyLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDNjLCAweDIwLCAweDQ4LCAweDYwLAotMHg4OCwgMHg2MCwgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwNywgMHg0YSwKLTB4ODcsIDB4MDAsIDB4Y2IsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NTEsIDB4MDEsIDB4MzAsIDB4MTAsIDB4MjgsCi0weGY4LCAweGQzLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAotMHhmNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHg1ZCwgMHg0YywgMHhmZiwgMHhmZiwgMHgxMiwgMHg0OSwgMHgxMywgMHg0OCwKLTB4NjcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2EsIDB4MTgsIDB4MDYsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MTEsIDB4NGIsCi0weGNhLCAweDE4LCAweGMxLCAweDYwLCAweDgyLCAweDYwLCAweDAxLCAweDYxLCAweDBmLCAweDQ5LCAweDEwLCAweDQ4LAotMHhhNywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYSwgMHgxOCwgMHgwNiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgwZSwgMHg0YiwKLTB4Y2EsIDB4MTgsIDB4YzEsIDB4NjAsIDB4ODIsIDB4NjAsIDB4MDEsIDB4NjEsIDB4MGMsIDB4NDgsIDB4MGQsIDB4NDksCi0weDY3LCAweDIzLCAweDliLCAweDAxLCAweGMyLCAweDE4LCAweDA1LCAweGMxLCAweDA4LCAweDM5LCAweDA1LCAweDRiLAotMHhjMiwgMHgxOCwgMHhjOCwgMHg2MCwgMHg4YSwgMHg2MCwgMHgwOCwgMHg2MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YWMsIDB4MWUsIDB4MjEsIDB4NDAsIDB4NDgsIDB4MmUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MWYsIDB4MDAsIDB4MDAsCi0weGFjLCAweGVlLCAweDIwLCAweDQwLCAweDM0LCAweDJlLCAweDAwLCAweDgwLCAweGZjLCAweDJmLCAweDAwLCAweDAwLAotMHhhYywgMHgzZSwgMHgyMSwgMHg0MCwgMHg1YywgMHgyZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4NDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4MGEsIDB4MDEsIDB4MTIsIDB4MTksCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGQyLCAweDE4LCAweGQwLCAweDYyLCAweDEwLCAweDYzLCAweDUwLCAweDYzLAotMHg5MCwgMHg2MywgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmMywgMHhkMywgMHgzYSwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjMsIDB4NDgsIDB4NjMsIDB4ODgsIDB4NjMsIDB4MjAsIDB4NjAsIDB4MDEsIDB4MjEsIDB4ZTMsIDB4MWQsCi0weDU5LCAweDMzLCAweDYwLCAweDYwLCAweDE5LCAweDcxLCAweDE4LCAweDcyLCAweDk4LCAweDcxLCAweDk4LCAweDcyLAotMHg1OSwgMHg3MSwgMHg1OCwgMHg3MiwgMHhkOCwgMHg3MSwgMHhkOCwgMHg3MiwgMHhlMiwgMHgxZCwgMHg0OSwgMHgzMiwKLTB4MTEsIDB4NzMsIDB4MTksIDB4NzAsIDB4OTAsIDB4NzMsIDB4OTgsIDB4NzAsIDB4NTEsIDB4NzMsIDB4NTksIDB4NzAsCi0weGQwLCAweDczLCAweGQ4LCAweDcwLCAweDExLCAweDcxLCAweDExLCAweDcyLCAweDkwLCAweDcxLCAweDkwLCAweDcyLAotMHg1MCwgMHg3MSwgMHg1MCwgMHg3MiwgMHhkMCwgMHg3MSwgMHhkMCwgMHg3MiwgMHgxOCwgMHg3MywgMHgwMiwgMHgyMiwKLTB4ZTcsIDB4MWQsIDB4NjksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YmEsIDB4NzAsIDB4NTgsIDB4NzMsCi0weDc4LCAweDcwLCAweGQ4LCAweDczLCAweGY4LCAweDcwLCAweDM5LCAweDcxLCAweDNhLCAweDcyLCAweGI5LCAweDcxLAotMHhiOSwgMHg3MiwgMHg3OCwgMHg3MSwgMHg3YSwgMHg3MiwgMHhmOSwgMHg3MSwgMHhmOSwgMHg3MiwgMHgzOSwgMHg3MywKLTB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OTksIDB4NzAsIDB4NzgsIDB4NzMsCi0weDVhLCAweDcwLCAweGY5LCAweDczLCAweGQ5LCAweDcwLCAweDFhLCAweDcxLCAweDFhLCAweDcyLCAweDk5LCAweDcxLAotMHg5YSwgMHg3MiwgMHg1OCwgMHg3MSwgMHg1YSwgMHg3MiwgMHhkOSwgMHg3MSwgMHhkYSwgMHg3MiwgMHgxOSwgMHg3MywKLTB4ZTcsIDB4MWQsIDB4ODksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YjksIDB4NzAsIDB4NTgsIDB4NzMsCi0weDdhLCAweDcwLCAweGQ5LCAweDczLCAweGY5LCAweDcwLCAweDM5LCAweDcxLCAweDNhLCAweDcyLCAweGI5LCAweDcxLAotMHhiOSwgMHg3MiwgMHg3OCwgMHg3MSwgMHg3YSwgMHg3MiwgMHhmOSwgMHg3MSwgMHhmOSwgMHg3MiwgMHgzYSwgMHg3MywKLTB4ZTMsIDB4MWQsIDB4OTksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OWEsIDB4NzAsIDB4NzgsIDB4NzMsCi0weDVhLCAweDcwLCAweGY5LCAweDczLCAweGRhLCAweDcwLCAweDE5LCAweDcxLCAweDFhLCAweDcyLCAweDk5LCAweDcxLAotMHg5OSwgMHg3MiwgMHg1OCwgMHg3MSwgMHg1YSwgMHg3MiwgMHhkOSwgMHg3MSwgMHhkOSwgMHg3MiwgMHgyMCwgMHg2MSwKLTB4ZTAsIDB4NjAsIDB4NjAsIDB4NjEsIDB4YTAsIDB4NjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGEwLCAweDFjLCAweDAwLCAweDgwLCAweGU4LCAweDE5LCAweDAwLCAweDgwLCAweDgxLCAweDIwLCAweDAwLCAweDAyLAotMHgwMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHg3MCwgMHg0NywgMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwKLTB4MDksIDB4NDksIDB4MGEsIDB4NGIsIDB4YzgsIDB4MTgsIDB4MDQsIDB4M2IsIDB4YzksIDB4MTgsIDB4MDgsIDB4NjAsCi0weDAwLCAweDIxLCAweGMyLCAweDFkLCAweDI5LCAweDMyLCAweGMyLCAweDYxLCAweDEwLCAweDFjLCAweDAxLCAweDMxLAotMHgwOCwgMHgyOSwgMHhmOCwgMHhkMywgMHhjMSwgMHgxZiwgMHgyOSwgMHgzOSwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODQsIDB4MDksIDB4MDAsIDB4MDAsCi0weDA2LCAweDQ4LCAweDA3LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDQ4LCAweDgwLCAweDAwLCAweDIwLAotMHg4OCwgMHg4MCwgMHhjOCwgMHg4MCwgMHg4OCwgMHg2MCwgMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwKLTB4ODgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweDIxLCAweDA2LCAweDQ4LCAweGMyLCAweDFkLCAweDE5LCAweDMyLAotMHhjMSwgMHg2MCwgMHgwMSwgMHg2MSwgMHhjMSwgMHg2MSwgMHgwMSwgMHg2MiwgMHgxMSwgMHg3MSwgMHhmZiwgMHgzMCwKLTB4MDEsIDB4MzAsIDB4NDEsIDB4NjIsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDA5LCAweDQ4LCAweDBhLCAweDRiLCAweGMwLCAweDQ2LCAweDE4LCAweDYwLCAweDAwLCAweDIxLCAweGMyLCAweDFkLAotMHg0ZCwgMHgzMiwgMHhjMiwgMHg2MCwgMHgxMCwgMHgxYywgMHgwMSwgMHgzMSwgMHgxNCwgMHgyOSwgMHhmOCwgMHhkMywKLTB4YzEsIDB4MWYsIDB4NGQsIDB4MzksIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjAsIDB4NTgsIDB4NjAsIDB4OTgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQ4LCAweDA3LCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwYiwgMHg0OSwgMHgwYiwgMHg0OCwgMHhmZCwgMHhmNywgMHhlYSwgMHhmYiwgMHgwYiwgMHg0OCwKLTB4MDAsIDB4NmEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYyLCAweDA5LCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDA0LCAweGQxLCAweGMwLCAweDZmLAotMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NzUsIDB4OTgsIDB4MjEsIDB4NDAsCi0weGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwZiwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgwNCwgMHhkMSwgMHhjMCwgMHg2ZiwKLTB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MGIsIDB4NGIsIDB4MGMsIDB4NDgsCi0weDBjLCAweDRhLCAweDAwLCAweDIxLCAweGZkLCAweGY3LCAweGJmLCAweGZiLCAweDBiLCAweDQ4LCAweDQxLCAweDhkLAotMHgwMSwgMHgzMSwgMHg0MSwgMHg4NSwgMHgwMCwgMHgyMSwgMHhjMSwgMHg4NSwgMHgwOSwgMHg0OCwgMHgwMCwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDU5LCAweGJkLCAweDIxLCAweDQwLAotMHg3NSwgMHg5OCwgMHgyMSwgMHg0MCwgMHhiOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MWIsIDB4NGMsCi0weDEwLCAweDI2LCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDA4LCAweGQxLCAweDYwLCAweDg4LCAweDAwLCAweDI4LAotMHgwNSwgMHhkMSwgMHgyMCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgxOSwgMHgyMCwgMHhhMCwgMHg2NywKLTB4MDAsIDB4ZTAsIDB4YTYsIDB4NjcsIDB4MDAsIDB4MjAsIDB4MDcsIDB4MjMsIDB4NWIsIDB4MDIsIDB4ZTUsIDB4MTgsCi0weGMxLCAweDQzLCAweGU4LCAweDYxLCAweDY5LCAweDYyLCAweDU5LCAweDA4LCAweGExLCAweDI3LCAweDdmLCAweDAzLAotMHg3OSwgMHg2MCwgMHgwZiwgMHgyMSwgMHg3OSwgMHg2MCwgMHhlMSwgMHgxZCwgMHhiOSwgMHgzMSwgMHgwOCwgMHg3MSwKLTB4MDEsIDB4MjAsIDB4YjgsIDB4NjAsIDB4NDAsIDB4MDIsIDB4YjgsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4NGMsIDB4ZmEsCi0weDAwLCAweGYwLCAweGYwLCAweGZhLCAweDA0LCAweDIwLCAweGI4LCAweDYwLCAweDA3LCAweDIwLCAweDc4LCAweDYxLAotMHg3ZSwgMHg2MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlMCwgMHgxOCwgMHhjMCwgMHg4YiwgMHgwNCwgMHgyMywKLTB4MTgsIDB4NDAsIDB4ZTgsIDB4NjIsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDAyLCAweDFjLCAweDAwLCAweDIwLCAweGZmLCAweDIzLAotMHgwMSwgMHgzMywgMHg5YSwgMHg0MiwgMHgwOCwgMHhkMCwgMHgwMSwgMHgyOSwgMHgwMCwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDFiLCAweDRhLCAweGQ3LCAweDY4LCAweDFhLCAweDRiLCAweDE5LCAweDc5LCAweDFjLCAweDFjLCAweDM3LCAweDIzLAotMHg5YiwgMHgwMSwgMHhlMywgMHgxOCwgMHgwMSwgMHgyZiwgMHgwZCwgMHhkMSwgMHg1NywgMHg4OCwgMHgwMCwgMHgyZiwKLTB4MGEsIDB4ZDEsIDB4MDAsIDB4MjksIDB4MGEsIDB4ZDEsIDB4NTksIDB4OGIsIDB4MGEsIDB4MDksIDB4MDAsIDB4ZDMsCi0weDAyLCAweDIwLCAweDQ5LCAweDA5LCAweGU4LCAweGQzLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweGU1LCAweGU3LAotMHgwMCwgMHgyOSwgMHgwMywgMHhkMCwgMHg5OCwgMHg4YSwgMHg4MCwgMHgwNywgMHg4MCwgMHgwZiwgMHhkZiwgMHhlNywKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4OGEsIDB4ODgsIDB4ZmYsIDB4MjcsIDB4MDEsIDB4MzcsCi0weDE3LCAweDQwLCAweDBhLCAweDQ5LCAweGM5LCAweDg4LCAweDAzLCAweGQwLCAweDRiLCAweDBhLCAweDAxLCAweGQzLAotMHgwMywgMHgyMCwgMHhkMSwgMHhlNywgMHgxMywgMHgwYSwgMHgwMywgMHhkMywgMHgwYiwgMHgwYSwgMHgwMSwgMHhkMywKLTB4MDIsIDB4MjAsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4MDksIDB4YzksIDB4ZDMsIDB4YzksIDB4MDksIDB4YzcsIDB4ZDMsCi0weDAxLCAweDIwLCAweGM1LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDA4LCAweDFjLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHhjMSwgMHhiMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNywgMHg1MiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4NTIsIDB4NDgsIDB4NDIsIDB4NjksIDB4NDAsIDB4MGQsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsCi0weDQ4LCAweDYwLCAweDUwLCAweDQ4LCAweGMwLCAweDZhLCAweDUwLCAweDRiLCAweDE4LCAweDQzLCAweDAwLCAweDIxLAotMHgwMywgMHgwMywgMHgxYiwgMHgwYiwgMHg0ZSwgMHg0YywgMHgyNywgMHg2ZiwgMHgzZCwgMHgwMywgMHgyZCwgMHgwYiwKLTB4ZTcsIDB4MWQsIDB4NzksIDB4MzcsIDB4YWIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsCi0weDFiLCAweDZhLCAweGMwLCAweDQ2LCAweDQwLCAweDkzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjYywgMHgwMCwgMHg2ZSwgMHg0NiwgMHgzMywgMHg1MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDYsIDB4MWQsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmMsIDB4NDQsIDB4NjMsIDB4NjAsIDB4MDgsIDB4MzAsCi0weDAxLCAweDMxLCAweDQwLCAweDliLCAweDgzLCAweDQyLCAweDAwLCAweGQ4LCAweDNmLCAweDQ4LCAweDAzLCAweDAzLAotMHgxYiwgMHgwYiwgMHhhYiwgMHg0MiwgMHhlNywgMHhkMSwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyMywgMHgxYiwgMHgwMywKLTB4MTMsIDB4NDAsIDB4M2MsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4NjMsIDB4NmEsIDB4MDEsIDB4MzMsIDB4NjMsIDB4NjIsCi0weDA5LCAweGUwLCAweDEzLCAweDBiLCAweDAzLCAweGQzLCAweDIzLCAweDZhLAotMHgwMSwgMHgzMywgMHgyMywgMHg2MiwgMHgwMywgMHhlMCwgMHgzNywgMHg0YiwgMHg1YywgMHg2ZCwgMHgwMSwgMHgzNCwKLTB4NWMsIDB4NjUsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDAsIDB4MDMsIDB4MWMsIDB4ZGMsIDB4MDAsIDB4MjMsIDB4MWMsCi0weDZiLCAweDQ0LCAweDVjLCAweDY4LCAweDAxLCAweDMwLCAweDIzLCAweDBkLCAweDAxLCAweGQyLCAweDg4LCAweDQyLAotMHhmNSwgMHhkMSwgMHgzMCwgMHg0YywgMHgyNSwgMHg2OCwgMHg2YiwgMHgwYywgMHgwNSwgMHhkMiwgMHgyMywgMHg2OCwKLTB4MWIsIDB4MGMsIDB4MDgsIDB4ZDEsIDB4MjQsIDB4NjgsIDB4YTMsIDB4MGEsIDB4MDUsIDB4ZDMsIDB4MjAsIDB4MjQsCi0weDJiLCAweDRiLCAweGMwLCAweDQ2LCAweDVjLCAweDYyLCAweDAwLCAweDI0LCAweDVjLCAweDYyLCAweDI1LCAweDRiLAotMHgyMywgMHg0YywgMHg1MSwgMHgyNiwgMHhiNiwgMHgwMywgMHgyMywgMHg2NywgMHgzMywgMHg2MSwgMHgzZCwgMHg2YSwKLTB4YzAsIDB4NDYsIDB4NzUsIDB4NjEsIDB4MDIsIDB4MjUsIDB4YTEsIDB4MjYsIDB4NzYsIDB4MDMsIDB4NzUsIDB4NjAsCi0weDAxLCAweDI1LCAweGI1LCAweDYwLCAweGU2LCAweDFkLCAweGI5LCAweDM2LCAweDM1LCAweDcxLCAweDg4LCAweDQyLAotMHgyMSwgMHhkMCwgMHgyNSwgMHgxYywgMHhjMywgMHgwMCwgMHg2YywgMHg0NiwgMHhlNCwgMHg1OCwgMHgyZSwgMHg2ZiwKLTB4NmIsIDB4NDQsIDB4MzQsIDB4NjAsIDB4NWIsIDB4NjgsIDB4MmMsIDB4NmYsIDB4YzAsIDB4NDYsIDB4NjMsIDB4NjAsCi0weDJiLCAweDZmLCAweDA4LCAweDMzLCAweDJiLCAweDY3LCAweDNjLCAweDZhLCAweGEzLCAweDQyLCAweDAyLCAweGQzLAotMHgxMiwgMHg0YiwgMHhjMCwgMHg0NiwgMHgyYiwgMHg2NywgMHgwMywgMHgxYywgMHhkYiwgMHgwMCwgMHg2YiwgMHg0NCwKLTB4NWMsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MjMsIDB4MGQsIDB4MDQsIDB4ZDMsIDB4NTEsIDB4MjQsIDB4YTQsIDB4MDMsCi0weDJiLCAweDZmLCAweGMwLCAweDQ2LCAweGEzLCAweDYxLCAweDg4LCAweDQyLCAweGRlLCAweGQxLCAweDEwLCAweDBiLAotMHgwMywgMHhkMywgMHgwZSwgMHg0OSwgMHgwMSwgMHgyMCwgMHhmZCwgMHhmNywgMHg3NCwgMHhmYSwgMHg0MSwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDAwLCAweDAxLCAweDE0LCAweDQwLCAweDAwLCAweDQwLCAweDE0LCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsCi0weGM5LCAweDRmLCAweGZmLCAweGZmLCAweGYwLCAweGI0LCAweDAwLCAweDIxLCAweDAwLCAweDIzLCAweDA3LCAweDIyLAotMHgwNiwgMHgyNCwgMHg0NywgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgwMSwgMHgzMywKLTB4MjAsIDB4MmIsIDB4ZjksIDB4ZDMsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NjEsIDB4MDUsIDB4MjMsIDB4M2IsIDB4NjEsCi0weDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNkLCAweDYxLCAweDNiLCAweDYxLAotMHgzZiwgMHg0ZCwgMHhhYiwgMHg2ZiwgMHhkZSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywKLTB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsCi0weDllLCAweDA4LCAweDAyLCAweDIzLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLAotMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwgMHg1ZSwgMHgwOCwgMHgwMiwgMHgyMywKLTB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsCi0weDNiLCAweDYxLCAweDAyLCAweDIzLCAweGFlLCAweDZmLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwgMHg1ZCwgMHgwMCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweGM1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHg4NSwgMHgwOCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDQ1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwMiwgMHgyNSwKLTB4MDUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsCi0weDNiLCAweDYxLCAweDQwLCAweDAwLCAweDAyLCAweDIzLCAweDE4LCAweDQwLCAweDA0LCAweDIzLCAweDAzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg2MSwgMHgwMCwgMHgyNSwgMHgzZCwgMHg2MSwKLTB4MDEsIDB4MjMsIDB4M2IsIDB4NjEsIDB4M2QsIDB4NjEsIDB4M2IsIDB4NjEsIDB4MDAsIDB4MjAsIDB4M2QsIDB4NjEsCi0weDBkLCAweDRiLCAweDFiLCAweDY5LCAweDQ5LCAweDAwLCAweDFlLCAweDFjLCAweDAyLCAweDIzLCAweDMzLCAweDQwLAotMHgxOSwgMHg0MywgMHgwMSwgMHgyMywgMHgzYiwgMHg2MSwgMHgwMSwgMHgzMCwKLTB4MTAsIDB4MjgsIDB4ZjIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MzgsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MzgsIDB4NjEsCi0weDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDM4LCAweDYxLCAweDQ4LCAweDA4LAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ZjAsIDB4YjQsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MjMsIDB4MDYsIDB4MjcsCi0weDQ0LCAweDRhLCAweGMwLCAweDQ2LCAweDE3LCAweDYxLCAweDEzLCAweDYxLCAweDAxLCAweDM0LCAweDIwLCAweDJjLAotMHhmOSwgMHhkMywgMHgwNCwgMHgyNiwgMHgxNiwgMHg2MSwgMHgwNSwgMHgyNCwgMHgxNCwgMHg2MSwgMHgxNywgMHg2MSwKLTB4MDcsIDB4MjMsIDB4MTMsIDB4NjEsIDB4MTYsIDB4NjEsIDB4MTQsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MTMsIDB4NjEsCi0weDNjLCAweDRiLCAweDliLCAweDZmLCAweGRkLCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLAotMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgzNywgMHg0YiwgMHg5YiwgMHg2ZiwKLTB4OWQsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsCi0weDI1LCAweDQzLCAweDE1LCAweDYxLCAweDMyLCAweDRiLCAweDliLCAweDZmLCAweDVkLCAweDA4LCAweDAyLCAweDIzLAotMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwKLTB4MmQsIDB4NGIsIDB4OWQsIDB4NmYsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsCi0weDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDI5LCAweDRiLCAweDliLCAweDZmLCAweDVkLCAweDAwLAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywKLTB4MTUsIDB4NjEsIDB4YzUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsCi0weDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDg1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLAotMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg0NSwgMHgwOCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsCi0weDE1LCAweDYxLCAweDAyLCAweDI1LCAweDA1LCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLAotMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwMywgMHgxYywKLTB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjAsIDB4NDMsIDB4MTAsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MDcsIDB4MjMsCi0weDEzLCAweDYxLCAweDE2LCAweDYxLCAweDE0LCAweDYxLCAweDRjLCAweDAwLCAweDAwLCAweDIwLCAweDBmLCAweDIxLAotMHgyNSwgMHgxYywgMHhjZCwgMHg0MCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywKLTB4MTMsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzksCi0weDEwLCAweDI4LCAweGYxLCAweGQzLCAweDE3LCAweDYxLCAweDA3LCAweDIzLCAweDEzLCAweDYxLCAweDE3LCAweDYxLAotMHgxMywgMHg2MSwgMHgwMywgMHgyMCwgMHgxMCwgMHg2MSwgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4NGYsIDB4NGQsCi0weDA4LCAweDIxLCAweDAyLCAweDIwLCAweDJhLCAweDFjLCAweGZkLCAweGY3LCAweDI3LCAweGY5LCAweDRkLCAweDRjLAotMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhlNywgMHgxOCwgMHgzOCwgMHg4MCwgMHgxYSwgMHgyMSwgMHgwMiwgMHgyMCwKLTB4MmEsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4MWQsIDB4ZjksIDB4NzgsIDB4ODAsIDB4MjAsIDB4NzksIDB4MDAsIDB4MjgsCi0weDBiLCAweGQwLCAweDAwLCAweDIwLCAweDM4LCAweDgwLCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDEwLCAweGQxLAotMHg0NCwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOCwgMHg0MywgMHg5OSwgMHgwMiwKLTB4MDgsIDB4NjAsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDYsIDB4ZDEsIDB4NjAsIDB4ODgsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweGY5LCAweDIxLCAweDEyLCAweDIwLCAweGZmLCAweGY3LCAweDQzLCAweGZmLCAweDAxLCAweDIxLAotMHhjOSwgMHgwMywgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgMHgwMCwgMHgyNSwgMHg3ZCwgMHgyNiwKLTB4ZjYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MzUsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OWMsIDB4ZmUsCi0weDAwLCAweDBjLCAweDAxLCAweGQzLCAweGI1LCAweDQyLCAweGY3LCAweGQzLCAweDAwLCAweDI1LCAweDA1LCAweGUwLAotMHgwMywgMHgyMSwgMHgwOSwgMHgwMywgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgyYiwgMHhmZiwgMHgwMSwgMHgzNSwKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OGQsIDB4ZmUsIDB4NDAsIDB4MGIsIDB4MDEsIDB4ZDIsIDB4YjUsIDB4NDIsCi0weGYyLCAweGQzLCAweDA0LCAweDIwLCAweGZmLCAweGY3LCAweDg2LCAweGZlLCAweGZmLCAweDIzLCAweGUxLCAweDMzLAotMHg5OCwgMHg0MywgMHgwMSwgMHgyMSwgMHgwMSwgMHg0MywgMHgzOCwgMHg4OCwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywKLTB4OTgsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4MmYsIDB4MjMsIDB4NWIsIDB4MDEsCi0weDE5LCAweDQzLCAweDE2LCAweGUwLCAweDAxLCAweDI4LCAweDA5LCAweGQxLCAweDc4LCAweDg4LCAweDAxLCAweDI4LAotMHgwMywgMHhkMSwgMHgyMywgMHgyMywgMHg1YiwgMHgwMSwgMHgxOSwgMHg0MywgMHgwZCwgMHhlMCwgMHgyMCwgMHgyMywKLTB4MTksIDB4NDMsIDB4MGEsIDB4ZTAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4NzgsIDB4ODgsIDB4MDEsIDB4MjgsCi0weDAzLCAweGQxLCAweDBiLCAweDIzLCAweGRiLCAweDAxLCAweDE5LCAweDQzLCAweDAxLCAweGUwLCAweDgwLCAweDIzLAotMHgxOSwgMHg0MywgMHgwNCwgMHgyMCwgMHhmZiwgMHhmNywgMHhmOCwgMHhmZSwgMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZjMsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsCi0weDAwLCAweDIxLCAweDFiLCAweDIwLCAweGZmLCAweGY3LCAweGVjLCAweGZlLCAweDFhLCAweDIwLCAweGZmLCAweGY3LAotMHg0ZiwgMHhmZSwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMywgMHgwMSwgMHg0MywgMHgxYSwgMHgyMCwgMHhmZiwgMHhmNywKLTB4ZTMsIDB4ZmUsIDB4MDAsIDB4MjcsIDB4MDMsIDB4ZTAsIDB4MDgsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmYsCi0weDA4LCAweGQ5LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDQwLCAweGZlLCAweDc5LCAweDAwLCAweDA5LCAweDE5LAotMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4OCwgMHg4MywgMHgwMSwgMHgzNywgMHgyMCwgMHgyZiwKLTB4ZWYsIDB4ZDMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZWQsIDB4YWYsIDB4MjEsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIwLCAweDEzLCAweDQ4LAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDAxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHg4MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4MDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDgxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMwLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHgwMSwgMHhiMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwOCwgMHgxNCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwKLTB4NjgsIDB4NGQsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZWYsIDB4MTgsIDB4ZjgsIDB4OGIsIDB4MDQsIDB4MjIsCi0weDAyLCAweDQwLCAweDAyLCAweDkyLCAweDcxLCAweDIzLCAweDViLCAweDAxLCAweGU4LCAweDE4LCAweDAxLCAweDg4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwgMHg0MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyNCwKLTB4MDMsIDB4ZTAsIDB4MDgsIDB4MmMsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmMsIDB4MDgsIDB4ZDksIDB4MjAsIDB4MWMsCi0weGZmLCAweGY3LCAweGU4LCAweGZkLCAweDYxLCAweDAwLCAweDQ5LCAweDE5LCAweDFiLCAweDIzLCAweGRiLCAweDAxLAotMHhjOSwgMHgxOCwgMHg4OCwgMHg4MywgMHgwMSwgMHgzNCwgMHgyMCwgMHgyYywgMHhlZiwgMHhkMywgMHg1OCwgMHg0YywKLTB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MTUsIDB4ZDAsIDB4NTcsIDB4NGUsIDB4MjAsIDB4MjUsIDB4MDEsIDB4M2QsCi0weDUzLCAweDQ5LCAweGUwLCAweDY5LCAweDMwLCAweDQwLCAweDBiLCAweGQwLCAweDY4LCAweDAwLCAweDQwLCAweDE4LAotMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg4YiwgMHgyOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NjUsIDB4ZmUsIDB4ZTAsIDB4NjksIDB4YjAsIDB4NDMsIDB4ZTAsIDB4NjEsIDB4NzYsIDB4MDgsIDB4MDAsIDB4MmQsCi0weGViLCAweGQxLCAweDAxLCAweDIwLCAweGZmLCAweGY3LCAweGMyLCAweGZkLCAweDQ4LCAweDQ5LCAweGMwLCAweDQ2LAotMHhmOCwgMHg4MywgMHhmOCwgMHg4YiwgMHhjMiwgMHgwOCwgMHgyNSwgMHhkMywgMHhjYSwgMHg2OCwgMHgwMSwgMHgyYSwKLTB4MTMsIDB4ZDEsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MWYsIDB4ZDEsIDB4NDksIDB4ODgsIDB4MDAsIDB4MjksCi0weDFjLCAweGQxLCAweDAxLCAweDk5LCAweDQzLCAweDRhLCAweDAwLCAweDI5LCAweDA1LCAweGQwLCAweDAxLCAweDI5LAotMHgxNiwgMHhkMSwgMHg1MSwgMHg4YiwgMHhjOSwgMHgwOCwgMHgxMywgMHhkMiwgMHgwZiwgMHhlMCwgMHg1MSwgMHg4YiwKLTB4MDksIDB4MDksIDB4MGYsIDB4ZDIsIDB4MGIsIDB4ZTAsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MGIsIDB4ZDEsCi0weDZkLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDhhLCAweDg4LCAweGM5LCAweDg4LCAweDExLCAweDQwLAotMHg0OSwgMHgwOSwgMHgwOSwgMHgwNywgMHgwMiwgMHhkMSwgMHgwNCwgMHgyMywgMHg5OCwgMHg0MywgMHhmOCwgMHg4MywKLTB4ZjgsIDB4OGIsIDB4MDQsIDB4MjEsIDB4MDEsIDB4NDAsIDB4MDIsIDB4OWEsIDB4MWYsIDB4ZDAsIDB4YjksIDB4OGIsCi0weDRhLCAweDBiLCAweDI3LCAweGQzLCAweDgwLCAweDA5LCAweDI1LCAweGQzLCAweGZmLCAweDIzLCAweDAxLCAweDk4LAotMHgwMSwgMHgzMywgMHg5OCwgMHg0MiwgMHgyMCwgMHhkMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwKLTB4MDAsIDB4ZDEsIDB4MDUsIDB4MDIsIDB4MDEsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4MjMsCi0weDViLCAweDAzLCAweDFkLCAweDQzLCAweGE5LCAweDQyLCAweDEzLCAweGQwLAotMHgwMCwgMHgyMCwgMHgyOSwgMHgxYywgMHhmZiwgMHhmNywgMHgxMCwgMHhmZSwgMHhiZCwgMHg4MywgMHgwMCwgMHgyMCwKLTB4YzAsIDB4NDMsIDB4NjAsIDB4NjIsIDB4MGEsIDB4ZTAsIDB4YjgsIDB4OGIsIDB4NDAsIDB4MGIsIDB4MDcsIDB4ZDIsCi0weDA5LCAweDIxLCAweDQ5LCAweDAyLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDAzLCAweGZlLCAweDA5LCAweDIwLAotMHg0MCwgMHgwMiwgMHhiOCwgMHg4MywgMHhmOCwgMHg4YiwgMHhjMCwgMHgwOCwgMHgyZCwgMHhkMywgMHgxZCwgMHg0OCwKLTB4YzcsIDB4NmEsIDB4MDEsIDB4OTgsIDB4MDAsIDB4OTksIDB4ZmYsIDB4ZjcsIDB4NTEsIDB4ZmMsIDB4YzIsIDB4MDcsCi0weGQyLCAweDBmLCAweDFhLCAweDQ5LCAweDAzLCAweGQwLCAweDA0LCAweDIzLCAweGNkLCAweDZkLCAweDJiLCAweDQzLAotMHgwMywgMHhlMCwgMHgwNCwgMHgyMywgMHhjZCwgMHg2ZCwgMHg5ZCwgMHg0MywgMHgyYiwgMHgxYywgMHhjYiwgMHg2NSwKLTB4ODMsIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MDIsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4MmIsIDB4NDMsIDB4MDMsIDB4ZTAsCi0weDAyLCAweDIzLCAweGNkLCAweDZkLCAweDlkLCAweDQzLCAweDJiLCAweDFjLCAweGNiLCAweDY1LCAweDYxLCAweDZhLAotMHg4MSwgMHg0MiwgMHgwYywgMHhkMCwgMHg2MCwgMHg2MiwgMHgwZSwgMHg0OCwgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwKLTB4ZmYsIDB4MjEsIDB4MjEsIDB4MzEsIDB4MzksIDB4NDMsIDB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MjEsIDB4MzMsCi0weDlmLCAweDQzLCAweDM5LCAweDFjLCAweGMxLCAweDYyLCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweGI0LCAweDAxLCAweDIyLAotMHgyMCwgMHgyOCwgMHgwZiwgMHhkMiwgMHg0MywgMHgwMCwgMHgwZiwgMHgxYywgMHgwNywgMHg0OSwgMHg1YywgMHgxOCwKLTB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4OWYsIDB4ODMsIDB4ODIsIDB4NDAsIDB4MDcsIDB4MjMsCi0weDViLCAweDAyLCAweGM5LCAweDE4LCAweDEwLCAweDFjLCAweGNhLCAweDY5LCAweDEwLCAweDQzLCAweGM4LCAweDYxLAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwYiwgMHg0OCwgMHg0MCwgMHg2OSwKLTB4MGIsIDB4NDksIDB4YzksIDB4OGIsIDB4MDQsIDB4MjIsIDB4MGEsIDB4NDAsIDB4MGEsIDB4NDksIDB4MDYsIDB4ZDAsCi0weDAxLCAweDIzLCAweGRiLCAweDAyLCAweDk4LCAweDQzLCAweDAxLCAweDIzLCAweGNhLCAweDZkLCAweDFhLCAweDQzLAotMHgwNSwgMHhlMCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHgxOCwgMHg0MywgMHhjYSwgMHg2ZCwgMHg1MiwgMHgwOCwKLTB4NTIsIDB4MDAsIDB4Y2EsIDB4NjUsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGU4LCAweDFiLCAweDAwLCAweDgwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLAotMHhmZiwgMHhmNywgMHhkZSwgMHhmZiwgMHgwMSwgMHgxYywgMHgwNSwgMHgyMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4YWIsIDB4MTgsIDB4ODAsIDB4MDQsIDB4M2IsIDB4NTgsIDB4NzAsIDB4MWIsIDB4MjIsIDB4MDAsIDB4YWIsCi0weDVhLCAweDgwLCAweGQ5LCAweDgwLCAweDA1LCAweDQ5LCAweGM5LCAweDZkLCAweGMwLCAweDQ2LCAweDAyLCAweDkxLAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZCwgMHhmNywgMHg3OSwgMHhmOCwgMHgwNCwgMHhiMCwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MGYsIDB4NDgsIDB4MDEsIDB4NjgsCi0weDQ5LCAweDBjLCAweDA1LCAweGQyLCAweDAxLCAweDY4LCAweDA5LCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LAotMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgwYiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMCwgMHgwYywgMHgwMSwgMHhlMCwKLTB4MGEsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDksIDB4NGIsIDB4OTgsIDB4NDIsCi0weDA1LCAweGQwLCAweDAyLCAweDMzLCAweDk4LCAweDQyLCAweDAyLCAweGQwLCAweDA3LCAweDRiLCAweDk4LCAweDQyLAotMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDA0LCAweDk5LCAweDAwLCAweDAwLCAweDA3LCAweDk5LCAweDAwLCAweDAwLCAweDkwLCAweGI0LCAweDAxLCAweDI0LAotMHgyMSwgMHgxYywgMHgxOCwgMHg0OCwgMHgwMiwgMHg2OCwgMHg1MiwgMHgwYywgMHgwNiwgMHhkMiwgMHgwMiwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjEsCi0weDA5LCAweDA2LCAweDA5LCAweDBlLCAweDEyLCAweDRmLCAweDEzLCAweDRhLCAweDAyLCAweGQwLCAweDM4LCAweDY4LAotMHgwMCwgMHgwYywgMHgwMCwgMHhlMCwgMHg5MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMCwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDgsIDB4ZDAsIDB4MDIsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MDUsIDB4ZDAsIDB4MGUsIDB4NGIsCi0weDk4LCAweDQyLCAweDAyLCAweGQwLCAweDAyLCAweDNiLCAweDk4LCAweDQyLCAweDBjLCAweGQxLCAweDAwLCAweDI5LAotMHgwMiwgMHhkMCwgMHhmOCwgMHg2YSwgMHgwMCwgMHgwYywgMHgwMCwgMHhlMCwKLTB4ZDAsIDB4NmMsIDB4NDAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MGUsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHg5OSwgMHgwMCwgMHgwMCwKLTB4MDcsIDB4OTksIDB4MDAsIDB4MDAsIDB4MGMsIDB4NDgsIDB4MDEsIDB4NjgsIDB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsCi0weDAxLCAweDY4LCAweDA5LCAweDBjLCAweDA1LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAyLCAweGQzLAotMHgwOCwgMHg0OCwgMHg4MCwgMHg2OCwgMHgwMSwgMHhlMCwgMHgwOCwgMHg0OCwgMHg0MCwgMHg2YywgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDAsIDB4MjEsIDB4MDMsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4NDAsIDB4MDgsIDB4MDEsIDB4ZDMsCi0weDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDA4LCAweDFjLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwMSwgMHgyNywKLTB4MWEsIDB4NGMsIDB4MjUsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NzIsIDB4ZmYsIDB4MDMsIDB4MWMsIDB4MTksIDB4NGEsCi0weDAyLCAweDIxLCAweDAxLCAweDI2LCAweDE4LCAweDQ4LCAweDAxLCAweDJiLCAweDFiLCAweGQxLCAweGNiLCAweDA0LAotMHgxZSwgMHg2MCwgMHg1NSwgMHgyMywgMHgwMywgMHg2MCwgMHgwMCwgMHgyMywgMHg0MywgMHg2MCwgMHgwNiwgMHg2OCwKLTB4NTUsIDB4MmUsIDB4MWIsIDB4ZDEsIDB4YWEsIDB4MjYsIDB4MDYsIDB4NjAsIDB4NDMsIDB4NjAsIDB4MDMsIDB4NjgsCi0weGFhLCAweDJiLCAweDE1LCAweGQxLCAweDA5LCAweDIzLCAweDAzLCAweDYwLCAweDA1LCAweDIzLCAweDBmLCAweDRmLAotMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwgMHgwMywgMHgyMywgMHgwZSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwKLTB4MTEsIDB4NjAsIDB4MDcsIDB4NjgsIDB4MDgsIDB4ZTAsIDB4MDgsIDB4MjMsIDB4MjMsIDB4NjAsIDB4MDQsIDB4MjMsCi0weDBhLCAweDRmLCAweGMwLCAweDQ2LCAweDNiLCAweDYwLCAweDExLCAweDYwLCAweDA2LCAweDYwLCAweDI3LCAweDY4LAotMHhjMCwgMHg0NiwgMHgyNSwgMHg2MCwgMHgzOCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NDAsCi0weDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAwLCAweDAwLCAweDI2LCAweDQwLCAweDAwLCAweDAwLCAweDI4LCAweDQwLAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhmZiwgMHhmNywgMHgzMCwgMHhmZiwgMHgwMSwgMHgyOCwgMHgwNSwgMHhkMSwKLTB4MTksIDB4NDgsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDksIDB4NDksIDB4NmIsIDB4MDgsIDB4NDAsIDB4MjIsIDB4ZTAsCi0weDE4LCAweDQ4LCAweDAxLCAweDY4LCAweDQ5LCAweDBjLCAweDA1LCAweGQyLCAweDAxLCAweDY4LCAweDA5LCAweDBjLAotMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgxNCwgMHg0OCwgMHgwMCwgMHg2OCwKLTB4MDAsIDB4MGMsIDB4MDEsIDB4ZTAsIDB4MTMsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDEyLCAweDRiLCAweGMwLCAweDE4LCAweDA4LCAweDI4LCAweDBiLCAweGQyLCAweDAxLCAweGEzLCAweDFiLCAweDVjLAotMHg1YiwgMHgwMCwgMHg5ZiwgMHg0NCwgMHgwNSwgMHgwMywgMHgwNywgMHgwMywgMHgwNywgMHgwNywgMHgwNSwgMHgwMywKLTB4MDMsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjEsCi0weDM4LCAweDYwLCAweDgwLCAweDA3LCAweDAwLCAweGQxLCAweDAwLCAweDIxLCAweDA4LCAweDA2LCAweDAwLCAweDBlLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzNCwgMHg2ZSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGZlLCAweDY2LCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDgyLCAweGIwLAotMHgwNywgMHgxYywgMHgwMSwgMHgyMCwgMHgwMSwgMHg5MCwgMHhmZiwgMHhmNywgMHhlNywgMHhmZSwgMHgwMSwgMHgyOCwKLTB4MTMsIDB4ZDEsIDB4MzgsIDB4MmYsIDB4MDEsIDB4ZDAsIDB4YTgsIDB4MmYsIDB4MDcsIDB4ZDEsIDB4MDAsIDB4MjYsCi0weGY2LCAweDQzLCAweDM0LCAweDFjLCAweGE4LCAweDJmLCAweDAyLCAweGQxLCAweDMwLCAweDFjLCAweDAwLCAweDk2LAotMHgzNSwgMHgxYywgMHgxMSwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwNiwgMHg2MiwgMHg0NCwgMHg2MiwgMHg4NSwgMHg2MiwKLTB4MDAsIDB4OTksIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjIsIDB4MDAsIDB4MjEsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDAxLCAweDYwLCAweDM4LCAweDJmLCAweDAxLCAweGQwLCAweGE4LCAweDJmLCAweDA1LCAweGQxLCAweDAxLCAweDIxLAotMHgwMSwgMHg2MCwgMHhhOCwgMHgyZiwgMHgwMSwgMHhkMSwgMHgwMywgMHgyMSwgMHgwMSwgMHg2MCwgMHgwMSwgMHg5OCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MzQsIDB4NmUsIDB4MjEsIDB4NDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgxMiwgMHg0YywgMHgyMSwgMHg2OCwgMHgxMiwgMHg0OCwgMHg4MSwgMHg0MiwgMHgwYiwgMHhkMCwgMHgwMCwgMHgyMywKLTB4MjEsIDB4MWMsIDB4ZTIsIDB4MWQsIDB4YzEsIDB4MzIsIDB4MDAsIDB4ZTAsCi0weDA4LCAweGMxLCAweDkxLCAweDQyLCAweGZjLCAweGQzLCAweDIwLCAweDYwLCAweGM4LCAweDIwLCAweGEwLCAweDgwLAotMHg2NywgMHg3MiwgMHgzOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxOCwgMHhmOCwgMHgyNywgMHg3MiwgMHgwYSwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4ZTAsIDB4NjAsIDB4MDksIDB4MmYsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MjcsIDB4ZTAsIDB4MTksCi0weDAxLCAweDdkLCAweDAxLCAweDMxLCAweDAxLCAweDc1LCAweGUwLCAweDg4LCAweDAxLCAweDMwLCAweGUwLCAweDgwLAotMHgwMSwgMHgyMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4ZWUsIDB4ZmYsIDB4YzAsIDB4ZDAsIDB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4YjQsIDB4MDgsIDB4NGEsCi0weGQxLCAweDFkLCAweDg5LCAweDMxLCAweDBiLCAweDdhLCAweDIwLCAweDJiLCAweDAxLCAweGQzLCAweDAwLCAweDIzLAotMHgwYiwgMHg3MiwgMHgwNywgMHgxYywgMHgwOCwgMHg3YSwgMHg0MywgMHgxYywgMHgwYiwgMHg3MiwgMHg4MCwgMHgxOCwKLTB4OTAsIDB4MzAsIDB4NDcsIDB4NzIsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDA3LCAweDQ5LCAweDAxLCAweDIyLCAweDEyLCAweDA0LCAweDA4LCAweDY4LCAweDAyLCAweDQwLCAweDAxLCAweDIwLAotMHgwMCwgMHgyYSwgMHgwNiwgMHhkMSwgMHgwYSwgMHg2OCwgMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwOSwgMHg2OCwKLTB4ODksIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDkwLCAweGI1LCAweDA3LCAweDFjLCAweDA5LCAweDRjLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweGZjLCAweGY3LAotMHg5MSwgMHhmZiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwgMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwKLTB4MDEsIDB4ZDEsIDB4MDAsIDB4MGMsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsCi0weGM1LCAweGZlLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGM0LCAweDY2LCAweDIxLCAweDQwLAotMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgMHg3OSwgMHg3YSwgMHg3NiwgMHg0OCwgMHgwMCwgMHgyMywgMHg3NiwgMHg0YywKLTB4MDEsIDB4MjksIDB4NWQsIDB4ZDEsIDB4YTIsIDB4ODgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4YTEsIDB4ODksCi0weDhhLCAweDQyLCAweDc0LCAweGRhLCAweGZhLCAweDdhLCAweDAwLCAweDJhLCAweDE1LCAweGQwLCAweDdhLCAweDZjLAotMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHg4YSwgMHg0MiwgMHgxMCwgMHhkOCwgMHgwMCwgMHg5YSwgMHg1MSwgMHgxYywKLTB4YTEsIDB4ODAsIDB4YTEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODEsIDB4NzgsIDB4NmMsIDB4NmIsIDB4NGUsCi0weGMwLCAweDQ2LCAweGYwLCAweDgwLCAweGEwLCAweDZhLCAweDU4LCAweDIzLCAweDc5LCAweDZjLCAweDU5LCAweDQzLAotMHg0MCwgMHgxOCwgMHhjMSwgMHgxYSwgMHgyOCwgMHhlMCwgMHgyMiwgMHg4OCwgMHgwMSwgMHgzMiwgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MjIsIDB4ODAsIDB4OGEsIDB4NDIsIDB4MDAsIDB4ZGIsIDB4MjMsIDB4ODAsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI5LCAweDY5LCAweGRkLCAweDVmLCAweDRjLCAweGE0LCAweDZhLCAweDVlLCAweDRiLCAweDFkLCAweDg4LAotMHg1OCwgMHgyMywgMHg2YiwgMHg0MywgMHhlMywgMHgxOCwgMHhkZSwgMHgxZCwgMHgwMSwgMHgzNiwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MTUsIDB4ZDEsIDB4NTgsIDB4NDksCi0weDAwLCAweDlhLCAweDAxLCAweDMyLCAweDhhLCAweDgwLCAweDhhLCAweDg4LCAweGMwLCAweDQ2LCAweDQyLCAweDgxLAotMHgwOCwgMHg4OCwgMHgwMSwgMHgzMCwgMHg1NCwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHg1OCwgMHgyMCwKLTB4NjgsIDB4NDMsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzksIDB4ZmIsIDB4ZjAsIDB4ODgsCi0weDAwLCAweDA0LCAweDAwLCAweDE0LCAweDk1LCAweGUwLCAweDRkLCAweDRiLCAweDAxLCAweDM1LCAweDJkLCAweDA0LAotMHgyZCwgMHgwYywgMHgxZCwgMHg4MCwgMHg4ZCwgMHg0MiwgMHgwMSwgMHhkYiwgMHgwMCwgMHgyNSwgMHgxZCwgMHg4MCwKLTB4MDEsIDB4MzIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MTQsIDB4OTEsIDB4NDIsIDB4Y2UsIDB4ZGMsIDB4ODEsIDB4ZTAsCi0weGUxLCAweDg4LCAweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDE4LCAweGRhLCAweGY5LCAweDdhLCAweDAwLCAweDI5LAotMHgyZiwgMHhkMCwgMHg3OSwgMHg2YywgMHg0OSwgMHgwNCwgMHg0OSwgMHgwYywgMHg3OSwgMHg2NCwgMHgyYSwgMHhkMCwKLTB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MjcsIDB4ZDgsIDB4ZTEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZTEsIDB4ODAsCi0weGUxLCAweDg4LCAweGMwLCAweDQ2LCAweDgxLCAweDgxLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDc4LCAweDZjLAotMHgxOCwgMHg0MywgMHgzYSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHgwMCwgMHhlMCwgMHg2MywgMHhlMCwKLTB4ZTAsIDB4NmEsIDB4NzksIDB4NmMsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsCi0weGMxLCAweDFmLCAweDU5LCAweDM5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBmLCAweGZiLCAweGUwLCAweDZhLAotMHg3OSwgMHg2YywgMHg0YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHgwMSwgMHg4MCwgMHgxOCwgMHgwMSwgMHgzOSwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4NjAsIDB4MzgsIDB4MDAsIDB4ZjAsIDB4ODksIDB4ZmIsIDB4YjYsIDB4ZTcsCi0weDRhLCAweGUwLCAweDYxLCAweDg4LCAweDAxLCAweDMxLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg2MSwgMHg4MCwgMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkYiwgMHg2MywgMHg4MCwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4M2UsIDB4ZGQsIDB4MjQsIDB4NGMsIDB4ZTQsIDB4NmEsIDB4MjMsIDB4NGIsCi0weDVkLCAweDg4LCAweDZiLCAweDAwLCAweDViLCAweDE5LCAweDViLCAweDAxLCAweGUzLCAweDE4LCAweGRlLCAweDFkLAotMHgwMSwgMHgzNiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwKLTB4MjAsIDB4ZDEsIDB4MWMsIDB4NGUsIDB4ZjEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZjEsIDB4ODAsIDB4ZjEsIDB4ODgsCi0weGMwLCAweDQ2LCAweDgxLCAweDgxLCAweDcwLCAweDg4LCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDAxLCAweDMwLAotMHgxOCwgMHg0MywgMHgxNywgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg4MCwgMHg2OCwgMHgwMCwgMHg0MCwgMHgxOSwKLTB4NDAsIDB4MDEsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZmEsIDB4NzEsIDB4ODgsCi0weDRhLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDAxLCAweGYwLCAweDZhLCAweDgwLCAweDE4LCAweDAwLCAweGYwLAotMHg0ZCwgMHhmYiwgMHgwZSwgMHg0OSwgMHhjOCwgMHg4OCwgMHg3OSwgMHhlNywgMHgwYiwgMHg0YiwgMHgwMSwgMHgzNSwKLTB4MmQsIDB4MDQsIDB4MmQsIDB4MGMsIDB4NWQsIDB4ODAsIDB4OTUsIDB4NDIsIDB4MDEsIDB4ZGIsIDB4MDAsIDB4MjUsCi0weDVkLCAweDgwLCAweDAxLCAweDMxLCAweDA5LCAweDA0LCAweDA5LCAweDE0LCAweDhhLCAweDQyLCAweGMyLCAweGRjLAotMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHhmOCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGM0LCAweDY2LCAweDIxLCAweDQwLCAweGYwLCAweGI0LCAweDA2LCAweDFjLCAweDAxLCAweDIzLCAweGRiLCAweDAzLAotMHgzMywgMHg0MCwgMHgwMSwgMHgyNCwgMHg0NCwgMHg0ZiwgMHgwMCwgMHgyMCwgMHg0NCwgMHg0YSwgMHg0NSwgMHg0ZCwKLTB4ZDEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDAsIDB4MmIsIDB4NDEsIDB4ZDAsIDB4ZTMsIDB4MDMsIDB4ZjMsIDB4MWEsCi0weDczLCAweGQwLCAweGVlLCAweDg5LCAweDllLCAweDQyLCAweDcxLCAweGQzLCAweGVlLCAweDg4LCAweDAwLCAweDJlLAotMHg2ZCwgMHhkMCwgMHhlZCwgMHg2YSwgMHg1ZSwgMHgxZSwgMHg3MywgMHgwMCwgMHg5YiwgMHgxOSwgMHg1YiwgMHgwMSwKLTB4ZWQsIDB4MTgsIDB4YWUsIDB4NjgsIDB4MzYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsCi0weGNlLCAweDg5LCAweDAxLCAweDM2LCAweGNlLCAweDgxLCAweDQwLCAweDM1LCAweGFkLCAweDhiLCAweGFkLCAweDAwLAotMHgzNSwgMHg0ZSwgMHg3NiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3MCwgMHg1MSwgMHg1NSwgMHg4OSwgMHgwMSwgMHgzNSwKLTB4NTUsIDB4ODEsIDB4MzIsIDB4NGUsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4OTAsIDB4NjAsIDB4ZjIsIDB4NmEsCi0weGQyLCAweDE4LCAweDkwLCAweDYzLCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweGQwLCAweDYzLCAweGYyLCAweDZhLAotMHhkMiwgMHgxOCwgMHgxMCwgMHg2NCwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHg1MCwgMHg2NCwgMHhmMiwgMHg2YSwKLTB4ZDIsIDB4MTgsIDB4OTAsIDB4NjQsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjQsIDB4ZjAsIDB4ODgsCi0weDAxLCAweDM4LCAweGYwLCAweDgwLCAweGYwLCAweDg4LCAweGMwLCAweDQ2LCAweDg4LCAweDgxLCAweDI0LCAweDQ5LAotMHgwMCwgMHgyOCwgMHgzOSwgMHhkMSwgMHg0ZiwgMHg4MCwgMHgzNywgMHhlMCwgMHgwMCwgMHgyZSwgMHgzOCwgMHhkOSwKLTB4YWIsIDB4ODksIDB4YjMsIDB4NDIsIDB4MzAsIDB4ZDMsIDB4YWIsIDB4ODgsIDB4MDAsIDB4MmIsIDB4MmMsIDB4ZDAsCi0weDUzLCAweDg5LCAweDAxLCAweDMzLCAweDUzLCAweDgxLCAweDJhLCAweDFjLCAweGFkLCAweDZhLCAweDU4LCAweDIzLAotMHgwMSwgMHgzZSwgMHg3MywgMHg0MywgMHhlZCwgMHgxOCwgMHhhZSwgMHg2OCwgMHgzNiwgMHgwNiwgMHgzNiwgMHgwZSwKLTB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsIDB4Y2UsIDB4ODksIDB4MDEsIDB4MzYsIDB4Y2UsIDB4ODEsIDB4YTgsIDB4NjAsCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweGE4LCAweDYzLCAweDk1LCAweDZhLCAweGVkLCAweDE4LCAweGU4LCAweDYzLAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHgyOCwgMHg2NCwgMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHg2OCwgMHg2NCwKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4YTgsIDB4NjQsIDB4OTUsIDB4NmEsIDB4ZWIsIDB4MTgsIDB4ZDgsIDB4NjQsCi0weDkwLCAweDg4LCAweDAxLCAweDM4LCAweDkwLCAweDgwLCAweDkwLCAweDg4LCAweGMwLCAweDQ2LCAweDQ4LCAweDgxLAotMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgwMSwgMHhlMCwgMHgwNCwgMHhlMCwgMHgwMywgMHhlMCwgMHgxNywgMHg4MCwKLTB4MjAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4Y2EsIDB4ODksIDB4MDEsIDB4MzIsIDB4Y2EsIDB4ODEsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgyMSwgMHg0MSwgMHg2MCwgMHgxMCwgMHg0OSwKLTB4NGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTAsIDB4ZDEsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDAsCi0weGNhLCAweDFkLCAweDE5LCAweDMyLCAweDEyLCAweDc5LCAweDAwLCAweDJhLCAweDA4LCAweGQwLCAweDRhLCAweDY5LAotMHgwMCwgMHgyYSwgMHgwYiwgMHhkMSwgMHg4OCwgMHg2MSwgMHg0OCwgMHg2MSwKLTB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGEsIDB4NjksIDB4MDAsIDB4MmEsCi0weDAyLCAweGQxLCAweDg4LCAweDYxLCAweDQ4LCAweDYxLCAweGY3LCAweGU3LCAweDhhLCAweDY5LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MCwgMHg4OCwgMHg2MSwgMHhmMiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MmEsIDB4NDgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NGMsIDB4ZDAsIDB4MDgsIDB4MjIsCi0weGMxLCAweDY4LCAweDBhLCAweDQwLCAweDAwLCAweDI3LCAweDI3LCAweDRiLCAweGQ5LCAweDFkLCAweGI5LCAweDMxLAotMHgwMCwgMHgyYSwgMHgxMSwgMHhkMCwgMHgwNCwgMHgyMiwgMHgyNSwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MSwKLTB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsCi0weDIzLCAweDRjLCAweGMwLCAweDQ2LCAweGNjLCAweDYyLCAweDIzLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYzLAotMHg0ZiwgMHg2MywgMHgxMiwgMHhlMCwgMHgwNSwgMHgyMiwgMHgyMSwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MSwKLTB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsCi0weDFmLCAweDRjLCAweGMwLCAweDQ2LCAweGNjLCAweDYyLCAweDFmLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYzLAotMHgxZSwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MywgMHg0MCwgMHgyNCwgMHhjYywgMHg4MiwgMHg0ZiwgMHg4MywKLTB4MWMsIDB4NGYsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZDksIDB4OGMsIDB4MDAsIDB4MDUsIDB4MTksCi0weDZkLCAweDZhLCAweDdkLCAweDQwLCAweGU0LCAweDE4LCAweGZmLCAweDM0LCAweDAxLCAweDM0LCAweDY1LCAweDYyLAotMHgwMSwgMHgzMSwgMHg5MSwgMHg0MiwgMHhmNCwgMHhkMywgMHgxMCwgMHgyOSwgMHgwNywgMHhkMiwgMHg4YSwgMHgwMCwKLTB4ZDIsIDB4MTgsIDB4ZmYsIDB4MzIsIDB4MDEsIDB4MzIsIDB4NTcsIDB4NjIsIDB4MDEsIDB4MzEsIDB4MTAsIDB4MjksCi0weGY3LCAweGQzLCAweDExLCAweDQ5LCAweDAwLCAweGYwLCAweDIyLCAweGY4LCAweGIwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwKLTB4MjgsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0weGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLCAweDIwLCAweDAxLCAweDQwLCAweDAwLAotMHg2NywgMHg0NSwgMHgyMywgMHgwMSwgMHhlZiwgMHhjZCwgMHhhYiwgMHg4OSwgMHg5OCwgMHhiYSwgMHhkYywgMHhmZSwKLTB4MTAsIDB4MzIsIDB4NTQsIDB4NzYsIDB4YzMsIDB4ZDIsIDB4ZTEsIDB4ZjAsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzYsCi0weDMwLCAweDgwLCAweDIwLCAweDQwLCAweGIwLCAweGI1LCAweDBmLCAweDFjLCAweDE1LCAweDRkLCAweGU5LCAweDFkLAotMHhjOSwgMHgzMSwgMHgxNSwgMHg0YywgMHgyMywgMHgxYywgMHgxNSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywKLTB4NDQsIDB4ZmIsIDB4ZTksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4MWUsIDB4MzEsIDB4MjMsIDB4MWMsIDB4MGQsIDB4MWMsCi0weDExLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDNiLCAweGZiLCAweDI5LCAweDFjLCAweDIzLCAweDFjLAotMHgwZSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywgMHgzNSwgMHhmYiwgMHgzOSwgMHgxYywgMHgyMywgMHgxYywKLTB4MGMsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MmYsIDB4ZmIsIDB4MDAsIDB4MjEsIDB4MGIsIDB4NDgsCi0weGMyLCAweDFkLCAweDE5LCAweDMyLCAweDUxLCAweDcxLCAweDAxLCAweDIxLCAweGZmLCAweDMwLCAweDAxLCAweDMwLAotMHg0MSwgMHg2MiwgMHgwOCwgMHgxYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4MjgsIDB4MDAsIDB4MDMsIDB4MDAsCi0weDQwLCAweDAwLCAweDAyLCAweDAwLCAweDE0LCAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHgzNywgMHg0YSwgMHg1MCwgMHg2OSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MzMsIDB4NGIsIDB4MDEsIDB4MjksCi0weDQ5LCAweGQxLCAweDFmLCAweDY4LCAweDE5LCAweDFjLCAweDMyLCAweDRiLCAweDlmLCAweDQyLCAweDA0LCAweGQxLAotMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMywKLTB4OWYsIDB4MDAsIDB4Y2MsIDB4NTksIDB4NTUsIDB4NjksIDB4ZWYsIDB4MTksIDB4M2MsIDB4NjEsIDB4MDEsIDB4MzMsCi0weDA1LCAweDJiLCAweGY3LCAweGQzLCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDAyLCAweDIzLCAweDE4LCAweDQzLAotMHg1MywgMHg2OSwgMHhjMCwgMHg0NiwgMHg5OCwgMHg2MCwgMHg1MCwgMHg2OSwgMHgwOCwgMHgyMywgMHhjMiwgMHg2OCwKLTB4MTMsIDB4NDAsIDB4MjUsIDB4NGYsIDB4ZmEsIDB4MWQsIDB4YjksIDB4MzIsIDB4MDAsIDB4MmIsIDB4MDIsIDB4ZDAsCi0weDA0LCAweDIzLCAweDIzLCAweDRjLCAweDAxLCAweGUwLCAweDA1LCAweDIzLCAweDIyLCAweDRjLCAweGMwLCAweDQ2LAotMHgxNCwgMHg2MSwgMHg0MCwgMHgyNCwgMHhkNCwgMHg4MiwgMHgwMCwgMHgyNCwgMHg1NCwgMHg4MywgMHgyMCwgMHg0YywKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MGMsIDB4ZDksIDB4OTUsIDB4MDAsCi0weDQ2LCAweDE5LCAweDc2LCAweDZhLCAweDY2LCAweDQwLCAweGVkLCAweDE5LCAweGZmLCAweDM1LCAweDAxLCAweDM1LAotMHg2ZSwgMHg2MiwgMHgwMSwgMHgzMiwgMHg5YSwgMHg0MiwgMHhmNCwgMHhkMywgMHgxMCwgMHgyYSwgMHgwNywgMHhkMiwKLTB4OTMsIDB4MDAsIDB4ZGIsIDB4MTksIDB4ZmYsIDB4MzMsIDB4MDEsIDB4MzMsIDB4NWMsIDB4NjIsIDB4MDEsIDB4MzIsCi0weDEwLCAweDJhLCAweGY3LCAweGQzLCAweGZmLCAweGY3LCAweDcwLCAweGZmLCAweGJjLCAweGU3LCAweDAwLCAweDIxLAotMHg4ZiwgMHgwMCwgMHhkYywgMHg1OSwgMHg1NSwgMHg2OSwgMHhlZiwgMHgxOSwgMHg3YywgMHg2MiwgMHgwMSwgMHgzMSwKLTB4MDUsIDB4MjksIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDUxLCAweDY5LCAweGMwLCAweDQ2LCAweDg4LCAweDYwLCAweDUwLCAweDY5LCAweDQwLCAweDY4LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MSwgMHgwOSwgMHg0OCwgMHhmYywgMHhmNywgMHhhNCwgMHhmYSwgMHhhNCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjcsIDB4NDUsIDB4MjMsIDB4MDEsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDI4LCAweDAxLCAweDQwLCAweDAwLCAweDIwLCAweDAxLCAweDQwLCAweDAwLAotMHg1YywgMHg1YywgMHg1YywgMHg1YywgMHgxMSwgMHgzMSwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKLTB4M2IsIDB4NDgsIDB4M2MsIDB4NGMsIDB4MDgsIDB4MjEsIDB4MjAsIDB4NjAsIDB4YTEsIDB4ODAsIDB4MDAsIDB4MjAsCi0weDIwLCAweDgxLCAweGUxLCAweDgwLCAweDYwLCAweDgxLCAweDM5LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYwLAotMHgzOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MSwgMHgzOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MSwKLTB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsIDB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjEsCi0weDM2LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYyLCAweDM2LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYyLAotMHgzNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MiwgMHgzNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MiwKLTB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjMsIDB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjMsCi0weDMzLCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYzLCAweDMzLCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYzLAotMHgzMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2NCwgMHgzMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NCwKLTB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjQsIDB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjQsCi0weDMwLCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDY1LCAweDMwLCAweDQ5LCAweGM4LCAweDY4LCAweDAyLCAweDA0LAotMHg4OSwgMHg2OSwgMHg0YSwgMHg0MCwgMHhlMywgMHgxZCwgMHg3OSwgMHgzMywgMHgwOSwgMHgwNCwgMHhjOSwgMHg0MywKLTB4YzAsIDB4NDMsIDB4NDgsIDB4NDAsIDB4ZTEsIDB4MWQsIDB4YjksIDB4MzEsIDB4ZGEsIDB4NjMsIDB4MDgsIDB4NjAsCi0weDI5LCAweDRkLCAweDIxLCAweDFjLCAweDJiLCAweDFjLCAweDI5LCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LAotMHgzZSwgMHhmYSwgMHgyOCwgMHg0YSwgMHhlMSwgMHgxZCwgMHhiNSwgMHgzMSwgMHgwMSwgMHgyMCwgMHgyYiwgMHgxYywKLTB4MGUsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzYsIDB4ZmEsIDB4MjQsIDB4NGEsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MWMsCi0weDJiLCAweDFjLCAweGZjLCAweGY3LCAweDMwLCAweGZhLCAweGUxLCAweDFkLCAweDRkLCAweDMxLCAweDJiLCAweDFjLAotMHgyMCwgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgyOSwgMHhmYSwgMHhlMCwgMHgxZCwgMHg1ZCwgMHgzMCwKLTB4MDEsIDB4NjgsIDB4MDAsIDB4MjksIDB4ZmMsIDB4ZDAsIDB4NjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MzgsIDB4NjUsCi0weDIwLCAweDZlLCAweGMwLCAweDQ2LCAweDc4LCAweDY1LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg4MCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHhiOSwgMHgyMCwgMHg0MCwgMHg4MSwgMHg4MSwgMHg0OCwgMHhiZCwKLTB4NzksIDB4NTYsIDB4MjMsIDB4OGMsIDB4OTMsIDB4MGMsIDB4ODIsIDB4OTUsIDB4MWQsIDB4MGUsIDB4MTIsIDB4Y2YsCi0weDliLCAweDNiLCAweGMwLCAweGU5LCAweGU2LCAweDU1LCAweDdjLCAweDgyLCAweDk5LCAweGY2LCAweDc4LCAweDAyLAotMHhkMSwgMHhkNywgMHgyNSwgMHg3MywgMHg3MiwgMHg4YywgMHgzMywgMHgxMCwgMHhmNywgMHgwMywgMHhmMSwgMHg0MiwKLTB4NmMsIDB4OWIsIDB4NGEsIDB4YTcsIDB4ODIsIDB4OGUsIDB4MjMsIDB4YTksIDB4OTAsIDB4YjEsIDB4ODIsIDB4OGUsCi0weGRjLCAweDNmLCAweGZiLCAweDI5LCAweDAwLCAweDYyLCAweDIyLCAweDQ1LCAweDg4LCAweDJiLCAweGYxLCAweDg1LAotMHgxMiwgMHg2MSwgMHhkMSwgMHg3MywgMHg2ZSwgMHhiMSwgMHgxMSwgMHgxNiwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4MDAsCi0weDE0LCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLAotMHgzMywgMHhmOCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0YywgMHhmZiwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgxZiwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCi0weGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLCAweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LAotMHgwOCwgMHg0MywgMHgzOCwgMHg2NSwgMHgyMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NSwgMHg2MCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4YjgsIDB4NjUsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksIDB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHgxZiwgMHgxOCwgMHhiZiwgMHg2OSwgMHg1YiwgMHgxOCwKLTB4NWYsIDB4NjIsIDB4MDEsIDB4MzIsIDB4MDUsIDB4MmEsIDB4ZjcsIDB4ZDMsIDB4MDcsIDB4N2EsIDB4ZmIsIDB4MDgsCi0weDAzLCAweGQzLCAweDAwLCAweDIzLCAweDkyLCAweDAwLCAweDUyLCAweDE4LCAweDEzLCAweDYyLCAweDA3LCAweDZiLAotMHhjMCwgMHg0NiwgMHg4ZiwgMHg2MywgMHhjNywgMHg2YSwgMHhjMCwgMHg0NiwgMHhjZiwgMHg2MywgMHg4NywgMHg2YiwKLTB4YzAsIDB4NDYsIDB4MGYsIDB4NjQsIDB4NDcsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGYsIDB4NjQsIDB4MDcsIDB4NmMsCi0weGMwLCAweDQ2LCAweDhmLCAweDY0LCAweGMyLCAweDZiLCAweGMwLCAweDQ2LCAweGNhLCAweDY0LCAweGMyLCAweDg4LAotMHhjMCwgMHg0NiwgMHgwYSwgMHg4MCwgMHg4MiwgMHg3YSwgMHgxMiwgMHgwNiwgMHgwMywgMHg3YSwgMHgxYiwgMHgwNCwKLTB4MWEsIDB4NDMsIDB4YzMsIDB4ODgsIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4NDMsIDB4N2EsIDB4ZGIsIDB4MDcsCi0weDFhLCAweDQzLCAweDhhLCAweDYwLCAweDE3LCAweDFjLCAweDgzLCAweDdhLCAweDVhLCAweDA4LCAweDA1LCAweGQzLAotMHgxNCwgMHgyMiwgMHgxYywgMHgxYywgMHhhMywgMHgwOCwgMHgwMiwgMHhkMiwgMHgxNSwgMHgyMiwgMHgwMCwgMHhlMCwKLTB4MDAsIDB4MjIsIDB4MDAsIDB4N2EsIDB4NDMsIDB4MDgsIDB4MTAsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsCi0weDg4LCAweDIwLCAweDEwLCAweDQzLCAweDAxLCAweGUwLCAweDgwLCAweDIwLCAweDEwLCAweDQzLCAweDNhLCAweDBhLAotMHgxMiwgMHgwMiwgMHgwMSwgMHgyMywgMHgxYSwgMHg0MywgMHhjOCwgMHg2MCwgMHg4YSwgMHg2MCwgMHgwOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4NzgsIDB4ZmQsIDB4MDUsIDB4ZTAsIDB4MzgsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsCi0weDE4LCAweDQzLCAweDg4LCAweDYwLCAweGNhLCAweDYwLCAweDAzLCAweDQ4LCAweDAxLCAweDg5LCAweDAxLCAweDMxLAotMHgwMSwgMHg4MSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjQsIDB4MDIsIDB4NmQsIDB4MTQsIDB4NGMsIDB4MTUsIDB4MWMsIDB4ZTcsIDB4NjksIDB4YmQsIDB4NDAsCi0weDEzLCAweDFjLCAweDI2LCAweDZhLCAweGYzLCAweDQwLCAweDVkLCAweDQwLCAweDJlLCAweDFjLCAweDQ1LCAweDZkLAotMHhiZCwgMHg0MCwgMHg2ZSwgMHg0MCwgMHgyYiwgMHgxYywgMHgzNSwgMHgxYywgMHhmZCwgMHg0MCwgMHgyZiwgMHgxYywKLTB4YmIsIDB4MDAsIDB4NjUsIDB4NmEsIDB4ZWIsIDB4NTgsIDB4MDAsIDB4MmIsIDB4MDgsIDB4ZDAsIDB4MjMsIDB4NjksCi0weDAxLCAweDM3LCAweDlmLCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDI3LCAweGJlLCAweDAwLCAweGFlLCAweDU5LAotMHgwMCwgMHgyZSwgMHhmNywgMHhkMSwgMHhhNCwgMHg2OSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg0MywgMHgwNSwgMHg0YiwKLTB4MTksIDB4NDMsIDB4YmEsIDB4MDAsIDB4YTksIDB4NTAsIDB4NDAsIDB4MzAsIDB4ODcsIDB4ODMsIDB4ZjAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMywgMHgwMCwgMHgyOSwgMHgwNSwgMHhkOSwgMHgwNywgMHg3OCwKLTB4N2EsIDB4NDAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzMsIDB4OGIsIDB4NDIsIDB4ZjksIDB4ZDMsIDB4ZDAsIDB4NDMsCi0weDAwLCAweDA2LCAweDAwLCAweDBlLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgwMCwgMHgyNCwgMHhmZiwgMHgyNiwgMHgwOSwgMHgzNiwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5YSwgMHhmOCwKLTB4MDAsIDB4ZjAsIDB4YjgsIDB4ZjksIDB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzcsIDB4ZmEsIDB4M2QsIDB4NzAsCi0weDI4LCAweDFjLCAweDAxLCAweDM3LCAweDAxLCAweDM0LCAweGI0LCAweDQyLCAweGYxLCAweGQzLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwMCwgMHhmMCwgMHg5MywgMHhmOCwgMHgwMCwgMHhmMCwKLTB4YTcsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZmEsIDB4MzgsIDB4MGEsIDB4ZjYsIDB4ZDMsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYzLCAweGI1LCAweDgyLCAweGIwLCAweDAyLCAweDk4LAotMHg0MSwgMHgwMiwgMHg1MywgMHgyMCwgMHgwMCwgMHhmMCwgMHg2NCwgMHhmOCwgMHgwMCwgMHhmMCwgMHhhOCwgMHhmYSwKLTB4ZmYsIDB4ZjcsIDB4ZTgsIDB4ZmYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MmUsIDB4MjAsCi0weDAwLCAweDkwLCAweDAwLCAweDI1LCAweDAwLCAweDI3LCAweDAyLCAweDk4LCAweDAxLCAweDI4LCAweDA0LCAweGQxLAotMHgwMCwgMHg5OCwgMHg4NCwgMHg0MiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyNiwKLTB4MDksIDB4ZTAsIDB4MDEsIDB4OTgsIDB4NDEsIDB4MWMsIDB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4NjAsIDB4ZjgsCi0weDAwLCAweGYwLCAweDdlLCAweGY5LCAweDA2LCAweDFjLCAweDAwLCAweGYwLCAweDhkLCAweGZhLCAweGY4LCAweDAwLAotMHg4NiwgMHg0MCwgMHgzNSwgMHg0MywgMHgwMSwgMHgzNCwgMHgwMSwgMHgzNywgMHgwNCwgMHgyZiwgMHhlNiwgMHhkMywKLTB4MDMsIDB4OTksIDB4MjAsIDB4YzEsIDB4MDMsIDB4OTEsIDB4ZmYsIDB4MjMsIDB4MDksIDB4MzMsIDB4OWMsIDB4NDIsCi0weGRkLCAweGQzLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI1LAotMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgwMSwgMHgyYywgMHgyYSwgMHhkMCwgMHgxNiwgMHg0OCwgMHhjMCwgMHg2ZiwKLTB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjYsIDB4MjAsIDB4Y2YsCi0weGIxLCAweDAwLCAweDg0LCAweDIwLCAweDAwLCAweGYwLCAweDI0LCAweGY4LCAweDI4LCAweDFjLCAweDAwLCAweGYwLAotMHhkZiwgMHhmOSwgMHgyOCwgMHgwYSwgMHgwMCwgMHhmMCwgMHhkYywgMHhmOSwgMHgyOCwgMHgwYywgMHgwMCwgMHhmMCwKLTB4ZDksIDB4ZjksIDB4MjgsIDB4MGUsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4ZjksIDB4MDAsIDB4ZjAsIDB4NWMsIDB4ZmEsCi0weDAxLCAweDM2LCAweDQyLCAweDJlLCAweGU5LCAweGQzLCAweDYxLCAweDAyLCAweDgzLCAweDIwLCAweDAwLCAweGYwLAotMHgwZiwgMHhmOCwgMHgwMCwgMHhmMCwgMHg1MywgMHhmYSwgMHhmZiwgMHhmNywgMHg5MywgMHhmZiwgMHgwNCwgMHg0OCwKLTB4YzAsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgwMCwgMHhmMCwgMHg1OSwgMHhmYSwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmOSwKLTB4MzgsIDB4MGMsIDB4MDAsIDB4ZjAsIDB4YjMsIDB4ZjksIDB4MzgsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjksCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweGFkLCAweGY5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywgMHg1NCwgMHgyMCwgMHhmZiwgMHhmNywgMHhlNywgMHhmZiwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4ZjAsIDB4YTIsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4MDAsIDB4ZjAsCi0weDNkLCAweGZhLCAweDU3LCAweDIwLCAweDAwLCAweGYwLCAweDlhLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg5MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHhmYSwgMHg2ZiwgMHgyMCwgMHgyMywgMHgxNCwgMHg2OCwgMHg5YywgMHg0MywKLTB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmYsIDB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHhmYSwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MTQsIDB4NjgsIDB4OWMsIDB4NDMsIDB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODcsIDB4ZmYsCi0weGY4LCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MGYsIDB4MWMsIDB4MTgsIDB4NGUsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsCi0weDAxLCAweDYwLCAweDYxLCAweDAyLCAweDUzLCAweDIwLCAweGZmLCAweGY3LCAweGE1LCAweGZmLCAweDAwLCAweGYwLAotMHhlOSwgMHhmOSwgMHhmZiwgMHhmNywgMHgyOSwgMHhmZiwgMHhmOCwgMHgxZCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgyYywKLTB4MDMsIDB4ZDEsIDB4MjIsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4MGYsIDB4ZTAsIDB4NDQsIDB4MWMsCi0weGZmLCAweGY3LCAweGFhLCAweGZmLCAweDAwLCAweGYwLCAweGM4LCAweGY4LCAweDA3LCAweDFjLCAweDAwLCAweGYwLAotMHhkNywgMHhmOSwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHhhMiwgMHhmZiwgMHgwMCwgMHhmMCwgMHhjMCwgMHhmOCwKLTB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZjksIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDI4LCAweDAyLCAweDM4LCAweDQzLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHhjMiwgMHhiMCwKLTB4MTQsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MmYsIDB4MmYsIDB4ZDAsIDB4NzksIDB4MDIsCi0weDE5LCAweDRlLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLAotMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHg2YiwgMHhmZiwgMHgwMCwgMHhmMCwgMHhhZiwgMHhmOSwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4ZDYsIDB4ZmUsIDB4NmEsIDB4NDYsIDB4ZTgsIDB4MWQsCi0weDA1LCAweDMwLCAweDE0LCAweDU0LCAweDIxLCAweDBhLCAweDY4LCAweDQ0LCAweDQxLCAweDcwLCAweDY4LCAweDQ2LAotMHgwMCwgMHg5OSwgMHgwYywgMHgzMCwgMHhmZiwgMHhmNywgMHhiYSwgMHhmZSwgMHgwMiwgMHhhYiwgMHgxOCwgMHg3MCwKLTB4MDAsIDB4MjAsIDB4NTgsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsCi0weGZmLCAweGY3LCAweGIyLCAweGZlLCAweDAyLCAweGFiLCAweDU4LCAweDcwLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgxNSwgMHhmZiwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4NDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZmLCAweGI1LCAweGMyLCAweGIwLCAweDA3LCAweDFjLCAweDAxLCAweDJmLAotMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwgMHgzNiwgMHhlMCwgMHg2YiwgMHg0NiwgMHgwMCwgMHgyMCwgMHhjNCwgMHg0MywKLTB4MTAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4NDIsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MzAsCi0weDAzLCAweDFjLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDBhLCAweGQ5LCAweDBlLCAweDg4LCAweGMwLCAweDQ2LAotMHgwNiwgMHg3MCwgMHgwZSwgMHg4OCwgMHgzNiwgMHgxMiwgMHg0NiwgMHg3MCwgMHgwMiwgMHgzMCwgMHgwMiwgMHgzMSwKLTB4MDIsIDB4MzQsIDB4OTQsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4OTIsIDB4MTgsIDB4MWMsIDB4MTEsIDB4MWMsCi0weGZmLCAweGY3LCAweDdjLCAweGZlLCAweDA0LCAweDFjLCAweDAwLCAweDIwLCAweDAxLCAweDkwLCAweDAyLCAweGFiLAotMHgxYywgMHg3MCwgMHg1OCwgMHg3MCwgMHg5ZCwgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwgMHhmZiwgMHhmNywKLTB4NzEsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NDUsIDB4OWIsIDB4MWQsIDB4MDYsIDB4MmQsIDB4MGUsCi0weGFjLCAweDQyLCAweDAzLCAweGQxLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDNlLCAweGZmLAotMHgwMSwgMHgyMCwgMHhhYywgMHg0MiwgMHgwMCwgMHhkMSwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YzIsIDB4YjAsIDB4MGYsIDB4MWMsIDB4NDEsIDB4MDIsCi0weDE0LCAweDRjLCAweGUwLCAweDZmLCAweDIwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLAotMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHhlZiwgMHhmZSwgMHgwMCwgMHhmMCwgMHgzMywgMHhmOSwgMHhmZiwgMHhmNywKLTB4NzMsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NWEsIDB4ZmUsIDB4ZTAsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAyLCAweGFkLCAweDAxLCAweDYwLCAweDZkLCAweDc4LCAweDAwLCAweDI0LAotMHgwMiwgMHhhYiwgMHg1YywgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwgMHhmZiwgMHhmNywgMHgzYywgMHhmZSwKLTB4YTgsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4OTgsIDB4ODcsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MjAsIDB4MWMsCi0weDAwLCAweGUwLCAweDAxLCAweDIwLCAweDQyLCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4YjQsIDB4MjIsIDB4OWYsIDB4ZTUsIDB4YjQsIDB4MzIsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4ODEsIDB4MDMsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHgwMSwgMHgwMywgMHg4MCwgMHhlMSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHg4MSwgMHgwMiwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHgwMSwgMHgwMiwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAweDgxLCAweDAxLCAweDgwLCAweGUxLAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDkzLCAweGU1LCAweDAxLCAweDAxLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDgxLCAweDAwLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDAxLCAweDAwLCAweDgwLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LAotMHhhNCwgMHgyMSwgMHg5ZiwgMHhlNSwgMHhhOCwgMHgzMSwgMHg5ZiwgMHhlNSwgMHhhMCwgMHgxMywgMHhhMCwgMHhlMSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgyMCwgMHgxMywgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHhhMCwgMHgxMiwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDIwLCAweDEyLCAweGEwLCAweGUxLAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweGEwLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDIwLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4YTAsIDB4MTAsIDB4YTAsIDB4ZTEsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4YTAsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDcwLCAweDMwLCAweDlmLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHgzNCwgMHgyMCwgMHg5ZiwgMHhlNSwKLTB4M2MsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGY4LCAweDAwLCAweDE4LCAweDQwLAotMHgwNCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhmYywgMHgwMCwgMHgxOCwgMHg0MCwKLTB4ODAsIDB4YjUsIDB4MDAsIDB4ZjAsIDB4MGMsIDB4ZjgsIDB4MDAsIDB4MjcsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDQ3LCAweGY4LCAweDc4LCAweDFjLCAweDA3LCAweDA0LCAweDNmLCAweDBjLCAweDBjLCAweDJmLCAweGY3LCAweGRkLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxZCwgMHg0OCwKLTB4MDIsIDB4NjgsIDB4MWQsIDB4NDksIDB4OGIsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjAsIDB4MDIsIDB4NjYsCi0weDhhLCAweDZhLCAweDQzLCAweDY4LCAweDliLCAweDE4LCAweDQzLCAweDYwLCAweDkzLCAweDQyLCAweDAyLCAweGQyLAotMHg4MiwgMHg2OCwgMHgwMSwgMHgzMiwgMHg4MiwgMHg2MCwgMHhjMiwgMHg2OCwgMHgwYiwgMHg2YSwgMHhkMiwgMHgxOCwKLTB4YzIsIDB4NjAsIDB4NDIsIDB4NjksIDB4Y2IsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4NDIsIDB4NjEsIDB4YzIsIDB4NjksCi0weDhiLCAweDY4LCAweGQyLCAweDE4LCAweGMyLCAweDYxLCAweDAyLCAweDY5LCAweDBiLCAweDY5LCAweGQyLCAweDE4LAotMHgwMiwgMHg2MSwgMHg4MiwgMHg2OSwgMHgwYiwgMHg2OCwgMHhkMiwgMHgxOCwgMHg4MiwgMHg2MSwgMHgwMiwgMHg2YiwKLTB4Y2IsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjMsIDB4NGEsIDB4NmEsIDB4NDMsIDB4NmIsIDB4OWIsIDB4MTgsCi0weDQzLCAweDYzLCAweDkzLCAweDQyLCAweDAyLCAweGQyLCAweDgyLCAweDZiLCAweDAxLCAweDMyLCAweDgyLCAweDYzLAotMHhjMiwgMHg2YiwgMHg0YiwgMHg2OSwgMHhkMiwgMHgxOCwgMHhjMiwgMHg2MywgMHgwMiwgMHg2YywgMHhjOSwgMHg2YSwKLTB4NTEsIDB4MTgsIDB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDA4LCAweDE0LCAweDQwLCAweDg4LCAweGI1LCAweDY5LCAweDQ2LCAweDAwLCAweGYwLCAweDE3LCAweGY4LAotMHg4MSwgMHgwOCwgMHgwYSwgMHhkMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyOSwgMHgwNywgMHhkOSwgMHgwMCwgMHgyMiwKLTB4ODMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODgsIDB4NDIsCi0weGY4LCAweGQzLCAweDg4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDAwLCAweGYwLAotMHgwNCwgMHhmOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDIsIDB4MjgsIDB4MGMsIDB4ZDAsCi0weDAzLCAweDI4LCAweDAyLCAweGQxLCAweDA3LCAweDQ4LCAweDFjLCAweDIyLCAweDA4LCAweDYwLCAweDEwLCAweDFjLAotMHg3MCwgMHg0NywgMHgwNiwgMHg0OCwgMHgwNCwgMHhlMCwgMHgwNiwgMHg0OCwgMHg1MCwgMHgyMiwgMHgwOCwgMHg2MCwKLTB4ZjcsIDB4ZTcsIDB4MDUsIDB4NDgsIDB4NjgsIDB4MjIsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDA4LCAweDgzLCAweDIwLCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg4MCwgMHhiNCwgMHgwMywgMHgyMiwgMHhjMiwgMHg4MCwgMHgxNSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4ODIsIDB4NjAsIDB4MTQsIDB4NGEsIDB4MTIsIDB4ODgsIDB4MDEsIDB4MzIsIDB4YzIsIDB4NjAsCi0weDAwLCAweDIwLCAweDEzLCAweDRhLCAweDEzLCAweDVjLCAweGMwLCAweDQ2LCAweDBiLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgyMCwgMHgyMiwgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMSwKLTB4MDAsIDB4MjAsIDB4MGUsIDB4NGIsIDB4MWYsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGYsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDBhLCAweDcwLCAweDAxLCAweDMxLCAweDAwLCAweDIwLAotMHgwOSwgMHg0YSwgMHgxMywgMHg1YywgMHhjMCwgMHg0NiwgMHgwYiwgMHg3MCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMSwKLTB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDgsIDB4NzAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDA4LCAweDEwLCAweDAwLCAweDAzLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDA0LCAweDAwLCAweDgwLAotMHg4NSwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4ZSwgMHgwNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMywKLTB4MGEsIDB4NDgsIDB4YzEsIDB4MWQsIDB4ODksIDB4MzEsIDB4NGIsIDB4NzAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4NzAsCi0weDY0LCAweDIxLCAweDgwLCAweDMwLCAweGMxLCAweDgyLCAweDAxLCAweDgzLCAweDQzLCAweDgzLCAweDdkLCAweDIxLAotMHhjOSwgMHgwMCwgMHg4MSwgMHg4MywgMHhjMiwgMHg4MywgMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MDAsIDB4ZjAsIDB4OGUsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGI1LCAweDIyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGUxLCAweGZmLCAweDEzLCAweDQ4LAotMHgwMiwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg4MCwgMHhmYiwgMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwKLTB4MGEsIDB4ZDEsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4Y2EsIDB4ODgsIDB4MDEsIDB4MzIsCi0weGNhLCAweDgwLCAweDgxLCAweDc5LCAweDAxLCAweDMxLCAweDgxLCAweDcxLCAweGZkLCAweGY3LCAweDcwLCAweGY5LAotMHgwYiwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwNSwgMHhkMSwgMHgwYSwgMHg0OCwgMHg3ZCwgMHgyMiwKLTB4ZDIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmIsIDB4MDgsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weGUxLCAweGZjLCAweDA4LCAweDQ4LCAweDI4LCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDYwLCAweGZiLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OSwgMHgyMSwgMHhmZiwgMHhmZiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YTUsIDB4N2IsIDB4MjEsIDB4NDAsCi0weDk1LCAweDJjLCAweGZmLCAweGZmLCAweDU5LCAweDAzLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDEwLCAweDIwLAotMHgwZiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwZiwgMHg0YSwgMHgwZiwgMHg0OCwgMHg2NCwgMHgyMSwKLTB4ZmIsIDB4ZjcsIDB4YzYsIDB4ZmMsIDB4MGUsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDEsIDB4NjgsCi0weDBhLCAweDQwLCAweDA4LCAweDIxLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDAyLCAweDY4LCAweDEyLCAweDBjLAotMHgwNywgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwNCwgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4YzEsIDB4NjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGE1LCAweDU1LCAweGZmLCAweGZmLAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MjcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAxLCAweDY4LCAweDBhLCAweDQwLCAweDA3LCAweDIxLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDAyLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgyMSwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsCi0weDFmLCAweDQ4LCAweGZiLCAweGY3LCAweDg3LCAweGZjLCAweDFmLCAweDQ4LCAweGMxLCAweDZiLCAweGZmLCAweDI5LAotMHhmYywgMHhkMSwgMHg4MSwgMHg2YiwgMHg0MiwgMHg2YiwgMHgxNiwgMHgxYywgMHgwZiwgMHgxYywgMHgxYywgMHg0YywKLTB4MTAsIDB4MjMsIDB4NjAsIDB4NjksIDB4MTgsIDB4NDMsIDB4NjAsIDB4NjEsIDB4YTEsIDB4NjksIDB4OTksIDB4NDMsCi0weDFkLCAweDA0LCAweGExLCAweDYxLCAweGU4LCAweDYwLCAweGEwLCAweDY5LCAweGMwLCAweDQ2LCAweDI4LCAweDYxLAotMHgxNiwgMHg0YSwgMHgxNywgMHg0OSwgMHg2NCwgMHgyMCwgMHhmYiwgMHhmNywgMHg2ZiwgMHhmYywgMHgxNiwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MTUsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MzksIDB4MWMsIDB4MzIsIDB4MWMsCi0weGZiLCAweGY3LCAweDZlLCAweGZjLCAweDEzLCAweDQ4LCAweGMxLCAweDY4LCAweDA4LCAweDI5LCAweGZjLCAweGQxLAotMHgxMiwgMHg0OCwgMHhmYiwgMHhmNywgMHg1ZCwgMHhmYywgMHgxMCwgMHgyMywgMHg2MCwgMHg2OSwgMHg5OCwgMHg0MywKLTB4NjAsIDB4NjEsIDB4ZTgsIDB4NjAsIDB4MDEsIDB4MjAsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsCi0weGM4LCAweDcxLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweGI2LCAweDIxLCAweDQwLCAweDY0LCAweDAwLCAweDMwLCAweDAyLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZCwgMHhmNywKLTB4MDEsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4MzIsIDB4ZmMsIDB4ZmQsIDB4ZjcsIDB4ZDYsIDB4ZmUsCi0weGZlLCAweGY3LCAweDA0LCAweGY4LCAweGZlLCAweGY3LCAweDE2LCAweGY4LCAweGZlLCAweGY3LCAweDI0LCAweGY4LAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MSwgMHgwMywgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNSwgMHhmZCwgMHhmNywKLTB4NmIsIDB4ZmMsIDB4MzQsIDB4NGYsIDB4MDAsIDB4MjQsIDB4ZjksIDB4NjgsIDB4ZjgsIDB4MWQsIDB4NzksIDB4MzAsCi0weDAxLCAweDI5LCAweDBmLCAweGQxLCAweDMxLCAweDQ5LCAweGMwLCAweDQ2LCAweGY5LCAweDY3LCAweDMxLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHgzMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwYywgMHg2MCwgMHg0YywgMHg2MCwKLTB4OGMsIDB4NjAsIDB4Y2MsIDB4NjAsIDB4MGMsIDB4NjEsIDB4NGMsIDB4NjEsIDB4OGMsIDB4NjEsIDB4MDQsIDB4ZTAsCi0weGY5LCAweDFkLCAweDdkLCAweDMxLCAweGY5LCAweDY3LCAweDEyLCAweGMwLCAweDA4LCAweDM4LCAweDAwLCAweDY4LAotMHg2MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDk5LCAweDQzLCAweDAxLCAweDYwLCAweDAwLCAweGYwLCAweDU0LCAweGY4LCAweGZkLCAweGY3LCAweDRlLCAweGZjLAotMHgwMCwgMHhmMCwgMHg1ZSwgMHhmOSwgMHhmZCwgMHhmNywgMHg3MywgMHhmOCwgMHhmZiwgMHhmNywgMHgwYywgMHhmZSwKLTB4ZmQsIDB4ZjcsIDB4MmUsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4YjYsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4YzIsIDB4ZmUsCi0weGZkLCAweGY3LCAweDU0LCAweGZkLCAweGZkLCAweGY3LCAweDBhLCAweGZkLCAweGZkLCAweGY3LCAweDk0LCAweGZkLAotMHgwMCwgMHhmMCwgMHgxYSwgMHhmYSwgMHhmZCwgMHhmNywgMHg5YywgMHhmZiwgMHhmZCwgMHhmNywgMHgwYSwgMHhmZiwKLTB4ZmQsIDB4ZjcsIDB4ZDIsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4M2MsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4ZGMsIDB4ZmEsCi0weGZmLCAweGY3LCAweDljLCAweGZmLCAweDcxLCAweDIzLCAweDViLCAweDAxLAotMHhmOCwgMHgxOCwgMHgwNCwgMHg3MiwgMHg0NCwgMHg3MiwgMHgwNywgMHgyMywgMHg1YiwgMHgwMiwgMHhmOCwgMHgxOCwKLTB4MDQsIDB4NjMsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4YTgsIDB4MjAsIDB4ZmUsIDB4ZjcsCi0weGIxLCAweGZkLCAweDA5LCAweDQ4LCAweGMwLCAweDQ2LCAweDQ0LCAweDYyLCAweDAwLCAweGYwLCAweDE4LCAweGZhLAotMHgwNywgMHg0OCwgMHhmYiwgMHhmNywgMHhiZCwgMHhmYiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MTEsIDB4NDAsCi0weDAwLCAweDAxLCAweDExLCAweDAwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDE1LCAweDhmLCAweDIxLCAweDQwLAotMHgwMCwgMHhiNSwgMHgwNCwgMHg0OCwgMHhmYiwgMHhmNywgMHhhYSwgMHhmYiwgMHhmZCwgMHhmNywgMHg1ZSwgMHhmZiwKLTB4ZmQsIDB4ZjcsIDB4MjQsIDB4ZmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MTUsIDB4OTksIDB4MjEsIDB4NDAsCi0weGZhLCAweDIxLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAweDQxLCAweDYyLCAweDQwLCAweDIxLCAweDQxLCAweDYyLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDcsIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjEsIDB4ODIsIDB4NjksIDB4OWEsIDB4NDMsIDB4ODIsIDB4NjEsCi0weDAxLCAweDIyLCAweDEyLCAweDA1LCAweGQxLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDYxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZSwgMHhhZiwgMHg5YSwgMHgxMCwKLTB4MDAsIDB4YjUsIDB4MDIsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4ODAsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGM4LCAweDU3LCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDI0LCAweDRjLCAweDAxLCAweDIxLCAweDA5LCAweDA0LAotMHgyMCwgMHg2OCwgMHgwMSwgMHg0MCwgMHgwOSwgMHgyMCwgMHgyMiwgMHg0ZSwgMHgyMiwgMHg0ZCwgMHgwMCwgMHgyOSwKLTB4MDUsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDQsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4ODksIDB4MGEsCi0weDAxLCAweGQzLCAweGYwLCAweDYwLCAweDAwLCAweGUwLCAweDI4LCAweDY0LCAweDFkLCAweDQ4LCAweGZiLCAweGY3LAotMHg2NSwgMHhmYiwgMHgxZCwgMHg0ZiwgMHgxZCwgMHg0OSwgMHg4OCwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4OCwgMHg2MSwKLTB4MzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4NzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsCi0weDE5LCAweDQ4LCAweGZiLCAweGY3LCAweDU3LCAweGZiLCAweDE5LCAweDQ4LCAweGZiLCAweGY3LCAweDU0LCAweGZiLAotMHgwMCwgMHgyOCwgMHhmYSwgMHhkMSwgMHgzOCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgxNiwgMHg0OCwKLTB4ZmIsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDQsIDB4MjAsIDB4NjgsIDB4MDEsIDB4NDAsCi0weDE0LCAweDIwLCAweDAwLCAweDI5LCAweDA1LCAweGQxLCAweDIxLCAweDY4LCAweDA5LCAweDBjLCAweDA0LCAweGQxLAotMHgyMSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMSwgMHhkMywgMHhmMCwgMHg2MCwgMHgwMSwgMHhlMCwgMHgyOCwgMHg2NCwKLTB4ZmYsIDB4ZTcsIDB4ZmUsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmQsIDB4MGIsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weDM1LCAweGZiLCAweGZmLCAweGY3LCAweGFmLCAweGZmLCAweGNkLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweDA3LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDk5LCAweDlmLCAweDIxLCAweDQwLAotMHgwMCwgMHgyMCwgMHgwNywgMHg0YSwgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNSwgMHg1MCwgMHg2MSwgMHhjOCwgMHg2MCwKLTB4ZDAsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MDMsIDB4NGEsIDB4MDEsIDB4MjEsCi0weGQxLCAweDYzLCAweDU4LCAweDYwLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHhiNSwgMHhjMCwgMHhiMCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MGEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4ZDEsIDB4ZmYsIDB4MDcsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4MjgsIDB4ZDAsCi0weDY5LCAweDQ2LCAweGZmLCAweDIyLCAweDM4LCAweDFjLCAweDAxLCAweDMyLCAweGZkLCAweGY3LCAweDU0LCAweGY5LAotMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHg5OCwgMHg0MiwgMHgxYiwgMHhkMSwgMHgwZCwgMHg5OCwgMHgwMCwgMHgwOSwKLTB4MTgsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4OGQsIDB4ZjgsIDB4MGUsIDB4NDksIDB4MDEsIDB4MjIsCi0weDEyLCAweDA0LCAweDA4LCAweDY4LCAweDAyLCAweDQwLCAweDBkLCAweDQ4LCAweDA1LCAweGQxLCAweDBhLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwOSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMywgMHhkMywgMHgwYSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsCi0weGZmLCAweGY3LCAweGJjLCAweGZmLCAweDM4LCAweDFjLCAweGZkLCAweGY3LCAweDc0LCAweGY4LCAweDQwLCAweGIwLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDE3LCAweDQ5LCAweDAxLCAweDIyLCAweDEyLCAweDA0LAotMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwNiwgMHgyMCwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwYSwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDksIDB4NjgsIDB4ODksIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MTEsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAyLCAweGUwLCAweDEwLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDY0LAotMHgwMywgMHgyMCwgMHhmZSwgMHhmNywgMHhkMywgMHhmYywgMHhmYiwgMHhmNywgMHgwZCwgMHhmZiwgMHgwMSwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZmIsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmUsIDB4ZmYsIDB4ZjcsCi0weDlkLCAweGZmLCAweGZmLCAweGY3LCAweDA1LCAweGZlLCAweGZmLCAweGY3LCAweGY1LCAweGZlLCAweGZmLCAweGY3LAotMHgwOSwgMHhmZiwgMHhmZiwgMHhmNywgMHg5YiwgMHhmZCwgMHhmZiwgMHhmNywgMHgyMSwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDQ2LCAweDRhLCAweDAxLCAweDIxLCAweGM5LCAweDAzLAotMHg0NSwgMHg0ZCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhlYywgMHgxOCwgMHhhMSwgMHg2MSwgMHgyOCwgMHg4OCwKLTB4NDAsIDB4MDQsIDB4NDMsIDB4NGIsIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWEsIDB4MDQsIDB4MjAsIDB4YWYsIDB4NjAsCi0weDQxLCAweDRlLCAweGMwLCAweDQ2LCAweGIwLCAweDYxLCAweDA4LCAweDIwLCAweGM4LCAweDIzLCAweDQzLCAweDQzLAotMHhiYiwgMHg0MiwgMHgyMSwgMHhkOSwgMHg0MSwgMHgwMCwgMHgzZCwgMHg0ZSwgMHhjMCwgMHg0NiwgMHgzMSwgMHg2MSwKLTB4YjYsIDB4NjksIDB4MjAsIDB4MjMsIDB4OWIsIDB4MWIsIDB4M2EsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjMsIDB4NjEsCi0weDEwLCAweDNiLCAweDMzLCAweDYyLCAweDhiLCAweDAwLCAweGZmLCAweDFhLCAweDQwLCAweDA4LCAweDgxLCAweDQyLAotMHgxNywgMHhkMywgMHhiOCwgMHgyMywgMHg0MywgMHg0MywgMHhiYiwgMHg0MiwgMHgwOCwgMHhkOSwgMHg0MSwgMHgxZSwKLTB4MzIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4OTksIDB4ODEsIDB4ZDksIDB4ODEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MzgsCi0weDU4LCAweDYxLCAweDBhLCAweGUwLCAweDAxLCAweDMwLCAweDgxLCAweDQyLCAweGVmLCAweGQyLCAweDA2LCAweGUwLAotMHgyYywgMHg0ZSwgMHhiMywgMHg2OSwgMHgwMSwgMHgzMywgMHhiMywgMHg2MSwgMHg0MCwgMHgwMCwgMHg4OCwgMHg0MiwKLTB4ZDIsIDB4ZDksIDB4MmEsIDB4NDksIDB4MDAsIDB4MjAsIDB4YTMsIDB4NjksIDB4OWIsIDB4MDgsIDB4MDcsIDB4ZDAsCi0weDI4LCAweDRiLCAweDg3LCAweDAwLCAweGNiLCAweDUxLCAweGE3LCAweDY5LCAweGJmLCAweDA4LCAweDAxLCAweDMwLAotMHg4NywgMHg0MiwgMHhmOCwgMHhkOCwgMHgyMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MiwgMHg4YywgMHg4OSwKLTB4NTgsIDB4MjAsIDB4NjAsIDB4NDMsIDB4ODcsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmMsCi0weDBhLCAweGRkLCAweDU4LCAweDIzLCAweDQzLCAweDQzLCAweDhjLCAweDZhLCAweGUzLCAweDE4LCAweDAxLCAweDMwLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg5YSwgMHg2MCwgMHg4YiwgMHg4OSwgMHg4MywgMHg0MiwgMHhmNCwgMHhkYywKLTB4Y2YsIDB4NjIsIDB4Y2MsIDB4ODksIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4MDEsIDB4YzcsIDB4MTksCi0weDAwLCAweDIwLCAweDAwLCAweDJjLCAweDBiLCAweGRkLCAweDQzLCAweDAwLCAweDFiLCAweDE4LCAweDViLCAweDAxLAotMHhjYywgMHg2YSwgMHhlMywgMHgxOCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg5YSwgMHg2MCwKLTB4Y2IsIDB4ODksIDB4ODMsIDB4NDIsIDB4ZjMsIDB4ZGMsIDB4NGYsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MGIsIDB4NjksCi0weDAwLCAweDJiLCAweDA3LCAweGQ5LCAweDg3LCAweDAwLCAweDRiLCAweDZhLCAweGMwLCAweDQ2LCAweGRhLCAweDUxLAotMHgwYiwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4MywgMHg0MiwgMHhmNywgMHhkOCwgMHg0OSwgMHg2YSwgMHg4MCwgMHgwMCwKLTB4MDgsIDB4MTgsIDB4MDQsIDB4MzgsIDB4MjgsIDB4NjEsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGIwLCAweGJlLCAweDIxLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHhhZCwgMHhkZSwgMHgwMCwKLTB4MGEsIDB4NDgsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksCi0weDQxLCAweDYxLCAweGQxLCAweDYwLCAweDAwLCAweDIxLCAweGExLCAweDIyLCAweDUyLCAweDAzLCAweDkxLCAweDYxLAotMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2MSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNiwKLTB4NTksIDB4MDUsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI0LCAweDAyLCAweDFjLCAweDBiLCAweDQ4LCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMzLCAweDE4LAotMHg5YSwgMHg2MSwgMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MiwgMHg2OSwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MSwKLTB4ODcsIDB4NjksIDB4OWYsIDB4NDMsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDUsCi0weDg3LCAweDYxLCAweGRhLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDE4LCAweDYxLCAweGExLCAweDIwLAotMHg0MCwgMHgwMywgMHg4MSwgMHg2MSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzksIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjgsCi0weDAwLCAweDIwLCAweDA5LCAweDQ5LCAweDAwLCAweDIyLCAweDAzLCAweDAxLCAweDVmLCAweDE4LCAweDMzLCAweDIzLAotMHg5YiwgMHgwMSwgMHhmYiwgMHgxOCwgMHg5YSwgMHg2MiwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhmNiwgMHhkMywKLTB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MzMsIDB4ZjgsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDFkLCAweDNlLCAweGZmLCAweGZmLAotMHgwMCwgMHhiNSwgMHgwMiwgMHg0OCwgMHgwMCwgMHhmMCwgMHgwNCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTgsIDB4NjEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGYsIDB4NGIsCi0weGExLCAweDIxLCAweDQ5LCAweDAzLCAweDAwLCAweDI4LCAweDBlLCAweGQwLCAweGM4LCAweDYxLCAweDE4LCAweDFjLAotMHg1OSwgMHg2OSwgMHg1MywgMHgwMSwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MSwgMHg4NywgMHg2OSwgMHg5ZiwgMHg0MywKLTB4ODcsIDB4NjEsIDB4ZDEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjEsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDE4LCAweDFjLCAweDVmLCAweDY5LCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDlmLCAweDQzLAotMHg0NywgMHg2MSwgMHhkNywgMHg2MCwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MSwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDcsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MTcsIDB4NGMsCi0weDAzLCAweDAxLCAweDFkLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAweDlkLCAweDZhLAotMHhiZCwgMHg0MiwgMHgwNSwgMHhkMSwgMHgxZCwgMHg2YiwgMHg5NSwgMHg0MiwgMHgwMiwgMHhkMSwgMHhkYiwgMHg2YSwKLTB4OGIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZWUsIDB4ZDMsIDB4MDAsIDB4MjAsCi0weDAzLCAweDAxLCAweDFkLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAweDliLCAweDZhLAotMHgwMCwgMHgyYiwgMHgwOSwgMHhkMSwgMHgwMywgMHgwMSwgMHgxYywgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwKLTB4ZTMsIDB4MTgsIDB4MWEsIDB4NjMsIDB4ZDksIDB4NjIsIDB4NWEsIDB4NjMsIDB4OWYsIDB4NjIsIDB4MDIsIDB4ZTAsCi0weDAxLCAweDMwLCAweDBiLCAweDI4LCAweGVhLCAweGQzLCAweDBiLCAweDI4LCAweDAxLCAweGQxLCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDEsIDB4MWMsIDB4MDAsIDB4MjIsIDB4MDEsIDB4MjAsIDB4MTYsIDB4NGYsIDB4MDEsIDB4ZTAsCi0weDAwLCAweDJhLCAweDA3LCAweGQxLCAweDAzLCAweDAxLCAweGRjLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLAotMHhlMywgMHgxOCwgMHg5YiwgMHg2OSwgMHg4YiwgMHg0MiwgMHgxMSwgMHhkMSwgMHgwMiwgMHgwMSwgMHhkMiwgMHgxOSwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4OTMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OTMsIDB4NjEsCi0weGQzLCAweDZhLCAweGMwLCAweDQ2LCAweGQzLCAweDYxLCAweDEzLCAweDZiLCAweGMwLCAweDQ2LCAweDEzLCAweDYyLAotMHg1MywgMHg2YiwgMHhjMCwgMHg0NiwgMHg1MywgMHg2MiwgMHgwMSwgMHgyMiwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwKLTB4ZTAsIDB4ZDMsIDB4MDcsIDB4NGIsIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4OWEsIDB4NjgsIDB4OGEsIDB4NDIsCi0weDAzLCAweGQxLCAweDAwLCAweDIxLCAweDk5LCAweDYwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHhmYSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlOCwgMHgxYiwgMHgwMCwgMHg4MCwKLTB4MGIsIDB4MjgsIDB4MTcsIDB4ZGEsIDB4MGMsIDB4NDksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4OGEsIDB4NjksCi0weDEzLCAweDQzLCAweDAxLCAweDIyLCAweDEyLCAweDA1LCAweDhiLCAweDYxLCAweDEzLCAweDYxLCAweDAwLCAweDAxLAotMHg0MCwgMHgxOCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHgwMywgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDMsIDB4NjMsIDB4NTMsIDB4MDEsIDB4ODgsIDB4NjksIDB4OTgsIDB4NDMsIDB4ODgsIDB4NjEsIDB4MTAsIDB4NjEsCi0weDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZjLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwOCwgMHg0YSwgMHhkMCwgMHg2OSwgMHgwMCwgMHgyMSwgMHgwNywgMHg0ZiwgMHhkMywgMHg2OSwKLTB4ODMsIDB4NDIsIDB4MDIsIDB4ZDksIDB4ZmMsIDB4MWEsIDB4MjAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4YzAsIDB4MWEsCi0weDA5LCAweDE4LCAweDE4LCAweDFjLCAweGI5LCAweDQyLCAweGY0LCAweGQ5LCAweDkwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHgxNCwgMHg0MCwgMHhhOCwgMHg2MSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MDAsIDB4MjQsIDB4MDAsIDB4MmYsIDB4MDQsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmYsIDB4MDEsIDB4MzQsCi0weGJjLCAweDQyLCAweGZhLCAweGQ5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggM2FmOWE5NS4uOWRkNGY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMTAwLDEwICsxMDAsMTEgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInR5cGhvb24iCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAJIjEuNS44IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjA2LzExLzA5IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gCSIxLjUuOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXIgMiwgMjAwOSIKICNkZWZpbmUgUEZYCQkJRFJWX01PRFVMRV9OQU1FICI6ICIKICNkZWZpbmUgRVJSX1BGWAkJCUtFUk5fRVJSIFBGWAorI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkiM2NvbS90eXBob29uLmJpbiIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTI5LDkgKzEzMCw5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJ0eXBob29uLmgiCi0jaW5jbHVkZSAidHlwaG9vbi1maXJtd2FyZS5oIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgICAgInR5cGhvb24uYzogdmVyc2lvbiAiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKQEAgLTEzOSw2ICsxNDAsNyBAQAogTU9EVUxFX0FVVEhPUigiRGF2aWQgRGlsbG93IDxkYXZlQHRoZWRpbGxvd3Mub3JnPiIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9OQU1FKTsKIE1PRFVMRV9ERVNDUklQVElPTigiM0NvbSBUeXBob29uIEZhbWlseSAoM0M5OTAsIDNDUjk5MCwgYW5kIHZhcmlhbnRzKSIpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssICJQYWNrZXRzIHNtYWxsZXIgdGhhbiB0aGlzIGFyZSBjb3BpZWQgYW5kICIKIAkJCSAgICAgICAidGhlIGJ1ZmZlciBnaXZlbiBiYWNrIHRvIHRoZSBOSUMuIERlZmF1bHQgIgpAQCAtMTM0NCwxNCArMTM0Niw3NCBAQAogCXRwLT50eEhpUmluZy5sYXN0UmVhZCA9IDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnR5cGhvb25fZnc7CisKK3N0YXRpYyBpbnQKK3R5cGhvb25fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgdHlwaG9vbiAqdHApCit7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7CisJY29uc3QgdTggKmltYWdlX2RhdGE7CisJdTMyIG51bVNlY3Rpb25zOworCXUzMiBzZWN0aW9uX2xlbjsKKwl1MzIgcmVtYWluaW5nOworCWludCBlcnI7CisKKwlpZiAodHlwaG9vbl9mdykKKwkJcmV0dXJuIDA7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZ0eXBob29uX2Z3LCBGSVJNV0FSRV9OQU1FLCAmdHAtPnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkJdHAtPm5hbWUsIEZJUk1XQVJFX05BTUUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWltYWdlX2RhdGEgPSAodTggKikgdHlwaG9vbl9mdy0+ZGF0YTsKKwlyZW1haW5pbmcgPSB0eXBob29uX2Z3LT5zaXplOworCWlmIChyZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpKQorCQlnb3RvIGludmFsaWRfZnc7CisKKwlmSGRyID0gKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICopIGltYWdlX2RhdGE7CisJaWYgKG1lbWNtcChmSGRyLT50YWcsICJUWVBIT09OIiwgOCkpCisJCWdvdG8gaW52YWxpZF9mdzsKKworCW51bVNlY3Rpb25zID0gbGUzMl90b19jcHUoZkhkci0+bnVtU2VjdGlvbnMpOworCWltYWdlX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKTsKKwlyZW1haW5pbmcgLT0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKTsKKworCXdoaWxlIChudW1TZWN0aW9ucy0tKSB7CisJCWlmIChyZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIpKQorCQkJZ290byBpbnZhbGlkX2Z3OworCisJCXNIZHIgPSAoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKKwkJaW1hZ2VfZGF0YSArPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIpOworCQlzZWN0aW9uX2xlbiA9IGxlMzJfdG9fY3B1KHNIZHItPmxlbik7CisKKwkJaWYgKHJlbWFpbmluZyA8IHNlY3Rpb25fbGVuKQorCQkJZ290byBpbnZhbGlkX2Z3OworCisJCWltYWdlX2RhdGEgKz0gc2VjdGlvbl9sZW47CisJCXJlbWFpbmluZyAtPSBzZWN0aW9uX2xlbjsKKwl9CisKKwlyZXR1cm4gMDsKKworaW52YWxpZF9mdzoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlXG4iLCB0cC0+bmFtZSk7CisJcmVsZWFzZV9maXJtd2FyZSh0eXBob29uX2Z3KTsKKwl0eXBob29uX2Z3ID0gTlVMTDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIGludAogdHlwaG9vbl9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdHlwaG9vbiAqdHApCiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+aW9hZGRyOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7Ci0Jc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7Ci0Jc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7Ci0JdTggKmltYWdlX2RhdGE7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7CisJY29uc3QgdTggKmltYWdlX2RhdGE7CiAJdm9pZCAqZHBhZ2U7CiAJZG1hX2FkZHJfdCBkcGFnZV9kbWE7CiAJX19zdW0xNiBjc3VtOwpAQCAtMTM2NSwyMCArMTQyNywxMiBAQAogCWludCBpOwogCWludCBlcnI7CiAKLQllcnIgPSAtRUlOVkFMOwotCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgdHlwaG9vbl9maXJtd2FyZV9pbWFnZTsKLQlpbWFnZV9kYXRhID0gKHU4ICopIGZIZHI7Ci0KLQlpZihtZW1jbXAoZkhkci0+dGFnLCAiVFlQSE9PTiIsIDgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2UhXG4iLCB0cC0+bmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9CisJaW1hZ2VfZGF0YSA9ICh1OCAqKSB0eXBob29uX2Z3LT5kYXRhOworCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKIAogCS8qIENhbm5vdCBqdXN0IG1hcCB0aGUgZmlybXdhcmUgaW1hZ2UgdXNpbmcgcGNpX21hcF9zaW5nbGUoKSBhcwotCSAqIHRoZSBmaXJtd2FyZSBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwvbW9kdWxlIGltYWdlLCBzbyB3ZSBhbGxvY2F0ZQotCSAqIHNvbWUgY29uc2lzdGVudCBtZW1vcnkgdG8gY29weSB0aGUgc2VjdGlvbnMgaW50bywgYXMgaXQgaXMgc2ltcGxlciwKLQkgKiBhbmQgc2hvcnQtbGl2ZWQuIElmIHdlIGV2ZXIgc3BsaXQgb3V0IGFuZCByZXF1aXJlIGEgdXNlcmxhbmQKLQkgKiBmaXJtd2FyZSBsb2FkZXIsIHRoZW4gd2UgY2FuIHJldmlzaXQgdGhpcy4KKwkgKiB0aGUgZmlybXdhcmUgaXMgdm1hbGxvYygpJ2QgYW5kIG1heSBub3QgYmUgcGh5c2ljYWxseSBjb250aWd1b3VzLAorCSAqIHNvIHdlIGFsbG9jYXRlIHNvbWUgY29uc2lzdGVudCBtZW1vcnkgdG8gY29weSB0aGUgc2VjdGlvbnMgaW50by4KIAkgKi8KIAllcnIgPSAtRU5PTUVNOwogCWRwYWdlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgUEFHRV9TSVpFLCAmZHBhZ2VfZG1hKTsKQEAgLTE3ODMsNyArMTgzNyw3IEBACiAJfQogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW93cml0ZTMyKFRZUEhPT05fSU5UUl9OT05FLAogCQkJCXRwLT5pb2FkZHIgKyBUWVBIT09OX1JFR19JTlRSX01BU0spOwogCQl0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyh0cC0+aW9hZGRyKTsKQEAgLTE4MDYsMTAgKzE4NjAsMTAgQEAKIAogCWlvd3JpdGUzMihpbnRyX3N0YXR1cywgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9TVEFUVVMpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQlpb3dyaXRlMzIoVFlQSE9PTl9JTlRSX0FMTCwgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9NQVNLKTsKIAkJdHlwaG9vbl9wb3N0X3BjaV93cml0ZXMoaW9hZGRyKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE5NDQsNyArMTk5OCw3IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURSk7Ci0JeHBfY21kLnBhcm0xID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfUF84MDIxUSk7CisJeHBfY21kLnBhcm0xID0gY3B1X3RvX2xlMTYoRVRIX1BfODAyMVEpOwogCWVyciA9IHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CiAJaWYoZXJyIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CkBAIC0yMDg2LDYgKzIxNDAsMTAgQEAKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnI7CiAKKwllcnIgPSB0eXBob29uX3JlcXVlc3RfZmlybXdhcmUodHApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJZXJyID0gdHlwaG9vbl93YWtldXAodHAsIFdhaXRTbGVlcCk7CiAJaWYoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gd2FrZXVwIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTI2MjQsNiArMjY4Miw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHR5cGhvb25fY2xlYW51cCh2b2lkKQogeworCWlmICh0eXBob29uX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdHlwaG9vbl9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmggYi9kcml2ZXJzL25ldC90eXBob29uLmgKaW5kZXggZGQ3MDIyYy4uNjczZmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaApAQCAtMTc0LDE4ICsxNzQsMTggQEAKIAkJdTY0IHR4X2FkZHI7CS8qIG9wYXF1ZSBmb3IgaGFyZHdhcmUsIGZvciBUWF9ERVNDICovCiAJfTsKIAlfX2xlMzIgcHJvY2Vzc0ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RYX1BGX05PX0NSQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9TRUdNRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBTRUMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1BSSU9SSVRZCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9QQURfRlJBTUUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9SRVNFUlZFRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwZTAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDBmZmZmMDAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZjAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfTk9fQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTgljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fUFJJT1JJVFkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfUEFEX0ZSQU1FCQljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1JFU0VSVkVECQljcHVfdG9fbGUzMigweDAwMDAwZTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJY3B1X3RvX2xlMzIoMHgwZmZmZjAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlRFUk5BTAkJY3B1X3RvX2xlMzIoMHhmMDAwMDAwMCkKICNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1RBR19TSElGVAkxMgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTIwMyw4ICsyMDMsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgbXNzX2ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFRZUEhPT05fVFNPX0xBU1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgyMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJY3B1X3RvX2xlMTYoMHgxMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19MQVNUCQljcHVfdG9fbGUxNigweDIwMDApCiAJX19sZTMyIHJlc3BBZGRyTG87CiAJX19sZTMyIGJ5dGVzVHg7CiAJX19sZTMyIHN0YXR1czsKQEAgLTIyMiw4ICsyMjIsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgaXBzZWNGbGFnczsKLSNkZWZpbmUgVFlQSE9PTl9JUFNFQ19HRU5fSVYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0lQU0VDX0dFTl9JVgljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCWNwdV90b19sZTE2KDB4MDAwMSkKIAlfX2xlMzIgc2ExOwogCV9fbGUzMiBzYTI7CiAJX19sZTMyIHJlc2VydmVkOwpAQCAtMjQ4LDQxICsyNDgsNDEgQEAKIAl1MzIgYWRkcjsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRyICovCiAJdTMyIGFkZHJIaTsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRySGkgKi8KIAlfX2xlMzIgcnhTdGF0dXM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9CQURfU1NECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX1JVTlQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX09WRVJTSVpFCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0FMSUdOCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDYpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fVU5LTk9XTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUFgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9WTEFOCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwODApCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfSU5URVJOQUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQkFEX1NTRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfUlVOVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9PVkVSU0laRQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQUxJR04JCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19VTktOT1dOCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVBYCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX1ZMQU4JCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFRZUEhPT05fUlhfSVBTRUMJCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0ZBSUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfRkFJTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwNDAwKQogCV9fbGUxNiBmaWx0ZXJSZXN1bHRzOwotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4N2ZmZikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01BU0sJCWNwdV90b19sZTE2KDB4N2ZmZikKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJY3B1X3RvX2xlMTYoMHg4MDAwKQogCV9fbGUxNiBpcHNlY1Jlc3VsdHM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VTktOT1dOX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FU1BfRk9STUFUX0VSUglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9HT09ECWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfR09PRAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9GQUlMCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9GQUlMCWNwdV90b19sZTE2KDB4MDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAljcHVfdG9fbGUxNigweDAwODApCisjZGVmaW5lIFRZUEhPT05fUlhfVU5LTk9XTl9TQQkJY3B1X3RvX2xlMTYoMHgwMTAwKQorI2RlZmluZSBUWVBIT09OX1JYX0VTUF9GT1JNQVRfRVJSCWNwdV90b19sZTE2KDB4MDIwMCkKIAlfX2JlMzIgdmxhblRhZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMTgsMzEgKzMxOCwzMSBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgY21kOwotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9FTkFCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRU5BQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRElTQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfU1RBVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA3KQotI2RlZmluZSBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMWEpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDFiKQotI2RlZmluZSBUWVBIT09OX0NNRF9HT1RPX1NMRUVQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDI1KQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyYikKLSNkZWZpbmUgVFlQSE9PTl9DTURfQ1JFQVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfREVMRVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MykKLSNkZWZpbmUgVFlQSE9PTl9DTURfSVJRX0NPQUxFU0NFX0NUUkwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0VOQUJMRV9XQUtFX0VWRU5UUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0OSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNGYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0hFTExPX1JFU1AJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDU3KQotI2RlZmluZSBUWVBIT09OX0NNRF9IQUxUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA1ZCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDVlKQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfSVBTRUNfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDY3KQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfQ01EX0xWTAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNjkpCisjZGVmaW5lIFRZUEhPT05fQ01EX1RYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX0NNRF9SWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJY3B1X3RvX2xlMTYoMHgwMDA1KQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1NUQVRTCQljcHVfdG9fbGUxNigweDAwMDcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1hDVlJfU0VMRUNUCQljcHVfdG9fbGUxNigweDAwMTMpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJY3B1X3RvX2xlMTYoMHgwMDFhKQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01FRElBX1NUQVRVUwljcHVfdG9fbGUxNigweDAwMWIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dPVE9fU0xFRVAJCWNwdV90b19sZTE2KDB4MDAyMykKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAyNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BQ19BRERSRVNTCWNwdV90b19sZTE2KDB4MDAyNikKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NQUNfQUREUkVTUwljcHVfdG9fbGUxNigweDAwMjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQljcHVfdG9fbGUxNigweDAwMmIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0NSRUFURV9TQQkJY3B1X3RvX2xlMTYoMHgwMDM0KQorI2RlZmluZSBUWVBIT09OX0NNRF9ERUxFVEVfU0EJCWNwdV90b19sZTE2KDB4MDAzNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwljcHVfdG9fbGUxNigweDAwNDMpCisjZGVmaW5lIFRZUEhPT05fQ01EX0lSUV9DT0FMRVNDRV9DVFJMCWNwdV90b19sZTE2KDB4MDA0NSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTCWNwdV90b19sZTE2KDB4MDA0OSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJY3B1X3RvX2xlMTYoMHgwMDRmKQorI2RlZmluZSBUWVBIT09OX0NNRF9IRUxMT19SRVNQCQljcHVfdG9fbGUxNigweDAwNTcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0hBTFQJCWNwdV90b19sZTE2KDB4MDA1ZCkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCWNwdV90b19sZTE2KDB4MDA1ZSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0lQU0VDX0VOQUJMRQljcHVfdG9fbGUxNigweDAwNjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9DTURfTFZMCQljcHVfdG9fbGUxNigweDAwNjkpCiAJdTE2IHNlcU5vOwogCV9fbGUxNiBwYXJtMTsKIAlfX2xlMzIgcGFybTI7CkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCiAvKiBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSIGZpbHRlciBiaXRzIChjbWQucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfRElSRUNURUQJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9QUk9NSVNDT1VTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVMJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAxMCkKIAogLyogVFlQSE9PTl9DTURfUkVBRF9TVEFUUyByZXNwb25zZSBmb3JtYXQKICAqLwpAQCAtNDE2LDQwICs0MTYsNDAgQEAKIAlfX2xlMzIgcnhPdmVyZmxvdzsKIAlfX2xlMzIgcnhGaWx0ZXJlZDsKIAlfX2xlMzIgbGlua1N0YXR1czsKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfQkFECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xMDBNQlBTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xME1CUFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0ZVTExfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0hBTEZfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fTElOS19CQUQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX0xJTktfMTAwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fTElOS19GVUxMX0RVUExFWAljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX0xJTktfSEFMRl9EVVBMRVgJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKIAlfX2xlMzIgdW51c2VkMjsKIAlfX2xlMzIgdW51c2VkMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVCB4Y3ZyIHZhbHVlcyAocmVzcC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBGVUxMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwSEFMRglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fWENWUl9BVVRPTkVHCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwRlVMTAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMDBIQUxGCWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX1hDVlJfQVVUT05FRwljcHVfdG9fbGUxNigweDAwMDQpCiAKIC8qIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTIChyZXNwLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DUkNfU1RSSVBfRElTQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NPTExJU0lPTl9ERVRFQ1QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDIwKQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfUE9MQVJJVFlfUkVWCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDQwMCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX05PX0xJTksJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwODAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ1JDX1NUUklQX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ09MTElTSU9OX0RFVEVDVAljcHVfdG9fbGUxNigweDAwMTApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX1BPTEFSSVRZX1JFVgkJY3B1X3RvX2xlMTYoMHgwNDAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfTk9fTElOSwkJY3B1X3RvX2xlMTYoMHgwODAwKQogCiAvKiBUWVBIT09OX0NNRF9TRVRfTVVMVElDQVNUX0hBU0ggZW5hYmxlIHZhbHVlcyAoY21kLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9ESVNBQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfU0VUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX1NFVAkJY3B1X3RvX2xlMTYoMHgwMDAyKQogCiAvKiBUWVBIT09OX0NNRF9DUkVBVEVfU0EgZGVzY3JpcHRvciBhbmQgc2V0dGluZ3MKICAqLwpAQCAtNDU5LDkgKzQ1OSw5IEBACiAJdTE2IGNtZDsKIAl1MTYgc2VxTm87CiAJdTE2IG1vZGU7Ci0jZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0FICQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0VTUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9BSAkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1NBX01PREVfRVNQCQljcHVfdG9fbGUxNigweDAwMDIpCiAJdTggIGhhc2hGbGFnczsKICNkZWZpbmUgVFlQSE9PTl9TQV9IQVNIX0VOQUJMRQkJMHgwMQogI2RlZmluZSBUWVBIT09OX1NBX0hBU0hfU0hBMQkJMHgwMgpAQCAtNDkzLDIyICs0OTMsMjIgQEAKIC8qIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTIGJpdHMgKGNtZC5wYXJtMiAoVHgpICYgY21kLnBhcm0zIChSeCkpCiAgKiBUaGlzIGlzIGFsbCBmb3IgSVB2NC4KICAqLwotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfREhDUF9QUkVWRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1ZMQU4JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfU0VHTUVOVAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0RIQ1BfUFJFVkVOVAljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVkxBTgkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKIAogLyogVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTIGJpdHMgKGNtZC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9MSU5LX0VWRU5UCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9JQ01QX0VDSE8JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwNCkKLSNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA4KQorI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQljcHVfdG9fbGUxNigweDAxKQorI2RlZmluZSBUWVBIT09OX1dBS0VfTElOS19FVkVOVAkJY3B1X3RvX2xlMTYoMHgwMikKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0lDTVBfRUNITwkJY3B1X3RvX2xlMTYoMHgwNCkKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJY3B1X3RvX2xlMTYoMHgwOCkKIAogLyogVGhlc2UgYXJlIHVzZWQgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW1hZ2Ugb24gdGhlIE5JQwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCBlODc5ODY4Li44NmE0NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI3VuZGVmIERFQlVHCiAKQEAgLTE1MzYsMzIgKzE1MzYsMTUgQEAKIHN0YXRpYyBpbnQgaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtPm5vZGU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwaHksICptZGlvOwotCWNvbnN0IHBoYW5kbGUgKnBoOwotCWNoYXIgYnVzX25hbWVbTUlJX0JVU19JRF9TSVpFXTsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmlkOworCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvID0gcHJpdi0+dWdfaW5mbzsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwotCWNoYXIgcGh5X2lkW0JVU19JRF9TSVpFXTsKIAogCXByaXYtPm9sZGxpbmsgPSAwOwogCXByaXYtPm9sZHNwZWVkID0gMDsKIAlwcml2LT5vbGRkdXBsZXggPSAtMTsKIAotCXBoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWhhbmRsZSIsIE5VTEwpOwotCXBoeSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7Ci0JbWRpbyA9IG9mX2dldF9wYXJlbnQocGh5KTsKLQotCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHBoeSwgInJlZyIsIE5VTEwpOwotCi0Jb2Zfbm9kZV9wdXQocGh5KTsKLQlvZl9ub2RlX3B1dChtZGlvKTsKLQotCXVlY19tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKLQlzbnByaW50ZihwaHlfaWQsIHNpemVvZihwaHlfaWQpLCAiJXM6JTAyeCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19uYW1lLCAqaWQpOwotCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlfaWQsICZhZGp1c3RfbGluaywgMCwgcHJpdi0+cGh5X2ludGVyZmFjZSk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCB1Z19pbmZvLT5waHlfYnVzX2lkLCAmYWRqdXN0X2xpbmssIDAsCisJCQkgICAgIHByaXYtPnBoeV9pbnRlcmZhY2UpOwogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjAyNiw2ICsyMDA5LDkgQEAKIAkvKiBEaXNhYmxlIFJ4IGFuZCBUeCAqLwogCWNscmJpdHMzMigmdWdfcmVncy0+bWFjY2ZnMSwgTUFDQ0ZHMV9FTkFCTEVfUlggfCBNQUNDRkcxX0VOQUJMRV9UWCk7CiAKKwlwaHlfZGlzY29ubmVjdCh1Z2V0aC0+cGh5ZGV2KTsKKwl1Z2V0aC0+cGh5ZGV2ID0gTlVMTDsKKwogCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKIH0KIApAQCAtMzI2Niw3ICszMjUyLDcgQEAKIAkJaG93bWFueSArPSB1Y2NfZ2V0aF9yeCh1Z2V0aCwgaSwgYnVkZ2V0IC0gaG93bWFueSk7CiAKIAlpZiAoaG93bWFueSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc2V0Yml0czMyKHVnZXRoLT51Y2NmLT5wX3VjY20sIFVDQ0VfUlhfRVZFTlRTKTsKIAl9CiAKQEAgLTMyOTcsMTAgKzMyODMsMTAgQEAKIAogCS8qIGNoZWNrIGZvciByZWNlaXZlIGV2ZW50cyB0aGF0IHJlcXVpcmUgcHJvY2Vzc2luZyAqLwogCWlmICh1Y2NlICYgVUNDRV9SWF9FVkVOVFMpIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnVnZXRoLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ1Z2V0aC0+bmFwaSkpIHsKIAkJCXVjY20gJj0gflVDQ0VfUlhfRVZFTlRTOwogCQkJb3V0X2JlMzIodWNjZi0+cF91Y2NtLCB1Y2NtKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnVnZXRoLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmdWdldGgtPm5hcGkpOwogCQl9CiAJfQogCkBAIC0zMzYyLDYgKzMzNDgsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJZXJyID0gaW5pdF9waHkoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCisJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgaW5pdGlhbGl6ZSBQSFksIGFib3J0aW5nLiIsCisJCQkJICBkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWVyciA9IHVjY19zdHJ1Y3RfaW5pdCh1Z2V0aCk7CiAJaWYgKGVycikgewogCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQpAQCAtMzM5OCwxMyArMzM5Miw2IEBACiAJCQkJICAgJnVnZXRoLT51Z19yZWdzLT5tYWNzdG5hZGRyMSwKIAkJCQkgICAmdWdldGgtPnVnX3JlZ3MtPm1hY3N0bmFkZHIyKTsKIAotCWVyciA9IGluaXRfcGh5KGRldik7Ci0JaWYgKGVycikgewotCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQotCQkJdWdldGhfZXJyKCIlczogQ2Fubm90IGluaXRpYWxpemUgUEhZLCBhYm9ydGluZy4iLCBkZXYtPm5hbWUpOwotCQlnb3RvIG91dF9lcnI7Ci0JfQotCiAJcGh5X3N0YXJ0KHVnZXRoLT5waHlkZXYpOwogCiAJZXJyID0gdWdldGhfZW5hYmxlKHVnZXRoLCBDT01NX0RJUl9SWF9BTkRfVFgpOwpAQCAtMzQ0Nyw5ICszNDM0LDYgQEAKIAogCWZyZWVfaXJxKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmlycSwgdWdldGgtPmRldik7CiAKLQlwaHlfZGlzY29ubmVjdCh1Z2V0aC0+cGh5ZGV2KTsKLQl1Z2V0aC0+cGh5ZGV2ID0gTlVMTDsKLQogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMzUxOCw2ICszNTAyLDIwIEBACiAJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdWNjX2dldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdWNjX2dldGhfb3BlbiwKKwkubmRvX3N0b3AJCT0gdWNjX2dldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHVjY19nZXRoX3N0YXJ0X3htaXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdWNjX2dldGhfc2V0X211bHRpLAorCS5uZG9fdHhfdGltZW91dAkJPSB1Y2NfZ2V0aF90aW1lb3V0LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB1Y2NfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCB1Y2NfZ2V0aF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlKiBvZmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7CkBAIC0zNjI5LDEwICszNjI3LDEyIEBACiAJdWdfaW5mby0+dWZfaW5mby5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAJZml4ZWRfbGluayA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZpeGVkLWxpbmsiLCBOVUxMKTsKIAlpZiAoZml4ZWRfbGluaykgewotCQlzbnByaW50Zih1Z19pbmZvLT5tZGlvX2J1cywgTUlJX0JVU19JRF9TSVpFLCAiMCIpOwotCQl1Z19pbmZvLT5waHlfYWRkcmVzcyA9IGZpeGVkX2xpbmtbMF07CisJCXNucHJpbnRmKHVnX2luZm8tPnBoeV9idXNfaWQsIHNpemVvZih1Z19pbmZvLT5waHlfYnVzX2lkKSwKKwkJCSBQSFlfSURfRk1ULCAiMCIsIGZpeGVkX2xpbmtbMF0pOwogCQlwaHkgPSBOVUxMOwogCX0gZWxzZSB7CisJCWNoYXIgYnVzX25hbWVbTUlJX0JVU19JRF9TSVpFXTsKKwogCQlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKIAkJcGh5ID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKIApAQCAtMzY0Myw3ICszNjQzLDYgQEAKIAkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShwaHksICJyZWciLCBOVUxMKTsKIAkJaWYgKHByb3AgPT0gTlVMTCkKIAkJCXJldHVybiAtMTsKLQkJdWdfaW5mby0+cGh5X2FkZHJlc3MgPSAqcHJvcDsKIAogCQkvKiBTZXQgdGhlIGJ1cyBpZCAqLwogCQltZGlvID0gb2ZfZ2V0X3BhcmVudChwaHkpOwpAQCAtMzY1Nyw3ICszNjU2LDkgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiAtMTsKIAotCQlzbnByaW50Zih1Z19pbmZvLT5tZGlvX2J1cywgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCByZXMuc3RhcnQpOworCQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CisJCXNucHJpbnRmKHVnX2luZm8tPnBoeV9idXNfaWQsIHNpemVvZih1Z19pbmZvLT5waHlfYnVzX2lkKSwKKwkJCSIlczolMDJ4IiwgYnVzX25hbWUsICpwcm9wKTsKIAl9CiAKIAkvKiBnZXQgdGhlIHBoeSBpbnRlcmZhY2UgdHlwZSwgb3IgZGVmYXVsdCB0byBNSUkgKi8KQEAgLTM3MzAsMTkgKzM3MzEsMTEgQEAKIAogCS8qIEZpbGwgaW4gdGhlIGRldiBzdHJ1Y3R1cmUgKi8KIAl1ZWNfc2V0X2V0aHRvb2xfb3BzKGRldik7Ci0JZGV2LT5vcGVuID0gdWNjX2dldGhfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHVjY19nZXRoX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gdWNjX2dldGhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdWNjX2dldGhfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAlJTklUX1dPUksoJnVnZXRoLT50aW1lb3V0X3dvcmssIHVjY19nZXRoX3RpbWVvdXRfd29yayk7CiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdWdldGgtPm5hcGksIHVjY19nZXRoX3BvbGwsIFVDQ19HRVRIX0RFVl9XRUlHSFQpOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSB1Y2NfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IHVjY19nZXRoX2Nsb3NlOwotLy8gICAgZGV2LT5jaGFuZ2VfbXR1ID0gdWNjX2dldGhfY2hhbmdlX210dTsKIAlkZXYtPm10dSA9IDE1MDA7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB1Y2NfZ2V0aF9zZXRfbXVsdGk7CiAKIAl1Z2V0aC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLm1zZ19lbmFibGUsIFVHRVRIX01TR19ERUZBVUxUKTsKIAl1Z2V0aC0+cGh5X2ludGVyZmFjZSA9IHBoeV9pbnRlcmZhY2U7CkBAIC0zODAzLDExICszNzk2LDYgQEAKIHsKIAlpbnQgaSwgcmV0OwogCi0JcmV0ID0gdWVjX21kaW9faW5pdCgpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCWlmIChuZXRpZl9tc2dfZHJ2KCZkZWJ1ZykpCiAJCXByaW50ayhLRVJOX0lORk8gInVjY19nZXRoOiAiIERSVl9ERVNDICJcbiIpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCkBAIC0zODE2LDE2ICszODA0LDEyIEBACiAKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVjY19nZXRoX2RyaXZlcik7CiAKLQlpZiAocmV0KQotCQl1ZWNfbWRpb19leGl0KCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdWNjX2dldGhfZXhpdCh2b2lkKQogewogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOwotCXVlY19tZGlvX2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQodWNjX2dldGhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCAxNmNiZTQyLi5lM2EyNWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vdWNjLmg+CiAjaW5jbHVkZSA8YXNtL3VjY19mYXN0Lmg+CiAKLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKLQogI2RlZmluZSBEUlZfREVTQyAiUUUgVUNDIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlciIKICNkZWZpbmUgRFJWX05BTUUgInVjY19nZXRoIgogI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xIgpAQCAtMTg0LDYgKzE4MiwxOCBAQAogI2RlZmluZSBVQ0NFX1JYX0VWRU5UUyAgKFVDQ0VfUlhGIHwgVUNDX0dFVEhfVUNDRV9CU1kpCiAjZGVmaW5lIFVDQ0VfVFhfRVZFTlRTCShVQ0NFX1RYQiB8IFVDQ19HRVRIX1VDQ0VfVFhFKQogCisvKiBUQkkgZGVmaW5lcyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQ1IJCTB4MDAJLyogQ29udHJvbCAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfU1IJCTB4MDEJLyogU3RhdHVzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkEJMHgwNAkvKiBBTiBhZHZlcnRpc2VtZW50ICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkxQQlBBCTB4MDUJLyogQU4gbGluayBwYXJ0bmVyIGJhc2UgcGFnZSBhYmlsaXR5ICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkVYCTB4MDYJLyogQU4gZXhwYW5zaW9uICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTk5QVAkweDA3CS8qIEFOIG5leHQgcGFnZSB0cmFuc21pdCAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5MUEFOUAkweDA4CS8qIEFOIGxpbmsgcGFydG5lciBhYmlsaXR5IG5leHQgcGFnZSAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfRVhTVAkweDBGCS8qIEV4dGVuZGVkIHN0YXR1cyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfSkQJCTB4MTAJLyogSml0dGVyIGRpYWdub3N0aWNzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9UQklDT04JMHgxMQkvKiBUQkkgY29udHJvbCAqLworCiAvKiBVQ0MgR0VUSCBNQUNDRkcxIChNQUMgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyKSAqLwogI2RlZmluZSBNQUNDRkcxX0ZMT1dfUlggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBGbG93IENvbnRyb2wKIAkJCQkJCQkJICAgUnggKi8KQEAgLTEwOTEsOCArMTEwMSw3IEBACiAJdTMyIGV2ZW50UmVnTWFzazsKIAl1MTYgcGF1c2VQZXJpb2Q7CiAJdTE2IGV4dGVuc2lvbkZpZWxkOwotCXU4IHBoeV9hZGRyZXNzOwotCWNoYXIgbWRpb19idXNbTUlJX0JVU19JRF9TSVpFXTsKKwljaGFyIHBoeV9idXNfaWRbQlVTX0lEX1NJWkVdOwogCXU4IHdlaWdodGZhY3RvcltOVU1fVFhfUVVFVUVTXTsKIAl1OCBpbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWVbTlVNX1JYX1FVRVVFU107CiAJdTggbDJxdFtVQ0NfR0VUSF9WTEFOX1BSSU9SSVRZX01BWF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKaW5kZXggNjhhN2Y1NC4uYTc1NWJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAjaW5jbHVkZSAidWNjX2dldGguaCIKLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKIAogc3RhdGljIGNoYXIgaHdfc3RhdF9nc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJInR4LTY0LWZyYW1lcyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWRhNGVkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYwotICoKLSAqIFFFIFVDQyBHaWdhYml0IEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSSBNYW5hZ2VtZW50IHJlZ3MgaW4gdGhlIFVDQyByZWdpc3RlciBzcGFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIEF1dGhvcnM6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+Ci0gKgkgICAgS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS91Y2MuaD4KLQotI2luY2x1ZGUgInVjY19nZXRoX21paS5oIgotI2luY2x1ZGUgInVjY19nZXRoLmgiCi0KLSNkZWZpbmUgREVCVUcKLSNpZmRlZiBERUJVRwotI2RlZmluZSB2ZGJnKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyAsIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2Vsc2UKLSNkZWZpbmUgdmRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUoMCkKLSNlbmRpZgotCi0jZGVmaW5lIE1JSV9EUlZfREVTQyAiUUUgVUNDIEV0aGVybmV0IENvbnRyb2xsZXIgTUlJIEJ1cyIKLSNkZWZpbmUgTUlJX0RSVl9OQU1FICJmc2wtdWVjX21kaW8iCi0KLS8qIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgZm9yIHRoaXMgZGV2aWNlIHRvIHRoZSByZWdpc3RlciBhdCByZWdudW0sICovCi0vKiB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSBpdCByZXR1cm5zLiAgQWxsIFBIWSAqLwotLyogY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBtYXN0ZXIgVUVDIE1JSU0gcmVncyAqLwotaW50IHVlY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0KLQkvKiBTZXR0aW5nIHVwIHRoZSBNSUkgTWFuZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwKLQkJIChtaWlfaWQgPDwgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCkgfCByZWdudW0pOwotCi0JLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBDb250cm9sIFJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKLQotCS8qIFdhaXQgdGlsbCBNSUkgbWFuYWdlbWVudCB3cml0ZSBpcyBjb21wbGV0ZSAqLwotCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkpICYgTUlJTUlORF9CVVNZKQotCQljcHVfcmVsYXgoKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBSZWFkcyBmcm9tIHJlZ2lzdGVyIHJlZ251bSBpbiB0aGUgUEhZIGZvciBkZXZpY2UgZGV2LCAqLwotLyogcmV0dXJuaW5nIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSAqLwotLyogY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBUU0VDMSBNSUlNIHJlZ3MgKi8KLWludCB1ZWNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCXUxNiB2YWx1ZTsKLQotCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLAotCQkgKG1paV9pZCA8PCBNSUlNQUREX1BIWV9BRERSRVNTX1NISUZUKSB8IHJlZ251bSk7Ci0KLQkvKiBDbGVhciBtaWltY29tLCBwZXJmb3JtIGFuIE1JSSBtYW5hZ2VtZW50IHJlYWQgY3ljbGUgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgMCk7Ci0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIE1JSU1DT01fUkVBRF9DWUNMRSk7Ci0KLQkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpKSAmIChNSUlNSU5EX0JVU1kgfCBNSUlNSU5EX05PVF9WQUxJRCkpCi0JCWNwdV9yZWxheCgpOwotCi0JLyogUmVhZCBNSUkgbWFuYWdlbWVudCBzdGF0dXMgICovCi0JdmFsdWUgPSBpbl9iZTMyKCZyZWdzLT5taWltc3RhdCk7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qIFJlc2V0IHRoZSBNSUlNIHJlZ2lzdGVycywgYW5kIHdhaXQgZm9yIHRoZSBidXMgdG8gZnJlZSAqLwotc3RhdGljIGludCB1ZWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQlpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7Ci0KLQltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQkvKiBSZXNldCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19SRVNFVF9NQU5BR0VNRU5UKTsKLQotCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzExMik7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLwotCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpICYmIHRpbWVvdXQtLSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCWlmICh0aW1lb3V0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsIGJ1cy0+bmFtZSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdWVjX21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZSwgKnRlbXBucCA9IE5VTEw7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3M7Ci0Jc3RydWN0IG1paV9idXMgKm5ld19idXM7Ci0Jc3RydWN0IHJlc291cmNlIHJlczsKLQlpbnQgaywgZXJyID0gMDsKLQotCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKE5VTEwgPT0gbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXdfYnVzLT5uYW1lID0gIlVDQyBFdGhlcm5ldCBDb250cm9sbGVyIE1JSSBCdXMiOwotCW5ld19idXMtPnJlYWQgPSAmdWVjX21kaW9fcmVhZDsKLQluZXdfYnVzLT53cml0ZSA9ICZ1ZWNfbWRpb193cml0ZTsKLQluZXdfYnVzLT5yZXNldCA9ICZ1ZWNfbWRpb19yZXNldDsKLQotCW1lbXNldCgmcmVzLCAwLCBzaXplb2YocmVzKSk7Ci0KLQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKLQlpZiAoZXJyKQotCQlnb3RvIHJlZ19tYXBfZmFpbDsKLQotCXVlY19tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7Ci0KLQluZXdfYnVzLT5pcnEgPSBrbWFsbG9jKDMyICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCi0JaWYgKE5VTEwgPT0gbmV3X2J1cy0+aXJxKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gcmVnX21hcF9mYWlsOwotCX0KLQotCWZvciAoayA9IDA7IGsgPCAzMjsgaysrKQotCQluZXdfYnVzLT5pcnFba10gPSBQSFlfUE9MTDsKLQotCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7Ci0JCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7Ci0JCWlmIChpcnEgIT0gTk9fSVJRKSB7Ci0JCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0JCQluZXdfYnVzLT5pcnFbKmlkXSA9IGlycTsKLQkJfQotCX0KLQotCS8qIFNldCB0aGUgYmFzZSBhZGRyZXNzICovCi0JcmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCBzaXplb2Yoc3RydWN0IHVjY19taWlfbW5nKSk7Ci0KLQlpZiAoTlVMTCA9PSByZWdzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gaW9yZW1hcF9mYWlsOwotCX0KLQotCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKLQotCW5ld19idXMtPnBhcmVudCA9IGRldmljZTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBuZXdfYnVzKTsKLQotCS8qIFJlYWQgTUlJIG1hbmFnZW1lbnQgbWFzdGVyIGZyb20gZGV2aWNlIHRyZWUgKi8KLQl3aGlsZSAoKHRlbXBucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKHRlbXBucCwgIm5ldHdvcmsiLCAidWNjX2dldGgiKSkKLQkgICAgICAgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgdGVtcHJlczsKLQotCQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHRlbXBucCwgMCwgJnRlbXByZXMpOwotCQlpZiAoZXJyKQotCQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQotCQkvKiBpZiBvdXIgbWRpbyByZWdzIGZhbGwgd2l0aGluIHRoaXMgVUNDIHJlZ3MgcmFuZ2UgKi8KLQkJaWYgKChyZXMuc3RhcnQgPj0gdGVtcHJlcy5zdGFydCkgJiYKLQkJICAgIChyZXMuZW5kIDw9IHRlbXByZXMuZW5kKSkgewotCQkJLyogc2V0IHRoaXMgVUNDIHRvIGJlIHRoZSBNSUkgbWFzdGVyICovCi0JCQljb25zdCB1MzIgKmlkOwotCi0JCQlpZCA9IG9mX2dldF9wcm9wZXJ0eSh0ZW1wbnAsICJjZWxsLWluZGV4IiwgTlVMTCk7Ci0JCQlpZiAoIWlkKSB7Ci0JCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkodGVtcG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7Ci0JCQkJaWYgKCFpZCkKLQkJCQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQkJCX0KLQotCQkJdWNjX3NldF9xZV9tdXhfbWlpX21uZygqaWQgLSAxKTsKLQotCQkJLyogYXNzaWduIHRoZSBUQkkgYW4gYWRkcmVzcyB3aGljaCB3b24ndAotCQkJICogY29uZmxpY3Qgd2l0aCB0aGUgUEhZcyAqLwotCQkJb3V0X2JlMzIoJnJlZ3MtPnV0YmlwYXIsIFVUQklQQVJfSU5JVF9UQklQQSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7Ci0JaWYgKDAgIT0gZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKLQkJICAgICAgIG5ld19idXMtPm5hbWUpOwotCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOwotCX0KLQotCXJldHVybiAwOwotCi1idXNfcmVnaXN0ZXJfZmFpbDoKLQlpb3VubWFwKHJlZ3MpOwotaW9yZW1hcF9mYWlsOgotCWtmcmVlKG5ld19idXMtPmlycSk7Ci1yZWdfbWFwX2ZhaWw6Ci0JbWRpb2J1c19mcmVlKG5ld19idXMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB1ZWNfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7Ci0Jc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdik7Ci0JYnVzLT5wcml2ID0gTlVMTDsKLQltZGlvYnVzX2ZyZWUoYnVzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB1ZWNfbWRpb19tYXRjaFtdID0gewotCXsKLQkJLnR5cGUgPSAibWRpbyIsCi0JCS5jb21wYXRpYmxlID0gInVjY19nZXRoX3BoeSIsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyIsCi0JfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHVlY19tZGlvX2RyaXZlciA9IHsKLQkubmFtZQk9IE1JSV9EUlZfTkFNRSwKLQkucHJvYmUJPSB1ZWNfbWRpb19wcm9iZSwKLQkucmVtb3ZlCT0gdWVjX21kaW9fcmVtb3ZlLAotCS5tYXRjaF90YWJsZQk9IHVlY19tZGlvX21hdGNoLAotfTsKLQotaW50IF9faW5pdCB1ZWNfbWRpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWVjX21kaW9fZHJpdmVyKTsKLX0KLQotLyogY2FsbGVkIGZyb20gX19pbml0IHVjY19nZXRoX2luaXQsIHRoZXJlZm9yZSBjYW4gbm90IGJlIF9fZXhpdCAqLwotdm9pZCB1ZWNfbWRpb19leGl0KHZvaWQpCi17Ci0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVlY19tZGlvX2RyaXZlcik7Ci19Ci0KLXZvaWQgdWVjX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLSAgICAgICAgY29uc3QgdTMyICpyZWc7Ci0KLSAgICAgICAgcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0KLSAgICAgICAgc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJXgiLCBucC0+bmFtZSwgcmVnID8gKnJlZyA6IDApOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDBjZjgwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAotICoKLSAqIFFFIFVDQyBHaWdhYml0IEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSSBNYW5hZ2VtZW50IHJlZ3MgaW4gdGhlIFVDQyByZWdpc3RlciBzcGFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIEF1dGhvcnM6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+Ci0gKgkgICAgS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2lmbmRlZiBfX1VFQ19NSUlfSAotI2RlZmluZSBfX1VFQ19NSUlfSAotCi0vKiBVQ0MgR0VUSCBNSUlNQ0ZHIChNSUkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQ0ZHX1JFU0VUX01BTkFHRU1FTlQgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBSZXNldAotCQkJCQkJCQkgICBtYW5hZ2VtZW50ICovCi0jZGVmaW5lIE1JSU1DRkdfTk9fUFJFQU1CTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCS8qIFByZWFtYmxlCi0JCQkJCQkJCSAgIHN1cHByZXNzICovCi0jZGVmaW5lIE1JSU1DRkdfQ0xPQ0tfRElWSURFX1NISUZUICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogY2xvY2sgZGl2aWRlCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0jZGVmaW5lIE1JSU1DRkdfQ0xPQ0tfRElWSURFX01BWCAgICAgICAgICAgICAgICAweGYJLyogbWF4IGNsb2NrIGRpdmlkZSAqLwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzQgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzYgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzggICAgMHgwMDAwMDAwMwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzEwICAgMHgwMDAwMDAwNAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE0ICAgMHgwMDAwMDAwNQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE2ICAgMHgwMDAwMDAwOAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIwICAgMHgwMDAwMDAwNgotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzI4ICAgMHgwMDAwMDAwNwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzMyICAgMHgwMDAwMDAwOQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzQ4ICAgMHgwMDAwMDAwYQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzY0ICAgMHgwMDAwMDAwYgotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzgwICAgMHgwMDAwMDAwYwotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzExMiAgMHgwMDAwMDAwZAotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE2MCAgMHgwMDAwMDAwZQotI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIyNCAgMHgwMDAwMDAwZgotCi0vKiBVQ0MgR0VUSCBNSUlNQ09NIChNSUkgTWFuYWdlbWVudCBDb21tYW5kIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQ09NX1NDQU5fQ1lDTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBTY2FuIGN5Y2xlICovCi0jZGVmaW5lIE1JSU1DT01fUkVBRF9DWUNMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCS8qIFJlYWQgY3ljbGUgKi8KLQotLyogVUNDIEdFVEggTUlJTUFERCAoTUlJIE1hbmFnZW1lbnQgQWRkcmVzcyBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCAgICAgICAgICAgICAgICgzMSAtIDIzKQkvKiBQSFkgQWRkcmVzcwotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQUREX1BIWV9SRUdJU1RFUl9TSElGVCAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBSZWdpc3RlcgotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotCi0vKiBVQ0MgR0VUSCBNSUlNQ09OIChNSUkgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNQ09OX1BIWV9DT05UUk9MX1NISUZUICAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBDb250cm9sCi0JCQkJCQkJCSAgIDw8IHNoaWZ0ICovCi0jZGVmaW5lIE1JSU1DT05fUEhZX1NUQVRVU19TSElGVCAgICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogUEhZIFN0YXR1cwotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotCi0vKiBVQ0MgR0VUSCBNSUlNSU5EIChNSUkgTWFuYWdlbWVudCBJbmRpY2F0b3IgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1JTkRfTk9UX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CS8qIE5vdCB2YWxpZCAqLwotI2RlZmluZSBNSUlNSU5EX1NDQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBTY2FuIGluCi0JCQkJCQkJCSAgIHByb2dyZXNzICovCi0jZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0KLS8qIEluaXRpYWwgVEJJIFBoeXNpY2FsIEFkZHJlc3MgKi8KLSNkZWZpbmUgVVRCSVBBUl9JTklUX1RCSVBBCQkJMHgxZgotCi1zdHJ1Y3QgdWNjX21paV9tbmcgewotCXUzMiBtaWltY2ZnOwkJLyogTUlJIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiByZWcgKi8KLQl1MzIgbWlpbWNvbTsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbW1hbmQgcmVnICovCi0JdTMyIG1paW1hZGQ7CQkvKiBNSUkgbWFuYWdlbWVudCBhZGRyZXNzIHJlZyAqLwotCXUzMiBtaWltY29uOwkJLyogTUlJIG1hbmFnZW1lbnQgY29udHJvbCByZWcgKi8KLQl1MzIgbWlpbXN0YXQ7CQkvKiBNSUkgbWFuYWdlbWVudCBzdGF0dXMgcmVnICovCi0JdTMyIG1paW1pbmQ7CQkvKiBNSUkgbWFuYWdlbWVudCBpbmRpY2F0aW9uIHJlZyAqLwotCXU4IG5vdGNhcmVbMjhdOwkJLyogU3BhY2UgaG9sZGVyICovCi0JdTMyIHV0YmlwYXI7CQkvKiBUQkkgcGh5IGFkZHJlc3MgcmVnICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogVEJJIC8gTUlJIFNldCBSZWdpc3RlciAqLwotZW51bSBlbmV0X3RiaV9taWlfcmVnIHsKLQlFTkVUX1RCSV9NSUlfQ1IgPSAweDAwLAkvKiBDb250cm9sICovCi0JRU5FVF9UQklfTUlJX1NSID0gMHgwMSwJLyogU3RhdHVzICovCi0JRU5FVF9UQklfTUlJX0FOQSA9IDB4MDQsCS8qIEFOIGFkdmVydGlzZW1lbnQgKi8KLQlFTkVUX1RCSV9NSUlfQU5MUEJQQSA9IDB4MDUsCS8qIEFOIGxpbmsgcGFydG5lciBiYXNlIHBhZ2UgYWJpbGl0eSAqLwotCUVORVRfVEJJX01JSV9BTkVYID0gMHgwNiwJLyogQU4gZXhwYW5zaW9uICovCi0JRU5FVF9UQklfTUlJX0FOTlBUID0gMHgwNywJLyogQU4gbmV4dCBwYWdlIHRyYW5zbWl0ICovCi0JRU5FVF9UQklfTUlJX0FOTFBBTlAgPSAweDA4LAkvKiBBTiBsaW5rIHBhcnRuZXIgYWJpbGl0eSBuZXh0IHBhZ2UgKi8KLQlFTkVUX1RCSV9NSUlfRVhTVCA9IDB4MEYsCS8qIEV4dGVuZGVkIHN0YXR1cyAqLwotCUVORVRfVEJJX01JSV9KRCA9IDB4MTAsCS8qIEppdHRlciBkaWFnbm9zdGljcyAqLwotCUVORVRfVEJJX01JSV9UQklDT04gPSAweDExCS8qIFRCSSBjb250cm9sICovCi19OwotCi1pbnQgdWVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKLWludCB1ZWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IF9faW5pdCB1ZWNfbWRpb19pbml0KHZvaWQpOwotdm9pZCB1ZWNfbWRpb19leGl0KHZvaWQpOwotdm9pZCB1ZWNfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKLSNlbmRpZgkJCQkvKiBfX1VFQ19NSUlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKaW5kZXggMzk2ZjgyMS4uODdiNGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYworKysgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCkBAIC04MDcsNiArODA3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3Ml9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwJCT0gYXNpeF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdCwKK307CisKIHN0YXRpYyBpbnQgYXg4ODE3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJaW50IHJldCA9IDA7CkBAIC04NDYsOSArODU4LDggQEAKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKIAlkZXYtPm1paS5waHlfaWQgPSBhc2l4X2dldF9waHlfYWRkcihkZXYpOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGFzaXhfaW9jdGw7CiAKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXg4ODE3Ml9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODgxNzJfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3Ml9ldGh0b29sX29wczsKIAogCWFzaXhfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CkBAIC04OTgsNiArOTA5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODc3Ml9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwJCT0gYXNpeF9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdCwKK307CisKIHN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJaW50IHJldCwgZW1iZF9waHk7CkBAIC05NjIsNyArOTg1LDYgQEAKIAlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXNpeF9tZGlvX3dyaXRlOwogCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKIAlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGFzaXhfaW9jdGw7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKIAogCXBoeWlkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKQEAgLTk3OCw3ICsxMDAwLDcgQEAKIAogCW1zbGVlcCgxNTApOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4NzcyX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODg3NzJfZXRodG9vbF9vcHM7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwpAQCAtMTE4MSw2ICsxMjAzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3OF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3QsCisJLm5kb19kb19pb2N0bCAJCT0gYXNpeF9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gYXg4ODE3OF9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIGludCBheDg4MTc4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKikmZGV2LT5kYXRhOwpAQCAtMTI0NywxMSArMTI4MSwxMCBAQAogCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKIAlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweGZmOwogCWRldi0+bWlpLnN1cHBvcnRzX2dtaWkgPSAxOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGFzaXhfaW9jdGw7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OworCisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODE3OF9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTc4X2V0aHRvb2xfb3BzOwotCWRldi0+bmV0LT5jaGFuZ2VfbXR1ID0gJmF4ODgxNzhfY2hhbmdlX210dTsKIAogCXBoeWlkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKIAlkYmcoIlBIWUlEPTB4JTA4eCIsIHBoeWlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IGNiN2FjYmIuLmI5ZGQ0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtMTYzLDcgKzE2Myw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXVuc2lnbmVkIGludCB0eF9wdHIsIHR4X2lkeDsKQEAgLTI0NSw4ICsyNDQsOCBAQAogCQlpZighY2F0Yy0+aXNfZjV1MDExKSB7CiAJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7CiAJCQlpZiAocGt0X2xlbiA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJCWNhdGMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjYyLDggKzI2MSw4IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhdGMtPm5ldGRldik7CiAJCW5ldGlmX3J4KHNrYik7CiAKLQkJY2F0Yy0+c3RhdHMucnhfcGFja2V0cysrOwotCQljYXRjLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCiAJCS8qIEY1VTAxMSBvbmx5IGRvZXMgb25lIHBhY2tldCBwZXIgUlggKi8KIAkJaWYgKGNhdGMtPmlzX2Y1dTAxMSkKQEAgLTM4Niw3ICszODUsNyBAQAogCQlkYmcoIlR4IFJlc2V0LiIpOwogCQl1cmItPnN0YXR1cyA9IDA7CiAJCWNhdGMtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQljYXRjLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJY2xlYXJfYml0KFRYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CiAJCW5ldGlmX3dha2VfcXVldWUoY2F0Yy0+bmV0ZGV2KTsKIAkJcmV0dXJuOwpAQCAtNDEyLDcgKzQxMSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGNhdGNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgaW50IGNhdGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDQzLDggKzQ0Miw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHIgPj0gMCkgewotCQljYXRjLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJY2F0Yy0+c3RhdHMudHhfcGFja2V0cysrOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAl9CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC01ODgsMTUgKzU4NywxNSBAQAogCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSBUeFNpbmdsZUNvbGw6CiAJCWNhc2UgVHhNdWx0aUNvbGw6Ci0JCQljYXRjLT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJCWNhc2UgVHhFeGNlc3NDb2xsOgotCQkJY2F0Yy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7Ci0JCQljYXRjLT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CiAJCQlicmVhazsKIAkJY2FzZSBSeEZyYW1FcnI6Ci0JCQljYXRjLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7Ci0JCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJfQogCkBAIC02MTQsMTIgKzYxMyw2IEBACiAJbW9kX3RpbWVyKCZjYXRjLT50aW1lciwgamlmZmllcyArIFNUQVRTX1VQREFURSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY2F0Y19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuICZjYXRjLT5zdGF0czsKLX0KLQogLyoKICAqIFJlY2VpdmUgbW9kZXMuIEJyb2FkY2FzdCwgTXVsdGljYXN0LCBQcm9taXNjLgogICovCkBAIC03NTAsNiArNzQzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2F0Y19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBjYXRjX29wZW4sCisJLm5kb19zdG9wCQk9IGNhdGNfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gY2F0Y19zdGFydF94bWl0LAorCisJLm5kb190eF90aW1lb3V0CQk9IGNhdGNfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKgogICogVVNCIHByb2JlLCBkaXNjb25uZWN0LgogICovCkBAIC03NzQsMTMgKzc3OSw4IEBACiAKIAljYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGRldi0+b3BlbiA9IGNhdGNfb3BlbjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNhdGNfaGFyZF9zdGFydF94bWl0OwotCW5ldGRldi0+c3RvcCA9IGNhdGNfc3RvcDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGNhdGNfZ2V0X3N0YXRzOwotCW5ldGRldi0+dHhfdGltZW91dCA9IGNhdGNfdHhfdGltZW91dDsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmY2F0Y19uZXRkZXZfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gY2F0Y19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CiAKIAljYXRjLT51c2JkZXYgPSB1c2JkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKaW5kZXggODE2ODJjNi4uNmZjNGY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtNDE5LDYgKzQxOSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRtOTYwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gZG05NjAxX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZG05NjAxX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBkbTk2MDFfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBkbTk2MDFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQ7CkBAIC00MjgsOSArNDQwLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWRldi0+bmV0LT5kb19pb2N0bCA9IGRtOTYwMV9pb2N0bDsKLQlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gZG05NjAxX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT5uZXQtPnNldF9tYWNfYWRkcmVzcyA9IGRtOTYwMV9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmZG05NjAxX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmRtOTYwMV9ldGh0b29sX29wczsKIAlkZXYtPm5ldC0+aGFyZF9oZWFkZXJfbGVuICs9IERNX1RYX09WRVJIRUFEOwogCWRldi0+aGFyZF9tdHUgPSBkZXYtPm5ldC0+bXR1ICsgZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBmZTk4YWNhLi5jZGU0MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC05MzYsOCArOTM2LDcgQEAKIAkJCWlmICghb2Rldi0+cnhfYnVmX21pc3NpbmcpIHsKIAkJCQkvKiBQYWNrZXQgaXMgY29tcGxldGUuIEluamVjdCBpbnRvIHN0YWNrLiAqLwogCQkJCS8qIFdlIGhhdmUgSVAgcGFja2V0IGhlcmUgKi8KLQkJCQlvZGV2LT5za2JfcnhfYnVmLT5wcm90b2NvbCA9Ci0JCQkJCQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKKwkJCQlvZGV2LT5za2JfcnhfYnVmLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIAkJCQkvKiBkb24ndCBjaGVjayBpdCAqLwogCQkJCW9kZXYtPnNrYl9yeF9idWYtPmlwX3N1bW1lZCA9CiAJCQkJCUNIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMTI0Nyw3ICsxMjQ2LDcgQEAKICAqIFRoaXMgbmVlZHMgdG8gYmUgYSB0YXNrbGV0IG90aGVyd2lzZSB3ZSB3aWxsCiAgKiBlbmQgdXAgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkIGhzb191bnRocm90dGxlX3Rhc2tsZXQoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyB2b2lkIGhzb191bnRocm90dGxlX3Rhc2tsZXQoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMjY2LDcgKzEyNjUsNyBAQAogCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNlcmlhbC0+dW50aHJvdHRsZV90YXNrbGV0KTsKIH0KIAotdm9pZCBoc29fdW50aHJvdHRsZV93b3JrZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBoc29fdW50aHJvdHRsZV93b3JrZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaHNvX3NlcmlhbCwKQEAgLTE0NjUsOSArMTQ2NCw5IEBACiAKIAlyZXR1cm4gY2hhcnM7CiB9Ci1pbnQgdGlvY21nZXRfc3VibWl0X3VyYihzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLAotCQkJc3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0LAotCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKK3N0YXRpYyBpbnQgdGlvY21nZXRfc3VibWl0X3VyYihzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLAorCQkJICAgICAgIHN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0LAorCQkJICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCiB7CiAJaW50IHJlc3VsdDsKIApAQCAtMjM2NCwxMiArMjM2Myw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKiBGcmVlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLwotc3RhdGljIHZvaWQgaHNvX2ZyZWVfZGV2aWNlKHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KQotewotCWtmcmVlKGhzb19kZXYpOwotfQotCiAvKiBDcmVhdGVzIGEgZ2VuZXJhbCBoc28gZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IGhzb19kZXZpY2UgKmhzb19jcmVhdGVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJCQkgICAgaW50IHBvcnRfc3BlYykKQEAgLTI0MzIsOSArMjQyNSwxNiBAQAogCQlmcmVlX25ldGRldihoc29fbmV0LT5uZXQpOwogCX0KIAotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc29fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBoc29fbmV0X29wZW4sCisJLm5kb19zdG9wCT0gaHNvX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoc29fbmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaHNvX25ldF90eF90aW1lb3V0LAorfTsKKwogLyogaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgKi8KIHN0YXRpYyB2b2lkIGhzb19uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewpAQCAtMjQ0MywxMCArMjQ0Myw3IEBACiAJRDEoInNpemVvZiBoc29fbmV0IGlzICVkIiwgKGludClzaXplb2YoKmhzb19uZXQpKTsKIAogCS8qIGZpbGwgaW4gdGhlIG90aGVyIGZpZWxkcyAqLwotCW5ldC0+b3BlbiA9IGhzb19uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBoc29fbmV0X2Nsb3NlOwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gaHNvX25ldF9zdGFydF94bWl0OwotCW5ldC0+dHhfdGltZW91dCA9IGhzb19uZXRfdHhfdGltZW91dDsKKwluZXQtPm5ldGRldl9vcHMgPSAmaHNvX25ldGRldl9vcHM7CiAJbmV0LT53YXRjaGRvZ190aW1lbyA9IEhTT19ORVRfVFhfVElNRU9VVDsKIAluZXQtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDsKIAluZXQtPnR5cGUgPSBBUlBIUkRfTk9ORTsKQEAgLTI2NDYsNyArMjY0Myw3IEBACiAJfQogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKIAlrZnJlZShzZXJpYWwpOwotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIH0KIAogLyogQ3JlYXRlcyBhIGJ1bGsgQVQgY2hhbm5lbCAqLwpAQCAtMjcyNyw3ICsyNzI0LDcgQEAKIGV4aXQ6CiAJaHNvX2ZyZWVfdGlvbWdldChzZXJpYWwpOwogCWtmcmVlKHNlcmlhbCk7Ci0JaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCWtmcmVlKGhzb19kZXYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzg2LDcgKzI3ODMsNyBAQAogCQlrZnJlZShzZXJpYWwpOwogCX0KIAlpZiAoaHNvX2RldikKLQkJaHNvX2ZyZWVfZGV2aWNlKGhzb19kZXYpOworCQlrZnJlZShoc29fZGV2KTsKIAlyZXR1cm4gTlVMTDsKIAogfQpAQCAtMjk3OSw4ICsyOTc2LDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZoc29fZHJpdmVyLCBpbnRlcmZhY2UsIGhzb19kZXYpOwotCiAJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgZGV2aWNlICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGhzb19kZXYpOwogCkBAIC0yOTk4LDggKzI5OTMsNiBAQAogCiAJLyogcmVtb3ZlIHJlZmVyZW5jZSBvZiBvdXIgcHJpdmF0ZSBkYXRhICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlKTsKIH0KIAogc3RhdGljIHZvaWQgYXN5bmNfZ2V0X2ludGYoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYyBiL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKaW5kZXggY2VkOGYzNmUuLjdhZTlhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtNDg2LDYgKzQ4NiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jczc4MzBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IG1jczc4MzBfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtY3M3ODMwX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IG1jczc4MzBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXYtPm5ldDsKQEAgLTQ5NSwxMSArNTA3LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW5ldC0+ZG9faW9jdGwgPSBtY3M3ODMwX2lvY3RsOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmbWNzNzgzMF9ldGh0b29sX29wczsKLQluZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdDsKKwluZXQtPm5ldGRldl9vcHMgPSAmbWNzNzgzMF9uZXRkZXZfb3BzOwogCW1jczc4MzBfc2V0X211bHRpY2FzdChuZXQpOwotCW5ldC0+c2V0X21hY19hZGRyZXNzID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3M7CiAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGJ5dGUgb24gcnggKi8KIAlkZXYtPnJ4X3VyYl9zaXplID0gRVRIX0ZSQU1FX0xFTiArIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCBiY2Q4NThjLi4xYmYyNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQkJCXN0cnVjdCBybmRpc19rZWVwYWxpdmVfYyAqbXNnID0gKHZvaWQgKilidWY7CiAKIAkJCQltc2ctPm1zZ190eXBlID0gUk5ESVNfTVNHX0tFRVBBTElWRV9DOwotCQkJCW1zZy0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqbXNnKTsKKwkJCQltc2ctPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKm1zZyk7CiAJCQkJbXNnLT5zdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAkJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAogCQkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXUuZ2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmdldCArIGluX2xlbik7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAl1LmdldC0+bGVuID0gY3B1X3RvX2xlMzIoaW5fbGVuKTsKLQl1LmdldC0+b2Zmc2V0ID0gY2NwdTIoMjApOworCXUuZ2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigyMCk7CiAKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkgewpAQCAtMjY2LDYgKzI2NiwxNiBAQAogCXJldHVybiAtRURPTTsKIH0KIAorLyogc2FtZSBhcyB1c2JuZXRfbmV0ZGV2X29wcyBidXQgTVRVIGNoYW5nZSBub3QgYWxsb3dlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBpbnQKIGdlbmVyaWNfcm5kaXNfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgZmxhZ3MpCiB7CkBAIC0yOTcsOSArMzA3LDkgQEAKIAkJZ290byBmYWlsOwogCiAJdS5pbml0LT5tc2dfdHlwZSA9IFJORElTX01TR19JTklUOwotCXUuaW5pdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5pbml0KTsKLQl1LmluaXQtPm1ham9yX3ZlcnNpb24gPSBjY3B1MigxKTsKLQl1LmluaXQtPm1pbm9yX3ZlcnNpb24gPSBjY3B1MigwKTsKKwl1LmluaXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuaW5pdCk7CisJdS5pbml0LT5tYWpvcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMSk7CisJdS5pbml0LT5taW5vcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMCk7CiAKIAkvKiBtYXggdHJhbnNmZXIgKGluIHNwZWMpIGlzIDB4NDAwMCBhdCBmdWxsIHNwZWVkLCBidXQgZm9yCiAJICogVFggd2UnbGwgc3RpY2sgdG8gb25lIEV0aGVybmV0IHBhY2tldCBwbHVzIFJORElTIGZyYW1pbmcuCkBAIC0zMjcsNyArMzM3LDggQEAKIAlkZXYtPnJ4X3VyYl9zaXplICY9IH4oZGV2LT5tYXhwYWNrZXQgLSAxKTsKIAl1LmluaXQtPm1heF90cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoZGV2LT5yeF91cmJfc2l6ZSk7CiAKLQluZXQtPmNoYW5nZV9tdHUgPSBOVUxMOworCW5ldC0+bmV0ZGV2X29wcyA9ICZybmRpc19uZXRkZXZfb3BzOworCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKIAkJLyogaXQgbWlnaHQgbm90IGV2ZW4gYmUgYW4gUk5ESVMgZGV2aWNlISEgKi8KQEAgLTQwMywxMCArNDE0LDEwIEBACiAJLyogc2V0IGEgbm9uemVybyBmaWx0ZXIgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXJzICovCiAJbWVtc2V0KHUuc2V0LCAwLCBzaXplb2YgKnUuc2V0KTsKIAl1LnNldC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfU0VUOwotCXUuc2V0LT5tc2dfbGVuID0gY2NwdTIoNCArIHNpemVvZiAqdS5zZXQpOworCXUuc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoNCArIHNpemVvZiAqdS5zZXQpOwogCXUuc2V0LT5vaWQgPSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUjsKLQl1LnNldC0+bGVuID0gY2NwdTIoNCk7Ci0JdS5zZXQtPm9mZnNldCA9IGNjcHUyKChzaXplb2YgKnUuc2V0KSAtIDgpOworCXUuc2V0LT5sZW4gPSBjcHVfdG9fbGUzMig0KTsKKwl1LnNldC0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoKHNpemVvZiAqdS5zZXQpIC0gOCk7CiAJKihfX2xlMzIgKikodS5idWYgKyBzaXplb2YgKnUuc2V0KSA9IFJORElTX0RFRkFVTFRfRklMVEVSOwogCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKQEAgLTQyMyw3ICs0MzQsNyBAQAogaGFsdF9mYWlsX2FuZF9yZWxlYXNlOgogCW1lbXNldCh1LmhhbHQsIDAsIHNpemVvZiAqdS5oYWx0KTsKIAl1LmhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JdS5oYWx0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmhhbHQpOworCXUuaGFsdC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5oYWx0KTsKIAkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopdS5oYWx0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIGZhaWxfYW5kX3JlbGVhc2U6CiAJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKQEAgLTQ0OCw3ICs0NTksNyBAQAogCWhhbHQgPSBremFsbG9jKENPTlRST0xfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChoYWx0KSB7CiAJCWhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JCWhhbHQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKmhhbHQpOworCQloYWx0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICpoYWx0KTsKIAkJKHZvaWQpIHJuZGlzX2NvbW1hbmQoZGV2LCAodm9pZCAqKWhhbHQsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCQlrZnJlZShoYWx0KTsKIAl9CkBAIC01NDMsNyArNTU0LDcgQEAKIAltZW1zZXQoaGRyLCAwLCBzaXplb2YgKmhkcik7CiAJaGRyLT5tc2dfdHlwZSA9IFJORElTX01TR19QQUNLRVQ7CiAJaGRyLT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCWhkci0+ZGF0YV9vZmZzZXQgPSBjY3B1MihzaXplb2YoKmhkcikgLSA4KTsKKwloZHItPmRhdGFfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpoZHIpIC0gOCk7CiAJaGRyLT5kYXRhX2xlbiA9IGNwdV90b19sZTMyKGxlbik7CiAKIAkvKiBGSVhNRSBtYWtlIHRoZSBsYXN0IHBhY2tldCBhbHdheXMgYmUgc2hvcnQgLi4uICovCkBAIC01NjIsOSArNTczLDYgQEAKIAkudHhfZml4dXAgPQlybmRpc190eF9maXh1cCwKIH07CiAKLSN1bmRlZiBjY3B1MgotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGQ4NjY0YmYuLmY5ZmI0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXJiICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYiwgKmN0cmxfdXJiOwogCXN0cnVjdCBza19idWZmICp0eF9za2IsICpyeF9za2I7CkBAIC00NjMsOCArNDYyLDggQEAKIAlza2JfcHV0KGRldi0+cnhfc2tiLCBwa3RfbGVuKTsKIAlkZXYtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhkZXYtPnJ4X3NrYiwgbmV0ZGV2KTsKIAluZXRpZl9yeChkZXYtPnJ4X3NrYik7Ci0JZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCXNwaW5fbG9jaygmZGV2LT5yeF9wb29sX2xvY2spOwogCXNrYiA9IHB1bGxfc2tiKGRldik7CkBAIC01NzMsMTMgKzU3MiwxMyBAQAogCiAJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWlmIChkWzBdICYgVFNSX0VSUk9SUykgewotCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgKFRTUl9FQ09MIHwgVFNSX0pCUikpCi0JCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTENPTCkKLQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTE9TU19DUlMpCi0JCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiAJLyogUmVwb3J0IGxpbmsgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2sgKi8KIAlpZiAoKGRbSU5UX01TUl0gJiBNU1JfTElOSykgPT0gMCkgewpAQCAtNjk3LDE3ICs2OTYsMTIgQEAKIAlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE1MF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigocnRsODE1MF90ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiVHggdGltZW91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKLQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNTBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNzQ3LDEyICs3NDEsMTIgQEAKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwogCQllbHNlIHsKIAkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9IGVsc2UgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIApAQCAtODk3LDYgKzg5MSwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1MF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBydGw4MTUwX29wZW4sCisJLm5kb19zdG9wCQk9IHJ0bDgxNTBfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBydGw4MTUwX2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTUwX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHJ0bDgxNTBfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzLAorCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTkyMywxNSArOTMwLDggQEAKIAkKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OwotCW5ldGRldi0+b3BlbiA9IHJ0bDgxNTBfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBydGw4MTUwX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBydGw4MTUwX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZydGw4MTUwX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNTBfVFhfVElNRU9VVDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTUwX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTUwX3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3Q7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPmdldF9zdGF0cyA9IHJ0bDgxNTBfbmV0ZGV2X3N0YXRzOwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCWRldi0+aW50cl9pbnRlcnZhbCA9IDEwMDsJLyogMTAwbXMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCA1NTc0YWJlLi5kYzE2NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNTUsMTEgKzU1LDEwIEBACiAKIHN0cnVjdCB1c2JfY29udGV4dCB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7Ci0Jc3RydWN0IGNvbXBsZXRpb24gbm90aWZ5OwogCXN0cnVjdCB1c2JuZXQgKmRldjsKIH07CiAKLWludCB0dXJib19tb2RlID0gdHJ1ZTsKK3N0YXRpYyBpbnQgdHVyYm9fbW9kZSA9IHRydWU7CiBtb2R1bGVfcGFyYW0odHVyYm9fbW9kZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR1cmJvX21vZGUsICJFbmFibGUgbXVsdGlwbGUgZnJhbWVzIHBlciBSeCB0cmFuc2FjdGlvbiIpOwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfY29udGV4dCAqdXNiX2NvbnRleHQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2NvbnRleHQtPmRldjsKQEAgLTMxNiw4ICszMTUsNiBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlkZXZ3YXJuKGRldiwgImFzeW5jIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIiwgc3RhdHVzKTsKIAotCWNvbXBsZXRlKCZ1c2JfY29udGV4dC0+bm90aWZ5KTsKLQogCWtmcmVlKHVzYl9jb250ZXh0KTsKIAl1c2JfZnJlZV91cmIodXJiKTsKIH0KQEAgLTM0OCwxMSArMzQ1LDEwIEBACiAJdXNiX2NvbnRleHQtPnJlcS53VmFsdWUgPSAwMDsKIAl1c2JfY29udGV4dC0+cmVxLndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKIAl1c2JfY29udGV4dC0+cmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQlpbml0X2NvbXBsZXRpb24oJnVzYl9jb250ZXh0LT5ub3RpZnkpOwogCiAJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAogCQkodm9pZCAqKSZ1c2JfY29udGV4dC0+cmVxLCBkYXRhLCBzaXplLAotCQkodXNiX2NvbXBsZXRlX3Qpc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrLAorCQlzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2ssCiAJCSh2b2lkICopdXNiX2NvbnRleHQpOwogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTEwMTIsNiArMTAwOCwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtc2M5NXh4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gc21zYzk1eHhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0LAorfTsKKwogc3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gTlVMTDsKQEAgLTEwNDIsOSArMTA1MCw4IEBACiAJLyogSW5pdCBhbGwgcmVnaXN0ZXJzICovCiAJcmV0ID0gc21zYzk1eHhfcmVzZXQoZGV2KTsKIAotCWRldi0+bmV0LT5kb19pb2N0bCA9IHNtc2M5NXh4X2lvY3RsOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnNtc2M5NXh4X25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJnNtc2M5NXh4X2V0aHRvb2xfb3BzOwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gU01TQzk1WFhfVFhfT1ZFUkhFQUQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYzMyMjg0Zi4uNjU5NjU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCitpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQlsbF9tdHUgPSBuZXdfbXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW47CkBAIC0yNDYsMTQgKzI0Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1c2JuZXRfZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQotewotCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2NoYW5nZV9tdHUpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01NDgsNyArNTQxLDcgQEAKIAogLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CiAKLXN0YXRpYyBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJdGVtcDsKQEAgLTU5Miw2ICs1ODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc3RvcCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU5OSw3ICs1OTMsNyBAQAogCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAotc3RhdGljIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlyZXR2YWw7CkBAIC02NzQsNiArNjY4LDcgQEAKIGRvbmVfbm9wbToKIAlyZXR1cm4gcmV0dmFsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X29wZW4pOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05MDgsNyArOTAzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCkBAIC05MTcsMTAgKzkxMiwxMSBAQAogCiAJLy8gRklYTUU6IGRldmljZSByZWNvdmVyeSAtLSByZXNldD8KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF90eF90aW1lb3V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMDAzLDcgKzk5OSw3IEBACiAJfQogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdGFydF94bWl0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTExMCw2ICsxMTA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZGlzY29ubmVjdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdXNibmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc5LDEzICsxMTg0LDE0IEBACiAJCW5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogI2VuZGlmCiAKLQluZXQtPmNoYW5nZV9tdHUgPSB1c2JuZXRfY2hhbmdlX210dTsKLQluZXQtPmdldF9zdGF0cyA9IHVzYm5ldF9nZXRfc3RhdHM7CisJbmV0LT5uZXRkZXZfb3BzID0gJnVzYm5ldF9uZXRkZXZfb3BzOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0OwogCW5ldC0+b3BlbiA9IHVzYm5ldF9vcGVuOwogCW5ldC0+c3RvcCA9IHVzYm5ldF9zdG9wOwotCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CiAJbmV0LT50eF90aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQ7CisjZW5kaWYKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmdXNibmV0X2V0aHRvb2xfb3BzOwogCiAJLy8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGJpbmQvaW5pdCBwcm9jZWR1cmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMTI0ZmU3NS4uMDE1ZGIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTksMTIgKzE5LDE3IEBACiAjZGVmaW5lIERSVl9OQU1FCSJ2ZXRoIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgogCisjZGVmaW5lIE1JTl9NVFUgNjgJCS8qIE1pbiBMMyBNVFUgKi8KKyNkZWZpbmUgTUFYX01UVSA2NTUzNQkJLyogTWF4IEwzIE1UVSAoYXJiaXRyYXJ5KSAqLworI2RlZmluZSBNVFVfUEFEIChFVEhfSExFTiArIDQpICAvKiBNYXggZGlmZmVyZW5jZSBiZXR3ZWVuIEwyIGFuZCBMMyBzaXplIE1UVSAqLworCiBzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nCXR4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZwlyeF9ieXRlczsKIAl1bnNpZ25lZCBsb25nCXR4X2J5dGVzOwogCXVuc2lnbmVkIGxvbmcJdHhfZHJvcHBlZDsKKwl1bnNpZ25lZCBsb25nCXJ4X2Ryb3BwZWQ7CiB9OwogCiBzdHJ1Y3QgdmV0aF9wcml2IHsKQEAgLTE0Nyw3ICsxNTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpyY3YgPSBOVUxMOwogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXYsICpyY3ZfcHJpdjsKLQlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOworCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHMsICpyY3Zfc3RhdHM7CiAJaW50IGxlbmd0aCwgY3B1OwogCiAJc2tiX29ycGhhbihza2IpOwpAQCAtMTU4LDkgKzE2MywxMyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0YXRzID0gcGVyX2NwdV9wdHIocHJpdi0+c3RhdHMsIGNwdSk7CisJcmN2X3N0YXRzID0gcGVyX2NwdV9wdHIocmN2X3ByaXYtPnN0YXRzLCBjcHUpOwogCiAJaWYgKCEocmN2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0ZjsKKwkJZ290byB0eF9kcm9wOworCisJaWYgKHNrYi0+bGVuID4gKHJjdi0+bXR1ICsgTVRVX1BBRCkpCisJCWdvdG8gcnhfZHJvcDsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByY3YpOwpAQCAtMTc4LDE3ICsxODcsMjEgQEAKIAlzdGF0cy0+dHhfYnl0ZXMgKz0gbGVuZ3RoOwogCXN0YXRzLT50eF9wYWNrZXRzKys7CiAKLQlzdGF0cyA9IHBlcl9jcHVfcHRyKHJjdl9wcml2LT5zdGF0cywgY3B1KTsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJcmN2X3N0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7CisJcmN2X3N0YXRzLT5yeF9wYWNrZXRzKys7CiAKIAluZXRpZl9yeChza2IpOwogCXJldHVybiAwOwogCi1vdXRmOgordHhfZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCXJldHVybiAwOworCityeF9kcm9wOgorCWtmcmVlX3NrYihza2IpOworCXJjdl9zdGF0cy0+cnhfZHJvcHBlZCsrOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjEwLDYgKzIyMyw3IEBACiAJZGV2X3N0YXRzLT5yeF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9kcm9wcGVkID0gMDsKKwlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKQEAgLTIxOSw2ICsyMzMsNyBAQAogCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKIAkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7CiAJCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKKwkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOwogCX0KIAogCXJldHVybiBkZXZfc3RhdHM7CkBAIC0yNDksNiArMjY0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXNfdmFsaWRfdmV0aF9tdHUoaW50IG5ld19tdHUpCit7CisJcmV0dXJuIChuZXdfbXR1ID49IE1JTl9NVFUgJiYgbmV3X210dSA8PSBNQVhfTVRVKTsKK30KKworc3RhdGljIGludCB2ZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJaWYgKCFpc192YWxpZF92ZXRoX210dShuZXdfbXR1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOwpAQCAtMjc3LDYgKzMwNSw3IEBACiAJLm5kb19vcGVuICAgICAgICAgICAgPSB2ZXRoX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LAorCS5uZG9fY2hhbmdlX210dSAgICAgID0gdmV0aF9jaGFuZ2VfbXR1LAogCS5uZG9fZ2V0X3N0YXRzICAgICAgID0gdmV0aF9nZXRfc3RhdHMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiB9OwpAQCAtMzAzLDYgKzMzMiwxMCBAQAogCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KKwlpZiAodGJbSUZMQV9NVFVdKSB7CisJCWlmICghaXNfdmFsaWRfdmV0aF9tdHUobmxhX2dldF91MzIodGJbSUZMQV9NVFVdKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggM2I4ZTYzMi4uODgwZWFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEwOSw4ICsxMDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogLyogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gdXNlIFBDSSBtZW1vcnkgc3BhY2UuIFNvbWUgZWFybHkgdmVyc2lvbnMKICAgIG9mIHRoZSBSaGluZSBtYXkgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEkvTyBzcGFjZSBhY2Nlc3Nlcy4gKi8KQEAgLTU4OSw3ICs1OTAsNyBAQAogCXdvcmtfZG9uZSA9IHJoaW5lX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaW93cml0ZTE2KEludHJSeERvbmUgfCBJbnRyUnhFcnIgfCBJbnRyUnhFbXB0eXwgSW50clJ4T3ZlcmZsb3cgfAogCQkJICBJbnRyUnhEcm9wcGVkIHwgSW50clJ4Tm9CdWYgfCBJbnRyVHhBYm9ydGVkIHwKQEAgLTEzMTksNyArMTMyMCw3IEBACiAJCQkJICBJbnRyUENJRXJyIHwgSW50clN0YXRzTWF4IHwgSW50ckxpbmtDaGFuZ2UsCiAJCQkJICBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnJwLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnJwLT5uYXBpKTsKIAkJfQogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyVHhFcnJTdW1tYXJ5IHwgSW50clR4RG9uZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggYzU2OTFmZC4uZmI1M2VmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTE4MzgsMTcgKzE4MzgsMTkgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGRpbmZvLT5za2I7CiAJaW50IGk7CisJaW50IHBrdGxlbjsKIAogCS8qCiAJICoJRG9uJ3QgdW5tYXAgdGhlIHByZS1hbGxvY2F0ZWQgdHhfYnVmcwogCSAqLwogCWlmICh0ZGluZm8tPnNrYl9kbWEpIHsKIAorCQlwa3RsZW4gPSAoc2tiLT5sZW4gPiBFVEhfWkxFTiA/IDogRVRIX1pMRU4pOwogCQlmb3IgKGkgPSAwOyBpIDwgdGRpbmZvLT5uc2tiX2RtYTsgaSsrKSB7CiAjaWZkZWYgVkVMT0NJVFlfWkVST19DT1BZX1NVUFBPUlQKIAkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRpbmZvLT5za2JfZG1hW2ldLCBsZTE2X3RvX2NwdSh0ZC0+dGRlc2MxLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogI2Vsc2UKLQkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRpbmZvLT5za2JfZG1hW2ldLCBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHRkaW5mby0+c2tiX2RtYVtpXSwgcGt0bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKICNlbmRpZgogCQkJdGRpbmZvLT5za2JfZG1hW2ldID0gMDsKIAkJfQpAQCAtMjA4MCwxNyArMjA4MiwxNCBAQAogCXN0cnVjdCB0eF9kZXNjICp0ZF9wdHI7CiAJc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBwa3RsZW4gPSBza2ItPmxlbjsKKwlpbnQgcGt0bGVuOwogCV9fbGUxNiBsZW47CiAJaW50IGluZGV4OwogCiAKLQotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7Ci0JCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlnb3RvIG91dDsKLQkJcGt0bGVuID0gRVRIX1pMRU47Ci0JfQorCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCWdvdG8gb3V0OworCXBrdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgc2tiLT5sZW4sIEVUSF9aTEVOKTsKIAogCWxlbiA9IGNwdV90b19sZTE2KHBrdGxlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggMjlhMzMwOS4uZWE0M2UxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTE4Myw3ICsxODMsNyBAQAogfTsKIAogZW51bSB7Ci0JUlhfSU5URU4gPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKwlSWF9JTlRFTiA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKQEAgLTIxMCw3ICsyMTAsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIHsKLQlURF9RVUVVRSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCVREX1FVRVVFID0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfTsKIAogc3RydWN0IHRkX2J1ZiB7CkBAIC0yNDIsNyArMjQyLDcgQEAKIAogZW51bSAgdmVsb2NpdHlfb3duZXIgewogCU9XTkVEX0JZX0hPU1QgPSAwLAotCU9XTkVEX0JZX05JQyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCU9XTkVEX0JZX05JQyA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGM2ODgwODMuLmE2ZjFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTM3LDEyICszNywxNSBAQAogI2RlZmluZSBNQVhfUEFDS0VUX0xFTiAoRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyBFVEhfREFUQV9MRU4pCiAjZGVmaW5lIEdPT0RfQ09QWV9MRU4JMTI4CiAKKyNkZWZpbmUgVklSVE5FVF9TRU5EX0NPTU1BTkRfU0dfTUFYICAgIDIKKwogc3RydWN0IHZpcnRuZXRfaW5mbwogewogCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwotCXN0cnVjdCB2aXJ0cXVldWUgKnJ2cSwgKnN2cTsKKwlzdHJ1Y3QgdmlydHF1ZXVlICpydnEsICpzdnEsICpjdnE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJLyogVGhlIHNrYiB3ZSBjb3VsZG4ndCBzZW5kIGJlY2F1c2UgYnVmZmVycyB3ZXJlIGZ1bGwuICovCiAJc3RydWN0IHNrX2J1ZmYgKmxhc3RfeG1pdF9za2I7CkBAIC0zNzUsOSArMzc4LDkgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHJ2cS0+dmRldi0+cHJpdjsKIAkvKiBTY2hlZHVsZSBOQVBJLCBTdXBwcmVzcyBmdXJ0aGVyIGludGVycnVwdHMgaWYgc3VjY2Vzc2Z1bC4gKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHJ2cSk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CiAJfQogfQogCkBAIC00MDMsMTEgKzQwNiwxMSBAQAogCiAJLyogT3V0IG9mIHBhY2tldHM/ICovCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAodW5saWtlbHkoIXZpLT5ydnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5ydnEpKQogCQkgICAgJiYgbmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7CiAJCQl2aS0+cnZxLT52cV9vcHMtPmRpc2FibGVfY2IodmktPnJ2cSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKG5hcGkpOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KQEAgLTU2Miw2ICs1NjUsMjIgQEAKIAlnb3RvIGRvbmU7CiB9CiAKK3N0YXRpYyBpbnQgdmlydG5ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2aS0+dmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZXRoX21hY19hZGRyKGRldiwgcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZkZXYtPmNvbmZpZy0+c2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWFjKSwKKwkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCB2aXJ0bmV0X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTU4MSwxMyArNjAwLDYwIEBACiAJICogd29uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBwYWNrZXRzCiAJICogbm93LiAgdmlydG5ldF9wb2xsIHdhbnRzIHJlLWVuYWJsZSB0aGUgcXVldWUsIHNvIHdlIGRpc2FibGUgaGVyZS4KIAkgKiBXZSBzeW5jaHJvbml6ZSBhZ2FpbnN0IGludGVycnVwdHMgdmlhIE5BUElfU1RBVEVfU0NIRUQgKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXZpLT5ydnEtPnZxX29wcy0+ZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdmktPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTZW5kIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBhbmQgY2hlY2sgc3RhdHVzLiAgQ29tbWFuZHMKKyAqIHN1cHBvcnRlZCBieSB0aGUgaHlwZXJ2aXNvciwgYXMgaW5kaWNhdGVkIGJ5IGZlYXR1cmUgYml0cywgc2hvdWxkCisgKiBuZXZlciBmYWlsIHVubGVzcyBpbXByb3Blcmx5IGZvcm1hdGVkLgorICovCitzdGF0aWMgYm9vbCB2aXJ0bmV0X3NlbmRfY29tbWFuZChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgdTggY2xhc3MsIHU4IGNtZCwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpkYXRhLCBpbnQgb3V0LCBpbnQgaW4pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1ZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCArIDJdOworCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIGN0cmw7CisJdmlydGlvX25ldF9jdHJsX2FjayBzdGF0dXMgPSB+MDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQlCVUcoKTsgIC8qIENhbGxlciBzaG91bGQga25vdyBiZXR0ZXIgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUJVR19PTihvdXQgKyBpbiA+IFZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCk7CisKKwlvdXQrKzsgLyogQWRkIGhlYWRlciAqLworCWluKys7IC8qIEFkZCByZXR1cm4gc3RhdHVzICovCisKKwljdHJsLmNsYXNzID0gY2xhc3M7CisJY3RybC5jbWQgPSBjbWQ7CisKKwlzZ19pbml0X3RhYmxlKHNnLCBvdXQgKyBpbik7CisKKwlzZ19zZXRfYnVmKCZzZ1swXSwgJmN0cmwsIHNpemVvZihjdHJsKSk7CisJbWVtY3B5KCZzZ1sxXSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAob3V0ICsgaW4gLSAyKSk7CisJc2dfc2V0X2J1Zigmc2dbb3V0ICsgaW4gLSAxXSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCisJaWYgKHZpLT5jdnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+Y3ZxLCBzZywgb3V0LCBpbiwgdmkpICE9IDApCisJCUJVRygpOworCisJdmktPmN2cS0+dnFfb3BzLT5raWNrKHZpLT5jdnEpOworCisJLyoKKwkgKiBTcGluIGZvciBhIHJlc3BvbnNlLCB0aGUga2ljayBjYXVzZXMgYW4gaW9wb3J0IHdyaXRlLCB0cmFwcGluZworCSAqIGludG8gdGhlIGh5cGVydmlzb3IsIHNvIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBoYW5kbGVkIGltbWVkaWF0ZWx5LgorCSAqLworCXdoaWxlICghdmktPmN2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5jdnEsICZ0bXApKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiBzdGF0dXMgPT0gVklSVElPX05FVF9PSzsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjA4LDEwICs2NzQsMTA0IEBACiAJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0oZGV2LCBkYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgdmlydG5ldF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CisJdTggcHJvbWlzYywgYWxsbXVsdGk7CisJc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgKm1hY19kYXRhOworCXN0cnVjdCBkZXZfYWRkcl9saXN0ICphZGRyOworCXZvaWQgKmJ1ZjsKKwlpbnQgaTsKKworCS8qIFdlIGNhbid0IGR5bmFtaWNhbHkgc2V0IG5kb19zZXRfcnhfbW9kZSwgc28gcmV0dXJuIGdyYWNlZnVsbHkgKi8KKwlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfUlgpKQorCQlyZXR1cm47CisKKwlwcm9taXNjID0gKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICE9IDApOworCWFsbG11bHRpID0gKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwKTsKKworCXNnX3NldF9idWYoc2csICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1JYLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1JYX1BST01JU0MsCisJCQkJICBzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byAlc2FibGUgcHJvbWlzYyBtb2RlLlxuIiwKKwkJCSBwcm9taXNjID8gImVuIiA6ICJkaXMiKTsKKworCXNnX3NldF9idWYoc2csICZhbGxtdWx0aSwgc2l6ZW9mKGFsbG11bHRpKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfUlgsCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfUlhfQUxMTVVMVEksCisJCQkJICBzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byAlc2FibGUgYWxsbXVsdGkgbW9kZS5cbiIsCisJCQkgYWxsbXVsdGkgPyAiZW4iIDogImRpcyIpOworCisJLyogTUFDIGZpbHRlciAtIHVzZSBvbmUgYnVmZmVyIGZvciBib3RoIGxpc3RzICovCisJbWFjX2RhdGEgPSBidWYgPSBremFsbG9jKCgoZGV2LT51Y19jb3VudCArIGRldi0+bWNfY291bnQpICogRVRIX0FMRU4pICsKKwkJCQkgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNQUMgYWRkcmVzcyBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogU3RvcmUgdGhlIHVuaWNhc3QgbGlzdCBhbmQgY291bnQgaW4gdGhlIGZyb250IG9mIHRoZSBidWZmZXIgKi8KKwltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+dWNfY291bnQ7CisJYWRkciA9IGRldi0+dWNfbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkKKwkJbWVtY3B5KCZtYWNfZGF0YS0+bWFjc1tpXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOworCisJc2dfc2V0X2J1Zigmc2dbMF0sIG1hY19kYXRhLAorCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+dWNfY291bnQgKiBFVEhfQUxFTikpOworCisJLyogbXVsdGljYXN0IGxpc3QgYW5kIGNvdW50IGZpbGwgdGhlIGVuZCAqLworCW1hY19kYXRhID0gKHZvaWQgKikmbWFjX2RhdGEtPm1hY3NbZGV2LT51Y19jb3VudF1bMF07CisKKwltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+bWNfY291bnQ7CisJYWRkciA9IGRldi0+bWNfbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkKKwkJbWVtY3B5KCZtYWNfZGF0YS0+bWFjc1tpXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOworCisJc2dfc2V0X2J1Zigmc2dbMV0sIG1hY19kYXRhLAorCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+bWNfY291bnQgKiBFVEhfQUxFTikpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX01BQywKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9NQUNfVEFCTEVfU0VULAorCQkJCSAgc2csIDIsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IE1BQyBmaXRsZXIgdGFibGUuXG4iKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHZpcm5ldF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJc2dfc2V0X2J1Zigmc2csICZ2aWQsIHNpemVvZih2aWQpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9WTEFOLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1ZMQU5fQURELCAmc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIFZMQU4gSUQgJWQuXG4iLCB2aWQpOworfQorCitzdGF0aWMgdm9pZCB2aXJuZXRfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19zZXRfYnVmKCZzZywgJnZpZCwgc2l6ZW9mKHZpZCkpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1ZMQU4sCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfVkxBTl9ERUwsICZzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBraWxsIFZMQU4gSUQgJWQuXG4iLCB2aWQpOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZpcnRuZXRfZXRodG9vbF9vcHMgPSB7CiAJLnNldF90eF9jc3VtID0gdmlydG5ldF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKICNkZWZpbmUgTUlOX01UVSA2OApAQCAtNjMwLDEzICs3OTAsNTEgQEAKIAkubmRvX3N0b3AgICAJICAgICA9IHZpcnRuZXRfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0ICAgICAgPSBzdGFydF94bWl0LAogCS5uZG9fdmFsaWRhdGVfYWRkciAgID0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2aXJ0bmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9yeF9tb2RlICAgICA9IHZpcnRuZXRfc2V0X3J4X21vZGUsCiAJLm5kb19jaGFuZ2VfbXR1CSAgICAgPSB2aXJ0bmV0X2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X2FkZF92aWQgPSB2aXJuZXRfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCA9IHZpcm5ldF92bGFuX3J4X2tpbGxfdmlkLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB2aXJ0bmV0X25ldHBvbGwsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKK3sKKwl1MTYgdjsKKworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfU1RBVFVTKSkKKwkJcmV0dXJuOworCisJdmktPnZkZXYtPmNvbmZpZy0+Z2V0KHZpLT52ZGV2LAorCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBzdGF0dXMpLAorCQkJICAgICAgJnYsIHNpemVvZih2KSk7CisKKwkvKiBJZ25vcmUgdW5rbm93biAoZnV0dXJlKSBzdGF0dXMgYml0cyAqLworCXYgJj0gVklSVElPX05FVF9TX0xJTktfVVA7CisKKwlpZiAodmktPnN0YXR1cyA9PSB2KQorCQlyZXR1cm47CisKKwl2aS0+c3RhdHVzID0gdjsKKworCWlmICh2aS0+c3RhdHVzICYgVklSVElPX05FVF9TX0xJTktfVVApIHsKKwkJbmV0aWZfY2Fycmllcl9vbih2aS0+ZGV2KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZSh2aS0+ZGV2KTsKKwl9IGVsc2UgeworCQluZXRpZl9jYXJyaWVyX29mZih2aS0+ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZSh2aS0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRuZXRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSB2ZGV2LT5wcml2OworCisJdmlydG5ldF91cGRhdGVfc3RhdHVzKHZpKTsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCWludCBlcnI7CkBAIC02NzgsOCArODc2LDExIEBACiAJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsCiAJCQkJICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIG1hYyksCiAJCQkJICBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJdmRldi0+Y29uZmlnLT5zZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBtYWMpLAorCQkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisJfQogCiAJLyogU2V0IHVwIG91ciBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MTUsNiArOTE2LDE3IEBACiAJCWdvdG8gZnJlZV9yZWN2OwogCX0KIAorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQl2aS0+Y3ZxID0gdmRldi0+Y29uZmlnLT5maW5kX3ZxKHZkZXYsIDIsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZpLT5jdnEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZpLT5zdnEpOworCQkJZ290byBmcmVlX3NlbmQ7CisJCX0KKworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOKSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwl9CisKIAkvKiBJbml0aWFsaXplIG91ciBlbXB0eSByZWNlaXZlIGFuZCBzZW5kIHF1ZXVlcy4gKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+cmVjdik7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnNlbmQpOwpAQCAtNzI3LDcgKzkzOSw3IEBACiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygidmlydGlvX25ldDogcmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9zZW5kOworCQlnb3RvIGZyZWVfY3RybDsKIAl9CiAKIAkvKiBMYXN0IG9mIGFsbCwgc2V0IHVwIHNvbWUgcmVjZWl2ZSBidWZmZXJzLiAqLwpAQCAtNzM5LDExICs5NTEsMTggQEAKIAkJZ290byB1bnJlZ2lzdGVyOwogCX0KIAorCXZpLT5zdGF0dXMgPSBWSVJUSU9fTkVUX1NfTElOS19VUDsKKwl2aXJ0bmV0X3VwZGF0ZV9zdGF0dXModmkpOworCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwogCXByX2RlYnVnKCJ2aXJ0bmV0OiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIAogdW5yZWdpc3RlcjoKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZnJlZV9jdHJsOgorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiBmcmVlX3NlbmQ6CiAJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPnN2cSk7CiBmcmVlX3JlY3Y6CkBAIC03NzUsNiArOTk0LDggQEAKIAogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5zdnEpOwogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5ydnEpOworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYodmktPmRldik7CiAKIAl3aGlsZSAodmktPnBhZ2VzKQpAQCAtNzk0LDcgKzEwMTUsOCBAQAogCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLCAvKiBXZSBkb24ndCB5ZXQgaGFuZGxlIFVGTyBpbnB1dC4gKi8KLQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGLAorCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYsIFZJUlRJT19ORVRfRl9TVEFUVVMsIFZJUlRJT19ORVRfRl9DVFJMX1ZRLAorCVZJUlRJT19ORVRfRl9DVFJMX1JYLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOLAogCVZJUlRJT19GX05PVElGWV9PTl9FTVBUWSwKIH07CiAKQEAgLTgwNiw2ICsxMDI4LDcgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkucHJvYmUgPQl2aXJ0bmV0X3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcCh2aXJ0bmV0X3JlbW92ZSksCisJLmNvbmZpZ19jaGFuZ2VkID0gdmlydG5ldF9jb25maWdfY2hhbmdlZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IGI0Njg5NzkuLjk2OTNiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMjk2LDcgKzI5NiwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzEwMV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gYzEwMV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGMxMDFfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBjMTAxX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSkKIHsKQEAgLTM2Nyw5ICszNzMsNyBAQAogCWRldi0+bWVtX3N0YXJ0ID0gd2luYmFzZTsKIAlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgQzEwMV9NQVBQRURfUkFNX1NJWkUgLSAxOwogCWRldi0+dHhfcXVldWVfbGVuID0gNTA7Ci0JZGV2LT5kb19pb2N0bCA9IGMxMDFfaW9jdGw7Ci0JZGV2LT5vcGVuID0gYzEwMV9vcGVuOwotCWRldi0+c3RvcCA9IGMxMDFfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJmMxMDFfb3BzOwogCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCWNhcmQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCBkODBiNzJlLi42MTU4MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTQyNyw2ICs0MjcsMTUgQEAKIH0KIG1vZHVsZV9leGl0KGNvc2FfZXhpdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29zYV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gY29zYV9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBjb3NhX25ldF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGNvc2FfbmV0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IGNvc2FfcHJvYmUoaW50IGJhc2UsIGludCBpcnEsIGludCBkbWEpCiB7CiAJc3RydWN0IGNvc2FfZGF0YSAqY29zYSA9IGNvc2FfY2FyZHMrbnJfY2FyZHM7CkBAIC01NzUsMTAgKzU4NCw3IEBACiAJCX0KIAkJZGV2X3RvX2hkbGMoY2hhbi0+bmV0ZGV2KS0+YXR0YWNoID0gY29zYV9uZXRfYXR0YWNoOwogCQlkZXZfdG9faGRsYyhjaGFuLT5uZXRkZXYpLT54bWl0ID0gY29zYV9uZXRfdHg7Ci0JCWNoYW4tPm5ldGRldi0+b3BlbiA9IGNvc2FfbmV0X29wZW47Ci0JCWNoYW4tPm5ldGRldi0+c3RvcCA9IGNvc2FfbmV0X2Nsb3NlOwotCQljaGFuLT5uZXRkZXYtPmRvX2lvY3RsID0gY29zYV9uZXRfaW9jdGw7Ci0JCWNoYW4tPm5ldGRldi0+dHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQ7CisJCWNoYW4tPm5ldGRldi0+bmV0ZGV2X29wcyA9ICZjb3NhX29wczsKIAkJY2hhbi0+bmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJCWNoYW4tPm5ldGRldi0+YmFzZV9hZGRyID0gY2hhbi0+Y29zYS0+ZGF0YXJlZzsKIAkJY2hhbi0+bmV0ZGV2LT5pcnEgPSBjaGFuLT5jb3NhLT5pcnE7CkBAIC03MjUsOCArNzMxLDcgQEAKIAkgKiBXZSBjYW4gc2FmZWx5IGZhbGwgYmFjayB0byBub24tZG1hLWFibGUgbWVtb3J5LCBiZWNhdXNlIHdlIGhhdmUKIAkgKiB0aGUgY29zYS0+Ym91bmNlYnVmIHByZS1hbGxvY2F0ZWQuCiAJICovCi0JaWYgKGNoYW4tPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CiAJY2hhbi0+cnhfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAlpZiAoY2hhbi0+cnhfc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwKQEAgLTk5Myw4ICs5OTgsOCBAQAogc3RhdGljIGludCBjb3NhX2Zhc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogICAgICAgICBpbnQgcG9ydCA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIGludCBydiA9IGZhc3luY19oZWxwZXIoaW5vZGUsIGZpbGUsIG9uLCAmZmFzeW5jW3BvcnRdKTsKLSAgICAgICAgcmV0dXJuIHJ2IDwgMCA/IHJ2IDogMDsKKworCXJldHVybiBmYXN5bmNfaGVscGVyKGlub2RlLCBmaWxlLCBvbiwgJmZhc3luY1twb3J0XSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCA1ZmE1MjkyLi4zNWRlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtMzU1LDEyICszNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsYmFjayB0byBpbml0aWFsaXplIGRldmljZSAqLwotc3RhdGljIHZvaWQgY3ljeF94MjVfY2hhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRldi0+aW5pdCA9IGN5Y3hfbmV0ZGV2aWNlX2luaXQ7Ci19Ci0KIC8qIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCiAgKiBoYW5kbGVkLgpAQCAtNDc2LDYgKzQ3MCwyNyBAQAogCS5yZWJ1aWxkID0gY3ljeF9uZXRkZXZpY2VfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN5Y3hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJPSBjeWN4X25ldGRldmljZV9pbml0LAorCS5uZG9fb3Blbgk9IGN5Y3hfbmV0ZGV2aWNlX29wZW4sCisJLm5kb19zdG9wCT0gY3ljeF9uZXRkZXZpY2Vfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJPSBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBjeWN4X3gyNV9jaGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLworCWRldi0+bmV0ZGV2X29wcwkJPSAmY3ljeF9uZXRkZXZfb3BzOworCWRldi0+aGVhZGVyX29wcwkJPSAmY3ljeF9oZWFkZXJfb3BzOworCisJLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZGV2LT5tdHUJCT0gQ1lDWF9YMjVfQ0hBTl9NVFU7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9IV1gyNTsJLyogQVJQIGgvdyB0eXBlICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwkJLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLworCWRldi0+YWRkcl9sZW4JCT0gMDsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCit9CisKIC8qIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCiAgKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawpAQCAtNDg3LDIwICs1MDIsNiBAQAogCXN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCA9IGNoYW4tPmNhcmQ7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiA9ICZjYXJkLT53YW5kZXY7CiAKLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9IGN5Y3hfbmV0ZGV2aWNlX29wZW47Ci0JZGV2LT5zdG9wCQk9IGN5Y3hfbmV0ZGV2aWNlX3N0b3A7Ci0JZGV2LT5oZWFkZXJfb3BzCQk9ICZjeWN4X2hlYWRlcl9vcHM7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHM7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPm10dQkJPSBDWUNYX1gyNV9DSEFOX01UVTsKLQlkZXYtPnR5cGUJCT0gQVJQSFJEX0hXWDI1OwkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CQkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JZGV2LT5hZGRyX2xlbgkJPSAwOwkJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KLQogCWlmICghY2hhbi0+c3ZjKQogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmxjbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IGEyOTdlM2UuLmU4ZDE1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBpbnZhbGlkIGRhdGEgbm8gaGVhZGVyXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlpZiAoaGRyLT5jb250cm9sICE9IEZSQURfSV9VSSkKIAl7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgaGVhZGVyIGZsYWcgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPmNvbnRyb2wpOwotCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAllbHNlCiAJCXN3aXRjaChoZHItPklQX05MUElEKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKIAkJCQlpZiAoaGRyLT5OTFBJRCAhPSBGUkFEX1BfU05BUCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5OTFBJRCk7Ci0JCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkgCiAJCQkJaWYgKGhkci0+T1VJWzBdICsgaGRyLT5PVUlbMV0gKyBoZHItPk9VSVsyXSAhPSAwKQogCQkJCXsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgb3JnYW5pemF0aW9uYWxseSB1bmlxdWUgaWRlbnRpZmllciAweCUwMlgtJTAyWC0lMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPk9VSVswXSwgaGRyLT5PVUlbMV0sIGhkci0+T1VJWzJdKTsKLQkJCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogCQkJY2FzZSBGUkFEX1BfUTkzMzoKIAkJCWNhc2UgRlJBRF9QX0NMTlA6CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgTkxQSUQgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgcGFkIGJ5dGUgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwkJCQkKIAkJfQogCkBAIC0xNzgsOSArMTc4LDkgQEAKIAkJLyogd2UndmUgc2V0IHVwIHRoZSBwcm90b2NvbCwgc28gZGlzY2FyZCB0aGUgaGVhZGVyICovCiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9wdWxsKHNrYiwgaGVhZGVyKTsKLQkJZGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKLQkJZGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIAllbHNlCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTIwMCwxOSArMjAwLDE5IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCi0JcmV0ID0gZGxwLT5zbGF2ZS0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CisJcmV0ID0gZGxwLT5zbGF2ZS0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKIAlzd2l0Y2ggKHJldCkKIAl7CiAJCWNhc2UgRExDSV9SRVRfT0s6Ci0JCQlkbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJY2FzZSBETENJX1JFVF9FUlI6Ci0JCQlkbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCWNhc2UgRExDSV9SRVRfRFJPUDoKLQkJCWRscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJfQpAQCAtMjk1LDExICsyOTUsOSBAQAogCiBzdGF0aWMgaW50IGRsY2lfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOworCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigoKmRscC0+c2xhdmUtPmNoYW5nZV9tdHUpKGRscC0+c2xhdmUsIG5ld19tdHUpKTsKKwlyZXR1cm4gZGV2X3NldF9tdHUoZGxwLT5zbGF2ZSwgbmV3X210dSk7CiB9CiAKIHN0YXRpYyBpbnQgZGxjaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNDIsMTUgKzM0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGxjaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOwotCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZGxwLT5zdGF0cyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGxjaV9hZGQoc3RydWN0IGRsY2lfYWRkICpkbGNpKQogewogCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXIsICpzbGF2ZTsKQEAgLTQ4OCwxOCArNDc3LDIxIEBACiAJLmNyZWF0ZQk9IGRsY2lfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gZGxjaV9vcGVuLAorCS5uZG9fc3RvcAk9IGRsY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGRsY2lfZGV2X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQsCisJLm5kb19jaGFuZ2VfbXR1CT0gZGxjaV9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgZGxjaV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGV2LT5mbGFncwkJPSAwOwotCWRldi0+b3BlbgkJPSBkbGNpX29wZW47Ci0JZGV2LT5zdG9wCQk9IGRsY2lfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bAkJPSBkbGNpX2Rldl9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQ7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZkbGNpX2hlYWRlcl9vcHM7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gZGxjaV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IGRsY2lfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmRsY2lfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKIAlkbHAtPnJlY2VpdmUJCT0gZGxjaV9yZWNlaXZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4ODgwMjVkLi44ZmFjZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODgzLDYgKzg4MywxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNjYzRfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGRzY2M0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZHNjYzRfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBkc2NjNF9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCBkc2NjNF9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCXN0cnVjdCBkc2NjNF9wY2lfcHJpdiAqcHByaXY7CkBAIC05MTYsMTMgKzkyNSw4IEBACiAJCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZCk7CiAKIAkgICAgICAgIGQtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKLQkJZC0+aW5pdCA9IE5VTEw7CiAJICAgICAgICBkLT5pcnEgPSBwZGV2LT5pcnE7Ci0JICAgICAgICBkLT5vcGVuID0gZHNjYzRfb3BlbjsKLQkgICAgICAgIGQtPnN0b3AgPSBkc2NjNF9jbG9zZTsKLQkJZC0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLQkgICAgICAgIGQtPmRvX2lvY3RsID0gZHNjYzRfaW9jdGw7Ci0JCWQtPnR4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0OworCQlkLT5uZXRkZXZfb3BzID0gJmRzY2M0X29wczsKIAkJZC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCQlTRVRfTkVUREVWX0RFVihkLCAmcGRldi0+ZGV2KTsKIApAQCAtMTA0OCw3ICsxMDUyLDcgQEAKIAlzdHJ1Y3QgZHNjYzRfcGNpX3ByaXYgKnBwcml2OwogCWludCByZXQgPSAtRUFHQUlOOwogCi0JaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSB8fCAhZGV2LT5oYXJkX3N0YXJ0X3htaXQpCisJaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSkKIAkJZ290byBlcnI7CiAKIAlpZiAoKHJldCA9IGhkbGNfb3BlbihkZXYpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDQ4YTJjOWQuLjAwOTQ1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjQyNCw2ICsyNDI0LDE1IEBACiAJICAgICAgIHR5cGVfc3RyaW5nc1tjYXJkLT50eXBlXSwgY2FyZC0+aXJxLCBjYXJkLT5ucG9ydHMpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZzdF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gZnN0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZnN0X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gZnN0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGZzdF90eF90aW1lb3V0LAorfTsKKwogLyoKICAqICAgICAgSW5pdGlhbGlzZSBjYXJkIHdoZW4gZGV0ZWN0ZWQuCiAgKiAgICAgIFJldHVybnMgMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvciBlcnJubyBvdGhlcndpc2UuCkBAIC0yNTY1LDEyICsyNTc0LDkgQEAKICAgICAgICAgICAgICAgICBkZXYtPmJhc2VfYWRkciAgID0gY2FyZC0+cGNpX2NvbmY7CiAgICAgICAgICAgICAgICAgZGV2LT5pcnEgICAgICAgICA9IGNhcmQtPmlycTsKIAotICAgICAgICAgICAgICAgIGRldi0+dHhfcXVldWVfbGVuICAgICAgICAgID0gRlNUX1RYX1FVRVVFX0xFTjsKLSAgICAgICAgICAgICAgICBkZXYtPm9wZW4gICAgICAgICAgICAgICAgICA9IGZzdF9vcGVuOwotICAgICAgICAgICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgICAgID0gZnN0X2Nsb3NlOwotICAgICAgICAgICAgICAgIGRldi0+ZG9faW9jdGwgICAgICAgICAgICAgID0gZnN0X2lvY3RsOwotICAgICAgICAgICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gICAgICAgID0gRlNUX1RYX1RJTUVPVVQ7Ci0gICAgICAgICAgICAgICAgZGV2LT50eF90aW1lb3V0ICAgICAgICAgICAgPSBmc3RfdHhfdGltZW91dDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmZzdF9vcHM7CisJCWRldi0+dHhfcXVldWVfbGVuID0gRlNUX1RYX1FVRVVFX0xFTjsKKwkJZGV2LT53YXRjaGRvZ190aW1lbyA9IEZTVF9UWF9USU1FT1VUOwogICAgICAgICAgICAgICAgIGhkbGMtPmF0dGFjaCA9IGZzdF9hdHRhY2g7CiAgICAgICAgICAgICAgICAgaGRsYy0+eG1pdCAgID0gZnN0X3N0YXJ0X3htaXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKaW5kZXggMDhiMzUzNi4uNDk3YjAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJcmVjZWl2ZWQgPSBzY2FfcnhfZG9uZShwb3J0LCBidWRnZXQpOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllbmFibGVfaW50cihwb3J0KTsKIAl9CiAKQEAgLTM1OSw3ICszNTksNyBAQAogCQlpZiAocG9ydCAmJiAoaXNyMCAmIChpID8gMHgwODAwMjIwMCA6IDB4MDAwODAwMjIpKSkgewogCQkJaGFuZGxlZCA9IDE7CiAJCQlkaXNhYmxlX2ludHIocG9ydCk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKaW5kZXggMWYyYTE0MC4uNzU5NmVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCkBAIC00NCw3ICs0NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byAqZmlyc3RfcHJvdG87CiAKLXN0YXRpYyBpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoraW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBIRExDX01BWF9NVFUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUyLDE1ICs1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhkbGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0KLQogc3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CkBAIC03NSw3ICs2NiwxNSBAQAogCXJldHVybiBoZGxjLT5wcm90by0+bmV0aWZfcngoc2tiKTsKIH0KIAoraW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAorCWlmIChoZGxjLT5wcm90by0+eG1pdCkKKwkJcmV0dXJuIGhkbGMtPnByb3RvLT54bWl0KHNrYiwgZGV2KTsKKworCXJldHVybiBoZGxjLT54bWl0KHNrYiwgZGV2KTsgLyogY2FsbCBoYXJkd2FyZSBkcml2ZXIgZGlyZWN0bHkgKi8KK30KIAogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEwMiwxMSArMTAxLDExIEBACiAJaGRsY19kZXZpY2UgKmhkbGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb247Ci0gCisKIAlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0JaWYgKGRldi0+Z2V0X3N0YXRzICE9IGhkbGNfZ2V0X3N0YXRzKQorCWlmICghKGRldi0+cHJpdl9mbGFncyAmIElGRl9XQU5fSERMQykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsgLyogbm90IGFuIEhETEMgZGV2aWNlICovCiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0NIQU5HRSkKQEAgLTIzMywxNSArMjMyLDEzIEBACiAJLyogUmUtaW5pdCBhbGwgdmFyaWFibGVzIGNoYW5nZWQgYnkgSERMQyBwcm90b2NvbCBkcml2ZXJzLAogCSAqIGluY2x1ZGluZyBldGhlcl9zZXR1cCgpIGNhbGxlZCBmcm9tIGhkbGNfcmF3X2V0aC5jLgogCSAqLwotCWRldi0+Z2V0X3N0YXRzCQkgPSBoZGxjX2dldF9zdGF0czsKIAlkZXYtPmZsYWdzCQkgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5wcml2X2ZsYWdzCQkgPSBJRkZfV0FOX0hETEM7CiAJZGV2LT5tdHUJCSA9IEhETENfTUFYX01UVTsKIAlkZXYtPnR5cGUJCSA9IEFSUEhSRF9SQVdIRExDOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCSA9IDE2OwogCWRldi0+YWRkcl9sZW4JCSA9IDA7CiAJZGV2LT5oZWFkZXJfb3BzCQkgPSAmaGRsY19udWxsX29wczsKLQotCWRldi0+Y2hhbmdlX210dQkJID0gaGRsY19jaGFuZ2VfbXR1OwogfQogCiBzdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzksNiArMzM2LDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSERMQyBzdXBwb3J0IG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCitFWFBPUlRfU1lNQk9MKGhkbGNfY2hhbmdlX210dSk7CitFWFBPUlRfU1lNQk9MKGhkbGNfc3RhcnRfeG1pdCk7CiBFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7CiBFWFBPUlRfU1lNQk9MKGhkbGNfY2xvc2UpOwogRVhQT1JUX1NZTUJPTChoZGxjX2lvY3RsKTsKQEAgLTM0OSw4ICszNDgsOCBAQAogRVhQT1JUX1NZTUJPTChhdHRhY2hfaGRsY19wcm90b2NvbCk7CiBFWFBPUlRfU1lNQk9MKGRldGFjaF9oZGxjX3Byb3RvY29sKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBoZGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyksCiAJLmZ1bmMgPSBoZGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IDQ0ZTY0YjE1Li5jZjVmZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWRhdGEtPnR5cGUgPSBodG9ubCh0eXBlKTsKIAlkYXRhLT5wYXIxID0gcGFyMTsKIAlkYXRhLT5wYXIyID0gcGFyMjsKLQlkYXRhLT5yZWwgPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRik7CisJZGF0YS0+cmVsID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAkvKiB3ZSB3aWxsIG5lZWQgZG9fZGl2IGhlcmUgaWYgMTAwMCAlIEhaICE9IDAgKi8KIAlkYXRhLT50aW1lID0gaHRvbmwoKGppZmZpZXMgLSBJTklUSUFMX0pJRkZJRVMpICogKDEwMDAgLyBIWikpOwogCkBAIC0xMzYsMjAgKzEzNiwyMCBAQAogCXN0cnVjdCBoZGxjX2hlYWRlciAqZGF0YSA9IChzdHJ1Y3QgaGRsY19oZWFkZXIqKXNrYi0+ZGF0YTsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKQotCQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKTsKKwkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCiAJaWYgKGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fTVVMVElDQVNUICYmCiAJICAgIGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fVU5JQ0FTVCkKLQkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CisJCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9IRExDKTsKIAogCXN3aXRjaChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBYKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGRhdGEtPnByb3RvY29sOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOworCQlyZXR1cm4gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyk7CiAJfQogfQogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJY2FzZSBDSVNDT19BRERSX1JFUTogLyogU3RvbGVuIGZyb20gc3luY3BwcC5jIDotKSAqLwogCQkJaW5fZGV2ID0gZGV2LT5pcF9wdHI7CiAJCQlhZGRyID0gMDsKLQkJCW1hc2sgPSBfX2NvbnN0YW50X2h0b25sKH4wKTsgLyogaXMgdGhlIG1hc2sgY29ycmVjdD8gKi8KKwkJCW1hc2sgPSB+Y3B1X3RvX2JlMzIoMCk7IC8qIGlzIHRoZSBtYXNrIGNvcnJlY3Q/ICovCiAKIAkJCWlmIChpbl9kZXYgIT0gTlVMTCkgewogCQkJCXN0cnVjdCBpbl9pZmFkZHIgKippZmFwID0gJmluX2Rldi0+aWZhX2xpc3Q7CkBAIC0zODIsNyArMzgyLDYgQEAKIAogCQltZW1jcHkoJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7CiAJCXNwaW5fbG9ja19pbml0KCZzdGF0ZShoZGxjKS0+bG9jayk7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmNpc2NvX2hlYWRlcl9vcHM7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9DSVNDTzsKIAkJbmV0aWZfZG9ybWFudF9vbihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKaW5kZXggZjFkZGQ3Yy4uODAwNTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCkBAIC0yNzgsMzEgKzI3OCwzMSBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAqc2tiX3A7CiAKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgorCWNhc2UgY3B1X3RvX2JlMTYoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9DQ0lUVF9BTlNJX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0lTQ09fTE1JKToKKwljYXNlIGNwdV90b19iZTE2KE5MUElEX0NJU0NPX0xNSSk6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0NJU0NPX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9JUDsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfSVBWNjsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOgogCQloZWFkX2xlbiA9IDEwOwogCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBoZWFkX2xlbikgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsCkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCQlza2JfcHV0KHNrYiwgcGFkKTsKIAkJCQltZW1zZXQoc2tiLT5kYXRhICsgbGVuLCAwLCBwYWQpOwogCQkJfQotCQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOworCQkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8zKTsKIAkJfQogCQlpZiAoIWZyX2hhcmRfaGVhZGVyKCZza2IsIHB2Yy0+ZGxjaSkpIHsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC00NDQsMTggKzQ0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgaW50IHB2Y19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IEhETENfTUFYX01UVSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWRldi0+bXR1ID0gbmV3X210dTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcl9sb2dfZGxjaV9hY3RpdmUocHZjX2RldmljZSAqcHZjKQogewogCXByaW50ayhLRVJOX0lORk8gIiVzOiBETENJICVkIFslcyVzJXNdJXMgJXNcbiIsCkBAIC01MDgsMTAgKzQ5NiwxMCBAQAogCW1lbXNldChza2ItPmRhdGEsIDAsIGxlbik7CiAJc2tiX3Jlc2VydmUoc2tiLCA0KTsKIAlpZiAobG1pID09IExNSV9DSVNDTykgewotCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhOTFBJRF9DSVNDT19MTUkpOworCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoTkxQSURfQ0lTQ09fTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NJU0NPX0RMQ0kpOwogCX0gZWxzZSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NDSVRUX0FOU0lfRExDSSk7CiAJfQogCWRhdGEgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CkBAIC0xMDY4LDYgKzEwNTYsMTQgQEAKIAlkZXYtPmFkZHJfbGVuID0gMjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwdmNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHB2Y19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHB2Y19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gcHZjX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gcHZjX2lvY3RsLAorfTsKKwogc3RhdGljIGludCBmcl9hZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpmcmFkLCB1bnNpZ25lZCBpbnQgZGxjaSwgaW50IHR5cGUpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKQEAgLTExMDQsMTEgKzExMDAsNyBAQAogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGRsY2kpOwogCQlkbGNpX3RvX3E5MjIoZGV2LT5icm9hZGNhc3QsIGRsY2kpOwogCX0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHB2Y194bWl0OwotCWRldi0+b3BlbiA9IHB2Y19vcGVuOwotCWRldi0+c3RvcCA9IHB2Y19jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gcHZjX2lvY3RsOwotCWRldi0+Y2hhbmdlX210dSA9IHB2Y19jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZwdmNfb3BzOwogCWRldi0+bXR1ID0gSERMQ19NQVhfTVRVOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAlkZXYtPm1sX3ByaXYgPSBwdmM7CkBAIC0xMjYwLDggKzEyNTIsNiBAQAogCQkJc3RhdGUoaGRsYyktPmRjZV9wdmNfY291bnQgPSAwOwogCQl9CiAJCW1lbWNweSgmc3RhdGUoaGRsYyktPnNldHRpbmdzLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9GUkFEOwogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwppbmRleCA1N2ZlNzE0Li43MmE3Y2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwpAQCAtMTUwLDExICsxNTAsMTEgQEAKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0hETEMpOwogCiAJc3dpdGNoIChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhQSURfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQKToKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAJCXJldHVybiBodG9ucyhFVEhfUF9JUCk7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoUElEX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0lQVjYpOwogCkBAIC01NTgsNyArNTU4LDYgQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLQogc3RhdGljIHZvaWQgcHBwX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwcm90byAqcHJvdG8gPSAoc3RydWN0IHByb3RvICopYXJnOwpAQCAtNjc5LDcgKzY3OCw2IEBACiAJCXBwcC0+a2VlcGFsaXZlX2ludGVydmFsID0gMTA7CiAJCXBwcC0+a2VlcGFsaXZlX3RpbWVvdXQgPSA2MDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcik7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZwcHBfaGVhZGVyX29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKaW5kZXggODYxMjMxMS4uMTlmNTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKQEAgLTI3LDExICsyNyw5IEBACiAKIHN0YXRpYyBfX2JlMTYgcmF3X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIH0KIAotCi0KIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IHJhd190eXBlX3RyYW5zLAogCS5pb2N0bAkJPSByYXdfaW9jdGwsCkBAIC04Niw3ICs4NCw2IEBACiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQltZW1jcHkoaGRsYy0+c3RhdGUsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9SQVdIRExDOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwppbmRleCBhMTNmYzMyLi40OWU2OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCkBAIC00NSw2ICs0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IGV0aF90eXBlX3RyYW5zLAorCS54bWl0CQk9IGV0aF90eCwKIAkuaW9jdGwJCT0gcmF3X2V0aF9pb2N0bCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKQEAgLTU2LDkgKzU3LDcgQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihyYXdfaGRsY19wcm90byk7CiAJcmF3X2hkbGNfcHJvdG8gbmV3X3NldHRpbmdzOwogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlpbnQgcmVzdWx0OwotCWludCAoKm9sZF9jaF9tdHUpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7Ci0JaW50IG9sZF9xbGVuOworCWludCByZXN1bHQsIG9sZF9xbGVuOwogCiAJc3dpdGNoIChpZnItPmlmcl9zZXR0aW5ncy50eXBlKSB7CiAJY2FzZSBJRl9HRVRfUFJPVE86CkBAIC05OSwxMSArOTgsOCBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBldGhfdHg7Ci0JCW9sZF9jaF9tdHUgPSBkZXYtPmNoYW5nZV9tdHU7CiAJCW9sZF9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CiAJCWV0aGVyX3NldHVwKGRldik7Ci0JCWRldi0+Y2hhbmdlX210dSA9IG9sZF9jaF9tdHU7CiAJCWRldi0+dHhfcXVldWVfbGVuID0gb2xkX3FsZW47CiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwppbmRleCBjYmNiZjZmLi5iMWRjMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJLmNsb3NlCQk9IHgyNV9jbG9zZSwKIAkuaW9jdGwJCT0geDI1X2lvY3RsLAogCS5uZXRpZl9yeAk9IHgyNV9yeCwKKwkueG1pdAkJPSB4MjVfeG1pdCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjEzLDcgKzIxNCw2IEBACiAKIAkJaWYgKChyZXN1bHQgPSBhdHRhY2hfaGRsY19wcm90b2NvbChkZXYsICZwcm90bywgMCkpKQogCQkJcmV0dXJuIHJlc3VsdDsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB4MjVfeG1pdDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1gyNTsKIAkJbmV0aWZfZG9ybWFudF9vZmYoZGV2KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggYWY1NGYwYy4uNTY3ZDRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMTczLDYgKzE3MywxNCBAQAogICoJRGVzY3JpcHRpb24gYmxvY2sgZm9yIGEgQ29tdHJvbCBIb3N0ZXNzIFNWMTEgY2FyZAogICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGVzc19vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaG9zdGVzc19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhvc3Rlc3NfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBob3N0ZXNzX2lvY3RsLAorfTsKKwogc3RhdGljIHN0cnVjdCB6ODUzMF9kZXYgKnN2MTFfaW5pdChpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCB6ODUzMF9kZXYgKnN2OwpAQCAtMjY3LDkgKzI3NSw3IEBACiAKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT5hdHRhY2ggPSBob3N0ZXNzX2F0dGFjaDsKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT54bWl0ID0gaG9zdGVzc19xdWV1ZV94bWl0OwotCW5ldGRldi0+b3BlbiA9IGhvc3Rlc3Nfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBob3N0ZXNzX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBob3N0ZXNzX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZob3N0ZXNzX29wczsKIAluZXRkZXYtPmJhc2VfYWRkciA9IGlvYmFzZTsKIAluZXRkZXYtPmlycSA9IGlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKaW5kZXggMGRiZDg1Yi4uM2JmN2QzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYworKysgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhzc19oZGxjX3J4X2lycVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCXFtZ3JfZGlzYWJsZV9pcnEocXVldWVfaWRzW3BvcnQtPmlkXS5yeCk7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IGhzc19oZGxjX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtNjQ5LDE1ICs2NDksMTUgQEAKIAkJaWYgKChuID0gcXVldWVfZ2V0X2Rlc2MocnhxLCBwb3J0LCAwKSkgPCAwKSB7CiAjaWYgREVCVUdfUlgKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHNzX2hkbGNfcG9sbCIKLQkJCSAgICAgICAiIG5ldGlmX3J4X2NvbXBsZXRlXG4iLCBkZXYtPm5hbWUpOworCQkJICAgICAgICIgbmFwaV9jb21wbGV0ZVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJcW1ncl9lbmFibGVfaXJxKHJ4cSk7CiAJCQlpZiAoIXFtZ3Jfc3RhdF9lbXB0eShyeHEpICYmCi0JCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkgewogI2lmIERFQlVHX1JYCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoc3NfaGRsY19wb2xsIgotCQkJCSAgICAgICAiIG5ldGlmX3J4X3Jlc2NoZWR1bGUgc3VjY2VlZGVkXG4iLAorCQkJCSAgICAgICAiIG5hcGlfcmVzY2hlZHVsZSBzdWNjZWVkZWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJCQlxbWdyX2Rpc2FibGVfaXJxKHJ4cSk7CkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWhzc19zdGFydF9oZGxjKHBvcnQpOwogCiAJLyogd2UgbWF5IGFscmVhZHkgaGF2ZSBSWCBkYXRhLCBlbmFibGVzIElSUSAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTEyMzAsNiArMTIzMCwxNCBAQAogICogaW5pdGlhbGl6YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzc19oZGxjX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoc3NfaGRsY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhzc19oZGxjX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaHNzX2hkbGNfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBoc3NfaW5pdF9vbmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcG9ydCAqcG9ydDsKQEAgLTEyNTQsOSArMTI2Miw3IEBACiAJaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJaGRsYy0+YXR0YWNoID0gaHNzX2hkbGNfYXR0YWNoOwogCWhkbGMtPnhtaXQgPSBoc3NfaGRsY194bWl0OwotCWRldi0+b3BlbiA9IGhzc19oZGxjX29wZW47Ci0JZGV2LT5zdG9wID0gaHNzX2hkbGNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhzc19oZGxjX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZoc3NfaGRsY19vcHM7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJcG9ydC0+Y2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKIAlwb3J0LT5jbG9ja19yYXRlID0gMjA0ODAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwppbmRleCA1YjYxYjNlLi4yZGQ3OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCkBAIC01NSw3ICs1NSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpldGhkZXY7CS8qIGxpbmsgdG8gZXRoZXJuZXQgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UJKmF4ZGV2OwkJLyogbGFwYmV0aCBkZXZpY2UgKGxhcGIjKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkJLyogc29tZSBzdGF0aXN0aWNzICovCiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGxhcGJldGhfZGV2aWNlcyk7CkBAIC0xMDcsMTAgKzEwNiw5IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGxhcGJldGgtPmF4ZGV2KSkKIAkJZ290byBkcm9wX3VubG9jazsKIAotCWxhcGJldGgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQogCWxlbiA9IHNrYi0+ZGF0YVswXSArIHNrYi0+ZGF0YVsxXSAqIDI1NjsKLQlsYXBiZXRoLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAlza2JfcHVsbChza2IsIDIpOwkvKiBSZW1vdmUgdGhlIGxlbmd0aCBieXRlcyAqLwogCXNrYl90cmltKHNrYiwgbGVuKTsJLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KQEAgLTIxMCw4ICsyMDgsOCBAQAogCSpwdHIrKyA9IHNpemUgJSAyNTY7CiAJKnB0cisrID0gc2l6ZSAvIDI1NjsKIAotCWxhcGJldGgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlsYXBiZXRoLT5zdGF0cy50eF9ieXRlcyArPSBzaXplOworCW5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzaXplOwogCiAJc2tiLT5kZXYgPSBkZXYgPSBsYXBiZXRoLT5ldGhkZXY7CiAKQEAgLTI1NSwxNSArMjUzLDYgQEAKIH0KIAogLyoKLSAqCVN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYXBiZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYXBiZXRoZGV2ICpsYXBiZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxhcGJldGgtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTMxNCwxNCArMzAzLDE3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxhcGJldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IGxhcGJldGhfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGxhcGJldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBsYXBiZXRoX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIGxhcGJldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhcGJldGhfeG1pdDsKLQlkZXYtPm9wZW4JICAgICA9IGxhcGJldGhfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGxhcGJldGhfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmbGFwYmV0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gbGFwYmV0aF9nZXRfc3RhdHM7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfWDI1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMzsKIAlkZXYtPm10dSAgICAgICAgICAgICA9IDEwMDA7CkBAIC00MjEsOCArNDEzLDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfREVDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfREVDKSwKIAkuZnVuYyA9IGxhcGJldGhfcmN2LAogfTsKIApAQCAtNDMwLDcgKzQyMiw4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBsYXBiZXRoX2RldmljZV9ldmVudCwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGFwYmV0aF9pbml0X2RyaXZlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGZlYWMzYjkuLjQ1YjE4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTgwNiw2ICs4MDYsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsbWNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGxtY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGxtY19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGxtY19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBsbWNfZHJpdmVyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgID0gbG1jX2dldF9zdGF0cywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxtY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04NDksMTEgKzg1OSw3IEBACiAJZGV2LT50eXBlID0gQVJQSFJEX0hETEM7CiAJZGV2X3RvX2hkbGMoZGV2KS0+eG1pdCA9IGxtY19zdGFydF94bWl0OwogCWRldl90b19oZGxjKGRldiktPmF0dGFjaCA9IGxtY19hdHRhY2g7Ci0JZGV2LT5vcGVuID0gbG1jX29wZW47Ci0JZGV2LT5zdG9wID0gbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gbG1jX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotCWRldi0+dHhfdGltZW91dCA9IGxtY19kcml2ZXJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbG1jX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kICovCiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJc2MtPmxtY19kZXZpY2UgPSBkZXY7CkBAIC0xMDU5LDkgKzEwNjUsNiBAQAogICAgIGlmICgoZXJyID0gbG1jX3Byb3RvX29wZW4oc2MpKSAhPSAwKQogCSAgICByZXR1cm4gZXJyOwogCi0gICAgZGV2LT5kb19pb2N0bCA9IGxtY19pb2N0bDsKLQotCiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICBzYy0+ZXh0cmFfc3RhdHMudHhfdGJ1c3kwKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90by5jCmluZGV4IDk0YjRjMjAuLjA0NGE0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfcHJvdG8uYwpAQCAtNTEsMzAgKzUxLDE1IEBACiB2b2lkIGxtY19wcm90b19hdHRhY2gobG1jX3NvZnRjX3QgKnNjKSAvKkZPTEQwMCovCiB7CiAgICAgbG1jX3RyYWNlKHNjLT5sbWNfZGV2aWNlLCAibG1jX3Byb3RvX2F0dGFjaCBpbiIpOwotICAgIHN3aXRjaChzYy0+aWZfdHlwZSl7Ci0gICAgY2FzZSBMTUNfUFBQOgotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7Ci0gICAgICAgICAgICBkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE1DX05FVDoKLSAgICAgICAgeworICAgIGlmIChzYy0+aWZfdHlwZSA9PSBMTUNfTkVUKSB7CiAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7CiAgICAgICAgICAgICAvKgogCSAgICAgKiBUaGV5IHNldCBhIGZldyBiYXNpY3MgYmVjYXVzZSB0aGV5IGRvbid0IHVzZSBIRExDCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwotCiAgICAgICAgICAgICBkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAgICAgICAgICAgICBkZXYtPmFkZHJfbGVuID0gMDsKICAgICAgICAgfQotICAgIGNhc2UgTE1DX1JBVzogLyogU2V0dXAgdGhlIHRhc2sgcXVldWUsIG1heWJlIHdlIHNob3VsZCBub3RpZnkgc29tZW9uZT8gKi8KLSAgICAgICAgewotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGxtY190cmFjZShzYy0+bG1jX2RldmljZSwgImxtY19wcm90b19hdHRhY2ggb3V0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggNjk3NzE1YS4uODNkYTU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTMyNCw3ICszMjQsMTMgQEAKIAlrZnJlZShjYXJkKTsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG4yX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuMl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG4yX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gbjJfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuMl9ydW4odW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBpcnEsCiAJCQkgdW5zaWduZWQgbG9uZyB3aW5iYXNlLCBsb25nIHZhbGlkMCwgbG9uZyB2YWxpZDEpCkBAIC00NjAsOSArNDY2LDcgQEAKIAkJZGV2LT5tZW1fc3RhcnQgPSB3aW5iYXNlOwogCQlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgVVNFX1dJTkRPV1NJWkUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gbjJfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IG4yX29wZW47Ci0JCWRldi0+c3RvcCA9IG4yX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbjJfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCmluZGV4IGYyNDdlNWQuLjYwZWNlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCkBAIC0yODcsNyArMjg3LDEzIEBACiAJa2ZyZWUoY2FyZCk7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwYzMwMF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gcGMzMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwYzMwMF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHBjMzAwX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGMzMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtNDQ4LDkgKzQ1NCw3IEBACiAJCWRldi0+bWVtX3N0YXJ0ID0gcmFtcGh5czsKIAkJZGV2LT5tZW1fZW5kID0gcmFtcGh5cyArIHJhbXNpemUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gcGMzMDBfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHBjMzAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjMzAwX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmcGMzMDBfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggMTEwNGQzYS4uZTAzNWQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtMjY1LDcgKzI2NSwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNpMjAwX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBwY2kyMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwY2kyMDBfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBwY2kyMDBfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2kyMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM5NSw5ICs0MDEsNyBAQAogCQlkZXYtPm1lbV9zdGFydCA9IHJhbXBoeXM7CiAJCWRldi0+bWVtX2VuZCA9IHJhbXBoeXMgKyByYW1zaXplIC0gMTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IHBjaTIwMF9pb2N0bDsKLQkJZGV2LT5vcGVuID0gcGNpMjAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjaTIwMF9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnBjaTIwMF9vcHM7CiAJCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSBzY2FfeG1pdDsKIAkJcG9ydC0+c2V0dGluZ3MuY2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCmluZGV4IDBhYTI4ZTEuLmY0MjExZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwpAQCAtNjgsNyArNjgsNiBAQAogLyogZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCiBzdHJ1Y3QgbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKIAogCXNwaW5sb2NrX3QJbG9jazsKQEAgLTExNyw3ICsxMTYsNiBAQAogc3RhdGljIGludCAgc2JuaV9jbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50ICBzYm5pX2lvY3RsKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50ICk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICpzYm5pX2dldF9zdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIHZvaWQgIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JuaV9pbnRlcnJ1cHQoIGludCwgdm9pZCAqICk7CkBAIC0yMDgsMTUgKzIwNiwyMSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzYm5pX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNibmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2JuaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc2JuaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwJCT0gc2JuaV9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHNibmlfZGV2c2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cCggZGV2ICk7Ci0JZGV2LT5vcGVuCQk9ICZzYm5pX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZzYm5pX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJnNibmlfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmc2JuaV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwJCT0gJnNibmlfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKIH0KIAogaW50IF9faW5pdCBzYm5pX3Byb2JlKGludCB1bml0KQpAQCAtMjI5LDYgKzIzMyw4IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKKwogCXNwcmludGYoZGV2LT5uYW1lLCAic2JuaSVkIiwgdW5pdCk7CiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIApAQCAtNzIzLDEzICs3MjksMTEgQEAKIAkJCW5sLT53YWl0X2ZyYW1lbm8gPSAwLAogCQkJbmwtPmlucHBvcyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCQktPnN0YXRzLnJ4X2Vycm9ycysrLAotCQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQkJLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlubC0+bWFzdGVyLT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbHNlCi0JCQlubC0+c3RhdHMucnhfZXJyb3JzKyssCi0JCQlubC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkgICAgICAgIGRldi0+c3RhdHMucnhfZXJyb3JzKyssCisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbmRpZgogCQkJLyogbm93IHNraXAgYWxsIGZyYW1lcyB1bnRpbCBpc19maXJzdCAhPSAwICovCiAJfSBlbHNlCkBAIC03NDIsMTMgKzc0NiwxMSBAQAogCQkgKi8KIAkJbmwtPndhaXRfZnJhbWVubyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMucnhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICNlbHNlCi0JCW5sLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJbmwtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAjZW5kaWYKIAogCXJldHVybiAgZnJhbWVfb2s7CkBAIC03NTYsMTUgKzc1OCwxNiBAQAogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2VuZF9jb21wbGV0ZSggc3RydWN0IG5ldF9sb2NhbCAgKm5sICkKK3NlbmRfY29tcGxldGUoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogeworCXN0cnVjdCBuZXRfbG9jYWwgICpubCA9IG5ldGRldl9wcml2KGRldik7CisKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X2J5dGVzCi0JCSs9IG5sLT50eF9idWZfcC0+bGVuOworCW5sLT5tYXN0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlubC0+bWFzdGVyLT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbHNlCi0JbmwtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlubC0+c3RhdHMudHhfYnl0ZXMgKz0gbmwtPnR4X2J1Zl9wLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbmRpZgogCWRldl9rZnJlZV9za2JfaXJxKCBubC0+dHhfYnVmX3AgKTsKIApAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQkJCQkgICBubC0+bWF4ZnJhbWUsCiAJCQkJCQkgICBubC0+dHhfYnVmX3AtPmxlbiAtIG5sLT5vdXRwb3MpOwogCQkJZWxzZQotCQkJCXNlbmRfY29tcGxldGUoIG5sICksCisJCQkJc2VuZF9jb21wbGV0ZSggZGV2ICksCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZSggbmwtPm1hc3RlciApOwogI2Vsc2UKQEAgLTg4MSwxMyArODg0LDExIEBACiAJCWRldl9rZnJlZV9za2JfYW55KCBubC0+dHhfYnVmX3AgKSwKIAkJbmwtPnR4X2J1Zl9wID0gTlVMTCwKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnR4X2Vycm9ycysrLAotCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMudHhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZWxzZQotCQlubC0+c3RhdHMudHhfZXJyb3JzKyssCi0JCW5sLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrLAorCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZW5kaWYKIAogCW5sLT50eF9mcmFtZW5vCT0gMDsKQEAgLTEwMTcsMTQgKzEwMTgsMTMgQEAKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgbmwtPm1hc3RlciApOwogCW5ldGlmX3J4KCBza2IgKTsKLQkrKygoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKS0+c3RhdHMucnhfcGFja2V0czsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnJ4X2J5dGVzICs9Ci0JCW5sLT5pbnBwb3M7CisJKytubC0+bWFzdGVyLT5zdGF0cy5yeF9wYWNrZXRzOworCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZWxzZQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyggc2tiLCBkZXYgKTsKIAluZXRpZl9yeCggc2tiICk7Ci0JKytubC0+c3RhdHMucnhfcGFja2V0czsKLQlubC0+c3RhdHMucnhfYnl0ZXMgKz0gbmwtPmlucHBvczsKKwkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZW5kaWYKIAlubC0+cnhfYnVmX3AgPSBOVUxMOwkvKiBwcm90b2NvbCBkcml2ZXIgd2lsbCBjbGVhciB0aGlzIHNrX2J1ZmYgKi8KIH0KQEAgLTExOTcsNyArMTE5Nyw3IEBACiBoYW5kbGVyX2F0dGFjaGVkOgogCiAJc3Bpbl9sb2NrKCAmbmwtPmxvY2sgKTsKLQltZW1zZXQoICZubC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKKwltZW1zZXQoICZkZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpICk7CiAJbWVtc2V0KCAmbmwtPmluX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHNibmlfaW5fc3RhdHMpICk7CiAKIAljYXJkX3N0YXJ0KCBkZXYgKTsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAKIAkvKiBTdW1tYXJ5IHN0YXRpc3RpY3Mgb2YgTXVsdGlMaW5lIG9wZXJhdGlvbiB3aWxsIGJlIHN0b3JlZAogCSAgIGluIG1hc3RlcidzIGNvdW50ZXJzICovCi0JbWVtc2V0KCAmc25sLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSApOworCW1lbXNldCggJnNsYXZlX2Rldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKIAluZXRpZl9zdG9wX3F1ZXVlKCBzbGF2ZV9kZXYgKTsKIAluZXRpZl93YWtlX3F1ZXVlKCBkZXYgKTsJLyogTm93IHdlIGFyZSBhYmxlIHRvIHRyYW5zbWl0ICovCiAKQEAgLTE0NjQsMTQgKzE0NjQsNiBAQAogCiAjZW5kaWYKIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotc2JuaV9nZXRfc3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKLXsKLQlyZXR1cm4gICYoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQKIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgKQogewpAQCAtMTUyMCwxNyArMTUxMiwxOCBAQAogfQogCiB2b2lkCi1jbGVhbnVwX21vZHVsZSggdm9pZCApCitjbGVhbnVwX21vZHVsZSh2b2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwotCWludCAgbnVtOworCWludCBpOwogCi0JZm9yKCBudW0gPSAwOyAgbnVtIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytudW0gKQotCQlpZiggKGRldiA9IHNibmlfY2FyZHNbIG51bSBdKSAhPSBOVUxMICkgewotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoIGRldiApOwotCQkJcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCBTQk5JX0lPX0VYVEVOVCApOwotCQkJZnJlZV9uZXRkZXYoIGRldiApOworCWZvciAoaSA9IDA7ICBpIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzYm5pX2NhcmRzW2ldOworCQlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU0JOSV9JT19FWFRFTlQpOworCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQorCX0KIH0KIAogI2Vsc2UJLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYS5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGEuYwppbmRleCA2YTA3YmE5Li4xZDYzN2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKQEAgLTcxNCwxOSArNzE0LDE5IEBACiAJCXN3aXRjaCAocmV0KQogCQl7CiAJCQljYXNlIFNETEFfUkVUX09LOgotCQkJCWZscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCXJldCA9IERMQ0lfUkVUX09LOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFNETEFfUkVUX0NJUl9PVkVSRkxPVzoKIAkJCWNhc2UgU0RMQV9SRVRfQlVGX09WRVJTSVpFOgogCQkJY2FzZSBTRExBX1JFVF9OT19CVUZTOgotCQkJCWZscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCXJldCA9IERMQ0lfUkVUX0RST1A7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJZmxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCXJldCA9IERMQ0lfUkVUX0VSUjsKIAkJCQlicmVhazsKIAkJfQpAQCAtODA3LDcgKzgwNyw3IEBACiAJCWlmIChpID09IENPTkZJR19ETENJX01BWCkKIAkJewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogUmVjZWl2ZWQgcGFja2V0IGZyb20gaW52YWxpZCBETENJICVpLCBpZ25vcmluZy4iLCBkZXYtPm5hbWUsIGRsY2kpOwotCQkJZmxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlzdWNjZXNzID0gMDsKIAkJfQogCX0KQEAgLTgxOSw3ICs4MTksNyBAQAogCQlpZiAoc2tiID09IE5VTEwpIAogCQl7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKLQkJCWZscC0+c3RhdHMucnhfZHJvcHBlZCsrOyAKKwkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJc3VjY2VzcyA9IDA7CiAJCX0KIAkJZWxzZQpAQCAtODU5LDcgKzg1OSw3IEBACiAKIAlpZiAoc3VjY2VzcykKIAl7Ci0JCWZscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJZGxwID0gbmV0ZGV2X3ByaXYobWFzdGVyKTsKIAkJKCpkbHAtPnJlY2VpdmUpKHNrYiwgbWFzdGVyKTsKIAl9CkBAIC0xNTkwLDEzICsxNTkwLDE0IEBACiAJcmV0dXJuIGVycjsKIH0KICAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2RsYV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmcmFkX2xvY2FsICpmbHA7Ci0JZmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZmxwLT5zdGF0cyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNkbGFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBzZGxhX29wZW4sCisJLm5kb19zdG9wCT0gc2RsYV9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0gc2RsYV9pb2N0bCwKKwkubmRvX3NldF9jb25maWcJPSBzZGxhX3NldF9jb25maWcsCisJLm5kb19zdGFydF94bWl0CT0gc2RsYV90cmFuc21pdCwKKwkubmRvX2NoYW5nZV9tdHUJPSBzZGxhX2NoYW5nZV9tdHUsCit9OwogCiBzdGF0aWMgdm9pZCBzZXR1cF9zZGxhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNjA0LDIwICsxNjA1LDEzIEBACiAKIAluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwogCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZzZGxhX25ldGRldl9vcHM7CiAJZGV2LT5mbGFncwkJPSAwOwogCWRldi0+dHlwZQkJPSAweEZGRkY7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwogCWRldi0+YWRkcl9sZW4JCT0gMDsKIAlkZXYtPm10dQkJPSBTRExBX01BWF9NVFU7CiAKLQlkZXYtPm9wZW4JCT0gc2RsYV9vcGVuOwotCWRldi0+c3RvcAkJPSBzZGxhX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwJCT0gc2RsYV9pb2N0bDsKLQlkZXYtPnNldF9jb25maWcJCT0gc2RsYV9zZXRfY29uZmlnOwotCWRldi0+Z2V0X3N0YXRzCQk9IHNkbGFfc3RhdHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBzZGxhX3RyYW5zbWl0OwotCWRldi0+Y2hhbmdlX210dQkJPSBzZGxhX2NoYW5nZV9tdHU7Ci0KIAlmbHAtPmFjdGl2YXRlCQk9IHNkbGFfYWN0aXZhdGU7CiAJZmxwLT5kZWFjdGl2YXRlCQk9IHNkbGFfZGVhY3RpdmF0ZTsKIAlmbHAtPmFzc29jCQk9IHNkbGFfYXNzb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCmluZGV4IDA5NDFhMjYuLjIzYjI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCkBAIC0xNjksNiArMTY5LDE0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2VhbGV2ZWxfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHNlYWxldmVsX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc2VhbGV2ZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBzZWFsZXZlbF9pb2N0bCwKK307CisKIHN0YXRpYyBpbnQgc2x2bF9zZXR1cChzdHJ1Y3Qgc2x2bF9kZXZpY2UgKnN2LCBpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19oZGxjZGV2KHN2KTsKQEAgLTE3Nyw5ICsxODUsNyBAQAogCiAJZGV2X3RvX2hkbGMoZGV2KS0+YXR0YWNoID0gc2VhbGV2ZWxfYXR0YWNoOwogCWRldl90b19oZGxjKGRldiktPnhtaXQgPSBzZWFsZXZlbF9xdWV1ZV94bWl0OwotCWRldi0+b3BlbiA9IHNlYWxldmVsX29wZW47Ci0JZGV2LT5zdG9wID0gc2VhbGV2ZWxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHNlYWxldmVsX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzZWFsZXZlbF9vcHM7CiAJZGV2LT5iYXNlX2FkZHIgPSBpb2Jhc2U7CiAJZGV2LT5pcnEgPSBpcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKaW5kZXggNGJmZmI2Ny4uODg3YWNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKQEAgLTU0Nyw2ICs1NDcsMTUgQEAKIAogI2luY2x1ZGUgIndhbnhsZncuaW5jIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdhbnhsX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB3YW54bF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHdhbnhsX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gd2FueGxfaW9jdGwsCisJLm5kb19nZXRfc3RhdHMgID0gd2FueGxfZ2V0X3N0YXRzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgd2FueGxfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtNzc3LDEyICs3ODYsOSBAQAogCQloZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gd2FueGxfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHdhbnhsX29wZW47Ci0JCWRldi0+c3RvcCA9IHdhbnhsX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmd2FueGxfb3BzOwogCQloZGxjLT5hdHRhY2ggPSB3YW54bF9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSB3YW54bF94bWl0OwotCQlkZXYtPmdldF9zdGF0cyA9IHdhbnhsX2dldF9zdGF0czsKIAkJcG9ydC0+Y2FyZCA9IGNhcmQ7CiAJCXBvcnQtPm5vZGUgPSBpOwogCQlnZXRfc3RhdHVzKHBvcnQpLT5jbG9ja2luZyA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IGU2ZTJjZTMuLmQ2N2UyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQltZW1jcHkoc2wtPnhidWZmLCBzbC0+eGhlYWQsIHNsLT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJc2wtPnhsZWZ0ID0gMDsKLQkJCXNsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIAlzbC0+eGhlYWQgPSBzbC0+eGJ1ZmY7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJCW1lbWNweShzbC0+cmJ1ZmYsIHJidWZmLCBzbC0+cmNvdW50KTsKIAkJfSBlbHNlICB7CiAJCQlzbC0+cmNvdW50ID0gMDsKLQkJCXNsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCQl9CiAJfQpAQCAtMTg4LDE4ICsxODgsMTkgQEAKIAogc3RhdGljIHZvaWQgeDI1X2FzeV9idW1wKHN0cnVjdCB4MjVfYXN5ICpzbCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2wtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3VudDsKIAlpbnQgZXJyOwogCiAJY291bnQgPSBzbC0+cmNvdW50OwotCXNsLT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihjb3VudCsxKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJc2wtPmRldi0+bmFtZSk7Ci0JCXNsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXNoKHNrYiwgMSk7CS8qIExBUEIgaW50ZXJuYWwgY29udHJvbCAqLwpAQCAtMjExLDcgKzIxMiw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJ4MjVfYXN5OiBkYXRhIHJlY2VpdmVkIGVyciAtICVkXG4iLCBlcnIpOwogCX0gZWxzZSB7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCXNsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIH0KIApAQCAtMjI2LDcgKzIyNyw3IEBACiAJCWxlbiA9IG10dTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cnVuY2F0aW5nIG92ZXJzaXplZCB0cmFuc21pdCBwYWNrZXQhXG4iLAogCQkJCQlzbC0+ZGV2LT5uYW1lKTsKLQkJc2wtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJc2wtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl4MjVfYXN5X3VubG9jayhzbCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNjYsNyArMjY3LDcgQEAKIAlpZiAoc2wtPnhsZWZ0IDw9IDApIHsKIAkJLyogTm93IHNlcmlhbCBidWZmZXIgaXMgYWxtb3N0IGZyZWUgJiB3ZSBjYW4gc3RhcnQKIAkJICogdHJhbnNtaXNzaW9uIG9mIGFub3RoZXIgcGFja2V0ICovCi0JCXNsLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXNsLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJY2xlYXJfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKTsKIAkJeDI1X2FzeV91bmxvY2soc2wpOwogCQlyZXR1cm47CkBAIC0zODMsNyArMzg0LDcgQEAKIAkvKiBXZSB3ZXJlIG5vdCBidXN5LCBzbyB3ZSBhcmUgbm93Li4uIDotKSAqLwogCWlmIChza2IgIT0gTlVMTCkgewogCQl4MjVfYXN5X2xvY2soc2wpOwotCQlzbC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXgyNV9hc3lfZW5jYXBzKHNsLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KQEAgLTUzMyw3ICs1MzQsNyBAQAogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCi0JCQkJc2wtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MDgsMTQgKzYwOSw2IEBACiAJeDI1X2FzeV9mcmVlKHNsKTsKIH0KIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKngyNV9hc3lfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHgyNV9hc3kgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJnNsLT5zdGF0czsKLX0KLQotCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCQkJU1RBTkRBUkQgWC4yNSBFTkNBUFNVTEFUSU9OCQkgIAkgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02ODIsNyArNjc1LDcgQEAKIAkJCXNsLT5yYnVmZltzbC0+cmNvdW50KytdID0gczsKIAkJCXJldHVybjsKIAkJfQotCQlzbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJc2wtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCX0KIH0KQEAgLTcxOSw2ICs3MTIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4MjVfYXN5X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0geDI1X2FzeV9vcGVuX2RldiwKKwkubmRvX3N0b3AJPSB4MjVfYXN5X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSB4MjVfYXN5X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CT0geDI1X2FzeV9jaGFuZ2VfbXR1LAorfTsKKwogLyogSW5pdGlhbGlzZSB0aGUgWC4yNSBkcml2ZXIuICBDYWxsZWQgYnkgdGhlIGRldmljZSBpbml0IGNvZGUgKi8KIHN0YXRpYyB2b2lkIHgyNV9hc3lfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTczNCwxMyArNzM1LDggQEAKIAkgKi8KIAogCWRldi0+bXR1CQk9IFNMX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0geDI1X2FzeV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmeDI1X2FzeV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWioyMDsKLQlkZXYtPm9wZW4JCT0geDI1X2FzeV9vcGVuX2RldjsKLQlkZXYtPnN0b3AJCT0geDI1X2FzeV9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgICAgID0geDI1X2FzeV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IHgyNV9hc3lfY2hhbmdlX210dTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CiAJZGV2LT5hZGRyX2xlbgkJPSAwOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfWDI1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaCBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmgKaW5kZXggNDE3NzAyMC4uOGYwZmMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaAorKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oCkBAIC0yOCwxMCArMjgsNiBAQAogICB1bnNpZ25lZCBjaGFyCQkqeGJ1ZmY7CQkvKiB0cmFuc21pdHRlciBidWZmZXIJCSovCiAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAqeGhlYWQ7ICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogICBpbnQgICAgICAgICAgICAgICAgICAgeGxlZnQ7ICAgICAgICAgIC8qIGJ5dGVzIGxlZnQgaW4gWE1JVCBxdWV1ZSAgICAgKi8KLQotICAvKiBYLjI1IGludGVyZmFjZSBzdGF0aXN0aWNzLiAqLwotICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogICBpbnQgICAgICAgICAgICAgICAgICAgYnVmZnNpemU7ICAgICAgIC8qIE1heCBidWZmZXJzIHNpemVzICAgICAgICAgICAgKi8KIAogICB1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEZsYWcgdmFsdWVzLyBtb2RlIGV0YwkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCmluZGV4IDNkMDA5NzEuLmFkNGU3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworKysgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKQEAgLTE3NzUsNyArMTc3NSw4IEBACiAvKgogICoJTW9kdWxlIHN1cHBvcnQKICAqLwotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiR2VuZXJpYyBaODVDMzAvWjg1MjMwIGludGVyZmFjZSBkcml2ZXIgdjAuMDJcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KKwlLRVJOX0lORk8gIkdlbmVyaWMgWjg1QzMwL1o4NTIzMCBpbnRlcmZhY2UgZHJpdmVyIHYwLjAyXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCB6ODUyMzBfaW5pdF9kcml2ZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZQppbmRleCAxNjk2ZTkzLi41ZDllMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCWRyaXZlci5vCVwKIAlmdy5vCQlcCiAJb3AtcmZraWxsLm8JXAorCXN5c2ZzLm8JCVwKIAluZXRkZXYubwlcCiAJdHgubwkJXAogCXJ4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCmluZGV4IDE1ZDlmNTEuLmIzY2FkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwpAQCAtNTIsNyArNTIsNiBAQAogICoKICAqIGkyNDAwbV9kZXZfaW5pdGFsaXplKCkgICAgICAgQ2FsbGVkIGJ5IGkyNDAwbV9kZXZfc3RhcnQoKQogICogICBpMjQwMG1fc2V0X2luaXRfY29uZmlnKCkKLSAqICAgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKCkKICAqICAgaTI0MDBtX2NtZF9nZXRfc3RhdGUoKQogICogaTI0MDBtX2Rldl9zaHV0ZG93bigpICAgICAgICBDYWxsZWQgYnkgaTI0MDBtX2Rldl9zdG9wKCkKICAqICAgaTI0MDBtLT5idXNfcmVzZXQoKQpAQCAtOTQyLDggKzk0MSw4IEBACiAvKiBGaXJtd2FyZSBpbnRlcmZhY2UgdmVyc2lvbnMgd2Ugc3VwcG9ydCAqLwogZW51bSB7CiAJSTI0MDBNX0hESXZfTUFKT1IgPSA5LAotCUkyNDAwTV9IREl2X01BSk9SXzIgPSA4LAogCUkyNDAwTV9IREl2X01JTk9SID0gMSwKKwlJMjQwME1fSERJdl9NSU5PUl8yID0gMiwKIH07CiAKIApAQCAtOTU5LDYgKzk1OCwxMCBAQAogICogTG9uZyBmdW5jdGlvbiwgYnV0IHF1aXRlIHNpbXBsZTsgZmlyc3QgY2h1bmsgbGF1bmNoZXMgdGhlIGNvbW1hbmQKICAqIGFuZCBkb3VibGUgY2hlY2tzIHRoZSByZXBseSBmb3IgdGhlIHJpZ2h0IFRMVi4gVGhlbiB3ZSBwcm9jZXNzIHRoZQogICogVExWICh3aGVyZSB0aGUgbWVhdCBpcykuCisgKgorICogT25jZSB3ZSBwcm9jZXNzIHRoZSBUTFYgdGhhdCBnaXZlcyB1cyB0aGUgZmlybXdhcmUncyBpbnRlcmZhY2UKKyAqIHZlcnNpb24sIHdlIGVuY29kZSBpdCBhbmQgc2F2ZSBpdCBpbiBpMjQwMG0tPmZ3X3ZlcnNpb24gZm9yIGZ1dHVyZQorICogcmVmZXJlbmNlLgogICovCiBpbnQgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKIHsKQEAgLTEwMDksMjIgKzEwMTIsMjAgQEAKIAltaW5vciA9IGxlMTZfdG9fY3B1KGw0bXYtPm1pbm9yKTsKIAlicmFuY2ggPSBsZTE2X3RvX2NwdShsNG12LT5icmFuY2gpOwogCXJlc3VsdCA9IC1FSU5WQUw7Ci0JaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SCi0JICAgICYmIG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SXzIpIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBtYWpvciBmdyBpbnRlcmZhY2UgdmVyc2lvbiAiCisJaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SKSB7CisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgbWFqb3IgZncgdmVyc2lvbiAiCiAJCQkiJXUuJXUuJXVcbiIsIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKIAkJZ290byBlcnJvcl9iYWRfbWFqb3I7CiAJfQotCWlmIChtYWpvciA9PSBJMjQwME1fSERJdl9NQUpPUl8yKQotCQlkZXZfZXJyKGRldiwgImRlcHJlY2F0ZWQgbWFqb3IgZncgaW50ZXJmYWNlIHZlcnNpb24gIgotCQkJIiV1LiV1LiV1XG4iLCBtYWpvciwgbWlub3IsIGJyYW5jaCk7CiAJcmVzdWx0ID0gMDsKLQlpZiAobWlub3IgIT0gSTI0MDBNX0hESXZfTUlOT1IpCi0JCWRldl93YXJuKGRldiwgInVudGVzdGVkIG1pbm9yIGZ3IGZpcm13YXJlIHZlcnNpb24gJXUuJXUuJXVcbiIsCisJaWYgKG1pbm9yIDwgSTI0MDBNX0hESXZfTUlOT1JfMiAmJiBtaW5vciA+IEkyNDAwTV9IREl2X01JTk9SKQorCQlkZXZfd2FybihkZXYsICJ1bnRlc3RlZCBtaW5vciBmdyB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkJIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKLWVycm9yX2JhZF9tYWpvcjoKKwkvKiBZZXMsIHdlIGlnbm9yZSB0aGUgYnJhbmNoIC0tIHdlIGRvbid0IGhhdmUgdG8gdHJhY2sgaXQgKi8KKwlpMjQwMG0tPmZ3X3ZlcnNpb24gPSBtYWpvciA8PCAxNiB8IG1pbm9yOwogCWRldl9pbmZvKGRldiwgImZpcm13YXJlIGludGVyZmFjZSB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkgbWFqb3IsIG1pbm9yLCBicmFuY2gpOworZXJyb3JfYmFkX21ham9yOgogZXJyb3Jfbm9fdGx2OgogZXJyb3JfY21kX2ZhaWxlZDoKIAlrZnJlZV9za2IoYWNrX3NrYik7CkBAIC0xMjIxLDYgKzEyMjIsNzcgQEAKIAogCiAvKioKKyAqIGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0IC0gU2V0IHRoZSBkZXZpY2UncyBpZGxlIG1vZGUgdGltZW91dAorICoKKyAqIEBpMjQwMG06IGkyNDAwbSBkZXZpY2UgZGVzY3JpcHRvcgorICoKKyAqIEBtc2VjczogbWlsbGlzZWNvbmRzIGZvciB0aGUgdGltZW91dCB0byBlbnRlciBpZGxlIG1vZGUuIEJldHdlZW4KKyAqICAgICAxMDAgdG8gMzAwMDAwICg1bSk7IDAgdG8gZGlzYWJsZS4gSW4gaW5jcmVtZW50cyBvZiAxMDAuCisgKgorICogQWZ0ZXIgdGhpcyBAbXNlY3Mgb2YgdGhlIGxpbmsgYmVpbmcgaWRsZSAobm8gZGF0YSBiZWluZyBzZW50IG9yCisgKiByZWNlaXZlZCksIHRoZSBkZXZpY2Ugd2lsbCBuZWdvdGlhdGUgd2l0aCB0aGUgYmFzZXN0YXRpb24gZW50ZXJpbmcKKyAqIGlkbGUgbW9kZSBmb3Igc2F2aW5nIHBvd2VyLiBUaGUgY29ubmVjdGlvbiBpcyBtYWludGFpbmVkLCBidXQKKyAqIGdldHRpbmcgb3V0IG9mIGl0IChkb25lIGluIHR4LmMpIHdpbGwgcmVxdWlyZSBzb21lIG5lZ290aWF0aW9uLAorICogcG9zc2libGUgY3J5cHRvIHJlLWhhbmRzaGFrZSBhbmQgYSBwb3NzaWJsZSBESENQIHJlLWxlYXNlLgorICoKKyAqIE9ubHkgYXZhaWxhYmxlIGlmIGZ3X3ZlcnNpb24gPj0gMHgwMDA5MDAwMi4KKyAqCisgKiBSZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqLworaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgdW5zaWduZWQgbXNlY3MpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKmFja19za2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGkyNDAwbV9sM2w0X2hkciBoZHI7CisJCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgY2l0OworCX0gKmNtZDsKKwljb25zdCBzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyICphY2s7CisJc2l6ZV90IGFja19sZW47CisJY2hhciBzdHJlcnJbMzJdOworCisJcmVzdWx0ID0gLUVOT1NZUzsKKwlpZiAoaTI0MDBtX2xlX3YxXzMoaTI0MDBtKSkKKwkJZ290byBlcnJvcl9hbGxvYzsKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3JfYWxsb2M7CisJY21kLT5oZHIudHlwZSA9IGNwdV90b19sZTE2KEkyNDAwTV9NVF9HRVRfU1RBVEUpOworCWNtZC0+aGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSAtIHNpemVvZihjbWQtPmhkcikpOworCWNtZC0+aGRyLnZlcnNpb24gPSBjcHVfdG9fbGUxNihJMjQwME1fTDNMNF9WRVJTSU9OKTsKKworCWNtZC0+Y2l0Lmhkci50eXBlID0KKwkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9USU1FT1VUKTsKKwljbWQtPmNpdC5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZC0+Y2l0LnRpbWVvdXQpKTsKKwljbWQtPmNpdC50aW1lb3V0ID0gY3B1X3RvX2xlMzIobXNlY3MpOworCisJYWNrX3NrYiA9IGkyNDAwbV9tc2dfdG9fZGV2KGkyNDAwbSwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChJU19FUlIoYWNrX3NrYikpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaXNzdWUgJ3NldCBpZGxlIHRpbWVvdXQnIGNvbW1hbmQ6ICIKKwkJCSIlbGRcbiIsIFBUUl9FUlIoYWNrX3NrYikpOworCQlyZXN1bHQgPSBQVFJfRVJSKGFja19za2IpOworCQlnb3RvIGVycm9yX21zZ190b19kZXY7CisJfQorCWFjayA9IHdpbWF4X21zZ19kYXRhX2xlbihhY2tfc2tiLCAmYWNrX2xlbik7CisJcmVzdWx0ID0gaTI0MDBtX21zZ19jaGVja19zdGF0dXMoYWNrLCBzdHJlcnIsIHNpemVvZihzdHJlcnIpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIidzZXQgaWRsZSB0aW1lb3V0JyAoMHglMDR4KSBjb21tYW5kIGZhaWxlZDogIgorCQkJIiVkIC0gJXNcbiIsIEkyNDAwTV9NVF9HRVRfU1RBVEUsIHJlc3VsdCwgc3RyZXJyKTsKKwkJZ290byBlcnJvcl9jbWRfZmFpbGVkOworCX0KKwlyZXN1bHQgPSAwOworCWtmcmVlX3NrYihhY2tfc2tiKTsKK2Vycm9yX2NtZF9mYWlsZWQ6CitlcnJvcl9tc2dfdG9fZGV2OgorCWtmcmVlKGNtZCk7CitlcnJvcl9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgogICogaTI0MDBtX2Rldl9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIG9uY2UgY29tbXVuaWNhdGlvbnMgYXJlIHJlYWR5CiAgKgogICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKQEAgLTEyMzgsMjYgKzEzMTAsNTUgQEAKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV9wYXJhbWV0ZXJzIGlkbGVfcGFyYW1zOworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgaWRsZV90aW1lb3V0OworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kMmhfZGF0YV9mb3JtYXQgZGY7CisJc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2RsX2hvc3RfcmVvcmRlciBkbGhyOwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X2hkciAqYXJnc1s5XTsKIAl1bnNpZ25lZCBhcmdjID0gMDsKIAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBVc2VsZXNzIGZvciBub3cuLi5taWdodCBjaGFuZ2UgKi8KKwkvKiBEaXNhYmxlIGlkbGUgbW9kZT8gKGVuYWJsZWQgYnkgZGVmYXVsdCkgKi8KIAlpZiAoaTI0MDBtX2lkbGVfbW9kZV9kaXNhYmxlZCkgewotCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9Ci0JCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMpOwotCQlpZGxlX3BhcmFtcy5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCi0JCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOwotCQlpZGxlX3BhcmFtcy5pZGxlX3RpbWVvdXQgPSAwOwotCQlpZGxlX3BhcmFtcy5pZGxlX3BhZ2luZ19pbnRlcnZhbCA9IDA7Ci0JCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCWlmIChpMjQwMG1fbGVfdjFfMyhpMjQwMG0pKSB7CisJCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTKTsKKwkJCWlkbGVfcGFyYW1zLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOworCQkJaWRsZV9wYXJhbXMuaWRsZV90aW1lb3V0ID0gMDsKKwkJCWlkbGVfcGFyYW1zLmlkbGVfcGFnaW5nX2ludGVydmFsID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCX0gZWxzZSB7CisJCQlpZGxlX3RpbWVvdXQuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCk7CisJCQlpZGxlX3RpbWVvdXQuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJCXNpemVvZihpZGxlX3RpbWVvdXQpIC0gc2l6ZW9mKGlkbGVfdGltZW91dC5oZHIpKTsKKwkJCWlkbGVfdGltZW91dC50aW1lb3V0ID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3RpbWVvdXQuaGRyOworCQl9CisJfQorCWlmIChpMjQwMG1fZ2VfdjFfNChpMjQwMG0pKSB7CisJCS8qIEVuYWJsZSBleHRlbmRlZCBSWCBkYXRhIGZvcm1hdD8gKi8KKwkJZGYuaGRyLnR5cGUgPQorCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUKTsKKwkJZGYuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJc2l6ZW9mKGRmKSAtIHNpemVvZihkZi5oZHIpKTsKKwkJZGYuZm9ybWF0ID0gMTsKKwkJYXJnc1thcmdjKytdID0gJmRmLmhkcjsKKworCQkvKiBFbmFibGUgUlggZGF0YSByZW9yZGVyaW5nPworCQkgKiAoc3dpdGNoIGZsaXBwZWQgaW4gcnguYzppMjQwMG1fcnhfc2V0dXAoKSBhZnRlciBmdyB1cGxvYWQpICovCisJCWlmIChpMjQwMG0tPnJ4X3Jlb3JkZXIpIHsKKwkJCWRsaHIuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUik7CisJCQlkbGhyLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoZGxocikgLSBzaXplb2YoZGxoci5oZHIpKTsKKwkJCWRsaHIucmVvcmRlciA9IDE7CisJCQlhcmdzW2FyZ2MrK10gPSAmZGxoci5oZHI7CisJCX0KIAl9CiAJcmVzdWx0ID0gaTI0MDBtX3NldF9pbml0X2NvbmZpZyhpMjQwMG0sIGFyZ3MsIGFyZ2MpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yOwotCXJlc3VsdCA9IGkyNDAwbV9maXJtd2FyZV9jaGVjayhpMjQwMG0pOwkvKiBmdyB2ZXJzaW9ucyBvaz8gKi8KLQlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcjsKIAkvKgogCSAqIFVwZGF0ZSBzdGF0ZTogSGVyZSBpdCBqdXN0IGNhbGxzIGEgZ2V0IHN0YXRlOyBwYXJzaW5nIHRoZQogCSAqIHJlc3VsdCAoU3lzdGVtIFN0YXRlIFRMViBhbmQgUkYgU3RhdHVzIFRMViBbZG9uZSBpbiB0aGUgcngKQEAgLTEyNjYsNiArMTM2Nyw4IEBACiAJICovCiAJcmVzdWx0ID0gaTI0MDBtX2NtZF9nZXRfc3RhdGUoaTI0MDBtKTsKIGVycm9yOgorCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBkZXZpY2U6ICVkXG4iLCByZXN1bHQpOwogCWRfZm5lbmQoMywgZGV2LCAiKGkyNDAwbSAlcCkgPSAlZFxuIiwgaTI0MDBtLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmgKaW5kZXggMzE4M2JhYS4uNDhmYmZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kZWJ1Zy1sZXZlbHMuaApAQCAtMzgsNiArMzgsNyBAQAogCURfU1VCTU9EVUxFX0RFQ0xBUkUobmV0ZGV2KSwKIAlEX1NVQk1PRFVMRV9ERUNMQVJFKHJma2lsbCksCiAJRF9TVUJNT0RVTEVfREVDTEFSRShyeCksCisJRF9TVUJNT0RVTEVfREVDTEFSRShzeXNmcyksCiAJRF9TVUJNT0RVTEVfREVDTEFSRSh0eCksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggZTgwYTBiNi4uMDdhNTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtNDgsNiArNDgsNyBAQAogICogICAgICAgaTI0MDBtX2Rldl9ib290c3RyYXAoKQogICogICAgICAgaTI0MDBtX3R4X3NldHVwKCkKICAqICAgICAgIGkyNDAwbS0+YnVzX2Rldl9zdGFydCgpCisgKiAgICAgICBpMjQwMG1fZmlybXdhcmVfY2hlY2soKQogICogICAgICAgaTI0MDBtX2NoZWNrX21hY19hZGRyKCkKICAqICAgd2ltYXhfZGV2X2FkZCgpCiAgKgpAQCAtNzUsNiArNzYsMTEgQEAKIAkJICJJZiB0cnVlLCB0aGUgZGV2aWNlIHdpbGwgbm90IGVuYWJsZSBpZGxlIG1vZGUgbmVnb3RpYXRpb24gIgogCQkgIndpdGggdGhlIGJhc2Ugc3RhdGlvbiAod2hlbiBjb25uZWN0ZWQpIHRvIHNhdmUgcG93ZXIuIik7CiAKK2ludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsJLyogMCAocnggcmVvcmRlciBlbmFibGVkKSBieSBkZWZhdWx0ICovCittb2R1bGVfcGFyYW1fbmFtZWQocnhfcmVvcmRlcl9kaXNhYmxlZCwgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X3Jlb3JkZXJfZGlzYWJsZWQsCisJCSAiSWYgdHJ1ZSwgUlggcmVvcmRlcmluZyB3aWxsIGJlIGRpc2FibGVkLiIpOworCiAvKioKICAqIGkyNDAwbV9xdWV1ZV93b3JrIC0gc2NoZWR1bGUgd29yayBvbiBhIGkyNDAwbSdzIHF1ZXVlCiAgKgpAQCAtMzk1LDYgKzQwMSw5IEBACiAJcmVzdWx0ID0gaTI0MDBtX3R4X3NldHVwKGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfdHhfc2V0dXA7CisJcmVzdWx0ID0gaTI0MDBtX3J4X3NldHVwKGkyNDAwbSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfcnhfc2V0dXA7CiAJcmVzdWx0ID0gaTI0MDBtLT5idXNfZGV2X3N0YXJ0KGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYnVzX2Rldl9zdGFydDsKQEAgLTQwNCw2ICs0MTMsOSBAQAogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJZ290byBlcnJvcl9jcmVhdGVfd29ya3F1ZXVlOwogCX0KKwlyZXN1bHQgPSBpMjQwMG1fZmlybXdhcmVfY2hlY2soaTI0MDBtKTsJLyogZncgdmVyc2lvbnMgb2s/ICovCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfZndfY2hlY2s7CiAJLyogQXQgdGhpcyBwb2ludCBpcyBvayB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKi8KIAlyZXN1bHQgPSBpMjQwMG1fY2hlY2tfbWFjX2FkZHIoaTI0MDBtKTsKIAlpZiAocmVzdWx0IDwgMCkKQEAgLTQyMSwxMCArNDMzLDEzIEBACiAKIGVycm9yX2Rldl9pbml0aWFsaXplOgogZXJyb3JfY2hlY2tfbWFjX2FkZHI6CitlcnJvcl9md19jaGVjazoKIAlkZXN0cm95X3dvcmtxdWV1ZShpMjQwMG0tPndvcmtfcXVldWUpOwogZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZToKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOwogZXJyb3JfYnVzX2Rldl9zdGFydDoKKwlpMjQwMG1fcnhfcmVsZWFzZShpMjQwMG0pOworZXJyb3Jfcnhfc2V0dXA6CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIGVycm9yX3R4X3NldHVwOgogZXJyb3JfYm9vdHN0cmFwOgpAQCAtNDcyLDYgKzQ4Nyw3IEBACiAJaTI0MDBtLT5yZWFkeSA9IDA7CiAJZGVzdHJveV93b3JrcXVldWUoaTI0MDBtLT53b3JrX3F1ZXVlKTsKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOworCWkyNDAwbV9yeF9yZWxlYXNlKGkyNDAwbSk7CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIAl3aW1heF9zdGF0ZV9jaGFuZ2Uod2ltYXhfZGV2LCBXSU1BWF9TVF9ET1dOKTsKIAlkX2ZuZW5kKDMsIGRldiwgIihpMjQwMG0gJXApID0gMFxuIiwgaTI0MDBtKTsKQEAgLTYxMyw3ICs2MjksNyBAQAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKIAogCXNucHJpbnRmKHdpbWF4X2Rldi0+bmFtZSwgc2l6ZW9mKHdpbWF4X2Rldi0+bmFtZSksCi0JCSAiaTI0MDBtLSVzOiVzIiwgZGV2LT5idXMtPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJICJpMjQwMG0tJXM6JXMiLCBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAKIAlpMjQwMG0tPmJtX2NtZF9idWYgPSBremFsbG9jKEkyNDAwTV9CTV9DTURfQlVGX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChpMjQwMG0tPmJtX2NtZF9idWYgPT0gTlVMTCkgewpAQCAtNjU3LDYgKzY3MywxMSBAQAogCXdpbWF4X3N0YXRlX2NoYW5nZSh3aW1heF9kZXYsIFdJTUFYX1NUX1VOSU5JVElBTElaRUQpOwogCiAJLyogTm93IHNldHVwIGFsbCB0aGF0IHJlcXVpcmVzIGEgcmVnaXN0ZXJlZCBuZXQgYW5kIHdpbWF4IGRldmljZS4gKi8KKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ldF9kZXYtPmRldi5rb2JqLCAmaTI0MDBtX2Rldl9hdHRyX2dyb3VwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBpMjQwMG0ncyBzeXNmczogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc3lzZnNfc2V0dXA7CisJfQogCXJlc3VsdCA9IGkyNDAwbV9kZWJ1Z2ZzX2FkZChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IHNldHVwIGkyNDAwbSdzIGRlYnVnZnM6ICVkXG4iLCByZXN1bHQpOwpAQCAtNjY2LDYgKzY4Nyw5IEBACiAJcmV0dXJuIHJlc3VsdDsKIAogZXJyb3JfZGVidWdmc19zZXR1cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CitlcnJvcl9zeXNmc19zZXR1cDoKIAl3aW1heF9kZXZfcm0oJmkyNDAwbS0+d2ltYXhfZGV2KTsKIGVycm9yX3dpbWF4X2Rldl9hZGQ6CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CkBAIC02OTcsNiArNzIxLDggQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYpOwogCiAJaTI0MDBtX2RlYnVnZnNfcm0oaTI0MDBtKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CiAJd2ltYXhfZGV2X3JtKCZpMjQwMG0tPndpbWF4X2Rldik7CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoaTI0MDBtLT53aW1heF9kZXYubmV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCmluZGV4IDFkODI3MWYuLjY3NWM2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCiAKIHN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0FDS19CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCisJY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9BQ0tfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKIH07CiAKIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChvZmZzZXQgKyBzZWN0aW9uX3NpemUgPiBiY2ZfbGVuKSB7CiAJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBiYWQgc2VjdGlvbiAjJXp1LCAiCiAJCQkJImVuZCAoQCV6dSkgYmV5b25kIEVPRiAoQCV6dSlcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgc2VjdGlvbiwKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHNlY3Rpb24sCiAJCQkJb2Zmc2V0ICsgc2VjdGlvbl9zaXplLCAgYmNmX2xlbik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcl9zZWN0aW9uX2JleW9uZF9lb2Y7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCQkgICAgJmFjaywgc2l6ZW9mKGFjayksIEkyNDAwTV9CTV9DTURfUkFXKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNlY3Rpb24gIyV6dSAoQCV6dSAlenUgQikgIgotCQkJCSJmYWlsZWQgJWRcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIHNlY3Rpb24sCisJCQkJImZhaWxlZCAlZFxuIiwgaTI0MDBtLT5md19uYW1lLCBzZWN0aW9uLAogCQkJCW9mZnNldCwgc2l6ZW9mKCpiaCkgKyBkYXRhX3NpemUsIChpbnQpIHJldCk7CiAJCQlnb3RvIGVycm9yX3NlbmQ7CiAJCX0KQEAgLTc3MSw4ICs3NzEsOCBAQAogaW50IGkyNDAwbV9kbmxvYWRfaW5pdF9ub25zaWduZWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQogewogI2RlZmluZSBQT0tFKGEsIGQpIHsJCQkJCVwKLQkuYWRkcmVzcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYSksCQlcCi0JLmRhdGEgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKGQpCQlcCisJLmFkZHJlc3MgPSBjcHVfdG9fbGUzMihhKSwJCVwKKwkuZGF0YSA9IGNwdV90b19sZTMyKGQpCQlcCiB9CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJCV9fbGUzMiBhZGRyZXNzOwpAQCAtODc0LDcgKzg3NCw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogbm9uLXNpZ25lZCBkb3dubG9hZCAiCiAJCQkJImluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgcmVzdWx0KTsKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHJlc3VsdCk7CiAJfSBlbHNlIGlmIChpMjQwMG0tPnNib290ID09IDAKIAkJICYmIChtb2R1bGVfaWQgJiBJMjQwME1fQkNGX01PRF9JRF9QT0tFUykpIHsKIAkJLyogbm9uLXNpZ25lZCBib290IHByb2Nlc3Mgd2l0aCBwb2tlcywgbm90aGluZyB0byBkbyAqLwpAQCAtODg2LDcgKzg4Niw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogc2lnbmVkIGJvb3QgZG93bmxvYWQgIgogCQkJCSJpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJlc3VsdCk7CisJCQkJaTI0MDBtLT5md19uYW1lLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtOTE1LDcgKzkxNSw3IEBACiAJaWYgKGJjZl9zaXplIDwgc2l6ZW9mKCpiY2YpKSB7CS8qIGJpZyBlbm91Z2ggaGVhZGVyPyAqLwogCQlkZXZfZXJyKGRldiwgImZpcm13YXJlICVzIHRvbyBzaG9ydDogIgogCQkJIiV6dSBCIHZzICV6dSAoYXQgbGVhc3QpIGV4cGVjdGVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgYmNmX3NpemUsIHNpemVvZigqYmNmKSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplb2YoKmJjZikpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtOTMxLDcgKzkzMSw3IEBACiAJaWYgKGJjZl9zaXplICE9IHNpemUpIHsJCS8qIGFubm95aW5nbHkgcGFyYW5vaWQgKi8KIAkJZGV2X2VycihkZXYsICJmaXJtd2FyZSAlczogYmFkIHNpemUsIGdvdCAiCiAJCQkiJXp1IEIgdnMgJXUgZXhwZWN0ZWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk0Myw3ICs5NDMsNyBAQAogCiAJaWYgKG1vZHVsZV90eXBlICE9IDYpIHsJCS8qIGJ1aWx0IGZvciB0aGUgcmlnaHQgaGFyZHdhcmU/ICovCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzOiB1bmV4cGVjdGVkIG1vZHVsZSB0eXBlIDB4JXg7ICIKLQkJCSJhYm9ydGluZ1xuIiwgaTI0MDBtLT5idXNfZndfbmFtZSwgbW9kdWxlX3R5cGUpOworCQkJImFib3J0aW5nXG4iLCBpMjQwMG0tPmZ3X25hbWUsIG1vZHVsZV90eXBlKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk1MSwxMCArOTUxLDEwIEBACiAJcmVzdWx0ID0gMDsKIAlpZiAobW9kdWxlX3ZlbmRvciAhPSAweDgwODYpCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzPyB1bmV4cGVjdGVkIHZlbmRvciAweCUwNHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBtb2R1bGVfdmVuZG9yKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgbW9kdWxlX3ZlbmRvcik7CiAJaWYgKGRhdGUgPCAweDIwMDgwMzAwKQogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlcz8gYnVpbGQgZGF0ZSB0b28gb2xkICUwOHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBkYXRlKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgZGF0ZSk7CiBlcnJvcjoKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkJZ290byBlcnJvcl9kZXZfcmVib290ZWQ7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJmdyAlczogZG93bmxvYWQgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIHJldCk7CiAJCWdvdG8gZXJyb3JfZG5sb2FkX2JjZjsKIAl9CiAKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImZ3ICVzOiAiCiAJCQkiZG93bmxvYWQgZmluYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOworCQkJaTI0MDBtLT5md19uYW1lLCByZXQpOwogCQlnb3RvIGVycm9yX2RubG9hZF9maW5hbGl6ZTsKIAl9CiAKIAlkX3ByaW50ZigyLCBkZXYsICJmdyAlcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcbiIsCi0JCSBpMjQwMG0tPmJ1c19md19uYW1lKTsKKwkJIGkyNDAwbS0+ZndfbmFtZSk7CiAJaTI0MDBtLT5ib290X21vZGUgPSAwOwogZXJyb3JfZG5sb2FkX2ZpbmFsaXplOgogZXJyb3JfZG5sb2FkX2JjZjoKQEAgLTEwNjcsMjggKzEwNjcsNDEgQEAKICAqLwogaW50IGkyNDAwbV9kZXZfYm9vdHN0cmFwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgZW51bSBpMjQwMG1fYnJpIGZsYWdzKQogewotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBpdHIgPSAwOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fYmNmX2hkciAqYmNmOwkvKiBGaXJtd2FyZSBkYXRhICovCisJY29uc3QgY2hhciAqZndfbmFtZTsKIAogCWRfZm5zdGFydCg1LCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBMb2FkIGZpcm13YXJlIGZpbGVzIHRvIG1lbW9yeS4gKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgaTI0MDBtLT5idXNfZndfbmFtZSwgZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiZncgJXM6IHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7Ci0JCWdvdG8gZXJyb3JfZndfcmVxOwotCX0KLQliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKIAorCS8qIExvYWQgZmlybXdhcmUgZmlsZXMgdG8gbWVtb3J5LiAqLworCWl0ciA9IDA7CisJd2hpbGUoMSkgeworCQlmd19uYW1lID0gaTI0MDBtLT5idXNfZndfbmFtZXNbaXRyXTsKKwkJaWYgKGZ3X25hbWUgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZSBpbWFnZVxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnJvcl9ub19mdzsKKwkJfQorCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgZGV2KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CQkvKiBnb3QgaXQgKi8KKwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBjYW5ub3QgbG9hZCBmaWxlOiAlZFxuIiwKKwkJCQlmd19uYW1lLCByZXQpOworCQlpdHIrKzsKKwl9CisKKwliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKKwlpMjQwMG0tPmZ3X25hbWUgPSBmd19uYW1lOwogCXJldCA9IGkyNDAwbV9md19jaGVjayhpMjQwMG0sIGJjZiwgZnctPnNpemUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2Z3X2JhZDsKIAlyZXQgPSBpMjQwMG1fZndfZG5sb2FkKGkyNDAwbSwgYmNmLCBmdy0+c2l6ZSwgZmxhZ3MpOwogZXJyb3JfZndfYmFkOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotZXJyb3JfZndfcmVxOgorZXJyb3Jfbm9fZnc6CiAJZF9mbmVuZCg1LCBkZXYsICIoaTI0MDBtICVwKSA9ICVkXG4iLCBpMjQwMG0sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCAzYjlkMjdlYS4uM2FlMmRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaApAQCAtMTU2LDEwICsxNTYsNiBAQAogfTsKIAogCi0vKiBGaXJtd2FyZSB2ZXJzaW9uIHdlIHJlcXVlc3Qgd2hlbiBwdWxsaW5nIHRoZSBmdyBpbWFnZSBmaWxlICovCi0jZGVmaW5lIEkyNDAwTV9GV19WRVJTSU9OICIxLjQiCi0KLQogLyoqCiAgKiBpMjQwMG1fcmVzZXRfdHlwZSAtIG1ldGhvZHMgdG8gcmVzZXQgYSBkZXZpY2UKICAqCkBAIC0xNzgsNiArMTc0LDcgQEAKIH07CiAKIHN0cnVjdCBpMjQwMG1fcmVzZXRfY3R4Oworc3RydWN0IGkyNDAwbV9yb3E7CiAKIC8qKgogICogc3RydWN0IGkyNDAwbSAtIGRlc2NyaXB0b3IgZm9yIGFuIEludGVsIDI0MDBtCkBAIC0yNDIsMTAgKzIzOSwxNCBAQAogICogICAgIFRoZSBjYWxsZXIgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBhCiAgKiAgICAgYmFya2VyIHRoYXQgaW5kaWNhdGVzIHRoZSBkZXZpY2UgZ29pbmcgaW50byByZXNldCBtb2RlLgogICoKLSAqIEBidXNfZndfbmFtZTogW2ZpbGxdIG5hbWUgb2YgdGhlIGZpcm13YXJlIGltYWdlIChpbiBtb3N0IGNhc2VzLAotICogICAgIHRoZXkgYXJlIGFsbCB0aGUgc2FtZSBmb3IgYSBzaW5nbGUgcmVsZWFzZSwgZXhjZXB0IHRoYXQgdGhleQotICogICAgIGhhdmUgdGhlIHR5cGUgb2YgdGhlIGJ1cyBlbWJlZGRlZCBpbiB0aGUgbmFtZSAoZWc6Ci0gKiAgICAgaTI0MDBtLWZ3LVgtVkVSU0lPTi5zYmNmLCB3aGVyZSBYIGlzIHRoZSBidXMgbmFtZSkuCisgKiBAYnVzX2Z3X25hbWVzOiBbZmlsbF0gYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlCisgKiAgICAgZmlybXdhcmUgaW1hZ2VzIHRvIHRyeSBsb2FkaW5nLiBUaGlzIGlzIG1hZGUgYSBsaXN0IHNvIHdlIGNhbgorICogICAgIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBmaXJtd2FyZSByZWxlYXNlcyAoZWc6IGlmIHdlCisgKiAgICAgY2FuJ3QgZmluZCB0aGUgZGVmYXVsdCB2MS40LCB3ZSB0cnkgdjEuMykuIEluIGdlbmVyYWwsIHRoZSBuYW1lCisgKiAgICAgc2hvdWxkIGJlIGkyNDAwbS1mdy1YLVZFUlNJT04uc2JjZiwgd2hlcmUgWCBpcyB0aGUgYnVzIG5hbWUuCisgKiAgICAgVGhlIGxpc3QgaXMgdHJpZWQgaW4gb3JkZXIgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBsb2FkcyBpcworICogICAgIHVzZWQuIFRoZSBmdyBsb2FkZXIgd2lsbCBzZXQgaTI0MDBtLT5md19uYW1lIHRvIHBvaW50IHRvIHRoZQorICogICAgIGFjdGl2ZSBmaXJtd2FyZSBpbWFnZS4KICAqCiAgKiBAYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOiBbZmlsbF0gU2V0IHRvIHRydWUgaWYgdGhlIGRldmljZSdzIE1BQwogICogICAgIGFkZHJlc3MgcHJvdmlkZWQgaW4gYm9vdCBtb2RlIGlzIGtpbmQgb2YgYnJva2VuIGFuZCBuZWVkcyB0bwpAQCAtMjU3LDYgKzI1OCw5IEBACiAgKiAgICAgZm9yY2UgdGhpcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgc28gdGhhdCB3ZSBjYW4gZ2V0IGZyb20KICAqICAgICBuZXRkZXZfcHJpdigpIHRoZSByaWdodCBwb2ludGVyLgogICoKKyAqIEByeF9yZW9yZGVyOiAxIGlmIFJYIHJlb3JkZXJpbmcgaXMgZW5hYmxlZDsgdGhpcyBjYW4gb25seSBiZQorICogICAgIHNldCBhdCBwcm9iZSB0aW1lLgorICoKICAqIEBzdGF0ZTogZGV2aWNlJ3Mgc3RhdGUgKGFzIHJlcG9ydGVkIGJ5IGl0KQogICoKICAqIEBzdGF0ZV93cTogd2FpdHF1ZXVlIHRoYXQgaXMgd29rZW4gdXAgd2hlbmV2ZXIgdGhlIHN0YXRlIGNoYW5nZXMKQEAgLTMxMyw2ICszMTcsMTIgQEAKICAqCiAgKiBAcnhfc2l6ZV9tYXg6IGJ1Z2dlc3QgUlggbWVzc2FnZSByZWNlaXZlZC4KICAqCisgKiBAcnhfcm9xOiBSWCBSZU9yZGVyIHF1ZXVlcy4gKGZ3ID49IHYxLjQpIFdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQKKyAqICAgICBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2Ugd2lsbCBhc2sgdGhlIGRyaXZlciB0byBob2xkIGNlcnRhaW4KKyAqICAgICBwYWNrZXRzIHVudGlsIHRoZSBvbmVzIHRoYXQgYXJlIHJlY2VpdmVkIG91dCBvZiBvcmRlciBjYW4gYmUKKyAqICAgICBkZWxpdmVyZWQuIFRoZW4gdGhlIGRyaXZlciBjYW4gcmVsZWFzZSB0aGVtIHRvIHRoZSBob3N0LiBTZWUKKyAqICAgICBkcml2ZXJzL25ldC9pMjQwMG0vcnguYyBmb3IgZGV0YWlscy4KKyAqCiAgKiBAaW5pdF9tdXRleDogTXV0ZXggdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIGRldmljZSBicmluZ3VwCiAgKiAgICAgc2VxdWVuY2U7IHRoaXMgd2F5IGlmIHRoZSBkZXZpY2UgcmVib290cyBpbiB0aGUgbWlkZGxlLCB3ZQogICogICAgIGRvbid0IHRyeSB0byBkbyBhIGJyaW5ndXAgYWdhaW4gd2hpbGUgd2UgYXJlIHRlYXJpbmcgZG93biB0aGUKQEAgLTM2NCw2ICszNzQsMTEgQEAKICAqICAgICBUaGVzZSBoYXZlIHRvIGJlIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBhIGNoaWxkIG9mCiAgKiAgICAgKHdpbWF4X2Rldi0+ZGVidWdmc19kZW50cnkpIHNvIHRoZXkgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUKICAqICAgICBtb2R1bGUgdW5sb2FkcywgYXMgd2UgZG9uJ3Qga2VlcCBlYWNoIGRlbnRyeS4KKyAqCisgKiBAZndfbmFtZTogbmFtZSBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyAqCisgKiBAZndfdmVyc2lvbjogdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlLCBNYWpvci5taW5vciwKKyAqICAgICBlbmNvZGVkIGluIHRoZSBoaWdoIHdvcmQgYW5kIGxvdyB3b3JkIChtYWpvciA8PCAxNiB8IG1pbm9yKS4KICAqLwogc3RydWN0IGkyNDAwbSB7CiAJc3RydWN0IHdpbWF4X2RldiB3aW1heF9kZXY7CS8qIEZJUlNUISBTZWUgZG9jICovCkBAIC0zNzIsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBib290X21vZGU6MTsJCS8qIGlzIHRoZSBkZXZpY2UgaW4gYm9vdCBtb2RlPyAqLwogCXVuc2lnbmVkIHNib290OjE7CQkvKiBzaWduZWQgb3IgdW5zaWduZWQgZncgYm9vdCAqLwogCXVuc2lnbmVkIHJlYWR5OjE7CQkvKiBhbGwgcHJvYmluZyBzdGVwcyBkb25lICovCisJdW5zaWduZWQgcnhfcmVvcmRlcjoxOwkJLyogUlggcmVvcmRlciBpcyBlbmFibGVkICovCiAJdTggdHJhY2VfbXNnX2Zyb21fdXNlcjsJCS8qIGVjaG8gcnggbXNncyB0byAndHJhY2UnIHBpcGUgKi8KIAkJCQkJLyogdHlwZWQgdTggc28gZGVidWdmcy91OCBjYW4gdHdlYWsgKi8KIAllbnVtIGkyNDAwbV9zeXN0ZW1fc3RhdGUgc3RhdGU7CkBAIC0zODgsNyArNDA0LDcgQEAKIAkJCQkgICBzaXplX3QsIGludCBmbGFncyk7CiAJc3NpemVfdCAoKmJ1c19ibV93YWl0X2Zvcl9hY2spKHN0cnVjdCBpMjQwMG0gKiwKIAkJCQkgICAgICAgc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciAqLCBzaXplX3QpOwotCWNvbnN0IGNoYXIgKmJ1c19md19uYW1lOworCWNvbnN0IGNoYXIgKipidXNfZndfbmFtZXM7CiAJdW5zaWduZWQgYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOjE7CiAKIAlzcGlubG9ja190IHR4X2xvY2s7CQkvKiBwcm90ZWN0IFRYIHN0YXRlICovCkBAIC00MDAsMTAgKzQxNiwxMSBAQAogCXVuc2lnbmVkIHR4X3BsX251bSwgdHhfcGxfbWF4LCB0eF9wbF9taW4sCiAJCXR4X251bSwgdHhfc2l6ZV9hY2MsIHR4X3NpemVfbWluLCB0eF9zaXplX21heDsKIAotCS8qIFJYIHN0YXRzICovCisJLyogUlggc3R1ZmYgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0IFJYIHN0YXRlICovCiAJdW5zaWduZWQgcnhfcGxfbnVtLCByeF9wbF9tYXgsIHJ4X3BsX21pbiwKIAkJcnhfbnVtLCByeF9zaXplX2FjYywgcnhfc2l6ZV9taW4sIHJ4X3NpemVfbWF4OworCXN0cnVjdCBpMjQwMG1fcm9xICpyeF9yb3E7CS8qIG5vdCB1bmRlciByeF9sb2NrISAqLwogCiAJc3RydWN0IG11dGV4IG1zZ19tdXRleDsJCS8qIHNlcmlhbGl6ZSBjb21tYW5kIGV4ZWN1dGlvbiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIG1zZ19jb21wbGV0aW9uOwpAQCAtNDIxLDYgKzQzOCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKndha2VfdHhfc2tiOwogCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CisJY29uc3QgY2hhciAqZndfbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlybXdhcmUgaW1hZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGZ3X3ZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSAqLwogfTsKIAogCkBAIC00MzUsNiArNDU0LDcgQEAKIAl3aW1heF9kZXZfaW5pdCgmaTI0MDBtLT53aW1heF9kZXYpOwogCiAJaTI0MDBtLT5ib290X21vZGUgPSAxOworCWkyNDAwbS0+cnhfcmVvcmRlciA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTI0MDBtLT5zdGF0ZV93cSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaTI0MDBtLT50eF9sb2NrKTsKQEAgLTU3OCwxMiArNTk4LDE5IEBACiAgKiBEcml2ZXIgLyBkZXZpY2Ugc2V0dXAgYW5kIGludGVybmFsIGZ1bmN0aW9ucwogICovCiBleHRlcm4gdm9pZCBpMjQwMG1fbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK2V4dGVybiBpbnQgaTI0MDBtX3N5c2ZzX3NldHVwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CiBleHRlcm4gaW50IGkyNDAwbV90eF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOwogZXh0ZXJuIHZvaWQgaTI0MDBtX3dha2VfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBpMjQwMG1fdHhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICopOwogCitleHRlcm4gaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3J4X3JlbGVhc2Uoc3RydWN0IGkyNDAwbSAqKTsKKwogZXh0ZXJuIHZvaWQgaTI0MDBtX25ldF9yeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkLAogCQkJICBjb25zdCB2b2lkICosIGludCk7CitleHRlcm4gdm9pZCBpMjQwMG1fbmV0X2VyeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosCisJCQkgICBlbnVtIGkyNDAwbV9jcyk7CiBlbnVtIGkyNDAwbV9wdDsKIGV4dGVybiBpbnQgaTI0MDBtX3R4KHN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGVudW0gaTI0MDBtX3B0KTsKIApAQCAtNjY0LDE3ICs2OTEsMTcgQEAKIGV4dGVybiB2b2lkIGkyNDAwbV90eF9tc2dfc2VudChzdHJ1Y3QgaTI0MDBtICopOwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9OQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX05CT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpCiB9OwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9TQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1NCT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpCiB9OwogCiAKQEAgLTcyMSw2ICs3NDgsNyBAQAogZXh0ZXJuIGludCBpMjQwMG1fZmlybXdhcmVfY2hlY2soc3RydWN0IGkyNDAwbSAqKTsKIGV4dGVybiBpbnQgaTI0MDBtX3NldF9pbml0X2NvbmZpZyhzdHJ1Y3QgaTI0MDBtICosCiAJCQkJICBjb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgKiosIHNpemVfdCk7CitleHRlcm4gaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKiwgdW5zaWduZWQpOwogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9nZXRfZXBkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgaW50IGVwKQpAQCAtNzMzLDYgKzc2MSwzMiBAQAogZXh0ZXJuIHZvaWQgaTI0MDBtX3JlcG9ydF90bHZfcmZfc3dpdGNoZXNfc3RhdHVzKAogCXN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzICopOwogCisvKgorICogSGVscGVycyBmb3IgZmlybXdhcmUgYmFja3dhcmRzIGNvbXBhYmlsaXR5CisgKgorICogQXMgd2UgYWltIHRvIHN1cHBvcnQgYXQgbGVhc3QgdGhlIGZpcm13YXJlIHZlcnNpb24gdGhhdCB3YXMKKyAqIHJlbGVhc2VkIHdpdGggdGhlIHByZXZpb3VzIGtlcm5lbC9kcml2ZXIgcmVsZWFzZSwgc29tZSBjb2RlIHdpbGwgYmUKKyAqIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgZGVwZW5kaW5nIG9uIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLiBPbiBlYWNoCisgKiByZWxlYXNlLCB0aGUgY29kZSB0byBzdXBwb3J0IGZ3IHJlbGVhc2VzIHBhc3QgdGhlIGxhc3QgdHdvIG9uZXMKKyAqIHdpbGwgYmUgcHVyZ2VkLgorICoKKyAqIEJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhpcyBtYWNyb3MsIGl0IGlzIGVhc2llciB0byBrZWVwIGl0IGEgdGFiCisgKiBvbiB3aGF0IGhhcyB0byBnbyBhbmQgd2hhdCBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9sZV92MV8zKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGxvd2VyIG9yIHYxLjMgKi8KKwlyZXR1cm4gaTI0MDBtLT5md192ZXJzaW9uIDw9IDB4MDAwOTAwMDE7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9nZV92MV80KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGhpZ2hlciBvciB2MS40ICovCisJcmV0dXJuIGkyNDAwbS0+ZndfdmVyc2lvbiA+PSAweDAwMDkwMDAyOworfQorCiAKIC8qCiAgKiBEbyBhIG1pbGxpc2Vjb25kLXNsZWVwIGZvciBhbGxvd2luZyB3aXJlc2hhcmsgdG8gZHVtcCBhbGwgdGhlIGRhdGEKQEAgLTc1MCw2ICs4MDQsNyBAQAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIAogZXh0ZXJuIGludCBpMjQwMG1faWRsZV9tb2RlX2Rpc2FibGVkOworZXh0ZXJuIGludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsKIAogCiAjZW5kaWYgLyogI2lmbmRlZiBfX0kyNDAwTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwppbmRleCA2M2ZlNzA4Li42YjFmZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCkBAIC0yOCwxMyArMjgsMTIgQEAKICAqIHNwYWNlIGFuZCBmcm9tIHRoZSBvdGhlciBzaWRlLiBUaGUgd29ybGQgaXMgKHNhZGx5KSBjb25maWd1cmVkIHRvCiAgKiB0YWtlIGluIG9ubHkgRXRoZXJuZXQgZGV2aWNlcy4uLgogICoKLSAqIEJlY2F1c2Ugb2YgdGhpcywgY3VycmVudGx5IHRoZXJlIGlzIGFuIGNvcHktZWFjaC1yeGVkLXBhY2tldAotICogb3ZlcmhlYWQgb24gdGhlIFJYIHBhdGguIEVhY2ggSVAgcGFja2V0IGhhcyB0byBiZSByZWFsbG9jYXRlZCB0bwotICogYWRkIGFuIGV0aGVybmV0IGhlYWRlciAoYXMgdGhlcmUgaXMgbm8gc3BhY2UgaW4gd2hhdCB3ZSBnZXQgZnJvbQotICogdGhlIGRldmljZSkuIFRoaXMgaXMgYSBrbm93biBkcmF3YmFjayBhbmQgY29taW5nIHZlcnNpb25zIG9mIHRoZQotICogZGV2aWNlJ3MgZmlybXdhcmUgYXJlIGJlaW5nIGNoYW5nZWQgdG8gYWRkIGhlYWRlciBzcGFjZSB0aGF0IGNhbiBiZQotICogdXNlZCB0byBpbnNlcnQgdGhlIGV0aGVybmV0IGhlYWRlciB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlIGFuZAotICogY29weS4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgd2hlbiB1c2luZyBmaXJtd2FyZXMgPD0gdjEuMywgdGhlcmUgaXMgYW4KKyAqIGNvcHktZWFjaC1yeGVkLXBhY2tldCBvdmVyaGVhZCBvbiB0aGUgUlggcGF0aC4gRWFjaCBJUCBwYWNrZXQgaGFzCisgKiB0byBiZSByZWFsbG9jYXRlZCB0byBhZGQgYW4gZXRoZXJuZXQgaGVhZGVyIChhcyB0aGVyZSBpcyBubyBzcGFjZQorICogaW4gd2hhdCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlKS4gVGhpcyBpcyBhIGtub3duIGRyYXdiYWNrIGFuZAorICogZmlybXdhcmVzID49IDEuNCBhZGQgaGVhZGVyIHNwYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IHRoZQorICogZXRoZXJuZXQgaGVhZGVyIHdpdGhvdXQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgYW5kIGNvcHkuCiAgKgogICogVFggZXJyb3IgaGFuZGxpbmcgaXMgdHJpY2t5OyBiZWNhdXNlIHdlIGhhdmUgdG8gRklGTy9xdWV1ZSB0aGUKICAqIGJ1ZmZlcnMgZm9yIHRyYW5zbWlzc2lvbiAoYXMgdGhlIGhhcmR3YXJlIGxpa2VzIGl0IGFnZ3JlZ2F0ZWQpLCB3ZQpAQCAtNjcsNyArNjYsOSBAQAogICogaTI0MDBtX3R4X3RpbWVvdXQgICAgICBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHRpbWVzIG91dAogICoKICAqIGkyNDAwbV9uZXRfcnggICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4gYSBkYXRhIGZyYW1lIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIChmaXJtd2FyZSA8PSAxLjMpCisgKiBpMjQwMG1fbmV0X2VyeCAgICAgICAgIENhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuIGEgZGF0YSBmcmFtZSBpcworICogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKGZpcm13YXJlID49IDEuNCkuCiAgKiBpMjQwMG1fbmV0ZGV2X3NldHVwICAgIENhbGxlZCB0byBzZXR1cCBhbGwgdGhlIG5ldGRldiBzdHVmZiBmcm9tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jX25ldGRldi4KICAqLwpAQCAtMzk2LDMwICszOTcsMTggQEAKICAqIENyZWF0ZSBhIGZha2UgZXRoZXJuZXQgaGVhZGVyCiAgKgogICogRm9yIGVtdWxhdGluZyBhbiBldGhlcm5ldCBkZXZpY2UsIGV2ZXJ5IHJlY2VpdmVkIElQIGhlYWRlciBoYXMgdG8KLSAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLgotICoKLSAqIFdoYXQgd2UgcmVjZWl2ZSBoYXMgKHBvdGVudGlhbGx5KSBtYW55IElQIHBhY2tldHMgY29uY2F0ZW5hdGVkIHdpdGgKLSAqIG5vIEVUSF9ITEVOIGJ5dGVzIHByZWZpeGVkLiBUaHVzIHRoZXJlIGlzIG5vIHNwYWNlIGZvciBhbiBldGgKLSAqIGhlYWRlci4KLSAqCi0gKiBXZSB3b3VsZCBoYXZlIHRvIHJlYWxsb2NhdGUgb3IgZG8gdWdseSBmcmFnbWVudCB0cmlja3MgaW4gb3JkZXIgdG8KLSAqIGFkZCBpdC4KLSAqCi0gKiBCdXQgd2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGhlYWRlciBzcGFjZSBvZiB0aGUgUlggdHJhbnNhY3Rpb24KLSAqICgqbXNnX2hkcikgYXMgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlOyB0aGVuIHdlJ2xsIHBvaW50IGFsbCB0aGUKLSAqIGRhdGEgc2ticyB0aGVyZSwgYXMgdGhleSBzaGFyZSB0aGUgc2FtZSBiYWNraW5nIHN0b3JlLgotICoKLSAqIFdlIG9ubHkgc3VwcG9ydCBJUHY0IGZvciB2MyBmaXJtd2FyZS4KKyAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLiBGYWtlIGl0IHdpdGggdGhlIGdpdmVuCisgKiBwcm90b2NvbC4KICAqLwogc3RhdGljCiB2b2lkIGkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgdm9pZCAqX2V0aF9oZHIpCisJCQkgICAgICAgdm9pZCAqX2V0aF9oZHIsIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGhfaGRyID0gX2V0aF9oZHI7CiAKIAltZW1jcHkoZXRoX2hkci0+aF9kZXN0LCBuZXRfZGV2LT5kZXZfYWRkciwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwogCW1lbXNldChldGhfaGRyLT5oX3NvdXJjZSwgMCwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwotCWV0aF9oZHItPmhfcHJvdG8gPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KEVUSF9QX0lQKTsKKwlldGhfaGRyLT5oX3Byb3RvID0gcHJvdG9jb2w7CiB9CiAKIApAQCAtNDMyLDYgKzQyMSwxMyBAQAogICogQGJ1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKICAqIEBsZW46IGJ1ZmZlcidzIGxlbmd0aAogICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG5vdyBmb3IgdGhlIHYxLjMgZmlybXdhcmUuIEl0IHdpbGwgYmUgZGVwcmVjYXRlZAorICogaW4gPj0gMi42LjMxLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gZmlybXdhcmUgbGltaXRhdGlvbnMsIHdlIGRvbid0IGhhdmUgc3BhY2UgdG8gYWRkCisgKiBhbiBldGhlcm5ldCBoZWFkZXIsIHNvIHdlIG5lZWQgdG8gY29weSBlYWNoIHBhY2tldC4gRmlybXdhcmUKKyAqIHZlcnNpb25zID49IHYxLjQgZml4IHRoaXMgW3NlZSBpMjQwMG1fbmV0X2VyeCgpXS4KKyAqCiAgKiBXZSBqdXN0IGNsb25lIHRoZSBza2IgYW5kIHNldCBpdCB1cCBzbyB0aGF0IGl0J3Mgc2tiLT5kYXRhIHBvaW50ZXIKICAqIHBvaW50cyB0byAiYnVmIiBhbmQgaXQncyBsZW5ndGguCiAgKgpAQCAtNDc4LDcgKzQ3NCw4IEBACiAJCW1lbWNweShza2JfcHV0KHNrYiwgYnVmX2xlbiksIGJ1ZiwgYnVmX2xlbik7CiAJfQogCWkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoaTI0MDBtLT53aW1heF9kZXYubmV0X2RldiwKLQkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOKTsKKwkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOwogCXNrYi0+ZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtNDk0LDYgKzQ5MSw3MyBAQAogfQogCiAKKy8qCisgKiBpMjQwMG1fbmV0X2VyeCAtIHBhc3MgYSBuZXR3b3JrIHBhY2tldCB0byB0aGUgc3RhY2sgKGV4dGVuZGVkIHZlcnNpb24pCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2I6IHRoZSBza2Igd2hlcmUgdGhlIHBhY2tldCBpcyAtIHRoZSBza2Igc2hvdWxkIGJlIHNldCB0byBwb2ludAorICogICAgIGF0IHRoZSBJUCBwYWNrZXQ7IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgZXRoZXJuZXQgaGVhZGVycyBpZgorICogICAgIG5lZWRlZC4KKyAqIEBjczogcGFja2V0IHR5cGUKKyAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBub3cgZm9yIGZpcm13YXJlID49IHYxLjQuIE5vdGUgaXQgaXMgcXVpdGUKKyAqIHNpbWlsYXIgdG8gaTI0MDBtX25ldF9yeCgpICh1c2VkIG9ubHkgZm9yIHYxLjMgZmlybXdhcmUpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgcnVuIGZyb20gYSB0aHJlYWQgY29udGV4dC4gSG93ZXZlciwgd2UKKyAqIHN0aWxsIHVzZSBuZXRpZl9yeCgpIGluc3RlYWQgb2YgbmV0aWZfcmVjZWl2ZV9za2IoKSBhcyB3YXMKKyAqIHJlY29tbWVuZGVkIGluIHRoZSBtYWlsaW5nIGxpc3QuIFJlYXNvbiBpcyBpbiBzb21lIHN0cmVzcyB0ZXN0cworICogd2hlbiBzZW5kaW5nL3JlY2VpdmluZyBhIGxvdCBvZiBkYXRhIHdlIHNlZW0gdG8gaGl0IGEgc29mdGxvY2sgaW4KKyAqIHRoZSBrZXJuZWwncyBUQ1AgaW1wbGVtZW50YXRpb24gW2Fyb3VkbiB0Y3BfZGVsYXlfdGltZXIoKV0uIFVzaW5nCisgKiBuZXRpZl9yeCgpIHRvb2sgY2FyZSBvZiB0aGUgaXNzdWUuCisgKgorICogVGhpcyBpcywgb2YgY291cnNlLCBzdGlsbCBvcGVuIHRvIGRvIG1vcmUgcmVzZWFyY2ggb24gd2h5IHJ1bm5pbmcKKyAqIHdpdGggbmV0aWZfcmVjZWl2ZV9za2IoKSBoaXRzIHRoaXMgc29mdGxvY2suIEZJWE1FLgorICovCit2b2lkIGkyNDAwbV9uZXRfZXJ4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIGVudW0gaTI0MDBtX2NzIGNzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJaW50IHByb3RvY29sOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFsldV0gY3MgJWQpXG4iLAorCQkgIGkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworCXN3aXRjaChjcykgeworCWNhc2UgSTI0MDBNX0NTX0lQVjRfMDoKKwljYXNlIEkyNDAwTV9DU19JUFY0OgorCQlwcm90b2NvbCA9IEVUSF9QX0lQOworCQlpMjQwMG1fcnhfZmFrZV9ldGhfaGVhZGVyKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYsCisJCQkJCSAgc2tiLT5kYXRhIC0gRVRIX0hMRU4sCisJCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKKwkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgLUVUSF9ITEVOKTsKKwkJc2tiLT5kZXYgPSBpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2OworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCQluZXRfZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldF9kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIkVSWDogQlVHPyBDUyB0eXBlICV1IHVuc3VwcG9ydGVkXG4iLCBjcyk7CisJCWdvdG8gZXJyb3I7CisKKwl9CisJZF9wcmludGYoMywgZGV2LCAiRVJYOiByZWNlaXZpbmcgJWQgYnl0ZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2tcbiIsCisJCSBza2ItPmxlbik7CisJZF9kdW1wKDQsIGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJbmV0aWZfcnhfbmkoc2tiKTsJLyogc2VlIG5vdGVzIGluIGZ1bmN0aW9uIGhlYWRlciAqLworZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbJXVdIGNzICVkKSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGkyNDAwbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGkyNDAwbV9vcGVuLAorCS5uZG9fc3RvcCA9IGkyNDAwbV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGkyNDAwbV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaTI0MDBtX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHUsCit9OworCisKIC8qKgogICogaTI0MDBtX25ldGRldl9zZXR1cCAtIFNldHVwIHNldHVwIEBuZXRfZGV2J3MgaTI0MDBtIHByaXZhdGUgZGF0YQogICoKQEAgLTUxMywxMSArNTc3LDcgQEAKIAkJJiAofklGRl9CUk9BRENBU1QJLyogaTI0MDBtIGlzIFAyUCAqLwogCQkgICAmIH5JRkZfTVVMVElDQVNUKTsKIAluZXRfZGV2LT53YXRjaGRvZ190aW1lbyA9IEkyNDAwTV9UWF9USU1FT1VUOwotCW5ldF9kZXYtPm9wZW4gPSBpMjQwMG1fb3BlbjsKLQluZXRfZGV2LT5zdG9wID0gaTI0MDBtX3N0b3A7Ci0JbmV0X2Rldi0+aGFyZF9zdGFydF94bWl0ID0gaTI0MDBtX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRfZGV2LT5jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHU7Ci0JbmV0X2Rldi0+dHhfdGltZW91dCA9IGkyNDAwbV90eF90aW1lb3V0OworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaTI0MDBtX25ldGRldl9vcHM7CiAJZF9mbmVuZCgzLCBOVUxMLCAiKG5ldF9kZXYgJXApID0gdm9pZFxuIiwgbmV0X2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpMjQwMG1fbmV0ZGV2X3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKaW5kZXggNjkyMjAyMjcuLjAyNDE5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiAgLSBVc2Ugc2tiX2Nsb25lKCksIGJyZWFrIHVwIHByb2Nlc3NpbmcgaW4gY2h1bmtzCiAgKiAgLSBTcGxpdCB0cmFuc3BvcnQvZGV2aWNlIHNwZWNpZmljCiAgKiAgLSBNYWtlIGJ1ZmZlciBzaXplIGR5bmFtaWMgdG8gZXhlcnQgbGVzcyBtZW1vcnkgcHJlc3N1cmUKLSAqCisgKiAgLSBSWCByZW9yZGVyIHN1cHBvcnQKICAqCiAgKiBUaGlzIGhhbmRsZXMgdGhlIFJYIHBhdGguCiAgKgpAQCAtNjksNiArNjksNTAgQEAKICAqIFNlZSB0eC5jIGZvciBhIGRlZXBlciBkZXNjcmlwdGlvbiBvbiBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZAogICogb3RoZXIgZnVuIGZhY3RzIG9mIGl0LgogICoKKyAqIERBVEEgUEFDS0VUUworICoKKyAqIEluIGZpcm13YXJlcyA8PSB2MS4zLCBkYXRhIHBhY2tldHMgaGF2ZSBubyBoZWFkZXIgZm9yIFJYLCBidXQgdGhleQorICogZG8gZm9yIFRYIChjdXJyZW50bHkgdW51c2VkKS4KKyAqCisgKiBJbiBmaXJtd2FyZSA+PSAxLjQsIFJYIHBhY2tldHMgaGF2ZSBhbiBleHRlbmRlZCBoZWFkZXIgKDE2CisgKiBieXRlcykuIFRoaXMgaGVhZGVyIGNvbnZleXMgaW5mb3JtYXRpb24gZm9yIG1hbmFnZW1lbnQgb2YgaG9zdAorICogcmVvcmRlcmluZyBvZiBwYWNrZXRzICh0aGUgZGV2aWNlIG9mZmxvYWRzIHN0b3JhZ2Ugb2YgdGhlIHBhY2tldHMKKyAqIGZvciByZW9yZGVyaW5nIHRvIHRoZSBob3N0KS4gUmVhZCBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGUgaGVhZGVyIGlzIHVzZWQgYXMgZHVtbXkgc3BhY2UgdG8gZW11bGF0ZSBhbiBldGhlcm5ldCBoZWFkZXIgYW5kCisgKiB0aHVzIGJlIGFibGUgdG8gYWN0IGFzIGFuIGV0aGVybmV0IGRldmljZSB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlLgorICoKKyAqIERBVEEgUlggUkVPUkRFUklORworICoKKyAqIFN0YXJ0aW5nIGluIGZpcm13YXJlIHYxLjQsIHRoZSBkZXZpY2UgY2FuIGRlbGl2ZXIgcGFja2V0cyBmb3IKKyAqIGRlbGl2ZXJ5IHdpdGggc3BlY2lhbCByZW9yZGVyaW5nIGluZm9ybWF0aW9uOyB0aGlzIGFsbG93cyBpdCB0bworICogbW9yZSBlZmZlY3RpdmVseSBkbyBwYWNrZXQgbWFuYWdlbWVudCB3aGVuIHNvbWUgZnJhbWVzIHdlcmUgbG9zdCBpbgorICogdGhlIHJhZGlvIHRyYWZmaWMuCisgKgorICogVGh1cywgZm9yIFJYIHBhY2tldHMgdGhhdCBjb21lIG91dCBvZiBvcmRlciwgdGhlIGRldmljZSBnaXZlcyB0aGUKKyAqIGRyaXZlciBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcXVldWUgdGhlbSBwcm9wZXJseSBhbmQgdGhlbiBhdCBzb21lCisgKiBwb2ludCwgdGhlIHNpZ25hbCB0byBkZWxpdmVyIHRoZSB3aG9sZSAob3IgcGFydCkgb2YgdGhlIHF1ZXVlZAorICogcGFja2V0cyB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gVGhlcmUgYXJlIDE2IHN1Y2ggcXVldWVzLgorICoKKyAqIFRoaXMgb25seSBoYXBwZW5zIHdoZW4gYSBwYWNrZXQgY29tZXMgaW4gd2l0aCB0aGUgIm5lZWQgcmVvcmRlciIKKyAqIGZsYWcgc2V0IGluIHRoZSBSWCBoZWFkZXIuIFdoZW4gc3VjaCBiaXQgaXMgc2V0LCB0aGUgZm9sbG93aW5nCisgKiBvcGVyYXRpb25zIG1pZ2h0IGJlIGluZGljYXRlZDoKKyAqCisgKiAgLSByZXNldCBxdWV1ZTogc2VuZCBhbGwgcXVldWVkIHBhY2tldHMgdG8gdGhlIE9TCisgKgorICogIC0gcXVldWU6IHF1ZXVlIGEgcGFja2V0CisgKgorICogIC0gdXBkYXRlIHdzOiB1cGRhdGUgdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0IGFuZCBkZWxpdmVyIHF1ZXVlZAorICogICAgcGFja2V0cyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhCisgKgorICogIC0gcXVldWUgJiB1cGRhdGUgd3M6IHF1ZXVlIGEgcGFja2V0LCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydCBhbmQKKyAqICAgIGRlbGl2ZXIgcXVldWVkIHBhY2tldHMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYQorICoKKyAqIChkZWxpdmVyeSBjcml0ZXJpYTogdGhlIHBhY2tldCdzIFtub3JtYWxpemVkXSBzZXF1ZW5jZSBudW1iZXIgaXMKKyAqIGxvd2VyIHRoYW4gdGhlIG5ldyBbbm9ybWFsaXplZF0gd2luZG93IHN0YXJ0KS4KKyAqCisgKiBTZWUgdGhlIGkyNDAwbV9yb3FfKigpIGZ1bmN0aW9ucyBmb3IgZGV0YWlscy4KKyAqCiAgKiBST0FETUFQCiAgKgogICogaTI0MDBtX3J4CkBAIC03Niw2ICsxMjAsMTkgQEAKICAqICAgaTI0MDBtX3J4X3BsX2Rlc2NyX2NoZWNrCiAgKiAgIGkyNDAwbV9yeF9wYXlsb2FkCiAgKiAgICAgaTI0MDBtX25ldF9yeAorICogICAgIGkyNDAwbV9yeF9lZGF0YQorICogICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcmVzZXQKKyAqICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWUKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3F1ZXVlCisgKiAgICAgICBpMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWVfdXBkYXRlX3dzCisgKiAgICAgICAgIF9faTI0MDBtX3JvcV9xdWV1ZQorICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKICAqICAgICBpMjQwMG1fcnhfY3RsCiAgKiAgICAgICBpMjQwMG1fbXNnX3NpemVfY2hlY2sKICAqICAgICAgIGkyNDAwbV9yZXBvcnRfaG9va193b3JrICAgIFtpbiBhIHdvcmtxdWV1ZV0KQEAgLTE3Nyw4ICsyMzQsNyBAQAogCXJldHVybjsKIAogZXJyb3Jfd2FpdGVyX2NhbmNlbGxlZDoKLQlpZiAoYWNrX3NrYikKLQkJa2ZyZWVfc2tiKGFja19za2IpOworCWtmcmVlX3NrYihhY2tfc2tiKTsKIGVycm9yX25vX3dhaXRlcjoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMjQwMG0tPnJ4X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CkBAIC0yNjUsOCArMzIxLDYgQEAKIH0KIAogCi0KLQogLyoKICAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYSB0cmFjZQogICoKQEAgLTMxNywzMCArMzcxLDYyOCBAQAogCiAKIC8qCisgKiBSZW9yZGVyIHF1ZXVlIGRhdGEgc3RvcmVkIG9uIHNrYi0+Y2Igd2hpbGUgdGhlIHNrYiBpcyBxdWV1ZWQgaW4gdGhlCisgKiByZW9yZGVyIHF1ZXVlcy4KKyAqLworc3RydWN0IGkyNDAwbV9yb3FfZGF0YSB7CisJdW5zaWduZWQgc247CQkvKiBTZXJpYWwgbnVtYmVyIGZvciB0aGUgc2tiICovCisJZW51bSBpMjQwMG1fY3MgY3M7CS8qIHBhY2tldCB0eXBlIGZvciB0aGUgc2tiICovCit9OworCisKKy8qCisgKiBSZU9yZGVyIFF1ZXVlCisgKgorICogQHdzOiBXaW5kb3cgU3RhcnQ7IHNlcXVlbmNlIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCB3aW5kb3cgc3RhcnQKKyAqICAgICBpcyBmb3IgdGhpcyBxdWV1ZQorICogQHF1ZXVlOiB0aGUgc2tiIHF1ZXVlIGl0c2VsZgorICogQGxvZzogY2lyY3VsYXIgcmluZyBidWZmZXIgdXNlZCB0byBsb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiAgICAgcmVvcmRlciBwcm9jZXNzIGluIHRoaXMgcXVldWUgdGhhdCBjYW4gYmUgZGlzcGxheWVkIGluIGNhc2Ugb2YKKyAqICAgICBlcnJvciB0byBoZWxwIGRpYWdub3NlIGl0LgorICoKKyAqIFRoaXMgaXMgdGhlIGhlYWQgZm9yIGEgbGlzdCBvZiBza2JzLiBJbiB0aGUgc2tiLT5jYiBtZW1iZXIgb2YgdGhlCisgKiBza2Igd2hlbiBxdWV1ZWQgaGVyZSBjb250YWlucyBhICdzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhJyB3ZXJlIHdlCisgKiBzdG9yZSB0aGUgc2VxdWVuY2UgbnVtYmVyIChzbikgYW5kIHRoZSBjcyAocGFja2V0IHR5cGUpIGNvbWluZyBmcm9tCisgKiB0aGUgUlggcGF5bG9hZCBoZWFkZXIgZnJvbSB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3QgaTI0MDBtX3JvcQoreworCXVuc2lnbmVkIHdzOworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nICpsb2c7Cit9OworCisKK3N0YXRpYwordm9pZCBfX2kyNDAwbV9yb3FfaW5pdChzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXJvcS0+d3MgPSAwOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJvcS0+cXVldWUpOworfQorCisKK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX2luZGV4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSByb3EgLSAodW5zaWduZWQgbG9uZykgaTI0MDBtLT5yeF9yb3EpCisJCS8gc2l6ZW9mKCpyb3EpOworfQorCisKKy8qCisgKiBOb3JtYWxpemUgYSBzZXF1ZW5jZSBudW1iZXIgYmFzZWQgb24gdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0CisgKgorICogbnNuID0gKHNuIC0gd3MpICUgMjA0OAorICoKKyAqIE5vdGUgdGhhdCBpZiBAc24gPCBAcm9xLT53cywgd2Ugc3RpbGwgbmVlZCBhIHBvc2l0aXZlIG51bWJlcjsgJSdzCisgKiBzaWduIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLCBzbyB3ZSBub3JtYWxpemUgaXQgYnkgYWRkaW5nIDIwNDgKKyAqIHRvIGJyaW5nIGl0IHRvIGJlIHBvc2l0aXZlLgorICovCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV9uc24oc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgdW5zaWduZWQgc24pCit7CisJaW50IHI7CisJciA9ICAoKGludCkgc24gLSAoaW50KSByb3EtPndzKSAlIDIwNDg7CisJaWYgKHIgPCAwKQorCQlyICs9IDIwNDg7CisJcmV0dXJuIHI7Cit9CisKKworLyoKKyAqIENpcmN1bGFyIGJ1ZmZlciB0byBrZWVwIHRoZSBsYXN0IE4gcmVvcmRlciBvcGVyYXRpb25zCisgKgorICogSW4gY2FzZSBzb21ldGhpbmcgZmFpbHMsIGR1bWIgdGhlbiB0byB0cnkgdG8gY29tZSB1cCB3aXRoIHdoYXQKKyAqIGhhcHBlbmVkLgorICovCitlbnVtIHsKKwlJMjQwME1fUk9RX0xPR19MRU5HVEggPSAzMiwKK307CisKK3N0cnVjdCBpMjQwMG1fcm9xX2xvZyB7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5IHsKKwkJZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlOworCQl1bnNpZ25lZCB3cywgY291bnQsIHNuLCBuc24sIG5ld193czsKKwl9IGVudHJ5W0kyNDAwTV9ST1FfTE9HX0xFTkdUSF07CisJdW5zaWduZWQgaW4sIG91dDsKK307CisKKworLyogUHJpbnQgYSBsb2cgZW50cnkgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHVuc2lnbmVkIGluZGV4LAorCQkJCXVuc2lnbmVkIGVfaW5kZXgsCisJCQkJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKworCXN3aXRjaChlLT50eXBlKSB7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJZGV2X2VycihkZXYsICJxIyVkIHJlc2V0ICAgICAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXUiCisJCQkiIC0gbmV3IG53cyAldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24sIGUtPm5ld193cyk7CisJCWJyZWFrOworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQlkZXZfZXJyKGRldiwgInEjJWQgcXVldWUgICAgICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24pOworCQlicmVhazsKKwljYXNlIEkyNDAwTV9ST19UWVBFX1dTOgorCQlkZXZfZXJyKGRldiwgInEjJWQgdXBkYXRlX3dzICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldSIKKwkJCSIgLSBuZXcgbndzICV1XG4iLAorCQkJaW5kZXgsIGUtPndzLCBlLT5jb3VudCwgZS0+c24sIGUtPm5zbiwgZS0+bmV3X3dzKTsKKwkJYnJlYWs7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCWRldl9lcnIoZGV2LCAicSMlZCBxdWV1ZV91cGRhdGVfd3Mgd3MgJXUgY250ICV1IHNuICV1LyV1IgorCQkJIiAtIG5ldyBud3MgJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuLCBlLT5uZXdfd3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInEjJWQgQlVHPyBlbnRyeSAldSAtIHVua25vd24gdHlwZSAldVxuIiwKKwkJCWluZGV4LCBlX2luZGV4LCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19hZGQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLAorCQkJc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlLAorCQkJdW5zaWduZWQgd3MsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBzbiwKKwkJCXVuc2lnbmVkIG5zbiwgdW5zaWduZWQgbmV3X3dzKQoreworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBjbnRfaWR4OworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwkvKiBpZiB3ZSBydW4gb3V0IG9mIHNwYWNlLCB3ZSBlYXQgZnJvbSB0aGUgZW5kICovCisJaWYgKHJvcS0+bG9nLT5pbiAtIHJvcS0+bG9nLT5vdXQgPT0gSTI0MDBNX1JPUV9MT0dfTEVOR1RIKQorCQlyb3EtPmxvZy0+b3V0Kys7CisJY250X2lkeCA9IHJvcS0+bG9nLT5pbisrICUgSTI0MDBNX1JPUV9MT0dfTEVOR1RIOworCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCisJZS0+dHlwZSA9IHR5cGU7CisJZS0+d3MgPSB3czsKKwllLT5jb3VudCA9IGNvdW50OworCWUtPnNuID0gc247CisJZS0+bnNuID0gbnNuOworCWUtPm5ld193cyA9IG5ld193czsKKworCWlmIChkX3Rlc3QoMSkpCisJCWkyNDAwbV9yb3FfbG9nX2VudHJ5X3ByaW50KGkyNDAwbSwgaW5kZXgsIGNudF9pZHgsIGUpOworfQorCisKKy8qIER1bXAgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSBGSUZPIGFuZCByZWluaXRpYWxpemUgaXQgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19kdW1wKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwl1bnNpZ25lZCBjbnQsIGNudF9pZHg7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplOworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwlCVUdfT04ocm9xLT5sb2ctPm91dCA+IHJvcS0+bG9nLT5pbik7CisJZm9yIChjbnQgPSByb3EtPmxvZy0+b3V0OyBjbnQgPCByb3EtPmxvZy0+aW47IGNudCsrKSB7CisJCWNudF9pZHggPSBjbnQgJSBJMjQwME1fUk9RX0xPR19MRU5HVEg7CisJCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCQlpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChpMjQwMG0sIGluZGV4LCBjbnRfaWR4LCBlKTsKKwkJbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCX0KKwlyb3EtPmxvZy0+aW4gPSByb3EtPmxvZy0+b3V0ID0gMDsKK30KKworCisvKgorICogQmFja2JvbmUgZm9yIHRoZSBxdWV1aW5nIG9mIGFuIHNrYiAoYnkgbm9ybWFsaXplZCBzZXF1ZW5jZSBudW1iZXIpCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IHJlb3JkZXIgcXVldWUgd2hlcmUgdG8gYWRkCisgKiBAc2tiOiB0aGUgc2tiIHRvIGFkZAorICogQHNuOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBza2IKKyAqIEBuc246IHRoZSBub3JtYWxpemVkIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2tiIChwcmUtY29tcHV0ZWQgYnkgdGhlCisgKiAgICAgY2FsbGVyIGZyb20gdGhlIEBzbiBhbmQgQHJvcS0+d3MpLgorICoKKyAqIFdlIHRyeSBmaXJzdCBhIGNvdXBsZSBvZiBxdWljayBjYXNlczoKKyAqCisgKiAgIC0gdGhlIHF1ZXVlIGlzIGVtcHR5CisgKiAgIC0gdGhlIHNrYiB3b3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgcXVldWUKKyAqCisgKiBUaGVzZSB3aWxsIGJlIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb25zLgorICoKKyAqIElmIHRoZXNlIGZhaWwsIHRoZW4gd2UgaGF2ZSB0byBkbyBhIHNvcnRlZCBpbnNlcnRpb24gaW4gdGhlIHF1ZXVlLAorICogd2hpY2ggaXMgdGhlIHNsb3dlc3QgcGF0aC4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIGFjcXVpcmUgYSByZWZlcmVuY2UgY291bnQgYXMgd2UgYXJlIGdvaW5nIHRvIG93biBpdC4KKyAqLworc3RhdGljCit2b2lkIF9faTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzbiwgdW5zaWduZWQgbnNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHIsICpyb3FfZGF0YTsKKwl1bnNpZ25lZCBuc25faXRyOworCisJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJXUpXG4iLAorCQkgIGkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCisJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpyb3FfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOworCXJvcV9kYXRhLT5zbiA9IHNuOworCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogcm9xICVwIFt3cyAldV0gbnNuICVkIHNuICV1XG4iLAorCQkgcm9xLCByb3EtPndzLCBuc24sIHJvcV9kYXRhLT5zbik7CisKKwkvKiBRdWV1ZXMgd2lsbCBiZSBlbXB0eSBvbiBub3Qtc28tYmFkIGVudmlyb25tZW50cywgc28gdHJ5CisJICogdGhhdCBmaXJzdCAqLworCWlmIChza2JfcXVldWVfZW1wdHkoJnJvcS0+cXVldWUpKSB7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gZmlyc3Qgb25lXG4iLCByb3EpOworCQlfX3NrYl9xdWV1ZV9oZWFkKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm93IHRyeSBhcHBlbmQsIGFzIG1vc3Qgb2YgdGhlIG9wZXJhdGlvbnMgd2lsbCBiZSB0aGF0ICovCisJc2tiX2l0ciA9IHNrYl9wZWVrX3RhaWwoJnJvcS0+cXVldWUpOworCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwlpZiAobnNuID49IG5zbl9pdHIpIHsKKwkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSBhcHBlbmRlZCBhZnRlciAlcCAobnNuICVkIHNuICV1KVxuIiwKKwkJCSByb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCQlfX3NrYl9xdWV1ZV90YWlsKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm9uZSBvZiB0aGUgZmFzdCBwYXRocyBvcHRpb24gd29ya2VkLiBJdGVyYXRlIHRvIGZpbmQgdGhlCisJICogcmlnaHQgc3BvdCB3aGVyZSB0byBpbnNlcnQgdGhlIHBhY2tldDsgd2Uga25vdyB0aGUgcXVldWUgaXMKKwkgKiBub3QgZW1wdHksIHNvIHdlIGFyZSBub3QgdGhlIGZpcnN0IG9uZXM7IHdlIGFsc28ga25vdyB3ZQorCSAqIGFyZSBub3QgZ29pbmcgdG8gYmUgdGhlIGxhc3Qgb25lcy4gVGhlIGxpc3QgaXMgc29ydGVkLCBzbworCSAqIHdlIGhhdmUgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgdGhlIGZpcnN0IGd1eSB3aXRoIGFuIG5zbl9pdHIKKwkgKiBncmVhdGVyIHRoYXQgb3VyIG5zbi4gKi8KKwlza2JfcXVldWVfd2Fsaygmcm9xLT5xdWV1ZSwgc2tiX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPiBuc24pIHsKKwkJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gcXVldWVkIGJlZm9yZSAlcCAiCisJCQkJICIobnNuICVkIHNuICV1KVxuIiwgcm9xLCBza2JfaXRyLCBuc25faXRyLAorCQkJCSByb3FfZGF0YV9pdHItPnNuKTsKKwkJCV9fc2tiX3F1ZXVlX2JlZm9yZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCS8qIElmIHdlIGdldCBoZXJlLCB0aGF0IGlzIFZFUlkgYmFkIC0tIHByaW50IGluZm8gdG8gaGVscAorCSAqIGRpYWdub3NlIGFuZCBjcmFzaCBpdCAqLworCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBmYWlsZWQgdG8gaW5zZXJ0IHBhY2tldFxuIik7CisJZGV2X2VycihkZXYsICJFUlg6IHJvcSAlcCBbd3MgJXVdIHNrYiAlcCBuc24gJWQgc24gJXVcbiIsCisJCXJvcSwgcm9xLT53cywgc2tiLCBuc24sIHJvcV9kYXRhLT5zbik7CisJc2tiX3F1ZXVlX3dhbGsoJnJvcS0+cXVldWUsIHNrYl9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWRldl9lcnIoZGV2LCAiRVJYOiByb3EgJXAgc2tiX2l0ciAlcCBuc24gJWQgc24gJXVcbiIsCisJCQlyb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCX0KKwlCVUcoKTsKK291dDoKKwlkX2ZuZW5kKDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJWQpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBCYWNrYm9uZSBmb3IgdGhlIHVwZGF0ZSB3aW5kb3cgc3RhcnQgb3BlcmF0aW9uCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IFJlb3JkZXIgcXVldWUKKyAqIEBzbjogTmV3IHNlcXVlbmNlIG51bWJlcgorICoKKyAqIFVwZGF0ZXMgdGhlIHdpbmRvdyBzdGFydCBvZiBhIHF1ZXVlOyB3aGVuIGRvaW5nIHNvLCBpdCBtdXN0IGRlbGl2ZXIKKyAqIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFsbCB0aGUgcXVldWVkIHNrYidzIHdob3NlIG5vcm1hbGl6ZWQKKyAqIHNlcXVlbmNlIG51bWJlciBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbm9ybWFsaXplZCB3aW5kb3cgc3RhcnQuCisgKi8KK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXN0cnVjdCBza19idWZmICpza2JfaXRyLCAqdG1wX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHI7CisJdW5zaWduZWQgbmV3X253cywgbnNuX2l0cjsKKworCW5ld19ud3MgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgc24pOworCWlmICh1bmxpa2VseShuZXdfbndzID49IDEwMjQpICYmIGRfdGVzdCgxKSkgeworCQlkZXZfZXJyKGRldiwgIlNXIEJVRz8gX191cGRhdGVfd3MgbmV3X253cyAldSAoc24gJXUgd3MgJXUpXG4iLAorCQkJbmV3X253cywgc24sIHJvcS0+d3MpOworCQlXQVJOX09OKDEpOworCQlpMjQwMG1fcm9xX2xvZ19kdW1wKGkyNDAwbSwgcm9xKTsKKwl9CisJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgdG1wX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPCBuZXdfbndzKSB7CisJCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwICIKKwkJCQkgIihuc24gJXUvJXUgbmV3IG53cyAldSlcbiIsCisJCQkJIHJvcSwgc2tiX2l0ciwgbnNuX2l0ciwgcm9xX2RhdGFfaXRyLT5zbiwKKwkJCQkgbmV3X253cyk7CisJCQlfX3NrYl91bmxpbmsoc2tiX2l0ciwgJnJvcS0+cXVldWUpOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwkJfQorCQllbHNlCisJCQlicmVhazsJLyogcmVzdCBvZiBwYWNrZXRzIGFsbCBuc25faXRyID4gbndzICovCisJfQorCXJvcS0+d3MgPSBzbjsKKwlyZXR1cm4gbmV3X253czsKK30KKworCisvKgorICogUmVzZXQgYSBxdWV1ZQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICoKKyAqIERlbGl2ZXIgYWxsIHRoZSBwYWNrZXRzIGFuZCByZXNldCB0aGUgd2luZG93LXN0YXJ0IHRvIHplcm8uIE5hbWUgaXMKKyAqIGtpbmQgb2YgbWlzbGVhZGluZy4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfcmVzZXQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0ciwgKnRtcF9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwKVxuIiwgaTI0MDBtLCByb3EpOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUkVTRVQsCisJCQkgICAgIHJvcS0+d3MsIHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpLAorCQkJICAgICB+MCwgfjAsIDApOworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHRtcF9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwIChzbiAldSlcbiIsCisJCQkgcm9xLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJX19za2JfdW5saW5rKHNrYl9pdHIsICZyb3EtPnF1ZXVlKTsKKwkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwl9CisJcm9xLT53cyA9IDA7CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCkgPSB2b2lkXG4iLCBpMjQwMG0sIHJvcSk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBRdWV1ZSBhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBsYm46IExhc3QgYmxvY2sgbnVtYmVyIG9mIHRoZSBwYWNrZXQgaW4gQHNrYgorICoKKyAqIFRoZSBoYXJkd2FyZSBpcyBhc2tpbmcgdGhlIGRyaXZlciB0byBxdWV1ZSBhIHBhY2tldCBmb3IgbGF0ZXIKKyAqIGRlbGl2ZXJ5IHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCSAgICAgIHN0cnVjdCBza19idWZmICogc2tiLCB1bnNpZ25lZCBsYm4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG5zbiwgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJICBpMjQwMG0sIHJvcSwgc2tiLCBsYm4pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBsYm4pOworCWlmICh1bmxpa2VseShuc24gPj0gMTAyNCkpIHsKKwkJZGV2X2VycihkZXYsICJTVyBCVUc/IHF1ZXVlIG5zbiAlZCAobGJuICV1IHdzICV1KVxuIiwKKwkJCW5zbiwgbGJuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCV9faTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCBsYm4sIG5zbik7CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCQkJCSAgICAgcm9xLT53cywgbGVuLCBsYm4sIG5zbiwgfjApOworCX0KKwlkX2ZuZW5kKDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgbGJuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFVwZGF0ZSB0aGUgd2luZG93IHN0YXJ0IGluIGEgcmVvcmRlciBxdWV1ZSBhbmQgZGVsaXZlciBhbGwgc2ticworICogd2l0aCBhIGxvd2VyIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiBSZW9yZGVyIHF1ZXVlCisgKiBAc246IE5ldyBzZXF1ZW5jZSBudW1iZXIKKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfdXBkYXRlX3dzKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwKKwkJCSAgdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG9sZF93cywgbnNuLCBsZW47CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpXG4iLCBpMjQwMG0sIHJvcSwgc24pOworCW9sZF93cyA9IHJvcS0+d3M7CisJbGVuID0gc2tiX3F1ZXVlX2xlbigmcm9xLT5xdWV1ZSk7CisJbnNuID0gX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc24pOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfV1MsCisJCQkgICAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpID0gdm9pZFxuIiwgaTI0MDBtLCByb3EsIHNuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFF1ZXVlIGEgcGFja2V0IGFuZCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBzbjogTGFzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKgorICogTm90ZSB0aGF0IHVubGlrZSBpMjQwMG1fcm9xX3VwZGF0ZV93cygpLCB3aGljaCBzZXRzIHRoZSBuZXcgd2luZG93CisgKiBzdGFydCB0byBAc24sIGluIGhlcmUgd2UnbGwgc2V0IGl0IHRvIEBzbiArIDEuCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJc3RydWN0IHNrX2J1ZmYgKiBza2IsIHVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBuc24sIG9sZF93cywgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSlcbiIsCisJCSAgaTI0MDBtLCByb3EsIHNrYiwgc24pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBzbik7CisJb2xkX3dzID0gcm9xLT53czsKKwlpZiAodW5saWtlbHkobnNuID49IDEwMjQpKSB7CisJCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBxdWV1ZV91cGRhdGVfd3MgbnNuICV1IChzbiAldSB3cyAldSlcbiIsCisJCQluc24sIHNuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCS8qIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGFzIHdlJ2QgcXVldWUKKwkJICogaXQgYW5kIGlubWVkaWF0ZWx5IHVucXVldWUgaXQgLS0ganVzdCBkZWxpdmVyIGl0ICovCisJCWlmIChsZW4gPT0gMCkgeworCQkJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGE7CisJCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2IsIHJvcV9kYXRhLT5jcyk7CisJCX0KKwkJZWxzZSB7CisJCQlfX2kyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJCQlfX2kyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCBzbiArIDEpOworCQl9CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTLAorCQkJCSAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwl9CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24pOworCXJldHVybjsKK30KKworCisvKgorICogUmVjZWl2ZSBhbmQgc2VuZCB1cCBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiX3J4OiBza2IgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqIEBzaW5nbGVfbGFzdDogMSBpZiB0aGUgcGF5bG9hZCBpcyB0aGUgb25seSBvbmUgb3IgdGhlIGxhc3Qgb25lIG9mCisgKiAgICAgdGhlIHNrYi4KKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYWNrZXQncyBkYXRhIGluc2lkZSB0aGUgc2tiCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcGF5bG9hZAorICoKKyAqIFN0YXJ0aW5nIGluIHYxLjQgb2YgdGhlIGkyNDAwbSdzIGZpcm13YXJlLCB0aGUgZGV2aWNlIGNhbiBzZW5kIGRhdGEKKyAqIHBhY2tldHMgdG8gdGhlIGhvc3QgaW4gYW4gZXh0ZW5kZWQgZm9ybWF0IHRoYXQ7IHRoaXMgaW5jdWRlcyBhIDE2CisgKiBieXRlIGhlYWRlciAoc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIpLiBVc2luZyB0aGlzIGhlYWRlcidzIHNwYWNlCisgKiB3ZSBjYW4gZmFrZSBldGhlcm5ldCBoZWFkZXJzIGZvciBldGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uIHdpdGhvdXQKKyAqIGhhdmluZyB0byBjb3B5IHBhY2tldHMgYXJvdW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBzYWlkIHBhdGguCisgKgorICoKKyAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQgdGhhdCByZXF1aXJlcyBubyByZW9yZGVyaW5nCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2Jfcng6IHNrYiB0aGF0IGNvbnRhaW5zIHRoZSBleHRlbmRlZCBkYXRhIHBhY2tldAorICogQHNpbmdsZV9sYXN0OiAxIGlmIHRoZSBwYXlsb2FkIGlzIHRoZSBvbmx5IG9uZSBvciB0aGUgbGFzdCBvbmUgb2YKKyAqICAgICB0aGUgc2tiLgorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBhY2tldCdzIGRhdGEgKHBhc3QgdGhlIGFjdHVhbCBleHRlbmRlZAorICogICAgIGRhdGEgcGF5bG9hZCBoZWFkZXIpLgorICogQHNpemU6IHNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBQYXNzIG92ZXIgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYSBkYXRhIHBhY2tldCB0aGF0IG1pZ2h0IGhhdmUKKyAqIHJlb3JkZXJpbmcgcmVxdWlyZW1lbnRzLgorICoKKyAqIFRoaXMgbmVlZHMgdG8gdGhlIGRlY2lkZSBpZiB0aGUgc2tiIGluIHdoaWNoIHRoZSBwYWNrZXQgaXMKKyAqIGNvbnRhaW5lZCBjYW4gYmUgcmV1c2VkIG9yIGlmIGl0IG5lZWRzIHRvIGJlIGNsb25lZC4gVGhlbiBpdCBoYXMgdG8KKyAqIGJlIHRyaW1tZWQgaW4gdGhlIGVkZ2VzIHNvIHRoYXQgdGhlIGJlZ2lubmluZyBpcyB0aGUgc3BhY2UgZm9yIGV0aAorICogaGVhZGVyIGFuZCB0aGVuIHBhc3MgaXQgdG8gaTI0MDBtX25ldF9lcngoKSBmb3IgdGhlIHN0YWNrCisgKgorICogQXNzdW1lcyB0aGUgY2FsbGVyIGhhcyB2ZXJpZmllZCB0aGUgc2FuaXR5IG9mIHRoZSBwYXlsb2FkIChzaXplLAorICogZXRjKSBhbHJlYWR5LgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3J4X2VkYXRhKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYl9yeCwKKwkJICAgICB1bnNpZ25lZCBzaW5nbGVfbGFzdCwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCWNvbnN0IHN0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyICpoZHIgPSBwYXlsb2FkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWVudW0gaTI0MDBtX2NzIGNzOworCXUzMiByZW9yZGVyOworCXVuc2lnbmVkIHJvX25lZWRlZCwgcm9fdHlwZSwgcm9fY2luLCByb19zbjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xOworCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhOworCisJQlVJTERfQlVHX09OKEVUSF9ITEVOID4gc2l6ZW9mKCpoZHIpKTsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSAgInNpemUgJXp1KVxuIiwgaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBzaXplKTsKKwlpZiAoc2l6ZSA8IHNpemVvZigqaGRyKSkgeworCQlkZXZfZXJyKGRldiwgIkVSWDogSFcgQlVHPyBtZXNzYWdlIHdpdGggc2hvcnQgaGVhZGVyICglenUgIgorCQkJInZzICV6dSBieXRlcyBleHBlY3RlZClcbiIsIHNpemUsIHNpemVvZigqaGRyKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHNpbmdsZV9sYXN0KSB7CisJCXNrYiA9IHNrYl9nZXQoc2tiX3J4KTsKKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBza2IgJXAgcmV1c2luZ1xuIiwgc2tiKTsKKwl9IGVsc2UgeworCQlza2IgPSBza2JfY2xvbmUoc2tiX3J4LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIkVSWDogbm8gbWVtb3J5IHRvIGNsb25lIHNrYlxuIik7CisJCQluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIGVycm9yX3NrYl9jbG9uZTsKKwkJfQorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHNrYiAlcCBjbG9uZWQgZnJvbSAlcFxuIiwgc2tiLCBza2JfcngpOworCX0KKwkvKiBub3cgd2UgaGF2ZSB0byBwdWxsIGFuZCB0cmltIHNvIHRoYXQgdGhlIHNrYiBwb2ludHMgdG8gdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBJUCBwYWNrZXQ7IHRoZSBuZXRkZXYgcGFydCB3aWxsIGFkZCB0aGUKKwkgKiBldGhlcm5ldCBoZWFkZXIgYXMgbmVlZGVkIC0gd2Uga25vdyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKKwkgKiBiZWNhdXNlIHdlIGNoZWNrZWQgaW4gaTI0MDBtX3J4X2VkYXRhKCkuICovCisJc2tiX3B1bGwoc2tiLCBwYXlsb2FkICsgc2l6ZW9mKCpoZHIpIC0gKHZvaWQgKikgc2tiLT5kYXRhKTsKKwlza2JfdHJpbShza2IsICh2b2lkICopIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gcGF5bG9hZCAtIHNpemVvZigqaGRyKSk7CisKKwlyZW9yZGVyID0gbGUzMl90b19jcHUoaGRyLT5yZW9yZGVyKTsKKwlyb19uZWVkZWQgPSByZW9yZGVyICYgSTI0MDBNX1JPX05FRURFRDsKKwljcyA9IGhkci0+Y3M7CisJaWYgKHJvX25lZWRlZCkgeworCQlyb190eXBlID0gKHJlb3JkZXIgPj4gSTI0MDBNX1JPX1RZUEVfU0hJRlQpICYgSTI0MDBNX1JPX1RZUEU7CisJCXJvX2NpbiA9IChyZW9yZGVyID4+IEkyNDAwTV9ST19DSU5fU0hJRlQpICYgSTI0MDBNX1JPX0NJTjsKKwkJcm9fc24gPSAocmVvcmRlciA+PiBJMjQwME1fUk9fU05fU0hJRlQpICYgSTI0MDBNX1JPX1NOOworCisJCXJvcSA9ICZpMjQwMG0tPnJ4X3JvcVtyb19jaW5dOworCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQlyb3FfZGF0YS0+c24gPSByb19zbjsKKwkJcm9xX2RhdGEtPmNzID0gY3M7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcmVvcmRlciBuZWVkZWQ6ICIKKwkJCSAidHlwZSAldSBjaW4gJXUgW3dzICV1XSBzbiAldS8ldSBsZW4gJXp1QlxuIiwKKwkJCSByb190eXBlLCByb19jaW4sIHJvcS0+d3MsIHJvX3NuLAorCQkJIF9faTI0MDBtX3JvcV9uc24ocm9xLCByb19zbiksIHNpemUpOworCQlkX2R1bXAoMiwgZGV2LCBwYXlsb2FkLCBzaXplKTsKKwkJc3dpdGNoKHJvX3R5cGUpIHsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJCWkyNDAwbV9yb3FfcmVzZXQoaTI0MDBtLCByb3EpOworCQkJa2ZyZWVfc2tiKHNrYik7CS8qIG5vIGRhdGEgaGVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQkJaTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9XUzoKKwkJCWkyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCByb19zbik7CisJCQlrZnJlZV9za2Ioc2tiKTsJLyogbm8gZGF0YSBoZXJlICovCisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCQlpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyB1bmtub3duIHJlb3JkZXIgdHlwZSAldVxuIiwgcm9fdHlwZSk7CisJCX0KKwl9CisJZWxzZQorCQlpMjQwMG1fbmV0X2VyeChpMjQwMG0sIHNrYiwgY3MpOworZXJyb3Jfc2tiX2Nsb25lOgorZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSJzaXplICV6dSkgPSB2b2lkXG4iLCBpMjQwMG0sIHNrYl9yeCwgc2luZ2xlX2xhc3QsIHBheWxvYWQsIHNpemUpOworCXJldHVybjsKK30KKworCisvKgogICogQWN0IG9uIGEgcmVjZWl2ZWQgcGF5bG9hZAogICoKICAqIEBpMjQwMG06IGRldmljZSBpbnN0YW5jZQogICogQHNrYl9yeDogc2tiIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiB3YXMgcmVjZWl2ZWQKLSAqIEBzaW5nbGU6IDEgaWYgdGhlcmUgaXMgb25seSBvbmUgcGF5bG9hZCwgMCBvdGhlcndpc2UKKyAqIEBzaW5nbGVfbGFzdDogMSB0aGlzIGlzIHRoZSBvbmx5IHBheWxvYWQgb3IgdGhlIGxhc3Qgb25lIChzbyB0aGUKKyAqICAgICBza2IgY2FuIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNsb25lZCkuCiAgKiBAcGxkOiBwYXlsb2FkIGRlc2NyaXB0b3IKICAqIEBwYXlsb2FkOiBwYXlsb2FkIGRhdGEKICAqCiAgKiBVcG9uIHJlY2VwdGlvbiBvZiBhIHBheWxvYWQsIGxvb2sgYXQgaXRzIGd1dHMgaW4gdGhlIHBheWxvYWQKLSAqIGRlc2NyaXB0b3IgYW5kIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggaXQuCisgKiBkZXNjcmlwdG9yIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LiBJZiBpdCBpcyBhIHNpbmdsZSBwYXlsb2FkCisgKiBza2Igb3IgaWYgdGhlIGxhc3Qgc2tiIGlzIGEgZGF0YSBwYWNrZXQsIHRoZSBza2Igd2lsbCBiZSByZWZlcmVuY2VkCisgKiBhbmQgbW9kaWZpZWQgKHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjbG9uZWQpLgogICovCiBzdGF0aWMKIHZvaWQgaTI0MDBtX3J4X3BheWxvYWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3J4LAotCQkgICAgICAgdW5zaWduZWQgc2luZ2xlLCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3BsZCAqcGxkLAorCQkgICAgICAgdW5zaWduZWQgc2luZ2xlX2xhc3QsIGNvbnN0IHN0cnVjdCBpMjQwMG1fcGxkICpwbGQsCiAJCSAgICAgICBjb25zdCB2b2lkICpwYXlsb2FkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzaXplX3QgcGxfc2l6ZSA9IGkyNDAwbV9wbGRfc2l6ZShwbGQpOwogCWVudW0gaTI0MDBtX3B0IHBsX3R5cGUgPSBpMjQwMG1fcGxkX3R5cGUocGxkKTsKIAorCWRfcHJpbnRmKDcsIGRldiwgIlJYOiByZWNlaXZlZCBwYXlsb2FkIHR5cGUgJXUsICV6dSBieXRlc1xuIiwKKwkJIHBsX3R5cGUsIHBsX3NpemUpOworCWRfZHVtcCg4LCBkZXYsIHBheWxvYWQsIHBsX3NpemUpOworCiAJc3dpdGNoIChwbF90eXBlKSB7CiAJY2FzZSBJMjQwME1fUFRfREFUQToKIAkJZF9wcmludGYoMywgZGV2LCAiUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOwotCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGUsIHBheWxvYWQsIHBsX3NpemUpOworCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgSTI0MDBNX1BUX0NUUkw6CiAJCWkyNDAwbV9yeF9jdGwoaTI0MDBtLCBza2JfcngsIHBheWxvYWQsIHBsX3NpemUpOwpAQCAtMzQ4LDYgKzEwMDAsMTAgQEAKIAljYXNlIEkyNDAwTV9QVF9UUkFDRToKIAkJaTI0MDBtX3J4X3RyYWNlKGkyNDAwbSwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOworCWNhc2UgSTI0MDBNX1BUX0VEQVRBOgorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOworCQlpMjQwMG1fcnhfZWRhdGEoaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBwbF9zaXplKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoJLyogQW55dGhpbmcgZWxzZSBzaG91bGRuJ3QgY29tZSB0byB0aGUgaG9zdCAqLwogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2VycihkZXYsICJSWDogSFcgQlVHPyB1bmV4cGVjdGVkIHBheWxvYWQgdHlwZSAldVxuIiwKQEAgLTQ3NSw3ICsxMTMxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX21zZ19oZHIgKm1zZ19oZHI7CiAJc2l6ZV90IHBsX2l0ciwgcGxfc2l6ZSwgc2tiX2xlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG51bV9wbHM7CisJdW5zaWduZWQgbnVtX3Bscywgc2luZ2xlX2xhc3Q7CiAKIAlza2JfbGVuID0gc2tiLT5sZW47CiAJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFtzaXplICV6dV0pXG4iLApAQCAtNTA0LDcgKzExNjAsOCBAQAogCQkJCQkJICBwbF9pdHIsIHNrYi0+bGVuKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIGVycm9yX3BsX2Rlc2NyX2NoZWNrOwotCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgbnVtX3BscyA9PSAxLCAmbXNnX2hkci0+cGxkW2ldLAorCQlzaW5nbGVfbGFzdCA9IG51bV9wbHMgPT0gMSB8fCBpID09IG51bV9wbHMgLSAxOworCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgc2luZ2xlX2xhc3QsICZtc2dfaGRyLT5wbGRbaV0sCiAJCQkJICBza2ItPmRhdGEgKyBwbF9pdHIpOwogCQlwbF9pdHIgKz0gQUxJR04ocGxfc2l6ZSwgSTI0MDBNX1BMX1BBRCk7CiAJCWNvbmRfcmVzY2hlZCgpOwkJLyogRG9uJ3QgbW9ub3BvbGl6ZSAqLwpAQCAtNTMyLDMgKzExODksNzMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTI0MDBtX3J4KTsKKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlCisgKgorICogVGhpcyBzZXRzIHVwIGFsbCB0aGUgUlggcmVvcmRlcmluZyBpbmZyYXN0cnVjdHVyZXMsIHdoaWNoIHdpbGwgbm90CisgKiBiZSB1c2VkIGlmIHJlb3JkZXJpbmcgaXMgbm90IGVuYWJsZWQgb3IgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90CisgKiBzdXBwb3J0IGl0LiBUaGUgZGV2aWNlIGlzIHRvbGQgdG8gZG8gcmVvcmRlcmluZyBpbgorICogaTI0MDBtX2Rldl9pbml0aWFsaXplKCksIHdoZXJlIGl0IGFsc28gbG9va3MgYXQgdGhlIHZhbHVlIG9mIHRoZQorICogaTI0MDBtLT5yeF9yZW9yZGVyIHN3aXRjaCBiZWZvcmUgdGFraW5nIGEgZGVjaXNzaW9uLgorICoKKyAqIE5vdGUgd2UgYWxsb2NhdGUgdGhlIHJvcSBxdWV1ZXMgaW4gb25lIGNodW5rIGFuZCB0aGUgYWN0dWFsIGxvZ2dpbmcKKyAqIHN1cHBvcnQgZm9yIGl0IChsb2dnaW5nKSBpbiBhbm90aGVyIG9uZSBhbmQgdGhlbiB3ZSBzZXR1cCB0aGUKKyAqIHBvaW50ZXJzIGZyb20gdGhlIGZpcnN0IHRvIHRoZSBsYXN0LgorICovCitpbnQgaTI0MDBtX3J4X3NldHVwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisKKwlpMjQwMG0tPnJ4X3Jlb3JkZXIgPSBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZD8gMCA6IDE7CisJaWYgKGkyNDAwbS0+cnhfcmVvcmRlcikgeworCQl1bnNpZ25lZCBpdHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3QgaTI0MDBtX3JvcV9sb2cgKnJkOworCisJCXJlc3VsdCA9IC1FTk9NRU07CisKKwkJc2l6ZSA9IHNpemVvZihpMjQwMG0tPnJ4X3JvcVswXSkgKiAoSTI0MDBNX1JPX0NJTiArIDEpOworCQlpMjQwMG0tPnJ4X3JvcSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpMjQwMG0tPnJ4X3JvcSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciAiCisJCQkJInJlb3JkZXIgcXVldWVzXG4iLCBzaXplKTsKKwkJCWdvdG8gZXJyb3Jfcm9xX2FsbG9jOworCQl9CisKKwkJc2l6ZSA9IHNpemVvZigqaTI0MDBtLT5yeF9yb3FbMF0ubG9nKSAqIChJMjQwME1fUk9fQ0lOICsgMSk7CisJCXJkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJkID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiUlg6IGNhbm5vdCBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yICIKKwkJCQkicmVvcmRlciBxdWV1ZXMgbG9nIGFyZWFzXG4iLCBzaXplKTsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yX3JvcV9sb2dfYWxsb2M7CisJCX0KKworCQlmb3IoaXRyID0gMDsgaXRyIDwgSTI0MDBNX1JPX0NJTiArIDE7IGl0cisrKSB7CisJCQlfX2kyNDAwbV9yb3FfaW5pdCgmaTI0MDBtLT5yeF9yb3FbaXRyXSk7CisJCQlpMjQwMG0tPnJ4X3JvcVtpdHJdLmxvZyA9ICZyZFtpdHJdOworCQl9CisJfQorCXJldHVybiAwOworCitlcnJvcl9yb3FfbG9nX2FsbG9jOgorCWtmcmVlKGkyNDAwbS0+cnhfcm9xKTsKK2Vycm9yX3JvcV9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRlYXIgZG93biB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlICovCit2b2lkIGkyNDAwbV9yeF9yZWxlYXNlKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpZiAoaTI0MDBtLT5yeF9yZW9yZGVyKSB7CisJCXVuc2lnbmVkIGl0cjsKKwkJZm9yKGl0ciA9IDA7IGl0ciA8IEkyNDAwTV9ST19DSU4gKyAxOyBpdHIrKykKKwkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZpMjQwMG0tPnJ4X3JvcVtpdHJdLnF1ZXVlKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3FbMF0ubG9nKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3EpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCmluZGV4IDFiZmEyODMuLjVhYzVlNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKQEAgLTcwLDggKzcwLDEzIEBACiBzdGF0aWMgaW50IGlvZV90aW1lb3V0ID0gMjsKIG1vZHVsZV9wYXJhbShpb2VfdGltZW91dCwgaW50LCAwKTsKIAotLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tIiBJMjQwME1fRldfVkVSU0lPTiAiLnNiY2YiCisvKiBPdXIgZmlybXdhcmUgZmlsZSBuYW1lIGxpc3QgKi8KK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG1zX2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tMS4zLnNiY2YiCisJSTI0MDBNU19GV19GSUxFX05BTUUsCisJTlVMTAorfTsKKwogCiAvKgogICogRW5hYmxlIHRoZSBTRElPIGZ1bmN0aW9uCkBAIC0yNTUsMTYgKzI2MCwxNiBAQAogCQljb250YWluZXJfb2YoaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtcywgaTI0MDBtKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fV0FSTV9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAogCX07CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fQ09MRF9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAogCX07CiAKIAlpZiAocnQgPT0gSTI0MDBNX1JUX1dBUk0pCkBAIC00MDEsNyArNDA2LDcgQEAKIAlpMjQwMG0tPmJ1c19yZXNldCA9IGkyNDAwbXNfYnVzX3Jlc2V0OwogCWkyNDAwbS0+YnVzX2JtX2NtZF9zZW5kID0gaTI0MDBtc19idXNfYm1fY21kX3NlbmQ7CiAJaTI0MDBtLT5idXNfYm1fd2FpdF9mb3JfYWNrID0gaTI0MDBtc19idXNfYm1fd2FpdF9mb3JfYWNrOwotCWkyNDAwbS0+YnVzX2Z3X25hbWUgPSBJMjQwME1TX0ZXX0ZJTEVfTkFNRTsKKwlpMjQwMG0tPmJ1c19md19uYW1lcyA9IGkyNDAwbXNfYnVzX2Z3X25hbWVzOwogCWkyNDAwbS0+YnVzX2JtX21hY19hZGRyX2ltcGFpcmVkID0gMTsKIAogCXJlc3VsdCA9IGkyNDAwbXNfZW5hYmxlX2Z1bmN0aW9uKGkyNDAwbXMtPmZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM3MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIEludGVsIFdpcmVsZXNzIFdpTUFYIENvbm5lY3Rpb24gMjQwMG0KKyAqIFN5c2ZzIGludGVyZmFjZXMgdG8gc2hvdyBkcml2ZXIgYW5kIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24gPGxpbnV4LXdpbWF4QGludGVsLmNvbT4KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSAiaTI0MDBtLmgiCisKKworI2RlZmluZSBEX1NVQk1PRFVMRSBzeXNmcworI2luY2x1ZGUgImRlYnVnLWxldmVscy5oIgorCisKKy8qCisgKiBTZXQgdGhlIGlkbGUgdGltZW91dCAobXNlY3MpCisgKgorICogRklYTUU6IGV2ZW50dWFsbHkgdGhpcyBzaG91bGQgYmUgYSBjb21tb24gV2lNQVggc3RhY2sgbWV0aG9kLCBidXQKKyAqIHdvdWxkIGxpa2UgdG8gd2FpdCB0byBzZWUgaG93IG90aGVyIGRldmljZXMgbWFuYWdlIGl0LgorICovCitzdGF0aWMKK3NzaXplX3QgaTI0MDBtX2lkbGVfdGltZW91dF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGkyNDAwbSAqaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0odG9fbmV0X2RldihkZXYpKTsKKwl1bnNpZ25lZCB2YWw7CisKKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWwpICE9IDEpCisJCWdvdG8gZXJyb3Jfbm9fdW5zaWduZWQ7CisJaWYgKHZhbCAhPSAwICYmICh2YWwgPCAxMDAgfHwgdmFsID4gMzAwMDAwIHx8IHZhbCAlIDEwMCAhPSAwKSkgeworCQlkZXZfZXJyKGRldiwgImlkbGVfdGltZW91dDogJXU6IGludmFsaWQgbXNlY3Mgc3BlY2lmaWNhdGlvbjsgIgorCQkJInZhbGlkIHZhbHVlcyBhcmUgMCwgMTAwLTMwMDAwMCBpbiAxMDAgaW5jcmVtZW50c1xuIiwKKwkJCXZhbCk7CisJCWdvdG8gZXJyb3JfYmFkX3ZhbHVlOworCX0KKwlyZXN1bHQgPSBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChpMjQwMG0sIHZhbCk7CisJaWYgKHJlc3VsdCA+PSAwKQorCQlyZXN1bHQgPSBzaXplOworZXJyb3Jfbm9fdW5zaWduZWQ6CitlcnJvcl9iYWRfdmFsdWU6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljCitERVZJQ0VfQVRUUihpMjQwMG1faWRsZV90aW1lb3V0LCBTX0lXVVNSLAorCSAgICBOVUxMLCBpMjQwMG1faWRsZV90aW1lb3V0X3N0b3JlKTsKKworc3RhdGljCitzdHJ1Y3QgYXR0cmlidXRlICppMjQwMG1fZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2kyNDAwbV9pZGxlX3RpbWVvdXQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpMjQwMG1fZGV2X2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IGkyNDAwbV9kZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCmluZGV4IDk3MDJjMjJiLi42YWRkMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLW5vdGlmLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJZGV2X2VycihkZXYsICJIVyBCVUc/IFVua25vd24vdW5leHBlY3RlZCBkYXRhIGluIG5vdGlmaWNhdGlvbiAiCiAJCQkibWVzc2FnZSAoJXp1IGJ5dGVzKVxuIiwgYnVmX2xlbik7CiAJCXNucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpICwgZGV2LT5idXNfaWQpOworCQkJIGRldl9kcml2ZXJfc3RyaW5nKGRldiksIGRldl9uYW1lKGRldikpOwogCQlpZiAoYnVmX2xlbiA+IDY0KSB7CiAJCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgcHJlZml4LCBEVU1QX1BSRUZJWF9PRkZTRVQsCiAJCQkJICAgICAgIDgsIDQsIGJ1ZiwgNjQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCmluZGV4IGM2ZDkzNDYuLmNhNDE1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKQEAgLTczLDcgKzczLDE0IEBACiAKIAogLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXVzYi0iIEkyNDAwTV9GV19WRVJTSU9OICIuc2JjZiIKK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG11X2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80ICJpMjQwMG0tZnctdXNiLTEuNC5zYmNmIgorCUkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzQsCisjZGVmaW5lIEkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzMgImkyNDAwbS1mdy11c2ItMS4zLnNiY2YiCisJSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfMywKKwlOVUxMLAorfTsKKwogCiBzdGF0aWMKIGludCBpMjQwMG11X2J1c19kZXZfc3RhcnQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQpAQCAtMjExLDE2ICsyMTgsMTYgQEAKIAkJY29udGFpbmVyX29mKGkyNDAwbSwgc3RydWN0IGkyNDAwbXUsIGkyNDAwbSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX1dBUk1fQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKIAl9OwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0NPTERfQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKIAl9OwogCiAJZF9mbnN0YXJ0KDMsIGRldiwgIihpMjQwMG0gJXAgcnQgJXUpXG4iLCBpMjQwMG0sIHJ0KTsKQEAgLTM5NCw3ICs0MDEsNyBAQAogCWkyNDAwbS0+YnVzX3Jlc2V0ID0gaTI0MDBtdV9idXNfcmVzZXQ7CiAJaTI0MDBtLT5idXNfYm1fY21kX3NlbmQgPSBpMjQwMG11X2J1c19ibV9jbWRfc2VuZDsKIAlpMjQwMG0tPmJ1c19ibV93YWl0X2Zvcl9hY2sgPSBpMjQwMG11X2J1c19ibV93YWl0X2Zvcl9hY2s7Ci0JaTI0MDBtLT5idXNfZndfbmFtZSA9IEkyNDAwTVVfRldfRklMRV9OQU1FOworCWkyNDAwbS0+YnVzX2Z3X25hbWVzID0gaTI0MDBtdV9idXNfZndfbmFtZXM7CiAJaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC01OTQsNCArNjAxLDUgQEAKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIDI0MDBNIFdpTUFYIG5ldHdvcmtpbmcgZm9yIFVTQiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0ZJUk1XQVJFKEkyNDAwTVVfRldfRklMRV9OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80KTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGU0ZjlmNzQuLjhhMDgyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTUxLDYgKzE1MSwxMiBAQAogCS0tLWhlbHAtLS0KIAkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDgzODUgYW5kIDg2ODYgU0RJTyBkZXZpY2VzLgogCitjb25maWcgTElCRVJUQVNfU1BJCisJdHJpc3RhdGUgIk1hcnZlbGwgTGliZXJ0YXMgODY4NiBTUEkgODAyLjExYi9nIGNhcmRzIgorCWRlcGVuZHMgb24gTElCRVJUQVMgJiYgU1BJICYmIEdFTkVSSUNfR1BJTworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIGRldmljZXMuCisKIGNvbmZpZyBMSUJFUlRBU19ERUJVRwogCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIExpYmVydGFzIG1vZHVsZS4iCiAJZGVwZW5kcyBvbiBMSUJFUlRBUwpAQCAtMTg4LDEyNyArMTk0LDYgQEAKIAogCSAgVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHdpbGwgYmUgbmFtZWQgImFpcm8iLgogCi1jb25maWcgSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKLQlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAotCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciA4MDIuMTFiIHdpcmVsZXNzIGNhcmRzIGJhc2VkIG9uIHRoZSAiSGVybWVzIiBvcgotCSAgSW50ZXJzaWwgSEZBMzg0eCAoUHJpc20gMikgTUFDIGNvbnRyb2xsZXIuICBUaGlzIGluY2x1ZGVzIHRoZSB2YXN0Ci0JICBtYWpvcml0eSBvZiB0aGUgUENNQ0lBIDgwMi4xMWIgY2FyZHMgKHdoaWNoIGFyZSBuZWFybHkgYWxsIHJlYmFkZ2VzKQotCSAgLSBleGNlcHQgZm9yIHRoZSBDaXNjby9BaXJvbmV0IGNhcmRzLiAgQ2FyZHMgc3VwcG9ydGVkIGluY2x1ZGUgdGhlCi0JICBBcHBsZSBBaXJwb3J0IChub3QgYSBQQ01DSUEgY2FyZCksIFdhdmVsYW5JRUVFL09yaW5vY28sCi0JICBDYWJsZXRyb24vRW50ZXJhU3lzIFJvYW1hYm91dCwgRUxTQSBBaXJMYW5jZXIsIE1FTENPIEJ1ZmZhbG8sIEF2YXlhLAotCSAgSUJNIEhpZ2ggUmF0ZSBXaXJlbGVzcywgRmFycmFsb24gU3l5bGluZSwgU2Ftc3VuZyBNYWdpY0xBTiwgTmV0Z2VhcgotCSAgTUE0MDEsIExpbmtTeXMgV1BDLTExLCBELUxpbmsgRFdMLTY1MCwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbAotCSAgSVBXMjAxMSwgYW5kIFN5bWJvbCBTcGVjdHJ1bTI0IEhpZ2ggUmF0ZSBhbW9uZ3N0IG90aGVycy4KLQotCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdGhlIGd1dHMgb2YgdGhlIGRyaXZlciwgYnV0IGluIG9yZGVyIHRvCi0JICBhY3R1YWxseSB1c2UgYSBjYXJkIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBCi0JICBIZXJtZXMgY2FyZHMsIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzIG9yIHRoZSBBcHBsZSBBaXJwb3J0IGJlbG93LgotCi0JICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IGFsc28gbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrcyA6Ci0JICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPgotCi1jb25maWcgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKLQlib29sICJDYWNoZSBIZXJtZXMgZmlybXdhcmUgb24gZHJpdmVyIGluaXRpYWxpc2F0aW9uIgotCWRlcGVuZHMgb24gSEVSTUVTCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgU2F5IFkgdG8gY2FjaGUgYW55IGZpcm13YXJlIHJlcXVpcmVkIGJ5IHRoZSBIZXJtZXMgZHJpdmVycwotCSAgb24gc3RhcnR1cC4gIFRoZSBmaXJtd2FyZSB3aWxsIHJlbWFpbiBjYWNoZWQgdW50aWwgdGhlCi0JICBkcml2ZXIgaXMgdW5sb2FkZWQuICBUaGUgY2FjaGUgdXNlcyA2NEsgb2YgUkFNLgotCi0JICBPdGhlcndpc2UgbG9hZCB0aGUgZmlybXdhcmUgZnJvbSB1c2Vyc3BhY2UgYXMgcmVxdWlyZWQuICBJbgotCSAgdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHVubG9hZGVkIGFuZCByZXN0YXJ0ZWQKLQkgIHdoZW5ldmVyIHRoZSBmaXJtd2FyZSBpcyBjaGFuZ2VkLgotCi0JICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgWS4KLQotY29uZmlnIEFQUExFX0FJUlBPUlQKLQl0cmlzdGF0ZSAiQXBwbGUgQWlycG9ydCBzdXBwb3J0IChidWlsdC1pbikiCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBIRVJNRVMKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFpcnBvcnQgODAyLjExYiB3aXJlbGVzcyBFdGhlcm5ldCBoYXJkd2FyZQotCSAgYnVpbHQgaW50byB0aGUgTWFjaW50b3NoIGlCb29rIGFuZCBvdGhlciByZWNlbnQgUG93ZXJQQy1iYXNlZAotCSAgTWFjaW50b3NoIG1hY2hpbmVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgTHVjZW50IE9yaW5vY28gY2FyZCB3aXRoIAotCSAgYSBub24tc3RhbmRhcmQgaW50ZXJmYWNlLgotCi0JICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBaXJwb3J0IEV4dHJlbWUgKDgwMi4xMWIvZykuIFVzZQotCSAgdGhlIEJDTTQzeHggZHJpdmVyIGZvciBBaXJwb3J0IEV4dHJlbWUgY2FyZHMuCi0KLWNvbmZpZyBQTFhfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQgKE5ldGdlYXIgTUEzMDEgZXRjLikiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKLQkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQotCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAotCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0Ci0JICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLiAgVGhlIE5ldGdlYXIKLQkgIE1BMzAxIGlzIHN1Y2ggYW4gYWRhcHRvci4KLQotY29uZmlnIFRNRF9IRVJNRVMKLQl0cmlzdGF0ZSAiSGVybWVzIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKLQkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuCi0KLWNvbmZpZyBOT1JURUxfSEVSTUVTCi0JdHJpc3RhdGUgIk5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXJzLCBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuCi0KLWNvbmZpZyBQQ0lfSEVSTUVTCi0JdHJpc3RhdGUgIlByaXNtIDIuNSBQQ0kgODAyLjExYiBhZGFwdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDSSBhbmQgbWluaS1QQ0kgODAyLjExYiB3aXJlbGVzcyBOSUNzIGJhc2VkIG9uCi0JICB0aGUgUHJpc20gMi41IGNoaXBzZXQuICBUaGVzZSBhcmUgdHJ1ZSBQQ0kgY2FyZHMsIG5vdCB0aGUgODAyLjExYgotCSAgUENNQ0lBIGNhcmRzIGJ1bmRsZWQgd2l0aCBQQ0k8LT5QQ01DSUEgYWRhcHRvcnMgd2hpY2ggYXJlIGFsc28KLQkgIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1aWx0LWluIHdpcmVsZXNzIGFkYXB0b3JzIGluIGxhcHRvcHMgYXJlIG9mCi0JICB0aGlzIHZhcmlldHkuCi0KLWNvbmZpZyBQQ01DSUFfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBQQ01DSUEgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcyBhZGFwdG9ycywgc3VjaAotCSAgYXMgdGhlIEx1Y2VudCBXYXZlbGFuSUVFRS9Pcmlub2NvIGNhcmRzIGFuZCB0aGVpciBPRU0gKENhYmxldHJvbi8KLQkgIEVudGVyYVN5cyBSb2FtQWJvdXQgODAyLjExLCBFTFNBIEFpcmxhbmNlciwgTWVsY28gQnVmZmFsbyBhbmQKLQkgIG90aGVycykuICBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcwotCSAgc3VjaCBhcyB0aGUgTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiAgSXQgc2hvdWxkIGFsc28KLQkgIHdvcmsgb24gU3ltYm9sIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KLQotCSAgWW91IHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrczoKLQkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgotCi1jb25maWcgUENNQ0lBX1NQRUNUUlVNCi0JdHJpc3RhdGUgIlN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgUENNQ0lBIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKLQktLS1oZWxwLS0tCi0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbAotCSAgZmlybXdhcmUsIHN1Y2ggYXMgU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaAotCSAgY2FyZHMgYnkgU29ja2V0IENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCi0KLQkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGRvd25sb2FkIG9uIHN0YXJ0dXAuICBVdGlsaXRpZXMKLQkgIGZvciBkb3dubG9hZGluZyBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAotCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8+Ci0KIGNvbmZpZyBBVE1FTAogICAgICAgdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTB4IGNoaXBzZXQgIDgwMi4xMWIgc3VwcG9ydCIKICAgICAgIGRlcGVuZHMgb24gKFBDSSB8fCBQQ01DSUEpICYmIFdMQU5fODAyMTEKQEAgLTM0Myw2ICsyMjgsMTQgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgY29udGFpbmluZyB0aGUKIAkgIEF0bWVsIGF0NzZjNTAyIGFuZCBhdDc2YzUwNCBjaGlwcy4KIAorY29uZmlnIEFUNzZDNTBYX1VTQgorICAgICAgICB0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MDMvYXQ3NmM1MDUvYXQ3NmM1MDVhIFVTQiBjYXJkcyIKKyAgICAgICAgZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQgorICAgICAgICBzZWxlY3QgRldfTE9BREVSCisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBFbmFibGUgc3VwcG9ydCBmb3IgVVNCIFdpcmVsZXNzIGRldmljZXMgdXNpbmcgQXRtZWwgYXQ3NmM1MDMsCisgICAgICAgICAgYXQ3NmM1MDUgb3IgYXQ3NmM1MDVhIGNoaXBzLgorCiBjb25maWcgQUlST19DUwogCXRyaXN0YXRlICJDaXNjby9BaXJvbmV0IDM0WC8zNVgvNDUwMC80ODAwIFBDTUNJQSBjYXJkcyIKIAlkZXBlbmRzIG9uIFBDTUNJQSAmJiAoQlJPS0VOIHx8ICFNMzJSKSAmJiBXTEFOXzgwMjExCkBAIC01ODAsOSArNDczLDE5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNV0w4SworCXRyaXN0YXRlICJNYXJ2ZWxsIDg4Vzh4eHggUENJL1BDSWUgV2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFBDSSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSB3aXJlbGVzcyBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbXdsOGsuICBJZiB1bnN1cmUsIHNheSBOLgorCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9LY29uZmlnIgpAQCAtNTkwLDUgKzQ5Myw2IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGFjNTkwZTFjLi41MGU3ZmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtMjQsNiArMjQsOCBAQAogb2JqLSQoQ09ORklHX1BDSV9BVE1FTCkgICAgICAgICArPSBhdG1lbF9wY2kubyAKIG9iai0kKENPTkZJR19QQ01DSUFfQVRNRUwpICAgICAgKz0gYXRtZWxfY3MubwogCitvYmotJChDT05GSUdfQVQ3NkM1MFhfVVNCKSAgICAgICs9IGF0NzZjNTB4LXVzYi5vCisKIG9iai0kKENPTkZJR19QUklTTTU0KQkJKz0gcHJpc201NC8KIAogb2JqLSQoQ09ORklHX0hPU1RBUCkJCSs9IGhvc3RhcC8KQEAgLTQ2LDYgKzQ4LDggQEAKIAogb2JqLSQoQ09ORklHX0FETTgyMTEpCSs9IGFkbTgyMTEubwogCitvYmotJChDT05GSUdfTVdMOEspCSs9IG13bDhrLm8KKwogb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bHdpZmkvCiBvYmotJChDT05GSUdfUlQyWDAwKQkrPSBydDJ4MDAvCiAKQEAgLTUzLDUgKzU3LDYgQEAKIAogb2JqLSQoQ09ORklHX0FUSDVLKQkrPSBhdGg1ay8KIG9iai0kKENPTkZJR19BVEg5SykJKz0gYXRoOWsvCitvYmotJChDT05GSUdfQVI5MTcwX1VTQikJKz0gYXI5MTcwLwogCiBvYmotJChDT05GSUdfTUFDODAyMTFfSFdTSU0pCSs9IG1hYzgwMjExX2h3c2ltLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBmYzQzMjJjLi43ZTgwYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC00OTYsMzkgKzQ5Niw0MSBAQAogICogc28gYWxsIHJpZCBhY2Nlc3Mgc2hvdWxkIHVzZSB0aGUgcmVhZC93cml0ZVhYWFJpZCByb3V0aW5lcy4KICAqLwogCi0vKiBUaGlzIGlzIHJlZHVuZGFudCBmb3IgeDg2IGFyY2hzLCBidXQgaXQgc2VlbXMgbmVjZXNzYXJ5IGZvciBBUk0gKi8KLSNwcmFnbWEgcGFjaygxKQotCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW1lIGZyb20gYW4gZW1haWwgc2VudCB0byBtZSBmcm9tIGFuIGVuZ2luZWVyIGF0CiAgICBhaXJvbmV0IGZvciBpbmNsdXNpb24gaW50byB0aGlzIGRyaXZlciAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgV2VwS2V5UmlkIFdlcEtleVJpZDsKK3N0cnVjdCBXZXBLZXlSaWQgewogCV9fbGUxNiBsZW47CiAJX19sZTE2IGtpbmRleDsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBrbGVuOwogCXU4IGtleVsxNl07Ci19IFdlcEtleVJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBmcm9tIHRoZSBBaXJvbmV0J3MgUEM0NTAwIERldmVsb3BlcnMgTWFudWFsICovCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkIFNzaWQ7CitzdHJ1Y3QgU3NpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBzc2lkWzMyXTsKLX0gU3NpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkUmlkIFNzaWRSaWQ7CitzdHJ1Y3QgU3NpZFJpZCB7CiAJX19sZTE2IGxlbjsKIAlTc2lkIHNzaWRzWzNdOwotfSBTc2lkUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IE1vZHVsYXRpb25SaWQgTW9kdWxhdGlvblJpZDsKK3N0cnVjdCBNb2R1bGF0aW9uUmlkIHsKICAgICAgICAgX19sZTE2IGxlbjsKICAgICAgICAgX19sZTE2IG1vZHVsYXRpb247CiAjZGVmaW5lIE1PRF9ERUZBVUxUIGNwdV90b19sZTE2KDApCiAjZGVmaW5lIE1PRF9DQ0sgY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgTU9EX01PSyBjcHVfdG9fbGUxNigyKQotfSBNb2R1bGF0aW9uUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IENvbmZpZ1JpZCBDb25maWdSaWQ7CitzdHJ1Y3QgQ29uZmlnUmlkIHsKIAlfX2xlMTYgbGVuOyAvKiBzaXplb2YoQ29uZmlnUmlkKSAqLwogCV9fbGUxNiBvcG1vZGU7IC8qIG9wZXJhdGluZyBtb2RlICovCiAjZGVmaW5lIE1PREVfU1RBX0lCU1MgY3B1X3RvX2xlMTYoMCkKQEAgLTY0OSw5ICs2NTEsMTAgQEAKICNkZWZpbmUgTUFHSUNfU1RBWV9JTl9DQU0gKDE8PDEwKQogCXU4IG1hZ2ljQ29udHJvbDsKIAlfX2xlMTYgYXV0b1dha2U7Ci19IENvbmZpZ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0dXNSaWQgU3RhdHVzUmlkOworc3RydWN0IFN0YXR1c1JpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBtb2RlOwpAQCAtNzA3LDIxICs3MTAsMjMgQEAKICNkZWZpbmUgU1RBVF9MRUFQRkFJTEVEIDkxCiAjZGVmaW5lIFNUQVRfTEVBUFRJTUVET1VUIDkyCiAjZGVmaW5lIFNUQVRfTEVBUENPTVBMRVRFIDkzCi19IFN0YXR1c1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0c1JpZCBTdGF0c1JpZDsKK3N0cnVjdCBTdGF0c1JpZCB7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgc3BhY2VyOwogCV9fbGUzMiB2YWxzWzEwMF07Ci19IFN0YXRzUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLQotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQVBMaXN0UmlkIEFQTGlzdFJpZDsKK3N0cnVjdCBBUExpc3RSaWQgewogCV9fbGUxNiBsZW47CiAJdTggYXBbNF1bRVRIX0FMRU5dOwotfSBBUExpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQ2FwYWJpbGl0eVJpZCBDYXBhYmlsaXR5UmlkOworc3RydWN0IENhcGFiaWxpdHlSaWQgewogCV9fbGUxNiBsZW47CiAJY2hhciBvdWlbM107CiAJY2hhciB6ZXJvOwpAQCAtNzQ4LDE3ICs3NTMsMTggQEAKIAlfX2xlMTYgYm9vdEJsb2NrVmVyOwogCV9fbGUxNiByZXF1aXJlZEhhcmQ7CiAJX19sZTE2IGV4dFNvZnRDYXA7Ci19IENhcGFiaWxpdHlSaWQ7Ci0KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQlNTTGlzdFJpZEV4dHJhIEJTU0xpc3RSaWRFeHRyYTsKK3N0cnVjdCBCU1NMaXN0UmlkRXh0cmEgewogICBfX2xlMTYgdW5rbm93bls0XTsKICAgdTggZml4ZWRbMTJdOyAvKiBXTEFOIG1hbmFnZW1lbnQgZnJhbWUgKi8KICAgdTggaWVwWzYyNF07Ci19IEJTU0xpc3RSaWRFeHRyYTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBCU1NMaXN0UmlkIEJTU0xpc3RSaWQ7CitzdHJ1Y3QgQlNTTGlzdFJpZCB7CiAgIF9fbGUxNiBsZW47CiAgIF9fbGUxNiBpbmRleDsgLyogRmlyc3QgaXMgMCBhbmQgMHhmZmZmIG1lYW5zIGVuZCBvZiBsaXN0ICovCiAjZGVmaW5lIFJBRElPX0ZIIDEgLyogRnJlcXVlbmN5IGhvcHBpbmcgcmFkaW8gdHlwZSAqLwpAQCAtNzg5LDMzICs3OTUsMzcgQEAKIAogICAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwogICBCU1NMaXN0UmlkRXh0cmEgZXh0cmE7Ci19IEJTU0xpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBCU1NMaXN0UmlkIGJzczsKICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfSBCU1NMaXN0RWxlbWVudDsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaUVudHJ5IHRkc1Jzc2lFbnRyeTsKK3N0cnVjdCB0ZHNSc3NpRW50cnkgewogICB1OCByc3NpcGN0OwogICB1OCByc3NpZEJtOwotfSB0ZHNSc3NpRW50cnk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaVJpZCB0ZHNSc3NpUmlkOworc3RydWN0IHRkc1Jzc2lSaWQgewogICB1MTYgbGVuOwogICB0ZHNSc3NpRW50cnkgeFsyNTZdOwotfSB0ZHNSc3NpUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1MTYgbGVuOwotCXUxNiBzdGF0ZTsKLQl1MTYgbXVsdGljYXN0VmFsaWQ7Cit0eXBlZGVmIHN0cnVjdCBNSUNSaWQgTUlDUmlkOworc3RydWN0IE1JQ1JpZCB7CisJX19sZTE2IGxlbjsKKwlfX2xlMTYgc3RhdGU7CisJX19sZTE2IG11bHRpY2FzdFZhbGlkOwogCXU4ICBtdWx0aWNhc3RbMTZdOwotCXUxNiB1bmljYXN0VmFsaWQ7CisJX19sZTE2IHVuaWNhc3RWYWxpZDsKIAl1OCAgdW5pY2FzdFsxNl07Ci19IE1JQ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBNSUNCdWZmZXIgTUlDQnVmZmVyOworc3RydWN0IE1JQ0J1ZmZlciB7CiAJX19iZTE2IHR5cGVsZW47CiAKIAl1bmlvbiB7CkBAIC04MzAsMTUgKzg0MCwxMyBAQAogCX0gdTsKIAlfX2JlMzIgbWljOwogCV9fYmUzMiBzZXE7Ci19IE1JQ0J1ZmZlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTggZGFbRVRIX0FMRU5dOwogCXU4IHNhW0VUSF9BTEVOXTsKIH0gZXRoZXJIZWFkOwogCi0jcHJhZ21hIHBhY2soKQotCiAjZGVmaW5lIFRYQ1RMX1RYT0sgKDE8PDEpIC8qIHJlcG9ydCBpZiB0eCBpcyBvayAqLwogI2RlZmluZSBUWENUTF9UWEVYICgxPDwyKSAvKiByZXBvcnQgaWYgdHggZmFpbHMgKi8KICNkZWZpbmUgVFhDVExfODAyXzMgKDA8PDMpIC8qIDgwMi4zIHBhY2tldCAqLwpAQCAtOTgxLDYgKzk4OSwxNCBAQAogCWRtYV9hZGRyX3QgaG9zdF9hZGRyOwogfSBUeEZpZDsKIAorc3RydWN0IHJ4X2hkciB7CisJX19sZTE2IHN0YXR1cywgbGVuOworCXU4IHJzc2lbMl07CisJdTggcmF0ZTsKKwl1OCBmcmVxOworCV9fbGUxNiB0bXBbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCAgY3RsOiAxNTsKIAl1bnNpZ25lZCBpbnQgIHJkeTogMTsKQEAgLTEwNzAsMTAgKzEwODYsNiBAQAogCX0KIH07CiAKLS8vIEZyZXF1ZW5jeSBsaXN0IChtYXAgY2hhbm5lbHMgdG8gZnJlcXVlbmNpZXMpCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogLy8gQSBmZXcgZGV0YWlscyBuZWVkZWQgZm9yIFdFUCAoV2lyZWxlc3MgRXF1aXZhbGVudCBQcml2YWN5KQogI2RlZmluZSBNQVhfS0VZX1NJWkUgMTMJCQkvLyAxMjggKD8pIGJpdHMKICNkZWZpbmUgTUlOX0tFWV9TSVpFICA1CQkJLy8gNDAgYml0cyBSQzQgLSBXRVAKQEAgLTEwODIsMTIgKzEwOTQsNiBAQAogCXU4CWtleVsxNl07CS8qIDQwLWJpdCBhbmQgMTA0LWJpdCBrZXlzICovCiB9IHdlcF9rZXlfdDsKIAotLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBJV19FTkNPREVfTk9LRVkKLSNkZWZpbmUgSVdfRU5DT0RFX05PS0VZICAgICAgICAgMHgwODAwICAvKiBLZXkgaXMgd3JpdGUgb25seSwgc28gbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSVdfRU5DT0RFX01PREUgIChJV19FTkNPREVfRElTQUJMRUQgfCBJV19FTkNPREVfUkVTVFJJQ1RFRCB8IElXX0VOQ09ERV9PUEVOKQotI2VuZGlmIC8qIElXX0VOQ09ERV9OT0tFWSAqLwotCiAvKiBMaXN0IG9mIFdpcmVsZXNzIEhhbmRsZXJzIChuZXcgQVBJKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglhaXJvX2hhbmRsZXJfZGVmOwogCkBAIC0xMTU1LDcgKzExNjEsNyBAQAogCSAgIHVzZSB0aGUgaGlnaCBiaXQgdG8gbWFyayB3aGV0aGVyIGl0IGlzIGluIHVzZS4gKi8KICNkZWZpbmUgTUFYX0ZJRFMgNgogI2RlZmluZSBNUElfTUFYX0ZJRFMgMQotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOwogCUNvbmZpZ1JpZCBjb25maWc7CiAJY2hhciBrZXlpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCiAJY2hhciBkZWZpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCkBAIC0xMjI5LDYgKzEyMzUsOSBAQAogI2RlZmluZQlQQ0lfU0hBUkVEX0xFTgkJMipNUElfTUFYX0ZJRFMqUEtUU0laRStSSURTSVpFCiAJY2hhcgkJCXByb2NfbmFtZVtJRk5BTVNJWl07CiAKKwlpbnQJCQl3ZXBfY2FwYWJsZTsKKwlpbnQJCQltYXhfd2VwX2lkeDsKKwogCS8qIFdQQS1yZWxhdGVkIHN0dWZmICovCiAJdW5zaWduZWQgaW50IGJzc0xpc3RGaXJzdDsKIAl1bnNpZ25lZCBpbnQgYnNzTGlzdE5leHQ7CkBAIC0xMjg3LDYgKzEyOTYsMjkgQEAKIHN0YXRpYyB2b2lkIGVtbWgzMl9maW5hbChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggZGlnZXN0WzRdKTsKIHN0YXRpYyBpbnQgZmxhc2hwY2hhcihzdHJ1Y3QgYWlyb19pbmZvICphaSxpbnQgYnl0ZSxpbnQgZHdlbGx0aW1lKTsKIAorc3RhdGljIHZvaWQgYWdlX21pY19jb250ZXh0KG1pY2NudHggKmN1ciwgbWljY250eCAqb2xkLCB1OCAqa2V5LCBpbnQga2V5X2xlbiwKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCS8qIElmIHRoZSBjdXJyZW50IE1JQyBjb250ZXh0IGlzIHZhbGlkIGFuZCBpdHMga2V5IGlzIHRoZSBzYW1lIGFzCisJICogdGhlIE1JQyByZWdpc3RlciwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChjdXItPnZhbGlkICYmIChtZW1jbXAoY3VyLT5rZXksIGtleSwga2V5X2xlbikgPT0gMCkpCisJCXJldHVybjsKKworCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCisJbWVtY3B5KG9sZCwgY3VyLCBzaXplb2YoKmN1cikpOworCisJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLworCW1lbWNweShjdXItPmtleSwga2V5LCBrZXlfbGVuKTsKKwljdXItPndpbmRvdyAgPSAzMzsgLyogV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZSAqLworCWN1ci0+cnggICAgICA9IDA7ICAvKiBSeCBTZXF1ZW5jZSBudW1iZXJzICovCisJY3VyLT50eCAgICAgID0gMDsgIC8qIFR4IHNlcXVlbmNlIG51bWJlcnMgKi8KKwljdXItPnZhbGlkICAgPSAxOyAgLyogS2V5IGlzIG5vdyB2YWxpZCAqLworCisJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KKwllbW1oMzJfc2V0c2VlZCgmY3VyLT5zZWVkLCBrZXksIGtleV9sZW4sIHRmbSk7Cit9CisKIC8qIG1pY2luaXQgLSBJbml0aWFsaXplIG1pYyBzZWVkICovCiAKIHN0YXRpYyB2b2lkIG1pY2luaXQoc3RydWN0IGFpcm9faW5mbyAqYWkpCkBAIC0xMjk3LDQ5ICsxMzI5LDI2IEBACiAJUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9NSUMsICZtaWNfcmlkLCBzaXplb2YobWljX3JpZCksIDApOwogCXVwKCZhaS0+c2VtKTsKIAotCWFpLT5taWNzdGF0cy5lbmFibGVkID0gKG1pY19yaWQuc3RhdGUgJiAweDAwRkYpID8gMSA6IDA7Ci0KLQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJLyogS2V5IG11c3QgYmUgdmFsaWQgYW5kIGRpZmZlcmVudCAqLwotCQlpZiAobWljX3JpZC5tdWx0aWNhc3RWYWxpZCAmJiAoIWFpLT5tb2RbMF0ubUN0eC52YWxpZCB8fAotCQkgICAgKG1lbWNtcCAoYWktPm1vZFswXS5tQ3R4LmtleSwgbWljX3JpZC5tdWx0aWNhc3QsCi0JCQkgICAgIHNpemVvZihhaS0+bW9kWzBdLm1DdHgua2V5KSkgIT0gMCkpKSB7Ci0JCQkvKiBBZ2UgY3VycmVudCBtaWMgQ29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzFdLm1DdHgsJmFpLT5tb2RbMF0ubUN0eCxzaXplb2YobWljY250eCkpOwotCQkJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzBdLm1DdHgua2V5LG1pY19yaWQubXVsdGljYXN0LHNpemVvZihtaWNfcmlkLm11bHRpY2FzdCkpOwotCQkJYWktPm1vZFswXS5tQ3R4LndpbmRvdyAgPSAzMzsgLy9XaW5kb3cgYWx3YXlzIHBvaW50cyB0byB0aGUgbWlkZGxlCi0JCQlhaS0+bW9kWzBdLm1DdHgucnggICAgICA9IDA7ICAvL1J4IFNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0ubUN0eC50eCAgICAgID0gMDsgIC8vVHggc2VxdWVuY2UgbnVtYmVycwotCQkJYWktPm1vZFswXS5tQ3R4LnZhbGlkICAgPSAxOyAgLy9LZXkgaXMgbm93IHZhbGlkCi0gIAotCQkJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KLQkJCWVtbWgzMl9zZXRzZWVkKCZhaS0+bW9kWzBdLm1DdHguc2VlZCxtaWNfcmlkLm11bHRpY2FzdCxzaXplb2YobWljX3JpZC5tdWx0aWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCi0JCS8qIEtleSBtdXN0IGJlIHZhbGlkIGFuZCBkaWZmZXJlbnQgKi8KLQkJaWYgKG1pY19yaWQudW5pY2FzdFZhbGlkICYmICghYWktPm1vZFswXS51Q3R4LnZhbGlkIHx8IAotCQkgICAgKG1lbWNtcChhaS0+bW9kWzBdLnVDdHgua2V5LCBtaWNfcmlkLnVuaWNhc3QsCi0JCQkgICAgc2l6ZW9mKGFpLT5tb2RbMF0udUN0eC5rZXkpKSAhPSAwKSkpIHsKLQkJCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMV0udUN0eCwmYWktPm1vZFswXS51Q3R4LHNpemVvZihtaWNjbnR4KSk7Ci0JCQkvKiBJbml0aWFsaXplIG5ldyBjb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMF0udUN0eC5rZXksbWljX3JpZC51bmljYXN0LHNpemVvZihtaWNfcmlkLnVuaWNhc3QpKTsKLQkKLQkJCWFpLT5tb2RbMF0udUN0eC53aW5kb3cgID0gMzM7IC8vV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZQotCQkJYWktPm1vZFswXS51Q3R4LnJ4ICAgICAgPSAwOyAgLy9SeCBTZXF1ZW5jZSBudW1iZXJzCi0JCQlhaS0+bW9kWzBdLnVDdHgudHggICAgICA9IDA7ICAvL1R4IHNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0udUN0eC52YWxpZCAgID0gMTsgIC8vS2V5IGlzIG5vdyB2YWxpZAotCQotCQkJLy9HaXZlIGtleSB0byBtaWMgc2VlZAotCQkJZW1taDMyX3NldHNlZWQoJmFpLT5tb2RbMF0udUN0eC5zZWVkLCBtaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCX0gZWxzZSB7Ci0gICAgICAvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwgdXBkYXRlCi0gICAgICAgKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSBrZXkgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgotICAgICAgICovCisJYWktPm1pY3N0YXRzLmVuYWJsZWQgPSAobGUxNl90b19jcHUobWljX3JpZC5zdGF0ZSkgJiAweDAwRkYpID8gMSA6IDA7CisJaWYgKCFhaS0+bWljc3RhdHMuZW5hYmxlZCkgeworCQkvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwKKwkJICogdXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIGtleSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCisJCSAqLwogCQlhaS0+bW9kWzBdLnVDdHgudmFsaWQgPSAwOwogCQlhaS0+bW9kWzBdLm1DdHgudmFsaWQgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKG1pY19yaWQubXVsdGljYXN0VmFsaWQpIHsKKwkJYWdlX21pY19jb250ZXh0KCZhaS0+bW9kWzBdLm1DdHgsICZhaS0+bW9kWzFdLm1DdHgsCisJCSAgICAgICAgICAgICAgICBtaWNfcmlkLm11bHRpY2FzdCwgc2l6ZW9mKG1pY19yaWQubXVsdGljYXN0KSwKKwkJICAgICAgICAgICAgICAgIGFpLT50Zm0pOworCX0KKworCWlmIChtaWNfcmlkLnVuaWNhc3RWYWxpZCkgeworCQlhZ2VfbWljX2NvbnRleHQoJmFpLT5tb2RbMF0udUN0eCwgJmFpLT5tb2RbMV0udUN0eCwKKwkJCQltaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLAorCQkJCWFpLT50Zm0pOwogCX0KIH0KIApAQCAtMjYzNywxNyArMjY0NiwyMSBAQAogCS5wYXJzZSA9IHdsbF9oZWFkZXJfcGFyc2UsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm8xMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYWlyb19vcGVuLAorCS5uZG9fc3RvcCAJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gYWlyb19zdGFydF94bWl0MTEsCisJLm5kb19nZXRfc3RhdHMgCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCB3aWZpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFpcm8xMV9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZhaXJvX2hlYWRlcl9vcHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYWlyb19zdGFydF94bWl0MTE7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmYWlyb19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYWlyb19zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5kb19pb2N0bCA9ICZhaXJvX2lvY3RsOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmYWlyb19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9ICZhaXJvX29wZW47Ci0JZGV2LT5zdG9wID0gJmFpcm9fY2xvc2U7CiAKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgPSBFVEhfSExFTjsKQEAgLTI3MzAsMjcgKzI3NDMsMzIgQEAKIAkJCSAgICAgICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCi1zdGF0aWMgaW50IGFpcm9fdGVzdF93cGFfY2FwYWJsZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKLXsKLQlpbnQgc3RhdHVzOwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGFpcm9fc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBhaXJvX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGFpcm9fc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAotCXN0YXR1cyA9IHJlYWRDYXBhYmlsaXR5UmlkKGFpLCAmY2FwX3JpZCwgMSk7Ci0JaWYgKHN0YXR1cyAhPSBTVUNDRVNTKSByZXR1cm4gMDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXBpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFpcm9fb3BlbiwKKwkubmRvX3N0b3AJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXBpX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYWlyb19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBhaXJvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKLQkvKiBPbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTcgb3IgYmV0dGVyIGNhbiBkbyBXUEEgKi8KLQlpZiAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA+IDB4NTMwCi0JICB8fCAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA9PSAweDUzMAotCSAgICAgICYmIGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFN1YlZlcikgPj0gMTcpKSB7Ci0JCWFpcm9fcHJpbnRfaW5mbygiIiwgIldQQSBpcyBzdXBwb3J0ZWQuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIE5vIFdQQSBzdXBwb3J0ICovCi0JYWlyb19wcmludF9pbmZvKCIiLCAiV1BBIHVuc3VwcG9ydGVkIChvbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTciCi0JCSIgYW5kIGdyZWF0ZXIgc3VwcG9ydCBXUEEuICBEZXRlY3RlZCAlcykiLCBjYXBfcmlkLnByb2RWZXIpOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKl9pbml0X2Fpcm9fY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwKIAkJCQkJICAgaW50IGlzX3BjbWNpYSwgc3RydWN0IHBjaV9kZXYgKnBjaSwKQEAgLTI3NTksNiArMjc3Nyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaTsKIAlpbnQgaSwgcmM7CisJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwogCiAJLyogQ3JlYXRlIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqYWkpLCAiIiwgZXRoZXJfc2V0dXApOwpAQCAtMjc4OCwyMiArMjgwNywxNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAlhaXJvX25ldHdvcmtzX2luaXRpYWxpemUgKGFpKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKKwogCS8qIFRoZSBBaXJvLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXBpX3N0YXJ0X3htaXQ7Ci0JfSBlbHNlCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmFpcm9fc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZhaXJvX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZhaXJvX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZhaXJvX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gJmFpcm9faW9jdGw7CisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKQorCQlkZXYtPm5ldGRldl9vcHMgPSAmbXBpX25ldGRldl9vcHM7CisJZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAmYWlyb19uZXRkZXZfb3BzOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKIAlhaS0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZhaS0+c3B5X2RhdGE7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJmFpLT53aXJlbGVzc19kYXRhOwotCWRldi0+Y2hhbmdlX210dSA9ICZhaXJvX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gJmFpcm9fb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWlyb19jbG9zZTsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTI4MjgsNyArMjg0MSw3IEBACiAJfQogCiAJaWYgKHByb2JlKSB7Ci0JCWlmICggc2V0dXBfY2FyZCggYWksIGRldi0+ZGV2X2FkZHIsIDEgKSAhPSBTVUNDRVNTICkgeworCQlpZiAoc2V0dXBfY2FyZChhaSwgZGV2LT5kZXZfYWRkciwgMSkgIT0gU1VDQ0VTUykgewogCQkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiTUFDIGNvdWxkIG5vdCBiZSBlbmFibGVkIiApOwogCQkJcmMgPSAtRUlPOwogCQkJZ290byBlcnJfb3V0X21hcDsKQEAgLTI4MzgsMTggKzI4NTEsNiBAQAogCQlzZXRfYml0KEZMQUdfRkxBU0hJTkcsICZhaS0+ZmxhZ3MpOwogCX0KIAotCS8qIFRlc3QgZm9yIFdQQSBzdXBwb3J0ICovCi0JaWYgKGFpcm9fdGVzdF93cGFfY2FwYWJsZShhaSkpIHsKLQkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKLQkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOwotCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKLQl9IGVsc2UgewotCQlhaS0+YnNzTGlzdEZpcnN0ID0gUklEX0JTU0xJU1RGSVJTVDsKLQkJYWktPmJzc0xpc3ROZXh0ID0gUklEX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKSAtIHNpemVvZihCU1NMaXN0UmlkRXh0cmEpOwotCX0KLQogCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7CkBAIC0yODYwLDYgKzI4NjEsNDAgQEAKIAlpZiAoIWFpLT53aWZpZGV2KQogCQlnb3RvIGVycl9vdXRfcmVnOwogCisJcmMgPSByZWFkQ2FwYWJpbGl0eVJpZChhaSwgJmNhcF9yaWQsIDEpOworCWlmIChyYyAhPSBTVUNDRVNTKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X3dpZmk7CisJfQorCS8qIFdFUCBjYXBhYmlsaXR5IGRpc2NvdmVyeSAqLworCWFpLT53ZXBfY2FwYWJsZSA9IChjYXBfcmlkLnNvZnRDYXAgJiBjcHVfdG9fbGUxNigweDAyKSkgPyAxIDogMDsKKwlhaS0+bWF4X3dlcF9pZHggPSAoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkpID8gMyA6IDA7CisKKwlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiRmlybXdhcmUgdmVyc2lvbiAleC4leC4lMDJ4IiwKKwkgICAgICAgICAgICAgICAgKChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4+IDgpICYgMHhGKSwKKwkgICAgICAgICAgICAgICAgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgJiAweEZGKSwKKwkgICAgICAgICAgICAgICAgbGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0U3ViVmVyKSk7CisKKwkvKiBUZXN0IGZvciBXUEEgc3VwcG9ydCAqLworCS8qIE9ubHkgZmlybXdhcmUgdmVyc2lvbnMgNS4zMC4xNyBvciBiZXR0ZXIgY2FuIGRvIFdQQSAqLworCWlmIChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4gMHg1MzAKKwkgfHwgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgPT0gMHg1MzAKKwkgICAgICAmJiBsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRTdWJWZXIpID49IDE3KSkgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSBzdXBwb3J0ZWQuIik7CisKKwkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOworCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKKwl9IGVsc2UgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSB1bnN1cHBvcnRlZCB3aXRoIGZpcm13YXJlICIKKwkJCSJ2ZXJzaW9ucyBvbGRlciB0aGFuIDUuMzAuMTcuIik7CisKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9CU1NMSVNURklSU1Q7CisJCWFpLT5ic3NMaXN0TmV4dCA9IFJJRF9CU1NMSVNUTkVYVDsKKwkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCkgLSBzaXplb2YoQlNTTGlzdFJpZEV4dHJhKTsKKwl9CisKIAlzZXRfYml0KEZMQUdfUkVHSVNURVJFRCwmYWktPmZsYWdzKTsKIAlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiTUFDIGVuYWJsZWQgJXBNIiwgZGV2LT5kZXZfYWRkcik7CiAKQEAgLTMxMjcsMzE0ICszMTYyLDM1NCBAQAogCXJldHVybiAyNDsKIH0KIAorc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfY2lzY29fbWljKHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKSkgeworCQlzZXRfYml0KEpPQl9NSUMsICZhaS0+am9icyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWktPnRocl93YWl0KTsKKwl9Cit9CisKKy8qIEFpcm8gU3RhdHVzIGNvZGVzICovCisjZGVmaW5lIFNUQVRfTk9CRUFDT04JMHg4MDAwIC8qIExvc3Mgb2Ygc3luYyAtIG1pc3NlZCBiZWFjb25zICovCisjZGVmaW5lIFNUQVRfTUFYUkVUUklFUwkweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KKyNkZWZpbmUgU1RBVF9NQVhBUkwJMHg4MDAyIC8qIExvc3Mgb2Ygc3luYyAtIGF2ZXJhZ2UgcmV0cnkgbGV2ZWwgZXhjZWVkZWQqLworI2RlZmluZSBTVEFUX0ZPUkNFTE9TUwkweDgwMDMgLyogTG9zcyBvZiBzeW5jIC0gaG9zdCByZXF1ZXN0ICovCisjZGVmaW5lIFNUQVRfVFNGU1lOQwkweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLworI2RlZmluZSBTVEFUX0RFQVVUSAkweDgxMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfRElTQVNTT0MJMHg4MjAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FTU09DX0ZBSUwJMHg4NDAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FVVEhfRkFJTAkweDAzMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfQVNTT0MJMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KKyNkZWZpbmUgU1RBVF9SRUFTU09DICAgIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KKworc3RhdGljIHZvaWQgYWlyb19wcmludF9zdGF0dXMoY29uc3QgY2hhciAqZGV2bmFtZSwgdTE2IHN0YXR1cykKK3sKKwl1OCByZWFzb24gPSBzdGF0dXMgJiAweEZGOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFNUQVRfTk9CRUFDT046CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJsaW5rIGxvc3QgKG1pc3NlZCBiZWFjb25zKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfTUFYUkVUUklFUzoKKwljYXNlIFNUQVRfTUFYQVJMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAibGluayBsb3N0IChtYXggcmV0cmllcykiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0ZPUkNFTE9TUzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAobG9jYWwgY2hvaWNlKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfVFNGU1lOQzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAoVFNGIHN5bmMgbG9zdCkiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0RFQVVUSDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImRlYXV0aGVudGljYXRlZCAocmVhc29uOiAlZCkiLCByZWFzb24pOworCQlicmVhazsKKwljYXNlIFNUQVRfRElTQVNTT0M6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJkaXNhc3NvY2lhdGVkIChyZWFzb246ICVkKSIsIHJlYXNvbik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9BU1NPQ19GQUlMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAiYXNzb2NpYXRpb24gZmFpbGVkIChyZWFzb246ICVkKSIsCisJCQkgICAgICAgcmVhc29uKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0FVVEhfRkFJTDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImF1dGhlbnRpY2F0aW9uIGZhaWxlZCAocmVhc29uOiAlZCkiLAorCQkJICAgICAgIHJlYXNvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfbGluayhzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IHNjYW5fZm9yY2Vsb3NzID0gMDsKKwl1MTYgc3RhdHVzOworCisJLyogR2V0IG5ldyBzdGF0dXMgYW5kIGFja25vd2xlZGdlIHRoZSBsaW5rIGNoYW5nZSAqLworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KElONDUwMChhaSwgTElOS1NUQVQpKTsKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfTElOSyk7CisKKwlpZiAoKHN0YXR1cyA9PSBTVEFUX0ZPUkNFTE9TUykgJiYgKGFpLT5zY2FuX3RpbWVvdXQgPiAwKSkKKwkJc2Nhbl9mb3JjZWxvc3MgPSAxOworCisJYWlyb19wcmludF9zdGF0dXMoYWktPmRldi0+bmFtZSwgc3RhdHVzKTsKKworCWlmICgoc3RhdHVzID09IFNUQVRfQVNTT0MpIHx8IChzdGF0dXMgPT0gU1RBVF9SRUFTU09DKSkgeworCQlpZiAoYXV0b193ZXApCisJCQlhaS0+ZXhwaXJlcyA9IDA7CisJCWlmIChhaS0+bGlzdF9ic3NfdGFzaykKKwkJCXdha2VfdXBfcHJvY2VzcyhhaS0+bGlzdF9ic3NfdGFzayk7CisJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYWktPmZsYWdzKTsKKwkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFpLT5mbGFncyk7CisKKwkJaWYgKGRvd25fdHJ5bG9jaygmYWktPnNlbSkgIT0gMCkgeworCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhaS0+am9icyk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFpLT50aHJfd2FpdCk7CisJCX0gZWxzZQorCQkJYWlyb19zZW5kX2V2ZW50KGFpLT5kZXYpOworCX0gZWxzZSBpZiAoIXNjYW5fZm9yY2Vsb3NzKSB7CisJCWlmIChhdXRvX3dlcCAmJiAhYWktPmV4cGlyZXMpIHsKKwkJCWFpLT5leHBpcmVzID0gUlVOX0FUKDMqSFopOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOworCQl9CisKKwkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJ1wwJywgRVRIX0FMRU4pOworCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGFpLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfcngoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJX19sZTE2IGZjLCB2LCAqYnVmZmVyLCB0bXBidWZbNF07CisJdTE2IGxlbiwgaGRybGVuID0gMCwgZ2FwLCBmaWQ7CisJc3RydWN0IHJ4X2hkciBoZHI7CisJaW50IHN1Y2Nlc3MgPSAwOworCisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCAmYWktPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKQorCQkJbXBpX3JlY2VpdmVfODAyXzExKGFpKTsKKwkJZWxzZQorCQkJbXBpX3JlY2VpdmVfODAyXzMoYWkpOworCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBSWEZJRCk7CisKKwkvKiBHZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KKwlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKSB7CisJCWJhcF9zZXR1cCAoYWksIGZpZCwgNCwgQkFQMCk7CisJCWJhcF9yZWFkIChhaSwgKF9fbGUxNiopJmhkciwgc2l6ZW9mKGhkciksIEJBUDApOworCQkvKiBCYWQgQ1JDLiBJZ25vcmUgcGFja2V0ICovCisJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCisJCQloZHIubGVuID0gMDsKKwkJaWYgKGFpLT53aWZpZGV2ID09IE5VTEwpCisJCQloZHIubGVuID0gMDsKKwl9IGVsc2UgeworCQliYXBfc2V0dXAoYWksIGZpZCwgMHgzNiwgQkFQMCk7CisJCWJhcF9yZWFkKGFpLCAmaGRyLmxlbiwgMiwgQkFQMCk7CisJfQorCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOworCisJaWYgKGxlbiA+IEFJUk9fREVGX01UVSkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQmFkIHNpemUgJWQiLCBsZW4pOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChsZW4gPT0gMCkKKwkJZ290byBkb25lOworCisJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQliYXBfcmVhZChhaSwgJmZjLCBzaXplb2YgKGZjKSwgQkFQMCk7CisJCWhkcmxlbiA9IGhlYWRlcl9sZW4oZmMpOworCX0gZWxzZQorCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIGhkcmxlbiArIDIgKyAyKTsKKwlpZiAoIXNrYikgeworCQlhaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBUaGlzIHdheSB0aGUgSVAgaGVhZGVyIGlzIGFsaWduZWQgKi8KKwlidWZmZXIgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCBsZW4gKyBoZHJsZW4pOworCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJYnVmZmVyWzBdID0gZmM7CisJCWJhcF9yZWFkKGFpLCBidWZmZXIgKyAxLCBoZHJsZW4gLSAyLCBCQVAwKTsKKwkJaWYgKGhkcmxlbiA9PSAyNCkKKwkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIDYsIEJBUDApOworCisJCWJhcF9yZWFkKGFpLCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKKwkJZ2FwID0gbGUxNl90b19jcHUodik7CisJCWlmIChnYXApIHsKKwkJCWlmIChnYXAgPD0gOCkgeworCQkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIGdhcCwgQkFQMCk7CisJCQl9IGVsc2UgeworCQkJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJnYXBsZW4gdG9vICIKKwkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKKwkJCX0KKwkJfQorCQliYXBfcmVhZChhaSwgYnVmZmVyICsgaGRybGVuLzIsIGxlbiwgQkFQMCk7CisJfSBlbHNlIHsKKwkJTUlDQnVmZmVyIG1pY2J1ZjsKKworCQliYXBfcmVhZChhaSwgYnVmZmVyLCBFVEhfQUxFTiAqIDIsIEJBUDApOworCQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopICZtaWNidWYsIHNpemVvZiAobWljYnVmKSwgQkFQMCk7CisJCQlpZiAobnRvaHMobWljYnVmLnR5cGVsZW4pID4gMHgwNURDKQorCQkJCWJhcF9zZXR1cChhaSwgZmlkLCAweDQ0LCBCQVAwKTsKKwkJCWVsc2UgeworCQkJCWlmIChsZW4gPD0gc2l6ZW9mIChtaWNidWYpKSB7CisJCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlsZW4gLT0gc2l6ZW9mKG1pY2J1Zik7CisJCQkJc2tiX3RyaW0oc2tiLCBsZW4gKyBoZHJsZW4pOworCQkJfQorCQl9CisKKwkJYmFwX3JlYWQoYWksIGJ1ZmZlciArIEVUSF9BTEVOLCBsZW4sIEJBUDApOworCQlpZiAoZGVjYXBzdWxhdGUoYWksICZtaWNidWYsIChldGhlckhlYWQqKSBidWZmZXIsIGxlbikpCisJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKKwkJZWxzZQorCQkJc3VjY2VzcyA9IDE7CisJfQorCisjaWZkZWYgV0lSRUxFU1NfU1BZCisJaWYgKHN1Y2Nlc3MgJiYgKGFpLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkpIHsKKwkJY2hhciAqc2E7CisJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKworCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KKwkJaWYgKCF0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJCXNhID0gKGNoYXIgKikgYnVmZmVyICsgNjsKKwkJCWJhcF9zZXR1cChhaSwgZmlkLCA4LCBCQVAwKTsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopIGhkci5yc3NpLCAyLCBCQVAwKTsKKwkJfSBlbHNlCisJCQlzYSA9IChjaGFyICopIGJ1ZmZlciArIDEwOworCQl3c3RhdHMucXVhbCA9IGhkci5yc3NpWzBdOworCQlpZiAoYWktPnJzc2kpCisJCQl3c3RhdHMubGV2ZWwgPSAweDEwMCAtIGFpLT5yc3NpW2hkci5yc3NpWzFdXS5yc3NpZEJtOworCQllbHNlCisJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKKwkJd3N0YXRzLm5vaXNlID0gYWktPndzdGF0cy5xdWFsLm5vaXNlOworCQl3c3RhdHMudXBkYXRlZCA9ICBJV19RVUFMX0xFVkVMX1VQREFURUQKKwkJCQl8IElXX1FVQUxfUVVBTF9VUERBVEVECisJCQkJfCBJV19RVUFMX0RCTTsKKwkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJCXdpcmVsZXNzX3NweV91cGRhdGUoYWktPmRldiwgc2EsICZ3c3RhdHMpOworCX0KKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKworZG9uZToKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCisJaWYgKHN1Y2Nlc3MpIHsKKwkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQkJc2tiLT5kZXYgPSBhaS0+d2lmaWRldjsKKwkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CisJCX0gZWxzZQorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWktPmRldik7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQluZXRpZl9yeChza2IpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfdHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBzdGF0dXMpCit7CisJaW50IGksIGxlbiA9IDAsIGluZGV4ID0gLTE7CisJdTE2IGZpZDsKKworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIC0xKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWktPmF1eF9sb2NrLCBmbGFncyk7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhaS0+dHhxKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWktPmF1eF9sb2NrLGZsYWdzKTsKKwkJCW1waV9zZW5kX3BhY2tldChhaS0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJmFpLT5mbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaS0+YXV4X2xvY2ssZmxhZ3MpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShhaS0+ZGV2KTsKKwkJfQorCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhDUFkgfCBFVl9UWEVYQykpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBUWENPTVBMRklEKTsKKworCWZvcihpID0gMDsgaSA8IE1BWF9GSURTOyBpKyspIHsKKwkJaWYgKChhaS0+Zmlkc1tpXSAmIDB4ZmZmZikgPT0gZmlkKSB7CisJCQlsZW4gPSBhaS0+Zmlkc1tpXSA+PiAxNjsKKwkJCWluZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChpbmRleCAhPSAtMSkgeworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIGluZGV4KTsKKworCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhFWEMpKTsKKworCQkvKiBTZXQgdXAgdG8gYmUgdXNlZCBhZ2FpbiAqLworCQlhaS0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOworCQlpZiAoaW5kZXggPCBNQVhfRklEUyAvIDIpIHsKKwkJCWlmICghdGVzdF9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPmRldik7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPndpZmlkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJT1VUNDUwMChhaSwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIlVuYWxsb2NhdGVkIEZJRCB3YXMgdXNlZCB0byB4bWl0Iik7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0JdTE2IHN0YXR1czsKLQl1MTYgZmlkOwotCXN0cnVjdCBhaXJvX2luZm8gKmFwcml2ID0gZGV2LT5tbF9wcml2OwotCXUxNiBzYXZlZEludGVycnVwdHMgPSAwOworCXUxNiBzdGF0dXMsIHNhdmVkSW50ZXJydXB0cyA9IDA7CisJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGhhbmRsZWQgPSAwOwogCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlmb3IgKDs7KSB7Ci0JCXN0YXR1cyA9IElONDUwMCggYXByaXYsIEVWU1RBVCApOwotCQlpZiAoICEoc3RhdHVzICYgU1RBVFVTX0lOVFMpIHx8IHN0YXR1cyA9PSAweGZmZmYgKSBicmVhazsKKwkJc3RhdHVzID0gSU40NTAwKGFpLCBFVlNUQVQpOworCQlpZiAoIShzdGF0dXMgJiBTVEFUVVNfSU5UUykgfHwgKHN0YXR1cyA9PSAweGZmZmYpKQorCQkJYnJlYWs7CiAKIAkJaGFuZGxlZCA9IDE7CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9BV0FLRSApIHsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKKwkJaWYgKHN0YXR1cyAmIEVWX0FXQUtFKSB7CisJCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfQVdBS0UpOworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0FXQUtFKTsKIAkJfQogCiAJCWlmICghc2F2ZWRJbnRlcnJ1cHRzKSB7Ci0JCQlzYXZlZEludGVycnVwdHMgPSBJTjQ1MDAoIGFwcml2LCBFVklOVEVOICk7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZJTlRFTiwgMCApOworCQkJc2F2ZWRJbnRlcnJ1cHRzID0gSU40NTAwKGFpLCBFVklOVEVOKTsKKwkJCU9VVDQ1MDAoYWksIEVWSU5URU4sIDApOwogCQl9CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9NSUMgKSB7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX01JQyApOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJc2V0X2JpdChKT0JfTUlDLCAmYXByaXYtPmpvYnMpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCX0KKwkJaWYgKHN0YXR1cyAmIEVWX01JQykgeworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX01JQyk7CisJCQlhaXJvX2hhbmRsZV9jaXNjb19taWMoYWkpOwogCQl9Ci0JCWlmICggc3RhdHVzICYgRVZfTElOSyApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQkJCWludCBzY2FuX2ZvcmNlbG9zcyA9IDA7Ci0JCQkvKiBUaGUgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQsIGlmIHlvdSB3YW50IHRvIHB1dCBhCi0JCQkgICBtb25pdG9yIGhvb2sgaW4sIGRvIGl0IGhlcmUuICAoUmVtZW1iZXIgdGhhdAotCQkJICAgaW50ZXJydXB0cyBhcmUgc3RpbGwgZGlzYWJsZWQhKQotCQkJKi8KLQkJCXUxNiBuZXdTdGF0dXMgPSBJTjQ1MDAoYXByaXYsIExJTktTVEFUKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfTElOSyk7Ci0JCQkvKiBIZXJlIGlzIHdoYXQgbmV3U3RhdHVzIG1lYW5zOiAqLwotI2RlZmluZSBOT0JFQUNPTiAweDgwMDAgLyogTG9zcyBvZiBzeW5jIC0gbWlzc2VkIGJlYWNvbnMgKi8KLSNkZWZpbmUgTUFYUkVUUklFUyAweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KLSNkZWZpbmUgTUFYQVJMIDB4ODAwMiAvKiBMb3NzIG9mIHN5bmMgLSBhdmVyYWdlIHJldHJ5IGxldmVsIGV4Y2VlZGVkKi8KLSNkZWZpbmUgRk9SQ0VMT1NTIDB4ODAwMyAvKiBMb3NzIG9mIHN5bmMgLSBob3N0IHJlcXVlc3QgKi8KLSNkZWZpbmUgVFNGU1lOQyAweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLwotI2RlZmluZSBERUFVVEggMHg4MTAwIC8qIERlYXV0aGVudGljYXRpb24gKGxvdyBieXRlIGlzIHJlYXNvbiBjb2RlKSAqLwotI2RlZmluZSBESVNBU1MgMHg4MjAwIC8qIERpc2Fzc29jaWF0aW9uIChsb3cgYnl0ZSBpcyByZWFzb24gY29kZSkgKi8KLSNkZWZpbmUgQVNTRkFJTCAweDg0MDAgLyogQXNzb2NpYXRpb24gZmFpbHVyZSAobG93IGJ5dGUgaXMgcmVhc29uCi0JCQkgIGNvZGUpICovCi0jZGVmaW5lIEFVVEhGQUlMIDB4MDMwMCAvKiBBdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb3cgYnl0ZSBpcyByZWFzb24KLQkJCSAgIGNvZGUpICovCi0jZGVmaW5lIEFTU09DSUFURUQgMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KLSNkZWZpbmUgUkVBU1NPQ0lBVEVEIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KLSNkZWZpbmUgUkNfUkVTRVJWRUQgMCAvKiBSZXNlcnZlZCByZXR1cm4gY29kZSAqLwotI2RlZmluZSBSQ19OT1JFQVNPTiAxIC8qIFVuc3BlY2lmaWVkIHJlYXNvbiAqLwotI2RlZmluZSBSQ19BVVRISU5WIDIgLyogUHJldmlvdXMgYXV0aGVudGljYXRpb24gaW52YWxpZCAqLwotI2RlZmluZSBSQ19ERUFVVEggMyAvKiBEZWF1dGhlbnRpY2F0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJICAgICAgIGxlYXZpbmcgKi8KLSNkZWZpbmUgUkNfTk9BQ1QgNCAvKiBEaXNhc3NvY2lhdGVkIGR1ZSB0byBpbmFjdGl2aXR5ICovCi0jZGVmaW5lIFJDX01BWExPQUQgNSAvKiBEaXNhc3NvY2lhdGVkIGJlY2F1c2UgQVAgaXMgdW5hYmxlIHRvIGhhbmRsZQotCQkJYWxsIGN1cnJlbnRseSBhc3NvY2lhdGVkIHN0YXRpb25zICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMiA2IC8qIENsYXNzIDIgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXV0aGVudGljYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMyA3IC8qIENsYXNzIDMgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXNzb2NpYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX1NUQVRMRUFWRSA4IC8qIERpc2Fzc29jaWF0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJCSAgbGVhdmluZyBCU1MgKi8KLSNkZWZpbmUgUkNfTk9BVVRIIDkgLyogU3RhdGlvbiByZXF1ZXN0aW5nIChSZSlBc3NvY2lhdGlvbiBpcyBub3QKLQkJICAgICAgIEF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcmVzcG9uZGluZyBzdGF0aW9uICovCi0JCQlpZiAobmV3U3RhdHVzID09IEZPUkNFTE9TUyAmJiBhcHJpdi0+c2Nhbl90aW1lb3V0ID4gMCkKLQkJCQlzY2FuX2ZvcmNlbG9zcyA9IDE7Ci0JCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCB8fCBuZXdTdGF0dXMgPT0gUkVBU1NPQ0lBVEVEKSB7Ci0JCQkJaWYgKGF1dG9fd2VwKQotCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IDA7Ci0JCQkJaWYgKGFwcml2LT5saXN0X2Jzc190YXNrKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3MoYXByaXYtPmxpc3RfYnNzX3Rhc2spOwotCQkJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYXByaXYtPmZsYWdzKTsKLQkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX01VTFRJLCAmYXByaXYtPmZsYWdzKTsKIAotCQkJCWlmIChkb3duX3RyeWxvY2soJmFwcml2LT5zZW0pICE9IDApIHsKLQkJCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhcHJpdi0+am9icyk7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9IGVsc2UKLQkJCQkJYWlyb19zZW5kX2V2ZW50KGRldik7Ci0JCQl9IGVsc2UgaWYgKCFzY2FuX2ZvcmNlbG9zcykgewotCQkJCWlmIChhdXRvX3dlcCAmJiAhYXByaXYtPmV4cGlyZXMpIHsKLQkJCQkJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoMypIWik7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9Ci0KLQkJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKLQkJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LE5VTEwpOwotCQkJfQorCQlpZiAoc3RhdHVzICYgRVZfTElOSykgeworCQkJLyogTGluayBzdGF0dXMgY2hhbmdlZCAqLworCQkJYWlyb19oYW5kbGVfbGluayhhaSk7CiAJCX0KIAogCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlY2VpdmUgKi8KLQkJaWYgKCBzdGF0dXMgJiBFVl9SWCAgKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQkJCV9fbGUxNiBmYywgdjsKLQkJCXUxNiBsZW4sIGhkcmxlbiA9IDA7Ci0jcHJhZ21hIHBhY2soMSkKLQkJCXN0cnVjdCB7Ci0JCQkJX19sZTE2IHN0YXR1cywgbGVuOwotCQkJCXU4IHJzc2lbMl07Ci0JCQkJdTggcmF0ZTsKLQkJCQl1OCBmcmVxOwotCQkJCV9fbGUxNiB0bXBbNF07Ci0JCQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCi0JCQl1MTYgZ2FwOwotCQkJX19sZTE2IHRtcGJ1Zls0XTsKLQkJCV9fbGUxNiAqYnVmZmVyOwotCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQltcGlfcmVjZWl2ZV84MDJfMTEoYXByaXYpOwotCQkJCWVsc2UKLQkJCQkJbXBpX3JlY2VpdmVfODAyXzMoYXByaXYpOwotCQkJCU9VVDQ1MDAoYXByaXYsIEVWQUNLLCBFVl9SWCk7Ci0JCQkJZ290byBleGl0cng7Ci0JCQl9Ci0KLQkJCWZpZCA9IElONDUwMCggYXByaXYsIFJYRklEICk7Ci0KLQkJCS8qIEdldCB0aGUgcGFja2V0IGxlbmd0aCAqLwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJhcF9zZXR1cCAoYXByaXYsIGZpZCwgNCwgQkFQMCk7Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCAoX19sZTE2KikmaGRyLCBzaXplb2YoaGRyKSwgQkFQMCk7Ci0JCQkJLyogQmFkIENSQy4gSWdub3JlIHBhY2tldCAqLwotCQkJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCi0JCQkJCWhkci5sZW4gPSAwOwotCQkJCWlmIChhcHJpdi0+d2lmaWRldiA9PSBOVUxMKQotCQkJCQloZHIubGVuID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJYmFwX3NldHVwIChhcHJpdiwgZmlkLCAweDM2LCBCQVAwKTsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZoZHIubGVuLCAyLCBCQVAwKTsKLQkJCX0KLQkJCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOwotCi0JCQlpZiAobGVuID4gQUlST19ERUZfTVRVKSB7Ci0JCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgIkJhZCBzaXplICVkIiwgbGVuKTsKLQkJCQlnb3RvIGJhZHJ4OwotCQkJfQotCQkJaWYgKGxlbiA9PSAwKQotCQkJCWdvdG8gYmFkcng7Ci0KLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZmYywgc2l6ZW9mKGZjKSwgQkFQMCk7Ci0JCQkJaGRybGVuID0gaGVhZGVyX2xlbihmYyk7Ci0JCQl9IGVsc2UKLQkJCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IoIGxlbiArIGhkcmxlbiArIDIgKyAyICk7Ci0JCQlpZiAoICFza2IgKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZ290byBiYWRyeDsKLQkJCX0KLQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIFRoaXMgd2F5IHRoZSBJUCBoZWFkZXIgaXMgYWxpZ25lZCAqLwotCQkJYnVmZmVyID0gKF9fbGUxNiopc2tiX3B1dCAoc2tiLCBsZW4gKyBoZHJsZW4pOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJ1ZmZlclswXSA9IGZjOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyICsgMSwgaGRybGVuIC0gMiwgQkFQMCk7Ci0JCQkJaWYgKGhkcmxlbiA9PSAyNCkKLQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIDYsIEJBUDApOwotCi0JCQkJYmFwX3JlYWQgKGFwcml2LCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKLQkJCQlnYXAgPSBsZTE2X3RvX2NwdSh2KTsKLQkJCQlpZiAoZ2FwKSB7Ci0JCQkJCWlmIChnYXAgPD0gOCkgewotCQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIGdhcCwgQkFQMCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiZ2FwbGVuIHRvbyAiCi0JCQkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKLQkJCQkJfQotCQkJCX0KLQkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciArIGhkcmxlbi8yLCBsZW4sIEJBUDApOwotCQkJfSBlbHNlIHsKLQkJCQlNSUNCdWZmZXIgbWljYnVmOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyLCBFVEhfQUxFTioyLCBCQVAwKTsKLQkJCQlpZiAoYXByaXYtPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJCQkJYmFwX3JlYWQgKGFwcml2LChfX2xlMTYqKSZtaWNidWYsc2l6ZW9mKG1pY2J1ZiksQkFQMCk7Ci0JCQkJCWlmIChudG9ocyhtaWNidWYudHlwZWxlbikgPiAweDA1REMpCi0JCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDB4NDQsIEJBUDApOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChsZW4gPD0gc2l6ZW9mKG1pY2J1ZikpCi0JCQkJCQkJZ290byBiYWRtaWM7Ci0KLQkJCQkJCWxlbiAtPSBzaXplb2YobWljYnVmKTsKLQkJCQkJCXNrYl90cmltIChza2IsIGxlbiArIGhkcmxlbik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYmFwX3JlYWQoYXByaXYsYnVmZmVyK0VUSF9BTEVOLGxlbixCQVAwKTsKLQkJCQlpZiAoZGVjYXBzdWxhdGUoYXByaXYsJm1pY2J1ZiwoZXRoZXJIZWFkKilidWZmZXIsbGVuKSkgewotYmFkbWljOgotCQkJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKLWJhZHJ4OgotCQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQkJCQkJZ290byBleGl0cng7Ci0JCQkJfQotCQkJfQotI2lmZGVmIFdJUkVMRVNTX1NQWQotCQkJaWYgKGFwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgewotCQkJCWNoYXIgKnNhOwotCQkJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQkJCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KLQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCQlzYSA9IChjaGFyKilidWZmZXIgKyA2OwotCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDgsIEJBUDApOwotCQkJCQliYXBfcmVhZCAoYXByaXYsIChfX2xlMTYqKWhkci5yc3NpLCAyLCBCQVAwKTsKLQkJCQl9IGVsc2UKLQkJCQkJc2EgPSAoY2hhciopYnVmZmVyICsgMTA7Ci0JCQkJd3N0YXRzLnF1YWwgPSBoZHIucnNzaVswXTsKLQkJCQlpZiAoYXByaXYtPnJzc2kpCi0JCQkJCXdzdGF0cy5sZXZlbCA9IDB4MTAwIC0gYXByaXYtPnJzc2lbaGRyLnJzc2lbMV1dLnJzc2lkQm07Ci0JCQkJZWxzZQotCQkJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKLQkJCQl3c3RhdHMubm9pc2UgPSBhcHJpdi0+d3N0YXRzLnF1YWwubm9pc2U7Ci0JCQkJd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCQl8IElXX1FVQUxfREJNOwotCQkJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCQkJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBzYSwgJndzdGF0cyk7Ci0JCQl9Ci0jZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCi0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCQkJc2tiLT5kZXYgPSBhcHJpdi0+d2lmaWRldjsKLQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwotCQkJfSBlbHNlCi0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCi0JCQluZXRpZl9yeCggc2tiICk7Ci0JCX0KLWV4aXRyeDoKKwkJaWYgKHN0YXR1cyAmIEVWX1JYKQorCQkJYWlyb19oYW5kbGVfcngoYWkpOwogCiAJCS8qIENoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwotCQlpZiAoICBzdGF0dXMgJiAoIEVWX1RYfEVWX1RYQ1BZfEVWX1RYRVhDICkgKSB7Ci0JCQlpbnQgaTsKLQkJCWludCBsZW4gPSAwOwotCQkJaW50IGluZGV4ID0gLTE7CisJCWlmIChzdGF0dXMgJiAoRVZfVFggfCBFVl9UWENQWSB8IEVWX1RYRVhDKSkKKwkJCWFpcm9faGFuZGxlX3R4KGFpLCBzdGF0dXMpOwogCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIC0xKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXByaXYtPmF1eF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFwcml2LT50eHEpKSB7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwcml2LT5hdXhfbG9jayxmbGFncyk7Ci0JCQkJCW1waV9zZW5kX3BhY2tldCAoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQljbGVhcl9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhcHJpdi0+ZmxhZ3MpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcHJpdi0+YXV4X2xvY2ssZmxhZ3MpOwotCQkJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCQkJCX0KLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssCi0JCQkJCXN0YXR1cyAmIChFVl9UWHxFVl9UWENQWXxFVl9UWEVYQykpOwotCQkJCWdvdG8gZXhpdHR4OwotCQkJfQotCi0JCQlmaWQgPSBJTjQ1MDAoYXByaXYsIFRYQ09NUExGSUQpOwotCi0JCQlmb3IoIGkgPSAwOyBpIDwgTUFYX0ZJRFM7IGkrKyApIHsKLQkJCQlpZiAoICggYXByaXYtPmZpZHNbaV0gJiAweGZmZmYgKSA9PSBmaWQgKSB7Ci0JCQkJCWxlbiA9IGFwcml2LT5maWRzW2ldID4+IDE2OwotCQkJCQlpbmRleCA9IGk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIGluZGV4KTsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYRVhDKSk7Ci0JCQkJLyogU2V0IHVwIHRvIGJlIHVzZWQgYWdhaW4gKi8KLQkJCQlhcHJpdi0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOwotCQkJCWlmIChpbmRleCA8IE1BWF9GSURTIC8gMikgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlULCAmYXByaXYtPmZsYWdzKSkKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShhcHJpdi0+d2lmaWRldik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKLQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiVW5hbGxvY2F0ZWQgRklEIHdhcyAiCi0JCQkJCSJ1c2VkIHRvIHhtaXQiICk7Ci0JCQl9Ci0JCX0KLWV4aXR0eDoKLQkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKQotCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsICJHb3Qgd2VpcmQgc3RhdHVzICV4IiwKKwkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKSB7CisJCQlhaXJvX3ByaW50X3dhcm4oYWktPmRldi0+bmFtZSwgIkdvdCB3ZWlyZCBzdGF0dXMgJXgiLAogCQkJCXN0YXR1cyAmIH5TVEFUVVNfSU5UUyAmIH5JR05PUkVfSU5UUyApOworCQl9CiAJfQogCiAJaWYgKHNhdmVkSW50ZXJydXB0cykKLQkJT1VUNDUwMCggYXByaXYsIEVWSU5URU4sIHNhdmVkSW50ZXJydXB0cyApOworCQlPVVQ0NTAwKGFpLCBFVklOVEVOLCBzYXZlZEludGVycnVwdHMpOwogCi0JLyogZG9uZS4uICovCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTM2MTMsMTggKzM2ODgsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgbGVuLCBoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKLSNwcmFnbWEgcGFjaygxKQotCXN0cnVjdCB7Ci0JCV9fbGUxNiBzdGF0dXMsIGxlbjsKLQkJdTggcnNzaVsyXTsKLQkJdTggcmF0ZTsKLQkJdTggZnJlcTsKLQkJX19sZTE2IHRtcFs0XTsKLQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCisJc3RydWN0IHJ4X2hkciBoZHI7CiAJdTE2IGdhcDsKIAl1MTYgKmJ1ZmZlcjsKLQljaGFyICpwdHIgPSBhaS0+cnhmaWRzWzBdLnZpcnR1YWxfaG9zdF9hZGRyKzQ7CisJY2hhciAqcHRyID0gYWktPnJ4Zmlkc1swXS52aXJ0dWFsX2hvc3RfYWRkciArIDQ7CiAKIAltZW1jcHlfZnJvbWlvKCZyeGQsIGFpLT5yeGZpZHNbMF0uY2FyZF9yYW1fb2ZmLCBzaXplb2YocnhkKSk7CiAJbWVtY3B5ICgoY2hhciAqKSZoZHIsIHB0ciwgc2l6ZW9mKGhkcikpOwpAQCAtMzY5MSw2ICszNzU4LDcgQEAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAluZXRpZl9yeCggc2tiICk7CisKIGJhZHJ4OgogCWlmIChyeGQudmFsaWQgPT0gMCkgewogCQlyeGQudmFsaWQgPSAxOwpAQCAtMzcwNSw3ICszNzczLDYgQEAKIAlDbWQgY21kOwogCVJlc3AgcnNwOwogCWludCBzdGF0dXM7Ci0JaW50IGk7CiAJU3NpZFJpZCBteVNzaWQ7CiAJX19sZTE2IGxhc3RpbmRleDsKIAlXZXBLZXlSaWQgd2tyOwpAQCAtMzc0Nyw2ICszODE0LDcgQEAKIAlpZiAobG9jaykKIAkJdXAoJmFpLT5zZW0pOwogCWlmIChhaS0+Y29uZmlnLmxlbiA9PSAwKSB7CisJCWludCBpOwogCQl0ZHNSc3NpUmlkIHJzc2lfcmlkOwogCQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CiAKQEAgLTM3OTQsMTQgKzM4NjIsMTIgQEAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5zbW9kIGNvbmZpZ3VyZWQKIAkJICAgcmF0ZXMgdG8gYWRkICovCiAJCWlmICggcmF0ZXNbMF0gKSB7Ci0JCQlpbnQgaSA9IDA7CiAJCQltZW1zZXQoYWktPmNvbmZpZy5yYXRlcywwLHNpemVvZihhaS0+Y29uZmlnLnJhdGVzKSk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgOCAmJiByYXRlc1tpXTsgaSsrICkgewogCQkJCWFpLT5jb25maWcucmF0ZXNbaV0gPSByYXRlc1tpXTsKIAkJCX0KIAkJfQogCQlpZiAoIGJhc2ljX3JhdGUgPiAwICkgewotCQkJaW50IGk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkgewogCQkJCWlmICggYWktPmNvbmZpZy5yYXRlc1tpXSA9PSBiYXNpY19yYXRlIHx8CiAJCQkJICAgICAhYWktPmNvbmZpZy5yYXRlcyApIHsKQEAgLTQ2ODYsNyArNDc1Miw3IEBACiAJU3RhdHNSaWQgc3RhdHM7CiAJaW50IGksIGo7CiAJX19sZTMyICp2YWxzID0gc3RhdHMudmFsczsKLQlpbnQgbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKKwlpbnQgbGVuOwogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2OTcsNiArNDc2Myw3IEBACiAJfQogCiAJcmVhZFN0YXRzUmlkKGFwcml2LCAmc3RhdHMsIHJpZCwgMSk7CisJbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKIAogICAgICAgICBqID0gMDsKIAlmb3IoaT0wOyBzdGF0c0xhYmVsc1tpXSE9KGNoYXIgKiktMSAmJiBpKjQ8bGVuOyBpKyspIHsKQEAgLTUxMzEsNTUgKzUxOTgsOTggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGF0IHRoZSBpbmRleC4gIElmIGluZGV4ID09IDB4ZmZmZgotICogdGhlIGluZGV4IG9mIHRoZSB0cmFuc21pdCBrZXkgaXMgcmV0dXJuZWQuICBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsCi0gKiAtMSB3aWxsIGJlIHJldHVybmVkLgorLyogUmV0dXJucyB0aGUgV0VQIGtleSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciAtMSBpZiB0aGF0IGtleSBkb2VzCisgKiBub3QgZXhpc3QuICBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgYXQgbGVhc3QgMTYgYnl0ZXMgaW4gbGVuZ3RoLgogICovCi1zdGF0aWMgaW50IGdldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgpIHsKK3N0YXRpYyBpbnQgZ2V0X3dlcF9rZXkoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgY2hhciAqYnVmLCB1MTYgYnVmbGVuKQorewogCVdlcEtleVJpZCB3a3I7CiAJaW50IHJjOwogCV9fbGUxNiBsYXN0aW5kZXg7CiAKIAlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDEsIDEpOwotCWlmIChyYyA9PSBTVUNDRVNTKSBkbyB7CisJaWYgKHJjICE9IFNVQ0NFU1MpCisJCXJldHVybiAtMTsKKwlkbyB7CiAJCWxhc3RpbmRleCA9IHdrci5raW5kZXg7Ci0JCWlmICh3a3Iua2luZGV4ID09IGNwdV90b19sZTE2KGluZGV4KSkgewotCQkJaWYgKGluZGV4ID09IDB4ZmZmZikgewotCQkJCXJldHVybiB3a3IubWFjWzBdOwotCQkJfQotCQkJcmV0dXJuIGxlMTZfdG9fY3B1KHdrci5rbGVuKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHdrci5raW5kZXgpID09IGluZGV4KSB7CisJCQlpbnQga2xlbiA9IG1pbl90KGludCwgYnVmbGVuLCBsZTE2X3RvX2NwdSh3a3Iua2xlbikpOworCQkJbWVtY3B5KGJ1Ziwgd2tyLmtleSwga2xlbik7CisJCQlyZXR1cm4ga2xlbjsKIAkJfQotCQlyZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJaWYgKHJjICE9IFNVQ0NFU1MpCisJCQlyZXR1cm4gLTE7CiAJfSB3aGlsZSAobGFzdGluZGV4ICE9IHdrci5raW5kZXgpOwogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBzZXRfd2VwX2tleShzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IGluZGV4LAotCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCB1MTYga2V5bGVuLCBpbnQgcGVybSwgaW50IGxvY2sgKQorc3RhdGljIGludCBnZXRfd2VwX3R4X2lkeChzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlXZXBLZXlSaWQgd2tyOworCWludCByYzsKKwlfX2xlMTYgbGFzdGluZGV4OworCisJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAxLCAxKTsKKwlpZiAocmMgIT0gU1VDQ0VTUykKKwkJcmV0dXJuIC0xOworCWRvIHsKKwkJbGFzdGluZGV4ID0gd2tyLmtpbmRleDsKKwkJaWYgKHdrci5raW5kZXggPT0gY3B1X3RvX2xlMTYoMHhmZmZmKSkKKwkJCXJldHVybiB3a3IubWFjWzBdOworCQlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDAsIDEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykKKwkJCXJldHVybiAtMTsKKwl9IHdoaWxlIChsYXN0aW5kZXggIT0gd2tyLmtpbmRleCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgIHUxNiBrZXlsZW4sIGludCBwZXJtLCBpbnQgbG9jaykKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXSA9IHsgMHgwMSwgMCwgMCwgMCwgMCwgMCB9OwogCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOwogCi0JbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKIAlpZiAoa2V5bGVuID09IDApIHsKLS8vIFdlIGFyZSBzZWxlY3Rpbmcgd2hpY2gga2V5IHRvIHVzZQotCQl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOwotCQl3a3Iua2luZGV4ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKLQkJd2tyLm1hY1swXSA9IChjaGFyKWluZGV4OwotCQlpZiAocGVybSkgYWktPmRlZmluZGV4ID0gKGNoYXIpaW5kZXg7Ci0JfSBlbHNlIHsKLS8vIFdlIGFyZSBhY3R1YWxseSBzZXR0aW5nIHRoZSBrZXkKLQkJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKLQkJd2tyLmtpbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKLQkJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOwotCQltZW1jcHkoIHdrci5rZXksIGtleSwga2V5bGVuICk7Ci0JCW1lbWNweSggd2tyLm1hYywgbWFjYWRkciwgRVRIX0FMRU4gKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBrZXkgbGVuZ3RoIHRvIHNldCB3YXMgemVybyIsCisJCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CiAJfQogCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOworCW1lbWNweSh3a3Iua2V5LCBrZXksIGtleWxlbik7CisJbWVtY3B5KHdrci5tYWMsIG1hY2FkZHIsIEVUSF9BTEVOKTsKKwogCWlmIChwZXJtKSBkaXNhYmxlX01BQyhhaSwgbG9jayk7Ci0Jd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOworCXJjID0gd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOwogCWlmIChwZXJtKSBlbmFibGVfTUFDKGFpLCBsb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3dlcF90eF9pZHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgaW50IHBlcm0sIGludCBsb2NrKQoreworCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOworCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNigweGZmZmYpOworCXdrci5tYWNbMF0gPSAoY2hhcilpbmRleDsKKworCWlmIChwZXJtKSB7CisJCWFpLT5kZWZpbmRleCA9IChjaGFyKWluZGV4OworCQlkaXNhYmxlX01BQyhhaSwgbG9jayk7CisJfQorCisJcmMgPSB3cml0ZVdlcEtleVJpZChhaSwgJndrciwgcGVybSwgbG9jayk7CisKKwlpZiAocGVybSkKKwkJZW5hYmxlX01BQyhhaSwgbG9jayk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBwcm9jX3dlcGtleV9vbl9jbG9zZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUgKSB7CkBAIC01MTg3LDcgKzUyOTcsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoaW5vZGUpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkcC0+ZGF0YTsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+bWxfcHJpdjsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJY2hhciBrZXlbMTZdOwogCXUxNiBpbmRleCA9IDA7CiAJaW50IGogPSAwOwpAQCAtNTIwMSw3ICs1MzExLDEyIEBACiAJICAgIChkYXRhLT53YnVmZmVyWzFdID09ICcgJyB8fCBkYXRhLT53YnVmZmVyWzFdID09ICdcbicpKSB7CiAJCWluZGV4ID0gZGF0YS0+d2J1ZmZlclswXSAtICcwJzsKIAkJaWYgKGRhdGEtPndidWZmZXJbMV0gPT0gJ1xuJykgewotCQkJc2V0X3dlcF9rZXkoYWksIGluZGV4LCBOVUxMLCAwLCAxLCAxKTsKKwkJCXJjID0gc2V0X3dlcF90eF9pZHgoYWksIGluZGV4LCAxLCAxKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCAiCisJCQkJICAgICAgICAgICAgICAgIldFUCB0cmFuc21pdCBpbmRleCB0byAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJCWogPSAyOwpAQCAtNTIyMCw3ICs1MzM1LDEyIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzZXRfd2VwX2tleShhaSwgaW5kZXgsIGtleSwgaS8zLCAxLCAxKTsKKworCXJjID0gc2V0X3dlcF9rZXkoYWksIGluZGV4LCBrZXksIGkvMywgMSwgMSk7CisJaWYgKHJjIDwgMCkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCBXRVAga2V5IGF0IGluZGV4ICIKKwkJICAgICAgICAgICAgICAgIiVkOiAlZC4iLCBpbmRleCwgcmMpOworCX0KIH0KIAogc3RhdGljIGludCBwcm9jX3dlcGtleV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSApCkBAIC01NDUxLDEzICs1NTcxLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBBVVRIX1NIQVJFREtFWToKIAkJCWlmIChhcHJpdi0+a2V5aW5kZXggPCBhdXRvX3dlcCkgewotCQkJCXNldF93ZXBfa2V5KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIE5VTEwsIDAsIDAsIDApOworCQkJCXNldF93ZXBfdHhfaWR4KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIDAsIDApOwogCQkJCWFwcml2LT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX1NIQVJFREtFWTsKIAkJCQlhcHJpdi0+a2V5aW5kZXgrKzsKIAkJCX0gZWxzZSB7CiAJCQkgICAgICAgIC8qIERyb3AgdG8gRU5DUllQVCAqLwogCQkJCWFwcml2LT5rZXlpbmRleCA9IDA7Ci0JCQkJc2V0X3dlcF9rZXkoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgTlVMTCwgMCwgMCwgMCk7CisJCQkJc2V0X3dlcF90eF9pZHgoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgMCwgMCk7CiAJCQkJYXByaXYtPmNvbmZpZy5hdXRoVHlwZSA9IEFVVEhfRU5DUllQVDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTcyNSwxNiArNTg0NSwxMiBAQAogCWludCByYyA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIElmIHNldHRpbmcgYnkgZnJlcXVlbmN5LCBjb252ZXJ0IHRvIGEgY2hhbm5lbCAqLwotCWlmKChmd3JxLT5lID09IDEpICYmCi0JICAgKGZ3cnEtPm0gPj0gKGludCkgMi40MTJlOCkgJiYKLQkgICAoZndycS0+bSA8PSAoaW50KSAyLjQ4N2U4KSkgeworCWlmKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQotCQkJYysrOworCiAJCS8qIEhhY2sgdG8gZmFsbCB0aHJvdWdoLi4uICovCiAJCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gYyArIDE7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZik7CiAJfQogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KIAlpZigoZndycS0+bSA+IDEwMDApIHx8IChmd3JxLT5lID4gMCkpCkBAIC01Nzc4LDcgKzU4OTQsNyBAQAogCiAJY2ggPSBsZTE2X3RvX2NwdShzdGF0dXNfcmlkLmNoYW5uZWwpOwogCWlmKChjaCA+IDApICYmIChjaCA8IDE1KSkgewotCQlmd3JxLT5tID0gZnJlcXVlbmN5X2xpc3RbY2ggLSAxXSAqIDEwMDAwMDsKKwkJZndycS0+bSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaCkgKiAxMDAwMDA7CiAJCWZ3cnEtPmUgPSAxOwogCX0gZWxzZSB7CiAJCWZ3cnEtPm0gPSBjaDsKQEAgLTYyMzQsMTEgKzYzNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChDYXBhYmlsaXR5UmlkICpwLCBpbnQgaW5kZXgpCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChzdHJ1Y3QgYWlyb19pbmZvICphaSwgaW50IGluZGV4KQogewotCWlmIChpbmRleCA8IDApCi0JCXJldHVybiAwOwotCXJldHVybiBpbmRleCA8IChwLT5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkgPyA0IDogMSk7CisJcmV0dXJuIChpbmRleCA+PSAwKSAmJiAoaW5kZXggPD0gYWktPm1heF93ZXBfaWR4KTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNjI1MSwxNiArNjM2NSwxMyBAQAogCQkJICAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KLQlpbnQgcGVybSA9ICggZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CisJaW50IHBlcm0gPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxKTsKIAlfX2xlMTYgY3VycmVudEF1dGhUeXBlID0gbG9jYWwtPmNvbmZpZy5hdXRoVHlwZTsKKwlpbnQgcmMgPSAwOwogCi0JLyogSXMgV0VQIHN1cHBvcnRlZCA/ICovCi0JcmVhZENhcGFiaWxpdHlSaWQobG9jYWwsICZjYXBfcmlkLCAxKTsKLQkvKiBPbGRlciBmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4uLgotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9ICovCisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCS8qIEJhc2ljIGNoZWNraW5nOiBkbyB3ZSBoYXZlIGEga2V5IHRvIHNldCA/CkBAIC02MjcyLDE0ICs2MzgzLDIxIEBACiAJaWYgKGR3cnEtPmxlbmd0aCA+IDApIHsKIAkJd2VwX2tleV90IGtleTsKIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JCWludCBjdXJyZW50X2luZGV4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJCWludCBjdXJyZW50X2luZGV4OworCiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBrZXkgKi8KIAkJaWYgKGR3cnEtPmxlbmd0aCA+IE1BWF9LRVlfU0laRSkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKworCQljdXJyZW50X2luZGV4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoY3VycmVudF9pbmRleCA8IDApCisJCQljdXJyZW50X2luZGV4ID0gMDsKKwogCQkvKiBDaGVjayB0aGUgaW5kZXggKG5vbmUgLT4gdXNlIGN1cnJlbnQpICovCi0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaW5kZXgpKQogCQkJaW5kZXggPSBjdXJyZW50X2luZGV4OworCiAJCS8qIFNldCB0aGUgbGVuZ3RoICovCiAJCWlmIChkd3JxLT5sZW5ndGggPiBNSU5fS0VZX1NJWkUpCiAJCQlrZXkubGVuID0gTUFYX0tFWV9TSVpFOwpAQCAtNjI5Niw3ICs2NDE0LDEzIEBACiAJCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLwogCQkJbWVtY3B5KGtleS5rZXksIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCQkJLyogU2VuZCB0aGUga2V5IHRvIHRoZSBjYXJkICovCi0JCQlzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJcmMgPSBzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIGtleSBhdCBpbmRleCAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KIAkJfQogCQkvKiBXRSBzcGVjaWZ5IHRoYXQgaWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uCiAJCSAqIHNob3VsZCBiZSBlbmFibGVkICh1c2VyIG1heSB0dXJuIGl0IG9mZiBsYXRlcikKQEAgLTYzMDgsMTIgKzY0MzIsMTkgQEAKIAl9IGVsc2UgewogCQkvKiBEbyB3ZSB3YW50IHRvIGp1c3Qgc2V0IHRoZSB0cmFuc21pdCBrZXkgaW5kZXggPyAqLwogCQlpbnQgaW5kZXggPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJaWYgKHZhbGlkX2luZGV4KCZjYXBfcmlkLCBpbmRleCkpIHsKLQkJCXNldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgTlVMTCwgMCwgcGVybSwgMSk7Ci0JCX0gZWxzZQorCQlpZiAodmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQkJcmMgPSBzZXRfd2VwX3R4X2lkeChsb2NhbCwgaW5kZXgsIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIHRyYW5zbWl0IGluZGV4IHRvICVkOiAlZC4iLAorCQkJCSAgICAgICAgICAgICAgIGluZGV4LCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQl9IGVsc2UgewogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KIAkJCWlmICghKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKQogCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCS8qIFJlYWQgdGhlIGZsYWdzICovCiAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCkBAIC02MzM5LDE0ICs2NDcwLDEzIEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKKwogCS8qIENoZWNrIGVuY3J5cHRpb24gbW9kZSAqLwogCXN3aXRjaChsb2NhbC0+Y29uZmlnLmF1dGhUeXBlKQl7CiAJCWNhc2UgQVVUSF9FTkNSWVBUOgpAQCAtNjM2NSwxNCArNjQ5NSwxNyBAQAogCW1lbXNldChleHRyYSwgMCwgMTYpOwogCiAJLyogV2hpY2gga2V5IGRvIHdlIHdhbnQgPyAtMSAtPiB0eCBpbmRleCAqLwotCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKLQkJaW5kZXggPSBnZXRfd2VwX2tleShsb2NhbCwgMHhmZmZmKTsKLQlkd3JxLT5mbGFncyB8PSBpbmRleCArIDE7Ci0JLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCk7Ci0JaWYgKGR3cnEtPmxlbmd0aCA+IDE2KSB7Ci0JCWR3cnEtPmxlbmd0aD0wOworCWlmICghdmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQlpbmRleCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGluZGV4IDwgMCkKKwkJCWluZGV4ID0gMDsKIAl9CisJZHdycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOworCisJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLworCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBkd3JxLT5sZW5ndGgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzODgsMjggKzY1MjEsMjcgQEAKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CQkvKiBDYXJkIGNhcGFiaWxpdHkgaW5mbyAqLwogCWludCBwZXJtID0gKCBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CiAJX19sZTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7Ci0JaW50IGlkeCwga2V5X2xlbiwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOworCWludCBpZHgsIGtleV9sZW4sIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMSwgcmM7CiAJd2VwX2tleV90IGtleTsKIAotCS8qIElzIFdFUCBzdXBwb3J0ZWQgPyAqLwotCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7Ci0JLyogT2xkZXIgZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXMuLi4KLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfSAqLworCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CiAKIAkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KIAlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAJaWYgKGlkeCkgewotCQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpZHggLSAxKSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaWR4IC0gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCX0gZWxzZSB7CisJCWlkeCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGlkeCA8IDApCisJCQlpZHggPSAwOworCX0KIAogCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCiAJCWFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKQEAgLTY0MTgsNyArNjU1MCwxMyBAQAogCQkvKiBPbmx5IHNldCB0cmFuc21pdCBrZXkgaW5kZXggaGVyZSwgYWN0dWFsCiAJCSAqIGtleSBpcyBzZXQgYmVsb3cgaWYgbmVlZGVkLgogCQkgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgTlVMTCwgMCwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF90eF9pZHgobG9jYWwsIGlkeCwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0ICIKKwkJCSAgICAgICAgICAgICAgICJXRVAgdHJhbnNtaXQgaW5kZXggdG8gJWQ6ICVkLiIsCisJCQkgICAgICAgICAgICAgICBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzZXRfa2V5ID0gZXh0LT5rZXlfbGVuID4gMCA/IDEgOiAwOwogCX0KIApAQCAtNjQ0NCw3ICs2NTgyLDEyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IFdFUCBrZXkiCisJCQkgICAgICAgICAgICAgICAiIGF0IGluZGV4ICVkOiAlZC4iLCBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCX0KIAogCS8qIFJlYWQgdGhlIGZsYWdzICovCkBAIC02NDc0LDE0ICs2NjE3LDEyIEBACiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KIAlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKQEAgLTY0OTAsMTEgKzY2MzEsMTQgQEAKIAogCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAlpZiAoaWR4KSB7Ci0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGlkeCAtIDEpKQorCQlpZiAoIXZhbGlkX2luZGV4KGxvY2FsLCBpZHggLSAxKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJaWR4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoaWR4IDwgMCkKKwkJCWlkeCA9IDA7CisJfQogCiAJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKIAltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwpAQCAtNjUxNywxMCArNjY2MSw4IEBACiAJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWV4dC0+a2V5X2xlbiA9IGdldF93ZXBfa2V5KGxvY2FsLCBpZHgpOwotCWlmIChleHQtPmtleV9sZW4gPiAxNikgewotCQlleHQtPmtleV9sZW49MDsKLQl9CisJZXh0LT5rZXlfbGVuID0gZ2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBleHQtPmtleV9sZW4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Nzk1LDggKzY5MzcsOCBAQAogCWsgPSAwOwogCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOyAvKiBMaXN0IGluZGV4ICovCi0JCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpXSAqIDEwMDAwMDsKLQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCQlyYW5nZS0+ZnJlcVtrXS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLwogCX0KIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAKQEAgLTcwMzEsMTEgKzcxNzMsMTUgQEAKIHsKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MgPSAoc3RydWN0IHNvY2thZGRyICopIGV4dHJhOwotCXN0cnVjdCBpd19xdWFsaXR5IHF1YWxbSVdfTUFYX0FQXTsKKwlzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbDsKIAlCU1NMaXN0UmlkIEJTU0xpc3Q7CiAJaW50IGk7CiAJaW50IGxvc2VTeW5jID0gY2FwYWJsZShDQVBfTkVUX0FETUlOKSA/IDE6IC0xOwogCisJcXVhbCA9IGttYWxsb2MoSVdfTUFYX0FQICogc2l6ZW9mKCpxdWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvciAoaSA9IDA7IGkgPCBJV19NQVhfQVA7IGkrKykgewogCQl1MTYgZEJtOwogCQlpZiAocmVhZEJTU0xpc3RSaWQobG9jYWwsIGxvc2VTeW5jLCAmQlNTTGlzdCkpCkBAIC03MDkwLDYgKzcyMzYsNyBAQAogCX0KIAlkd3JxLT5sZW5ndGggPSBpOwogCisJa2ZyZWUocXVhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxODksMTAgKzczMzYsNyBAQAogCS8qIEFkZCBmcmVxdWVuY3kgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CiAJaXdlLnUuZnJlcS5tID0gbGUxNl90b19jcHUoYnNzLT5kc0NoYW5uZWwpOwotCS8qIGl3ZS51LmZyZXEubSBjb250YWludCB0aGUgY2hhbm5lbCAoc3RhcnRpbmcgMSksIG91ciAKLQkgKiBmcmVxdWVuY3lfbGlzdCBhcnJheSBzdGFydCBhdCBpbmRleCAwLi4uCi0JICovCi0JaXdlLnUuZnJlcS5tID0gZnJlcXVlbmN5X2xpc3RbaXdlLnUuZnJlcS5tIC0gMV0gKiAxMDAwMDA7CisJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGl3ZS51LmZyZXEubSkgKiAxMDAwMDA7CiAJaXdlLnUuZnJlcS5lID0gMTsKIAljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKIAkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggMjc2OTZjMi4uZDA1OTNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtMTYsOCArMTYsOCBAQAogICAgIEluIGFkZGl0aW9uIHRoaXMgbW9kdWxlIHdhcyBkZXJpdmVkIGZyb20gZHVtbXlfY3MuCiAgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIGR1bW15X2NzIGlzIERhdmlkIEEuIEhpbmRzCiAgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKLSAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgCi0gICAgCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjaWZkZWYgX19JTl9QQ01DSUFfUEFDS0FHRV9fCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlICJhaXJvLmgiCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogc3RhdGljIGNoYXIgKnZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOwogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgpAQCAtNjIsOSArNjIsOSBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIFJlZWQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgQ2lzY28vQWlyb25ldCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgXAotICAgICAgICAgICAgICAgICAgIGNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkIFwKLQkJICAgd2l0aCB0aGUgYWlybyBtb2R1bGUuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0ICIKKwkJICAgImNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkICIKKwkJICAgIndpdGggdGhlIGFpcm8gbW9kdWxlLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkFpcm9uZXQgNDUwMCwgNDgwMCBhbmQgQ2lzY28gMzQwIFBDTUNJQSBjYXJkcyIpOwogCkBAIC03Niw3ICs3Niw3IEBACiAgICBldmVudCBpcyByZWNlaXZlZC4gIFRoZSBjb25maWcoKSBhbmQgcmVsZWFzZSgpIGVudHJ5IHBvaW50cyBhcmUKICAgIHVzZWQgdG8gY29uZmlndXJlIG9yIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQKICAgIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLiAgVGhleSBhcmUgaW52b2tlZCBmcm9tIHRoZSBhaXJvX2NzCi0gICBldmVudCBoYW5kbGVyLiAKKyAgIGV2ZW50IGhhbmRsZXIuCiAqLwogCiBzdGF0aWMgaW50IGFpcm9fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTEwMyw4ICsxMDMsOSBAQAogICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKLSAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLAorICAgd2hlcmUgbWlub3IgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nCisgICBhcnJheSBpbmRleC4KICovCiAKIC8qCkBAIC0xMjIsMjIgKzEyMywyMiBAQAogICAgZGV2aWNlIElPIHJvdXRpbmVzIGNhbiB1c2UgYSBmbGFnIGxpa2UgdGhpcyB0byB0aHJvdHRsZSBJTyB0byBhCiAgICBjYXJkIHRoYXQgaXMgbm90IHJlYWR5IHRvIGFjY2VwdCBpdC4KICovCi0gICAKKwogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlkZXZfbm9kZV90CW5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmV0aF9kZXY7CiB9IGxvY2FsX2luZm9fdDsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIGFpcm9fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KLSAgCisKICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCiAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBhaXJvX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKQEAgLTE1MCw3ICsxNTEsNyBAQAogCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCXBfZGV2LT5pcnEuSGFuZGxlciA9IE5VTEw7Ci0JCisKIAkvKgogCSAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKQEAgLTE2MCw3ICsxNjEsNyBAQAogCSovCiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotCQorCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKQEAgLTE3MywxMiArMTc0LDEyIEBACiB9IC8qIGFpcm9fYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAogICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC0xODcsMjAgKzE4OCwyMCBAQAogCiAJYWlyb19yZWxlYXNlKGxpbmspOwogCi0JaWYgKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgKSB7Ci0JCXN0b3BfYWlyb19jYXJkKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYsIDAgKTsKKwlpZiAoKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldikgeworCQlzdG9wX2Fpcm9fY2FyZCgoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwKTsKIAl9Ci0JKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKKwkoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKIAogCWtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBhaXJvX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgYWlyb19jb25maWcoKSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCiAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXApAQCAtMzI1LDI2ICszMjYsMjggQEAKIAkqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JCisKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IAotCQlpbml0X2Fpcm9fY2FyZCggbGluay0+aXJxLkFzc2lnbmVkSVJRLAotCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgMSwgJmhhbmRsZV90b19kZXYobGluaykgKTsKLQlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgZ290byBjc19mYWlsZWQ7Ci0JCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9CisJCWluaXRfYWlyb19jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKKwkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlpZiAoISgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYpCisJCWdvdG8gY3NfZmFpbGVkOworCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCiAJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkqLwotCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2Rldi0+bmFtZSApOworCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUpOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CiAJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwotCQorCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCiAJICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CkBAIC0zNzQsMTEgKzM3NywxMSBAQAogfSAvKiBhaXJvX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIGFpcm9fcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUKICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtNDc1LDcgKzQ3OCw3IEBACiAgICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAogICAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwogICAgIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAKKyAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiAKIG1vZHVsZV9pbml0KGFpcm9fY3NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDI4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACitjb25maWcgQVI5MTcwX1VTQgorCXRyaXN0YXRlICJBdGhlcm9zIEFSOTE3MCA4MDIuMTFuIFVTQiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCWhlbHAKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBBdGhlcm9zICJvdHVzIiA4MDIuMTFuIFVTQiBkZXZpY2VzLgorCisJICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYWRkaXRpb25hbCBmaXJtd2FyZSAoMiBmaWxlcykuCisJICBGb3Igbm93LCB0aGVzZSBmaWxlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGhlcmU6CisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2FyOTE3MAorCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXI5MTcwdXNiLgorCitjb25maWcgQVI5MTcwX0xFRFMKKwlib29sCisJZGVwZW5kcyBvbiBBUjkxNzBfVVNCICYmIE1BQzgwMjExX0xFRFMgJiYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBBUjkxNzBfVVNCKQorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTFjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACithcjkxNzB1c2Itb2JqcyA6PSB1c2IubyBtYWluLm8gY21kLm8gbWFjLm8gcGh5Lm8gbGVkLm8KKworb2JqLSQoQ09ORklHX0FSOTE3MF9VU0IpICs9IGFyOTE3MHVzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvYXI5MTcwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvYXI5MTcwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmYjJlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9hcjkxNzAuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIERyaXZlciBzcGVjaWZpYyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX0FSOTE3MF9ICisjZGVmaW5lIF9fQVI5MTcwX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KKyNpbmNsdWRlICJlZXByb20uaCIKKyNpbmNsdWRlICJody5oIgorCisjZGVmaW5lIFBBWUxPQURfTUFYCShBUjkxNzBfTUFYX0NNRF9MRU4vNCAtIDEpCisKK2VudW0gYXI5MTcwX2J3IHsKKwlBUjkxNzBfQldfMjAsCisJQVI5MTcwX0JXXzQwX0JFTE9XLAorCUFSOTE3MF9CV180MF9BQk9WRSwKKworCV9fQVI5MTcwX05VTV9CVywKK307CisKK2VudW0gYXI5MTcwX3JmX2luaXRfbW9kZSB7CisJQVI5MTcwX1JGSV9OT05FLAorCUFSOTE3MF9SRklfV0FSTSwKKwlBUjkxNzBfUkZJX0NPTEQsCit9OworCisjZGVmaW5lIEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUJCTgxOTIKKworI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworc3RydWN0IGFyOTE3MDsKKworc3RydWN0IGFyOTE3MF9sZWQgeworCXN0cnVjdCBhcjkxNzAgKmFyOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbDsKKwljaGFyIG5hbWVbMzJdOworCXVuc2lnbmVkIGludCB0b2dnbGVkOworCWJvb2wgcmVnaXN0ZXJlZDsKK307CisKKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KKworZW51bSBhcjkxNzBfZGV2aWNlX3N0YXRlIHsKKwlBUjkxNzBfVU5LTk9XTl9TVEFURSwKKwlBUjkxNzBfU1RPUFBFRCwKKwlBUjkxNzBfSURMRSwKKwlBUjkxNzBfU1RBUlRFRCwKKwlBUjkxNzBfQVNTT0NJQVRFRCwKK307CisKK3N0cnVjdCBhcjkxNzAgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBtdXRleCBtdXRleDsKKwllbnVtIGFyOTE3MF9kZXZpY2Vfc3RhdGUgc3RhdGU7CisKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgYXI5MTcwICopOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgYXI5MTcwICopOworCWludCAoKnR4KShzdHJ1Y3QgYXI5MTcwICosIHN0cnVjdCBza19idWZmICosIGJvb2wsIHVuc2lnbmVkIGludCk7CisJaW50ICgqZXhlY19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgZW51bSBhcjkxNzBfY21kLCB1MzIgLAorCQkJdm9pZCAqLCB1MzIgLCB2b2lkICopOworCXZvaWQgKCpjYWxsYmFja19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgdTMyICwgdm9pZCAqKTsKKworCS8qIGludGVyZmFjZSBtb2RlIHNldHRpbmdzICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJLyogYmVhY29uaW5nICovCisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3dvcms7CisKKwkvKiBjcnlwdG9ncmFwaGljIGVuZ2luZSAqLworCXU2NCB1c2Vka2V5czsKKwlib29sIHJ4X3NvZnR3YXJlX2RlY3J5cHRpb247CisJYm9vbCBkaXNhYmxlX29mZmxvYWQ7CisKKwkvKiBmaWx0ZXIgc2V0dGluZ3MgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmlsdGVyX2NvbmZpZ193b3JrOworCXU2NCBjdXJfbWNfaGFzaCwgd2FudF9tY19oYXNoOworCXUzMiBjdXJfZmlsdGVyLCB3YW50X2ZpbHRlcjsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyX2NoYW5nZWQ7CisJYm9vbCBzbmlmZmVyX2VuYWJsZWQ7CisKKwkvKiBQSFkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJaW50IG5vaXNlWzRdOworCisJLyogcG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLworCXU4IHBvd2VyXzVHX2xlZ1s0XTsKKwl1OCBwb3dlcl8yR19jY2tbNF07CisJdTggcG93ZXJfMkdfb2ZkbVs0XTsKKwl1OCBwb3dlcl81R19odDIwWzhdOworCXU4IHBvd2VyXzVHX2h0NDBbOF07CisJdTggcG93ZXJfMkdfaHQyMFs4XTsKKwl1OCBwb3dlcl8yR19odDQwWzhdOworCisjaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCisJc3RydWN0IGRlbGF5ZWRfd29yayBsZWRfd29yazsKKwlzdHJ1Y3QgYXI5MTcwX2xlZCBsZWRzW0FSOTE3MF9OVU1fTEVEU107CisjZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCisKKwkvKiBxb3MgcXVldWUgc2V0dGluZ3MgKi8KKwlzcGlubG9ja190IHR4X3N0YXRzX2xvY2s7CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s1XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNmWzVdOworCisJc3BpbmxvY2tfdCBjbWRsb2NrOworCV9fbGUzMiBjbWRidWZbUEFZTE9BRF9NQVggKyAxXTsKKworCS8qIE1BQyBzdGF0aXN0aWNzICovCisJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7CisKKwkvKiBFRVBST00gKi8KKwlzdHJ1Y3QgYXI5MTcwX2VlcHJvbSBlZXByb207CisKKwkvKiBnbG9iYWwgdHggc3RhdHVzIGZvciB1bnJlZ2lzdGVyZWQgU3RhdGlvbnMuICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCBnbG9iYWxfdHhfc3RhdHVzOworCXN0cnVjdCBza19idWZmX2hlYWQgZ2xvYmFsX3R4X3N0YXR1c193YXN0ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHR4X3N0YXR1c19qYW5pdG9yOworfTsKKworc3RydWN0IGFyOTE3MF9zdGFfaW5mbyB7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9zdGF0dXNbX19BUjkxNzBfTlVNX1RYUV07Cit9OworCisjZGVmaW5lIElTX1NUQVJURUQoYSkJCShhLT5zdGF0ZSA+PSBBUjkxNzBfU1RBUlRFRCkKKyNkZWZpbmUgSVNfQUNDRVBUSU5HX0NNRChhKQkoYS0+c3RhdGUgPj0gQVI5MTcwX0lETEUpCisKKyNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX1BST01JU0MJCUJJVCgwKQorI2RlZmluZSBBUjkxNzBfRklMVEVSX0NIQU5HRURfTVVMVElDQVNUCQlCSVQoMSkKKyNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSCUJJVCgyKQorCisvKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KK3ZvaWQgKmFyOTE3MF9hbGxvYyhzaXplX3QgcHJpdl9zaXplKTsKK2ludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwordm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhcjkxNzBfdW5yZWdpc3RlcihzdHJ1Y3QgYXI5MTcwICphcik7Cit2b2lkIGFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBib29sIHVwZGF0ZV9zdGF0aXN0aWNzLCB1MTYgdHhfc3RhdHVzKTsKKworLyogTUFDICovCitpbnQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBhcjkxNzBfaW5pdF9tYWMoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphcik7CitpbnQgYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXI5MTcwICphcik7CitpbnQgYXI5MTcwX3NldF9od3JldHJ5X2xpbWl0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgbWF4X3JldHJ5KTsKK2ludCBhcjkxNzBfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgYXI5MTcwICphcik7Cit2b2lkIGFyOTE3MF9uZXdfYmVhY29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKKwkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbik7CitpbnQgYXI5MTcwX2Rpc2FibGVfa2V5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBpZCk7CisKKy8qIExFRHMgKi8KKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKK2ludCBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcik7Cit2b2lkIGFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworaW50IGFyOTE3MF9pbml0X2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlZF9zdGF0ZSk7CisKKy8qIFBIWSAvIFJGICovCitpbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworaW50IGFyOTE3MF9pbml0X3JmKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfc2V0X2NoYW5uZWwoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICAgICAgIGVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSByZmksIGVudW0gYXI5MTcwX2J3IGJ3KTsKKworI2VuZGlmIC8qIF9fQVI5MTcwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTdhNjIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogQmFzaWMgSFcgcmVnaXN0ZXIvbWVtb3J5L2NvbW1hbmQgYWNjZXNzIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXI5MTcwLmgiCisjaW5jbHVkZSAiY21kLmgiCisKK2ludCBhcjkxNzBfd3JpdGVfbWVtKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCBfX2xlMzIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQorCQlyZXR1cm4gMDsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9XTUVNLCBsZW4sICh1OCAqKSBkYXRhLCAwLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdyaXRpbmcgbWVtb3J5IGZhaWxlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBhcjkxNzBfd3JpdGVfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgcmVnLCBjb25zdCB1MzIgdmFsKQoreworCV9fbGUzMiBidWZbMl0gPSB7CisJCWNwdV90b19sZTMyKHJlZyksCisJCWNwdV90b19sZTMyKHZhbCksCisJfTsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAwOworCisJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1dSRUcsIHNpemVvZihidWYpLAorCQkJICAgKHU4ICopIGJ1ZiwgMCwgTlVMTCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cml0aW5nIHJlZyAlI3ggKHZhbCAlI3gpIGZhaWxlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHJlZywgdmFsKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9yZWFkX21yZWcoc3RydWN0IGFyOTE3MCAqYXIsIGludCBucmVncywKKwkJCSAgICBjb25zdCB1MzIgKnJlZ3MsIHUzMiAqb3V0KQoreworCWludCBpLCBlcnI7CisJX19sZTMyICpvZmZzLCAqcmVzOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAwOworCisJLyogYWJ1c2UgIm91dCIgZm9yIHRoZSByZWdpc3RlciBvZmZzZXRzLCBtdXN0IGJlIHNhbWUgbGVuZ3RoICovCisJb2ZmcyA9IChfX2xlMzIgKilvdXQ7CisJZm9yIChpID0gMDsgaSA8IG5yZWdzOyBpKyspCisJCW9mZnNbaV0gPSBjcHVfdG9fbGUzMihyZWdzW2ldKTsKKworCS8qIGFsc28gdXNlIHRoZSBzYW1lIGJ1ZmZlciBmb3IgdGhlIGlucHV0ICovCisJcmVzID0gKF9fbGUzMiAqKW91dDsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SUkVHLAorCQkJICAgNCAqIG5yZWdzLCAodTggKilvZmZzLAorCQkJICAgNCAqIG5yZWdzLCAodTggKilyZXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBjb252ZXJ0IHJlc3VsdCB0byBjcHUgZW5kaWFuICovCisJZm9yIChpID0gMDsgaSA8IG5yZWdzOyBpKyspCisJCW91dFtpXSA9IGxlMzJfdG9fY3B1KHJlc1tpXSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFyOTE3MF9yZWFkX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgdTMyIHJlZywgdTMyICp2YWwpCit7CisJcmV0dXJuIGFyOTE3MF9yZWFkX21yZWcoYXIsIDEsICZyZWcsIHZhbCk7Cit9CisKK2ludCBhcjkxNzBfZWNob190ZXN0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgdikKK3sKKwlfX2xlMzIgZWNob2J1ZiA9IGNwdV90b19sZTMyKHYpOworCV9fbGUzMiBlY2hvcmVzOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUNITywKKwkJCSAgIDQsICh1OCAqKSZlY2hvYnVmLAorCQkJICAgNCwgKHU4ICopJmVjaG9yZXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZWNob2J1ZiAhPSBlY2hvcmVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjBlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvY21kLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIEJhc2ljIEhXIHJlZ2lzdGVyL21lbW9yeS9jb21tYW5kIGFjY2VzcyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19DTURfSAorI2RlZmluZSBfX0NNRF9ICisKKyNpbmNsdWRlICJhcjkxNzAuaCIKKworLyogYmFzaWMgSFcgYWNjZXNzICovCitpbnQgYXI5MTcwX3dyaXRlX21lbShzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgX19sZTMyICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBhcjkxNzBfd3JpdGVfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgcmVnLCBjb25zdCB1MzIgdmFsKTsKK2ludCBhcjkxNzBfcmVhZF9yZWcoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiByZWcsIHUzMiAqdmFsKTsKK2ludCBhcjkxNzBfZWNob190ZXN0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgdik7CisKKy8qCisgKiBNYWNyb3MgdG8gZmFjaWxpdGF0ZSB3cml0aW5nIG11bHRpcGxlIHJlZ2lzdGVycyBpbiBhIHNpbmdsZQorICogd3JpdGUtY29tYmluaW5nIFVTQiBjb21tYW5kLiBOb3RlIHRoYXQgd2hlbiB0aGUgZmlyc3QgZ3JvdXAKKyAqIGZhaWxzIHRoZSB3aG9sZSB0aGluZyB3aWxsIGZhaWwgd2l0aG91dCBhbnkgb3RoZXJzIGF0dGVtcHRlZCwKKyAqIGJ1dCB5b3Ugd29uJ3Qga25vdyB3aGljaCB3cml0ZSBpbiB0aGUgZ3JvdXAgZmFpbGVkLgorICovCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaW50IF9fbnJlZyA9IDAsIF9fZXJyID0gMDsJCQkJCVwKKwlzdHJ1Y3QgYXI5MTcwICpfX2FyID0gYXI7CisKKyNkZWZpbmUgYXI5MTcwX3JlZ3dyaXRlKHIsIHYpIGRvIHsJCQkJCVwKKwlfX2FyLT5jbWRidWZbMiAqIF9fbnJlZyArIDFdID0gY3B1X3RvX2xlMzIocik7CQkJXAorCV9fYXItPmNtZGJ1ZlsyICogX19ucmVnICsgMl0gPSBjcHVfdG9fbGUzMih2KTsJCQlcCisJX19ucmVnKys7CQkJCQkJCVwKKwlpZiAoKF9fbnJlZyA+PSBQQVlMT0FEX01BWC8yKSkgewkJCQlcCisJCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCisJCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKKwkJCQkJICAgICA4ICogX19ucmVnLAkJXAorCQkJCQkgICAgICh1OCAqKSAmX19hci0+Y21kYnVmWzFdLAlcCisJCQkJCSAgICAgMCwgTlVMTCk7CQkJXAorCQlfX25yZWcgPSAwOwkJCQkJCVwKKwkJaWYgKF9fZXJyKQkJCQkJCVwKKwkJCWdvdG8gX19yZWd3cml0ZV9vdXQ7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9maW5pc2goKQkJCQkJXAorX19yZWd3cml0ZV9vdXQgOgkJCQkJCQlcCisJaWYgKF9fbnJlZykgewkJCQkJCQlcCisJCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCisJCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKKwkJCQkJICAgICA4ICogX19ucmVnLCAJCVwKKwkJCQkJICAgICAodTggKikgJl9fYXItPmNtZGJ1ZlsxXSwJXAorCQkJCQkgICAgIDAsIE5VTEwpOwkJCVwKKwkJX19ucmVnID0gMDsJCQkJCQlcCisJfQorCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKQkJCQkJXAorCV9fZXJyOwkJCQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKyNlbmRpZiAvKiBfX0NNRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjOGNjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9lZXByb20uaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIEVFUFJPTSBsYXlvdXQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19BUjkxNzBfRUVQUk9NX0gKKyNkZWZpbmUgX19BUjkxNzBfRUVQUk9NX0gKKworI2RlZmluZSBBUjU0MTZfTUFYX0NIQUlOUwkJMgorI2RlZmluZSBBUjU0MTZfTU9EQUxfU1BVUlMJCTUKKworc3RydWN0IGFyOTE3MF9lZXByb21fbW9kYWwgeworCV9fbGUzMglhbnRDdHJsQ2hhaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCV9fbGUzMglhbnRDdHJsQ29tbW9uOworCXM4CWFudGVubmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXN3aXRjaFNldHRsaW5nOworCXU4CXR4UnhBdHRlbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlyeFR4TWFyZ2luQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXM4CWFkY0Rlc2lyZWRTaXplOworCXM4CXBnYURlc2lyZWRTaXplOworCXU4CXhsbmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXR4RW5kVG9YcGFPZmY7CisJdTgJdHhFbmRUb1J4T247CisJdTgJdHhGcmFtZVRvWHBhT247CisJdTgJdGhyZXNoNjI7CisJczgJbm9pc2VGbG9vclRocmVzaENoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAl4cGRHYWluOworCXU4CXhwZDsKKwlzOAlpcUNhbElDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJczgJaXFDYWxRQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXBkR2Fpbk92ZXJsYXA7CisJdTgJb2I7CisJdTgJZGI7CisJdTgJeHBhQmlhc0x2bDsKKwl1OAlwd3JEZWNyZWFzZUZvcjJDaGFpbjsKKwl1OAlwd3JEZWNyZWFzZUZvcjNDaGFpbjsKKwl1OAl0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTgJdHhGcmFtZVRvUGFPbjsKKwl1OAlodDQwUG93ZXJJbmNGb3JQZGFkYzsKKwl1OAlic3dBdHRlbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJYnN3TWFyZ2luW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlzd1NldHRsZUh0NDA7CisJdTgJcmVzZXJ2ZWRbMjJdOworCXN0cnVjdCBzcHVyX2NoYW5uZWwgeworCQlfX2xlMTYgc3B1ckNoYW47CisJCXU4CXNwdXJSYW5nZUxvdzsKKwkJdTgJc3B1clJhbmdlSGlnaDsKKwl9IF9fcGFja2VkIHNwdXJfY2hhbm5lbHNbQVI1NDE2X01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUwkJNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMJCTUKKworc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxIHsKKwl1OAlwd3JfcGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107CisJdTgJdnBkX3BkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUwkJOAorI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUwkJNAorCisjZGVmaW5lIEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlMJOAorI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUFdSUwkzCisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSUwk0CisjZGVmaW5lIEFSNTQxNl9NQVhfTlVNX1RHVF9QV1JTCQk4CisKK3N0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSB7CisJdTgJZnJlcTsKKwl1OAlwb3dlcls0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2h0IHsKKwl1OAlmcmVxOworCXU4CXBvd2VyWzhdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjU0MTZfTlVNX0NUTFMJCQkyNAorCitzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyB7CisJdTgJY2hhbm5lbDsKKyNkZWZpbmUgQVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTCTB4QzAKKwl1OAlwb3dlcl9mbGFnczsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTCQk4CisKK3N0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEgeworCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2VkZ2VzCisJCWNvbnRyb2xfZWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCisKK3N0cnVjdCBhcjkxNzBfZWVwcm9tIHsKKwlfX2xlMTYJbGVuZ3RoOworCV9fbGUxNgljaGVja3N1bTsKKwlfX2xlMTYJdmVyc2lvbjsKKwl1OAlvcGVyYXRpbmdfZmxhZ3M7CisjZGVmaW5lIEFSOTE3MF9PUEZMQUdfNUdIWiAJCTEKKyNkZWZpbmUgQVI5MTcwX09QRkxBR18yR0haIAkJMgorCXU4CW1pc2M7CisJX19sZTE2CXJlZ19kb21haW5bMl07CisJdTgJbWFjX2FkZHJlc3NbNl07CisJdTgJcnhfbWFzazsKKwl1OAl0eF9tYXNrOworCV9fbGUxNglyZl9zaWxlbnQ7CisJX19sZTE2CWJsdWV0b290aF9vcHRpb25zOworCV9fbGUxNglkZXZpY2VfY2FwYWJpbGl0aWVzOworCV9fbGUzMglidWlsZF9udW1iZXI7CisJdTgJZGV2aWNlVHlwZTsKKwl1OAlyZXNlcnZlZFszM107CisKKwl1OAljdXN0b21lcl9kYXRhWzY0XTsKKworCXN0cnVjdCBhcjkxNzBfZWVwcm9tX21vZGFsCisJCW1vZGFsX2hlYWRlclsyXTsKKworCXU4CWNhbF9mcmVxX3BpZXJfNUdbQVI1NDE2X05VTV81R19DQUxfUElFUlNdOworCXU4CWNhbF9mcmVxX3BpZXJfMkdbQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxCisJCWNhbF9waWVyX2RhdGFfNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXSwKKwkJY2FsX3BpZXJfZGF0YV8yR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCisJLyogcG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeQorCQljYWxfdGd0X3B3cl81R1tBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXTsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odAorCQljYWxfdGd0X3B3cl81R19odDIwW0FSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlNdLAorCQljYWxfdGd0X3B3cl81R19odDQwW0FSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlNdOworCisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfbGVnYWN5CisJCWNhbF90Z3RfcHdyXzJHX2Nja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUFdSU10sCisJCWNhbF90Z3RfcHdyXzJHX29mZG1bQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTXTsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odAorCQljYWxfdGd0X3B3cl8yR19odDIwW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU10sCisJCWNhbF90Z3RfcHdyXzJHX2h0NDBbQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTXTsKKworCS8qIGNvbmZvcm1hbmNlIHRlc3RpbmcgbGltaXRzICovCisJdTgJY3RsX2luZGV4W0FSNTQxNl9OVU1fQ1RMU107CisJc3RydWN0IGFyOTE3MF9jYWxjdGxfZGF0YQorCQljdGxfZGF0YVtBUjU0MTZfTlVNX0NUTFNdOworCisJdTgJcGFkOworCV9fbGUxNglzdWJzeXN0ZW1faWQ7Cit9IF9fcGFja2VkOworCisjZW5kaWYgLyogX19BUjkxNzBfRUVQUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwOTFiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9ody5oCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogSGFyZHdhcmUtc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19BUjkxNzBfSFdfSAorI2RlZmluZSBfX0FSOTE3MF9IV19ICisKKyNkZWZpbmUgQVI5MTcwX01BWF9DTURfTEVOCTY0CisKK2VudW0gYXI5MTcwX2NtZCB7CisJQVI5MTcwX0NNRF9SUkVHCQk9IDB4MDAsCisJQVI5MTcwX0NNRF9XUkVHCQk9IDB4MDEsCisJQVI5MTcwX0NNRF9STUVNCQk9IDB4MDIsCisJQVI5MTcwX0NNRF9XTUVNCQk9IDB4MDMsCisJQVI5MTcwX0NNRF9CSVRBTkQJPSAweDA0LAorCUFSOTE3MF9DTURfQklUT1IJPSAweDA1LAorCUFSOTE3MF9DTURfRUtFWQkJPSAweDI4LAorCUFSOTE3MF9DTURfREtFWQkJPSAweDI5LAorCUFSOTE3MF9DTURfRlJFUVVFTkNZCT0gMHgzMCwKKwlBUjkxNzBfQ01EX1JGX0lOSVQJPSAweDMxLAorCUFSOTE3MF9DTURfU1lOVEgJPSAweDMyLAorCUFSOTE3MF9DTURfRlJFUV9TVEFSVAk9IDB4MzMsCisJQVI5MTcwX0NNRF9FQ0hPCQk9IDB4ODAsCisJQVI5MTcwX0NNRF9UQUxMWQk9IDB4ODEsCisJQVI5MTcwX0NNRF9UQUxMWV9BUEQJPSAweDgyLAorCUFSOTE3MF9DTURfQ09ORklHCT0gMHg4MywKKwlBUjkxNzBfQ01EX1JFU0VUCT0gMHg5MCwKKwlBUjkxNzBfQ01EX0RLUkVTRVQJPSAweDkxLAorCUFSOTE3MF9DTURfREtUWF9TVEFUVVMJPSAweDkyLAorCUFSOTE3MF9DTURfRkRDCQk9IDB4QTAsCisJQVI5MTcwX0NNRF9XUkVFUFJPTQk9IDB4QjAsCisJQVI5MTcwX0NNRF9XRkxBU0gJPSAweEIwLAorCUFSOTE3MF9DTURfRkxBU0hfRVJBU0UJPSAweEIxLAorCUFSOTE3MF9DTURfRkxBU0hfUFJPRwk9IDB4QjIsCisJQVI5MTcwX0NNRF9GTEFTSF9DSEtTVU0JPSAweEIzLAorCUFSOTE3MF9DTURfRkxBU0hfUkVBRAk9IDB4QjQsCisJQVI5MTcwX0NNRF9GV19ETF9JTklUCT0gMHhCNSwKKwlBUjkxNzBfQ01EX01FTV9XUkVFUFJPTQk9IDB4QkIsCit9OworCisvKiBlbmRwb2ludHMgKi8KKyNkZWZpbmUgQVI5MTcwX0VQX1RYCQkJCTEKKyNkZWZpbmUgQVI5MTcwX0VQX1JYCQkJCTIKKyNkZWZpbmUgQVI5MTcwX0VQX0lSUQkJCQkzCisjZGVmaW5lIEFSOTE3MF9FUF9DTUQJCQkJNAorCisjZGVmaW5lIEFSOTE3MF9FRVBST01fU1RBUlQJCQkweDE2MDAKKworI2RlZmluZSBBUjkxNzBfR1BJT19SRUdfQkFTRQkJCTB4MWQwMTAwCisjZGVmaW5lIEFSOTE3MF9HUElPX1JFR19QT1JUX1RZUEUJCUFSOTE3MF9HUElPX1JFR19CQVNFCisjZGVmaW5lIEFSOTE3MF9HUElPX1JFR19EQVRBCQkJKEFSOTE3MF9HUElPX1JFR19CQVNFICsgNCkKKyNkZWZpbmUgQVI5MTcwX05VTV9MRURTCQkJCTIKKworCisjZGVmaW5lIEFSOTE3MF9VU0JfUkVHX0JBU0UJCQkweDFlMTAwMAorI2RlZmluZSBBUjkxNzBfVVNCX1JFR19ETUFfQ1RMCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUJCUFSOTE3MF9ETUFfQ1RMX0VOQUJMRV9UT19ERVZJQ0UJCTB4MQorI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfRU5BQkxFX0ZST01fREVWSUNFCTB4MgorI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfSElHSF9TUEVFRAkJMHg0CisjZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9QQUNLRVRfTU9ERQkJMHg4CisKKyNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfTUFYX0FHR19VUExPQUQJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgxMTApCisjZGVmaW5lIEFSOTE3MF9VU0JfUkVHX1VQTE9BRF9USU1FX0NUTAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDExNCkKKworCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFTRQkJCTB4MWMzMDAwCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFNGX0wJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTE0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UU0ZfSAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MTgpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQVRJTV9XSU5ET1cJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MUMpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9QRVJJT0QJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MjApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1BSRVRCVFQJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTI0KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01BQ19BRERSX0wJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01BQ19BRERSX0gJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0wJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjE4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CU1NJRF9ICQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxYykKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9MCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjI0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjI4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RJTUVPVVQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MkMpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFTSUNfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUFOREFUT1JZX1JBVEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MzQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JUU19DVFNfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzOCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFDS09GRl9QUk9URUNUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjNjKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9USFJFU0hPTEQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NDApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1BFX0RFTEFZCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjRDKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0RZTkFNSUNfU0lGU19BQ0sJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NTgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1NOSUZGRVIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njc0KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9FTkFCTEVfUFJPTUlTQwlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfREVGQVVMVFMJCTB4MDIwMDAwMDAKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY3OCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkUJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX0RFRkFVTFRTCTB4NzAKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19NSVNDXzY4MAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ODApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYX1VOREVSUlVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njg4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0ZSQU1FVFlQRV9GSUxURVIJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2OGMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVNTT0NfUkVRCQlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BU1NPQ19SRVNQCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SRUFTU09DX1JFUQkJQklUKDIpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUkVBU1NPQ19SRVNQCQlCSVQoMykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QUkJfUkVRCQlCSVQoNCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QUkJfUkVTUAkJQklUKDUpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUNgkJCUJJVCg2KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDcJCQlCSVQoNykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CRUFDT04JCUJJVCg4KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FUSU0JCQlCSVQoOSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9ERUFTU09DCQlCSVQoMTApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVVUSAkJCUJJVCgxMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9ERUFVVEgJCUJJVCgxMikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQxMwkJQklUKDEzKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDE0CQlCSVQoMTQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMTUJCUJJVCgxNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CQVIJCQlCSVQoMjQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMjUJCUJJVCgyNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QU1BPTEwJCUJJVCgyNikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SVFMJCQlCSVQoMjcpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ1RTCQkJQklUKDI4KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FDSwkJCUJJVCgyOSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9DRkUJCQlCSVQoMzApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSwkJQklUKDMxKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTCQkweDA1MDBmZmZmCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfTU9OSVRPUgkJMHhmZDAwZmZmZgorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RPVEFMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZBMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ1JDMzIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkE0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9DUkMxNgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2QTgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX0VSUl9ERUNSWVBUSU9OX1VOSQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkFDKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9PVkVSUlVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkIwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9FUlJfREVDUllQVElPTl9NVUwJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZCQykKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfUkVUUlkJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkNDKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9UT1RBTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2RjQpCisKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfRVhURU5TSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjkwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19FSUZTX0FORF9TSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njk4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZGMCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9JQlNTCQkweGUwCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUAkJMHhhMQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfU1RBCQkweDIKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUwkJMHgzCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9ERUZBVUxUUwkoMHhmIDw8IDI0KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDcwNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzA4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMl9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDM19DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMEMpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDNF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIxNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjE4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIyOCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QkIwKQorI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfU1dGQ1MJCTB4MQorI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UCTB4NAorCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjMwKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI0NCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjQ4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDS19UQUJMRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEMwMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQU1QRFVfUlhfVEhSRVNICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QzUwKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYUlhfTVBJCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ3QykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfVFhfTVBJX01BU0sJMHgwMDAwMDAwZgorI2RlZmluZQkJQVI5MTcwX01BQ19UWFJYX01QSV9UWF9UT19NQVNLCTB4MDAwMGZmZjAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfUlhfTVBJX01BU0sJMHgwMDBmMDAwMAorI2RlZmluZQkJQVI5MTcwX01BQ19UWFJYX01QSV9SWF9UT19NQVNLCTB4ZmZmMDAwMDAKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fQUREUgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEODQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9MRU5HVEgJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEODgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9QTENQCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ5MCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0NUUkwJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDk0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fSFQxCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweERBMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0hUMgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEQTQpCisKKworI2RlZmluZSBBUjkxNzBfUFdSX1JFR19CQVNFCQkJMHgxRDQwMDAKKworI2RlZmluZSBBUjkxNzBfUFdSX1JFR19DTE9DS19TRUwJCShBUjkxNzBfUFdSX1JFR19CQVNFICsgMHgwMDgpCisjZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfNDBNSFoJMAorI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzIwXzIyTUhaCTEKKyNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl80MF80NE1IWgkyCisjZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfODBfODhNSFoJMworI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZCTB4NzAKKworCisvKiBwdXQgYmVhY29uIGhlcmUgaW4gbWVtb3J5ICovCisjZGVmaW5lIEFSOTE3MF9CRUFDT05fQlVGRkVSX0FERFJFU1MJCTB4MTE3OTAwCisKKworc3RydWN0IGFyOTE3MF90eF9jb250cm9sIHsKKwlfX2xlMTYgbGVuZ3RoOworCV9fbGUxNiBtYWNfY29udHJvbDsKKwlfX2xlMzIgcGh5X2NvbnRyb2w7CisJdTggZnJhbWVfZGF0YVswXTsKK30gX19wYWNrZWQ7CisKKy8qIHRoZXNlIGFyZSBlaXRoZXItb3IgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19QUk9UX1JUUwkJCTB4MDAwMQorI2RlZmluZSBBUjkxNzBfVFhfTUFDX1BST1RfQ1RTCQkJMHgwMDAyCisKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19OT19BQ0sJCQkweDAwMDQKKy8qIGlmIHVuc2V0LCBNQUMgd2lsbCBvbmx5IGRvIFNJRlMgc3BhY2UgYmVmb3JlIGZyYW1lICovCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfQkFDS09GRgkJCTB4MDAwOAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0JVUlNUCQkJMHgwMDEwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfQUdHUgkJCTB4MDAyMAorCisvKiBlbmNyeXB0aW9uIGlzIGEgdHdvLWJpdCBmaWVsZCAqLworI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfTk9ORQkJCTB4MDAwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfUkM0CQkJMHgwMDQwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfRU5DUl9DRU5DCQkJMHgwMDgwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfRU5DUl9BRVMJCQkweDAwYzAKKworI2RlZmluZSBBUjkxNzBfVFhfTUFDX01NSUMJCQkweDAxMDAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19IV19EVVJBVElPTgkJMHgwMjAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUU9TX1NISUZUCQkJMTAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19RT1NfTUFTSwkJCSgzIDw8IEFSOTE3MF9UWF9NQUNfUU9TX1NISUZUKQorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1JfUU9TX0JJVDEJCTB4MDQwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1JfUU9TX0JJVDIJCTB4MDgwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0RJU0FCTEVfVFhPUAkJMHgxMDAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfVFhPUF9SSUZTCQkJMHgyMDAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfSU1NX0FNUERVCQkJMHg0MDAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUkFURV9QUk9CRQkJMHg4MDAwCisKKy8qIGVpdGhlci1vciAqLworI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9DQ0sJCQkweDAwMDAwMDAwCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX09GRE0JCQkweDAwMDAwMDAxCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX0hUCQkJMHgwMDAwMDAwMgorCisvKiBkZXBlbmRzIG9uIG1vZHVsYXRpb24gKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9TSE9SVF9QUkVBTUJMRQkJMHgwMDAwMDAwNAorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0dSRUVORklFTEQJCTB4MDAwMDAwMDQKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXX1NISUZUCQkJMworI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXX01BU0sJCQkoMyA8PCBBUjkxNzBfVFhfUEhZX0JXX1NISUZUKQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXXzIwTUhaCQkJMAorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXXzQwTUhaCQkJMgorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXXzQwTUhaX0RVUAkJMworCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhfSEVBVllfQ0xJUF9TSElGVAk2CisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhfSEVBVllfQ0xJUF9NQVNLCSg3IDw8IEFSOTE3MF9UWF9QSFlfVFhfSEVBVllfQ0xJUF9TSElGVCkKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TSElGVAkJOQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9NQVNLCQkoMHgzZiA8PCBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TSElGVCkKKworLyogbm90IHBhcnQgb2YgdGhlIGh3LXNwZWMgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQJCQkyNQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1FPU19NQVNLCQkJKDMgPDwgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQpCisKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUCQkxNQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fTUFTSwkJKDcgPDwgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUKQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMQkJCTEKKy8qIHVzZSBmb3IgY2NrLCBvZmRtIDYvOS8xMi8xOC8yNCBhbmQgSFQgaWYgY2FwYWJsZSAqLworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMgkJCTUKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX01DU19TSElGVAkJCTE4CisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTUNTX01BU0sJCQkoMHg3ZiA8PCBBUjkxNzBfVFhfUEhZX01DU19TSElGVCkKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1NIT1JUX0dJCQkJMHg4MDAwMDAwMAorCitzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQgeworCXU4IHBsY3BbMTJdOworfTsKKworc3RydWN0IGFyOTE3MF9yeF90YWlsIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCByc3NpX2FudDAsIHJzc2lfYW50MSwgcnNzaV9hbnQyLAorCQkJICAgcnNzaV9hbnQweCwgcnNzaV9hbnQxeCwgcnNzaV9hbnQyeCwKKwkJCSAgIHJzc2lfY29tYmluZWQ7CisJCX07CisJCXU4IHJzc2lbN107CisJfTsKKworCXU4IGV2bV9zdHJlYW0wWzZdLCBldm1fc3RyZWFtMVs2XTsKKwl1OCBwaHlfZXJyOworCXU4IFNBaWR4LCBEQWlkeDsKKwl1OCBlcnJvcjsKKwl1OCBzdGF0dXM7Cit9OworCisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX05PTkUJCQkweDAKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfV0VQNjQJCQkweDEKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfVEtJUAkJCTB4MgorI2RlZmluZSBBUjkxNzBfRU5DX0FMR19BRVNDQ01QCQkJMHg0CisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX1dFUDEyOAkJCTB4NQorI2RlZmluZSBBUjkxNzBfRU5DX0FMR19XRVAyNTYJCQkweDYKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfQ0VOQwkJCTB4NworCisjZGVmaW5lIEFSOTE3MF9SWF9FTkNfU09GVFdBUkUJCQkweDgKKworc3RhdGljIGlubGluZSB1OCBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShzdHJ1Y3QgYXI5MTcwX3J4X3RhaWwgKnQpCit7CisJcmV0dXJuICh0LT5TQWlkeCAmIDB4YzApID4+IDQgfAorCSAgICAgICAodC0+REFpZHggJiAweGMwKSA+PiA2OworfQorCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9NQVNLCTB4MDMKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0NDSwkJMHgwMAorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fT0ZETQkweDAxCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9IVAkJMHgwMgorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fRFVQT0ZETQkweDAzCisKKy8qIGRlcGVuZHMgb24gbW9kdWxhdGlvbiAqLworI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX1NIT1JUX1BSRUFNQkxFCQkweDA4CisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfR1JFRU5GSUVMRAkJMHgwOAorCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NQVNLCQkweDMwCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9TSU5HTEUJCTB4MDAKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX0ZJUlNUCQkweDEwCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NSURETEUJCTB4MjAKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX0xBU1QJCTB4MzAKKworCisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9SWFRPCQkJMHgwMQorI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfT1ZFUlJVTgkJCTB4MDIKKyNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQJCQkweDA0CisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9GQ1MJCQkweDA4CisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9XUk9OR19SQQkJMHgxMAorI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfUExDUAkJCTB4MjAKKyNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX01NSUMJCQkweDQwCisKK3N0cnVjdCBhcjkxNzBfY21kX3R4X3N0YXR1cyB7CisJX19sZTE2IHVua247CisJdTggZHN0W0VUSF9BTEVOXTsKKwlfX2xlMzIgcmF0ZTsKKwlfX2xlMTYgc3RhdHVzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjkxNzBfVFhfU1RBVFVTX0NPTVBMRVRFCQkweDAwCisjZGVmaW5lIEFSOTE3MF9UWF9TVEFUVVNfUkVUUlkJCQkweDAxCisjZGVmaW5lIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVECQkJMHgwMgorCitzdHJ1Y3QgYXI5MTcwX2NtZF9iYV9mYWlsZWRfY291bnQgeworCV9fbGUxNiBmYWlsZWQ7CisJX19sZTE2IHJhdGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX2NtZF9yZXNwb25zZSB7CisJdTggZmxhZzsKKwl1OCB0eXBlOworCisJdW5pb24geworCQlzdHJ1Y3QgYXI5MTcwX2NtZF90eF9zdGF0dXMJCXR4X3N0YXR1czsKKwkJc3RydWN0IGFyOTE3MF9jbWRfYmFfZmFpbGVkX2NvdW50CWJhX2ZhaWxfY250OworCQl1OCBkYXRhWzBdOworCX07Cit9IF9fcGFja2VkOworCisvKiBRb1MgKi8KKworLyogbWFjODAyMTEgcXVldWUgdG8gSFcvRlcgbWFwICovCitzdGF0aWMgY29uc3QgdTggYXI5MTcwX3Fvc19od21hcFs0XSA9IHsgMywgMiwgMCwgMSB9OworCisvKiBIVy9GVyBxdWV1ZSB0byBtYWM4MDIxMSBtYXAgKi8KK3N0YXRpYyBjb25zdCB1OCBhcjkxNzBfcW9zX21hYzgwMjExbWFwWzRdID0geyAyLCAzLCAxLCAwIH07CisKK2VudW0gYXI5MTcwX3R4cSB7CisJQVI5MTcwX1RYUV9CRSwKKwlBUjkxNzBfVFhRX0JLLAorCUFSOTE3MF9UWFFfVkksCisJQVI5MTcwX1RYUV9WTywKKworCV9fQVI5MTcwX05VTV9UWFEsCit9OworCisjZW5kaWYgLyogX19BUjkxNzBfSFdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWNlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvbGVkLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBMRUQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImFyOTE3MC5oIgorI2luY2x1ZGUgImNtZC5oIgorCitpbnQgYXI5MTcwX3NldF9sZWRzX3N0YXRlKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgbGVkX3N0YXRlKQoreworCXJldHVybiBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfR1BJT19SRUdfREFUQSwgbGVkX3N0YXRlKTsKK30KKworaW50IGFyOTE3MF9pbml0X2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJaW50IGVycjsKKworCS8qIGRpc2FibGUgTEVEcyAqLworCS8qIEdQSU8gWzAvMSBtb2RlOiBvdXRwdXQsIDIvMzogaW5wdXRdICovCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX0dQSU9fUkVHX1BPUlRfVFlQRSwgMyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBHUElPIDAvMSB2YWx1ZTogb2ZmICovCisJZXJyID0gYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCAwKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKK3N0YXRpYyB2b2lkIGFyOTE3MF91cGRhdGVfbGVkcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFyOTE3MCwgbGVkX3dvcmsud29yayk7CisJaW50IGksIHRtcCwgYmxpbmtfZGVsYXkgPSAxMDAwOworCXUzMiBsZWRfdmFsID0gMDsKKwlib29sIHJlcnVuID0gZmFsc2U7CisKKwlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKKwkJcmV0dXJuIDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fTEVEUzsgaSsrKQorCQlpZiAoYXItPmxlZHNbaV0udG9nZ2xlZCkgeworCQkJbGVkX3ZhbCB8PSAxIDw8IGk7CisKKwkJCXRtcCA9IDcwICsgMjAwIC8gKGFyLT5sZWRzW2ldLnRvZ2dsZWQpOworCQkJaWYgKHRtcCA8IGJsaW5rX2RlbGF5KQorCQkJCWJsaW5rX2RlbGF5ID0gdG1wOworCisJCQlpZiAoYXItPmxlZHNbaV0udG9nZ2xlZCA+IDEpCisJCQkJYXItPmxlZHNbaV0udG9nZ2xlZCA9IDA7CisKKwkJCXJlcnVuID0gdHJ1ZTsKKwkJfQorCisJYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCBsZWRfdmFsKTsKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisKKwlpZiAocmVydW4pCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5sZWRfd29yaywKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKGJsaW5rX2RlbGF5KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLAorCQkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgYXI5MTcwX2xlZCAqYXJsID0gY29udGFpbmVyX29mKGxlZCwgc3RydWN0IGFyOTE3MF9sZWQsIGwpOworCXN0cnVjdCBhcjkxNzAgKmFyID0gYXJsLT5hcjsKKworCWFybC0+dG9nZ2xlZCsrOworCisJaWYgKGxpa2VseShJU19BQ0NFUFRJTkdfQ01EKGFyKSAmJiBicmlnaHRuZXNzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPmxlZF93b3JrLCBIWi8xMCk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXI5MTcwICphciwgaW50IGksIGNoYXIgKm5hbWUsCisJCQkgICAgICAgY2hhciAqdHJpZ2dlcikKK3sKKwlpbnQgZXJyOworCisJc25wcmludGYoYXItPmxlZHNbaV0ubmFtZSwgc2l6ZW9mKGFyLT5sZWRzW2ldLm5hbWUpLAorCQkgImFyOTE3MC0lczo6JXMiLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBuYW1lKTsKKworCWFyLT5sZWRzW2ldLmFyID0gYXI7CisJYXItPmxlZHNbaV0ubC5uYW1lID0gYXItPmxlZHNbaV0ubmFtZTsKKwlhci0+bGVkc1tpXS5sLmJyaWdodG5lc3Nfc2V0ID0gYXI5MTcwX2xlZF9icmlnaHRuZXNzX3NldDsKKwlhci0+bGVkc1tpXS5sLmJyaWdodG5lc3MgPSAwOworCWFyLT5sZWRzW2ldLmwuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoYXItPmh3LT53aXBoeSksCisJCQkJICAgICZhci0+bGVkc1tpXS5sKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgTEVEICglZCkuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgYXItPmxlZHNbaV0ubmFtZSwgZXJyKTsKKwllbHNlCisJCWFyLT5sZWRzW2ldLnJlZ2lzdGVyZWQgPSB0cnVlOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+bGVkX3dvcmspOworCisJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fTEVEUzsgaSsrKQorCQlpZiAoYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCkgeworCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFyLT5sZWRzW2ldLmwpOworCQkJYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCA9IGZhbHNlOworCQl9Cit9CisKK2ludCBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlpbnQgZXJyOworCisJSU5JVF9ERUxBWUVEX1dPUksoJmFyLT5sZWRfd29yaywgYXI5MTcwX3VwZGF0ZV9sZWRzKTsKKworCWVyciA9IGFyOTE3MF9yZWdpc3Rlcl9sZWQoYXIsIDAsICJ0eCIsCisJCQkJICBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGFyLT5odykpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCWVyciA9IGFyOTE3MF9yZWdpc3Rlcl9sZWQoYXIsIDEsICJhc3NvYyIsCisJCQkJIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoYXItPmh3KSk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJYXI5MTcwX3VucmVnaXN0ZXJfbGVkcyhhcik7CisJcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmEzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvbWFjLmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBNQUMgcHJvZ3JhbW1pbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKworaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMwX0NXLCBhci0+ZWRjZlswXS5jd19taW4gfAorCQkJKGFyLT5lZGNmWzBdLmN3X21heCA8PCAxNikpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzFfQ1csIGFyLT5lZGNmWzFdLmN3X21pbiB8CisJCQkoYXItPmVkY2ZbMV0uY3dfbWF4IDw8IDE2KSk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMl9DVywgYXItPmVkY2ZbMl0uY3dfbWluIHwKKwkJCShhci0+ZWRjZlsyXS5jd19tYXggPDwgMTYpKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0NXLCBhci0+ZWRjZlszXS5jd19taW4gfAorCQkJKGFyLT5lZGNmWzNdLmN3X21heCA8PCAxNikpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzRfQ1csIGFyLT5lZGNmWzRdLmN3X21pbiB8CisJCQkoYXItPmVkY2ZbNF0uY3dfbWF4IDw8IDE2KSk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMxX0FDMF9BSUZTLAorCQkJKChhci0+ZWRjZlswXS5haWZzICogOSArIDEwKSkgfAorCQkJKChhci0+ZWRjZlsxXS5haWZzICogOSArIDEwKSA8PCAxMikgfAorCQkJKChhci0+ZWRjZlsyXS5haWZzICogOSArIDEwKSA8PCAyNCkpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzNfQUMyX0FJRlMsCisJCQkoKGFyLT5lZGNmWzJdLmFpZnMgKiA5ICsgMTApID4+IDgpIHwKKwkJCSgoYXItPmVkY2ZbM10uYWlmcyAqIDkgKyAxMCkgPDwgNCkgfAorCQkJKChhci0+ZWRjZls0XS5haWZzICogOSArIDEwKSA8PCAxNikpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUCwKKwkJCWFyLT5lZGNmWzBdLnR4b3AgfCBhci0+ZWRjZlsxXS50eG9wIDw8IDE2KTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QLAorCQkJYXItPmVkY2ZbMV0udHhvcCB8IGFyLT5lZGNmWzNdLnR4b3AgPDwgMTYpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF9pbml0X21hYyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDS19FWFRFTlNJT04sIDB4NDApOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWCwgMCk7CisKKwkvKiBlbmFibGUgTU1JQyAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTklGRkVSLAorCQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9ERUZBVUxUUyk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUlhfVEhSRVNIT0xELCAweGMxZjgwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SWF9QRV9ERUxBWSwgMHg3MCk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0VJRlNfQU5EX1NJRlMsIDB4YTE0NDAwMCk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRSwgOSA8PCAxMCk7CisKKwkvKiBDRi1FTkQgbW9kZSAqLworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2IyYywgMHgxOTAwMDAwMCk7CisKKwkvKiBOQVYgcHJvdGVjdHMgQUNLIG9ubHkgKGluIFRYT1ApICovCisJYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYjM4LCAweDIwMSk7CisKKwkvKiBTZXQgQmVhY29uIFBIWSBDVFJMJ3MgVFBDIHRvIDB4NywgVEExPTEgKi8KKwkvKiBPVFVTIHNldCBBTSB0byAweDEgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX0hUMSwgMHg4MDAwMTcwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QsIDB4MTA1KTsKKworCS8qIEFHRyB0ZXN0IGNvZGUqLworCS8qIEFnZ3JlZ2F0aW9uIE1BWCBudW1iZXIgYW5kIHRpbWVvdXQgKi8KKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzNiOWMsIDB4MTAwMDBhKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAorCQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKKworCS8qIEVuYWJsZSBkZWFnZ3JlZ2F0b3IsIHJlc3BvbnNlIGluIHNuaWZmZXIgbW9kZSAqLworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2M0MCwgMHgxIHwgMTw8MzApOworCisJLyogcmF0ZSBzZXRzICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JBU0lDX1JBVEUsIDB4MTUwZik7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX01BTkRBVE9SWV9SQVRFLCAweDE1MGYpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUsIDB4MTBiMDFiYik7CisKKwkvKiBNSU1PIHJlc3BvbnNlIGNvbnRyb2wgKi8KKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzM2OTQsIDB4NDAwM0MxRSk7LyogYml0IDI2fjI4ICBvdHVzLUFNICovCisKKwkvKiBzd2l0Y2ggTUFDIHRvIE9UVVMgaW50ZXJmYWNlICovCisJYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjAwLCAweDMpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSCwgMHhmZmZmKTsKKworCS8qIHNldCBQSFkgcmVnaXN0ZXIgcmVhZCB0aW1lb3V0ICg/PykgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfTUlTQ182ODAsIDB4ZjAwMDA4KTsKKworCS8qIERpc2FibGUgUnggVGltZU91dCwgd29ya2Fyb3VuZCBmb3IgQkIuICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JYX1RJTUVPVVQsIDB4MCk7CisKKwkvKiBTZXQgQ1BVIGNsb2NrIGZyZXF1ZW5jeSB0byA4OC84ME1IeiAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfUFdSX1JFR19DTE9DS19TRUwsCisJCQlBUjkxNzBfUFdSX0NMS19BSEJfODBfODhNSFogfAorCQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZKTsKKworCS8qIFNldCBXTEFOIERNQSBpbnRlcnJ1cHQgbW9kZTogZ2VuZXJhdGUgaW50IHBlciBwYWNrZXQgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfVFhSWF9NUEksIDB4MTEwMDExKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNULAorCQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UKTsKKworCS8qIERpc2FibGVzIHRoZSBDRl9FTkQgZnJhbWUsIHVuZG9jdW1lbnRlZCByZWdpc3RlciAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19UWE9QX05PVF9FTk9VR0hfSU5ELAorCQkJMHgxNDFFMEY0OCk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisKKwlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9zZXRfbWFjX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTggKm1hYykKK3sKKwlzdGF0aWMgY29uc3QgdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKKworCWlmICghbWFjKQorCQltYWMgPSB6ZXJvOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZShyZWcsCisJCQkobWFjWzNdIDw8IDI0KSB8IChtYWNbMl0gPDwgMTYpIHwKKwkJCShtYWNbMV0gPDwgOCkgfCBtYWNbMF0pOworCisJYXI5MTcwX3JlZ3dyaXRlKHJlZyArIDQsIChtYWNbNV0gPDwgOCkgfCBtYWNbNF0pOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF91cGRhdGVfbXVsdGljYXN0KHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBlcnI7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ILAorCQlhci0+d2FudF9tY19oYXNoID4+IDMyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfTCwKKwkJYXItPndhbnRfbWNfaGFzaCk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFyLT5jdXJfbWNfaGFzaCA9IGFyLT53YW50X21jX2hhc2g7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBlcnI7CisKKwllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAorCQkJICAgICAgIGFyLT53YW50X2ZpbHRlcik7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYXItPmN1cl9maWx0ZXIgPSBhci0+d2FudF9maWx0ZXI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfc2V0X3Byb21pc2NvdW91cyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwl1MzIgZW5jcl9tb2RlLCBzbmlmZmVyOworCWludCBlcnI7CisKKwllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX1NOSUZGRVIsICZzbmlmZmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OLCAmZW5jcl9tb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGFyLT5zbmlmZmVyX2VuYWJsZWQpIHsKKwkJc25pZmZlciB8PSBBUjkxNzBfTUFDX1JFR19TTklGRkVSX0VOQUJMRV9QUk9NSVNDOworCisJCS8qCisJCSAqIFJ4IGRlY3J5cHRpb24gd29ya3MgaW4gcGxhY2UuCisJCSAqCisJCSAqIElmIHdlIGRvbid0IGRpc2FibGUgaXQsIHRoZSBoYXJkd2FyZSB3aWxsIHJlbmRlciBhbGwKKwkJICogZW5jcnlwdGVkIGZyYW1lcyB3aGljaCBhcmUgZW5jcnlwdGVkIHdpdGggYW4gdW5rbm93bgorCQkgKiBrZXkgdXNlbGVzcy4KKwkJICovCisKKwkJZW5jcl9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkU7CisJCWFyLT5zbmlmZmVyX2VuYWJsZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCXNuaWZmZXIgJj0gfkFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfRU5BQkxFX1BST01JU0M7CisKKwkJaWYgKGFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uKQorCQkJZW5jcl9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkU7CisJCWVsc2UKKwkJCWVuY3JfbW9kZSAmPSB+QVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRTsKKwl9CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OLCBlbmNyX21vZGUpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTklGRkVSLCBzbmlmZmVyKTsKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisKKwlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworfQorCitpbnQgYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwl1MzIgcG1fbW9kZSA9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0RFRkFVTFRTOworCXU4ICptYWNfYWRkciwgKmJzc2lkOworCWludCBlcnI7CisKKwlpZiAoYXItPnZpZikgeworCQltYWNfYWRkciA9IGFyLT5tYWNfYWRkcjsKKwkJYnNzaWQgPSBhci0+YnNzaWQ7CisKKwkJc3dpdGNoIChhci0+dmlmLT50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCXBtX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfSUJTUzsKKwkJCWJyZWFrOworLyoJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQOworCQkJYnJlYWs7Ki8KKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUzsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCQlhci0+c25pZmZlcl9lbmFibGVkID0gdHJ1ZTsKKwkJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcG1fbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9TVEE7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCW1hY19hZGRyID0gTlVMTDsKKwkJYnNzaWQgPSBOVUxMOworCX0KKworCWVyciA9IGFyOTE3MF9zZXRfbWFjX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTCwgbWFjX2FkZHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBhcjkxNzBfc2V0X21hY19yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0wsIGJzc2lkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gYXI5MTcwX3NldF9wcm9taXNjb3VvdXMoYXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1BPV0VSTUFOQUdFTUVOVCwgcG1fbW9kZSk7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChzdHJ1Y3QgYXI5MTcwICphciwgdW5zaWduZWQgaW50IG1heF9yZXRyeSkKK3sKKwl1MzIgdG1wID0gbWluX3QodTMyLCAweDMzMzMzLCBtYXhfcmV0cnkgKiAweDExMTExKTsKKworCXJldHVybiBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19SRVRSWV9NQVgsIHRtcCk7Cit9CisKK2ludCBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJdTMyIHYgPSAwOworCXUzMiBwcmV0YnR0ID0gMDsKKworCXYgfD0gYXItPmh3LT5jb25mLmJlYWNvbl9pbnQ7CisKKwlpZiAoYXItPnZpZikgeworCQlzd2l0Y2ggKGFyLT52aWYtPnR5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJdiB8PSBCSVQoMjUpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQl2IHw9IEJJVCgyNCk7CisJCQlwcmV0YnR0ID0gKGFyLT5ody0+Y29uZi5iZWFjb25faW50IC0gNikgPDwgMTY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJdiB8PSBhci0+dmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZCA8PCAxNjsKKwl9CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1BSRVRCVFQsIHByZXRidHQpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUEVSSU9ELCB2KTsKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF91cGRhdGVfYmVhY29uKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJX19sZTMyICpkYXRhLCAqb2xkID0gTlVMTDsKKwl1MzIgd29yZDsKKwlpbnQgaTsKKworCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGFyLT5odywgYXItPnZpZik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJZGF0YSA9IChfX2xlMzIgKilza2ItPmRhdGE7CisJaWYgKGFyLT5iZWFjb24pCisJCW9sZCA9IChfX2xlMzIgKilhci0+YmVhY29uLT5kYXRhOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKHNrYi0+bGVuLCA0KTsgaSsrKSB7CisJCS8qCisJCSAqIFhYWDogVGhpcyBhY2Nlc3NlcyBiZXlvbmQgc2tiIGRhdGEgZm9yIHVwCisJCSAqCXRvIHRoZSBsYXN0IDMgYnl0ZXMhIQorCQkgKi8KKworCQlpZiAob2xkICYmIChkYXRhW2ldID09IG9sZFtpXSkpCisJCQljb250aW51ZTsKKworCQl3b3JkID0gbGUzMl90b19jcHUoZGF0YVtpXSk7CisJCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfQkVBQ09OX0JVRkZFUl9BRERSRVNTICsgNCAqIGksIHdvcmQpOworCX0KKworCS8qIFhYWDogdXNlIHNrYi0+Y2IgaW5mbyAqLworCWlmIChhci0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX1BMQ1AsCisJCQkJKChza2ItPmxlbiArIDQpIDw8ICgzKzE2KSkgKyAweDA0MDApOworCWVsc2UKKwkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9QTENQLAorCQkJCSgoc2tiLT5sZW4gKyA0KSA8PCAoMysxNikpICsgMHgwNDAwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RILCBza2ItPmxlbiArIDQpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fQUREUiwgQVI5MTcwX0JFQUNPTl9CVUZGRVJfQUREUkVTUyk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMLCAxKTsKKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7CisJYXItPmJlYWNvbiA9IHNrYjsKKworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK3ZvaWQgYXI5MTcwX25ld19iZWFjb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsCisJCQkJCSBiZWFjb25fd29yayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQorCQlyZXR1cm4gOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWlmICghYXItPnZpZikKKwkJZ290byBvdXQ7CisKKwlhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJd2hpbGUgKChza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGFyLT5odywgYXItPnZpZikpKQorCQlhcjkxNzBfb3BfdHgoYXItPmh3LCBza2IpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitpbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKKwkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbikKK3sKKwlfX2xlMzIgdmFsc1s3XTsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0KKwkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJdTggZHVtbXk7CisKKwltYWMgPSBtYWMgPyA6IGJjYXN0OworCisJdmFsc1swXSA9IGNwdV90b19sZTMyKChrZXlpZHggPDwgMTYpICsgaWQpOworCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihtYWNbMV0gPDwgMjQgfCBtYWNbMF0gPDwgMTYgfCBrdHlwZSk7CisJdmFsc1syXSA9IGNwdV90b19sZTMyKG1hY1s1XSA8PCAyNCB8IG1hY1s0XSA8PCAxNiB8CisJCQkgICAgICBtYWNbM10gPDwgOCB8IG1hY1syXSk7CisJbWVtc2V0KCZ2YWxzWzNdLCAwLCAxNik7CisJaWYgKGtleWRhdGEpCisJCW1lbWNweSgmdmFsc1szXSwga2V5ZGF0YSwga2V5bGVuKTsKKworCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKKwkJCSAgICBzaXplb2YodmFscyksICh1OCAqKXZhbHMsCisJCQkgICAgMSwgJmR1bW15KTsKK30KKworaW50IGFyOTE3MF9kaXNhYmxlX2tleShzdHJ1Y3QgYXI5MTcwICphciwgdTggaWQpCit7CisJX19sZTMyIHZhbCA9IGNwdV90b19sZTMyKGlkKTsKKwl1OCBkdW1teTsKKworCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKKwkJCSAgICBzaXplb2YodmFsKSwgKHU4ICopJnZhbCwKKwkJCSAgICAxLCAmZHVtbXkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5NmZmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWluLmMKQEAgLTAsMCArMSwxNjcxIEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogbWFjODAyMTEgaW50ZXJhY3Rpb24gY29kZQorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImFyOTE3MC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiY21kLmgiCisKK3N0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0OworbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uLiIpOworCisjZGVmaW5lIFJBVEUoX2JpdHJhdGUsIF9od19yYXRlLCBfdHhwaWR4LCBfZmxhZ3MpIHsJXAorCS5iaXRyYXRlCT0gKF9iaXRyYXRlKSwJCQlcCisJLmZsYWdzCQk9IChfZmxhZ3MpLAkJCVwKKwkuaHdfdmFsdWUJPSAoX2h3X3JhdGUpIHwgKF90eHBpZHgpIDw8IDQsCVwKK30KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBfX2FyOTE3MF9yYXRldGFibGVbXSA9IHsKKwlSQVRFKDEwLCAwLCAwLCAwKSwKKwlSQVRFKDIwLCAxLCAxLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURSg1NSwgMiwgMiwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAorCVJBVEUoMTEwLCAzLCAzLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURSg2MCwgMHhiLCAwLCAwKSwKKwlSQVRFKDkwLCAweGYsIDAsIDApLAorCVJBVEUoMTIwLCAweGEsIDAsIDApLAorCVJBVEUoMTgwLCAweGUsIDAsIDApLAorCVJBVEUoMjQwLCAweDksIDAsIDApLAorCVJBVEUoMzYwLCAweGQsIDEsIDApLAorCVJBVEUoNDgwLCAweDgsIDIsIDApLAorCVJBVEUoNTQwLCAweGMsIDMsIDApLAorfTsKKyN1bmRlZiBSQVRFCisKKyNkZWZpbmUgYXI5MTcwX2dfcmF0ZXRhYmxlCShfX2FyOTE3MF9yYXRldGFibGUgKyAwKQorI2RlZmluZSBhcjkxNzBfZ19yYXRldGFibGVfc2l6ZQkxMgorI2RlZmluZSBhcjkxNzBfYV9yYXRldGFibGUJKF9fYXI5MTcwX3JhdGV0YWJsZSArIDQpCisjZGVmaW5lIGFyOTE3MF9hX3JhdGV0YWJsZV9zaXplCTgKKworLyoKKyAqIE5COiBUaGUgaHdfdmFsdWUgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zCisgKiAgICAgYXJyYXkgaW4gcGh5LmMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGZyZXF1ZW5jeSBsb29rdXBzIQorICovCisjZGVmaW5lIENIQU4oX2ZyZXEsIF9pZHgpIHsJCVwKKwkuY2VudGVyX2ZyZXEJPSAoX2ZyZXEpLAlcCisJLmh3X3ZhbHVlCT0gKF9pZHgpLAlcCisJLm1heF9wb3dlcgk9IDE4LCAvKiBYWFggKi8JXAorfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFyOTE3MF8yZ2h6X2NoYW50YWJsZVtdID0geworCUNIQU4oMjQxMiwgIDApLAorCUNIQU4oMjQxNywgIDEpLAorCUNIQU4oMjQyMiwgIDIpLAorCUNIQU4oMjQyNywgIDMpLAorCUNIQU4oMjQzMiwgIDQpLAorCUNIQU4oMjQzNywgIDUpLAorCUNIQU4oMjQ0MiwgIDYpLAorCUNIQU4oMjQ0NywgIDcpLAorCUNIQU4oMjQ1MiwgIDgpLAorCUNIQU4oMjQ1NywgIDkpLAorCUNIQU4oMjQ2MiwgMTApLAorCUNIQU4oMjQ2NywgMTEpLAorCUNIQU4oMjQ3MiwgMTIpLAorCUNIQU4oMjQ4NCwgMTMpLAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhcjkxNzBfNWdoel9jaGFudGFibGVbXSA9IHsKKwlDSEFOKDQ5MjAsIDE0KSwKKwlDSEFOKDQ5NDAsIDE1KSwKKwlDSEFOKDQ5NjAsIDE2KSwKKwlDSEFOKDQ5ODAsIDE3KSwKKwlDSEFOKDUwNDAsIDE4KSwKKwlDSEFOKDUwNjAsIDE5KSwKKwlDSEFOKDUwODAsIDIwKSwKKwlDSEFOKDUxODAsIDIxKSwKKwlDSEFOKDUyMDAsIDIyKSwKKwlDSEFOKDUyMjAsIDIzKSwKKwlDSEFOKDUyNDAsIDI0KSwKKwlDSEFOKDUyNjAsIDI1KSwKKwlDSEFOKDUyODAsIDI2KSwKKwlDSEFOKDUzMDAsIDI3KSwKKwlDSEFOKDUzMjAsIDI4KSwKKwlDSEFOKDU1MDAsIDI5KSwKKwlDSEFOKDU1MjAsIDMwKSwKKwlDSEFOKDU1NDAsIDMxKSwKKwlDSEFOKDU1NjAsIDMyKSwKKwlDSEFOKDU1ODAsIDMzKSwKKwlDSEFOKDU2MDAsIDM0KSwKKwlDSEFOKDU2MjAsIDM1KSwKKwlDSEFOKDU2NDAsIDM2KSwKKwlDSEFOKDU2NjAsIDM3KSwKKwlDSEFOKDU2ODAsIDM4KSwKKwlDSEFOKDU3MDAsIDM5KSwKKwlDSEFOKDU3NDUsIDQwKSwKKwlDSEFOKDU3NjUsIDQxKSwKKwlDSEFOKDU3ODUsIDQyKSwKKwlDSEFOKDU4MDUsIDQzKSwKKwlDSEFOKDU4MjUsIDQ0KSwKKwlDSEFOKDUxNzAsIDQ1KSwKKwlDSEFOKDUxOTAsIDQ2KSwKKwlDSEFOKDUyMTAsIDQ3KSwKKwlDSEFOKDUyMzAsIDQ4KSwKK307CisjdW5kZWYgQ0hBTgorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF8yR0h6ID0geworCS5jaGFubmVscwk9IGFyOTE3MF8yZ2h6X2NoYW50YWJsZSwKKwkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzJnaHpfY2hhbnRhYmxlKSwKKwkuYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGUsCisJLm5fYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGVfc2l6ZSwKK307CisKKyNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKKy8qCisgKiBJbiBjYXNlIHNvbWUgd2FudHMgd29ya3Mgd2l0aCBBUjkxNzAncyBjcmF6eSB0eF9zdGF0dXMgcXVldWVpbmcgdGVjaG5pcXVlcy4KKyAqIEhlIG1pZ2h0IG5lZWQgdGhpcyByYXRoZXIgdXNlZnVsIHByb2JpbmcgZnVuY3Rpb24uCisgKgorICogTk9URTogY2FsbGVyIG11c3QgaG9sZCB0aGUgcXVldWUncyBzcGlubG9jayEKKyAqLworCitzdGF0aWMgdm9pZCBhcjkxNzBfcHJpbnRfdHhoZWFkZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopdHhjLT5mcmFtZV9kYXRhOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA9PiBGUkFNRSBbc2tiOiVwLCBxdWV1ZTolZCwgREE6WyVwTV0gIgorCQkJICAibWFjX2NvbnRyb2w6JTA0eCwgcGh5X2NvbnRyb2w6JTA4eF1cbiIsCisJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHNrYiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCisJICAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSwgbGUxNl90b19jcHUodHhjLT5tYWNfY29udHJvbCksCisJICAgICAgIGxlMzJfdG9fY3B1KHR4Yy0+cGh5X2NvbnRyb2wpKTsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX2R1bXBfc3RhdGlvbl90eF9zdGF0dXNfcXVldWUoc3RydWN0IGFyOTE3MCAqYXIsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICItLS1bIGN1dCBoZXJlIF0tLS1cbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogJWQgZW50cmllcyBpbiB0eF9zdGF0dXMgcXVldWUuXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2JfcXVldWVfbGVuKHF1ZXVlKSk7CisKKwlza2JfcXVldWVfd2FsayhxdWV1ZSwgc2tiKSB7CisJCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKil0eGMtPmZyYW1lX2RhdGE7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgImluZGV4OiVkID0+IFxuIiwgaSk7CisJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIi0tLVsgZW5kIF0tLS1cbiIpOworfQorI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF81R0h6ID0geworCS5jaGFubmVscwk9IGFyOTE3MF81Z2h6X2NoYW50YWJsZSwKKwkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzVnaHpfY2hhbnRhYmxlKSwKKwkuYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGUsCisJLm5fYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGVfc2l6ZSwKK307CisKK3ZvaWQgYXI5MTcwX2hhbmRsZV90eF9zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIGJvb2wgdmFsaWRfc3RhdHVzLCB1MTYgdHhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOworCXVuc2lnbmVkIGludCByZXRyaWVzID0gMCwgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKKwlpZiAoaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoYXItPmh3LCBxdWV1ZSkpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGFyLT5odywgcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisKKwl0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aW5mbyk7CisKKwlzd2l0Y2ggKHR4X3N0YXR1cykgeworCWNhc2UgQVI5MTcwX1RYX1NUQVRVU19SRVRSWToKKwkJcmV0cmllcyA9IDI7CisJY2FzZSBBUjkxNzBfVFhfU1RBVFVTX0NPTVBMRVRFOgorCQl0eGluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJYnJlYWs7CisKKwljYXNlIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEOgorCQlyZXRyaWVzID0gYXItPmh3LT5jb25mLmxvbmdfZnJhbWVfbWF4X3R4X2NvdW50OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgdHhfc3RhdHVzIHJlc3BvbnNlICgleCkuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgdHhfc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZhbGlkX3N0YXR1cykKKwkJdHhpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSByZXRyaWVzICsgMTsKKworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCkpOworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShhci0+aHcsIHNrYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXI5MTcwX2ZpbmRfc2tiX2luX3F1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCQkJY29uc3QgdTggKm1hYywKKwkJCQkJCWNvbnN0IHUzMiBxdWV1ZSwKKwkJCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlza2JfcXVldWVfd2FsayhxLCBza2IpIHsKKwkJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7CisJCXUzMiB0eGNfcXVldWUgPSAobGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCkgJgorCQkJCUFSOTE3MF9UWF9QSFlfUU9TX01BU0spID4+CisJCQkJQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQ7CisKKwkJaWYgICgocXVldWUgIT0gdHhjX3F1ZXVlKSB8fAorCQkgICAgIChjb21wYXJlX2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpLCBtYWMpKSkKKwkJCWNvbnRpbnVlOworCisJCV9fc2tiX3VubGluayhza2IsIHEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBza2I7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICphcjkxNzBfZmluZF9xdWV1ZWRfc2tiKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1OCAqbWFjLAorCQkJCQkgICAgICBjb25zdCB1MzIgcXVldWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgZmlybXdhcmUgZG9lcyBub3QgdGVsbCB0byB3aGljaCAocXVldWVkKSBmcmFtZQorCSAqIHRoaXMgdHJhbnNtaXNzaW9uIHN0YXR1cyByZXBvcnQgYmVsb25ncyB0by4KKwkgKgorCSAqIFNvIHdlIGhhdmUgdG8gbWFrZSByaXNreSBndWVzc2VzIC0gd2l0aCB0aGUgc2NhcmNlIGluZm9ybWF0aW9uCisJICogdGhlIGZpcm13YXJlIHByb3ZpZGVkICgtPiBkZXN0aW5hdGlvbiBNQUMsIGFuZCBwaHlfY29udHJvbCkgLQorCSAqIGFuZCBob3BlIHRoYXQgd2UgcGlja2VkIHRoZSByaWdodCBvbmUuLi4KKwkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKGFyLT5odywgbWFjKTsKKworCWlmIChsaWtlbHkoc3RhKSkgeworCQlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfcHJpdiA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzdGFfcHJpdi0+dHhfc3RhdHVzW3F1ZXVlXSk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAobGlrZWx5KHNrYikpCisJCQlyZXR1cm4gc2tiOworCX0gZWxzZQorCQlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIHNjYW4gdGhlIHdhc3RlIHF1ZXVlIGZvciBjYW5kaWRhdGVzICovCisJc2tiID0gYXI5MTcwX2ZpbmRfc2tiX2luX3F1ZXVlKGFyLCBtYWMsIHF1ZXVlLAorCQkJCSAgICAgICAmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpOworCWlmICghc2tiKSB7CisJCS8qIHNvIGl0IHN0aWxsIF9tdXN0XyBiZSBpbiB0aGUgZ2xvYmFsIGxpc3QuICovCisJCXNrYiA9IGFyOTE3MF9maW5kX3NrYl9pbl9xdWV1ZShhciwgbWFjLCBxdWV1ZSwKKwkJCQkJICAgICAgICZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisJfQorCisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJaWYgKHVubGlrZWx5KCghc2tiKSAmJiBuZXRfcmF0ZWxpbWl0KCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVTUzpbJXBNXSBkb2VzIG5vdCBoYXZlIGFueSAiCisJCQkJIm91dHN0YW5kaW5nIGZyYW1lcyBpbiB0aGlzIHF1ZXVlICglZCkuXG4iLAorCQkJCXdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIG1hYywgcXVldWUpOworCX0KKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwlyZXR1cm4gc2tiOworfQorCisvKgorICogVGhpcyB3b3JrZXIgdHJpZXMgdG8ga2VlcCB0aGUgZ2xvYmFsIHR4X3N0YXR1cyBxdWV1ZSBlbXB0eS4KKyAqIFNvIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBpbmNvbWluZyB0eF9zdGF0dXMgcmVwb3J0cyBmb3IKKyAqIHVucmVnaXN0ZXJlZCBzdGF0aW9ucyBhcmUgYWx3YXlzIHN5bmNlZCB3aXRoIHRoZSBhY3R1YWwKKyAqIGZyYW1lIC0gd2hpY2ggd2UgdGhpbmsgLSBiZWxvbmdzIHRvLgorICovCisKK3N0YXRpYyB2b2lkIGFyOTE3MF90eF9zdGF0dXNfamFuaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFyOTE3MCwKKwkJCQkJIHR4X3N0YXR1c19qYW5pdG9yLndvcmspOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKKwkJcmV0dXJuIDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJLyogcmVjeWNsZSB0aGUgZ2FyYmFnZSBiYWNrIHRvIG1hYzgwMjExLi4uIG9uZSBieSBvbmUuICovCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpKSkgeworI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc3Bvc2UgcXVldWVkIGZyYW1lID0+XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwkJYXI5MTcwX2hhbmRsZV90eF9zdGF0dXMoYXIsIHNrYiwgZmFsc2UsCisJCQkJCUFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEKTsKKwl9CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhci0+Z2xvYmFsX3R4X3N0YXR1cykpKSB7CisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogbW92aW5nIGZyYW1lIGludG8gd2FzdGUgcXVldWUgPT5cbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKworCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisJCXNrYl9xdWV1ZV90YWlsKCZhci0+Z2xvYmFsX3R4X3N0YXR1c193YXN0ZSwgc2tiKTsKKwl9CisKKwkvKiByZWNhbGwgdGhlIGphbml0b3IgaW4gMTAwbXMgLSBpZiB0aGVyZSdzIGdhcmJhZ2UgaW4gdGhlIGNhbi4gKi8KKwlpZiAoc2tiX3F1ZXVlX2xlbigmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpID4gMCkKKwkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPnR4X3N0YXR1c19qYW5pdG9yLAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgYXI5MTcwICphciwKKwkJCQkJICAgdm9pZCAqYnVmLCB1MzIgbGVuKQoreworCXN0cnVjdCBhcjkxNzBfY21kX3Jlc3BvbnNlICpjbWQgPSAodm9pZCAqKSBidWY7CisKKwlpZiAoKGNtZC0+dHlwZSAmIDB4YzApICE9IDB4YzApIHsKKwkJYXItPmNhbGxiYWNrX2NtZChhciwgbGVuLCBidWYpOworCQlyZXR1cm47CisJfQorCisJLyogaGFyZHdhcmUgZXZlbnQgaGFuZGxlcnMgKi8KKwlzd2l0Y2ggKGNtZC0+dHlwZSkgeworCWNhc2UgMHhjMTogeworCQkvKgorCQkgKiBUWCBzdGF0dXMgbm90aWZpY2F0aW9uOgorCQkgKiBieXRlczogMGMgYzEgWFggWVkgTTEgTTIgTTMgTTQgTTUgTTYgUjQgUjMgUjIgUjEgUzIgUzEKKwkJICoKKwkJICogWFggYWx3YXlzIDgxCisJCSAqIFlZIGFsd2F5cyAwMAorCQkgKiBNMS1NNiBpcyB0aGUgTUFDIGFkZHJlc3MKKwkJICogUjEtUjQgaXMgdGhlIHRyYW5zbWl0IHJhdGUKKwkJICogUzEtUzIgaXMgdGhlIHRyYW5zbWl0IHN0YXR1cworCQkgKi8KKworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl1MzIgcXVldWUgPSAobGUzMl90b19jcHUoY21kLT50eF9zdGF0dXMucmF0ZSkgJgorCQkJICAgIEFSOTE3MF9UWF9QSFlfUU9TX01BU0spID4+IEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUOworCisJCXNrYiA9IGFyOTE3MF9maW5kX3F1ZXVlZF9za2IoYXIsIGNtZC0+dHhfc3RhdHVzLmRzdCwgcXVldWUpOworCQlpZiAodW5saWtlbHkoIXNrYikpCisJCQlyZXR1cm4gOworCisJCWFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKGFyLCBza2IsIHRydWUsCisJCQkJCWxlMTZfdG9fY3B1KGNtZC0+dHhfc3RhdHVzLnN0YXR1cykpOworCQlicmVhazsKKwkJfQorCisJY2FzZSAweGMwOgorCQkvKgorCQkgKiBwcmUtVEJUVCBldmVudAorCQkgKi8KKwkJaWYgKGFyLT52aWYgJiYgYXItPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCXF1ZXVlX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+YmVhY29uX3dvcmspOworCQlicmVhazsKKworCWNhc2UgMHhjMjoKKwkJLyoKKwkJICogKElCU1MpIGJlYWNvbiBzZW5kIG5vdGlmaWNhdGlvbgorCQkgKiBieXRlczogMDQgYzIgWFggWVkgQjQgQjMgQjIgQjEKKwkJICoKKwkJICogWFggYWx3YXlzIDgwCisJCSAqIFlZIGFsd2F5cyAwMAorCQkgKiBCMS1CNCAic2hvdWxkIiBiZSB0aGUgbnVtYmVyIG9mIHNlbmQgb3V0IGJlYWNvbnMuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgMHhjMzoKKwkJLyogRW5kIG9mIEF0aW0gV2luZG93ICovCisJCWJyZWFrOworCisJY2FzZSAweGM0OgorCWNhc2UgMHhjNToKKwkJLyogQmxvY2tBQ0sgZXZlbnRzICovCisJCWJyZWFrOworCisJY2FzZSAweGM2OgorCQkvKiBXYXRjaGRvZyBJbnRlcnJ1cHQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDB4Yzk6CisJCS8qIHJldHJhbnNtaXNzaW9uIGlzc3VlIC8gU0lGUy9FSUZTIGNvbGxpc2lvbiA/ISAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gInJlY2VpdmVkIHVuaGFuZGxlZCBldmVudCAleFxuIiwgY21kLT50eXBlKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImR1bXA6IiwgRFVNUF9QUkVGSVhfTk9ORSwgYnVmLCBsZW4pOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBJZiB0aGUgZnJhbWUgYWxpZ25tZW50IGlzIHJpZ2h0IChvciB0aGUga2VybmVsIGhhcworICogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpLCBhbmQgdGhlcmUKKyAqIGlzIG9ubHkgYSBzaW5nbGUgTVBEVSBpbiB0aGUgVVNCIGZyYW1lLCB0aGVuIHdlIGNhbgorICogc3VibWl0IHRvIG1hYzgwMjExIHRoZSBTS0IgZGlyZWN0bHkuIEhvd2V2ZXIsIHNpbmNlCisgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgcGFja2V0cyBpbiBvbmUgU0tCIGluIHN0cmVhbQorICogbW9kZSwgYW5kIHdlIG5lZWQgdG8gb2JzZXJ2ZSB0aGUgcHJvcGVyIG9yZGVyaW5nLAorICogdGhpcyBpcyBub24tdHJpdmlhbC4KKyAqLworc3RhdGljIHZvaWQgYXI5MTcwX2hhbmRsZV9tcGR1KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGFyOTE3MF9yeF9oZWFkICpoZWFkID0gKHZvaWQgKilidWY7CisJc3RydWN0IGFyOTE3MF9yeF90YWlsICp0YWlsOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKKwlpbnQgbXBkdV9sZW4sIGk7CisJdTggZXJyb3IsIGFudGVubmFzID0gMCwgZGVjcnlwdDsKKwlfX2xlMTYgZmM7CisJaW50IHJlc2VydmVkOworCisJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCisJCXJldHVybiA7CisKKwkvKiBSZWNlaXZlZCBNUERVICovCisJbXBkdV9sZW4gPSBsZW47CisJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCk7CisJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfdGFpbCk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQpICE9IDEyKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfdGFpbCkgIT0gMjQpOworCisJaWYgKG1wZHVfbGVuIDw9IEZDU19MRU4pCisJCXJldHVybjsKKworCXRhaWwgPSAodm9pZCAqKShidWYgKyBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSArIG1wZHVfbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWlmICh0YWlsLT5yc3NpW2ldICE9IDB4ODApCisJCQlhbnRlbm5hcyB8PSBCSVQoaSk7CisKKwkvKiBwb3N0LXByb2Nlc3MgUlNTSSAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCWlmICh0YWlsLT5yc3NpW2ldICYgMHg4MCkKKwkJCXRhaWwtPnJzc2lbaV0gPSAoKHRhaWwtPnJzc2lbaV0gJiAweDdmKSArIDEpICYgMHg3ZjsKKworCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisKKwlzdGF0dXMuYmFuZCA9IGFyLT5jaGFubmVsLT5iYW5kOworCXN0YXR1cy5mcmVxID0gYXItPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCXN0YXR1cy5zaWduYWwgPSBhci0+bm9pc2VbMF0gKyB0YWlsLT5yc3NpX2NvbWJpbmVkOworCXN0YXR1cy5ub2lzZSA9IGFyLT5ub2lzZVswXTsKKwlzdGF0dXMuYW50ZW5uYSA9IGFudGVubmFzOworCisJc3dpdGNoICh0YWlsLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fTUFTSykgeworCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0NDSzoKKwkJaWYgKHRhaWwtPnN0YXR1cyAmIEFSOTE3MF9SWF9TVEFUVVNfU0hPUlRfUFJFQU1CTEUpCisJCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOworCQlzd2l0Y2ggKGhlYWQtPnBsY3BbMF0pIHsKKwkJY2FzZSAweDBhOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDB4MTQ6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMHgzNzoKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAweDZlOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKCghYXItPnNuaWZmZXJfZW5hYmxlZCkgJiYgKG5ldF9yYXRlbGltaXQoKSkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwbGNwIGNjayByYXRlICIKKwkJCQkgICAgICAgIigleCkuXG4iLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLAorCQkJCSAgICAgICBoZWFkLT5wbGNwWzBdKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9PRkRNOgorCQlzd2l0Y2ggKGhlYWQtPnBsY3BbMF0gJiAweEYpIHsKKwkJY2FzZSAweEI6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMHhGOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDB4QToKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAweEU6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAzOworCQkJYnJlYWs7CisJCWNhc2UgMHg5OgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gNDsKKwkJCWJyZWFrOworCQljYXNlIDB4RDoKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDU7CisJCQlicmVhazsKKwkJY2FzZSAweDg6CisJCQlzdGF0dXMucmF0ZV9pZHggPSA2OworCQkJYnJlYWs7CisJCWNhc2UgMHhDOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gNzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKCghYXItPnNuaWZmZXJfZW5hYmxlZCkgJiYgKG5ldF9yYXRlbGltaXQoKSkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwbGNwIG9mZG0gcmF0ZSAiCisJCQkJICAgICAgICIoJXgpLlxuIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwKKwkJCQkgICAgICAgaGVhZC0+cGxjcFswXSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlzdGF0dXMucmF0ZV9pZHggKz0gNDsKKwkJYnJlYWs7CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fSFQ6CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fRFVQT0ZETToKKwkJLyogWFhYICovCisKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgbW9kdWxhdGlvblxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJcmV0dXJuOworCX0KKworCWVycm9yID0gdGFpbC0+ZXJyb3I7CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfTU1JQykgeworCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CisJCWVycm9yICY9IH5BUjkxNzBfUlhfRVJST1JfTU1JQzsKKwl9CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfUExDUCkgeworCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKKwkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9QTENQOworCX0KKworCWlmIChlcnJvciAmIEFSOTE3MF9SWF9FUlJPUl9GQ1MpIHsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9GQ1M7CisJfQorCisJZGVjcnlwdCA9IGFyOTE3MF9nZXRfZGVjcnlwdF90eXBlKHRhaWwpOworCWlmICghKGRlY3J5cHQgJiBBUjkxNzBfUlhfRU5DX1NPRlRXQVJFKSAmJgorCSAgICBkZWNyeXB0ICE9IEFSOTE3MF9FTkNfQUxHX05PTkUpCisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJLyogaWdub3JlIHdyb25nIFJBIGVycm9ycyAqLworCWVycm9yICY9IH5BUjkxNzBfUlhfRVJST1JfV1JPTkdfUkE7CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfREVDUllQVCkgeworCQllcnJvciAmPSB+QVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQ7CisKKwkJLyoKKwkJICogUnggZGVjcnlwdGlvbiBpcyBkb25lIGluIHBsYWNlLAorCQkgKiB0aGUgb3JpZ2luYWwgZGF0YSBpcyBsb3N0IGFueXdheS4KKwkJICovCisJCXJldHVybiA7CisJfQorCisJLyogZHJvcCBhbnkgb3RoZXIgZXJyb3IgZnJhbWVzICovCisJaWYgKChlcnJvcikgJiYgKG5ldF9yYXRlbGltaXQoKSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlcnJvcnM6ICUjeFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGVycm9yKTsKKwkJcmV0dXJuOworCX0KKworCWJ1ZiArPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKKwlmYyA9ICooX19sZTE2ICopYnVmOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKSkKKwkJcmVzZXJ2ZWQgPSAzMiArIDI7CisJZWxzZQorCQlyZXNlcnZlZCA9IDMyOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihtcGR1X2xlbiArIHJlc2VydmVkKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJc2tiX3Jlc2VydmUoc2tiLCByZXNlcnZlZCk7CisJbWVtY3B5KHNrYl9wdXQoc2tiLCBtcGR1X2xlbiksIGJ1ZiwgbXBkdV9sZW4pOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKGFyLT5odywgc2tiLCAmc3RhdHVzKTsKK30KKwordm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5zaWduZWQgaW50IGksIHRsZW4sIHJlc3BsZW47CisJdTggKnRidWYsICpyZXNwYnVmOworCisJdGJ1ZiA9IHNrYi0+ZGF0YTsKKwl0bGVuID0gc2tiLT5sZW47CisKKwl3aGlsZSAodGxlbiA+PSA0KSB7CisJCWludCBjbGVuID0gdGJ1ZlsxXSA8PCA4IHwgdGJ1ZlswXTsKKwkJaW50IHdsZW4gPSAoY2xlbiArIDMpICYgfjM7CisKKwkJLyoKKwkJICogcGFyc2Ugc3RyZWFtIChpZiBhbnkpCisJCSAqLworCQlpZiAodGJ1ZlsyXSAhPSAwIHx8IHRidWZbM10gIT0gMHg0ZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbWlzc2luZyB0YWchXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQkJcmV0dXJuIDsKKwkJfQorCQlpZiAod2xlbiA+IHRsZW4gLSA0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIFJYICglZCwgJWQsICVkKVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBjbGVuLCB3bGVuLCB0bGVuKTsKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJkYXRhOiAiLAorCQkJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJICAgICAgIDE2LCAxLCB0YnVmLCB0bGVuLCB0cnVlKTsKKwkJCXJldHVybiA7CisJCX0KKwkJcmVzcGxlbiA9IGNsZW47CisJCXJlc3BidWYgPSB0YnVmICsgNDsKKwkJdGJ1ZiArPSB3bGVuICsgNDsKKwkJdGxlbiAtPSB3bGVuICsgNDsKKworCQlpID0gMDsKKworCQkvKiB3ZWlyZCB0aGluZywgYnV0IHRoaXMgaXMgdGhlIHNhbWUgaW4gdGhlIG9yaWdpbmFsIGRyaXZlciAqLworCQl3aGlsZSAocmVzcGxlbiA+IDIgJiYgaSA8IDEyICYmCisJCSAgICAgICByZXNwYnVmWzBdID09IDB4ZmYgJiYgcmVzcGJ1ZlsxXSA9PSAweGZmKSB7CisJCQlpICs9IDI7CisJCQlyZXNwbGVuIC09IDI7CisJCQlyZXNwYnVmICs9IDI7CisJCX0KKworCQlpZiAocmVzcGxlbiA8IDQpCisJCQljb250aW51ZTsKKworCQkvKiBmb3VuZCB0aGUgNiAqIDB4ZmZmZiBtYXJrZXI/ICovCisJCWlmIChpID09IDEyKQorCQkJYXI5MTcwX2hhbmRsZV9jb21tYW5kX3Jlc3BvbnNlKGFyLCByZXNwYnVmLCByZXNwbGVuKTsKKwkJZWxzZQorCQkJYXI5MTcwX2hhbmRsZV9tcGR1KGFyLCByZXNwYnVmLCByZXNwbGVuKTsKKwl9CisKKwlpZiAodGxlbikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVmZmVyIHJlbWFpbnMhXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7Cit9CisKKyNkZWZpbmUgQVI5MTcwX0ZJTExfUVVFVUUocXVldWUsIGFpX2ZzLCBjd21pbiwgY3dtYXgsIF90eG9wKQkJXAorZG8gewkJCQkJCQkJCVwKKwlxdWV1ZS5haWZzID0gYWlfZnM7CQkJCQkJXAorCXF1ZXVlLmN3X21pbiA9IGN3bWluOwkJCQkJCVwKKwlxdWV1ZS5jd19tYXggPSBjd21heDsJCQkJCQlcCisJcXVldWUudHhvcCA9IF90eG9wOwkJCQkJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgYXI5MTcwX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciwgaTsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisKKwkvKiByZWluaXRpYWxpemUgcXVldWVzIHN0YXRpc3RpY3MgKi8KKwltZW1zZXQoJmFyLT50eF9zdGF0cywgMCwgc2l6ZW9mKGFyLT50eF9zdGF0cykpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyLT50eF9zdGF0cyk7IGkrKykKKwkJYXItPnR4X3N0YXRzW2ldLmxpbWl0ID0gODsKKworCS8qIHJlc2V0IFFvUyBkZWZhdWx0cyAqLworCUFSOTE3MF9GSUxMX1FVRVVFKGFyLT5lZGNmWzBdLCAzLCAxNSwgMTAyMywgIDApOyAvKiBCRVNUIEVGRk9SVCovCisJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbMV0sIDcsIDE1LCAxMDIzLCAgMCk7IC8qIEJBQ0tHUk9VTkQgKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlsyXSwgMiwgNywgICAgMTUsIDk0KTsgLyogVklERU8gKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlszXSwgMiwgMywgICAgIDcsIDQ3KTsgLyogVk9JQ0UgKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZls0XSwgMiwgMywgICAgIDcsICAwKTsgLyogU1BFQ0lBTCAqLworCisJZXJyID0gYXItPm9wZW4oYXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gYXI5MTcwX2luaXRfbWFjKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGFyOTE3MF9zZXRfcW9zKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGFyOTE3MF9pbml0X3BoeShhciwgSUVFRTgwMjExX0JBTkRfMkdIWik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZihhcik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBzdGFydCBETUEgKi8KKwllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjM2QzMCwgMHgxMDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJYXItPnN0YXRlID0gQVI5MTcwX1NUQVJURUQ7CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKworCWlmIChJU19TVEFSVEVEKGFyKSkKKwkJYXItPnN0YXRlID0gQVI5MTcwX0lETEU7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+dHhfc3RhdHVzX2phbml0b3IpOworCWNhbmNlbF93b3JrX3N5bmMoJmFyLT5maWx0ZXJfY29uZmlnX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJmFyLT5iZWFjb25fd29yayk7CisJc2tiX3F1ZXVlX3B1cmdlKCZhci0+Z2xvYmFsX3R4X3N0YXR1c193YXN0ZSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisKKwlpZiAoSVNfQUNDRVBUSU5HX0NNRChhcikpIHsKKwkJYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCAwKTsKKworCQkvKiBzdG9wIERNQSAqLworCQlhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjM2QzMCwgMCk7CisJCWFyLT5zdG9wKGFyKTsKKwl9CisKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7Cit9CisKK2ludCBhcjkxNzBfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlOworCXVuc2lnbmVkIGludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gTlVMTDsKKwl1MzIgcG93ZXIsIGNoYWluczsKKwl1MTYga2V5dHlwZSA9IDA7CisJdTE2IGxlbiwgaWN2ID0gMDsKKwlpbnQgZXJyOworCWJvb2wgdHhfc3RhdHVzOworCisJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwloZHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWxlbiA9IHNrYi0+bGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJaWYgKGFyLT50eF9zdGF0c1txdWV1ZV0ubGltaXQgPCBhci0+dHhfc3RhdHNbcXVldWVdLmxlbikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCWFyLT50eF9zdGF0c1txdWV1ZV0ubGVuKys7CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5jb3VudCsrOworCWlmIChhci0+dHhfc3RhdHNbcXVldWVdLmxpbWl0ID09IGFyLT50eF9zdGF0c1txdWV1ZV0ubGVuKQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgcXVldWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKworCXR4YyA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4YykpOworCisJdHhfc3RhdHVzID0gKCgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRSkgIT0gMCkgfHwKKwkJICAgICgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpICE9IDApKTsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQlpY3YgPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKworCQlzd2l0Y2ggKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcpIHsKKwkJY2FzZSBBTEdfV0VQOgorCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9SQzQ7CisJCQlicmVhazsKKwkJY2FzZSBBTEdfVEtJUDoKKwkJCWtleXR5cGUgPSBBUjkxNzBfVFhfTUFDX0VOQ1JfUkM0OworCQkJYnJlYWs7CisJCWNhc2UgQUxHX0NDTVA6CisJCQlrZXl0eXBlID0gQVI5MTcwX1RYX01BQ19FTkNSX0FFUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKKwkJCWdvdG8gZXJyX2RlcXVldWU7CisJCX0KKwl9CisKKwkvKiBMZW5ndGggKi8KKwl0eGMtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbiArIGljdiArIDQpOworCisJdHhjLT5tYWNfY29udHJvbCA9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04gfAorCQkJCSAgICAgICBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYpOworCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoYXI5MTcwX3Fvc19od21hcFtxdWV1ZV0gPDwKKwkJCQkJQVI5MTcwX1RYX01BQ19RT1NfU0hJRlQpOworCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoa2V5dHlwZSk7CisJdHhjLT5waHlfY29udHJvbCA9IGNwdV90b19sZTMyKDApOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19OT19BQ0spOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX0FHR1IpOworCisJdHhyYXRlID0gJmluZm8tPmNvbnRyb2wucmF0ZXNbMF07CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpCisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19QUk9UX0NUUyk7CisJZWxzZSBpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKKwkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1BST1RfUlRTKTsKKworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfR1JFRU5GSUVMRCk7CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoQVI5MTcwX1RYX1BIWV9TSE9SVF9QUkVBTUJMRSk7CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpCisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoQVI5MTcwX1RYX1BIWV9CV180ME1IWik7CisJLyogdGhpcyB3b3JrcyBiZWNhdXNlIDQwIE1IeiBpcyAyIGFuZCBkdXAgaXMgMyAqLworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfQldfNDBNSFpfRFVQKTsKKworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfU0hPUlRfR0kpOworCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7CisJCXUzMiByID0gdHhyYXRlLT5pZHg7CisJCXU4ICp0eHBvd2VyOworCisJCXIgPDw9IEFSOTE3MF9UWF9QSFlfTUNTX1NISUZUOworCQlpZiAoV0FSTl9PTihyICYgfkFSOTE3MF9UWF9QSFlfTUNTX01BU0spKQorCQkJZ290byBlcnJfZGVxdWV1ZTsKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihyICYgQVI5MTcwX1RYX1BIWV9NQ1NfTUFTSyk7CisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoQVI5MTcwX1RYX1BIWV9NT0RfSFQpOworCisJCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkgeworCQkJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCQl0eHBvd2VyID0gYXItPnBvd2VyXzVHX2h0NDA7CisJCQllbHNlCisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19odDQwOworCQl9IGVsc2UgeworCQkJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCQl0eHBvd2VyID0gYXItPnBvd2VyXzVHX2h0MjA7CisJCQllbHNlCisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19odDIwOworCQl9CisKKwkJcG93ZXIgPSB0eHBvd2VyWyh0eHJhdGUtPmlkeCkgJiA3XTsKKwl9IGVsc2UgeworCQl1OCAqdHhwb3dlcjsKKwkJdTMyIG1vZDsKKwkJdTMyIHBoeXJhdGU7CisJCXU4IGlkeCA9IHR4cmF0ZS0+aWR4OworCisJCWlmIChpbmZvLT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJCWlkeCArPSA0OworCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19sZWc7CisJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNOworCQl9IGVsc2UgeworCQkJaWYgKGlkeCA8IDQpIHsKKwkJCQl0eHBvd2VyID0gYXItPnBvd2VyXzJHX2NjazsKKwkJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9DQ0s7CisJCQl9IGVsc2UgeworCQkJCW1vZCA9IEFSOTE3MF9UWF9QSFlfTU9EX09GRE07CisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19vZmRtOworCQkJfQorCQl9CisKKwkJcmF0ZSA9ICZfX2FyOTE3MF9yYXRldGFibGVbaWR4XTsKKworCQlwaHlyYXRlID0gcmF0ZS0+aHdfdmFsdWUgJiAweEY7CisJCXBvd2VyID0gdHhwb3dlclsocmF0ZS0+aHdfdmFsdWUgJiAweDMwKSA+PiA0XTsKKwkJcGh5cmF0ZSA8PD0gQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQ7CisKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihtb2QpOworCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKHBoeXJhdGUpOworCX0KKworCXBvd2VyIDw8PSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TSElGVDsKKwlwb3dlciAmPSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9NQVNLOworCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIocG93ZXIpOworCisJLyogc2V0IFRYIGNoYWlucyAqLworCWlmIChhci0+ZWVwcm9tLnR4X21hc2sgPT0gMSkgeworCQljaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMTsKKwl9IGVsc2UgeworCQljaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMjsKKworCQkvKiA+PSAzNk0gbGVnYWN5IE9GRE0gLSB1c2Ugb25seSBvbmUgY2hhaW4gKi8KKwkJaWYgKHJhdGUgJiYgcmF0ZS0+Yml0cmF0ZSA+PSAzNjApCisJCQljaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMTsKKwl9CisJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihjaGFpbnMgPDwgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUKTsKKworCWlmICh0eF9zdGF0dXMpIHsKKwkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUpOworCQkvKgorCQkgKiBXQVJOSU5HOgorCQkgKiBQdXR0aW5nIHRoZSBRb1MgcXVldWUgYml0cyBpbnRvIGFuIHVuZXhwbG9yZWQgdGVycml0b3J5IGlzCisJCSAqIGNlcnRhaW5seSBub3QgZWxlZ2FudC4KKwkJICoKKwkJICogSW4gbXkgZGVmZW5zZTogVGhpcyBpZGVhIHByb3ZpZGVzIGEgcmVhc29uYWJsZSB3YXkgdG8KKwkJICogc211Z2dsZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiB0byB0aGUgdHhfc3RhdHVzIGNhbGxiYWNrLgorCQkgKiBBbHNvLCB0aGUgaWRlYSBiZWhpbmQgdGhpcyBiaXQtYWJ1c2UgY2FtZSBzdHJhaWdodCBmcm9tCisJCSAqIHRoZSBvcmlnaW5hbCBkcml2ZXIgY29kZS4KKwkJICovCisKKwkJdHhjLT5waHlfY29udHJvbCB8PQorCQkJY3B1X3RvX2xlMzIocXVldWUgPDwgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQpOworCisJCWlmIChpbmZvLT5jb250cm9sLnN0YSkgeworCQkJc3RhX2luZm8gPSAodm9pZCAqKSBpbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CisJCQlza2JfcXVldWVfdGFpbCgmc3RhX2luZm8tPnR4X3N0YXR1c1txdWV1ZV0sIHNrYik7CisJCX0gZWxzZSB7CisJCQlza2JfcXVldWVfdGFpbCgmYXItPmdsb2JhbF90eF9zdGF0dXMsIHNrYik7CisKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwKKwkJCQkJICAgJmFyLT50eF9zdGF0dXNfamFuaXRvciwKKwkJCQkJICAgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwkJfQorCX0KKworCWVyciA9IGFyLT50eChhciwgc2tiLCB0eF9zdGF0dXMsIDApOworCWlmICh1bmxpa2VseSh0eF9zdGF0dXMgJiYgZXJyKSkgeworCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpCisJCQlza2JfdW5saW5rKHNrYiwgJnN0YV9pbmZvLT50eF9zdGF0dXNbcXVldWVdKTsKKwkJZWxzZQorCQkJc2tiX3VubGluayhza2IsICZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisJfQorCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworZXJyX2RlcXVldWU6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKKwlhci0+dHhfc3RhdHNbcXVldWVdLmNvdW50LS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKworZXJyX2ZyZWU6CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisKKwlpZiAoYXItPnZpZikgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWFyLT52aWYgPSBjb25mLT52aWY7CisJbWVtY3B5KGFyLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQgfHwgKGFyLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpIHsKKwkJYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24gPSB0cnVlOworCQlhci0+ZGlzYWJsZV9vZmZsb2FkID0gdHJ1ZTsKKwl9CisKKwlhci0+Y3VyX2ZpbHRlciA9IDA7CisJYXItPndhbnRfZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTOworCWVyciA9IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9jazsKKworCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwlhci0+dmlmID0gTlVMTDsKKwlhci0+d2FudF9maWx0ZXIgPSAwOworCWFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyKTsKKwlhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOworCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7CisJYXItPmJlYWNvbiA9IE5VTEw7CisJYXItPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOworCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gZmFsc2U7CisJYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRCkgeworCQkvKiBUT0RPICovCisJCWVyciA9IDA7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMKSB7CisJCS8qIFRPRE8gKi8KKwkJZXJyID0gMDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQkvKiBUT0RPICovCisJCWVyciA9IDA7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKKwkJLyogVE9ETyAqLworCQllcnIgPSAwOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUykgeworCQkvKgorCQkgKiBpcyBpdCBsb25nX2ZyYW1lX21heF90eF9jb3VudCBvciBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ/CisJCSAqLworCisJCWVyciA9IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChhciwKKwkJCWFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpIHsKKwkJZXJyID0gYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJZXJyID0gYXI5MTcwX3NldF9jaGFubmVsKGFyLCBody0+Y29uZi5jaGFubmVsLAorCQkJCQkgQVI5MTcwX1JGSV9OT05FLCBBUjkxNzBfQldfMjApOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCS8qIGFkanVzdCBzbG90IHRpbWUgZm9yIDUgR0h6ICovCisJCWlmIChody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19TTE9UX1RJTUUsCisJCQkJCSAgICAgICA5IDw8IDEwKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfb3BfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQlNTSUQpIHsKKwkJbWVtY3B5KGFyLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJZXJyID0gYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJfQorCisJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHsKKwkJZXJyID0gYXI5MTcwX3VwZGF0ZV9iZWFjb24oYXIpOworCisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJZXJyID0gYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3NldF9maWx0ZXJzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLAorCQkJCQkgZmlsdGVyX2NvbmZpZ193b3JrKTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYXItPmZpbHRlcl9jaGFuZ2VkICYgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX1BST01JU0MpIHsKKwkJZXJyID0gYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoYXItPmZpbHRlcl9jaGFuZ2VkICYgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVCkgeworCQllcnIgPSBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChhcik7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoYXItPmZpbHRlcl9jaGFuZ2VkICYgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSKQorCQllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhcik7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCisJCQkJICAgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKworCS8qIG1hc2sgc3VwcG9ydGVkIGZsYWdzICovCisJKm5ld19mbGFncyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQ09OVFJPTCB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwKKwkJICAgICAgRklGX1BST01JU0NfSU5fQlNTOworCisJLyoKKwkgKiBXZSBjYW4gc3VwcG9ydCBtb3JlIGJ5IHNldHRpbmcgdGhlIHNuaWZmZXIgYml0IGFuZAorCSAqIHRoZW4gY2hlY2tpbmcgdGhlIGVycm9yIGZsYWdzLCBsYXRlci4KKwkgKi8KKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCQlhci0+d2FudF9tY19oYXNoID0gfjBVTEw7CisJCX0gZWxzZSB7CisJCQl1NjQgbWNoYXNoOworCQkJaW50IGk7CisKKwkJCS8qIGFsd2F5cyBnZXQgYnJvYWRjYXN0IGZyYW1lcyAqLworCQkJbWNoYXNoID0gMVVMTCA8PCAoMHhmZj4+Mik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7CisJCQkJaWYgKFdBUk5fT04oIW1jbGlzdCkpCisJCQkJCWJyZWFrOworCQkJCW1jaGFzaCB8PSAxVUxMIDw8IChtY2xpc3QtPmRtaV9hZGRyWzVdID4+IDIpOworCQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwkJCX0KKwkJYXItPndhbnRfbWNfaGFzaCA9IG1jaGFzaDsKKwkJfQorCQlhci0+ZmlsdGVyX2NoYW5nZWQgfD0gQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVDsKKwl9CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKSB7CisJCXUzMiBmaWx0ZXIgPSBBUjkxNzBfTUFDX1JFR19GVEZfUFNQT0xMIHwKKwkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX1JUUyB8CisJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DVFMgfAorCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQUNLIHwKKwkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX0NGRSB8CisJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DRkVfQUNLOworCisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQlhci0+d2FudF9maWx0ZXIgPSBhci0+Y3VyX2ZpbHRlciB8IGZpbHRlcjsKKwkJZWxzZQorCQkJYXItPndhbnRfZmlsdGVyID0gYXItPmN1cl9maWx0ZXIgJiB+ZmlsdGVyOworCisJCWFyLT5maWx0ZXJfY2hhbmdlZCB8PSBBUjkxNzBfRklMVEVSX0NIQU5HRURfRlJBTUVGSUxURVI7CisJfQorCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKKwkJYXItPnNuaWZmZXJfZW5hYmxlZCA9ICgoKm5ld19mbGFncykgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICE9IDA7CisJCWFyLT5maWx0ZXJfY2hhbmdlZCB8PSBBUjkxNzBfRklMVEVSX0NIQU5HRURfUFJPTUlTQzsKKwl9CisKKwlpZiAobGlrZWx5KElTX1NUQVJURUQoYXIpKSkKKwkJcXVldWVfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5maWx0ZXJfY29uZmlnX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCisJCQkJICAgICAgIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJYXItPnN0YXRlID0gYnNzX2NvbmYtPmFzc29jID8gQVI5MTcwX0FTU09DSUFURUQgOiBhci0+c3RhdGU7CisKKyNpZm5kZWYgQ09ORklHX0FSOTE3MF9MRURTCisJCS8qIGVuYWJsZSBhc3NvYyBMRUQuICovCisJCWVyciA9IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgYnNzX2NvbmYtPmFzc29jID8gMiA6IDApOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfSFQpIHsKKwkJLyogVE9ETyAqLworCQllcnIgPSAwOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJdTMyIHNsb3R0aW1lID0gMjA7CisKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKKwkJCXNsb3R0aW1lID0gOTsKKworCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfU0xPVF9USU1FLCBzbG90dGltZSA8PCAxMCk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykgeworCQl1MzIgY2NrLCBvZmRtOworCisJCWlmIChody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJCW9mZG0gPSBic3NfY29uZi0+YmFzaWNfcmF0ZXM7CisJCQljY2sgPSAwOworCQl9IGVsc2UgeworCQkJLyogZm91ciBjY2sgcmF0ZXMgKi8KKwkJCWNjayA9IGJzc19jb25mLT5iYXNpY19yYXRlcyAmIDB4ZjsKKwkJCW9mZG0gPSBic3NfY29uZi0+YmFzaWNfcmF0ZXMgPj4gNDsKKwkJfQorCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkFTSUNfUkFURSwKKwkJCQlvZmRtIDw8IDggfCBjY2spOworCX0KKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKwllcnIgPSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitzdGF0aWMgdTY0IGFyOTE3MF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVycjsKKwl1MzIgdHNmX2xvdzsKKwl1MzIgdHNmX2hpZ2g7CisJdTY0IHRzZjsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19UU0ZfTCwgJnRzZl9sb3cpOworCWlmICghZXJyKQorCQllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX1RTRl9ILCAmdHNmX2hpZ2gpOworCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKKworCWlmIChXQVJOX09OKGVycikpCisJCXJldHVybiAwOworCisJdHNmID0gdHNmX2hpZ2g7CisJdHNmID0gKHRzZiA8PCAzMikgfCB0c2ZfbG93OworCXJldHVybiB0c2Y7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgZXJyID0gMCwgaTsKKwl1OCBrdHlwZTsKKworCWlmICgoIWFyLT52aWYpIHx8IChhci0+ZGlzYWJsZV9vZmZsb2FkKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3dpdGNoIChrZXktPmFsZykgeworCWNhc2UgQUxHX1dFUDoKKwkJaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVA0MCkKKwkJCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfV0VQNjQ7CisJCWVsc2UKKwkJCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfV0VQMTI4OworCQlicmVhazsKKwljYXNlIEFMR19US0lQOgorCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX1RLSVA7CisJCWJyZWFrOworCWNhc2UgQUxHX0NDTVA6CisJCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfQUVTQ0NNUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJaWYgKGNtZCA9PSBTRVRfS0VZKSB7CisJCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKSB7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogZ3JvdXAga2V5cyBuZWVkIGFsbC16ZXJvZXMgYWRkcmVzcyAqLworCQlpZiAoIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkKKwkJCXN0YSA9IE5VTEw7CisKKwkJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJCWlmICghKGFyLT51c2Vka2V5cyAmIEJJVChpKSkpCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gNjQpIHsKKwkJCQlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IHRydWU7CisJCQkJYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJCQkJZXJyID0gLUVOT1NQQzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWkgPSA2NCArIGtleS0+a2V5aWR4OworCQl9CisKKwkJa2V5LT5od19rZXlfaWR4ID0gaTsKKworCQllcnIgPSBhcjkxNzBfdXBsb2FkX2tleShhciwgaSwgc3RhID8gc3RhLT5hZGRyIDogTlVMTCwga3R5cGUsIDAsCisJCQkJCWtleS0+a2V5LCBtaW5fdCh1OCwgMTYsIGtleS0+a2V5bGVuKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKKwkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBpLCBzdGEgPyBzdGEtPmFkZHIgOiBOVUxMLAorCQkJCQkJa3R5cGUsIDEsIGtleS0+a2V5ICsgMTYsIDE2KTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisKKwkJCS8qCisJCQkgKiBoYXJkd2FyZSBpcyBub3QgY2FwYWJsZSBnZW5lcmF0aW5nIHRoZSBNTUlDCisJCQkgKiBmb3IgZnJhZ21lbnRlZCBmcmFtZXMhCisJCQkgKi8KKwkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7CisJCX0KKworCQlpZiAoaSA8IDY0KQorCQkJYXItPnVzZWRrZXlzIHw9IEJJVChpKTsKKworCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgeworCQkJLyogVGhlIGRldmljZSBpcyBnb25lLi4uIHRvZ2V0aGVyIHdpdGggdGhlIGtleSA7LSkgKi8KKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IGFyOTE3MF9kaXNhYmxlX2tleShhciwga2V5LT5od19rZXlfaWR4KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCWlmIChrZXktPmh3X2tleV9pZHggPCA2NCkgeworCQkJYXItPnVzZWRrZXlzICY9IH5CSVQoa2V5LT5od19rZXlfaWR4KTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBrZXktPmh3X2tleV9pZHgsIE5VTEwsCisJCQkJCQlBUjkxNzBfRU5DX0FMR19OT05FLCAwLAorCQkJCQkJTlVMTCwgMCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCisJCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKKwkJCQllcnIgPSBhcjkxNzBfdXBsb2FkX2tleShhciwga2V5LT5od19rZXlfaWR4LAorCQkJCQkJCU5VTEwsCisJCQkJCQkJQVI5MTcwX0VOQ19BTEdfTk9ORSwgMSwKKwkJCQkJCQlOVUxMLCAwKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KKworCQl9CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9MLCBhci0+dXNlZGtleXMpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19ST0xMX0NBTExfVEJMX0gsIGFyLT51c2Vka2V5cyA+PiAzMik7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKmluZm8gPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1RBX05PVElGWV9BREQ6CisJCWZvciAoaSA9IDA7IGkgPCBhci0+aHctPnF1ZXVlczsgaSsrKQorCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaW5mby0+dHhfc3RhdHVzW2ldKTsKKwkJYnJlYWs7CisKKwljYXNlIFNUQV9OT1RJRllfUkVNT1ZFOgorCisJCS8qCisJCSAqIHRyYW5zZmVyIGFsbCBvdXRzdGFuZGluZyBmcmFtZXMgdGhhdCBuZWVkIGEgdHhfc3RhdHVzCisJCSAqIHJlcG9ydHMgdG8gdGhlIGdsb2JhbCB0eF9zdGF0dXMgcXVldWUKKwkJICovCisKKwkJZm9yIChpID0gMDsgaSA8IGFyLT5ody0+cXVldWVzOyBpKyspIHsKKwkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmluZm8tPnR4X3N0YXR1c1tpXSkpKSB7CisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBxdWV1ZWluZyBmcmFtZSBpbiAiCisJCQkJCSAgImdsb2JhbCB0eF9zdGF0dXMgcXVldWUgPT5cbiIsCisJCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCisJCQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOworI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLworCQkJCXNrYl9xdWV1ZV90YWlsKCZhci0+Z2xvYmFsX3R4X3N0YXR1cywgc2tiKTsKKwkJCX0KKwkJfQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+dHhfc3RhdHVzX2phbml0b3IsCisJCQkJICAgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCWVyciA9IGFyOTE3MF9yZWFkX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfVFhfUkVUUlksICZ2YWwpOworCWFyLT5zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCArPSB2YWw7CisKKwltZW1jcHkoc3RhdHMsICZhci0+c3RhdHMsIHNpemVvZigqc3RhdHMpKTsKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnR4X3N0YXRzKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisKKwlzcGluX2xvY2tfYmgoJmFyLT50eF9zdGF0c19sb2NrKTsKKwltZW1jcHkodHhfc3RhdHMsIGFyLT50eF9zdGF0cywgc2l6ZW9mKHR4X3N0YXRzWzBdKSAqIGh3LT5xdWV1ZXMpOworCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW0pCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwlpZiAoKHBhcmFtKSAmJiAhKHF1ZXVlID4gYXItPmh3LT5xdWV1ZXMpKSB7CisJCW1lbWNweSgmYXItPmVkY2ZbYXI5MTcwX3Fvc19od21hcFtxdWV1ZV1dLAorCQkgICAgICAgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKKworCQlyZXQgPSBhcjkxNzBfc2V0X3Fvcyhhcik7CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGFyOTE3MF9vcHMgPSB7CisJLnN0YXJ0CQkJPSBhcjkxNzBfb3Bfc3RhcnQsCisJLnN0b3AJCQk9IGFyOTE3MF9vcF9zdG9wLAorCS50eAkJCT0gYXI5MTcwX29wX3R4LAorCS5hZGRfaW50ZXJmYWNlCQk9IGFyOTE3MF9vcF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gYXI5MTcwX29wX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZwkJCT0gYXI5MTcwX29wX2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZQk9IGFyOTE3MF9vcF9jb25maWdfaW50ZXJmYWNlLAorCS5jb25maWd1cmVfZmlsdGVyCT0gYXI5MTcwX29wX2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZfdHgJCT0gYXI5MTcwX2NvbmZfdHgsCisJLmJzc19pbmZvX2NoYW5nZWQJPSBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZCwKKwkuZ2V0X3RzZgkJPSBhcjkxNzBfb3BfZ2V0X3RzZiwKKwkuc2V0X2tleQkJPSBhcjkxNzBfc2V0X2tleSwKKwkuc3RhX25vdGlmeQkJPSBhcjkxNzBfc3RhX25vdGlmeSwKKwkuZ2V0X3N0YXRzCQk9IGFyOTE3MF9nZXRfc3RhdHMsCisJLmdldF90eF9zdGF0cwkJPSBhcjkxNzBfZ2V0X3R4X3N0YXRzLAorfTsKKwordm9pZCAqYXI5MTcwX2FsbG9jKHNpemVfdCBwcml2X3NpemUpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGFyOTE3MCAqYXI7CisJaW50IGk7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhwcml2X3NpemUsICZhcjkxNzBfb3BzKTsKKwlpZiAoIWh3KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWFyID0gaHctPnByaXY7CisJYXItPmh3ID0gaHc7CisKKwltdXRleF9pbml0KCZhci0+bXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZhci0+Y21kbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFyLT50eF9zdGF0c19sb2NrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpOworCUlOSVRfV09SSygmYXItPmZpbHRlcl9jb25maWdfd29yaywgYXI5MTcwX3NldF9maWx0ZXJzKTsKKwlJTklUX1dPUksoJmFyLT5iZWFjb25fd29yaywgYXI5MTcwX25ld19iZWFjb24pOworCUlOSVRfREVMQVlFRF9XT1JLKCZhci0+dHhfc3RhdHVzX2phbml0b3IsIGFyOTE3MF90eF9zdGF0dXNfamFuaXRvcik7CisKKwkvKiBhbGwgaHcgc3VwcG9ydHMgMi40IEdIeiwgc28gc2V0IGNoYW5uZWwgdG8gMSBieSBkZWZhdWx0ICovCisJYXItPmNoYW5uZWwgPSAmYXI5MTcwXzJnaHpfY2hhbnRhYmxlWzBdOworCisJLyogZmlyc3QgcGFydCBvZiB3aXBoeSBpbml0ICovCisJYXItPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9XRFMpIHwKKwkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisJYXItPmh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJCSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKKwkJCSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCQkgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKKworCWFyLT5ody0+cXVldWVzID0gX19BUjkxNzBfTlVNX1RYUTsKKwlhci0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gODsKKwlhci0+aHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9zdGFfaW5mbyk7CisKKwlhci0+aHctPm1heF9yYXRlcyA9IDE7CisJYXItPmh3LT5tYXhfcmF0ZV90cmllcyA9IDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhci0+bm9pc2UpOyBpKyspCisJCWFyLT5ub2lzZVtpXSA9IC05NTsgLyogQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgKi8KKworCXJldHVybiBhcjsKK30KKworc3RhdGljIGludCBhcjkxNzBfcmVhZF9lZXByb20oc3RydWN0IGFyOTE3MCAqYXIpCit7CisjZGVmaW5lIFJXCTgJLyogbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQgYXQgb25jZSAqLworI2RlZmluZSBSQgkoc2l6ZW9mKHUzMikgKiBSVykKKwlERUNMQVJFX01BQ19CVUYobWJ1Zik7CisJdTggKmVlcHJvbSA9ICh2b2lkICopJmFyLT5lZXByb207CisJdTggKmFkZHIgPSBhci0+ZWVwcm9tLm1hY19hZGRyZXNzOworCV9fbGUzMiBvZmZzZXRzW1JXXTsKKwlpbnQgaSwgaiwgZXJyLCBiYW5kcyA9IDA7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKGFyLT5lZXByb20pICYgMyk7CisKKwlCVUlMRF9CVUdfT04oUkIgPiBBUjkxNzBfTUFYX0NNRF9MRU4gLSA0KTsKKyNpZm5kZWYgX19DSEVDS0VSX18KKwkvKiBkb24ndCB3YW50IHRvIGhhbmRsZSB0cmFpbGluZyByZW1haW5zICovCisJQlVJTERfQlVHX09OKHNpemVvZihhci0+ZWVwcm9tKSAlIFJCKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihhci0+ZWVwcm9tKS9SQjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBSVzsgaisrKQorCQkJb2Zmc2V0c1tqXSA9IGNwdV90b19sZTMyKEFSOTE3MF9FRVBST01fU1RBUlQgKworCQkJCQkJIFJCICogaSArIDQgKiBqKTsKKworCQllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfUlJFRywKKwkJCQkgICBSQiwgKHU4ICopICZvZmZzZXRzLAorCQkJCSAgIFJCLCBlZXByb20gKyBSQiAqIGkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKyN1bmRlZiBSVworI3VuZGVmIFJCCisKKwlpZiAoYXItPmVlcHJvbS5sZW5ndGggPT0gY3B1X3RvX2xlMTYoMHhGRkZGKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKGFyLT5lZXByb20ub3BlcmF0aW5nX2ZsYWdzICYgQVI5MTcwX09QRkxBR18yR0haKSB7CisJCWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmFyOTE3MF9iYW5kXzJHSHo7CisJCWJhbmRzKys7CisJfQorCWlmIChhci0+ZWVwcm9tLm9wZXJhdGluZ19mbGFncyAmIEFSOTE3MF9PUEZMQUdfNUdIWikgeworCQlhci0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZhcjkxNzBfYmFuZF81R0h6OworCQliYW5kcysrOworCX0KKwkvKgorCSAqIEkgbWVhc3VyZWQgdGhpcywgYSBiYW5kc3dpdGNoIHRha2VzIHJvdWdobHkKKwkgKiAxMzUgbXMgYW5kIGEgZnJlcXVlbmN5IHN3aXRjaCBhYm91dCA4MC4KKwkgKgorCSAqIEZJWE1FOiBtZWFzdXJlIHRoZXNlIHZhbHVlcyBhZ2FpbiBvbmNlIEVFUFJPTSBzZXR0aW5ncworCSAqCSAgYXJlIHVzZWQsIHRoYXQgd2lsbCBpbmZsdWVuY2UgdGhlbSEKKwkgKi8KKwlpZiAoYmFuZHMgPT0gMikKKwkJYXItPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTM1ICogMTAwMDsKKwllbHNlCisJCWFyLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDgwICogMTAwMDsKKworCS8qIHNlY29uZCBwYXJ0IG9mIHdpcGh5IGluaXQgKi8KKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihhci0+aHcsIGFkZHIpOworCisJcmV0dXJuIGJhbmRzID8gMCA6IC1FSU5WQUw7Cit9CisKK2ludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKworCS8qIHRyeSB0byByZWFkIEVFUFJPTSwgaW5pdCBNQUMgYWRkciAqLworCWVyciA9IGFyOTE3MF9yZWFkX2VlcHJvbShhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGFyLT5odyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gYXI5MTcwX2luaXRfbGVkcyhhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yZWc7CisKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKKwllcnIgPSBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yZWc7CisjZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCisKKwlkZXZfaW5mbyhwZGV2LCAiQXRoZXJvcyBBUjkxNzAgaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLAorCQkgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisKKwlyZXR1cm4gZXJyOworCitlcnJfdW5yZWc6CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXItPmh3KTsKKworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGFyOTE3MF91bnJlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyKQoreworI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworCWFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoYXIpOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXItPmh3KTsKKwltdXRleF9kZXN0cm95KCZhci0+bXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTIwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvcGh5LmMKQEAgLTAsMCArMSwxMjQwIEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogUEhZIGFuZCBSRiBjb2RlCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKworc3RhdGljIGludCBhcjkxNzBfaW5pdF9wb3dlcl9jYWwoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4OTkzYywgMHg3Zik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHg5OTM0LCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweDk5MzgsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTIzNCwgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhMjM4LCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzOGMsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTM5MCwgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhM2NjLCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzZDAsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTNkNCwgMHgzZjNmM2YzZik7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworc3RydWN0IGFyOTE3MF9waHlfaW5pdCB7CisJdTMyIHJlZywgXzVnaHpfMjAsIF81Z2h6XzQwLCBfMmdoel80MCwgXzJnaHpfMjA7Cit9OworCitzdGF0aWMgc3RydWN0IGFyOTE3MF9waHlfaW5pdCBhcjU0MTZfcGh5X2luaXRbXSA9IHsKKwl7IDB4MWM1ODAwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAorCXsgMHgxYzU4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIH0sCisJeyAweDFjNTgwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1ODBjLCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCB9LAorCXsgMHgxYzU4MTAsIDB4N2QxNGUwMDAsIDB4N2QxNGUwMDAsIDB4N2QxNGUwMDAsIDB4N2QxNGUwMDAsIH0sCisJeyAweDFjNTgxNCwgMHg5YzBhOWY2YiwgMHg5YzBhOWY2YiwgMHg5YzBhOWY2YiwgMHg5YzBhOWY2YiwgfSwKKwl7IDB4MWM1ODE4LCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCB9LAorCXsgMHgxYzU4MWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgfSwKKwl7IDB4MWM1ODI0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCB9LAorCXsgMHgxYzU4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIH0sCisJeyAweDFjNTgyYywgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgfSwKKwl7IDB4MWM1ODMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIH0sCisJeyAweDFjNTgzOCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKKwl7IDB4MWM1ODNjLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCB9LAorCXsgMHgxYzU4NDAsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIH0sCisJeyAweDFjNTg0NCwgMHgxMzcyMTYxZSwgMHgxMzcyMWMxZSwgMHgxMzcyMWMyNCwgMHgxMzcyMTZhNCwgfSwKKwl7IDB4MWM1ODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCB9LAorCXsgMHgxYzU4NGMsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIH0sCisJeyAweDFjNTg1MCwgMHg2YzQ4YjRlNCwgMHg2YzQ4YjRlNCwgMHg2YzQ4YjBlNCwgMHg2YzQ4YjBlNCwgfSwKKwl7IDB4MWM1ODU0LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCB9LAorCXsgMHgxYzU4NTgsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIH0sCisJeyAweDFjNTg1YywgMHgzMTM5NWM1ZSwgMHgzMTM5NWM1ZSwgMHgzMTM5NWM1ZSwgMHgzMTM5NWM1ZSwgfSwKKwl7IDB4MWM1ODYwLCAweDAwMDRkZDEwLCAweDAwMDRkZDEwLCAweDAwMDRkZDIwLCAweDAwMDRkZDIwLCB9LAorCXsgMHgxYzU4NjgsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIH0sCisJeyAweDFjNTg2YywgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgfSwKKwl7IDB4MWM1OTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5MDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTkwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA4OTgsIDB4MDAwMDA4OTgsIH0sCisJeyAweDFjNTkxOCwgMHgwMDAwMDExOCwgMHgwMDAwMDIzMCwgMHgwMDAwMDI2OCwgMHgwMDAwMDEzNCwgfSwKKwl7IDB4MWM1OTFjLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCB9LAorCXsgMHgxYzU5MjAsIDB4MDUxMDA4MWMsIDB4MDUxMDA4MWMsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIH0sCisJeyAweDFjNTkyNCwgMHhkMDA1OGExNSwgMHhkMDA1OGExNSwgMHhkMDA1OGExNSwgMHhkMDA1OGExNSwgfSwKKwl7IDB4MWM1OTI4LCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCB9LAorCXsgMHgxYzU5MmMsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIH0sCisJeyAweDFjNTkzNCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM1OTM4LCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzU5M2MsIDB4MDAwMDAwN2YsIDB4MDAwMDAwN2YsIDB4MDAwMDAwN2YsIDB4MDAwMDAwN2YsIH0sCisJeyAweDFjNTk0NCwgMHhkZmI4MTAyMCwgMHhkZmI4MTAyMCwgMHhkZmI4MTAyMCwgMHhkZmI4MTAyMCwgfSwKKwl7IDB4MWM1OTQ4LCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAweDkyODBiMjEyLCB9LAorCXsgMHgxYzU5NGMsIDB4MDAwMjAwMjgsIDB4MDAwMjAwMjgsIDB4MDAwMjAwMjgsIDB4MDAwMjAwMjgsIH0sCisJeyAweDFjNTk1NCwgMHg1ZDUwZTE4OCwgMHg1ZDUwZTE4OCwgMHg1ZDUwZTE4OCwgMHg1ZDUwZTE4OCwgfSwKKwl7IDB4MWM1OTU4LCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCB9LAorCXsgMHgxYzU5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCisJeyAweDFjNTk2NCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgfSwKKwl7IDB4MWM1OTcwLCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCB9LAorCXsgMHgxYzU5NzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk3OCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM1OTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5OGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5OTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5YTQsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIH0sCisJeyAweDFjNTlhOCwgMHgwMDFmZmYwMCwgMHgwMDFmZmYwMCwgMHgwMDFmZmYwMCwgMHgwMDFmZmYwMCwgfSwKKwl7IDB4MWM1OWFjLCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCB9LAorCXsgMHgxYzU5YjAsIDB4MDMwNTEwMDAsIDB4MDMwNTEwMDAsIDB4MDMwNTEwMDAsIDB4MDMwNTEwMDAsIH0sCisJeyAweDFjNTliNCwgMHgwMDAwMDgyMCwgMHgwMDAwMDgyMCwgMHgwMDAwMDgyMCwgMHgwMDAwMDgyMCwgfSwKKwl7IDB4MWM1OWMwLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCB9LAorCXsgMHgxYzU5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIH0sCisJeyAweDFjNTljOCwgMHg2MGY2NTMyYywgMHg2MGY2NTMyYywgMHg2MGY2NTMyYywgMHg2MGY2NTMyYywgfSwKKwl7IDB4MWM1OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCB9LAorCXsgMHgxYzU5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIH0sCisJeyAweDFjNTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTllMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgfSwKKwl7IDB4MWM1OWU0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCB9LAorCXsgMHgxYzU5ZTgsIDB4M2M3ODc4NzgsIDB4M2M3ODc4NzgsIDB4M2M3ODc4NzgsIDB4M2M3ODc4NzgsIH0sCisJeyAweDFjNTllYywgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgfSwKKwl7IDB4MWM1OWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ZmMsIDB4MDAwMDEwNDIsIDB4MDAwMDEwNDIsIDB4MDAwMDEwNDIsIDB4MDAwMDEwNDIsIH0sCisJeyAweDFjNWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YTA0LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCB9LAorCXsgMHgxYzVhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIH0sCisJeyAweDFjNWEwYywgMHgwMDAwMDFhMSwgMHgwMDAwMDFhMSwgMHgwMDAwMDE0MSwgMHgwMDAwMDE0MSwgfSwKKwl7IDB4MWM1YTEwLCAweDAwMDAwMWUxLCAweDAwMDAwMWUxLCAweDAwMDAwMTgxLCAweDAwMDAwMTgxLCB9LAorCXsgMHgxYzVhMTQsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIDB4MDAwMDAxYzEsIDB4MDAwMDAxYzEsIH0sCisJeyAweDFjNWExOCwgMHgwMDAwMDA2MSwgMHgwMDAwMDA2MSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM1YTFjLCAweDAwMDAwMTY4LCAweDAwMDAwMTY4LCAweDAwMDAwMDQxLCAweDAwMDAwMDQxLCB9LAorCXsgMHgxYzVhMjAsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTgsIH0sCisJeyAweDFjNWEyNCwgMHgwMDAwMDFlOCwgMHgwMDAwMDFlOCwgMHgwMDAwMDFlOCwgMHgwMDAwMDFlOCwgfSwKKwl7IDB4MWM1YTI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCB9LAorCXsgMHgxYzVhMmMsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjgsIH0sCisJeyAweDFjNWEzMCwgMHgwMDAwMDE4OSwgMHgwMDAwMDE4OSwgMHgwMDAwMDBhOCwgMHgwMDAwMDBhOCwgfSwKKwl7IDB4MWM1YTM0LCAweDAwMDAwMWM5LCAweDAwMDAwMWM5LCAweDAwMDAwMTY5LCAweDAwMDAwMTY5LCB9LAorCXsgMHgxYzVhMzgsIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIDB4MDAwMDAxYTksIDB4MDAwMDAxYTksIH0sCisJeyAweDFjNWEzYywgMHgwMDAwMDA0OSwgMHgwMDAwMDA0OSwgMHgwMDAwMDFlOSwgMHgwMDAwMDFlOSwgfSwKKwl7IDB4MWM1YTQwLCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCB9LAorCXsgMHgxYzVhNDQsIDB4MDAwMDAxNzAsIDB4MDAwMDAxNzAsIDB4MDAwMDAwNjksIDB4MDAwMDAwNjksIH0sCisJeyAweDFjNWE0OCwgMHgwMDAwMDFiMCwgMHgwMDAwMDFiMCwgMHgwMDAwMDE5MCwgMHgwMDAwMDE5MCwgfSwKKwl7IDB4MWM1YTRjLCAweDAwMDAwMWYwLCAweDAwMDAwMWYwLCAweDAwMDAwMWQwLCAweDAwMDAwMWQwLCB9LAorCXsgMHgxYzVhNTAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIH0sCisJeyAweDFjNWE1NCwgMHgwMDAwMDA3MCwgMHgwMDAwMDA3MCwgMHgwMDAwMDA1MCwgMHgwMDAwMDA1MCwgfSwKKwl7IDB4MWM1YTU4LCAweDAwMDAwMTkxLCAweDAwMDAwMTkxLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCB9LAorCXsgMHgxYzVhNWMsIDB4MDAwMDAxZDEsIDB4MDAwMDAxZDEsIDB4MDAwMDAxNTEsIDB4MDAwMDAxNTEsIH0sCisJeyAweDFjNWE2MCwgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMSwgMHgwMDAwMDE5MSwgMHgwMDAwMDE5MSwgfSwKKwl7IDB4MWM1YTY0LCAweDAwMDAwMDUxLCAweDAwMDAwMDUxLCAweDAwMDAwMWQxLCAweDAwMDAwMWQxLCB9LAorCXsgMHgxYzVhNjgsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIH0sCisJeyAweDFjNWE2YywgMHgwMDAwMDFiOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDA1MSwgMHgwMDAwMDA1MSwgfSwKKwl7IDB4MWM1YTcwLCAweDAwMDAwMWY4LCAweDAwMDAwMWY4LCAweDAwMDAwMTk4LCAweDAwMDAwMTk4LCB9LAorCXsgMHgxYzVhNzQsIDB4MDAwMDAwMzgsIDB4MDAwMDAwMzgsIDB4MDAwMDAxZDgsIDB4MDAwMDAxZDgsIH0sCisJeyAweDFjNWE3OCwgMHgwMDAwMDA3OCwgMHgwMDAwMDA3OCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgfSwKKwl7IDB4MWM1YTdjLCAweDAwMDAwMTk5LCAweDAwMDAwMTk5LCAweDAwMDAwMDU4LCAweDAwMDAwMDU4LCB9LAorCXsgMHgxYzVhODAsIDB4MDAwMDAxZDksIDB4MDAwMDAxZDksIDB4MDAwMDAwOTgsIDB4MDAwMDAwOTgsIH0sCisJeyAweDFjNWE4NCwgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgMHgwMDAwMDE1OSwgMHgwMDAwMDE1OSwgfSwKKwl7IDB4MWM1YTg4LCAweDAwMDAwMDU5LCAweDAwMDAwMDU5LCAweDAwMDAwMTk5LCAweDAwMDAwMTk5LCB9LAorCXsgMHgxYzVhOGMsIDB4MDAwMDAwOTksIDB4MDAwMDAwOTksIDB4MDAwMDAxZDksIDB4MDAwMDAxZDksIH0sCisJeyAweDFjNWE5MCwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgfSwKKwl7IDB4MWM1YTk0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMDU5LCAweDAwMDAwMDU5LCB9LAorCXsgMHgxYzVhOTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwOTksIDB4MDAwMDAwOTksIH0sCisJeyAweDFjNWE5YywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgfSwKKwl7IDB4MWM1YWEwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFhOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWFjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFiNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWI4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFjMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWM0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYzgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFjYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWQwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZDQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFkOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWRjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFlNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWU4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFmMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWY0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFmYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzViMDQsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCisJeyAweDFjNWIwOCwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgfSwKKwl7IDB4MWM1YjBjLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCB9LAorCXsgMHgxYzViMTAsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIH0sCisJeyAweDFjNWIxNCwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwNSwgfSwKKwl7IDB4MWM1YjE4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCB9LAorCXsgMHgxYzViMWMsIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIH0sCisJeyAweDFjNWIyMCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgfSwKKwl7IDB4MWM1YjI0LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCB9LAorCXsgMHgxYzViMjgsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIH0sCisJeyAweDFjNWIyYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgfSwKKwl7IDB4MWM1YjMwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCB9LAorCXsgMHgxYzViMzQsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIH0sCisJeyAweDFjNWIzOCwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgfSwKKwl7IDB4MWM1YjNjLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCB9LAorCXsgMHgxYzViNDAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIH0sCisJeyAweDFjNWI0NCwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgfSwKKwl7IDB4MWM1YjQ4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCB9LAorCXsgMHgxYzViNGMsIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIH0sCisJeyAweDFjNWI1MCwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgfSwKKwl7IDB4MWM1YjU0LCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCB9LAorCXsgMHgxYzViNTgsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIH0sCisJeyAweDFjNWI1YywgMHgwMDAwMDAxZCwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxZCwgfSwKKwl7IDB4MWM1YjYwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCB9LAorCXsgMHgxYzViNjQsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIH0sCisJeyAweDFjNWI2OCwgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiwgfSwKKwl7IDB4MWM1YjZjLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCB9LAorCXsgMHgxYzViNzAsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjQsIH0sCisJeyAweDFjNWI3NCwgMHgwMDAwMDAyNSwgMHgwMDAwMDAyNSwgMHgwMDAwMDAyNSwgMHgwMDAwMDAyNSwgfSwKKwl7IDB4MWM1Yjc4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCB9LAorCXsgMHgxYzViN2MsIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIH0sCisJeyAweDFjNWI4MCwgMHgwMDAwMDAyYSwgMHgwMDAwMDAyYSwgMHgwMDAwMDAyYSwgMHgwMDAwMDAyYSwgfSwKKwl7IDB4MWM1Yjg0LCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCB9LAorCXsgMHgxYzViODgsIDB4MDAwMDAwMmMsIDB4MDAwMDAwMmMsIDB4MDAwMDAwMmMsIDB4MDAwMDAwMmMsIH0sCisJeyAweDFjNWI4YywgMHgwMDAwMDAyZCwgMHgwMDAwMDAyZCwgMHgwMDAwMDAyZCwgMHgwMDAwMDAyZCwgfSwKKwl7IDB4MWM1YjkwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCB9LAorCXsgMHgxYzViOTQsIDB4MDAwMDAwMzEsIDB4MDAwMDAwMzEsIDB4MDAwMDAwMzEsIDB4MDAwMDAwMzEsIH0sCisJeyAweDFjNWI5OCwgMHgwMDAwMDAzMiwgMHgwMDAwMDAzMiwgMHgwMDAwMDAzMiwgMHgwMDAwMDAzMiwgfSwKKwl7IDB4MWM1YjljLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCB9LAorCXsgMHgxYzViYTAsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzQsIH0sCisJeyAweDFjNWJhNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmE4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYWMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJiMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmI0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYjgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJiYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmMwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYzQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJjOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmNjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZDAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJkNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmQ4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZGMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJlMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmU0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZTgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJlYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmYwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZjQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJmOCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgfSwKKwl7IDB4MWM1YmZjLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCB9LAorCXsgMHgxYzVjMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1Y2YwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWNmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1Y2ZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyMDAsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIH0sCisJeyAweDFjNjIwNCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgfSwKKwl7IDB4MWM2MjA4LCAweGQ2YmU0Nzg4LCAweGQ2YmU0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4LCB9LAorCXsgMHgxYzYyMGMsIDB4MDEyZTgxNjAsIDB4MDEyZTgxNjAsIDB4MDEyYTgxNjAsIDB4MDEyYTgxNjAsIH0sCisJeyAweDFjNjIxMCwgMHg0MDgwNjMzMywgMHg0MDgwNjMzMywgMHg0MDgwNjMzMywgMHg0MDgwNjMzMywgfSwKKwl7IDB4MWM2MjE0LCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCB9LAorCXsgMHgxYzYyMTgsIDB4MDA5YzQwNjAsIDB4MDA5YzQwNjAsIDB4MDA5YzQwNjAsIDB4MDA5YzQwNjAsIH0sCisJeyAweDFjNjIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgfSwKKwl7IDB4MWM2MjIwLCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAweDAxODgzMGM2LCB9LAorCXsgMHgxYzYyMjQsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MDAsIH0sCisJeyAweDFjNjIyOCwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgfSwKKwl7IDB4MWM2MjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyMzAsIDB4MDAwMDAxMDgsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIH0sCisJeyAweDFjNjIzNCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2MjM4LCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYyM2MsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIH0sCisJeyAweDFjNjI0MCwgMHgzODQ5MGEyMCwgMHgzODQ5MGEyMCwgMHgzODQ5MGEyMCwgMHgzODQ5MGEyMCwgfSwKKwl7IDB4MWM2MjQ0LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCB9LAorCXsgMHgxYzYyNDgsIDB4MGZmZjNmZmMsIDB4MGZmZjNmZmMsIDB4MGZmZjNmZmMsIDB4MGZmZjNmZmMsIH0sCisJeyAweDFjNjI0YywgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM2MjUwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCB9LAorCXsgMHgxYzYyNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjI1OCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgfSwKKwl7IDB4MWM2MjVjLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCB9LAorCXsgMHgxYzYyNjAsIDB4ZGZhOTFmMDEsIDB4ZGZhOTFmMDEsIDB4ZGZhOTFmMDEsIDB4ZGZhOTFmMDEsIH0sCisJeyAweDFjNjI2NCwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgfSwKKwl7IDB4MWM2MjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyNmMsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIH0sCisJeyAweDFjNjI3NCwgMHgwYTFhOWNhYSwgMHgwYTFhOWNhYSwgMHgwYTFhN2NhYSwgMHgwYTFhN2NhYSwgfSwKKwl7IDB4MWM2Mjc4LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAorCXsgMHgxYzYyN2MsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIH0sCisJeyAweDFjNjMwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgfSwKKwl7IDB4MWM2MzA0LCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDJlMDMyNDAyLCAweDJlMDMyNDAyLCB9LAorCXsgMHgxYzYzMDgsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYsIH0sCisJeyAweDFjNjMwYywgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg2MjFhNTQwYiwgMHg2MjFhNTQwYiwgfSwKKwl7IDB4MWM2MzEwLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDc2NGY2YzFiLCAweDc2NGY2YzFiLCB9LAorCXsgMHgxYzYzMTQsIDB4N2E0ZjZlMWIsIDB4N2E0ZjZlMWIsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEsIH0sCisJeyAweDFjNjMxOCwgMHg4YzViN2U1YSwgMHg4YzViN2U1YSwgMHg5NTBmOGNjZiwgMHg5NTBmOGNjZiwgfSwKKwl7IDB4MWM2MzFjLCAweDlkMGY5NmNmLCAweDlkMGY5NmNmLCAweGE1Y2Y5YjRmLCAweGE1Y2Y5YjRmLCB9LAorCXsgMHgxYzYzMjAsIDB4YjUxZmE2OWYsIDB4YjUxZmE2OWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYsIH0sCisJeyAweDFjNjMyNCwgMHhjYjNmYmQwNywgMHhjYjNmYmNiZiwgMHhkMWZmYzkzZiwgMHhkMWZmYzkzZiwgfSwKKwl7IDB4MWM2MzI4LCAweDAwMDBkN2JmLCAweDAwMDBkN2JmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjM0OCwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgfSwKKwl7IDB4MWM2MzRjLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCB9LAorCXsgMHgxYzYzNTAsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIH0sCisJeyAweDFjNjM1NCwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgfSwKKwl7IDB4MWM2MzU4LCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCB9LAorCXsgMHgxYzYzODgsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIH0sCisJeyAweDFjNjM4YywgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2MzkwLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYzOTQsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIH0sCisJeyAweDFjNjM5OCwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgfSwKKwl7IDB4MWM2MzljLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAorCXsgMHgxYzYzYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2E4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2I0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2NjLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYzZDAsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCisJeyAweDFjNjNkNCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2M2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzZGMsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIH0sCisJeyAweDFjNjNlMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDBjMCwgfSwKKwl7IDB4MWM2ODQ4LCAweDAwMTgwYTY1LCAweDAwMTgwYTY1LCAweDAwMTgwYTY4LCAweDAwMTgwYTY4LCB9LAorCXsgMHgxYzY5MjAsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIH0sCisJeyAweDFjNjk2MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgfSwKKwl7IDB4MWM3MjBjLCAweDAxMmU4MTYwLCAweDAxMmU4MTYwLCAweDAxMmE4MTYwLCAweDAxMmE4MTYwLCB9LAorCXsgMHgxYzcyNmMsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIH0sCisJeyAweDFjNzg0OCwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2OCwgMHgwMDE4MGE2OCwgfSwKKwl7IDB4MWM3OTIwLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAorCXsgMHgxYzc5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCisJeyAweDFjODIwYywgMHgwMTJlODE2MCwgMHgwMTJlODE2MCwgMHgwMTJhODE2MCwgMHgwMTJhODE2MCwgfSwKKwl7IDB4MWM4MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAorLyoJeyAweDFjODg2NCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgfSwgKi8KKwl7IDB4MWM4ODY0LCAweDAwMDFjNjAwLCAweDAwMDFjNjAwLCAweDAwMDFjNjAwLCAweDAwMDFjNjAwLCB9LAorCXsgMHgxYzg5NWMsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIH0sCisJeyAweDFjODk2OCwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgfSwKKwl7IDB4MWM4OWJjLCAweDAwMTgxNDAwLCAweDAwMTgxNDAwLCAweDAwMTgxNDAwLCAweDAwMTgxNDAwLCB9LAorCXsgMHgxYzkyNzAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIH0sCisJeyAweDFjOTM1YywgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgfSwKKwl7IDB4MWM5MzYwLCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCB9LAorCXsgMHgxYzkzNjQsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIH0sCisJeyAweDFjOTM2OCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgfSwKKwl7IDB4MWM5MzZjLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCB9LAorCXsgMHgxYzkzNzAsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIH0sCisJeyAweDFjOTM3NCwgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgfSwKKwl7IDB4MWM5Mzc4LCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCB9LAorCXsgMHgxYzkzN2MsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIH0sCisJeyAweDFjOTM4MCwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgfSwKKwl7IDB4MWM5Mzg0LCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCB9Cit9OworCitpbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJaW50IGksIGVycjsKKwl1MzIgdmFsOworCWJvb2wgaXNfMmdoeiA9IGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlib29sIGlzXzQwbWh6ID0gZmFsc2U7IC8qIFhYWDogZm9yIG5vdyAqLworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyNTQxNl9waHlfaW5pdCk7IGkrKykgeworCQlpZiAoaXNfNDBtaHopIHsKKwkJCWlmIChpc18yZ2h6KQorCQkJCXZhbCA9IGFyNTQxNl9waHlfaW5pdFtpXS5fMmdoel80MDsKKwkJCWVsc2UKKwkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzVnaHpfNDA7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfMmdoeikKKwkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7CisJCQllbHNlCisJCQkJdmFsID0gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOworCQl9CisKKwkJYXI5MTcwX3JlZ3dyaXRlKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcsIHZhbCk7CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogWFhYOiB1c2UgRUVQUk9NIGRhdGEgaGVyZSEgKi8KKworCWVyciA9IGFyOTE3MF9pbml0X3Bvd2VyX2NhbChhcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFhYWDogcmVtb3ZlIG1hZ2ljISAqLworCWlmIChpc18yZ2h6KQorCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAxNCwgMHg1MTYzKTsKKwllbHNlCisJCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDE0LCAweDUxNDMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RydWN0IGFyOTE3MF9yZl9pbml0IHsKKwl1MzIgcmVnLCBfNWdoeiwgXzJnaHo7Cit9OworCitzdGF0aWMgc3RydWN0IGFyOTE3MF9yZl9pbml0IGFyOTE3MF9yZl9pbml0W10gPSB7CisgICAgIC8qIGJhbmsgMCAqLworICAgICB7IDB4MWM1OGIwLCAgMHgxZTU3OTVlNSwgIDB4MWU1Nzk1ZTV9LAorICAgICB7IDB4MWM1OGUwLCAgMHgwMjAwODAyMCwgIDB4MDIwMDgwMjB9LAorICAgICAvKiBiYW5rIDEgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDIxMDg0MjEsICAweDAyMTA4NDIxfSwKKyAgICAgeyAweDFjNThlYywgIDB4MDAwMDAwMDgsICAweDAwMDAwMDA4fSwKKyAgICAgLyogYmFuayAyICovCisgICAgIHsgMHgxYzU4YjAsICAweDBlNzNmZjE3LCAgMHgwZTczZmYxN30sCisgICAgIHsgMHgxYzU4ZTAsICAweDAwMDAwNDIwLCAgMHgwMDAwMDQyMH0sCisgICAgIC8qIGJhbmsgMyAqLworICAgICB7IDB4MWM1OGYwLCAgMHgwMTQwMDAxOCwgIDB4MDFjMDAwMTh9LAorICAgICAvKiBiYW5rIDQgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAxYTEsICAweDAwMDAwMWExfSwKKyAgICAgeyAweDFjNThlOCwgIDB4MDAwMDAwMDEsICAweDAwMDAwMDAxfSwKKyAgICAgLyogYmFuayA1ICovCisgICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMDEzLCAgMHgwMDAwMDAxM30sCisgICAgIHsgMHgxYzU4ZTQsICAweDAwMDAwMDAyLCAgMHgwMDAwMDAwMn0sCisgICAgIC8qIGJhbmsgNiAqLworICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDgwMCwgIDB4MDAwMDQ4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNjAwMCwgIDB4MDAwMDYwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAwMCwgIDB4MDAwMDEwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDA4N2MwMCwgIDB4MDAwODdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNTQwMCwgIDB4MDAwMDU0MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwMCwgIDB4MDAwMDBjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgwMCwgIDB4MDAwMDE4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwM2MwMCwgIDB4MDAwMDNjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMzgwMCwgIDB4MDAwMDM4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMWMwMCwgIDB4MDAwMDFjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMCwgIDB4MDAwMDA4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDQwOCwgIDB4MDAwMDA0MDh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNGMxNSwgIDB4MDAwMDRjMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDE4OCwgIDB4MDAwMDQxODh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjAxZSwgIDB4MDAwMDIwMWV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAxMDQwOCwgIDB4MDAwMTA0MDh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMSwgIDB4MDAwMDA4MDF9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwOCwgIDB4MDAwMDBjMDh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgxZSwgIDB4MDAwMDE4MWV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAxNiwgIDB4MDAwMDEwMTZ9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjgwMCwgIDB4MDAwMDI4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAxMCwgIDB4MDAwMDQwMTB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgxYywgIDB4MDAwMDA4MWN9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDExNSwgIDB4MDAwMDAxMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDA2NiwgIDB4MDAwMDAwNjZ9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxYywgIDB4MDAwMDAwMWN9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwNCwgIDB4MDAwMDAwMDR9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxZiwgIDB4MDAwMDAwMWZ9LAorICAgICB7IDB4MWM1OGUwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDA0MDB9LAorICAgICAvKiBiYW5rIDcgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwYTAsICAweDAwMDAwMGEwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwNDAsICAweDAwMDAwMDQwfSwKKyAgICAgeyAweDFjNThmMCwgIDB4MDAwMDAwMWMsICAweDAwMDAwMDFjfSwKK307CisKK3N0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFua3NfMF83KHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6KQoreworCWludCBlcnIsIGk7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXI5MTcwX3JmX2luaXQpOyBpKyspCisJCWFyOTE3MF9yZWd3cml0ZShhcjkxNzBfcmZfaW5pdFtpXS5yZWcsCisJCQkJYmFuZDVnaHogPyBhcjkxNzBfcmZfaW5pdFtpXS5fNWdoegorCQkJCQkgOiBhcjkxNzBfcmZfaW5pdFtpXS5fMmdoeik7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJmIGluaXQgZmFpbGVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfaW5pdF9yZl9iYW5rNF9wd3Ioc3RydWN0IGFyOTE3MCAqYXIsIGJvb2wgYmFuZDVnaHosCisJCQkJICAgIHUzMiBmcmVxLCBlbnVtIGFyOTE3MF9idyBidykKK3sKKwlpbnQgZXJyOworCXUzMiBkMCwgZDEsIHRkMCwgdGQxLCBmZDAsIGZkMTsKKwl1OCBjaGFuc2VsOworCXU4IHJlZnNlbDAgPSAxLCByZWZzZWwxID0gMDsKKwl1OCBsZl9zeW50aCA9IDA7CisKKwlzd2l0Y2ggKGJ3KSB7CisJY2FzZSBBUjkxNzBfQldfNDBfQUJPVkU6CisJCWZyZXEgKz0gMTA7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX0JXXzQwX0JFTE9XOgorCQlmcmVxIC09IDEwOworCQlicmVhazsKKwljYXNlIEFSOTE3MF9CV18yMDoKKwkJYnJlYWs7CisJY2FzZSBfX0FSOTE3MF9OVU1fQlc6CisJCUJVRygpOworCX0KKworCWlmIChiYW5kNWdoeikgeworCQlpZiAoZnJlcSAlIDEwKSB7CisJCQljaGFuc2VsID0gKGZyZXEgLSA0ODAwKSAvIDU7CisJCX0gZWxzZSB7CisJCQljaGFuc2VsID0gKChmcmVxIC0gNDgwMCkgLyAxMCkgKiAyOworCQkJcmVmc2VsMCA9IDA7CisJCQlyZWZzZWwxID0gMTsKKwkJfQorCQljaGFuc2VsID0gYnl0ZV9yZXZfdGFibGVbY2hhbnNlbF07CisJfSBlbHNlIHsKKwkJaWYgKGZyZXEgPT0gMjQ4NCkgeworCQkJY2hhbnNlbCA9IDEwICsgKGZyZXEgLSAyMjc0KSAvIDU7CisJCQlsZl9zeW50aCA9IDE7CisJCX0gZWxzZQorCQkJY2hhbnNlbCA9IDE2ICsgKGZyZXEgLSAyMjcyKSAvIDU7CisJCWNoYW5zZWwgKj0gNDsKKwkJY2hhbnNlbCA9IGJ5dGVfcmV2X3RhYmxlW2NoYW5zZWxdOworCX0KKworCWQxID0JY2hhbnNlbDsKKwlkMCA9CTB4MjEgfAorCQlyZWZzZWwwIDw8IDMgfAorCQlyZWZzZWwxIDw8IDIgfAorCQlsZl9zeW50aCA8PCAxOworCXRkMCA9CWQwICYgMHgxZjsKKwl0ZDEgPQlkMSAmIDB4MWY7CisJZmQwID0JdGQxIDw8IDUgfCB0ZDA7CisKKwl0ZDAgPQkoZDAgPj4gNSkgJiAweDc7CisJdGQxID0JKGQxID4+IDUpICYgMHg3OworCWZkMSA9CXRkMSA8PCA1IHwgdGQwOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZSgweDFjNThiMCwgZmQwKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4ZTgsIGZkMSk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltc2xlZXAoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zIHsKKwl1OCBjb2VmZl9leHA7CisJdTE2IGNvZWZmX21hbjsKKwl1OCBjb2VmZl9leHBfc2hnaTsKKwl1MTYgY29lZmZfbWFuX3NoZ2k7Cit9OworCitzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX2VudHJ5IHsKKwl1MTYgZnJlcTsKKwlzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyBwYXJhbXNbX19BUjkxNzBfTlVNX0JXXTsKK307CisKKy8qIE5COiBtdXN0IGJlIGluIHN5bmMgd2l0aCBjaGFubmVsIHRhYmxlcyBpbiBtYWluISAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfZW50cnkgYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tdID0geworLyoKKyAqCWZyZXEsCisgKgkJMjBNSHosCisgKgkJNDBNSHogKGJlbG93KSwKKyAqCQk0ME1oeiAoYWJvdmUpLAorICovCisJeyAyNDEyLCB7CisJCXsgMywgMjE3MzcsIDMsIDE5NTYzLCB9LAorCQl7IDMsIDIxODI3LCAzLCAxOTY0NCwgfSwKKwkJeyAzLCAyMTY0NywgMywgMTk0ODIsIH0sCisJfSB9LAorCXsgMjQxNywgeworCQl7IDMsIDIxNjkyLCAzLCAxOTUyMywgfSwKKwkJeyAzLCAyMTc4MiwgMywgMTk2MDQsIH0sCisJCXsgMywgMjE2MDIsIDMsIDE5NDQyLCB9LAorCX0gfSwKKwl7IDI0MjIsIHsKKwkJeyAzLCAyMTY0NywgMywgMTk0ODIsIH0sCisJCXsgMywgMjE3MzcsIDMsIDE5NTYzLCB9LAorCQl7IDMsIDIxNTU4LCAzLCAxOTQwMiwgfSwKKwl9IH0sCisJeyAyNDI3LCB7CisJCXsgMywgMjE2MDIsIDMsIDE5NDQyLCB9LAorCQl7IDMsIDIxNjkyLCAzLCAxOTUyMywgfSwKKwkJeyAzLCAyMTUxNCwgMywgMTkzNjIsIH0sCisJfSB9LAorCXsgMjQzMiwgeworCQl7IDMsIDIxNTU4LCAzLCAxOTQwMiwgfSwKKwkJeyAzLCAyMTY0NywgMywgMTk0ODIsIH0sCisJCXsgMywgMjE0NzAsIDMsIDE5MzIzLCB9LAorCX0gfSwKKwl7IDI0MzcsIHsKKwkJeyAzLCAyMTUxNCwgMywgMTkzNjIsIH0sCisJCXsgMywgMjE2MDIsIDMsIDE5NDQyLCB9LAorCQl7IDMsIDIxNDI2LCAzLCAxOTI4MywgfSwKKwl9IH0sCisJeyAyNDQyLCB7CisJCXsgMywgMjE0NzAsIDMsIDE5MzIzLCB9LAorCQl7IDMsIDIxNTU4LCAzLCAxOTQwMiwgfSwKKwkJeyAzLCAyMTM4MiwgMywgMTkyNDQsIH0sCisJfSB9LAorCXsgMjQ0NywgeworCQl7IDMsIDIxNDI2LCAzLCAxOTI4MywgfSwKKwkJeyAzLCAyMTUxNCwgMywgMTkzNjIsIH0sCisJCXsgMywgMjEzMzksIDMsIDE5MjA1LCB9LAorCX0gfSwKKwl7IDI0NTIsIHsKKwkJeyAzLCAyMTM4MiwgMywgMTkyNDQsIH0sCisJCXsgMywgMjE0NzAsIDMsIDE5MzIzLCB9LAorCQl7IDMsIDIxMjk1LCAzLCAxOTE2NiwgfSwKKwl9IH0sCisJeyAyNDU3LCB7CisJCXsgMywgMjEzMzksIDMsIDE5MjA1LCB9LAorCQl7IDMsIDIxNDI2LCAzLCAxOTI4MywgfSwKKwkJeyAzLCAyMTI1MiwgMywgMTkxMjcsIH0sCisJfSB9LAorCXsgMjQ2MiwgeworCQl7IDMsIDIxMjk1LCAzLCAxOTE2NiwgfSwKKwkJeyAzLCAyMTM4MiwgMywgMTkyNDQsIH0sCisJCXsgMywgMjEyMDksIDMsIDE5MDg4LCB9LAorCX0gfSwKKwl7IDI0NjcsIHsKKwkJeyAzLCAyMTI1MiwgMywgMTkxMjcsIH0sCisJCXsgMywgMjEzMzksIDMsIDE5MjA1LCB9LAorCQl7IDMsIDIxMTY2LCAzLCAxOTA1MCwgfSwKKwl9IH0sCisJeyAyNDcyLCB7CisJCXsgMywgMjEyMDksIDMsIDE5MDg4LCB9LAorCQl7IDMsIDIxMjk1LCAzLCAxOTE2NiwgfSwKKwkJeyAzLCAyMTEyNCwgMywgMTkwMTEsIH0sCisJfSB9LAorCXsgMjQ4NCwgeworCQl7IDMsIDIxMTA3LCAzLCAxODk5NiwgfSwKKwkJeyAzLCAyMTE5MiwgMywgMTkwNzMsIH0sCisJCXsgMywgMjEwMjIsIDMsIDE4OTIwLCB9LAorCX0gfSwKKwl7IDQ5MjAsIHsKKwkJeyA0LCAyMTMxMywgNCwgMTkxODEsIH0sCisJCXsgNCwgMjEzNTYsIDQsIDE5MjIwLCB9LAorCQl7IDQsIDIxMjY5LCA0LCAxOTE0MiwgfSwKKwl9IH0sCisJeyA0OTQwLCB7CisJCXsgNCwgMjEyMjYsIDQsIDE5MTA0LCB9LAorCQl7IDQsIDIxMjY5LCA0LCAxOTE0MiwgfSwKKwkJeyA0LCAyMTE4MywgNCwgMTkwNjUsIH0sCisJfSB9LAorCXsgNDk2MCwgeworCQl7IDQsIDIxMTQxLCA0LCAxOTAyNywgfSwKKwkJeyA0LCAyMTE4MywgNCwgMTkwNjUsIH0sCisJCXsgNCwgMjEwOTgsIDQsIDE4OTg4LCB9LAorCX0gfSwKKwl7IDQ5ODAsIHsKKwkJeyA0LCAyMTA1NiwgNCwgMTg5NTAsIH0sCisJCXsgNCwgMjEwOTgsIDQsIDE4OTg4LCB9LAorCQl7IDQsIDIxMDE0LCA0LCAxODkxMiwgfSwKKwl9IH0sCisJeyA1MDQwLCB7CisJCXsgNCwgMjA4MDUsIDQsIDE4NzI1LCB9LAorCQl7IDQsIDIwODQ2LCA0LCAxODc2MiwgfSwKKwkJeyA0LCAyMDc2NCwgNCwgMTg2ODcsIH0sCisJfSB9LAorCXsgNTA2MCwgeworCQl7IDQsIDIwNzIzLCA0LCAxODY1MSwgfSwKKwkJeyA0LCAyMDc2NCwgNCwgMTg2ODcsIH0sCisJCXsgNCwgMjA2ODIsIDQsIDE4NjE0LCB9LAorCX0gfSwKKwl7IDUwODAsIHsKKwkJeyA0LCAyMDY0MSwgNCwgMTg1NzcsIH0sCisJCXsgNCwgMjA2ODIsIDQsIDE4NjE0LCB9LAorCQl7IDQsIDIwNjAxLCA0LCAxODU0MSwgfSwKKwl9IH0sCisJeyA1MTgwLCB7CisJCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAorCQl7IDQsIDIwMjgyLCA0LCAxODI1NCwgfSwKKwkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCisJfSB9LAorCXsgNTIwMCwgeworCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKKwkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCisJCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAorCX0gfSwKKwl7IDUyMjAsIHsKKwkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCisJCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAorCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKKwl9IH0sCisJeyA1MjQwLCB7CisJCXsgNCwgMjAwMTEsIDQsIDE4MDEwLCB9LAorCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKKwkJeyA0LCAxOTk3MywgNCwgMTc5NzYsIH0sCisJfSB9LAorCXsgNTI2MCwgeworCQl7IDQsIDE5OTM1LCA0LCAxNzk0MSwgfSwKKwkJeyA0LCAxOTk3MywgNCwgMTc5NzYsIH0sCisJCXsgNCwgMTk4OTcsIDQsIDE3OTA3LCB9LAorCX0gfSwKKwl7IDUyODAsIHsKKwkJeyA0LCAxOTg1OSwgNCwgMTc4NzMsIH0sCisJCXsgNCwgMTk4OTcsIDQsIDE3OTA3LCB9LAorCQl7IDQsIDE5ODIyLCA0LCAxNzg0MCwgfSwKKwl9IH0sCisJeyA1MzAwLCB7CisJCXsgNCwgMTk3ODQsIDQsIDE3ODA2LCB9LAorCQl7IDQsIDE5ODIyLCA0LCAxNzg0MCwgfSwKKwkJeyA0LCAxOTc0NywgNCwgMTc3NzIsIH0sCisJfSB9LAorCXsgNTMyMCwgeworCQl7IDQsIDE5NzEwLCA0LCAxNzczOSwgfSwKKwkJeyA0LCAxOTc0NywgNCwgMTc3NzIsIH0sCisJCXsgNCwgMTk2NzMsIDQsIDE3NzA2LCB9LAorCX0gfSwKKwl7IDU1MDAsIHsKKwkJeyA0LCAxOTA2NSwgNCwgMTcxNTksIH0sCisJCXsgNCwgMTkxMDAsIDQsIDE3MTkwLCB9LAorCQl7IDQsIDE5MDMwLCA0LCAxNzEyNywgfSwKKwl9IH0sCisJeyA1NTIwLCB7CisJCXsgNCwgMTg5OTYsIDQsIDE3MDk2LCB9LAorCQl7IDQsIDE5MDMwLCA0LCAxNzEyNywgfSwKKwkJeyA0LCAxODk2MiwgNCwgMTcwNjUsIH0sCisJfSB9LAorCXsgNTU0MCwgeworCQl7IDQsIDE4OTI3LCA0LCAxNzAzNSwgfSwKKwkJeyA0LCAxODk2MiwgNCwgMTcwNjUsIH0sCisJCXsgNCwgMTg4OTMsIDQsIDE3MDA0LCB9LAorCX0gfSwKKwl7IDU1NjAsIHsKKwkJeyA0LCAxODg1OSwgNCwgMTY5NzMsIH0sCisJCXsgNCwgMTg4OTMsIDQsIDE3MDA0LCB9LAorCQl7IDQsIDE4ODI1LCA0LCAxNjk0MywgfSwKKwl9IH0sCisJeyA1NTgwLCB7CisJCXsgNCwgMTg3OTIsIDQsIDE2OTEzLCB9LAorCQl7IDQsIDE4ODI1LCA0LCAxNjk0MywgfSwKKwkJeyA0LCAxODc1OCwgNCwgMTY4ODIsIH0sCisJfSB9LAorCXsgNTYwMCwgeworCQl7IDQsIDE4NzI1LCA0LCAxNjg1MiwgfSwKKwkJeyA0LCAxODc1OCwgNCwgMTY4ODIsIH0sCisJCXsgNCwgMTg2OTEsIDQsIDE2ODIyLCB9LAorCX0gfSwKKwl7IDU2MjAsIHsKKwkJeyA0LCAxODY1OCwgNCwgMTY3OTIsIH0sCisJCXsgNCwgMTg2OTEsIDQsIDE2ODIyLCB9LAorCQl7IDQsIDE4NjI1LCA0LCAxNjc2MiwgfSwKKwl9IH0sCisJeyA1NjQwLCB7CisJCXsgNCwgMTg1OTIsIDQsIDE2NzMzLCB9LAorCQl7IDQsIDE4NjI1LCA0LCAxNjc2MiwgfSwKKwkJeyA0LCAxODU1OSwgNCwgMTY3MDMsIH0sCisJfSB9LAorCXsgNTY2MCwgeworCQl7IDQsIDE4NTI2LCA0LCAxNjY3MywgfSwKKwkJeyA0LCAxODU1OSwgNCwgMTY3MDMsIH0sCisJCXsgNCwgMTg0OTMsIDQsIDE2NjQ0LCB9LAorCX0gfSwKKwl7IDU2ODAsIHsKKwkJeyA0LCAxODQ2MSwgNCwgMTY2MTUsIH0sCisJCXsgNCwgMTg0OTMsIDQsIDE2NjQ0LCB9LAorCQl7IDQsIDE4NDI4LCA0LCAxNjU4NiwgfSwKKwl9IH0sCisJeyA1NzAwLCB7CisJCXsgNCwgMTgzOTYsIDQsIDE2NTU2LCB9LAorCQl7IDQsIDE4NDI4LCA0LCAxNjU4NiwgfSwKKwkJeyA0LCAxODM2NCwgNCwgMTY1MjcsIH0sCisJfSB9LAorCXsgNTc0NSwgeworCQl7IDQsIDE4MjUyLCA0LCAxNjQyNywgfSwKKwkJeyA0LCAxODI4NCwgNCwgMTY0NTUsIH0sCisJCXsgNCwgMTgyMjAsIDQsIDE2Mzk4LCB9LAorCX0gfSwKKwl7IDU3NjUsIHsKKwkJeyA0LCAxODE4OSwgNSwgMzI3NDAsIH0sCisJCXsgNCwgMTgyMjAsIDQsIDE2Mzk4LCB9LAorCQl7IDQsIDE4MTU3LCA1LCAzMjY4MywgfSwKKwl9IH0sCisJeyA1Nzg1LCB7CisJCXsgNCwgMTgxMjYsIDUsIDMyNjI2LCB9LAorCQl7IDQsIDE4MTU3LCA1LCAzMjY4MywgfSwKKwkJeyA0LCAxODA5NCwgNSwgMzI1NzAsIH0sCisJfSB9LAorCXsgNTgwNSwgeworCQl7IDQsIDE4MDYzLCA1LCAzMjUxNCwgfSwKKwkJeyA0LCAxODA5NCwgNSwgMzI1NzAsIH0sCisJCXsgNCwgMTgwMzIsIDUsIDMyNDU4LCB9LAorCX0gfSwKKwl7IDU4MjUsIHsKKwkJeyA0LCAxODAwMSwgNSwgMzI0MDIsIH0sCisJCXsgNCwgMTgwMzIsIDUsIDMyNDU4LCB9LAorCQl7IDQsIDE3OTcwLCA1LCAzMjM0NywgfSwKKwl9IH0sCisJeyA1MTcwLCB7CisJCXsgNCwgMjAyODIsIDQsIDE4MjU0LCB9LAorCQl7IDQsIDIwMzIxLCA0LCAxODI4OSwgfSwKKwkJeyA0LCAyMDI0MywgNCwgMTgyMTksIH0sCisJfSB9LAorCXsgNTE5MCwgeworCQl7IDQsIDIwMjA0LCA0LCAxODE4MywgfSwKKwkJeyA0LCAyMDI0MywgNCwgMTgyMTksIH0sCisJCXsgNCwgMjAxNjUsIDQsIDE4MTQ4LCB9LAorCX0gfSwKKwl7IDUyMTAsIHsKKwkJeyA0LCAyMDEyNiwgNCwgMTgxMTQsIH0sCisJCXsgNCwgMjAxNjUsIDQsIDE4MTQ4LCB9LAorCQl7IDQsIDIwMDg4LCA0LCAxODA3OSwgfSwKKwl9IH0sCisJeyA1MjMwLCB7CisJCXsgNCwgMjAwNDksIDQsIDE4MDQ0LCB9LAorCQl7IDQsIDIwMDg4LCA0LCAxODA3OSwgfSwKKwkJeyA0LCAyMDAxMSwgNCwgMTgwMTAsIH0sCisJfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zICoKK2FyOTE3MF9nZXRfaHdfZHluX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgZW51bSBhcjkxNzBfYncgYncpCit7CisJdW5zaWduZWQgaW50IGNoYW5pZHggPSAwOworCXUxNiBmcmVxID0gMjQxMjsKKworCWlmIChjaGFubmVsKSB7CisJCWNoYW5pZHggPSBjaGFubmVsLT5od192YWx1ZTsKKwkJZnJlcSA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCX0KKworCUJVR19PTihjaGFuaWR4ID49IEFSUkFZX1NJWkUoYXI5MTcwX3BoeV9mcmVxX3BhcmFtcykpOworCisJQlVJTERfQlVHX09OKF9fQVI5MTcwX05VTV9CVyAhPSAzKTsKKworCVdBUk5fT04oYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tjaGFuaWR4XS5mcmVxICE9IGZyZXEpOworCisJcmV0dXJuICZhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zW2NoYW5pZHhdLnBhcmFtc1tid107Cit9CisKKworaW50IGFyOTE3MF9pbml0X3JmKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zICpmcmVxcGFyOworCV9fbGUzMiBjbWRbN107CisJaW50IGVycjsKKworCWVyciA9IGFyOTE3MF9pbml0X3JmX2JhbmtzXzBfNyhhciwgZmFsc2UpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rNF9wd3IoYXIsIGZhbHNlLCAyNDEyLCBBUjkxNzBfQldfMjApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmcmVxcGFyID0gYXI5MTcwX2dldF9od19keW5fcGFyYW1zKE5VTEwsIEFSOTE3MF9CV18yMCk7CisKKwljbWRbMF0gPSBjcHVfdG9fbGUzMigyNDEyICogMTAwMCk7CisJY21kWzFdID0gY3B1X3RvX2xlMzIoMCk7CisJY21kWzJdID0gY3B1X3RvX2xlMzIoMSk7CisJY21kWzNdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwKTsKKwljbWRbNF0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW4pOworCWNtZFs1XSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX2V4cF9zaGdpKTsKKwljbWRbNl0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW5fc2hnaSk7CisKKwkvKiBSRl9JTklUIGVjaG9lcyB0aGUgY29tbWFuZCBiYWNrIHRvIHVzICovCisJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1JGX0lOSVQsCisJCQkgICBzaXplb2YoY21kKSwgKHU4ICopY21kLAorCQkJICAgc2l6ZW9mKGNtZCksICh1OCAqKWNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1zbGVlcCgxMDAwKTsKKworCXJldHVybiBhcjkxNzBfZWNob190ZXN0KGFyLCAweGFhYmJjY2RkKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfZmluZF9mcmVxX2lkeChpbnQgbmZyZXFzLCB1OCAqZnJlcXMsIHU4IGYpCit7CisJaW50IGlkeCA9IG5mcmVxcyAtIDI7CisKKwl3aGlsZSAoaWR4ID49IDApIHsKKwkJaWYgKGYgPj0gZnJlcXNbaWR4XSkKKwkJCXJldHVybiBpZHg7CisJCWlkeC0tOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgczMyIGFyOTE3MF9pbnRlcnBvbGF0ZV9zMzIoczMyIHgsIHMzMiB4MSwgczMyIHkxLCBzMzIgeDIsIHMzMiB5MikKK3sKKwkvKiBub3RoaW5nIHRvIGludGVycG9sYXRlLCBpdCdzIGhvcml6b250YWwgKi8KKwlpZiAoeTIgPT0geTEpCisJCXJldHVybiB5MTsKKworCS8qIGNoZWNrIGlmIHdlIGhpdCBvbmUgb2YgdGhlIGVkZ2VzICovCisJaWYgKHggPT0geDEpCisJCXJldHVybiB5MTsKKwlpZiAoeCA9PSB4MikKKwkJcmV0dXJuIHkyOworCisJLyogeDEgPT0geDIgaXMgYmFkLCBob3BlZnVsbHkgPT0geCAqLworCWlmICh4MiA9PSB4MSkKKwkJcmV0dXJuIHkxOworCisJcmV0dXJuIHkxICsgKCgoeTIgLSB5MSkgKiAoeCAtIHgxKSkgLyAoeDIgLSB4MSkpOworfQorCitzdGF0aWMgdTggYXI5MTcwX2ludGVycG9sYXRlX3U4KHU4IHgsIHU4IHgxLCB1OCB5MSwgdTggeDIsIHU4IHkyKQoreworI2RlZmluZSBTSElGVAkJOAorCXMzMiB5OworCisJeSA9IGFyOTE3MF9pbnRlcnBvbGF0ZV9zMzIoeCA8PCBTSElGVCwKKwkJCQkgICB4MSA8PCBTSElGVCwgeTEgPDwgU0hJRlQsCisJCQkJICAgeDIgPDwgU0hJRlQsIHkyIDw8IFNISUZUKTsKKworCS8qCisJICogWFhYOiB1bndyYXAgdGhpcyBleHByZXNzaW9uCisJICoJSXNuJ3QgaXQganVzdCBESVZfUk9VTkRfVVAoeSwgMTw8U0hJRlQpPworCSAqCUNhbiB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWlzZSBhd2F5IHRoZSBkaXY/CisJICovCisJcmV0dXJuICh5ID4+IFNISUZUKSArICgoeSAmICgxPDwoU0hJRlQtMSkpKSA+PiAoU0hJRlQgLSAxKSk7CisjdW5kZWYgU0hJRlQKK30KKworc3RhdGljIGludCBhcjkxNzBfc2V0X3Bvd2VyX2NhbChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGZyZXEsIGVudW0gYXI5MTcwX2J3IGJ3KQoreworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSAqY3RwbDsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odCAqY3RwaDsKKwl1OCAqY3RwcmVzOworCWludCBudGFyZ2V0czsKKwlpbnQgaWR4LCBpLCBuOworCXU4IGFja3Bvd2VyLCBhY2tjaGFpbnMsIGY7CisJdTggcHdyX2ZyZXFzW0FSNTQxNl9NQVhfTlVNX1RHVF9QV1JTXTsKKworCWlmIChmcmVxIDwgMzAwMCkKKwkJZiA9IGZyZXEgLSAyMzAwOworCWVsc2UKKwkJZiA9IChmcmVxIC0gNDgwMCkvNTsKKworCS8qCisJICogY3ljbGUgdGhyb3VnaCB0aGUgdmFyaW91cyBtb2RlcworCSAqCisJICogbGVnYWN5IG1vZGVzIGZpcnN0OiA1RywgMkcgQ0NLLCAyRyBPRkRNCisJICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOiAvKiA1IEdIeiBsZWdhY3kgKi8KKwkJCWN0cGwgPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R1swXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV81R19UQVJHRVRfUFdSUzsKKwkJCWN0cHJlcyA9IGFyLT5wb3dlcl81R19sZWc7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiAyLjQgR0h6IENDSyAqLworCQkJY3RwbCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzJHX2Nja1swXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfMkdfY2NrOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogMi40IEdIeiBPRkRNICovCisJCQljdHBsID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfMkdfb2ZkbVswXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX29mZG07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisKKwkJZm9yIChuID0gMDsgbiA8IG50YXJnZXRzOyBuKyspIHsKKwkJCWlmIChjdHBsW25dLmZyZXEgPT0gMHhmZikKKwkJCQlicmVhazsKKwkJCXB3cl9mcmVxc1tuXSA9IGN0cGxbbl0uZnJlcTsKKwkJfQorCQludGFyZ2V0cyA9IG47CisJCWlkeCA9IGFyOTE3MF9maW5kX2ZyZXFfaWR4KG50YXJnZXRzLCBwd3JfZnJlcXMsIGYpOworCQlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKQorCQkJY3RwcmVzW25dID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KAorCQkJCQlmLAorCQkJCQljdHBsW2lkeCArIDBdLmZyZXEsCisJCQkJCWN0cGxbaWR4ICsgMF0ucG93ZXJbbl0sCisJCQkJCWN0cGxbaWR4ICsgMV0uZnJlcSwKKwkJCQkJY3RwbFtpZHggKyAxXS5wb3dlcltuXSk7CisJfQorCisJLyoKKwkgKiBIVCBtb2RlcyBub3c6IDVHIEhUMjAsIDVHIEhUNDAsIDJHIENDSywgMkcgT0ZETSwgMkcgSFQyMCwgMkcgSFQ0MAorCSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDogLyogNSBHSHogSFQgMjAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R19odDIwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzVHX2h0MjA7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiA1IEdIeiBIVCA0MCAqLworCQkJY3RwaCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzVHX2h0NDBbMF07CisJCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfNUdfaHQ0MDsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIDIuNCBHSHogSFQgMjAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDIwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQyMDsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIDIuNCBHSHogSFQgNDAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDQwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQ0MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlmb3IgKG4gPSAwOyBuIDwgbnRhcmdldHM7IG4rKykgeworCQkJaWYgKGN0cGhbbl0uZnJlcSA9PSAweGZmKQorCQkJCWJyZWFrOworCQkJcHdyX2ZyZXFzW25dID0gY3RwaFtuXS5mcmVxOworCQl9CisJCW50YXJnZXRzID0gbjsKKwkJaWR4ID0gYXI5MTcwX2ZpbmRfZnJlcV9pZHgobnRhcmdldHMsIHB3cl9mcmVxcywgZik7CisJCWZvciAobiA9IDA7IG4gPCA4OyBuKyspCisJCQljdHByZXNbbl0gPSBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoCisJCQkJCWYsCisJCQkJCWN0cGhbaWR4ICsgMF0uZnJlcSwKKwkJCQkJY3RwaFtpZHggKyAwXS5wb3dlcltuXSwKKwkJCQkJY3RwaFtpZHggKyAxXS5mcmVxLAorCQkJCQljdHBoW2lkeCArIDFdLnBvd2VyW25dKTsKKwl9CisKKwkvKiBzZXQgQUNLL0NUUyBUWCBwb3dlciAqLworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlpZiAoYXItPmVlcHJvbS50eF9tYXNrICE9IDEpCisJCWFja2NoYWlucyA9IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl8yOworCWVsc2UKKwkJYWNrY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7CisKKwlpZiAoZnJlcSA8IDMwMDApCisJCWFja3Bvd2VyID0gYXItPnBvd2VyXzJHX29mZG1bMF0gJiAweDNmOworCWVsc2UKKwkJYWNrcG93ZXIgPSBhci0+cG93ZXJfNUdfbGVnWzBdICYgMHgzZjsKKworCWFyOTE3MF9yZWd3cml0ZSgweDFjMzY5NCwgYWNrcG93ZXIgPDwgMjAgfCBhY2tjaGFpbnMgPDwgMjYpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2JiNCwgYWNrcG93ZXIgPDwgNSB8IGFja2NoYWlucyA8PCAxMSB8CisJCQkJICBhY2twb3dlciA8PCAyMSB8IGFja2NoYWlucyA8PCAyNyk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfY2FsY19ub2lzZV9kYm0odTMyIHJhd19ub2lzZSkKK3sKKwlpZiAocmF3X25vaXNlICYgMHgxMDApCisJCXJldHVybiB+KChyYXdfbm9pc2UgJiAweDBmZikgPj4gMSk7CisJZWxzZQorCQlyZXR1cm4gKHJhd19ub2lzZSAmIDB4ZmYpID4+IDE7Cit9CisKK2ludCBhcjkxNzBfc2V0X2NoYW5uZWwoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICAgICAgIGVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSByZmksIGVudW0gYXI5MTcwX2J3IGJ3KQoreworCWNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zICpmcmVxcGFyOworCXUzMiBjbWQsIHRtcCwgb2ZmczsKKwlfX2xlMzIgdmFsc1s4XTsKKwlpbnQgaSwgZXJyOworCWJvb2wgYmFuZHN3aXRjaDsKKworCS8qIGNsZWFyIEJCIGhlYXZ5IGNsaXAgZW5hYmxlICovCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU5ZTAsIDB4MjAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogbWF5IGJlIE5VTEwgYXQgZmlyc3Qgc2V0dXAgKi8KKwlpZiAoYXItPmNoYW5uZWwpCisJCWJhbmRzd2l0Y2ggPSBhci0+Y2hhbm5lbC0+YmFuZCAhPSBjaGFubmVsLT5iYW5kOworCWVsc2UKKwkJYmFuZHN3aXRjaCA9IHRydWU7CisKKwkvKiBIVyB3b3JrYXJvdW5kICovCisJaWYgKCFhci0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSAmJgorCSAgICBjaGFubmVsLT5jZW50ZXJfZnJlcSA8PSAyNDE3KQorCQliYW5kc3dpdGNoID0gdHJ1ZTsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9GUkVRX1NUQVJULCAwLCBOVUxMLCAwLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHJmaSAhPSBBUjkxNzBfUkZJX05PTkUgfHwgYmFuZHN3aXRjaCkgeworCQl1MzIgdmFsID0gMHg0MDA7CisKKwkJaWYgKHJmaSA9PSBBUjkxNzBfUkZJX0NPTEQpCisJCQl2YWwgPSAweDgwMDsKKworCQkvKiB3YXJtL2NvbGQgcmVzZXQgQkIvQUREQSAqLworCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAwNCwgdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxZDQwMDQsIDB4MCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGFyOTE3MF9pbml0X3BoeShhciwgY2hhbm5lbC0+YmFuZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGFyOTE3MF9pbml0X3JmX2JhbmtzXzBfNyhhciwKKwkJCWNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWNtZCA9IEFSOTE3MF9DTURfUkZfSU5JVDsKKwl9IGVsc2UgeworCQljbWQgPSBBUjkxNzBfQ01EX0ZSRVFVRU5DWTsKKwl9CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rNF9wd3IoYXIsCisJCWNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGJ3KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChidykgeworCWNhc2UgQVI5MTcwX0JXXzIwOgorCQl0bXAgPSAweDI0MDsKKwkJb2ZmcyA9IDA7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX0JXXzQwX0JFTE9XOgorCQl0bXAgPSAweDJjNDsKKwkJb2ZmcyA9IDM7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX0JXXzQwX0FCT1ZFOgorCQl0bXAgPSAweDJkNDsKKwkJb2ZmcyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoMCAvKiAyIHN0cmVhbXMgY2FwYWJsZSAqLykKKwkJdG1wIHw9IDB4MTAwOworCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU4MDQsIHRtcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGFyOTE3MF9zZXRfcG93ZXJfY2FsKGFyLCBjaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmcmVxcGFyID0gYXI5MTcwX2dldF9od19keW5fcGFyYW1zKGNoYW5uZWwsIGJ3KTsKKworCXZhbHNbMF0gPSBjcHVfdG9fbGUzMihjaGFubmVsLT5jZW50ZXJfZnJlcSAqIDEwMDApOworCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihidyA9PSBBUjkxNzBfQldfMjAgPyAwIDogMSk7CisJdmFsc1syXSA9IGNwdV90b19sZTMyKG9mZnMgPDwgMiB8IDEpOworCXZhbHNbM10gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHApOworCXZhbHNbNF0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW4pOworCXZhbHNbNV0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHBfc2hnaSk7CisJdmFsc1s2XSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX21hbl9zaGdpKTsKKwl2YWxzWzddID0gY3B1X3RvX2xlMzIoMTAwMCk7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIGNtZCwgc2l6ZW9mKHZhbHMpLCAodTggKil2YWxzLAorCQkJICAgc2l6ZW9mKHZhbHMpLCAodTggKil2YWxzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlhci0+bm9pc2VbaV0gPSBhcjkxNzBfY2FsY19ub2lzZV9kYm0oCisJCQkJKGxlMzJfdG9fY3B1KHZhbHNbMiArIGldKSA+PiAxOSkgJiAweDFmZik7CisKKwkJYXItPm5vaXNlW2kgKyAyXSA9IGFyOTE3MF9jYWxjX25vaXNlX2RibSgKKwkJCQkgICAgKGxlMzJfdG9fY3B1KHZhbHNbNSArIGldKSA+PiAyMykgJiAweDFmZik7CisJfQorCisJYXItPmNoYW5uZWwgPSBjaGFubmVsOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjk2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvdXNiLmMKQEAgLTAsMCArMSw3NDggQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBVU0IgLSBmcm9udGVuZAorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInVzYi5oIgorCitNT0RVTEVfQVVUSE9SKCJKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PiIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdGhlcm9zIEFSOTE3MCA4MDIuMTFuIFVTQiB3aXJlbGVzcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJhcjkxNzAtMS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJhcjkxNzAtMi5mdyIpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXI5MTcwX3VzYl9pZHNbXSA9IHsKKwkvKiBBdGhlcm9zIDkxNzAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDkxNzApIH0sCisJLyogQXRoZXJvcyBURzEyMU4gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDEwMDEpIH0sCisJLyogRC1MaW5rIERXQSAxNjBBICovCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzEwKSB9LAorCS8qIE5ldGdlYXIgV05EQTMxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwMTApIH0sCisJLyogTmV0Z2VhciBXTjExMSB2MiAqLworCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4OTAwMSkgfSwKKwkvKiBaeWRhcyBaRDEyMjEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMjEpIH0sCisJLyogWi1Db20gVUI4MSBCRyAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyMykgfSwKKwkvKiBaLUNvbSBVQjgyIEFCRyAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNikgfSwKKwkvKiBBcmNhZHlhbiBXTjc1MTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGY1MjIpIH0sCisJLyogUGxhbmV4IEdXVVMzMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUzMDQpIH0sCisJLyogSU8tRGF0YSBXTkdETlVTMiAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZikgfSwKKworCS8qIHRlcm1pbmF0ZSAqLworCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFyOTE3MF91c2JfaWRzKTsKKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl90eF91cmJfY29tcGxldGVfZnJlZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHN0cnVjdCBhcjkxNzBfdXNiICopCisJICAgICAgdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKKworCWlmICghYXJ1KSB7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybiA7CisJfQorCisJYXI5MTcwX2hhbmRsZV90eF9zdGF0dXMoJmFydS0+Y29tbW9uLCBza2IsIGZhbHNlLAorCQkJCUFSOTE3MF9UWF9TVEFUVVNfQ09NUExFVEUpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3R4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfaXJxX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IHVyYi0+Y29udGV4dDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KKwljYXNlIDA6CisJCWJyZWFrOworCisJLyogZGlzY29ubmVjdCAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCWdvdG8gZnJlZTsKKworCWRlZmF1bHQ6CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFyOTE3MCBpcnE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCSAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKK3Jlc3VibWl0OgorCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+cnhfc3VibWl0dGVkKTsKKwlpZiAodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWdvdG8gZnJlZTsKKwl9CisKKwlyZXR1cm47CisKK2ZyZWU6CisJdXNiX2J1ZmZlcl9mcmVlKGFydS0+dWRldiwgNjQsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfcnhfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikKKwkJdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKKwlpbnQgZXJyOworCisJaWYgKCFhcnUpCisJCWdvdG8gZnJlZTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KKwljYXNlIDA6CisJCWJyZWFrOworCisJLyogZGlzY29ubmVjdCAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCWdvdG8gZnJlZTsKKworCWRlZmF1bHQ6CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJYXI5MTcwX3J4KCZhcnUtPmNvbW1vbiwgc2tiKTsKKworcmVzdWJtaXQ6CisJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpOworCXNrYl90cmltKHNrYiwgMCk7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwl9CisKKwlyZXR1cm4gOworCitmcmVlOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfcHJlcF9yeF91cmIoc3RydWN0IGFyOTE3MF91c2IgKmFydSwKKwkJCQkgIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBfX2Rldl9hbGxvY19za2IoQVI5MTcwX01BWF9SWF9CVUZGRVJfU0laRSArIDMyLCBnZnApOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgbWFjODAyMTEncyByYWRpb3RhcCAqLworCXNrYl9yZXNlcnZlKHNrYiwgMzIpOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBhcnUtPnVkZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShhcnUtPnVkZXYsIEFSOTE3MF9FUF9SWCksCisJCQkgIHNrYi0+ZGF0YSwgbWluKHNrYl90YWlscm9vbShza2IpLAorCQkJICBBUjkxNzBfTUFYX1JYX0JVRkZFUl9TSVpFKSwKKwkJCSAgYXI5MTcwX3VzYl9yeF9jb21wbGV0ZWQsIHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX2FsbG9jX3J4X2lycV91cmIoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXZvaWQgKmlidWY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwkvKiBpbml0aWFsaXplIGludGVycnVwdCBlbmRwb2ludCAqLworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpCisJCWdvdG8gb3V0OworCisJaWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoYXJ1LT51ZGV2LCA2NCwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWlidWYpCisJCWdvdG8gb3V0OworCisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGFydS0+dWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShhcnUtPnVkZXYsIEFSOTE3MF9FUF9JUlEpLCBpYnVmLAorCQkJIDY0LCBhcjkxNzBfdXNiX2lycV9jb21wbGV0ZWQsIGFydSwgMSk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+cnhfc3VibWl0dGVkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChlcnIpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQl1c2JfYnVmZmVyX2ZyZWUoYXJ1LT51ZGV2LCA2NCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCX0KKworb3V0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9hbGxvY19yeF9idWxrX3VyYnMoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGk7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9SWF9VUkJTOyBpKyspIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJZXJyID0gYXI5MTcwX3VzYl9wcmVwX3J4X3VyYihhcnUsIHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT5yeF9zdWJtaXR0ZWQpOworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyKSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueSgodm9pZCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9CisKKwkvKiB0aGUgZGV2aWNlIG5vdyB3YWl0aW5nIGZvciBhIGZpcm13YXJlLiAqLworCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisKKwl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCWludCByZXQ7CisKKwlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9VTktOT1dOX1NUQVRFOworCisJdXNiX3VubGlua19hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisKKwkvKiBnaXZlIHRoZSBMRUQgT0ZGIGNvbW1hbmQgYW5kIHRoZSBkZWF1dGggZnJhbWUgYSBjaGFuY2UgdG8gYWlyLiAqLworCXJldCA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZhcnUtPnR4X3N1Ym1pdHRlZCwKKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJaWYgKHJldCA9PSAwKQorCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImtpbGwgcGVuZGluZyB0eCB1cmJzLlxuIik7CisJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisKKwl1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMoJmFydS0+cnhfc3VibWl0dGVkKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX2V4ZWNfY21kKHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGFyOTE3MF9jbWQgY21kLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBwbGVuLCB2b2lkICpwYXlsb2FkLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBvdXRsZW4sIHZvaWQgKm91dCkKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRU5PTUVNOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoV0FSTl9PTihwbGVuID4gQVI5MTcwX01BWF9DTURfTEVOIC0gNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXVyYikpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlhci0+Y21kYnVmWzBdID0gY3B1X3RvX2xlMzIocGxlbik7CisJYXItPmNtZGJ1ZlswXSB8PSBjcHVfdG9fbGUzMihjbWQgPDwgOCk7CisJLyogd3JpdGluZyBtdWx0aXBsZSByZWdzIGZpbGxzIHRoaXMgYnVmZmVyIGFscmVhZHkgKi8KKwlpZiAocGxlbiAmJiBwYXlsb2FkICE9ICh1OCAqKSgmYXItPmNtZGJ1ZlsxXSkpCisJCW1lbWNweSgmYXItPmNtZGJ1ZlsxXSwgcGF5bG9hZCwgcGxlbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCWFydS0+cmVhZGJ1ZiA9ICh1OCAqKW91dDsKKwlhcnUtPnJlYWRsZW4gPSBvdXRsZW47CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGFydS0+dWRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfQ01EKSwKKwkJCSBhcnUtPmNvbW1vbi5jbWRidWYsIHBsZW4gKyA0LAorCQkJIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlLCBOVUxMLCAxKTsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJZ290byBlcnJfdW5idWY7CisJfQorCXVzYl9mcmVlX3VyYih1cmIpOworCisJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhcnUtPmNtZF93YWl0LCBIWik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IC1FVElNRURPVVQ7CisJCWdvdG8gZXJyX3VuYnVmOworCX0KKworCWlmIChvdXRsZW4gPj0gMCAmJiBhcnUtPnJlYWRsZW4gIT0gb3V0bGVuKSB7CisJCWVyciA9IC1FTVNHU0laRTsKKwkJZ290byBlcnJfdW5idWY7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bmJ1ZjoKKwkvKiBNYXliZSB0aGUgZGV2aWNlIHdhcyByZW1vdmVkIGluIHRoZSBzZWNvbmQgd2Ugd2VyZSB3YWl0aW5nPyAqLworCWlmIChJU19TVEFSVEVEKGFyKSkgeworCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgIm5vIGNvbW1hbmQgZmVlZGJhY2sgIgorCQkJCQkgInJlY2VpdmVkICglZCkuXG4iLCBlcnIpOworCisJCS8qIHByb3ZpZGUgc29tZSBtYXliZSB1c2VmdWwgZGVidWcgaW5mb3JtYXRpb24gKi8KKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFyOTE3MCBjbWQ6ICIsIERVTVBfUFJFRklYX05PTkUsCisJCQkJICAgICBhcnUtPmNvbW1vbi5jbWRidWYsIHBsZW4gKyA0KTsKKwkJZHVtcF9zdGFjaygpOworCX0KKworCS8qIGludmFsaWRhdGUgdG8gYXZvaWQgY29tcGxldGluZyB0aGUgbmV4dCBwcmVtYXR1cmVseSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7CisJYXJ1LT5yZWFkYnVmID0gTlVMTDsKKwlhcnUtPnJlYWRsZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKKworZXJyX2ZyZWU6CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfdHgoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgYm9vbCB0eHN0YXR1c19uZWVkZWQsIHVuc2lnbmVkIGludCBleHRyYV9sZW4pCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IChzdHJ1Y3QgYXI5MTcwX3VzYiAqKSBhcjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKSB7CisJCS8qIFNlcmlvdXNseSwgd2hhdCB3ZXJlIHlvdSBkcmluay4uLiBlcnIuLi4gdGhpbmtpbmchPyAqLworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCF1cmIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgYXJ1LT51ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfVFgpLAorCQkJICBza2ItPmRhdGEsIHNrYi0+bGVuICsgZXh0cmFfbGVuLCAodHhzdGF0dXNfbmVlZGVkID8KKwkJCSAgYXI5MTcwX3VzYl90eF91cmJfY29tcGxldGUgOgorCQkJICBhcjkxNzBfdXNiX3R4X3VyYl9jb21wbGV0ZV9mcmVlKSwgc2tiKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseShlcnIpKQorCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2NhbGxiYWNrX2NtZChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlbiAsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW4sIG91dDsKKworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gOworCisJaW4gPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJ1ZmZlcik7CisJb3V0ID0gbGUzMl90b19jcHUoYXItPmNtZGJ1ZlswXSk7CisKKwkvKiBtYXNrIG9mZiBsZW5ndGggYnl0ZSAqLworCW91dCAmPSB+MHhGRjsKKworCWlmIChhcnUtPnJlYWRsZW4gPj0gMCkgeworCQkvKiBhZGQgZXhwZWN0ZWQgbGVuZ3RoICovCisJCW91dCB8PSBhcnUtPnJlYWRsZW47CisJfSBlbHNlIHsKKwkJLyogYWRkIG9idGFpbmVkIGxlbmd0aCAqLworCQlvdXQgfD0gaW4gJiAweEZGOworCX0KKworCS8qCisJICogU29tZSBjb21tYW5kcyAoZS5nOiBBUjkxNzBfQ01EX0ZSRVFVRU5DWSkgaGF2ZSBhIHZhcmlhYmxlIHJlc3BvbnNlCisJICogbGVuZ3RoIGFuZCB3ZSBjYW5ub3QgcHJlZGljdCB0aGUgY29ycmVjdCBsZW5ndGggaW4gYWR2YW5jZS4KKwkgKiBTbyB3ZSBvbmx5IGNoZWNrIGlmIHdlIHByb3ZpZGVkIGVub3VnaCBzcGFjZSBmb3IgdGhlIGRhdGEuCisJICovCisJaWYgKHVubGlrZWx5KG91dCA8IGluKSkgeworCQlkZXZfd2FybigmYXJ1LT51ZGV2LT5kZXYsICJyZWNlaXZlZCBpbnZhbGlkIGNvbW1hbmQgcmVzcG9uc2UgIgorCQkJCQkgICJnb3QgJWQgYnl0ZXMsIGluc3RlYWQgb2YgJWQgYnl0ZXMgIgorCQkJCQkgICJhbmQgdGhlIHJlc3AgbGVuZ3RoIGlzICVkIGJ5dGVzXG4iLAorCQkJIGluLCBvdXQsIGxlbik7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgaW52YWxpZCByZXNwOiAiLAorCQkJCSAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCBidWZmZXIsIGxlbik7CisJCS8qCisJCSAqIERvIG5vdCBjb21wbGV0ZSwgdGhlbiB0aGUgY29tbWFuZCB0aW1lcyBvdXQsCisJCSAqIGFuZCB3ZSBnZXQgYSBzdGFjayB0cmFjZSBmcm9tIHRoZXJlLgorCQkgKi8KKwkJcmV0dXJuIDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCWlmIChhcnUtPnJlYWRidWYgJiYgbGVuID4gMCkgeworCQltZW1jcHkoYXJ1LT5yZWFkYnVmLCBidWZmZXIgKyA0LCBsZW4gLSA0KTsKKwkJYXJ1LT5yZWFkYnVmID0gTlVMTDsKKwl9CisJY29tcGxldGUoJmFydS0+Y21kX3dhaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3VwbG9hZChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1LCBjb25zdCB2b2lkICpkYXRhLAorCQkJICAgICBzaXplX3QgbGVuLCB1MzIgYWRkciwgYm9vbCBjb21wbGV0ZSkKK3sKKwlpbnQgdHJhbnNmZXIsIGVycjsKKwl1OCAqYnVmID0ga21hbGxvYyg0MDk2LCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdoaWxlIChsZW4pIHsKKwkJdHJhbnNmZXIgPSBtaW5fdChpbnQsIGxlbiwgNDA5Nik7CisJCW1lbWNweShidWYsIGRhdGEsIHRyYW5zZmVyKTsKKworCQllcnIgPSB1c2JfY29udHJvbF9tc2coYXJ1LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoYXJ1LT51ZGV2LCAwKSwKKwkJCQkgICAgICAweDMwIC8qIEZXIERMICovLCAweDQwIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgICAgYWRkciA+PiA4LCAwLCBidWYsIHRyYW5zZmVyLCAxMDAwKTsKKworCQlpZiAoZXJyIDwgMCkgeworCQkJa2ZyZWUoYnVmKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlsZW4gLT0gdHJhbnNmZXI7CisJCWRhdGEgKz0gdHJhbnNmZXI7CisJCWFkZHIgKz0gdHJhbnNmZXI7CisJfQorCWtmcmVlKGJ1Zik7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGFydS0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGFydS0+dWRldiwgMCksCisJCQkJICAgICAgMHgzMSAvKiBGVyBETCBDT01QTEVURSAqLywKKwkJCQkgICAgICAweDQwIHwgVVNCX0RJUl9PVVQsIDAsIDAsIE5VTEwsIDAsIDUwMDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYXJ1LT5pbml0X3ZhbHVlcywgImFyOTE3MC0xLmZ3IiwKKwkJCSAgICAgICAmYXJ1LT51ZGV2LT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJmaWxlIHdpdGggaW5pdCB2YWx1ZXMgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYXJ1LT5maXJtd2FyZSwgImFyOTE3MC0yLmZ3IiwgJmFydS0+dWRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5pbml0X3ZhbHVlcyk7CisJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZmlybXdhcmUgZmlsZSBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfcmVzZXQoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlpbnQgcmV0LCBsb2NrID0gKGFydS0+aW50Zi0+Y29uZGl0aW9uICE9IFVTQl9JTlRFUkZBQ0VfQklORElORyk7CisKKwlpZiAobG9jaykgeworCQlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KGFydS0+dWRldiwgYXJ1LT5pbnRmKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAidW5hYmxlIHRvIGxvY2sgZGV2aWNlICIKKwkJCQkiZm9yIHJlc2V0ICglZCkuXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHVzYl9yZXNldF9kZXZpY2UoYXJ1LT51ZGV2KTsKKwlpZiAobG9jaykKKwkJdXNiX3VubG9ja19kZXZpY2UoYXJ1LT51ZGV2KTsKKworCS8qIGxldCBpdCByZXN0IC0gZm9yIGEgc2Vjb25kIC0gKi8KKwltc2xlZXAoMTAwMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCit7CisJaW50IGVycjsKKworCS8qIEZpcnN0LCB1cGxvYWQgaW5pdGlhbCB2YWx1ZXMgdG8gZGV2aWNlIFJBTSAqLworCWVyciA9IGFyOTE3MF91c2JfdXBsb2FkKGFydSwgYXJ1LT5pbml0X3ZhbHVlcy0+ZGF0YSwKKwkJCQlhcnUtPmluaXRfdmFsdWVzLT5zaXplLCAweDEwMjgwMCwgZmFsc2UpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJmaXJtd2FyZSBwYXJ0IDEgIgorCQkJInVwbG9hZCBmYWlsZWQgKCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogVGhlbiwgdXBsb2FkIHRoZSBmaXJtd2FyZSBpdHNlbGYgYW5kIHN0YXJ0IGl0ICovCisJcmV0dXJuIGFyOTE3MF91c2JfdXBsb2FkKGFydSwgYXJ1LT5maXJtd2FyZS0+ZGF0YSwgYXJ1LT5maXJtd2FyZS0+c2l6ZSwKKwkJCQkweDIwMDAwMCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9pbml0X3RyYW5zcG9ydChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gKHZvaWQgKikgJmFydS0+Y29tbW9uOworCWludCBlcnI7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJLyogU2V0IFVTQiBSeCBzdHJlYW0gbW9kZSBNQVggcGFja2V0IG51bWJlciB0byAyICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9VU0JfUkVHX01BWF9BR0dfVVBMT0FELCAweDQpOworCisJLyogU2V0IFVTQiBSeCBzdHJlYW0gbW9kZSB0aW1lb3V0IHRvIDEwdXMgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX1VTQl9SRUdfVVBMT0FEX1RJTUVfQ1RMLCAweDgwKTsKKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgIlVTQiBzZXR1cCBmYWlsZWQgKCVkKS5cbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3N0b3Aoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOworCWludCByZXQ7CisKKwlpZiAoSVNfQUNDRVBUSU5HX0NNRChhcikpCisJCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX1NUT1BQRUQ7CisKKwkvKiBsZXRzIHdhaXQgYSB3aGlsZSB1bnRpbCB0aGUgdHggLSBxdWV1ZXMgYXJlIGRyaWVkIG91dCAqLworCXJldCA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZhcnUtPnR4X3N1Ym1pdHRlZCwKKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCWlmIChyZXQgPT0gMCkKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJraWxsIHBlbmRpbmcgdHggdXJicy5cbiIpOworCisJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisKKwkvKgorCSAqIE5vdGU6CisJICogU28gZmFyIHdlIGZyZWVkIGFsbCB0eCB1cmJzLCBidXQgd2Ugd29uJ3QgZGFyZSB0byB0b3VjaCBhbnkgcnggdXJicy4KKwkgKiBFbHNlIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGEgdW5yZXNwb25zaXZlIGRldmljZS4uLgorCSAqLworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2Jfb3BlbihzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7CisJaW50IGVycjsKKworCXVzYl91bnBvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJZXJyID0gYXI5MTcwX3VzYl9pbml0X3RyYW5zcG9ydChhcnUpOworCWlmIChlcnIpIHsKKwkJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhcjkxNzBfdXNiICphcnU7CisJc3RydWN0IGFyOTE3MCAqYXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJaW50IGVycjsKKworCWFydSA9IGFyOTE3MF9hbGxvYyhzaXplb2YoKmFydSkpOworCWlmIChJU19FUlIoYXJ1KSkgeworCQllcnIgPSBQVFJfRVJSKGFydSk7CisJCWdvdG8gb3V0OworCX0KKworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXVzYl9nZXRfZGV2KHVkZXYpOworCWFydS0+dWRldiA9IHVkZXY7CisJYXJ1LT5pbnRmID0gaW50ZjsKKwlhciA9ICZhcnUtPmNvbW1vbjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgYXJ1KTsKKwlTRVRfSUVFRTgwMjExX0RFVihhci0+aHcsICZ1ZGV2LT5kZXYpOworCisJaW5pdF91c2JfYW5jaG9yKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJaW5pdF91c2JfYW5jaG9yKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJaW5pdF9jb21wbGV0aW9uKCZhcnUtPmNtZF93YWl0KTsKKworCWFydS0+Y29tbW9uLnN0b3AgPSBhcjkxNzBfdXNiX3N0b3A7CisJYXJ1LT5jb21tb24ub3BlbiA9IGFyOTE3MF91c2Jfb3BlbjsKKwlhcnUtPmNvbW1vbi50eCA9IGFyOTE3MF91c2JfdHg7CisJYXJ1LT5jb21tb24uZXhlY19jbWQgPSBhcjkxNzBfdXNiX2V4ZWNfY21kOworCWFydS0+Y29tbW9uLmNhbGxiYWNrX2NtZCA9IGFyOTE3MF91c2JfY2FsbGJhY2tfY21kOworCisJZXJyID0gYXI5MTcwX3VzYl9yZXNldChhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VubG9jazsKKworCWVyciA9IGFyOTE3MF91c2JfcmVxdWVzdF9maXJtd2FyZShhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VubG9jazsKKworCWVyciA9IGFyOTE3MF91c2JfYWxsb2NfcnhfaXJxX3VyYihhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVmdzsKKworCWVyciA9IGFyOTE3MF91c2JfYWxsb2NfcnhfYnVsa191cmJzKGFydSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yeDsKKworCWVyciA9IGFyOTE3MF91c2JfdXBsb2FkX2Zpcm13YXJlKGFydSk7CisJaWYgKGVycikgeworCQllcnIgPSBhcjkxNzBfZWNob190ZXN0KCZhcnUtPmNvbW1vbiwgMHg2MGQ0MzExMCk7CisJCWlmIChlcnIpIHsKKwkJCS8qIGZvcmNlIHVzZXIgaW52ZW50aW9uLCBieSBkaXNhYmxpbmcgdGhlIGRldmljZSAqLworCQkJZXJyID0gdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbihhcnUtPnVkZXYsIC0xKTsKKwkJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZGV2aWNlIGlzIGluIGEgYmFkIHN0YXRlLiAiCisJCQkJCQkgInBsZWFzZSByZWNvbm5lY3QgaXQhXG4iKTsKKwkJCWdvdG8gZXJyX3Vucng7CisJCX0KKwl9CisKKwllcnIgPSBhcjkxNzBfdXNiX29wZW4oYXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3Vucng7CisKKwllcnIgPSBhcjkxNzBfcmVnaXN0ZXIoYXIsICZ1ZGV2LT5kZXYpOworCisJYXI5MTcwX3VzYl9zdG9wKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bnJ4OworCisJcmV0dXJuIDA7CisKK2Vycl91bnJ4OgorCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKKworZXJyX2ZyZWVmdzoKKwlyZWxlYXNlX2Zpcm13YXJlKGFydS0+aW5pdF92YWx1ZXMpOworCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5maXJtd2FyZSk7CisKK2Vycl91bmxvY2s6CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKwlpZWVlODAyMTFfZnJlZV9odyhhci0+aHcpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmICghYXJ1KQorCQlyZXR1cm47CisKKwlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9JRExFOworCWFyOTE3MF91bnJlZ2lzdGVyKCZhcnUtPmNvbW1vbik7CisJYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhhcnUpOworCisJcmVsZWFzZV9maXJtd2FyZShhcnUtPmluaXRfdmFsdWVzKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGFydS0+ZmlybXdhcmUpOworCisJdXNiX3B1dF9kZXYoYXJ1LT51ZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWllZWU4MDIxMV9mcmVlX2h3KGFydS0+Y29tbW9uLmh3KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFyOTE3MF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYXI5MTcwdXNiIiwKKwkucHJvYmUgPSBhcjkxNzBfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gYXI5MTcwX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGFyOTE3MF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9IDEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhcjkxNzBfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmFyOTE3MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXI5MTcwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYXI5MTcwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFyOTE3MF9pbml0KTsKK21vZHVsZV9leGl0KGFyOTE3MF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTg1MjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBVU0IgZHJpdmVyCisgKgorICogRHJpdmVyIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX1VTQl9ICisjZGVmaW5lIF9fVVNCX0gKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiYXI5MTcwLmgiCisKKyNkZWZpbmUgQVI5MTcwX05VTV9SWF9VUkJTCQkJMTYKKworc3RydWN0IGZpcm13YXJlOworCitzdHJ1Y3QgYXI5MTcwX3VzYiB7CisJc3RydWN0IGFyOTE3MCBjb21tb247CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwlzdHJ1Y3QgdXNiX2FuY2hvciByeF9zdWJtaXR0ZWQ7CisJc3RydWN0IHVzYl9hbmNob3IgdHhfc3VibWl0dGVkOworCisJc3BpbmxvY2tfdCBjbWRsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uIGNtZF93YWl0OworCWludCByZWFkbGVuOworCXU4ICpyZWFkYnVmOworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICppbml0X3ZhbHVlczsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworfTsKKworI2VuZGlmIC8qIF9fVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwppbmRleCBiZmNhMTVkLi5hNTRhNjdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwpAQCAtMTAzMCw3ICsxMDMwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhcmxhbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhcmxhbl9vcGVuLAorCS5uZG9fc3RvcAkJPSBhcmxhbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYXJsYW5fdHgsCisJLm5kb19nZXRfc3RhdHMJCT0gYXJsYW5fc3RhdGlzdGljcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGFybGFuX3NldF9tdWx0aWNhc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGFybGFuX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBhcmxhbl9tYWNfYWRkciwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYXJsYW5fdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGFybGFuX3NldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtKQogewpAQCAtMTA0MiwxNCArMTA1Miw3IEBACiAJYXAtPmNvbmYgPSAoc3RydWN0IGFybGFuX3NobWVtICopKGFwKzEpOwogCiAJZGV2LT50eF9xdWV1ZV9sZW4gPSB0eF9xdWV1ZV9sZW47Ci0JZGV2LT5vcGVuID0gYXJsYW5fb3BlbjsKLQlkZXYtPnN0b3AgPSBhcmxhbl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFybGFuX3R4OwotCWRldi0+Z2V0X3N0YXRzID0gYXJsYW5fc3RhdGlzdGljczsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFybGFuX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gYXJsYW5fY2hhbmdlX210dTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGFybGFuX21hY19hZGRyOwotCWRldi0+dHhfdGltZW91dCA9IGFybGFuX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFybGFuX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDMqSFo7CiAJCiAJYXAtPmlycV90ZXN0X2RvbmUgPSAwOwpAQCAtMTA4Miw4ICsxMDg1LDggQEAKIAlpZiAoYXJsYW5fY2hlY2tfZmluZ2VycHJpbnQobWVtYWRkcikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICIlczogQXJsYW4gZm91bmQgYXQgJXgsIFxuICIsIGRldi0+bmFtZSwgCi0JICAgICAgIChpbnQpIHZpcnRfdG9fcGh5cygodm9pZCopbWVtYWRkcikpOworCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEFybGFuIGZvdW5kIGF0ICVsbHgsIFxuICIsIGRldi0+bmFtZSwgCisJICAgICAgICh1NjQpIHZpcnRfdG9fcGh5cygodm9pZCopbWVtYWRkcikpOwogCiAJYXAtPmNhcmQgPSAodm9pZCAqKSBtZW1hZGRyOwogCWRldi0+bWVtX3N0YXJ0ID0gbWVtYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMmYxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCkBAIC0wLDAgKzEsMjUwMSBAQAorLyoKKyAqIGF0NzZjNTAzL2F0NzZjNTA1IFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgLSAyMDAzIE9saXZlciBLdXJ0aAorICogQ29weXJpZ2h0IChjKSAyMDA0IEpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBOaWNrIEpvbmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgQmFsaW50IFNlZWJlciA8bjBfNXA0bV9wMTM0NTNAaG90bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgR3VpZG8gR3VlbnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQGlraS5maT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCZXJsaW9zIGRyaXZlciBmb3IgV0xBTiBVU0IgZGV2aWNlcyBiYXNlZCBvbiB0aGUKKyAqIEF0bWVsIEFUNzZDNTAzQS81MDUvNTA1QS4KKyAqCisgKiBTb21lIGl3X2hhbmRsZXIgY29kZSB3YXMgdGFrZW4gZnJvbSBhaXJvLmMsIChDKSAxOTk5IEJlbmphbWluIFJlZWQKKyAqCisgKiBUT0RPIGxpc3QgaXMgYXQgdGhlIHdpa2k6CisgKgorICogaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hdDc2YzUweC11c2IjVE9ETworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgImF0NzZjNTB4LXVzYi5oIgorCisvKiBWZXJzaW9uIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9OQU1FICJhdDc2YzUweC11c2IiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjE3IgorI2RlZmluZSBEUklWRVJfREVTQyAiQXRtZWwgYXQ3NnggVVNCIFdpcmVsZXNzIExBTiBEcml2ZXIiCisKKy8qIGF0NzZfZGVidWcgYml0cyAqLworI2RlZmluZSBEQkdfUFJPR1JFU1MJCTB4MDAwMDAwMDEJLyogYXV0aGVudGljYXRpb24vYWNjb2NpYXRpb24gKi8KKyNkZWZpbmUgREJHX0JTU19UQUJMRQkJMHgwMDAwMDAwMgkvKiBzaG93IEJTUyB0YWJsZSBhZnRlciBzY2FucyAqLworI2RlZmluZSBEQkdfSU9DVEwJCTB4MDAwMDAwMDQJLyogaW9jdGwgY2FsbHMgLyBzZXR0aW5ncyAqLworI2RlZmluZSBEQkdfTUFDX1NUQVRFCQkweDAwMDAwMDA4CS8qIE1BQyBzdGF0ZSB0cmFuc2l0aW9ucyAqLworI2RlZmluZSBEQkdfVFhfREFUQQkJMHgwMDAwMDAxMAkvKiB0eCBoZWFkZXIgKi8KKyNkZWZpbmUgREJHX1RYX0RBVEFfQ09OVEVOVAkweDAwMDAwMDIwCS8qIHR4IGNvbnRlbnQgKi8KKyNkZWZpbmUgREJHX1RYX01HTVQJCTB4MDAwMDAwNDAJLyogdHggbWFuYWdlbWVudCAqLworI2RlZmluZSBEQkdfUlhfREFUQQkJMHgwMDAwMDA4MAkvKiByeCBkYXRhIGhlYWRlciAqLworI2RlZmluZSBEQkdfUlhfREFUQV9DT05URU5UCTB4MDAwMDAxMDAJLyogcnggZGF0YSBjb250ZW50ICovCisjZGVmaW5lIERCR19SWF9NR01UCQkweDAwMDAwMjAwCS8qIHJ4IG1nbXQgZnJhbWUgaGVhZGVycyAqLworI2RlZmluZSBEQkdfUlhfQkVBQ09OCQkweDAwMDAwNDAwCS8qIHJ4IGJlYWNvbiAqLworI2RlZmluZSBEQkdfUlhfQ1RSTAkJMHgwMDAwMDgwMAkvKiByeCBjb250cm9sICovCisjZGVmaW5lIERCR19SWF9NR01UX0NPTlRFTlQJMHgwMDAwMTAwMAkvKiByeCBtZ210IGNvbnRlbnQgKi8KKyNkZWZpbmUgREJHX1JYX0ZSQUdTCQkweDAwMDAyMDAwCS8qIHJ4IGRhdGEgZnJhZ21lbnQgaGFuZGxpbmcgKi8KKyNkZWZpbmUgREJHX0RFVlNUQVJUCQkweDAwMDA0MDAwCS8qIGZ3IGRvd25sb2FkLCBkZXZpY2Ugc3RhcnQgKi8KKyNkZWZpbmUgREJHX1VSQgkJCTB4MDAwMDgwMDAJLyogcnggdXJiIHN0YXR1cywgLi4uICovCisjZGVmaW5lIERCR19SWF9BVE1FTF9IRFIJMHgwMDAxMDAwMAkvKiBBdG1lbC1zcGVjaWZpYyBSeCBoZWFkZXJzICovCisjZGVmaW5lIERCR19QUk9DX0VOVFJZCQkweDAwMDIwMDAwCS8qIHByb2NlZHVyZSBlbnRyaWVzL2V4aXRzICovCisjZGVmaW5lIERCR19QTQkJCTB4MDAwNDAwMDAJLyogcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncyAqLworI2RlZmluZSBEQkdfQlNTX01BVENICQkweDAwMDgwMDAwCS8qIEJTUyBtYXRjaCBmYWlsdXJlcyAqLworI2RlZmluZSBEQkdfUEFSQU1TCQkweDAwMTAwMDAwCS8qIHNob3cgY29uZmlndXJlZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIERCR19XQUlUX0NPTVBMRVRFCTB4MDAyMDAwMDAJLyogY29tbWFuZCBjb21wbGV0aW9uICovCisjZGVmaW5lIERCR19SWF9GUkFHU19TS0IJMHgwMDQwMDAwMAkvKiBza2IgaGVhZGVyIG9mIFJ4IGZyYWdtZW50cyAqLworI2RlZmluZSBEQkdfQlNTX1RBQkxFX1JNCTB4MDA4MDAwMDAJLyogcHVyZ2luZyBic3MgdGFibGUgZW50cmllcyAqLworI2RlZmluZSBEQkdfTU9OSVRPUl9NT0RFCTB4MDEwMDAwMDAJLyogbW9uaXRvciBtb2RlICovCisjZGVmaW5lIERCR19NSUIJCQkweDAyMDAwMDAwCS8qIGR1bXAgYWxsIE1JQnMgb24gc3RhcnR1cCAqLworI2RlZmluZSBEQkdfTUdNVF9USU1FUgkJMHgwNDAwMDAwMAkvKiBkdW1wIG1nbXRfdGltZXIgb3BzICovCisjZGVmaW5lIERCR19XRV9FVkVOVFMJCTB4MDgwMDAwMDAJLyogZHVtcCB3aXJlbGVzcyBldmVudHMgKi8KKyNkZWZpbmUgREJHX0ZXCQkJMHgxMDAwMDAwMAkvKiBmaXJtd2FyZSBkb3dubG9hZCAqLworI2RlZmluZSBEQkdfREZVCQkJMHgyMDAwMDAwMAkvKiBkZXZpY2UgZmlybXdhcmUgdXBncmFkZSAqLworI2RlZmluZSBEQkdfQ01ECQkJMHg0MDAwMDAwMAorI2RlZmluZSBEQkdfTUFDODAyMTEJCTB4ODAwMDAwMDAKKworI2RlZmluZSBEQkdfREVGQVVMVFMJCTAKKworLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCisjZGVmaW5lIGF0NzZfZGJnKGJpdHMsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChhdDc2X2RlYnVnICYgKGJpdHMpKQkJCQkgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsIFwKKwkJCSAgICAgICAjIyBhcmcpOwkJCQkJIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGF0NzZfZGJnX2R1bXAoYml0cywgYnVmLCBsZW4sIGZvcm1hdCwgYXJnLi4uKQlcCisJZG8geyBcCisJCWlmIChhdDc2X2RlYnVnICYgKGJpdHMpKSB7IFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCBcCisJCQkgICAgICAgIyMgYXJnKTsJCQkJCSBcCisJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAgICAgXAorCQkJCQkgICAgIGJ1ZiwgbGVuKTsJCQkgXAorCQl9CQkJCQkJCSBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHVpbnQgYXQ3Nl9kZWJ1ZyA9IERCR19ERUZBVUxUUzsKKworLyogUHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZyAqLworc3RhdGljIHN0cnVjdCBtdXRleCBmd19tdXRleDsKKworc3RhdGljIHN0cnVjdCBmd2VudHJ5IGZpcm13YXJlc1tdID0geworCVswXSA9IHsgIiIgfSwKKwlbQk9BUkRfNTAzX0lTTDM4NjFdID0geyAiYXRtZWxfYXQ3NmM1MDMtaTM4NjEuYmluIiB9LAorCVtCT0FSRF81MDNfSVNMMzg2M10gPSB7ICJhdG1lbF9hdDc2YzUwMy1pMzg2My5iaW4iIH0sCisJW0JPQVJEXzUwM10gPSB7ICJhdG1lbF9hdDc2YzUwMy1yZm1kLmJpbiIgfSwKKwlbQk9BUkRfNTAzX0FDQ10gPSB7ICJhdG1lbF9hdDc2YzUwMy1yZm1kLWFjYy5iaW4iIH0sCisJW0JPQVJEXzUwNV0gPSB7ICJhdG1lbF9hdDc2YzUwNS1yZm1kLmJpbiIgfSwKKwlbQk9BUkRfNTA1XzI5NThdID0geyAiYXRtZWxfYXQ3NmM1MDUtcmZtZDI5NTguYmluIiB9LAorCVtCT0FSRF81MDVBXSA9IHsgImF0bWVsX2F0NzZjNTA1YS1yZm1kMjk1OC5iaW4iIH0sCisJW0JPQVJEXzUwNUFNWF0gPSB7ICJhdG1lbF9hdDc2YzUwNWFteC1yZm1kLmJpbiIgfSwKK307CisKKyNkZWZpbmUgVVNCX0RFVklDRV9EQVRBKF9fb3BzKQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpKF9fb3BzKQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2X3RhYmxlW10gPSB7CisJLyoKKwkgKiBhdDc2YzUwMy1pMzg2MQorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvMzg2MSBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuMS92Mi42ICovCisJeyBVU0JfREVWSUNFKDB4MDY2YiwgMHgyMjExKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIE5ldGdlYXIgTUExMDEgcmV2LiBBICovCisJeyBVU0JfREVWSUNFKDB4MDg2NCwgMHg0MTAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIFRla3JhbSBVMzAwQyAvIEFsbG5ldCBBTEwwMTkzICovCisJeyBVU0JfREVWSUNFKDB4MGIzYiwgMHgxNjEyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEhQIEhOMjEwVyBKNzgwMUEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2YwLCAweDAxMWMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogU2l0ZWNvbS9aLUNvbS9aeXhlbCBNNFktNzUwICovCisJeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIER5bmFsaW5rL0Fza2V5IFdMTDAxMyAoaW50ZXJzaWwpICovCisJeyBVU0JfREVWSUNFKDB4MDY5YSwgMHgwMzIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEVaIGNvbm5lY3QgMTFNcGJzIFdpcmVsZXNzIFVTQiBBZGFwdGVyIFNNQzI2NjJXIHYxICovCisJeyBVU0JfREVWSUNFKDB4MGQ1YywgMHhhMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEJlblEgQVdMMzAwICovCisJeyBVU0JfREVWSUNFKDB4MDRhNSwgMHg5MDAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEFkZHRyb24gQVdVLTEyMCwgQ29tcGV4IFdMVTExICovCisJeyBVU0JfREVWSUNFKDB4MDVkZCwgMHhmZjMxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEludGVsIEFQMzEwIEFueVBvaW50IElJIFVTQiAqLworCXsgVVNCX0RFVklDRSgweDgwODYsIDB4MDIwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBEeW5hbGluayBMMTFVICovCisJeyBVU0JfREVWSUNFKDB4MGQ4ZSwgMHg3MTAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEFyZXNjb20gV0wtMjEwLCBGQ0MgaWQgMDdKLUdMMjQxMVVTQiAqLworCXsgVVNCX0RFVklDRSgweDBkOGUsIDB4NzExMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBJLU8gREFUQSBXTi1CMTEvVVNCICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTE5KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIEJUIFZveWFnZXIgMTAxMCAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDgyMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKgorCSAqIGF0NzZjNTAzLWkzODYzCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy8zODYzIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MykgfSwKKwkvKiBTYW1zdW5nIFNXTC0yMTAwVSAqLworCXsgVVNCX0RFVklDRSgweDA1NWQsIDB4YTAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MykgfSwKKwkvKgorCSAqIGF0NzZjNTAzLXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzL1JGTUQgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjA1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBEeW5hbGluay9Bc2tleSBXTEwwMTMgKHJmbWQpICovCisJeyBVU0JfREVWSUNFKDB4MDY5YSwgMHgwMzIxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBMaW5rc3lzIFdVU0IxMSB2Mi42ICovCisJeyBVU0JfREVWSUNFKDB4MDc3YiwgMHgyMjE5KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBOZXR3b3JrIEV2ZXJ5d2hlcmUgTldVMTFCICovCisJeyBVU0JfREVWSUNFKDB4MDc3YiwgMHgyMjI3KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBOZXRnZWFyIE1BMTAxIHJldi4gQiAqLworCXsgVVNCX0RFVklDRSgweDA4NjQsIDB4NDEwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogRC1MaW5rIERXTC0xMjAgcmV2LiBFICovCisJeyBVU0JfREVWSUNFKDB4MjAwMSwgMHgzMjAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBBY3Rpb250ZWMgODAyVUFUMSwgSFdVMDExNTAtMDFVSyAqLworCXsgVVNCX0RFVklDRSgweDE2NjgsIDB4NzYwNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQWlyVmFzdCBXLUJ1ZGRpZSBXTjIxMCAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NDEwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogRGljayBTbWl0aCBFbGVjdHJvbmljcyBYSDExNTMgODAyLjExYiBVU0IgYWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4NTc0MyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ05ldCBDTlVTQjYxMSAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogRmliZXJMaW5lIEZMLVdMMjAwVSAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4MDAwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQmVuUSBBV0w0MDAgVVNCIHN0aWNrICovCisJeyBVU0JfREVWSUNFKDB4MDRhNSwgMHg5MDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiAzQ29tIDNDUlNIRVc2OTYgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTA2LCAweDBhMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIFNpZW1lbnMgU2FudGlzIEFEU0wgV0xBTiBVU0IgYWRhcHRlciBXTEwgMDEzICovCisJeyBVU0JfREVWSUNFKDB4MDY4MSwgMHgwMDFiKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBCZWxraW4gRjVENjA1MCwgdmVyc2lvbiAyICovCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHgwMDUwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBpQmxpdHp6LCBCV1U2MTMgKG5vdCAqQiBvciAqU0IpICovCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMDAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBHaWdhYnl0ZSBHTi1XTEJNMTAxICovCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDAzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBQbGFuZXggR1ctVVMxMVMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDMyMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEludGVybmFsIFdMQU4gYWRhcHRlciBpbiBoNVs0LDVdeHggc2VyaWVzIGlQQVFzICovCisJeyBVU0JfREVWSUNFKDB4MDQ5ZiwgMHgwMDMyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBDb3JlZ2EgV2lyZWxlc3MgTEFOIFVTQi0xMSBtaW5pICovCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDExKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBDb3JlZ2EgV2lyZWxlc3MgTEFOIFVTQi0xMSBtaW5pMiAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAxOCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogVW5pZGVuIFBDVzEwMCAqLworCXsgVVNCX0RFVklDRSgweDA1ZGQsIDB4ZmYzNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1yZm1kLWFjYworCSAqLworCS8qIFNNQzI2NjRXICovCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHgzNTAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19BQ0MpIH0sCisJLyogQmVsa2luIEY1RDYwNTAsIFNNQzI2NjJXIHYyLCBTTUMyNjYyVy1BUiAqLworCXsgVVNCX0RFVklDRSgweDBkNWMsIDB4YTAwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfQUNDKSB9LAorCS8qCisJICogYXQ3NmM1MDUtcmZtZAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDUvUkZNRCAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDUpIH0sCisJLyoKKwkgKiBhdDc2YzUwNS1yZm1kMjk1OAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDUvUkZNRCwgT3Zpc0xpbmsgV0wtMTEzMFVTQiAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBGaWJlcmxpbmUgRkwtV0wyNDBVICovCisJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDE0KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIENOZXQgQ05VU0ItNjExRyAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4MDAxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBMaW5rc3lzIFdVU0IxMSB2Mi44ICovCisJeyBVU0JfREVWSUNFKDB4MTkxNSwgMHgyMjMzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIFh0ZXJhc3lzIFhOLTIxMjJCLCBJQmxpdHp6IEJXVTYxM0IvQldVNjEzU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMmZkLCAweDEwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogQ29yZWdhIFdMQU4gVVNCIFN0aWNrIDExICovCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHg3NjEzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIE1pY3Jvc3RhciBNU0kgQm94IE1TNjk3OCAqLworCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MTAyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKgorCSAqIGF0NzZjNTA1YS1yZm1kMjk1OAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDVBIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBKSB9LAorCS8qIEdlbmVyaWMgQVQ3NkM1MDVBUyBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTcpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKiBTaWVtZW5zIEdpZ2FzZXQgVVNCIFdMQU4gQWRhcHRlciAxMSAqLworCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDcwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBKSB9LAorCS8qCisJICogYXQ3NmM1MDVhbXgtcmZtZAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDVBTVggZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUFNWCkgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZfdGFibGUpOworCisvKiBTdXBwb3J0ZWQgcmF0ZXMgb2YgdGhpcyBoYXJkd2FyZSwgYml0IDcgbWFya3MgYmFzaWMgcmF0ZXMgKi8KK3N0YXRpYyBjb25zdCB1OCBod19yYXRlc1tdID0geyAweDgyLCAweDg0LCAweDBiLCAweDE2IH07CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBwcmVhbWJsZXNbXSA9IHsgImxvbmciLCAic2hvcnQiLCAiYXV0byIgfTsKKworLyogRmlybXdhcmUgZG93bmxvYWQgKi8KKy8qIERGVSBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVfSURMRQkJCTB4MDAKKyNkZWZpbmUgU1RBVEVfREVUQUNICQkJMHgwMQorI2RlZmluZSBTVEFURV9ERlVfSURMRQkJCTB4MDIKKyNkZWZpbmUgU1RBVEVfREZVX0RPV05MT0FEX1NZTkMJCTB4MDMKKyNkZWZpbmUgU1RBVEVfREZVX0RPV05MT0FEX0JVU1kJCTB4MDQKKyNkZWZpbmUgU1RBVEVfREZVX0RPV05MT0FEX0lETEUJCTB4MDUKKyNkZWZpbmUgU1RBVEVfREZVX01BTklGRVNUX1NZTkMJCTB4MDYKKyNkZWZpbmUgU1RBVEVfREZVX01BTklGRVNUCQkweDA3CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVF9XQUlUX1JFU0VUCTB4MDgKKyNkZWZpbmUgU1RBVEVfREZVX1VQTE9BRF9JRExFCQkweDA5CisjZGVmaW5lIFNUQVRFX0RGVV9FUlJPUgkJCTB4MGEKKworLyogREZVIGNvbW1hbmRzICovCisjZGVmaW5lIERGVV9ERVRBQ0gJCQkwCisjZGVmaW5lIERGVV9ETkxPQUQJCQkxCisjZGVmaW5lIERGVV9VUExPQUQJCQkyCisjZGVmaW5lIERGVV9HRVRTVEFUVVMJCQkzCisjZGVmaW5lIERGVV9DTFJTVEFUVVMJCQk0CisjZGVmaW5lIERGVV9HRVRTVEFURQkJCTUKKyNkZWZpbmUgREZVX0FCT1JUCQkJNgorCisjZGVmaW5lIEZXX0JMT0NLX1NJWkUgMTAyNAorCitzdHJ1Y3QgZGZ1X3N0YXR1cyB7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJdW5zaWduZWQgY2hhciBwb2xsX3RpbWVvdXRbM107CisJdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN0cmluZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfaW50ZXJzaWwoZW51bSBib2FyZF90eXBlIGJvYXJkKQoreworCXJldHVybiAoYm9hcmQgPT0gQk9BUkRfNTAzX0lTTDM4NjEgfHwgYm9hcmQgPT0gQk9BUkRfNTAzX0lTTDM4NjMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzXzUwM3JmbWQoZW51bSBib2FyZF90eXBlIGJvYXJkKQoreworCXJldHVybiAoYm9hcmQgPT0gQk9BUkRfNTAzIHx8IGJvYXJkID09IEJPQVJEXzUwM19BQ0MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzXzUwNWEoZW51bSBib2FyZF90eXBlIGJvYXJkKQoreworCXJldHVybiAoYm9hcmQgPT0gQk9BUkRfNTA1QSB8fCBib2FyZCA9PSBCT0FSRF81MDVBTVgpOworfQorCisvKiBMb2FkIGEgYmxvY2sgb2YgdGhlIGZpcnN0IChpbnRlcm5hbCkgcGFydCBvZiB0aGUgZmlybXdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9sb2FkX2ludF9md19ibG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGJsb2Nrbm8sCisJCQkJICB2b2lkICpibG9jaywgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIERGVV9ETkxPQUQsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgYmxvY2tubywgMCwgYmxvY2ssIHNpemUsCisJCQkgICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50IGF0NzZfZGZ1X2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkgICAgICAgc3RydWN0IGRmdV9zdGF0dXMgKnN0YXR1cykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0dFVFNUQVRVUywKKwkJCSAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgICAwLCAwLCBzdGF0dXMsIHNpemVvZihzdHJ1Y3QgZGZ1X3N0YXR1cyksCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU4IGF0NzZfZGZ1X2dldF9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggKnN0YXRlKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCBERlVfR0VUU1RBVEUsCisJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAgMCwgMCwgc3RhdGUsIDEsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDb252ZXJ0IHRpbWVvdXQgZnJvbSB0aGUgREZVIHN0YXR1cyB0byBqaWZmaWVzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ3Nl9nZXRfdGltZW91dChzdHJ1Y3QgZGZ1X3N0YXR1cyAqcykKK3sKKwlyZXR1cm4gbXNlY3NfdG9famlmZmllcygocy0+cG9sbF90aW1lb3V0WzJdIDw8IDE2KQorCQkJCXwgKHMtPnBvbGxfdGltZW91dFsxXSA8PCA4KQorCQkJCXwgKHMtPnBvbGxfdGltZW91dFswXSkpOworfQorCisvKiBMb2FkIGludGVybmFsIGZpcm13YXJlIGZyb20gdGhlIGJ1ZmZlci4gIElmIG1hbmlmZXN0X3N5bmNfdGltZW91dCA+IDAsIHVzZQorICogaXRzIHZhbHVlIGluIGppZmZpZXMgaW4gdGhlIE1BTklGRVNUX1NZTkMgc3RhdGUuICAqLworc3RhdGljIGludCBhdDc2X3VzYmRmdV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggKmJ1ZiwgdTMyIHNpemUsCisJCQkJaW50IG1hbmlmZXN0X3N5bmNfdGltZW91dCkKK3sKKwl1OCAqYmxvY2s7CisJc3RydWN0IGRmdV9zdGF0dXMgZGZ1X3N0YXRfYnVmOworCWludCByZXQgPSAwOworCWludCBuZWVkX2RmdV9zdGF0ZSA9IDE7CisJaW50IGlzX2RvbmUgPSAwOworCXU4IGRmdV9zdGF0ZSA9IDA7CisJdTMyIGRmdV90aW1lb3V0ID0gMDsKKwlpbnQgYnNpemUgPSAwOworCWludCBibG9ja25vID0gMDsKKworCWF0NzZfZGJnKERCR19ERlUsICIlcyggJXAsICV1LCAlZCkiLCBfX2Z1bmNfXywgYnVmLCBzaXplLAorCQkgbWFuaWZlc3Rfc3luY190aW1lb3V0KTsKKworCWlmICghc2l6ZSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAiRlcgYnVmZmVyIGxlbmd0aCBpbnZhbGlkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJsb2NrID0ga21hbGxvYyhGV19CTE9DS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvIHsKKwkJaWYgKG5lZWRfZGZ1X3N0YXRlKSB7CisJCQlyZXQgPSBhdDc2X2RmdV9nZXRfc3RhdGUodWRldiwgJmRmdV9zdGF0ZSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJjYW5ub3QgZ2V0IERGVSBzdGF0ZTogJWRcbiIsIHJldCk7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCQl9CisKKwkJc3dpdGNoIChkZnVfc3RhdGUpIHsKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfU1lOQzoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRE9XTkxPQURfU1lOQyIpOworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXR1cyh1ZGV2LCAmZGZ1X3N0YXRfYnVmKTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCWRmdV9zdGF0ZSA9IGRmdV9zdGF0X2J1Zi5zdGF0ZTsKKwkJCQlkZnVfdGltZW91dCA9IGF0NzZfZ2V0X3RpbWVvdXQoJmRmdV9zdGF0X2J1Zik7CisJCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCQkJfSBlbHNlCisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImF0NzZfZGZ1X2dldF9zdGF0dXMgcmV0dXJuZWQgJWRcbiIsCisJCQkJCSAgIHJldCk7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZIik7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDE7CisKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlU6IFJlc2V0dGluZyBkZXZpY2UiKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShkZnVfdGltZW91dCk7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9ET1dOTE9BRF9JRExFOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRPV05MT0FELi4uIik7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBTVEFURV9ERlVfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlUgSURMRSIpOworCisJCQlic2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgRldfQkxPQ0tfU0laRSk7CisJCQltZW1jcHkoYmxvY2ssIGJ1ZiwgYnNpemUpOworCQkJYXQ3Nl9kYmcoREJHX0RGVSwgImludCBmdywgc2l6ZSBsZWZ0ID0gJTVkLCAiCisJCQkJICJic2l6ZSA9ICU0ZCwgYmxvY2tubyA9ICUyZCIsIHNpemUsIGJzaXplLAorCQkJCSBibG9ja25vKTsKKwkJCXJldCA9CisJCQkgICAgYXQ3Nl9sb2FkX2ludF9md19ibG9jayh1ZGV2LCBibG9ja25vLCBibG9jaywgYnNpemUpOworCQkJYnVmICs9IGJzaXplOworCQkJc2l6ZSAtPSBic2l6ZTsKKwkJCWJsb2Nrbm8rKzsKKworCQkJaWYgKHJldCAhPSBic2l6ZSkKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiYXQ3Nl9sb2FkX2ludF9md19ibG9jayAiCisJCQkJCSAgICJyZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJCW5lZWRfZGZ1X3N0YXRlID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUX1NZTkM6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUX1NZTkMiKTsKKworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXR1cyh1ZGV2LCAmZGZ1X3N0YXRfYnVmKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCisJCQlkZnVfc3RhdGUgPSBkZnVfc3RhdF9idWYuc3RhdGU7CisJCQlkZnVfdGltZW91dCA9IGF0NzZfZ2V0X3RpbWVvdXQoJmRmdV9zdGF0X2J1Zik7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDA7CisKKwkJCS8qIG92ZXJyaWRlIHRoZSB0aW1lb3V0IGZyb20gdGhlIHN0YXR1cyByZXNwb25zZSwKKwkJCSAgIG5lZWRlZCBmb3IgQVQ3NkM1MDVBICovCisJCQlpZiAobWFuaWZlc3Rfc3luY190aW1lb3V0ID4gMCkKKwkJCQlkZnVfdGltZW91dCA9IG1hbmlmZXN0X3N5bmNfdGltZW91dDsKKworCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVTogV2FpdGluZyBmb3IgbWFuaWZlc3QgcGhhc2UiKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShkZnVfdGltZW91dCk7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVDoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfTUFOSUZFU1QiKTsKKwkJCWlzX2RvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVDoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVCIpOworCQkJaXNfZG9uZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9VUExPQURfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfVVBMT0FEX0lETEUiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX0VSUk9SOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9FUlJPUiIpOworCQkJcmV0ID0gLUVQSVBFOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlUgVU5LTk9XTiBTVEFURSAoJWQpIiwgZGZ1X3N0YXRlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKCFpc19kb25lICYmIChyZXQgPj0gMCkpOworCitleGl0OgorCWtmcmVlKGJsb2NrKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEhFWDJTVFJfQlVGRkVSUyA0CisjZGVmaW5lIEhFWDJTVFJfTUFYX0xFTiA2NAorI2RlZmluZSBCSU4ySEVYKHgpICgoeCkgPCAxMCA/ICcwJyArICh4KSA6ICh4KSArICdBJyAtIDEwKQorCisvKiBDb252ZXJ0IGJpbmFyeSBkYXRhIGludG8gaGV4IHN0cmluZyAqLworc3RhdGljIGNoYXIgKmhleDJzdHIodm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXN0YXRpYyBhdG9taWNfdCBhID0gQVRPTUlDX0lOSVQoMCk7CisJc3RhdGljIGNoYXIgYnVmc1tIRVgyU1RSX0JVRkZFUlNdWzMgKiBIRVgyU1RSX01BWF9MRU4gKyAxXTsKKwljaGFyICpyZXQgPSBidWZzW2F0b21pY19pbmNfcmV0dXJuKCZhKSAmIChIRVgyU1RSX0JVRkZFUlMgLSAxKV07CisJY2hhciAqb2J1ZiA9IHJldDsKKwl1OCAqaWJ1ZiA9IGJ1ZjsKKworCWlmIChsZW4gPiBIRVgyU1RSX01BWF9MRU4pCisJCWxlbiA9IEhFWDJTVFJfTUFYX0xFTjsKKworCWlmIChsZW4gPD0gMCkgeworCQlyZXRbMF0gPSAnXDAnOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlIChsZW4tLSkgeworCQkqb2J1ZisrID0gQklOMkhFWCgqaWJ1ZiA+PiA0KTsKKwkJKm9idWYrKyA9IEJJTjJIRVgoKmlidWYgJiAweGYpOworCQkqb2J1ZisrID0gJy0nOworCQlpYnVmKys7CisJfQorCSooLS1vYnVmKSA9ICdcMCc7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BQzJTVFJfQlVGRkVSUyA0CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqbWFjMnN0cih1OCAqbWFjKQoreworCXN0YXRpYyBhdG9taWNfdCBhID0gQVRPTUlDX0lOSVQoMCk7CisJc3RhdGljIGNoYXIgYnVmc1tNQUMyU1RSX0JVRkZFUlNdWzYgKiAzXTsKKwljaGFyICpzdHI7CisKKwlzdHIgPSBidWZzW2F0b21pY19pbmNfcmV0dXJuKCZhKSAmIChNQUMyU1RSX0JVRkZFUlMgLSAxKV07CisJc3ByaW50ZihzdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCW1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0pOworCXJldHVybiBzdHI7Cit9CisKKy8qIExFRCB0cmlnZ2VyICovCitzdGF0aWMgaW50IHR4X2FjdGl2aXR5Oworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIERFRklORV9USU1FUihsZWR0cmlnX3R4X3RpbWVyLCBhdDc2X2xlZHRyaWdfdHhfdGltZXJmdW5jLCAwLCAwKTsKK0RFRklORV9MRURfVFJJR0dFUihsZWR0cmlnX3R4KTsKKworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RhdGljIGludCB0eF9sYXN0YWN0aXZpdHk7CisKKwlpZiAodHhfbGFzdGFjdGl2aXR5ICE9IHR4X2FjdGl2aXR5KSB7CisJCXR4X2xhc3RhY3Rpdml0eSA9IHR4X2FjdGl2aXR5OworCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX3R4LCBMRURfRlVMTCk7CisJCW1vZF90aW1lcigmbGVkdHJpZ190eF90aW1lciwgamlmZmllcyArIEhaIC8gNCk7CisJfSBlbHNlCisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfdHgsIExFRF9PRkYpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2xlZHRyaWdfdHhfYWN0aXZpdHkodm9pZCkKK3sKKwl0eF9hY3Rpdml0eSsrOworCWlmICghdGltZXJfcGVuZGluZygmbGVkdHJpZ190eF90aW1lcikpCisJCW1vZF90aW1lcigmbGVkdHJpZ190eF90aW1lciwgamlmZmllcyArIEhaIC8gNCk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9yZW1hcChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MGEsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBOVUxMLCAwLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfZ2V0X29wX21vZGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldDsKKwl1OCBzYXZlZDsKKwl1OCAqb3BfbW9kZTsKKworCW9wX21vZGUgPSBrbWFsbG9jKDEsIEdGUF9OT0lPKTsKKwlpZiAoIW9wX21vZGUpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MDEsIDAsIG9wX21vZGUsIDEsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJc2F2ZWQgPSAqb3BfbW9kZTsKKwlrZnJlZShvcF9tb2RlKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UgaWYgKHJldCA8IDEpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0dXJuIHNhdmVkOworfQorCisvKiBMb2FkIGEgYmxvY2sgb2YgdGhlIHNlY29uZCAoImV4dGVybmFsIikgcGFydCBvZiB0aGUgZmlybXdhcmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfbG9hZF9leHRfZndfYmxvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBibG9ja25vLAorCQkJCQkgdm9pZCAqYmxvY2ssIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBlLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgICAweDA4MDIsIGJsb2Nrbm8sIGJsb2NrLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfaHdfY2ZnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgdW5pb24gYXQ3Nl9od2NmZyAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwYTAyLCAwLAorCQkJICAgICAgIGJ1ZiwgYnVmX3NpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworLyogSW50ZXJzaWwgYm9hcmRzIHVzZSBhIGRpZmZlcmVudCAidmFsdWUiIGZvciBHZXRIV0NvbmZpZyByZXF1ZXN0cyAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfaHdfY2ZnX2ludGVyc2lsKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCQkgICB1bmlvbiBhdDc2X2h3Y2ZnICpidWYsIGludCBidWZfc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDA5MDIsIDAsCisJCQkgICAgICAgYnVmLCBidWZfc2l6ZSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCisvKiBHZXQgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZGFwdGVyIGFuZCBwdXQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlCisgKiBmaWVsZHMgb2YgJ3ByaXYnICh0aGUgR2V0SFdDb25maWcgcmVxdWVzdCBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHJlc3VsdAorICogZGVwZW5kcyBvbiB0aGUgYm9hcmQgdHlwZSkgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9nZXRfaHdfY29uZmlnKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwl1bmlvbiBhdDc2X2h3Y2ZnICpod2NmZyA9IGttYWxsb2Moc2l6ZW9mKCpod2NmZyksIEdGUF9LRVJORUwpOworCisJaWYgKCFod2NmZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYXQ3Nl9pc19pbnRlcnNpbChwcml2LT5ib2FyZF90eXBlKSkgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmdfaW50ZXJzaWwocHJpdi0+dWRldiwgaHdjZmcsCisJCQkJCSAgICAgICBzaXplb2YoaHdjZmctPmkpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPmkubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJcHJpdi0+cmVndWxhdG9yeV9kb21haW4gPSBod2NmZy0+aS5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9IGVsc2UgaWYgKGF0NzZfaXNfNTAzcmZtZChwcml2LT5ib2FyZF90eXBlKSkgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmcocHJpdi0+dWRldiwgaHdjZmcsIHNpemVvZihod2NmZy0+cjMpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPnIzLm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPnIzLnJlZ3VsYXRvcnlfZG9tYWluOworCX0gZWxzZSB7CisJCXJldCA9IGF0NzZfZ2V0X2h3X2NmZyhwcml2LT51ZGV2LCBod2NmZywgc2l6ZW9mKGh3Y2ZnLT5yNSkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBod2NmZy0+cjUubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJcHJpdi0+cmVndWxhdG9yeV9kb21haW4gPSBod2NmZy0+cjUucmVndWxhdG9yeV9kb21haW47CisJfQorCitleGl0OgorCWtmcmVlKGh3Y2ZnKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBIVyBDb25maWcgKGVycm9yICVkKVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnX2RvbWFpbiBjb25zdCAqYXQ3Nl9nZXRfcmVnX2RvbWFpbih1MTYgY29kZSkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgc3RydWN0IHJlZ19kb21haW4gY29uc3QgZmRfdGFiW10gPSB7CisJCXsgMHgxMCwgIkZDQyAoVVNBKSIsIDB4N2ZmIH0sCS8qIGNoIDEtMTEgKi8KKwkJeyAweDIwLCAiSUMgKENhbmFkYSkiLCAweDdmZiB9LAkvKiBjaCAxLTExICovCisJCXsgMHgzMCwgIkVUU0kgKG1vc3Qgb2YgRXVyb3BlKSIsIDB4MWZmZiB9LAkvKiBjaCAxLTEzICovCisJCXsgMHgzMSwgIlNwYWluIiwgMHg2MDAgfSwJLyogY2ggMTAtMTEgKi8KKwkJeyAweDMyLCAiRnJhbmNlIiwgMHgxZTAwIH0sCS8qIGNoIDEwLTEzICovCisJCXsgMHg0MCwgIk1LSyAoSmFwYW4pIiwgMHgyMDAwIH0sCS8qIGNoIDE0ICovCisJCXsgMHg0MSwgIk1LSzEgKEphcGFuKSIsIDB4M2ZmZiB9LAkvKiBjaCAxLTE0ICovCisJCXsgMHg1MCwgIklzcmFlbCIsIDB4M2ZjIH0sCS8qIGNoIDMtOSAqLworCQl7IDB4MDAsICI8dW5rbm93bj4iLCAweGZmZmZmZmZmIH0JLyogY2ggMS0zMiAqLworCX07CisKKwkvKiBMYXN0IGVudHJ5IGlzIGZhbGxiYWNrIGZvciB1bmtub3duIGRvbWFpbiBjb2RlICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmRfdGFiKSAtIDE7IGkrKykKKwkJaWYgKGNvZGUgPT0gZmRfdGFiW2ldLmNvZGUpCisJCQlicmVhazsKKworCXJldHVybiAmZmRfdGFiW2ldOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9taWIoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHUxNiBtaWIsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgICBpbnQgYnVmX3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIG1pYiA8PCA4LCAwLCBidWYsIGJ1Zl9zaXplLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPj0gMCAmJiByZXQgIT0gYnVmX3NpemUpCisJCXJldHVybiAtRUlPOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybiBwb3NpdGl2ZSBudW1iZXIgZm9yIHN0YXR1cywgbmVnYXRpdmUgZm9yIGFuIGVycm9yICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9jbWRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBjbWQpCit7CisJdTggKnN0YXRfYnVmOworCWludCByZXQ7CisKKwlzdGF0X2J1ZiA9IGttYWxsb2MoNDAsIEdGUF9OT0lPKTsKKwlpZiAoIXN0YXRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MjIsCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UsIGNtZCwgMCwgc3RhdF9idWYsCisJCQk0MCwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gc3RhdF9idWZbNV07CisJa2ZyZWUoc3RhdF9idWYpOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUtFX0NNRF9DQVNFKGMpIGNhc2UgKGMpOiByZXR1cm4gI2MKK3N0YXRpYyBjb25zdCBjaGFyICphdDc2X2dldF9jbWRfc3RyaW5nKHU4IGNtZF9zdGF0dXMpCit7CisJc3dpdGNoIChjbWRfc3RhdHVzKSB7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1NFVF9NSUIpOworCQlNQUtFX0NNRF9DQVNFKENNRF9HRVRfTUlCKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU0NBTik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX0pPSU4pOworCQlNQUtFX0NNRF9DQVNFKENNRF9TVEFSVF9JQlNTKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfUkFESU9fT04pOworCQlNQUtFX0NNRF9DQVNFKENNRF9SQURJT19PRkYpOworCQlNQUtFX0NNRF9DQVNFKENNRF9TVEFSVFVQKTsKKwl9CisKKwlyZXR1cm4gIlVOS05PV04iOworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2NhcmRfY29tbWFuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggY21kLCB2b2lkICpidWYsCisJCQkJIGludCBidWZfc2l6ZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X2NvbW1hbmQgKmNtZF9idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArCisJCQkJCSAgICAgICBidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWNtZF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kX2J1Zi0+Y21kID0gY21kOworCWNtZF9idWYtPnJlc2VydmVkID0gMDsKKwljbWRfYnVmLT5zaXplID0gY3B1X3RvX2xlMTYoYnVmX3NpemUpOworCW1lbWNweShjbWRfYnVmLT5kYXRhLCBidWYsIGJ1Zl9zaXplKTsKKworCWF0NzZfZGJnX2R1bXAoREJHX0NNRCwgY21kX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhdDc2X2NvbW1hbmQpICsgYnVmX3NpemUsCisJCSAgICAgICJpc3N1aW5nIGNvbW1hbmQgJXMgKDB4JTAyeCkiLAorCQkgICAgICBhdDc2X2dldF9jbWRfc3RyaW5nKGNtZCksIGNtZCk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBlLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMCwgMCwgY21kX2J1ZiwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArIGJ1Zl9zaXplLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWtmcmVlKGNtZF9idWYpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFLRV9DTURfU1RBVFVTX0NBU0UoYykJY2FzZSAoYyk6IHJldHVybiAjYworc3RhdGljIGNvbnN0IGNoYXIgKmF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHU4IGNtZF9zdGF0dXMpCit7CisJc3dpdGNoIChjbWRfc3RhdHVzKSB7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSURMRSk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfQ09NUExFVEUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1VOS05PV04pOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19GVU5DVElPTl9OT1RfU1VQUE9SVEVEKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19USU1FX09VVCk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0hPU1RfRkFJTFVSRSk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfU0NBTl9GQUlMRUQpOworCX0KKworCXJldHVybiAiVU5LTk9XTiI7Cit9CisKKy8qIFdhaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMgY29tcGxldGVkICovCitzdGF0aWMgaW50IGF0NzZfd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBjbWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIENNRF9DT01QTEVUSU9OX1RJTUVPVVQ7CisKKwlkbyB7CisJCXN0YXR1cyA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgY21kKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X2NtZF9zdGF0dXMgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCisJCWF0NzZfZGJnKERCR19XQUlUX0NPTVBMRVRFLAorCQkJICIlczogV2FpdGluZyBvbiBjbWQgJWQsIHN0YXR1cyA9ICVkICglcykiLAorCQkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgY21kLCBzdGF0dXMsCisJCQkgYXQ3Nl9nZXRfY21kX3N0YXR1c19zdHJpbmcoc3RhdHVzKSk7CisKKwkJaWYgKHN0YXR1cyAhPSBDTURfU1RBVFVTX0lOX1BST0dSRVNTCisJCSAgICAmJiBzdGF0dXMgIT0gQ01EX1NUQVRVU19JRExFKQorCQkJYnJlYWs7CisKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaIC8gMTApOwkvKiAxMDAgbXMgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogY29tcGxldGlvbiB0aW1lb3V0IGZvciBjb21tYW5kICVkXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgY21kKTsKKwkJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9taWIoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IHNldF9taWJfYnVmZmVyICpidWYpCit7CisJaW50IHJldDsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0VUX01JQiwgYnVmLAorCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3Qgc2V0X21pYl9idWZmZXIsCisJCQkJCSAgICAgZGF0YSkgKyBidWYtPnNpemUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1NFVF9NSUIpOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6IHNldF9taWI6IGF0NzZfd2FpdF9jb21wbGV0aW9uIGZhaWxlZCAiCisJCSAgICAgICAid2l0aCAlZFxuIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybiA8IDAgb24gZXJyb3IsID09IDAgaWYgbm8gY29tbWFuZCBzZW50LCA9PSAxIGlmIGNtZCBzZW50ICovCitzdGF0aWMgaW50IGF0NzZfc2V0X3JhZGlvKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBlbmFibGUpCit7CisJaW50IHJldDsKKwlpbnQgY21kOworCisJaWYgKHByaXYtPnJhZGlvX29uID09IGVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwljbWQgPSBlbmFibGUgPyBDTURfUkFESU9fT04gOiBDTURfUkFESU9fT0ZGOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIGNtZCwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCglZCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgY21kLCByZXQpOworCWVsc2UKKwkJcmV0ID0gMTsKKworCXByaXYtPnJhZGlvX29uID0gZW5hYmxlOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCBjdXJyZW50IHBvd2VyIHNhdmUgbW9kZSAoQVQ3Nl9QTV9PRkYvQVQ3Nl9QTV9PTi9BVDc2X1BNX1NNQVJUKSAqLworc3RhdGljIGludCBhdDc2X3NldF9wbV9tb2RlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDX01HTVQ7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWNfbWdtdCwgcG93ZXJfbWdtdF9tb2RlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHByaXYtPnBtX21vZGU7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwbV9tb2RlKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9wcmVhbWJsZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1OCB0eXBlKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHByZWFtYmxlX3R5cGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gdHlwZTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHByZWFtYmxlKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9mcmFnKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHUxNiBzaXplKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQzsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAyOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hYywgZnJhZ190aHJlc2hvbGQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChmcmFnIHRocmVzaG9sZCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcnRzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHUxNiBzaXplKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQzsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAyOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hYywgcnRzX3RocmVzaG9sZCk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLndvcmQgPSBjcHVfdG9fbGUxNihzaXplKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHJ0cykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfYXV0b3JhdGVfZmFsbGJhY2soc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IG9ub2ZmKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHR4YXV0b3JhdGVfZmFsbGJhY2spOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gb25vZmY7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChhdXRvcmF0ZSBmYWxsYmFjaykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjX2FkZHIoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjX2FkZHIgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY19hZGRyKSwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19BRERSLCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX2FkZHIpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19BRERSKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX0FERFI6IG1hY19hZGRyICVzIHJlcyAweCV4IDB4JXgiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgbWFjMnN0cihtLT5tYWNfYWRkciksIG0tPnJlc1swXSwgbS0+cmVzWzFdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5ncm91cF9hZGRyKTsgaSsrKQorCQlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfQUREUjogZ3JvdXAgYWRkciAlZDogJXMsICIKKwkJCSAic3RhdHVzICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBpLAorCQkJIG1hYzJzdHIobS0+Z3JvdXBfYWRkcltpXSksIG0tPmdyb3VwX2FkZHJfc3RhdHVzW2ldKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjX3dlcChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCBpOworCWludCByZXQ7CisJaW50IGtleV9sZW47CisJc3RydWN0IG1pYl9tYWNfd2VwICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfd2VwKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX1dFUCwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY193ZXApKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19XRVApIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfV0VQOiBwcml2X2ludm9rZWQgJXUgZGVmX2tleV9pZCAldSAiCisJCSAia2V5X2xlbiAldSBleGNsX3VuZW5jciAldSB3ZXBfaWN2X2VyciAldSB3ZXBfZXhjbHVkZWQgJXUgIgorCQkgImVuY3JfbGV2ZWwgJXUga2V5ICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgbS0+cHJpdmFjeV9pbnZva2VkLCBtLT53ZXBfZGVmYXVsdF9rZXlfaWQsCisJCSBtLT53ZXBfa2V5X21hcHBpbmdfbGVuLCBtLT5leGNsdWRlX3VuZW5jcnlwdGVkLAorCQkgbGUzMl90b19jcHUobS0+d2VwX2ljdl9lcnJvcl9jb3VudCksCisJCSBsZTMyX3RvX2NwdShtLT53ZXBfZXhjbHVkZWRfY291bnQpLCBtLT5lbmNyeXB0aW9uX2xldmVsLAorCQkgbS0+d2VwX2RlZmF1bHRfa2V5X2lkKTsKKworCWtleV9sZW4gPSAobS0+ZW5jcnlwdGlvbl9sZXZlbCA9PSAxKSA/CisJICAgIFdFUF9TTUFMTF9LRVlfTEVOIDogV0VQX0xBUkdFX0tFWV9MRU47CisKKwlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykKKwkJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX1dFUDoga2V5ICVkOiAlcyIsCisJCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBpLAorCQkJIGhleDJzdHIobS0+d2VwX2RlZmF1bHRfa2V5dmFsdWVbaV0sIGtleV9sZW4pKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjX21nbXQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjX21nbXQgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19NR01ULCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19NR01UKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX01HTVQ6IGJlYWNvbl9wZXJpb2QgJWQgQ0ZQX21heF9kdXJhdGlvbiAiCisJCSAiJWQgbWVkaXVtX29jY3VwYW5jeV9saW1pdCAlZCBzdGF0aW9uX2lkIDB4JXggQVRJTV93aW5kb3cgJWQgIgorCQkgIkNGUF9tb2RlICVkIHByaXZhY3lfb3B0X2ltcGwgJWQgRFRJTV9wZXJpb2QgJWQgQ0ZQX3BlcmlvZCAlZCAiCisJCSAiY3VycmVudF9ic3NpZCAlcyBjdXJyZW50X2Vzc2lkICVzIGN1cnJlbnRfYnNzX3R5cGUgJWQgIgorCQkgInBtX21vZGUgJWQgaWJzc19jaGFuZ2UgJWQgcmVzICVkICIKKwkJICJtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZCAlZCAiCisJCSAiaW50ZXJuYXRpb25hbF9yb2FtaW5nICVkIGNvdW50cnlfc3RyaW5nICUuM3MiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBsZTE2X3RvX2NwdShtLT5iZWFjb25fcGVyaW9kKSwKKwkJIGxlMTZfdG9fY3B1KG0tPkNGUF9tYXhfZHVyYXRpb24pLAorCQkgbGUxNl90b19jcHUobS0+bWVkaXVtX29jY3VwYW5jeV9saW1pdCksCisJCSBsZTE2X3RvX2NwdShtLT5zdGF0aW9uX2lkKSwgbGUxNl90b19jcHUobS0+QVRJTV93aW5kb3cpLAorCQkgbS0+Q0ZQX21vZGUsIG0tPnByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkLCBtLT5EVElNX3BlcmlvZCwKKwkJIG0tPkNGUF9wZXJpb2QsIG1hYzJzdHIobS0+Y3VycmVudF9ic3NpZCksCisJCSBoZXgyc3RyKG0tPmN1cnJlbnRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIG0tPmN1cnJlbnRfYnNzX3R5cGUsIG0tPnBvd2VyX21nbXRfbW9kZSwgbS0+aWJzc19jaGFuZ2UsCisJCSBtLT5yZXMsIG0tPm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkLAorCQkgbS0+bXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfZW5hYmxlZCwgbS0+Y291bnRyeV9zdHJpbmcpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUMsIG0sIHNpemVvZihzdHJ1Y3QgbWliX21hYykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDOiBtYXhfdHhfbXNkdV9saWZldGltZSAlZCAiCisJCSAibWF4X3J4X2xpZmV0aW1lICVkIGZyYWdfdGhyZXNob2xkICVkIHJ0c190aHJlc2hvbGQgJWQgIgorCQkgImN3bWluICVkIGN3bWF4ICVkIHNob3J0X3JldHJ5X3RpbWUgJWQgbG9uZ19yZXRyeV90aW1lICVkICIKKwkJICJzY2FuX3R5cGUgJWQgc2Nhbl9jaGFubmVsICVkIHByb2JlX2RlbGF5ICV1ICIKKwkJICJtaW5fY2hhbm5lbF90aW1lICVkIG1heF9jaGFubmVsX3RpbWUgJWQgbGlzdGVuX2ludCAlZCAiCisJCSAiZGVzaXJlZF9zc2lkICVzIGRlc2lyZWRfYnNzaWQgJXMgZGVzaXJlZF9ic3N0eXBlICVkIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIGxlMzJfdG9fY3B1KG0tPm1heF90eF9tc2R1X2xpZmV0aW1lKSwKKwkJIGxlMzJfdG9fY3B1KG0tPm1heF9yeF9saWZldGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5mcmFnX3RocmVzaG9sZCksIGxlMTZfdG9fY3B1KG0tPnJ0c190aHJlc2hvbGQpLAorCQkgbGUxNl90b19jcHUobS0+Y3dtaW4pLCBsZTE2X3RvX2NwdShtLT5jd21heCksCisJCSBtLT5zaG9ydF9yZXRyeV90aW1lLCBtLT5sb25nX3JldHJ5X3RpbWUsIG0tPnNjYW5fdHlwZSwKKwkJIG0tPnNjYW5fY2hhbm5lbCwgbGUxNl90b19jcHUobS0+cHJvYmVfZGVsYXkpLAorCQkgbGUxNl90b19jcHUobS0+bWluX2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5tYXhfY2hhbm5lbF90aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmxpc3Rlbl9pbnRlcnZhbCksCisJCSBoZXgyc3RyKG0tPmRlc2lyZWRfc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgbWFjMnN0cihtLT5kZXNpcmVkX2Jzc2lkKSwgbS0+ZGVzaXJlZF9ic3N0eXBlKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfcGh5KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX3BoeSAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfUEhZLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9waHkpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKFBIWSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIFBIWTogZWRfdGhyZXNob2xkICVkIHNsb3RfdGltZSAlZCAiCisJCSAic2lmc190aW1lICVkIHByZWFtYmxlX2xlbmd0aCAlZCBwbGNwX2hlYWRlcl9sZW5ndGggJWQgIgorCQkgIm1wZHVfbWF4X2xlbmd0aCAlZCBjY2FfbW9kZV9zdXBwb3J0ZWQgJWQgb3BlcmF0aW9uX3JhdGVfc2V0ICIKKwkJICIweCV4IDB4JXggMHgleCAweCV4IGNoYW5uZWxfaWQgJWQgY3VycmVudF9jY2FfbW9kZSAlZCAiCisJCSAicGh5X3R5cGUgJWQgY3VycmVudF9yZWdfZG9tYWluICVkIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUzMl90b19jcHUobS0+ZWRfdGhyZXNob2xkKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnNsb3RfdGltZSksIGxlMTZfdG9fY3B1KG0tPnNpZnNfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5wcmVhbWJsZV9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+cGxjcF9oZWFkZXJfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1wZHVfbWF4X2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5jY2FfbW9kZV9zdXBwb3J0ZWQpLCBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMF0sCisJCSBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMV0sIG0tPm9wZXJhdGlvbl9yYXRlX3NldFsyXSwKKwkJIG0tPm9wZXJhdGlvbl9yYXRlX3NldFszXSwgbS0+Y2hhbm5lbF9pZCwgbS0+Y3VycmVudF9jY2FfbW9kZSwKKwkJIG0tPnBoeV90eXBlLCBtLT5jdXJyZW50X3JlZ19kb21haW4pOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9sb2NhbChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9sb2NhbCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTE9DQUwsIG0sIHNpemVvZihzdHJ1Y3QgbWliX2xvY2FsKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChMT0NBTCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIExPQ0FMOiBiZWFjb25fZW5hYmxlICVkICIKKwkJICJ0eGF1dG9yYXRlX2ZhbGxiYWNrICVkIHNzaWRfc2l6ZSAlZCBwcm9taXNjdW91c19tb2RlICVkICIKKwkJICJwcmVhbWJsZV90eXBlICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgbS0+YmVhY29uX2VuYWJsZSwKKwkJIG0tPnR4YXV0b3JhdGVfZmFsbGJhY2ssIG0tPnNzaWRfc2l6ZSwgbS0+cHJvbWlzY3VvdXNfbW9kZSwKKwkJIG0tPnByZWFtYmxlX3R5cGUpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tZG9tYWluKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21kb21haW4gKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NRE9NQUlOLCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWRvbWFpbikpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTURPTUFJTikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1ET01BSU46IGNoYW5uZWxfbGlzdCAlcyIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBoZXgyc3RyKG0tPmNoYW5uZWxfbGlzdCwgc2l6ZW9mKG0tPmNoYW5uZWxfbGlzdCkpKTsKKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1ET01BSU46IHR4X3Bvd2VybGV2ZWwgJXMiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgaGV4MnN0cihtLT50eF9wb3dlcmxldmVsLCBzaXplb2YobS0+dHhfcG93ZXJsZXZlbCkpKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKKy8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zdGFydF9tb25pdG9yKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcmVxX3NjYW4gc2NhbjsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX3NjYW4pKTsKKwltZW1zZXQoc2Nhbi5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCisJc2Nhbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwlzY2FuLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9QQVNTSVZFOworCXNjYW4uaW50ZXJuYXRpb25hbF9zY2FuID0gMDsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0NBTiwgJnNjYW4sIHNpemVvZihzY2FuKSk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIENNRF9TQ0FOKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENhbGN1bGF0ZSBwYWRkaW5nIGZyb20gdHhidWYtPndsZW5ndGggKHdoaWNoIGV4Y2x1ZGVzIHRoZSBVU0IgVFggaGVhZGVyKSwKKyAgIGxpa2VseSB0byBjb21wZW5zYXRlIGEgZmxhdyBpbiB0aGUgQVQ3NkM1MDNBIFVTQiBwYXJ0IC4uLiAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9jYWxjX3BhZGRpbmcoaW50IHdsZW4pCit7CisJLyogYWRkIHRoZSBVU0IgVFggaGVhZGVyICovCisJd2xlbiArPSBBVDc2X1RYX0hEUkxFTjsKKworCXdsZW4gPSB3bGVuICUgNjQ7CisKKwlpZiAod2xlbiA8IDUwKQorCQlyZXR1cm4gNTAgLSB3bGVuOworCisJaWYgKHdsZW4gPj0gNjEpCisJCXJldHVybiA2NCArIDUwIC0gd2xlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OworCisJcHJpdi0+cnhfdGFza2xldC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdXJiOworCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBhdDc2X3N1Ym1pdF9yeF91cmIoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCWludCBzaXplOworCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5yeF9za2I7CisKKwlpZiAoIXByaXYtPnJ4X3VyYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogcHJpdi0+cnhfdXJiIGlzIE5VTExcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCFza2IpIHsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyKSk7CisJCWlmICghc2tiKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYWxsb2NhdGUgcnggc2tidWZmXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisJCXByaXYtPnJ4X3NrYiA9IHNrYjsKKwl9IGVsc2UgeworCQlza2JfcHVzaChza2IsIHNrYl9oZWFkcm9vbShza2IpKTsKKwkJc2tiX3RyaW0oc2tiLCAwKTsKKwl9CisKKwlzaXplID0gc2tiX3RhaWxyb29tKHNrYik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+cnhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT5yeF9waXBlLAorCQkJICBza2JfcHV0KHNrYiwgc2l6ZSksIHNpemUsIGF0NzZfcnhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnJ4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRU5PREVWKQorCQkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULAorCQkJCSAidXNiX3N1Ym1pdF91cmIgcmV0dXJuZWQgLUVOT0RFViIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByeCwgdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJfQorCitleGl0OgorCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PREVWKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3Qgc3VibWl0IHJ4IHVyYiAtIHBsZWFzZSB1bmxvYWQgdGhlICIKKwkJICAgICAgICJkcml2ZXIgYW5kL29yIHBvd2VyIGN5Y2xlIHRoZSBkZXZpY2VcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyogRG93bmxvYWQgZXh0ZXJuYWwgZmlybXdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9sb2FkX2V4dGVybmFsX2Z3KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZndlbnRyeSAqZndlKQoreworCWludCByZXQ7CisJaW50IG9wX21vZGU7CisJaW50IGJsb2Nrbm8gPSAwOworCWludCBic2l6ZTsKKwl1OCAqYmxvY2s7CisJdTggKmJ1ZiA9IGZ3ZS0+ZXh0Znc7CisJaW50IHNpemUgPSBmd2UtPmV4dGZ3X3NpemU7CisKKwlpZiAoIWJ1ZiB8fCAhc2l6ZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlvcF9tb2RlID0gYXQ3Nl9nZXRfb3BfbW9kZSh1ZGV2KTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJvcG1vZGUgJWQiLCBvcF9tb2RlKTsKKworCWlmIChvcF9tb2RlICE9IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhPVVRfRkxBU0gpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgInVuZXhwZWN0ZWQgb3Btb2RlICVkXG4iLAorCQkJICAgb3BfbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJsb2NrID0ga21hbGxvYyhGV19CTE9DS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImRvd25sb2FkaW5nIGV4dGVybmFsIGZpcm13YXJlIik7CisKKwkvKiBmb3IgZncgPj0gMC4xMDAsIHRoZSBkZXZpY2UgbmVlZHMgYW4gZXh0cmEgZW1wdHkgYmxvY2sgKi8KKwlkbyB7CisJCWJzaXplID0gbWluX3QoaW50LCBzaXplLCBGV19CTE9DS19TSVpFKTsKKwkJbWVtY3B5KGJsb2NrLCBidWYsIGJzaXplKTsKKwkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULAorCQkJICJleHQgZncsIHNpemUgbGVmdCA9ICU1ZCwgYnNpemUgPSAlNGQsIGJsb2Nrbm8gPSAlMmQiLAorCQkJIHNpemUsIGJzaXplLCBibG9ja25vKTsKKwkJcmV0ID0gYXQ3Nl9sb2FkX2V4dF9md19ibG9jayh1ZGV2LCBibG9ja25vLCBibG9jaywgYnNpemUpOworCQlpZiAocmV0ICE9IGJzaXplKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCSAgICJsb2FkaW5nICVkdGggZmlybXdhcmUgYmxvY2sgZmFpbGVkOiAlZFxuIiwKKwkJCQkgICBibG9ja25vLCByZXQpOworCQkJZ290byBleGl0OworCQl9CisJCWJ1ZiArPSBic2l6ZTsKKwkJc2l6ZSAtPSBic2l6ZTsKKwkJYmxvY2tubysrOworCX0gd2hpbGUgKGJzaXplID4gMCk7CisKKwlpZiAoYXQ3Nl9pc181MDVhKGZ3ZS0+Ym9hcmRfdHlwZSkpIHsKKwkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiMjAwIG1zIGRlbGF5IGZvciA1MDVhIik7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDUgKyAxKTsKKwl9CisKK2V4aXQ6CisJa2ZyZWUoYmxvY2spOworCWlmIChyZXQgPCAwKQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGV4dGVybmFsIGZpcm13YXJlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogRG93bmxvYWQgaW50ZXJuYWwgZmlybXdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9sb2FkX2ludGVybmFsX2Z3KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZndlbnRyeSAqZndlKQoreworCWludCByZXQ7CisJaW50IG5lZWRfcmVtYXAgPSAhYXQ3Nl9pc181MDVhKGZ3ZS0+Ym9hcmRfdHlwZSk7CisKKwlyZXQgPSBhdDc2X3VzYmRmdV9kb3dubG9hZCh1ZGV2LCBmd2UtPmludGZ3LCBmd2UtPmludGZ3X3NpemUsCisJCQkJICAgbmVlZF9yZW1hcCA/IDAgOiAyICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBpbnRlcm5hbCBmdyBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInNlbmRpbmcgUkVNQVAiKTsKKworCS8qIG5vIFJFTUFQIGZvciA1MDVBIChzZWUgU0YgZHJpdmVyKSAqLworCWlmIChuZWVkX3JlbWFwKSB7CisJCXJldCA9IGF0NzZfcmVtYXAodWRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCSAgICJzZW5kaW5nIFJFTUFQIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAic2xlZXBpbmcgZm9yIDIgc2Vjb25kcyIpOworCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgyICogSFogKyAxKTsKKwl1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOworCitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdGFydHVwX2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X2NhcmRfY29uZmlnICpjY2ZnID0gJnByaXYtPmNhcmRfY29uZmlnOworCWludCByZXQ7CisKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBzc2lkICUuKnMgKCVzKSBtb2RlICVzIGNoICVkIHdlcCAlcyBrZXkgJWQgIgorCQkgImtleWxlbiAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+ZXNzaWRfc2l6ZSwKKwkJIHByaXYtPmVzc2lkLCBoZXgyc3RyKHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MgPyAiYWRob2MiIDogImluZnJhIiwKKwkJIHByaXYtPmNoYW5uZWwsIHByaXYtPndlcF9lbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKKwkJIHByaXYtPndlcF9rZXlfaWQsIHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSk7CisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogcHJlYW1ibGUgJXMgcnRzICVkIHJldHJ5ICVkIGZyYWcgJWQgIgorCQkgInR4cmF0ZSAlcyBhdXRoX21vZGUgJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBwcmVhbWJsZXNbcHJpdi0+cHJlYW1ibGVfdHlwZV0sIHByaXYtPnJ0c190aHJlc2hvbGQsCisJCSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdCwgcHJpdi0+ZnJhZ190aHJlc2hvbGQsCisJCSBwcml2LT50eHJhdGUgPT0gVFhfUkFURV8xTUJJVCA/ICIxTUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfMk1CSVQgPyAiMk1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzVfNU1CSVQgPyAiNS41TUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfMTFNQklUID8gIjExTUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfQVVUTyA/ICJhdXRvIiA6ICI8aW52YWxpZD4iLCBwcml2LT5hdXRoX21vZGUpOworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHBtX21vZGUgJWQgcG1fcGVyaW9kICVkIGF1dGhfbW9kZSAlcyAiCisJCSAic2Nhbl90aW1lcyAlZCAlZCBzY2FuX21vZGUgJXMiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBwcml2LT5wbV9tb2RlLCBwcml2LT5wbV9wZXJpb2QsCisJCSBwcml2LT5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX09QRU4gPyAib3BlbiIgOiAic2hhcmVkX3NlY3JldCIsCisJCSBwcml2LT5zY2FuX21pbl90aW1lLCBwcml2LT5zY2FuX21heF90aW1lLAorCQkgcHJpdi0+c2Nhbl9tb2RlID09IFNDQU5fVFlQRV9BQ1RJVkUgPyAiYWN0aXZlIiA6ICJwYXNzaXZlIik7CisKKwltZW1zZXQoY2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X2NhcmRfY29uZmlnKSk7CisJY2NmZy0+cHJvbWlzY3VvdXNfbW9kZSA9IDA7CisJY2NmZy0+c2hvcnRfcmV0cnlfbGltaXQgPSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdDsKKworCWlmIChwcml2LT53ZXBfZW5hYmxlZCkgeworCQlpZiAocHJpdi0+d2VwX2tleXNfbGVuW3ByaXYtPndlcF9rZXlfaWRdID4gV0VQX1NNQUxMX0tFWV9MRU4pCisJCQljY2ZnLT5lbmNyeXB0aW9uX3R5cGUgPSAyOworCQllbHNlCisJCQljY2ZnLT5lbmNyeXB0aW9uX3R5cGUgPSAxOworCisJCS8qIGphbDogYWx3YXlzIGV4Y2x1ZGUgdW5lbmNyeXB0ZWQgaWYgV0VQIGlzIGFjdGl2ZSAqLworCQljY2ZnLT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKKwl9IGVsc2UgeworCQljY2ZnLT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMDsKKwkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMDsKKwl9CisKKwljY2ZnLT5ydHNfdGhyZXNob2xkID0gY3B1X3RvX2xlMTYocHJpdi0+cnRzX3RocmVzaG9sZCk7CisJY2NmZy0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihwcml2LT5mcmFnX3RocmVzaG9sZCk7CisKKwltZW1jcHkoY2NmZy0+YmFzaWNfcmF0ZV9zZXQsIGh3X3JhdGVzLCA0KTsKKwkvKiBqYWw6IHJlYWxseSBuZWVkZWQsIHdlIGRvIGEgc2V0X21pYiBmb3IgYXV0b3JhdGUgbGF0ZXIgPz8/ICovCisJY2NmZy0+YXV0b19yYXRlX2ZhbGxiYWNrID0gKHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFX0FVVE8gPyAxIDogMCk7CisJY2NmZy0+Y2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJY2NmZy0+cHJpdmFjeV9pbnZva2VkID0gcHJpdi0+d2VwX2VuYWJsZWQ7CisJbWVtY3B5KGNjZmctPmN1cnJlbnRfc3NpZCwgcHJpdi0+ZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwljY2ZnLT5zc2lkX2xlbiA9IHByaXYtPmVzc2lkX3NpemU7CisKKwljY2ZnLT53ZXBfZGVmYXVsdF9rZXlfaWQgPSBwcml2LT53ZXBfa2V5X2lkOworCW1lbWNweShjY2ZnLT53ZXBfZGVmYXVsdF9rZXlfdmFsdWUsIHByaXYtPndlcF9rZXlzLAorCSAgICAgICBzaXplb2YocHJpdi0+d2VwX2tleXMpKTsKKworCWNjZmctPnNob3J0X3ByZWFtYmxlID0gcHJpdi0+cHJlYW1ibGVfdHlwZTsKKwljY2ZnLT5iZWFjb25fcGVyaW9kID0gY3B1X3RvX2xlMTYocHJpdi0+YmVhY29uX3BlcmlvZCk7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NUQVJUVVAsICZwcml2LT5jYXJkX2NvbmZpZywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X2NhcmRfY29uZmlnKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1NUQVJUVVApOworCisJLyogcmVtb3ZlIEJTU0lEIGZyb20gcHJldmlvdXMgcnVuICovCisJbWVtc2V0KHByaXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisKKwlpZiAoYXQ3Nl9zZXRfcmFkaW8ocHJpdiwgMSkgPT0gMSkKKwkJYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1JBRElPX09OKTsKKworCXJldCA9IGF0NzZfc2V0X3ByZWFtYmxlKHByaXYsIHByaXYtPnByZWFtYmxlX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfZnJhZyhwcml2LCBwcml2LT5mcmFnX3RocmVzaG9sZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9ydHMocHJpdiwgcHJpdi0+cnRzX3RocmVzaG9sZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9hdXRvcmF0ZV9mYWxsYmFjayhwcml2LAorCQkJCQkgcHJpdi0+dHhyYXRlID09IFRYX1JBVEVfQVVUTyA/IDEgOiAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X3BtX21vZGUocHJpdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoYXQ3Nl9kZWJ1ZyAmIERCR19NSUIpIHsKKwkJYXQ3Nl9kdW1wX21pYl9tYWMocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWFjX2FkZHIocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWFjX21nbXQocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWFjX3dlcChwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tZG9tYWluKHByaXYpOworCQlhdDc2X2R1bXBfbWliX3BoeShwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9sb2NhbChwcml2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX3NldF9wcm9taXNjKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfc2V0X3Byb21pc2MpOworCWludCByZXQgPSAwOworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTE9DQUw7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9sb2NhbCwgcHJvbWlzY3VvdXNfbW9kZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBwcml2LT5wcm9taXNjID8gMSA6IDA7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwcm9taXNjdW91c19tb2RlKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBTdWJtaXQgUnggdXJiIGJhY2sgdG8gdGhlIGRldmljZSAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX3N1Ym1pdF9yeChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3N1Ym1pdF9yeCk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCWF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfdGFza2xldCh1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IChzdHJ1Y3QgdXJiICopcGFyYW07CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7IDAgfTsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKSB7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImRldmljZSB1bnBsdWdnZWQiKTsKKwkJaWYgKHVyYikKKwkJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInVyYiBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXByaXYtPnJ4X3NrYiB8fCAhcHJpdi0+cnhfc2tiLT5kYXRhKQorCQlyZXR1cm47CisKKwlidWYgPSAoc3RydWN0IGF0NzZfcnhfYnVmZmVyICopcHJpdi0+cnhfc2tiLT5kYXRhOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCQlhdDc2X2RiZyhEQkdfVVJCLAorCQkJCSAiJXMgJXM6IC0gbm9uemVybyBSeCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJCSBfX2Z1bmNfXywgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkJCSB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUlhfQVRNRUxfSERSLAorCQkgIiVzOiByeCBmcmFtZTogcmF0ZSAlZCByc3NpICVkIG5vaXNlICVkIGxpbmsgJWQiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBidWYtPnJ4X3JhdGUsIGJ1Zi0+cnNzaSwKKwkJIGJ1Zi0+bm9pc2VfbGV2ZWwsIGJ1Zi0+bGlua19xdWFsaXR5KTsKKworCXNrYl9wdWxsKHByaXYtPnJ4X3NrYiwgQVQ3Nl9SWF9IRFJMRU4pOworCXNrYl90cmltKHByaXYtPnJ4X3NrYiwgbGUxNl90b19jcHUoYnVmLT53bGVuZ3RoKSk7CisJYXQ3Nl9kYmdfZHVtcChEQkdfUlhfREFUQSwgcHJpdi0+cnhfc2tiLT5kYXRhLAorCQkgICAgICBwcml2LT5yeF9za2ItPmxlbiwgIlJYOiBsZW49JWQiLCBwcml2LT5yeF9za2ItPmxlbik7CisKKwlyeF9zdGF0dXMuc2lnbmFsID0gYnVmLT5yc3NpOworCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQ7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICJjYWxsaW5nIGllZWU4MDIxMV9yeF9pcnFzYWZlKCk6ICVkLyVkIiwKKwkJIHByaXYtPnJ4X3NrYi0+bGVuLCBwcml2LT5yeF9za2ItPmRhdGFfbGVuKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgcHJpdi0+cnhfc2tiLCAmcnhfc3RhdHVzKTsKKworCS8qIFVzZSBhIG5ldyBza2IgZm9yIHRoZSBuZXh0IHJlY2VpdmUgKi8KKwlwcml2LT5yeF9za2IgPSBOVUxMOworCisJYXQ3Nl9zdWJtaXRfcnhfdXJiKHByaXYpOworfQorCisvKiBMb2FkIGZpcm13YXJlIGludG8ga2VybmVsIG1lbW9yeSBhbmQgcGFyc2UgaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgZndlbnRyeSAqYXQ3Nl9sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCQkgIGVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlKQoreworCWludCByZXQ7CisJY2hhciAqc3RyOworCXN0cnVjdCBhdDc2X2Z3X2hlYWRlciAqZndoOworCXN0cnVjdCBmd2VudHJ5ICpmd2UgPSAmZmlybXdhcmVzW2JvYXJkX3R5cGVdOworCisJbXV0ZXhfbG9jaygmZndfbXV0ZXgpOworCisJaWYgKGZ3ZS0+bG9hZGVkKSB7CisJCWF0NzZfZGJnKERCR19GVywgInJlLXVzaW5nIHByZXZpb3VzbHkgbG9hZGVkIGZ3Iik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfRlcsICJkb3dubG9hZGluZyBmaXJtd2FyZSAlcyIsIGZ3ZS0+ZnduYW1lKTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd2UtPmZ3LCBmd2UtPmZ3bmFtZSwgJnVkZXYtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgImZpcm13YXJlICVzIG5vdCBmb3VuZCFcbiIsCisJCQkgICBmd2UtPmZ3bmFtZSk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAieW91IG1heSBuZWVkIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBmcm9tICIKKwkJCSAgICJodHRwOi8vZGV2ZWxvcGVyLmJlcmxpb3MuZGUvcHJvamVjdHMvYXQ3NmM1MDNhL1xuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfRlcsICJnb3QgaXQuIik7CisJZndoID0gKHN0cnVjdCBhdDc2X2Z3X2hlYWRlciAqKShmd2UtPmZ3LT5kYXRhKTsKKworCWlmIChmd2UtPmZ3LT5zaXplIDw9IHNpemVvZigqZndoKSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImZpcm13YXJlIGlzIHRvbyBzaG9ydCAoMHglengpXG4iLCBmd2UtPmZ3LT5zaXplKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIENSQyBjdXJyZW50bHkgbm90IGNoZWNrZWQgKi8KKwlmd2UtPmJvYXJkX3R5cGUgPSBsZTMyX3RvX2NwdShmd2gtPmJvYXJkX3R5cGUpOworCWlmIChmd2UtPmJvYXJkX3R5cGUgIT0gYm9hcmRfdHlwZSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImJvYXJkIHR5cGUgbWlzbWF0Y2gsIHJlcXVlc3RlZCAldSwgZ290ICV1XG4iLAorCQkJICAgYm9hcmRfdHlwZSwgZndlLT5ib2FyZF90eXBlKTsKKwkJZ290byBleGl0OworCX0KKworCWZ3ZS0+ZndfdmVyc2lvbi5tYWpvciA9IGZ3aC0+bWFqb3I7CisJZndlLT5md192ZXJzaW9uLm1pbm9yID0gZndoLT5taW5vcjsKKwlmd2UtPmZ3X3ZlcnNpb24ucGF0Y2ggPSBmd2gtPnBhdGNoOworCWZ3ZS0+ZndfdmVyc2lvbi5idWlsZCA9IGZ3aC0+YnVpbGQ7CisKKwlzdHIgPSAoY2hhciAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+c3RyX29mZnNldCk7CisJZndlLT5pbnRmdyA9ICh1OCAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X29mZnNldCk7CisJZndlLT5pbnRmd19zaXplID0gbGUzMl90b19jcHUoZndoLT5pbnRfZndfbGVuKTsKKwlmd2UtPmV4dGZ3ID0gKHU4ICopZndoICsgbGUzMl90b19jcHUoZndoLT5leHRfZndfb2Zmc2V0KTsKKwlmd2UtPmV4dGZ3X3NpemUgPSBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19sZW4pOworCisJZndlLT5sb2FkZWQgPSAxOworCisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmdWRldi0+ZGV2LAorCQkgICAidXNpbmcgZmlybXdhcmUgJXMgKHZlcnNpb24gJWQuJWQuJWQtJWQpXG4iLAorCQkgICBmd2UtPmZ3bmFtZSwgZndoLT5tYWpvciwgZndoLT5taW5vciwgZndoLT5wYXRjaCwgZndoLT5idWlsZCk7CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJib2FyZCAldSwgaW50ICVkOiVkLCBleHQgJWQ6JWQiLCBib2FyZF90eXBlLAorCQkgbGUzMl90b19jcHUoZndoLT5pbnRfZndfb2Zmc2V0KSwgbGUzMl90b19jcHUoZndoLT5pbnRfZndfbGVuKSwKKwkJIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X29mZnNldCksIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X2xlbikpOworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImZpcm13YXJlIGlkICVzIiwgc3RyKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmZ3X211dGV4KTsKKworCWlmIChmd2UtPmxvYWRlZCkKKwkJcmV0dXJuIGZ3ZTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3R4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhfc2tiKTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJCS8qIGZhaWwsIHVyYiBoYXMgYmVlbiB1bmxpbmtlZCAqLworCQkvKiBGSVhNRTogYWRkIGVycm9yIG1lc3NhZ2UgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXQ3Nl9kYmcoREJHX1VSQiwgIiVzIC0gbm9uemVybyB0eCBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCSBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisKKwltZW1zZXQoJmluZm8tPnN0YXR1cywgMCwgc2l6ZW9mKGluZm8tPnN0YXR1cykpOworCisJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCBwcml2LT50eF9za2IpOworCisJcHJpdi0+dHhfc2tiID0gTlVMTDsKKworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9tYWM4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0NzZfdHhfYnVmZmVyICp0eF9idWZmZXIgPSBwcml2LT5idWxrX291dF9idWZmZXI7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWludCBwYWRkaW5nLCBzdWJtaXRfbGVuLCByZXQ7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJaWYgKHByaXYtPnR4X3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBjYWxsZWQgd2hpbGUgdHggdXJiIGlzIHBlbmRpbmdcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwlhdDc2X2xlZHRyaWdfdHhfYWN0aXZpdHkoKTsJLyogdGVsbCBsZWR0cmlnZ2VyIHdlIHNlbmQgYSBwYWNrZXQgKi8KKworCVdBUk5fT04ocHJpdi0+dHhfc2tiICE9IE5VTEwpOworCisJcHJpdi0+dHhfc2tiID0gc2tiOworCXBhZGRpbmcgPSBhdDc2X2NhbGNfcGFkZGluZyhza2ItPmxlbik7CisJc3VibWl0X2xlbiA9IEFUNzZfVFhfSERSTEVOICsgc2tiLT5sZW4gKyBwYWRkaW5nOworCisJLyogc2V0dXAgJ0F0bWVsJyBoZWFkZXIgKi8KKwltZW1zZXQodHhfYnVmZmVyLCAwLCBzaXplb2YoKnR4X2J1ZmZlcikpOworCXR4X2J1ZmZlci0+cGFkZGluZyA9IHBhZGRpbmc7CisJdHhfYnVmZmVyLT53bGVuZ3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCXR4X2J1ZmZlci0+dHhfcmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShodywgaW5mbyktPmh3X3ZhbHVlOworCW1lbXNldCh0eF9idWZmZXItPnJlc2VydmVkLCAwLCBzaXplb2YodHhfYnVmZmVyLT5yZXNlcnZlZCkpOworCW1lbWNweSh0eF9idWZmZXItPnBhY2tldCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlhdDc2X2RiZyhEQkdfVFhfREFUQSwgIiVzIHR4OiB3bGVuIDB4JXggcGFkIDB4JXggcmF0ZSAlZCBoZHIiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBsZTE2X3RvX2NwdSh0eF9idWZmZXItPndsZW5ndGgpLAorCQkgdHhfYnVmZmVyLT5wYWRkaW5nLCB0eF9idWZmZXItPnR4X3JhdGUpOworCisJLyogc2VuZCBzdHVmZiAqLworCWF0NzZfZGJnX2R1bXAoREJHX1RYX0RBVEFfQ09OVEVOVCwgdHhfYnVmZmVyLCBzdWJtaXRfbGVuLAorCQkgICAgICAiJXMoKTogdHhfYnVmZmVyICVkIGJ5dGVzOiIsIF9fZnVuY19fLCBzdWJtaXRfbGVuKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT50eF91cmIsIHByaXYtPnVkZXYsIHByaXYtPnR4X3BpcGUsIHR4X2J1ZmZlciwKKwkJCSAgc3VibWl0X2xlbiwgYXQ3Nl9tYWM4MDIxMV90eF9jYWxsYmFjaywgcHJpdik7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIHR4IHN1Ym1pdCB1cmI6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlpZiAocmV0ID09IC1FSU5WQUwpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IC1FSU5WQUw6IHR4IHVyYiAlcCBoY3ByaXYgJXAgY29tcGxldGUgJXBcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBwcml2LT50eF91cmIsCisJCQkgICAgICAgcHJpdi0+dHhfdXJiLT5oY3ByaXYsIHByaXYtPnR4X3VyYi0+Y29tcGxldGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfbWFjODAyMTFfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXJldCA9IGF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcGVuOiBzdWJtaXRfcnhfdXJiIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJYXQ3Nl9zdGFydHVwX2RldmljZShwcml2KTsKKworCWF0NzZfc3RhcnRfbW9uaXRvcihwcml2KTsKKworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfbWFjODAyMTFfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCWlmICghcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgeworCQkvKiBXZSBhcmUgY2FsbGVkIGJ5ICJpZmNvbmZpZyBldGhYIGRvd24iLCBub3QgYmVjYXVzZSB0aGUKKwkJICogZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZS4gKi8KKwkJYXQ3Nl9zZXRfcmFkaW8ocHJpdiwgMCk7CisKKwkJLyogV2UgdW5saW5rIHJ4X3VyYiBiZWNhdXNlIGF0NzZfb3BlbigpIHJlLXN1Ym1pdHMgaXQuCisJCSAqIElmIHVucGx1Z2dlZCwgYXQ3Nl9kZWxldGVfZGV2aWNlKCkgdGFrZXMgY2FyZSBvZiBpdC4gKi8KKwkJdXNiX2tpbGxfdXJiKHByaXYtPnJ4X3VyYik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgaW50IGF0NzZfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJc3dpdGNoIChjb25mLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gZXhpdDsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCBhdDc2X2pvaW4oc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9yZXFfam9pbiBqb2luOworCWludCByZXQ7CisKKwltZW1zZXQoJmpvaW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOworCW1lbWNweShqb2luLmVzc2lkLCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfc2l6ZSk7CisJam9pbi5lc3NpZF9zaXplID0gcHJpdi0+ZXNzaWRfc2l6ZTsKKwltZW1jcHkoam9pbi5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKwlqb2luLmJzc190eXBlID0gSU5GUkFTVFJVQ1RVUkVfTU9ERTsKKwlqb2luLmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCWpvaW4udGltZW91dCA9IGNwdV90b19sZTE2KDIwMDApOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXM6IHNlbmRpbmcgQ01EX0pPSU4iLCBfX2Z1bmNfXyk7CisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9KT0lOLCAmam9pbiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9qb2luKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX0pPSU4pOworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBDTURfSk9JTiByZXR1cm5lZDogMHglMDJ4IiwgX19mdW5jX18sIHJldCk7CisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfd2FpdF9jb21wbGV0aW9uIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXJldHVybiAwOworCX0KKworCWF0NzZfc2V0X3BtX21vZGUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kd29ya19od19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIGR3b3JrX2h3X3NjYW4ud29yayk7CisJaW50IHJldDsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcmV0ID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBDTURfU0NBTik7CisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXM6IENNRF9TQ0FOIHN0YXR1cyAweCUwMngiLCBfX2Z1bmNfXywgcmV0KTsKKworCS8qIEZJWE1FOiBhZGQgbWF4aW11bSB0aW1lIGZvciBzY2FuIHRvIGNvbXBsZXRlICovCisKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5kd29ya19od19zY2FuLAorCQkJCSAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcsIGZhbHNlKTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSkKKwkJYXQ3Nl9qb2luKHByaXYpOworCisJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiBzY2FuOworCXU4ICpzc2lkID0gTlVMTDsKKwlpbnQgcmV0LCBsZW4gPSAwOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKToiLCBfX2Z1bmNfXyk7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9zY2FuKSk7CisJbWVtc2V0KHNjYW4uYnNzaWQsIDB4RkYsIEVUSF9BTEVOKTsKKworCWlmIChyZXEtPm5fc3NpZHMpIHsKKwkJc2Nhbi5zY2FuX3R5cGUgPSBTQ0FOX1RZUEVfQUNUSVZFOworCQlzc2lkID0gcmVxLT5zc2lkc1swXS5zc2lkOworCQlsZW4gPSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuOworCX0gZWxzZSB7CisJCXNjYW4uc2Nhbl90eXBlID0gU0NBTl9UWVBFX1BBU1NJVkU7CisJfQorCisJaWYgKGxlbikgeworCQltZW1jcHkoc2Nhbi5lc3NpZCwgc3NpZCwgbGVuKTsKKwkJc2Nhbi5lc3NpZF9zaXplID0gbGVuOworCX0KKworCXNjYW4ubWluX2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fbWluX3RpbWUpOworCXNjYW4ubWF4X2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fbWF4X3RpbWUpOworCXNjYW4ucHJvYmVfZGVsYXkgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21pbl90aW1lICogMTAwMCk7CisJc2Nhbi5pbnRlcm5hdGlvbmFsX3NjYW4gPSAwOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXM6IHNlbmRpbmcgQ01EX1NDQU4iLCBfX2Z1bmNfXyk7CisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TQ0FOLCAmc2Nhbiwgc2l6ZW9mKHNjYW4pKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWVycigiQ01EX1NDQU4gZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPmR3b3JrX2h3X3NjYW4sCisJCQkgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiBjaGFubmVsICVkIHJhZGlvICVkIiwKKwkJIF9fZnVuY19fLCBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZSwKKwkJIGh3LT5jb25mLnJhZGlvX2VuYWJsZWQpOworCWF0NzZfZGJnX2R1bXAoREJHX01BQzgwMjExLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4sICJic3NpZDoiKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlwcml2LT5jaGFubmVsID0gaHctPmNvbmYuY2hhbm5lbC0+aHdfdmFsdWU7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5ic3NpZCkpCisJCWF0NzZfam9pbihwcml2KTsKKwllbHNlCisJCWF0NzZfc3RhcnRfbW9uaXRvcihwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IiwgX19mdW5jX18pOworCWF0NzZfZGJnX2R1bXAoREJHX01BQzgwMjExLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4sICJic3NpZDoiKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwltZW1jcHkocHJpdi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5ic3NpZCkpCisJCS8qIG1hYzgwMjExIGlzIGpvaW5pbmcgYSBic3MgKi8KKwkJYXQ3Nl9qb2luKHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG11c3QgYmUgYXRvbWljICovCitzdGF0aWMgdm9pZCBhdDc2X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIGludCBtY19jb3VudCwKKwkJCQkgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgZmxhZ3M7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiBjaGFuZ2VkX2ZsYWdzPTB4JTA4eCAiCisJCSAidG90YWxfZmxhZ3M9MHglMDh4IG1jX2NvdW50PSVkIiwKKwkJIF9fZnVuY19fLCBjaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MsIG1jX2NvdW50KTsKKworCWZsYWdzID0gY2hhbmdlZF9mbGFncyAmIEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlM7CisJKnRvdGFsX2ZsYWdzID0gQVQ3Nl9TVVBQT1JURURfRklMVEVSUzsKKworCS8qIEJhaWwgb3V0IGFmdGVyIHVwZGF0aW5nIGZsYWdzIHRvIHByZXZlbnQgYSBXQVJOX09OIGluIG1hYzgwMjExLiAqLworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKQorCQlyZXR1cm47CisKKwkvKiBGSVhNRTogYWNjZXNzIHRvIHByaXYtPnByb21pc2Mgc2hvdWxkIGJlIHByb3RlY3RlZCB3aXRoCisJICogcHJpdi0+bXR4LCBidXQgaXQncyBpbXBvc3NpYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZQorCSAqIGF0b21pYyAqLworCisJaWYgKGZsYWdzICYmICFwcml2LT5wcm9taXNjKSB7CisJCS8qIG1hYzgwMjExIHdhbnRzIHVzIHRvIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCisJCXByaXYtPnByb21pc2MgPSAxOworCX0gZWxzZSBpZiAoIWZsYWdzICYmIHByaXYtPnByb21pc2MpIHsKKwkJLyogd2UgbmVlZCB0byBkaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KKwkJcHJpdi0+cHJvbWlzYyA9IDA7CisJfSBlbHNlCisJCXJldHVybjsKKworCXF1ZXVlX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmtfc2V0X3Byb21pc2MpOworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWludCBpOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY21kICVkIGtleS0+YWxnICVkIGtleS0+a2V5aWR4ICVkICIKKwkJICJrZXktPmtleWxlbiAlZCIsCisJCSBfX2Z1bmNfXywgY21kLCBrZXktPmFsZywga2V5LT5rZXlpZHgsIGtleS0+a2V5bGVuKTsKKworCWlmIChrZXktPmFsZyAhPSBBTEdfV0VQKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlrZXktPmh3X2tleV9pZHggPSBrZXktPmtleWlkeDsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0VUX0tFWToKKwkJbWVtY3B5KHByaXYtPndlcF9rZXlzW2tleS0+a2V5aWR4XSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKKwkJcHJpdi0+d2VwX2tleXNfbGVuW2tleS0+a2V5aWR4XSA9IGtleS0+a2V5bGVuOworCisJCS8qIEZJWE1FOiBmaW5kIG91dCBob3cgdG8gZG8gdGhpcyBwcm9wZXJseSAqLworCQlwcml2LT53ZXBfa2V5X2lkID0ga2V5LT5rZXlpZHg7CisKKwkJYnJlYWs7CisJY2FzZSBESVNBQkxFX0tFWToKKwlkZWZhdWx0OgorCQlwcml2LT53ZXBfa2V5c19sZW5ba2V5LT5rZXlpZHhdID0gMDsKKwkJYnJlYWs7CisJfQorCisJcHJpdi0+d2VwX2VuYWJsZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzX2xlbltpXSAhPSAwKQorCQkJcHJpdi0+d2VwX2VuYWJsZWQgPSAxOworCX0KKworCWF0NzZfc3RhcnR1cF9kZXZpY2UocHJpdik7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0NzZfb3BzID0geworCS50eCA9IGF0NzZfbWFjODAyMTFfdHgsCisJLmFkZF9pbnRlcmZhY2UgPSBhdDc2X2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UgPSBhdDc2X3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZyA9IGF0NzZfY29uZmlnLAorCS5jb25maWdfaW50ZXJmYWNlID0gYXQ3Nl9jb25maWdfaW50ZXJmYWNlLAorCS5jb25maWd1cmVfZmlsdGVyID0gYXQ3Nl9jb25maWd1cmVfZmlsdGVyLAorCS5zdGFydCA9IGF0NzZfbWFjODAyMTFfc3RhcnQsCisJLnN0b3AgPSBhdDc2X21hYzgwMjExX3N0b3AsCisJLmh3X3NjYW4gPSBhdDc2X2h3X3NjYW4sCisJLnNldF9rZXkgPSBhdDc2X3NldF9rZXksCit9OworCisvKiBBbGxvY2F0ZSBuZXR3b3JrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ3Nl9wcml2ICphdDc2X2FsbG9jX25ld19kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXQ3Nl9wcml2KSwgJmF0NzZfb3BzKTsKKwlpZiAoIWh3KSB7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiBjb3VsZCBub3QgcmVnaXN0ZXIiCisJCSAgICAgICAiIGllZWU4MDIxMV9od1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXByaXYgPSBody0+cHJpdjsKKwlwcml2LT5odyA9IGh3OworCisJcHJpdi0+dWRldiA9IHVkZXY7CisKKwltdXRleF9pbml0KCZwcml2LT5tdHgpOworCUlOSVRfV09SSygmcHJpdi0+d29ya19zZXRfcHJvbWlzYywgYXQ3Nl93b3JrX3NldF9wcm9taXNjKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc3VibWl0X3J4LCBhdDc2X3dvcmtfc3VibWl0X3J4KTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZHdvcmtfaHdfc2NhbiwgYXQ3Nl9kd29ya19od19zY2FuKTsKKworCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgYXQ3Nl9yeF90YXNrbGV0LCAwKTsKKworCXByaXYtPnBtX21vZGUgPSBBVDc2X1BNX09GRjsKKwlwcml2LT5wbV9wZXJpb2QgPSAwOworCisJLyogdW5pdCB1cyAqLworCXByaXYtPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDAwOworCisJcmV0dXJuIHByaXY7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9hbGxvY191cmJzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQsICplcF9pbiwgKmVwX291dDsKKwlpbnQgaTsKKwlpbnQgYnVmZmVyX3NpemU7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVOVEVSIiwgX19mdW5jX18pOworCisJYXQ3Nl9kYmcoREJHX1VSQiwgIiVzOiBOdW1FbmRwb2ludHMgJWQgIiwgX19mdW5jX18sCisJCSBpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iTnVtRW5kcG9pbnRzKTsKKworCWVwX2luID0gTlVMTDsKKwllcF9vdXQgPSBOVUxMOworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWF0NzZfZGJnKERCR19VUkIsICIlczogJWQuIGVuZHBvaW50OiBhZGRyIDB4JXggYXR0ciAweCV4IiwKKwkJCSBfX2Z1bmNfXywgaSwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MsCisJCQkgZW5kcG9pbnQtPmJtQXR0cmlidXRlcyk7CisKKwkJaWYgKCFlcF9pbiAmJiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpCisJCQllcF9pbiA9IGVuZHBvaW50OworCisJCWlmICghZXBfb3V0ICYmIHVzYl9lbmRwb2ludF9pc19idWxrX291dChlbmRwb2ludCkpCisJCQllcF9vdXQgPSBlbmRwb2ludDsKKwl9CisKKwlpZiAoIWVwX2luIHx8ICFlcF9vdXQpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImJ1bGsgZW5kcG9pbnRzIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXByaXYtPnJ4X3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwgZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MpOworCXByaXYtPnR4X3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKTsKKworCXByaXYtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPnJ4X3VyYiB8fCAhcHJpdi0+dHhfdXJiKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBVUkJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlidWZmZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIpICsgTUFYX1BBRERJTkdfU0laRTsKKwlwcml2LT5idWxrX291dF9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmJ1bGtfb3V0X2J1ZmZlcikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGFsbG9jYXRlIG91dHB1dCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFWElUIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXQ3Nl9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gVFhfUkFURV8xTUJJVCwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IFRYX1JBVEVfMk1CSVQsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSBUWF9SQVRFXzVfNU1CSVQsIH0sCisJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gVFhfUkFURV8xMU1CSVQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGF0NzZfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1ZSA9IDUgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzcsIC5od192YWx1ZSA9IDYgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDggfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDkgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2NywgLmh3X3ZhbHVlID0gMTIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCB9Cit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhdDc2X3N1cHBvcnRlZF9iYW5kID0geworCS5jaGFubmVscyA9IGF0NzZfY2hhbm5lbHMsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGF0NzZfY2hhbm5lbHMpLAorCS5iaXRyYXRlcyA9IGF0NzZfcmF0ZXMsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGF0NzZfcmF0ZXMpLAorfTsKKworLyogUmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgYW5kIGluaXRpYWxpemUgdGhlIGhhcmR3YXJlICovCitzdGF0aWMgaW50IGF0NzZfaW5pdF9uZXdfZGV2aWNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlpbnQgcmV0OworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJVU0IgaW50ZXJmYWNlOiAlZCBlbmRwb2ludHMiLAorCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKworCXJldCA9IGF0NzZfYWxsb2NfdXJicyhwcml2LCBpbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBNQUMgYWRkcmVzcyAqLworCXJldCA9IGF0NzZfZ2V0X2h3X2NvbmZpZyhwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGdldCBNQUMgYWRkcmVzc1xuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcml2LT5kb21haW4gPSBhdDc2X2dldF9yZWdfZG9tYWluKHByaXYtPnJlZ3VsYXRvcnlfZG9tYWluKTsKKworCXByaXYtPmNoYW5uZWwgPSBERUZfQ0hBTk5FTDsKKwlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwlwcml2LT5ydHNfdGhyZXNob2xkID0gREVGX1JUU19USFJFU0hPTEQ7CisJcHJpdi0+ZnJhZ190aHJlc2hvbGQgPSBERUZfRlJBR19USFJFU0hPTEQ7CisJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSBERUZfU0hPUlRfUkVUUllfTElNSVQ7CisJcHJpdi0+dHhyYXRlID0gVFhfUkFURV9BVVRPOworCXByaXYtPnByZWFtYmxlX3R5cGUgPSBQUkVBTUJMRV9UWVBFX0xPTkc7CisJcHJpdi0+YmVhY29uX3BlcmlvZCA9IDEwMDsKKwlwcml2LT5hdXRoX21vZGUgPSBXTEFOX0FVVEhfT1BFTjsKKwlwcml2LT5zY2FuX21pbl90aW1lID0gREVGX1NDQU5fTUlOX1RJTUU7CisJcHJpdi0+c2Nhbl9tYXhfdGltZSA9IERFRl9TQ0FOX01BWF9USU1FOworCXByaXYtPnNjYW5fbW9kZSA9IFNDQU5fVFlQRV9BQ1RJVkU7CisJcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCA9IDA7CisKKwkvKiBtYWM4MDIxMSBpbml0aWFsaXNhdGlvbiAqLworCXByaXYtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCXByaXYtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmYXQ3Nl9zdXBwb3J0ZWRfYmFuZDsKKwlwcml2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJCSAgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUM7CisJcHJpdi0+aHctPm1heF9zaWduYWwgPSAxMDA7CisKKwlTRVRfSUVFRTgwMjExX0RFVihwcml2LT5odywgJmludGVyZmFjZS0+ZGV2KTsKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IHJlZ2lzdGVyIG1hYzgwMjExIGh3IChzdGF0dXMgJWQpIVxuIiwKKwkJICAgICAgIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBVU0IgJXMsIE1BQyAlcywgZmlybXdhcmUgJWQuJWQuJWQtJWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkgICAgICAgZGV2X25hbWUoJmludGVyZmFjZS0+ZGV2KSwgbWFjMnN0cihwcml2LT5tYWNfYWRkciksCisJICAgICAgIHByaXYtPmZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtPmZ3X3ZlcnNpb24ubWlub3IsCisJICAgICAgIHByaXYtPmZ3X3ZlcnNpb24ucGF0Y2gsIHByaXYtPmZ3X3ZlcnNpb24uYnVpbGQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWd1bGF0b3J5IGRvbWFpbiAweCUwMng6ICVzXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJICAgICAgIHByaXYtPnJlZ3VsYXRvcnlfZG9tYWluLCBwcml2LT5kb21haW4tPm5hbWUpOworCitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZGVsZXRlX2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVOVEVSIiwgX19mdW5jX18pOworCisJLyogVGhlIGRldmljZSBpcyBnb25lLCBkb24ndCBib3RoZXIgdHVybmluZyBpdCBvZmYgKi8KKwlwcml2LT5kZXZpY2VfdW5wbHVnZ2VkID0gMTsKKworCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7CisKKwlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgeworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19od19zY2FuKTsKKwkJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmh3LT53b3JrcXVldWUpOworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJfQorCisJaWYgKHByaXYtPnR4X3VyYikgeworCQl1c2Jfa2lsbF91cmIocHJpdi0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHByaXYtPnR4X3VyYik7CisJfQorCWlmIChwcml2LT5yeF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXYtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwcml2LT5yeF91cmIpOworCX0KKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IHVubGlua2VkIHVyYnMiLCBfX2Z1bmNfXyk7CisKKwlrZnJlZShwcml2LT5idWxrX291dF9idWZmZXIpOworCisJZGVsX3RpbWVyX3N5bmMoJmxlZHRyaWdfdHhfdGltZXIpOworCisJaWYgKHByaXYtPnJ4X3NrYikKKwkJa2ZyZWVfc2tiKHByaXYtPnJ4X3NrYik7CisKKwl1c2JfcHV0X2Rldihwcml2LT51ZGV2KTsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IGJlZm9yZSBmcmVlaW5nIHByaXYvaWVlZTgwMjExX2h3IiwKKwkJIF9fZnVuY19fKTsKKwlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFWElUIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IGF0NzZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgZndlbnRyeSAqZndlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCBvcF9tb2RlOworCWludCBuZWVkX2V4dF9mdyA9IDA7CisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3djsKKwlpbnQgYm9hcmRfdHlwZSA9IChpbnQpaWQtPmRyaXZlcl9pbmZvOworCisJdWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisKKwkvKiBMb2FkIGZpcm13YXJlIGludG8ga2VybmVsIG1lbW9yeSAqLworCWZ3ZSA9IGF0NzZfbG9hZF9maXJtd2FyZSh1ZGV2LCBib2FyZF90eXBlKTsKKwlpZiAoIWZ3ZSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycm9yOworCX0KKworCW9wX21vZGUgPSBhdDc2X2dldF9vcF9tb2RlKHVkZXYpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAib3Btb2RlICVkIiwgb3BfbW9kZSk7CisKKwkvKiB3ZSBnZXQgT1BNT0RFX05PTkUgd2l0aCAyLjQuMjMsIFNNQzI2NjJXLUFSID8/PworCSAgIHdlIGdldCAyMDQgd2l0aCAyLjQuMjMsIEZpYmVybGluZSBGTC1XTDI0MHUgKDUwNUErUkZNRDI5NTgpID8/PyAqLworCisJaWYgKG9wX21vZGUgPT0gT1BNT0RFX0hXX0NPTkZJR19NT0RFKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgaGFuZGxlIGEgZGV2aWNlIGluIEhXX0NPTkZJR19NT0RFXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChvcF9tb2RlICE9IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gKKwkgICAgJiYgb3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNIKSB7CisJCS8qIGRvd25sb2FkIGludGVybmFsIGZpcm13YXJlIHBhcnQgKi8KKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgaW50ZXJuYWwgZmlybXdhcmVcbiIpOworCQlyZXQgPSBhdDc2X2xvYWRfaW50ZXJuYWxfZncodWRldiwgZndlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICAiZXJyb3IgJWQgZG93bmxvYWRpbmcgaW50ZXJuYWwgZmlybXdhcmVcbiIsCisJCQkJICAgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJdXNiX3B1dF9kZXYodWRldik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSW50ZXJuYWwgZmlybXdhcmUgYWxyZWFkeSBpbnNpZGUgdGhlIGRldmljZS4gIEdldCBmaXJtd2FyZQorCSAqIHZlcnNpb24gdG8gdGVzdCBpZiBleHRlcm5hbCBmaXJtd2FyZSBpcyBsb2FkZWQuCisJICogVGhpcyB3b3JrcyBvbmx5IGZvciBuZXdlciBmaXJtd2FyZSwgZS5nLiB0aGUgSW50ZXJzaWwgMC45MC54CisJICogc2F5cyAiY29udHJvbCB0aW1lb3V0IG9uIGVwMGluIiBhbmQgc3Vic2VxdWVudAorCSAqIGF0NzZfZ2V0X29wX21vZGUoKSBmYWlsIHRvbyA6LSggKi8KKworCS8qIGlmIHZlcnNpb24gPj0gMC4xMDAueC55IG9yIGRldmljZSB3aXRoIGJ1aWx0LWluIGZsYXNoIHdlIGNhbgorCSAqIHF1ZXJ5IHRoZSBkZXZpY2UgZm9yIHRoZSBmdyB2ZXJzaW9uICovCisJaWYgKChmd2UtPmZ3X3ZlcnNpb24ubWFqb3IgPiAwIHx8IGZ3ZS0+ZndfdmVyc2lvbi5taW5vciA+PSAxMDApCisJICAgIHx8IChvcF9tb2RlID09IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gpKSB7CisJCXJldCA9IGF0NzZfZ2V0X21pYih1ZGV2LCBNSUJfRldfVkVSU0lPTiwgJmZ3diwgc2l6ZW9mKGZ3dikpOworCQlpZiAocmV0IDwgMCB8fCAoZnd2Lm1ham9yIHwgZnd2Lm1pbm9yKSA9PSAwKQorCQkJbmVlZF9leHRfZncgPSAxOworCX0gZWxzZQorCQkvKiBObyB3YXkgdG8gY2hlY2sgZmlybXdhcmUgdmVyc2lvbiwgcmVsb2FkIHRvIGJlIHN1cmUgKi8KKwkJbmVlZF9leHRfZncgPSAxOworCisJaWYgKG5lZWRfZXh0X2Z3KSB7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGV4dGVybmFsIGZpcm13YXJlXG4iKTsKKworCQlyZXQgPSBhdDc2X2xvYWRfZXh0ZXJuYWxfZncodWRldiwgZndlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogUmUtY2hlY2sgZmlybXdhcmUgdmVyc2lvbiAqLworCQlyZXQgPSBhdDc2X2dldF9taWIodWRldiwgTUlCX0ZXX1ZFUlNJT04sICZmd3YsIHNpemVvZihmd3YpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICAiZXJyb3IgJWQgZ2V0dGluZyBmaXJtd2FyZSB2ZXJzaW9uXG4iLCByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXByaXYgPSBhdDc2X2FsbG9jX25ld19kZXZpY2UodWRldik7CisJaWYgKCFwcml2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHByaXYpOworCisJbWVtY3B5KCZwcml2LT5md192ZXJzaW9uLCAmZnd2LCBzaXplb2Yoc3RydWN0IG1pYl9md192ZXJzaW9uKSk7CisJcHJpdi0+Ym9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlyZXQgPSBhdDc2X2luaXRfbmV3X2RldmljZShwcml2LCBpbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKQorCQlhdDc2X2RlbGV0ZV9kZXZpY2UocHJpdik7CisKKwlyZXR1cm4gcmV0OworCitlcnJvcjoKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2OworCisJcHJpdiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBEaXNjb25uZWN0IGFmdGVyIGxvYWRpbmcgaW50ZXJuYWwgZmlybXdhcmUgKi8KKwlpZiAoIXByaXYpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNjb25uZWN0aW5nXG4iLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCWF0NzZfZGVsZXRlX2RldmljZShwcml2KTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmludGVyZmFjZS0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKK30KKworLyogU3RydWN0dXJlIGZvciByZWdpc3RlcmluZyB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXQ3Nl9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkucHJvYmUgPSBhdDc2X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gYXQ3Nl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGRldl90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0NzZfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiBsb2FkaW5nXG4iKTsKKworCW11dGV4X2luaXQoJmZ3X211dGV4KTsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0NzZfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCSAgICAgICAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkIChzdGF0dXMgJWQpXG4iLCByZXN1bHQpOworCisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJhdDc2X3VzYi10eCIsICZsZWR0cmlnX3R4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXQ3Nl9tb2RfZXhpdCh2b2lkKQoreworCWludCBpOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiB1bmxvYWRpbmdcbiIpOworCXVzYl9kZXJlZ2lzdGVyKCZhdDc2X2RyaXZlcik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmlybXdhcmVzKTsgaSsrKSB7CisJCWlmIChmaXJtd2FyZXNbaV0uZncpCisJCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlc1tpXS5mdyk7CisJfQorCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGxlZHRyaWdfdHgpOworfQorCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF0NzZfZGVidWcsIHVpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBsZXZlbCIpOworCittb2R1bGVfaW5pdChhdDc2X21vZF9pbml0KTsKK21vZHVsZV9leGl0KGF0NzZfbW9kX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJPbGl2ZXIgS3VydGggPG9rdUBtYXNxbWFpbC5jeD4iKTsKK01PRFVMRV9BVVRIT1IoIkpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkFsZXggPGFsZXhAZm9vZ29kLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIk5pY2sgSm9uZXMiKTsKK01PRFVMRV9BVVRIT1IoIkJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIkd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzVjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuaApAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE9saXZlciBLdXJ0aAorICoJICAgICAoYykgMjAwMywyMDA0IEpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4KKyAqCSAgICAgKGMpIDIwMDcgR3VpZG8gR3VlbnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBTb3VyY2Vmb3JnZSBkcml2ZXIKKyAqIHJlbGVhc2VkIGFuZCBtYWludGFpbmVkIGJ5IEF0bWVsOgorICoKKyAqICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2F0bWVsd2xhbmRyaXZlci8KKyAqCisgKiBBbHRob3VnaCB0aGUgY29kZSB3YXMgY29tcGxldGVseSByZS13cml0dGVuLAorICogaXQgd291bGQgaGF2ZSBiZWVuIGltcG9zc2libGUgd2l0aG91dCBBdG1lbCdzIGRlY2lzaW9uIHRvCisgKiByZWxlYXNlIGFuIE9wZW4gU291cmNlIGRyaXZlciAodW5mb3J0dW5hdGVseSB0aGUgZmlybXdhcmUgd2FzCisgKiBrZXB0IGJpbmFyeSBvbmx5KS4gVGhhbmtzIGZvciB0aGF0IGRlY2lzaW9uIHRvIEF0bWVsIQorICovCisKKyNpZm5kZWYgX0FUNzZfVVNCX0gKKyNkZWZpbmUgX0FUNzZfVVNCX0gKKworLyogQm9hcmQgdHlwZXMgKi8KK2VudW0gYm9hcmRfdHlwZSB7CisJQk9BUkRfNTAzX0lTTDM4NjEgPSAxLAorCUJPQVJEXzUwM19JU0wzODYzID0gMiwKKwlCT0FSRF81MDMgPSAzLAorCUJPQVJEXzUwM19BQ0MgPSA0LAorCUJPQVJEXzUwNSA9IDUsCisJQk9BUkRfNTA1XzI5NTggPSA2LAorCUJPQVJEXzUwNUEgPSA3LAorCUJPQVJEXzUwNUFNWCA9IDgKK307CisKKyNkZWZpbmUgQ01EX1NUQVRVU19JRExFCQkJCTB4MDAKKyNkZWZpbmUgQ01EX1NUQVRVU19DT01QTEVURQkJCTB4MDEKKyNkZWZpbmUgQ01EX1NUQVRVU19VTktOT1dOCQkJMHgwMgorI2RlZmluZSBDTURfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSCQkweDAzCisjZGVmaW5lIENNRF9TVEFUVVNfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRAkweDA0CisjZGVmaW5lIENNRF9TVEFUVVNfVElNRV9PVVQJCQkweDA3CisjZGVmaW5lIENNRF9TVEFUVVNfSU5fUFJPR1JFU1MJCQkweDA4CisjZGVmaW5lIENNRF9TVEFUVVNfSE9TVF9GQUlMVVJFCQkJMHhmZgorI2RlZmluZSBDTURfU1RBVFVTX1NDQU5fRkFJTEVECQkJMHhmMAorCisvKiBhbnN3ZXJzIHRvIGdldCBvcCBtb2RlICovCisjZGVmaW5lIE9QTU9ERV9OT05FCQkJCTB4MDAKKyNkZWZpbmUgT1BNT0RFX05PUk1BTF9OSUNfV0lUSF9GTEFTSAkJMHgwMQorI2RlZmluZSBPUE1PREVfSFdfQ09ORklHX01PREUJCQkweDAyCisjZGVmaW5lIE9QTU9ERV9ERlVfTU9ERV9XSVRIX0ZMQVNICQkweDAzCisjZGVmaW5lIE9QTU9ERV9OT1JNQUxfTklDX1dJVEhPVVRfRkxBU0gJCTB4MDQKKworI2RlZmluZSBDTURfU0VUX01JQgkJMHgwMQorI2RlZmluZSBDTURfR0VUX01JQgkJMHgwMgorI2RlZmluZSBDTURfU0NBTgkJMHgwMworI2RlZmluZSBDTURfSk9JTgkJMHgwNAorI2RlZmluZSBDTURfU1RBUlRfSUJTUwkJMHgwNQorI2RlZmluZSBDTURfUkFESU9fT04JCTB4MDYKKyNkZWZpbmUgQ01EX1JBRElPX09GRgkJMHgwNworI2RlZmluZSBDTURfU1RBUlRVUAkJMHgwQgorCisjZGVmaW5lIE1JQl9MT0NBTAkJMHgwMQorI2RlZmluZSBNSUJfTUFDX0FERFIJCTB4MDIKKyNkZWZpbmUgTUlCX01BQwkJCTB4MDMKKyNkZWZpbmUgTUlCX01BQ19NR01UCQkweDA1CisjZGVmaW5lIE1JQl9NQUNfV0VQCQkweDA2CisjZGVmaW5lIE1JQl9QSFkJCQkweDA3CisjZGVmaW5lIE1JQl9GV19WRVJTSU9OCQkweDA4CisjZGVmaW5lIE1JQl9NRE9NQUlOCQkweDA5CisKKyNkZWZpbmUgQURIT0NfTU9ERQkJMQorI2RlZmluZSBJTkZSQVNUUlVDVFVSRV9NT0RFCTIKKworLyogdmFsdWVzIGZvciBzdHJ1Y3QgbWliX2xvY2FsLCBmaWVsZCBwcmVhbWJsZV90eXBlICovCisjZGVmaW5lIFBSRUFNQkxFX1RZUEVfTE9ORwkwCisjZGVmaW5lIFBSRUFNQkxFX1RZUEVfU0hPUlQJMQorI2RlZmluZSBQUkVBTUJMRV9UWVBFX0FVVE8JMgorCisvKiB2YWx1ZXMgZm9yIHR4X3JhdGUgKi8KKyNkZWZpbmUgVFhfUkFURV8xTUJJVAkJMAorI2RlZmluZSBUWF9SQVRFXzJNQklUCQkxCisjZGVmaW5lIFRYX1JBVEVfNV81TUJJVCAJMgorI2RlZmluZSBUWF9SQVRFXzExTUJJVAkJMworI2RlZmluZSBUWF9SQVRFX0FVVE8JCTQKKworLyogcG93ZXIgbWFuYWdlbWVudCBtb2RlcyAqLworI2RlZmluZSBBVDc2X1BNX09GRgkJMQorI2RlZmluZSBBVDc2X1BNX09OCQkyCisjZGVmaW5lIEFUNzZfUE1fU01BUlQJCTMKKworc3RydWN0IGh3Y2ZnX3I1MDUgeworCXU4IGNyMzlfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDFbMTRdOworCXU4IGJiX2NyWzE0XTsKKwl1OCBwaWR2aWRbNF07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCXU4IHJlc2VydmVkMlsxNF07CisJdTggY3IxNV92YWx1ZXNbMTRdOworCXU4IHJlc2VydmVkM1szXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBod2NmZ19yZm1kIHsKKwl1OCBjcjIwX3ZhbHVlc1sxNF07CisJdTggY3IyMV92YWx1ZXNbMTRdOworCXU4IGJiX2NyWzE0XTsKKwl1OCBwaWR2aWRbNF07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCXU4IGxvd19wb3dlcl92YWx1ZXNbMTRdOworCXU4IG5vcm1hbF9wb3dlcl92YWx1ZXNbMTRdOworCXU4IHJlc2VydmVkMVszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBod2NmZ19pbnRlcnNpbCB7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGNyMzFfdmFsdWVzWzE0XTsKKwl1OCBjcjU4X3ZhbHVlc1sxNF07CisJdTggcGlkdmlkWzRdOworCXU4IHJlZ3VsYXRvcnlfZG9tYWluOworCXU4IHJlc2VydmVkWzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYXQ3Nl9od2NmZyB7CisJc3RydWN0IGh3Y2ZnX2ludGVyc2lsIGk7CisJc3RydWN0IGh3Y2ZnX3JmbWQgcjM7CisJc3RydWN0IGh3Y2ZnX3I1MDUgcjU7Cit9OworCisjZGVmaW5lIFdFUF9TTUFMTF9LRVlfTEVOCSg0MCAvIDgpCisjZGVmaW5lIFdFUF9MQVJHRV9LRVlfTEVOCSgxMDQgLyA4KQorI2RlZmluZSBXRVBfS0VZUwkJKDQpCisKK3N0cnVjdCBhdDc2X2NhcmRfY29uZmlnIHsKKwl1OCBleGNsdWRlX3VuZW5jcnlwdGVkOworCXU4IHByb21pc2N1b3VzX21vZGU7CisJdTggc2hvcnRfcmV0cnlfbGltaXQ7CisJdTggZW5jcnlwdGlvbl90eXBlOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBmcmFnbWVudGF0aW9uX3RocmVzaG9sZDsJLyogMjU2Li4yMzQ2ICovCisJdTggYmFzaWNfcmF0ZV9zZXRbNF07CisJdTggYXV0b19yYXRlX2ZhbGxiYWNrOwkvKiAwLDEgKi8KKwl1OCBjaGFubmVsOworCXU4IHByaXZhY3lfaW52b2tlZDsKKwl1OCB3ZXBfZGVmYXVsdF9rZXlfaWQ7CS8qIDAuLjMgKi8KKwl1OCBjdXJyZW50X3NzaWRbMzJdOworCXU4IHdlcF9kZWZhdWx0X2tleV92YWx1ZVs0XVtXRVBfTEFSR0VfS0VZX0xFTl07CisJdTggc3NpZF9sZW47CisJdTggc2hvcnRfcHJlYW1ibGU7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9jb21tYW5kIHsKKwl1OCBjbWQ7CisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IHNpemU7CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIExlbmd0aCBvZiBBdG1lbC1zcGVjaWZpYyBSeCBoZWFkZXIgYmVmb3JlIDgwMi4xMSBmcmFtZSAqLworI2RlZmluZSBBVDc2X1JYX0hEUkxFTiBvZmZzZXRvZihzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIsIHBhY2tldCkKKworc3RydWN0IGF0NzZfcnhfYnVmZmVyIHsKKwlfX2xlMTYgd2xlbmd0aDsKKwl1OCByeF9yYXRlOworCXU4IG5ld2JzczsKKwl1OCBmcmFnbWVudGF0aW9uOworCXU4IHJzc2k7CisJdTggbGlua19xdWFsaXR5OworCXU4IG5vaXNlX2xldmVsOworCV9fbGUzMiByeF90aW1lOworCXU4IHBhY2tldFtJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIExlbmd0aCBvZiBBdG1lbC1zcGVjaWZpYyBUeCBoZWFkZXIgYmVmb3JlIDgwMi4xMSBmcmFtZSAqLworI2RlZmluZSBBVDc2X1RYX0hEUkxFTiBvZmZzZXRvZihzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIsIHBhY2tldCkKKworc3RydWN0IGF0NzZfdHhfYnVmZmVyIHsKKwlfX2xlMTYgd2xlbmd0aDsKKwl1OCB0eF9yYXRlOworCXU4IHBhZGRpbmc7CisJdTggcmVzZXJ2ZWRbNF07CisJdTggcGFja2V0W0lFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTERdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogZGVmaW5lcyBmb3Igc2Nhbl90eXBlIGJlbG93ICovCisjZGVmaW5lIFNDQU5fVFlQRV9BQ1RJVkUJMAorI2RlZmluZSBTQ0FOX1RZUEVfUEFTU0lWRQkxCisKK3N0cnVjdCBhdDc2X3JlcV9zY2FuIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbMzJdOworCXU4IHNjYW5fdHlwZTsKKwl1OCBjaGFubmVsOworCV9fbGUxNiBwcm9iZV9kZWxheTsKKwlfX2xlMTYgbWluX2NoYW5uZWxfdGltZTsKKwlfX2xlMTYgbWF4X2NoYW5uZWxfdGltZTsKKwl1OCBlc3NpZF9zaXplOworCXU4IGludGVybmF0aW9uYWxfc2NhbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X3JlcV9pYnNzIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbMzJdOworCXU4IGJzc190eXBlOworCXU4IGNoYW5uZWw7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X3JlcV9qb2luIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbMzJdOworCXU4IGJzc190eXBlOworCXU4IGNoYW5uZWw7CisJX19sZTE2IHRpbWVvdXQ7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzZXRfbWliX2J1ZmZlciB7CisJdTggdHlwZTsKKwl1OCBzaXplOworCXU4IGluZGV4OworCXU4IHJlc2VydmVkOworCXVuaW9uIHsKKwkJdTggYnl0ZTsKKwkJX19sZTE2IHdvcmQ7CisJCXU4IGFkZHJbRVRIX0FMRU5dOworCX0gZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbG9jYWwgeworCXUxNiByZXNlcnZlZDA7CisJdTggYmVhY29uX2VuYWJsZTsKKwl1OCB0eGF1dG9yYXRlX2ZhbGxiYWNrOworCXU4IHJlc2VydmVkMTsKKwl1OCBzc2lkX3NpemU7CisJdTggcHJvbWlzY3VvdXNfbW9kZTsKKwl1MTYgcmVzZXJ2ZWQyOworCXU4IHByZWFtYmxlX3R5cGU7CisJdTE2IHJlc2VydmVkMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjX2FkZHIgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZXNbMl07CQkvKiA/Pz8gKi8KKwl1OCBncm91cF9hZGRyWzRdW0VUSF9BTEVOXTsKKwl1OCBncm91cF9hZGRyX3N0YXR1c1s0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjIHsKKwlfX2xlMzIgbWF4X3R4X21zZHVfbGlmZXRpbWU7CisJX19sZTMyIG1heF9yeF9saWZldGltZTsKKwlfX2xlMTYgZnJhZ190aHJlc2hvbGQ7CisJX19sZTE2IHJ0c190aHJlc2hvbGQ7CisJX19sZTE2IGN3bWluOworCV9fbGUxNiBjd21heDsKKwl1OCBzaG9ydF9yZXRyeV90aW1lOworCXU4IGxvbmdfcmV0cnlfdGltZTsKKwl1OCBzY2FuX3R5cGU7CQkvKiBhY3RpdmUgb3IgcGFzc2l2ZSAqLworCXU4IHNjYW5fY2hhbm5lbDsKKwlfX2xlMTYgcHJvYmVfZGVsYXk7CS8qIGRlbGF5IGJlZm9yZSBQcm9iZVJlcSBpbiBhY3RpdmUgc2NhbiwgUk8gKi8KKwlfX2xlMTYgbWluX2NoYW5uZWxfdGltZTsKKwlfX2xlMTYgbWF4X2NoYW5uZWxfdGltZTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCXU4IGRlc2lyZWRfc3NpZFszMl07CisJdTggZGVzaXJlZF9ic3NpZFtFVEhfQUxFTl07CisJdTggZGVzaXJlZF9ic3N0eXBlOwkvKiBhZC1ob2Mgb3IgaW5mcmFzdHJ1Y3R1cmUgKi8KKwl1OCByZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY19tZ210IHsKKwlfX2xlMTYgYmVhY29uX3BlcmlvZDsKKwlfX2xlMTYgQ0ZQX21heF9kdXJhdGlvbjsKKwlfX2xlMTYgbWVkaXVtX29jY3VwYW5jeV9saW1pdDsKKwlfX2xlMTYgc3RhdGlvbl9pZDsJLyogYXNzb2MgaWQgKi8KKwlfX2xlMTYgQVRJTV93aW5kb3c7CisJdTggQ0ZQX21vZGU7CisJdTggcHJpdmFjeV9vcHRpb25faW1wbGVtZW50ZWQ7CisJdTggRFRJTV9wZXJpb2Q7CisJdTggQ0ZQX3BlcmlvZDsKKwl1OCBjdXJyZW50X2Jzc2lkW0VUSF9BTEVOXTsKKwl1OCBjdXJyZW50X2Vzc2lkWzMyXTsKKwl1OCBjdXJyZW50X2Jzc190eXBlOworCXU4IHBvd2VyX21nbXRfbW9kZTsKKwkvKiByZm1kIGFuZCA1MDUgKi8KKwl1OCBpYnNzX2NoYW5nZTsKKwl1OCByZXM7CisJdTggbXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQ7CisJdTggbXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfZW5hYmxlZDsKKwl1OCBjb3VudHJ5X3N0cmluZ1szXTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjX3dlcCB7CisJdTggcHJpdmFjeV9pbnZva2VkOwkvKiAwIGRpc2FibGUgZW5jci4sIDEgZW5hYmxlIGVuY3IgKi8KKwl1OCB3ZXBfZGVmYXVsdF9rZXlfaWQ7CisJdTggd2VwX2tleV9tYXBwaW5nX2xlbjsKKwl1OCBleGNsdWRlX3VuZW5jcnlwdGVkOworCV9fbGUzMiB3ZXBfaWN2X2Vycm9yX2NvdW50OworCV9fbGUzMiB3ZXBfZXhjbHVkZWRfY291bnQ7CisJdTggd2VwX2RlZmF1bHRfa2V5dmFsdWVbV0VQX0tFWVNdW1dFUF9MQVJHRV9LRVlfTEVOXTsKKwl1OCBlbmNyeXB0aW9uX2xldmVsOwkvKiAxIGZvciA0MGJpdCwgMiBmb3IgMTA0Yml0IGVuY3J5cHRpb24gKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfcGh5IHsKKwlfX2xlMzIgZWRfdGhyZXNob2xkOworCisJX19sZTE2IHNsb3RfdGltZTsKKwlfX2xlMTYgc2lmc190aW1lOworCV9fbGUxNiBwcmVhbWJsZV9sZW5ndGg7CisJX19sZTE2IHBsY3BfaGVhZGVyX2xlbmd0aDsKKwlfX2xlMTYgbXBkdV9tYXhfbGVuZ3RoOworCV9fbGUxNiBjY2FfbW9kZV9zdXBwb3J0ZWQ7CisKKwl1OCBvcGVyYXRpb25fcmF0ZV9zZXRbNF07CisJdTggY2hhbm5lbF9pZDsKKwl1OCBjdXJyZW50X2NjYV9tb2RlOworCXU4IHBoeV90eXBlOworCXU4IGN1cnJlbnRfcmVnX2RvbWFpbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfZndfdmVyc2lvbiB7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcGF0Y2g7CisJdTggYnVpbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21kb21haW4geworCXU4IHR4X3Bvd2VybGV2ZWxbMTRdOworCXU4IGNoYW5uZWxfbGlzdFsxNF07CS8qIDAgZm9yIGludmFsaWQgY2hhbm5lbHMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X2Z3X2hlYWRlciB7CisJX19sZTMyIGNyYzsJCS8qIENSQzMyIG9mIHRoZSB3aG9sZSBpbWFnZSAqLworCV9fbGUzMiBib2FyZF90eXBlOwkvKiBmaXJtd2FyZSBjb21wYXRpYmlsaXR5IGNvZGUgKi8KKwl1OCBidWlsZDsJCS8qIGZpcm13YXJlIGJ1aWxkIG51bWJlciAqLworCXU4IHBhdGNoOwkJLyogZmlybXdhcmUgcGF0Y2ggbGV2ZWwgKi8KKwl1OCBtaW5vcjsJCS8qIGZpcm13YXJlIG1pbm9yIHZlcnNpb24gKi8KKwl1OCBtYWpvcjsJCS8qIGZpcm13YXJlIG1ham9yIHZlcnNpb24gKi8KKwlfX2xlMzIgc3RyX29mZnNldDsJLyogb2Zmc2V0IG9mIHRoZSBjb3B5cmlnaHQgc3RyaW5nICovCisJX19sZTMyIGludF9md19vZmZzZXQ7CS8qIGludGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBpbnRfZndfbGVuOwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KKwlfX2xlMzIgZXh0X2Z3X29mZnNldDsJLyogZXh0ZXJuYWwgZmlybXdhcmUgaW1hZ2Ugb2Zmc2V0ICovCisJX19sZTMyIGV4dF9md19sZW47CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogYSBkZXNjcmlwdGlvbiBvZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCB0aGUgYWxsb3dlZCBjaGFubmVscyAqLworc3RydWN0IHJlZ19kb21haW4geworCXUxNiBjb2RlOworCWNoYXIgY29uc3QgKm5hbWU7CisJdTMyIGNoYW5uZWxfbWFwOwkvKiBpZiBiaXQgTiBpcyBzZXQsIGNoYW5uZWwgKE4rMSkgaXMgYWxsb3dlZCAqLworfTsKKworLyogRGF0YSBmb3Igb25lIGxvYWRlZCBmaXJtd2FyZSBmaWxlICovCitzdHJ1Y3QgZndlbnRyeSB7CisJY29uc3QgY2hhciAqY29uc3QgZnduYW1lOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGV4dGZ3X3NpemU7CisJaW50IGludGZ3X3NpemU7CisJLyogcG9pbnRlciB0byBsb2FkZWQgZmlybXdhcmUsIG5vIG5lZWQgdG8gZnJlZSAqLworCXU4ICpleHRmdzsJCS8qIGV4dGVybmFsIGZpcm13YXJlLCBleHRmd19zaXplIGJ5dGVzIGxvbmcgKi8KKwl1OCAqaW50Znc7CQkvKiBpbnRlcm5hbCBmaXJtd2FyZSwgaW50Zndfc2l6ZSBieXRlcyBsb25nICovCisJZW51bSBib2FyZF90eXBlIGJvYXJkX3R5cGU7CS8qIGJvYXJkIHR5cGUgKi8KKwlzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24gZndfdmVyc2lvbjsKKwlpbnQgbG9hZGVkOwkJLyogTG9hZGVkIGFuZCBwYXJzZWQgc3VjY2Vzc2Z1bGx5ICovCit9OworCitzdHJ1Y3QgYXQ3Nl9wcml2IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogVVNCIGRldmljZSBwb2ludGVyICovCisKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiOwkvKiBza2J1ZmYgZm9yIHJlY2VpdmluZyBkYXRhICovCisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsJLyogc2tidWZmIGZvciB0cmFuc21pdHRpbmcgZGF0YSAqLworCXZvaWQgKmJ1bGtfb3V0X2J1ZmZlcjsJLyogYnVmZmVyIGZvciBzZW5kaW5nIGRhdGEgKi8KKworCXN0cnVjdCB1cmIgKnR4X3VyYjsJLyogVVJCIGZvciBzZW5kaW5nIGRhdGEgKi8KKwlzdHJ1Y3QgdXJiICpyeF91cmI7CS8qIFVSQiBmb3IgcmVjZWl2aW5nIGRhdGEgKi8KKworCXVuc2lnbmVkIGludCB0eF9waXBlOwkvKiBidWxrIG91dCBwaXBlICovCisJdW5zaWduZWQgaW50IHJ4X3BpcGU7CS8qIGJ1bGsgaW4gcGlwZSAqLworCisJc3RydWN0IG11dGV4IG10eDsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKworCS8qIHdvcmsgcXVldWVzICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc2V0X3Byb21pc2M7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3VibWl0X3J4OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcmtfaHdfc2NhbjsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OworCisJLyogdGhlIFdFUCBzdHVmZiAqLworCWludCB3ZXBfZW5hYmxlZDsJLyogMSBpZiBXRVAgaXMgZW5hYmxlZCAqLworCWludCB3ZXBfa2V5X2lkOwkJLyoga2V5IGlkIHRvIGJlIHVzZWQgKi8KKwl1OCB3ZXBfa2V5c1tXRVBfS0VZU11bV0VQX0xBUkdFX0tFWV9MRU5dOwkvKiBXRVAga2V5cyAqLworCXU4IHdlcF9rZXlzX2xlbltXRVBfS0VZU107CS8qIGxlbmd0aCBvZiBXRVAga2V5cyAqLworCisJaW50IGNoYW5uZWw7CisJaW50IGl3X21vZGU7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKKwlpbnQgZXNzaWRfc2l6ZTsKKwlpbnQgcmFkaW9fb247CisJaW50IHByb21pc2M7CisKKwlpbnQgcHJlYW1ibGVfdHlwZTsJLyogMCAtIGxvbmcsIDEgLSBzaG9ydCwgMiAtIGF1dG8gKi8KKwlpbnQgYXV0aF9tb2RlOwkJLyogYXV0aGVudGljYXRpb24gdHlwZTogMCBvcGVuLCAxIHNoYXJlZCBrZXkgKi8KKwlpbnQgdHhyYXRlOwkJLyogMCwxLDIsMyA9IDEsMiw1LjUsMTEgTWJwcywgNCBpcyBhdXRvICovCisJaW50IGZyYWdfdGhyZXNob2xkOwkvKiB0aHJlc2hvbGQgZm9yIGZyYWdtZW50YXRpb24gb2YgdHggcGFja2V0cyAqLworCWludCBydHNfdGhyZXNob2xkOwkvKiB0aHJlc2hvbGQgZm9yIFJUUyBtZWNoYW5pc20gKi8KKwlpbnQgc2hvcnRfcmV0cnlfbGltaXQ7CisKKwlpbnQgc2Nhbl9taW5fdGltZTsJLyogc2NhbiBtaW4gY2hhbm5lbCB0aW1lICovCisJaW50IHNjYW5fbWF4X3RpbWU7CS8qIHNjYW4gbWF4IGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21vZGU7CQkvKiBTQ0FOX1RZUEVfQUNUSVZFLCBTQ0FOX1RZUEVfUEFTU0lWRSAqLworCWludCBzY2FuX25lZWRfYW55OwkvKiBpZiBzZXQsIG5lZWQgdG8gc2NhbiBmb3IgYW55IEVTU0lEICovCisKKwl1MTYgYXNzb2NfaWQ7CQkvKiBjdXJyZW50IGFzc29jaWF0aW9uIElELCBpZiBhc3NvY2lhdGVkICovCisKKwl1OCBwbV9tb2RlOwkJLyogcG93ZXIgbWFuYWdlbWVudCBtb2RlICovCisJdTMyIHBtX3BlcmlvZDsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgcGVyaW9kIGluIG1pY3Jvc2Vjb25kcyAqLworCisJc3RydWN0IHJlZ19kb21haW4gY29uc3QgKmRvbWFpbjsJLyogcmVnIGRvbWFpbiBkZXNjcmlwdGlvbiAqLworCisJLyogVGhlc2UgZmllbGRzIGNvbnRhaW4gSFcgY29uZmlnIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UgKG5vdCBhbGwgb2YKKwkgKiB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgYnkgYWxsIGJvYXJkIHR5cGVzKSAqLworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKworCXN0cnVjdCBhdDc2X2NhcmRfY29uZmlnIGNhcmRfY29uZmlnOworCisJZW51bSBib2FyZF90eXBlIGJvYXJkX3R5cGU7CisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisKKwl1bnNpZ25lZCBpbnQgZGV2aWNlX3VucGx1Z2dlZDoxOworCXVuc2lnbmVkIGludCBuZXRkZXZfcmVnaXN0ZXJlZDoxOworCXN0cnVjdCBzZXRfbWliX2J1ZmZlciBtaWJfYnVmOwkvKiBnbG9iYWwgYnVmZmVyIGZvciBzZXRfbWliIGNhbGxzICovCisKKwlpbnQgYmVhY29uX3BlcmlvZDsJLyogcGVyaW9kIG9mIG1nbXQgYmVhY29ucywgS3VzICovCisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlpbnQgbWFjODAyMTFfcmVnaXN0ZXJlZDsKK307CisKKyNkZWZpbmUgQVQ3Nl9TVVBQT1JURURfRklMVEVSUyBGSUZfUFJPTUlTQ19JTl9CU1MKKworI2RlZmluZSBTQ0FOX1BPTExfSU5URVJWQUwJKEhaIC8gNCkKKworI2RlZmluZSBDTURfQ09NUExFVElPTl9USU1FT1VUCSg1ICogSFopCisKKyNkZWZpbmUgREVGX1JUU19USFJFU0hPTEQJMTUzNgorI2RlZmluZSBERUZfRlJBR19USFJFU0hPTEQJMTUzNgorI2RlZmluZSBERUZfU0hPUlRfUkVUUllfTElNSVQJOAorI2RlZmluZSBERUZfQ0hBTk5FTAkJMTAKKyNkZWZpbmUgREVGX1NDQU5fTUlOX1RJTUUJMTAKKyNkZWZpbmUgREVGX1NDQU5fTUFYX1RJTUUJMTIwCisKKy8qIHRoZSBtYXggcGFkZGluZyBzaXplIGZvciB0eCBpbiBieXRlcyAoc2VlIGNhbGNfcGFkZGluZykgKi8KKyNkZWZpbmUgTUFYX1BBRERJTkdfU0laRQk1MworCisjZW5kaWYJCQkJLyogX0FUNzZfVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvTWFrZWZpbGUKaW5kZXggNzE5Y2ZhZS4uODRhNzRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvTWFrZWZpbGUKQEAgLTEwLDUgKzEwLDYgQEAKIGF0aDVrLXkJCQkJKz0gcmVzZXQubwogYXRoNWsteQkJCQkrPSBhdHRhY2gubwogYXRoNWsteQkJCQkrPSBiYXNlLm8KK2F0aDVrLXkJCQkJKz0gbGVkLm8KIGF0aDVrLSQoQ09ORklHX0FUSDVLX0RFQlVHKQkrPSBkZWJ1Zy5vCiBvYmotJChDT05GSUdfQVRINUspCQkrPSBhdGg1ay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaAppbmRleCAxODNmZmM4Li4wYjYxNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKQEAgLTE2NSw5ICsxNjUsNiBAQAogI2RlZmluZSBBUjVLX0lOSV9WQUxfWFIJCQkwCiAjZGVmaW5lIEFSNUtfSU5JX1ZBTF9NQVgJCTUKIAotI2RlZmluZSBBUjVLX1JGNTExMV9JTklfUkZfTUFYX0JBTktTCUFSNUtfTUFYX1JGX0JBTktTCi0jZGVmaW5lIEFSNUtfUkY1MTEyX0lOSV9SRl9NQVhfQkFOS1MJQVI1S19NQVhfUkZfQkFOS1MKLQogLyogVXNlZCBmb3IgQlNTSUQgZXRjIG1hbmlwdWxhdGlvbiAqLwogI2RlZmluZSBBUjVLX0xPV19JRChfYSkoCQkJCVwKIChfYSlbMF0gfCAoX2EpWzFdIDw8IDggfCAoX2EpWzJdIDw8IDE2IHwgKF9hKVszXSA8PCAyNAlcCkBAIC0yMDcsOSArMjA0LDkgQEAKICNkZWZpbmUgQVI1S19UVU5FX0NXTUFYXzExQgkJCTEwMjMKICNkZWZpbmUgQVI1S19UVU5FX0NXTUFYX1hSCQkJNwogI2RlZmluZSBBUjVLX1RVTkVfTk9JU0VfRkxPT1IJCQktNzIKLSNkZWZpbmUgQVI1S19UVU5FX01BWF9UWFBPV0VSCQkJNjAKLSNkZWZpbmUgQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUgkJMzAKLSNkZWZpbmUgQVI1S19UVU5FX1RQQ19UWFBPV0VSCQkJdHJ1ZQorI2RlZmluZSBBUjVLX1RVTkVfTUFYX1RYUE9XRVIJCQk2MworI2RlZmluZSBBUjVLX1RVTkVfREVGQVVMVF9UWFBPV0VSCQkyNQorI2RlZmluZSBBUjVLX1RVTkVfVFBDX1RYUE9XRVIJCQlmYWxzZQogI2RlZmluZSBBUjVLX1RVTkVfQU5UX0RJVkVSU0lUWQkJCXRydWUKICNkZWZpbmUgQVI1S19UVU5FX0hXVFhUUklFUwkJCTQKIApAQCAtMjI1LDYgKzIyMiw3IEBACiAjZW5kaWYKIAogLyogSW5pdGlhbCB2YWx1ZXMgKi8KKyNkZWZpbmUJQVI1S19JTklUX0NZQ1JTU0lfVEhSMQkJCTIKICNkZWZpbmUgQVI1S19JTklUX1RYX0xBVEVOQ1kJCQk1MDIKICNkZWZpbmUgQVI1S19JTklUX1VTRUMJCQkJMzkKICNkZWZpbmUgQVI1S19JTklUX1VTRUNfVFVSQk8JCQk3OQpAQCAtMzE2LDcgKzMxNCw3IEBACiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MjQJMHg5MCAvKiBDb25kb3IgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTQxMwkweGE0IC8qIEVhZ2xlIGxpdGUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTQxNAkweGEwIC8qIEVhZ2xlICovCi0jZGVmaW5lIEFSNUtfU1JFVl9BUjI0MTUJMHhiMCAvKiBDb2JyYSAqLworI2RlZmluZSBBUjVLX1NSRVZfQVIyNDE1CTB4YjAgLyogVGFsb24gKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTQxNgkweGMwIC8qIFBDSS1FICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTgJMHhjYSAvKiBQQ0ktRSAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVIyNDI1CTB4ZTAgLyogU3dhbiAqLwpAQCAtMzM0LDcgKzMzMiw3IEBACiAjZGVmaW5lCUFSNUtfU1JFVl9SQURfMjExMkIJMHg0NgogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzI0MTMJMHg1MAogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzU0MTMJMHg2MAotI2RlZmluZSBBUjVLX1NSRVZfUkFEXzIzMTYJMHg3MAorI2RlZmluZSBBUjVLX1NSRVZfUkFEXzIzMTYJMHg3MCAvKiBDb2JyYSBTb0MgKi8KICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE3CTB4ODAKICNkZWZpbmUgQVI1S19TUkVWX1JBRF81NDI0CTB4YTAgLyogTW9zdGx5IHNhbWUgYXMgNTQxMyAqLwogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzI0MjUJMHhhMgpAQCAtMzQyLDcgKzM0MCw4IEBACiAKICNkZWZpbmUgQVI1S19TUkVWX1BIWV81MjExCTB4MzAKICNkZWZpbmUgQVI1S19TUkVWX1BIWV81MjEyCTB4NDEKLSNkZWZpbmUgQVI1S19TUkVWX1BIWV8yMTEyQgkweDQzCisjZGVmaW5lCUFSNUtfU1JFVl9QSFlfNTIxMkEJMHg0MgorI2RlZmluZSBBUjVLX1NSRVZfUEhZXzUyMTJCCTB4NDMKICNkZWZpbmUgQVI1S19TUkVWX1BIWV8yNDEzCTB4NDUKICNkZWZpbmUgQVI1S19TUkVWX1BIWV81NDEzCTB4NjEKICNkZWZpbmUgQVI1S19TUkVWX1BIWV8yNDI1CTB4NzAKQEAgLTU1MiwxMSArNTUxLDExIEBACiAgKi8KICNkZWZpbmUgQVI1S19UWFBPV0VSX09GRE0oX3IsIF92KQkoCQkJXAogCSgoMCAmIDEpIDw8ICgoX3YpICsgNikpIHwJCQkJXAotCSgoKGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc1soX3IpXSkgJiAweDNmKSA8PCAoX3YpKQlcCisJKCgoYWgtPmFoX3R4cG93ZXIudHhwX3JhdGVzX3Bvd2VyX3RhYmxlWyhfcildKSAmIDB4M2YpIDw8IChfdikpCVwKICkKIAogI2RlZmluZSBBUjVLX1RYUE9XRVJfQ0NLKF9yLCBfdikJKAkJCVwKLQkoYWgtPmFoX3R4cG93ZXIudHhwX3JhdGVzWyhfcildICYgMHgzZikgPDwgKF92KQlcCisJKGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc19wb3dlcl90YWJsZVsoX3IpXSAmIDB4M2YpIDw8IChfdikJXAogKQogCiAvKgpAQCAtNjQ5LDQ5ICs2NDgsMjEgQEAKIAogZW51bSBhdGg1a19yZmdhaW4gewogCUFSNUtfUkZHQUlOX0lOQUNUSVZFID0gMCwKKwlBUjVLX1JGR0FJTl9BQ1RJVkUsCiAJQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQsCiAJQVI1S19SRkdBSU5fTkVFRF9DSEFOR0UsCiB9OwogCi0jZGVmaW5lIEFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMQkJNAotI2RlZmluZSBBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTIJCTcKLSNkZWZpbmUgQVI1S19HQUlOX0NSTl9NQVhfRklYX0JJVFMJCUFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMgotI2RlZmluZSBBUjVLX0dBSU5fRFlOX0FESlVTVF9ISV9NQVJHSU4JCTE1Ci0jZGVmaW5lIEFSNUtfR0FJTl9EWU5fQURKVVNUX0xPX01BUkdJTgkJMjAKLSNkZWZpbmUgQVI1S19HQUlOX0NDS19QUk9CRV9DT1JSCQk1Ci0jZGVmaW5lIEFSNUtfR0FJTl9DQ0tfT0ZETV9HQUlOX0RFTFRBCQkxNQotI2RlZmluZSBBUjVLX0dBSU5fU1RFUF9DT1VOVAkJCTEwCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9UWF9DTElQCQkJMAotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfOTAJCQkxCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF84NAkJCTIKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX0dBSU5fU0VMCQkzCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9NSVhfT1JOCQkJMAotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfMTM4CQkJMQotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfMTM3CQkJMgotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfMTM2CQkJMwotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfMTMyCQkJNAotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfMTMxCQkJNQotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfMTMwCQkJNgotI2RlZmluZSBBUjVLX0dBSU5fQ0hFQ0tfQURKVVNUKF9nKSAJCVwKLQkoKF9nKS0+Z19jdXJyZW50IDw9IChfZyktPmdfbG93IHx8IChfZyktPmdfY3VycmVudCA+PSAoX2cpLT5nX2hpZ2gpCi0KLXN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwIHsKLQlzMTYJCQkJZ29zX3BhcmFtW0FSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTXTsKLQlzMzIJCQkJZ29zX2dhaW47Ci19OwotCiBzdHJ1Y3QgYXRoNWtfZ2FpbiB7Ci0JdTMyCQkJZ19zdGVwX2lkeDsKLQl1MzIJCQlnX2N1cnJlbnQ7Ci0JdTMyCQkJZ190YXJnZXQ7Ci0JdTMyCQkJZ19sb3c7Ci0JdTMyCQkJZ19oaWdoOwotCXUzMgkJCWdfZl9jb3JyOwotCXUzMgkJCWdfYWN0aXZlOwotCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwCSpnX3N0ZXA7CisJdTgJCQlnX3N0ZXBfaWR4OworCXU4CQkJZ19jdXJyZW50OworCXU4CQkJZ190YXJnZXQ7CisJdTgJCQlnX2xvdzsKKwl1OAkJCWdfaGlnaDsKKwl1OAkJCWdfZl9jb3JyOworCXU4CQkJZ19zdGF0ZTsKIH07CiAKLQogLyoqKioqKioqKioqKioqKioqKioqXAogICBDT01NT04gREVGSU5JVElPTlMKIFwqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwNTMsNyArMTAyNCw2IEBACiAJYm9vbAkJCWFoX3J1bm5pbmc7CiAJYm9vbAkJCWFoX3NpbmdsZV9jaGlwOwogCWJvb2wJCQlhaF9jb21iaW5lZF9taWM7Ci0JZW51bSBhdGg1a19yZmdhaW4JYWhfcmZfZ2FpbjsKIAogCXUzMgkJCWFoX21hY19zcmV2OwogCXUxNgkJCWFoX21hY192ZXJzaW9uOwpAQCAtMTA2MSw3ICsxMDMxLDYgQEAKIAl1MTYJCQlhaF9waHlfcmV2aXNpb247CiAJdTE2CQkJYWhfcmFkaW9fNWdoel9yZXZpc2lvbjsKIAl1MTYJCQlhaF9yYWRpb18yZ2h6X3JldmlzaW9uOwotCXUzMgkJCWFoX3BoeV9zcGVuZGluZzsKIAogCWVudW0gYXRoNWtfdmVyc2lvbglhaF92ZXJzaW9uOwogCWVudW0gYXRoNWtfcmFkaW8JYWhfcmFkaW87CkBAIC0xMTEyLDE2ICsxMDgxLDI5IEBACiAJdTMyCQkJYWhfdHhxX2lzcjsKIAl1MzIJCQkqYWhfcmZfYmFua3M7CiAJc2l6ZV90CQkJYWhfcmZfYmFua3Nfc2l6ZTsKKwlzaXplX3QJCQlhaF9yZl9yZWdzX2NvdW50OwogCXN0cnVjdCBhdGg1a19nYWluCWFoX2dhaW47Ci0JdTMyCQkJYWhfb2Zmc2V0W0FSNUtfTUFYX1JGX0JBTktTXTsKKwl1OAkJCWFoX29mZnNldFtBUjVLX01BWF9SRl9CQU5LU107CisKIAogCXN0cnVjdCB7Ci0JCXUxNgkJdHhwX3BjZGFjW0FSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkVdOwotCQl1MTYJCXR4cF9yYXRlc1tBUjVLX01BWF9SQVRFU107Ci0JCXMxNgkJdHhwX21pbjsKLQkJczE2CQl0eHBfbWF4OworCQkvKiBUZW1wb3JhcnkgdGFibGVzIHVzZWQgZm9yIGludGVycG9sYXRpb24gKi8KKwkJdTgJCXRtcExbQVI1S19FRVBST01fTl9QRF9HQUlOU10KKwkJCQkJW0FSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkVdOworCQl1OAkJdG1wUltBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXQorCQkJCQlbQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRV07CisJCXU4CQl0eHBfcGRfdGFibGVbQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSAqIDJdOworCQl1MTYJCXR4cF9yYXRlc19wb3dlcl90YWJsZVtBUjVLX01BWF9SQVRFU107CisJCXU4CQl0eHBfbWluX2lkeDsKIAkJYm9vbAkJdHhwX3RwYzsKKwkJLyogVmFsdWVzIGluIDAuMjVkQiB1bml0cyAqLworCQlzMTYJCXR4cF9taW5fcHdyOworCQlzMTYJCXR4cF9tYXhfcHdyOworCQlzMTYJCXR4cF9vZmZzZXQ7CiAJCXMxNgkJdHhwX29mZG07CisJCS8qIFZhbHVlcyBpbiBkQiB1bml0cyAqLworCQlzMTYJCXR4cF9jY2tfb2ZkbV9wd3JfZGVsdGE7CisJCXMxNgkJdHhwX2Nja19vZmRtX2dhaW5mX2RlbHRhOwogCX0gYWhfdHhwb3dlcjsKIAogCXN0cnVjdCB7CkBAIC0xMTU5LDYgKzExNDEsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgYXRoNWtfaHcgKmF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1OCBtYWNfdmVyc2lvbik7CiBleHRlcm4gdm9pZCBhdGg1a19od19kZXRhY2goc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKKy8qIExFRCBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoNWtfbGVkX2VuYWJsZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBhdGg1a191bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CisKIC8qIFJlc2V0IEZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFncywgYm9vbCBpbml0aWFsKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfcmVzZXQoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcF9tb2RlLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgY2hhbmdlX2NoYW5uZWwpOwpAQCAtMTE4NSw3ICsxMTczLDkgQEAKIAogLyogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfZWVwcm9tX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gdm9pZCBhdGg1a19lZXByb21fZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIGludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYyk7CitleHRlcm4gYm9vbCBhdGg1a19lZXByb21faXNfaGI2MyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAogLyogUHJvdG9jb2wgQ29udHJvbCBVbml0IEZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBhdGg1a19od19zZXRfb3Btb2RlKHN0cnVjdCBhdGg1a19odyAqYWgpOwpAQCAtMTIwNiw2ICsxMTk2LDcgQEAKIC8qIEJlYWNvbiBjb250cm9sIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHUzMiBhdGg1a19od19nZXRfdHNmMzIoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gdTY0IGF0aDVrX2h3X2dldF90c2Y2NChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKK2V4dGVybiB2b2lkIGF0aDVrX2h3X3NldF90c2Y2NChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1NjQgdHNmNjQpOwogZXh0ZXJuIHZvaWQgYXRoNWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIHZvaWQgYXRoNWtfaHdfaW5pdF9iZWFjb24oc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgaW50ZXJ2YWwpOwogI2lmIDAKQEAgLTEyNjAsMTAgKzEyNTEsMTIgQEAKIGV4dGVybiBpbnQgYXRoNWtfaHdfd3JpdGVfaW5pdHZhbHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggbW9kZSwgYm9vbCBjaGFuZ2VfY2hhbm5lbCk7CiAKIC8qIEluaXRpYWxpemUgUkYgKi8KLWV4dGVybiBpbnQgYXRoNWtfaHdfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpOwotZXh0ZXJuIGludCBhdGg1a19od19yZmdhaW4oc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpOwotZXh0ZXJuIGVudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dldF9yZl9nYWluKHN0cnVjdCBhdGg1a19odyAqYWgpOwotZXh0ZXJuIGludCBhdGg1a19od19zZXRfcmZnYWluX29wdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfcmZyZWdzX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJdW5zaWduZWQgaW50IG1vZGUpOworZXh0ZXJuIGludCBhdGg1a19od19yZmdhaW5faW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgZnJlcSk7CitleHRlcm4gZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2FpbmZfY2FsaWJyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIGludCBhdGg1a19od19yZmdhaW5fb3B0X2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAvKiBQSFkvUkYgY2hhbm5lbCBmdW5jdGlvbnMgKi8KIGV4dGVybiBib29sIGF0aDVrX2NoYW5uZWxfb2soc3RydWN0IGF0aDVrX2h3ICphaCwgdTE2IGZyZXEsIHVuc2lnbmVkIGludCBmbGFncyk7CiBleHRlcm4gaW50IGF0aDVrX2h3X2NoYW5uZWwoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTsKQEAgLTEyNzYsOCArMTI2OSw4IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZfYW50ZW5uYShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAvKiBUWCBwb3dlciBzZXR1cCAqLwotZXh0ZXJuIGludCBhdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IHR4cG93ZXIpOwotZXh0ZXJuIGludCBhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcG93ZXIpOworZXh0ZXJuIGludCBhdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdTggZWVfbW9kZSwgdTggdHhwb3dlcik7CitleHRlcm4gaW50IGF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IGVlX21vZGUsIHU4IHR4cG93ZXIpOwogCiAvKgogICogRnVuY3Rpb25zIHVzZWQgaW50ZXJuYWx5CkBAIC0xMjg1LDYgKzEyNzgsNyBAQAogCiAvKgogICogVHJhbnNsYXRlIHVzZWMgdG8gaHcgY2xvY2sgdW5pdHMKKyAqIFRPRE86IEhhbGYvcXVhcnRlciByYXRlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDVrX2h3X2h0b2Nsb2NrKHVuc2lnbmVkIGludCB1c2VjLCBib29sIHR1cmJvKQogewpAQCAtMTI5Myw2ICsxMjg3LDcgQEAKIAogLyoKICAqIFRyYW5zbGF0ZSBodyBjbG9jayB1bml0cyB0byB1c2VjCisgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19jbG9ja3RvaCh1bnNpZ25lZCBpbnQgY2xvY2ssIGJvb2wgdHVyYm8pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0dGFjaC5jCmluZGV4IGRlYTM3OGYuLjcwZDM3NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0dGFjaC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0dGFjaC5jCkBAIC0zNCwxNCArMzQsMTQgQEAKIHN0YXRpYyBpbnQgYXRoNWtfaHdfcG9zdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCi0JaW50IGksIGM7Ci0JdTE2IGN1cl9yZWc7Ci0JdTE2IHJlZ3NbMl0gPSB7QVI1S19TVEFfSUQwLCBBUjVLX1BIWSg4KX07Ci0JdTMyIHZhcl9wYXR0ZXJuOwotCXUzMiBzdGF0aWNfcGF0dGVybls0XSA9IHsKKwlzdGF0aWMgY29uc3QgdTMyIHN0YXRpY19wYXR0ZXJuWzRdID0gewogCQkweDU1NTU1NTU1LAkweGFhYWFhYWFhLAogCQkweDY2NjY2NjY2LAkweDk5OTk5OTk5CiAJfTsKKwlzdGF0aWMgY29uc3QgdTE2IHJlZ3NbMl0gPSB7IEFSNUtfU1RBX0lEMCwgQVI1S19QSFkoOCkgfTsKKwlpbnQgaSwgYzsKKwl1MTYgY3VyX3JlZzsKKwl1MzIgdmFyX3BhdHRlcm47CiAJdTMyIGluaXRfdmFsOwogCXUzMiBjdXJfdmFsOwogCkBAIC0xMDYsNyArMTA2LDYgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7Ci0JdTggbWFjW0VUSF9BTEVOXSA9IHt9OwogCWludCByZXQ7CiAJdTMyIHNyZXY7CiAKQEAgLTE2OSw3ICsxNjgsNiBAQAogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSBmYWxzZTsKIAkJYWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24gPSBhdGg1a19od19yYWRpb19yZXZpc2lvbihhaCwKIAkJCQkJCQlDSEFOTkVMXzJHSFopOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExOwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfNTExMjoKIAljYXNlIEFSNUtfU1JFVl9SQURfMjExMjoKQEAgLTE3NywzOCArMTc1LDMxIEBACiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IGZhbHNlOwogCQlhaC0+YWhfcmFkaW9fMmdoel9yZXZpc2lvbiA9IGF0aDVrX2h3X3JhZGlvX3JldmlzaW9uKGFoLAogCQkJCQkJCUNIQU5ORUxfMkdIWik7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjUxMTI7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF8yNDEzOgogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQxMzsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQxMzsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzU0MTM6CiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1NDEzOwogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1NDEzOwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjMxNjoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTY7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjIzMTY7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF8yMzE3OgogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjMxNzsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNzsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzU0MjQ6CiAJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gQVI1S19TUkVWX0FSMjQyNSB8fAogCQlhaC0+YWhfbWFjX3ZlcnNpb24gPT0gQVI1S19TUkVWX0FSMjQxNyl7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQyNTsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyNDI1OwogCQl9IGVsc2UgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjU0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMzsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjI3LDI5ICsyMTgsMjUgQEAKIAkJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkYyNDI1OwogCQkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKIAkJCWFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID0gQVI1S19TUkVWX1JBRF8yNDI1OwotCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNTsKIAkJfSBlbHNlIGlmIChzcmV2ID09IEFSNUtfU1JFVl9BUjUyMTNBICYmCi0JCWFoLT5haF9waHlfcmV2aXNpb24gPT0gQVI1S19TUkVWX1BIWV8yMTEyQikgeworCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfNTIxMkIpIHsKIAkJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1MTEyOwogCQkJYWgtPmFoX3NpbmdsZV9jaGlwID0gZmFsc2U7Ci0JCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjExMkI7CisJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfNTExMkI7CiAJCX0gZWxzZSBpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE1ID4+IDQpKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjMxNjsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjMxNjsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjIzMTY7CiAJCX0gZWxzZSBpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVI1NDE0ID4+IDQpIHx8CiAJCWFoLT5haF9waHlfcmV2aXNpb24gPT0gQVI1S19TUkVWX1BIWV81NDEzKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTQxMzsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfNTQxMzsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjU0MTM7CiAJCX0gZWxzZSBpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE0ID4+IDQpIHx8CiAJCWFoLT5haF9waHlfcmV2aXNpb24gPT0gQVI1S19TUkVWX1BIWV8yNDEzKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQxMzsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjQxMzsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MTM7CiAJCX0gZWxzZSB7CiAJCQlBVEg1S19FUlIoc2MsICJDb3VsZG4ndCBpZGVudGlmeSByYWRpbyByZXZpc2lvbi5cbiIpOwogCQkJcmV0ID0gLUVOT0RFVjsKQEAgLTMyNCwxNCArMzExLDE0IEBACiAJfQogCiAJLyogTUFDIGFkZHJlc3MgaXMgY2xlYXJlZCB1bnRpbCBhZGRfaW50ZXJmYWNlICovCi0JYXRoNWtfaHdfc2V0X2xsYWRkcihhaCwgbWFjKTsKKwlhdGg1a19od19zZXRfbGxhZGRyKGFoLCAodThbRVRIX0FMRU5dKXt9KTsKIAogCS8qIFNldCBCU1NJRCB0byBiY2FzdCBhZGRyZXNzOiBmZjpmZjpmZjpmZjpmZjpmZiBmb3Igbm93ICovCiAJbWVtc2V0KGFoLT5haF9ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwogCWF0aDVrX2h3X3NldF9hc3NvY2lkKGFoLCBhaC0+YWhfYnNzaWQsIDApOwogCWF0aDVrX2h3X3NldF9vcG1vZGUoYWgpOwogCi0JYXRoNWtfaHdfc2V0X3JmZ2Fpbl9vcHQoYWgpOworCWF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChhaCk7CiAKIAlyZXR1cm4gYWg7CiBlcnJfZnJlZToKQEAgLTM1NCw2ICszNDEsOCBAQAogCWlmIChhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKIAkJa2ZyZWUoYWgtPmFoX3JmX2JhbmtzKTsKIAorCWF0aDVrX2VlcHJvbV9kZXRhY2goYWgpOworCiAJLyogYXNzdW1lIGludGVycnVwdHMgYXJlIGRvd24gKi8KIAlrZnJlZShhaCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKaW5kZXggMWQ3N2VlOS4uNWQ1N2Q3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYwpAQCAtNzksNyArNzksNyBAQAogCiAKIC8qIEtub3duIFBDSSBpZHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMjA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCBlYXJseSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTEgfSwgLyogNTMxMSAtIHRoaXMgaXMgb24gQUhCIGJ1cyAhKi8KQEAgLTEwMyw3ICsxMDMsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDVrX3BjaV9pZF90YWJsZSk7CiAKIC8qIEtub3duIFNSRVZzICovCi1zdGF0aWMgc3RydWN0IGF0aDVrX3NyZXZfbmFtZSBzcmV2X25hbWVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3NyZXZfbmFtZSBzcmV2X25hbWVzW10gPSB7CiAJeyAiNTIxMCIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUyMTAgfSwKIAl7ICI1MzExIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMSB9LAogCXsgIjUzMTFBIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMUEgfSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXsgInh4eHh4IiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1VOS05PV04gfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXRoNWtfcmF0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXRoNWtfcmF0ZXNbXSA9IHsKIAl7IC5iaXRyYXRlID0gMTAsCiAJICAuaHdfdmFsdWUgPSBBVEg1S19SQVRFX0NPREVfMU0sIH0sCiAJeyAuYml0cmF0ZSA9IDIwLApAQCAtMjMyLDEzICsyMzIsMTQgQEAKIAkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCk7CiBzdGF0aWMgaW50IGF0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCWVudW0gc2V0X2tleV9jbWQgY21kLAotCQljb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiBzdGF0aWMgaW50IGF0aDVrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsKIHN0YXRpYyBpbnQgYXRoNWtfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiBzdGF0aWMgdTY0IGF0aDVrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIHZvaWQgYXRoNWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiBzdGF0aWMgdm9pZCBhdGg1a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIGludCBhdGg1a19iZWFjb25fdXBkYXRlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCXN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMjQ3LDcgKzI0OCw3IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQl1MzIgY2hhbmdlcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg1a19od19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0gewogCS50eCAJCT0gYXRoNWtfdHgsCiAJLnN0YXJ0IAkJPSBhdGg1a19zdGFydCwKIAkuc3RvcCAJCT0gYXRoNWtfc3RvcCwKQEAgLTI2MSw2ICsyNjIsNyBAQAogCS5jb25mX3R4IAk9IE5VTEwsCiAJLmdldF90eF9zdGF0cyAJPSBhdGg1a19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YgCT0gYXRoNWtfZ2V0X3RzZiwKKwkuc2V0X3RzZiAJPSBhdGg1a19zZXRfdHNmLAogCS5yZXNldF90c2YgCT0gYXRoNWtfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gYXRoNWtfYnNzX2luZm9fY2hhbmdlZCwKIH07CkBAIC0zMDgsNiArMzEwLDE5IEBACiAJYmYtPnNrYiA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a19yeGJ1Zl9mcmVlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCisJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCit7CisJQlVHX09OKCFiZik7CisJaWYgKCFiZi0+c2tiKQorCQlyZXR1cm47CisJcGNpX3VubWFwX3NpbmdsZShzYy0+cGRldiwgYmYtPnNrYmFkZHIsIHNjLT5yeGJ1ZnNpemUsCisJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWRldl9rZnJlZV9za2JfYW55KGJmLT5za2IpOworCWJmLT5za2IgPSBOVUxMOworfQorCisKIC8qIFF1ZXVlcyBzZXR1cCAqLwogc3RhdGljIHN0cnVjdCAJYXRoNWtfdHhxICphdGg1a190eHFfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQlpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKQEAgLTMzNSw2ICszNTAsNyBAQAogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9zZW5kKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZAlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKTsKK3N0YXRpYyB2b2lkCWF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGF0aDVrX2V4dGVuZF90c2Yoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIHJzdGFtcCkKIHsKQEAgLTM0NywxOCArMzYzLDEzIEBACiB9CiAKIC8qIEludGVycnVwdCBoYW5kbGluZyAqLwotc3RhdGljIGludCAJYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSk7CitzdGF0aWMgaW50IAlhdGg1a19pbml0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGludCAJYXRoNWtfc3RvcF9sb2NrZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGJvb2wgaXNfc3VzcGVuZCk7CitzdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGlycXJldHVybl90IGF0aDVrX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIHN0YXRpYyB2b2lkIAlhdGg1a19jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKTsKLS8qIExFRCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQJYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIHZvaWQJYXRoNWtfbGVkX2VuYWJsZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkCWF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgdm9pZAlhdGg1a191bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiAKIC8qCiAgKiBNb2R1bGUgaW5pdC9leGl0IGZ1bmN0aW9ucwpAQCAtNjUzLDggKzY2NCw2IEBACiAKIAlhdGg1a19sZWRfb2ZmKHNjKTsKIAotCWF0aDVrX3N0b3BfaHcoc2MsIHRydWUpOwotCiAJZnJlZV9pcnEocGRldi0+aXJxLCBzYyk7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNjc2LDI3ICs2ODUsMTUgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JLyoKLQkgKiBTdXNwZW5kL1Jlc3VtZSByZXNldHMgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyB3ZSBoYXZlIHRvCi0JICogcmUtZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAotCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUKLQkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMCk7Ci0KIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aDVrX2ludHIsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpOwogCWlmIChlcnIpIHsKIAkJQVRINUtfRVJSKHNjLCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfbm9faXJxOwogCX0KIAotCWVyciA9IGF0aDVrX2luaXQoc2MsIHRydWUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2lycTsKIAlhdGg1a19sZWRfZW5hYmxlKHNjKTsKLQogCXJldHVybiAwOwotZXJyX2lycToKLQlmcmVlX2lycShwZGV2LT5pcnEsIHNjKTsKKwogZXJyX25vX2lycToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIGVycjsKQEAgLTc4MSw2ICs3NzgsNyBAQAogCXRhc2tsZXRfaW5pdCgmc2MtPnJ4dHEsIGF0aDVrX3Rhc2tsZXRfcngsICh1bnNpZ25lZCBsb25nKXNjKTsKIAl0YXNrbGV0X2luaXQoJnNjLT50eHRxLCBhdGg1a190YXNrbGV0X3R4LCAodW5zaWduZWQgbG9uZylzYyk7CiAJdGFza2xldF9pbml0KCZzYy0+cmVzdHEsIGF0aDVrX3Rhc2tsZXRfcmVzZXQsICh1bnNpZ25lZCBsb25nKXNjKTsKKwl0YXNrbGV0X2luaXQoJnNjLT5iZWFjb250cSwgYXRoNWtfdGFza2xldF9iZWFjb24sICh1bnNpZ25lZCBsb25nKXNjKTsKIAlzZXR1cF90aW1lcigmc2MtPmNhbGliX3RpbSwgYXRoNWtfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlyZXQgPSBhdGg1a19lZXByb21fcmVhZF9tYWMoYWgsIG1hYyk7CkBAIC0xMDkwLDggKzEwODgsMTggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBhdGg1a19od190b19kcml2ZXJfcml4KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGludCBod19yaXgpCiB7Ci0JV0FSTl9PTihod19yaXggPCAwIHx8IGh3X3JpeCA+IEFSNUtfTUFYX1JBVEVTKTsKLQlyZXR1cm4gc2MtPnJhdGVfaWR4W3NjLT5jdXJiYW5kLT5iYW5kXVtod19yaXhdOworCWludCByaXg7CisKKwkvKiByZXR1cm4gYmFzZSByYXRlIG9uIGVycm9ycyAqLworCWlmIChXQVJOKGh3X3JpeCA8IDAgfHwgaHdfcml4ID49IEFSNUtfTUFYX1JBVEVTLAorCQkJImh3X3JpeCBvdXQgb2YgYm91bmRzOiAleFxuIiwgaHdfcml4KSkKKwkJcmV0dXJuIDA7CisKKwlyaXggPSBzYy0+cmF0ZV9pZHhbc2MtPmN1cmJhbmQtPmJhbmRdW2h3X3JpeF07CisJaWYgKFdBUk4ocml4IDwgMCwgImludmFsaWQgaHdfcml4OiAleFxuIiwgaHdfcml4KSkKKwkJcml4ID0gMDsKKworCXJldHVybiByaXg7CiB9CiAKIC8qKioqKioqKioqKioqKipcCkBAIC0xMTg4LDYgKzExOTYsMTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CiAJdW5zaWduZWQgaW50IG1ycl9yYXRlWzNdLCBtcnJfdHJpZXNbM107CiAJaW50IGksIHJldDsKKwl1MTYgaHdfcmF0ZTsKKwl1MTYgY3RzX3JhdGUgPSAwOworCXUxNiBkdXJhdGlvbiA9IDA7CisJdTggcmNfZmxhZ3M7CiAKIAlmbGFncyA9IEFSNUtfVFhERVNDX0lOVFJFUSB8IEFSNUtfVFhERVNDX0NMUkRNQVNLOwogCkBAIC0xMTk1LDIwICsxMjA3LDQyIEBACiAJYmYtPnNrYmFkZHIgPSBwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCisJcmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShzYy0+aHcsIGluZm8pOworCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCiAJCWZsYWdzIHw9IEFSNUtfVFhERVNDX05PQUNLOwogCisJcmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOworCWh3X3JhdGUgPSAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKSA/CisJCXJhdGUtPmh3X3ZhbHVlX3Nob3J0IDogcmF0ZS0+aHdfdmFsdWU7CisKIAlwa3RsZW4gPSBza2ItPmxlbjsKIAorCS8qIEZJWE1FOiBJZiB3ZSBhcmUgaW4gZyBtb2RlIGFuZCByYXRlIGlzIGEgQ0NLIHJhdGUKKwkgKiBzdWJ0cmFjdCBhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fcHdyX2RlbHRhCisJICogZnJvbSB0eCBwb3dlciAodmFsdWUgaXMgaW4gZEIgdW5pdHMgYWxyZWFkeSkgKi8KIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKIAkJa2V5aWR4ID0gaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CiAJCXBrdGxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKIAl9CisJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CisJCWZsYWdzIHw9IEFSNUtfVFhERVNDX1JUU0VOQTsKKwkJY3RzX3JhdGUgPSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfcnRzX2R1cmF0aW9uKHNjLT5odywKKwkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOworCX0KKwlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJCWZsYWdzIHw9IEFSNUtfVFhERVNDX0NUU0VOQTsKKwkJY3RzX3JhdGUgPSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uKHNjLT5odywKKwkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOworCX0KIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHBrdGxlbiwKIAkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwgQVI1S19QS1RfVFlQRV9OT1JNQUwsCiAJCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwKLQkJaWVlZTgwMjExX2dldF90eF9yYXRlKHNjLT5odywgaW5mbyktPmh3X3ZhbHVlLAotCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50LCBrZXlpZHgsIDAsIGZsYWdzLCAwLCAwKTsKKwkJaHdfcmF0ZSwKKwkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCwga2V5aWR4LCAwLCBmbGFncywKKwkJY3RzX3JhdGUsIGR1cmF0aW9uKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIApAQCAtMTMyNCw3ICsxMzU4LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJmLCAmc2MtPnR4YnVmLCBsaXN0KQogCQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBiZik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT5yeGJ1ZiwgbGlzdCkKLQkJYXRoNWtfdHhidWZfZnJlZShzYywgYmYpOworCQlhdGg1a19yeGJ1Zl9mcmVlKHNjLCBiZik7CiAKIAkvKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYWxsIGRlc2NyaXB0b3JzICovCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzYy0+ZGVzY19sZW4sIHNjLT5kZXNjLCBzYy0+ZGVzY19kYWRkcik7CkBAIC0xNjY4LDYgKzE3MDIsMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHN0cnVjdCBhdGg1a19zb2Z0YyAqKSBkYXRhOworCisJLyoKKwkgKiBTb2Z0d2FyZSBiZWFjb24gYWxlcnQtLXRpbWUgdG8gc2VuZCBhIGJlYWNvbi4KKwkgKgorCSAqIEluIElCU1MgbW9kZSB3ZSB1c2UgdGhpcyBpbnRlcnJ1cHQganVzdCB0bworCSAqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgorCSAqIHRyYW5zbWlzc2lvbiB0aW1lKSBpbiBvcmRlciB0byBkZXRlY3Qgd2V0aGVyCisJICogYXV0b21hdGljIFRTRiB1cGRhdGVzIGhhcHBlbmVkLgorCSAqLworCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCS8qIFhYWDogb25seSBpZiBWRU9MIHN1cHBwb3J0ZWQgKi8KKwkJdTY0IHRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpOworCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7CisJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAorCQkJCSJTV0JBIG5leHR0YnR0OiAleCBod190dTogJXggIgorCQkJCSJUU0Y6ICVsbHhcbiIsCisJCQkJc2MtPm5leHR0YnR0LAorCQkJCVRTRl9UT19UVSh0c2YpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHRzZik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQlhdGg1a19iZWFjb25fc2VuZChzYyk7CisJCXNwaW5fdW5sb2NrKCZzYy0+YmxvY2spOworCX0KK30KIAogc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMTk4Nyw2ICsyMDQ5LDkgQEAKIAkJCWFudGVubmEgPSBzYy0+YnNlbnQgJiA0ID8gMiA6IDE7CiAJfQogCisJLyogRklYTUU6IElmIHdlIGFyZSBpbiBnIG1vZGUgYW5kIHJhdGUgaXMgYSBDQ0sgcmF0ZQorCSAqIHN1YnRyYWN0IGFoLT5haF90eHBvd2VyLnR4cF9jY2tfb2ZkbV9wd3JfZGVsdGEKKwkgKiBmcm9tIHR4IHBvd2VyICh2YWx1ZSBpcyBpbiBkQiB1bml0cyBhbHJlYWR5KSAqLwogCWRzLT5kc19kYXRhID0gYmYtPnNrYmFkZHI7CiAJcmV0ID0gYWgtPmFoX3NldHVwX3R4X2Rlc2MoYWgsIGRzLCBza2ItPmxlbiwKIAkJCWllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYiksCkBAIC0yMDA4LDkgKzIwNzMsOCBAQAogICogZnJhbWUgY29udGVudHMgYXJlIGRvbmUgYXMgbmVlZGVkIGFuZCB0aGUgc2xvdCB0aW1lIGlzCiAgKiBhbHNvIGFkanVzdGVkIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGUuCiAgKgotICogdGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IChhdGg1a19pbnRyKCkpCi0gKiBidXQgYWxzbyBmcm9tIGF0aDVrX2JlYWNvbl9jb25maWcoKSBpbiBJQlNTIG1vZGUgd2hpY2ggaW4gdHVybgotICogY2FuIGJlIGNhbGxlZCBmcm9tIGEgdGFza2xldCBhbmQgdXNlciBjb250ZXh0CisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHNvZnR3YXJlIGlycSBjb250ZXh0IChiZWFjb250cSBvciByZXN0cQorICogdGFza2xldHMpIG9yIHVzZXIgY29udGV4dCBmcm9tIGF0aDVrX2JlYWNvbl9jb25maWcuCiAgKi8KIHN0YXRpYyB2b2lkCiBhdGg1a19iZWFjb25fc2VuZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQpAQCAtMjE3NywxMCArMjI0MSw2IEBACiAgKgogICogQHNjOiBzdHJ1Y3QgYXRoNWtfc29mdGMgcG9pbnRlciB3ZSBhcmUgb3BlcmF0aW5nIG9uCiAgKgotICogV2hlbiBvcGVyYXRpbmcgaW4gc3RhdGlvbiBtb2RlIHdlIHdhbnQgdG8gcmVjZWl2ZSBhIEJNSVNTIGludGVycnVwdCB3aGVuIHdlCi0gKiBzdG9wIHNlZWluZyBiZWFjb25zIGZyb20gdGhlIEFQIHdlJ3ZlIGFzc29jaWF0ZWQgd2l0aCBzbyB3ZSBjYW4gbG9vayBmb3IKLSAqIGFub3RoZXIgQVAgdG8gYXNzb2NpYXRlIHdpdGguCi0gKgogICogSW4gSUJTUyBtb2RlIHdlIHVzZSBhIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgaWYgcG9zc2libGUuIFdlIGVuYWJsZSBTV0JBCiAgKiBpbnRlcnJ1cHRzIHRvIGRldGVjdCBUU0YgdXBkYXRlcyBvbmx5LgogICovCkBAIC0yMTg4LDE0ICsyMjQ4LDEzIEBACiBhdGg1a19iZWFjb25fY29uZmlnKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYXRoNWtfaHdfc2V0X2ltcihhaCwgMCk7CiAJc2MtPmJtaXNzY291bnQgPSAwOwogCXNjLT5pbWFzayAmPSB+KEFSNUtfSU5UX0JNSVNTIHwgQVI1S19JTlRfU1dCQSk7CiAKLQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCXNjLT5pbWFzayB8PSBBUjVLX0lOVF9CTUlTUzsKLQl9IGVsc2UgaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAogCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UIHx8CiAJCQlzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qCkBAIC0yMjExLDkgKzIyNzAsOSBAQAogCiAJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCQlpZiAoYXRoNWtfaHdfaGFzdmVvbChhaCkpIHsKLQkJCQlzcGluX2xvY2soJnNjLT5ibG9jayk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOwogCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQlzcGluX3VubG9jaygmc2MtPmJsb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzYywgLTEpOwpAQCAtMjIyOCwxOCArMjI4NywxMyBAQAogXCoqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50Ci1hdGg1a19pbml0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGJvb2wgaXNfcmVzdW1lKQorYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAJaW50IHJldCwgaTsKIAogCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKIAotCWlmIChpc19yZXN1bWUgJiYgIXRlc3RfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpKQotCQlnb3RvIG91dF9vazsKLQotCV9fY2xlYXJfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpOwotCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgIm1vZGUgJWRcbiIsIHNjLT5vcG1vZGUpOwogCiAJLyoKQEAgLTIyNTksNyArMjMxMyw3IEBACiAJc2MtPmN1cmJhbmQgPSAmc2MtPnNiYW5kc1tzYy0+Y3VyY2hhbi0+YmFuZF07CiAJc2MtPmltYXNrID0gQVI1S19JTlRfUlhPSyB8IEFSNUtfSU5UX1JYRVJSIHwgQVI1S19JTlRfUlhFT0wgfAogCQlBUjVLX0lOVF9SWE9STiB8IEFSNUtfSU5UX1RYREVTQyB8IEFSNUtfSU5UX1RYRU9MIHwKLQkJQVI1S19JTlRfRkFUQUwgfCBBUjVLX0lOVF9HTE9CQUwgfCBBUjVLX0lOVF9NSUI7CisJCUFSNUtfSU5UX0ZBVEFMIHwgQVI1S19JTlRfR0xPQkFMOwogCXJldCA9IGF0aDVrX3Jlc2V0KHNjLCBmYWxzZSwgZmFsc2UpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9uZTsKQEAgLTIyNzEsMTUgKzIzMjUsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1S19LRVlUQUJMRV9TSVpFOyBpKyspCiAJCWF0aDVrX2h3X3Jlc2V0X2tleShhaCwgaSk7CiAKLQlfX3NldF9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7Ci0KIAkvKiBTZXQgYWNrIHRvIGJlIHNlbnQgYXQgbG93IGJpdC1yYXRlcyAqLwogCWF0aDVrX2h3X3NldF9hY2tfYml0cmF0ZV9oaWdoKGFoLCBmYWxzZSk7CiAKIAltb2RfdGltZXIoJnNjLT5jYWxpYl90aW0sIHJvdW5kX2ppZmZpZXMoamlmZmllcyArCiAJCQltc2Vjc190b19qaWZmaWVzKGF0aDVrX2NhbGludGVydmFsICogMTAwMCkpKTsKIAotb3V0X29rOgogCXJldCA9IDA7CiBkb25lOgogCW1taW93YigpOwpAQCAtMjMzNCw3ICsyMzg1LDcgQEAKICAqIHN0b3AgaXMgcHJlZW1wdGVkKS4KICAqLwogc3RhdGljIGludAotYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3N1c3BlbmQpCithdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7CiAJaW50IHJldDsKIApAQCAtMjM2NSw4ICsyNDE2LDYgQEAKIAkJfQogCX0KIAlhdGg1a190eGJ1Zl9mcmVlKHNjLCBzYy0+YmJ1Zik7Ci0JaWYgKCFpc19zdXNwZW5kKQotCQlfX2NsZWFyX2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKTsKIAogCW1taW93YigpOwogCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwpAQCAtMjM3NSw2ICsyNDI0LDcgQEAKIAl0YXNrbGV0X2tpbGwoJnNjLT5yeHRxKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT50eHRxKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT5yZXN0cSk7CisJdGFza2xldF9raWxsKCZzYy0+YmVhY29udHEpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIzOTIsMTYgKzI0NDIsOSBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlkbyB7Ci0JCS8qCi0JCSAqIEZpZ3VyZSBvdXQgdGhlIHJlYXNvbihzKSBmb3IgdGhlIGludGVycnVwdC4gIE5vdGUKLQkJICogdGhhdCBnZXRfaXNyIHJldHVybnMgYSBwc2V1ZG8tSVNSIHRoYXQgbWF5IGluY2x1ZGUKLQkJICogYml0cyB3ZSBoYXZlbid0IGV4cGxpY2l0bHkgZW5hYmxlZCBzbyB3ZSBtYXNrIHRoZQotCQkgKiB2YWx1ZSB0byBpbnN1cmUgd2Ugb25seSBwcm9jZXNzIGJpdHMgd2UgcmVxdWVzdGVkLgotCQkgKi8KIAkJYXRoNWtfaHdfZ2V0X2lzcihhaCwgJnN0YXR1cyk7CQkvKiBOQjogY2xlYXJzIElSUSB0b28gKi8KIAkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19JTlRSLCAic3RhdHVzIDB4JXgvMHgleFxuIiwKIAkJCQlzdGF0dXMsIHNjLT5pbWFzayk7Ci0JCXN0YXR1cyAmPSBzYy0+aW1hc2s7IC8qIGRpc2NhcmQgdW5hc2tlZCBmb3IgYml0cyAqLwogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgQVI1S19JTlRfRkFUQUwpKSB7CiAJCQkvKgogCQkJICogRmF0YWwgZXJyb3JzIGFyZSB1bnJlY292ZXJhYmxlLgpAQCAtMjQxMiwzMiArMjQ1NSw3IEBACiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cmVzdHEpOwogCQl9IGVsc2UgewogCQkJaWYgKHN0YXR1cyAmIEFSNUtfSU5UX1NXQkEpIHsKLQkJCQkvKgotCQkJCSogU29mdHdhcmUgYmVhY29uIGFsZXJ0LS10aW1lIHRvIHNlbmQgYSBiZWFjb24uCi0JCQkJKiBIYW5kbGUgYmVhY29uIHRyYW5zbWlzc2lvbiBkaXJlY3RseTsgZGVmZXJyaW5nCi0JCQkJKiB0aGlzIGlzIHRvbyBzbG93IHRvIG1lZXQgdGltaW5nIGNvbnN0cmFpbnRzCi0JCQkJKiB1bmRlciBsb2FkLgotCQkJCSoKLQkJCQkqIEluIElCU1MgbW9kZSB3ZSB1c2UgdGhpcyBpbnRlcnJ1cHQganVzdCB0bwotCQkJCSoga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBUQlRUICh0YXJnZXQgYmVhY29uCi0JCQkJKiB0cmFuc21pc3Npb24gdGltZSkgaW4gb3JkZXIgdG8gZGV0ZWN0IHdldGhlcgotCQkJCSogYXV0b21hdGljIFRTRiB1cGRhdGVzIGhhcHBlbmVkLgotCQkJCSovCi0JCQkJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJCQkJIC8qIFhYWDogb25seSBpZiBWRU9MIHN1cHBwb3J0ZWQgKi8KLQkJCQkJdTY0IHRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChhaCk7Ci0JCQkJCXNjLT5uZXh0dGJ0dCArPSBzYy0+YmludHZhbDsKLQkJCQkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19CRUFDT04sCi0JCQkJCQkgICJTV0JBIG5leHR0YnR0OiAleCBod190dTogJXggIgotCQkJCQkJICAiVFNGOiAlbGx4XG4iLAotCQkJCQkJICBzYy0+bmV4dHRidHQsCi0JCQkJCQkgIFRTRl9UT19UVSh0c2YpLAotCQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNwaW5fbG9jaygmc2MtPmJsb2NrKTsKLQkJCQkJYXRoNWtfYmVhY29uX3NlbmQoc2MpOwotCQkJCQlzcGluX3VubG9jaygmc2MtPmJsb2NrKTsKLQkJCQl9CisJCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPmJlYWNvbnRxKTsKIAkJCX0KIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9SWEVPTCkgewogCQkJCS8qCkBAIC0yNDU3LDYgKzI0NzUsNyBAQAogCQkJCQl8IEFSNUtfSU5UX1RYRVJSIHwgQVI1S19JTlRfVFhFT0wpKQogCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT50eHRxKTsKIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9CTUlTUykgeworCQkJCS8qIFRPRE8gKi8KIAkJCX0KIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9NSUIpIHsKIAkJCQkvKgpAQCAtMjQ5Niw3ICsyNTE1LDcgQEAKIAkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSksCiAJCXNjLT5jdXJjaGFuLT5od192YWx1ZSk7CiAKLQlpZiAoYXRoNWtfaHdfZ2V0X3JmX2dhaW4oYWgpID09IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFKSB7CisJaWYgKGF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShhaCkgPT0gQVI1S19SRkdBSU5fTkVFRF9DSEFOR0UpIHsKIAkJLyoKIAkJICogUmZnYWluIGlzIG91dCBvZiBib3VuZHMsIHJlc2V0IHRoZSBjaGlwCiAJCSAqIHRvIGxvYWQgbmV3IGdhaW4gdmFsdWVzLgpAQCAtMjUxNCwxMzAgKzI1MzMsNiBAQAogfQogCiAKLQotLyoqKioqKioqKioqKioqKlwKLSogTEVEIGZ1bmN0aW9ucyAqCi1cKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZAotYXRoNWtfbGVkX2VuYWJsZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWlmICh0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkgewotCQlhdGg1a19od19zZXRfZ3Bpb19vdXRwdXQoc2MtPmFoLCBzYy0+bGVkX3Bpbik7Ci0JCWF0aDVrX2xlZF9vZmYoc2MpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9vbihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCi0JCXJldHVybjsKLQlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCBzYy0+bGVkX29uKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlyZXR1cm47Ci0JYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCi0JZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQotewotCXN0cnVjdCBhdGg1a19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgYXRoNWtfbGVkLAotCQlsZWRfZGV2KTsKLQotCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpCi0JCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7Ci0JZWxzZQotCQlhdGg1a19sZWRfb24obGVkLT5zYyk7Ci19Ci0KLXN0YXRpYyBpbnQKLWF0aDVrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfbGVkICpsZWQsCi0JCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCi17Ci0JaW50IGVycjsKLQotCWxlZC0+c2MgPSBzYzsKLQlzdHJuY3B5KGxlZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSkpOwotCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOwotCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOwotCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDVrX2xlZF9icmlnaHRuZXNzX3NldDsKLQotCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcigmc2MtPnBkZXYtPmRldiwgJmxlZC0+bGVkX2Rldik7Ci0JaWYgKGVycikgewotCQlBVEg1S19XQVJOKHNjLCAiY291bGQgbm90IHJlZ2lzdGVyIExFRCAlc1xuIiwgbmFtZSk7Ci0JCWxlZC0+c2MgPSBOVUxMOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX2xlZCAqbGVkKQotewotCWlmICghbGVkLT5zYykKLQkJcmV0dXJuOwotCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmxlZF9kZXYpOwotCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7Ci0JbGVkLT5zYyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a191bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlhdGg1a191bnJlZ2lzdGVyX2xlZCgmc2MtPnJ4X2xlZCk7Ci0JYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT50eF9sZWQpOwotfQotCi0KLXN0YXRpYyBpbnQKLWF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7Ci0JY2hhciBuYW1lW0FUSDVLX0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKLQotCS8qCi0JICogQXV0by1lbmFibGUgc29mdCBsZWQgcHJvY2Vzc2luZyBmb3IgSUJNIGNhcmRzIGFuZCBmb3IKLQkgKiA1MjExIG1pbmlwY2kgY2FyZHMuCi0JICovCi0JaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjEyX0lCTSB8fAotCSAgICBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMSkgewotCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7Ci0JCXNjLT5sZWRfcGluID0gMDsKLQkJc2MtPmxlZF9vbiA9IDA7ICAvKiBhY3RpdmUgbG93ICovCi0JfQotCS8qIEVuYWJsZSBzb2Z0bGVkIG9uIFBJTjEgb24gSFAgQ29tcGFxIG5jNnh4LCBuYzQwMDAgJiBueDUwMDAgbGFwdG9wcyAqLwotCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09NUEFRKSB7Ci0JCV9fc2V0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKTsKLQkJc2MtPmxlZF9waW4gPSAxOwotCQlzYy0+bGVkX29uID0gMTsgIC8qIGFjdGl2ZSBoaWdoICovCi0JfQotCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCi0JCWdvdG8gb3V0OwotCi0JYXRoNWtfbGVkX2VuYWJsZShzYyk7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5yeF9sZWQsIG5hbWUsCi0JCWllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoaHcpKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjp0eCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnR4X2xlZCwgbmFtZSwKLQkJaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodykpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqXAogKiBNYWM4MDIxMSBmdW5jdGlvbnMgKgogXCoqKioqKioqKioqKioqKioqKioqLwpAQCAtMjY2Nyw3ICsyNTYyLDcgQEAKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgcGFkc2l6ZSkgewogCQkJQVRINUtfRVJSKHNjLCAidHggaGRybGVuIG5vdCAlJTQ6ICVkIG5vdCBlbm91Z2giCiAJCQkJICAiIGhlYWRyb29tIHRvIHBhZCAlZFxuIiwgaGRybGVuLCBwYWRzaXplKTsKLQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJCWdvdG8gZHJvcF9wYWNrZXQ7CiAJCX0KIAkJc2tiX3B1c2goc2tiLCBwYWRzaXplKTsKIAkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YStwYWRzaXplLCBoZHJsZW4pOwpAQCAtMjY3OCw3ICsyNTczLDcgQEAKIAkJQVRINUtfRVJSKHNjLCAibm8gZnVydGhlciB0eGJ1ZiBhdmFpbGFibGUsIGRyb3BwaW5nIHBhY2tldFxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT50eGJ1ZmxvY2ssIGZsYWdzKTsKIAkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQlnb3RvIGRyb3BfcGFja2V0OwogCX0KIAliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eGJ1Ziwgc3RydWN0IGF0aDVrX2J1ZiwgbGlzdCk7CiAJbGlzdF9kZWwoJmJmLT5saXN0KTsKQEAgLTI2OTUsMTAgKzI1OTAsMTIgQEAKIAkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHhidWYpOwogCQlzYy0+dHhidWZfbGVuKys7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT50eGJ1ZmxvY2ssIGZsYWdzKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJZ290byBkcm9wX3BhY2tldDsKIAl9CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAorZHJvcF9wYWNrZXQ6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0yNzIxLDEyICsyNjE4LDYgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JLyoKLQkgKiBUaGlzIGlzIG5lZWRlZCBvbmx5IHRvIHNldHVwIGluaXRpYWwgc3RhdGUKLQkgKiBidXQgaXQncyBiZXN0IGRvbmUgYWZ0ZXIgYSByZXNldC4KLQkgKi8KLQlhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChzYy0+YWgsIDApOwotCiAJcmV0ID0gYXRoNWtfcnhfc3RhcnQoc2MpOwogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc3RhcnQgcmVjdiBsb2dpY1xuIik7CkBAIC0yNzY2LDEyICsyNjU3LDEyIEBACiAKIHN0YXRpYyBpbnQgYXRoNWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JcmV0dXJuIGF0aDVrX2luaXQoaHctPnByaXYsIGZhbHNlKTsKKwlyZXR1cm4gYXRoNWtfaW5pdChody0+cHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDVrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JYXRoNWtfc3RvcF9odyhody0+cHJpdiwgZmFsc2UpOworCWF0aDVrX3N0b3BfaHcoaHctPnByaXYpOwogfQogCiBzdGF0aWMgaW50IGF0aDVrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0yODU2LDcgKzI3NDcsNyBAQAogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAJaWYgKHNjLT52aWYgIT0gdmlmKSB7CkBAIC0yODgyLDkgKzI3NzMsNyBAQAogCQl9CiAJCWF0aDVrX2JlYWNvbl91cGRhdGUoc2MsIGJlYWNvbik7CiAJfQotCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwogCi0JcmV0dXJuIGF0aDVrX3Jlc2V0X3dha2Uoc2MpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC0zMDIwLDggKzI5MDksOCBAQAogCiBzdGF0aWMgaW50CiBhdGg1a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCisJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCWludCByZXQgPSAwOwpAQCAtMzA0NCw3ICsyOTMzLDggQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTRVRfS0VZOgotCQlyZXQgPSBhdGg1a19od19zZXRfa2V5KHNjLT5haCwga2V5LT5rZXlpZHgsIGtleSwgYWRkcik7CisJCXJldCA9IGF0aDVrX2h3X3NldF9rZXkoc2MtPmFoLCBrZXktPmtleWlkeCwga2V5LAorCQkJCSAgICAgICBzdGEgPyBzdGEtPmFkZHIgOiBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0IHRoZSBrZXlcbiIpOwogCQkJZ290byB1bmxvY2s7CkBAIC0zMTA0LDYgKzI5OTQsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQKK2F0aDVrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCisJYXRoNWtfaHdfc2V0X3RzZjY0KHNjLT5haCwgdHNmKTsKK30KKworc3RhdGljIHZvaWQKIGF0aDVrX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmgKaW5kZXggZmFjYzYwZC4uODIyOTU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaApAQCAtMTEyLDcgKzExMiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzW0FUSF9DSEFOX01BWF07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlCXJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FSNUtfTUFYX1JBVEVTXTsKLQl1OAkJCXJhdGVfaWR4W0lFRUU4MDIxMV9OVU1fQkFORFNdW0FSNUtfTUFYX1JBVEVTXTsKKwlzOAkJCXJhdGVfaWR4W0lFRUU4MDIxMV9OVU1fQkFORFNdW0FSNUtfTUFYX1JBVEVTXTsKIAllbnVtIG5sODAyMTFfaWZ0eXBlCW9wbW9kZTsKIAlzdHJ1Y3QgYXRoNWtfaHcJCSphaDsJCS8qIEF0aGVyb3MgSFcgKi8KIApAQCAtMTQ4LDggKzE0OCw3IEBACiAJdTgJCQlic3NpZG1hc2tbRVRIX0FMRU5dOwogCiAJdW5zaWduZWQgaW50CQlsZWRfcGluLAkvKiBHUElPIHBpbiBmb3IgZHJpdmluZyBMRUQgKi8KLQkJCQlsZWRfb24sCQkvKiBwaW4gc2V0dGluZyBmb3IgTEVEIG9uICovCi0JCQkJbGVkX29mZjsJLyogb2ZmIHRpbWUgZm9yIGN1cnJlbnQgYmxpbmsgKi8KKwkJCQlsZWRfb247CQkvKiBwaW4gc2V0dGluZyBmb3IgTEVEIG9uICovCiAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcmVzdHE7CQkvKiByZXNldCB0YXNrbGV0ICovCiAKQEAgLTE3MCw2ICsxNjksNyBAQAogCXN0cnVjdCBhdGg1a19sZWQJdHhfbGVkOwkJLyogdHggbGVkICovCiAKIAlzcGlubG9ja190CQlibG9jazsJCS8qIHByb3RlY3RzIGJlYWNvbiAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAliZWFjb250cTsJLyogYmVhY29uIGludHIgdGFza2xldCAqLwogCXN0cnVjdCBhdGg1a19idWYJKmJidWY7CQkvKiBiZWFjb24gYnVmZmVyICovCiAJdW5zaWduZWQgaW50CQliaGFscSwJCS8qIFNXIHEgZm9yIG91dGdvaW5nIGJlYWNvbnMgKi8KIAkJCQlibWlzc2NvdW50LAkvKiBtaXNzZWQgYmVhY29uIHRyYW5zbWl0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jCmluZGV4IDE1MGY1ZWQuLjM2N2E2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9jYXBzLmMKQEAgLTg1LDcgKzg1LDggQEAKIAkJLyogRW5hYmxlICA4MDIuMTFiIGlmIGEgMkdIeiBjYXBhYmxlIHJhZGlvICgyMTExLzUxMTIpIGlzCiAJCSAqIGNvbm5lY3RlZCAqLwogCQlpZiAoQVI1S19FRVBST01fSERSXzExQihlZV9oZWFkZXIpIHx8Ci0JCQkJQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpKSB7CisJCSAgICAoQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpICYmCisJCSAgICAgYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTEpKSB7CiAJCQkvKiAyMzEyICovCiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV8yZ2h6X21pbiA9IDI0MTI7CiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV8yZ2h6X21heCA9IDI3MzI7CkBAIC05NCw3ICs5NSw4IEBACiAJCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUIsCiAJCQkJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKIAotCQkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSkKKwkJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFHKGVlX2hlYWRlcikgJiYKKwkJCSAgICBhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMSkKIAkJCQlfX3NldF9iaXQoQVI1S19NT0RFXzExRywKIAkJCQkJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYwppbmRleCBjY2FlYjVjLi45NzcwYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmMKQEAgLTgyLDE0ICs4MiwxNCBAQAogLyogZGVidWdmczogcmVnaXN0ZXJzICovCiAKIHN0cnVjdCByZWcgewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgYWRkcjsKIH07CiAKICNkZWZpbmUgUkVHX1NUUlVDVF9JTklUKHIpIHsgI3IsIHIgfQogCiAvKiBqdXN0IGEgZmV3IHJhbmRvbSByZWdpc3RlcnMsIG1pZ2h0IHdhbnQgdG8gYWRkIG1vcmUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVnIHJlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnIHJlZ3NbXSA9IHsKIAlSRUdfU1RSVUNUX0lOSVQoQVI1S19DUiksCiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfUlhEUCksCiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfQ0ZHKSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiBzdGF0aWMgdm9pZCAqcmVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IEFSUkFZX1NJWkUocmVncykgPyAmcmVnc1sqcG9zXSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gKHZvaWQgKikmcmVnc1sqcG9zXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQpAQCAtMTUzLDcgKzE1Myw3IEBACiBzdGF0aWMgdm9pZCAqcmVnX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQogewogCSsrKnBvczsKLQlyZXR1cm4gKnBvcyA8IEFSUkFZX1NJWkUocmVncykgPyAmcmVnc1sqcG9zXSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gKHZvaWQgKikmcmVnc1sqcG9zXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgcmVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnApCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWdpc3Rlcl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWdpc3Rlcl9zZXFfb3BzID0gewogCS5zdGFydCA9IHJlZ19zdGFydCwKIAkubmV4dCAgPSByZWdfbmV4dCwKIAkuc3RvcCAgPSByZWdfc3RvcCwKQEAgLTE5Myw0MyArMTkzLDYgQEAKIH07CiAKIAotLyogZGVidWdmczogVFNGICovCi0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90c2Yoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzEwMF07Ci0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JTAxNmxseFxuIiwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpYXRoNWtfaHdfZ2V0X3RzZjY0KHNjLT5haCkpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMTkpOwotfQotCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3RzZihzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMjBdOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgbWluKGNvdW50LCBzaXplb2YoYnVmKSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChzdHJuY21wKGJ1ZiwgInJlc2V0IiwgNSkgPT0gMCkgewotCQlhdGg1a19od19yZXNldF90c2Yoc2MtPmFoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWdmcyByZXNldCBUU0ZcbiIpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdHNmID0gewotCS5yZWFkID0gcmVhZF9maWxlX3RzZiwKLQkud3JpdGUgPSB3cml0ZV9maWxlX3RzZiwKLQkub3BlbiA9IGF0aDVrX2RlYnVnZnNfb3BlbiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLX07Ci0KLQogLyogZGVidWdmczogYmVhY29ucyAqLwogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfYmVhY29uKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0zMjcsNyArMjkwLDcgQEAKIAogLyogZGVidWdmczogZGVidWcgbGV2ZWwgKi8KIAotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAllbnVtIGF0aDVrX2RlYnVnX2xldmVsIGxldmVsOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqZGVzYzsKQEAgLTQyMyw5ICszODYsNiBAQAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlZ2lzdGVycyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSVJVR08sCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfcmVnaXN0ZXJzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3RzZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRzZiIsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3RzZik7Ci0KIAlzYy0+ZGVidWcuZGVidWdmc19iZWFjb24gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc19iZWFjb24pOwogCkBAIC00NDQsNyArNDA0LDYgQEAKIHsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kZWJ1Zyk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVnaXN0ZXJzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc190c2YpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbik7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaAppbmRleCBmZmM1MjkzLi42NmY2OWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmgKQEAgLTcyLDcgKzcyLDYgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19waHlkaXI7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfZGVidWc7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcmVnaXN0ZXJzOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3RzZjsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19iZWFjb247CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcmVzZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVzYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVzYy5jCmluZGV4IGI0MGE5MjguLmRjMzBhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Rlc2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZXNjLmMKQEAgLTE5NCw2ICsxOTQsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJdHhfcG93ZXIgKz0gYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldDsKKwlpZiAodHhfcG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpCisJCXR4X3Bvd2VyID0gQVI1S19UVU5FX01BWF9UWFBPV0VSOworCiAJLyogQ2xlYXIgZGVzY3JpcHRvciAqLwogCW1lbXNldCgmZGVzYy0+dWQuZHNfdHg1MjEyLCAwLCBzaXplb2Yoc3RydWN0IGF0aDVrX2h3XzUyMTJfdHhfZGVzYykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5jCmluZGV4IDFjYjdlZGYuLmMwZmIzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwOCBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC05OCwxMSArOTgsNiBAQAogCWludCByZXQ7CiAJdTE2IHZhbDsKIAotCS8qIEluaXRpYWwgVFggdGhlcm1hbCBhZGp1c3RtZW50IHZhbHVlcyAqLwotCWVlLT5lZV90eF9jbGlwID0gNDsKLQllZS0+ZWVfcHdkXzg0ID0gZWUtPmVlX3B3ZF85MCA9IDE7Ci0JZWUtPmVlX2dhaW5fc2VsZWN0ID0gMTsKLQogCS8qCiAJICogUmVhZCB2YWx1ZXMgZnJvbSBFRVBST00gYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGNhcGFiaWxpdHkgc3RydWN0dXJlCiAJICovCkBAIC0xMzcsNiArMTMyLDE4IEBACiAJaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8wKSB7CiAJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MwLCBlZV9taXNjMCk7CiAJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MxLCBlZV9taXNjMSk7CisKKwkJLyogWFhYOiBEb24ndCBrbm93IHdoaWNoIHZlcnNpb25zIGluY2x1ZGUgdGhlc2UgdHdvICovCisJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MyLCBlZV9taXNjMik7CisKKwkJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8zKQorCQkJQVI1S19FRVBST01fUkVBRF9IRFIoQVI1S19FRVBST01fTUlTQzMsIGVlX21pc2MzKTsKKworCQlpZiAoZWUtPmVlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzApIHsKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0M0LCBlZV9taXNjNCk7CisJCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDNSwgZWVfbWlzYzUpOworCQkJQVI1S19FRVBST01fUkVBRF9IRFIoQVI1S19FRVBST01fTUlTQzYsIGVlX21pc2M2KTsKKwkJfQogCX0KIAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA8IEFSNUtfRUVQUk9NX1ZFUlNJT05fM18zKSB7CkBAIC0xOTIsNyArMTk5LDcgQEAKIAogCS8qIEdldCBhbnRlbm5hIG1vZGVzICovCiAJYWgtPmFoX2FudGVubmFbbW9kZV1bMF0gPQotCSAgICAoZWUtPmVlX2FudF9jb250cm9sW21vZGVdWzBdIDw8IDQpIHwgMHgxOworCSAgICAoZWUtPmVlX2FudF9jb250cm9sW21vZGVdWzBdIDw8IDQpOwogCWFoLT5haF9hbnRlbm5hW21vZGVdW0FSNUtfQU5UX0ZJWEVEX0FdID0KIAkgICAgIGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVsxXSAJfAogCSAgICAoZWUtPmVlX2FudF9jb250cm9sW21vZGVdWzJdIDw8IDYpIAl8CkBAIC0yMTMsNyArMjIwLDggQEAKIH0KIAogLyoKLSAqIFJlYWQgc3VwcG9ydGVkIG1vZGVzIGZyb20gZWVwcm9tCisgKiBSZWFkIHN1cHBvcnRlZCBtb2RlcyBhbmQgc29tZSBtb2RlLXNwZWNpZmljIGNhbGlicmF0aW9uIGRhdGEKKyAqIGZyb20gZWVwcm9tCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbW9kZXMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyICpvZmZzZXQsCiAJCXVuc2lnbmVkIGludCBtb2RlKQpAQCAtMjI4LDIyICsyMzYsMjIgQEAKIAllZS0+ZWVfYWRjX2Rlc2lyZWRfc2l6ZVttb2RlXQk9IChzOCkoKHZhbCA+PiA4KSAmIDB4ZmYpOwogCXN3aXRjaChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKLQkJZWUtPmVlX29iW21vZGVdWzNdCQk9ICh2YWwgPj4gNSkgJiAweDc7Ci0JCWVlLT5lZV9kYlttb2RlXVszXQkJPSAodmFsID4+IDIpICYgMHg3OwotCQllZS0+ZWVfb2JbbW9kZV1bMl0JCT0gKHZhbCA8PCAxKSAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzNdCT0gKHZhbCA+PiA1KSAmIDB4NzsKKwkJZWUtPmVlX2RiW21vZGVdWzNdCT0gKHZhbCA+PiAyKSAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzJdCT0gKHZhbCA8PCAxKSAmIDB4NzsKIAogCQlBUjVLX0VFUFJPTV9SRUFEKG8rKywgdmFsKTsKLQkJZWUtPmVlX29iW21vZGVdWzJdCQl8PSAodmFsID4+IDE1KSAmIDB4MTsKLQkJZWUtPmVlX2RiW21vZGVdWzJdCQk9ICh2YWwgPj4gMTIpICYgMHg3OwotCQllZS0+ZWVfb2JbbW9kZV1bMV0JCT0gKHZhbCA+PiA5KSAmIDB4NzsKLQkJZWUtPmVlX2RiW21vZGVdWzFdCQk9ICh2YWwgPj4gNikgJiAweDc7Ci0JCWVlLT5lZV9vYlttb2RlXVswXQkJPSAodmFsID4+IDMpICYgMHg3OwotCQllZS0+ZWVfZGJbbW9kZV1bMF0JCT0gdmFsICYgMHg3OworCQllZS0+ZWVfb2JbbW9kZV1bMl0JfD0gKHZhbCA+PiAxNSkgJiAweDE7CisJCWVlLT5lZV9kYlttb2RlXVsyXQk9ICh2YWwgPj4gMTIpICYgMHg3OworCQllZS0+ZWVfb2JbbW9kZV1bMV0JPSAodmFsID4+IDkpICYgMHg3OworCQllZS0+ZWVfZGJbbW9kZV1bMV0JPSAodmFsID4+IDYpICYgMHg3OworCQllZS0+ZWVfb2JbbW9kZV1bMF0JPSAodmFsID4+IDMpICYgMHg3OworCQllZS0+ZWVfZGJbbW9kZV1bMF0JPSB2YWwgJiAweDc7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUc6CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKLQkJZWUtPmVlX29iW21vZGVdWzFdCQk9ICh2YWwgPj4gNCkgJiAweDc7Ci0JCWVlLT5lZV9kYlttb2RlXVsxXQkJPSB2YWwgJiAweDc7CisJCWVlLT5lZV9vYlttb2RlXVsxXQk9ICh2YWwgPj4gNCkgJiAweDc7CisJCWVlLT5lZV9kYlttb2RlXVsxXQk9IHZhbCAmIDB4NzsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMTUsNiArMzIzLDkgQEAKIAlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMCkKIAkJZ290byBkb25lOwogCisJLyogTm90ZTogPj0gdjUgaGF2ZSBiZyBmcmVxIHBpZXJzIG9uIGFub3RoZXIgbG9jYXRpb24KKwkgKiBzbyB0aGVzZSBmcmVxIHBpZXJzIGFyZSBpZ25vcmVkIGZvciA+PSB2NSAoc2hvdWxkIGJlIDB4ZmYKKwkgKiBhbnl3YXkpICovCiAJc3dpdGNoKG1vZGUpIHsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFBOgogCQlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMSkKQEAgLTQ0Miw3ICs0NTMsNyBAQAogCXJldHVybiAwOwogfQogCi0KKy8qIFJlYWQgbW9kZS1zcGVjaWZpYyBkYXRhIChleGNlcHQgcG93ZXIgY2FsaWJyYXRpb24gZGF0YSkgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9pbml0X21vZGVzKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CkBAIC00ODgsNTYgKzQ5OSw0NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWF0aDVrX2dldF9wY2RhY19pbnRlcmNlcHRzKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IG1pbiwgdTggbWF4LCB1OCAqdnApCi17Ci0JY29uc3Qgc3RhdGljIHUxNiBpbnRlcmNlcHRzM1tdID0KLQkJeyAwLCA1LCAxMCwgMjAsIDMwLCA1MCwgNzAsIDg1LCA5MCwgOTUsIDEwMCB9OwotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNfMltdID0KLQkJeyAwLCAxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODAsIDkwLCAxMDAgfTsKLQljb25zdCB1MTYgKmlwOwotCWludCBpOwotCi0JaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fM18yKQotCQlpcCA9IGludGVyY2VwdHMzXzI7Ci0JZWxzZQotCQlpcCA9IGludGVyY2VwdHMzOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW50ZXJjZXB0czMpOyBpKyspCi0JCSp2cCsrID0gKGlwW2ldICogbWF4ICsgKDEwMCAtIGlwW2ldKSAqIG1pbikgLyAxMDA7Ci19Ci0KKy8qIFJlYWQgdGhlIGZyZXF1ZW5jeSBwaWVycyBmb3IgZWFjaCBtb2RlIChtb3N0bHkgdXNlZCBvbiBuZXdlciBlZXByb21zIHdpdGggMHhmZgorICogZnJlcXVlbmN5IG1hc2spICovCiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KHN0cnVjdCBhdGg1a19odyAqYWgsIGludCAqb2Zmc2V0LCBpbnQgbWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGMsIHU4ICpjb3VudCkKKwkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGMsIHVuc2lnbmVkIGludCBtb2RlKQogeworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCWludCBvID0gKm9mZnNldDsKIAlpbnQgaSA9IDA7Ci0JdTggZjEsIGYyOworCXU4IGZyZXExLCBmcmVxMjsKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKKwllZS0+ZWVfbl9waWVyc1ttb2RlXSA9IDA7CiAJd2hpbGUoaSA8IG1heCkgewogCQlBUjVLX0VFUFJPTV9SRUFEKG8rKywgdmFsKTsKIAotCQlmMSA9ICh2YWwgPj4gOCkgJiAweGZmOwotCQlmMiA9IHZhbCAmIDB4ZmY7Ci0KLQkJaWYgKGYxKQotCQkJcGNbaSsrXS5mcmVxID0gZjE7Ci0KLQkJaWYgKGYyKQotCQkJcGNbaSsrXS5mcmVxID0gZjI7Ci0KLQkJaWYgKCFmMSB8fCAhZjIpCisJCWZyZXExID0gdmFsICYgMHhmZjsKKwkJaWYgKCFmcmVxMSkKIAkJCWJyZWFrOworCisJCXBjW2krK10uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJCQlmcmVxMSwgbW9kZSk7CisJCWVlLT5lZV9uX3BpZXJzW21vZGVdKys7CisKKwkJZnJlcTIgPSAodmFsID4+IDgpICYgMHhmZjsKKwkJaWYgKCFmcmVxMikKKwkJCWJyZWFrOworCisJCXBjW2krK10uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJCQlmcmVxMiwgbW9kZSk7CisJCWVlLT5lZV9uX3BpZXJzW21vZGVdKys7CiAJfQorCisJLyogcmV0dXJuIG5ldyBvZmZzZXQgKi8KIAkqb2Zmc2V0ID0gbzsKLQkqY291bnQgPSBpOwogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlYWQgZnJlcXVlbmN5IHBpZXJzIGZvciA4MDIuMTFhICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21faW5pdF8xMWFfcGNhbF9mcmVxKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBvZmZzZXQpCiB7CkBAIC01NTAsNyArNTUyLDcgQEAKIAlpZiAoZWUtPmVlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl8zXzMpIHsKIAkJYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KGFoLCAmb2Zmc2V0LAogCQkJQVI1S19FRVBST01fTl81R0haX0NIQU4sIHBjYWwsCi0JCQkmZWUtPmVlX25fcGllcnNbQVI1S19FRVBST01fTU9ERV8xMUFdKTsKKwkJCUFSNUtfRUVQUk9NX01PREVfMTFBKTsKIAl9IGVsc2UgewogCQltYXNrID0gQVI1S19FRVBST01fRlJFUV9NKGFoLT5haF9lZV92ZXJzaW9uKTsKIApAQCAtNTc3LDIzICs1NzksMjUgQEAKIAogCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwogCQlwY2FsWzldLmZyZXEgfD0gKHZhbCA+PiAxMCkgJiAweDNmOwotCQllZS0+ZWVfbl9waWVyc1tBUjVLX0VFUFJPTV9NT0RFXzExQV0gPSAxMDsKLQl9CiAKLQlmb3IoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTjsgaSArPSAxKSB7Ci0JCXBjYWxbaV0uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJLyogRml4ZWQgbnVtYmVyIG9mIHBpZXJzICovCisJCWVlLT5lZV9uX3BpZXJzW0FSNUtfRUVQUk9NX01PREVfMTFBXSA9IDEwOworCisJCWZvciAoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTjsgaSsrKSB7CisJCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCiAJCQkJcGNhbFtpXS5mcmVxLCBBUjVLX0VFUFJPTV9NT0RFXzExQSk7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorLyogUmVhZCBmcmVxdWVuY3kgcGllcnMgZm9yIDgwMi4xMWJnIG9uIGVlcHJvbSB2ZXJzaW9ucyA+PSA1IGFuZCBlZW1hcCA+PSAyICovCiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfZWVwcm9tX2luaXRfMTFiZ18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBtb2RlLCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNhbDsKLQlpbnQgaTsKIAogCXN3aXRjaChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKQEAgLTYwOCwyMyArNjEyLDEzNCBAQAogCiAJYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KGFoLCAmb2Zmc2V0LAogCQlBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzLCBwY2FsLAotCQkmZWUtPmVlX25fcGllcnNbbW9kZV0pOwotCWZvcihpID0gMDsgaSA8IEFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTM7IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCi0JCQkJcGNhbFtpXS5mcmVxLCBtb2RlKTsKKwkJbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgcG93ZXIgY2FsaWJyYXRpb24gZm9yIFJGNTExMSBjaGlwcworICoKKyAqIEZvciBSRjUxMTEgd2UgaGF2ZSBhbiBYUEQgLWVYdGVybmFsIFBvd2VyIERldGVjdG9yLSBjdXJ2ZQorICogZm9yIGVhY2ggY2FsaWJyYXRlZCBjaGFubmVsLiBFYWNoIGN1cnZlIGhhcyAwLDVkQiBQb3dlciBzdGVwcworICogb24geCBheGlzIGFuZCBQQ0RBQyBzdGVwcyAob2Zmc2V0cykgb24geSBheGlzIGFuZCBsb29rcyBsaWtlIGFuCisgKiBleHBvbmVudGlhbCBmdW5jdGlvbi4gVG8gcmVjcmVhdGUgdGhlIGN1cnZlIHdlIHJlYWQgMTEgcG9pbnRzCisgKiBoZXJlIGFuZCBpbnRlcnBvbGF0ZSBsYXRlci4KKyAqLworCisvKiBVc2VkIHRvIG1hdGNoIFBDREFDIHN0ZXBzIHdpdGggcG93ZXIgdmFsdWVzIG9uIFJGNTExMSBjaGlwcworICogKGVlcHJvbSB2ZXJzaW9ucyA8IDQpLiBGb3IgUkY1MTExIHdlIGhhdmUgMTEgcHJlLWRlZmluZWQgUENEQUMKKyAqIHN0ZXBzIHRoYXQgbWF0Y2ggd2l0aCB0aGUgcG93ZXIgdmFsdWVzIHdlIHJlYWQgZnJvbSBlZXByb20uIE9uCisgKiBvbGRlciBlZXByb20gdmVyc2lvbnMgKDwgMy4yKSB0aGVzZSBzdGVwcyBhcmUgZXF1YWx5IHNwYWNlZCBhdAorICogMTAlIG9mIHRoZSBwY2RhYyBjdXJ2ZSAtdW50aWwgdGhlIGN1cnZlIHJlYWNoZXMgaXQncyBtYXhpbXVtLQorICogKDExIHN0ZXBzIGZyb20gMCB0byAxMDAlKSBidXQgb24gbmV3ZXIgZWVwcm9tIHZlcnNpb25zICg+PSAzLjIpCisgKiB0aGVzZSAxMSBzdGVwcyBhcmUgc3BhY2VkIGluIGEgZGlmZmVyZW50IHdheS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiB0aGUgcGNkYWMgc3RlcHMgYmFzZWQgb24gZWVwcm9tIHZlcnNpb24gYW5kIGN1cnZlIG1pbi9tYXggc28gdGhhdCB3ZQorICogY2FuIGhhdmUgcGNkYWMvcHdyIHBvaW50cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCithdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtaW4sIHU4IG1heCwgdTggKnZwKQoreworCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNbXSA9CisJCXsgMCwgNSwgMTAsIDIwLCAzMCwgNTAsIDcwLCA4NSwgOTAsIDk1LCAxMDAgfTsKKwljb25zdCBzdGF0aWMgdTE2IGludGVyY2VwdHMzXzJbXSA9CisJCXsgMCwgMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwIH07CisJY29uc3QgdTE2ICppcDsKKwlpbnQgaTsKKworCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMikKKwkJaXAgPSBpbnRlcmNlcHRzM18yOworCWVsc2UKKwkJaXAgPSBpbnRlcmNlcHRzMzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGVyY2VwdHMzKTsgaSsrKQorCQl2cFtpXSA9IChpcFtpXSAqIG1heCArICgxMDAgLSBpcFtpXSkgKiBtaW4pIC8gMTAwOworfQorCisvKiBDb252ZXJ0IFJGNTExMSBzcGVjaWZpYyBkYXRhIHRvIGdlbmVyaWMgcmF3IGRhdGEKKyAqIHVzZWQgYnkgaW50ZXJwb2xhdGlvbiBjb2RlICovCitzdGF0aWMgaW50CithdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fNTExMShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbW9kZSwKKwkJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmNoaW5mbykKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmY1MTExICpwY2luZm87CisJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZDsKKwl1OCBwaWVyLCBwb2ludCwgaWR4OworCXU4ICpwZGdhaW5faWR4ID0gZWUtPmVlX3BkY190b19pZHhbbW9kZV07CisKKwkvKiBGaWxsIHJhdyBkYXRhIGZvciBlYWNoIGNhbGlicmF0aW9uIHBpZXIgKi8KKwlmb3IgKHBpZXIgPSAwOyBwaWVyIDwgZWUtPmVlX25fcGllcnNbbW9kZV07IHBpZXIrKykgeworCisJCXBjaW5mbyA9ICZjaGluZm9bcGllcl0ucmY1MTExX2luZm87CisKKwkJLyogQWxsb2NhdGUgcGRfY3VydmVzIGZvciB0aGlzIGNhbCBwaWVyICovCisJCWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMgPQorCQkJa2NhbGxvYyhBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUywKKwkJCQlzaXplb2Yoc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvKSwKKwkJCQlHRlBfS0VSTkVMKTsKKworCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkvKiBPbmx5IG9uZSBjdXJ2ZSBmb3IgUkY1MTExCisJCSAqIGZpbmQgb3V0IHdoaWNoIG9uZSBhbmQgcGxhY2UKKwkJICogaW4gaW4gcGRfY3VydmVzLgorCQkgKiBOb3RlOiBlZV94X2dhaW4gaXMgcmV2ZXJzZWQgaGVyZSAqLworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTOyBpZHgrKykgeworCisJCQlpZiAoISgoZWUtPmVlX3hfZ2Fpblttb2RlXSA+PiBpZHgpICYgMHgxKSkgeworCQkJCXBkZ2Fpbl9pZHhbMF0gPSBpZHg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQllZS0+ZWVfcGRfZ2FpbnNbbW9kZV0gPSAxOworCisJCXBkID0gJmNoaW5mb1twaWVyXS5wZF9jdXJ2ZXNbaWR4XTsKKworCQlwZC0+cGRfcG9pbnRzID0gQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTE7CisKKwkJLyogQWxsb2NhdGUgcGQgcG9pbnRzIGZvciB0aGlzIGN1cnZlICovCisJCXBkLT5wZF9zdGVwID0ga2NhbGxvYyhBUjVLX0VFUFJPTV9OX1BXUl9QT0lOVFNfNTExMSwKKwkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGQtPnBkX3N0ZXApCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhBUjVLX0VFUFJPTV9OX1BXUl9QT0lOVFNfNTExMSwKKwkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOworCQlpZiAoIXBkLT5wZF9wd3IpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCSAqIChjb252ZXJ0IHBvd2VyIHRvIDAuMjVkQiB1bml0cworCQkgKiBmb3IgUkY1MTEyIGNvbWJhdGliaWxpdHkpICovCisJCWZvciAocG9pbnQgPSAwOyBwb2ludCA8IHBkLT5wZF9wb2ludHM7IHBvaW50KyspIHsKKworCQkJLyogQWJzb2x1dGUgdmFsdWVzICovCisJCQlwZC0+cGRfcHdyW3BvaW50XSA9IDIgKiBwY2luZm8tPnB3cltwb2ludF07CisKKwkJCS8qIEFscmVhZHkgc29ydGVkICovCisJCQlwZC0+cGRfc3RlcFtwb2ludF0gPSBwY2luZm8tPnBjZGFjW3BvaW50XTsKKwkJfQorCisJCS8qIFNldCBtaW4vbWF4IHB3ciAqLworCQljaGluZm9bcGllcl0ubWluX3B3ciA9IHBkLT5wZF9wd3JbMF07CisJCWNoaW5mb1twaWVyXS5tYXhfcHdyID0gcGQtPnBkX3B3clsxMF07CisKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotCisvKiBQYXJzZSBFRVBST00gZGF0YSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzUxMTEoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpwY2FsOwogCWludCBvZmZzZXQsIHJldDsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAl1MTYgdmFsOwogCiAJb2Zmc2V0ID0gQVI1S19FRVBST01fR1JPVVBTX1NUQVJUKGVlLT5lZV92ZXJzaW9uKTsKQEAgLTcwNCwyNiArODE5LDE2NyBAQAogCiAJCWF0aDVrX2dldF9wY2RhY19pbnRlcmNlcHRzKGFoLCBjZGF0YS0+cGNkYWNfbWluLAogCQkJY2RhdGEtPnBjZGFjX21heCwgY2RhdGEtPnBjZGFjKTsKKwl9CiAKLQkJZm9yIChqID0gMDsgaiA8IEFSNUtfRUVQUk9NX05fUENEQUM7IGorKykgewotCQkJY2RhdGEtPnB3cltqXSA9ICh1MTYpCi0JCQkJKEFSNUtfRUVQUk9NX1BPV0VSX1NURVAgKiBjZGF0YS0+cHdyW2pdKTsKKwlyZXR1cm4gYXRoNWtfZWVwcm9tX2NvbnZlcnRfcGNhbF9pbmZvXzUxMTEoYWgsIG1vZGUsIHBjYWwpOworfQorCisKKy8qCisgKiBSZWFkIHBvd2VyIGNhbGlicmF0aW9uIGZvciBSRjUxMTIgY2hpcHMKKyAqCisgKiBGb3IgUkY1MTEyIHdlIGhhdmUgNCBYUEQgLWVYdGVybmFsIFBvd2VyIERldGVjdG9yLSBjdXJ2ZXMKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbCBvbiAwLCAtNiwgLTEyIGFuZCAtMThkYm0gYnV0IHdlIG9ubHkKKyAqIHVzZSB0aGUgaGlnaGVyICgzKSBhbmQgdGhlIGxvd2VyICgwKSBjdXJ2ZXMuIEVhY2ggY3VydmUgaGFzIDAuNWRCCisgKiBwb3dlciBzdGVwcyBvbiB4IGF4aXMgYW5kIFBDREFDIHN0ZXBzIG9uIHkgYXhpcyBhbmQgbG9va3MgbGlrZSBhCisgKiBsaW5lYXIgZnVuY3Rpb24uIFRvIHJlY3JlYXRlIHRoZSBjdXJ2ZSBhbmQgcGFzcyB0aGUgcG93ZXIgdmFsdWVzCisgKiBvbiBodywgd2UgcmVhZCA0IHBvaW50cyBmb3IgeHBkIDAgKGxvd2VyIGdhaW4gLT4gbWF4IHBvd2VyKQorICogYW5kIDMgcG9pbnRzIGZvciB4cGQgMyAoaGlnaGVyIGdhaW4gLT4gbG93ZXIgcG93ZXIpIGhlcmUgYW5kCisgKiBpbnRlcnBvbGF0ZSBsYXRlci4KKyAqCisgKiBOb3RlOiBNYW55IHZlbmRvcnMganVzdCB1c2UgeHBkIDAgc28geHBkIDMgaXMgemVyb2VkLgorICovCisKKy8qIENvbnZlcnQgUkY1MTEyIHNwZWNpZmljIGRhdGEgdG8gZ2VuZXJpYyByYXcgZGF0YQorICogdXNlZCBieSBpbnRlcnBvbGF0aW9uIGNvZGUgKi8KK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb181MTEyKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlLAorCQkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjUxMTIgKnBjaW5mbzsKKwl1OCAqcGRnYWluX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W21vZGVdOworCXVuc2lnbmVkIGludCBwaWVyLCBwZGcsIHBvaW50OworCisJLyogRmlsbCByYXcgZGF0YSBmb3IgZWFjaCBjYWxpYnJhdGlvbiBwaWVyICovCisJZm9yIChwaWVyID0gMDsgcGllciA8IGVlLT5lZV9uX3BpZXJzW21vZGVdOyBwaWVyKyspIHsKKworCQlwY2luZm8gPSAmY2hpbmZvW3BpZXJdLnJmNTExMl9pbmZvOworCisJCS8qIEFsbG9jYXRlIHBkX2N1cnZlcyBmb3IgdGhpcyBjYWwgcGllciAqLworCQljaGluZm9bcGllcl0ucGRfY3VydmVzID0KKwkJCQlrY2FsbG9jKEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTLAorCQkJCQlzaXplb2Yoc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFjaGluZm9bcGllcl0ucGRfY3VydmVzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogRmlsbCBwZF9jdXJ2ZXMgKi8KKwkJZm9yIChwZGcgPSAwOyBwZGcgPCBlZS0+ZWVfcGRfZ2FpbnNbbW9kZV07IHBkZysrKSB7CisKKwkJCXU4IGlkeCA9IHBkZ2Fpbl9pZHhbcGRnXTsKKwkJCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQgPQorCQkJCQkmY2hpbmZvW3BpZXJdLnBkX2N1cnZlc1tpZHhdOworCisJCQkvKiBMb3dlc3QgZ2FpbiBjdXJ2ZSAobWF4IHBvd2VyKSAqLworCQkJaWYgKHBkZyA9PSAwKSB7CisJCQkJLyogT25lIG1vcmUgcG9pbnQgZm9yIGJldHRlciBhY2N1cmFjeSAqLworCQkJCXBkLT5wZF9wb2ludHMgPSBBUjVLX0VFUFJPTV9OX1hQRDBfUE9JTlRTOworCisJCQkJLyogQWxsb2NhdGUgcGQgcG9pbnRzIGZvciB0aGlzIGN1cnZlICovCisJCQkJcGQtPnBkX3N0ZXAgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKKworCQkJCWlmICghcGQtPnBkX3N0ZXApCisJCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkJcGQtPnBkX3B3ciA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKworCQkJCWlmICghcGQtPnBkX3B3cikKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisKKworCQkJCS8qIEZpbGwgcmF3IGRhdGFzZXQKKwkJCQkgKiAoYWxsIHBvd2VyIGxldmVscyBhcmUgaW4gMC4yNWRCIHVuaXRzKSAqLworCQkJCXBkLT5wZF9zdGVwWzBdID0gcGNpbmZvLT5wY2RhY194MFswXTsKKwkJCQlwZC0+cGRfcHdyWzBdID0gcGNpbmZvLT5wd3JfeDBbMF07CisKKwkJCQlmb3IgKHBvaW50ID0gMTsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOworCQkJCXBvaW50KyspIHsKKwkJCQkJLyogQWJzb2x1dGUgdmFsdWVzICovCisJCQkJCXBkLT5wZF9wd3JbcG9pbnRdID0KKwkJCQkJCXBjaW5mby0+cHdyX3gwW3BvaW50XTsKKworCQkJCQkvKiBEZWx0YXMgKi8KKwkJCQkJcGQtPnBkX3N0ZXBbcG9pbnRdID0KKwkJCQkJCXBkLT5wZF9zdGVwW3BvaW50IC0gMV0gKworCQkJCQkJcGNpbmZvLT5wY2RhY194MFtwb2ludF07CisJCQkJfQorCisJCQkJLyogU2V0IG1pbiBwb3dlciBmb3IgdGhpcyBmcmVxdWVuY3kgKi8KKwkJCQljaGluZm9bcGllcl0ubWluX3B3ciA9IHBkLT5wZF9wd3JbMF07CisKKwkJCS8qIEhpZ2hlc3QgZ2FpbiBjdXJ2ZSAobWluIHBvd2VyKSAqLworCQkJfSBlbHNlIGlmIChwZGcgPT0gMSkgeworCisJCQkJcGQtPnBkX3BvaW50cyA9IEFSNUtfRUVQUk9NX05fWFBEM19QT0lOVFM7CisKKwkJCQkvKiBBbGxvY2F0ZSBwZCBwb2ludHMgZm9yIHRoaXMgY3VydmUgKi8KKwkJCQlwZC0+cGRfc3RlcCA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJCXNpemVvZih1OCksIEdGUF9LRVJORUwpOworCisJCQkJaWYgKCFwZC0+cGRfc3RlcCkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAorCQkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOworCisJCQkJaWYgKCFwZC0+cGRfcHdyKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJCS8qIEZpbGwgcmF3IGRhdGFzZXQKKwkJCQkgKiAoYWxsIHBvd2VyIGxldmVscyBhcmUgaW4gMC4yNWRCIHVuaXRzKSAqLworCQkJCWZvciAocG9pbnQgPSAwOyBwb2ludCA8IHBkLT5wZF9wb2ludHM7CisJCQkJcG9pbnQrKykgeworCQkJCQkvKiBBYnNvbHV0ZSB2YWx1ZXMgKi8KKwkJCQkJcGQtPnBkX3B3cltwb2ludF0gPQorCQkJCQkJcGNpbmZvLT5wd3JfeDNbcG9pbnRdOworCisJCQkJCS8qIEZpeGVkIHBvaW50cyAqLworCQkJCQlwZC0+cGRfc3RlcFtwb2ludF0gPQorCQkJCQkJcGNpbmZvLT5wY2RhY194M1twb2ludF07CisJCQkJfQorCisJCQkJLyogU2luY2Ugd2UgaGF2ZSBhIGhpZ2hlciBnYWluIGN1cnZlCisJCQkJICogb3ZlcnJpZGUgbWluIHBvd2VyICovCisJCQkJY2hpbmZvW3BpZXJdLm1pbl9wd3IgPSBwZC0+cGRfcHdyWzBdOworCQkJfQogCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFBhcnNlIEVFUFJPTSBkYXRhICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9wY2FsX2luZm9fNTExMihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmY1MTEyICpjaGFuX3BjYWxfaW5mbzsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmdlbl9jaGFuX2luZm87CisJdTggKnBkZ2Fpbl9pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFttb2RlXTsKIAl1MzIgb2Zmc2V0OwotCXVuc2lnbmVkIGludCBpLCBjOworCXU4IGksIGM7CiAJdTE2IHZhbDsKIAlpbnQgcmV0OworCXU4IHBkX2dhaW5zID0gMDsKKworCS8qIENvdW50IGhvdyBtYW55IGN1cnZlcyB3ZSBoYXZlIGFuZAorCSAqIGlkZW50aWZ5IHRoZW0gKHdoaWNoIG9uZSBvZiB0aGUgNAorCSAqIGF2YWlsYWJsZSBjdXJ2ZXMgd2UgaGF2ZSBvbiBlYWNoIGNvdW50KS4KKwkgKiBDdXJ2ZXMgYXJlIHN0b3JlZCBmcm9tIGxvd2VyICh4MCkgdG8KKwkgKiBoaWdoZXIgKHgzKSBnYWluICovCisJZm9yIChpID0gMDsgaSA8IEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTOyBpKyspIHsKKwkJLyogZWVfeF9nYWluW21vZGVdIGlzIHggZ2FpbiBtYXNrICovCisJCWlmICgoZWUtPmVlX3hfZ2Fpblttb2RlXSA+PiBpKSAmIDB4MSkKKwkJCXBkZ2Fpbl9pZHhbcGRfZ2FpbnMrK10gPSBpOworCX0KKwllZS0+ZWVfcGRfZ2FpbnNbbW9kZV0gPSBwZF9nYWluczsKKworCWlmIChwZF9nYWlucyA9PSAwIHx8IHBkX2dhaW5zID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFBOgpAQCAtNzYxLDEzICsxMDE3LDEzIEBACiAJZm9yIChpID0gMDsgaSA8IGVlLT5lZV9uX3BpZXJzW21vZGVdOyBpKyspIHsKIAkJY2hhbl9wY2FsX2luZm8gPSAmZ2VuX2NoYW5faW5mb1tpXS5yZjUxMTJfaW5mbzsKIAotCQkvKiBQb3dlciB2YWx1ZXMgaW4gZEJtICogNAorCQkvKiBQb3dlciB2YWx1ZXMgaW4gcXVhcnRlciBkQgogCQkgKiBmb3IgdGhlIGxvd2VyIHhwZCBnYWluIGN1cnZlCiAJCSAqICgwIGRCbSAtPiBoaWdoZXIgb3V0cHV0IHBvd2VyKSAqLwogCQlmb3IgKGMgPSAwOyBjIDwgQVI1S19FRVBST01fTl9YUEQwX1BPSU5UUzsgYysrKSB7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cl94MFtjXSA9ICh2YWwgJiAweGZmKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JfeDBbKytjXSA9ICgodmFsID4+IDgpICYgMHhmZik7CisJCQljaGFuX3BjYWxfaW5mby0+cHdyX3gwW2NdID0gKHM4KSAodmFsICYgMHhmZik7CisJCQljaGFuX3BjYWxfaW5mby0+cHdyX3gwWysrY10gPSAoczgpICgodmFsID4+IDgpICYgMHhmZik7CiAJCX0KIAogCQkvKiBQQ0RBQyBzdGVwcwpAQCAtNzc4LDQyICsxMDM0LDYxIEBACiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFsyXSA9ICgodmFsID4+IDUpICYgMHgxZik7CiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFszXSA9ICgodmFsID4+IDEwKSAmIDB4MWYpOwogCi0JCS8qIFBvd2VyIHZhbHVlcyBpbiBkQm0gKiA0CisJCS8qIFBvd2VyIHZhbHVlcyBpbiBxdWFydGVyIGRCCiAJCSAqIGZvciB0aGUgaGlnaGVyIHhwZCBnYWluIGN1cnZlCiAJCSAqICgxOCBkQm0gLT4gbG93ZXIgb3V0cHV0IHBvd2VyKSAqLwogCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQljaGFuX3BjYWxfaW5mby0+cHdyX3gzWzBdID0gKHZhbCAmIDB4ZmYpOwotCQljaGFuX3BjYWxfaW5mby0+cHdyX3gzWzFdID0gKCh2YWwgPj4gOCkgJiAweGZmKTsKKwkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1swXSA9IChzOCkgKHZhbCAmIDB4ZmYpOworCQljaGFuX3BjYWxfaW5mby0+cHdyX3gzWzFdID0gKHM4KSAoKHZhbCA+PiA4KSAmIDB4ZmYpOwogCiAJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7CiAJCWNoYW5fcGNhbF9pbmZvLT5wd3JfeDNbMl0gPSAodmFsICYgMHhmZik7CiAKIAkJLyogUENEQUMgc3RlcHMKIAkJICogY29ycmVzcG9uZGluZyB0byB0aGUgYWJvdmUgcG93ZXIKLQkJICogbWVhc3VyZW1lbnRzIChzdGF0aWMpICovCisJCSAqIG1lYXN1cmVtZW50cyAoZml4ZWQpICovCiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194M1swXSA9IDIwOwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDNbMV0gPSAzNTsKIAkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gzWzJdID0gNjM7CiAKIAkJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8zKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMF0gPSAoKHZhbCA+PiA4KSAmIDB4ZmYpOworCQkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzBdID0gKCh2YWwgPj4gOCkgJiAweDNmKTsKIAogCQkJLyogTGFzdCB4cGQwIHBvd2VyIGxldmVsIGlzIGFsc28gY2hhbm5lbCBtYXhpbXVtICovCiAJCQlnZW5fY2hhbl9pbmZvW2ldLm1heF9wd3IgPSBjaGFuX3BjYWxfaW5mby0+cHdyX3gwWzNdOwogCQl9IGVsc2UgewogCQkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzBdID0gMTsKLQkJCWdlbl9jaGFuX2luZm9baV0ubWF4X3B3ciA9ICgodmFsID4+IDgpICYgMHhmZik7CisJCQlnZW5fY2hhbl9pbmZvW2ldLm1heF9wd3IgPSAoczgpICgodmFsID4+IDgpICYgMHhmZik7CiAJCX0KIAotCQkvKiBSZWNyZWF0ZSBwY2RhY194MCB0YWJsZSBmb3IgdGhpcyBjaGFubmVsIHVzaW5nIHBjZGFjIHN0ZXBzICovCi0JCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFsxXSArPSBjaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMF07Ci0JCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFsyXSArPSBjaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMV07Ci0JCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFszXSArPSBjaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMl07CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGF0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb181MTEyKGFoLCBtb2RlLCBnZW5fY2hhbl9pbmZvKTsKIH0KIAorCisvKgorICogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkYyNDEzIGNoaXBzCisgKgorICogRm9yIFJGMjQxMyB3ZSBoYXZlIGEgUG93ZXIgdG8gUEREQUMgdGFibGUgKFBvd2VyIERldGVjdG9yKQorICogaW5zdGVhZCBvZiBhIFBDREFDIGFuZCA0IHBkIGdhaW4gY3VydmVzIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4KKyAqIEVhY2ggY3VydmUgaGFzIHBvd2VyIG9uIHggYXhpcyBpbiAwLjUgZGIgc3RlcHMgYW5kIFBEREFEQyBzdGVwcyBvbiB5CisgKiBheGlzIGFuZCBsb29rcyBsaWtlIGFuIGV4cG9uZW50aWFsIGZ1bmN0aW9uIGxpa2UgdGhlIFJGNTExMSBjdXJ2ZS4KKyAqCisgKiBUbyByZWNyZWF0ZSB0aGUgY3VydmVzIHdlIHJlYWQgaGVyZSB0aGUgcG9pbnRzIGFuZCBpbnRlcnBvbGF0ZQorICogbGF0ZXIuIE5vdGUgdGhhdCBpbiBtb3N0IGNhc2VzIG9ubHkgMiAoaGlnaGVyIGFuZCBsb3dlcikgY3VydmVzIGFyZQorICogdXNlZCAobGlrZSBSRjUxMTIpIGJ1dCB2ZW5kb3JzIGhhdmUgdGhlIG9wb3J0dW5pdHkgdG8gaW5jbHVkZSBhbGwKKyAqIDQgY3VydmVzIG9uIGVlcHJvbS4gVGhlIGZpbmFsIGN1cnZlIChoaWdoZXIgcG93ZXIpIGhhcyBhbiBleHRyYQorICogcG9pbnQgZm9yIGJldHRlciBhY2N1cmFjeSBsaWtlIFJGNTExMi4KKyAqLworCisvKiBGb3IgUkYyNDEzIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgZG9lc24ndCBzdGFydCBvbiBhIGZpeGVkIGxvY2F0aW9uIGFuZAorICogaWYgYSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQsIGl0J3Mgc2VjdGlvbiBpcyBtaXNzaW5nIC1ub3QgemVyb2VkLS4KKyAqIFNvIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGVhY2ggc2VjdGlvbiBieSB1c2luZworICogdGhlc2UgdHdvIGZ1bmN0aW9ucyAqLworCisvKiBSZXR1cm4gdGhlIHNpemUgb2YgZWFjaCBzZWN0aW9uIGJhc2VkIG9uIHRoZSBtb2RlIGFuZCB0aGUgbnVtYmVyIG9mIHBkCisgKiBnYWlucyBhdmFpbGFibGUgKG1heGltdW0gNCkuICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogYXRoNWtfcGRnYWluc19zaXplXzI0MTMoc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSwgdW5zaWduZWQgaW50IG1vZGUpCiB7CkBAIC04MjYsNiArMTEwMSw4IEBACiAJcmV0dXJuIHN6OwogfQogCisvKiBSZXR1cm4gdGhlIHN0YXJ0aW5nIG9mZnNldCBmb3IgYSBzZWN0aW9uIGJhc2VkIG9uIHRoZSBtb2RlcyBzdXBwb3J0ZWQKKyAqIGFuZCBlYWNoIHNlY3Rpb24ncyBzaXplLiAqLwogc3RhdGljIHVuc2lnbmVkIGludAogYXRoNWtfY2FsX2RhdGFfb2Zmc2V0XzI0MTMoc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSwgaW50IG1vZGUpCiB7CkBAIC04MzQsMTEgKzExMTEsMTUgQEAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUc6CiAJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQotCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQikgKyAyOworCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLAorCQkJCQlBUjVLX0VFUFJPTV9NT0RFXzExQikgKworCQkJCQlBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzIC8gMjsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKIAkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUEoZWUtPmVlX2hlYWRlcikpCi0JCQlvZmZzZXQgKz0gYXRoNWtfcGRnYWluc19zaXplXzI0MTMoZWUsIEFSNUtfRUVQUk9NX01PREVfMTFBKSArIDU7CisJCQlvZmZzZXQgKz0gYXRoNWtfcGRnYWluc19zaXplXzI0MTMoZWUsCisJCQkJCUFSNUtfRUVQUk9NX01PREVfMTFBKSArCisJCQkJCUFSNUtfRUVQUk9NX05fNUdIWl9DSEFOIC8gMjsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKIAkJYnJlYWs7CkBAIC04NDksMjQgKzExMzAsMTE3IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAorLyogQ29udmVydCBSRjI0MTMgc3BlY2lmaWMgZGF0YSB0byBnZW5lcmljIHJhdyBkYXRhCisgKiB1c2VkIGJ5IGludGVycG9sYXRpb24gY29kZSAqLworc3RhdGljIGludAorYXRoNWtfZWVwcm9tX2NvbnZlcnRfcGNhbF9pbmZvXzI0MTMoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUsCisJCQkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpjaGluZm8pCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmMjQxMyAqcGNpbmZvOworCXU4ICpwZGdhaW5faWR4ID0gZWUtPmVlX3BkY190b19pZHhbbW9kZV07CisJdW5zaWduZWQgaW50IHBpZXIsIHBkZywgcG9pbnQ7CisKKwkvKiBGaWxsIHJhdyBkYXRhIGZvciBlYWNoIGNhbGlicmF0aW9uIHBpZXIgKi8KKwlmb3IgKHBpZXIgPSAwOyBwaWVyIDwgZWUtPmVlX25fcGllcnNbbW9kZV07IHBpZXIrKykgeworCisJCXBjaW5mbyA9ICZjaGluZm9bcGllcl0ucmYyNDEzX2luZm87CisKKwkJLyogQWxsb2NhdGUgcGRfY3VydmVzIGZvciB0aGlzIGNhbCBwaWVyICovCisJCWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMgPQorCQkJCWtjYWxsb2MoQVI1S19FRVBST01fTl9QRF9DVVJWRVMsCisJCQkJCXNpemVvZihzdHJ1Y3QgYXRoNWtfcGRnYWluX2luZm8pLAorCQkJCQlHRlBfS0VSTkVMKTsKKworCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkvKiBGaWxsIHBkX2N1cnZlcyAqLworCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKKworCQkJdTggaWR4ID0gcGRnYWluX2lkeFtwZGddOworCQkJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZCA9CisJCQkJCSZjaGluZm9bcGllcl0ucGRfY3VydmVzW2lkeF07CisKKwkJCS8qIE9uZSBtb3JlIHBvaW50IGZvciB0aGUgaGlnaGVzdCBwb3dlcgorCQkJICogY3VydmUgKGxvd2VzdCBnYWluKSAqLworCQkJaWYgKHBkZyA9PSBlZS0+ZWVfcGRfZ2FpbnNbbW9kZV0gLSAxKQorCQkJCXBkLT5wZF9wb2ludHMgPSBBUjVLX0VFUFJPTV9OX1BEX1BPSU5UUzsKKwkJCWVsc2UKKwkJCQlwZC0+cGRfcG9pbnRzID0gQVI1S19FRVBST01fTl9QRF9QT0lOVFMgLSAxOworCisJCQkvKiBBbGxvY2F0ZSBwZCBwb2ludHMgZm9yIHRoaXMgY3VydmUgKi8KKwkJCXBkLT5wZF9zdGVwID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAorCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKCFwZC0+cGRfc3RlcCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJcGQtPnBkX3B3ciA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOworCisJCQlpZiAoIXBkLT5wZF9wd3IpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCS8qIEZpbGwgcmF3IGRhdGFzZXQKKwkJCSAqIGNvbnZlcnQgYWxsIHB3ciBsZXZlbHMgdG8KKwkJCSAqIHF1YXJ0ZXIgZEIgZm9yIFJGNTExMiBjb21iYXRpYmlsaXR5ICovCisJCQlwZC0+cGRfc3RlcFswXSA9IHBjaW5mby0+cGRkYWNfaVtwZGddOworCQkJcGQtPnBkX3B3clswXSA9IDQgKiBwY2luZm8tPnB3cl9pW3BkZ107CisKKwkJCWZvciAocG9pbnQgPSAxOyBwb2ludCA8IHBkLT5wZF9wb2ludHM7IHBvaW50KyspIHsKKworCQkJCXBkLT5wZF9wd3JbcG9pbnRdID0gcGQtPnBkX3B3cltwb2ludCAtIDFdICsKKwkJCQkJMiAqIHBjaW5mby0+cHdyW3BkZ11bcG9pbnQgLSAxXTsKKworCQkJCXBkLT5wZF9zdGVwW3BvaW50XSA9IHBkLT5wZF9zdGVwW3BvaW50IC0gMV0gKworCQkJCQkJcGNpbmZvLT5wZGRhY1twZGddW3BvaW50IC0gMV07CisKKwkJCX0KKworCQkJLyogSGlnaGVzdCBnYWluIGN1cnZlIC0+IG1pbiBwb3dlciAqLworCQkJaWYgKHBkZyA9PSAwKQorCQkJCWNoaW5mb1twaWVyXS5taW5fcHdyID0gcGQtPnBkX3B3clswXTsKKworCQkJLyogTG93ZXN0IGdhaW4gY3VydmUgLT4gbWF4IHBvd2VyICovCisJCQlpZiAocGRnID09IGVlLT5lZV9wZF9nYWluc1ttb2RlXSAtIDEpCisJCQkJY2hpbmZvW3BpZXJdLm1heF9wd3IgPQorCQkJCQlwZC0+cGRfcHdyW3BkLT5wZF9wb2ludHMgLSAxXTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBQYXJzZSBFRVBST00gZGF0YSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzI0MTMoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0Jc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmMjQxMyAqY2hhbl9wY2FsX2luZm87Ci0Jc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpnZW5fY2hhbl9pbmZvOwotCXVuc2lnbmVkIGludCBpLCBjOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgKnBjaW5mbzsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmNoaW5mbzsKKwl1OCAqcGRnYWluX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W21vZGVdOwogCXUzMiBvZmZzZXQ7Ci0JaW50IHJldDsKKwlpbnQgaWR4LCBpLCByZXQ7CiAJdTE2IHZhbDsKIAl1OCBwZF9nYWlucyA9IDA7CiAKLQlpZiAoZWUtPmVlX3hfZ2Fpblttb2RlXSAmIDB4MSkgcGRfZ2FpbnMrKzsKLQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gMSkgJiAweDEpIHBkX2dhaW5zKys7Ci0JaWYgKChlZS0+ZWVfeF9nYWluW21vZGVdID4+IDIpICYgMHgxKSBwZF9nYWlucysrOwotCWlmICgoZWUtPmVlX3hfZ2Fpblttb2RlXSA+PiAzKSAmIDB4MSkgcGRfZ2FpbnMrKzsKKwkvKiBDb3VudCBob3cgbWFueSBjdXJ2ZXMgd2UgaGF2ZSBhbmQKKwkgKiBpZGVudGlmeSB0aGVtICh3aGljaCBvbmUgb2YgdGhlIDQKKwkgKiBhdmFpbGFibGUgY3VydmVzIHdlIGhhdmUgb24gZWFjaCBjb3VudCkuCisJICogQ3VydmVzIGFyZSBzdG9yZWQgZnJvbSBoaWdoZXIgdG8KKwkgKiBsb3dlciBnYWluIHNvIHdlIGdvIGJhY2t3YXJkcyAqLworCWZvciAoaWR4ID0gQVI1S19FRVBST01fTl9QRF9DVVJWRVMgLSAxOyBpZHggPj0gMDsgaWR4LS0pIHsKKwkJLyogZWVfeF9nYWluW21vZGVdIGlzIHggZ2FpbiBtYXNrICovCisJCWlmICgoZWUtPmVlX3hfZ2Fpblttb2RlXSA+PiBpZHgpICYgMHgxKQorCQkJcGRnYWluX2lkeFtwZF9nYWlucysrXSA9IGlkeDsKKworCX0KIAllZS0+ZWVfcGRfZ2FpbnNbbW9kZV0gPSBwZF9nYWluczsKIAorCWlmIChwZF9nYWlucyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW9mZnNldCA9IGF0aDVrX2NhbF9kYXRhX29mZnNldF8yNDEzKGVlLCBtb2RlKTsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFBOgpAQCAtODc1LDcgKzEyNDksNyBAQAogCiAJCWF0aDVrX2VlcHJvbV9pbml0XzExYV9wY2FsX2ZyZXEoYWgsIG9mZnNldCk7CiAJCW9mZnNldCArPSBBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTiAvIDI7Ci0JCWdlbl9jaGFuX2luZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOwogCQlicmVhazsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgogCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUIoZWUtPmVlX2hlYWRlcikpCkBAIC04ODMsNyArMTI1Nyw3IEBACiAKIAkJYXRoNWtfZWVwcm9tX2luaXRfMTFiZ18yNDEzKGFoLCBtb2RlLCBvZmZzZXQpOwogCQlvZmZzZXQgKz0gQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMyAvIDI7Ci0JCWdlbl9jaGFuX2luZm8gPSBlZS0+ZWVfcHdyX2NhbF9iOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9iOwogCQlicmVhazsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFHOgogCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUcoZWUtPmVlX2hlYWRlcikpCkBAIC04OTEsNDEgKzEyNjUsMzUgQEAKIAogCQlhdGg1a19lZXByb21faW5pdF8xMWJnXzI0MTMoYWgsIG1vZGUsIG9mZnNldCk7CiAJCW9mZnNldCArPSBBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzIC8gMjsKLQkJZ2VuX2NoYW5faW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7CisJCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwZF9nYWlucyA9PSAwKQotCQlyZXR1cm4gMDsKLQogCWZvciAoaSA9IDA7IGkgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgaSsrKSB7Ci0JCWNoYW5fcGNhbF9pbmZvID0gJmdlbl9jaGFuX2luZm9baV0ucmYyNDEzX2luZm87CisJCXBjaW5mbyA9ICZjaGluZm9baV0ucmYyNDEzX2luZm87CiAKIAkJLyoKIAkJICogUmVhZCBwd3JfaSwgcGRkYWNfaSBhbmQgdGhlIGZpcnN0CiAJCSAqIDIgcGQgcG9pbnRzIChwd3IsIHBkZGFjKQogCQkgKi8KIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3cl9pWzBdID0gdmFsICYgMHgxZjsKLQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjX2lbMF0gPSAodmFsID4+IDUpICYgMHg3ZjsKLQkJY2hhbl9wY2FsX2luZm8tPnB3clswXVswXSA9Ci0JCQkJCSh2YWwgPj4gMTIpICYgMHhmOworCQlwY2luZm8tPnB3cl9pWzBdID0gdmFsICYgMHgxZjsKKwkJcGNpbmZvLT5wZGRhY19pWzBdID0gKHZhbCA+PiA1KSAmIDB4N2Y7CisJCXBjaW5mby0+cHdyWzBdWzBdID0gKHZhbCA+PiAxMikgJiAweGY7CiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzBdID0gdmFsICYgMHgzZjsKLQkJY2hhbl9wY2FsX2luZm8tPnB3clswXVsxXSA9ICh2YWwgPj4gNikgJiAweGY7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVsxXSA9Ci0JCQkJCSh2YWwgPj4gMTApICYgMHgzZjsKKwkJcGNpbmZvLT5wZGRhY1swXVswXSA9IHZhbCAmIDB4M2Y7CisJCXBjaW5mby0+cHdyWzBdWzFdID0gKHZhbCA+PiA2KSAmIDB4ZjsKKwkJcGNpbmZvLT5wZGRhY1swXVsxXSA9ICh2YWwgPj4gMTApICYgMHgzZjsKIAogCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQljaGFuX3BjYWxfaW5mby0+cHdyWzBdWzJdID0gdmFsICYgMHhmOwotCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMF1bMl0gPQotCQkJCQkodmFsID4+IDQpICYgMHgzZjsKKwkJcGNpbmZvLT5wd3JbMF1bMl0gPSB2YWwgJiAweGY7CisJCXBjaW5mby0+cGRkYWNbMF1bMl0gPSAodmFsID4+IDQpICYgMHgzZjsKIAotCQljaGFuX3BjYWxfaW5mby0+cHdyWzBdWzNdID0gMDsKLQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzNdID0gMDsKKwkJcGNpbmZvLT5wd3JbMF1bM10gPSAwOworCQlwY2luZm8tPnBkZGFjWzBdWzNdID0gMDsKIAogCQlpZiAocGRfZ2FpbnMgPiAxKSB7CiAJCQkvKgpAQCAtOTMzLDQ0ICsxMzAxLDM2IEBACiAJCQkgKiBzbyBpdCBvbmx5IGhhcyAyIHBkIHBvaW50cy4KIAkJCSAqIENvbnRpbnVlIHdpaCBwZCBnYWluIDEuCiAJCQkgKi8KLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JfaVsxXSA9ICh2YWwgPj4gMTApICYgMHgxZjsKKwkJCXBjaW5mby0+cHdyX2lbMV0gPSAodmFsID4+IDEwKSAmIDB4MWY7CiAKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY19pWzFdID0gKHZhbCA+PiAxNSkgJiAweDE7CisJCQlwY2luZm8tPnBkZGFjX2lbMV0gPSAodmFsID4+IDE1KSAmIDB4MTsKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVsxXSB8PSAodmFsICYgMHgzRikgPDwgMTsKKwkJCXBjaW5mby0+cGRkYWNfaVsxXSB8PSAodmFsICYgMHgzRikgPDwgMTsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsxXVswXSA9ICh2YWwgPj4gNikgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bMF0gPQotCQkJCQkJKHZhbCA+PiAxMCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMV1bMF0gPSAodmFsID4+IDYpICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1sxXVswXSA9ICh2YWwgPj4gMTApICYgMHgzZjsKIAogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMV1bMV0gPSB2YWwgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bMV0gPQotCQkJCQkJKHZhbCA+PiA0KSAmIDB4M2Y7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzFdWzJdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHhmOworCQkJcGNpbmZvLT5wd3JbMV1bMV0gPSB2YWwgJiAweGY7CisJCQlwY2luZm8tPnBkZGFjWzFdWzFdID0gKHZhbCA+PiA0KSAmIDB4M2Y7CisJCQlwY2luZm8tPnB3clsxXVsyXSA9ICh2YWwgPj4gMTApICYgMHhmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bMl0gPQotCQkJCQkJKHZhbCA+PiAxNCkgJiAweDM7CisJCQlwY2luZm8tPnBkZGFjWzFdWzJdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzJdIHw9Ci0JCQkJCQkodmFsICYgMHhGKSA8PCAyOworCQkJcGNpbmZvLT5wZGRhY1sxXVsyXSB8PSAodmFsICYgMHhGKSA8PCAyOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzFdWzNdID0gMDsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1sxXVszXSA9IDA7CisJCQlwY2luZm8tPnB3clsxXVszXSA9IDA7CisJCQlwY2luZm8tPnBkZGFjWzFdWzNdID0gMDsKIAkJfSBlbHNlIGlmIChwZF9nYWlucyA9PSAxKSB7CiAJCQkvKgogCQkJICogUGQgZ2FpbiAwIGlzIHRoZSBsYXN0IG9uZSBzbwogCQkJICogcmVhZCB0aGUgZXh0cmEgcG9pbnQuCiAJCQkgKi8KLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMF1bM10gPQotCQkJCQkJKHZhbCA+PiAxMCkgJiAweGY7CisJCQlwY2luZm8tPnB3clswXVszXSA9ICh2YWwgPj4gMTApICYgMHhmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMF1bM10gPQotCQkJCQkJKHZhbCA+PiAxNCkgJiAweDM7CisJCQlwY2luZm8tPnBkZGFjWzBdWzNdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzNdIHw9Ci0JCQkJCQkodmFsICYgMHhGKSA8PCAyOworCQkJcGNpbmZvLT5wZGRhY1swXVszXSB8PSAodmFsICYgMHhGKSA8PCAyOwogCQl9CiAKIAkJLyoKQEAgLTk3OCwxMDUgKzEzMzgsNjUgQEAKIAkJICogYXMgYWJvdmUuCiAJCSAqLwogCQlpZiAocGRfZ2FpbnMgPiAyKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbMl0gPSAodmFsID4+IDQpICYgMHgxZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY19pWzJdID0gKHZhbCA+PiA5KSAmIDB4N2Y7CisJCQlwY2luZm8tPnB3cl9pWzJdID0gKHZhbCA+PiA0KSAmIDB4MWY7CisJCQlwY2luZm8tPnBkZGFjX2lbMl0gPSAodmFsID4+IDkpICYgMHg3ZjsKIAogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMl1bMF0gPQotCQkJCQkJKHZhbCA+PiAwKSAmIDB4ZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1syXVswXSA9Ci0JCQkJCQkodmFsID4+IDQpICYgMHgzZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMl1bMV0gPQotCQkJCQkJKHZhbCA+PiAxMCkgJiAweGY7CisJCQlwY2luZm8tPnB3clsyXVswXSA9ICh2YWwgPj4gMCkgJiAweGY7CisJCQlwY2luZm8tPnBkZGFjWzJdWzBdID0gKHZhbCA+PiA0KSAmIDB4M2Y7CisJCQlwY2luZm8tPnB3clsyXVsxXSA9ICh2YWwgPj4gMTApICYgMHhmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMl1bMV0gPQotCQkJCQkJKHZhbCA+PiAxNCkgJiAweDM7CisJCQlwY2luZm8tPnBkZGFjWzJdWzFdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzFdIHw9Ci0JCQkJCQkodmFsICYgMHhGKSA8PCAyOworCQkJcGNpbmZvLT5wZGRhY1syXVsxXSB8PSAodmFsICYgMHhGKSA8PCAyOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzJdID0KLQkJCQkJCSh2YWwgPj4gNCkgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMl1bMl0gPQotCQkJCQkJKHZhbCA+PiA4KSAmIDB4M2Y7CisJCQlwY2luZm8tPnB3clsyXVsyXSA9ICh2YWwgPj4gNCkgJiAweGY7CisJCQlwY2luZm8tPnBkZGFjWzJdWzJdID0gKHZhbCA+PiA4KSAmIDB4M2Y7CiAKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMl1bM10gPSAwOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzNdID0gMDsKKwkJCXBjaW5mby0+cHdyWzJdWzNdID0gMDsKKwkJCXBjaW5mby0+cGRkYWNbMl1bM10gPSAwOwogCQl9IGVsc2UgaWYgKHBkX2dhaW5zID09IDIpIHsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMV1bM10gPQotCQkJCQkJKHZhbCA+PiA0KSAmIDB4ZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1sxXVszXSA9Ci0JCQkJCQkodmFsID4+IDgpICYgMHgzZjsKKwkJCXBjaW5mby0+cHdyWzFdWzNdID0gKHZhbCA+PiA0KSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbMV1bM10gPSAodmFsID4+IDgpICYgMHgzZjsKIAkJfQogCiAJCWlmIChwZF9nYWlucyA+IDMpIHsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JfaVszXSA9ICh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wd3JfaVszXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JfaVszXSB8PSAoKHZhbCA+PiAwKSAmIDB4NykgPDwgMjsKKwkJCXBjaW5mby0+cHdyX2lbM10gfD0gKCh2YWwgPj4gMCkgJiAweDcpIDw8IDI7CiAKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY19pWzNdID0gKHZhbCA+PiAzKSAmIDB4N2Y7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzNdWzBdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzBdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY19pWzNdID0gKHZhbCA+PiAzKSAmIDB4N2Y7CisJCQlwY2luZm8tPnB3clszXVswXSA9ICh2YWwgPj4gMTApICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1szXVswXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzBdIHw9Ci0JCQkJCQkodmFsICYgMHhGKSA8PCAyOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVsxXSA9Ci0JCQkJCQkodmFsID4+IDQpICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzFdID0KLQkJCQkJCSh2YWwgPj4gOCkgJiAweDNmOworCQkJcGNpbmZvLT5wZGRhY1szXVswXSB8PSAodmFsICYgMHhGKSA8PCAyOworCQkJcGNpbmZvLT5wd3JbM11bMV0gPSAodmFsID4+IDQpICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1szXVsxXSA9ICh2YWwgPj4gOCkgJiAweDNmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzNdWzJdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wd3JbM11bMl0gPSAodmFsID4+IDE0KSAmIDB4MzsKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzNdWzJdIHw9Ci0JCQkJCQkoKHZhbCA+PiAwKSAmIDB4MykgPDwgMjsKKwkJCXBjaW5mby0+cHdyWzNdWzJdIHw9ICgodmFsID4+IDApICYgMHgzKSA8PCAyOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbM11bMl0gPQotCQkJCQkJKHZhbCA+PiAyKSAmIDB4M2Y7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzNdWzNdID0KLQkJCQkJCSh2YWwgPj4gOCkgJiAweGY7CisJCQlwY2luZm8tPnBkZGFjWzNdWzJdID0gKHZhbCA+PiAyKSAmIDB4M2Y7CisJCQlwY2luZm8tPnB3clszXVszXSA9ICh2YWwgPj4gOCkgJiAweGY7CiAKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVszXSA9Ci0JCQkJCQkodmFsID4+IDEyKSAmIDB4RjsKKwkJCXBjaW5mby0+cGRkYWNbM11bM10gPSAodmFsID4+IDEyKSAmIDB4RjsKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbM11bM10gfD0KLQkJCQkJCSgodmFsID4+IDApICYgMHgzKSA8PCA0OworCQkJcGNpbmZvLT5wZGRhY1szXVszXSB8PSAoKHZhbCA+PiAwKSAmIDB4MykgPDwgNDsKIAkJfSBlbHNlIGlmIChwZF9nYWlucyA9PSAzKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzNdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wd3JbMl1bM10gPSAodmFsID4+IDE0KSAmIDB4MzsKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzNdIHw9Ci0JCQkJCQkoKHZhbCA+PiAwKSAmIDB4MykgPDwgMjsKKwkJCXBjaW5mby0+cHdyWzJdWzNdIHw9ICgodmFsID4+IDApICYgMHgzKSA8PCAyOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMl1bM10gPQotCQkJCQkJKHZhbCA+PiAyKSAmIDB4M2Y7Ci0JCX0KLQotCQlmb3IgKGMgPSAwOyBjIDwgcGRfZ2FpbnM7IGMrKykgewotCQkJLyogUmVjcmVhdGUgcHdyIHRhYmxlIGZvciB0aGlzIGNoYW5uZWwgdXNpbmcgcHdyIHN0ZXBzICovCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyW2NdWzBdICs9IGNoYW5fcGNhbF9pbmZvLT5wd3JfaVtjXSAqIDI7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyW2NdWzFdICs9IGNoYW5fcGNhbF9pbmZvLT5wd3JbY11bMF07Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyW2NdWzJdICs9IGNoYW5fcGNhbF9pbmZvLT5wd3JbY11bMV07Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyW2NdWzNdICs9IGNoYW5fcGNhbF9pbmZvLT5wd3JbY11bMl07Ci0JCQlpZiAoY2hhbl9wY2FsX2luZm8tPnB3cltjXVszXSA9PSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzJdKQotCQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbY11bM10gPSAwOwotCi0JCQkvKiBSZWNyZWF0ZSBwZGRhYyB0YWJsZSBmb3IgdGhpcyBjaGFubmVsIHVzaW5nIHBkZGFjIHN0ZXBzICovCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMF0gKz0gY2hhbl9wY2FsX2luZm8tPnBkZGFjX2lbY107Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMV0gKz0gY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzBdOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzJdICs9IGNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVsxXTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVszXSArPSBjaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMl07Ci0JCQlpZiAoY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzNdID09IGNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVsyXSkKLQkJCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bM10gPSAwOworCQkJcGNpbmZvLT5wZGRhY1syXVszXSA9ICh2YWwgPj4gMikgJiAweDNmOwogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGF0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb18yNDEzKGFoLCBtb2RlLCBjaGluZm8pOwogfQogCisKIC8qCiAgKiBSZWFkIHBlciByYXRlIHRhcmdldCBwb3dlciAodGhpcyBpcyB0aGUgbWF4aW11bSB0eCBwb3dlcgogICogc3VwcG9ydGVkIGJ5IHRoZSBjYXJkKS4gVGhpcyBpbmZvIGlzIHVzZWQgd2hlbiBzZXR0aW5nCkBAIC0xMDg0LDExICsxNDA0LDEyIEBACiAgKgogICogVGhpcyBhbHNvIHdvcmtzIGZvciB2NSBFRVBST01zLgogICovCi1zdGF0aWMgaW50IGF0aDVrX2VlcHJvbV9yZWFkX3RhcmdldF9yYXRlX3B3cl9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIGludAorYXRoNWtfZWVwcm9tX3JlYWRfdGFyZ2V0X3JhdGVfcHdyX2luZm8oc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvICpyYXRlX3BjYWxfaW5mbzsKLQl1MTYgKnJhdGVfdGFyZ2V0X3B3cl9udW07CisJdTggKnJhdGVfdGFyZ2V0X3B3cl9udW07CiAJdTMyIG9mZnNldDsKIAl1MTYgdmFsOwogCWludCByZXQsIGk7CkBAIC0xMTYzLDYgKzE0ODQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFJlYWQgcGVyIGNoYW5uZWwgY2FsaWJyYXRpb24gaW5mbyBmcm9tIEVFUFJPTQorICoKKyAqIFRoaXMgaW5mbyBpcyB1c2VkIHRvIGNhbGlicmF0ZSB0aGUgYmFzZWJhbmQgcG93ZXIgdGFibGUuIEltYWdpbmUKKyAqIHRoYXQgZm9yIGVhY2ggY2hhbm5lbCB0aGVyZSBpcyBhIHBvd2VyIGN1cnZlIHRoYXQncyBodyBzcGVjaWZpYworICogKGRlcGVuZHMgb24gYW1wbGlmaWVyIGV0YykgYW5kIHdlIHRyeSB0byAiY29ycmVjdCIgdGhpcyBjdXJ2ZSB1c2luZworICogb2ZmZXN0cyB3ZSBwYXNzIG9uIHRvIHBoeSBjaGlwIChiYXNlYmFuZCAtPiBiZWZvcmUgYW1wbGlmaWVyKSBzbyB0aGF0CisgKiBpdCBjYW4gdXNlIGFjY3VyYXRlIHBvd2VyIHZhbHVlcyB3aGVuIHNldHRpbmcgdHggcG93ZXIgKHRha2VzIGFtcGxpZmllcidzCisgKiBwZXJmb3JtYW5jZSBvbiBlYWNoIGNoYW5uZWwgaW50byBhY2NvdW50KS4KKyAqCisgKiBFRVBST00gcHJvdmlkZXMgdXMgd2l0aCB0aGUgb2Zmc2V0cyBmb3Igc29tZSBwcmUtY2FsaWJyYXRlZCBjaGFubmVscworICogYW5kIHdlIGhhdmUgdG8gaW50ZXJwb2xhdGUgdG8gY3JlYXRlIHRoZSBmdWxsIHRhYmxlIGZvciB0aGVzZSBjaGFubmVscyBhbmQKKyAqIGFsc28gdGhlIHRhYmxlIGZvciBhbnkgY2hhbm5lbC4KKyAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CkBAIC0xMTgwLDcgKzE1MTUsOSBAQAogCWVsc2UKIAkJcmVhZF9wY2FsID0gYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzUxMTE7CiAKLQlmb3IgKG1vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsgbW9kZSA8PSBBUjVLX0VFUFJPTV9NT0RFXzExRzsgbW9kZSsrKSB7CisKKwlmb3IgKG1vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsgbW9kZSA8PSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKKwltb2RlKyspIHsKIAkJZXJyID0gcmVhZF9wY2FsKGFoLCBtb2RlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xMTkzLDcgKzE1MzAsNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUmVhZCBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyAqLworc3RhdGljIGludAorYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvOworCXU4IHBpZXIsIHBkZzsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CisJCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKKwkJCXJldHVybiAwOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOworCQlicmVhazsKKwljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgorCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUIoZWUtPmVlX2hlYWRlcikpCisJCQlyZXR1cm4gMDsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKKwkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQorCQkJcmV0dXJuIDA7CisJCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7CisJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKKwkJCWNvbnRpbnVlOworCisJCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgeworCQkJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZCA9CisJCQkJCSZjaGluZm9bcGllcl0ucGRfY3VydmVzW3BkZ107CisKKwkJCWlmIChwZCAhPSBOVUxMKSB7CisJCQkJa2ZyZWUocGQtPnBkX3N0ZXApOworCQkJCWtmcmVlKHBkLT5wZF9wd3IpOworCQkJfQorCQl9CisKKwkJa2ZyZWUoY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2F0aDVrX2VlcHJvbV9kZXRhY2goc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwl1OCBtb2RlOworCisJZm9yIChtb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7IG1vZGUgPD0gQVI1S19FRVBST01fTU9ERV8xMUc7IG1vZGUrKykKKwkJYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKGFoLCBtb2RlKTsKK30KKworLyogUmVhZCBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyB1c2VkIGZvciByZWd1bGF0b3J5IGNvbnRyb2wgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX2N0bF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CkBAIC0xMzI4LDE5ICsxNzIxLDE3IEBACiAKIAlyZXR1cm4gMDsKIH0KKwogLyoKICAqIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gZWVwcm9tCiAgKi8KIGludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKIHsKLQl1OCBtYWNfZFtFVEhfQUxFTl07CisJdTggbWFjX2RbRVRIX0FMRU5dID0ge307CiAJdTMyIHRvdGFsLCBvZmZzZXQ7CiAJdTE2IGRhdGE7CiAJaW50IG9jdGV0LCByZXQ7CiAKLQltZW1zZXQobWFjLCAwLCBFVEhfQUxFTik7Ci0JbWVtc2V0KG1hY19kLCAwLCBFVEhfQUxFTik7Ci0KIAlyZXQgPSBhdGg1a19od19lZXByb21fcmVhZChhaCwgMHgyMCwgJmRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xMzU2LDExICsxNzQ3LDIzIEBACiAJCW9jdGV0ICs9IDI7CiAJfQogCi0JbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKLQogCWlmICghdG90YWwgfHwgdG90YWwgPT0gMyAqIDB4ZmZmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltZW1jcHkobWFjLCBtYWNfZCwgRVRIX0FMRU4pOworCiAJcmV0dXJuIDA7CiB9CiAKK2Jvb2wgYXRoNWtfZWVwcm9tX2lzX2hiNjMoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwl1MTYgZGF0YTsKKworCWF0aDVrX2h3X2VlcHJvbV9yZWFkKGFoLCBBUjVLX0VFUFJPTV9JU19IQjYzLCAmZGF0YSk7CisKKwlpZiAoKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQyNSA+PiA0KSkgJiYgZGF0YSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmgKaW5kZXggMDllYjdkMC4uYjBjMDYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgQVI1S19FRVBST01fTUFHSUNfNTIxMQkJMHgwMDAwMTQ1YiAvKiA1MjExICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BR0lDXzUyMTAJCTB4MDAwMDE0NWEgLyogNTIxMCAqLwogCisjZGVmaW5lCUFSNUtfRUVQUk9NX0lTX0hCNjMJCTB4MDAwYgkvKiBUYWxvbiBkZXRlY3QgKi8KICNkZWZpbmUgQVI1S19FRVBST01fUkVHX0RPTUFJTgkJMHgwMGJmCS8qIEVFUFJPTSByZWdkb20gKi8KICNkZWZpbmUgQVI1S19FRVBST01fQ0hFQ0tTVU0JCTB4MDBjMAkvKiBFRVBST00gY2hlY2tzdW0gKi8KICNkZWZpbmUgQVI1S19FRVBST01fSU5GT19CQVNFCQkweDAwYzAJLyogRUVQUk9NIGhlYWRlciAqLwpAQCAtMTcyLDYgKzE3Myw3IEBACiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fNUdIWl9DSEFOCQkxMAogI2RlZmluZSBBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTgkJMwogI2RlZmluZSBBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzCTQKKyNkZWZpbmUJQVI1S19FRVBST01fTl8yR0haX0NIQU5fTUFYCTQKICNkZWZpbmUgQVI1S19FRVBST01fTUFYX0NIQU4JCTEwCiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExCTExCiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fUENEQUMJCTExCkBAIC0xOTIsNyArMTk0LDcgQEAKICNkZWZpbmUgQVI1S19FRVBST01fU0NBTEVfT0NfREVMVEEoX3gpCSgoKF94KSAqIDIpIC8gMTApCiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fQ1RMUyhfdikJCUFSNUtfRUVQUk9NX09GRihfdiwgMTYsIDMyKQogI2RlZmluZSBBUjVLX0VFUFJPTV9NQVhfQ1RMUwkJMzIKLSNkZWZpbmUgQVI1S19FRVBST01fTl9YUERfUEVSX0NIQU5ORUwJNAorI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUwkJNAogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1hQRDBfUE9JTlRTCTQKICNkZWZpbmUgQVI1S19FRVBST01fTl9YUEQzX1BPSU5UUwkzCiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fUERfR0FJTlMJCTQKQEAgLTIzMSw3ICsyMzMsNyBAQAogCUFSNUtfQ1RMXzExQiA9IDEsCiAJQVI1S19DVExfMTFHID0gMiwKIAlBUjVLX0NUTF9UVVJCTyA9IDMsCi0JQVI1S19DVExfMTA4RyA9IDQsCisJQVI1S19DVExfVFVSQk9HID0gNCwKIAlBUjVLX0NUTF8yR0hUMjAgPSA1LAogCUFSNUtfQ1RMXzVHSFQyMCA9IDYsCiAJQVI1S19DVExfMkdIVDQwID0gNywKQEAgLTIzOSw2NSArMjQxLDExNCBAQAogCUFSNUtfQ1RMX01PREVfTSA9IDE1LAogfTsKIAorLyogRGVmYXVsdCBDVEwgaWRzIGZvciB0aGUgMyBtYWluIHJlZyBkb21haW5zLgorICogQXRoZXJvcyBvbmx5IHVzZXMgdGhlc2UgYnkgZGVmYXVsdCBidXQgdmVuZG9ycworICogY2FuIGhhdmUgdXAgdG8gMzIgZGlmZmVyZW50IENUTHMgZm9yIGRpZmZlcmVudAorICogc2NlbmFyaW9zLiBOb3RlIHRoYXQgdGhlZXNlIHZhbHVlcyBhcmUgT1JlZCB3aXRoCisgKiB0aGUgbW9kZSBpZCAoYWJvdmUpIHNvIHdlIGNhbiBoYXZlIHVwIHRvIDI0IENUTAorICogZGF0YXNldHMgb3V0IG9mIHRoZXNlIDMgbWFpbiByZWdkb21haW5zLiBUaGF0IGxlYXZlcworICogOCBpZHMgdGhhdCBjYW4gYmUgdXNlZCBieSB2ZW5kb3JzIGFuZCBzaW5jZSAweDIwIGlzCisgKiBtaXNzaW5nIGZyb20gSEFMIHNvdXJjZXMgaSBndWVzcyB0aGlzIGlzIHRoZSBzZXQgb2YKKyAqIGN1c3RvbSBDVExzIHZlbmRvcnMgY2FuIHVzZS4gKi8KKyNkZWZpbmUJQVI1S19DVExfRkNDCTB4MTAKKyNkZWZpbmUJQVI1S19DVExfQ1VTVE9NCTB4MjAKKyNkZWZpbmUJQVI1S19DVExfRVRTSQkweDMwCisjZGVmaW5lCUFSNUtfQ1RMX01LSwkweDQwCisKKy8qIEluZGljYXRlcyBhIENUTCB3aXRoIG9ubHkgbW9kZSBzZXQgYW5kCisgKiBubyByZWcgZG9tYWluIG1hcHBpbmcsIHN1Y2ggQ1RMcyBhcmUgdXNlZAorICogZm9yIHdvcmxkIHJvYW1pbmcgZG9tYWlucyBvciBzaW1wbHkgd2hlbgorICogYSByZWcgZG9tYWluIGlzIG5vdCBzZXQgKi8KKyNkZWZpbmUJQVI1S19DVExfTk9fUkVHRE9NQUlOCTB4ZjAKKworLyogSW5kaWNhdGVzIGFuIGVtcHR5IChpbnZhbGlkKSBDVEwgKi8KKyNkZWZpbmUgQVI1S19DVExfTk9fQ1RMCQkweGZmCisKIC8qIFBlciBjaGFubmVsIGNhbGlicmF0aW9uIGRhdGEsIHVzZWQgZm9yIHBvd2VyIHRhYmxlIHNldHVwICovCiBzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmY1MTExIHsKIAkvKiBQb3dlciBsZXZlbHMgaW4gaGFsZiBkYm0gdW5pdHMKIAkgKiBmb3Igb25lIHBvd2VyIGN1cnZlLiAqLwotCXU4CQlwd3JbQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTFdOworCXU4IHB3cltBUjVLX0VFUFJPTV9OX1BXUl9QT0lOVFNfNTExMV07CiAJLyogUENEQUMgdGFibGUgc3RlcHMKIAkgKiBmb3IgdGhlIGFib3ZlIHZhbHVlcyAqLwotCXU4CQlwY2RhY1tBUjVLX0VFUFJPTV9OX1BXUl9QT0lOVFNfNTExMV07CisJdTggcGNkYWNbQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTFdOwogCS8qIFN0YXJ0aW5nIFBDREFDIHN0ZXAgKi8KLQl1OAkJcGNkYWNfbWluOworCXU4IHBjZGFjX21pbjsKIAkvKiBGaW5hbCBQQ0RBQyBzdGVwICovCi0JdTgJCXBjZGFjX21heDsKKwl1OCBwY2RhY19tYXg7CiB9OwogCiBzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmY1MTEyIHsKIAkvKiBQb3dlciBsZXZlbHMgaW4gcXVhcnRlciBkQm0gdW5pdHMKIAkgKiBmb3IgbG93ZXIgKDApIGFuZCBoaWdoZXIgKDMpCi0JICogbGV2ZWwgY3VydmVzICovCi0JczgJCXB3cl94MFtBUjVLX0VFUFJPTV9OX1hQRDBfUE9JTlRTXTsKLQlzOAkJcHdyX3gzW0FSNUtfRUVQUk9NX05fWFBEM19QT0lOVFNdOworCSAqIGxldmVsIGN1cnZlcyBpbiAwLjI1ZEIgdW5pdHMgKi8KKwlzOCBwd3JfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107CisJczggcHdyX3gzW0FSNUtfRUVQUk9NX05fWFBEM19QT0lOVFNdOwogCS8qIFBDREFDIHRhYmxlIHN0ZXBzCiAJICogZm9yIHRoZSBhYm92ZSB2YWx1ZXMgKi8KLQl1OAlwY2RhY194MFtBUjVLX0VFUFJPTV9OX1hQRDBfUE9JTlRTXTsKLQl1OAlwY2RhY194M1tBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTXTsKKwl1OCBwY2RhY194MFtBUjVLX0VFUFJPTV9OX1hQRDBfUE9JTlRTXTsKKwl1OCBwY2RhY194M1tBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTXTsKIH07CiAKIHN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgewogCS8qIFN0YXJ0aW5nIHB3ci9wZGRhYyB2YWx1ZXMgKi8KLQlzOAkJcHdyX2lbQVI1S19FRVBST01fTl9QRF9HQUlOU107Ci0JdTgJcGRkYWNfaVtBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXTsKLQkvKiAocHdyLHBkZGFjKSBwb2ludHMgKi8KLQlzOAkJcHdyW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdCi0JCQkJW0FSNUtfRUVQUk9NX05fUERfUE9JTlRTXTsKLQl1OAlwZGRhY1tBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXQotCQkJCVtBUjVLX0VFUFJPTV9OX1BEX1BPSU5UU107CisJczggcHdyX2lbQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJdTggcGRkYWNfaVtBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXTsKKwkvKiAocHdyLHBkZGFjKSBwb2ludHMKKwkgKiBwb3dlciBsZXZlbHMgaW4gMC41ZEIgdW5pdHMgKi8KKwlzOCBwd3JbQVI1S19FRVBST01fTl9QRF9HQUlOU10KKwkJW0FSNUtfRUVQUk9NX05fUERfUE9JTlRTXTsKKwl1OCBwZGRhY1tBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXQorCQlbQVI1S19FRVBST01fTl9QRF9QT0lOVFNdOworfTsKKworZW51bSBhdGg1a19wb3dlcnRhYmxlX3R5cGUgeworCUFSNUtfUFdSVEFCTEVfUFdSX1RPX1BDREFDID0gMCwKKwlBUjVLX1BXUlRBQkxFX0xJTkVBUl9QQ0RBQyA9IDEsCisJQVI1S19QV1JUQUJMRV9QV1JfVE9fUERBREMgPSAyLAorfTsKKworc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvIHsKKwl1OCBwZF9wb2ludHM7CisJdTggKnBkX3N0ZXA7CisJLyogUG93ZXIgdmFsdWVzIGFyZSBpbgorCSAqIDAuMjVkQiB1bml0cyAqLworCXMxNiAqcGRfcHdyOwogfTsKIAogc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvIHsKIAkvKiBGcmVxdWVuY3kgKi8KIAl1MTYJZnJlcTsKLQkvKiBNYXggYXZhaWxhYmxlIHBvd2VyICovCi0JczgJCW1heF9wd3I7CisJLyogVHggcG93ZXIgYm91bmRhcmllcyAqLworCXMxNgltYXhfcHdyOworCXMxNgltaW5fcHdyOwogCXVuaW9uIHsKIAkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMSByZjUxMTFfaW5mbzsKIAkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMiByZjUxMTJfaW5mbzsKIAkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmMjQxMyByZjI0MTNfaW5mbzsKIAl9OworCS8qIFJhdyB2YWx1ZXMgdXNlZCBieSBwaHkgY29kZQorCSAqIEN1cnZlcyBhcmUgc3RvcmVkIGluIG9yZGVyIGZyb20gbG93ZXIKKwkgKiBnYWluIHRvIGhpZ2hlciBnYWluIChtYXggdHhwb3dlciAtPiBtaW4gdHhwb3dlcikgKi8KKwlzdHJ1Y3QgYXRoNWtfcGRnYWluX2luZm8gKnBkX2N1cnZlczsKIH07CiAKLS8qIFBlciByYXRlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGVhY2ggbW9kZSwgdXNlZCBmb3IgcG93ZXIgdGFibGUgc2V0dXAgKi8KKy8qIFBlciByYXRlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGVhY2ggbW9kZSwKKyAqIHVzZWQgZm9yIHJhdGUgcG93ZXIgdGFibGUgc2V0dXAuCisgKiBOb3RlOiBWYWx1ZXMgaW4gMC41ZEIgdW5pdHMgKi8KIHN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyB7CiAJdTE2CWZyZXE7IC8qIEZyZXF1ZW5jeSAqLwotCS8qIFBvd2VyIGxldmVsIGZvciA2LTI0TWJpdC9zIHJhdGVzICovCisJLyogUG93ZXIgbGV2ZWwgZm9yIDYtMjRNYml0L3MgcmF0ZXMgb3IKKwkgKiAxTWIgcmF0ZSAqLwogCXUxNgl0YXJnZXRfcG93ZXJfNnRvMjQ7Ci0JLyogUG93ZXIgbGV2ZWwgZm9yIDM2TWJpdCByYXRlICovCisJLyogUG93ZXIgbGV2ZWwgZm9yIDM2TWJpdCByYXRlIG9yCisJICogMk1iIHJhdGUgKi8KIAl1MTYJdGFyZ2V0X3Bvd2VyXzM2OwotCS8qIFBvd2VyIGxldmVsIGZvciA0OE1iaXQgcmF0ZSAqLworCS8qIFBvd2VyIGxldmVsIGZvciA0OE1iaXQgcmF0ZSBvcgorCSAqIDUuNU1iaXQgcmF0ZSAqLwogCXUxNgl0YXJnZXRfcG93ZXJfNDg7Ci0JLyogUG93ZXIgbGV2ZWwgZm9yIDU0TWJpdCByYXRlICovCisJLyogUG93ZXIgbGV2ZWwgZm9yIDU0TWJpdCByYXRlIG9yCisJICogMTFNYml0IHJhdGUgKi8KIAl1MTYJdGFyZ2V0X3Bvd2VyXzU0OwogfTsKIApAQCAtMzI5LDEyICszODAsNiBAQAogCXUxNgllZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YTsKIAl1MTYJZWVfc2NhbGVkX2Nja19kZWx0YTsKIAotCS8qIFVzZWQgZm9yIHR4IHRoZXJtYWwgYWRqdXN0bWVudCAoZWVwcm9tX2luaXQsIHJmcmVncykgKi8KLQl1MTYJZWVfdHhfY2xpcDsKLQl1MTYJZWVfcHdkXzg0OwotCXUxNgllZV9wd2RfOTA7Ci0JdTE2CWVlX2dhaW5fc2VsZWN0OwotCiAJLyogUkYgQ2FsaWJyYXRpb24gc2V0dGluZ3MgKHJlc2V0LCByZnJlZ3MpICovCiAJdTE2CWVlX2lfY2FsW0FSNUtfRUVQUk9NX05fTU9ERVNdOwogCXUxNgllZV9xX2NhbFtBUjVLX0VFUFJPTV9OX01PREVTXTsKQEAgLTM2MiwyMyArNDA3LDI1IEBACiAJLyogUG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLwogCXUxNgllZV9mYWxzZV9kZXRlY3RbQVI1S19FRVBST01fTl9NT0RFU107CiAKLQkvKiBOdW1iZXIgb2YgcGQgZ2FpbiBjdXJ2ZXMgcGVyIG1vZGUgKFJGMjQxMykgKi8KLQl1OCBlZV9wZF9nYWluc1tBUjVLX0VFUFJPTV9OX01PREVTXTsKKwkvKiBOdW1iZXIgb2YgcGQgZ2FpbiBjdXJ2ZXMgcGVyIG1vZGUgKi8KKwl1OAllZV9wZF9nYWluc1tBUjVLX0VFUFJPTV9OX01PREVTXTsKKwkvKiBCYWNrIG1hcHBpbmcgcGRjdXJ2ZSBudW1iZXIgLT4gcGRjdXJ2ZSBpbmRleCBpbiBwZC0+cGRfY3VydmVzICovCisJdTgJZWVfcGRjX3RvX2lkeFtBUjVLX0VFUFJPTV9OX01PREVTXVtBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXTsKIAotCXU4IGVlX25fcGllcnNbQVI1S19FRVBST01fTl9NT0RFU107CisJdTgJZWVfbl9waWVyc1tBUjVLX0VFUFJPTV9OX01PREVTXTsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8JZWVfcHdyX2NhbF9hW0FSNUtfRUVQUk9NX05fNUdIWl9DSEFOXTsKLQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8JZWVfcHdyX2NhbF9iW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOXTsKLQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8JZWVfcHdyX2NhbF9nW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOXTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8JZWVfcHdyX2NhbF9iW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOX01BWF07CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfZ1tBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOwogCiAJLyogUGVyIHJhdGUgdGFyZ2V0IHBvd2VyIGxldmVscyAqLwotCXUxNgllZV9yYXRlX3RhcmdldF9wd3JfbnVtW0FSNUtfRUVQUk9NX05fTU9ERVNdOworCXU4CWVlX3JhdGVfdGFyZ2V0X3B3cl9udW1bQVI1S19FRVBST01fTl9NT0RFU107CiAJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvCWVlX3JhdGVfdHB3cl9hW0FSNUtfRUVQUk9NX05fNUdIWl9DSEFOXTsKLQlzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8JZWVfcmF0ZV90cHdyX2JbQVI1S19FRVBST01fTl8yR0haX0NIQU5dOwotCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfZ1tBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl07CisJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvCWVlX3JhdGVfdHB3cl9iW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOX01BWF07CisJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvCWVlX3JhdGVfdHB3cl9nW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOX01BWF07CiAKIAkvKiBDb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyAoVW51c2VkKSAqLwotCXUxNgllZV9jdGxzOwotCXUxNgllZV9jdGxbQVI1S19FRVBST01fTUFYX0NUTFNdOworCXU4CWVlX2N0bHM7CisJdTgJZWVfY3RsW0FSNUtfRUVQUk9NX01BWF9DVExTXTsKIAlzdHJ1Y3QgYXRoNWtfZWRnZV9wb3dlciBlZV9jdGxfcHdyW0FSNUtfRUVQUk9NX05fRURHRVMgKiBBUjVLX0VFUFJPTV9NQVhfQ1RMU107CiAKIAkvKiBOb2lzZSBGbG9vciBDYWxpYnJhdGlvbiBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZ3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZ3Bpby5jCmluZGV4IGI3NzIwNWEuLjY0YTI3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMKQEAgLTgzLDcgKzgzLDcgQEAKIGludCBhdGg1a19od19zZXRfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKQEAgLTk5LDcgKzk5LDcgQEAKIGludCBhdGg1a19od19zZXRfZ3Bpb19vdXRwdXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsCkBAIC0xMTUsNyArMTE1LDcgQEAKIHUzMiBhdGg1a19od19nZXRfZ3BpbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gMHhmZmZmZmZmZjsKIAogCS8qIEdQSU8gaW5wdXQgbWFnaWMgKi8KQEAgLTEzMSw3ICsxMzEsNyBAQAogCXUzMiBkYXRhOwogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBHUElPIG91dHB1dCBtYWdpYyAqLwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJdTMyIGRhdGE7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm47CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMKaW5kZXggNDUwYmQ2ZS4uNjFmYjYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jCkBAIC0yLDcgKzIsNyBAQAogICogSW5pdGlhbCByZWdpc3RlciBzZXR0aW5ncyBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNyBSZXlrIEZsb2V0ZXIgPHJleWtAb3BlbmJzZC5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQpAQCAtMzQwLDcgKzM0MCw3IEBACiAJICogY29tbW9uIG9uIGFsbCBjYXJkcy9tb2Rlcy4KIAkgKiBOb3RlOiBUYWJsZSBpcyByZXdyaXR0ZW4gZHVyaW5nCiAJICogdHhwb3dlciBzZXR1cCBsYXRlciB1c2luZyBjYWxpYnJhdGlvbgotCSAqIGRhdGEgZXRjLiBzbyBuZXh0IHdyaXRlIGlzIG5vbi1jb21tb24KKwkgKiBkYXRhIGV0Yy4gc28gbmV4dCB3cml0ZSBpcyBub24tY29tbW9uICovCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDEpLCAweDA2ZmYwNWZmIH0sCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDIpLCAweDA3ZmYwN2ZmIH0sCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMpLCAweDA4ZmYwOGZmIH0sCkBAIC0zNzEsNyArMzcxLDcgQEAKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMjgpLCAweDNhZmYzYWZmIH0sCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDI5KSwgMHgzYWZmM2FmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzMCksIDB4M2FmZjNhZmYgfSwKLQl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMzEpLCAweDNhZmYzYWZmIH0sKi8KKwl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMzEpLCAweDNhZmYzYWZmIH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19QSFkoNjQyKSwgMHg1MDNlNDY0NiB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLCAweDY0ODA0MTZjIH0sCkBAIC0zODYsODUgKzM4Niw4NSBAQAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTEKLSAqIFhYWDogaG93IGFib3V0IGcgLyBnVHVyYm8gPyBSRjUxMTEgc3VwcG9ydHMgaXQsIGhvdyBhYm91dCBBUjUyMTEgPwotICogTWF5YmUgNTIxMSBzdXBwb3J0cyBPRkRNLW9ubHkgZyBidXQgd2UgbmVlZCB0byB0ZXN0IGl0ICEKKyAqIDUyMTEgc3VwcG9ydHMgT0ZETS1vbmx5IGcgKGRyYWZ0IGcpIGJ1dCB3ZQorICogbmVlZCB0byB0ZXN0IGl0ICEKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTFfaW5pX21vZGVbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICBhCSAgICAgIGFUdXJibwkgIGIJCSovCi0JCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxZCB9IH0sCisJLyoJICBhCSAgICBhVHVyYm8JICBiCSAgZyAoT0ZETSkgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDApLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygyKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDMpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg1KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDYpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg4KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDkpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NMT1QsCi0JCXsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCB9IH0sCisJICAgeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4LCAweDAwMDAwMTY4IH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0lGUywKLQkJeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwIH0gfSwKKwkgICB7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAsIDB4MDAwMDAyMzAgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19FSUZTLAotCQl7IDB4MDAwMDBkOTgsIDB4MDAwMDExODAsIDB4MDAwMDFmNDggfSB9LAorCSAgIHsgMHgwMDAwMGQ5OCwgMHgwMDAwMTE4MCwgMHgwMDAwMWY0OCwgMHgwMDAwMGQ5OCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX01JU0MsCi0JCXsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCB9IH0sCisJICAgeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwLCAweDAwMDBhMGUwIH0gfSwKIAl7IEFSNUtfVElNRV9PVVQsCi0JCXsgMHgwNDAwMDQwMCwgMHgwODAwMDgwMCwgMHgyMDAwMzAwMCB9IH0sCisJICAgeyAweDA0MDAwNDAwLCAweDA4MDAwODAwLCAweDIwMDAzMDAwLCAweDA0MDAwNDAwIH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MGU4ZDhmYTcsIDB4MGU4ZDhmY2YsIDB4MDE2MDhmOTUgfSB9LAorCSAgIHsgMHgwZThkOGZhNywgMHgwZThkOGZjZiwgMHgwMTYwOGY5NSwgMHgwZThkOGZhNyB9IH0sCiAJeyBBUjVLX1BIWV9UVVJCTywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAogCXsgQVI1S19QSFkoOCksCi0JCXsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCB9IH0sCisJICAgeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwLCAweDAyMDIwMjAwIH0gfSwKIAl7IEFSNUtfUEhZKDkpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcgfSB9LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSB9IH0sCiAJeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDAwMCB9IH0sCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDEwMDAwLCAweDBhMDIwMDAxIH0gfSwKIAl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAogCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIgfSB9LAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCiAJeyBBUjVLX1BIWSgxNyksCi0JCXsgMHgxMzcyMTY5YywgMHgxMzcyMTZhNSwgMHgxMzcyMTZhOCB9IH0sCisJICAgeyAweDEzNzIxNjljLCAweDEzNzIxNmE1LCAweDEzNzIxNmE4LCAweDEzNzIxNjljIH0gfSwKIAl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThiYTY3LCAweDAwMThiYTY3LCAweDAwMThiYTY5IH0gfSwKKwkgICB7IDB4MDAxOGJhNjcsIDB4MDAxOGJhNjcsIDB4MDAxOGJhNjksIDB4MDAxOGJhNjkgfSB9LAogCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAgfSB9LAorCSAgIHsgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWMwMGQyZSB9IH0sCisJICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlYzAwZDJlLCAweDdlODAwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzc1ZDVlLCAweDMxMzc1ZDVlLCAweDMxM2E1ZDVlIH0gfSwKKwkgICB7IDB4MzEzNzVkNWUsIDB4MzEzNzVkNWUsIDB4MzEzYTVkNWUsIDB4MzEzNzVkNWUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ1RMLAotCQl7IDB4MDAwMGJkMTAsIDB4MDAwMGJkMTAsIDB4MDAwMGJkMzggfSB9LAorCSAgIHsgMHgwMDAwYmQxMCwgMHgwMDAwYmQxMCwgMHgwMDAwYmQzOCwgMHgwMDAwYmQxMCB9IH0sCiAJeyBBUjVLX1BIWV9ORiwKLQkJeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKKwkgICB7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YyB9IH0sCisJICAgeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyNzEwIH0gfSwKIAl7IEFSNUtfUEhZKDcwKSwKLQkJeyAweDAwMDAwMTkwLCAweDAwMDAwMTkwLCAweDAwMDAwMDg0IH0gfSwKKwkgICB7IDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIDB4MDAwMDAwODQsIDB4MDAwMDAxOTAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHg2ZmUwMTAyMCwgMHg2ZmUwMTAyMCwgMHg2ZmUwMDkyMCB9IH0sCi0JeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMSwKLQkJeyAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmIH0gfSwKKwkgICB7IDB4NmZlMDEwMjAsIDB4NmZlMDEwMjAsIDB4NmZlMDA5MjAsIDB4NmZlMDEwMjAgfSB9LAorCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFLAorCSAgIHsgMHgwNWZmMTRmZiwgMHgwNWZmMTRmZiwgMHgwNWZmMTRmZiwgMHgwNWZmMTlmZiB9IH0sCiAJeyBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JCXsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCB9IH0sCisJICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKIH07CiAKIC8qIEluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZm9yIEFSNTIxMiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgYXI1MjEyX2luaVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgYXI1MjEyX2luaV9jb21tb25fc3RhcnRbXSA9IHsKIAl7IEFSNUtfUlhEUCwJCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUlhDRkcsCQkweDAwMDAwMDA1IH0sCiAJeyBBUjVLX01JQkMsCQkweDAwMDAwMDAwIH0sCkBAIC00ODUsOTEgKzQ4NSw4MyBAQAogCXsgQVI1S19RVUVVRV9UWERQKDkpLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfRENVX1RYUCwJCTB4MDAwMDAwMDAgfSwKLQl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wX0JBU0UsCTB4MDAwMDAwMDAgfSwKLQkvKiBVbmtub3duIHRhYmxlICovCi0JeyAweDEwNzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTBiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDExMzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTE3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMWI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDExZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTIzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMzM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzNzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTNiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2Y4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE0MzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQ3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNGI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE0ZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTUzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNTc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTVmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNjM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTZiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNmY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE3MzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTc3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxN2I4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE3ZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTAzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMDdjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEwYmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTBmYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMWZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEyM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTI3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmJjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEyZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTMzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMzdjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzYmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTNmYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDE0N2MsIDB4MDAwMDAwMDAgfSwKKwkvKiBUeCBmaWx0ZXIgdGFibGUgMCAoMzIgZW50cmllcykgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDApLCAgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgMCAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDMpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoNCksICAweDAwMDAwMDAwIH0sIC8qIERDVSAxICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg1KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDYpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoNyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg4KSwgIDB4MDAwMDAwMDAgfSwgLyogRENVIDIgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDkpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTApLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEyKSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgMyAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTMpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxNCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE1KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTYpLCAweDAwMDAwMDAwIH0sIC8qIERDVSA0ICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxNyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE4KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTkpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyMCksIDB4MDAwMDAwMDAgfSwgLyogRENVIDUgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIxKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjIpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyMyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI0KSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNiAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjUpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNiksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI3KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjgpLCAweDAwMDAwMDAwIH0sIC8qIERDVSA3ICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyOSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDMwKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMzEpLCAweDAwMDAwMDAwIH0sCisJLyogVHggZmlsdGVyIHRhYmxlIDEgKDE2IGVudHJpZXMpICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgwKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDEpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgzKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDQpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg2KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDcpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoOCksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg5KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDEwKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMiksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDEzKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTQpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxNSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl9DTFIsIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl9TRVQsIDB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfRENVX1RYX0ZJTFRFUl9DTFIsIDB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfRENVX1RYX0ZJTFRFUl9TRVQsIDB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfU1RBX0lEMSwJCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQlNTX0lEMCwJCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQlNTX0lEMSwJCTB4MDAwMDAwMDAgfSwKLQkvKnsgQVI1S19SU1NJX1RIUiwJMHgwMDAwMDAwMCB9LCovCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfQkVBQ09OXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19DRlBfUEVSSU9EXzUyMTEsIDB4MDAwMDAwMDAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19USU1FUjBfNTIxMSwJMHgwMDAwMDAzMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSMV81MjExLAkweDAwMDdmZmZmIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIyXzUyMTEsCTB4MDFmZmZmZmYgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19USU1FUjNfNTIxMSwJMHgwMDAwMDAzMSB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX0NGUF9EVVJfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCisJeyBBUjVLX0JFQUNPTl81MjExLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX0NGUF9QRVJJT0RfNTIxMSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19USU1FUjBfNTIxMSwJMHgwMDAwMDAzMCB9LAorCXsgQVI1S19USU1FUjFfNTIxMSwJMHgwMDA3ZmZmZiB9LAorCXsgQVI1S19USU1FUjJfNTIxMSwJMHgwMWZmZmZmZiB9LAorCXsgQVI1S19USU1FUjNfNTIxMSwJMHgwMDAwMDAzMSB9LAorCXsgQVI1S19DRlBfRFVSXzUyMTEsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUlhfRklMVEVSXzUyMTEsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfRElBR19TV181MjExLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0FEREFDX1RFU1QsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfREVGQVVMVF9BTlRFTk5BLAkweDAwMDAwMDAwIH0sCi0JeyAweDgwODAsIDB4MDAwMDAwMDAgfSwKLQkvKnsgMHg4MDVjLCAweGZmZmZjN2ZmIH0sKi8gLyogT2xkIHZhbHVlICovCi0JeyAweDgwNWMsIDB4MDAwZmM3OGYgfSwKLQl7IEFSNUtfTkFWXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogTm90IGZvdW5kIG9uIHJlY2VudCAqLwotCXsgQVI1S19SVFNfT0tfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBkdW1wcyBidXQgaXQgbWFrZXMgICovCi0JeyBBUjVLX1JUU19GQUlMXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogc2Vuc2UgdG8gcmVzZXQgY291bnRlcnMgKi8KLQl7IEFSNUtfQUNLX0ZBSUxfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBzaW5jZSBwY3UgcmVnaXN0ZXJzICovCi0JeyBBUjVLX0ZDU19GQUlMXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogYXJlIHNraXBlZCBkdXJpbmcgY2hhbiovCi0JeyBBUjVLX0JFQUNPTl9DTlRfNTIxMSwgMHgwMDAwMDAwMCB9LAkvKiBjaGFuZ2UgKi8KKwl7IEFSNUtfRlJBTUVfQ1RMX1FPU00sIAkweDAwMGZjNzhmIH0sCiAJeyBBUjVLX1hSTU9ERSwJCTB4MmE4MjMwMWEgfSwKIAl7IEFSNUtfWFJERUxBWSwJCTB4MDVkYzAxZTAgfSwKIAl7IEFSNUtfWFJUSU1FT1VULAkweDFmNDAyNzEwIH0sCiAJeyBBUjVLX1hSQ0hJUlAsCQkweDAxZjQwMDAwIH0sCiAJeyBBUjVLX1hSU1RPTVAsCQkweDAwMDAxZTFjIH0sCi0JeyBBUjVLX1NMRUVQMCwJCTB4MDAwMmFhYWEgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19TTEVFUDEsCQkweDAyMDA1NTU1IH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfU0xFRVAyLAkJMHgwMDAwMDAwMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCisJeyBBUjVLX1NMRUVQMCwJCTB4MDAwMmFhYWEgfSwKKwl7IEFSNUtfU0xFRVAxLAkJMHgwMjAwNTU1NSB9LAorCXsgQVI1S19TTEVFUDIsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JTU19JRE0wLAkweGZmZmZmZmZmIH0sCiAJeyBBUjVLX0JTU19JRE0xLAkweDAwMDBmZmZmIH0sCiAJeyBBUjVLX1RYUEMsCQkweDAwMDAwMDAwIH0sCkBAIC01NzcsNyArNTY5LDggQEAKIAl7IEFSNUtfUFJPRkNOVF9SWCwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19QUk9GQ05UX1JYQ0xSLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BST0ZDTlRfQ1lDTEUsCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODBmYywgMHgwMDAwMDA4OCB9LAorCXsgQVI1S19RVUlFVF9DVEwxLAkweDAwMDAwMDg4IH0sCisJLyogSW5pdGlhbCByYXRlIGR1cmF0aW9uIHRhYmxlICgzMiBlbnRyaWVzICkqLwogCXsgQVI1S19SQVRFX0RVUigwKSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19SQVRFX0RVUigxKSwJMHgwMDAwMDA4YyB9LAogCXsgQVI1S19SQVRFX0RVUigyKSwJMHgwMDAwMDBlNCB9LApAQCAtNjEwLDg4MSArNjAzLDYyNSBAQAogCXsgQVI1S19SQVRFX0RVUigyOSksCTB4MDAwMDAwN2YgfSwKIAl7IEFSNUtfUkFURV9EVVIoMzApLAkweDAwMDAwMGEyIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDMxKSwJMHgwMDAwMDAwMCB9LAotCXsgMHg4MTAwLCAweDAwMDEwMDAyfSwKKwl7IEFSNUtfUVVJRVRfQ1RMMiwJMHgwMDAxMDAwMiB9LAogCXsgQVI1S19UU0ZfUEFSTSwJMHgwMDAwMDAwMSB9LAotCXsgMHg4MTA4LCAweDAwMDAwMGMwIH0sCisJeyBBUjVLX1FPU19OT0FDSywJMHgwMDAwMDBjMCB9LAogCXsgQVI1S19QSFlfRVJSX0ZJTCwJMHgwMDAwMDAwMCB9LAotCXsgMHg4MTEwLCAweDAwMDAwMTY4IH0sCi0JeyAweDgxMTQsIDB4MDAwMDAwMDAgfSwKLQkvKiBTb21lIGtpbmQgb2YgdGFibGUKLQkgKiBhbHNvIG5vdGljZSAuLi4wMzwtMDI8LTAxPC0wMCkgKi8KLQl7IDB4ODdjMCwgMHgwMzAyMDEwMCB9LAotCXsgMHg4N2M0LCAweDA3MDYwNTA0IH0sCi0JeyAweDg3YzgsIDB4MGIwYTA5MDggfSwKLQl7IDB4ODdjYywgMHgwZjBlMGQwYyB9LAotCXsgMHg4N2QwLCAweDEzMTIxMTEwIH0sCi0JeyAweDg3ZDQsIDB4MTcxNjE1MTQgfSwKLQl7IDB4ODdkOCwgMHgxYjFhMTkxOCB9LAotCXsgMHg4N2RjLCAweDFmMWUxZDFjIH0sCi0JLyogbG9vcCA/ICovCi0JeyAweDg3ZTAsIDB4MDMwMjAxMDAgfSwKLQl7IDB4ODdlNCwgMHgwNzA2MDUwNCB9LAotCXsgMHg4N2U4LCAweDBiMGEwOTA4IH0sCi0JeyAweDg3ZWMsIDB4MGYwZTBkMGMgfSwKLQl7IDB4ODdmMCwgMHgxMzEyMTExMCB9LAotCXsgMHg4N2Y0LCAweDE3MTYxNTE0IH0sCi0JeyAweDg3ZjgsIDB4MWIxYTE5MTggfSwKLQl7IDB4ODdmYywgMHgxZjFlMWQxYyB9LAotCS8qIFBIWSByZWdpc3RlcnMgKi8KLQkvKnsgQVI1S19QSFlfQUdDLCAweDAwMDAwMDAwIH0sKi8KLQl7IEFSNUtfUEhZKDMpLAkweGFkODQ4ZTE5IH0sCi0JeyBBUjVLX1BIWSg0KSwJMHg3ZDI4ZTAwMCB9LAotCXsgQVI1S19QSFlfVElNSU5HXzMsIDB4OWMwYTlmNmIgfSwKLQl7IEFSNUtfUEhZX0FDVCwJMHgwMDAwMDAwMCB9LAotCS8qeyBBUjVLX1BIWSgxMSksIDB4MDAwMjJmZmUgfSwqLwotCS8qeyBBUjVLX1BIWSgxNSksIDB4MDAwMjAxMDAgfSwqLwotCXsgQVI1S19QSFkoMTYpLAkweDIwNmEwMTdhIH0sCi0JLyp7IEFSNUtfUEhZKDE5KSwgMHgxMjg0NjEzYyB9LCovCi0JeyBBUjVLX1BIWSgyMSksCTB4MDAwMDA4NTkgfSwKLQl7IEFSNUtfUEhZKDY0KSwJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19QSFkoNjUpLAkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2NiksCTB4MDAwMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY3KSwJMHgwMDgwMDAwMCB9LAotCXsgQVI1S19QSFkoNjgpLAkweDAwMDAwMDAxIH0sCisJeyBBUjVLX1hSTEFUX1RYLAkweDAwMDAwMTY4IH0sCisJeyBBUjVLX0FDS1NJRlMsCQkweDAwMDAwMDAwIH0sCisJLyogUmF0ZSAtPiBkYiB0YWJsZQorCSAqIG5vdGljZSAuLi4wMzwtMDI8LTAxPC0wMCAhICovCisJeyBBUjVLX1JBVEUyREIoMCksCTB4MDMwMjAxMDAgfSwKKwl7IEFSNUtfUkFURTJEQigxKSwJMHgwNzA2MDUwNCB9LAorCXsgQVI1S19SQVRFMkRCKDIpLAkweDBiMGEwOTA4IH0sCisJeyBBUjVLX1JBVEUyREIoMyksCTB4MGYwZTBkMGMgfSwKKwl7IEFSNUtfUkFURTJEQig0KSwJMHgxMzEyMTExMCB9LAorCXsgQVI1S19SQVRFMkRCKDUpLAkweDE3MTYxNTE0IH0sCisJeyBBUjVLX1JBVEUyREIoNiksCTB4MWIxYTE5MTggfSwKKwl7IEFSNUtfUkFURTJEQig3KSwJMHgxZjFlMWQxYyB9LAorCS8qIERiIC0+IFJhdGUgdGFibGUgKi8KKwl7IEFSNUtfREIyUkFURSgwKSwJMHgwMzAyMDEwMCB9LAorCXsgQVI1S19EQjJSQVRFKDEpLAkweDA3MDYwNTA0IH0sCisJeyBBUjVLX0RCMlJBVEUoMiksCTB4MGIwYTA5MDggfSwKKwl7IEFSNUtfREIyUkFURSgzKSwJMHgwZjBlMGQwYyB9LAorCXsgQVI1S19EQjJSQVRFKDQpLAkweDEzMTIxMTEwIH0sCisJeyBBUjVLX0RCMlJBVEUoNSksCTB4MTcxNjE1MTQgfSwKKwl7IEFSNUtfREIyUkFURSg2KSwJMHgxYjFhMTkxOCB9LAorCXsgQVI1S19EQjJSQVRFKDcpLAkweDFmMWUxZDFjIH0sCisJLyogUEhZIHJlZ2lzdGVycyAoQ29tbW9uIHNldHRpbmdzCisJICogZm9yIGFsbCBjaGlwcy9tb2RlcykgKi8KKwl7IEFSNUtfUEhZKDMpLAkJMHhhZDg0OGUxOSB9LAorCXsgQVI1S19QSFkoNCksCQkweDdkMjhlMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfMywJMHg5YzBhOWY2YiB9LAorCXsgQVI1S19QSFlfQUNULAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFkoMTYpLAkJMHgyMDZhMDE3YSB9LAorCXsgQVI1S19QSFkoMjEpLAkJMHgwMDAwMDg1OSB9LAorCXsgQVI1S19QSFlfQklOX01BU0tfMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQklOX01BU0tfMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQklOX01BU0tfMywJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQklOX01BU0tfQ1RMLCAweDAwODAwMDAwIH0sCisJeyBBUjVLX1BIWV9BTlRfQ1RMLAkweDAwMDAwMDAxIH0sCiAJLyp7IEFSNUtfUEhZKDcxKSwgMHgwMDAwMDkyYSB9LCovIC8qIE9sZCB2YWx1ZSAqLwotCXsgQVI1S19QSFkoNzEpLAkweDAwMDAwYzgwIH0sCi0JeyBBUjVLX1BIWV9JUSwJMHgwNTEwMDAwMCB9LAotCXsgQVI1S19QSFkoNzQpLCAweDAwMDAwMDAxIH0sCi0JeyBBUjVLX1BIWSg3NSksIDB4MDAwMDAwMDQgfSwKKwl7IEFSNUtfUEhZX01BWF9SWF9MRU4sCTB4MDAwMDBjODAgfSwKKwl7IEFSNUtfUEhZX0lRLAkJMHgwNTEwMDAwMCB9LAorCXsgQVI1S19QSFlfV0FSTV9SRVNFVCwJMHgwMDAwMDAwMSB9LAorCXsgQVI1S19QSFlfQ1RMLAkJMHgwMDAwMDAwNCB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMSwgMHgxZTFmMjAyMiB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMiwgMHgwYTBiMGMwZCB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFX01BWCwgMHgwMDAwMDAzZiB9LAotCS8qeyBBUjVLX1BIWSg4MCksIDB4MDAwMDAwMDQgfSwqLwotCXsgQVI1S19QSFkoODIpLCAweDkyODBiMjEyIH0sCi0JeyBBUjVLX1BIWV9SQURBUiwgMHg1ZDUwZTE4OCB9LAorCXsgQVI1S19QSFkoODIpLAkJMHg5MjgwYjIxMiB9LAorCXsgQVI1S19QSFlfUkFEQVIsCTB4NWQ1MGUxODggfSwKIAkvKnsgQVI1S19QSFkoODYpLCAweDAwMDAwMGZmIH0sKi8KLQl7IEFSNUtfUEhZKDg3KSwgMHgwMDRiNmE4ZSB9LAotCXsgQVI1S19QSFkoOTApLAkweDAwMDAwM2NlIH0sCi0JeyBBUjVLX1BIWSg5MiksCTB4MTkyZmI1MTUgfSwKLQkvKnsgQVI1S19QSFkoOTMpLCAweDAwMDAwMDAwIH0sKi8KLQl7IEFSNUtfUEhZKDk0KSwJMHgwMDAwMDAwMSB9LAotCXsgQVI1S19QSFkoOTUpLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWSg4NyksCQkweDAwNGI2YThlIH0sCisJeyBBUjVLX1BIWV9ORlRIUkVTLAkweDAwMDAwM2NlIH0sCisJeyBBUjVLX1BIWV9SRVNUQVJULAkweDE5MmZiNTE1IH0sCisJeyBBUjVLX1BIWSg5NCksCQkweDAwMDAwMDAxIH0sCisJeyBBUjVLX1BIWV9SRkJVU19SRVEsCTB4MDAwMDAwMDAgfSwKIAkvKnsgQVI1S19QSFkoNjQ0KSwgMHgwMDgwYTMzMyB9LCovIC8qIE9sZCB2YWx1ZSAqLwogCS8qeyBBUjVLX1BIWSg2NDUpLCAweDAwMjA2YzEwIH0sKi8gLyogT2xkIHZhbHVlICovCi0JeyBBUjVLX1BIWSg2NDQpLCAweDAwODA2MzMzIH0sCi0JeyBBUjVLX1BIWSg2NDUpLCAweDAwMTA2YzEwIH0sCi0JeyBBUjVLX1BIWSg2NDYpLCAweDAwOWM0MDYwIH0sCi0JeyBBUjVLX1BIWSg2NDcpLCAweDE0ODM4MDBhIH0sCi0JLyogeyBBUjVLX1BIWSg2NDgpLCAweDAxODgzMGM2IH0sKi8gLyogMjQxMy8yNDI1ICovCi0JeyBBUjVLX1BIWSg2NDgpLCAweDAxODMxMDYxIH0sCi0JeyBBUjVLX1BIWSg2NDkpLCAweDAwMDAwNDAwIH0sCisJeyBBUjVLX1BIWSg2NDQpLAkweDAwODA2MzMzIH0sCisJeyBBUjVLX1BIWSg2NDUpLAkweDAwMTA2YzEwIH0sCisJeyBBUjVLX1BIWSg2NDYpLAkweDAwOWM0MDYwIH0sCisJLyogeyBBUjVLX1BIWSg2NDcpLCAweDE0ODM4MDBhIH0sICovCisJLyogeyBBUjVLX1BIWSg2NDgpLCAweDAxODMxMDYxIH0sICovIC8qIE9sZCB2YWx1ZSAqLworCXsgQVI1S19QSFkoNjQ4KSwJMHgwMTg4MzBjNiB9LAorCXsgQVI1S19QSFkoNjQ5KSwJMHgwMDAwMDQwMCB9LAogCS8qeyBBUjVLX1BIWSg2NTApLCAweDAwMDAwMWI1IH0sKi8KLQl7IEFSNUtfUEhZKDY1MSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZKDY1MSksCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTMsIDB4MjAyMDIwMjAgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTIsIDB4MjAyMDIwMjAgfSwKIAkvKnsgQVI1S19QSFkoNjU1KSwgMHgxM2M4ODlhZiB9LCovCi0JeyBBUjVLX1BIWSg2NTYpLCAweDM4NDkwYTIwIH0sCi0JeyBBUjVLX1BIWSg2NTcpLCAweDAwMDA3YmI2IH0sCi0JeyBBUjVLX1BIWSg2NTgpLCAweDBmZmYzZmZjIH0sCi0JLyp7IEFSNUtfUEhZX0NDS1RYQ1RMLCAweDAwMDAwMDAwIH0sKi8KKwl7IEFSNUtfUEhZKDY1NiksCTB4Mzg0OTBhMjAgfSwKKwl7IEFSNUtfUEhZKDY1NyksCTB4MDAwMDdiYjYgfSwKKwl7IEFSNUtfUEhZKDY1OCksCTB4MGZmZjNmZmMgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjEyIChXcml0dGVuIGJlZm9yZSBhcjUyMTJfaW5pKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTJfaW5pX21vZGVfc3RhcnRbXSA9IHsKLQl7IEFSNUtfUEhZKDY0MCksCi0JLyoJICBhL1hSCSAgICAgIGFUdXJibwkgIGIJICAgICAgZyAoRFlOKQkgIGdUdXJibyAqLwotCQl7IDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19QSFkoMCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDEpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygzKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDQpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg2KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDcpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg5KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TSUZTLAotCQl7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSB9LAorCSAgIHsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NMT1QsCi0JCXsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9IH0sCisJICAgeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfRUlGUywKLQkJeyAweDAwMDAwZTYwLCAweDAwMDAxMTgwLCAweDAwMDAxZjFjLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0gfSwKKwkgICB7IDB4MDAwMDBlNjAsIDB4MDAwMDExODAsIDB4MDAwMDFmMWMsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19NSVNDLAotCQl7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAsIDB4MDAwMGIwZTAsIDB4MDAwMTQwNjggfSB9LAorCSAgIHsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCwgMHgwMDAwYjBlMCwgMHgwMDAxNDA2OCB9IH0sCiAJeyBBUjVLX1RJTUVfT1VULAotCQl7IDB4MDNlODAzZTgsIDB4MDZlMDA2ZTAsIDB4MDQyMDA0MjAsIDB4MDg0MDA4NDAsIDB4MDZlMDA2ZTAgfSB9LAorCSAgIHsgMHgwM2U4MDNlOCwgMHgwNmUwMDZlMCwgMHgwNDIwMDQyMCwgMHgwODQwMDg0MCwgMHgwNmUwMDZlMCB9IH0sCiAJeyBBUjVLX1BIWV9UVVJCTywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAogCXsgQVI1S19QSFkoOCksCi0JCXsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9IH0sCi0JeyBBUjVLX1BIWSg5KSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE3KSwKLQkJeyAweDEzNzIxNjFjLCAweDEzNzIxYzI1LCAweDEzNzIxNzIyLCAweDEzNzIxNmEyLCAweDEzNzIxYzI1IH0gfSwKKwkgICB7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMiwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfU0VUVExJTkcsCisJICAgeyAweDEzNzIxNjFjLCAweDEzNzIxYzI1LCAweDEzNzIxNzIyLCAweDEzNzIxNmEyLCAweDEzNzIxYzI1IH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NUTCwKLQkJeyAweDAwMDA5ZDEwLCAweDAwMDA5ZDEwLCAweDAwMDA5ZDE4LCAweDAwMDA5ZDE4LCAweDAwMDA5ZDE4IH0gfSwKKwkgICB7IDB4MDAwMDlkMTAsIDB4MDAwMDlkMTAsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTggfSB9LAogCXsgQVI1S19QSFlfTkYsCi0JCXsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCi0JeyBBUjVLX1BIWSgyNiksCi0JCXsgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCB9IH0sCisJICAgeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9ISUdIX1RIUiwKKwkgICB7IDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAgfSB9LAogCXsgQVI1S19QSFkoNzApLAotCQl7IDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwODQsIDB4MDAwMDAxMDgsIDB4MDAwMDAxYjggfSB9LAotCXsgQVI1S19QSFkoNzMpLAotCQl7IDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUgfSB9LAorCSAgIHsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDA4NCwgMHgwMDAwMDEwOCwgMHgwMDAwMDFiOCB9IH0sCisJeyBBUjVLX1BIWV9PRkRNX1NFTEZDT1JSLAorCSAgIHsgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSB9IH0sCiAJeyAweGEyMzAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0gfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjEyICsgUkY1MTExIChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBOZXcgZHVtcCBwZW5kaW5nICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIGFyNTIxMl9yZjUxMTFfaW5pX21vZGVfZW5kW10gPSB7Ci0JeyBBUjVLX1BIWSg2NDApLCAvKiBUaGlzIG9uZSBkaWZmZXJzIGZyb20gYXI1MjEyX2luaV9tb2RlX3N0YXJ0ICEgKi8KLQkvKgkgIGEvWFIJICAgICAgYVR1cmJvCSAgYgkgICAgICBnIChEWU4pCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwNiwgMHgwMDAwMDAwNiB9IH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmNTExMV9pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JCXsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMjhkOGZhNywgMHgwOTg4MGZjZiwgMHgwNGUwMGY5NSwgMHgxMmUwMGZhYiwgMHgwOTg4MGZjZiB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4ZGE1YSwgMHgwMDE4ZGE1YSwgMHgwMDE4Y2E2OSwgMHgwMDE4Y2E2OSwgMHgwMDE4Y2E2OSB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCisJICAgeyAweDEyOGQ4ZmE3LCAweDA5ODgwZmNmLCAweDA0ZTAwZjk1LCAweDEyZTAwZmFiLCAweDA5ODgwZmNmIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDEwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGRhNWEsIDB4MDAxOGRhNWEsIDB4MDAxOGNhNjksIDB4MDAxOGNhNjksIDB4MDAxOGNhNjkgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZTgwMGQyZSB9IH0sCisJICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTg0ZDJlLCAweDdlZTg0ZDJlLCAweDdlODAwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2MTVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgwLCAweDA1MGNiMDgwIH0gfSwKKwkgICB7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzYxNWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgwLCAweDA1MGNiMDgwIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MsIDB4MDAwMDJhZjgsIDB4MDAwMDI3MTAgfSB9LAorCSAgIHsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YywgMHgwMDAwMmFmOCwgMHgwMDAwMjcxMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDIwLCAweGY3YjgxMDIwLCAweGY3YjgxMDIwIH0gfSwKKwkgICB7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAgfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4NjQyYzQxNmEsIDB4NjQyYzQxNmEsIDB4NjQ0MDQxNmEsIDB4NjQ0MDQxNmEsIDB4NjQ0MDQxNmEgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0NjEzYywgMHgxMjg0NjEzYywgMHgxMjg0NjEzYywgMHgxMjg0NjEzYywgMHgxMjg0NjEzYyB9IH0sCi0JeyBBUjVLX1BIWV9QQVBEX1BST0JFLAotCQl7IDB4MDAwMDQ4ODMsIDB4MDAwMDQ4ODMsIDB4MDAwMDQ4ODMsIDB4MDAwMDQ4ODMsIDB4MDAwMDQ4ODMgfSB9LAotCXsgQVI1S19QSFkoODApLAotCQl7IDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSB9LAotCXsgQVI1S19QSFkoODYpLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFkoOTMpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfU1BFTkRJTkcsCi0JCXsgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCB9IH0sCi0JeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiB9IH0sCisJICAgeyAweDY0MmM0MTZhLCAweDY0MmM0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1MTExX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywgCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsIAkweDAwMDIyZmZlIH0sCisJeyAweDk4M2MsIAkJMHgwMDAyMDEwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsCTB4MTI4NDYxM2MgfSwKKwl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCTB4MDAwMDQ4ODMgfSwKKwl7IDB4OTk0MCwJCTB4MDAwMDAwMDQgfSwKKwl7IDB4OTk1OCwJCTB4MDAwMDAwZmYgfSwKKwl7IDB4OTk3NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE4IH0sCisJeyBBUjVLX1BIWV9DQ0tUWENUTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwgMHhkMDNlNjc4OCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsCTB4MDAwMDAxYjUgfSwKKwl7IDB4YTIzYywJCTB4MTNjODg5YWYgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjEyICsgUkY1MTEyIChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBidXQgaSBmb3VuZCBzZXR0aW5ncyBmcm9tIG9sZCB2YWx1ZXMgc28gaXQgc2hvdWxkIGJlIG9rICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIGFyNTIxMl9yZjUxMTJfaW5pX21vZGVfZW5kW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmNTExMl9pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICBhL1hSCSAgICAgIGFUdXJibwkgIGIJICAgICAgZyAoRFlOKQkgIGdUdXJibyAqLwotCQl7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOGRhNmQsIDB4MDAxOGRhNmQsIDB4MDAxOGNhNzUsIDB4MDAxOGNhNzUsIDB4MDAxOGNhNzUgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThkYTZkLCAweDAwMThkYTZkLCAweDAwMThjYTc1LCAweDAwMThjYTc1LCAweDAwMThjYTc1IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWU4MGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQxMCwgMHhmN2I4MTAxMCwgMHhmN2I4MTAxMCB9IH0sCisJICAgeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDEwLCAweGY3YjgxMDEwLCAweGY3YjgxMDEwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDggfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDggfSB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4NjQyYzAxNDAsIDB4NjQyYzAxNDAsIDB4NjQ0MmMxNjAsIDB4NjQ0MmMxNjAsIDB4NjQ0MmMxNjAgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSwgMHgwMDAyMmZmZSB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCwgMHgwMDAyMDEwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0NjEzYywgMHgxMjg0NjEzYywgMHgxMjg0NjEzYywgMHgxMjg0NjEzYywgMHgxMjg0NjEzYyB9IH0sCi0JeyBBUjVLX1BIWV9QQVBEX1BST0JFLAotCQl7IDB4MDAwMDQ4ODIsIDB4MDAwMDQ4ODIsIDB4MDAwMDQ4ODIsIDB4MDAwMDQ4ODIsIDB4MDAwMDQ4ODIgfSB9LAotCXsgQVI1S19QSFkoODApLAotCQl7IDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSB9LAotCXsgQVI1S19QSFkoODYpLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFkoOTMpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYgfSB9LAorCSAgIHsgMHg2NDJjMDE0MCwgMHg2NDJjMDE0MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmNTExMl9pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLAkweDAwMDIyZmZlIH0sCisJeyAweDk4M2MsCQkweDAwMDIwMTAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwJMHgxMjg0NjEzYyB9LAorCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwJMHgwMDAwNDg4MiB9LAorCXsgMHg5OTQwLAkJMHgwMDAwMDAwNCB9LAorCXsgMHg5OTU4LAkJMHgwMDAwMDBmZiB9LAorCXsgMHg5OTc0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsCTB4MDAwMDAxYjUgfSwKKwl7IDB4YTIzYywJCTB4MTNjODg5YWYgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgUkY1NDEzLzU0MTQgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIHNvIHR1cmJvZyBpcyB0aGUgc2FtZSB3aXRoIGcgaGVyZSB3aXRoIHNvbWUKLSAqIG1pbm9yIHR3ZWFraW5nIGJhc2VkIG9uIGR1bXBzIGZyb20gb3RoZXIgY2hpcHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmY1NDEzX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgIGEvWFIJICAgICAgYVR1cmJvCSAgYgkgICAgICBnCQkgIGdUdXJibyAqLwotCQl7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOGZhNjEsIDB4MDAxOGZhNjEsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGM5OGI0ZTAsIDB4MGM5OGI0ZTAsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMWExYTYzLCAweDAwMWExYTYzLCAweDAwMWExYTYzIH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGM5OGI0ZTAsIDB4MGM5OGI0ZTAsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4MDAyZWMxZTAsIDB4MDAyZWMxZTAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorCSAgIHsgMHgwMDJlYzFlMCwgMHgwMDJlYzFlMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKIAl7IDB4YTMwMCwKLQkJeyAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwIH0gfSwKKwkgICB7IDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSB9LAogCXsgMHhhMzA0LAotCQl7IDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIgfSB9LAorCSAgIHsgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiB9IH0sCiAJeyAweGEzMDgsCi0JCXsgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiB9IH0sCisJICAgeyAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2IH0gfSwKIAl7IDB4YTMwYywKLQkJeyAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhIH0gfSwKKwkgICB7IDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEgfSB9LAogCXsgMHhhMzEwLAotCQl7IDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYgfSB9LAorCSAgIHsgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiB9IH0sCiAJeyAweGEzMTQsCi0JCXsgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiB9IH0sCisJICAgeyAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiIH0gfSwKIAl7IDB4YTMxOCwKLQkJeyAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhIH0gfSwKKwkgICB7IDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEgfSB9LAogCXsgMHhhMzFjLAotCQl7IDB4OTBjZjg2NWIsIDB4OTBjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIgfSB9LAorCSAgIHsgMHg5MGNmODY1YiwgMHg5MGNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiB9IH0sCiAJeyAweGEzMjAsCi0JCXsgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiB9IH0sCisJICAgeyAweDlkNGY5NzBmLCAweDlkNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmIH0gfSwKIAl7IDB4YTMyNCwKLQkJeyAweGE3Y2ZhMzhmLCAweGE3Y2ZhMzhmLCAweGEzY2Y5ZjhmLCAweGEzY2Y5ZjhmLCAweGEzY2Y5ZjhmIH0gfSwKKwkgICB7IDB4YTdjZmEzOGYsIDB4YTdjZmEzOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYgfSB9LAogCXsgMHhhMzI4LAotCQl7IDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYgfSB9LAorCSAgIHsgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiwgMHhiMzVmYWYxZiwgMHhiMzVmYWYxZiwgMHhiMzVmYWYxZiB9IH0sCiAJeyAweGEzMmMsCi0JCXsgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiB9IH0sCisJICAgeyAweGJkZGZiOTlmLCAweGJkZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmIH0gfSwKIAl7IDB4YTMzMCwKLQkJeyAweGNiN2ZjNTNmLCAweGNiN2ZjNTNmLCAweGNiN2ZjNzNmLCAweGNiN2ZjNzNmLCAweGNiN2ZjNzNmIH0gfSwKKwkgICB7IDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YgfSB9LAogCXsgMHhhMzM0LAotCQl7IDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCB9IH0sCi0JeyAweDQwNjgsCi0JCXsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCi0JeyAweDgwNjAsCi0JCXsgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiB9IH0sCi0JeyAweDgwOWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgwYTAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMTgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMmMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxNDAsCi0JCXsgMHg4MDAwMDNmOSwgMHg4MDAwMDNmOSwgMHg4MDAwMDNmOSwgMHg4MDAwMDNmOSwgMHg4MDAwMDNmOSB9IH0sCi0JeyAweDgxNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYyB9IH0sCi0JeyBBUjVLX1BIWV9TQ1IsCi0JCXsgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiB9IH0sCi0JeyBBUjVLX1BIWV9TTE1ULAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19QSFlfU0NBTCwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmIH0gfSwKLQl7IEFSNUtfUEhZKDk2KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDk3KSwKLQkJeyAweDAyODAwMDAwLCAweDAyODAwMDAwLCAweDAyODAwMDAwLCAweDAyODAwMDAwLCAweDAyODAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEwNCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjApLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIxKSwKLQkJeyAweGFhYWFhYWFhLCAweGFhYWFhYWFhLCAweGFhYWFhYWFhLCAweGFhYWFhYWFhLCAweGFhYWFhYWFhIH0gfSwKLQl7IEFSNUtfUEhZKDEyMiksCi0JCXsgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCB9IH0sCi0JeyBBUjVLX1BIWSgxMjMpLAotCQl7IDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEgfSB9LAotCXsgQVI1S19QSFlfU0NMT0NLLAotCQl7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMgfSB9LAotCXsgQVI1S19QSFlfU0RFTEFZLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFlfU1BFTkRJTkcsCi0JCXsgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiB9IH0sCi0JeyAweGEyNGMsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyAweGEyNTAsCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyAweGEyNTQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNTgsCi0JCXsgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCB9IH0sCi0JeyAweGEyNWMsCi0JCXsgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSB9IH0sCi0JeyAweGEyNjAsCi0JCXsgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSB9IH0sCi0JeyAweGEyNjQsCi0JCXsgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSB9IH0sCi0JeyAweGEyNjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNmMsCi0JCXsgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSB9IH0sCi0JeyAweGEyNzAsCi0JCXsgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCB9IH0sCi0JeyAweGEyNzQsCi0JCXsgMHgwODFiN2NhYSwgMHgwODFiN2NhYSwgMHgwODFiN2NhYSwgMHgwODFiN2NhYSwgMHgwODFiN2NhYSB9IH0sCi0JeyAweGEyNzgsCi0JCXsgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9IH0sCi0JeyAweGEyN2MsCi0JCXsgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSB9IH0sCi0JeyAweGEzMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDgsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNGMsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTAsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTQsCi0JCXsgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiB9IH0sCi0JeyAweGEzNTgsCi0JCXsgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiB9IH0sCi0JeyAweGEzNWMsCi0JCXsgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiB9IH0sCi0JeyAweGEzNjAsCi0JCXsgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNyB9IH0sCi0JeyAweGEzNjQsCi0JCXsgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSB9IH0sCi0JeyAweGEzNjgsCi0JCXsgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCB9IH0sCi0JeyAweGEzNmMsCi0JCXsgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMyB9IH0sCi0JeyAweGEzNzAsCi0JCXsgMHgzZmM0MDg4MywgMHgzZmM0MDg4MywgMHgzZmM0MDg4MywgMHgzZmM0MDg4MywgMHgzZmM0MDg4MyB9IH0sCi0JeyAweGEzNzQsCi0JCXsgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMyB9IH0sCi0JeyAweGEzNzgsCi0JCXsgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiB9IH0sCi0JeyAweGEzN2MsCi0JCXsgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiB9IH0sCi0JeyAweGEzODAsCi0JCXsgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSB9IH0sCi0JeyAweGEzODQsCi0JCXsgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCB9IH0sCisJICAgeyAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmNTQxM19pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwM2UwIH0sCisJeyBBUjVLXzU0MTRfQ0JDRkcsCTB4MDAwMDAwMTAgfSwKKwl7IEFSNUtfU0VRX01BU0ssCTB4MDAwMDAwMGYgfSwKKwl7IDB4ODA5YywJCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODBhMCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlDX1FPU19DVEwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlDX1FPU19TRUwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlTQ19NT0RFLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX09GRE1fRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19DQ0tfRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMV9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfVFNGX1RIUkVTLAkweDAwMDAwMDAwIH0sCisJeyAweDgxNDAsCQkweDgwMDAwM2Y5IH0sCisJeyAweDgxNDQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLAkweDAwMDBhMDAwIH0sCisJeyAweDk4M2MsCQkweDAwMjAwNDAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwgMHgxMjg0MjMzYyB9LAorCXsgQVI1S19QSFlfU0NSLAkJMHgwMDAwMDAxZiB9LAorCXsgQVI1S19QSFlfU0xNVCwJMHgwMDAwMDA4MCB9LAorCXsgQVI1S19QSFlfU0NBTCwJMHgwMDAwMDAwZSB9LAorCXsgMHg5OTU4LAkJMHgwMDA4MWZmZiB9LAorCXsgQVI1S19QSFlfVElNSU5HXzcsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR184LAkweDAyODAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfMTEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFLCAweDAwMDAwMDAwIH0sCisJeyAweDk5ZTQsCQkweGFhYWFhYWFhIH0sCisJeyAweDk5ZTgsCQkweDNjNDY2NDc4IH0sCisJeyAweDk5ZWMsCQkweDAwMDAwMGFhIH0sCisJeyBBUjVLX1BIWV9TQ0xPQ0ssCTB4MDAwMDAwMGMgfSwKKwl7IEFSNUtfUEhZX1NERUxBWSwJMHgwMDAwMDBmZiB9LAorCXsgQVI1S19QSFlfU1BFTkRJTkcsCTB4MDAwMDAwMTQgfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLCAweDAwMDAwOWI1IH0sCisJeyAweGEyM2MsCQkweDkzYzg4OWFmIH0sCisJeyBBUjVLX1BIWV9GQVNUX0FEQywJMHgwMDAwMDAwMSB9LAorCXsgMHhhMjUwLAkJMHgwMDAwYTAwMCB9LAorCXsgQVI1S19QSFlfQkxVRVRPT1RILAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkcxLAkweDBjYzc1MzgwIH0sCisJeyAweGEyNWMsCQkweDBmMGYwZjAxIH0sCisJeyAweGEyNjAsCQkweDVmNjkwZjAxIH0sCisJeyAweGEyNjQsCQkweDAwNDE4YTExIH0sCisJeyAweGEyNjgsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkc1LAkweDBjMzBjMTZhIH0sCisJeyAweGEyNzAsIDB4MDA4MjA4MjAgfSwKKwl7IDB4YTI3NCwgMHgwODFiN2NhYSB9LAorCXsgMHhhMjc4LCAweDFjZTczOWNlIH0sCisJeyAweGEyN2MsIDB4MDUxNzAxY2UgfSwKKwl7IDB4YTMzOCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzNjLCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDAsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0NCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQ4LCAweDNmZmZmZmZmIH0sCisJeyAweGEzNGMsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1MCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzU0LCAweDAwMDNmZmZmIH0sCisJeyAweGEzNTgsIDB4NzlhOGFhMWYgfSwKKwl7IDB4YTM1YywgMHgwNjZjNDIwZiB9LAorCXsgMHhhMzYwLCAweDBmMjgyMjA3IH0sCisJeyAweGEzNjQsIDB4MTc2MDE2ODUgfSwKKwl7IDB4YTM2OCwgMHgxZjgwMTEwNCB9LAorCXsgMHhhMzZjLCAweDM3YTAwYzAzIH0sCisJeyAweGEzNzAsIDB4M2ZjNDA4ODMgfSwKKwl7IDB4YTM3NCwgMHg1N2MwMDgwMyB9LAorCXsgMHhhMzc4LCAweDVmZDgwNjgyIH0sCisJeyAweGEzN2MsIDB4N2ZlMDA0ODIgfSwKKwl7IDB4YTM4MCwgMHg3ZjNjN2JiYSB9LAorCXsgMHhhMzg0LCAweGYzMzA3ZmYwIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIFJGMjQxMy8yNDE0IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCi0gKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCisvKiBYWFg6IGEgbW9kZSA/ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmMjQxM19pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICAgICAgYgkJZwkgICAgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwNTAyMDAwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwZGU4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMDAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGRhNmQsIDB4MDAxOGRhNmQsIDB4MDAxYTZhNjQsIDB4MDAxYTZhNjQsIDB4MDAxYTZhNjQgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjBkYSwgMHgwYzk4YjBkYSwgMHgwZGU4YjBkYSB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZWU4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCisJICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlYzgwZDJlLCAweDdlODAwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzc2NjVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzOTYwNWUsIDB4MzEzNzY2NWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwkgICB7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwIH0gfSwKLQl7IDB4ODA2MCwKLQkJeyAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmIH0gfSwKLQl7IDB4ODExOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODE0MCwKLQkJeyAweDgwMDAwMGE4LCAweDgwMDAwMGE4LCAweDgwMDAwMGE4IH0gfSwKLQl7IDB4ODE0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjIH0gfSwKLQl7IEFSNUtfUEhZX1NDUiwKLQkJeyAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmIH0gfSwKLQl7IEFSNUtfUEhZX1NMTVQsCi0JCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1BIWV9TQ0FMLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19QSFkoODYpLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFkoOTYpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoOTcpLAotCQl7IDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTA0KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjEpLAotCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAotCXsgQVI1S19QSFkoMTIyKSwKLQkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMyksCi0JCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCi0JeyBBUjVLX1BIWV9TQ0xPQ0ssCi0JCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCi0JeyBBUjVLX1BIWV9TREVMQVksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmIH0gfSwKLQl7IDB4YTI0YywKLQkJeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKLQl7IDB4YTI1MCwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IDB4YTI1NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI1OCwKLQkJeyAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwIH0gfSwKLQl7IDB4YTI1YywKLQkJeyAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxIH0gfSwKLQl7IDB4YTI2MCwKLQkJeyAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxIH0gfSwKLQl7IDB4YTI2NCwKLQkJeyAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExIH0gfSwKLQl7IDB4YTI2OCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI2YywKLQkJeyAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhIH0gfSwKLQl7IDB4YTI3MCwKLQkJeyAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwIH0gfSwKLQl7IDB4YTI3NCwKLQkJeyAweDAwMWI3Y2FhLCAweDAwMWI3Y2FhLCAweDAwMWI3Y2FhIH0gfSwKLQl7IDB4YTI3OCwKLQkJeyAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0gfSwKLQl7IDB4YTI3YywKLQkJeyAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlIH0gfSwKLQl7IDB4YTMwMCwKLQkJeyAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwIH0gfSwKLQl7IDB4YTMwNCwKLQkJeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKLQl7IDB4YTMwOCwKLQkJeyAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2IH0gfSwKLQl7IDB4YTMwYywKLQkJeyAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhIH0gfSwKLQl7IDB4YTMxMCwKLQkJeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKLQl7IDB4YTMxNCwKLQkJeyAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiIH0gfSwKLQl7IDB4YTMxOCwKLQkJeyAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhIH0gfSwKLQl7IDB4YTMxYywKLQkJeyAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKLQl7IDB4YTMyMCwKLQkJeyAweDlkNGY5NzBmLCAweDlkNGY5NzBmLCAweDlkNGY5NzBmIH0gfSwKLQl7IDB4YTMyNCwKLQkJeyAweGE1Y2ZhMThmLCAweGE1Y2ZhMThmLCAweGE1Y2ZhMThmIH0gfSwKLQl7IDB4YTMyOCwKLQkJeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGI1NWZhZjFmIH0gfSwKLQl7IDB4YTMyYywKLQkJeyAweGJkZGZiOTlmLCAweGJkZGZiOTlmLCAweGJkZGZiOTlmIH0gfSwKLQl7IDB4YTMzMCwKLQkJeyAweGNkN2ZjNzNmLCAweGNkN2ZjNzNmLCAweGNkN2ZjNzNmIH0gfSwKLQl7IDB4YTMzNCwKLQkJeyAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmIH0gfSwKLQl7IDB4YTMzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTMzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0MCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0OCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM0YywKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1MCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1NCwKLQkJeyAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmIH0gfSwKLQl7IDB4YTM1OCwKLQkJeyAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmIH0gfSwKLQl7IDB4YTM1YywKLQkJeyAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmIH0gfSwKLQl7IDB4YTM2MCwKLQkJeyAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3IH0gfSwKLQl7IDB4YTM2NCwKLQkJeyAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1IH0gfSwKLQl7IDB4YTM2OCwKLQkJeyAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0IH0gfSwKLQl7IDB4YTM2YywKLQkJeyAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzIH0gfSwKLQl7IDB4YTM3MCwKLQkJeyAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzIH0gfSwKLQl7IDB4YTM3NCwKLQkJeyAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzIH0gfSwKLQl7IDB4YTM3OCwKLQkJeyAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyIH0gfSwKLQl7IDB4YTM3YywKLQkJeyAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyIH0gfSwKLQl7IDB4YTM4MCwKLQkJeyAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhIH0gfSwKLQl7IDB4YTM4NCwKLQkJeyAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwIH0gfSwKKwkgICB7IDB4MDAyYzAxNDAsIDB4MDAyYzAxNDAsIDB4MDA0MmMxNDAsIDB4MDA0MmMxNDAsIDB4MDA0MmMxNDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjI0MTNfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDNlMCB9LAorCXsgQVI1S19TRVFfTUFTSywJMHgwMDAwMDAwZiB9LAorCXsgQVI1S19NSUNfUU9TX0NUTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX1NFTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSVNDX01PREUsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfT0ZETV9GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX0NDS19GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDJfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19UU0ZfVEhSRVMsCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODE0MCwJCTB4ODAwMDAwYTggfSwKKwl7IDB4ODE0NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMGEwMDAgfSwKKwl7IDB4OTgzYywJCTB4MDAyMDA0MDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULAkweDEyODQyMzNjIH0sCisJeyBBUjVLX1BIWV9TQ1IsCQkweDAwMDAwMDFmIH0sCisJeyBBUjVLX1BIWV9TTE1ULAkweDAwMDAwMDgwIH0sCisJeyBBUjVLX1BIWV9TQ0FMLAkweDAwMDAwMDBlIH0sCisJeyAweDk5NTgsCQkweDAwMDAwMGZmIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfNywJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzgsCTB4MDI4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18xMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUsIDB4MDAwMDAwMDAgfSwKKwl7IDB4OTllNCwJCTB4YWFhYWFhYWEgfSwKKwl7IDB4OTllOCwJCTB4M2M0NjY0NzggfSwKKwl7IDB4OTllYywJCTB4MDAwMDAwYWEgfSwKKwl7IEFSNUtfUEhZX1NDTE9DSywJMHgwMDAwMDAwYyB9LAorCXsgQVI1S19QSFlfU0RFTEFZLAkweDAwMDAwMGZmIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxNCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsCTB4MDAwMDA5YjUgfSwKKwl7IDB4YTIzYywJCTB4OTNjODg5YWYgfSwKKwl7IEFSNUtfUEhZX0ZBU1RfQURDLAkweDAwMDAwMDAxIH0sCisJeyAweGEyNTAsCQkweDAwMDBhMDAwIH0sCisJeyBBUjVLX1BIWV9CTFVFVE9PVEgsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzEsCTB4MGNjNzUzODAgfSwKKwl7IDB4YTI1YywJCTB4MGYwZjBmMDEgfSwKKwl7IDB4YTI2MCwJCTB4NWY2OTBmMDEgfSwKKwl7IDB4YTI2NCwJCTB4MDA0MThhMTEgfSwKKwl7IDB4YTI2OCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzUsCTB4MGMzMGMxNmEgfSwKKwl7IDB4YTI3MCwgMHgwMDgyMDgyMCB9LAorCXsgMHhhMjc0LCAweDAwMWI3Y2FhIH0sCisJeyAweGEyNzgsIDB4MWNlNzM5Y2UgfSwKKwl7IDB4YTI3YywgMHgwNTE3MDFjZSB9LAorCXsgMHhhMzAwLCAweDE4MDEwMDAwIH0sCisJeyAweGEzMDQsIDB4MzAwMzI2MDIgfSwKKwl7IDB4YTMwOCwgMHg0ODA3M2UwNiB9LAorCXsgMHhhMzBjLCAweDU2MGI0YzBhIH0sCisJeyAweGEzMTAsIDB4NjQxYTYwMGYgfSwKKwl7IDB4YTMxNCwgMHg3ODRmNmUxYiB9LAorCXsgMHhhMzE4LCAweDg2OGY3YzVhIH0sCisJeyAweGEzMWMsIDB4OGVjZjg2NWIgfSwKKwl7IDB4YTMyMCwgMHg5ZDRmOTcwZiB9LAorCXsgMHhhMzI0LCAweGE1Y2ZhMThmIH0sCisJeyAweGEzMjgsIDB4YjU1ZmFmMWYgfSwKKwl7IDB4YTMyYywgMHhiZGRmYjk5ZiB9LAorCXsgMHhhMzMwLCAweGNkN2ZjNzNmIH0sCisJeyAweGEzMzQsIDB4ZDVmZmQxYmYgfSwKKwl7IDB4YTMzOCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzNjLCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDAsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0NCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQ4LCAweDNmZmZmZmZmIH0sCisJeyAweGEzNGMsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1MCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzU0LCAweDAwMDNmZmZmIH0sCisJeyAweGEzNTgsIDB4NzlhOGFhMWYgfSwKKwl7IDB4YTM1YywgMHgwNjZjNDIwZiB9LAorCXsgMHhhMzYwLCAweDBmMjgyMjA3IH0sCisJeyAweGEzNjQsIDB4MTc2MDE2ODUgfSwKKwl7IDB4YTM2OCwgMHgxZjgwMTEwNCB9LAorCXsgMHhhMzZjLCAweDM3YTAwYzAzIH0sCisJeyAweGEzNzAsIDB4M2ZjNDA4ODMgfSwKKwl7IDB4YTM3NCwgMHg1N2MwMDgwMyB9LAorCXsgMHhhMzc4LCAweDVmZDgwNjgyIH0sCisJeyAweGEzN2MsIDB4N2ZlMDA0ODIgfSwKKwl7IDB4YTM4MCwgMHg3ZjNjN2JiYSB9LAorCXsgMHhhMzg0LCAweGYzMzA3ZmYwIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIFJGMjQyNSAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgc28gdHVyYm9nIGlzIHRoZSBzYW1lIHdpdGggZyBoZXJlIHdpdGggc29tZQotICogbWlub3IgdHdlYWtpbmcgYmFzZWQgb24gZHVtcHMgZnJvbSBvdGhlciBjaGlwcyAqLworLyogWFhYOiBhIG1vZGUgPyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjI0MjVfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgICAgICBnCWdUdXJibyAqLwotCQl7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCiAJeyBBUjVLX1BIWV9UVVJCTywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE3KSwKLQkJeyAweDEzNzIxNDIyLCAweDEzNzIxNDIyIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMTk5YTY1LCAweDAwMTk5YTY1IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9TRVRUTElORywKKwkgICB7IDB4MTM3MjE2MWMsIDB4MTM3MjFjMjUsIDB4MTM3MjE3MjIsIDB4MTM3MjE0MjIsIDB4MTM3MjFjMjUgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGZhNjEsIDB4MDAxOGZhNjEsIDB4MDAxOTlhNjUsIDB4MDAxOTlhNjUsIDB4MDAxOTlhNjUgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCisJICAgeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwkgICB7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHgwMDUyYzE0MCwgMHgwMDUyYzE0MCB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCisJICAgeyAweDAwMDAwMTQwLCAweDAwMDAwMTQwLCAweDAwNTJjMTQwLCAweDAwNTJjMTQwLCAweDAwNTJjMTQwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAogCXsgMHhhMzI0LAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMjgsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMyYywKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzMwLAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMzQsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwM2UwLCAweDAwMDAwM2UwIH0gfSwKLQl7IDB4ODA2MCwKLQkJeyAweDAwMDAwMDBmLCAweDAwMDAwMDBmIH0gfSwKLQl7IDB4ODA5YywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODBhMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODE0MCwKLQkJeyAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5IH0gfSwKLQl7IDB4ODE0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMjAwNDAwLCAweDAwMjAwNDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQyMzNjLCAweDEyODQyMzNjIH0gfSwKLQl7IEFSNUtfUEhZX1NDUiwKLQkJeyAweDAwMDAwMDFmLCAweDAwMDAwMDFmIH0gfSwKLQl7IEFSNUtfUEhZX1NMTVQsCi0JCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1BIWV9TQ0FMLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19QSFkoODYpLAotCQl7IDB4MDAwODFmZmYsIDB4MDAwODFmZmYgfSB9LAotCXsgQVI1S19QSFkoOTYpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoOTcpLAotCQl7IDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTA0KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExOSksCi0JCXsgMHhmZWJhZGJlOCwgMHhmZWJhZGJlOCB9IH0sCi0JeyBBUjVLX1BIWSgxMjApLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIxKSwKLQkJeyAweGFhYWFhYWFhLCAweGFhYWFhYWFhIH0gfSwKLQl7IEFSNUtfUEhZKDEyMiksCi0JCXsgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCB9IH0sCi0JeyBBUjVLX1BIWSgxMjMpLAotCQl7IDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEgfSB9LAotCXsgQVI1S19QSFlfU0NMT0NLLAotCQl7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMgfSB9LAotCXsgQVI1S19QSFlfU0RFTEFZLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFlfU1BFTkRJTkcsCi0JCXsgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDliNSwgMHgwMDAwMDliNSB9IH0sCi0JeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUzLAotCQl7IDB4MjAyMDIwMjAsIDB4MjAyMDIwMjAgfSB9LAotCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFNCwKLQkJeyAweDIwMjAyMDIwLCAweDIwMjAyMDIwIH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDkzYzg4OWFmLCAweDkzYzg4OWFmIH0gfSwKLQl7IDB4YTI0YywKLQkJeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKLQl7IDB4YTI1MCwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IDB4YTI1NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI1OCwKLQkJeyAweDBjYzc1MzgwLCAweDBjYzc1MzgwIH0gfSwKLQl7IDB4YTI1YywKLQkJeyAweDBmMGYwZjAxLCAweDBmMGYwZjAxIH0gfSwKLQl7IDB4YTI2MCwKLQkJeyAweDVmNjkwZjAxLCAweDVmNjkwZjAxIH0gfSwKLQl7IDB4YTI2NCwKLQkJeyAweDAwNDE4YTExLCAweDAwNDE4YTExIH0gfSwKLQl7IDB4YTI2OCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI2YywKLQkJeyAweDBjMzBjMTY2LCAweDBjMzBjMTY2IH0gfSwKLQl7IDB4YTI3MCwKLQkJeyAweDAwODIwODIwLCAweDAwODIwODIwIH0gfSwKLQl7IDB4YTI3NCwKLQkJeyAweDA4MWEzY2FhLCAweDA4MWEzY2FhIH0gfSwKLQl7IDB4YTI3OCwKLQkJeyAweDFjZTczOWNlLCAweDFjZTczOWNlIH0gfSwKLQl7IDB4YTI3YywKLQkJeyAweDA1MTcwMWNlLCAweDA1MTcwMWNlIH0gfSwKLQl7IDB4YTMwMCwKLQkJeyAweDE2MDEwMDAwLCAweDE2MDEwMDAwIH0gfSwKLQl7IDB4YTMwNCwKLQkJeyAweDJjMDMyNDAyLCAweDJjMDMyNDAyIH0gfSwKLQl7IDB4YTMwOCwKLQkJeyAweDQ4NDMzZTQyLCAweDQ4NDMzZTQyIH0gfSwKLQl7IDB4YTMwYywKLQkJeyAweDVhMGY1MDBiLCAweDVhMGY1MDBiIH0gfSwKLQl7IDB4YTMxMCwKLQkJeyAweDZjNGI2MjRhLCAweDZjNGI2MjRhIH0gfSwKLQl7IDB4YTMxNCwKLQkJeyAweDdlOGI3NDhhLCAweDdlOGI3NDhhIH0gfSwKLQl7IDB4YTMxOCwKLQkJeyAweDk2Y2Y4Y2NiLCAweDk2Y2Y4Y2NiIH0gfSwKLQl7IDB4YTMxYywKLQkJeyAweGEzNGY5ZDBmLCAweGEzNGY5ZDBmIH0gfSwKLQl7IDB4YTMyMCwKLQkJeyAweGE3Y2ZhNThmLCAweGE3Y2ZhNThmIH0gfSwKLQl7IDB4YTM0OCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM0YywKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1MCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1NCwKLQkJeyAweDAwMDNmZmZmLCAweDAwMDNmZmZmIH0gfSwKLQl7IDB4YTM1OCwKLQkJeyAweDc5YThhYTFmLCAweDc5YThhYTFmIH0gfSwKLQl7IDB4YTM1YywKLQkJeyAweDA2NmM0MjBmLCAweDA2NmM0MjBmIH0gfSwKLQl7IDB4YTM2MCwKLQkJeyAweDBmMjgyMjA3LCAweDBmMjgyMjA3IH0gfSwKLQl7IDB4YTM2NCwKLQkJeyAweDE3NjAxNjg1LCAweDE3NjAxNjg1IH0gfSwKLQl7IDB4YTM2OCwKLQkJeyAweDFmODAxMTA0LCAweDFmODAxMTA0IH0gfSwKLQl7IDB4YTM2YywKLQkJeyAweDM3YTAwYzAzLCAweDM3YTAwYzAzIH0gfSwKLQl7IDB4YTM3MCwKLQkJeyAweDNmYzQwODgzLCAweDNmYzQwODgzIH0gfSwKLQl7IDB4YTM3NCwKLQkJeyAweDU3YzAwODAzLCAweDU3YzAwODAzIH0gfSwKLQl7IDB4YTM3OCwKLQkJeyAweDVmZDgwNjgyLCAweDVmZDgwNjgyIH0gfSwKLQl7IDB4YTM3YywKLQkJeyAweDdmZTAwNDgyLCAweDdmZTAwNDgyIH0gfSwKLQl7IDB4YTM4MCwKLQkJeyAweDdmM2M3YmJhLCAweDdmM2M3YmJhIH0gfSwKLQl7IDB4YTM4NCwKLQkJeyAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmYyNDI1X2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAzZTAgfSwKKwl7IEFSNUtfU0VRX01BU0ssCTB4MDAwMDAwMGYgfSwKKwl7IDB4ODA5YywJCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODBhMCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlDX1FPU19DVEwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlDX1FPU19TRUwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlTQ19NT0RFLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX09GRE1fRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19DQ0tfRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMV9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfVFNGX1RIUkVTLAkweDAwMDAwMDAwIH0sCisJeyAweDgxNDAsCQkweDgwMDAwM2Y5IH0sCisJeyAweDgxNDQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLAkweDAwMDBhMDAwIH0sCisJeyAweDk4M2MsCQkweDAwMjAwNDAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwgMHgxMjg0MjMzYyB9LAorCXsgQVI1S19QSFlfU0NSLAkJMHgwMDAwMDAxZiB9LAorCXsgQVI1S19QSFlfU0xNVCwJMHgwMDAwMDA4MCB9LAorCXsgQVI1S19QSFlfU0NBTCwJMHgwMDAwMDAwZSB9LAorCXsgMHg5OTU4LAkJMHgwMDA4MWZmZiB9LAorCXsgQVI1S19QSFlfVElNSU5HXzcsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR184LAkweDAyODAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfMTEsCTB4MDAwMDAwMDAgfSwKKwl7IDB4OTlkYywJCTB4ZmViYWRiZTggfSwKKwl7IEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFLCAweDAwMDAwMDAwIH0sCisJeyAweDk5ZTQsCQkweGFhYWFhYWFhIH0sCisJeyAweDk5ZTgsCQkweDNjNDY2NDc4IH0sCisJeyAweDk5ZWMsCQkweDAwMDAwMGFhIH0sCisJeyBBUjVLX1BIWV9TQ0xPQ0ssCTB4MDAwMDAwMGMgfSwKKwl7IEFSNUtfUEhZX1NERUxBWSwJMHgwMDAwMDBmZiB9LAorCXsgQVI1S19QSFlfU1BFTkRJTkcsCTB4MDAwMDAwMTQgfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwOWI1IH0sCisJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUzLCAweDIwMjAyMDIwIH0sCisJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEU0LCAweDIwMjAyMDIwIH0sCisJeyAweGEyM2MsCQkweDkzYzg4OWFmIH0sCisJeyBBUjVLX1BIWV9GQVNUX0FEQywJMHgwMDAwMDAwMSB9LAorCXsgMHhhMjUwLAkJMHgwMDAwYTAwMCB9LAorCXsgQVI1S19QSFlfQkxVRVRPT1RILAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkcxLAkweDBjYzc1MzgwIH0sCisJeyAweGEyNWMsCQkweDBmMGYwZjAxIH0sCisJeyAweGEyNjAsCQkweDVmNjkwZjAxIH0sCisJeyAweGEyNjQsCQkweDAwNDE4YTExIH0sCisJeyAweGEyNjgsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkc1LAkweDBjMzBjMTY2IH0sCisJeyAweGEyNzAsIDB4MDA4MjA4MjAgfSwKKwl7IDB4YTI3NCwgMHgwODFhM2NhYSB9LAorCXsgMHhhMjc4LCAweDFjZTczOWNlIH0sCisJeyAweGEyN2MsIDB4MDUxNzAxY2UgfSwKKwl7IDB4YTMwMCwgMHgxNjAxMDAwMCB9LAorCXsgMHhhMzA0LCAweDJjMDMyNDAyIH0sCisJeyAweGEzMDgsIDB4NDg0MzNlNDIgfSwKKwl7IDB4YTMwYywgMHg1YTBmNTAwYiB9LAorCXsgMHhhMzEwLCAweDZjNGI2MjRhIH0sCisJeyAweGEzMTQsIDB4N2U4Yjc0OGEgfSwKKwl7IDB4YTMxOCwgMHg5NmNmOGNjYiB9LAorCXsgMHhhMzFjLCAweGEzNGY5ZDBmIH0sCisJeyAweGEzMjAsIDB4YTdjZmE1OGYgfSwKKwl7IDB4YTM0OCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzRjLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTAsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1NCwgMHgwMDAzZmZmZiB9LAorCXsgMHhhMzU4LCAweDc5YThhYTFmIH0sCisJeyAweGEzNWMsIDB4MDY2YzQyMGYgfSwKKwl7IDB4YTM2MCwgMHgwZjI4MjIwNyB9LAorCXsgMHhhMzY0LCAweDE3NjAxNjg1IH0sCisJeyAweGEzNjgsIDB4MWY4MDExMDQgfSwKKwl7IDB4YTM2YywgMHgzN2EwMGMwMyB9LAorCXsgMHhhMzcwLCAweDNmYzQwODgzIH0sCisJeyAweGEzNzQsIDB4NTdjMDA4MDMgfSwKKwl7IDB4YTM3OCwgMHg1ZmQ4MDY4MiB9LAorCXsgMHhhMzdjLCAweDdmZTAwNDgyIH0sCisJeyAweGEzODAsIDB4N2YzYzdiYmEgfSwKKwl7IDB4YTM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKIAogLyoKQEAgLTE1NjAsNyArMTI5Nyw3IEBACiAJeyBBUjVLX0JCX0dBSU4oNjMpLCAweDAwMDAwMDE2IH0sCiB9OwogCi0vKiBSRjUxMTIgSW5pdGlhbCBCYXNlQmFuZCBHYWluIHNldHRpbmdzIChTYW1lIGZvciBSRjU0MTMvNTQxNCkgKi8KKy8qIFJGNTExMiBJbml0aWFsIEJhc2VCYW5kIEdhaW4gc2V0dGluZ3MgKFNhbWUgZm9yIFJGNTQxMy81NDE0KykgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmNTExMl9pbmlfYmJnYWluW10gPSB7CiAJeyBBUjVLX0JCX0dBSU4oMCksIDB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQkJfR0FJTigxKSwgMHgwMDAwMDAwMSB9LApAQCAtMTY5MSw4NyArMTQyOCw5NyBAQAogCQkvKgogCQkgKiBXcml0ZSBpbml0aWFsIHNldHRpbmdzIGNvbW1vbiBmb3IgYWxsIG1vZGVzCiAJCSAqLwotCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLCBBUlJBWV9TSVpFKGFyNTIxMl9pbmkpLAotCQkJCQlhcjUyMTJfaW5pLCBjaGFuZ2VfY2hhbm5lbCk7CisJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsIEFSUkFZX1NJWkUoYXI1MjEyX2luaV9jb21tb25fc3RhcnQpLAorCQkJCWFyNTIxMl9pbmlfY29tbW9uX3N0YXJ0LCBjaGFuZ2VfY2hhbm5lbCk7CiAKIAkJLyogU2Vjb25kIHNldCBvZiBtb2RlLXNwZWNpZmljIHNldHRpbmdzICovCi0JCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHsKKwkJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKKwkJY2FzZSBBUjVLX1JGNTExMToKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAotCQkJCQlBUlJBWV9TSVpFKGFyNTIxMl9yZjUxMTFfaW5pX21vZGVfZW5kKSwKLQkJCQkJYXI1MjEyX3JmNTExMV9pbmlfbW9kZV9lbmQsIG1vZGUpOworCQkJCQlBUlJBWV9TSVpFKHJmNTExMV9pbmlfbW9kZV9lbmQpLAorCQkJCQlyZjUxMTFfaW5pX21vZGVfZW5kLCBtb2RlKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjUxMTFfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjUxMTFfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKIAogCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTFfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMV9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CiAKLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHsKKwkJCWJyZWFrOworCQljYXNlIEFSNUtfUkY1MTEyOgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCi0JCQkJCUFSUkFZX1NJWkUoYXI1MjEyX3JmNTExMl9pbmlfbW9kZV9lbmQpLAotCQkJCQlhcjUyMTJfcmY1MTEyX2luaV9tb2RlX2VuZCwgbW9kZSk7CisJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9tb2RlX2VuZCksCisJCQkJCXJmNTExMl9pbmlfbW9kZV9lbmQsIG1vZGUpOworCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmNTExMl9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOwogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKIAotCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgeworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19SRjU0MTM6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjU0MTNfaW5pX21vZGVfZW5kKSwKIAkJCQkJcmY1NDEzX2luaV9tb2RlX2VuZCwgbW9kZSk7CiAKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmY1NDEzX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmY1NDEzX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CisKKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwogCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyNDEzKSB7Ci0KLQkJCWlmIChtb2RlIDwgMikgewotCQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCi0JCQkJCSJ1bnN1cHBvcnRlZCBjaGFubmVsIG1vZGU6ICVkXG4iLCBtb2RlKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCW1vZGUgPSBtb2RlIC0gMjsKLQotCQkJLyogT3ZlcnJpZGUgYSBzZXR0aW5nIGZyb20gYXI1MjEyX2luaSAqLwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAxODgzMGM2LCBBUjVLX1BIWSg2NDgpKTsKKwkJCWJyZWFrOworCQljYXNlIEFSNUtfUkYyMzE2OgorCQljYXNlIEFSNUtfUkYyNDEzOgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmYyNDEzX2luaV9tb2RlX2VuZCksCiAJCQkJCXJmMjQxM19pbmlfbW9kZV9lbmQsIG1vZGUpOwogCi0JCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmMjQxM19pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmMjQxM19pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCisJCQkvKiBPdmVycmlkZSBzZXR0aW5ncyBmcm9tIHJmMjQxM19pbmlfY29tbW9uX2VuZCAqLworCQkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjMxNikgeworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwNDAwMCwKKwkJCQkJCQlBUjVLX1BIWV9BR0MpOworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwODFiN2NhYSwKKwkJCQkJCQkweGEyNzQpOworCQkJfQorCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKLQotCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQyNSkgewotCi0JCQlpZiAobW9kZSA8IDIpIHsKLQkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCQkidW5zdXBwb3J0ZWQgY2hhbm5lbCBtb2RlOiAlZFxuIiwgbW9kZSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCS8qIE1hcCBiIHRvIGcgKi8KLQkJCWlmIChtb2RlID09IDIpCi0JCQkJbW9kZSA9IDA7Ci0JCQllbHNlCi0JCQkJbW9kZSA9IG1vZGUgLSAzOwotCi0JCQkvKiBPdmVycmlkZSBhIHNldHRpbmcgZnJvbSBhcjUyMTJfaW5pICovCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDE4ODMwYzYsIEFSNUtfUEhZKDY0OCkpOworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19SRjIzMTc6CisJCWNhc2UgQVI1S19SRjI0MjU6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjI0MjVfaW5pX21vZGVfZW5kKSwKIAkJCQkJcmYyNDI1X2luaV9tb2RlX2VuZCwgbW9kZSk7CiAKLQkJCS8qIEJhc2ViYW5kIGdhaW4gdGFibGUgKi8KKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmYyNDI1X2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmYyNDI1X2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CisKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NTVmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2xlZC5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgU2FtIExlZmZsZXIsIEVycm5vIENvbnN1bHRpbmcKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEJvYiBDb3BlbGFuZCA8bWVAYm9iY29wZWxhbmQuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdyAoIkRpc2NsYWltZXIiKSBhbmQgYW55CisgKiAgICByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24gaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseQorICogICAgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT05JTkZSSU5HRU1FTlQsIE1FUkNIQU5USUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgImF0aDVrLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorCisjZGVmaW5lIEFUSF9TREVWSUNFKHN1YnYsc3ViZCkgXAorCS52ZW5kb3IgPSBQQ0lfQU5ZX0lELCAuZGV2aWNlID0gUENJX0FOWV9JRCwgXAorCS5zdWJ2ZW5kb3IgPSAoc3VidiksIC5zdWJkZXZpY2UgPSAoc3ViZCkKKworI2RlZmluZSBBVEhfTEVEKHBpbixwb2xhcml0eSkgLmRyaXZlcl9kYXRhID0gKCgocGluKSA8PCA4KSB8IChwb2xhcml0eSkpCisjZGVmaW5lIEFUSF9QSU4oZGF0YSkgKChkYXRhKSA+PiA4KQorI2RlZmluZSBBVEhfUE9MQVJJVFkoZGF0YSkgKChkYXRhKSAmIDB4ZmYpCisKKy8qIERldmljZXMgd2UgbWF0Y2ggb24gZm9yIExFRCBjb25maWcgaW5mbyAodHlwaWNhbGx5IGxhcHRvcHMpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoNWtfbGVkX2RldmljZXNbXSA9IHsKKwkvKiBJQk0tc3BlY2lmaWMgQVI1MjEyICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjEyX0lCTSksIEFUSF9MRUQoMCwgMCkgfSwKKwkvKiBBUjUyMTEgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpLCBBVEhfTEVEKDAsIDApIH0sCisJLyogSFAgQ29tcGFxIG5jNnh4LCBuYzQwMDAsIG54NjAwMCAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9DT01QQVEsIFBDSV9BTllfSUQpLCBBVEhfTEVEKDEsIDEpIH0sCisJLyogQWNlciBBc3BpcmUgT25lIEExNTAgKG1heGltbGV2aXRza3lAZ21haWwuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9GT1hDT05OLCAweGUwMDgpLCBBVEhfTEVEKDMsIDApIH0sCisJLyogQWNlciBGZXJyYXJpIDUwMDAgKHJ1c3MuZGlsbEBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FNQklULCAweDA0MjIpLCBBVEhfTEVEKDEsIDEpIH0sCisJLyogRS1tYWNoaW5lcyBFNTEwICh0dWxpb21AZ21haWwuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUJJVCwgMHgwNDI4KSwgQVRIX0xFRCgzLCAwKSB9LAorCS8qIEFjZXIgRXh0ZW5zYSA1NjIweiAobmVrb3JlZXZlQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfUU1JLCAweDAxMDUpLCBBVEhfTEVEKDMsIDApIH0sCisJeyB9Cit9OworCit2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKKwkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOworCQlhdGg1a19sZWRfb2ZmKHNjKTsKKwl9Cit9CisKK3ZvaWQgYXRoNWtfbGVkX29uKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJcmV0dXJuOworCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sIHNjLT5sZWRfb24pOworfQorCit2b2lkIGF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQorCQlyZXR1cm47CisJYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhdGg1a19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgYXRoNWtfbGVkLAorCQlsZWRfZGV2KTsKKworCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpCisJCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJZWxzZQorCQlhdGg1a19sZWRfb24obGVkLT5zYyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0aDVrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfbGVkICpsZWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWxlZC0+c2MgPSBzYzsKKwlzdHJuY3B5KGxlZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSkpOworCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDVrX2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcigmc2MtPnBkZXYtPmRldiwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikgeworCQlBVEg1S19XQVJOKHNjLCAiY291bGQgbm90IHJlZ2lzdGVyIExFRCAlc1xuIiwgbmFtZSk7CisJCWxlZC0+c2MgPSBOVUxMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX2xlZCAqbGVkKQoreworCWlmICghbGVkLT5zYykKKwkJcmV0dXJuOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmxlZF9kZXYpOworCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJbGVkLT5zYyA9IE5VTEw7Cit9CisKK3ZvaWQgYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKK30KKworaW50IGF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7CisJY2hhciBuYW1lW0FUSDVLX0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqbWF0Y2g7CisKKwltYXRjaCA9IHBjaV9tYXRjaF9pZCgmYXRoNWtfbGVkX2RldmljZXNbMF0sIHBkZXYpOworCWlmIChtYXRjaCkgeworCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7CisJCXNjLT5sZWRfcGluID0gQVRIX1BJTihtYXRjaC0+ZHJpdmVyX2RhdGEpOworCQlzYy0+bGVkX29uID0gQVRIX1BPTEFSSVRZKG1hdGNoLT5kcml2ZXJfZGF0YSk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKKwlhdGg1a19sZWRfZW5hYmxlKHNjKTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjpyeCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJ4X2xlZCwgbmFtZSwKKwkJaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShodykpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnR4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+dHhfbGVkLCBuYW1lLAorCQlpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGh3KSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYwppbmRleCA3NWViOWY0Li41NTEyMmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYwpAQCAtNjQ2LDYgKzY0NiwyMiBAQAogfQogCiAvKioKKyAqIGF0aDVrX2h3X3NldF90c2Y2NCAtIFNldCBhIG5ldyA2NGJpdCBUU0YKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKiBAdHNmNjQ6IFRoZSBuZXcgNjRiaXQgVFNGCisgKgorICogU2V0cyB0aGUgbmV3IFRTRgorICovCit2b2lkIGF0aDVrX2h3X3NldF90c2Y2NChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1NjQgdHNmNjQpCit7CisJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmNjQgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9MMzIpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKHRzZjY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYsIEFSNUtfVFNGX1UzMik7Cit9CisKKy8qKgogICogYXRoNWtfaHdfcmVzZXRfdHNmIC0gRm9yY2UgYSBUU0YgcmVzZXQKICAqCiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CkBAIC0xMDI2LDYgKzEwNDIsOSBAQAogCQkJcmV0dXJuIEFSNUtfS0VZVEFCTEVfVFlQRV80MDsKIAkJZWxzZSBpZiAoa2V5LT5rZXlsZW4gPT0gTEVOX1dFUDEwNCkKIAkJCXJldHVybiBBUjVLX0tFWVRBQkxFX1RZUEVfMTA0OworCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDQxLDcgKzEwNjAsNyBAQAogCV9fbGUzMiBrZXlfdls1XSA9IHt9OwogCV9fbGUzMiBrZXkwID0gMCwga2V5MSA9IDA7CiAJX19sZTMyICpyeG1pYywgKnR4bWljOwotCXUzMiBrZXl0eXBlOworCWludCBrZXl0eXBlOwogCXUxNiBtaWNlbnRyeSA9IGVudHJ5ICsgQVI1S19LRVlUQUJMRV9NSUNfT0ZGU0VUOwogCWJvb2wgaXNfdGtpcDsKIAljb25zdCB1OCAqa2V5X3B0cjsKQEAgLTExMzksNyArMTE1OCw3IEBACiAKIAkvKiBNQUMgbWF5IGJlIE5VTEwgaWYgaXQncyBhIGJyb2FkY2FzdCBrZXkuIEluIHRoaXMgY2FzZSBubyBuZWVkIHRvCiAJICogdG8gY29tcHV0ZSBBUjVLX0xPV19JRCBhbmQgQVI1S19ISUdIX0lEIGFzIHdlIGFscmVhZHkga25vdyBpdC4gKi8KLQlpZiAodW5saWtlbHkobWFjID09IE5VTEwpKSB7CisJaWYgKCFtYWMpIHsKIAkJbG93X2lkID0gMHhmZmZmZmZmZjsKIAkJaGlnaF9pZCA9IDB4ZmZmZiB8IEFSNUtfS0VZVEFCTEVfVkFMSUQ7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKaW5kZXggN2JhMThlMC4uOWUyZmFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKQEAgLTIsOCArMiw5IEBACiAgKiBQSFkgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTI2LDExMzggKzI3LDE5MyBAQAogI2luY2x1ZGUgImF0aDVrLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgotCi0vKiBTdHJ1Y3QgdG8gaG9sZCBpbml0aWFsIFJGIHJlZ2lzdGVyIHZhbHVlcyAoUkYgQmFua3MpICovCi1zdHJ1Y3QgYXRoNWtfaW5pX3JmIHsKLQl1OAlyZl9iYW5rOwkvKiBjaGVjayBvdXQgYXRoNWtfcmVnLmggKi8KLQl1MTYJcmZfcmVnaXN0ZXI7CS8qIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQl1MzIJcmZfdmFsdWVbNV07CS8qIHJlZ2lzdGVyIHZhbHVlIGZvciBkaWZmZXJlbnQgbW9kZXMgKGFib3ZlKSAqLwotfTsKLQotLyoKLSAqIE1vZGUtc3BlY2lmaWMgUkYgR2FpbiB0YWJsZSAoNjRieXRlcykgZm9yIFJGNTExMS81MTEyCi0gKiAoUkY1MTEwIG9ubHkgY29tZXMgd2l0aCBBUjUyMTAgYW5kIG9ubHkgc3VwcG9ydHMgYS90dXJibyBhIG1vZGUgc28gaW5pdGlhbAotICogUkYgR2FpbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKLSAqLwotc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gewotCXUxNglyZmdfcmVnaXN0ZXI7CS8qIFJGIEdhaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXUzMglyZmdfdmFsdWVbMl07CS8qIFtmcmVxIChzZWUgYmVsb3cpXSAqLwotfTsKLQotc3RydWN0IGF0aDVrX2dhaW5fb3B0IHsKLQl1MzIJCQlnb19kZWZhdWx0OwotCXUzMgkJCWdvX3N0ZXBzX2NvdW50OwotCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwCWdvX3N0ZXBbQVI1S19HQUlOX1NURVBfQ09VTlRdOwotfTsKLQotLyogUkY1MTExIG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181MTExW10gPSB7Ci0JeyAwLCAweDk4OWMsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMGMwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMGY5LCAweDAwMDQwMGY5LCAweDAwMDQwMGZmLCAweDAwMDQwMGZkLCAweDAwMDQwMGZkIH0gfSwKLQl7IDAsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IDEsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDE0IH0gfSwKLQl7IDMsIDB4OThkOCwKLQkgICAgeyAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMGMwLCAweDAwMzgwMDgwLCAweDAyMzgwMGMwLCAweDAwMzgwMGMwLCAweDAwMzgwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDIwMDA2LCAweDAwMDIwMDA2LCAweDAwMDAwMDA2LCAweDAwMDIwMDA2LCAweDAwMDIwMDA2IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3IH0gfSwKLQl7IDYsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYxLCAweDAwMDAwMGYxLCAweDAwMDAwMDYxLCAweDAwMDAwMGYxLCAweDAwMDAwMGYxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA5MDRmLCAweDAwMDA5MDRmLCAweDAwMDA5MDRjLCAweDAwMDA5MDRmLCAweDAwMDA5MDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxMjVhLCAweDAwMDAxMjVhLCAweDAwMDAxMjlhLCAweDAwMDAxMjVhLCAweDAwMDAxMjVhIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBmLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTExICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTFbXSA9IHsKLQkvKgkJCSAgICAgIDVHaHoJMkdoegkqLwotCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAxYTksIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAwNDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwNjksIDB4MDAwMDAxNTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMTksIDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNDQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwODQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAxYTUsIDB4MDAwMDAxNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMWU1LCAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAyNSwgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYzgsIDB4MDAwMDAwMTQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMDQyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDA4MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAxNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTk4LCAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFkOCwgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMTgsIDB4MDAwMDAwMTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDU4LCAweDAwMDAwMDUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA5OCwgMHgwMDAwMDA5MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxYTQsIDB4MDAwMDAxN2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWU0LCAweDAwMDAwMWJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAyNCwgMHgwMDAwMDFmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwNjQsIDB4MDAwMDAwMGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMGE0LCAweDAwMDAwMDRhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDBlNCwgMHgwMDAwMDA4YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAxMGEsIDB4MDAwMDAxNWEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMTRhLCAweDAwMDAwMTlhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDE4YSwgMHgwMDAwMDFkYSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAxY2EsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDBhLCAweDAwMDAwMDRlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDA0YSwgMHgwMDAwMDA4ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwOGEsIDB4MDAwMDAxNWUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWJhLCAweDAwMDAwMTllIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDFmYSwgMHgwMDAwMDFkZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDQ5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDE4NiwgMHgwMDAwMDA4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYzYsIDB4MDAwMDAxNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDA2LCAweDAwMDAwMWI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDA0NiwgMHgwMDAwMDFmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwODYsIDB4MDAwMDAwMzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAxYmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDAzZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwN2QgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGJkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTEgPSB7Ci0JNCwKLQk5LAotCXsKLQkJeyB7IDQsIDEsIDEsIDEgfSwgNiB9LAotCQl7IHsgNCwgMCwgMSwgMSB9LCA0IH0sCi0JCXsgeyAzLCAxLCAxLCAxIH0sIDMgfSwKLQkJeyB7IDQsIDAsIDAsIDEgfSwgMSB9LAotCQl7IHsgNCwgMSwgMSwgMCB9LCAwIH0sCi0JCXsgeyA0LCAwLCAxLCAwIH0sIC0yIH0sCi0JCXsgeyAzLCAxLCAxLCAwIH0sIC0zIH0sCi0JCXsgeyA0LCAwLCAwLCAwIH0sIC00IH0sCi0JCXsgeyAyLCAxLCAxLCAwIH0sIC02IH0KLQl9Ci19OwotCi0vKiBSRjUxMTIgbW9kZS1zcGVjaWZpYyBpbml0IHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzUxMTJbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICBtb2RlIGEvWFIgICBtb2RlIGFUdXJibyBtb2RlIGIgICAgICBtb2RlIGcgICAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYjAsIDB4MDAwMDAwYjAsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTggfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2YzRhNDEsIDB4MDA2YzRhNDEsIDB4MDA2YzRhZjEsIDB4MDA2YzRhNjEsIDB4MDA2YzRhNjEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDg5MmEsIDB4MDA1MDg5MmEsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAgfSB9LAotCXsgNiwgMHg5OGQwLAotCSAgICB7IDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAotCXsgNywgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotfTsKLQotLyogUkY1MTEyQSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTExMmFbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICBtb2RlIGEvWFIgICBtb2RlIGFUdXJibyBtb2RlIGIgICAgICBtb2RlIGcgICAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDkgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAotCXsgNiwgMHg5OGQ4LAotCSAgICB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAotCXsgNywgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjExMmFbXSA9IHsKLQl7IDEsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNCwKLQkvKgkgICBtb2RlIGIJbW9kZSBnCSAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MGEwMDAwMDAsIDB4MGEwMDAwMDAsIDB4MGEwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDBjMGMwMDAwLCAweDBjMGMwMDAwLCAweDBjMGMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDA3MDAxOSwgMHgwMDA3MDAxOSwgMHgwMDA3MDAxOSB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYjAyMTg0LCAweDAwYjAyMTg0LCAweDAwYjAyMTg0IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNSwKLQkJeyAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYyB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMSwKLQkJeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLS8qIFJGNTQxMy81NDE0IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181NDEzW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTAwMGMwLCAweDAwYTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMGEwLCAweDAwNTEwMGEwLCAweDAwNTEwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMDZhLCAweDAwNTAwMDZhLCAweDAwNTAwMGRkLCAweDAwNTAwMGRkLCAweDAwNTAwMGRkIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAyYzAwLCAweDAwMDAyYzAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwIH0gfSwKLQl7IDYsIDB4OThjOCwKLQkgICAgeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIFJGMjQxMy8yNDE0IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc18yNDEzW10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyogCSAgIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGI1MDAwMCwgMHgwMGI1MDAwMCwgMHgwMGI1MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDlkMDAwMCwgMHgwMDlkMDAwMCwgMHgwMDlkMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDIzMDAxOCwgMHgwMDIzMDAxOCwgMHgwMDIzMDAxOCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMjgwMDUwLCAweDAwMjgwMDUwLCAweDAwMjgwMDUwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDA0MDA3ZiwgMHgwMDA0MDA3ZiwgMHgwMDA0MDA3ZiB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwYzAwMCwgMHgwMDAwYzAwMCwgMHgwMDAwYzAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzUsCi0JCXsgMHgwMDQwMDIzMCwgMHgwMDQwMDIzMCwgMHgwMDQwMDIzMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8yLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotfTsKLQotLyogUkYyNDI1IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc18yNDI1W10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyogCSAgIG1vZGUgZyAgICAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTAwMDAwLCAweDAwMTAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjgwMDAwLCAweDAwZjgwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwOTEwMDQwLCAweDAwOTEwMDQwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwODEwMDYwLCAweDAwODEwMDYwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzEsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8yLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotfTsKLQotLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjUxMTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTExMltdID0gewotCS8qCQkJICAgICAgNUdoegkyR2h6CSovCi0JeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0NywgMHgwMDAwMDA0NyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4NywgMHgwMDAwMDA4NyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMCwgMHgwMDAwMDFhMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMCwgMHgwMDAwMDFlMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDFhMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFlMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMTYyLCAweDAwMDAwMTYyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhMiwgMHgwMDAwMDFhMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTIsIDB4MDAwMDAxZTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2MiwgMHgwMDAwMDA2MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxNjMsIDB4MDAwMDAxNjMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMWEzLCAweDAwMDAwMWEzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDFlMywgMHgwMDAwMDFlMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwMjMsIDB4MDAwMDAwMjMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMDYzLCAweDAwMDAwMDYzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDE4NCwgMHgwMDAwMDE4NCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAxYzQsIDB4MDAwMDAxYzQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFlYSwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAwMmEsIDB4MDAwMDAwNGIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDZhLCAweDAwMDAwMDhiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDFhYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxYWIsIDB4MDAwMDAxZWMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWViLCAweDAwMDAwMDJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAyYiwgMHgwMDAwMDAxMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNmIsIDB4MDAwMDAwNTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMGFiLCAweDAwMDAwMDkyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDFhYywgMHgwMDAwMDE5MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAxZWMsIDB4MDAwMDAxZDMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMDJjLCAweDAwMDAwMDEzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDA1MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwN2EsIDB4MDAwMDAwOTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGJhLCAweDAwMDAwMTk0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDFiYiwgMHgwMDAwMDFkNCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAxZmIsIDB4MDAwMDAwMTQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMDNiLCAweDAwMDAwMDNhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDA3YiwgMHgwMDAwMDA3YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwYmIsIDB4MDAwMDAwYmEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMWJjLCAweDAwMDAwMWJiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDFmYywgMHgwMDAwMDFmYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwM2MsIDB4MDAwMDAwM2IgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMDdjLCAweDAwMDAwMDdiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBiYywgMHgwMDAwMDBiYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAxYmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDAzYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwN2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTQxMyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81NDEzW10gPSB7Ci0JLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KLQl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWExLCAweDAwMDAwMTYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWExIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMWUxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMTg4LCAweDAwMDAwMDYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMWM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAwNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDE2OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAxYTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMWU5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDFkMCwgMHgwMDAwMDAyOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwNjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDUwLCAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA5MCwgMHgwMDAwMDFkMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAxYjEsIDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWYxLCAweDAwMDAwMDUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAzMSwgMHgwMDAwMDA5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwNzEsIDB4MDAwMDAxNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWI4LCAweDAwMDAwMWIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDFmOCwgMHgwMDAwMDFmMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMzgsIDB4MDAwMDAwMzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDc4LCAweDAwMDAwMDcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDE4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwOTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMGQ5LCAweDAwMDAwMTc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDFiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMDM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDA3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDEzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MTNbXSA9IHsKLQl7IEFSNUtfUkZfR0FJTigwKSwgeyAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwgeyAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwgeyAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwgeyAweDAwMDAwMTgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwgeyAweDAwMDAwMWMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwgeyAweDAwMDAwMDAxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwgeyAweDAwMDAwMDQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwgeyAweDAwMDAwMDgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwgeyAweDAwMDAwMTY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwgeyAweDAwMDAwMWE4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksIHsgMHgwMDAwMDFlOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLCB7IDB4MDAwMDAwMjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwgeyAweDAwMDAwMDY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksIHsgMHgwMDAwMDE4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLCB7IDB4MDAwMDAxYzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwgeyAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksIHsgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLCB7IDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwgeyAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksIHsgMHgwMDAwMDFkMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLCB7IDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwgeyAweDAwMDAwMDUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksIHsgMHgwMDAwMDA5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLCB7IDB4MDAwMDAxOTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwgeyAweDAwMDAwMWQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksIHsgMHgwMDAwMDAxMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLCB7IDB4MDAwMDAwNTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwgeyAweDAwMDAwMDkxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksIHsgMHgwMDAwMDE3OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLCB7IDB4MDAwMDAxYjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwgeyAweDAwMDAwMWY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksIHsgMHgwMDAwMDAzOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLCB7IDB4MDAwMDAwNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwgeyAweDAwMDAwMTk5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksIHsgMHgwMDAwMDFkOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLCB7IDB4MDAwMDAwMTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwgeyAweDAwMDAwMDU5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksIHsgMHgwMDAwMDA5OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLCB7IDB4MDAwMDAwZDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwgeyAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDI1ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MjVbXSA9IHsKLQl7IEFSNUtfUkZfR0FJTigwKSwgeyAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwgeyAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwgeyAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwgeyAweDAwMDAwMTgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwgeyAweDAwMDAwMWMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwgeyAweDAwMDAwMDAxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwgeyAweDAwMDAwMDQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwgeyAweDAwMDAwMDgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwgeyAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwgeyAweDAwMDAwMWM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksIHsgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLCB7IDB4MDAwMDAwNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwgeyAweDAwMDAwMDg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksIHsgMHgwMDAwMDE4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLCB7IDB4MDAwMDAxYzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwgeyAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksIHsgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLCB7IDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwgeyAweDAwMDAwMWIwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksIHsgMHgwMDAwMDFmMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLCB7IDB4MDAwMDAwMzAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwgeyAweDAwMDAwMDcwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksIHsgMHgwMDAwMDE3MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLCB7IDB4MDAwMDAxYjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwgeyAweDAwMDAwMWYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksIHsgMHgwMDAwMDAzMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLCB7IDB4MDAwMDAwNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwgeyAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksIHsgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLCB7IDB4MDAwMDAwMzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwgeyAweDAwMDAwMDc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksIHsgMHgwMDAwMDBiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLCB7IDB4MDAwMDAxYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwgeyAweDAwMDAwMWY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksIHsgMHgwMDAwMDAzOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLCB7IDB4MDAwMDAwNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwgeyAweDAwMDAwMGI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwgeyAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTEyID0gewotCTEsCi0JOCwKLQl7Ci0JCXsgeyAzLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDYgfSwKLQkJeyB7IDIsIDAsIDAsIDAsIDAsIDAsIDAgfSwgMCB9LAotCQl7IHsgMSwgMCwgMCwgMCwgMCwgMCwgMCB9LCAtMyB9LAotCQl7IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCAtNiB9LAotCQl7IHsgMCwgMSwgMSwgMCwgMCwgMCwgMCB9LCAtOCB9LAotCQl7IHsgMCwgMSwgMSwgMCwgMSwgMSwgMCB9LCAtMTAgfSwKLQkJeyB7IDAsIDEsIDAsIDEsIDEsIDEsIDAgfSwgLTEzIH0sCi0JCXsgeyAwLCAxLCAwLCAxLCAxLCAwLCAxIH0sIC0xNiB9LAotCX0KLX07CisjaW5jbHVkZSAicmZidWZmZXIuaCIKKyNpbmNsdWRlICJyZmdhaW4uaCIKIAogLyoKICAqIFVzZWQgdG8gbW9kaWZ5IFJGIEJhbmtzIGJlZm9yZSB3cml0aW5nIHRoZW0gdG8gQVI1S19SRl9CVUZGRVIKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGg1a19od19yZnJlZ3Nfb3AodTMyICpyZiwgdTMyIG9mZnNldCwgdTMyIHJlZywgdTMyIGJpdHMsCi0JCXUzMiBmaXJzdCwgdTMyIGNvbCwgYm9vbCBzZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGF0aDVrX2h3X3JmYl9vcChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCQljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzLAorCQkJCQl1MzIgdmFsLCB1OCByZWdfaWQsIGJvb2wgc2V0KQogewotCXUzMiBtYXNrLCBlbnRyeSwgbGFzdCwgZGF0YSwgc2hpZnQsIHBvc2l0aW9uOwotCXMzMiBsZWZ0OworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmcmVnID0gTlVMTDsKKwl1OCBvZmZzZXQsIGJhbmssIG51bV9iaXRzLCBjb2wsIHBvc2l0aW9uOworCXUxNiBlbnRyeTsKKwl1MzIgbWFzaywgZGF0YSwgbGFzdF9iaXQsIGJpdHNfc2hpZnRlZCwgZmlyc3RfYml0OworCXUzMiAqcmZiOworCXMzMiBiaXRzX2xlZnQ7CiAJaW50IGk7CiAKIAlkYXRhID0gMDsKKwlyZmIgPSBhaC0+YWhfcmZfYmFua3M7CiAKLQlpZiAocmYgPT0gTlVMTCkKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX3JlZ3NfY291bnQ7IGkrKykgeworCQlpZiAocmZfcmVnc1tpXS5pbmRleCA9PSByZWdfaWQpIHsKKwkJCXJmcmVnID0gJnJmX3JlZ3NbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZmIgPT0gTlVMTCB8fCByZnJlZyA9PSBOVUxMKSB7CisJCUFUSDVLX1BSSU5URigiUmYgcmVnaXN0ZXIgbm90IGZvdW5kIVxuIik7CiAJCS8qIHNob3VsZCBub3QgaGFwcGVuICovCiAJCXJldHVybiAwOworCX0KIAotCWlmICghKGNvbCA8PSAzICYmIGJpdHMgPD0gMzIgJiYgZmlyc3QgKyBiaXRzIDw9IDMxOSkpIHsKKwliYW5rID0gcmZyZWctPmJhbms7CisJbnVtX2JpdHMgPSByZnJlZy0+ZmllbGQubGVuOworCWZpcnN0X2JpdCA9IHJmcmVnLT5maWVsZC5wb3M7CisJY29sID0gcmZyZWctPmZpZWxkLmNvbDsKKworCS8qIGZpcnN0X2JpdCBpcyBhbiBvZmZzZXQgZnJvbSBiYW5rJ3MKKwkgKiBzdGFydC4gU2luY2Ugd2UgaGF2ZSBhbGwgYmFua3Mgb24KKwkgKiB0aGUgc2FtZSBhcnJheSwgd2UgdXNlIHRoaXMgb2Zmc2V0CisJICogdG8gbWFyayBlYWNoIGJhbmsncyBzdGFydCAqLworCW9mZnNldCA9IGFoLT5haF9vZmZzZXRbYmFua107CisKKwkvKiBCb3VuZGFyeSBjaGVjayAqLworCWlmICghKGNvbCA8PSAzICYmIG51bV9iaXRzIDw9IDMyICYmIGZpcnN0X2JpdCArIG51bV9iaXRzIDw9IDMxOSkpIHsKIAkJQVRINUtfUFJJTlRGKCJpbnZhbGlkIHZhbHVlcyBhdCBvZmZzZXQgJXVcbiIsIG9mZnNldCk7CiAJCXJldHVybiAwOwogCX0KIAotCWVudHJ5ID0gKChmaXJzdCAtIDEpIC8gOCkgKyBvZmZzZXQ7Ci0JcG9zaXRpb24gPSAoZmlyc3QgLSAxKSAlIDg7CisJZW50cnkgPSAoKGZpcnN0X2JpdCAtIDEpIC8gOCkgKyBvZmZzZXQ7CisJcG9zaXRpb24gPSAoZmlyc3RfYml0IC0gMSkgJSA4OwogCiAJaWYgKHNldCkKLQkJZGF0YSA9IGF0aDVrX2h3X2JpdHN3YXAocmVnLCBiaXRzKTsKKwkJZGF0YSA9IGF0aDVrX2h3X2JpdHN3YXAodmFsLCBudW1fYml0cyk7CiAKLQlmb3IgKGkgPSBzaGlmdCA9IDAsIGxlZnQgPSBiaXRzOyBsZWZ0ID4gMDsgcG9zaXRpb24gPSAwLCBlbnRyeSsrLCBpKyspIHsKLQkJbGFzdCA9IChwb3NpdGlvbiArIGxlZnQgPiA4KSA/IDggOiBwb3NpdGlvbiArIGxlZnQ7Ci0JCW1hc2sgPSAoKCgxIDw8IGxhc3QpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8IChjb2wgKiA4KTsKKwlmb3IgKGJpdHNfc2hpZnRlZCA9IDAsIGJpdHNfbGVmdCA9IG51bV9iaXRzOyBiaXRzX2xlZnQgPiAwOworCXBvc2l0aW9uID0gMCwgZW50cnkrKykgeworCisJCWxhc3RfYml0ID0gKHBvc2l0aW9uICsgYml0c19sZWZ0ID4gOCkgPyA4IDoKKwkJCQkJcG9zaXRpb24gKyBiaXRzX2xlZnQ7CisKKwkJbWFzayA9ICgoKDEgPDwgbGFzdF9iaXQpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8CisJCQkJCQkJCShjb2wgKiA4KTsKIAogCQlpZiAoc2V0KSB7Ci0JCQlyZltlbnRyeV0gJj0gfm1hc2s7Ci0JCQlyZltlbnRyeV0gfD0gKChkYXRhIDw8IHBvc2l0aW9uKSA8PCAoY29sICogOCkpICYgbWFzazsKKwkJCXJmYltlbnRyeV0gJj0gfm1hc2s7CisJCQlyZmJbZW50cnldIHw9ICgoZGF0YSA8PCBwb3NpdGlvbikgPDwgKGNvbCAqIDgpKSAmIG1hc2s7CiAJCQlkYXRhID4+PSAoOCAtIHBvc2l0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgPSAoKChyZltlbnRyeV0gJiBtYXNrKSA+PiAoY29sICogOCkpID4+IHBvc2l0aW9uKQotCQkJCTw8IHNoaWZ0OwotCQkJc2hpZnQgKz0gbGFzdCAtIHBvc2l0aW9uOworCQkJZGF0YSB8PSAoKChyZmJbZW50cnldICYgbWFzaykgPj4gKGNvbCAqIDgpKSA+PiBwb3NpdGlvbikKKwkJCQk8PCBiaXRzX3NoaWZ0ZWQ7CisJCQliaXRzX3NoaWZ0ZWQgKz0gbGFzdF9iaXQgLSBwb3NpdGlvbjsKIAkJfQogCi0JCWxlZnQgLT0gOCAtIHBvc2l0aW9uOworCQliaXRzX2xlZnQgLT0gOCAtIHBvc2l0aW9uOwogCX0KIAotCWRhdGEgPSBzZXQgPyAxIDogYXRoNWtfaHdfYml0c3dhcChkYXRhLCBiaXRzKTsKKwlkYXRhID0gc2V0ID8gMSA6IGF0aDVrX2h3X2JpdHN3YXAoZGF0YSwgbnVtX2JpdHMpOwogCiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB1MzIgYXRoNWtfaHdfcmZyZWdzX2dhaW5mX2NvcnIoc3RydWN0IGF0aDVrX2h3ICphaCkKKy8qKioqKioqKioqKioqKioqKioqKioqXAorKiBSRiBHYWluIG9wdGltaXphdGlvbiAqCitcKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgY29kZSBpcyB1c2VkIHRvIG9wdGltaXplIHJmIGdhaW4gb24gZGlmZmVyZW50IGVudmlyb25tZW50cworICogKHRlbXByYXR1cmUgbW9zdGx5KSBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIGEgcG93ZXIgZGV0ZWN0b3IuCisgKgorICogSXQncyBvbmx5IHVzZWQgb24gUkY1MTExIGFuZCBSRjUxMTIsIGxhdGVyIFJGIGNoaXBzIHNlZW0gdG8gaGF2ZQorICogYXV0byBhZGp1c3RtZW50IG9uIGh3IC1ub3RpY2UgdGhleSBoYXZlIGEgbXVjaCBzbWFsbGVyIEJBTksgNyBhbmQKKyAqIG5vIGdhaW4gb3B0aW1pemF0aW9uIGxhZGRlci0uCisgKgorICogRm9yIG1vcmUgaW5mb3MgY2hlY2sgb3V0IHRoaXMgcGF0ZW50IGRvYworICogaHR0cDovL3d3dy5mcmVlcGF0ZW50c29ubGluZS5jb20vNzQwMDY5MS5odG1sCisgKgorICogVGhpcyBwYXBlciBkZXNjcmliZXMgcG93ZXIgZHJvcHMgYXMgc2VlbiBvbiB0aGUgcmVjZWl2ZXIgZHVlIHRvCisgKiBwcm9iZSBwYWNrZXRzCisgKiBodHRwOi8vd3d3LmNucmkuZGl0LmllL3B1YmxpY2F0aW9ucy9JQ1QwOCUyMC0lMjBQcmFjdGljYWwlMjBJc3N1ZXMKKyAqICUyMG9mJTIwUG93ZXIlMjBDb250cm9sLnBkZgorICoKKyAqIEFuZCB0aGlzIGlzIHRoZSBNYWRXaUZpIGJ1ZyBlbnRyeSByZWxhdGVkIHRvIHRoZSBhYm92ZQorICogaHR0cDovL21hZHdpZmktcHJvamVjdC5vcmcvdGlja2V0LzE2NTkKKyAqIHdpdGggdmFyaW91cyBtZWFzdXJlbWVudHMgYW5kIGRpYWdyYW1zCisgKgorICogVE9ETzogRGVhbCB3aXRoIHBvd2VyIGRyb3BzIGR1ZSB0byBwcm9iZXMgYnkgc2V0dGluZyBhbiBhcHJvcHJpYXRlCisgKiB0eCBwb3dlciBvbiB0aGUgcHJvYmUgcGFja2V0cyAhIE1ha2UgdGhpcyBwYXJ0IG9mIHRoZSBjYWxpYnJhdGlvbiBwcm9jZXNzLgorICovCisKKy8qIEluaXRpYWxpemUgYWhfZ2FpbiBkdXJyaW5nIGF0dGFjaCAqLworaW50IGF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCS8qIEluaXRpYWxpemUgdGhlIGdhaW4gb3B0aW1pemF0aW9uIHZhbHVlcyAqLworCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJY2FzZSBBUjVLX1JGNTExMToKKwkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMS5nb19kZWZhdWx0OworCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOworCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSAzNTsKKwkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGNTExMjoKKwkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMi5nb19kZWZhdWx0OworCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOworCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSA4NTsKKwkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNjaGVkdWxlIGEgZ2FpbiBwcm9iZSBjaGVjayBvbiB0aGUgbmV4dCB0cmFuc21pdGVkIHBhY2tldC4KKyAqIFRoYXQgbWVhbnMgb3VyIG5leHQgcGFja2V0IGlzIGdvaW5nIHRvIGJlIHNlbnQgd2l0aCBsb3dlcgorICogdHggcG93ZXIgYW5kIGEgUGVhayB0byBBdmVyYWdlIFBvd2VyIERldGVjdG9yIChQQVBEKSB3aWxsIHRyeQorICogdG8gbWVhc3VyZSB0aGUgZ2Fpbi4KKyAqCisgKiBUT0RPOiBVc2UgcHJvcHBlciB0eCBwb3dlciBzZXR0aW5nIGZvciB0aGUgcHJvYmUgcGFja2V0IHNvCisgKiB0aGF0IHdlIGRvbid0IG9ic2VydmUgYSBzZXJpb3VzIHBvd2VyIGRyb3Agb24gdGhlIHJlY2VpdmVyCisgKgorICogWFhYOiAgSG93IGFib3V0IGZvcmNpbmcgYSB0eCBwYWNrZXQgKGJ5cGFzc2luZyBQQ1UgYXJiaXRyYXRvciBldGMpCisgKiBqdXN0IGFmdGVyIHdlIGVuYWJsZSB0aGUgcHJvYmUgc28gdGhhdCB3ZSBkb24ndCBtZXNzIHdpdGgKKyAqIHN0YW5kYXJkIHRyYWZmaWMgPyBNYXliZSBpdCdzIHRpbWUgdG8gdXNlIHN3IGludGVycnVwdHMgYW5kCisgKiBhIHByb2JlIHRhc2tsZXQgISEhCisgKi8KK3N0YXRpYyB2b2lkIGF0aDVrX2h3X3JlcXVlc3RfcmZnYWluX3Byb2JlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisKKwkvKiBTa2lwIGlmIGdhaW4gY2FsaWJyYXRpb24gaXMgaW5hY3RpdmUgb3IKKwkgKiB3ZSBhbHJlYWR5IGhhbmRsZSBhIHByb2JlIHJlcXVlc3QgKi8KKwlpZiAoYWgtPmFoX2dhaW4uZ19zdGF0ZSAhPSBBUjVLX1JGR0FJTl9BQ1RJVkUpCisJCXJldHVybjsKKworCS8qIFNlbmQgdGhlIHBhY2tldCB3aXRoIDJkQiBiZWxvdyBtYXggcG93ZXIgYXMKKwkgKiBwYXRlbnQgZG9jIHN1Z2dlc3QgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKGFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyIC0gNCwKKwkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhQT1dFUikgfAorCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhULCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKKworCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRDsKKworfQorCisvKiBDYWxjdWxhdGUgZ2Fpbl9GIG1lYXN1cmVtZW50IGNvcnJlY3Rpb24KKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0ZXAgZm9yIFJGNTExMiByZXYuIDIgKi8KK3N0YXRpYyB1MzIgYXRoNWtfaHdfcmZfZ2FpbmZfY29ycihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCXUzMiBtaXgsIHN0ZXA7CiAJdTMyICpyZjsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgKmdvOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CisJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVnczsKKworCS8qIE9ubHkgUkY1MTEyIFJldi4gMiBzdXBwb3J0cyBpdCAqLworCWlmICgoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTEyKSB8fAorCShhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8PSBBUjVLX1NSRVZfUkFEXzUxMTJBKSkKKwkJcmV0dXJuIDA7CisKKwlnbyA9ICZyZmdhaW5fb3B0XzUxMTI7CisJcmZfcmVncyA9IHJmX3JlZ3NfNTExMmE7CisJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMmEpOworCisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwogCiAJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTExNjUsMTEgKzIyMSwxNSBAQAogCXJmID0gYWgtPmFoX3JmX2JhbmtzOwogCWFoLT5haF9nYWluLmdfZl9jb3JyID0gMDsKIAotCWlmIChhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDEsIDM2LCAwLCBmYWxzZSkgIT0gMSkKKwkvKiBObyBWR0EgKFZhcmlhYmxlIEdhaW4gQW1wbGlmaWVyKSBvdmVycmlkZSwgc2tpcCAqLworCWlmIChhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYVkdBX09WUiwgZmFsc2UpICE9IDEpCiAJCXJldHVybiAwOwogCi0Jc3RlcCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgNCwgMzIsIDAsIGZhbHNlKTsKLQltaXggPSBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19wYXJhbVswXTsKKwkvKiBNaXggZ2FpbiBzdGVwcGluZyAqLworCXN0ZXAgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYR0FJTl9TVEVQLCBmYWxzZSk7CisKKwkvKiBNaXggZ2FpbiBvdmVycmlkZSAqLworCW1peCA9IGdfc3RlcC0+Z29zX3BhcmFtWzBdOwogCiAJc3dpdGNoIChtaXgpIHsKIAljYXNlIDM6CkBAIC0xMTg5LDkgKzI0OSwxNCBAQAogCXJldHVybiBhaC0+YWhfZ2Fpbi5nX2ZfY29ycjsKIH0KIAotc3RhdGljIGJvb2wgYXRoNWtfaHdfcmZyZWdzX2dhaW5fcmVhZGJhY2soc3RydWN0IGF0aDVrX2h3ICphaCkKKy8qIENoZWNrIGlmIGN1cnJlbnQgZ2Fpbl9GIG1lYXN1cmVtZW50IGlzIGluIHRoZSByYW5nZSBvZiBvdXIKKyAqIHBvd2VyIGRldGVjdG9yIHdpbmRvd3MuIElmIHdlIGdldCBhIG1lYXN1cmVtZW50IG91dHNpZGUgcmFuZ2UKKyAqIHdlIGtub3cgaXQncyBub3QgYWNjdXJhdGUgKGRldGVjdG9ycyBjYW4ndCBtZWFzdXJlIGFueXRoaW5nIG91dHNpZGUKKyAqIHRoZWlyIGRldGVjdGlvbiB3aW5kb3cpIHNvIHdlIG11c3QgaWdub3JlIGl0ICovCitzdGF0aWMgYm9vbCBhdGg1a19od19yZl9jaGVja19nYWluZl9yZWFkYmFjayhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewotCXUzMiBzdGVwLCBtaXgsIGxldmVsWzRdOworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmX3JlZ3M7CisJdTMyIHN0ZXAsIG1peF9vdnIsIGxldmVsWzRdOwogCXUzMiAqcmY7CiAKIAlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpCkBAIC0xMjAwLDIzICsyNjUsMzMgQEAKIAlyZiA9IGFoLT5haF9yZl9iYW5rczsKIAogCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHsKLQkJc3RlcCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgNiwgMzcsIDAsCi0JCQkJZmFsc2UpOworCisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTE7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTEpOworCisJCXN0ZXAgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfUkZHQUlOX1NURVAsCisJCQlmYWxzZSk7CisKIAkJbGV2ZWxbMF0gPSAwOwotCQlsZXZlbFsxXSA9IChzdGVwID09IDB4M2YpID8gMHgzMiA6IHN0ZXAgKyA0OwotCQlsZXZlbFsyXSA9IChzdGVwICE9IDB4M2YpID8gMHg0MCA6IGxldmVsWzBdOwotCQlsZXZlbFszXSA9IGxldmVsWzJdICsgMHgzMjsKKwkJbGV2ZWxbMV0gPSAoc3RlcCA9PSA2MykgPyA1MCA6IHN0ZXAgKyA0OworCQlsZXZlbFsyXSA9IChzdGVwICE9IDYzKSA/IDY0IDogbGV2ZWxbMF07CisJCWxldmVsWzNdID0gbGV2ZWxbMl0gKyA1MCA7CiAKIAkJYWgtPmFoX2dhaW4uZ19oaWdoID0gbGV2ZWxbM10gLQotCQkJKHN0ZXAgPT0gMHgzZiA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTiA6IC01KTsKKwkJCShzdGVwID09IDYzID8gQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOIDogLTUpOwogCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IGxldmVsWzBdICsKLQkJCShzdGVwID09IDB4M2YgPyBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4gOiAwKTsKKwkJCShzdGVwID09IDYzID8gQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOIDogMCk7CiAJfSBlbHNlIHsKLQkJbWl4ID0gYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLCAwLCAxLCAzNiwgMCwKLQkJCQlmYWxzZSk7CisKKwkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMjsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMik7CisKKwkJbWl4X292ciA9IGF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMCwgQVI1S19SRl9NSVhWR0FfT1ZSLAorCQkJZmFsc2UpOworCiAJCWxldmVsWzBdID0gbGV2ZWxbMl0gPSAwOwogCi0JCWlmIChtaXggPT0gMSkgeworCQlpZiAobWl4X292ciA9PSAxKSB7CiAJCQlsZXZlbFsxXSA9IGxldmVsWzNdID0gODM7CiAJCX0gZWxzZSB7CiAJCQlsZXZlbFsxXSA9IGxldmVsWzNdID0gMTA3OwpAQCAtMTIzMCw5ICszMDUsMTIgQEAKIAkJCWFoLT5haF9nYWluLmdfY3VycmVudCA8PSBsZXZlbFszXSk7CiB9CiAKLXN0YXRpYyBzMzIgYXRoNWtfaHdfcmZyZWdzX2dhaW5fYWRqdXN0KHN0cnVjdCBhdGg1a19odyAqYWgpCisvKiBQZXJmb3JtIGdhaW5fRiBhZGp1c3RtZW50IGJ5IGNob29zaW5nIHRoZSByaWdodCBzZXQKKyAqIG9mIHBhcmFtZXRlcnMgZnJvbSByZiBnYWluIG9wdGltaXphdGlvbiBsYWRkZXIgKi8KK3N0YXRpYyBzOCBhdGg1a19od19yZl9nYWluZl9hZGp1c3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgKmdvOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewpAQCAtMTI0NiwzNSArMzI0LDM5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFoLT5haF9nYWluLmdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKKwlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CiAKIAlpZiAoYWgtPmFoX2dhaW4uZ19jdXJyZW50ID49IGFoLT5haF9nYWluLmdfaGlnaCkgeworCisJCS8qIFJlYWNoZWQgbWF4aW11bSAqLwogCQlpZiAoYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9PSAwKQogCQkJcmV0dXJuIC0xOworCiAJCWZvciAoYWgtPmFoX2dhaW4uZ190YXJnZXQgPSBhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQ7CiAJCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgPj0gIGFoLT5haF9nYWluLmdfaGlnaCAmJgogCQkJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPiAwOwotCQkJCWFoLT5haF9nYWluLmdfc3RlcCA9Ci0JCQkJCSZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XSkKKwkJCQlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCiAJCQlhaC0+YWhfZ2Fpbi5nX3RhcmdldCAtPSAyICoKIAkJCSAgICAoZ28tPmdvX3N0ZXBbLS0oYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCldLmdvc19nYWluIC0KLQkJCSAgICBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19nYWluKTsKKwkJCSAgICBnX3N0ZXAtPmdvc19nYWluKTsKIAogCQlyZXQgPSAxOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKGFoLT5haF9nYWluLmdfY3VycmVudCA8PSBhaC0+YWhfZ2Fpbi5nX2xvdykgeworCisJCS8qIFJlYWNoZWQgbWluaW11bSAqLwogCQlpZiAoYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9PSAoZ28tPmdvX3N0ZXBzX2NvdW50IC0gMSkpCiAJCQlyZXR1cm4gLTI7CisKIAkJZm9yIChhaC0+YWhfZ2Fpbi5nX3RhcmdldCA9IGFoLT5haF9nYWluLmdfY3VycmVudDsKIAkJCQlhaC0+YWhfZ2Fpbi5nX3RhcmdldCA8PSBhaC0+YWhfZ2Fpbi5nX2xvdyAmJgogCQkJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPCBnby0+Z29fc3RlcHNfY291bnQtMTsKLQkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkJCQkmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCisJCQkJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQogCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgLT0gMiAqCiAJCQkgICAgKGdvLT5nb19zdGVwWysrYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0uZ29zX2dhaW4gLQotCQkJICAgIGFoLT5haF9nYWluLmdfc3RlcC0+Z29zX2dhaW4pOworCQkJICAgIGdfc3RlcC0+Z29zX2dhaW4pOwogCiAJCXJldCA9IDI7CiAJCWdvdG8gZG9uZTsKQEAgLTEyODksMzUzICszNzEsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogUmVhZCBFRVBST00gQ2FsaWJyYXRpb24gZGF0YSwgbW9kaWZ5IFJGIEJhbmtzIGFuZCBJbml0aWFsaXplIFJGNTExMQotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMV9yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKKy8qIE1haW4gY2FsbGJhY2sgZm9yIHRoZXJtYWwgcmYgZ2FpbiBjYWxpYnJhdGlvbiBlbmdpbmUKKyAqIENoZWNrIGZvciBhIG5ldyBnYWluIHJlYWRpbmcgYW5kIHNjaGVkdWxlIGFuIGFkanVzdG1lbnQKKyAqIGlmIG5lZWRlZC4KKyAqCisgKiBUT0RPOiBVc2Ugc3cgaW50ZXJydXB0IHRvIHNjaGVkdWxlIHJlc2V0IGlmIGdhaW5fRiBuZWVkcworICogYWRqdXN0bWVudCAqLworZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2FpbmZfY2FsaWJyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CisJdTMyIGRhdGEsIHR5cGU7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0JdTMyICpyZjsKLQljb25zdCB1bnNpZ25lZCBpbnQgcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzUxMTEpOwotCXVuc2lnbmVkIGludCBpOwotCWludCBvYmRiID0gLTEsIGJhbmsgPSAtMTsKLQl1MzIgZWVfbW9kZTsKIAotCUFSNUtfQVNTRVJUX0VOVFJZKG1vZGUsIEFSNUtfTU9ERV9NQVgpOworCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKLQlyZiA9IGFoLT5haF9yZl9iYW5rczsKKwlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwgfHwKKwlhaC0+YWhfZ2Fpbi5nX3N0YXRlID09IEFSNUtfUkZHQUlOX0lOQUNUSVZFKQorCQlyZXR1cm4gQVI1S19SRkdBSU5fSU5BQ1RJVkU7CiAKLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmcmVnc181MTExW2ldLnJmX2JhbmsgPj0gQVI1S19SRjUxMTFfSU5JX1JGX01BWF9CQU5LUykgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBObyBjaGVjayByZXF1ZXN0ZWQsIGVpdGhlciBlbmdpbmUgaXMgaW5hY3RpdmUKKwkgKiBvciBhbiBhZGp1c3RtZW50IGlzIGFscmVhZHkgcmVxdWVzdGVkICovCisJaWYgKGFoLT5haF9nYWluLmdfc3RhdGUgIT0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQpCisJCWdvdG8gZG9uZTsKKworCS8qIFJlYWQgdGhlIFBBUEQgKFBlYWsgdG8gQXZlcmFnZSBQb3dlciBEZXRlY3RvcikKKwkgKiByZWdpc3RlciAqLworCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7CisKKwkvKiBObyBwcm9iZSBpcyBzY2hlZHVsZWQsIHJlYWQgZ2Fpbl9GIG1lYXN1cmVtZW50ICovCisJaWYgKCEoZGF0YSAmIEFSNUtfUEhZX1BBUERfUFJPQkVfVFhfTkVYVCkpIHsKKwkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0gZGF0YSA+PiBBUjVLX1BIWV9QQVBEX1BST0JFX0dBSU5GX1M7CisJCXR5cGUgPSBBUjVLX1JFR19NUyhkYXRhLCBBUjVLX1BIWV9QQVBEX1BST0JFX1RZUEUpOworCisJCS8qIElmIHR4IHBhY2tldCBpcyBDQ0sgY29ycmVjdCB0aGUgZ2Fpbl9GIG1lYXN1cmVtZW50CisJCSAqIGJ5IGNjayBvZmRtIGdhaW4gZGVsdGEgKi8KKwkJaWYgKHR5cGUgPT0gQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFX0NDSykgeworCQkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpCisJCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ICs9CisJCQkJCWVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhOworCQkJZWxzZQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPQorCQkJCQlBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlI7CiAJCX0KIAotCQlpZiAoYmFuayAhPSByZnJlZ3NfNTExMVtpXS5yZl9iYW5rKSB7Ci0JCQliYW5rID0gcmZyZWdzXzUxMTFbaV0ucmZfYmFuazsKLQkJCWFoLT5haF9vZmZzZXRbYmFua10gPSBpOworCQkvKiBGdXJ0aGVyIGNvcnJlY3QgZ2Fpbl9GIG1lYXN1cmVtZW50IGZvcgorCQkgKiBSRjUxMTJBIHJhZGlvcyAqLworCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJYXRoNWtfaHdfcmZfZ2FpbmZfY29ycihhaCk7CisJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2ZfY29yciA/CisJCQkJKGFoLT5haF9nYWluLmdfY3VycmVudC1haC0+YWhfZ2Fpbi5nX2ZfY29ycikgOgorCQkJCTA7CiAJCX0KIAotCQlyZltpXSA9IHJmcmVnc181MTExW2ldLnJmX3ZhbHVlW21vZGVdOworCQkvKiBDaGVjayBpZiBtZWFzdXJlbWVudCBpcyBvayBhbmQgaWYgd2UgbmVlZAorCQkgKiB0byBhZGp1c3QgZ2Fpbiwgc2NoZWR1bGUgYSBnYWluIGFkanVzdG1lbnQsCisJCSAqIGVsc2Ugc3dpdGNoIGJhY2sgdG8gdGhlIGFjaXZlIHN0YXRlICovCisJCWlmIChhdGg1a19od19yZl9jaGVja19nYWluZl9yZWFkYmFjayhhaCkgJiYKKwkJQVI1S19HQUlOX0NIRUNLX0FESlVTVCgmYWgtPmFoX2dhaW4pICYmCisJCWF0aDVrX2h3X3JmX2dhaW5mX2FkanVzdChhaCkpIHsKKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCX0KIAl9CiAKLQkvKiBNb2RpZnkgYmFuayAwICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQllbHNlCi0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7Ci0JCW9iZGIgPSAwOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzBdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMTE5LCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzBdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMTIyLCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW9iZGIgPSAxOwotCS8qIE1vZGlmeSBiYW5rIDYgKi8KLQl9IGVsc2UgewotCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0JIGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKLQkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgotCQkJIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX3B3ZF84NCwgMSwgNTEsIDMsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX3B3ZF85MCwgMSwgNDUsIDMsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkhZWUtPmVlX3hwZFtlZV9tb2RlXSwgMSwgOTUsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwgNCwgOTYsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLCBvYmRiID49IDAgPwotCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdIDogMCwgMywgMTA0LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwgb2JkYiA+PSAwID8KLQkJCWVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSA6IDAsIDMsIDEwNywgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTW9kaWZ5IGJhbmsgNyAqLwotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwgNiwgMjksIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX3hwZFtlZV9tb2RlXSwgMSwgNCwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogV3JpdGUgUkYgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewotCQlBUjVLX1JFR19XQUlUKGkpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmW2ldLCByZnJlZ3NfNTExMVtpXS5yZl9yZWdpc3Rlcik7Ci0JfQotCi0JcmV0dXJuIDA7Citkb25lOgorCXJldHVybiBhaC0+YWhfZ2Fpbi5nX3N0YXRlOwogfQogCi0vKgotICogUmVhZCBFRVBST00gQ2FsaWJyYXRpb24gZGF0YSwgbW9kaWZ5IFJGIEJhbmtzIGFuZCBJbml0aWFsaXplIFJGNTExMgotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMl9yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmICpyZl9pbmk7Ci0Jc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0JdTMyICpyZjsKLQl1bnNpZ25lZCBpbnQgcmZfc2l6ZSwgaTsKLQlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7Ci0JdTMyIGVlX21vZGU7Ci0KLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKLQotCXJmID0gYWgtPmFoX3JmX2JhbmtzOwotCi0JaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfMjExMkEKLQkJJiYgIXRlc3RfYml0KEFSNUtfTU9ERV8xMUEsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpKSB7Ci0JCXJmX2luaSA9IHJmcmVnc18yMTEyYTsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzUxMTJhKTsKLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLAotCQkJCSAgbW9kZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQltb2RlID0gbW9kZSAtIDI7IC8qbm8gYS90dXJib2EgbW9kZXMgZm9yIDIxMTIqLwotCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgewotCQlyZl9pbmkgPSByZnJlZ3NfNTExMmE7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyYSk7Ci0JfSBlbHNlIHsKLQkJcmZfaW5pID0gcmZyZWdzXzUxMTI7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyKTsKLQl9Ci0KLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmX2luaVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTEyX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoYmFuayAhPSByZl9pbmlbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmX2luaVtpXS5yZl9iYW5rOwotCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7Ci0JCX0KLQotCQlyZltpXSA9IHJmX2luaVtpXS5yZl92YWx1ZVttb2RlXTsKLQl9Ci0KLQkvKiBNb2RpZnkgYmFuayA2ICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKLQkJZWxzZQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQlvYmRiID0gMDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI4NywgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI5MCwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTcyNSA/IDMgOgotCQkgICAgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU1MDAgPyAyIDoKLQkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1MjYwID8gMSA6Ci0JCQkgICAgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID4gNDAwMCA/IDAgOiAtMSkpKTsKLQotCQlpZiAob2JkYiA9PSAtMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMjc5LCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMjgyLCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkgICAgZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwgMiwgMjcwLCAwLCB0cnVlKTsKLQlhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JICAgIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDIsIDI1NywgMCwgdHJ1ZSk7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDMwMiwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTW9kaWZ5IGJhbmsgNyAqLwotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwgNiwgMTQsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmZbaV0sIHJmX2luaVtpXS5yZl9yZWdpc3Rlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgUkY1NDEzLzU0MTQgYW5kIGZ1dHVyZSBjaGlwcwotICogKHVudGlsIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBzb2x1dGlvbikKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjU0MTNfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiAqcmZfaW5pOwotCXUzMiAqcmY7Ci0JdW5zaWduZWQgaW50IHJmX3NpemUsIGk7Ci0JaW50IGJhbmsgPSAtMTsKLQotCUFSNUtfQVNTRVJUX0VOVFJZKG1vZGUsIEFSNUtfTU9ERV9NQVgpOwotCi0JcmYgPSBhaC0+YWhfcmZfYmFua3M7Ci0KLQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewotCWNhc2UgQVI1S19SRjU0MTM6Ci0JCXJmX2luaSA9IHJmcmVnc181NDEzOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTQxMyk7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MTM6Ci0JCXJmX2luaSA9IHJmcmVnc18yNDEzOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQxMyk7Ci0KLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltb2RlID0gbW9kZSAtIDI7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MjU6Ci0JCXJmX2luaSA9IHJmcmVnc18yNDI1OwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQyNSk7Ci0KLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBNYXAgYiB0byBnICovCi0JCWlmIChtb2RlID09IDIpCi0JCQltb2RlID0gMDsKLQkJZWxzZQotCQkJbW9kZSA9IG1vZGUgLSAzOwotCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENvcHkgdmFsdWVzIHRvIG1vZGlmeSB0aGVtICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewotCQlpZiAocmZfaW5pW2ldLnJmX2JhbmsgPj0gQVI1S19SRjUxMTJfSU5JX1JGX01BWF9CQU5LUykgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChiYW5rICE9IHJmX2luaVtpXS5yZl9iYW5rKSB7Ci0JCQliYW5rID0gcmZfaW5pW2ldLnJmX2Jhbms7Ci0JCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKLQkJfQotCi0JCXJmW2ldID0gcmZfaW5pW2ldLnJmX3ZhbHVlW21vZGVdOwotCX0KLQotCS8qCi0JICogQWZ0ZXIgY29tcGFpcmluZyBkdW1wcyBmcm9tIGRpZmZlcmVudCBjYXJkcwotCSAqIHdlIGdldCB0aGUgc2FtZSBSRl9CVUZGRVIgc2V0dGluZ3MgKGRpZmYgcmV0dXJucwotCSAqIDAgbGluZXMpLiBJdCBzZWVtcyB0aGF0IFJGX0JVRkZFUiBzZXR0aW5ncyBhcmUgc3RhdGljCi0JICogYW5kIGFyZSB3cml0dGVuIHVubW9kaWZpZWQgKG5vIEVFUFJPTSBzdHVmZgotCSAqIGlzIHVzZWQgYmVjYXVzZSBjYWxpYnJhdGlvbiBkYXRhIHdvdWxkIGJlCi0JICogZGlmZmVyZW50IGJldHdlZW4gZGlmZmVyZW50IGNhcmRzIGFuZCB3b3VsZCByZXN1bHQKLQkgKiBkaWZmZXJlbnQgUkZfQlVGRkVSIHNldHRpbmdzKQotCSAqLwotCi0JLyogV3JpdGUgUkYgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZltpXSwgcmZfaW5pW2ldLnJmX3JlZ2lzdGVyKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBSRgotICovCi1pbnQgYXRoNWtfaHdfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JaW50ICgqZnVuYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQpOwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewotCWNhc2UgQVI1S19SRjUxMTE6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTExKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTExMV9yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjUxMTI6Ci0JCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzUxMTJBKQotCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzUxMTJhKTsKLQkJZWxzZQotCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzUxMTIpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1MTEyX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGNTQxMzoKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzU0MTMpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQxMzoKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzI0MTMpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQyNToKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzI0MjUpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7Ci0JCS8qIFhYWCBkbyBleHRyYSBjaGVja3M/ICovCi0JCWFoLT5haF9yZl9iYW5rcyA9IGttYWxsb2MoYWgtPmFoX3JmX2JhbmtzX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCi0JcmV0ID0gZnVuYyhhaCwgY2hhbm5lbCwgbW9kZSk7Ci0JaWYgKCFyZXQpCi0JCWFoLT5haF9yZl9nYWluID0gQVI1S19SRkdBSU5fSU5BQ1RJVkU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYXRoNWtfaHdfcmZnYWluKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKQorLyogV3JpdGUgaW5pdGlhbCByZiBnYWluIHRhYmxlIHRvIHNldCB0aGUgUkYgc2Vuc2l0aXZpdHkKKyAqIHRoaXMgb25lIHdvcmtzIG9uIGFsbCBSRiBjaGlwcyBhbmQgaGFzIG5vdGhpbmcgdG8gZG8KKyAqIHdpdGggZ2Fpbl9GIGNhbGlicmF0aW9uICovCitpbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpCiB7CiAJY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gKmF0aDVrX3JmZzsKIAl1bnNpZ25lZCBpbnQgaSwgc2l6ZTsKQEAgLTE2NDksMTkgKzQ1NiwyMiBAQAogCQlhdGg1a19yZmcgPSByZmdhaW5fNTExMjsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzUxMTIpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyNDEzOgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOworCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE2OgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjMxNjsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzIzMTYpOworCQlicmVhazsKIAljYXNlIEFSNUtfUkY1NDEzOgogCQlhdGg1a19yZmcgPSByZmdhaW5fNTQxMzsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzU0MTMpOwogCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDEzOgotCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKLQkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOwotCQlmcmVxID0gMDsgLyogb25seSAyR2h6ICovCi0JCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTc6CiAJY2FzZSBBUjVLX1JGMjQyNToKIAkJYXRoNWtfcmZnID0gcmZnYWluXzI0MjU7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDI1KTsKLQkJZnJlcSA9IDA7IC8qIG9ubHkgMkdoeiAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2ODQsNzMgKzQ5NCwzMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2V0X3JmX2dhaW4oc3RydWN0IGF0aDVrX2h3ICphaCkKKworCisvKioqKioqKioqKioqKioqKioqKipcCisqIFJGIFJlZ2lzdGVycyBzZXR1cCAqCitcKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIFNldHVwIFJGIHJlZ2lzdGVycyBieSB3cml0aW5nIHJmIGJ1ZmZlciBvbiBodworICovCitpbnQgYXRoNWtfaHdfcmZyZWdzX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQl1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQl1MzIgZGF0YSwgdHlwZTsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzOworCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgKmluaV9yZmI7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAgKmdfc3RlcDsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwl1OCBlZV9tb2RlID0gMDsKKwl1MzIgKnJmYjsKKwlpbnQgaSwgb2JkYiA9IC0xLCBiYW5rID0gLTE7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCi0JaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMIHx8ICFhaC0+YWhfZ2Fpbi5nX2FjdGl2ZSB8fAotCQkJYWgtPmFoX3ZlcnNpb24gPD0gQVI1S19BUjUyMTEpCi0JCXJldHVybiBBUjVLX1JGR0FJTl9JTkFDVElWRTsKLQotCWlmIChhaC0+YWhfcmZfZ2FpbiAhPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRCkKLQkJZ290byBkb25lOwotCi0JZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKLQotCWlmICghKGRhdGEgJiBBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQpKSB7Ci0JCWFoLT5haF9nYWluLmdfY3VycmVudCA9IGRhdGEgPj4gQVI1S19QSFlfUEFQRF9QUk9CRV9HQUlORl9TOwotCQl0eXBlID0gQVI1S19SRUdfTVMoZGF0YSwgQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFKTsKLQotCQlpZiAodHlwZSA9PSBBUjVLX1BIWV9QQVBEX1BST0JFX1RZUEVfQ0NLKQotCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ICs9IEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUjsKLQotCQlpZiAoYWgtPmFoX3JhZGlvID49IEFSNUtfUkY1MTEyKSB7Ci0JCQlhdGg1a19od19yZnJlZ3NfZ2FpbmZfY29ycihhaCk7Ci0JCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPQotCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2ZfY29yciA/Ci0JCQkJKGFoLT5haF9nYWluLmdfY3VycmVudC1haC0+YWhfZ2Fpbi5nX2ZfY29ycikgOgotCQkJCTA7Ci0JCX0KLQotCQlpZiAoYXRoNWtfaHdfcmZyZWdzX2dhaW5fcmVhZGJhY2soYWgpICYmCi0JCQkJQVI1S19HQUlOX0NIRUNLX0FESlVTVCgmYWgtPmFoX2dhaW4pICYmCi0JCQkJYXRoNWtfaHdfcmZyZWdzX2dhaW5fYWRqdXN0KGFoKSkKLQkJCWFoLT5haF9yZl9nYWluID0gQVI1S19SRkdBSU5fTkVFRF9DSEFOR0U7Ci0JfQotCi1kb25lOgotCXJldHVybiBhaC0+YWhfcmZfZ2FpbjsKLX0KLQotaW50IGF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0JLyogSW5pdGlhbGl6ZSB0aGUgZ2FpbiBvcHRpbWl6YXRpb24gdmFsdWVzICovCiAJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKIAljYXNlIEFSNUtfUkY1MTExOgotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4ID0gcmZnYWluX29wdF81MTExLmdvX2RlZmF1bHQ7Ci0JCWFoLT5haF9nYWluLmdfc3RlcCA9Ci0JCSAgICAmcmZnYWluX29wdF81MTExLmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07Ci0JCWFoLT5haF9nYWluLmdfbG93ID0gMjA7Ci0JCWFoLT5haF9nYWluLmdfaGlnaCA9IDM1OwotCQlhaC0+YWhfZ2Fpbi5nX2FjdGl2ZSA9IDE7CisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTE7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTEpOworCQlpbmlfcmZiID0gcmZiXzUxMTE7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTExMSk7CisJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1JGNTExMjoKLQkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMi5nb19kZWZhdWx0OwotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkgICAgJnJmZ2Fpbl9vcHRfNTExMi5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwotCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOwotCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSA4NTsKLQkJYWgtPmFoX2dhaW4uZ19hY3RpdmUgPSAxOworCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMmE7CisJCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTEyYSk7CisJCQlpbmlfcmZiID0gcmZiXzUxMTJhOworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81MTEyYSk7CisJCX0gZWxzZSB7CisJCQlyZl9yZWdzID0gcmZfcmVnc181MTEyOworCQkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMik7CisJCQlpbmlfcmZiID0gcmZiXzUxMTI7CisJCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzUxMTIpOworCQl9CisJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQxMzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQxMzsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQxMyk7CisJCWluaV9yZmIgPSByZmJfMjQxMzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNjoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjMxNjsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjMxNik7CisJCWluaV9yZmIgPSByZmJfMjMxNjsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yMzE2KTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGNTQxMzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfNTQxMzsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTQxMyk7CisJCWluaV9yZmIgPSByZmJfNTQxMzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81NDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQyNTsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQyNSk7CisJCWluaV9yZmIgPSByZmJfMjMxNzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yMzE3KTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQyNToKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQyNTsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQyNSk7CisJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVIyNDE3KSB7CisJCQlpbmlfcmZiID0gcmZiXzI0MjU7CisJCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzI0MjUpOworCQl9IGVsc2UgeworCQkJaW5pX3JmYiA9IHJmYl8yNDE3OworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDE3KTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBJZiBpdCdzIHRoZSBmaXJzdCB0aW1lIHdlIHNldCByZiBidWZmZXIsIGFsbG9jYXRlCisJICogYWgtPmFoX3JmX2JhbmtzIGJhc2VkIG9uIGFoLT5haF9yZl9iYW5rc19zaXplCisJICogd2Ugc2V0IGFib3ZlICovCisJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7CisJCWFoLT5haF9yZl9iYW5rcyA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiBhaC0+YWhfcmZfYmFua3Nfc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLworCXJmYiA9IGFoLT5haF9yZl9iYW5rczsKKworCWZvciAoaSA9IDA7IGkgPCBhaC0+YWhfcmZfYmFua3Nfc2l6ZTsgaSsrKSB7CisJCWlmIChpbmlfcmZiW2ldLnJmYl9iYW5rID49IEFSNUtfTUFYX1JGX0JBTktTKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBiYW5rXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogQmFuayBjaGFuZ2VkLCB3cml0ZSBkb3duIHRoZSBvZmZzZXQgKi8KKwkJaWYgKGJhbmsgIT0gaW5pX3JmYltpXS5yZmJfYmFuaykgeworCQkJYmFuayA9IGluaV9yZmJbaV0ucmZiX2Jhbms7CisJCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKKwkJfQorCisJCXJmYltpXSA9IGluaV9yZmJbaV0ucmZiX21vZGVfZGF0YVttb2RlXTsKKwl9CisKKwkvKiBTZXQgT3V0cHV0IGFuZCBEcml2ZXIgYmlhcyBjdXJyZW50IChPQi9EQikgKi8KKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKKwkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKKwkJZWxzZQorCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCisJCS8qIEZvciBSRjUxMVgvUkYyMTFYIGNvbWJpbmF0aW9uIHdlCisJCSAqIHVzZSBiX09CIGFuZCBiX0RCIHBhcmFtZXRlcnMgc3RvcmVkCisJCSAqIGluIGVlcHJvbSBvbiBlZS0+ZWVfb2JbZWVfbW9kZV1bMF0KKwkJICoKKwkJICogRm9yIGFsbCBvdGhlciBjaGlwcyB3ZSB1c2UgT0IvREIgZm9yIDJHaHoKKwkJICogc3RvcmVkIGluIHRoZSBiL2cgbW9kYWwgc2VjdGlvbiBqdXN0IGxpa2UKKwkJICogODAyLjExYSBvbiBlZS0+ZWVfb2JbZWVfbW9kZV1bMV0gKi8KKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpKQorCQkJb2JkYiA9IDA7CisJCWVsc2UKKwkJCW9iZGIgPSAxOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9PQl8yR0haLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfREJfMkdIWiwgdHJ1ZSk7CisKKwkvKiBSRjUxMTEgYWx3YXlzIG5lZWRzIE9CL0RCIGZvciA1R0h6LCBldmVuIGlmIHdlIHVzZSAyR0h6ICovCisJfSBlbHNlIGlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopIHx8CisJCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSkgeworCisJCS8qIEZvciAxMWEsIFR1cmJvIGFuZCBYUiB3ZSBuZWVkIHRvIGNob29zZQorCQkgKiBPQi9EQiBiYXNlZCBvbiBmcmVxdWVuY3kgcmFuZ2UgKi8KKwkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOworCQlvYmRiID0JIGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKKwkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgorCQkJIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7CisKKwkJaWYgKG9iZGIgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sCisJCQkJCQlBUjVLX1JGX09CXzVHSFosIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2RiW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9EQl81R0haLCB0cnVlKTsKKwl9CisKKwlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CisKKwkvKiBCYW5rIE1vZGlmaWNhdGlvbnMgKGNoaXAtc3BlY2lmaWMpICovCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgeworCisJCS8qIFNldCBnYWluX0Ygc2V0dGluZ3MgYWNjb3JkaW5nIHRvIGN1cnJlbnQgc3RlcCAqLworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfRlJBTUVfQ1RMLAorCQkJCQlBUjVLX1BIWV9GUkFNRV9DVExfVFhfQ0xJUCwKKwkJCQkJZ19zdGVwLT5nb3NfcGFyYW1bMF0pOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzFdLAorCQkJCQkJCUFSNUtfUkZfUFdEXzkwLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsyXSwKKwkJCQkJCQlBUjVLX1JGX1BXRF84NCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bM10sCisJCQkJCQlBUjVLX1JGX1JGR0FJTl9TRUwsIHRydWUpOworCisJCQkvKiBXZSBwcm9ncmFtbWVkIGdhaW5fRiBwYXJhbWV0ZXJzLCBzd2l0Y2ggYmFjaworCQkJICogdG8gYWN0aXZlIHN0YXRlICovCisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCisJCX0KKworCQkvKiBCYW5rIDYvNyBzZXR1cCAqLworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgIWVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BXRF9YUEQsIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX0dBSU4sIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BMT19TRUwsIHRydWUpOworCisJCS8qIFRPRE86IEhhbGYvcXVhcnRlciBjaGFubmVsIHN1cHBvcnQgKi8KKwl9CisKKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB7CisKKwkJLyogU2V0IGdhaW5fRiBzZXR0aW5ncyBhY2NvcmRpbmcgdG8gY3VycmVudCBzdGVwICovCisJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkgeworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzBdLAorCQkJCQkJQVI1S19SRl9NSVhHQUlOX09WUiwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bMV0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzgsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzJdLAorCQkJCQkJQVI1S19SRl9QV0RfMTM3LCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVszXSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzNiwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bNF0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzIsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzVdLAorCQkJCQkJQVI1S19SRl9QV0RfMTMxLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVs2XSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzMCwgdHJ1ZSk7CisKKwkJCS8qIFdlIHByb2dyYW1tZWQgZ2Fpbl9GIHBhcmFtZXRlcnMsIHN3aXRjaCBiYWNrCisJCQkgKiB0byBhY3RpdmUgc3RhdGUgKi8KKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCX0KKworCQkvKiBCYW5rIDYvNyBzZXR1cCAqLworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hwZFtlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX1NFTCwgdHJ1ZSk7CisKKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwgQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJLyogUmV2LiAxIHN1cHBvcnRzIG9ubHkgb25lIHhwZCAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX0dBSU4sIHRydWUpOworCisJCX0gZWxzZSB7CisJCQkvKiBUT0RPOiBTZXQgaGlnaCBhbmQgbG93IGdhaW4gYml0cyAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfUERfR0FJTl9MTywgdHJ1ZSk7CisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsCisJCQkJCQllZS0+ZWVfeF9nYWluW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QRF9HQUlOX0hJLCB0cnVlKTsKKworCQkJLyogTG93ZXIgc3ludGggdm9sdGFnZSBvbiBSZXYgMiAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX0hJR0hfVkNfQ1AsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCisJCQkJCUFSNUtfUkZfTUlEX1ZDX0NQLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX0xPV19WQ19DUCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9QVVNIX1VQLCB0cnVlKTsKKworCQkJLyogRGVjcmVhc2UgcG93ZXIgY29uc3VtcHRpb24gb24gNTIxMysgQmFzZUJhbmQgKi8KKwkJCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1BBRDJHTkQsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9YQjJfTFZMLCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfWEI1X0xWTCwgdHJ1ZSk7CisKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1BXRF8xNjcsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QV0RfMTY2LCB0cnVlKTsKKwkJCX0KKwkJfQorCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKKworCQkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgY2hhbm5lbCBzdXBwb3J0ICovCisKKwl9CisKKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzICYmCisJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsIEFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwKKwkJCQkJCQkJCXRydWUpOworCisJCS8qIFNldCBvcHRpbXVtIHZhbHVlIGZvciBlYXJseSByZXZpc2lvbnMgKG9uIHBjaS1lIGNoaXBzKSAqLworCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQgJiYKKwkJYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTQxMykKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgYXRoNWtfaHdfYml0c3dhcCg2LCAzKSwKKwkJCQkJCUFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsIHRydWUpOworCisJfQorCisJLyogV3JpdGUgUkYgYmFua3Mgb24gaHcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX2JhbmtzX3NpemU7IGkrKykgeworCQlBUjVLX1JFR19XQUlUKGkpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmYltpXSwgaW5pX3JmYltpXS5yZmJfY3RybF9yZWdpc3Rlcik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqXAogICBQSFkvUkYgY2hhbm5lbCBmdW5jdGlvbnMKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyNzEsMTMgKzEzMzQsOCBAQAogCSAqIGFzIG9mdGVuIGFzIEkvUSBjYWxpYnJhdGlvbi4qLwogCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQkvKiBSZXF1ZXN0IFJGIGdhaW4gKi8KLQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhwb3dlci50eHBfbWF4LAotCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWFBPV0VSKSB8Ci0JCQlBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQsIEFSNUtfUEhZX1BBUERfUFJPQkUpOwotCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVEOwotCX0KKwkvKiBJbml0aWF0ZSBhIGdhaW5fRiBjYWxpYnJhdGlvbiAqLworCWF0aDVrX2h3X3JlcXVlc3RfcmZnYWluX3Byb2JlKGFoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM3OCw5MyArMTQzNiwxMTIwIEBACiAJcmV0dXJuIGZhbHNlOyAvKlhYWDogV2hhdCBkbyB3ZSByZXR1cm4gZm9yIDUyMTAgPyovCiB9CiAKKworLyoqKioqKioqKioqKioqKipcCisqIFRYIHBvd2VyIHNldHVwICoKK1wqKioqKioqKioqKioqKioqLworCiAvKgotICogVFggcG93ZXIgc2V0dXAKKyAqIEhlbHBlciBmdW5jdGlvbnMKICAqLwogCiAvKgotICogSW5pdGlhbGl6ZSB0aGUgdHggcG93ZXIgdGFibGUgKG5vdCBmdWxseSBpbXBsZW1lbnRlZCkKKyAqIERvIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIGdpdmVuICh4LCB5KSBwb2ludHMKICAqLwotc3RhdGljIHZvaWQgYXRoNWtfdHhwb3dlcl90YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHMxNiBtYXhfcG93ZXIpCitzdGF0aWMgczE2CithdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHMxNiB0YXJnZXQsIHMxNiB4X2xlZnQsIHMxNiB4X3JpZ2h0LAorCQkJCQlzMTYgeV9sZWZ0LCBzMTYgeV9yaWdodCkKIHsKLQl1bnNpZ25lZCBpbnQgaSwgbWluLCBtYXgsIG47Ci0JdTE2IHR4cG93ZXIsICpyYXRlczsKKwlzMTYgcmF0aW8sIHJlc3VsdDsKIAotCXJhdGVzID0gYWgtPmFoX3R4cG93ZXIudHhwX3JhdGVzOworCS8qIEF2b2lkIGRpdmlkZSBieSB6ZXJvIGFuZCBza2lwIGludGVycG9sYXRpb24KKwkgKiBpZiB3ZSBoYXZlIHRoZSBzYW1lIHBvaW50ICovCisJaWYgKCh4X2xlZnQgPT0geF9yaWdodCkgfHwgKHlfbGVmdCA9PSB5X3JpZ2h0KSkKKwkJcmV0dXJuIHlfbGVmdDsKIAotCXR4cG93ZXIgPSBBUjVLX1RVTkVfREVGQVVMVF9UWFBPV0VSICogMjsKLQlpZiAobWF4X3Bvd2VyID4gdHhwb3dlcikKLQkJdHhwb3dlciA9IG1heF9wb3dlciA+IEFSNUtfVFVORV9NQVhfVFhQT1dFUiA/Ci0JCSAgICBBUjVLX1RVTkVfTUFYX1RYUE9XRVIgOiBtYXhfcG93ZXI7CisJLyoKKwkgKiBTaW5jZSB3ZSB1c2UgaW50cyBhbmQgbm90IGZwcywgd2UgbmVlZCB0byBzY2FsZSB1cCBpbgorCSAqIG9yZGVyIHRvIGdldCBhIHNhbmUgcmF0aW8gdmFsdWUgKG9yIGVsc2Ugd2UgJ2xsIGVnLiBnZXQKKwkgKiBhbHdheXMgMSBpbnN0ZWFkIG9mIDEuMjUsIDEuNzUgZXRjKS4gV2Ugc2NhbGUgdXAgYnkgMTAwCisJICogdG8gaGF2ZSBzb21lIGFjY3VyYWN5IGJvdGggZm9yIDAuNSBhbmQgMC4yNSBzdGVwcy4KKwkgKi8KKwlyYXRpbyA9ICgoMTAwICogeV9yaWdodCAtIDEwMCAqIHlfbGVmdCkvKHhfcmlnaHQgLSB4X2xlZnQpKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUjVLX01BWF9SQVRFUzsgaSsrKQotCQlyYXRlc1tpXSA9IHR4cG93ZXI7CisJLyogTm93IHNjYWxlIGRvd24gdG8gYmUgaW4gcmFuZ2UgKi8KKwlyZXN1bHQgPSB5X2xlZnQgKyAocmF0aW8gKiAodGFyZ2V0IC0geF9sZWZ0KSAvIDEwMCk7CiAKLQkvKiBYWFggc2V0dXAgdGFyZ2V0IHBvd2VycyBieSByYXRlICovCi0KLQlhaC0+YWhfdHhwb3dlci50eHBfbWluID0gcmF0ZXNbN107Ci0JYWgtPmFoX3R4cG93ZXIudHhwX21heCA9IHJhdGVzWzBdOwotCWFoLT5haF90eHBvd2VyLnR4cF9vZmRtID0gcmF0ZXNbMF07Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIHBvd2VyIHRhYmxlICovCi0JbiA9IEFSUkFZX1NJWkUoYWgtPmFoX3R4cG93ZXIudHhwX3BjZGFjKTsKLQltaW4gPSBBUjVLX0VFUFJPTV9QQ0RBQ19TVEFSVDsKLQltYXggPSBBUjVLX0VFUFJPTV9QQ0RBQ19TVE9QOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpICs9IEFSNUtfRUVQUk9NX1BDREFDX1NURVApCi0JCWFoLT5haF90eHBvd2VyLnR4cF9wY2RhY1tpXSA9Ci0jaWZkZWYgbm90eWV0Ci0JCW1pbiArICgoaSAqIChtYXggLSBtaW4pKSAvIG4pOwotI2Vsc2UKLQkJbWluOwotI2VuZGlmCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoKLSAqIFNldCB0cmFuc21pdGlvbiBwb3dlcgorICogRmluZCB2ZXJ0aWNhbCBib3VuZGFyeSAobWluIHB3cikgZm9yIHRoZSBsaW5lYXIgUENEQUMgY3VydmUuCisgKgorICogU2luY2Ugd2UgaGF2ZSB0aGUgdG9wIG9mIHRoZSBjdXJ2ZSBhbmQgd2UgZHJhdyB0aGUgbGluZSBiZWxvdworICogdW50aWwgd2UgcmVhY2ggMSAoMSBwY2RhYyBzdGVwKSB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggcG9pbnQKKyAqICh4IHZhbHVlKSB0aGF0IGlzIHNvIHRoYXQgd2UgZG9uJ3QgZ28gYmVsb3cgeSBheGlzIGFuZCBoYXZlIG5lZ2F0aXZlCisgKiBwY2RhYyB2YWx1ZXMgd2hlbiBjcmVhdGluZyB0aGUgY3VydmUsIG9yIGZpbGwgdGhlIHRhYmxlIHdpdGggemVyb2VzLgogICovCi1pbnQgLypPLksuIC0gdHhwb3dlcl90YWJsZSBpcyB1bmltcGxlbWVudGVkIHNvIHRoaXMgZG9lc24ndCB3b3JrKi8KLWF0aDVrX2h3X3R4cG93ZXIoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAotCQl1bnNpZ25lZCBpbnQgdHhwb3dlcikKK3N0YXRpYyBzMTYKK2F0aDVrX2dldF9saW5lYXJfcGNkYWNfbWluKGNvbnN0IHU4ICpzdGVwTCwgY29uc3QgdTggKnN0ZXBSLAorCQkJCWNvbnN0IHMxNiAqcHdyTCwgY29uc3QgczE2ICpwd3JSKQogewotCWJvb2wgdHBjID0gYWgtPmFoX3R4cG93ZXIudHhwX3RwYzsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzOCB0bXA7CisJczE2IG1pbl9wd3JMLCBtaW5fcHdyUjsKKwlzMTYgcHdyX2kgPSBwd3JMWzBdOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAodHhwb3dlciA+IEFSNUtfVFVORV9NQVhfVFhQT1dFUikgewotCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCB0eCBwb3dlcjogJXVcbiIsIHR4cG93ZXIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlkbyB7CisJCXB3cl9pLS07CisJCXRtcCA9IChzOCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShwd3JfaSwKKwkJCQkJCXB3ckxbMF0sIHB3ckxbMV0sCisJCQkJCQlzdGVwTFswXSwgc3RlcExbMV0pOworCisJfSB3aGlsZSAodG1wID4gMSk7CisKKwltaW5fcHdyTCA9IHB3cl9pOworCisJcHdyX2kgPSBwd3JSWzBdOworCWRvIHsKKwkJcHdyX2ktLTsKKwkJdG1wID0gKHM4KSBhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHB3cl9pLAorCQkJCQkJcHdyUlswXSwgcHdyUlsxXSwKKwkJCQkJCXN0ZXBSWzBdLCBzdGVwUlsxXSk7CisKKwl9IHdoaWxlICh0bXAgPiAxKTsKKworCW1pbl9wd3JSID0gcHdyX2k7CisKKwkvKiBLZWVwIHRoZSByaWdodCBib3VuZGFyeSBzbyB0aGF0IGl0IHdvcmtzIGZvciBib3RoIGN1cnZlcyAqLworCXJldHVybiBtYXgobWluX3B3ckwsIG1pbl9wd3JSKTsKK30KKworLyoKKyAqIEludGVycG9sYXRlIChwd3IsdnBkKSBwb2ludHMgdG8gY3JlYXRlIGEgUG93ZXIgdG8gUERBREMgb3IgYQorICogUG93ZXIgdG8gUENEQUMgY3VydmUuCisgKgorICogRWFjaCBjdXJ2ZSBoYXMgcG93ZXIgb24geCBheGlzIChpbiAwLjVkQiB1bml0cykgYW5kIFBDREFDL1BEQURDCisgKiBzdGVwcyAob2Zmc2V0cykgb24geSBheGlzLiBQb3dlciBjYW4gZ28gdXAgdG8gMzEuNWRCIGFuZCBtYXgKKyAqIFBDREFDL1BEQURDIHN0ZXAgZm9yIGVhY2ggY3VydmUgaXMgNjQgYnV0IHdlIGNhbiB3cml0ZSBtb3JlIHRoYW4KKyAqIG9uZSBjdXJ2ZXMgb24gaHcgc28gd2UgY2FuIGdvIHVwIHRvIDEyOCAod2hpY2ggaXMgdGhlIG1heCBzdGVwIHdlCisgKiBjYW4gd3JpdGUgb24gdGhlIGZpbmFsIHRhYmxlKS4KKyAqCisgKiBXZSB3cml0ZSB5IHZhbHVlcyAoUENEQUMvUERBREMgc3RlcHMpIG9uIGh3LgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfY3JlYXRlX3Bvd2VyX2N1cnZlKHMxNiBwbWluLCBzMTYgcG1heCwKKwkJCWNvbnN0IHMxNiAqcHdyLCBjb25zdCB1OCAqdnBkLAorCQkJdTggbnVtX3BvaW50cywKKwkJCXU4ICp2cGRfdGFibGUsIHU4IHR5cGUpCit7CisJdTggaWR4WzJdID0geyAwLCAxIH07CisJczE2IHB3cl9pID0gMipwbWluOworCWludCBpOworCisJaWYgKG51bV9wb2ludHMgPCAyKQorCQlyZXR1cm47CisKKwkvKiBXZSB3YW50IHRoZSB3aG9sZSBsaW5lLCBzbyBhZGp1c3QgYm91bmRhcmllcworCSAqIHRvIGNvdmVyIHRoZSBlbnRpcmUgcG93ZXIgcmFuZ2UuIE5vdGUgdGhhdAorCSAqIHBvd2VyIHZhbHVlcyBhcmUgYWxyZWFkeSAwLjI1ZEIgc28gbm8gbmVlZAorCSAqIHRvIG11bHRpcGx5IHB3cl9pIGJ5IDIgKi8KKwlpZiAodHlwZSA9PSBBUjVLX1BXUlRBQkxFX0xJTkVBUl9QQ0RBQykgeworCQlwd3JfaSA9IHBtaW47CisJCXBtaW4gPSAwOworCQlwbWF4ID0gNjM7CiAJfQogCi0JLyoKLQkgKiBSRjI0MTMgZm9yIHNvbWUgcmVhc29uIGNhbid0Ci0JICogdHJhbnNtaXQgYW55dGhpbmcgaWYgd2UgY2FsbAotCSAqIHRoaXMgZnVudGlvbiwgc28gd2Ugc2tpcCBpdAotCSAqIHVudGlsIHdlIGZpeCB0eHBvd2VyLgorCS8qIEZpbmQgc3Vycm91bmRpbmcgdHVybmluZyBwb2ludHMgKFRQcykKKwkgKiBhbmQgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGVtICovCisJZm9yIChpID0gMDsgKGkgPD0gKHUxNikgKHBtYXggLSBwbWluKSkgJiYKKwkoaSA8IEFSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUpOyBpKyspIHsKKworCQkvKiBXZSBwYXNzZWQgdGhlIHJpZ2h0IFRQLCBtb3ZlIHRvIHRoZSBuZXh0IHNldCBvZiBUUHMKKwkJICogaWYgd2UgcGFzcyB0aGUgbGFzdCBUUCwgZXh0cmFwb2xhdGUgYWJvdmUgdXNpbmcgdGhlIGxhc3QKKwkJICogdHdvIFRQcyBmb3IgcmF0aW8gKi8KKwkJaWYgKChwd3JfaSA+IHB3cltpZHhbMV1dKSAmJiAoaWR4WzFdIDwgbnVtX3BvaW50cyAtIDEpKSB7CisJCQlpZHhbMF0rKzsKKwkJCWlkeFsxXSsrOworCQl9CisKKwkJdnBkX3RhYmxlW2ldID0gKHU4KSBhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHB3cl9pLAorCQkJCQkJcHdyW2lkeFswXV0sIHB3cltpZHhbMV1dLAorCQkJCQkJdnBkW2lkeFswXV0sIHZwZFtpZHhbMV1dKTsKKworCQkvKiBJbmNyZWFzZSBieSAwLjVkQgorCQkgKiAoMC4yNSBkQiB1bml0cykgKi8KKwkJcHdyX2kgKz0gMjsKKwl9Cit9CisKKy8qCisgKiBHZXQgdGhlIHN1cnJvdW5kaW5nIHBlci1jaGFubmVsIHBvd2VyIGNhbGlicmF0aW9uIHBpZXJzCisgKiBmb3IgYSBnaXZlbiBmcmVxdWVuY3kgc28gdGhhdCB3ZSBjYW4gaW50ZXJwb2xhdGUgYmV0d2VlbgorICogdGhlbSBhbmQgY29tZSB1cCB3aXRoIGFuIGFwcm9wcmlhdGUgZGF0YXNldCBmb3Igb3VyIGN1cnJlbnQKKyAqIGNoYW5uZWwuCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19nZXRfY2hhbl9wY2FsX3N1cnJvdW5kaW5nX3BpZXJzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKipwY2luZm9fbCwKKwkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqKnBjaW5mb19yKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNpbmZvOworCXU4IGlkeF9sLCBpZHhfcjsKKwl1OCBtb2RlLCBtYXgsIGk7CisJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJaWR4X2wgPSAwOworCWlkeF9yID0gMDsKKworCWlmICghKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSkgeworCQlwY2luZm8gPSBlZS0+ZWVfcHdyX2NhbF9iOworCQltb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUI7CisJfSBlbHNlIGlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfMkdIWikgeworCQlwY2luZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOworCQltb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7CisJfSBlbHNlIHsKKwkJcGNpbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOworCX0KKwltYXggPSBlZS0+ZWVfbl9waWVyc1ttb2RlXSAtIDE7CisKKwkvKiBGcmVxdWVuY3kgaXMgYmVsb3cgb3VyIGNhbGlicmF0ZWQKKwkgKiByYW5nZS4gVXNlIHRoZSBsb3dlc3QgcG93ZXIgY3VydmUKKwkgKiB3ZSBoYXZlICovCisJaWYgKHRhcmdldCA8IHBjaW5mb1swXS5mcmVxKSB7CisJCWlkeF9sID0gaWR4X3IgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRnJlcXVlbmN5IGlzIGFib3ZlIG91ciBjYWxpYnJhdGVkCisJICogcmFuZ2UuIFVzZSB0aGUgaGlnaGVzdCBwb3dlciBjdXJ2ZQorCSAqIHdlIGhhdmUgKi8KKwlpZiAodGFyZ2V0ID4gcGNpbmZvW21heF0uZnJlcSkgeworCQlpZHhfbCA9IGlkeF9yID0gbWF4OworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRnJlcXVlbmN5IGlzIGluc2lkZSBvdXIgY2FsaWJyYXRlZAorCSAqIGNoYW5uZWwgcmFuZ2UuIFBpY2sgdGhlIHN1cnJvdW5kaW5nCisJICogY2FsaWJyYXRpb24gcGllcnMgc28gdGhhdCB3ZSBjYW4KKwkgKiBpbnRlcnBvbGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPD0gbWF4OyBpKyspIHsKKworCQkvKiBGcmVxdWVuY3kgbWF0Y2hlcyBvbmUgb2Ygb3VyIGNhbGlicmF0aW9uCisJCSAqIHBpZXJzLCBubyBuZWVkIHRvIGludGVycG9sYXRlLCBqdXN0IHVzZQorCQkgKiB0aGF0IGNhbGlicmF0aW9uIHBpZXIgKi8KKwkJaWYgKHBjaW5mb1tpXS5mcmVxID09IHRhcmdldCkgeworCQkJaWR4X2wgPSBpZHhfciA9IGk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBXZSBmb3VuZCBhIGNhbGlicmF0aW9uIHBpZXIgdGhhdCdzIGFib3ZlCisJCSAqIGZyZXF1ZW5jeSwgdXNlIHRoaXMgcGllciBhbmQgdGhlIHByZXZpb3VzCisJCSAqIG9uZSB0byBpbnRlcnBvbGF0ZSAqLworCQlpZiAodGFyZ2V0IDwgcGNpbmZvW2ldLmZyZXEpIHsKKwkJCWlkeF9yID0gaTsKKwkJCWlkeF9sID0gaWR4X3IgLSAxOworCQkJZ290byBkb25lOworCQl9CisJfQorCitkb25lOgorCSpwY2luZm9fbCA9ICZwY2luZm9baWR4X2xdOworCSpwY2luZm9fciA9ICZwY2luZm9baWR4X3JdOworCisJcmV0dXJuOworfQorCisvKgorICogR2V0IHRoZSBzdXJyb3VuZGluZyBwZXItcmF0ZSBwb3dlciBjYWxpYnJhdGlvbiBkYXRhCisgKiBmb3IgYSBnaXZlbiBmcmVxdWVuY3kgYW5kIGludGVycG9sYXRlIGJldHdlZW4gcG93ZXIKKyAqIHZhbHVlcyB0byBzZXQgbWF4IHRhcmdldCBwb3dlciBzdXBwb3J0ZWQgYnkgaHcgZm9yCisgKiBlYWNoIHJhdGUuCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19nZXRfcmF0ZV9wY2FsX2RhdGEoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcmF0ZXMpCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvICpycGluZm87CisJdTggaWR4X2wsIGlkeF9yOworCXU4IG1vZGUsIG1heCwgaTsKKwl1MzIgdGFyZ2V0ID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisKKwlpZHhfbCA9IDA7CisJaWR4X3IgPSAwOworCisJaWYgKCEoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pKSB7CisJCXJwaW5mbyA9IGVlLT5lZV9yYXRlX3Rwd3JfYjsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOworCX0gZWxzZSBpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKwkJcnBpbmZvID0gZWUtPmVlX3JhdGVfdHB3cl9nOworCQltb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7CisJfSBlbHNlIHsKKwkJcnBpbmZvID0gZWUtPmVlX3JhdGVfdHB3cl9hOworCQltb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7CisJfQorCW1heCA9IGVlLT5lZV9yYXRlX3RhcmdldF9wd3JfbnVtW21vZGVdIC0gMTsKKworCS8qIEdldCB0aGUgc3Vycm91bmRpbmcgY2FsaWJyYXRpb24KKwkgKiBwaWVycyAtIHNhbWUgYXMgYWJvdmUgKi8KKwlpZiAodGFyZ2V0IDwgcnBpbmZvWzBdLmZyZXEpIHsKKwkJaWR4X2wgPSBpZHhfciA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAodGFyZ2V0ID4gcnBpbmZvW21heF0uZnJlcSkgeworCQlpZHhfbCA9IGlkeF9yID0gbWF4OworCQlnb3RvIGRvbmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8PSBtYXg7IGkrKykgeworCisJCWlmIChycGluZm9baV0uZnJlcSA9PSB0YXJnZXQpIHsKKwkJCWlkeF9sID0gaWR4X3IgPSBpOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKHRhcmdldCA8IHJwaW5mb1tpXS5mcmVxKSB7CisJCQlpZHhfciA9IGk7CisJCQlpZHhfbCA9IGlkeF9yIC0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwkvKiBOb3cgaW50ZXJwb2xhdGUgcG93ZXIgdmFsdWUsIGJhc2VkIG9uIHRoZSBmcmVxdWVuY3kgKi8KKwlyYXRlcy0+ZnJlcSA9IHRhcmdldDsKKworCXJhdGVzLT50YXJnZXRfcG93ZXJfNnRvMjQgPQorCQlhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwgcnBpbmZvW2lkeF9sXS5mcmVxLAorCQkJCQlycGluZm9baWR4X3JdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfbF0udGFyZ2V0X3Bvd2VyXzZ0bzI0LAorCQkJCQlycGluZm9baWR4X3JdLnRhcmdldF9wb3dlcl82dG8yNCk7CisKKwlyYXRlcy0+dGFyZ2V0X3Bvd2VyXzM2ID0KKwkJYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsIHJwaW5mb1tpZHhfbF0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9yXS5mcmVxLAorCQkJCQlycGluZm9baWR4X2xdLnRhcmdldF9wb3dlcl8zNiwKKwkJCQkJcnBpbmZvW2lkeF9yXS50YXJnZXRfcG93ZXJfMzYpOworCisJcmF0ZXMtPnRhcmdldF9wb3dlcl80OCA9CisJCWF0aDVrX2dldF9pbnRlcnBvbGF0ZWRfdmFsdWUodGFyZ2V0LCBycGluZm9baWR4X2xdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfcl0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9sXS50YXJnZXRfcG93ZXJfNDgsCisJCQkJCXJwaW5mb1tpZHhfcl0udGFyZ2V0X3Bvd2VyXzQ4KTsKKworCXJhdGVzLT50YXJnZXRfcG93ZXJfNTQgPQorCQlhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwgcnBpbmZvW2lkeF9sXS5mcmVxLAorCQkJCQlycGluZm9baWR4X3JdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfbF0udGFyZ2V0X3Bvd2VyXzU0LAorCQkJCQlycGluZm9baWR4X3JdLnRhcmdldF9wb3dlcl81NCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIG1heCBlZGdlIHBvd2VyIGZvciB0aGlzIGNoYW5uZWwgaWYKKyAqIHdlIGhhdmUgc3VjaCBkYXRhIGZyb20gRUVQUk9NJ3MgQ29uZm9ybWFuY2UgVGVzdAorICogTGltaXRzIChDVEwpLCBhbmQgbGltaXQgbWF4IHBvd2VyIGlmIG5lZWRlZC4KKyAqCisgKiBGSVhNRTogT25seSB3b3JrcyBmb3Igd29ybGQgcmVndWxhdG9yeSBkb21haW5zCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19nZXRfbWF4X2N0bF9wb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19lZGdlX3Bvd2VyICpyZXAgPSBlZS0+ZWVfY3RsX3B3cjsKKwl1OCAqY3RsX3ZhbCA9IGVlLT5lZV9jdGw7CisJczE2IG1heF9jaGFuX3B3ciA9IGFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyIC8gNDsKKwlzMTYgZWRnZV9wd3IgPSAwOworCXU4IHJlcF9pZHg7CisJdTggaSwgY3RsX21vZGU7CisJdTggY3RsX2lkeCA9IDB4RkY7CisJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJLyogRmluZCBvdXQgYSBDVEwgZm9yIG91ciBtb2RlIHRoYXQncyBub3QgbWFwcGVkCisJICogb24gYSBzcGVjaWZpYyByZWcgZG9tYWluLgogCSAqCi0JICogWFhYOiBBc3N1bWUgc2FtZSBmb3IgUkYyNDI1Ci0JICogdG8gYmUgc2FmZS4KLQkgKi8KLQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQxMykgfHwgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQyNSkpCi0JCXJldHVybiAwOworCSAqIFRPRE86IE1hcCBvdXIgY3VycmVudCByZWcgZG9tYWluIHRvIG9uZSBvZiB0aGUgMyBhdmFpbGFibGUKKwkgKiByZWcgZG9tYWluIGlkcyBzbyB0aGF0IHdlIGNhbiBzdXBwb3J0IG1vcmUgQ1RMcy4gKi8KKwlzd2l0Y2ggKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9NT0RFUykgeworCWNhc2UgQ0hBTk5FTF9BOgorCQljdGxfbW9kZSA9IEFSNUtfQ1RMXzExQSB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX0c6CisJCWN0bF9tb2RlID0gQVI1S19DVExfMTFHIHwgQVI1S19DVExfTk9fUkVHRE9NQUlOOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfQjoKKwkJY3RsX21vZGUgPSBBUjVLX0NUTF8xMUIgfCBBUjVLX0NUTF9OT19SRUdET01BSU47CisJCWJyZWFrOworCWNhc2UgQ0hBTk5FTF9UOgorCQljdGxfbW9kZSA9IEFSNUtfQ1RMX1RVUkJPIHwgQVI1S19DVExfTk9fUkVHRE9NQUlOOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfVEc6CisJCWN0bF9tb2RlID0gQVI1S19DVExfVFVSQk9HIHwgQVI1S19DVExfTk9fUkVHRE9NQUlOOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfWFI6CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CiAKLQkvKiBSZXNldCBUWCBwb3dlciB2YWx1ZXMgKi8KLQltZW1zZXQoJmFoLT5haF90eHBvd2VyLCAwLCBzaXplb2YoYWgtPmFoX3R4cG93ZXIpKTsKLQlhaC0+YWhfdHhwb3dlci50eHBfdHBjID0gdHBjOworCWZvciAoaSA9IDA7IGkgPCBlZS0+ZWVfY3RsczsgaSsrKSB7CisJCWlmIChjdGxfdmFsW2ldID09IGN0bF9tb2RlKSB7CisJCQljdGxfaWR4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQogCi0JLyogSW5pdGlhbGl6ZSBUWCBwb3dlciB0YWJsZSAqLwotCWF0aDVrX3R4cG93ZXJfdGFibGUoYWgsIGNoYW5uZWwsIHR4cG93ZXIpOworCS8qIElmIHdlIGhhdmUgYSBDVEwgZGF0YXNldCBhdmFpbGFibGUgZ3JhYiBpdCBhbmQgZmluZCB0aGUKKwkgKiBlZGdlIHBvd2VyIGZvciBvdXIgZnJlcXVlbmN5ICovCisJaWYgKGN0bF9pZHggPT0gMHhGRikKKwkJcmV0dXJuOworCisJLyogRWRnZSBwb3dlcnMgYXJlIHNvcnRlZCBieSBmcmVxdWVuY3kgZnJvbSBsb3dlcgorCSAqIHRvIGhpZ2hlci4gRWFjaCBDVEwgY29ycmVzcG9uZHMgdG8gOCBlZGdlIHBvd2VyCisJICogbWVhc3VyZW1lbnRzLiAqLworCXJlcF9pZHggPSBjdGxfaWR4ICogQVI1S19FRVBST01fTl9FREdFUzsKKworCS8qIERvbid0IGRvIGJvdW5kYXJpZXMgY2hlY2sgYmVjYXVzZSB3ZQorCSAqIG1pZ2h0IGhhdmUgbW9yZSB0aGF0IG9uZSBiYW5kcyBkZWZpbmVkCisJICogZm9yIHRoaXMgbW9kZSAqLworCisJLyogR2V0IHRoZSBlZGdlIHBvd2VyIHRoYXQncyBjbG9zZXIgdG8gb3VyCisJICogZnJlcXVlbmN5ICovCisJZm9yIChpID0gMDsgaSA8IEFSNUtfRUVQUk9NX05fRURHRVM7IGkrKykgeworCQlyZXBfaWR4ICs9IGk7CisJCWlmICh0YXJnZXQgPD0gcmVwW3JlcF9pZHhdLmZyZXEpCisJCQllZGdlX3B3ciA9IChzMTYpIHJlcFtyZXBfaWR4XS5lZGdlOworCX0KKworCWlmIChlZGdlX3B3cikKKwkJYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IgPSA0Km1pbihlZGdlX3B3ciwgbWF4X2NoYW5fcHdyKTsKK30KKworCisvKgorICogUG93ZXIgdG8gUENEQUMgdGFibGUgZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIEZpbGwgUG93ZXIgdG8gUENEQUMgdGFibGUgb24gUkY1MTExCisgKgorICogTm8gZnVydGhlciBwcm9jZXNzaW5nIGlzIG5lZWRlZCBmb3IgUkY1MTExLCB0aGUgb25seSB0aGluZyB3ZSBoYXZlIHRvCisgKiBkbyBpcyBmaWxsIHRoZSB2YWx1ZXMgYmVsb3cgYW5kIGFib3ZlIGNhbGlicmF0aW9uIHJhbmdlIHNpbmNlIGVlcHJvbSBkYXRhCisgKiBtYXkgbm90IGNvdmVyIHRoZSBlbnRpcmUgUENEQUMgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19maWxsX3B3cl90b19wY2RhY190YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzMTYqIHRhYmxlX21pbiwKKwkJCQkJCQlzMTYgKnRhYmxlX21heCkKK3sKKwl1OCAJKnBjZGFjX291dCA9IGFoLT5haF90eHBvd2VyLnR4cF9wZF90YWJsZTsKKwl1OAkqcGNkYWNfdG1wID0gYWgtPmFoX3R4cG93ZXIudG1wTFswXTsKKwl1OAlwY2RhY18wLCBwY2RhY19uLCBwY2RhY19pLCBwd3JfaWR4LCBpOworCXMxNgltaW5fcHdyLCBtYXhfcHdyOworCisJLyogR2V0IHRhYmxlIGJvdW5kYXJpZXMgKi8KKwltaW5fcHdyID0gdGFibGVfbWluWzBdOworCXBjZGFjXzAgPSBwY2RhY190bXBbMF07CisKKwltYXhfcHdyID0gdGFibGVfbWF4WzBdOworCXBjZGFjX24gPSBwY2RhY190bXBbdGFibGVfbWF4WzBdIC0gdGFibGVfbWluWzBdXTsKKworCS8qIEV4dHJhcG9sYXRlIGJlbG93IG1pbmltdW0gdXNpbmcgcGNkYWNfMCAqLworCXBjZGFjX2kgPSAwOworCWZvciAoaSA9IDA7IGkgPCBtaW5fcHdyOyBpKyspCisJCXBjZGFjX291dFtwY2RhY19pKytdID0gcGNkYWNfMDsKKworCS8qIENvcHkgdmFsdWVzIGZyb20gcGNkYWNfdG1wICovCisJcHdyX2lkeCA9IG1pbl9wd3I7CisJZm9yIChpID0gMCA7IHB3cl9pZHggPD0gbWF4X3B3ciAmJgorCXBjZGFjX2kgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFOyBpKyspIHsKKwkJcGNkYWNfb3V0W3BjZGFjX2krK10gPSBwY2RhY190bXBbaV07CisJCXB3cl9pZHgrKzsKKwl9CisKKwkvKiBFeHRyYXBvbGF0ZSBhYm92ZSBtYXhpbXVtICovCisJd2hpbGUgKHBjZGFjX2kgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFKQorCQlwY2RhY19vdXRbcGNkYWNfaSsrXSA9IHBjZGFjX247CisKK30KKworLyoKKyAqIENvbWJpbmUgYXZhaWxhYmxlIFhQRCBDdXJ2ZXMgYW5kIGZpbGwgTGluZWFyIFBvd2VyIHRvIFBDREFDIHRhYmxlCisgKiBvbiBSRjUxMTIKKyAqCisgKiBSRlgxMTIgY2FuIGhhdmUgdXAgdG8gMiBjdXJ2ZXMgKG9uZSBmb3IgbG93IHR4cG93ZXIgcmFuZ2UgYW5kIG9uZSBmb3IKKyAqIGhpZ2hlciB0eHBvd2VyIHJhbmdlKS4gV2UgbmVlZCB0byBwdXQgdGhlbSBib3RoIG9uIHBjZGFjX291dCBhbmQgcGxhY2UKKyAqIHRoZW0gaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIEluIGNhc2Ugd2Ugb25seSBoYXZlIG9uZSBjdXJ2ZSBhdmFpbGFibGUKKyAqIGp1c3QgZml0IGl0IG9uIHBjZGFjX291dCAoaXQncyBzdXBwb3NlZCB0byBjb3ZlciB0aGUgZW50aXJlIHJhbmdlIG9mCisgKiBhdmFpbGFibGUgcHdyIGxldmVscyBzaW5jZSBpdCdzIGFsd2F5cyB0aGUgaGlnaGVyIHBvd2VyIGN1cnZlKS4gRXh0cmFwb2xhdGUKKyAqIGJlbG93IGFuZCBhYm92ZSBmaW5hbCB0YWJsZSBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19jb21iaW5lX2xpbmVhcl9wY2RhY19jdXJ2ZXMoc3RydWN0IGF0aDVrX2h3ICphaCwgczE2KiB0YWJsZV9taW4sCisJCQkJCQlzMTYgKnRhYmxlX21heCwgdTggcGRjdXJ2ZXMpCit7CisJdTggCSpwY2RhY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJdTgJKnBjZGFjX2xvd19wd3I7CisJdTgJKnBjZGFjX2hpZ2hfcHdyOworCXU4CSpwY2RhY190bXA7CisJdTgJcHdyOworCXMxNgltYXhfcHdyX2lkeDsKKwlzMTYJbWluX3B3cl9pZHg7CisJczE2CW1pZF9wd3JfaWR4ID0gMDsKKwkvKiBFZGdlIGZsYWcgdHVycyBvbiB0aGUgN250aCBiaXQgb24gdGhlIFBDREFDCisJICogdG8gZGVsY2FyZSB0aGUgaGlnaGVyIHBvd2VyIGN1cnZlIChmb3JjZSB2YWx1ZXMKKwkgKiB0byBiZSBncmVhdGVyIHRoYW4gNjQpLiBJZiB3ZSBvbmx5IGhhdmUgb25lIGN1cnZlCisJICogd2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcywgaWYgd2UgaGF2ZSAyIGN1cnZlcyBhbmQKKwkgKiBmaWxsIHRoZSB0YWJsZSBiYWNrd2FyZHMgdGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvCisJICogc3dpdGNoIGZyb20gaGlnaGVyIHBvd2VyIGN1cnZlIHRvIGxvd2VyIHBvd2VyIGN1cnZlICovCisJdTgJZWRnZV9mbGFnOworCWludAlpOworCisJLyogV2hlbiB3ZSBoYXZlIG9ubHkgb25lIGN1cnZlIGF2YWlsYWJsZQorCSAqIHRoYXQncyB0aGUgaGlnaGVyIHBvd2VyIGN1cnZlLiBJZiB3ZSBoYXZlCisJICogdHdvIGN1cnZlcyB0aGUgZmlyc3QgaXMgdGhlIGhpZ2ggcG93ZXIgY3VydmUKKwkgKiBhbmQgdGhlIG5leHQgaXMgdGhlIGxvdyBwb3dlciBjdXJ2ZS4gKi8KKwlpZiAocGRjdXJ2ZXMgPiAxKSB7CisJCXBjZGFjX2xvd19wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzFdOworCQlwY2RhY19oaWdoX3B3ciA9IGFoLT5haF90eHBvd2VyLnRtcExbMF07CisJCW1pZF9wd3JfaWR4ID0gdGFibGVfbWF4WzFdIC0gdGFibGVfbWluWzFdIC0gMTsKKwkJbWF4X3B3cl9pZHggPSAodGFibGVfbWF4WzBdIC0gdGFibGVfbWluWzBdKSAvIDI7CisKKwkJLyogSWYgdGFibGUgc2l6ZSBnb2VzIGJleW9uZCAzMS41ZEIsIGtlZXAgdGhlCisJCSAqIHVwcGVyIDMxLjVkQiByYW5nZSB3aGVuIHNldHRpbmcgdHggcG93ZXIuCisJCSAqIE5vdGU6IDEyNiA9IDMxLjUgZEIgaW4gcXVhcnRlciBkQiBzdGVwcyAqLworCQlpZiAodGFibGVfbWF4WzBdIC0gdGFibGVfbWluWzFdID4gMTI2KQorCQkJbWluX3B3cl9pZHggPSB0YWJsZV9tYXhbMF0gLSAxMjY7CisJCWVsc2UKKwkJCW1pbl9wd3JfaWR4ID0gdGFibGVfbWluWzFdOworCisJCS8qIFNpbmNlIHdlIGZpbGwgdGFibGUgYmFja3dhcmRzCisJCSAqIHN0YXJ0IGZyb20gaGlnaCBwb3dlciBjdXJ2ZSAqLworCQlwY2RhY190bXAgPSBwY2RhY19oaWdoX3B3cjsKKworCQllZGdlX2ZsYWcgPSAweDQwOworI2lmIDAKKwkJLyogSWYgYm90aCBtaW4gYW5kIG1heCBwb3dlciBsaW1pdHMgYXJlIGluIGxvd2VyCisJCSAqIHBvd2VyIGN1cnZlJ3MgcmFuZ2UsIG9ubHkgdXNlIHRoZSBsb3cgcG93ZXIgY3VydmUuCisJCSAqIFRPRE86IG1pbi9tYXggbGV2ZWxzIGFyZSByZWxhdGVkIHRvIHRhcmdldAorCQkgKiBwb3dlciB2YWx1ZXMgcmVxdWVzdGVkIGZyb20gZHJpdmVyL3VzZXIKKwkJICogWFhYOiBJcyB0aGlzIHJlYWxseSBuZWVkZWQgPyAqLworCQlpZiAobWluX3B3ciA8IHRhYmxlX21heFsxXSAmJgorCQltYXhfcHdyIDwgdGFibGVfbWF4WzFdKSB7CisJCQllZGdlX2ZsYWcgPSAwOworCQkJcGNkYWNfdG1wID0gcGNkYWNfbG93X3B3cjsKKwkJCW1heF9wd3JfaWR4ID0gKHRhYmxlX21heFsxXSAtIHRhYmxlX21pblsxXSkvMjsKKwkJfQorI2VuZGlmCisJfSBlbHNlIHsKKwkJcGNkYWNfbG93X3B3ciA9IGFoLT5haF90eHBvd2VyLnRtcExbMV07IC8qIFplcm9lZCAqLworCQlwY2RhY19oaWdoX3B3ciA9IGFoLT5haF90eHBvd2VyLnRtcExbMF07CisJCW1pbl9wd3JfaWR4ID0gdGFibGVfbWluWzBdOworCQltYXhfcHdyX2lkeCA9ICh0YWJsZV9tYXhbMF0gLSB0YWJsZV9taW5bMF0pIC8gMjsKKwkJcGNkYWNfdG1wID0gcGNkYWNfaGlnaF9wd3I7CisJCWVkZ2VfZmxhZyA9IDA7CisJfQorCisJLyogVGhpcyBpcyB1c2VkIHdoZW4gc2V0dGluZyB0eCBwb3dlciovCisJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9pZHggPSBtaW5fcHdyX2lkeC8yOworCisJLyogRmlsbCBQb3dlciB0byBQQ0RBQyB0YWJsZSBiYWNrd2FyZHMgKi8KKwlwd3IgPSBtYXhfcHdyX2lkeDsKKwlmb3IgKGkgPSA2MzsgaSA+PSAwOyBpLS0pIHsKKwkJLyogRW50ZXJpbmcgbG93ZXIgcG93ZXIgcmFuZ2UsIHJlc2V0CisJCSAqIGVkZ2UgZmxhZyBhbmQgc2V0IHBjZGFjX3RtcCB0byBsb3dlcgorCQkgKiBwb3dlciBjdXJ2ZS4qLworCQlpZiAoZWRnZV9mbGFnID09IDB4NDAgJiYKKwkJKDIqcHdyIDw9ICh0YWJsZV9tYXhbMV0gLSB0YWJsZV9taW5bMF0pIHx8IHB3ciA9PSAwKSkgeworCQkJZWRnZV9mbGFnID0gMHgwMDsKKwkJCXBjZGFjX3RtcCA9IHBjZGFjX2xvd19wd3I7CisJCQlwd3IgPSBtaWRfcHdyX2lkeC8yOworCQl9CisKKwkJLyogRG9uJ3QgZ28gYmVsb3cgMSwgZXh0cmFwb2xhdGUgYmVsb3cgaWYgd2UgaGF2ZQorCQkgKiBhbHJlYWR5IHN3aXRoY2VkIHRvIHRoZSBsb3dlciBwb3dlciBjdXJ2ZSAtb3IKKwkJICogd2Ugb25seSBoYXZlIG9uZSBjdXJ2ZSBhbmQgZWRnZV9mbGFnIGlzIHplcm8KKwkJICogYW55d2F5ICovCisJCWlmIChwY2RhY190bXBbcHdyXSA8IDEgJiYgKGVkZ2VfZmxhZyA9PSAweDAwKSkgeworCQkJd2hpbGUgKGkgPj0gMCkgeworCQkJCXBjZGFjX291dFtpXSA9IHBjZGFjX291dFtpICsgMV07CisJCQkJaS0tOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlwY2RhY19vdXRbaV0gPSBwY2RhY190bXBbcHdyXSB8IGVkZ2VfZmxhZzsKKworCQkvKiBFeHRyYXBvbGF0ZSBhYm92ZSBpZiBwY2RhYyBpcyBncmVhdGVyIHRoYW4KKwkJICogMTI2IC10aGlzIGNhbiBoYXBwZW4gYmVjYXVzZSB3ZSBPUiBwY2RhY19vdXQKKwkJICogdmFsdWUgd2l0aCBlZGdlX2ZsYWcgb24gaGlnaCBwb3dlciBjdXJ2ZSAqLworCQlpZiAocGNkYWNfb3V0W2ldID4gMTI2KQorCQkJcGNkYWNfb3V0W2ldID0gMTI2OworCisJCS8qIERlY3JlYXNlIGJ5IGEgMC41ZEIgc3RlcCAqLworCQlwd3ItLTsKKwl9Cit9CisKKy8qIFdyaXRlIFBDREFDIHZhbHVlcyBvbiBodyAqLworc3RhdGljIHZvaWQKK2F0aDVrX3NldHVwX3BjZGFjX3RhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTggCSpwY2RhY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJaW50CWk7CiAKIAkvKgogCSAqIFdyaXRlIFRYIHBvd2VyIHZhbHVlcwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAoQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSAvIDIpOyBpKyspIHsKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJKCgoKGFoLT5haF90eHBvd2VyLnR4cF9wY2RhY1soaSA8PCAxKSArIDFdIDw8IDgpIHwgMHhmZikgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoKChhaC0+YWhfdHhwb3dlci50eHBfcGNkYWNbKGkgPDwgMSkgICAgXSA8PCA4KSB8IDB4ZmYpICYgMHhmZmZmKSwKKwkJCSgoKHBjZGFjX291dFsyKmkgKyAwXSA8PCA4IHwgMHhmZikgJiAweGZmZmYpIDw8IDApIHwKKwkJCSgoKHBjZGFjX291dFsyKmkgKyAxXSA8PCA4IHwgMHhmZikgJiAweGZmZmYpIDw8IDE2KSwKIAkJCUFSNUtfUEhZX1BDREFDX1RYUE9XRVIoaSkpOwogCX0KK30KIAorCisvKgorICogUG93ZXIgdG8gUERBREMgdGFibGUgZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIFNldCB0aGUgZ2FpbiBib3VuZGFyaWVzIGFuZCBjcmVhdGUgZmluYWwgUG93ZXIgdG8gUERBREMgdGFibGUKKyAqCisgKiBXZSBjYW4gaGF2ZSB1cCB0byA0IHBkIGN1cnZlcywgd2UgbmVlZCB0byBkbyBhIHNpbW1pbGFyIHByb2Nlc3MKKyAqIGFzIHdlIGRvIGZvciBSRjUxMTIuIFRoaXMgdGltZSB3ZSBkb24ndCBoYXZlIGFuIGVkZ2VfZmxhZyBidXQgd2UKKyAqIHNldCB0aGUgZ2FpbiBib3VuZGFyaWVzIG9uIGEgc2VwYXJhdGUgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19jb21iaW5lX3B3cl90b19wZGFkY19jdXJ2ZXMoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCXMxNiAqcHdyX21pbiwgczE2ICpwd3JfbWF4LCB1OCBwZGN1cnZlcykKK3sKKwl1OCBnYWluX2JvdW5kYXJpZXNbQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJdTggKnBkYWRjX291dCA9IGFoLT5haF90eHBvd2VyLnR4cF9wZF90YWJsZTsKKwl1OCAqcGRhZGNfdG1wOworCXMxNiBwZGFkY18wOworCXU4IHBkYWRjX2ksIHBkYWRjX24sIHB3cl9zdGVwLCBwZGcsIG1heF9pZHgsIHRhYmxlX3NpemU7CisJdTggcGRfZ2Fpbl9vdmVybGFwOworCisJLyogTm90ZTogUmVnaXN0ZXIgdmFsdWUgaXMgaW5pdGlhbGl6ZWQgb24gaW5pdHZhbHMKKwkgKiB0aGVyZSBpcyBubyBmZWVkYmFjayBmcm9tIGh3LgorCSAqIFhYWDogV2hhdCBhYm91dCBwZF9nYWluX292ZXJsYXAgZnJvbSBFRVBST00gPyAqLworCXBkX2dhaW5fb3ZlcmxhcCA9ICh1OCkgYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RQQ19SRzUpICYKKwkJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX09WRVJMQVA7CisKKwkvKiBDcmVhdGUgZmluYWwgUERBREMgdGFibGUgKi8KKwlmb3IgKHBkZyA9IDAsIHBkYWRjX2kgPSAwOyBwZGcgPCBwZGN1cnZlczsgcGRnKyspIHsKKwkJcGRhZGNfdG1wID0gYWgtPmFoX3R4cG93ZXIudG1wTFtwZGddOworCisJCWlmIChwZGcgPT0gcGRjdXJ2ZXMgLSAxKQorCQkJLyogMiBkQiBib3VuZGFyeSBzdHJldGNoIGZvciBsYXN0CisJCQkgKiAoaGlnaGVyIHBvd2VyKSBjdXJ2ZSAqLworCQkJZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPSBwd3JfbWF4W3BkZ10gKyA0OworCQllbHNlCisJCQkvKiBTZXQgZ2FpbiBib3VuZGFyeSBpbiB0aGUgbWlkZGxlCisJCQkgKiBiZXR3ZWVuIHRoaXMgY3VydmUgYW5kIHRoZSBuZXh0IG9uZSAqLworCQkJZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPQorCQkJCShwd3JfbWF4W3BkZ10gKyBwd3JfbWluW3BkZyArIDFdKSAvIDI7CisKKwkJLyogU2FuaXR5IGNoZWNrIGluIGNhc2Ugb3VyIDIgZGIgc3RyZXRjaCBnb3Qgb3V0IG9mCisJCSAqIHJhbmdlLiAqLworCQlpZiAoZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpCisJCQlnYWluX2JvdW5kYXJpZXNbcGRnXSA9IEFSNUtfVFVORV9NQVhfVFhQT1dFUjsKKworCQkvKiBGb3IgdGhlIGZpcnN0IGN1cnZlIChsb3dlciBwb3dlcikKKwkJICogc3RhcnQgZnJvbSAwIGRCICovCisJCWlmIChwZGcgPT0gMCkKKwkJCXBkYWRjXzAgPSAwOworCQllbHNlCisJCQkvKiBGb3IgdGhlIG90aGVyIGN1cnZlcyB1c2UgdGhlIGdhaW4gb3ZlcmxhcCAqLworCQkJcGRhZGNfMCA9IChnYWluX2JvdW5kYXJpZXNbcGRnIC0gMV0gLSBwd3JfbWluW3BkZ10pIC0KKwkJCQkJCQlwZF9nYWluX292ZXJsYXA7CisKKwkJLyogRm9yY2UgZWFjaCBwb3dlciBzdGVwIHRvIGJlIGF0IGxlYXN0IDAuNSBkQiAqLworCQlpZiAoKHBkYWRjX3RtcFsxXSAtIHBkYWRjX3RtcFswXSkgPiAxKQorCQkJcHdyX3N0ZXAgPSBwZGFkY190bXBbMV0gLSBwZGFkY190bXBbMF07CisJCWVsc2UKKwkJCXB3cl9zdGVwID0gMTsKKworCQkvKiBJZiBwZGFkY18wIGlzIG5lZ2F0aXZlLCB3ZSBuZWVkIHRvIGV4dHJhcG9sYXRlCisJCSAqIGJlbG93IHRoaXMgcGRnYWluIGJ5IGEgbnVtYmVyIG9mIHB3cl9zdGVwcyAqLworCQl3aGlsZSAoKHBkYWRjXzAgPCAwKSAmJiAocGRhZGNfaSA8IDEyOCkpIHsKKwkJCXMxNiB0bXAgPSBwZGFkY190bXBbMF0gKyBwZGFkY18wICogcHdyX3N0ZXA7CisJCQlwZGFkY19vdXRbcGRhZGNfaSsrXSA9ICh0bXAgPCAwKSA/IDAgOiAodTgpIHRtcDsKKwkJCXBkYWRjXzArKzsKKwkJfQorCisJCS8qIFNldCBsYXN0IHB3ciBsZXZlbCwgdXNpbmcgZ2FpbiBib3VuZGFyaWVzICovCisJCXBkYWRjX24gPSBnYWluX2JvdW5kYXJpZXNbcGRnXSArIHBkX2dhaW5fb3ZlcmxhcCAtIHB3cl9taW5bcGRnXTsKKwkJLyogTGltaXQgaXQgdG8gYmUgaW5zaWRlIHB3ciByYW5nZSAqLworCQl0YWJsZV9zaXplID0gcHdyX21heFtwZGddIC0gcHdyX21pbltwZGddOworCQltYXhfaWR4ID0gKHBkYWRjX24gPCB0YWJsZV9zaXplKSA/IHBkYWRjX24gOiB0YWJsZV9zaXplOworCisJCS8qIEZpbGwgcGRhZGNfb3V0IHRhYmxlICovCisJCXdoaWxlIChwZGFkY18wIDwgbWF4X2lkeCkKKwkJCXBkYWRjX291dFtwZGFkY19pKytdID0gcGRhZGNfdG1wW3BkYWRjXzArK107CisKKwkJLyogTmVlZCB0byBleHRyYXBvbGF0ZSBhYm92ZSB0aGlzIHBkZ2Fpbj8gKi8KKwkJaWYgKHBkYWRjX24gPD0gbWF4X2lkeCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEZvcmNlIGVhY2ggcG93ZXIgc3RlcCB0byBiZSBhdCBsZWFzdCAwLjUgZEIgKi8KKwkJaWYgKChwZGFkY190bXBbdGFibGVfc2l6ZSAtIDFdIC0gcGRhZGNfdG1wW3RhYmxlX3NpemUgLSAyXSkgPiAxKQorCQkJcHdyX3N0ZXAgPSBwZGFkY190bXBbdGFibGVfc2l6ZSAtIDFdIC0KKwkJCQkJCXBkYWRjX3RtcFt0YWJsZV9zaXplIC0gMl07CisJCWVsc2UKKwkJCXB3cl9zdGVwID0gMTsKKworCQkvKiBFeHRyYXBvbGF0ZSBhYm92ZSAqLworCQl3aGlsZSAoKHBkYWRjXzAgPCAoczE2KSBwZGFkY19uKSAmJgorCQkocGRhZGNfaSA8IEFSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUgKiAyKSkgeworCQkJczE2IHRtcCA9IHBkYWRjX3RtcFt0YWJsZV9zaXplIC0gMV0gKworCQkJCQkocGRhZGNfMCAtIG1heF9pZHgpICogcHdyX3N0ZXA7CisJCQlwZGFkY19vdXRbcGRhZGNfaSsrXSA9ICh0bXAgPiAxMjcpID8gMTI3IDogKHU4KSB0bXA7CisJCQlwZGFkY18wKys7CisJCX0KKwl9CisKKwl3aGlsZSAocGRnIDwgQVI1S19FRVBST01fTl9QRF9HQUlOUykgeworCQlnYWluX2JvdW5kYXJpZXNbcGRnXSA9IGdhaW5fYm91bmRhcmllc1twZGcgLSAxXTsKKwkJcGRnKys7CisJfQorCisJd2hpbGUgKHBkYWRjX2kgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFICogMikgeworCQlwZGFkY19vdXRbcGRhZGNfaV0gPSBwZGFkY19vdXRbcGRhZGNfaSAtIDFdOworCQlwZGFkY19pKys7CisJfQorCisJLyogU2V0IGdhaW4gYm91bmRhcmllcyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKKwkJQVI1S19SRUdfU00ocGRfZ2Fpbl9vdmVybGFwLAorCQkJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX09WRVJMQVApIHwKKwkJQVI1S19SRUdfU00oZ2Fpbl9ib3VuZGFyaWVzWzBdLAorCQkJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzEpIHwKKwkJQVI1S19SRUdfU00oZ2Fpbl9ib3VuZGFyaWVzWzFdLAorCQkJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpIHwKKwkJQVI1S19SRUdfU00oZ2Fpbl9ib3VuZGFyaWVzWzJdLAorCQkJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpIHwKKwkJQVI1S19SRUdfU00oZ2Fpbl9ib3VuZGFyaWVzWzNdLAorCQkJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQpLAorCQlBUjVLX1BIWV9UUENfUkc1KTsKKworCS8qIFVzZWQgZm9yIHNldHRpbmcgcmF0ZSBwb3dlciB0YWJsZSAqLworCWFoLT5haF90eHBvd2VyLnR4cF9taW5faWR4ID0gcHdyX21pblswXTsKKworfQorCisvKiBXcml0ZSBQREFEQyB2YWx1ZXMgb24gaHcgKi8KK3N0YXRpYyB2b2lkCithdGg1a19zZXR1cF9wd3JfdG9fcGRhZGNfdGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCXU4IHBkY3VydmVzLCB1OCAqcGRnX3RvX2lkeCkKK3sKKwl1OCAqcGRhZGNfb3V0ID0gYWgtPmFoX3R4cG93ZXIudHhwX3BkX3RhYmxlOworCXUzMiByZWc7CisJdTggaTsKKworCS8qIFNlbGVjdCB0aGUgcmlnaHQgcGRnYWluIGN1cnZlcyAqLworCisJLyogQ2xlYXIgY3VycmVudCBzZXR0aW5ncyAqLworCXJlZyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UUENfUkcxKTsKKwlyZWcgJj0gfihBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8xIHwKKwkJQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMiB8CisJCUFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzMgfAorCQlBUjVLX1BIWV9UUENfUkcxX05VTV9QRF9HQUlOKTsKKworCS8qCisJICogVXNlIHBkX2dhaW5zIGN1cnZlIGZyb20gZWVwcm9tCisJICoKKwkgKiBUaGlzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZyb20gaW5pdHZhbHMKKwkgKiBpbiBjYXNlIHNvbWUgdmVuZG9ycyAoZS5nLiBaY29tYXgpIGRvbid0IHVzZSB0aGUgZGVmYXVsdAorCSAqIGN1cnZlcy4gSWYgd2UgZG9uJ3QgaG9ub3IgdGhlaXIgc2V0dGluZ3Mgd2UgJ2xsIGdldCBhCisJICogNWRCICgxICogZ2FpbiBvdmVybGFwID8pIGRyb3AuCisJICovCisJcmVnIHw9IEFSNUtfUkVHX1NNKHBkY3VydmVzLCBBUjVLX1BIWV9UUENfUkcxX05VTV9QRF9HQUlOKTsKKworCXN3aXRjaCAocGRjdXJ2ZXMpIHsKKwljYXNlIDM6CisJCXJlZyB8PSBBUjVLX1JFR19TTShwZGdfdG9faWR4WzJdLCBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8zKTsKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSAyOgorCQlyZWcgfD0gQVI1S19SRUdfU00ocGRnX3RvX2lkeFsxXSwgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMik7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgMToKKwkJcmVnIHw9IEFSNUtfUkVHX1NNKHBkZ190b19pZHhbMF0sIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzEpOworCQlicmVhazsKKwl9CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZWcsIEFSNUtfUEhZX1RQQ19SRzEpOworCisJLyoKKwkgKiBXcml0ZSBUWCBwb3dlciB2YWx1ZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKEFSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUgLyAyKTsgaSsrKSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKKwkJCSgocGRhZGNfb3V0WzQqaSArIDBdICYgMHhmZikgPDwgMCkgfAorCQkJKChwZGFkY19vdXRbNCppICsgMV0gJiAweGZmKSA8PCA4KSB8CisJCQkoKHBkYWRjX291dFs0KmkgKyAyXSAmIDB4ZmYpIDw8IDE2KSB8CisJCQkoKHBkYWRjX291dFs0KmkgKyAzXSAmIDB4ZmYpIDw8IDI0KSwKKwkJCUFSNUtfUEhZX1BEQURDX1RYUE9XRVIoaSkpOworCX0KK30KKworCisvKgorICogQ29tbW9uIGNvZGUgZm9yIFBDREFDL1BEQURDIHRhYmxlcworICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRoYXQgdXNlcyBhbGwgb2YgdGhlIGFib3ZlCisgKiB0byBzZXQgUENEQUMvUERBREMgdGFibGUgb24gaHcgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwuCisgKiBUaGlzIHRhYmxlIGlzIHVzZWQgZm9yIHR4IHBvd2VyIGNhbGlicmF0aW9uIG9uIHRoZSBiYXNiYW5kLAorICogd2l0aG91dCBpdCB3ZSBnZXQgd2VpcmQgdHggcG93ZXIgbGV2ZWxzIGFuZCBpbiBzb21lIGNhc2VzCisgKiBkaXN0b3J0ZWQgc3BlY3RyYWwgbWFzaworICovCitzdGF0aWMgaW50CithdGg1a19zZXR1cF9jaGFubmVsX3Bvd2VydGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCXU4IGVlX21vZGUsIHU4IHR5cGUpCit7CisJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZGdfTCwgKnBkZ19SOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNpbmZvX0w7CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpwY2luZm9fUjsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwl1OCAqcGRnX2N1cnZlX3RvX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W2VlX21vZGVdOworCXMxNiB0YWJsZV9taW5bQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJczE2IHRhYmxlX21heFtBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXTsKKwl1OCAqdG1wTDsKKwl1OCAqdG1wUjsKKwl1MzIgdGFyZ2V0ID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJaW50IHBkZywgaTsKKworCS8qIEdldCBzdXJvdW5kaW5nIGZyZXEgcGllcnMgZm9yIHRoaXMgY2hhbm5lbCAqLworCWF0aDVrX2dldF9jaGFuX3BjYWxfc3Vycm91bmRpbmdfcGllcnMoYWgsIGNoYW5uZWwsCisJCQkJCQkmcGNpbmZvX0wsCisJCQkJCQkmcGNpbmZvX1IpOworCisJLyogTG9vcCBvdmVyIHBkIGdhaW4gY3VydmVzIG9uCisJICogc3Vyb3VuZGluZyBmcmVxIHBpZXJzIGJ5IGluZGV4ICovCisJZm9yIChwZGcgPSAwOyBwZGcgPCBlZS0+ZWVfcGRfZ2FpbnNbZWVfbW9kZV07IHBkZysrKSB7CisKKwkJLyogRmlsbCBjdXJ2ZXMgaW4gcmV2ZXJzZSBvcmRlcgorCQkgKiBmcm9tIGxvd2VyIHBvd2VyIChtYXggZ2FpbikKKwkJICogdG8gaGlnaGVyIHBvd2VyLiBVc2UgY3VydmUgLT4gaWR4CisJCSAqIGJhY2ttYXBpbmcgd2UgZGlkIG9uIGVlcHJvbSBpbml0ICovCisJCXU4IGlkeCA9IHBkZ19jdXJ2ZV90b19pZHhbcGRnXTsKKworCQkvKiBHcmFiIHRoZSBuZWVkZWQgY3VydmVzIGJ5IGluZGV4ICovCisJCXBkZ19MID0gJnBjaW5mb19MLT5wZF9jdXJ2ZXNbaWR4XTsKKwkJcGRnX1IgPSAmcGNpbmZvX1ItPnBkX2N1cnZlc1tpZHhdOworCisJCS8qIEluaXRpYWxpemUgdGhlIHRlbXAgdGFibGVzICovCisJCXRtcEwgPSBhaC0+YWhfdHhwb3dlci50bXBMW3BkZ107CisJCXRtcFIgPSBhaC0+YWhfdHhwb3dlci50bXBSW3BkZ107CisKKwkJLyogU2V0IGN1cnZlJ3MgeCBib3VuZGFyaWVzIGFuZCBjcmVhdGUKKwkJICogY3VydmVzIHNvIHRoYXQgdGhleSBjb3ZlciB0aGUgc2FtZQorCQkgKiByYW5nZSAoaWYgd2UgZG9uJ3QgZG8gdGhhdCBvbmUgdGFibGUKKwkJICogd2lsbCBoYXZlIHZhbHVlcyBvbiBzb21lIHJhbmdlIGFuZCB0aGUKKwkJICogb3RoZXIgb25lIHdvbid0IGhhdmUgYW55IHNvIGludGVycG9sYXRpb24KKwkJICogd2lsbCBmYWlsKSAqLworCQl0YWJsZV9taW5bcGRnXSA9IG1pbihwZGdfTC0+cGRfcHdyWzBdLAorCQkJCQlwZGdfUi0+cGRfcHdyWzBdKSAvIDI7CisKKwkJdGFibGVfbWF4W3BkZ10gPSBtYXgocGRnX0wtPnBkX3B3cltwZGdfTC0+cGRfcG9pbnRzIC0gMV0sCisJCQkJcGRnX1ItPnBkX3B3cltwZGdfUi0+cGRfcG9pbnRzIC0gMV0pIC8gMjsKKworCQkvKiBOb3cgY3JlYXRlIHRoZSBjdXJ2ZXMgb24gc3Vycm91bmRpbmcgY2hhbm5lbHMKKwkJICogYW5kIGludGVycG9sYXRlIGlmIG5lZWRlZCB0byBnZXQgdGhlIGZpbmFsCisJCSAqIGN1cnZlIGZvciB0aGlzIGdhaW4gb24gdGhpcyBjaGFubmVsICovCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEFSNUtfUFdSVEFCTEVfTElORUFSX1BDREFDOgorCQkJLyogT3ZlcnJpZGUgbWluL21heCBzbyB0aGF0IHdlIGRvbid0IGxvb3NlCisJCQkgKiBhY2N1cmFjeSAoZG9uJ3QgZGl2aWRlIGJ5IDIpICovCisJCQl0YWJsZV9taW5bcGRnXSA9IG1pbihwZGdfTC0+cGRfcHdyWzBdLAorCQkJCQkJcGRnX1ItPnBkX3B3clswXSk7CisKKwkJCXRhYmxlX21heFtwZGddID0KKwkJCQltYXgocGRnX0wtPnBkX3B3cltwZGdfTC0+cGRfcG9pbnRzIC0gMV0sCisJCQkJCXBkZ19SLT5wZF9wd3JbcGRnX1ItPnBkX3BvaW50cyAtIDFdKTsKKworCQkJLyogT3ZlcnJpZGUgbWluaW11bSBzbyB0aGF0IHdlIGRvbid0IGdldAorCQkJICogb3V0IG9mIGJvdW5kcyB3aGlsZSBleHRyYXBvbGF0aW5nCisJCQkgKiBiZWxvdy4gRG9uJ3QgZG8gdGhpcyB3aGVuIHdlIGhhdmUgMgorCQkJICogY3VydmVzIGFuZCB3ZSBhcmUgb24gdGhlIGhpZ2ggcG93ZXIgY3VydmUKKwkJCSAqIGJlY2F1c2UgdGFibGVfbWluIGlzIG9rIGluIHRoaXMgY2FzZSAqLworCQkJaWYgKCEoZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdID4gMSAmJiBwZGcgPT0gMCkpIHsKKworCQkJCXRhYmxlX21pbltwZGddID0KKwkJCQkJYXRoNWtfZ2V0X2xpbmVhcl9wY2RhY19taW4ocGRnX0wtPnBkX3N0ZXAsCisJCQkJCQkJCXBkZ19SLT5wZF9zdGVwLAorCQkJCQkJCQlwZGdfTC0+cGRfcHdyLAorCQkJCQkJCQlwZGdfUi0+cGRfcHdyKTsKKworCQkJCS8qIERvbid0IGdvIHRvbyBsb3cgYmVjYXVzZSB3ZSB3aWxsCisJCQkJICogbWlzcyB0aGUgdXBwZXIgcGFydCBvZiB0aGUgY3VydmUuCisJCQkJICogTm90ZTogMTI2ID0gMzEuNWRCIChtYXggcG93ZXIgc3VwcG9ydGVkKQorCQkJCSAqIGluIDAuMjVkQiB1bml0cyAqLworCQkJCWlmICh0YWJsZV9tYXhbcGRnXSAtIHRhYmxlX21pbltwZGddID4gMTI2KQorCQkJCQl0YWJsZV9taW5bcGRnXSA9IHRhYmxlX21heFtwZGddIC0gMTI2OworCQkJfQorCisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBBUjVLX1BXUlRBQkxFX1BXUl9UT19QQ0RBQzoKKwkJY2FzZSBBUjVLX1BXUlRBQkxFX1BXUl9UT19QREFEQzoKKworCQkJYXRoNWtfY3JlYXRlX3Bvd2VyX2N1cnZlKHRhYmxlX21pbltwZGddLAorCQkJCQkJdGFibGVfbWF4W3BkZ10sCisJCQkJCQlwZGdfTC0+cGRfcHdyLAorCQkJCQkJcGRnX0wtPnBkX3N0ZXAsCisJCQkJCQlwZGdfTC0+cGRfcG9pbnRzLCB0bXBMLCB0eXBlKTsKKworCQkJLyogV2UgYXJlIGluIGEgY2FsaWJyYXRpb24KKwkJCSAqIHBpZXIsIG5vIG5lZWQgdG8gaW50ZXJwb2xhdGUKKwkJCSAqIGJldHdlZW4gZnJlcSBwaWVycyAqLworCQkJaWYgKHBjaW5mb19MID09IHBjaW5mb19SKQorCQkJCWNvbnRpbnVlOworCisJCQlhdGg1a19jcmVhdGVfcG93ZXJfY3VydmUodGFibGVfbWluW3BkZ10sCisJCQkJCQl0YWJsZV9tYXhbcGRnXSwKKwkJCQkJCXBkZ19SLT5wZF9wd3IsCisJCQkJCQlwZGdfUi0+cGRfc3RlcCwKKwkJCQkJCXBkZ19SLT5wZF9wb2ludHMsIHRtcFIsIHR5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIEludGVycG9sYXRlIGJldHdlZW4gY3VydmVzCisJCSAqIG9mIHN1cm91bmRpbmcgZnJlcSBwaWVycyB0bworCQkgKiBnZXQgdGhlIGZpbmFsIGN1cnZlIGZvciB0aGlzCisJCSAqIHBkIGdhaW4uIFJlLXVzZSB0bXBMIGZvciBpbnRlcnBvbGF0aW9uCisJCSAqIG91dHB1dCAqLworCQlmb3IgKGkgPSAwOyAoaSA8ICh1MTYpICh0YWJsZV9tYXhbcGRnXSAtIHRhYmxlX21pbltwZGddKSkgJiYKKwkJKGkgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFKTsgaSsrKSB7CisJCQl0bXBMW2ldID0gKHU4KSBhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwKKwkJCQkJCQkoczE2KSBwY2luZm9fTC0+ZnJlcSwKKwkJCQkJCQkoczE2KSBwY2luZm9fUi0+ZnJlcSwKKwkJCQkJCQkoczE2KSB0bXBMW2ldLAorCQkJCQkJCShzMTYpIHRtcFJbaV0pOworCQl9CisJfQorCisJLyogTm93IHdlIGhhdmUgYSBzZXQgb2YgY3VydmVzIGZvciB0aGlzCisJICogY2hhbm5lbCBvbiB0bXBMICh4IHJhbmdlIGlzIHRhYmxlX21heCAtIHRhYmxlX21pbgorCSAqIGFuZCB5IHZhbHVlcyBhcmUgdG1wTFtwZGddW10pIHNvcnRlZCBpbiB0aGUgc2FtZQorCSAqIG9yZGVyIGFzIEVFUFJPTSAoYmVjYXVzZSB3ZSd2ZSB1c2VkIHRoZSBiYWNrbWFwaW5nKS4KKwkgKiBTbyBmb3IgUkY1MTEyIGl0J3MgZnJvbSBoaWdoZXIgcG93ZXIgdG8gbG93ZXIgcG93ZXIKKwkgKiBhbmQgZm9yIFJGMjQxMyBpdCdzIGZyb20gbG93ZXIgcG93ZXIgdG8gaGlnaGVyIHBvd2VyLgorCSAqIEZvciBSRjUxMTEgd2Ugb25seSBoYXZlIG9uZSBjdXJ2ZS4gKi8KKworCS8qIEZpbGwgbWluIGFuZCBtYXggcG93ZXIgbGV2ZWxzIGZvciB0aGlzCisJICogY2hhbm5lbCBieSBpbnRlcnBvbGF0aW5nIHRoZSB2YWx1ZXMgb24KKwkgKiBzdXJvdW5kaW5nIGNoYW5uZWxzIHRvIGNvbXBsZXRlIHRoZSBkYXRhc2V0ICovCisJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9wd3IgPSBhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwKKwkJCQkJKHMxNikgcGNpbmZvX0wtPmZyZXEsCisJCQkJCShzMTYpIHBjaW5mb19SLT5mcmVxLAorCQkJCQlwY2luZm9fTC0+bWluX3B3ciwgcGNpbmZvX1ItPm1pbl9wd3IpOworCisJYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IgPSBhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwKKwkJCQkJKHMxNikgcGNpbmZvX0wtPmZyZXEsCisJCQkJCShzMTYpIHBjaW5mb19SLT5mcmVxLAorCQkJCQlwY2luZm9fTC0+bWF4X3B3ciwgcGNpbmZvX1ItPm1heF9wd3IpOworCisJLyogV2UgYXJlIHJlYWR5IHRvIGdvLCBmaWxsIFBDREFDL1BEQURDCisJICogdGFibGUgYW5kIHdyaXRlIHNldHRpbmdzIG9uIGhhcmR3YXJlICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBUjVLX1BXUlRBQkxFX0xJTkVBUl9QQ0RBQzoKKwkJLyogRm9yIFJGNTExMiB3ZSBjYW4gaGF2ZSBvbmUgb3IgdHdvIGN1cnZlcworCQkgKiBhbmQgZWFjaCBjdXJ2ZSBjb3ZlcnMgYSBjZXJ0YWluIHBvd2VyIGx2bAorCQkgKiByYW5nZSBzbyB3ZSBuZWVkIHRvIGRvIHNvbWUgbW9yZSBwcm9jZXNzaW5nICovCisJCWF0aDVrX2NvbWJpbmVfbGluZWFyX3BjZGFjX2N1cnZlcyhhaCwgdGFibGVfbWluLCB0YWJsZV9tYXgsCisJCQkJCQllZS0+ZWVfcGRfZ2FpbnNbZWVfbW9kZV0pOworCisJCS8qIFNldCB0eHAub2Zmc2V0IHNvIHRoYXQgd2UgY2FuCisJCSAqIG1hdGNoIG1heCBwb3dlciB2YWx1ZSB3aXRoIG1heAorCQkgKiB0YWJsZSBpbmRleCAqLworCQlhaC0+YWhfdHhwb3dlci50eHBfb2Zmc2V0ID0gNjQgLSAodGFibGVfbWF4WzBdIC8gMik7CisKKwkJLyogV3JpdGUgc2V0dGluZ3Mgb24gaHcgKi8KKwkJYXRoNWtfc2V0dXBfcGNkYWNfdGFibGUoYWgpOworCQlicmVhazsKKwljYXNlIEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BDREFDOgorCQkvKiBXZSBhcmUgZG9uZSBmb3IgUkY1MTExIHNpbmNlIGl0IGhhcyBvbmx5CisJCSAqIG9uZSBjdXJ2ZSwganVzdCBmaXQgdGhlIGN1cnZlIG9uIHRoZSB0YWJsZSAqLworCQlhdGg1a19maWxsX3B3cl90b19wY2RhY190YWJsZShhaCwgdGFibGVfbWluLCB0YWJsZV9tYXgpOworCisJCS8qIE5vIHJhdGUgcG93ZXJ0YWJsZSBhZGp1c3RtZW50IGZvciBSRjUxMTEgKi8KKwkJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9pZHggPSAwOworCQlhaC0+YWhfdHhwb3dlci50eHBfb2Zmc2V0ID0gMDsKKworCQkvKiBXcml0ZSBzZXR0aW5ncyBvbiBodyAqLworCQlhdGg1a19zZXR1cF9wY2RhY190YWJsZShhaCk7CisJCWJyZWFrOworCWNhc2UgQVI1S19QV1JUQUJMRV9QV1JfVE9fUERBREM6CisJCS8qIFNldCBQREFEQyBib3VuZGFyaWVzIGFuZCBmaWxsCisJCSAqIGZpbmFsIFBEQURDIHRhYmxlICovCisJCWF0aDVrX2NvbWJpbmVfcHdyX3RvX3BkYWRjX2N1cnZlcyhhaCwgdGFibGVfbWluLCB0YWJsZV9tYXgsCisJCQkJCQllZS0+ZWVfcGRfZ2FpbnNbZWVfbW9kZV0pOworCisJCS8qIFdyaXRlIHNldHRpbmdzIG9uIGh3ICovCisJCWF0aDVrX3NldHVwX3B3cl90b19wZGFkY190YWJsZShhaCwgcGRnLCBwZGdfY3VydmVfdG9faWR4KTsKKworCQkvKiBTZXQgdHhwLm9mZnNldCwgbm90ZSB0aGF0IHRhYmxlX21pbgorCQkgKiBjYW4gYmUgbmVnYXRpdmUgKi8KKwkJYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldCA9IHRhYmxlX21pblswXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFBlci1yYXRlIHR4IHBvd2VyIHNldHRpbmcKKyAqCisgKiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgc2V0cyB0aGUgZGVzaXJlZCB0eCBwb3dlciAoYmVsb3cKKyAqIG1heGltdW0pIG9uIGh3IGZvciBlYWNoIHJhdGUgKHdlIGFsc28gaGF2ZSBUUEMgdGhhdCBzZXRzCisgKiBwb3dlciBwZXIgcGFja2V0KS4gV2UgZG8gdGhhdCBieSBwcm92aWRpbmcgYW4gaW5kZXggb24gdGhlCisgKiBQQ0RBQy9QREFEQyB0YWJsZSB3ZSBzZXQgdXAuCisgKi8KKworLyoKKyAqIFNldCByYXRlIHBvd2VyIHRhYmxlCisgKgorICogRm9yIG5vdyB3ZSBvbmx5IGxpbWl0IHR4cG93ZXIgYmFzZWQgb24gbWF4aW11bSB0eCBwb3dlcgorICogc3VwcG9ydGVkIGJ5IGh3ICh3aGF0J3MgaW5zaWRlIHJhdGVfaW5mbykuIFdlIG5lZWQgdG8gbGltaXQKKyAqIHRoaXMgZXZlbiBtb3JlLCBiYXNlZCBvbiByZWd1bGF0b3J5IGRvbWFpbiBldGMuCisgKgorICogUmF0ZSBwb3dlciB0YWJsZSBjb250YWlucyBpbmRpY2VzIHRvIFBDREFDL1BEQURDIHRhYmxlICgwLjVkQiBzdGVwcykKKyAqIGFuZCBpcyBpbmRleGVkIGFzIGZvbGxvd3M6CisgKiByYXRlc1swXSAtIHJhdGVzWzddIC0+IE9GRE0gcmF0ZXMKKyAqIHJhdGVzWzhdIC0gcmF0ZXNbMTRdIC0+IENDSyByYXRlcworICogcmF0ZXNbMTVdIC0+IFhSIHJhdGVzICh0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHBvd2VyKQorICovCitzdGF0aWMgdm9pZAorYXRoNWtfc2V0dXBfcmF0ZV9wb3dlcnRhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgsIHUxNiBtYXhfcHdyLAorCQkJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvICpyYXRlX2luZm8sCisJCQl1OCBlZV9tb2RlKQoreworCXVuc2lnbmVkIGludCBpOworCXUxNiAqcmF0ZXM7CisKKwkvKiBtYXhfcHdyIGlzIHBvd2VyIGxldmVsIHdlIGdvdCBmcm9tIGRyaXZlci91c2VyIGluIDAuNWRCCisJICogdW5pdHMsIHN3aXRjaCB0byAwLjI1ZEIgdW5pdHMgc28gd2UgY2FuIGNvbXBhcmUgKi8KKwltYXhfcHdyICo9IDI7CisJbWF4X3B3ciA9IG1pbihtYXhfcHdyLCAodTE2KSBhaC0+YWhfdHhwb3dlci50eHBfbWF4X3B3cikgLyAyOworCisJLyogYXBwbHkgcmF0ZSBsaW1pdHMgKi8KKwlyYXRlcyA9IGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc19wb3dlcl90YWJsZTsKKworCS8qIE9GRE0gcmF0ZXMgNiB0byAyNE1iL3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlyYXRlc1tpXSA9IG1pbihtYXhfcHdyLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl82dG8yNCk7CisKKwkvKiBSZXN0IE9GRE0gcmF0ZXMgKi8KKwlyYXRlc1s1XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfMzYpOworCXJhdGVzWzZdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl80OCk7CisJcmF0ZXNbN10gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzU0KTsKKworCS8qIENDSyByYXRlcyAqLworCS8qIDFMICovCisJcmF0ZXNbOF0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzZ0bzI0KTsKKwkvKiAyTCAqLworCXJhdGVzWzldID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl8zNik7CisJLyogMlMgKi8KKwlyYXRlc1sxMF0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzM2KTsKKwkvKiA1TCAqLworCXJhdGVzWzExXSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNDgpOworCS8qIDVTICovCisJcmF0ZXNbMTJdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl80OCk7CisJLyogMTFMICovCisJcmF0ZXNbMTNdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl81NCk7CisJLyogMTFTICovCisJcmF0ZXNbMTRdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl81NCk7CisKKwkvKiBYUiByYXRlcyAqLworCXJhdGVzWzE1XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNnRvMjQpOworCisJLyogQ0NLIHJhdGVzIGhhdmUgZGlmZmVyZW50IHBlYWsgdG8gYXZlcmFnZSByYXRpbworCSAqIHNvIHdlIGhhdmUgdG8gdHdlYWsgdGhlaXIgcG93ZXIgc28gdGhhdCBnYWluZgorCSAqIGNvcnJlY3Rpb24gd29ya3Mgb2suIEZvciB0aGlzIHdlIHVzZSBPRkRNIHRvCisJICogQ0NLIGRlbHRhIGZyb20gZWVwcm9tICovCisJaWYgKChlZV9tb2RlID09IEFSNUtfRUVQUk9NX01PREVfMTFHKSAmJgorCShhaC0+YWhfcGh5X3JldmlzaW9uIDwgQVI1S19TUkVWX1BIWV81MjEyQSkpCisJCWZvciAoaSA9IDg7IGkgPD0gMTU7IGkrKykKKwkJCXJhdGVzW2ldIC09IGFoLT5haF90eHBvd2VyLnR4cF9jY2tfb2ZkbV9nYWluZl9kZWx0YTsKKworCWFoLT5haF90eHBvd2VyLnR4cF9taW5fcHdyID0gcmF0ZXNbN107CisJYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IgPSByYXRlc1swXTsKKwlhaC0+YWhfdHhwb3dlci50eHBfb2ZkbSA9IHJhdGVzWzddOworfQorCisKKy8qCisgKiBTZXQgdHJhbnNtaXRpb24gcG93ZXIKKyAqLworaW50CithdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJdTggZWVfbW9kZSwgdTggdHhwb3dlcikKK3sKKwlzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8gcmF0ZV9pbmZvOworCXU4IHR5cGU7CisJaW50IHJldDsKKworCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CisJaWYgKHR4cG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgdHggcG93ZXI6ICV1XG4iLCB0eHBvd2VyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh0eHBvd2VyID09IDApCisJCXR4cG93ZXIgPSBBUjVLX1RVTkVfREVGQVVMVF9UWFBPV0VSOworCisJLyogUmVzZXQgVFggcG93ZXIgdmFsdWVzICovCisJbWVtc2V0KCZhaC0+YWhfdHhwb3dlciwgMCwgc2l6ZW9mKGFoLT5haF90eHBvd2VyKSk7CisJYWgtPmFoX3R4cG93ZXIudHhwX3RwYyA9IEFSNUtfVFVORV9UUENfVFhQT1dFUjsKKwlhaC0+YWhfdHhwb3dlci50eHBfbWluX3B3ciA9IDA7CisJYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IgPSBBUjVLX1RVTkVfTUFYX1RYUE9XRVI7CisKKwkvKiBJbml0aWFsaXplIFRYIHBvd2VyIHRhYmxlICovCisJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKKwljYXNlIEFSNUtfUkY1MTExOgorCQl0eXBlID0gQVI1S19QV1JUQUJMRV9QV1JfVE9fUENEQUM7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjUxMTI6CisJCXR5cGUgPSBBUjVLX1BXUlRBQkxFX0xJTkVBUl9QQ0RBQzsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQxMzoKKwljYXNlIEFSNUtfUkY1NDEzOgorCWNhc2UgQVI1S19SRjIzMTY6CisJY2FzZSBBUjVLX1JGMjMxNzoKKwljYXNlIEFSNUtfUkYyNDI1OgorCQl0eXBlID0gQVI1S19QV1JUQUJMRV9QV1JfVE9fUERBREM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZJWE1FOiBPbmx5IG9uIGNoYW5uZWwvbW9kZSBjaGFuZ2UgKi8KKwlyZXQgPSBhdGg1a19zZXR1cF9jaGFubmVsX3Bvd2VydGFibGUoYWgsIGNoYW5uZWwsIGVlX21vZGUsIHR5cGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBMaW1pdCBtYXggcG93ZXIgaWYgd2UgaGF2ZSBhIENUTCBhdmFpbGFibGUgKi8KKwlhdGg1a19nZXRfbWF4X2N0bF9wb3dlcihhaCwgY2hhbm5lbCk7CisKKwkvKiBGSVhNRTogVHggcG93ZXIgbGltaXQgZm9yIHRoaXMgcmVnZG9tYWluCisJICogWFhYOiBNYWM4MDIxMS9DUkRBIHdpbGwgZG8gdGhhdCBhbnl3YXkgPyAqLworCisJLyogRklYTUU6IEFudGVubmEgcmVkdWN0aW9uIHN0dWZmICovCisKKwkvKiBGSVhNRTogTGltaXQgcG93ZXIgb24gdHVyYm8gbW9kZXMgKi8KKworCS8qIEZJWE1FOiBUUEMgc2NhbGUgcmVkdWN0aW9uICovCisKKwkvKiBHZXQgc3Vyb3VuZGluZyBjaGFubmVscyBmb3IgcGVyLXJhdGUgcG93ZXIgdGFibGUKKwkgKiBjYWxpYnJhdGlvbiAqLworCWF0aDVrX2dldF9yYXRlX3BjYWxfZGF0YShhaCwgY2hhbm5lbCwgJnJhdGVfaW5mbyk7CisKKwkvKiBTZXR1cCByYXRlIHBvd2VyIHRhYmxlICovCisJYXRoNWtfc2V0dXBfcmF0ZV9wb3dlcnRhYmxlKGFoLCB0eHBvd2VyLCAmcmF0ZV9pbmZvLCBlZV9tb2RlKTsKKworCS8qIFdyaXRlIHJhdGUgcG93ZXIgdGFibGUgb24gaHcgKi8KIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfVFhQT1dFUl9PRkRNKDMsIDI0KSB8CiAJCUFSNUtfVFhQT1dFUl9PRkRNKDIsIDE2KSB8IEFSNUtfVFhQT1dFUl9PRkRNKDEsIDgpIHwKIAkJQVI1S19UWFBPV0VSX09GRE0oMCwgMCksIEFSNUtfUEhZX1RYUE9XRVJfUkFURTEpOwpAQCAtMjQ4MSwyNiArMjU2NiwzNCBAQAogCQlBUjVLX1RYUE9XRVJfQ0NLKDEzLCAxNikgfCBBUjVLX1RYUE9XRVJfQ0NLKDEyLCA4KSB8CiAJCUFSNUtfVFhQT1dFUl9DQ0soMTEsIDApLCBBUjVLX1BIWV9UWFBPV0VSX1JBVEU0KTsKIAotCWlmIChhaC0+YWhfdHhwb3dlci50eHBfdHBjKQorCS8qIEZJWE1FOiBUUEMgc3VwcG9ydCAqLworCWlmIChhaC0+YWhfdHhwb3dlci50eHBfdHBjKSB7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFhQT1dFUl9SQVRFX01BWF9UUENfRU5BQkxFIHwKIAkJCUFSNUtfVFVORV9NQVhfVFhQT1dFUiwgQVI1S19QSFlfVFhQT1dFUl9SQVRFX01BWCk7Ci0JZWxzZQorCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKKwkJCUFSNUtfUkVHX01TKEFSNUtfVFVORV9NQVhfVFhQT1dFUiwgQVI1S19UUENfQUNLKSB8CisJCQlBUjVLX1JFR19NUyhBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfVFBDX0NUUykgfAorCQkJQVI1S19SRUdfTVMoQVI1S19UVU5FX01BWF9UWFBPV0VSLCBBUjVLX1RQQ19DSElSUCksCisJCQlBUjVLX1RQQyk7CisJfSBlbHNlIHsKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UWFBPV0VSX1JBVEVfTUFYIHwKIAkJCUFSNUtfVFVORV9NQVhfVFhQT1dFUiwgQVI1S19QSFlfVFhQT1dFUl9SQVRFX01BWCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcG93ZXIpCitpbnQgYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggbW9kZSwgdTggdHhwb3dlcikKIHsKIAkvKkp1c3QgYSB0cnkgTS5GLiovCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gJmFoLT5haF9jdXJyZW50X2NoYW5uZWw7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCUFUSDVLX0RCRyhhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX1RYUE9XRVIsCi0JCSJjaGFuZ2luZyB0eHBvd2VyIHRvICVkXG4iLCBwb3dlcik7CisJCSJjaGFuZ2luZyB0eHBvd2VyIHRvICVkXG4iLCB0eHBvd2VyKTsKIAotCXJldHVybiBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBwb3dlcik7CisJcmV0dXJuIGF0aDVrX2h3X3R4cG93ZXIoYWgsIGNoYW5uZWwsIG1vZGUsIHR4cG93ZXIpOwogfQogCiAjdW5kZWYgX0FUSDVLX1BIWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYwppbmRleCAxYjdiYzUwLi41MDk0YzM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogICovCiB1MzIgYXRoNWtfaHdfbnVtX3R4X3BlbmRpbmcoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQogeworCXUzMiBwZW5kaW5nOwogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKQEAgLTE1OSw3ICsxNjAsMTUgQEAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBBUjVLX1FVRVVFX1NUQVRVUyhxdWV1ZSkgJiBBUjVLX1FDVV9TVFNfRlJNUEVORENOVDsKKwlwZW5kaW5nID0gKEFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSAmIEFSNUtfUUNVX1NUU19GUk1QRU5EQ05UKTsKKworCS8qIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBubyBmcmFtZXMgcGVuZGluZyBldmVuIGlmIFRYRQorCSAqIGlzIHNldC4gVG8gaW5kaWNhdGUgdGhhdCBxIGhhcyBub3Qgc3RvcHBlZCByZXR1cm4KKwkgKiB0cnVlICovCisJaWYgKCFwZW5kaW5nICYmIEFSNUtfUkVHX1JFQURfUShhaCwgQVI1S19RQ1VfVFhFLCBxdWV1ZSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKIC8qCkBAIC0zMjQsOCArMzMzLDE4IEBACiAJCS8qCiAJCSAqIFNldCBtaXNjIHJlZ2lzdGVycwogCQkgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSwKLQkJCUFSNUtfUVVFVUVfTUlTQyhxdWV1ZSkpOworCQkvKiBFbmFibGUgRENVIGVhcmx5IHRlcm1pbmF0aW9uIGZvciB0aGlzIHF1ZXVlICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSk7CisKKwkJLyogRW5hYmxlIERDVSB0byB3YWl0IGZvciBuZXh0IGZyYWdtZW50IGZyb20gUUNVICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKKwkJCQkJQVI1S19EQ1VfTUlTQ19GUkFHX1dBSVQpOworCisJCS8qIE9uIE1hdWkgYW5kIFNwaXJpdCB1c2UgdGhlIGdsb2JhbCBzZXFudW0gb24gRENVICovCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPCBBUjVLX1NSRVZfQVI1MjExKQorCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAorCQkJCQkJQVI1S19EQ1VfTUlTQ19TRVFOVU1fQ1RMKTsKIAogCQlpZiAodHEtPnRxaV9jYnJfcGVyaW9kKSB7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKHRxLT50cWlfY2JyX3BlcmlvZCwKQEAgLTM0MSw3ICszNjAsOCBAQAogCQkJCQlBUjVLX1FDVV9NSVNDX0NCUl9USFJFU19FTkFCTEUpOwogCQl9CiAKLQkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSkKKwkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSAmJgorCQkodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfSURfQ0FCKSkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAogCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfSU5UVkFMKSB8CiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCkBAIC0zODMsMTMgKzQwMyw2IEBACiAJCQkJQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9TKSB8CiAJCQkJQVI1S19EQ1VfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyB8CiAJCQkJQVI1S19EQ1VfTUlTQ19CQ05fRU5BQkxFKTsKLQotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKEFSNUtfVFVORV9CRUFDT05fSU5URVJWQUwgLQotCQkJCShBUjVLX1RVTkVfU1dfQkVBQ09OX1JFU1AgLQotCQkJCUFSNUtfVFVORV9ETUFfQkVBQ09OX1JFU1ApIC0KLQkJCQlBUjVLX1RVTkVfQURESVRJT05BTF9TV0JBX0JBQ0tPRkYpICogMTAyNCkgfAotCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfRU5BQkxFLAotCQkJCUFSNUtfUVVFVUVfUkRZVElNRUNGRyhxdWV1ZSkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBUjVLX1RYX1FVRVVFX0NBQjoKQEAgLTM5OCw2ICs0MTEsMTMgQEAKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0JDTl9ESVMpOwogCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19UVU5FX0JFQUNPTl9JTlRFUlZBTCAtCisJCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCisJCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQorCQkJCUFSNUtfVFVORV9BRERJVElPTkFMX1NXQkFfQkFDS09GRikgKiAxMDI0KSB8CisJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCisJCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CisKIAkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKIAkJCQkoQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9HTE9CQUwgPDwKIAkJCQlBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX1MpKTsKQEAgLTQxMyw2ICs0MzMsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQkvKiBUT0RPOiBIYW5kbGUgZnJhbWUgY29tcHJlc3Npb24gKi8KKwogCQkvKgogCQkgKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB0eCBxdWV1ZQogCQkgKiBpbiB0aGUgc2Vjb25kYXJ5IGludGVycnVwdCBtYXNrIHJlZ2lzdGVycwpAQCAtNDgzLDYgKzUwNSw5IEBACiAJCSAqIGJ5IHNldHRpbmcgQVI1S19UWE5PRlJNIHRvIHplcm8gKi8KIAkJaWYgKGFoLT5haF90eHFfaW1yX25vZnJtID09IDApCiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfVFhOT0ZSTSk7CisKKwkJLyogU2V0IFFDVSBtYXNrIGZvciB0aGlzIERDVSB0byBzYXZlIHBvd2VyICovCisJCUFSNUtfUkVHX1dSSVRFX1EoYWgsIEFSNUtfUVVFVUVfUUNVTUFTSyhxdWV1ZSksIHF1ZXVlKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKaW5kZXggOTE4OWFiMS4uNzA3MGQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKQEAgLTE4Nyw2ICsxODcsNyBAQAogI2RlZmluZSBBUjVLX1RYQ0ZHX0ZSTVBBRF9ESVMJCTB4MDAwMDIwMDAJLyogWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX1JEWV9DQlJfRElTCQkweDAwMDA0MDAwCS8qIFJlYWR5IHRpbWUgQ0JSIGRpc2FibGUgWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX0pVTUJPX0ZSTV9NT0RFCTB4MDAwMDgwMDAJLyogSnVtYm8gZnJhbWUgbW9kZSBbNTIxMStdICovCisjZGVmaW5lCUFSNUtfVFhDRkdfRENVX0RCTF9CVUZfRElTCTB4MDAwMDgwMDAJLyogRGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG9uIERDVSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX0RDVV9DQUNISU5HX0RJUwkweDAwMDEwMDAwCS8qIERpc2FibGUgRENVIGNhY2hpbmcgKi8KIAogLyoKQEAgLTc1Myw3ICs3NTQsNyBAQAogICovCiAjZGVmaW5lIEFSNUtfRENVX1NFUU5VTV9CQVNFCQkweDExNDAKICNkZWZpbmUJQVI1S19EQ1VfU0VRTlVNX00JCTB4MDAwMDBmZmYKLSNkZWZpbmUJQVI1S19RVUVVRV9ERlNfU0VRTlVNKF9xKQlBUjVLX1FVRVVFX1JFRyhBUjVLX0RDVV9TRVFOVU1fQkFTRSwgX3EpCisjZGVmaW5lCUFSNUtfUVVFVUVfRENVX1NFUU5VTShfcSkJQVI1S19RVUVVRV9SRUcoQVI1S19EQ1VfU0VRTlVNX0JBU0UsIF9xKQogCiAvKgogICogRENVIGdsb2JhbCBJRlMgU0lGUyByZWdpc3RlcgpAQCAtODExLDYgKzgxMiw4IEBACiAKIC8qCiAgKiBEQ1UgdHJhbnNtaXQgZmlsdGVyIHRhYmxlIDAgKDMyIGVudHJpZXMpCisgKiBlYWNoIGVudHJ5IGNvbnRhaW5zIGEgMzJiaXQgc2xpY2Ugb2YgdGhlCisgKiAxMjhiaXQgdHggZmlsdGVyIGZvciBlYWNoIERDVSAoNCBzbGljZXMgcGVyIERDVSkKICAqLwogI2RlZmluZSBBUjVLX0RDVV9UWF9GSUxURVJfMF9CQVNFCTB4MTAzOAogI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMChfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8wX0JBU0UgKyAoX24gKiA2NCkpCkBAIC04MTksNyArODIyLDcgQEAKICAqIERDVSB0cmFuc21pdCBmaWx0ZXIgdGFibGUgMSAoMTYgZW50cmllcykKICAqLwogI2RlZmluZSBBUjVLX0RDVV9UWF9GSUxURVJfMV9CQVNFCTB4MTAzYwotI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMShfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UgKyAoKF9uIC0gMzIpICogNjQpKQorI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMShfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UgKyAoX24gKiA2NCkpCiAKIC8qCiAgKiBEQ1UgY2xlYXIgdHJhbnNtaXQgZmlsdGVyIHJlZ2lzdGVyCkBAIC0xNDQ3LDcgKzE0NTAsNyBAQAogCQkJCUFSNUtfVFNGX1UzMl81MjEwIDogQVI1S19UU0ZfVTMyXzUyMTEpCiAKIC8qCi0gKiBMYXN0IGJlYWNvbiB0aW1lc3RhbXAgcmVnaXN0ZXIKKyAqIExhc3QgYmVhY29uIHRpbWVzdGFtcCByZWdpc3RlciAoUmVhZCBPbmx5KQogICovCiAjZGVmaW5lIEFSNUtfTEFTVF9UU1RQCTB4ODA4MAogCkBAIC0xNDY1LDcgKzE0NjgsNyBAQAogI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFJJR19QVFkJMHgwMDAyMDAwMAkvKiBUcmlnZ2VyIHBvbGFyaXR5ICovCiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9SWENPTlQJCTB4MDAwNDAwMDAJLyogQ29udGludW91cyBjYXB0dXJlICovCiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9DQVBUVVJFCQkweDAwMDgwMDAwCS8qIEJlZ2luIGNhcHR1cmUgKi8KLSNkZWZpbmUgQVI1S19BRERBQ19URVNUX1RTVF9BUk0JCTB4MDAxMDAwMDAJLyogVGVzdCBBUk0gKEFkYXB0aXZlIFJhZGlvIE1vZGUgPykgKi8KKyNkZWZpbmUgQVI1S19BRERBQ19URVNUX1RTVF9BUk0JCTB4MDAxMDAwMDAJLyogQVJNIHJ4IGJ1ZmZlciBmb3IgY2FwdHVyZSAqLwogCiAvKgogICogRGVmYXVsdCBhbnRlbm5hIHJlZ2lzdGVyIFs1MjExK10KQEAgLTE1NTEsNiArMTU1NCwxOSBAQAogLyo9PT01MjEyIFNwZWNpZmljIFBDVSByZWdpc3RlcnM9PT0qLwogCiAvKgorICogVHJhbnNtaXQgcG93ZXIgY29udHJvbCByZWdpc3RlcgorICovCisjZGVmaW5lIEFSNUtfVFBDCQkJMHg4MGU4CisjZGVmaW5lIEFSNUtfVFBDX0FDSwkJCTB4MDAwMDAwM2YJLyogYWNrIGZyYW1lcyAqLworI2RlZmluZSBBUjVLX1RQQ19BQ0tfUwkJCTAKKyNkZWZpbmUgQVI1S19UUENfQ1RTCQkJMHgwMDAwM2YwMAkvKiBjdHMgZnJhbWVzICovCisjZGVmaW5lIEFSNUtfVFBDX0NUU19TCQkJOAorI2RlZmluZSBBUjVLX1RQQ19DSElSUAkJCTB4MDAzZjAwMDAJLyogY2hpcnAgZnJhbWVzICovCisjZGVmaW5lIEFSNUtfVFBDX0NISVJQX1MJCTE2CisjZGVmaW5lIEFSNUtfVFBDX0RPUFBMRVIJCTB4MGYwMDAwMDAJLyogZG9wcGxlciBjaGlycCBzcGFuICovCisjZGVmaW5lIEFSNUtfVFBDX0RPUFBMRVJfUwkJMjQKKworLyoKICAqIFhSIChlWHRlbmRlZCBSYW5nZSkgbW9kZSByZWdpc3RlcgogICovCiAjZGVmaW5lIEFSNUtfWFJNT0RFCQkJMHg4MGMwCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwpAQCAtMTY3Nyw3ICsxNjkzLDcgQEAKICAqIFRTRiBwYXJhbWV0ZXIgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNCQkJMHg4MTA0CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19NCQkweDAwMDAwMGZmCS8qIE1hc2sgZm9yIFRTRiBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQVI1S19UU0ZfUEFSTV9JTkMJCTB4MDAwMDAwZmYJLyogTWFzayBmb3IgVFNGIGluY3JlbWVudCAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19TCQkwCiAKIC8qCkBAIC0xNjg5LDcgKzE3MDUsNyBAQAogI2RlZmluZSBBUjVLX1FPU19OT0FDS19CSVRfT0ZGU0VUCTB4MDAwMDAwNzAJLyogPz8/ICovCiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVRfUwk0CiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUCTB4MDAwMDAxODAJLyogPz8/ICovCi0jZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUX1MJOAorI2RlZmluZSBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVF9TCTcKIAogLyoKICAqIFBIWSBlcnJvciBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE4NDgsMTUgKzE4NjQsMTQgQEAKICAqIFRTVF8yIChNaXNjIGNvbmZpZyBwYXJhbWV0ZXJzKQogICovCiAjZGVmaW5lCUFSNUtfUEhZX1RTVDIJCQkweDk4MDAJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJR19TRUwJCTB4MDAwMDAwMDEJLyogVHJpZ2dlciBzZWxlY3QgKD8pIChmaWVsZCA/KSAqLwotI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUcJCTB4MDAwMDAwMTAJLyogVHJpZ2dlciAoPykgKGZpZWxkID8pICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0JVU19NT0RFCQkweDAwMDAwMTAwCS8qIENhcmRidXMgbW9kZSAoPykgKi8KLS8qIGJpdCByZXNlcnZlZCAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUdfU0VMCQkweDAwMDAwMDA3CS8qIFRyaWdnZXIgc2VsZWN0ICg/KSovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJRwkJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyICg/KSAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX0NCVVNfTU9ERQkJMHgwMDAwMDA2MAkvKiBDYXJkYnVzIG1vZGUgKD8pICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0xLMzIJCTB4MDAwMDA0MDAJLyogQ0xLX09VVCBpcyBDTEszMiAoMzJLaHogZXh0ZXJuYWwpICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0hBTkNPUl9EVU1QX0VOCTB4MDAwMDA4MDAJLyogRW5hYmxlIENoYW5jb3IgZHVtcCAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9FVkVOX0NIQU5DT1JfRFVNUAkweDAwMDAxMDAwCS8qIEV2ZW4gQ2hhbmNvciBkdW1wICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1JGU0lMRU5UX0VOCTB4MDAwMDIwMDAJLyogRW5hYmxlIFJGU0lMRU5UICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2gpICovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2ggPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9NSU5JX09CU19FTgkweDAwMDA4MDAwCS8qIEVuYWJsZSBtaW5pIE9CUyAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9SWDJfSVNfUlg1X0lOVgkweDAwMDEwMDAwCS8qIDJHSHogcnggcGF0aCBpcyB0aGUgNUdIeiBwYXRoIGludmVydGVkICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1NMT1dfQ0xLMTYwCTB4MDAwMjAwMDAJLyogU2xvdyBDTEsxNjAgKD8pICovCkBAIC0xOTI2LDggKzE5NDEsOCBAQAogI2RlZmluZQlBUjVLX1BIWV9SRl9DVEwyX1RYRjJUWERfU1RBUlRfUwkwCiAKICNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMMwkJMHg5ODI4CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1BIWV9SRl9DVEwzX1RYRTJYTE5BX09OCTB4MDAwMDAwMGYJLyogVFggZW5kIHRvIFhMTkEgb24gKi8KLSNkZWZpbmUJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTl9TCTAKKyNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTgkweDAwMDBmZjAwCS8qIFRYIGVuZCB0byBYTE5BIG9uICovCisjZGVmaW5lCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT05fUwk4CiAKICNkZWZpbmUJQVI1S19QSFlfQURDX0NUTAkJCTB4OTgyYwogI2RlZmluZQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PRkYJCTB4MDAwMDAwMDMKQEAgLTE5NjEsNyArMTk3Niw3IEBACiAjZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5HX0FHQwkJMHgwMDAwMDA3ZgkvKiBBR0Mgc2V0dGxpbmcgdGltZSAqLwogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19BR0NfUwkJMAogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gJMHgwMDAwM2Y4MAkvKiBTd2l0Y2ggc2V0dGxpZyB0aW1lICovCi0jZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5LX1NXSVRDSF9TCTcKKyNkZWZpbmUJQVI1S19QSFlfU0VUVExJTkdfU1dJVENIX1MJNwogCiAvKgogICogUEhZIEdhaW4gcmVnaXN0ZXJzCkBAIC0yMDY3LDE0ICsyMDgyLDE0IEBACiAgKiBQSFkgc2xlZXAgcmVnaXN0ZXJzIFs1MTEyK10KICAqLwogI2RlZmluZSBBUjVLX1BIWV9TQ1IJCQkweDk4NzAKLSNkZWZpbmUgQVI1S19QSFlfU0NSXzMyTUhaCQkweDAwMDAwMDFmCiAKICNkZWZpbmUgQVI1S19QSFlfU0xNVAkJCTB4OTg3NAogI2RlZmluZSBBUjVLX1BIWV9TTE1UXzMyTUhaCQkweDAwMDAwMDdmCiAKICNkZWZpbmUgQVI1S19QSFlfU0NBTAkJCTB4OTg3OAogI2RlZmluZSBBUjVLX1BIWV9TQ0FMXzMyTUhaCQkweDAwMDAwMDBlCi0KKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3CTB4MDAwMDAwMGEKKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzCTB4MDAwMDAwMzIKIAogLyoKICAqIFBIWSBQTEwgKFBoYXNlIExvY2tlZCBMb29wKSBjb250cm9sIHJlZ2lzdGVyCkBAIC0yMTAxLDM0ICsyMTE2LDEwIEBACiAvKgogICogUkYgQnVmZmVyIHJlZ2lzdGVyCiAgKgotICogVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjb250cm9sIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAotICogdGhhdCBob2xkIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCi0gKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KLSAqCi0gKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0Ci0gKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGJ1ZmZlciByZWdpc3RlciBhbmQKLSAqIHRoZW4gd3JpdGUgb24gYW5vdGhlciBzcGVjaWFsIHJlZ2lzdGVyIHRvIG5vdGlmeSBodwotICogdG8gYXBwbHkgdGhlIHNldHRpbmdzLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBjb250cm9sIHJlZ2lzdGVycwotICogY2FuIGJlIGR5bmFtaWNhbHkgcHJvZ3JhbW1lZCBkdXJpbmcgb3BlcmF0aW9uIGFuZCB0aGUgc2V0dGluZ3MKLSAqIGFyZSBhcHBsaWVkIGZhc3RlciBvbiB0aGUgaHcuCi0gKgotICogV2Ugc2VudCBzdWNoIGRhdGEgcGFja2V0cyBkdXJpbmcgcmYgaW5pdGlhbGl6YXRpb24gYW5kIGNoYW5uZWwgY2hhbmdlCi0gKiB0aHJvdWdoIGF0aDVrX2h3X3JmKl9yZnJlZ3MgYW5kIGF0aDVrX2h3X3JmKl9jaGFubmVsIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgZGF0YSBwYWNrZXRzIHdlIHNlbmQgZHVyaW5nIGluaXRpYWxpemFkaW9uIGFyZSBpbnNpZGUgYXRoNWtfaW5pX3JmCi0gKiBzdHJ1Y3QgKHNlZSBhdGg1a19ody5oKSBhbmQgZWFjaCBvbmUgaXMgcmVsYXRlZCB0byBhbiAicmYgcmVnaXN0ZXIgYmFuayIuCi0gKiBXZSB1c2UgKnJmcmVncyBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZW0gIGFjb3JkaW5nIHRvIGN1cnJlbnQgb3BlcmF0aW9uCi0gKiBtb2RlIGFuZCBlZXByb20gdmFsdWVzIGFuZCBwYXNzIHRoZW0gYWxsIHRvZ2V0aGVyIHRvIHRoZSBjaGlwLgotICoKICAqIEl0J3Mgb2J2aW91cyBmcm9tIHRoZSBjb2RlIHRoYXQgMHg5ODljIGlzIHRoZSBidWZmZXIgcmVnaXN0ZXIgYnV0CiAgKiBmb3IgdGhlIG90aGVyIHNwZWNpYWwgcmVnaXN0ZXJzIHRoYXQgd2Ugd3JpdGUgdG8gYWZ0ZXIgc2VuZGluZyBlYWNoCiAgKiBwYWNrZXQsIGkgaGF2ZSBubyBpZGVhLiBTbyBpJ2xsIG5hbWUgdGhlbSBCVUZGRVJfQ09OVFJPTF9YIHJlZ2lzdGVycwogICogZm9yIG5vdy4gSXQncyBpbnRlcmVzdGluZyB0aGF0IHRoZXkgYXJlIGFsc28gdXNlZCBmb3Igc29tZSBvdGhlciBvcGVyYXRpb25zLgotICoKLSAqIEFsc28gY2hlY2sgb3V0IGh3LmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgotICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6Ci0gKgotICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCiAgKi8KIAogI2RlZmluZSBBUjVLX1JGX0JVRkZFUgkJCTB4OTg5YwpAQCAtMjE3OCw3ICsyMTY5LDggQEAKICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIFRYL1JYICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9BTlRfQ1RMX1NFQ1RPUkVEX0FOVAkweDAwMDAwMDA0CS8qIFNlY3RvcmVkIEFudGVubmEgKi8KICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9ISVRVTkU1CTB4MDAwMDAwMDgJLyogSGl0dW5lNSAoPykgKi8KLSNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDAxMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDNmMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEVfUwk0CiAKIC8qCiAgKiBQSFkgcmVjZWl2ZXIgZGVsYXkgcmVnaXN0ZXIgWzUxMTErXQpAQCAtMjIxOCw3ICsyMjEwLDcgQEAKICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUgkJCTB4OTkyNAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKi8KICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIGN5Y2xpYyBSU1NJIHRociAxICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMQkweDAwMDAwMGZlCS8qIE1hc2sgZm9yIEN5Y2xpYyBSU1NJIHRocmVzaG9sZCAxICovCi0jZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMV9TCTAKKyNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX1MJMQogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjMJMHgwMDAwMDEwMAkvKiBDeWNsaWMgUlNTSSB0aHJlc2hvbGQgMyAoZmllbGQpICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX1JTU0lfMUFUSFJfRU4JMHgwMDAwODAwMAkvKiBFbmFibGUgMUEgUlNTSSB0aHJlc2hvbGQgKD8pICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfUlNTSV8xQVRIUgkweDAwMDEwMDAwCS8qIDFBIFJTU0kgdGhyZXNob2xkIChmaWVsZCkgKD8pICovCkBAIC0yMjQzLDkgKzIyMzUsNyBAQAogI2RlZmluZQlBUjVLX1BIWV9DVExfTE9XX0ZSRVFfU0xFX0VOCTB4MDAwMDAwODAJLyogRW5hYmxlIGxvdyBmcmVxIHNsZWVwICovCiAKIC8qCi0gKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMSsgKD8pXQotICogSXMgdGhpcyBvbmx5IHByZXNlbnQgaW4gNTIxMiA/Ci0gKiBCZWNhdXNlIGl0J3MgYWx3YXlzIDAgaW4gNTIxMSBpbml0aWFsaXphdGlvbiBjb2RlCisgKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMStdCiAgKi8KICNkZWZpbmUJQVI1S19QSFlfUEFQRF9QUk9CRQkJMHg5OTMwCiAjZGVmaW5lCUFSNUtfUEhZX1BBUERfUFJPQkVfU0hfSElfUEFSCTB4MDAwMDAwMDEKQEAgLTIzMDMsNiArMjI5MywxNSBAQAogCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RJTUlOR19FUlIKIAogLyoKKyAqIFBIWSBUeCBQb3dlciBhZGp1c3RtZW50IHJlZ2lzdGVyIFs1MjEyQStdCisgKi8KKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESgkJCTB4OTk0YworI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBCTB4MDAwMDBmYzAKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfR0FJTl9ERUxUQV9TCTYKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgJMHgwMGZjMDAwMAorI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19QQ0RBQ19JTkRFWF9TCTE4CisKKy8qCiAgKiBQSFkgcmFkYXIgZGV0ZWN0aW9uIHJlZ2lzdGVyIFs1MTExK10KICAqLwogI2RlZmluZQlBUjVLX1BIWV9SQURBUgkJCTB4OTk1NApAQCAtMjM1NSw3ICsyMzU0LDcgQEAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDJfUwkzCiAjZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0ZJTFQxCTB4MDAwMDFmMDAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDFfUwk4Ci0jZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQCTB4MDFmZjMwMDAKKyNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfQURDX0NMSVAJMHgwMWZmZTAwMAogI2RlZmluZSBBUjVLX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUF9TCTEzCiAKIC8qCkBAIC0yMzg3LDIxICsyMzg2LDIxIEBACiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNAkweDAwMDAzZmZmCiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNF9TCTAKIAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzkJCQkweDk5OTgKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMAkJMHg5OTljCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCTB4MDAwZmZmZmYKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR185CQkJMHg5OTk4CisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMAkJCTB4OTk5YworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCQkweDAwMGZmZmZmCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCiAKIC8qCiAgKiBTcHVyIG1pdGlnYXRpb24gY29udHJvbAogICovCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFCTB4MDAwZmZmZmYJLyogU3B1ciBkZWx0YSBwaGFzZSAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0VfUwkwCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0ZSRVFfU0RfUwkyMAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX0FHQwkweDQwMDAwMDAwCS8qIFNwdXIgZmlsdGVyIGluIEFHQyBkZXRlY3RvciAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0UJMHgwMDBmZmZmZgkvKiBTcHVyIGRlbHRhIHBoYXNlICovCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFX1MJMAorI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfRlJFUV9TRF9TCTIwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9VU0VfU1BVUl9JTl9BR0MJMHg0MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBBR0MgZGV0ZWN0b3IgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLwogCiAvKgogICogR2FpbiB0YWJsZXMKQEAgLTI0ODMsMTcgKzI0ODIsNyBAQAogI2RlZmluZSBBUjVLX1BIWV9TREVMQVkJCQkweDk5ZjQKICNkZWZpbmUgQVI1S19QSFlfU0RFTEFZXzMyTUhaCQkweDAwMDAwMGZmCiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HCQkweDk5ZjgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTQJCTB4MDAwMDAwMTQKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTgJCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyCTB4MDAwMDAwMTQKLS8qICNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyQQkweDAwMDAwMDBlICovCi0vKiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQyNAkweDAwMDAwMDEyICovCi0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNgkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNQkweDAwMDAwMDE0CisKIAogLyoKICAqIFBIWSBQQVBEIEkgKHBvd2VyPykgdGFibGUgKD8pCkBAIC0yNTA1LDExICsyNDk0LDcgQEAKIC8qCiAgKiBQSFkgUENEQUMgVFggcG93ZXIgdGFibGUKICAqLwotI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMQkweGExODAKLSNkZWZpbmUgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzI0MTMJMHhhMjgwCi0jZGVmaW5lIEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRQkoYWgtPmFoX3JhZGlvID49IEFSNUtfUkYyNDEzID8gXAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfMjQxMyA6XAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMSkKKyNkZWZpbmUJQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFCTB4YTE4MAogI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCiAKIC8qCkBAIC0yNTc4LDYgKzI1NjMsMTIgQEAKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHMQkJMHhhMjU4CiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzFfTlVNX1BEX0dBSU4JMHgwMDAwYzAwMAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkcxX05VTV9QRF9HQUlOX1MJMTQKKyNkZWZpbmUgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMQkweDAwMDMwMDAwCisjZGVmaW5lIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzFfUwkxNgorI2RlZmluZSBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8yCTB4MDAwYzAwMDAKKyNkZWZpbmUgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMl9TCTE4CisjZGVmaW5lIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzMJMHgwMDMwMDAwMAorI2RlZmluZSBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8zX1MJMjAKIAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1CQkJMHhhMjZDCiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQCTB4MDAwMDAwMEYKQEAgLTI1OTAsMyArMjU4MSw5IEBACiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8zX1MJMTYKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQJMHgwRkMwMDAwMAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1X1BEX0dBSU5fQk9VTkRBUllfNF9TCTIyCisKKy8qCisgKiBQSFkgUERBREMgVHggcG93ZXIgdGFibGUKKyAqLworI2RlZmluZSBBUjVLX1BIWV9QREFEQ19UWFBPV0VSX0JBU0UJMHhhMjgwCisjZGVmaW5lCUFSNUtfUEhZX1BEQURDX1RYUE9XRVIoX24pCShBUjVLX1BIWV9QREFEQ19UWFBPV0VSX0JBU0UgKyAoKF9uKSA8PCAyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jCmluZGV4IGRjMmQ3ZDguLjdhMTdkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVzZXQuYwpAQCAtMjUsNyArMjUsOCBAQAogICBSZXNldCBmdW5jdGlvbnMgYW5kIGhlbHBlcnMKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPiAJCS8qIFRvIGRldGVybWluZSBpZiBhIGNhcmQgaXMgcGNpLWUgKi8KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4JLyogRm9yIGdldF9iaXRtYXNrX29yZGVyICovCiAjaW5jbHVkZSAiYXRoNWsuaCIKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJiYXNlLmgiCkBAIC0zNywxMCArMzgsMTQgQEAKICAqIEBhaDogdGhlICZzdHJ1Y3QgYXRoNWtfaHcKICAqIEBjaGFubmVsOiB0aGUgY3VycmVudGx5IHNldCBjaGFubmVsIHVwb24gcmVzZXQKICAqCi0gKiBXcml0ZSB0aGUgT0ZETSB0aW1pbmdzIGZvciB0aGUgQVI1MjEyIHVwb24gcmVzZXQuIFRoaXMgaXMgYSBoZWxwZXIgZm9yCi0gKiBhdGg1a19od19yZXNldCgpLiBUaGlzIHNlZW1zIHRvIHR1bmUgdGhlIFBMTCBhIHNwZWNpZmllZCBmcmVxdWVuY3kKLSAqIGRlcGVuZGluZyBvbiB0aGUgYmFuZHdpZHRoIG9mIHRoZSBjaGFubmVsLgorICogV3JpdGUgdGhlIGRlbHRhIHNsb3BlIGNvZWZmaWNpZW50ICh1c2VkIG9uIHBpbG90IHRyYWNraW5nID8pIGZvciBPRkRNCisgKiBvcGVyYXRpb24gb24gdGhlIEFSNTIxMiB1cG9uIHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvciBhdGg1a19od19yZXNldCgpLgogICoKKyAqIFNpbmNlIGRlbHRhIHNsb3BlIGlzIGZsb2F0aW5nIHBvaW50IHdlIHNwbGl0IGl0IG9uIGl0cyBleHBvbmVudCBhbmQKKyAqIG1hbnRpc3NhIGFuZCBwcm92aWRlIHRoZXNlIHZhbHVlcyBvbiBody4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcyBpIHRoaW5rIHRoaXMgcGF0ZW50IGlzIHJlbGF0ZWQKKyAqIGh0dHA6Ly93d3cuZnJlZXBhdGVudHNvbmxpbmUuY29tLzcxODQ0OTUuaHRtbAogICovCiBzdGF0aWMgaW5saW5lIGludCBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCkBAIC01MywyMyArNTgsMzQgQEAKIAkJIShjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkpCiAJCUJVRygpOwogCi0JLyogU2VlbXMgdGhlcmUgYXJlIHR3byBQTExzLCBvbmUgZm9yIGJhc2ViYW5kIHNhbXBsaW5nIGFuZCBvbmUKLQkgKiBmb3IgdHVuaW5nLiBUdW5pbmcgYmFzZWJhbmRzIGFyZSA0MCBNSHogb3IgODBNSHogd2hlbiBpbgotCSAqIHR1cmJvLiAqLwotCWNsb2NrID0gY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPID8gODAgOiA0MDsKLQljb2VmX3NjYWxlZCA9ICgoNSAqIChjbG9jayA8PCAyNCkpIC8gMikgLwotCWNoYW5uZWwtPmNlbnRlcl9mcmVxOworCS8qIEdldCBjb2VmZmljaWVudAorCSAqIEFMR086IGNvZWYgPSAoNSAqIGNsb2NrICogY2Fycmllcl9mcmVxKSAvIDIpCisJICogd2Ugc2NhbGUgY29lZiBieSBzaGlmdGluZyBjbG9jayB2YWx1ZSBieSAyNCBmb3IKKwkgKiBiZXR0ZXIgcHJlY2lzaW9uIHNpbmNlIHdlIHVzZSBpbnRlZ2VycyAqLworCS8qIFRPRE86IEhhbGYvcXVhcnRlciByYXRlICovCisJY2xvY2sgPSAgYXRoNWtfaHdfaHRvY2xvY2soMSwgY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKTsKIAotCWZvciAoY29lZl9leHAgPSAzMTsgY29lZl9leHAgPiAwOyBjb2VmX2V4cC0tKQotCQlpZiAoKGNvZWZfc2NhbGVkID4+IGNvZWZfZXhwKSAmIDB4MSkKLQkJCWJyZWFrOworCWNvZWZfc2NhbGVkID0gKCg1ICogKGNsb2NrIDw8IDI0KSkgLyAyKSAvIGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCisJLyogR2V0IGV4cG9uZW50CisJICogQUxHTzogY29lZl9leHAgPSAxNCAtIGhpZ2hlc3Qgc2V0IGJpdCBwb3NpdGlvbiAqLworCWNvZWZfZXhwID0gZ2V0X2JpdG1hc2tfb3JkZXIoY29lZl9zY2FsZWQpOworCisJLyogRG9lc24ndCBtYWtlIHNlbnNlIGlmIGl0J3MgemVybyovCiAJaWYgKCFjb2VmX2V4cCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBOb3RlOiB3ZSd2ZSBzaGlmdGVkIGNvZWZfc2NhbGVkIGJ5IDI0ICovCiAJY29lZl9leHAgPSAxNCAtIChjb2VmX2V4cCAtIDI0KTsKKworCisJLyogR2V0IG1hbnRpc3NhIChzaWduaWZpY2FudCBkaWdpdHMpCisJICogQUxHTzogY29lZl9tYW50ID0gZmxvb3IoY29lZl9zY2FsZWQqIDJeY29lZl9leHArMC41KSAqLwogCWNvZWZfbWFuID0gY29lZl9zY2FsZWQgKwogCQkoMSA8PCAoMjQgLSBjb2VmX2V4cCAtIDEpKTsKKworCS8qIENhbGN1bGF0ZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCBleHBvbmVudAorCSAqIGFuZCBtYW50aXNzYSAocmVtb3ZlIHNjYWxpbmcpIGFuZCBzZXQgdGhlbSBvbiBodyAqLwogCWRzX2NvZWZfbWFuID0gY29lZl9tYW4gPj4gKDI0IC0gY29lZl9leHApOwogCWRzX2NvZWZfZXhwID0gY29lZl9leHAgLSAxNjsKIApAQCAtODYsMjAgKzEwMiwyNyBAQAogICogaW5kZXggaW50byByYXRlcyBmb3IgY29udHJvbCByYXRlcywgd2UgY2FuIHNldCBpdCB1cCBsaWtlIHRoaXMgYmVjYXVzZQogICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIEFSNTIxMiBhbmQgd2Uga25vdyBpdCBzdXBwb3J0cyBHIG1vZGUKICAqLwotc3RhdGljIGludCBjb250cm9sX3JhdGVzW10gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb250cm9sX3JhdGVzW10gPQogCXsgMCwgMSwgMSwgMSwgNCwgNCwgNiwgNiwgOCwgOCwgOCwgOCB9OwogCiAvKioKLSAqIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24gLSBzZXQgcmF0ZSBkdXJhdGlvbiBkdXJpbmcgaHcgcmVzZXRzCisgKiBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uIC0gZmlsbCByYXRlIGNvZGUgdG8gZHVyYXRpb24gdGFibGUKICAqCiAgKiBAYWg6IHRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKiBAbW9kZTogb25lIG9mIGVudW0gYXRoNWtfZHJpdmVyX21vZGUKICAqCi0gKiBXcml0ZSB0aGUgcmF0ZSBkdXJhdGlvbiB0YWJsZSB1cG9uIGh3IHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgotICogYXRoNWtfaHdfcmVzZXQoKS4gSXQgc2VlbXMgYWxsIHRoaXMgaXMgZG9pbmcgaXMgc2V0dGluZyBhbiBBQ0sgdGltZW91dCBmb3IKLSAqIHRoZSBoYXJkd2FyZSBmb3IgdGhlIGN1cnJlbnQgbW9kZSBmb3IgZWFjaCByYXRlLiBUaGUgcmF0ZXMgd2hpY2ggYXJlIGNhcGFibGUKLSAqIG9mIHNob3J0IHByZWFtYmxlICg4MDIuMTFiIHJhdGVzIDJNYnBzLCA1LjVNYnBzLCBhbmQgMTFNYnBzKSBoYXZlIGFub3RoZXIKLSAqIHJlZ2lzdGVyIGZvciB0aGUgc2hvcnQgcHJlYW1ibGUgQUNLIHRpbWVvdXQgY2FsY3VsYXRpb24uCisgKiBXcml0ZSB0aGUgcmF0ZSBjb2RlIHRvIGR1cmF0aW9uIHRhYmxlIHVwb24gaHcgcmVzZXQuIFRoaXMgaXMgYSBoZWxwZXIgZm9yCisgKiBhdGg1a19od19yZXNldCgpLiBJdCBzZWVtcyBhbGwgdGhpcyBpcyBkb2luZyBpcyBzZXR0aW5nIGFuIEFDSyB0aW1lb3V0IG9uCisgKiB0aGUgaGFyZHdhcmUsIGJhc2VkIG9uIGN1cnJlbnQgbW9kZSwgZm9yIGVhY2ggcmF0ZS4gVGhlIHJhdGVzIHdoaWNoIGFyZQorICogY2FwYWJsZSBvZiBzaG9ydCBwcmVhbWJsZSAoODAyLjExYiByYXRlcyAyTWJwcywgNS41TWJwcywgYW5kIDExTWJwcykgaGF2ZQorICogZGlmZmVyZW50IHJhdGUgY29kZSBzbyB3ZSB3cml0ZSB0aGVpciB2YWx1ZSB0d2ljZSAob25lIGZvciBsb25nIHByZWFtcGxlCisgKiBhbmQgb25lIGZvciBzaG9ydCkuCisgKgorICogTm90ZTogQmFuZCBkb2Vzbid0IG1hdHRlciBoZXJlLCBpZiB3ZSBzZXQgdGhlIHZhbHVlcyBmb3IgT0ZETSBpdCB3b3JrcworICogb24gYm90aCBhIGFuZCBnIG1vZGVzLiBTbyBhbGwgd2UgaGF2ZSB0byBkbyBpcyBzZXQgdmFsdWVzIGZvciBhbGwgZyByYXRlcworICogdGhhdCBpbmNsdWRlIGFsbCBPRkRNIGFuZCBDQ0sgcmF0ZXMuIElmIHdlIG9wZXJhdGUgaW4gdHVyYm8gb3IgeHIvaGFsZi8KKyAqIHF1YXJ0ZXIgcmF0ZSBtb2RlLCB3ZSBuZWVkIHRvIHVzZSBhbm90aGVyIHNldCBvZiBiaXRyYXRlcyAodGhhdCdzIHdoeSB3ZQorICogbmVlZCB0aGUgbW9kZSBwYXJhbWV0ZXIpIGJ1dCB3ZSBkb24ndCBoYW5kbGUgdGhlc2UgcHJvcHJpZXRhcnkgbW9kZXMgeWV0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQpAQCAtMjc1LDcgKzI5OCw4IEBACiB9CiAKIC8qCi0gKiBCcmluZyB1cCBNQUMgKyBQSFkgQ2hpcHMKKyAqIEJyaW5nIHVwIE1BQyArIFBIWSBDaGlwcyBhbmQgcHJvZ3JhbSBQTEwKKyAqIFRPRE86IEhhbGYvUXVhcnRlciByYXRlIHN1cHBvcnQKICAqLwogaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpCiB7CkBAIC0zMzMsNyArMzU3LDExIEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoZmxhZ3MgJiBDSEFOTkVMXzVHSFopIHsKIAkJCW1vZGUgfD0gQVI1S19QSFlfTU9ERV9GUkVRXzVHSFo7Ci0JCQljbG9jayB8PSBBUjVLX1BIWV9QTExfNDBNSFo7CisKKwkJCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpCisJCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaXzU0MTM7CisJCQllbHNlCisJCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaOwogCiAJCQlpZiAoZmxhZ3MgJiBDSEFOTkVMX09GRE0pCiAJCQkJbW9kZSB8PSBBUjVLX1BIWV9NT0RFX01PRF9PRkRNOwpAQCAtMzkxLDEwICs0MTksMTQgQEAKIAl9CiAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJLyogLi4uc2V0IHRoZSBQSFkgb3BlcmF0aW5nIG1vZGUgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBjbG9jaywgQVI1S19QSFlfUExMKTsKLQkJdWRlbGF5KDMwMCk7CiAKKwkJLyogLi4udXBkYXRlIFBMTCBpZiBuZWVkZWQgKi8KKwkJaWYgKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9QTEwpICE9IGNsb2NrKSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGNsb2NrLCBBUjVLX1BIWV9QTEwpOworCQkJdWRlbGF5KDMwMCk7CisJCX0KKworCQkvKiAuLi5zZXQgdGhlIFBIWSBvcGVyYXRpbmcgbW9kZSAqLwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIG1vZGUsIEFSNUtfUEhZX01PREUpOwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR1cmJvLCBBUjVLX1BIWV9UVVJCTyk7CiAJfQpAQCAtNDAzLDIyICs0MzUsMzk5IEBACiB9CiAKIC8qCisgKiBJZiB0aGVyZSBpcyBhbiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIGF2YWlsYWJsZSwgdXNlIGl0CisgKiBhcyByZWYuIGNsb2NrIGluc3RlYWQgb2YgMzIvNDBNSHogY2xvY2sgYW5kIGJhc2ViYW5kIGNsb2NrcworICogdG8gc2F2ZSBwb3dlciBkdXJpbmcgc2xlZXAgb3IgcmVzdG9yZSBub3JtYWwgMzIvNDBNSHoKKyAqIG9wZXJhdGlvbi4KKyAqCisgKiBYWFg6IFdoZW4gb3BlcmF0aW5nIG9uIDMyS0h6IGNlcnRhaW4gUEhZIHJlZ2lzdGVycyAoMjcgLSAzMSwKKyAqIAkxMjMgLSAxMjcpIHJlcXVpcmUgZGVsYXkgb24gYWNjZXNzLgorICovCitzdGF0aWMgdm9pZCBhdGg1a19od19zZXRfc2xlZXBfY2xvY2soc3RydWN0IGF0aDVrX2h3ICphaCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTMyIHNjYWwsIHNwZW5kaW5nLCB1c2VjMzI7CisKKwkvKiBPbmx5IHNldCAzMktIeiBzZXR0aW5ncyBpZiB3ZSBoYXZlIGFuIGV4dGVybmFsCisJICogMzJLSHogY3J5c3RhbCBwcmVzZW50ICovCisJaWYgKChBUjVLX0VFUFJPTV9IQVMzMktIWkNSWVNUQUwoZWUtPmVlX21pc2MxKSB8fAorCUFSNUtfRUVQUk9NX0hBUzMyS0haQ1JZU1RBTF9PTEQoZWUtPmVlX21pc2MxKSkgJiYKKwllbmFibGUpIHsKKworCQkvKiAxIHVzZWMvY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19VU0VDXzUyMTEsIEFSNUtfVVNFQ18zMiwgMSk7CisJCS8qIFNldCB1cCB0c2YgaW5jcmVtZW50IG9uIGVhY2ggY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDYxKTsKKworCQkvKiBTZXQgYmFzZWJhbmQgc2xlZXAgY29udHJvbCByZWdpc3RlcnMKKwkJICogYW5kIHNsZWVwIGNvbnRyb2wgcmF0ZSAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MWYsIEFSNUtfUEhZX1NDUik7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQkJc3BlbmRpbmcgPSAweDE0OworCQllbHNlCisJCQlzcGVuZGluZyA9IDB4MTg7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkJKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkpIHsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyNiwgQVI1S19QSFlfU0xNVCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGQsIEFSNUtfUEhZX1NDQUwpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDA3LCBBUjVLX1BIWV9TQ0xPQ0spOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDNmLCBBUjVLX1BIWV9TREVMQVkpOworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMHgwMik7CisJCX0gZWxzZSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGEsIEFSNUtfUEhZX1NMTVQpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBjLCBBUjVLX1BIWV9TQ0FMKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMywgQVI1S19QSFlfU0NMT0NLKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyMCwgQVI1S19QSFlfU0RFTEFZKTsKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDB4MDMpOworCQl9CisKKwkJLyogRW5hYmxlIHNsZWVwIGNsb2NrIG9wZXJhdGlvbiAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfRU4pOworCisJfSBlbHNlIHsKKworCQkvKiBEaXNhYmxlIHNsZWVwIGNsb2NrIG9wZXJhdGlvbiBhbmQKKwkJICogcmVzdG9yZSBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19FTik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMCk7CisKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOworCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3OworCQllbHNlIGlmIChhdGg1a19lZXByb21faXNfaGI2MyhhaCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOworCQllbHNlCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQkJc3BlbmRpbmcgPSAweDE0OworCQllbHNlCisJCQlzcGVuZGluZyA9IDB4MTg7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykpCisJCQl1c2VjMzIgPSAzOTsKKwkJZWxzZQorCQkJdXNlYzMyID0gMzE7CisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIHVzZWMzMik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDEpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBib29sIGF0aDVrX2h3X2NoYW5faGFzX3NwdXJfbm9pc2Uoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJdTggcmVmY2xrX2ZyZXE7CisKKwlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQlyZWZjbGtfZnJlcSA9IDQwOworCWVsc2UKKwkJcmVmY2xrX2ZyZXEgPSAzMjsKKworCWlmICgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSAhPSAwKSAmJgorCSgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSA8IDEwKSB8fAorCShjaGFubmVsLT5jZW50ZXJfZnJlcSAlIHJlZmNsa19mcmVxID4gMjIpKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRPRE86IEhhbGYvUXVhcnRlciByYXRlICovCitzdGF0aWMgdm9pZCBhdGg1a19od190d2Vha19pbml0dmFsX3NldHRpbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgorCSAgICBhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKworCQkvKiBTZXR1cCBBREMgY29udHJvbCAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQkJKEFSNUtfUkVHX1NNKDIsCisJCQkJQVI1S19QSFlfQURDX0NUTF9JTkJVRkdBSU5fT0ZGKSB8CisJCQkJQVI1S19SRUdfU00oMiwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PTikgfAorCQkJCUFSNUtfUEhZX0FEQ19DVExfUFdEX0RBQ19PRkYgfAorCQkJCUFSNUtfUEhZX0FEQ19DVExfUFdEX0FEQ19PRkYpLAorCQkJCUFSNUtfUEhZX0FEQ19DVEwpOworCisKKworCQkvKiBEaXNhYmxlIGJhcmtlciBSU1NJIHRocmVzaG9sZCAqLworCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAorCQkJCUFSNUtfUEhZX0RBR19DQ0tfQ1RMX0VOX1JTU0lfVEhSKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwKKwkJCUFSNUtfUEhZX0RBR19DQ0tfQ1RMX1JTU0lfVEhSLCAyKTsKKworCQkvKiBTZXQgdGhlIG11dGUgbWFzayAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMGYsIEFSNUtfU0VRX01BU0spOworCX0KKworCS8qIENsZWFyIFBIWV9CTFVFVE9PVEggdG8gYWxsb3cgUlhfQ0xFQVIgbGluZSBkZWJ1ZyAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkIpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19QSFlfQkxVRVRPT1RIKTsKKworCS8qIEVuYWJsZSBEQ1UgZG91YmxlIGJ1ZmZlcmluZyAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID4gQVI1S19TUkVWX1BIWV81MjEyQikKKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJCUFSNUtfVFhDRkdfRENVX0RCTF9CVUZfRElTKTsKKworCS8qIFNldCBEQUMvQURDIGRlbGF5cyAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQl1MzIgc2NhbDsKKwkJaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaXzI0MTc7CisJCWVsc2UgaWYgKGF0aDVrX2VlcHJvbV9pc19oYjYzKGFoKSkKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaX0hCNjM7CisJCWVsc2UKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNjYWwsIEFSNUtfUEhZX1NDQUwpOworCX0KKworCS8qIFNldCBmYXN0IEFEQyAqLworCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKSB7CisJCXUzMiBmYXN0X2FkYyA9IHRydWU7CisKKwkJaWYgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID09IDI0NjIgfHwKKwkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPT0gMjQ2NykKKwkJCWZhc3RfYWRjID0gMDsKKworCQkvKiBPbmx5IHVwZGF0ZSBpZiBuZWVkZWQgKi8KKwkJaWYgKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9GQVNUX0FEQykgIT0gZmFzdF9hZGMpCisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBmYXN0X2FkYywKKwkJCQkJCUFSNUtfUEhZX0ZBU1RfQURDKTsKKwl9CisKKwkvKiBGaXggZm9yIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBSRjUxMTIgUkYgY2hpcHNldCAqLworCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIgJiYKKwkJCWFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwKKwkJCUFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJdTMyIGRhdGE7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQ0NLVFhDVExfV09STEQsCisJCQkJQVI1S19QSFlfQ0NLVFhDVEwpOworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCisJCQlkYXRhID0gMHhmZmI4MTAyMDsKKwkJZWxzZQorCQkJZGF0YSA9IDB4ZmZiODBkMjA7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfRlJBTUVfQ1RMKTsKKwl9CisKKwlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQl1MzIgdXNlY19yZWc7CisJCS8qIDUzMTEgaGFzIGRpZmZlcmVudCB0eC9yeCBsYXRlbmN5IG1hc2tzCisJCSAqIGZyb20gNTIxMSwgc2luY2Ugd2UgZGVhbCA1MzExIHRoZSBzYW1lCisJCSAqIGFzIDUyMTEgd2hlbiBzZXR0aW5nIGluaXR2YWxzLCBzaGlmdAorCQkgKiB2YWx1ZXMgaGVyZSB0byB0aGVpciBwcm9wZXIgbG9jYXRpb25zICovCisJCXVzZWNfcmVnID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVVNFQ181MjExKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB1c2VjX3JlZyAmIChBUjVLX1VTRUNfMSB8CisJCQkJQVI1S19VU0VDXzMyIHwKKwkJCQlBUjVLX1VTRUNfVFhfTEFURU5DWV81MjExIHwKKwkJCQlBUjVLX1JFR19TTSgyOSwKKwkJCQlBUjVLX1VTRUNfUlhfTEFURU5DWV81MjEwKSksCisJCQkJQVI1S19VU0VDXzUyMTEpOworCQkvKiBDbGVhciBRQ1UvRENVIGNsb2NrIGdhdGluZyByZWdpc3RlciAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUUNVRENVX0NMS0dUKTsKKwkJLyogU2V0IERBQy9BREMgZGVsYXlzICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwOCwgQVI1S19QSFlfU0NBTCk7CisJCS8qIEVuYWJsZSBQQ1UgRklGTyBjb3JydXB0aW9uIEVDTyAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19ESUFHX1NXXzUyMTEsCisJCQkJCUFSNUtfRElBR19TV19FQ09fRU5BQkxFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1OCAqYW50LCB1OCBlZV9tb2RlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXMxNiBjY2tfb2ZkbV9wd3JfZGVsdGE7CisKKwkvKiBBZGp1c3QgcG93ZXIgZGVsdGEgZm9yIGNoYW5uZWwgMTQgKi8KKwlpZiAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPT0gMjQ4NCkKKwkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCSgoZWUtPmVlX2Nja19vZmRtX3Bvd2VyX2RlbHRhIC0KKwkJCWVlLT5lZV9zY2FsZWRfY2NrX2RlbHRhKSAqIDIpIC8gMTA7CisJZWxzZQorCQljY2tfb2ZkbV9wd3JfZGVsdGEgPQorCQkJKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAqIDIpIC8gMTA7CisKKwkvKiBTZXQgQ0NLIHRvIE9GRE0gcG93ZXIgZGVsdGEgb24gdHggcG93ZXIKKwkgKiBhZGp1c3RtZW50IHJlZ2lzdGVyICovCisJaWYgKGFoLT5haF9waHlfcmV2aXNpb24gPj0gQVI1S19TUkVWX1BIWV81MjEyQSkgeworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oKGVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhICogLTEpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREpfQ0NLX0dBSU5fREVMVEEpIHwKKwkJCUFSNUtfUkVHX1NNKChjY2tfb2ZkbV9wd3JfZGVsdGEgKiAtMSksCisJCQkJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREopOworCQllbHNlCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX1RYX1BXUl9BREopOworCX0gZWxzZSB7CisJCS8qIEZvciBvbGRlciByZXZzIHdlIHNjYWxlIHBvd2VyIG9uIHN3IGR1cmluZyB0eCBwb3dlcgorCQkgKiBzZXR1cCAqLworCQlhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fcHdyX2RlbHRhID0gY2NrX29mZG1fcHdyX2RlbHRhOworCQlhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fZ2FpbmZfZGVsdGEgPQorCQkJCQkJZWUtPmVlX2Nja19vZmRtX2dhaW5fZGVsdGE7CisJfQorCisJLyogU2V0IGFudGVubmEgaWRsZSBzd2l0Y2ggdGFibGUgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9BTlRfQ1RMLAorCQkJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUsCisJCQkoYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bMF0gfAorCQkJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOKSk7CisKKwkvKiBTZXQgYW50ZW5uYSBzd2l0Y2ggdGFibGUgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9hbnRlbm5hW2VlX21vZGVdW2FudFswXV0sCisJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMV1dLAorCQlBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFXzEpOworCisJLyogTm9pc2UgZmxvb3IgdGhyZXNob2xkICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQlBUjVLX1BIWV9ORl9TVkFMKGVlLT5lZV9ub2lzZV9mbG9vcl90aHJbZWVfbW9kZV0pLAorCQlBUjVLX1BIWV9ORlRIUkVTKTsKKworCWlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKSAmJgorCShhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzVfMCkpIHsKKwkJLyogU3dpdGNoIHNldHRsaW5nIHRpbWUgKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKKwkJCQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJZWUtPmVlX3N3aXRjaF9zZXR0bGluZ190dXJib1tlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggYXR0ZW51YXRpb24gKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAorCQkJCUFSNUtfUEhZX0dBSU5fVFhSWF9BVFRFTiwKKwkJCQllZS0+ZWVfYXRuX3R4X3J4X3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBBREMvUEdBIGRlc2lyZWQgc2l6ZSAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfQURDLAorCQkJCWVlLT5lZV9hZGNfZGVzaXJlZF9zaXplX3R1cmJvW2VlX21vZGVdKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX1BHQSwKKwkJCQllZS0+ZWVfcGdhX2Rlc2lyZWRfc2l6ZV90dXJib1tlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggbWFyZ2luIChUdXJibykgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfR0FJTl8yR0haLAorCQkJCUFSNUtfUEhZX0dBSU5fMkdIWl9NQVJHSU5fVFhSWCwKKwkJCQllZS0+ZWVfbWFyZ2luX3R4X3J4X3R1cmJvW2VlX21vZGVdKTsKKworCX0gZWxzZSB7CisJCS8qIFN3aXRjaCBzZXR0bGluZyB0aW1lICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAorCQkJCUFSNUtfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJCQllZS0+ZWVfc3dpdGNoX3NldHRsaW5nW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBhdHRlbnVhdGlvbiAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAorCQkJCUFSNUtfUEhZX0dBSU5fVFhSWF9BVFRFTiwKKwkJCQllZS0+ZWVfYXRuX3R4X3J4W2VlX21vZGVdKTsKKworCQkvKiBBREMvUEdBIGRlc2lyZWQgc2l6ZSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX0FEQywKKwkJCQllZS0+ZWVfYWRjX2Rlc2lyZWRfc2l6ZVtlZV9tb2RlXSk7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCQkJCUFSNUtfUEhZX0RFU0lSRURfU0laRV9QR0EsCisJCQkJZWUtPmVlX3BnYV9kZXNpcmVkX3NpemVbZWVfbW9kZV0pOworCisJCS8qIFR4L1J4IG1hcmdpbiAqLworCQlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl80XzEpCisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOXzJHSFosCisJCQkJQVI1S19QSFlfR0FJTl8yR0haX01BUkdJTl9UWFJYLAorCQkJCWVlLT5lZV9tYXJnaW5fdHhfcnhbZWVfbW9kZV0pOworCX0KKworCS8qIFhQQSBkZWxheXMgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDI0KSB8CisJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDE2KSB8CisJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0gPDwgOCkgfAorCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdKSwgQVI1S19QSFlfUkZfQ1RMNCk7CisKKwkvKiBYTE5BIGRlbGF5ICovCisJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfUkZfQ1RMMywKKwkJCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT04sCisJCQllZS0+ZWVfdHhfZW5kMnhsbmFfZW5hYmxlW2VlX21vZGVdKTsKKworCS8qIFRocmVzaDY0IChBTkkpICovCisJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfTkYsCisJCQlBUjVLX1BIWV9ORl9USFJFU0g2MiwKKwkJCWVlLT5lZV90aHJfNjJbZWVfbW9kZV0pOworCisKKwkvKiBGYWxzZSBkZXRlY3QgYmFja29mZiBmb3IgY2hhbm5lbHMKKwkgKiB0aGF0IGhhdmUgc3B1ciBub2lzZS4gV3JpdGUgdGhlIG5ldworCSAqIGN5Y2xpYyBwb3dlciBSU1NJIHRocmVzaG9sZC4gKi8KKwlpZiAoYXRoNWtfaHdfY2hhbl9oYXNfc3B1cl9ub2lzZShhaCwgY2hhbm5lbCkpCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsCisJCQkJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxLAorCQkJCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEgKworCQkJCWVlLT5lZV9mYWxzZV9kZXRlY3RbZWVfbW9kZV0pOworCWVsc2UKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkJCQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjEsCisJCQkJQVI1S19JTklUX0NZQ1JTU0lfVEhSMSk7CisKKwkvKiBJL1EgY29ycmVjdGlvbgorCSAqIFRPRE86IFBlciBjaGFubmVsIGkvcSBpbmZvcyA/ICovCisJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLAorCQlBUjVLX1BIWV9JUV9DT1JSX0VOQUJMRSB8CisJCShlZS0+ZWVfaV9jYWxbZWVfbW9kZV0gPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSB8CisJCWVlLT5lZV9xX2NhbFtlZV9tb2RlXSk7CisKKwkvKiBIZWF2eSBjbGlwcGluZyAtZGlzYWJsZSBmb3Igbm93ICovCisJaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8xKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFKTsKKworCXJldHVybjsKK30KKworLyoKICAqIE1haW4gcmVzZXQgZnVuY3Rpb24KICAqLwogaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgY2hhbmdlX2NoYW5uZWwpCiB7Ci0Jc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhaC0+YWhfc2MtPnBkZXY7Ci0JdTMyIGRhdGEsIHNfc2VxLCBzX2FudCwgc19sZWRbM10sIGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBpLCBtb2RlLCBmcmVxLCBlZV9tb2RlLCBhbnRbMl07Ci0JaW50IHJldDsKKwl1MzIgc19zZXFbMTBdLCBzX2FudCwgc19sZWRbM10sIHN0YWlkMV9mbGFncywgdHNmX3VwLCB0c2ZfbG87CisJdTMyIHBoeV90c3QxOworCXU4IG1vZGUsIGZyZXEsIGVlX21vZGUsIGFudFsyXTsKKwlpbnQgaSwgcmV0OwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAotCXNfc2VxID0gMDsKIAlzX2FudCA9IDA7CiAJZWVfbW9kZSA9IDA7CisJc3RhaWQxX2ZsYWdzID0gMDsKKwl0c2ZfdXAgPSAwOworCXRzZl9sbyA9IDA7CiAJZnJlcSA9IDA7CiAJbW9kZSA9IDA7CiAKQEAgLTQyNyw0OCArODM2LDYgQEAKIAkgKi8KIAkvKkRDVS9BbnRlbm5hIHNlbGVjdGlvbiBub3QgYXZhaWxhYmxlIG9uIDUyMTAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKLQkJCS8qIFNlcSBudW1iZXIgZm9yIHF1ZXVlIDAgLWRvIHRoaXMgZm9yIGFsbCBxdWV1ZXMgPyAqLwotCQkJc19zZXEgPSBhdGg1a19od19yZWdfcmVhZChhaCwKLQkJCQkJQVI1S19RVUVVRV9ERlNfU0VRTlVNKDApKTsKLQkJCS8qRGVmYXVsdCBhbnRlbm5hKi8KLQkJCXNfYW50ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKLQkJfQotCX0KLQotCS8qR1BJT3MqLwotCXNfbGVkWzBdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUENJQ0ZHKSAmIEFSNUtfUENJQ0ZHX0xFRFNUQVRFOwotCXNfbGVkWzFdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0NSKTsKLQlzX2xlZFsyXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0dQSU9ETyk7Ci0KLQlpZiAoY2hhbmdlX2NoYW5uZWwgJiYgYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCi0JCWF0aDVrX2h3X2dldF9yZl9nYWluKGFoKTsKLQotCi0JLypXYWtldXAgdGhlIGRldmljZSovCi0JcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgY2hhbm5lbC0+aHdfdmFsdWUsIGZhbHNlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG9wZXJhdGluZyBtb2RlCi0JICovCi0JYWgtPmFoX29wX21vZGUgPSBvcF9tb2RlOwotCi0JLyoKLQkgKiA1MTExLzUxMTIgU2V0dGluZ3MKLQkgKiA1MjEwIG9ubHkgY29tZXMgd2l0aCBSRjUxMTAKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJaWYgKGFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTExMSAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTEyICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjU0MTMgJiYKLQkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGMjQxMyAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkYyNDI1KSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIHBoeSByYWRpbzogJXVcbiIsIGFoLT5haF9yYWRpbyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCXN3aXRjaCAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX01PREVTKSB7CiAJCWNhc2UgQ0hBTk5FTF9BOgpAQCAtNDkxLDggKzg1OCwxMiBAQAogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl81R0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwogCQkJYnJlYWs7Ci0JCS8qSXMgdGhpcyBvayBvbiA1MjExIHRvbyA/Ki8KIAkJY2FzZSBDSEFOTkVMX1RHOgorCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjExKSB7CisJCQkJQVRINUtfRVJSKGFoLT5haF9zYywKKwkJCQkJIlR1cmJvRyBtb2RlIG5vdCBhdmFpbGFibGUgb24gNTIxMSIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJbW9kZSA9IEFSNUtfTU9ERV8xMUdfVFVSQk87CiAJCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzJHSFo7CiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7CkBAIC01MTMsMTEgKzg4NCw5MyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQkvKiBQSFkgYWNjZXNzIGVuYWJsZSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CisJCQkvKgorCQkJICogU2F2ZSBmcmFtZSBzZXF1ZW5jZSBjb3VudAorCQkJICogRm9yIHJldnMuIGFmdGVyIE9haHUsIG9ubHkgc2F2ZQorCQkJICogc2VxIG51bSBmb3IgRENVIDAgKEdsb2JhbCBzZXEgbnVtKQorCQkJICovCisJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgewogCisJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJCXNfc2VxW2ldID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oaSkpOworCisJCQl9IGVsc2UgeworCQkJCXNfc2VxWzBdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oMCkpOworCQkJfQorCisJCQkvKiBUU0YgYWNjZWxlcmF0ZXMgb24gQVI1MjExIGR1cnJpbmcgcmVzZXQKKwkJCSAqIEFzIGEgd29ya2Fyb3VuZCBzYXZlIGl0IGhlcmUgYW5kIHJlc3RvcmUKKwkJCSAqIGl0IGxhdGVyIHNvIHRoYXQgaXQncyBiYWNrIGluIHRpbWUgYWZ0ZXIKKwkJCSAqIHJlc2V0LiBUaGlzIHdheSBpdCdsbCBnZXQgcmUtc3luY2VkIG9uIHRoZQorCQkJICogbmV4dCBiZWFjb24gd2l0aG91dCBicmVha2luZyBhZC1ob2MuCisJCQkgKgorCQkJICogT24gQVI1MjEyIFRTRiBpcyBhbG1vc3QgcHJlc2VydmVkIGFjcm9zcyBhCisJCQkgKiByZXNldCBzbyBpdCBzdGF5cyBiYWNrIGluIHRpbWUgYW55d2F5IGFuZAorCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBzYXZlL3Jlc3RvcmUgaXQuCisJCQkgKgorCQkJICogWFhYOiBTaW5jZSB0aGlzIGJyZWFrcyBwb3dlciBzYXZpbmcgd2UgaGF2ZQorCQkJICogdG8gZGlzYWJsZSBwb3dlciBzYXZpbmcgdW50aWwgd2UgcmVjZWl2ZSB0aGUKKwkJCSAqIG5leHQgYmVhY29uLCBzbyB3ZSBjYW4gcmVzeW5jIGJlYWNvbiB0aW1lcnMgKi8KKwkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJCXRzZl91cCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9VMzIpOworCQkJCXRzZl9sbyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9MMzIpOworCQkJfQorCQl9CisKKwkJLyogU2F2ZSBkZWZhdWx0IGFudGVubmEgKi8KKwkJc19hbnQgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOworCisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQkJLyogUmVzdG9yZSBub3JtYWwgMzIvNDBNSHogY2xvY2sgb3BlcmF0aW9uCisJCQkgKiB0byBhdm9pZCByZWdpc3RlciBhY2Nlc3MgZGVsYXkgb24gY2VydGFpbgorCQkJICogUEhZIHJlZ2lzdGVycyAqLworCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCBmYWxzZSk7CisKKwkJCS8qIFNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSByZiBidWZmZXIKKwkJCSAqIGNoZWNrIGlmIHdlIGhhdmUgYW55IHBlbmRpbmcgZ2Fpbl9GCisJCQkgKiBvcHRpbWl6YXRpb24gc2V0dGluZ3MgKi8KKwkJCWlmIChjaGFuZ2VfY2hhbm5lbCAmJiBhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKKwkJCQlhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpOworCQl9CiAJfQogCisJLypHUElPcyovCisJc19sZWRbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYKKwkJCQkJQVI1S19QQ0lDRkdfTEVEU1RBVEU7CisJc19sZWRbMV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPQ1IpOworCXNfbGVkWzJdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0RPKTsKKworCS8qIEFSNUtfU1RBX0lEMSBmbGFncywgb25seSBwcmVzZXJ2ZSBhbnRlbm5hCisJICogc2V0dGluZ3MgYW5kIGFjay9jdHMgcmF0ZSBtb2RlICovCisJc3RhaWQxX2ZsYWdzID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSkgJgorCQkJKEFSNUtfU1RBX0lEMV9ERUZBVUxUX0FOVEVOTkEgfAorCQkJQVI1S19TVEFfSUQxX0RFU0NfQU5URU5OQSB8CisJCQlBUjVLX1NUQV9JRDFfUlRTX0RFRl9BTlRFTk5BIHwKKwkJCUFSNUtfU1RBX0lEMV9BQ0tDVFNfNk1CIHwKKwkJCUFSNUtfU1RBX0lEMV9CQVNFX1JBVEVfMTFCIHwKKwkJCUFSNUtfU1RBX0lEMV9TRUxGR0VOX0RFRl9BTlQpOworCisJLyogV2FrZXVwIHRoZSBkZXZpY2UgKi8KKwlyZXQgPSBhdGg1a19od19uaWNfd2FrZXVwKGFoLCBjaGFubmVsLT5od192YWx1ZSwgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgb3BlcmF0aW5nIG1vZGUKKwkgKi8KKwlhaC0+YWhfb3BfbW9kZSA9IG9wX21vZGU7CisKKwkvKiBQSFkgYWNjZXNzIGVuYWJsZSAqLworCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTIxMSkKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TSElGVF81R0haLCBBUjVLX1BIWSgwKSk7CisJZWxzZQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFogfCAweDQwLAorCQkJCQkJCUFSNUtfUEhZKDApKTsKKworCS8qIFdyaXRlIGluaXRpYWwgc2V0dGluZ3MgKi8KIAlyZXQgPSBhdGg1a19od193cml0ZV9pbml0dmFscyhhaCwgbW9kZSwgY2hhbmdlX2NoYW5uZWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01MjYsNjkgKzk3OSwyOSBAQAogCSAqIDUyMTEvNTIxMiBTcGVjaWZpYwogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCiAJCS8qCiAJCSAqIFdyaXRlIGluaXRpYWwgUkYgZ2FpbiBzZXR0aW5ncwogCQkgKiBUaGlzIHNob3VsZCB3b3JrIGZvciBib3RoIDUxMTEvNTExMgogCQkgKi8KLQkJcmV0ID0gYXRoNWtfaHdfcmZnYWluKGFoLCBmcmVxKTsKKwkJcmV0ID0gYXRoNWtfaHdfcmZnYWluX2luaXQoYWgsIGZyZXEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAogCQltZGVsYXkoMSk7CiAKIAkJLyoKLQkJICogV3JpdGUgc29tZSBtb3JlIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZm9yIHJldmlzZWQgY2hpcHMKKwkJICogVHdlYWsgaW5pdHZhbCBzZXR0aW5ncyBmb3IgcmV2aXNlZAorCQkgKiBjaGlwc2V0cyBhbmQgYWRkIHNvbWUgbW9yZSBjb25maWcKKwkJICogYml0cwogCQkgKi8KLQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCi0JCSAgICBhaC0+YWhfcGh5X3JldmlzaW9uID4gMHg0MSkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDJhMDAyLCAweDk4MmMpOwotCi0JCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQotCQkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVIyNDEzKQotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDBmODBkODAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTQyNCkKLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMzgwMTQwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJCWVsc2UgaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjI0MjUpCi0JCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGZjMGVjMCwKLQkJCQkJCQkJMHg5OTRjKTsKLQkJCQllbHNlIC8qIDI0MjUgKi8KLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwZmMwZmMwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJZWxzZQotCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHg5OTRjKTsKLQotCQkJLyogR290IHRoaXMgZnJvbSBsZWdhY3ktaGFsICovCi0JCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIDB4YTIyOCwgMHgyMDApOwotCi0JCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgMHhhMjI4LCAweDgwMCwgMHhmZmZlMDNmZik7Ci0KLQkJCS8qIEp1c3Qgd3JpdGUgMHg5YjUgPyAqLwotCQkJLyogYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwOWI1LCAweGEyMjgpOyAqLwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBmLCBBUjVLX1NFUV9NQVNLKTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHhhMjU0KTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwZSwgQVI1S19QSFlfU0NBTCk7Ci0JCX0KLQotCQkvKiBGaXggZm9yIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBSRjUxMTIgUkYgY2hpcHNldCAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID49IEFSNUtfUkY1MTEyICYmCi0JCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPAotCQkJCUFSNUtfU1JFVl9SQURfNTExMkEpIHsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQ0NLVFhDVExfV09STEQsCi0JCQkJCUFSNUtfUEhZX0NDS1RYQ1RMKTsKLQkJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfNUdIWikKLQkJCQlkYXRhID0gMHhmZmI4MTAyMDsKLQkJCWVsc2UKLQkJCQlkYXRhID0gMHhmZmI4MGQyMDsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfRlJBTUVfQ1RMKTsKLQkJCWRhdGEgPSAwOwotCQl9CisJCWF0aDVrX2h3X3R3ZWFrX2luaXR2YWxfc2V0dGluZ3MoYWgsIGNoYW5uZWwpOwogCiAJCS8qCiAJCSAqIFNldCBUWCBwb3dlciAoRklYTUUpCiAJCSAqLwotCQlyZXQgPSBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBBUjVLX1RVTkVfREVGQVVMVF9UWFBPV0VSKTsKKwkJcmV0ID0gYXRoNWtfaHdfdHhwb3dlcihhaCwgY2hhbm5lbCwgZWVfbW9kZSwKKwkJCQkJQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC02MDEsMTUgKzEwMTQsMTIgQEAKIAkJCWF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oYWgsIG1vZGUpOwogCiAJCS8qCi0JCSAqIFdyaXRlIFJGIHJlZ2lzdGVycworCQkgKiBXcml0ZSBSRiBidWZmZXIKIAkJICovCi0JCXJldCA9IGF0aDVrX2h3X3JmcmVncyhhaCwgY2hhbm5lbCwgbW9kZSk7CisJCXJldCA9IGF0aDVrX2h3X3JmcmVnc19pbml0KGFoLCBjaGFubmVsLCBtb2RlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICogQ29uZmlndXJlIGFkZGl0aW9uYWwgcmVnaXN0ZXJzCi0JCSAqLwogCiAJCS8qIFdyaXRlIE9GRE0gdGltaW5ncyBvbiA1MjEyKi8KIAkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCkBAIC02MzEsMTcgKzEwNDEsNiBAQAogCQl9CiAKIAkJLyoKLQkJICogU2V0IGNoYW5uZWwgYW5kIGNhbGlicmF0ZSB0aGUgUEhZCi0JCSAqLwotCQlyZXQgPSBhdGg1a19od19jaGFubmVsKGFoLCBjaGFubmVsKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJLyogU2V0IGFudGVubmEgbW9kZSAqLwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfQU5UX0NUTCwKLQkJCWFoLT5haF9hbnRlbm5hW2VlX21vZGVdWzBdLCAweGZmZmZmYzA2KTsKLQotCQkvKgogCQkgKiBJbiBjYXNlIGEgZml4ZWQgYW50ZW5uYSB3YXMgc2V0IGFzIGRlZmF1bHQKIAkJICogd3JpdGUgdGhlIHNhbWUgc2V0dGluZ3Mgb24gYm90aCBBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFCiAJCSAqIHJlZ2lzdGVycy4KQEAgLTY1Niw1NCArMTA1NSwxNiBAQAogCQkJYW50WzFdID0gQVI1S19BTlRfRklYRURfQjsKIAkJfQogCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzBdXSwKLQkJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzFdXSwKLQkJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7Ci0KIAkJLyogQ29tbWl0IHZhbHVlcyBmcm9tIEVFUFJPTSAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKQotCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfRlJBTUVfQ1RMLAotCQkJICAgIEFSNUtfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLCBlZS0+ZWVfdHhfY2xpcCk7Ci0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJQVI1S19QSFlfTkZfU1ZBTChlZS0+ZWVfbm9pc2VfZmxvb3JfdGhyW2VlX21vZGVdKSwKLQkJCUFSNUtfUEhZX05GVEhSRVMpOwotCi0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKLQkJCShlZS0+ZWVfc3dpdGNoX3NldHRsaW5nW2VlX21vZGVdIDw8IDcpICYgMHgzZjgwLAotCQkJMHhmZmZmYzA3Zik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAotCQkJKGVlLT5lZV9hdG5fdHhfcnhbZWVfbW9kZV0gPDwgMTIpICYgMHgzZjAwMCwKLQkJCTB4ZmZmYzBmZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAotCQkJKGVlLT5lZV9hZGNfZGVzaXJlZF9zaXplW2VlX21vZGVdICYgMHgwMGZmKSB8Ci0JCQkoKGVlLT5lZV9wZ2FfZGVzaXJlZF9zaXplW2VlX21vZGVdIDw8IDgpICYgMHhmZjAwKSwKLQkJCTB4ZmZmZjAwMDApOwotCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKLQkJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDI0KSB8Ci0JCQkoZWUtPmVlX3R4X2VuZDJ4cGFfZGlzYWJsZVtlZV9tb2RlXSA8PCAxNikgfAotCQkJKGVlLT5lZV90eF9mcm0yeHBhX2VuYWJsZVtlZV9tb2RlXSA8PCA4KSB8Ci0JCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdKSwgQVI1S19QSFlfUkZfQ1RMNCk7Ci0KLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX1JGX0NUTDMsCi0JCQllZS0+ZWVfdHhfZW5kMnhsbmFfZW5hYmxlW2VlX21vZGVdIDw8IDgsIDB4ZmZmZjAwZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfTkYsCi0JCQkoZWUtPmVlX3Rocl82MltlZV9tb2RlXSA8PCAxMikgJiAweDdmMDAwLCAweGZmZjgwZmZmKTsKLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsIDQsIDB4ZmZmZmZmMDEpOwotCi0JCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9JUSwKLQkJICAgIEFSNUtfUEhZX0lRX0NPUlJfRU5BQkxFIHwKLQkJICAgIChlZS0+ZWVfaV9jYWxbZWVfbW9kZV0gPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSB8Ci0JCSAgICBlZS0+ZWVfcV9jYWxbZWVfbW9kZV0pOwotCi0JCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMSkKLQkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJCQlBUjVLX1BIWV9HQUlOXzJHSFpfTUFSR0lOX1RYUlgsCi0JCQkJZWUtPmVlX21hcmdpbl90eF9yeFtlZV9tb2RlXSk7CisJCWF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MoYWgsIGNoYW5uZWwsIGFudCwgZWVfbW9kZSk7CiAKIAl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgNTIxMCB3ZSBkbyBhbGwgaW5pdGlhbGl6YXRpb24gdXNpbmcKKwkJICogaW5pdHZhbHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5CisJCSAqIGFueSBzZXR0aW5ncyAoNTIxMCBhbHNvIG9ubHkgc3VwcG9ydHMKKwkJICogYS9hdHVyYm8gbW9kZXMpCisJCSAqLwogCQltZGVsYXkoMSk7CiAJCS8qIERpc2FibGUgcGh5IGFuZCB3YWl0ICovCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0RJU0FCTEUsIEFSNUtfUEhZX0FDVCk7CkBAIC03MTMsMTAwICsxMDc0LDE1NCBAQAogCS8qCiAJICogUmVzdG9yZSBzYXZlZCB2YWx1ZXMKIAkgKi8KKwogCS8qRENVL0FudGVubmEgc2VsZWN0aW9uIG5vdCBhdmFpbGFibGUgb24gNTIxMCovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXEsIEFSNUtfUVVFVUVfREZTX1NFUU5VTSgwKSk7CisKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CisJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfc2VxW2ldLAorCQkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKGkpKTsKKwkJCX0gZWxzZSB7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcVswXSwKKwkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKDApKTsKKwkJCX0KKworCisJCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl91cCwgQVI1S19UU0ZfVTMyKTsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl9sbywgQVI1S19UU0ZfTDMyKTsKKwkJCX0KKwkJfQorCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19hbnQsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKIAl9CisKKwkvKiBMZWRzdGF0ZSAqLwogCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywgc19sZWRbMF0pOworCisJLyogR3BpbyBzZXR0aW5ncyAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19sZWRbMV0sIEFSNUtfR1BJT0NSKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfbGVkWzJdLCBBUjVLX0dQSU9ETyk7CiAKKwkvKiBSZXN0b3JlIHN0YV9pZCBmbGFncyBhbmQgcHJlc2VydmUgb3VyIG1hYyBhZGRyZXNzKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfTE9XX0lEKGFoLT5haF9zdGFfaWQpLAorCQkJCQkJQVI1S19TVEFfSUQwKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIHN0YWlkMV9mbGFncyB8IEFSNUtfSElHSF9JRChhaC0+YWhfc3RhX2lkKSwKKwkJCQkJCUFSNUtfU1RBX0lEMSk7CisKKwogCS8qCi0JICogTWlzYworCSAqIENvbmZpZ3VyZSBQQ1UKIAkgKi8KKworCS8qIFJlc3RvcmUgYnNzaWQgYW5kIGJzc2lkIG1hc2sgKi8KIAkvKiBYWFg6IGFkZCBhaC0+YWlkIG9uY2UgbWFjODAyMTEgZ2l2ZXMgdGhpcyB0byB1cyAqLwogCWF0aDVrX2h3X3NldF9hc3NvY2lkKGFoLCBhaC0+YWhfYnNzaWQsIDApOwogCisJLyogU2V0IFBDVSBjb25maWcgKi8KIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKLQkvKlBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cworCSAqIFBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHhmZmZmZmZmZiwgQVI1S19QSVNSKTsKLQkJLyogSWYgd2UgbGF0ZXIgYWxsb3cgdHVuaW5nIGZvciB0aGlzLCBzdG9yZSBpbnRvIHNjIHN0cnVjdHVyZSAqLwotCQlkYXRhID0gQVI1S19UVU5FX1JTU0lfVEhSRVMgfAotCQkJQVI1S19UVU5FX0JNSVNTX1RIUkVTIDw8IEFSNUtfUlNTSV9USFJfQk1JU1NfUzsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1JTU0lfVEhSKTsKKworCS8qIFNldCBSU1NJL0JSU1NJIHRocmVzaG9sZHMKKwkgKgorCSAqIE5vdGU6IElmIHdlIGRlY2lkZSB0byBzZXQgdGhpcyB2YWx1ZQorCSAqIGR5bmFtaWNhbHksIGhhdmUgaW4gbWluZCB0aGF0IHdoZW4gQVI1S19SU1NJX1RIUgorCSAqIHJlZ2lzdGVyIGlzIHJlYWQgaXQgbWlnaHQgcmV0dXJuIDB4NDAgaWYgd2UgaGF2ZW4ndAorCSAqIHdyb3RlIGFueXRoaW5nIHRvIGl0IHBsdXMgQk1JU1MgUlNTSSB0aHJlc2hvbGQgaXMgemVyb2VkLgorCSAqIFNvIGRvaW5nIGEgc2F2ZS9yZXN0b3JlIHByb2NlZHVyZSBoZXJlIGlzbid0IHRoZSByaWdodAorCSAqIGNob2ljZS4gSW5zdGVhZCBzdG9yZSBpdCBvbiBhdGg1a19odyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKEFSNUtfVFVORV9SU1NJX1RIUkVTIHwKKwkJCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwKKwkJCQlBUjVLX1JTU0lfVEhSX0JNSVNTX1MpLAorCQkJCUFSNUtfUlNTSV9USFIpOworCisJLyogTUlDIFFvUyBzdXBwb3J0ICovCisJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVIyNDEzKSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgQVI1S19NSUNfUU9TX0NUTCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgQVI1S19NSUNfUU9TX1NFTCk7CiAJfQogCi0JLyoKLQkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KLQkgKgotCSAqIFNldCBtYXhpbXVtIERNQSBzaXplICg1MTIpIGV4Y2VwdCBmb3IgUENJLUUgY2FyZHMgc2luY2UKLQkgKiBpdCBjYXVzZXMgcnggb3ZlcnJ1bnMgYW5kIHR4IGVycm9ycyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlCi0JICogcnggb3ZlcnJ1bnMgYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKLQkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgotCSAqCi0JICogSW4gZHVtcHMgdGhpcyBpcyAxMjggZm9yIGFsbGNoaXBzLgotCSAqCi0JICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKLQkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQotCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQotCSAqLwotCWRtYV9zaXplID0gKHBkZXYtPmlzX3BjaWUpID8gQVI1S19ETUFTSVpFXzEyOEIgOiBBUjVLX0RNQVNJWkVfNTEyQjsKLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UWENGRywKLQkJCUFSNUtfVFhDRkdfU0RNQU1SLCBkbWFfc2l6ZSk7Ci0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUlhDRkcsCi0JCQlBUjVLX1JYQ0ZHX1NETUFNVywgZG1hX3NpemUpOworCS8qIFFvUyBOT0FDSyBQb2xpY3kgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oMiwgQVI1S19RT1NfTk9BQ0tfMkJJVF9WQUxVRVMpIHwKKwkJCUFSNUtfUkVHX1NNKDUsIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVQpICB8CisJCQlBUjVLX1JFR19TTSgwLCBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVCksCisJCQlBUjVLX1FPU19OT0FDSyk7CiAJfQogCisKKwkvKgorCSAqIENvbmZpZ3VyZSBQSFkKKwkgKi8KKworCS8qIFNldCBjaGFubmVsIG9uIFBIWSAqLworCXJldCA9IGF0aDVrX2h3X2NoYW5uZWwoYWgsIGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKgogCSAqIEVuYWJsZSB0aGUgUEhZIGFuZCB3YWl0IHVudGlsIGNvbXBsZXRpb24KKwkgKiBUaGlzIGluY2x1ZGVzIEJhc2VCYW5kIGFuZCBTeW50aGVzaXplcgorCSAqIGFjdGl2YXRpb24uCiAJICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9BQ1RfRU5BQkxFLCBBUjVLX1BIWV9BQ1QpOwogCiAJLyoKIAkgKiBPbiA1MjExKyByZWFkIGFjdGl2YXRpb24gLT4gcnggZGVsYXkKIAkgKiBhbmQgdXNlIGl0LgorCSAqCisJICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUgc3VwcG9ydAogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCisJCXUzMiBkZWxheTsKKwkJZGVsYXkgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKIAkJCUFSNUtfUEhZX1JYX0RFTEFZX007Ci0JCWRhdGEgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkYXRhIDw8IDIpIC8gMjIpIDogKGRhdGEgLyAxMCk7CisJCWRlbGF5ID0gKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spID8KKwkJCSgoZGVsYXkgPDwgMikgLyAyMikgOiAoZGVsYXkgLyAxMCk7CiAKLQkJdWRlbGF5KDEwMCArICgyICogZGF0YSkpOwotCQlkYXRhID0gMDsKKwkJdWRlbGF5KDEwMCArICgyICogZGVsYXkpKTsKIAl9IGVsc2UgewogCQltZGVsYXkoMSk7CiAJfQogCiAJLyoKLQkgKiBQZXJmb3JtIEFEQyB0ZXN0ICg/KQorCSAqIFBlcmZvcm0gQURDIHRlc3QgdG8gc2VlIGlmIGJhc2ViYW5kIGlzIHJlYWR5CisJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCiAJICovCi0JZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKKwlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RTVDFfVFhIT0xELCBBUjVLX1BIWV9UU1QxKTsKIAlmb3IgKGkgPSAwOyBpIDw9IDIwOyBpKyspIHsKIAkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQogCQkJYnJlYWs7CiAJCXVkZWxheSgyMDApOwogCX0KLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUEhZX1RTVDEpOwotCWRhdGEgPSAwOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5X3RzdDEsIEFSNUtfUEhZX1RTVDEpOwogCiAJLyoKLQkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjYWxpYnJhdGlvbgorCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgY2FsaWJyYXRpb24KIAkgKgogCSAqIER1cmluZyBBR0MgY2FsaWJyYXRpb24gUlggcGF0aCBpcyByZS1yb3V0ZWQgdG8KLQkgKiBhIHNpZ25hbCBkZXRlY3RvciBzbyB3ZSBkb24ndCByZWNlaXZlIGFueXRoaW5nLgorCSAqIGEgcG93ZXIgZGV0ZWN0b3Igc28gd2UgZG9uJ3QgcmVjZWl2ZSBhbnl0aGluZy4KIAkgKgogCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2FsaWJyYXRlIHNvbWUgc3RhdGljIG9mZnNldHMKIAkgKiB1c2VkIHRvZ2V0aGVyIHdpdGggb24tdGhlIGZseSBJL1EgY2FsaWJyYXRpb24gKHRoZQogCSAqIG9uZSBwZXJmb3JtZWQgdmlhIGF0aDVrX2h3X3BoeV9jYWxpYnJhdGUpLCB0aGF0IGRvZXNuJ3QKIAkgKiBpbnRlcnJ1cHQgcnggcGF0aC4KIAkgKgorCSAqIFdoaWxlIHJ4IHBhdGggaXMgcmUtcm91dGVkIHRvIHRoZSBwb3dlciBkZXRlY3RvciB3ZSBhbHNvCisJICogc3RhcnQgYSBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiwgdG8gbWVhc3VyZSB0aGUKKwkgKiBjYXJkJ3Mgbm9pc2UgZmxvb3IgKHRoZSBub2lzZSB3ZSBtZWFzdXJlIHdoZW4gd2UgYXJlIG5vdAorCSAqIHRyYW5zbWl0aW5nIG9yIHJlY2VpdmluZyBhbnl0aGluZykuCisJICoKIAkgKiBJZiB3ZSBhcmUgaW4gYSBub2lzeSBlbnZpcm9ubWVudCBBR0MgY2FsaWJyYXRpb24gbWF5IHRpbWUKLQkgKiBvdXQuCisJICogb3V0IGFuZC9vciBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBtaWdodCB0aW1lb3V0LgogCSAqLwogCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9BR0NDVEwsCiAJCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCk7CkBAIC04MjgsMzAgKzEyNDMsMzcgQEAKIAkJCUFSNUtfUEhZX0FHQ0NUTF9DQUwsIDAsIGZhbHNlKSkgewogCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZ2FpbiBjYWxpYnJhdGlvbiB0aW1lb3V0ICgldU1IeilcbiIsCiAJCQljaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JCXJldHVybiAtRUFHQUlOOwogCX0KIAogCS8qCi0JICogU3RhcnQgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24KLQkgKgogCSAqIElmIHdlIHJ1biBORiBjYWxpYnJhdGlvbiBiZWZvcmUgQUdDLCBpdCBhbHdheXMgdGltZXMgb3V0LgogCSAqIEJpbmFyeSBIQUwgc3RhcnRzIE5GIGFuZCBBR0MgY2FsaWJyYXRpb24gYXQgdGhlIHNhbWUgdGltZQotCSAqIGFuZCBvbmx5IHdhaXRzIGZvciBBR0MgdG8gZmluaXNoLiBJIGJlbGlldmUgdGhhdCdzIHdyb25nIGJlY2F1c2UKLQkgKiBkdXJpbmcgTkYgY2FsaWJyYXRpb24sIHJ4IHBhdGggaXMgYWxzbyByb3V0ZWQgdG8gYSBkZXRlY3Rvciwgc28gaWYKLQkgKiBpdCBkb2Vzbid0IGZpbmlzaCB3ZSB3b24ndCBoYXZlIFJYLgotCSAqCi0JICogWFhYOiBGaW5kIGFuIGludGVydmFsIHRoYXQncyBPSyBmb3IgYWxsIGNhcmRzLi4uCisJICogYW5kIG9ubHkgd2FpdHMgZm9yIEFHQyB0byBmaW5pc2guIEFsc28gaWYgQUdDIG9yIE5GIGNhbC4KKwkgKiB0aW1lcyBvdXQsIHJlc2V0IGRvZXNuJ3QgZmFpbCBvbiBiaW5hcnkgSEFMLiBJIGJlbGlldmUKKwkgKiB0aGF0J3Mgd3JvbmcgYmVjYXVzZSBzaW5jZSByeCBwYXRoIGlzIHJvdXRlZCB0byBhIGRldGVjdG9yLAorCSAqIGlmIGNhbC4gZG9lc24ndCBmaW5pc2ggd2Ugd29uJ3QgaGF2ZSBSWC4gU2FtJ3MgSEFMIGZvciBBUjUyMTAvNTIxMQorCSAqIGVuYWJsZXMgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24gYWZ0ZXIgb2Zmc2V0IGNhbGlicmF0aW9uIGFuZCBpZiBub2lzZQorCSAqIGZsb29yIGNhbGlicmF0aW9uIGZhaWxzLCByZXNldCBmYWlscy4gSSBiZWxpZXZlIHRoYXQncworCSAqIGEgYmV0dGVyIGFwcHJvYWNoLCB3ZSBqdXN0IG5lZWQgdG8gZmluZCBhIHBvbGxpbmcgaW50ZXJ2YWwKKwkgKiB0aGF0IHN1aXRzIGJlc3QsIGV2ZW4gaWYgcmVzZXQgY29udGludWVzIHdlIG5lZWQgdG8gbWFrZQorCSAqIHN1cmUgdGhhdCByeCBwYXRoIGlzIHJlYWR5LgogCSAqLwogCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKKworCS8qCisJICogQ29uZmlndXJlIFFDVXMvRENVcworCSAqLworCisJLyogVE9ETzogSFcgQ29tcHJlc3Npb24gc3VwcG9ydCBmb3IgZGF0YSBxdWV1ZXMgKi8KKwkvKiBUT0RPOiBCdXJzdCBwcmVmZXRjaCBmb3IgZGF0YSBxdWV1ZXMgKi8KKwogCS8qCiAJICogUmVzZXQgcXVldWVzIGFuZCBzdGFydCBiZWFjb24gdGltZXJzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc2V0IHJvdXRpbmUKKwkgKiBUaGlzIGFsc28gc2V0cyBRQ1UgbWFzayBvbiBlYWNoIERDVSBmb3IgMToxIHFjdSB0byBkY3UgbWFwcGluZworCSAqIE5vdGU6IElmIHdlIHdhbnQgd2UgY2FuIGFzc2lnbiBtdWx0aXBsZSBxY3VzIG9uIG9uZSBkY3UuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bTsgaSsrKSB7Ci0JCS8qTm8gUUNVIG9uIDUyMTAqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCi0JCQlBUjVLX1JFR19XUklURV9RKGFoLCBBUjVLX1FVRVVFX1FDVU1BU0soaSksIGkpOwotCiAJCXJldCA9IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJQVRINUtfRVJSKGFoLT5haF9zYywKQEAgLTg2MCwxNCArMTI4Miw0MCBAQAogCQl9CiAJfQogCisKKwkvKgorCSAqIENvbmZpZ3VyZSBETUEvSW50ZXJydXB0cworCSAqLworCisJLyoKKwkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KKwkgKgorCSAqIFNldCBzdGFuZGFyZCBETUEgc2l6ZSAoMTI4KS4gTm90ZSB0aGF0CisJICogYSBETUEgc2l6ZSBvZiA1MTIgY2F1c2VzIHJ4IG92ZXJydW5zIGFuZCB0eCBlcnJvcnMKKwkgKiBvbiBwY2ktZSBjYXJkcyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlIHJ4IG92ZXJydW5zCisJICogYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKKwkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgorCSAqCisJICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKKwkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQorCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJQVI1S19UWENGR19TRE1BTVIsIEFSNUtfRE1BU0laRV8xMjhCKTsKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19SWENGRywKKwkJCUFSNUtfUlhDRkdfU0RNQU1XLCBBUjVLX0RNQVNJWkVfMTI4Qik7CisJfQorCiAJLyogUHJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9uIDUyMTEvNTIxMiovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQogCQlhdGg1a19od19zZXRfaW1yKGFoLCBhaC0+YWhfaW1yKTsKIAogCS8qCi0JICogU2V0IFJGIGtpbGwgZmxhZ3MgaWYgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgKHJlYWQgZnJvbSB0aGUgRUVQUk9NKQotCSAqIERpc2FibGUgZ3Bpb19pbnRyIGZvciBub3cgc2luY2UgaXQgcmVzdWx0cyBzeXN0ZW0gaGFuZy4KLQkgKiBUT0RPOiBIYW5kbGUgdGhpcyBpbiBhdGg1a19pbnRyCisJICogU2V0dXAgUkZLaWxsIGludGVycnVwdCBpZiByZmtpbGwgZmxhZyBpcyBzZXQgb24gZWVwcm9tLgorCSAqIFRPRE86IFVzZSBncGlvIHBpbiBhbmQgcG9sYXJpdHkgaW5mb3MgZnJvbSBlZXByb20KKwkgKiBUT0RPOiBIYW5kbGUgdGhpcyBpbiBhdGg1a19pbnRyIGJlY2F1c2UgaXQnbGwgcmVzdWx0CisJICogCSBhIG5hc3R5IGludGVycnVwdCBzdG9ybS4KIAkgKi8KICNpZiAwCiAJaWYgKEFSNUtfRUVQUk9NX0hEUl9SRktJTEwoYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX2hlYWRlcikpIHsKQEAgLTg4MCwzMyArMTMyOCwxMiBAQAogCX0KICNlbmRpZgogCi0JLyoKLQkgKiBTZXQgdGhlIDMyTUh6IHJlZmVyZW5jZSBjbG9jayBvbiA1MjEyIHBoeSBjbG9jayBzbGVlcCByZWdpc3RlcgotCSAqCi0JICogVE9ETzogRmluZCBvdXQgaG93IHRvIHN3aXRjaCB0byBleHRlcm5hbCAzMktoeiBjbG9jayB0byBzYXZlIHBvd2VyCi0JICovCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NSXzMyTUhaLCBBUjVLX1BIWV9TQ1IpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDQUxfMzJNSFosIEFSNUtfUEhZX1NDQUwpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3BoeV9zcGVuZGluZywgQVI1S19QSFlfU1BFTkRJTkcpOwotCi0JCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19VU0VDXzUyMTEpICYgMHhmZmZmYzA3ZiA7Ci0JCWRhdGEgfD0gKGFoLT5haF9waHlfc3BlbmRpbmcgPT0gQVI1S19QSFlfU1BFTkRJTkdfMTgpID8KLQkJCQkJCTB4MDAwMDBmODAgOiAweDAwMDAxMzgwIDsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1VTRUNfNTIxMSk7Ci0JCWRhdGEgPSAwOwotCX0KLQotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMTAwYWEsIDB4ODExOCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgMHg4MTFjKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDUyLCAweDgxMDgpOwotCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjI0MTMpCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMDQsIDB4ODEyMCk7Ci0JfQorCS8qIEVuYWJsZSAzMktIeiBjbG9jayBmdW5jdGlvbiBmb3IgQVI1MjEyKyBjaGlwcworCSAqIFNldCBjbG9ja3MgdG8gMzJLSHogb3BlcmF0aW9uIGFuZCB1c2UgYW4KKwkgKiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIHdoZW4gc2xlZXBpbmcgaWYgb25lCisJICogZXhpc3RzICovCisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQorCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCB0cnVlKTsKIAogCS8qCiAJICogRGlzYWJsZSBiZWFjb25zIGFuZCByZXNldCB0aGUgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmJ1ZmZlci5oCkBAIC0wLDAgKzEsMTE4MSBAQAorLyoKKyAqIFJGIEJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqLworCisKKy8qCisgKiBUaGVyZSBhcmUgc29tZSBzcGVjaWFsIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAorICogdGhhdCBjb250cm9sIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCisgKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KKyAqCisgKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0CisgKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGNoaXAsIHVzaW5nIGEgc3BlY2lhbCByZWdpc3RlciwKKyAqIHRoYXQgaG9sZHMgYWxsIHRoZSBzZXR0aW5ncyB3ZSBuZWVkLiBBZnRlciB3ZSAndmUgc2VudCB0aGUKKyAqIGRhdGEgcGFja2V0LCB3ZSB3cml0ZSBvbiBhbm90aGVyIHNwZWNpYWwgcmVnaXN0ZXIgdG8gbm90aWZ5IGh3CisgKiB0byBhcHBseSB0aGUgc2V0dGluZ3MuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBjYW4gYmUgZHluYW1pY2FseSBwcm9ncmFtbWVkIGR1cmluZyBvcGVyYXRpb24gYW5kIHRoZSBzZXR0aW5ncworICogYXJlIGFwcGxpZWQgZmFzdGVyIG9uIHRoZSBody4KKyAqCisgKiBXZSBjYWxsIGVhY2ggZGF0YSBwYWNrZXQgYW4gIlJGIEJhbmsiIGFuZCBhbGwgdGhlIGRhdGEgd2Ugd3JpdGUKKyAqIChhbGwgUkYgQmFua3MpICJSRiBCdWZmZXIiLiBUaGlzIGZpbGUgaG9sZHMgaW5pdGlhbCBSRiBCdWZmZXIKKyAqIGRhdGEgZm9yIHRoZSBkaWZmZXJlbnQgUkYgY2hpcHMsIGFuZCB2YXJpb3VzIGluZm8gdG8gbWF0Y2ggUkYKKyAqIEJ1ZmZlciBvZmZzZXRzIHdpdGggc3BlY2lmaWMgUkYgcmVnaXN0ZXJzIHNvIHRoYXQgd2UgY2FuIGFjY2VzcworICogdGhlbS4gV2UgdHdlYWsgdGhlc2Ugc2V0dGluZ3Mgb24gcmZyZWdzX2luaXQgZnVuY3Rpb24uCisgKgorICogQWxzbyBjaGVjayBvdXQgcmVnLmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgorICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6CisgKgorICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCisgKi8KKworCisvKgorICogU3RydWN0IHRvIGhvbGQgZGVmYXVsdCBtb2RlIHNwZWNpZmljIFJGCisgKiByZWdpc3RlciB2YWx1ZXMgKFJGIEJhbmtzKQorICovCitzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHsKKwl1OAlyZmJfYmFuazsJCS8qIFJGIEJhbmsgbnVtYmVyICovCisJdTE2CXJmYl9jdHJsX3JlZ2lzdGVyOwkvKiBSRiBCdWZmZXIgY29udHJvbCByZWdpc3RlciAqLworCXUzMglyZmJfbW9kZV9kYXRhWzVdOwkvKiBSRiBCdWZmZXIgZGF0YSBmb3IgZWFjaCBtb2RlICovCit9OworCisvKgorICogU3RydWN0IHRvIGhvbGQgUkYgQnVmZmVyIGZpZWxkCisgKiBpbmZvcyB1c2VkIHRvIGFjY2VzcyBjZXJ0YWluIFJGCisgKiBhbmFsb2cgcmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBhdGg1a19yZmJfZmllbGQgeworCXU4CWxlbjsJLyogRmllbGQgbGVuZ3RoICovCisJdTE2CXBvczsJLyogT2Zmc2V0IG9uIHRoZSByYXcgcGFja2V0ICovCisJdTgJY29sOwkvKiBDb2x1bW4gLXVzZWQgZm9yIHNoaWZ0aW5nICovCit9OworCisvKgorICogUkYgYW5hbG9nIHJlZ2lzdGVyIGRlZmluaXRpb24KKyAqLworc3RydWN0IGF0aDVrX3JmX3JlZyB7CisJdTgJCQliYW5rOwkvKiBSRiBCdWZmZXIgQmFuayBudW1iZXIgKi8KKwl1OAkJCWluZGV4OwkvKiBSZWdpc3RlcidzIGluZGV4IG9uIHJmX3JlZ3NfaWR4ICovCisJc3RydWN0IGF0aDVrX3JmYl9maWVsZAlmaWVsZDsJLyogUkYgQnVmZmVyIGZpZWxkIGZvciB0aGlzIHJlZ2lzdGVyICovCit9OworCisvKiBNYXAgUkYgcmVnaXN0ZXJzIHRvIGluZGV4ZXMKKyAqIFdlIGRvIHRoaXMgdG8gaGFuZGxlIGNvbW1vbiBiaXRzIGFuZCBtYWtlIG91cgorICogbGlmZSBlYXNpZXIgYnkgdXNpbmcgYW4gaW5kZXggZm9yIGVhY2ggcmVnaXN0ZXIKKyAqIGluc3RlYWQgb2YgYSBmdWxsIHJmYl9maWVsZCAqLworZW51bSBhdGg1a19yZl9yZWdzX2lkeCB7CisJLyogQkFOSyA2ICovCisJQVI1S19SRl9PQl8yR0haID0gMCwKKwlBUjVLX1JGX09CXzVHSFosCisJQVI1S19SRl9EQl8yR0haLAorCUFSNUtfUkZfREJfNUdIWiwKKwlBUjVLX1JGX0ZJWEVEX0JJQVNfQSwKKwlBUjVLX1JGX0ZJWEVEX0JJQVNfQiwKKwlBUjVLX1JGX1BXRF9YUEQsCisJQVI1S19SRl9YUERfU0VMLAorCUFSNUtfUkZfWFBEX0dBSU4sCisJQVI1S19SRl9QRF9HQUlOX0xPLAorCUFSNUtfUkZfUERfR0FJTl9ISSwKKwlBUjVLX1JGX0hJR0hfVkNfQ1AsCisJQVI1S19SRl9NSURfVkNfQ1AsCisJQVI1S19SRl9MT1dfVkNfQ1AsCisJQVI1S19SRl9QVVNIX1VQLAorCUFSNUtfUkZfUEFEMkdORCwKKwlBUjVLX1JGX1hCMl9MVkwsCisJQVI1S19SRl9YQjVfTFZMLAorCUFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsCisJQVI1S19SRl9QV0RfODQsCisJQVI1S19SRl9QV0RfOTAsCisJQVI1S19SRl9QV0RfMTMwLAorCUFSNUtfUkZfUFdEXzEzMSwKKwlBUjVLX1JGX1BXRF8xMzIsCisJQVI1S19SRl9QV0RfMTM2LAorCUFSNUtfUkZfUFdEXzEzNywKKwlBUjVLX1JGX1BXRF8xMzgsCisJQVI1S19SRl9QV0RfMTY2LAorCUFSNUtfUkZfUFdEXzE2NywKKwlBUjVLX1JGX0RFUkJZX0NIQU5fU0VMX01PREUsCisJLyogQkFOSyA3ICovCisJQVI1S19SRl9HQUlOX0ksCisJQVI1S19SRl9QTE9fU0VMLAorCUFSNUtfUkZfUkZHQUlOX1NFTCwKKwlBUjVLX1JGX1JGR0FJTl9TVEVQLAorCUFSNUtfUkZfV0FJVF9TLAorCUFSNUtfUkZfV0FJVF9JLAorCUFSNUtfUkZfTUFYX1RJTUUsCisJQVI1S19SRl9NSVhWR0FfT1ZSLAorCUFSNUtfUkZfTUlYR0FJTl9PVlIsCisJQVI1S19SRl9NSVhHQUlOX1NURVAsCisJQVI1S19SRl9QRF9ERUxBWV9BLAorCUFSNUtfUkZfUERfREVMQVlfQiwKKwlBUjVLX1JGX1BEX0RFTEFZX1hSLAorCUFSNUtfUkZfUERfUEVSSU9EX0EsCisJQVI1S19SRl9QRF9QRVJJT0RfQiwKKwlBUjVLX1JGX1BEX1BFUklPRF9YUiwKK307CisKKworLyoqKioqKioqKioqKioqKioqKipcCisqIFJGNTExMSAoU29tYnJlcm8pICoKK1wqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTExX09CXzJHSFoJCXsgMywgMTE5LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfREJfMkdIWgkJeyAzLCAxMjIsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTExX09CXzVHSFoJCXsgMywgMTA0LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfREJfNUdIWgkJeyAzLCAxMDcsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTExX1BXRF9YUEQJCXsgMSwgOTUsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfWFBEX0dBSU4JCXsgNCwgOTYsICAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTFfUFdEKF9uKQkJeyAxLCAoMTM1IC0gX24pLCAzIH0KKworLyogQkFOSyA3CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMV9HQUlOX0kJCXsgNiwgMjksICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfUExPX1NFTAkJeyAxLCA0LCAgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9SRkdBSU5fU0VMCQl7IDEsIDM2LCAgMCB9CisjZGVmaW5lIEFSNUtfUkY1MTExX1JGR0FJTl9TVEVQCQl7IDYsIDM3LCAgMCB9CisvKiBPbmx5IG9uIEFSNTIxMiBCYXNlQmFuZCBhbmQgdXAgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTFfV0FJVF9TCQl7IDUsIDE5LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX1dBSVRfSQkJeyA1LCAyNCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9NQVhfVElNRQkJeyAyLCA0OSwgIDAgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTFbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjUxMTFfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkY1MTExX0RCXzJHSFp9LAorCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMV9PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJQVI1S19SRjUxMTFfREJfNUdIWn0sCisJezYsIEFSNUtfUkZfUFdEX1hQRCwJCUFSNUtfUkY1MTExX1BXRF9YUER9LAorCXs2LCBBUjVLX1JGX1hQRF9HQUlOLAkJQVI1S19SRjUxMTFfWFBEX0dBSU59LAorCXs2LCBBUjVLX1JGX1BXRF84NCwJCUFSNUtfUkY1MTExX1BXRCg4NCl9LAorCXs2LCBBUjVLX1JGX1BXRF85MCwJCUFSNUtfUkY1MTExX1BXRCg5MCl9LAorCXs3LCBBUjVLX1JGX0dBSU5fSSwJCUFSNUtfUkY1MTExX0dBSU5fSX0sCisJezcsIEFSNUtfUkZfUExPX1NFTCwJCUFSNUtfUkY1MTExX1BMT19TRUx9LAorCXs3LCBBUjVLX1JGX1JGR0FJTl9TRUwsCQlBUjVLX1JGNTExMV9SRkdBSU5fU0VMfSwKKwl7NywgQVI1S19SRl9SRkdBSU5fU1RFUCwJQVI1S19SRjUxMTFfUkZHQUlOX1NURVB9LAorCXs3LCBBUjVLX1JGX1dBSVRfUywJCUFSNUtfUkY1MTExX1dBSVRfU30sCisJezcsIEFSNUtfUkZfV0FJVF9JLAkJQVI1S19SRjUxMTFfV0FJVF9JfSwKKwl7NywgQVI1S19SRl9NQVhfVElNRSwJCUFSNUtfUkY1MTExX01BWF9USU1FfQorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfNTExMVtdID0geworCXsgMCwgMHg5ODljLAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDA0MDBmOSwgMHgwMDA0MDBmOSwgMHgwMDA0MDBmZiwgMHgwMDA0MDBmZCwgMHgwMDA0MDBmZCB9IH0sCisJeyAwLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCisJeyAxLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCB9IH0sCisJeyAzLCAweDk4ZDgsCisJICAgIHsgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDM4MDBjMCwgMHgwMDM4MDA4MCwgMHgwMjM4MDBjMCwgMHgwMDM4MDBjMCwgMHgwMDM4MDBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAwMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNyB9IH0sCisJeyA2LCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSwgMHgwMDAwMDA2MSwgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0YywgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI5YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjUxMTIvUkYyMTEyIChEZXJieSkgKgorXCoqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDcgKENvbW1vbikJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJYX0dBSU5fSQkJeyA2LCAxNCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYVkdBX09WUgkJeyAxLCAzNiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlIJeyAyLCAzNywgIDAgfQorI2RlZmluZSBBUjVLX1JGNTExMlhfTUlYR0FJTl9TVEVQCXsgNCwgMzIsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0EJCXsgNCwgNTgsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0IJCXsgNCwgNjIsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX1hSCXsgNCwgNjYsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9BCXsgNCwgNzAsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9CCXsgNCwgNzQsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUgl7IDQsIDc4LCAgMCB9CisKKy8qIFJGWDExMiAoRGVyYnkgMSkgKi8KKworLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJfT0JfMkdIWgkJeyAzLCAyNjksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9EQl8yR0haCQl7IDMsIDI3MiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJfT0JfNUdIWgkJeyAzLCAyNjEsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9EQl81R0haCQl7IDMsIDI2NCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJfRklYRURfQklBU19BCXsgMSwgMjYwLCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJfRklYRURfQklBU19CCXsgMSwgMjU5LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9YUERfU0VMCQl7IDEsIDI4NCwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX1hQRF9HQUlOCQl7IDIsIDI1MiwgMCB9CisKKy8qIEFjY2VzcyB0byBQV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFSNUtfUkY1MTEyX1BXRChfbikJCXsgMSwgKDMwMiAtIF9uKSwgMyB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMltdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGNTExMl9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTJfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTEyX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQlBUjVLX1JGNTExMl9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0EsCUFSNUtfUkY1MTEyX0ZJWEVEX0JJQVNfQX0sCisJezYsIEFSNUtfUkZfRklYRURfQklBU19CLAlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0J9LAorCXs2LCBBUjVLX1JGX1hQRF9TRUwsCQlBUjVLX1JGNTExMl9YUERfU0VMfSwKKwl7NiwgQVI1S19SRl9YUERfR0FJTiwJCUFSNUtfUkY1MTEyX1hQRF9HQUlOfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMwLAkJQVI1S19SRjUxMTJfUFdEKDEzMCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzEsCQlBUjVLX1JGNTExMl9QV0QoMTMxKX0sCisJezYsIEFSNUtfUkZfUFdEXzEzMiwJCUFSNUtfUkY1MTEyX1BXRCgxMzIpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM2LAkJQVI1S19SRjUxMTJfUFdEKDEzNil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzcsCQlBUjVLX1JGNTExMl9QV0QoMTM3KX0sCisJezYsIEFSNUtfUkZfUFdEXzEzOCwJCUFSNUtfUkY1MTEyX1BXRCgxMzgpfSwKKwl7NywgQVI1S19SRl9HQUlOX0ksCQlBUjVLX1JGNTExMlhfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9NSVhWR0FfT1ZSLAkJQVI1S19SRjUxMTJYX01JWFZHQV9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fT1ZSLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fU1RFUCwJQVI1S19SRjUxMTJYX01JWEdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQSwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9BfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9CLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0J9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX1hSLAlBUjVLX1JGNTExMlhfUERfREVMQVlfWFJ9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9BLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0F9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9CLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0J9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9YUiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTEyW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGIwLCAweDAwMDAwMGIwLCAweDAwMDAwMGE4LCAweDAwMDAwMGE4LCAweDAwMDAwMGE4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNmM0YTQxLCAweDAwNmM0YTQxLCAweDAwNmM0YWYxLCAweDAwNmM0YTYxLCAweDAwNmM0YTYxIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTA4OTJhLCAweDAwNTA4OTJhLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwIH0gfSwKKwl7IDYsIDB4OThkMCwKKwkgICAgeyAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKKwl7IDcsIDB4OThjNCwKKwkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKK307CisKKy8qIFJGWDExMkEgKERlcmJ5IDIpICovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJBX09CXzJHSFoJCXsgMywgMjg3LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX0RCXzJHSFoJCXsgMywgMjkwLCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMkFfT0JfNUdIWgkJeyAzLCAyNzksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfREJfNUdIWgkJeyAzLCAyODIsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0EJeyAxLCAyNzgsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfRklYRURfQklBU19CCXsgMSwgMjc3LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMkFfWFBEX1NFTAkJeyAxLCAzMDIsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfUERHQUlOTE8JCXsgMiwgMjcwLCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX1BER0FJTkhJCQl7IDIsIDI1NywgMCB9CisKKy8qIEFjY2VzcyB0byBQV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFSNUtfUkY1MTEyQV9QV0QoX24pCQl7IDEsICgzMDYgLSBfbiksIDMgfQorCisvKiBWb2x0YWdlIHJlZ3VsYXRvcnMgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJBX0hJR0hfVkNfQ1AJCXsgMiwgOTAsICAyIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX01JRF9WQ19DUAkJeyAyLCA5MiwgIDIgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfTE9XX1ZDX0NQCQl7IDIsIDk0LCAgMiB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QVVNIX1VQCQl7IDEsIDI1NCwgIDIgfQorCisvKiBQb3dlciBjb25zdW1wdGlvbiAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfUEFEMkdORAkJeyAxLCAyODEsIDEgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfWEIyX0xWTAkJeyAyLCAxLAkgIDMgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfWEI1X0xWTAkJeyAyLCAzLAkgIDMgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTJhW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkY1MTEyQV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTJBX0RCXzJHSFp9LAorCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMkFfT0JfNUdIWn0sCisJezYsIEFSNUtfUkZfREJfNUdIWiwJCUFSNUtfUkY1MTEyQV9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0EsCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0F9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQiwJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQn0sCisJezYsIEFSNUtfUkZfWFBEX1NFTCwJCUFSNUtfUkY1MTEyQV9YUERfU0VMfSwKKwl7NiwgQVI1S19SRl9QRF9HQUlOX0xPLAkJQVI1S19SRjUxMTJBX1BER0FJTkxPfSwKKwl7NiwgQVI1S19SRl9QRF9HQUlOX0hJLAkJQVI1S19SRjUxMTJBX1BER0FJTkhJfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMwLAkJQVI1S19SRjUxMTJBX1BXRCgxMzApfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMxLAkJQVI1S19SRjUxMTJBX1BXRCgxMzEpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMyLAkJQVI1S19SRjUxMTJBX1BXRCgxMzIpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM2LAkJQVI1S19SRjUxMTJBX1BXRCgxMzYpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM3LAkJQVI1S19SRjUxMTJBX1BXRCgxMzcpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM4LAkJQVI1S19SRjUxMTJBX1BXRCgxMzgpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTY2LAkJQVI1S19SRjUxMTJBX1BXRCgxNjYpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTY3LAkJQVI1S19SRjUxMTJBX1BXRCgxNjcpfSwKKwl7NiwgQVI1S19SRl9ISUdIX1ZDX0NQLAkJQVI1S19SRjUxMTJBX0hJR0hfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX01JRF9WQ19DUCwJCUFSNUtfUkY1MTEyQV9NSURfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX0xPV19WQ19DUCwJCUFSNUtfUkY1MTEyQV9MT1dfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX1BVU0hfVVAsCQlBUjVLX1JGNTExMkFfUFVTSF9VUH0sCisJezYsIEFSNUtfUkZfUEFEMkdORCwJCUFSNUtfUkY1MTEyQV9QQUQyR05EfSwKKwl7NiwgQVI1S19SRl9YQjJfTFZMLAkJQVI1S19SRjUxMTJBX1hCMl9MVkx9LAorCXs2LCBBUjVLX1JGX1hCNV9MVkwsCQlBUjVLX1JGNTExMkFfWEI1X0xWTH0sCisJezcsIEFSNUtfUkZfR0FJTl9JLAkJQVI1S19SRjUxMTJYX0dBSU5fSX0sCisJezcsIEFSNUtfUkZfTUlYVkdBX09WUiwJCUFSNUtfUkY1MTEyWF9NSVhWR0FfT1ZSfSwKKwl7NywgQVI1S19SRl9NSVhHQUlOX09WUiwJQVI1S19SRjUxMTJYX01JWEdBSU5fT1ZSfSwKKwl7NywgQVI1S19SRl9NSVhHQUlOX1NURVAsCUFSNUtfUkY1MTEyWF9NSVhHQUlOX1NURVB9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX0EsCQlBUjVLX1JGNTExMlhfUERfREVMQVlfQX0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQiwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9CfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9YUiwJQVI1S19SRjUxMTJYX1BEX0RFTEFZX1hSfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfQSwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9BfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfQiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9CfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfWFIsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfWFJ9LAorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfNTExMmFbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTkgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAorCXsgNiwgMHg5OGQ4LAorCSAgICB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKipcCisqIFJGMjQxMyAoR3JpZmZpbikgKgorXCoqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjI0MTNfT0JfMkdIWgkJeyAzLCAxNjgsIDAgfQorI2RlZmluZQlBUjVLX1JGMjQxM19EQl8yR0haCQl7IDMsIDE2NSwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjQxM1tdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjQxM19PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjI0MTNfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MKKyAqIFhYWDogYS9hVHVyYm8gPz8/CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yNDEzW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjgwMDAwLCAweDAwMjgwMDAwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTAwMGMwLCAweDAwNTAwMGMwLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwIH0gfSwKKwl7IDYsIDB4OThkOCwKKwkgICAgeyAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjIzMTUvUkYyMzE2IChDb2JyYSBTb0MpICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjIzMTZfT0JfMkdIWgkJeyAzLCAxNzgsIDAgfQorI2RlZmluZQlBUjVLX1JGMjMxNl9EQl8yR0haCQl7IDMsIDE3NSwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjMxNltdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjMxNl9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjIzMTZfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yMzE2W10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDgwLCAweDAwYTAwMDgwLCAweDAwYTAwMDgwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDBkLCAweDAwNDAwMDBkLCAweDAwNDAwMDBkIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4IH0gfSwKKwl7IDYsIDB4OThjMCwKKwkgICAgeyAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjU0MTMvUkY1NDI0IChFYWdsZS9Db25kb3IpICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjU0MTNfT0JfMkdIWgkJeyAzLCAyNDEsIDAgfQorI2RlZmluZQlBUjVLX1JGNTQxM19EQl8yR0haCQl7IDMsIDIzOCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjU0MTNfT0JfNUdIWgkJeyAzLCAyNDcsIDAgfQorI2RlZmluZQlBUjVLX1JGNTQxM19EQl81R0haCQl7IDMsIDI0NCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjU0MTNfUFdEX0lDTE9CVUYyRwl7IDMsIDEzMSwgMyB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RFUkJZX0NIQU5fU0VMX01PREUJeyAxLCAyOTEsIDIgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzU0MTNbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJIEFSNUtfUkY1NDEzX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQkgQVI1S19SRjU0MTNfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCSBBUjVLX1JGNTQxM19PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJIEFSNUtfUkY1NDEzX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX1BXRF9JQ0xPQlVGXzJHLAkgQVI1S19SRjU0MTNfUFdEX0lDTE9CVUYyR30sCisJezYsIEFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwgQVI1S19SRjU0MTNfREVSQllfQ0hBTl9TRUxfTU9ERX0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81NDEzW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAwMGMwLCAweDAwYTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAyYzAwLCAweDAwMDAyYzAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwLCAweDAwMDAyYzAwIH0gfSwKKwl7IDYsIDB4OThjOCwKKwkgICAgeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjI0MjUvUkYyNDE3IChTd2FuL05hbGEpICoKKyogQVIyMzE3IChTcGlkZXIgU29DKSAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkYyNDI1X09CXzJHSFoJCXsgMywgMTkzLCAwIH0KKyNkZWZpbmUJQVI1S19SRjI0MjVfREJfMkdIWgkJeyAzLCAxOTAsIDAgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzI0MjVbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjI0MjVfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkYyNDI1X0RCXzJHSFp9LAorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzCisgKiBYWFg6IGEvYVR1cmJvID8KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MjVbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAorCXsgNiwgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworLyoKKyAqIFRPRE86IEhhbmRsZSB0aGUgZmV3IGRpZmZlcmVuY2VzIHdpdGggc3dhbiBkdXJpbmcKKyAqIGJhbmsgbW9kaWZpY2F0aW9uIGFuZCBnZXQgcmlkIG9mIHRoaXMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzIzMTdbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODggfSB9LAorCXsgNiwgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworLyoKKyAqIFRPRE86IEhhbmRsZSB0aGUgZmV3IGRpZmZlcmVuY2VzIHdpdGggc3dhbiBkdXJpbmcKKyAqIGJhbmsgbW9kaWZpY2F0aW9uIGFuZCBnZXQgcmlkIG9mIHRoaXMKKyAqIFhYWDogYS9hVHVyYm8gPworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjQxN1tdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHg4MGU3MDAwMCwgMHg4MGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZnYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzU0ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZnYWluLmgKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiBSRiBHYWluIG9wdGltaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKi8KKworLyoKKyAqIE1vZGUtc3BlY2lmaWMgUkYgR2FpbiB0YWJsZSAoNjRieXRlcykgZm9yIFJGNTExMS81MTEyCisgKiAoUkY1MTEwIG9ubHkgY29tZXMgd2l0aCBBUjUyMTAgYW5kIG9ubHkgc3VwcG9ydHMgYS90dXJibyBhIG1vZGUgc28gaW5pdGlhbAorICogUkYgR2FpbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKKyAqLworc3RydWN0IGF0aDVrX2luaV9yZmdhaW4geworCXUxNglyZmdfcmVnaXN0ZXI7CS8qIFJGIEdhaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLworCXUzMglyZmdfdmFsdWVbMl07CS8qIFtmcmVxIChzZWUgYmVsb3cpXSAqLworfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjUxMTEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTExMVtdID0geworCS8qCQkJICAgICAgNUdoegkyR2h6CSovCisJeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDAyOSwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDE1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDFkOSwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA0NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDA5OSwgMHgwMDAwMDA4NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDFhNSwgMHgwMDAwMDE0OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAxZTUsIDB4MDAwMDAxODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDI1LCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDAxNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAwMDgsIDB4MDAwMDAwNDIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDQ4LCAweDAwMDAwMDgyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA4OCwgMHgwMDAwMDE3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxOTgsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMWQ4LCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDAxOCwgMHgwMDAwMDAxMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwNTgsIDB4MDAwMDAwNTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMDk4LCAweDAwMDAwMDkyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFhNCwgMHgwMDAwMDE3YyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAxZTQsIDB4MDAwMDAxYmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDI0LCAweDAwMDAwMWZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDA2NCwgMHgwMDAwMDAwYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAwYTQsIDB4MDAwMDAwNGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMGU0LCAweDAwMDAwMDhhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDEwYSwgMHgwMDAwMDE1YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxNGEsIDB4MDAwMDAxOWEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMThhLCAweDAwMDAwMWRhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDFjYSwgMHgwMDAwMDAwZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwMGEsIDB4MDAwMDAwNGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDRhLCAweDAwMDAwMDhlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDA4YSwgMHgwMDAwMDE1ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAxYmEsIDB4MDAwMDAxOWUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMWZhLCAweDAwMDAwMWRlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwN2EsIDB4MDAwMDAwNDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMTg2LCAweDAwMDAwMDg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDFjNiwgMHgwMDAwMDE3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwMDYsIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMDQ2LCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDA4NiwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFiZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAxZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDNkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3ZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCit9OworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTEyW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQ3LCAweDAwMDAwMDQ3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDg3LCAweDAwMDAwMDg3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWEwLCAweDAwMDAwMWEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUwLCAweDAwMDAwMWUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMWExLCAweDAwMDAwMWExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWUxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMDIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDA2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAxNjIsIDB4MDAwMDAxNjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWEyLCAweDAwMDAwMWEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlMiwgMHgwMDAwMDFlMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDYyLCAweDAwMDAwMDYyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE2MywgMHgwMDAwMDE2MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxYTMsIDB4MDAwMDAxYTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMWUzLCAweDAwMDAwMWUzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAyMywgMHgwMDAwMDAyMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMTg0LCAweDAwMDAwMTg0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFjNCwgMHgwMDAwMDFjNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWVhLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAyYSwgMHgwMDAwMDA0YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwNmEsIDB4MDAwMDAwOGIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMGFhLCAweDAwMDAwMWFjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDFhYiwgMHgwMDAwMDFlYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZWIsIDB4MDAwMDAwMmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDJiLCAweDAwMDAwMDEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA2YiwgMHgwMDAwMDA1MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwYWIsIDB4MDAwMDAwOTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMWFjLCAweDAwMDAwMTkzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFlYywgMHgwMDAwMDFkMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMmMsIDB4MDAwMDAwMTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDUzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA5MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwYmEsIDB4MDAwMDAxOTQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWJiLCAweDAwMDAwMWQ0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDFmYiwgMHgwMDAwMDAxNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwM2IsIDB4MDAwMDAwM2EgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDdiLCAweDAwMDAwMDdhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBiYiwgMHgwMDAwMDBiYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAxYmMsIDB4MDAwMDAxYmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMWZjLCAweDAwMDAwMWZiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAzYywgMHgwMDAwMDAzYiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwN2MsIDB4MDAwMDAwN2IgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGJjLCAweDAwMDAwMGJiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAxZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDNjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDA3YyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwYmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDEzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MTNbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDkxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTk5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFkOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDU5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA5OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgQVIyMzE2ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzIzMTZbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFhOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA2OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKK307CisKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjU0MTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTQxM1tdID0geworCS8qCQkJICAgICAgNUdoegkyR2h6CSovCisJeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDE2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFhMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDFlMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDAyMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDE4OCwgMHgwMDAwMDA2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDE4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDFjOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMDQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDA4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAxNjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMWE5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDFlOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxZDAsIDB4MDAwMDAwMjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMDEwLCAweDAwMDAwMDY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDA1MCwgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwOTAsIDB4MDAwMDAxZDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMWIxLCAweDAwMDAwMDEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFmMSwgMHgwMDAwMDA1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAwMzEsIDB4MDAwMDAwOTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDcxLCAweDAwMDAwMTcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAxZjgsIDB4MDAwMDAxZjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDM4LCAweDAwMDAwMDMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDA3OCwgMHgwMDAwMDA3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDk4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDE3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCit9OworCisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDI1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MjVbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDcwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFmOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKK307CisKKyNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTExCQk0CisjZGVmaW5lIEFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMgkJNworI2RlZmluZSBBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUUwkJQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCisjZGVmaW5lIEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTgkJMTUKKyNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOCQkyMAorI2RlZmluZSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlIJCTUKKyNkZWZpbmUgQVI1S19HQUlOX0NDS19PRkRNX0dBSU5fREVMVEEJCTE1CisjZGVmaW5lIEFSNUtfR0FJTl9TVEVQX0NPVU5UCQkJMTAKKworLyogQ2hlY2sgaWYgb3VyIGN1cnJlbnQgbWVhc3VyZW1lbnQgaXMgaW5zaWRlIG91cgorICogY3VycmVudCB2YXJpYWJsZSBhdHRlbnVhdGlvbiB3aW5kb3cgKi8KKyNkZWZpbmUgQVI1S19HQUlOX0NIRUNLX0FESlVTVChfZykgCQlcCisJKChfZyktPmdfY3VycmVudCA8PSAoX2cpLT5nX2xvdyB8fCAoX2cpLT5nX2N1cnJlbnQgPj0gKF9nKS0+Z19oaWdoKQorCitzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCB7CisJczgJCQkJZ29zX3BhcmFtW0FSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTXTsKKwlzOAkJCQlnb3NfZ2FpbjsKK307CisKK3N0cnVjdCBhdGg1a19nYWluX29wdCB7CisJdTgJCQkJZ29fZGVmYXVsdDsKKwl1OAkJCQlnb19zdGVwc19jb3VudDsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAlnb19zdGVwW0FSNUtfR0FJTl9TVEVQX0NPVU5UXTsKK307CisKKy8qCisgKiBQYXJhbWV0ZXJzIG9uIGdvc19wYXJhbToKKyAqIDEpIFR4IGNsaXAgUEhZIHJlZ2lzdGVyCisgKiAyKSBQV0QgOTAgUkYgcmVnaXN0ZXIKKyAqIDMpIFBXRCA4NCBSRiByZWdpc3RlcgorICogNCkgUkZHYWluU2VsIFJGIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTExID0geworCTQsCisJOSwKKwl7CisJCXsgeyA0LCAxLCAxLCAxIH0sIDYgfSwKKwkJeyB7IDQsIDAsIDEsIDEgfSwgNCB9LAorCQl7IHsgMywgMSwgMSwgMSB9LCAzIH0sCisJCXsgeyA0LCAwLCAwLCAxIH0sIDEgfSwKKwkJeyB7IDQsIDEsIDEsIDAgfSwgMCB9LAorCQl7IHsgNCwgMCwgMSwgMCB9LCAtMiB9LAorCQl7IHsgMywgMSwgMSwgMCB9LCAtMyB9LAorCQl7IHsgNCwgMCwgMCwgMCB9LCAtNCB9LAorCQl7IHsgMiwgMSwgMSwgMCB9LCAtNiB9CisJfQorfTsKKworLyoKKyAqIFBhcmFtZXRlcnMgb24gZ29zX3BhcmFtOgorICogMSkgTWl4Z2FpbiBvdnIgUkYgcmVnaXN0ZXIKKyAqIDIpIFBXRCAxMzggUkYgcmVnaXN0ZXIKKyAqIDMpIFBXRCAxMzcgUkYgcmVnaXN0ZXIKKyAqIDQpIFBXRCAxMzYgUkYgcmVnaXN0ZXIKKyAqIDUpIFBXRCAxMzIgUkYgcmVnaXN0ZXIKKyAqIDYpIFBXRCAxMzEgUkYgcmVnaXN0ZXIKKyAqIDcpIFBXRCAxMzAgUkYgcmVnaXN0ZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTIgPSB7CisJMSwKKwk4LAorCXsKKwkJeyB7IDMsIDAsIDAsIDAsIDAsIDAsIDAgfSwgNiB9LAorCQl7IHsgMiwgMCwgMCwgMCwgMCwgMCwgMCB9LCAwIH0sCisJCXsgeyAxLCAwLCAwLCAwLCAwLCAwLCAwIH0sIC0zIH0sCisJCXsgeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sIC02IH0sCisJCXsgeyAwLCAxLCAxLCAwLCAwLCAwLCAwIH0sIC04IH0sCisJCXsgeyAwLCAxLCAxLCAwLCAxLCAxLCAwIH0sIC0xMCB9LAorCQl7IHsgMCwgMSwgMCwgMSwgMSwgMSwgMCB9LCAtMTMgfSwKKwkJeyB7IDAsIDEsIDAsIDEsIDEsIDAsIDEgfSwgLTE2IH0sCisJfQorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQppbmRleCAxMjA5ZDE0Li4xYTRkNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQpAQCAtOSw4ICs5LDExIEBACiAJCW1haW4ubyBcCiAJCXJlY3YubyBcCiAJCXhtaXQubyBcCisJCXZpcnR1YWwubyBcCiAJCXJjLm8KIAorYXRoOWstJChDT05GSUdfUENJKSArPSBwY2kubworYXRoOWstJChDT05GSUdfQVRIRVJPU19BUjcxWFgpICs9IGFoYi5vCiBhdGg5ay0kKENPTkZJR19BVEg5S19ERUJVRykgKz0gZGVidWcubwogCiBvYmotJChDT05GSUdfQVRIOUspICs9IGF0aDlrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NWM1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiYXRoOWsuaCIKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX2FoYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJKmNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9haGJfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpb3VubWFwKHNjLT5tZW0pOworfQorCitzdGF0aWMgYm9vbCBhdGhfYWhiX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlwZGF0YSA9IChzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAob2ZmID49IChBUlJBWV9TSVpFKHBkYXRhLT5lZXByb21fZGF0YSkpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIiVzOiBmbGFzaCByZWFkIGZhaWxlZCwgb2Zmc2V0ICUwOHggaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fLCBvZmYpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBwZGF0YS0+ZWVwcm9tX2RhdGFbb2ZmXTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfYWhiX2J1c19vcHMgID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9haGJfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfYWhiX2NsZWFudXAsCisKKwkuZWVwcm9tX3JlYWQgPSBhdGhfYWhiX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQgPSAwOworCXN0cnVjdCBhdGhfaHcgKmFoOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwltZW0gPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlpcnEgPSByZXMtPnN0YXJ0OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJYXBoeSA9IGh3LT5wcml2OworCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgKGFwaHkgKyAxKTsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnByaV93aXBoeSA9IGFwaHk7CisJc2MtPmh3ID0gaHc7CisJc2MtPmRldiA9ICZwZGV2LT5kZXY7CisJc2MtPm1lbSA9IG1lbTsKKwlzYy0+YnVzX29wcyA9ICZhdGhfYWhiX2J1c19vcHM7CisJc2MtPmlycSA9IGlycTsKKworCXJldCA9IGF0aF9hdHRhY2goQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGRldmljZSwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9kZXRhY2g7CisJfQorCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4LCAiCisJICAgICAgICJBUiVzIFJGIFJldjoleCwgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKKwkgICAgICAgYXRoX21hY19iYl9uYW1lKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJICAgICAgIGF0aF9yZl9uYW1lKChhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ICYgQVJfUkFESU9fU1JFVl9NQUpPUikpLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5waHlSZXYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgaXJxKTsKKworCXJldHVybiAwOworCisgZXJyX2RldGFjaDoKKwlhdGhfZGV0YWNoKHNjKTsKKyBlcnJfZnJlZV9odzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisgZXJyX2lvdW5tYXA6CisJaW91bm1hcChtZW0pOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGhfYWhiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaHcpIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJCWF0aF9jbGVhbnVwKHNjKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aF9haGJfZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gYXRoX2FoYl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGF0aF9haGJfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdGg5ayIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgYXRoX2FoYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRoX2FoYl9kcml2ZXIpOworfQorCit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCmluZGV4IDI1MWUyZDkuLjZjNWU4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMjMgKzE0LDE5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9hbmlfY2hhbm5lbF9pZHgoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGludCBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWhwLT5haF9hbmkpOyBpKyspIHsKLQkJaWYgKGFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9PSBjaGFuLT5jaGFubmVsKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFoLT5hbmkpOyBpKyspIHsKKwkJaWYgKGFoLT5hbmlbaV0uYyAmJgorCQkgICAgYWgtPmFuaVtpXS5jLT5jaGFubmVsID09IGNoYW4tPmNoYW5uZWwpCiAJCQlyZXR1cm4gaTsKLQkJaWYgKGFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9PSAwKSB7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jLmNoYW5uZWwgPSBjaGFuLT5jaGFubmVsOwotCQkJYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsRmxhZ3MgPSBjaGFuLT5jaGFubmVsRmxhZ3M7CisJCWlmIChhaC0+YW5pW2ldLmMgPT0gTlVMTCkgeworCQkJYWgtPmFuaVtpXS5jID0gY2hhbjsKIAkJCXJldHVybiBpOwogCQl9CiAJfQpAQCAtNDEsNDEgKzM3LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2FuaV9jb250cm9sKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X2FuaV9jb250cm9sKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSBlbnVtIGF0aDlrX2FuaV9jbWQgY21kLCBpbnQgcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CiAKLQlzd2l0Y2ggKGNtZCAmIGFocC0+YWhfYW5pX2Z1bmN0aW9uKSB7CisJc3dpdGNoIChjbWQgJiBhaC0+YW5pX2Z1bmN0aW9uKSB7CiAJY2FzZSBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw6ewogCQl1MzIgbGV2ZWwgPSBwYXJhbTsKIAotCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWQpKSB7CisJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJCSJsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAogCQkJCWxldmVsLAotCQkJCSh1bnNpZ25lZClBUlJBWV9TSVpFKGFocC0+YWhfdG90YWxTaXplRGVzaXJlZCkpOworCQkJCSh1bnNpZ25lZClBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKIAkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1RPVF9ERVMsCi0JCQkgICAgICBhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWRbbGV2ZWxdKTsKKwkJCSAgICAgIGFoLT50b3RhbFNpemVEZXNpcmVkW2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9BR0NfQ1RMMSwKIAkJCSAgICAgIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfTE9XLAotCQkJICAgICAgYWhwLT5haF9jb2Fyc2VMb3dbbGV2ZWxdKTsKKwkJCSAgICAgIGFoLT5jb2Fyc2VfbG93W2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9BR0NfQ1RMMSwKIAkJCSAgICAgIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfSElHSCwKLQkJCSAgICAgIGFocC0+YWhfY29hcnNlSGlnaFtsZXZlbF0pOworCQkJICAgICAgYWgtPmNvYXJzZV9oaWdoW2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GSU5EX1NJRywKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJQV1IsCi0JCQkgICAgICBhaHAtPmFoX2ZpcnB3cltsZXZlbF0pOworCQkJICAgICAgYWgtPmZpcnB3cltsZXZlbF0pOwogCiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbml1cCsrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfbml1cCsrOwogCQllbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbmlkb3duKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9uaWRvd24rKzsKIAkJYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0xMjksOSArMTI0LDkgQEAKIAogCQlpZiAoIW9uICE9IGFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikgewogCQkJaWYgKG9uKQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKIAkJCWVsc2UKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbW9mZisrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1vZmYrKzsKIAkJCWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9ICFvbjsKIAkJfQogCQlicmVhazsKQEAgLTE0NSw5ICsxNDAsOSBAQAogCQkJICAgICAgd2Vha1NpZ1RockNja1toaWdoXSk7CiAJCWlmIChoaWdoICE9IGFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkKSB7CiAJCQlpZiAoaGlnaCkKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NraGlnaCsrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2hpZ2grKzsKIAkJCWVsc2UKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NrbG93Kys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfY2NrbG93Kys7CiAJCQlhbmlTdGF0ZS0+Y2NrV2Vha1NpZ1RocmVzaG9sZCA9IGhpZ2g7CiAJCX0KIAkJYnJlYWs7CkBAIC0xNjcsOSArMTYyLDkgQEAKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJTVEVQLAogCQkJICAgICAgZmlyc3RlcFtsZXZlbF0pOwogCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQotCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3N0ZXB1cCsrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcHVwKys7CiAJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcGRvd24rKzsKIAkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0xOTAsOSArMTg1LDkgQEAKIAkJCSAgICAgIEFSX1BIWV9USU1JTkc1X0NZQ1BXUl9USFIxLAogCQkJICAgICAgY3ljcHdyVGhyMVtsZXZlbF0pOwogCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3B1cnVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zcHVydXArKzsKIAkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJkb3duKys7CiAJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0yMjMsNyArMjE4LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIHN0cnVjdCBhdGg5a19taWJfc3RhdHMgKnN0YXRzKQogewogCXN0YXRzLT5hY2tyY3ZfYmFkICs9IFJFR19SRUFEKGFoLCBBUl9BQ0tfRkFJTCk7CkBAIC0yMzMsMTggKzIyOCwxNyBAQAogCXN0YXRzLT5iZWFjb25zICs9IFJFR19SRUFEKGFoLCBBUl9CRUFDT05fQ05UKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAogCWFuaVN0YXRlLT5saXN0ZW5UaW1lID0gMDsKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJaWYgKGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggPiBBUl9QSFlfQ09VTlRNQVgpIHsKIAkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9IDA7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCkBAIC0yNzAsMjQgKzI2NCwyMiBAQAogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKIAotCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaHAtPmFoX21pYlN0YXRzKTsKKwkJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAl9CiAJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IDA7CiAJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0JZW51bSB3aXJlbGVzc19tb2RlIG1vZGU7CiAJaW50MzJfdCByc3NpOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAogCWlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgSEFMX05PSVNFX0lNTVVORV9NQVgpIHsKIAkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsCkBAIC0zMDMsMTQgKzI5NSwxNCBAQAogCQl9CiAJfQogCi0JaWYgKGFoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkgewogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQotCXJzc2kgPSBCRUFDT05fUlNTSShhaHApOworCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpIHsKIAkJaWYgKCFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpIHsKIAkJCWlmIChhdGg5a19od19hbmlfY29udHJvbChhaCwKQEAgLTMzNiw4ICszMjgsNyBAQAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7Ci0JCW1vZGUgPSBhdGg5a19od19jaGFuMndtb2RlKGFoLCBjaGFuKTsKLQkJaWYgKG1vZGUgPT0gQVRIOUtfTU9ERV8xMUcgfHwgbW9kZSA9PSBBVEg5S19NT0RFXzExQikgeworCQlpZiAoY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCQlpZiAoIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikKIAkJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKIAkJCQkgICAgIEFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiwKQEAgLTM1MCwzOSArMzQxLDM2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfY2NrX2Vycl90cmlnZ2VyKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0JZW51bSB3aXJlbGVzc19tb2RlIG1vZGU7CiAJaW50MzJfdCByc3NpOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA8IEhBTF9OT0lTRV9JTU1VTkVfTUFYKSB7CiAJCWlmIChhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMLAogCQkJCQkgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCArIDEpKSB7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JaWYgKGFoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkgewogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQotCXJzc2kgPSBCRUFDT05fUlNTSShhaHApOworCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkKIAkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkJICAgICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICsgMSk7CiAJfSBlbHNlIHsKLQkJbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQlpZiAobW9kZSA9PSBBVEg5S19NT0RFXzExRyB8fCBtb2RlID09IEFUSDlLX01PREVfMTFCKSB7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkKIAkJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKIAkJCQkJICAgICBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwgMCk7CkBAIC0zOTAsMjIgKzM3OCwyMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJaW50MzJfdCByc3NpOwogCi0JYW5pU3RhdGUgPSBhaHAtPmFoX2N1cmFuaTsKKwlhbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CiAKLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkgewogCQkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkJCSBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIC0gMSkpCiAJCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKLQkJcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJCWlmIChyc3NpID4gYW5pU3RhdGUtPnJzc2lUaHJIaWdoKSB7CiAJCQkvKiBYWFg6IEhhbmRsZSBtZSAqLwogCQl9IGVsc2UgaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykgewpAQCAtNDQ0LDkgKzQzMSw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50MzJfdCBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQzMl90IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCXUzMiB0eEZyYW1lQ291bnQsIHJ4RnJhbWVDb3VudCwgY3ljbGVDb3VudDsKIAlpbnQzMl90IGxpc3RlblRpbWU7CkBAIC00NTUsMTEgKzQ0MSwxMSBAQAogCXJ4RnJhbWVDb3VudCA9IFJFR19SRUFEKGFoLCBBUl9SRkNOVCk7CiAJY3ljbGVDb3VudCA9IFJFR19SRUFEKGFoLCBBUl9DQ0NOVCk7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPmN5Y2xlQ291bnQgPT0gMCB8fCBhbmlTdGF0ZS0+Y3ljbGVDb3VudCA+IGN5Y2xlQ291bnQpIHsKIAogCQlsaXN0ZW5UaW1lID0gMDsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2x6ZXJvKys7CisJCWFoLT5zdGF0cy5hc3RfYW5pX2x6ZXJvKys7CiAJfSBlbHNlIHsKIAkJaW50MzJfdCBjY2RlbHRhID0gY3ljbGVDb3VudCAtIGFuaVN0YXRlLT5jeWNsZUNvdW50OwogCQlpbnQzMl90IHJmZGVsdGEgPSByeEZyYW1lQ291bnQgLSBhbmlTdGF0ZS0+cnhGcmFtZUNvdW50OwpAQCAtNDczLDI1ICs0NTksMjQgQEAKIAlyZXR1cm4gbGlzdGVuVGltZTsKIH0KIAotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+Y3VyY2hhbjsKIAlpbnQgaW5kZXg7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAogCWluZGV4ID0gYXRoOWtfaHdfZ2V0X2FuaV9jaGFubmVsX2lkeChhaCwgY2hhbik7Ci0JYW5pU3RhdGUgPSAmYWhwLT5haF9hbmlbaW5kZXhdOwotCWFocC0+YWhfY3VyYW5pID0gYW5pU3RhdGU7CisJYW5pU3RhdGUgPSAmYWgtPmFuaVtpbmRleF07CisJYWgtPmN1cmFuaSA9IGFuaVN0YXRlOwogCi0JaWYgKERPX0FOSShhaCkgJiYgYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OCi0JICAgICYmIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoRE9fQU5JKGFoKSAmJiBhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04KKwkgICAgJiYgYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkiUmVzZXQgQU5JIHN0YXRlIG9wbW9kZSAldVxuIiwgYWgtPmFoX29wbW9kZSk7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9yZXNldCsrOworCQkJIlJlc2V0IEFOSSBzdGF0ZSBvcG1vZGUgJXVcbiIsIGFoLT5vcG1vZGUpOworCQlhaC0+c3RhdHMuYXN0X2FuaV9yZXNldCsrOwogCiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsIDApOwogCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwsIDApOwpAQCAtNTA0LDE1ICs0ODksMTUgQEAKIAkJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKGFoKSB8CiAJCQkJICAgICBBVEg5S19SWF9GSUxURVJfUEhZRVJSKTsKIAotCQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJYWhwLT5haF9jdXJhbmktPm9mZG1UcmlnSGlnaCA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfaGlnaDsKLQkJCWFocC0+YWhfY3VyYW5pLT5vZmRtVHJpZ0xvdyA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfbG93OwotCQkJYWhwLT5haF9jdXJhbmktPmNja1RyaWdIaWdoID0KLQkJCQlhaC0+YWhfY29uZmlnLmNja190cmlnX2hpZ2g7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+Y2NrVHJpZ0xvdyA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5jY2tfdHJpZ19sb3c7CisJCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQlhaC0+Y3VyYW5pLT5vZmRtVHJpZ0hpZ2ggPQorCQkJCWFoLT5jb25maWcub2ZkbV90cmlnX2hpZ2g7CisJCQlhaC0+Y3VyYW5pLT5vZmRtVHJpZ0xvdyA9CisJCQkJYWgtPmNvbmZpZy5vZmRtX3RyaWdfbG93OworCQkJYWgtPmN1cmFuaS0+Y2NrVHJpZ0hpZ2ggPQorCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaDsKKwkJCWFoLT5jdXJhbmktPmNja1RyaWdMb3cgPQorCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfbG93OwogCQl9CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKIAkJcmV0dXJuOwpAQCAtNTMzLDcgKzUxOCw3IEBACiAJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgIT0gMCkKIAkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCk7Ci0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCBhdGg5a19od19nZXRyeGZpbHRlcihhaCkgJgogCQkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwogCQlhdGg5a19hbmlfcmVzdGFydChhaCk7CkBAIC01NDcsMzEgKzUzMiwzMyBAQAogCX0KIH0KIAotdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKIAlpbnQzMl90IGxpc3RlblRpbWU7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOwotCWFocC0+YWhfc3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKKwlpZiAoIURPX0FOSShhaCkpCisJCXJldHVybjsKKworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKwlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWxpc3RlblRpbWUgPSBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKGFoKTsKIAlpZiAobGlzdGVuVGltZSA8IDApIHsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2xuZWcrKzsKKwkJYWgtPnN0YXRzLmFzdF9hbmlfbG5lZysrOwogCQlhdGg5a19hbmlfcmVzdGFydChhaCk7CiAJCXJldHVybjsKIAl9CiAKIAlhbmlTdGF0ZS0+bGlzdGVuVGltZSArPSBsaXN0ZW5UaW1lOwogCi0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCXUzMiBwaHlDbnQxLCBwaHlDbnQyOwogCQl1MzIgb2ZkbVBoeUVyckNudCwgY2NrUGh5RXJyQ250OwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOwogCiAJCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKIAkJcGh5Q250MiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzIpOwpAQCAtNjA0LDI3ICs1OTEsMjQgQEAKIAkJfQogCiAJCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KIAkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKIAogCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KIAkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OwogCX0KIAotCWlmICghRE9fQU5JKGFoKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFocC0+YWhfYW5pUGVyaW9kKSB7CisJaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFoLT5hbmlwZXJpb2QpIHsKIAkJaWYgKGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPD0gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPm9mZG1UcmlnTG93IC8gMTAwMCAmJgogCQkgICAgYW5pU3RhdGUtPmNja1BoeUVyckNvdW50IDw9IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5jY2tUcmlnTG93IC8gMTAwMCkKIAkJCWF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShhaCk7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKLQl9IGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gYWhwLT5haF9hbmlQZXJpb2QpIHsKKwl9IGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gYWgtPmFuaXBlcmlvZCkgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA+IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggLyAxMDAwKSB7CiAJCQlhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihhaCk7CkBAIC02MzgsMjAgKzYyMiwxNiBAQAogCX0KIH0KIAotYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzID8gdHJ1ZSA6IGZhbHNlOworCXJldHVybiBhaC0+aGFzX2h3X3BoeWNvdW50ZXJzID8gdHJ1ZSA6IGZhbHNlOwogfQogCi12b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19lbmFibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJFbmFibGUgTUlCIGNvdW50ZXJzXG4iKTsKIAotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfT0ZETSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9GSUxUX0NDSywgMCk7CkBAIC02NjIsMjEgKzY0MiwxOCBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzIsIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKQorLyogRnJlZXplIHRoZSBNSUIgY291bnRlcnMsIGdldCB0aGUgc3RhdHMgYW5kIHRoZW4gY2xlYXIgdGhlbSAqLwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLCAiRGlzYWJsZSBNSUIgY291bnRlcnNcbiIpOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyB8IEFSX01JQkNfQ01DKTsKLQotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOwotCisJUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyk7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfQ01DKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfT0ZETSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9GSUxUX0NDSywgMCk7CiB9CiAKLXUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2hhbCAqYWgsCit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICB1MzIgKnJ4Y19wY250LAogCQkJCSAgdTMyICpyeGZfcGNudCwKIAkJCQkgIHUzMiAqdHhmX3BjbnQpCkBAIC03MjEsMTAgKzY5OCw5IEBACiAgKiBhbnkgb2YgdGhlIE1JQiBjb3VudGVycyBvdmVyZmxvdy90cmlnZ2VyIHNvIGRvbid0IGFzc3VtZSB3ZSdyZQogICogaGVyZSBiZWNhdXNlIGEgUEhZIGVycm9yIGNvdW50ZXIgdHJpZ2dlcmVkLgogICovCi12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBwaHlDbnQxLCBwaHlDbnQyOwogCiAJLyogUmVzZXQgdGhlc2UgY291bnRlcnMgcmVnYXJkbGVzcyAqLwpAQCAtNzM0LDggKzcxMCw4IEBACiAJCVJFR19XUklURShhaCwgQVJfU0xQX01JQl9DVFJMLCBBUl9TTFBfTUlCX0NMRUFSKTsKIAogCS8qIENsZWFyIHRoZSBtaWIgY291bnRlcnMgYW5kIHNhdmUgdGhlbSBpbiB0aGUgc3RhdHMgKi8KLQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaHAtPmFoX21pYlN0YXRzKTsKLQlhaHAtPmFoX3N0YXRzLmFzdF9ub2Rlc3RhdHMgPSAqc3RhdHM7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwpAQCAtNzQ1LDE3ICs3MjEsMTcgQEAKIAlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CiAJaWYgKCgocGh5Q250MSAmIEFSX01JQkNOVF9JTlRSTUFTSykgPT0gQVJfTUlCQ05UX0lOVFJNQVNLKSB8fAogCSAgICAoKHBoeUNudDIgJiBBUl9NSUJDTlRfSU5UUk1BU0spID09IEFSX01JQkNOVF9JTlRSTUFTSykpIHsKLQkJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAkJdTMyIG9mZG1QaHlFcnJDbnQsIGNja1BoeUVyckNudDsKIAogCQkvKiBOQjogb25seSB1c2UgYXN0X2FuaV8qZXJycyB3aXRoIEFIX1BSSVZBVEVfRElBRyAqLwogCQlvZmRtUGh5RXJyQ250ID0gcGh5Q250MSAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CiAJCQlvZmRtUGh5RXJyQ250IC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IG9mZG1QaHlFcnJDbnQ7CiAKIAkJY2NrUGh5RXJyQ250ID0gcGh5Q250MiAtIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NrZXJycyArPQorCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CiAJCQljY2tQaHlFcnJDbnQgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQ7CiAJCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IGNja1BoeUVyckNudDsKIApAQCAtNzc0LDkgKzc1MCw4IEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJY29uc3QgaW50IHRvdGFsU2l6ZURlc2lyZWRbXSA9IHsgLTU1LCAtNTUsIC01NSwgLTU1LCAtNjIgfTsKQEAgLTc4NSw2NiArNzYwLDYzIEBACiAJY29uc3QgaW50IGZpcnB3cltdID0geyAtNzgsIC03OCwgLTc4LCAtNzgsIC04MCB9OwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWRbaV0gPSB0b3RhbFNpemVEZXNpcmVkW2ldOwotCQlhaHAtPmFoX2NvYXJzZUhpZ2hbaV0gPSBjb2Fyc2VIaWdoW2ldOwotCQlhaHAtPmFoX2NvYXJzZUxvd1tpXSA9IGNvYXJzZUxvd1tpXTsKLQkJYWhwLT5haF9maXJwd3JbaV0gPSBmaXJwd3JbaV07CisJCWFoLT50b3RhbFNpemVEZXNpcmVkW2ldID0gdG90YWxTaXplRGVzaXJlZFtpXTsKKwkJYWgtPmNvYXJzZV9oaWdoW2ldID0gY29hcnNlSGlnaFtpXTsKKwkJYWgtPmNvYXJzZV9sb3dbaV0gPSBjb2Fyc2VMb3dbaV07CisJCWFoLT5maXJwd3JbaV0gPSBmaXJwd3JbaV07CiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19hbmlfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJBdHRhY2ggQU5JXG4iKTsKIAotCWFocC0+YWhfaGFzSHdQaHlDb3VudGVycyA9IDE7CisJYWgtPmhhc19od19waHljb3VudGVycyA9IDE7CiAKLQltZW1zZXQoYWhwLT5haF9hbmksIDAsIHNpemVvZihhaHAtPmFoX2FuaSkpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFocC0+YWhfYW5pKTsgaSsrKSB7Ci0JCWFocC0+YWhfYW5pW2ldLm9mZG1UcmlnSGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0ub2ZkbVRyaWdMb3cgPSBBVEg5S19BTklfT0ZETV9UUklHX0xPVzsKLQkJYWhwLT5haF9hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1c7Ci0JCWFocC0+YWhfYW5pW2ldLnJzc2lUaHJIaWdoID0gQVRIOUtfQU5JX1JTU0lfVEhSX0hJR0g7Ci0JCWFocC0+YWhfYW5pW2ldLnJzc2lUaHJMb3cgPSBBVEg5S19BTklfUlNTSV9USFJfTE9XOwotCQlhaHAtPmFoX2FuaVtpXS5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9CisJbWVtc2V0KGFoLT5hbmksIDAsIHNpemVvZihhaC0+YW5pKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWgtPmFuaSk7IGkrKykgeworCQlhaC0+YW5pW2ldLm9mZG1UcmlnSGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5vZmRtVHJpZ0xvdyA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XOworCQlhaC0+YW5pW2ldLmNja1RyaWdIaWdoID0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CisJCWFoLT5hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1c7CisJCWFoLT5hbmlbaV0ucnNzaVRockhpZ2ggPSBBVEg5S19BTklfUlNTSV9USFJfSElHSDsKKwkJYWgtPmFuaVtpXS5yc3NpVGhyTG93ID0gQVRIOUtfQU5JX1JTU0lfVEhSX0xPVzsKKwkJYWgtPmFuaVtpXS5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9CiAJCQkhQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KKwkJYWgtPmFuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KIAkJCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSOwotCQlhaHAtPmFoX2FuaVtpXS5zcHVySW1tdW5pdHlMZXZlbCA9IEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkw7Ci0JCWFocC0+YWhfYW5pW2ldLmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTDsKLQkJaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgewotCQkJYWhwLT5haF9hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQorCQlhaC0+YW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTDsKKwkJYWgtPmFuaVtpXS5maXJzdGVwTGV2ZWwgPSBBVEg5S19BTklfRklSU1RFUF9MVkw7CisJCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CisJCQlhaC0+YW5pW2ldLm9mZG1QaHlFcnJCYXNlID0KIAkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0g7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jY2tQaHlFcnJCYXNlID0KKwkJCWFoLT5hbmlbaV0uY2NrUGh5RXJyQmFzZSA9CiAJCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CiAJCX0KIAl9Ci0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJCSJTZXR0aW5nIE9mZG1FcnJCYXNlID0gMHglMDh4XG4iLAotCQkJYWhwLT5haF9hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOworCQkJYWgtPmFuaVswXS5vZmRtUGh5RXJyQmFzZSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIlNldHRpbmcgY2NrRXJyQmFzZSA9IDB4JTA4eFxuIiwKLQkJCWFocC0+YWhfYW5pWzBdLmNja1BoeUVyckJhc2UpOworCQkJYWgtPmFuaVswXS5jY2tQaHlFcnJCYXNlKTsKIAotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgYWhwLT5haF9hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgYWhwLT5haF9hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CiAJCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCX0KLQlhaHAtPmFoX2FuaVBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0Q7Ci0JaWYgKGFoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKLQkJYWhwLT5haF9wcm9jUGh5RXJyIHw9IEhBTF9QUk9DRVNTX0FOSTsKKwlhaC0+YW5pcGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKKwlpZiAoYWgtPmNvbmZpZy5lbmFibGVfYW5pKQorCQlhaC0+cHJvY19waHllcnIgfD0gSEFMX1BST0NFU1NfQU5JOwogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19hbmlfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJEZXRhY2ggQU5JXG4iKTsKIAotCWlmIChhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMpIHsKKwlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewogCQlhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhhaCk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI0ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFOSV9ICisjZGVmaW5lIEFOSV9ICisKKyNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCisKKyNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKKworI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCisJSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKKwkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAorI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKKyNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKKyNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCisjZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3CisjZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCisjZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAorI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNworI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICAgIDQKKyNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgICAgICAgICAgIDIKKworZW51bSBhdGg5a19hbmlfY21kIHsKKwlBVEg5S19BTklfUFJFU0VOVCA9IDB4MSwKKwlBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwgPSAweDIsCisJQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OID0gMHg0LAorCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSID0gMHg4LAorCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMID0gMHgxMCwKKwlBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCA9IDB4MjAsCisJQVRIOUtfQU5JX01PREUgPSAweDQwLAorCUFUSDlLX0FOSV9QSFlFUlJfUkVTRVQgPSAweDgwLAorCUFUSDlLX0FOSV9BTEwgPSAweGZmCit9OworCitzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIHsKKwl1MzIgYWNrcmN2X2JhZDsKKwl1MzIgcnRzX2JhZDsKKwl1MzIgcnRzX2dvb2Q7CisJdTMyIGZjc19iYWQ7CisJdTMyIGJlYWNvbnM7Cit9OworCitzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyB7CisJdTMyIG5zX2F2Z2Jyc3NpOworCXUzMiBuc19hdmdyc3NpOworCXUzMiBuc19hdmd0eHJzc2k7CisJdTMyIG5zX2F2Z3R4cmF0ZTsKK307CisKK3N0cnVjdCBhcjU0MTZBbmlTdGF0ZSB7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7CisJdTggbm9pc2VJbW11bml0eUxldmVsOworCXU4IHNwdXJJbW11bml0eUxldmVsOworCXU4IGZpcnN0ZXBMZXZlbDsKKwl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKKwl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOworCXUzMiBsaXN0ZW5UaW1lOworCXUzMiBvZmRtVHJpZ0hpZ2g7CisJdTMyIG9mZG1UcmlnTG93OworCWludDMyX3QgY2NrVHJpZ0hpZ2g7CisJaW50MzJfdCBjY2tUcmlnTG93OworCWludDMyX3QgcnNzaVRockxvdzsKKwlpbnQzMl90IHJzc2lUaHJIaWdoOworCXUzMiBub2lzZUZsb29yOworCXUzMiB0eEZyYW1lQ291bnQ7CisJdTMyIHJ4RnJhbWVDb3VudDsKKwl1MzIgY3ljbGVDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckNvdW50OworCXUzMiBjY2tQaHlFcnJDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckJhc2U7CisJdTMyIGNja1BoeUVyckJhc2U7CisJaW50MTZfdCBwa3RSc3NpWzJdOworCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07CisJaW50MTZfdCBjY2tFcnJSc3NpWzJdOworfTsKKworc3RydWN0IGFyNTQxNlN0YXRzIHsKKwl1MzIgYXN0X2FuaV9uaXVwOworCXUzMiBhc3RfYW5pX25pZG93bjsKKwl1MzIgYXN0X2FuaV9zcHVydXA7CisJdTMyIGFzdF9hbmlfc3B1cmRvd247CisJdTMyIGFzdF9hbmlfb2ZkbW9uOworCXUzMiBhc3RfYW5pX29mZG1vZmY7CisJdTMyIGFzdF9hbmlfY2NraGlnaDsKKwl1MzIgYXN0X2FuaV9jY2tsb3c7CisJdTMyIGFzdF9hbmlfc3RlcHVwOworCXUzMiBhc3RfYW5pX3N0ZXBkb3duOworCXUzMiBhc3RfYW5pX29mZG1lcnJzOworCXUzMiBhc3RfYW5pX2Nja2VycnM7CisJdTMyIGFzdF9hbmlfcmVzZXQ7CisJdTMyIGFzdF9hbmlfbHplcm87CisJdTMyIGFzdF9hbmlfbG5lZzsKKwlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOworfTsKKyNkZWZpbmUgYWhfbWliU3RhdHMgc3RhdHMuYXN0X21pYnN0YXRzCisKK3ZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKKwkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqcnhjX3BjbnQsCisJCQkJICB1MzIgKnJ4Zl9wY250LCB1MzIgKnR4Zl9wY250KTsKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCmluZGV4IGQyNzgxMzUuLjI2ODlhMDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNywxMDQxICsxNyw3NDEgQEAKICNpZm5kZWYgQVRIOUtfSAogI2RlZmluZSBBVEg5S19ICiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCi0jZGVmaW5lIEFUSEVST1NfVkVORE9SX0lECTB4MTY4YworI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAicmMuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogCi0jZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0kJMHgwMDIzCi0jZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0lFCTB4MDAyNAotI2RlZmluZSBBUjkxNjBfREVWSURfUENJCTB4MDAyNwotI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQotI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKLSNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCitzdHJ1Y3QgYXRoX25vZGU7CiAKLSNkZWZpbmUgQVI1NDE2X0FSOTEwMF9ERVZJRAkweDAwMGIKKy8qIE1hY3JvIHRvIGV4cGFuZCBzY2FsYXJzIHRvIDY0LWJpdCBvYmplY3RzICovCiAKLSNkZWZpbmUJQVJfU1VCVkVORE9SX0lEX05PRwkweDBlMTEKLSNkZWZpbmUgQVJfU1VCVkVORE9SX0lEX05FV19BCTB4NzA2NQorI2RlZmluZQlpdG82NCh4KSAoc2l6ZW9mKHgpID09IDgpID8JCQlcCisJKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgKDB4ZmYpKSA6CVwKKwkoc2l6ZW9mKHgpID09IDE2KSA/CQkJCVwKKwkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmYpIDoJXAorCSgoc2l6ZW9mKHgpID09IDMyKSA/CQkJCVwKKwkgKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgMHhmZmZmZmZmZikgOiBcCisJICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkKIAotI2RlZmluZSBBVEg5S19UWEVSUl9YUkVUUlkgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1RYRVJSX0ZJTFQgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfVFhFUlJfRklGTyAgICAgICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKKy8qIGluY3JlbWVudCB3aXRoIHdyYXAtYXJvdW5kICovCisjZGVmaW5lIElOQ1IoX2wsIF9zeikgICBkbyB7CQkJXAorCQkoX2wpKys7CQkJCVwKKwkJKF9sKSAmPSAoKF9zeikgLSAxKTsJCVwKKwl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFUSDlLX1RYX0JBICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIOUtfVFhfUFdSTUdNVCAgICAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19UWF9ERVNDX0NGR19FUlIgICAgICAweDA0Ci0jZGVmaW5lIEFUSDlLX1RYX0RBVEFfVU5ERVJSVU4gICAgIDB4MDgKLSNkZWZpbmUgQVRIOUtfVFhfREVMSU1fVU5ERVJSVU4gICAgMHgxMAotI2RlZmluZSBBVEg5S19UWF9TV19BQk9SVEVEICAgICAgICAweDQwCi0jZGVmaW5lIEFUSDlLX1RYX1NXX0ZJTFRFUkVEICAgICAgIDB4ODAKKy8qIGRlY3JlbWVudCB3aXRoIHdyYXAtYXJvdW5kICovCisjZGVmaW5lIERFQ1IoX2wsICBfc3opICBkbyB7CQkJXAorCQkoX2wpLS07CQkJCVwKKwkJKF9sKSAmPSAoKF9zeikgLSAxKTsJCVwKKwl9IHdoaWxlICgwKQogCi0jZGVmaW5lIE5CQlkgICAgOAorI2RlZmluZSBBX01BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQogCi1zdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7Ci0JdTMyIHRzX3RzdGFtcDsKLQl1MTYgdHNfc2VxbnVtOwotCXU4IHRzX3N0YXR1czsKLQl1OCB0c19yYXRlY29kZTsKLQl1OCB0c19yYXRlaW5kZXg7Ci0JaW50OF90IHRzX3Jzc2k7Ci0JdTggdHNfc2hvcnRyZXRyeTsKLQl1OCB0c19sb25ncmV0cnk7Ci0JdTggdHNfdmlydGNvbDsKLQl1OCB0c19hbnRlbm5hOwotCXU4IHRzX2ZsYWdzOwotCWludDhfdCB0c19yc3NpX2N0bDA7Ci0JaW50OF90IHRzX3Jzc2lfY3RsMTsKLQlpbnQ4X3QgdHNfcnNzaV9jdGwyOwotCWludDhfdCB0c19yc3NpX2V4dDA7Ci0JaW50OF90IHRzX3Jzc2lfZXh0MTsKLQlpbnQ4X3QgdHNfcnNzaV9leHQyOwotCXU4IHBhZFszXTsKLQl1MzIgYmFfbG93OwotCXUzMiBiYV9oaWdoOwotCXUzMiBldm0wOwotCXUzMiBldm0xOwotCXUzMiBldm0yOworI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAorCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAorCQkJQlVHKCk7CQkJXAorCQl9CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAorCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKKworI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQorCitzdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisKK3N0cnVjdCBhdGhfY29uZmlnIHsKKwl1MzIgYXRoX2FnZ3JfcHJvdDsKKwl1MTYgdHhwb3dsaW1pdDsKKwl1OCBjYWJxUmVhZHl0aW1lOworCXU4IHN3QmVhY29uUHJvY2VzczsKIH07CiAKLXN0cnVjdCBhdGhfcnhfc3RhdHVzIHsKLQl1MzIgcnNfdHN0YW1wOwotCXUxNiByc19kYXRhbGVuOwotCXU4IHJzX3N0YXR1czsKLQl1OCByc19waHllcnI7Ci0JaW50OF90IHJzX3Jzc2k7Ci0JdTggcnNfa2V5aXg7Ci0JdTggcnNfcmF0ZTsKLQl1OCByc19hbnRlbm5hOwotCXU4IHJzX21vcmU7Ci0JaW50OF90IHJzX3Jzc2lfY3RsMDsKLQlpbnQ4X3QgcnNfcnNzaV9jdGwxOwotCWludDhfdCByc19yc3NpX2N0bDI7Ci0JaW50OF90IHJzX3Jzc2lfZXh0MDsKLQlpbnQ4X3QgcnNfcnNzaV9leHQxOwotCWludDhfdCByc19yc3NpX2V4dDI7Ci0JdTggcnNfaXNhZ2dyOwotCXU4IHJzX21vcmVhZ2dyOwotCXU4IHJzX251bV9kZWxpbXM7Ci0JdTggcnNfZmxhZ3M7Ci0JdTMyIGV2bTA7Ci0JdTMyIGV2bTE7Ci0JdTMyIGV2bTI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCisJCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCisJCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKKwkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCisJCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhdGhfYnVmX3N0YXRlKSk7CQlcCisJfSB3aGlsZSAoMCkKKworLyoqCisgKiBlbnVtIGJ1ZmZlcl90eXBlIC0gQnVmZmVyIHR5cGUgZmxhZ3MKKyAqCisgKiBAQlVGX0hUOiBTZW5kIHRoaXMgYnVmZmVyIHVzaW5nIEhUIGNhcGFiaWxpdGllcworICogQEJVRl9BTVBEVTogVGhpcyBidWZmZXIgaXMgYW4gYW1wZHUsIGFzIHBhcnQgb2YgYW4gYWdncmVnYXRlIChkdXJpbmcgVFgpCisgKiBAQlVGX0FHR1I6IEluZGljYXRlcyB3aGV0aGVyIHRoZSBidWZmZXIgY2FuIGJlIGFnZ3JlZ2F0ZWQKKyAqCSh1c2VkIGluIGFnZ3JlZ2F0aW9uIHNjaGVkdWxpbmcpCisgKiBAQlVGX1JFVFJZOiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVmZmVyIGlzIHJldHJpZWQKKyAqIEBCVUZfWFJFVFJZOiBUbyBkZW5vdGUgZXhjZXNzaXZlIHJldHJpZXMgb2YgdGhlIGJ1ZmZlcgorICovCitlbnVtIGJ1ZmZlcl90eXBlIHsKKwlCVUZfSFQJCQk9IEJJVCgxKSwKKwlCVUZfQU1QRFUJCT0gQklUKDIpLAorCUJVRl9BR0dSCQk9IEJJVCgzKSwKKwlCVUZfUkVUUlkJCT0gQklUKDQpLAorCUJVRl9YUkVUUlkJCT0gQklUKDUpLAogfTsKIAotI2RlZmluZSBBVEg5S19SWEVSUl9DUkMgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIOUtfUlhFUlJfUEhZICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFUSDlLX1JYRVJSX0ZJRk8gICAgICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19SWEVSUl9ERUNSWVBUICAgICAgIDB4MDgKLSNkZWZpbmUgQVRIOUtfUlhFUlJfTUlDICAgICAgICAgICAweDEwCi0KLSNkZWZpbmUgQVRIOUtfUlhfTU9SRSAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1JYX01PUkVfQUdHUiAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19SWF9HSSAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfUlhfMjA0MCAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1JYX0RFTElNX0NSQ19QUkUgICAgMHgxMAotI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUE9TVCAgIDB4MjAKLSNkZWZpbmUgQVRIOUtfUlhfREVDUllQVF9CVVNZICAgICAweDQwCi0KLSNkZWZpbmUgQVRIOUtfUlhLRVlJWF9JTlZBTElECSgodTgpLTEpCi0jZGVmaW5lIEFUSDlLX1RYS0VZSVhfSU5WQUxJRAkoKHUzMiktMSkKLQotc3RydWN0IGF0aF9kZXNjIHsKLQl1MzIgZHNfbGluazsKLQl1MzIgZHNfZGF0YTsKLQl1MzIgZHNfY3RsMDsKLQl1MzIgZHNfY3RsMTsKLQl1MzIgZHNfaHdbMjBdOwotCXVuaW9uIHsKLQkJc3RydWN0IGF0aF90eF9zdGF0dXMgdHg7Ci0JCXN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4OwotCQl2b2lkICpzdGF0czsKLQl9IGRzX3VzOwotCXZvaWQgKmRzX3ZkYXRhOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZQlkc190eHN0YXQJZHNfdXMudHgKLSNkZWZpbmUJZHNfcnhzdGF0CWRzX3VzLnJ4Ci0jZGVmaW5lIGRzX3N0YXQJCWRzX3VzLnN0YXRzCi0KLSNkZWZpbmUgQVRIOUtfVFhERVNDX0NMUkRNQVNLCQkweDAwMDEKLSNkZWZpbmUgQVRIOUtfVFhERVNDX05PQUNLCQkweDAwMDIKLSNkZWZpbmUgQVRIOUtfVFhERVNDX1JUU0VOQQkJMHgwMDA0Ci0jZGVmaW5lIEFUSDlLX1RYREVTQ19DVFNFTkEJCTB4MDAwOAotLyogQVRIOUtfVFhERVNDX0lOVFJFUSBmb3JjZXMgYSB0eCBpbnRlcnJ1cHQgdG8gYmUgZ2VuZXJhdGVkIGZvcgotICogdGhlIGRlc2NyaXB0b3IgaXRzIG1hcmtlZCBvbi4gIFdlIHRha2UgYSB0eCBpbnRlcnJ1cHQgdG8gcmVhcAotICogZGVzY3JpcHRvcnMgd2hlbiB0aGUgaC93IGhpdHMgYW4gRU9MIGNvbmRpdGlvbiBvcgotICogd2hlbiB0aGUgZGVzY3JpcHRvciBpcyBzcGVjaWZpY2FsbHkgbWFya2VkIHRvIGdlbmVyYXRlCi0gKiBhbiBpbnRlcnJ1cHQgd2l0aCB0aGlzIGZsYWcuIERlc2NyaXB0b3JzIHNob3VsZCBiZQotICogbWFya2VkIHBlcmlvZGljYWxseSB0byBpbnN1cmUgdGltZWx5IHJlcGxlbmlzaGluZyBvZiB0aGUKLSAqIHN1cHBseSBuZWVkZWQgZm9yIHNlbmRpbmcgZnJhbWVzLiBEZWZlcmluZyBpbnRlcnJ1cHRzCi0gKiByZWR1Y2VzIHN5c3RlbSBsb2FkIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgbW9yZSBjb25jdXJyZW50Ci0gKiB3b3JrIHRvIGJlIGRvbmUgYnV0IGlmIGRvbmUgdG8gYWdncmVzc2l2ZWx5IGNhbiBjYXVzZQotICogc2VuZGVycyB0byBiYWNrdXAuIFdoZW4gdGhlIGhhcmR3YXJlIHF1ZXVlIGlzIGxlZnQgdG9vCi0gKiBsYXJnZSByYXRlIGNvbnRyb2wgaW5mb3JtYXRpb24gbWF5IGFsc28gYmUgdG9vIG91dCBvZgotICogZGF0ZS4gQW4gQWx0ZXJuYXRpdmUgZm9yIHRoaXMgaXMgVFggaW50ZXJydXB0IG1pdGlnYXRpb24KLSAqIGJ1dCB0aGlzIG5lZWRzIG1vcmUgdGVzdGluZy4gKi8KLSNkZWZpbmUgQVRIOUtfVFhERVNDX0lOVFJFUQkJMHgwMDEwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19WRU9MCQkweDAwMjAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0VYVF9PTkxZCQkweDAwNDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0VYVF9BTkRfQ1RMCTB4MDA4MAotI2RlZmluZSBBVEg5S19UWERFU0NfVk1GCQkweDAxMDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0ZSQUdfSVNfT04gCTB4MDIwMAotI2RlZmluZSBBVEg5S19UWERFU0NfQ0FCCQkweDA0MDAKLQotI2RlZmluZSBBVEg5S19SWERFU0NfSU5UUkVRCQkweDAwMjAKLQotZW51bSB3aXJlbGVzc19tb2RlIHsKLQlBVEg5S19NT0RFXzExQSA9IDAsCi0JQVRIOUtfTU9ERV8xMUIgPSAyLAotCUFUSDlLX01PREVfMTFHID0gMywKLQlBVEg5S19NT0RFXzExTkFfSFQyMCA9IDYsCi0JQVRIOUtfTU9ERV8xMU5HX0hUMjAgPSA3LAotCUFUSDlLX01PREVfMTFOQV9IVDQwUExVUyA9IDgsCi0JQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUyA9IDksCi0JQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTID0gMTAsCi0JQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUyA9IDExLAotCUFUSDlLX01PREVfTUFYCitzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7CisJaW50IGJmc19uZnJhbWVzOworCXUxNiBiZnNfYWw7CisJdTE2IGJmc19mcm1sZW47CisJaW50IGJmc19zZXFubzsKKwlpbnQgYmZzX3RpZG5vOworCWludCBiZnNfcmV0cmllczsKKwl1MzIgYmZfdHlwZTsKKwl1MzIgYmZzX2tleWl4OworCWVudW0gYXRoOWtfa2V5X3R5cGUgYmZzX2tleXR5cGU7CiB9OwogCi1lbnVtIGF0aDlrX2h3X2NhcHMgewotCUFUSDlLX0hXX0NBUF9DSEFOX1NQUkVBRAkJPSBCSVQoMCksCi0JQVRIOUtfSFdfQ0FQX01JQ19BRVNDQ00gICAgICAgICAgICAgICAgID0gQklUKDEpLAotCUFUSDlLX0hXX0NBUF9NSUNfQ0tJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgyKSwKLQlBVEg5S19IV19DQVBfTUlDX1RLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCi0JQVRIOUtfSFdfQ0FQX0NJUEhFUl9BRVNDQ00gICAgICAgICAgICAgID0gQklUKDQpLAotCUFUSDlLX0hXX0NBUF9DSVBIRVJfQ0tJUCAgICAgICAgICAgICAgICA9IEJJVCg1KSwKLQlBVEg5S19IV19DQVBfQ0lQSEVSX1RLSVAgICAgICAgICAgICAgICAgPSBCSVQoNiksCi0JQVRIOUtfSFdfQ0FQX1ZFT0wgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDcpLAotCUFUSDlLX0hXX0NBUF9CU1NJRE1BU0sgICAgICAgICAgICAgICAgICA9IEJJVCg4KSwKLQlBVEg5S19IV19DQVBfTUNBU1RfS0VZU0VBUkNIICAgICAgICAgICAgPSBCSVQoOSksCi0JQVRIOUtfSFdfQ0FQX0NIQU5fSEFMRlJBVEUgICAgICAgICAgICAgID0gQklUKDEwKSwKLQlBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSAgICAgICAgICAgPSBCSVQoMTEpLAotCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMiksCi0JQVRIOUtfSFdfQ0FQX0dUVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKLQlBVEg5S19IV19DQVBfRkFTVENDICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAotCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCi0JQVRIOUtfSFdfQ0FQX1dPVyAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE2KSwKLQlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTcpLAotCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgxOCksCi0JQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCAgICAgICAgICAgICAgICAgID0gQklUKDE5KSwKLQlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoMjApLAotCUFUSDlLX0hXX0NBUF9XT1dfTUFUQ0hQQVRURVJOX0VYQUNUICAgICA9IEJJVCgyMSksCisjZGVmaW5lIGJmX25mcmFtZXMgICAgICAJYmZfc3RhdGUuYmZzX25mcmFtZXMKKyNkZWZpbmUgYmZfYWwgICAgICAgICAgIAliZl9zdGF0ZS5iZnNfYWwKKyNkZWZpbmUgYmZfZnJtbGVuICAgICAgIAliZl9zdGF0ZS5iZnNfZnJtbGVuCisjZGVmaW5lIGJmX3JldHJpZXMgICAgICAJYmZfc3RhdGUuYmZzX3JldHJpZXMKKyNkZWZpbmUgYmZfc2Vxbm8gICAgICAgIAliZl9zdGF0ZS5iZnNfc2Vxbm8KKyNkZWZpbmUgYmZfdGlkbm8gICAgICAgIAliZl9zdGF0ZS5iZnNfdGlkbm8KKyNkZWZpbmUgYmZfa2V5aXggICAgICAgICAgICAgICAgYmZfc3RhdGUuYmZzX2tleWl4CisjZGVmaW5lIGJmX2tleXR5cGUgICAgICAJYmZfc3RhdGUuYmZzX2tleXR5cGUKKyNkZWZpbmUgYmZfaXNodChiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9IVCkKKyNkZWZpbmUgYmZfaXNhbXBkdShiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9BTVBEVSkKKyNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCisjZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQorI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQorCitzdHJ1Y3QgYXRoX2J1ZiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0YmY7CS8qIGxhc3QgYnVmIG9mIHRoaXMgdW5pdCAoYSBmcmFtZSBvcgorCQkJCQkgICBhbiBhZ2dyZWdhdGUpICovCisJc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLworCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLworCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KKwlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCisJZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KKwl1MzIgYmZfc3RhdHVzOworCXUxNiBiZl9mbGFnczsKKwlzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSBiZl9zdGF0ZTsKKwlkbWFfYWRkcl90IGJmX2RtYWNvbnRleHQ7CiB9OwogCi1lbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB7Ci0JQVRIOUtfQ0FQX0NJUEhFUiA9IDAsCi0JQVRIOUtfQ0FQX1RLSVBfTUlDLAotCUFUSDlLX0NBUF9US0lQX1NQTElULAotCUFUSDlLX0NBUF9QSFlDT1VOVEVSUywKLQlBVEg5S19DQVBfRElWRVJTSVRZLAotCUFUSDlLX0NBUF9UWFBPVywKLQlBVEg5S19DQVBfUEhZRElBRywKLQlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKLQlBVEg5S19DQVBfVFNGX0FESlVTVCwKLQlBVEg5S19DQVBfV01FX1RLSVBNSUMsCi0JQVRIOUtfQ0FQX1JGU0lMRU5ULAotCUFUSDlLX0NBUF9BTlRfQ0ZHXzJHSFosCi0JQVRIOUtfQ0FQX0FOVF9DRkdfNUdIWgorI2RlZmluZSBBVEhfUlhCVUZfUkVTRVQoX2JmKSAgICAoKF9iZiktPmJmX3N0YXR1cyA9IDApCisjZGVmaW5lIEFUSF9CVUZTVEFUVVNfU1RBTEUgICAgIDB4MDAwMDAwMDIKKworc3RydWN0IGF0aF9kZXNjZG1hIHsKKwljb25zdCBjaGFyICpkZF9uYW1lOworCXN0cnVjdCBhdGhfZGVzYyAqZGRfZGVzYzsKKwlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CisJdTMyIGRkX2Rlc2NfbGVuOworCXN0cnVjdCBhdGhfYnVmICpkZF9idWZwdHI7CisJZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwogfTsKIAotc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyB7Ci0JdTMyIGh3X2NhcHM7IC8qIEFUSDlLX0hXX0NBUF8qIGZyb20gYXRoOWtfaHdfY2FwcyAqLwotCURFQ0xBUkVfQklUTUFQKHdpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7IC8qIEFUSDlLX01PREVfKiAqLwotCXUxNiB0b3RhbF9xdWV1ZXM7Ci0JdTE2IGtleWNhY2hlX3NpemU7Ci0JdTE2IGxvd181Z2h6X2NoYW4sIGhpZ2hfNWdoel9jaGFuOwotCXUxNiBsb3dfMmdoel9jaGFuLCBoaWdoXzJnaHpfY2hhbjsKLQl1MTYgbnVtX21yX3JldHJpZXM7Ci0JdTE2IHJ0c19hZ2dyX2xpbWl0OworaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKK3ZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKKworLyoqKioqKioqKioqLworLyogUlggLyBUWCAqLworLyoqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKKyNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCisjZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMworI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAorI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0CisjZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0CisjZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQorI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCisKKyNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCisJKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAorCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKKwkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCisJIFdNRV9BQ19WTykKKworI2RlZmluZSBXTUVfQUNfQkUgICAwCisjZGVmaW5lIFdNRV9BQ19CSyAgIDEKKyNkZWZpbmUgV01FX0FDX1ZJICAgMgorI2RlZmluZSBXTUVfQUNfVk8gICAzCisjZGVmaW5lIFdNRV9OVU1fQUMgIDQKKworI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAorI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0CisjZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCisvKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCisjZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCisvKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCisjZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKKyNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKKyNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX01BWCAgICAgICAgKDY0ICogMTAyNCAtIDEpCisjZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICAgIEFUSF9BTVBEVV9MSU1JVF9NQVgKKworI2RlZmluZSBJRUVFODAyMTFfU0VRX1NFUV9TSElGVCAgICA0CisjZGVmaW5lIElFRUU4MDIxMV9TRVFfTUFYICAgICAgICAgIDQwOTYKKyNkZWZpbmUgSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgICAgMHg4CisjZGVmaW5lIElFRUU4MDIxMV9IVENBUF9NQVhSWEFNUERVX0ZBQ1RPUiAxMworI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgICAzCisjZGVmaW5lIElFRUU4MDIxMV9XRVBfS0lETEVOICAgICAgIDEKKyNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgICAgNAorI2RlZmluZSBJRUVFODAyMTFfTUFYX01QRFVfTEVOICAgICAoMzg0MCArIEZDU19MRU4gKwkJXAorCQkJCSAgICAoSUVFRTgwMjExX1dFUF9JVkxFTiArCVwKKwkJCQkgICAgIElFRUU4MDIxMV9XRVBfS0lETEVOICsJXAorCQkJCSAgICAgSUVFRTgwMjExX1dFUF9DUkNMRU4pKQorCisvKiByZXR1cm4gd2hldGhlciBhIGJpdCBhdCBpbmRleCBfbiBpbiBiaXRtYXAgX2JtIGlzIHNldAorICogX3N6IGlzIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgICovCisjZGVmaW5lIEFUSF9CQV9JU1NFVChfYm0sIF9uKSAgKCgoX24pIDwgKFdNRV9CQV9CTVBfU0laRSkpICYmCQlcCisJCQkJKChfYm0pWyhfbikgPj4gNV0gJiAoMSA8PCAoKF9uKSAmIDMxKSkpKQorCisvKiByZXR1cm4gYmxvY2stYWNrIGJpdG1hcCBpbmRleCBnaXZlbiBzZXF1ZW5jZSBhbmQgc3RhcnRpbmcgc2VxdWVuY2UgKi8KKyNkZWZpbmUgQVRIX0JBX0lOREVYKF9zdCwgX3NlcSkgKCgoX3NlcSkgLSAoX3N0KSkgJiAoSUVFRTgwMjExX1NFUV9NQVggLSAxKSkKKworLyogcmV0dXJucyBkZWxpbWl0ZXIgcGFkZGluZyByZXF1aXJlZCBnaXZlbiB0aGUgcGFja2V0IGxlbmd0aCAqLworI2RlZmluZSBBVEhfQUdHUl9HRVRfTkRFTElNKF9sZW4pCQkJCQlcCisJKCgoKChfbGVuKSArIEFUSF9BR0dSX0RFTElNX1NaKSA8IEFUSF9BR0dSX01JTlBMRU4pID8gICAgICAgICAgIFwKKwkgIChBVEhfQUdHUl9NSU5QTEVOIC0gKF9sZW4pIC0gQVRIX0FHR1JfREVMSU1fU1opIDogMCkgPj4gMikKKworI2RlZmluZSBCQVdfV0lUSElOKF9zdGFydCwgX2Jhd3N6LCBfc2Vxbm8pIFwKKwkoKCgoX3NlcW5vKSAtIChfc3RhcnQpKSAmIDQwOTUpIDwgKF9iYXdzeikpCisKKyNkZWZpbmUgQVRIX0RTX0JBX1NFUShfZHMpICAgICAgICAgKChfZHMpLT5kc191cy50eC50c19zZXFudW0pCisjZGVmaW5lIEFUSF9EU19CQV9CSVRNQVAoX2RzKSAgICAgICgmKF9kcyktPmRzX3VzLnR4LmJhX2xvdykKKyNkZWZpbmUgQVRIX0RTX1RYX0JBKF9kcykgICAgICAgICAgKChfZHMpLT5kc191cy50eC50c19mbGFncyAmIEFUSDlLX1RYX0JBKQorI2RlZmluZSBBVEhfQU5fMl9USUQoX2FuLCBfdGlkbm8pICAoJihfYW4pLT50aWRbKF90aWRubyldKQorCitlbnVtIEFUSF9BR0dSX1NUQVRVUyB7CisJQVRIX0FHR1JfRE9ORSwKKwlBVEhfQUdHUl9CQVdfQ0xPU0VELAorCUFUSF9BR0dSX0xJTUlURUQsCit9OworCitzdHJ1Y3QgYXRoX3R4cSB7CisJdTMyIGF4cV9xbnVtOworCXUzMiAqYXhxX2xpbms7CisJc3RydWN0IGxpc3RfaGVhZCBheHFfcTsKKwlzcGlubG9ja190IGF4cV9sb2NrOworCXUzMiBheHFfZGVwdGg7CisJdTggYXhxX2FnZ3JfZGVwdGg7CisJdTMyIGF4cV90b3RhbHF1ZXVlZDsKKwlib29sIHN0b3BwZWQ7CisJc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOworCisJLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCisJc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKKworCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCisJICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCisJc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Cit9OworCisjZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQorI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKKyNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCisKK3N0cnVjdCBhdGhfYXR4X3RpZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CisJc3RydWN0IGF0aF9idWYgKnR4X2J1ZltBVEhfVElEX01BWF9CVUZTXTsKKwl1MTYgc2VxX3N0YXJ0OworCXUxNiBzZXFfbmV4dDsKKwl1MTYgYmF3X3NpemU7CisJaW50IHRpZG5vOworCWludCBiYXdfaGVhZDsJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCisJaW50IGJhd190YWlsOwkvKiBuZXh0IHVudXNlZCB0eCBidWZmZXIgc2xvdCAqLworCWludCBzY2hlZDsKKwlpbnQgcGF1c2VkOworCXU4IHN0YXRlOworCWludCBhZGRiYV9leGNoYW5nZWF0dGVtcHRzOworfTsKKworc3RydWN0IGF0aF9hdHhfYWMgeworCWludCBzY2hlZDsKKwlpbnQgcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKK307CisKK3N0cnVjdCBhdGhfdHhfY29udHJvbCB7CisJc3RydWN0IGF0aF90eHEgKnR4cTsKKwlpbnQgaWZfaWQ7CisJZW51bSBhdGg5a19pbnRlcm5hbF9mcmFtZV90eXBlIGZyYW1lX3R5cGU7Cit9OworCisjZGVmaW5lIEFUSF9UWF9FUlJPUiAgICAgICAgMHgwMQorI2RlZmluZSBBVEhfVFhfWFJFVFJZICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIX1RYX0JBUiAgICAgICAgICAweDA0CisKKy8qIEFsbCBSU1NJIHZhbHVlcyBhcmUgbm9pc2UgZmxvb3IgYWRqdXN0ZWQgKi8KK3N0cnVjdCBhdGhfdHhfc3RhdCB7CisJaW50IHJzc2k7CisJaW50IHJzc2ljdGxbQVRIX01BWF9BTlRFTk5BXTsKKwlpbnQgcnNzaWV4dG5bQVRIX01BWF9BTlRFTk5BXTsKKwlpbnQgcmF0ZWllZWU7CisJaW50IHJhdGVLYnBzOworCWludCByYXRlY29kZTsKKwlpbnQgZmxhZ3M7CisJdTMyIGFpcnRpbWU7CS8qIHRpbWUgb24gYWlyIHBlciBmaW5hbCB0eCByYXRlICovCit9OworCitzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtIHsKKwlpbnQgcGFyYW1fbWF4X2ZyYW1lczsKKwlpbnQgcGFyYW1fbWF4X2xlbjsKKwlpbnQgcGFyYW1fcmw7CisJaW50IHBhcmFtX2FsOworCXN0cnVjdCBhdGhfcmNfc2VyaWVzICpwYXJhbV9yY3M7Cit9OworCitzdHJ1Y3QgYXRoX25vZGUgeworCXN0cnVjdCBhdGhfc29mdGMgKmFuX3NjOworCXN0cnVjdCBhdGhfYXR4X3RpZCB0aWRbV01FX05VTV9USURdOworCXN0cnVjdCBhdGhfYXR4X2FjIGFjW1dNRV9OVU1fQUNdOworCXUxNiBtYXhhbXBkdTsKKwl1OCBtcGR1ZGVuc2l0eTsKK307CisKK3N0cnVjdCBhdGhfdHggeworCXUxNiBzZXFfbm87CisJdTMyIHR4cXNldHVwOworCWludCBod3FfbWFwW0FUSDlLX1dNRV9BQ19WTysxXTsKKwlzcGlubG9ja190IHR4YnVmbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmOworCXN0cnVjdCBhdGhfdHhxIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKKwlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhkbWE7Cit9OworCitzdHJ1Y3QgYXRoX3J4IHsKKwl1OCBkZWZhbnQ7CisJdTggcnhvdGhlcmFudDsKKwl1MzIgKnJ4bGluazsKKwlpbnQgYnVmc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhmaWx0ZXI7CisJc3BpbmxvY2tfdCByeGZsdXNobG9jazsKKwlzcGlubG9ja190IHJ4YnVmbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4YnVmOworCXN0cnVjdCBhdGhfZGVzY2RtYSByeGRtYTsKK307CisKK2ludCBhdGhfc3RhcnRyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2Jvb2wgYXRoX3N0b3ByZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX2ZsdXNocmVjdihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit1MzIgYXRoX2NhbGNyeGZpbHRlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoX3J4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcyk7Cit2b2lkIGF0aF9yeF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfcnhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGZsdXNoKTsKK3N0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKK3ZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKK2ludCBhdGhfdHhfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBoYWx0eXBlKTsKK3ZvaWQgYXRoX2RyYWluX2FsbF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwordm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Cit2b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwordm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKK3ZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSk7CitpbnQgYXRoX3R4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcyk7CitpbnQgYXRoX3R4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKKwkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOworaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwordm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2Jvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKTsKK2ludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pOworaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwordm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOworCisvKioqKioqKiovCisvKiBWSUZzICovCisvKioqKioqKiovCisKK3N0cnVjdCBhdGhfdmlmIHsKKwlpbnQgYXZfYnNsb3Q7CisJX19sZTY0IHRzZl9hZGp1c3Q7IC8qIFRTRiBhZGp1c3RtZW50IGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLworCWVudW0gbmw4MDIxMV9pZnR5cGUgYXZfb3Btb2RlOworCXN0cnVjdCBhdGhfYnVmICphdl9iY2J1ZjsKKwlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgYXZfYnR4Y3RsOworCXU4IGJzc2lkW0VUSF9BTEVOXTsgLyogY3VycmVudCBCU1NJRCBmcm9tIGNvbmZpZ19pbnRlcmZhY2UgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqLworLyogQmVhY29uIEhhbmRsaW5nICovCisvKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCisgKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKKyAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgorICovCisjZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKKyNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTQKKyNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLworI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKKyNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKKworc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTE2IGR0aW1fcGVyaW9kOworCXUxNiBibWlzc190aW1lb3V0OworCXU4IGR0aW1fY291bnQ7Cit9OworCitzdHJ1Y3QgYXRoX2JlYWNvbiB7CisJZW51bSB7CisJCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLworCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLworCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCisJfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KKworCXUzMiBiZWFjb25xOworCXUzMiBibWlzc2NudDsKKwl1MzIgYXN0X2JlX3htaXQ7CisJdTY0IGJjX3RzdGFtcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIX0JDQlVGXTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICpic2xvdF9hcGh5W0FUSF9CQ0JVRl07CisJaW50IHNsb3R0aW1lOworCWludCBzbG90dXBkYXRlOworCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIGJlYWNvbl9xaTsKKwlzdHJ1Y3QgYXRoX2Rlc2NkbWEgYmRtYTsKKwlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJidWY7Cit9OworCit2b2lkIGF0aF9iZWFjb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOworaW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF93aXBoeSAqYXBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKTsKKworLyoqKioqKiovCisvKiBBTkkgKi8KKy8qKioqKioqLworCisjZGVmaW5lIEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUwgMTAwMCAgICAvKiAxIHNlY29uZCAqLworI2RlZmluZSBBVEhfQVBfU0hPUlRfQ0FMSU5URVJWQUwgIDEwMCAgICAgLyogMTAwIG1zICovCisjZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgICAgMTAwICAgICAvKiAxMDAgbXMgKi8KKyNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgICAzMDAwMCAgIC8qIDMwIHNlY29uZHMgKi8KKyNkZWZpbmUgQVRIX1JFU1RBUlRfQ0FMSU5URVJWQUwgICAxMjAwMDAwIC8qIDIwIG1pbnV0ZXMgKi8KKworc3RydWN0IGF0aF9hbmkgeworCWJvb2wgY2FsZG9uZTsKKwlpbnQxNl90IG5vaXNlX2Zsb29yOworCXVuc2lnbmVkIGludCBsb25nY2FsX3RpbWVyOworCXVuc2lnbmVkIGludCBzaG9ydGNhbF90aW1lcjsKKwl1bnNpZ25lZCBpbnQgcmVzZXRjYWxfdGltZXI7CisJdW5zaWduZWQgaW50IGNoZWNrYW5pX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogICBMRUQgQ29udHJvbCAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9MRURfUElOCTEKKyNkZWZpbmUgQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFCTM1MAkvKiBpbiBtc2VjcyAqLworI2RlZmluZSBBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFCTI1MAkvKiBpbiBtc2VjcyAqLworCitlbnVtIGF0aF9sZWRfdHlwZSB7CisJQVRIX0xFRF9SQURJTywKKwlBVEhfTEVEX0FTU09DLAorCUFUSF9MRURfVFgsCisJQVRIX0xFRF9SWAorfTsKKworc3RydWN0IGF0aF9sZWQgeworCXN0cnVjdCBhdGhfc29mdGMgKnNjOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7CisJZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7CisJY2hhciBuYW1lWzMyXTsKKwlib29sIHJlZ2lzdGVyZWQ7Cit9OworCisvKiBSZmtpbGwgKi8KKyNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KKworc3RydWN0IGF0aF9yZmtpbGwgeworCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCWNoYXIgcmZraWxsX25hbWVbMzJdOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTWFpbiBkcml2ZXIgY29yZSAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgorICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUworKi8KKyNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKKyNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1CisjZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCisjZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KKyNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKKyNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1CisjZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KKworLyoKKyAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKKyAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgorICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCisgKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KKyAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKKyAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgorICovCisjZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KKworI2RlZmluZSBBVEhfVFhQT1dFUl9NQVggICAgICAgICAxMDAgICAgIC8qIC41IGRCbSB1bml0cyAqLworI2RlZmluZSBBVEhfUlNTSV9EVU1NWV9NQVJLRVIgICAweDEyNworI2RlZmluZSBBVEhfUkFURV9EVU1NWV9NQVJLRVIgICAwCisKKyNkZWZpbmUgU0NfT1BfSU5WQUxJRCAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFNDX09QX0JFQUNPTlMgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBTQ19PUF9SWEFHR1IgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lIFNDX09QX0NIQUlOTUFTS19VUERBVEUgIEJJVCg0KQorI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUICAgICAgICBCSVQoNSkKKyNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQgICAgQklUKDYpCisjZGVmaW5lIFNDX09QX1BST1RFQ1RfRU5BQkxFICAgIEJJVCg3KQorI2RlZmluZSBTQ19PUF9SWEZMVVNIICAgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgU0NfT1BfTEVEX0FTU09DSUFURUQgICAgQklUKDkpCisjZGVmaW5lIFNDX09QX1JGS0lMTF9SRUdJU1RFUkVEIEJJVCgxMCkKKyNkZWZpbmUgU0NfT1BfUkZLSUxMX1NXX0JMT0NLRUQgQklUKDExKQorI2RlZmluZSBTQ19PUF9SRktJTExfSFdfQkxPQ0tFRCBCSVQoMTIpCisjZGVmaW5lIFNDX09QX1dBSVRfRk9SX0JFQUNPTiAgIEJJVCgxMykKKyNkZWZpbmUgU0NfT1BfTEVEX09OICAgICAgICAgICAgQklUKDE0KQorI2RlZmluZSBTQ19PUF9TQ0FOTklORyAgICAgICAgICBCSVQoMTUpCisjZGVmaW5lIFNDX09QX1RTRl9SRVNFVCAgICAgICAgIEJJVCgxNikKKworc3RydWN0IGF0aF9idXNfb3BzIHsKKwl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opOworCXZvaWQJCSgqY2xlYW51cCkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworCWJvb2wJCSgqZWVwcm9tX3JlYWQpKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOworfTsKKworc3RydWN0IGF0aF93aXBoeTsKKworc3RydWN0IGF0aF9zb2Z0YyB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJc3BpbmxvY2tfdCB3aXBoeV9sb2NrOyAvKiBzcGlubG9jayB0byBwcm90ZWN0IGF0aF93aXBoeSBkYXRhICovCisJc3RydWN0IGF0aF93aXBoeSAqcHJpX3dpcGh5OworCXN0cnVjdCBhdGhfd2lwaHkgKipzZWNfd2lwaHk7IC8qIHNlY29uZGFyeSB3aXBoeXMgKHZpcnR1YWwgcmFkaW9zKTsgbWF5CisJCQkJICAgICAgICogaGF2ZSBOVUxMIGVudHJpZXMgKi8KKwlpbnQgbnVtX3NlY193aXBoeTsgLyogbnVtYmVyIG9mIHNlY193aXBoeSBwb2ludGVycyBpbiB0aGUgYXJyYXkgKi8KKwlpbnQgY2hhbl9pZHg7CisJaW50IGNoYW5faXNfaHQ7CisJc3RydWN0IGF0aF93aXBoeSAqbmV4dF93aXBoeTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hhbl93b3JrOworCWludCB3aXBoeV9zZWxlY3RfZmFpbHVyZXM7CisJdW5zaWduZWQgbG9uZyB3aXBoeV9zZWxlY3RfZmlyc3RfZmFpbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdpcGh5X3dvcms7CisJdW5zaWduZWQgbG9uZyB3aXBoeV9zY2hlZHVsZXJfaW50OworCWludCB3aXBoeV9zY2hlZHVsZXJfaW5kZXg7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaW50cl90cTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYmNvbl90YXNrbGV0OworCXN0cnVjdCBhdGhfaHcgKnNjX2FoOworCXZvaWQgX19pb21lbSAqbWVtOworCWludCBpcnE7CisJc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7CisJc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJdTggY3VyYnNzaWRbRVRIX0FMRU5dOworCXU4IGJzc2lkbWFza1tFVEhfQUxFTl07CisJdTMyIGludHJzdGF0dXM7CisJdTMyIHNjX2ZsYWdzOyAvKiBTQ19PUF8qICovCisJdTE2IGN1cnR4cG93OworCXUxNiBjdXJhaWQ7CisJdTE2IGNhY2hlbHN6OworCXU4IG5iY252aWZzOworCXUxNiBudmlmczsKIAl1OCB0eF9jaGFpbm1hc2s7CiAJdTggcnhfY2hhaW5tYXNrOwotCXUxNiB0eF90cmlnbGV2ZWxfbWF4OwotCXUxNiByZWdfY2FwOwotCXU4IG51bV9ncGlvX3BpbnM7Ci0JdTggbnVtX2FudGNmZ18yZ2h6OwotCXU4IG51bV9hbnRjZmdfNWdoejsKLX07Ci0KLXN0cnVjdCBhdGg5a19vcHNfY29uZmlnIHsKLQlpbnQgZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lOwotCWludCBzd19iZWFjb25fcmVzcG9uc2VfdGltZTsKLQlpbnQgYWRkaXRpb25hbF9zd2JhX2JhY2tvZmY7Ci0JaW50IGFja182bWI7Ci0JaW50IGN3bV9pZ25vcmVfZXh0Y2NhOwotCXU4IHBjaWVfcG93ZXJzYXZlX2VuYWJsZTsKLQl1OCBwY2llX2wxc2twX2VuYWJsZTsKLQl1OCBwY2llX2Nsb2NrX3JlcTsKLQl1MzIgcGNpZV93YWVuOwotCWludCBwY2llX3Bvd2VyX3Jlc2V0OwotCXU4IHBjaWVfcmVzdG9yZTsKLQl1OCBhbmFsb2dfc2hpZnRyZWc7Ci0JdTggaHRfZW5hYmxlOwotCXUzMiBvZmRtX3RyaWdfbG93OwotCXUzMiBvZmRtX3RyaWdfaGlnaDsKLQl1MzIgY2NrX3RyaWdfaGlnaDsKLQl1MzIgY2NrX3RyaWdfbG93OwotCXUzMiBlbmFibGVfYW5pOwotCXU4IG5vaXNlX2ltbXVuaXR5X2xldmVsOwotCXUzMiBvZmRtX3dlYWtzaWduYWxfZGV0OwotCXUzMiBjY2tfd2Vha3NpZ25hbF90aHI7Ci0JdTggc3B1cl9pbW11bml0eV9sZXZlbDsKLQl1OCBmaXJzdGVwX2xldmVsOwotCWludDhfdCByc3NpX3Rocl9oaWdoOwotCWludDhfdCByc3NpX3Rocl9sb3c7Ci0JdTE2IGRpdmVyc2l0eV9jb250cm9sOwotCXUxNiBhbnRlbm5hX3N3aXRjaF9zd2FwOwotCWludCBzZXJpYWxpemVfcmVnbW9kZTsKLQlpbnQgaW50cl9taXRpZ2F0aW9uOwotI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCi0jZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKLSNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgotI2RlZmluZSBBUl9FRVBST01fTU9EQUxfU1BVUlMgICA1Ci0jZGVmaW5lIEFSX1NQVVJfNTQxM18xICAgICAgCTE2NDAKLSNkZWZpbmUgQVJfU1BVUl81NDEzXzIgICAgICAJMTIwMAotI2RlZmluZSBBUl9OT19TUFVSICAgICAgCTB4ODAwMAotI2RlZmluZSBBUl9CQVNFX0ZSRVFfMkdIWiAgIAkyMzAwCi0jZGVmaW5lIEFSX0JBU0VfRlJFUV81R0haICAgCTQ5MDAKLSNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUNDAgMTkKLSNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUMjAgMTAKLQlpbnQgc3B1cm1vZGU7Ci0JdTE2IHNwdXJjaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdWzJdOwotfTsKLQotZW51bSBhdGg5a190eF9xdWV1ZSB7Ci0JQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUgPSAwLAotCUFUSDlLX1RYX1FVRVVFX0RBVEEsCi0JQVRIOUtfVFhfUVVFVUVfQkVBQ09OLAotCUFUSDlLX1RYX1FVRVVFX0NBQiwKLQlBVEg5S19UWF9RVUVVRV9VQVBTRCwKLQlBVEg5S19UWF9RVUVVRV9QU1BPTEwKLX07Ci0KLSNkZWZpbmUJQVRIOUtfTlVNX1RYX1FVRVVFUyAxMAotCi1lbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgewotCUFUSDlLX1dNRV9BQ19CSyA9IDAsCi0JQVRIOUtfV01FX0FDX0JFLAotCUFUSDlLX1dNRV9BQ19WSSwKLQlBVEg5S19XTUVfQUNfVk8sCi0JQVRIOUtfV01FX1VQU0QKLX07Ci0KLWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgewotCVRYUV9GTEFHX1RYT0tJTlRfRU5BQkxFID0gMHgwMDAxLAotCVRYUV9GTEFHX1RYRVJSSU5UX0VOQUJMRSA9IDB4MDAwMSwKLQlUWFFfRkxBR19UWERFU0NJTlRfRU5BQkxFID0gMHgwMDAyLAotCVRYUV9GTEFHX1RYRU9MSU5UX0VOQUJMRSA9IDB4MDAwNCwKLQlUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUgPSAweDAwMDgsCi0JVFhRX0ZMQUdfQkFDS09GRl9ESVNBQkxFID0gMHgwMDEwLAotCVRYUV9GTEFHX0NPTVBSRVNTSU9OX0VOQUJMRSA9IDB4MDAyMCwKLQlUWFFfRkxBR19SRFlUSU1FX0VYUF9QT0xJQ1lfRU5BQkxFID0gMHgwMDQwLAotCVRYUV9GTEFHX0ZSQUdfQlVSU1RfQkFDS09GRl9FTkFCTEUgPSAweDAwODAsCi19OwotCi0jZGVmaW5lIEFUSDlLX1RYUV9VU0VERUZBVUxUICgodTMyKSAtMSkKLQotI2RlZmluZSBBVEg5S19ERUNPTVBfTUFTS19TSVpFICAgICAxMjgKLSNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCAgNTAKLSNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCAgOTYKLQotZW51bSBhdGg5a19wa3RfdHlwZSB7Ci0JQVRIOUtfUEtUX1RZUEVfTk9STUFMID0gMCwKLQlBVEg5S19QS1RfVFlQRV9BVElNLAotCUFUSDlLX1BLVF9UWVBFX1BTUE9MTCwKLQlBVEg5S19QS1RfVFlQRV9CRUFDT04sCi0JQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUCwKLQlBVEg5S19QS1RfVFlQRV9DSElSUCwKLQlBVEg5S19QS1RfVFlQRV9HUlBfUE9MTCwKLX07Ci0KLXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHsKLQl1MzIgdHFpX3ZlcjsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlIHRxaV90eXBlOwotCWVudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB0cWlfc3VidHlwZTsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHRxaV9xZmxhZ3M7Ci0JdTMyIHRxaV9wcmlvcml0eTsKLQl1MzIgdHFpX2FpZnM7Ci0JdTMyIHRxaV9jd21pbjsKLQl1MzIgdHFpX2N3bWF4OwotCXUxNiB0cWlfc2hyZXRyeTsKLQl1MTYgdHFpX2xncmV0cnk7Ci0JdTMyIHRxaV9jYnJQZXJpb2Q7Ci0JdTMyIHRxaV9jYnJPdmVyZmxvd0xpbWl0OwotCXUzMiB0cWlfYnVyc3RUaW1lOwotCXUzMiB0cWlfcmVhZHlUaW1lOwotCXUzMiB0cWlfcGh5c0NvbXBCdWY7Ci0JdTMyIHRxaV9pbnRGbGFnczsKLX07Ci0KLWVudW0gYXRoOWtfcnhfZmlsdGVyIHsKLQlBVEg5S19SWF9GSUxURVJfVUNBU1QgPSAweDAwMDAwMDAxLAotCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVCA9IDB4MDAwMDAwMDIsCi0JQVRIOUtfUlhfRklMVEVSX0JDQVNUID0gMHgwMDAwMDAwNCwKLQlBVEg5S19SWF9GSUxURVJfQ09OVFJPTCA9IDB4MDAwMDAwMDgsCi0JQVRIOUtfUlhfRklMVEVSX0JFQUNPTiA9IDB4MDAwMDAwMTAsCi0JQVRIOUtfUlhfRklMVEVSX1BST00gPSAweDAwMDAwMDIwLAotCUFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUSA9IDB4MDAwMDAwODAsCi0JQVRIOUtfUlhfRklMVEVSX1BTUE9MTCA9IDB4MDAwMDQwMDAsCi0JQVRIOUtfUlhfRklMVEVSX1BIWUVSUiA9IDB4MDAwMDAxMDAsCi0JQVRIOUtfUlhfRklMVEVSX1BIWVJBREFSID0gMHgwMDAwMjAwMCwKLX07Ci0KLWVudW0gYXRoOWtfaW50IHsKLQlBVEg5S19JTlRfUlggPSAweDAwMDAwMDAxLAotCUFUSDlLX0lOVF9SWERFU0MgPSAweDAwMDAwMDAyLAotCUFUSDlLX0lOVF9SWE5PRlJNID0gMHgwMDAwMDAwOCwKLQlBVEg5S19JTlRfUlhFT0wgPSAweDAwMDAwMDEwLAotCUFUSDlLX0lOVF9SWE9STiA9IDB4MDAwMDAwMjAsCi0JQVRIOUtfSU5UX1RYID0gMHgwMDAwMDA0MCwKLQlBVEg5S19JTlRfVFhERVNDID0gMHgwMDAwMDA4MCwKLQlBVEg5S19JTlRfVElNX1RJTUVSID0gMHgwMDAwMDEwMCwKLQlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAotCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAotCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCi0JQVRIOUtfSU5UX1JYS0NNID0gMHgwMDAwODAwMCwKLQlBVEg5S19JTlRfU1dCQSA9IDB4MDAwMTAwMDAsCi0JQVRIOUtfSU5UX0JNSVNTID0gMHgwMDA0MDAwMCwKLQlBVEg5S19JTlRfQk5SID0gMHgwMDEwMDAwMCwKLQlBVEg5S19JTlRfVElNID0gMHgwMDIwMDAwMCwKLQlBVEg5S19JTlRfRFRJTSA9IDB4MDA0MDAwMDAsCi0JQVRIOUtfSU5UX0RUSU1TWU5DID0gMHgwMDgwMDAwMCwKLQlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCi0JQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCi0JQVRIOUtfSU5UX0NTVCA9IDB4MTAwMDAwMDAsCi0JQVRIOUtfSU5UX0dUVCA9IDB4MjAwMDAwMDAsCi0JQVRIOUtfSU5UX0ZBVEFMID0gMHg0MDAwMDAwMCwKLQlBVEg5S19JTlRfR0xPQkFMID0gMHg4MDAwMDAwMCwKLQlBVEg5S19JTlRfQk1JU0MgPSBBVEg5S19JTlRfVElNIHwKLQkJQVRIOUtfSU5UX0RUSU0gfAotCQlBVEg5S19JTlRfRFRJTVNZTkMgfAotCQlBVEg5S19JTlRfQ0FCRU5ELAotCUFUSDlLX0lOVF9DT01NT04gPSBBVEg5S19JTlRfUlhOT0ZSTSB8Ci0JCUFUSDlLX0lOVF9SWERFU0MgfAotCQlBVEg5S19JTlRfUlhFT0wgfAotCQlBVEg5S19JTlRfUlhPUk4gfAotCQlBVEg5S19JTlRfVFhVUk4gfAotCQlBVEg5S19JTlRfVFhERVNDIHwKLQkJQVRIOUtfSU5UX01JQiB8Ci0JCUFUSDlLX0lOVF9SWFBIWSB8Ci0JCUFUSDlLX0lOVF9SWEtDTSB8Ci0JCUFUSDlLX0lOVF9TV0JBIHwKLQkJQVRIOUtfSU5UX0JNSVNTIHwKLQkJQVRIOUtfSU5UX0dQSU8sCi0JQVRIOUtfSU5UX05PQ0FSRCA9IDB4ZmZmZmZmZmYKLX07Ci0KLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTICAweDAwMDEKLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU18yMDQwICAgICAweDAwMDIKLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU19IQUxGR0kgICAweDAwMDQKLQotc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyB7Ci0JdTMyIFRyaWVzOwotCXUzMiBSYXRlOwotCXUzMiBQa3REdXJhdGlvbjsKLQl1MzIgQ2hTZWw7Ci0JdTMyIFJhdGVGbGFnczsKLX07Ci0KLSNkZWZpbmUgQ0hBTk5FTF9DV19JTlQgICAgMHgwMDAwMgotI2RlZmluZSBDSEFOTkVMX0NDSyAgICAgICAweDAwMDIwCi0jZGVmaW5lIENIQU5ORUxfT0ZETSAgICAgIDB4MDAwNDAKLSNkZWZpbmUgQ0hBTk5FTF8yR0haICAgICAgMHgwMDA4MAotI2RlZmluZSBDSEFOTkVMXzVHSFogICAgICAweDAwMTAwCi0jZGVmaW5lIENIQU5ORUxfUEFTU0lWRSAgIDB4MDAyMDAKLSNkZWZpbmUgQ0hBTk5FTF9EWU4gICAgICAgMHgwMDQwMAotI2RlZmluZSBDSEFOTkVMX0hBTEYgICAgICAweDA0MDAwCi0jZGVmaW5lIENIQU5ORUxfUVVBUlRFUiAgIDB4MDgwMDAKLSNkZWZpbmUgQ0hBTk5FTF9IVDIwICAgICAgMHgxMDAwMAotI2RlZmluZSBDSEFOTkVMX0hUNDBQTFVTICAweDIwMDAwCi0jZGVmaW5lIENIQU5ORUxfSFQ0ME1JTlVTIDB4NDAwMDAKLQotI2RlZmluZSBDSEFOTkVMX0lOVEVSRkVSRU5DRSAgICAweDAxCi0jZGVmaW5lIENIQU5ORUxfREZTICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQ0hBTk5FTF80TVNfTElNSVQgICAgICAgMHgwNAotI2RlZmluZSBDSEFOTkVMX0RGU19DTEVBUiAgICAgICAweDA4Ci0jZGVmaW5lIENIQU5ORUxfRElTQUxMT1dfQURIT0MgIDB4MTAKLSNkZWZpbmUgQ0hBTk5FTF9QRVJfMTFEX0FESE9DICAgMHgyMAotCi0jZGVmaW5lIENIQU5ORUxfQSAgICAgICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE0pCi0jZGVmaW5lIENIQU5ORUxfQiAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0NDSykKLSNkZWZpbmUgQ0hBTk5FTF9HICAgICAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfT0ZETSkKLSNkZWZpbmUgQ0hBTk5FTF9HX0hUMjAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQyMCkKLSNkZWZpbmUgQ0hBTk5FTF9BX0hUMjAgICAgICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQyMCkKLSNkZWZpbmUgQ0hBTk5FTF9HX0hUNDBQTFVTICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQ0MFBMVVMpCi0jZGVmaW5lIENIQU5ORUxfR19IVDQwTUlOVVMgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBNSU5VUykKLSNkZWZpbmUgQ0hBTk5FTF9BX0hUNDBQTFVTICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQ0MFBMVVMpCi0jZGVmaW5lIENIQU5ORUxfQV9IVDQwTUlOVVMgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBNSU5VUykKLSNkZWZpbmUgQ0hBTk5FTF9BTEwJCQkJXAotCShDSEFOTkVMX09GRE18CQkJCVwKLQkgQ0hBTk5FTF9DQ0t8CQkJCVwKLQkgQ0hBTk5FTF8yR0haIHwJCQkJXAotCSBDSEFOTkVMXzVHSFogfAkJCQlcCi0JIENIQU5ORUxfSFQyMCB8CQkJCVwKLQkgQ0hBTk5FTF9IVDQwUExVUyB8CQkJXAotCSBDSEFOTkVMX0hUNDBNSU5VUykKLQotc3RydWN0IGF0aDlrX2NoYW5uZWwgewotCXUxNiBjaGFubmVsOwotCXUzMiBjaGFubmVsRmxhZ3M7Ci0JdTggcHJpdkZsYWdzOwotCWludDhfdCBtYXhSZWdUeFBvd2VyOwotCWludDhfdCBtYXhUeFBvd2VyOwotCWludDhfdCBtaW5UeFBvd2VyOwotCXUzMiBjaGFubW9kZTsKLQlpbnQzMl90IENhbFZhbGlkOwotCWJvb2wgb25lVGltZUNhbHNEb25lOwotCWludDhfdCBpQ29mZjsKLQlpbnQ4X3QgcUNvZmY7Ci0JaW50MTZfdCByYXdOb2lzZUZsb29yOwotCWludDhfdCBhbnRlbm5hTWF4OwotCXUzMiByZWdEbW5GbGFnczsKLQl1MzIgY29uZm9ybWFuY2VUZXN0TGltaXRbM107IC8qIDA6MTFhLCAxOiAxMWIsIDI6MTFnICovCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0Jc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgSVNfQ0hBTl9BKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0EpID09IENIQU5ORUxfQSkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUMjApID09IENIQU5ORUxfQV9IVDIwKSB8fCBcCi0gICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0MFBMVVMpID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fRyhfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgKENIQU5ORUxfRykpID09IENIQU5ORUxfRykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUMjApID09IENIQU5ORUxfR19IVDIwKSB8fCBcCi0gICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0MFBMVVMpID09IENIQU5ORUxfR19IVDQwUExVUykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fT0ZETShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX09GRE0pICE9IDApCi0jZGVmaW5lIElTX0NIQU5fNUdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApCi0jZGVmaW5lIElTX0NIQU5fMkdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzJHSFopICE9IDApCi0jZGVmaW5lIElTX0NIQU5fUEFTU0lWRShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpICE9IDApCi0jZGVmaW5lIElTX0NIQU5fSEFMRl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfSEFMRikgIT0gMCkKLSNkZWZpbmUgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9RVUFSVEVSKSAhPSAwKQotCi0vKiBUaGVzZSBtYWNyb3MgY2hlY2sgY2hhbm1vZGUgYW5kIG5vdCBjaGFubmVsRmxhZ3MgKi8KLSNkZWZpbmUgSVNfQ0hBTl9CKF9jKSAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9CKQotI2RlZmluZSBJU19DSEFOX0hUMjAoX2MpICgoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUMjApIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKSkKLSNkZWZpbmUgSVNfQ0hBTl9IVDQwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fAlcCi0JCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKLSNkZWZpbmUgSVNfQ0hBTl9IVChfYykgKElTX0NIQU5fSFQyMCgoX2MpKSB8fCBJU19DSEFOX0hUNDAoKF9jKSkpCi0KLSNkZWZpbmUgSVNfQ0hBTl9JTl9QVUJMSUNfU0FGRVRZX0JBTkQoX2MpICgoX2MpID4gNDk0MCAmJiAoX2MpIDwgNDk5MCkKLSNkZWZpbmUgSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKF9jKQkJCVwKLQkoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApICYmCVwKLQkgKCgoX2MpLT5jaGFubmVsICUgMjApICE9IDApICYmCQkJXAotCSAoKChfYyktPmNoYW5uZWwgJSAxMCkgIT0gMCkpCi0KLXN0cnVjdCBhdGg5a19rZXl2YWwgewotCXU4IGt2X3R5cGU7Ci0JdTgga3ZfcGFkOwotCXUxNiBrdl9sZW47Ci0JdTgga3ZfdmFsWzE2XTsKLQl1OCBrdl9taWNbOF07Ci0JdTgga3ZfdHhtaWNbOF07Ci19OwotCi1lbnVtIGF0aDlrX2tleV90eXBlIHsKLQlBVEg5S19LRVlfVFlQRV9DTEVBUiwKLQlBVEg5S19LRVlfVFlQRV9XRVAsCi0JQVRIOUtfS0VZX1RZUEVfQUVTLAotCUFUSDlLX0tFWV9UWVBFX1RLSVAsCi19OwotCi1lbnVtIGF0aDlrX2NpcGhlciB7Ci0JQVRIOUtfQ0lQSEVSX1dFUCA9IDAsCi0JQVRIOUtfQ0lQSEVSX0FFU19PQ0IgPSAxLAotCUFUSDlLX0NJUEhFUl9BRVNfQ0NNID0gMiwKLQlBVEg5S19DSVBIRVJfQ0tJUCA9IDMsCi0JQVRIOUtfQ0lQSEVSX1RLSVAgPSA0LAotCUFUSDlLX0NJUEhFUl9DTFIgPSA1LAotCUFUSDlLX0NJUEhFUl9NSUMgPSAxMjcKLX07Ci0KLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9DT01QUkVTU19ESVMgICAweDAwMDEKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9BRVNfRElTICAgICAgICAweDAwMDIKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9GQVNURlJBTUVfRElTICAweDAwMDQKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9CVVJTVF9ESVMgICAgICAweDAwMDgKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9NQVhRQ1UgICAgICAgICAweDAxRjAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9NQVhRQ1VfUyAgICAgICA0Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfSEVBVllfQ0xJUF9FTiAgMHgwMjAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFUyAgICAgMHhGMDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFU19TICAgMTIKLQotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQgICAweDAwNDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU4gICAgMHgwMDgwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMiAgICAgICAgIDB4MDEwMAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCAgICAweDAyMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERCAgICAgMHgwNDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBICAgIDB4MDgwMAotCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PRERfUFJFNF8wICAweDQwMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUFfUFJFNF8wIDB4ODAwMAotCi0jZGVmaW5lIFNEX05PX0NUTCAgICAgICAgICAgICAgIDB4RTAKLSNkZWZpbmUgTk9fQ1RMICAgICAgICAgICAgICAgICAgMHhmZgotI2RlZmluZSBDVExfTU9ERV9NICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENUTF8xMUEgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ1RMXzExQiAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDVExfMTFHICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENUTF8yR0hUMjAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgQ1RMXzVHSFQyMCAgICAgICAgICAgICAgNgotI2RlZmluZSBDVExfMkdIVDQwICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENUTF81R0hUNDAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBBUl9FRVBST01fTUFDKGkpICAgICAgICAoMHgxZCsoaSkpCi0KLSNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKLSNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQotCi0jZGVmaW5lIENUUllfREVCVUcgMHgxZmYKLSNkZWZpbmUJQ1RSWV9ERUZBVUxUIDAKLQotZW51bSByZWdfZXh0X2JpdG1hcCB7Ci0JUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKLQlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCi0JUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCi0JUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKLX07Ci0KLXN0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKLQl1MTYgY291bnRyeUNvZGU7Ci0JdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ0RtbjVHOwotCXUxNiByZWdEbW4yRzsKLQl1OCBpc011bHRpZG9tYWluOwotCXU4IGlzb1szXTsKLX07Ci0KLSNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgaW93cml0ZTMyKF92YWwsIF9haC0+YWhfc2ggKyBfcmVnKQotI2RlZmluZSBSRUdfUkVBRChfYWgsIF9yZWcpIGlvcmVhZDMyKF9haC0+YWhfc2ggKyBfcmVnKQotCi0jZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCi0jZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCi0jZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCi0JUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKLSNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAotCVJFR19XUklURShfYSwgX3IsIFwKLQkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKLSNkZWZpbmUgUkVHX1NFVF9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgfCBfZikKLSNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+X2YpCi0KLSNkZWZpbmUgQVRIOUtfVFhRX1VTRV9MT0NLT1VUX0JLT0ZGX0RJUyAgIDB4MDAwMDAwMDEKLQotI2RlZmluZSBJTklUX0FJRlMgICAgICAgMgotI2RlZmluZSBJTklUX0NXTUlOICAgICAgMTUKLSNkZWZpbmUgSU5JVF9DV01JTl8xMUIgIDMxCi0jZGVmaW5lIElOSVRfQ1dNQVggICAgICAxMDIzCi0jZGVmaW5lIElOSVRfU0hfUkVUUlkgICAxMAotI2RlZmluZSBJTklUX0xHX1JFVFJZICAgMTAKLSNkZWZpbmUgSU5JVF9TU0hfUkVUUlkgIDMyCi0jZGVmaW5lIElOSVRfU0xHX1JFVFJZICAzMgotCi0jZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQotCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9NQVggICAgICAoNjQgKiAxMDI0IC0gMSkKLSNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQgIEFUSF9BTVBEVV9MSU1JVF9NQVgKLQotI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgMwotI2RlZmluZSBJRUVFODAyMTFfV0VQX0tJRExFTiAgICAgMQotI2RlZmluZSBJRUVFODAyMTFfV0VQX0NSQ0xFTiAgICAgNAotI2RlZmluZSBJRUVFODAyMTFfTUFYX01QRFVfTEVOICAoMzg0MCArIEZDU19MRU4gKwkJXAotCQkJCSAoSUVFRTgwMjExX1dFUF9JVkxFTiArCQlcCi0JCQkJICBJRUVFODAyMTFfV0VQX0tJRExFTiArCVwKLQkJCQkgIElFRUU4MDIxMV9XRVBfQ1JDTEVOKSkKLSNkZWZpbmUgTUFYX1JBVEVfUE9XRVIgNjMKLQotZW51bSBhdGg5a19wb3dlcl9tb2RlIHsKLQlBVEg5S19QTV9BV0FLRSA9IDAsCi0JQVRIOUtfUE1fRlVMTF9TTEVFUCwKLQlBVEg5S19QTV9ORVRXT1JLX1NMRUVQLAotCUFUSDlLX1BNX1VOREVGSU5FRAotfTsKLQotc3RydWN0IGF0aDlrX21pYl9zdGF0cyB7Ci0JdTMyIGFja3Jjdl9iYWQ7Ci0JdTMyIHJ0c19iYWQ7Ci0JdTMyIHJ0c19nb29kOwotCXUzMiBmY3NfYmFkOwotCXUzMiBiZWFjb25zOwotfTsKLQotZW51bSBhdGg5a19hbnRfc2V0dGluZyB7Ci0JQVRIOUtfQU5UX1ZBUklBQkxFID0gMCwKLQlBVEg5S19BTlRfRklYRURfQSwKLQlBVEg5S19BTlRfRklYRURfQgotfTsKLQotI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfNiA2Ci0jZGVmaW5lIEFUSDlLX1NMT1RfVElNRV85IDkKLSNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzIwIDIwCi0KLWVudW0gYXRoOWtfaHRfbWFjbW9kZSB7Ci0JQVRIOUtfSFRfTUFDTU9ERV8yMCA9IDAsCi0JQVRIOUtfSFRfTUFDTU9ERV8yMDQwID0gMSwKLX07Ci0KLWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgewotCUFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwID0gMCwKLQlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSA9IDEsCi19OwotCi1zdHJ1Y3QgYXRoOWtfaHRfY3dtIHsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgaHRfbWFjbW9kZTsKKwl1MzIga2V5bWF4OworCURFQ0xBUkVfQklUTUFQKGtleW1hcCwgQVRIX0tFWU1BWCk7CisJdTggc3BsaXRtaWM7CisJYXRvbWljX3QgcHNfdXNlY291bnQ7CisJZW51bSBhdGg5a19pbnQgaW1hc2s7CiAJZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBodF9leHRwcm90c3BhY2luZzsKLX07CisJZW51bSBhdGg5a19odF9tYWNtb2RlIHR4X2NoYW5fd2lkdGg7CiAKLWVudW0gYXRoOWtfYW5pX2NtZCB7Ci0JQVRIOUtfQU5JX1BSRVNFTlQgPSAweDEsCi0JQVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMID0gMHgyLAotCUFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiA9IDB4NCwKLQlBVEg5S19BTklfQ0NLX1dFQUtfU0lHTkFMX1RIUiA9IDB4OCwKLQlBVEg5S19BTklfRklSU1RFUF9MRVZFTCA9IDB4MTAsCi0JQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgPSAweDIwLAotCUFUSDlLX0FOSV9NT0RFID0gMHg0MCwKLQlBVEg5S19BTklfUEhZRVJSX1JFU0VUID0gMHg4MCwKLQlBVEg5S19BTklfQUxMID0gMHhmZgotfTsKKwlzdHJ1Y3QgYXRoX2NvbmZpZyBjb25maWc7CisJc3RydWN0IGF0aF9yeCByeDsKKwlzdHJ1Y3QgYXRoX3R4IHR4OworCXN0cnVjdCBhdGhfYmVhY29uIGJlYWNvbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU11bQVRIX1JBVEVfTUFYXTsKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV9NQVhdOworCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqY3VyX3JhdGVfdGFibGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLWVudW0gewotCVdMQU5fUkNfUEhZX09GRE0sCi0JV0xBTl9SQ19QSFlfQ0NLLAotCVdMQU5fUkNfUEhZX0hUXzIwX1NTLAotCVdMQU5fUkNfUEhZX0hUXzIwX0RTLAotCVdMQU5fUkNfUEhZX0hUXzQwX1NTLAotCVdMQU5fUkNfUEhZX0hUXzQwX0RTLAotCVdMQU5fUkNfUEhZX0hUXzIwX1NTX0hHSSwKLQlXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0ksCi0JV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLAotCVdMQU5fUkNfUEhZX0hUXzQwX0RTX0hHSSwKLQlXTEFOX1JDX1BIWV9NQVgKLX07CisJc3RydWN0IGF0aF9sZWQgcmFkaW9fbGVkOworCXN0cnVjdCBhdGhfbGVkIGFzc29jX2xlZDsKKwlzdHJ1Y3QgYXRoX2xlZCB0eF9sZWQ7CisJc3RydWN0IGF0aF9sZWQgcnhfbGVkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgYXRoX2xlZF9ibGlua193b3JrOworCWludCBsZWRfb25fZHVyYXRpb247CisJaW50IGxlZF9vZmZfZHVyYXRpb247CisJaW50IGxlZF9vbl9jbnQ7CisJaW50IGxlZF9vZmZfY250OwogCi1lbnVtIGF0aDlrX3RwX3NjYWxlIHsKLQlBVEg5S19UUF9TQ0FMRV9NQVggPSAwLAotCUFUSDlLX1RQX1NDQUxFXzUwLAotCUFUSDlLX1RQX1NDQUxFXzI1LAotCUFUSDlLX1RQX1NDQUxFXzEyLAotCUFUSDlLX1RQX1NDQUxFX01JTgotfTsKLQotZW51bSBzZXJfcmVnX21vZGUgewotCVNFUl9SRUdfTU9ERV9PRkYgPSAwLAotCVNFUl9SRUdfTU9ERV9PTiA9IDEsCi0JU0VSX1JFR19NT0RFX0FVVE8gPSAyLAotfTsKLQotI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCi0jZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xMjEKLSNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKLSNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKLQotI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggICAgICAgICAgIDUKLSNkZWZpbmUgTlVNX05GX1JFQURJTkdTICAgICAgICAgICAgICAgICA2Ci0KLXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKLQlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07Ci0JdTggY3VyckluZGV4OwotCWludDE2X3QgcHJpdk5GOwotCXU4IGludmFsaWRORmNvdW50OwotfTsKLQotc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSB7Ci0JdTMyIGJzX25leHR0YnR0OwotCXUzMiBic19uZXh0ZHRpbTsKLQl1MzIgYnNfaW50dmFsOwotI2RlZmluZSBBVEg5S19CRUFDT05fUEVSSU9EICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgQVRIOUtfQkVBQ09OX0VOQSAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YgICAgMHgwMTAwMDAwMAotCXUzMiBic19kdGltcGVyaW9kOwotCXUxNiBic19jZnBwZXJpb2Q7Ci0JdTE2IGJzX2NmcG1heGR1cmF0aW9uOwotCXUzMiBic19jZnBuZXh0OwotCXUxNiBic190aW1vZmZzZXQ7Ci0JdTE2IGJzX2JtaXNzdGhyZXNob2xkOwotCXUzMiBic19zbGVlcGR1cmF0aW9uOwotfTsKLQotc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgewotCXUzMiBuc19hdmdicnNzaTsKLQl1MzIgbnNfYXZncnNzaTsKLQl1MzIgbnNfYXZndHhyc3NpOwotCXUzMiBuc19hdmd0eHJhdGU7Ci19OwotCi0jZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCi0KLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCAgICAgICAgICAgICAwCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX0FUVEVOVElPTl9MRUQgMQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9QT1dFUl9MRUQgICAgIDIKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19ORVRXT1JLX0xFRCAgICA1Ci0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfUE9XRVJfTEVEICAgICAgNgotCi1lbnVtIHsKLQlBVEg5S19SRVNFVF9QT1dFUl9PTiwKLQlBVEg5S19SRVNFVF9XQVJNLAotCUFUSDlLX1JFU0VUX0NPTEQsCi19OwotCi0jZGVmaW5lIEFIX1VTRV9FRVBST00gICAweDEKLQotc3RydWN0IGF0aF9oYWwgewotCXUzMiBhaF9tYWdpYzsKLQl1MTYgYWhfZGV2aWQ7Ci0JdTE2IGFoX3N1YnZlbmRvcmlkOwotCXUzMiBhaF9tYWNWZXJzaW9uOwotCXUxNiBhaF9tYWNSZXY7Ci0JdTE2IGFoX3BoeVJldjsKLQl1MTYgYWhfYW5hbG9nNUdoelJldjsKLQl1MTYgYWhfYW5hbG9nMkdoelJldjsKLQotCXZvaWQgX19pb21lbSAqYWhfc2g7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYWhfc2M7Ci0KLQllbnVtIG5sODAyMTFfaWZ0eXBlIGFoX29wbW9kZTsKLQlzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyBhaF9jb25maWc7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyBhaF9jYXBzOwotCi0JdTE2IGFoX2NvdW50cnlDb2RlOwotCXUzMiBhaF9mbGFnczsKLQlpbnQxNl90IGFoX3Bvd2VyTGltaXQ7Ci0JdTE2IGFoX21heFBvd2VyTGV2ZWw7Ci0JdTMyIGFoX3RwU2NhbGU7Ci0JdTE2IGFoX2N1cnJlbnRSRDsKLQl1MTYgYWhfY3VycmVudFJERXh0OwotCXUxNiBhaF9jdXJyZW50UkRJblVzZTsKLQl1MTYgYWhfY3VycmVudFJENUc7Ci0JdTE2IGFoX2N1cnJlbnRSRDJHOwotCWNoYXIgYWhfaXNvWzRdOwotCi0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgYWhfY2hhbm5lbHNbMTUwXTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYWhfY3VyY2hhbjsKLQl1MzIgYWhfbmNoYW47Ci0KLQlib29sIGFoX2lzUGNpRXhwcmVzczsKLQl1MTYgYWhfdHhUcmlnTGV2ZWw7Ci0JdTE2IGFoX3Jmc2lsZW50OwotCXUzMiBhaF9yZmtpbGxfZ3BpbzsKLQl1MzIgYWhfcmZraWxsX3BvbGFyaXR5OwotCi0jaWZuZGVmIEFUSF9ORl9QRVJfQ0hBTgotCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IG5mQ2FsSGlzdFtOVU1fTkZfUkVBRElOR1NdOworCXN0cnVjdCBhdGhfcmZraWxsIHJmX2tpbGw7CisJc3RydWN0IGF0aF9hbmkgYW5pOworCXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIG5vZGVzdGF0czsKKyNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKKwlzdHJ1Y3QgYXRoOWtfZGVidWcgZGVidWc7CiAjZW5kaWYKKwlzdHJ1Y3QgYXRoX2J1c19vcHMgKmJ1c19vcHM7CiB9OwogCi1zdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKLQl1MTYgc3ludGhfY2VudGVyOwotCXUxNiBjdGxfY2VudGVyOwotCXUxNiBleHRfY2VudGVyOworc3RydWN0IGF0aF93aXBoeSB7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2M7IC8qIHNoYXJlZCBmb3IgYWxsIHZpcnR1YWwgd2lwaHlzICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBhdGhfd2lwaHlfc3RhdGUgeworCQlBVEhfV0lQSFlfSU5BQ1RJVkUsCisJCUFUSF9XSVBIWV9BQ1RJVkUsCisJCUFUSF9XSVBIWV9QQVVTSU5HLAorCQlBVEhfV0lQSFlfUEFVU0VELAorCQlBVEhfV0lQSFlfU0NBTiwKKwl9IHN0YXRlOworCWludCBjaGFuX2lkeDsKKwlpbnQgY2hhbl9pc19odDsKIH07CiAKLXN0cnVjdCBhdGhfcmF0ZV90YWJsZTsKK2ludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOworaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwogCi0vKiBIZWxwZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX3JlYWRfY2FjaGVzaXplKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgKmNzeikKK3sKKwlzYy0+YnVzX29wcy0+cmVhZF9jYWNoZXNpemUoc2MsIGNzeik7Cit9CiAKLWVudW0gd2lyZWxlc3NfbW9kZSBhdGg5a19od19jaGFuMndtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7Ci11MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKLWJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICB1MTYgZmxhZ3MsIHUxNiAqbG93LAotCQkJICAgICB1MTYgKmhpZ2gpOwotdTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKLQkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwKLQkJCSAgIGJvb2wgc2hvcnRQcmVhbWJsZSk7Ci11MzIgYXRoOWtfaHdfbWh6MmllZWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZnJlcSwgdTMyIGZsYWdzKTsKLXZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIHN0cnVjdCBjaGFuX2NlbnRlcnMgKmNlbnRlcnMpOworc3RhdGljIGlubGluZSB2b2lkIGF0aF9idXNfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzYy0+YnVzX29wcy0+Y2xlYW51cChzYyk7Cit9CiAKLS8qIEF0dGFjaCwgRGV0YWNoICovCitleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzOwogCi1jb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7Ci12b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCXZvaWQgX19pb21lbSAqbWVtLCBpbnQgKmVycm9yKTsKLXZvaWQgYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KTsKK3ZvaWQgYXRoX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworY29uc3QgY2hhciAqYXRoX21hY19iYl9uYW1lKHUzMiBtYWNfYmJfdmVyc2lvbik7Citjb25zdCBjaGFyICphdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbik7Cit2b2lkIGF0aF9zZXRfaHdfY2FwYWIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbik7Cit2b2lkIGF0aF91cGRhdGVfY2hhaW5tYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaXNfaHQpOworaW50IGF0aF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pOwordm9pZCBhdGhfcmFkaW9fZW5hYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogCi0KLS8qIEhXIFJlc2V0ICovCi0KLWJvb2wgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlLAotCQkgICAgdTggdHhjaGFpbm1hc2ssIHU4IHJ4Y2hhaW5tYXNrLAotCQkgICAgZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZywKLQkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UsIGludCAqc3RhdHVzKTsKLQotLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KLQotYm9vbCBhdGg5a19od19rZXlyZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSk7Ci1ib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSwgY29uc3QgdTggKm1hYyk7Ci1ib29sIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSwKLQkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSk7Ci1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpOwotCi0vKiBQb3dlciBNYW5hZ2VtZW50ICovCi0KLWJvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSk7Ci0KLS8qIEJlYWNvbiB0aW1lcnMgKi8KLQotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCk7Ci12b2lkIGF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKTsKLS8qIEhXIENhcGFiaWxpdGllcyAqLwotCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKLWJvb2wgYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiBzZXR0aW5nLCBpbnQgKnN0YXR1cyk7Ci0KLS8qIEdQSU8gLyBSRktJTEwgLyBBbnRlbm5hZSAqLwotCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pOwotdTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pOwotdm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sCi0JCQkgdTMyIGFoX3NpZ25hbF90eXBlKTsKLXZvaWQgYXRoOWtfaHdfc2V0X2dwaW8oc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCk7CisjaWZkZWYgQ09ORklHX1BDSQoraW50IGF0aF9wY2lfaW5pdCh2b2lkKTsKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF0aF9wY2lfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgotaW50IGF0aDlrX2h3X3NlbGVjdF9hbnRjb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2ZnKTsKLXUzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldGFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgYW50ZW5uYSk7Ci1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCi0JCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKLQkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAotCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpOwogCi0vKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwotCi11MzIgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgYml0cyk7Ci1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBsaW1pdCk7Ci12b2lkIGF0aDlrX2h3X2dldG1hYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4ICptYWMpOwotYm9vbCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqbWFjKTsKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKLXZvaWQgYXRoOWtfaHdfZ2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfaGFsICphaCwgdTggKm1hc2spOwotYm9vbCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqbWFzayk7Ci12b2lkIGF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqYnNzaWQsIHUxNiBhc3NvY0lkKTsKLXU2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKTsKLWJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpOwotdm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19odF9tYWNtb2RlIG1vZGUpOwotCi0vKiBSZWd1bGF0b3J5ICovCi0KLWJvb2wgYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotc3RydWN0IGF0aDlrX2NoYW5uZWwqIGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpOwotdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXUzMiBhdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgIHUzMiBtYXhjaGFucywgdTMyICpuY2hhbnMsIHU4ICpyZWdjbGFzc2lkcywKLQkJCSAgICAgIHUzMiBtYXhyZWdpZHMsIHUzMiAqbnJlZ2lkcywgdTE2IGNjLAotCQkJICAgICAgYm9vbCBlbmFibGVPdXRkb29yLCBib29sIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpOwotCi0vKiBBTkkgKi8KLQotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCi0JCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdTMyIGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHUzMiAqcnhjX3BjbnQsCi0JCQkJICB1MzIgKnJ4Zl9wY250LAotCQkJCSAgdTMyICp0eGZfcGNudCk7Ci12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpOwotdm9pZCBhdGg5a19od19hbmlfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19hbmlfZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KLS8qIENhbGlicmF0aW9uICovCi0KLXZvaWQgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKTsKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotaW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCi0JCQlib29sICppc0NhbERvbmUpOwotYm9vbCBhdGg5a19od19pbml0X2NhbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci0KLQotLyogRUVQUk9NICovCi0KLWludCBhdGg5a19od19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCk7Ci12b2lkIGF0aDlrX2h3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGludDE2X3QgKnJhdGVzQXJyYXksCi0JCQkJICAgICAgIHUxNiBjZmdDdGwsCi0JCQkJICAgICAgIHU4IEFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCSAgICAgICB1OCBwb3dlckxpbWl0KTsKLWJvb2wgYXRoOWtfaHdfc2V0X3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpOwotYm9vbCBhdGg5a19od19lZXByb21fc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotaW50IGF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKTsKLXU4IGF0aDlrX2h3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpOwotdTE2IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KTsKLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KLS8qIEludGVycnVwdCBIYW5kbGluZyAqLwotCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKTsKLQotLyogTUFDIChQQ1UvUUNVKSAqLwotCi11MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLXUzMiBhdGg5a19od19udW10eHBlbmRpbmcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKHN0cnVjdCBhdGhfaGFsICphaCwgYm9vbCBiSW5jVHJpZ0xldmVsKTsKLWJvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od19maWxsdHhkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCSB1MzIgc2VnTGVuLCBib29sIGZpcnN0U2VnLAotCQkJIGJvb2wgbGFzdFNlZywgY29uc3Qgc3RydWN0IGF0aF9kZXNjICpkczApOwotdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgICAgdTMyIHBrdExlbiwgZW51bSBhdGg5a19wa3RfdHlwZSB0eXBlLCB1MzIgdHhQb3dlciwKLQkJCSAgICB1MzIga2V5SXgsIGVudW0gYXRoOWtfa2V5X3R5cGUga2V5VHlwZSwgdTMyIGZsYWdzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKLQkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCi0JCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCi0JCQkJICBzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1tdLAotCQkJCSAgdTMyIG5zZXJpZXMsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQl1MzIgYWdnckxlbik7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJIHUzMiBudW1EZWxpbXMpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQkgICB1MzIgYnVyc3REdXJhdGlvbik7Ci12b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSAgICAgdTMyIHZtZik7Ci12b2lkIGF0aDlrX2h3X2dldHR4aW50cnR4cXMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgKnR4cXMpOwotYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IHEsCi0JCQkgICAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAotCQkJICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Ci1pbnQgYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a190eF9xdWV1ZSB0eXBlLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOwotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotaW50IGF0aDlrX2h3X3J4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJdTMyIHBhLCBzdHJ1Y3QgYXRoX2Rlc2MgKm5kcywgdTY0IHRzZik7Ci1ib29sIGF0aDlrX2h3X3NldHVwcnhkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCSAgdTMyIHNpemUsIHUzMiBmbGFncyk7Ci1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCk7Ci12b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJ4ZHApOwotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLQorI2lmZGVmIENPTkZJR19BVEhFUk9TX0FSNzFYWAoraW50IGF0aF9haGJfaW5pdCh2b2lkKTsKK3ZvaWQgYXRoX2FoYl9leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF0aF9haGJfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWlmIChhdG9taWNfaW5jX3JldHVybigmc2MtPnBzX3VzZWNvdW50KSA9PSAxKQorCQlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9ICBBVEg5S19QTV9BV0FLRSkgeworCQkJc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUgPSBzYy0+c2NfYWgtPnBvd2VyX21vZGU7CisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKKwkJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2MtPnBzX3VzZWNvdW50KSkKKwkJaWYgKChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKKwkJICAgICEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQkVBQ09OKSkKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwKKwkJCQkJICBzYy0+c2NfYWgtPnJlc3RvcmVfbW9kZSk7Cit9CisKKwordm9pZCBhdGg5a19zZXRfYnNzaWRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgYXRoOWtfd2lwaHlfYWRkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a193aXBoeV9kZWwoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7Cit2b2lkIGF0aDlrX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoOWtfd2lwaHlfcGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CitpbnQgYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKK2ludCBhdGg5a193aXBoeV9zZWxlY3Qoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7Cit2b2lkIGF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtc2VjX2ludCk7Cit2b2lkIGF0aDlrX3dpcGh5X2NoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworYm9vbCBhdGg5a193aXBoeV9zdGFydGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfd2lwaHlfcGF1c2VfYWxsX2ZvcmNlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgIHN0cnVjdCBhdGhfd2lwaHkgKnNlbGVjdGVkKTsKK2Jvb2wgYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a193aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSwgdGhleSBib3RoIHNoYXJlIHRoZSBzYW1lIGxvY2suIFdlIGRvIHRoaXMgdG8gc2VyaWFsaXplCisgKiByZWFkcyBhbmQgd3JpdGVzIG9uIEF0aGVyb3MgODAyLjExbiBQQ0kgZGV2aWNlcyBvbmx5LiBUaGlzIGlzIHJlcXVpcmVkCisgKiBhcyB0aGUgRklGTyBvbiB0aGVzZSBkZXZpY2VzIGNhbiBvbmx5IGFjY2VwdCBzYW5lbHkgMiByZXF1ZXN0cy4gQWZ0ZXIKKyAqIHRoYXQgdGhlIGRldmljZSBnb2VzIGJhbmFuYXMuIFNlcmlhbGl6aW5nIHRoZSByZWFkcy93cml0ZXMgcHJldmVudHMgdGhpcworICogZnJvbSBoYXBwZW5pbmcuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2lvd3JpdGUzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQsIHUzMiB2YWwpCit7CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCQlpb3dyaXRlMzIodmFsLCBhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQlpb3dyaXRlMzIodmFsLCBhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg5a19pb3JlYWQzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQpCit7CisJdTMyIHZhbDsKKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJfSBlbHNlCisJCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJcmV0dXJuIHZhbDsKK30KKworI2VuZGlmIC8qIEFUSDlLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKaW5kZXggM2FiMGI0My4uZWM5OTU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKKworI2RlZmluZSBGVURHRSAyCiAKIC8qCiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBjZXJ0YWluIHRyYW5zbWl0IHF1ZXVlIHByb3BlcnRpZXMgZGVwZW5kaW5nIG9uCkBAIC0yMywxMSArMjUsMTEgQEAKICovCiBzdGF0aWMgaW50IGF0aF9iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKIAlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsICZxaSk7Ci0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIEFsd2F5cyBidXJzdCBvdXQgYmVhY29uIGFuZCBDQUIgdHJhZmZpYy4gKi8KIAkJcWkudHFpX2FpZnMgPSAxOwogCQlxaS50cWlfY3dtaW4gPSAwOwpAQCAtNDQsNDYgKzQ2LDMzIEBACiAJCQkidW5hYmxlIHRvIHVwZGF0ZSBoL3cgYmVhY29uIHF1ZXVlIHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJcmV0dXJuIDE7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGhfYnN0dWNrX3Byb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzdHVjayBiZWFjb247IHJlc2V0dGluZyAoYm1pc3MgY291bnQgJXUpXG4iLAotCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLX0KLQogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKICAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCiAgKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KICovCi1zdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICBzdHJ1Y3QgYXRoX3ZhcCAqYXZwLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOwogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0JaW50IGZsYWdzLCBhbnRlbm5hOwotCXU4IHJpeCwgcmF0ZTsKLQlpbnQgY3RzcmF0ZSA9IDA7Ci0JaW50IGN0c2R1cmF0aW9uID0gMDsKKwlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJdTggcmF0ZTsKIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibSAlcCBsZW4gJXVcbiIsIHNrYiwgc2tiLT5sZW4pOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvcnMgKi8KIAlkcyA9IGJmLT5iZl9kZXNjOwotCiAJZmxhZ3MgPSBBVEg5S19UWERFU0NfTk9BQ0s7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKKwlpZiAoKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgJiYKKwkgICAgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJZHMtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7IC8qIHNlbGYtbGlua2VkICovCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19WRU9MOwogCQkvKiBMZXQgaGFyZHdhcmUgaGFuZGxlIGFudGVubmEgc3dpdGNoaW5nLiAqLwpAQCAtOTIsNjUgKzgxLDUzIEBACiAJCWRzLT5kc19saW5rID0gMDsKIAkJLyoKIAkJICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCQkgKiBTaG91bGQgb25seSBzd2l0Y2ggZXZlcnkgYmVhY29uIHBlcmlvZCwgbm90IGZvciBldmVyeQotCQkgKiBTV0JBJ3MKLQkJICogWFhYIGFzc3VtZXMgdHdvIGFudGVubmEKKwkJICogU2hvdWxkIG9ubHkgc3dpdGNoIGV2ZXJ5IGJlYWNvbiBwZXJpb2QsIG5vdCBmb3IgZXZlcnkgU1dCQQorCQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKIAkJICovCi0JCWFudGVubmEgPSAoKHNjLT5iZWFjb24uYXN0X2JlX3htaXQgLyBzYy0+c2NfbmJjbnZhcHMpICYgMSA/IDIgOiAxKTsKKwkJYW50ZW5uYSA9ICgoc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCAvIHNjLT5uYmNudmlmcykgJiAxID8gMiA6IDEpOwogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCi0JLyoKLQkgKiBDYWxjdWxhdGUgcmF0ZSBjb2RlLgotCSAqIFhYWCBldmVyeXRoaW5nIGF0IG1pbiB4bWl0IHJhdGUKLQkgKi8KLQlyaXggPSAwOwogCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCXJhdGUgPSBydC0+aW5mb1swXS5yYXRlY29kZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJcmF0ZSB8PSBydC0+aW5mb1swXS5zaG9ydF9wcmVhbWJsZTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLAotCQkJICAgICAgIHNrYi0+bGVuICsgRkNTX0xFTiwgICAgIC8qIGZyYW1lIGxlbmd0aCAqLwotCQkJICAgICAgIEFUSDlLX1BLVF9UWVBFX0JFQUNPTiwgIC8qIEF0aGVyb3MgcGFja2V0IHR5cGUgKi8KLQkJCSAgICAgICBNQVhfUkFURV9QT1dFUiwgICAgICAgICAvKiBGSVhNRSAqLwotCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwgIC8qIG5vIGVuY3J5cHRpb24gKi8KLQkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwgICAvKiBubyBlbmNyeXB0aW9uICovCi0JCQkgICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgLyogbm8gYWNrLAotCQkJCQkJCSAgdmVvbCBmb3IgYmVhY29ucyAqLwotCQkpOworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAorCQkJICAgICAgIE1BWF9SQVRFX1BPV0VSLAorCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwkJCSAgICAgICBmbGFncyk7CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgcm91bmR1cChza2ItPmxlbiwgNCksIC8qIGJ1ZmZlciBsZW5ndGggKi8KLQkJCSAgICB0cnVlLCAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsICAgICAgICAgICAgICAgICAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICBkcyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCQkpOworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLCByb3VuZHVwKHNrYi0+bGVuLCA0KSwKKwkJCSAgICB0cnVlLCB0cnVlLCBkcyk7CiAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKLQlzZXJpZXNbMF0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOworCXNlcmllc1swXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CiAJc2VyaWVzWzBdLlJhdGVGbGFncyA9IChjdHNyYXRlKSA/IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDA7Ci0JYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhhaCwgZHMsIGRzLCAwLAotCQljdHNyYXRlLCBjdHNkdXJhdGlvbiwgc2VyaWVzLCA0LCAwKTsKKwlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgZHMsIDAsIGN0c3JhdGUsIGN0c2R1cmF0aW9uLAorCQkJCSAgICAgc2VyaWVzLCA0LCAwKTsKIH0KIAotLyogR2VuZXJhdGUgYmVhY29uIGZyYW1lIGFuZCBxdWV1ZSBjYWIgZGF0YSBmb3IgYSB2YXAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHN0cnVjdCBhdGhfYnVmICphdGhfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlpbnQgY2FicV9kZXB0aDsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKKwlpZiAoYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJY2FicSA9IHNjLT5iZWFjb24uY2FicTsKQEAgLTE2MSwxOSArMTM4LDI0IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIFJlbGVhc2UgdGhlIG9sZCBiZWFjb24gZmlyc3QgKi8KKwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKIAlpZiAoc2tiKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiAKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChzYy0+aHcsIHZpZik7CisJLyogR2V0IGEgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExICovCisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAliZi0+YmZfbXBkdSA9IHNrYjsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOworCSgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wID0KKwkJYXZwLT50c2ZfYWRqdXN0OwogCiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKQEAgLTE4OCw1NCArMTcwLDQyIEBACiAJfQogCiAJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQgPQotCQlwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLAotCQkJICAgICAgIHNrYi0+bGVuLAotCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CisJCWRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCSAgICAgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJmLT5iZl9tcGR1ID0gTlVMTDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gYmVhY29uaW5nXG4iKTsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImRtYV9tYXBwaW5nX2Vycm9yIG9uIGJlYWNvbmluZ1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoc2MtPmh3LCB2aWYpOworCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoaHcsIHZpZik7CiAKIAkvKgogCSAqIGlmIHRoZSBDQUJRIHRyYWZmaWMgZnJvbSBwcmV2aW91cyBEVElNIGlzIHBlbmRpbmcgYW5kIHRoZSBjdXJyZW50CiAJICogIGJlYWNvbiBpcyBhbHNvIGEgRFRJTS4KLQkgKiAgMSkgaWYgdGhlcmUgaXMgb25seSBvbmUgdmFwIGxldCB0aGUgY2FiIHRyYWZmaWMgY29udGludWUuCi0JICogIDIpIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHZhcCBhbmQgd2UgYXJlIHVzaW5nIHN0YWdnZXJlZAorCSAqICAxKSBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2aWYgbGV0IHRoZSBjYWIgdHJhZmZpYyBjb250aW51ZS4KKwkgKiAgMikgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdmlmIGFuZCB3ZSBhcmUgdXNpbmcgc3RhZ2dlcmVkCiAJICogICAgIGJlYWNvbnMsIHRoZW4gZHJhaW4gdGhlIGNhYnEgYnkgZHJvcHBpbmcgYWxsIHRoZSBmcmFtZXMgaW4KLQkgKiAgICAgdGhlIGNhYnEgc28gdGhhdCB0aGUgY3VycmVudCB2YXBzIGNhYiB0cmFmZmljIGNhbiBiZSBzY2hlZHVsZWQuCisJICogICAgIHRoZSBjYWJxIHNvIHRoYXQgdGhlIGN1cnJlbnQgdmlmcyBjYWIgdHJhZmZpYyBjYW4gYmUgc2NoZWR1bGVkLgogCSAqLwogCXNwaW5fbG9ja19iaCgmY2FicS0+YXhxX2xvY2spOwogCWNhYnFfZGVwdGggPSBjYWJxLT5heHFfZGVwdGg7CiAJc3Bpbl91bmxvY2tfYmgoJmNhYnEtPmF4cV9sb2NrKTsKIAogCWlmIChza2IgJiYgY2FicV9kZXB0aCkgewotCQkvKgotCQkgKiBVbmxvY2sgdGhlIGNhYnEgbG9jayBhcyBhdGhfdHhfZHJhaW50eHEgYWNxdWlyZXMKLQkJICogdGhlIGxvY2sgYWdhaW4gd2hpY2ggaXMgYSBjb21tb24gZnVuY3Rpb24gYW5kIHRoYXQKLQkJICogYWNxdWlyZXMgdHhxIGxvY2sgaW5zaWRlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19udmFwcyA+IDEpIHsKLQkJCWF0aF90eF9kcmFpbnR4cShzYywgY2FicSwgZmFsc2UpOworCQlpZiAoc2MtPm52aWZzID4gMSkgewogCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJImZsdXNoIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQkJIkZsdXNoaW5nIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQlhdGhfZHJhaW50eHEoc2MsIGNhYnEsIGZhbHNlKTsKIAkJfQogCX0KIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCi0JLyoKLQkgKiBFbmFibGUgdGhlIENBQiBxdWV1ZSBiZWZvcmUgdGhlIGJlYWNvbiBxdWV1ZSB0bwotCSAqIGluc3VyZSBjYWIgZnJhbWVzIGFyZSB0cmlnZ2VyZWQgYnkgdGhpcyBiZWFjb24uCi0JICovCiAJd2hpbGUgKHNrYikgewotCQlhdGhfdHhfY2FicShzYywgc2tiKTsKLQkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJCWF0aF90eF9jYWJxKGh3LCBza2IpOworCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGh3LCB2aWYpOwogCX0KIAogCXJldHVybiBiZjsKQEAgLTI0NSwyOCArMjE1LDIyIEBACiAgKiBTdGFydHVwIGJlYWNvbiB0cmFuc21pc3Npb24gZm9yIGFkaG9jIG1vZGUgd2hlbiB0aGV5IGFyZSBzZW50IGVudGlyZWx5CiAgKiBieSB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIHNlbGYtbGlua2VkIGRlc2NyaXB0b3IgKyB2ZW9sIHRyaWNrLgogKi8KLXN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl2aWYgPSBzYy0+c2NfdmFwc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAiYXZwPSVwIGF2X2JjYnVmPSVwXG4iLAotCQkJYXZwLCBhdnAgIT0gTlVMTCA/IGF2cC0+YXZfYmNidWYgOiBOVUxMKTsKKwlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQorCiAJYmYgPSBhdnAtPmF2X2JjYnVmOwogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBiZi0+YmZfbXBkdTsKIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCiAJLyogTkI6IGNhbGxlciBpcyBrbm93biB0byBoYXZlIGFscmVhZHkgc3RvcHBlZCB0eCBkbWEgKi8KQEAgLTI3Niw3ICsyNDAsNyBAQAogCQlzYy0+YmVhY29uLmJlYWNvbnEsIGl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKIH0KIAotaW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGhfYmVhY29ucV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIApAQCAtMjg4LDE4ICsyNTIsMTQgQEAKIAlyZXR1cm4gYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKGFoLCBBVEg5S19UWF9RVUVVRV9CRUFDT04sICZxaSk7CiB9CiAKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCitpbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX2xlNjQgdHN0YW1wOwogCi0JdmlmID0gc2MtPnNjX3ZhcHNbaWZfaWRdOwotCUFTU0VSVCh2aWYpOwotCiAJYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCiAJLyogQWxsb2NhdGUgYSBiZWFjb24gZGVzY3JpcHRvciBpZiB3ZSBoYXZlbid0IGRvbmUgc28uICovCkBAIC0zMTAsNTEgKzI3MCw0NiBAQAogCQkJCQkJIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmF2cC0+YXZfYmNidWYtPmxpc3QpOwogCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCQkgICAgIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkgeworCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgICEoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJCWludCBzbG90OwogCQkJLyoKLQkJCSAqIEFzc2lnbiB0aGUgdmFwIHRvIGEgYmVhY29uIHhtaXQgc2xvdC4gQXMKKwkJCSAqIEFzc2lnbiB0aGUgdmlmIHRvIGEgYmVhY29uIHhtaXQgc2xvdC4gQXMKIAkJCSAqIGFib3ZlLCB0aGlzIGNhbm5vdCBmYWlsIHRvIGZpbmQgb25lLgogCQkJICovCiAJCQlhdnAtPmF2X2JzbG90ID0gMDsKIAkJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykKLQkJCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSA9PSBBVEhfSUZfSURfQU5ZKSB7CisJCQkJaWYgKHNjLT5iZWFjb24uYnNsb3Rbc2xvdF0gPT0gTlVMTCkgewogCQkJCQkvKgogCQkJCQkgKiBYWFggaGFjaywgc3BhY2Ugb3V0IHNsb3RzIHRvIGJldHRlcgogCQkJCQkgKiBkZWFsIHdpdGggbWlzc2VzCiAJCQkJCSAqLwogCQkJCQlpZiAoc2xvdCsxIDwgQVRIX0JDQlVGICYmCi0JCQkJCSAgICBzYy0+YmVhY29uLmJzbG90W3Nsb3QrMV0gPT0KLQkJCQkJCUFUSF9JRl9JRF9BTlkpIHsKKwkJCQkJICAgIHNjLT5iZWFjb24uYnNsb3Rbc2xvdCsxXSA9PSBOVUxMKSB7CiAJCQkJCQlhdnAtPmF2X2JzbG90ID0gc2xvdCsxOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQkJYXZwLT5hdl9ic2xvdCA9IHNsb3Q7CiAJCQkJCS8qIE5COiBrZWVwIGxvb2tpbmcgZm9yIGEgZG91YmxlIHNsb3QgKi8KIAkJCQl9Ci0JCQlCVUdfT04oc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSAhPSBBVEhfSUZfSURfQU5ZKTsKLQkJCXNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gPSBpZl9pZDsKLQkJCXNjLT5zY19uYmNudmFwcysrOworCQkJQlVHX09OKHNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gIT0gTlVMTCk7CisJCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gdmlmOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2F2cC0+YXZfYnNsb3RdID0gYXBoeTsKKwkJCXNjLT5uYmNudmlmcysrOwogCQl9CiAJfQogCi0JLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lICwgaWYgaXQgYWxyZWFkeSBleGlzdHMuICovCisJLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJaWYgKGJmLT5iZl9tcGR1ICE9IE5VTEwpIHsKIAkJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJYmYtPmJmX21wZHUgPSBOVUxMOwogCX0KIAotCS8qCi0JICogTkI6IHRoZSBiZWFjb24gZGF0YSBidWZmZXIgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4KLQkgKiBGSVhNRTogRmlsbCBhdnAtPmF2X2J0eGN0bC50eHBvd2VyIGFuZAotCSAqIGF2cC0+YXZfYnR4Y3RsLnNob3J0UHJlYW1ibGUKLQkgKi8KKwkvKiBOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqLwogCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHNjLT5odywgdmlmKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJjYW5ub3QgZ2V0IHNrYlxuIik7CkBAIC0zNjMsNzUgKzMxOCw2NSBAQAogCiAJdHN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CiAJc2MtPmJlYWNvbi5iY190c3RhbXAgPSBsZTY0X3RvX2NwdSh0c3RhbXApOwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgYSBUU0YgYWRqdXN0bWVudCBmYWN0b3IgcmVxdWlyZWQgZm9yCi0JICogc3RhZ2dlcmVkIGJlYWNvbnMuICBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBmb3JtYXQKLQkgKiBvZiB0aGUgYmVhY29uIGZyYW1lIGxlYXZlcyB0aGUgdHN0YW1wIGZpZWxkIGltbWVkaWF0ZWx5Ci0JICogZm9sbG93aW5nIHRoZSBoZWFkZXIuCi0JICovCisJLyogQ2FsY3VsYXRlIGEgVFNGIGFkanVzdG1lbnQgZmFjdG9yIHJlcXVpcmVkIGZvciBzdGFnZ2VyZWQgYmVhY29ucy4gKi8KIAlpZiAoYXZwLT5hdl9ic2xvdCA+IDApIHsKIAkJdTY0IHRzZmFkanVzdDsKLQkJX19sZTY0IHZhbDsKIAkJaW50IGludHZhbDsKIAogCQlpbnR2YWwgPSBzYy0+aHctPmNvbmYuYmVhY29uX2ludCA/CiAJCQlzYy0+aHctPmNvbmYuYmVhY29uX2ludCA6IEFUSF9ERUZBVUxUX0JJTlRWQUw7CiAKIAkJLyoKLQkJICogVGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBpbiBUVSdzOyB0aGUgVFNGIGluIHVzZWNzLgotCQkgKiBXZSBmaWd1cmUgb3V0IGhvdyBtYW55IFRVJ3MgdG8gYWRkIHRvIGFsaWduIHRoZQotCQkgKiB0aW1lc3RhbXAgdGhlbiBjb252ZXJ0IHRvIFRTRiB1bml0cyBhbmQgaGFuZGxlCi0JCSAqIGJ5dGUgc3dhcHBpbmcgYmVmb3JlIHdyaXRpbmcgaXQgaW4gdGhlIGZyYW1lLgotCQkgKiBUaGUgaGFyZHdhcmUgd2lsbCB0aGVuIGFkZCB0aGlzIGVhY2ggdGltZSBhIGJlYWNvbgotCQkgKiBmcmFtZSBpcyBzZW50LiAgTm90ZSB0aGF0IHdlIGFsaWduIHZhcCdzIDEuLk4KLQkJICogYW5kIGxlYXZlIHZhcCAwIHVudG91Y2hlZC4gIFRoaXMgbWVhbnMgdmFwIDAKLQkJICogaGFzIGEgdGltZXN0YW1wIGluIG9uZSBiZWFjb24gaW50ZXJ2YWwgd2hpbGUgdGhlCi0JCSAqIG90aGVycyBnZXQgYSB0aW1lc3RhbXAgYWxpZ25lZCB0byB0aGUgbmV4dCBpbnRlcnZhbC4KKwkJICogQ2FsY3VsYXRlIHRoZSBUU0Ygb2Zmc2V0IGZvciB0aGlzIGJlYWNvbiBzbG90LCBpLmUuLCB0aGUKKwkJICogbnVtYmVyIG9mIHVzZWNzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgdGltZXN0YW1wIGZpZWxkCisJCSAqIGluIEJlYWNvbiBhbmQgUHJvYmUgUmVzcG9uc2UgZnJhbWVzLiBCZWFjb24gc2xvdCAwIGlzCisJCSAqIHByb2Nlc3NlZCBhdCB0aGUgY29ycmVjdCBvZmZzZXQsIHNvIGl0IGRvZXMgbm90IHJlcXVpcmUgVFNGCisJCSAqIGFkanVzdG1lbnQuIE90aGVyIHNsb3RzIGFyZSBhZGp1c3RlZCB0byBnZXQgdGhlIHRpbWVzdGFtcAorCQkgKiBjbG9zZSB0byB0aGUgVEJUVCBmb3IgdGhlIEJTUy4KIAkJICovCi0JCXRzZmFkanVzdCA9IChpbnR2YWwgKiAoQVRIX0JDQlVGIC0gYXZwLT5hdl9ic2xvdCkpIC8gQVRIX0JDQlVGOwotCQl2YWwgPSBjcHVfdG9fbGU2NCh0c2ZhZGp1c3QgPDwgMTApOyAgICAgLyogVFUtPlRTRiAqLworCQl0c2ZhZGp1c3QgPSBpbnR2YWwgKiBhdnAtPmF2X2JzbG90IC8gQVRIX0JDQlVGOworCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOwogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAogCQkJInN0YWdnZXIgYmVhY29ucywgYnNsb3QgJWQgaW50dmFsICV1IHRzZmFkanVzdCAlbGx1XG4iLAogCQkJYXZwLT5hdl9ic2xvdCwgaW50dmFsLCAodW5zaWduZWQgbG9uZyBsb25nKXRzZmFkanVzdCk7CiAKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCQltZW1jcHkoJmhkclsxXSwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCX0KKwkJKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXAgPQorCQkJYXZwLT50c2ZfYWRqdXN0OworCX0gZWxzZQorCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NCgwKTsKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwogCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCSAgICAgICBza2ItPmxlbiwKLQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgeworCQlkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCBza2ItPmRhdGEsCisJCQkgICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIGJlYWNvbiBhbGxvY1xuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uIGFsbG9jXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRoX2JlYWNvbl9yZXR1cm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmFwICphdnApCit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKQogewogCWlmIChhdnAtPmF2X2JjYnVmICE9IE5VTEwpIHsKIAkJc3RydWN0IGF0aF9idWYgKmJmOwogCiAJCWlmIChhdnAtPmF2X2JzbG90ICE9IC0xKSB7Ci0JCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gQVRIX0lGX0lEX0FOWTsKLQkJCXNjLT5zY19uYmNudmFwcy0tOworCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBOVUxMOworCQkJc2MtPm5iY252aWZzLS07CiAJCX0KIAogCQliZiA9IGF2cC0+YXZfYmNidWY7CiAJCWlmIChiZi0+YmZfbXBkdSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKLQkJCQkJIHNrYi0+bGVuLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0LAorCQkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJfQpAQCAtNDQxLDkyICszODYsNDUgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBOVUxMOwotCWludCBzbG90LCBpZl9pZDsKLQl1MzIgYmZhZGRyOwotCXUzMiByeF9jbGVhciA9IDAsIHJ4X2ZyYW1lID0gMCwgdHhfZnJhbWUgPSAwOwotCXUzMiBzaG93X2N5Y2xlcyA9IDA7Ci0JdTMyIGJjID0gMDsgLyogYmVhY29uIGNvdW50ICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCWludCBzbG90OworCXUzMiBiZmFkZHIsIGJjID0gMCwgdHNmdHU7CiAJdTY0IHRzZjsKLQl1MzIgdHNmdHU7CiAJdTE2IGludHZhbDsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQlzaG93X2N5Y2xlcyA9IGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KGFoLAotCQkJCQkgICAgJnJ4X2NsZWFyLCAmcnhfZnJhbWUsICZ0eF9mcmFtZSk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYmVhY29uIGhhcyBnb25lIG91dC4gIElmCiAJICogbm90IGRvbid0IHRyeSB0byBwb3N0IGFub3RoZXIsIHNraXAgdGhpcyBwZXJpb2QKIAkgKiBhbmQgd2FpdCBmb3IgdGhlIG5leHQuICBNaXNzZWQgYmVhY29ucyBpbmRpY2F0ZQogCSAqIGEgcHJvYmxlbSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIElmIHdlIG1pc3MgdG9vCiAJICogbWFueSBjb25zZWN1dGl2ZSBiZWFjb25zIHJlc2V0IHRoZSBkZXZpY2UuCi0JICoKLQkgKiBGSVhNRTogQ2xlYW4gdXAgdGhpcyBtZXNzICEhCiAJICovCiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKLQkJLyogWFhYOiBkb3RoIG5lZWRzIHRoZSBjaGFuY2hhbmdlIElFIGNvdW50ZG93biBkZWNyZW1lbnRlZC4KLQkJICogICAgICBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgbWFjODAyMTEgY2FsbCB0byBpbmRpY2F0ZQotCQkgKiAgICAgIGEgYmVhY29uIG1pc3Mgc28gYXBwcm9wcmlhdGUgYWN0aW9uIGNvdWxkIGJlIHRha2VuCi0JCSAqICAgICAgKGluIHRoYXQgbGF5ZXIpLgotCQkgKi8KKwogCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKLQkJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJCWlmIChzaG93X2N5Y2xlcykgewotCQkJCQkvKgotCQkJCQkgKiBEaXNwbGF5IGN5Y2xlIGNvdW50ZXIgc3RhdHMgZnJvbSBIVwotCQkJCQkgKiB0byBhaWRlIGluIGRlYnVnIG9mIHN0aWNraW5lc3MuCi0JCQkJCSAqLwotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJidXN5IHRpbWVzOiByeF9jbGVhcj0lZCwgIgotCQkJCQkJInJ4X2ZyYW1lPSVkLCB0eF9mcmFtZT0lZFxuIiwKLQkJCQkJCXJ4X2NsZWFyLCByeF9mcmFtZSwKLQkJCQkJCXR4X2ZyYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJ1bmFibGUgdG8gb2J0YWluICIKLQkJCQkJCSJidXN5IHRpbWVzXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJfQorCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQl9IGVsc2UgaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPj0gQlNUVUNLX1RIUkVTSCkgewotCQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX05PX1JFU0VUKSB7Ci0JCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPT0gQlNUVUNLX1RIUkVTSCkgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSAiCi0JCQkJCQkic3R1Y2tcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7Ci0JCQkJYXRoX2JzdHVja19wcm9jZXNzKHNjKTsKLQkJCX0KKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKIAkJfQorCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJfQorCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNTQyLDIxICs0NDAsMzAgQEAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CiAJdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKIAlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCWlmX2lkID0gc2MtPmJlYWNvbi5ic2xvdFsoc2xvdCArIDEpICUgQVRIX0JDQlVGXTsKKwkvKgorCSAqIFJldmVyc2UgdGhlIHNsb3Qgb3JkZXIgdG8gZ2V0IHNsb3QgMCBvbiB0aGUgVEJUVCBvZmZzZXQgdGhhdCBkb2VzCisJICogbm90IHJlcXVpcmUgVFNGIGFkanVzdG1lbnQgYW5kIG90aGVyIHNsb3RzIGFkZGluZworCSAqIHNsb3QvQVRIX0JDQlVGICogYmVhY29uX2ludCB0byB0aW1lc3RhbXAuIEZvciBleGFtcGxlLCB3aXRoCisJICogQVRIX0JDQlVGID0gNCwgd2UgcHJvY2VzcyBiZWFjb24gc2xvdHMgYXMgZm9sbG93czogMyAyIDEgMCAzIDIgMSAuLgorCSAqIGFuZCBzbG90IDAgaXMgYXQgY29ycmVjdCBvZmZzZXQgdG8gVEJUVC4KKwkgKi8KKwlzbG90ID0gQVRIX0JDQlVGIC0gc2xvdCAtIDE7CisJdmlmID0gc2MtPmJlYWNvbi5ic2xvdFtzbG90XTsKKwlhcGh5ID0gc2MtPmJlYWNvbi5ic2xvdF9hcGh5W3Nsb3RdOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIGlmX2lkICVkXG4iLAotCQlzbG90LCAodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCWludHZhbCwgaWZfaWQpOworCQkic2xvdCAlZCBbdHNmICVsbHUgdHNmdHUgJXUgaW50dmFsICV1XSB2aWYgJXBcbiIsCisJCXNsb3QsIHRzZiwgdHNmdHUsIGludHZhbCwgdmlmKTsKIAogCWJmYWRkciA9IDA7Ci0JaWYgKGlmX2lkICE9IEFUSF9JRl9JRF9BTlkpIHsKLQkJYmYgPSBhdGhfYmVhY29uX2dlbmVyYXRlKHNjLCBpZl9pZCk7CisJaWYgKHZpZikgeworCQliZiA9IGF0aF9iZWFjb25fZ2VuZXJhdGUoYXBoeS0+aHcsIHZpZik7CiAJCWlmIChiZiAhPSBOVUxMKSB7CiAJCQliZmFkZHIgPSBiZi0+YmZfZGFkZHI7CiAJCQliYyA9IDE7CiAJCX0KIAl9CisKIAkvKgogCSAqIEhhbmRsZSBzbG90IHRpbWUgY2hhbmdlIHdoZW4gYSBub24tRVJQIHN0YXRpb24gam9pbnMvbGVhdmVzCiAJICogYW4gMTFnIG5ldHdvcmsuICBUaGUgODAyLjExIGxheWVyIG5vdGlmaWVzIHVzIHZpYSBjYWxsYmFjaywKQEAgLTU3Myw3ICs0ODAsNiBAQAogCSAqICAgICBpbnRlcnZhbCBoYXMgcGFzc2VkLiAgV2hlbiBidXJzdGluZyBzbG90IGlzIGFsd2F5cyBsZWZ0CiAJICogICAgIHNldCB0byBBVEhfQkNCVUYgc28gdGhpcyBjaGVjayBpcyBhIG5vb3AuCiAJICovCi0JLyogWFhYIGxvY2tpbmcgKi8KIAlpZiAoc2MtPmJlYWNvbi51cGRhdGVzbG90ID09IFVQREFURSkgewogCQlzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPSBDT01NSVQ7IC8qIGNvbW1pdCBuZXh0IGJlYWNvbiAqLwogCQlzYy0+YmVhY29uLnNsb3R1cGRhdGUgPSBzbG90OwpAQCAtNTkwLDUyICs0OTYsMjI0IEBACiAJCWlmICghYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJCSJiZWFjb24gcXVldWUgJXUgZGlkIG5vdCBzdG9wP1xuIiwgc2MtPmJlYWNvbi5iZWFjb25xKTsKLQkJCS8qIE5COiB0aGUgSEFMIHN0aWxsIHN0b3BzIERNQSwgc28gcHJvY2VlZCAqLwogCQl9CiAKIAkJLyogTkI6IGNhYnEgdHJhZmZpYyBzaG91bGQgYWxyZWFkeSBiZSBxdWV1ZWQgYW5kIHByaW1lZCAqLwogCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgc2MtPmJlYWNvbi5iZWFjb25xLCBiZmFkZHIpOwogCQlhdGg5a19od190eHN0YXJ0KGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi0JCXNjLT5iZWFjb24uYXN0X2JlX3htaXQgKz0gYmM7ICAgICAvKiBYWFggcGVyLXZhcD8gKi8KKwkJc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCArPSBiYzsgICAgIC8qIFhYWCBwZXItdmlmPyAqLwogCX0KIH0KIAogLyoKLSAqIENvbmZpZ3VyZSB0aGUgYmVhY29uIGFuZCBzbGVlcCB0aW1lcnMuCi0gKgotICogV2hlbiBvcGVyYXRpbmcgYXMgYW4gQVAgdGhpcyByZXNldHMgdGhlIFRTRiBhbmQgc2V0cwotICogdXAgdGhlIGhhcmR3YXJlIHRvIG5vdGlmeSB1cyB3aGVuIHdlIG5lZWQgdG8gaXNzdWUgYmVhY29ucy4KLSAqCi0gKiBXaGVuIG9wZXJhdGluZyBpbiBzdGF0aW9uIG1vZGUgdGhpcyBzZXRzIHVwIHRoZSBiZWFjb24KLSAqIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZWNlaXZlZAotICogYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCi0gKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUKLSAqIHdpbGwgd2FrZXVwIGluIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcwotICogdGhlIGJlYWNvbiBtaXNzIGhhbmRsaW5nIHNvIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUwotICogaW50ZXJydXB0IHdoZW4gd2Ugc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUAotICogd2UndmUgYXNzb2NpYXRlZCB3aXRoLgorICogRm9yIG11bHRpLWJzcyBhcCBzdXBwb3J0IGJlYWNvbnMgYXJlIGVpdGhlciBzdGFnZ2VyZWQgZXZlbmx5IG92ZXIgTiBzbG90cyBvcgorICogYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lciBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2gKKyAqIHNsb3QuIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCiAgKi8KLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJIHN0cnVjdCBhdGhfdmlmICphdnApCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIGNvbmY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKIAl1MzIgbmV4dHRidHQsIGludHZhbDsKIAotCWlmIChpZl9pZCAhPSBBVEhfSUZfSURfQU5ZKSB7Ci0JCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQkJQVNTRVJUKHZpZik7Ci0JCWF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKLQkJb3Btb2RlID0gYXZwLT5hdl9vcG1vZGU7CisJLyogQ29uZmlndXJlIHRoZSB0aW1lcnMgb25seSB3aGVuIHRoZSBUU0YgaGFzIHRvIGJlIHJlc2V0ICovCisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UU0ZfUkVTRVQpKQorCQlyZXR1cm47CisKKwkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLworCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCisJbmV4dHRidHQgPSBpbnR2YWw7CisJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9SRVNFVF9UU0Y7CisKKwkvKgorCSAqIEluIEFQIG1vZGUgd2UgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGFuZCBTV0JBIGludGVycnVwdHMgdG8KKwkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuCisJICovCisJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CisJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CisKKwkvKiBTZXQgdGhlIGNvbXB1dGVkIEFQIGJlYWNvbiB0aW1lcnMgKi8KKworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgMCk7CisJYXRoOWtfaHdfYmVhY29uaW5pdChzYy0+c2NfYWgsIG5leHR0YnR0LCBpbnR2YWwpOworCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKKworCS8qIENsZWFyIHRoZSByZXNldCBUU0YgZmxhZywgc28gdGhhdCBzdWJzZXF1ZW50IGJlYWNvbiB1cGRhdGlvbgorCSAgIHdpbGwgbm90IHJlc2V0IHRoZSBIVyBUU0YuICovCisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1RTRl9SRVNFVDsKK30KKworLyoKKyAqIFRoaXMgc2V0cyB1cCB0aGUgYmVhY29uIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdAorICogcmVjZWl2ZWQgYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCisgKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUgd2lsbCB3YWtldXAgaW4KKyAqIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcyB0aGUgYmVhY29uIG1pc3MgaGFuZGxpbmcgc28KKyAqIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZSBzdG9wIHNlZWluZyBiZWFjb25zIGZyb20gdGhlIEFQCisgKiB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGguCisgKi8KK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX3N0YShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZiwKKwkJCQkgIHN0cnVjdCBhdGhfdmlmICphdnApCit7CisJc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSBiczsKKwlpbnQgZHRpbXBlcmlvZCwgZHRpbWNvdW50LCBzbGVlcGR1cmF0aW9uOworCWludCBjZnBwZXJpb2QsIGNmcGNvdW50OworCXUzMiBuZXh0dGJ0dCA9IDAsIGludHZhbCwgdHNmdHU7CisJdTY0IHRzZjsKKworCW1lbXNldCgmYnMsIDAsIHNpemVvZihicykpOworCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisKKwkvKgorCSAqIFNldHVwIGR0aW0gYW5kIGNmcCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bworCSAqIGxhc3QgYmVhY29uIHdlIHJlY2VpdmVkICh3aGljaCBtYXkgYmUgbm9uZSkuCisJICovCisJZHRpbXBlcmlvZCA9IGNvbmYtPmR0aW1fcGVyaW9kOworCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KKwkJZHRpbXBlcmlvZCA9IDE7CisJZHRpbWNvdW50ID0gY29uZi0+ZHRpbV9jb3VudDsKKwlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KKwkJZHRpbWNvdW50ID0gMDsKKwljZnBwZXJpb2QgPSAxOwkJCS8qIE5COiBubyBQQ0Ygc3VwcG9ydCB5ZXQgKi8KKwljZnBjb3VudCA9IDA7CisKKwlzbGVlcGR1cmF0aW9uID0gY29uZi0+bGlzdGVuX2ludGVydmFsICogaW50dmFsOworCWlmIChzbGVlcGR1cmF0aW9uIDw9IDApCisJCXNsZWVwZHVyYXRpb24gPSBpbnR2YWw7CisKKwkvKgorCSAqIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50CisJICogVFNGIGFuZCBjYWxjdWxhdGUgZHRpbStjZnAgc3RhdGUgZm9yIHRoZSByZXN1bHQuCisJICovCisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSh0c2Y+PjMyLCB0c2YpICsgRlVER0U7CisJZG8geworCQluZXh0dGJ0dCArPSBpbnR2YWw7CisJCWlmICgtLWR0aW1jb3VudCA8IDApIHsKKwkJCWR0aW1jb3VudCA9IGR0aW1wZXJpb2QgLSAxOworCQkJaWYgKC0tY2ZwY291bnQgPCAwKQorCQkJCWNmcGNvdW50ID0gY2ZwcGVyaW9kIC0gMTsKKwkJfQorCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOworCisJYnMuYnNfaW50dmFsID0gaW50dmFsOworCWJzLmJzX25leHR0YnR0ID0gbmV4dHRidHQ7CisJYnMuYnNfZHRpbXBlcmlvZCA9IGR0aW1wZXJpb2QqaW50dmFsOworCWJzLmJzX25leHRkdGltID0gYnMuYnNfbmV4dHRidHQgKyBkdGltY291bnQqaW50dmFsOworCWJzLmJzX2NmcHBlcmlvZCA9IGNmcHBlcmlvZCpicy5ic19kdGltcGVyaW9kOworCWJzLmJzX2NmcG5leHQgPSBicy5ic19uZXh0ZHRpbSArIGNmcGNvdW50KmJzLmJzX2R0aW1wZXJpb2Q7CisJYnMuYnNfY2ZwbWF4ZHVyYXRpb24gPSAwOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRvIG1pc3MqIGJlZm9yZSB0YWtpbmcKKwkgKiBhIEJNSVNTIGludGVycnVwdC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkIGluIFRVIHNvIHdlIG9ubHkKKwkgKiBuZWVkIGNhbGN1bGF0ZSBiYXNlZAlvbiB0aGUgYmVhY29uIGludGVydmFsLiAgTm90ZSB0aGF0IHdlIGNsYW1wIHRoZQorCSAqIHJlc3VsdCB0byBhdCBtb3N0IDE1IGJlYWNvbnMuCisJICovCisJaWYgKHNsZWVwZHVyYXRpb24gPiBpbnR2YWwpIHsKKwkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKgorCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgLyAyOwogCX0gZWxzZSB7Ci0JCW9wbW9kZSA9IHNjLT5zY19haC0+YWhfb3Btb2RlOworCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IERJVl9ST1VORF9VUChjb25mLT5ibWlzc190aW1lb3V0LCBpbnR2YWwpOworCQlpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPiAxNSkKKwkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTU7CisJCWVsc2UgaWYgKGJzLmJzX2JtaXNzdGhyZXNob2xkIDw9IDApCisJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE7CiAJfQogCi0JbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yoc3RydWN0IGF0aF9iZWFjb25fY29uZmlnKSk7CisJLyoKKwkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uIFRoZSBjb25maWd1cmF0aW9uIGlzIGdpdmVuIGluIG1zLgorCSAqIFdlIGVuc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24gcGVyaW9kIGlzIHVzZWQuIEFsc28sIGlmIHRoZSBzbGVlcAorCSAqIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB0aGUgRFRJTSBwZXJpb2QgdGhlbiBpdCBtYWtlcyBzZW5zZXMKKwkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KKwkgKgorCSAqIFhYWCBmaXhlZCBhdCAxMDBtcworCSAqLwogCisJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IHJvdW5kdXAoSUVFRTgwMjExX01TX1RPX1RVKDEwMCksIHNsZWVwZHVyYXRpb24pOworCWlmIChicy5ic19zbGVlcGR1cmF0aW9uID4gYnMuYnNfZHRpbXBlcmlvZCkKKwkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7CisKKwkvKiBUU0Ygb3V0IG9mIHJhbmdlIHRocmVzaG9sZCBmaXhlZCBhdCAxIHNlY29uZCAqLworCWJzLmJzX3RzZm9vcl90aHJlc2hvbGQgPSBBVEg5S19UU0ZPT1JfVEhSRVNIT0xEOworCisJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJ0c2Y6ICVsbHUgdHNmdHU6ICV1XG4iLCB0c2YsIHRzZnR1KTsKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJImJtaXNzOiAldSBzbGVlcDogJXUgY2ZwLXBlcmlvZDogJXUgbWF4ZHVyOiAldSBuZXh0OiAldVxuIiwKKwkJYnMuYnNfYm1pc3N0aHJlc2hvbGQsIGJzLmJzX3NsZWVwZHVyYXRpb24sCisJCWJzLmJzX2NmcHBlcmlvZCwgYnMuYnNfY2ZwbWF4ZHVyYXRpb24sIGJzLmJzX2NmcG5leHQpOworCisJLyogU2V0IHRoZSBjb21wdXRlZCBTVEEgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc2MtPnNjX2FoLCAmYnMpOworCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfQk1JU1M7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworfQorCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX2NvbmZpZ19hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAorCQkJCSAgICBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXU2NCB0c2Y7CisJdTMyIHRzZnR1LCBpbnR2YWwsIG5leHR0YnR0OworCisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKworCS8qIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IFRTRiAqLworCisJbmV4dHRidHQgPSBUU0ZfVE9fVFUoc2MtPmJlYWNvbi5iY190c3RhbXAgPj4gMzIsIHNjLT5iZWFjb24uYmNfdHN0YW1wKTsKKwlpZiAobmV4dHRidHQgPT0gMCkKKyAgICAgICAgICAgICAgICBuZXh0dGJ0dCA9IGludHZhbDsKKyAgICAgICAgZWxzZSBpZiAoaW50dmFsKQorICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gcm91bmR1cChuZXh0dGJ0dCwgaW50dmFsKTsKKworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KHNjLT5zY19haCk7CisJdHNmdHUgPSBUU0ZfVE9fVFUoKHUzMikodHNmPj4zMiksICh1MzIpdHNmKSArIEZVREdFOworCWRvIHsKKwkJbmV4dHRidHQgKz0gaW50dmFsOworCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOworCisJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCSJJQlNTIG5leHR0YnR0ICV1IGludHZhbCAldSAoJXUpXG4iLAorCQluZXh0dGJ0dCwgaW50dmFsLCBjb25mLT5iZWFjb25faW50ZXJ2YWwpOworCisJLyoKKwkgKiBJbiBJQlNTIG1vZGUgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGJ1dCBvbmx5IGVuYWJsZSBTV0JBIGludGVycnVwdHMKKwkgKiBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5IHByZXBhcmUgYmVhY29uIGZyYW1lcy4gIE90aGVyd2lzZSB3ZSB1c2UgYQorCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUgZGVhbCB3aXRoIHRoaW5ncy4KKwkgKi8KKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKKwkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCisJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKKworCS8qIFNldCB0aGUgY29tcHV0ZWQgQURIT0MgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19iZWFjb25pbml0KHNjLT5zY19haCwgbmV4dHRidHQsIGludHZhbCk7CisJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpCisJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIHZpZik7Cit9CisKK3ZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIGNvbmY7CisKKwkvKiBTZXR1cCB0aGUgYmVhY29uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yoc3RydWN0IGF0aF9iZWFjb25fY29uZmlnKSk7CiAJY29uZi5iZWFjb25faW50ZXJ2YWwgPSBzYy0+aHctPmNvbmYuYmVhY29uX2ludCA/CiAJCXNjLT5ody0+Y29uZi5iZWFjb25faW50IDogQVRIX0RFRkFVTFRfQklOVFZBTDsKIAljb25mLmxpc3Rlbl9pbnRlcnZhbCA9IDE7CkBAIC02NDMsMjEyICs3MjEsMjYgQEAKIAljb25mLmR0aW1fY291bnQgPSAxOwogCWNvbmYuYm1pc3NfdGltZW91dCA9IEFUSF9ERUZBVUxUX0JNSVNTX0xJTUlUICogY29uZi5iZWFjb25faW50ZXJ2YWw7CiAKLQkvKiBleHRyYWN0IHRzdGFtcCBmcm9tIGxhc3QgYmVhY29uIGFuZCBjb252ZXJ0IHRvIFRVICovCi0JbmV4dHRidHQgPSBUU0ZfVE9fVFUoc2MtPmJlYWNvbi5iY190c3RhbXAgPj4gMzIsIHNjLT5iZWFjb24uYmNfdHN0YW1wKTsKKwlpZiAodmlmKSB7CisJCXN0cnVjdCBhdGhfdmlmICphdnAgPSAoc3RydWN0IGF0aF92aWYgKil2aWYtPmRydl9wcml2OwogCi0JLyogWFhYIGNvbmRpdGlvbmFsaXplIG11bHRpLWJzcyBzdXBwb3J0PyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkvKgotCQkgKiBGb3IgbXVsdGktYnNzIGFwIHN1cHBvcnQgYmVhY29ucyBhcmUgZWl0aGVyIHN0YWdnZXJlZAotCQkgKiBldmVubHkgb3ZlciBOIHNsb3RzIG9yIGJ1cnN0IHRvZ2V0aGVyLiAgRm9yIHRoZSBmb3JtZXIKLQkJICogYXJyYW5nZSBmb3IgdGhlIFNXQkEgdG8gYmUgZGVsaXZlcmVkIGZvciBlYWNoIHNsb3QuCi0JCSAqIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCi0JCSAqLwotCQkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLwotCQlpbnR2YWwgPSBjb25mLmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7Ci0JCWludHZhbCAvPSBBVEhfQkNCVUY7ICAgIC8qIGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLwotCX0gZWxzZSB7Ci0JCWludHZhbCA9IGNvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKLQl9Ci0KLQlpZiAobmV4dHRidHQgPT0gMCkJLyogZS5nLiBmb3IgYXAgbW9kZSAqLwotCQluZXh0dGJ0dCA9IGludHZhbDsKLQllbHNlIGlmIChpbnR2YWwpCS8qIE5COiBjYW4gYmUgMCBmb3IgbW9uaXRvciBtb2RlICovCi0JCW5leHR0YnR0ID0gcm91bmR1cChuZXh0dGJ0dCwgaW50dmFsKTsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCW5leHR0YnR0LCBpbnR2YWwsIGNvbmYuYmVhY29uX2ludGVydmFsKTsKLQotCS8qIENoZWNrIGZvciBOTDgwMjExX0lGVFlQRV9BUCBhbmQgc2Nfbm9zdGFiZWFjb25zIGZvciBXRFMgY2xpZW50ICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSBiczsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlpbnQgZHRpbXBlcmlvZCwgZHRpbWNvdW50LCBzbGVlcGR1cmF0aW9uOwotCQlpbnQgY2ZwcGVyaW9kLCBjZnBjb3VudDsKLQotCQkvKgotCQkgKiBTZXR1cCBkdGltIGFuZCBjZnAgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8KLQkJICogbGFzdCBiZWFjb24gd2UgcmVjZWl2ZWQgKHdoaWNoIG1heSBiZSBub25lKS4KLQkJICovCi0JCWR0aW1wZXJpb2QgPSBjb25mLmR0aW1fcGVyaW9kOwotCQlpZiAoZHRpbXBlcmlvZCA8PSAwKQkJLyogTkI6IDAgaWYgbm90IGtub3duICovCi0JCQlkdGltcGVyaW9kID0gMTsKLQkJZHRpbWNvdW50ID0gY29uZi5kdGltX2NvdW50OwotCQlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KLQkJCWR0aW1jb3VudCA9IDA7Ci0JCWNmcHBlcmlvZCA9IDE7CQkJLyogTkI6IG5vIFBDRiBzdXBwb3J0IHlldCAqLwotCQljZnBjb3VudCA9IDA7Ci0KLQkJc2xlZXBkdXJhdGlvbiA9IGNvbmYubGlzdGVuX2ludGVydmFsICogaW50dmFsOwotCQlpZiAoc2xlZXBkdXJhdGlvbiA8PSAwKQotCQkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKLQotI2RlZmluZSBGVURHRSAyCi0JCS8qCi0JCSAqIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50Ci0JCSAqIFRTRiBhbmQgY2FsY3VsYXRlIGR0aW0rY2ZwIHN0YXRlIGZvciB0aGUgcmVzdWx0LgotCQkgKi8KLQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQl0c2Z0dSA9IFRTRl9UT19UVSh0c2Y+PjMyLCB0c2YpICsgRlVER0U7Ci0JCWRvIHsKLQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCWlmICgtLWR0aW1jb3VudCA8IDApIHsKLQkJCQlkdGltY291bnQgPSBkdGltcGVyaW9kIC0gMTsKLQkJCQlpZiAoLS1jZnBjb3VudCA8IDApCi0JCQkJCWNmcGNvdW50ID0gY2ZwcGVyaW9kIC0gMTsKLQkJCX0KLQkJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7Ci0jdW5kZWYgRlVER0UKLQkJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7Ci0JCWJzLmJzX2ludHZhbCA9IGludHZhbDsKLQkJYnMuYnNfbmV4dHRidHQgPSBuZXh0dGJ0dDsKLQkJYnMuYnNfZHRpbXBlcmlvZCA9IGR0aW1wZXJpb2QqaW50dmFsOwotCQlicy5ic19uZXh0ZHRpbSA9IGJzLmJzX25leHR0YnR0ICsgZHRpbWNvdW50KmludHZhbDsKLQkJYnMuYnNfY2ZwcGVyaW9kID0gY2ZwcGVyaW9kKmJzLmJzX2R0aW1wZXJpb2Q7Ci0JCWJzLmJzX2NmcG5leHQgPSBicy5ic19uZXh0ZHRpbSArIGNmcGNvdW50KmJzLmJzX2R0aW1wZXJpb2Q7Ci0JCWJzLmJzX2NmcG1heGR1cmF0aW9uID0gMDsKLQotCQkvKgotCQkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRvIG1pc3MKLQkJICogYmVmb3JlIHRha2luZyBhIEJNSVNTIGludGVycnVwdC4gIFRoZSBjb25maWd1cmF0aW9uCi0JCSAqIGlzIHNwZWNpZmllZCBpbiBUVSBzbyB3ZSBvbmx5IG5lZWQgY2FsY3VsYXRlIGJhc2VkCi0JCSAqIG9uIHRoZSBiZWFjb24gaW50ZXJ2YWwuICBOb3RlIHRoYXQgd2UgY2xhbXAgdGhlCi0JCSAqIHJlc3VsdCB0byBhdCBtb3N0IDE1IGJlYWNvbnMuCi0JCSAqLwotCQlpZiAoc2xlZXBkdXJhdGlvbiA+IGludHZhbCkgewotCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSBjb25mLmxpc3Rlbl9pbnRlcnZhbCAqCi0JCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgLyAyOwotCQl9IGVsc2UgewotCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPQotCQkJCURJVl9ST1VORF9VUChjb25mLmJtaXNzX3RpbWVvdXQsIGludHZhbCk7Ci0JCQlpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPiAxNSkKLQkJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE1OwotCQkJZWxzZSBpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPD0gMCkKLQkJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE7CisJCXN3aXRjaChhdnAtPmF2X29wbW9kZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJYXRoX2JlYWNvbl9jb25maWdfYXAoc2MsICZjb25mLCBhdnApOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHNjLCAmY29uZiwgYXZwLCB2aWYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAorCQkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uICBUaGUgY29uZmlndXJhdGlvbiBpcwotCQkgKiBnaXZlbiBpbiBtcy4gIFdlIGluc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24KLQkJICogcGVyaW9kIGlzIHVzZWQuICBBbHNvLCBpZiB0aGUgc2xlZXAgZHVyYXRpb24gaXMKLQkJICogZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcwotCQkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KLQkJICoKLQkJICogWFhYIGZpeGVkIGF0IDEwMG1zCi0JCSAqLwotCi0JCWJzLmJzX3NsZWVwZHVyYXRpb24gPSByb3VuZHVwKElFRUU4MDIxMV9NU19UT19UVSgxMDApLAotCQkJCQkgICAgICBzbGVlcGR1cmF0aW9uKTsKLQkJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkidHNmICVsbHUgIgotCQkJInRzZjp0dSAldSAiCi0JCQkiaW50dmFsICV1ICIKLQkJCSJuZXh0dGJ0dCAldSAiCi0JCQkiZHRpbSAldSAiCi0JCQkibmV4dGR0aW0gJXUgIgotCQkJImJtaXNzICV1ICIKLQkJCSJzbGVlcCAldSAiCi0JCQkiY2ZwOnBlcmlvZCAldSAiCi0JCQkibWF4ZHVyICV1ICIKLQkJCSJuZXh0ICV1ICIKLQkJCSJ0aW1vZmZzZXQgJXVcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCQlicy5ic19pbnR2YWwsCi0JCQlicy5ic19uZXh0dGJ0dCwKLQkJCWJzLmJzX2R0aW1wZXJpb2QsCi0JCQlicy5ic19uZXh0ZHRpbSwKLQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkLAotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJCWJzLmJzX2NmcHBlcmlvZCwKLQkJCWJzLmJzX2NmcG1heGR1cmF0aW9uLAotCQkJYnMuYnNfY2ZwbmV4dCwKLQkJCWJzLmJzX3RpbW9mZnNldAotCQkJKTsKLQotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7Ci0JfSBlbHNlIHsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWlmIChuZXh0dGJ0dCA9PSBpbnR2YWwpCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkvKgotCQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJCSAqIFRTRgotCQkJICovCi0jZGVmaW5lIEZVREdFIDIKLQkJCWlmICghKGludHZhbCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpKSB7Ci0JCQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQkJCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLAotCQkJCQkodTMyKXRzZikgKyBGVURHRTsKLQkJCQlkbyB7Ci0JCQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLQkJCX0KLSN1bmRlZiBGVURHRQotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCQkJbmV4dHRidHQsCi0JCQkJaW50dmFsICYgfkFUSDlLX0JFQUNPTl9SRVNFVF9UU0YsCi0JCQkJY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JCQkvKgotCQkJICogSW4gSUJTUyBtb2RlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBidXQgb25seQotCQkJICogZW5hYmxlIFNXQkEgaW50ZXJydXB0cyBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0JCQkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKLQkJCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUKLQkJCSAqIGRlYWwgd2l0aCB0aGluZ3MuCi0JCQkgKi8KLQkJCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOwotCQkJaWYgKCEoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCQlhdGhfYmVhY29ucV9jb25maWcoc2MpOwotCQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQkvKgotCQkJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kCi0JCQkgKiBTV0JBIGludGVycnVwdHMgdG8gcHJlcGFyZSBiZWFjb24gZnJhbWVzLgotCQkJICovCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKLQkJCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsgICAvKiBiZWFjb24gcHJlcGFyZSAqLwotCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKLQkJfQotCQlhdGg5a19od19iZWFjb25pbml0KGFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOwotCQkvKgotCQkgKiBXaGVuIHVzaW5nIGEgc2VsZi1saW5rZWQgYmVhY29uIGRlc2NyaXB0b3IgaW4KLQkJICogaWJzcyBtb2RlIGxvYWQgaXQgb25jZSBoZXJlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JCSAgICAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIDApOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKIAl9CiB9Ci0KLXZvaWQgYXRoX2JlYWNvbl9zeW5jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCi17Ci0JLyoKLQkgKiBSZXN5bmMgYmVhY29uIHRpbWVycyB1c2luZyB0aGUgdHNmIG9mIHRoZQotCSAqIGJlYWNvbiBmcmFtZSB3ZSBqdXN0IHJlY2VpdmVkLgotCSAqLwotCWF0aF9iZWFjb25fY29uZmlnKHNjLCBpZl9pZCk7Ci0Jc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuYwppbmRleCAzYzc0NTRmLi5lMmQ2MmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCwxMiArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0KLXN0YXRpYyBjb25zdCBpbnQxNl90IE5PSVNFX0ZMT09SW10gPSB7IC05NiwgLTkzLCAtOTgsIC05NiwgLTkzLCAtOTYgfTsKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAvKiBXZSBjYW4gdHVuZSB0aGlzIGFzIHdlIGdvIGJ5IG1vbml0b3JpbmcgcmVhbGx5IGxvdyB2YWx1ZXMgKi8KICNkZWZpbmUgQVRIOUtfTkZfVE9PX0xPVwktNjAKQEAgLTI4LDcgKzIzLDcgQEAKICAqIGlzIGluY29ycmVjdCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgc3RhdGljIE5GIHZhbHVlLiBMYXRlciB3ZSBjYW4gdHJ5IHRvCiAgKiBmaW5kIG91dCB3aHkgdGhleSBhcmUgcmVwb3J0aW5nIHRoZXNlIHZhbHVlcyAqLwogCi1zdGF0aWMgYm9vbCBhdGg5a19od19uZl9pbl9yYW5nZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHMxNiBuZikKK3N0YXRpYyBib29sIGF0aDlrX2h3X25mX2luX3JhbmdlKHN0cnVjdCBhdGhfaHcgKmFoLCBzMTYgbmYpCiB7CiAJaWYgKG5mID4gQVRIOUtfTkZfVE9PX0xPVykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCkBAIC05MSw3ICs4Niw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIGludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdKQogewogCWludDE2X3QgbmY7CkBAIC0xMDcsMjcgKzEwMiwyOSBAQAogCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMF0gaXMgJWRcbiIsIG5mKTsKIAluZmFycmF5WzBdID0gbmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAotCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7Ci0JZWxzZQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0NDQSksCi0JCQlBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOworCWlmICghQVJfU1JFVl85Mjg1KGFoKSkgeworCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKKwkJCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7CisJCWVsc2UKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKIAotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzFdID0gbmY7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9DQ0EpLAotCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKIAkJaWYgKG5mICYgMHgxMDApCiAJCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAyXSBpcyAlZFxuIiwgbmYpOwotCQluZmFycmF5WzJdID0gbmY7CisJCQkJIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDFdIGlzICVkXG4iLCBuZik7CisJCW5mYXJyYXlbMV0gPSBuZjsKKworCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDJfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKKwkJCWlmIChuZiAmIDB4MTAwKQorCQkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKKwkJCW5mYXJyYXlbMl0gPSBuZjsKKwkJfQogCX0KIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQpAQCAtMTQzLDU4ICsxNDAsNTIgQEAKIAkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDBdIGlzICVkXG4iLCBuZik7CiAJbmZhcnJheVszXSA9IG5mOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCi0JCQlBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7Ci0JZWxzZQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAotCQkJQVJfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CisJaWYgKCFBUl9TUkVWXzkyODUoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9FWFRfQ0NBKSwKKwkJCQkJQVI5MjgwX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IpOworCQllbHNlCisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKIAotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzRdID0gbmY7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwKLQkJCUFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IpOwogCQlpZiAobmYgJiAweDEwMCkKIAkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7Ci0JCW5mYXJyYXlbNV0gPSBuZjsKKwkJCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKKwkJbmZhcnJheVs0XSA9IG5mOworCisJCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMl9FWFRfTUlOQ0NBX1BXUik7CisJCQlpZiAobmYgJiAweDEwMCkKKwkJCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7CisJCQluZmFycmF5WzVdID0gbmY7CisJCX0KIAl9CiB9CiAKLXN0YXRpYyBib29sIGdldE5vaXNlRmxvb3JUaHJlc2goc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIGJvb2wgZ2V0Tm9pc2VGbG9vclRocmVzaChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJaW50MTZfdCAqbmZ0KQogewotCXN3aXRjaCAoY2hhbi0+Y2hhbm1vZGUpIHsKLQljYXNlIENIQU5ORUxfQToKLQljYXNlIENIQU5ORUxfQV9IVDIwOgotCWNhc2UgQ0hBTk5FTF9BX0hUNDBQTFVTOgotCWNhc2UgQ0hBTk5FTF9BX0hUNDBNSU5VUzoKLQkJKm5mdCA9IChpbnQ4X3QpYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzUpOworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJKm5mdCA9IChpbnQ4X3QpYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF81KTsKIAkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX0I6Ci0JY2FzZSBDSEFOTkVMX0c6Ci0JY2FzZSBDSEFOTkVMX0dfSFQyMDoKLQljYXNlIENIQU5ORUxfR19IVDQwUExVUzoKLQljYXNlIENIQU5ORUxfR19IVDQwTUlOVVM6Ci0JCSpuZnQgPSAoaW50OF90KWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF8yKTsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCSpuZnQgPSAoaW50OF90KWFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTkZUSFJFU0hfMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsIGZsYWdzIDB4JXhcbiIsIGNoYW4tPmNoYW5uZWxGbGFncyk7CisJCUJVR19PTigxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCkKIHsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApLApAQCAtMjI4LDEwICsyMTksOSBAQAogCQkgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19DQUwpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJYXRoOWtfaHdfc2V0dXBfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwpAQCAtMjM5LDIzICsyMjksMjEgQEAKIAljdXJyQ2FsLT5jYWxTdGF0ZSA9IENBTF9SVU5OSU5HOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF9NZWFzMC5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMS5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMi5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMy5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMwLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczEuc2lnbltpXSA9IDA7CisJCWFoLT5tZWFzMi5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMzLnNpZ25baV0gPSAwOwogCX0KIAotCWFocC0+YWhfQ2FsU2FtcGxlcyA9IDA7CisJYWgtPmNhbF9zYW1wbGVzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiwKIAkJCQkgICAgIHU4IHJ4Y2hhaW5tYXNrLAogCQkJCSAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCwKIAkJCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJKmlzQ2FsRG9uZSA9IGZhbHNlOwogCiAJaWYgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9SVU5OSU5HKSB7CkBAIC0yNjMsOSArMjUxLDkgQEAKIAkJICAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19DQUwpKSB7CiAKIAkJCWN1cnJDYWwtPmNhbERhdGEtPmNhbENvbGxlY3QoYWgpOwotCQkJYWhwLT5haF9DYWxTYW1wbGVzKys7CisJCQlhaC0+Y2FsX3NhbXBsZXMrKzsKIAotCQkJaWYgKGFocC0+YWhfQ2FsU2FtcGxlcyA+PSBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxOdW1TYW1wbGVzKSB7CisJCQlpZiAoYWgtPmNhbF9zYW1wbGVzID49IGN1cnJDYWwtPmNhbERhdGEtPmNhbE51bVNhbXBsZXMpIHsKIAkJCQlpbnQgaSwgbnVtQ2hhaW5zID0gMDsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewogCQkJCQlpZiAocnhjaGFpbm1hc2sgJiAoMSA8PCBpKSkKQEAgLTI4NSwxMTMgKzI3MywxMDUgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKy8qIEFzc3VtZXMgeW91IGFyZSB0YWxraW5nIGFib3V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjaGFubmVsICovCitzdGF0aWMgYm9vbCBhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICBlbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWJvb2wgcmV0dmFsID0gZmFsc2U7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAKLQlzd2l0Y2ggKGNhbFR5cGUgJiBhaHAtPmFoX3N1cHBDYWxzKSB7Ci0JY2FzZSBJUV9NSVNNQVRDSF9DQUw6Ci0JCWlmICghSVNfQ0hBTl9CKGNoYW4pKQotCQkJcmV0dmFsID0gdHJ1ZTsKLQkJYnJlYWs7CisJc3dpdGNoIChjYWxUeXBlICYgYWgtPnN1cHBfY2FscykgeworCWNhc2UgSVFfTUlTTUFUQ0hfQ0FMOiAvKiBCb3RoIDIgR0h6IGFuZCA1IEdIeiBzdXBwb3J0IE9GRE0gKi8KKwkJcmV0dXJuIHRydWU7CiAJY2FzZSBBRENfR0FJTl9DQUw6CiAJY2FzZSBBRENfRENfQ0FMOgotCQlpZiAoIUlTX0NIQU5fQihjaGFuKQotCQkgICAgJiYgIShJU19DSEFOXzJHSFooY2hhbikgJiYgSVNfQ0hBTl9IVDIwKGNoYW4pKSkKLQkJCXJldHZhbCA9IHRydWU7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogJiYKKwkJICBjb25mX2lzX2h0MjAoY29uZikpCisJCQlyZXR1cm4gdHJ1ZTsKIAkJYnJlYWs7CiAJfQotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2lxY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV0gKz0KKwkJYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18wKGkpKTsKLQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc1FbaV0gKz0KKwkJYWgtPnRvdGFsUG93ZXJNZWFzUVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKLQkJYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV0gKz0KKwkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMihpKSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIHBtaT0weCUwOHg7cG1xPTB4JTA4eDtpcWNtPTB4JTA4eDtcbiIsCi0JCQlhaHAtPmFoX0NhbFNhbXBsZXMsIGksIGFocC0+YWhfdG90YWxQb3dlck1lYXNJW2ldLAotCQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc1FbaV0sCi0JCQlhaHAtPmFoX3RvdGFsSXFDb3JyTWVhc1tpXSk7CisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCisJCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldLAorCQkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jb2xsZWN0KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzAoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY1FPZGRQaGFzZVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY1FFdmVuUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjUUV2ZW5QaGFzZVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18zKGkpKTsKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkiJWQ6IENobiAlZCBvZGRpPTB4JTA4eDsgZXZlbmk9MHglMDh4OyAiCiAJCQkib2RkcT0weCUwOHg7IGV2ZW5xPTB4JTA4eDtcbiIsCi0JCQlhaHAtPmFoX0NhbFNhbXBsZXMsIGksCi0JCQlhaHAtPmFoX3RvdGFsQWRjSU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY0lFdmVuUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY1FFdmVuUGhhc2VbaV0pOworCQkJYWgtPmNhbF9zYW1wbGVzLCBpLAorCQkJYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjSUV2ZW5QaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY1FPZGRQaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV0pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIG9kZGk9MHglMDh4OyBldmVuaT0weCUwOHg7ICIKIAkJCSJvZGRxPTB4JTA4eDsgZXZlbnE9MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldKTsKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwKKwkJCWFoLT50b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTggbnVtQ2hhaW5zKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIHBvd2VyTWVhc1EsIHBvd2VyTWVhc0ksIGlxQ29yck1lYXM7CiAJdTMyIHFDb2ZmRGVub20sIGlDb2ZmRGVub207CiAJaW50MzJfdCBxQ29mZiwgaUNvZmY7CiAJaW50IGlxQ29yck5lZywgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlwb3dlck1lYXNJID0gYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV07Ci0JCXBvd2VyTWVhc1EgPSBhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXTsKLQkJaXFDb3JyTWVhcyA9IGFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldOworCQlwb3dlck1lYXNJID0gYWgtPnRvdGFsUG93ZXJNZWFzSVtpXTsKKwkJcG93ZXJNZWFzUSA9IGFoLT50b3RhbFBvd2VyTWVhc1FbaV07CisJCWlxQ29yck1lYXMgPSBhaC0+dG90YWxJcUNvcnJNZWFzW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBJUSBDYWwgYW5kIENvcnJlY3Rpb24gZm9yIENoYWluICVkXG4iLApAQCAtMzk5LDcgKzM3OSw3IEBACiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIk9yaWduYWw6IENobiAlZGlxX2NvcnJfbWVhcyA9IDB4JTA4eFxuIiwKLQkJCWksIGFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJCWksIGFoLT50b3RhbElxQ29yck1lYXNbaV0pOwogCiAJCWlxQ29yck5lZyA9IDA7CiAKQEAgLTQ1NywxNyArNDM3LDE2IEBACiAJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9FTkFCTEUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHU4IG51bUNoYWlucykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBpT2RkTWVhc09mZnNldCwgaUV2ZW5NZWFzT2Zmc2V0LCBxT2RkTWVhc09mZnNldCwgcUV2ZW5NZWFzT2Zmc2V0OwogCXUzMiBxR2Fpbk1pc21hdGNoLCBpR2Fpbk1pc21hdGNoLCB2YWwsIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtQ2hhaW5zOyBpKyspIHsKLQkJaU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjSU9kZFBoYXNlW2ldOwotCQlpRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXTsKLQkJcU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldOwotCQlxRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXTsKKwkJaU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV07CisJCWlFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0lFdmVuUGhhc2VbaV07CisJCXFPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldOworCQlxRXZlbk1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNRRXZlblBoYXNlW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBBREMgR2FpbiBDYWwgZm9yIENoYWluICVkXG4iLCBpKTsKQEAgLTUxNSwyMSArNDk0LDIwIEBACiAJCSAgQVJfUEhZX05FV19BRENfR0FJTl9DT1JSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19kY2NhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCBudW1DaGFpbnMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgaU9kZE1lYXNPZmZzZXQsIGlFdmVuTWVhc09mZnNldCwgdmFsLCBpOwogCWludDMyX3QgcU9kZE1lYXNPZmZzZXQsIHFFdmVuTWVhc09mZnNldCwgcURjTWlzbWF0Y2gsIGlEY01pc21hdGNoOwogCWNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgKmNhbERhdGEgPQotCQlhaHAtPmFoX2NhbF9saXN0X2N1cnItPmNhbERhdGE7CisJCWFoLT5jYWxfbGlzdF9jdXJyLT5jYWxEYXRhOwogCXUzMiBudW1TYW1wbGVzID0KIAkJKDEgPDwgKGNhbERhdGEtPmNhbENvdW50TWF4ICsgNSkpICogY2FsRGF0YS0+Y2FsTnVtU2FtcGxlczsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlpT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXTsKLQkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXTsKLQkJcU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV07Ci0JCXFFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV07CisJCWlPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2VbaV07CisJCWlFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXTsKKwkJcU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXTsKKwkJcUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBBREMgREMgT2Zmc2V0IENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOwpAQCAtNTczLDUzICs1NTEsNDIgQEAKIAkJICBBUl9QSFlfTkVXX0FEQ19EQ19PRkZTRVRfQ09SUl9FTkFCTEUpOwogfQogCi12b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSkKKy8qIFRoaXMgaXMgZG9uZSBmb3IgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNoYW5uZWwgKi8KK2Jvb2wgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4gPQotCQlhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmN1cnJDYWwgPSBhaHAtPmFoX2NhbF9saXN0X2N1cnI7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFoLT5jYWxfbGlzdF9jdXJyOwogCi0JKmlzQ2FsRG9uZSA9IHRydWU7CisJaWYgKCFhaC0+Y3VyY2hhbikKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkgJiYgIUFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY3VyckNhbCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCisJCXJldHVybiB0cnVlOwogCiAJaWYgKGN1cnJDYWwtPmNhbFN0YXRlICE9IENBTF9ET05FKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJDYWxpYnJhdGlvbiBzdGF0ZSBpbmNvcnJlY3QsICVkXG4iLAogCQkJY3VyckNhbC0+Y2FsU3RhdGUpOwotCQlyZXR1cm47CisJCXJldHVybiB0cnVlOwogCX0KIAotCi0JaWYgKCFhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKQotCQlyZXR1cm47CisJaWYgKCFhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKQorCQlyZXR1cm4gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJIlJlc2V0dGluZyBDYWwgJWQgc3RhdGUgZm9yIGNoYW5uZWwgJXUvMHgleFxuIiwKLQkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSwgY2hhbi0+Y2hhbm5lbCwKLQkJY2hhbi0+Y2hhbm5lbEZsYWdzKTsKKwkJIlJlc2V0dGluZyBDYWwgJWQgc3RhdGUgZm9yIGNoYW5uZWwgJXVcbiIsCisJCWN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUsIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCWljaGFuLT5DYWxWYWxpZCAmPSB+Y3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZTsKKwlhaC0+Y3VyY2hhbi0+Q2FsVmFsaWQgJj0gfmN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGU7CiAJY3VyckNhbC0+Y2FsU3RhdGUgPSBDQUxfV0FJVElORzsKIAotCSppc0NhbERvbmUgPSBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAogCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0VOQUJMRV9ORik7CkBAIC02MjgsNyArNTk1LDcgQEAKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwogfQogCi12b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQordm9pZCBhdGg5a19od19sb2FkbmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoOwogCWludCBpLCBqOwpAQCAtNjQzLDE2ICs2MTAsMTQgQEAKIAl9OwogCXU4IGNoYWlubWFzazsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQorCWlmIChBUl9TUkVWXzkyODUoYWgpKQorCQljaGFpbm1hc2sgPSAweDk7CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSkKIAkJY2hhaW5tYXNrID0gMHgxQjsKIAllbHNlCiAJCWNoYWlubWFzayA9IDB4M0Y7CiAKLSNpZmRlZiBBVEhfTkZfUEVSX0NIQU4KLQloID0gY2hhbi0+bmZDYWxIaXN0OwotI2Vsc2UKIAloID0gYWgtPm5mQ2FsSGlzdDsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CiAJCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgewpAQCAtNjg2LDE4ICs2NTEsMTMgQEAKIAl9CiB9CiAKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9oYWwgKmFoLAoraW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCWludDE2X3QgbmYsIG5mVGhyZXNoOwogCWludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdID0geyAwIH07CiAJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7Ci0JdTggY2hhaW5tYXNrOwotCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCi0JCWNoYWlubWFzayA9IDB4MUI7Ci0JZWxzZQotCQljaGFpbm1hc2sgPSAweDNGOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYyA9IGNoYW4tPmNoYW47CiAKIAljaGFuLT5jaGFubmVsRmxhZ3MgJj0gKH5DSEFOTkVMX0NXX0lOVCk7CiAJaWYgKFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpICYgQVJfUEhZX0FHQ19DT05UUk9MX05GKSB7CkBAIC03MDksNyArNjY5LDcgQEAKIAl9IGVsc2UgewogCQlhdGg5a19od19kb19nZXRuZihhaCwgbmZhcnJheSk7CiAJCW5mID0gbmZhcnJheVswXTsKLQkJaWYgKGdldE5vaXNlRmxvb3JUaHJlc2goYWgsIGNoYW4sICZuZlRocmVzaCkKKwkJaWYgKGdldE5vaXNlRmxvb3JUaHJlc2goYWgsIGMtPmJhbmQsICZuZlRocmVzaCkKIAkJICAgICYmIG5mID4gbmZUaHJlc2gpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCQkibm9pc2UgZmxvb3IgZmFpbGVkIGRldGVjdGVkOyAiCkBAIC03MTksMTEgKzY3OSw3IEBACiAJCX0KIAl9CiAKLSNpZmRlZiBBVEhfTkZfUEVSX0NIQU4KLQloID0gY2hhbi0+bmZDYWxIaXN0OwotI2Vsc2UKIAloID0gYWgtPm5mQ2FsSGlzdDsKLSNlbmRpZgogCiAJYXRoOWtfaHdfdXBkYXRlX25mY2FsX2hpc3RfYnVmZmVyKGgsIG5mYXJyYXkpOwogCWNoYW4tPnJhd05vaXNlRmxvb3IgPSBoWzBdLnByaXZORjsKQEAgLTczMSw3ICs2ODcsNyBAQAogCXJldHVybiBjaGFuLT5yYXdOb2lzZUZsb29yOwogfQogCi12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBpLCBqOwogCkBAIC03NDUsMjYgKzcwMSwxNiBAQAogCQkJCUFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CiAJCX0KIAl9Ci0JcmV0dXJuOwogfQogCi1zMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorczE2IGF0aDlrX2h3X2dldGNoYW5fbm9pc2Uoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbjsKIAlzMTYgbmY7CiAKLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKGljaGFuID09IE5VTEwpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwotCX0KLQlpZiAoaWNoYW4tPnJhd05vaXNlRmxvb3IgPT0gMCkgewotCQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQluZiA9IE5PSVNFX0ZMT09SW21vZGVdOwotCX0gZWxzZQotCQluZiA9IGljaGFuLT5yYXdOb2lzZUZsb29yOworCWlmIChjaGFuLT5yYXdOb2lzZUZsb29yID09IDApCisJCW5mID0gLTk2OworCWVsc2UKKwkJbmYgPSBjaGFuLT5yYXdOb2lzZUZsb29yOwogCiAJaWYgKCFhdGg5a19od19uZl9pbl9yYW5nZShhaCwgbmYpKQogCQluZiA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwpAQCAtNzcyLDUzICs3MTgsMzQgQEAKIAlyZXR1cm4gbmY7CiB9CiAKLWJvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAotCQkJYm9vbCAqaXNDYWxEb25lKQorc3RhdGljIHZvaWQgYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFocC0+YWhfY2FsX2xpc3RfY3VycjsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4gPSBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOworCXUzMiByZGRhdGEsIGk7CisJaW50IGRlbHRhLCBjdXJyUERBREMsIHJlZ3ZhbDsKIAotCSppc0NhbERvbmUgPSB0cnVlOworCXJkZGF0YSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDQpOwogCi0JaWYgKGljaGFuID09IE5VTEwpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm8gbWFwcGluZ1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9CisJY3VyclBEQURDID0gTVMocmRkYXRhLCBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUKTsKIAotCWlmIChjdXJyQ2FsICYmCi0JICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAotCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7Ci0JCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgaWNoYW4sIHJ4Y2hhaW5tYXNrLCBjdXJyQ2FsLAotCQkJCQkgaXNDYWxEb25lKTsKLQkJaWYgKCppc0NhbERvbmUpIHsKLQkJCWFocC0+YWhfY2FsX2xpc3RfY3VyciA9IGN1cnJDYWwgPSBjdXJyQ2FsLT5jYWxOZXh0OworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0RBQ19IUFdSXzVHKSkKKwkJZGVsdGEgPSAoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQyArIDQpIC8gODsKKwllbHNlCisJCWRlbHRhID0gKGN1cnJQREFEQyAtIGFoLT5pbml0UERBREMgKyA1KSAvIDEwOwogCi0JCQlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpIHsKLQkJCQkqaXNDYWxEb25lID0gZmFsc2U7Ci0JCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwotCQkJfQorCWlmIChkZWx0YSAhPSBhaC0+UERBRENkZWx0YSkgeworCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOworCQlmb3IgKGkgPSAxOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKSB7CisJCQlyZWd2YWwgPSBhaC0+b3JpZ2luYWxHYWluW2ldIC0gZGVsdGE7CisJCQlpZiAocmVndmFsIDwgMCkKKwkJCQlyZWd2YWwgPSAwOworCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQsCisJCQkJCUFSX1BIWV9UWF9HQUlOLCByZWd2YWwpOwogCQl9CiAJfQotCi0JaWYgKGxvbmdjYWwpIHsKLQkJYXRoOWtfaHdfZ2V0bmYoYWgsIGljaGFuKTsKLQkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+YWhfY3VyY2hhbik7Ci0JCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKLQotCQlpZiAoKGljaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0NXX0lOVCkgIT0gMCkgewotCQkJY2hhbi0+Y2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfQ1dfSU5UOwotCQkJaWNoYW4tPmNoYW5uZWxGbGFncyAmPSB+Q0hBTk5FTF9DV19JTlQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od185Mjg1X3BhX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAogCXUzMiByZWdWYWw7CkBAIC05MTMsNTkgKzg0MCwxNzEgQEAKIAogfQogCi1ib29sIGF0aDlrX2h3X2luaXRfY2FsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCisJCQlib29sICppc0NhbERvbmUpCit7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFoLT5jYWxfbGlzdF9jdXJyOworCisJKmlzQ2FsRG9uZSA9IHRydWU7CisKKwlpZiAoY3VyckNhbCAmJgorCSAgICAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1JVTk5JTkcgfHwKKwkgICAgIGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9XQUlUSU5HKSkgeworCQlhdGg5a19od19wZXJfY2FsaWJyYXRpb24oYWgsIGNoYW4sIHJ4Y2hhaW5tYXNrLCBjdXJyQ2FsLAorCQkJCQkgaXNDYWxEb25lKTsKKwkJaWYgKCppc0NhbERvbmUpIHsKKwkJCWFoLT5jYWxfbGlzdF9jdXJyID0gY3VyckNhbCA9IGN1cnJDYWwtPmNhbE5leHQ7CisKKwkJCWlmIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykgeworCQkJCSppc0NhbERvbmUgPSBmYWxzZTsKKwkJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobG9uZ2NhbCkgeworCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoYWgpKQorCQkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgpOworCisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJCWF0aDlrX29sY190ZW1wX2NvbXBlbnNhdGlvbihhaCk7CisJCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKwkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CisJCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKKworCQlpZiAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9DV19JTlQpCisJCQljaGFuLT5jaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfQ1dfSU5UOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBhcjkyODVfY2xjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwlpZiAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9IVDIwKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX1BBUkFMTEVMX0NBTF9FTkFCTEUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RVUkJPLCBBUl9QSFlfRkNfRFlOMjA0MF9FTik7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisJCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkgIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwgIm9mZnNldCAiCisJCQkJImNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAiCisJCQkJIjFtczsgbm9pc3kgPz9cbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCX0KKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsCisJCQkgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0IGNhbGlicmF0aW9uICIKKwkJCQkiZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgbm9pc3kgPz9cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkgJiYgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCQlpZiAoIWFyOTI4NV9jbGMoYWgsIGNoYW4pKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKIAorCQkvKiBLaWNrIG9mZiB0aGUgY2FsICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKKwkJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkJQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwKKwkJCQkJQUhfV0FJVF9USU1FT1VUKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJvZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgIgorCQkJCSJub2lzeSBlbnZpcm9ubWVudD9cbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSk7CisJfQorCisJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8Ci0JCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8CisJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKIAotCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLCAwKSkgeworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLAorCQkJCTAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyAiCiAJCQkibm9pc3kgZW52aXJvbm1lbnQ/XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJfQorCisJLyogRG8gUEEgQ2FsaWJyYXRpb24gKi8KIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoYWgpKQogCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CiAKKwkvKiBEbyBORiBDYWxpYnJhdGlvbiAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKLQkJICBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOworCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKIAotCWFocC0+YWhfY2FsX2xpc3QgPSBhaHAtPmFoX2NhbF9saXN0X2xhc3QgPSBhaHAtPmFoX2NhbF9saXN0X2N1cnIgPSBOVUxMOworCWFoLT5jYWxfbGlzdCA9IGFoLT5jYWxfbGlzdF9sYXN0ID0gYWgtPmNhbF9saXN0X2N1cnIgPSBOVUxMOwogCiAJaWYgKEFSX1NSRVZfOTEwMChhaCkgfHwgQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewotCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBjaGFuLCBBRENfR0FJTl9DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9hZGNHYWluQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfYWRjR2FpbkNhbERhdGEpOworCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBBRENfR0FJTl9DQUwpKSB7CisJCQlJTklUX0NBTCgmYWgtPmFkY2dhaW5fY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2dhaW5fY2FsZGF0YSk7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgR2FpbiBDYWxpYnJhdGlvbi5cbiIpOwogCQl9Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19EQ19DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9hZGNEY0NhbERhdGEpOwotCQkJSU5TRVJUX0NBTChhaHAsICZhaHAtPmFoX2FkY0RjQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIEFEQ19EQ19DQUwpKSB7CisJCQlJTklUX0NBTCgmYWgtPmFkY2RjX2NhbGRhdGEpOworCQkJSU5TRVJUX0NBTChhaCwgJmFoLT5hZGNkY19jYWxkYXRhKTsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIERDIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQotCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBjaGFuLCBJUV9NSVNNQVRDSF9DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9pcUNhbERhdGEpOwotCQkJSU5TRVJUX0NBTChhaHAsICZhaHAtPmFoX2lxQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIElRX01JU01BVENIX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmlxX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQkJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQogCi0JCWFocC0+YWhfY2FsX2xpc3RfY3VyciA9IGFocC0+YWhfY2FsX2xpc3Q7CisJCWFoLT5jYWxfbGlzdF9jdXJyID0gYWgtPmNhbF9saXN0OwogCi0JCWlmIChhaHAtPmFoX2NhbF9saXN0X2N1cnIpCi0JCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgYWhwLT5haF9jYWxfbGlzdF9jdXJyKTsKKwkJaWYgKGFoLT5jYWxfbGlzdF9jdXJyKQorCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGFoLT5jYWxfbGlzdF9jdXJyKTsKIAl9CiAKLQlpY2hhbi0+Q2FsVmFsaWQgPSAwOworCWNoYW4tPkNhbFZhbGlkID0gMDsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3NGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIENBTElCX0gKKyNkZWZpbmUgQ0FMSUJfSAorCitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19pbml0X2RjX2NhbDsKKworI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKKworI2RlZmluZSBOVU1fTkZfUkVBRElOR1MgICAgICAgNgorI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggNQorCitzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgeworCXUzMiAqaWFfYXJyYXk7CisJdTMyIGlhX3Jvd3M7CisJdTMyIGlhX2NvbHVtbnM7Cit9OworCisjZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCisJCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCisJCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAorCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAorCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQorCisjZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAorCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKKwkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoX2FocCktPmNhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKKwkJCShfYWhwKS0+Y2FsX2xpc3QgPQkJCQlcCisJCQkJKF9haHApLT5jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCisJCQkoKF9haHApLT5jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCSgoX2FocCktPmNhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCisJCQkoX2FocCktPmNhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCisJCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmNhbF9saXN0OwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0gaGFsX2NhbF90eXBlcyB7CisJQURDX0RDX0lOSVRfQ0FMID0gMHgxLAorCUFEQ19HQUlOX0NBTCA9IDB4MiwKKwlBRENfRENfQ0FMID0gMHg0LAorCUlRX01JU01BVENIX0NBTCA9IDB4OAorfTsKKworZW51bSBoYWxfY2FsX3N0YXRlIHsKKwlDQUxfSU5BQ1RJVkUsCisJQ0FMX1dBSVRJTkcsCisJQ0FMX1JVTk5JTkcsCisJQ0FMX0RPTkUKK307CisKKyNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCisjZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAorI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKKyNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCisjZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAorCitzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKKwllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKKwl1MzIgY2FsTnVtU2FtcGxlczsKKwl1MzIgY2FsQ291bnRNYXg7CisJdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2h3ICopOworCXZvaWQgKCpjYWxQb3N0UHJvYykgKHN0cnVjdCBhdGhfaHcgKiwgdTgpOworfTsKKworc3RydWN0IGhhbF9jYWxfbGlzdCB7CisJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKKwllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKK307CisKK3N0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKKwlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07CisJdTggY3VyckluZGV4OworCWludDE2X3QgcHJpdk5GOworCXU4IGludmFsaWRORmNvdW50OworfTsKKworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3MxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Citib29sIGF0aDlrX2h3X2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAorCQkJYm9vbCAqaXNDYWxEb25lKTsKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisKKyNlbmRpZiAvKiBDQUxJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYTJhZWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBDT1JFX0gKLSNkZWZpbmUgQ09SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLQotI2luY2x1ZGUgImF0aDlrLmgiCi0jaW5jbHVkZSAicmMuaCIKLQotc3RydWN0IGF0aF9ub2RlOwotCi0vKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwotCi0jZGVmaW5lCWl0bzY0KHgpIChzaXplb2YoeCkgPT0gOCkgPwkJCVwKLQkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAoMHhmZikpIDoJXAotCShzaXplb2YoeCkgPT0gMTYpID8JCQkJXAotCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZikgOglcCi0JKChzaXplb2YoeCkgPT0gMzIpID8JCQkJXAotCSAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmZmZmZmKSA6IFwKLQkgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKQotCi0vKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLwotI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKLQkJKF9sKSsrOwkJCQlcCi0JCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotLyogZGVjcmVtZW50IHdpdGggd3JhcC1hcm91bmQgKi8KLSNkZWZpbmUgREVDUihfbCwgIF9zeikgIGRvIHsJCQlcCi0JCShfbCktLTsJCQkJXAotCQkoX2wpICY9ICgoX3N6KSAtIDEpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQotI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAotCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAotCQkJQlVHKCk7CQkJXAotCQl9CQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAotCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKLQotI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQotCi1zdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0KLWVudW0gQVRIX0RFQlVHIHsKLQlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCi0JQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKLQlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCi0JQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKLQlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCi0JQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCi0JQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAotCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCi0JQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKLQlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAotCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAotCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCi0JQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKLQlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKLQlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCi0JQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgotfTsKLQotI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKLQotI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwotCi0vKioKLSAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCi0gKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKLSAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycwotICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQotICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KLSAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCi0gKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KLSAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKLSAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCi0gKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCi0gKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0Ci0gKiBAYm1pc3M6IEJlYWNvbiBNaXNzCi0gKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5Ci0gKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKLSAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0Ci0gKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKLSAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYwotICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQotICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KLSAqLwotc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgewotCXUzMiB0b3RhbDsKLQl1MzIgcnhvazsKLQl1MzIgcnhlb2w7Ci0JdTMyIHJ4b3JuOwotCXUzMiB0eG9rOwotCXUzMiB0eGVvbDsKLQl1MzIgdHh1cm47Ci0JdTMyIG1pYjsKLQl1MzIgcnhwaHllcnI7Ci0JdTMyIHJ4X2tleWNhY2hlX21pc3M7Ci0JdTMyIHN3YmE7Ci0JdTMyIGJtaXNzOwotCXUzMiBibnI7Ci0JdTMyIGNzdDsKLQl1MzIgZ3R0OwotCXUzMiB0aW07Ci0JdTMyIGNhYmVuZDsKLQl1MzIgZHRpbXN5bmM7Ci0JdTMyIGR0aW07Ci19OwotCi1zdHJ1Y3QgYXRoX3N0YXRzIHsKLQlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfZGVidWcgewotCWludCBkZWJ1Z19tYXNrOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKLQlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwotfTsKLQotdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci12b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKLQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICAgIGVudW0gYXRoOWtfaW50IHN0YXR1cykKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLwotCi1zdHJ1Y3QgYXRoX2NvbmZpZyB7Ci0JdTMyIGF0aF9hZ2dyX3Byb3Q7Ci0JdTE2IHR4cG93bGltaXQ7Ci0JdTE2IHR4cG93bGltaXRfb3ZlcnJpZGU7Ci0JdTggY2FicVJlYWR5dGltZTsKLQl1OCBzd0JlYWNvblByb2Nlc3M7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCi0JCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCi0JCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX2xhc3Rmcm0gPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCi0JCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSBidWZmZXJfdHlwZSB7Ci0JQlVGX0RBVEEJCT0gQklUKDApLAotCUJVRl9BR0dSCQk9IEJJVCgxKSwKLQlCVUZfQU1QRFUJCT0gQklUKDIpLAotCUJVRl9IVAkJCT0gQklUKDMpLAotCUJVRl9SRVRSWQkJPSBCSVQoNCksCi0JQlVGX1hSRVRSWQkJPSBCSVQoNSksCi0JQlVGX1NIT1JUX1BSRUFNQkxFCT0gQklUKDYpLAotCUJVRl9CQVIJCQk9IEJJVCg3KSwKLQlCVUZfUFNQT0xMCQk9IEJJVCg4KSwKLQlCVUZfQUdHUl9CVVJTVAkJPSBCSVQoOSksCi0JQlVGX0NBTENfQUlSVElNRQk9IEJJVCgxMCksCi19OwotCi1zdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7Ci0JaW50IGJmc19uZnJhbWVzOwkJLyogIyBmcmFtZXMgaW4gYWdncmVnYXRlICovCi0JdTE2IGJmc19hbDsJCQkvKiBsZW5ndGggb2YgYWdncmVnYXRlICovCi0JdTE2IGJmc19mcm1sZW47CQkJLyogbGVuZ3RoIG9mIGZyYW1lICovCi0JaW50IGJmc19zZXFubzsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KLQlpbnQgYmZzX3RpZG5vOwkJCS8qIHRpZCBvZiB0aGlzIGZyYW1lICovCi0JaW50IGJmc19yZXRyaWVzOwkJLyogY3VycmVudCByZXRyaWVzICovCi0JdTMyIGJmX3R5cGU7CQkJLyogQlVGXyogKGVudW0gYnVmZmVyX3R5cGUpICovCi0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwotfTsKLQotI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCi0jZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCi0jZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgotI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCi0jZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCi0jZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCi0jZGVmaW5lIGJmX3JjcyAgICAgICAgICAJYmZfc3RhdGUuYmZzX3JjcwotI2RlZmluZSBiZl9rZXlpeCAgICAgICAgICAgICAgICBiZl9zdGF0ZS5iZnNfa2V5aXgKLSNkZWZpbmUgYmZfa2V5dHlwZSAgICAgIAliZl9zdGF0ZS5iZnNfa2V5dHlwZQotI2RlZmluZSBiZl9pc2RhdGEoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfREFUQSkKLSNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCi0jZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCi0jZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCi0jZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQotI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQotI2RlZmluZSBiZl9pc3NocHJlYW1ibGUoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9TSE9SVF9QUkVBTUJMRSkKLSNkZWZpbmUgYmZfaXNiYXIoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQkFSKQotI2RlZmluZSBiZl9pc3BzcG9sbChiZikgCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9QU1BPTEwpCi0jZGVmaW5lIGJmX2lzYWdncmJ1cnN0KGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQUdHUl9CVVJTVCkKLQotLyoKLSAqIEFic3RyYWN0aW9uIG9mIGEgY29udGlndW91cyBidWZmZXIgdG8gdHJhbnNtaXQvcmVjZWl2ZS4gIFRoZXJlIGlzIG9ubHkKLSAqIGEgc2luZ2xlIGh3IGRlc2NyaXB0b3IgZW5jYXBzdWxhdGVkIGhlcmUuCi0gKi8KLXN0cnVjdCBhdGhfYnVmIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGFzdDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKLQkJCQkJICAgYW4gYWdncmVnYXRlKSAqLwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ZnJtOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIGZyYW1lICovCi0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KLQlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCi0JZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KLQl1MzIgYmZfc3RhdHVzOwotCXUxNiBiZl9mbGFnczsJCQkvKiB0eCBkZXNjcmlwdG9yIGZsYWdzICovCi0Jc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CS8qIGJ1ZmZlciBzdGF0ZSAqLwotCWRtYV9hZGRyX3QgYmZfZG1hY29udGV4dDsKLX07Ci0KLSNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQotCi0vKiBodyBwcm9jZXNzaW5nIGNvbXBsZXRlLCBkZXNjIHByb2Nlc3NlZCBieSBoYWwgKi8KLSNkZWZpbmUgQVRIX0JVRlNUQVRVU19ET05FICAgICAgMHgwMDAwMDAwMQotLyogaHcgcHJvY2Vzc2luZyBjb21wbGV0ZSwgZGVzYyBob2xkIGZvciBodyAqLwotI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCi0vKiBSeC1vbmx5OiBPUyBpcyBkb25lIHdpdGggdGhpcyBwYWNrZXQgYW5kIGl0J3Mgb2sgdG8gcXVldWVkIGl0IHRvIGh3ICovCi0jZGVmaW5lIEFUSF9CVUZTVEFUVVNfRlJFRSAgICAgIDB4MDAwMDAwMDQKLQotLyogRE1BIHN0YXRlIGZvciB0eC9yeCBkZXNjcmlwdG9ycyAqLwotCi1zdHJ1Y3QgYXRoX2Rlc2NkbWEgewotCWNvbnN0IGNoYXIgKmRkX25hbWU7Ci0Jc3RydWN0IGF0aF9kZXNjICpkZF9kZXNjOwkvKiBkZXNjcmlwdG9ycyAgKi8KLQlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHIgb2YgZGRfZGVzYyAgKi8KLQl1MzIgZGRfZGVzY19sZW47CQkvKiBzaXplIG9mIGRkX2Rlc2MgICovCi0Jc3RydWN0IGF0aF9idWYgKmRkX2J1ZnB0cjsJLyogYXNzb2NpYXRlZCBidWZmZXJzICovCi0JZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwotfTsKLQotaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAotCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKLXZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKLQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLQotLyoqKioqKioqKioqLwotLyogUlggLyBUWCAqLwotLyoqKioqKioqKioqLwotCi0jZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKLSNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCi0jZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgotI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMwotI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAotI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0Ci0jZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0Ci0jZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQotI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCi0KLSNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCi0JKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAotCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKLQkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCi0JIFdNRV9BQ19WTykKLQotI2RlZmluZSBXTUVfQUNfQkUgICAwCi0jZGVmaW5lIFdNRV9BQ19CSyAgIDEKLSNkZWZpbmUgV01FX0FDX1ZJICAgMgotI2RlZmluZSBXTUVfQUNfVk8gICAzCi0jZGVmaW5lIFdNRV9OVU1fQUMgIDQKLQotI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAotI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0Ci0jZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCi0jZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCi0vKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCi0jZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKLSNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKLSNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAotI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2Ci0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAotI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKLQotLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKLSAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLwotI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAotCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKLQotLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCi0jZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCi0KLS8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAotCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCi0JICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCi0KLSNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCi0JKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQotCi0jZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQotI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCi0jZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKLSNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKLQotZW51bSBBVEhfQUdHUl9TVEFUVVMgewotCUFUSF9BR0dSX0RPTkUsCi0JQVRIX0FHR1JfQkFXX0NMT1NFRCwKLQlBVEhfQUdHUl9MSU1JVEVELAotCUFUSF9BR0dSX1NIT1JUUEtULAotCUFUSF9BR0dSXzhLX0xJTUlURUQsCi19OwotCi1zdHJ1Y3QgYXRoX3R4cSB7Ci0JdTMyIGF4cV9xbnVtOwkJCS8qIGhhcmR3YXJlIHEgbnVtYmVyICovCi0JdTMyICpheHFfbGluazsJCQkvKiBsaW5rIHB0ciBpbiBsYXN0IFRYIGRlc2MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwkJLyogdHJhbnNtaXQgcXVldWUgKi8KLQlzcGlubG9ja190IGF4cV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgYXhxX2xvY2tmbGFnczsJLyogaW50ciBzdGF0ZSB3aGVuIG11c3QgY2xpICovCi0JdTMyIGF4cV9kZXB0aDsJCQkvKiBxdWV1ZSBkZXB0aCAqLwotCXU4IGF4cV9hZ2dyX2RlcHRoOwkJLyogYWdncmVnYXRlcyBxdWV1ZWQgKi8KLQl1MzIgYXhxX3RvdGFscXVldWVkOwkJLyogdG90YWwgZXZlciBxdWV1ZWQgKi8KLQlib29sIHN0b3BwZWQ7CQkJLyogSXMgbWFjODAyMTEgcXVldWUgc3RvcHBlZCA/ICovCi0Jc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwkvKiB2aXJ0dWFsIGFkZHIgb2YgbGFzdCBidWZmZXIqLwotCi0JLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKLQotCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCi0JICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Ci19OwotCi0jZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQotI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKLSNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCi0KLS8qIHBlciBUSUQgYWdncmVnYXRlIHR4IHN0YXRlIGZvciBhIGRlc3RpbmF0aW9uICovCi1zdHJ1Y3QgYXRoX2F0eF90aWQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHJvdW5kLXJvYmluIHRpZCBlbnRyeSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CQkvKiBwZW5kaW5nIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqdHhfYnVmW0FUSF9USURfTUFYX0JVRlNdOyAvKiBhY3RpdmUgdHggZnJhbWVzICovCi0JdTE2IHNlcV9zdGFydDsKLQl1MTYgc2VxX25leHQ7Ci0JdTE2IGJhd19zaXplOwotCWludCB0aWRubzsKLQlpbnQgYmF3X2hlYWQ7CQkJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCi0JaW50IGJhd190YWlsOwkJCS8qIG5leHQgdW51c2VkIHR4IGJ1ZmZlciBzbG90ICovCi0JaW50IHNjaGVkOwotCWludCBwYXVzZWQ7Ci0JdTggc3RhdGU7Ci0JaW50IGFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHM7Ci19OwotCi0vKiBwZXIgYWNjZXNzLWNhdGVnb3J5IGFnZ3JlZ2F0ZSB0eCBzdGF0ZSBmb3IgYSBkZXN0aW5hdGlvbiAqLwotc3RydWN0IGF0aF9hdHhfYWMgewotCWludCBzY2hlZDsJCQkvKiBkZXN0LWFjIGlzIHNjaGVkdWxlZCAqLwotCWludCBxbnVtOwkJCS8qIEgvVyBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZAotCQkJCQkgICB3aXRoIHRoaXMgQUMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiByb3VuZC1yb2JpbiB0eHEgZW50cnkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRpZF9xOwkJLyogcXVldWUgb2YgVElEcyB3aXRoIGJ1ZmZlcnMgKi8KLX07Ci0KLS8qIHBlci1mcmFtZSB0eCBjb250cm9sIGJsb2NrICovCi1zdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgewotCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JaW50IGlmX2lkOwotfTsKLQotLyogcGVyIGZyYW1lIHR4IHN0YXR1cyBibG9jayAqLwotc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7Ci0JaW50IHJldHJpZXM7CS8qIG51bWJlciBvZiByZXRyaWVzIHRvIHN1Y2Nlc3N1ZnVsbHkKLQkJCSAgIHRyYW5zbWl0IHRoaXMgZnJhbWUgKi8KLQlpbnQgZmxhZ3M7CS8qIHN0YXR1cyBvZiB0cmFuc21pdCAqLwotI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCi0jZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAotfTsKLQotLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLwotc3RydWN0IGF0aF90eF9zdGF0IHsKLQlpbnQgcnNzaTsKLQlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOwotCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOwotCWludCByYXRlaWVlZTsKLQlpbnQgcmF0ZUticHM7Ci0JaW50IHJhdGVjb2RlOwotCWludCBmbGFnczsKLQl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KLX07Ci0KLXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gewotCWludCBwYXJhbV9tYXhfZnJhbWVzOwotCWludCBwYXJhbV9tYXhfbGVuOwotCWludCBwYXJhbV9ybDsKLQlpbnQgcGFyYW1fYWw7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKLX07Ci0KLXN0cnVjdCBhdGhfbm9kZSB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07Ci0Jc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107Ci0JdTE2IG1heGFtcGR1OwotCXU4IG1wZHVkZW5zaXR5OwotfTsKLQotc3RydWN0IGF0aF90eCB7Ci0JdTE2IHNlcV9ubzsKLQl1MzIgdHhxc2V0dXA7Ci0JaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOwotCXNwaW5sb2NrX3QgdHhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7Ci0Jc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOwotCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKLX07Ci0KLXN0cnVjdCBhdGhfcnggewotCXU4IGRlZmFudDsKLQl1OCByeG90aGVyYW50OwotCXUzMiAqcnhsaW5rOwotCWludCBidWZzaXplOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKLQlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOwotCXNwaW5sb2NrX3QgcnhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7Ci0Jc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOwotfTsKLQotaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXUzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKLXZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOwotc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwotdm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwotdm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Ci12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKLXZvaWQgYXRoX3R4X25vZGVfZnJlZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Ci12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpOwotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpOwotc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKLQkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci11MzIgYXRoX3R4cV9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdTMyIGF0aF90eHFfYWdncl9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCk7Ci1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLAlzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLQotLyoqKioqKioqLwotLyogVkFQcyAqLwotLyoqKioqKioqLwotCi0vKgotICogRGVmaW5lIHRoZSBzY2hlbWUgdGhhdCB3ZSBzZWxlY3QgTUFDIGFkZHJlc3MgZm9yIG11bHRpcGxlCi0gKiBCU1Mgb24gdGhlIHNhbWUgcmFkaW8uIFRoZSB2ZXJ5IGZpcnN0IFZBUCB3aWxsIGp1c3QgdXNlIHRoZSBNQUMKLSAqIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NLiBGb3IgdGhlIG5leHQgMyBWQVBzLCB3ZSBzZXQgdGhlCi0gKiBVL0wgYml0IChiaXQgMSkgaW4gTUFDIGFkZHJlc3MsIGFuZCB1c2UgdGhlIG5leHQgdHdvIGJpdHMgYXMgdGhlCi0gKiBpbmRleCBvZiB0aGUgVkFQLgotICovCi0KLSNkZWZpbmUgQVRIX1NFVF9WQVBfQlNTSURfTUFTSyhic3NpZF9tYXNrKSBcCi0JKChic3NpZF9tYXNrKVswXSAmPSB+KCgoQVRIX0JDQlVGLTEpPDwyKXwweDAyKSkKLQotc3RydWN0IGF0aF92YXAgewotCWludCBhdl9ic2xvdDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0Jc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQmVhY29uIEhhbmRsaW5nICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKLSAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgotICovCi0jZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKLSNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTEKLSNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLwotI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKLSNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKLQotc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGR0aW1fcGVyaW9kOwotCXUxNiBibWlzc190aW1lb3V0OwotCXU4IGR0aW1fY291bnQ7Ci0JdTggdGltX29mZnNldDsKLQl1bmlvbiB7Ci0JCXU2NCBsYXN0X3RzZjsKLQkJdTggbGFzdF90c3RhbXBbOF07Ci0JfSB1OyAvKiBsYXN0IHJlY2VpdmVkIGJlYWNvbi9wcm9iZSByZXNwb25zZSB0aW1lc3RhbXAgb2YgdGhpcyBCU1MuICovCi19OwotCi1zdHJ1Y3QgYXRoX2JlYWNvbiB7Ci0JZW51bSB7Ci0JCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLwotCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLwotCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCi0JfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KLQotCXUzMiBiZWFjb25xOwotCXUzMiBibWlzc2NudDsKLQl1MzIgYXN0X2JlX3htaXQ7Ci0JdTY0IGJjX3RzdGFtcDsKLQlpbnQgYnNsb3RbQVRIX0JDQlVGXTsKLQlpbnQgc2xvdHRpbWU7Ci0JaW50IHNsb3R1cGRhdGU7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gYmVhY29uX3FpOwotCXN0cnVjdCBhdGhfZGVzY2RtYSBiZG1hOwotCXN0cnVjdCBhdGhfdHhxICpjYWJxOwotCXN0cnVjdCBsaXN0X2hlYWQgYmJ1ZjsKLX07Ci0KLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7Ci1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpOwotdm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92YXAgKmF2cCk7Ci12b2lkIGF0aF9iZWFjb25fc3luYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKTsKLQotLyoqKioqKiovCi0vKiBBTkkgKi8KLS8qKioqKioqLwotCi0vKiBBTkkgdmFsdWVzIGZvciBTVEEgb25seS4KLSAgIEZJWE1FOiBBZGQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBBUCBsYXRlciAqLwotCi0jZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgIDEwMCAgICAgLyogMTAwIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIEFOSSBwb2xsICovCi0jZGVmaW5lIEFUSF9TSE9SVF9DQUxJTlRFUlZBTCAgIDEwMDAgICAgLyogMSBzZWNvbmQgYmV0d2VlbiBjYWxpYnJhdGlvbnMgKi8KLSNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzIGJldHdlZW4gY2FsaWJyYXRpb25zICovCi0jZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMIDEyMDAwMDAgLyogMjAgbWludXRlcyBiZXR3ZWVuIGNhbGlicmF0aW9ucyAqLwotCi1zdHJ1Y3QgYXRoX2FuaSB7Ci0JYm9vbCBzY19jYWxkb25lOwotCWludDE2X3Qgc2Nfbm9pc2VfZmxvb3I7Ci0JdW5zaWduZWQgaW50IHNjX2xvbmdjYWxfdGltZXI7Ci0JdW5zaWduZWQgaW50IHNjX3Nob3J0Y2FsX3RpbWVyOwotCXVuc2lnbmVkIGludCBzY19yZXNldGNhbF90aW1lcjsKLQl1bnNpZ25lZCBpbnQgc2NfY2hlY2thbmlfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKiovCi0vKiAgIExFRCBDb250cm9sICAgICovCi0vKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX0xFRF9QSU4JMQotCi1lbnVtIGF0aF9sZWRfdHlwZSB7Ci0JQVRIX0xFRF9SQURJTywKLQlBVEhfTEVEX0FTU09DLAotCUFUSF9MRURfVFgsCi0JQVRIX0xFRF9SWAotfTsKLQotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGhfc29mdGMgKnNjOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Ci0JZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7Ci0JY2hhciBuYW1lWzMyXTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0vKiBSZmtpbGwgKi8KLSNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KLQotc3RydWN0IGF0aF9yZmtpbGwgewotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOwotCWNoYXIgcmZraWxsX25hbWVbMzJdOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqLwotLyogTWFpbiBkcml2ZXIgY29yZSAqLwotLyoqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgotICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUwotKi8KLSNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKLSNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1Ci0jZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCi0jZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KLSNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKLSNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1Ci0jZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfVkFMICAgICAgMHg3ZgotLyoKLSAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKLSAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgotICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCi0gKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KLSAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKLSAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgotICovCi0jZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KLQotI2RlZmluZSBBVEhfSUZfSURfQU5ZICAgCTB4ZmYKLSNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KLSNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKLSNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAotCi1lbnVtIFBST1RfTU9ERSB7Ci0JUFJPVF9NX05PTkUgPSAwLAotCVBST1RfTV9SVFNDVFMsCi0JUFJPVF9NX0NUU09OTFkKLX07Ci0KLSNkZWZpbmUgU0NfT1BfSU5WQUxJRAkJQklUKDApCi0jZGVmaW5lIFNDX09QX0JFQUNPTlMJCUJJVCgxKQotI2RlZmluZSBTQ19PUF9SWEFHR1IJCUJJVCgyKQotI2RlZmluZSBTQ19PUF9UWEFHR1IJCUJJVCgzKQotI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFCUJJVCg0KQotI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUCUJJVCg1KQotI2RlZmluZSBTQ19PUF9OT19SRVNFVAkJQklUKDYpCi0jZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUCUJJVCg3KQotI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRQlCSVQoOCkKLSNkZWZpbmUgU0NfT1BfUlhGTFVTSAkJQklUKDkpCi0jZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVECUJJVCgxMCkKLSNkZWZpbmUgU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQJQklUKDExKQotI2RlZmluZSBTQ19PUF9SRktJTExfU1dfQkxPQ0tFRAlCSVQoMTIpCi0jZGVmaW5lIFNDX09QX1JGS0lMTF9IV19CTE9DS0VECUJJVCgxMykKLQotc3RydWN0IGF0aF9zb2Z0YyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKLQlzdHJ1Y3QgYXRoX2hhbCAqc2NfYWg7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JdTggc2NfY3VyYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNjX215YWRkcltFVEhfQUxFTl07Ci0JdTggc2NfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MzIgc2NfaW50cnN0YXR1czsKLQl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KLQl1MTYgc2NfY3VydHhwb3c7Ci0JdTE2IHNjX2N1cmFpZDsKLQl1MTYgc2NfY2FjaGVsc3o7Ci0JdTggc2NfbmJjbnZhcHM7Ci0JdTE2IHNjX252YXBzOwotCXU4IHNjX3R4X2NoYWlubWFzazsKLQl1OCBzY19yeF9jaGFpbm1hc2s7Ci0JdTMyIHNjX2tleW1heDsKLQlERUNMQVJFX0JJVE1BUChzY19rZXltYXAsIEFUSF9LRVlNQVgpOwotCXU4IHNjX3NwbGl0bWljOwotCXU4IHNjX3Byb3RyaXg7Ci0JZW51bSBhdGg5a19pbnQgc2NfaW1hc2s7Ci0JZW51bSBQUk9UX01PREUgc2NfcHJvdG1vZGU7Ci0JZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBzY19odF9leHRwcm90c3BhY2luZzsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgdHhfY2hhbl93aWR0aDsKLQotCXN0cnVjdCBhdGhfY29uZmlnIHNjX2NvbmZpZzsKLQlzdHJ1Y3QgYXRoX3J4IHJ4OwotCXN0cnVjdCBhdGhfdHggdHg7Ci0Jc3RydWN0IGF0aF9iZWFjb24gYmVhY29uOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICpzY192YXBzW0FUSF9CQ0JVRl07Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBVEhfQ0hBTl9NQVhdOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgdHhfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKLQlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOwotCXN0cnVjdCBhdGhfYW5pIHNjX2FuaTsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBzY19oYWxzdGF0czsKLSNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKLQlzdHJ1Y3QgYXRoOWtfZGVidWcgc2NfZGVidWc7Ci0jZW5kaWYKLX07Ci0KLWludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1pbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwotCi0jZW5kaWYgLyogQ09SRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYwppbmRleCBhODBlZDU3Li5mZGY5NTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCwxOSArMTQsMjEgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfZGVidWcgPSBEQkdfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOwogCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRoOWtfZGVidWdmc19yb290OworCiB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJaWYgKCFzYykKIAkJcmV0dXJuOwogCi0JaWYgKHNjLT5zY19kZWJ1Zy5kZWJ1Z19tYXNrICYgZGJnX21hc2spIHsKKwlpZiAoc2MtPmRlYnVnLmRlYnVnX21hc2sgJiBkYmdfbWFzaykgewogCQl2YV9saXN0IGFyZ3M7CiAKIAkJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTQ2LDcgKzQ4LDcgQEAKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWNoYXIgYnVmWzEwMjRdOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXUzMiB2YWxbQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTXTsKQEAgLTEzMiw0MSArMTM0LDQxIEBACiB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKQogewogCWlmIChzdGF0dXMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfUlgpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvaysrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2srKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYRU9MKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYT1JOKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4b3JuKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4rKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2srKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eG9rKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9UWFVSTikKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eHVybisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9NSUIpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWFBIWSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeHBoeWVycisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWEtDTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfU1dCQSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5zd2JhKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk1JU1MpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ibWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk5SKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ1NUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfR1RUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVElNKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ0FCRU5EKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTVNZTkMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0xNzcsNDEgKzE3OSw0MSBAQAogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CisJCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWEVPTCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wpOworCQkiJThzOiAlMTB1XG4iLCAiUlhFT0wiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYT1JOIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeG9ybik7CisJCSIlOHM6ICUxMHVcbiIsICJSWE9STiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4pOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOworCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFhVUk4iLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKTsKKwkJIiU4czogJTEwdVxuIiwgIlRYVVJOIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eHVybik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CisJCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWFBIWSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhwaHllcnIpOworCQkiJThzOiAlMTB1XG4iLCAiUlhQSFkiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKKwkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlNXQkEiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnN3YmEpOworCQkiJThzOiAlMTB1XG4iLCAiU1dCQSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJCTUlTUyIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MpOworCQkiJThzOiAlMTB1XG4iLCAiQk1JU1MiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJtaXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKKwkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKKwkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKKwkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKKwkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKKwkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkRUSU1TWU5DIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYyk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNU1lOQyIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMpOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiRFRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRPVEFMIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCk7CisJCSIlOHM6ICUxMHVcbiIsICJUT1RBTCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwpOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQpAQCAtMjIyLDI5ICsyMjQsMzA4IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUKIH07CiAKK3N0YXRpYyB2b2lkIGF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPnN0YXR1cy5yYXRlczsKKwlpbnQgZmluYWxfdHNfaWR4LCBpZHg7CisKKwl0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWZpbmFsX3RzX2lkeCA9IHR4X2luZm9fcHJpdi0+dHgudHNfcmF0ZWluZGV4OworCWlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tmaW5hbF90c19pZHhdLmlkeF0uZG90MTFyYXRlOworCisJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpZHhdLnN1Y2Nlc3MrKzsKK30KKworc3RhdGljIHZvaWQgYXRoX2RlYnVnX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+c3RhdHVzLnJhdGVzOworCWludCBmaW5hbF90c19pZHgsIGlkeDsKKworCXR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJZmluYWxfdHNfaWR4ID0gdHhfaW5mb19wcml2LT50eC50c19yYXRlaW5kZXg7CisJaWR4ID0gcmF0ZXNbZmluYWxfdHNfaWR4XS5pZHg7CisKKwlzYy0+ZGVidWcuc3RhdHMubGVnYWN5X3Jjc3RhdHNbaWR4XS5zdWNjZXNzKys7Cit9CisKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzYywgc2tiKTsKKwllbHNlCisJCWF0aF9kZWJ1Z19zdGF0X2xlZ2FjeV9yYyhzYywgc2tiKTsKK30KKworLyogRklYTUU6IGxlZ2FjeSByYXRlcywgbGF0ZXIgb24gLi4gKi8KK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCSAgICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpIHsKKwkJaW50IGlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyaXhdLmRvdDExcmF0ZTsKKworCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ueHJldHJpZXMgKz0geHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5yZXRyaWVzICs9IHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5wZXIgPSBwZXI7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfMTFuX3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTAyNF07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGkgPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmLCAiJTdzICUxM3MgJThzICU4cyAlNnNcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIsCisJCSAgICAgICAiUmV0cmllcyIsICJYUmV0cmllcyIsICJQRVIiKTsKKworCWZvciAoaSA9IDA7IGkgPD0gMTU7IGkrKykgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkiJTVzJTNkOiAlOHUgJTh1ICU4dSAlOHVcbiIsICJNQ1MiLCBpLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0uc3VjY2VzcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnJldHJpZXMsCisJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS54cmV0cmllcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnBlcik7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlN3MgJTEzc1xuXG4iLCAiUmF0ZSIsICJTdWNjZXNzIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTV1OiAlMTJ1XG4iLAorCQkJCXNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRla2JwcyAvIDEwMDAsCisJCQkJc2MtPmRlYnVnLnN0YXRzLmxlZ2FjeV9yY3N0YXRzW2ldLnN1Y2Nlc3MpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3Jjc3RhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHNjLT5jdXJfcmF0ZV90YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlyZXR1cm4gYXRoX3JlYWRfZmlsZV9zdGF0XzExbl9yYyhmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWVsc2UKKwkJcmV0dXJuIGF0aF9yZWFkX2ZpbGVfc3RhdF9sZWdhY3lfcmMoZmlsZSwgdXNlcl9idWYsIGNvdW50ICxwcG9zKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yY3N0YXQgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfcmNzdGF0LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGF0aF93aXBoeV9zdGF0ZV9zdHIoZW51bSBhdGhfd2lwaHlfc3RhdGUgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQVRIX1dJUEhZX0lOQUNUSVZFOgorCQlyZXR1cm4gIklOQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9BQ1RJVkU6CisJCXJldHVybiAiQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9QQVVTSU5HOgorCQlyZXR1cm4gIlBBVVNJTkciOworCWNhc2UgQVRIX1dJUEhZX1BBVVNFRDoKKwkJcmV0dXJuICJQQVVTRUQiOworCWNhc2UgQVRIX1dJUEhZX1NDQU46CisJCXJldHVybiAiU0NBTiI7CisJfQorCXJldHVybiAiPyI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV93aXBoeShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGk7CisJdTggYWRkcltFVEhfQUxFTl07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJwcmltYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQl3aXBoeV9uYW1lKHNjLT5wcmlfd2lwaHktPmh3LT53aXBoeSksCisJCQlhdGhfd2lwaHlfc3RhdGVfc3RyKHNjLT5wcmlfd2lwaHktPnN0YXRlKSwKKwkJCXNjLT5wcmlfd2lwaHktPmNoYW5faWR4LCBzYy0+cHJpX3dpcGh5LT5jaGFuX2lzX2h0KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkic2Vjb25kYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQkJd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpLAorCQkJCWF0aF93aXBoeV9zdGF0ZV9zdHIoYXBoeS0+c3RhdGUpLAorCQkJCWFwaHktPmNoYW5faWR4LCBhcGh5LT5jaGFuX2lzX2h0KTsKKwl9CisKKwlwdXRfdW5hbGlnbmVkX2xlMzIoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9TVEFfSUQwKSwgYWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KFJFR19SRUFEKHNjLT5zY19haCwgQVJfU1RBX0lEMSkgJiAweGZmZmYsIGFkZHIgKyA0KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJhZGRyOiAlcE1cbiIsIGFkZHIpOworCXB1dF91bmFsaWduZWRfbGUzMihSRUdfUkVBRChzYy0+c2NfYWgsIEFSX0JTU01TS0wpLCBhZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9CU1NNU0tVKSAmIDB4ZmZmZiwgYWRkciArIDQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJImFkZHJtYXNrOiAlcE1cbiIsIGFkZHIpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3RydWN0IGF0aF93aXBoeSAqIGdldF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlpZiAoc3RyY21wKG5hbWUsIHdpcGh5X25hbWUoc2MtPnByaV93aXBoeS0+aHctPndpcGh5KSkgPT0gMCkKKwkJcmV0dXJuIHNjLT5wcmlfd2lwaHk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ICYmIHN0cmNtcChuYW1lLCB3aXBoeV9uYW1lKGFwaHktPmh3LT53aXBoeSkpID09IDApCisJCQlyZXR1cm4gYXBoeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVsX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X2RlbChhcGh5KTsKK30KKworc3RhdGljIGludCBwYXVzZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9wYXVzZShhcGh5KTsKK30KKworc3RhdGljIGludCB1bnBhdXNlX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KTsKK30KKworc3RhdGljIGludCBzY2hlZHVsZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbXNlYykKK3sKKwlhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHNjLCBzaW1wbGVfc3RydG91bChtc2VjLCBOVUxMLCAwKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfd2lwaHkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZbbGVuIC0gMV0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAiYWRkIiwgMykgPT0gMCkgeworCQlpbnQgcmVzID0gYXRoOWtfd2lwaHlfYWRkKHNjKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJkZWw9IiwgNCkgPT0gMCkgeworCQlpbnQgcmVzID0gZGVsX3dpcGh5KHNjLCBidWYgKyA0KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJwYXVzZT0iLCA2KSA9PSAwKSB7CisJCWludCByZXMgPSBwYXVzZV93aXBoeShzYywgYnVmICsgNik7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAidW5wYXVzZT0iLCA4KSA9PSAwKSB7CisJCWludCByZXMgPSB1bnBhdXNlX3dpcGh5KHNjLCBidWYgKyA4KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzZWxlY3Q9IiwgNykgPT0gMCkgeworCQlpbnQgcmVzID0gc2VsZWN0X3dpcGh5KHNjLCBidWYgKyA3KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzY2hlZHVsZT0iLCA5KSA9PSAwKSB7CisJCWludCByZXMgPSBzY2hlZHVsZV93aXBoeShzYywgYnVmICsgOSk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3dpcGh5ID0geworCS5yZWFkID0gcmVhZF9maWxlX3dpcGh5LAorCS53cml0ZSA9IHdyaXRlX2ZpbGVfd2lwaHksCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKKwogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc2MtPnNjX2RlYnVnLmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKKwlzYy0+ZGVidWcuZGVidWdfbWFzayA9IGF0aDlrX2RlYnVnOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0JaWYgKCFzYy0+c2NfZGVidWcuZGVidWdmc19yb290KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2Rpcih3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpLAorCQkJCQkJICAgICAgYXRoOWtfZGVidWdmc19yb290KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKIAkJZ290byBlcnI7CiAKLQlzYy0+c2NfZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKLQkJCQkJCSAgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QpOwotCWlmICghc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RtYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVR08sCisJCQkJICAgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX2RtYSk7CisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19kbWEpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfZG1hID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVHTywKLQkJCQkgICAgICAgc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZG1hKTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2RtYSkKLQkJZ290byBlcnI7Ci0KLQlzYy0+c2NfZGVidWcuZGVidWdmc19pbnRlcnJ1cHQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLAorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsCiAJCQkJCQkgICAgIFNfSVJVR08sCi0JCQkJCQkgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkJCSAgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJCQkJICAgICBzYywgJmZvcHNfaW50ZXJydXB0KTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwkJZ290byBlcnI7CisKKwlzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3N0YXQiLAorCQkJCQkJICBTX0lSVUdPLAorCQkJCQkJICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgIHNjLCAmZm9wc19yY3N0YXQpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0KQorCQlnb3RvIGVycjsKKworCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgKKwkJIndpcGh5IiwgU19JUlVHTyB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCSZmb3BzX3dpcGh5KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwpAQCAtMjU1LDggKzUzNiwyNCBAQAogCiB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+c2NfZGVidWcuZGVidWdmc19kbWEpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kbWEpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Cit9CisKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKQoreworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7CisJaWYgKCFhdGg5a19kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShhdGg5a19kZWJ1Z2ZzX3Jvb3QpOworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBlNTQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgREVCVUdfSAorI2RlZmluZSBERUJVR19ICisKK2VudW0gQVRIX0RFQlVHIHsKKwlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCisJQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKKwlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCisJQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKKwlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCisJQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCisJQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAorCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCisJQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKKwlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAorCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAorCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCisJQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKKwlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKKwlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCisJQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgorfTsKKworI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKKworI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRworCisvKioKKyAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCisgKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKKyAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycworICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQorICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KKyAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCisgKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KKyAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKKyAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCisgKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCisgKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0CisgKiBAYm1pc3M6IEJlYWNvbiBNaXNzCisgKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5CisgKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKKyAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0CisgKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKKyAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYworICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQorICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KKyAqLworc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgeworCXUzMiB0b3RhbDsKKwl1MzIgcnhvazsKKwl1MzIgcnhlb2w7CisJdTMyIHJ4b3JuOworCXUzMiB0eG9rOworCXUzMiB0eGVvbDsKKwl1MzIgdHh1cm47CisJdTMyIG1pYjsKKwl1MzIgcnhwaHllcnI7CisJdTMyIHJ4X2tleWNhY2hlX21pc3M7CisJdTMyIHN3YmE7CisJdTMyIGJtaXNzOworCXUzMiBibnI7CisJdTMyIGNzdDsKKwl1MzIgZ3R0OworCXUzMiB0aW07CisJdTMyIGNhYmVuZDsKKwl1MzIgZHRpbXN5bmM7CisJdTMyIGR0aW07Cit9OworCitzdHJ1Y3QgYXRoX2xlZ2FjeV9yY19zdGF0cyB7CisJdTMyIHN1Y2Nlc3M7Cit9OworCitzdHJ1Y3QgYXRoXzExbl9yY19zdGF0cyB7CisJdTMyIHN1Y2Nlc3M7CisJdTMyIHJldHJpZXM7CisJdTMyIHhyZXRyaWVzOworCXU4IHBlcjsKK307CisKK3N0cnVjdCBhdGhfc3RhdHMgeworCXN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIGlzdGF0czsKKwlzdHJ1Y3QgYXRoX2xlZ2FjeV9yY19zdGF0cyBsZWdhY3lfcmNzdGF0c1sxMl07CS8qIG1heCgxMWEsMTFiLDExZykgKi8KKwlzdHJ1Y3QgYXRoXzExbl9yY19zdGF0cyBuX3Jjc3RhdHNbMTZdOwkJLyogMC4uMTUgTUNTIHJhdGVzICovCit9OworCitzdHJ1Y3QgYXRoOWtfZGVidWcgeworCWludCBkZWJ1Z19tYXNrOworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZG1hOworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfaW50ZXJydXB0OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmNzdGF0OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfd2lwaHk7CisJc3RydWN0IGF0aF9zdGF0cyBzdGF0czsKK307CisKK3ZvaWQgRFBSSU5URihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGRiZ19tYXNrLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpOwordm9pZCBhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfaW50ZXJydXB0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIGF0aDlrX2ludCBzdGF0dXMpOwordm9pZCBhdGhfZGVidWdfc3RhdF9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCisJCQkgICAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcywgdTggcGVyKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKKwkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRoOWtfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJCSAgICBlbnVtIGF0aDlrX2ludCBzdGF0dXMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAorCQkJCQkgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLworCisjZW5kaWYgLyogREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uYwppbmRleCBhY2Q2YzUzLi5mZmMzNmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDEyICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICAgdTMyIHJlZywgdTMyIG1hc2ssCiAJCQkJICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKQogewpAQCAtMzAsNyArMjcsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCByZWcsIHJlZ1ZhbCk7CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcpCisJaWYgKGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKQogCQl1ZGVsYXkoMTAwKTsKIAogCXJldHVybjsKQEAgLTkxLDYxICs4OCwyNjEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQorc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKIHsKLQkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYWgtPmFoX3NjOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwKSkgewotCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHNjLT5idXNfb3BzLT5lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkJCSAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkJCSAgIHU4ICpwUmV0VnBkTGlzdCkKK3sKKwl1MTYgaSwgazsKKwl1OCBjdXJyUHdyID0gcHdyTWluOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IChwd3JNYXggLSBwd3JNaW4pIC8gMjsgaSsrKSB7CisJCWF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleChjdXJyUHdyLCBwUHdyTGlzdCwKKwkJCQkJICAgICAgIG51bUludGVyY2VwdHMsICYoaWR4TCksCisJCQkJCSAgICAgICAmKGlkeFIpKTsKKwkJaWYgKGlkeFIgPCAxKQorCQkJaWR4UiA9IDE7CisJCWlmIChpZHhMID09IG51bUludGVyY2VwdHMgLSAxKQorCQkJaWR4TCA9ICh1MTYpIChudW1JbnRlcmNlcHRzIC0gMik7CisJCWlmIChwUHdyTGlzdFtpZHhMXSA9PSBwUHdyTGlzdFtpZHhSXSkKKwkJCWsgPSBwVnBkTGlzdFtpZHhMXTsKKwkJZWxzZQorCQkJayA9ICh1MTYpKCgoY3VyclB3ciAtIHBQd3JMaXN0W2lkeExdKSAqIHBWcGRMaXN0W2lkeFJdICsKKwkJCQkgICAocFB3ckxpc3RbaWR4Ul0gLSBjdXJyUHdyKSAqIHBWcGRMaXN0W2lkeExdKSAvCisJCQkJICAocFB3ckxpc3RbaWR4Ul0gLSBwUHdyTGlzdFtpZHhMXSkpOworCQlwUmV0VnBkTGlzdFtpXSA9ICh1OCkgazsKKwkJY3VyclB3ciArPSAyOwogCX0KIAotCSpkYXRhID0gTVMoUkVHX1JFQUQoYWgsIEFSX0VFUFJPTV9TVEFUVVNfREFUQSksCi0JCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwpOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZmxhc2hfbWFwKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCisJCQkJICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcE5ld1Bvd2VyLAorCQkJCSAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKIAotCWFocC0+YWhfY2FsX21lbSA9IGlvcmVtYXAoQVI1NDE2X0VFUFJPTV9TVEFSVF9BRERSLCBBUjU0MTZfRUVQUk9NX01BWCk7CisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCWZyZXEgPSAoaXNFeHRUYXJnZXQpID8gY2VudGVycy5leHRfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOwogCi0JaWYgKCFhaHAtPmFoX2NhbF9tZW0pIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImNhbm5vdCByZW1hcCBlZXByb20gcmVnaW9uIFxuIik7Ci0JCXJldHVybiAtRUlPOworCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLAorCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCW1hdGNoSW5kZXggPSAwOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCisJCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKKwkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKKwkJCQltYXRjaEluZGV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCisJCQkJICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCWxvd0luZGV4ID0gaSAtIDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwogCX0KIAotCXJldHVybiAwOworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9CisJCQkJKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsIGNsbywgY2hpLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7CisJCX0KKwl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2ZsYXNoX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAorCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJdTggcGNkYWMsIGkgPSAwOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCWJvb2wgbWF0Y2g7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCi0JKmRhdGEgPSBpb3JlYWQxNihhaHAtPmFoX2NhbF9tZW0gKyBvZmYpOworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAotCXJldHVybiB0cnVlOworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCisJCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOworCWlmIChtYXRjaCkgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCX0KKworCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKKwkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQorCQlpKys7CisKKwkqcGNkYWNJZHggPSBpOworCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfZ2V0X3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQl1MzIgaW5pdFR4R2FpbiwKKwkJCQlpbnQgdHhQb3dlciwKKwkJCQl1OCAqcFBEQURDVmFsdWVzKQogewotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlyZXR1cm4gYXRoOWtfaHdfZmxhc2hfcmVhZChhaCwgb2ZmLCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiBhdGg5a19od19lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0OworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7CisKKwlvZmZzZXQgPSB0eFBvd2VyOworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQorCQlpZiAoaSA8IG9mZnNldCkKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKKwkJZWxzZQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF80a19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorCisKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKKwkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAorCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQoreworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKwlmcmVxID0gaXNIdDQwVGFyZ2V0ID8gY2VudGVycy5zeW50aF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwgSVNfQ0hBTl8yR0haKGNoYW4pKSkgeworCQltYXRjaEluZGV4ID0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgorCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7CisJCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCQkJbWF0Y2hJbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgorCQkJCSAgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCQlsb3dJbmRleCA9IGkgLSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOworCX0KKworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9ICh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLAorCQkJCQkJY2xvLCBjaGksCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKKwkJfQorCX0KK30KKworc3RhdGljIHUxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsCisJCQkJICAgICAgIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAorCQkJCSAgICAgICBib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQoreworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCisJCSAgICAgKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgeworCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwgaXMyR0h6KSkgeworCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBwUmRFZGdlc1Bvd2VyW2ldLnRQb3dlcjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChpID4gMCkgJiYKKwkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBpczJHSHopKSkgeworCQkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJICAgICAgIGlzMkdIeikgPCBmcmVxICYmCisJCQkgICAgcFJkRWRnZXNQb3dlcltpIC0gMV0uZmxhZykgeworCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQkJcFJkRWRnZXNQb3dlcltpIC0gMV0udFBvd2VyOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHdpY2VNYXhFZGdlUG93ZXI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIDRLIHNpemVkIGNhcmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfNGtfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAjZGVmaW5lIFNJWkVfRUVQUk9NXzRLIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXUxNiAqZWVwX2RhdGE7CisJdTE2ICplZXBfZGF0YSA9ICh1MTYgKikmYWgtPmVlcHJvbS5tYXA0azsKIAlpbnQgYWRkciwgZWVwX3N0YXJ0X2xvYyA9IDA7CiAKIAllZXBfc3RhcnRfbG9jID0gNjQ7CkBAIC0xNTUsOCArMzUyLDYgQEAKIAkJCSJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOwogCX0KIAotCWVlcF9kYXRhID0gKHUxNiAqKWVlcDsKLQogCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV80SzsgYWRkcisrKSB7CiAJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGVlcF9zdGFydF9sb2MsIGVlcF9kYXRhKSkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLApAQCAtMTY1LDE4MCArMzYwLDE2IEBACiAJCX0KIAkJZWVwX2RhdGErKzsKIAl9CisKIAlyZXR1cm4gdHJ1ZTsKICN1bmRlZiBTSVpFX0VFUFJPTV80SwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19maWxsX2RlZl9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotI2RlZmluZSBTSVpFX0VFUFJPTV9ERUYgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2ICplZXBfZGF0YTsKLQlpbnQgYWRkciwgYXI1NDE2X2VlcF9zdGFydF9sb2MgPSAweDEwMDsKLQotCWVlcF9kYXRhID0gKHUxNiAqKWVlcDsKLQotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV9ERUY7IGFkZHIrKykgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBhcjU0MTZfZWVwX3N0YXJ0X2xvYywKLQkJCQkJIGVlcF9kYXRhKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCSJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uXG4iKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQllZXBfZGF0YSsrOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLSN1bmRlZiBTSVpFX0VFUFJPTV9ERUYKLX0KLQotc3RhdGljIGJvb2wgKCphdGg5a19maWxsX2VlcHJvbVtdKSAoc3RydWN0IGF0aF9oYWwgKikgPSB7Ci0JYXRoOWtfaHdfZmlsbF9kZWZfZWVwcm9tLAotCWF0aDlrX2h3X2ZpbGxfNGtfZWVwcm9tCi19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXRoOWtfaHdfZmlsbF9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZmlsbF9lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfY2hlY2tfZGVmX2VlcHJvbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9Ci0JCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFocC0+YWhfZWVwcm9tLmRlZjsKLQl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7Ci0JdTMyIHN1bSA9IDAsIGVsOwotCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7Ci0JaW50IGksIGFkZHIsIHNpemU7Ci0KLQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULAotCQkJCSAmbWFnaWMpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOwotCi0JCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOwotCi0JCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKLQkJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZik7Ci0JCQkJbmVlZF9zd2FwID0gdHJ1ZTsKLQkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFocC0+YWhfZWVwcm9tKTsKLQotCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzaXplIC8gc2l6ZW9mKHUxNik7IGFkZHIrKykgewotCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKLQkJCQkJKmVlcGRhdGEgPSB0ZW1wOwotCQkJCQllZXBkYXRhKys7Ci0KLQkJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkJIjB4JTA0WCAgIiwgKmVlcGRhdGEpOwotCi0JCQkJCWlmICgoKGFkZHIgKyAxKSAlIDYpID09IDApCi0JCQkJCQlEUFJJTlRGKGFoLT5haF9zYywKLQkJCQkJCQlBVEhfREJHX0VFUFJPTSwgIlxuIik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgotCQkJCQkiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQotCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAotCQluZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKLQotCWlmIChuZWVkX3N3YXApCi0JCWVsID0gc3dhYjE2KGFocC0+YWhfZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7Ci0JZWxzZQotCQllbCA9IGFocC0+YWhfZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKLQotCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpKQotCQllbCA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNik7Ci0JZWxzZQotCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7Ci0KLQllZXBkYXRhID0gKHUxNiAqKSgmYWhwLT5haF9lZXByb20pOwotCi0JZm9yIChpID0gMDsgaSA8IGVsOyBpKyspCi0JCXN1bSBePSAqZWVwZGF0YSsrOwotCi0JaWYgKG5lZWRfc3dhcCkgewotCQl1MzIgaW50ZWdlciwgajsKLQkJdTE2IHdvcmQ7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZyBcbiIpOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGggPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50KTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50ID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMgPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXAgPSB3b3JkOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGVlcC0+bW9kYWxIZWFkZXIpOyBqKyspIHsKLQkJCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQotCQkJCSZlZXAtPm1vZGFsSGVhZGVyW2pdOwotCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDb21tb24pOwotCQkJcE1vZGFsLT5hbnRDdHJsQ29tbW9uID0gaW50ZWdlcjsKLQotCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJCQlpbnRlZ2VyID0gc3dhYjMyKHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKLQkJCQlwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7Ci0JCQl9Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKLQkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKLQkJCQlwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAotCSAgICBhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFyNTQxNl9nZXRfZWVwX3ZlcihhaHApKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfY2hlY2tfNGtfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfNGtfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQogewogI2RlZmluZSBFRVBST01fNEtfU0laRSAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9Ci0JCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqKSAmYWhwLT5haF9lZXByb20ubWFwNGs7CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqKSAmYWgtPmVlcHJvbS5tYXA0azsKIAl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7CiAJdTMyIHN1bSA9IDAsIGVsOwogCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7CkBAIC0zNDYsMzggKzM3NywzMCBAQAogCiAKIAlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQogCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULAogCQkJCQkgJm1hZ2ljKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOwogCiAJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CiAJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOwogCiAJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKIAkJCQluZWVkX3N3YXAgPSB0cnVlOwotCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWhwLT5haF9lZXByb20pOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CiAKIAkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgRUVQUk9NXzRLX1NJWkU7IGFkZHIrKykgewogCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKIAkJCQkJKmVlcGRhdGEgPSB0ZW1wOwogCQkJCQllZXBkYXRhKys7Ci0KLQkJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkJIjB4JTA0WCAgIiwgKmVlcGRhdGEpOwotCi0JCQkJCWlmICgoKGFkZHIgKyAxKSAlIDYpID09IDApCi0JCQkJCQlEUFJJTlRGKGFoLT5haF9zYywKLQkJCQkJCQlBVEhfREJHX0VFUFJPTSwgIlxuIik7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgogCQkJCQkiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzg5LDE2ICs0MTIsMTYgQEAKIAkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CiAKIAlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKKwkJZWwgPSBhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoOwogCi0JaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSkKIAkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNik7CiAJZWxzZQogCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7CiAKLQllZXBkYXRhID0gKHUxNiAqKSgmYWhwLT5haF9lZXByb20pOworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQogCQlzdW0gXj0gKmVlcGRhdGErKzsKQEAgLTQwOCw3ICs0MzEsNyBAQAogCQl1MTYgd29yZDsKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nIFxuIik7CisJCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nXG4iKTsKIAogCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKQEAgLTQ0OCwxMSArNDcxLDExIEBACiAJCX0KIAl9CiAKLQlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhcjU0MTZfZ2V0X2VlcDRrX3ZlcihhaHApICE9IEFSNTQxNl9FRVBfVkVSIHx8Ci0JICAgIGFyNTQxNl9nZXRfZWVwNGtfcmV2KGFocCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8CisJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAogCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFyNTQxNl9nZXRfZWVwNGtfdmVyKGFocCkpOworCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NjAsNDggKzQ4Myw1MCBAQAogI3VuZGVmIEVFUFJPTV80S19TSVpFCiB9CiAKLXN0YXRpYyBpbnQgKCphdGg5a19jaGVja19lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20sCi0JYXRoOWtfaHdfY2hlY2tfNGtfZWVwcm9tCi19OwotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19od19jaGVja19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUzMiBhdGg5a19od180a19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKIAotCXJldHVybiBhdGg5a19jaGVja19lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAotCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAotCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCi17Ci0JdTE2IGksIGs7Ci0JdTggY3VyclB3ciA9IHB3ck1pbjsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8PSAocHdyTWF4IC0gcHdyTWluKSAvIDI7IGkrKykgewotCQlhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoY3VyclB3ciwgcFB3ckxpc3QsCi0JCQkJCSAgICAgICBudW1JbnRlcmNlcHRzLCAmKGlkeEwpLAotCQkJCQkgICAgICAgJihpZHhSKSk7Ci0JCWlmIChpZHhSIDwgMSkKLQkJCWlkeFIgPSAxOwotCQlpZiAoaWR4TCA9PSBudW1JbnRlcmNlcHRzIC0gMSkKLQkJCWlkeEwgPSAodTE2KSAobnVtSW50ZXJjZXB0cyAtIDIpOwotCQlpZiAocFB3ckxpc3RbaWR4TF0gPT0gcFB3ckxpc3RbaWR4Ul0pCi0JCQlrID0gcFZwZExpc3RbaWR4TF07Ci0JCWVsc2UKLQkJCWsgPSAodTE2KSgoKGN1cnJQd3IgLSBwUHdyTGlzdFtpZHhMXSkgKiBwVnBkTGlzdFtpZHhSXSArCi0JCQkJICAgKHBQd3JMaXN0W2lkeFJdIC0gY3VyclB3cikgKiBwVnBkTGlzdFtpZHhMXSkgLwotCQkJCSAgKHBQd3JMaXN0W2lkeFJdIC0gcFB3ckxpc3RbaWR4TF0pKTsKLQkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7Ci0JCWN1cnJQd3IgKz0gMjsKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBFRVBfTkZUSFJFU0hfMjoKKwkJcmV0dXJuIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzI6CisJCXJldHVybiBwTW9kYWwtPm9iXzAxOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWwtPmRiMV8wMTsKKwljYXNlIEVFUF9NSU5PUl9SRVY6CisJCXJldHVybiBwQmFzZS0+dmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0s7CisJY2FzZSBFRVBfVFhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CisJY2FzZSBFRVBfUlhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT5yeE1hc2s7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKIAkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKQEAgLTYwNSw3ICs2MzAsNyBAQAogCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CiAJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKIAotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwogCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKIAkJfSBlbHNlIHsKQEAgLTY0NCw3ICs2NjksNyBAQAogCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKIAkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwogCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CisJCWlmICh0Z3RJbmRleCA+PSBtYXhJbmRleCkgewogCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKIAkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewogCQkJCXRtcFZhbCA9IChpbnQxNl90KSBUTVBfVkFMX1ZQRF9UQUJMRTsKQEAgLTY2OSw3ICs2OTQsMTI1MSBAQAogI3VuZGVmIFRNUF9WQUxfVlBEX1RBQkxFCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFzZXQ7CisJdTggKnBDYWxCQ2hhbnMgPSBOVUxMOworCXUxNiBwZEdhaW5PdmVybGFwX3QyOworCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107CisJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKKwl1MTYgbnVtUGllcnMsIGksIGo7CisJaW50MTZfdCB0TWluQ2FsUG93ZXI7CisJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CisJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKKwl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7CisKKwl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyLnBkR2Fpbk92ZXJsYXA7CisJfSBlbHNlIHsKKwkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKKwkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7CisJfQorCisJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOworCisJCQlhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKKwkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAorCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKKwkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCisJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkJCSBpbnQxNl90ICpyYXRlc0FycmF5LAorCQkJCQkJIHUxNiBjZmdDdGwsCisJCQkJCQkgdTE2IEFudGVubmFSZWR1Y3Rpb24sCisJCQkJCQkgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJIHUxNiBwb3dlckxpbWl0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CisJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CisKKwlpbnQgaTsKKwlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CisJc3RydWN0IGNhbF9jdGxfZGF0YV80ayAqcmVwOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0sIHRhcmdldFBvd2VyQ2NrID0geworCQkwLCB7IDAsIDAsIDAsIDB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDB9IH0sIHRhcmdldFBvd2VyQ2NrRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDAgfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLCB0YXJnZXRQb3dlckh0NDAgPSB7CisJCTAsIHswLCAwLCAwLCAwfQorCX07CisJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9CisJCXsgQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULAorCQkgIENUTF8yR0hUNDAKKwkJfTsKKwl1MTYgbnVtQ3RsTW9kZXMsICpwQ3RsTW9kZSwgY3RsTW9kZSwgZnJlcTsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJaW50IHR4X2NoYWlubWFzazsKKwl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CisKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF07CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gKGludDE2X3QpbWluKEFudGVubmFSZWR1Y3Rpb24gLQorCQkJCQkgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKKworCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKKworCWlmIChhaC0+cmVndWxhdG9yeS50cF9zY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKKwkJbWF4UmVnQWxsb3dlZFBvd2VyIC09CisJCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+cmVndWxhdG9yeS50cF9zY2FsZSldICogMik7CisJfQorCisJc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKKwlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKKworCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKKwlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOworCisJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckNjaywgNCwgZmFsc2UpOworCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAorCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOworCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAorCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOworCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCisJCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyQ2NrRXh0LCA0LCB0cnVlKTsKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAorCQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKKwl9CisKKwlmb3IgKGN0bE1vZGUgPSAwOyBjdGxNb2RlIDwgbnVtQ3RsTW9kZXM7IGN0bE1vZGUrKykgeworCQlib29sIGlzSHQ0MEN0bE1vZGUgPSAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzVHSFQ0MCkgfHwKKwkJCShwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfMkdIVDQwKTsKKwkJaWYgKGlzSHQ0MEN0bE1vZGUpCisJCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CisJCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQorCQkJZnJlcSA9IGNlbnRlcnMuZXh0X2NlbnRlcjsKKwkJZWxzZQorCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKKworCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQorCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCisJCQkiRVhUX0FERElUSVZFICVkXG4iLAorCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCisJCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKKworCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYKKwkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCQkiICBMT09QLUN0bGlkeCAlZDogY2ZnQ3RsIDB4JTIuMnggIgorCQkJCSJwQ3RsTW9kZSAweCUyLjJ4IGN0bEluZGV4IDB4JTIuMnggIgorCQkJCSJjaGFuICVkXG4iLAorCQkJCWksIGNmZ0N0bCwgcEN0bE1vZGVbY3RsTW9kZV0sCisJCQkJcEVlcERhdGEtPmN0bEluZGV4W2ldLCBjaGFuLT5jaGFubmVsKTsKKworCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAorCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8CisJCQkgICAgICBTRF9OT19DVEwpKSkgeworCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOworCisJCQkJdHdpY2VNaW5FZGdlUG93ZXIgPQorCQkJCQlhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKKwkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zCisJCQkJCQkodHhfY2hhaW5tYXNrKSAtIDFdLAorCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwKKwkJCQlBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCQkJIiAgICBNQVRDSC1FRV9JRFggJWQ6IGNoICVkIGlzMiAlZCAiCisJCQkJCSIyeE1pbkVkZ2UgJWQgY2hhaW5tYXNrICVkIGNoYWlucyAlZFxuIiwKKwkJCQkJaSwgZnJlcSwgSVNfQ0hBTl8yR0haKGNoYW4pLAorCQkJCQl0d2ljZU1pbkVkZ2VQb3dlciwgdHhfY2hhaW5tYXNrLAorCQkJCQlhcjU0MTZfZ2V0X250eGNoYWlucworCQkJCQkodHhfY2hhaW5tYXNrKSk7CisJCQkJaWYgKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgPT0gU0RfTk9fQ1RMKSB7CisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQkJCW1pbih0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCSAgICB0d2ljZU1pbkVkZ2VQb3dlcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSB0d2ljZU1pbkVkZ2VQb3dlcjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJbWluQ3RsUG93ZXIgPSAodTgpbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKKwkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAorCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAorCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKKworCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCWNhc2UgQ1RMXzExQjoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7CisJCQkJCWkrKykgeworCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKKwkJCQkJaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMkdIVDIwOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7CisJCQkJCWkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExQl9FWFQ6CisJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKKwkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFHX0VYVDoKKwkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKKwkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKKwkJCQkJbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzJHSFQ0MDoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOworCQkJCQlpKyspIHsKKwkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KKwkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KKwkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9CisJCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisJcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOworCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKKwlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107CisJcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCisJCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKKworCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKKwlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMV07CisJcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKKwlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgeworCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQorCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07CisJCX0KKwkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0gdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICB1MTYgY2ZnQ3RsLAorCQkJCSAgIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICB1OCBwb3dlckxpbWl0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmcEVlcERhdGEtPm1vZGFsSGVhZGVyOworCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07CisJaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKKwlpbnQgaTsKKworCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJfQorCisJaWYgKCFhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoYWgsIGNoYW4sCisJCQkJCSAgICAgICAmcmF0ZXNBcnJheVswXSwgY2ZnQ3RsLAorCQkJCQkgICAgICAgdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkgICAgICAgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJCSAgICAgICBwb3dlckxpbWl0KSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgIgorCQkJInR4IHBvd2VyIHBlciByYXRlIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKCFhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKGFoLCBjaGFuLCAmdHhQb3dlckluZGV4T2Zmc2V0KSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkgImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0IHBvd2VyIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0JKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSNTQxNl9NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFyNTQxNlJhdGVTaXplOyBpKyspCisJCQlyYXRlc0FycmF5W2ldIC09IEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNTRtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTQ4bWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUzNm1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJsXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFzXSwgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81bF0sIDApKTsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8zXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8yXSwgMTYpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8xXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzBdLCAwKSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTYsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfN10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF80XSwgMCkpOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNywKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10gKworCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMl0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzFdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzBdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU4LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF83XSArCisJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF82XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNV0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNF0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CisJfQorCisJaSA9IHJhdGU2bWI7CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQlpID0gcmF0ZUh0NDBfMDsKKwllbHNlIGlmIChJU19DSEFOX0hUMjAoY2hhbikpCisJCWkgPSByYXRlSHQyMF8wOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9CisJCQlyYXRlc0FycmF5W2ldICsgQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOworCWVsc2UKKwkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0gcmF0ZXNBcnJheVtpXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCBiaWFzbGV2ZWw7CisKKwlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKKwkJcmV0dXJuOworCisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQorCQlyZXR1cm47CisKKwlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSA9CisJCSAgKElOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfZ2FpbihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCwKKwkJCQkgc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCwKKwkJCQkgdTggdHhSeEF0dGVuTG9jYWwsIGludCByZWdDaGFpbk9mZnNldCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCArIHJlZ0NoYWluT2Zmc2V0LAorCQkgIHBNb2RhbC0+YW50Q3RybENoYWluWzBdKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0LAorCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KSAmCisJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAorCQkgIFNNKHBNb2RhbC0+aXFDYWxJQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSB8CisJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFswXSwgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFswXTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLCBwTW9kYWwtPmJzd01hcmdpblswXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwgcE1vZGFsLT5ic3dBdHRlblswXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsIHBNb2RhbC0+eGF0dGVuMkRiWzBdKTsKKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sIHR4UnhBdHRlbkxvY2FsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7CisKKwlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKKwkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgKEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQgfCAweDE0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKwl1OCBvYls1XSwgZGIxWzVdLCBkYjJbNV07CisJdTggYW50X2Rpdl9jb250cm9sMSwgYW50X2Rpdl9jb250cm9sMjsKKwl1MzIgcmVnVmFsOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJdHhSeEF0dGVuTG9jYWwgPSAyMzsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCS8qIFNpbmdsZSBjaGFpbiBmb3IgNEsgRUVQUk9NKi8KKwlhdGg5a19od180a19zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsLCAwKTsKKworCS8qIEluaXRpYWxpemUgQW50IERpdmVyc2l0eSBzZXR0aW5ncyBmcm9tIEVFUFJPTSAqLworCWlmIChwTW9kYWwtPnZlcnNpb24gPT0gMykgeworCQlhbnRfZGl2X2NvbnRyb2wxID0gKChwTW9kYWwtPm9iXzIzNCA+PiAxMikgJiAweGYpOworCQlhbnRfZGl2X2NvbnRyb2wyID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gMTIpICYgMHhmKTsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7CisJCXJlZ1ZhbCAmPSAofigweDdmMDAwMDAwKSk7CisJCXJlZ1ZhbCB8PSAoKGFudF9kaXZfY29udHJvbDEgJiAweDEpIDw8IDI0KTsKKwkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMSkgJiAweDEpIDw8IDI5KTsKKwkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMikgJiAweDEpIDw8IDMwKTsKKwkJcmVnVmFsIHw9ICgoYW50X2Rpdl9jb250cm9sMiAmIDB4MykgPDwgMjUpOworCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMiA+PiAyKSAmIDB4MykgPDwgMjcpOworCQlSRUdfV1JJVEUoYWgsIDB4OTlhYywgcmVnVmFsKTsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweGEyMDgpOworCQlyZWdWYWwgJj0gKH4oMHgxIDw8IDEzKSk7CisJCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDMpICYgMHgxKSA8PCAxMyk7CisJCVJFR19XUklURShhaCwgMHhhMjA4LCByZWdWYWwpOworCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjA4KTsKKwl9CisKKwlpZiAocE1vZGFsLT52ZXJzaW9uID49IDIpIHsKKwkJb2JbMF0gPSAocE1vZGFsLT5vYl8wMSAmIDB4Zik7CisJCW9iWzFdID0gKHBNb2RhbC0+b2JfMDEgPj4gNCkgJiAweGY7CisJCW9iWzJdID0gKHBNb2RhbC0+b2JfMjM0ICYgMHhmKTsKKwkJb2JbM10gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDQpICYgMHhmKTsKKwkJb2JbNF0gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDgpICYgMHhmKTsKKworCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOworCQlkYjFbMV0gPSAoKHBNb2RhbC0+ZGIxXzAxID4+IDQpICYgMHhmKTsKKwkJZGIxWzJdID0gKHBNb2RhbC0+ZGIxXzIzNCAmIDB4Zik7CisJCWRiMVszXSA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDQpICYgMHhmKTsKKwkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gOCkgJiAweGYpOworCisJCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7CisJCWRiMlsxXSA9ICgocE1vZGFsLT5kYjJfMDEgPj4gNCkgJiAweGYpOworCQlkYjJbMl0gPSAocE1vZGFsLT5kYjJfMjM0ICYgMHhmKTsKKwkJZGIyWzNdID0gKChwTW9kYWwtPmRiMl8yMzQgPj4gNCkgJiAweGYpOworCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzIzNCA+PiA4KSAmIDB4Zik7CisKKwl9IGVsc2UgaWYgKHBNb2RhbC0+dmVyc2lvbiA9PSAxKSB7CisJCW9iWzBdID0gKHBNb2RhbC0+b2JfMDEgJiAweGYpOworCQlvYlsxXSA9IG9iWzJdID0gb2JbM10gPSBvYls0XSA9IChwTW9kYWwtPm9iXzAxID4+IDQpICYgMHhmOworCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOworCQlkYjFbMV0gPSBkYjFbMl0gPSBkYjFbM10gPQorCQkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8wMSA+PiA0KSAmIDB4Zik7CisJCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7CisJCWRiMlsxXSA9IGRiMlsyXSA9IGRiMlszXSA9CisJCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzAxID4+IDQpICYgMHhmKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJb2JbaV0gPSBwTW9kYWwtPm9iXzAxOworCQkJZGIxW2ldID0gcE1vZGFsLT5kYjFfMDE7CisJCQlkYjJbaV0gPSBwTW9kYWwtPmRiMV8wMTsKKwkJfQorCX0KKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19PQl8wLCBBUjkyODVfQU5fUkYyRzNfT0JfMF9TLCBvYlswXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX09CXzEsIEFSOTI4NV9BTl9SRjJHM19PQl8xX1MsIG9iWzFdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfT0JfMiwgQVI5Mjg1X0FOX1JGMkczX09CXzJfUywgb2JbMl0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19PQl8zLCBBUjkyODVfQU5fUkYyRzNfT0JfM19TLCBvYlszXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX09CXzQsIEFSOTI4NV9BTl9SRjJHM19PQl80X1MsIG9iWzRdKTsKKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMCwgQVI5Mjg1X0FOX1JGMkczX0RCMV8wX1MsIGRiMVswXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8xLCBBUjkyODVfQU5fUkYyRzNfREIxXzFfUywgZGIxWzFdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfREIxXzIsIEFSOTI4NV9BTl9SRjJHM19EQjFfMl9TLCBkYjFbMl0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjFfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMV8zX1MsIGRiMVszXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMV80LCBBUjkyODVfQU5fUkYyRzRfREIxXzRfUywgZGIxWzRdKTsKKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMCwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8wX1MsIGRiMlswXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8xLCBBUjkyODVfQU5fUkYyRzRfREIyXzFfUywgZGIyWzFdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCisJCQlBUjkyODVfQU5fUkYyRzRfREIyXzIsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMl9TLCBkYjJbMl0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMl8zX1MsIGRiMlszXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl80LCBBUjkyODVfQU5fUkYyRzRfREIyXzRfUywgZGIyWzRdKTsKKworCisJaWYgKEFSX1NSRVZfOTI4NV8xMShhaCkpCisJCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDQsIEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAorCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpIHwKKwkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikgfAorCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pICB8CisJCSAgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCisJCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAorCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKKwkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwKKwkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfUEFfT04sCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCX0KKworCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCQkJCQkJQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCX0KK30KKworc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKK30KKworc3RhdGljIHU4IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKK3sKKyNkZWZpbmUgRUVQX01BUDRLX1NQVVJDSEFOIFwKKwkoYWgtPmVlcHJvbS5tYXA0ay5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCisKKwl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOworCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKKworCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgeworCWNhc2UgU1BVUl9ESVNBQkxFOgorCQlicmVhazsKKwljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgorCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006CisJCXNwdXJfdmFsID0gRUVQX01BUDRLX1NQVVJDSEFOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3B1cl92YWw7CisKKyN1bmRlZiBFRVBfTUFQNEtfU1BVUkNIQU4KK30KKworc3RhdGljIHN0cnVjdCBlZXByb21fb3BzIGVlcF80a19vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od180a19jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od180a19zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3XzRrX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfNGtfZ2V0X3NwdXJfY2hhbm5lbAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVFUFJPTSBPcGVyYXRpb25zIGZvciBub24tNEsgKERlZmF1bHQpIGNhcmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKTsKK30KKworc3RhdGljIGludCBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfZGVmX2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworI2RlZmluZSBTSVpFX0VFUFJPTV9ERUYgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNikpCisJdTE2ICplZXBfZGF0YSA9ICh1MTYgKikmYWgtPmVlcHJvbS5kZWY7CisJaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCisJCQkJCSBlZXBfZGF0YSkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllZXBfZGF0YSsrOworCX0KKwlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBTSVpFX0VFUFJPTV9ERUYKK30KKworc3RhdGljIGludCBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0KKwkJKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqKSAmYWgtPmVlcHJvbS5kZWY7CisJdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOworCXUzMiBzdW0gPSAwLCBlbDsKKwlib29sIG5lZWRfc3dhcCA9IGZhbHNlOworCWludCBpLCBhZGRyLCBzaXplOworCisJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwgJm1hZ2ljKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwgIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisKKwkJaWYgKG1hZ2ljICE9IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCW1hZ2ljMiA9IHN3YWIxNihtYWdpYyk7CisKKwkJCWlmIChtYWdpYzIgPT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgeworCQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKTsKKwkJCQluZWVkX3N3YXAgPSB0cnVlOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKKwkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7CisJCQkJCSplZXBkYXRhID0gdGVtcDsKKwkJCQkJZWVwZGF0YSsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgorCQkJCQkiRW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAorCQluZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKKworCWlmIChuZWVkX3N3YXApCisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKKwllbHNlCisJCWVsID0gYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGg7CisKKwlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSkKKwkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpOworCWVsc2UKKwkJZWwgPSBlbCAvIHNpemVvZih1MTYpOworCisJZWVwZGF0YSA9ICh1MTYgKikoJmFoLT5lZXByb20pOworCisJZm9yIChpID0gMDsgaSA8IGVsOyBpKyspCisJCXN1bSBePSAqZWVwZGF0YSsrOworCisJaWYgKG5lZWRfc3dhcCkgeworCQl1MzIgaW50ZWdlciwgajsKKwkJdTE2IHdvcmQ7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZy5cbiIpOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGggPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50KTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50ID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMgPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXAgPSB3b3JkOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGVlcC0+bW9kYWxIZWFkZXIpOyBqKyspIHsKKwkJCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkJCSZlZXAtPm1vZGFsSGVhZGVyW2pdOworCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDb21tb24pOworCQkJcE1vZGFsLT5hbnRDdHJsQ29tbW9uID0gaW50ZWdlcjsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKKwkJCQlpbnRlZ2VyID0gc3dhYjMyKHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKwkJCQlwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKKwkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKKwkJCQlwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8CisJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCisJCQlzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBhdGg5a19od19kZWZfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0gZWVwLT5tb2RhbEhlYWRlcjsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CisKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBFRVBfTkZUSFJFU0hfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJY2FzZSBFRVBfTkZUSFJFU0hfMjoKKwkJcmV0dXJuIHBNb2RhbFsxXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJY2FzZSBBUl9FRVBST01fTUFDKDApOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOworCWNhc2UgQVJfRUVQUk9NX01BQygxKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMik6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07CisJY2FzZSBFRVBfUkVHXzA6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOworCWNhc2UgRUVQX1JFR18xOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKKwljYXNlIEVFUF9PUF9DQVA6CisJCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOworCWNhc2UgRUVQX09QX01PREU6CisJCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKKwljYXNlIEVFUF9SRl9TSUxFTlQ6CisJCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7CisJY2FzZSBFRVBfT0JfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5vYjsKKwljYXNlIEVFUF9EQl81OgorCQlyZXR1cm4gcE1vZGFsWzBdLmRiOworCWNhc2UgRUVQX09CXzI6CisJCXJldHVybiBwTW9kYWxbMV0ub2I7CisJY2FzZSBFRVBfREJfMjoKKwkJcmV0dXJuIHBNb2RhbFsxXS5kYjsKKwljYXNlIEVFUF9NSU5PUl9SRVY6CisJCXJldHVybiBBUjU0MTZfVkVSX01BU0s7CisJY2FzZSBFRVBfVFhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CisJY2FzZSBFRVBfUlhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT5yeE1hc2s7CisJY2FzZSBFRVBfUlhHQUlOX1RZUEU6CisJCXJldHVybiBwQmFzZS0+cnhHYWluVHlwZTsKKwljYXNlIEVFUF9UWEdBSU5fVFlQRToKKwkJcmV0dXJuIHBCYXNlLT50eEdhaW5UeXBlOworCWNhc2UgRUVQX09MX1BXUkNUUkw6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPm9wZW5Mb29wUHdyQ250bCA/IHRydWUgOiBmYWxzZTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCWNhc2UgRUVQX1JDX0NIQUlOX01BU0s6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPnJjQ2hhaW5NYXNrOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9EQUNfSFBXUl81RzoKKwkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkKKwkJCXJldHVybiBwQmFzZS0+ZGFjSGlQd3JNb2RlXzVHOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9GUkFDX05fNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIpCisJCQlyZXR1cm4gcEJhc2UtPmZyYWNfbl81ZzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2dhaW4oc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsLAorCQkJCSAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAsCisJCQkJICB1OCB0eFJ4QXR0ZW5Mb2NhbCwgaW50IHJlZ0NoYWluT2Zmc2V0LCBpbnQgaSkKK3sKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoW2ldOworCisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT5ic3dNYXJnaW5baV0pOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAorCQkJICAgICAgcE1vZGFsLT5ic3dBdHRlbltpXSk7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yTWFyZ2luW2ldKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwKKwkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMkRiW2ldKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikKKwkJCSAgfCBTTShwTW9kYWwtPiBic3dNYXJnaW5baV0sCisJCQkgICAgICAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikKKwkJCSAgfCBTTShwTW9kYWwtPmJzd0F0dGVuW2ldLAorCQkJICAgICAgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKSk7CisJCX0KKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLAorCQkgICAgICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sIHR4UnhBdHRlbkxvY2FsKTsKKwkJUkVHX1JNV19GSUVMRChhaCwKKwkJICAgICAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOworCX0gZWxzZSB7CisJCVJFR19XUklURShhaCwKKwkJCSAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfkFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikKKwkJCSAgfCBTTSh0eFJ4QXR0ZW5Mb2NhbCwgQVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSk7CisJCVJFR19XUklURShhaCwKKwkJCSAgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pIHwKKwkJCSAgU00ocE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0sIEFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJaW50IGksIHJlZ0NoYWluT2Zmc2V0OworCXU4IHR4UnhBdHRlbkxvY2FsOworCisJcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOworCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CisJCQlpZiAoaSA+PSAyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgJiYKKwkJICAgIChhaC0+cnhjaGFpbm1hc2sgPT0gNSB8fCBhaC0+dHhjaGFpbm1hc2sgPT0gNSkgJiYgKGkgIT0gMCkpCisJCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOworCQllbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8CisJCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAorCQkJICBTTShwTW9kYWwtPmlxQ2FsSUNoW2ldLAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAorCQkJICBTTShwTW9kYWwtPmlxQ2FsUUNoW2ldLAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOworCisJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKQorCQkJYXRoOWtfaHdfZGVmX3NldF9nYWluKGFoLCBwTW9kYWwsIGVlcCwgdHhSeEF0dGVuTG9jYWwsCisJCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LCBpKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0JfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0gZWxzZSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKKwkJfQorCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkwsCisJCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTF9TLAorCQkJCQkgIHBNb2RhbC0+eHBhQmlhc0x2bCk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVMsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVNfUywKKwkJCQkJICBwTW9kYWwtPmxvY2FsX2JpYXMpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfWFBBX0NGRywgQVJfUEhZX0ZPUkNFX1hQQV9DRkcsCisJCQkgICAgICBwTW9kYWwtPmZvcmNlX3hwYW9uKTsKKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCSAgICAgIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLCBBUl9QSFlfREVTSVJFRF9TWl9BREMsCisJCSAgICAgIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOworCisJaWYgKCFBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKKwkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1BHQSwKKwkJCSAgICAgIHBNb2RhbC0+cGdhRGVzaXJlZFNpemUpOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMNCwKKwkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKQorCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwKKwkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCX0gZWxzZSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSX1BIWV9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCX0KKworCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwKKwkJCSAgICAgIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwKKwkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfUEFfT04sCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCX0KKworCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCX0KKworCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpICYmCisJICAgIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDS19UWF9DVFJMLAorCQkJICAgICAgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0ssCisJCQkgICAgICBwTW9kYWwtPm1pc2NCaXRzKTsKKworCisJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkgJiYgQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIwKSB7CisJCWlmIChJU19DSEFOXzJHSFooY2hhbikpCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkJZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0xwTW9kZSk7CisJCWVsc2UgaWYgKGVlcC0+YmFzZUVlcEhlYWRlci5kYWNIaVB3ck1vZGVfNUcpCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwgMCk7CisJCWVsc2UKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1RPUDEsIEFSX0FOX1RPUDFfREFDSVBNT0RFLAorCQkJCSAgICAgIGVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GUkFNRV9DVEwsIEFSX1BIWV9GUkFNRV9DVExfVFhfQ0xJUCwKKwkJCSAgICAgIHBNb2RhbC0+bWlzY0JpdHMgPj4gMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LAorCQkJICAgICAgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLLAorCQkJICAgICAgZWVwLT5iYXNlRWVwSGVhZGVyLmRlc2lyZWRTY2FsZUNDSyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworI2RlZmluZSBYUEFfTFZMX0ZSRVEoY250KSAocE1vZGFsLT54cGFCaWFzTHZsRnJlcVtjbnRdKQorCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJdTggYmlhc2xldmVsOworCisJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApCisJCXJldHVybjsKKworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKKwkJcmV0dXJuOworCisJcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOworCisJaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7CisJCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKKwl9IGVsc2UgeworCQl1MTYgcmVzZXRGcmVxQmluLCBmcmVxQmluLCBmcmVxQ291bnQgPSAwOworCQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwkJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJCXJlc2V0RnJlcUJpbiA9IEZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoMCkgJiAweGZmOworCQliaWFzbGV2ZWwgPSAodTgpIChYUEFfTFZMX0ZSRVEoMCkgPj4gMTQpOworCisJCWZyZXFDb3VudCsrOworCisJCXdoaWxlIChmcmVxQ291bnQgPCAzKSB7CisJCQlpZiAoWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgPT0gMHgwKQorCQkJCWJyZWFrOworCisJCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgJiAweGZmOworCQkJaWYgKHJlc2V0RnJlcUJpbiA+PSBmcmVxQmluKQorCQkJCWJpYXNsZXZlbCA9ICh1OCkoWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgPj4gMTQpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQkJZnJlcUNvdW50Kys7CisJCX0KKwl9CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSA9IChJTklfUkEoJmFoLT5pbmlBZGRhYywKKwkJCQkJNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOworCX0gZWxzZSB7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA2LCAxKSA9IChJTklfUkEoJmFoLT5pbmlBZGRhYywKKwkJCQkJNiwgMSkgJiAofjB4YzApKSB8IGJpYXNsZXZlbCA8PCA2OworCX0KKyN1bmRlZiBYUEFfTFZMX0ZSRVEKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqcFJhd0RhdGFTZXQsCiAJCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCkBAIC03NjksNyArMjAzOCw3IEBACiAJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KIAkJCW1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwgcFBkR2FpbkJvdW5kYXJpZXNbaV0pOwogCi0JCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CiAJCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7CiAJCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOwogCQl9IGVsc2UgewpAQCAtODM0LDE1MCArMjEwMywxNSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCi0JCQkJICAgICAgdTE2IG51bUNoYW5uZWxzLAotCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcE5ld1Bvd2VyLAotCQkJCSAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKLXsKLQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7Ci0JdTE2IGNsbywgY2hpOwotCWludCBpOwotCWludCBtYXRjaEluZGV4ID0gLTEsIGxvd0luZGV4ID0gLTE7Ci0JdTE2IGZyZXE7Ci0KLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0JZnJlcSA9IChpc0V4dFRhcmdldCkgPyBjZW50ZXJzLmV4dF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwKLQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgewotCQltYXRjaEluZGV4ID0gMDsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgotCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7Ci0JCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCQkJbWF0Y2hJbmRleCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgotCQkJCSAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAotCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKLQkJCQlsb3dJbmRleCA9IGkgLSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgobWF0Y2hJbmRleCA9PSAtMSkgJiYgKGxvd0luZGV4ID09IC0xKSkKLQkJCW1hdGNoSW5kZXggPSBpIC0gMTsKLQl9Ci0KLQlpZiAobWF0Y2hJbmRleCAhPSAtMSkgewotCQkqcE5ld1Bvd2VyID0gcG93SW5mb1ttYXRjaEluZGV4XTsKLQl9IGVsc2UgewotCQljbG8gPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleF0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCQljaGkgPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleCArIDFdLmJDaGFubmVsLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtUmF0ZXM7IGkrKykgewotCQkJcE5ld1Bvd2VyLT50UG93MnhbaV0gPQotCQkJCSh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLCBjbG8sIGNoaSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXhdLnRQb3cyeFtpXSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXggKyAxXS50UG93MnhbaV0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKLQkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAotCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQotewotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQl1MTYgY2xvLCBjaGk7Ci0JaW50IGk7Ci0JaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKLQl1MTYgZnJlcTsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQlmcmVxID0gaXNIdDQwVGFyZ2V0ID8gY2VudGVycy5zeW50aF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwgSVNfQ0hBTl8yR0haKGNoYW4pKSkgewotCQltYXRjaEluZGV4ID0gMDsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgotCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7Ci0JCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCQkJbWF0Y2hJbmRleCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UKLQkJCQlpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgotCQkJCSAgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgewotCQkJCQlsb3dJbmRleCA9IGkgLSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCX0KLQkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQotCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwotCX0KLQotCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7Ci0JCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOwotCX0gZWxzZSB7Ci0JCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0JCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7Ci0JCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9ICh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLAotCQkJCQkJY2xvLCBjaGksCi0JCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCi0JCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHUxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsCi0JCQkJICAgICAgIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAotCQkJCSAgICAgICBib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQotewotCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCi0JCSAgICAgKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgewotCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwgaXMyR0h6KSkgewotCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBwUmRFZGdlc1Bvd2VyW2ldLnRQb3dlcjsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKChpID4gMCkgJiYKLQkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBpczJHSHopKSkgewotCQkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2kgLSAxXS5iQ2hhbm5lbCwKLQkJCQkJICAgICAgIGlzMkdIeikgPCBmcmVxICYmCi0JCQkgICAgcFJkRWRnZXNQb3dlcltpIC0gMV0uZmxhZykgewotCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KLQkJCQkJcFJkRWRnZXNQb3dlcltpIC0gMV0udFBvd2VyOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHdpY2VNYXhFZGdlUG93ZXI7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKIAlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OwogCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKIAl1MTYgcGRHYWluT3ZlcmxhcF90MjsKQEAgLTEwMTAsNiArMjE0NCwxMiBAQAogCQludW1QaWVycyA9IEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTOwogCX0KIAorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAmJiBJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1swXTsKKwkJYWgtPmluaXRQREFEQyA9ICgoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopCisJCQkJIHBSYXdEYXRhc2V0KS0+dnBkUGRnWzBdWzBdOworCX0KKwogCW51bVhwZEdhaW4gPSAwOwogCiAJZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7CkBAIC0xMDMyLDggKzIxNzIsOCBAQAogCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgKGFocC0+YWhfcnhjaGFpbm1hc2sgPT0gNSB8fCBhaHAtPmFoX3R4Y2hhaW5tYXNrID09IDUpICYmCisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCiAJCSAgICAoaSAhPSAwKSkgewogCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKIAkJfSBlbHNlCkBAIC0xMDQ1LDI1ICsyMTg1LDQ1IEBACiAJCQllbHNlCiAJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKIAotCQkJYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLCBjaGFuLAotCQkJCQkgICAgcFJhd0RhdGFzZXQsIHBDYWxCQ2hhbnMsCi0JCQkJCSAgICBudW1QaWVycywgcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICZ0TWluQ2FsUG93ZXIsIGdhaW5Cb3VuZGFyaWVzLAotCQkJCQkgICAgcGRhZGNWYWx1ZXMsIG51bVhwZEdhaW4pOwogCi0JCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1swXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKLQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQpKTsKKwkJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJCXU4IHBjZGFjSWR4OworCQkJCXU4IHR4UG93ZXI7CisKKwkJCQlhdGg5a19nZXRfdHhnYWluX2luZGV4KGFoLCBjaGFuLAorCQkJCShzdHJ1Y3QgY2FsRGF0YVBlckZyZXFPcExvb3AgKilwUmF3RGF0YXNldCwKKwkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywgJnR4UG93ZXIsICZwY2RhY0lkeCk7CisJCQkJYXRoOWtfb2xjX2dldF9wZGFkY3MoYWgsIHBjZGFjSWR4LAorCQkJCQkJICAgICB0eFBvd2VyLzIsIHBkYWRjVmFsdWVzKTsKKwkJCX0gZWxzZSB7CisJCQkJYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLAorCQkJCQkJCWNoYW4sIHBSYXdEYXRhc2V0LAorCQkJCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLAorCQkJCQkJCXBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCQkJJnRNaW5DYWxQb3dlciwKKwkJCQkJCQlnYWluQm91bmRhcmllcywKKwkJCQkJCQlwZGFkY1ZhbHVlcywKKwkJCQkJCQludW1YcGRHYWluKTsKKwkJCX0KKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00oMHg2LAorCQkJCQkJQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApIHwKKwkJCQkJCVNNX1BEX0dBSU4oMSkgfCBTTV9QRF9HQUlOKDIpIHwKKwkJCQkJCVNNX1BEX0dBSU4oMykgfCBTTV9QRF9HQUlOKDQpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlSRUdfV1JJVEUoYWgsCisJCQkJCQlBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQlTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApfAorCQkJCQkJU01fUERHQUlOX0IoMCwgMSkgfAorCQkJCQkJU01fUERHQUlOX0IoMSwgMikgfAorCQkJCQkJU01fUERHQUlOX0IoMiwgMykgfAorCQkJCQkJU01fUERHQUlOX0IoMywgNCkpOworCQkJCX0KIAkJCX0KIAogCQkJcmVnT2Zmc2V0ID0gQVJfUEhZX0JBU0UgKyAoNjcyIDw8IDIpICsgcmVnQ2hhaW5PZmZzZXQ7CkBAIC0xMDk3LDEyNiArMjI1NywxMSBAQAogCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKIAogCXJldHVybiB0cnVlOworI3VuZGVmIFNNX1BEX0dBSU4KKyN1bmRlZiBTTV9QREdBSU5fQgogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKnBSYXdEYXRhc2V0OwotCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKLQl1MTYgcGRHYWluT3ZlcmxhcF90MjsKLQlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOwotCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107Ci0JdTE2IG51bVBpZXJzLCBpLCBqOwotCWludDE2X3QgdE1pbkNhbFBvd2VyOwotCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOwotCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07Ci0JdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OwotCi0JeHBkTWFzayA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci54cGRHYWluOwotCi0JaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlwZEdhaW5PdmVybGFwX3QyID0KLQkJCXBFZXBEYXRhLT5tb2RhbEhlYWRlci5wZEdhaW5PdmVybGFwOwotCX0gZWxzZSB7Ci0JCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCi0JCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOwotCX0KLQotCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOwotCi0JbnVtWHBkR2FpbiA9IDA7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKLQkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKLQkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9OVU1fUERfR0FJTlMpCi0JCQkJYnJlYWs7Ci0JCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOwotCQkJbnVtWHBkR2FpbisrOwotCQl9Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9OVU1fUERfR0FJTiwKLQkJICAgICAgKG51bVhwZEdhaW4gLSAxKSAmIDB4Myk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzEsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMF0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8yLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzFdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywKLQkJICAgICAgeHBkR2FpblZhbHVlc1syXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KSAmJgotCQkgICAgKGkgIT0gMCkpIHsKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7Ci0JCX0gZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCWlmIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci50eE1hc2sgJiAoMSA8PCBpKSkgewotCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKLQotCQkJYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsIGNoYW4sCi0JCQkJCSAgICBwUmF3RGF0YXNldCwgcENhbEJDaGFucywKLQkJCQkJICAgIG51bVBpZXJzLCBwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCi0JCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7Ci0KLQkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJCVJFR19XUklURShhaCwgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1swXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKLQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQpKTsKLQkJCX0KLQotCQkJcmVnT2Zmc2V0ID0gQVJfUEhZX0JBU0UgKyAoNjcyIDw8IDIpICsgcmVnQ2hhaW5PZmZzZXQ7Ci0JCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewotCQkJCXJlZzMyID0gKChwZGFkY1ZhbHVlc1s0ICogaiArIDBdICYgMHhGRikgPDwgMCkgfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMV0gJiAweEZGKSA8PCA4KSB8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAyXSAmIDB4RkYpIDw8IDE2KXwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDNdICYgMHhGRikgPDwgMjQpOwotCQkJCVJFR19XUklURShhaCwgcmVnT2Zmc2V0LCByZWczMik7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdfSU8sCi0JCQkJCSJQREFEQyAoJWQsJTR4KTogJTQuNHggJTguOHhcbiIsCi0JCQkJCWksIHJlZ0NoYWluT2Zmc2V0LCByZWdPZmZzZXQsCi0JCQkJCXJlZzMyKTsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdfSU8sCi0JCQkJCSJQREFEQzogQ2hhaW4gJWQgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHxcbiIsCi0JCQkJCWksIDQgKiBqLCBwZGFkY1ZhbHVlc1s0ICogal0sCi0JCQkJCTQgKiBqICsgMSwgcGRhZGNWYWx1ZXNbNCAqIGogKyAxXSwKLQkJCQkJNCAqIGogKyAyLCBwZGFkY1ZhbHVlc1s0ICogaiArIDJdLAotCQkJCQk0ICogaiArIDMsCi0JCQkJCXBkYWRjVmFsdWVzWzQgKiBqICsgM10pOwotCi0JCQkJcmVnT2Zmc2V0ICs9IDQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqcFR4UG93ZXJJbmRleE9mZnNldCA9IDA7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkJCSAgaW50MTZfdCAqcmF0ZXNBcnJheSwKIAkJCQkJCSAgdTE2IGNmZ0N0bCwKQEAgLTEyMjcsOCArMjI3Miw3IEBACiAjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCiAjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCiAKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CiAJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwogCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KIAkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKQEAgLTEyNTgsNyArMjMwMiw3IEBACiAJaW50IHR4X2NoYWlubWFzazsKIAl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CiAKLQl0eF9jaGFpbm1hc2sgPSBhaHAtPmFoX3R4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIApAQCAtMTI3Nyw5ICsyMzIxLDkgQEAKIAogCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKIAotCWlmIChhaC0+YWhfdHBTY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKKwlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CiAJCW1heFJlZ0FsbG93ZWRQb3dlciAtPQotCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPmFoX3RwU2NhbGUpXSAqIDIpOworCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOwogCX0KIAogCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CkBAIC0xMzY3LDcgKzI0MTEsOCBAQAogCQllbHNlCiAJCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOwogCi0JCWlmIChhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSA9PSAxNCAmJiBhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8PSAyKQorCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQogCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKQEAgLTE1MDcsMjU3ICsyNTUyLDIxIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKLQkJCQkJCSB1MTYgY2ZnQ3RsLAotCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0Jc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OwotCi0JaW50IGk7Ci0JaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgKnJlcDsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfQotCX07Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwIH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewotCQkwLCB7MCwgMCwgMCwgMH0KLQl9OwotCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IGN0bE1vZGVzRm9yMTFnW10gPQotCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKLQkJICBDVExfMkdIVDQwCi0JCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCWludCB0eF9jaGFpbm1hc2s7Ci0JdTE2IHR3aWNlTWluRWRnZVBvd2VyOwotCi0JdHhfY2hhaW5tYXNrID0gYWhwLT5haF90eGNoYWlubWFzazsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIuYW50ZW5uYUdhaW5DaFswXTsKLQotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAoaW50MTZfdCltaW4oQW50ZW5uYVJlZHVjdGlvbiAtCi0JCQkJCSAgIHR3aWNlTGFyZ2VzdEFudGVubmEsIDApOwotCi0JbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCi0JaWYgKGFoLT5haF90cFNjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgewotCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KLQkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKGFoLT5haF90cFNjYWxlKV0gKiAyKTsKLQl9Ci0KLQlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOwotCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOwotCi0JbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOwotCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7Ci0KLQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7Ci0JYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7Ci0JYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjAsCi0JCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7Ci0JCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQ0MCwKLQkJCQlBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7Ci0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOwotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOwotCX0KLQotCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7Ci0JCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAotCQkJKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOwotCQlpZiAoaXNIdDQwQ3RsTW9kZSkKLQkJCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKLQkJZWxzZSBpZiAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpCi0JCQlmcmVxID0gY2VudGVycy5leHRfY2VudGVyOwotCQllbHNlCi0JCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOwotCi0JCWlmIChhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSA9PSAxNCAmJgotCQkJCWFyNTQxNl9nZXRfZWVwX3JldihhaHApIDw9IDIpCi0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJIkxPT1AtTW9kZSBjdGxNb2RlICVkIDwgJWQsIGlzSHQ0MEN0bE1vZGUgJWQsICIKLQkJCSJFWFRfQURESVRJVkUgJWRcbiIsCi0JCQljdGxNb2RlLCBudW1DdGxNb2RlcywgaXNIdDQwQ3RsTW9kZSwKLQkJCShwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkpOwotCi0JCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X05VTV9DVExTKSAmJgotCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXTsgaSsrKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJCSIgIExPT1AtQ3RsaWR4ICVkOiBjZmdDdGwgMHglMi4yeCAiCi0JCQkJInBDdGxNb2RlIDB4JTIuMnggY3RsSW5kZXggMHglMi4yeCAiCi0JCQkJImNoYW4gJWRcbiIsCi0JCQkJaSwgY2ZnQ3RsLCBwQ3RsTW9kZVtjdGxNb2RlXSwKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV0sIGNoYW4tPmNoYW5uZWwpOwotCi0JCQlpZiAoKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICBwRWVwRGF0YS0+Y3RsSW5kZXhbaV0pIHx8Ci0JCQkgICAgKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICAoKHBFZXBEYXRhLT5jdGxJbmRleFtpXSAmIENUTF9NT0RFX00pIHwKLQkJCSAgICAgIFNEX05PX0NUTCkpKSB7Ci0JCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0KLQkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9Ci0JCQkJCWF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAotCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJCSh0eF9jaGFpbm1hc2spIC0gMV0sCi0JCQkJSVNfQ0hBTl8yR0haKGNoYW4pLAotCQkJCUFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyk7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJCQkiICAgIE1BVENILUVFX0lEWCAlZDogY2ggJWQgaXMyICVkICIKLQkJCQkJIjJ4TWluRWRnZSAlZCBjaGFpbm1hc2sgJWQgY2hhaW5zICVkXG4iLAotCQkJCQlpLCBmcmVxLCBJU19DSEFOXzJHSFooY2hhbiksCi0JCQkJCXR3aWNlTWluRWRnZVBvd2VyLCB0eF9jaGFpbm1hc2ssCi0JCQkJCWFyNTQxNl9nZXRfbnR4Y2hhaW5zCi0JCQkJCSh0eF9jaGFpbm1hc2spKTsKLQkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKLQkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQotCQkJCQkJbWluKHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJCQkJICAgIHR3aWNlTWluRWRnZVBvd2VyKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQltaW5DdGxQb3dlciA9ICh1OCltaW4odHdpY2VNYXhFZGdlUG93ZXIsIHNjYWxlZFBvd2VyKTsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJIiAgICBTRUwtTWluIGN0bE1vZGUgJWQgcEN0bE1vZGUgJWQgIgotCQkJIjJ4TWF4RWRnZSAlZCBzUCAlZCBtaW5DdGxQd3IgJWRcbiIsCi0JCQljdGxNb2RlLCBwQ3RsTW9kZVtjdGxNb2RlXSwgdHdpY2VNYXhFZGdlUG93ZXIsCi0JCQlzY2FsZWRQb3dlciwgbWluQ3RsUG93ZXIpOwotCi0JCXN3aXRjaCAocEN0bE1vZGVbY3RsTW9kZV0pIHsKLQkJY2FzZSBDVExfMTFCOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJDY2sudFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExRzoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyT2ZkbS50UG93MngpOwotCQkJCQlpKyspIHsKLQkJCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8yR0hUMjA6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCi0JCQkJCSAgICBtaW5DdGxQb3dlcik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFCX0VYVDoKLQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQotCQkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCi0JCQkJCW1pbkN0bFBvd2VyKTsKLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUdfRVhUOgotCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQotCQkJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMkdIVDQwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJhdGVzQXJyYXlbcmF0ZTZtYl0gPSByYXRlc0FycmF5W3JhdGU5bWJdID0gcmF0ZXNBcnJheVtyYXRlMTJtYl0gPQotCQlyYXRlc0FycmF5W3JhdGUxOG1iXSA9IHJhdGVzQXJyYXlbcmF0ZTI0bWJdID0KLQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOwotCXJhdGVzQXJyYXlbcmF0ZTU0bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFszXTsKLQlyYXRlc0FycmF5W3JhdGVYcl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykKLQkJcmF0ZXNBcnJheVtyYXRlSHQyMF8wICsgaV0gPSB0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldOwotCi0JcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOwotCXJhdGVzQXJyYXlbcmF0ZTJzXSA9IHJhdGVzQXJyYXlbcmF0ZTJsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKLQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzJdOwotCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7Ci0JCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9Ci0JCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKLQkJfQotCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPSB0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOworI2RlZmluZSBSVF9BUl9ERUxUQSh4KSAocmF0ZXNBcnJheVt4XSAtIGNja19vZmRtX2RlbHRhKQorCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CiAJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CiAJCSYocEVlcERhdGEtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwogCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07CiAJaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwogCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKLQlpbnQgaTsKKwlpbnQgaSwgY2NrX29mZG1fZGVsdGEgPSAwOwogCiAJbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7CiAKQEAgLTE4MDYsMTYgKzI2MTUsMzAgQEAKIAkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOwogCiAJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFzXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81bF0sIDApKTsKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQljY2tfb2ZkbV9kZWx0YSA9IDI7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTJzKSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTJsKSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxbCksIDApKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJCUFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMTFzKSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExbCksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGU1XzVzKSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81bCksIDApKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJsXSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisJCX0KIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSwKQEAgLTE4NDgsMTIgKzI2NzEsMTkgQEAKIAkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQogCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKIAkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOworCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUV4dENjayksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGVEdXBDY2spLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwkJfQogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1NVQiwKQEAgLTE4NjgsNzY5ICsyNjk4LDMzIEBACiAJCWkgPSByYXRlSHQyMF8wOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0KKwkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0KIAkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CiAJZWxzZQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9IHJhdGVzQXJyYXlbaV07CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKLQlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwotCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLQl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7Ci0JaW50IGk7Ci0KLQltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAotCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKLQkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKLQkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJICJhdGg5a19od19zZXRfdHhwb3dlcjogdW5hYmxlIHRvIHNldCBwb3dlciB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzQXJyYXkpOyBpKyspIHsKLQkJcmF0ZXNBcnJheVtpXSA9CShpbnQxNl90KSh0eFBvd2VySW5kZXhPZmZzZXQgKyByYXRlc0FycmF5W2ldKTsKLQkJaWYgKHJhdGVzQXJyYXlbaV0gPiBBUjU0MTZfTUFYX1JBVEVfUE9XRVIpCi0JCQlyYXRlc0FycmF5W2ldID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBcjU0MTZSYXRlU2l6ZTsgaSsrKQotCQkJcmF0ZXNBcnJheVtpXSAtPSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTEsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTE4bWJdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMm1iXSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlOW1iXSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU2bWJdLCAwKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTIsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTU0bWJdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU0OG1iXSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMzZtYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMjRtYl0sIDApKTsKLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKwotCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOwotCX0KLQotCWkgPSByYXRlNm1iOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJaSA9IHJhdGVIdDQwXzA7Ci0JZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQotCQlpID0gcmF0ZUh0MjBfMDsKLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9Ci0JCQlyYXRlc0FycmF5W2ldICsgQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCWVsc2UKLQkJYWgtPmFoX21heFBvd2VyTGV2ZWwgPSByYXRlc0FycmF5W2ldOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgKCphdGg5a19zZXRfdHhwb3dlcltdKSAoc3RydWN0IGF0aF9oYWwgKiwKLQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqLAotCQkJCSAgIHUxNiwgdTgsIHU4LCB1OCkgPSB7Ci0JYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLAotCWF0aDlrX2h3XzRrX3NldF90eHBvd2VyCi19OwotCi1pbnQgYXRoOWtfaHdfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJIHUxNiBjZmdDdGwsCi0JCQkgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAotCQkJIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJIHU4IHBvd2VyTGltaXQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCXJldHVybiBhdGg5a19zZXRfdHhwb3dlclthaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuLCBjZmdDdGwsCi0JCQl0d2ljZUFudGVubmFSZWR1Y3Rpb24sIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJcG93ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZfYWRkYWMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotI2RlZmluZSBYUEFfTFZMX0ZSRVEoY250KSAocE1vZGFsLT54cGFCaWFzTHZsRnJlcVtjbnRdKQotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTggYmlhc2xldmVsOwotCi0JaWYgKGFoLT5haF9tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQotCQlyZXR1cm47Ci0KLQlpZiAoYXI1NDE2X2dldF9lZXBfcmV2KGFocCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQotCQlyZXR1cm47Ci0KLQlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0KLQlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKLQkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOwotCX0gZWxzZSB7Ci0JCXUxNiByZXNldEZyZXFCaW4sIGZyZXFCaW4sIGZyZXFDb3VudCA9IDA7Ci0JCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQotCQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQkJcmVzZXRGcmVxQmluID0gRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUSgwKSAmIDB4ZmY7Ci0JCWJpYXNsZXZlbCA9ICh1OCkgKFhQQV9MVkxfRlJFUSgwKSA+PiAxNCk7Ci0KLQkJZnJlcUNvdW50Kys7Ci0KLQkJd2hpbGUgKGZyZXFDb3VudCA8IDMpIHsKLQkJCWlmIChYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA9PSAweDApCi0JCQkJYnJlYWs7Ci0KLQkJCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSAmIDB4ZmY7Ci0JCQlpZiAocmVzZXRGcmVxQmluID49IGZyZXFCaW4pCi0JCQkJYmlhc2xldmVsID0gKHU4KShYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA+PiAxNCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCQlmcmVxQ291bnQrKzsKLQkJfQotCX0KLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSA9IChJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsCi0JCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKLQl9IGVsc2UgewotCQlJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsIDYsIDEpID0gKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywKLQkJCQkJNiwgMSkgJiAofjB4YzApKSB8IGJpYXNsZXZlbCA8PCA2OwotCX0KLSN1bmRlZiBYUEFfTFZMX0ZSRVEKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0XzRrX2FkZGFjKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXU4IGJpYXNsZXZlbDsKLQotCWlmIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKLQkJcmV0dXJuOwotCi0JaWYgKGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKLQkJcmV0dXJuOwotCi0JcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKLQkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOwotCQlJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsIDcsIDEpID0KLQkJICAoSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAoKmF0aDlrX3NldF9hZGRhY1tdKSAoc3RydWN0IGF0aF9oYWwgKiwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKikgPSB7Ci0JYXRoOWtfaHdfc2V0X2RlZl9hZGRhYywKLQlhdGg5a19od19zZXRfNGtfYWRkYWMKLX07Ci0KLXZvaWQgYXRoOWtfaHdfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWF0aDlrX3NldF9hZGRhY1thaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuKTsKLX0KLQotCi0KLS8qIFhYWDogQ2xlYW4gbWUgdXAsIG1ha2UgbWUgbW9yZSBsZWdpYmxlICovCi1zdGF0aWMgYm9vbCBhdGg5a19od19lZXByb21fc2V0X2RlZl9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JaW50IGksIHJlZ0NoYWluT2Zmc2V0OwotCXU4IHR4UnhBdHRlbkxvY2FsOwotCXUxNiBhbnRfY29uZmlnOwotCi0JcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCi0JdHhSeEF0dGVuTG9jYWwgPSBJU19DSEFOXzJHSFooY2hhbikgPyAyMyA6IDQ0OwotCi0JYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwgMCwgJmFudF9jb25maWcpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKLQkJCWlmIChpID49IDIpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KQotCQkgICAgJiYgKGkgIT0gMCkpCi0JCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOwotCQllbHNlCi0JCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJICAgIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKwotCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJICAgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8Ci0JCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAotCQkJICBTTShwTW9kYWwtPmlxQ2FsSUNoW2ldLAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAotCQkJICBTTShwTW9kYWwtPmlxQ2FsUUNoW2ldLAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOwotCi0JCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmCi0JCQkgICAgIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JCQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQkJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFtpXTsKLQkJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sCi0JCQkJCQlwTW9kYWwtPgotCQkJCQkJYnN3TWFyZ2luW2ldKTsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfREIsCi0JCQkJCQlwTW9kYWwtPgotCQkJCQkJYnN3QXR0ZW5baV0pOwotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCi0JCQkJCQlwTW9kYWwtPgotCQkJCQkJeGF0dGVuMk1hcmdpbltpXSk7Ci0JCQkJCVJFR19STVdfRklFTEQoYWgsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCXJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCXhhdHRlbjJEYltpXSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUkVHX1dSSVRFKGFoLAotCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCQkgICAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKQotCQkJCQkJICB8IFNNKHBNb2RhbC0+Ci0JCQkJCQkgIGJzd01hcmdpbltpXSwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKSk7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKQotCQkJCQkJICB8IFNNKHBNb2RhbC0+YnN3QXR0ZW5baV0sCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKSk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkgICAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJICAgICAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sCi0JCQkJCSAgICAgIHR4UnhBdHRlbkxvY2FsKTsKLQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkgICAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJICAgICAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLAotCQkJCQkgICAgICBwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSk7Ci0JCQl9IGVsc2UgewotCQkJCVJFR19XUklURShhaCwKLQkJCQkJICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJICAgIEFSX1BIWV9SWEdBSU4gKwotCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkJCSAgIH5BUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pIHwKLQkJCQkJICBTTSh0eFJ4QXR0ZW5Mb2NhbCwKLQkJCQkJICAgICBBUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pKTsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSB8Ci0JCQkJCSAgU00ocE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0sCi0JCQkJCSAgICAgQVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREJfUywKLQkJCQkJCSAgcE1vZGFsLT5kYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CX1MsCi0JCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREJfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9IGVsc2UgewotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1LAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1X1MsCi0JCQkJCQkgIHBNb2RhbC0+b2IpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1LAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1X1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1LAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1X1MsCi0JCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7Ci0JCX0KLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMLAotCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkxfUywKLQkJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOwotCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAotCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTLAotCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTX1MsCi0JCQkJCSAgcE1vZGFsLT5sb2NhbF9iaWFzKTsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAiRm9yY2VYUEFvbjogJWRcbiIsCi0JCQlwTW9kYWwtPmZvcmNlX3hwYW9uKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1hQQV9DRkcsIEFSX1BIWV9GT1JDRV9YUEFfQ0ZHLAotCQkJICAgICAgcE1vZGFsLT5mb3JjZV94cGFvbik7Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAotCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKLQotCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osCi0JCQkgICAgICBBUl9QSFlfREVTSVJFRF9TWl9QR0EsCi0JCQkgICAgICBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKLQotCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCi0JCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCi0JCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsCi0JCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikKLQkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCi0JCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKLQkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7Ci0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVI5MjgwX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAotCQkJICAgICAgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVJfUEhZX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQSwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCi0JCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCi0JCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKLQl9Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAotCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCi0JCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19lZXByb21fc2V0XzRrX2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0JaW50IHJlZ0NoYWluT2Zmc2V0OwotCXU4IHR4UnhBdHRlbkxvY2FsOwotCXUxNiBhbnRfY29uZmlnID0gMDsKLQl1OCBvYls1XSwgZGIxWzVdLCBkYjJbNV07Ci0JdTggYW50X2Rpdl9jb250cm9sMSwgYW50X2Rpdl9jb250cm9sMjsKLQl1MzIgcmVnVmFsOwotCi0KLQlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQotCXR4UnhBdHRlbkxvY2FsID0gMjM7Ci0KLQlhdGg5a19od19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuLCAwLCAmYW50X2NvbmZpZyk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwgYW50X2NvbmZpZyk7Ci0KLQlyZWdDaGFpbk9mZnNldCA9IDA7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKLQkJICBwTW9kYWwtPmFudEN0cmxDaGFpblswXSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKLQkJIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCSB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKLQkJIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAotCQkgU00ocE1vZGFsLT5pcUNhbElDaFswXSwgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJIFNNKHBNb2RhbC0+aXFDYWxRQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLCBwTW9kYWwtPmJzd01hcmdpblswXSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwgcE1vZGFsLT5ic3dBdHRlblswXSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCi0JCQlwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsIHBNb2RhbC0+eGF0dGVuMkRiWzBdKTsKLQl9Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLCB0eFJ4QXR0ZW5Mb2NhbCk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzBdKTsKLQotCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQotCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCAoQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCB8IDB4MTQpKTsKLQotCS8qIEluaXRpYWxpemUgQW50IERpdmVyc2l0eSBzZXR0aW5ncyBmcm9tIEVFUFJPTSAqLwotCWlmIChwTW9kYWwtPnZlcnNpb24gPT0gMykgewotCQlhbnRfZGl2X2NvbnRyb2wxID0gKChwTW9kYWwtPm9iXzIzNCA+PiAxMikgJiAweGYpOwotCQlhbnRfZGl2X2NvbnRyb2wyID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gMTIpICYgMHhmKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7Ci0JCXJlZ1ZhbCAmPSAofigweDdmMDAwMDAwKSk7Ci0JCXJlZ1ZhbCB8PSAoKGFudF9kaXZfY29udHJvbDEgJiAweDEpIDw8IDI0KTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMSkgJiAweDEpIDw8IDI5KTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMikgJiAweDEpIDw8IDMwKTsKLQkJcmVnVmFsIHw9ICgoYW50X2Rpdl9jb250cm9sMiAmIDB4MykgPDwgMjUpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMiA+PiAyKSAmIDB4MykgPDwgMjcpOwotCQlSRUdfV1JJVEUoYWgsIDB4OTlhYywgcmVnVmFsKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7Ci0JCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweGEyMDgpOwotCQlyZWdWYWwgJj0gKH4oMHgxIDw8IDEzKSk7Ci0JCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDMpICYgMHgxKSA8PCAxMyk7Ci0JCVJFR19XUklURShhaCwgMHhhMjA4LCByZWdWYWwpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjA4KTsKLQl9Ci0KLQlpZiAocE1vZGFsLT52ZXJzaW9uID49IDIpIHsKLQkJb2JbMF0gPSAocE1vZGFsLT5vYl8wMSAmIDB4Zik7Ci0JCW9iWzFdID0gKHBNb2RhbC0+b2JfMDEgPj4gNCkgJiAweGY7Ci0JCW9iWzJdID0gKHBNb2RhbC0+b2JfMjM0ICYgMHhmKTsKLQkJb2JbM10gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDQpICYgMHhmKTsKLQkJb2JbNF0gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDgpICYgMHhmKTsKLQotCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOwotCQlkYjFbMV0gPSAoKHBNb2RhbC0+ZGIxXzAxID4+IDQpICYgMHhmKTsKLQkJZGIxWzJdID0gKHBNb2RhbC0+ZGIxXzIzNCAmIDB4Zik7Ci0JCWRiMVszXSA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDQpICYgMHhmKTsKLQkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gOCkgJiAweGYpOwotCi0JCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7Ci0JCWRiMlsxXSA9ICgocE1vZGFsLT5kYjJfMDEgPj4gNCkgJiAweGYpOwotCQlkYjJbMl0gPSAocE1vZGFsLT5kYjJfMjM0ICYgMHhmKTsKLQkJZGIyWzNdID0gKChwTW9kYWwtPmRiMl8yMzQgPj4gNCkgJiAweGYpOwotCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzIzNCA+PiA4KSAmIDB4Zik7Ci0KLQl9IGVsc2UgaWYgKHBNb2RhbC0+dmVyc2lvbiA9PSAxKSB7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkVFUFJPTSBNb2RlbCB2ZXJzaW9uIGlzIHNldCB0byAxIFxuIik7Ci0JCW9iWzBdID0gKHBNb2RhbC0+b2JfMDEgJiAweGYpOwotCQlvYlsxXSA9IG9iWzJdID0gb2JbM10gPSBvYls0XSA9IChwTW9kYWwtPm9iXzAxID4+IDQpICYgMHhmOwotCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOwotCQlkYjFbMV0gPSBkYjFbMl0gPSBkYjFbM10gPQotCQkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8wMSA+PiA0KSAmIDB4Zik7Ci0JCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7Ci0JCWRiMlsxXSA9IGRiMlsyXSA9IGRiMlszXSA9Ci0JCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzAxID4+IDQpICYgMHhmKTsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQkJb2JbaV0gPSBwTW9kYWwtPm9iXzAxOwotCQkJZGIxW2ldID0gcE1vZGFsLT5kYjFfMDE7Ci0JCQlkYjJbaV0gPSBwTW9kYWwtPmRiMV8wMTsKLQkJfQotCX0KLQotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8wLCBBUjkyODVfQU5fUkYyRzNfT0JfMF9TLCBvYlswXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzEsIEFSOTI4NV9BTl9SRjJHM19PQl8xX1MsIG9iWzFdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfMiwgQVI5Mjg1X0FOX1JGMkczX09CXzJfUywgb2JbMl0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8zLCBBUjkyODVfQU5fUkYyRzNfT0JfM19TLCBvYlszXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzQsIEFSOTI4NV9BTl9SRjJHM19PQl80X1MsIG9iWzRdKTsKLQotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMCwgQVI5Mjg1X0FOX1JGMkczX0RCMV8wX1MsIGRiMVswXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8xLCBBUjkyODVfQU5fUkYyRzNfREIxXzFfUywgZGIxWzFdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfREIxXzIsIEFSOTI4NV9BTl9SRjJHM19EQjFfMl9TLCBkYjFbMl0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjFfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMV8zX1MsIGRiMVszXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMV80LCBBUjkyODVfQU5fUkYyRzRfREIxXzRfUywgZGIxWzRdKTsKLQotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMCwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8wX1MsIGRiMlswXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8xLCBBUjkyODVfQU5fUkYyRzRfREIyXzFfUywgZGIyWzFdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzIsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMl9TLCBkYjJbMl0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMl8zX1MsIGRiMlszXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl80LCBBUjkyODVfQU5fUkYyRzRfREIyXzRfUywgZGIyWzRdKTsKLQotCi0JaWYgKEFSX1NSRVZfOTI4NV8xMShhaCkpCi0JCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDQsIEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAotCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKLQotCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCi0JCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpIHwKLQkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikgfAotCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pICB8Ci0JCSAgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAotCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKLQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfUEFfT04sCi0JCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOwotCX0KLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJCQkJQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAotCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCi0JCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCAoKmF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW10pKHN0cnVjdCBhdGhfaGFsICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqKSA9IHsKLQlhdGg5a19od19lZXByb21fc2V0X2RlZl9ib2FyZF92YWx1ZXMsCi0JYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMKLX07Ci0KLWJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXNbYWhwLT5haF9lZXBfbWFwXShhaCwgY2hhbik7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X2RlZl9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQotCQkmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCi0Jc3dpdGNoIChpbmRleCkgewotCWNhc2UgMDoKLQkJKmNvbmZpZyA9IHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKLQkJcmV0dXJuIDA7CisJc3dpdGNoKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKIAljYXNlIDE6Ci0JCWlmIChwQmFzZS0+dmVyc2lvbiA+PSAweDBFMEQpIHsKLQkJCWlmIChwTW9kYWwtPnVzZUFudDEpIHsKLQkJCQkqY29uZmlnID0KLQkJCQkoKHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjAwMDApID4+IDE2KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQorCQlicmVhazsKKwljYXNlIDI6CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCArPSBJTkNSRUFTRV9NQVhQT1dfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCArPSBJTkNSRUFTRV9NQVhQT1dfQllfVEhSRUVfQ0hBSU47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJJbnZhbGlkIGNoYWlubWFzayBjb25maWd1cmF0aW9uXG4iKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0XzRrX2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICB1OCBpbmRleCwgdTE2ICpjb25maWcpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQotCXN3aXRjaCAoaW5kZXgpIHsKLQljYXNlIDA6Ci0JCSpjb25maWcgPSBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50ICgqYXRoOWtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZ1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICosCi0JCQkJCSAgICAgdTgsIHUxNiAqKSA9IHsKLQlhdGg5a19od19nZXRfZGVmX2VlcHJvbV9hbnRlbm5hX2NmZywKLQlhdGg5a19od19nZXRfNGtfZWVwcm9tX2FudGVubmFfY2ZnCi19OwotCi1pbnQgYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICB1OCBpbmRleCwgdTE2ICpjb25maWcpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCXJldHVybiBhdGg5a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4sCi0JCQkJCQkJICAgICBpbmRleCwgY29uZmlnKTsKLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2dldF80a19udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2dldF9kZWZfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHU4IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CiAJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CiAJCSYoZWVwLT5tb2RhbEhlYWRlcltBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPT0gZnJlcV9iYW5kXSk7CiAJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwpAQCAtMjY0NSwxODAgKzI3MzksNzUgQEAKIAlyZXR1cm4gbnVtX2FudF9jb25maWc7CiB9CiAKLXN0YXRpYyB1OCAoKmF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kKSA9IHsKLQlhdGg5a19od19nZXRfZGVmX251bV9hbnRfY29uZmlnLAotCWF0aDlrX2h3X2dldF80a19udW1fYW50X2NvbmZpZwotfTsKLQotdTggYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3N0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7CiAKLQlyZXR1cm4gYXRoOWtfZ2V0X251bV9hbnRfY29uZmlnW2FocC0+YWhfZWVwX21hcF0oYWgsIGZyZXFfYmFuZCk7CisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKIH0KIAotdTE2IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQorc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQogewotI2RlZmluZSBFRVBfTUFQNEtfU1BVUkNIQU4gXAotCShhaHAtPmFoX2VlcHJvbS5tYXA0ay5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCiAjZGVmaW5lIEVFUF9ERUZfU1BVUkNIQU4gXAotCShhaHAtPmFoX2VlcHJvbS5kZWYubW9kYWxIZWFkZXJbaXMyR0h6XS5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwkoYWgtPmVlcHJvbS5kZWYubW9kYWxIZWFkZXJbaXMyR0h6XS5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCisKIAl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKLQkJaSwgaXMyR0h6LCBhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKIAotCXN3aXRjaCAoYWgtPmFoX2NvbmZpZy5zcHVybW9kZSkgeworCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgewogCWNhc2UgU1BVUl9ESVNBQkxFOgogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgotCQlzcHVyX3ZhbCA9IGFoLT5haF9jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CisJCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOwogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKLQkJaWYgKGFocC0+YWhfZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKLQkJCXNwdXJfdmFsID0gRUVQX01BUDRLX1NQVVJDSEFOOwotCQllbHNlCi0JCQlzcHVyX3ZhbCA9IEVFUF9ERUZfU1BVUkNIQU47CisJCXNwdXJfdmFsID0gRUVQX0RFRl9TUFVSQ0hBTjsKIAkJYnJlYWs7Ci0KIAl9CiAKIAlyZXR1cm4gc3B1cl92YWw7CisKICN1bmRlZiBFRVBfREVGX1NQVVJDSEFOCi0jdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfZ2V0X2VlcHJvbV80ayhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMCk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDEpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOwotCWNhc2UgQVJfRUVQUk9NX01BQygyKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKLQljYXNlIEVFUF9SRUdfMDoKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07Ci0JY2FzZSBFRVBfUkVHXzE6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOwotCWNhc2UgRUVQX09QX0NBUDoKLQkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7Ci0JY2FzZSBFRVBfT1BfTU9ERToKLQkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOwotCWNhc2UgRUVQX1JGX1NJTEVOVDoKLQkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKLQljYXNlIEVFUF9PQl8yOgotCQlyZXR1cm4gcE1vZGFsLT5vYl8wMTsKLQljYXNlIEVFUF9EQl8yOgotCQlyZXR1cm4gcE1vZGFsLT5kYjFfMDE7Ci0JY2FzZSBFRVBfTUlOT1JfUkVWOgotCQlyZXR1cm4gcEJhc2UtPnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLOwotCWNhc2UgRUVQX1RYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+dHhNYXNrOwotCWNhc2UgRUVQX1JYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+cnhNYXNrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHUzMiBhdGg5a19od19nZXRfZWVwcm9tX2RlZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9IGVlcC0+bW9kYWxIZWFkZXI7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCi0Jc3dpdGNoIChwYXJhbSkgewotCWNhc2UgRUVQX05GVEhSRVNIXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0ubm9pc2VGbG9vclRocmVzaENoWzBdOwotCWNhc2UgRUVQX05GVEhSRVNIXzI6Ci0JCXJldHVybiBwTW9kYWxbMV0ubm9pc2VGbG9vclRocmVzaENoWzBdOwotCWNhc2UgQVJfRUVQUk9NX01BQygwKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMSk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107Ci0JY2FzZSBBUl9FRVBST01fTUFDKDIpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOwotCWNhc2UgRUVQX1JFR18wOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKLQljYXNlIEVFUF9SRUdfMToKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07Ci0JY2FzZSBFRVBfT1BfQ0FQOgotCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKLQljYXNlIEVFUF9PUF9NT0RFOgotCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7Ci0JY2FzZSBFRVBfUkZfU0lMRU5UOgotCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OwotCWNhc2UgRUVQX09CXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0ub2I7Ci0JY2FzZSBFRVBfREJfNToKLQkJcmV0dXJuIHBNb2RhbFswXS5kYjsKLQljYXNlIEVFUF9PQl8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm9iOwotCWNhc2UgRUVQX0RCXzI6Ci0JCXJldHVybiBwTW9kYWxbMV0uZGI7Ci0JY2FzZSBFRVBfTUlOT1JfUkVWOgotCQlyZXR1cm4gcEJhc2UtPnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLOwotCWNhc2UgRUVQX1RYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+dHhNYXNrOwotCWNhc2UgRUVQX1JYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+cnhNYXNrOwotCWNhc2UgRUVQX1JYR0FJTl9UWVBFOgotCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7Ci0JY2FzZSBFRVBfVFhHQUlOX1RZUEU6Ci0JCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHUzMiAoKmF0aDlrX2dldF9lZXByb21bXSkoc3RydWN0IGF0aF9oYWwgKiwgZW51bSBlZXByb21fcGFyYW0pID0gewotCWF0aDlrX2h3X2dldF9lZXByb21fZGVmLAotCWF0aDlrX2h3X2dldF9lZXByb21fNGsKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfZGVmX29wcyA9IHsKKwkuY2hlY2tfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcsCisJLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfZGVmX3NldF9hZGRhYywKKwkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwKIH07CiAKLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbVthaHAtPmFoX2VlcF9tYXBdKGFoLCBwYXJhbSk7Ci19Ci0KLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBzdGF0dXM7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlhdGg5a19od19mbGFzaF9tYXAoYWgpOworCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCWFoLT5lZXBfbWFwID0gRUVQX01BUF80S0JJVFM7CisJCWFoLT5lZXBfb3BzID0gJmVlcF80a19vcHM7CisJfSBlbHNlIHsKKwkJYWgtPmVlcF9tYXAgPSBFRVBfTUFQX0RFRkFVTFQ7CisJCWFoLT5lZXBfb3BzID0gJmVlcF9kZWZfb3BzOworCX0KIAotCWlmIChBUl9TUkVWXzkyODUoYWgpKQotCQlhaHAtPmFoX2VlcF9tYXAgPSBFRVBfTUFQXzRLQklUUzsKLQllbHNlCi0JCWFocC0+YWhfZWVwX21hcCA9IEVFUF9NQVBfREVGQVVMVDsKLQotCWlmICghYXRoOWtfaHdfZmlsbF9lZXByb20oYWgpKQorCWlmICghYWgtPmVlcF9vcHMtPmZpbGxfZWVwcm9tKGFoKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlzdGF0dXMgPSBhdGg5a19od19jaGVja19lZXByb20oYWgpOworCXN0YXR1cyA9IGFoLT5lZXBfb3BzLT5jaGVja19lZXByb20oYWgpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViNjhjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBFRVBST01fSAorI2RlZmluZSBFRVBST01fSAorCisjZGVmaW5lIEFIX1VTRV9FRVBST00gICAweDEKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBBUjU0MTZfRUVQUk9NX01BR0lDIDB4NWFhNQorI2Vsc2UKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweGE1NWEKKyNlbmRpZgorCisjZGVmaW5lIENUUllfREVCVUcgICAweDFmZgorI2RlZmluZQlDVFJZX0RFRkFVTFQgMAorCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQ09NUFJFU1NfRElTICAgMHgwMDAxCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQUVTX0RJUyAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfRkFTVEZSQU1FX0RJUyAgMHgwMDA0CisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQlVSU1RfRElTICAgICAgMHgwMDA4CisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVICAgICAgICAgMHgwMUYwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVX1MgICAgICAgNAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0hFQVZZX0NMSVBfRU4gIDB4MDIwMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVMgICAgIDB4RjAwMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVNfUyAgIDEyCisKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0ZDQ19NSURCQU5EICAgMHgwMDQwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOICAgIDB4MDA4MAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTIgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQgICAgMHgwMjAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PREQgICAgIDB4MDQwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSAgICAweDA4MDAKKworI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REX1BSRTRfMCAgMHg0MDAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBX1BSRTRfMCAweDgwMDAKKworI2RlZmluZSBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCAgMHgwCisjZGVmaW5lIEFSNTQxNl9FRVBST01fUyAgICAgICAgICAgICAyCisjZGVmaW5lIEFSNTQxNl9FRVBST01fT0ZGU0VUICAgICAgICAweDIwMDAKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQVggICAgICAgICAgIDB4YWUwCisKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9TVEFSVF9BRERSIFwKKwkoQVJfU1JFVl85MTAwKGFoKSkgPyAweDFmZmYxMDAwIDogMHg1MDNmMTIwMAorCisjZGVmaW5lIFNEX05PX0NUTCAgICAgICAgICAgICAgIDB4RTAKKyNkZWZpbmUgTk9fQ1RMICAgICAgICAgICAgICAgICAgMHhmZgorI2RlZmluZSBDVExfTU9ERV9NICAgICAgICAgICAgICA3CisjZGVmaW5lIENUTF8xMUEgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1RMXzExQiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDVExfMTFHICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENUTF8yR0hUMjAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1RMXzVHSFQyMCAgICAgICAgICAgICAgNgorI2RlZmluZSBDVExfMkdIVDQwICAgICAgICAgICAgICA3CisjZGVmaW5lIENUTF81R0hUNDAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBFWFRfQURESVRJVkUgKDB4ODAwMCkKKyNkZWZpbmUgQ1RMXzExQV9FWFQgKENUTF8xMUEgfCBFWFRfQURESVRJVkUpCisjZGVmaW5lIENUTF8xMUdfRVhUIChDVExfMTFHIHwgRVhUX0FERElUSVZFKQorI2RlZmluZSBDVExfMTFCX0VYVCAoQ1RMXzExQiB8IEVYVF9BRERJVElWRSkKKworI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MCAyCisjZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwIDMKKworI2RlZmluZSBJTkNSRUFTRV9NQVhQT1dfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCisjZGVmaW5lIElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTiAgIDEwIC8qIDEwKmxvZzEwKDMpKjIgKi8KKworLyoKKyAqIEZvciBBUjkyODUgYW5kIGxhdGVyIGNoaXBzZXRzLCB0aGUgZm9sbG93aW5nIGJpdHMgYXJlIG5vdCBiZWluZyBwcm9ncmFtbWVkCisgKiBpbiBFRVBST00gYW5kIHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBhbHdheXMuCisgKgorICogQml0IDA6IGVuX2ZjY19taWQKKyAqIEJpdCAxOiBlbl9qYXBfbWlkCisgKiBCaXQgMjogZW5fZmNjX2Rmc19odDQwCisgKiBCaXQgMzogZW5famFwX2h0NDAKKyAqIEJpdCA0OiBlbl9qYXBfZGZzX2h0NDAKKyAqLworI2RlZmluZSBBUjkyODVfUkRFWFRfREVGQVVMVCAgICAweDFGCisKKyNkZWZpbmUgQVJfRUVQUk9NX01BQyhpKQkoMHgxZCsoaSkpCisjZGVmaW5lIEFUSDlLX1BPV19TTShfciwgX3MpCSgoKF9yKSAmIDB4M2YpIDw8IChfcykpCisjZGVmaW5lIEZSRVEyRkJJTih4LCB5KQkJKCh5KSA/ICgoeCkgLSAyMzAwKSA6ICgoKHgpIC0gNDgwMCkgLyA1KSkKKyNkZWZpbmUgYXRoOWtfaHdfdXNlX2ZsYXNoKF9haCkJKCEoX2FoLT5haF9mbGFncyAmIEFIX1VTRV9FRVBST00pKQorCisjZGVmaW5lIEFSNTQxNl9WRVJfTUFTSyAoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKQorI2RlZmluZSBPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCisKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQorCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEICAgICAgICAweDAwMDEKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX0VOQUJMRURfUyAgICAgIDAKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZICAgICAgIDB4MDAwMgorI2RlZmluZSBFRVBfUkZTSUxFTlRfUE9MQVJJVFlfUyAgICAgMQorI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUwgICAgICAgMHgwMDFjCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9HUElPX1NFTF9TICAgICAyCisKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4CisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKKworI2RlZmluZSBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSICAgICAgIDB4MQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUiAgICAgICAgICAgICAgIDB4RQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLICAgIDB4MEZGRgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yICAgICAgIDB4MgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zICAgICAgIDB4MworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl83ICAgICAgIDB4NworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl85ICAgICAgIDB4OQorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNiAgICAgIDB4MTAKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcgICAgICAweDExCisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5ICAgICAgMHgxMworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCAgICAgIDB4MTQKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIgICAgICAweDE2CisKKyNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKKyNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKKyNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0CisjZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1CisjZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQorI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCisjZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4CisjZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0CisjZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMworI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01CisKKy8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCisjZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQorI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKKworLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKKyNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCisKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSUyAgICAgICAgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUyAzCisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUyAgMworI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9DVExTICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMgICAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUyAgICAgICAgICAgICAyCisjZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlMgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAyMgorCitlbnVtIGVlcHJvbV9wYXJhbSB7CisJRUVQX05GVEhSRVNIXzUsCisJRUVQX05GVEhSRVNIXzIsCisJRUVQX01BQ19NU1csCisJRUVQX01BQ19NSUQsCisJRUVQX01BQ19MU1csCisJRUVQX1JFR18wLAorCUVFUF9SRUdfMSwKKwlFRVBfT1BfQ0FQLAorCUVFUF9PUF9NT0RFLAorCUVFUF9SRl9TSUxFTlQsCisJRUVQX09CXzUsCisJRUVQX0RCXzUsCisJRUVQX09CXzIsCisJRUVQX0RCXzIsCisJRUVQX01JTk9SX1JFViwKKwlFRVBfVFhfTUFTSywKKwlFRVBfUlhfTUFTSywKKwlFRVBfUlhHQUlOX1RZUEUsCisJRUVQX1RYR0FJTl9UWVBFLAorCUVFUF9PTF9QV1JDVFJMLAorCUVFUF9SQ19DSEFJTl9NQVNLLAorCUVFUF9EQUNfSFBXUl81RywKKwlFRVBfRlJBQ19OXzVHCit9OworCitlbnVtIGFyNTQxNl9yYXRlcyB7CisJcmF0ZTZtYiwgcmF0ZTltYiwgcmF0ZTEybWIsIHJhdGUxOG1iLAorCXJhdGUyNG1iLCByYXRlMzZtYiwgcmF0ZTQ4bWIsIHJhdGU1NG1iLAorCXJhdGUxbCwgcmF0ZTJsLCByYXRlMnMsIHJhdGU1XzVsLAorCXJhdGU1XzVzLCByYXRlMTFsLCByYXRlMTFzLCByYXRlWHIsCisJcmF0ZUh0MjBfMCwgcmF0ZUh0MjBfMSwgcmF0ZUh0MjBfMiwgcmF0ZUh0MjBfMywKKwlyYXRlSHQyMF80LCByYXRlSHQyMF81LCByYXRlSHQyMF82LCByYXRlSHQyMF83LAorCXJhdGVIdDQwXzAsIHJhdGVIdDQwXzEsIHJhdGVIdDQwXzIsIHJhdGVIdDQwXzMsCisJcmF0ZUh0NDBfNCwgcmF0ZUh0NDBfNSwgcmF0ZUh0NDBfNiwgcmF0ZUh0NDBfNywKKwlyYXRlRHVwQ2NrLCByYXRlRHVwT2ZkbSwgcmF0ZUV4dENjaywgcmF0ZUV4dE9mZG0sCisJQXI1NDE2UmF0ZVNpemUKK307CisKK2VudW0gYXRoOWtfaGFsX2ZyZXFfYmFuZCB7CisJQVRIOUtfSEFMX0ZSRVFfQkFORF81R0haID0gMCwKKwlBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPSAxCit9OworCitzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyIHsKKwl1MTYgbGVuZ3RoOworCXUxNiBjaGVja3N1bTsKKwl1MTYgdmVyc2lvbjsKKwl1OCBvcENhcEZsYWdzOworCXU4IGVlcE1pc2M7CisJdTE2IHJlZ0RtblsyXTsKKwl1OCBtYWNBZGRyWzZdOworCXU4IHJ4TWFzazsKKwl1OCB0eE1hc2s7CisJdTE2IHJmU2lsZW50OworCXUxNiBibHVlVG9vdGhPcHRpb25zOworCXUxNiBkZXZpY2VDYXA7CisJdTMyIGJpbkJ1aWxkTnVtYmVyOworCXU4IGRldmljZVR5cGU7CisJdTggcHdkY2xraW5kOworCXU4IGZ1dHVyZUJhc2VfMVsyXTsKKwl1OCByeEdhaW5UeXBlOworCXU4IGRhY0hpUHdyTW9kZV81RzsKKwl1OCBvcGVuTG9vcFB3ckNudGw7CisJdTggZGFjTHBNb2RlOworCXU4IHR4R2FpblR5cGU7CisJdTggcmNDaGFpbk1hc2s7CisJdTggZGVzaXJlZFNjYWxlQ0NLOworCXU4IHBvd2VyX3RhYmxlX29mZnNldDsKKwl1OCBmcmFjX25fNWc7CisJdTggZnV0dXJlQmFzZV8zWzIxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgeworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCXUxNiB2ZXJzaW9uOworCXU4IG9wQ2FwRmxhZ3M7CisJdTggZWVwTWlzYzsKKwl1MTYgcmVnRG1uWzJdOworCXU4IG1hY0FkZHJbNl07CisJdTggcnhNYXNrOworCXU4IHR4TWFzazsKKwl1MTYgcmZTaWxlbnQ7CisJdTE2IGJsdWVUb290aE9wdGlvbnM7CisJdTE2IGRldmljZUNhcDsKKwl1MzIgYmluQnVpbGROdW1iZXI7CisJdTggZGV2aWNlVHlwZTsKKwl1OCB0eEdhaW5UeXBlOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3Qgc3B1cl9jaGFuIHsKKwl1MTYgc3B1ckNoYW47CisJdTggc3B1clJhbmdlTG93OworCXU4IHNwdXJSYW5nZUhpZ2g7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7CisJdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTMyIGFudEN0cmxDb21tb247CisJdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggc3dpdGNoU2V0dGxpbmc7CisJdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggYWRjRGVzaXJlZFNpemU7CisJdTggcGdhRGVzaXJlZFNpemU7CisJdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggdHhFbmRUb1hwYU9mZjsKKwl1OCB0eEVuZFRvUnhPbjsKKwl1OCB0eEZyYW1lVG9YcGFPbjsKKwl1OCB0aHJlc2g2MjsKKwl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhwZEdhaW47CisJdTggeHBkOworCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggcGRHYWluT3ZlcmxhcDsKKwl1OCBvYjsKKwl1OCBkYjsKKwl1OCB4cGFCaWFzTHZsOworCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOworCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IG9iX2NoMTsKKwl1OCBkYl9jaDE7CisJdTggdXNlQW50MToxLAorCSAgICBmb3JjZV94cGFvbjoxLAorCSAgICBsb2NhbF9iaWFzOjEsCisJICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOworCXU4IG1pc2NCaXRzOworCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKKwl1OCBmdXR1cmVNb2RhbFs2XTsKKworCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wIHsKKwl1OCBwd3JQZGdbMl1bNV07CisJdTggdnBkUGRnWzJdWzVdOworCXU4IHBjZGFjWzJdWzVdOworCXU4IGVtcHR5WzJdWzVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgeworCXUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1MzIgIGFudEN0cmxDb21tb247CisJdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHN3aXRjaFNldHRsaW5nOworCXU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGFkY0Rlc2lyZWRTaXplOworCXU4ICAgcGdhRGVzaXJlZFNpemU7CisJdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHR4RW5kVG9YcGFPZmY7CisJdTggICB0eEVuZFRvUnhPbjsKKwl1OCAgIHR4RnJhbWVUb1hwYU9uOworCXU4ICAgdGhyZXNoNjI7CisJdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgeHBkR2FpbjsKKwl1OCAgIHhwZDsKKwl1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHBkR2Fpbk92ZXJsYXA7CisJdTggICBvYl8wMTsKKwl1OCAgIGRiMV8wMTsKKwl1OCAgIHhwYUJpYXNMdmw7CisJdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTggICB0eEZyYW1lVG9QYU9uOworCXU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgc3dTZXR0bGVIdDQwOworCXU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgZGIyXzAxOworCXU4ICAgdmVyc2lvbjsKKwl1MTYgIG9iXzIzNDsKKwl1MTYgIGRiMV8yMzQ7CisJdTE2ICBkYjJfMjM0OworCXU4ICAgZnV0dXJlTW9kYWxbNF07CisKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKKwl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7CisJdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107CisJdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgeworCXU4IGJDaGFubmVsOworCXU4IHRQb3cyeFs0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCB0UG93MnhbOF07Cit9IF9fcGFja2VkOworCisKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKK3N0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCBmbGFnOjIsIHRQb3dlcjo2OworfSBfX3BhY2tlZDsKKyNlbHNlCitzdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7CisJdTggYkNoYW5uZWw7CisJdTggdFBvd2VyOjYsIGZsYWc6MjsKK30gX19wYWNrZWQ7CisjZW5kaWYKKworc3RydWN0IGNhbF9jdGxfZGF0YSB7CisJc3RydWN0IGNhbF9jdGxfZWRnZXMKKwljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfY3RsX2RhdGFfNGsgeworCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCisJY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgeworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKKwl1OCBjdXN0RGF0YVs2NF07CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07CisJdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107CisJdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCisJIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKKwkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKKwkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKKwl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOworCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOworCXU4IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOworCXU4IGN1c3REYXRhWzIwXTsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKKwl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKKwljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwl1OCBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworZW51bSByZWdfZXh0X2JpdG1hcCB7CisJUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKKwlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCisJUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCisJUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKK307CisKK3N0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKKwl1MTYgY291bnRyeUNvZGU7CisJdTE2IHJlZ0RtbkVudW07CisJdTE2IHJlZ0RtbjVHOworCXUxNiByZWdEbW4yRzsKKwl1OCBpc011bHRpZG9tYWluOworCXU4IGlzb1szXTsKK307CisKK2VudW0gYXRoOWtfZWVwX21hcCB7CisJRUVQX01BUF9ERUZBVUxUID0gMHgwLAorCUVFUF9NQVBfNEtCSVRTLAorCUVFUF9NQVBfTUFYCit9OworCitzdHJ1Y3QgZWVwcm9tX29wcyB7CisJaW50ICgqY2hlY2tfZWVwcm9tKShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTMyICgqZ2V0X2VlcHJvbSkoc3RydWN0IGF0aF9odyAqaHcsIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKKwlib29sICgqZmlsbF9lZXByb20pKHN0cnVjdCBhdGhfaHcgKmh3KTsKKwlpbnQgKCpnZXRfZWVwcm9tX3Zlcikoc3RydWN0IGF0aF9odyAqaHcpOworCWludCAoKmdldF9lZXByb21fcmV2KShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTggKCpnZXRfbnVtX2FudF9jb25maWcpKHN0cnVjdCBhdGhfaHcgKmh3LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworCXUxNiAoKmdldF9lZXByb21fYW50ZW5uYV9jZmcpKHN0cnVjdCBhdGhfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqc2V0X2JvYXJkX3ZhbHVlcykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqc2V0X2FkZGFjKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworCWludCAoKnNldF90eHBvd2VyKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICB1MTYgY2ZnQ3RsLCB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwgdTggcG93ZXJMaW1pdCk7CisJdTE2ICgqZ2V0X3NwdXJfY2hhbm5lbCkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeik7Cit9OworCisjZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykJCQlcCisJKCgoX3R4Y2hhaW5tYXNrID4+IDIpICYgMSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICgoX3R4Y2hhaW5tYXNrID4+IDEpICYgMSkgKyAoX3R4Y2hhaW5tYXNrICYgMSkpCisKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKKworI2VuZGlmIC8qIEVFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYwppbmRleCAzNDQ3NGVkLi5iMTVlYWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNyw4OCArMTcsODAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAjaW5jbHVkZSAiaW5pdHZhbHMuaCIKIAotc3RhdGljIGNvbnN0IHU4IENMT0NLX1JBVEVbXSA9IHsgNDAsIDgwLCAyMiwgNDQsIDg4LCA0MCB9Oworc3RhdGljIGludCBidGNvZXhfZW5hYmxlOworbW9kdWxlX3BhcmFtKGJ0Y29leF9lbmFibGUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhidGNvZXhfZW5hYmxlLCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0Iik7CiAKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGlxX2NhbF9tdWx0aV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfc2luZ2xlX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19nYWluX2NhbF9tdWx0aV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfc2luZ2xlX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfbXVsdGlfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2RjX2NhbF9zaW5nbGVfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2luaXRfZGNfY2FsOworI2RlZmluZSBBVEg5S19DTE9DS19SQVRFX0NDSwkJMjIKKyNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE0JNDAKKyNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE0JNDQKIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0eXBlKTsKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcmVnKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdHlwZSk7CitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICBlbnVtIGF0aDlrX2h0X21hY21vZGUgbWFjbW9kZSk7Ci1zdGF0aWMgdTMyIGF0aDlrX2h3X2luaV9maXh1cChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdTMyIGF0aDlrX2h3X2luaV9maXh1cChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEsCiAJCQkgICAgICB1MzIgcmVnLCB1MzIgdmFsdWUpOwotc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwogCiAvKioqKioqKioqKioqKioqKioqKiovCiAvKiBIZWxwZXIgRnVuY3Rpb25zICovCiAvKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3VzZWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2xrcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3VzZWMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBjbGtzKQogewotCWlmIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKQotCQlyZXR1cm4gY2xrcyAvIENMT0NLX1JBVEVbYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwgYWgtPmFoX2N1cmNoYW4pXTsKLQllbHNlCi0JCXJldHVybiBjbGtzIC8gQ0xPQ0tfUkFURVtBVEg5S19NT0RFXzExQl07CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisKKwlpZiAoIWFoLT5jdXJjaGFuKSAvKiBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBDQ0sgaW5zdGVhZCAqLworCQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfQ0NLOworCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07CisKKwlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b191c2VjKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGNsa3MpCitzdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCi0JaWYgKGNoYW4gJiYgSVNfQ0hBTl9IVDQwKGNoYW4pKQorCWlmIChjb25mX2lzX2h0NDAoY29uZikpCiAJCXJldHVybiBhdGg5a19od19tYWNfdXNlYyhhaCwgY2xrcykgLyAyOwogCWVsc2UKIAkJcmV0dXJuIGF0aDlrX2h3X21hY191c2VjKGFoLCBjbGtzKTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfY2xrcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1c2VjcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX2Nsa3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1c2VjcykKIHsKLQlpZiAoYWgtPmFoX2N1cmNoYW4gIT0gTlVMTCkKLQkJcmV0dXJuIHVzZWNzICogQ0xPQ0tfUkFURVthdGg5a19od19jaGFuMndtb2RlKGFoLAotCQkJYWgtPmFoX2N1cmNoYW4pXTsKLQllbHNlCi0JCXJldHVybiB1c2VjcyAqIENMT0NLX1JBVEVbQVRIOUtfTU9ERV8xMUJdOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOworCisJaWYgKCFhaC0+Y3VyY2hhbikgLyogc2hvdWxkIHJlYWxseSBjaGVjayBmb3IgQ0NLIGluc3RlYWQgKi8KKwkJcmV0dXJuIHVzZWNzICpBVEg5S19DTE9DS19SQVRFX0NDSzsKKwlpZiAoY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyZXR1cm4gdXNlY3MgKkFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNOworCXJldHVybiB1c2VjcyAqQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE07CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX2Nsa3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXNlY3MpCitzdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b19jbGtzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXNlY3MpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKIAotCWlmIChjaGFuICYmIElTX0NIQU5fSFQ0MChjaGFuKSkKKwlpZiAoY29uZl9pc19odDQwKGNvbmYpKQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX2Nsa3MoYWgsIHVzZWNzKSAqIDI7CiAJZWxzZQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX2Nsa3MoYWgsIHVzZWNzKTsKIH0KIAotZW51bSB3aXJlbGVzc19tb2RlIGF0aDlrX2h3X2NoYW4yd21vZGUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmIChJU19DSEFOX0IoY2hhbikpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQjsKLQlpZiAoSVNfQ0hBTl9HKGNoYW4pKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMUc7Ci0KLQlyZXR1cm4gQVRIOUtfTU9ERV8xMUE7Ci19Ci0KLWJvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQorYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCwgdTMyIHRpbWVvdXQpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKEFIX1RJTUVPVVQgLyBBSF9USU1FX1FVQU5UVU0pOyBpKyspIHsKKwlCVUdfT04odGltZW91dCA8IEFIX1RJTUVfUVVBTlRVTSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHRpbWVvdXQgLyBBSF9USU1FX1FVQU5UVU0pOyBpKyspIHsKIAkJaWYgKChSRUdfUkVBRChhaCwgcmVnKSAmIG1hc2spID09IHZhbCkKIAkJCXJldHVybiB0cnVlOwogCkBAIC0xMDYsOCArOTgsOCBAQAogCX0KIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKLQkJInRpbWVvdXQgb24gcmVnIDB4JXg6IDB4JTA4eCAmIDB4JTA4eCAhPSAweCUwOHhcbiIsCi0JCXJlZywgUkVHX1JFQUQoYWgsIHJlZyksIG1hc2ssIHZhbCk7CisJCSJ0aW1lb3V0ICglZCB1cykgb24gcmVnIDB4JXg6IDB4JTA4eCAmIDB4JTA4eCAhPSAweCUwOHhcbiIsCisJCXRpbWVvdXQsIHJlZywgUkVHX1JFQUQoYWgsIHJlZyksIG1hc2ssIHZhbCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjQsMTEgKzExNiwxMSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgdTE2IGZsYWdzLCB1MTYgKmxvdywKIAkJCSAgICAgdTE2ICpoaWdoKQogewotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCWlmIChmbGFncyAmIENIQU5ORUxfNUdIWikgewogCQkqbG93ID0gcENhcC0+bG93XzVnaHpfY2hhbjsKQEAgLTE0Myw3ICsxMzUsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLAordTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVzLAogCQkJICAgdTMyIGZyYW1lTGVuLCB1MTYgcmF0ZWl4LAogCQkJICAgYm9vbCBzaG9ydFByZWFtYmxlKQpAQCAtMTY1LDE1ICsxNTcsMTUgQEAKIAkJdHhUaW1lID0gQ0NLX1NJRlNfVElNRSArIHBoeVRpbWUgKyAoKG51bUJpdHMgKiAxMDAwKSAvIGticHMpOwogCQlicmVhazsKIAljYXNlIFdMQU5fUkNfUEhZX09GRE06Ci0JCWlmIChhaC0+YWhfY3VyY2hhbiAmJiBJU19DSEFOX1FVQVJURVJfUkFURShhaC0+YWhfY3VyY2hhbikpIHsKKwkJaWYgKGFoLT5jdXJjaGFuICYmIElTX0NIQU5fUVVBUlRFUl9SQVRFKGFoLT5jdXJjaGFuKSkgewogCQkJYml0c1BlclN5bWJvbCA9CShrYnBzICogT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSKSAvIDEwMDA7CiAJCQludW1CaXRzID0gT0ZETV9QTENQX0JJVFMgKyAoZnJhbWVMZW4gPDwgMyk7CiAJCQludW1TeW1ib2xzID0gRElWX1JPVU5EX1VQKG51bUJpdHMsIGJpdHNQZXJTeW1ib2wpOwogCQkJdHhUaW1lID0gT0ZETV9TSUZTX1RJTUVfUVVBUlRFUgogCQkJCSsgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIKIAkJCQkrIChudW1TeW1ib2xzICogT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSKTsKLQkJfSBlbHNlIGlmIChhaC0+YWhfY3VyY2hhbiAmJgotCQkJICAgSVNfQ0hBTl9IQUxGX1JBVEUoYWgtPmFoX2N1cmNoYW4pKSB7CisJCX0gZWxzZSBpZiAoYWgtPmN1cmNoYW4gJiYKKwkJCSAgIElTX0NIQU5fSEFMRl9SQVRFKGFoLT5jdXJjaGFuKSkgewogCQkJYml0c1BlclN5bWJvbCA9CShrYnBzICogT0ZETV9TWU1CT0xfVElNRV9IQUxGKSAvIDEwMDA7CiAJCQludW1CaXRzID0gT0ZETV9QTENQX0JJVFMgKyAoZnJhbWVMZW4gPDwgMyk7CiAJCQludW1TeW1ib2xzID0gRElWX1JPVU5EX1VQKG51bUJpdHMsIGJpdHNQZXJTeW1ib2wpOwpAQCAtMTk5LDUyICsxOTEsMTEgQEAKIAlyZXR1cm4gdHhUaW1lOwogfQogCi11MzIgYXRoOWtfaHdfbWh6MmllZWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZnJlcSwgdTMyIGZsYWdzKQotewotCWlmIChmbGFncyAmIENIQU5ORUxfMkdIWikgewotCQlpZiAoZnJlcSA9PSAyNDg0KQotCQkJcmV0dXJuIDE0OwotCQlpZiAoZnJlcSA8IDI0ODQpCi0JCQlyZXR1cm4gKGZyZXEgLSAyNDA3KSAvIDU7Ci0JCWVsc2UKLQkJCXJldHVybiAxNSArICgoZnJlcSAtIDI1MTIpIC8gMjApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBDSEFOTkVMXzVHSFopIHsKLQkJaWYgKGF0aDlrX3JlZ2RfaXNfcHVibGljX3NhZmV0eV9za3UoYWgpICYmCi0JCSAgICBJU19DSEFOX0lOX1BVQkxJQ19TQUZFVFlfQkFORChmcmVxKSkgewotCQkJcmV0dXJuICgoZnJlcSAqIDEwKSArCi0JCQkJKCgoZnJlcSAlIDUpID09IDIpID8gNSA6IDApIC0gNDk0MDApIC8gNTsKLQkJfSBlbHNlIGlmICgoZmxhZ3MgJiBDSEFOTkVMX0EpICYmIChmcmVxIDw9IDUwMDApKSB7Ci0JCQlyZXR1cm4gKGZyZXEgLSA0MDAwKSAvIDU7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKGZyZXEgLSA1MDAwKSAvIDU7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoZnJlcSA9PSAyNDg0KQotCQkJcmV0dXJuIDE0OwotCQlpZiAoZnJlcSA8IDI0ODQpCi0JCQlyZXR1cm4gKGZyZXEgLSAyNDA3KSAvIDU7Ci0JCWlmIChmcmVxIDwgNTAwMCkgewotCQkJaWYgKGF0aDlrX3JlZ2RfaXNfcHVibGljX3NhZmV0eV9za3UoYWgpCi0JCQkgICAgJiYgSVNfQ0hBTl9JTl9QVUJMSUNfU0FGRVRZX0JBTkQoZnJlcSkpIHsKLQkJCQlyZXR1cm4gKChmcmVxICogMTApICsKLQkJCQkJKCgoZnJlcSAlIDUpID09Ci0JCQkJCSAgMikgPyA1IDogMCkgLSA0OTQwMCkgLyA1OwotCQkJfSBlbHNlIGlmIChmcmVxID4gNDkwMCkgewotCQkJCXJldHVybiAoZnJlcSAtIDQwMDApIC8gNTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIDE1ICsgKChmcmVxIC0gMjUxMikgLyAyMCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChmcmVxIC0gNTAwMCkgLyA1OwotCX0KLX0KLQotdm9pZCBhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCSAgc3RydWN0IGNoYW5fY2VudGVycyAqY2VudGVycykKIHsKIAlpbnQ4X3QgZXh0b2ZmOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoIUlTX0NIQU5fSFQ0MChjaGFuKSkgewogCQljZW50ZXJzLT5jdGxfY2VudGVyID0gY2VudGVycy0+ZXh0X2NlbnRlciA9CkBAIC0yNjcsMTYgKzIxOCwxNSBAQAogCQljZW50ZXJzLT5zeW50aF9jZW50ZXIgLSAoZXh0b2ZmICogSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCk7CiAJY2VudGVycy0+ZXh0X2NlbnRlciA9CiAJCWNlbnRlcnMtPnN5bnRoX2NlbnRlciArIChleHRvZmYgKgotCQkJICgoYWhwLT5haF9leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCkgPworCQkJICgoYWgtPmV4dHByb3RzcGFjaW5nID09IEFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwKSA/CiAJCQkgIEhUNDBfQ0hBTk5FTF9DRU5URVJfU0hJRlQgOiAxNSkpOwotCiB9CiAKIC8qKioqKioqKioqKioqKioqKiovCiAvKiBDaGlwIFJldmlzaW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfcmVhZF9yZXZpc2lvbnMoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfcmVhZF9yZXZpc2lvbnMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjg0LDIxICsyMzQsMjIgQEAKIAogCWlmICh2YWwgPT0gMHhGRikgewogCQl2YWwgPSBSRUdfUkVBRChhaCwgQVJfU1JFVik7Ci0JCWFoLT5haF9tYWNWZXJzaW9uID0gKHZhbCAmIEFSX1NSRVZfVkVSU0lPTjIpID4+IEFSX1NSRVZfVFlQRTJfUzsKLQkJYWgtPmFoX21hY1JldiA9IE1TKHZhbCwgQVJfU1JFVl9SRVZJU0lPTjIpOwotCQlhaC0+YWhfaXNQY2lFeHByZXNzID0gKHZhbCAmIEFSX1NSRVZfVFlQRTJfSE9TVF9NT0RFKSA/IDAgOiAxOworCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID0KKwkJCSh2YWwgJiBBUl9TUkVWX1ZFUlNJT04yKSA+PiBBUl9TUkVWX1RZUEUyX1M7CisJCWFoLT5od192ZXJzaW9uLm1hY1JldiA9IE1TKHZhbCwgQVJfU1JFVl9SRVZJU0lPTjIpOworCQlhaC0+aXNfcGNpZXhwcmVzcyA9ICh2YWwgJiBBUl9TUkVWX1RZUEUyX0hPU1RfTU9ERSkgPyAwIDogMTsKIAl9IGVsc2UgewogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCi0JCQlhaC0+YWhfbWFjVmVyc2lvbiA9IE1TKHZhbCwgQVJfU1JFVl9WRVJTSU9OKTsKKwkJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBNUyh2YWwsIEFSX1NSRVZfVkVSU0lPTik7CiAKLQkJYWgtPmFoX21hY1JldiA9IHZhbCAmIEFSX1NSRVZfUkVWSVNJT047CisJCWFoLT5od192ZXJzaW9uLm1hY1JldiA9IHZhbCAmIEFSX1NSRVZfUkVWSVNJT047CiAKLQkJaWYgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpCi0JCQlhaC0+YWhfaXNQY2lFeHByZXNzID0gdHJ1ZTsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkKKwkJCWFoLT5pc19wY2lleHByZXNzID0gdHJ1ZTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X3JhZGlvcmV2KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X3JhZGlvcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB2YWw7CiAJaW50IGk7CkBAIC0zMTcsOSArMjY4LDkgQEAKIC8qIEhXIEF0dGFjaCwgRGV0YWNoLCBJbml0IFJvdXRpbmVzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19kaXNhYmxlcGNpZShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19kaXNhYmxlcGNpZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpCiAJCXJldHVybjsKIAogCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwpAQCAtMzM1LDcgKzI4Niw3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUzIsIDB4MDAwMDAwMDApOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Rlc3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF90ZXN0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiByZWdBZGRyWzJdID0geyBBUl9TVEFfSUQwLCBBUl9QSFlfQkFTRSArICg4IDw8IDIpIH07CiAJdTMyIHJlZ0hvbGRbMl07CkBAIC0zNzcsNiArMzI4LDcgQEAKIAkJUkVHX1dSSVRFKGFoLCByZWdBZGRyW2ldLCByZWdIb2xkW2ldKTsKIAl9CiAJdWRlbGF5KDEwMCk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg5LDYgKzM0MSw4IEBACiAJCXJldHVybiAiQXRoZXJvcyA1NDE4IjsKIAljYXNlIEFSOTE2MF9ERVZJRF9QQ0k6CiAJCXJldHVybiAiQXRoZXJvcyA5MTYwIjsKKwljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6CisJCXJldHVybiAiQXRoZXJvcyA5MTAwIjsKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6CiAJY2FzZSBBUjkyODBfREVWSURfUENJRToKIAkJcmV0dXJuICJBdGhlcm9zIDkyODAiOwpAQCAtMzk5LDk5ICszNTMsMTEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZhdWx0cyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmYXVsdHMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKLQlhaC0+YWhfY29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSA9IDI7Ci0JYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IDEwOwotCWFoLT5haF9jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOwotCWFoLT5haF9jb25maWcuYWNrXzZtYiA9IDB4MDsKLQlhaC0+YWhfY29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKLQlhaC0+YWhfY29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX2wxc2twX2VuYWJsZSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2VyX3Jlc2V0ID0gMHgxMDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Jlc3RvcmUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV93YWVuID0gMDsKLQlhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZyA9IDE7Ci0JYWgtPmFoX2NvbmZpZy5odF9lbmFibGUgPSAxOwotCWFoLT5haF9jb25maWcub2ZkbV90cmlnX2xvdyA9IDIwMDsKLQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOwotCWFoLT5haF9jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKLQlhaC0+YWhfY29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKLQlhaC0+YWhfY29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCWFoLT5haF9jb25maWcubm9pc2VfaW1tdW5pdHlfbGV2ZWwgPSA0OwotCWFoLT5haF9jb25maWcub2ZkbV93ZWFrc2lnbmFsX2RldCA9IDE7Ci0JYWgtPmFoX2NvbmZpZy5jY2tfd2Vha3NpZ25hbF90aHIgPSAwOwotCWFoLT5haF9jb25maWcuc3B1cl9pbW11bml0eV9sZXZlbCA9IDI7Ci0JYWgtPmFoX2NvbmZpZy5maXJzdGVwX2xldmVsID0gMDsKLQlhaC0+YWhfY29uZmlnLnJzc2lfdGhyX2hpZ2ggPSA0MDsKLQlhaC0+YWhfY29uZmlnLnJzc2lfdGhyX2xvdyA9IDc7Ci0JYWgtPmFoX2NvbmZpZy5kaXZlcnNpdHlfY29udHJvbCA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKKwlhaC0+Y29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSA9IDI7CisJYWgtPmNvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IDEwOworCWFoLT5jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOworCWFoLT5jb25maWcuYWNrXzZtYiA9IDB4MDsKKwlhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKKwlhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX2wxc2twX2VuYWJsZSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX3Bvd2VyX3Jlc2V0ID0gMHgxMDA7CisJYWgtPmNvbmZpZy5wY2llX3Jlc3RvcmUgPSAwOworCWFoLT5jb25maWcucGNpZV93YWVuID0gMDsKKwlhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZyA9IDE7CisJYWgtPmNvbmZpZy5odF9lbmFibGUgPSAxOworCWFoLT5jb25maWcub2ZkbV90cmlnX2xvdyA9IDIwMDsKKwlhaC0+Y29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOworCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKKwlhaC0+Y29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKKwlhaC0+Y29uZmlnLmVuYWJsZV9hbmkgPSAxOworCWFoLT5jb25maWcubm9pc2VfaW1tdW5pdHlfbGV2ZWwgPSA0OworCWFoLT5jb25maWcub2ZkbV93ZWFrc2lnbmFsX2RldCA9IDE7CisJYWgtPmNvbmZpZy5jY2tfd2Vha3NpZ25hbF90aHIgPSAwOworCWFoLT5jb25maWcuc3B1cl9pbW11bml0eV9sZXZlbCA9IDI7CisJYWgtPmNvbmZpZy5maXJzdGVwX2xldmVsID0gMDsKKwlhaC0+Y29uZmlnLnJzc2lfdGhyX2hpZ2ggPSA0MDsKKwlhaC0+Y29uZmlnLnJzc2lfdGhyX2xvdyA9IDc7CisJYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbCA9IDA7CisJYWgtPmNvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQlhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVswXSA9IEFSX05PX1NQVVI7Ci0JCWFoLT5haF9jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKKwkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMF0gPSBBUl9OT19TUFVSOworCQlhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVsxXSA9IEFSX05PX1NQVVI7CiAJfQogCi0JYWgtPmFoX2NvbmZpZy5pbnRyX21pdGlnYXRpb24gPSAxOworCWFoLT5jb25maWcuaW50cl9taXRpZ2F0aW9uID0gMTsKKworCS8qCisJICogV2UgbmVlZCB0aGlzIGZvciBQQ0kgZGV2aWNlcyBvbmx5IChDYXJkYnVzLCBQQ0ksIG1pbmlQQ0kpCisJICogX2FuZF8gaWYgb24gbm9uLXVuaXByb2Nlc3NvciBzeXN0ZW1zIChNdWx0aXByb2Nlc3Nvci9IVCkuCisJICogVGhpcyBtZWFucyB3ZSB1c2UgaXQgZm9yIGFsbCBBUjU0MTYgZGV2aWNlcywgYW5kIHRoZSBmZXcKKwkgKiBtaW5vciBQQ0kgQVI5MjgwIGRldmljZXMgb3V0IHRoZXJlLgorCSAqCisJICogU2VyaWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZXNlIGRldmljZXMgZG8gbm90IGhhbmRsZQorCSAqIHdlbGwgdGhlIGNhc2Ugb2YgdHdvIGNvbmN1cnJlbnQgcmVhZHMvd3JpdGVzIGR1ZSB0byB0aGUgbGF0ZW5jeQorCSAqIGludm9sdmVkLiBEdXJpbmcgb25lIHJlYWQvd3JpdGUgYW5vdGhlciByZWFkL3dyaXRlIGNhbiBiZSBpc3N1ZWQKKwkgKiBvbiBhbm90aGVyIENQVSB3aGlsZSB0aGUgcHJldmlvdXMgcmVhZC93cml0ZSBtYXkgc3RpbGwgYmUgd29ya2luZworCSAqIG9uIG91ciBoYXJkd2FyZSwgaWYgd2UgaGl0IHRoaXMgY2FzZSB0aGUgaGFyZHdhcmUgcG9vcHMgaW4gYSBsb29wLgorCSAqIFdlIHByZXZlbnQgdGhpcyBieSBzZXJpYWxpemluZyByZWFkcyBhbmQgd3JpdGVzLgorCSAqCisJICogVGhpcyBpc3N1ZSBpcyBub3QgcHJlc2VudCBvbiBQQ0ktRXhwcmVzcyBkZXZpY2VzIG9yIHByZS1BUjU0MTYKKwkgKiBkZXZpY2VzIChsZWdhY3ksIDgwMi4xMWFiZykuCisJICovCisJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQorCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0gU0VSX1JFR19NT0RFX0FVVE87CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXRoX2hhbF81NDE2ICphdGg5a19od19uZXdzdGF0ZSh1MTYgZGV2aWQsCi0JCQkJCSAgICAgIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQkgICAgICB2b2lkIF9faW9tZW0gKm1lbSwKLQkJCQkJICAgICAgaW50ICpzdGF0dXMpCitzdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfbmV3c3RhdGUodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJaW50ICpzdGF0dXMpCiB7Ci0Jc3RhdGljIGNvbnN0IHU4IGRlZmJzc2lkbWFza1tFVEhfQUxFTl0gPQotCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfaHcgKmFoOwogCi0JYWhwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9oYWxfNTQxNiksIEdGUF9LRVJORUwpOwotCWlmIChhaHAgPT0gTlVMTCkgeworCWFoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9odyksIEdGUF9LRVJORUwpOworCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3RhdGUgYmxvY2tcbiIpOwogCQkqc3RhdHVzID0gLUVOT01FTTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JYWggPSAmYWhwLT5haDsKIAlhaC0+YWhfc2MgPSBzYzsKLQlhaC0+YWhfc2ggPSBtZW07Ci0JYWgtPmFoX21hZ2ljID0gQVI1NDE2X01BR0lDOwotCWFoLT5haF9jb3VudHJ5Q29kZSA9IENUUllfREVGQVVMVDsKLQlhaC0+YWhfZGV2aWQgPSBkZXZpZDsKLQlhaC0+YWhfc3VidmVuZG9yaWQgPSAwOworCWFoLT5od192ZXJzaW9uLm1hZ2ljID0gQVI1NDE2X01BR0lDOworCWFoLT5yZWd1bGF0b3J5LmNvdW50cnlfY29kZSA9IENUUllfREVGQVVMVDsKKwlhaC0+aHdfdmVyc2lvbi5kZXZpZCA9IGRldmlkOworCWFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID0gMDsKIAogCWFoLT5haF9mbGFncyA9IDA7CiAJaWYgKChkZXZpZCA9PSBBUjU0MTZfQVI5MTAwX0RFVklEKSkKLQkJYWgtPmFoX21hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85MTAwOwogCWlmICghQVJfU1JFVl85MTAwKGFoKSkKIAkJYWgtPmFoX2ZsYWdzID0gQUhfVVNFX0VFUFJPTTsKIAotCWFoLT5haF9wb3dlckxpbWl0ID0gTUFYX1JBVEVfUE9XRVI7Ci0JYWgtPmFoX3RwU2NhbGUgPSBBVEg5S19UUF9TQ0FMRV9NQVg7Ci0JYWhwLT5haF9hdGltV2luZG93ID0gMDsKLQlhaHAtPmFoX2RpdmVyc2l0eUNvbnRyb2wgPSBhaC0+YWhfY29uZmlnLmRpdmVyc2l0eV9jb250cm9sOwotCWFocC0+YWhfYW50ZW5uYVN3aXRjaFN3YXAgPQotCQlhaC0+YWhfY29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXA7Ci0JYWhwLT5haF9zdGFJZDFEZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwotCWFocC0+YWhfYmVhY29uSW50ZXJ2YWwgPSAxMDA7Ci0JYWhwLT5haF9lbmFibGUzMmtIekNsb2NrID0gRE9OVF9VU0VfMzJLSFo7Ci0JYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOwotCWFocC0+YWhfYWNrdGltZW91dCA9ICh1MzIpIC0xOwotCWFocC0+YWhfY3RzdGltZW91dCA9ICh1MzIpIC0xOwotCWFocC0+YWhfZ2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7Ci0JbWVtY3B5KCZhaHAtPmFoX2Jzc2lkbWFzaywgZGVmYnNzaWRtYXNrLCBFVEhfQUxFTik7CisJYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQgPSBNQVhfUkFURV9QT1dFUjsKKwlhaC0+cmVndWxhdG9yeS50cF9zY2FsZSA9IEFUSDlLX1RQX1NDQUxFX01BWDsKKwlhaC0+YXRpbV93aW5kb3cgPSAwOworCWFoLT5kaXZlcnNpdHlfY29udHJvbCA9IGFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2w7CisJYWgtPmFudGVubmFfc3dpdGNoX3N3YXAgPQorCQlhaC0+Y29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXA7CisJYWgtPnN0YV9pZDFfZGVmYXVsdHMgPSBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRTsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gMTAwOworCWFoLT5lbmFibGVfMzJrSHpfY2xvY2sgPSBET05UX1VTRV8zMktIWjsKKwlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKKwlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOworCWFoLT5jdHN0aW1lb3V0ID0gKHUzMikgLTE7CisJYWgtPmdsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOwogCi0JYWhwLT5haF9nQmVhY29uUmF0ZSA9IDA7CisJYWgtPmdiZWFjb25fcmF0ZSA9IDA7CiAKLQlyZXR1cm4gYWhwOworCXJldHVybiBhaDsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19yZmF0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X3JmYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWJvb2wgcmZTdGF0dXMgPSBmYWxzZTsKIAlpbnQgZWNvZGUgPSAwOwpAQCAtNTA2LDcgKzQ3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcmZfY2xhaW0oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19yZl9jbGFpbShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdmFsOwogCkBAIC01MjYsODggKzQ5MSw4NyBAQAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAogCQkJIjVHIFJhZGlvIENoaXAgUmV2IDB4JTAyWCBpcyBub3QgIgogCQkJInN1cHBvcnRlZCBieSB0aGlzIGRyaXZlclxuIiwKLQkJCWFoLT5haF9hbmFsb2c1R2h6UmV2KTsKKwkJCWFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JYWgtPmFoX2FuYWxvZzVHaHpSZXYgPSB2YWw7CisJYWgtPmh3X3ZlcnNpb24uYW5hbG9nNUdoelJldiA9IHZhbDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2luaXRfbWFjYWRkcihzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X2luaXRfbWFjYWRkcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgc3VtOwogCWludCBpOwogCXUxNiBlZXZhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJc3VtID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWVldmFsID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgQVJfRUVQUk9NX01BQyhpKSk7CisJCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEFSX0VFUFJPTV9NQUMoaSkpOwogCQlzdW0gKz0gZWV2YWw7Ci0JCWFocC0+YWhfbWFjYWRkclsyICogaV0gPSBlZXZhbCA+PiA4OwotCQlhaHAtPmFoX21hY2FkZHJbMiAqIGkgKyAxXSA9IGVldmFsICYgMHhmZjsKKwkJYWgtPm1hY2FkZHJbMiAqIGldID0gZWV2YWwgPj4gODsKKwkJYWgtPm1hY2FkZHJbMiAqIGkgKyAxXSA9IGVldmFsICYgMHhmZjsKIAl9CiAJaWYgKHN1bSA9PSAwIHx8IHN1bSA9PSAweGZmZmYgKiAzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKIAkJCSJtYWMgYWRkcmVzcyByZWFkIGZhaWxlZDogJXBNXG4iLAotCQkJYWhwLT5haF9tYWNhZGRyKTsKKwkJCWFoLT5tYWNhZGRyKTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9yeGdhaW5faW5pKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiByeGdhaW5fdHlwZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCi0JaWYgKGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3KSB7Ci0JCXJ4Z2Fpbl90eXBlID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX1JYR0FJTl9UWVBFKTsKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3KSB7CisJCXJ4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWEdBSU5fVFlQRSk7CiAKIAkJaWYgKHJ4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRikKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX2JhY2tvZmZfMTNkYl9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19iYWNrb2ZmXzEzZGJfcnhnYWluXzkyODBfMiksIDYpOwogCQllbHNlIGlmIChyeGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1JYR0FJTl8yM0RCX0JBQ0tPRkYpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfYmFja29mZl8yM2RiX3J4Z2Fpbl85MjgwXzIpLCA2KTsKIAkJZWxzZQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiksIDYpOwotCX0gZWxzZQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwl9IGVsc2UgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiksIDYpOworCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdHhnYWluX2luaShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdHhnYWluX3R5cGU7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKSA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkgewotCQl0eGdhaW5fdHlwZSA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKSA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkgeworCQl0eGdhaW5fdHlwZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhHQUlOX1RZUEUpOwogCiAJCWlmICh0eGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQkJYXI5MjgwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODBfMiksIDYpOwogCQllbHNlCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIpLCA2KTsKLQl9IGVsc2UKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sCisJfSBlbHNlIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIsCiAJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIpLCA2KTsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcG9zdF9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19wb3N0X2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgZWNvZGU7CiAKQEAgLTYyNCw2ICs1ODgsMTAgQEAKIAllY29kZSA9IGF0aDlrX2h3X2VlcHJvbV9hdHRhY2goYWgpOwogCWlmIChlY29kZSAhPSAwKQogCQlyZXR1cm4gZWNvZGU7CisKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DT05GSUcsICJFZXByb20gVkVSOiAlZCwgUkVWOiAlZFxuIiwKKwkJYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSk7CisKIAllY29kZSA9IGF0aDlrX2h3X3JmYXR0YWNoKGFoKTsKIAlpZiAoZWNvZGUgIT0gMCkKIAkJcmV0dXJuIGVjb2RlOwpAQCAtNjM2LDIzNyArNjA0LDIyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2RvX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQkgIHZvaWQgX19pb21lbSAqbWVtLCBpbnQgKnN0YXR1cykKK3N0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19kb19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWg7CisJc3RydWN0IGF0aF9odyAqYWg7CiAJaW50IGVjb2RlOwogCXUzMiBpLCBqOwogCi0JYWhwID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBtZW0sIHN0YXR1cyk7Ci0JaWYgKGFocCA9PSBOVUxMKQorCWFoID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBzdGF0dXMpOworCWlmIChhaCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCWFoID0gJmFocC0+YWg7Ci0KIAlhdGg5a19od19zZXRfZGVmYXVsdHMoYWgpOwogCi0JaWYgKGFoLT5haF9jb25maWcuaW50cl9taXRpZ2F0aW9uICE9IDApCi0JCWFocC0+YWhfaW50ck1pdGlnYXRpb24gPSB0cnVlOworCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiAhPSAwKQorCQlhaC0+aW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKIAkJZWNvZGUgPSAtRUlPOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CiAJCWVjb2RlID0gLUVJTzsKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKGFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKLQkJaWYgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgewotCQkJYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJIHx8CisJCSAgICAoQVJfU1JFVl85MjgwKGFoKSAmJiAhYWgtPmlzX3BjaWV4cHJlc3MpKSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KIAkJCQlTRVJfUkVHX01PREVfT047CiAJCX0gZWxzZSB7Ci0JCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQogCQkJCVNFUl9SRUdfTU9ERV9PRkY7CiAJCX0KIAl9CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKLQkJInNlcmlhbGl6ZV9yZWdtb2RlIGlzICVkXG4iLAotCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlKTsKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCisJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOwogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpICYmCi0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSAmJgotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCisJaWYgKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkgJiYKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCiAJICAgICghQVJfU1JFVl85MTAwKGFoKSkgJiYgKCFBUl9TUkVWXzkyODAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4NShhaCkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkJIk1hYyBDaGlwIFJldiAweCUwMnguJXggaXMgbm90IHN1cHBvcnRlZCBieSAiCi0JCQkidGhpcyBkcml2ZXJcbiIsIGFoLT5haF9tYWNWZXJzaW9uLCBhaC0+YWhfbWFjUmV2KTsKKwkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKKwkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCWVjb2RlID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gYmFkOwogCX0KIAogCWlmIChBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCWFocC0+YWhfaXFDYWxEYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJYWhwLT5haF9zdXBwQ2FscyA9IElRX01JU01BVENIX0NBTDsKLQkJYWgtPmFoX2lzUGNpRXhwcmVzcyA9IGZhbHNlOworCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9tdWx0aV9zYW1wbGU7CisJCWFoLT5zdXBwX2NhbHMgPSBJUV9NSVNNQVRDSF9DQUw7CisJCWFoLT5pc19wY2lleHByZXNzID0gZmFsc2U7CiAJfQotCWFoLT5haF9waHlSZXYgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0NISVBfSUQpOworCWFoLT5od192ZXJzaW9uLnBoeVJldiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0hJUF9JRCk7CiAKIAlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewogCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjR2FpbkNhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9zaW5nbGVfc2FtcGxlOworCQkJYWgtPmFkY2dhaW5fY2FsZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZGNfY2FsX3NpbmdsZV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsSW5pdERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsaW5pdGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19pbml0X2RjX2NhbDsKIAkJfSBlbHNlIHsKLQkJCWFocC0+YWhfaXFDYWxEYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjR2FpbkNhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9tdWx0aV9zYW1wbGU7CisJCQlhaC0+YWRjZ2Fpbl9jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNEY0NhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2RjX2NhbF9tdWx0aV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsSW5pdERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsaW5pdGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19pbml0X2RjX2NhbDsKIAkJfQotCQlhaHAtPmFoX3N1cHBDYWxzID0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTCB8IElRX01JU01BVENIX0NBTDsKKwkJYWgtPnN1cHBfY2FscyA9IEFEQ19HQUlOX0NBTCB8IEFEQ19EQ19DQUwgfCBJUV9NSVNNQVRDSF9DQUw7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTE2MChhaCkpIHsKLQkJYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pID0gMTsKLQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gPSAoQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgfAotCQkJCQlBVEg5S19BTklfRklSU1RFUF9MRVZFTCk7Ci0JfSBlbHNlIHsKLQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOwotCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gJj0JfkFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDsKLQkJfQotCX0KKwlhaC0+YW5pX2Z1bmN0aW9uID0gQVRIOUtfQU5JX0FMTDsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJYWgtPmFuaV9mdW5jdGlvbiAmPSB+QVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOwogCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCisJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJIlRoaXMgTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBcbiIsCi0JCWFoLT5haF9tYWNWZXJzaW9uLCBhaC0+YWhfbWFjUmV2KTsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwgYWgtPmh3X3ZlcnNpb24ubWFjUmV2KTsKIAogCWlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1XzFfMiwKKworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1XzFfMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4NU1vZGVzXzkyODVfMV8yKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODVfMV8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1Q29tbW9uXzkyODVfMV8yKSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NV8xXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMiksIDIpOwogCQl9IGVsc2UgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCWFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMiwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yKSwKIAkJCQkgIDIpOwogCQl9CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1LAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NSksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyOTI4NUNvbW1vbl85Mjg1LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODUsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVDb21tb25fOTI4NSksIDIpOwogCi0JCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkgeworCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODUsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1KSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODUsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1KSwgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODBfMiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MF8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfOTI4MF8yKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODBfMiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4MENvbW1vbl85MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBDb21tb25fOTI4MF8yKSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQkgICAgICAgYXI5MjgwUGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4MCksMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJICAgICAgIGFyOTI4MFBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85MjgwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwUGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODApLCAyKTsKIAkJfQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc0FkZGl0aW9uYWwsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsLAogCQkJICAgICAgIGFyOTI4ME1vZGVzX2Zhc3RfY2xvY2tfOTI4MF8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzIpLCAzKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc185MjgwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MENvbW1vbl85MjgwKSwgMik7CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTE2MCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyNTQxNkNvbW1vbl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb25fOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswXzkxNjApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQkJfUmZHYWluLCBhcjU0MTZCQl9SZkdhaW5fOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluXzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMV85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhcjU0MTZCYW5rMl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMl85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazJfOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYXI1NDE2QmFuazNfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazNfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszXzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazYsIGFyNTQxNkJhbms2XzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2XzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNl85MTYwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUENfOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYXI1NDE2QmFuazdfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazdfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3XzkxNjApLCAyKTsKIAkJaWYgKEFSX1NSRVZfOTE2MF8xMShhaCkpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywKIAkJCQkgICAgICAgYXI1NDE2QWRkYWNfOTE2MDFfMSwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTYwMV8xKSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTE2MCwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxNjAsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWNfOTE2MCksIDIpOwogCQl9CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkxMDBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjU0MTZNb2Rlc185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTEwMCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyNTQxNkNvbW1vbl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb25fOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswXzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQkJfUmZHYWluLCBhcjU0MTZCQl9SZkdhaW5fOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluXzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMV85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhcjU0MTZCYW5rMl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMl85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazJfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYXI1NDE2QmFuazNfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazNfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszXzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazYsIGFyNTQxNkJhbms2XzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2XzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNl85MTAwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUENfOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYXI1NDE2QmFuazdfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazdfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3XzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTAwKSwgMik7CiAJfSBlbHNlIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2RlcywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNk1vZGVzKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2Q29tbW9uKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2FpbiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2FpbiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJCX1JmR2FpbiksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazEsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazEpLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsyKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rMywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazMsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMyksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazYsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2LAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazYpLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2VFBDKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rNywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazcsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNyksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWMpLCAyKTsKIAl9CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcykKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCiAJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7CiAJZWxzZQogCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CkBAIC04NzUsNiArODM1LDIyIEBACiAJaWYgKGVjb2RlICE9IDApCiAJCWdvdG8gYmFkOwogCisJaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwkJdTMyIHR4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CisKKwkJLyogdHhnYWluIHRhYmxlICovCisJCWlmICh0eGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yLAorCQkJQVJSQVlfU0laRShhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzIpLCA2KTsKKwkJfSBlbHNlIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQlhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yLAorCQkJQVJSQVlfU0laRShhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yKSwgNik7CisJCX0KKworCX0KKwogCS8qIHJ4Z2FpbiB0YWJsZSAqLwogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQogCQlhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoYWgpOwpAQCAtODgzLDUzICs4NTksNTUgQEAKIAlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkKIAkJYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKGFoKTsKIAotCWlmIChhaC0+YWhfZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKLQkJCXUzMiByZWcgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIDApOworCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwgImZhaWxlZCBhdGg5a19od19maWxsX2NhcF9pbmZvXG4iKTsKKwkJZWNvZGUgPSAtRUlOVkFMOworCQlnb3RvIGJhZDsKKwl9CiAKLQkJCWZvciAoaiA9IDE7IGogPCBhaHAtPmFoX2luaU1vZGVzLmlhX2NvbHVtbnM7IGorKykgewotCQkJCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIGopOworCWlmICgoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgJiYKKwkgICAgdGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewogCi0JCQkJSU5JX1JBKCZhaHAtPmFoX2luaU1vZGVzLCBpLCBqKSA9CisJCS8qIEVFUFJPTSBGaXh1cCAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaU1vZGVzLmlhX3Jvd3M7IGkrKykgeworCQkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCAwKTsKKworCQkJZm9yIChqID0gMTsgaiA8IGFoLT5pbmlNb2Rlcy5pYV9jb2x1bW5zOyBqKyspIHsKKwkJCQl1MzIgdmFsID0gSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIGopOworCisJCQkJSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIGopID0KIAkJCQkJYXRoOWtfaHdfaW5pX2ZpeHVwKGFoLAotCQkJCQkJCSAgICZhaHAtPmFoX2VlcHJvbS5kZWYsCisJCQkJCQkJICAgJmFoLT5lZXByb20uZGVmLAogCQkJCQkJCSAgIHJlZywgdmFsKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCi0JCQkiZmFpbGVkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm9cbiIpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KLQogCWVjb2RlID0gYXRoOWtfaHdfaW5pdF9tYWNhZGRyKGFoKTsKIAlpZiAoZWNvZGUgIT0gMCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJCSJmYWlsZWQgaW5pdGlhbGl6aW5nIG1hYyBhZGRyZXNzXG4iKTsKIAkJZ290byBiYWQ7CiAJfQogCiAJaWYgKEFSX1NSRVZfOTI4NShhaCkpCi0JCWFoLT5haF90eFRyaWdMZXZlbCA9IChBUl9GVFJJR18yNTZCID4+IEFSX0ZUUklHX1MpOworCQlhaC0+dHhfdHJpZ19sZXZlbCA9IChBUl9GVFJJR18yNTZCID4+IEFSX0ZUUklHX1MpOwogCWVsc2UKLQkJYWgtPmFoX3R4VHJpZ0xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CisJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CiAKIAlhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKGFoKTsKIAogCXJldHVybiBhaDsKIGJhZDoKLQlpZiAoYWhwKQotCQlhdGg5a19od19kZXRhY2goKHN0cnVjdCBhdGhfaGFsICopIGFocCk7CisJaWYgKGFoKQorCQlhdGg5a19od19kZXRhY2goYWgpOwogCWlmIChzdGF0dXMpCiAJCSpzdGF0dXMgPSBlY29kZTsKIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2JiKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBzeW50aERlbGF5OwpAQCAtOTQ1LDcgKzkyMyw3IEBACiAJdWRlbGF5KHN5bnRoRGVsYXkgKyBCQVNFX0FDVElWQVRFX0RFTEFZKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9xb3Moc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9xb3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9NSUNfUU9TX0NPTlRST0wsIDB4MTAwYWEpOwogCVJFR19XUklURShhaCwgQVJfTUlDX1FPU19TRUxFQ1QsIDB4MzIxMCk7CkBAIC05NjIsNyArOTQwLDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1RYT1BfMTJfMTUsIDB4RkZGRkZGRkYpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBwbGw7CkBAIC0xMDIzLDI3ICsxMDAxLDI2IEBACiAJCQkJcGxsIHw9IFNNKDB4YiwgQVJfUlRDX1BMTF9ESVYpOwogCQl9CiAJfQotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19QTExfQ09OVFJPTCksIHBsbCk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUExMX0NPTlRST0wsIHBsbCk7CiAKIAl1ZGVsYXkoUlRDX1BMTF9TRVRUTEVfREVMQVkpOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfU0xFRVBfQ0xLLCBBUl9SVENfRk9SQ0VfREVSSVZFRF9DTEspOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2NoYWluX21hc2tzKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfY2hhaW5fbWFza3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgcnhfY2hhaW5tYXNrLCB0eF9jaGFpbm1hc2s7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOwotCXR4X2NoYWlubWFzayA9IGFocC0+YWhfdHhjaGFpbm1hc2s7CisJcnhfY2hhaW5tYXNrID0gYWgtPnJ4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCXN3aXRjaCAocnhfY2hhaW5tYXNrKSB7CiAJY2FzZSAweDU6CiAJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQU5BTE9HX1NXQVAsCiAJCQkgICAgQVJfUEhZX1NXQVBfQUxUX0NIQUlOKTsKIAljYXNlIDB4MzoKLQkJaWYgKCgoYWgpLT5haF9tYWNWZXJzaW9uIDw9IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkgeworCQlpZiAoKChhaCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA8PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpIHsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX1JYX0NIQUlOTUFTSywgMHg3KTsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIDB4Nyk7CiAJCQlicmVhazsKQEAgLTEwNjgsMjggKzEwNDUsMjYgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9BTkFMT0dfU1dBUCkgfCAweDAwMDAwMDAxKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWFocC0+YWhfbWFza1JlZyA9IEFSX0lNUl9UWEVSUiB8CisJYWgtPm1hc2tfcmVnID0gQVJfSU1SX1RYRVJSIHwKIAkJQVJfSU1SX1RYVVJOIHwKIAkJQVJfSU1SX1JYRVJSIHwKIAkJQVJfSU1SX1JYT1JOIHwKIAkJQVJfSU1SX0JDTk1JU0M7CiAKLQlpZiAoYWhwLT5haF9pbnRyTWl0aWdhdGlvbikKLQkJYWhwLT5haF9tYXNrUmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKIAllbHNlCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfUlhPSzsKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWE9LOwogCi0JYWhwLT5haF9tYXNrUmVnIHw9IEFSX0lNUl9UWE9LOworCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfVFhPSzsKIAogCWlmIChvcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfTUlCOworCQlhaC0+bWFza19yZWcgfD0gQVJfSU1SX01JQjsKIAotCVJFR19XUklURShhaCwgQVJfSU1SLCBhaHAtPmFoX21hc2tSZWcpOworCVJFR19XUklURShhaCwgQVJfSU1SLCBhaC0+bWFza19yZWcpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MyLCBSRUdfUkVBRChhaCwgQVJfSU1SX1MyKSB8IEFSX0lNUl9TMl9HVFQpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CkBAIC0xMDk5LDcyICsxMDc0LDY0IEBACiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzID4gYXRoOWtfaHdfbWFjX3RvX3VzZWMoYWgsIE1TKDB4ZmZmZmZmZmYsIEFSX1RJTUVfT1VUX0FDSykpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYmFkIGFjayB0aW1lb3V0ICV1XG4iLCB1cyk7Ci0JCWFocC0+YWhfYWNrdGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCiAJCQkgICAgICBBUl9USU1FX09VVF9BQ0ssIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX2Fja3RpbWVvdXQgPSB1czsKKwkJYWgtPmFja3RpbWVvdXQgPSB1czsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzID4gYXRoOWtfaHdfbWFjX3RvX3VzZWMoYWgsIE1TKDB4ZmZmZmZmZmYsIEFSX1RJTUVfT1VUX0NUUykpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYmFkIGN0cyB0aW1lb3V0ICV1XG4iLCB1cyk7Ci0JCWFocC0+YWhfY3RzdGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCiAJCQkgICAgICBBUl9USU1FX09VVF9DVFMsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX2N0c3RpbWVvdXQgPSB1czsKKwkJYWgtPmN0c3RpbWVvdXQgPSB1czsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0dSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdHUpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh0dSA+IDB4RkZGRikgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19YTUlULAogCQkJImJhZCBnbG9iYWwgdHggdGltZW91dCAldVxuIiwgdHUpOwotCQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CiAJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HVFhUTywgQVJfR1RYVE9fVElNRU9VVF9MSU1JVCwgdHUpOwotCQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9IHR1OworCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gdHU7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF91c2VyX3NldHRpbmdzKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYWgtPm1pc2NfbW9kZSAweCV4XG4iLAorCQlhaC0+bWlzY19tb2RlKTsKIAotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYWhwLT5haF9taXNjTW9kZSAweCV4XG4iLAotCQlhaHAtPmFoX21pc2NNb2RlKTsKLQotCWlmIChhaHAtPmFoX21pc2NNb2RlICE9IDApCisJaWYgKGFoLT5taXNjX21vZGUgIT0gMCkKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ1VfTUlTQywKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX1BDVV9NSVNDKSB8IGFocC0+YWhfbWlzY01vZGUpOwotCWlmIChhaHAtPmFoX3Nsb3R0aW1lICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWhwLT5haF9zbG90dGltZSk7Ci0JaWYgKGFocC0+YWhfYWNrdGltZW91dCAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KGFoLCBhaHAtPmFoX2Fja3RpbWVvdXQpOwotCWlmIChhaHAtPmFoX2N0c3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9jdHNfdGltZW91dChhaCwgYWhwLT5haF9jdHN0aW1lb3V0KTsKLQlpZiAoYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KGFoLCBhaHAtPmFoX2dsb2JhbHR4dGltZW91dCk7CisJCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaC0+bWlzY19tb2RlKTsKKwlpZiAoYWgtPnNsb3R0aW1lICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWgtPnNsb3R0aW1lKTsKKwlpZiAoYWgtPmFja3RpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWgtPmFja3RpbWVvdXQpOworCWlmIChhaC0+Y3RzdGltZW91dCAhPSAodTMyKSAtMSkKKwkJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhaC0+Y3RzdGltZW91dCk7CisJaWYgKGFoLT5nbG9iYWx0eHRpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KGFoLCBhaC0+Z2xvYmFsdHh0aW1lb3V0KTsKIH0KIAogY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpCkBAIC0xMTczLDcgKzExNDAsNyBAQAogCQlhdGg5a19od19kZXZuYW1lKGRldmlkKSA6IE5VTEw7CiB9CiAKLXZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghQVJfU1JFVl85MTAwKGFoKSkKIAkJYXRoOWtfaHdfYW5pX2RldGFjaChhaCk7CkBAIC0xMTgzLDE5ICsxMTUwLDE5IEBACiAJa2ZyZWUoYWgpOwogfQogCi1zdHJ1Y3QgYXRoX2hhbCAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJdm9pZCBfX2lvbWVtICptZW0sIGludCAqZXJyb3IpCitzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBOVUxMOworCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKIAogCXN3aXRjaCAoZGV2aWQpIHsKIAljYXNlIEFSNTQxNl9ERVZJRF9QQ0k6CiAJY2FzZSBBUjU0MTZfREVWSURfUENJRToKKwljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6CiAJY2FzZSBBUjkxNjBfREVWSURfUENJOgogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgogCWNhc2UgQVI5Mjg1X0RFVklEX1BDSUU6Ci0JCWFoID0gYXRoOWtfaHdfZG9fYXR0YWNoKGRldmlkLCBzYywgbWVtLCBlcnJvcik7CisJCWFoID0gYXRoOWtfaHdfZG9fYXR0YWNoKGRldmlkLCBzYywgZXJyb3IpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkqZXJyb3IgPSAtRU5YSU87CkBAIC0xMjA5LDcgKzExNzYsNyBAQAogLyogSU5JICovCiAvKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfb3ZlcnJpZGVfaW5pKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCS8qCkBAIC0xMjIwLDIwICsxMTg3LDIwIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX0RJQUdfU1csIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAogCi0JaWYgKCFBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSB8fAorCWlmICghQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSB8fAogCSAgICBBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlyZXR1cm47CiAKIAlSRUdfV1JJVEUoYWgsIDB4OTgwMCArICg2NTEgPDwgMiksIDB4MTEpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICYocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIpOwogCi0Jc3dpdGNoIChhaC0+YWhfZGV2aWQpIHsKKwlzd2l0Y2ggKGFoLT5od192ZXJzaW9uLmRldmlkKSB7CiAJY2FzZSBBUjkyODBfREVWSURfUENJOgogCQlpZiAocmVnID09IDB4Nzg5NCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5ZLApAQCAtMTI2MSwyNCArMTIyOCwzMyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhLAogCQkJICAgICAgdTMyIHJlZywgdTMyIHZhbHVlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoYWhwLT5haF9lZXBfbWFwID09IEVFUF9NQVBfNEtCSVRTKQorCWlmIChhaC0+ZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKIAkJcmV0dXJuIHZhbHVlOwogCWVsc2UKIAkJcmV0dXJuIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoYWgsIHBFZXBEYXRhLCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19wcm9jZXNzX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspCisJCWFoLT5vcmlnaW5hbEdhaW5baV0gPQorCQkJTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCksCisJCQkJCUFSX1BIWV9UWF9HQUlOKTsKKwlhaC0+UERBRENkZWx0YSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcHJvY2Vzc19pbmkoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CiAJaW50IGksIHJlZ1dyaXRlcyA9IDA7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjaGFuLT5jaGFuOwogCXUzMiBtb2Rlc0luZGV4LCBmcmVxSW5kZXg7CiAJaW50IHN0YXR1czsKIApAQCAtMTMxMCw0MCArMTI4NiwzOCBAQAogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZKDApLCAweDAwMDAwMDA3KTsKLQogCVJFR19XUklURShhaCwgQVJfUEhZX0FEQ19TRVJJQUxfQ1RMLCBBUl9QSFlfU0VMX0VYVEVSTkFMX1JBRElPKTsKKwlhaC0+ZWVwX29wcy0+c2V0X2FkZGFjKGFoLCBjaGFuKTsKIAotCWF0aDlrX2h3X3NldF9hZGRhYyhhaCwgY2hhbik7Ci0KLQlpZiAoQVJfU1JFVl81NDE2X1YyMl9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCAxLCByZWdXcml0ZXMpOworCWlmIChBUl9TUkVWXzU0MTZfMjJfT1JfTEFURVIoYWgpKSB7CisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaUFkZGFjLCAxLCByZWdXcml0ZXMpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBhcjU0MTZJbmlBcnJheSB0ZW1wOwogCQl1MzIgYWRkYWNTaXplID0KLQkJCXNpemVvZih1MzIpICogYWhwLT5haF9pbmlBZGRhYy5pYV9yb3dzICoKLQkJCWFocC0+YWhfaW5pQWRkYWMuaWFfY29sdW1uczsKKwkJCXNpemVvZih1MzIpICogYWgtPmluaUFkZGFjLmlhX3Jvd3MgKgorCQkJYWgtPmluaUFkZGFjLmlhX2NvbHVtbnM7CiAKLQkJbWVtY3B5KGFocC0+YWhfYWRkYWM1NDE2XzIxLAotCQkgICAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9hcnJheSwgYWRkYWNTaXplKTsKKwkJbWVtY3B5KGFoLT5hZGRhYzU0MTZfMjEsCisJCSAgICAgICBhaC0+aW5pQWRkYWMuaWFfYXJyYXksIGFkZGFjU2l6ZSk7CiAKLQkJKGFocC0+YWhfYWRkYWM1NDE2XzIxKVszMSAqIGFocC0+YWhfaW5pQWRkYWMuaWFfY29sdW1ucyArIDFdID0gMDsKKwkJKGFoLT5hZGRhYzU0MTZfMjEpWzMxICogYWgtPmluaUFkZGFjLmlhX2NvbHVtbnMgKyAxXSA9IDA7CiAKLQkJdGVtcC5pYV9hcnJheSA9IGFocC0+YWhfYWRkYWM1NDE2XzIxOwotCQl0ZW1wLmlhX2NvbHVtbnMgPSBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnM7Ci0JCXRlbXAuaWFfcm93cyA9IGFocC0+YWhfaW5pQWRkYWMuaWFfcm93czsKKwkJdGVtcC5pYV9hcnJheSA9IGFoLT5hZGRhYzU0MTZfMjE7CisJCXRlbXAuaWFfY29sdW1ucyA9IGFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zOworCQl0ZW1wLmlhX3Jvd3MgPSBhaC0+aW5pQWRkYWMuaWFfcm93czsKIAkJUkVHX1dSSVRFX0FSUkFZKCZ0ZW1wLCAxLCByZWdXcml0ZXMpOwogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZX0FEQ19TRVJJQUxfQ1RMLCBBUl9QSFlfU0VMX0lOVEVSTkFMX0FEREFDKTsKIAotCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaU1vZGVzLmlhX3Jvd3M7IGkrKykgewotCQl1MzIgcmVnID0gSU5JX1JBKCZhaHAtPmFoX2luaU1vZGVzLCBpLCAwKTsKLQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgbW9kZXNJbmRleCk7CisJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKKwkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCAwKTsKKwkJdTMyIHZhbCA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCBtb2Rlc0luZGV4KTsKIAogCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKIAogCQlpZiAocmVnID49IDB4NzgwMCAmJiByZWcgPCAweDc4YTAKLQkJICAgICYmIGFoLT5haF9jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CisJCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykgewogCQkJdWRlbGF5KDEwMCk7CiAJCX0KIApAQCAtMTM1MSwxOSArMTMyNSwyMCBAQAogCX0KIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKQotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCi0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwgbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKKwlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCAoQVJfU1JFVl85Mjg1KGFoKSAmJgorCSAgICBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSkKKwkJUkVHX1dSSVRFX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlDb21tb24uaWFfcm93czsgaSsrKSB7Ci0JCXUzMiByZWcgPSBJTklfUkEoJmFocC0+YWhfaW5pQ29tbW9uLCBpLCAwKTsKLQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlDb21tb24sIGksIDEpOworCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pQ29tbW9uLmlhX3Jvd3M7IGkrKykgeworCQl1MzIgcmVnID0gSU5JX1JBKCZhaC0+aW5pQ29tbW9uLCBpLCAwKTsKKwkJdTMyIHZhbCA9IElOSV9SQSgmYWgtPmluaUNvbW1vbiwgaSwgMSk7CiAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKQEAgLTEzNzMsNyArMTM0OCw3IEBACiAJYXRoOWtfaHdfd3JpdGVfcmVncyhhaCwgbW9kZXNJbmRleCwgZnJlcUluZGV4LCByZWdXcml0ZXMpOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkgJiYgSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGNoYW4pKSB7Ci0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc0FkZGl0aW9uYWwsIG1vZGVzSW5kZXgsCisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzQWRkaXRpb25hbCwgbW9kZXNJbmRleCwKIAkJCQlyZWdXcml0ZXMpOwogCX0KIApAQCAtMTM4MSwxMyArMTM1NiwxNSBAQAogCWF0aDlrX2h3X3NldF9yZWdzKGFoLCBjaGFuLCBtYWNtb2RlKTsKIAlhdGg5a19od19pbml0X2NoYWluX21hc2tzKGFoKTsKIAotCXN0YXR1cyA9IGF0aDlrX2h3X3NldF90eHBvd2VyKGFoLCBjaGFuLAotCQkJCSAgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJICAgICAgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKGFoLAotCQkJCQkJCQkgICAgIGNoYW4pLAotCQkJCSAgICAgIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSAgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkJICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpOworCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJYXRoOWtfb2xjX2luaXQoYWgpOworCisJc3RhdHVzID0gYWgtPmVlcF9vcHMtPnNldF90eHBvd2VyKGFoLCBjaGFuLAorCQkJCSAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCQkgIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAorCQkJCSAgY2hhbm5lbC0+bWF4X3Bvd2VyICogMiwKKwkJCQkgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgICAgICAodTMyKSBhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCkpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAogCQkJImVycm9yIGluaXQnaW5nIHRyYW5zbWl0IHBvd2VyXG4iKTsKQEAgLTE0MDcsNyArMTM4NCw3IEBACiAvKiBSZXNldCBhbmQgQ2hhbm5lbCBTd2l0Y2hpbmcgUm91dGluZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmZtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmZtb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgcmZNb2RlID0gMDsKIApAQCAtMTQyNywxMiArMTQwNCwxMiBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX01PREUsIHJmTW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9ESVMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0X2RtYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0X2RtYShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcmVndmFsOwogCkBAIC0xNDQyLDcgKzE0MTksNyBAQAogCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9UWENGRykgJiB+QVJfVFhDRkdfRE1BU1pfTUFTSzsKIAlSRUdfV1JJVEUoYWgsIEFSX1RYQ0ZHLCByZWd2YWwgfCBBUl9UWENGR19ETUFTWl8xMjhCKTsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1RYQ0ZHLCBBUl9GVFJJRywgYWgtPmFoX3R4VHJpZ0xldmVsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9UWENGRywgQVJfRlRSSUcsIGFoLT50eF90cmlnX2xldmVsKTsKIAogCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9SWENGRykgJiB+QVJfUlhDRkdfRE1BU1pfTUFTSzsKIAlSRUdfV1JJVEUoYWgsIEFSX1JYQ0ZHLCByZWd2YWwgfCBBUl9SWENGR19ETUFTWl8xMjhCKTsKQEAgLTE0NTgsNyArMTQzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgb3Btb2RlKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgb3Btb2RlKQogewogCXUzMiB2YWw7CiAKQEAgLTE0NzEsNiArMTQ0OCw3IEBACiAJCVJFR19DTFJfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgdmFsIHwgQVJfU1RBX0lEMV9BREhPQwogCQkJICB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7CiAJCVJFR19TRVRfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKQEAgLTE0ODIsNyArMTQ2MCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfZ2V0X2RlbHRhX3Nsb3BlX3ZhbHMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2dldF9kZWx0YV9zbG9wZV92YWxzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkJIHUzMiBjb2VmX3NjYWxlZCwKIAkJCQkJCSB1MzIgKmNvZWZfbWFudGlzc2EsCiAJCQkJCQkgdTMyICpjb2VmX2V4cG9uZW50KQpAQCAtMTUwMSw3ICsxNDc5LDcgQEAKIAkqY29lZl9leHBvbmVudCA9IGNvZWZfZXhwIC0gMTY7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWx0YV9zbG9wZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgY29lZl9zY2FsZWQsIGRzX2NvZWZfZXhwLCBkc19jb2VmX21hbjsKQEAgLTE1MzUsMTEgKzE1MTMsMTkgQEAKIAkJICAgICAgQVJfUEhZX0hBTEZHSV9EU0NfRVhQLCBkc19jb2VmX2V4cCk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCB0eXBlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgdHlwZSkKIHsKIAl1MzIgcnN0X2ZsYWdzOwogCXUzMiB0bXBSZWc7CiAKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSkgeworCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CisJCXZhbCAmPSB+QVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRDsKKwkJdmFsIHw9IFNNKDEsIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QpOworCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgdmFsKTsKKwkJKHZvaWQpUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CisJfQorCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwgQVJfUlRDX0ZPUkNFX1dBS0VfRU4gfAogCQkgIEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CiAKQEAgLTE1NjIsMTEgKzE1NDgsMTEgQEAKIAkJCXJzdF9mbGFncyB8PSBBUl9SVENfUkNfTUFDX0NPTEQ7CiAJfQogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgcnN0X2ZsYWdzKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SQywgcnN0X2ZsYWdzKTsKIAl1ZGVsYXkoNTApOwogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgMCk7Ci0JaWYgKCFhdGg5a19od193YWl0KGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgQVJfUlRDX1JDX00sIDApKSB7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkMsIDApOworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUlRDX1JDLCBBUl9SVENfUkNfTSwgMCwgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKIAkJCSJSVEMgc3R1Y2sgaW4gTUFDIHJlc2V0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTU4MywxOCArMTU2OSwyMCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcG93ZXJfb24oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3Bvd2VyX29uKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwgMCk7Ci0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwgMSk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDApOworCXVkZWxheSgyKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMSk7CiAKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsCiAJCQkgICBBUl9SVENfU1RBVFVTLAogCQkJICAgQVJfUlRDX1NUQVRVU19NLAotCQkJICAgQVJfUlRDX1NUQVRVU19PTikpIHsKKwkJCSAgIEFSX1JUQ19TVEFUVVNfT04sCisJCQkgICBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiUlRDIG5vdCB3YWtpbmcgdXBcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTYwNCw3ICsxNTkyLDcgQEAKIAlyZXR1cm4gYXRoOWtfaHdfc2V0X3Jlc2V0KGFoLCBBVEg5S19SRVNFVF9XQVJNKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0eXBlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR5cGUpCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9FTiB8IEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CkBAIC0xNjIyLDEyICsxNjEwLDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJICAgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CiAJdTMyIHBoeW1vZGU7CiAJdTMyIGVuYWJsZURhY0ZpZm8gPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKGFoKSkKIAkJZW5hYmxlRGFjRmlmbyA9IChSRUdfUkVBRChhaCwgQVJfUEhZX1RVUkJPKSAmCkBAIC0xNjQzLDcgKzE2MzAsNyBAQAogCQkgICAgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykpCiAJCQlwaHltb2RlIHw9IEFSX1BIWV9GQ19EWU4yMDQwX1BSSV9DSDsKIAotCQlpZiAoYWhwLT5haF9leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSkKKwkJaWYgKGFoLT5leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSkKIAkJCXBoeW1vZGUgfD0gQVJfUEhZX0ZDX0RZTjIwNDBfRVhUX0NIOwogCX0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UVVJCTywgcGh5bW9kZSk7CkBAIC0xNjU0LDU0ICsxNjQxLDMwIEBACiAJUkVHX1dSSVRFKGFoLCBBUl9DU1QsIDB4RiA8PCBBUl9DU1RfVElNRU9VVF9MSU1JVF9TKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pKQorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1BPV0VSX09OKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9XQVJNKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhaHAtPmFoX2NoaXBGdWxsU2xlZXAgPSBmYWxzZTsKLQorCWFoLT5jaGlwX2Z1bGxzbGVlcCA9IGZhbHNlOwogCWF0aDlrX2h3X2luaXRfcGxsKGFoLCBjaGFuKTsKLQogCWF0aDlrX2h3X3NldF9yZm1vZGUoYWgsIGNoYW4pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYXRoOWtfaHdfY2hlY2tfY2hhbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0JaWYgKCEoSVNfQ0hBTl8yR0haKGNoYW4pIF4gSVNfQ0hBTl81R0haKGNoYW4pKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBub3QgbWFya2VkIGFzICIKLQkJCSIyR0h6IG9yIDVHSHpcbiIsIGNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmICghSVNfQ0hBTl9PRkRNKGNoYW4pICYmCi0JICAgICFJU19DSEFOX0IoY2hhbikgJiYKLQkgICAgIUlTX0NIQU5fSFQyMChjaGFuKSAmJgotCSAgICAhSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vdCBtYXJrZWQgYXMgIgotCQkJIk9GRE0gb3IgQ0NLIG9yIEhUMjAgb3IgSFQ0MFBMVVMgb3IgSFQ0ME1JTlVTXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgc3ludGhEZWxheSwgcW51bTsKIAogCWZvciAocW51bSA9IDA7IHFudW0gPCBBUl9OVU1fUUNVOyBxbnVtKyspIHsKQEAgLTE3MTQsNyArMTY3Nyw3IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRkJVU19SRVEsIEFSX1BIWV9SRkJVU19SRVFfRU4pOwogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1JGQlVTX0dSQU5ULCBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sCi0JCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4pKSB7CisJCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAogCQkJIkNvdWxkIG5vdCBraWxsIGJhc2ViYW5kIFJYXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTczNiwxMiArMTY5OSwxMiBAQAogCQl9CiAJfQogCi0JaWYgKGF0aDlrX2h3X3NldF90eHBvd2VyKGFoLCBjaGFuLAotCQkJCSBhdGg5a19yZWdkX2dldF9jdGwoYWgsIGNoYW4pLAotCQkJCSBhdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoYWgsIGNoYW4pLAotCQkJCSBjaGFuLT5tYXhSZWdUeFBvd2VyICogMiwKLQkJCQkgbWluKCh1MzIpIE1BWF9SQVRFX1BPV0VSLAotCQkJCSAgICAgKHUzMikgYWgtPmFoX3Bvd2VyTGltaXQpKSAhPSAwKSB7CisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKIAkJCSJlcnJvciBpbml0J2luZyB0cmFuc21pdCBwb3dlclxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE3NzEsNyArMTczNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgYmJfc3B1ciA9IEFSX05PX1NQVVI7CiAJaW50IGZyZXE7CkBAIC0xODA1LDkgKzE3NjgsOSBAQAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CiAKLQlhaC0+YWhfY29uZmlnLnNwdXJtb2RlID0gU1BVUl9FTkFCTEVfRUVQUk9NOworCWFoLT5jb25maWcuc3B1cm1vZGUgPSBTUFVSX0VOQUJMRV9FRVBST007CiAJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7Ci0JCWN1cl9iYl9zcHVyID0gYXRoOWtfaHdfZWVwcm9tX2dldF9zcHVyX2NoYW4oYWgsIGksIGlzMkdIeik7CisJCWN1cl9iYl9zcHVyID0gYWgtPmVlcF9vcHMtPmdldF9zcHVyX2NoYW5uZWwoYWgsIGksIGlzMkdIeik7CiAKIAkJaWYgKGlzMkdIeikKIAkJCWN1cl9iYl9zcHVyID0gKGN1cl9iYl9zcHVyIC8gMTApICsgQVJfQkFTRV9GUkVRXzJHSFo7CkBAIC0xOTE4LDkgKzE4ODEsOSBAQAogCQlpZiAoKGN1cl92aXRfbWFzayA+IGxvd2VyKSAmJiAoY3VyX3ZpdF9tYXNrIDwgdXBwZXIpKSB7CiAKIAkJCS8qIHdvcmthcm91bmQgZm9yIGdjYyBidWcgIzM3MDE0ICovCi0JCQl2b2xhdGlsZSBpbnQgdG1wID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CisJCQl2b2xhdGlsZSBpbnQgdG1wX3YgPSBhYnMoY3VyX3ZpdF9tYXNrIC0gYmluKTsKIAotCQkJaWYgKHRtcCA8IDc1KQorCQkJaWYgKHRtcF92IDwgNzUpCiAJCQkJbWFza19hbXQgPSAxOwogCQkJZWxzZQogCQkJCW1hc2tfYW10ID0gMDsKQEAgLTIwMjEsNyArMTk4NCw3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUFTSzJfUF82MV80NSwgdG1wX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgYmJfc3B1ciA9IEFSX05PX1NQVVI7CiAJaW50IGJpbiwgY3VyX2JpbjsKQEAgLTIwNTAsNyArMjAxMyw3IEBACiAJbWVtc2V0KCZtYXNrX3AsIDAsIHNpemVvZihpbnQ4X3QpICogMTIzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQljdXJfYmJfc3B1ciA9IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKGFoLCBpLCBpczJHSHopOworCQljdXJfYmJfc3B1ciA9IGFoLT5lZXBfb3BzLT5nZXRfc3B1cl9jaGFubmVsKGFoLCBpLCBpczJHSHopOwogCQlpZiAoQVJfTk9fU1BVUiA9PSBjdXJfYmJfc3B1cikKIAkJCWJyZWFrOwogCQljdXJfYmJfc3B1ciA9IGN1cl9iYl9zcHVyIC0gKGNoYW4tPmNoYW5uZWwgKiAxMCk7CkBAIC0yMTE5LDkgKzIwODIsOSBAQAogCQlpZiAoKGN1cl92aXRfbWFzayA+IGxvd2VyKSAmJiAoY3VyX3ZpdF9tYXNrIDwgdXBwZXIpKSB7CiAKIAkJCS8qIHdvcmthcm91bmQgZm9yIGdjYyBidWcgIzM3MDE0ICovCi0JCQl2b2xhdGlsZSBpbnQgdG1wID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CisJCQl2b2xhdGlsZSBpbnQgdG1wX3YgPSBhYnMoY3VyX3ZpdF9tYXNrIC0gYmluKTsKIAotCQkJaWYgKHRtcCA8IDc1KQorCQkJaWYgKHRtcF92IDwgNzUpCiAJCQkJbWFza19hbXQgPSAxOwogCQkJZWxzZQogCQkJCW1hc2tfYW10ID0gMDsKQEAgLTIyMjIsNTggKzIxODUsNDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NQVNLMl9QXzYxXzQ1LCB0bXBfbWFzayk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlLAotCQkgICAgdTggdHhjaGFpbm1hc2ssIHU4IHJ4Y2hhaW5tYXNrLAotCQkgICAgZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZywKLQkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UsIGludCAqc3RhdHVzKQoraW50IGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpCiB7CiAJdTMyIHNhdmVMZWRTdGF0ZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmN1cmNoYW4gPSBhaC0+Y3VyY2hhbjsKIAl1MzIgc2F2ZURlZkFudGVubmE7CiAJdTMyIG1hY1N0YUlkMTsKLQlpbnQgZWNvZGU7Ci0JaW50IGksIHJ4X2NoYWlubWFzazsKKwlpbnQgaSwgcnhfY2hhaW5tYXNrLCByOwogCi0JYWhwLT5haF9leHRwcm90c3BhY2luZyA9IGV4dHByb3RzcGFjaW5nOwotCWFocC0+YWhfdHhjaGFpbm1hc2sgPSB0eGNoYWlubWFzazsKLQlhaHAtPmFoX3J4Y2hhaW5tYXNrID0gcnhjaGFpbm1hc2s7CisJYWgtPmV4dHByb3RzcGFjaW5nID0gc2MtPmh0X2V4dHByb3RzcGFjaW5nOworCWFoLT50eGNoYWlubWFzayA9IHNjLT50eF9jaGFpbm1hc2s7CisJYWgtPnJ4Y2hhaW5tYXNrID0gc2MtPnJ4X2NoYWlubWFzazsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7Ci0JCWFocC0+YWhfdHhjaGFpbm1hc2sgJj0gMHgzOwotCQlhaHAtPmFoX3J4Y2hhaW5tYXNrICY9IDB4MzsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCQlhaC0+dHhjaGFpbm1hc2sgJj0gMHgxOworCQlhaC0+cnhjaGFpbm1hc2sgJj0gMHgxOworCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSkgeworCQlhaC0+dHhjaGFpbm1hc2sgJj0gMHgzOworCQlhaC0+cnhjaGFpbm1hc2sgJj0gMHgzOwogCX0KIAotCWlmIChhdGg5a19od19jaGVja19jaGFuKGFoLCBjaGFuKSA9PSBOVUxMKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkgewotCQllY29kZSA9IC1FSU87Ci0JCWdvdG8gYmFkOwotCX0KKwlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpCisJCXJldHVybiAtRUlPOwogCiAJaWYgKGN1cmNoYW4pCiAJCWF0aDlrX2h3X2dldG5mKGFoLCBjdXJjaGFuKTsKIAogCWlmIChiQ2hhbm5lbENoYW5nZSAmJgotCSAgICAoYWhwLT5haF9jaGlwRnVsbFNsZWVwICE9IHRydWUpICYmCi0JICAgIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKSAmJgotCSAgICAoY2hhbi0+Y2hhbm5lbCAhPSBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCkgJiYKKwkgICAgKGFoLT5jaGlwX2Z1bGxzbGVlcCAhPSB0cnVlKSAmJgorCSAgICAoYWgtPmN1cmNoYW4gIT0gTlVMTCkgJiYKKwkgICAgKGNoYW4tPmNoYW5uZWwgIT0gYWgtPmN1cmNoYW4tPmNoYW5uZWwpICYmCiAJICAgICgoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BTEwpID09Ci0JICAgICAoYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSkgJiYKKwkgICAgIChhaC0+Y3VyY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BTEwpKSAmJgogCSAgICAoIUFSX1NSRVZfOTI4MChhaCkgfHwgKCFJU19DSEFOX0FfNU1IWl9TUEFDRUQoY2hhbikgJiYKLQkJCQkgICAhSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGFoLT5haF9jdXJjaGFuKSkpKSB7CisJCQkJICAgIUlTX0NIQU5fQV81TUhaX1NQQUNFRChhaC0+Y3VyY2hhbikpKSkgewogCi0JCWlmIChhdGg5a19od19jaGFubmVsX2NoYW5nZShhaCwgY2hhbiwgbWFjbW9kZSkpIHsKLQkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmFoX2N1cmNoYW4pOworCQlpZiAoYXRoOWtfaHdfY2hhbm5lbF9jaGFuZ2UoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKSkgeworCQkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CiAJCQlhdGg5a19od19zdGFydF9uZmNhbChhaCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCkBAIC0yMjkxLDI4ICsyMjQzLDMyIEBACiAKIAlpZiAoIWF0aDlrX2h3X2NoaXBfcmVzZXQoYWgsIGNoYW4pKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiY2hpcCByZXNldCBmYWlsZWRcbiIpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgewotCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCi0JCQkgICAgQVJfR1BJT19KVEFHX0RJU0FCTEUpOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKIAotCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkgewotCQkJaWYgKElTX0NIQU5fNUdIWihjaGFuKSkKLQkJCQlhdGg5a19od19zZXRfZ3BpbyhhaCwgOSwgMCk7Ci0JCQllbHNlCi0JCQkJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIDksIDEpOwotCQl9Ci0JCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIDksIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCX0KKwlyID0gYXRoOWtfaHdfcHJvY2Vzc19pbmkoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKLQllY29kZSA9IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKGFoLCBjaGFuLCBtYWNtb2RlKTsKLQlpZiAoZWNvZGUgIT0gMCkgewotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KKwkvKiBTZXR1cCBNRlAgb3B0aW9ucyBmb3IgQ0NNUCAqLworCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKSB7CisJCS8qIE1hc2sgUmV0cnkoYjExKSwgUHdyTWd0KGIxMiksIE1vcmVEYXRhKGIxMykgdG8gMCBpbiBtZ210CisJCSAqIGZyYW1lcyB3aGVuIGNvbnN0cnVjdGluZyBDQ01QIEFBRC4gKi8KKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQUVTX01VVEVfTUFTSzEsIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQsCisJCQkgICAgICAweGM3ZmYpOworCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSBmYWxzZTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJLyogRGlzYWJsZSBoYXJkd2FyZSBjcnlwdG8gZm9yIG1hbmFnZW1lbnQgZnJhbWVzICovCisJCVJFR19DTFJfQklUKGFoLCBBUl9QQ1VfTUlTQ19NT0RFMiwKKwkJCSAgICBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkgICAgQVJfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1QpOworCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSB0cnVlOworCX0gZWxzZQorCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSB0cnVlOwogCiAJaWYgKElTX0NIQU5fT0ZETShjaGFuKSB8fCBJU19DSEFOX0hUKGNoYW4pKQogCQlhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoYWgsIGNoYW4pOwpAQCAtMjMyMiw2MSArMjI3OCw1MiBAQAogCWVsc2UKIAkJYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShhaCwgY2hhbik7CiAKLQlpZiAoIWF0aDlrX2h3X2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzKGFoLCBjaGFuKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiZXJyb3Igc2V0dGluZyBib2FyZCBvcHRpb25zXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKLQl9CisJYWgtPmVlcF9vcHMtPnNldF9ib2FyZF92YWx1ZXMoYWgsIGNoYW4pOwogCiAJYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoYWgsIGNoYW4pOwogCi0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoYWhwLT5haF9tYWNhZGRyKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9tYWNhZGRyICsgNCkKKwlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaC0+bWFjYWRkcikpOworCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KGFoLT5tYWNhZGRyICsgNCkKIAkJICB8IG1hY1N0YUlkMQogCQkgIHwgQVJfU1RBX0lEMV9SVFNfVVNFX0RFRgotCQkgIHwgKGFoLT5haF9jb25maWcuCisJCSAgfCAoYWgtPmNvbmZpZy4KIAkJICAgICBhY2tfNm1iID8gQVJfU1RBX0lEMV9BQ0tDVFNfNk1CIDogMCkKLQkJICB8IGFocC0+YWhfc3RhSWQxRGVmYXVsdHMpOwotCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPmFoX29wbW9kZSk7CisJCSAgfCBhaC0+c3RhX2lkMV9kZWZhdWx0cyk7CisJYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKGFoLCBhaC0+b3Btb2RlKTsKIAotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7CisJUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShhaCwgQVJfQlNTTVNLVSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5ic3NpZG1hc2sgKyA0KSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCBzYXZlRGVmQW50ZW5uYSk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaHAtPmFoX2Jzc2lkKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZCArIDQpIHwKLQkJICAoKGFocC0+YWhfYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKHNjLT5jdXJic3NpZCkpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIAogCVJFR19XUklURShhaCwgQVJfSVNSLCB+MCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JTU0lfVEhSLCBJTklUX1JTU0lfVEhSKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmICghKGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChhaCwgY2hhbikpKSB7Ci0JCQllY29kZSA9IC1FSU87Ci0JCQlnb3RvIGJhZDsKLQkJfQorCQlpZiAoIShhdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoYWgsIGNoYW4pKSkKKwkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7Ci0JCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpIHsKLQkJCWVjb2RlID0gLUVJTzsKLQkJCWdvdG8gYmFkOwotCQl9CisJCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfTlVNX0RDVTsgaSsrKQogCQlSRUdfV1JJVEUoYWgsIEFSX0RRQ1VNQVNLKGkpLCAxIDw8IGkpOwogCi0JYWhwLT5haF9pbnRyVHhxcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBzLnRvdGFsX3F1ZXVlczsgaSsrKQorCWFoLT5pbnRyX3R4cXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy50b3RhbF9xdWV1ZXM7IGkrKykKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBpKTsKIAotCWF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKGFoLCBhaC0+YWhfb3Btb2RlKTsKKwlhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhhaCwgYWgtPm9wbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9xb3MoYWgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKICNlbmRpZgogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CkBAIC0yMzg4LDcgKzIzMzUsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9PQlMsIDgpOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikgewogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfTEFTVCwgNTAwKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9GSVJTVCwgMjAwMCk7CkBAIC0yMzk2LDEyICsyMzQzLDEwIEBACiAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAotCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKXsKLQkJZWNvZGUgPSAtRUlPOzsKLQkJZ290byBiYWQ7Ci0JfQorCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQorCQlyZXR1cm4gLUVJTzs7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKIAlpZiAoKHJ4X2NoYWlubWFzayA9PSAweDUpIHx8IChyeF9jaGFpbm1hc2sgPT0gMHgzKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CkBAIC0yNDI4LDIyICsyMzczLDE4IEBACiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKLWJhZDoKLQlpZiAoc3RhdHVzKQotCQkqc3RhdHVzID0gZWNvZGU7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleXJlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpCiB7CiAJdTMyIGtleVR5cGU7CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNDcwLDE3ICsyNDExLDE3IEBACiAKIAl9CiAKLQlpZiAoYWgtPmFoX2N1cmNoYW4gPT0gTlVMTCkKKwlpZiAoYWgtPmN1cmNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpCitib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQogewogCXUzMiBtYWNIaSwgbWFjTG87CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNTA0LDE3ICsyNDQ1LDEzIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5LAorYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSkKKwkJCQkgY29uc3QgdTggKm1hYykKIHsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7Ci0JdTMyIHhvck1hc2sgPSB4b3JLZXkgPwotCQkoQVRIOUtfS0VZX1hPUiA8PCAyNCB8IEFUSDlLX0tFWV9YT1IgPDwgMTYgfCBBVEg5S19LRVlfWE9SIDw8IDgKLQkJIHwgQVRIOUtfS0VZX1hPUikgOiAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoZW50cnkgPj0gcENhcC0+a2V5Y2FjaGVfc2l6ZSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19LRVlDQUNIRSwKQEAgLTI1MzAsNyArMjQ2Nyw3IEBACiAJCWlmICghKHBDYXAtPmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSkpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJCSJBRVMtQ0NNIG5vdCBzdXBwb3J0ZWQgYnkgbWFjIHJldiAweCV4XG4iLAotCQkJCWFoLT5haF9tYWNSZXYpOworCQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJa2V5VHlwZSA9IEFSX0tFWVRBQkxFX1RZUEVfQ0NNOwpAQCAtMjU2NiwyNiArMjUwMyw1NyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Ja2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKSBeIHhvck1hc2s7Ci0Ja2V5MSA9IChnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdmFsICsgNCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXkyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDYpIF4geG9yTWFzazsKLQlrZXkzID0gKGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXk0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDEyKSBeIHhvck1hc2s7CisJa2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKTsKKwlrZXkxID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDQpOworCWtleTIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgNik7CisJa2V5MyA9IGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCk7CisJa2V5NCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAxMik7CiAJaWYgKGstPmt2X2xlbiA8PSBMRU5fV0VQMTA0KQogCQlrZXk0ICY9IDB4ZmY7CiAKKwkvKgorCSAqIE5vdGU6IEtleSBjYWNoZSByZWdpc3RlcnMgYWNjZXNzIHNwZWNpYWwgbWVtb3J5IGFyZWEgdGhhdCByZXF1aXJlcworCSAqIHR3byAzMi1iaXQgd3JpdGVzIHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgdmFsdWVzIGluIHRoZSBpbnRlcm5hbAorCSAqIG1lbW9yeS4gQ29uc2VxdWVudGx5LCB0aGUgZXhhY3Qgb3JkZXIgYW5kIHBhaXJzIHVzZWQgaGVyZSBtdXN0IGJlCisJICogbWFpbnRhaW5lZC4KKwkgKi8KKwogCWlmIChrZXlUeXBlID09IEFSX0tFWVRBQkxFX1RZUEVfVEtJUCAmJiBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkpIHsKIAkJdTE2IG1pY2VudHJ5ID0gZW50cnkgKyA2NDsKIAorCQkvKgorCQkgKiBXcml0ZSBpbnZlcnRlZCBrZXlbNDc6MF0gZmlyc3QgdG8gYXZvaWQgTWljaGFlbCBNSUMgZXJyb3JzCisJCSAqIG9uIGZyYW1lcyB0aGF0IGNvdWxkIGJlIHNlbnQgb3IgcmVjZWl2ZWQgYXQgdGhlIHNhbWUgdGltZS4KKwkJICogVGhlIGNvcnJlY3Qga2V5IHdpbGwgYmUgd3JpdHRlbiBpbiB0aGUgZW5kIG9uY2UgZXZlcnl0aGluZworCQkgKiBlbHNlIGlzIHJlYWR5LgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwgfmtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCB+a2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKKworCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCi0JCWlmIChhaHAtPmFoX21pc2NNb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkgeworCQlpZiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpIHsKKwkJCS8qCisJCQkgKiBUS0lQIHVzZXMgdHdvIGtleSBjYWNoZSBlbnRyaWVzOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkKKwkJCSAqIChpZHggPSBtYWluIGluZGV4ICsgNjQpOgorCQkJICoga2V5MCBbMzE6MF0gPSBSWCBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFsxNTowXSA9IFRYIGtleSBbMzE6MTZdCisJCQkgKiBrZXkxIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5MiBbMzE6MF0gPSBSWCBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMTU6MF0gPSBUWCBrZXkgWzE1OjBdCisJCQkgKiBrZXkzIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSBUWCBrZXkgWzYzOjMyXQorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMSwgbWljMiwgbWljMywgbWljNDsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKQEAgLTI1OTMsNTEgKzI1NjEsOTAgQEAKIAkJCW1pYzEgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAyKSAmIDB4ZmZmZjsKIAkJCW1pYzMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAwKSAmIDB4ZmZmZjsKIAkJCW1pYzQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdHhtaWMgKyA0KTsKKworCQkJLyogV3JpdGUgUlhbMzE6MF0gYW5kIFRYWzMxOjE2XSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKG1pY2VudHJ5KSwgbWljMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEobWljZW50cnkpLCBtaWMxKTsKKworCQkJLyogV3JpdGUgUlhbNjM6MzJdIGFuZCBUWFsxNTowXSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKG1pY2VudHJ5KSwgbWljMik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCBtaWMzKTsKKworCQkJLyogV3JpdGUgVFhbNjM6MzJdIGFuZCBrZXlUeXBlKHJlc2VydmVkKSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgbWljNCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVEtJUCB1c2VzIGZvdXIga2V5IGNhY2hlIGVudHJpZXMgKHR3byBmb3IgZ3JvdXAKKwkJCSAqIGtleXMpOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBhcmUgaW4gZGlmZmVyZW50IGtleSBjYWNoZQorCQkJICogZW50cmllcyAoaWR4ID0gbWFpbiBpbmRleCArIDY0IGZvciBUWCBhbmQKKwkJCSAqIG1haW4gaW5kZXggKyAzMiArIDk2IGZvciBSWCk6CisJCQkgKiBrZXkwIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFszMTowXSA9IHJlc2VydmVkCisJCQkgKiBrZXkyIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoKKwkJCSAqIFVwcGVyIGxheWVyIGNvZGUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gc2VwYXJhdGVseQorCQkJICogZm9yIFRYIGFuZCBSWCBrZXlzIHdoZW4gdGhlc2UgcmVnaXN0ZXJzIG9mZnNldHMgYXJlCisJCQkgKiB1c2VkLgorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMjsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKIAkJCW1pYzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgNCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbMzE6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbNjM6MzJdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIobWljZW50cnkpLCBtaWMyKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMyhtaWNlbnRyeSksIDApOworCisJCQkvKiBXcml0ZSBUWFs2MzozMl0gYW5kIGtleVR5cGUocmVzZXJ2ZWQpICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQobWljZW50cnkpLCAwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CiAJCX0KKworCQkvKiBNQUMgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGZvciB0aGUgTUlDIGVudHJ5ICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMChtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzEobWljZW50cnkpLCAwKTsKKworCQkvKgorCQkgKiBXcml0ZSB0aGUgY29ycmVjdCAodW4taW52ZXJ0ZWQpIGtleVs0NzowXSBsYXN0IHRvIGVuYWJsZQorCQkgKiBUS0lQIG5vdyB0aGF0IGFsbCBvdGhlciByZWdpc3RlcnMgYXJlIHNldCB3aXRoIGNvcnJlY3QKKwkJICogdmFsdWVzLgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOwogCX0gZWxzZSB7CisJCS8qIFdyaXRlIGtleVs0NzowXSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKIAorCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCX0KIAotCWlmIChhaC0+YWhfY3VyY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSkKIHsKLQlpZiAoZW50cnkgPCBhaC0+YWhfY2Fwcy5rZXljYWNoZV9zaXplKSB7CisJaWYgKGVudHJ5IDwgYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZSkgewogCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX0tFWVRBQkxFX01BQzEoZW50cnkpKTsKIAkJaWYgKHZhbCAmIEFSX0tFWVRBQkxFX1ZBTElEKQogCQkJcmV0dXJuIHRydWU7CkBAIC0yNjQ5LDcgKzI2NTYsNyBAQAogLyogUG93ZXIgTWFuYWdlbWVudCAoQ2hpcHNldCkgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX3NldF9wb3dlcl9zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgc2V0Q2hpcCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfU1RBX0lEMSwgQVJfU1RBX0lEMV9QV1JfU0FWKTsKIAlpZiAoc2V0Q2hpcCkgewpAQCAtMjY1OCwxNiArMjY2NSwxNiBAQAogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIgfCBBUl9SQ19IT1NUSUYpOwogCi0JCVJFR19DTFJfQklUKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwKKwkJUkVHX0NMUl9CSVQoYWgsIChBUl9SVENfUkVTRVQpLAogCQkJICAgIEFSX1JUQ19SRVNFVF9FTik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX25ldHdvcmtfc2xlZXAoc3RydWN0IGF0aF9odyAqYWgsIGludCBzZXRDaGlwKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9TVEFfSUQxLCBBUl9TVEFfSUQxX1BXUl9TQVYpOwogCWlmIChzZXRDaGlwKSB7Ci0JCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAKIAkJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLApAQCAtMjY3OSw4ICsyNjg2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBpbnQgc2V0Q2hpcCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHNldENoaXApCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTI3MjEsMjAgKzI3MjcsMTggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewogCQkiQVdBS0UiLAogCQkiRlVMTC1TTEVFUCIsCiAJCSJORVRXT1JLIFNMRUVQIiwKIAkJIlVOREVGSU5FRCIKIAl9OwotCWludCBzdGF0dXMgPSB0cnVlLCBzZXRDaGlwID0gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsICIlcyAtPiAlcyAoJXMpXG4iLAotCQltb2Rlc1thaHAtPmFoX3Bvd2VyTW9kZV0sIG1vZGVzW21vZGVdLAorCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdLAogCQlzZXRDaGlwID8gInNldCBjaGlwICIgOiAiIik7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTI3NDMsNyArMjc0Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfUE1fRlVMTF9TTEVFUDoKIAkJYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKGFoLCBzZXRDaGlwKTsKLQkJYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gdHJ1ZTsKKwkJYWgtPmNoaXBfZnVsbHNsZWVwID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19QTV9ORVRXT1JLX1NMRUVQOgogCQlhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChhaCwgc2V0Q2hpcCk7CkBAIC0yNzUzLDQxICsyNzU3LDU3IEBACiAJCQkiVW5rbm93biBwb3dlciBtb2RlICV1XG4iLCBtb2RlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlhaHAtPmFoX3Bvd2VyTW9kZSA9IG1vZGU7CisJYWgtPnBvd2VyX21vZGUgPSBtb2RlOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSkKKy8qCisgKiBIZWxwZXIgZm9yIEFTUE0gc3VwcG9ydC4KKyAqCisgKiBEaXNhYmxlIFBMTCB3aGVuIGluIEwwcyBhcyB3ZWxsIGFzIHJlY2VpdmVyIGNsb2NrIHdoZW4gaW4gTDEuCisgKiBUaGlzIHBvd2VyIHNhdmluZyBvcHRpb24gbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggdGhlIFNlckRlcy4KKyAqCisgKiBQcm9ncmFtbWluZyB0aGUgU2VyRGVzIG11c3QgZ28gdGhyb3VnaCB0aGUgc2FtZSAyODggYml0IHNlcmlhbCBzaGlmdAorICogcmVnaXN0ZXIgYXMgdGhlIG90aGVyIGFuYWxvZyByZWdpc3RlcnMuICBIZW5jZSB0aGUgOSB3cml0ZXMuCisgKi8KK3ZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcmVzdG9yZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXU4IGk7CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcyAhPSB0cnVlKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcyAhPSB0cnVlKQogCQlyZXR1cm47CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwkvKiBEbyBub3QgdG91Y2ggU2VyRGVzIHJlZ2lzdGVycyAqLworCWlmIChhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9PSAyKQogCQlyZXR1cm47CiAKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIHJlc3RvcmUgZm9yIDExTiAqLwogCWlmIChyZXN0b3JlKQogCQlyZXR1cm47CiAKIAlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlQY2llU2VyZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJUkVHX1dSSVRFKGFoLCBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMCksCi0JCQkJICBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMSkpOworCQkvKgorCQkgKiBBUjkyODAgMi4wIG9yIGxhdGVyIGNoaXBzIHVzZSBTZXJEZXMgdmFsdWVzIGZyb20gdGhlCisJCSAqIGluaXR2YWxzLmggaW5pdGlhbGl6ZWQgZGVwZW5kaW5nIG9uIGNoaXBzZXQgZHVyaW5nCisJCSAqIGF0aDlrX2h3X2RvX2F0dGFjaCgpCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaVBjaWVTZXJkZXMuaWFfcm93czsgaSsrKSB7CisJCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDApLAorCQkJCSAgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMSkpOwogCQl9Ci0JCXVkZWxheSgxMDAwKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkgJiYKLQkJICAgKGFoLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzEwKSkgeworCQkgICAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmQwMCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjQ5MjQ5MjQpOwogCisJCS8qIFJYIHNodXQgb2ZmIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhhODAwMDAxOSk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MTMxNjA4MjApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGU1OTgwNTYwKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkKKwkJLyogU2h1dCBvZmYgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLworCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkKIAkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4NDAxZGVmZmMpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDQwMWRlZmZkKTsKQEAgLTI3OTYsNDIgKzI4MTYsNTkgQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhiZTEwNTU1NCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAwNDMwMDcpOwogCisJCS8qIExvYWQgdGhlIG5ldyBzZXR0aW5ncyAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiAKLQkJdWRlbGF5KDEwMDApOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDI0OTI0OTI0KTsKKworCQkvKiBSWCBzaHV0IG9mZiB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjgwMDAwMzkpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDUzMTYwODI0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhlNTk4MDU3OSk7CisKKwkJLyoKKwkJICogSWdub3JlIGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgc2V0dGluZyBmb3IKKwkJICogcHJlLUFSOTI4MCAxMW4KKwkJICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAxZGVmZmYpOworCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MWFhYWJlNDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGJlMTA1NTU0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgwMDBlMzAwNyk7CisKKwkJLyogTG9hZCB0aGUgbmV3IHNldHRpbmdzICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKIAl9CiAKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiBzZXQgYml0IDE5IHRvIGFsbG93IGZvcmNpbmcgb2YgcGNpZSBjb3JlIGludG8gTDEgc3RhdGUgKi8KIAlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBBUl9QQ0lFX1BNX0NUUkxfRU5BKTsKIAotCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfd2FlbikgewotCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+YWhfY29uZmlnLnBjaWVfd2Flbik7CisJLyogU2V2ZXJhbCBQQ0llIG1hc3NhZ2VzIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3VyICovCisJaWYgKGFoLT5jb25maWcucGNpZV93YWVuKSB7CisJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5jb25maWcucGNpZV93YWVuKTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKKwkJLyoKKwkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCisJCSAqIG90aGVyd2lzZSBjYXJkIG1heSBkaXNhcHBlYXIuCisJCSAqLwogCQllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQkJUkVHX1dSSVRFKGFoLCBBUl9XQSwgQVI5MjgwX1dBX0RFRkFVTFQpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBBUl9XQV9ERUZBVUxUKTsKIAl9Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIGhvc3RfaXNyOwogCkBAIC0yODUwLDE0ICsyODg3LDEzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpCitib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgKm1hc2tlZCkKIHsKIAl1MzIgaXNyID0gMDsKIAl1MzIgbWFzazIgPSAwOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAl1MzIgc3luY19jYXVzZSA9IDA7CiAJYm9vbCBmYXRhbF9pbnQgPSBmYWxzZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CiAJCWlmIChSRUdfUkVBRChhaCwgQVJfSU5UUl9BU1lOQ19DQVVTRSkgJiBBUl9JTlRSX01BQ19JUlEpIHsKQEAgLTI4OTUsNiArMjkzMSw4IEBACiAJCQkJbWFzazIgfD0gQVRIOUtfSU5UX0dUVDsKIAkJCWlmIChpc3IyICYgQVJfSVNSX1MyX0NTVCkKIAkJCQltYXNrMiB8PSBBVEg5S19JTlRfQ1NUOworCQkJaWYgKGlzcjIgJiBBUl9JU1JfUzJfVFNGT09SKQorCQkJCW1hc2syIHw9IEFUSDlLX0lOVF9UU0ZPT1I7CiAJCX0KIAogCQlpc3IgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1JBQyk7CkBAIC0yOTA1LDcgKzI5NDMsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKSB7CisJCWlmIChhaC0+aW50cl9taXRpZ2F0aW9uKSB7CiAJCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCiAJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CiAJCX0KQEAgLTI5MjAsMTIgKzI5NTgsMTIgQEAKIAkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX1RYOwogCiAJCQlzMF9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TMF9TKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWE9LKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWERFU0MpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYT0spOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYREVTQyk7CiAKIAkJCXMxX3MgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1MxX1MpOwotCQkJYWhwLT5haF9pbnRyVHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRVJSKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczFfcywgQVJfSVNSX1MxX1FDVV9UWEVPTCk7CisJCQlhaC0+aW50cl90eHFzIHw9IE1TKHMxX3MsIEFSX0lTUl9TMV9RQ1VfVFhFUlIpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRU9MKTsKIAkJfQogCiAJCWlmIChpc3IgJiBBUl9JU1JfUlhPUk4pIHsKQEAgLTI5ODIsMTcgKzMwMjAsMTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitlbnVtIGF0aDlrX2ludCBhdGg5a19od19pbnRyZ2V0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXJldHVybiBBSDU0MTYoYWgpLT5haF9tYXNrUmVnOworCXJldHVybiBhaC0+bWFza19yZWc7CiB9CiAKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JdTMyIG9tYXNrID0gYWhwLT5haF9tYXNrUmVnOworCXUzMiBvbWFzayA9IGFoLT5tYXNrX3JlZzsKIAl1MzIgbWFzaywgbWFzazI7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSU5URVJSVVBULCAiMHgleCA9PiAweCV4XG4iLCBvbWFzaywgaW50cyk7CiAKQEAgLTMwMTMsMTggKzMwNTAsMTggQEAKIAltYXNrMiA9IDA7CiAKIAlpZiAoaW50cyAmIEFUSDlLX0lOVF9UWCkgewotCQlpZiAoYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eG9rX2ludGVycnVwdF9tYXNrKQogCQkJbWFzayB8PSBBUl9JTVJfVFhPSzsKLQkJaWYgKGFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGRlc2NfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWERFU0M7Ci0JCWlmIChhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaykKIAkJCW1hc2sgfD0gQVJfSU1SX1RYRVJSOwotCQlpZiAoYWhwLT5haF90eEVvbEludGVycnVwdE1hc2spCisJCWlmIChhaC0+dHhlb2xfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWEVPTDsKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKQorCQlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKIAkJCW1hc2sgfD0gQVJfSU1SX1JYTUlOVFIgfCBBUl9JTVJfUlhJTlRNOwogCQllbHNlCiAJCQltYXNrIHw9IEFSX0lNUl9SWE9LIHwgQVJfSU1SX1JYREVTQzsKQEAgLTMwNDEsNyArMzA3OCw5IEBACiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQogCQkJbWFzazIgfD0gQVJfSU1SX1MyX0RUSU1TWU5DOwogCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9DQUJFTkQpCi0JCQltYXNrMiB8PSAoQVJfSU1SX1MyX0NBQkVORCk7CisJCQltYXNrMiB8PSBBUl9JTVJfUzJfQ0FCRU5EOworCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9UU0ZPT1IpCisJCQltYXNrMiB8PSBBUl9JTVJfUzJfVFNGT09SOwogCX0KIAogCWlmIChpbnRzICYgKEFUSDlLX0lOVF9HVFQgfCBBVEg5S19JTlRfQ1NUKSkgewpAQCAtMzA2Miw3ICszMTAxLDcgQEAKIAkJCQkJICAgQVJfSU1SX1MyX1RTRk9PUiB8CiAJCQkJCSAgIEFSX0lNUl9TMl9HVFQgfCBBUl9JTVJfUzJfQ1NUKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgbWFzayB8IG1hc2syKTsKLQlhaHAtPmFoX21hc2tSZWcgPSBpbnRzOworCWFoLT5tYXNrX3JlZyA9IGludHM7CiAKIAlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpIHsKIAkJaWYgKGludHMgJiBBVEg5S19JTlRfVElNX1RJTUVSKQpAQCAtMzA5NiwxNCArMzEzNSwxMyBAQAogLyogQmVhY29uIEhhbmRsaW5nICovCiAvKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKK3ZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBmbGFncyA9IDA7CiAKLQlhaHAtPmFoX2JlYWNvbkludGVydmFsID0gYmVhY29uX3BlcmlvZDsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gYmVhY29uX3BlcmlvZDsKIAotCXN3aXRjaCAoYWgtPmFoX29wbW9kZSkgeworCXN3aXRjaCAoYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKG5leHRfYmVhY29uKSk7CkBAIC0zMTEyLDIyICszMTUwLDIzIEBACiAJCWZsYWdzIHw9IEFSX1RCVFRfVElNRVJfRU47CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlSRUdfU0VUX0JJVChhaCwgQVJfVFhDRkcsCiAJCQkgICAgQVJfVFhDRkdfQURIT0NfQkVBQ09OX0FUSU1fVFhfUE9MSUNZKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX05EUF9USU1FUiwKIAkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiArCi0JCQkJICAgICAoYWhwLT5haF9hdGltV2luZG93ID8gYWhwLT4KLQkJCQkgICAgICBhaF9hdGltV2luZG93IDogMSkpKTsKKwkJCQkgICAgIChhaC0+YXRpbV93aW5kb3cgPyBhaC0+CisJCQkJICAgICAgYXRpbV93aW5kb3cgOiAxKSkpOwogCQlmbGFncyB8PSBBUl9ORFBfVElNRVJfRU47CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBkbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1NXQkEsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBzd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOwogCQlmbGFncyB8PQogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CkBAIC0zMTM1LDcgKzMxNzQsNyBAQAogCWRlZmF1bHQ6CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0JFQUNPTiwKIAkJCSIlczogdW5zdXBwb3J0ZWQgb3Btb2RlOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBhaC0+YWhfb3Btb2RlKTsKKwkJCV9fZnVuY19fLCBhaC0+b3Btb2RlKTsKIAkJcmV0dXJuOwogCQlicmVhazsKIAl9CkBAIC0zMTU0LDExICszMTkzLDExIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX1RJTUVSX01PREUsIGZsYWdzKTsKIH0KIAotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKQogewogCXUzMiBuZXh0VGJ0dCwgYmVhY29uaW50dmFsLCBkdGltcGVyaW9kLCBiZWFjb250aW1lb3V0OwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKGJzLT5ic19uZXh0dGJ0dCkpOwogCkBAIC0zMjEyLDQzICszMjUxLDQ2IEBACiAJCSAgICBBUl9UQlRUX1RJTUVSX0VOIHwgQVJfVElNX1RJTUVSX0VOIHwKIAkJICAgIEFSX0RUSU1fVElNRVJfRU4pOwogCisJLyogVFNGIE91dCBvZiBSYW5nZSBUaHJlc2hvbGQgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1RTRk9PUl9USFJFU0hPTEQsIGJzLT5ic190c2Zvb3JfdGhyZXNob2xkKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKiovCiAvKiBIVyBDYXBhYmlsaXRpZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXUxNiBjYXBGaWVsZCA9IDAsIGVldmFsOwogCi0JZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7CisJYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9IGVldmFsOwogCi0JYWgtPmFoX2N1cnJlbnRSRCA9IGVldmFsOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7CisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCWVldmFsIHw9IEFSOTI4NV9SREVYVF9ERUZBVUxUOworCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7Ci0JYWgtPmFoX2N1cnJlbnRSREV4dCA9IGVldmFsOworCWNhcEZpZWxkID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PUF9DQVApOwogCi0JY2FwRmllbGQgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKLQotCWlmIChhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9zdWJ2ZW5kb3JpZCA9PSBBUl9TVUJWRU5ET1JfSURfTkVXX0EpIHsKLQkJaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg2NCB8fCBhaC0+YWhfY3VycmVudFJEID09IDB4NjUpCi0JCQlhaC0+YWhfY3VycmVudFJEICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg0MSkKLQkJCWFoLT5haF9jdXJyZW50UkQgPSAweDQzOworCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgeworCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCisJCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPmFoX2N1cnJlbnRSRCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkKTsKIAl9CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PUF9NT0RFKTsKKwllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CiAJYml0bWFwX3plcm8ocENhcC0+d2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsKIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFBLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7Ci0JCWlmIChhaC0+YWhfY29uZmlnLmh0X2VuYWJsZSkgeworCQlpZiAoYWgtPmNvbmZpZy5odF9lbmFibGUpIHsKIAkJCWlmICghKGVldmFsICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwKSkKIAkJCQlzZXRfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLAogCQkJCQlwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CkBAIC0zMjY0LDcgKzMzMDYsNyBAQAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKLQkJaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKSB7CisJCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkgewogCQkJaWYgKCEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjApKQogCQkJCXNldF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsCiAJCQkJCXBDYXAtPndpcmVsZXNzX21vZGVzKTsKQEAgLTMyNzcsMTggKzMzMTksMTUgQEAKIAkJfQogCX0KIAotCXBDYXAtPnR4X2NoYWlubWFzayA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKLQlpZiAoKGFoLT5haF9pc1BjaUV4cHJlc3MpCi0JICAgIHx8IChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkpIHsKLQkJcENhcC0+cnhfY2hhaW5tYXNrID0KLQkJCWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKLQl9IGVsc2UgewotCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPQotCQkJKGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCAwKSkgPyAweDUgOiAweDc7Ci0JfQorCXBDYXAtPnR4X2NoYWlubWFzayA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhfTUFTSyk7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjU0MTZfREVWSURfUENJKSAmJgorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSkKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAotCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5haF9tYWNSZXYgPT0gMCkpKQotCQlhaHAtPmFoX21pc2NNb2RlIHw9IEFSX1BDVV9NSUNfTkVXX0xPQ19FTkE7CisJaWYgKCEoQVJfU1JFVl85MjgwKGFoKSAmJiAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IDApKSkKKwkJYWgtPm1pc2NfbW9kZSB8PSBBUl9QQ1VfTUlDX05FV19MT0NfRU5BOwogCiAJcENhcC0+bG93XzJnaHpfY2hhbiA9IDIzMTI7CiAJcENhcC0+aGlnaF8yZ2h6X2NoYW4gPSAyNzMyOwpAQCAtMzMwNiw3ICszMzQ1LDcgQEAKIAogCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFEOwogCi0JaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKQorCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfSFQ7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfSFQ7CkBAIC0zMzMyLDcgKzMzNzEsOSBAQAogCXBDYXAtPm51bV9tcl9yZXRyaWVzID0gNDsKIAlwQ2FwLT50eF90cmlnbGV2ZWxfbWF4ID0gTUFYX1RYX0ZJRk9fVEhSRVNIT0xEOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUjkyODVfTlVNX0dQSU87CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI4WF9OVU1fR1BJTzsKIAllbHNlCiAJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUl9OVU1fR1BJTzsKQEAgLTMzNTUsMjIgKzMzOTYsMjIgQEAKIAlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWFoLT5haF9yZnNpbGVudCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRl9TSUxFTlQpOwotCWlmIChhaC0+YWhfcmZzaWxlbnQgJiBFRVBfUkZTSUxFTlRfRU5BQkxFRCkgewotCQlhaC0+YWhfcmZraWxsX2dwaW8gPQotCQkJTVMoYWgtPmFoX3Jmc2lsZW50LCBFRVBfUkZTSUxFTlRfR1BJT19TRUwpOwotCQlhaC0+YWhfcmZraWxsX3BvbGFyaXR5ID0KLQkJCU1TKGFoLT5haF9yZnNpbGVudCwgRUVQX1JGU0lMRU5UX1BPTEFSSVRZKTsKKwlhaC0+cmZzaWxlbnQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JGX1NJTEVOVCk7CisJaWYgKGFoLT5yZnNpbGVudCAmIEVFUF9SRlNJTEVOVF9FTkFCTEVEKSB7CisJCWFoLT5yZmtpbGxfZ3BpbyA9CisJCQlNUyhhaC0+cmZzaWxlbnQsIEVFUF9SRlNJTEVOVF9HUElPX1NFTCk7CisJCWFoLT5yZmtpbGxfcG9sYXJpdHkgPQorCQkJTVMoYWgtPnJmc2lsZW50LCBFRVBfUkZTSUxFTlRfUE9MQVJJVFkpOwogCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1JGU0lMRU5UOwogCX0KICNlbmRpZgogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkgfHwKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApIHx8CisJICAgIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKIAkJcENhcC0+aHdfY2FwcyAmPSB+QVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKQEAgLTMzODAsNyArMzQyMSw3IEBACiAJZWxzZQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUzsKIAotCWlmIChhaC0+YWhfY3VycmVudFJERXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgeworCWlmIChhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCAmICgxIDw8IFJFR19FWFRfSkFQQU5fTUlEQkFORCkpIHsKIAkJcENhcC0+cmVnX2NhcCA9CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSB8CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiB8CkBAIC0zMzk1LDE5ICszNDM2LDIyIEBACiAJcENhcC0+cmVnX2NhcCB8PSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQ7CiAKIAlwQ2FwLT5udW1fYW50Y2ZnXzVnaHogPQotCQlhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CisJCWFoLT5lZXBfb3BzLT5nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CiAJcENhcC0+bnVtX2FudGNmZ18yZ2h6ID0KLQkJYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgeworCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOworCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7CisJCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19nZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFUSDlLX0NBUF9DSVBIRVI6CiAJCXN3aXRjaCAoY2FwYWJpbGl0eSkgewpAQCAtMzQyNiwyMyArMzQ3MCwxNyBAQAogCQljYXNlIDA6CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIChhaHAtPmFoX3N0YUlkMURlZmF1bHRzICYKKwkJCXJldHVybiAoYWgtPnN0YV9pZDFfZGVmYXVsdHMgJgogCQkJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKSA/IHRydWUgOgogCQkJZmFsc2U7CiAJCX0KIAljYXNlIEFUSDlLX0NBUF9US0lQX1NQTElUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKSA/CisJCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KIAkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9XTUVfVEtJUE1JQzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBBVEg5S19DQVBfUEhZQ09VTlRFUlM6Ci0JCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyAwIDogLUVOWElPOwogCWNhc2UgQVRIOUtfQ0FQX0RJVkVSU0lUWToKIAkJcmV0dXJuIChSRUdfUkVBRChhaCwgQVJfUEhZX0NDS19ERVRFQ1QpICYKIAkJCUFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpID8KIAkJCXRydWUgOiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9QSFlESUFHOgotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNIOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKIAkJY2FzZSAwOgpAQCAtMzQ1MSw1NyArMzQ4OSw0OCBAQAogCQkJaWYgKFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSAmIEFSX1NUQV9JRDFfQURIT0MpIHsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCXJldHVybiAoYWhwLT5haF9zdGFJZDFEZWZhdWx0cyAmCisJCQkJcmV0dXJuIChhaC0+c3RhX2lkMV9kZWZhdWx0cyAmCiAJCQkJCUFSX1NUQV9JRDFfTUNBU1RfS1NSQ0gpID8gdHJ1ZSA6CiAJCQkJCWZhbHNlOwogCQkJfQogCQl9CiAJCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfVFhfQUREX1RTRikgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1JGU0lMRU5UOgotCQlpZiAoY2FwYWJpbGl0eSA9PSAzKQotCQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX0FOVF9DRkdfMkdIWjoKLQkJKnJlc3VsdCA9IHBDYXAtPm51bV9hbnRjZmdfMmdoejsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfQU5UX0NGR181R0haOgotCQkqcmVzdWx0ID0gcENhcC0+bnVtX2FudGNmZ181Z2h6OwotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9UWFBPVzoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3Bvd2VyTGltaXQ7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQ7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSAyOgotCQkJKnJlc3VsdCA9IGFoLT5haF9tYXhQb3dlckxldmVsOworCQkJKnJlc3VsdCA9IGFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3RwU2NhbGU7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBBVEg5S19DQVBfRFM6CisJCXJldHVybiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkNfQ0hBSU5fTUFTSykgPT0gMSkpCisJCQk/IGZhbHNlIDogdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgdjsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQVRIOUtfQ0FQX1RLSVBfTUlDOgogCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgfD0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzIHw9CiAJCQkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7CiAJCWVsc2UKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgJj0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzICY9CiAJCQkJfkFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9ESVZFUlNJVFk6CkBAIC0zNTE0LDE1ICszNTQzLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKIAkJaWYgKHNldHRpbmcpCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzIHw9IEFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CisJCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwogCQllbHNlCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzICY9IH5BUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7Ci0JCWVsc2UKLQkJCWFocC0+YWhfbWlzY01vZGUgJj0gfkFSX1BDVV9UWF9BRERfVFNGOworCQkJYWgtPnN0YV9pZDFfZGVmYXVsdHMgJj0gfkFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTM1MzMsNyArMzU1Niw3IEBACiAvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19ncGlvX2NmZ19vdXRwdXRfbXV4KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dwaW9fY2ZnX291dHB1dF9tdXgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSB1MzIgZ3BpbywgdTMyIHR5cGUpCiB7CiAJaW50IGFkZHI7CkBAIC0zNTYxLDExICszNTg0LDExIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pCit2b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAl1MzIgZ3Bpb19zaGlmdDsKIAotCUFTU0VSVChncGlvIDwgYWgtPmFoX2NhcHMubnVtX2dwaW9fcGlucyk7CisJQVNTRVJUKGdwaW8gPCBhaC0+Y2Fwcy5udW1fZ3Bpb19waW5zKTsKIAogCWdwaW9fc2hpZnQgPSBncGlvIDw8IDE7CiAKQEAgLTM1NzUsMjIgKzM1OTgsMjMgQEAKIAkJKEFSX0dQSU9fT0VfT1VUX0RSViA8PCBncGlvX3NoaWZ0KSk7CiB9CiAKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKQordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+PSBhaC0+YWhfY2Fwcy5udW1fZ3Bpb19waW5zKQorI2RlZmluZSBNU19SRUdfUkVBRCh4LCB5KSBcCisJKE1TKFJFR19SRUFEKGFoLCBBUl9HUElPX0lOX09VVCksIHgjI19HUElPX0lOX1ZBTCkgJiAoQVJfR1BJT19CSVQoeSkpKQorCisJaWYgKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlyZXR1cm4gKE1TCi0JCQkoUkVHX1JFQUQoYWgsIEFSX0dQSU9fSU5fT1VUKSwKLQkJCSBBUjkyOFhfR1BJT19JTl9WQUwpICYgQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChNUyhSRUdfUkVBRChhaCwgQVJfR1BJT19JTl9PVVQpLCBBUl9HUElPX0lOX1ZBTCkgJgotCQkJQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfQorCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5Mjg1LCBncGlvKSAhPSAwOworCWVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyOFgsIGdwaW8pICE9IDA7CisJZWxzZQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVIsIGdwaW8pICE9IDA7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKIAkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpCiB7CiAJdTMyIGdwaW9fc2hpZnQ7CkBAIC0zNjA1LDE0ICszNjI5LDE0IEBACiAJCShBUl9HUElPX09FX09VVF9EUlYgPDwgZ3Bpb19zaGlmdCkpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpCit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCkKIHsKIAlSRUdfUk1XKGFoLCBBUl9HUElPX0lOX09VVCwgKCh2YWwgJiAxKSA8PCBncGlvKSwKIAkJQVJfR1BJT19CSVQoZ3BpbykpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCiAJCSAgICBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQik7CkBAIC0zNjIwLDUwICszNjQ0LDI4IEBACiAJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMiwKIAkJICAgIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCk7CiAKLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPnJma2lsbF9ncGlvKTsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RFU1QsIFJGU0lMRU5UX0JCKTsKIH0KICNlbmRpZgogCi1pbnQgYXRoOWtfaHdfc2VsZWN0X2FudGNvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjZmcpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOwotCXUxNiBhbnRfY29uZmlnOwotCXUzMiBoYWxOdW1BbnRDb25maWc7Ci0KLQloYWxOdW1BbnRDb25maWcgPSBJU19DSEFOXzJHSFooY2hhbikgPwotCQlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogOiBwQ2FwLT5udW1fYW50Y2ZnXzVnaHo7Ci0KLQlpZiAoY2ZnIDwgaGFsTnVtQW50Q29uZmlnKSB7Ci0JCWlmICghYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwKLQkJCQkJCSAgICAgY2ZnLCAmYW50X2NvbmZpZykpIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoKQordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIFJFR19SRUFEKGFoLCBBUl9ERUZfQU5URU5OQSkgJiAweDc7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBhbnRlbm5hKQordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCAoYW50ZW5uYSAmIDB4NykpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCiAJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKIAkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAogCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdGF0aWMgdTggdHhfY2hhaW5tYXNrX2NmZywgcnhfY2hhaW5tYXNrX2NmZzsKIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CkBAIC0zNjgwLDcgKzM2ODIsNyBAQAogCQkJKmFudGVubmFfY2ZnZCA9IHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVEg5S19BTlRfRklYRURfQjoKLQkJCWlmIChhaC0+YWhfY2Fwcy50eF9jaGFpbm1hc2sgPgorCQkJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayA+CiAJCQkgICAgQVRIOUtfQU5URU5OQTFfQ0hBSU5NQVNLKSB7CiAJCQkJKnR4X2NoYWlubWFzayA9IEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSzsKIAkJCX0KQEAgLTM2OTYsNyArMzY5OCw3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IHNldHRpbmdzOworCQlhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MDYsNyArMzcwOCw3IEBACiAvKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCkKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgYml0cyA9IFJFR19SRUFEKGFoLCBBUl9SWF9GSUxURVIpOwogCXUzMiBwaHliaXRzID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlIpOwpAQCAtMzcxOSw3ICszNzIxLDcgQEAKIAlyZXR1cm4gYml0czsKIH0KIAotdm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBiaXRzKQordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpCiB7CiAJdTMyIHBoeWJpdHM7CiAKQEAgLTM3MzksMTIgKzM3NDEsMTIgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19aTEZETUEpOwogfQogCi1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pOwogfQogCi1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzc1Miw4MiArMzc1NCw1NCBAQAogCXJldHVybiBhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9DT0xEKTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGxpbWl0KQorYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+YWhfcG93ZXJMaW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCWFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKLQlpZiAoYXRoOWtfaHdfc2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwgY2hhbiksCi0JCQkJIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICAgICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpICE9IDApCisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKQordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCW1lbWNweShtYWMsIGFocC0+YWhfbWFjYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhaC0+bWFjYWRkciwgbWFjLCBFVEhfQUxFTik7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYykKK3ZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQotCXJldHVybiB0cnVlOworCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPm9wbW9kZSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoYWgsIGFoLT5haF9vcG1vZGUpOwotfQotCi12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQogewogCVJFR19XUklURShhaCwgQVJfTUNBU1RfRklMMCwgZmlsdGVyMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NQ0FTVF9GSUwxLCBmaWx0ZXIxKTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFzaykKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkobWFzaywgYWhwLT5haF9ic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShzYy0+c2NfYWgsIEFSX0JTU01TS1UsIGdldF91bmFsaWduZWRfbGUxNihzYy0+YnNzaWRtYXNrICsgNCkpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGNvbnN0IHU4ICptYXNrKQordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9ic3NpZG1hc2ssIG1hc2ssIEVUSF9BTEVOKTsKLQotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmN1cmJzc2lkKSk7CisJUkVHX1dSSVRFKHNjLT5zY19haCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIH0KIAotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JbWVtY3B5KGFocC0+YWhfYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYWhwLT5haF9hc3NvY0lkID0gYXNzb2NJZDsKLQotCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWQpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDEsIGdldF91bmFsaWduZWRfbGUxNihhaHAtPmFoX2Jzc2lkICsgNCkgfAotCQkgICgoYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOwotfQotCi11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKQordTY0IGF0aDlrX2h3X2dldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXU2NCB0c2Y7CiAKQEAgLTM4MzcsNyArMzgxMSwxMyBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgsIHU2NCB0c2Y2NCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIHRzZjY0ICYgMHhmZmZmZmZmZik7CisJUkVHX1dSSVRFKGFoLCBBUl9UU0ZfVTMyLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBjb3VudDsKIApAQCAtMzg1NCw0MiArMzgzNCw2NSBAQAogCVJFR19XUklURShhaCwgQVJfUkVTRVRfVFNGLCBBUl9SRVNFVF9UU0ZfT05DRSk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKQorYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHNldHRpbmcpCi0JCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CisJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CiAJZWxzZQotCQlhaHAtPmFoX21pc2NNb2RlICY9IH5BUl9QQ1VfVFhfQUREX1RTRjsKKwkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1cykKK2Jvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOworCQlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX3Nsb3R0aW1lID0gdXM7CisJCWFoLT5zbG90dGltZSA9IHVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKQordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSkKIHsKIAl1MzIgbWFjbW9kZTsKIAogCWlmIChtb2RlID09IEFUSDlLX0hUX01BQ01PREVfMjA0MCAmJgotCSAgICAhYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSkKKwkgICAgIWFoLT5jb25maWcuY3dtX2lnbm9yZV9leHRjY2EpCiAJCW1hY21vZGUgPSBBUl8yMDQwX0pPSU5FRF9SWF9DTEVBUjsKIAllbHNlCiAJCW1hY21vZGUgPSAwOwogCiAJUkVHX1dSSVRFKGFoLCBBUl8yMDQwX01PREUsIG1hY21vZGUpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIEJsdWV0b290aCBDb2V4aXN0ZW5jZSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwkvKiBjb25uZWN0IGJ0X2FjdGl2ZSB0byBiYXNlYmFuZCAqLworCVJFR19DTFJfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYpKTsKKworCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIEdQSU8gcG9ydCBmb3IgVFhfRlJBTUUgb3V0cHV0ICovCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPndsYW5hY3RpdmVfZ3BpbywKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKaW5kZXggOTFkOGY1OTQuLjBiNTk0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE5LDkzNiArMTksNDMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi1zdHJ1Y3QgYXI1NDE2X2Rlc2MgewotCXUzMiBkc19saW5rOwotCXUzMiBkc19kYXRhOwotCXUzMiBkc19jdGwwOwotCXUzMiBkc19jdGwxOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXUzMiBjdGwyOwotCQkJdTMyIGN0bDM7Ci0JCQl1MzIgY3RsNDsKLQkJCXUzMiBjdGw1OwotCQkJdTMyIGN0bDY7Ci0JCQl1MzIgY3RsNzsKLQkJCXUzMiBjdGw4OwotCQkJdTMyIGN0bDk7Ci0JCQl1MzIgY3RsMTA7Ci0JCQl1MzIgY3RsMTE7Ci0JCQl1MzIgc3RhdHVzMDsKLQkJCXUzMiBzdGF0dXMxOwotCQkJdTMyIHN0YXR1czI7Ci0JCQl1MzIgc3RhdHVzMzsKLQkJCXUzMiBzdGF0dXM0OwotCQkJdTMyIHN0YXR1czU7Ci0JCQl1MzIgc3RhdHVzNjsKLQkJCXUzMiBzdGF0dXM3OwotCQkJdTMyIHN0YXR1czg7Ci0JCQl1MzIgc3RhdHVzOTsKLQkJfSB0eDsKLQkJc3RydWN0IHsKLQkJCXUzMiBzdGF0dXMwOwotCQkJdTMyIHN0YXR1czE7Ci0JCQl1MzIgc3RhdHVzMjsKLQkJCXUzMiBzdGF0dXMzOwotCQkJdTMyIHN0YXR1czQ7Ci0JCQl1MzIgc3RhdHVzNTsKLQkJCXUzMiBzdGF0dXM2OwotCQkJdTMyIHN0YXR1czc7Ci0JCQl1MzIgc3RhdHVzODsKLQkJfSByeDsKLQl9IHU7Ci19IF9fcGFja2VkOworI2luY2x1ZGUgIm1hYy5oIgorI2luY2x1ZGUgImFuaS5oIgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImNhbGliLmgiCisjaW5jbHVkZSAicmVnZC5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgInBoeS5oIgogCi0jZGVmaW5lIEFSNTQxNkRFU0MoX2RzKSAgICAgICAgICgoc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCi0jZGVmaW5lIEFSNTQxNkRFU0NfQ09OU1QoX2RzKSAgICgoY29uc3Qgc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisjZGVmaW5lIEFUSEVST1NfVkVORE9SX0lECTB4MTY4YworI2RlZmluZSBBUjU0MTZfREVWSURfUENJCTB4MDAyMworI2RlZmluZSBBUjU0MTZfREVWSURfUENJRQkweDAwMjQKKyNkZWZpbmUgQVI5MTYwX0RFVklEX1BDSQkweDAwMjcKKyNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSQkweDAwMjkKKyNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSUUJMHgwMDJhCisjZGVmaW5lIEFSOTI4NV9ERVZJRF9QQ0lFCTB4MDAyYgorI2RlZmluZSBBUjU0MTZfQVI5MTAwX0RFVklECTB4MDAwYgorI2RlZmluZQlBUl9TVUJWRU5ET1JfSURfTk9HCTB4MGUxMQorI2RlZmluZSBBUl9TVUJWRU5ET1JfSURfTkVXX0EJMHg3MDY1CisjZGVmaW5lIEFSNTQxNl9NQUdJQwkJMHgxOTY0MTAxNAogCi0jZGVmaW5lIGRzX2N0bDIgICAgIHUudHguY3RsMgotI2RlZmluZSBkc19jdGwzICAgICB1LnR4LmN0bDMKLSNkZWZpbmUgZHNfY3RsNCAgICAgdS50eC5jdGw0Ci0jZGVmaW5lIGRzX2N0bDUgICAgIHUudHguY3RsNQotI2RlZmluZSBkc19jdGw2ICAgICB1LnR4LmN0bDYKLSNkZWZpbmUgZHNfY3RsNyAgICAgdS50eC5jdGw3Ci0jZGVmaW5lIGRzX2N0bDggICAgIHUudHguY3RsOAotI2RlZmluZSBkc19jdGw5ICAgICB1LnR4LmN0bDkKLSNkZWZpbmUgZHNfY3RsMTAgICAgdS50eC5jdGwxMAotI2RlZmluZSBkc19jdGwxMSAgICB1LnR4LmN0bDExCisvKiBSZWdpc3RlciByZWFkL3dyaXRlIHByaW1pdGl2ZXMgKi8KKyNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgYXRoOWtfaW93cml0ZTMyKChfYWgpLCAoX3JlZyksIChfdmFsKSkKKyNkZWZpbmUgUkVHX1JFQUQoX2FoLCBfcmVnKSBhdGg5a19pb3JlYWQzMigoX2FoKSwgKF9yZWcpKQogCi0jZGVmaW5lIGRzX3R4c3RhdHVzMCAgICB1LnR4LnN0YXR1czAKLSNkZWZpbmUgZHNfdHhzdGF0dXMxICAgIHUudHguc3RhdHVzMQotI2RlZmluZSBkc190eHN0YXR1czIgICAgdS50eC5zdGF0dXMyCi0jZGVmaW5lIGRzX3R4c3RhdHVzMyAgICB1LnR4LnN0YXR1czMKLSNkZWZpbmUgZHNfdHhzdGF0dXM0ICAgIHUudHguc3RhdHVzNAotI2RlZmluZSBkc190eHN0YXR1czUgICAgdS50eC5zdGF0dXM1Ci0jZGVmaW5lIGRzX3R4c3RhdHVzNiAgICB1LnR4LnN0YXR1czYKLSNkZWZpbmUgZHNfdHhzdGF0dXM3ICAgIHUudHguc3RhdHVzNwotI2RlZmluZSBkc190eHN0YXR1czggICAgdS50eC5zdGF0dXM4Ci0jZGVmaW5lIGRzX3R4c3RhdHVzOSAgICB1LnR4LnN0YXR1czkKLQotI2RlZmluZSBkc19yeHN0YXR1czAgICAgdS5yeC5zdGF0dXMwCi0jZGVmaW5lIGRzX3J4c3RhdHVzMSAgICB1LnJ4LnN0YXR1czEKLSNkZWZpbmUgZHNfcnhzdGF0dXMyICAgIHUucnguc3RhdHVzMgotI2RlZmluZSBkc19yeHN0YXR1czMgICAgdS5yeC5zdGF0dXMzCi0jZGVmaW5lIGRzX3J4c3RhdHVzNCAgICB1LnJ4LnN0YXR1czQKLSNkZWZpbmUgZHNfcnhzdGF0dXM1ICAgIHUucnguc3RhdHVzNQotI2RlZmluZSBkc19yeHN0YXR1czYgICAgdS5yeC5zdGF0dXM2Ci0jZGVmaW5lIGRzX3J4c3RhdHVzNyAgICB1LnJ4LnN0YXR1czcKLSNkZWZpbmUgZHNfcnhzdGF0dXM4ICAgIHUucnguc3RhdHVzOAotCi0jZGVmaW5lIEFSX0ZyYW1lTGVuICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9WaXJ0TW9yZUZyYWcgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkMDAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIEFSX1htaXRQb3dlciAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBBUl9YbWl0UG93ZXJfUyAgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0VuYWJsZSAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBBUl9WRU9MICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgQVJfQ2xyRGVzdE1hc2sgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDAxICAgICAgMHgxZTAwMDAwMAotI2RlZmluZSBBUl9UeEludHJSZXEgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgQVJfRGVzdElkeFZhbGlkICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEFSX0NUU0VuYWJsZSAgICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9UeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfRGVzdElkeCAgICAgICAgICAweDAwMGZlMDAwCi0jZGVmaW5lIEFSX0Rlc3RJZHhfUyAgICAgICAgMTMKLSNkZWZpbmUgQVJfRnJhbWVUeXBlICAgICAgICAweDAwZjAwMDAwCi0jZGVmaW5lIEFSX0ZyYW1lVHlwZV9TICAgICAgMjAKLSNkZWZpbmUgQVJfTm9BY2sgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEFSX0luc2VydFRTICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBBUl9Db3JydXB0RkNTICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgQVJfRXh0T25seSAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEFSX0V4dEFuZEN0bCAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBBUl9Nb3JlQWdnciAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgQVJfSXNBZ2dyICAgICAgICAgICAweDQwMDAwMDAwCi0KLSNkZWZpbmUgQVJfQnVyc3REdXIgICAgICAgICAweDAwMDA3ZmZmCi0jZGVmaW5lIEFSX0J1cnN0RHVyX1MgICAgICAgMAotI2RlZmluZSBBUl9EdXJVcGRhdGVFbmEgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczAgICAweDAwMGYwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwX1MgMTYKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczEgICAweDAwZjAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxX1MgMjAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczIgICAweDBmMDAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyX1MgMjQKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczMgICAweGYwMDAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzX1MgMjgKLQotI2RlZmluZSBBUl9YbWl0UmF0ZTAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfWG1pdFJhdGUwX1MgICAgICAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMSAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9YbWl0UmF0ZTFfUyAgICAgIDgKLSNkZWZpbmUgQVJfWG1pdFJhdGUyICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMl9TICAgICAgMTYKLSNkZWZpbmUgQVJfWG1pdFJhdGUzICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEFSX1htaXRSYXRlM19TICAgICAgMjQKLQotI2RlZmluZSBBUl9QYWNrZXREdXIwICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfUGFja2V0RHVyMF9TICAgICAwCi0jZGVmaW5lIEFSX1JUU0NUU1F1YWwwICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIxICAgICAgIDB4N2ZmZjAwMDAKLSNkZWZpbmUgQVJfUGFja2V0RHVyMV9TICAgICAxNgotI2RlZmluZSBBUl9SVFNDVFNRdWFsMSAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9QYWNrZXREdXIyICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfUGFja2V0RHVyMl9TICAgICAwCi0jZGVmaW5lIEFSX1JUU0NUU1F1YWwyICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIzICAgICAgIDB4N2ZmZjAwMDAKLSNkZWZpbmUgQVJfUGFja2V0RHVyM19TICAgICAxNgotI2RlZmluZSBBUl9SVFNDVFNRdWFsMyAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9BZ2dyTGVuICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgQVJfQWdnckxlbl9TICAgICAgICAwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDYwICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBBUl9QYWREZWxpbSAgICAgICAgIDB4MDNmYzAwMDAKLSNkZWZpbmUgQVJfUGFkRGVsaW1fUyAgICAgICAxOAotI2RlZmluZSBBUl9FbmNyVHlwZSAgICAgICAgIDB4MGMwMDAwMDAKLSNkZWZpbmUgQVJfRW5jclR5cGVfUyAgICAgICAyNgotI2RlZmluZSBBUl9UeEN0bFJzdmQ2MSAgICAgIDB4ZjAwMDAwMDAKLQotI2RlZmluZSBBUl8yMDQwXzAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfR0kwICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX0NoYWluU2VsMCAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBBUl9DaGFpblNlbDBfUyAgICAgIDIKLSNkZWZpbmUgQVJfMjA0MF8xICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEFSX0dJMSAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBBUl9DaGFpblNlbDEgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwxX1MgICAgICA3Ci0jZGVmaW5lIEFSXzIwNDBfMiAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBBUl9HSTIgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwyICAgICAgICAweDAwMDA3MDAwCi0jZGVmaW5lIEFSX0NoYWluU2VsMl9TICAgICAgMTIKLSNkZWZpbmUgQVJfMjA0MF8zICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX0dJMyAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBBUl9DaGFpblNlbDMgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwzX1MgICAgICAxNwotI2RlZmluZSBBUl9SVFNDVFNSYXRlICAgICAgIDB4MGZmMDAwMDAKLSNkZWZpbmUgQVJfUlRTQ1RTUmF0ZV9TICAgICAyMAotI2RlZmluZSBBUl9UeEN0bFJzdmQ3MCAgICAgIDB4ZjAwMDAwMDAKLQotI2RlZmluZSBBUl9UeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDBfUyAgICAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9UeFJTU0lBbnQwMV9TICAgIDgKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAyX1MgICAgMTYKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDAgICAweDNmMDAwMDAwCi0jZGVmaW5lIEFSX1R4QmFTdGF0dXMgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMSAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9Gcm1YbWl0T0sgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX0V4Y2Vzc2l2ZVJldHJpZXMgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfRklGT1VuZGVycnVuICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9GaWx0ZXJlZCAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1JUU0ZhaWxDbnQgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgQVJfUlRTRmFpbENudF9TICAgICAgICAgNAotI2RlZmluZSBBUl9EYXRhRmFpbENudCAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIEFSX0RhdGFGYWlsQ250X1MgICAgICAgIDgKLSNkZWZpbmUgQVJfVmlydFJldHJ5Q250ICAgICAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnRfUyAgICAgICAxMgotI2RlZmluZSBBUl9UeERlbGltVW5kZXJydW4gICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX1R4RGF0YVVuZGVycnVuICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQVJfRGVzY0NmZ0VyciAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBBUl9UeFRpbWVyRXhwaXJlZCAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDEwICAgICAgIDB4ZmZmMDAwMDAKLQotI2RlZmluZSBBUl9TZW5kVGltZXN0YW1wICAgIGRzX3R4c3RhdHVzMgotI2RlZmluZSBBUl9CYUJpdG1hcExvdyAgICAgIGRzX3R4c3RhdHVzMwotI2RlZmluZSBBUl9CYUJpdG1hcEhpZ2ggICAgIGRzX3R4c3RhdHVzNAotCi0jZGVmaW5lIEFSX1R4UlNTSUFudDEwICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9UeFJTU0lBbnQxMF9TICAgIDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTEgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDExX1MgICAgOAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMiAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTJfUyAgICAxNgotI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZCAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWRfUyAyNAotCi0jZGVmaW5lIEFSX1R4RVZNMCAgICAgICAgICAgZHNfdHhzdGF0dXM1Ci0jZGVmaW5lIEFSX1R4RVZNMSAgICAgICAgICAgZHNfdHhzdGF0dXM2Ci0jZGVmaW5lIEFSX1R4RVZNMiAgICAgICAgICAgZHNfdHhzdGF0dXM3Ci0KLSNkZWZpbmUgQVJfVHhEb25lICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1NlcU51bSAgICAgICAgICAgMHgwMDAwMWZmZQotI2RlZmluZSBBUl9TZXFOdW1fUyAgICAgICAgIDEKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODAgICAweDAwMDFlMDAwCi0jZGVmaW5lIEFSX1R4T3BFeGNlZWRlZCAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MSAgIDB4MDAxYzAwMDAKLSNkZWZpbmUgQVJfRmluYWxUeElkeCAgICAgICAweDAwNjAwMDAwCi0jZGVmaW5lIEFSX0ZpbmFsVHhJZHhfUyAgICAgMjEKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODIgICAweDAxODAwMDAwCi0jZGVmaW5lIEFSX1Bvd2VyTWdtdCAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MyAgIDB4ZmMwMDAwMDAKLQotI2RlZmluZSBBUl9SeENUTFJzdmQwMCAgMHhmZmZmZmZmZgotCi0jZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1J4Q3RsUnN2ZDAwICAweDAwMDAxMDAwCi0jZGVmaW5lIEFSX1J4SW50clJlcSAgICAweDAwMDAyMDAwCi0jZGVmaW5lIEFSX1J4Q3RsUnN2ZDAxICAweGZmZmZjMDAwCi0KLSNkZWZpbmUgQVJfUnhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAwX1MgICAgMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDFfUyAgICA4Ci0jZGVmaW5lIEFSX1J4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMl9TICAgIDE2Ci0jZGVmaW5lIEFSX1J4UmF0ZSAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9SeFJhdGVfUyAgICAgICAgIDI0Ci0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDAwICAgMHhmZjAwMDAwMAotCi0jZGVmaW5lIEFSX0RhdGFMZW4gICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9SeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfTnVtRGVsaW0gICAgICAgICAweDAwM2ZjMDAwCi0jZGVmaW5lIEFSX051bURlbGltX1MgICAgICAgMTQKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMTAgICAweGZmODAwMDAwCi0KLSNkZWZpbmUgQVJfUmN2VGltZXN0YW1wICAgICBkc19yeHN0YXR1czIKLQotI2RlZmluZSBBUl9HSSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfMjA0MCAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX1BhcmFsbGVsNDAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9QYXJhbGxlbDQwX1MgICAgIDIKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMzAgICAweDAwMDAwMGY4Ci0jZGVmaW5lIEFSX1J4QW50ZW5uYQkgICAgMHhmZmZmZmYwMAotI2RlZmluZSBBUl9SeEFudGVubmFfUwkgICAgOAotCi0jZGVmaW5lIEFSX1J4UlNTSUFudDEwICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9SeFJTU0lBbnQxMF9TICAgICAgICAgIDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTEgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDExX1MgICAgICAgICAgOAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMiAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTJfUyAgICAgICAgICAxNgotI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZCAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWRfUyAgICAgICAyNAotCi0jZGVmaW5lIEFSX1J4RVZNMCAgICAgICAgICAgZHNfcnhzdGF0dXM0Ci0jZGVmaW5lIEFSX1J4RVZNMSAgICAgICAgICAgZHNfcnhzdGF0dXM1Ci0jZGVmaW5lIEFSX1J4RVZNMiAgICAgICAgICAgZHNfcnhzdGF0dXM2Ci0KLSNkZWZpbmUgQVJfUnhEb25lICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1J4RnJhbWVPSyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9DUkNFcnIgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQVJfRGVjcnlwdENSQ0VyciAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1BIWUVyciAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBUl9NaWNoYWVsRXJyICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfUHJlRGVsaW1DUkNFcnIgICAweDAwMDAwMDQwCi0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcwICAgMHgwMDAwMDA4MAotI2RlZmluZSBBUl9SeEtleUlkeFZhbGlkICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgQVJfS2V5SWR4ICAgICAgICAgICAweDAwMDBmZTAwCi0jZGVmaW5lIEFSX0tleUlkeF9TICAgICAgICAgOQotI2RlZmluZSBBUl9QSFlFcnJDb2RlICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUEhZRXJyQ29kZV9TICAgICA4Ci0jZGVmaW5lIEFSX1J4TW9yZUFnZ3IgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBBUl9SeEFnZ3IgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQVJfUG9zdERlbGltQ1JDRXJyICAweDAwMDQwMDAwCi0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcxICAgMHgzZmY4MDAwMAotI2RlZmluZSBBUl9EZWNyeXB0QnVzeUVyciAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgQVJfS2V5TWlzcyAgICAgICAgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgQVI1NDE2X01BR0lDICAgICAgICAweDE5NjQxMDE0Ci0KLSNkZWZpbmUgUlhTVEFUVVNfUkFURShhaCwgYWRzKSAgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpID8JXAotCQkJCSBNUyhhZHMtPmRzX3J4c3RhdHVzMCwgQVJfUnhSYXRlKSA6CVwKLQkJCQkgKGFkcy0+ZHNfcnhzdGF0dXMzID4+IDIpICYgMHhGRikKLQotI2RlZmluZSBzZXQxMW5Ucmllcyhfc2VyaWVzLCBfaW5kZXgpIFwKLQkoU00oKF9zZXJpZXMpW19pbmRleF0uVHJpZXMsIEFSX1htaXREYXRhVHJpZXMjI19pbmRleCkpCi0KLSNkZWZpbmUgc2V0MTFuUmF0ZShfc2VyaWVzLCBfaW5kZXgpIFwKLQkoU00oKF9zZXJpZXMpW19pbmRleF0uUmF0ZSwgQVJfWG1pdFJhdGUjI19pbmRleCkpCi0KLSNkZWZpbmUgc2V0MTFuUGt0RHVyUlRTQ1RTKF9zZXJpZXMsIF9pbmRleCkJCQkJXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5Qa3REdXJhdGlvbiwgQVJfUGFja2V0RHVyIyNfaW5kZXgpIHwJXAotCSgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgICA/CVwKLQkJQVJfUlRTQ1RTUXVhbCMjX2luZGV4IDogMCkpCi0KLSNkZWZpbmUgc2V0MTFuUmF0ZUZsYWdzKF9zZXJpZXMsIF9pbmRleCkJCQkJXAotCSgoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU18yMDQwID8JCVwKLQkgIEFSXzIwNDBfIyNfaW5kZXggOiAwKQkJCQkJCVwKLQkgfCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSA/CVwKLQkgICBBUl9HSSMjX2luZGV4IDogMCkJCQkJCQlcCi0JIHxTTSgoX3NlcmllcylbX2luZGV4XS5DaFNlbCwgQVJfQ2hhaW5TZWwjI19pbmRleCkpCi0KLSNkZWZpbmUgQVJfU1JFVl85MTAwKGFoKSAoKGFoLT5haF9tYWNWZXJzaW9uKSA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkKLQotI2RlZmluZSBJTklUX0NPTkZJR19TVEFUVVMgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSU5JVF9SU1NJX1RIUiAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIElOSVRfQkNPTl9DTlRSTF9SRUcgMHgwMDAwMDAwMAotCi0jZGVmaW5lIE1JTl9UWF9GSUZPX1RIUkVTSE9MRCAgIDB4MQotI2RlZmluZSBNQVhfVFhfRklGT19USFJFU0hPTEQgICAoKDQwOTYgLyA2NCkgLSAxKQotI2RlZmluZSBJTklUX1RYX0ZJRk9fVEhSRVNIT0xEICBNSU5fVFhfRklGT19USFJFU0hPTEQKLQotc3RydWN0IGFyNTQxNkFuaVN0YXRlIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCBjOwotCXU4IG5vaXNlSW1tdW5pdHlMZXZlbDsKLQl1OCBzcHVySW1tdW5pdHlMZXZlbDsKLQl1OCBmaXJzdGVwTGV2ZWw7Ci0JdTggb2ZkbVdlYWtTaWdEZXRlY3RPZmY7Ci0JdTggY2NrV2Vha1NpZ1RocmVzaG9sZDsKLQl1MzIgbGlzdGVuVGltZTsKLQl1MzIgb2ZkbVRyaWdIaWdoOwotCXUzMiBvZmRtVHJpZ0xvdzsKLQlpbnQzMl90IGNja1RyaWdIaWdoOwotCWludDMyX3QgY2NrVHJpZ0xvdzsKLQlpbnQzMl90IHJzc2lUaHJMb3c7Ci0JaW50MzJfdCByc3NpVGhySGlnaDsKLQl1MzIgbm9pc2VGbG9vcjsKLQl1MzIgdHhGcmFtZUNvdW50OwotCXUzMiByeEZyYW1lQ291bnQ7Ci0JdTMyIGN5Y2xlQ291bnQ7Ci0JdTMyIG9mZG1QaHlFcnJDb3VudDsKLQl1MzIgY2NrUGh5RXJyQ291bnQ7Ci0JdTMyIG9mZG1QaHlFcnJCYXNlOwotCXUzMiBjY2tQaHlFcnJCYXNlOwotCWludDE2X3QgcGt0UnNzaVsyXTsKLQlpbnQxNl90IG9mZG1FcnJSc3NpWzJdOwotCWludDE2X3QgY2NrRXJyUnNzaVsyXTsKLX07Ci0KLSNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIERPX0FOSShhaCkgXAotCSgoQUg1NDE2KGFoKS0+YWhfcHJvY1BoeUVyciAmIEhBTF9QUk9DRVNTX0FOSSkpCi0KLXN0cnVjdCBhcjU0MTZTdGF0cyB7Ci0JdTMyIGFzdF9hbmlfbml1cDsKLQl1MzIgYXN0X2FuaV9uaWRvd247Ci0JdTMyIGFzdF9hbmlfc3B1cnVwOwotCXUzMiBhc3RfYW5pX3NwdXJkb3duOwotCXUzMiBhc3RfYW5pX29mZG1vbjsKLQl1MzIgYXN0X2FuaV9vZmRtb2ZmOwotCXUzMiBhc3RfYW5pX2Nja2hpZ2g7Ci0JdTMyIGFzdF9hbmlfY2NrbG93OwotCXUzMiBhc3RfYW5pX3N0ZXB1cDsKLQl1MzIgYXN0X2FuaV9zdGVwZG93bjsKLQl1MzIgYXN0X2FuaV9vZmRtZXJyczsKLQl1MzIgYXN0X2FuaV9jY2tlcnJzOwotCXUzMiBhc3RfYW5pX3Jlc2V0OwotCXUzMiBhc3RfYW5pX2x6ZXJvOwotCXUzMiBhc3RfYW5pX2xuZWc7Ci0Jc3RydWN0IGF0aDlrX21pYl9zdGF0cyBhc3RfbWlic3RhdHM7Ci0Jc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgYXN0X25vZGVzdGF0czsKLX07Ci0KLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4Ci0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKLQotI2RlZmluZSBFRVBfUkZTSUxFTlRfRU5BQkxFRCAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEX1MgICAgICAwCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9QT0xBUklUWSAgICAgICAweDAwMDIKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZX1MgICAgIDEKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX0dQSU9fU0VMICAgICAgIDB4MDAxYwotI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUxfUyAgICAgMgotCi0jZGVmaW5lIEFSNTQxNl9FRVBfTk9fQkFDS19WRVIgICAgICAgMHgxCi0jZGVmaW5lIEFSNTQxNl9FRVBfVkVSICAgICAgICAgICAgICAgMHhFCi0jZGVmaW5lIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0sgICAgMHgwRkZGCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIgICAgICAgMHgyCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMgICAgICAgMHgzCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcgICAgICAgMHg3Ci0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzkgICAgICAgMHg5Ci0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE2ICAgICAgMHgxMAotI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNyAgICAgIDB4MTEKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkgICAgICAweDEzCi0KLSNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMwotI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKLSNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0Ci0jZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKLSNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQotI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCi0jZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4Ci0jZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgotI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0Ci0jZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMwotI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01Ci0KLS8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KLSNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCi0jZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQotI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKLQotLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKLSNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCi0KLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgIDY0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTICAgICAgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTIDMKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUyAgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0NUTFMgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0sgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAgICAgICAgNQotI2RlZmluZSBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUyAgICAgICAgICAgIDEKLQotZW51bSBlZXByb21fcGFyYW0gewotCUVFUF9ORlRIUkVTSF81LAotCUVFUF9ORlRIUkVTSF8yLAotCUVFUF9NQUNfTVNXLAotCUVFUF9NQUNfTUlELAotCUVFUF9NQUNfTFNXLAotCUVFUF9SRUdfMCwKLQlFRVBfUkVHXzEsCi0JRUVQX09QX0NBUCwKLQlFRVBfT1BfTU9ERSwKLQlFRVBfUkZfU0lMRU5ULAotCUVFUF9PQl81LAotCUVFUF9EQl81LAotCUVFUF9PQl8yLAotCUVFUF9EQl8yLAotCUVFUF9NSU5PUl9SRVYsCi0JRUVQX1RYX01BU0ssCi0JRUVQX1JYX01BU0ssCi0JRUVQX1JYR0FJTl9UWVBFLAotCUVFUF9UWEdBSU5fVFlQRSwKLX07Ci0KLWVudW0gYXI1NDE2X3JhdGVzIHsKLQlyYXRlNm1iLCByYXRlOW1iLCByYXRlMTJtYiwgcmF0ZTE4bWIsCi0JcmF0ZTI0bWIsIHJhdGUzNm1iLCByYXRlNDhtYiwgcmF0ZTU0bWIsCi0JcmF0ZTFsLCByYXRlMmwsIHJhdGUycywgcmF0ZTVfNWwsCi0JcmF0ZTVfNXMsIHJhdGUxMWwsIHJhdGUxMXMsIHJhdGVYciwKLQlyYXRlSHQyMF8wLCByYXRlSHQyMF8xLCByYXRlSHQyMF8yLCByYXRlSHQyMF8zLAotCXJhdGVIdDIwXzQsIHJhdGVIdDIwXzUsIHJhdGVIdDIwXzYsIHJhdGVIdDIwXzcsCi0JcmF0ZUh0NDBfMCwgcmF0ZUh0NDBfMSwgcmF0ZUh0NDBfMiwgcmF0ZUh0NDBfMywKLQlyYXRlSHQ0MF80LCByYXRlSHQ0MF81LCByYXRlSHQ0MF82LCByYXRlSHQ0MF83LAotCXJhdGVEdXBDY2ssIHJhdGVEdXBPZmRtLCByYXRlRXh0Q2NrLCByYXRlRXh0T2ZkbSwKLQlBcjU0MTZSYXRlU2l6ZQotfTsKLQotZW51bSBhdGg5a19oYWxfZnJlcV9iYW5kIHsKLQlBVEg5S19IQUxfRlJFUV9CQU5EXzVHSFogPSAwLAotCUFUSDlLX0hBTF9GUkVRX0JBTkRfMkdIWiA9IDEKLX07Ci0KLXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgewotCXUxNiBsZW5ndGg7Ci0JdTE2IGNoZWNrc3VtOwotCXUxNiB2ZXJzaW9uOwotCXU4IG9wQ2FwRmxhZ3M7Ci0JdTggZWVwTWlzYzsKLQl1MTYgcmVnRG1uWzJdOwotCXU4IG1hY0FkZHJbNl07Ci0JdTggcnhNYXNrOwotCXU4IHR4TWFzazsKLQl1MTYgcmZTaWxlbnQ7Ci0JdTE2IGJsdWVUb290aE9wdGlvbnM7Ci0JdTE2IGRldmljZUNhcDsKLQl1MzIgYmluQnVpbGROdW1iZXI7Ci0JdTggZGV2aWNlVHlwZTsKLQl1OCBwd2RjbGtpbmQ7Ci0JdTggZnV0dXJlQmFzZV8xWzJdOwotCXU4IHJ4R2FpblR5cGU7Ci0JdTggZnV0dXJlQmFzZV8yWzNdOwotCXU4IHR4R2FpblR5cGU7Ci0JdTggZnV0dXJlQmFzZV8zWzI1XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgewotCXUxNiBsZW5ndGg7Ci0JdTE2IGNoZWNrc3VtOwotCXUxNiB2ZXJzaW9uOwotCXU4IG9wQ2FwRmxhZ3M7Ci0JdTggZWVwTWlzYzsKLQl1MTYgcmVnRG1uWzJdOwotCXU4IG1hY0FkZHJbNl07Ci0JdTggcnhNYXNrOwotCXU4IHR4TWFzazsKLQl1MTYgcmZTaWxlbnQ7Ci0JdTE2IGJsdWVUb290aE9wdGlvbnM7Ci0JdTE2IGRldmljZUNhcDsKLQl1MzIgYmluQnVpbGROdW1iZXI7Ci0JdTggZGV2aWNlVHlwZTsKLQl1OCBmdXR1cmVCYXNlWzFdOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3Qgc3B1cl9jaGFuIHsKLQl1MTYgc3B1ckNoYW47Ci0JdTggc3B1clJhbmdlTG93OwotCXU4IHNwdXJSYW5nZUhpZ2g7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7Ci0JdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTMyIGFudEN0cmxDb21tb247Ci0JdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggc3dpdGNoU2V0dGxpbmc7Ci0JdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggYWRjRGVzaXJlZFNpemU7Ci0JdTggcGdhRGVzaXJlZFNpemU7Ci0JdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggdHhFbmRUb1hwYU9mZjsKLQl1OCB0eEVuZFRvUnhPbjsKLQl1OCB0eEZyYW1lVG9YcGFPbjsKLQl1OCB0aHJlc2g2MjsKLQl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHhwZEdhaW47Ci0JdTggeHBkOwotCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggcGRHYWluT3ZlcmxhcDsKLQl1OCBvYjsKLQl1OCBkYjsKLQl1OCB4cGFCaWFzTHZsOwotCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOwotCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOwotCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKLQl1OCB0eEZyYW1lVG9QYU9uOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOwotCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHN3U2V0dGxlSHQ0MDsKLQl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IG9iX2NoMTsKLQl1OCBkYl9jaDE7Ci0JdTggdXNlQW50MToxLAotCSAgICBmb3JjZV94cGFvbjoxLAotCSAgICBsb2NhbF9iaWFzOjEsCi0JICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOwotCXU4IGZ1dHVyZU1vZGFsYXI5MjgwOwotCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKLQl1OCBmdXR1cmVNb2RhbFs2XTsKLQotCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgewotICAgIHUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1MzIgIGFudEN0cmxDb21tb247Ci0gICAgdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHN3aXRjaFNldHRsaW5nOwotICAgIHU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGFkY0Rlc2lyZWRTaXplOwotICAgIHU4ICAgcGdhRGVzaXJlZFNpemU7Ci0gICAgdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHR4RW5kVG9YcGFPZmY7Ci0gICAgdTggICB0eEVuZFRvUnhPbjsKLSAgICB1OCAgIHR4RnJhbWVUb1hwYU9uOwotICAgIHU4ICAgdGhyZXNoNjI7Ci0gICAgdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgeHBkR2FpbjsKLSAgICB1OCAgIHhwZDsKLSAgICB1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHBkR2Fpbk92ZXJsYXA7Ci0gICAgdTggICBvYl8wMTsKLSAgICB1OCAgIGRiMV8wMTsKLSAgICB1OCAgIHhwYUJpYXNMdmw7Ci0gICAgdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0gICAgdTggICB0eEZyYW1lVG9QYU9uOwotICAgIHU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0gICAgdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgc3dTZXR0bGVIdDQwOwotICAgIHU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgZGIyXzAxOwotICAgIHU4ICAgdmVyc2lvbjsKLSAgICB1MTYgIG9iXzIzNDsKLSAgICB1MTYgIGRiMV8yMzQ7Ci0gICAgdTE2ICBkYjJfMjM0OwotICAgIHU4ICAgZnV0dXJlTW9kYWxbNF07Ci0KLSAgICBzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKLX0gX19wYWNrZWQ7Ci0KLQotc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKLQl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLQl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7Ci0JdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Ci0JdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgewotCXU4IGJDaGFubmVsOwotCXU4IHRQb3cyeFs0XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCB0UG93MnhbOF07Ci19IF9fcGFja2VkOwotCi0KLSNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKLXN0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCBmbGFnOjIsIHRQb3dlcjo2OwotfSBfX3BhY2tlZDsKLSNlbHNlCi1zdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7Ci0JdTggYkNoYW5uZWw7Ci0JdTggdFBvd2VyOjYsIGZsYWc6MjsKLX0gX19wYWNrZWQ7Ci0jZW5kaWYKLQotc3RydWN0IGNhbF9jdGxfZGF0YSB7Ci0Jc3RydWN0IGNhbF9jdGxfZWRnZXMKLQljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgewotCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCi0JY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgewotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKLQl1OCBjdXN0RGF0YVs2NF07Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07Ci0JdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107Ci0JdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCi0JIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKLQkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKLQl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOwotCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOwotCXU4IHBhZGRpbmc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOwotCXU4IGN1c3REYXRhWzIwXTsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKLQl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKLQljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107Ci0JdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKLQlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKLQl1OCBwYWRkaW5nOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFyNTQxNkluaUFycmF5IHsKLQl1MzIgKmlhX2FycmF5OwotCXUzMiBpYV9yb3dzOwotCXUzMiBpYV9jb2x1bW5zOwotfTsKLQotI2RlZmluZSBJTklUX0lOSV9BUlJBWShpbmlhcnJheSwgYXJyYXksIHJvd3MsIGNvbHVtbnMpIGRvIHsJXAotCQkoaW5pYXJyYXkpLT5pYV9hcnJheSA9ICh1MzIgKikoYXJyYXkpOwkJXAotCQkoaW5pYXJyYXkpLT5pYV9yb3dzID0gKHJvd3MpOwkJCVwKLQkJKGluaWFycmF5KS0+aWFfY29sdW1ucyA9IChjb2x1bW5zKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIElOSV9SQShpbmlhcnJheSwgcm93LCBjb2x1bW4pIFwKLQkoKChpbmlhcnJheSktPmlhX2FycmF5KVsocm93KSAqCSgoaW5pYXJyYXkpLT5pYV9jb2x1bW5zKSArIChjb2x1bW4pXSkKLQotI2RlZmluZSBJTklUX0NBTChfcGVyQ2FsKSBkbyB7CQkJCVwKLQkJKF9wZXJDYWwpLT5jYWxTdGF0ZSA9IENBTF9XQUlUSU5HOwlcCi0JCShfcGVyQ2FsKS0+Y2FsTmV4dCA9IE5VTEw7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJTlNFUlRfQ0FMKF9haHAsIF9wZXJDYWwpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID09IE5VTEwpIHsJCQlcCi0JCQkoX2FocCktPmFoX2NhbF9saXN0ID0JCQkJXAotCQkJCShfYWhwKS0+YWhfY2FsX2xpc3RfbGFzdCA9IChfcGVyQ2FsKTsJXAotCQkJKChfYWhwKS0+YWhfY2FsX2xpc3RfbGFzdCktPmNhbE5leHQgPSAoX3BlckNhbCk7IFwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQkoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAotCQkJKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwkJXAotCQkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gKF9haHApLT5haF9jYWxfbGlzdDsJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotCi1lbnVtIGhhbF9jYWxfdHlwZXMgewotCUFEQ19EQ19JTklUX0NBTCA9IDB4MSwKLQlBRENfR0FJTl9DQUwgPSAweDIsCi0JQURDX0RDX0NBTCA9IDB4NCwKLQlJUV9NSVNNQVRDSF9DQUwgPSAweDgKLX07Ci0KLWVudW0gaGFsX2NhbF9zdGF0ZSB7Ci0JQ0FMX0lOQUNUSVZFLAotCUNBTF9XQUlUSU5HLAotCUNBTF9SVU5OSU5HLAotCUNBTF9ET05FCi19OwotCi0jZGVmaW5lIE1JTl9DQUxfU0FNUExFUyAgICAgMQotI2RlZmluZSBNQVhfQ0FMX1NBTVBMRVMgICAgNjQKLSNkZWZpbmUgSU5JVF9MT0dfQ09VTlQgICAgICA1Ci0jZGVmaW5lIFBFUl9NSU5fTE9HX0NPVU5UICAgMgotI2RlZmluZSBQRVJfTUFYX0xPR19DT1VOVCAgMTAKLQotc3RydWN0IGhhbF9wZXJjYWxfZGF0YSB7Ci0JZW51bSBoYWxfY2FsX3R5cGVzIGNhbFR5cGU7Ci0JdTMyIGNhbE51bVNhbXBsZXM7Ci0JdTMyIGNhbENvdW50TWF4OwotCXZvaWQgKCpjYWxDb2xsZWN0KSAoc3RydWN0IGF0aF9oYWwgKik7Ci0Jdm9pZCAoKmNhbFBvc3RQcm9jKSAoc3RydWN0IGF0aF9oYWwgKiwgdTgpOwotfTsKLQotc3RydWN0IGhhbF9jYWxfbGlzdCB7Ci0JY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKLQllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKLX07Ci0KLS8qCi0gKiBFbnVtIHRvIGluZGVudGlmeSB0aGUgZWVwcm9tIG1hcHBpbmdzCi0gKi8KLWVudW0gaGFsX2VlcF9tYXAgewotCUVFUF9NQVBfREVGQVVMVCA9IDB4MCwKLQlFRVBfTUFQXzRLQklUUywKLQlFRVBfTUFQX01BWAotfTsKLQotCi1zdHJ1Y3QgYXRoX2hhbF81NDE2IHsKLQlzdHJ1Y3QgYXRoX2hhbCBhaDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiBkZWY7Ci0JCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrIG1hcDRrOwotCX0gYWhfZWVwcm9tOwotCXN0cnVjdCBhcjU0MTZTdGF0cyBhaF9zdGF0czsKLQlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBhaF90eHFbQVRIOUtfTlVNX1RYX1FVRVVFU107Ci0Jdm9pZCBfX2lvbWVtICphaF9jYWxfbWVtOwotCi0JdTggYWhfbWFjYWRkcltFVEhfQUxFTl07Ci0JdTggYWhfYnNzaWRbRVRIX0FMRU5dOwotCXU4IGFoX2Jzc2lkbWFza1tFVEhfQUxFTl07Ci0JdTE2IGFoX2Fzc29jSWQ7Ci0KLQlpbnQxNl90IGFoX2N1cmNoYW5SYWRJbmRleDsKLQl1MzIgYWhfbWFza1JlZzsKLQl1MzIgYWhfdHhPa0ludGVycnVwdE1hc2s7Ci0JdTMyIGFoX3R4RXJySW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhEZXNjSW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhFb2xJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eFVybkludGVycnVwdE1hc2s7Ci0JYm9vbCBhaF9jaGlwRnVsbFNsZWVwOwotCXUzMiBhaF9hdGltV2luZG93OwotCXUxNiBhaF9hbnRlbm5hU3dpdGNoU3dhcDsKLQllbnVtIGF0aDlrX3Bvd2VyX21vZGUgYWhfcG93ZXJNb2RlOwotCWVudW0gYXRoOWtfYW50X3NldHRpbmcgYWhfZGl2ZXJzaXR5Q29udHJvbDsKLQotCS8qIENhbGlicmF0aW9uICovCi0JZW51bSBoYWxfY2FsX3R5cGVzIGFoX3N1cHBDYWxzOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfaXFDYWxEYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfYWRjR2FpbkNhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNEY0NhbEluaXREYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfYWRjRGNDYWxEYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmFoX2NhbF9saXN0OwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmFoX2NhbF9saXN0X2xhc3Q7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3RfY3VycjsKLSNkZWZpbmUgYWhfdG90YWxQb3dlck1lYXNJIGFoX01lYXMwLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbFBvd2VyTWVhc1EgYWhfTWVhczEudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsSXFDb3JyTWVhcyBhaF9NZWFzMi5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjSU9kZFBoYXNlICBhaF9NZWFzMC51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNJRXZlblBoYXNlIGFoX01lYXMxLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY1FPZGRQaGFzZSAgYWhfTWVhczIudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjUUV2ZW5QaGFzZSBhaF9NZWFzMy51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZSAgYWhfTWVhczAuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZSBhaF9NZWFzMS5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2UgIGFoX01lYXMyLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2UgYWhfTWVhczMuc2lnbgotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMDsKLQl1bmlvbiB7Ci0JCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCX0gYWhfTWVhczE7Ci0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMyOwotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMzsKLQl1MTYgYWhfQ2FsU2FtcGxlczsKLQotCXUzMiBhaF9zdGFJZDFEZWZhdWx0czsKLQl1MzIgYWhfbWlzY01vZGU7Ci0JZW51bSB7Ci0JCUFVVE9fMzJLSFosCi0JCVVTRV8zMktIWiwKLQkJRE9OVF9VU0VfMzJLSFosCi0JfSBhaF9lbmFibGUzMmtIekNsb2NrOwotCi0JLyogUkYgKi8KLQl1MzIgKmFoX2FuYWxvZ0JhbmswRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmsxRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmsyRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmszRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms2RGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms2VFBDRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms3RGF0YTsKLQl1MzIgKmFoX2FkZGFjNTQxNl8yMTsKLQl1MzIgKmFoX2Jhbms2VGVtcDsKLQotCWludDE2X3QgYWhfdHhQb3dlckluZGV4T2Zmc2V0OwotCXUzMiBhaF9iZWFjb25JbnRlcnZhbDsKLQl1MzIgYWhfc2xvdHRpbWU7Ci0JdTMyIGFoX2Fja3RpbWVvdXQ7Ci0JdTMyIGFoX2N0c3RpbWVvdXQ7Ci0JdTMyIGFoX2dsb2JhbHR4dGltZW91dDsKLQl1OCBhaF9nQmVhY29uUmF0ZTsKLQl1MzIgYWhfZ3Bpb1NlbGVjdDsKLQl1MzIgYWhfcG9sYXJpdHk7Ci0JdTMyIGFoX2dwaW9CaXQ7Ci0KLQkvKiBBTkkgKi8KLQl1MzIgYWhfcHJvY1BoeUVycjsKLQlib29sIGFoX2hhc0h3UGh5Q291bnRlcnM7Ci0JdTMyIGFoX2FuaVBlcmlvZDsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFoX2N1cmFuaTsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgYWhfYW5pWzI1NV07Ci0JaW50IGFoX3RvdGFsU2l6ZURlc2lyZWRbNV07Ci0JaW50IGFoX2NvYXJzZUhpZ2hbNV07Ci0JaW50IGFoX2NvYXJzZUxvd1s1XTsKLQlpbnQgYWhfZmlycHdyWzVdOwotCWVudW0gYXRoOWtfYW5pX2NtZCBhaF9hbmlfZnVuY3Rpb247Ci0KLQl1MzIgYWhfaW50clR4cXM7Ci0JYm9vbCBhaF9pbnRyTWl0aWdhdGlvbjsKLQllbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIGFoX2V4dHByb3RzcGFjaW5nOwotCXU4IGFoX3R4Y2hhaW5tYXNrOwotCXU4IGFoX3J4Y2hhaW5tYXNrOwotCi0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlDb21tb247Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmswOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCQl9SZkdhaW47Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmsxOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rMjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbms2OwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rNlRQQzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazc7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUFkZGFjOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlQY2llU2VyZGVzOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlNb2Rlc0FkZGl0aW9uYWw7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzUnhHYWluOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlNb2Rlc1R4R2FpbjsKLQkvKiBUbyBpbmRpY2F0ZSBFRVBST00gbWFwcGluZyB1c2VkICovCi0JZW51bSBoYWxfZWVwX21hcCBhaF9lZXBfbWFwOwotfTsKLSNkZWZpbmUgQUg1NDE2KF9haCkgKChzdHJ1Y3QgYXRoX2hhbF81NDE2ICopKF9haCkpCi0KLSNkZWZpbmUgRlJFUTJGQklOKHgsIHkpICgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCi0KLSNkZWZpbmUgYXI1NDE2UmZEZXRhY2goYWgpIGRvIHsJCQkJCVwKLQkJaWYgKEFINTQxNihhaCktPmFoX3JmSGFsLnJmRGV0YWNoICE9IE5VTEwpCVwKLQkJCUFINTQxNihhaCktPmFoX3JmSGFsLnJmRGV0YWNoKGFoKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgYXRoOWtfaHdfdXNlX2ZsYXNoKF9haCkJCQlcCi0JKCEoX2FoLT5haF9mbGFncyAmIEFIX1VTRV9FRVBST00pKQotCisjZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCisjZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCisjZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCisJUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKKyNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAorCVJFR19XUklURShfYSwgX3IsIFwKKwkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKKyNkZWZpbmUgUkVHX1NFVF9CSVQoX2EsIF9yLCBfZikgXAorCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgfCBfZikKKyNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAorCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+X2YpCiAKICNkZWZpbmUgRE9fREVMQVkoeCkgZG8gewkJCVwKIAkJaWYgKCgrKyh4KSAlIDY0KSA9PSAwKSAgICAgICAgICBcCkBAIC05NjQsMTE3ICs3MSw1NzcgQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfQVRURU5USU9OX0xFRCAxCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX1BPV0VSX0xFRCAgICAgMgorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUgICAgICAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19ORVRXT1JLX0xFRCAgICA1CisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfUE9XRVJfTEVEICAgICAgNgorCisjZGVmaW5lIEFSX0dQSU9EX01BU0sgICAgICAgICAgICAgICAweDAwMDAxRkZGCisjZGVmaW5lIEFSX0dQSU9fQklUKF9ncGlvKSAgICAgICAgICAoMSA8PCAoX2dwaW8pKQorCiAjZGVmaW5lIEJBU0VfQUNUSVZBVEVfREVMQVkgICAgICAgICAxMDAKICNkZWZpbmUgUlRDX1BMTF9TRVRUTEVfREVMQVkgICAgICAgIDEwMDAKICNkZWZpbmUgQ09FRl9TQ0FMRV9TICAgICAgICAgICAgICAgIDI0CiAjZGVmaW5lIEhUNDBfQ0hBTk5FTF9DRU5URVJfU0hJRlQgICAxMAogCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VUICAweDAKKyNkZWZpbmUgQVRIOUtfQU5URU5OQTBfQ0hBSU5NQVNLICAgIDB4MQorI2RlZmluZSBBVEg5S19BTlRFTk5BMV9DSEFJTk1BU0sgICAgMHgyCiAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9TICAgICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9PRkZTRVQgICAgICAgIDB4MjAwMAotI2RlZmluZSBBUjU0MTZfRUVQUk9NX1NUQVJUX0FERFIgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IDB4MWZmZjEwMDAgOiAweDUwM2YxMjAwCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFYICAgICAgICAgICAweGFlMAotI2RlZmluZSBhcjU0MTZfZ2V0X2VlcF92ZXIoX2FocCkgXAotCSgoKF9haHApLT5haF9lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwX3JldihfYWhwKSBcCi0JKCgoX2FocCktPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKQotI2RlZmluZSBhcjU0MTZfZ2V0X250eGNoYWlucyhfdHhjaGFpbm1hc2spIFwKLQkoKChfdHhjaGFpbm1hc2sgPj4gMikgJiAxKSArIFwKLQkJKChfdHhjaGFpbm1hc2sgPj4gMSkgJiAxKSArIChfdHhjaGFpbm1hc2sgJiAxKSkKKyNkZWZpbmUgQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTICAgIDgKKyNkZWZpbmUgQVRIOUtfTlVNX1FVRVVFUyAgICAgICAgICAgIDEwCiAKLS8qIEVFUFJPTSA0SyBiaXQgbWFwIGRlZmluYXRpb25zICovCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwNGtfdmVyKF9haHApICAgXAotICAgICgoKF9haHApLT5haF9lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4RikKLSNkZWZpbmUgYXI1NDE2X2dldF9lZXA0a19yZXYoX2FocCkgICBcCi0gICAgKCgoX2FocCktPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpCisjZGVmaW5lIE1BWF9SQVRFX1BPV0VSICAgICAgICAgICAgICA2MworI2RlZmluZSBBSF9XQUlUX1RJTUVPVVQgICAgICAgICAgICAgMTAwMDAwIC8qICh1cykgKi8KKyNkZWZpbmUgQUhfVElNRV9RVUFOVFVNICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFSX0tFWVRBQkxFX1NJWkUgICAgICAgICAgICAxMjgKKyNkZWZpbmUgUE9XRVJfVVBfVElNRSAgICAgICAgICAgICAgIDIwMDAwMAorI2RlZmluZSBTUFVSX1JTU0lfVEhSRVNIICAgICAgICAgICAgNDAKIAorI2RlZmluZSBDQUJfVElNRU9VVF9WQUwgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQkVBQ09OX1RJTUVPVVRfVkFMICAgICAgICAgIDEwCisjZGVmaW5lIE1JTl9CRUFDT05fVElNRU9VVF9WQUwgICAgICAxCisjZGVmaW5lIFNMRUVQX1NMT1AgICAgICAgICAgICAgICAgICAzCiAKLSNpZmRlZiBfX0JJR19FTkRJQU4KLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKLSNlbHNlCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUMgMHhhNTVhCisjZGVmaW5lIElOSVRfQ09ORklHX1NUQVRVUyAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElOSVRfUlNTSV9USFIgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIElOSVRfQkNPTl9DTlRSTF9SRUcgICAgICAgICAweDAwMDAwMDAwCisKKyNkZWZpbmUgVFVfVE9fVVNFQyhfdHUpICAgICAgICAgICAgICgoX3R1KSA8PCAxMCkKKworZW51bSB3aXJlbGVzc19tb2RlIHsKKwlBVEg5S19NT0RFXzExQSA9IDAsCisJQVRIOUtfTU9ERV8xMUIgPSAyLAorCUFUSDlLX01PREVfMTFHID0gMywKKwlBVEg5S19NT0RFXzExTkFfSFQyMCA9IDYsCisJQVRIOUtfTU9ERV8xMU5HX0hUMjAgPSA3LAorCUFUSDlLX01PREVfMTFOQV9IVDQwUExVUyA9IDgsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUyA9IDksCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTID0gMTAsCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUyA9IDExLAorCUFUSDlLX01PREVfTUFYCit9OworCitlbnVtIGF0aDlrX2h3X2NhcHMgeworCUFUSDlLX0hXX0NBUF9DSEFOX1NQUkVBRAkJPSBCSVQoMCksCisJQVRIOUtfSFdfQ0FQX01JQ19BRVNDQ00gICAgICAgICAgICAgICAgID0gQklUKDEpLAorCUFUSDlLX0hXX0NBUF9NSUNfQ0tJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgyKSwKKwlBVEg5S19IV19DQVBfTUlDX1RLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCisJQVRIOUtfSFdfQ0FQX0NJUEhFUl9BRVNDQ00gICAgICAgICAgICAgID0gQklUKDQpLAorCUFUSDlLX0hXX0NBUF9DSVBIRVJfQ0tJUCAgICAgICAgICAgICAgICA9IEJJVCg1KSwKKwlBVEg5S19IV19DQVBfQ0lQSEVSX1RLSVAgICAgICAgICAgICAgICAgPSBCSVQoNiksCisJQVRIOUtfSFdfQ0FQX1ZFT0wgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDcpLAorCUFUSDlLX0hXX0NBUF9CU1NJRE1BU0sgICAgICAgICAgICAgICAgICA9IEJJVCg4KSwKKwlBVEg5S19IV19DQVBfTUNBU1RfS0VZU0VBUkNIICAgICAgICAgICAgPSBCSVQoOSksCisJQVRIOUtfSFdfQ0FQX0NIQU5fSEFMRlJBVEUgICAgICAgICAgICAgID0gQklUKDEwKSwKKwlBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSAgICAgICAgICAgPSBCSVQoMTEpLAorCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMiksCisJQVRIOUtfSFdfQ0FQX0dUVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKKwlBVEg5S19IV19DQVBfRkFTVENDICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAorCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCisJQVRIOUtfSFdfQ0FQX1dPVyAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE2KSwKKwlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTcpLAorCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgxOCksCisJQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCAgICAgICAgICAgICAgICAgID0gQklUKDE5KSwKKwlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoMjApLAorCUFUSDlLX0hXX0NBUF9XT1dfTUFUQ0hQQVRURVJOX0VYQUNUICAgICA9IEJJVCgyMSksCisJQVRIOUtfSFdfQ0FQX0JUX0NPRVgJCQk9IEJJVCgyMikKK307CisKK2VudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHsKKwlBVEg5S19DQVBfQ0lQSEVSID0gMCwKKwlBVEg5S19DQVBfVEtJUF9NSUMsCisJQVRIOUtfQ0FQX1RLSVBfU1BMSVQsCisJQVRIOUtfQ0FQX0RJVkVSU0lUWSwKKwlBVEg5S19DQVBfVFhQT1csCisJQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsCisJQVRIOUtfQ0FQX0RTCit9OworCitzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIHsKKwl1MzIgaHdfY2FwczsgLyogQVRIOUtfSFdfQ0FQXyogZnJvbSBhdGg5a19od19jYXBzICovCisJREVDTEFSRV9CSVRNQVAod2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsgLyogQVRIOUtfTU9ERV8qICovCisJdTE2IHRvdGFsX3F1ZXVlczsKKwl1MTYga2V5Y2FjaGVfc2l6ZTsKKwl1MTYgbG93XzVnaHpfY2hhbiwgaGlnaF81Z2h6X2NoYW47CisJdTE2IGxvd18yZ2h6X2NoYW4sIGhpZ2hfMmdoel9jaGFuOworCXUxNiBudW1fbXJfcmV0cmllczsKKwl1MTYgcnRzX2FnZ3JfbGltaXQ7CisJdTggdHhfY2hhaW5tYXNrOworCXU4IHJ4X2NoYWlubWFzazsKKwl1MTYgdHhfdHJpZ2xldmVsX21heDsKKwl1MTYgcmVnX2NhcDsKKwl1OCBudW1fZ3Bpb19waW5zOworCXU4IG51bV9hbnRjZmdfMmdoejsKKwl1OCBudW1fYW50Y2ZnXzVnaHo7Cit9OworCitzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyB7CisJaW50IGRtYV9iZWFjb25fcmVzcG9uc2VfdGltZTsKKwlpbnQgc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWU7CisJaW50IGFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmOworCWludCBhY2tfNm1iOworCWludCBjd21faWdub3JlX2V4dGNjYTsKKwl1OCBwY2llX3Bvd2Vyc2F2ZV9lbmFibGU7CisJdTggcGNpZV9sMXNrcF9lbmFibGU7CisJdTggcGNpZV9jbG9ja19yZXE7CisJdTMyIHBjaWVfd2FlbjsKKwlpbnQgcGNpZV9wb3dlcl9yZXNldDsKKwl1OCBwY2llX3Jlc3RvcmU7CisJdTggYW5hbG9nX3NoaWZ0cmVnOworCXU4IGh0X2VuYWJsZTsKKwl1MzIgb2ZkbV90cmlnX2xvdzsKKwl1MzIgb2ZkbV90cmlnX2hpZ2g7CisJdTMyIGNja190cmlnX2hpZ2g7CisJdTMyIGNja190cmlnX2xvdzsKKwl1MzIgZW5hYmxlX2FuaTsKKwl1OCBub2lzZV9pbW11bml0eV9sZXZlbDsKKwl1MzIgb2ZkbV93ZWFrc2lnbmFsX2RldDsKKwl1MzIgY2NrX3dlYWtzaWduYWxfdGhyOworCXU4IHNwdXJfaW1tdW5pdHlfbGV2ZWw7CisJdTggZmlyc3RlcF9sZXZlbDsKKwlpbnQ4X3QgcnNzaV90aHJfaGlnaDsKKwlpbnQ4X3QgcnNzaV90aHJfbG93OworCXUxNiBkaXZlcnNpdHlfY29udHJvbDsKKwl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwlpbnQgc2VyaWFsaXplX3JlZ21vZGU7CisJaW50IGludHJfbWl0aWdhdGlvbjsKKyNkZWZpbmUgU1BVUl9ESVNBQkxFICAgICAgICAJMAorI2RlZmluZSBTUFVSX0VOQUJMRV9JT0NUTCAgIAkxCisjZGVmaW5lIFNQVVJfRU5BQkxFX0VFUFJPTSAgCTIKKyNkZWZpbmUgQVJfRUVQUk9NX01PREFMX1NQVVJTICAgNQorI2RlZmluZSBBUl9TUFVSXzU0MTNfMSAgICAgIAkxNjQwCisjZGVmaW5lIEFSX1NQVVJfNTQxM18yICAgICAgCTEyMDAKKyNkZWZpbmUgQVJfTk9fU1BVUiAgICAgIAkweDgwMDAKKyNkZWZpbmUgQVJfQkFTRV9GUkVRXzJHSFogICAJMjMwMAorI2RlZmluZSBBUl9CQVNFX0ZSRVFfNUdIWiAgIAk0OTAwCisjZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDQwIDE5CisjZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDIwIDEwCisJaW50IHNwdXJtb2RlOworCXUxNiBzcHVyY2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXVsyXTsKK307CisKK2VudW0gYXRoOWtfaW50IHsKKwlBVEg5S19JTlRfUlggPSAweDAwMDAwMDAxLAorCUFUSDlLX0lOVF9SWERFU0MgPSAweDAwMDAwMDAyLAorCUFUSDlLX0lOVF9SWE5PRlJNID0gMHgwMDAwMDAwOCwKKwlBVEg5S19JTlRfUlhFT0wgPSAweDAwMDAwMDEwLAorCUFUSDlLX0lOVF9SWE9STiA9IDB4MDAwMDAwMjAsCisJQVRIOUtfSU5UX1RYID0gMHgwMDAwMDA0MCwKKwlBVEg5S19JTlRfVFhERVNDID0gMHgwMDAwMDA4MCwKKwlBVEg5S19JTlRfVElNX1RJTUVSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAorCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAorCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCisJQVRIOUtfSU5UX1JYS0NNID0gMHgwMDAwODAwMCwKKwlBVEg5S19JTlRfU1dCQSA9IDB4MDAwMTAwMDAsCisJQVRIOUtfSU5UX0JNSVNTID0gMHgwMDA0MDAwMCwKKwlBVEg5S19JTlRfQk5SID0gMHgwMDEwMDAwMCwKKwlBVEg5S19JTlRfVElNID0gMHgwMDIwMDAwMCwKKwlBVEg5S19JTlRfRFRJTSA9IDB4MDA0MDAwMDAsCisJQVRIOUtfSU5UX0RUSU1TWU5DID0gMHgwMDgwMDAwMCwKKwlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCisJQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCisJQVRIOUtfSU5UX1RTRk9PUiA9IDB4MDQwMDAwMDAsCisJQVRIOUtfSU5UX0NTVCA9IDB4MTAwMDAwMDAsCisJQVRIOUtfSU5UX0dUVCA9IDB4MjAwMDAwMDAsCisJQVRIOUtfSU5UX0ZBVEFMID0gMHg0MDAwMDAwMCwKKwlBVEg5S19JTlRfR0xPQkFMID0gMHg4MDAwMDAwMCwKKwlBVEg5S19JTlRfQk1JU0MgPSBBVEg5S19JTlRfVElNIHwKKwkJQVRIOUtfSU5UX0RUSU0gfAorCQlBVEg5S19JTlRfRFRJTVNZTkMgfAorCQlBVEg5S19JTlRfVFNGT09SIHwKKwkJQVRIOUtfSU5UX0NBQkVORCwKKwlBVEg5S19JTlRfQ09NTU9OID0gQVRIOUtfSU5UX1JYTk9GUk0gfAorCQlBVEg5S19JTlRfUlhERVNDIHwKKwkJQVRIOUtfSU5UX1JYRU9MIHwKKwkJQVRIOUtfSU5UX1JYT1JOIHwKKwkJQVRIOUtfSU5UX1RYVVJOIHwKKwkJQVRIOUtfSU5UX1RYREVTQyB8CisJCUFUSDlLX0lOVF9NSUIgfAorCQlBVEg5S19JTlRfUlhQSFkgfAorCQlBVEg5S19JTlRfUlhLQ00gfAorCQlBVEg5S19JTlRfU1dCQSB8CisJCUFUSDlLX0lOVF9CTUlTUyB8CisJCUFUSDlLX0lOVF9HUElPLAorCUFUSDlLX0lOVF9OT0NBUkQgPSAweGZmZmZmZmZmCit9OworCisjZGVmaW5lIENIQU5ORUxfQ1dfSU5UICAgIDB4MDAwMDIKKyNkZWZpbmUgQ0hBTk5FTF9DQ0sgICAgICAgMHgwMDAyMAorI2RlZmluZSBDSEFOTkVMX09GRE0gICAgICAweDAwMDQwCisjZGVmaW5lIENIQU5ORUxfMkdIWiAgICAgIDB4MDAwODAKKyNkZWZpbmUgQ0hBTk5FTF81R0haICAgICAgMHgwMDEwMAorI2RlZmluZSBDSEFOTkVMX1BBU1NJVkUgICAweDAwMjAwCisjZGVmaW5lIENIQU5ORUxfRFlOICAgICAgIDB4MDA0MDAKKyNkZWZpbmUgQ0hBTk5FTF9IQUxGICAgICAgMHgwNDAwMAorI2RlZmluZSBDSEFOTkVMX1FVQVJURVIgICAweDA4MDAwCisjZGVmaW5lIENIQU5ORUxfSFQyMCAgICAgIDB4MTAwMDAKKyNkZWZpbmUgQ0hBTk5FTF9IVDQwUExVUyAgMHgyMDAwMAorI2RlZmluZSBDSEFOTkVMX0hUNDBNSU5VUyAweDQwMDAwCisKKyNkZWZpbmUgQ0hBTk5FTF9JTlRFUkZFUkVOQ0UgICAgMHgwMQorI2RlZmluZSBDSEFOTkVMX0RGUyAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENIQU5ORUxfNE1TX0xJTUlUICAgICAgIDB4MDQKKyNkZWZpbmUgQ0hBTk5FTF9ERlNfQ0xFQVIgICAgICAgMHgwOAorI2RlZmluZSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DICAweDEwCisjZGVmaW5lIENIQU5ORUxfUEVSXzExRF9BREhPQyAgIDB4MjAKKworI2RlZmluZSBDSEFOTkVMX0EgICAgICAgICAgIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9PRkRNKQorI2RlZmluZSBDSEFOTkVMX0IgICAgICAgICAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9DQ0spCisjZGVmaW5lIENIQU5ORUxfRyAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE0pCisjZGVmaW5lIENIQU5ORUxfR19IVDIwICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfQV9IVDIwICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfR19IVDQwUExVUyAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBQTFVTKQorI2RlZmluZSBDSEFOTkVMX0dfSFQ0ME1JTlVTIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCisjZGVmaW5lIENIQU5ORUxfQV9IVDQwUExVUyAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBQTFVTKQorI2RlZmluZSBDSEFOTkVMX0FfSFQ0ME1JTlVTIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCisjZGVmaW5lIENIQU5ORUxfQUxMCQkJCVwKKwkoQ0hBTk5FTF9PRkRNfAkJCQlcCisJIENIQU5ORUxfQ0NLfAkJCQlcCisJIENIQU5ORUxfMkdIWiB8CQkJCVwKKwkgQ0hBTk5FTF81R0haIHwJCQkJXAorCSBDSEFOTkVMX0hUMjAgfAkJCQlcCisJIENIQU5ORUxfSFQ0MFBMVVMgfAkJCVwKKwkgQ0hBTk5FTF9IVDQwTUlOVVMpCisKK3N0cnVjdCBhdGg5a19jaGFubmVsIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJdTE2IGNoYW5uZWw7CisJdTMyIGNoYW5uZWxGbGFnczsKKwl1MzIgY2hhbm1vZGU7CisJaW50MzJfdCBDYWxWYWxpZDsKKwlib29sIG9uZVRpbWVDYWxzRG9uZTsKKwlpbnQ4X3QgaUNvZmY7CisJaW50OF90IHFDb2ZmOworCWludDE2X3QgcmF3Tm9pc2VGbG9vcjsKK307CisKKyNkZWZpbmUgSVNfQ0hBTl9BKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0EpID09IENIQU5ORUxfQSkgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUMjApID09IENIQU5ORUxfQV9IVDIwKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0MFBMVVMpID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fRyhfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgKENIQU5ORUxfRykpID09IENIQU5ORUxfRykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUMjApID09IENIQU5ORUxfR19IVDIwKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0MFBMVVMpID09IENIQU5ORUxfR19IVDQwUExVUykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fT0ZETShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX09GRE0pICE9IDApCisjZGVmaW5lIElTX0NIQU5fNUdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApCisjZGVmaW5lIElTX0NIQU5fMkdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzJHSFopICE9IDApCisjZGVmaW5lIElTX0NIQU5fUEFTU0lWRShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpICE9IDApCisjZGVmaW5lIElTX0NIQU5fSEFMRl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfSEFMRikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9RVUFSVEVSKSAhPSAwKQorI2RlZmluZSBJU19DSEFOX0FfNU1IWl9TUEFDRUQoX2MpCQkJXAorCSgoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfNUdIWikgIT0gMCkgJiYJXAorCSAoKChfYyktPmNoYW5uZWwgJSAyMCkgIT0gMCkgJiYJCQlcCisJICgoKF9jKS0+Y2hhbm5lbCAlIDEwKSAhPSAwKSkKKworLyogVGhlc2UgbWFjcm9zIGNoZWNrIGNoYW5tb2RlIGFuZCBub3QgY2hhbm5lbEZsYWdzICovCisjZGVmaW5lIElTX0NIQU5fQihfYykgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQikKKyNkZWZpbmUgSVNfQ0hBTl9IVDIwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDIwKSB8fAlcCisJCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQyMCkpCisjZGVmaW5lIElTX0NIQU5fSFQ0MChfYykgKCgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fSFQoX2MpIChJU19DSEFOX0hUMjAoKF9jKSkgfHwgSVNfQ0hBTl9IVDQwKChfYykpKQorCitlbnVtIGF0aDlrX3Bvd2VyX21vZGUgeworCUFUSDlLX1BNX0FXQUtFID0gMCwKKwlBVEg5S19QTV9GVUxMX1NMRUVQLAorCUFUSDlLX1BNX05FVFdPUktfU0xFRVAsCisJQVRIOUtfUE1fVU5ERUZJTkVECit9OworCitlbnVtIGF0aDlrX2FudF9zZXR0aW5nIHsKKwlBVEg5S19BTlRfVkFSSUFCTEUgPSAwLAorCUFUSDlLX0FOVF9GSVhFRF9BLAorCUFUSDlLX0FOVF9GSVhFRF9CCit9OworCitlbnVtIGF0aDlrX3RwX3NjYWxlIHsKKwlBVEg5S19UUF9TQ0FMRV9NQVggPSAwLAorCUFUSDlLX1RQX1NDQUxFXzUwLAorCUFUSDlLX1RQX1NDQUxFXzI1LAorCUFUSDlLX1RQX1NDQUxFXzEyLAorCUFUSDlLX1RQX1NDQUxFX01JTgorfTsKKworZW51bSBzZXJfcmVnX21vZGUgeworCVNFUl9SRUdfTU9ERV9PRkYgPSAwLAorCVNFUl9SRUdfTU9ERV9PTiA9IDEsCisJU0VSX1JFR19NT0RFX0FVVE8gPSAyLAorfTsKKworc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSB7CisJdTMyIGJzX25leHR0YnR0OworCXUzMiBic19uZXh0ZHRpbTsKKwl1MzIgYnNfaW50dmFsOworI2RlZmluZSBBVEg5S19CRUFDT05fUEVSSU9EICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVRIOUtfQkVBQ09OX0VOQSAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBVEg5S19UU0ZPT1JfVEhSRVNIT0xEICAgIDB4MDAwMDQyNDAgLyogMTZrIHVzICovCisJdTMyIGJzX2R0aW1wZXJpb2Q7CisJdTE2IGJzX2NmcHBlcmlvZDsKKwl1MTYgYnNfY2ZwbWF4ZHVyYXRpb247CisJdTMyIGJzX2NmcG5leHQ7CisJdTE2IGJzX3RpbW9mZnNldDsKKwl1MTYgYnNfYm1pc3N0aHJlc2hvbGQ7CisJdTMyIGJzX3NsZWVwZHVyYXRpb247CisJdTMyIGJzX3RzZm9vcl90aHJlc2hvbGQ7Cit9OworCitzdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKKwl1MTYgc3ludGhfY2VudGVyOworCXUxNiBjdGxfY2VudGVyOworCXUxNiBleHRfY2VudGVyOworfTsKKworZW51bSB7CisJQVRIOUtfUkVTRVRfUE9XRVJfT04sCisJQVRIOUtfUkVTRVRfV0FSTSwKKwlBVEg5S19SRVNFVF9DT0xELAorfTsKKworc3RydWN0IGF0aDlrX2h3X3ZlcnNpb24geworCXUzMiBtYWdpYzsKKwl1MTYgZGV2aWQ7CisJdTE2IHN1YnZlbmRvcmlkOworCXUzMiBtYWNWZXJzaW9uOworCXUxNiBtYWNSZXY7CisJdTE2IHBoeVJldjsKKwl1MTYgYW5hbG9nNUdoelJldjsKKwl1MTYgYW5hbG9nMkdoelJldjsKK307CisKK3N0cnVjdCBhdGhfaHcgeworCXN0cnVjdCBhdGhfc29mdGMgKmFoX3NjOworCXN0cnVjdCBhdGg5a19od192ZXJzaW9uIGh3X3ZlcnNpb247CisJc3RydWN0IGF0aDlrX29wc19jb25maWcgY29uZmlnOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgY2FwczsKKwlzdHJ1Y3QgYXRoOWtfcmVndWxhdG9yeSByZWd1bGF0b3J5OworCXN0cnVjdCBhdGg5a19jaGFubmVsIGNoYW5uZWxzWzM4XTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY3VyY2hhbjsKKworCXVuaW9uIHsKKwkJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmIGRlZjsKKwkJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgbWFwNGs7CisJfSBlZXByb207CisJY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgKmVlcF9vcHM7CisJZW51bSBhdGg5a19lZXBfbWFwIGVlcF9tYXA7CisKKwlib29sIHN3X21nbXRfY3J5cHRvOworCWJvb2wgaXNfcGNpZXhwcmVzczsKKwl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKKwl1MTYgdHhfdHJpZ19sZXZlbDsKKwl1MTYgcmZzaWxlbnQ7CisJdTMyIHJma2lsbF9ncGlvOworCXUzMiByZmtpbGxfcG9sYXJpdHk7CisJdTMyIGJ0YWN0aXZlX2dwaW87CisJdTMyIHdsYW5hY3RpdmVfZ3BpbzsKKwl1MzIgYWhfZmxhZ3M7CisKKwllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKKwllbnVtIGF0aDlrX3Bvd2VyX21vZGUgcG93ZXJfbW9kZTsKKwllbnVtIGF0aDlrX3Bvd2VyX21vZGUgcmVzdG9yZV9tb2RlOworCisJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107CisJc3RydWN0IGFyNTQxNlN0YXRzIHN0YXRzOworCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKKworCWludDE2X3QgY3VyY2hhbl9yYWRfaW5kZXg7CisJdTMyIG1hc2tfcmVnOworCXUzMiB0eG9rX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGVycl9pbnRlcnJ1cHRfbWFzazsKKwl1MzIgdHhkZXNjX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGVvbF9pbnRlcnJ1cHRfbWFzazsKKwl1MzIgdHh1cm5faW50ZXJydXB0X21hc2s7CisJYm9vbCBjaGlwX2Z1bGxzbGVlcDsKKwl1MzIgYXRpbV93aW5kb3c7CisJdTE2IGFudGVubmFfc3dpdGNoX3N3YXA7CisJZW51bSBhdGg5a19hbnRfc2V0dGluZyBkaXZlcnNpdHlfY29udHJvbDsKKworCS8qIENhbGlicmF0aW9uICovCisJZW51bSBoYWxfY2FsX3R5cGVzIHN1cHBfY2FsczsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGlxX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCBhZGNnYWluX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCBhZGNkY19jYWxpbml0ZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2RjX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsX2xpc3Q7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsX2xpc3RfbGFzdDsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdF9jdXJyOworI2RlZmluZSB0b3RhbFBvd2VyTWVhc0kgbWVhczAudW5zaWduCisjZGVmaW5lIHRvdGFsUG93ZXJNZWFzUSBtZWFzMS51bnNpZ24KKyNkZWZpbmUgdG90YWxJcUNvcnJNZWFzIG1lYXMyLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNJT2RkUGhhc2UgIG1lYXMwLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY0lFdmVuUGhhc2UgbWVhczEudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjUU9kZFBoYXNlICBtZWFzMi51bnNpZ24KKyNkZWZpbmUgdG90YWxBZGNRRXZlblBoYXNlIG1lYXMzLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlICBtZWFzMC5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlIG1lYXMxLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZSAgbWVhczIuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZSBtZWFzMy5zaWduCisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMwOworCXVuaW9uIHsKKwkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJfSBtZWFzMTsKKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczI7CisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMzOworCXUxNiBjYWxfc2FtcGxlczsKKworCXUzMiBzdGFfaWQxX2RlZmF1bHRzOworCXUzMiBtaXNjX21vZGU7CisJZW51bSB7CisJCUFVVE9fMzJLSFosCisJCVVTRV8zMktIWiwKKwkJRE9OVF9VU0VfMzJLSFosCisJfSBlbmFibGVfMzJrSHpfY2xvY2s7CisKKwkvKiBSRiAqLworCXUzMiAqYW5hbG9nQmFuazBEYXRhOworCXUzMiAqYW5hbG9nQmFuazFEYXRhOworCXUzMiAqYW5hbG9nQmFuazJEYXRhOworCXUzMiAqYW5hbG9nQmFuazNEYXRhOworCXUzMiAqYW5hbG9nQmFuazZEYXRhOworCXUzMiAqYW5hbG9nQmFuazZUUENEYXRhOworCXUzMiAqYW5hbG9nQmFuazdEYXRhOworCXUzMiAqYWRkYWM1NDE2XzIxOworCXUzMiAqYmFuazZUZW1wOworCisJaW50MTZfdCB0eHBvd2VyX2luZGV4b2Zmc2V0OworCXUzMiBiZWFjb25faW50ZXJ2YWw7CisJdTMyIHNsb3R0aW1lOworCXUzMiBhY2t0aW1lb3V0OworCXUzMiBjdHN0aW1lb3V0OworCXUzMiBnbG9iYWx0eHRpbWVvdXQ7CisJdTggZ2JlYWNvbl9yYXRlOworCisJLyogQU5JICovCisJdTMyIHByb2NfcGh5ZXJyOworCWJvb2wgaGFzX2h3X3BoeWNvdW50ZXJzOworCXUzMiBhbmlwZXJpb2Q7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICpjdXJhbmk7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlIGFuaVsyNTVdOworCWludCB0b3RhbFNpemVEZXNpcmVkWzVdOworCWludCBjb2Fyc2VfaGlnaFs1XTsKKwlpbnQgY29hcnNlX2xvd1s1XTsKKwlpbnQgZmlycHdyWzVdOworCWVudW0gYXRoOWtfYW5pX2NtZCBhbmlfZnVuY3Rpb247CisKKwl1MzIgaW50cl90eHFzOworCWJvb2wgaW50cl9taXRpZ2F0aW9uOworCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmc7CisJdTggdHhjaGFpbm1hc2s7CisJdTggcnhjaGFpbm1hc2s7CisKKwl1MzIgb3JpZ2luYWxHYWluWzIyXTsKKwlpbnQgaW5pdFBEQURDOworCWludCBQREFEQ2RlbHRhOworCisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlDb21tb247CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmswOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCQl9SZkdhaW47CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmsxOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rMjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbms2OworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rNlRQQzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazc7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUFkZGFjOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlQY2llU2VyZGVzOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc0FkZGl0aW9uYWw7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzUnhHYWluOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc1R4R2FpbjsKK307CisKKy8qIEF0dGFjaCwgRGV0YWNoLCBSZXNldCAqLworY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpOwordm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpOwordm9pZCBhdGg5a19od19yZmRldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7CitpbnQgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkgICBib29sIGJDaGFubmVsQ2hhbmdlKTsKK2Jvb2wgYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCisJCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKK2Jvb2wgYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKKwkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyIHNldHRpbmcsIGludCAqc3RhdHVzKTsKKworLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KK2Jvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSk7Citib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKTsKK2Jvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksCisJCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19rZXl2YWwgKmssCisJCQkJIGNvbnN0IHU4ICptYWMpOworYm9vbCBhdGg5a19od19rZXlpc3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpOworCisvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KK3ZvaWQgYXRoOWtfaHdfY2ZnX2dwaW9faW5wdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvKTsKK3UzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8pOwordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKKwkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpOwordm9pZCBhdGg5a19od19zZXRfZ3BpbyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpOworI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCk7CiAjZW5kaWYKK3UzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGFudGVubmEpOworYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCisJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywgdTggKnJ4X2NoYWlubWFzaywKKwkJCSAgICAgICB1OCAqYW50ZW5uYV9jZmdkKTsKIAotI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKSAgICAgKCgoX3IpICYgMHgzZikgPDwgKF9zKSkKKy8qIEdlbmVyYWwgT3BlcmF0aW9uICovCitib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCk7Cit1MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKK2Jvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBmbGFncywgdTE2ICpsb3csIHUxNiAqaGlnaCk7Cit1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKKwkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwgYm9vbCBzaG9ydFByZWFtYmxlKTsKK3ZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgc3RydWN0IGNoYW5fY2VudGVycyAqY2VudGVycyk7Cit1MzIgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpOworYm9vbCBhdGg5a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpOwordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpOwordm9pZCBhdGg5a19od19zZXRvcG1vZGUoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit1NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCwgdTY0IHRzZjY0KTsKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHNldHRpbmcpOworYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19odF9tYWNtb2RlIG1vZGUpOwordm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbmV4dF9iZWFjb24sIHUzMiBiZWFjb25fcGVyaW9kKTsKK3ZvaWQgYXRoOWtfaHdfc2V0X3N0YV9iZWFjb25fdGltZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlICpicyk7Citib29sIGF0aDlrX2h3X3NldHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwordm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9odyAqYWgsIGludCByZXN0b3JlKTsKIAotI2RlZmluZSBBVEg5S19BTlRFTk5BMF9DSEFJTk1BU0sgICAgICAgIDB4MQotI2RlZmluZSBBVEg5S19BTlRFTk5BMV9DSEFJTk1BU0sgICAgICAgIDB4MgorLyogSW50ZXJydXB0IEhhbmRsaW5nICovCitib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZ2V0aXNyKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCAqbWFza2VkKTsKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X2ludHJnZXQoc3RydWN0IGF0aF9odyAqYWgpOworZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50IGludHMpOwogCi0jZGVmaW5lIEFUSDlLX05VTV9ETUFfREVCVUdfUkVHUyAgICAgICAgOAotI2RlZmluZSBBVEg5S19OVU1fUVVFVUVTICAgICAgICAgICAgICAgIDEwCi0KLSNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICA0Ci0jZGVmaW5lIEhBTF9TUFVSX0lNTVVORV9NQVggICAgICAgICAgICAgNwotI2RlZmluZSBIQUxfRklSU1RfU1RFUF9NQVggICAgICAgICAgICAgIDIKLQotI2RlZmluZSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0ggICAgICAgICAgNTAwCi0jZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XICAgICAgICAgICAyMDAKLSNkZWZpbmUgQVRIOUtfQU5JX0NDS19UUklHX0hJR0ggICAgICAgICAgIDIwMAotI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfTE9XICAgICAgICAgICAgMTAwCi0jZGVmaW5lIEFUSDlLX0FOSV9OT0lTRV9JTU1VTkVfTFZMICAgICAgICA0Ci0jZGVmaW5lIEFUSDlLX0FOSV9VU0VfT0ZETV9XRUFLX1NJRyAgICAgICB0cnVlCi0jZGVmaW5lIEFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSICAgICAgICBmYWxzZQotI2RlZmluZSBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMICAgICAgICAgNwotI2RlZmluZSBBVEg5S19BTklfRklSU1RFUF9MVkwgICAgICAgICAgICAgMAotI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfSElHSCAgICAgICAgICAgNDAKLSNkZWZpbmUgQVRIOUtfQU5JX1JTU0lfVEhSX0xPVyAgICAgICAgICAgIDcKLSNkZWZpbmUgQVRIOUtfQU5JX1BFUklPRCAgICAgICAgICAgICAgICAgIDEwMAotCi0jZGVmaW5lIEFSX0dQSU9EX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMUZGRgotI2RlZmluZSBBUl9HUElPX0JJVChfZ3BpbykgICAgICAgICAgICAgICgxIDw8IChfZ3BpbykpCi0KLSNkZWZpbmUgSEFMX0VQX1JORCh4LCBtdWwpIFwKLQkoKCgoeCklKG11bCkpID49ICgobXVsKS8yKSkgPyAoKHgpICsgKChtdWwpIC0gMSkpIC8gKG11bCkgOiAoeCkvKG11bCkpCi0jZGVmaW5lIEJFQUNPTl9SU1NJKGFocCkgXAotCUhBTF9FUF9STkQoYWhwLT5haF9zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpLCBcCi0JCUFUSDlLX1JTU0lfRVBfTVVMVElQTElFUikKLQotI2RlZmluZSBhaF9taWJTdGF0cyAgICAgYWhfc3RhdHMuYXN0X21pYnN0YXRzCi0KLSNkZWZpbmUgQUhfVElNRU9VVCAgICAgICAgIDEwMDAwMAotI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgIDEwCi0KLSNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAxMjgKLSNkZWZpbmUgUE9XRVJfVVBfVElNRSAgICAyMDAwMDAKLQotI2RlZmluZSBFWFRfQURESVRJVkUgKDB4ODAwMCkKLSNkZWZpbmUgQ1RMXzExQV9FWFQgKENUTF8xMUEgfCBFWFRfQURESVRJVkUpCi0jZGVmaW5lIENUTF8xMUdfRVhUIChDVExfMTFHIHwgRVhUX0FERElUSVZFKQotI2RlZmluZSBDVExfMTFCX0VYVCAoQ1RMXzExQiB8IEVYVF9BRERJVElWRSkKLQotI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MCAyCi0jZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwIDMKLSNkZWZpbmUgU1BVUl9SU1NJX1RIUkVTSCA0MAotCi0jZGVmaW5lIFRVX1RPX1VTRUMoX3R1KSAgICAgICAgICgoX3R1KSA8PCAxMCkKLQotI2RlZmluZSBDQUJfVElNRU9VVF9WQUwgICAgICAgICAxMAotI2RlZmluZSBCRUFDT05fVElNRU9VVF9WQUwgICAgICAxMAotI2RlZmluZSBNSU5fQkVBQ09OX1RJTUVPVVRfVkFMICAgMQotI2RlZmluZSBTTEVFUF9TTE9QICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIENDS19TSUZTX1RJTUUgICAgICAgIDEwCi0jZGVmaW5lIENDS19QUkVBTUJMRV9CSVRTICAgMTQ0Ci0jZGVmaW5lIENDS19QTENQX0JJVFMgICAgICAgIDQ4Ci0KLSNkZWZpbmUgT0ZETV9TSUZTX1RJTUUgICAgICAgIDE2Ci0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRSAgICAyMAotI2RlZmluZSBPRkRNX1BMQ1BfQklUUyAgICAgICAgMjIKLSNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRSAgICAgIDQKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRV9IQUxGICAgICAzMgotI2RlZmluZSBPRkRNX1BSRUFNQkxFX1RJTUVfSEFMRiA0MAotI2RlZmluZSBPRkRNX1BMQ1BfQklUU19IQUxGICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX0hBTEYgICA4Ci0KLSNkZWZpbmUgT0ZETV9TSUZTX1RJTUVfUVVBUlRFUiAgICAgIDY0Ci0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9RVUFSVEVSICA4MAotI2RlZmluZSBPRkRNX1BMQ1BfQklUU19RVUFSVEVSICAgICAgMjIKLSNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSICAgIDE2Ci0KLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmgKaW5kZXggZjNjZmExNi4uZTJmMGEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsOCArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0vKiBBUjU0MTYgdG8gRm93bCBhcjUxNDYuaW5pICovCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxMDBbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKQEAgLTc5LDcgKzc4LDcgQEAKICAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uXzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uW11bMl0gPSB7CiAgICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCiAgICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCkBAIC00NTcsMTIgKzQ1NiwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmswW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2Fpbl85MTAwW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtNTI5LDIxICs1MjgsMjEgQEAKICAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMSB9LAogICAgIHsgMHgwMDAwOThlYywgMHgwMDAwMDAwOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsyW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmszXzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNbXVszXSA9IHsKICAgICB7IDB4MDAwMDk4ZjAsIDB4MDE0MDAwMTgsIDB4MDFjMDAwMTggfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNltdWzNdID0gewogCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCkBAIC01ODAsNyArNTc5LDcgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNjE2LDEzICs2MTUsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rN1tdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkFkZGFjW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAzIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCkBAIC02NTksMTEgKzY1OCwxMCBAQAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5OGM0LCAgMHgwMDAwMDAwMCB9LAorICAgIHsweDAwMDA5OGNjLCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogYXI1NDE2IC0gaG93bCBhcjU0MTZfaG93bC5pbmkgKi8KLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTEwMFtdWzZdID0gewogICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LApAQCAtNzM3LDcgKzczNSw3IEBACiAgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25fOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAogICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LApAQCAtMTExMSwxMiArMTEwOSwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5fOTEwMFtdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtMTE4MywyMSArMTE4MSwyMSBAQAogICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMV85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDAyMTA4NDIxfSwKICAgICB7IDB4MDAwMDk4ZWMsIDB4MDAwMDAwMDh9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3fSwKICAgICB7IDB4MDAwMDk4ZTAsIDB4MDAwMDA0MjB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM185MTAwW11bM10gPSB7CiAgICAgeyAweDAwMDA5OGYwLCAweDAxNDAwMDE4LCAweDAxYzAwMDE4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2W11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKIAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtMTIzNSw3ICsxMjMzLDcgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ185MTAwW11bM10gPSB7CiAKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTEyNzIsMTMgKzEyNzAsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY1tdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCkBAIC0xMzEzLDcgKzEzMTEsNiBAQAogICAgIHsweDAwMDA5OGNjLCAweDAwMDAwMDAwIH0sCiB9OwogCi0vKiBBUjU0MTYgOTE2MCBTb3dsIGFyNTQxNl9zb3dsLmluaSAqLwogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZNb2Rlc185MTYwW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCkBAIC0yNTQ5LDYgKzI1NDYsOCBAQAogICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAogICAgIHsgMHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAogICAgIHsgMHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSB9LAogICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAogICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAogICAgIHsgMHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LApAQCAtMjU4Nyw3ICsyNTg2LDYgQEAKICAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKICAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyNTAsIDB4MDAxZmYwMDAsIDB4MDAxZmYwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKICAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKICAgICB7IDB4MDAwMGEzZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDc4OTQsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAgfSwKQEAgLTI3MTksNyArMjcxNyw2IEBACiAgICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCiAgICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCiAgICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwIH0sCiAgICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCkBAIC0yNzM1LDcgKzI3MzIsNiBAQAogICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAogICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCB9LAogICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LApAQCAtMjgxNyw3ICsyODEzLDcgQEAKICAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKICAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKICAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKLSAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKKyAgICB7IDB4MDAwMGM5NjgsIDB4MDAwMDAzY2UgfSwKICAgICB7IDB4MDAwMDk5NzAsIDB4MTkwZmI1MTUgfSwKICAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKQEAgLTI5MDksMTYgKzI5MDUsMTIgQEAKICAgICB7IDB4MDAwMDc4MGMsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4MTAsIDB4NmQ4MDEzMDAgfSwKICAgICB7IDB4MDAwMDc4MTgsIDB4MDdlNDEwMDAgfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4MDAzOTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4OTI1OTI0ODAgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDUwMTIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NmQ4MDEzMDAgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDdlNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4MDAzOTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4OTI1OTI0ODAgfSwKICAgICB7IDB4MDAwMDc4NDgsIDB4MDAxMDAwMDAgfSwKICAgICB7IDB4MDAwMDc4NGMsIDB4NzczZjA1NjcgfSwKICAgICB7IDB4MDAwMDc4NTAsIDB4NTQyMTQ1MTQgfSwKQEAgLTI5NTQsNyArMjk0Niw2IEBACiAgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxODIxLCAweDAzNzIxODIxIH0sCiAgICAgeyAweDAwMDA5OTE0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwIH0sCiAgICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGRmYmMxMjEwLCAweGRmYmMxMjEwIH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4ME1vZGVzX2JhY2tvZmZfMjNkYl9yeGdhaW5fOTI4MF8yW11bNl0gPSB7CkBAIC0zMzY2LDIxICszMzU3LDI2IEBACiAgICAgeyAweDAwMDBhMzE4LCAweDAwMDE1MDRhLCAweDAwMDE1MDRhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhIH0sCiAgICAgeyAweDAwMDBhMzFjLCAweDAwMDE5MDRjLCAweDAwMDE5MDRjLCAweDAwMDFiMjExLCAweDAwMDFiMjExLCAweDAwMDFiMjExIH0sCiAgICAgeyAweDAwMDBhMzIwLCAweDAwMDFjMDRlLCAweDAwMDFjMDRlLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDIwMDkyLCAweDAwMDIwMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDI0MTBhLCAweDAwMDI0MTBhLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDI3MTBjLCAweDAwMDI3MTBjLCAweDAwMDI5ODExLCAweDAwMDI5ODExLCAweDAwMDI5ODExIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDJiMThiLCAweDAwMDJiMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDJlMWNjLCAweDAwMDJlMWNjLCAweDAwMDMwYTE0LCAweDAwMDMwYTE0LCAweDAwMDMwYTE0IH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDNkZThhLCAweDAwMDNkZThhLCAweDAwMDNkZThhIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1IH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRmZjU0LCAweDAwMDRmZjU0LCAweDAwMDRmZjU0IH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDUzZmQ1LCAweDAwMDUzZmQ1LCAweDAwMDUzZmQ1IH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDIxMDkyLCAweDAwMDIxMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDI1MTBhLCAweDAwMDI1MTBhLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDI5MTBjLCAweDAwMDI5MTBjLCAweDAwMDI5ODExLCAweDAwMDI5ODExLCAweDAwMDI5ODExIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDJjMThiLCAweDAwMDJjMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDJmMWNjLCAweDAwMDJmMWNjLCAweDAwMDMwYTE0LCAweDAwMDMwYTE0LCAweDAwMDMwYTE0IH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWViLCAweDAwMDMyMWViLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDNkZThhLCAweDAwMDNkZThhLCAweDAwMDNkZThhIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1IH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDRmZjU0LCAweDAwMDRmZjU0LCAweDAwMDRmZjU0IH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1IH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmIH0sCiAgICAgeyAweDAwMDA3ODM4LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmIH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwIH0sCisgICAgeyAweDAwMDA3ODQwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTllNjUyLCAweDBhMTllNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMjdjLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlIH0sCiB9OwogCkBAIC0zNDA5LDYgKzM0MDUsMTEgQEAKICAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIgfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYgfSwKICAgICB7IDB4MDAwMDc4MzgsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYgfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKICAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKIH07CiAKQEAgLTQxMjAsNiArNDEyMSw3IEBACiAgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCiB9OwogCisvKiBBUjkyODUgdjFfMiBQQ0kgUmVnaXN0ZXIgV3JpdGVzLiAgQ3JlYXRlZDogMDMvMDQvMDkgKi8KIHN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfOTI4NV8xXzJbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKQEAgLTQxMzUsMTEgKzQxMzcsMTEgQEAKICAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKICAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKICAgICB7IDB4MDAwMDk4NDAsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjAwMjAsIDB4MDM3MjAwMjAsIDB4MDM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDAwNTcsIDB4MDAwMDAwNTcsIDB4MDAwMDEwNTkgfSwKKyAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MjAsIDB4MDM3MjE2MjAsIDB4MDM3MjE2YTAgfSwKKyAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTkgfSwKICAgICB7IDB4MDAwMDk4NTAsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIgfSwKICAgICB7IDB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzOTYwNWUgfSwKKyAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNzYwNWUsIDB4MzEzNzYwNWUsIDB4MzEzOTYwNWUgfSwKICAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNThkMTgsIDB4MDAwNThkMTgsIDB4MDAwNThkMjAsIDB4MDAwNThkMjAsIDB4MDAwNThkMTggfSwKICAgICB7IDB4MDAwMDk4NjQsIDB4MDAwMGZlMDAsIDB4MDAwMGZlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKICAgICB7IDB4MDAwMDk4NjgsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAgfSwKQEAgLTQxNTQsMjkxICs0MTU2LDI3MiBAQAogICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAogICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAogICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NyB9LAotICAgIHsgMHgwMDAwOTljOCwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSB9LAogICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCB9LAogICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCB9LAogICAgIHsgMHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4NCwgMHgwMDA2ODA4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4OCwgMHgwMDA2ODA4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4YywgMHgwMDA2ODA4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwMCwgMHgwMDA2ODEwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwNCwgMHgwMDA2ODEwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwOCwgMHgwMDA2ODEwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwYywgMHgwMDA2ODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExNCwgMHgwMDA2ODExNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4MCwgMHgwMDA2ODE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4NCwgMHgwMDA2ODE4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4OCwgMHgwMDA2ODE4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4YywgMHgwMDA2ODE4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5MCwgMHgwMDA2ODE5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5NCwgMHgwMDA2ODE5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhMCwgMHgwMDA2ODFhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIwYywgMHgwMDA2ODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhOCwgMHgwMDA2ODFhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI4NCwgMHgwMDA2ODI4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI4OCwgMHgwMDA2ODI4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIyMCwgMHgwMDA2ODIyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI5MCwgMHgwMDA2ODI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwMCwgMHgwMDA2ODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwNCwgMHgwMDA2ODMwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwOCwgMHgwMDA2ODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwYywgMHgwMDA2ODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODM4MCwgMHgwMDA2ODM4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODM4NCwgMHgwMDA2ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwNCwgMHgwMDA2OGIwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwOCwgMHgwMDA2OGIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwOCwgMHgwMDA2OGIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwYywgMHgwMDA2OGIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4MCwgMHgwMDA2OGI4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4NCwgMHgwMDA2OGI4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4OCwgMHgwMDA2OGI4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4YywgMHgwMDA2OGI4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGI5MCwgMHgwMDBiOGI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4MCwgMHgwMDBiOGY4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4OCwgMHgwMDBiOGY4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4YywgMHgwMDBiOGY4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY5MCwgMHgwMDBiOGY5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMwYywgMHgwMDBiYjMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMxMCwgMHgwMDBiYjMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4NCwgMHgwMDBiYjM4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4OCwgMHgwMDBiYjM4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMyNCwgMHgwMDBiYjMyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjcwNCwgMHgwMDBiYjcwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTZhNCwgMHgwMDBmOTZhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTZhOCwgMHgwMDBmOTZhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMCwgMHgwMDBmOTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNCwgMHgwMDBmOTcxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyMCwgMHgwMDBmOTcyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyNCwgMHgwMDBmOTcyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyOCwgMHgwMDBmOTcyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyYywgMHgwMDBmOTcyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTdhMCwgMHgwMDBmOTdhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTdhNCwgMHgwMDBmOTdhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOCwgMHgwMDBmYjdhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMCwgMHgwMDBmYjdiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNCwgMHgwMDBmYjdiNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOCwgMHgwMDBmYjdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNSwgMHgwMDBmYjdhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOSwgMHgwMDBmYjdhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhZCwgMHgwMDBmYjdhZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMSwgMHgwMDBmYjdiMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNSwgMHgwMDBmYjdiNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOSwgMHgwMDBmYjdiOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNSwgMHgwMDBmYjdjNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjOSwgMHgwMDBmYjdjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMSwgMHgwMDBmYjdkMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNSwgMHgwMDBmYjdkNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkOSwgMHgwMDBmYjdkOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNiwgMHgwMDBmYjdjNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYSwgMHgwMDBmYjdjYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZSwgMHgwMDBmYjdjZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMiwgMHgwMDBmYjdkMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNiwgMHgwMDBmYjdkNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMywgMHgwMDBmYjdjMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNywgMHgwMDBmYjdjNywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYiwgMHgwMDBmYjdjYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZiwgMHgwMDBmYjdjZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNywgMHgwMDBmYjdkNywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4MCwgMHgwMDA2ODA4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4NCwgMHgwMDA2ODA4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4OCwgMHgwMDA2ODA4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4YywgMHgwMDA2ODA4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwMCwgMHgwMDA2ODEwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwNCwgMHgwMDA2ODEwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwOCwgMHgwMDA2ODEwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwYywgMHgwMDA2ODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4MCwgMHgwMDA2ODE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4NCwgMHgwMDA2ODE4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4OCwgMHgwMDA2ODE4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4YywgMHgwMDA2ODE4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5MCwgMHgwMDA2ODE5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5NCwgMHgwMDA2ODE5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhMCwgMHgwMDA2ODFhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIwYywgMHgwMDA2ODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhOCwgMHgwMDA2ODFhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhYywgMHgwMDA2ODFhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIxYywgMHgwMDA2ODIxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIyNCwgMHgwMDA2ODIyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI5MCwgMHgwMDA2ODI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwMCwgMHgwMDA2ODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwOCwgMHgwMDA2ODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwYywgMHgwMDA2ODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMxMCwgMHgwMDA2ODMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4OCwgMHgwMDA2ODc4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4YywgMHgwMDA2ODc4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5MCwgMHgwMDA2ODc5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5NCwgMHgwMDA2ODc5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5OCwgMHgwMDA2ODc5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5YywgMHgwMDA2ODc5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4OSwgMHgwMDA2OGI4OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4ZCwgMHgwMDA2OGI4ZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5MSwgMHgwMDA2OGI5MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5NSwgMHgwMDA2OGI5NSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5OSwgMHgwMDA2OGI5OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhNSwgMHgwMDA2OGJhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhOSwgMHgwMDA2OGJhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhZCwgMHgwMDA2OGJhZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGIwYywgMHgwMDBiOGIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGYxMCwgMHgwMDBiOGYxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGYxNCwgMHgwMDBiOGYxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4OCwgMHgwMDBiOGY4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4MCwgMHgwMDBiYjM4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4NCwgMHgwMDBiYjM4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4OCwgMHgwMDBiYjM4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4YywgMHgwMDBiYjM4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM5NCwgMHgwMDBiYjM5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjc5OCwgMHgwMDBiYjc5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwYywgMHgwMDBmOTcwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMCwgMHgwMDBmOTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNCwgMHgwMDBmOTcxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxOCwgMHgwMDBmOTcxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwNSwgMHgwMDBmOTcwNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwOSwgMHgwMDBmOTcwOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwZCwgMHgwMDBmOTcwZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMSwgMHgwMDBmOTcxMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNSwgMHgwMDBmOTcxNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxOSwgMHgwMDBmOTcxOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNCwgMHgwMDBmYjdhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOCwgMHgwMDBmYjdhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhYywgMHgwMDBmYjdhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhYywgMHgwMDBmYjdhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMCwgMHgwMDBmYjdiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOCwgMHgwMDBmYjdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiYywgMHgwMDBmYjdiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhMSwgMHgwMDBmYjdhMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNSwgMHgwMDBmYjdhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOSwgMHgwMDBmYjdhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMSwgMHgwMDBmYjdiMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNSwgMHgwMDBmYjdiNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiZCwgMHgwMDBmYjdiZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjOSwgMHgwMDBmYjdjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZCwgMHgwMDBmYjdjZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMSwgMHgwMDBmYjdkMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkOSwgMHgwMDBmYjdkOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMiwgMHgwMDBmYjdjMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNiwgMHgwMDBmYjdjNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYSwgMHgwMDBmYjdjYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZSwgMHgwMDBmYjdjZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMiwgMHgwMDBmYjdkMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNiwgMHgwMDBmYjdkNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMywgMHgwMDBmYjdjMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYiwgMHgwMDBmYjdjYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAogICAgIHsgMHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAogICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTI1MCwgMHgwMDA0ZjAwMCwgMHgwMDA0ZjAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTgxYzY1MiwgMHgwYTgxYzY1MiwgMHgwYTgyMDY1MiwgMHgwYTgyMDY1MiwgMHgwYTgyYTY1MiB9LAotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNzIwMSwgMHgwMDAwNzIwMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDQwOCwgMHgwMDAxMDQwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODYwYSwgMHgwMDAxODYwYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDgxOCwgMHgwMDAyMDgxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNDg1OCwgMHgwMDAyNDg1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNjg1OSwgMHgwMDAyNjg1OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyOTg1YiwgMHgwMDAyOTg1YiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYjg5YSwgMHgwMDAyYjg5YSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZDg5YiwgMHgwMDAyZDg5YiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZjg5YywgMHgwMDAyZjg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMTg5ZCwgMHgwMDAzMTg5ZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMzg5ZSwgMHgwMDAzMzg5ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNjhkZSwgMHgwMDAzNjhkZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAogfTsKIApAQCAtNDU2OCw3ICs0NTUxLDcgQEAKICAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKICAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKICAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MTAgfSwKICAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKQEAgLTQ1ODQsNyArNDU2Nyw3IEBACiAgICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCiAgICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjEwIH0sCisgICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjBhIH0sCiAgICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCkBAIC00Njc5LDcgKzQ2NjIsNyBAQAogICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwOTlhOCwgMHgyMDFmZmYwMCB9LAotICAgIHsgMHgwMDAwOTlhYywgMHgyZGVmMTAwMCB9LAorICAgIHsgMHgwMDAwOTlhYywgMHgyZGVmMDQwMCB9LAogICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAogICAgIHsgMHgwMDAwOTliNCwgMHgwMDAwMDgyMCB9LAogICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LApAQCAtNDY4OCw3ICs0NjcxLDcgQEAKICAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKICAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKICAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY3ODggfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY4YzggfSwKICAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKICAgICB7IDB4MDAwMGEyMTQsIDB4MDAyMDZjMTAgfSwKICAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKQEAgLTQ3MDgsOCArNDY5MSw2IEBACiAgICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCiAgICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDMxOGM2MzE4IH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MGMwMzE4IH0sCiAgICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCiAgICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCiAgICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCkBAIC00NzI0LDggKzQ3MDUsNiBAQAogICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgzMThjNjMxOCB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDMxOCB9LAogICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwYTNhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTNhNCwgMHgwMDAwMDAwMCB9LApAQCAtNDc0MCw4ICs0NzE5LDYgQEAKICAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzE4YzYzMTggfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzMTggfSwKICAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKICAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKQEAgLTQ3NTIsMTMgKzQ3MjksMTEgQEAKICAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKICAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODcgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDEgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKICAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKICAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKQEAgLTQ3NzEsMTAgKzQ3NDYsODEgQEAKICAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKICAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQgfSwKICAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKIH07CiAKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY0NDAsIDB4MDAwMGY0NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQ2NDAsIDB4MDAwMTQ2NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2ODAsIDB4MDAwMTg2ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk4NDEsIDB4MDAwMTk4NDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWNhNDAsIDB4MDAwMWNhNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWZhODAsIDB4MDAwMWZhODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjNhYzAsIDB4MDAwMjNhYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTIgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCit9OworCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMltdWzJdID0gewogICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAogICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwppbmRleCBhZjMyZDA5Li5lMGE2ZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDQ1ICsxNCw0MCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF90eHFfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19JTlRFUlJVUFQsCiAJCSJ0eCBvayAweCV4IGVyciAweCV4IGRlc2MgMHgleCBlb2wgMHgleCB1cm4gMHgleFxuIiwKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVyckludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJYWgtPnR4b2tfaW50ZXJydXB0X21hc2ssIGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaywKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzaywgYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrLAorCQlhaC0+dHh1cm5faW50ZXJydXB0X21hc2spOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9JTVJfUzAsCi0JCSAgU00oYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgQVJfSU1SX1MwX1FDVV9UWE9LKQotCQkgIHwgU00oYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOworCQkgIFNNKGFoLT50eG9rX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYT0spCisJCSAgfCBTTShhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MxLAotCQkgIFNNKGFocC0+YWhfdHhFcnJJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzFfUUNVX1RYRVJSKQotCQkgIHwgU00oYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKKwkJICBTTShhaC0+dHhlcnJfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFUlIpCisJCSAgfCBTTShhaC0+dHhlb2xfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9JTVJfUzIsCi0JCSAgICAgIEFSX0lNUl9TMl9RQ1VfVFhVUk4sIGFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJICAgICAgQVJfSU1SX1MyX1FDVV9UWFVSTiwgYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrKTsKIH0KIAotdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewogCXJldHVybiBSRUdfUkVBRChhaCwgQVJfUVRYRFAocSkpOwogfQogCi1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKQorYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQogewogCVJFR19XUklURShhaCwgQVJfUVRYRFAocSksIHR4ZHApOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInF1ZXVlICV1XG4iLCBxKTsKIApAQCAtNjEsNyArNTYsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi11MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAl1MzIgbnBlbmQ7CiAKQEAgLTc1LDE2ICs3MCwxNSBAQAogCXJldHVybiBucGVuZDsKIH0KIAotYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKK2Jvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiB0eGNmZywgY3VyTGV2ZWwsIG5ld0xldmVsOwogCWVudW0gYXRoOWtfaW50IG9tYXNrOwogCi0JaWYgKGFoLT5haF90eFRyaWdMZXZlbCA+PSBNQVhfVFhfRklGT19USFJFU0hPTEQpCisJaWYgKGFoLT50eF90cmlnX2xldmVsID49IE1BWF9UWF9GSUZPX1RIUkVTSE9MRCkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jb21hc2sgPSBhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWhwLT5haF9tYXNrUmVnICYgfkFUSDlLX0lOVF9HTE9CQUwpOworCW9tYXNrID0gYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5tYXNrX3JlZyAmIH5BVEg5S19JTlRfR0xPQkFMKTsKIAogCXR4Y2ZnID0gUkVHX1JFQUQoYWgsIEFSX1RYQ0ZHKTsKIAljdXJMZXZlbCA9IE1TKHR4Y2ZnLCBBUl9GVFJJRyk7CkBAIC0xMDAsMjEgKzk0LDM4IEBACiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgb21hc2spOwogCi0JYWgtPmFoX3R4VHJpZ0xldmVsID0gbmV3TGV2ZWw7CisJYWgtPnR4X3RyaWdfbGV2ZWwgPSBuZXdMZXZlbDsKIAogCXJldHVybiBuZXdMZXZlbCAhPSBjdXJMZXZlbDsKIH0KIAotYm9vbCBhdGg5a19od19zdG9wdHhkbWEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKKyNkZWZpbmUgQVRIOUtfVFhfU1RPUF9ETUFfVElNRU9VVAk0MDAwICAgIC8qIHVzZWMgKi8KKyNkZWZpbmUgQVRIOUtfVElNRV9RVUFOVFVNCQkxMDAgICAgIC8qIHVzZWMgKi8KKworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CisJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiB0c2ZMb3csIGosIHdhaXQ7CisJdTMyIHdhaXRfdGltZSA9IEFUSDlLX1RYX1NUT1BfRE1BX1RJTUVPVVQgLyBBVEg5S19USU1FX1FVQU5UVU07CisKKwlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbnZhbGlkIHF1ZXVlIG51bSAldVxuIiwgcSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlxaSA9ICZhaC0+dHhxW3FdOworCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAxIDw8IHEpOwogCi0JZm9yICh3YWl0ID0gMTAwMDsgd2FpdCAhPSAwOyB3YWl0LS0pIHsKKwlmb3IgKHdhaXQgPSB3YWl0X3RpbWU7IHdhaXQgIT0gMDsgd2FpdC0tKSB7CiAJCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpID09IDApCiAJCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7CisJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCX0KIAogCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpKSB7CkBAIC0xNDQsOCArMTU1LDcgQEAKIAkJdWRlbGF5KDIwMCk7CiAJCVJFR19DTFJfQklUKGFoLCBBUl9USU1FUl9NT0RFLCBBUl9RVUlFVF9USU1FUl9FTik7CiAKLQkJd2FpdCA9IDEwMDA7Ci0KKwkJd2FpdCA9IHdhaXRfdGltZTsKIAkJd2hpbGUgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgcSkpIHsKIAkJCWlmICgoLS13YWl0KSA9PSAwKSB7CiAJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfWE1JVCwKQEAgLTE1MywxOCArMTYzLDIwIEBACiAJCQkJCSJtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl1ZGVsYXkoMTAwKTsKKwkJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCQl9CiAKIAkJUkVHX0NMUl9CSVQoYWgsIEFSX0RJQUdfU1csIEFSX0RJQUdfRk9SQ0VfQ0hfSURMRV9ISUdIKTsKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAwKTsKLQogCXJldHVybiB3YWl0ICE9IDA7CisKKyN1bmRlZiBBVEg5S19UWF9TVE9QX0RNQV9USU1FT1VUCisjdW5kZWYgQVRIOUtfVElNRV9RVUFOVFVNCiB9CiAKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKIAkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKQogewpAQCAtMTkyLDcgKzIwNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwogCkBAIC0yMDMsNyArMjE1LDcgQEAKIAlhZHMtPmRzX3R4c3RhdHVzOCA9IGFkcy0+ZHNfdHhzdGF0dXM5ID0gMDsKIH0KIAotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQoraW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKIApAQCAtMjczLDE5ICsyODUsMTggQEAKIAlkcy0+ZHNfdHhzdGF0LnRzX3Nob3J0cmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfUlRTRmFpbENudCk7CiAJZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfRGF0YUZhaWxDbnQpOwogCWRzLT5kc190eHN0YXQudHNfdmlydGNvbCA9IE1TKGFkcy0+ZHNfdHhzdGF0dXMxLCBBUl9WaXJ0UmV0cnlDbnQpOwotCWRzLT5kc190eHN0YXQudHNfYW50ZW5uYSA9IDE7CisJZHMtPmRzX3R4c3RhdC50c19hbnRlbm5hID0gMDsKIAogCXJldHVybiAwOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl90eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCiAJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQl0eFBvd2VyICs9IGFocC0+YWhfdHhQb3dlckluZGV4T2Zmc2V0OworCXR4UG93ZXIgKz0gYWgtPnR4cG93ZXJfaW5kZXhvZmZzZXQ7CiAJaWYgKHR4UG93ZXIgPiA2MykKIAkJdHhQb3dlciA9IDYzOwogCkBAIC0zMTQsNyArMzI1LDcgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKIAkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCiAJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCkBAIC0zMjUsOSArMzM2LDYgQEAKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmxhc3RfYWRzID0gQVI1NDE2REVTQyhsYXN0ZHMpOwogCXUzMiBkc19jdGwwOwogCi0JKHZvaWQpIG5zZXJpZXM7Ci0JKHZvaWQpIHJ0c2N0c0R1cmF0aW9uOwotCiAJaWYgKGZsYWdzICYgKEFUSDlLX1RYREVTQ19SVFNFTkEgfCBBVEg5S19UWERFU0NfQ1RTRU5BKSkgewogCQlkc19jdGwwID0gYWRzLT5kc19jdGwwOwogCkBAIC0zNzIsNyArMzgwLDcgQEAKIAlsYXN0X2Fkcy0+ZHNfY3RsMyA9IGFkcy0+ZHNfY3RsMzsKIH0KIAotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCXUzMiBhZ2dyTGVuKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zODIsNyArMzkwLDcgQEAKIAlhZHMtPmRzX2N0bDYgfD0gU00oYWdnckxlbiwgQVJfQWdnckxlbik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCSB1MzIgbnVtRGVsaW1zKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zOTYsNyArNDA0LDcgQEAKIAlhZHMtPmRzX2N0bDYgPSBjdGw2OwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKQEAgLTQwNSwxNCArNDEzLDE0IEBACiAJYWRzLT5kc19jdGw2ICY9IH5BUl9QYWREZWxpbTsKIH0KIAotdm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKIAlhZHMtPmRzX2N0bDEgJj0gKH5BUl9Jc0FnZ3IgJiB+QVJfTW9yZUFnZ3IpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKQEAgLTQyMSw3ICs0MjksNyBAQAogCWFkcy0+ZHNfY3RsMiB8PSBTTShidXJzdER1cmF0aW9uLCBBUl9CdXJzdER1cik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgICB1MzIgdm1mKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC00MzIsMjAgKzQ0MCwxNyBAQAogCQlhZHMtPmRzX2N0bDAgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKIH0KIAotdm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyICp0eHFzKQordm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnR4cXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCSp0eHFzICY9IGFocC0+YWhfaW50clR4cXM7Ci0JYWhwLT5haF9pbnRyVHhxcyAmPSB+KCp0eHFzKTsKKwkqdHhxcyAmPSBhaC0+aW50cl90eHFzOworCWFoLT5pbnRyX3R4cXMgJj0gfigqdHhxcyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CiAJdTMyIGN3OwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAogCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewpAQCAtNDUzLDcgKzQ1OCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTUwOSwxMSArNTE0LDEwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19nZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CkBAIC01MjEsNyArNTI1LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEyICs1NDksMTEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKK2ludCBhdGg5a19od19zZXR1cHR4cXVldWUoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKIAkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAlpbnQgcTsKIAogCXN3aXRjaCAodHlwZSkgewpAQCAtNTY4LDcgKzU3MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKIAkJZm9yIChxID0gMDsgcSA8IHBDYXAtPnRvdGFsX3F1ZXVlczsgcSsrKQotCQkJaWYgKGFocC0+YWhfdHhxW3FdLnRxaV90eXBlID09CisJCQlpZiAoYWgtPnR4cVtxXS50cWlfdHlwZSA9PQogCQkJICAgIEFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFKQogCQkJCWJyZWFrOwogCQlpZiAocSA9PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJxdWV1ZSAldVxuIiwgcSk7CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgIT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsCiAJCQkidHggcXVldWUgJXUgYWxyZWFkeSBhY3RpdmVcbiIsIHEpOwpAQCAtNjExLDE3ICs2MTQsMTYgQEAKIAlyZXR1cm4gcTsKIH0KIAotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1FVRVVFLCAiaW52YWxpZCBxdWV1ZSBudW0gJXVcbiIsIHEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlICV1XG4iLCBxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjMwLDIxICs2MzIsMjAgQEAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInJlbGVhc2UgcXVldWUgJXVcbiIsIHEpOwogCiAJcWktPnRxaV90eXBlID0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkU7Ci0JYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVyckludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVvbEludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CisJYWgtPnR4ZXJyX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhlb2xfaW50ZXJydXB0X21hc2sgJj0gfigxIDw8IHEpOworCWFoLT50eHVybl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKGFoLCBxaSk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19yZXNldHR4cXVldWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiBjd01pbiwgY2hhbkN3TWluLCB2YWx1ZTsKIApAQCAtNjUzLDcgKzY1NCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZSAldVxuIiwgcSk7CiAJCXJldHVybiB0cnVlOwpAQCAtNzQxLDkgKzc0Miw5IEBACiAJCQkgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKIAkJCSAgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMCk7CiAJCXZhbHVlID0gKHFpLT50cWlfcmVhZHlUaW1lIC0KLQkJCSAoYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSAtCi0JCQkgIGFoLT5haF9jb25maWcuZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lKSAtCi0JCQkgYWgtPmFoX2NvbmZpZy5hZGRpdGlvbmFsX3N3YmFfYmFja29mZikgKiAxMDI0OworCQkJIChhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lIC0KKwkJCSAgYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpIC0KKwkJCSBhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmKSAqIDEwMjQ7CiAJCVJFR19XUklURShhaCwgQVJfUVJEWVRJTUVDRkcocSksCiAJCQkgIHZhbHVlIHwgQVJfUV9SRFlUSU1FQ0ZHX0VOKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKQpAQCAtNzcxLDMxICs3NzIsMzEgQEAKIAl9CiAKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eG9rX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhPa0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFKQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RGVzY0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlhdGg5a19od19zZXRfdHhxX2ludGVycnVwdHMoYWgsIHFpKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1pbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitpbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjIGFkczsKQEAgLTg2MCwxMSArODYxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSAgdTMyIHNpemUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCWFkcy0+ZHNfY3RsMSA9IHNpemUgJiBBUl9CdWZMZW47CiAJaWYgKGZsYWdzICYgQVRIOUtfUlhERVNDX0lOVFJFUSkKQEAgLTg3Nyw3ICs4NzgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCkKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpCiB7CiAJdTMyIHJlZzsKIApAQCAtODg1LDcgKzg4Niw4IEBACiAJCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJICAgIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAotCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLCAwKSkgeworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLAorCQkJCSAgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJCSAgICAoQVJfRElBR19SWF9ESVMgfAogCQkJCSAgICAgQVJfRElBR19SWF9BQk9SVCkpOwpAQCAtOTA0LDE3ICs5MDYsMTcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKQordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWERQLCByeGRwKTsKIH0KIAotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCkBAIC05MjMsMjQgKzkyNSw0MSBAQAogCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdG9wcGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfRElBR19TVywgQVJfRElBR19SWF9ESVMpOwogCiAJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwogfQogCi1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CisjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCisjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCisKKwlpbnQgaTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX0NSLCBBUl9DUl9SWEUsIDApKSB7CisJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KKwlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgeworCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CisJfQorCisJaWYgKGkgPT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwKLQkJCSJkbWEgZmFpbGVkIHRvIHN0b3AgaW4gMTBtc1xuIgotCQkJIkFSX0NSPTB4JTA4eFxuQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQlSRUdfUkVBRChhaCwgQVJfQ1IpLCBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJImRtYSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCisJCQkiQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwogCX0KKworI3VuZGVmIEFIX1JYX1RJTUVfUVVBTlRVTQorI3VuZGVmIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NmJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNQUNfSAorI2RlZmluZSBNQUNfSAorCisjZGVmaW5lIFJYU1RBVFVTX1JBVEUoYWgsIGFkcykgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgPwkJXAorCQkJCU1TKGFkcy0+ZHNfcnhzdGF0dXMwLCBBUl9SeFJhdGUpIDoJXAorCQkJCShhZHMtPmRzX3J4c3RhdHVzMyA+PiAyKSAmIDB4RkYpCisKKyNkZWZpbmUgc2V0MTFuVHJpZXMoX3NlcmllcywgX2luZGV4KSBcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlRyaWVzLCBBUl9YbWl0RGF0YVRyaWVzIyNfaW5kZXgpKQorCisjZGVmaW5lIHNldDExblJhdGUoX3NlcmllcywgX2luZGV4KSBcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlJhdGUsIEFSX1htaXRSYXRlIyNfaW5kZXgpKQorCisjZGVmaW5lIHNldDExblBrdER1clJUU0NUUyhfc2VyaWVzLCBfaW5kZXgpCQkJCVwKKwkoU00oKF9zZXJpZXMpW19pbmRleF0uUGt0RHVyYXRpb24sIEFSX1BhY2tldER1ciMjX2luZGV4KSB8CVwKKwkgKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgID8JXAorCSAgQVJfUlRTQ1RTUXVhbCMjX2luZGV4IDogMCkpCisKKyNkZWZpbmUgc2V0MTFuUmF0ZUZsYWdzKF9zZXJpZXMsIF9pbmRleCkJCQkJXAorCSgoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU18yMDQwID8JCVwKKwkgIEFSXzIwNDBfIyNfaW5kZXggOiAwKQkJCQkJCVwKKwkgfCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSA/CVwKKwkgICBBUl9HSSMjX2luZGV4IDogMCkJCQkJCQlcCisJIHxTTSgoX3NlcmllcylbX2luZGV4XS5DaFNlbCwgQVJfQ2hhaW5TZWwjI19pbmRleCkpCisKKyNkZWZpbmUgQ0NLX1NJRlNfVElNRSAgICAgICAgMTAKKyNkZWZpbmUgQ0NLX1BSRUFNQkxFX0JJVFMgICAxNDQKKyNkZWZpbmUgQ0NLX1BMQ1BfQklUUyAgICAgICAgNDgKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRSAgICAgICAgMTYKKyNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FICAgIDIwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTICAgICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FICAgICAgNAorCisjZGVmaW5lIE9GRE1fU0lGU19USU1FX0hBTEYgICAgIDMyCisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9IQUxGIDQwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTX0hBTEYgICAgIDIyCisjZGVmaW5lIE9GRE1fU1lNQk9MX1RJTUVfSEFMRiAgIDgKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSICAgICAgNjQKKyNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIgIDgwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTX1FVQVJURVIgICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIgICAgMTYKKworI2RlZmluZSBJTklUX0FJRlMgICAgICAgMgorI2RlZmluZSBJTklUX0NXTUlOICAgICAgMTUKKyNkZWZpbmUgSU5JVF9DV01JTl8xMUIgIDMxCisjZGVmaW5lIElOSVRfQ1dNQVggICAgICAxMDIzCisjZGVmaW5lIElOSVRfU0hfUkVUUlkgICAxMAorI2RlZmluZSBJTklUX0xHX1JFVFJZICAgMTAKKyNkZWZpbmUgSU5JVF9TU0hfUkVUUlkgIDMyCisjZGVmaW5lIElOSVRfU0xHX1JFVFJZICAzMgorCisjZGVmaW5lIEFUSDlLX1NMT1RfVElNRV82IDYKKyNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzkgOQorI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfMjAgMjAKKworI2RlZmluZSBBVEg5S19UWEVSUl9YUkVUUlkgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1RYRVJSX0ZJTFQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfVFhFUlJfRklGTyAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKKworI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfVFhfREVTQ19DRkdfRVJSICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19UWF9EQVRBX1VOREVSUlVOICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1RYX0RFTElNX1VOREVSUlVOICAgIDB4MTAKKyNkZWZpbmUgQVRIOUtfVFhfU1dfQUJPUlRFRCAgICAgICAgMHg0MAorI2RlZmluZSBBVEg5S19UWF9TV19GSUxURVJFRCAgICAgICAweDgwCisKKyNkZWZpbmUgTUlOX1RYX0ZJRk9fVEhSRVNIT0xEICAgMHgxCisjZGVmaW5lIE1BWF9UWF9GSUZPX1RIUkVTSE9MRCAgICgoNDA5NiAvIDY0KSAtIDEpCisjZGVmaW5lIElOSVRfVFhfRklGT19USFJFU0hPTEQgIE1JTl9UWF9GSUZPX1RIUkVTSE9MRAorCitzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7CisJdTMyIHRzX3RzdGFtcDsKKwl1MTYgdHNfc2VxbnVtOworCXU4IHRzX3N0YXR1czsKKwl1OCB0c19yYXRlY29kZTsKKwl1OCB0c19yYXRlaW5kZXg7CisJaW50OF90IHRzX3Jzc2k7CisJdTggdHNfc2hvcnRyZXRyeTsKKwl1OCB0c19sb25ncmV0cnk7CisJdTggdHNfdmlydGNvbDsKKwl1OCB0c19hbnRlbm5hOworCXU4IHRzX2ZsYWdzOworCWludDhfdCB0c19yc3NpX2N0bDA7CisJaW50OF90IHRzX3Jzc2lfY3RsMTsKKwlpbnQ4X3QgdHNfcnNzaV9jdGwyOworCWludDhfdCB0c19yc3NpX2V4dDA7CisJaW50OF90IHRzX3Jzc2lfZXh0MTsKKwlpbnQ4X3QgdHNfcnNzaV9leHQyOworCXU4IHBhZFszXTsKKwl1MzIgYmFfbG93OworCXUzMiBiYV9oaWdoOworCXUzMiBldm0wOworCXUzMiBldm0xOworCXUzMiBldm0yOworfTsKKworc3RydWN0IGF0aF9yeF9zdGF0dXMgeworCXUzMiByc190c3RhbXA7CisJdTE2IHJzX2RhdGFsZW47CisJdTggcnNfc3RhdHVzOworCXU4IHJzX3BoeWVycjsKKwlpbnQ4X3QgcnNfcnNzaTsKKwl1OCByc19rZXlpeDsKKwl1OCByc19yYXRlOworCXU4IHJzX2FudGVubmE7CisJdTggcnNfbW9yZTsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwwOworCWludDhfdCByc19yc3NpX2N0bDE7CisJaW50OF90IHJzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgcnNfcnNzaV9leHQwOworCWludDhfdCByc19yc3NpX2V4dDE7CisJaW50OF90IHJzX3Jzc2lfZXh0MjsKKwl1OCByc19pc2FnZ3I7CisJdTggcnNfbW9yZWFnZ3I7CisJdTggcnNfbnVtX2RlbGltczsKKwl1OCByc19mbGFnczsKKwl1MzIgZXZtMDsKKwl1MzIgZXZtMTsKKwl1MzIgZXZtMjsKK307CisKKyNkZWZpbmUgQVRIOUtfUlhFUlJfQ1JDICAgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1JYRVJSX1BIWSAgICAgICAgICAgMHgwMgorI2RlZmluZSBBVEg5S19SWEVSUl9GSUZPICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfUlhFUlJfREVDUllQVCAgICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1JYRVJSX01JQyAgICAgICAgICAgMHgxMAorCisjZGVmaW5lIEFUSDlLX1JYX01PUkUgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19SWF9NT1JFX0FHR1IgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfUlhfR0kgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFUSDlLX1JYXzIwNDAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUFJFICAgIDB4MTAKKyNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BPU1QgICAweDIwCisjZGVmaW5lIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSAgICAgMHg0MAorCisjZGVmaW5lIEFUSDlLX1JYS0VZSVhfSU5WQUxJRAkoKHU4KS0xKQorI2RlZmluZSBBVEg5S19UWEtFWUlYX0lOVkFMSUQJKCh1MzIpLTEpCisKK3N0cnVjdCBhdGhfZGVzYyB7CisJdTMyIGRzX2xpbms7CisJdTMyIGRzX2RhdGE7CisJdTMyIGRzX2N0bDA7CisJdTMyIGRzX2N0bDE7CisJdTMyIGRzX2h3WzIwXTsKKwl1bmlvbiB7CisJCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OworCQlzdHJ1Y3QgYXRoX3J4X3N0YXR1cyByeDsKKwkJdm9pZCAqc3RhdHM7CisJfSBkc191czsKKwl2b2lkICpkc192ZGF0YTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJZHNfdHhzdGF0CWRzX3VzLnR4CisjZGVmaW5lCWRzX3J4c3RhdAlkc191cy5yeAorI2RlZmluZSBkc19zdGF0CQlkc191cy5zdGF0cworCisjZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCisjZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCisjZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAorI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKKy8qIEFUSDlLX1RYREVTQ19JTlRSRVEgZm9yY2VzIGEgdHggaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZCBmb3IKKyAqIHRoZSBkZXNjcmlwdG9yIGl0cyBtYXJrZWQgb24uICBXZSB0YWtlIGEgdHggaW50ZXJydXB0IHRvIHJlYXAKKyAqIGRlc2NyaXB0b3JzIHdoZW4gdGhlIGgvdyBoaXRzIGFuIEVPTCBjb25kaXRpb24gb3IKKyAqIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgc3BlY2lmaWNhbGx5IG1hcmtlZCB0byBnZW5lcmF0ZQorICogYW4gaW50ZXJydXB0IHdpdGggdGhpcyBmbGFnLiBEZXNjcmlwdG9ycyBzaG91bGQgYmUKKyAqIG1hcmtlZCBwZXJpb2RpY2FsbHkgdG8gaW5zdXJlIHRpbWVseSByZXBsZW5pc2hpbmcgb2YgdGhlCisgKiBzdXBwbHkgbmVlZGVkIGZvciBzZW5kaW5nIGZyYW1lcy4gRGVmZXJpbmcgaW50ZXJydXB0cworICogcmVkdWNlcyBzeXN0ZW0gbG9hZCBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIG1vcmUgY29uY3VycmVudAorICogd29yayB0byBiZSBkb25lIGJ1dCBpZiBkb25lIHRvIGFnZ3Jlc3NpdmVseSBjYW4gY2F1c2UKKyAqIHNlbmRlcnMgdG8gYmFja3VwLiBXaGVuIHRoZSBoYXJkd2FyZSBxdWV1ZSBpcyBsZWZ0IHRvbworICogbGFyZ2UgcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIG1heSBhbHNvIGJlIHRvbyBvdXQgb2YKKyAqIGRhdGUuIEFuIEFsdGVybmF0aXZlIGZvciB0aGlzIGlzIFRYIGludGVycnVwdCBtaXRpZ2F0aW9uCisgKiBidXQgdGhpcyBuZWVkcyBtb3JlIHRlc3RpbmcuICovCisjZGVmaW5lIEFUSDlLX1RYREVTQ19JTlRSRVEJCTB4MDAxMAorI2RlZmluZSBBVEg5S19UWERFU0NfVkVPTAkJMHgwMDIwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfT05MWQkJMHgwMDQwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfQU5EX0NUTAkweDAwODAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX1ZNRgkJMHgwMTAwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19GUkFHX0lTX09OIAkweDAyMDAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX0NBQgkJMHgwNDAwCisKKyNkZWZpbmUgQVRIOUtfUlhERVNDX0lOVFJFUQkJMHgwMDIwCisKK3N0cnVjdCBhcjU0MTZfZGVzYyB7CisJdTMyIGRzX2xpbms7CisJdTMyIGRzX2RhdGE7CisJdTMyIGRzX2N0bDA7CisJdTMyIGRzX2N0bDE7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIGN0bDI7CisJCQl1MzIgY3RsMzsKKwkJCXUzMiBjdGw0OworCQkJdTMyIGN0bDU7CisJCQl1MzIgY3RsNjsKKwkJCXUzMiBjdGw3OworCQkJdTMyIGN0bDg7CisJCQl1MzIgY3RsOTsKKwkJCXUzMiBjdGwxMDsKKwkJCXUzMiBjdGwxMTsKKwkJCXUzMiBzdGF0dXMwOworCQkJdTMyIHN0YXR1czE7CisJCQl1MzIgc3RhdHVzMjsKKwkJCXUzMiBzdGF0dXMzOworCQkJdTMyIHN0YXR1czQ7CisJCQl1MzIgc3RhdHVzNTsKKwkJCXUzMiBzdGF0dXM2OworCQkJdTMyIHN0YXR1czc7CisJCQl1MzIgc3RhdHVzODsKKwkJCXUzMiBzdGF0dXM5OworCQl9IHR4OworCQlzdHJ1Y3QgeworCQkJdTMyIHN0YXR1czA7CisJCQl1MzIgc3RhdHVzMTsKKwkJCXUzMiBzdGF0dXMyOworCQkJdTMyIHN0YXR1czM7CisJCQl1MzIgc3RhdHVzNDsKKwkJCXUzMiBzdGF0dXM1OworCQkJdTMyIHN0YXR1czY7CisJCQl1MzIgc3RhdHVzNzsKKwkJCXUzMiBzdGF0dXM4OworCQl9IHJ4OworCX0gdTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2REVTQyhfZHMpICAgICAgICAgKChzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKyNkZWZpbmUgQVI1NDE2REVTQ19DT05TVChfZHMpICAgKChjb25zdCBzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKworI2RlZmluZSBkc19jdGwyICAgICB1LnR4LmN0bDIKKyNkZWZpbmUgZHNfY3RsMyAgICAgdS50eC5jdGwzCisjZGVmaW5lIGRzX2N0bDQgICAgIHUudHguY3RsNAorI2RlZmluZSBkc19jdGw1ICAgICB1LnR4LmN0bDUKKyNkZWZpbmUgZHNfY3RsNiAgICAgdS50eC5jdGw2CisjZGVmaW5lIGRzX2N0bDcgICAgIHUudHguY3RsNworI2RlZmluZSBkc19jdGw4ICAgICB1LnR4LmN0bDgKKyNkZWZpbmUgZHNfY3RsOSAgICAgdS50eC5jdGw5CisjZGVmaW5lIGRzX2N0bDEwICAgIHUudHguY3RsMTAKKyNkZWZpbmUgZHNfY3RsMTEgICAgdS50eC5jdGwxMQorCisjZGVmaW5lIGRzX3R4c3RhdHVzMCAgICB1LnR4LnN0YXR1czAKKyNkZWZpbmUgZHNfdHhzdGF0dXMxICAgIHUudHguc3RhdHVzMQorI2RlZmluZSBkc190eHN0YXR1czIgICAgdS50eC5zdGF0dXMyCisjZGVmaW5lIGRzX3R4c3RhdHVzMyAgICB1LnR4LnN0YXR1czMKKyNkZWZpbmUgZHNfdHhzdGF0dXM0ICAgIHUudHguc3RhdHVzNAorI2RlZmluZSBkc190eHN0YXR1czUgICAgdS50eC5zdGF0dXM1CisjZGVmaW5lIGRzX3R4c3RhdHVzNiAgICB1LnR4LnN0YXR1czYKKyNkZWZpbmUgZHNfdHhzdGF0dXM3ICAgIHUudHguc3RhdHVzNworI2RlZmluZSBkc190eHN0YXR1czggICAgdS50eC5zdGF0dXM4CisjZGVmaW5lIGRzX3R4c3RhdHVzOSAgICB1LnR4LnN0YXR1czkKKworI2RlZmluZSBkc19yeHN0YXR1czAgICAgdS5yeC5zdGF0dXMwCisjZGVmaW5lIGRzX3J4c3RhdHVzMSAgICB1LnJ4LnN0YXR1czEKKyNkZWZpbmUgZHNfcnhzdGF0dXMyICAgIHUucnguc3RhdHVzMgorI2RlZmluZSBkc19yeHN0YXR1czMgICAgdS5yeC5zdGF0dXMzCisjZGVmaW5lIGRzX3J4c3RhdHVzNCAgICB1LnJ4LnN0YXR1czQKKyNkZWZpbmUgZHNfcnhzdGF0dXM1ICAgIHUucnguc3RhdHVzNQorI2RlZmluZSBkc19yeHN0YXR1czYgICAgdS5yeC5zdGF0dXM2CisjZGVmaW5lIGRzX3J4c3RhdHVzNyAgICB1LnJ4LnN0YXR1czcKKyNkZWZpbmUgZHNfcnhzdGF0dXM4ICAgIHUucnguc3RhdHVzOAorCisjZGVmaW5lIEFSX0ZyYW1lTGVuICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9WaXJ0TW9yZUZyYWcgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkMDAgICAgICAweDAwMDBlMDAwCisjZGVmaW5lIEFSX1htaXRQb3dlciAgICAgICAgMHgwMDNmMDAwMAorI2RlZmluZSBBUl9YbWl0UG93ZXJfUyAgICAgIDE2CisjZGVmaW5lIEFSX1JUU0VuYWJsZSAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBBUl9WRU9MICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQVJfQ2xyRGVzdE1hc2sgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDAxICAgICAgMHgxZTAwMDAwMAorI2RlZmluZSBBUl9UeEludHJSZXEgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfRGVzdElkeFZhbGlkICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEFSX0NUU0VuYWJsZSAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9UeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfRGVzdElkeCAgICAgICAgICAweDAwMGZlMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHhfUyAgICAgICAgMTMKKyNkZWZpbmUgQVJfRnJhbWVUeXBlICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEFSX0ZyYW1lVHlwZV9TICAgICAgMjAKKyNkZWZpbmUgQVJfTm9BY2sgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFSX0luc2VydFRTICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBUl9Db3JydXB0RkNTICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQVJfRXh0T25seSAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEFSX0V4dEFuZEN0bCAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBBUl9Nb3JlQWdnciAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfSXNBZ2dyICAgICAgICAgICAweDQwMDAwMDAwCisKKyNkZWZpbmUgQVJfQnVyc3REdXIgICAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX0J1cnN0RHVyX1MgICAgICAgMAorI2RlZmluZSBBUl9EdXJVcGRhdGVFbmEgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczAgICAweDAwMGYwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwX1MgMTYKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczEgICAweDAwZjAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxX1MgMjAKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczIgICAweDBmMDAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyX1MgMjQKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczMgICAweGYwMDAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzX1MgMjgKKworI2RlZmluZSBBUl9YbWl0UmF0ZTAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfWG1pdFJhdGUwX1MgICAgICAwCisjZGVmaW5lIEFSX1htaXRSYXRlMSAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTFfUyAgICAgIDgKKyNkZWZpbmUgQVJfWG1pdFJhdGUyICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1htaXRSYXRlMl9TICAgICAgMTYKKyNkZWZpbmUgQVJfWG1pdFJhdGUzICAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1htaXRSYXRlM19TICAgICAgMjQKKworI2RlZmluZSBBUl9QYWNrZXREdXIwICAgICAgIDB4MDAwMDdmZmYKKyNkZWZpbmUgQVJfUGFja2V0RHVyMF9TICAgICAwCisjZGVmaW5lIEFSX1JUU0NUU1F1YWwwICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9QYWNrZXREdXIxICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMV9TICAgICAxNgorI2RlZmluZSBBUl9SVFNDVFNRdWFsMSAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9QYWNrZXREdXIyICAgICAgIDB4MDAwMDdmZmYKKyNkZWZpbmUgQVJfUGFja2V0RHVyMl9TICAgICAwCisjZGVmaW5lIEFSX1JUU0NUU1F1YWwyICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9QYWNrZXREdXIzICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyM19TICAgICAxNgorI2RlZmluZSBBUl9SVFNDVFNRdWFsMyAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9BZ2dyTGVuICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVJfQWdnckxlbl9TICAgICAgICAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDYwICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBBUl9QYWREZWxpbSAgICAgICAgIDB4MDNmYzAwMDAKKyNkZWZpbmUgQVJfUGFkRGVsaW1fUyAgICAgICAxOAorI2RlZmluZSBBUl9FbmNyVHlwZSAgICAgICAgIDB4MGMwMDAwMDAKKyNkZWZpbmUgQVJfRW5jclR5cGVfUyAgICAgICAyNgorI2RlZmluZSBBUl9UeEN0bFJzdmQ2MSAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBBUl8yMDQwXzAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfR0kwICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX0NoYWluU2VsMCAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBBUl9DaGFpblNlbDBfUyAgICAgIDIKKyNkZWZpbmUgQVJfMjA0MF8xICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFSX0dJMSAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBUl9DaGFpblNlbDEgICAgICAgIDB4MDAwMDAzODAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwxX1MgICAgICA3CisjZGVmaW5lIEFSXzIwNDBfMiAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBUl9HSTIgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwyICAgICAgICAweDAwMDA3MDAwCisjZGVmaW5lIEFSX0NoYWluU2VsMl9TICAgICAgMTIKKyNkZWZpbmUgQVJfMjA0MF8zICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFSX0dJMyAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9DaGFpblNlbDMgICAgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwzX1MgICAgICAxNworI2RlZmluZSBBUl9SVFNDVFNSYXRlICAgICAgIDB4MGZmMDAwMDAKKyNkZWZpbmUgQVJfUlRTQ1RTUmF0ZV9TICAgICAyMAorI2RlZmluZSBBUl9UeEN0bFJzdmQ3MCAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBBUl9UeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDBfUyAgICAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMV9TICAgIDgKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDAyX1MgICAgMTYKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDAgICAweDNmMDAwMDAwCisjZGVmaW5lIEFSX1R4QmFTdGF0dXMgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMSAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9Gcm1YbWl0T0sgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX0V4Y2Vzc2l2ZVJldHJpZXMgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfRklGT1VuZGVycnVuICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9GaWx0ZXJlZCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFSX1JUU0ZhaWxDbnQgICAgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgQVJfUlRTRmFpbENudF9TICAgICAgICAgNAorI2RlZmluZSBBUl9EYXRhRmFpbENudCAgICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEFSX0RhdGFGYWlsQ250X1MgICAgICAgIDgKKyNkZWZpbmUgQVJfVmlydFJldHJ5Q250ICAgICAgICAgMHgwMDAwZjAwMAorI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnRfUyAgICAgICAxMgorI2RlZmluZSBBUl9UeERlbGltVW5kZXJydW4gICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFSX1R4RGF0YVVuZGVycnVuICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfRGVzY0NmZ0VyciAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9UeFRpbWVyRXhwaXJlZCAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDEwICAgICAgIDB4ZmZmMDAwMDAKKworI2RlZmluZSBBUl9TZW5kVGltZXN0YW1wICAgIGRzX3R4c3RhdHVzMgorI2RlZmluZSBBUl9CYUJpdG1hcExvdyAgICAgIGRzX3R4c3RhdHVzMworI2RlZmluZSBBUl9CYUJpdG1hcEhpZ2ggICAgIGRzX3R4c3RhdHVzNAorCisjZGVmaW5lIEFSX1R4UlNTSUFudDEwICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9UeFJTU0lBbnQxMF9TICAgIDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTEgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDExX1MgICAgOAorI2RlZmluZSBBUl9UeFJTU0lBbnQxMiAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTJfUyAgICAxNgorI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZCAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWRfUyAyNAorCisjZGVmaW5lIEFSX1R4RVZNMCAgICAgICAgICAgZHNfdHhzdGF0dXM1CisjZGVmaW5lIEFSX1R4RVZNMSAgICAgICAgICAgZHNfdHhzdGF0dXM2CisjZGVmaW5lIEFSX1R4RVZNMiAgICAgICAgICAgZHNfdHhzdGF0dXM3CisKKyNkZWZpbmUgQVJfVHhEb25lICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1NlcU51bSAgICAgICAgICAgMHgwMDAwMWZmZQorI2RlZmluZSBBUl9TZXFOdW1fUyAgICAgICAgIDEKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODAgICAweDAwMDFlMDAwCisjZGVmaW5lIEFSX1R4T3BFeGNlZWRlZCAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MSAgIDB4MDAxYzAwMDAKKyNkZWZpbmUgQVJfRmluYWxUeElkeCAgICAgICAweDAwNjAwMDAwCisjZGVmaW5lIEFSX0ZpbmFsVHhJZHhfUyAgICAgMjEKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODIgICAweDAxODAwMDAwCisjZGVmaW5lIEFSX1Bvd2VyTWdtdCAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MyAgIDB4ZmMwMDAwMDAKKworI2RlZmluZSBBUl9SeENUTFJzdmQwMCAgMHhmZmZmZmZmZgorCisjZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAweDAwMDAwZmZmCisjZGVmaW5lIEFSX1J4Q3RsUnN2ZDAwICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX1J4SW50clJlcSAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFSX1J4Q3RsUnN2ZDAxICAweGZmZmZjMDAwCisKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1J4UlNTSUFudDAwX1MgICAgMAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDFfUyAgICA4CisjZGVmaW5lIEFSX1J4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMl9TICAgIDE2CisjZGVmaW5lIEFSX1J4UmF0ZSAgICAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBBUl9SeFJhdGVfUyAgICAgICAgIDI0CisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDAwICAgMHhmZjAwMDAwMAorCisjZGVmaW5lIEFSX0RhdGFMZW4gICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9SeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfTnVtRGVsaW0gICAgICAgICAweDAwM2ZjMDAwCisjZGVmaW5lIEFSX051bURlbGltX1MgICAgICAgMTQKKyNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMTAgICAweGZmODAwMDAwCisKKyNkZWZpbmUgQVJfUmN2VGltZXN0YW1wICAgICBkc19yeHN0YXR1czIKKworI2RlZmluZSBBUl9HSSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfMjA0MCAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BhcmFsbGVsNDAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9QYXJhbGxlbDQwX1MgICAgIDIKKyNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMzAgICAweDAwMDAwMGY4CisjZGVmaW5lIEFSX1J4QW50ZW5uYQkgICAgMHhmZmZmZmYwMAorI2RlZmluZSBBUl9SeEFudGVubmFfUwkgICAgOAorCisjZGVmaW5lIEFSX1J4UlNTSUFudDEwICAgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9SeFJTU0lBbnQxMF9TICAgICAgICAgIDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTEgICAgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDExX1MgICAgICAgICAgOAorI2RlZmluZSBBUl9SeFJTU0lBbnQxMiAgICAgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTJfUyAgICAgICAgICAxNgorI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZCAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWRfUyAgICAgICAyNAorCisjZGVmaW5lIEFSX1J4RVZNMCAgICAgICAgICAgZHNfcnhzdGF0dXM0CisjZGVmaW5lIEFSX1J4RVZNMSAgICAgICAgICAgZHNfcnhzdGF0dXM1CisjZGVmaW5lIEFSX1J4RVZNMiAgICAgICAgICAgZHNfcnhzdGF0dXM2CisKKyNkZWZpbmUgQVJfUnhEb25lICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1J4RnJhbWVPSyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9DUkNFcnIgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfRGVjcnlwdENSQ0VyciAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFSX1BIWUVyciAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBUl9NaWNoYWVsRXJyICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVJfUHJlRGVsaW1DUkNFcnIgICAweDAwMDAwMDQwCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcwICAgMHgwMDAwMDA4MAorI2RlZmluZSBBUl9SeEtleUlkeFZhbGlkICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVJfS2V5SWR4ICAgICAgICAgICAweDAwMDBmZTAwCisjZGVmaW5lIEFSX0tleUlkeF9TICAgICAgICAgOQorI2RlZmluZSBBUl9QSFlFcnJDb2RlICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUEhZRXJyQ29kZV9TICAgICA4CisjZGVmaW5lIEFSX1J4TW9yZUFnZ3IgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9SeEFnZ3IgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfUG9zdERlbGltQ1JDRXJyICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcxICAgMHgzZmY4MDAwMAorI2RlZmluZSBBUl9EZWNyeXB0QnVzeUVyciAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVJfS2V5TWlzcyAgICAgICAgICAweDgwMDAwMDAwCisKK2VudW0gYXRoOWtfdHhfcXVldWUgeworCUFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFID0gMCwKKwlBVEg5S19UWF9RVUVVRV9EQVRBLAorCUFUSDlLX1RYX1FVRVVFX0JFQUNPTiwKKwlBVEg5S19UWF9RVUVVRV9DQUIsCisJQVRIOUtfVFhfUVVFVUVfVUFQU0QsCisJQVRIOUtfVFhfUVVFVUVfUFNQT0xMCit9OworCisjZGVmaW5lCUFUSDlLX05VTV9UWF9RVUVVRVMgMTAKKworZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHsKKwlBVEg5S19XTUVfQUNfQksgPSAwLAorCUFUSDlLX1dNRV9BQ19CRSwKKwlBVEg5S19XTUVfQUNfVkksCisJQVRIOUtfV01FX0FDX1ZPLAorCUFUSDlLX1dNRV9VUFNECit9OworCitlbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHsKKwlUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSA9IDB4MDAwMSwKKwlUWFFfRkxBR19UWEVSUklOVF9FTkFCTEUgPSAweDAwMDEsCisJVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSA9IDB4MDAwMiwKKwlUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUgPSAweDAwMDQsCisJVFhRX0ZMQUdfVFhVUk5JTlRfRU5BQkxFID0gMHgwMDA4LAorCVRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSA9IDB4MDAxMCwKKwlUWFFfRkxBR19DT01QUkVTU0lPTl9FTkFCTEUgPSAweDAwMjAsCisJVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSA9IDB4MDA0MCwKKwlUWFFfRkxBR19GUkFHX0JVUlNUX0JBQ0tPRkZfRU5BQkxFID0gMHgwMDgwLAorfTsKKworI2RlZmluZSBBVEg5S19UWFFfVVNFREVGQVVMVCAoKHUzMikgLTEpCisjZGVmaW5lIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFUSDlLX0RFQ09NUF9NQVNLX1NJWkUgICAgIDEyOAorI2RlZmluZSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EICA1MAorI2RlZmluZSBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EICA5NgorCitlbnVtIGF0aDlrX3BrdF90eXBlIHsKKwlBVEg5S19QS1RfVFlQRV9OT1JNQUwgPSAwLAorCUFUSDlLX1BLVF9UWVBFX0FUSU0sCisJQVRIOUtfUEtUX1RZUEVfUFNQT0xMLAorCUFUSDlLX1BLVF9UWVBFX0JFQUNPTiwKKwlBVEg5S19QS1RfVFlQRV9QUk9CRV9SRVNQLAorCUFUSDlLX1BLVF9UWVBFX0NISVJQLAorCUFUSDlLX1BLVF9UWVBFX0dSUF9QT0xMLAorfTsKKworc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8geworCXUzMiB0cWlfdmVyOworCWVudW0gYXRoOWtfdHhfcXVldWUgdHFpX3R5cGU7CisJZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHRxaV9zdWJ0eXBlOworCWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgdHFpX3FmbGFnczsKKwl1MzIgdHFpX3ByaW9yaXR5OworCXUzMiB0cWlfYWlmczsKKwl1MzIgdHFpX2N3bWluOworCXUzMiB0cWlfY3dtYXg7CisJdTE2IHRxaV9zaHJldHJ5OworCXUxNiB0cWlfbGdyZXRyeTsKKwl1MzIgdHFpX2NiclBlcmlvZDsKKwl1MzIgdHFpX2Nick92ZXJmbG93TGltaXQ7CisJdTMyIHRxaV9idXJzdFRpbWU7CisJdTMyIHRxaV9yZWFkeVRpbWU7CisJdTMyIHRxaV9waHlzQ29tcEJ1ZjsKKwl1MzIgdHFpX2ludEZsYWdzOworfTsKKworZW51bSBhdGg5a19yeF9maWx0ZXIgeworCUFUSDlLX1JYX0ZJTFRFUl9VQ0FTVCA9IDB4MDAwMDAwMDEsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUID0gMHgwMDAwMDAwMiwKKwlBVEg5S19SWF9GSUxURVJfQkNBU1QgPSAweDAwMDAwMDA0LAorCUFUSDlLX1JYX0ZJTFRFUl9DT05UUk9MID0gMHgwMDAwMDAwOCwKKwlBVEg5S19SWF9GSUxURVJfQkVBQ09OID0gMHgwMDAwMDAxMCwKKwlBVEg5S19SWF9GSUxURVJfUFJPTSA9IDB4MDAwMDAwMjAsCisJQVRIOUtfUlhfRklMVEVSX1BST0JFUkVRID0gMHgwMDAwMDA4MCwKKwlBVEg5S19SWF9GSUxURVJfUEhZRVJSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19SWF9GSUxURVJfTVlCRUFDT04gPSAweDAwMDAwMjAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwgPSAweDAwMDA0MDAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUiA9IDB4MDAwMDIwMDAsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTCA9IDB4MDAwMDgwMDAsCit9OworCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgMHgwMDAxCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCAgICAgMHgwMDAyCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJICAgMHgwMDA0CisKK3N0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgeworCXUzMiBUcmllczsKKwl1MzIgUmF0ZTsKKwl1MzIgUGt0RHVyYXRpb247CisJdTMyIENoU2VsOworCXUzMiBSYXRlRmxhZ3M7Cit9OworCitzdHJ1Y3QgYXRoOWtfa2V5dmFsIHsKKwl1OCBrdl90eXBlOworCXU4IGt2X3BhZDsKKwl1MTYga3ZfbGVuOworCXU4IGt2X3ZhbFsxNl07IC8qIFRLICovCisJdTgga3ZfbWljWzhdOyAvKiBNaWNoYWVsIE1JQyBrZXkgKi8KKwl1OCBrdl90eG1pY1s4XTsgLyogTWljaGFlbCBNSUMgVFgga2V5ICh1c2VkIG9ubHkgaWYgdGhlIGhhcmR3YXJlCisJCQkgKiBzdXBwb3J0cyBib3RoIE1JQyBrZXlzIGluIHRoZSBzYW1lIGtleSBjYWNoZSBlbnRyeTsKKwkJCSAqIGluIHRoYXQgY2FzZSwga3ZfbWljIGlzIHRoZSBSWCBrZXkpICovCit9OworCitlbnVtIGF0aDlrX2tleV90eXBlIHsKKwlBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwlBVEg5S19LRVlfVFlQRV9XRVAsCisJQVRIOUtfS0VZX1RZUEVfQUVTLAorCUFUSDlLX0tFWV9UWVBFX1RLSVAsCit9OworCitlbnVtIGF0aDlrX2NpcGhlciB7CisJQVRIOUtfQ0lQSEVSX1dFUCA9IDAsCisJQVRIOUtfQ0lQSEVSX0FFU19PQ0IgPSAxLAorCUFUSDlLX0NJUEhFUl9BRVNfQ0NNID0gMiwKKwlBVEg5S19DSVBIRVJfQ0tJUCA9IDMsCisJQVRIOUtfQ0lQSEVSX1RLSVAgPSA0LAorCUFUSDlLX0NJUEhFUl9DTFIgPSA1LAorCUFUSDlLX0NJUEhFUl9NSUMgPSAxMjcKK307CisKK2VudW0gYXRoOWtfaHRfbWFjbW9kZSB7CisJQVRIOUtfSFRfTUFDTU9ERV8yMCA9IDAsCisJQVRIOUtfSFRfTUFDTU9ERV8yMDQwID0gMSwKK307CisKK2VudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgeworCUFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwID0gMCwKKwlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSA9IDEsCit9OworCitzdHJ1Y3QgYXRoX2h3Oworc3RydWN0IGF0aDlrX2NoYW5uZWw7CitzdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CisKK3UzMiBhdGg5a19od19nZXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKK2Jvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOwordTMyIGF0aDlrX2h3X251bXR4cGVuZGluZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBiSW5jVHJpZ0xldmVsKTsKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Citib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKKwkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKTsKK3ZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOworaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCisJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKKwkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCisJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCisJCQkJICBzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1tdLAorCQkJCSAgdTMyIG5zZXJpZXMsIHUzMiBmbGFncyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCXUzMiBhZ2dyTGVuKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSB1MzIgbnVtRGVsaW1zKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Cit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pOwordm9pZCBhdGg5a19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgICAgdTMyIHZtZik7Cit2b2lkIGF0aDlrX2h3X2dldHR4aW50cnR4cXMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqdHhxcyk7Citib29sIGF0aDlrX2h3X3NldF90eHFfcHJvcHMoc3RydWN0IGF0aF9odyAqYWgsIGludCBxLAorCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Citib29sIGF0aDlrX2h3X2dldF90eHFfcHJvcHMoc3RydWN0IGF0aF9odyAqYWgsIGludCBxLAorCQkJICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7CitpbnQgYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX3R4X3F1ZXVlIHR5cGUsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Citib29sIGF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Citib29sIGF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworaW50IGF0aDlrX2h3X3J4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQl1MzIgcGEsIHN0cnVjdCBhdGhfZGVzYyAqbmRzLCB1NjQgdHNmKTsKK2Jvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOworYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCk7Cit2b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnhkcCk7Cit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7CisKKyNlbmRpZiAvKiBNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCmluZGV4IDBlODA5OTAuLjEzZDRlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNSw5ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEFUSF9QQ0lfVkVSU0lPTiAiMC4xIgogCkBAIC0yOCw4NCArMjYsMTI5IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLwotCXsgMCB9CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uIik7CisKKy8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLworCisjZGVmaW5lIENIQU4yRyhfZnJlcSwgX2lkeCkgIHsgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworI2RlZmluZSBDSEFONUcoX2ZyZXEsIF9pZHgpIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworLyogU29tZSAyIEdIeiByYWRpb3MgYXJlIGFjdHVhbGx5IHR1bmFibGUgb24gMjMxMi0yNzMyCisgKiBvbiA1IE1IeiBzdGVwcywgd2Ugc3VwcG9ydCB0aGUgY2hhbm5lbHMgd2hpY2ggd2Uga25vdworICogd2UgaGF2ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBhbGwgY2FyZHMgdGhvdWdoIHRvIG1ha2UKKyAqIHRoaXMgc3RhdGljICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGF0aDlrXzJnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjJHKDI0MTIsIDApLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNywgMSksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyLCAyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcsIDMpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiwgNCksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3LCA1KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIsIDYpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NywgNyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyLCA4KSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcsIDkpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIsIDEwKSwgLyogQ2hhbm5lbCAxMSAqLworCUNIQU4yRygyNDY3LCAxMSksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiwgMTIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQsIDEzKSwgLyogQ2hhbm5lbCAxNCAqLwogfTsKIAotc3RhdGljIHZvaWQgYXRoX2RldGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisvKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKKyAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93CisgKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQorICogdGhpcyBzdGF0aWMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KKwlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCisJQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCisJQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KKwlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLworCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KKwlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCisJQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCisJQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCisJQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCisJQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLworCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLworfTsKIAotLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLwotCi1zdGF0aWMgdm9pZCBidXNfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQorc3RhdGljIHZvaWQgYXRoX2NhY2hlX2NvbmZfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7Ci0JdTggdTh0bXA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShzYy0+cGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgKHU4ICopJnU4dG1wKTsKLQkqY3N6ID0gKGludCl1OHRtcDsKLQotCS8qCi0JICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgotCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgotCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKLQkgKi8KLQotCWlmICgqY3N6ID09IDApCi0JCSpjc3ogPSBERUZBVUxUX0NBQ0hFTElORSA+PiAyOyAgIC8qIFVzZSB0aGUgZGVmYXVsdCBzaXplICovCi19Ci0KLXN0YXRpYyB2b2lkIGF0aF9zZXRjdXJtb2RlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIHdpcmVsZXNzX21vZGUgbW9kZSkKLXsKLQlzYy0+Y3VyX3JhdGVfdGFibGUgPSBzYy0+aHdfcmF0ZV90YWJsZVttb2RlXTsKLQkvKgotCSAqIEFsbCBwcm90ZWN0aW9uIGZyYW1lcyBhcmUgdHJhbnNtaXRlZCBhdCAyTWIvcyBmb3IKLQkgKiAxMWcsIG90aGVyd2lzZSBhdCAxTWIvcy4KLQkgKiBYWFggc2VsZWN0IHByb3RlY3Rpb24gcmF0ZSBpbmRleCBmcm9tIHJhdGUgdGFibGUuCi0JICovCi0Jc2MtPnNjX3Byb3RyaXggPSAobW9kZSA9PSBBVEg5S19NT0RFXzExRyA/IDEgOiAwKTsKLX0KLQotc3RhdGljIGVudW0gd2lyZWxlc3NfbW9kZSBhdGhfY2hhbjJtb2RlKHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0EpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQTsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0cpCi0JCXJldHVybiBBVEg5S19NT0RFXzExRzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0IpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQjsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQyMCkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOQV9IVDIwOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUMjA7Ci0JZWxzZSBpZiAoY2hhbi0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBQTFVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpCi0JCXJldHVybiBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOR19IVDQwUExVUzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzsKLQotCVdBUk5fT04oMSk7IC8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLQotCXJldHVybiBBVEg5S19NT0RFXzExQjsKKwlzd2l0Y2ggKGNvbmYtPmNoYW5uZWwtPmJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCWlmIChjb25mX2lzX2h0MjAoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkdfSFQyMF07CisJCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwUExVU107CisJCWVsc2UKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFHXTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQlpZiAoY29uZl9pc19odDIwKGNvbmYpKQorCQkJc2MtPmN1cl9yYXRlX3RhYmxlID0KKwkJCSAgc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMU5BX0hUMjBdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTXTsKKwkJZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVNdOworCQllbHNlCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhdGhfdXBkYXRlX3R4cG93KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgdHhwb3c7CiAKLQlpZiAoc2MtPnNjX2N1cnR4cG93ICE9IHNjLT5zY19jb25maWcudHhwb3dsaW1pdCkgewotCQlhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KGFoLCBzYy0+c2NfY29uZmlnLnR4cG93bGltaXQpOworCWlmIChzYy0+Y3VydHhwb3cgIT0gc2MtPmNvbmZpZy50eHBvd2xpbWl0KSB7CisJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIHNjLT5jb25maWcudHhwb3dsaW1pdCk7CiAJCS8qIHJlYWQgYmFjayBpbiBjYXNlIHZhbHVlIGlzIGNsYW1wZWQgKi8KIAkJYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RYUE9XLCAxLCAmdHhwb3cpOwotCQlzYy0+c2NfY3VydHhwb3cgPSB0eHBvdzsKKwkJc2MtPmN1cnR4cG93ID0gdHhwb3c7CiAJfQogfQogCkBAIC0xNzYsMTUwICsyMTksODcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4cmF0ZXM7IGkrKykgewogCQlyYXRlW2ldLmJpdHJhdGUgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVrYnBzIC8gMTAwOwogCQlyYXRlW2ldLmh3X3ZhbHVlID0gcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRlY29kZTsKKwkJaWYgKHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGUpIHsKKwkJCXJhdGVbaV0uaHdfdmFsdWVfc2hvcnQgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlIHwKKwkJCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNob3J0X3ByZWFtYmxlOworCQkJcmF0ZVtpXS5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFOworCQl9CiAJCXNiYW5kLT5uX2JpdHJhdGVzKys7CisKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJSYXRlOiAlMmRNYnBzLCByYXRlY29kZTogJTJkXG4iLAogCQkJcmF0ZVtpXS5iaXRyYXRlIC8gMTAsIHJhdGVbaV0uaHdfdmFsdWUpOwogCX0KIH0KIAotc3RhdGljIGludCBhdGhfc2V0dXBfY2hhbm5lbHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBuY2hhbiwgaSwgYSA9IDAsIGIgPSAwOwotCXU4IHJlZ2NsYXNzaWRzW0FUSF9SRUdDTEFTU0lEU19NQVhdOwotCXUzMiBucmVnY2xhc3MgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRfMmdoejsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kXzVnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzJnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzVnaHo7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7Ci0KLQkvKiBGaWxsIGluIGFoLT5haF9jaGFubmVscyAqLwotCWlmICghYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKGFoLCBBVEhfQ0hBTl9NQVgsICh1MzIgKikmbmNoYW4sCi0JCQkJICAgICAgcmVnY2xhc3NpZHMsIEFUSF9SRUdDTEFTU0lEU19NQVgsCi0JCQkJICAgICAgJm5yZWdjbGFzcywgQ1RSWV9ERUZBVUxULCBmYWxzZSwgMSkpIHsKLQkJdTMyIHJkID0gYWgtPmFoX2N1cnJlbnRSRDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gY29sbGVjdCBjaGFubmVsIGxpc3Q7ICIKLQkJCSJyZWdkb21haW4gbGlrZWx5ICV1IGNvdW50cnkgY29kZSAldVxuIiwKLQkJCXJkLCBDVFJZX0RFRkFVTFQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliYW5kXzJnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQliYW5kXzVnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQljaGFuXzJnaHogPSBzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JY2hhbl81Z2h6ID0gc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0JZm9yIChpID0gMDsgaSA8IG5jaGFuOyBpKyspIHsKLQkJYyA9ICZhaC0+YWhfY2hhbm5lbHNbaV07Ci0JCWlmIChJU19DSEFOXzJHSFooYykpIHsKLQkJCWNoYW5fMmdoelthXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJCWNoYW5fMmdoelthXS5jZW50ZXJfZnJlcSA9IGMtPmNoYW5uZWw7Ci0JCQljaGFuXzJnaHpbYV0ubWF4X3Bvd2VyID0gYy0+bWF4VHhQb3dlcjsKLQotCQkJaWYgKGMtPnByaXZGbGFncyAmIENIQU5ORUxfRElTQUxMT1dfQURIT0MpCi0JCQkJY2hhbl8yZ2h6W2FdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lCU1M7Ci0JCQlpZiAoYy0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKQotCQkJCWNoYW5fMmdoelthXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47Ci0KLQkJCWJhbmRfMmdoei0+bl9jaGFubmVscyA9ICsrYTsKLQotCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICIyTUh6IGNoYW5uZWw6ICVkLCAiCi0JCQkJImNoYW5uZWxGbGFnczogMHgleFxuIiwKLQkJCQljLT5jaGFubmVsLCBjLT5jaGFubmVsRmxhZ3MpOwotCQl9IGVsc2UgaWYgKElTX0NIQU5fNUdIWihjKSkgewotCQkJY2hhbl81Z2h6W2JdLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwotCQkJY2hhbl81Z2h6W2JdLmNlbnRlcl9mcmVxID0gYy0+Y2hhbm5lbDsKLQkJCWNoYW5fNWdoeltiXS5tYXhfcG93ZXIgPSBjLT5tYXhUeFBvd2VyOwotCi0JCQlpZiAoYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ESVNBTExPV19BREhPQykKLQkJCQljaGFuXzVnaHpbYl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQkJCWlmIChjLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpCi0JCQkJY2hhbl81Z2h6W2JdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQotCQkJYmFuZF81Z2h6LT5uX2NoYW5uZWxzID0gKytiOwotCi0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIjVNSHogY2hhbm5lbDogJWQsICIKLQkJCQkiY2hhbm5lbEZsYWdzOiAweCV4XG4iLAotCQkJCWMtPmNoYW5uZWwsIGMtPmNoYW5uZWxGbGFncyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuICBJZiB0aGUgY2hhbm5lbCBpcyByZWFsbHkgYmVpbmcgY2hhbmdlZCwgaXQncyBkb25lCiAgKiBieSByZXNldGluZyB0aGUgY2hpcC4gIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0IGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcKICAqIERNQSwgdGhlbiByZXN0YXJ0IHN0dWZmLgogKi8KLXN0YXRpYyBpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pCitpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpoY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBmYXN0Y2MgPSB0cnVlLCBzdG9wcGVkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWw7CisJaW50IHI7CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoaGNoYW4tPmNoYW5uZWwgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsIHx8Ci0JICAgIGhjaGFuLT5jaGFubmVsRmxhZ3MgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MgfHwKLQkgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0NIQUlOTUFTS19VUERBVEUpIHx8Ci0JICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkgewotCQlpbnQgc3RhdHVzOwotCQkvKgotCQkgKiBUaGlzIGlzIG9ubHkgcGVyZm9ybWVkIGlmIHRoZSBjaGFubmVsIHNldHRpbmdzIGhhdmUKLQkJICogYWN0dWFsbHkgY2hhbmdlZC4KLQkJICoKLQkJICogVG8gc3dpdGNoIGNoYW5uZWxzIGNsZWFyIGFueSBwZW5kaW5nIERNQSBvcGVyYXRpb25zOwotCQkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCi0JCSAqIGhhcmR3YXJlIGF0IHRoZSBuZXcgZnJlcXVlbmN5LCBhbmQgdGhlbiByZS1lbmFibGUKLQkJICogdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhlIGgvdy4KLQkJICovCi0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQkJYXRoX2RyYWludHhxKHNjLCBmYWxzZSk7Ci0JCXN0b3BwZWQgPSBhdGhfc3RvcHJlY3Yoc2MpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKLQkJLyogWFhYOiBkbyBub3QgZmx1c2ggcmVjZWl2ZSBxdWV1ZSBoZXJlLiBXZSBkb24ndCB3YW50Ci0JCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgotCQkgKiBjaGFuZ2luZyBjaGFubmVsLiAqLworCS8qCisJICogVGhpcyBpcyBvbmx5IHBlcmZvcm1lZCBpZiB0aGUgY2hhbm5lbCBzZXR0aW5ncyBoYXZlCisJICogYWN0dWFsbHkgY2hhbmdlZC4KKwkgKgorCSAqIFRvIHN3aXRjaCBjaGFubmVscyBjbGVhciBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uczsKKwkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCisJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQorCSAqIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBoL3cuCisJICovCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCWF0aF9kcmFpbl9hbGxfdHhxKHNjLCBmYWxzZSk7CisJc3RvcHBlZCA9IGF0aF9zdG9wcmVjdihzYyk7CiAKLQkJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKLQkJCWZhc3RjYyA9IGZhbHNlOworCS8qIFhYWDogZG8gbm90IGZsdXNoIHJlY2VpdmUgcXVldWUgaGVyZS4gV2UgZG9uJ3Qgd2FudAorCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgorCSAqIGNoYW5naW5nIGNoYW5uZWwuICovCiAKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkiKCV1IE1IeikgLT4gKCV1IE1IeiksIGNmbGFnczoleCwgY2hhbndpZHRoOiAlZFxuIiwKLQkJCXNjLT5zY19haC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWhjaGFuLT5jaGFubmVsLCBoY2hhbi0+Y2hhbm5lbEZsYWdzLCBzYy0+dHhfY2hhbl93aWR0aCk7CisJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKKwkJZmFzdGNjID0gZmFsc2U7CiAKLQkJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJaWYgKCFhdGg5a19od19yZXNldChhaCwgaGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIGZhc3RjYywgJnN0YXR1cykpIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIgotCQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsIGhjaGFuLT5jaGFubmVsLAotCQkJCQkJICBoY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCQloY2hhbi0+Y2hhbm5lbCwgaGNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCSIoJXUgTUh6KSAtPiAoJXUgTUh6KSwgY2hhbndpZHRoOiAlZFxuIiwKKwkJc2MtPnNjX2FoLT5jdXJjaGFuLT5jaGFubmVsLAorCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgc2MtPnR4X2NoYW5fd2lkdGgpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKworCXIgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGZhc3RjYyk7CisJaWYgKHIpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0ZVTExfUkVTRVQ7Ci0KLQkJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlhdGhfc2V0Y3VybW9kZShzYywgYXRoX2NoYW4ybW9kZShoY2hhbikpOwotCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7CisJCXJldHVybiByOwogCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0NIQUlOTUFTS19VUERBVEU7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9GVUxMX1JFU0VUOworCisJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzdGFydCByZWN2IGxvZ2ljXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKKwlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyLDEyMyArMzEyLDEyMiBAQAogICovCiBzdGF0aWMgdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgbG9uZ2NhbCA9IGZhbHNlOwogCWJvb2wgc2hvcnRjYWwgPSBmYWxzZTsKIAlib29sIGFuaWZsYWcgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdGltZXN0YW1wID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQl1MzIgY2FsX2ludGVydmFsOworCXUzMiBjYWxfaW50ZXJ2YWwsIHNob3J0X2NhbF9pbnRlcnZhbDsKIAotCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCWFoID0gc2MtPnNjX2FoOworCXNob3J0X2NhbF9pbnRlcnZhbCA9IChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSA/CisJCUFUSF9BUF9TSE9SVF9DQUxJTlRFUlZBTCA6IEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUw7CiAKIAkvKgogCSogZG9uJ3QgY2FsaWJyYXRlIHdoZW4gd2UncmUgc2Nhbm5pbmcuCiAJKiB3ZSBhcmUgbW9zdCBsaWtlbHkgbm90IG9uIG91ciBob21lIGNoYW5uZWwuCiAJKi8KLQlpZiAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCXJldHVybjsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCisJCWdvdG8gc2V0X3RpbWVyOwogCiAJLyogTG9uZyBjYWxpYnJhdGlvbiBydW5zIGluZGVwZW5kZW50bHkgb2Ygc2hvcnQgY2FsaWJyYXRpb24uICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2xvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmxvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CiAJCWxvbmdjYWwgPSB0cnVlOwogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOSSwgImxvbmdjYWwgQCVsdVxuIiwgamlmZmllcyk7Ci0JCXNjLT5zY19hbmkuc2NfbG9uZ2NhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5sb25nY2FsX3RpbWVyID0gdGltZXN0YW1wOwogCX0KIAotCS8qIFNob3J0IGNhbGlicmF0aW9uIGFwcGxpZXMgb25seSB3aGlsZSBzY19jYWxkb25lIGlzIGZhbHNlICovCi0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpIHsKLQkJaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX3Nob3J0Y2FsX3RpbWVyKSA+PQotCQkgICAgQVRIX1NIT1JUX0NBTElOVEVSVkFMKSB7CisJLyogU2hvcnQgY2FsaWJyYXRpb24gYXBwbGllcyBvbmx5IHdoaWxlIGNhbGRvbmUgaXMgZmFsc2UgKi8KKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkgeworCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuc2hvcnRjYWxfdGltZXIpID49IHNob3J0X2NhbF9pbnRlcnZhbCkgewogCQkJc2hvcnRjYWwgPSB0cnVlOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksICJzaG9ydGNhbCBAJWx1XG4iLCBqaWZmaWVzKTsKLQkJCXNjLT5zY19hbmkuc2Nfc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7Ci0JCQlzYy0+c2NfYW5pLnNjX3Jlc2V0Y2FsX3RpbWVyID0gdGltZXN0YW1wOworCQkJc2MtPmFuaS5zaG9ydGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkucmVzZXRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5zY19hbmkuc2NfcmVzZXRjYWxfdGltZXIpID49CisJCWlmICgodGltZXN0YW1wIC0gc2MtPmFuaS5yZXNldGNhbF90aW1lcikgPj0KIAkJICAgIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMKSB7Ci0JCQlhdGg5a19od19yZXNldF9jYWx2YWxpZChhaCwgYWgtPmFoX2N1cmNoYW4sCi0JCQkJCQkmc2MtPnNjX2FuaS5zY19jYWxkb25lKTsKLQkJCWlmIChzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCQkJc2MtPnNjX2FuaS5zY19yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkuY2FsZG9uZSA9IGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKGFoKTsKKwkJCWlmIChzYy0+YW5pLmNhbGRvbmUpCisJCQkJc2MtPmFuaS5yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKIAkJfQogCX0KIAogCS8qIFZlcmlmeSB3aGV0aGVyIHdlIG11c3QgY2hlY2sgQU5JICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2NoZWNrYW5pX3RpbWVyKSA+PQotCSAgIEFUSF9BTklfUE9MTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmNoZWNrYW5pX3RpbWVyKSA+PSBBVEhfQU5JX1BPTExJTlRFUlZBTCkgewogCQlhbmlmbGFnID0gdHJ1ZTsKLQkJc2MtPnNjX2FuaS5zY19jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKIAl9CiAKIAkvKiBTa2lwIGFsbCBwcm9jZXNzaW5nIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KIAlpZiAobG9uZ2NhbCB8fCBzaG9ydGNhbCB8fCBhbmlmbGFnKSB7CiAJCS8qIENhbGwgQU5JIHJvdXRpbmUgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChhbmlmbGFnKQotCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+c2NfaGFsc3RhdHMsCi0JCQkJCSAgICAgYWgtPmFoX2N1cmNoYW4pOworCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CiAKIAkJLyogUGVyZm9ybSBjYWxpYnJhdGlvbiBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGxvbmdjYWwgfHwgc2hvcnRjYWwpIHsKIAkJCWJvb2wgaXNjYWxkb25lID0gZmFsc2U7CiAKLQkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJCQkgICAgICAgc2MtPnNjX3J4X2NoYWlubWFzaywgbG9uZ2NhbCwKKwkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5jdXJjaGFuLAorCQkJCQkgICAgICAgc2MtPnJ4X2NoYWlubWFzaywgbG9uZ2NhbCwKIAkJCQkJICAgICAgICZpc2NhbGRvbmUpKSB7CiAJCQkJaWYgKGxvbmdjYWwpCi0JCQkJCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPQorCQkJCQlzYy0+YW5pLm5vaXNlX2Zsb29yID0KIAkJCQkJCWF0aDlrX2h3X2dldGNoYW5fbm9pc2UoYWgsCi0JCQkJCQkJICAgICAgIGFoLT5haF9jdXJjaGFuKTsKKwkJCQkJCQkgICAgICAgYWgtPmN1cmNoYW4pOwogCiAJCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksCiAJCQkJCSJjYWxpYnJhdGUgY2hhbiAldS8leCBuZjogJWRcbiIsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzLAotCQkJCQlzYy0+c2NfYW5pLnNjX25vaXNlX2Zsb29yKTsKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWwsCisJCQkJCWFoLT5jdXJjaGFuLT5jaGFubmVsRmxhZ3MsCisJCQkJCXNjLT5hbmkubm9pc2VfZmxvb3IpOwogCQkJfSBlbHNlIHsKIAkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOWSwKIAkJCQkJImNhbGlicmF0ZSBjaGFuICV1LyV4IGZhaWxlZFxuIiwKLQkJCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MpOworCQkJCQlhaC0+Y3VyY2hhbi0+Y2hhbm5lbCwKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWxGbGFncyk7CiAJCQl9Ci0JCQlzYy0+c2NfYW5pLnNjX2NhbGRvbmUgPSBpc2NhbGRvbmU7CisJCQlzYy0+YW5pLmNhbGRvbmUgPSBpc2NhbGRvbmU7CiAJCX0KIAl9CiAKK3NldF90aW1lcjoKIAkvKgogCSogU2V0IHRpbWVyIGludGVydmFsIGJhc2VkIG9uIHByZXZpb3VzIHJlc3VsdHMuCiAJKiBUaGUgaW50ZXJ2YWwgbXVzdCBiZSB0aGUgc2hvcnRlc3QgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgQU5JLAogCSogc2hvcnQgY2FsaWJyYXRpb24gYW5kIGxvbmcgY2FsaWJyYXRpb24uCiAJKi8KIAljYWxfaW50ZXJ2YWwgPSBBVEhfTE9OR19DQUxJTlRFUlZBTDsKLQlpZiAoc2MtPnNjX2FoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKKwlpZiAoc2MtPnNjX2FoLT5jb25maWcuZW5hYmxlX2FuaSkKIAkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilBVEhfQU5JX1BPTExJTlRFUlZBTCk7Ci0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCWNhbF9pbnRlcnZhbCA9IG1pbihjYWxfaW50ZXJ2YWwsICh1MzIpQVRIX1NIT1JUX0NBTElOVEVSVkFMKTsKKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkKKwkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilzaG9ydF9jYWxfaW50ZXJ2YWwpOwogCi0JbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhjYWxfaW50ZXJ2YWwpKTsKKwltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGNhbF9pbnRlcnZhbCkpOwogfQogCiAvKgogICogVXBkYXRlIHR4L3J4IGNoYWlubWFzay4gRm9yIGxlZ2FjeSBhc3NvY2lhdGlvbiwKICAqIGhhcmQgY29kZSBjaGFpbm1hc2sgdG8gMXgxLCBmb3IgMTFuIGFzc29jaWF0aW9uLCB1c2UKLSAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbi4KKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiwgZm9yIGJ0IGNvZXhpc3RlbmNlLCB1c2UKKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiBldmVuIGluIGxlZ2FjeSBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQogewogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCWlmIChpc19odCkgewotCQlzYy0+c2NfdHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQkJc2MtPnNjX3J4X2NoYWlubWFzayA9IHNjLT5zY19haC0+YWhfY2Fwcy5yeF9jaGFpbm1hc2s7CisJaWYgKGlzX2h0IHx8CisJICAgIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CVF9DT0VYKSkgeworCQlzYy0+dHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzazsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy5yeF9jaGFpbm1hc2s7CiAJfSBlbHNlIHsKLQkJc2MtPnNjX3R4X2NoYWlubWFzayA9IDE7Ci0JCXNjLT5zY19yeF9jaGFpbm1hc2sgPSAxOworCQlzYy0+dHhfY2hhaW5tYXNrID0gMTsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IDE7CiAJfQogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJ0eCBjaG1hc2s6ICVkLCByeCBjaG1hc2s6ICVkXG4iLAotCQlzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrKTsKKwkJc2MtPnR4X2NoYWlubWFzaywgc2MtPnJ4X2NoYWlubWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9ub2RlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKQEAgLTQ3Niw3ICs0NTUsNyBAQAogc3RhdGljIHZvaWQgYXRoOWtfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7Ci0JdTMyIHN0YXR1cyA9IHNjLT5zY19pbnRyc3RhdHVzOworCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTQ5NiwxMyArNDc1LDEzIEBACiAJfQogCiAJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldikKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZGV2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAllbnVtIGF0aDlrX2ludCBzdGF0dXM7CiAJYm9vbCBzY2hlZCA9IGZhbHNlOwogCkBAIC01MjcsNyArNTA2LDcgQEAKIAkJICovCiAJCWF0aDlrX2h3X2dldGlzcihhaCwgJnN0YXR1cyk7CS8qIE5COiBjbGVhcnMgSVNSIHRvbyAqLwogCi0JCXN0YXR1cyAmPSBzYy0+c2NfaW1hc2s7CS8qIGRpc2NhcmQgdW5hc2tlZC1mb3IgYml0cyAqLworCQlzdGF0dXMgJj0gc2MtPmltYXNrOwkvKiBkaXNjYXJkIHVuYXNrZWQtZm9yIGJpdHMgKi8KIAogCQkvKgogCQkgKiBJZiB0aGVyZSBhcmUgbm8gc3RhdHVzIGJpdHMgc2V0LCB0aGVuIHRoaXMgaW50ZXJydXB0IHdhcyBub3QKQEAgLTUzNiw3ICs1MTUsOCBAQAogCQlpZiAoIXN0YXR1cykKIAkJCXJldHVybiBJUlFfTk9ORTsKIAotCQlzYy0+c2NfaW50cnN0YXR1cyA9IHN0YXR1czsKKwkJc2MtPmludHJzdGF0dXMgPSBzdGF0dXM7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKIAkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9GQVRBTCkgewogCQkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTU4Myw0NSArNTYzLDM5IEBACiAJCQkJICogaXQgd2lsbCBjbGVhciB3aGF0ZXZlciBjb25kaXRpb24gY2F1c2VkCiAJCQkJICogdGhlIGludGVycnVwdC4KIAkJCQkgKi8KLQkJCQlhdGg5a19od19wcm9jbWliZXZlbnQoYWgsICZzYy0+c2NfaGFsc3RhdHMpOwotCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCQkJCWF0aDlrX2h3X3Byb2NtaWJldmVudChhaCwgJnNjLT5ub2Rlc3RhdHMpOworCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCQkJfQogCQkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9USU1fVElNRVIpIHsKLQkJCQlpZiAoIShhaC0+YWhfY2Fwcy5od19jYXBzICYKKwkJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCQkgICAgICBBVEg5S19IV19DQVBfQVVUT1NMRUVQKSkgewogCQkJCQkvKiBDbGVhciBSeEFib3J0IGJpdCBzbyB0aGF0IHdlIGNhbgogCQkJCQkgKiByZWNlaXZlIGZyYW1lcyAqLworCQkJCQlhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpOwogCQkJCQlhdGg5a19od19zZXRyeGFib3J0KGFoLCAwKTsKIAkJCQkJc2NoZWQgPSB0cnVlOworCQkJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQkVBQ09OOwogCQkJCX0KIAkJCX0KKwkJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFNGT09SKSB7CisJCQkJLyogRklYTUU6IEhhbmRsZSB0aGlzIGludGVycnVwdCBmb3IgcG93ZXIgc2F2ZSAqLworCQkJCXNjaGVkID0gdHJ1ZTsKKwkJCX0KIAkJfQorCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9IHdoaWxlICgwKTsKIAogCWF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzYywgc3RhdHVzKTsKIAogCWlmIChzY2hlZCkgewogCQkvKiB0dXJuIG9mZiBldmVyeSBpbnRlcnJ1cHQgZXhjZXB0IFNXQkEgKi8KLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIChzYy0+c2NfaW1hc2sgJiBBVEg5S19JTlRfU1dCQSkpOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9TV0JBKSk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5pbnRyX3RxKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2dldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNjLT5zY19haC0+YWhfbmNoYW47IGkrKykgewotCQlpZiAoc2MtPnNjX2FoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsID09IGNoYW4tPmNlbnRlcl9mcmVxKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgdTMyIGF0aF9nZXRfZXh0Y2hhbm1vZGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQpAQCAtNjY0LDIwICs2MzgsOSBAQAogCXJldHVybiBjaGFubW9kZTsKIH0KIAotc3RhdGljIGludCBhdGhfa2V5c2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsCi0JICAgICAgIHN0cnVjdCBhdGg5a19rZXl2YWwgKmhrLCBjb25zdCB1OCBtYWNbRVRIX0FMRU5dKQotewotCWJvb2wgc3RhdHVzOwotCi0Jc3RhdHVzID0gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwKLQkJa2V5aXgsIGhrLCBtYWMsIGZhbHNlKTsKLQotCXJldHVybiBzdGF0dXMgIT0gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoX3NldGtleV90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsIGNvbnN0IHU4ICprZXksCi0JCQkgICBzdHJ1Y3QgYXRoOWtfa2V5dmFsICpoaywKLQkJCSAgIGNvbnN0IHU4ICphZGRyKQorCQkJICAgc3RydWN0IGF0aDlrX2tleXZhbCAqaGssIGNvbnN0IHU4ICphZGRyLAorCQkJICAgYm9vbCBhdXRoZW50aWNhdG9yKQogewogCWNvbnN0IHU4ICprZXlfcnhtaWM7CiAJY29uc3QgdTggKmtleV90eG1pYzsKQEAgLTY4NiwyNiArNjQ5LDMzIEBACiAJa2V5X3J4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVk7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCS8qIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gKi8KLQkJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKLQkJcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4LCBoaywgYWRkcik7Ci0JfQotCWlmICghc2MtPnNjX3NwbGl0bWljKSB7CiAJCS8qCi0JCSAqIGRhdGEga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsCi0JCSAqIHRoZSBoYWwgaGFuZGxlcyB0aGUgTUlDIGtleXMgYXQgaW5kZXgrNjQuCisJCSAqIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gLSBvbmx5IHR3byBrZXkgY2FjaGUgZW50cmllcyBhcmUgdXNlZAorCQkgKiByZWdhcmRsZXNzIG9mIHNwbGl0bWljIGNhcGFiaWxpdHkgc2luY2UgZ3JvdXAga2V5IGlzIG9ubHkKKwkJICogdXNlZCBlaXRoZXIgZm9yIFRYIG9yIFJYLgogCQkgKi8KKwkJaWYgKGF1dGhlbnRpY2F0b3IpIHsKKwkJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQkJbWVtY3B5KGhrLT5rdl90eG1pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQl9CisJCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIGFkZHIpOworCX0KKwlpZiAoIXNjLT5zcGxpdG1pYykgeworCQkvKiBUWCBhbmQgUlgga2V5cyBzaGFyZSB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkuICovCiAJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfcnhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CiAJCW1lbWNweShoay0+a3ZfdHhtaWMsIGtleV90eG1pYywgc2l6ZW9mKGhrLT5rdl90eG1pYykpOwotCQlyZXR1cm4gYXRoX2tleXNldChzYywga2V5aXgsIGhrLCBhZGRyKTsKKwkJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgYWRkcik7CiAJfQotCS8qCi0JICogVFgga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsIFJYIGtleSBhdCArMzIuCi0JICogVGhlIGhhbCBoYW5kbGVzIHRoZSBNSUMga2V5cyBhdCBpbmRleCs2NC4KLQkgKi8KKworCS8qIFNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzIGZvciBUWCBhbmQgUlggKi8KKworCS8qIFRYIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LCBSWCBrZXkgYXQgKzMyLiAqLwogCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JaWYgKCFhdGhfa2V5c2V0KHNjLCBrZXlpeCwgaGssIE5VTEwpKSB7Ci0JCS8qIFR4bWljIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KKwlpZiAoIWF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgTlVMTCkpIHsKKwkJLyogVFggTUlDIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJTZXR0aW5nIFRYIE1JQyBLZXkgRmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC03MTMsMjAgKzY4MywyMCBAQAogCiAJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKIAkvKiBYWFggZGVsZXRlIHR4IGtleSBvbiBmYWlsdXJlPyAqLwotCXJldHVybiBhdGhfa2V5c2V0KHNjLCBrZXlpeCArIDMyLCBoaywgYWRkcik7CisJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4ICsgMzIsIGhrLCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCWludCBpOwogCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heCAvIDI7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgfHwKLQkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkpCisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heCAvIDI7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgc2MtPmtleW1hcCkgfHwKKwkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQljb250aW51ZTsgLyogQXQgbGVhc3Qgb25lIHBhcnQgb2YgVEtJUCBrZXkgYWxsb2NhdGVkICovCi0JCWlmIChzYy0+c2Nfc3BsaXRtaWMgJiYKLQkJICAgICh0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApIHx8Ci0JCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJaWYgKHNjLT5zcGxpdG1pYyAmJgorCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJY29udGludWU7IC8qIEF0IGxlYXN0IG9uZSBwYXJ0IG9mIFRLSVAga2V5IGFsbG9jYXRlZCAqLwogCiAJCS8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIFRLSVAga2V5ICovCkBAIC03NDAsNTUgKzcxMCw1NSBAQAogCWludCBpOwogCiAJLyogRmlyc3QsIHRyeSB0byBmaW5kIHNsb3RzIHRoYXQgd291bGQgbm90IGJlIGF2YWlsYWJsZSBmb3IgVEtJUC4gKi8KLQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyA0OyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICAodGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+c2Nfa2V5bWFwKSkpCisJaWYgKHNjLT5zcGxpdG1pYykgeworCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gNDsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpOwotCQkJaWYgKCF0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJCWlmICghdGVzdF9iaXQoaSArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyAzMjsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICh0ZXN0X2JpdChpICwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCkpKQorCQkJaWYgKCF0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyAzMiwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSkpCisJCQlpZiAoIXRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpICsgNjQgKyAzMjsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyAyOyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gMjsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSkKIAkJCQlyZXR1cm4gaTsKLQkJCWlmICh0ZXN0X2JpdChpLCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICF0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQkJaWYgKHRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgIXRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKIAkJfQogCX0KIAogCS8qIE5vIHBhcnRpYWxseSB1c2VkIFRLSVAgc2xvdHMsIHBpY2sgYW55IGF2YWlsYWJsZSBzbG90ICovCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heDsgaSsrKSB7CisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heDsgaSsrKSB7CiAJCS8qIERvIG5vdCBhbGxvdyBzbG90cyB0aGF0IGNvdWxkIGJlIG5lZWRlZCBmb3IgVEtJUCBncm91cCBrZXlzCiAJCSAqIHRvIGJlIHVzZWQuIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZSByZW1vdmVkIGlmIHdlIGtub3cgdGhhdAogCQkgKiBUS0lQIHdpbGwgbm90IGJlIHVzZWQuICovCiAJCWlmIChpID49IDY0ICYmIGkgPCA2NCArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7CisJCWlmIChzYy0+c3BsaXRtaWMpIHsKIAkJCWlmIChpID49IDMyICYmIGkgPCAzMiArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChpID49IDY0ICsgMzIgJiYgaSA8IDY0ICsgMzIgKyBJRUVFODAyMTFfV0VQX05LSUQpCiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXRlc3RfYml0KGksIHNjLT5zY19rZXltYXApKQorCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApKQogCQkJcmV0dXJuIGk7IC8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIGtleSAqLwogCX0KIApAQCAtNzk3LDcgKzc2Nyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoX2tleV9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIGNvbnN0IHU4ICphZGRyLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGF0aDlrX2tleXZhbCBoazsKQEAgLTgxOCw3ICs3ODksNyBAQAogCQloay5rdl90eXBlID0gQVRIOUtfQ0lQSEVSX0FFU19DQ007CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaGsua3ZfbGVuID0ga2V5LT5rZXlsZW47CkBAIC04MjksMTAgKzgwMCwxMCBAQAogCQkgKiBuZWVkIHRvIGNoYW5nZSB3aXRoIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KIAkJaWR4ID0ga2V5LT5rZXlpZHg7CiAJfSBlbHNlIGlmIChrZXktPmtleWlkeCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCQlpZiAoV0FSTl9PTighc3RhKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJbWFjID0gc3RhLT5hZGRyOwogCi0JCW1hYyA9IGFkZHI7Ci0JCXZpZiA9IHNjLT5zY192YXBzWzBdOwogCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCQkvKiBPbmx5IGtleWlkeCAwIHNob3VsZCBiZSB1c2VkIHdpdGggdW5pY2FzdCBrZXksIGJ1dAogCQkJICogYWxsb3cgdGhpcyBmb3IgY2xpZW50IG1vZGUgZm9yIG5vdy4gKi8KQEAgLTg0MCwyOSArODExLDMzIEBACiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU87CiAJfSBlbHNlIHsKLQkJbWFjID0gYWRkcjsKKwkJaWYgKFdBUk5fT04oIXN0YSkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCW1hYyA9IHN0YS0+YWRkcjsKKwogCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCiAJCQlpZHggPSBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHNjKTsKIAkJZWxzZQogCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3Qoc2MpOwogCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlPOyAvKiBubyBmcmVlIGtleSBjYWNoZSBlbnRyaWVzICovCisJCQlyZXR1cm4gLUVOT1NQQzsgLyogbm8gZnJlZSBrZXkgY2FjaGUgZW50cmllcyAqLwogCX0KIAogCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJcmV0ID0gYXRoX3NldGtleV90a2lwKHNjLCBpZHgsIGtleS0+a2V5LCAmaGssIG1hYyk7CisJCXJldCA9IGF0aF9zZXRrZXlfdGtpcChzYywgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMsCisJCQkJICAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKTsKIAllbHNlCi0JCXJldCA9IGF0aF9rZXlzZXQoc2MsIGlkeCwgJmhrLCBtYWMpOworCQlyZXQgPSBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBpZHgsICZoaywgbWFjKTsKIAogCWlmICghcmV0KQogCQlyZXR1cm4gLUVJTzsKIAotCXNldF9iaXQoaWR4LCBzYy0+c2Nfa2V5bWFwKTsKKwlzZXRfYml0KGlkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnID09IEFMR19US0lQKSB7Ci0JCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCk7CisJCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5rZXltYXApOworCQlpZiAoc2MtPnNwbGl0bWljKSB7CisJCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+a2V5bWFwKTsKKwkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJCX0KIAl9CiAKQEAgLTg3NSwxOCArODUwLDE5IEBACiAJaWYgKGtleS0+aHdfa2V5X2lkeCA8IElFRUU4MDIxMV9XRVBfTktJRCkKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPnNjX2tleW1hcCk7CisJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKQogCQlyZXR1cm47CiAKLQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCWlmIChzYy0+c2Nfc3BsaXRtaWMpIHsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApOworCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyA2NCwgc2MtPmtleW1hcCk7CisJaWYgKHNjLT5zcGxpdG1pYykgeworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgMzIsIHNjLT5rZXltYXApOworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvKQorc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKIHsKICNkZWZpbmUJQVRIOUtfSFRfQ0FQX01BWFJYQU1QRFVfNjU1MzYgMHgzCS8qIDIgXiAxNiAqLwogI2RlZmluZQlBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfOCAweDYJCS8qIDggdXNlYyAqLwpAQCAtODk5LDEwICs4NzUsMjMgQEAKIAogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IEFUSDlLX0hUX0NBUF9NQVhSWEFNUERVXzY1NTM2OwogCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfODsKKwogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7Ci0JaHRfaW5mby0+bWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKworCXN3aXRjaChzYy0+cnhfY2hhaW5tYXNrKSB7CisJY2FzZSAxOgorCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCWJyZWFrOworCWNhc2UgMzoKKwljYXNlIDU6CisJY2FzZSA3OgorCWRlZmF1bHQ6CisJCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMV0gPSAweGZmOworCQlicmVhazsKKwl9CisKIAlodF9pbmZvLT5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwogfQogCkBAIC05MTAsMzYgKzg5OSwzMyBAQAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gQVNTT0MgJWQsIGJzc2lkOiAlcE1cbiIsCi0JCQlic3NfY29uZi0+YWlkLCBzYy0+c2NfY3VyYnNzaWQpOworCQkJYnNzX2NvbmYtPmFpZCwgc2MtPmN1cmJzc2lkKTsKIAogCQkvKiBOZXcgYXNzb2NpYXRpb24sIHN0b3JlIGFpZCAqLwogCQlpZiAoYXZwLT5hdl9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJc2MtPnNjX2N1cmFpZCA9IGJzc19jb25mLT5haWQ7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgc2MtPnNjX2N1cmJzc2lkLAotCQkJCQkgICAgICAgc2MtPnNjX2N1cmFpZCk7CisJCQlzYy0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQl9CiAKIAkJLyogQ29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIDApOwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAKIAkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7Ci0JCXNjLT5zY19oYWxzdGF0cy5uc19hdmdyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyYXRlID0gQVRIX1JBVEVfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJCXNjLT5ub2Rlc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3R4cmF0ZSA9IEFUSF9SQVRFX0RVTU1ZX01BUktFUjsKIAogCQkvKiBTdGFydCBBTkkgKi8KLQkJbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLAotCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKLQorCQltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSF9BTklfUE9MTElOVEVSVkFMKSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNTT0NcbiIpOwotCQlzYy0+c2NfY3VyYWlkID0gMDsKKwkJc2MtPmN1cmFpZCA9IDA7CiAJfQogfQogCkBAIC05NDcsNiArOTMzLDM5IEBACiAvKgkgTEVEIGZ1bmN0aW9ucwkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgYXRoX2xlZF9ibGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgYXRoX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX0FTU09DSUFURUQpKQorCQlyZXR1cm47CisKKwlpZiAoKHNjLT5sZWRfb25fZHVyYXRpb24gPT0gQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFKSB8fAorCSAgICAoc2MtPmxlZF9vZmZfZHVyYXRpb24gPT0gQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSkpCisJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCWVsc2UKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCQkgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8gMSA6IDApOworCisJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywKKwkJCSAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8KKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vZmZfZHVyYXRpb24pIDoKKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vbl9kdXJhdGlvbikpOworCisJc2MtPmxlZF9vbl9kdXJhdGlvbiA9IHNjLT5sZWRfb25fY250ID8KKwkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSkgOgorCQkJQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb2ZmX2R1cmF0aW9uID0gc2MtPmxlZF9vZmZfY250ID8KKwkJCW1heCgoQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSAtIHNjLT5sZWRfb2ZmX2NudCksIDEwKSA6CisJCQlBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb25fY250ID0gc2MtPmxlZF9vZmZfY250ID0gMDsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKQorCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwllbHNlCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Cit9CisKIHN0YXRpYyB2b2lkIGF0aF9sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CkBAIC05NTYsMTYgKzk3NSwyNyBAQAogCXN3aXRjaCAoYnJpZ2h0bmVzcykgewogCWNhc2UgTEVEX09GRjoKIAkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQorCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCi0JCQkJKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgPyAxIDoKLQkJCQkhIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfQVNTT0NJQVRFRCkpOworCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb2ZmX2NudCsrOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTEVEX0ZVTEw6Ci0JCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpCisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJCSAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb25fY250Kys7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMDAxLDYgKzEwMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5hc3NvY19sZWQpOwogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKQEAgLTEwMjAsOSArMTA1MSwxMSBAQAogCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KIAlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOworCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cmFkaW9fbGVkLm5hbWUsIHNpemVvZihzYy0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cmFkaW9fbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKIAlpZiAocmV0KQpAQCAtMTAzMCw3ICsxMDYzLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKHNjLT5odyk7CiAJc25wcmludGYoc2MtPmFzc29jX2xlZC5uYW1lLCBzaXplb2Yoc2MtPmFzc29jX2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKIAlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPmFzc29jX2xlZCwgdHJpZ2dlcik7CiAJc2MtPmFzc29jX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfQVNTT0M7CiAJaWYgKHJldCkKQEAgLTEwMzgsNyArMTA3MSw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShzYy0+aHcpOwogCXNucHJpbnRmKHNjLT50eF9sZWQubmFtZSwgc2l6ZW9mKHNjLT50eF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnR4Iiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CiAJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIHRyaWdnZXIpOwogCXNjLT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOwogCWlmIChyZXQpCkBAIC0xMDQ2LDcgKzEwNzksNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cnhfbGVkLm5hbWUsIHNpemVvZihzYy0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKIAlpZiAocmV0KQpAQCAtMTA1OCwzMiArMTA5MSwyMiBAQAogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyoJUmZraWxsCSAgICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKKwlpbnQgcjsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLAotCQkJICAgIGZhbHNlLCAmc3RhdHVzKSkgeworCisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCisJaWYgKHIpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIKLQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQlhdGg5a19od19taHoyaWVlZShhaCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIsCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKQEAgLTEwOTUsMTAgKzExMTgsMTAgQEAKIAl9CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIEFUSF9JRl9JRF9BTlkpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCS8qIFJlLUVuYWJsZSAgaW50ZXJydXB0cyAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCiAJLyogRW5hYmxlIExFRCAqLwogCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIEFUSF9MRURfUElOLApAQCAtMTEwNiwxNCArMTEyOSwxNiBAQAogCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBBVEhfTEVEX1BJTiwgMCk7CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHNjLT5ody0+Y29uZi5jaGFubmVsOworCWludCByOwogCi0KKwlhdGg5a19wc193YWtldXAoc2MpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KQEAgLTExMjMsMzggKzExNDgsMzcgQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CiAKLQlhdGhfZHJhaW50eHEoc2MsIGZhbHNlKTsJLyogY2xlYXIgcGVuZGluZyB0eCBmcmFtZXMgKi8KKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCWF0aF9zdG9wcmVjdihzYyk7CQkvKiB0dXJuIG9mZiBmcmFtZSByZWN2ICovCiAJYXRoX2ZsdXNocmVjdihzYyk7CQkvKiBmbHVzaCByZWN2IHF1ZXVlICovCiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX3J4X2NoYWlubWFzaywKLQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsCi0JCQkgICAgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCWlmIChyKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgJXUgKCV1TWh6KSAiCi0JCQkiZmxhZ3MgMHgleCBoYWwgc3RhdHVzICV1XG4iLAotCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyksCi0JCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MsIHN0YXR1cyk7CisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKIAlhdGg5a19od19waHlfZGlzYWJsZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPmFoX3Jma2lsbF9wb2xhcml0eTsKKwlyZXR1cm4gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIGFoLT5yZmtpbGxfZ3BpbykgPT0KKwkJCQkgIGFoLT5yZmtpbGxfcG9sYXJpdHk7CiB9CiAKIC8qIGgvdyByZmtpbGwgcG9sbCBmdW5jdGlvbiAqLwpAQCAtMTIzOCw3ICsxMjYyLDcgQEAKIAl9CiAKIAlzbnByaW50ZihzYy0+cmZfa2lsbC5yZmtpbGxfbmFtZSwgc2l6ZW9mKHNjLT5yZl9raWxsLnJma2lsbF9uYW1lKSwKLQkJImF0aDlrLSVzOnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXNjLT5yZl9raWxsLnJma2lsbC0+bmFtZSA9IHNjLT5yZl9raWxsLnJma2lsbF9uYW1lOwogCXNjLT5yZl9raWxsLnJma2lsbC0+ZGF0YSA9IHNjOwogCXNjLT5yZl9raWxsLnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gYXRoX3N3X3RvZ2dsZV9yYWRpbzsKQEAgLTEyNTEsNyArMTI3NSw3IEBACiAvKiBEZWluaXRpYWxpemUgcmZraWxsICovCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X3Jma2lsbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9SRktJTExfUkVHSVNURVJFRCkgewpAQCAtMTI2Myw3ICsxMjg3LDcgQEAKIAogc3RhdGljIGludCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JaWYgKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKIAkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAogCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7CiAKQEAgLTEyNzQsMTMgKzEyOTgsNyBAQAogCQkJcmZraWxsX2ZyZWUoc2MtPnJmX2tpbGwucmZraWxsKTsKIAogCQkJLyogRGVpbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KLQkJCWF0aF9kZXRhY2goc2MpOwotCQkJaWYgKHNjLT5wZGV2LT5pcnEpCi0JCQkJZnJlZV9pcnEoc2MtPnBkZXYtPmlycSwgc2MpOwotCQkJcGNpX2lvdW5tYXAoc2MtPnBkZXYsIHNjLT5tZW0pOwotCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHNjLT5wZGV2LCAwKTsKLQkJCXBjaV9kaXNhYmxlX2RldmljZShzYy0+cGRldik7Ci0JCQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCQkJYXRoX2NsZWFudXAoc2MpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSB7CiAJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQ7CkBAIC0xMjkxLDE4ICsxMzA5LDM5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JGS0lMTCAqLwogCi1zdGF0aWMgdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlhdGhfZGV0YWNoKHNjKTsKKwlmcmVlX2lycShzYy0+aXJxLCBzYyk7CisJYXRoX2J1c19jbGVhbnVwKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworfQorCit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJaW50IGkgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEFUSCBod1xuIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCiAJYXRoX2RlaW5pdF9yZmtpbGwoc2MpOwogI2VuZGlmCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKKwljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKKwl9CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGhfdHhfY2xlYW51cChzYyk7CkBAIC0xMzIwLDExICsxMzU5LDEyIEBACiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGhfaW5pdCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IE5VTEw7CisJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwogCWludCBzdGF0dXM7CiAJaW50IGVycm9yID0gMCwgaTsKIAlpbnQgY3N6ID0gMDsKQEAgLTEzMzUsNTQgKzEzNzUsNTIgQEAKIAlpZiAoYXRoOWtfaW5pdF9kZWJ1ZyhzYykgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmNvbl90YXNrbGV0LCBhdGg5a19iZWFjb25fdGFza2xldCwKKwl0YXNrbGV0X2luaXQoJnNjLT5iY29uX3Rhc2tsZXQsIGF0aF9iZWFjb25fdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylzYyk7CiAKIAkvKgogCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKIAkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCiAJICovCi0JYnVzX3JlYWRfY2FjaGVzaXplKHNjLCAmY3N6KTsKKwlhdGhfcmVhZF9jYWNoZXNpemUoc2MsICZjc3opOwogCS8qIFhYWCBhc3NlcnQgY3N6IGlzIG5vbi16ZXJvICovCi0Jc2MtPnNjX2NhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCBzYy0+bWVtLCAmc3RhdHVzKTsKKwlhaCA9IGF0aDlrX2h3X2F0dGFjaChkZXZpZCwgc2MsICZzdGF0dXMpOwogCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiVW5hYmxlIHRvIGF0dGFjaCBoYXJkd2FyZTsgSEFMIHN0YXR1cyAldVxuIiwgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gYXR0YWNoIGhhcmR3YXJlOyBIQUwgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQllcnJvciA9IC1FTlhJTzsKIAkJZ290byBiYWQ7CiAJfQogCXNjLT5zY19haCA9IGFoOwogCiAJLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQlzYy0+c2Nfa2V5bWF4ID0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoc2MtPnNjX2tleW1heCA+IEFUSF9LRVlNQVgpIHsKKwlzYy0+a2V5bWF4ID0gYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoc2MtPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgc2MtPnNjX2tleW1heCk7Ci0JCXNjLT5zY19rZXltYXggPSBBVEhfS0VZTUFYOworCQkJQVRIX0tFWU1BWCwgc2MtPmtleW1heCk7CisJCXNjLT5rZXltYXggPSBBVEhfS0VZTUFYOwogCX0KIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAogCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzYy0+c2Nfa2V5bWF4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNjLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQoYWgsICh1MTYpIGkpOwogCi0JLyogQ29sbGVjdCB0aGUgY2hhbm5lbCBsaXN0IHVzaW5nIHRoZSBkZWZhdWx0IGNvdW50cnkgY29kZSAqLwotCi0JZXJyb3IgPSBhdGhfc2V0dXBfY2hhbm5lbHMoc2MpOwotCWlmIChlcnJvcikKKwlpZiAoYXRoOWtfcmVnZF9pbml0KHNjLT5zY19haCkpCiAJCWdvdG8gYmFkOwogCiAJLyogZGVmYXVsdCB0byBNT05JVE9SIG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0KKwlzYy0+c2NfYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAKIAkvKiBTZXR1cCByYXRlIHRhYmxlcyAqLwogCkBAIC0xNDExLDcgKzE0NDksNyBAQAogCQlnb3RvIGJhZDI7CiAJfQogCi0Jc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIX0NBQlFfUkVBRFlfVElNRTsKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOwogCWF0aF9jYWJxX3VwZGF0ZShzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKQEAgLTE0NDgsOCArMTQ4Niw4IEBACiAJLyogSW5pdGlhbGl6ZXMgdGhlIG5vaXNlIGZsb29yIHRvIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLgogCSAqIExhdGVyIG9uIHRoaXMgd2lsbCBiZSB1cGRhdGVkIGR1cmluZyBBTkkgcHJvY2Vzc2luZy4gKi8KIAotCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPSBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUjsKLQlzZXR1cF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKwlzYy0+YW5pLm5vaXNlX2Zsb29yID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CisJc2V0dXBfdGltZXIoJnNjLT5hbmkudGltZXIsIGF0aF9hbmlfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX0NJUEhFUiwKIAkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkpIHsKQEAgLTE0NzUsNjAgKzE1MTMsNjIgQEAKIAkJCQkgICAgICBBVEg5S19DSVBIRVJfTUlDLCBOVUxMKQogCSAgICAmJiBhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKIAkJCQkgICAgICAwLCBOVUxMKSkKLQkJc2MtPnNjX3NwbGl0bWljID0gMTsKKwkJc2MtPnNwbGl0bWljID0gMTsKIAogCS8qIHR1cm4gb24gbWNhc3Qga2V5IHNlYXJjaCBpZiBwb3NzaWJsZSAqLwogCWlmICghYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQogCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMSwKIAkJCQkJICAgICAxLCBOVUxMKTsKIAotCXNjLT5zY19jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKLQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXRfb3ZlcnJpZGUgPSAwOworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKIAogCS8qIDExbiBDYXBhYmlsaXRpZXMgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7CiAJfQogCi0Jc2MtPnNjX3R4X2NoYWlubWFzayA9IGFoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQlzYy0+c2NfcnhfY2hhaW5tYXNrID0gYWgtPmFoX2NhcHMucnhfY2hhaW5tYXNrOworCXNjLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7CisJc2MtPnJ4X2NoYWlubWFzayA9IGFoLT5jYXBzLnJ4X2NoYWlubWFzazsKIAogCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9ESVZFUlNJVFksIDEsIHRydWUsIE5VTEwpOwogCXNjLT5yeC5kZWZhbnQgPSBhdGg5a19od19nZXRkZWZhbnRlbm5hKGFoKTsKIAotCWF0aDlrX2h3X2dldG1hYyhhaCwgc2MtPnNjX215YWRkcik7Ci0JaWYgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKSB7Ci0JCWF0aDlrX2h3X2dldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCUFUSF9TRVRfVkFQX0JTU0lEX01BU0soc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JfQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJbWVtY3B5KHNjLT5ic3NpZG1hc2ssIGF0aF9iY2FzdF9tYWMsIEVUSF9BTEVOKTsKIAogCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBBVEg5S19TTE9UX1RJTUVfOTsJLyogZGVmYXVsdCB0byBzaG9ydCBzbG90IHRpbWUgKi8KIAogCS8qIGluaXRpYWxpemUgYmVhY29uIHNsb3RzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykKLQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IEFUSF9JRl9JRF9BTlk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9CiAKIAkvKiBzYXZlIE1JU0MgY29uZmlndXJhdGlvbnMgKi8KLQlzYy0+c2NfY29uZmlnLnN3QmVhY29uUHJvY2VzcyA9IDE7CisJc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MgPSAxOwogCiAJLyogc2V0dXAgY2hhbm5lbHMgYW5kIHJhdGVzICovCiAKLQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0KLQkJc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKIAlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0KIAkJc2MtPnJhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KKwkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CiAKLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHNjLT5zY19haC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5jaGFubmVscyA9Ci0JCQlzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKIAkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9CiAJCQlzYy0+cmF0ZXNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKKwkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCiAJcmV0dXJuIDA7CiBiYWQyOgogCS8qIGNsZWFudXAgdHggcXVldWVzICovCkBAIC0xNTQzLDkgKzE1ODMsNDkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQorCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKKworCWh3LT53aXBoeS0+cmVnX25vdGlmaWVyID0gYXRoOWtfcmVnX25vdGlmaWVyOworCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmlmKTsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7CisKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworfQorCitpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCWludCBlcnJvciA9IDAsIGk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkF0dGFjaCBBVEggaHdcbiIpOwpAQCAtMTU1NiwzNyArMTYzNiwxNiBAQAogCiAJLyogZ2V0IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgYW5kIHNldCBpbiBtYWM4MDIxMSAqLwogCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNjLT5zY19teWFkZHIpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPnF1ZXVlcyA9IDQ7Ci0JaHctPm1heF9yYXRlcyA9IDQ7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOwotCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmFwKTsKLQotCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7Ci0KLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKLQkJc2V0dXBfaHRfY2FwKCZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcCgmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5odF9jYXApOworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKIAl9CiAKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0JJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCiAJLyogaW5pdGlhbGl6ZSB0eC9yeCBlbmdpbmUgKi8KIAllcnJvciA9IGF0aF90eF9pbml0KHNjLCBBVEhfVFhCVUYpOwogCWlmIChlcnJvciAhPSAwKQpAQCAtMTU5OCw3ICsxNjU3LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKIAkvKiBJbml0aWFsemUgaC93IFJma2lsbCAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCiAJCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgYXRoX3Jma2lsbF9wb2xsKTsKIAogCS8qIEluaXRpYWxpemUgcy93IHJma2lsbCAqLwpAQCAtMTYwNywxMSArMTY2NiwzOSBAQAogCQlnb3RvIGVycm9yX2F0dGFjaDsKICNlbmRpZgogCisJaWYgKGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgeworCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbikgZ2V0cworCQkgKiBzYXZlZCBvbiB0aGUgd2lwaHkgb3JpZ18qIHBhcmFtZXRlcnMgKi8KKwkJcmVnZCA9IGF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzYy0+c2NfYWgpOworCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCisJCSAqIGl0J3Mgb3VyIG93biBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4sIHNpbWlsYXIgdG8KKwkJICogY2ZnODAyMTEncyBidXQgd2UgZW5hYmxlIHBhc3NpdmUgc2Nhbm5pbmcgKi8KKwkJcmVnZCA9IGF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CisJfQorCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwgcmVnZCk7CisJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKGh3LT53aXBoeSk7CisJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUik7CisKKwlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAorCWlmICghYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwKKwkJCXNjLT5zY19haC0+cmVndWxhdG9yeS5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX2F0dGFjaDsKKwl9CisKIAkvKiBJbml0aWFsaXplIExFRCBjb250cm9sICovCiAJYXRoX2luaXRfbGVkcyhzYyk7CiAKKwogCXJldHVybiAwOwogCiBlcnJvcl9hdHRhY2g6CkBAIC0xNjI4LDI0ICsxNzE1LDIwIEBACiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlpbnQgcjsKIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQlhdGhfZHJhaW50eHEoc2MsIHJldHJ5X3R4KTsKKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CiAJYXRoX2ZsdXNocmVjdihzYyk7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIGZhbHNlKTsKKwlpZiAocikKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IGhhbCBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVJTzsKLQl9CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsIHIpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKQpAQCAtMTY1NiwxNCArMTczOSwxNCBAQAogCSAqIHRoYXQgY2hhbmdlcyB0aGUgY2hhbm5lbCBzbyB1cGRhdGUgYW55IHN0YXRlIHRoYXQKIAkgKiBtaWdodCBjaGFuZ2UgYXMgYSByZXN1bHQuCiAJICovCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoc2MtPnNjX2FoLT5haF9jdXJjaGFuKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCWF0aF91cGRhdGVfdHhwb3coc2MpOwogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZKTsJLyogcmVzdGFydCBiZWFjb25zICovCisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsJLyogcmVzdGFydCBiZWFjb25zICovCiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKIAogCWlmIChyZXRyeV90eCkgewogCQlpbnQgaTsKQEAgLTE2NzYsNyArMTc1OSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHI7CiB9CiAKIC8qCkBAIC0xNzAwLDYgKzE3ODMsNyBAQAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BOiAldSBidWZmZXJzICV1IGRlc2MvYnVmXG4iLAogCQluYW1lLCBuYnVmLCBuZGVzYyk7CiAKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAkvKiBhdGhfZGVzYyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgRFdPUkRzICovCiAJaWYgKChzaXplb2Yoc3RydWN0IGF0aF9kZXNjKSAlIDQpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImF0aF9kZXNjIG5vdCBEV09SRCBhbGlnbmVkXG4iKTsKQEAgLTE3MTYsNyArMTgwMCw3IEBACiAJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCiAJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KIAkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJdTMyIG5kZXNjX3NraXBwZWQgPQogCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CiAJCXUzMiBkbWFfbGVuOwpAQCAtMTczMCw5ICsxODE0LDggQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBkZXNjcmlwdG9ycyAqLwotCWRkLT5kZF9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoc2MtPnBkZXYsCi0JCQkgICAgICBkZC0+ZGRfZGVzY19sZW4sCi0JCQkgICAgICAmZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRkLT5kZF9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwKKwkJCQkJICZkZC0+ZGRfZGVzY19wYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRkLT5kZF9kZXNjID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xNzQ0LDIwICsxODI3LDE4IEBACiAKIAkvKiBhbGxvY2F0ZSBidWZmZXJzICovCiAJYnNpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9idWYpICogbmJ1ZjsKLQliZiA9IGttYWxsb2MoYnNpemUsIEdGUF9LRVJORUwpOworCWJmID0ga3phbGxvYyhic2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KLQltZW1zZXQoYmYsIDAsIGJzaXplKTsKIAlkZC0+ZGRfYnVmcHRyID0gYmY7CiAKLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrLCBiZisrLCBkcyArPSBuZGVzYykgewogCQliZi0+YmZfZGVzYyA9IGRzOwogCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CiAKLQkJaWYgKCEoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJgorCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCiAJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJCS8qCiAJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKQEAgLTE3NzgsOCArMTg1OSw4IEBACiAJfQogCXJldHVybiAwOwogZmFpbDI6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIGZhaWw6CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTc5Miw4ICsxODczLDggQEAKIAkJCSBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAogCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIAogCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCWtmcmVlKGRkLT5kZF9idWZwdHIpOwpAQCAtMTg1MCwzMyArMTkzMSw4MSBAQAogCXJldHVybiBxbnVtOwogfQogCisvKiBYWFg6IFJlbW92ZSBtZSBvbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBhdGg5a19jaGFubmVsIGZvciBhbGwKKyAqIHRoaXMgcmVkdW5kYW50IGRhdGEgKi8KK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBody0+Y29uZi5jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWljaGFuLT5jaGFubmVsID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJaWNoYW4tPmNoYW4gPSBjaGFuOworCisJaWYgKGNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpY2hhbi0+Y2hhbm1vZGUgPSBDSEFOTkVMX0c7CisJCWljaGFuLT5jaGFubmVsRmxhZ3MgPSBDSEFOTkVMXzJHSFogfCBDSEFOTkVMX09GRE07CisJfSBlbHNlIHsKKwkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9BOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF81R0haIHwgQ0hBTk5FTF9PRkRNOworCX0KKworCXNjLT50eF9jaGFuX3dpZHRoID0gQVRIOUtfSFRfTUFDTU9ERV8yMDsKKworCWlmIChjb25mX2lzX2h0KGNvbmYpKSB7CisJCWlmIChjb25mX2lzX2h0NDAoY29uZikpCisJCQlzYy0+dHhfY2hhbl93aWR0aCA9IEFUSDlLX0hUX01BQ01PREVfMjA0MDsKKworCQlpY2hhbi0+Y2hhbm1vZGUgPSBhdGhfZ2V0X2V4dGNoYW5tb2RlKHNjLCBjaGFuLAorCQkJCQkgICAgY29uZi0+Y2hhbm5lbF90eXBlKTsKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGg5a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmluaXRfY2hhbm5lbDsKLQlpbnQgZXJyb3IgPSAwLCBwb3MsIHN0YXR1czsKKwlpbnQgciwgcG9zOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTdGFydGluZyBkcml2ZXIgd2l0aCAiCiAJCSJpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKworCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgeworCQlpZiAoc2MtPmNoYW5faWR4ID09IGN1cmNoYW4tPmh3X3ZhbHVlKSB7CisJCQkvKgorCQkJICogQWxyZWFkeSBvbiB0aGUgb3BlcmF0aW9uYWwgY2hhbm5lbCwgdGhlIG5ldyB3aXBoeQorCQkJICogY2FuIGJlIG1hcmtlZCBhY3RpdmUuCisJCQkgKi8KKwkJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQW5vdGhlciB3aXBoeSBpcyBvbiBhbm90aGVyIGNoYW5uZWwsIHN0YXJ0IHRoZSBuZXcKKwkJCSAqIHdpcGh5IGluIHBhdXNlZCBzdGF0ZS4KKwkJCSAqLworCQkJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwkJfQorCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9BQ1RJVkU7CisKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAotCXBvcyA9IGF0aF9nZXRfY2hhbm5lbChzYywgY3VyY2hhbik7Ci0JaWYgKHBvcyA9PSAtMSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCXBvcyA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCi0Jc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCShjdXJjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8gQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOwotCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc107CisJc2MtPmNoYW5faWR4ID0gcG9zOworCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc107CisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgaW5pdF9jaGFubmVsKTsKIAogCS8qIFJlc2V0IFNFUkRFUyByZWdpc3RlcnMgKi8KIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAwKTsKQEAgLTE4ODksMTcgKzIwMTgsMTQgQEAKIAkgKiBhbmQgdGhlbiBzZXR1cCBvZiB0aGUgaW50ZXJydXB0IG1hc2suCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KHNjLT5zY19haCwgaW5pdF9jaGFubmVsLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLCBmYWxzZSwgJnN0YXR1cykpIHsKKwlyID0gYXRoOWtfaHdfcmVzZXQoc2MtPnNjX2FoLCBpbml0X2NoYW5uZWwsIGZhbHNlKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldSAiCi0JCQkiKGZyZXEgJXUgZmxhZ3MgMHgleClcbiIsIHN0YXR1cywKLQkJCWluaXRfY2hhbm5lbC0+Y2hhbm5lbCwgaW5pdF9jaGFubmVsLT5jaGFubmVsRmxhZ3MpOwotCQllcnJvciA9IC1FSU87CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXUgIgorCQkJIihmcmVxICV1IE1IeilcbiIsIHIsCisJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBtdXRleF91bmxvY2s7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIApAQCAtMTkxOSw2NiArMjA0NSw1NiBAQAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJCXIgPSAtRUlPOworCQlnb3RvIG11dGV4X3VubG9jazsKIAl9CiAKIAkvKiBTZXR1cCBvdXIgaW50ciBtYXNrLiAqLwotCXNjLT5zY19pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAorCXNjLT5pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAogCQl8IEFUSDlLX0lOVF9SWEVPTCB8IEFUSDlLX0lOVF9SWE9STgogCQl8IEFUSDlLX0lOVF9GQVRBTCB8IEFUSDlLX0lOVF9HTE9CQUw7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQotCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKIAotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9DU1Q7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0NTVDsKIAotCS8qCi0JICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KLQkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KLQkgKi8KLQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgICAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9NSUI7Ci0JLyoKLQkgKiBTb21lIGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgVElNIElFIGFuZCBmaXJlcyBhbgotCSAqIGludGVycnVwdCB3aGVuIHRoZSBUSU0gYml0IGlzIHNldC4gIEZvciBoYXJkd2FyZQotCSAqIHRoYXQgZG9lcywgaWYgbm90IG92ZXJyaWRkZW4gYnkgY29uZmlndXJhdGlvbiwKLQkgKiBlbmFibGUgdGhlIFRJTSBpbnRlcnJ1cHQgd2hlbiBvcGVyYXRpbmcgYXMgc3RhdGlvbi4KLQkgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0pICYmCi0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgotCSAgICAhc2MtPnNjX2NvbmZpZy5zd0JlYWNvblByb2Nlc3MpCi0JCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfVElNOwotCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoaW5pdF9jaGFubmVsKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfSU5WQUxJRDsKIAogCS8qIERpc2FibGUgQk1JU1MgaW50ZXJydXB0IHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQgKi8KLQlzYy0+c2NfaW1hc2sgJj0gfihBVEg5S19JTlRfU1dCQSB8IEFUSDlLX0lOVF9CTUlTUyk7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+c2NfaW1hc2spOworCXNjLT5pbWFzayAmPSB+KEFUSDlLX0lOVF9TV0JBIHwgQVRIOUtfSU5UX0JNSVNTKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWVycm9yID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKwlyID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKICNlbmRpZgogCi1lcnJvcjoKLQlyZXR1cm4gZXJyb3I7CittdXRleF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgaGRybGVuLCBwYWRzaXplOwogCisJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogVFggaW4gdW5leHBlY3RlZCB3aXBoeSBzdGF0ZSAiCisJCSAgICAgICAiJWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOworCQlnb3RvIGV4aXQ7CisJfQorCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOwogCiAJLyoKQEAgLTIwMTIsNyArMjEyOCw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOwogCi0JaWYgKGF0aF90eF9zdGFydChzYywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjAyNSwzMCArMjE0MSwzOCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9JTkFDVElWRTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQ2xlYW5pbmcgdXBcbiIpOworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJaWYgKGF0aDlrX3dpcGh5X3N0YXJ0ZWQoc2MpKSB7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOyAvKiBhbm90aGVyIHdpcGh5IHN0aWxsIGluIHVzZSAqLworCX0KIAogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKIAogCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCWF0aF9kcmFpbnR4cShzYywgZmFsc2UpOworCQlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwogCQlhdGhfc3RvcHJlY3Yoc2MpOwogCQlhdGg5a19od19waHlfZGlzYWJsZShzYy0+c2NfYWgpOwogCX0gZWxzZQogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKICNlbmRpZgogCS8qIGRpc2FibGUgSEFMIGFuZCBwdXQgaC93IHRvIHNsZWVwICovCkBAIC0yMDU3LDEzNiArMjE4MSwyMjQgQEAKIAogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCWludCByZXQgPSAwOwogCi0JLyogU3VwcG9ydCBvbmx5IHZhcCBmb3Igbm93ICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAotCWlmIChzYy0+c2NfbnZhcHMpCi0JCXJldHVybiAtRU5PQlVGUzsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spICYmCisJICAgIHNjLT5udmlmcyA+IDApIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoY29uZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7Ci0JCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FQOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJaWYgKHNjLT5uYmNudmlmcyA+PSBBVEhfQkNCVUYpIHsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWNfb3Btb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJJbnRlcmZhY2UgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgY29uZi0+dHlwZSk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIGEgVkFQIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOwogCi0JLyogU2V0IHRoZSBWQVAgb3Btb2RlICovCisJLyogU2V0IHRoZSBWSUYgb3Btb2RlICovCiAJYXZwLT5hdl9vcG1vZGUgPSBpY19vcG1vZGU7CiAJYXZwLT5hdl9ic2xvdCA9IC0xOwogCi0JaWYgKGljX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzYy0+c2NfYWgsIDEpOworCXNjLT5udmlmcysrOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBjb25mLT52aWY7Ci0Jc2MtPnNjX252YXBzKys7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJYXRoOWtfc2V0X2Jzc2lkX21hc2soaHcpOworCisJaWYgKHNjLT5udmlmcyA+IDEpCisJCWdvdG8gb3V0OyAvKiBza2lwIGdsb2JhbCBzZXR0aW5ncyBmb3Igc2Vjb25kYXJ5IHZpZiAqLworCisJaWYgKGljX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KHNjLT5zY19haCwgMSk7CisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CisJfQogCiAJLyogU2V0IHRoZSBkZXZpY2Ugb3Btb2RlICovCi0Jc2MtPnNjX2FoLT5haF9vcG1vZGUgPSBpY19vcG1vZGU7CisJc2MtPnNjX2FoLT5vcG1vZGUgPSBpY19vcG1vZGU7CisKKwkvKgorCSAqIEVuYWJsZSBNSUIgaW50ZXJydXB0cyB3aGVuIHRoZXJlIGFyZSBoYXJkd2FyZSBwaHkgY291bnRlcnMuCisJICogTm90ZSB3ZSBvbmx5IGRvIHRoaXMgKGF0IHRoZSBtb21lbnQpIGZvciBzdGF0aW9uIG1vZGUuCisJICovCisJaWYgKChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSkKKwkJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfTUlCOworCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RTRk9PUjsKKwl9CisKKwkvKgorCSAqIFNvbWUgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBUSU0gSUUgYW5kIGZpcmVzIGFuCisJICogaW50ZXJydXB0IHdoZW4gdGhlIFRJTSBiaXQgaXMgc2V0LiAgRm9yIGhhcmR3YXJlCisJICogdGhhdCBkb2VzLCBpZiBub3Qgb3ZlcnJpZGRlbiBieSBjb25maWd1cmF0aW9uLAorCSAqIGVuYWJsZSB0aGUgVElNIGludGVycnVwdCB3aGVuIG9wZXJhdGluZyBhcyBzdGF0aW9uLgorCSAqLworCWlmICgoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRU5IQU5DRURQTSkgJiYKKwkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIXNjLT5jb25maWcuc3dCZWFjb25Qcm9jZXNzKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTTsKKworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAogCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIFRPRE86IGlzIHRoaXMgYSBzdWl0YWJsZSBwbGFjZSB0byBzdGFydCBBTkkgZm9yIEFQIG1vZGU/ICovCiAJCS8qIFN0YXJ0IEFOSSAqLwotCQltb2RfdGltZXIoJnNjLT5zY19hbmkudGltZXIsCisJCW1vZF90aW1lcigmc2MtPmFuaS50aW1lciwKIAkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKIAl9CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKKwlpbnQgaTsKIAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEludGVyZmFjZVxuIik7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogU3RvcCBBTkkgKi8KLQlkZWxfdGltZXJfc3luYygmc2MtPnNjX2FuaS50aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnNjLT5hbmkudGltZXIpOwogCiAJLyogUmVjbGFpbSBiZWFjb24gcmVzb3VyY2VzICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgIHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBOVUxMOwotCXNjLT5zY19udmFwcy0tOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKKwkJaWYgKHNjLT5iZWFjb24uYnNsb3RbaV0gPT0gY29uZi0+dmlmKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHZpZiBoYWQgYWxsb2NhdGVkIGJlYWNvbiAiCisJCQkgICAgICAgInNsb3RcbiIsIF9fZnVuY19fKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwkJfQorCX0KKworCXNjLT5udmlmcy0tOworCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMIHwKLQkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVCkpIHsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZiAoKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpID09IDApIHsKKwkJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fQVdBS0UpOworCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlpZiAoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgeworCQkJCXNjLT5pbWFzayAmPSB+QVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwotCQlpbnQgcG9zOworCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CisKKwkJYXBoeS0+Y2hhbl9pZHggPSBwb3M7CisJCWFwaHktPmNoYW5faXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCWlmIChhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTiB8fAorCQkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBEbyBub3QgY2hhbmdlIG9wZXJhdGlvbmFsIGNoYW5uZWwgYmFzZWQgb24gYSBwYXVzZWQKKwkJCSAqIHdpcGh5IGNoYW5nZXMuCisJCQkgKi8KKwkJCWdvdG8gc2tpcF9jaGFuX2NoYW5nZTsKKwkJfQogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAotCQlwb3MgPSBhdGhfZ2V0X2NoYW5uZWwoc2MsIGN1cmNoYW4pOwotCQlpZiAocG9zID09IC0xKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwKLQkJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KKwkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKLQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCQlzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10uY2hhbm1vZGUgPQotCQkJKGN1cmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCQkJQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOworCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgY29uZl9pc19odChjb25mKSk7CiAKLQkJaWYgKGNvbmYtPmh0LmVuYWJsZWQpIHsKLQkJCWlmIChjb25mLT5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTIHx8Ci0JCQkgICAgY29uZi0+aHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCi0JCQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwNDA7Ci0KLQkJCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCQkJYXRoX2dldF9leHRjaGFubW9kZShzYywgY3VyY2hhbiwKLQkJCQkJCSAgICBjb25mLT5odC5jaGFubmVsX3R5cGUpOwotCQl9Ci0KLQkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmYtPmh0LmVuYWJsZWQpOwotCi0JCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10pIDwgMCkgeworCQlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCitza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQotCQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKworCS8qCisJICogVGhlIEhXIFRTRiBoYXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgYmVhY29uIGludGVydmFsIGNoYW5nZXMuCisJICogV2Ugc2V0IHRoZSBmbGFnIGhlcmUsIGFuZCBhdGhfYmVhY29uX2NvbmZpZ19hcCgpIHdvdWxkIHRha2UgdGhpcworCSAqIGludG8gYWNjb3VudCB3aGVuIGl0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIHN1YnNlcXVlbnQKKwkgKiBjb25maWdfaW50ZXJmYWNlKCkgY2FsbCAtIHdpdGggSUZDQ19CRUFDT04gaW4gdGhlIGNoYW5nZWQgZmllbGQuCisJICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE5NCwxOSArMjQwNiwyNCBAQAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJdTMyIHJmaWx0ID0gMDsKIAlpbnQgZXJyb3IsIGk7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogVE9ETzogTmVlZCB0byBkZWNpZGUgd2hpY2ggaHcgb3Btb2RlIHRvIHVzZSBmb3IgbXVsdGktaW50ZXJmYWNlCiAJICogY2FzZXMgKi8KIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJICAgIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7Ci0JCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoYWgsIHNjLT5zY19teWFkZHIsIDApOworCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwkJc2MtPmN1cmFpZCA9IDA7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQkvKiBSZXF1ZXN0IGZ1bGwgcmVzZXQgdG8gZ2V0IGh3IG9wbW9kZSBjaGFuZ2VkIHByb3Blcmx5ICovCiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwogCX0KQEAgLTIyMTYsMTggKzI0MzMsMTkgQEAKIAkJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQkvKiBTZXQgQlNTSUQgKi8KLQkJCW1lbWNweShzYy0+c2NfY3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCQlzYy0+c2NfY3VyYWlkID0gMDsKLQkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoLCBzYy0+c2NfY3VyYnNzaWQsCi0JCQkJCSAgICAgICBzYy0+c2NfY3VyYWlkKTsKKwkJCW1lbWNweShzYy0+Y3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQltZW1jcHkoYXZwLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJCXNjLT5jdXJhaWQgPSAwOworCQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYyk7CiAKIAkJCS8qIFNldCBhZ2dyZWdhdGlvbiBwcm90ZWN0aW9uIG1vZGUgcGFyYW1ldGVycyAqLwotCQkJc2MtPnNjX2NvbmZpZy5hdGhfYWdncl9wcm90ID0gMDsKKwkJCXNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCA9IDA7CiAKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAogCQkJCSJSWCBmaWx0ZXIgMHgleCBic3NpZCAlcE0gYWlkIDB4JXhcbiIsCi0JCQkJcmZpbHQsIHNjLT5zY19jdXJic3NpZCwgc2MtPnNjX2N1cmFpZCk7CisJCQkJcmZpbHQsIHNjLT5jdXJic3NpZCwgc2MtPmN1cmFpZCk7CiAKIAkJCS8qIG5lZWQgdG8gcmVjb25maWd1cmUgdGhlIGJlYWNvbiAqLwogCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TIDsKQEAgLTIyMzgsMjQgKzI0NTYsMzAgQEAKIAkJfQogCX0KIAotCWlmICgoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikgJiYKLQkgICAgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8Ci0JICAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSkpIHsKLQkJLyoKLQkJICogQWxsb2NhdGUgYW5kIHNldHVwIHRoZSBiZWFjb24gZnJhbWUuCi0JCSAqCi0JCSAqIFN0b3AgYW55IHByZXZpb3VzIGJlYWNvbiBETUEuICBUaGlzIG1heSBiZQotCQkgKiBuZWNlc3NhcnksIGZvciBleGFtcGxlLCB3aGVuIGFuIGlic3MgbWVyZ2UKLQkJICogY2F1c2VzIHJlY29uZmlndXJhdGlvbjsgd2UgbWF5IGJlIGNhbGxlZAotCQkgKiB3aXRoIGJlYWNvbiB0cmFuc21pc3Npb24gYWN0aXZlLgotCQkgKi8KLQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAoKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHx8CisJCSAgICAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEICYmCisJCSAgICAgY29uZi0+ZW5hYmxlX2JlYWNvbikpIHsKKwkJCS8qCisJCQkgKiBBbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGJlYWNvbiBmcmFtZS4KKwkJCSAqCisJCQkgKiBTdG9wIGFueSBwcmV2aW91cyBiZWFjb24gRE1BLiAgVGhpcyBtYXkgYmUKKwkJCSAqIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gaWJzcyBtZXJnZQorCQkJICogY2F1c2VzIHJlY29uZmlndXJhdGlvbjsgd2UgbWF5IGJlIGNhbGxlZAorCQkJICogd2l0aCBiZWFjb24gdHJhbnNtaXNzaW9uIGFjdGl2ZS4KKwkJCSAqLworCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAotCQllcnJvciA9IGF0aF9iZWFjb25fYWxsb2Moc2MsIDApOwotCQlpZiAoZXJyb3IgIT0gMCkKLQkJCXJldHVybiBlcnJvcjsKKwkJCWVycm9yID0gYXRoX2JlYWNvbl9hbGxvYyhhcGh5LCB2aWYpOworCQkJaWYgKGVycm9yICE9IDApIHsKKwkJCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQogCi0JCWF0aF9iZWFjb25fc3luYyhzYywgMCk7CisJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgdmlmKTsKKwkJfQogCX0KIAogCS8qIENoZWNrIGZvciBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/ICovCkBAIC0yMjY0LDEzICsyNDg4LDE1IEBACiAJCQlpZiAoYXRoOWtfaHdfa2V5aXN2YWxpZChzYy0+c2NfYWgsICh1MTYpaSkpCiAJCQkJYXRoOWtfaHdfa2V5c2V0bWFjKHNjLT5zY19haCwKIAkJCQkJCSAgICh1MTYpaSwKLQkJCQkJCSAgIHNjLT5zY19jdXJic3NpZCk7CisJCQkJCQkgICBzYy0+Y3VyYnNzaWQpOwogCX0KIAogCS8qIE9ubHkgbGVnYWN5IElCU1MgZm9yIG5vdyAqLwogCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCAwKTsKIAorCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMjg5LDcgKzI1MTUsOCBAQAogCQkJCSAgIGludCBtY19jb3VudCwKIAkJCQkgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXUzMiByZmlsdDsKIAogCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJTFRFUlM7CkBAIC0yMjk5LDExICsyNTI2LDYgQEAKIAlyZmlsdCA9IGF0aF9jYWxjcnhmaWx0ZXIoc2MpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKHNjLT5zY19haCwgcmZpbHQpOwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgYXRoX2JjYXN0X21hYywgMCk7Ci0JfQotCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCBzYy0+cngucnhmaWx0ZXIpOwogfQogCkBAIC0yMzEyLDcgKzI1MzQsOCBAQAogCQkJICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUQV9OT1RJRllfQUREOgpAQCAtMjMyNiwxNyArMjU0OSwxOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJIHUxNiBxdWV1ZSwKK3N0YXRpYyBpbnQgYXRoOWtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcmV0ID0gMCwgcW51bTsKIAogCWlmIChxdWV1ZSA+PSBXTUVfTlVNX0FDKQogCQlyZXR1cm4gMDsKIAorCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisKIAlxaS50cWlfYWlmcyA9IHBhcmFtcy0+YWlmczsKIAlxaS50cWlfY3dtaW4gPSBwYXJhbXMtPmN3X21pbjsKIAlxaS50cWlfY3dtYXggPSBwYXJhbXMtPmN3X21heDsKQEAgLTIzNTMsMjkgKzI1NzgsMzkgQEAKIAlpZiAocmV0KQogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFhRIFVwZGF0ZSBmYWlsZWRcbiIpOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdGg5a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJIGNvbnN0IHU4ICpsb2NhbF9hZGRyLAotCQkJIGNvbnN0IHU4ICphZGRyLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCisJCXJldHVybiAtRU5PU1BDOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc193YWtldXAoc2MpOwogCURQUklOVEYoc2MsIEFUSF9EQkdfS0VZQ0FDSEUsICJTZXQgSFcgS2V5XG4iKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTRVRfS0VZOgotCQlyZXQgPSBhdGhfa2V5X2NvbmZpZyhzYywgYWRkciwga2V5KTsKKwkJcmV0ID0gYXRoX2tleV9jb25maWcoc2MsIHZpZiwgc3RhLCBrZXkpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCWtleS0+aHdfa2V5X2lkeCA9IHJldDsKIAkJCS8qIHB1c2ggSVYgYW5kIE1pY2hhZWwgTUlDIGdlbmVyYXRpb24gdG8gc3RhY2sgKi8KIAkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwogCQkJaWYgKGtleS0+YWxnID09IEFMR19US0lQKQogCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7CisJCQlpZiAoc2MtPnNjX2FoLT5zd19tZ210X2NyeXB0byAmJiBrZXktPmFsZyA9PSBBTEdfQ0NNUCkKKwkJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOwogCQkJcmV0ID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTIzODYsNiArMjYyMSw5IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM5NCw3ICsyNjMyLDEwIEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCQkJICAgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIFBSRUFNQkxFICVkXG4iLApAQCAtMjQyMCwzMyArMjY2MSw1MCBAQAogCQkJYnNzX2NvbmYtPmFzc29jKTsKIAkJYXRoOWtfYnNzX2Fzc29jX2luZm8oc2MsIHZpZiwgYnNzX2NvbmYpOwogCX0KKworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIAogc3RhdGljIHU2NCBhdGg5a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXU2NCB0c2Y7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKLQl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAogCXJldHVybiB0c2Y7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX2h3X3NldHRzZjY0KHNjLT5zY19haCwgdHNmKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIGF0aDlrX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAotCWF0aDlrX2h3X3Jlc2V0X3RzZihhaCk7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19od19yZXNldF90c2Yoc2MtPnNjX2FoKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQorCQkJICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewpAQCAtMjQ3Miw3ICsyNzMwLDcgQEAKIAogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKGh3LCBzdGEtPmFkZHIsIHRpZCk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1JFU1VNRToKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKIAkJYXRoX3R4X2FnZ3JfcmVzdW1lKHNjLCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNDgyLDcgKzI3NDAsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzID0geworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCisJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKKwkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfU0NBTjsKKwlhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHNjLCBhcGh5KTsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfU0NBTk5JTkc7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCitzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCiAJLnN0b3AgCQkgICAgPSBhdGg5a19zdG9wLApAQCAtMjQ5Niw4ICsyNzg4LDExIEBACiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCisJLnNldF90c2YgCSAgICA9IGF0aDlrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgICAgICA9IGF0aDlrX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUgICA9IGF0aDlrX3N3X3NjYW5fY29tcGxldGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTI1MjYsNyArMjgyMSw3IEBACiAvKgogICogUmV0dXJuIHRoZSBNQUMvQkIgbmFtZS4gIj8/Pz8iIGlzIHJldHVybmVkIGlmIHRoZSBNQUMvQkIgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfbWFjX2JiX25hbWUodTMyIG1hY19iYl92ZXJzaW9uKQogewogCWludCBpOwpAQCAtMjU0Myw3ICsyODM4LDcgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIFJGIG5hbWUuICI/Pz8/IiBpcyByZXR1cm5lZCBpZiB0aGUgUkYgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbikKIHsKIAlpbnQgaTsKQEAgLTI1NTcsMjU0ICsyODUyLDYyIEBACiAJcmV0dXJuICI/Pz8/IjsKIH0KIAotc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JdTggY3N6OwotCXUzMiB2YWw7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9ICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7Ci0JfQotCi0JcmV0ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBjb25zaXN0ZW50ICIKLQkJCSJETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gYmFkOwotCX0KLQotCS8qCi0JICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cwotCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmY3N6KTsKLQlpZiAoY3N6ID09IDApIHsKLQkJLyoKLQkJICogTGludXggMi40LjE4IChhdCBsZWFzdCkgd3JpdGVzIHRoZSBjYWNoZSBsaW5lIHNpemUKLQkJICogcmVnaXN0ZXIgYXMgYSAxNi1iaXQgd2lkZSByZWdpc3RlciB3aGljaCBpcyB3cm9uZy4KLQkJICogV2UgbXVzdCBoYXZlIHRoaXMgc2V0dXAgcHJvcGVybHkgZm9yIHJ4IGJ1ZmZlcgotCQkgKiBETUEgdG8gd29yayBzbyBmb3JjZSBhIHJlYXNvbmFibGUgdmFsdWUgaGVyZSBpZiBpdAotCQkgKiBjb21lcyB1cCB6ZXJvLgotCQkgKi8KLQkJY3N6ID0gTDFfQ0FDSEVfQllURVMgLyBzaXplb2YodTMyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIGNzeik7Ci0JfQotCS8qCi0JICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiBsYXRlbmN5IHRpbWVyIHlpZWxkcyBwb29yIHJlc3VsdHMsCi0JICogc2V0IGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IG90aGVyIHN5c3RlbXMuIEl0IG1heSBiZSB3b3J0aAotCSAqIHR3ZWFraW5nIHRoaXMgc2V0dGluZyBtb3JlLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhhOCk7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCS8qCi0JICogRGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAotCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOwotCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiYXRoOWsiKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSBtZW1vcnkgcmVnaW9uIHJlc2VydmUgZXJyb3JcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0kgbWVtb3J5IG1hcCBlcnJvclxuIikgOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDE7Ci0JfQotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKLQkJZ290byBiYWQyOwotCX0KLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwotCi0Jc2MgPSBody0+cHJpdjsKLQlzYy0+aHcgPSBodzsKLQlzYy0+cGRldiA9IHBkZXY7Ci0Jc2MtPm1lbSA9IG1lbTsKLQotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkMzsKLQl9Ci0KLQkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCi0KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDQ7Ci0JfQotCi0JYWggPSBzYy0+c2NfYWg7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKLQkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmFoX21hY1ZlcnNpb24pLAotCSAgICAgICBhaC0+YWhfbWFjUmV2LAotCSAgICAgICBhdGhfcmZfbmFtZSgoYWgtPmFoX2FuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCi0JICAgICAgIGFoLT5haF9waHlSZXYsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKLQotCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGhfZGV0YWNoKHNjKTsKLQlpZiAocGRldi0+aXJxKQotCQlmcmVlX2lycShwZGV2LT5pcnEsIHNjKTsKLQlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IGF0aF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnJmX2tpbGwucmZraWxsX3BvbGwpOwotI2VuZGlmCi0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JdTMyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQkvKgotCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KLQkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCi0JICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZQotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCAmdmFsKTsKLQlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAotCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCS8qCi0JICogY2hlY2sgdGhlIGgvdyByZmtpbGwgc3RhdGUgb24gcmVzdW1lCi0JICogYW5kIHN0YXJ0IHRoZSByZmtpbGwgcG9sbCB0aW1lcgotCSAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGhfcGNpX2lkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aF9wY2lfZHJpdmVyID0gewotCS5uYW1lICAgICAgID0gImF0aDlrIiwKLQkuaWRfdGFibGUgICA9IGF0aF9wY2lfaWRfdGFibGUsCi0JLnByb2JlICAgICAgPSBhdGhfcGNpX3Byb2JlLAotCS5yZW1vdmUgICAgID0gYXRoX3BjaV9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgICAgPSBhdGhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSBhdGhfcGNpX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRoX3BjaSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXRoOWtfaW5pdCh2b2lkKQogewogCWludCBlcnJvcjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2X2luZm8sIEFUSF9QQ0lfVkVSU0lPTik7Ci0KIAkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCiAJZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKGVycm9yICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLAorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAogCQkJZXJyb3IpOwotCQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKSA8IDApIHsKKwllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkJImF0aF9wY2k6IE5vIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7Ci0JCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCQkiYXRoOWs6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyByb290OiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJZ290byBlcnJfcmF0ZV91bnJlZ2lzdGVyOworCX0KKworCWVycm9yID0gYXRoX3BjaV9pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogTm8gUENJIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVtb3ZlX3Jvb3Q7CisJfQorCisJZXJyb3IgPSBhdGhfYWhiX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX2V4aXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChpbml0X2F0aF9wY2kpOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hdGhfcGNpKHZvaWQpCi17CisgZXJyX3BjaV9leGl0OgorCWF0aF9wY2lfZXhpdCgpOworCisgZXJyX3JlbW92ZV9yb290OgorCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisgZXJyX3JhdGVfdW5yZWdpc3RlcjoKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKKyBlcnJfb3V0OgorCXJldHVybiBlcnJvcjsKK30KK21vZHVsZV9pbml0KGF0aDlrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQoreworCWF0aF9haGJfZXhpdCgpOworCWF0aF9wY2lfZXhpdCgpOworCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwogfQotbW9kdWxlX2V4aXQoZXhpdF9hdGhfcGNpKTsKK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGJjNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGhfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyMykgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyNCkgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyNykgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyOSkgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQSkgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQikgfSwgLyogUENJLUUgKi8KKwl7IDAgfQorfTsKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJdTggdTh0bXA7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZSh0b19wY2lfZGV2KHNjLT5kZXYpLCBQQ0lfQ0FDSEVfTElORV9TSVpFLAorCQkJICAgICAodTggKikmdTh0bXApOworCSpjc3ogPSAoaW50KXU4dG1wOworCisJLyoKKwkgKiBUaGlzIGNoZWNrIHdhcyBwdXQgaW4gdG8gYXZvaWQgInVucGxlc2FudCIgY29uc2VxdWVuY2VzIGlmCisJICogdGhlIGJvb3Ryb20gaGFzIG5vdCBmdWxseSBpbml0aWFsaXplZCBhbGwgUENJIGRldmljZXMuCisJICogU29tZXRpbWVzIHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgbm90IHNldAorCSAqLworCisJaWYgKCpjc3ogPT0gMCkKKwkJKmNzeiA9IERFRkFVTFRfQ0FDSEVMSU5FID4+IDI7ICAgLyogVXNlIHRoZSBkZWZhdWx0IHNpemUgKi8KK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihzYy0+ZGV2KTsKKworCXBjaV9pb3VubWFwKHBkZXYsIHNjLT5tZW0pOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGF0aF9wY2lfZWVwcm9tX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKK3sKKwkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCisJaWYgKCFhdGg5a19od193YWl0KGFoLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwLAorCQkJICAgQUhfV0FJVF9USU1FT1VUKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBNUyhSRUdfUkVBRChhaCwgQVJfRUVQUk9NX1NUQVRVU19EQVRBKSwKKwkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1ZBTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfcGNpX2J1c19vcHMgPSB7CisJLnJlYWRfY2FjaGVzaXplID0gYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZSwKKwkuY2xlYW51cCA9IGF0aF9wY2lfY2xlYW51cCwKKwkuZWVwcm9tX3JlYWQgPSBhdGhfcGNpX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwl1OCBjc3o7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGF0aF9odyAqYWg7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlnb3RvIGJhZDsKKwl9CisKKwlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIGNvbnNpc3RlbnQgIgorCQkJIkRNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBiYWQ7CisJfQorCisJLyoKKwkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCisJICogc3RydWN0dXJlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjc3opOworCWlmIChjc3ogPT0gMCkgeworCQkvKgorCQkgKiBMaW51eCAyLjQuMTggKGF0IGxlYXN0KSB3cml0ZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZQorCQkgKiByZWdpc3RlciBhcyBhIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIHdoaWNoIGlzIHdyb25nLgorCQkgKiBXZSBtdXN0IGhhdmUgdGhpcyBzZXR1cCBwcm9wZXJseSBmb3IgcnggYnVmZmVyCisJCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0CisJCSAqIGNvbWVzIHVwIHplcm8uCisJCSAqLworCQljc3ogPSBMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKKwl9CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIGxhdGVuY3kgdGltZXIgeWllbGRzIHBvb3IgcmVzdWx0cywKKwkgKiBzZXQgaXQgdG8gdGhlIHZhbHVlIHVzZWQgYnkgb3RoZXIgc3lzdGVtcy4gSXQgbWF5IGJlIHdvcnRoCisJICogdHdlYWtpbmcgdGhpcyBzZXR0aW5nIG1vcmUuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsICJhdGg5ayIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFkOworCX0KKworCW1lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1lbSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSSBtZW1vcnkgbWFwIGVycm9yXG4iKSA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkMTsKKwl9CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKworCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGhfcGNpOiBubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWdvdG8gYmFkMjsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIChhcGh5ICsgMSk7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5wcmlfd2lwaHkgPSBhcGh5OworCXNjLT5odyA9IGh3OworCXNjLT5kZXYgPSAmcGRldi0+ZGV2OworCXNjLT5tZW0gPSBtZW07CisJc2MtPmJ1c19vcHMgPSAmYXRoX3BjaV9idXNfb3BzOworCisJaWYgKGF0aF9hdHRhY2goaWQtPmRldmljZSwgc2MpICE9IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWQzOworCX0KKworCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aF9pc3IsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwKKwkJCXdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkNDsKKwl9CisKKwlzYy0+aXJxID0gcGRldi0+aXJxOworCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKKwkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAorCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiksCisJICAgICAgIGFoLT5od192ZXJzaW9uLm1hY1JldiwKKwkgICAgICAgYXRoX3JmX25hbWUoKGFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCisJICAgICAgIGFoLT5od192ZXJzaW9uLnBoeVJldiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbWVtLCBwZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CitiYWQ0OgorCWF0aF9kZXRhY2goc2MpOworYmFkMzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CitiYWQyOgorCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CitiYWQxOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKK2JhZDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfY2xlYW51cChzYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhdGhfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCk7CisjZW5kaWYKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlpbnQgZXJyOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qIEVuYWJsZSBMRUQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCisJLyoKKwkgKiBjaGVjayB0aGUgaC93IHJma2lsbCBzdGF0ZSBvbiByZXN1bWUKKwkgKiBhbmQgc3RhcnQgdGhlIHJma2lsbCBwb2xsIHRpbWVyCisJICovCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aF9wY2lfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRoX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiYXRoOWsiLAorCS5pZF90YWJsZSAgID0gYXRoX3BjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgICA9IGF0aF9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgPSBhdGhfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICA9IGF0aF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aF9wY2lfcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworfTsKKworaW50IGF0aF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CisKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCmluZGV4IDc2Njk4MmEuLjhiY2JhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMjIgKzE0LDE3IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiB2b2lkCi1hdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG1vZGVzSW5kZXgsIHUzMiBmcmVxSW5kZXgsCithdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbW9kZXNJbmRleCwgdTMyIGZyZXFJbmRleCwKIAkJICAgIGludCByZWdXcml0ZXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKKwlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKIH0KIAogYm9vbAotYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2F0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgY2hhbm5lbFNlbCA9IDA7CiAJdTMyIGJNb2RlU3ludGggPSAwOwpAQCAtOTUsMTUgKzkwLDE0IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWSgweDM3KSwgcmVnMzIpOwogCi0JYWgtPmFoX2N1cmNoYW4gPSBjaGFuOwotCi0JQUg1NDE2KGFoKS0+YWhfY3VyY2hhblJhZEluZGV4ID0gLTE7CisJYWgtPmN1cmNoYW4gPSBjaGFuOworCWFoLT5jdXJjaGFuX3JhZF9pbmRleCA9IC0xOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wKLWF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCithdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTE2IGJNb2RlLCBmcmFjTW9kZSwgYU1vZGVSZWZTZWwgPSAwOwpAQCAtMTM4LDIwICsxMzIsMjcgQEAKIAkJYk1vZGUgPSAwOwogCQlmcmFjTW9kZSA9IDA7CiAKLQkJaWYgKChmcmVxICUgMjApID09IDApIHsKLQkJCWFNb2RlUmVmU2VsID0gMzsKLQkJfSBlbHNlIGlmICgoZnJlcSAlIDEwKSA9PSAwKSB7Ci0JCQlhTW9kZVJlZlNlbCA9IDI7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0ZSQUNfTl81RykpIHsKKwkJY2FzZSAwOgorCQkJaWYgKChmcmVxICUgMjApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDM7CisJCQl9IGVsc2UgaWYgKChmcmVxICUgMTApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDI7CisJCQl9CisJCQlpZiAoYU1vZGVSZWZTZWwpCisJCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJZGVmYXVsdDoKIAkJCWFNb2RlUmVmU2VsID0gMDsKLQogCQkJZnJhY01vZGUgPSAxOwogCQkJcmVmRGl2QSA9IDE7CiAJCQljaGFubmVsU2VsID0gKGZyZXEgKiAweDgwMDApIC8gMTU7CiAKIAkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1NZTlRIOSwKIAkJCQkgICAgICBBUl9BTl9TWU5USDlfUkVGRElWQSwgcmVmRGl2QSk7CisKIAkJfQorCiAJCWlmICghZnJhY01vZGUpIHsKIAkJCW5kaXYgPSAoZnJlcSAqIChyZWZEaXZBID4+IGFNb2RlUmVmU2VsKSkgLyA2MDsKIAkJCWNoYW5uZWxTZWwgPSBuZGl2ICYgMHgxZmY7CkBAIC0xNjYsOSArMTY3LDggQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZX1NZTlRIX0NPTlRST0wsIHJlZzMyKTsKIAotCWFoLT5haF9jdXJjaGFuID0gY2hhbjsKLQotCUFINTQxNihhaCktPmFoX2N1cmNoYW5SYWRJbmRleCA9IC0xOworCWFoLT5jdXJjaGFuID0gY2hhbjsKKwlhaC0+Y3VyY2hhbl9yYWRfaW5kZXggPSAtMTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMjAxLDExICsyMDEsOSBAQAogfQogCiBib29sCi1hdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkgICAgIHUxNiBtb2Rlc0luZGV4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAl1MzIgZWVwTWlub3JSZXY7CiAJdTMyIG9iNUdIeiA9IDAsIGRiNUdIeiA9IDA7CiAJdTMyIG9iMkdIeiA9IDAsIGRiMkdIeiA9IDA7CkBAIC0yMTQsMTYxICsyMTIsMTU2IEBACiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCiAJCXJldHVybiB0cnVlOwogCi0JZWVwTWlub3JSZXYgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKTsKKwllZXBNaW5vclJldiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEsICZhaHAtPmFoX2luaUJhbmswLCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMERhdGEsICZhaC0+aW5pQmFuazAsIDEpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSwgJmFocC0+YWhfaW5pQmFuazEsIDEpOworCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhLCAmYWhwLT5haF9pbmlCYW5rMiwgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazJEYXRhLCAmYWgtPmluaUJhbmsyLCAxKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEsICZhaHAtPmFoX2luaUJhbmszLAorCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmszRGF0YSwgJmFoLT5pbmlCYW5rMywKIAkJICAgICAgbW9kZXNJbmRleCk7CiAJewogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQmFuazZUUEMuaWFfcm93czsgaSsrKSB7Ci0JCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YVtpXSA9Ci0JCQkgICAgSU5JX1JBKCZhaHAtPmFoX2luaUJhbms2VFBDLCBpLCBtb2Rlc0luZGV4KTsKKwkJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlCYW5rNlRQQy5pYV9yb3dzOyBpKyspIHsKKwkJCWFoLT5hbmFsb2dCYW5rNkRhdGFbaV0gPQorCQkJICAgIElOSV9SQSgmYWgtPmluaUJhbms2VFBDLCBpLCBtb2Rlc0luZGV4KTsKIAkJfQogCX0KIAogCWlmIChlZXBNaW5vclJldiA+PSAyKSB7CiAJCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCW9iMkdIeiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PQl8yKTsKLQkJCWRiMkdIeiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9EQl8yKTsKLQkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhLAorCQkJb2IyR0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PQl8yKTsKKwkJCWRiMkdIeiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfREJfMik7CisJCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaC0+YW5hbG9nQmFuazZEYXRhLAogCQkJCQkJICAgb2IyR0h6LCAzLCAxOTcsIDApOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaC0+YW5hbG9nQmFuazZEYXRhLAogCQkJCQkJICAgZGIyR0h6LCAzLCAxOTQsIDApOwogCQl9IGVsc2UgewotCQkJb2I1R0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX09CXzUpOwotCQkJZGI1R0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX0RCXzUpOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlvYjVHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09CXzUpOworCQkJZGI1R0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQl81KTsKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBvYjVHSHosIDMsIDIwMywgMCk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBkYjVHSHosIDMsIDIwMCwgMCk7CiAJCX0KIAl9CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazdEYXRhLCAmYWhwLT5haF9pbmlCYW5rNywgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazdEYXRhLCAmYWgtPmluaUJhbms3LCAxKTsKIAotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYWhwLT5haF9hbmFsb2dCYW5rMERhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazAsIGFoLT5hbmFsb2dCYW5rMERhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYWhwLT5haF9hbmFsb2dCYW5rMURhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFoLT5hbmFsb2dCYW5rMURhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMiwgYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFoLT5hbmFsb2dCYW5rMkRhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazMsIGFoLT5hbmFsb2dCYW5rM0RhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNlRQQywgYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazcsIGFoLT5hbmFsb2dCYW5rN0RhdGEsCiAJCQkgICByZWdXcml0ZXMpOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQKLWF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2F0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazBEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmswRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rMERhdGEpOworCQlhaC0+YW5hbG9nQmFuazBEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazFEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rMURhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rMURhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazFEYXRhKTsKKwkJYWgtPmFuYWxvZ0JhbmsxRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazJEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmsyRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rMkRhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazNEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmszRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rM0RhdGEpOworCQlhaC0+YW5hbG9nQmFuazNEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rNkRhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazZEYXRhKTsKKwkJYWgtPmFuYWxvZ0Jhbms2RGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazZUUENEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazZUUENEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazdEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0Jhbms3RGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rN0RhdGEpOworCQlhaC0+YW5hbG9nQmFuazdEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYWRkYWM1NDE2XzIxICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hZGRhYzU0MTZfMjEpOwotCQlhaHAtPmFoX2FkZGFjNTQxNl8yMSA9IE5VTEw7CisJaWYgKGFoLT5hZGRhYzU0MTZfMjEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YWRkYWM1NDE2XzIxKTsKKwkJYWgtPmFkZGFjNTQxNl8yMSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2Jhbms2VGVtcCAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYmFuazZUZW1wKTsKLQkJYWhwLT5haF9iYW5rNlRlbXAgPSBOVUxMOworCWlmIChhaC0+YmFuazZUZW1wICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmJhbms2VGVtcCk7CisJCWFoLT5iYW5rNlRlbXAgPSBOVUxMOwogCX0KIH0KIAotYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaGFsICphaCwgaW50ICpzdGF0dXMpCitib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9odyAqYWgsIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJYWgtPmFuYWxvZ0JhbmswRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMC5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rMURhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazEuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazJEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmsyLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0JhbmszRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMy5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rNkRhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazYuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazZUUENEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbms2VFBDLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0Jhbms3RGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rNy5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CiAKLQkJYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmswLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmsxLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmsyLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmszLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2VFBDLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms3LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPT0gTlVMTCkgeworCQlpZiAoYWgtPmFuYWxvZ0JhbmswRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazFEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rMkRhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0JhbmszRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazZEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0Jhbms3RGF0YSA9PSBOVUxMKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKIAkJCQkiQ2Fubm90IGFsbG9jYXRlIFJGIGJhbmtzXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYWhwLT5haF9hZGRhYzU0MTZfMjEgPQorCQlhaC0+YWRkYWM1NDE2XzIxID0KIAkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKLQkJCSAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9yb3dzICoKLQkJCSAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9jb2x1bW5zKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChhaHAtPmFoX2FkZGFjNTQxNl8yMSA9PSBOVUxMKSB7CisJCQkgICAgIGFoLT5pbmlBZGRhYy5pYV9yb3dzICoKKwkJCSAgICAgYWgtPmluaUFkZGFjLmlhX2NvbHVtbnMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFoLT5hZGRhYzU0MTZfMjEgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkNhbm5vdCBhbGxvY2F0ZSBhaF9hZGRhYzU0MTZfMjFcbiIpOworCQkJCSJDYW5ub3QgYWxsb2NhdGUgYWRkYWM1NDE2XzIxXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYWhwLT5haF9iYW5rNlRlbXAgPQorCQlhaC0+YmFuazZUZW1wID0KIAkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKLQkJCSAgICAgYWhwLT5haF9pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChhaHAtPmFoX2Jhbms2VGVtcCA9PSBOVUxMKSB7CisJCQkgICAgIGFoLT5pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChhaC0+YmFuazZUZW1wID09IE5VTEwpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJDYW5ub3QgYWxsb2NhdGUgYWhfYmFuazZUZW1wXG4iKTsKKwkJCQkiQ2Fubm90IGFsbG9jYXRlIGJhbms2VGVtcFxuIik7CiAJCQkqc3RhdHVzID0gLUVOT01FTTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMzc4LDI0ICszNzEsMjMgQEAKIH0KIAogdm9pZAotYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2F0aDlrX2h3X2RlY3JlYXNlX2NoYWluX3Bvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgaSwgcmVnV3JpdGVzID0gMDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBiYW5rNlNlbE1hc2s7Ci0JdTMyICpiYW5rNlRlbXAgPSBhaHAtPmFoX2Jhbms2VGVtcDsKKwl1MzIgKmJhbms2VGVtcCA9IGFoLT5iYW5rNlRlbXA7CiAKLQlzd2l0Y2ggKGFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCkgeworCXN3aXRjaCAoYWgtPmRpdmVyc2l0eV9jb250cm9sKSB7CiAJY2FzZSBBVEg5S19BTlRfRklYRURfQToKIAkJYmFuazZTZWxNYXNrID0KLQkJICAgIChhaHAtPgotCQkgICAgIGFoX2FudGVubmFTd2l0Y2hTd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMCA6CisJCSAgICAoYWgtPgorCQkgICAgIGFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8wIDoKIAkJICAgIFJFRFVDRV9DSEFJTl8xOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9COgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFocC0+Ci0JCSAgICAgYWhfYW50ZW5uYVN3aXRjaFN3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8xIDoKKwkJICAgIChhaC0+CisJCSAgICAgYW50ZW5uYV9zd2l0Y2hfc3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzEgOgogCQkgICAgUkVEVUNFX0NIQUlOXzA7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfQU5UX1ZBUklBQkxFOgpAQCAtNDA2LDggKzM5OCw4IEBACiAJCWJyZWFrOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3M7IGkrKykKLQkJYmFuazZUZW1wW2ldID0gYWhwLT5haF9hbmFsb2dCYW5rNkRhdGFbaV07CisJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlCYW5rNi5pYV9yb3dzOyBpKyspCisJCWJhbms2VGVtcFtpXSA9IGFoLT5hbmFsb2dCYW5rNkRhdGFbaV07CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9CQVNFICsgMHhEOCwgYmFuazZTZWxNYXNrKTsKIApAQCAtNDIxLDcgKzQxMyw3IEBACiAJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYmFuazZUZW1wLCAxLCAxLCAyNDYsIDApOwogCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGJhbms2VGVtcCwgMSwgMSwgMjQ3LCAwKTsKIAotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYmFuazZUZW1wLCByZWdXcml0ZXMpOworCVJFR19XUklURV9SRl9BUlJBWSgmYWgtPmluaUJhbms2LCBiYW5rNlRlbXAsIHJlZ1dyaXRlcyk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9CQVNFICsgMHhEOCwgMHgwMDAwMDA1Myk7CiAjaWZkZWYgQUxURVJfU1dJVENICmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCmluZGV4IDNhNDA2YTUuLjBmN2Y4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTcsMTkgKzE3LDE5IEBACiAjaWZuZGVmIFBIWV9ICiAjZGVmaW5lIFBIWV9ICiAKLWJvb2wgYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbAogCQkJCSAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXZvaWQgYXRoOWtfaHdfd3JpdGVfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBtb2Rlc0luZGV4LAordm9pZCBhdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbW9kZXNJbmRleCwKIAkJCSB1MzIgZnJlcUluZGV4LCBpbnQgcmVnV3JpdGVzKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgIHUxNiBtb2Rlc0luZGV4KTsKLXZvaWQgYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19kZWNyZWFzZV9jaGFpbl9wb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkgICAgICBpbnQgKnN0YXR1cyk7CiAKICNkZWZpbmUgQVJfUEhZX0JBU0UgICAgIDB4OTgwMApAQCAtMzg3LDYgKzM4Nyw4IEBACiAKICNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMICAgICAgIDB4QTIwNAogI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfSkFQQU4gMHgwMDAwMDAxMAorI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDSyAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0tfUyAgICAgICAyCiAKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEyMDgKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1RfV0VBS19TSUdfVEhSX0NDSyAgICAgICAgICAweDAwMDAwMDNGCkBAIC00NDQsNiArNDQ2LDMyIEBACiAjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zICAgIDB4MDAzMDAwMDAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzNfUyAgMjAKIAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEUgICAweDAwNDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRV9TIDIyCisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw0ICAgICAgIDB4YTI2NAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfVkFMSUQgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX1ZBTElEX1MgICAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVQgICAgICAgMHgwMDAwMDFGRQorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUX1MgICAgIDEKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDZfMCAgICAgMHhhMjcwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNl8xICAgICAweGIyNzAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFICAgICAweDAzMDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERV9TICAgMjQKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDcgICAgICAgMHhhMjc0CisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiAgICAgMHgwMUY4MDAwMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU5fUyAgIDE5CisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5ICAgICAgIDB4YTI3QworI2RlZmluZSBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0sgICAgICAgIDB4MDAwMDdDMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLX1MgICAgICAxMAorCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOX1RCTDEgICAgICAweGEzMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0dBSU4gICAgICAgICAgICAgICAgICAgICAweDAwMDdGMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOX1MgICAgICAgICAgICAgICAgICAgMTIKKwogI2RlZmluZSBBUl9QSFlfVklUX01BU0syX01fNDZfNjEgMHhhM2EwCiAjZGVmaW5lIEFSX1BIWV9NQVNLMl9NXzMxXzQ1ICAgICAweGEzYTQKICNkZWZpbmUgQVJfUEhZX01BU0syX01fMTZfMzAgICAgIDB4YTNhOApAQCAtNDg1LDYgKzUxMywxMSBAQAogI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCAgICAweDBGQzAwMDAwCiAjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80X1MgIDIyCiAKKy8qIENhcnJpZXIgbGVhayBjYWxpYnJhdGlvbiBjb250cm9sLCBkbyBpdCBhZnRlciBBR0MgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgQVJfUEhZX0NMX0NBTF9DVEwgICAgICAgMHhBMzU4CisjZGVmaW5lIEFSX1BIWV9DTF9DQUxfRU5BQkxFICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUEhZX1BBUkFMTEVMX0NBTF9FTkFCTEUgICAgMHgwMDAwMDAwMQorCiAjZGVmaW5lIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSAgIDB4QTM4QwogI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTYgICAweEEzOTAKIApAQCAtNTMwLDEwICs1NjMsOCBAQAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFUSDlLX0tFWV9YT1IgICAgICAgICAgICAgICAgIDB4YWEKLQogI2RlZmluZSBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkJCQkJCVwKLQkoQUg1NDE2KGFoKS0+YWhfc3RhSWQxRGVmYXVsdHMgJiBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRSkKKwkoKGFoKS0+c3RhX2lkMV9kZWZhdWx0cyAmIEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKQogCiAjZGVmaW5lIEFOVFNXQVBfQUIgMHgwMDAxCiAjZGVmaW5lIFJFRFVDRV9DSEFJTl8wIDB4MDAwMDAwNTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jCmluZGV4IDFiNzFiOTMuLjgyNGNjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVmlkZW81NCBUZWNobm9sb2dpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE1LDE2ICsxNSwxNSBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmFfcmF0ZXRhYmxlID0gewogCTQyLAotCXswfSwKIAl7CiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCiAJCQk1NDAwLCAweDBiLCAweDAwLCAxMiwKIAkJCTAsIDIsIDEsIDAsIDAsIDAsIDAsIDAgfSwKLQkJeyBWQUxJRCwJVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KKwkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsICAweDBmLCAweDAwLCAxOCwKIAkJCTAsIDMsIDEsIDEsIDEsIDEsIDEsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLwpAQCAtMTU4LDcgKzE1Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmdfcmF0ZXRhYmxlID0gewogCTQ2LAotCXswfSwKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzA2LDcgKzMwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYV9yYXRldGFibGUgPSB7CiAJOCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwgLyogNiBNYiAqLwogCQkJNTQwMCwgMHgwYiwgMHgwMCwgKDB4ODB8MTIpLApAQCAtMzQwLDcgKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExZ19yYXRldGFibGUgPSB7CiAJMTIsCi0JezB9LAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzg2LDcgKzM4Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7CiAJNCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCiAJCQk5MDAsIDB4MWIsICAweDAwLCAoMHg4MHwyKSwKQEAgLTYzNiw4ICs2MzEsNyBAQAogc3RhdGljIHU4IGF0aF9yY19yYXRlZmluZF9odChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIGludCBwcm9iZV9hbGxvd2VkLCBpbnQgKmlzX3Byb2JpbmcsCi0JCQkgICAgIGludCBpc19yZXRyeSkKKwkJCSAgICAgaW50ICppc19wcm9iaW5nKQogewogCXUzMiBkdCwgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7CkBAIC03MTksMTMgKzcxMyw2IEBACiAJfQogCiAJcmF0ZSA9IGJlc3RfcmF0ZTsKLQotCS8qIGlmIHdlIGFyZSByZXRyeWluZyBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIG51bWJlcgotCSAqIG9mIG1heCByZXRyaWVzLCB1c2UgdGhlIG1pbiByYXRlIGZvciB0aGUgbmV4dCByZXRyeQotCSAqLwotCWlmIChpc19yZXRyeSkKLQkJcmF0ZSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W21pbmluZGV4XTsKLQogCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKQEAgLTczMywxMyArNzIwLDEyIEBACiAJICogbm9uLW1vbm90aWNpdHkgb2YgMTFnJ3MgcmF0ZSB0YWJsZQogCSAqLwogCi0JaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSAmJiBwcm9iZV9hbGxvd2VkKSB7CisJaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSkgewogCQlyYXRlID0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeTsKIAogCQkvKiBQcm9iZSB0aGUgbmV4dCBhbGxvd2VkIHBoeSBzdGF0ZSAqLwotCQkvKiBGSVhNRTpYWFhYIENoZWNrIHRvIG1ha2Ugc3VyZSByYXRNYXggaXMgY2hlY2tlZCBwcm9wZXJseSAqLwogCQlpZiAoYXRoX3JjX2dldF9uZXh0dmFsaWRfdHhyYXRlKHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdiwgcmF0ZSwgJm5leHRfcmF0ZSkgJiYKKwkJCQkJYXRoX3JjX3ByaXYsIHJhdGUsICZuZXh0X3JhdGUpICYmCiAJCSAgICAobm93X21zZWMgLSBhdGhfcmNfcHJpdi0+cHJvYmVfdGltZSA+CiAJCSAgICAgcmF0ZV90YWJsZS0+cHJvYmVfaW50ZXJ2YWwpICYmCiAJCSAgICAoYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA+PSAxKSkgewpAQCAtNzYxLDE0ICs3NDcsMTcgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgLAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjLAogCQkJCSAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUpCiB7CiAJcmF0ZS0+Y291bnQgPSB0cmllczsKIAlyYXRlLT5pZHggPSByaXg7CiAKLQlpZiAocnRzY3RzZW5hYmxlKQorCWlmICh0eHJjLT5zaG9ydF9wcmVhbWJsZSkKKwkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTsKKwlpZiAodHhyYy0+cnRzIHx8IHJ0c2N0c2VuYWJsZSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwogCWlmIChXTEFOX1JDX1BIWV80MChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKQEAgLTc3OCw2ICs3NjcsNDMgQEAKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3J0c2N0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWludCBpID0gMCwgcml4ID0gMCwgY2l4LCBlbmFibGVfZ19wcm90ZWN0aW9uID0gMDsKKworCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7CisJCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCQlicmVhazsKKwkJfQorCX0KKwljaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uY3RybF9yYXRlOworCisJLyogQWxsIHByb3RlY3Rpb24gZnJhbWVzIGFyZSB0cmFuc21pdGVkIGF0IDJNYi9zIGZvciA4MDIuMTFnLAorCSAqIG90aGVyd2lzZSB3ZSB0cmFuc21pdCB0aGVtIGF0IDFNYi9zICovCisJaWYgKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgIWNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWVuYWJsZV9nX3Byb3RlY3Rpb24gPSAxOworCisJLyoKKwkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKKwkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KKwkgKi8KKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1BST1RFQ1RfRU5BQkxFKSAmJgorCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCisJICAgIChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5ID09IFdMQU5fUkNfUEhZX09GRE0gfHwKKwkgICAgIFdMQU5fUkNfUEhZX0hUKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKSkgeworCQlyYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOworCQljaXggPSByYXRlX3RhYmxlLT5pbmZvW2VuYWJsZV9nX3Byb3RlY3Rpb25dLmN0cmxfcmF0ZTsKKwl9CisKKwl0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPSBjaXg7Cit9CisKIHN0YXRpYyB1OCBhdGhfcmNfcmF0ZV9nZXRpZHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLApAQCAtODA5LDU0ICs4MzUsNTggQEAKIAogc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVmaW5kKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICBpbnQgbnVtX3RyaWVzLCBpbnQgbnVtX3JhdGVzLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywgaW50ICppc19wcm9iZSwKLQkJCSAgICBpbnQgaXNfcmV0cnkpCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKKwlpbnQgaXNfcHJvYmUgPSAwOwogCiAJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQlyaXggPSBhdGhfcmNfcmF0ZWZpbmRfaHQoc2MsIGF0aF9yY19wcml2LCByYXRlX3RhYmxlLCAxLAotCQkJCSBpc19wcm9iZSwgaXNfcmV0cnkpOworCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAotCWlmICgqaXNfcHJvYmUpIHsKKwlpZiAoaXNfcHJvYmUpIHsKIAkJLyogc2V0IG9uZSB0cnkgZm9yIHByb2JlIHJhdGVzLiBGb3IgdGhlCiAJCSAqIHByb2JlcyBkb24ndCBlbmFibGUgcnRzICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCAxLCBucml4LCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKG51bV90cmllcy9udW1fcmF0ZXMpOworCQl0cnlfcGVyX3JhdGUgPSAoQVRIXzExTl9UWE1BWFRSWS80KTsKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsCi0JCQlhdGhfcmNfcHJpdiwgcmF0ZV90YWJsZSwgbnJpeCwgMSwgMCk7Ci0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKKwkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgdHJ5X3Blcl9yYXRlLCBucml4LCAwKTsKKworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAl9IGVsc2UgewotCQl0cnlfcGVyX3JhdGUgPSAobnVtX3RyaWVzL251bV9yYXRlcyk7CisJCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAorCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIG90aGVyIHJhdGVzIGZvciBtdWx0aXJhdGUgcmV0cnkgKi8KLQlmb3IgKCA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCWZvciAoIDsgaSA8IDQ7IGkrKykgewogCQl1OCB0cnlfbnVtOwogCQl1OCBtaW5fcmF0ZTsKIAotCQl0cnlfbnVtID0gKChpICsgMSkgPT0gbnVtX3JhdGVzKSA/Ci0JCQludW1fdHJpZXMgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSBudW1fcmF0ZXMpICYmIDApOworCQl0cnlfbnVtID0gKChpICsgMSkgPT0gNCkgPworCQkJQVRIXzExTl9UWE1BWFRSWSAtICh0cnlfcGVyX3JhdGUgKiBpKSA6IHRyeV9wZXJfcmF0ZSA7CisJCW1pbl9yYXRlID0gKCgoaSArIDEpID09IDQpICYmIDApOwogCiAJCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsIGF0aF9yY19wcml2LAogCQkJCQkgIHJhdGVfdGFibGUsIG5yaXgsIDEsIG1pbl9yYXRlKTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwotCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsCi0JCQkJICAgICAgICZyYXRlc1tpXSwgdHJ5X251bSwgbnJpeCwgMSk7CisJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAorCQkJCSAgICAgICB0cnlfbnVtLCBucml4LCAxKTsKIAl9CiAKIAkvKgpAQCAtODc1LDcgKzkwNSw3IEBACiAJICogYWJvdmUgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopICYmCi0JICAgIChzYy0+aHctPmNvbmYuaHQuZW5hYmxlZCkpIHsKKwkgICAgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpKSB7CiAJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5kb3QxMXJhdGU7CiAJCXU4IHBoeSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5waHk7CiAJCWlmIChpID09IDQgJiYKQEAgLTg4NSw2ICs5MTUsMjQgQEAKIAkJCXJhdGVzWzNdLmZsYWdzID0gcmF0ZXNbMl0uZmxhZ3M7CiAJCX0KIAl9CisKKwkvKgorCSAqIEZvcmNlIGhhcmR3YXJlIHRvIHVzZSBjb21wdXRlZCBkdXJhdGlvbiBmb3IgbmV4dAorCSAqIGZyYWdtZW50IGJ5IGRpc2FibGluZyBtdWx0aS1yYXRlIHJldHJ5LCB3aGljaAorCSAqIHVwZGF0ZXMgZHVyYXRpb24gYmFzZWQgb24gdGhlIG11bHRpLXJhdGUgZHVyYXRpb24gdGFibGUuCisJICoKKwkgKiBGSVhNRTogRml4IGR1cmF0aW9uCisJICovCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKKwkgICAgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSB8fAorCSAgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpKSB7CisJCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7CisJCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7CisJCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOworCX0KKworCS8qIFNldHVwIFJUUy9DVFMgKi8KKwlhdGhfcmNfcmF0ZV9zZXRfcnRzY3RzKHNjLCByYXRlX3RhYmxlLCB0eF9pbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoX3JjX3VwZGF0ZV9wZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCkBAIC0xMjIxLDYgKzEyNjksOSBAQAogCQlhdGhfcmNfcHJpdi0+cGVyX2Rvd25fdGltZSA9IG5vd19tc2VjOwogCX0KIAorCWF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc2MsIHR4X3JhdGUsIHhyZXRyaWVzLCByZXRyaWVzLAorCQkJICAgICAgIGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIpOworCiAjdW5kZWYgQ0hLX1JTU0kKIH0KIApAQCAtMTMzOCwzNiArMTM4OSwxOCBAQAogc3RhdGljIHZvaWQgYXRoX3JjX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQogewotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IE5VTEw7CiAJc3RydWN0IGF0aF9yYXRlc2V0ICpyYXRlc2V0ID0gJmF0aF9yY19wcml2LT5uZWdfcmF0ZXM7CiAJdTggKmh0X21jcyA9ICh1OCAqKSZhdGhfcmNfcHJpdi0+bmVnX2h0X3JhdGVzOwogCXU4IGksIGosIGssIGhpID0gMCwgaHRoaSA9IDA7CiAKLQkvKiBGSVhNRTogQWRob2MgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQkJYm9vbCBpc19jd180MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKLQkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKLQkJCQkJCSAgIGlzX2N3XzQwKTsKLQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KLQkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQl9Ci0KIAlpZiAoIXJhdGVfdGFibGUpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlJhdGUgdGFibGUgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJYXRoX3JjX3ByaXYtPmh0X2NhcCA9IChXTEFOX1JDX0hUX0ZMQUcgfCBXTEFOX1JDX0RTX0ZMQUcpOwotCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCi0JCQlhdGhfcmNfcHJpdi0+aHRfY2FwIHw9IFdMQU5fUkNfNDBfRkxBRzsKLQl9Ci0KIAkvKiBJbml0aWFsIHJhdGUgdGFibGUgc2l6ZS4gV2lsbCBjaGFuZ2UgZGVwZW5kaW5nCiAJICogb24gdGhlIHdvcmtpbmcgcmF0ZSBzZXQgKi8KIAlhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplID0gUkFURV9UQUJMRV9TSVpFOwpAQCAtMTM4Nyw3ICsxNDIwLDcgQEAKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWlkeFtpXVtqXSA9IDA7CiAJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWNudFtpXSA9IDA7CiAJfQotCWF0aF9yY19wcml2LT5yY19waHlfbW9kZSA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKTsKKwlhdGhfcmNfcHJpdi0+cmNfcGh5X21vZGUgPSBhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHOwogCiAJLyogU2V0IHN0cmVhbSBjYXBhYmlsaXR5ICovCiAJYXRoX3JjX3ByaXYtPnNpbmdsZV9zdHJlYW0gPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykgPyAwIDogMTsKQEAgLTEzOTUsMTYgKzE0MjgsMTYgQEAKIAlpZiAoIXJhdGVzZXQtPnJzX25yYXRlcykgewogCQkvKiBObyB3b3JraW5nIHJhdGUsIGp1c3QgaW5pdGlhbGl6ZSB2YWxpZCByYXRlcyAqLwogCQloaSA9IGF0aF9yY19pbml0X3ZhbGlkcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgIGF0aF9yY19wcml2LT5odF9jYXApOwogCX0gZWxzZSB7CiAJCS8qIFVzZSBpbnRlcnNlY3Rpb24gb2Ygd29ya2luZyByYXRlcyBhbmQgdmFsaWQgcmF0ZXMgKi8KIAkJaGkgPSBhdGhfcmNfc2V0dmFsaWRfcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICByYXRlc2V0LCBhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgcmF0ZXNldCwgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCWlmIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19IVF9GTEFHKSB7CiAJCQlodGhpID0gYXRoX3JjX3NldHZhbGlkX2h0cmF0ZXMoYXRoX3JjX3ByaXYsCi0JCQkJCQkJICAgcmF0ZV90YWJsZSwKLQkJCQkJCQkgICBodF9tY3MsCi0JCQkJCQkJICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CisJCQkJCQkgICAgICAgcmF0ZV90YWJsZSwKKwkJCQkJCSAgICAgICBodF9tY3MsCisJCQkJCQkgICAgICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCX0KIAkJaGkgPSBBX01BWChoaSwgaHRoaSk7CiAJfQpAQCAtMTQzMiw5ICsxNDY1LDM2IEBACiAJYXRoX3JjX3NvcnRfdmFsaWRyYXRlcyhyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdik7CiAJYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2stNF07CiAJc2MtPmN1cl9yYXRlX3RhYmxlID0gcmF0ZV90YWJsZTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiUkMgSW5pdGlhbGl6ZWQgd2l0aCBjYXBhYmlsaXRpZXM6IDB4JXhcbiIsCisJCWF0aF9yY19wcml2LT5odF9jYXApOwogfQogCi0vKiBSYXRlIENvbnRyb2wgY2FsbGJhY2tzICovCitzdGF0aWMgdTggYXRoX3JjX2J1aWxkX2h0X2NhcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICAgYm9vbCBpc19jdzQwLCBib29sIGlzX3NnaTQwKQoreworCXU4IGNhcHMgPSAwOworCisJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQljYXBzID0gV0xBTl9SQ19IVF9GTEFHOworCQlpZiAoc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzayAhPSAxICYmCisJCSAgICBhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0RTLCAwLCBOVUxMKSkgeworCQkJaWYgKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdKQorCQkJCWNhcHMgfD0gV0xBTl9SQ19EU19GTEFHOworCQl9CisJCWlmIChpc19jdzQwKQorCQkJY2FwcyB8PSBXTEFOX1JDXzQwX0ZMQUc7CisJCWlmIChpc19zZ2k0MCkKKwkJCWNhcHMgfD0gV0xBTl9SQ19TR0lfRkxBRzsKKwl9CisKKwlyZXR1cm4gY2FwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFjODAyMTEgUmF0ZSBDb250cm9sIGNhbGxiYWNrcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhfc3RhdHVzKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjcsNyArMTUyNyw3IEBACiAJICovCiAJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfZmxhZ3MgJgogCSAgICAoQVRIOUtfVFhfREFUQV9VTkRFUlJVTiB8IEFUSDlLX1RYX0RFTElNX1VOREVSUlVOKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfdHhUcmlnTGV2ZWwpID49IGF0aF9yY19wcml2LT50eF90cmlnbGV2ZWxfbWF4KSkgeworCSAgICAoKHNjLT5zY19haC0+dHhfdHJpZ19sZXZlbCkgPj0gYXRoX3JjX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXgpKSB7CiAJCXR4X3N0YXR1cyA9IDE7CiAJCWlzX3VuZGVycnVuID0gMTsKIAl9CkBAIC0xNDgwLDYgKzE1NDAsMjMgQEAKIAkJCSAoaXNfdW5kZXJydW4pID8gQVRIXzExTl9UWE1BWFRSWSA6CiAJCQkgdHhfaW5mb19wcml2LT50eC50c19sb25ncmV0cnkpOwogCisJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYKKwkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMsIHRpZDsKKwkJCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwkJCWlmKGF0aF90eF9hZ2dyX2NoZWNrKHNjLCBhbiwgdGlkKSkKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzYy0+aHcsIGhkci0+YWRkcjEsIHRpZCk7CisJCX0KKwl9CisKKwlhdGhfZGVidWdfc3RhdF9yYyhzYywgc2tiKTsKIGV4aXQ6CiAJa2ZyZWUodHhfaW5mb19wcml2KTsKIH0KQEAgLTE0OTAsMTEgKzE1NjcsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGlzX3Byb2JlID0gMDsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCiAJLyogbG93ZXN0IHJhdGUgZm9yIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzICovCkBAIC0xNTA3LDIzICsxNTgyLDcgQEAKIAl9CiAKIAkvKiBGaW5kIHR4IHJhdGUgZm9yIHVuaWNhc3QgZnJhbWVzICovCi0JYXRoX3JjX3JhdGVmaW5kKHNjLCBhdGhfcmNfcHJpdiwgQVRIXzExTl9UWE1BWFRSWSwgNCwKLQkJCXR4X2luZm8sICZpc19wcm9iZSwgZmFsc2UpOwotCi0JLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCi0JaWYgKGh3LT5jb25mLmh0LmVuYWJsZWQpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCXU4ICpxYywgdGlkOwotCQkJc3RydWN0IGF0aF9ub2RlICphbjsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCQkJaWYoYXRoX3R4X2FnZ3JfY2hlY2soc2MsIGFuLCB0aWQpKQotCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKGh3LCBoZHItPmFkZHIxLCB0aWQpOwotCQl9Ci0JfQorCWF0aF9yY19yYXRlZmluZChzYywgYXRoX3JjX3ByaXYsIHR4cmMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLApAQCAtMTUzMSw2ICsxNTkwLDggQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaTQwOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xNTUyLDEyICsxNjEzLDcxIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEpOworCWlzX2N3NDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwlpc19zZ2k0MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8CisJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKKwkJcmF0ZV90YWJsZSA9IGF0aF9jaG9vc2VfcmF0ZV90YWJsZShzYywgc2JhbmQtPmJhbmQsCisJCQkJCQkgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQsCisJCQkJCQkgICBpc19jdzQwKTsKKwl9IGVsc2UgaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KKwkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKKwl9CisKKwlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwgaXNfY3c0MCwgaXNfc2dpNDApOworCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9yYXRlX3VwZGF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIG9wZXJfY3c0MCA9IGZhbHNlLCBvcGVyX3NnaTQwOworCWJvb2wgbG9jYWxfY3c0MCA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX3NnaTQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKworCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuOworCisJCWlmIChzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKKwkJICAgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQl0cnVlIDogZmFsc2U7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIG9wZXJfY3c0MCk7CisJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwKKwkJCQkJCSAgIG9wZXJfY3c0MCwgb3Blcl9zZ2k0MCk7CisJCQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEsIHJhdGVfdGFibGUpOworCisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCQkiT3BlcmF0aW5nIEhUIEJhbmR3aWR0aCBjaGFuZ2VkIHRvOiAlZFxuIiwKKwkJCQlzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgKmF0aF9yYXRlX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQogewotCXJldHVybiBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJcmV0dXJuIGFwaHktPnNjOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9mcmVlKHZvaWQgKnByaXYpCkBAIC0xNTc4LDcgKzE2OTgsNyBAQAogCX0KIAogCXJhdGVfcHJpdi0+cnNzaV9kb3duX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwotCXJhdGVfcHJpdi0+dHhfdHJpZ2xldmVsX21heCA9IHNjLT5zY19haC0+YWhfY2Fwcy50eF90cmlnbGV2ZWxfbWF4OworCXJhdGVfcHJpdi0+dHhfdHJpZ2xldmVsX21heCA9IHNjLT5zY19haC0+Y2Fwcy50eF90cmlnbGV2ZWxfbWF4OwogCiAJcmV0dXJuIHJhdGVfcHJpdjsKIH0KQEAgLTE1OTYsNDEgKzE3MTYsMTMgQEAKIAkudHhfc3RhdHVzID0gYXRoX3R4X3N0YXR1cywKIAkuZ2V0X3JhdGUgPSBhdGhfZ2V0X3JhdGUsCiAJLnJhdGVfaW5pdCA9IGF0aF9yYXRlX2luaXQsCisJLnJhdGVfdXBkYXRlID0gYXRoX3JhdGVfdXBkYXRlLAogCS5hbGxvYyA9IGF0aF9yYXRlX2FsbG9jLAogCS5mcmVlID0gYXRoX3JhdGVfZnJlZSwKIAkuYWxsb2Nfc3RhID0gYXRoX3JhdGVfYWxsb2Nfc3RhLAogCS5mcmVlX3N0YSA9IGF0aF9yYXRlX2ZyZWVfc3RhLAogfTsKIAotc3RhdGljIHZvaWQgYXRoX3NldHVwX3JhdGVfdGFibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2ldID0gKHU4KS0xOwotCi0JZm9yIChpID0gMDsgaSA8IHJhdGVfdGFibGUtPnJhdGVfY250OyBpKyspIHsKLQkJdTggY29kZSA9IHJhdGVfdGFibGUtPmluZm9baV0ucmF0ZWNvZGU7Ci0JCXU4IGNpeCA9IHJhdGVfdGFibGUtPmluZm9baV0uY3RybF9yYXRlOwotCQl1OCBzaCA9IHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGU7Ci0KLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdID0gaTsKLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2NvZGUgfCBzaF0gPSBpOwotCi0JCXJhdGVfdGFibGUtPmluZm9baV0ubHBBY2tEdXJhdGlvbiA9Ci0JCQlhdGg5a19od19jb21wdXRldHh0aW1lKHNjLT5zY19haCwgcmF0ZV90YWJsZSwKLQkJCQkJICAgICAgIFdMQU5fQ1RSTF9GUkFNRV9TSVpFLAotCQkJCQkgICAgICAgY2l4LAotCQkJCQkgICAgICAgZmFsc2UpOwotCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNwQWNrRHVyYXRpb24gPQotCQkJYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICBXTEFOX0NUUkxfRlJBTUVfU0laRSwKLQkJCQkJICAgICAgIGNpeCwKLQkJCQkJICAgICAgIHRydWUpOwotCX0KLX0KLQogdm9pZCBhdGhfcmF0ZV9hdHRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMUJdID0KQEAgLTE2NTEsMTIgKzE3NDMsNiBAQAogCQkmYXI1NDE2XzExbmdfcmF0ZXRhYmxlOwogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdID0KIAkJJmFyNTQxNl8xMW5nX3JhdGV0YWJsZTsKLQotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExYl9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExYV9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExZ19yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExbmFfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMW5nX3JhdGV0YWJsZSk7CiB9CiAKIGludCBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaAppbmRleCA5N2M2MGQxLi4xOTlhM2NlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FtIExlZmZsZXIsIEVycm5vIENvbnN1bHRpbmcKICAqIENvcHlyaWdodCAoYykgMjAwNCBWaWRlbzU0IFRlY2hub2xvZ2llcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xOSwxMyArMTksMTIgQEAKICNpZm5kZWYgUkNfSAogI2RlZmluZSBSQ19ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCiBzdHJ1Y3QgYXRoX3NvZnRjOwogCiAjZGVmaW5lIEFUSF9SQVRFX01BWCAgICAgMzAKICNkZWZpbmUgUkFURV9UQUJMRV9TSVpFICA2NAogI2RlZmluZSBNQVhfVFhfUkFURV9QSFkgIDQ4CisjZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQogCiAvKiBWQUxJRF9BTEwgLSB2YWxpZCBmb3IgMjAvNDAvTGVnYWN5LAogICogVkFMSUQgLSBMZWdhY3kgb25seSwKQEAgLTM5LDYgKzM4LDIwIEBACiAjZGVmaW5lIFZBTElEXzIwNDAgKFZBTElEXzIwfFZBTElEXzQwKQogI2RlZmluZSBWQUxJRF9BTEwgIChWQUxJRF8yMDQwfFZBTElEKQogCitlbnVtIHsKKwlXTEFOX1JDX1BIWV9PRkRNLAorCVdMQU5fUkNfUEhZX0NDSywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9EUywKKwlXTEFOX1JDX1BIWV9IVF80MF9TUywKKwlXTEFOX1JDX1BIWV9IVF80MF9EUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCisJV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKKwlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCisJV0xBTl9SQ19QSFlfTUFYCit9OworCiAjZGVmaW5lIFdMQU5fUkNfUEhZX0RTKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCkBAIC05MCw3ICsxMDMsNiBAQAogICovCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgewogCWludCByYXRlX2NudDsKLQl1OCByYXRlQ29kZVRvSW5kZXhbMjU2XTsKIAlzdHJ1Y3QgewogCQlpbnQgdmFsaWQ7CiAJCWludCB2YWxpZF9zaW5nbGVfc3RyZWFtOwpAQCAtMTA4LDggKzEyMCw2IEBACiAJCXU4IHNnaV9pbmRleDsKIAkJdTggaHRfaW5kZXg7CiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwotCQl1MTYgbHBBY2tEdXJhdGlvbjsKLQkJdTE2IHNwQWNrRHVyYXRpb247CiAJfSBpbmZvW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiByc3NpX3JlZHVjZV9pbnRlcnZhbDsKQEAgLTE4NCwxMSArMTk0LDE5IEBACiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CiB9OwogCitlbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgeworCUFUSDlLX05PVF9JTlRFUk5BTCwKKwlBVEg5S19JTlRfUEFVU0UsCisJQVRIOUtfSU5UX1VOUEFVU0UKK307CisKIHN0cnVjdCBhdGhfdHhfaW5mb19wcml2IHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwogCWludCBuX2ZyYW1lczsKIAlpbnQgbl9iYWRfZnJhbWVzOwogCWJvb2wgdXBkYXRlX3JjOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOwogfTsKIAogI2RlZmluZSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYwppbmRleCA0NjJlMDhjLi43MWNiMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVjdi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsNyArMTQsMjggQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9odyAqIGF0aF9nZXRfdmlydF9odyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPnByaV93aXBoeS0+aHc7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIGFwaHktPmh3LT53aXBoeS0+cGVybV9hZGRyKQorCQkgICAgPT0gMCkgeworCQkJaHcgPSBhcGh5LT5odzsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIGh3OworfQogCiAvKgogICogU2V0dXAgYW5kIGxpbmsgZGVzY3JpcHRvcnMuCkBAIC0yNiw3ICs0Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGF0aF9yeF9idWZfbGluayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTc5LDcgKzEwMCw3IEBACiAJcmV0dXJuICh0c2YgJiB+MHg3ZmZmKSB8IHJzdGFtcDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUzMiBsZW4pCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgb2ZmOwpAQCAtOTcsMTEgKzExOCwxMSBAQAogCSAqIFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB3ZSBtYXkgZ2V0IDggS0IgaGVyZSBmcm9tIHRoZQogCSAqIGtlcm5lbC4uLiBhbmQgdGhhdCBpcyBhY3R1YWxseSB3aGF0IGlzIG9ic2VydmVkIG9uIHNvbWUKIAkgKiBzeXN0ZW1zIDooICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBzYy0+c2NfY2FjaGVsc3ogLSAxKTsKKwlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgc2MtPmNhY2hlbHN6IC0gMSwgZ2ZwX21hc2spOwogCWlmIChza2IgIT0gTlVMTCkgewotCQlvZmYgPSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJSBzYy0+c2NfY2FjaGVsc3o7CisJCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIHNjLT5jYWNoZWxzejsKIAkJaWYgKG9mZiAhPSAwKQotCQkJc2tiX3Jlc2VydmUoc2tiLCBzYy0+c2NfY2FjaGVsc3ogLSBvZmYpOworCQkJc2tiX3Jlc2VydmUoc2tiLCBzYy0+Y2FjaGVsc3ogLSBvZmYpOwogCX0gZWxzZSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkic2tidWZmIGFsbG9jIG9mIHNpemUgJXUgZmFpbGVkXG4iLCBsZW4pOwpAQCAtMTIzLDEwICsxNDQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4IHJhdGVjb2RlOwogCV9fbGUxNiBmYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAltZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTsKKwlodyA9IGF0aF9nZXRfdmlydF9odyhzYywgaGRyKTsKIAogCWlmIChkcy0+ZHNfcnhzdGF0LnJzX21vcmUpIHsKIAkJLyoKQEAgLTEzNSw3ICsxNTgsNyBAQAogCQkgKiBkaXNjYXJkIHRoZSBmcmFtZS4gRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gc2VlCiAJCSAqIGVycm9yIGZyYW1lcyBpbiBNb25pdG9yIG1vZGUuCiAJCSAqLwotCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJaWYgKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQlnb3RvIHJ4X25leHQ7CiAJfSBlbHNlIGlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAhPSAwKSB7CiAJCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX0NSQykKQEAgLTE2MSw3ICsxODQsNyBAQAogCQkgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsCiAJCSAqIHdlIGFsc28gaWdub3JlIHRoZSBDUkMgZXJyb3IuCiAJCSAqLwotCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgeworCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewogCQkJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYKIAkJCSAgICB+KEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfAogCQkJICAgICAgQVRIOUtfUlhFUlJfQ1JDKSkKQEAgLTE4Niw3ICsyMDksNiBAQAogCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcmF0ZWNvZGUgJiAweDdmOwogCX0gZWxzZSB7CiAJCWludCBpID0gMCwgY3VyX2JhbmQsIG5fcmF0ZXM7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCiAJCWN1cl9iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAkJbl9yYXRlcyA9IHNjLT5zYmFuZHNbY3VyX2JhbmRdLm5fYml0cmF0ZXM7CkBAIC0yMDgsOSArMjMwLDkgQEAKIAl9CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBhdGhfZXh0ZW5kX3RzZihzYywgZHMtPmRzX3J4c3RhdC5yc190c3RhbXApOwotCXJ4X3N0YXR1cy0+YmFuZCA9IHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXJ4X3N0YXR1cy0+ZnJlcSA9ICBzYy0+aHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0Jcnhfc3RhdHVzLT5ub2lzZSA9IHNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3I7CisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlyeF9zdGF0dXMtPm5vaXNlID0gc2MtPmFuaS5ub2lzZV9mbG9vcjsKIAlyeF9zdGF0dXMtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+bm9pc2UgKyBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gZHMtPmRzX3J4c3RhdC5yc19hbnRlbm5hOwogCkBAIC0yMzMsNyArMjU1LDcgQEAKIAogc3RhdGljIHZvaWQgYXRoX29wbW9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgcmZpbHQsIG1maWx0WzJdOwogCiAJLyogY29uZmlndXJlIHJ4IGZpbHRlciAqLwpAQCAtMjQxLDE0ICsyNjMsMTQgQEAKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgcmZpbHQpOwogCiAJLyogY29uZmlndXJlIGJzc2lkIG1hc2sgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCi0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7CisJaWYgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKQorCQlhdGg5a19od19zZXRic3NpZG1hc2soc2MpOwogCiAJLyogY29uZmlndXJlIG9wZXJhdGlvbmFsIG1vZGUgKi8KIAlhdGg5a19od19zZXRvcG1vZGUoYWgpOwogCiAJLyogSGFuZGxlIGFueSBsaW5rLWxldmVsIGFkZHJlc3MgY2hhbmdlLiAqLwotCWF0aDlrX2h3X3NldG1hYyhhaCwgc2MtPnNjX215YWRkcik7CisJYXRoOWtfaHdfc2V0bWFjKGFoLCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCiAJLyogY2FsY3VsYXRlIGFuZCBpbnN0YWxsIG11bHRpY2FzdCBmaWx0ZXIgKi8KIAltZmlsdFswXSA9IG1maWx0WzFdID0gfjA7CkBAIC0yNjcsMTEgKzI4OSwxMSBAQAogCQlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4LnJ4YnVmbG9jayk7CiAKIAkJc2MtPnJ4LmJ1ZnNpemUgPSByb3VuZHVwKElFRUU4MDIxMV9NQVhfTVBEVV9MRU4sCi0JCQkJCSAgIG1pbihzYy0+c2NfY2FjaGVsc3osCisJCQkJCSAgIG1pbihzYy0+Y2FjaGVsc3osCiAJCQkJCSAgICAgICAodTE2KTY0KSk7CiAKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCi0JCQlzYy0+c2NfY2FjaGVsc3osIHNjLT5yeC5idWZzaXplKTsKKwkJCXNjLT5jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOwogCiAJCS8qIEluaXRpYWxpemUgcnggZGVzY3JpcHRvcnMgKi8KIApAQCAtMjg0LDIyICszMDYsMjIgQEAKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKLQkJCXNrYiA9IGF0aF9yeGJ1Zl9hbGxvYyhzYywgc2MtPnJ4LmJ1ZnNpemUpOworCQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQllcnJvciA9IC1FTk9NRU07CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWJmLT5iZl9tcGR1ID0gc2tiOwotCQkJYmYtPmJmX2J1Zl9hZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCWJmLT5iZl9idWZfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKIAkJCQkJCQkgc2MtPnJ4LmJ1ZnNpemUsCi0JCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LAorCQkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsCiAJCQkJICBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CisJCQkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFJYIGluaXRcbiIpOwogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTMyMiw4ICszNDQsMTMgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKIAkJc2tiID0gYmYtPmJmX21wZHU7Ci0JCWlmIChza2IpCisJCWlmIChza2IpIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwKKwkJCQkJIGJmLT5iZl9idWZfYWRkciwKKwkJCQkJIHNjLT5yeC5idWZzaXplLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQogCX0KIAogCWlmIChzYy0+cngucnhkbWEuZGRfZGVzY19sZW4gIT0gMCkKQEAgLTM2MCwyNiArMzg3LDM5IEBACiAJCXwgQVRIOUtfUlhfRklMVEVSX01DQVNUOwogCiAJLyogSWYgbm90IGEgU1RBLCBlbmFibGUgcHJvY2Vzc2luZyBvZiBQcm9iZSBSZXF1ZXN0cyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFJPQkVSRVE7CiAKLQkvKiBDYW4ndCBzZXQgSE9TVEFQIGludG8gcHJvbWlzY291cyBtb2RlICovCi0JaWYgKCgoc2MtPnNjX2FoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCisJLyoKKwkgKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSB3aGVuIEZJRl9QUk9NSVNDX0lOX0JTUyBpcyBlbmFibGVkIGZvciBzdGF0aW9uCisJICogbW9kZSBpbnRlcmZhY2Ugb3Igd2hlbiBpbiBtb25pdG9yIG1vZGUuIEFQIG1vZGUgZG9lcyBub3QgbmVlZCB0aGlzCisJICogc2luY2UgaXQgcmVjZWl2ZXMgYWxsIGluLUJTUyBmcmFtZXMgYW55d2F5LgorCSAqLworCWlmICgoKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSAmJgogCSAgICAgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9QUk9NSVNDX0lOX0JTUykpIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkgeworCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QUk9NOwotCQkvKiA/Pz8gVG8gcHJldmVudCBmcm9tIHNlbmRpbmcgQUNLICovCi0JCXJmaWx0ICY9IH5BVEg5S19SWF9GSUxURVJfVUNBU1Q7Ci0JfQogCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9DT05UUk9MKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQ09OVFJPTDsKKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIShzYy0+cngucnhmaWx0ZXIgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykpCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NWUJFQUNPTjsKKwllbHNlCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9CRUFDT047CiAKLQkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMKLQkgICAmIGJlYWNvbiBmcmFtZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJmaWx0IHw9IChBVEg5S19SWF9GSUxURVJfQkVBQ09OIHwgQVRIOUtfUlhfRklMVEVSX1BTUE9MTCk7CisJLyogSWYgaW4gSE9TVEFQIG1vZGUsIHdhbnQgdG8gZW5hYmxlIHJlY2VwdGlvbiBvZiBQU1BPTEwgZnJhbWVzICovCisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFNQT0xMOworCisJaWYgKHNjLT5zZWNfd2lwaHkpIHsKKwkJLyogVE9ETzogb25seSBuZWVkZWQgaWYgbW9yZSB0aGFuIG9uZSBCU1NJRCBpcyBpbiB1c2UgaW4KKwkJICogc3RhdGlvbi9hZGhvYyBtb2RlICovCisJCS8qIFRPRE86IGZvciBvbGRlciBjaGlwcywgbWF5IG5lZWQgdG8gYWRkIEFUSDlLX1JYX0ZJTFRFUl9QUk9NCisJCSAqLworCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMOworCX0KIAogCXJldHVybiByZmlsdDsKIApAQCAtMzg4LDcgKzQyOCw3IEBACiAKIGludCBhdGhfc3RhcnRyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmY7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5yeC5yeGJ1ZmxvY2spOwpAQCAtNDE4LDEzICs0NTgsMTIgQEAKIAogYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgc3RvcHBlZDsKIAogCWF0aDlrX2h3X3N0b3BwY3VyZWN2KGFoKTsKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgMCk7CiAJc3RvcHBlZCA9IGF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoKTsKLQltZGVsYXkoMyk7IC8qIDNtcyBpcyBsb25nIGVub3VnaCBmb3IgMSBmcmFtZSAqLwogCXNjLT5yeC5yeGxpbmsgPSBOVUxMOwogCiAJcmV0dXJuIHN0b3BwZWQ7CkBAIC00NDksNyArNDg4LDcgQEAKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMLCAqcmVxdWV1ZV9za2I7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWludCBoZHJsZW4sIHBhZHNpemUsIHJldHZhbDsKIAlib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTsKQEAgLTUyNCw5ICs1NjMsOSBAQAogCQkgKiAxLiBhY2Nlc3NpbmcgdGhlIGZyYW1lCiAJCSAqIDIuIHJlcXVldWVpbmcgdGhlIHNhbWUgYnVmZmVyIHRvIGgvdwogCQkgKi8KLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkciwKIAkJCQlzYy0+cnguYnVmc2l6ZSwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgYXNrZWQgdG8gZmx1c2ggcmVjZWl2ZSBxdWV1ZSwgZGlyZWN0bHkKQEAgLTU0Nyw3ICs1ODYsNyBAQAogCiAJCS8qIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBhbiBza2IgdG8gcmVxdWV1ZSBvbmNlIHdlIGFyZSBkb25lCiAJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc2tiICovCi0JCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSk7CisJCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0FUT01JQyk7CiAKIAkJLyogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IHdlIGlnbm9yZSB0aGUgY3VycmVudCBSWCdkIGZyYW1lLAogCQkgKiB0ZWxsIGhhcmR3YXJlIGl0IGNhbiBnaXZlIHVzIGEgbmV3IGZyYW1lIHVzaW5nIHRoZSBvbGQKQEAgLTU1Nyw5ICs1OTYsOSBAQAogCQkJZ290byByZXF1ZXVlOwogCiAJCS8qIFVubWFwIHRoZSBmcmFtZSAqLwotCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAogCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAogCQlza2JfcHV0KHNrYiwgZHMtPmRzX3J4c3RhdC5yc19kYXRhbGVuKTsKIAkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0NPTlRST0wpOwpAQCAtNTkwLDI0ICs2MjksNTIgQEAKIAkJCSAgICYmICFkZWNyeXB0X2Vycm9yICYmIHNrYi0+bGVuID49IGhkcmxlbiArIDQpIHsKIAkJCWtleWl4ID0gc2tiLT5kYXRhW2hkcmxlbiArIDNdID4+IDY7CiAKLQkJCWlmICh0ZXN0X2JpdChrZXlpeCwgc2MtPnNjX2tleW1hcCkpCisJCQlpZiAodGVzdF9iaXQoa2V5aXgsIHNjLT5rZXltYXApKQogCQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQl9CisJCWlmIChhaC0+c3dfbWdtdF9jcnlwdG8gJiYKKwkJICAgIChyeF9zdGF0dXMuZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCQkgICAgaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJLyogVXNlIHNvZnR3YXJlIGRlY3J5cHQgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLiAqLworCQkJcnhfc3RhdHVzLmZsYWcgJj0gflJYX0ZMQUdfREVDUllQVEVEOworCQl9CiAKIAkJLyogU2VuZCB0aGUgZnJhbWUgdG8gbWFjODAyMTEgKi8KLQkJX19pZWVlODAyMTFfcngoc2MtPmh3LCBza2IsICZyeF9zdGF0dXMpOworCQlpZiAoaGRyLT5hZGRyMVs1XSAmIDB4MDEpIHsKKwkJCWludCBpOworCQkJLyoKKwkJCSAqIERlbGl2ZXIgYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZXMgdG8gYWxsIHN1aXRhYmxlCisJCQkgKiB2aXJ0dWFsIHdpcGh5cy4KKwkJCSAqLworCQkJLyogVE9ETzogZmlsdGVyIGJhc2VkIG9uIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCQkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwkJCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKwkJCQluc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAobnNrYikKKwkJCQkJX19pZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IsCisJCQkJCQkgICAgICAgJnJ4X3N0YXR1cyk7CisJCQl9CisJCQlfX2llZWU4MDIxMV9yeChzYy0+aHcsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCX0gZWxzZSB7CisJCQkvKiBEZWxpdmVyIHVuaWNhc3QgZnJhbWVzIGJhc2VkIG9uIHJlY2VpdmVyIGFkZHJlc3MgKi8KKwkJCV9faWVlZTgwMjExX3J4KGF0aF9nZXRfdmlydF9odyhzYywgaGRyKSwgc2tiLAorCQkJCSAgICAgICAmcnhfc3RhdHVzKTsKKwkJfQogCiAJCS8qIFdlIHdpbGwgbm93IGdpdmUgaGFyZHdhcmUgb3VyIHNoaW55IG5ldyBhbGxvY2F0ZWQgc2tiICovCiAJCWJmLT5iZl9tcGR1ID0gcmVxdWV1ZV9za2I7Ci0JCWJmLT5iZl9idWZfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCByZXF1ZXVlX3NrYi0+ZGF0YSwKKwkJYmYtPmJmX2J1Zl9hZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgcmVxdWV1ZV9za2ItPmRhdGEsCiAJCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwKIAkJCSAgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KHJlcXVldWVfc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWFxuIik7CisJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlhcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJYmYtPmJmX2RtYWNvbnRleHQgPSBiZi0+YmZfYnVmX2FkZHI7CkBAIC02MjIsNiArNjg5LDEyIEBACiAJCX0gZWxzZSB7CiAJCQlzYy0+cngucnhvdGhlcmFudCA9IDA7CiAJCX0KKworCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCQkJKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0JFQUNPTikpIHsKKwkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfQogcmVxdWV1ZToKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnJ4LnJ4YnVmKTsKIAkJYXRoX3J4X2J1Zl9saW5rKHNjLCBiZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCmluZGV4IDlmZWRiNDkuLjUyNjA1MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtNjcsNyArNjcsNyBAQAogI2RlZmluZSBBUl9ETUFTSVpFXzUxMkIgICAgICAweDAwMDAwMDA3CiAKICNkZWZpbmUgQVJfVFhDRkcgICAgICAgICAgICAgMHgwMDMwCi0jZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaX01BU0sgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfTUFTSyAgMHgwMDAwMDAwNwogI2RlZmluZSBBUl9UWENGR19ETUFTWl80QiAgICAwCiAjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaXzhCICAgIDEKICNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfMTZCICAgMgpAQCAtMTU4LDEzICsxNTgsNiBAQAogI2RlZmluZSBBUl9DU1RfVElNRU9VVF9MSU1JVCAgICAgIDB4RkZGRjAwMDAKICNkZWZpbmUgQVJfQ1NUX1RJTUVPVVRfTElNSVRfUyAgICAxNgogCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwICAgICAgICAgICAgICAgICAgMHgwMTQKLQotI2RlZmluZSBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKF9haCkgXAotCShBUl9TUkVWXzkxMDAoKF9haCkpIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihfYWgpKQotI2RlZmluZSBBUl9TUkVWXzU0MTZfVjIyX09SX0xBVEVSKF9haCkgXAotCShBUl9TUkVWXzkxMDAoKF9haCkpIHx8IEFSX1NSRVZfNTQxNl8yMl9PUl9MQVRFUihfYWgpKQotCiAjZGVmaW5lIEFSX0lTUiAgICAgICAgICAgICAgIDB4MDA4MAogI2RlZmluZSBBUl9JU1JfUlhPSyAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEFSX0lTUl9SWERFU0MgICAgICAgIDB4MDAwMDAwMDIKQEAgLTczMyw2ICs3MjYsNyBAQAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMTAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTEwMCAgICAgICAgICAgICAgICAgIDB4MTQKICNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkxNjAgICAgICAgIAkgICAgICAweDQwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMCAgICAJICAgICAgMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTEgICAgCSAgICAgIDEKQEAgLTc0NSw0NSArNzM5LDYwIEBACiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSAgICAgICAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIgICAgICAgICAgICAgIDIKIAotI2RlZmluZSBBUl9TUkVWXzkxMDBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSkKKyNkZWZpbmUgQVJfU1JFVl81NDE2KF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8IFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkpCiAjZGVmaW5lIEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCkpCisJKCgoQVJfU1JFVl81NDE2KF9haCkpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjApKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTAwKSkKICNkZWZpbmUgQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8IFwKLQkJKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyKSkKLSNkZWZpbmUgQVJfU1JFVl85MTYwKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQotI2RlZmluZSBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpCi0jZGVmaW5lIEFSX1NSRVZfOTE2MF8xMShfYWgpIFwKLQkoQVJfU1JFVl85MTYwKF9haCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExKSkKLSNkZWZpbmUgQVJfU1JFVl85MjgwKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MF8yMChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODApIHx8IFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCi0JKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzIwKSkpCisJKCgoQVJfU1JFVl81NDE2KF9haCkpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjIpKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTAwKSkKIAotI2RlZmluZSBBUl9TUkVWXzkyODUoX2FoKSAoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKKyNkZWZpbmUgQVJfU1JFVl85MTAwKGFoKSBcCisJKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uKSA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkKKyNkZWZpbmUgQVJfU1JFVl85MTAwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCisKKyNkZWZpbmUgQVJfU1JFVl85MTYwKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpCisjZGVmaW5lIEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQorI2RlZmluZSBBUl9TUkVWXzkxNjBfMTEoX2FoKSBcCisJKEFSX1NSRVZfOTE2MChfYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTEpKQorI2RlZmluZSBBUl9TUkVWXzkyODAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCisjZGVmaW5lIEFSX1NSRVZfOTI4MF8yMChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApICYmIFwKKwkJKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKQorI2RlZmluZSBBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODApIHx8IFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApICYmIFwKKwkoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpKQorCisjZGVmaW5lIEFSX1NSRVZfOTI4NShfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODUpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzExKF9haCkgXAotCShBUl9TUkVWXzkyODAoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpCisJKEFSX1NSRVZfOTI4NShhaCkgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKLQkgKEFSX1NSRVZfOTI4NShhaCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkpCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKKwkgKEFSX1NSRVZfOTI4NShhaCkgJiYgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBcCisJCQkgICAgICAgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMihfYWgpIFwKLQkoQVJfU1JFVl85MjgwKGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQorCShBUl9TUkVWXzkyODUoYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCi0JIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMikpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCisJIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gXAorCQkJICAgICAgIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMikpKQogCiAjZGVmaW5lIEFSX1JBRElPX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgICAgMHhmMAogI2RlZmluZSBBUl9SQUQ1MTMzX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgIDB4YzAKQEAgLTg3NSwxMiArODg0LDE1IEBACiAKICNkZWZpbmUgQVJfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFSOTI4NV9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKIAogI2RlZmluZSBBUl9HUElPX0lOX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0OAogI2RlZmluZSBBUl9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkMwMDAKICNkZWZpbmUgQVJfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRkZDMDAKICNkZWZpbmUgQVI5MjhYX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUjkyODVfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkYwMDAKKyNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxMgogCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDRjCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSViAgICAgICAgICAgICAgICAgICAgICAgMHgzCkBAIC04OTQsMTQgKzkwNiwyNCBAQAogI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MX1ZBTF9TICAgICAgICAgICAgICAgICAgIDAKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTCAgICAgICAgICAgICAgICAgICAgIDB4NDA1NAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfUyAgICAgICAyCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfUyAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0RFRiAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9TICAgICAgICAgNAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9ERUYgICAgICAgIDB4MDAwMDAwODAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfREVGX1MgICAgICA3CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQiAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkJfUyAgICAgIDEyCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0JCICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQl9TICAgICAgIDE1CiAjZGVmaW5lIEFSX0dQSU9fUlRDX1JFU0VUX09WRVJSSURFX0VOQUJMRSAgICAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBBUl9HUElPX0pUQUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDEgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1OAorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRV9TICAgICAgICAgICAxNgogCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMiAgICAgICAgICAgICAgICAgICAgICAgMHg0MDVjCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMl9DTEsyNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgpAQCAtOTQwLDcgKzk2Miw3IEBACiAKICNkZWZpbmUgQVJfUlRDX0JBU0UgICAgICAgICAgICAgMHgwMDAyMDAwMAogI2RlZmluZSBBUl9SVENfUkMgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAwMCkgOiAweDcwMDAKKwkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDAwKSA6IDB4NzAwMCkKICNkZWZpbmUgQVJfUlRDX1JDX00JCTB4MDAwMDAwMDMKICNkZWZpbmUgQVJfUlRDX1JDX01BQ19XQVJNICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9SVENfUkNfTUFDX0NPTEQgICAgICAweDAwMDAwMDAyCkBAIC05NDgsNyArOTcwLDcgQEAKICNkZWZpbmUgQVJfUlRDX1JDX1dBUk1fUkVTRVQgICAgMHgwMDAwMDAwOAogCiAjZGVmaW5lIEFSX1JUQ19QTExfQ09OVFJPTCBcCi0JKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDE0KSA6IDB4NzAxNAorCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwMTQpIDogMHg3MDE0KQogCiAjZGVmaW5lIEFSX1JUQ19QTExfRElWICAgICAgICAgIDB4MDAwMDAwMWYKICNkZWZpbmUgQVJfUlRDX1BMTF9ESVZfUyAgICAgICAgMApAQCAtOTU3LDggKzk3OSw2IEBACiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMICAgICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgQVJfUlRDX1BMTF9DTEtTRUxfUyAgICAgOAogCi0KLQogI2RlZmluZSBBUl9SVENfUkVTRVQgXAogCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwNDApIDogMHg3MDQwKQogI2RlZmluZSBBUl9SVENfUkVTRVRfRU4JCSgweDAwMDAwMDAxKQpAQCAtOTk1LDYgKzEwMTUsMTIgQEAKICNkZWZpbmUgQVJfUlRDX0lOVFJfTUFTSyBcCiAJKChBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDA1OCkgOiAweDcwNTgpCiAKKy8qIFJUQ19ERVJJVkVEXyogLSBvbmx5IGZvciBBUjkxMDAgKi8KKworI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEsgICAgICAgICAgIChBUl9SVENfQkFTRSArIDB4MDAzOCkKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRCAgICAweDAwMDBmZmZlCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0RfUyAgMQorCiAjZGVmaW5lCUFSX1NFUV9NQVNLCTB4ODA2MAogCiAjZGVmaW5lIEFSX0FOX1JGMkcxX0NIMCAgICAgICAgIDB4NzgxMApAQCAtMTAyMSw2ICsxMDQ3LDEwIEBACiAjZGVmaW5lIEFSX0FOX1JGNUcxX0NIMV9EQjUgICAgIDB4MDAzODAwMDAKICNkZWZpbmUgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TICAgMTkKIAorI2RlZmluZSBBUl9BTl9UT1AxICAgICAgICAgICAgICAgICAgMHg3ODkwCisjZGVmaW5lIEFSX0FOX1RPUDFfREFDSVBNT0RFCSAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX0FOX1RPUDFfREFDSVBNT0RFX1MJICAgIDE4CisKICNkZWZpbmUgQVJfQU5fVE9QMiAgICAgICAgICAgICAgICAgIDB4Nzg5NAogI2RlZmluZSBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMICAgICAgMHhDMDAwMDAwMAogI2RlZmluZSBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MgICAgMzAKQEAgLTExODEsMTggKzEyMTEsNyBAQAogI2RlZmluZSBBUl9DRlBfVkFMICAgICAgICAgIDB4MDAwMEZGRkYKIAogI2RlZmluZSBBUl9SWF9GSUxURVIgICAgICAgIDB4ODAzQwotI2RlZmluZSBBUl9SWF9GSUxURVJfQUxMICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQVJfUlhfVUNBU1QgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1JYX01DQVNUICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9SWF9CQ0FTVCAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQVJfUlhfQ09OVFJPTCAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1JYX0JFQUNPTiAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBUl9SWF9QUk9NICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfUlhfUFJPQkVfUkVRICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIEFSX1JYX01ZX0JFQUNPTiAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBBUl9SWF9DT01QUl9CQVIgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgQVJfUlhfQ09NUFJfQkEgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEFSX1JYX1VOQ09NX0JBX0JBUiAgMHgwMDAwMTAwMAogCiAjZGVmaW5lIEFSX01DQVNUX0ZJTDAgICAgICAgMHg4MDQwCiAjZGVmaW5lIEFSX01DQVNUX0ZJTDEgICAgICAgMHg4MDQ0CkBAIC0xMjM2LDYgKzEyNTUsOCBAQAogCiAjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxICAgICAgIDB4ODA2MAogI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9TRVEgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQgMHhGRkZGMDAwMAorI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01UX1MgMTYKIAogI2RlZmluZSBBUl9HQVRFRF9DTEtTICAgICAgIDB4ODA2NAogI2RlZmluZSBBUl9HQVRFRF9DTEtTX1RYICAgIDB4MDAwMDAwMDIKQEAgLTEzNzAsOCArMTM5MSw4IEBACiAjZGVmaW5lIEFSX1BIWV9DT1VOVE1BWCAgICAgICAgKDMgPDwgMjIpCiAjZGVmaW5lIEFSX01JQkNOVF9JTlRSTUFTSyAgICAgKDMgPDwgMjIpCiAKLSNkZWZpbmUgQVJfVFNGX1RIUkVTSE9MRCAgICAgICAweDgxM2MKLSNkZWZpbmUgQVJfVFNGX1RIUkVTSE9MRF9WQUwgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX1RTRk9PUl9USFJFU0hPTEQgICAgICAgMHg4MTNjCisjZGVmaW5lIEFSX1RTRk9PUl9USFJFU0hPTERfVkFMICAgMHgwMDAwRkZGRgogCiAjZGVmaW5lIEFSX1BIWV9FUlJfRUlGU19NQVNLICAgODE0NAogCkBAIC0xNDYwLDYgKzE0ODEsMTAgQEAKICNkZWZpbmUgQVJfUENVX1RYQlVGX0NUUkxfVVNBQkxFX1NJWkUgICAweDcwMAogI2RlZmluZSBBUl85Mjg1X1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFICAgMHgzODAKIAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMiAgICAgICAgICAgICAgIDB4ODM0NAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEUgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1QgICAweDAwMDAwMDA0CisKICNkZWZpbmUgQVJfS0VZVEFCTEVfMCAgICAgICAgICAgMHg4ODAwCiAjZGVmaW5lIEFSX0tFWVRBQkxFKF9uKSAgICAgICAgIChBUl9LRVlUQUJMRV8wICsgKChfbikqMzIpKQogI2RlZmluZSBBUl9LRVlfQ0FDSEVfU0laRSAgICAgICAxMjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYwppbmRleCA2NDA0M2U5Li40Y2E2MjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTYsNjMgKzE2LDM1OSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZ2QuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgInJlZ2RfY29tbW9uLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfcmVnZF9jaGFuc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjYSA9IGE7Ci0JY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNiID0gYjsKKy8qCisgKiBUaGlzIGlzIGEgc2V0IG9mIGNvbW1vbiBydWxlcyB1c2VkIGJ5IG91ciB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCisgKiBXZSBoYXZlIDEyIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4gVG8gc2F2ZSBzcGFjZSB3ZSBjb25zb2xpZGF0ZQorICogdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiA1IHN0cnVjdHVyZXMgYnkgZnJlcXVlbmN5IGFuZCBjaGFuZ2UKKyAqIHRoZSBmbGFncyBvbiBvdXIgcmVnX25vdGlmaWVyKCkgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMuCisgKi8KIAotCXJldHVybiAoY2EtPmNoYW5uZWwgPT0gY2ItPmNoYW5uZWwpID8KLQkgICAgKGNhLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSAtCi0JICAgIChjYi0+Y2hhbm5lbEZsYWdzICYgQ0hBTl9GTEFHUykgOiBjYS0+Y2hhbm5lbCAtIGNiLT5jaGFubmVsOwotfQorLyogT25seSB0aGVzZSBjaGFubmVscyBhbGwgYWxsb3cgYWN0aXZlIHNjYW4gb24gYWxsIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucyAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMDFfMTEJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKQogCi1zdGF0aWMgdm9pZAotYXRoOWtfcmVnZF9zb3J0KHZvaWQgKmEsIHUzMiBuLCB1MzIgc2l6ZSwgYXRoX2hhbF9jbXBfdCAqY21wKQotewotCXU4ICphYSA9IGE7Ci0JdTggKmFpLCAqdDsKKy8qIFdlIGVuYWJsZSBhY3RpdmUgc2NhbiBvbiB0aGVzZSBhIGNhc2UgYnkgY2FzZSBiYXNpcyBieSByZWd1bGF0b3J5IGRvbWFpbiAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMTJfMTMJUkVHX1JVTEUoMjQ2Ny0xMCwgMjQ3MisxMCwgNDAsIDAsIDIwLFwKKwkJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKQorI2RlZmluZSBBVEg5S18yR0haX0NIMTQJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDQwLCAwLCAyMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fT0ZETSkKIAotCWZvciAoYWkgPSBhYSArIHNpemU7IC0tbiA+PSAxOyBhaSArPSBzaXplKQotCQlmb3IgKHQgPSBhaTsgdCA+IGFhOyB0IC09IHNpemUpIHsKLQkJCXU4ICp1ID0gdCAtIHNpemU7Ci0JCQlpZiAoY21wKHUsIHQpIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlzd2FwX2FycmF5KHUsIHQsIHNpemUpOwotCQl9Ci19CisvKiBXZSBhbGxvdyBJQlNTIG9uIHRoZXNlIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzIGJ5IHJlZ3VsYXRvcnkgZG9tYWluICovCisjZGVmaW5lIEFUSDlLXzVHSFpfNTE1MF81MzUwCVJFR19SVUxFKDUxNTAtMTAsIDUzNTArMTAsIDQwLCAwLCAzMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fSUJTUykKKyNkZWZpbmUgQVRIOUtfNUdIWl81NDcwXzU4NTAJUkVHX1JVTEUoNTQ3MC0xMCwgNTg1MCsxMCwgNDAsIDAsIDMwLFwKKwkJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKQorI2RlZmluZSBBVEg5S181R0haXzU3MjVfNTg1MAlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsXAorCQkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpCiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXJldHVybiBhaC0+YWhfY3VycmVudFJEICYgfldPUkxEV0lERV9ST0FNSU5HX0ZMQUc7Ci19CisjZGVmaW5lIEFUSDlLXzJHSFpfQUxMCQlBVEg5S18yR0haX0NIMDFfMTEsIFwKKwkJCQlBVEg5S18yR0haX0NIMTJfMTMsIFwKKwkJCQlBVEg5S18yR0haX0NIMTQKIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19jaGFuX2JtX3plcm8odTY0ICpiaXRtYXNrKQotewotCWludCBpOworI2RlZmluZSBBVEg5S181R0haX0FMTAkJQVRIOUtfNUdIWl81MTUwXzUzNTAsIFwKKwkJCQlBVEg5S181R0haXzU0NzBfNTg1MAorLyogVGhpcyBvbmUgc2tpcHMgd2hhdCB3ZSBjYWxsICJtaWQgYmFuZCIgKi8KKyNkZWZpbmUgQVRIOUtfNUdIWl9OT19NSURCQU5ECUFUSDlLXzVHSFpfNTE1MF81MzUwLCBcCisJCQkJQVRIOUtfNUdIWl81NzI1XzU4NTAKIAotCWZvciAoaSA9IDA7IGkgPCBCTUxFTjsgaSsrKSB7Ci0JCWlmIChiaXRtYXNrW2ldICE9IDApCi0JCQlyZXR1cm4gZmFsc2U7CisvKiBDYW4gYmUgdXNlZCBmb3I6CisgKiAweDYwLCAweDYxLCAweDYyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYwXzYxXzYyID0geworCS5uX3JlZ19ydWxlcyA9IDUsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQUxMLAorCQlBVEg5S181R0haX0FMTCwKIAl9Ci0JcmV0dXJuIHRydWU7Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDYzIGFuZCAweDY1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYzXzY1ID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX05PX01JREJBTkQsCisJfQorfTsKKworLyogQ2FuIGJlIHVzZWQgYnkgMHg2NCBvbmx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY0ID0geworCS5uX3JlZ19ydWxlcyA9IDMsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfNUdIWl9OT19NSURCQU5ELAorCX0KK307CisKKy8qIENhbiBiZSB1c2VkIGJ5IDB4NjYgYW5kIDB4NjkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBhdGg5a193b3JsZF9yZWdkb21fNjZfNjkgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJQVRIOUtfMkdIWl9DSDAxXzExLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDY3LCAweDZBIGFuZCAweDY4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY3XzY4XzZBID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfd3dyX3NrdSh1MTYgcmVnZCkKK3sKKwlyZXR1cm4gKChyZWdkICYgV09STERfU0tVX01BU0spID09IFdPUkxEX1NLVV9QUkVGSVgpIHx8CisJCShyZWdkID09IFdPUkxEKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9lZXByb21SRChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCAmIH5XT1JMRFdJREVfUk9BTUlOR19GTEFHOworfQorCitib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuIGlzX3d3cl9za3UoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpKTsKK30KKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKHZvaWQpCit7CisJLyogdGhpcyBpcyB0aGUgbW9zdCByZXN0cmljdGl2ZSAqLworCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworfQorCitjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjE6CisJY2FzZSAweDYyOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82MF82MV82MjsKKwljYXNlIDB4NjM6CisJY2FzZSAweDY1OgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82M182NTsKKwljYXNlIDB4NjQ6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworCWNhc2UgMHg2NjoKKwljYXNlIDB4Njk6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY2XzY5OworCWNhc2UgMHg2NzoKKwljYXNlIDB4Njg6CisJY2FzZSAweDZBOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82N182OF82QTsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4oKTsKKwl9Cit9CisKKy8qIEZyZXF1ZW5jeSBpcyBvbmUgd2hlcmUgcmFkYXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkICovCitzdGF0aWMgYm9vbCBhdGg5a19pc19yYWRhcl9mcmVxKHUxNiBjZW50ZXJfZnJlcSkKK3sKKwlyZXR1cm4gKGNlbnRlcl9mcmVxID49IDUyNjAgJiYgY2VudGVyX2ZyZXEgPD0gNTcwMCk7Cit9CisKKy8qCisgKiBOLkI6IFRoZXNlIGV4Y2VwdGlvbiBydWxlcyBkbyBub3QgYXBwbHkgcmFkYXIgZnJlcXMuCisgKgorICogLSBXZSBlbmFibGUgYWRob2MgKG9yIGJlYWNvbmluZykgaWYgYWxsb3dlZCBieSAxMWQKKyAqIC0gV2UgZW5hYmxlIGFjdGl2ZSBzY2FuIGlmIHRoZSBjaGFubmVsIGlzIGFsbG93ZWQgYnkgMTFkCisgKiAtIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhIHdlIGRldGVybWluZSB3ZSBoYXZlCisgKiAgIHJlY2VpdmVkIGEgYmVhY29uIG9uIGEgY2hhbm5lbCB3ZSBjYW4gZW5hYmxlIGFjdGl2ZSBzY2FuIGFuZAorICogICBhZGhvYyAob3IgYmVhY29uaW5nKS4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgYmFuZHdpZHRoID0gMDsKKwlpbnQgcjsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKGF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSB8fAorCQkJICAgIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpCisJCQkJY29udGludWU7CisKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAorCQkJCQkmYmFuZHdpZHRoLCAmcmVnX3J1bGUpOworCQkJCWlmIChyKQorCQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIElmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICogd2UgZW5hYmxlIGFkaG9jL2JlYWNvbmluZyBpZiBpdCBhbGxvd3MgdXMgdG8KKwkJCQkgKiB1c2UgaXQuIE5vdGUgdGhhdCB3ZSB3b3VsZCBoYXZlIGRpc2FibGVkIGl0CisJCQkJICogYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKiBkZWZhdWx0IGR1cmluZyBpbml0LCBwcmlvciB0byBjYWxsaW5nIG91cgorCQkJCSAqIHJlZ3VsYXRvcnlfaGludCgpLgorCQkJCSAqLworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmCisJCQkJICAgIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJgorCQkJCSAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2gtPmJlYWNvbl9mb3VuZCkKKwkJCQkJY2gtPmZsYWdzICY9IH4oSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8CisJCQkJCSAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKTsKKwkJCX0KKwkJfQorCX0KKworfQorCisvKiBBbGxvd3MgYWN0aXZlIHNjYW4gc2NhbiBvbiBDaCAxMiBhbmQgMTMgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV9hY3RpdmVfc2Nhbl9mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCXUzMiBiYW5kd2lkdGggPSAwOworCWludCByOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisKKwkvKgorCSAqIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQgYWx3YXlzIGVuYWJsZSBhY3RpdmUgc2NhbgorCSAqIG9uIHRoZXNlIGNoYW5uZWxzLiBUaGlzIGlzIG9ubHkgZG9uZSBmb3Igc3BlY2lmaWMgcmVndWxhdG9yeSBTS1VzCisJICovCisJaWYgKGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2lldmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCisJICogY2hhbm5lbCBmaXJzdCBiZWZvcmUgZW5hYmxpbmcgYWN0aXZlIHNjYW4uIFRoZSBwYXNzaXZlIHNjYW4KKwkgKiB3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKKwkgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4uCisJICovCisKKwljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEsICZiYW5kd2lkdGgsICZyZWdfcnVsZSk7CisJaWYgKCFyKSB7CisJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTikpCisJCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJCWNoLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KKworCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwgJmJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKKwlpZiAoIXIpIHsKKwkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJfQorfQorCisvKiBBbHdheXMgYXBwbHkgUmFkYXIvREZTIHJ1bGVzIG9uIGZyZXEgcmFuZ2UgNTI2MCBNSHogLSA1NzAwIE1IeiAqLwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoIWF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSkKKwkJCWNvbnRpbnVlOworCQkvKiBXZSBhbHdheXMgZW5hYmxlIHJhZGFyIGRldGVjdGlvbi9ERlMgb24gdGhpcworCQkgKiBmcmVxdWVuY3kgcmFuZ2UuIEFkZGl0aW9uYWxseSB3ZSBhbHNvIGFwcGx5IG9uCisJCSAqIHRoaXMgZnJlcXVlbmN5IHJhbmdlOgorCQkgKiAtIElmIFNUQSBtb2RlIGRvZXMgbm90IHlldCBoYXZlIERGUyBzdXBwb3J0cyBkaXNhYmxlCisJCSAqICAgYWN0aXZlIHNjYW5uaW5nCisJCSAqIC0gSWYgYWRob2MgbW9kZSBkb2VzIG5vdCBzdXBwb3J0IERGUyB5ZXQgdGhlbgorCQkgKiAgIGRpc2FibGUgYWRob2MgaW4gdGhlIGZyZXF1ZW5jeS4KKwkJICogLSBJZiBBUCBtb2RlIGRvZXMgbm90IHlldCBzdXBwb3J0IHJhZGFyIGRldGVjdGlvbi9ERlMKKwkJICogICBkbyBub3QgYWxsb3cgQVAgbW9kZQorCQkgKi8KKwkJaWYgKCEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKQorCQkJY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkJCQkgICAgIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KK30KKwordm9pZCBhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjM6CisJY2FzZSAweDY2OgorCWNhc2UgMHg2NzoKKwkJYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgaW5pdGlhdG9yKTsKKwkJYnJlYWs7CisJY2FzZSAweDY4OgorCQlhdGg5a19yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCQlhdGg5a19yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3Mod2lwaHksIGluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK2ludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwkvKiBXZSBhbHdheXMgYXBwbHkgdGhpcyAqLworCWF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CisKKwlzd2l0Y2ggKHJlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisJCWlmIChhdGg5a19pc193b3JsZF9yZWdkKHNjLT5zY19haCkpCisJCQlhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Mod2lwaHksIHJlcXVlc3QtPmluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitib29sIGF0aDlrX3JlZ2RfaXNfZWVwcm9tX3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUxNiByZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKIAlpbnQgaTsKIAogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgY291bnRyeSBjb2RlICovCiAJCXUxNiBjYyA9IHJkICYgfkNPVU5UUllfRVJEX0ZMQUc7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykKIAkJCWlmIChhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUgPT0gY2MpCiAJCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgcmVncGFpciB2YWx1ZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKIAkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJkKQogCQkJCXJldHVybiB0cnVlOwpAQCAtODIsMTEzICszNzgsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXUzMiByZWdjYXA7Ci0KLQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCi0JaWYgKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfY2NvZGVfdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHUxNiBjYykKLXsKLQl1MTYgcmQ7Ci0JaW50IGk7Ci0KLQlpZiAoY2MgPT0gQ1RSWV9ERUZBVUxUKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoY2MgPT0gQ1RSWV9ERUJVRykKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiRUVQUk9NIHJlZ2RvbWFpbiAweCV4XG4iLCByZCk7Ci0KLQlpZiAocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRUVQUk9NIHNldHRpbmcgaXMgY291bnRyeSBjb2RlICV1XG4iLAotCQkJcmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JCXJldHVybiBjYyA9PSAocmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7Ci0JCWlmIChjYyA9PSBhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUpIHsKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCQkJaWYgKChyZCAmIFdPUkxEX1NLVV9NQVNLKSA9PSBXT1JMRF9TS1VfUFJFRklYKQotCQkJCXJldHVybiB0cnVlOwotI2VuZGlmCi0JCQlpZiAoYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW0gPT0gcmQgfHwKLQkJCSAgICByZCA9PSBERUJVR19SRUdfRE1OIHx8IHJkID09IE5PX0VOVU1SRCkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgKmNvdW50cnksCi0JCQkgICBzdHJ1Y3QgcmVnRG9tYWluICpyZDVHSHosCi0JCQkgICB1bnNpZ25lZCBsb25nICptb2Rlc19hbGxvd2VkKQotewotCWJpdG1hcF9jb3B5KG1vZGVzX2FsbG93ZWQsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFnKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFHLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgIChhdGg5a19yZWdkX2lzX2NoYW5fYm1femVybyhyZDVHSHotPmNoYW4xMWEpKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFBLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkdfSFQyMCwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpCi0JICAgICYmICghY291bnRyeS0+YWxsb3cxMW5nMjApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykKLQkgICAgJiYgKCFjb3VudHJ5LT5hbGxvdzExbmEyMCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQyMCwgbW9kZXNfYWxsb3dlZCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmc0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFuZzQwKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDQwUExVUywgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgICghY291bnRyeS0+YWxsb3cxMW5hNDApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmE0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBtb2Rlc19hbGxvd2VkKTsKLX0KLQotYm9vbCBhdGg5a19yZWdkX2lzX3B1YmxpY19zYWZldHlfc2t1KHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQl1MTYgcmQ7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCXN3aXRjaCAocmQpIHsKLQljYXNlIEZDQzRfRkNDQToKLQljYXNlIChDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDkgfCBDT1VOVFJZX0VSRF9GTEFHKToKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBERUJVR19SRUdfRE1OOgotCWNhc2UgTk9fRU5VTVJEOgotCQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfVU5JVEVEX1NUQVRFU19GQ0M0OSkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCisvKiBFRVBST00gY291bnRyeSBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKIGF0aDlrX3JlZ2RfZmluZF9jb3VudHJ5KHUxNiBjb3VudHJ5Q29kZSkKIHsKQEAgLTIwMSwxMiArMzkxLDIyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCkKKy8qIEVFUFJPTSByZCBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLworc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKK2F0aDlrX3JlZ2RfZmluZF9jb3VudHJ5X2J5X3JkKGludCByZWdkbW4pCiB7Ci0JdTE2IHJkOwogCWludCBpOwogCi0JcmQgPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJCWlmIChhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bSA9PSByZWdkbW4pCisJCQlyZXR1cm4gJmFsbENvdW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybnMgdGhlIG1hcCBvZiB0aGUgRUVQUk9NIHNldCBSRCB0byBhIGNvdW50cnkgY29kZSAqLworc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9kZWZhdWx0X2NvdW50cnkodTE2IHJkKQorewogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKIAkJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKIAkJdTE2IGNjID0gcmQgJiB+Q09VTlRSWV9FUkRfRkxBRzsKQEAgLTIxNiw3OTggKzQxNiwxMDQgQEAKIAkJCXJldHVybiBjYzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKLQkJaWYgKHJlZ0RvbWFpblBhaXJzW2ldLnJlZ0RtbkVudW0gPT0gcmQpIHsKLQkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQyAhPSAwKQotCQkJCXJldHVybiByZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQzsKLQkJCWVsc2UKLQkJCQlpID0gQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7Ci0JCX0KIAlyZXR1cm4gQ1RSWV9ERUZBVUxUOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19yZWdkX2lzX3ZhbGlkX3JlZ19kb21haW4oaW50IHJlZ0RtbiwKLQkJCQkJICAgc3RydWN0IHJlZ0RvbWFpbiAqcmQpCitzdGF0aWMgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nKgorYXRoOWtfZ2V0X3JlZ3BhaXIoaW50IHJlZ2RtbikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ0RvbWFpbnMpOyBpKyspIHsKLQkJaWYgKHJlZ0RvbWFpbnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCWlmIChyZCAhPSBOVUxMKSB7Ci0JCQkJbWVtY3B5KHJkLCAmcmVnRG9tYWluc1tpXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZWdEb21haW4pKTsKLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluUGFpcihpbnQgcmVnRG1uUGFpcikKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdEbW5QYWlyID09IE5PX0VOVU1SRCkKLQkJcmV0dXJuIGZhbHNlOworCWlmIChyZWdkbW4gPT0gTk9fRU5VTVJEKQorCQlyZXR1cm4gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykgewotCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW5QYWlyKQotCQkJcmV0dXJuIHRydWU7CisJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJlZ2RtbikKKwkJCXJldHVybiAmcmVnRG9tYWluUGFpcnNbaV07CiAJfQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCByZWdEbW4sCi0JCQkgICAgICAgdTE2IGNoYW5uZWxGbGFnLCBzdHJ1Y3QgcmVnRG9tYWluICpyZCkKK2ludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaW50IGksIGZvdW5kOwotCXU2NCBmbGFncyA9IE5PX1JFUTsKLQlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ1BhaXIgPSBOVUxMOwotCWludCByZWdPcmc7Ci0KLQlyZWdPcmcgPSByZWdEbW47Ci0JaWYgKHJlZ0RtbiA9PSBDVFJZX0RFRkFVTFQpIHsKLQkJdTE2IHJkbnVtOwotCQlyZG51bSA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCQlpZiAoIShyZG51bSAmIENPVU5UUllfRVJEX0ZMQUcpKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluKHJkbnVtLCBOVUxMKSB8fAotCQkJICAgIGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpblBhaXIocmRudW0pKSB7Ci0JCQkJcmVnRG1uID0gcmRudW07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKHJlZ0RtbiAmIE1VTFRJX0RPTUFJTl9NQVNLKSA9PSAwKSB7Ci0JCWZvciAoaSA9IDAsIGZvdW5kID0gMDsKLQkJICAgICAoaSA8IEFSUkFZX1NJWkUocmVnRG9tYWluUGFpcnMpKSAmJiAoIWZvdW5kKTsgaSsrKSB7Ci0JCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCQlyZWdQYWlyID0gJnJlZ0RvbWFpblBhaXJzW2ldOwotCQkJCWZvdW5kID0gMTsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJGYWlsZWQgdG8gZmluZCByZWcgZG9tYWluIHBhaXIgJXVcbiIsIHJlZ0Rtbik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKCEoY2hhbm5lbEZsYWcgJiBDSEFOTkVMXzJHSFopKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW41R0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczVHSHo7Ci0JCX0KLQkJaWYgKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW4yR0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczJHSHo7Ci0JCX0KLQl9Ci0KLQlmb3VuZCA9IGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpbihyZWdEbW4sIHJkKTsKLQlpZiAoIWZvdW5kKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRmFpbGVkIHRvIGZpbmQgdW5pdGFyeSByZWcgZG9tYWluICV1XG4iLCByZWdEbW4pOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJcmQtPnBzY2FuICY9IHJlZ1BhaXItPnBzY2FuTWFzazsKLQkJaWYgKCgocmVnT3JnICYgTVVMVElfRE9NQUlOX01BU0spID09IDApICYmCi0JCSAgICAoZmxhZ3MgIT0gTk9fUkVRKSkgewotCQkJcmQtPmZsYWdzID0gZmxhZ3M7Ci0JCX0KLQotCQlyZC0+ZmxhZ3MgJj0gKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSA/Ci0JCSAgICBSRUdfRE9NQUlOXzJHSFpfTUFTSyA6IFJFR19ET01BSU5fNUdIWl9NQVNLOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfYml0X3NldChpbnQgYml0LCB1NjQgKmJpdG1hc2spCi17Ci0JaW50IGJ5dGVPZmZzZXQsIGJpdG51bTsKLQl1NjQgdmFsOwotCi0JYnl0ZU9mZnNldCA9IGJpdCAvIDY0OwotCWJpdG51bSA9IGJpdCAtIGJ5dGVPZmZzZXQgKiA2NDsKLQl2YWwgPSAoKHU2NCkgMSkgPDwgYml0bnVtOwotCWlmIChiaXRtYXNrW2J5dGVPZmZzZXRdICYgdmFsKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHU4ICpyZWdjbGFzc2lkcywgdTMyIG1heHJlZ2lkcywKLQkJCSAgIHUzMiAqbnJlZ2lkcywgdTggcmVnY2xhc3NpZCkKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdjbGFzc2lkID09IDApCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXhyZWdpZHM7IGkrKykgewotCQlpZiAocmVnY2xhc3NpZHNbaV0gPT0gcmVnY2xhc3NpZCkKLQkJCXJldHVybjsKLQkJaWYgKHJlZ2NsYXNzaWRzW2ldID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBtYXhyZWdpZHMpCi0JCXJldHVybjsKLQllbHNlIHsKLQkJcmVnY2xhc3NpZHNbaV0gPSByZWdjbGFzc2lkOwotCQkqbnJlZ2lkcyArPSAxOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGVudW0gcmVnX2V4dF9iaXRtYXAgYml0KQotewotCXJldHVybiAoYWgtPmFoX2N1cnJlbnRSREV4dCAmICgxIDw8IGJpdCkpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0KLXN0YXRpYyB2b2lkIGF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucywKLQkJCQkgICAgICBpbnQgbmNoYW5zKQotewotCWludCBpLCBqLCBuZXh0OwotCi0JZm9yIChuZXh0ID0gMDsgbmV4dCA8IG5jaGFuczsgbmV4dCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fTkZfUkVBRElOR1M7IGkrKykgewotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5jdXJySW5kZXggPSAwOwotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5wcml2TkYgPQotCQkJICAgIEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7Ci0JCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLmludmFsaWRORmNvdW50ID0KLQkJCSAgICBBUl9QSFlfQ0NBX0ZJTFRFUldJTkRPV19MRU5HVEg7Ci0JCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLm5mQ2FsQnVmZmVyW2pdID0KLQkJCQkgICAgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRTsKLQkJCX0KLQkJfQotCX0KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICB1MTYgYykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNTA7IGkrKykgewotCQlpZiAoIWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsKQotCQkJcmV0dXJuIC0xOwotCQllbHNlIGlmIChhaC0+YWhfY2hhbm5lbHNbaV0uY2hhbm5lbCA9PSBjKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgYm9vbAotYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICB1MTYgYywKLQkJICAgICAgIHUxNiBjX2xvLAotCQkgICAgICAgdTE2IGNfaGksCi0JCSAgICAgICB1MTYgbWF4Q2hhbiwKLQkJICAgICAgIHU4IGN0bCwKLQkJICAgICAgIGludCBwb3MsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwKLQkJICAgICAgIHN0cnVjdCBSZWdEbW5GcmVxQmFuZCAqZmJhbmQsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluICpyZCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBjbW9kZSAqY20sCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW5zLAotCQkgICAgICAgYm9vbCBlbmFibGVFeHRlbmRlZENoYW5uZWxzKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuOwotCWludCByZXQ7Ci0JdTMyIGNoYW5uZWxGbGFncyA9IDA7Ci0JdTggcHJpdkZsYWdzID0gMDsKLQotCWlmICghKGNfbG8gPD0gYyAmJiBjIDw9IGNfaGkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiYyAldSBvdXQgb2YgcmFuZ2UgWyV1Li4ldV1cbiIsCi0JCQljLCBjX2xvLCBjX2hpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9IQUxGX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9IQUxGUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBoYWxmIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9RVUFSVEVSX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBxdWFydGVyIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKChjICsgZmJhbmQtPmNoYW5uZWxTZXApIC8gMikgPiAobWF4Q2hhbiArIEhBTEZfTUFYQ0hBTkJXKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJImMgJXUgPiBtYXhDaGFuICV1XG4iLCBjLCBtYXhDaGFuKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICgoZmJhbmQtPnVzZVBhc3NTY2FuICYgSVNfRUNNX0NIQU4pICYmICFlbmFibGVFeHRlbmRlZENoYW5uZWxzKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgZWNtIGNoYW5uZWxcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKChyZC0+ZmxhZ3MgJiBOT19IT1NUQVApICYmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIlNraXBwaW5nIEhPU1RBUCBjaGFubmVsXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9GQ0NfREZTX0hUNDApKSAmJgotCSAgICAoZmJhbmQtPnVzZURmcykgJiYKLQkgICAgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCAhPSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9mY2NfZGZzX2h0NDAgPSAwKVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCSAgICAhKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoYWgsCi0JCQkJCQkgUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCkpICYmCi0JICAgICEoZmJhbmQtPnVzZURmcykgJiYgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCA9PSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9qYXBfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCkpICYmCi0JICAgIChmYmFuZC0+dXNlRGZzKSAmJgotCSAgICAocmQtPmNvbmZvcm1hbmNlVGVzdExpbWl0ID09IE1LSykpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyBIVDQwIGNoYW5uZWwgKGVuX2phcF9kZnNfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIENhbGN1bGF0ZSBjaGFubmVsIGZsYWdzICovCi0KLQljaGFubmVsRmxhZ3MgPSBjbS0+ZmxhZ3M7Ci0KLQlzd2l0Y2ggKGZiYW5kLT5jaGFubmVsQlcpIHsKLQljYXNlIENIQU5ORUxfSEFMRl9CVzoKLQkJY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSEFMRjsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX1FVQVJURVJfQlc6Ci0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1FVQVJURVI7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChmYmFuZC0+dXNlUGFzc1NjYW4gJiByZC0+cHNjYW4pCi0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1BBU1NJVkU7Ci0JZWxzZQotCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQlpZiAoZmJhbmQtPnVzZURmcyAmIHJkLT5kZnNNYXNrKQotCQlwcml2RmxhZ3MgPSBDSEFOTkVMX0RGUzsKLQllbHNlCi0JCXByaXZGbGFncyA9IDA7Ci0JaWYgKHJkLT5mbGFncyAmIExJTUlUX0ZSQU1FXzRNUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfNE1TX0xJTUlUOwotCWlmIChwcml2RmxhZ3MgJiBDSEFOTkVMX0RGUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JaWYgKHJkLT5mbGFncyAmIEFESE9DX1BFUl8xMUQpCi0JCXByaXZGbGFncyB8PSBDSEFOTkVMX1BFUl8xMURfQURIT0M7Ci0KLQlpZiAoY2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKSB7Ci0JCWlmICgoYyA8IDI0MTIpIHx8IChjID4gMjQ2MikpIHsKLQkJCWlmIChyZDVHSHoucmVnRG1uRW51bSA9PSBNS0sxIHx8Ci0JCQkgICAgcmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMikgewotCQkJCXUzMiByZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJCWlmICghKHJlZ2NhcCAmCi0JCQkJICAgICAgKEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQpKSAmJgotCQkJCSAgICBpc1VOSUkxT2RkQ2hhbihjKSkgewotCQkJCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcml2RmxhZ3MgfD0gQ0hBTk5FTF9ESVNBTExPV19BREhPQzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaXZGbGFncyB8PSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExQSkgfHwKLQkgICAgKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDIwKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUykpIHsKLQkJaWYgKHJkLT5mbGFncyAmIChBREhPQ19OT18xMUEgfCBESVNBTExPV19BREhPQ18xMUEpKQotCQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JfQotCi0JLyogRmlsbCBpbiBjaGFubmVsIGRldGFpbHMgKi8KLQotCXJldCA9IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KGFoLCBjKTsKLQlpZiAocmV0ID09IC0xKSB7Ci0JCWNoYW4gPSAmYWgtPmFoX2NoYW5uZWxzW3Bvc107Ci0JCWNoYW4tPmNoYW5uZWwgPSBjOwotCQljaGFuLT5tYXhSZWdUeFBvd2VyID0gZmJhbmQtPnBvd2VyRGZzOwotCQljaGFuLT5hbnRlbm5hTWF4ID0gZmJhbmQtPmFudGVubmFNYXg7Ci0JCWNoYW4tPnJlZ0RtbkZsYWdzID0gcmQtPmZsYWdzOwotCQljaGFuLT5tYXhUeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5taW5UeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgPSBjaGFubmVsRmxhZ3M7Ci0JCWNoYW4tPnByaXZGbGFncyA9IHByaXZGbGFnczsKLQl9IGVsc2UgewotCQljaGFuID0gJmFoLT5haF9jaGFubmVsc1tyZXRdOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgfD0gY2hhbm5lbEZsYWdzOwotCQljaGFuLT5wcml2RmxhZ3MgfD0gcHJpdkZsYWdzOwotCX0KLQotCS8qIFNldCBDVExzICovCi0KLQlpZiAoKGNtLT5mbGFncyAmIENIQU5ORUxfQUxMKSA9PSBDSEFOTkVMX0EpCi0JCWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzBdID0gY3RsOwotCWVsc2UgaWYgKChjbS0+ZmxhZ3MgJiBDSEFOTkVMX0FMTCkgPT0gQ0hBTk5FTF9CKQotCQljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXSA9IGN0bDsKLQllbHNlIGlmICgoY20tPmZsYWdzICYgQ0hBTk5FTF9BTEwpID09IENIQU5ORUxfRykKLQkJY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMl0gPSBjdGw7Ci0KLQlyZXR1cm4gKHJldCA9PSAtMSkgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfamFwYW5fY2hlY2soc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGludCBiLAotCQkJCSAgIHN0cnVjdCByZWdEb21haW4gKnJkNUdIeikKLXsKLQlib29sIHNraXBiYW5kID0gZmFsc2U7Ci0JaW50IGk7Ci0JdTMyIHJlZ2NhcDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGpfYmFuZGNoZWNrKTsgaSsrKSB7Ci0JCWlmIChqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCA9PSBiKSB7Ci0JCQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJaWYgKChqX2JhbmRjaGVja1tpXS5lZXByb21mbGFndG9jaGVjayAmIHJlZ2NhcCkgPT0gMCkgewotCQkJCXNraXBiYW5kID0gdHJ1ZTsKLQkJCX0gZWxzZSBpZiAoKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMikgfHwKLQkJCQkgIChyZWdjYXAgJiBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCkpIHsKLQkJCQlyZDVHSHotPmRmc01hc2sgfD0gREZTX01LSzQ7Ci0JCQkJcmQ1R0h6LT5wc2NhbiB8PSBQU0NBTl9NS0szOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkiU2tpcHBpbmcgJWQgZnJlcSBiYW5kXG4iLCBqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCk7Ci0KLQlyZXR1cm4gc2tpcGJhbmQ7Ci19Ci0KLWJvb2wKLWF0aDlrX3JlZ2RfaW5pdF9jaGFubmVscyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgdTMyIG1heGNoYW5zLAotCQkJIHUzMiAqbmNoYW5zLCB1OCAqcmVnY2xhc3NpZHMsCi0JCQkgdTMyIG1heHJlZ2lkcywgdTMyICpucmVnaWRzLCB1MTYgY2MsCi0JCQkgYm9vbCBlbmFibGVPdXRkb29yLAotCQkJIGJvb2wgZW5hYmxlRXh0ZW5kZWRDaGFubmVscykKLXsKLQl1MTYgbWF4Q2hhbiA9IDcwMDA7CiAJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwgcmQyR0h6OwotCWNvbnN0IHN0cnVjdCBjbW9kZSAqY207Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucyA9ICZhaC0+YWhfY2hhbm5lbHNbMF07Ci0JaW50IG5leHQgPSAwLCBiOwotCXU4IGN0bDsKLQlpbnQgcmVnZG1uOwotCXUxNiBjaGFuU2VwOwotCXVuc2lnbmVkIGxvbmcgKm1vZGVzX2F2YWlsOwotCURFQ0xBUkVfQklUTUFQKG1vZGVzX2FsbG93ZWQsIEFUSDlLX01PREVfTUFYKTsKLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJjYyAldSAlcyAlc1xuIiwgY2MsCi0JCSBlbmFibGVPdXRkb29yID8gIkVuYWJsZSBvdXRkb29yIiA6ICIiLAotCQkgZW5hYmxlRXh0ZW5kZWRDaGFubmVscyA/ICJFbmFibGUgZWNtIiA6ICIiKTsKLQotCWlmICghYXRoOWtfcmVnZF9pc19jY29kZV92YWxpZChhaCwgY2MpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiSW52YWxpZCBjb3VudHJ5IGNvZGUgJWRcbiIsIGNjKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwl1MTYgcmVnZG1uOwogCiAJaWYgKCFhdGg5a19yZWdkX2lzX2VlcHJvbV92YWxpZChhaCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCSJJbnZhbGlkIEVFUFJPTSBjb250ZW50c1xuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KGFoKTsKKwlyZWdkbW4gPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHJlZ2Rtbik7CiAKLQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfREVGQVVMVCkgewotCQlhaC0+YWhfY291bnRyeUNvZGUgPSBjYyAmIENPVU5UUllfQ09ERV9NQVNLOwotCQlpZiAoKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQpICYmCi0JCSAgICAoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpID09IENUUllfREVGQVVMVCkpIHsKLQkJCWFoLT5haF9jb3VudHJ5Q29kZSA9IENUUllfVU5JVEVEX1NUQVRFUzsKLQkJfQotCX0KKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCAmJgorCSAgICByZWdkbW4gPT0gQ1RSWV9ERUZBVUxUKQorCQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX1VOSVRFRF9TVEFURVM7CiAKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCWlmIChhaC0+YWhfY291bnRyeUNvZGUgPT0gQ1RSWV9ERUZBVUxUKSB7Ci0JCXJlZ2RtbiA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCkgewogCQljb3VudHJ5ID0gTlVMTDsKIAl9IGVsc2UgewotI2VuZGlmCi0JCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeShhaC0+YWhfY291bnRyeUNvZGUpOworCQljb3VudHJ5ID0gYXRoOWtfcmVnZF9maW5kX2NvdW50cnkoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKIAkJaWYgKGNvdW50cnkgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCQkiQ291bnRyeSBpcyBOVUxMISEhISwgY2M9ICVkXG4iLAotCQkJCWFoLT5haF9jb3VudHJ5Q29kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7CisJCQkJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKIAkJCXJlZ2RtbiA9IGNvdW50cnktPnJlZ0RtbkVudW07Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQkJCWlmICgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSAmCi0JCQkgICAgICBXT1JMRF9TS1VfTUFTSykgPT0gV09STERfU0tVX1BSRUZJWCkgJiYKLQkJCSAgICAoY2MgPT0gQ1RSWV9VTklURURfU1RBVEVTKSkgewotCQkJCWlmICghaXNXd3JTS1VfTm9NaWRiYW5kKGFoKQotCQkJCSAgICAmJiBhdGg5a19yZWdkX2lzX2ZjY19taWRiYW5kX3N1cHBvcnRlZChhaCkpCi0JCQkJCXJlZ2RtbiA9IEZDQzNfRkNDQTsKLQkJCQllbHNlCi0JCQkJCXJlZ2RtbiA9IEZDQzFfRkNDQTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQl9Ci0jZW5kaWYKLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIH5DSEFOTkVMXzJHSFosCi0JCQkJCSAgICAmcmQ1R0h6KSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIkNvdWxkbid0IGZpbmQgdW5pdGFyeSAiCi0JCQkiNUdIeiByZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJYWgtPmFoX2NvdW50cnlDb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIENIQU5ORUxfMkdIWiwKLQkJCQkJICAgICZyZDJHSHopKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiQ291bGRuJ3QgZmluZCB1bml0YXJ5IDJHSHogIgotCQkJInJlZyBkb21haW4gZm9yIGNvdW50cnkgJXVcbiIsCi0JCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKCFpc1d3clNLVShhaCkgJiYgKChyZDVHSHoucmVnRG1uRW51bSA9PSBGQ0MxKSB8fAotCQkJICAgICAgKHJkNUdIei5yZWdEbW5FbnVtID09IEZDQzIpKSkgewotCQlpZiAoYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoYWgpKSB7Ci0JCQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJCQkgICAgRkNDM19GQ0NBLAotCQkJCQkJCSAgICB+Q0hBTk5FTF8yR0haLAotCQkJCQkJCSAgICAmcmQ1R0h6KSkgewotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJCSJDb3VsZG4ndCBmaW5kIHVuaXRhcnkgNUdIeiAiCi0JCQkJCSJyZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQorCWFoLT5yZWd1bGF0b3J5LnJlZ3BhaXIgPSBhdGg5a19nZXRfcmVncGFpcihyZWdkbW4pOworCisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIk5vIHJlZ3VsYXRvcnkgZG9tYWluIHBhaXIgZm91bmQsIGNhbm5vdCBjb250aW51ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJbW9kZXNfYXZhaWwgPSBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlczsKKwlpZiAoIWNvdW50cnkpCisJCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeV9ieV9yZChyZWdkbW4pOworCisJaWYgKGNvdW50cnkpIHsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gY291bnRyeS0+aXNvTmFtZVswXTsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKIAl9IGVsc2UgewotCQlhdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhhaCwgY291bnRyeSwgJnJkNUdIeiwgbW9kZXNfYWxsb3dlZCk7Ci0JCW1vZGVzX2F2YWlsID0gbW9kZXNfYWxsb3dlZDsKLQotCQlpZiAoIWVuYWJsZU91dGRvb3IpCi0JCQltYXhDaGFuID0gY291bnRyeS0+b3V0ZG9vckNoYW5TdGFydDsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gJzAnOworCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMV0gPSAnMCc7CiAJfQogCi0JbmV4dCA9IDA7Ci0KLQlpZiAobWF4Y2hhbnMgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpCi0JCW1heGNoYW5zID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCi0JZm9yIChjbSA9IG1vZGVzOyBjbSA8ICZtb2Rlc1tBUlJBWV9TSVpFKG1vZGVzKV07IGNtKyspIHsKLQkJdTE2IGMsIGNfaGksIGNfbG87Ci0JCXU2NCAqY2hhbm5lbEJNID0gTlVMTDsKLQkJc3RydWN0IHJlZ0RvbWFpbiAqcmQgPSBOVUxMOwotCQlzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgKmZiYW5kID0gTlVMTCwgKmZyZXFzOwotCQlpbnQ4X3QgbG93X2FkaiA9IDAsIGhpX2FkaiA9IDA7Ci0KLQkJaWYgKCF0ZXN0X2JpdChjbS0+bW9kZSwgbW9kZXNfYXZhaWwpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSIhYXZhaWwgbW9kZSAlZCBmbGFncyAweCV4XG4iLAotCQkJCWNtLT5tb2RlLCBjbS0+ZmxhZ3MpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhhaCwgY20tPmZsYWdzLCAmY19sbywgJmNfaGkpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJjaGFubmVscyAweCV4IG5vdCBzdXBwb3J0ZWQgIgotCQkJCSJieSBoYXJkd2FyZVxuIiwgY20tPmZsYWdzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3dpdGNoIChjbS0+bW9kZSkgewotCQljYXNlIEFUSDlLX01PREVfMTFBOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDIwOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDQwUExVUzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOgotCQkJcmQgPSAmcmQ1R0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWE7Ci0JCQlmcmVxcyA9ICZyZWdEbW41R2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIEFUSDlLX01PREVfMTFCOgotCQkJcmQgPSAmcmQyR0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWI7Ci0JCQlmcmVxcyA9ICZyZWdEbW4yR2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCB8IENUTF8xMUI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEg5S19NT0RFXzExRzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQyMDoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVM6Ci0JCWNhc2UgQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzoKLQkJCXJkID0gJnJkMkdIejsKLQkJCWNoYW5uZWxCTSA9IHJkLT5jaGFuMTFnOwotCQkJZnJlcXMgPSAmcmVnRG1uMkdoejExZ0ZyZXFbMF07Ci0JCQljdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfMTFHOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJVbmtub3duIEhBTCBtb2RlIDB4JXhcbiIsIGNtLT5tb2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGF0aDlrX3JlZ2RfaXNfY2hhbl9ibV96ZXJvKGNoYW5uZWxCTSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUykgfHwKLQkJICAgIChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMpKSB7Ci0JCQloaV9hZGogPSAtMjA7Ci0JCX0KLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMpIHx8Ci0JCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUykpIHsKLQkJCWxvd19hZGogPSAyMDsKLQkJfQotCi0JCS8qIFhYWDogQWRkIGEgaGVscGVyIGhlcmUgaW5zdGVhZCAqLwotCQlmb3IgKGIgPSAwOyBiIDwgNjQgKiBCTUxFTjsgYisrKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc19iaXRfc2V0KGIsIGNoYW5uZWxCTSkpIHsKLQkJCQlmYmFuZCA9ICZmcmVxc1tiXTsKLQkJCQlpZiAocmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMQotCQkJCSAgICB8fCByZDVHSHoucmVnRG1uRW51bSA9PSBNS0syKSB7Ci0JCQkJCWlmIChhdGg5a19yZWdkX2phcGFuX2NoZWNrKGFoLAotCQkJCQkJCQkgICBiLAotCQkJCQkJCQkgICAmcmQ1R0h6KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHJlZ2NsYXNzaWRzLAotCQkJCQkJCSAgIG1heHJlZ2lkcywKLQkJCQkJCQkgICBucmVnaWRzLAotCQkJCQkJCSAgIGZiYW5kLT4KLQkJCQkJCQkgICByZWdDbGFzc0lkKTsKLQotCQkJCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmIChyZCA9PSAmcmQ1R0h6KSkgewotCQkJCQljaGFuU2VwID0gNDA7Ci0JCQkJCWlmIChmYmFuZC0+bG93Q2hhbm5lbCA9PSA1MjgwKQotCQkJCQkJbG93X2FkaiArPSAyMDsKLQotCQkJCQlpZiAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTE3MCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZQotCQkJCQljaGFuU2VwID0gZmJhbmQtPmNoYW5uZWxTZXA7Ci0KLQkJCQlmb3IgKGMgPSBmYmFuZC0+bG93Q2hhbm5lbCArIGxvd19hZGo7Ci0JCQkJICAgICAoKGMgPD0gKGZiYW5kLT5oaWdoQ2hhbm5lbCArIGhpX2FkaikpICYmCi0JCQkJICAgICAgKGMgPj0gKGZiYW5kLT5sb3dDaGFubmVsICsgbG93X2FkaikpKTsKLQkJCQkgICAgIGMgKz0gY2hhblNlcCkgewotCQkJCQlpZiAobmV4dCA+PSBtYXhjaGFucykgewotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCQkJCSJ0b28gbWFueSBjaGFubmVscyAiCi0JCQkJCQkJImZvciBjaGFubmVsIHRhYmxlXG4iKTsKLQkJCQkJCWdvdG8gZG9uZTsKLQkJCQkJfQotCQkJCQlpZiAoYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChhaCwKLQkJCQkJCSAgIGMsIGNfbG8sIGNfaGksCi0JCQkJCQkgICBtYXhDaGFuLCBjdGwsCi0JCQkJCQkgICBuZXh0LAotCQkJCQkJICAgcmQ1R0h6LAotCQkJCQkJICAgZmJhbmQsIHJkLCBjbSwKLQkJCQkJCSAgIGljaGFucywKLQkJCQkJCSAgIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpKQotCQkJCQkJbmV4dCsrOwotCQkJCX0KLQkJCQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCQkJCSAgICAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTI4MCkpIHsKLQkJCQkJbG93X2FkaiAtPSAyMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci1kb25lOgotCWlmIChuZXh0ICE9IDApIHsKLQkJaW50IGk7Ci0KLQkJaWYgKG5leHQgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJInRvbyBtYW55IGNoYW5uZWxzICV1OyB0cnVuY2F0aW5nIHRvICV1XG4iLAotCQkJCW5leHQsIChpbnQpIEFSUkFZX1NJWkUoYWgtPmFoX2NoYW5uZWxzKSk7Ci0JCQluZXh0ID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCQl9Ci0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0JCWF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoaWNoYW5zLCBuZXh0KTsKLSNlbmRpZgotCQlhdGg5a19yZWdkX3NvcnQoaWNoYW5zLCBuZXh0LAotCQkJCXNpemVvZihzdHJ1Y3QgYXRoOWtfY2hhbm5lbCksCi0JCQkJYXRoOWtfcmVnZF9jaGFuc29ydCk7Ci0KLQkJYWgtPmFoX25jaGFuID0gbmV4dDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiQ2hhbm5lbCBsaXN0OlxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXh0OyBpKyspIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJImNoYW46ICVkIGZsYWdzOiAweCV4XG4iLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsRmxhZ3MpOwotCQl9Ci0JfQotCSpuY2hhbnMgPSBuZXh0OwotCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCi0JYWgtPmFoX2N1cnJlbnRSREluVXNlID0gcmVnZG1uOwotCWFoLT5haF9jdXJyZW50UkQ1RyA9IHJkNUdIei5yZWdEbW5FbnVtOwotCWFoLT5haF9jdXJyZW50UkQyRyA9IHJkMkdIei5yZWdEbW5FbnVtOwotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJYWgtPmFoX2lzb1swXSA9IDA7Ci0JCWFoLT5haF9pc29bMV0gPSAwOwotCX0gZWxzZSB7Ci0JCWFoLT5haF9pc29bMF0gPSBjb3VudHJ5LT5pc29OYW1lWzBdOwotCQlhaC0+YWhfaXNvWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKLQl9Ci0KLQlyZXR1cm4gbmV4dCAhPSAwOwotfQotCi1zdHJ1Y3QgYXRoOWtfY2hhbm5lbCoKLWF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmJhc2UsICpjYzsKLQotCWludCBmbGFncyA9IGMtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1M7Ci0JaW50IG4sIGxpbTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCSJjaGFubmVsICV1LzB4JXggKDB4JXgpIHJlcXVlc3RlZFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzLCBmbGFncyk7CisJCSJDb3VudHJ5IGFscGhhMiBiZWluZyB1c2VkOiAlYyVjXG4iCisJCSJSZWd1bGF0b3J5LlJlZ3BhaXIgZGV0ZWN0ZWQ6IDB4JTB4XG4iLAorCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMF0sIGFoLT5yZWd1bGF0b3J5LmFscGhhMlsxXSwKKwkJYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSk7CiAKLQljYyA9IGFoLT5haF9jdXJjaGFuOwotCWlmIChjYyAhPSBOVUxMICYmIGNjLT5jaGFubmVsID09IGMtPmNoYW5uZWwgJiYKLQkgICAgKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQlpZiAoKGNjLT5wcml2RmxhZ3MgJiBDSEFOTkVMX0lOVEVSRkVSRU5DRSkgJiYKLQkJICAgIChjYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ERlMpKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWVsc2UKLQkJCXJldHVybiBjYzsKLQl9Ci0KLQliYXNlID0gYWgtPmFoX2NoYW5uZWxzOwotCW4gPSBhaC0+YWhfbmNoYW47Ci0KLQlmb3IgKGxpbSA9IG47IGxpbSAhPSAwOyBsaW0gPj49IDEpIHsKLQkJaW50IGQ7Ci0JCWNjID0gJmJhc2VbbGltID4+IDFdOwotCQlkID0gYy0+Y2hhbm5lbCAtIGNjLT5jaGFubmVsOwotCQlpZiAoZCA9PSAwKSB7Ci0JCQlpZiAoKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQkJCWlmICgoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfSU5URVJGRVJFTkNFKSAmJgotCQkJCSAgICAoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfREZTKSkKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gY2M7Ci0JCQl9Ci0JCQlkID0gZmxhZ3MgLSAoY2MtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1MpOwotCQl9Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiY2hhbm5lbCAldS8weCV4IGQgJWRcbiIsCi0JCQljYy0+Y2hhbm5lbCwgY2MtPmNoYW5uZWxGbGFncywgZCk7Ci0JCWlmIChkID4gMCkgewotCQkJYmFzZSA9IGNjICsgMTsKLQkJCWxpbS0tOwotCQl9Ci0JfQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJubyBtYXRjaCBmb3IgJXUvMHgleFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAotdTMyCi1hdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IE5VTEw7Ci0KLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKCFpY2hhbikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaWNoYW4tPmFudGVubmFNYXg7Ci19Ci0KLXUzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3UzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBjdGwgPSBOT19DVEw7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuOwogCi0JaWYgKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQgJiYgaXNXd3JTS1UoYWgpKSB7CisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyIHx8CisJICAgIChhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPT0gQ1RSWV9ERUZBVUxUICYmCisJICAgICBpc193d3Jfc2t1KGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSkpKSB7CiAJCWlmIChJU19DSEFOX0IoY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFCOwogCQllbHNlIGlmIChJU19DSEFOX0coY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFHOwogCQllbHNlCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFBOwotCX0gZWxzZSB7Ci0JCWljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKLQkJaWYgKGljaGFuICE9IE5VTEwpIHsKLQkJCS8qIEZJWE1FICovCi0JCQlpZiAoSVNfQ0hBTl9BKGljaGFuKSkKLQkJCQljdGwgPSBpY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMF07Ci0JCQllbHNlIGlmIChJU19DSEFOX0IoaWNoYW4pKQotCQkJCWN0bCA9IGljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXTsKLQkJCWVsc2UgaWYgKElTX0NIQU5fRyhpY2hhbikpCi0JCQkJY3RsID0gaWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzJdOwotCi0JCQlpZiAoSVNfQ0hBTl9HKGNoYW4pICYmIChjdGwgJiAweGYpID09IENUTF8xMUIpCi0JCQkJY3RsID0gKGN0bCAmIH4weGYpIHwgQ1RMXzExRzsKLQkJfQorCQlyZXR1cm4gY3RsOwogCX0KKworCWlmIChJU19DSEFOX0IoY2hhbikpCisJCWN0bCA9IGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ18yZ2h6X2N0bCB8IENUTF8xMUI7CisJZWxzZSBpZiAoSVNfQ0hBTl9HKGNoYW4pKQorCQljdGwgPSBhaC0+cmVndWxhdG9yeS5yZWdwYWlyLT5yZWdfMmdoel9jdGwgfCBDVExfMTFHOworCWVsc2UKKwkJY3RsID0gYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnXzVnaHpfY3RsIHwgQ1RMXzExQTsKKwogCXJldHVybiBjdGw7CiB9Ci0KLXZvaWQgYXRoOWtfcmVnZF9nZXRfY3VycmVudF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NvdW50cnlfZW50cnkgKmN0cnkpCi17Ci0JdTE2IHJkID0gYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpOwotCi0JY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGZhbHNlOwotCWlmIChyZCA9PSBDVFJZX0RFRkFVTFQpCi0JCWN0cnktPmlzTXVsdGlkb21haW4gPSB0cnVlOwotCWVsc2UgaWYgKCEocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSkKLQkJY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGlzV3dyU0tVKGFoKTsKLQotCWN0cnktPmNvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCWN0cnktPnJlZ0RtbkVudW0gPSBhaC0+YWhfY3VycmVudFJEOwotCWN0cnktPnJlZ0RtbjVHID0gYWgtPmFoX2N1cnJlbnRSRDVHOwotCWN0cnktPnJlZ0RtbjJHID0gYWgtPmFoX2N1cnJlbnRSRDJHOwotCWN0cnktPmlzb1swXSA9IGFoLT5haF9pc29bMF07Ci0JY3RyeS0+aXNvWzFdID0gYWgtPmFoX2lzb1sxXTsKLQljdHJ5LT5pc29bMl0gPSBhaC0+YWhfaXNvWzJdOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oCmluZGV4IDUxMmQ5OTAuLjlmNWZiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNywxMjcgKzE3LDggQEAKICNpZm5kZWYgUkVHRF9ICiAjZGVmaW5lIFJFR0RfSAogCi0jaW5jbHVkZSAiYXRoOWsuaCIKLQotI2RlZmluZSBCTUxFTiAyCi0jZGVmaW5lIEJNWkVSTyB7KHU2NCkgMCwgKHU2NCkgMH0KLQotI2RlZmluZSBCTShfZmEsIF9mYiwgX2ZjLCBfZmQsIF9mZSwgX2ZmLCBfZmcsIF9maCwgX2ZpLCBfZmosIF9maywgX2ZsKSBcCi0JeygoKChfZmEgPj0gMCkgJiYgKF9mYSA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZhKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYiA+PSAwKSAmJiAoX2ZiIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmIpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZjID49IDApICYmIChfZmMgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mYykgOiAodTY0KSAwKSB8IFwKLQkoKChfZmQgPj0gMCkgJiYgKF9mZCA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZkKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZSA+PSAwKSAmJiAoX2ZlIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmUpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZmID49IDApICYmIChfZmYgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mZikgOiAodTY0KSAwKSB8IFwKLQkoKChfZmcgPj0gMCkgJiYgKF9mZyA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZnKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maCA+PSAwKSAmJiAoX2ZoIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmgpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZpID49IDApICYmIChfZmkgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmogPj0gMCkgJiYgKF9maiA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZqKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mayA+PSAwKSAmJiAoX2ZrIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmspIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZsID49IDApICYmIChfZmwgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mbCkgOiAodTY0KSAwKSB8IFwKLQkJCSgoKChfZmEgPiA2MykgJiYgKF9mYSA8IDEyOCkpID8gXAotCQkJKCgodTY0KSAxKSA8PCAoX2ZhIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYiA+IDYzKSAmJiAoX2ZiIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mYiAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmMgPiA2MykgJiYgKF9mYyA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmMgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZkID4gNjMpICYmIChfZmQgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZkIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZSA+IDYzKSAmJiAoX2ZlIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mZSAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmYgPiA2MykgJiYgKF9mZiA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmYgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZnID4gNjMpICYmIChfZmcgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZnIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maCA+IDYzKSAmJiAoX2ZoIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9maCAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmkgPiA2MykgJiYgKF9maSA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmkgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZqID4gNjMpICYmIChfZmogPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZqIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mayA+IDYzKSAmJiAoX2ZrIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mayAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmwgPiA2MykgJiYgKF9mbCA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmwgLSA2NCkpIDogKHU2NCkgMCkpKX0KLQotI2RlZmluZSBERUZfUkVHRE1OICAgICAgRkNDMV9GQ0NBCi0jZGVmaW5lIERFRl9ETU5fNSAgICAgICBGQ0MxCi0jZGVmaW5lIERFRl9ETU5fMiAgICAgICBGQ0NBCiAjZGVmaW5lIENPVU5UUllfRVJEX0ZMQUcgICAgICAgIDB4ODAwMAogI2RlZmluZSBXT1JMRFdJREVfUk9BTUlOR19GTEFHICAweDQwMDAKLSNkZWZpbmUgU1VQRVJfRE9NQUlOX01BU0sgICAweDBmZmYKLSNkZWZpbmUgQ09VTlRSWV9DT0RFX01BU0sgICAweDNmZmYKLSNkZWZpbmUgQ0ZfSU5URVJGRVJFTkNFICAgICAoQ0hBTk5FTF9DV19JTlQgfCBDSEFOTkVMX1JBREFSX0lOVCkKLSNkZWZpbmUgQ0hBTk5FTF8xNCAgICAgICgyNDg0KQotI2RlZmluZSBJU18xMUdfQ0gxNChfY2gsX2NmKSBcCi0gICAgKCgoX2NoKSA9PSBDSEFOTkVMXzE0KSAmJiAoKF9jZikgPT0gQ0hBTk5FTF9HKSkKLQotI2RlZmluZSBOT19QU0NBTiAgICAweDBVTEwKLSNkZWZpbmUgUFNDQU5fRkNDICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMCi0jZGVmaW5lIFBTQ0FOX0ZDQ19UIDB4MDAwMDAwMDAwMDAwMDAwMlVMTAotI2RlZmluZSBQU0NBTl9FVFNJICAweDAwMDAwMDAwMDAwMDAwMDRVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMSAgMHgwMDAwMDAwMDAwMDAwMDA4VUxMCi0jZGVmaW5lIFBTQ0FOX01LSzIgIDB4MDAwMDAwMDAwMDAwMDAxMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBICAweDAwMDAwMDAwMDAwMDAwMjBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQV9HICAgIDB4MDAwMDAwMDAwMDAwMDA0MFVMTAotI2RlZmluZSBQU0NBTl9FVFNJQSAweDAwMDAwMDAwMDAwMDAwODBVTEwKLSNkZWZpbmUgUFNDQU5fRVRTSUIgMHgwMDAwMDAwMDAwMDAwMTAwVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0lDIDB4MDAwMDAwMDAwMDAwMDIwMFVMTAotI2RlZmluZSBQU0NBTl9XV1IgICAweDAwMDAwMDAwMDAwMDA0MDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTEgMHgwMDAwMDAwMDAwMDAwODAwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0ExX0cgICAweDAwMDAwMDAwMDAwMDEwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTIgMHgwMDAwMDAwMDAwMDAyMDAwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0EyX0cgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMyAgMHgwMDAwMDAwMDAwMDA4MDAwVUxMCi0jZGVmaW5lIFBTQ0FOX0RFRkVSIDB4N0ZGRkZGRkZGRkZGRkZGRlVMTAotI2RlZmluZSBJU19FQ01fQ0hBTiAweDgwMDAwMDAwMDAwMDAwMDBVTEwKLQotI2RlZmluZSBpc1d3clNLVShfYWgpIFwKLQkoKChhdGg5a19yZWdkX2dldF9lZXByb21SRCgoX2FoKSkgJiBXT1JMRF9TS1VfTUFTSykgPT0gXAotCQlXT1JMRF9TS1VfUFJFRklYKSB8fCBcCi0JCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUkxEKSkKLQotI2RlZmluZSBpc1d3clNLVV9Ob01pZGJhbmQoX2FoKSBcCi0JKChhdGg5a19yZWdkX2dldF9lZXByb21SRCgoX2FoKSkgPT0gV09SM19XT1JMRCkgfHwgXAotCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUjRfV09STEQpIHx8IFwKLQkoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoX2FoKSA9PSBXT1I1X0VUU0lDKSkKLQotI2RlZmluZSBpc1VOSUkxT2RkQ2hhbihjaCkgXAotCSgoY2ggPT0gNTE3MCkgfHwgKGNoID09IDUxOTApIHx8IChjaCA9PSA1MjEwKSB8fCAoY2ggPT0gNTIzMCkpCi0KLSNkZWZpbmUgSVNfSFQ0MF9NT0RFKF9tb2RlKQkJCQkJXAotCSgoKF9tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUyAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgICAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTICAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTKSA/IHRydWUgOiBmYWxzZSkpCi0KLSNkZWZpbmUgQ0hBTl9GTEFHUyAgICAgIChDSEFOTkVMX0FMTHxDSEFOTkVMX0hBTEZ8Q0hBTk5FTF9RVUFSVEVSKQotCi0jZGVmaW5lIHN3YXBfYXJyYXkoX2EsIF9iLCBfc2l6ZSkgeyAgICAgICAgICAgICAgICAgICBcCi0JdTggKnMgPSBfYjsgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpbnQgaSA9IF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXU4IHRtcCA9ICpfYTsgICAgICAgICAgICAgXAotCQkqX2ErKyA9ICpzOyAgICAgICAgICAgICAgICAgICAgIFwKLQkJKnMrKyA9IHRtcDsgICAgICAgICAgICAgICAgICAgICBcCi0JfSB3aGlsZSAoLS1pKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfYSAtPSBfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0KLSNkZWZpbmUgSEFMRl9NQVhDSEFOQlcgICAgICAgICAgMTAKIAogI2RlZmluZSBNVUxUSV9ET01BSU5fTUFTSyAweEZGMDAKIApAQCAtMTQ3LDgxICsyOCwyNyBAQAogI2RlZmluZSBDSEFOTkVMX0hBTEZfQlcgICAgICAgICAxMAogI2RlZmluZSBDSEFOTkVMX1FVQVJURVJfQlcgICAgICA1CiAKLXR5cGVkZWYgaW50IGF0aF9oYWxfY21wX3QoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCiBzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgewogCXUxNiByZWdEbW5FbnVtOwotCXUxNiByZWdEbW41R0h6OwotCXUxNiByZWdEbW4yR0h6OwotCXUzMiBmbGFnczVHSHo7Ci0JdTMyIGZsYWdzMkdIejsKLQl1NjQgcHNjYW5NYXNrOwotCXUxNiBzaW5nbGVDQzsKLX07Ci0KLXN0cnVjdCBjY21hcCB7Ci0JY2hhciBpc29OYW1lWzNdOwotCXUxNiBjb3VudHJ5Q29kZTsKKwl1MTYgcmVnXzVnaHpfY3RsOworCXUxNiByZWdfMmdoel9jdGw7CiB9OwogCiBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgewogCXUxNiBjb3VudHJ5Q29kZTsKIAl1MTYgcmVnRG1uRW51bTsKIAljb25zdCBjaGFyICppc29OYW1lOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JYm9vbCBhbGxvdzExZzsKLQlib29sIGFsbG93MTFhVHVyYm87Ci0JYm9vbCBhbGxvdzExZ1R1cmJvOwotCWJvb2wgYWxsb3cxMW5nMjA7Ci0JYm9vbCBhbGxvdzExbmc0MDsKLQlib29sIGFsbG93MTFuYTIwOwotCWJvb2wgYWxsb3cxMW5hNDA7Ci0JdTE2IG91dGRvb3JDaGFuU3RhcnQ7CiB9OwogCi1zdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgewotCXUxNiBsb3dDaGFubmVsOwotCXUxNiBoaWdoQ2hhbm5lbDsKLQl1OCBwb3dlckRmczsKLQl1OCBhbnRlbm5hTWF4OwotCXU4IGNoYW5uZWxCVzsKLQl1OCBjaGFubmVsU2VwOwotCXU2NCB1c2VEZnM7Ci0JdTY0IHVzZVBhc3NTY2FuOwotCXU4IHJlZ0NsYXNzSWQ7Ci19OwotCi1zdHJ1Y3QgcmVnRG9tYWluIHsKLQl1MTYgcmVnRG1uRW51bTsKLQl1OCBjb25mb3JtYW5jZVRlc3RMaW1pdDsKLQl1NjQgZGZzTWFzazsKLQl1NjQgcHNjYW47Ci0JdTMyIGZsYWdzOwotCXU2NCBjaGFuMTFhW0JNTEVOXTsKLQl1NjQgY2hhbjExYV90dXJib1tCTUxFTl07Ci0JdTY0IGNoYW4xMWFfZHluX3R1cmJvW0JNTEVOXTsKLQl1NjQgY2hhbjExYltCTUxFTl07Ci0JdTY0IGNoYW4xMWdbQk1MRU5dOwotCXU2NCBjaGFuMTFnX3R1cmJvW0JNTEVOXTsKLX07Ci0KLXN0cnVjdCBjbW9kZSB7Ci0JdTMyIG1vZGU7Ci0JdTMyIGZsYWdzOwotfTsKLQotI2RlZmluZSBZRVMgdHJ1ZQotI2RlZmluZSBOTyAgZmFsc2UKLQotc3RydWN0IGphcGFuX2JhbmRjaGVjayB7Ci0JdTE2IGZyZXFiYW5kYml0OwotCXUzMiBlZXByb21mbGFndG9jaGVjazsKLX07Ci0KLXN0cnVjdCBjb21tb25fbW9kZV9wb3dlciB7Ci0JdTE2IGxjaGFuOwotCXUxNiBoY2hhbjsKLQl1OCBwd3Jsdmw7CitzdHJ1Y3QgYXRoOWtfcmVndWxhdG9yeSB7CisJY2hhciBhbHBoYTJbMl07CisJdTE2IGNvdW50cnlfY29kZTsKKwl1MTYgbWF4X3Bvd2VyX2xldmVsOworCXUzMiB0cF9zY2FsZTsKKwl1MTYgY3VycmVudF9yZDsKKwl1MTYgY3VycmVudF9yZF9leHQ7CisJaW50MTZfdCBwb3dlcl9saW1pdDsKKwlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7CiB9OwogCiBlbnVtIENvdW50cnlDb2RlIHsKQEAgLTQwNiw3ICsyMzMsMTUgQEAKIAlDVFJZX0JFTEdJVU0yID0gNTAwMgogfTsKIAotdm9pZCBhdGg5a19yZWdkX2dldF9jdXJyZW50X2NvdW50cnkoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSAqY3RyeSk7Citib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpOworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2h3ICphaCk7Citjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4odm9pZCk7Cit2b2lkIGF0aDlrX3JlZ19hcHBseV93b3JsZF9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpOwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSk7CitpbnQgYXRoOWtfcmVnZF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpOwordTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworaW50IGF0aDlrX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZF9jb21tb24uaAppbmRleCA2ZGYxYjNiLi40ZDBlMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNTAsMTc2NiArMTUwLDMyNCBAQAogCU1LSzlfTUtLQyA9IDB4RkUsCiAJTUtLOV9NS0tBMiA9IDB4RkYsCiAKLQlBUEwxID0gMHgwMTUwLAotCUFQTDIgPSAweDAyNTAsCi0JQVBMMyA9IDB4MDM1MCwKLQlBUEw0ID0gMHgwNDUwLAotCUFQTDUgPSAweDA1NTAsCi0JQVBMNiA9IDB4MDY1MCwKLQlBUEw3ID0gMHgwNzUwLAotCUFQTDggPSAweDA4NTAsCi0JQVBMOSA9IDB4MDk1MCwKLQlBUEwxMCA9IDB4MTA1MCwKLQotCUVUU0kxID0gMHgwMTMwLAotCUVUU0kyID0gMHgwMjMwLAotCUVUU0kzID0gMHgwMzMwLAotCUVUU0k0ID0gMHgwNDMwLAotCUVUU0k1ID0gMHgwNTMwLAotCUVUU0k2ID0gMHgwNjMwLAotCUVUU0lBID0gMHgwQTMwLAotCUVUU0lCID0gMHgwQjMwLAotCUVUU0lDID0gMHgwQzMwLAotCi0JRkNDMSA9IDB4MDExMCwKLQlGQ0MyID0gMHgwMTIwLAotCUZDQzMgPSAweDAxNjAsCi0JRkNDNCA9IDB4MDE2NSwKLQlGQ0M1ID0gMHgwNTEwLAotCUZDQzYgPSAweDA2MTAsCi0JRkNDQSA9IDB4MEExMCwKLQotCUFQTEQgPSAweDBENTAsCi0KLQlNS0sxID0gMHgwMTQwLAotCU1LSzIgPSAweDAyNDAsCi0JTUtLMyA9IDB4MDM0MCwKLQlNS0s0ID0gMHgwNDQwLAotCU1LSzUgPSAweDA1NDAsCi0JTUtLNiA9IDB4MDY0MCwKLQlNS0s3ID0gMHgwNzQwLAotCU1LSzggPSAweDA4NDAsCi0JTUtLOSA9IDB4MDk0MCwKLQlNS0sxMCA9IDB4MEI0MCwKLQlNS0sxMSA9IDB4MTE0MCwKLQlNS0sxMiA9IDB4MTI0MCwKLQlNS0sxMyA9IDB4MEM0MCwKLQlNS0sxNCA9IDB4MTQ0MCwKLQlNS0sxNSA9IDB4MTU0MCwKLQlNS0tBID0gMHgwQTQwLAotCU1LS0MgPSAweDBBNTAsCi0KLQlOVUxMMSA9IDB4MDE5OCwKIAlXT1JMRCA9IDB4MDE5OSwKIAlERUJVR19SRUdfRE1OID0gMHgwMWZmLAogfTsKIAotZW51bSB7Ci0JRkNDID0gMHgxMCwKLQlNS0sgPSAweDQwLAotCUVUU0kgPSAweDMwLAorZW51bSBjdGxfZ3JvdXAgeworCUNUTF9GQ0MgPSAweDEwLAorCUNUTF9NS0sgPSAweDQwLAorCUNUTF9FVFNJID0gMHgzMCwKIH07CiAKLWVudW0gewotCU5PX1JFUSA9IDB4MDAwMDAwMDAsCi0JRElTQUxMT1dfQURIT0NfMTFBID0gMHgwMDAwMDAwMSwKLQlESVNBTExPV19BREhPQ18xMUFfVFVSQiA9IDB4MDAwMDAwMDIsCi0JTkVFRF9ORkMgPSAweDAwMDAwMDA0LAotCi0JQURIT0NfUEVSXzExRCA9IDB4MDAwMDAwMDgsCi0JQURIT0NfTk9fMTFBID0gMHgwMDAwMDAxMCwKLQotCVBVQkxJQ19TQUZFVFlfRE9NQUlOID0gMHgwMDAwMDAyMCwKLQlMSU1JVF9GUkFNRV80TVMgPSAweDAwMDAwMDQwLAotCi0JTk9fSE9TVEFQID0gMHgwMDAwMDA4MCwKLQotCVJFUV9NQVNLID0gMHgwMDAwMDBGRiwKLX07Ci0KLSNkZWZpbmUgUkVHX0RPTUFJTl8yR0haX01BU0sgICAgKFJFUV9NQVNLICYgXAotCSh+KEFESE9DX05PXzExQSB8IERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCKSkpCi0jZGVmaW5lIFJFR19ET01BSU5fNUdIWl9NQVNLICAgIFJFUV9NQVNLCi0KKy8qIFJlZ3BhaXIgdG8gQ1RMIGJhbmQgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyByZWdEb21haW5QYWlyc1tdID0gewotCXtOT19FTlVNUkQsIERFQlVHX1JFR19ETU4sIERFQlVHX1JFR19ETU4sIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX1dPUkxELCBOVUxMMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX0VUU0lCLCBOVUxMMSwgRVRTSUIsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX0VUU0lDLCBOVUxMMSwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJLyogcmVncGFpciwgNSBHSHogQ1RMLCAyIEdIeiBDVEwgKi8KKwl7Tk9fRU5VTVJELCBERUJVR19SRUdfRE1OLCBERUJVR19SRUdfRE1OfSwKKwl7TlVMTDFfV09STEQsIE5PX0NUTCwgQ1RMX0VUU0l9LAorCXtOVUxMMV9FVFNJQiwgTk9fQ1RMLCBDVExfRVRTSX0sCisJe05VTEwxX0VUU0lDLCBOT19DVEwsIENUTF9FVFNJfSwKIAotCXtGQ0MyX0ZDQ0EsIEZDQzIsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzJfV09STEQsIEZDQzIsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MyX0VUU0lDLCBGQ0MyLCBFVFNJQywgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDM19GQ0NBLCBGQ0MzLCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MzX1dPUkxELCBGQ0MzLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNF9GQ0NBLCBGQ0M0LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0ZDQzVfRkNDQSwgRkNDNSwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNl9GQ0NBLCBGQ0M2LCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0M2X1dPUkxELCBGQ0M2LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKKwl7RkNDMl9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDMl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MyX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzNfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzNfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7RkNDNF9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNV9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNl9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAogCi0Je0VUU0kxX1dPUkxELCBFVFNJMSwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTJfV09STEQsIEVUU0kyLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJM19XT1JMRCwgRVRTSTMsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0k0X1dPUkxELCBFVFNJNCwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTVfV09STEQsIEVUU0k1LCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJNl9XT1JMRCwgRVRTSTYsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCisJe0VUU0kxX1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJMl9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTNfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0k0X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJNV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTZfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKLQl7RVRTSTNfRVRTSUEsIEVUU0kzLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtGUkFOQ0VfUkVTLCBFVFNJMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJLyogWFhYOiBGb3IgRVRTSTNfRVRTSUEsIFdhcyBOT19DVEwgbWVhbnQgZm9yIHRoZSAyIEdIeiBiYW5kID8gKi8KKwl7RVRTSTNfRVRTSUEsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0ZSQU5DRV9SRVMsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKLQl7RkNDMV9XT1JMRCwgRkNDMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzFfRkNDQSwgRkNDMSwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMV9XT1JMRCwgQVBMMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDJfV09STEQsIEFQTDIsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwzX1dPUkxELCBBUEwzLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMNF9XT1JMRCwgQVBMNCwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDVfV09STEQsIEFQTDUsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw2X1dPUkxELCBBUEw2LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMOF9XT1JMRCwgQVBMOCwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDlfV09STEQsIEFQTDksIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCXtGQ0MxX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzFfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0FQTDFfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMMl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEwzX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDRfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMNV9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEw2X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtBUEw4X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtBUEw5X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0FQTDNfRkNDQSwgQVBMMywgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMV9FVFNJQywgQVBMMSwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDJfRVRTSUMsIEFQTDIsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX0FQTEQsIEFQTDIsIEFQTEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUix9LAorCXtBUEwzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEwxX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfRVRTSUMsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMMl9BUExELCBDVExfRkNDLCBOT19DVEx9LAogCi0Je01LSzFfTUtLQSwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBLCBDVFJZX0pBUEFOfSwKLQl7TUtLMV9NS0tCLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xfSwKLQl7TUtLMV9GQ0NBLCBNS0sxLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjJ9LAotCXtNS0sxX01LS0ExLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjR9LAotCXtNS0sxX01LS0EyLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjV9LAotCXtNS0sxX01LS0MsIE1LSzEsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxLCBDVFJZX0pBUEFONn0sCisJe01LSzFfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzFfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMV9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0syX01LS0EsIE1LSzIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfAotCSBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLCBQU0NBTl9NS0syIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjN9LAorCXtNS0syX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLM19NS0tBLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQSwgQ1RSWV9KQVBBTjI1fSwKLQl7TUtLM19NS0tCLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjd9LAotCXtNS0szX01LS0ExLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMjZ9LAotCXtNS0szX01LS0EyLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOOH0sCi0Je01LSzNfTUtLQywgTUtLMywgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOOX0sCi0Je01LSzNfRkNDQSwgTUtLMywgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMjd9LAorCXtNS0s0X01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLNF9NS0tBLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjM2fSwKLQl7TUtLNF9NS0tCLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xMH0sCi0Je01LSzRfTUtLQTEsIE1LSzQsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMjh9LAotCXtNS0s0X01LS0EyLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjExfSwKLQl7TUtLNF9NS0tDLCBNS0s0LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjEyfSwKLQl7TUtLNF9GQ0NBLCBNS0s0LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjI5fSwKKwl7TUtLNV9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzVfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLNV9NS0tCLCBNS0s1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xM30sCi0Je01LSzVfTUtLQTIsIE1LSzUsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOMTR9LAotCXtNS0s1X01LS0MsIE1LSzUsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMTV9LAorCXtNS0s2X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNl9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLNl9NS0tCLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csIENUUllfSkFQQU4xNn0sCi0Je01LSzZfTUtLQTEsIE1LSzYsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMzB9LAotCXtNS0s2X01LS0EyLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjE3fSwKLQl7TUtLNl9NS0tDLCBNS0s2LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjE4fSwKLQl7TUtLNl9GQ0NBLCBNS0s2LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zMX0sCisJe01LSzdfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s3X01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKIAotCXtNS0s3X01LS0IsIE1LSzcsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xOX0sCi0Je01LSzdfTUtLQTEsIE1LSzcsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMzJ9LAotCXtNS0s3X01LS0EyLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU4yMH0sCi0Je01LSzdfTUtLQywgTUtLNywgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMjF9LAotCXtNS0s3X0ZDQ0EsIE1LSzcsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjMzfSwKKwl7TUtLOF9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzhfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLOF9NS0tCLCBNS0s4LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMjJ9LAotCXtNS0s4X01LS0EyLCBNS0s4LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU4yM30sCi0Je01LSzhfTUtLQywgTUtLOCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMjR9LAorCXtNS0s5X01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s5X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0s5X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzlfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLOV9NS0tBLCBNS0s5LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMzR9LAotCXtNS0s5X0ZDQ0EsIE1LSzksIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjM3fSwKLQl7TUtLOV9NS0tBMSwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjM4fSwKLQl7TUtLOV9NS0tBMiwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQwfSwKLQl7TUtLOV9NS0tDLCBNS0s5LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zOX0sCisJe01LSzEwX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKKwl7TUtLMTBfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEwX01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzEwX01LS0EsIE1LSzEwLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU4zNX0sCi0Je01LSzEwX0ZDQ0EsIE1LSzEwLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU40MX0sCi0Je01LSzEwX01LS0ExLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjQyfSwKLQl7TUtLMTBfTUtLQTIsIE1LSzEwLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFONDR9LAotCXtNS0sxMF9NS0tDLCBNS0sxMCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDN9LAorCXtNS0sxMV9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzExX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMV9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMV9NS0tBLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU40NX0sCi0Je01LSzExX0ZDQ0EsIE1LSzExLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjQ2fSwKLQl7TUtLMTFfTUtLQTEsIE1LSzExLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjQ3fSwKLQl7TUtLMTFfTUtLQTIsIE1LSzExLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQ5fSwKLQl7TUtLMTFfTUtLQywgTUtLMTEsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFONDh9LAorCXtNS0sxMl9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzEyX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMl9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMl9NS0tBLCBNS0sxMiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTB9LAotCXtNS0sxMl9GQ0NBLCBNS0sxMiwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTF9LAotCXtNS0sxMl9NS0tBMSwgTUtLMTIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywKLQkgQ1RSWV9KQVBBTjUyfSwKLQl7TUtLMTJfTUtLQTIsIE1LSzEyLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU41NH0sCi0Je01LSzEyX01LS0MsIE1LSzEyLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU41M30sCisJe01LSzEzX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxNF9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzE1X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxM19NS0tCLCBNS0sxMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjU3fSwKLQotCXtNS0sxNF9NS0tBMSwgTUtLMTQsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONTh9LAotCXtNS0sxNV9NS0tBMSwgTUtLMTUsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONTl9LAotCi0Je1dPUjBfV09STEQsIFdPUjBfV09STEQsIFdPUjBfV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjFfV09STEQsIFdPUjFfV09STEQsIFdPUjFfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SMl9XT1JMRCwgV09SMl9XT1JMRCwgV09SMl9XT1JMRCwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtXT1IzX1dPUkxELCBXT1IzX1dPUkxELCBXT1IzX1dPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1I0X1dPUkxELCBXT1I0X1dPUkxELCBXT1I0X1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjVfRVRTSUMsIFdPUjVfRVRTSUMsIFdPUjVfRVRTSUMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SMDFfV09STEQsIFdPUjAxX1dPUkxELCBXT1IwMV9XT1JMRCwgTk9fUkVRLCBOT19SRVEsCi0JIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SMDJfV09STEQsIFdPUjAyX1dPUkxELCBXT1IwMl9XT1JMRCwgTk9fUkVRLCBOT19SRVEsCi0JIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RVUxX1dPUkxELCBFVTFfV09STEQsIEVVMV9XT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SOV9XT1JMRCwgV09SOV9XT1JMRCwgV09SOV9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1JBX1dPUkxELCBXT1JBX1dPUkxELCBXT1JBX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUkJfV09STEQsIFdPUkJfV09STEQsIFdPUkJfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKKwl7V09SMF9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1IxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SM19XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I0X1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjVfRVRTSUMsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMDFfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMDJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7RVUxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjlfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SQV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1JCX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCiB9OwogCi0jZGVmaW5lCU5PX0lOVEVSU0VDVF9SRVEJMHhGRkZGRkZGRgotI2RlZmluZQlOT19VTklPTl9SRVEJCTAKLQogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCBhbGxDb3VudHJpZXNbXSA9IHsKLQl7Q1RSWV9ERUJVRywgTk9fRU5VTVJELCAiREIiLCAiREVCVUciLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0RFRkFVTFQsIERFRl9SRUdETU4sICJOQSIsICJOT19DT1VOVFJZX1NFVCIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQUxCQU5JQSwgTlVMTDFfV09STEQsICJBTCIsICJBTEJBTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsIE5PLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0FMR0VSSUEsIE5VTEwxX1dPUkxELCAiRFoiLCAiQUxHRVJJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBOTywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BUkdFTlRJTkEsIEFQTDNfV09STEQsICJBUiIsICJBUkdFTlRJTkEiLCBZRVMsIE5PLCBOTywgWUVTLAotCSBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQVJNRU5JQSwgRVRTSTRfV09STEQsICJBTSIsICJBUk1FTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUkFMSUEsIEZDQzJfV09STEQsICJBVSIsICJBVVNUUkFMSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FVU1RSQUxJQTIsIEZDQzZfV09STEQsICJBVSIsICJBVVNUUkFMSUEyIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUklBLCBFVFNJMV9XT1JMRCwgIkFUIiwgIkFVU1RSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQVpFUkJBSUpBTiwgRVRTSTRfV09STEQsICJBWiIsICJBWkVSQkFJSkFOIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CQUhSQUlOLCBBUEw2X1dPUkxELCAiQkgiLCAiQkFIUkFJTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JFTEFSVVMsIEVUU0kxX1dPUkxELCAiQlkiLCAiQkVMQVJVUyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CRUxHSVVNLCBFVFNJMV9XT1JMRCwgIkJFIiwgIkJFTEdJVU0iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMR0lVTTIsIEVUU0k0X1dPUkxELCAiQkwiLCAiQkVMR0lVTSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CRUxJWkUsIEFQTDFfRVRTSUMsICJCWiIsICJCRUxJWkUiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JPTElWSUEsIEFQTDFfRVRTSUMsICJCTyIsICJCT0xWSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JPU05JQV9IRVJaLCBFVFNJMV9XT1JMRCwgIkJBIiwgIkJPU05JQV9IRVJaR09XSU5BIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQlJBWklMLCBGQ0MzX1dPUkxELCAiQlIiLCAiQlJBWklMIiwgWUVTLCBOTywgTk8sIFlFUywgTk8sCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JSVU5FSV9EQVJVU1NBTEFNLCBBUEwxX1dPUkxELCAiQk4iLCAiQlJVTkVJIERBUlVTU0FMQU0iLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JVTEdBUklBLCBFVFNJNl9XT1JMRCwgIkJHIiwgIkJVTEdBUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0NBTkFEQSwgRkNDMl9GQ0NBLCAiQ0EiLCAiQ0FOQURBIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DQU5BREEyLCBGQ0M2X0ZDQ0EsICJDQSIsICJDQU5BREEyIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DSElMRSwgQVBMNl9XT1JMRCwgIkNMIiwgIkNISUxFIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DSElOQSwgQVBMMV9XT1JMRCwgIkNOIiwgIkNISU5BIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DT0xPTUJJQSwgRkNDMV9GQ0NBLCAiQ08iLCAiQ09MT01CSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DT1NUQV9SSUNBLCBGQ0MxX1dPUkxELCAiQ1IiLCAiQ09TVEEgUklDQSIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0NST0FUSUEsIEVUU0kzX1dPUkxELCAiSFIiLCAiQ1JPQVRJQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0NZUFJVUywgRVRTSTFfV09STEQsICJDWSIsICJDWVBSVVMiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0NaRUNILCBFVFNJM19XT1JMRCwgIkNaIiwgIkNaRUNIIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0RFTk1BUkssIEVUU0kxX1dPUkxELCAiREsiLCAiREVOTUFSSyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsIEZDQzFfRkNDQSwgIkRPIiwgIkRPTUlOSUNBTiBSRVBVQkxJQyIsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRUNVQURPUiwgRkNDMV9XT1JMRCwgIkVDIiwgIkVDVUFET1IiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VHWVBULCBFVFNJM19XT1JMRCwgIkVHIiwgIkVHWVBUIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfRUxfU0FMVkFET1IsIEZDQzFfV09STEQsICJTViIsICJFTCBTQUxWQURPUiIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VTVE9OSUEsIEVUU0kxX1dPUkxELCAiRUUiLCAiRVNUT05JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9GSU5MQU5ELCBFVFNJMV9XT1JMRCwgIkZJIiwgIkZJTkxBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRlJBTkNFLCBFVFNJMV9XT1JMRCwgIkZSIiwgIkZSQU5DRSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HRU9SR0lBLCBFVFNJNF9XT1JMRCwgIkdFIiwgIkdFT1JHSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0dFUk1BTlksIEVUU0kxX1dPUkxELCAiREUiLCAiR0VSTUFOWSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HUkVFQ0UsIEVUU0kxX1dPUkxELCAiR1IiLCAiR1JFRUNFIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0dVQVRFTUFMQSwgRkNDMV9GQ0NBLCAiR1QiLCAiR1VBVEVNQUxBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9IT05EVVJBUywgTlVMTDFfV09STEQsICJITiIsICJIT05EVVJBUyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfSE9OR19LT05HLCBGQ0MyX1dPUkxELCAiSEsiLCAiSE9ORyBLT05HIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9IVU5HQVJZLCBFVFNJMV9XT1JMRCwgIkhVIiwgIkhVTkdBUlkiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSUNFTEFORCwgRVRTSTFfV09STEQsICJJUyIsICJJQ0VMQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lORElBLCBBUEw2X1dPUkxELCAiSU4iLCAiSU5ESUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9JTkRPTkVTSUEsIEFQTDFfV09STEQsICJJRCIsICJJTkRPTkVTSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9JUkFOLCBBUEwxX1dPUkxELCAiSVIiLCAiSVJBTiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfSVJFTEFORCwgRVRTSTFfV09STEQsICJJRSIsICJJUkVMQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lTUkFFTCwgTlVMTDFfV09STEQsICJJTCIsICJJU1JBRUwiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0lUQUxZLCBFVFNJMV9XT1JMRCwgIklUIiwgIklUQUxZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBTUFJQ0EsIEVUU0kxX1dPUkxELCAiSk0iLCAiSkFNQUlDQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKKwl7Q1RSWV9ERUJVRywgTk9fRU5VTVJELCAiREIifSwKKwl7Q1RSWV9ERUZBVUxULCBGQ0MxX0ZDQ0EsICJDTyJ9LAorCXtDVFJZX0FMQkFOSUEsIE5VTEwxX1dPUkxELCAiQUwifSwKKwl7Q1RSWV9BTEdFUklBLCBOVUxMMV9XT1JMRCwgIkRaIn0sCisJe0NUUllfQVJHRU5USU5BLCBBUEwzX1dPUkxELCAiQVIifSwKKwl7Q1RSWV9BUk1FTklBLCBFVFNJNF9XT1JMRCwgIkFNIn0sCisJe0NUUllfQVVTVFJBTElBLCBGQ0MyX1dPUkxELCAiQVUifSwKKwl7Q1RSWV9BVVNUUkFMSUEyLCBGQ0M2X1dPUkxELCAiQVUifSwKKwl7Q1RSWV9BVVNUUklBLCBFVFNJMV9XT1JMRCwgIkFUIn0sCisJe0NUUllfQVpFUkJBSUpBTiwgRVRTSTRfV09STEQsICJBWiJ9LAorCXtDVFJZX0JBSFJBSU4sIEFQTDZfV09STEQsICJCSCJ9LAorCXtDVFJZX0JFTEFSVVMsIEVUU0kxX1dPUkxELCAiQlkifSwKKwl7Q1RSWV9CRUxHSVVNLCBFVFNJMV9XT1JMRCwgIkJFIn0sCisJe0NUUllfQkVMR0lVTTIsIEVUU0k0X1dPUkxELCAiQkwifSwKKwl7Q1RSWV9CRUxJWkUsIEFQTDFfRVRTSUMsICJCWiJ9LAorCXtDVFJZX0JPTElWSUEsIEFQTDFfRVRTSUMsICJCTyJ9LAorCXtDVFJZX0JPU05JQV9IRVJaLCBFVFNJMV9XT1JMRCwgIkJBIn0sCisJe0NUUllfQlJBWklMLCBGQ0MzX1dPUkxELCAiQlIifSwKKwl7Q1RSWV9CUlVORUlfREFSVVNTQUxBTSwgQVBMMV9XT1JMRCwgIkJOIn0sCisJe0NUUllfQlVMR0FSSUEsIEVUU0k2X1dPUkxELCAiQkcifSwKKwl7Q1RSWV9DQU5BREEsIEZDQzJfRkNDQSwgIkNBIn0sCisJe0NUUllfQ0FOQURBMiwgRkNDNl9GQ0NBLCAiQ0EifSwKKwl7Q1RSWV9DSElMRSwgQVBMNl9XT1JMRCwgIkNMIn0sCisJe0NUUllfQ0hJTkEsIEFQTDFfV09STEQsICJDTiJ9LAorCXtDVFJZX0NPTE9NQklBLCBGQ0MxX0ZDQ0EsICJDTyJ9LAorCXtDVFJZX0NPU1RBX1JJQ0EsIEZDQzFfV09STEQsICJDUiJ9LAorCXtDVFJZX0NST0FUSUEsIEVUU0kzX1dPUkxELCAiSFIifSwKKwl7Q1RSWV9DWVBSVVMsIEVUU0kxX1dPUkxELCAiQ1kifSwKKwl7Q1RSWV9DWkVDSCwgRVRTSTNfV09STEQsICJDWiJ9LAorCXtDVFJZX0RFTk1BUkssIEVUU0kxX1dPUkxELCAiREsifSwKKwl7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsIEZDQzFfRkNDQSwgIkRPIn0sCisJe0NUUllfRUNVQURPUiwgRkNDMV9XT1JMRCwgIkVDIn0sCisJe0NUUllfRUdZUFQsIEVUU0kzX1dPUkxELCAiRUcifSwKKwl7Q1RSWV9FTF9TQUxWQURPUiwgRkNDMV9XT1JMRCwgIlNWIn0sCisJe0NUUllfRVNUT05JQSwgRVRTSTFfV09STEQsICJFRSJ9LAorCXtDVFJZX0ZJTkxBTkQsIEVUU0kxX1dPUkxELCAiRkkifSwKKwl7Q1RSWV9GUkFOQ0UsIEVUU0kxX1dPUkxELCAiRlIifSwKKwl7Q1RSWV9HRU9SR0lBLCBFVFNJNF9XT1JMRCwgIkdFIn0sCisJe0NUUllfR0VSTUFOWSwgRVRTSTFfV09STEQsICJERSJ9LAorCXtDVFJZX0dSRUVDRSwgRVRTSTFfV09STEQsICJHUiJ9LAorCXtDVFJZX0dVQVRFTUFMQSwgRkNDMV9GQ0NBLCAiR1QifSwKKwl7Q1RSWV9IT05EVVJBUywgTlVMTDFfV09STEQsICJITiJ9LAorCXtDVFJZX0hPTkdfS09ORywgRkNDMl9XT1JMRCwgIkhLIn0sCisJe0NUUllfSFVOR0FSWSwgRVRTSTFfV09STEQsICJIVSJ9LAorCXtDVFJZX0lDRUxBTkQsIEVUU0kxX1dPUkxELCAiSVMifSwKKwl7Q1RSWV9JTkRJQSwgQVBMNl9XT1JMRCwgIklOIn0sCisJe0NUUllfSU5ET05FU0lBLCBBUEwxX1dPUkxELCAiSUQifSwKKwl7Q1RSWV9JUkFOLCBBUEwxX1dPUkxELCAiSVIifSwKKwl7Q1RSWV9JUkVMQU5ELCBFVFNJMV9XT1JMRCwgIklFIn0sCisJe0NUUllfSVNSQUVMLCBOVUxMMV9XT1JMRCwgIklMIn0sCisJe0NUUllfSVRBTFksIEVUU0kxX1dPUkxELCAiSVQifSwKKwl7Q1RSWV9KQU1BSUNBLCBFVFNJMV9XT1JMRCwgIkpNIn0sCiAKLQl7Q1RSWV9KQVBBTiwgTUtLMV9NS0tBLCAiSlAiLCAiSkFQQU4iLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjEsIE1LSzFfTUtLQiwgIkpQIiwgIkpBUEFOMSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMiwgTUtLMV9GQ0NBLCAiSlAiLCAiSkFQQU4yIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zLCBNS0syX01LS0EsICJKUCIsICJKQVBBTjMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQsIE1LSzFfTUtLQTEsICJKUCIsICJKQVBBTjQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUsIE1LSzFfTUtLQTIsICJKUCIsICJKQVBBTjUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjYsIE1LSzFfTUtLQywgIkpQIiwgIkpBUEFONiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAorCXtDVFJZX0pBUEFOLCBNS0sxX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMSwgTUtLMV9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIsIE1LSzFfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zLCBNS0syX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONCwgTUtLMV9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU41LCBNS0sxX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjYsIE1LSzFfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU43LCBNS0szX01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOOCwgTUtLM19NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU45LCBNS0szX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTAsIE1LSzRfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4xMSwgTUtLNF9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4xMiwgTUtLNF9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEzLCBNS0s1X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTQsIE1LSzVfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTUsIE1LSzVfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4xNiwgTUtLNl9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE3LCBNS0s2X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE4LCBNS0s2X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTksIE1LSzdfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4yMCwgTUtLN19NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4yMSwgTUtLN19NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIyLCBNS0s4X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjMsIE1LSzhfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjQsIE1LSzhfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4yNSwgTUtLM19NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI2LCBNS0szX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI3LCBNS0szX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjgsIE1LSzRfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjksIE1LSzRfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMCwgTUtLNl9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMSwgTUtLNl9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjMyLCBNS0s3X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjMzLCBNS0s3X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzQsIE1LSzlfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNSwgTUtLMTBfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNiwgTUtLNF9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM3LCBNS0s5X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzgsIE1LSzlfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzksIE1LSzlfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU40MCwgTUtLOV9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU40MSwgTUtLMTBfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU40MiwgTUtLMTBfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONDMsIE1LSzEwX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDQsIE1LSzEwX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ1LCBNS0sxMV9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ2LCBNS0sxMV9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ3LCBNS0sxMV9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU40OCwgTUtLMTFfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU40OSwgTUtLMTFfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONTAsIE1LSzEyX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONTEsIE1LSzEyX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONTIsIE1LSzEyX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUzLCBNS0sxMl9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjU0LCBNS0sxMl9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU41NywgTUtLMTNfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU41OCwgTUtLMTRfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONTksIE1LSzE1X01LS0ExLCAiSlAifSwKIAotCXtDVFJZX0pBUEFONywgTUtLM19NS0tCLCAiSlAiLCAiSkFQQU43IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU44LCBNS0szX01LS0EyLCAiSlAiLCAiSkFQQU44IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU45LCBNS0szX01LS0MsICJKUCIsICJKQVBBTjkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTAsIE1LSzRfTUtLQiwgIkpQIiwgIkpBUEFOMTAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjExLCBNS0s0X01LS0EyLCAiSlAiLCAiSkFQQU4xMSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTIsIE1LSzRfTUtLQywgIkpQIiwgIkpBUEFOMTIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTMsIE1LSzVfTUtLQiwgIkpQIiwgIkpBUEFOMTMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE0LCBNS0s1X01LS0EyLCAiSlAiLCAiSkFQQU4xNCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTUsIE1LSzVfTUtLQywgIkpQIiwgIkpBUEFOMTUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTYsIE1LSzZfTUtLQiwgIkpQIiwgIkpBUEFOMTYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE3LCBNS0s2X01LS0EyLCAiSlAiLCAiSkFQQU4xNyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTgsIE1LSzZfTUtLQywgIkpQIiwgIkpBUEFOMTgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTksIE1LSzdfTUtLQiwgIkpQIiwgIkpBUEFOMTkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIwLCBNS0s3X01LS0EyLCAiSlAiLCAiSkFQQU4yMCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjEsIE1LSzdfTUtLQywgIkpQIiwgIkpBUEFOMjEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMjIsIE1LSzhfTUtLQiwgIkpQIiwgIkpBUEFOMjIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIzLCBNS0s4X01LS0EyLCAiSlAiLCAiSkFQQU4yMyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjQsIE1LSzhfTUtLQywgIkpQIiwgIkpBUEFOMjQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMjUsIE1LSzNfTUtLQSwgIkpQIiwgIkpBUEFOMjUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI2LCBNS0szX01LS0ExLCAiSlAiLCAiSkFQQU4yNiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjcsIE1LSzNfRkNDQSwgIkpQIiwgIkpBUEFOMjciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI4LCBNS0s0X01LS0ExLCAiSlAiLCAiSkFQQU4yOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjksIE1LSzRfRkNDQSwgIkpQIiwgIkpBUEFOMjkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMwLCBNS0s2X01LS0ExLCAiSlAiLCAiSkFQQU4zMCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzEsIE1LSzZfRkNDQSwgIkpQIiwgIkpBUEFOMzEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMyLCBNS0s3X01LS0ExLCAiSlAiLCAiSkFQQU4zMiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzMsIE1LSzdfRkNDQSwgIkpQIiwgIkpBUEFOMzMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM0LCBNS0s5X01LS0EsICJKUCIsICJKQVBBTjM0IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNSwgTUtLMTBfTUtLQSwgIkpQIiwgIkpBUEFOMzUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM2LCBNS0s0X01LS0EsICJKUCIsICJKQVBBTjM2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNywgTUtLOV9GQ0NBLCAiSlAiLCAiSkFQQU4zNyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzgsIE1LSzlfTUtLQTEsICJKUCIsICJKQVBBTjM4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zOSwgTUtLOV9NS0tDLCAiSlAiLCAiSkFQQU4zOSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDAsIE1LSzlfTUtLQTIsICJKUCIsICJKQVBBTjQwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MSwgTUtLMTBfRkNDQSwgIkpQIiwgIkpBUEFONDEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQyLCBNS0sxMF9NS0tBMSwgIkpQIiwgIkpBUEFONDIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQzLCBNS0sxMF9NS0tDLCAiSlAiLCAiSkFQQU40MyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDQsIE1LSzEwX01LS0EyLCAiSlAiLCAiSkFQQU40NCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDUsIE1LSzExX01LS0EsICJKUCIsICJKQVBBTjQ1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40NiwgTUtLMTFfRkNDQSwgIkpQIiwgIkpBUEFONDYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ3LCBNS0sxMV9NS0tBMSwgIkpQIiwgIkpBUEFONDciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ4LCBNS0sxMV9NS0tDLCAiSlAiLCAiSkFQQU40OCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDksIE1LSzExX01LS0EyLCAiSlAiLCAiSkFQQU40OSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTAsIE1LSzEyX01LS0EsICJKUCIsICJKQVBBTjUwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MSwgTUtLMTJfRkNDQSwgIkpQIiwgIkpBUEFONTEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUyLCBNS0sxMl9NS0tBMSwgIkpQIiwgIkpBUEFONTIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUzLCBNS0sxMl9NS0tDLCAiSlAiLCAiSkFQQU41MyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTQsIE1LSzEyX01LS0EyLCAiSlAiLCAiSkFQQU41NCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCi0Je0NUUllfSkFQQU41NywgTUtLMTNfTUtLQiwgIkpQIiwgIkpBUEFONTciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU4LCBNS0sxNF9NS0tBMSwgIkpQIiwgIkpBUEFONTgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU5LCBNS0sxNV9NS0tBMSwgIkpQIiwgIkpBUEFONTkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pPUkRBTiwgRVRTSTJfV09STEQsICJKTyIsICJKT1JEQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LQVpBS0hTVEFOLCBOVUxMMV9XT1JMRCwgIktaIiwgIktBWkFLSFNUQU4iLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAiS1AiLCAiTk9SVEggS09SRUEiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MsIEFQTDlfV09STEQsICJLUiIsICJLT1JFQSBSRVBVQkxJQyIsIFlFUywgTk8sIE5PLAotCSBZRVMsIE5PLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MyLCBBUEwyX1dPUkxELCAiSzIiLCAiS09SRUEgUkVQVUJMSUMyIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0tPUkVBX1JPQzMsIEFQTDlfV09STEQsICJLMyIsICJLT1JFQSBSRVBVQkxJQzMiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS1VXQUlULCBOVUxMMV9XT1JMRCwgIktXIiwgIktVV0FJVCIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfTEFUVklBLCBFVFNJMV9XT1JMRCwgIkxWIiwgIkxBVFZJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MRUJBTk9OLCBOVUxMMV9XT1JMRCwgIkxCIiwgIkxFQkFOT04iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0xJRUNIVEVOU1RFSU4sIEVUU0kxX1dPUkxELCAiTEkiLCAiTElFQ0hURU5TVEVJTiIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MSVRIVUFOSUEsIEVUU0kxX1dPUkxELCAiTFQiLCAiTElUSFVBTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0xVWEVNQk9VUkcsIEVUU0kxX1dPUkxELCAiTFUiLCAiTFVYRU1CT1VSRyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NQUNBVSwgRkNDMl9XT1JMRCwgIk1PIiwgIk1BQ0FVIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NQUNFRE9OSUEsIE5VTEwxX1dPUkxELCAiTUsiLCAiTUFDRURPTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9NQUxBWVNJQSwgQVBMOF9XT1JMRCwgIk1ZIiwgIk1BTEFZU0lBIiwgWUVTLCBOTywgTk8sIFlFUywgTk8sCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX01BTFRBLCBFVFNJMV9XT1JMRCwgIk1UIiwgIk1BTFRBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX01FWElDTywgRkNDMV9GQ0NBLCAiTVgiLCAiTUVYSUNPIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NT05BQ08sIEVUU0k0X1dPUkxELCAiTUMiLCAiTU9OQUNPIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NT1JPQ0NPLCBOVUxMMV9XT1JMRCwgIk1BIiwgIk1PUk9DQ08iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX05FUEFMLCBBUEwxX1dPUkxELCAiTlAiLCAiTkVQQUwiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVUSEVSTEFORFMsIEVUU0kxX1dPUkxELCAiTkwiLCAiTkVUSEVSTEFORFMiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVUSEVSTEFORFNfQU5USUxMRVMsIEVUU0kxX1dPUkxELCAiQU4iLAotCSAiTkVUSEVSTEFORFMtQU5USUxMRVMiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICJOWiIsICJORVcgWkVBTEFORCIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX05PUldBWSwgRVRTSTFfV09STEQsICJOTyIsICJOT1JXQVkiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfT01BTiwgQVBMNl9XT1JMRCwgIk9NIiwgIk9NQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIE5PLCA3MDAwfSwKLQl7Q1RSWV9QQUtJU1RBTiwgTlVMTDFfV09STEQsICJQSyIsICJQQUtJU1RBTiIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUEFOQU1BLCBGQ0MxX0ZDQ0EsICJQQSIsICJQQU5BTUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BBUFVBX05FV19HVUlORUEsIEZDQzFfV09STEQsICJQRyIsICJQQVBVQSBORVcgR1VJTkVBIiwgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QRVJVLCBBUEwxX1dPUkxELCAiUEUiLCAiUEVSVSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIDcwMDB9LAotCXtDVFJZX1BISUxJUFBJTkVTLCBBUEwxX1dPUkxELCAiUEgiLCAiUEhJTElQUElORVMiLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BPTEFORCwgRVRTSTFfV09STEQsICJQTCIsICJQT0xBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUE9SVFVHQUwsIEVUU0kxX1dPUkxELCAiUFQiLCAiUE9SVFVHQUwiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUFVFUlRPX1JJQ08sIEZDQzFfRkNDQSwgIlBSIiwgIlBVRVJUTyBSSUNPIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9RQVRBUiwgTlVMTDFfV09STEQsICJRQSIsICJRQVRBUiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUk9NQU5JQSwgTlVMTDFfV09STEQsICJSTyIsICJST01BTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9SVVNTSUEsIE5VTEwxX1dPUkxELCAiUlUiLCAiUlVTU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9TQVVESV9BUkFCSUEsIE5VTEwxX1dPUkxELCAiU0EiLCAiU0FVREkgQVJBQklBIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9TRVJCSUFfTU9OVEVORUdSTywgRVRTSTFfV09STEQsICJDUyIsICJTRVJCSUEgJiBNT05URU5FR1JPIiwKLQkgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NJTkdBUE9SRSwgQVBMNl9XT1JMRCwgIlNHIiwgIlNJTkdBUE9SRSIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU0xPVkFLSUEsIEVUU0kxX1dPUkxELCAiU0siLCAiU0xPVkFLIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NMT1ZFTklBLCBFVFNJMV9XT1JMRCwgIlNJIiwgIlNMT1ZFTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NPVVRIX0FGUklDQSwgRkNDM19XT1JMRCwgIlpBIiwgIlNPVVRIIEFGUklDQSIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1NQQUlOLCBFVFNJMV9XT1JMRCwgIkVTIiwgIlNQQUlOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NSSV9MQU5LQSwgRkNDM19XT1JMRCwgIkxLIiwgIlNSSSBMQU5LQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1NXRURFTiwgRVRTSTFfV09STEQsICJTRSIsICJTV0VERU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAiQ0giLCAiU1dJVFpFUkxBTkQiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kiLCAiU1lSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1RBSVdBTiwgQVBMM19GQ0NBLCAiVFciLCAiVEFJV0FOIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9USEFJTEFORCwgTlVMTDFfV09STEQsICJUSCIsICJUSEFJTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfVFJJTklEQURfWV9UT0JBR08sIEVUU0k0X1dPUkxELCAiVFQiLCAiVFJJTklEQUQgJiBUT0JBR08iLAotCSBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9UVU5JU0lBLCBFVFNJM19XT1JMRCwgIlROIiwgIlRVTklTSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9UVVJLRVksIEVUU0kzX1dPUkxELCAiVFIiLCAiVFVSS0VZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVUtSQUlORSwgTlVMTDFfV09STEQsICJVQSIsICJVS1JBSU5FIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9VQUUsIE5VTEwxX1dPUkxELCAiQUUiLCAiVU5JVEVEIEFSQUIgRU1JUkFURVMiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1VOSVRFRF9LSU5HRE9NLCBFVFNJMV9XT1JMRCwgIkdCIiwgIlVOSVRFRCBLSU5HRE9NIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgIlVTIiwgIlVOSVRFRCBTVEFURVMiLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDU4MjV9LAotCXtDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDksIEZDQzRfRkNDQSwgIlBTIiwKLQkgIlVOSVRFRCBTVEFURVMgKFBVQkxJQyBTQUZFVFkpIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCA3MDAwfSwKLQl7Q1RSWV9VUlVHVUFZLCBBUEwyX1dPUkxELCAiVVkiLCAiVVJVR1VBWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1VaQkVLSVNUQU4sIEZDQzNfRkNDQSwgIlVaIiwgIlVaQkVLSVNUQU4iLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1ZFTkVaVUVMQSwgQVBMMl9FVFNJQywgIlZFIiwgIlZFTkVaVUVMQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1ZJRVRfTkFNLCBOVUxMMV9XT1JMRCwgIlZOIiwgIlZJRVQgTkFNIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9ZRU1FTiwgTlVMTDFfV09STEQsICJZRSIsICJZRU1FTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfWklNQkFCV0UsIE5VTEwxX1dPUkxELCAiWlciLCAiWklNQkFCV0UiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9CisJe0NUUllfSk9SREFOLCBFVFNJMl9XT1JMRCwgIkpPIn0sCisJe0NUUllfS0FaQUtIU1RBTiwgTlVMTDFfV09STEQsICJLWiJ9LAorCXtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAiS1AifSwKKwl7Q1RSWV9LT1JFQV9ST0MsIEFQTDlfV09STEQsICJLUiJ9LAorCXtDVFJZX0tPUkVBX1JPQzIsIEFQTDJfV09STEQsICJLMiJ9LAorCXtDVFJZX0tPUkVBX1JPQzMsIEFQTDlfV09STEQsICJLMyJ9LAorCXtDVFJZX0tVV0FJVCwgTlVMTDFfV09STEQsICJLVyJ9LAorCXtDVFJZX0xBVFZJQSwgRVRTSTFfV09STEQsICJMViJ9LAorCXtDVFJZX0xFQkFOT04sIE5VTEwxX1dPUkxELCAiTEIifSwKKwl7Q1RSWV9MSUVDSFRFTlNURUlOLCBFVFNJMV9XT1JMRCwgIkxJIn0sCisJe0NUUllfTElUSFVBTklBLCBFVFNJMV9XT1JMRCwgIkxUIn0sCisJe0NUUllfTFVYRU1CT1VSRywgRVRTSTFfV09STEQsICJMVSJ9LAorCXtDVFJZX01BQ0FVLCBGQ0MyX1dPUkxELCAiTU8ifSwKKwl7Q1RSWV9NQUNFRE9OSUEsIE5VTEwxX1dPUkxELCAiTUsifSwKKwl7Q1RSWV9NQUxBWVNJQSwgQVBMOF9XT1JMRCwgIk1ZIn0sCisJe0NUUllfTUFMVEEsIEVUU0kxX1dPUkxELCAiTVQifSwKKwl7Q1RSWV9NRVhJQ08sIEZDQzFfRkNDQSwgIk1YIn0sCisJe0NUUllfTU9OQUNPLCBFVFNJNF9XT1JMRCwgIk1DIn0sCisJe0NUUllfTU9ST0NDTywgTlVMTDFfV09STEQsICJNQSJ9LAorCXtDVFJZX05FUEFMLCBBUEwxX1dPUkxELCAiTlAifSwKKwl7Q1RSWV9ORVRIRVJMQU5EUywgRVRTSTFfV09STEQsICJOTCJ9LAorCXtDVFJZX05FVEhFUkxBTkRTX0FOVElMTEVTLCBFVFNJMV9XT1JMRCwgIkFOIn0sCisJe0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICJOWiJ9LAorCXtDVFJZX05PUldBWSwgRVRTSTFfV09STEQsICJOTyJ9LAorCXtDVFJZX09NQU4sIEFQTDZfV09STEQsICJPTSJ9LAorCXtDVFJZX1BBS0lTVEFOLCBOVUxMMV9XT1JMRCwgIlBLIn0sCisJe0NUUllfUEFOQU1BLCBGQ0MxX0ZDQ0EsICJQQSJ9LAorCXtDVFJZX1BBUFVBX05FV19HVUlORUEsIEZDQzFfV09STEQsICJQRyJ9LAorCXtDVFJZX1BFUlUsIEFQTDFfV09STEQsICJQRSJ9LAorCXtDVFJZX1BISUxJUFBJTkVTLCBBUEwxX1dPUkxELCAiUEgifSwKKwl7Q1RSWV9QT0xBTkQsIEVUU0kxX1dPUkxELCAiUEwifSwKKwl7Q1RSWV9QT1JUVUdBTCwgRVRTSTFfV09STEQsICJQVCJ9LAorCXtDVFJZX1BVRVJUT19SSUNPLCBGQ0MxX0ZDQ0EsICJQUiJ9LAorCXtDVFJZX1FBVEFSLCBOVUxMMV9XT1JMRCwgIlFBIn0sCisJe0NUUllfUk9NQU5JQSwgTlVMTDFfV09STEQsICJSTyJ9LAorCXtDVFJZX1JVU1NJQSwgTlVMTDFfV09STEQsICJSVSJ9LAorCXtDVFJZX1NBVURJX0FSQUJJQSwgTlVMTDFfV09STEQsICJTQSJ9LAorCXtDVFJZX1NFUkJJQV9NT05URU5FR1JPLCBFVFNJMV9XT1JMRCwgIkNTIn0sCisJe0NUUllfU0lOR0FQT1JFLCBBUEw2X1dPUkxELCAiU0cifSwKKwl7Q1RSWV9TTE9WQUtJQSwgRVRTSTFfV09STEQsICJTSyJ9LAorCXtDVFJZX1NMT1ZFTklBLCBFVFNJMV9XT1JMRCwgIlNJIn0sCisJe0NUUllfU09VVEhfQUZSSUNBLCBGQ0MzX1dPUkxELCAiWkEifSwKKwl7Q1RSWV9TUEFJTiwgRVRTSTFfV09STEQsICJFUyJ9LAorCXtDVFJZX1NSSV9MQU5LQSwgRkNDM19XT1JMRCwgIkxLIn0sCisJe0NUUllfU1dFREVOLCBFVFNJMV9XT1JMRCwgIlNFIn0sCisJe0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAiQ0gifSwKKwl7Q1RSWV9TWVJJQSwgTlVMTDFfV09STEQsICJTWSJ9LAorCXtDVFJZX1RBSVdBTiwgQVBMM19GQ0NBLCAiVFcifSwKKwl7Q1RSWV9USEFJTEFORCwgTlVMTDFfV09STEQsICJUSCJ9LAorCXtDVFJZX1RSSU5JREFEX1lfVE9CQUdPLCBFVFNJNF9XT1JMRCwgIlRUIn0sCisJe0NUUllfVFVOSVNJQSwgRVRTSTNfV09STEQsICJUTiJ9LAorCXtDVFJZX1RVUktFWSwgRVRTSTNfV09STEQsICJUUiJ9LAorCXtDVFJZX1VLUkFJTkUsIE5VTEwxX1dPUkxELCAiVUEifSwKKwl7Q1RSWV9VQUUsIE5VTEwxX1dPUkxELCAiQUUifSwKKwl7Q1RSWV9VTklURURfS0lOR0RPTSwgRVRTSTFfV09STEQsICJHQiJ9LAorCXtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgIlVTIn0sCisJLyogVGhpcyAiUFMiIGlzIGZvciBVUyBwdWJsaWMgc2FmZXR5IGFjdHVhbGx5Li4uIHRvIHN1cHBvcnQgdGhpcyB3ZQorCSAqIHdvdWxkIG5lZWQgdG8gYXNzaWduIG5ldyBzcGVjaWFsIGFscGhhMiB0byBDUkRBIGRiIGFzIHdpdGggdGhlIHdvcmxkCisJICogcmVnZG9tYWluIGFuZCB1c2UgYW5vdGhlciBhbHBoYTIgKi8KKwl7Q1RSWV9VTklURURfU1RBVEVTX0ZDQzQ5LCBGQ0M0X0ZDQ0EsICJQUyJ9LAorCXtDVFJZX1VSVUdVQVksIEFQTDJfV09STEQsICJVWSJ9LAorCXtDVFJZX1VaQkVLSVNUQU4sIEZDQzNfRkNDQSwgIlVaIn0sCisJe0NUUllfVkVORVpVRUxBLCBBUEwyX0VUU0lDLCAiVkUifSwKKwl7Q1RSWV9WSUVUX05BTSwgTlVMTDFfV09STEQsICJWTiJ9LAorCXtDVFJZX1lFTUVOLCBOVUxMMV9XT1JMRCwgIllFIn0sCisJe0NUUllfWklNQkFCV0UsIE5VTEwxX1dPUkxELCAiWlcifSwKIH07CiAKLWVudW0gewotCU5PX0RGUyA9IDB4MDAwMDAwMDAwMDAwMDAwMFVMTCwKLQlERlNfRkNDMyA9IDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKLQlERlNfRVRTSSA9IDB4MDAwMDAwMDAwMDAwMDAwMlVMTCwKLQlERlNfTUtLNCA9IDB4MDAwMDAwMDAwMDAwMDAwNFVMTCwKLX07Ci0KLWVudW0gewotCUYxXzQ5MTVfNDkyNSwKLQlGMV80OTM1XzQ5NDUsCi0JRjFfNDkyMF80OTgwLAotCUYxXzQ5NDJfNDk4NywKLQlGMV80OTQ1XzQ5ODUsCi0JRjFfNDk1MF80OTgwLAotCUYxXzUwMzVfNTA0MCwKLQlGMV81MDQwXzUwODAsCi0JRjFfNTA1NV81MDU1LAotCi0JRjFfNTEyMF81MjQwLAotCi0JRjFfNTE3MF81MjMwLAotCUYyXzUxNzBfNTIzMCwKLQotCUYxXzUxODBfNTI0MCwKLQlGMl81MTgwXzUyNDAsCi0JRjNfNTE4MF81MjQwLAotCUY0XzUxODBfNTI0MCwKLQlGNV81MTgwXzUyNDAsCi0JRjZfNTE4MF81MjQwLAotCUY3XzUxODBfNTI0MCwKLQlGOF81MTgwXzUyNDAsCi0KLQlGMV81MTgwXzUzMjAsCi0KLQlGMV81MjQwXzUyODAsCi0KLQlGMV81MjYwXzUyODAsCi0KLQlGMV81MjYwXzUzMjAsCi0JRjJfNTI2MF81MzIwLAotCUYzXzUyNjBfNTMyMCwKLQlGNF81MjYwXzUzMjAsCi0JRjVfNTI2MF81MzIwLAotCUY2XzUyNjBfNTMyMCwKLQotCUYxXzUyNjBfNTcwMCwKLQotCUYxXzUyODBfNTMyMCwKLQotCUYxXzU1MDBfNTU4MCwKLQotCUYxXzU1MDBfNTYyMCwKLQotCUYxXzU1MDBfNTcwMCwKLQlGMl81NTAwXzU3MDAsCi0JRjNfNTUwMF81NzAwLAotCUY0XzU1MDBfNTcwMCwKLQlGNV81NTAwXzU3MDAsCi0KLQlGMV81NjYwXzU3MDAsCi0KLQlGMV81NzQ1XzU4MDUsCi0JRjJfNTc0NV81ODA1LAotCUYzXzU3NDVfNTgwNSwKLQotCUYxXzU3NDVfNTgyNSwKLQlGMl81NzQ1XzU4MjUsCi0JRjNfNTc0NV81ODI1LAotCUY0XzU3NDVfNTgyNSwKLQlGNV81NzQ1XzU4MjUsCi0JRjZfNTc0NV81ODI1LAotCi0JVzFfNDkyMF80OTgwLAotCVcxXzUwNDBfNTA4MCwKLQlXMV81MTcwXzUyMzAsCi0JVzFfNTE4MF81MjQwLAotCVcxXzUyNjBfNTMyMCwKLQlXMV81NzQ1XzU4MjUsCi0JVzFfNTUwMF81NzAwLAotCUFfREVNT19BTExfQ0hBTk5FTFMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgcmVnRG1uNUdoekZyZXFbXSA9IHsKLQl7NDkxNSwgNDkyNSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2fSwKLQl7NDkzNSwgNDk0NSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2fSwKLQl7NDkyMCwgNDk4MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0syLCA3fSwKLQl7NDk0MiwgNDk4NywgMjcsIDYsIDUsIDUsIE5PX0RGUywgUFNDQU5fRkNDLCAwfSwKLQl7NDk0NSwgNDk4NSwgMzAsIDYsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezQ5NTAsIDQ5ODAsIDMzLCA2LCAyMCwgNSwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs1MDM1LCA1MDQwLCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTJ9LAotCXs1MDQwLCA1MDgwLCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzIsIDJ9LAotCXs1MDU1LCA1MDU1LCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTJ9LAotCi0JezUxMjAsIDUyNDAsIDUsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTE3MCwgNTIzMCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMiwgMX0sCi0JezUxNzAsIDUyMzAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzIsIDF9LAotCi0JezUxODAsIDUyNDAsIDE1LCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezUxODAsIDUyNDAsIDE3LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDF9LAotCXs1MTgwLCA1MjQwLCAxOCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezUxODAsIDUyNDAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXs1MTgwLCA1MzIwLCAyMCwgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0VUU0ksIDB9LAotCi0JezUyNDAsIDUyODAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MjgwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MzIwLCAxOCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MzIwLCAyMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0kgfCBQU0NBTl9NS0szLCAwfSwKLQotCi0JezUyNjAsIDUzMjAsIDIwLCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDJ9LAotCXs1MjYwLCA1MzIwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDJ9LAotCXs1MjYwLCA1MzIwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDB9LAotCXs1MjYwLCA1MzIwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXs1MjYwLCA1NzAwLCA1LCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIE5PX1BTQ0FOLCAwfSwKLQotCXs1MjgwLCA1MzIwLCAxNywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDB9LAotCi0JezU1MDAsIDU1ODAsIDIzLCA2LCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIDB9LAotCi0JezU1MDAsIDU2MjAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1NTAwLCA1NzAwLCAyMCwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDR9LAotCXs1NTAwLCA1NzAwLCAyNywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTUwMCwgNTcwMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezU1MDAsIDU3MDAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0kgfCBERlNfTUtLNCwKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX0ZDQywgMH0sCi0JezU1MDAsIDU3MDAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1NjYwLCA1NzAwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDLCAwfSwKLQotCXs1NzQ1LCA1ODA1LCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgwNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MDUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRVRTSSwgMH0sCi0JezU3NDUsIDU4MjUsIDUsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDE3LCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDN9LAotCXs1NzQ1LCA1ODI1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCi0JezQ5MjAsIDQ5ODAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTA0MCwgNTA4MCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1MTcwLCA1MjMwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUxODAsIDUyNDAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1NTAwLCA1NzAwLCAzMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDB9LAotCXs0OTIwLCA2MTAwLCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLX07Ci0KLWVudW0gewotCVQxXzUxMzBfNTY1MCwKLQlUMV81MTUwXzU2NzAsCi0KLQlUMV81MjAwXzUyMDAsCi0JVDJfNTIwMF81MjAwLAotCVQzXzUyMDBfNTIwMCwKLQlUNF81MjAwXzUyMDAsCi0JVDVfNTIwMF81MjAwLAotCVQ2XzUyMDBfNTIwMCwKLQlUN181MjAwXzUyMDAsCi0JVDhfNTIwMF81MjAwLAotCi0JVDFfNTIwMF81MjgwLAotCVQyXzUyMDBfNTI4MCwKLQlUM181MjAwXzUyODAsCi0JVDRfNTIwMF81MjgwLAotCVQ1XzUyMDBfNTI4MCwKLQlUNl81MjAwXzUyODAsCi0KLQlUMV81MjAwXzUyNDAsCi0JVDFfNTIxMF81MjEwLAotCVQyXzUyMTBfNTIxMCwKLQlUM181MjEwXzUyMTAsCi0JVDRfNTIxMF81MjEwLAotCVQ1XzUyMTBfNTIxMCwKLQlUNl81MjEwXzUyMTAsCi0JVDdfNTIxMF81MjEwLAotCVQ4XzUyMTBfNTIxMCwKLQlUOV81MjEwXzUyMTAsCi0JVDEwXzUyMTBfNTIxMCwKLQlUMV81MjQwXzUyNDAsCi0KLQlUMV81MjEwXzUyNTAsCi0JVDFfNTIxMF81MjkwLAotCVQyXzUyMTBfNTI5MCwKLQlUM181MjEwXzUyOTAsCi0KLQlUMV81MjgwXzUyODAsCi0JVDJfNTI4MF81MjgwLAotCVQxXzUyOTBfNTI5MCwKLQlUMl81MjkwXzUyOTAsCi0JVDNfNTI5MF81MjkwLAotCVQxXzUyNTBfNTI5MCwKLQlUMl81MjUwXzUyOTAsCi0JVDNfNTI1MF81MjkwLAotCVQ0XzUyNTBfNTI5MCwKLQotCVQxXzU1NDBfNTY2MCwKLQlUMl81NTQwXzU2NjAsCi0JVDNfNTU0MF81NjYwLAotCVQxXzU3NjBfNTgwMCwKLQlUMl81NzYwXzU4MDAsCi0JVDNfNTc2MF81ODAwLAotCVQ0XzU3NjBfNTgwMCwKLQlUNV81NzYwXzU4MDAsCi0JVDZfNTc2MF81ODAwLAotCVQ3XzU3NjBfNTgwMCwKLQotCVQxXzU3NjVfNTgwNSwKLQlUMl81NzY1XzU4MDUsCi0JVDNfNTc2NV81ODA1LAotCVQ0XzU3NjVfNTgwNSwKLQlUNV81NzY1XzU4MDUsCi0JVDZfNTc2NV81ODA1LAotCVQ3XzU3NjVfNTgwNSwKLQlUOF81NzY1XzU4MDUsCi0JVDlfNTc2NV81ODA1LAotCi0JV1QxXzUyMTBfNTI1MCwKLQlXVDFfNTI5MF81MjkwLAotCVdUMV81NTQwXzU2NjAsCi0JV1QxXzU3NjBfNTgwMCwKLX07Ci0KLWVudW0gewotCUYxXzIzMTJfMjM3MiwKLQlGMl8yMzEyXzIzNzIsCi0KLQlGMV8yNDEyXzI0NzIsCi0JRjJfMjQxMl8yNDcyLAotCUYzXzI0MTJfMjQ3MiwKLQotCUYxXzI0MTJfMjQ2MiwKLQlGMl8yNDEyXzI0NjIsCi0KLQlGMV8yNDMyXzI0NDIsCi0KLQlGMV8yNDU3XzI0NzIsCi0KLQlGMV8yNDY3XzI0NzIsCi0KLQlGMV8yNDg0XzI0ODQsCi0JRjJfMjQ4NF8yNDg0LAotCi0JRjFfMjUxMl8yNzMyLAotCi0JVzFfMjMxMl8yMzcyLAotCVcxXzI0MTJfMjQxMiwKLQlXMV8yNDE3XzI0MzIsCi0JVzFfMjQzN18yNDQyLAotCVcxXzI0NDdfMjQ1NywKLQlXMV8yNDYyXzI0NjIsCi0JVzFfMjQ2N18yNDY3LAotCVcyXzI0NjdfMjQ2NywKLQlXMV8yNDcyXzI0NzIsCi0JVzJfMjQ3Ml8yNDcyLAotCVcxXzI0ODRfMjQ4NCwKLQlXMl8yNDg0XzI0ODQsCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjJHaHpGcmVxW10gPSB7Ci0JezIzMTIsIDIzNzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBLCAwfSwKLQl7MjQxMiwgMjQ3MiwgMzAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDYyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMH0sCi0KLQl7MjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0NjcsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EsIDB9LAotCi0JezI0ODQsIDI0ODQsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ4NCwgMjQ4NCwgMjAsIDAsIDIwLCA1LCBOT19ERlMsCi0JIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0EyLCAwfSwKLQotCXsyNTEyLCAyNzMyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQxMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxNywgMjQzMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQzNywgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ0NywgMjQ1NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2MiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwfSwKLX07Ci0KLWVudW0gewotCUcxXzIzMTJfMjM3MiwKLQlHMl8yMzEyXzIzNzIsCi0KLQlHMV8yNDEyXzI0NzIsCi0JRzJfMjQxMl8yNDcyLAotCUczXzI0MTJfMjQ3MiwKLQotCUcxXzI0MTJfMjQ2MiwKLQlHMl8yNDEyXzI0NjIsCi0KLQlHMV8yNDMyXzI0NDIsCi0KLQlHMV8yNDU3XzI0NzIsCi0KLQlHMV8yNTEyXzI3MzIsCi0KLQlHMV8yNDY3XzI0NzIsCi0KLQlXRzFfMjMxMl8yMzcyLAotCVdHMV8yNDEyXzI0NjIsCi0JV0cxXzI0NjdfMjQ3MiwKLQlXRzJfMjQ2N18yNDcyLAotCUdfREVNT19BTExfQ0hBTk5FTFMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgcmVnRG1uMkdoejExZ0ZyZXFbXSA9IHsKLQl7MjMxMiwgMjM3MiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0MTIsIDI0NzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMH0sCi0JezI0MTIsIDI0NzIsIDMwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ2MiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMH0sCi0KLQl7MjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI1MTIsIDI3MzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBLCAwfSwKLQotCXsyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi0JezIzMTIsIDI3MzIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlUMV8yMzEyXzIzNzIsCi0JVDFfMjQzN18yNDM3LAotCVQyXzI0MzdfMjQzNywKLQlUM18yNDM3XzI0MzcsCi0JVDFfMjUxMl8yNzMyCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ0RvbWFpbiByZWdEb21haW5zW10gPSB7Ci0KLQl7REVCVUdfUkVHX0RNTiwgRkNDLCBERlNfRkNDMywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oQV9ERU1PX0FMTF9DSEFOTkVMUywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTEzMF81NjUwLCBUMV81MTUwXzU2NzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIwMF81MjQwLCBUMV81MjgwXzUyODAsIFQxXzU1NDBfNTY2MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShGMV8yMzEyXzIzNzIsIEYxXzI0MTJfMjQ3MiwgRjFfMjQ4NF8yNDg0LCBGMV8yNTEyXzI3MzIsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEdfREVNT19BTExfQ0hBTk5FTFMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzIzMTJfMjM3MiwgVDFfMjQzN18yNDM3LCBUMV8yNTEyXzI3MzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtBUEwxLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjRfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMMiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYxXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDMsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMV81MjgwXzUzMjAsIEYyXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjkwXzUyOTAsIFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDQsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGNF81MTgwXzUyNDAsIEYzXzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjEwXzUyMTAsIFQzXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIFQzXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw1LCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjJfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ0XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0ZDQ19UIHwgUFNDQU5fRkNDLCBOT19SRVEsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGM181NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjEwXzUyMTAsIFQxXzUyNTBfNTI5MCwgVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjgwLCBUNV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNywgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksIE5PX1JFUSwKLQkgQk0oRjFfNTI4MF81MzIwLCBGNV81NTAwXzU3MDAsIEYzXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyOTBfNTI5MCwgVDVfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzU1NDBfNTY2MCwgVDZfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDgsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNl81MjYwXzUzMjAsIEY0XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl81MjkwXzUyOTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjgwXzUyODAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw5LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxODBfNTMyMCwgRjFfNTUwMF81NjIwLCBGM181NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjkwXzUyOTAsIFQ1XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NTQwXzU2NjAsIFQ2XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEwxMCwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUzMjAsIEY1XzU1MDBfNTcwMCwgRjNfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTI5MF81MjkwLCBUNV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTU0MF81NjYwLCBUNl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTEsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEYyXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIwMF81MjgwLCBUMl81NTQwXzU2NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTIsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjNfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTMsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0k0LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYzXzUxODBfNTI0MCwgRjFfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQyXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNSwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ0XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNV81MTgwXzUyNDAsIEYxXzUyNjBfNTI4MCwgRjNfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIxMF81MjUwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzEsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEY0XzUyNjBfNTMyMCwgRjVfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIxMF81MjEwLCBUMl81MjUwXzUyOTAsIFQ2XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI0MCwgVDJfNTI4MF81MjgwLCBUN181NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MyLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjZfNTE4MF81MjQwLCBGNV81MjYwXzUzMjAsIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMTBfNTIxMCwgVDNfNTI1MF81MjkwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjAwXzUyMDAsIFQxXzUyNDBfNTI0MCwgVDJfNTI4MF81MjgwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzMsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0ZDQ19ULCBOT19SRVEsCi0JIEJNKEYyXzUxODBfNTI0MCwgRjNfNTI2MF81MzIwLCBGMV81NTAwXzU3MDAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIxMF81MjEwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDRfNTIwMF81MjAwLCBUOF81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDNCwgRkNDLCBERlNfRkNDMywgUFNDQU5fRkNDIHwgUFNDQU5fRkNDX1QsIE5PX1JFUSwKLQkgQk0oRjFfNDk0Ml80OTg3LCBGMV80OTQ1XzQ5ODUsIEYxXzQ5NTBfNDk4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ4XzUyMTBfNTIxMCwgVDRfNTI1MF81MjkwLCBUN181NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyNDAsIFQxXzUyODBfNTI4MCwgVDlfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDNSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYyXzUxODBfNTI0MCwgRjZfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ4XzUyMDBfNTIwMCwgVDdfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzYsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgTk9fUkVRLAotCSBCTShGOF81MTgwXzUyNDAsIEY1XzUyNjBfNTMyMCwgRjFfNTUwMF81NTgwLCBGMV81NjYwXzU3MDAsCi0JICAgIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIFQzXzUyNTBfNTI5MCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIwMF81MjAwLCBUMV81MjQwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtNS0sxLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je01LSzIsIE1LSywgTk9fREZTLCBQU0NBTl9NS0syLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsCi0JICAgIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0szLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDlfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNCwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxMF81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s1LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0szLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjgwLCBUM181NTQwXzU2NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s2LCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYyXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQzXzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzcsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzgsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgVDNfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLOSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUOV81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMCwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLAotCSAgICBGNF81NTAwXzU3MDAsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMiwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwKLQkgICAgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzEzLCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjdfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTQsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNDBfNTA4MCwgRjFfNTA1NV81MDU1LCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxNSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA0MF81MDgwLCBGMV81MDU1XzUwNTUsIEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLAotCSAgICBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtBUExELCBOT19DVEwsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjMxMl8yMzcyLCBGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oRzJfMjMxMl8yMzcyLCBHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPfSwKLQotCXtFVFNJQSwgTk9fQ1RMLCBOT19ERlMsIFBTQ0FOX0VUU0lBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQ1N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDU3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7RVRTSUIsIEVUU0ksIE5PX0RGUywgUFNDQU5fRVRTSUIsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMV8yNDMyXzI0NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcxXzI0MzJfMjQ0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtFVFNJQywgRVRTSSwgTk9fREZTLCBQU0NBTl9FVFNJQywKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYzXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzNfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0ZDQ0EsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtNS0tBLCBNS0ssIE5PX0RGUywKLQkgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRyB8Ci0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYyXzI0MTJfMjQ2MiwgRjFfMjQ2N18yNDcyLCBGMl8yNDg0XzI0ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NjIsIEcxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je01LS0MsIE1LSywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JMRCwgRVRTSSwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjAxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwKLQkgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsCi0JIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0VVMV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcyXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcyXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cyXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIFcxXzI0ODRfMjQ4NCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjNfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cyXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjRfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsCi0JICAgIFcxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjVfRVRTSUMsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SOV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzU3NDVfNTgyNSwgVzFfNTUwMF81NzAwLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsCi0JICAgIFcxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUkFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUkJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7TlVMTDEsIE5PX0NUTCwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbW9kZSBtb2Rlc1tdID0gewotCXtBVEg5S19NT0RFXzExQSwgQ0hBTk5FTF9BfSwKLQl7QVRIOUtfTU9ERV8xMUIsIENIQU5ORUxfQn0sCi0Je0FUSDlLX01PREVfMTFHLCBDSEFOTkVMX0d9LAotCXtBVEg5S19NT0RFXzExTkdfSFQyMCwgQ0hBTk5FTF9HX0hUMjB9LAotCXtBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIENIQU5ORUxfR19IVDQwUExVU30sCi0Je0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIENIQU5ORUxfR19IVDQwTUlOVVN9LAotCXtBVEg5S19NT0RFXzExTkFfSFQyMCwgQ0hBTk5FTF9BX0hUMjB9LAotCXtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMsIENIQU5ORUxfQV9IVDQwUExVU30sCi0Je0FUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMsIENIQU5ORUxfQV9IVDQwTUlOVVN9LAotfTsKLQotc3RhdGljIHN0cnVjdCBqYXBhbl9iYW5kY2hlY2sgal9iYW5kY2hlY2tbXSA9IHsKLQl7RjFfNTE3MF81MjMwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REfSwKLQl7RjRfNTE4MF81MjQwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTn0sCi0Je0YyXzUyNjBfNTMyMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyfSwKLQl7RjRfNTUwMF81NzAwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORH0KLX07Ci0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNDI5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3ZpcnR1YWwuYwpAQCAtMCwwICsxLDY2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7CisJaW50IGNvdW50OworCXU4ICphZGRyOworfTsKKworc3RhdGljIHZvaWQgYXRoOWtfdmlmX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSAqaXRlcl9kYXRhID0gZGF0YTsKKwl1OCAqbmJ1ZjsKKworCW5idWYgPSBrcmVhbGxvYyhpdGVyX2RhdGEtPmFkZHIsIChpdGVyX2RhdGEtPmNvdW50ICsgMSkgKiBFVEhfQUxFTiwKKwkJCUdGUF9BVE9NSUMpOworCWlmIChuYnVmID09IE5VTEwpCisJCXJldHVybjsKKworCW1lbWNweShuYnVmICsgaXRlcl9kYXRhLT5jb3VudCAqIEVUSF9BTEVOLCBtYWMsIEVUSF9BTEVOKTsKKwlpdGVyX2RhdGEtPmFkZHIgPSBuYnVmOworCWl0ZXJfZGF0YS0+Y291bnQrKzsKK30KKwordm9pZCBhdGg5a19zZXRfYnNzaWRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSBpdGVyX2RhdGE7CisJaW50IGksIGo7CisJdTggbWFza1tFVEhfQUxFTl07CisKKwkvKgorCSAqIEFkZCBwcmltYXJ5IE1BQyBhZGRyZXNzIGV2ZW4gaWYgaXQgaXMgbm90IGluIGFjdGl2ZSB1c2Ugc2luY2UgaXQKKwkgKiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gdGhlIGhhcmR3YXJlIGFzIHRoZSBzdGFydGluZyBwb2ludCBhbmQgdGhlCisJICogQlNTSUQgbWFzayB3aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCBpZiBhbm90aGVyIGFkZHJlc3MgaXMgYWN0aXZlLgorCSAqLworCWl0ZXJfZGF0YS5hZGRyID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0FUT01JQyk7CisJaWYgKGl0ZXJfZGF0YS5hZGRyKSB7CisJCW1lbWNweShpdGVyX2RhdGEuYWRkciwgc2MtPnNjX2FoLT5tYWNhZGRyLCBFVEhfQUxFTik7CisJCWl0ZXJfZGF0YS5jb3VudCA9IDE7CisJfSBlbHNlCisJCWl0ZXJfZGF0YS5jb3VudCA9IDA7CisKKwkvKiBHZXQgbGlzdCBvZiBhbGwgYWN0aXZlIE1BQyBhZGRyZXNzZXMgKi8KKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoc2MtPmh3LCBhdGg5a192aWZfaXRlciwKKwkJCQkJCSAgICZpdGVyX2RhdGEpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJc2MtPnNlY193aXBoeVtpXS0+aHcsIGF0aDlrX3ZpZl9pdGVyLCAmaXRlcl9kYXRhKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCS8qIEdlbmVyYXRlIGFuIGFkZHJlc3MgbWFzayB0byBjb3ZlciBhbGwgYWN0aXZlIGFkZHJlc3NlcyAqLworCW1lbXNldChtYXNrLCAwLCBFVEhfQUxFTik7CisJZm9yIChpID0gMDsgaSA8IGl0ZXJfZGF0YS5jb3VudDsgaSsrKSB7CisJCXU4ICphMSA9IGl0ZXJfZGF0YS5hZGRyICsgaSAqIEVUSF9BTEVOOworCQlmb3IgKGogPSBpICsgMTsgaiA8IGl0ZXJfZGF0YS5jb3VudDsgaisrKSB7CisJCQl1OCAqYTIgPSBpdGVyX2RhdGEuYWRkciArIGogKiBFVEhfQUxFTjsKKwkJCW1hc2tbMF0gfD0gYTFbMF0gXiBhMlswXTsKKwkJCW1hc2tbMV0gfD0gYTFbMV0gXiBhMlsxXTsKKwkJCW1hc2tbMl0gfD0gYTFbMl0gXiBhMlsyXTsKKwkJCW1hc2tbM10gfD0gYTFbM10gXiBhMlszXTsKKwkJCW1hc2tbNF0gfD0gYTFbNF0gXiBhMls0XTsKKwkJCW1hc2tbNV0gfD0gYTFbNV0gXiBhMls1XTsKKwkJfQorCX0KKworCWtmcmVlKGl0ZXJfZGF0YS5hZGRyKTsKKworCS8qIEludmVydCB0aGUgbWFzayBhbmQgY29uZmlndXJlIGhhcmR3YXJlICovCisJc2MtPmJzc2lkbWFza1swXSA9IH5tYXNrWzBdOworCXNjLT5ic3NpZG1hc2tbMV0gPSB+bWFza1sxXTsKKwlzYy0+YnNzaWRtYXNrWzJdID0gfm1hc2tbMl07CisJc2MtPmJzc2lkbWFza1szXSA9IH5tYXNrWzNdOworCXNjLT5ic3NpZG1hc2tbNF0gPSB+bWFza1s0XTsKKwlzYy0+YnNzaWRtYXNrWzVdID0gfm1hc2tbNV07CisKKwlhdGg5a19od19zZXRic3NpZG1hc2soc2MpOworfQorCitpbnQgYXRoOWtfd2lwaHlfYWRkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpLCBlcnJvcjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpLCAmYXRoOWtfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gc2MtPm51bV9zZWNfd2lwaHkpIHsKKwkJLyogTm8gZW1wdHkgc2xvdCBhdmFpbGFibGU7IGluY3JlYXNlIGFycmF5IGxlbmd0aCAqLworCQlzdHJ1Y3QgYXRoX3dpcGh5ICoqbjsKKwkJbiA9IGtyZWFsbG9jKHNjLT5zZWNfd2lwaHksCisJCQkgICAgIChzYy0+bnVtX3NlY193aXBoeSArIDEpICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkgKiksCisJCQkgICAgIEdGUF9BVE9NSUMpOworCQlpZiAobiA9PSBOVUxMKSB7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbltpXSA9IE5VTEw7CisJCXNjLT5zZWNfd2lwaHkgPSBuOworCQlzYy0+bnVtX3NlY193aXBoeSsrOworCX0KKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCBzYy0+ZGV2KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnNlY193aXBoeVtpXSA9IGFwaHk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCW1lbWNweShhZGRyLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwlhZGRyWzBdIHw9IDB4MDI7IC8qIExvY2FsbHkgbWFuYWdlZCBhZGRyZXNzICovCisJLyoKKwkgKiBYT1IgdmlydHVhbCB3aXBoeSBpbmRleCBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIHRvIGdlbmVyYXRlCisJICogYSBkaWZmZXJlbnQgTUFDIGFkZHJlc3MgZm9yIGVhY2ggdmlydHVhbCB3aXBoeS4KKwkgKi8KKwlhZGRyWzVdIF49IGkgJiAweGZmOworCWFkZHJbNF0gXj0gKGkgJiAweGZmMDApID4+IDg7CisJYWRkclszXSBePSAoaSAmIDB4ZmYwMDAwKSA+PiAxNjsKKworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBhZGRyKTsKKworCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKKworCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCS8qIE1ha2Ugc3VyZSB3aXBoeSBzY2hlZHVsZXIgaXMgc3RhcnRlZCAoaWYgZW5hYmxlZCkgKi8KKwkJYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzYywgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworaW50IGF0aDlrX3dpcGh5X2RlbChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoYXBoeSA9PSBzYy0+c2VjX3dpcGh5W2ldKSB7CisJCQlzYy0+c2VjX3dpcGh5W2ldID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCQlpZWVlODAyMTFfZnJlZV9odyhhcGh5LT5odyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGF0aDlrX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGF0aF93aXBoeSAqYXBoeSwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgICAgaW50IHBzKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlfX2xlMTYgZmM7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCisJc2tiID0gZGV2X2FsbG9jX3NrYigyNCk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQoaGRyLCAwLCAyNCk7CisJZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisJaWYgKHBzKQorCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CisJaGRyLT5mcmFtZV9jb250cm9sID0gZmM7CisJbWVtY3B5KGhkci0+YWRkcjEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjIsIGFwaHktPmh3LT53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjMsIGJzc2lkLCBFVEhfQUxFTik7CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5mbGFncyA9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKKwlpbmZvLT5jb250cm9sLnZpZiA9IHZpZjsKKwlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IDA7CisJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCA9IDQ7CisJaW5mby0+Y29udHJvbC5yYXRlc1sxXS5pZHggPSAtMTsKKworCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wpKTsKKwl0eGN0bC50eHEgPSAmc2MtPnR4LnR4cVtzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dXTsKKwl0eGN0bC5mcmFtZV90eXBlID0gcHMgPyBBVEg5S19JTlRfUEFVU0UgOiBBVEg5S19JTlRfVU5QQVVTRTsKKworCWlmIChhdGhfdHhfc3RhcnQoYXBoeS0+aHcsIHNrYiwgJnR4Y3RsKSAhPSAwKQorCQlnb3RvIGV4aXQ7CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBib29sIF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpCisJCXJldHVybiB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfUEFVU0lORykKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX3dpcGh5X3BhdXNpbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJYm9vbCByZXQ7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0ID0gX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKQorCQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgPT0gQVRIX1dJUEhZX1NDQU4pCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGF0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWJvb2wgcmV0OworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc2MpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaWYgKGFwaHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChhcGh5LT5jaGFuX2lkeCAhPSBhcGh5LT5zYy0+Y2hhbl9pZHgpCisJCXJldHVybjsgLyogd2lwaHkgbm90IG9uIHRoZSBzZWxlY3RlZCBjaGFubmVsICovCisJX19hdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a193aXBoeV91bnBhdXNlX2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHNjLT5wcmlfd2lwaHkpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKQorCQlfX2F0aDlrX3dpcGh5X3VucGF1c2VfY2goc2MtPnNlY193aXBoeVtpXSk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKK30KKwordm9pZCBhdGg5a193aXBoeV9jaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsIGNoYW5fd29yayk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5uZXh0X3dpcGh5OworCisJaWYgKGFwaHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbGwgcGVuZGluZyBpbnRlcmZhY2VzIHBhdXNlZDsgcmVhZHkgdG8gY2hhbmdlCisJICogY2hhbm5lbHMuCisJICovCisKKwkvKiBDaGFuZ2UgY2hhbm5lbHMgKi8KKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCS8qIFhYWDogcmVtb3ZlIG1lIGV2ZW50dWFsbHkgKi8KKwlhdGg5a191cGRhdGVfaWNoYW5uZWwoc2MsIGFwaHktPmh3LAorCQkJICAgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSk7CisJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIHNjLT5jaGFuX2lzX2h0KTsKKwlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBhcGh5LT5odywKKwkJCSAgICAmc2MtPnNjX2FoLT5jaGFubmVsc1tzYy0+Y2hhbl9pZHhdKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBGYWlsZWQgdG8gc2V0IGNoYW5uZWwgZm9yIG5ldyAiCisJCSAgICAgICAidmlydHVhbCB3aXBoeVxuIik7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKKwlhdGg5a193aXBoeV91bnBhdXNlX2NoYW5uZWwoc2MpOworfQorCisvKgorICogYXRoOWsgdmVyc2lvbiBvZiBpZWVlODAyMTFfdHhfc3RhdHVzKCkgZm9yIFRYIGZyYW1lcyB0aGF0IGFyZSBnZW5lcmF0ZWQKKyAqIGludGVybmFsbHkgaW4gdGhlIGRyaXZlci4KKyAqLwordm9pZCBhdGg5a190eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisKKwlpZiAodHhfaW5mb19wcml2ICYmIHR4X2luZm9fcHJpdi0+ZnJhbWVfdHlwZSA9PSBBVEg5S19JTlRfUEFVU0UgJiYKKwkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpIHsKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6ICVzOiBubyBBQ0sgZm9yIHBhdXNlICIKKwkJCSAgICAgICAiZnJhbWVcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkvKgorCQkJICogVGhlIEFQIGRpZCBub3QgcmVwbHk7IGlnbm9yZSB0aGlzIHRvIGFsbG93IHVzIHRvCisJCQkgKiBjb250aW51ZS4KKwkJCSAqLworCQl9CisJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwkJaWYgKCFhdGg5a193aXBoeV9wYXVzaW5nKGFwaHktPnNjKSkgeworCQkJLyoKKwkJCSAqIERyb3AgZnJvbSB0YXNrbGV0IHRvIHdvcmsgdG8gYWxsb3cgbXV0ZXggZm9yIGNoYW5uZWwKKwkJCSAqIGNoYW5nZS4KKwkJCSAqLworCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJCX0KKwl9CisKKwlrZnJlZSh0eF9pbmZvX3ByaXYpOworCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOworCisJZGV2X2tmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19tYXJrX3BhdXNlZChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCWlmICghX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKSkKKwkJcXVldWVfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT5jaGFuX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19wYXVzZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGRhdGE7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopIHZpZi0+ZHJ2X3ByaXY7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKCF2aWYtPmJzc19jb25mLmFzc29jKSB7CisJCQlhdGg5a19tYXJrX3BhdXNlZChhcGh5KTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFRPRE86IGNvdWxkIGF2b2lkIHRoaXMgaWYgYWxyZWFkeSBpbiBQUyBtb2RlICovCisJCWlmIChhdGg5a19zZW5kX251bGxmdW5jKGFwaHksIHZpZiwgYXZwLT5ic3NpZCwgMSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNlbmQgUFMgbnVsbGZ1bmNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJYXRoOWtfbWFya19wYXVzZWQoYXBoeSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJLyogQmVhY29uIHRyYW5zbWlzc2lvbiBpcyBwYXVzZWQgYnkgYXBoeS0+c3RhdGUgY2hhbmdlICovCisJCWF0aDlrX21hcmtfcGF1c2VkKGFwaHkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGFwaHktPmh3KTsKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTSU5HOworCS8qCisJICogVE9ETzogaGFuZGxlIFBBVVNJTkctPlBBVVNFRCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlCisJICogYWN0aXZlIHZpZnMgKG5vdyB3ZSBkbyBpdCBvbiB0aGUgZmlyc3QgdmlmIGdldHRpbmcgcmVhZHk7IHNob3VsZCBiZQorCSAqIG9uIHRoZSBsYXN0KQorCSAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhcGh5LT5odywgYXRoOWtfcGF1c2VfaXRlciwKKwkJCQkJCSAgIGFwaHkpOworCXJldHVybiAwOworfQorCitpbnQgYXRoOWtfd2lwaHlfcGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlpbnQgcmV0OworCXNwaW5fbG9ja19iaCgmYXBoeS0+c2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfcGF1c2UoYXBoeSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdGg5a191bnBhdXNlX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZGF0YTsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKikgdmlmLT5kcnZfcHJpdjsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoIXZpZi0+YnNzX2NvbmYuYXNzb2MpCisJCQlicmVhazsKKwkJYXRoOWtfc2VuZF9udWxsZnVuYyhhcGh5LCB2aWYsIGF2cC0+YnNzaWQsIDApOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkvKiBCZWFjb24gdHJhbnNtaXNzaW9uIGlzIHJlLWVuYWJsZWQgYnkgYXBoeS0+c3RhdGUgY2hhbmdlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB3aXBoeV9sb2NrICovCitzdGF0aWMgaW50IF9fYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhcGh5LT5odywKKwkJCQkJCSAgIGF0aDlrX3VucGF1c2VfaXRlciwgYXBoeSk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhhcGh5LT5odyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaW50IHJldDsKKwlzcGluX2xvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2F0aDlrX3dpcGh5X21hcmtfYWxsX3BhdXNlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKQorCQlzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJCXNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV9wYXVzZV9hbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCV9fYXRoOWtfd2lwaHlfcGF1c2Uoc2MtPnByaV93aXBoeSk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCQlfX2F0aDlrX3dpcGh5X3BhdXNlKHNjLT5zZWNfd2lwaHlbaV0pOworCX0KK30KKworaW50IGF0aDlrX3dpcGh5X3NlbGVjdChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJYm9vbCBub3c7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoX19hdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJLyoKKwkJICogRm9yIG5vdywgd2UgYXJlIHVzaW5nIG1hYzgwMjExIHN3IHNjYW4gYW5kIGl0IGV4cGVjdHMgdG8KKwkJICogaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciBjaGFubmVsIGNoYW5nZXMsIHNvIGF2b2lkIHdpcGh5CisJCSAqIHNjaGVkdWxpbmcgZHVyaW5nIGEgc2Nhbi4gVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgaWYgdGhlCisJCSAqIHNjYW5uaW5nIGNvbnRyb2wgd2VyZSBtb3ZlZCBpbnRvIHRoZSBkcml2ZXIuCisJCSAqLworCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKSkgeworCQlpZiAoc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcyA9PSAwKQorCQkJc2MtPndpcGh5X3NlbGVjdF9maXJzdF9mYWlsID0gamlmZmllczsKKwkJc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcysrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzYy0+d2lwaHlfc2VsZWN0X2ZpcnN0X2ZhaWwgKyBIWiAvIDIpKQorCQl7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6IFByZXZpb3VzIHdpcGh5IHNlbGVjdCB0aW1lZCAiCisJCQkgICAgICAgIm91dDsgZGlzYWJsZS9lbmFibGUgaHcgdG8gcmVjb3ZlclxuIik7CisJCQlfX2F0aDlrX3dpcGh5X21hcmtfYWxsX3BhdXNlZChzYyk7CisJCQkvKgorCQkJICogVE9ETzogdGhpcyB3b3JrYXJvdW5kIHRvIGZpeCBoYXJkd2FyZSBpcyB1bmxpa2VseSB0bworCQkJICogYmUgc3BlY2lmaWMgdG8gdmlydHVhbCB3aXBoeSBjaGFuZ2VzLiBJdCBjYW4gaGFwcGVuCisJCQkgKiBvbiBub3JtYWwgY2hhbm5lbCBjaGFuZ2UsIHRvbywgYW5kIGFzIHN1Y2gsIHRoaXMKKwkJCSAqIHNob3VsZCByZWFsbHkgYmUgbWFkZSBtb3JlIGdlbmVyaWMuIEZvciBleGFtcGxlLAorCQkJICogdHJpY2tlciByYWRpbyBkaXNhYmxlL2VuYWJsZSBvbiBHVFQgaW50ZXJydXB0IGJ1cnN0CisJCQkgKiAoc2F5LCAxMCBHVFQgaW50ZXJydXB0cyByZWNlaXZlZCB3aXRob3V0IGFueSBUWAorCQkJICogZnJhbWUgYmVpbmcgY29tcGxldGVkKQorCQkJICovCisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJYXRoX3JhZGlvX2Rpc2FibGUoc2MpOworCQkJYXRoX3JhZGlvX2VuYWJsZShzYyk7CisJCQlxdWV1ZV93b3JrKGFwaHktPnNjLT5ody0+d29ya3F1ZXVlLAorCQkJCSAgICZhcGh5LT5zYy0+Y2hhbl93b3JrKTsKKwkJCXJldHVybiAtRUJVU1k7IC8qIHByZXZpb3VzIHNlbGVjdCBzdGlsbCBpbiBwcm9ncmVzcyAqLworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybiAtRUJVU1k7IC8qIHByZXZpb3VzIHNlbGVjdCBzdGlsbCBpbiBwcm9ncmVzcyAqLworCX0KKwlzYy0+d2lwaHlfc2VsZWN0X2ZhaWx1cmVzID0gMDsKKworCS8qIFN0b3JlIHRoZSBuZXcgY2hhbm5lbCAqLworCXNjLT5jaGFuX2lkeCA9IGFwaHktPmNoYW5faWR4OworCXNjLT5jaGFuX2lzX2h0ID0gYXBoeS0+Y2hhbl9pc19odDsKKwlzYy0+bmV4dF93aXBoeSA9IGFwaHk7CisKKwlfX2F0aDlrX3dpcGh5X3BhdXNlX2FsbChzYyk7CisJbm93ID0gIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhhcGh5LT5zYyk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChub3cpIHsKKwkJLyogUmVhZHkgdG8gcmVxdWVzdCBjaGFubmVsIGNoYW5nZSBpbW1lZGlhdGVseSAqLworCQlxdWV1ZV93b3JrKGFwaHktPnNjLT5ody0+d29ya3F1ZXVlLCAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJfQorCisJLyoKKwkgKiB3aXBoeXMgd2lsbCBiZSB1bnBhdXNlZCBpbiBhdGg5a190eF9zdGF0dXMoKSBvbmNlIGNoYW5uZWwgaGFzIGJlZW4KKwkgKiBjaGFuZ2VkIGlmIGFueSB3aXBoeSBuZWVkcyB0aW1lIHRvIGJlY29tZSBwYXVzZWQuCisJICovCisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBhdGg5a193aXBoeV9zdGFydGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LAorCQkJCSAgIHN0cnVjdCBhdGhfd2lwaHkgKnNlbGVjdGVkKQoreworCWlmIChzZWxlY3RlZC0+c3RhdGUgPT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJaWYgKGFwaHkgPT0gc2VsZWN0ZWQpCisJCQlyZXR1cm47CisJCS8qCisJCSAqIFBhdXNlIGFsbCBvdGhlciB3aXBoeXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NhbiBldmVuIGlmCisJCSAqIHRoZXkgYXJlIG9uIHRoZSBjdXJyZW50IGNoYW5uZWwgbm93LgorCQkgKi8KKwl9IGVsc2UgaWYgKGFwaHktPmNoYW5faWR4ID09IHNlbGVjdGVkLT5jaGFuX2lkeCkKKwkJcmV0dXJuOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoYXBoeS0+aHcpOworfQorCit2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCkKK3sKKwlpbnQgaTsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzYy0+cHJpX3dpcGh5LCBzZWxlY3RlZCk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCQlhdGg5a193aXBoeV9wYXVzZV9jaGFuKHNjLT5zZWNfd2lwaHlbaV0sIHNlbGVjdGVkKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKK30KKwordm9pZCBhdGg5a193aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgd2lwaHlfd29yay53b3JrKTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gTlVMTDsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCisJaWYgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID09IDApIHsKKwkJLyogd2lwaHkgc2NoZWR1bGVyIGlzIGRpc2FibGVkICovCisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybjsKKwl9CisKK3RyeV9hZ2FpbjoKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4Kys7CisJd2hpbGUgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggPD0gc2MtPm51bV9zZWNfd2lwaHkpIHsKKwkJYXBoeSA9IHNjLT5zZWNfd2lwaHlbc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCAtIDFdOworCQlpZiAoYXBoeSAmJiBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpCisJCQlicmVhazsKKworCQlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4Kys7CisJCWFwaHkgPSBOVUxMOworCX0KKwlpZiAoYXBoeSA9PSBOVUxMKSB7CisJCXNjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggPSAwOworCQlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCQlpZiAoZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJfQorCQkJLyogTm8gd2lwaHkgaXMgcmVhZHkgdG8gYmUgc2NoZWR1bGVkICovCisJCX0gZWxzZQorCQkJYXBoeSA9IHNjLT5wcmlfd2lwaHk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChhcGh5ICYmCisJICAgIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4gJiYKKwkgICAgYXRoOWtfd2lwaHlfc2VsZWN0KGFwaHkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNjaGVkdWxlIHZpcnR1YWwgd2lwaHkgIgorCQkgICAgICAgImNoYW5nZVxuIik7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPndpcGh5X3dvcmssCisJCQkgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdW5zaWduZWQgaW50IG1zZWNfaW50KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPndpcGh5X3dvcmspOworCXNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID0gbXNlY3NfdG9famlmZmllcyhtc2VjX2ludCk7CisJaWYgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+d2lwaHlfd29yaywKKwkJCQkgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMKaW5kZXggYzkyZjBjNi4uNjg5YmRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3htaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEJJVFNfUEVSX0JZVEUgICAgICAgICAgIDgKICNkZWZpbmUgT0ZETV9QTENQX0JJVFMgICAgICAgICAgMjIKQEAgLTU1LDk0ICs1NSwyMyBAQAogCiAjZGVmaW5lIElTX0hUX1JBVEUoX3JhdGUpICAgICAoKF9yYXRlKSAmIDB4ODApCiAKLS8qCi0gKiBJbnNlcnQgYSBjaGFpbiBvZiBhdGhfYnVmIChkZXNjcmlwdG9ycykgb24gYSB0eHEgYW5kCi0gKiBhc3N1bWUgdGhlIGRlc2NyaXB0b3JzIGFyZSBhbHJlYWR5IGNoYWluZWQgdG9nZXRoZXIgYnkgY2FsbGVyLgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpOwogc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmOworCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZik7CitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spOworc3RhdGljIHZvaWQgYXRoX3R4X3JjX3N0YXR1cyhzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgICAgIGludCBuYmFkLCBpbnQgdHhvaywgYm9vbCB1cGRhdGVfcmMpOwogCi0JLyoKLQkgKiBJbnNlcnQgdGhlIGZyYW1lIG9uIHRoZSBvdXRib3VuZCBsaXN0IGFuZAotCSAqIHBhc3MgaXQgb24gdG8gdGhlIGhhcmR3YXJlLgotCSAqLwotCi0JaWYgKGxpc3RfZW1wdHkoaGVhZCkpCi0JCXJldHVybjsKLQotCWJmID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0KLQlsaXN0X3NwbGljZV90YWlsX2luaXQoaGVhZCwgJnR4cS0+YXhxX3EpOwotCXR4cS0+YXhxX2RlcHRoKys7Ci0JdHhxLT5heHFfdG90YWxxdWV1ZWQrKzsKLQl0eHEtPmF4cV9saW5rYnVmID0gbGlzdF9lbnRyeSh0eHEtPmF4cV9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsCi0JCSJxbnVtOiAlZCwgdHhxIGRlcHRoOiAlZFxuIiwgdHhxLT5heHFfcW51bSwgdHhxLT5heHFfZGVwdGgpOwotCi0JaWYgKHR4cS0+YXhxX2xpbmsgPT0gTlVMTCkgewotCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSwgYmYtPmJmX2RhZGRyKTsKLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULAotCQkJIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAotCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOwotCX0gZWxzZSB7Ci0JCSp0eHEtPmF4cV9saW5rID0gYmYtPmJmX2RhZGRyOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJsaW5rWyV1XSAoJXApPSVsbHggKCVwKVxuIiwKLQkJCXR4cS0+YXhxX3FudW0sIHR4cS0+YXhxX2xpbmssCi0JCQlpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7Ci0JfQotCXR4cS0+YXhxX2xpbmsgPSAmKGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MtPmRzX2xpbmspOwotCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHR4cS0+YXhxX3FudW0pOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGF0aF94bWl0X3N0YXR1cyAqdHhfc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKLQlpbnQgaGRybGVuLCBwYWRzaXplOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7Ci0KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAotCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSB7Ci0JCWtmcmVlKHR4X2luZm9fcHJpdik7Ci0JCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOwotCX0KLQotCWlmICh0eF9zdGF0dXMtPmZsYWdzICYgQVRIX1RYX0JBUikgewotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOwotCQl0eF9zdGF0dXMtPmZsYWdzICY9IH5BVEhfVFhfQkFSOwotCX0KLQotCWlmICghKHR4X3N0YXR1cy0+ZmxhZ3MgJiAoQVRIX1RYX0VSUk9SIHwgQVRIX1RYX1hSRVRSWSkpKSB7Ci0JCS8qIEZyYW1lIHdhcyBBQ0tlZCAqLwotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JfQotCi0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdHhfc3RhdHVzLT5yZXRyaWVzICsgMTsKLQotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JcGFkc2l6ZSA9IGhkcmxlbiAmIDM7Ci0JaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bwotCQkgKiBtYWM4MDIxMS4KLQkJICovCi0JCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOwotCQlza2JfcHVsbChza2IsIHBhZHNpemUpOwotCX0KLQotCWllZWU4MDIxMV90eF9zdGF0dXMoaHcsIHNrYik7Ci19Ci0KLS8qIENoZWNrIGlmIGl0J3Mgb2theSB0byBzZW5kIG91dCBhZ2dyZWdhdGVzICovCisvKioqKioqKioqKioqKioqKioqKioqLworLyogQWdncmVnYXRpb24gbG9naWMgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgYXRoX2FnZ3JfcXVlcnkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKQogewpAQCAtMTU2LDIzMiArODUsMTkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9nZXRfYmVhY29uY29uZmlnKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQsCi0JCQkJIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQotCS8qIGZpbGwgaW4gYmVhY29uIGNvbmZpZyBkYXRhICovCi0KLQljb25mLT5iZWFjb25faW50ZXJ2YWwgPSBody0+Y29uZi5iZWFjb25faW50OwotCWNvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDEwMDsKLQljb25mLT5kdGltX2NvdW50ID0gMTsKLQljb25mLT5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLT5saXN0ZW5faW50ZXJ2YWw7Ci19Ci0KLS8qIENhbGN1bGF0ZSBBdGhlcm9zIHBhY2tldCB0eXBlIGZyb20gSUVFRTgwMjExIHBhY2tldCBoZWFkZXIgKi8KLQotc3RhdGljIGVudW0gYXRoOWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQllbnVtIGF0aDlrX3BrdF90eXBlIGh0eXBlOwotCV9fbGUxNiBmYzsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9CRUFDT047Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1A7Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0FUSU07Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFNQT0xMOwotCWVsc2UKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9OT1JNQUw7Ci0KLQlyZXR1cm4gaHR5cGU7Ci19Ci0KLXN0YXRpYyBib29sIGlzX3BhZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JX19sZTE2IGZjOwotCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgewotCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSB8fAotCQkgICAgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KLQkJICAgIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKLQkJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1dFUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9XRVA7Ci0JCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCi0JCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfVEtJUDsKLQkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfQ0NNUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9BRVM7Ci0JfQotCi0JcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0NMRUFSOwotfQotCi0vKiBDYWxsZWQgb25seSB3aGVuIHR4IGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQgYW5kIEhUIGlzIHN1cHBvcnRlZCAqLwotCi1zdGF0aWMgdm9pZCBhc3NpZ25fYWdncl90aWRfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwotCV9fbGUxNiBmYzsKLQl1OCAqcWM7Ci0KLQlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQotCQlyZXR1cm47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JLyogR2V0IHRpZG5vICovCi0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQliZi0+YmZfdGlkbm8gPSBxY1swXSAmIDB4ZjsKLQl9Ci0KLQkvKiBHZXQgc2Vxbm8gKi8KLQkvKiBGb3IgSFQgY2FwYWJsZSBzdGF0aW9ucywgd2Ugc2F2ZSB0aWRubyBmb3IgbGF0ZXIgdXNlLgotCSAqIFdlIGFsc28gb3ZlcnJpZGUgc2Vxbm8gc2V0IGJ5IHVwcGVyIGxheWVyIHdpdGggdGhlIG9uZQotCSAqIGluIHR4IGFnZ3JlZ2F0aW9uIHN0YXRlLgotCSAqCi0JICogSWYgZnJhZ21lbnRhdGlvbiBpcyBvbiwgdGhlIHNlcXVlbmNlIG51bWJlciBpcwotCSAqIG5vdCBvdmVycmlkZGVuLCBzaW5jZSBpdCBoYXMgYmVlbgotCSAqIGluY3JlbWVudGVkIGJ5IHRoZSBmcmFnbWVudGF0aW9uIHJvdXRpbmUuCi0JICoKLQkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGV4Y2VlZHMKLQkgKiBJRUVFODAyMTEgbWF4LgotCSAqLwotCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKLQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYodGlkLT5zZXFfbmV4dCA8PAotCQkJSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOwotCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7Ci0JSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWludCBmbGFncyA9IDA7Ci0KLQlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLwotCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7Ci0KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX05PQUNLOwotCWlmICh0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQotCQlmbGFncyB8PSBBVEg5S19UWERFU0NfUlRTRU5BOwotCi0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF90eF9nZXRfYnVmZmVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfYnVmICpiZiA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHgudHhidWYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQlsaXN0X2RlbCgmYmYtPmxpc3QpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JcmV0dXJuIGJmOwotfQotCi0vKiBUbyBjb21wbGV0ZSBhIGNoYWluIG9mIGJ1ZmZlcnMgYXNzb2NpYXRlZCBhIGZyYW1lICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCi0JCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKLQlzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzIHR4X3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBTZXQgcmV0cnkgaW5mb3JtYXRpb24uCi0JICogTkI6IERvbid0IHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRlc2NyaXB0b3IsIGJlY2F1c2UgdGhlIGZyYW1lCi0JICogY291bGQgYmUgc29mdHdhcmUgcmV0cmllZC4KLQkgKi8KLQl0eF9zdGF0dXMucmV0cmllcyA9IGJmLT5iZl9yZXRyaWVzOwotCXR4X3N0YXR1cy5mbGFncyA9IDA7Ci0KLQlpZiAoc2VuZGJhcikKLQkJdHhfc3RhdHVzLmZsYWdzID0gQVRIX1RYX0JBUjsKLQotCWlmICghdHhvaykgewotCQl0eF9zdGF0dXMuZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOwotCi0JCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKLQkJCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfWFJFVFJZOwotCX0KLQotCS8qIFVubWFwIHRoaXMgZnJhbWUgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LAotCQkJIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJIHNrYi0+bGVuLAotCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCS8qIGNvbXBsZXRlIHRoaXMgZnJhbWUgKi8KLQlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgJnR4X3N0YXR1cyk7Ci0KLQkvKgotCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKLQlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogcXVldWUgdXAgYSBkZXN0L2FjIHBhaXIgZm9yIHR4IHNjaGVkdWxpbmcKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfcXVldWVfdGlkKHN0cnVjdCBhdGhfdHhxICp0eHEsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfYXR4X2FjICphYyA9IHRpZC0+YWM7CiAKLQkvKgotCSAqIGlmIHRpZCBpcyBwYXVzZWQsIGhvbGQgb2ZmCi0JICovCiAJaWYgKHRpZC0+cGF1c2VkKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIGFkZCB0aWQgdG8gYWMgYXRtb3N0IG9uY2UKLQkgKi8KIAlpZiAodGlkLT5zY2hlZCkKIAkJcmV0dXJuOwogCiAJdGlkLT5zY2hlZCA9IHRydWU7CiAJbGlzdF9hZGRfdGFpbCgmdGlkLT5saXN0LCAmYWMtPnRpZF9xKTsKIAotCS8qCi0JICogYWRkIG5vZGUgYWMgdG8gdHhxIGF0bW9zdCBvbmNlCi0JICovCiAJaWYgKGFjLT5zY2hlZCkKIAkJcmV0dXJuOwogCkBAIC0zODksMjIgKzEwNSwxNiBAQAogCWxpc3RfYWRkX3RhaWwoJmFjLT5saXN0LCAmdHhxLT5heHFfYWNxKTsKIH0KIAotLyogcGF1c2UgYSB0aWQgKi8KLQogc3RhdGljIHZvaWQgYXRoX3R4X3BhdXNlX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3RpZC0+YWMtPnFudW1dOwogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQogCXRpZC0+cGF1c2VkKys7Ci0KIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKLS8qIHJlc3VtZSBhIHRpZCBhbmQgc2NoZWR1bGUgYWdncmVnYXRlICovCi0KLXZvaWQgYXRoX3R4X3Jlc3VtZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIHZvaWQgYXRoX3R4X3Jlc3VtZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0aWQtPmFjLT5xbnVtXTsKIApAQCAtNDE5LDI4MCArMTI5LDEyIEBACiAJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQlnb3RvIHVubG9jazsKIAotCS8qCi0JICogQWRkIHRoaXMgVElEIHRvIHNjaGVkdWxlciBhbmQgdHJ5IHRvIHNlbmQgb3V0IGFnZ3JlZ2F0ZXMKLQkgKi8KIAlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKIAlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJhZCBmcmFtZXMgKi8KLQotc3RhdGljIGludCBhdGhfdHhfbnVtX2JhZGZybXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgIGludCB0eG9rKQotewotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKLQl1MTYgc2VxX3N0ID0gMDsKLQl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOwotCWludCBiYV9pbmRleDsKLQlpbnQgbmJhZCA9IDA7Ci0JaW50IGlzYWdnciA9IDA7Ci0KLQlpZiAoZHMtPmRzX3R4c3RhdC50c19mbGFncyA9PSBBVEg5S19UWF9TV19BQk9SVEVEKQotCQlyZXR1cm4gMDsKLQotCWlzYWdnciA9IGJmX2lzYWdncihiZik7Ci0JaWYgKGlzYWdncikgewotCQlzZXFfc3QgPSBBVEhfRFNfQkFfU0VRKGRzKTsKLQkJbWVtY3B5KGJhLCBBVEhfRFNfQkFfQklUTUFQKGRzKSwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCX0KLQotCXdoaWxlIChiZikgewotCQliYV9pbmRleCA9IEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubyk7Ci0JCWlmICghdHhvayB8fCAoaXNhZ2dyICYmICFBVEhfQkFfSVNTRVQoYmEsIGJhX2luZGV4KSkpCi0JCQluYmFkKys7Ci0KLQkJYmYgPSBiZi0+YmZfbmV4dDsKLQl9Ci0KLQlyZXR1cm4gbmJhZDsKLX0KLQotc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQotCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKLQliZi0+YmZfcmV0cmllcysrOwotCi0Jc2tiID0gYmYtPmJmX21wZHU7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7Ci19Ci0KLS8qIFVwZGF0ZSBibG9jayBhY2sgd2luZG93ICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF91cGRhdGVfYmF3KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCSAgICAgIGludCBzZXFubykKLXsKLQlpbnQgaW5kZXgsIGNpbmRleDsKLQotCWluZGV4ICA9IEFUSF9CQV9JTkRFWCh0aWQtPnNlcV9zdGFydCwgc2Vxbm8pOwotCWNpbmRleCA9ICh0aWQtPmJhd19oZWFkICsgaW5kZXgpICYgKEFUSF9USURfTUFYX0JVRlMgLSAxKTsKLQotCXRpZC0+dHhfYnVmW2NpbmRleF0gPSBOVUxMOwotCi0Jd2hpbGUgKHRpZC0+YmF3X2hlYWQgIT0gdGlkLT5iYXdfdGFpbCAmJiAhdGlkLT50eF9idWZbdGlkLT5iYXdfaGVhZF0pIHsKLQkJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOwotCQlJTkNSKHRpZC0+YmF3X2hlYWQsIEFUSF9USURfTUFYX0JVRlMpOwotCX0KLX0KLQotLyoKLSAqIGF0aF9wa3RfZHVyIC0gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKE5COiBub3QgTkFWKQotICoKLSAqIHJpeCAtIHJhdGUgaW5kZXgKLSAqIHBrdGxlbiAtIHRvdGFsIGJ5dGVzIChkZWxpbXMgKyBkYXRhICsgZmNzICsgcGFkcyArIHBhZCBkZWxpbXMpCi0gKiB3aWR0aCAgLSAwIGZvciAyMCBNSHosIDEgZm9yIDQwIE1IegotICogaGFsZl9naSAtIHRvIHVzZSA0dXMgdi9zIDMuNiB1cyBmb3Igc3ltYm9sIHRpbWUKLSAqLwotc3RhdGljIHUzMiBhdGhfcGt0X2R1cmF0aW9uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1OCByaXgsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICBpbnQgd2lkdGgsIGludCBoYWxmX2dpLCBib29sIHNob3J0UHJlYW1ibGUpCi17Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXUzMiBuYml0cywgbnN5bWJpdHMsIGR1cmF0aW9uLCBuc3ltYm9sczsKLQl1OCByYzsKLQlpbnQgc3RyZWFtcywgcGt0bGVuOwotCi0JcGt0bGVuID0gYmZfaXNhZ2dyKGJmKSA/IGJmLT5iZl9hbCA6IGJmLT5iZl9mcm1sZW47Ci0JcmMgPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0ucmF0ZWNvZGU7Ci0KLQkvKiBmb3IgbGVnYWN5IHJhdGVzLCB1c2Ugb2xkIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcGFja2V0IGR1cmF0aW9uICovCi0JaWYgKCFJU19IVF9SQVRFKHJjKSkKLQkJcmV0dXJuIGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLCBwa3RsZW4sCi0JCQkJCSAgICAgIHJpeCwgc2hvcnRQcmVhbWJsZSk7Ci0KLQkvKiBmaW5kIG51bWJlciBvZiBzeW1ib2xzOiBQTENQICsgZGF0YSAqLwotCW5iaXRzID0gKHBrdGxlbiA8PCAzKSArIE9GRE1fUExDUF9CSVRTOwotCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOwotCW5zeW1ib2xzID0gKG5iaXRzICsgbnN5bWJpdHMgLSAxKSAvIG5zeW1iaXRzOwotCi0JaWYgKCFoYWxmX2dpKQotCQlkdXJhdGlvbiA9IFNZTUJPTF9USU1FKG5zeW1ib2xzKTsKLQllbHNlCi0JCWR1cmF0aW9uID0gU1lNQk9MX1RJTUVfSEFMRkdJKG5zeW1ib2xzKTsKLQotCS8qIGFkZHVwIGR1cmF0aW9uIGZvciBsZWdhY3kvaHQgdHJhaW5pbmcgYW5kIHNpZ25hbCBmaWVsZHMgKi8KLQlzdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKLQlkdXJhdGlvbiArPSBMX1NURiArIExfTFRGICsgTF9TSUcgKyBIVF9TSUcgKyBIVF9TVEYgKyBIVF9MVEYoc3RyZWFtcyk7Ci0KLQlyZXR1cm4gZHVyYXRpb247Ci19Ci0KLS8qIFJhdGUgbW9kdWxlIGZ1bmN0aW9uIHRvIHNldCByYXRlIHJlbGF0ZWQgZmllbGRzIGluIHR4IGRlc2NyaXB0b3IgKi8KLQotc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0OwotCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZi0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcyA9IGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2M7Ci0Jc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbNF07Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWludCBpLCBmbGFncywgcnRzY3RzZW5hID0gMDsKLQl1MzIgY3RzZHVyYXRpb24gPSAwOwotCXU4IHJpeCA9IDAsIGNpeCwgY3RzcmF0ZSA9IDA7Ci0JX19sZTE2IGZjOwotCi0JbWVtc2V0KHNlcmllcywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMpICogNCk7Ci0KLQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7Ci0KLQlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpIHx8Ci0JICAgIChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSB7Ci0JCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7Ci0JCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7Ci0JCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOwotCX0KLQotCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLwotCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7Ci0JCQlyaXggPSByYXRlc1tpXS5pZHg7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWZsYWdzID0gKGJmLT5iZl9mbGFncyAmIChBVEg5S19UWERFU0NfUlRTRU5BIHwgQVRIOUtfVFhERVNDX0NUU0VOQSkpOwotCWNpeCA9IHJ0LT5pbmZvW3JpeF0uY3RybF9yYXRlOwotCi0JLyoKLQkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKLQkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KLQkgKi8KLQlpZiAoc2MtPnNjX3Byb3Rtb2RlICE9IFBST1RfTV9OT05FICYmICEoYmYtPmJmX2ZsYWdzICYgQVRIOUtfVFhERVNDX05PQUNLKQotCSAgICAmJiAocnQtPmluZm9bcml4XS5waHkgPT0gV0xBTl9SQ19QSFlfT0ZETSB8fAotCQlXTEFOX1JDX1BIWV9IVChydC0+aW5mb1tyaXhdLnBoeSkpKSB7Ci0JCWlmIChzYy0+c2NfcHJvdG1vZGUgPT0gUFJPVF9NX1JUU0NUUykKLQkJCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQkJZWxzZSBpZiAoc2MtPnNjX3Byb3Rtb2RlID09IFBST1RfTV9DVFNPTkxZKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfQ1RTRU5BOwotCi0JCWNpeCA9IHJ0LT5pbmZvW3NjLT5zY19wcm90cml4XS5jdHJsX3JhdGU7Ci0JCXJ0c2N0c2VuYSA9IDE7Ci0JfQotCi0JLyogRm9yIDExbiwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZW5hYmxlIFJUUyBmb3IgaHcgcmV0cmllZCBmcmFtZXMuCi0JICogV2UgZW5hYmxlIHRoZSBnbG9iYWwgZmxhZyBoZXJlIGFuZCBsZXQgcmF0ZSBzZXJpZXMgZmxhZ3MgZGV0ZXJtaW5lCi0JICogd2hpY2ggcmF0ZXMgd2lsbCBhY3R1YWxseSB1c2UgUlRTLgotCSAqLwotCWlmICgoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgJiYgYmZfaXNkYXRhKGJmKSkgewotCQkvKiA4MDIuMTFnIHByb3RlY3Rpb24gbm90IG5lZWRlZCwgdXNlIG91ciBkZWZhdWx0IGJlaGF2aW9yICovCi0JCWlmICghcnRzY3RzZW5hKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCX0KLQotCS8qIFNldCBwcm90ZWN0aW9uIGlmIGFnZ3JlZ2F0ZSBwcm90ZWN0aW9uIG9uICovCi0JaWYgKHNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCAmJgotCSAgICAoIWJmX2lzYWdncihiZikgfHwgKGJmX2lzYWdncihiZikgJiYgYmYtPmJmX2FsIDwgODE5MikpKSB7Ci0JCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQkJY2l4ID0gcnQtPmluZm9bc2MtPnNjX3Byb3RyaXhdLmN0cmxfcmF0ZTsKLQkJcnRzY3RzZW5hID0gMTsKLQl9Ci0KLQkvKiBGb3IgQVI1NDE2IC0gUlRTIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGZyYW1lIGxhcmdlciB0aGFuIDhLICovCi0JaWYgKGJmX2lzYWdncihiZikgJiYgKGJmLT5iZl9hbCA+IGFoLT5haF9jYXBzLnJ0c19hZ2dyX2xpbWl0KSkKLQkJZmxhZ3MgJj0gfihBVEg5S19UWERFU0NfUlRTRU5BKTsKLQotCS8qCi0JICogQ1RTIHRyYW5zbWl0IHJhdGUgaXMgZGVyaXZlZCBmcm9tIHRoZSB0cmFuc21pdCByYXRlIGJ5IGxvb2tpbmcgaW4gdGhlCi0JICogaC93IHJhdGUgdGFibGUuICBXZSBtdXN0IGFsc28gZmFjdG9yIGluIHdoZXRoZXIgb3Igbm90IGEgc2hvcnQKLQkgKiBwcmVhbWJsZSBpcyB0byBiZSB1c2VkLiBOQjogY2l4IGlzIHNldCBhYm92ZSB3aGVyZSBSVFMvQ1RTIGlzIGVuYWJsZWQKLQkgKi8KLQljdHNyYXRlID0gcnQtPmluZm9bY2l4XS5yYXRlY29kZSB8Ci0JCShiZl9pc3NocHJlYW1ibGUoYmYpID8gcnQtPmluZm9bY2l4XS5zaG9ydF9wcmVhbWJsZSA6IDApOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoIXJhdGVzW2ldLmNvdW50IHx8IChyYXRlc1tpXS5pZHggPCAwKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJpeCA9IHJhdGVzW2ldLmlkeDsKLQotCQlzZXJpZXNbaV0uUmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZWNvZGUgfAotCQkJKGJmX2lzc2hwcmVhbWJsZShiZikgPyBydC0+aW5mb1tyaXhdLnNob3J0X3ByZWFtYmxlIDogMCk7Ci0KLQkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7Ci0KLQkJc2VyaWVzW2ldLlJhdGVGbGFncyA9ICgKLQkJCShyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgPwotCQkJCUFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDApIHwKLQkJCSgocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU18yMDQwIDogMCkgfAotCQkJKChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkgPwotCQkJCUFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJIDogMCk7Ci0KLQkJc2VyaWVzW2ldLlBrdER1cmF0aW9uID0gYXRoX3BrdF9kdXJhdGlvbihzYywgcml4LCBiZiwKLQkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAhPSAwLAotCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSksCi0JCQkgYmZfaXNzaHByZWFtYmxlKGJmKSk7Ci0KLQkJc2VyaWVzW2ldLkNoU2VsID0gc2MtPnNjX3R4X2NoYWlubWFzazsKLQotCQlpZiAocnRzY3RzZW5hKQotCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFM7Ci0JfQotCi0JLyogc2V0IGR1cl91cGRhdGVfZW4gZm9yIGwtc2lnIGNvbXB1dGF0aW9uIGV4Y2VwdCBmb3IgUFMtUG9sbCBmcmFtZXMgKi8KLQlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgbGFzdGRzLCAhYmZfaXNwc3BvbGwoYmYpLAotCQkJCSAgICAgY3RzcmF0ZSwgY3RzZHVyYXRpb24sCi0JCQkJICAgICBzZXJpZXMsIDQsIGZsYWdzKTsKLQotCWlmIChzYy0+c2NfY29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCi0JCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKGFoLCBkcywgODE5Mik7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbiB0byBzZW5kIGEgbm9ybWFsIEhUIChub24tQU1QRFUpIGZyYW1lCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KLXN0YXRpYyBpbnQgYXRoX3R4X3NlbmRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0KLQlCVUdfT04obGlzdF9lbXB0eShiZl9oZWFkKSk7Ci0KLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQU1QRFU7IC8qIHJlZ3VsYXIgSFQgZnJhbWUgKi8KLQotCS8qIHVwZGF0ZSBzdGFydGluZyBzZXF1ZW5jZSBudW1iZXIgZm9yIHN1YnNlcXVlbnQgQUREQkEgcmVxdWVzdCAqLwotCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKLQotCS8qIFF1ZXVlIHRvIGgvdyB3aXRob3V0IGFnZ3JlZ2F0aW9uICovCi0JYmYtPmJmX25mcmFtZXMgPSAxOwotCWJmLT5iZl9sYXN0YmYgPSBiZi0+YmZfbGFzdGZybTsgLyogb25lIHNpbmdsZSBmcmFtZSAqLwotCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsIGJmX2hlYWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZsdXNoIHRpZCdzIHNvZnR3YXJlIHF1ZXVlIGFuZCBzZW5kIGZyYW1lcyBhcyBub24tYW1wZHUncyAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfZmx1c2hfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CkBAIC03MTMsNDY4ICsxNTUsMzAgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKSB7CiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCQlBU1NFUlQoIWJmX2lzcmV0cmllZChiZikpOwotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0JCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCWF0aF90eF9zZW5kX2h0X25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKLS8qIENvbXBsZXRpb24gcm91dGluZSBvZiBhbiBhZ2dyZWdhdGUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3JfcmlmcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJCSAgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAotCQkJCSAgICAgIGludCB0eG9rKQorc3RhdGljIHZvaWQgYXRoX3R4X3VwZGF0ZV9iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJICAgICAgaW50IHNlcW5vKQogewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBOVUxMOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkID0gTlVMTDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdCA9IGJmLT5iZl9sYXN0YmY7Ci0Jc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmX2xhc3QtPmJmX2Rlc2M7Ci0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQsICpiZl9sYXN0cSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkLCBiZl9wZW5kaW5nOwotCXUxNiBzZXFfc3QgPSAwOwotCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07Ci0JaW50IGlzYWdnciwgdHhmYWlsLCB0eHBlbmRpbmcsIHNlbmRiYXIgPSAwLCBuZWVkcmVzZXQgPSAwOworCWludCBpbmRleCwgY2luZGV4OwogCi0Jc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbmRleCAgPSBBVEhfQkFfSU5ERVgodGlkLT5zZXFfc3RhcnQsIHNlcW5vKTsKKwljaW5kZXggPSAodGlkLT5iYXdfaGVhZCArIGluZGV4KSAmIChBVEhfVElEX01BWF9CVUZTIC0gMSk7CiAKLQlpZiAodHhfaW5mby0+Y29udHJvbC5zdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwotCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7Ci0JfQorCXRpZC0+dHhfYnVmW2NpbmRleF0gPSBOVUxMOwogCi0JaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKLQlpZiAoaXNhZ2dyKSB7Ci0JCWlmICh0eG9rKSB7Ci0JCQlpZiAoQVRIX0RTX1RYX0JBKGRzKSkgewotCQkJCS8qCi0JCQkJICogZXh0cmFjdCBzdGFydGluZyBzZXF1ZW5jZSBhbmQKLQkJCQkgKiBibG9jay1hY2sgYml0bWFwCi0JCQkJICovCi0JCQkJc2VxX3N0ID0gQVRIX0RTX0JBX1NFUShkcyk7Ci0JCQkJbWVtY3B5KGJhLAotCQkJCQlBVEhfRFNfQkFfQklUTUFQKGRzKSwKLQkJCQkJV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQotCQkJCS8qCi0JCQkJICogQVI1NDE2IGNhbiBiZWNvbWUgZGVhZi9tdXRlIHdoZW4gQkEKLQkJCQkgKiBpc3N1ZSBoYXBwZW5zLiBDaGlwIG5lZWRzIHRvIGJlIHJlc2V0LgotCQkJCSAqIEJ1dCBBUCBjb2RlIG1heSBoYXZlIHN5Y2hyb25pemF0aW9uIGlzc3VlcwotCQkJCSAqIHdoZW4gcGVyZm9ybSBpbnRlcm5hbCByZXNldCBpbiB0aGlzIHJvdXRpbmUuCi0JCQkJICogT25seSBlbmFibGUgcmVzZXQgaW4gU1RBIG1vZGUgZm9yIG5vdy4KLQkJCQkgKi8KLQkJCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0KLQkJCQkJICAgIE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJCW5lZWRyZXNldCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQkJfQotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZiZl9wZW5kaW5nKTsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQl3aGlsZSAoYmYpIHsKLQkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKLQkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OwotCi0JCWlmIChBVEhfQkFfSVNTRVQoYmEsIEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubykpKSB7Ci0JCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uLCBzdWJmcmFtZSBpcwotCQkJICogYWNrZWQgYnkgYmxvY2sgYWNrICovCi0JCX0gZWxzZSBpZiAoIWlzYWdnciAmJiB0eG9rKSB7Ci0JCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uICovCi0JCX0gZWxzZSB7Ci0KLQkJCWlmICghKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApICYmCi0JCQkgICAgZHMtPmRzX3R4c3RhdC50c19mbGFncyAhPSBBVEg5S19UWF9TV19BQk9SVEVEKSB7Ci0JCQkJaWYgKGJmLT5iZl9yZXRyaWVzIDwgQVRIX01BWF9TV19SRVRSSUVTKSB7Ci0JCQkJCWF0aF90eF9zZXRfcmV0cnkoc2MsIGJmKTsKLQkJCQkJdHhwZW5kaW5nID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwotCQkJCQl0eGZhaWwgPSAxOwotCQkJCQlzZW5kYmFyID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogY2xlYW51cCBpbiBwcm9ncmVzcywganVzdCBmYWlsCi0JCQkJICogdGhlIHVuLWFja2VkIHN1Yi1mcmFtZXMKLQkJCQkgKi8KLQkJCQl0eGZhaWwgPSAxOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIFJlbW92ZSBhdGhfYnVmJ3Mgb2YgdGhpcyBzdWItZnJhbWUgZnJvbSBhZ2dyZWdhdGUgcXVldWUuCi0JCSAqLwotCQlpZiAoYmZfbmV4dCA9PSBOVUxMKSB7ICAvKiBsYXN0IHN1YmZyYW1lIGluIHRoZSBhZ2dyZWdhdGUgKi8KLQkJCUFTU0VSVChiZi0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQotCQkJLyoKLQkJCSAqIFRoZSBsYXN0IGRlc2NyaXB0b3Igb2YgdGhlIGxhc3Qgc3ViIGZyYW1lIGNvdWxkIGJlCi0JCQkgKiBhIGhvbGRpbmcgZGVzY3JpcHRvciBmb3IgaC93LiBJZiB0aGF0J3MgdGhlIGNhc2UsCi0JCQkgKiBiZi0+YmZfbGFzdGZybSB3b24ndCBiZSBpbiB0aGUgYmZfcS4KLQkJCSAqIE1ha2Ugc3VyZSB3ZSBoYW5kbGUgYmZfcSBwcm9wZXJseSBoZXJlLgotCQkJICovCi0KLQkJCWlmICghbGlzdF9lbXB0eShiZl9xKSkgewotCQkJCWJmX2xhc3RxID0gbGlzdF9lbnRyeShiZl9xLT5wcmV2LAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJCWJmX3EsICZiZl9sYXN0cS0+bGlzdCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogWFhYOiBpZiB0aGUgbGFzdCBzdWJmcmFtZSBvbmx5IGhhcyBvbmUKLQkJCQkgKiBkZXNjcmlwdG9yIHdoaWNoIGlzIGFsc28gYmVpbmcgdXNlZCBhcwotCQkJCSAqIGEgaG9sZGluZyBkZXNjcmlwdG9yLiBUaGVuIHRoZSBhdGhfYnVmCi0JCQkJICogaXMgbm90IGluIHRoZSBiZl9xIGF0IGFsbC4KLQkJCQkgKi8KLQkJCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlBU1NFUlQoIWxpc3RfZW1wdHkoYmZfcSkpOwotCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJYmZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKLQkJfQotCi0JCWlmICghdHhwZW5kaW5nKSB7Ci0JCQkvKgotCQkJICogY29tcGxldGUgdGhlIGFja2VkLW9uZXMveHJldHJpZWQgb25lczsgdXBkYXRlCi0JCQkgKiBibG9jay1hY2sgd2luZG93Ci0JCQkgKi8KLQkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JCQkvKiBjb21wbGV0ZSB0aGlzIHN1Yi1mcmFtZSAqLwotCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAhdHhmYWlsLCBzZW5kYmFyKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiByZXRyeSB0aGUgdW4tYWNrZWQgb25lcwotCQkJICovCi0JCQkvKgotCQkJICogWFhYOiBpZiB0aGUgbGFzdCBkZXNjcmlwdG9yIGlzIGhvbGRpbmcgZGVzY3JpcHRvciwKLQkJCSAqIGluIG9yZGVyIHRvIHJlcXVldWUgdGhlIGZyYW1lIHRvIHNvZnR3YXJlIHF1ZXVlLCB3ZQotCQkJICogbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBkZXNjcmlwdG9yIGFuZAotCQkJICogY29weSB0aGUgY29udGVudCBvZiBob2xkaW5nIGRlc2NyaXB0b3IgdG8gaXQuCi0JCQkgKi8KLQkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmCi0JCQkgICAgYmZfbGFzdC0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgewotCQkJCXN0cnVjdCBhdGhfYnVmICp0YmY7Ci0KLQkJCQkvKiBhbGxvY2F0ZSBuZXcgZGVzY3JpcHRvciAqLwotCQkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCQkJQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOwotCQkJCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1ZiwKLQkJCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCQlsaXN0X2RlbCgmdGJmLT5saXN0KTsKLQkJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJCQlBVEhfVFhCVUZfUkVTRVQodGJmKTsKLQotCQkJCS8qIGNvcHkgZGVzY3JpcHRvciBjb250ZW50ICovCi0JCQkJdGJmLT5iZl9tcGR1ID0gYmZfbGFzdC0+YmZfbXBkdTsKLQkJCQl0YmYtPmJmX2J1Zl9hZGRyID0gYmZfbGFzdC0+YmZfYnVmX2FkZHI7Ci0JCQkJKih0YmYtPmJmX2Rlc2MpID0gKihiZl9sYXN0LT5iZl9kZXNjKTsKLQotCQkJCS8qIGxpbmsgaXQgdG8gdGhlIGZyYW1lICovCi0JCQkJaWYgKGJmX2xhc3RxKSB7Ci0JCQkJCWJmX2xhc3RxLT5iZl9kZXNjLT5kc19saW5rID0KLQkJCQkJCXRiZi0+YmZfZGFkZHI7Ci0JCQkJCWJmLT5iZl9sYXN0ZnJtID0gdGJmOwotCQkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsCi0JCQkJCQliZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdGJmLT5iZl9zdGF0ZSA9IGJmX2xhc3QtPmJmX3N0YXRlOwotCQkJCQl0YmYtPmJmX2xhc3Rmcm0gPSB0YmY7Ci0JCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwKLQkJCQkJCXRiZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0KLQkJCQkJLyogY29weSB0aGUgRE1BIGNvbnRleHQgKi8KLQkJCQkJdGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJCQkJCWJmX2xhc3QtPmJmX2RtYWNvbnRleHQ7Ci0JCQkJfQotCQkJCWxpc3RfYWRkX3RhaWwoJnRiZi0+bGlzdCwgJmJmX2hlYWQpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIENsZWFyIGRlc2NyaXB0b3Igc3RhdHVzIHdvcmRzIGZvcgotCQkJCSAqIHNvZnR3YXJlIHJldHJ5Ci0JCQkJICovCi0JCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLAotCQkJCQkJICAgICBiZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBQdXQgdGhpcyBidWZmZXIgdG8gdGhlIHRlbXBvcmFyeSBwZW5kaW5nCi0JCQkgKiBxdWV1ZSB0byByZXRhaW4gb3JkZXJpbmcKLQkJCSAqLwotCQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZl9oZWFkLCAmYmZfcGVuZGluZyk7Ci0JCX0KLQotCQliZiA9IGJmX25leHQ7Ci0JfQotCi0JaWYgKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIHsKLQkJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGRvbmUgd2l0aCBjbGVhbmluZyB0aGUgaC93IHF1ZXVlICovCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJaWYgKHRpZC0+YmF3X2hlYWQgPT0gdGlkLT5iYXdfdGFpbCkgewotCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQotCQkJLyogc2VuZCBidWZmZXJlZCBmcmFtZXMgYXMgc2luZ2xlcyAqLwotCQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdGlkKTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZQotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJLyogTm90ZTogd2UgX3ByZXBlbmRfLCB3ZSBfZG9fbm90XyBhdCB0bwotCQkgKiB0aGUgZW5kIG9mIHRoZSBxdWV1ZSAhICovCi0JCWxpc3Rfc3BsaWNlKCZiZl9wZW5kaW5nLCAmdGlkLT5idWZfcSk7Ci0JCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JfQotCi0JaWYgKG5lZWRyZXNldCkKLQkJYXRoX3Jlc2V0KHNjLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9yY19zdGF0dXMoc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLCBpbnQgbmJhZCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOwotCi0JdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSBmYWxzZTsKLQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKQotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKLQotCWlmICgoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKSA9PSAwICYmCi0JICAgIChiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spID09IDApIHsKLQkJaWYgKGJmX2lzZGF0YShiZikpIHsKLQkJCW1lbWNweSgmdHhfaW5mb19wcml2LT50eCwgJmRzLT5kc190eHN0YXQsCi0JCQkgICAgICAgc2l6ZW9mKHR4X2luZm9fcHJpdi0+dHgpKTsKLQkJCXR4X2luZm9fcHJpdi0+bl9mcmFtZXMgPSBiZi0+YmZfbmZyYW1lczsKLQkJCXR4X2luZm9fcHJpdi0+bl9iYWRfZnJhbWVzID0gbmJhZDsKLQkJCXR4X2luZm9fcHJpdi0+dXBkYXRlX3JjID0gdHJ1ZTsKLQkJfQorCXdoaWxlICh0aWQtPmJhd19oZWFkICE9IHRpZC0+YmF3X3RhaWwgJiYgIXRpZC0+dHhfYnVmW3RpZC0+YmF3X2hlYWRdKSB7CisJCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKKwkJSU5DUih0aWQtPmJhd19oZWFkLCBBVEhfVElEX01BWF9CVUZTKTsKIAl9CiB9CiAKLS8qIFByb2Nlc3MgY29tcGxldGVkIHhtaXQgZGVzY3JpcHRvcnMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXVlICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9wcm9jZXNzcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmLCAqYmZfaGVsZCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCXN0cnVjdCBhdGhfZGVzYyAqZHM7Ci0JaW50IHR4b2ssIG5iYWQgPSAwOwotCWludCBzdGF0dXM7Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1FVRVVFLCAidHggcXVldWUgJWQgKCV4KSwgbGluayAlcFxuIiwKLQkJdHhxLT5heHFfcW51bSwgYXRoOWtfaHdfZ2V0dHhidWYoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKSwKLQkJdHhxLT5heHFfbGluayk7Ci0KLQlmb3IgKDs7KSB7Ci0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZ0eHEtPmF4cV9xKSkgewotCQkJdHhxLT5heHFfbGluayA9IE5VTEw7Ci0JCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdHhxLT5heHFfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCi0JCS8qCi0JCSAqIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBhIEJIIGdldHMgc2NoZWR1bGVkCi0JCSAqIGFmdGVyIHN3IHdyaXRlcyBUeEUgYW5kIGJlZm9yZSBodyByZS1sb2FkIHRoZSBsYXN0Ci0JCSAqIGRlc2NyaXB0b3IgdG8gZ2V0IHRoZSBuZXdseSBjaGFpbmVkIG9uZS4KLQkJICogU29mdHdhcmUgbXVzdCBrZWVwIHRoZSBsYXN0IERPTkUgZGVzY3JpcHRvciBhcyBhCi0JCSAqIGhvbGRpbmcgZGVzY3JpcHRvciAtIHNvZnR3YXJlIGRvZXMgc28gYnkgbWFya2luZwotCQkgKiBpdCB3aXRoIHRoZSBTVEFMRSBmbGFnLgotCQkgKi8KLQkJYmZfaGVsZCA9IE5VTEw7Ci0JCWlmIChiZi0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgewotCQkJYmZfaGVsZCA9IGJmOwotCQkJaWYgKGxpc3RfaXNfbGFzdCgmYmZfaGVsZC0+bGlzdCwgJnR4cS0+YXhxX3EpKSB7Ci0JCQkJLyogRklYTUU6Ci0JCQkJICogVGhlIGhvbGRpbmcgZGVzY3JpcHRvciBpcyB0aGUgbGFzdAotCQkJCSAqIGRlc2NyaXB0b3IgaW4gcXVldWUuIEl0J3Mgc2FmZSB0byByZW1vdmUKLQkJCQkgKiB0aGUgbGFzdCBob2xkaW5nIGRlc2NyaXB0b3IgaW4gQkggY29udGV4dC4KLQkJCQkgKi8KLQkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCS8qIExldHMgd29yayB3aXRoIHRoZSBuZXh0IGJ1ZmZlciBub3cgKi8KLQkJCQliZiA9IGxpc3RfZW50cnkoYmZfaGVsZC0+bGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQl9Ci0JCX0KLQotCQlsYXN0YmYgPSBiZi0+YmZfbGFzdGJmOwotCQlkcyA9IGxhc3RiZi0+YmZfZGVzYzsgICAgLyogTkI6IGxhc3QgZGVjcmlwdG9yICovCi0KLQkJc3RhdHVzID0gYXRoOWtfaHdfdHhwcm9jZGVzYyhhaCwgZHMpOwotCQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGJmLT5iZl9kZXNjID09IHR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMpCi0JCQl0eHEtPmF4cV9sYXN0ZHNXaXRoQ1RTID0gTlVMTDsKLQkJaWYgKGRzID09IHR4cS0+YXhxX2dhdGluZ2RzKQotCQkJdHhxLT5heHFfZ2F0aW5nZHMgPSBOVUxMOwotCi0JCS8qCi0JCSAqIFJlbW92ZSBhdGhfYnVmJ3Mgb2YgdGhlIHNhbWUgdHJhbnNtaXQgdW5pdCBmcm9tIHR4cSwKLQkJICogaG93ZXZlciBsZWF2ZSB0aGUgbGFzdCBkZXNjcmlwdG9yIGJhY2sgYXMgdGhlIGhvbGRpbmcKLQkJICogZGVzY3JpcHRvciBmb3IgaHcuCi0JCSAqLwotCQlsYXN0YmYtPmJmX3N0YXR1cyB8PSBBVEhfQlVGU1RBVFVTX1NUQUxFOwotCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZsYXN0YmYtPmxpc3QpKQotCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJJnR4cS0+YXhxX3EsIGxhc3RiZi0+bGlzdC5wcmV2KTsKLQotCQl0eHEtPmF4cV9kZXB0aC0tOwotCi0JCWlmIChiZl9pc2FnZ3IoYmYpKQotCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOwotCi0JCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JCWlmIChiZl9oZWxkKSB7Ci0JCQlsaXN0X2RlbCgmYmZfaGVsZC0+bGlzdCk7Ci0JCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCX0KLQotCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KLQkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCi0JCQkgKi8KLQkJCWJmLT5iZl9yZXRyaWVzID0gZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnk7Ci0JCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCi0JCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKLQkJCW5iYWQgPSAwOwotCQl9IGVsc2UgewotCQkJbmJhZCA9IGF0aF90eF9udW1fYmFkZnJtcyhzYywgYmYsIHR4b2spOwotCQl9Ci0KLQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgZHMsIG5iYWQpOwotCi0JCS8qCi0JCSAqIENvbXBsZXRlIHRoaXMgdHJhbnNtaXQgdW5pdAotCQkgKi8KLQkJaWYgKGJmX2lzYW1wZHUoYmYpKQotCQkJYXRoX3R4X2NvbXBsZXRlX2FnZ3JfcmlmcyhzYywgdHhxLCBiZiwgJmJmX2hlYWQsIHR4b2spOwotCQllbHNlCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIHR4b2ssIDApOwotCi0JCS8qIFdha2UgdXAgbWFjODAyMTEgcXVldWUgKi8KLQotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAodHhxLT5zdG9wcGVkICYmIGF0aF90eHFfZGVwdGgoc2MsIHR4cS0+YXhxX3FudW0pIDw9Ci0JCQkJKEFUSF9UWEJVRiAtIDIwKSkgewotCQkJaW50IHFudW07Ci0JCQlxbnVtID0gYXRoX2dldF9tYWM4MDIxMV9xbnVtKHR4cS0+YXhxX3FudW0sIHNjKTsKLQkJCWlmIChxbnVtICE9IC0xKSB7Ci0JCQkJaWVlZTgwMjExX3dha2VfcXVldWUoc2MtPmh3LCBxbnVtKTsKLQkJCQl0eHEtPnN0b3BwZWQgPSAwOwotCQkJfQotCi0JCX0KLQotCQkvKgotCQkgKiBzY2hlZHVsZSBhbnkgcGVuZGluZyBwYWNrZXRzIGlmIGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQKLQkJICovCi0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpCi0JCQlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfc3RvcGRtYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0KLQkodm9pZCkgYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCB0eHEtPmF4cV9xbnVtKTsKLQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0eCBxdWV1ZSBbJXVdICV4LCBsaW5rICVwXG4iLAotCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSksCi0JCXR4cS0+YXhxX2xpbmspOwotfQotCi0vKiBEcmFpbiBvbmx5IHRoZSBkYXRhIHF1ZXVlcyAqLwotCi1zdGF0aWMgdm9pZCBhdGhfZHJhaW5fdHhkYXRhcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IGksIHN0YXR1cywgbnBlbmQgPSAwOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgewotCQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKSB7Ci0JCQkJYXRoX3R4X3N0b3BkbWEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQkJCQkvKiBUaGUgVHhETUEgbWF5IG5vdCByZWFsbHkgYmUgc3RvcHBlZC4KLQkJCQkgKiBEb3VibGUgY2hlY2sgdGhlIGhhbCB0eCBwZW5kaW5nIGNvdW50ICovCi0JCQkJbnBlbmQgKz0gYXRoOWtfaHdfbnVtdHhwZW5kaW5nKGFoLAotCQkJCQkJICAgICAgIHNjLT50eC50eHFbaV0uYXhxX3FudW0pOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKG5wZW5kKSB7Ci0JCS8qIFR4RE1BIG5vdCBzdG9wcGVkLCByZXNldCB0aGUgaGFsICovCi0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKLQotCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLAotCQkJCSAgICBzYy0+c2NfYWgtPmFoX2N1cmNoYW4sCi0JCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIHRydWUsICZzdGF0dXMpKSB7Ci0KLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldVxuIiwKLQkJCQlzdGF0dXMpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKLQkJCWF0aF90eF9kcmFpbnR4cShzYywgJnNjLT50eC50eHFbaV0sIHJldHJ5X3R4KTsKLQl9Ci19Ci0KLS8qIEFkZCBhIHN1Yi1mcmFtZSB0byBibG9jayBhY2sgd2luZG93ICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9hZGR0b19iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorc3RhdGljIHZvaWQgYXRoX3R4X2FkZHRvX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKIAlpbnQgaW5kZXgsIGNpbmRleDsKQEAgLTExOTYsNTggKzIwMCwyMzkgQEAKIH0KIAogLyoKLSAqIEZ1bmN0aW9uIHRvIHNlbmQgYW4gQS1NUERVCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCisgKiBUT0RPOiBGb3IgZnJhbWUocykgdGhhdCBhcmUgaW4gdGhlIHJldHJ5IHN0YXRlLCB3ZSB3aWxsIHJldXNlIHRoZQorICogc2VxdWVuY2UgbnVtYmVyKHMpIHdpdGhvdXQgc2V0dGluZyB0aGUgcmV0cnkgYml0LiBUaGUKKyAqIGFsdGVybmF0aXZlIGlzIHRvIGdpdmUgdXAgb24gdGhlc2UgYW5kIEJBUiB0aGUgcmVjZWl2ZXIncyB3aW5kb3cKKyAqIGZvcndhcmQuCiAgKi8KLXN0YXRpYyBpbnQgYXRoX3R4X3NlbmRfYW1wZHUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkLAotCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQorc3RhdGljIHZvaWQgYXRoX3RpZF9kcmFpbihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCisKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAotCUJVR19PTihsaXN0X2VtcHR5KGJmX2hlYWQpKTsKKwlmb3IgKDs7KSB7CisJCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKKwkJCWJyZWFrOwogCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQU1QRFU7CisJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKIAotCS8qCi0JICogRG8gbm90IHF1ZXVlIHRvIGgvdyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKLQkgKiAtIHRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcyBpbiBzb2Z0d2FyZSBxdWV1ZQotCSAqIC0gdGhlIFRJRCBpcyBjdXJyZW50bHkgcGF1c2VkIGZvciBBRERCQS9CQVIgcmVxdWVzdAotCSAqIC0gc2Vxbm8gaXMgbm90IHdpdGhpbiBibG9jay1hY2sgd2luZG93Ci0JICogLSBoL3cgcXVldWUgZGVwdGggZXhjZWVkcyBsb3cgd2F0ZXIgbWFyawotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgfHwgdGlkLT5wYXVzZWQgfHwKLQkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGJmLT5iZl9zZXFubykgfHwKLQkgICAgdHhjdGwtPnR4cS0+YXhxX2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKLQkJLyoKLQkJICogQWRkIHRoaXMgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUgZm9yIHNjaGVkdWxpbmcgbGF0ZXIKLQkJICogZm9yIGFnZ3JlZ2F0aW9uLgotCQkgKi8KLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KGJmX2hlYWQsICZ0aWQtPmJ1Zl9xKTsKLQkJYXRoX3R4X3F1ZXVlX3RpZCh0eGN0bC0+dHhxLCB0aWQpOwotCQlyZXR1cm4gMDsKKwkJaWYgKGJmX2lzcmV0cmllZChiZikpCisJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCisJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwkJc3Bpbl9sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKIAl9CiAKLQkvKiBBZGQgc3ViLWZyYW1lIHRvIEJBVyAqLwotCWF0aF90eF9hZGR0b19iYXcoc2MsIHRpZCwgYmYpOwotCi0JLyogUXVldWUgdG8gaC93IHdpdGhvdXQgYWdncmVnYXRpb24gKi8KLQliZi0+YmZfbmZyYW1lcyA9IDE7Ci0JYmYtPmJmX2xhc3RiZiA9IGJmLT5iZl9sYXN0ZnJtOyAvKiBvbmUgc2luZ2xlIGZyYW1lICovCi0JYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwotCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsIGJmX2hlYWQpOwotCi0JcmV0dXJuIDA7CisJdGlkLT5zZXFfbmV4dCA9IHRpZC0+c2VxX3N0YXJ0OworCXRpZC0+YmF3X3RhaWwgPSB0aWQtPmJhd19oZWFkOwogfQogCi0vKgotICogbG9va3MgdXAgdGhlIHJhdGUKLSAqIHJldHVybnMgYWdnciBsaW1pdCBiYXNlZCBvbiBsb3dlc3Qgb2YgdGhlIHJhdGVzCi0gKi8KLXN0YXRpYyB1MzIgYXRoX2xvb2t1cF9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGF0aF9idWYgKmJmLAorc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKworCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKKwliZi0+YmZfcmV0cmllcysrOworCisJc2tiID0gYmYtPmJmX21wZHU7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiogYXRoX2Nsb25lX3R4YnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IGF0aF9idWYgKnRiZjsKKworCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOworCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKworCUFUSF9UWEJVRl9SRVNFVCh0YmYpOworCisJdGJmLT5iZl9tcGR1ID0gYmYtPmJmX21wZHU7CisJdGJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9idWZfYWRkcjsKKwkqKHRiZi0+YmZfZGVzYykgPSAqKGJmLT5iZl9kZXNjKTsKKwl0YmYtPmJmX3N0YXRlID0gYmYtPmJmX3N0YXRlOworCXRiZi0+YmZfZG1hY29udGV4dCA9IGJmLT5iZl9kbWFjb250ZXh0OworCisJcmV0dXJuIHRiZjsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkJIHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQkgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQgPSBOVUxMOworCXN0cnVjdCBhdGhfYnVmICpiZl9uZXh0LCAqYmZfbGFzdCA9IGJmLT5iZl9sYXN0YmY7CisJc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmX2xhc3QtPmJmX2Rlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkLCBiZl9wZW5kaW5nOworCXUxNiBzZXFfc3QgPSAwLCBhY2tlZF9jbnQgPSAwLCB0eGZhaWxfY250ID0gMDsKKwl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOworCWludCBpc2FnZ3IsIHR4ZmFpbCwgdHhwZW5kaW5nLCBzZW5kYmFyID0gMCwgbmVlZHJlc2V0ID0gMCwgbmJhZCA9IDA7CisJYm9vbCByY191cGRhdGUgPSB0cnVlOworCisJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHNjLT5odywgaGRyLT5hZGRyMSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKworCWlzYWdnciA9IGJmX2lzYWdncihiZik7CisJbWVtc2V0KGJhLCAwLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisKKwlpZiAoaXNhZ2dyICYmIHR4b2spIHsKKwkJaWYgKEFUSF9EU19UWF9CQShkcykpIHsKKwkJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQkJbWVtY3B5KGJhLCBBVEhfRFNfQkFfQklUTUFQKGRzKSwKKwkJCSAgICAgICBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQVI1NDE2IGNhbiBiZWNvbWUgZGVhZi9tdXRlIHdoZW4gQkEKKwkJCSAqIGlzc3VlIGhhcHBlbnMuIENoaXAgbmVlZHMgdG8gYmUgcmVzZXQuCisJCQkgKiBCdXQgQVAgY29kZSBtYXkgaGF2ZSBzeWNocm9uaXphdGlvbiBpc3N1ZXMKKwkJCSAqIHdoZW4gcGVyZm9ybSBpbnRlcm5hbCByZXNldCBpbiB0aGlzIHJvdXRpbmUuCisJCQkgKiBPbmx5IGVuYWJsZSByZXNldCBpbiBTVEEgbW9kZSBmb3Igbm93LgorCQkJICovCisJCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQluZWVkcmVzZXQgPSAxOworCQl9CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJmX3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKworCW5iYWQgPSBhdGhfdHhfbnVtX2JhZGZybXMoc2MsIGJmLCB0eG9rKTsKKwl3aGlsZSAoYmYpIHsKKwkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKKwkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OworCisJCWlmIChBVEhfQkFfSVNTRVQoYmEsIEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubykpKSB7CisJCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uLCBzdWJmcmFtZSBpcworCQkJICogYWNrZWQgYnkgYmxvY2sgYWNrICovCisJCQlhY2tlZF9jbnQrKzsKKwkJfSBlbHNlIGlmICghaXNhZ2dyICYmIHR4b2spIHsKKwkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24gKi8KKwkJCWFja2VkX2NudCsrOworCQl9IGVsc2UgeworCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKKwkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKKwkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQl0eHBlbmRpbmcgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCXR4ZmFpbCA9IDE7CisJCQkJCXNlbmRiYXIgPSAxOworCQkJCQl0eGZhaWxfY250Kys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIGNsZWFudXAgaW4gcHJvZ3Jlc3MsIGp1c3QgZmFpbAorCQkJCSAqIHRoZSB1bi1hY2tlZCBzdWItZnJhbWVzCisJCQkJICovCisJCQkJdHhmYWlsID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChiZl9uZXh0ID09IE5VTEwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVCghbGlzdF9lbXB0eShiZl9xKSk7CisJCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJfQorCisJCWlmICghdHhwZW5kaW5nKSB7CisJCQkvKgorCQkJICogY29tcGxldGUgdGhlIGFja2VkLW9uZXMveHJldHJpZWQgb25lczsgdXBkYXRlCisJCQkgKiBibG9jay1hY2sgd2luZG93CisJCQkgKi8KKwkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJCQlpZiAocmNfdXBkYXRlICYmIChhY2tlZF9jbnQgPT0gMSB8fCB0eGZhaWxfY250ID09IDEpKSB7CisJCQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgZHMsIG5iYWQsIHR4b2ssIHRydWUpOworCQkJCXJjX3VwZGF0ZSA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCwgdHhvaywgZmFsc2UpOworCQkJfQorCisJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOworCQl9IGVsc2UgeworCQkJLyogcmV0cnkgdGhlIHVuLWFja2VkIG9uZXMgKi8KKwkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmCisJCQkgICAgYmZfbGFzdC0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgeworCQkJCXN0cnVjdCBhdGhfYnVmICp0YmY7CisKKwkJCQl0YmYgPSBhdGhfY2xvbmVfdHhidWYoc2MsIGJmX2xhc3QpOworCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwgdGJmLT5iZl9kZXNjKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZ0YmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBDbGVhciBkZXNjcmlwdG9yIHN0YXR1cyB3b3JkcyBmb3IKKwkJCQkgKiBzb2Z0d2FyZSByZXRyeQorCQkJCSAqLworCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MpOworCQkJfQorCisJCQkvKgorCQkJICogUHV0IHRoaXMgYnVmZmVyIHRvIHRoZSB0ZW1wb3JhcnkgcGVuZGluZworCQkJICogcXVldWUgdG8gcmV0YWluIG9yZGVyaW5nCisJCQkgKi8KKwkJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYmZfaGVhZCwgJmJmX3BlbmRpbmcpOworCQl9CisKKwkJYmYgPSBiZl9uZXh0OworCX0KKworCWlmICh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB7CisJCWlmICh0aWQtPmJhd19oZWFkID09IHRpZC0+YmF3X3RhaWwpIHsKKwkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOworCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOworCisJCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCisJCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0aWQpOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJLyogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZSAqLworCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJbGlzdF9zcGxpY2UoJmJmX3BlbmRpbmcsICZ0aWQtPmJ1Zl9xKTsKKwkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChuZWVkcmVzZXQpCisJCWF0aF9yZXNldChzYywgZmFsc2UpOworfQorCitzdGF0aWMgdTMyIGF0aF9sb29rdXBfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAogCQkJICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwpAQCAtMTI1NSwxNSArNDQwLDE0IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXM7CiAJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKLQl1MzIgbWF4XzRtc19mcmFtZWxlbiwgZnJhbWVfbGVuZ3RoOworCXUzMiBtYXhfNG1zX2ZyYW1lbGVuLCBmcm1sZW47CiAJdTE2IGFnZ3JfbGltaXQsIGxlZ2FjeSA9IDAsIG1heGFtcGR1OwogCWludCBpOwogCiAJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7Ci0JdHhfaW5mb19wcml2ID0KLQkJKHN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXTsKKwl0eF9pbmZvX3ByaXYgPSAoc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKil0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdOwogCiAJLyoKIAkgKiBGaW5kIHRoZSBsb3dlc3QgZnJhbWUgbGVuZ3RoIGFtb25nIHRoZSByYXRlIHNlcmllcyB0aGF0IHdpbGwgaGF2ZSBhCkBAIC0xMjc5LDkgKzQ2Myw4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWZyYW1lX2xlbmd0aCA9Ci0JCQkJcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tpXS5pZHhdLm1heF80bXNfZnJhbWVsZW47Ci0JCQltYXhfNG1zX2ZyYW1lbGVuID0gbWluKG1heF80bXNfZnJhbWVsZW4sIGZyYW1lX2xlbmd0aCk7CisJCQlmcm1sZW4gPSByYXRlX3RhYmxlLT5pbmZvW3JhdGVzW2ldLmlkeF0ubWF4XzRtc19mcmFtZWxlbjsKKwkJCW1heF80bXNfZnJhbWVsZW4gPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgZnJtbGVuKTsKIAkJfQogCX0KIApAQCAtMTI5Myw4ICs0NzYsNyBAQAogCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFIHx8IGxlZ2FjeSkKIAkJcmV0dXJuIDA7CiAKLQlhZ2dyX2xpbWl0ID0gbWluKG1heF80bXNfZnJhbWVsZW4sCi0JCSh1MzIpQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQpOworCWFnZ3JfbGltaXQgPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgKHUzMilBVEhfQU1QRFVfTElNSVRfREVGQVVMVCk7CiAKIAkvKgogCSAqIGgvdyBjYW4gYWNjZXB0IGFnZ3JlZ2F0ZXMgdXB0byAxNiBiaXQgbGVuZ3RocyAoNjU1MzUpLgpAQCAtMTMwOSwxNCArNDkxLDEyIEBACiB9CiAKIC8qCi0gKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVsaW1pdGVycyB0byBiZSBhZGRlZCB0bworICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlbGltaXRlcnMgdG8gYmUgYWRkZWQgdG8KICAqIG1lZXQgdGhlIG1pbmltdW0gcmVxdWlyZWQgbXBkdWRlbnNpdHkuCi0gKiBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByYXRlIGlzICBIVCByYXRlIC4KKyAqIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJhdGUgaXMgSFQgcmF0ZSAuCiAgKi8KLXN0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCSAgdTE2IGZybWxlbikKK3N0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHUxNiBmcm1sZW4pCiB7CiAJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpydCA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPmJmX21wZHU7CkBAIC0xMzcwLDkgKzU1MCw3IEBACiAJbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07CiAJbWlubGVuID0gKG5zeW1ib2xzICogbnN5bWJpdHMpIC8gQklUU19QRVJfQllURTsKIAotCS8qIElzIGZyYW1lIHNob3J0ZXIgdGhhbiByZXF1aXJlZCBtaW5pbXVtIGxlbmd0aD8gKi8KIAlpZiAoZnJtbGVuIDwgbWlubGVuKSB7Ci0JCS8qIEdldCB0aGUgbWluaW11bSBudW1iZXIgb2YgZGVsaW1pdGVycyByZXF1aXJlZC4gKi8KIAkJbWluZGVsaW0gPSAobWlubGVuIC0gZnJtbGVuKSAvIEFUSF9BR0dSX0RFTElNX1NaOwogCQluZGVsaW0gPSBtYXgobWluZGVsaW0sIG5kZWxpbSk7CiAJfQpAQCAtMTM4MCwzNyArNTU4LDIzIEBACiAJcmV0dXJuIG5kZWxpbTsKIH0KIAotLyoKLSAqIEZvciBhZ2dyZWdhdGlvbiBmcm9tIHNvZnR3YXJlIGJ1ZmZlciBxdWV1ZS4KLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwogc3RhdGljIGVudW0gQVRIX0FHR1JfU1RBVFVTIGF0aF90eF9mb3JtX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiAqKmJmX2xhc3QsCi0JCQkJCXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gKnBhcmFtLAotCQkJCQlpbnQgKnByZXZfZnJhbWVzKQorCQkJCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EpCiB7CiAjZGVmaW5lIFBBREJZVEVTKF9sZW4pICgoNCAtICgoX2xlbikgJSA0KSkgJSA0KQotCXN0cnVjdCBhdGhfYnVmICpiZiwgKnRiZiwgKmJmX2ZpcnN0LCAqYmZfcHJldiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCWludCBybCA9IDAsIG5mcmFtZXMgPSAwLCBuZGVsaW07CisJc3RydWN0IGF0aF9idWYgKmJmLCAqYmZfZmlyc3QsICpiZl9wcmV2ID0gTlVMTDsKKwlpbnQgcmwgPSAwLCBuZnJhbWVzID0gMCwgbmRlbGltLCBwcmV2X2FsID0gMDsKIAl1MTYgYWdncl9saW1pdCA9IDAsIGFsID0gMCwgYnBhZCA9IDAsCiAJCWFsX2RlbHRhLCBoX2JhdyA9IHRpZC0+YmF3X3NpemUgLyAyOwogCWVudW0gQVRIX0FHR1JfU1RBVFVTIHN0YXR1cyA9IEFUSF9BR0dSX0RPTkU7Ci0JaW50IHByZXZfYWwgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCUJVR19PTihsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSk7CiAKIAliZl9maXJzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAogCWRvIHsKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKLQkJLyoKLQkJICogZG8gbm90IHN0ZXAgb3ZlciBibG9jay1hY2sgd2luZG93Ci0JCSAqLworCQkvKiBkbyBub3Qgc3RlcCBvdmVyIGJsb2NrLWFjayB3aW5kb3cgKi8KIAkJaWYgKCFCQVdfV0lUSElOKHRpZC0+c2VxX3N0YXJ0LCB0aWQtPmJhd19zaXplLCBiZi0+YmZfc2Vxbm8pKSB7CiAJCQlzdGF0dXMgPSBBVEhfQUdHUl9CQVdfQ0xPU0VEOwogCQkJYnJlYWs7CkBAIC0xNDIxLDI5ICs1ODUsMjMgQEAKIAkJCXJsID0gMTsKIAkJfQogCi0JCS8qCi0JCSAqIGRvIG5vdCBleGNlZWQgYWdncmVnYXRpb24gbGltaXQKLQkJICovCisJCS8qIGRvIG5vdCBleGNlZWQgYWdncmVnYXRpb24gbGltaXQgKi8KIAkJYWxfZGVsdGEgPSBBVEhfQUdHUl9ERUxJTV9TWiArIGJmLT5iZl9mcm1sZW47CiAKLQkJaWYgKG5mcmFtZXMgJiYgKGFnZ3JfbGltaXQgPAotCQkJKGFsICsgYnBhZCArIGFsX2RlbHRhICsgcHJldl9hbCkpKSB7CisJCWlmIChuZnJhbWVzICYmCisJCSAgICAoYWdncl9saW1pdCA8IChhbCArIGJwYWQgKyBhbF9kZWx0YSArIHByZXZfYWwpKSkgewogCQkJc3RhdHVzID0gQVRIX0FHR1JfTElNSVRFRDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyoKLQkJICogZG8gbm90IGV4Y2VlZCBzdWJmcmFtZSBsaW1pdAotCQkgKi8KLQkJaWYgKChuZnJhbWVzICsgKnByZXZfZnJhbWVzKSA+PQotCQkgICAgbWluKChpbnQpaF9iYXcsIEFUSF9BTVBEVV9TVUJGUkFNRV9ERUZBVUxUKSkgeworCQkvKiBkbyBub3QgZXhjZWVkIHN1YmZyYW1lIGxpbWl0ICovCisJCWlmIChuZnJhbWVzID49IG1pbigoaW50KWhfYmF3LCBBVEhfQU1QRFVfU1VCRlJBTUVfREVGQVVMVCkpIHsKIAkJCXN0YXR1cyA9IEFUSF9BR0dSX0xJTUlURUQ7CiAJCQlicmVhazsKIAkJfQorCQluZnJhbWVzKys7CiAKLQkJLyoKLQkJICogYWRkIHBhZGRpbmcgZm9yIHByZXZpb3VzIGZyYW1lIHRvIGFnZ3JlZ2F0aW9uIGxlbmd0aAotCQkgKi8KKwkJLyogYWRkIHBhZGRpbmcgZm9yIHByZXZpb3VzIGZyYW1lIHRvIGFnZ3JlZ2F0aW9uIGxlbmd0aCAqLwogCQlhbCArPSBicGFkICsgYWxfZGVsdGE7CiAKIAkJLyoKQEAgLTE0NTEsNjkgKzYwOSwzNSBAQAogCQkgKiBkZW5zaXR5IGZvciB0aGlzIG5vZGUuCiAJCSAqLwogCQluZGVsaW0gPSBhdGhfY29tcHV0ZV9udW1fZGVsaW1zKHNjLCB0aWQsIGJmX2ZpcnN0LCBiZi0+YmZfZnJtbGVuKTsKLQogCQlicGFkID0gUEFEQllURVMoYWxfZGVsdGEpICsgKG5kZWxpbSA8PCAyKTsKIAogCQliZi0+YmZfbmV4dCA9IE5VTEw7Ci0JCWJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjLT5kc19saW5rID0gMDsKKwkJYmYtPmJmX2Rlc2MtPmRzX2xpbmsgPSAwOwogCi0JCS8qCi0JCSAqIHRoaXMgcGFja2V0IGlzIHBhcnQgb2YgYW4gYWdncmVnYXRlCi0JCSAqIC0gcmVtb3ZlIGFsbCBkZXNjcmlwdG9ycyBiZWxvbmdpbmcgdG8gdGhpcyBmcmFtZSBmcm9tCi0JCSAqICAgc29mdHdhcmUgcXVldWUKLQkJICogLSBhZGQgaXQgdG8gYmxvY2sgYWNrIHdpbmRvdwotCQkgKiAtIHNldCB1cCBkZXNjcmlwdG9ycyBmb3IgYWdncmVnYXRpb24KLQkJICovCi0JCWxpc3RfY3V0X3Bvc2l0aW9uKCZiZl9oZWFkLCAmdGlkLT5idWZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKKwkJLyogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZSAqLwogCQlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiZiwgJmJmX2hlYWQsIGxpc3QpIHsKLQkJCWF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzYy0+c2NfYWgsCi0JCQkJdGJmLT5iZl9kZXNjLCBuZGVsaW0pOwotCQl9Ci0KLQkJLyoKLQkJICogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZQotCQkgKi8KLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZl9oZWFkLCBiZl9xKTsKLQkJbmZyYW1lcysrOwotCisJCWF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBuZGVsaW0pOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsIGJmX3EpOwogCQlpZiAoYmZfcHJldikgewogCQkJYmZfcHJldi0+YmZfbmV4dCA9IGJmOwotCQkJYmZfcHJldi0+YmZfbGFzdGZybS0+YmZfZGVzYy0+ZHNfbGluayA9IGJmLT5iZl9kYWRkcjsKKwkJCWJmX3ByZXYtPmJmX2Rlc2MtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7CiAJCX0KIAkJYmZfcHJldiA9IGJmOwotCi0jaWZkZWYgQUdHUl9OT1NIT1JUCi0JCS8qCi0JCSAqIHRlcm1pbmF0ZSBhZ2dyZWdhdGlvbiBvbiBhIHNtYWxsIHBhY2tldCBib3VuZGFyeQotCQkgKi8KLQkJaWYgKGJmLT5iZl9mcm1sZW4gPCBBVEhfQUdHUl9NSU5QTEVOKSB7Ci0JCQlzdGF0dXMgPSBBVEhfQUdHUl9TSE9SVFBLVDsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QtPmJmX2FsID0gYWw7CiAJYmZfZmlyc3QtPmJmX25mcmFtZXMgPSBuZnJhbWVzOwotCSpiZl9sYXN0ID0gYmZfcHJldjsKKwogCXJldHVybiBzdGF0dXM7CiAjdW5kZWYgUEFEQllURVMKIH0KIAotLyoKLSAqIHByb2Nlc3MgcGVuZGluZyBmcmFtZXMgcG9zc2libHkgZG9pbmcgYS1tcGR1IGFnZ3JlZ2F0aW9uCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zY2hlZF9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCXN0cnVjdCBhdGhfdHhxICp0eHEsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIHZvaWQgYXRoX3R4X3NjaGVkX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmYsICpiZl9sYXN0LCAqYmZfbGFzdGFnZ3IgPSBOVUxMOworCXN0cnVjdCBhdGhfYnVmICpiZjsKIAllbnVtIEFUSF9BR0dSX1NUQVRVUyBzdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9xOwotCXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gcGFyYW0gPSB7MCwgMCwgMCwgMCwgTlVMTH07Ci0JaW50IHByZXZfZnJhbWVzID0gMDsKIAogCWRvIHsKIAkJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQpAQCAtMTUyMSwxMjAgKzY0NSwxNDkgQEAKIAogCQlJTklUX0xJU1RfSEVBRCgmYmZfcSk7CiAKLQkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSwgJmJmX2xhc3RhZ2dyLCAmcGFyYW0sCi0JCQkJCSAgJnByZXZfZnJhbWVzKTsKKwkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSk7CiAKIAkJLyoKLQkJICogbm8gZnJhbWVzIHBpY2tlZCB1cCB0byBiZSBhZ2dyZWdhdGVkOyBibG9jay1hY2sKLQkJICogd2luZG93IGlzIG5vdCBvcGVuCisJCSAqIG5vIGZyYW1lcyBwaWNrZWQgdXAgdG8gYmUgYWdncmVnYXRlZDsKKwkJICogYmxvY2stYWNrIHdpbmRvdyBpcyBub3Qgb3Blbi4KIAkJICovCiAJCWlmIChsaXN0X2VtcHR5KCZiZl9xKSkKIAkJCWJyZWFrOwogCiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmYmZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQliZl9sYXN0ID0gbGlzdF9lbnRyeShiZl9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJYmYtPmJmX2xhc3RiZiA9IGJmX2xhc3Q7CisJCWJmLT5iZl9sYXN0YmYgPSBsaXN0X2VudHJ5KGJmX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCi0JCS8qCi0JCSAqIGlmIG9ubHkgb25lIGZyYW1lLCBzZW5kIGFzIG5vbi1hZ2dyZWdhdGUKLQkJICovCisJCS8qIGlmIG9ubHkgb25lIGZyYW1lLCBzZW5kIGFzIG5vbi1hZ2dyZWdhdGUgKi8KIAkJaWYgKGJmLT5iZl9uZnJhbWVzID09IDEpIHsKLQkJCUFTU0VSVChiZi0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQogCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9BR0dSOwotCQkJLyoKLQkJCSAqIGNsZWFyIGFnZ3IgYml0cyBmb3IgZXZlcnkgZGVzY3JpcHRvcgotCQkJICogWFhYIFRPRE86IGlzIHRoZXJlIGEgd2F5IHRvIG9wdGltaXplIGl0PwotCQkJICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiZiwgJmJmX3EsIGxpc3QpIHsKLQkJCQlhdGg5a19od19jbHIxMW5fYWdncihzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0JCQl9Ci0KKwkJCWF0aDlrX2h3X2NscjExbl9hZ2dyKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MpOwogCQkJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwogCQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCAmYmZfcSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIHNldHVwIGZpcnN0IGRlc2Mgd2l0aCByYXRlIGFuZCBhZ2dyIGluZm8KLQkJICovCisJCS8qIHNldHVwIGZpcnN0IGRlc2Mgb2YgYWdncmVnYXRlICovCiAJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BR0dSOwogCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJCWF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIGJmLT5iZl9hbCk7CiAKLQkJLyoKLQkJICogYW5jaG9yIGxhc3QgZnJhbWUgb2YgYWdncmVnYXRlIGNvcnJlY3RseQotCQkgKi8KLQkJQVNTRVJUKGJmX2xhc3RhZ2dyKTsKLQkJQVNTRVJUKGJmX2xhc3RhZ2dyLT5iZl9sYXN0ZnJtID09IGJmX2xhc3QpOwotCQl0YmYgPSBiZl9sYXN0YWdncjsKLQkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0KLQkJLyogWFhYOiBXZSBkb24ndCBlbnRlciBpbnRvIHRoaXMgbG9vcCwgY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyAqLwotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmJmX3EpICYmICFsaXN0X2lzX2xhc3QoJnRiZi0+bGlzdCwgJmJmX3EpKSB7Ci0JCQl0YmYgPSBsaXN0X2VudHJ5KHRiZi0+bGlzdC5uZXh0LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQlhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHNjLT5zY19haCwgdGJmLT5iZl9kZXNjKTsKLQkJfQorCQkvKiBhbmNob3IgbGFzdCBkZXNjIG9mIGFnZ3JlZ2F0ZSAqLworCQlhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHNjLT5zY19haCwgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYyk7CiAKIAkJdHhxLT5heHFfYWdncl9kZXB0aCsrOwotCi0JCS8qCi0JCSAqIE5vcm1hbCBhZ2dyZWdhdGUsIHF1ZXVlIHRvIGhhcmR3YXJlCi0JCSAqLwogCQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsICZiZl9xKTsKIAogCX0gd2hpbGUgKHR4cS0+YXhxX2RlcHRoIDwgQVRIX0FHR1JfTUlOX1FERVBUSCAmJgogCQkgc3RhdHVzICE9IEFUSF9BR0dSX0JBV19DTE9TRUQpOwogfQogCi0vKiBDYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkICovCi0KLXN0YXRpYyB2b2lkIGF0aF90aWRfZHJhaW4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQotCitpbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogeworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKworCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CisJCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJYXRoX3R4X3BhdXNlX3RpZChzYywgdHh0aWQpOworCQkqc3NuID0gdHh0aWQtPnNlcV9zdGFydDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CisJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3R4dGlkLT5hYy0+cW51bV07CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKIAlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CiAKLQlmb3IgKDs7KSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKLQkJCWJyZWFrOwotCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwlpZiAodHh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKQorCQlyZXR1cm4gMDsKIAotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0KLQkJLyogdXBkYXRlIGJhdyBmb3Igc29mdHdhcmUgcmV0cmllZCBmcmFtZSAqLwotCQlpZiAoYmZfaXNyZXRyaWVkKGJmKSkKLQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7Ci0KLQkJLyoKLQkJICogZG8gbm90IGluZGljYXRlIHBhY2tldHMgd2hpbGUgaG9sZGluZyB0eHEgc3BpbmxvY2suCi0JCSAqIHVubG9jayBpcyBpbnRlbnRpb25hbCBoZXJlCi0JCSAqLwotCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7Ci0KLQkJLyogY29tcGxldGUgdGhpcyBzdWItZnJhbWUgKi8KLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKLQotCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOworCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7CisJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBUT0RPOiBGb3IgZnJhbWUocykgdGhhdCBhcmUgaW4gdGhlIHJldHJ5IHN0YXRlLCB3ZSB3aWxsIHJldXNlIHRoZQotCSAqIHNlcXVlbmNlIG51bWJlcihzKSB3aXRob3V0IHNldHRpbmcgdGhlIHJldHJ5IGJpdC4gVGhlCi0JICogYWx0ZXJuYXRpdmUgaXMgdG8gZ2l2ZSB1cCBvbiB0aGVzZSBhbmQgQkFSIHRoZSByZWNlaXZlcidzIHdpbmRvdwotCSAqIGZvcndhcmQuCi0JICovCi0JdGlkLT5zZXFfbmV4dCA9IHRpZC0+c2VxX3N0YXJ0OwotCXRpZC0+YmF3X3RhaWwgPSB0aWQtPmJhd19oZWFkOworCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKworCS8qIGRyb3AgYWxsIHNvZnR3YXJlIHJldHJpZWQgZnJhbWVzIGFuZCBtYXJrIHRoaXMgVElEICovCisJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4dGlkLT5idWZfcSkpIHsKKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwkJaWYgKCFiZl9pc3JldHJpZWQoYmYpKSB7CisJCQkvKgorCQkJICogTkI6IGl0J3MgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdAorCQkJICogc29mdHdhcmUgcmV0cmllZCBmcmFtZSB3aWxsIGFsd2F5cyBzdGF5CisJCQkgKiBhdCB0aGUgaGVhZCBvZiBzb2Z0d2FyZSBxdWV1ZS4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0eHRpZCwgYmYtPmJmX3NlcW5vKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJaWYgKHR4dGlkLT5iYXdfaGVhZCAhPSB0eHRpZC0+YmF3X3RhaWwpIHsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQ0xFQU5VUDsKKwl9IGVsc2UgeworCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdHh0aWQpOworCX0KKworCXJldHVybiAwOwogfQogCi0vKgotICogRHJhaW4gYWxsIHBlbmRpbmcgYnVmZmVycwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCit2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgeworCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKKwkJdHh0aWQtPmJhd19zaXplID0KKwkJCUlFRUU4MDIxMV9NSU5fQU1QRFVfQlVGIDw8IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfQ09NUExFVEU7CisJCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJYXRoX3R4X3Jlc3VtZV90aWQoc2MsIHR4dGlkKTsKKwl9Cit9CisKK2Jvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkbm8pOworCisJaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSkpIHsKKwkJaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9QUk9HUkVTUykgJiYKKwkJICAgICh0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA8IEFEREJBX0VYQ0hBTkdFX0FUVEVNUFRTKSkgeworCQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMrKzsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioqKioqKioqKioqKioqKioqKiovCisvKiBRdWV1ZSBNYW5hZ2VtZW50ICovCisvKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyB2b2lkIGF0aF90eHFfZHJhaW5fcGVuZGluZ19idWZmZXJzKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CkBAIC0xNjUyLDI1MSArODA1LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoX3R4X3NldHVwX2J1ZmZlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2OwotCWludCBoZHJsZW47Ci0JX19sZTE2IGZjOwotCi0JdHhfaW5mb19wcml2ID0ga3phbGxvYyhzaXplb2YoKnR4X2luZm9fcHJpdiksIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghdHhfaW5mb19wcml2KSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IHR4X2luZm9fcHJpdjsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JQVRIX1RYQlVGX1JFU0VUKGJmKTsKLQotCS8qIEZyYW1lIHR5cGUgKi8KLQotCWJmLT5iZl9mcm1sZW4gPSBza2ItPmxlbiArIEZDU19MRU4gLSAoaGRybGVuICYgMyk7Ci0KLQlpZWVlODAyMTFfaXNfZGF0YShmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0RBVEEpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfREFUQSk7Ci0JaWVlZTgwMjExX2lzX2JhY2tfcmVxKGZjKSA/Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQkFSKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0JBUik7Ci0JaWVlZTgwMjExX2lzX3BzcG9sbChmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1BTUE9MTCkgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9QU1BPTEwpOwotCShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1NIT1JUX1BSRUFNQkxFKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX1NIT1JUX1BSRUFNQkxFKTsKLQkoc2MtPmh3LT5jb25mLmh0LmVuYWJsZWQgJiYgIWlzX3BhZShza2IpICYmCi0JICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKSA/Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfSFQpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfSFQpOwotCi0JYmYtPmJmX2ZsYWdzID0gc2V0dXBfdHhfZmxhZ3Moc2MsIHNrYiwgdHhjdGwtPnR4cSk7Ci0KLQkvKiBDcnlwdG8gKi8KLQotCWJmLT5iZl9rZXl0eXBlID0gZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7Ci0KLQlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKLQkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKLQkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7Ci0JfSBlbHNlIHsKLQkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOwotCX0KLQotCS8qIEFzc2lnbiBzZXFubywgdGlkbm8gKi8KLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQotCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7Ci0KLQkvKiBETUEgc2V0dXAgKi8KLQliZi0+YmZfbXBkdSA9IHNrYjsKLQotCWJmLT5iZl9kbWFjb250ZXh0ID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0KSkpIHsKLQkJYmYtPmJmX21wZHUgPSBOVUxMOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKLQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBUWFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0OwotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogdHggcG93ZXIgKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zdGFydF9kbWEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkczsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IGZybV90eXBlOwotCi0JZnJtX3R5cGUgPSBnZXRfaHdfcGFja2V0X3R5cGUoc2tiKTsKLQotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvciAqLwotCi0JZHMgPSBiZi0+YmZfZGVzYzsKLQlkcy0+ZHNfbGluayA9IDA7Ci0JZHMtPmRzX2RhdGEgPSBiZi0+YmZfYnVmX2FkZHI7Ci0KLQkvKiBGb3JtdWxhdGUgZmlyc3QgdHggZGVzY3JpcHRvciB3aXRoIHR4IGNvbnRyb2xzICovCi0KLQlhdGg5a19od19zZXQxMW5fdHhkZXNjKGFoLCBkcywgYmYtPmJmX2ZybWxlbiwgZnJtX3R5cGUsIE1BWF9SQVRFX1BPV0VSLAotCQkJICAgICAgIGJmLT5iZl9rZXlpeCwgYmYtPmJmX2tleXR5cGUsIGJmLT5iZl9mbGFncyk7Ci0KLQlhdGg5a19od19maWxsdHhkZXNjKGFoLCBkcywKLQkJCSAgICBza2ItPmxlbiwJLyogc2VnbWVudCBsZW5ndGggKi8KLQkJCSAgICB0cnVlLAkvKiBmaXJzdCBzZWdtZW50ICovCi0JCQkgICAgdHJ1ZSwJLyogbGFzdCBzZWdtZW50ICovCi0JCQkgICAgZHMpOwkvKiBmaXJzdCBkZXNjcmlwdG9yICovCi0KLQliZi0+YmZfbGFzdGZybSA9IGJmOwotCi0Jc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Ci0KLQlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKLQkgICAgdHhfaW5mby0+Y29udHJvbC5zdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwotCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7Ci0KLQkJaWYgKGF0aF9hZ2dyX3F1ZXJ5KHNjLCBhbiwgYmYtPmJmX3RpZG5vKSkgewotCQkJLyoKLQkJCSAqIFRyeSBhZ2dyZWdhdGlvbiBpZiBpdCdzIGEgdW5pY2FzdCBkYXRhIGZyYW1lCi0JCQkgKiBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIEhUIGNhcGFibGUuCi0JCQkgKi8KLQkJCWF0aF90eF9zZW5kX2FtcGR1KHNjLCB0aWQsICZiZl9oZWFkLCB0eGN0bCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogU2VuZCB0aGlzIGZyYW1lIGFzIHJlZ3VsYXIgd2hlbiBBRERCQQotCQkJICogZXhjaGFuZ2UgaXMgbmVpdGhlciBjb21wbGV0ZSBub3IgcGVuZGluZy4KLQkJCSAqLwotCQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLAotCQkJCQkgICB0aWQsICZiZl9oZWFkKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWJmLT5iZl9sYXN0YmYgPSBiZjsKLQkJYmYtPmJmX25mcmFtZXMgPSAxOwotCi0JCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOwotCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Ci19Ci0KLS8qIFVwb24gZmFpbHVyZSBjYWxsZXIgc2hvdWxkIGZyZWUgc2tiICovCi1pbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0JaW50IHI7Ci0KLQkvKiBDaGVjayBpZiBhIHR4IGJ1ZmZlciBpcyBhdmFpbGFibGUgKi8KLQotCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOwotCWlmICghYmYpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggYnVmZmVycyBhcmUgZnVsbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihzYywgYmYsIHNrYiwgdHhjdGwpOwotCWlmICh1bmxpa2VseShyKSkgewotCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKLQotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOwotCi0JCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCi0JCSAqIGd1YXJhbnRlZSB0aGlzIHdpbGwgaGFwcGVuIGJ5IGtub3dpbmcgYmVmb3JlaGFuZCB0aGF0Ci0JCSAqIHdlIHdpbGwgYXQgbGVhc3QgaGF2ZSB0byBydW4gVFggY29tcGxldGlvbm9uIG9uZSBidWZmZXIKLQkJICogb24gdGhlIHF1ZXVlICovCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmIChhdGhfdHhxX2RlcHRoKHNjLCB0eHEtPmF4cV9xbnVtKSA+IDEpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKLQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCQl0eHEtPnN0b3BwZWQgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQotCQlyZXR1cm4gcjsKLQl9Ci0KLQlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEluaXRpYWxpemUgVFggcXVldWUgYW5kIGgvdyAqLwotCi1pbnQgYXRoX3R4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcykKLXsKLQlpbnQgZXJyb3IgPSAwOwotCi0JZG8gewotCQlzcGluX2xvY2tfaW5pdCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJLyogU2V0dXAgdHggZGVzY3JpcHRvcnMgKi8KLQkJZXJyb3IgPSBhdGhfZGVzY2RtYV9zZXR1cChzYywgJnNjLT50eC50eGRtYSwgJnNjLT50eC50eGJ1ZiwKLQkJCSJ0eCIsIG5idWZzLCAxKTsKLQkJaWYgKGVycm9yICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB0eCBkZXNjcmlwdG9yczogJWRcbiIsCi0JCQkJZXJyb3IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBYWFggYWxsb2NhdGUgYmVhY29uIHN0YXRlIHRvZ2V0aGVyIHdpdGggdmFwICovCi0JCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYsCi0JCQkJCSAgImJlYWNvbiIsIEFUSF9CQ0JVRiwgMSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwKLQkJCQllcnJvcik7Ci0JCQlicmVhazsKLQkJfQotCi0JfSB3aGlsZSAoMCk7Ci0KLQlpZiAoZXJyb3IgIT0gMCkKLQkJYXRoX3R4X2NsZWFudXAoc2MpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBSZWNsYWltIGFsbCB0eCBxdWV1ZSByZXNvdXJjZXMgKi8KLQotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCS8qIGNsZWFudXAgYmVhY29uIGRlc2NyaXB0b3JzICovCi0JaWYgKHNjLT5iZWFjb24uYmRtYS5kZF9kZXNjX2xlbiAhPSAwKQotCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmKTsKLQotCS8qIGNsZWFudXAgdHggZGVzY3JpcHRvcnMgKi8KLQlpZiAoc2MtPnR4LnR4ZG1hLmRkX2Rlc2NfbGVuICE9IDApCi0JCWF0aF9kZXNjZG1hX2NsZWFudXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldHVwIGEgaC93IHRyYW5zbWl0IHF1ZXVlICovCi0KIHN0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcW51bTsKIApAQCAtMTk1OSw0MyArODcwLDcgQEAKIAlyZXR1cm4gJnNjLT50eC50eHFbcW51bV07CiB9CiAKLS8qIFJlY2xhaW0gcmVzb3VyY2VzIGZvciBhIHNldHVwIHF1ZXVlICovCi0KLXZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCWF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHNjLT5zY19haCwgdHhxLT5heHFfcW51bSk7Ci0Jc2MtPnR4LnR4cXNldHVwICY9IH4oMTw8dHhxLT5heHFfcW51bSk7Ci19Ci0KLS8qCi0gKiBTZXR1cCBhIGhhcmR3YXJlIGRhdGEgdHJhbnNtaXQgcXVldWUgZm9yIHRoZSBzcGVjaWZpZWQKLSAqIGFjY2VzcyBjb250cm9sLiAgVGhlIGhhbCBtYXkgbm90IHN1cHBvcnQgYWxsIHJlcXVlc3RlZAotICogcXVldWVzIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8gYQotICogcHJldmlvdXNseSBzZXR1cCBxdWV1ZS4gIFdlIHJlY29yZCB0aGUgbWFwcGluZyBmcm9tIGFjJ3MKLSAqIHRvIGgvdyBxdWV1ZXMgZm9yIHVzZSBieSBhdGhfdHhfc3RhcnQgYW5kIGFsc28gdHJhY2sKLSAqIHRoZSBzZXQgb2YgaC93IHF1ZXVlcyBiZWluZyB1c2VkIHRvIG9wdGltaXplIHdvcmsgaW4gdGhlCi0gKiB0cmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgcmVsYXRlZCByb3V0aW5lcy4KLSAqLwotCi1pbnQgYXRoX3R4X3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaGFsdHlwZSkKLXsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxOwotCi0JaWYgKGhhbHR5cGUgPj0gQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJIQUwgQUMgJXUgb3V0IG9mIHJhbmdlLCBtYXggJXp1IVxuIiwKLQkJCSBoYWx0eXBlLCBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSk7Ci0JCXJldHVybiAwOwotCX0KLQl0eHEgPSBhdGhfdHhxX3NldHVwKHNjLCBBVEg5S19UWF9RVUVVRV9EQVRBLCBoYWx0eXBlKTsKLQlpZiAodHhxICE9IE5VTEwpIHsKLQkJc2MtPnR4Lmh3cV9tYXBbaGFsdHlwZV0gPSB0eHEtPmF4cV9xbnVtOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpCitzdGF0aWMgaW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSkKIHsKIAlpbnQgcW51bTsKIApAQCAtMjAyMSw4ICs4OTYsNiBAQAogCXJldHVybiBxbnVtOwogfQogCi0vKiBHZXQgYSB0cmFuc21pdCBxdWV1ZSwgaWYgYXZhaWxhYmxlICovCi0KIHN0cnVjdCBhdGhfdHhxICphdGhfdGVzdF9nZXRfdHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSBOVUxMOwpAQCAtMjAzMyw5ICs5MDYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAotCS8qIFRyeSB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBkZXNjcmlwdG9ycyAqLwogCWlmICh0eHEtPmF4cV9kZXB0aCA+PSAoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwKIAkJCSJUWCBxdWV1ZTogJWQgaXMgZnVsbCwgZGVwdGg6ICVkXG4iLAogCQkJcW51bSwgdHhxLT5heHFfZGVwdGgpOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKQEAgLTIwNDksMTIgKzkyMSwxMCBAQAogCXJldHVybiB0eHE7CiB9CiAKLS8qIFVwZGF0ZSBwYXJhbWV0ZXJzIGZvciBhIHRyYW5zbWl0IHF1ZXVlICovCi0KIGludCBhdGhfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0sCiAJCSAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIApAQCAtMjA4Miw3ICs5NTIsNyBAQAogCQkJIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxbnVtKTsKIAkJZXJyb3IgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7CiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtMjA5Miw1NSArOTYyLDM2IEBACiB7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAJaW50IHFudW0gPSBzYy0+YmVhY29uLmNhYnEtPmF4cV9xbnVtOwotCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyBjb25mOwogCiAJYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzYy0+c2NfYWgsIHFudW0sICZxaSk7CiAJLyoKIAkgKiBFbnN1cmUgdGhlIHJlYWR5dGltZSAlIGlzIHdpdGhpbiB0aGUgYm91bmRzLgogCSAqLwotCWlmIChzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPCBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EKQotCQlzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EOwotCWVsc2UgaWYgKHNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSA+IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQpCi0JCXNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQ7CisJaWYgKHNjLT5jb25maWcuY2FicVJlYWR5dGltZSA8IEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQpCisJCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQ7CisJZWxzZSBpZiAoc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lID4gQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCkKKwkJc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORDsKIAotCWF0aF9nZXRfYmVhY29uY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZLCAmY29uZik7Ci0JcWkudHFpX3JlYWR5VGltZSA9Ci0JCShjb25mLmJlYWNvbl9pbnRlcnZhbCAqIHNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSkgLyAxMDA7CisJcWkudHFpX3JlYWR5VGltZSA9IChzYy0+aHctPmNvbmYuYmVhY29uX2ludCAqCisJCQkgICAgc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lKSAvIDEwMDsKIAlhdGhfdHhxX3VwZGF0ZShzYywgcW51bSwgJnFpKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9mIHRyYW5zbWl0IGludGVycnVwdCAqLwotCi12b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWludCBpOwotCXUzMiBxY3VtYXNrID0gKCgxIDw8IEFUSDlLX05VTV9UWF9RVUVVRVMpIC0gMSk7Ci0KLQlhdGg5a19od19nZXR0eGludHJ0eHFzKHNjLT5zY19haCwgJnFjdW1hc2spOwotCi0JLyoKLQkgKiBQcm9jZXNzIGVhY2ggYWN0aXZlIHF1ZXVlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKLQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpICYmIChxY3VtYXNrICYgKDEgPDwgaSkpKQotCQkJYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4LnR4cVtpXSk7Ci0JfQotfQotCi12b2lkIGF0aF90eF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBib29sIHJldHJ5X3R4KQorLyoKKyAqIERyYWluIGEgZ2l2ZW4gVFggcXVldWUgKGNvdWxkIGJlIEJlYWNvbiBvciBEYXRhKQorICoKKyAqIFRoaXMgYXNzdW1lcyBvdXRwdXQgaGFzIGJlZW4gc3RvcHBlZCBhbmQKKyAqIHdlIGRvIG5vdCBuZWVkIHRvIGJsb2NrIGF0aF90eF90YXNrbGV0LgorICovCit2b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCkKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICpsYXN0YmY7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JLyoKLQkgKiBOQjogdGhpcyBhc3N1bWVzIG91dHB1dCBoYXMgYmVlbiBzdG9wcGVkIGFuZAotCSAqICAgICB3ZSBkbyBub3QgbmVlZCB0byBibG9jayBhdGhfdHhfdGFza2xldAotCSAqLwogCWZvciAoOzspIHsKIAkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIApAQCAtMjE3NSw3ICsxMDI2LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCWlmIChiZl9pc2FtcGR1KGJmKSkKLQkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyX3JpZnMoc2MsIHR4cSwgYmYsICZiZl9oZWFkLCAwKTsKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CiAJCWVsc2UKIAkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQpAQCAtMjE5MCwxODEgKzEwNDEsNjYgQEAKIAl9CiB9CiAKLS8qIERyYWluIHRoZSB0cmFuc21pdCBxdWV1ZXMgYW5kIHJlY2xhaW0gcmVzb3VyY2VzICovCi0KLXZvaWQgYXRoX2RyYWludHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KQordm9pZCBhdGhfZHJhaW5fYWxsX3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKIHsKLQkvKiBzdG9wIGJlYWNvbiBxdWV1ZS4gVGhlIGJlYWNvbiB3aWxsIGJlIGZyZWVkIHdoZW4KLQkgKiB3ZSBnbyB0byBJTklUIHN0YXRlICovCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKLQkJKHZvaWQpIGF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImJlYWNvbiBxdWV1ZSAleFxuIiwKLQkJCWF0aDlrX2h3X2dldHR4YnVmKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKSk7Ci0JfQorCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGksIG5wZW5kID0gMDsKIAotCWF0aF9kcmFpbl90eGRhdGFxKHNjLCByZXRyeV90eCk7Ci19CisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpCisJCXJldHVybjsKIAotdTMyIGF0aF90eHFfZGVwdGgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtKQotewotCXJldHVybiBzYy0+dHgudHhxW3FudW1dLmF4cV9kZXB0aDsKLX0KKwkvKiBTdG9wIGJlYWNvbiBxdWV1ZSAqLworCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CiAKLXUzMiBhdGhfdHhxX2FnZ3JfZGVwdGgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtKQotewotCXJldHVybiBzYy0+dHgudHhxW3FudW1dLmF4cV9hZ2dyX2RlcHRoOwotfQotCi1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKLQotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCi0JCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKLQkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkvKiBTdG9wIGRhdGEgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKKwkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCB0eHEtPmF4cV9xbnVtKTsKKwkJCW5wZW5kICs9IGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgdHhxLT5heHFfcW51bSk7CiAJCX0KIAl9CiAKLQlyZXR1cm4gZmFsc2U7CisJaWYgKG5wZW5kKSB7CisJCWludCByOworCisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKKworCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOworCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgdHJ1ZSk7CisJCWlmIChyKQorCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsCisJCQkJcik7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF9kcmFpbnR4cShzYywgJnNjLT50eC50eHFbaV0sIHJldHJ5X3R4KTsKKwl9CiB9CiAKLS8qIFN0YXJ0IFRYIGFnZ3JlZ2F0aW9uICovCi0KLWludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCit2b2lkIGF0aF90eF9jbGVhbnVwcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwotCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgewotCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlhdGg5a19od19yZWxlYXNldHhxdWV1ZShzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pOworCXNjLT50eC50eHFzZXR1cCAmPSB+KDE8PHR4cS0+YXhxX3FudW0pOwogfQogCi0vKiBTdG9wIHR4IGFnZ3JlZ2F0aW9uICovCi0KLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQotewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWF0aF90eF9hZ2dyX3RlYXJkb3duKHNjLCBhbiwgdGlkKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogUmVzdW1lIHR4IGFnZ3JlZ2F0aW9uICovCi0KLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQotewotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7Ci0Jc3RydWN0IGF0aF9ub2RlICphbjsKLQotCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Ci0KLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7Ci0JCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOwotCQl0eHRpZC0+YmF3X3NpemUgPQotCQkJSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgPDwgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOwotCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9DT01QTEVURTsKLQkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcmVzdW1lX3RpZChzYywgdHh0aWQpOwotCX0KLX0KLQotLyoKLSAqIFBlcmZvcm1zIHRyYW5zbWl0IHNpZGUgY2xlYW51cCB3aGVuIFRJRCBjaGFuZ2VzIGZyb20gYWdncmVnYXRlZCB0bwotICogdW5hZ2dyZWdhdGVkLgotICogLSBQYXVzZSB0aGUgVElEIGFuZCBtYXJrIGNsZWFudXAgaW4gcHJvZ3Jlc3MKLSAqIC0gRGlzY2FyZCBhbGwgcmV0cnkgZnJhbWVzIGZyb20gdGhlIHMvdyBxdWV1ZS4KLSAqLwotCi12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWQpCi17Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdHh0aWQtPmFjLT5xbnVtXTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCWlmICh0eHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIC8qIGNsZWFudXAgaXMgaW4gcHJvZ3Jlc3MgKi8KLQkJcmV0dXJuOwotCi0JaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSkpIHsKLQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVElEIG11c3QgYmUgcGF1c2VkIGZpcnN0ICovCi0JYXRoX3R4X3BhdXNlX3RpZChzYywgdHh0aWQpOwotCi0JLyogZHJvcCBhbGwgc29mdHdhcmUgcmV0cmllZCBmcmFtZXMgYW5kIG1hcmsgdGhpcyBUSUQgKi8KLQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCXdoaWxlICghbGlzdF9lbXB0eSgmdHh0aWQtPmJ1Zl9xKSkgewotCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnR4dGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQlpZiAoIWJmX2lzcmV0cmllZChiZikpIHsKLQkJCS8qCi0JCQkgKiBOQjogaXQncyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0JCQkgKiBzb2Z0d2FyZSByZXRyaWVkIGZyYW1lIHdpbGwgYWx3YXlzIHN0YXkKLQkJCSAqIGF0IHRoZSBoZWFkIG9mIHNvZnR3YXJlIHF1ZXVlLgotCQkJICovCi0JCQlicmVhazsKLQkJfQotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCSZ0eHRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0JCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0eHRpZCwgYmYtPmJmX3NlcW5vKTsKLQotCQkvKiBjb21wbGV0ZSB0aGlzIHN1Yi1mcmFtZSAqLwotCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOwotCX0KLQotCWlmICh0eHRpZC0+YmF3X2hlYWQgIT0gdHh0aWQtPmJhd190YWlsKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQ0xFQU5VUDsKLQl9IGVsc2UgewotCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0eHRpZCk7Ci0JfQotfQotCi0vKgotICogVHggc2NoZWR1bGluZyBsb2dpYwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KIHZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CiAKLQkvKiBub3RoaW5nIHRvIHNjaGVkdWxlICovCiAJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX2FjcSkpCiAJCXJldHVybjsKLQkvKgotCSAqIGdldCB0aGUgZmlyc3Qgbm9kZS9hYyBwYWlyIG9uIHRoZSBxdWV1ZQotCSAqLworCiAJYWMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9hY3EsIHN0cnVjdCBhdGhfYXR4X2FjLCBsaXN0KTsKIAlsaXN0X2RlbCgmYWMtPmxpc3QpOwogCWFjLT5zY2hlZCA9IGZhbHNlOwogCi0JLyoKLQkgKiBwcm9jZXNzIGEgc2luZ2xlIHRpZCBwZXIgZGVzdGluYXRpb24KLQkgKi8KIAlkbyB7Ci0JCS8qIG5vdGhpbmcgdG8gc2NoZWR1bGUgKi8KIAkJaWYgKGxpc3RfZW1wdHkoJmFjLT50aWRfcSkpCiAJCQlyZXR1cm47CiAKQEAgLTIzNzIsNyArMTEwOCw3IEBACiAJCWxpc3RfZGVsKCZ0aWQtPmxpc3QpOwogCQl0aWQtPnNjaGVkID0gZmFsc2U7CiAKLQkJaWYgKHRpZC0+cGF1c2VkKSAgICAvKiBjaGVjayBuZXh0IHRpZCB0byBrZWVwIGgvdyBidXN5ICovCisJCWlmICh0aWQtPnBhdXNlZCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgodHhxLT5heHFfZGVwdGggJSAyKSA9PSAwKQpAQCAtMjM4NSwxNyArMTEyMSwxMCBAQAogCQlpZiAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CiAKLQkJLyogb25seSBzY2hlZHVsZSBvbmUgVElEIGF0IGEgdGltZSAqLwogCQlicmVhazsKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmYWMtPnRpZF9xKSk7CiAKLQkvKgotCSAqIHNjaGVkdWxlIEFDIGlmIG1vcmUgVElEcyBuZWVkIHByb2Nlc3NpbmcKLQkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmFjLT50aWRfcSkpIHsKLQkJLyoKLQkJICogYWRkIGRlc3QgYWMgdG8gdHhxIGlmIG5vdCBhbHJlYWR5IGFkZGVkCi0JCSAqLwogCQlpZiAoIWFjLT5zY2hlZCkgewogCQkJYWMtPnNjaGVkID0gdHJ1ZTsKIAkJCWxpc3RfYWRkX3RhaWwoJmFjLT5saXN0LCAmdHhxLT5heHFfYWNxKTsKQEAgLTI0MDMsMTA5ICsxMTMyLDU3MyBAQAogCX0KIH0KIAotLyogSW5pdGlhbGl6ZSBwZXItbm9kZSB0cmFuc21pdCBzdGF0ZSAqLwotCi12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCitpbnQgYXRoX3R4X3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaGFsdHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7Ci0JaW50IHRpZG5vLCBhY25vOwotCi0JLyoKLQkgKiBJbml0IHBlciB0aWQgdHggc3RhdGUKLQkgKi8KLQlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOwotCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsKLQkgICAgIHRpZG5vKyssIHRpZCsrKSB7Ci0JCXRpZC0+YW4gICAgICAgID0gYW47Ci0JCXRpZC0+dGlkbm8gICAgID0gdGlkbm87Ci0JCXRpZC0+c2VxX3N0YXJ0ID0gdGlkLT5zZXFfbmV4dCA9IDA7Ci0JCXRpZC0+YmF3X3NpemUgID0gV01FX01BWF9CQTsKLQkJdGlkLT5iYXdfaGVhZCAgPSB0aWQtPmJhd190YWlsID0gMDsKLQkJdGlkLT5zY2hlZCAgICAgPSBmYWxzZTsKLQkJdGlkLT5wYXVzZWQgPSBmYWxzZTsKLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwotCQlJTklUX0xJU1RfSEVBRCgmdGlkLT5idWZfcSk7Ci0KLQkJYWNubyA9IFRJRF9UT19XTUVfQUModGlkbm8pOwotCQl0aWQtPmFjID0gJmFuLT5hY1thY25vXTsKLQotCQkvKiBBRERCQSBzdGF0ZSAqLwotCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX1BST0dSRVNTOwotCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCX0KLQotCS8qCi0JICogSW5pdCBwZXIgYWMgdHggc3RhdGUKLQkgKi8KLQlmb3IgKGFjbm8gPSAwLCBhYyA9ICZhbi0+YWNbYWNub107Ci0JICAgICBhY25vIDwgV01FX05VTV9BQzsgYWNubysrLCBhYysrKSB7Ci0JCWFjLT5zY2hlZCAgICA9IGZhbHNlOwotCQlJTklUX0xJU1RfSEVBRCgmYWMtPnRpZF9xKTsKLQotCQlzd2l0Y2ggKGFjbm8pIHsKLQkJY2FzZSBXTUVfQUNfQkU6Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01FX0FDX0JLOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JLKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9BQ19WSToKLQkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAotCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19WSSk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUVfQUNfVk86Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVk8pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLS8qIENsZWFudXB0aGUgcGVuZGluZyBidWZmZXJzIGZvciB0aGUgbm9kZS4gKi8KLQotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQotewotCWludCBpOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYywgKmFjX3RtcDsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwgKnRpZF90bXA7CiAJc3RydWN0IGF0aF90eHEgKnR4cTsKLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgewotCQkJdHhxID0gJnNjLT50eC50eHFbaV07CiAKLQkJCXNwaW5fbG9jaygmdHhxLT5heHFfbG9jayk7Ci0KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhYywKLQkJCQkJYWNfdG1wLCAmdHhxLT5heHFfYWNxLCBsaXN0KSB7Ci0JCQkJdGlkID0gbGlzdF9maXJzdF9lbnRyeSgmYWMtPnRpZF9xLAotCQkJCQkJc3RydWN0IGF0aF9hdHhfdGlkLCBsaXN0KTsKLQkJCQlpZiAodGlkICYmIHRpZC0+YW4gIT0gYW4pCi0JCQkJCWNvbnRpbnVlOwotCQkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7Ci0JCQkJYWMtPnNjaGVkID0gZmFsc2U7Ci0KLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGlkLAotCQkJCQkJdGlkX3RtcCwgJmFjLT50aWRfcSwgbGlzdCkgewotCQkJCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKLQkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwotCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKLQkJfQorCWlmIChoYWx0eXBlID49IEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKSB7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiSEFMIEFDICV1IG91dCBvZiByYW5nZSwgbWF4ICV6dSFcbiIsCisJCQkgaGFsdHlwZSwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpOworCQlyZXR1cm4gMDsKIAl9CisJdHhxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgaGFsdHlwZSk7CisJaWYgKHR4cSAhPSBOVUxMKSB7CisJCXNjLT50eC5od3FfbWFwW2hhbHR5cGVdID0gdHhxLT5heHFfcW51bTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOwogfQogCi12b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorLyoqKioqKioqKioqLworLyogVFgsIERNQSAqLworLyoqKioqKioqKioqLworCisvKgorICogSW5zZXJ0IGEgY2hhaW4gb2YgYXRoX2J1ZiAoZGVzY3JpcHRvcnMpIG9uIGEgdHhxIGFuZAorICogYXNzdW1lIHRoZSBkZXNjcmlwdG9ycyBhcmUgYWxyZWFkeSBjaGFpbmVkIHRvZ2V0aGVyIGJ5IGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwkvKgorCSAqIEluc2VydCB0aGUgZnJhbWUgb24gdGhlIG91dGJvdW5kIGxpc3QgYW5kCisJICogcGFzcyBpdCBvbiB0byB0aGUgaGFyZHdhcmUuCisJICovCisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJcmV0dXJuOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChoZWFkLCAmdHhxLT5heHFfcSk7CisJdHhxLT5heHFfZGVwdGgrKzsKKwl0eHEtPmF4cV90b3RhbHF1ZXVlZCsrOworCXR4cS0+YXhxX2xpbmtidWYgPSBsaXN0X2VudHJ5KHR4cS0+YXhxX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCisJRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwKKwkJInFudW06ICVkLCB0eHEgZGVwdGg6ICVkXG4iLCB0eHEtPmF4cV9xbnVtLCB0eHEtPmF4cV9kZXB0aCk7CisKKwlpZiAodHhxLT5heHFfbGluayA9PSBOVUxMKSB7CisJCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtLCBiZi0+YmZfZGFkZHIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCisJCQkiVFhEUFsldV0gPSAlbGx4ICglcClcbiIsCisJCQl0eHEtPmF4cV9xbnVtLCBpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7CisJfSBlbHNlIHsKKwkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImxpbmtbJXVdICglcCk9JWxseCAoJXApXG4iLAorCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKKwkJCWl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKKwl9CisJdHhxLT5heHFfbGluayA9ICYoYmYtPmJmX2xhc3RiZi0+YmZfZGVzYy0+ZHNfbGluayk7CisJYXRoOWtfaHdfdHhzdGFydChhaCwgdHhxLT5heHFfcW51bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX3R4X2dldF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idWYgKmJmID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmc2MtPnR4LnR4YnVmKSkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWxpc3RfZGVsKCZiZi0+bGlzdCk7CisKKwlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwlyZXR1cm4gYmY7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2FtcGR1KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQsCisJCQkgICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfYnVmICpiZjsKKworCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0FNUERVOworCisJLyoKKwkgKiBEbyBub3QgcXVldWUgdG8gaC93IHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorCSAqIC0gdGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzIGluIHNvZnR3YXJlIHF1ZXVlCisJICogLSB0aGUgVElEIGlzIGN1cnJlbnRseSBwYXVzZWQgZm9yIEFEREJBL0JBUiByZXF1ZXN0CisJICogLSBzZXFubyBpcyBub3Qgd2l0aGluIGJsb2NrLWFjayB3aW5kb3cKKwkgKiAtIGgvdyBxdWV1ZSBkZXB0aCBleGNlZWRzIGxvdyB3YXRlciBtYXJrCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSB8fCB0aWQtPnBhdXNlZCB8fAorCSAgICAhQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSB8fAorCSAgICB0eGN0bC0+dHhxLT5heHFfZGVwdGggPj0gQVRIX0FHR1JfTUlOX1FERVBUSCkgeworCQkvKgorCQkgKiBBZGQgdGhpcyBmcmFtZSB0byBzb2Z0d2FyZSBxdWV1ZSBmb3Igc2NoZWR1bGluZyBsYXRlcgorCQkgKiBmb3IgYWdncmVnYXRpb24uCisJCSAqLworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZ0aWQtPmJ1Zl9xKTsKKwkJYXRoX3R4X3F1ZXVlX3RpZCh0eGN0bC0+dHhxLCB0aWQpOworCQlyZXR1cm47CisJfQorCisJLyogQWRkIHN1Yi1mcmFtZSB0byBCQVcgKi8KKwlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKKworCS8qIFF1ZXVlIHRvIGgvdyB3aXRob3V0IGFnZ3JlZ2F0aW9uICovCisJYmYtPmJmX25mcmFtZXMgPSAxOworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgYmZfaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQU1QRFU7CisKKwkvKiB1cGRhdGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyIGZvciBzdWJzZXF1ZW50IEFEREJBIHJlcXVlc3QgKi8KKwlJTkNSKHRpZC0+c2VxX3N0YXJ0LCBJRUVFODAyMTFfU0VRX01BWCk7CisKKwliZi0+YmZfbmZyYW1lcyA9IDE7CisJYmYtPmJmX2xhc3RiZiA9IGJmOworCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKKwlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsIGJmX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCisJYmYtPmJmX2xhc3RiZiA9IGJmOworCWJmLT5iZl9uZnJhbWVzID0gMTsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKK30KKworc3RhdGljIGVudW0gYXRoOWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwllbnVtIGF0aDlrX3BrdF90eXBlIGh0eXBlOworCV9fbGUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9CRUFDT047CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1A7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0FUSU07CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFNQT0xMOworCWVsc2UKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9OT1JNQUw7CisKKwlyZXR1cm4gaHR5cGU7Cit9CisKK3N0YXRpYyBib29sIGlzX3BhZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJX19sZTE2IGZjOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgeworCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSB8fAorCQkgICAgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KKwkJICAgIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKKwkJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1dFUCkKKwkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9XRVA7CisJCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfVEtJUDsKKwkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfQ0NNUCkKKwkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9BRVM7CisJfQorCisJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0NMRUFSOworfQorCitzdGF0aWMgdm9pZCBhc3NpZ25fYWdncl90aWRfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCV9fbGUxNiBmYzsKKwl1OCAqcWM7CisKKwlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQorCQlyZXR1cm47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwkJYmYtPmJmX3RpZG5vID0gcWNbMF0gJiAweGY7CisJfQorCisJLyoKKwkgKiBGb3IgSFQgY2FwYWJsZSBzdGF0aW9ucywgd2Ugc2F2ZSB0aWRubyBmb3IgbGF0ZXIgdXNlLgorCSAqIFdlIGFsc28gb3ZlcnJpZGUgc2Vxbm8gc2V0IGJ5IHVwcGVyIGxheWVyIHdpdGggdGhlIG9uZQorCSAqIGluIHR4IGFnZ3JlZ2F0aW9uIHN0YXRlLgorCSAqCisJICogSWYgZnJhZ21lbnRhdGlvbiBpcyBvbiwgdGhlIHNlcXVlbmNlIG51bWJlciBpcworCSAqIG5vdCBvdmVycmlkZGVuLCBzaW5jZSBpdCBoYXMgYmVlbgorCSAqIGluY3JlbWVudGVkIGJ5IHRoZSBmcmFnbWVudGF0aW9uIHJvdXRpbmUuCisJICoKKwkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGV4Y2VlZHMKKwkgKiBJRUVFODAyMTEgbWF4LgorCSAqLworCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKwloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYodGlkLT5zZXFfbmV4dCA8PAorCQkJSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOworCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7CisJSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWludCBmbGFncyA9IDA7CisKKwlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLworCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKKwkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX05PQUNLOworCisJcmV0dXJuIGZsYWdzOworfQorCisvKgorICogcml4IC0gcmF0ZSBpbmRleAorICogcGt0bGVuIC0gdG90YWwgYnl0ZXMgKGRlbGltcyArIGRhdGEgKyBmY3MgKyBwYWRzICsgcGFkIGRlbGltcykKKyAqIHdpZHRoICAtIDAgZm9yIDIwIE1IeiwgMSBmb3IgNDAgTUh6CisgKiBoYWxmX2dpIC0gdG8gdXNlIDR1cyB2L3MgMy42IHVzIGZvciBzeW1ib2wgdGltZQorICovCitzdGF0aWMgdTMyIGF0aF9wa3RfZHVyYXRpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IHJpeCwgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgIGludCB3aWR0aCwgaW50IGhhbGZfZ2ksIGJvb2wgc2hvcnRQcmVhbWJsZSkKK3sKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CisJdTMyIG5iaXRzLCBuc3ltYml0cywgZHVyYXRpb24sIG5zeW1ib2xzOworCXU4IHJjOworCWludCBzdHJlYW1zLCBwa3RsZW47CisKKwlwa3RsZW4gPSBiZl9pc2FnZ3IoYmYpID8gYmYtPmJmX2FsIDogYmYtPmJmX2ZybWxlbjsKKwlyYyA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5yYXRlY29kZTsKKworCS8qIGZvciBsZWdhY3kgcmF0ZXMsIHVzZSBvbGQgZnVuY3Rpb24gdG8gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKi8KKwlpZiAoIUlTX0hUX1JBVEUocmMpKQorCQlyZXR1cm4gYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsIHBrdGxlbiwKKwkJCQkJICAgICAgcml4LCBzaG9ydFByZWFtYmxlKTsKKworCS8qIGZpbmQgbnVtYmVyIG9mIHN5bWJvbHM6IFBMQ1AgKyBkYXRhICovCisJbmJpdHMgPSAocGt0bGVuIDw8IDMpICsgT0ZETV9QTENQX0JJVFM7CisJbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07CisJbnN5bWJvbHMgPSAobmJpdHMgKyBuc3ltYml0cyAtIDEpIC8gbnN5bWJpdHM7CisKKwlpZiAoIWhhbGZfZ2kpCisJCWR1cmF0aW9uID0gU1lNQk9MX1RJTUUobnN5bWJvbHMpOworCWVsc2UKKwkJZHVyYXRpb24gPSBTWU1CT0xfVElNRV9IQUxGR0kobnN5bWJvbHMpOworCisJLyogYWRkdXAgZHVyYXRpb24gZm9yIGxlZ2FjeS9odCB0cmFpbmluZyBhbmQgc2lnbmFsIGZpZWxkcyAqLworCXN0cmVhbXMgPSBIVF9SQ18yX1NUUkVBTVMocmMpOworCWR1cmF0aW9uICs9IExfU1RGICsgTF9MVEYgKyBMX1NJRyArIEhUX1NJRyArIEhUX1NURiArIEhUX0xURihzdHJlYW1zKTsKKworCXJldHVybiBkdXJhdGlvbjsKK30KKworc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CisJc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbNF07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBpLCBmbGFncyA9IDA7CisJdTggcml4ID0gMCwgY3RzcmF0ZSA9IDA7CisJYm9vbCBpc19wc3BvbGw7CisKKwltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKKworCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OworCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpc19wc3BvbGwgPSBpZWVlODAyMTFfaXNfcHNwb2xsKGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwkvKgorCSAqIFdlIGNoZWNrIGlmIFNob3J0IFByZWFtYmxlIGlzIG5lZWRlZCBmb3IgdGhlIENUUyByYXRlIGJ5CisJICogY2hlY2tpbmcgdGhlIEJTUydzIGdsb2JhbCBmbGFnLgorCSAqIEJ1dCBmb3IgdGhlIHJhdGUgc2VyaWVzLCBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFIGlzIHVzZWQuCisJICovCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1BSRUFNQkxFX1NIT1JUKQorCQljdHNyYXRlID0gcnQtPmluZm9bdHhfaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XS5yYXRlY29kZSB8CisJCQlydC0+aW5mb1t0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHhdLnNob3J0X3ByZWFtYmxlOworCWVsc2UKKwkJY3RzcmF0ZSA9IHJ0LT5pbmZvW3R4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeF0ucmF0ZWNvZGU7CisKKwkvKgorCSAqIEFUSDlLX1RYREVTQ19SVFNFTkEgYW5kIEFUSDlLX1RYREVTQ19DVFNFTkEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKwkgKiBDaGVjayB0aGUgZmlyc3QgcmF0ZSBpbiB0aGUgc2VyaWVzIHRvIGRlY2lkZSB3aGV0aGVyIFJUUy9DVFMKKwkgKiBvciBDVFMtdG8tc2VsZiBoYXMgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQorCQlmbGFncyA9IEFUSDlLX1RYREVTQ19DVFNFTkE7CisJZWxzZSBpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKKworCS8qIEZJWE1FOiBIYW5kbGUgYWdncmVnYXRpb24gcHJvdGVjdGlvbiAqLworCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYKKwkgICAgKCFiZl9pc2FnZ3IoYmYpIHx8IChiZl9pc2FnZ3IoYmYpICYmIGJmLT5iZl9hbCA8IDgxOTIpKSkgeworCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7CisJfQorCisJLyogRm9yIEFSNTQxNiAtIFJUUyBjYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBmcmFtZSBsYXJnZXIgdGhhbiA4SyAqLworCWlmIChiZl9pc2FnZ3IoYmYpICYmIChiZi0+YmZfYWwgPiBzYy0+c2NfYWgtPmNhcHMucnRzX2FnZ3JfbGltaXQpKQorCQlmbGFncyAmPSB+KEFUSDlLX1RYREVTQ19SVFNFTkEpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoIXJhdGVzW2ldLmNvdW50IHx8IChyYXRlc1tpXS5pZHggPCAwKSkKKwkJCWNvbnRpbnVlOworCisJCXJpeCA9IHJhdGVzW2ldLmlkeDsKKwkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7CisJCXNlcmllc1tpXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CisKKwkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKKwkJCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZSB8CisJCQkJcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJZWxzZQorCQkJc2VyaWVzW2ldLlJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTOworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQorCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTXzIwNDA7CisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19IQUxGR0k7CisKKwkJc2VyaWVzW2ldLlBrdER1cmF0aW9uID0gYXRoX3BrdF9kdXJhdGlvbihzYywgcml4LCBiZiwKKwkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAhPSAwLAorCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSksCisJCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkpOworCX0KKworCS8qIHNldCBkdXJfdXBkYXRlX2VuIGZvciBsLXNpZyBjb21wdXRhdGlvbiBleGNlcHQgZm9yIFBTLVBvbGwgZnJhbWVzICovCisJYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLAorCQkJCSAgICAgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYywKKwkJCQkgICAgICFpc19wc3BvbGwsIGN0c3JhdGUsCisJCQkJICAgICAwLCBzZXJpZXMsIDQsIGZsYWdzKTsKKworCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCisJCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIDgxOTIpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKKwlpbnQgaGRybGVuOworCV9fbGUxNiBmYzsKKworCXR4X2luZm9fcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCp0eF9pbmZvX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXR4X2luZm9fcHJpdikpCisJCXJldHVybiAtRU5PTUVNOworCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSB0eF9pbmZvX3ByaXY7CisJdHhfaW5mb19wcml2LT5hcGh5ID0gYXBoeTsKKwl0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPSB0eGN0bC0+ZnJhbWVfdHlwZTsKKwloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJQVRIX1RYQlVGX1JFU0VUKGJmKTsKKworCWJmLT5iZl9mcm1sZW4gPSBza2ItPmxlbiArIEZDU19MRU4gLSAoaGRybGVuICYgMyk7CisKKwlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSAmJiAhaXNfcGFlKHNrYikpCisJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9IVDsKKworCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOworCisJYmYtPmJmX2tleXR5cGUgPSBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKKwlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKKwkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKwkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CisJfSBlbHNlIHsKKwkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOworCX0KKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQorCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7CisKKwliZi0+YmZfbXBkdSA9IHNrYjsKKworCWJmLT5iZl9kbWFjb250ZXh0ID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0KSkpIHsKKwkJYmYtPmJmX21wZHUgPSBOVUxMOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFRYXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiB0eCBwb3dlciAqLworc3RhdGljIHZvaWQgYXRoX3R4X3N0YXJ0X2RtYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSAgSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCXN0cnVjdCBhdGhfZGVzYyAqZHM7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJaW50IGZybV90eXBlOworCV9fbGUxNiBmYzsKKworCWZybV90eXBlID0gZ2V0X2h3X3BhY2tldF90eXBlKHNrYik7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKworCWRzID0gYmYtPmJmX2Rlc2M7CisJZHMtPmRzX2xpbmsgPSAwOworCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOworCisJYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhhaCwgZHMsIGJmLT5iZl9mcm1sZW4sIGZybV90eXBlLCBNQVhfUkFURV9QT1dFUiwKKwkJCSAgICAgICBiZi0+YmZfa2V5aXgsIGJmLT5iZl9rZXl0eXBlLCBiZi0+YmZfZmxhZ3MpOworCisJYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCisJCQkgICAgc2tiLT5sZW4sCS8qIHNlZ21lbnQgbGVuZ3RoICovCisJCQkgICAgdHJ1ZSwJLyogZmlyc3Qgc2VnbWVudCAqLworCQkJICAgIHRydWUsCS8qIGxhc3Qgc2VnbWVudCAqLworCQkJICAgIGRzKTsJLyogZmlyc3QgZGVzY3JpcHRvciAqLworCisJc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7CisKKwlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKKwkgICAgdHhfaW5mby0+Y29udHJvbC5zdGEpIHsKKwkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7CisKKwkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKKwkJCWdvdG8gdHhfZG9uZTsKKwkJfQorCisJCWlmIChhdGhfYWdncl9xdWVyeShzYywgYW4sIGJmLT5iZl90aWRubykpIHsKKwkJCS8qCisJCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQorCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgorCQkJICovCisJCQlhdGhfdHhfc2VuZF9hbXBkdShzYywgdGlkLCAmYmZfaGVhZCwgdHhjdGwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFNlbmQgdGhpcyBmcmFtZSBhcyByZWd1bGFyIHdoZW4gQUREQkEKKwkJCSAqIGV4Y2hhbmdlIGlzIG5laXRoZXIgY29tcGxldGUgbm9yIHBlbmRpbmcuCisJCQkgKi8KKwkJCWF0aF90eF9zZW5kX2h0X25vcm1hbChzYywgdHhjdGwtPnR4cSwKKwkJCQkJICAgICAgdGlkLCAmYmZfaGVhZCk7CisJCX0KKwl9IGVsc2UgeworCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKKwl9CisKK3R4X2RvbmU6CisJc3Bpbl91bmxvY2tfYmgoJnR4Y3RsLT50eHEtPmF4cV9sb2NrKTsKK30KKworLyogVXBvbiBmYWlsdXJlIGNhbGxlciBzaG91bGQgZnJlZSBza2IgKi8KK2ludCBhdGhfdHhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlpbnQgcjsKKworCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOworCWlmICghYmYpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggYnVmZmVycyBhcmUgZnVsbFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihodywgYmYsIHNrYiwgdHhjdGwpOworCWlmICh1bmxpa2VseShyKSkgeworCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKKworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOworCisJCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCisJCSAqIGd1YXJhbnRlZSB0aGlzIHdpbGwgaGFwcGVuIGJ5IGtub3dpbmcgYmVmb3JlaGFuZCB0aGF0CisJCSAqIHdlIHdpbGwgYXQgbGVhc3QgaGF2ZSB0byBydW4gVFggY29tcGxldGlvbm9uIG9uZSBidWZmZXIKKwkJICogb24gdGhlIHF1ZXVlICovCisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWlmIChzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA+IDEpIHsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKKwkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisJCQl0eHEtPnN0b3BwZWQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKworCQlyZXR1cm4gcjsKKwl9CisKKwlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IGhkcmxlbiwgcGFkc2l6ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOwpAQCAtMjU0Miw3ICsxNzM1LDcgQEAKIAogCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgInRyYW5zbWl0dGluZyBDQUJRIHBhY2tldCwgc2tiOiAlcFxuIiwgc2tiKTsKIAotCWlmIChhdGhfdHhfc3RhcnQoc2MsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiQ0FCUSBUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjU1MSwzICsxNzQ0LDQzNSBAQAogZXhpdDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQorCisvKioqKioqKioqKioqKioqKiovCisvKiBUWCBDb21wbGV0aW9uICovCisvKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBpbnQgdHhfZmxhZ3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWludCBoZHJsZW4sIHBhZHNpemU7CisJaW50IGZyYW1lX3R5cGUgPSBBVEg5S19OT1RfSU5URVJOQUw7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBjb21wbGV0ZTogc2tiOiAlcFxuIiwgc2tiKTsKKworCWlmICh0eF9pbmZvX3ByaXYpIHsKKwkJaHcgPSB0eF9pbmZvX3ByaXYtPmFwaHktPmh3OworCQlmcmFtZV90eXBlID0gdHhfaW5mb19wcml2LT5mcmFtZV90eXBlOworCX0KKworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLIHx8CisJICAgIHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQpIHsKKwkJa2ZyZWUodHhfaW5mb19wcml2KTsKKwkJdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IE5VTEw7CisJfQorCisJaWYgKHR4X2ZsYWdzICYgQVRIX1RYX0JBUikKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFVfTk9fQkFDSzsKKworCWlmICghKHR4X2ZsYWdzICYgKEFUSF9UWF9FUlJPUiB8IEFUSF9UWF9YUkVUUlkpKSkgeworCQkvKiBGcmFtZSB3YXMgQUNLZWQgKi8KKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCX0KKworCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJcGFkc2l6ZSA9IGhkcmxlbiAmIDM7CisJaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7CisJCS8qCisJCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bworCQkgKiBtYWM4MDIxMS4KKwkJICovCisJCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHBhZHNpemUpOworCX0KKworCWlmIChmcmFtZV90eXBlID09IEFUSDlLX05PVF9JTlRFUk5BTCkKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwllbHNlCisJCWF0aDlrX3R4X3N0YXR1cyhodywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCisJCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0eF9mbGFncyA9IDA7CisKKworCWlmIChzZW5kYmFyKQorCQl0eF9mbGFncyA9IEFUSF9UWF9CQVI7CisKKwlpZiAoIXR4b2spIHsKKwkJdHhfZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOworCisJCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKKwkJCXR4X2ZsYWdzIHw9IEFUSF9UWF9YUkVUUlk7CisJfQorCisJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWF0aF90eF9jb21wbGV0ZShzYywgc2tiLCB0eF9mbGFncyk7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOworCXUxNiBzZXFfc3QgPSAwOworCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07CisJaW50IGJhX2luZGV4OworCWludCBuYmFkID0gMDsKKwlpbnQgaXNhZ2dyID0gMDsKKworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCisJCXJldHVybiAwOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwlpZiAoaXNhZ2dyKSB7CisJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJfQorCisJd2hpbGUgKGJmKSB7CisJCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKKwkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKKwkJCW5iYWQrKzsKKworCQliZiA9IGJmLT5iZl9uZXh0OworCX0KKworCXJldHVybiBuYmFkOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcmNfc3RhdHVzKHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCSAgICAgaW50IG5iYWQsIGludCB0eG9rLCBib29sIHVwZGF0ZV9yYykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB0eF9pbmZvX3ByaXYtPmFwaHktPmh3OworCXU4IGksIHR4X3JhdGVpbmRleDsKKworCWlmICh0eG9rKQorCQl0eF9pbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IGRzLT5kc190eHN0YXQudHNfcnNzaTsKKworCXR4X3JhdGVpbmRleCA9IGRzLT5kc190eHN0YXQudHNfcmF0ZWluZGV4OworCVdBUk5fT04odHhfcmF0ZWluZGV4ID49IGh3LT5tYXhfcmF0ZXMpOworCisJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSB1cGRhdGVfcmM7CisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7CisKKwlpZiAoKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkgPT0gMCAmJgorCSAgICAoYmYtPmJmX2ZsYWdzICYgQVRIOUtfVFhERVNDX05PQUNLKSA9PSAwICYmIHVwZGF0ZV9yYykgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJbWVtY3B5KCZ0eF9pbmZvX3ByaXYtPnR4LCAmZHMtPmRzX3R4c3RhdCwKKwkJCSAgICAgICBzaXplb2YodHhfaW5mb19wcml2LT50eCkpOworCQkJdHhfaW5mb19wcml2LT5uX2ZyYW1lcyA9IGJmLT5iZl9uZnJhbWVzOworCQkJdHhfaW5mb19wcml2LT5uX2JhZF9mcmFtZXMgPSBuYmFkOworCQl9CisJfQorCisJZm9yIChpID0gdHhfcmF0ZWluZGV4ICsgMTsgaSA8IGh3LT5tYXhfcmF0ZXM7IGkrKykKKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldLmNvdW50ID0gMDsKKworCXR4X2luZm8tPnN0YXR1cy5yYXRlc1t0eF9yYXRlaW5kZXhdLmNvdW50ID0gYmYtPmJmX3JldHJpZXMgKyAxOworfQorCitzdGF0aWMgdm9pZCBhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKK3sKKwlpbnQgcW51bTsKKworCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJaWYgKHR4cS0+c3RvcHBlZCAmJgorCSAgICBzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA8PSAoQVRIX1RYQlVGIC0gMjApKSB7CisJCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfcW51bSwgc2MpOworCQlpZiAocW51bSAhPSAtMSkgeworCQkJaWVlZTgwMjExX3dha2VfcXVldWUoc2MtPmh3LCBxbnVtKTsKKwkJCXR4cS0+c3RvcHBlZCA9IDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcHJvY2Vzc3Eoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmLCAqYmZfaGVsZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCXN0cnVjdCBhdGhfZGVzYyAqZHM7CisJaW50IHR4b2s7CisJaW50IHN0YXR1czsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsICJ0eCBxdWV1ZSAlZCAoJXgpLCBsaW5rICVwXG4iLAorCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pLAorCQl0eHEtPmF4cV9saW5rKTsKKworCWZvciAoOzspIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX3EpKSB7CisJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKKwkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJYnJlYWs7CisJCX0KKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGEgQkggZ2V0cyBzY2hlZHVsZWQKKwkJICogYWZ0ZXIgc3cgd3JpdGVzIFR4RSBhbmQgYmVmb3JlIGh3IHJlLWxvYWQgdGhlIGxhc3QKKwkJICogZGVzY3JpcHRvciB0byBnZXQgdGhlIG5ld2x5IGNoYWluZWQgb25lLgorCQkgKiBTb2Z0d2FyZSBtdXN0IGtlZXAgdGhlIGxhc3QgRE9ORSBkZXNjcmlwdG9yIGFzIGEKKwkJICogaG9sZGluZyBkZXNjcmlwdG9yIC0gc29mdHdhcmUgZG9lcyBzbyBieSBtYXJraW5nCisJCSAqIGl0IHdpdGggdGhlIFNUQUxFIGZsYWcuCisJCSAqLworCQliZl9oZWxkID0gTlVMTDsKKwkJaWYgKGJmLT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7CisJCQliZl9oZWxkID0gYmY7CisJCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKKwkJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKKwkJCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKKwkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBob2xkaW5nIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3QKKwkJCQkgKiBkZXNjcmlwdG9yIGluIHF1ZXVlLiBJdCdzIHNhZmUgdG8gcmVtb3ZlCisJCQkJICogdGhlIGxhc3QgaG9sZGluZyBkZXNjcmlwdG9yIGluIEJIIGNvbnRleHQuCisJCQkJICovCisJCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCisJCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCQl9CisJCX0KKworCQlsYXN0YmYgPSBiZi0+YmZfbGFzdGJmOworCQlkcyA9IGxhc3RiZi0+YmZfZGVzYzsKKworCQlzdGF0dXMgPSBhdGg5a19od190eHByb2NkZXNjKGFoLCBkcyk7CisJCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmYtPmJmX2Rlc2MgPT0gdHhxLT5heHFfbGFzdGRzV2l0aENUUykKKwkJCXR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMgPSBOVUxMOworCQlpZiAoZHMgPT0gdHhxLT5heHFfZ2F0aW5nZHMpCisJCQl0eHEtPmF4cV9nYXRpbmdkcyA9IE5VTEw7CisKKwkJLyoKKwkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGUgc2FtZSB0cmFuc21pdCB1bml0IGZyb20gdHhxLAorCQkgKiBob3dldmVyIGxlYXZlIHRoZSBsYXN0IGRlc2NyaXB0b3IgYmFjayBhcyB0aGUgaG9sZGluZworCQkgKiBkZXNjcmlwdG9yIGZvciBody4KKwkJICovCisJCWxhc3RiZi0+YmZfc3RhdHVzIHw9IEFUSF9CVUZTVEFUVVNfU1RBTEU7CisJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZsYXN0YmYtPmxpc3QpKQorCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCisJCQkJJnR4cS0+YXhxX3EsIGxhc3RiZi0+bGlzdC5wcmV2KTsKKworCQl0eHEtPmF4cV9kZXB0aC0tOworCQlpZiAoYmZfaXNhZ2dyKGJmKSkKKwkJCXR4cS0+YXhxX2FnZ3JfZGVwdGgtLTsKKworCQl0eG9rID0gKGRzLT5kc190eHN0YXQudHNfc3RhdHVzID09IDApOworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJaWYgKGJmX2hlbGQpIHsKKwkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJCX0KKworCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7CisJCQkvKgorCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KKwkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCisJCQkgKi8KKwkJCWJmLT5iZl9yZXRyaWVzID0gZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnk7CisJCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCisJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKKwkJCWF0aF90eF9yY19zdGF0dXMoYmYsIGRzLCAwLCB0eG9rLCB0cnVlKTsKKwkJfQorCisJCWlmIChiZl9pc2FtcGR1KGJmKSkKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgdHhvayk7CisJCWVsc2UKKwkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgdHhvaywgMCk7CisKKwkJYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc2MsIHR4cSk7CisKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikKKwkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9Cit9CisKKwordm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwl1MzIgcWN1bWFzayA9ICgoMSA8PCBBVEg5S19OVU1fVFhfUVVFVUVTKSAtIDEpOworCisJYXRoOWtfaHdfZ2V0dHhpbnRydHhxcyhzYy0+c2NfYWgsICZxY3VtYXNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpICYmIChxY3VtYXNrICYgKDEgPDwgaSkpKQorCQkJYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKiovCisvKiBJbml0LCBDbGVhbnVwICovCisvKioqKioqKioqKioqKioqKiovCisKK2ludCBhdGhfdHhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKQoreworCWludCBlcnJvciA9IDA7CisKKwlkbyB7CisJCXNwaW5fbG9ja19pbml0KCZzYy0+dHgudHhidWZsb2NrKTsKKworCQllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmLAorCQkJInR4IiwgbmJ1ZnMsIDEpOworCQlpZiAoZXJyb3IgIT0gMCkgeworCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2NyaXB0b3JzOiAlZFxuIiwKKwkJCQllcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYsCisJCQkJCSAgImJlYWNvbiIsIEFUSF9CQ0JVRiwgMSk7CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwKKwkJCQllcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJfSB3aGlsZSAoMCk7CisKKwlpZiAoZXJyb3IgIT0gMCkKKwkJYXRoX3R4X2NsZWFudXAoc2MpOworCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgYXRoX3R4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaWYgKHNjLT5iZWFjb24uYmRtYS5kZF9kZXNjX2xlbiAhPSAwKQorCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmKTsKKworCWlmIChzYy0+dHgudHhkbWEuZGRfZGVzY19sZW4gIT0gMCkKKwkJYXRoX2Rlc2NkbWFfY2xlYW51cChzYywgJnNjLT50eC50eGRtYSwgJnNjLT50eC50eGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGhfdHhfbm9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKKwlpbnQgdGlkbm8sIGFjbm87CisKKwlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOworCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsKKwkgICAgIHRpZG5vKyssIHRpZCsrKSB7CisJCXRpZC0+YW4gICAgICAgID0gYW47CisJCXRpZC0+dGlkbm8gICAgID0gdGlkbm87CisJCXRpZC0+c2VxX3N0YXJ0ID0gdGlkLT5zZXFfbmV4dCA9IDA7CisJCXRpZC0+YmF3X3NpemUgID0gV01FX01BWF9CQTsKKwkJdGlkLT5iYXdfaGVhZCAgPSB0aWQtPmJhd190YWlsID0gMDsKKwkJdGlkLT5zY2hlZCAgICAgPSBmYWxzZTsKKwkJdGlkLT5wYXVzZWQgICAgPSBmYWxzZTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOworCQlJTklUX0xJU1RfSEVBRCgmdGlkLT5idWZfcSk7CisJCWFjbm8gPSBUSURfVE9fV01FX0FDKHRpZG5vKTsKKwkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7CisJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJfQorCisJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOworCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgeworCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFjLT50aWRfcSk7CisKKwkJc3dpdGNoIChhY25vKSB7CisJCWNhc2UgV01FX0FDX0JFOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKKwkJCWJyZWFrOworCQljYXNlIFdNRV9BQ19CSzoKKwkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAorCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CSyk7CisJCQlicmVhazsKKwkJY2FzZSBXTUVfQUNfVkk6CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVkkpOworCQkJYnJlYWs7CisJCWNhc2UgV01FX0FDX1ZPOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX1ZPKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIGF0aF90eF9ub2RlX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJaW50IGk7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjLCAqYWNfdG1wOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLCAqdGlkX3RtcDsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKKwkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCisJCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWMsCisJCQkJCWFjX3RtcCwgJnR4cS0+YXhxX2FjcSwgbGlzdCkgeworCQkJCXRpZCA9IGxpc3RfZmlyc3RfZW50cnkoJmFjLT50aWRfcSwKKwkJCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCwgbGlzdCk7CisJCQkJaWYgKHRpZCAmJiB0aWQtPmFuICE9IGFuKQorCQkJCQljb250aW51ZTsKKwkJCQlsaXN0X2RlbCgmYWMtPmxpc3QpOworCQkJCWFjLT5zY2hlZCA9IGZhbHNlOworCisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpZCwKKwkJCQkJCXRpZF90bXAsICZhYy0+dGlkX3EsIGxpc3QpIHsKKwkJCQkJbGlzdF9kZWwoJnRpZC0+bGlzdCk7CisJCQkJCXRpZC0+c2NoZWQgPSBmYWxzZTsKKwkJCQkJYXRoX3RpZF9kcmFpbihzYywgdHhxLCB0aWQpOworCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQkJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOworCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7CisJCQkJfQorCQkJfQorCisJCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCA0MjIzNjcyLi44NTdkODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTIsOCArMiw4IEBACiAKICAgICAgRHJpdmVyIGZvciBBdG1lbCBhdDc2YzUwMiBhdDc2YzUwNCBhbmQgYXQ3NmM1MDYgd2lyZWxlc3MgY2FyZHMuCiAKLSAgICAgICAgQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KLSAgICAgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBTaW1vbiBLZWxsZXkuCisJQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KKwlDb3B5cmlnaHQgMjAwMy0yMDA0IFNpbW9uIEtlbGxleS4KIAogICAgIFRoaXMgY29kZSB3YXMgZGV2ZWxvcGVkIGZyb20gdmVyc2lvbiAyLjEuMSBvZiB0aGUgQXRtZWwgZHJpdmVycywKICAgICByZWxlYXNlZCBieSBBdG1lbCBjb3JwLiB1bmRlciB0aGUgR1BMIGluIERlY2VtYmVyIDIwMDIuIEl0IGFsc28KQEAgLTg5LDE1ICs4OSwxNSBAQAogCWNvbnN0IGNoYXIgKmZ3X2ZpbGU7CiAJY29uc3QgY2hhciAqZndfZmlsZV9leHQ7CiB9IGZ3X3RhYmxlW10gPSB7Ci0JeyBBVE1FTF9GV19UWVBFXzUwMiwgICAgICAiYXRtZWxfYXQ3NmM1MDIiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMkQsICAgICAiYXRtZWxfYXQ3NmM1MDJkIiwgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMkUsICAgICAiYXRtZWxfYXQ3NmM1MDJlIiwgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiYXRtZWxfYXQ3NmM1MDJfM2NvbSIsICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNCwgICAgICAiYXRtZWxfYXQ3NmM1MDQiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNF8yOTU4LCAiYXRtZWxfYXQ3NmM1MDRfMjk1OCIsICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwiYXRtZWxfYXQ3NmM1MDRhXzI5NTgiLCJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNiwgICAgICAiYXRtZWxfYXQ3NmM1MDYiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFX05PTkUsICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICBOVUxMIH0KKwl7IEFUTUVMX0ZXX1RZUEVfNTAyLAkJImF0bWVsX2F0NzZjNTAyIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTAyRCwJCSJhdG1lbF9hdDc2YzUwMmQiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDJFLAkJImF0bWVsX2F0NzZjNTAyZSIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLAkiYXRtZWxfYXQ3NmM1MDJfM2NvbSIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNCwJCSJhdG1lbF9hdDc2YzUwNCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNF8yOTU4LAkiYXRtZWxfYXQ3NmM1MDRfMjk1OCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwJImF0bWVsX2F0NzZjNTA0YV8yOTU4IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA2LAkJImF0bWVsX2F0NzZjNTA2IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfTk9ORSwJCU5VTEwsCQkJTlVMTCB9CiB9OwogCiAjZGVmaW5lIE1BWF9TU0lEX0xFTkdUSCAzMgpAQCAtMTA2LDYwICsxMDYsNjAgQEAKICNkZWZpbmUgTUFYX0JTU19FTlRSSUVTCTY0CiAKIC8qIHJlZ2lzdGVycyAqLwotI2RlZmluZSBHQ1IgIDB4MDAgICAgLy8gICAgICAoU0lSMCkgIEdlbmVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotI2RlZmluZSBCU1IgIDB4MDIgICAgLy8gICAgICAoU0lSMSkgIEJhbmsgU3dpdGNoaW5nIFNlbGVjdCBSZWdpc3RlcgorI2RlZmluZSBHQ1IgIDB4MDAgICAgLyogKFNJUjApICBHZW5lcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQlNSICAweDAyICAgIC8qIChTSVIxKSAgQmFuayBTd2l0Y2hpbmcgU2VsZWN0IFJlZ2lzdGVyICovCiAjZGVmaW5lIEFSICAgMHgwNAogI2RlZmluZSBEUiAgIDB4MDgKLSNkZWZpbmUgTVIxICAweDEyICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDEKLSNkZWZpbmUgTVIyICAweDE0ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDIKLSNkZWZpbmUgTVIzICAweDE2ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDMKLSNkZWZpbmUgTVI0ICAweDE4ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDQKKyNkZWZpbmUgTVIxICAweDEyICAgIC8qIE1pcnJvciBSZWdpc3RlciAxICovCisjZGVmaW5lIE1SMiAgMHgxNCAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBNUjMgIDB4MTYgICAgLyogTWlycm9yIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgTVI0ICAweDE4ICAgIC8qIE1pcnJvciBSZWdpc3RlciA0ICovCiAKICNkZWZpbmUgR1BSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjCiAjZGVmaW5lIEdQUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZQogI2RlZmluZSBHUFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKLS8vCi0vLyBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCi0vLwotI2RlZmluZSBHQ1JfUkVNQVAgICAgIDB4MDQwMCAgICAgICAgICAvLyBSZW1hcCBpbnRlcm5hbCBTUkFNIHRvIDAKLSNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLy8gQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KQotI2RlZmluZSBHQ1JfQ09SRVMgICAgIDB4MDA2MCAgICAgICAgICAvLyBDb3JlIFJlc2V0IChBUk0gYW5kIFBBSSBhcmUgcmVzZXQpCi0jZGVmaW5lIEdDUl9FTklOVCAgICAgMHgwMDAyICAgICAgICAgIC8vIEVuYWJsZSBJbnRlcnJ1cHRzCi0jZGVmaW5lIEdDUl9BQ0tJTlQgICAgMHgwMDA4ICAgICAgICAgIC8vIEFja25vd2xlZGdlIEludGVycnVwdHMKKy8qCisgKiBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgR0NSX1JFTUFQICAgICAweDA0MDAgICAgICAgICAgLyogUmVtYXAgaW50ZXJuYWwgU1JBTSB0byAwICovCisjZGVmaW5lIEdDUl9TV1JFUyAgICAgMHgwMDgwICAgICAgICAgIC8qIEJJVSByZXNldCAoQVJNIGFuZCBQQUkgYXJlIE5PVCByZXNldCkgKi8KKyNkZWZpbmUgR0NSX0NPUkVTICAgICAweDAwNjAgICAgICAgICAgLyogQ29yZSBSZXNldCAoQVJNIGFuZCBQQUkgYXJlIHJlc2V0KSAqLworI2RlZmluZSBHQ1JfRU5JTlQgICAgIDB4MDAwMiAgICAgICAgICAvKiBFbmFibGUgSW50ZXJydXB0cyAqLworI2RlZmluZSBHQ1JfQUNLSU5UICAgIDB4MDAwOCAgICAgICAgICAvKiBBY2tub3dsZWRnZSBJbnRlcnJ1cHRzICovCiAKLSNkZWZpbmUgQlNTX1NSQU0gICAgICAweDAyMDAgICAgICAgICAgLy8gQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBTUkFNCi0jZGVmaW5lIEJTU19JUkFNICAgICAgMHgwMTAwICAgICAgICAgIC8vIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gSVJBTQotLy8KLS8vIENvbnN0YW50cyBmb3IgdGhlIE1SIHJlZ2lzdGVycy4KLS8vCi0jZGVmaW5lIE1BQ19JTklUX0NPTVBMRVRFICAgICAgIDB4MDAwMSAgICAgICAgLy8gTUFDIGluaXQgaGFzIGJlZW4gY29tcGxldGVkCi0jZGVmaW5lIE1BQ19CT09UX0NPTVBMRVRFICAgICAgIDB4MDAxMCAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCi0jZGVmaW5lIE1BQ19JTklUX09LICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCisjZGVmaW5lIEJTU19TUkFNICAgICAgMHgwMjAwICAgICAgICAgIC8qIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gU1JBTSAqLworI2RlZmluZSBCU1NfSVJBTSAgICAgIDB4MDEwMCAgICAgICAgICAvKiBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IElSQU0gKi8KKy8qCisgKkNvbnN0YW50cyBmb3IgdGhlIE1SIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNQUNfSU5JVF9DT01QTEVURSAgICAgICAweDAwMDEgICAgICAgIC8qIE1BQyBpbml0IGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSBNQUNfQk9PVF9DT01QTEVURSAgICAgICAweDAwMTAgICAgICAgIC8qIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSBNQUNfSU5JVF9PSyAgICAgICAgICAgICAweDAwMDIgICAgICAgIC8qIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZCAqLwogCiAjZGVmaW5lIE1JQl9NQVhfREFUQV9CWVRFUyAgICAyMTIKICNkZWZpbmUgTUlCX0hFQURFUl9TSVpFICAgICAgIDQgICAgLyogZmlyc3QgZm91ciBmaWVsZHMgKi8KIAogc3RydWN0IGdldF9zZXRfbWliIHsKLSAgICAgICAgdTggdHlwZTsKLSAgICAgICAgdTggc2l6ZTsKLSAgICAgICAgdTggaW5kZXg7Ci0gICAgICAgIHU4IHJlc2VydmVkOwotICAgICAgICB1OCBkYXRhW01JQl9NQVhfREFUQV9CWVRFU107CisJdTggdHlwZTsKKwl1OCBzaXplOworCXU4IGluZGV4OworCXU4IHJlc2VydmVkOworCXU4IGRhdGFbTUlCX01BWF9EQVRBX0JZVEVTXTsKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKLSAgICAgICAgdTMyICAgICAgICAgIE5leHQ7Ci0gICAgICAgIHUxNiAgICAgICAgICBNc2R1UG9zOwotICAgICAgICB1MTYgICAgICAgICAgTXNkdVNpemU7CisJdTMyICAgICAgICAgIE5leHQ7CisJdTE2ICAgICAgICAgIE1zZHVQb3M7CisJdTE2ICAgICAgICAgIE1zZHVTaXplOwogCi0gICAgICAgIHU4ICAgICAgICAgICBTdGF0ZTsKLSAgICAgICAgdTggICAgICAgICAgIFN0YXR1czsKLSAgICAgICAgdTggICAgICAgICAgIFJhdGU7Ci0gICAgICAgIHU4ICAgICAgICAgICBSc3NpOwotICAgICAgICB1OCAgICAgICAgICAgTGlua1F1YWxpdHk7Ci0gICAgICAgIHU4ICAgICAgICAgICBQcmVhbWJsZVR5cGU7Ci0gICAgICAgIHUxNiAgICAgICAgICBEdXJhdGlvbjsKLSAgICAgICAgdTMyICAgICAgICAgIFJ4VGltZTsKKwl1OCAgICAgICAgICAgU3RhdGU7CisJdTggICAgICAgICAgIFN0YXR1czsKKwl1OCAgICAgICAgICAgUmF0ZTsKKwl1OCAgICAgICAgICAgUnNzaTsKKwl1OCAgICAgICAgICAgTGlua1F1YWxpdHk7CisJdTggICAgICAgICAgIFByZWFtYmxlVHlwZTsKKwl1MTYgICAgICAgICAgRHVyYXRpb247CisJdTMyICAgICAgICAgIFJ4VGltZTsKIH07CiAKICNkZWZpbmUgUlhfREVTQ19GTEFHX1ZBTElEICAgICAgIDB4ODAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXU4ICAgICAgICBLZXlJbmRleDsKIAl1OCAgICAgICAgQ2hpcGVyVHlwZTsKIAl1OCAgICAgICAgQ2hpcHJlTGVuZ3RoOwotICAgICAgICB1OCAgICAgICAgUmVzZXJ2ZWQxOworCXU4ICAgICAgICBSZXNlcnZlZDE7CiAKIAl1OCAgICAgICAgUmVzZXJ2ZWQ7CiAJdTggICAgICAgIFBhY2tldFR5cGU7CkBAIC0yMTIsOSArMjEyLDkgQEAKICNkZWZpbmUgVFhfREVTQ19QQUNLRVRfVFlQRV9PRkZTRVQgICAxNwogI2RlZmluZSBUWF9ERVNDX0hPU1RfTEVOR1RIX09GRlNFVCAgIDE4CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEhvc3QtTUFDIGludGVyZmFjZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoKKyAqIEhvc3QtTUFDIGludGVyZmFjZQorICovCiAKICNkZWZpbmUgVFhfU1RBVFVTX1NVQ0NFU1MgICAgICAgMHgwMAogCkBAIC0yMjYsMTQgKzIyNiwxNCBAQAogI2RlZmluZSBUWF9QQUNLRVRfVFlQRV9EQVRBICAgICAweDAxCiAjZGVmaW5lIFRYX1BBQ0tFVF9UWVBFX01HTVQgICAgIDB4MDIKIAotI2RlZmluZSBJU1JfRU1QVFkgICAgICAgICAgICAgICAweDAwICAgICAgICAvLyBubyBiaXRzIHNldCBpbiBJU1IKLSNkZWZpbmUgSVNSX1R4Q09NUExFVEUgICAgICAgICAgMHgwMSAgICAgICAgLy8gcGFja2V0IHRyYW5zbWl0dGVkCi0jZGVmaW5lIElTUl9SeENPTVBMRVRFICAgICAgICAgIDB4MDIgICAgICAgIC8vIHBhY2tldCByZWNlaXZlZAotI2RlZmluZSBJU1JfUnhGUkFNRUxPU1QgICAgICAgICAweDA0ICAgICAgICAvLyBSeCBGcmFtZSBsb3N0Ci0jZGVmaW5lIElTUl9GQVRBTF9FUlJPUiAgICAgICAgIDB4MDggICAgICAgIC8vIEZhdGFsIGVycm9yCi0jZGVmaW5lIElTUl9DT01NQU5EX0NPTVBMRVRFICAgIDB4MTAgICAgICAgIC8vIGNvbW1hbmQgY29tcGxldGVkCi0jZGVmaW5lIElTUl9PVVRfT0ZfUkFOR0UgICAgICAgIDB4MjAgICAgICAgIC8vIGNvbW1hbmQgY29tcGxldGVkCi0jZGVmaW5lIElTUl9JQlNTX01FUkdFICAgICAgICAgIDB4NDAgICAgICAgIC8vICg0LjEuMi4zMCk6IElCU1MgbWVyZ2UKKyNkZWZpbmUgSVNSX0VNUFRZICAgICAgICAgICAgICAgMHgwMCAgICAgICAgLyogbm8gYml0cyBzZXQgaW4gSVNSICovCisjZGVmaW5lIElTUl9UeENPTVBMRVRFICAgICAgICAgIDB4MDEgICAgICAgIC8qIHBhY2tldCB0cmFuc21pdHRlZCAqLworI2RlZmluZSBJU1JfUnhDT01QTEVURSAgICAgICAgICAweDAyICAgICAgICAvKiBwYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSVNSX1J4RlJBTUVMT1NUICAgICAgICAgMHgwNCAgICAgICAgLyogUnggRnJhbWUgbG9zdCAqLworI2RlZmluZSBJU1JfRkFUQUxfRVJST1IgICAgICAgICAweDA4ICAgICAgICAvKiBGYXRhbCBlcnJvciAqLworI2RlZmluZSBJU1JfQ09NTUFORF9DT01QTEVURSAgICAweDEwICAgICAgICAvKiBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZSBJU1JfT1VUX09GX1JBTkdFICAgICAgICAweDIwICAgICAgICAvKiBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZSBJU1JfSUJTU19NRVJHRSAgICAgICAgICAweDQwICAgICAgICAvKiAoNC4xLjIuMzApOiBJQlNTIG1lcmdlICovCiAjZGVmaW5lIElTUl9HRU5FUklDX0lSUSAgICAgICAgIDB4ODAKIAogI2RlZmluZSBMb2NhbF9NaWJfVHlwZSAgICAgICAgICAweDAxCkBAIC0zMTEsMjIgKzMxMSwyMiBAQAogI2RlZmluZSBNQVhfRU5DUllQVElPTl9LRVlTIDQKICNkZWZpbmUgTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUgNDAKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyA4MDIuMTEgcmVsYXRlZCBkZWZpbml0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICogODAyLjExIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqLwogCi0vLwotLy8gUmVndWxhdG9yeSBEb21haW5zCi0vLworLyoKKyAqIFJlZ3VsYXRvcnkgRG9tYWlucworICovCiAKLSNkZWZpbmUgUkVHX0RPTUFJTl9GQ0MJCTB4MTAJLy9DaGFubmVscwkxLTExCVVTQQotI2RlZmluZSBSRUdfRE9NQUlOX0RPQwkJMHgyMAkvL0NoYW5uZWwJMS0xMQlDYW5hZGEKLSNkZWZpbmUgUkVHX0RPTUFJTl9FVFNJCQkweDMwCS8vQ2hhbm5lbAkxLTEzCUV1cm9wZSAoZXggU3BhaW4vRnJhbmNlKQotI2RlZmluZSBSRUdfRE9NQUlOX1NQQUlOCTB4MzEJLy9DaGFubmVsCTEwLTExCVNwYWluCi0jZGVmaW5lIFJFR19ET01BSU5fRlJBTkNFCTB4MzIJLy9DaGFubmVsCTEwLTEzCUZyYW5jZQotI2RlZmluZSBSRUdfRE9NQUlOX01LSwkJMHg0MAkvL0NoYW5uZWwJMTQJSmFwYW4KLSNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8vQ2hhbm5lbAkxLTE0CUphcGFuKE1LSzEpCi0jZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLy9DaGFubmVsCTMtOQlJU1JBRUwKKyNkZWZpbmUgUkVHX0RPTUFJTl9GQ0MJCTB4MTAJLyogQ2hhbm5lbHMJMS0xMQlVU0EJCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9ET0MJCTB4MjAJLyogQ2hhbm5lbAkxLTExCUNhbmFkYQkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0VUU0kJCTB4MzAJLyogQ2hhbm5lbAkxLTEzCUV1cm9wZSAoZXggU3BhaW4vRnJhbmNlKQkqLworI2RlZmluZSBSRUdfRE9NQUlOX1NQQUlOCTB4MzEJLyogQ2hhbm5lbAkxMC0xMQlTcGFpbgkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0ZSQU5DRQkweDMyCS8qIENoYW5uZWwJMTAtMTMJRnJhbmNlCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fTUtLCQkweDQwCS8qIENoYW5uZWwJMTQJSmFwYW4JCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8qIENoYW5uZWwJMS0xNAlKYXBhbihNS0sxKQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLyogQ2hhbm5lbAkzLTkJSVNSQUVMCQkJCSovCiAKICNkZWZpbmUgQlNTX1RZUEVfQURfSE9DCQkxCiAjZGVmaW5lIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFIDIKQEAgLTM2NCwxMyArMzY0LDEzIEBACiAjZGVmaW5lIENJUEhFUl9TVUlURV9DQ1ggICAgICA0CiAjZGVmaW5lIENJUEhFUl9TVUlURV9XRVBfMTI4ICA1CiAKLS8vCi0vLyBJRkFDRSBNQUNST1MgJiBkZWZpbml0aW9ucwotLy8KLS8vCisvKgorICogSUZBQ0UgTUFDUk9TICYgZGVmaW5pdGlvbnMKKyAqLwogCi0vLyBGdW5jQ3RybCBmaWVsZDoKLS8vCisvKgorICogRnVuY0N0cmwgZmllbGQ6CisgKi8KICNkZWZpbmUgRlVOQ19DVFJMX1R4RU5BQkxFCQkweDEwCiAjZGVmaW5lIEZVTkNfQ1RSTF9SeEVOQUJMRQkJMHgyMAogI2RlZmluZSBGVU5DX0NUUkxfSU5JVF9DT01QTEVURQkJMHgwMQpAQCAtMzc4LDQ4ICszNzgsNDggQEAKIC8qIEEgc3R1YiBmaXJtd2FyZSBpbWFnZSB3aGljaCByZWFkcyB0aGUgTUFDIGFkZHJlc3MgZnJvbSBOVlJBTSBvbiB0aGUgY2FyZC4KICAgIEZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24gYW5kIHNvdXJjZSBzZWUgdGhlIGVuZCBvZiB0aGlzIGZpbGUuICovCiBzdGF0aWMgdTggbWFjX3JlYWRlcltdID0gewotCTB4MDYsMHgwMCwweDAwLDB4ZWEsMHgwNCwweDAwLDB4MDAsMHhlYSwweDAzLDB4MDAsMHgwMCwweGVhLDB4MDIsMHgwMCwweDAwLDB4ZWEsCi0JMHgwMSwweDAwLDB4MDAsMHhlYSwweDAwLDB4MDAsMHgwMCwweGVhLDB4ZmYsMHhmZiwweGZmLDB4ZWEsMHhmZSwweGZmLDB4ZmYsMHhlYSwKLQkweGQzLDB4MDAsMHhhMCwweGUzLDB4MDAsMHhmMCwweDIxLDB4ZTEsMHgwZSwweDA0LDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLAotCTB4ODEsMHgxMSwweGEwLDB4ZTEsMHgwMCwweDEwLDB4ODEsMHhlMywweDAwLDB4MTAsMHg4MCwweGU1LDB4MWMsMHgxMCwweDkwLDB4ZTUsCi0JMHgxMCwweDEwLDB4YzEsMHhlMywweDFjLDB4MTAsMHg4MCwweGU1LDB4MDEsMHgxMCwweGEwLDB4ZTMsMHgwOCwweDEwLDB4ODAsMHhlNSwKLQkweDAyLDB4MDMsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsMHhiMCwweDEwLDB4YzAsMHhlMSwweGI0LDB4MTAsMHhjMCwweGUxLAotCTB4YjgsMHgxMCwweGMwLDB4ZTEsMHhiYywweDEwLDB4YzAsMHhlMSwweDU2LDB4ZGMsMHhhMCwweGUzLDB4MjEsMHgwMCwweDAwLDB4ZWIsCi0JMHgwYSwweDAwLDB4YTAsMHhlMywweDFhLDB4MDAsMHgwMCwweGViLDB4MTAsMHgwMCwweDAwLDB4ZWIsMHgwNywweDAwLDB4MDAsMHhlYiwKLQkweDAyLDB4MDMsMHhhMCwweGUzLDB4MDIsMHgxNCwweGEwLDB4ZTMsMHhiNCwweDEwLDB4YzAsMHhlMSwweDRjLDB4MTAsMHg5ZiwweGU1LAotCTB4YmMsMHgxMCwweGMwLDB4ZTEsMHgxMCwweDEwLDB4YTAsMHhlMywweGI4LDB4MTAsMHhjMCwweGUxLDB4ZmUsMHhmZiwweGZmLDB4ZWEsCi0JMHgwMCwweDQwLDB4MmQsMHhlOSwweDAwLDB4MjAsMHhhMCwweGUzLDB4MDIsMHgzYywweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywKLQkweDI4LDB4MDAsMHg5ZiwweGU1LDB4MzcsMHgwMCwweDAwLDB4ZWIsMHgwMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLAotCTB4MDAsMHg0MCwweDJkLDB4ZTksMHgxMiwweDJlLDB4YTAsMHhlMywweDA2LDB4MzAsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsCi0JMHgwMiwweDA0LDB4YTAsMHhlMywweDJmLDB4MDAsMHgwMCwweGViLDB4MDAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwKLQkweDAwLDB4MDIsMHgwMCwweDAyLDB4ODAsMHgwMSwweDkwLDB4ZTAsMHgwMSwweDAwLDB4MDAsMHgwYSwweDAxLDB4MDAsMHg1MCwweGUyLAotCTB4ZmMsMHhmZiwweGZmLDB4ZWEsMHgxZSwweGZmLDB4MmYsMHhlMSwweDgwLDB4MTAsMHhhMCwweGUzLDB4ZjMsMHgwNiwweGEwLDB4ZTMsCi0JMHgwMCwweDEwLDB4ODAsMHhlNSwweDAwLDB4MTAsMHhhMCwweGUzLDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwMSwweDEwLDB4YTAsMHhlMywKLQkweDA0LDB4MTAsMHg4MCwweGU1LDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwZSwweDM0LDB4YTAsMHhlMywweDFjLDB4MTAsMHg5MywweGU1LAotCTB4MDIsMHgxYSwweDgxLDB4ZTMsMHgxYywweDEwLDB4ODMsMHhlNSwweDU4LDB4MTEsMHg5ZiwweGU1LDB4MzAsMHgxMCwweDgwLDB4ZTUsCi0JMHg1NCwweDExLDB4OWYsMHhlNSwweDM0LDB4MTAsMHg4MCwweGU1LDB4MzgsMHgxMCwweDgwLDB4ZTUsMHgzYywweDEwLDB4ODAsMHhlNSwKLQkweDEwLDB4MTAsMHg5MCwweGU1LDB4MDgsMHgwMCwweDkwLDB4ZTUsMHgxZSwweGZmLDB4MmYsMHhlMSwweGYzLDB4MTYsMHhhMCwweGUzLAotCTB4MDgsMHgwMCwweDkxLDB4ZTUsMHgwNSwweDAwLDB4YTAsMHhlMywweDBjLDB4MDAsMHg4MSwweGU1LDB4MTAsMHgwMCwweDkxLDB4ZTUsCi0JMHgwMiwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4ZmYsMHgwMCwweGEwLDB4ZTMsMHgwYywweDAwLDB4ODEsMHhlNSwKLQkweDEwLDB4MDAsMHg5MSwweGU1LDB4MDIsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4MDAsMHg5MSwweGU1LAotCTB4MTAsMHgwMCwweDkxLDB4ZTUsMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHgwMCwweDkxLDB4ZTUsCi0JMHhmZiwweDAwLDB4MDAsMHhlMiwweDFlLDB4ZmYsMHgyZiwweGUxLDB4MzAsMHg0MCwweDJkLDB4ZTksMHgwMCwweDUwLDB4YTAsMHhlMSwKLQkweDAzLDB4NDAsMHhhMCwweGUxLDB4YTIsMHgwMiwweGEwLDB4ZTEsMHgwOCwweDAwLDB4MDAsMHhlMiwweDAzLDB4MDAsMHg4MCwweGUyLAotCTB4ZDgsMHgxMCwweDlmLDB4ZTUsMHgwMCwweDAwLDB4YzEsMHhlNSwweDAxLDB4MjAsMHhjMSwweGU1LDB4ZTIsMHhmZiwweGZmLDB4ZWIsCi0JMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDFhLDB4MTQsMHgwMCwweGEwLDB4ZTMsMHhjNCwweGZmLDB4ZmYsMHhlYiwKLQkweDA0LDB4MjAsMHhhMCwweGUxLDB4MDUsMHgxMCwweGEwLDB4ZTEsMHgwMiwweDAwLDB4YTAsMHhlMywweDAxLDB4MDAsMHgwMCwweGViLAotCTB4MzAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwweDcwLDB4NDAsMHgyZCwweGU5LDB4ZjMsMHg0NiwweGEwLDB4ZTMsCi0JMHgwMCwweDMwLDB4YTAsMHhlMywweDAwLDB4MDAsMHg1MCwweGUzLDB4MDgsMHgwMCwweDAwLDB4OWEsMHg4YywweDUwLDB4OWYsMHhlNSwKLQkweDAzLDB4NjAsMHhkNSwweGU3LDB4MGMsMHg2MCwweDg0LDB4ZTUsMHgxMCwweDYwLDB4OTQsMHhlNSwweDAyLDB4MDAsMHgxNiwweGUzLAotCTB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwMSwweDMwLDB4ODMsMHhlMiwweDAwLDB4MDAsMHg1MywweGUxLDB4ZjcsMHhmZiwweGZmLDB4M2EsCi0JMHhmZiwweDMwLDB4YTAsMHhlMywweDBjLDB4MzAsMHg4NCwweGU1LDB4MDgsMHgwMCwweDk0LDB4ZTUsMHgxMCwweDAwLDB4OTQsMHhlNSwKLQkweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDAwLDB4OTQsMHhlNSwweDAwLDB4MDAsMHhhMCwweGUzLAotCTB4MDAsMHgwMCwweDUyLDB4ZTMsMHgwYiwweDAwLDB4MDAsMHg5YSwweDEwLDB4NTAsMHg5NCwweGU1LDB4MDIsMHgwMCwweDE1LDB4ZTMsCi0JMHhmYywweGZmLDB4ZmYsMHgwYSwweDBjLDB4MzAsMHg4NCwweGU1LDB4MTAsMHg1MCwweDk0LDB4ZTUsMHgwMSwweDAwLDB4MTUsMHhlMywKLQkweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHg1MCwweDk0LDB4ZTUsMHgwMSwweDUwLDB4YzEsMHhlNCwweDAxLDB4MDAsMHg4MCwweGUyLAotCTB4MDIsMHgwMCwweDUwLDB4ZTEsMHhmMywweGZmLDB4ZmYsMHgzYSwweGM4LDB4MDAsMHhhMCwweGUzLDB4OTgsMHhmZiwweGZmLDB4ZWIsCi0JMHg3MCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLDB4MDEsMHgwYywweDAwLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMiwKLQkweDAwLDB4MDEsMHgwMCwweDAyCisJMHgwNiwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlYSwKKwkweDAxLCAweDAwLCAweDAwLCAweGVhLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorCTB4ZDMsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MGUsIDB4MDQsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHg4MSwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MSwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxYywgMHgxMCwgMHg5MCwgMHhlNSwKKwkweDEwLCAweDEwLCAweGMxLCAweGUzLCAweDFjLCAweDEwLCAweDgwLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDA4LCAweDEwLCAweDgwLCAweGU1LAorCTB4MDIsIDB4MDMsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4YjAsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4YjQsIDB4MTAsIDB4YzAsIDB4ZTEsCisJMHhiOCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhiYywgMHgxMCwgMHhjMCwgMHhlMSwgMHg1NiwgMHhkYywgMHhhMCwgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweDBhLCAweDAwLCAweGEwLCAweGUzLCAweDFhLCAweDAwLCAweDAwLCAweGViLCAweDEwLCAweDAwLCAweDAwLCAweGViLCAweDA3LCAweDAwLCAweDAwLCAweGViLAorCTB4MDIsIDB4MDMsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4MTQsIDB4YTAsIDB4ZTMsIDB4YjQsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4NGMsIDB4MTAsIDB4OWYsIDB4ZTUsCisJMHhiYywgMHgxMCwgMHhjMCwgMHhlMSwgMHgxMCwgMHgxMCwgMHhhMCwgMHhlMywgMHhiOCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKKwkweDAwLCAweDQwLCAweDJkLCAweGU5LCAweDAwLCAweDIwLCAweGEwLCAweGUzLCAweDAyLCAweDNjLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorCTB4MjgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MzcsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisJMHgwMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgxMiwgMHgyZSwgMHhhMCwgMHhlMywgMHgwNiwgMHgzMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDAyLCAweDA0LCAweGEwLCAweGUzLCAweDJmLCAweDAwLCAweDAwLCAweGViLCAweDAwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDEsIDB4OTAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ZTIsCisJMHhmYywgMHhmZiwgMHhmZiwgMHhlYSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHgxMCwgMHhhMCwgMHhlMywgMHhmMywgMHgwNiwgMHhhMCwgMHhlMywKKwkweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAorCTB4MDQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MGUsIDB4MzQsIDB4YTAsIDB4ZTMsIDB4MWMsIDB4MTAsIDB4OTMsIDB4ZTUsCisJMHgwMiwgMHgxYSwgMHg4MSwgMHhlMywgMHgxYywgMHgxMCwgMHg4MywgMHhlNSwgMHg1OCwgMHgxMSwgMHg5ZiwgMHhlNSwgMHgzMCwgMHgxMCwgMHg4MCwgMHhlNSwKKwkweDU0LCAweDExLCAweDlmLCAweGU1LCAweDM0LCAweDEwLCAweDgwLCAweGU1LCAweDM4LCAweDEwLCAweDgwLCAweGU1LCAweDNjLCAweDEwLCAweDgwLCAweGU1LAorCTB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDgsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZjMsIDB4MTYsIDB4YTAsIDB4ZTMsCisJMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwNSwgMHgwMCwgMHhhMCwgMHhlMywgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwgMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweDAyLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweGZmLCAweDAwLCAweGEwLCAweGUzLCAweDBjLCAweDAwLCAweDgxLCAweGU1LAorCTB4MTAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTEsIDB4ZTUsCisJMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweGZmLCAweDAwLCAweDAwLCAweGUyLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDQwLCAweDJkLCAweGU5LCAweDAwLCAweDUwLCAweGEwLCAweGUxLAorCTB4MDMsIDB4NDAsIDB4YTAsIDB4ZTEsIDB4YTIsIDB4MDIsIDB4YTAsIDB4ZTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4ODAsIDB4ZTIsCisJMHhkOCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHhjMSwgMHhlNSwgMHgwMSwgMHgyMCwgMHhjMSwgMHhlNSwgMHhlMiwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDAxLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDFhLCAweDE0LCAweDAwLCAweGEwLCAweGUzLCAweGM0LCAweGZmLCAweGZmLCAweGViLAorCTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTEsIDB4MDUsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHgzMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg3MCwgMHg0MCwgMHgyZCwgMHhlOSwgMHhmMywgMHg0NiwgMHhhMCwgMHhlMywKKwkweDAwLCAweDMwLCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDUwLCAweGUzLCAweDA4LCAweDAwLCAweDAwLCAweDlhLCAweDhjLCAweDUwLCAweDlmLCAweGU1LAorCTB4MDMsIDB4NjAsIDB4ZDUsIDB4ZTcsIDB4MGMsIDB4NjAsIDB4ODQsIDB4ZTUsIDB4MTAsIDB4NjAsIDB4OTQsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTYsIDB4ZTMsCisJMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwMSwgMHgzMCwgMHg4MywgMHhlMiwgMHgwMCwgMHgwMCwgMHg1MywgMHhlMSwgMHhmNywgMHhmZiwgMHhmZiwgMHgzYSwKKwkweGZmLCAweDMwLCAweGEwLCAweGUzLCAweDBjLCAweDMwLCAweDg0LCAweGU1LCAweDA4LCAweDAwLCAweDk0LCAweGU1LCAweDEwLCAweDAwLCAweDk0LCAweGU1LAorCTB4MDEsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHhlMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg5YSwgMHgxMCwgMHg1MCwgMHg5NCwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNSwgMHhlMywKKwkweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDBjLCAweDMwLCAweDg0LCAweGU1LCAweDEwLCAweDUwLCAweDk0LCAweGU1LCAweDAxLCAweDAwLCAweDE1LCAweGUzLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4NTAsIDB4OTQsIDB4ZTUsIDB4MDEsIDB4NTAsIDB4YzEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsCisJMHgwMiwgMHgwMCwgMHg1MCwgMHhlMSwgMHhmMywgMHhmZiwgMHhmZiwgMHgzYSwgMHhjOCwgMHgwMCwgMHhhMCwgMHhlMywgMHg5OCwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDcwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDBjLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDAwLCAweDAyLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDIKIH07CiAKIHN0cnVjdCBhdG1lbF9wcml2YXRlIHsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldmljZSAqc3lzX2RldjsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7Ci0Jc3BpbmxvY2tfdCBpcnFsb2NrLCB0aW1lcmxvY2s7CS8vIHNwaW5sb2NrcworCXNwaW5sb2NrX3QgaXJxbG9jaywgdGltZXJsb2NrOwkvKiBzcGlubG9ja3MgKi8KIAllbnVtIHsgQlVTX1RZUEVfUENDQVJELCBCVVNfVFlQRV9QQ0kgfSBidXNfdHlwZTsKIAllbnVtIHsKIAkJQ0FSRF9UWVBFX1BBUkFMTEVMX0ZMQVNILApAQCAtNTQxLDcgKzU0MSw3IEBACiAJdTggcnhfYnVmW01BWF9XSVJFTEVTU19CT0RZXTsKIH07CiAKLXN0YXRpYyB1OCBhdG1lbF9iYXNpY19yYXRlc1s0XSA9IHsweDgyLDB4ODQsMHgwYiwweDE2fTsKK3N0YXRpYyB1OCBhdG1lbF9iYXNpY19yYXRlc1s0XSA9IHsweDgyLCAweDg0LCAweDBiLCAweDE2fTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CkBAIC0xMjgzLDE3ICsxMjgzLDE3IEBACiAKIHN0YXRpYyBpbnQgYXRtZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLSAgICAgICAgaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMjMxMikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIGRldi0+bXR1ID0gbmV3X210dTsKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMjMxMikpCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdG1lbF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCi0gICAgICAgIG1lbWNweSAoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5IChkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAlyZXR1cm4gYXRtZWxfb3BlbihkZXYpOwogfQogCkBAIC0xNDIwLDEwICsxNDIwLDE3IEBACiAJCQkJICAgICBwcml2LT5maXJtd2FyZV9pZCk7CiAKIAkJc3dpdGNoIChwcml2LT5jYXJkX3R5cGUpIHsKLQkJY2FzZSBDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0g6IGMgPSAiUGFyYWxsZWwgZmxhc2giOyBicmVhazsKLQkJY2FzZSBDQVJEX1RZUEVfU1BJX0ZMQVNIOiBjID0gIlNQSSBmbGFzaFxuIjsgYnJlYWs7Ci0JCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTTogYyA9ICJFRVBST00iOyBicmVhazsKLQkJZGVmYXVsdDogYyA9ICI8dW5rbm93bj4iOworCQljYXNlIENBUkRfVFlQRV9QQVJBTExFTF9GTEFTSDoKKwkJCWMgPSAiUGFyYWxsZWwgZmxhc2giOworCQkJYnJlYWs7CisJCWNhc2UgQ0FSRF9UWVBFX1NQSV9GTEFTSDoKKwkJCWMgPSAiU1BJIGZsYXNoXG4iOworCQkJYnJlYWs7CisJCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTToKKwkJCWMgPSAiRUVQUk9NIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYyA9ICI8dW5rbm93bj4iOwogCQl9CiAKIAkJciA9ICI8dW5rbm93bj4iOwpAQCAtMTQzOSwxNiArMTQ0NiwzMyBAQAogCQkJICAgICBwcml2LT51c2Vfd3BhID8gIlllcyIgOiAiTm8iKTsKIAl9CiAKLQlzd2l0Y2gocHJpdi0+c3RhdGlvbl9zdGF0ZSkgewotCWNhc2UgU1RBVElPTl9TVEFURV9TQ0FOTklORzogcyA9ICJTY2FubmluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9KT0lOTklORzogcyA9ICJKb2luaW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOiBzID0gIkF1dGhlbnRpY2F0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HOiBzID0gIkFzc29jaWF0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1JFQURZOiBzID0gIlJlYWR5IjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6IHMgPSAiUmVhc3NvY2lhdGluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SOiBzID0gIk1hbmFnZW1lbnQgZXJyb3IiOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfRE9XTjogcyA9ICJEb3duIjsgYnJlYWs7Ci0JZGVmYXVsdDogcyA9ICI8dW5rbm93bj4iOworCXN3aXRjaCAocHJpdi0+c3RhdGlvbl9zdGF0ZSkgeworCWNhc2UgU1RBVElPTl9TVEFURV9TQ0FOTklORzoKKwkJcyA9ICJTY2FubmluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9KT0lOTklORzoKKwkJcyA9ICJKb2luaW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOgorCQlzID0gIkF1dGhlbnRpY2F0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HOgorCQlzID0gIkFzc29jaWF0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1JFQURZOgorCQlzID0gIlJlYWR5IjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6CisJCXMgPSAiUmVhc3NvY2lhdGluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SOgorCQlzID0gIk1hbmFnZW1lbnQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfRE9XTjoKKwkJcyA9ICJEb3duIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICI8dW5rbm93bj4iOwogCX0KIAogCXAgKz0gc3ByaW50ZihwLCAiQ3VycmVudCBzdGF0ZTpcdFx0JXNcbiIsIHMpOwpAQCAtMTQ1OCwxNiArMTQ4MiwzMCBAQAogc3RhdGljIGludCBhdG1lbF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotICAgICAgICBzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBkYXRhOwogCWludCBsZW4gPSBhdG1lbF9wcm9jX291dHB1dCAocGFnZSwgcHJpdik7Ci0gICAgICAgIGlmIChsZW4gPD0gb2ZmK2NvdW50KSAqZW9mID0gMTsKLSAgICAgICAgKnN0YXJ0ID0gcGFnZSArIG9mZjsKLSAgICAgICAgbGVuIC09IG9mZjsKLSAgICAgICAgaWYgKGxlbj5jb3VudCkgbGVuID0gY291bnQ7Ci0gICAgICAgIGlmIChsZW48MCkgbGVuID0gMDsKLSAgICAgICAgcmV0dXJuIGxlbjsKKwlpZiAobGVuIDw9IG9mZitjb3VudCkKKwkJKmVvZiA9IDE7CisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKwlsZW4gLT0gb2ZmOworCWlmIChsZW4gPiBjb3VudCkKKwkJbGVuID0gY291bnQ7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IDA7CisJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdG1lbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYXRtZWxfb3BlbiwKKwkubmRvX3N0b3AJCT0gYXRtZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF0bWVsX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gYXRtZWxfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBzdGFydF90eCwKKwkubmRvX2RvX2lvY3RsIAkJPSBhdG1lbF9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKHVuc2lnbmVkIHNob3J0IGlycSwgdW5zaWduZWQgbG9uZyBwb3J0LAogCQkJCSAgIGNvbnN0IEF0bWVsRldUeXBlIGZ3X3R5cGUsCiAJCQkJICAgc3RydWN0IGRldmljZSAqc3lzX2RldiwKQEAgLTE0NzksMTEgKzE1MTcsMTEgQEAKIAlpbnQgcmM7CiAKIAkvKiBDcmVhdGUgdGhlIG5ldHdvcmsgZGV2aWNlIG9iamVjdC4gKi8KLSAgICAgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpwcml2KSk7Ci0gICAgICAgIGlmICghZGV2KSB7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpwcml2KSk7CisJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbDogQ291bGRuJ3QgYWxsb2NfZXRoZXJkZXZcbiIpOwogCQlyZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCX0KIAlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsOiBDb3VsZG4ndCBnZXQgbmFtZSFcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKQEAgLTE1NTIsMTMgKzE1OTAsOCBAQAogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZnVuY3Rpb24gPSBhdG1lbF9tYW5hZ2VtZW50X3RpbWVyOwogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAKLQlkZXYtPm9wZW4gPSBhdG1lbF9vcGVuOwotCWRldi0+c3RvcCA9IGF0bWVsX2Nsb3NlOwotCWRldi0+Y2hhbmdlX210dSA9IGF0bWVsX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBhdG1lbF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGFydF90eDsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZhdG1lbF9oYW5kbGVyX2RlZjsKLQlkZXYtPmRvX2lvY3RsID0gYXRtZWxfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF0bWVsX25ldGRldl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhdG1lbF9oYW5kbGVyX2RlZjsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTE1NzcsNyArMTYxMCw3IEBACiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKQogCQlnb3RvIGVycl9vdXRfcmVzOwogCi0JaWYgKCFwcm9iZV9hdG1lbF9jYXJkKGRldikpeworCWlmICghcHJvYmVfYXRtZWxfY2FyZChkZXYpKSB7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQpAQCAtMTU5NCw3ICsxNjI3LDcgQEAKIAlyZXR1cm4gZGV2OwogCiBlcnJfb3V0X3JlczoKLQlyZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDMyKTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIpOwogZXJyX291dF9pcnE6CiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiBlcnJfb3V0X2ZyZWU6CkBAIC0xNjMyLDcgKzE2NjUsNyBAQAogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIENoZWNrIGlmIHdlIGFza2VkIGZvciBgYW55JyAqLwotCWlmKGR3cnEtPmZsYWdzID09IDApIHsKKwlpZiAoZHdycS0+ZmxhZ3MgPT0gMCkgewogCQlwcml2LT5jb25uZWN0X3RvX2FueV9CU1MgPSAxOwogCX0gZWxzZSB7CiAJCWludCBpbmRleCA9IChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwpAQCAtMTc2OCw3ICsxODAxLDcgQEAKIAl9CiAJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwotCWlmKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCisJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAwOwogCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KQEAgLTE3OTcsNyArMTgzMCw3IEBACiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwogCWR3cnEtPmxlbmd0aCA9IHByaXYtPndlcF9rZXlfbGVuW2luZGV4XTsKIAlpZiAoZHdycS0+bGVuZ3RoID4gMTYpIHsKLQkJZHdycS0+bGVuZ3RoPTA7CisJCWR3cnEtPmxlbmd0aCA9IDA7CiAJfSBlbHNlIHsKIAkJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCW1lbWNweShleHRyYSwgcHJpdi0+d2VwX2tleXNbaW5kZXhdLCBkd3JxLT5sZW5ndGgpOwpAQCAtMjAxMywxMSArMjA0NiwyMCBAQAogCQl9IGVsc2UgewogCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSB2YWx1ZSAqLwogCQkJc3dpdGNoICh2d3JxLT52YWx1ZSkgewotCQkJY2FzZSAgMTAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDA7IGJyZWFrOwotCQkJY2FzZSAgMjAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDE7IGJyZWFrOwotCQkJY2FzZSAgNTUwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDI7IGJyZWFrOwotCQkJY2FzZSAxMTAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDM7IGJyZWFrOwotCQkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CisJCQljYXNlICAxMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAgMjAwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgIDU1MDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDExMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCX0KQEAgLTIwNjIsMTEgKzIxMDQsMTkgQEAKIAkJdndycS0+dmFsdWUgPSAxMTAwMDAwMDsKIAl9IGVsc2UgewogCQl2d3JxLT5maXhlZCA9IDE7Ci0JCXN3aXRjaChwcml2LT50eF9yYXRlKSB7Ci0JCWNhc2UgMDogdndycS0+dmFsdWUgPSAgMTAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMTogdndycS0+dmFsdWUgPSAgMjAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMjogdndycS0+dmFsdWUgPSAgNTUwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMzogdndycS0+dmFsdWUgPSAxMTAwMDAwMDsgYnJlYWs7CisJCXN3aXRjaCAocHJpdi0+dHhfcmF0ZSkgeworCQljYXNlIDA6CisJCQl2d3JxLT52YWx1ZSA9ICAxMDAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXZ3cnEtPnZhbHVlID0gIDIwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdndycS0+dmFsdWUgPSAgNTUwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2d3JxLT52YWx1ZSA9IDExMDAwMDAwOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0yMjA0LDkgKzIyNTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogc3RhdGljIGludCBhdG1lbF9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICBzdHJ1Y3QgaXdfZnJlcSAqZndycSwKQEAgLTIyMTYsMTYgKzIyNjMsMTIgQEAKIAlpbnQgcmMgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBJZiBzZXR0aW5nIGJ5IGZyZXF1ZW5jeSwgY29udmVydCB0byBhIGNoYW5uZWwgKi8KLQlpZiAoKGZ3cnEtPmUgPT0gMSkgJiYKLQkgICAgKGZ3cnEtPm0gPj0gKGludCkgMjQxMjAwMDAwKSAmJgotCSAgICAoZndycS0+bSA8PSAoaW50KSAyNDg3MDAwMDApKSB7CisJaWYgKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUgKChjIDwgMTQpICYmIChmICE9IGZyZXF1ZW5jeV9saXN0W2NdKSkKLQkJCWMrKzsKKwogCQkvKiBIYWNrIHRvIGZhbGwgdGhyb3VnaC4uLiAqLwogCQlmd3JxLT5lID0gMDsKLQkJZndycS0+bSA9IGMgKyAxOworCQlmd3JxLT5tID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGYpOwogCX0KIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCiAJaWYgKChmd3JxLT5tID4gMTAwMCkgfHwgKGZ3cnEtPmUgPiAwKSkKQEAgLTIzODQsOCArMjQyNywxMSBAQAogCWlmIChyYW5nZS0+bnVtX2NoYW5uZWxzICE9IDApIHsKIAkJZm9yIChrID0gMCwgaSA9IGNoYW5uZWxfdGFibGVbal0ubWluOyBpIDw9IGNoYW5uZWxfdGFibGVbal0ubWF4OyBpKyspIHsKIAkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpOyAvKiBMaXN0IGluZGV4ICovCi0JCQlyYW5nZS0+ZnJlcVtrXS5tID0gZnJlcXVlbmN5X2xpc3RbaSAtIDFdICogMTAwMDAwOwotCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCisJCQkvKiBWYWx1ZXMgaW4gTUh6IC0+ICogMTBeNSAqIDEwICovCisJCQlyYW5nZS0+ZnJlcVtrXS5tID0gKGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpKSAqCisJCQkJCSAgICAxMDAwMDApOworCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsKIAkJfQogCQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAJfQpAQCAtMjU4MCw4ICsyNjI2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBhdG1lbF9oYW5kbGVyX2RlZiA9Ci17CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0bWVsX2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGF0bWVsX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZQk9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9hcmdzKSwKQEAgLTI4MzgsNyArMjg4Myw3IEBACiAKIAlpZiAocHJpdi0+d2VwX2lzX29uICYmIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gIT0gMSkKIAkJLyogbm8gV0VQIGZvciBhdXRoZW50aWNhdGlvbiBmcmFtZXMgd2l0aCBUclNlcU5vIDEgKi8KLSAgICAgICAgICAgICAgICBoZWFkZXIuZnJhbWVfY29udHJvbCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkJaGVhZGVyLmZyYW1lX2NvbnRyb2wgfD0gIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7CiAKQEAgLTI5NzMsNyArMzAxOCw3IEBACiAJCWlmIChtZW1jbXAoYnNzLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KSA9PSAwKQogCQkJaW5kZXggPSBpOwogCi0gICAgICAgIC8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKKwkvKiBJZiB3ZSBwcm9jZXNzIGEgcHJvYmUgYW5kIGFuIGVudHJ5IGZyb20gdGhpcyBCU1MgZXhpc3RzCiAJICAgd2Ugd2lsbCB1cGRhdGUgdGhlIEJTUyBlbnRyeSB3aXRoIHRoZSBpbmZvIGZyb20gdGhpcyBCU1MuCiAJICAgSWYgd2UgcHJvY2VzcyBhIGJlYWNvbiB3ZSB3aWxsIG9ubHkgdXBkYXRlIFJTU0kgKi8KIApAQCAtMjk5OSw3ICszMDQ0LDcgQEAKIAlpZiAoY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQogCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9BREhPQzsKIAllbHNlIGlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9SVdfTU9ERV9JTkZSQTsKKwkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9IElXX01PREVfSU5GUkE7CiAKIAlwcml2LT5CU1NpbmZvW2luZGV4XS5wcmVhbWJsZSA9IGNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUgPwogCQlTSE9SVF9QUkVBTUJMRSA6IExPTkdfUFJFQU1CTEU7CkBAIC0zMDQ2LDcgKzMwOTEsNyBAQAogCQl9CiAKIAkJaWYgKHNob3VsZF9hc3NvY2lhdGUpIHsKLQkJCWlmKHByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQpIHsKKwkJCWlmIChwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkKSB7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HKTsKIAkJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMSk7CiAJCQkJcmV0dXJuOwpAQCAtMzA2Nyw4ICszMTEyLDggQEAKIAkJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwogCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIFdMQU5fQVVUSF9TSEFSRURfS0VZLCBOVUxMLCAwKTsKIAkJCXJldHVybjsKLQkJfSBlbHNlIGlmICggICBzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKLQkJICAgICAgICAgICAmJiBwcml2LT53ZXBfaXNfb24pIHsKKwkJfSBlbHNlIGlmIChzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKKwkJCSAgICYmIHByaXYtPndlcF9pc19vbikgewogCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAxOwogCQkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgV0xBTl9BVVRIX09QRU4sIE5VTEwsIDApOwpAQCAtMzI1NiwxMSArMzMwMSwxMSBAQAogCXU4IG1heF9yc3NpID0gNDI7IC8qIDUwMi1ybWZkLXJldmQgbWF4IGJ5IGV4cGVyaW1lbnQsIGRlZmF1bHQgZm9yIG5vdyAqLwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgQVRNRUxfRldfVFlQRV81MDJFOgotCQkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIEFUTUVMX0ZXX1RZUEVfNTAyRToKKwkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlyc3NpID0gcnNzaSAqIDEwMCAvIG1heF9yc3NpOwpAQCAtMzQ3Nyw4ICszNTIyLDcgQEAKIAkgICAgc3RhdHVzID09IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoY29tbWFuZCl7Ci0KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKIAljYXNlIENNRF9TdGFydDoKIAkJaWYgKHN0YXR1cyA9PSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CiAJCQlwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkID0gcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkOwpAQCAtMzcxMyw3ICszNzU3LDcgQEAKIAogCWlmIChyYykgewogCQlpZiAoZGV2LT5kZXZfYWRkclswXSA9PSAweEZGKSB7Ci0JCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsMHgwNCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsIDB4MDQsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDB9OwogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAqKiogSW52YWxpZCBNQUMgYWRkcmVzcy4gVVBHUkFERSBGaXJtd2FyZSAqKioqXG4iLCBkZXYtPm5hbWUpOwogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRlZmF1bHRfbWFjLCA2KTsKIAkJfQpAQCAtMzgwNyw3ICszODUxLDcgQEAKIAkJCQl9IGVsc2UgewogCQkJCQltaWIuZ3JvdXBfa2V5ID0gaTsKIAkJCQkJcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlID0gcHJpdi0+cGFpcndpc2VfY2lwaGVyX3N1aXRlOwotCQkJCSAgICAgICAgbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0xXSA9IDE7CisJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMV0gPSAxOwogCQkJCQltaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTJdID0gcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlOwogCQkJCX0KIAkJCX0KQEAgLTM5MTcsNyArMzk2MSw3IEBACiAJCQlsZW4gPSBmd19lbnRyeS0+c2l6ZTsKIAkJfQogCi0JICAgICAgICBpZiAobGVuIDw9IDB4NjAwMCkgeworCQlpZiAobGVuIDw9IDB4NjAwMCkgewogCQkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEJTUiwgQlNTX0lSQU0pOwogCQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgMCwgZncsIGxlbik7CiAJCQlhdG1lbF9zZXRfZ2NyKHByaXYtPmRldiwgR0NSX1JFTUFQKTsKQEAgLTM5NDYsNyArMzk5MCw3IEBACiAJcHJpdi0+dXNlX3dwYSA9IChwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiA9PSA0KTsKIAlwcml2LT5yYWRpb19vbl9icm9rZW4gPSAocHJpdi0+aG9zdF9pbmZvLm1ham9yX3ZlcnNpb24gPT0gNSk7CiAKLSAgICAgICAgLyogdW5tYXNrIGFsbCBpcnEgc291cmNlcyAqLworCS8qIHVubWFzayBhbGwgaXJxIHNvdXJjZXMgKi8KIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9JTlRfTUFTS19PRkZTRVQpLCAweGZmKTsKIAogCS8qIGludCBUeCBzeXN0ZW0gYW5kIGVuYWJsZSBUeCAqLwpAQCAtMzk3OSw3ICs0MDIzLDcgQEAKIAkJICAgIENNRF9TVEFUVVNfUkVKRUNURURfUkFESU9fT0ZGKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogY2Fubm90IHR1cm4gdGhlIHJhZGlvIG9uLlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIApAQCAtNDAwMyw4ICs0MDQ3LDcgQEAKIAllbHNlCiAJCWJ1aWxkX3dlcF9taWIocHJpdik7CiAKLQlpZiAob2xkX3N0YXRlID09IFNUQVRJT05fU1RBVEVfUkVBRFkpCi0JeworCWlmIChvbGRfc3RhdGUgPT0gU1RBVElPTl9TVEFURV9SRUFEWSkgewogCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CkBAIC00MjgxLDI0ICs0MzI0LDI0IEBACiAJLnNldCBOVlJBTV9MRU5HVEgsIDB4MDIwMAogCS5zZXQgTUFDX0FERFJFU1NfTUlCLCBTUkFNX0JBU0UKIAkuc2V0IE1BQ19BRERSRVNTX0xFTkdUSCwgNgotICAgICAgICAuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKKwkuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKIAkuc2V0IE1SMSwgMAogCS5zZXQgTVIyLCA0CiAJLnNldCBNUjMsIDgKIAkuc2V0IE1SNCwgMHhDCiBSRVNFVF9WRUNUT1I6Ci0gICAgICAgIGIgUkVTRVRfSEFORExFUgorCWIgUkVTRVRfSEFORExFUgogVU5ERUZfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogU1dJX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIElBQk9SVF9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBEQUJPUlRfVkVDVE9SOgogUkVTRVJWRURfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogSVJRX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIEZJUV9WRUNUT1I6CiAJYiBIQUxUMQogSEFMVDE6CWIgSEFMVDEKQEAgLTQzMTAsNyArNDM1Myw3IEBACiAJbGRyCXIwLCA9U1BJX0NHRU5fQkFTRQogCW1vdglyMSwgIzAKIAltb3YJcjEsIHIxLCBsc2wgIzMKLQlvcnIJcjEscjEsICMwCisJb3JyCXIxLCByMSwgIzAKIAlzdHIJcjEsIFtyMF0KIAlsZHIJcjEsIFtyMCwgIzI4XQogCWJpYwlyMSwgcjEsICMxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwppbmRleCAxZjgxZDM2Li5hYWI3MWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwpAQCAtMTEwLDEwICsxMTAsMTggQEAKIAlib29sICJCcm9hZGNvbSA0M3h4IGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIEI0MwogCS0tLWhlbHAtLS0KLQkgIEJyb2FkY29tIDQzeHggZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgQnJvYWRjb20gNDN4eCBkZWJ1Z2dpbmcuCiAKLQkgIFNheSBZLCBpZiB5b3Ugd2FudCB0byBmaW5kIG91dCB3aHkgdGhlIGRyaXZlciBkb2VzIG5vdAotCSAgd29yayBmb3IgeW91LgorCSAgVGhpcyBhZGRzIGFkZGl0aW9uYWwgcnVudGltZSBzYW5pdHkgY2hlY2tzIGFuZCBzdGF0aXN0aWNzIHRvIHRoZSBkcml2ZXIuCisJICBUaGVzZSBjaGVja3MgYW5kIHN0YXRpc3RpY3MgbWlnaHQgbWUgZXhwZW5zaXZlIGFuZCBodXJ0IHJ1bnRpbWUgcGVyZm9ybWFuY2UKKwkgIG9mIHlvdXIgc3lzdGVtLgorCSAgVGhpcyBhbHNvIGFkZHMgdGhlIGI0MyBkZWJ1Z2ZzIGludGVyZmFjZS4KKworCSAgRG8gbm90IGVuYWJsZSB0aGlzLCB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4KKworCSAgU2F5IE4sIGlmIHlvdSBhcmUgYSBkaXN0cmlidXRvciBvciB1c2VyIGJ1aWxkaW5nIGEgcmVsZWFzZSBrZXJuZWwKKwkgIGZvciBwcm9kdWN0aW9uIHVzZS4KKwkgIE9ubHkgc2F5IFksIGlmIHlvdSBhcmUgZGVidWdnaW5nIGEgcHJvYmxlbSBpbiB0aGUgYjQzIGRyaXZlciBzb3VyY2Vjb2RlLgogCiBjb25maWcgQjQzX0ZPUkNFX1BJTwogCWJvb2wgIkZvcmNlIHVzYWdlIG9mIFBJTyBpbnN0ZWFkIG9mIERNQSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQppbmRleCAxNGEwMmIzLi4yODFlZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogYjQzLXkJCQkJKz0gcGh5X2EubwogYjQzLSQoQ09ORklHX0I0M19OUEhZKQkJKz0gcGh5X24ubwogYjQzLSQoQ09ORklHX0I0M19QSFlfTFApCSs9IHBoeV9scC5vCitiNDMtJChDT05GSUdfQjQzX1BIWV9MUCkJKz0gdGFibGVzX2xwcGh5Lm8KIGI0My15CQkJCSs9IHN5c2ZzLm8KIGI0My15CQkJCSs9IHhtaXQubwogYjQzLXkJCQkJKz0gbG8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGE1M2MzNzguLmJlYWYxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTEyMCw2ICsxMjAsOSBAQAogI2RlZmluZSBCNDNfTU1JT19JRlNDVEwJCQkweDY4OCAvKiBJbnRlcmZyYW1lIHNwYWNlIGNvbnRyb2wgKi8KICNkZWZpbmUgIEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRgkweDAwMDQKICNkZWZpbmUgQjQzX01NSU9fUE9XRVJVUF9ERUxBWQkJMHg2QTgKKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX0NUTAkJMHg2QjQgLyogQmx1ZXRvb3RoIENvZXhpc3RlbmNlIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX1NUQVQJCTB4NkI2IC8qIEJsdWV0b290aCBDb2V4aXN0ZW5jZSBTdGF0dXMgKi8KKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX1RYQ1RMCQkweDZCOCAvKiBCbHVldG9vdGggQ29leGlzdGVuY2UgVHJhbnNtaXQgQ29udHJvbCAqLwogCiAvKiBTUFJPTSBib2FyZGZsYWdzX2xvIHZhbHVlcyAqLwogI2RlZmluZSBCNDNfQkZMX0JUQ09FWElTVAkJMHgwMDAxCS8qIGltcGxlbWVudHMgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlICovCkBAIC01NDcsOSArNTUwLDYgQEAKIAogc3RydWN0IGI0M19zdGF0cyB7CiAJdTggbGlua19ub2lzZTsKLQkvKiBTdG9yZSB0aGUgbGFzdCBUWC9SWCB0aW1lcyBoZXJlIGZvciB1cGRhdGluZyB0aGUgbGVkcy4gKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfdHg7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3J4OwogfTsKIAogc3RydWN0IGI0M19rZXkgewpAQCAtNjU1LDEwICs2NTUsMzkgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl9hZGp1c3Rfd29yazsKIH07CiAKKy8qIFRoZSB0eXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlLiAqLworZW51bSBiNDNfZmlybXdhcmVfZmlsZV90eXBlIHsKKwlCNDNfRldUWVBFX1BST1BSSUVUQVJZLAorCUI0M19GV1RZUEVfT1BFTlNPVVJDRSwKKwlCNDNfTlJfRldUWVBFUywKK307CisKKy8qIENvbnRleHQgZGF0YSBmb3IgZmV0Y2hpbmcgZmlybXdhcmUuICovCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCB7CisJLyogVGhlIGRldmljZSB3ZSBhcmUgcmVxdWVzdGluZyB0aGUgZncgZm9yLiAqLworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKwkvKiBUaGUgdHlwZSBvZiBmaXJtd2FyZSB0byByZXF1ZXN0LiAqLworCWVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSByZXFfdHlwZTsKKwkvKiBFcnJvciBtZXNzYWdlcyBmb3IgZWFjaCBmaXJtd2FyZSB0eXBlLiAqLworCWNoYXIgZXJyb3JzW0I0M19OUl9GV1RZUEVTXVsxMjhdOworCS8qIFRlbXBvcmFyeSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIGZpcm13YXJlIG5hbWUuICovCisJY2hhciBmd25hbWVbNjRdOworCS8qIEEgZmF0YWwgZXJyb3Igb2NjdXJlZCB3aGlsZSByZXF1ZXN0aW5nLiBGaXJtd2FyZSByZXFlc3QKKwkgKiBjYW4gbm90IGNvbnRpbnVlLCBhcyBhbnkgb3RoZXIgcmVxZXN0IHdpbGwgYWxzbyBmYWlsLiAqLworCWludCBmYXRhbF9mYWlsdXJlOworfTsKKwogLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIGEgY2FjaGVkIG1pY3JvY29kZSBmaWxlLiAqLwogc3RydWN0IGI0M19maXJtd2FyZV9maWxlIHsKIAljb25zdCBjaGFyICpmaWxlbmFtZTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRhdGE7CisJLyogVHlwZSBvZiB0aGUgZmlybXdhcmUgZmlsZSBuYW1lLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG9ubHkgaW5kaWNhdGUKKwkgKiB0aGUgdHlwZSBieSB0aGUgZmlybXdhcmUgbmFtZS4gTk9UIHRoZSBmaWxlIGNvbnRlbnRzLgorCSAqIElmIHlvdSB3YW50IHRvIGNoZWNrIGZvciBwcm9wcmlldGFyeSB2cyBvcGVuc291cmNlLCB1c2UgKHN0cnVjdCBiNDNfZmlybXdhcmUpLT5vcGVuc291cmNlCisJICogaW5zdGVhZCEgVGhlIChzdHJ1Y3QgYjQzX2Zpcm13YXJlKS0+b3BlbnNvdXJjZSBmbGFnIGlzIGRlcml2ZWQgZnJvbSB0aGUgYWN0dWFsIGZpcm13YXJlCisJICogYmluYXJ5IGNvZGUsIG5vdCBqdXN0IHRoZSBmaWxlbmFtZS4KKwkgKi8KKwllbnVtIGI0M19maXJtd2FyZV9maWxlX3R5cGUgdHlwZTsKIH07CiAKIC8qIFBvaW50ZXJzIHRvIHRoZSBmaXJtd2FyZSBkYXRhIGFuZCBtZXRhIGluZm9ybWF0aW9uIGFib3V0IGl0LiAqLwpAQCAtNjc3LDcgKzcwNiw4IEBACiAJLyogRmlybXdhcmUgcGF0Y2hsZXZlbCAqLwogCXUxNiBwYXRjaDsKIAotCS8qIFNldCB0byB0cnVlLCBpZiB3ZSBhcmUgdXNpbmcgYW4gb3BlbnNvdXJjZSBmaXJtd2FyZS4gKi8KKwkvKiBTZXQgdG8gdHJ1ZSwgaWYgd2UgYXJlIHVzaW5nIGFuIG9wZW5zb3VyY2UgZmlybXdhcmUuCisJICogVXNlIHRoaXMgdG8gY2hlY2sgZm9yIHByb3ByaWV0YXJ5IHZzIG9wZW5zb3VyY2UuICovCiAJYm9vbCBvcGVuc291cmNlOwogCS8qIFNldCB0byB0cnVlLCBpZiB0aGUgY29yZSBuZWVkcyBhIFBDTSBmaXJtd2FyZSwgYnV0CiAJICogd2UgZmFpbGVkIHRvIGxvYWQgb25lLiBUaGlzIGlzIGFsd2F5cyBmYWxzZSBmb3IKQEAgLTg0OCwxMiArODc4LDkgQEAKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKIHZvaWQgYjQzd2FybihzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7Ci0jaWYgQjQzX0RFQlVHCiB2b2lkIGI0M2RiZyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7Ci0jZWxzZSAvKiBERUJVRyAqLwotIyBkZWZpbmUgYjQzZGJnKHdsLCBmbXQuLi4pIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQotI2VuZGlmIC8qIERFQlVHICovCisKIAogLyogQSBXQVJOX09OIHZhcmlhbnQgdGhhdCB2YW5pc2hlcyB3aGVuIGI0MyBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCiAgKiBUaGlzIF9hbHNvXyBldmFsdWF0ZXMgdGhlIGFyZyB3aXRoIGRlYnVnZ2luZyBkaXNhYmxlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCmluZGV4IGUwNGZjOTEuLjQ1ZTNkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwpAQCAtNTEsOCArNTEsOCBAQAogfTsKIAogc3RhdGljIGlubGluZQotc3RydWN0IGI0M19kZnNfZmlsZSAqIGZvcHNfdG9fZGZzX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyAqZGZvcHMpCitzdHJ1Y3QgYjQzX2Rmc19maWxlICpmb3BzX3RvX2Rmc19maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyAqZGZvcHMpCiB7CiAJdm9pZCAqcDsKIApAQCAtMzY3LDM0ICszNjcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiB3bC0+aXJxX2xvY2sgaXMgbG9ja2VkICovCi1zdGF0aWMgc3NpemVfdCB0c2ZfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKLXsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQl1NjQgdHNmOwotCi0JYjQzX3RzZl9yZWFkKGRldiwgJnRzZik7Ci0JZmFwcGVuZCgiMHglMDh4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludCkoKHRzZiAmIDB4RkZGRkZGRkYwMDAwMDAwMFVMTCkgPj4gMzIpLAotCQkodW5zaWduZWQgaW50KSh0c2YgJiAweEZGRkZGRkZGVUxMKSk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIHdsLT5pcnFfbG9jayBpcyBsb2NrZWQgKi8KLXN0YXRpYyBpbnQgdHNmX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1NjQgdHNmOwotCi0JaWYgKHNzY2FuZihidWYsICIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgmdHNmKSkgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYjQzX3RzZl93cml0ZShkZXYsIHRzZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3QgdHhzdGF0X3JlYWRfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkJY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKIHsKQEAgLTY5MSwxNSArNjYzLDIzIEBACiBCNDNfREVCVUdGU19GT1BTKG1taW8xNndyaXRlLCBOVUxMLCBtbWlvMTZ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKG1taW8zMnJlYWQsIG1taW8zMnJlYWRfX3JlYWRfZmlsZSwgbW1pbzMycmVhZF9fd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKG1taW8zMndyaXRlLCBOVUxMLCBtbWlvMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKHRzZiwgdHNmX3JlYWRfZmlsZSwgdHNmX3dyaXRlX2ZpbGUsIDEpOwogQjQzX0RFQlVHRlNfRk9QUyh0eHN0YXQsIHR4c3RhdF9yZWFkX2ZpbGUsIE5VTEwsIDApOwogQjQzX0RFQlVHRlNfRk9QUyhyZXN0YXJ0LCBOVUxMLCByZXN0YXJ0X3dyaXRlX2ZpbGUsIDEpOwogQjQzX0RFQlVHRlNfRk9QUyhsb2N0bHMsIGxvY3Rsc19yZWFkX2ZpbGUsIE5VTEwsIDApOwogCiAKLWludCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKK2Jvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCiB7Ci0JcmV0dXJuICEhKGRldi0+ZGZzZW50cnkgJiYgZGV2LT5kZnNlbnRyeS0+ZHluX2RlYnVnW2ZlYXR1cmVdKTsKKwlib29sIGVuYWJsZWQ7CisKKwllbmFibGVkID0gKGRldi0+ZGZzZW50cnkgJiYgZGV2LT5kZnNlbnRyeS0+ZHluX2RlYnVnW2ZlYXR1cmVdKTsKKwlpZiAodW5saWtlbHkoZW5hYmxlZCkpIHsKKwkJLyogRm9yY2UgZnVsbCBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGlmIHRoZSB1c2VyIGVuYWJsZWQKKwkJICogc29tZSBkeW5hbWljIGRlYnVnZ2luZyBmZWF0dXJlLiAqLworCQliNDNfbW9kcGFyYW1fdmVyYm9zZSA9IEI0M19WRVJCT1NJVFlfTUFYOworCX0KKworCXJldHVybiBlbmFibGVkOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfcmVtb3ZlX2R5bmFtaWNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtODA1LDcgKzc4NSw2IEBACiAJQUREX0ZJTEUobW1pbzE2d3JpdGUsIDAyMDApOwogCUFERF9GSUxFKG1taW8zMnJlYWQsIDA2MDApOwogCUFERF9GSUxFKG1taW8zMndyaXRlLCAwMjAwKTsKLQlBRERfRklMRSh0c2YsIDA2MDApOwogCUFERF9GSUxFKHR4c3RhdCwgMDQwMCk7CiAJQUREX0ZJTEUocmVzdGFydCwgMDIwMCk7CiAJQUREX0ZJTEUobG9jdGxzLCAwNDAwKTsKQEAgLTgzNCw3ICs4MTMsNiBAQAogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzE2d3JpdGUuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8zMnJlYWQuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8zMndyaXRlLmRlbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZmlsZV90c2YuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3R4c3RhdC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfcmVzdGFydC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbG9jdGxzLmRlbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAppbmRleCA3ODg2Y2JlLi5iOWQ0ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzE2d3JpdGU7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMnJlYWQ7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMndyaXRlOwotCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90c2Y7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3R4c3RhdDsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfdHhwb3dlcl9nOwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV9yZXN0YXJ0OwpAQCAtNzIsNyArNzEsNyBAQAogCXN0cnVjdCBkZW50cnkgKmR5bl9kZWJ1Z19kZW50cmllc1tfX0I0M19OUl9EWU5EQkddOwogfTsKIAotaW50IGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKTsKK2Jvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpOwogCiB2b2lkIGI0M19kZWJ1Z2ZzX2luaXQodm9pZCk7CiB2b2lkIGI0M19kZWJ1Z2ZzX2V4aXQodm9pZCk7CkBAIC04Myw3ICs4Miw3IEBACiAKICNlbHNlIC8qIENPTkZJR19CNDNfREVCVUcgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCitzdGF0aWMgaW5saW5lIGJvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggNmQ2NWEwMi4uMGNjODA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogCisvKiBSZXF1aXJlZCBudW1iZXIgb2YgVFggRE1BIHNsb3RzIHBlciBUWCBmcmFtZS4KKyAqIFRoaXMgY3VycmVudGx5IGlzIDIsIGJlY2F1c2Ugd2UgcHV0IHRoZSBoZWFkZXIgYW5kIHRoZSBpZWVlODAyMTEgZnJhbWUKKyAqIGludG8gc2VwYXJhdGUgc2xvdHMuICovCisjZGVmaW5lIFRYX1NMT1RTX1BFUl9GUkFNRQkyCisKKwogLyogMzJiaXQgRE1BIG9wcy4gKi8KIHN0YXRpYwogc3RydWN0IGI0M19kbWFkZXNjX2dlbmVyaWMgKm9wMzJfaWR4MmRlc2Moc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLApAQCAtNzQsOCArODAsNyBAQAogCWFkZHJleHQgPSAodTMyKSAoZG1hYWRkciAmIFNTQl9ETUFfVFJBTlNMQVRJT05fTUFTSykKIAkgICAgPj4gU1NCX0RNQV9UUkFOU0xBVElPTl9TSElGVDsKIAlhZGRyIHw9IHNzYl9kbWFfdHJhbnNsYXRpb24ocmluZy0+ZGV2LT5kZXYpOwotCWN0bCA9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JICAgICYgQjQzX0RNQTMyX0RDVExfQllURUNOVDsKKwljdGwgPSBidWZzaXplICYgQjQzX0RNQTMyX0RDVExfQllURUNOVDsKIAlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCiAJCWN0bCB8PSBCNDNfRE1BMzJfRENUTF9EVEFCTEVFTkQ7CiAJaWYgKHN0YXJ0KQpAQCAtMTc3LDggKzE4Miw3IEBACiAJCWN0bDAgfD0gQjQzX0RNQTY0X0RDVEwwX0ZSQU1FRU5EOwogCWlmIChpcnEpCiAJCWN0bDAgfD0gQjQzX0RNQTY0X0RDVEwwX0lSUTsKLQljdGwxIHw9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JICAgICYgQjQzX0RNQTY0X0RDVEwxX0JZVEVDTlQ7CisJY3RsMSB8PSBidWZzaXplICYgQjQzX0RNQTY0X0RDVEwxX0JZVEVDTlQ7CiAJY3RsMSB8PSAoYWRkcmV4dCA8PCBCNDNfRE1BNjRfRENUTDFfQUREUkVYVF9TSElGVCkKIAkgICAgJiBCNDNfRE1BNjRfRENUTDFfQUREUkVYVF9NQVNLOwogCkBAIC01NzYsMTIgKzU4MCwxMSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsCiAJCQkJCSByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKLQl9Ci0KLQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7Ci0JCWI0M2VycihyaW5nLT5kZXYtPndsLCAiUlggRE1BIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAtRUlPOworCQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7CisJCQliNDNlcnIocmluZy0+ZGV2LT53bCwgIlJYIERNQSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfQogCiAJbWV0YS0+c2tiID0gc2tiOwpAQCAtODMwLDkgKzgzMyw2IEBACiAJCWlmIChyaW5nLT5pbmRleCA9PSAwKSB7CiAJCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQjQzX0RNQTBfUlhfQlVGRkVSU0laRTsKIAkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQjQzX0RNQTBfUlhfRlJBTUVPRkZTRVQ7Ci0JCX0gZWxzZSBpZiAocmluZy0+aW5kZXggPT0gMykgewotCQkJcmluZy0+cnhfYnVmZmVyc2l6ZSA9IEI0M19ETUEzX1JYX0JVRkZFUlNJWkU7Ci0JCQlyaW5nLT5mcmFtZW9mZnNldCA9IEI0M19ETUEzX1JYX0ZSQU1FT0ZGU0VUOwogCQl9IGVsc2UKIAkJCUI0M19XQVJOX09OKDEpOwogCX0KQEAgLTg0Miw3ICs4NDIsMTAgQEAKICNlbmRpZgogCiAJaWYgKGZvcl90eCkgewotCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMsCisJCS8qIEFzc3VtcHRpb246IEI0M19UWFJJTkdfU0xPVFMgY2FuIGJlIGRpdmlkZWQgYnkgVFhfU0xPVFNfUEVSX0ZSQU1FICovCisJCUJVSUxEX0JVR19PTihCNDNfVFhSSU5HX1NMT1RTICUgVFhfU0xPVFNfUEVSX0ZSQU1FICE9IDApOworCisJCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhyaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRSwKIAkJCQkJICAgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKQEAgLTg1OCw3ICs4NjEsNyBAQAogCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksIDEpKSB7CiAJCQkvKiB1Z2ggcmVhbGxvYyAqLwogCQkJa2ZyZWUocmluZy0+dHhoZHJfY2FjaGUpOwotCQkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzLAorCQkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FLAogCQkJCQkJICAgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCQkgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCQkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKQEAgLTExNDksNyArMTE1MiwxMCBAQAogCXUxNiBjb29raWU7CiAJc2l6ZV90IGhkcnNpemUgPSBiNDNfdHhoZHJfc2l6ZShyaW5nLT5kZXYpOwogCi0jZGVmaW5lIFNMT1RTX1BFUl9QQUNLRVQgIDIKKwkvKiBJbXBvcnRhbnQgbm90ZTogSWYgdGhlIG51bWJlciBvZiB1c2VkIERNQSBzbG90cyBwZXIgVFggZnJhbWUKKwkgKiBpcyBjaGFuZ2VkIGhlcmUsIHRoZSBUWF9TTE9UU19QRVJfRlJBTUUgZGVmaW5pdGlvbiBhdCB0aGUgdG9wIG9mCisJICogdGhlIGZpbGUgaGFzIHRvIGJlIHVwZGF0ZWQsIHRvbyEKKwkgKi8KIAogCW9sZF90b3Bfc2xvdCA9IHJpbmctPmN1cnJlbnRfc2xvdDsKIAlvbGRfdXNlZF9zbG90cyA9IHJpbmctPnVzZWRfc2xvdHM7CkBAIC0xMTU5LDcgKzExNjUsNyBAQAogCWRlc2MgPSBvcHMtPmlkeDJkZXNjKHJpbmcsIHNsb3QsICZtZXRhX2hkcik7CiAJbWVtc2V0KG1ldGFfaGRyLCAwLCBzaXplb2YoKm1ldGFfaGRyKSk7CiAKLQloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlW3Nsb3QgKiBoZHJzaXplXSk7CisJaGVhZGVyID0gJihyaW5nLT50eGhkcl9jYWNoZVsoc2xvdCAvIFRYX1NMT1RTX1BFUl9GUkFNRSkgKiBoZHJzaXplXSk7CiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKIAkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgaW5mbywgY29va2llKTsKQEAgLTEyNTQsOCArMTI2MCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgRE1BIHJpbmdzLiAqLwotc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqIHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICB1OCBxdWV1ZV9wcmlvKQorc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgdTggcXVldWVfcHJpbykKIHsKIAlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmc7CiAKQEAgLTEzMDYsMTcgKzEzMTIsMTkgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCiAJQjQzX1dBUk5fT04oIXJpbmctPnR4KTsKLQlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpKSB7Ci0JCWI0M3dhcm4oZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7Ci0JCWVyciA9IC1FTk9TUEM7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiAJLyogQ2hlY2sgaWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGluIG1hYzgwMjExLAogCSAqIGJ1dCB3ZSBnb3QgY2FsbGVkIG5ldmVydGhlbGVzcy4KIAkgKiBUaGF0IHdvdWxkIGJlIGEgbWFjODAyMTEgYnVnLiAqLwogCUI0M19XQVJOX09OKHJpbmctPnN0b3BwZWQpOwogCisJaWYgKHVubGlrZWx5KGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpKSB7CisJCWI0M3dhcm4oZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7CisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCiAJICogc28gVFggc3RhdHVzIGhhbmRsaW5nIGNhbiB1c2UgaXQuIFRoZSBxdWV1ZSB0byByaW5nIG1hcHBpbmcgaXMKIAkgKiBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgaXQgcGVyIGZyYW1lLiAqLwpAQCAtMTMzNSw3ICsxMzQzLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAlyaW5nLT5ucl90eF9wYWNrZXRzKys7Ci0JaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkgfHwKKwlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpIHx8CiAJICAgIHNob3VsZF9pbmplY3Rfb3ZlcmZsb3cocmluZykpIHsKIAkJLyogVGhpcyBUWCByaW5nIGlzIGZ1bGwuICovCiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldi0+d2wtPmh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CkBAIC0xNDE3LDkgKzE0MjUsOCBAQAogCQkJYnJlYWs7CiAJCXNsb3QgPSBuZXh0X3Nsb3QocmluZywgc2xvdCk7CiAJfQotCWRldi0+c3RhdHMubGFzdF90eCA9IGppZmZpZXM7CiAJaWYgKHJpbmctPnN0b3BwZWQpIHsKLQkJQjQzX1dBUk5fT04oZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpOworCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKTsKIAkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LT53bC0+aHcsIHJpbmctPnF1ZXVlX3ByaW8pOwogCQlyaW5nLT5zdG9wcGVkID0gMDsKIAkJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfRE1BVkVSQk9TRSkpIHsKQEAgLTE0NDIsOCArMTQ0OSw4IEBACiAJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKKwkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKKwkJc3RhdHNbaV0ubGltaXQgPSByaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKIAkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGQxZWI1YzAuLjA1ZGRlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTEsMTQgKzEsMTIgQEAKICNpZm5kZWYgQjQzX0RNQV9IXwogI2RlZmluZSBCNDNfRE1BX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjaW5jbHVkZSAiYjQzLmgiCiAKKwogLyogRE1BLUludGVycnVwdCByZWFzb25zLiAqLwogI2RlZmluZSBCNDNfRE1BSVJRX0ZBVEFMTUFTSwkoKDEgPDwgMTApIHwgKDEgPDwgMTEpIHwgKDEgPDwgMTIpIFwKIAkJCQkJIHwgKDEgPDwgMTQpIHwgKDEgPDwgMTUpKQpAQCAtMTYxLDE0ICsxNTksMTMgQEAKIAogLyogTWlzYyBETUEgY29uc3RhbnRzICovCiAjZGVmaW5lIEI0M19ETUFfUklOR01FTVNJWkUJCVBBR0VfU0laRQotI2RlZmluZSBCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVAkzMAotI2RlZmluZSBCNDNfRE1BM19SWF9GUkFNRU9GRlNFVAkwCisjZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCQkzMAogCiAvKiBETUEgZW5naW5lIHR1bmluZyBrbm9icyAqLwotI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkxMjgKKyNkZWZpbmUgQjQzX1RYUklOR19TTE9UUwkJMjU2CiAjZGVmaW5lIEI0M19SWFJJTkdfU0xPVFMJCTY0Ci0jZGVmaW5lIEI0M19ETUEwX1JYX0JVRkZFUlNJWkUJKDIzMDQgKyAxMDApCi0jZGVmaW5lIEI0M19ETUEzX1JYX0JVRkZFUlNJWkUJMTYKKyNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkJSUVFRTgwMjExX01BWF9GUkFNRV9MRU4KKwogCiBzdHJ1Y3Qgc2tfYnVmZjsKIHN0cnVjdCBiNDNfcHJpdmF0ZTsKQEAgLTIxNSw3ICsyMTIsNyBAQAogCXZvaWQgKmRlc2NiYXNlOwogCS8qIE1ldGEgZGF0YSBhYm91dCBhbGwgZGVzY3JpcHRvcnMuICovCiAJc3RydWN0IGI0M19kbWFkZXNjX21ldGEgKm1ldGE7Ci0JLyogQ2FjaGUgb2YgVFggaGVhZGVycyBmb3IgZWFjaCBzbG90LgorCS8qIENhY2hlIG9mIFRYIGhlYWRlcnMgZm9yIGVhY2ggVFggZnJhbWUuCiAJICogVGhpcyBpcyB0byBhdm9pZCBhbiBhbGxvY2F0aW9uIG9uIGVhY2ggVFguCiAJICogVGhpcyBpcyBOVUxMIGZvciBhbiBSWCByaW5nLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYwppbmRleCA2YTE4YTE0Li4yMmQwZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYwpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIAotc3RhdGljIHN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfZmluZF9sb19jYWxpYihzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8sCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKK3N0YXRpYyBzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfZmluZF9sb19jYWxpYihzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8sCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19sb19jYWxpYiAqYzsKQEAgLTEzOCw3ICsxMzgsNyBAQAogICogInBhZF9taXhfZ2FpbiIgaXMgdGhlIFBBRCBNaXhlciBHYWluLgogICovCiBzdGF0aWMgdTE2IGxvX3R4Y3RsX3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICB1MTYgKiB2YWx1ZSwgdTE2ICogcGFkX21peF9nYWluKQorCQkJCSAgIHUxNiAqdmFsdWUsIHUxNiAqcGFkX21peF9nYWluKQogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJdTE2IHJlZywgdiwgcGFkbWl4OwpAQCAtMjI1LDE0ICsyMjUsMTIgQEAKIAkJCQlyYWRpb19wY3RsX3JlZyA9IHRtcDsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkgICAgICAmIDB4RkZGMCkgfCByYWRpb19wY3RsX3JlZyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIHJhZGlvX3BjdGxfcmVnKTsKIAliNDNfZ3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oZGV2LCAyKTsKIAogCXJlZyA9IGxvX3R4Y3RsX3JlZ2lzdGVyX3RhYmxlKGRldiwgJm1hc2ssIE5VTEwpOwogCW1hc2sgPSB+bWFzazsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHJlZywgYjQzX3JhZGlvX3JlYWQxNihkZXYsIHJlZykKLQkJCSAgJiBtYXNrKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIHJlZywgbWFzayk7CiAKIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQlpbnQgaSwgajsKQEAgLTI0MiwxNCArMjQwLDEwIEBACiAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHhfbWFnbl92YWx1ZXMpOyBpKyspIHsKIAkJCXR4X21hZ24gPSB0eF9tYWduX3ZhbHVlc1tpXTsKLQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwKLQkJCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCSAgICYgMHhGRjBGKSB8IHR4X21hZ24pOworCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGMEYsIHR4X21hZ24pOwogCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUodHhfYmlhc192YWx1ZXMpOyBqKyspIHsKIAkJCQl0eF9iaWFzID0gdHhfYmlhc192YWx1ZXNbal07Ci0JCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCQkgICAmIDB4RkZGMCkgfCB0eF9iaWFzKTsKKwkJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkZGMCwgdHhfYmlhcyk7CiAJCQkJZmVlZHRocm91Z2ggPQogCQkJCSAgICBsb19tZWFzdXJlX2ZlZWR0aHJvdWdoKGRldiwgMCwgcGdhLAogCQkJCQkJCSAgIHRyc3dfcngpOwpAQCAtMjY5LDggKzI2Myw3IEBACiAJfSBlbHNlIHsKIAkJbG8tPnR4X21hZ24gPSAwOwogCQlsby0+dHhfYmlhcyA9IDA7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJICAmIDB4RkZGMCk7CS8qIFRYIGJpYXMgPT0gMCAqLworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4NTIsIDB4RkZGMCk7CS8qIFRYIGJpYXMgPT0gMCAqLwogCX0KIAlsby0+dHhjdGxfbWVhc3VyZWRfdGltZSA9IGppZmZpZXM7CiB9CkBAIC00MDYsMTggKzM5OSwxMCBAQAogCQlzYXYtPnBoeV9jY2tfMTQgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSk7CiAJCXNhdi0+cGh5X2hwd3JfdHNzaWN0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0hQV1JfVFNTSUNUTCkKLQkJCSAgICAgIHwgMHgxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpKQotCQkJICAgICAgfCAweDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfREFDQ1RMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9EQUNDVEwpCi0JCQkgICAgICB8IDB4NDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgxNCksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSkKLQkJCSAgICAgIHwgMHgyMDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMLCAweDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLCAweDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHg0MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgxNCksIDB4MjAwKTsKIAl9CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CICYmCiAJICAgIHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA8IDYpIHsKQEAgLTQzNCwxNyArNDE5LDEwIEBACiAJCXNhdi0+cGh5X2Nja18zRSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4M0UpKTsKIAkJc2F2LT5waHlfY3JzMCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ1JTMCwgMHg3RkZGKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsIDB4MDAwMyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwgMHhGRkZDKTsKIAkJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSB7CiAJCQlpZiAoKHBoeS0+cmV2ID49IDcpICYmCiAJCQkgICAgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9FWFRMTkEpKSB7CkBAIC01NTgsOCArNTM2LDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIHNhdi0+cmFkaW9fN0EpOwogCWlmICghaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQl0bXAgPSBzYXYtPnJhZGlvXzUyOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGMEYpIHwgdG1wKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGMEYsIHRtcCk7CiAJfQogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIHNhdi0+cmVnXzNFMik7CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CICYmCkBAIC03NTQsOSArNzMxLDkgQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX2xvX2NhbGliICogYjQzX2NhbGlicmF0ZV9sb19zZXR0aW5nKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCitzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAlzdHJ1Y3QgYjQzX3BoeV9nICpncGh5ID0gcGh5LT5nOwpAQCAtNzc4LDEyICs3NTUsOCBAQAogCiAJdHhjdGxfcmVnID0gbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoZGV2LCAmdHhjdGxfdmFsdWUsICZwYWRfbWl4X2dhaW4pOwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpICYgMHhGRkYwKQotCQkJICB8IHJmYXR0LT5hdHQpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgdHhjdGxfcmVnLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIHR4Y3RsX3JlZykgJiB+dHhjdGxfdmFsdWUpCi0JCQkgIHwgKHJmYXR0LT53aXRoX3BhZG1peCkgPyB0eGN0bF92YWx1ZSA6IDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCByZmF0dC0+YXR0KTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIHR4Y3RsX3JlZywgfnR4Y3RsX3ZhbHVlLCAocmZhdHQtPndpdGhfcGFkbWl4ID8gdHhjdGxfdmFsdWUgOjApKTsKIAogCW1heF9yeF9nYWluID0gcmZhdHQtPmF0dCAqIDI7CiAJbWF4X3J4X2dhaW4gKz0gYmJhdHQtPmF0dCAvIDI7CkBAIC04MjQsOSArNzk3LDkgQEAKIC8qIEdldCBhIGNhbGlicmF0ZWQgTE8gc2V0dGluZyBmb3IgdGhlIGdpdmVuIGF0dGVudWF0aW9uIHZhbHVlcy4KICAqIE1pZ2h0IHJldHVybiBhIE5VTEwgcG9pbnRlciB1bmRlciBPT00hICovCiBzdGF0aWMKLXN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCWNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCQkJY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCitzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M190eHBvd2VyX2xvX2NvbnRyb2wgKmxvID0gZGV2LT5waHkuZy0+bG9fY29udHJvbDsKIAlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggYzc4OGJhZC4uNDg5NmUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC00LDcgKzQsNyBAQAogCiAgIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4KICAgQ29weXJpZ2h0IChjKSAyMDA1IFN0ZWZhbm8gQnJpdmlvIDxzdGVmYW5vLmJyaXZpb0Bwb2xpbWkuaXQ+Ci0gIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogICBDb3B5cmlnaHQgKGMpIDIwMDUgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+CiAgIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KIApAQCAtODgsNiArODgsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChidGNvZXgsIG1vZHBhcmFtX2J0Y29leCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnRjb2V4LCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0YW5jZSAoZGVmYXVsdCBvbikiKTsKIAoraW50IGI0M19tb2RwYXJhbV92ZXJib3NlID0gQjQzX1ZFUkJPU0lUWV9ERUZBVUxUOworbW9kdWxlX3BhcmFtX25hbWVkKHZlcmJvc2UsIGI0M19tb2RwYXJhbV92ZXJib3NlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2ZXJib3NlLCAiTG9nIG1lc3NhZ2UgdmVyYm9zaXR5OiAwPWVycm9yLCAxPXdhcm4sIDI9aW5mbyhkZWZhdWx0KSwgMz1kZWJ1ZyIpOworCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NiX2RldmljZV9pZCBiNDNfc3NiX3RibFtdID0gewogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgNSksCkBAIC05Nyw2ICsxMDEsOCBAQAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTApLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTEpLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTMpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTUpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTYpLAogCVNTQl9ERVZUQUJMRV9FTkQKIH07CiAKQEAgLTI5OCw2ICszMDQsOCBAQAogewogCXZhX2xpc3QgYXJnczsKIAorCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfSU5GTykKKwkJcmV0dXJuOwogCWlmICghYjQzX3JhdGVsaW1pdCh3bCkpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwpAQCAtMzExLDYgKzMxOSw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9FUlJPUikKKwkJcmV0dXJuOwogCWlmICghYjQzX3JhdGVsaW1pdCh3bCkpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwpAQCAtMzI0LDYgKzMzNCw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9XQVJOKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMzMsMTggKzM0NSwxOCBAQAogCXZhX2VuZChhcmdzKTsKIH0KIAotI2lmIEI0M19ERUJVRwogdm9pZCBiNDNkYmcoc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKIAorCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfREVCVUcpCisJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCXByaW50ayhLRVJOX0RFQlVHICJiNDMtJXMgZGVidWc6ICIsCiAJICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIik7CiAJdnByaW50ayhmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIH0KLSNlbmRpZiAvKiBERUJVRyAqLwogCiBzdGF0aWMgdm9pZCBiNDNfcmFtX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgdTMyIHZhbCkKIHsKQEAgLTUwMCw3ICs1MTIsNyBAQAogfQogCiAvKiBSZWFkIEhvc3RGbGFncyAqLwotdTY0IGI0M19oZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKiBkZXYpCit1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXU2NCByZXQ7CiAKQEAgLTUyNiw1MiArNTM4LDIwIEBACiAJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfSE9TVEZISSwgaGkpOwogfQogCi12b2lkIGI0M190c2ZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCAqIHRzZikKK3ZvaWQgYjQzX3RzZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0ICp0c2YpCiB7Ci0JLyogV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBBcyB3ZSByZWFkIHRoZSBUU0YgZnJvbSBtdWx0aXBsZQotCSAqIHJlZ2lzdGVycywgd2Ugc2hvdWxkIHRha2UgY2FyZSBvZiByZWdpc3RlciBvdmVyZmxvd3MuCi0JICogSW4gdGhlb3J5LCB0aGUgd2hvbGUgdHNmIHJlYWQgcHJvY2VzcyBzaG91bGQgYmUgYXRvbWljLgotCSAqIFdlIHRyeSB0byBiZSBhdG9taWMgaGVyZSwgYnkgcmVzdGFyaW5nIHRoZSByZWFkIHByb2Nlc3MsCi0JICogaWYgYW55IG9mIHRoZSBoaWdoIHJlZ2lzdGVycyBjaGFuZ2VkIChvdmVyZmxldykuCi0JICovCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7Ci0JCXUzMiBsb3csIGhpZ2gsIGhpZ2gyOworCXUzMiBsb3csIGhpZ2g7CiAKLQkJZG8gewotCQkJaGlnaCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCQlsb3cgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVyk7Ci0JCQloaWdoMiA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCX0gd2hpbGUgKHVubGlrZWx5KGhpZ2ggIT0gaGlnaDIpKTsKKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCAzKTsKIAotCQkqdHNmID0gaGlnaDsKLQkJKnRzZiA8PD0gMzI7Ci0JCSp0c2YgfD0gbG93OwotCX0gZWxzZSB7Ci0JCXU2NCB0bXA7Ci0JCXUxNiB2MCwgdjEsIHYyLCB2MzsKLQkJdTE2IHRlc3QxLCB0ZXN0MiwgdGVzdDM7CisJLyogVGhlIGhhcmR3YXJlIGd1YXJhbnRlZXMgdXMgYW4gYXRvbWljIHJlYWQsIGlmIHdlCisJICogcmVhZCB0aGUgbG93IHJlZ2lzdGVyIGZpcnN0LiAqLworCWxvdyA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XKTsKKwloaWdoID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKIAotCQlkbyB7Ci0JCQl2MyA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMyk7Ci0JCQl2MiA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMik7Ci0JCQl2MSA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMSk7Ci0JCQl2MCA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMCk7Ci0KLQkJCXRlc3QzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8zKTsKLQkJCXRlc3QyID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8yKTsKLQkJCXRlc3QxID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8xKTsKLQkJfSB3aGlsZSAodjMgIT0gdGVzdDMgfHwgdjIgIT0gdGVzdDIgfHwgdjEgIT0gdGVzdDEpOwotCi0JCSp0c2YgPSB2MzsKLQkJKnRzZiA8PD0gNDg7Ci0JCXRtcCA9IHYyOwotCQl0bXAgPDw9IDMyOwotCQkqdHNmIHw9IHRtcDsKLQkJdG1wID0gdjE7Ci0JCXRtcCA8PD0gMTY7Ci0JCSp0c2YgfD0gdG1wOwotCQkqdHNmIHw9IHYwOwotCX0KKwkqdHNmID0gaGlnaDsKKwkqdHNmIDw8PSAzMjsKKwkqdHNmIHw9IGxvdzsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3RpbWVfbG9jayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01OTgsMzUgKzU3OCwxOCBAQAogCiBzdGF0aWMgdm9pZCBiNDNfdHNmX3dyaXRlX2xvY2tlZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB0c2YpCiB7Ci0JLyogQmUgY2FyZWZ1bCB3aXRoIHRoZSBpbi1wcm9ncmVzcyB0aW1lci4KLQkgKiBGaXJzdCB6ZXJvIG91dCB0aGUgbG93IHJlZ2lzdGVyLCBzbyB3ZSBoYXZlIGEgZnVsbAotCSAqIHJlZ2lzdGVyLW92ZXJmbG93IGR1cmF0aW9uIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCi0JICovCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7Ci0JCXUzMiBsbyA9ICh0c2YgJiAweDAwMDAwMDAwRkZGRkZGRkZVTEwpOwotCQl1MzIgaGkgPSAodHNmICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKKwl1MzIgbG93LCBoaWdoOwogCi0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgMCk7Ci0JCW1taW93YigpOwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdILCBoaSk7Ci0JCW1taW93YigpOwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1csIGxvKTsKLQl9IGVsc2UgewotCQl1MTYgdjAgPSAodHNmICYgMHgwMDAwMDAwMDAwMDBGRkZGVUxMKTsKLQkJdTE2IHYxID0gKHRzZiAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTCkgPj4gMTY7Ci0JCXUxNiB2MiA9ICh0c2YgJiAweDAwMDBGRkZGMDAwMDAwMDBVTEwpID4+IDMyOwotCQl1MTYgdjMgPSAodHNmICYgMHhGRkZGMDAwMDAwMDAwMDAwVUxMKSA+PiA0ODsKKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCAzKTsKIAotCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1RTRl8wLCAwKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzMsIHYzKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzIsIHYyKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzEsIHYxKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzAsIHYwKTsKLQl9CisJbG93ID0gdHNmOworCWhpZ2ggPSAodHNmID4+IDMyKTsKKwkvKiBUaGUgaGFyZHdhcmUgZ3VhcmFudGVlcyB1cyBhbiBhdG9taWMgd3JpdGUsIGlmIHdlCisJICogd3JpdGUgdGhlIGxvdyByZWdpc3RlciBmaXJzdC4gKi8KKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1csIGxvdyk7CisJbW1pb3diKCk7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCwgaGlnaCk7CisJbW1pb3diKCk7CiB9CiAKIHZvaWQgYjQzX3RzZl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB0c2YpCkBAIC02MzcsNyArNjAwLDcgQEAKIH0KIAogc3RhdGljCi12b2lkIGI0M19tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgY29uc3QgdTggKiBtYWMpCit2b2lkIGI0M19tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgY29uc3QgdTggKm1hYykKIHsKIAlzdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXSA9IHsgMCB9OwogCXUxNiBkYXRhOwpAQCAtODI3LDcgKzc5MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGtleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCSAgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sIGNvbnN0IHU4ICoga2V5KQorCQkgICAgICB1OCBpbmRleCwgdTggYWxnb3JpdGhtLCBjb25zdCB1OCAqa2V5KQogewogCXVuc2lnbmVkIGludCBpOwogCXUzMiBvZmZzZXQ7CkBAIC04NDksNyArODEyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGtleW1hY193cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGluZGV4LCBjb25zdCB1OCAqIGFkZHIpCitzdGF0aWMgdm9pZCBrZXltYWNfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgY29uc3QgdTggKmFkZHIpCiB7CiAJdTMyIGFkZHJ0bXBbMl0gPSB7IDAsIDAsIH07CiAJdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKQEAgLTg5OSw3ICs4NjIsNyBAQAogCiBzdGF0aWMgdm9pZCBkb19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgY29uc3QgdTggKiBrZXksIHNpemVfdCBrZXlfbGVuLCBjb25zdCB1OCAqIG1hY19hZGRyKQorCQkJIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLCBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJdTggYnVmW0I0M19TRUNfS0VZU0laRV0gPSB7IDAsIH07CiAJdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKQEAgLTkyMyw4ICs4ODYsOCBAQAogCiBzdGF0aWMgaW50IGI0M19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIGludCBpbmRleCwgdTggYWxnb3JpdGhtLAotCQkJIGNvbnN0IHU4ICoga2V5LCBzaXplX3Qga2V5X2xlbiwKLQkJCSBjb25zdCB1OCAqIG1hY19hZGRyLAorCQkJIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAorCQkJIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mKQogewogCWludCBpOwpAQCAtOTM3LDggKzkwMCw3IEBACiAJCUI0M19XQVJOX09OKGRldi0+a2V5W2ldLmtleWNvbmYgPT0ga2V5Y29uZik7CiAJfQogCWlmIChpbmRleCA8IDApIHsKLQkJLyogRWl0aGVyIHBhaXJ3aXNlIGtleSBvciBhZGRyZXNzIGlzIDAwOjAwOjAwOjAwOjAwOjAwCi0JCSAqIGZvciB0cmFuc21pdC1vbmx5IGtleXMuIFNlYXJjaCB0aGUgaW5kZXguICovCisJCS8qIFBhaXJ3aXNlIGtleS4gR2V0IGFuIGVtcHR5IHNsb3QgZm9yIHRoZSBrZXkuICovCiAJCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpCiAJCQlzdGFfa2V5c19zdGFydCA9IDQ7CiAJCWVsc2UKQEAgLTk1MSw3ICs5MTMsNyBAQAogCQkJfQogCQl9CiAJCWlmIChpbmRleCA8IDApIHsKLQkJCWI0M2VycihkZXYtPndsLCAiT3V0IG9mIGhhcmR3YXJlIGtleSBtZW1vcnlcbiIpOworCQkJYjQzd2FybihkZXYtPndsLCAiT3V0IG9mIGhhcmR3YXJlIGtleSBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAl9IGVsc2UKQEAgLTEzMjQsNyArMTI4Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGI0M193cml0ZV90ZW1wbGF0ZV9jb21tb24oc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgIGNvbnN0IHU4ICogZGF0YSwgdTE2IHNpemUsCisJCQkJICAgICAgY29uc3QgdTggKmRhdGEsIHUxNiBzaXplLAogCQkJCSAgICAgIHUxNiByYW1fb2Zmc2V0LAogCQkJCSAgICAgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsIHU4IHJhdGUpCiB7CkBAIC0xNTE0LDkgKzE0NzYsOSBAQAogICogMikgUGF0Y2hpbmcgZHVyYXRpb24gZmllbGQKICAqIDMpIFN0cmlwcGluZyBUSU0KICAqLwotc3RhdGljIGNvbnN0IHU4ICogYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgIHUxNiAqZGVzdF9zaXplLAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKK3N0YXRpYyBjb25zdCB1OCAqYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgdTE2ICpkZXN0X3NpemUsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7CiAJY29uc3QgdTggKnNyY19kYXRhOwogCXU4ICpkZXN0X2RhdGE7CkBAIC0xOTgyLDcgKzE5NDQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKIHsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3LT5kYXRhKTsKIAlmdy0+ZGF0YSA9IE5VTEw7CkBAIC0xOTkxLDMxICsxOTUzLDMwIEBACiAKIHN0YXRpYyB2b2lkIGI0M19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnVjb2RlKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnBjbSk7Ci0JZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFscyk7Ci0JZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFsc19iYW5kKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy51Y29kZSk7CisJYjQzX2RvX3JlbGVhc2VfZncoJmRldi0+ZncucGNtKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFscyk7CisJYjQzX2RvX3JlbGVhc2VfZncoJmRldi0+ZncuaW5pdHZhbHNfYmFuZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19wcmludF9md19oZWxwdGV4dChzdHJ1Y3QgYjQzX3dsICp3bCwgYm9vbCBlcnJvcikKIHsKLQljb25zdCBjaGFyICp0ZXh0OworCWNvbnN0IGNoYXIgdGV4dFtdID0KKwkJIllvdSBtdXN0IGdvIHRvICIgXAorCQkiaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9iNDMjZGV2aWNlZmlybXdhcmUgIiBcCisJCSJhbmQgZG93bmxvYWQgdGhlIGNvcnJlY3QgZmlybXdhcmUgZm9yIHRoaXMgZHJpdmVyIHZlcnNpb24uICIgXAorCQkiUGxlYXNlIGNhcmVmdWxseSByZWFkIGFsbCBpbnN0cnVjdGlvbnMgb24gdGhpcyB3ZWJzaXRlLlxuIjsKIAotCXRleHQgPSAiWW91IG11c3QgZ28gdG8gIgotCSAgICAgICAiaHR0cDovL2xpbnV4d2lyZWxlc3Mub3JnL2VuL3VzZXJzL0RyaXZlcnMvYjQzI2RldmljZWZpcm13YXJlICIKLQkgICAgICAgImFuZCBkb3dubG9hZCB0aGUgbGF0ZXN0IGZpcm13YXJlICh2ZXJzaW9uIDQpLlxuIjsKIAlpZiAoZXJyb3IpCiAJCWI0M2Vycih3bCwgdGV4dCk7CiAJZWxzZQogCQliNDN3YXJuKHdsLCB0ZXh0KTsKIH0KIAotc3RhdGljIGludCBkb19yZXF1ZXN0X2Z3KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSBjb25zdCBjaGFyICpuYW1lLAotCQkJIHN0cnVjdCBiNDNfZmlybXdhcmVfZmlsZSAqZncsCi0JCQkgYm9vbCBzaWxlbnQpCitpbnQgYjQzX2RvX3JlcXVlc3RfZncoc3RydWN0IGI0M19yZXF1ZXN0X2Z3X2NvbnRleHQgKmN0eCwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKIHsKLQljaGFyIHBhdGhbc2l6ZW9mKG1vZHBhcmFtX2Z3cG9zdGZpeCkgKyAzMl07CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpibG9iOwogCXN0cnVjdCBiNDNfZndfaGVhZGVyICpoZHI7CiAJdTMyIHNpemU7CkBAIC0yMDIzLDI5ICsxOTg0LDQ5IEBACiAKIAlpZiAoIW5hbWUpIHsKIAkJLyogRG9uJ3QgZmV0Y2ggYW55dGhpbmcuIEZyZWUgcG9zc2libHkgY2FjaGVkIGZpcm13YXJlLiAqLwotCQlkb19yZWxlYXNlX2Z3KGZ3KTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBrZWVwIGl0IGFueXdheSwgdG8gc2F2ZSBzb21lIGhlYWRhY2hlCisJCSAqIG9uIHN1c3BlbmQvcmVzdW1lIHdpdGggbXVsdGliYW5kIGRldmljZXMuICovCisJCWI0M19kb19yZWxlYXNlX2Z3KGZ3KTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChmdy0+ZmlsZW5hbWUpIHsKLQkJaWYgKHN0cmNtcChmdy0+ZmlsZW5hbWUsIG5hbWUpID09IDApCisJCWlmICgoZnctPnR5cGUgPT0gY3R4LT5yZXFfdHlwZSkgJiYKKwkJICAgIChzdHJjbXAoZnctPmZpbGVuYW1lLCBuYW1lKSA9PSAwKSkKIAkJCXJldHVybiAwOyAvKiBBbHJlYWR5IGhhdmUgdGhpcyBmdy4gKi8KIAkJLyogRnJlZSB0aGUgY2FjaGVkIGZpcm13YXJlIGZpcnN0LiAqLwotCQlkb19yZWxlYXNlX2Z3KGZ3KTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlzIGxhdGVyIGFmdGVyIHdlIHN1Y2Nlc3NmdWxseQorCQkgKiBnb3QgdGhlIG5ldyBmdy4gVGhpcyBjb3VsZCByZWR1Y2UgaGVhZGFjaGUgd2l0aCBtdWx0aWJhbmQgZGV2aWNlcy4KKwkJICogV2UgY291bGQgYWxzbyByZWRlc2lnbiB0aGlzIHRvIGNhY2hlIHRoZSBmaXJtd2FyZSBmb3IgYWxsIHBvc3NpYmxlCisJCSAqIGJhbmRzIGFsbCB0aGUgdGltZS4gKi8KKwkJYjQzX2RvX3JlbGVhc2VfZncoZncpOwogCX0KIAotCXNucHJpbnRmKHBhdGgsIEFSUkFZX1NJWkUocGF0aCksCi0JCSAiYjQzJXMvJXMuZnciLAotCQkgbW9kcGFyYW1fZndwb3N0Zml4LCBuYW1lKTsKLQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZibG9iLCBwYXRoLCBkZXYtPmRldi0+ZGV2KTsKKwlzd2l0Y2ggKGN0eC0+cmVxX3R5cGUpIHsKKwljYXNlIEI0M19GV1RZUEVfUFJPUFJJRVRBUlk6CisJCXNucHJpbnRmKGN0eC0+ZnduYW1lLCBzaXplb2YoY3R4LT5md25hbWUpLAorCQkJICJiNDMlcy8lcy5mdyIsCisJCQkgbW9kcGFyYW1fZndwb3N0Zml4LCBuYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRldUWVBFX09QRU5TT1VSQ0U6CisJCXNucHJpbnRmKGN0eC0+ZnduYW1lLCBzaXplb2YoY3R4LT5md25hbWUpLAorCQkJICJiNDMtb3BlbiVzLyVzLmZ3IiwKKwkJCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmJsb2IsIGN0eC0+ZnduYW1lLCBjdHgtPmRldi0+ZGV2LT5kZXYpOwogCWlmIChlcnIgPT0gLUVOT0VOVCkgewotCQlpZiAoIXNpbGVudCkgewotCQkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBub3QgZm91bmRcbiIsCi0JCQkgICAgICAgcGF0aCk7Ci0JCX0KKwkJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJCSAiRmlybXdhcmUgZmlsZSBcIiVzXCIgbm90IGZvdW5kXG4iLCBjdHgtPmZ3bmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfSBlbHNlIGlmIChlcnIpIHsKLQkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiByZXF1ZXN0IGZhaWxlZCAoZXJyPSVkKVxuIiwKLQkJICAgICAgIHBhdGgsIGVycik7CisJCXNucHJpbnRmKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdLAorCQkJIHNpemVvZihjdHgtPmVycm9yc1tjdHgtPnJlcV90eXBlXSksCisJCQkgIkZpcm13YXJlIGZpbGUgXCIlc1wiIHJlcXVlc3QgZmFpbGVkIChlcnI9JWQpXG4iLAorCQkJIGN0eC0+ZnduYW1lLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoYmxvYi0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgYjQzX2Z3X2hlYWRlcikpCkBAIC0yMDY4LDIwICsyMDQ5LDI0IEBACiAKIAlmdy0+ZGF0YSA9IGJsb2I7CiAJZnctPmZpbGVuYW1lID0gbmFtZTsKKwlmdy0+dHlwZSA9IGN0eC0+cmVxX3R5cGU7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2Zvcm1hdDoKLQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIGZvcm1hdCBlcnJvci5cbiIsIHBhdGgpOworCXNucHJpbnRmKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdLAorCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBmb3JtYXQgZXJyb3IuXG4iLCBjdHgtPmZ3bmFtZSk7CiAJcmVsZWFzZV9maXJtd2FyZShibG9iKTsKIAogCXJldHVybiAtRVBST1RPOwogfQogCi1zdGF0aWMgaW50IGI0M19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3N0YXRpYyBpbnQgYjQzX3RyeV9yZXF1ZXN0X2Z3KHN0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0ICpjdHgpCiB7Ci0Jc3RydWN0IGI0M19maXJtd2FyZSAqZncgPSAmZGV2LT5mdzsKLQljb25zdCB1OCByZXYgPSBkZXYtPmRldi0+aWQucmV2aXNpb247CisJc3RydWN0IGI0M193bGRldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGI0M19maXJtd2FyZSAqZncgPSAmY3R4LT5kZXYtPmZ3OworCWNvbnN0IHU4IHJldiA9IGN0eC0+ZGV2LT5kZXYtPmlkLnJldmlzaW9uOwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwogCXUzMiB0bXNoaWdoOwogCWludCBlcnI7CkBAIC0yMDk2LDcgKzIwODEsNyBAQAogCQlmaWxlbmFtZSA9ICJ1Y29kZTEzIjsKIAllbHNlCiAJCWdvdG8gZXJyX25vX3Vjb2RlOwotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT51Y29kZSwgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT51Y29kZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIApAQCAtMjEwOCw3ICsyMDkzLDcgQEAKIAllbHNlCiAJCWdvdG8gZXJyX25vX3BjbTsKIAlmdy0+cGNtX3JlcXVlc3RfZmFpbGVkID0gMDsKLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+cGNtLCAxKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPnBjbSk7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7CiAJCS8qIFdlIGRpZCBub3QgZmluZCBhIFBDTSBmaWxlPyBOb3QgZmF0YWwsIGJ1dAogCQkgKiBjb3JlIHJldiA8PSAxMCBtdXN0IGRvIHdpdGhvdXQgaHdjcnlwdG8gdGhlbi4gKi8KQEAgLTIxNDQsNyArMjEyOSw3IEBACiAJZGVmYXVsdDoKIAkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJfQotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscywgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIApAQCAtMjE3OCwzMCArMjE2MywzNCBAQAogCWRlZmF1bHQ6CiAJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCX0KLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+aW5pdHZhbHNfYmFuZCwgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFsc19iYW5kKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCiAJcmV0dXJuIDA7CiAKLWVycl9sb2FkOgotCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAxKTsKLQlnb3RvIGVycm9yOwotCiBlcnJfbm9fdWNvZGU6Ci0JZXJyID0gLUVOT0RFVjsKLQliNDNlcnIoZGV2LT53bCwgIk5vIG1pY3JvY29kZSBhdmFpbGFibGUgZm9yIGNvcmUgcmV2ICV1XG4iLCByZXYpOworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZSA9IC1FT1BOT1RTVVBQOworCWI0M2VycihkZXYtPndsLCAiVGhlIGRyaXZlciBkb2VzIG5vdCBrbm93IHdoaWNoIGZpcm13YXJlICh1Y29kZSkgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CiAJZ290byBlcnJvcjsKIAogZXJyX25vX3BjbToKLQllcnIgPSAtRU5PREVWOwotCWI0M2VycihkZXYtPndsLCAiTm8gUENNIGF2YWlsYWJsZSBmb3IgY29yZSByZXYgJXVcbiIsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKFBDTSkgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CiAJZ290byBlcnJvcjsKIAogZXJyX25vX2luaXR2YWxzOgotCWVyciA9IC1FTk9ERVY7Ci0JYjQzZXJyKGRldi0+d2wsICJObyBJbml0aWFsIFZhbHVlcyBmaXJtd2FyZSBmaWxlIGZvciBQSFkgJXUsICIKLQkgICAgICAgImNvcmUgcmV2ICV1XG4iLCBkZXYtPnBoeS50eXBlLCByZXYpOworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZSA9IC1FT1BOT1RTVVBQOworCWI0M2VycihkZXYtPndsLCAiVGhlIGRyaXZlciBkb2VzIG5vdCBrbm93IHdoaWNoIGZpcm13YXJlIChpbml0dmFscykgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CisJZ290byBlcnJvcjsKKworZXJyX2xvYWQ6CisJLyogV2UgZmFpbGVkIHRvIGxvYWQgdGhpcyBmaXJtd2FyZSBpbWFnZS4gVGhlIGVycm9yIG1lc3NhZ2UKKwkgKiBhbHJlYWR5IGlzIGluIGN0eC0+ZXJyb3JzLiBSZXR1cm4gYW5kIGxldCBvdXIgY2FsbGVyIGRlY2lkZQorCSAqIHdoYXQgdG8gZG8uICovCiAJZ290byBlcnJvcjsKIAogZXJyb3I6CkBAIC0yMjA5LDYgKzIxOTgsNDggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGI0M19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKwljdHgtPmRldiA9IGRldjsKKworCWN0eC0+cmVxX3R5cGUgPSBCNDNfRldUWVBFX1BST1BSSUVUQVJZOworCWVyciA9IGI0M190cnlfcmVxdWVzdF9mdyhjdHgpOworCWlmICghZXJyKQorCQlnb3RvIG91dDsgLyogU3VjY2Vzc2Z1bGx5IGxvYWRlZCBpdC4gKi8KKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmU7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwljdHgtPnJlcV90eXBlID0gQjQzX0ZXVFlQRV9PUEVOU09VUkNFOworCWVyciA9IGI0M190cnlfcmVxdWVzdF9mdyhjdHgpOworCWlmICghZXJyKQorCQlnb3RvIG91dDsgLyogU3VjY2Vzc2Z1bGx5IGxvYWRlZCBpdC4gKi8KKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmU7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZS4gUHJpbnQgdGhlIGVycm9ycy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQjQzX05SX0ZXVFlQRVM7IGkrKykgeworCQllcnJtc2cgPSBjdHgtPmVycm9yc1tpXTsKKwkJaWYgKHN0cmxlbihlcnJtc2cpKQorCQkJYjQzZXJyKGRldi0+d2wsIGVycm1zZyk7CisJfQorCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAxKTsKKwllcnIgPSAtRU5PRU5UOworCitvdXQ6CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGI0M191cGxvYWRfbWljcm9jb2RlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAljb25zdCBzaXplX3QgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYjQzX2Z3X2hlYWRlcik7CkBAIC0yMzE5LDggKzIzNTAsMTEgQEAKIAl9CiAKIAlpZiAoYjQzX2lzX29sZF90eGhkcl9mb3JtYXQoZGV2KSkgeworCQkvKiBXZSdyZSBvdmVyIHRoZSBkZWFkbGluZSwgYnV0IHdlIGtlZXAgc3VwcG9ydCBmb3Igb2xkIGZ3CisJCSAqIHVudGlsIGl0IHR1cm5zIG91dCB0byBiZSBpbiBtYWpvciBjb25mbGljdCB3aXRoIHNvbWV0aGluZyBuZXcuICovCiAJCWI0M3dhcm4oZGV2LT53bCwgIllvdSBhcmUgdXNpbmcgYW4gb2xkIGZpcm13YXJlIGltYWdlLiAiCi0JCQkiU3VwcG9ydCBmb3Igb2xkIGZpcm13YXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiBKdWx5IDIwMDguXG4iKTsKKwkJCSJTdXBwb3J0IGZvciBvbGQgZmlybXdhcmUgd2lsbCBiZSByZW1vdmVkIHNvb24gIgorCQkJIihvZmZpY2lhbCBkZWFkbGluZSB3YXMgSnVseSAyMDA4KS5cbiIpOwogCQliNDNfcHJpbnRfZndfaGVscHRleHQoZGV2LT53bCwgMCk7CiAJfQogCkBAIC0yOTQ2LDcgKzI5ODAsNyBAQAogCWI0M19jbGVhcl9rZXlzKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKiBkYXRhKQorc3RhdGljIGludCBiNDNfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IChzdHJ1Y3QgYjQzX3dsICopcm5nLT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMjIxLDYgKzMyNTUsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBiNDNfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKKwkJYjQzX3RzZl9yZWFkKGRldiwgJnRzZik7CisJZWxzZQorCQl0c2YgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiB0c2Y7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19vcF9zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKKwkJYjQzX3RzZl93cml0ZShkZXYsIHRzZik7CisKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCiBzdGF0aWMgdm9pZCBiNDNfcHV0X3BoeV9pbnRvX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc3NiX2RldmljZSAqc2RldiA9IGRldi0+ZGV2OwpAQCAtMzI0MCw3ICszMzExLDcgQEAKIAltc2xlZXAoMSk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogYmFuZF90b19zdHJpbmcoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIGNvbnN0IGNoYXIgKmJhbmRfdG9fc3RyaW5nKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzd2l0Y2ggKGJhbmQpIHsKIAljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CkBAIC0zNDQyLDcgKzM1MTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M191cGRhdGVfYmFzaWNfcmF0ZXMoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgYnJhdGVzKQorc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBicmF0ZXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPQogCQlkZXYtPndsLT5ody0+d2lwaHktPmJhbmRzW2I0M19jdXJyZW50X2JhbmQoZGV2LT53bCldOwpAQCAtMzUyMCwyMSArMzU5MSwyOSBAQAogfQogCiBzdGF0aWMgaW50IGI0M19vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyLCBjb25zdCB1OCAqYWRkciwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBhbGdvcml0aG07CiAJdTggaW5kZXg7CiAJaW50IGVycjsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKIAogCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCXJldHVybiAtRU5PU1BDOyAvKiBVc2VyIGRpc2FibGVkIEhXLWNyeXB0byAqLwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZ3bC0+dHhfbG9jayk7CisJLyogV2h5IGRvIHdlIG5lZWQgYWxsIHRoaXMgbG9ja2luZyBoZXJlPworCSAqIG11dGV4ICAgICAtPiBFdmVyeSBjb25maWcgb3BlcmF0aW9uIG11c3QgdGFrZSBpdC4KKwkgKiBpcnFfbG9jayAgLT4gV2UgbW9kaWZ5IHRoZSBkZXYtPmtleSBhcnJheSwgd2hpY2ggaXMgYWNjZXNzZWQKKwkgKiAgICAgICAgICAgICAgaW4gdGhlIElSUSBoYW5kbGVycy4KKwkgKiB0eF9sb2NrICAgLT4gV2UgbW9kaWZ5IHRoZSBkZXYtPmtleSBhcnJheSwgd2hpY2ggaXMgYWNjZXNzZWQKKwkgKiAgICAgICAgICAgICAgaW4gdGhlIFRYIGhhbmRsZXIuCisJICovCiAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJZXJyID0gLUVOT0RFVjsKQEAgLTM1NTEsNyArMzYzMCw3IEBACiAJZXJyID0gLUVJTlZBTDsKIAlzd2l0Y2ggKGtleS0+YWxnKSB7CiAJY2FzZSBBTEdfV0VQOgotCQlpZiAoa2V5LT5rZXlsZW4gPT0gNSkKKwkJaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVA0MCkKIAkJCWFsZ29yaXRobSA9IEI0M19TRUNfQUxHT19XRVA0MDsKIAkJZWxzZQogCQkJYWxnb3JpdGhtID0gQjQzX1NFQ19BTEdPX1dFUDEwNDsKQEAgLTM1NzgsMTcgKzM2NTcsMTkgQEAKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCi0JCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkgewotCQkJLyogYWRkciBpcyBGRjpGRjpGRjpGRjpGRjpGRiBmb3IgZGVmYXVsdCBrZXlzICovCisJCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7CisJCQlpZiAoV0FSTl9PTighc3RhKSkgeworCQkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCS8qIFBhaXJ3aXNlIGtleSB3aXRoIGFuIGFzc2lnbmVkIE1BQyBhZGRyZXNzLiAqLworCQkJZXJyID0gYjQzX2tleV93cml0ZShkZXYsIC0xLCBhbGdvcml0aG0sCisJCQkJCSAgICBrZXktPmtleSwga2V5LT5rZXlsZW4sCisJCQkJCSAgICBzdGEtPmFkZHIsIGtleSk7CisJCX0gZWxzZSB7CisJCQkvKiBHcm91cCBrZXkgKi8KIAkJCWVyciA9IGI0M19rZXlfd3JpdGUoZGV2LCBpbmRleCwgYWxnb3JpdGhtLAogCQkJCQkgICAga2V5LT5rZXksIGtleS0+a2V5bGVuLCBOVUxMLCBrZXkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIGVpdGhlciBwYWlyd2lzZSBrZXkgb3IgYWRkcmVzcyBpcyAwMDowMDowMDowMDowMDowMAotCQkJICogZm9yIHRyYW5zbWl0LW9ubHkga2V5cwotCQkJICovCi0JCQllcnIgPSBiNDNfa2V5X3dyaXRlKGRldiwgLTEsIGFsZ29yaXRobSwKLQkJCQkJICAgIGtleS0+a2V5LCBrZXktPmtleWxlbiwgYWRkciwga2V5KTsKIAkJfQogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrOwpAQCAtMzYxNywxMCArMzY5OCwxMSBAQAogCQliNDNkYmcod2wsICIlcyBoYXJkd2FyZSBiYXNlZCBlbmNyeXB0aW9uIGZvciBrZXlpZHg6ICVkLCAiCiAJCSAgICAgICAibWFjOiAlcE1cbiIsCiAJCSAgICAgICBjbWQgPT0gU0VUX0tFWSA/ICJVc2luZyIgOiAiRGlzYWJsaW5nIiwga2V5LT5rZXlpZHgsCi0JCSAgICAgICBhZGRyKTsKKwkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIpOwogCQliNDNfZHVtcF9rZXltZW1vcnkoZGV2KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisJd3JpdGVfdW5sb2NrKCZ3bC0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC0zNzk2LDYgKzM4NzgsMTIgQEAKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0I0M19OUEhZCiAJY2FzZSBCNDNfUEhZVFlQRV9OOgorCQlpZiAocGh5X3JldiA+IDQpCisJCQl1bnN1cHBvcnRlZCA9IDE7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M19QSFlfTFAKKwljYXNlIEI0M19QSFlUWVBFX0xQOgogCQlpZiAocGh5X3JldiA+IDEpCiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwpAQCAtMzg0OSw3ICszOTM3LDExIEBACiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTjoKLQkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNTUpCisJCWlmIChyYWRpb192ZXIgIT0gMHgyMDU1ICYmIHJhZGlvX3ZlciAhPSAweDIwNTYpCisJCQl1bnN1cHBvcnRlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgQjQzX1BIWVRZUEVfTFA6CisJCWlmIChyYWRpb192ZXIgIT0gMHgyMDYyKQogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzkwMSw2ICszOTkzLDggQEAKIAlkZXYtPmlycV9yZWFzb24gPSAwOwogCW1lbXNldChkZXYtPmRtYV9yZWFzb24sIDAsIHNpemVvZihkZXYtPmRtYV9yZWFzb24pKTsKIAlkZXYtPmlycV9zYXZlZHN0YXRlID0gQjQzX0lSUV9NQVNLVEVNUExBVEU7CisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9ERUJVRykKKwkJZGV2LT5pcnFfc2F2ZWRzdGF0ZSAmPSB+QjQzX0lSUV9QSFlfVFhFUlI7CiAKIAlkZXYtPm1hY19zdXNwZW5kZWQgPSAxOwogCkBAIC00MDc4LDExICs0MTcyLDIxIEBACiAJCQloZiB8PSBCNDNfSEZfR0RDVzsKIAkJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpCiAJCQloZiB8PSBCNDNfSEZfT0ZETVBBQk9PU1Q7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQloZiB8PSBCNDNfSEZfU1lNVzsKLQkJaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQkJaGYgJj0gfkI0M19IRl9HRENXOwogCX0KKwlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7CisJCWlmIChwaHktPnJhZGlvX3JldiA9PSA2KQorCQkJaGYgfD0gQjQzX0hGXzQzMThUU1NJOworCQlpZiAocGh5LT5yYWRpb19yZXYgPCA2KQorCQkJaGYgfD0gQjQzX0hGX1ZDT1JFQ0FMQzsKKwl9CisJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9YVEFMX05PU0xPVykKKwkJaGYgfD0gQjQzX0hGX0RTQ1JROyAvKiBEaXNhYmxlIHNsb3djbG9jayByZXF1ZXN0cyBmcm9tIHVjb2RlLiAqLworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlpZiAoKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpICYmCisJICAgIChidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpCisJCWhmIHw9IEI0M19IRl9QQ0lTQ1c7IC8qIFBDSSBzbG93IGNsb2NrIHdvcmthcm91bmQuICovCisjZW5kaWYKKwloZiAmPSB+QjQzX0hGX1NLQ0ZQVVA7CiAJYjQzX2hmX3dyaXRlKGRldiwgaGYpOwogCiAJYjQzX3NldF9yZXRyeV9saW1pdHMoZGV2LCBCNDNfREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTQxMjEsNyArNDIyNSw3IEBACiAJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKLQlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLworCXNzYl9idXNfcG93ZXJ1cChidXMsICEoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1hUQUxfTk9TTE9XKSk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKIAliNDNfc2VjdXJpdHlfaW5pdChkZXYpOwogCWlmICghZGV2LT5zdXNwZW5kX2luX3Byb2dyZXNzKQpAQCAtNDMwNSw2ICs0NDA5LDM0IEBACiAJQjQzX1dBUk5fT04oIXZpZiB8fCB3bC0+dmlmICE9IHZpZik7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKSB7CisJCS8qIERpc2FibGUgQ0ZQIHVwZGF0ZSBkdXJpbmcgc2NhbiBvbiBvdGhlciBjaGFubmVscy4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9TS0NGUFVQKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkgeworCQkvKiBSZS1lbmFibGUgQ0ZQIHVwZGF0ZS4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfU0tDRlBVUCk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGI0M19od19vcHMgPSB7CiAJLnR4CQkJPSBiNDNfb3BfdHgsCiAJLmNvbmZfdHgJCT0gYjQzX29wX2NvbmZfdHgsCkBAIC00MzE3LDEwICs0NDQ5LDE0IEBACiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKKwkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZgkJPSBiNDNfb3Bfc2V0X3RzZiwKIAkuc3RhcnQJCQk9IGI0M19vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzX29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzX29wX2JlYWNvbl9zZXRfdGltLAogCS5zdGFfbm90aWZ5CQk9IGI0M19vcF9zdGFfbm90aWZ5LAorCS5zd19zY2FuX3N0YXJ0CQk9IGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyLAorCS5zd19zY2FuX2NvbXBsZXRlCT0gYjQzX29wX3N3X3NjYW5fY29tcGxldGVfbm90aWZpZXIsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtNDQ0Niw2ICs0NTgyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NjU3LDkgKzQ3OTQsMTAgQEAKIAlJTklUX1dPUksoJndsLT50eHBvd2VyX2FkanVzdF93b3JrLCBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmspOwogCiAJc3NiX3NldF9kZXZ0eXBlZGF0YShkZXYsIHdsKTsKLQliNDNpbmZvKHdsLCAiQnJvYWRjb20gJTA0WCBXTEFOIGZvdW5kXG4iLCBkZXYtPmJ1cy0+Y2hpcF9pZCk7CisJYjQzaW5mbyh3bCwgIkJyb2FkY29tICUwNFggV0xBTiBmb3VuZCAoY29yZSByZXZpc2lvbiAldSlcbiIsCisJCWRldi0+YnVzLT5jaGlwX2lkLCBkZXYtPmlkLnJldmlzaW9uKTsKIAllcnIgPSAwOwotICAgICAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCmluZGV4IGY4NzFhMjUuLjQwYWJjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaApAQCAtNDAsNiArNDAsMjQgQEAKIAogCiBleHRlcm4gaW50IGI0M19tb2RwYXJhbV9xb3M7CitleHRlcm4gaW50IGI0M19tb2RwYXJhbV92ZXJib3NlOworCisvKiBMb2dtZXNzYWdlIHZlcmJvc2l0eSBsZXZlbHMuIFVwZGF0ZSB0aGUgYjQzX21vZHBhcmFtX3ZlcmJvc2UgaGVscHRleHQsIGlmCisgKiB5b3UgYWRkIG9yIHJlbW92ZSBsZXZlbHMuICovCitlbnVtIGI0M192ZXJib3NpdHkgeworCUI0M19WRVJCT1NJVFlfRVJST1IsCisJQjQzX1ZFUkJPU0lUWV9XQVJOLAorCUI0M19WRVJCT1NJVFlfSU5GTywKKwlCNDNfVkVSQk9TSVRZX0RFQlVHLAorCV9fQjQzX1ZFUkJPU0lUWV9BRlRFUkxBU1QsIC8qIGtlZXAgbGFzdCAqLworCisJQjQzX1ZFUkJPU0lUWV9NQVggPSBfX0I0M19WRVJCT1NJVFlfQUZURVJMQVNUIC0gMSwKKyNpZiBCNDNfREVCVUcKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0RFQlVHLAorI2Vsc2UKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0lORk8sCisjZW5kaWYKK307CiAKIAogLyogTGlnaHR3ZWlnaHQgZnVuY3Rpb24gdG8gY29udmVydCBhIGZyZXF1ZW5jeSAoaW4gTWh6KSB0byBhIGNoYW5uZWwgbnVtYmVyLiAqLwpAQCAtMTIxLDQgKzEzOSwxMSBAQAogdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAorCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dDsKK2ludCBiNDNfZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4LAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KTsKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdyk7CisKICNlbmRpZiAvKiBCNDNfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwppbmRleCA3ZmU5ZDE3Li5jODM2YzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwpAQCAtMTIxLDI3ICsxMjEsMTggQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNywgKHI4IDw8IDQpIHwgcjgpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDIwLCAocjggPDwgNCkgfCByOCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjEsIChyOCA8PCA0KSB8IHI4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyMiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMjIpCi0JCQkJCSYgMHgwMDBGKSB8IChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjIsIDB4MDAwRiwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQSwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQiwgKHI4IDw8IDQpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwOCwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDgpCi0JCQkJCSYgMHgwMEYwKSB8IChyOCA8PCA0KSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjksIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDI5KQotCQkJCQkmIDB4RkYwRikgfCAweDAwQjApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA4LCAweDAwRjAsIChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjksIDB4RkYwRiwgMHgwMEIwKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwgMHgwMEFBKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNiwgMHgwMDg1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzQSwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwM0EpCi0JCQkJCSYgMHhGRjIwKSB8Ci0JCQkgIGZyZXFfcjNBX3ZhbHVlKGZyZXEpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzRCwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzRCkgJiAweDAwRkYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkKLQkJCQkJJiAweEZGN0YpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkgJiAweEZGRUYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM1LCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkKLQkJCQkJJiAweEZGRUYpIHwgMHgwMDEwKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzQSwgMHhGRjIwLCBmcmVxX3IzQV92YWx1ZShmcmVxKSk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwM0QsIDB4MDBGRik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIDB4RkY3RiwgMHgwMDgwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAzNSwgMHhGRkVGKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkVGLCAweDAwMTApOwogCWI0M19yYWRpb19zZXRfdHhfaXEoZGV2KTsKIAkvL1RPRE86IFRTU0kyZGJtIHdvcmthcm91bmQKIC8vRklYTUUJYjQzX3BoeV94bWl0cG93ZXIoZGV2KTsKQEAgLTE2MCwyMyArMTUxLDIwIEBACiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODIsIDB4MDA4MCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODAsIDB4MDAwMCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwM0YsIDB4MDBEQSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDUpICYgfjB4MDAwOCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAxMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDUsIH4weDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDgxLCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA4MSwgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwMjApOwogCW1zbGVlcCgxKTsJCS8qIGRlbGF5IDQwMHVzZWMgKi8KIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDIwKSB8IDB4MDAxMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIH4weDAwMjAsIDB4MDAxMCk7CiAJbXNsZWVwKDEpOwkJLyogZGVsYXkgNDAwdXNlYyAqLwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA1KSAmIH4weDAwMDgpIHwgMHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4NSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4NSkgJiB+MHgwMDEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNSkgJiB+MHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDQwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDA0MCkgfCAweDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA1LCB+MHgwMDA4LCAweDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDg1LCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAwNSwgfjB4MDAwOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDgxLCB+MHgwMDQwLCAweDAwNDApOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA1LAogCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDA4KSB8IDB4MDAwOCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MywgMHhEREM2KTsKQEAgLTIyNCwyMiArMjEyLDE2IEBACiAJdTE2IGIsIGN1cnJfcywgYmVzdF9zID0gMHhGRkZGOwogCWludCBpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH5CNDNfUEhZX0NSUzBfRU4pOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksCi0JCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgfCAweDEwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MikpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDksCi0JCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDkpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAxMiwKLQkJKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMTIpICYgMHhGRkZDKSB8IDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCB+QjQzX1BIWV9DUlMwX0VOKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgMHgxMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksIDB4RjBGRiwgMHgwMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDA5LCAweDAwODApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDEyLCAweEZGRkMsIDB4MDAwMik7CiAJYjQzX3dhX2luaXRnYWlucyhkZXYpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCQSksIDB4M0VENSk7CiAJYiA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUFdSRE9XTik7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUFdSRE9XTiwgKGIgJiAweEZGRjgpIHwgMHgwMDA1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwKLQkJYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNCkgfCAweDAwMDQpOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwMDQsIDB4MDAwNCk7CiAJZm9yIChpID0gMHgxMDsgaSA8PSAweDIwOyBpKyspIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGkpOwogCQljdXJyX3MgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09UQUJMRVEpICYgMHgwMEZGOwpAQCAtMjUyLDggKzIzNCw3IEBACiAJCQliZXN0X3MgPSBjdXJyX3M7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BXUkRPV04sIGIpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA0KSAmIDB4RkZGQik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDQsIDB4RkZGQik7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGJlc3Rfcyk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzFfUjEsIDAsIDB4RkZFQyk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI3KSwgMHgxRTgwKTsKQEAgLTI2MSwxNCArMjQyLDEwIEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI1KSwgMHgwRUMwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QjIpLCAweDAwQzApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCOSksIDB4MUZGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEJCKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEJCKSkgJiAweEYwMDApIHwgMHgwMDUzKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNNjEsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSkgJiAweEZFMUYpIHwgMHgwMTIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpKSAmIDB4MEZGRikgfCAweDMwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCkpICYgMHgwRkZGKSB8IDB4MzAwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpLCAweEYwMDAsIDB4MDA1Myk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNNjEsIDB4RkUxRiwgMHgwMTIwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMyksIDB4MEZGRiwgMHgzMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksIDB4MEZGRiwgMHgzMDAwKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgNiwgMHgwMDE3KTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgaSwgMHgwMDBGKTsKQEAgLTI3Niw4ICsyNTMsNyBAQAogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBFLCAweDAwMTEpOwogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBGLCAweDAwMTMpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgzMyksIDB4NTAzMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSB8IEI0M19QSFlfQ1JTMF9FTik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NSUzAsIEI0M19QSFlfQ1JTMF9FTik7CiB9CiAKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX3BjdGxfaW5pdF9hcGh5KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTMwMCwyNiArMjc2LDIxIEBACiAKIAlpZiAocGh5LT5yZXYgPj0gNikgewogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0EpCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgxMDAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgfjB4MTAwMCk7CiAJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgJiBCNDNfUEhZX0VOQ09SRV9FTikKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VOQ09SRSwKLQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgfCAweDAwMTApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VOQ09SRSwgMHgwMDEwKTsKIAkJZWxzZQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRU5DT1JFLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSAmIH4weDEwMTApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9FTkNPUkUsIH4weDEwMTApOwogCX0KIAogCWI0M193YV9hbGwoZGV2KTsKIAogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgewogCQlpZiAocGh5LT5nbW9kZSAmJiAocGh5LT5yZXYgPCAzKSkKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzQsCi0JCQkJYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM0KSB8IDB4MDAwMSk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNCwgMHgwMDAxKTsKIAkJYjQzX3BoeV9yc3NpYWdjKGRldiwgMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkgfCBCNDNfUEhZX0NSUzBfRU4pOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ1JTMCwgQjQzX1BIWV9DUlMwX0VOKTsKIAogCQliNDNfcmFkaW9faW5pdDIwNjAoZGV2KTsKIApAQCAtMzM5LDkgKzMxMCw3IEBACiAKIAlpZiAoKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSAmJgogCSAgICAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4NkUpLAotCQkJCSAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSkKLQkJCQkgICAmIDB4RTAwMCkgfCAweDNDRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSwgMHhFMDAwLCAweDNDRik7CiAJfQogfQogCkBAIC01MjAsMTQgKzQ4OSwxNCBAQAogCQkJcmV0dXJuOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwgMHgwMEMwKTsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTAsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMCkgJiAweEZGRjcpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTEpICYgMHhGRkY3KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDEwLCAweEZGRjcpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwMTEsIDB4RkZGNyk7CiAJCWI0M19yYWRpb19pbml0MjA2MChkZXYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LCAweDAwRkYpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgMHgwMEZCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDEwKSB8IDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMSkgfCAweDAwMDgpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxMCwgMHgwMDA4KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMTEsIDB4MDAwOCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCmluZGV4IGNhYWM0YTQ1Li5lN2I5OGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwpAQCAtMjA0LDEzICsyMDQsOSBAQAogCQkJCQkJICYgMHhGRkYwKSB8CiAJCQkgICAgYmFzZWJhbmRfYXR0ZW51YXRpb24pOwogCX0gZWxzZSBpZiAocGh5LT5hbmFsb2cgPiAxKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkZDMykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRkMzLCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkY4NykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRjg3LCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOwogCX0KIH0KIApAQCAtMjUyLDE3ICsyNDgsMTMgQEAKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAogCQkJCSAgKHJmICYgMHgwMDBGKSB8ICh0eF9jb250cm9sICYgMHgwMDcwKSk7CiAJfSBlbHNlIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8IChyZiAmIDB4MDAwRikpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiB+MHgwMDcwKSB8ICh0eF9jb250cm9sICYKLQkJCQkJCQkgICAgMHgwMDcwKSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCAocmYgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCB+MHgwMDcwLCAodHhfY29udHJvbCAmIDB4MDA3MCkpOwogCX0KIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIHR4X21hZ24gfCB0eF9iaWFzKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGRjApIHwgKHR4X2JpYXMgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsICh0eF9iaWFzICYgMHgwMDBGKSk7CiAJfQogCWI0M19sb19nX2FkanVzdChkZXYpOwogfQpAQCAtMzM3LDEyICszMjksOSBAQAogCiAJaWYgKHRoaXJkICE9IC0xKSB7CiAJCXRtcCA9ICgodTE2KSB0aGlyZCA8PCAxNCkgfCAoKHUxNikgdGhpcmQgPDwgNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCB0bXApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEJGQkYpIHwgdG1wKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhCRkJGKSB8IHRtcCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMCwgMHhCRkJGLCB0bXApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgdG1wKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIHRtcCk7CiAJfQogCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2KTsKIH0KQEAgLTM3MywxMiArMzYyLDkgQEAKIAlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgdGFibGUsIGksIGkgLSBzdGFydCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpICYgMHhCRkJGKSB8IDB4NDA0MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikgJiAweEJGQkYpIHwgMHg0MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QkZCRiwgMHg0MDAwKTsKIAliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldik7CiB9CiAKQEAgLTQ1NCwxMyArNDQwLDExIEBACiAJYmFja3VwWzEwXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwogCWJhY2t1cFsxMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDQzKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MjksIGI0M19waHlfcmVhZChkZXYsIDB4MDQyOSkgJiAweDdGRkYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDEpICYgMHgzRkZGKSB8IDB4NDAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgJiAweEZGRjMpIHwgMHgwMDA0KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgfigweDEgfCAweDIpKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MjksIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDAxLCAweDNGRkYsIDB4NDAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAwQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGRjMsIDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCB+KDB4MSB8IDB4MikpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWJhY2t1cFsxMl0gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMkUpOwogCQliYWNrdXBbMTNdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJGKTsKQEAgLTQ3NSwxMyArNDU5LDEzIEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODBGLCAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMCwgMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3OCkgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpIHwgMHgwMDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDYwKSB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkgfCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwMTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDYwLCAweDAwNDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxNCwgMHgwMjAwKTsKIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDcwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwODApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMzApOwogCiAJdjQ3RiA9IChzMTYpICgoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7CkBAIC01MDEsNDAgKzQ4NSwzMSBAQAogCQlpZiAoc2F2ZWQgPT0gMHhGRkZGKQogCQkJc2F2ZWQgPSA0OwogCX0gZWxzZSB7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwN0YpOworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3QSwgMHgwMDdGKTsKIAkJaWYgKHBoeS0+cmV2ICE9IDEpIHsJLyogTm90IGluIHNwZWNzLCBidXQgbmVlZGVkIHRvIHByZXZlbnQgUFBDIG1hY2hpbmUgY2hlY2sgKi8KLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE0KSB8IDB4MDAwMSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODE1LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxNSkgJiAweEZGRkUpOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTQsIDB4MDAwMSk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTUsIDB4RkZGRSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgfCAweDAwMEMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpIHwgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSB8IDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODExLCAweDAwMEMpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDgxMiwgMHgwMDBDKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODEyLCAweDAwMzApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVBLCAweDA0ODApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU5LCAweDA4MTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCAweDAwMEQpOwogCQlpZiAocGh5LT5yZXYgPT0gMCkgewogCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgMHgwMTIyKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAwQSkKLQkJCQkgICAgICB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAwQSwgMHgyMDAwKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxNCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTQpIHwgMHgwMDA0KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTUsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE1KSAmIDB4RkZGQik7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDgxNCwgMHgwMDA0KTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDgxNSwgMHhGRkZCKTsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAzLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAzKSAmIDB4RkY5RikKLQkJCSAgICAgIHwgMHgwMDQwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOworCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCQliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNDMpCi0JCQkJCQkmIDB4MDBGMCkgfCAweDAwMEYpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA0MywgMHgwMEYwLCAweDAwMEYpOwogCQl1ZGVsYXkoMzApOwogCQl2NDdGID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAkJaWYgKHY0N0YgPj0gMHgyMCkKQEAgLTU3Niw3ICs1NTEsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDQzLCBiYWNrdXBbMTFdKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYmFja3VwWzEwXSk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSB8IDB4MSB8IDB4Mik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyOSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDI5KSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0MjksIDB4ODAwMCk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNl0pOwpAQCAtNjA0LDkgKzU3OSw4IEBACiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpCiAJCWI0M19jYWxjX25yc3NpX29mZnNldChkZXYpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpICYgMHg3RkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDdGRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMiwgMHhGRkZDKTsKIAliYWNrdXBbN10gPSBiNDNfcmVhZDE2KGRldiwgMHgwM0UyKTsKIAliNDNfd3JpdGUxNihkZXYsIDB4MDNFMiwgYjQzX3JlYWQxNihkZXYsIDB4MDNFMikgfCAweDgwMDApOwogCWJhY2t1cFswXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwpAQCAtNjMzLDY2ICs2MDcsNDQgQEAKIAkJY2FzZSA0OgogCQljYXNlIDY6CiAJCWNhc2UgNzoKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KQotCQkJCSAgICAgIHwgMHgwMTAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAxKQotCQkJCSAgICAgIHwgMHgwMDQwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDc4LCAweDAxMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQljYXNlIDU6Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMSkKLQkJCQkgICAgICAmIDB4RkZCRik7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MDEsIDB4RkZCRik7CiAJCQlicmVhazsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNjApCi0JCQkgICAgICB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkKLQkJCSAgICAgIHwgMHgwMjAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNjAsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDE0LCAweDAyMDApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwNzApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAwLCA4LCAwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwRjcpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDdBLCAweDAwRjcpOwogCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSAmIDB4RkZDRikgfAotCQkJICAgICAgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDMwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGQ0YsIDB4MDAxMCk7CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDA4MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMjApOwogCiAJbnJzc2kwID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAlpZiAobnJzc2kwID49IDB4MDAyMCkKIAkJbnJzc2kwIC09IDB4MDA0MDsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSAmIDB4MDA3Rik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwN0EsIDB4MDA3Rik7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMykKLQkJCQkJICAgICYgMHhGRjlGKSB8IDB4MDA0MCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOwogCX0KIAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQsCiAJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQpCiAJCSAgICB8IDB4MjAwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDBGKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTUsIDB4RjMzMCk7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMjApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgJiAweEZGQ0YpIHwKLQkJCSAgICAgIDB4MDAyMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDgxMiwgMHhGRkNGLCAweDAwMjApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDIwKTsKIAl9CiAKIAliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwpAQCAtNzI2LDEwICs2NzgsOCBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0xPX0NPTlRST0wsIGJhY2t1cFsxM10pOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODEyLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSAmIDB4RkZDRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpICYgMHhGRkNGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODEyLCAweEZGQ0YpOworCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTEsIDB4RkZDRik7CiAJfQogCiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGJhY2t1cFswXSk7CkBAIC03NDMsMTEgKzY5Myw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OSwgYmFja3VwWzVdKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCBiYWNrdXBbNl0pOwogCWI0M19zeW50aF9wdV93b3JrYXJvdW5kKGRldiwgcGh5LT5jaGFubmVsKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpIHwgKDB4MDAwMSB8IDB4MDAwMikpOworCWI0M19waHlfc2V0KGRldiwgMHgwODAyLCAoMHgwMDAxIHwgMHgwMDAyKSk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWlmIChwaHktPnJldiA+PSAzKSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNF0pOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiYWNrdXBbMTVdKTsKQEAgLTc3NCwxMyArNzIyLDkgQEAKIAkJaWYgKHRtcDE2ID49IDB4MjApCiAJCQl0bXAxNiAtPSAweDQwOwogCQlpZiAodG1wMTYgPCAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgICYgMHhGMDAwKSB8IDB4MDlFQik7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEEsIDB4RjAwMCwgMHgwOUVCKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICAgJiAweEYwMDApIHwgMHgwQUVEKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHhGMDAwLCAweDBBRUQpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGdwaHktPmludGVyZm1vZGUgPT0gQjQzX0lOVEVSRk1PREVfTk9OV0xBTikgewpAQCAtODIzLDcgKzc2Nyw3IEBACiAgKiBpbnRlcmZlcmVuY2UgbWl0aWdhdGlvbiBjb2RlLgogICogSXQgaXMgc2F2ZSB0byByZXN0b3JlIHZhbHVlcyBpbiByYW5kb20gb3JkZXIuCiAgKi8KLXN0YXRpYyB2b2lkIF9zdGFja19zYXZlKHUzMiAqIF9zdGFja3B0ciwgc2l6ZV90ICogc3RhY2tpZHgsCitzdGF0aWMgdm9pZCBfc3RhY2tfc2F2ZSh1MzIgKl9zdGFja3B0ciwgc2l6ZV90ICpzdGFja2lkeCwKIAkJCXU4IGlkLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCiB7CiAJdTMyICpzdGFja3B0ciA9ICYoX3N0YWNrcHRyWypzdGFja2lkeF0pOwpAQCAtODM3LDcgKzc4MSw3IEBACiAJQjQzX1dBUk5fT04oKnN0YWNraWR4ID49IEI0M19JTlRFUkZTVEFDS19TSVpFKTsKIH0KIAotc3RhdGljIHUxNiBfc3RhY2tfcmVzdG9yZSh1MzIgKiBzdGFja3B0ciwgdTggaWQsIHUxNiBvZmZzZXQpCitzdGF0aWMgdTE2IF9zdGFja19yZXN0b3JlKHUzMiAqc3RhY2twdHIsIHU4IGlkLCB1MTYgb2Zmc2V0KQogewogCXNpemVfdCBpOwogCkBAIC05MDEsMTEgKzg0NSw4IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBCNDNfSU5URVJGTU9ERV9OT05XTEFOOgogCQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSAmIH4weDQwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCB+MHg0MDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJhZGlvX3N0YWNrc2F2ZSgweDAwNzgpOwpAQCAtOTI0LDI2ICs4NjUsMTkgQEAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0MDYpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDA2LCAweDdFMjgpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfUkFESU9fQklURklFTEQpIHwgMHgxMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgMHgxMDAwKTsKIAogCQlwaHlfc3RhY2tzYXZlKDB4MDRBMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QzBDMCkgfCAweDAwMDgpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QzBDMCwgMHgwMDA4KTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEMwQzAsIDB4MDYwNSk7CiAJCXBoeV9zdGFja3NhdmUoMHgwNEEyKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhDMEMwKSB8IDB4MDIwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhDMEMwLCAweDAyMDQpOwogCQlwaHlfc3RhY2tzYXZlKDB4MDRBOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTgsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KSAmIDB4QzBDMCkgfCAweDA4MDMpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTgsIDB4QzBDMCwgMHgwODAzKTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QUIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEMwQzAsIDB4MDYwNSk7CiAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTcpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE3LCAweDAwMDIpOwpAQCAtOTk5LDEyICs5MzMsOCBAQAogCQlwaHlfc3RhY2tzYXZlKDB4MDQyQik7CiAJCXBoeV9zdGFja3NhdmUoMHgwNDhDKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQpCi0JCQkgICAgICAmIH4weDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKQotCQkJICAgICAgICYgMHhGRkZDKSB8IDB4MDAwMik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsIH4weDEwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweEZGRkMsIDB4MDAwMik7CiAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzMywgMHgwODAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMywgMHgyMDI3KTsKQEAgLTEwMTMsOCArOTQzLDcgQEAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQSwgMHgxQ0E4KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQywgMHgyODdBKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEZGQzApIHwgMHgwMDFBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEZGQzAsIDB4MDAxQSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTcsIDB4MDAwRCk7CiAKIAkJaWYgKHBoeS0+cmV2IDwgMikgewpAQCAtMTAyNyw2NSArOTU2LDQxIEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEMxLCAweDAwNTkpOwogCQl9CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkKLQkJCQkJICAgICYgMHhDMEZGKSB8IDB4MTgwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweENGRkYpIHwgMHgxMDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGMEZGKSB8IDB4MEEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4Q0ZGRikgfCAweDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFCKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwODAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikKLQkJCQkJICAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4RkZGMCkgfCAweDAwMDUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweEZGQ0YpIHwgMHgwMDEwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwNTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwQik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhDMEZGLCAweDE4MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4RkZDMCwgMHgwMDE1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweENGRkYsIDB4MTAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGMEZGLCAweDBBMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4Q0ZGRiwgMHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEYwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBQiwgMHhGRkNGLCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4RkZGMCwgMHgwMDA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweEZGQ0YsIDB4MDAxMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGRkYwLCAweDAwMDYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4RjBGRiwgMHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEYwRkYsIDB4MDUwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhGRkYwLCAweDAwMEIpOwogCiAJCWlmIChwaHktPnJldiA+PSAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgJiB+MHg4MDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTUpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTYsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTYpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTcsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTcpCi0JCQkJCQkgICAgJiAweEZFMDApIHwgMHgwMTZEKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDQ4QSwgKHUxNil+MHg4MDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQxNSwgMHg4MDAwLCAweDM2RDgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDE2LCAweDgwMDAsIDB4MzZEOCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0MTcsIDB4RkUwMCwgMHgwMTZEKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICB8IDB4MTAwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhBKQotCQkJCQkJICAgICYgMHg5RkZGKSB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDQ4QSwgMHgxMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHg5RkZGLCAweDIwMDApOwogCQkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9BQ0lXKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgPj0gMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKQotCQkJCSAgICAgIHwgMHgwODAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDA4MDApOwogCQl9Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEMsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEMpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDAyMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEMsIDB4RjBGRiwgMHgwMjAwKTsKIAkJaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUUpCi0JCQkJCQkgICAgJiAweEZGMDApIHwgMHgwMDdGKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUQsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUQpCi0JCQkJCQkgICAgJiAweDAwRkYpIHwgMHgxMzAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBRSwgMHhGRjAwLCAweDAwN0YpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFELCAweDAwRkYsIDB4MTMwMCk7CiAJCX0gZWxzZSBpZiAocGh5LT5yZXYgPj0gNikgewogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgzLCAweDAwN0YpOwogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgyLCAweDAwN0YpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBRCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFEKQotCQkJCSAgICAgICYgMHgwMEZGKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDRBRCwgMHgwMEZGKTsKIAkJfQogCQliNDNfY2FsY19ucnNzaV9zbG9wZShkZXYpOwogCQlicmVhazsKQEAgLTExMDQsMjQgKzEwMDksMTggQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEI0M19JTlRFUkZNT0RFX05PTldMQU46CiAJCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA0MkIsIH4weDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDQwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJcmFkaW9fc3RhY2tyZXN0b3JlKDB4MDA3OCk7CiAJCWI0M19jYWxjX25yc3NpX3RocmVzaG9sZChkZXYpOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDQwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDJCLCB+MHgwODAwKTsKIAkJaWYgKCFkZXYtPmJhZF9mcmFtZXNfcHJlZW1wdCkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCkKLQkJCQkgICAgICAmIH4oMSA8PCAxMSkpOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgfigxIDw8IDExKSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg0MDAwKTsKIAkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTApOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMSk7CiAJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEEyKTsKQEAgLTEzODksMTcgKzEyODgsMTAgQEAKIAkJc2F2LnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAkJc2F2LnBoeV9jbGFzc2N0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4N0ZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CiAJCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKSB7CiAJCQlzYXYucGh5X2xvX21hc2sgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX01BU0spOwogCQkJc2F2LnBoeV9sb19jdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0NUTCk7CkBAIC0xNDIwLDggKzEzMTIsNyBAQAogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIGI0M19yZWFkMTYoZGV2LCAweDNFMikgfCAweDgwMDApOwogCiAJc2F2LnBoeV9zeW5jY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9TWU5DQ1RMKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9TWU5DQ1RMLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1NZTkNDVEwpCi0JCSAgICAgICYgMHhGRjdGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1NZTkNDVEwsIDB4RkY3Rik7CiAJc2F2LnJlZ18zRTYgPSBiNDNfcmVhZDE2KGRldiwgMHgzRTYpOwogCXNhdi5yZWdfM0Y0ID0gYjQzX3JlYWQxNihkZXYsIDB4M0Y0KTsKIApAQCAtMTQyOSw5ICsxMzIwLDcgQEAKIAkJYjQzX3dyaXRlMTYoZGV2LCAweDAzRTYsIDB4MDEyMik7CiAJfSBlbHNlIHsKIAkJaWYgKHBoeS0+YW5hbG9nID49IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDAzKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwMykpCi0JCQkJICAgICAgICYgMHhGRkJGKSB8IDB4NDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgwMyksIDB4RkZCRiwgMHg0MCk7CiAJCX0KIAkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19DSEFOTkVMX0VYVCwKIAkJCSAgICAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX0NIQU5ORUxfRVhUKSB8IDB4MjAwMCkpOwpAQCAtMTQ1NCwxNCArMTM0MywxMiBAQAogCQkJCQkJICAgTFBEKDAsIDAsIDEpKSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhCRkEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKQotCQkJICB8IDB4MDAwNCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4NTEsIDB4MDAwNCk7CiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDFGKTsKIAl9IGVsc2UgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIDApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkJICAgICAgJiAweEZGRjApIHwgMHgwMDA5KTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIDB4MDAwOSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMCk7CiAKQEAgLTE2MTAsOCArMTQ5Nyw3IEBACiAJdTggb2xkX2NoYW5uZWw7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkgIHwgMHgwMDUwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDUwKTsKIAl9CiAJaWYgKChidXMtPmJvYXJkaW5mby52ZW5kb3IgIT0gU1NCX0JPQVJEVkVORE9SX0JDTSkgJiYKIAkgICAgKGJ1cy0+Ym9hcmRpbmZvLnR5cGUgIT0gU1NCX0JPQVJEX0JVNDMwNikpIHsKQEAgLTE2MjEsMzkgKzE1MDcsMjkgQEAKIAkJCXZhbHVlICs9IDB4MjAyOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzUpICYgMHhGMEZGKQotCQkgICAgICB8IDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDM1LCAweEYwRkYsIDB4MDcwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY3KTsKIAogCWlmIChwaHktPmdtb2RlIHx8IHBoeS0+cmV2ID49IDIpIHsKIAkJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkJICB8IDB4MDAyMCk7Ci0JCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MSwKLQkJCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKQotCQkJCQkgIHwgMHgwMDA0KTsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDAyMCk7CisJCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDUxLCAweDAwMDQpOwogCQl9CiAJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX1JBRElPLCAweDAwMDApOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMUMsIDB4MTg2QSk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTMpICYgMHgwMEZGKSB8IDB4MTkwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM1KSAmIDB4RkZDMCkgfCAweDAwNjQpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDA1RCkgJiAweEZGODApIHwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDEzLCAweDAwRkYsIDB4MTkwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkMwLCAweDAwNjQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNUQsIDB4RkY4MCwgMHgwMDBBKTsKIAl9CiAKIAlpZiAoZGV2LT5iYWRfZnJhbWVzX3ByZWVtcHQpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX1JBRElPX0JJVEZJRUxEKSB8ICgxIDw8IDExKSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgKDEgPDwgMTEpKTsKIAl9CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewpAQCAtMTY5NSw3ICsxNTcxLDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QiwgMHgwMDdCKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QywgMHgwMEIwKTsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xNzcxLDEyICsxNjQ3LDEwIEBACiAJCXZhbCArPSAweDAyMDI7CiAJfQogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDIwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTEsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKSB8IDB4MDAwNCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDIwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA1MSwgMHgwMDA0KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1QiwgMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDVDLCAwKTsKIAl9CkBAIC0xODAxLDggKzE2NzUsNyBAQAogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUIsIDB4N0IpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUMsIDB4QjApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpICYgMHgwMEY4KSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwN0EsIDB4MDBGOCwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xODE0LDE5ICsxNjg3LDE2IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY4KTsKIAliNDNfc2V0X3R4cG93ZXJfZyhkZXYsICZncGh5LT5iYmF0dCwgJmdwaHktPnJmYXR0LCBncGh5LT50eF9jb250cm9sKTsKIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1RCwgKGI0M19waHlfcmVhZChkZXYsIDB4NUQpCi0JCQkJCSAgJiAweEZGODApIHwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHg1RCwgMHhGRjgwLCAweDAwMDMpOwogCX0KIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gMikKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUQsIDB4MDAwRCk7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gNCkgewogCQliNDNfd3JpdGUxNihkZXYsIDB4M0U0LCA5KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4NjEsIGI0M19waHlfcmVhZChkZXYsIDB4NjEpCi0JCQkgICAgICAmIDB4MEZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIDB4NjEsIDB4MEZGRik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMikgJiAweEZGQzApCi0JCQkgICAgICB8IDB4MDAwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMiwgMHhGRkMwLCAweDAwMDQpOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IpCiAJCUI0M19XQVJOX09OKDEpOwpAQCAtMTg2OCw2MyArMTczOCwzOSBAQAogCWJhY2t1cF9yYWRpb1sxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKTsKIAliYWNrdXBfcmFkaW9bMl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApICYgMHgzRkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRywKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRykgfCAweDgwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDAyKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSAmIDB4RkZGRCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMDEpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhGRkZFKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4M0ZGRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDS0JCQU5EQ0ZHLCAweDgwMDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZGRCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDAxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGRkZFKTsKIAlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSKSB8IDB4MDAwMSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX0FOQUxPR09WRVJWQUwpICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikgfCAweDAwMDIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwKLQkJCQkJICAgQjQzX1BIWV9BTkFMT0dPVkVSVkFMKSAmIDB4RkZGRCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDEpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDIpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRCk7CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDBDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMzApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkgICAgICAgJiAweEZGQ0YpIHwgMHgxMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDBDKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweDAwMEMpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAzMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZDRiwgMHgxMCk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHg1QSksIDB4MDc4MCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4NTkpLCAweEM4MTApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMHgwMDBEKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDBBKSwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwQSkpIHwgMHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MEEpLCAweDIwMDApOwogCWlmIChwaHktPnJldiAhPSAxKSB7CS8qIE5vdCBpbiBzcGVjcywgYnV0IG5lZWRlZCB0byBwcmV2ZW50IFBQQyBtYWNoaW5lIGNoZWNrICovCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpIHwgMHgwMDA0KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkgJiAweEZGRkIpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDA0KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkIpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgwMyksCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDAzKSkKLQkJICAgICAgICYgMHhGRjlGKSB8IDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MDMpLCAweEZGOUYsIDB4NDApOwogCiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDAwMEYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCQkgICAgICAmIDB4RkZGMCkgfCAweDkpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgMHg5KTsKIAl9CiAJYjQzX2dwaHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGRldiwgMTEpOwogCkBAIC0xOTM0LDQ1ICsxNzgwLDI4IEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0xPX01BU0ssIDB4ODAyMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTE9fQ1RMLCAwKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDJCKSwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpKQotCQkgICAgICAgJiAweEZGQzApIHwgMHgwMSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkIpLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgyQikpCi0JCSAgICAgICAmIDB4QzBGRikgfCAweDgwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4RkZDMCwgMHgwMSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4QzBGRiwgMHg4MDApOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAxMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhDRkZGKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweENGRkYpOwogCiAJaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgewogCQlpZiAocGh5LT5yZXYgPj0gNykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSKQotCQkJCSAgICAgIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICB8IDB4ODAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHg4MDAwKTsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDdBKQotCQkJICAmIDB4MDBGNyk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDdBLCAweDAwRjcpOwogCiAJaiA9IDA7CiAJbG9vcF9pX21heCA9IChwaHktPnJhZGlvX3JldiA9PSA4KSA/IDE1IDogOTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcF9pX21heDsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CiAJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIGkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICAgJiAweEYwRkYpIHwgKGogPDwgOCkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICAgJiAweDBGRkYpIHwgMHhBMDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICB8IDB4RjAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGMEZGLCAoaiA8PCA4KSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHgwRkZGLCAweEEwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhGMDAwKTsKIAkJCXVkZWxheSgyMCk7CiAJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19MRUFLQUdFKSA+PSAweERGQykKIAkJCQlnb3RvIGV4aXRfbG9vcDE7CkBAIC0xOTgyLDIwICsxODExLDEyIEBACiAJbG9vcDFfb3V0ZXJfZG9uZSA9IGk7CiAJbG9vcDFfaW5uZXJfZG9uZSA9IGo7CiAJaWYgKGogPj0gOCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCSAgICAgIHwgMHgzMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4MzApOwogCQl0cnN3X3J4ID0gMHgxQjsKIAkJZm9yIChqID0gaiAtIDg7IGogPCAxNjsgaisrKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkJCSAgICAgICAmIDB4RjBGRikgfCAoaiA8PCA4KSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgICAmIDB4MEZGRikgfCAweEEwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgIHwgMHhGMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweEYwRkYsIChqIDw8IDgpKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweDBGRkYsIDB4QTAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweEYwMDApOwogCQkJdWRlbGF5KDIwKTsKIAkJCXRyc3dfcnggLT0gMzsKIAkJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0xFQUtBR0UpID49IDB4REZDKQpAQCAtMjA0NiwzNCArMTg2NywyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDM2LCAweEZFRkYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDB4MDIwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdDKSB8IDB4MDAwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKSB8IDB4RjAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0MsIDB4MDAwMik7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0EsIDB4RjAwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0N0EsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0EpCi0JCQkJCSAgICAmIDB4RkYwRikgfCAweDAwMTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICB8IDB4ODAwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwNEUpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0N0EsIDB4RkYwRiwgMHgwMDEwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNUQsIDB4ODAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzYpCi0JCQkgICAgICB8IDB4MDQwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDA0MDApOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzYsIGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikKLQkJCSAgICAgIHwgMHgwMjAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KQotCQkJICAgICAgfCAweDA0MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEYsIGI0M19waHlfcmVhZChkZXYsIDB4MDA0RikKLQkJCSAgICAgICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA0RSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDA0RSkKLQkJCQkJICAgICYgMHhGRkMwKSB8IDB4MDAxMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNiwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDVELCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwNEYsIDB4RkZGRSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDdBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKQotCQkJCQkgICAgJiAweEZGMEYpIHwgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDdBLCAweEZGMEYsIDB4MDAxMCk7CiAJfQogfQogCkBAIC0yMDg5LDIyICsxOTAwLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkZDMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KSAmIDB4RkYwMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMzYsIDB4RkZDMCwgKGdwaHktPnRndF9pZGxlX3Rzc2kgLSBncGh5LT5jdXJfaWRsZV90c3NpKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDc4LCAweEZGMDAsIChncGh5LT50Z3RfaWRsZV90c3NpIC0gZ3BoeS0+Y3VyX2lkbGVfdHNzaSkpOwogCWI0M19ncGh5X3Rzc2lfcG93ZXJfbHRfaW5pdChkZXYpOwogCWI0M19ncGh5X2dhaW5fbHRfaW5pdChkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNjAsIGI0M19waHlfcmVhZChkZXYsIDB4MDA2MCkgJiAweEZGQkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDA2MCwgMHhGRkJGKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE0LCAweDAwMDApOwogCiAJQjQzX1dBUk5fT04ocGh5LT5yZXYgPCA2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgIHwgMHgwODAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgICYgMHhGRUZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpCi0JCSAgICAgICYgMHhGRkJGKTsKKwliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwODAwKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0NzgsIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAxLCAweEZGQkYpOwogCiAJYjQzX2dwaHlfZGNfbHRfaW5pdChkZXYsIDEpOwogCkBAIC0yMTM5LDkgKzE5NDUsNyBAQAogCWI0M19oYXJkd2FyZV9wY3RsX2Vhcmx5X2luaXQoZGV2KTsKIAlpZiAoZ3BoeS0+Y3VyX2lkbGVfdHNzaSA9PSAwKSB7CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNzYpCi0JCQkJCSAgICYgMHgwMEY3KSB8IDB4MDA4NCk7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA3NiwgMHgwMEY3LCAweDAwODQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGI0M19yZmF0dCByZmF0dDsKIAkJCXN0cnVjdCBiNDNfYmJhdHQgYmJhdHQ7CkBAIC0yMTc0LDkgKzE5NzgsNyBAQAogCQkJfQogCQl9CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3NikKLQkJCQkJICAmIDB4RkY3Qik7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3NiwgMHhGRjdCKTsKIAkJfSBlbHNlIHsKIAkJCWI0M19zZXRfdHhwb3dlcl9nKGRldiwgJm9sZF9iYmF0dCwKIAkJCQkJICAmb2xkX3JmYXR0LCBvbGRfdHhfY29udHJvbCk7CkBAIC0yMjIwLDIwICsyMDIyLDE0IEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLCAweDgwMDYpOwogCQl9CiAJCWlmICh0bXAgPT0gNSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweENDKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpKQotCQkJCSAgICAgICAmIDB4MDBGRikgfCAweDFGMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpLCAweDAwRkYsIDB4MUYwMCk7CiAJCX0KIAl9CiAJaWYgKChwaHktPnJldiA8PSAyICYmIHBoeS0+Z21vZGUpIHx8IHBoeS0+cmV2ID49IDIpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg3RSksIDB4NzgpOwogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4ODApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpKQotCQkJICAgICAgfCAweDQpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfRVhURygweDAxKSwgMHg4MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLCAweDQpOwogCX0KIAlpZiAoaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkKIAkJYjQzX2NhbGNfbG9vcGJhY2tfZ2FpbihkZXYpOwpAQCAtMjI1MSwxNSArMjA0NywxMCBAQAogCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzIHwgZ3BoeS0+CiAJCQkJICBsb19jb250cm9sLT50eF9tYWduKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpICYgMHhGRkYwKQotCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsIGdwaHktPmxvX2NvbnRyb2wtPnR4X2JpYXMpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgzNiksCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzNikpCi0JCQkgICAgICAgJiAweDBGRkYpIHwgKGdwaHktPmxvX2NvbnRyb2wtPgotCQkJCQkgICAgdHhfYmlhcyA8PCAxMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDSygweDM2KSwgMHgwRkZGLCAoZ3BoeS0+bG9fY29udHJvbC0+dHhfYmlhcyA8PCAxMikpOwogCX0KIAlpZiAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRSksIDB4ODA3NSk7CkBAIC0yMjk4LDExICsyMDg5LDggQEAKIAkgICBidXQgT0ZETSBpcyBsZWdhbCBldmVyeXdoZXJlICovCiAJaWYgKChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDMwNgogCSAgICAgJiYgZGV2LT5kZXYtPmJ1cy0+Y2hpcF9wYWNrYWdlID09IDIpIHx8IDApIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKQotCQkJICAgICAgJiAweEJGRkYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpKQotCQkJICAgICAgJiAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4QkZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEMzKSwgMHg3RkZGKTsKIAl9CiB9CiAKQEAgLTI1MDQsOSArMjI5Miw4IEBACiAKIAliNDNfcGh5X2xvY2soZGV2KTsKIAliNDNfcmFkaW9fbG9jayhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgJiAweEZGRkMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSAmIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCAweEZGRkMpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfR19DUlMsIDB4N0ZGRik7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAzLCA4LCAxKTsKIAogCXN0YXJ0ID0gKGNoYW5uZWwgLSA1ID4gMCkgPyBjaGFubmVsIC0gNSA6IDE7CkBAIC0yNTE3LDExICsyMzA0LDkgQEAKIAkJCXJldFtpIC0gMV0gPSBiNDNfZ3BoeV9hY2lfZGV0ZWN0KGRldiwgaSk7CiAJfQogCWI0M19zd2l0Y2hfY2hhbm5lbChkZXYsIGNoYW5uZWwpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKSB8IDB4MDAwMyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQwMywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDAzKSAmIDB4RkZGOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpIHwgMHg4MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MDIsIDB4RkZGQywgMHgwMDAzKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MDMsIDB4RkZGOCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoZGV2KTsKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgewogCQlpZiAoIXJldFtpXSkKQEAgLTI1NjUsOCArMjM1MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICogYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHMxNiBwYWIwLCBzMTYgcGFiMSwgczE2IHBhYjIpCit1OCAqYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgczE2IHBhYjAsIHMxNiBwYWIxLCBzMTYgcGFiMikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCAqdGFiOwpAQCAtMzE5MSw2ICsyOTc2LDcgQEAKIAkgKiBCYXNlYmFuZCBhdHRlbm51YXRpb24uIFN1YnRyYWN0IGl0LiAqLwogCWJiYXR0X2RlbHRhIC09IDQgKiByZmF0dF9kZWx0YTsKIAorI2lmIEI0M19ERUJVRwogCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX1hNSVRQT1dFUikpIHsKIAkJaW50IGRibSA9IHB3cl9hZGp1c3QgPCAwID8gLXB3cl9hZGp1c3QgOiBwd3JfYWRqdXN0OwogCQliNDNkYmcoZGV2LT53bCwKQEAgLTMxOTksNiArMjk4NSw4IEBACiAJCSAgICAgICAocHdyX2FkanVzdCA8IDAgPyAiLSIgOiAiIiksIFE1Ml9BUkcoZGJtKSwKIAkJICAgICAgIGJiYXR0X2RlbHRhLCByZmF0dF9kZWx0YSk7CiAJfQorI2VuZGlmIC8qIERFQlVHICovCisKIAkvKiBTbyBkbyB3ZSBmaW5hbGx5IG5lZWQgdG8gYWRqdXN0IHNvbWV0aGluZyBpbiBoYXJkd2FyZT8gKi8KIAlpZiAoKHJmYXR0X2RlbHRhID09IDApICYmIChiYmF0dF9kZWx0YSA9PSAwKSkKIAkJZ290byBub19hZGp1c3RtZW50X25lZWRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYwppbmRleCBjNWQ5ZGMzLi41OGUzMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCkBAIC0zLDcgKzMsNyBAQAogICBCcm9hZGNvbSBCNDMgd2lyZWxlc3MgZHJpdmVyCiAgIElFRUUgODAyLjExZyBMUC1QSFkgZHJpdmVyCiAKLSAgQ29weXJpZ2h0IChjKSAyMDA4IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDggKzIzLDEwIEBACiAqLwogCiAjaW5jbHVkZSAiYjQzLmgiCisjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInBoeV9scC5oIgogI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJ0YWJsZXNfbHBwaHkuaCIKIAogCiBzdGF0aWMgaW50IGI0M19scHBoeV9vcF9hbGxvY2F0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01Nyw5ICs1OSwzOTQgQEAKIAlkZXYtPnBoeS5scCA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgbHBwaHlfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjBfMV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlCNDNfV0FSTl9PTigxKTsvL1RPRE8gcmV2IDwgMiBub3Qgc3VwcG9ydGVkLCB5ZXQuCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjJwbHVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHg1MCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfQ1RMLCAweDg4MDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlJWQUwsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjkpLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTCwgMHgxMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMCwgMHhGRjAwLCAweDc4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRENPRkZTRVRUUkFOU0lFTlQsIDB4RjhGRiwgMHgyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVCwgMHhGRjAwLCAweDdGKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENILCAweEZGMEYsIDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QUkVBTUJMRUNPTkZJUk1UTywgMHhGRjAwLCAweDIpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgfjB4NDAwMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4MSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhERiksIDB4RkYwMCwgMHhGNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4REYpLCAweDAwRkYsIDB4RjEwMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9DTElQVEhSRVNILCAweDQ4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSElHQUlOREIsIDB4RkYwMCwgMHg0Nik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RTQpLCAweEZGMDAsIDB4MTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QV1JfVEhSRVNIMSwgMHhGRkYwLCAweDkpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIH4weEYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweDAwRkYsIDB4NTUwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4RjgxRiwgMHhBMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0dBSU5ESVJFQ1RNSVNNQVRDSCwgMHhFMEZGLCAweDMwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0hJR0FJTkRCLCAweDAwRkYsIDB4MkEwMCk7CisJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA9PSAwKSkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTE9XR0FJTkRCLCAweDAwRkYsIDB4MjEwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweEZGMDAsIDB4QSk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xPV0dBSU5EQiwgMHgwMEZGLCAweDFFMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVkVSWUxPV0dBSU5EQiwgMHhGRjAwLCAweEQpOworCX0KKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkZFMCwgMHgxRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RkYpLCAweEZGRTAsIDB4Qyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTAwKSwgMHhGRjAwLCAweDE5KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRiksIDB4MDNGRiwgMHgzQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkMxRiwgMHgzRTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEZGKSwgMHhGRkUwLCAweEMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwMCksIDB4MDBGRiwgMHgxOTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHg4M0ZGLCAweDU4MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZGRTAsIDB4MTIpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlOTUlTTUFUQ0gsIDB4MEZGRiwgMHg5MDAwKTsKKworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjE2KDB4MDgsIDB4MTQpLCAwKTsKKwliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDEyKSwgMHg0MCk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEYwRkYsIDB4QjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1NZTkNQRUFLQ05ULCAweEZGRjgsIDB4Nik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHg5RDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX01JTlBXUl9MRVZFTCwgMHhGRjAwLCAweEExKTsKKwl9IGVsc2UgLyogNUdIeiAqLworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIH4weDQwKTsKKworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweEZGMDAsIDB4QjMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweDAwRkYsIDB4QUQwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0lOUFVUX1BXUkRCLCAweEZGMDAsIGxwcGh5LT5yeF9wd3Jfb2Zmc2V0KTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRVNFVF9DVEwsIDB4NDQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkVTRVRfQ1RMLCAweDgwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8wLCAweEE5NTQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzEsCisJCSAgICAgIDB4MjAwMCB8ICgodTE2KWxwcGh5LT5yc3NpX2dzIDw8IDEwKSB8CisJCSAgICAgICgodTE2KWxwcGh5LT5yc3NpX3ZjIDw8IDQpIHwgbHBwaHktPnJzc2lfdmYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9iYXNlYmFuZF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlscHBoeV90YWJsZV9pbml0KGRldik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKQorCQlscHBoeV9iYXNlYmFuZF9yZXYycGx1c19pbml0KGRldik7CisJZWxzZQorCQlscHBoeV9iYXNlYmFuZF9yZXYwXzFfaW5pdChkZXYpOworfQorCitzdHJ1Y3QgYjIwNjJfZnJlcWRhdGEgeworCXUxNiBmcmVxOworCXU4IGRhdGFbNl07Cit9OworCisvKiBJbml0aWFsaXplIHRoZSAyMDYyIHJhZGlvLiAqLworc3RhdGljIHZvaWQgbHBwaHlfMjA2Ml9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbGZyZXEsIHBkaXYsIHRtcCwgcmVmOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSAqZmQgPSBOVUxMOworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSBmcmVxZGF0YV90YWJbXSA9IHsKKwkJeyAuZnJlcSA9IDEyMDAwLCAuZGF0YVswXSA9ICA2LCAuZGF0YVsxXSA9ICA2LCAuZGF0YVsyXSA9ICA2LAorCQkJCSAuZGF0YVszXSA9ICA2LCAuZGF0YVs0XSA9IDEwLCAuZGF0YVs1XSA9ICA2LCB9LAorCQl7IC5mcmVxID0gMTMwMDAsIC5kYXRhWzBdID0gIDQsIC5kYXRhWzFdID0gIDQsIC5kYXRhWzJdID0gIDQsCisJCQkJIC5kYXRhWzNdID0gIDQsIC5kYXRhWzRdID0gMTEsIC5kYXRhWzVdID0gIDcsIH0sCisJCXsgLmZyZXEgPSAxNDQwMCwgLmRhdGFbMF0gPSAgMywgLmRhdGFbMV0gPSAgMywgLmRhdGFbMl0gPSAgMywKKwkJCQkgLmRhdGFbM10gPSAgMywgLmRhdGFbNF0gPSAxMiwgLmRhdGFbNV0gPSAgNywgfSwKKwkJeyAuZnJlcSA9IDE2MjAwLCAuZGF0YVswXSA9ICAzLCAuZGF0YVsxXSA9ICAzLCAuZGF0YVsyXSA9ICAzLAorCQkJCSAuZGF0YVszXSA9ICAzLCAuZGF0YVs0XSA9IDEzLCAuZGF0YVs1XSA9ICA4LCB9LAorCQl7IC5mcmVxID0gMTgwMDAsIC5kYXRhWzBdID0gIDIsIC5kYXRhWzFdID0gIDIsIC5kYXRhWzJdID0gIDIsCisJCQkJIC5kYXRhWzNdID0gIDIsIC5kYXRhWzRdID0gMTQsIC5kYXRhWzVdID0gIDgsIH0sCisJCXsgLmZyZXEgPSAxOTIwMCwgLmRhdGFbMF0gPSAgMSwgLmRhdGFbMV0gPSAgMSwgLmRhdGFbMl0gPSAgMSwKKwkJCQkgLmRhdGFbM10gPSAgMSwgLmRhdGFbNF0gPSAxNCwgLmRhdGFbNV0gPSAgOSwgfSwKKwl9OworCisJYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoZGV2KTsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fVFhfQ1RMMywgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEw0LCAwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX0NUTDUsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDB4NDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDB4MTApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDApOworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA2Ml9OX1RTU0lfQ1RMMCwgMHgxKTsKKwllbHNlCisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfTl9UU1NJX0NUTDAsIH4weDEpOworCisJLyogR2V0IHRoZSBjcnlzdGFsIGZyZXEsIGluIEh6LiAqLworCWNyeXN0YWxmcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKworCUI0M19XQVJOX09OKCEoYnVzLT5jaGlwY28uY2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKSk7CisJQjQzX1dBUk5fT04oY3J5c3RhbGZyZXEgPT0gMCk7CisKKwlpZiAoY3J5c3RhbGZyZXEgPj0gMzAwMDAwMDApIHsKKwkJcGRpdiA9IDE7CisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweEZGRkIpOworCX0gZWxzZSB7CisJCXBkaXYgPSAyOworCQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweDQpOworCX0KKworCXRtcCA9ICg4MDAwMDAwMDAgKiBwZGl2ICsgY3J5c3RhbGZyZXEpIC8gKDMyMDAwMDAwICogcGRpdik7CisJdG1wID0gKHRtcCAtIDEpICYgMHhGRjsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE4LCB0bXApOworCisJdG1wID0gKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBwZGl2KSAvICgyMDAwMDAwICogcGRpdik7CisJdG1wID0gKCh0bXAgJiAweEZGKSAtIDEpICYgMHhGRkZGOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTksIHRtcCk7CisKKwlyZWYgPSAoMTAwMCAqIHBkaXYgKyAyICogY3J5c3RhbGZyZXEpIC8gKDIwMDAgKiBwZGl2KTsKKwlyZWYgJj0gMHhGRkZGOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYik7IGkrKykgeworCQlpZiAocmVmIDwgZnJlcWRhdGFfdGFiW2ldLmZyZXEpIHsKKwkJCWZkID0gJmZyZXFkYXRhX3RhYltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZmQpCisJCWZkID0gJmZyZXFkYXRhX3RhYltBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYikgLSAxXTsKKwliNDNkYmcoZGV2LT53bCwgImIyMDYyOiBVc2luZyBjcnlzdGFsIHRhYiBlbnRyeSAldSBrSHouXG4iLAorCSAgICAgICBmZC0+ZnJlcSk7IC8qIEZJWE1FOiBLZWVwIHRoaXMgcHJpbnRrIHVudGlsIHRoZSBjb2RlIGlzIGZ1bGx5IGRlYnVnZ2VkLiAqLworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEw4LAorCQkJKCh1MTYpKGZkLT5kYXRhWzFdKSA8PCA0KSB8IGZkLT5kYXRhWzBdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDksCisJCQkoKHUxNikoZmQtPmRhdGFbM10pIDw8IDQpIHwgZmQtPmRhdGFbMl0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTAsIGZkLT5kYXRhWzRdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDExLCBmZC0+ZGF0YVs1XSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIDIwNjMgcmFkaW8uICovCitzdGF0aWMgdm9pZCBscHBoeV8yMDYzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8vVE9ETworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zeW5jX3N0eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JhZGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFRoZSByYWRpbyBpcyBhdHRhY2hlZCB0aHJvdWdoIHRoZSA0d2lyZSBidXMuICovCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweDIpOworCXVkZWxheSgxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweEZGRkQpOworCXVkZWxheSgxKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCWxwcGh5XzIwNjJfaW5pdChkZXYpOworCX0gZWxzZSB7CisJCWxwcGh5XzIwNjNfaW5pdChkZXYpOworCQlscHBoeV9zeW5jX3N0eChkZXYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjApLCAweDVGODApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjEpLCAwKTsKKwkJLy9UT0RPIERvIHNvbWV0aGluZyBvbiB0aGUgYmFja3BsYW5lCisJfQorfQorCisvKiBSZWFkIHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgZnJvbSBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIGxwcGh5X3JlYWRfdHhfcGN0bF9tb2RlX2Zyb21faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwljdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTUQpOworCXN3aXRjaCAoY3RsICYgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREUpIHsKKwljYXNlIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjoKKwkJbHBwaHktPnR4cGN0bF9tb2RlID0gQjQzX0xQUEhZX1RYUENUTF9PRkY7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1c6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfU1c7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFc6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfSFc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfVU5LTk9XTjsKKwkJQjQzX1dBUk5fT04oMSk7CisJCWJyZWFrOworCX0KK30KKworLyogU2V0IHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgaW4gaGFyZHdhcmUuICovCitzdGF0aWMgdm9pZCBscHBoeV93cml0ZV90eF9wY3RsX21vZGVfdG9faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwlzd2l0Y2ggKGxwcGh5LT50eHBjdGxfbW9kZSkgeworCWNhc2UgQjQzX0xQUEhZX1RYUENUTF9PRkY6CisJCWN0bCA9IEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX0hXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9IVzsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX1NXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9TVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsID0gMDsKKwkJQjQzX1dBUk5fT04oMSk7CisJfQorCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIGVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIG1vZGUpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgb2xkbW9kZTsKKworCW9sZG1vZGUgPSBscHBoeS0+dHhwY3RsX21vZGU7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCWlmIChscHBoeS0+dHhwY3RsX21vZGUgPT0gbW9kZSkKKwkJcmV0dXJuOworCWxwcGh5LT50eHBjdGxfbW9kZSA9IG1vZGU7CisKKwlpZiAob2xkbW9kZSA9PSBCNDNfTFBQSFlfVFhQQ1RMX0hXKSB7CisJCS8vVE9ETyBVcGRhdGUgVFggUG93ZXIgTlBUCisJCS8vVE9ETyBDbGVhciBhbGwgVFggUG93ZXIgb2Zmc2V0cworCX0gZWxzZSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpIHsKKwkJCS8vVE9ETyBSZWNhbGN1bGF0ZSB0YXJnZXQgVFggcG93ZXIKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCQkJMHhGRjgwLCBscHBoeS0+dHNzaV9pZHgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTSwKKwkJCQkJMHg4RkZGLCAoKHUxNilscHBoeS0+dHNzaV9ucHQgPDwgMTYpKTsKKwkJCS8vVE9ETyBTZXQgIlRTU0kgVHJhbnNtaXQgQ291bnQiIHZhcmlhYmxlIHRvIHRvdGFsIHRyYW5zbWl0dGVkIGZyYW1lIGNvdW50CisJCQkvL1RPRE8gRGlzYWJsZSBUWCBnYWluIG92ZXJyaWRlCisJCQlscHBoeS0+dHhfcHdyX2lkeF9vdmVyID0gLTE7CisJCX0KKwl9CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpCisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhEMCksIDB4RkQsIDB4Mik7CisJCWVsc2UKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHhGRCwgMCk7CisJfQorCWxwcGh5X3dyaXRlX3R4X3BjdGxfbW9kZV90b19oYXJkd2FyZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKworCWxwcGh5LT50eF9wd3JfaWR4X292ZXIgPSBpbmRleDsKKwlpZiAobHBwaHktPnR4cGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKQorCQlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfU1cpOworCisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2J0Y29leF9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19CVENPRVhfQ1RMLCAweDMpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQlRDT0VYX1RYQ1RMLCAweEZGKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MzIgKnNhdmVkX3RhYjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2F2ZWRfdGFiX3NpemUgPSAyNTY7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgdHhwY3RsX21vZGU7CisJczggdHhfcHdyX2lkeF9vdmVyOworCXUxNiB0c3NpX25wdCwgdHNzaV9pZHg7CisKKwlzYXZlZF90YWIgPSBrY2FsbG9jKHNhdmVkX3RhYl9zaXplLCBzaXplb2Yoc2F2ZWRfdGFiWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlZF90YWIpIHsKKwkJYjQzZXJyKGRldi0+d2wsICJQUjQxNTczIGZhaWxlZC4gT3V0IG9mIG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXR4cGN0bF9tb2RlID0gbHBwaHktPnR4cGN0bF9tb2RlOworCXR4X3B3cl9pZHhfb3ZlciA9IGxwcGh5LT50eF9wd3JfaWR4X292ZXI7CisJdHNzaV9ucHQgPSBscHBoeS0+dHNzaV9ucHQ7CisJdHNzaV9pZHggPSBscHBoeS0+dHNzaV9pZHg7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfbHB0YWJfcmVhZF9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTAsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfSBlbHNlIHsKKwkJYjQzX2xwdGFiX3JlYWRfYnVsayhkZXYsIEI0M19MUFRBQjMyKDcsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfQorCS8vVE9ETworCisJa2ZyZWUoc2F2ZWRfdGFiKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfY2FsaWJyYXRpb24oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCWVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHNhdmVkX3BjdGxfbW9kZTsKKworCWI0M19tYWNfc3VzcGVuZChkZXYpOworCisJbHBwaHlfYnRjb2V4X292ZXJyaWRlKGRldik7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXNhdmVkX3BjdGxfbW9kZSA9IGxwcGh5LT50eHBjdGxfbW9kZTsKKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfT0ZGKTsKKwkvL1RPRE8gUGVyZm9ybSB0cmFuc21pdCBwb3dlciB0YWJsZSBJL1EgTE8gY2FsaWJyYXRpb24KKwlpZiAoKGRldi0+cGh5LnJldiA9PSAwKSAmJiAoc2F2ZWRfcGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKSkKKwkJbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKGRldik7CisJLy9UT0RPIElmIGEgZnVsbCBjYWxpYnJhdGlvbiBoYXMgbm90IGJlZW4gcGVyZm9ybWVkIG9uIHRoaXMgY2hhbm5lbCB5ZXQsIHBlcmZvcm0gUEFQRCBUWC1wb3dlciBjYWxpYnJhdGlvbgorCWxwcGh5X3NldF90eF9wb3dlcl9jb250cm9sKGRldiwgc2F2ZWRfcGN0bF9tb2RlKTsKKwkvL1RPRE8gUGVyZm9ybSBJL1EgY2FsaWJyYXRpb24gd2l0aCBhIHNpbmdsZSBjb250cm9sIHZhbHVlIHNldAorCisJYjQzX21hY19lbmFibGUoZGV2KTsKK30KKworLyogSW5pdGlhbGl6ZSBUWCBwb3dlciBjb250cm9sICovCitzdGF0aWMgdm9pZCBscHBoeV90eF9wY3RsX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWlmICgwLypGSVhNRSBIV1BDVEwgY2FwYWJsZSAqLykgeworCQkvL1RPRE8KKwl9IGVsc2UgeyAvKiBUaGlzIGRldmljZSBpcyBvbmx5IHNvZnR3YXJlIFRYIHBvd2VyIGNvbnRyb2wgY2FwYWJsZS4gKi8KKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJLy9UT0RPCisJCX0gZWxzZSB7CisJCQkvL1RPRE8KKwkJfQorCQkvL1RPRE8gc2V0IEJCIG11bHRpcGxpZXIgdG8gMHgwMDk2CisJfQorfQorCitzdGF0aWMgaW50IGI0M19scHBoeV9vcF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwkvKiBUT0RPOiBiYW5kIFNQUk9NICovCisJbHBwaHlfYmFzZWJhbmRfaW5pdChkZXYpOworCWxwcGh5X3JhZGlvX2luaXQoZGV2KTsKKwkvL1RPRE8gY2FsaWJyYXRlIFJDCisJLy9UT0RPIHNldCBjaGFubmVsCisJbHBwaHlfdHhfcGN0bF9pbml0KGRldik7CisJLy9UT0RPIGZ1bGwgY2FsaWIKIAogCXJldHVybiAwOwogfQpAQCAtMTE1LDcgKzUwMiw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjQzX2xwcGh5X29wX2dldF9kZWZhdWx0X2NoYW4oc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCXJldHVybiAxOyAvKiBEZWZhdWx0IHRvIGNoYW5uZWwgMSAqLworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiAxOworCXJldHVybiAzNjsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2xwcGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmgKaW5kZXggYjBiNTM1Ny4uMTgzNzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuaApAQCAtNCw4ICs0LDI4NSBAQAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBMUC1QSFkgKi8KIAogCisvKiBUaGUgQ0NLIFBIWSByZWdpc3RlciByYW5nZS4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfVkVSU0lPTgkJCUI0M19QSFlfQ0NLKDB4MDApIC8qIEIgUEhZIHZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfQkJDT05GSUcJCQlCNDNfUEhZX0NDSygweDAxKSAvKiBCIFBIWSBCQkNvbmZpZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9SWF9TVEFUMAkJCUI0M19QSFlfQ0NLKDB4MDQpIC8qIEIgUEhZIFJYIFN0YXR1czAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDEJCQlCNDNfUEhZX0NDSygweDA1KSAvKiBCIFBIWSBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NSU19USFJFU0gJCQlCNDNfUEhZX0NDSygweDA2KSAvKiBCIFBIWSBDUlMgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RYRVJST1IJCQlCNDNfUEhZX0NDSygweDA3KSAvKiBCIFBIWSBUeEVycm9yICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NIQU5ORUwJCQlCNDNfUEhZX0NDSygweDA4KSAvKiBCIFBIWSBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1dPUktBUk9VTkQJCQlCNDNfUEhZX0NDSygweDA5KSAvKiBCIFBIWSB3b3JrYXJvdW5kICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RFU1QJCQlCNDNfUEhZX0NDSygweDBBKSAvKiBCIFBIWSBUZXN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0ZPVVJXSVJFX0FERFIJCUI0M19QSFlfQ0NLKDB4MEIpIC8qIEIgUEhZIEZvdXJ3aXJlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfRk9VUldJUkVfREFUQV9ISQkJQjQzX1BIWV9DQ0soMHgwQykgLyogQiBQSFkgRm91cndpcmUgRGF0YSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9GT1VSV0lSRV9EQVRBX0xPCQlCNDNfUEhZX0NDSygweDBEKSAvKiBCIFBIWSBGb3Vyd2lyZSBEYXRhIExvICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0JJU1RfU1RBVAkJCUI0M19QSFlfQ0NLKDB4MEUpIC8qIEIgUEhZIEJpc3QgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9QQV9SQU1QX1RYX1RPCQkJQjQzX1BIWV9DQ0soMHgxMCkgLyogUEEgUmFtcCBUWCBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9TWU5USF9EQ19USU1FUgkJQjQzX1BIWV9DQ0soMHgxMSkgLyogUkYgU3ludGggREMgVGltZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BBX1JBTVBfVFhfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMikgLyogUEEgcmFtcCBUWCBUaW1lIGluICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9GSUxURVJfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMykgLyogUlggRmlsdGVyIFRpbWUgaW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BMTF9DT0VGRl9TCQkJQjQzX1BIWV9DQ0soMHgxOCkgLyogUExMIENvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9QTExfT1VUCQkJQjQzX1BIWV9DQ0soMHgxOSkgLyogUExMIE91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlNTSV9USFJFUwkJCUI0M19QSFlfQ0NLKDB4MjApIC8qIFJTU0kgVGhyZXNob2xkICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19ISAkJCUI0M19QSFlfQ0NLKDB4MjEpIC8qIElRIFRocmVzaG9sZCBISCAqLworI2RlZmluZSBCNDNfTFBQSFlfSVFfVEhSRVNfSAkJCUI0M19QSFlfQ0NLKDB4MjIpIC8qIElRIFRocmVzaG9sZCBIICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19MCQkJQjQzX1BIWV9DQ0soMHgyMykgLyogSVEgVGhyZXNob2xkIEwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1RIUkVTX0xMCQkJQjQzX1BIWV9DQ0soMHgyNCkgLyogSVEgVGhyZXNob2xkIExMICovCisjZGVmaW5lIEI0M19MUFBIWV9BR0NfR0FJTgkJCUI0M19QSFlfQ0NLKDB4MjUpIC8qIEFHQyBHYWluICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFfR0FJTl9SQU5HRQkJQjQzX1BIWV9DQ0soMHgyNikgLyogTE5BIEdhaW4gUmFuZ2UgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0pTU0kJCQkJQjQzX1BIWV9DQ0soMHgyNykgLyogSlNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFNTSV9DVEwJCQlCNDNfUEhZX0NDSygweDI4KSAvKiBUU1NJIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RTU0kJCQkJQjQzX1BIWV9DQ0soMHgyOSkgLyogVFNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9TUwkJCUI0M19QSFlfQ0NLKDB4MkEpIC8qIFRSIExvc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPX0xFQUtBR0UJCQlCNDNfUEhZX0NDSygweDJCKSAvKiBMTyBMZWFrYWdlICovCisjZGVmaW5lIEI0M19MUFBIWV9MT19SU1NJQUNDCQkJQjQzX1BIWV9DQ0soMHgyQykgLyogTE8gUlNTSUFjYyAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9fSVFfTUFHX0FDQwkJCUI0M19QSFlfQ0NLKDB4MkQpIC8qIExPIElRIE1hZyBBY2MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX0RDT0ZGU0VUMQkJCUI0M19QSFlfQ0NLKDB4MkUpIC8qIFRYIERDT2Zmc2V0MSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfRENPRkZTRVQyCQkJQjQzX1BIWV9DQ0soMHgyRikgLyogVFggRENPZmZzZXQyICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DUEVBS0NOVAkJCUI0M19QSFlfQ0NLKDB4MzApIC8qIFN5bmNQZWFrQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRlJFUQkJCUI0M19QSFlfQ0NLKDB4MzEpIC8qIFN5bmNGcmVxICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRElWRVJTSVRZQ1RMCQlCNDNfUEhZX0NDSygweDMyKSAvKiBTeW5jRGl2ZXJzaXR5Q29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUwJCQlCNDNfUEhZX0NDSygweDMzKSAvKiBQZWFrRW5lcmd5TCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUgJCQlCNDNfUEhZX0NDSygweDM0KSAvKiBQZWFrRW5lcmd5SCAqLworI2RlZmluZSBCNDNfTFBQSFlfU1lOQ0NUTAkJCUI0M19QSFlfQ0NLKDB4MzUpIC8qIFN5bmNDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTU1RFUAkJCUI0M19QSFlfQ0NLKDB4MzgpIC8qIERzc3NTdGVwICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTV0FSTVVQCQkJQjQzX1BIWV9DQ0soMHgzOSkgLyogRHNzc1dhcm11cCAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1NJR1BPVwkJCUI0M19QSFlfQ0NLKDB4M0QpIC8qIERzc3NTaWdQb3cgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NGRERFVEVDVEJMT0NLVElNRQkJQjQzX1BIWV9DQ0soMHg0MCkgLyogU2ZkRGV0ZWN0QmxvY2tUSW1lICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRUTwkJCQlCNDNfUEhZX0NDSygweDQxKSAvKiBTRkRUaW1lT3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRDVEwJCQlCNDNfUEhZX0NDSygweDQyKSAvKiBTRkRDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SWERCRwkJCQlCNDNfUEhZX0NDSygweDQzKSAvKiByeERlYnVnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9ERUxBWUNPTVAJCQlCNDNfUEhZX0NDSygweDQ0KSAvKiBSWCBEZWxheUNvbXAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0RST1BPVVRUTwkJCUI0M19QSFlfQ0NLKDB4NDUpIC8qIENSU0Ryb3BvdXRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QU0VVRE9TSE9SVFRPCQkJQjQzX1BIWV9DQ0soMHg0NikgLyogUHNldWRvU2hvcnRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUjM5MzEJCQlCNDNfUEhZX0NDSygweDQ3KSAvKiBQUjM5MzEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NDT0VGRjEJCQlCNDNfUEhZX0NDSygweDQ4KSAvKiBEU1NTQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTQ09FRkYyCQkJQjQzX1BIWV9DQ0soMHg0OSkgLyogRFNTU0NvZWZmMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLQ09FRkYxCQkJQjQzX1BIWV9DQ0soMHg0QSkgLyogQ0NLQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9DQ0tDT0VGRjIJCQlCNDNfUEhZX0NDSygweDRCKSAvKiBDQ0tDb2VmZjIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSQ09SUgkJCUI0M19QSFlfQ0NLKDB4NEMpIC8qIFRSQ29yciAqLworI2RlZmluZSBCNDNfTFBQSFlfQU5HTEVTQ0FMRQkJCUI0M19QSFlfQ0NLKDB4NEQpIC8qIEFuZ2xlU2NhbGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09QVElPTkFMTU9ERVMyCQlCNDNfUEhZX0NDSygweDRGKSAvKiBPcHRpb25hbE1vZGVzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLTE1TU1RFUFNJWkUJCUI0M19QSFlfQ0NLKDB4NTApIC8qIENDS0xNU1N0ZXBTaXplICovCisjZGVmaW5lIEI0M19MUFBIWV9ERkVCWVBBU1MJCQlCNDNfUEhZX0NDSygweDUxKSAvKiBERkVCeXBhc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS1NUQVJUREVMQVlMT05HCQlCNDNfUEhZX0NDSygweDUyKSAvKiBDQ0tTdGFydERlbGF5TG9uZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLU1RBUlRERUxBWVNIT1JUCQlCNDNfUEhZX0NDSygweDUzKSAvKiBDQ0tTdGFydERlbGF5U2hvcnQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BQUk9DQ0hERUxBWQkJCUI0M19QSFlfQ0NLKDB4NTQpIC8qIFBwcm9jQ2hEZWxheSAqLworI2RlZmluZSBCNDNfTFBQSFlfUFBST0NPTk9GRgkJCUI0M19QSFlfQ0NLKDB4NTUpIC8qIFBQcm9jT25PZmYgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQxMAkJQjQzX1BIWV9DQ0soMHg1QikgLyogTE5BR2FpblR3b0JpdDEwICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFHQUlOVFdPQklUMzIJCUI0M19QSFlfQ0NLKDB4NUMpIC8qIExOQUdhaW5Ud29CaXQzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfT1BUSU9OQUxNT0RFUwkJCUI0M19QSFlfQ0NLKDB4NUQpIC8qIE9wdGlvbmFsTW9kZXMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDIJCQlCNDNfUEhZX0NDSygweDVFKSAvKiBCIFBIWSBSWCBTdGF0dXMyICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1JYX1NUQVQzCQkJQjQzX1BIWV9DQ0soMHg1RikgLyogQiBQSFkgUlggU3RhdHVzMyAqLworI2RlZmluZSBCNDNfTFBQSFlfUFdETkRBQ0RFTEFZCQkJQjQzX1BIWV9DQ0soMHg2MykgLyogcHdkbkRhY0RlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRElHSUdBSU5fQ1RMCQlCNDNfUEhZX0NDSygweDY3KSAvKiBGaW5lRGlnaUdhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcyR0FJTlRCTExOQTgJCUI0M19QSFlfQ0NLKDB4NjgpIC8qIExnMkdhaW5UYmxMTkE4ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BMjgJCUI0M19QSFlfQ0NLKDB4NjkpIC8qIExnMkdhaW5UYmxMTkEyOCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTlRCTExOQVRSU1cJCUI0M19QSFlfQ0NLKDB4NkEpIC8qIEdhaW5UYmxMTkFUclN3ICovCisjZGVmaW5lIEI0M19MUFBIWV9QRUFLRU5FUkdZCQkJQjQzX1BIWV9DQ0soMHg2QikgLyogUGVha0VuZXJneSAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcySU5JVEdBSU4JCQlCNDNfUEhZX0NDSygweDZDKSAvKiBsZzJJbml0R2FpbiAqLworI2RlZmluZSBCNDNfTFBQSFlfQkxBTktDT1VOVExOQVBHQQkJQjQzX1BIWV9DQ0soMHg2RCkgLyogQmxhbmtDb3VudExuYVBnYSAqLworI2RlZmluZSBCNDNfTFBQSFlfTE5BR0FJTlRXT0JJVDU0CQlCNDNfUEhZX0NDSygweDZFKSAvKiBMTkFHYWluVHdvQml0NTQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQ3NgkJQjQzX1BIWV9DQ0soMHg2RikgLyogTE5BR2FpblR3b0JpdDc2ICovCisjZGVmaW5lIEI0M19MUFBIWV9KU1NJQ1RMCQkJQjQzX1BIWV9DQ0soMHg3MCkgLyogSlNTSUNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xHMkdBSU5UQkxMTkE0NAkJQjQzX1BIWV9DQ0soMHg3MSkgLyogTGcyR2FpblRibExOQTQ0ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BNjIJCUI0M19QSFlfQ0NLKDB4NzIpIC8qIExnMkdhaW5UYmxMTkE2MiAqLworCisvKiBUaGUgT0ZETSBQSFkgcmVnaXN0ZXIgcmFuZ2UuICovCisjZGVmaW5lIEI0M19MUFBIWV9WRVJTSU9OCQkJQjQzX1BIWV9PRkRNKDB4MDApIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JCQ09ORklHCQkJQjQzX1BIWV9PRkRNKDB4MDEpIC8qIEJCQ29uZmlnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMAkJCUI0M19QSFlfT0ZETSgweDA0KSAvKiBSWCBTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMQkJCUI0M19QSFlfT0ZETSgweDA1KSAvKiBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9FUlJPUgkJCUI0M19QSFlfT0ZETSgweDA3KSAvKiBUWCBFcnJvciAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0hBTk5FTAkJCUI0M19QSFlfT0ZETSgweDA4KSAvKiBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9XT1JLQVJPVU5ECQkJQjQzX1BIWV9PRkRNKDB4MDkpIC8qIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0ZPVVJXSVJFX0FERFIJCQlCNDNfUEhZX09GRE0oMHgwQikgLyogRm91cndpcmUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBSEkJCUI0M19QSFlfT0ZETSgweDBDKSAvKiBGb3Vyd2lyZURhdGFIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBTE8JCUI0M19QSFlfT0ZETSgweDBEKSAvKiBGb3Vyd2lyZURhdGFMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfQklTVFNUQVQwCQkJQjQzX1BIWV9PRkRNKDB4MEUpIC8qIEJpc3RTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9CSVNUU1RBVDEJCQlCNDNfUEhZX09GRE0oMHgwRikgLyogQmlzdFN0YXR1czEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MTApIC8qIGNyc2dhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVBXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxMSkgLyogb2ZkbVBvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1QV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTIpIC8qIG9mZG1Qb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNUFdSX1RIUkVTSDIJCUI0M19QSFlfT0ZETSgweDEzKSAvKiBvZmRtUG93ZXIgVGhyZXNoMiAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1BXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxNCkgLyogZHNzc1Bvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NQV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTUpIC8qIGRzc3NQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwJCQlCNDNfUEhZX09GRE0oMHgxNikgLyogTWluUG93ZXIgTGV2ZWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMAkJQjQzX1BIWV9PRkRNKDB4MTcpIC8qIG9mZG1TeW5jVGhyZXNoMCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gxCQlCNDNfUEhZX09GRE0oMHgxOCkgLyogb2ZkbVN5bmNUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRlJFUUVTVAkJCUI0M19QSFlfT0ZETSgweDE5KSAvKiBGaW5lRnJlcUVzdCAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRUFGVEVSUEtUUlhUTwkJQjQzX1BIWV9PRkRNKDB4MUEpIC8qIElETEVhZnRlclBrdFJYVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfTFRSTl9DVEwJCQlCNDNfUEhZX09GRE0oMHgxQikgLyogTFRSTiBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVAkJQjQzX1BIWV9PRkRNKDB4MUMpIC8qIERDT2Zmc2V0VHJhbnNpZW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUkVBTUJMRUlOVE8JCQlCNDNfUEhZX09GRE0oMHgxRCkgLyogUHJlYW1ibGVJblRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BSRUFNQkxFQ09ORklSTVRPCQlCNDNfUEhZX09GRE0oMHgxRSkgLyogUHJlYW1ibGVDb25maXJtVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xJUFRIUkVTSAkJCUI0M19QSFlfT0ZETSgweDFGKSAvKiBDbGlwVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MjApIC8qIENsaXBDdHJUaHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVElNRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHgyMSkgLyogb2ZkbVN5bmNUaW1lciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9XQUlURk9SUEhZU0VMVE8JCUI0M19QSFlfT0ZETSgweDIyKSAvKiBXYWl0Zm9yUEhZU2VsVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfSElHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyMykgLyogSGlHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPV0dBSU5EQgkJCUI0M19QSFlfT0ZETSgweDI0KSAvKiBMb3dHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyNSkgLyogVmVyeUxvd0dhaW5EQiAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTk1JU01BVENICQkJQjQzX1BIWV9PRkRNKDB4MjYpIC8qIGdhaW5NaXNtYXRjaCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENICQlCNDNfUEhZX09GRE0oMHgyNykgLyogZ2FpbmRpcmVjdE1pc21hdGNoICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMAkJCUI0M19QSFlfT0ZETSgweDI4KSAvKiBQb3dlciBUaHJlc2gwICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMQkJCUI0M19QSFlfT0ZETSgweDI5KSAvKiBQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9ERVRFQ1RPUl9ERUxBWV9BREpVU1QJCUI0M19QSFlfT0ZETSgweDJBKSAvKiBEZXRlY3RvciBEZWxheSBBZGp1c3QgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JFRFVDRURfREVURUNUT1JfREVMQVkJQjQzX1BIWV9PRkRNKDB4MkIpIC8qIFJlZHVjZWQgRGV0ZWN0b3IgRGVsYXkgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RBVEFfVE8JCQlCNDNfUEhZX09GRE0oMHgyQykgLyogZGF0YSBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DT1JSRUxBVE9SX0RJU19ERUxBWQkJQjQzX1BIWV9PRkRNKDB4MkQpIC8qIGNvcnJlbGF0b3IgRGlzIERlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9ESVZFUlNJVFlfR0FJTkJBQ0sJCUI0M19QSFlfT0ZETSgweDJFKSAvKiBEaXZlcnNpdHkgR2FpbkJhY2sgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NfQ09ORklSTV9DTlQJCUI0M19QSFlfT0ZETSgweDJGKSAvKiBEU1NTIENvbmZpcm0gQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ19CTEFOS19JTlQJCQlCNDNfUEhZX09GRE0oMHgzMCkgLyogREMgQmxhbmsgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dBSU5fTUlTTUFUQ0hfTElNSVQJCUI0M19QSFlfT0ZETSgweDMxKSAvKiBnYWluIE1pc21hdGNoIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DUlNfRURfVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MzIpIC8qIGNycyBlZCB0aHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BIQVNFX1NISUZUX0NUTAkJQjQzX1BIWV9PRkRNKDB4MzMpIC8qIHBoYXNlIHNoaWZ0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lOUFVUX1BXUkRCCQkJQjQzX1BIWV9PRkRNKDB4MzQpIC8qIElucHV0IFBvd2VyREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1fU1lOQ19DVEwJCQlCNDNfUEhZX09GRE0oMHgzNSkgLyogb2ZkbSBzeW5jIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzAJCQlCNDNfUEhZX09GRE0oMHgzNikgLyogQWZlIEFEQyBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzEJCQlCNDNfUEhZX09GRE0oMHgzNykgLyogQWZlIEFEQyBDb250cm9sIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzIJCQlCNDNfUEhZX09GRE0oMHgzOCkgLyogQWZlIEFEQyBDb250cm9sIDIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EQUNfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MzkpIC8qIEFmZSBEQUMgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTAkJCUI0M19QSFlfT0ZETSgweDNBKSAvKiBBZmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTF9PVlIJCQlCNDNfUEhZX09GRE0oMHgzQikgLyogQWZlIENvbnRyb2wgT3ZyICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfQ1RMX09WUlZBTAkJQjQzX1BIWV9PRkRNKDB4M0MpIC8qIEFmZSBDb250cm9sIE92clZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzAJCUI0M19QSFlfT0ZETSgweDNEKSAvKiBBZmUgUlNTSSBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xCQlCNDNfUEhZX09GRE0oMHgzRSkgLyogQWZlIFJTU0kgQ29udHJvbCAxICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfUlNTSV9TRUwJCQlCNDNfUEhZX09GRE0oMHgzRikgLyogQWZlIFJTU0kgU2VsICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9USFJFU0gJCQlCNDNfUEhZX09GRE0oMHg0MCkgLyogUmFkYXIgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9CTEFOS19JTlQJCUI0M19QSFlfT0ZETSgweDQxKSAvKiBSYWRhciBibGFuayBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfTUlOX0ZNX0lOVAkJQjQzX1BIWV9PRkRNKDB4NDIpIC8qIFJhZGFyIG1pbiBmbSBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfR0FJTl9UTwkJCUI0M19QSFlfT0ZETSgweDQzKSAvKiBSYWRhciBnYWluIHRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1BVTFNFX1RPCQlCNDNfUEhZX09GRE0oMHg0NCkgLyogUmFkYXIgcHVsc2UgdGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfREVURUNUX0ZNX0NUTAkJQjQzX1BIWV9PRkRNKDB4NDUpIC8qIFJhZGFyIGRldGVjdCBGTSBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9ERVRFQ1RfRU4JCUI0M19QSFlfT0ZETSgweDQ2KSAvKiBSYWRhciBkZXRlY3QgRW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1JEX0RBVEFfUkVHCQlCNDNfUEhZX09GRE0oMHg0NykgLyogUmFkYXIgUmQgRGF0YSBSZWcgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xQX1BIWV9DVEwJCQlCNDNfUEhZX09GRE0oMHg0OCkgLyogTFAgUEhZIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NMQVNTSUZJRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHg0OSkgLyogY2xhc3NpZmllciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SRVNFVF9DVEwJCQlCNDNfUEhZX09GRE0oMHg0QSkgLyogcmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xLRU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NEIpIC8qIENsa0VuIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAJCQlCNDNfUEhZX09GRE0oMHg0QykgLyogUkYgT3ZlcnJpZGUgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAJCUI0M19QSFlfT0ZETSgweDREKSAvKiBSRiBPdmVycmlkZSBWYWwgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzEJCQlCNDNfUEhZX09GRE0oMHg0RSkgLyogVFIgTG9va3VwIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF8yCQkJQjQzX1BIWV9PRkRNKDB4NEYpIC8qIFRSIExvb2t1cCAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJU0VMTE9PS1VQMQkJQjQzX1BIWV9PRkRNKDB4NTApIC8qIFJzc2lTZWxMb29rdXAxICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTUQJCQlCNDNfUEhZX09GRE0oMHg1MSkgLyogaXFsbyBDYWwgQ21kICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTURfTl9OVU0JCUI0M19QSFlfT0ZETSgweDUyKSAvKiBpcWxvIENhbCBDbWQgTiBudW0gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRTE9fQ0FMX0NNRF9HX0NUTAkJQjQzX1BIWV9PRkRNKDB4NTMpIC8qIGlxbG8gQ2FsIENtZCBHIGNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BQ0lOVF9EQkdfUkVHSVNURVIJCUI0M19QSFlfT0ZETSgweDU0KSAvKiBtYWNpbnQgRGVidWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFX0FERFIJCQlCNDNfUEhZX09GRE0oMHg1NSkgLyogVGFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEFCTEVEQVRBTE8JCQlCNDNfUEhZX09GRE0oMHg1NikgLyogVGFibGVkYXRhTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFREFUQUhJCQkJQjQzX1BIWV9PRkRNKDB4NTcpIC8qIFRhYmxlZGF0YUhpICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX0VOQUJMRV9BRERSCQlCNDNfUEhZX09GRE0oMHg1OCkgLyogcGh5IENSUyBFbmFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NTkpIC8qIElkbGV0aW1lIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX0NSU19PTl9MTwkJQjQzX1BIWV9PRkRNKDB4NUEpIC8qIElkbGV0aW1lIENSUyBPbiBMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1JTX09OX0hJCQlCNDNfUEhZX09GRE0oMHg1QikgLyogSWRsZXRpbWUgQ1JTIE9uIEhpICovCisjZGVmaW5lIEI0M19MUFBIWV9JRExFVElNRV9NRUFTX1RJTUVfTE8JCUI0M19QSFlfT0ZETSgweDVDKSAvKiBJZGxldGltZSBNZWFzIFRpbWUgTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX01FQVNfVElNRV9ISQkJQjQzX1BIWV9PRkRNKDB4NUQpIC8qIElkbGV0aW1lIE1lYXMgVGltZSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fVFhfQUREUglCNDNfUEhZX09GRE0oMHg1RSkgLyogUmVzZXQgbGVuIE9mZG0gVFggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fUlhfQUREUglCNDNfUEhZX09GRE0oMHg1RikgLyogUmVzZXQgbGVuIE9mZG0gUlggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVHX0NSU19FTkFCTEUJCUI0M19QSFlfT0ZETSgweDYwKSAvKiByZWcgY3JzIGVuYWJsZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUExDUF9UTVRfU1RSMF9DVFJfTUlOCQlCNDNfUEhZX09GRE0oMHg2MSkgLyogUExDUCBUbXQgU3RyMCBDdHIgTWluICovCisjZGVmaW5lIEI0M19MUFBIWV9QS1RfRlNNX1JFU0VUX0xFTl9WQUwJCUI0M19QSFlfT0ZETSgweDYyKSAvKiBQa3QgZnNtIFJlc2V0IExlbiBWYWx1ZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVBRFNZTTJSRVNFVF9DVEwJCUI0M19QSFlfT0ZETSgweDYzKSAvKiByZWFkc3ltMnJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RDX0ZJTFRFUl9ERUxBWTEJCUI0M19QSFlfT0ZETSgweDY0KSAvKiBEYyBmaWx0ZXIgZGVsYXkxICovCisjZGVmaW5lIEI0M19MUFBIWV9QQUNLRVRfUlhfQUNUSVZFX1RPCQlCNDNfUEhZX09GRE0oMHg2NSkgLyogcGFja2V0IHJ4IEFjdGl2ZSB0aW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9UT1ZBTAkJCUI0M19QSFlfT0ZETSgweDY2KSAvKiBlZCB0aW1lb3V0VmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0hPTERfQ1JTX09OX1ZBTAkJQjQzX1BIWV9PRkRNKDB4NjcpIC8qIGhvbGQgQ1JTIE9uIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNX1RYX1BIWV9DUlNfREVMQVlfVkFMCUI0M19QSFlfT0ZETSgweDY5KSAvKiBvZmRtIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS19UWF9QSFlfQ1JTX0RFTEFZX1ZBTAlCNDNfUEhZX09GRE0oMHg2QSkgLyogY2NrIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0VEX09OX0NPTkZJUk1fVElNRVJfVkFMCUI0M19QSFlfT0ZETSgweDZCKSAvKiBFZCBvbiBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9PRkZTRVRfQ09ORklSTV9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkMpIC8qIEVkIG9mZnNldCBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX09GRlNFVF9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkQpIC8qIHBoeSBDUlMgb2Zmc2V0IFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTAkJQjQzX1BIWV9PRkRNKDB4NzApIC8qIEFEQyBDb21wZW5zYXRpb24gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9HMl9SQlBTS19BRERSCQlCNDNfUEhZX09GRE0oMHg3MSkgLyogbG9nMiBSQlBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1JRUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDcyKSAvKiBsb2cyIFJRUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPRzJfUjE2UUFNX0FERFIJCUI0M19QSFlfT0ZETSgweDczKSAvKiBsb2cyIFIxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1I2NFFBTV9BRERSCQlCNDNfUEhZX09GRE0oMHg3NCkgLyogbG9nMiBSNjRRQU0gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZGU0VUX0JQU0tfQUREUgkJQjQzX1BIWV9PRkRNKDB4NzUpIC8qIG9mZnNldCBCUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRlNFVF9RUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDc2KSAvKiBvZmZzZXQgUVBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfMTZRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzcpIC8qIG9mZnNldCAxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfNjRRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzgpIC8qIG9mZnNldCA2NFFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTEJCQlCNDNfUEhZX09GRE0oMHg3OSkgLyogQWxwaGExICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTIJCQlCNDNfUEhZX09GRE0oMHg3QSkgLyogQWxwaGEyICovCisjZGVmaW5lIEI0M19MUFBIWV9CRVRBMQkJCQlCNDNfUEhZX09GRE0oMHg3QikgLyogQmV0YTEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JFVEEyCQkJCUI0M19QSFlfT0ZETSgweDdDKSAvKiBCZXRhMiAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9PUF9OVU1fQUREUgkJCUI0M19QSFlfT0ZETSgweDdEKSAvKiBMb29wIE51bSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9TVFJfQ09MTE1BWF9TTVBMX0FERFIJCUI0M19QSFlfT0ZETSgweDdFKSAvKiBTdHIgQ29sbG1heCBTYW1wbGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTUFYX1NNUExfQ09BUlNFX0ZJTkVfQUREUglCNDNfUEhZX09GRE0oMHg3RikgLyogTWF4IFNhbXBsZSBDb2Fyc2UvRmluZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9NQVhfU01QTF9DT0FSU0VfU1RSMENUUl9BRERSCUI0M19QSFlfT0ZETSgweDgwKSAvKiBNYXggU2FtcGxlIENvYXJzZS9TdHIwQ3RyIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0VOQUJMRV9XQUlUX1RJTUVfQUREUglCNDNfUEhZX09GRE0oMHg4MSkgLyogSVEgRW5hYmxlIFdhaXQgVGltZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9OVU1fU01QTFNfQUREUgkJQjQzX1BIWV9PRkRNKDB4ODIpIC8qIElRIE51bSBTYW1wbGVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4MykgLyogSVEgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NCkgLyogSVEgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NSkgLyogSVEgSSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NikgLyogSVEgSSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NykgLyogSVEgUSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4OCkgLyogSVEgUSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BWE5VTVNURVBTCQkJQjQzX1BIWV9PRkRNKDB4ODkpIC8qIE1heE51bXN0ZXBzICovCisjZGVmaW5lIEI0M19MUFBIWV9ST1RPUlBIQVNFX0FERFIJCUI0M19QSFlfT0ZETSgweDhBKSAvKiBSb3RvclBoYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FEVkFOQ0VEUkVUQVJEUk9UT1JfQUREUglCNDNfUEhZX09GRE0oMHg4QikgLyogQWR2YW5jZWRSZXRhcmRSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJQURDREVMQVlfQ1RMX0FERFIJCUI0M19QSFlfT0ZETSgweDhEKSAvKiByc3NpQWRjZGVsYXkgQ29udHJvbCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UU1NJU1RBVF9BRERSCQkJQjQzX1BIWV9PRkRNKDB4OEUpIC8qIHRzc2lTdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEVNUFNFTlNFU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg4RikgLyogdGVtcHNlbnNlU3RhdHVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RFTVBTRU5TRV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTApIC8qIHRlbXBzZW5zZSBDb250cm9sIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1dSU1NJU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5MSkgLyogd3Jzc2lzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTVVGQUNUT1JBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTIpIC8qIG11ZmFjdG9yYWRkciAqLworI2RlZmluZSBCNDNfTFBQSFlfU0NSQU1TVEFURV9BRERSCQlCNDNfUEhZX09GRE0oMHg5MykgLyogc2NyYW1zdGF0ZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UWEhPTERPRkZBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTQpIC8qIHR4aG9sZG9mZmFkZHIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BLVEdBSU5WQUxfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTUpIC8qIHBrdGdhaW52YWwgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ09BUlNFRVNUSU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTYpIC8qIENvYXJzZWVzdGltIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NUQVRFX1RSQU5TSVRJT05fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTcpIC8qIHN0YXRlIFRyYW5zaXRpb24gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJOX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5OCkgLyogVFJOIG9mZnNldCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9OVU1fUk9UT1JfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTkpIC8qIE51bSBSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9WSVRFUkJJX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5QSkgLyogVml0ZXJiaSBPZmZzZXQgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfU01QTF9DT0xMRUNUX1dBSVRfQUREUglCNDNfUEhZX09GRE0oMHg5QikgLyogU2FtcGxlIGNvbGxlY3Qgd2FpdCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BX1BIWV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OUMpIC8qIEEgUEhZIENvbnRyb2wgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTlVNX1BBU1NfVEhST1VHSF9BRERSCQlCNDNfUEhZX09GRE0oMHg5RCkgLyogTnVtIFBhc3MgVGhyb3VnaCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9DT01QX0NPRUZGX1MJCUI0M19QSFlfT0ZETSgweDlFKSAvKiBSWCBDb21wIGNvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9DUEFST1RBVEVWQUwJCQlCNDNfUEhZX09GRE0oMHg5RikgLyogY3BhUm90YXRlVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NNUExfUExBWV9DT1VOVAkJQjQzX1BIWV9PRkRNKDB4QTApIC8qIFNhbXBsZSBwbGF5IGNvdW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9TTVBMX1BMQVlfQlVGRkVSX0NUTAkJQjQzX1BIWV9PRkRNKDB4QTEpIC8qIFNhbXBsZSBwbGF5IEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9GT1VSV0lSRV9DVEwJCQlCNDNfUEhZX09GRE0oMHhBMikgLyogZm91cndpcmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ1BBX1RBSUxDT1VOVF9WQUwJCUI0M19QSFlfT0ZETSgweEEzKSAvKiBDUEEgVGFpbENvdW50IFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRAkJQjQzX1BIWV9PRkRNKDB4QTQpIC8qIFRYIFBvd2VyIENvbnRyb2wgQ21kICovCisjZGVmaW5lICBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERQkJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgbW9kZSBtYXNrICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGCTB4MDAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworI2RlZmluZSAgIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX1NXCTB4ODAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIFNPRlRXQVJFICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFcJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgSEFSRFdBUkUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTQkJQjQzX1BIWV9PRkRNKDB4QTUpIC8qIFRYIFBvd2VyIENvbnRyb2wgTm51bSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9JRExFVFNTSQkJQjQzX1BIWV9PRkRNKDB4QTYpIC8qIFRYIFBvd2VyIENvbnRyb2wgSWRsZVRzc2kgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfVEFSR0VUUFdSCQlCNDNfUEhZX09GRE0oMHhBNykgLyogVFggUG93ZXIgQ29udHJvbCBUYXJnZXRQb3dlciAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVAlCNDNfUEhZX09GRE0oMHhBOCkgLyogVFggUG93ZXIgQ29udHJvbCBEZWx0YVBvd2VyIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0JBU0VJTkRFWAkJQjQzX1BIWV9PRkRNKDB4QTkpIC8qIFRYIFBvd2VyIENvbnRyb2wgQmFzZUluZGV4ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX1BXUl9JTkRFWAkJQjQzX1BIWV9PRkRNKDB4QUEpIC8qIFRYIFBvd2VyIENvbnRyb2wgUG93ZXIgSW5kZXggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfU1RBVAkJQjQzX1BIWV9PRkRNKDB4QUIpIC8qIFRYIFBvd2VyIENvbnRyb2wgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9MUF9SRl9TSUdOQUxfTFVUCQlCNDNfUEhZX09GRE0oMHhBQykgLyogTFAgUkYgc2lnbmFsIExVVCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlhfUkFESU9fQ1RMX0ZJTFRFUl9TVEFURQlCNDNfUEhZX09GRE0oMHhBRCkgLyogUlggUmFkaW8gQ29udHJvbCBGaWx0ZXIgU3RhdGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX1JBRElPX0NUTAkJCUI0M19QSFlfT0ZETSgweEFFKSAvKiBSWCBSYWRpbyBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9OUlNTSV9TVEFUX0FERFIJCUI0M19QSFlfT0ZETSgweEFGKSAvKiBOUlNTSSBzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMgkJCUI0M19QSFlfT0ZETSgweEIwKSAvKiBSRiBvdmVycmlkZSAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTAkJQjQzX1BIWV9PRkRNKDB4QjEpIC8qIFJGIG92ZXJyaWRlIDIgdmFsICovCisjZGVmaW5lIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMAkJQjQzX1BIWV9PRkRNKDB4QjIpIC8qIFBTIENvbnRyb2wgb3ZlcnJpZGUgdmFsMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUFNfQ1RMX09WRVJSSURFX1ZBTDEJCUI0M19QSFlfT0ZETSgweEIzKSAvKiBQUyBDb250cm9sIG92ZXJyaWRlIHZhbDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BTX0NUTF9PVkVSUklERV9WQUwyCQlCNDNfUEhZX09GRE0oMHhCNCkgLyogUFMgQ29udHJvbCBvdmVycmlkZSB2YWwyICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9HQUlOX0NUTF9PVkVSUklERV9WQUwJQjQzX1BIWV9PRkRNKDB4QjUpIC8qIFRYIGdhaW4gQ29udHJvbCBvdmVycmlkZSB2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTAlCNDNfUEhZX09GRE0oMHhCNikgLyogUlggZ2FpbiBDb250cm9sIG92ZXJyaWRlIHZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlMJCQlCNDNfUEhZX09GRE0oMHhCNykgLyogQUZFIERERlMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EREZTX1BPSU5URVJfSU5JVAkJQjQzX1BIWV9PRkRNKDB4QjgpIC8qIEFGRSBEREZTIHBvaW50ZXIgaW5pdCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlNfSU5DUl9JTklUCQlCNDNfUEhZX09GRE0oMHhCOSkgLyogQUZFIERERlMgaW5jciBpbml0ICovCisjZGVmaW5lIEI0M19MUFBIWV9NUkNOT0lTRVJFRFVDVElPTgkJQjQzX1BIWV9PRkRNKDB4QkEpIC8qIG1yY05vaXNlUmVkdWN0aW9uICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDMJCQlCNDNfUEhZX09GRE0oMHhCQikgLyogVFJMb29rdXAzICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDQJCQlCNDNfUEhZX09GRE0oMHhCQykgLyogVFJMb29rdXA0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9GSUZPX1NUQVQJCUI0M19QSFlfT0ZETSgweEJEKSAvKiBSYWRhciBGSUZPIFN0YXR1cyAqLworI2RlZmluZSBCNDNfTFBQSFlfR1BJT19PVVRFTgkJCUI0M19QSFlfT0ZETSgweEJFKSAvKiBHUElPIE91dCBlbmFibGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dQSU9fU0VMRUNUCQkJQjQzX1BIWV9PRkRNKDB4QkYpIC8qIEdQSU8gU2VsZWN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9HUElPX09VVAkJCUI0M19QSFlfT0ZETSgweEMwKSAvKiBHUElPIE91dCAqLwogCiAKKworLyogUmFkaW8gcmVnaXN0ZXIgYWNjZXNzIGRlY29yYXRvcnMuICovCiAjZGVmaW5lIEI0M19MUF9SQURJTyhyYWRpb19yZWcpCQkJKHJhZGlvX3JlZykKICNkZWZpbmUgQjQzX0xQX05PUlRIKHJhZGlvX3JlZykJCQlCNDNfTFBfUkFESU8ocmFkaW9fcmVnKQogI2RlZmluZSBCNDNfTFBfU09VVEgocmFkaW9fcmVnKQkJCUI0M19MUF9SQURJTygocmFkaW9fcmVnKSB8IDB4NDAwMCkKQEAgLTUyOSw4ICs4MDYsNTggQEAKIAogCiAKK2VudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHsKKwlCNDNfTFBQSFlfVFhQQ1RMX1VOS05PV04gPSAwLAorCUI0M19MUFBIWV9UWFBDVExfT0ZGLAkvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworCUI0M19MUFBIWV9UWFBDVExfU1csCS8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgc2V0IHRvIFNvZnR3YXJlICovCisJQjQzX0xQUEhZX1RYUENUTF9IVywJLyogVFggcG93ZXIgY29udHJvbCBpcyBzZXQgdG8gSGFyZHdhcmUgKi8KK307CisKIHN0cnVjdCBiNDNfcGh5X2xwIHsKLQkvL1RPRE8KKwkvKiBDdXJyZW50IFRYIHBvd2VyIGNvbnRyb2wgbW9kZS4gKi8KKwllbnVtIGI0M19scHBoeV90eHBjdGxfbW9kZSB0eHBjdGxfbW9kZTsKKworCS8qIFRyYW5zbWl0IGlzb2xhdGlvbiBtZWRpdW0gYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9tZWRfYmFuZDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBUcmFuc21pdCBpc29sYXRpb24gbG93IGJhbmQgKi8KKwl1OCB0eF9pc29sYXRpb25fbG93X2JhbmQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVHJhbnNtaXQgaXNvbGF0aW9uIGhpZ2ggYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogUmVjZWl2ZSBwb3dlciBvZmZzZXQgKi8KKwl1OCByeF9wd3Jfb2Zmc2V0OyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVFNTSSB0cmFuc21pdCBjb3VudCAqLworCXUxNiB0c3NpX3R4X2NvdW50OworCS8qIFRTU0kgaW5kZXggKi8KKwl1MTYgdHNzaV9pZHg7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVFNTSSBucHQgKi8KKwl1MTYgdHNzaV9ucHQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBUYXJnZXQgVFggZnJlcXVlbmN5ICovCisJdTE2IHRndF90eF9mcmVxOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVHJhbnNtaXQgcG93ZXIgaW5kZXggb3ZlcnJpZGUgKi8KKwlzOCB0eF9wd3JfaWR4X292ZXI7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBSU1NJIHZmICovCisJdTggcnNzaV92ZjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIHZjICovCisJdTggcnNzaV92YzsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIGdzICovCisJdTggcnNzaV9nczsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFJDIGNhcCAqLworCXU4IHJjX2NhcDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBCWCBhcmNoICovCisJdTggYnhfYXJjaDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIEZ1bGwgY2FsaWJyYXRpb24gY2hhbm5lbCAqLworCXU4IGZ1bGxfY2FsaWJfY2hhbjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFRyYW5zbWl0IGlxbG9jYWwgYmVzdCBjb2VmZnMgKi8KKwlib29sIHR4X2lxbG9jX2Jlc3RfY29lZmZzX3ZhbGlkOworCXU4IHR4X2lxbG9jX2Jlc3RfY29lZmZzWzExXTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IDEwMzZiZWYuLjhjZDk3NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTU1LDggKzU1LDggQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICB1MTYgY29va2llLAorc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgIHUxNiBjb29raWUsCiAJCQkJICAgICAgc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKipwYWNrKQogewogCXN0cnVjdCBiNDNfcGlvICpwaW8gPSAmZGV2LT5waW87CkBAIC0xMzQsOCArMTM0LDggQEAKIAlyZXR1cm4gODsKIH0KIAotc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBiNDNfc2V0dXBfcGlvcXVldWVfdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKmI0M19zZXR1cF9waW9xdWV1ZV90eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxOwogCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwOwpAQCAtMTcxLDggKzE3MSw4IEBACiAJcmV0dXJuIHE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICogYjQzX3NldHVwX3Bpb3F1ZXVlX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpiNDNfc2V0dXBfcGlvcXVldWVfcngoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcTsKIApAQCAtMzA4LDggKzMwOCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgUElPIHF1ZXVlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCQkgdTggcXVldWVfcHJpbykKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJCXU4IHF1ZXVlX3ByaW8pCiB7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCmluZGV4IDcxMzc1MzcuLmFmYWQ0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWNoYXIgKiBiNDNfcmZraWxsX2xlZF9uYW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK2NoYXIgKmI0M19yZmtpbGxfbGVkX25hbWUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfcmZraWxsICpyZmsgPSAmKGRldi0+d2wtPnJma2lsbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE3MzRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5jCkBAIC0wLDAgKzEsMzk0IEBACisvKgorCisgIEJyb2FkY29tIEI0MyB3aXJlbGVzcyBkcml2ZXIKKyAgSUVFRSA4MDIuMTFnIExQLVBIWSBhbmQgcmFkaW8gZGV2aWNlIGRhdGEgdGFibGVzCisKKyAgQ29weXJpZ2h0IChjKSAyMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKworI2luY2x1ZGUgImI0My5oIgorI2luY2x1ZGUgInRhYmxlc19scHBoeS5oIgorI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJwaHlfbHAuaCIKKworCisvKiBFbnRyeSBvZiB0aGUgMjA2MiByYWRpbyBpbml0IHRhYmxlICovCitzdHJ1Y3QgYjIwNjJfaW5pdF90YWJfZW50cnkgeworCXUxNiBvZmZzZXQ7CisJdTE2IHZhbHVlX2E7CisJdTE2IHZhbHVlX2c7CisJdTggZmxhZ3M7Cit9OworI2RlZmluZSBCMjA2Ml9GTEFHX0EJMHgwMSAvKiBGbGFnOiBJbml0IGluIEEgbW9kZSAqLworI2RlZmluZSBCMjA2Ml9GTEFHX0cJMHgwMiAvKiBGbGFnOiBJbml0IGluIEcgbW9kZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5IGIyMDYyX2luaXRfdGFiW10gPSB7CisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IDB4MDAwMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0zLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU03LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BETl9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMiwgLnZhbHVlX2EgPSAweDAwMTgsIC52YWx1ZV9nID0gMHgwMDE4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fR0VOX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0lRX0NBTElCLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9MUEYsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0JJQVMwLCAudmFsdWVfYSA9IDB4MDA0MSwgLnZhbHVlX2cgPSAweDAwNDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR05FQV9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUyLCAudmFsdWVfYSA9IDB4MDBERCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwQjUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMUYsIC52YWx1ZV9nID0gMHgwMDFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDksIC52YWx1ZV9nID0gMHgwMDA5LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDIsIC52YWx1ZV9hID0gMHgwMDE4LCAudmFsdWVfZyA9IDB4MDAxOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwzLCAudmFsdWVfYSA9IDB4MDAyNywgLnZhbHVlX2cgPSAweDAwMjcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMjgsIC52YWx1ZV9nID0gMHgwMDI4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDUsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEw2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwwLCAudmFsdWVfYSA9IDB4MDA4MiwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4wLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4xLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMCwgLnZhbHVlX2EgPSAweDAwNDMsIC52YWx1ZV9nID0gMHgwMDQzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DQUxJQjAsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ0FMSUIxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NBTElCMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMkEsIC52YWx1ZV9nID0gMHgwMDJBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMiwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMywgLnZhbHVlX2EgPSAweDAwMjEsIC52YWx1ZV9nID0gMHgwMDIxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNCwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNSwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMiwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMiwgLnZhbHVlX2EgPSAweDAwODQsIC52YWx1ZV9nID0gMHgwMDg0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMiwgLnZhbHVlX2cgPSAweDAwMDIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDcsIC52YWx1ZV9hID0gMHgwMDU4LCAudmFsdWVfZyA9IDB4MDA1OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDgsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTF9BLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzJHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzVHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9UVU5FLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwMUIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BBRCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfUEdBLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9QQURBVVgsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BHQUFVWCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFNTSV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UU1NJX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RTU0lfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ0FMSUJfVFMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDEsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAxNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDBGLCAudmFsdWVfZyA9IDB4MDAwRiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BTRU5TRV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QU0VOU0VfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUFNFTlNFX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RFU1RfQlVGMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JBRElPX0lEX0NPREUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU02LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU05LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTE1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMCwgLnZhbHVlX2EgPSAweDAwRkYsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUERTX0NUTDIsIC52YWx1ZV9hID0gMHgwMDhFLCAudmFsdWVfZyA9IDB4MDA4RSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwwLCAudmFsdWVfYSA9IDB4MDAwNiwgLnZhbHVlX2cgPSAweDAwMDYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwyLCAudmFsdWVfYSA9IDB4MDAxMSwgLnZhbHVlX2cgPSAweDAwMTEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwwLCAudmFsdWVfYSA9IDB4MDBGOCwgLnZhbHVlX2cgPSAweDAwRDgsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEsIC52YWx1ZV9hID0gMHgwMDNDLCAudmFsdWVfZyA9IDB4MDAyNCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMywgLnZhbHVlX2EgPSAweDAwNDEsIC52YWx1ZV9nID0gMHgwMDQxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMOCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEw5LCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMiwgLnZhbHVlX2EgPSAweDAwQUYsIC52YWx1ZV9nID0gMHgwMEFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDEyLCAudmFsdWVfZyA9IDB4MDAxMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw0LCAudmFsdWVfYSA9IDB4MDAwQiwgLnZhbHVlX2cgPSAweDAwMEIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMNSwgLnZhbHVlX2EgPSAweDAwNUYsIC52YWx1ZV9nID0gMHgwMDVGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDA0MCwgLnZhbHVlX2cgPSAweDAwNDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMOCwgLnZhbHVlX2EgPSAweDAwNTIsIC52YWx1ZV9nID0gMHgwMDUyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDksIC52YWx1ZV9hID0gMHgwMDI2LCAudmFsdWVfZyA9IDB4MDAyNiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDExLCAudmFsdWVfYSA9IDB4MDAzNiwgLnZhbHVlX2cgPSAweDAwMzYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTIsIC52YWx1ZV9hID0gMHgwMDU3LCAudmFsdWVfZyA9IDB4MDA1NywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDE0LCAudmFsdWVfYSA9IDB4MDA3NSwgLnZhbHVlX2cgPSAweDAwNzUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTUsIC52YWx1ZV9hID0gMHgwMEI0LCAudmFsdWVfZyA9IDB4MDBCNCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwOTgsIC52YWx1ZV9nID0gMHgwMDk4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDUsIC52YWx1ZV9hID0gMHgwMDQzLCAudmFsdWVfZyA9IDB4MDA0MywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNiwgLnZhbHVlX2EgPSAweDAwNDcsIC52YWx1ZV9nID0gMHgwMDQ3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDAwQywgLnZhbHVlX2cgPSAweDAwMEMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDgsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMEUsIC52YWx1ZV9nID0gMHgwMDBFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMiwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMEEsIC52YWx1ZV9nID0gMHgwMDBBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDE3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOCwgLnZhbHVlX2EgPSAweDAwM0UsIC52YWx1ZV9nID0gMHgwMDNFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOSwgLnZhbHVlX2EgPSAweDAwMTMsIC52YWx1ZV9nID0gMHgwMDEzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjEsIC52YWx1ZV9hID0gMHgwMDYyLCAudmFsdWVfZyA9IDB4MDA2MiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjIsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjMsIC52YWx1ZV9hID0gMHgwMDE2LCAudmFsdWVfZyA9IDB4MDAxNiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjQsIC52YWx1ZV9hID0gMHgwMDVDLCAudmFsdWVfZyA9IDB4MDA1QywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjUsIC52YWx1ZV9hID0gMHgwMDk1LCAudmFsdWVfZyA9IDB4MDA5NSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMwLCAudmFsdWVfYSA9IDB4MDBBMCwgLnZhbHVlX2cgPSAweDAwQTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMxLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMywgLnZhbHVlX2EgPSAweDAwQ0MsIC52YWx1ZV9nID0gMHgwMENDLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzNCwgLnZhbHVlX2EgPSAweDAwMDcsIC52YWx1ZV9nID0gMHgwMDA3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMCwgLnZhbHVlX2EgPSAweDAwMTAsIC52YWx1ZV9nID0gMHgwMDEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ1LCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UNiwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDcsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ4LCAudmFsdWVfYSA9IDB4MDAwRiwgLnZhbHVlX2cgPSAweDAwMEYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTAsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEyLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTMsIC52YWx1ZV9hID0gMHgwMDQ0LCAudmFsdWVfZyA9IDB4MDA0NCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDE1LCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworfTsKKwordm9pZCBiMjA2Ml91cGxvYWRfaW5pdF90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYjIwNjJfaW5pdF90YWIpOyBpKyspIHsKKwkJZSA9ICZiMjA2Ml9pbml0X3RhYltpXTsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA2Ml9GTEFHX0cpKQorCQkJCWNvbnRpbnVlOworCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgZS0+b2Zmc2V0LCBlLT52YWx1ZV9nKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGUtPmZsYWdzICYgQjIwNjJfRkxBR19BKSkKKwkJCQljb250aW51ZTsKKwkJCWI0M19yYWRpb193cml0ZShkZXYsIGUtPm9mZnNldCwgZS0+dmFsdWVfYSk7CisJCX0KKwl9Cit9CisKK3UzMiBiNDNfbHB0YWJfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19MUFRBQl9UWVBFTUFTSzsKKwlCNDNfV0FSTl9PTihvZmZzZXQgPiAweEZGRkYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCNDNfTFBUQUJfOEJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTykgJiAweEZGOworCQlicmVhazsKKwljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTyk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzMyQklUOgorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUhJKTsKKwkJdmFsdWUgPDw9IDE2OworCQl2YWx1ZSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKl9kYXRhKQoreworCXUzMiB0eXBlLCB2YWx1ZTsKKwl1OCAqZGF0YSA9IF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZWxlbWVudHM7IGkrKykgeworCQl2YWx1ZSA9IGI0M19scHRhYl9yZWFkKGRldiwgb2Zmc2V0KTsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgQjQzX0xQVEFCXzhCSVQ6CisJCQkqZGF0YSA9IHZhbHVlOworCQkJZGF0YSsrOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQkJKigodTE2ICopZGF0YSkgPSB2YWx1ZTsKKwkJCWRhdGEgKz0gMjsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8zMkJJVDoKKwkJCSooKHUzMiAqKWRhdGEpID0gdmFsdWU7CisJCQlkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQl9CisJCW9mZnNldCsrOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJdTMyIHR5cGU7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCW9mZnNldCAmPSB+QjQzX0xQVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEI0M19MUFRBQl84QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGRkYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8sIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSwgdmFsdWUgPj4gMTYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqX2RhdGEpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCWNvbnN0IHU4ICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19MUFRBQl84QklUOgorCQkJdmFsdWUgPSAqZGF0YTsKKwkJCWRhdGErKzsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJCXZhbHVlID0gKigodTE2ICopZGF0YSk7CisJCQlkYXRhICs9IDI7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOworCQkJZGF0YSArPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJCXZhbHVlID0gMDsKKwkJfQorCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbHVlKTsKKwkJb2Zmc2V0Kys7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGQwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBCNDNfVEFCTEVTX0xQUEhZX0hfCisjZGVmaW5lIEI0M19UQUJMRVNfTFBQSFlfSF8KKworCisjZGVmaW5lIEI0M19MUFRBQl9UWVBFTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfOEJJVAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQjQzX0xQVEFCXzE2QklUCQkJMHgyMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfMzJCSVQJCQkweDMwMDAwMDAwCisjZGVmaW5lIEI0M19MUFRBQjgodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzhCSVQpCisjZGVmaW5lIEI0M19MUFRBQjE2KHRhYmxlLCBvZmZzZXQpCSgoKHRhYmxlKSA8PCAxMCkgfCAob2Zmc2V0KSB8IEI0M19MUFRBQl8xNkJJVCkKKyNkZWZpbmUgQjQzX0xQVEFCMzIodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzMyQklUKQorCisvKiBUYWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjJQTFVTCQlCNDNfTFBUQUIzMigweDA3LCAwKSAvKiBUWCBwb3dlciBsb29rdXAgdGFibGUgKHJldiA+PSAyKSAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjBfMQkJQjQzX0xQVEFCMzIoMHhBMCwgMCkgLyogVFggcG93ZXIgbG9va3VwIHRhYmxlIChyZXYgPCAyKSAqLworCit1MzIgYjQzX2xwdGFiX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0KTsKK3ZvaWQgYjQzX2xwdGFiX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKKworLyogQnVsayB0YWJsZSBhY2Nlc3MuIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBidWxrIGRhdGEgaW4KKyAqIGhvc3QgZW5kaWFubmVzcyEgVGhlIHJldHVybmVkIGRhdGEgaXMgX25vdF8gYSBieXRlYXJyYXksIGJ1dCBhbiBhcnJheQorICogY29uc2lzdGluZyBvZiBucl9lbGVtZW50cyBvZiB0aGUgZGF0YSB0eXBlLiAqLwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKmRhdGEpOwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqZGF0YSk7CisKK3ZvaWQgYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKKworCisjZW5kaWYgLyogQjQzX1RBQkxFU19MUFBIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwppbmRleCAwYzBmYjE1Li5lMWUyMGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwpAQCAtNjIsOCArNjIsNyBAQAogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MTkFIUEZDVEwsIDB4MUZGOSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIDB4RkYwRik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCAweEZGMEYpOwogCWlmIChwaHktPnJldiA8PSAyKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTFBGR0FJTiwgMCwgMHgxRkJGKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwMiwgMHgxRkJGKTsKQEAgLTczLDExICs3Miw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxRCwgMHgwRjQwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDFGLCAweDFDMDApOwogCWlmIChwaHktPnJldiA8PSAzKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MDQwMCk7CiAJZWxzZSBpZiAocGh5LT5yZXYgPT0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgxQTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MUEwMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwQ0MsIDB4MjEyMSk7CiAJfQogCWlmIChwaHktPnJldiA+PSAzKQpAQCAtODYsNyArODMsNyBAQAogCiBzdGF0aWMgdm9pZCBiNDNfd2FfZGl2aWRlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJCKSAmIH4weDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIDB4MDAyQiwgfjB4MDEwMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA4RSwgMHg1OEMxKTsKIH0KIApAQCAtMjcyLDggKzI2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGI0M193YV9sbXMoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNTUsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCAweDAwNTUpICYgMHhGRkMwKSB8IDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDU1LCAweEZGQzAsIDB4MDAwNCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9taXhlZHNpZ25hbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC0zMTgsMjMgKzMxNCwxOCBAQAogCX0gZWxzZSBpZiAocGh5LT5yZXYgPT0gMikgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzEsIDB4MTg2MSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSU1RIUkVTMiwgMHgwMjcxKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsCi0JCQkJICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKQotCQkJCSAgfCAweDA4MDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5URFdFTEwsIDB4MDgwMCk7CiAJfSBlbHNlIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTVEhSRVMxLCAweDAwOTgpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzIsIDB4MDA3MCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhDOSksIDB4MDA4MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVERXRUxMLAotCQkJCSAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCkKLQkJCQkgIHwgMHgwODAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOVERXRUxMLCAweDA4MDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX3dhX2Nyc190aHIoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH4weDAzQzApIHwgMHhEMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NSUzAsIH4weDAzQzAsIDB4RDAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9jcnNfYmxhbmsoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzkxLDcyICszODIsNDUgQEAKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzEsIDMsIDI1KTsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSkgJiB+MHhGRjAwKSB8IDB4NTcwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgwMDdGKSB8IDB4MDAwRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgzRjgwKSB8IDB4MkI4MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDdBLAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSkgfCAweDAwMDgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwMDBGKSB8IDB4MDAwOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUDFQMkdBSU4sCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTjFOMkdBSU4pICYgfjB4MEYwMCkgfCAweDA3MDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwRjAwKSB8IDB4MDEwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsICh1MTYpfjB4RkYwMCwgMHg1NzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQSksIH4weDAwN0YsIDB4MDAwRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpLCB+MHgzRjgwLCAweDJCODApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQU5UV1JTRVRULCAweEYwRkYsIDB4MDMwMCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4N0EsIDB4MDAwOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MDAwRiwgMHgwMDA4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOLCB+MHgwRjAwLCAweDA2MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTjFOMkdBSU4sIH4weDBGMDAsIDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MEYwMCwgMHgwMTAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJCQkgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX04xTjJHQUlOKQotCQkJCSAgICYgfjB4MDAwRikgfCAweDAwMDcpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04xTjJHQUlOLCB+MHgwMDBGLCAweDAwMDcpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDAwRkYpIHwgMHgwMDIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpKSAmIH4weDAwRkYpIHwgMHgwMDJFKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weEZGMDApIHwgMHgxQTAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weDAwRkYpIHwgMHgwMDI4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weEZGMDApIHwgMHgyQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksIH4weDAwRkYsIDB4MDAxQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgfjB4MDBGRiwgMHgwMDFDKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksIH4weDAwRkYsIDB4MDAyMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgyKSwgfjB4MDBGRiwgMHgwMDJFKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg5NiksICh1MTYpfjB4RkYwMCwgMHgxQTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksIH4weDAwRkYsIDB4MDAyOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLCAodTE2KX4weEZGMDAsIDB4MkMwMCk7CiAJaWYgKHBoeS0+cmV2ID09IDEpIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEVBS19DT1VOVCwgMHgwOTJCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQikpICYgfjB4MDAxRSkgfCAweDAwMDIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksIH4weDAwMUUsIDB4MDAwMik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLCB+MHgwMDFFKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFGKSwgMHgyODdBKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwpICYgfjB4MDAwRikgfCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwsIH4weDAwMEYsIDB4MDAwNCk7CiAJCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjIpLCAweDI4N0EpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIH4weEYwMDApIHwgMHgzMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwgKHUxNil+MHhGMDAwLCAweDMwMDApOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgpICYgMHg4MDgwKSB8IDB4Nzg3NCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZTUkNISURYLCAweDgwODAsIDB4Nzg3NCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhFKSwgMHgxQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwgfjB4MEYwMCwgMHgwNjAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhCKSwgMHgwMDVFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKSAmIH4weDAwRkYpIHwgMHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIH4weDAwRkYsIDB4MDAxRSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4RCksIDB4MDAwMik7CiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MzX1IxLCAwLCAwKTsKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzNfUjEsIDEsIDcpOwpAQCAtNDY5LDEwICs0MzMsOCBAQAogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMywgMywgMjgpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDAwMDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDEwMDApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDAwMDMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDEwMDApOwogCX0KIAliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1ZFUlNJT05fT0ZETSk7IC8qIER1bW15IHJlYWQgKi8KIH0KQEAgLTUzOCw4ICs1MDAsNyBAQAogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAyLCAweDAwMDEpOwogCQkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgJiYKIAkJCSAgICAocGh5LT5yZXYgPj0gNykpIHsKLQkJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MTEpLAotCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSkpICYgMHhGN0ZGKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSksIDB4RjdGRik7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjAsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjEsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjIsIDB4MDAwMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCBlYWU5YjgwLi5hNjNkODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTUwLDcgKzUwLDcgQEAKIH0KIAogLyogRXh0cmFjdCB0aGUgYml0cmF0ZSBpbmRleCBvdXQgb2YgYW4gT0ZETSBQTENQIGhlYWRlci4gKi8KLXN0YXRpYyB1OCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCwgYm9vbCBhcGh5KQorc3RhdGljIGludCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCwgYm9vbCBhcGh5KQogewogCWludCBiYXNlID0gYXBoeSA/IDAgOiA0OwogCkBAIC01MzgsOCArNTM4LDE0IEBACiAJY2hhbnN0YXQgPSBsZTE2X3RvX2NwdShyeGhkci0+Y2hhbm5lbCk7CiAJcGh5dHlwZSA9IGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fUEhZVFlQRTsKIAotCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19GQ1NFUlIpCisJaWYgKHVubGlrZWx5KG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikpIHsKIAkJZGV2LT53bC0+aWVlZV9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQrKzsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwl9CisJaWYgKHVubGlrZWx5KHBoeXN0YXQwICYgKEI0M19SWF9QSFlTVDBfUExDUEhDRiB8IEI0M19SWF9QSFlTVDBfUExDUEZWKSkpCisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDOworCWlmIChwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfU0hPUlRQUk1CTCkKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAlpZiAobWFjc3RhdCAmIEI0M19SWF9NQUNfREVDRVJSKSB7CiAJCS8qIERlY3J5cHRpb24gd2l0aCB0aGUgZ2l2ZW4ga2V5IGZhaWxlZC4KIAkJICogRHJvcCB0aGUgcGFja2V0LiBXZSBhbHNvIHdvbid0IGJlIGFibGUgdG8gZGVjcnlwdCBpdCB3aXRoCkBAIC02MDYsOCArNjEyLDEyIEBACiAJCQkJCQlwaHl0eXBlID09IEI0M19QSFlUWVBFX0EpOwogCWVsc2UKIAkJc3RhdHVzLnJhdGVfaWR4ID0gYjQzX3BsY3BfZ2V0X2JpdHJhdGVfaWR4X2NjayhwbGNwKTsKLQlpZiAodW5saWtlbHkoc3RhdHVzLnJhdGVfaWR4ID09IC0xKSkKLQkJZ290byBkcm9wOworCWlmICh1bmxpa2VseShzdGF0dXMucmF0ZV9pZHggPT0gLTEpKSB7CisJCS8qIFBMQ1Agc2VlbXMgdG8gYmUgY29ycnVwdGVkLgorCQkgKiBEcm9wIHRoZSBmcmFtZSwgaWYgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGNvcnJ1cHRlZCBmcmFtZXMuICovCisJCWlmICghKGRldi0+d2wtPmZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpCisJCQlnb3RvIGRyb3A7CisJfQogCXN0YXR1cy5hbnRlbm5hID0gISEocGh5c3RhdDAgJiBCNDNfUlhfUEhZU1QwX0FOVCk7CiAKIAkvKgpAQCAtNjYxLDcgKzY3MSw2IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlkZXYtPnN0YXRzLmxhc3RfcnggPSBqaWZmaWVzOwogCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldi0+d2wtPmh3LCBza2IsICZzdGF0dXMpOwogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmMKaW5kZXggY2FjYjc4Ni4uM2VhNTViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9UUkFOU0ZFUjoKIAljYXNlIEI0M2xlZ2FjeV9MRURfQVBUUkFOU0ZFUjoKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OnR4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF90eCwgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF9yeCwgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9SQURJT19COgogCWNhc2UgQjQzbGVnYWN5X0xFRF9NT0RFX0JHOgogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczpyYWRpbyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3JhZGlvLCBuYW1lLAogCQkJCSBiNDNsZWdhY3lfcmZraWxsX2xlZF9uYW1lKGRldiksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9XRUlSRDoKIAljYXNlIEI0M2xlZ2FjeV9MRURfQVNTT0M6CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiYjQzbGVnYWN5LSVzOmFzc29jIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCSAiYjQzbGVnYWN5LSVzOjphc3NvYyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAJCWI0M2xlZ2FjeV9yZWdpc3Rlcl9sZWQoZGV2LCAmZGV2LT5sZWRfYXNzb2MsIG5hbWUsCiAJCQkJIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoaHcpLAogCQkJCSBsZWRfaW5kZXgsIGFjdGl2ZWxvdyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCBmYjk5NmMyLi44NzllZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTI2NTAsNyArMjY1MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzbGVnYWN5X3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsIHU2NCBicmF0ZXMpCitzdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwgdTMyIGJyYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiAJCWRldi0+d2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKaW5kZXggMjQ1M2RlYS4uY2U4NzIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaApAQCAtMzEsNyArMzEsNyBAQAogdm9pZCBob3N0YXBfZHVtcF90eF9oZWFkZXIoY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lICp0eCk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaG9zdGFwXzgwMjExX29wczsKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpOworaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKF9fbGUxNiBmYyk7CiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaG9zdGFwX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBsb2NhbF9pbmZvX3QgKmxvY2FsLAogCQkgICAgICBpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKaW5kZXggM2E5NDc0ZC4uMmU5ZmIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgSE9TVEFQXzgwMjExX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiBzdHJ1Y3QgaG9zdGFwX2llZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYwppbmRleCAxOWIxYmYwLi4zODE2ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKICNpbmNsdWRlICJob3N0YXBfODAyMTEuaCIKICNpbmNsdWRlICJob3N0YXAuaCIKQEAgLTE3LDEwICsxOCwxMCBAQAogdm9pZCBob3N0YXBfZHVtcF9yeF84MDIxMShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggc2lnbmFsPSVkIG5vaXNlPSVkIHJhdGU9JWQgbGVuPSVkICIKIAkgICAgICAgImppZmZpZXM9JWxkXG4iLApAQCAtMzAsOSArMzEsMTAgQEAKIAlpZiAoc2tiLT5sZW4gPCAyKQogCQlyZXR1cm47CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCklcyVzIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMgPyAiIFtGcm9tRFNdIiA6ICIiKTsKIApAQCAtNDIsNyArNDQsNyBAQAogCX0KIAogCXByaW50aygiIGR1cj0weCUwNHggc2VxPTB4JTA0eFxuIiwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCksCi0JICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCkpOworCSAgICAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgQTE9JXBNIiwgaGRyLT5hZGRyMSk7CiAJcHJpbnRrKCIgQTI9JXBNIiwgaGRyLT5hZGRyMik7CkBAIC02Myw3ICs2NSw3IEBACiAJaW50IGhkcmxlbiwgcGhkcmxlbiwgaGVhZF9uZWVkLCB0YWlsX25lZWQ7CiAJdTE2IGZjOwogCWludCBwcmlzbV9oZWFkZXIsIHJldDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqZmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTg0LDggKzg2LDggQEAKIAkJcGhkcmxlbiA9IDA7CiAJfQogCi0JZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShmaGRyLT5mcmFtZV9jdGwpOworCWZoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoZmhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAodHlwZSA9PSBQUklTTTJfUlhfTUdNVCAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9WRVJTKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgbWFuYWdlbWVudCBmcmFtZSB3aXRoIGhlYWRlciAiCkBAIC05NCw3ICs5Niw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciBleHRyYSBkYXRhOyBpZiBub3QsIGV4cGFuZCBza2IKIAkgKiBidWZmZXIgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgY2hhbmdlcyAqLwpAQCAtMTkzLDcgKzE5NSw3IEBACiAJaWYgKHByaXNtX2hlYWRlcikKIAkJc2tiX3B1bGwoc2tiLCBwaGRybGVuKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAluZXRpZl9yeChza2IpOwogCkBAIC0yMDUsMTMgKzIwNywxMSBAQAogc3RhdGljIHZvaWQgbW9uaXRvcl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlpbnQgbGVuOwogCiAJbGVuID0gcHJpc20yX3J4XzgwMjExKGRldiwgc2tiLCByeF9zdGF0cywgUFJJU00yX1JYX01PTklUT1IpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIH0KIAogCkBAIC0yNDcsMjEgKzI0NywyMSBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1wcmlzbTJfZnJhZ19jYWNoZV9nZXQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKK3ByaXNtMl9mcmFnX2NhY2hlX2dldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXUxNiBzYzsKIAl1bnNpZ25lZCBpbnQgZnJhZywgc2VxOwogCXN0cnVjdCBwcmlzbTJfZnJhZ19lbnRyeSAqZW50cnk7CiAKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7Ci0JZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKLQlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKSA+PiA0OworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJZnJhZyA9IHNjICYgSUVFRTgwMjExX1NDVExfRlJBRzsKKwlzZXEgPSAoc2MgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CiAKIAlpZiAoZnJhZyA9PSAwKSB7CiAJCS8qIFJlc2VydmUgZW5vdWdoIHNwYWNlIHRvIGZpdCBtYXhpbXVtIGZyYW1lIGxlbmd0aCAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5kZXYtPm10dSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkcikgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpICsKIAkJCQkgICAgOCAvKiBMTEMgKi8gKwogCQkJCSAgICAyIC8qIGFsaWdubWVudCAqLyArCiAJCQkJICAgIDggLyogV0VQICovICsgRVRIX0FMRU4gLyogV0RTICovKTsKQEAgLTI5OSwxNCArMjk5LDE0IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogc3RhdGljIGludCBwcmlzbTJfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBzZXE7CiAJc3RydWN0IHByaXNtMl9mcmFnX2VudHJ5ICplbnRyeTsKIAotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKSA+PiA0OworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJc2VxID0gKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwogCiAJZW50cnkgPSBwcmlzbTJfZnJhZ19jYWNoZV9maW5kKGxvY2FsLCBzZXEsIC0xLCBoZHItPmFkZHIyLCBoZHItPmFkZHIxKTsKIApAQCAtNDcyLDEwICs0NzIsOCBAQAogCQkgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywgdTE2IHR5cGUsCiAJCSAgICAgdTE2IHN0eXBlKQogewotCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikgewotCQlob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbCwgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopCi0JCQkJICAgICBza2ItPmRhdGEpOwotCX0KKwlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIpCisJCWhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhKTsKIAogCWlmIChsb2NhbC0+aG9zdGFwZCAmJiB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSB7CiAJCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OICYmCkBAIC01NTIsOCArNTUwLDggQEAKIAogCiBzdGF0aWMgaW50Ci1ob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCi0JCSAgICB1MTYgZmMsIHN0cnVjdCBuZXRfZGV2aWNlICoqd2RzKQoraG9zdGFwX3J4X2ZyYW1lX3dkcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MTYgZmMsCisJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKndkcykKIHsKIAkvKiBGSVg6IGlzIHRoaXMgcmVhbGx5IHN1cHBvc2VkIHRvIGFjY2VwdCBXRFMgZnJhbWVzIG9ubHkgaW4gTWFzdGVyCiAJICogbW9kZT8gV2hhdCBhYm91dCBSZXBlYXRlciBvciBNYW5hZ2VkIHdpdGggV0RTIGZyYW1lcz8gKi8KQEAgLTYxMSwxNCArNjA5LDE0IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJdTE2IGZjLCBldGhlcnR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4ICpwb3M7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY2hlY2sgdGhhdCB0aGUgZnJhbWUgaXMgdW5pY2FzdCBmcmFtZSB0byB1cyAqLwogCWlmICgoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpID09CkBAIC02NTEsMTQgKzY0OSwxNCBAQAogaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IHJlcywgaGRybGVuOwogCiAJaWYgKGNyeXB0ID09IE5VTEwgfHwgY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmIChsb2NhbC0+dGtpcF9jb3VudGVybWVhc3VyZXMgJiYKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewpAQCAtNjg5LDE0ICs2ODcsMTQgQEAKIGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0X21zZHUobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgaW50IGtleWlkeCwgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJYXRvbWljX2luYygmY3J5cHQtPnJlZmNudCk7CiAJcmVzID0gY3J5cHQtPm9wcy0+ZGVjcnlwdF9tc2R1KHNrYiwga2V5aWR4LCBoZHJsZW4sIGNyeXB0LT5wcml2KTsKQEAgLTcyMCwxMSArNzE4LDEwIEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXNpemVfdCBoZHJsZW47CiAJdTE2IGZjLCB0eXBlLCBzdHlwZSwgc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKndkcyA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBmcmFnOwogCXU4ICpwYXlsb2FkOwogCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKQEAgLTc0NywxOCArNzQ0LDE3IEBACiAJZGV2ID0gbG9jYWwtPmRkZXY7CiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJaWYgKHNrYi0+bGVuIDwgMTApCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKLQlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7Ci0JZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFOworCXN0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKKwlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOworCWZyYWcgPSBzYyAmIElFRUU4MDIxMV9TQ1RMX0ZSQUc7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIFB1dCB0aGlzIGNvZGUgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGR1cGxpY2F0aW5nIGl0IGluIGFsbAogCSAqIFJ4IHBhdGhzLiAtIEplYW4gSUkgKi8KQEAgLTg2NiwxMCArODYyLDggQEAKIAogCWlmIChob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsLCBoZHIsIGZjLCAmd2RzKSkKIAkJZ290byByeF9kcm9wcGVkOwotCWlmICh3ZHMpIHsKKwlpZiAod2RzKQogCQlza2ItPmRldiA9IGRldiA9IHdkczsKLQkJc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7Ci0JfQogCiAJaWYgKGxvY2FsLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSICYmICF3ZHMgJiYKIAkgICAgKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA9PQpAQCAtODc4LDcgKzg3Miw2IEBACiAJICAgIG1lbWNtcChoZHItPmFkZHIyLCBsb2NhbC0+YXNzb2NfYXBfYWRkciwgRVRIX0FMRU4pID09IDApIHsKIAkJLyogRnJhbWUgZnJvbSBCU1NJRCBvZiB0aGUgQVAgZm9yIHdoaWNoIHdlIGFyZSBhIGNsaWVudCAqLwogCQlza2ItPmRldiA9IGRldiA9IGxvY2FsLT5zdGFkZXY7Ci0JCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCQlmcm9tX2Fzc29jX2FwID0gMTsKIAl9CiAKQEAgLTkxOCw3ICs5MTEsNyBAQAogCWlmIChsb2NhbC0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYKIAkgICAgKGtleWlkeCA9IGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0KGxvY2FsLCBza2IsIGNyeXB0KSkgPCAwKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJLyogc2tiOiBoZHIgKyAocG9zc2libHkgZnJhZ21lbnRlZCkgcGxhaW50ZXh0IHBheWxvYWQgKi8KIApAQCAtOTMxLDcgKzkyNCw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJ4IGNhbm5vdCBnZXQgc2tiIGZyb20gIgogCQkJICAgICAgICJmcmFnbWVudCBjYWNoZSAobW9yZWZyYWc9JWQgc2VxPSV1IGZyYWc9JXUpXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgKGZjICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSAhPSAwLAotCQkJICAgICAgIFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQsIGZyYWcpOworCQkJICAgICAgIChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCwgZnJhZyk7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJCX0KIApAQCAtOTcyLDcgKzk2NSw3IEBACiAJCS8qIHRoaXMgd2FzIHRoZSBsYXN0IGZyYWdtZW50IGFuZCB0aGUgZnJhbWUgd2lsbCBiZQogCQkgKiBkZWxpdmVyZWQsIHNvIHJlbW92ZSBza2IgZnJvbSBmcmFnbWVudCBjYWNoZSAqLwogCQlza2IgPSBmcmFnX3NrYjsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJcHJpc20yX2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShsb2NhbCwgaGRyKTsKIAl9CiAKQEAgLTk4Myw3ICs5NzYsNyBAQAogCSAgICBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KGxvY2FsLCBza2IsIGtleWlkeCwgY3J5cHQpKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJaWYgKGNyeXB0ICYmICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmICFsb2NhbC0+b3Blbl93ZXApIHsKIAkJaWYgKGxvY2FsLT5pZWVlXzgwMl8xeCAmJgogCQkgICAgaG9zdGFwX2lzX2VhcG9sX2ZyYW1lKGxvY2FsLCBza2IpKSB7CkBAIC0xMDY5LDggKzEwNjIsOCBAQAogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gRVRIX0FMRU4pOwogCX0KIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIgJiYgIXdkcyAmJgogCSAgICBsb2NhbC0+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC0xMDk0LDcgKzEwODcsNyBAQAogCWlmIChza2IyICE9IE5VTEwpIHsKIAkJLyogc2VuZCB0byB3aXJlbGVzcyBtZWRpYSAqLwogCQlza2IyLT5kZXYgPSBkZXY7Ci0JCXNrYjItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyk7CisJCXNrYjItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOwogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IyKTsKIAkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOwogCQkvKiBza2IyLT5uZXR3b3JrX2hlYWRlciArPSBFVEhfSExFTjsgKi8KQEAgLTExMTUsNyArMTEwOCw3IEBACiAgcnhfZHJvcHBlZDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWdvdG8gcnhfZXhpdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IDA3OGEwMTAuLjY2OTM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTE1LDEwICsxNSwxMCBAQAogCiB2b2lkIGhvc3RhcF9kdW1wX3R4XzgwMjExKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogVFggbGVuPSVkIGppZmZpZXM9JWxkXG4iLAogCSAgICAgICBuYW1lLCBza2ItPmxlbiwgamlmZmllcyk7CkBAIC0yNiw5ICsyNiwxMCBAQAogCWlmIChza2ItPmxlbiA8IDIpCiAJCXJldHVybjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgRkM9MHglMDR4ICh0eXBlPSVkOiVkKSVzJXMiLAotCSAgICAgICBmYywgV0xBTl9GQ19HRVRfVFlQRShmYykgPj4gMiwgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID4+IDQsCisJICAgICAgIGZjLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMiwKKwkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUyA/ICIgW1RvRFNdIiA6ICIiLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgW0Zyb21EU10iIDogIiIpOwogCkBAIC0zOCw3ICszOSw3IEBACiAJfQogCiAJcHJpbnRrKCIgZHVyPTB4JTA0eCBzZXE9MHglMDR4XG4iLCBsZTE2X3RvX2NwdShoZHItPmR1cmF0aW9uX2lkKSwKLQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgICBBMT0lcE0iLCBoZHItPmFkZHIxKTsKIAlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKQEAgLTU3LDcgKzU4LDcgQEAKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAlpbnQgbmVlZF9oZWFkcm9vbSwgbmVlZF90YWlscm9vbSA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkcjsKIAl1MTYgZmMsIGV0aGVydHlwZSA9IDA7CiAJZW51bSB7CiAJCVdEU19OTyA9IDAsIFdEU19PV05fRlJBTUUsIFdEU19DT01QTElBTlRfRlJBTUUKQEAgLTIwMSw3ICsyMDIsNyBAQAogCQltZW1jcHkoJmhkci5hZGRyMywgbG9jYWwtPmJzc2lkLCBFVEhfQUxFTik7CiAJfQogCi0JaGRyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwloZHIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAogCXNrYl9wdWxsKHNrYiwgc2tpcF9oZWFkZXJfYnl0ZXMpOwogCW5lZWRfaGVhZHJvb20gPSBsb2NhbC0+ZnVuYy0+bmVlZF90eF9oZWFkcm9vbSArIGhkcl9sZW4gKyBlbmNhcHNfbGVuOwpAQCAtMjY1LDcgKzI2Niw3IEBACiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjg3LDEwICsyODgsMTAgQEAKIAltZXRhLT5pZmFjZSA9IGlmYWNlOwogCiAJaWYgKHNrYi0+bGVuID49IElFRUU4MDIxMV9EQVRBX0hEUjNfTEVOICsgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSArIDIpIHsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgotCQkgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID09IElFRUU4MDIxMV9TVFlQRV9EQVRBKSB7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfREFUQSkgewogCQkJdTggKnBvcyA9ICZza2ItPmRhdGFbSUVFRTgwMjExX0RBVEFfSERSM19MRU4gKwogCQkJCQkgICAgIHNpemVvZihyZmMxMDQyX2hlYWRlcildOwogCQkJbWV0YS0+ZXRoZXJ0eXBlID0gKHBvc1swXSA8PCA4KSB8IHBvc1sxXTsKQEAgLTMxMCw4ICszMTEsNyBAQAogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IHByZWZpeF9sZW4sIHBvc3RmaXhfbGVuLCBoZHJfbGVuLCByZXM7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KHNrYi0+ZGV2KTsKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAJaWYgKGxvY2FsLT50a2lwX2NvdW50ZXJtZWFzdXJlcyAmJgogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7Ci0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgogCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLApAQCAtMzQ5LDkgKzM0OSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0gCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWhkcl9sZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJfbGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIEhvc3QtYmFzZWQgSUVFRSA4MDIuMTEgZnJhZ21lbnRhdGlvbiBmb3IgVFggaXMgbm90IHlldCBzdXBwb3J0ZWQsIHNvCiAJICogY2FsbCBib3RoIE1TRFUgYW5kIE1QRFUgZW5jcnlwdGlvbiBmdW5jdGlvbnMgZnJvbSBoZXJlLiAqLwpAQCAtMzg0LDcgKzM4Myw3IEBACiAJYXBfdHhfcmV0IHR4X3JldDsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCWludCBub19lbmNyeXB0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAJbG9jYWwgPSBpZmFjZS0+bG9jYWw7CkBAIC00MjcsMTQgKzQyNiwxNCBAQAogCXR4X3JldCA9IGhvc3RhcF9oYW5kbGVfc3RhX3R4KGxvY2FsLCAmdHgpOwogCXNrYiA9IHR4LnNrYjsKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlzd2l0Y2ggKHR4X3JldCkgewogCWNhc2UgQVBfVFhfQ09OVElOVUU6CiAJCWJyZWFrOwogCWNhc2UgQVBfVFhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQ6CiAJCWlmIChsb2NhbC0+aWVlZV84MDJfMXggJiYKLQkJICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCisJCSAgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgICBtZXRhLT5ldGhlcnR5cGUgIT0gRVRIX1BfUEFFICYmCiAJCSAgICAhKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX1dEUykpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBmcmFtZSB0byB1bmF1dGhvcml6ZWQgIgpAQCAtNDY5LDEwICs0NjgsMTAgQEAKIAogCQkvKiByZW1vdmUgc3BlY2lhbCB2ZXJzaW9uIGZyb20gdGhlIGZyYW1lIGhlYWRlciAqLwogCQlmYyAmPSB+SUVFRTgwMjExX0ZDVExfVkVSUzsKLQkJaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAl9CiAKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJbm9fZW5jcnlwdCA9IDE7CiAJCXR4LmNyeXB0ID0gTlVMTDsKIAl9CkBAIC00OTMsOSArNDkyLDkgQEAKIAkJLyogQWRkIElTV0VQIGZsYWcgYm90aCBmb3IgZmlybXdhcmUgYW5kIGhvc3QgYmFzZWQgZW5jcnlwdGlvbgogCQkgKi8KIAkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwotCQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCX0gZWxzZSBpZiAobG9jYWwtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKLQkJICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKKwkJICAgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQkgICBtZXRhLT5ldGhlcnR5cGUgIT0gRVRIX1BfUEFFKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCB1bmVuY3J5cHRlZCBUWCBkYXRhICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCAwOTAzZGI3Li5hMmEyMDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgpAQCAtNTg4LDI4ICs1ODksMjQgQEAKIHN0YXRpYyB2b2lkIGhvc3RhcF9hcF90eF9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKLQl1MTYgZmM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWYgKCFhcC0+bG9jYWwtPmhvc3RhcGQgfHwgIWFwLT5sb2NhbC0+YXBkZXYpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQogCS8qIFBhc3MgdGhlIFRYIGNhbGxiYWNrIGZyYW1lIHRvIHRoZSBob3N0YXBkOyB1c2UgODAyLjExIGhlYWRlciB2ZXJzaW9uCiAJICogMSB0byBpbmRpY2F0ZSBmYWlsdXJlIChubyBBQ0spIGFuZCAyIHN1Y2Nlc3MgKGZyYW1lIEFDS2VkKSAqLwogCi0JZmMgJj0gfklFRUU4MDIxMV9GQ1RMX1ZFUlM7Ci0JZmMgfD0gb2sgPyBCSVQoMSkgOiBCSVQoMCk7Ci0JaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHItPmZyYW1lX2NvbnRyb2wgJj0gY3B1X3RvX2xlMTYofklFRUU4MDIxMV9GQ1RMX1ZFUlMpOworCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihvayA/IEJJVCgxKSA6IEJJVCgwKSk7CiAKIAlza2ItPmRldiA9IGFwLT5sb2NhbC0+YXBkZXY7Ci0Jc2tiX3B1bGwoc2tiLCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYykpOworCXNrYl9wdWxsKHNrYiwgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKSk7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzIpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMik7CiAJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTYyMSw4ICs2MTgsOCBAQAogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFwLT5sb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTE2IGZjLCBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWNoYXIgKnR4dCA9IE5VTEw7CkBAIC02MzIsMTAgKzYyOSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSAhPSBJRUVFODAyMTFfRlRZUEVfTUdNVCB8fAotCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX0FVVEggfHwKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWlmICghaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBza2ItPmxlbiA8IElFRUU4MDIxMV9NR01UX0hEUl9MRU4gKyA2KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdGFwX2FwX3R4X2NiX2F1dGggcmVjZWl2ZWQgaW52YWxpZCAiCiAJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CkBAIC02OTEsNyArNjg2LDcgQEAKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcC0+bG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjLCBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwpAQCAtNzAyLDExICs2OTcsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UIHx8Ci0JICAgIChXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgJiYKLQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQKSB8fAorCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCWlmICgoIWllZWU4MDIxMV9pc19hc3NvY19yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgICFpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHx8CiAJICAgIHNrYi0+bGVuIDwgSUVFRTgwMjExX01HTVRfSERSX0xFTiArIDQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfYXBfdHhfY2JfYXNzb2MgcmVjZWl2ZWQgaW52YWxpZCAiCiAJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CkBAIC03NTcsMTIgKzc1MSwxMiBAQAogc3RhdGljIHZvaWQgaG9zdGFwX2FwX3R4X2NiX3BvbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9rLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJaWYgKHNrYi0+bGVuIDwgMjQpCiAJCWdvdG8gZmFpbDsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJaWYgKG9rKSB7CiAJCXNwaW5fbG9jaygmYXAtPnN0YV90YWJsZV9sb2NrKTsKIAkJc3RhID0gYXBfZ2V0X3N0YShhcCwgaGRyLT5hZGRyMSk7CkBAIC05MTcsNyArOTExLDcgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKQEAgLTk0Miw4ICs5MzYsOCBAQAogCX0KIAogCWZjID0gdHlwZV9zdWJ0eXBlOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiX3B1dChza2IsIGhkcmxlbik7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oY3B1X3RvX2xlMTYodHlwZV9zdWJ0eXBlKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCBoZHJsZW4pOwogCWlmIChib2R5KQogCQltZW1jcHkoc2tiX3B1dChza2IsIGJvZHlfbGVuKSwgYm9keSwgYm9keV9sZW4pOwogCkBAIC05NTQsMTEgKzk0OCwxMSBAQAogCiAKIAltZW1jcHkoaGRyLT5hZGRyMSwgYWRkciwgRVRIX0FMRU4pOyAvKiBEQSAvIFJBICovCi0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7CisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJZmMgfD0gSUVFRTgwMjExX0ZDVExfRlJPTURTOwogCQltZW1jcHkoaGRyLT5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBCU1NJRCAqLwogCQltZW1jcHkoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBTQSAqLwotCX0gZWxzZSBpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkgeworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCS8qIGNvbnRyb2w6QUNLIGRvZXMgbm90IGhhdmUgYWRkcjIgb3IgYWRkcjMgKi8KIAkJbWVtc2V0KGhkci0+YWRkcjIsIDAsIEVUSF9BTEVOKTsKIAkJbWVtc2V0KGhkci0+YWRkcjMsIDAsIEVUSF9BTEVOKTsKQEAgLTk2Nyw3ICs5NjEsNyBAQAogCQltZW1jcHkoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBCU1NJRCAqLwogCX0KIAotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCW1lbXNldChtZXRhLCAwLCBzaXplb2YoKm1ldGEpKTsKQEAgLTEyODQsMjIgKzEyNzgsMjEgQEAKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCXNpemVfdCBoZHJsZW47CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gbG9jYWwtPmFwOwogCWNoYXIgYm9keVs4ICsgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU5dLCAqY2hhbGxlbmdlID0gTlVMTDsKIAlpbnQgbGVuLCBvbGVuOwogCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CiAJX19sZTE2ICpwb3M7Ci0JdTE2IHJlc3AgPSBXTEFOX1NUQVRVU19TVUNDRVNTLCBmYzsKKwl1MTYgcmVzcCA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAljaGFyICp0eHQgPSAiIjsKIAogCWxlbiA9IHNrYi0+bGVuIC0gSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKGxlbiA8IDYpIHsKIAkJUERFQlVHKERFQlVHX0FQLCAiJXM6IGhhbmRsZV9hdXRoZW4gLSB0b28gc2hvcnQgcGF5bG9hZCAiCkBAIC0xNDM1LDcgKzE0MjgsNyBAQAogCQkJICAgIGNoYWxsZW5nZSA9PSBOVUxMIHx8CiAJCQkgICAgbWVtY21wKHN0YS0+dS5zdGEuY2hhbGxlbmdlLCBjaGFsbGVuZ2UsCiAJCQkJICAgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pICE9IDAgfHwKLQkJCSAgICAhKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkgeworCQkJICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQkJdHh0ID0gImNoYWxsZW5nZSByZXNwb25zZSBpbmNvcnJlY3QiOwogCQkJCXJlc3AgPSBXTEFOX1NUQVRVU19DSEFMTEVOR0VfRkFJTDsKIAkJCQlnb3RvIGZhaWw7CkBAIC0xNDg4LDcgKzE0ODEsNyBAQAogCQkgICAgICAgInRyYW5zIz0lZCBzdGF0PSVkIGxlbj0lZCBmYz0lMDR4KSA9PT4gJWQgKCVzKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZSwgbGVuLAotCQkgICAgICAgZmMsIHJlc3AsIHR4dCk7CisJCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpLCByZXNwLCB0eHQpOwogCX0KIH0KIApAQCAtMTQ5OCw3ICsxNDkxLDcgQEAKIAkJCSBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMsIGludCByZWFzc29jKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgYm9keVsxMl0sICpwLCAqbHBvczsKIAlpbnQgbGVuLCBsZWZ0OwogCV9fbGUxNiAqcG9zOwpAQCAtMTcwNyw3ICsxNzAwLDcgQEAKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSAoY2hhciAqKSAoc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTik7CiAJaW50IGxlbjsKIAl1MTYgcmVhc29uX2NvZGU7CkBAIC0xNzQ5LDcgKzE3NDIsNyBAQAogCQkJICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAlpbnQgbGVuOwogCXUxNiByZWFzb25fY29kZTsKQEAgLTE3ODgsNyArMTc4MSw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgc2NoZWR1bGVkIHRhc2sgZm9yIHBlbmRpbmcgQVAgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgYXBfaGFuZGxlX2RhdGFfbnVsbGZ1bmMobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIApAQCAtMTgwNSw3ICsxNzk4LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBhcF9oYW5kbGVfZHJvcHBlZF9kYXRhKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMTg2Myw3ICsxODU2LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBoYW5kbGVfcHNwb2xsKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKQEAgLTE4NzIsOCArMTg2NSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCVBERUJVRyhERUJVR19QUzIsICJoYW5kbGVfcHNwb2xsOiBCU1NJRD0lcE0sIFRBPSVwTSBQV1JNR1Q9JWRcbiIsCi0JICAgICAgIGhkci0+YWRkcjEsIGhkci0+YWRkcjIsCi0JICAgICAgICEhKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX1BNKSk7CisJICAgICAgIGhkci0+YWRkcjEsIGhkci0+YWRkcjIsICEhaWVlZTgwMjExX2hhc19wbShoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAogCWlmIChtZW1jbXAoaGRyLT5hZGRyMSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7CiAJCVBERUJVRyhERUJVR19BUCwKQEAgLTE5ODQsNyArMTk3Niw3IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfYmVhY29uKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAlpbnQgbGVuLCBsZWZ0OwogCXUxNiBiZWFjb25faW50LCBjYXBhYmlsaXR5OwpAQCAtMjE0MywxNCArMjEzNSwxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogI2VuZGlmIC8qIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQgKi8KIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCS8qIEZJWDogc2hvdWxkIGdpdmUgc2tiLT5sZW4gdG8gaGFuZGxlciBmdW5jdGlvbnMgYW5kIGNoZWNrIHRoYXQgdGhlCiAJICogYnVmZmVyIGlzIGxvbmcgZW5vdWdoICovCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7Ci0Jc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CisJc3R5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOwogCiAjaWZuZGVmIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQKIAlpZiAoIWxvY2FsLT5ob3N0YXBkICYmIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKQEAgLTIyNjIsOCArMjI1NCw3IEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0JdTE2IGZjOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTIyNzEsMTcgKzIyNjIsMTUgQEAKIAlpZiAoc2tiLT5sZW4gPCAxNikKIAkJZ290byBkcm9wOwogCi0JbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCWlmIChsb2NhbC0+YXAtPmFwX3BvbGljeSA9PSBBUF9PVEhFUl9BUF9TS0lQX0FMTCAmJgotCSAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgotCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKKwkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlnb3RvIGRyb3A7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IT1NUQVApOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9IT1NUQVApOwogCWhhbmRsZV9hcF9pdGVtKGxvY2FsLCBza2IsIHJ4X3N0YXRzKTsKIAlyZXR1cm47CiAKQEAgLTIyOTQsNyArMjI4Myw3IEBACiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9wYWNrZXRfc2VuZChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyByeF9zdGF0czsKIAogCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+dHhfYnVmKSkKQEAgLTIzMDcsMTAgKzIyOTYsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2JfcHV0KHNrYiwgMTYpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMTYpOwogCiAJLyogR2VuZXJhdGUgYSBmYWtlIHBzcG9sbCBmcmFtZSB0byBzdGFydCBwYWNrZXQgZGVsaXZlcnkgKi8KLQloZHItPmZyYW1lX2N0bCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoCiAJCUlFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKIAltZW1jcHkoaGRyLT5hZGRyMSwgbG9jYWwtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoaGRyLT5hZGRyMiwgc3RhLT5hZGRyLCBFVEhfQUxFTik7CkBAIC0yNjg5LDcgKzI2NzgsNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKIAlpbnQgc2V0X3RpbSwgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CkBAIC0yNjk4LDcgKzI2ODcsNyBAQAogCSAgICBtZXRhLT5pZmFjZS0+dHlwZSA9PSBIT1NUQVBfSU5URVJGQUNFX1NUQSkKIAkJZ290byBvdXQ7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlpZiAoaGRyLT5hZGRyMVswXSAmIDB4MDEpIHsKIAkJLyogYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZSAtIG5vIEFQIHJlbGF0ZWQgcHJvY2Vzc2luZyAqLwpAQCAtMjc1Myw4ICsyNzQyLDggQEAKIAogCWlmIChtZXRhLT5mbGFncyAmIEhPU1RBUF9UWF9GTEFHU19BRERfTU9SRURBVEEpIHsKIAkJLyogaW5kaWNhdGUgdG8gU1RBIHRoYXQgbW9yZSBmcmFtZXMgZm9sbG93ICovCi0JCWhkci0+ZnJhbWVfY3RsIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sIHw9CisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CiAJfQogCiAJaWYgKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX0JVRkZFUkVEX0ZSQU1FKSB7CkBAIC0yODI4LDEwICsyODE3LDEwIEBACiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3R4X2V4Yyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCiAJc3Bpbl9sb2NrKCZsb2NhbC0+YXAtPnN0YV90YWJsZV9sb2NrKTsKQEAgLTI4OTgsOCArMjg4Nyw4IEBACiAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiBDYWxsZWQgZm9yIGVhY2ggUlggZnJhbWUgdG8gdXBkYXRlCi0gKiBTVEEgcG93ZXIgc2F2aW5nIHN0YXRlLiBwd3JtZ3QgaXMgYSBmbGFnIGZyb20gODAyLjExIGZyYW1lX2N0bCBmaWVsZC4gKi8KLWludCBob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorICogU1RBIHBvd2VyIHNhdmluZyBzdGF0ZS4gcHdybWd0IGlzIGEgZmxhZyBmcm9tIDgwMi4xMSBmcmFtZV9jb250cm9sIGZpZWxkLiAqLworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IGZjOwpAQCAtMjkxMyw5ICsyOTAyLDEwIEBACiAJaWYgKCFzdGEpCiAJCXJldHVybiAtMTsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlob3N0YXBfdXBkYXRlX3N0YV9wczIobG9jYWwsIHN0YSwgZmMgJiBJRUVFODAyMTFfRkNUTF9QTSwKLQkJCSAgICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykpOworCQkJICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSwKKwkJCSAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpOwogCiAJYXRvbWljX2RlYygmc3RhLT51c2Vycyk7CiAJcmV0dXJuIDA7CkBAIC0yOTMyLDE2ICsyOTIyLDE2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmIChsb2NhbC0+YXAgPT0gTlVMTCkKIAkJcmV0dXJuIEFQX1JYX0NPTlRJTlVFOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKKwlzdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAKIAlzcGluX2xvY2soJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwogCXN0YSA9IGFwX2dldF9zdGEobG9jYWwtPmFwLCBoZHItPmFkZHIyKTsKQEAgLTMwNjQsNyArMzA1NCw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0LAogCQkJICAgICB2b2lkICoqc3RhX3B0cikKIHsKQEAgLTMxNjYsNyArMzE1Niw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKaW5kZXggZDM2ZTRiMS4uNjU1Y2VlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaApAQCAtMjM1LDcgKzIzNSw3IEBACiBhcF90eF9yZXQgaG9zdGFwX2hhbmRsZV9zdGFfdHgobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGhvc3RhcF90eF9kYXRhICp0eCk7CiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3JlbGVhc2Uodm9pZCAqcHRyKTsKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfdHhfZXhjKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpOworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogdHlwZWRlZiBlbnVtIHsKIAlBUF9SWF9DT05USU5VRSwgQVBfUlhfRFJPUCwgQVBfUlhfRVhJVCwgQVBfUlhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQKIH0gYXBfcnhfcmV0OwpAQCAtMjQzLDEzICsyNDMsMTMgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywKIAkJCSAgICAgICBpbnQgd2RzKTsKLWludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKK2ludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgICAgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKipjcnlwdCwKIAkJCSAgICAgdm9pZCAqKnN0YV9wdHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXNzb2Moc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXV0aG9yaXplZChzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7CiBpbnQgaG9zdGFwX2FkZF9zdGEoc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwotaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAoraW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKTsKIHZvaWQgaG9zdGFwX3VwZGF0ZV9yYXRlcyhsb2NhbF9pbmZvX3QgKmxvY2FsKTsKIHZvaWQgaG9zdGFwX2FkZF93ZHNfbGlua3MobG9jYWxfaW5mb190ICpsb2NhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggMGYyNzA1OS4uM2RhZDFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xNjgzLDcgKzE2ODIsNyBAQAogCiAJUERFQlVHKERFQlVHX0VYVFJBMiwgInByaXNtMl9nZXRfdHhmaWRfaWR4OiBubyByb29tIGluIHR4ZmlkIGJ1ZjogIgogCSAgICAgICAicGFja2V0IGRyb3BwZWRcbiIpOwotCWxvY2FsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJbG9jYWwtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtMTc4OCwxMSArMTc4Nyw5IEBACiAJCXByaXNtMl90cmFuc21pdF9jYiwgKGxvbmcpIGlkeCk7CiAKIAlpZiAocmVzKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcmlzbTJfdHJhbnNtaXQ6IENNRENPREVfVFJBTlNNSVQgIgogCQkgICAgICAgImZhaWxlZCAocmVzPSVkKVxuIiwgZGV2LT5uYW1lLCByZXMpOwotCQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE4NDAsOCArMTgzNyw4IEBACiAJaGRyX2xlbiA9IDI0OwogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAmdHhkZXNjLmZyYW1lX2NvbnRyb2wsIGhkcl9sZW4pOwogIAlmYyA9IGxlMTZfdG9fY3B1KHR4ZGVzYy5mcmFtZV9jb250cm9sKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSAmJgorCWlmIChpZWVlODAyMTFfaXNfZGF0YSh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKKwkgICAgaWVlZTgwMjExX2hhc19hNCh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKIAkgICAgc2tiLT5sZW4gPj0gMzApIHsKIAkJLyogQWRkcjQgKi8KIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBoZHJfbGVuLCB0eGRlc2MuYWRkcjQsCkBAIC0xOTQwLDEyICsxOTM3LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJaW50IHJlcywgcnhfcGVuZGluZyA9IDA7CiAJdTE2IGxlbiwgaGRyX2xlbiwgcnhmaWQsIHN0YXR1cywgbWFjcG9ydDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJc3RydWN0IGhmYTM4NHhfcnhfZnJhbWUgcnhkZXNjOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCiAJcHJpc20yX2NhbGxiYWNrKGxvY2FsLCBQUklTTTJfQ0FMTEJBQ0tfUlhfU1RBUlQpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCiAJcnhmaWQgPSBwcmlzbTJfcmVhZF9maWRfcmVnKGRldiwgSEZBMzg0WF9SWEZJRF9PRkYpOwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCkBAIC0yMDMyLDcgKzIwMjcsNyBAQAogCXJldHVybjsKIAogIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJZ290byByeF9leGl0OwpAQCAtMjA4Miw3ICsyMDc3LDcgQEAKIAlzdGF0cy5yYXRlID0gcnhkZXNjLT5yYXRlOwogCiAJLyogQ29udmVydCBQcmlzbTIgUlggc3RydWN0dXJlIGludG8gSUVFRSA4MDIuMTEgaGVhZGVyICovCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUocnhkZXNjLT5mcmFtZV9jb250cm9sKSk7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4ocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoaGRybGVuID4gcnhfaGRybGVuKQogCQloZHJsZW4gPSByeF9oZHJsZW47CiAKQEAgLTIyMDQsNyArMjE5OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWxlbiA9IGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZGF0YV9sZW4pOwogCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgbGVuKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKQEAgLTIzMTUsOCArMjMxMCw3IEBACiAJCWlmIChza2ItPmxlbiA+PSBzaXplb2YoKnR4ZGVzYykpIHsKIAkJCS8qIENvbnZlcnQgUHJpc20yIFJYIHN0cnVjdHVyZSBpbnRvIElFRUUgODAyLjExIGhlYWRlcgogCQkJICovCi0JCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwotCQkJaW50IGhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwkJCWludCBoZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCQkJbWVtbW92ZShza2JfcHVsbChza2IsIHNpemVvZigqdHhkZXNjKSAtIGhkcmxlbiksCiAJCQkJJnR4ZGVzYy0+ZnJhbWVfY29udHJvbCwgaGRybGVuKTsKIApAQCAtMjMzNyw3ICsyMzMxLDcgQEAKIAlzdHJ1Y3QgaGZhMzg0eF90eF9mcmFtZSB0eGRlc2M7CiAKIAlzaG93X2R1bXAgPSBsb2NhbC0+ZnJhbWVfZHVtcCAmIFBSSVNNMl9EVU1QX1RYRVhDX0hEUjsKLQlsb2NhbC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCXJlcyA9IGhvc3RhcF90eF9jb21wbF9yZWFkKGxvY2FsLCAxLCAmdHhkZXNjLCAmcGF5bG9hZCk7CiAJSEZBMzg0WF9PVVRXKEhGQTM4NFhfRVZfVFhFWEMsIEhGQTM4NFhfRVZBQ0tfT0ZGKTsKQEAgLTIzOTQsMTIgKzIzODgsMTIgQEAKIAlQREVCVUcoREVCVUdfRVhUUkEsICIgICByZXRyeV9jb3VudD0lZCB0eF9yYXRlPSVkIGZjPTB4JTA0eCAiCiAJICAgICAgICIoJXMlcyVzOjolZCVzJXMpXG4iLAogCSAgICAgICB0eGRlc2MucmV0cnlfY291bnQsIHR4ZGVzYy50eF9yYXRlLCBmYywKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgPyAiTWdtdCIgOiAiIiwKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCA/ICJDdHJsIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSA/ICJEYXRhIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKLQkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBUb0RTIiA6ICIiLAotCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgRnJvbURTIiA6ICIiKTsKKwkgICAgICAgaWVlZTgwMjExX2lzX21nbXQodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIk1nbXQiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19jdGwodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIkN0cmwiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19kYXRhKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICJEYXRhIiA6ICIiLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKKwkgICAgICAgaWVlZTgwMjExX2hhc190b2RzKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICIgVG9EUyIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2hhc19mcm9tZHModHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIiBGcm9tRFMiIDogIiIpOwogCVBERUJVRyhERUJVR19FWFRSQSwgIiAgIEExPSVwTSBBMj0lcE0gQTM9JXBNIEE0PSVwTVxuIiwKIAkgICAgICAgdHhkZXNjLmFkZHIxLCB0eGRlc2MuYWRkcjIsCiAJICAgICAgIHR4ZGVzYy5hZGRyMywgdHhkZXNjLmFkZHI0KTsKQEAgLTMyMjgsNyArMzIyMiw2IEBACiAKIAlob3N0YXBfc2V0dXBfZGV2KGRldiwgbG9jYWwsIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSKTsKIAotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaG9zdGFwX21hc3Rlcl9zdGFydF94bWl0OwogCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKaW5kZXggOTliNGNmNC4uNmZhMTRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKQEAgLTEsNSArMSw2IEBACiAvKiBIb3N0IEFQIGRyaXZlciBJbmZvIEZyYW1lIHByb2Nlc3NpbmcgKHBhcnQgb2YgaG9zdGFwLm8gbW9kdWxlKSAqLwogCisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCBjNDBmZGY0Li4zZjJiZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0yLDYgKzIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgpAQCAtMTYzOCw3ICsxNjM5LDcgQEAKIAltZW1zZXQoJnNjYW5fcmVxLCAwLCBzaXplb2Yoc2Nhbl9yZXEpKTsKIAlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBjcHVfdG9fbGUxNihsb2NhbC0+Y2hhbm5lbF9tYXNrICYKIAkJCQkJICAgIGxvY2FsLT5zY2FuX2NoYW5uZWxfbWFzayk7Ci0Jc2Nhbl9yZXEudHhyYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKKwlzY2FuX3JlcS50eHJhdGUgPSBjcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKIAlpZiAoc3NpZCkgewogCQlpZiAoc3NpZF9sZW4gPiAzMikKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY2OCw3ICsxNjY5LDcgQEAKIAltZW1zZXQoJnNjYW5fcmVxLCAwLCBzaXplb2Yoc2Nhbl9yZXEpKTsKIAlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBjcHVfdG9fbGUxNihsb2NhbC0+Y2hhbm5lbF9tYXNrICYKIAkJCQkJICAgIGxvY2FsLT5zY2FuX2NoYW5uZWxfbWFzayk7Ci0Jc2Nhbl9yZXEudHhyYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKKwlzY2FuX3JlcS50eHJhdGUgPSBjcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKIAogCS8qIEZJWDoKIAkgKiBJdCBzZWVtcyB0byBiZSBlbm91Z2ggdG8gc2V0IHJvYW1pbmcgbW9kZSBmb3IgYSBzaG9ydCBtb21lbnQgdG8KQEAgLTI1MTQsNyArMjUxNSw3IEBACiAJCXUxNiByYXRlOwogCiAJCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwotCQlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4M2ZmZik7CisJCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KDB4M2ZmZik7CiAJCXN3aXRjaCAodmFsdWUpIHsKIAkJY2FzZSAxOiByYXRlID0gSEZBMzg0WF9SQVRFU18xTUJQUzsgYnJlYWs7CiAJCWNhc2UgMjogcmF0ZSA9IEhGQTM4NFhfUkFURVNfMk1CUFM7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwppbmRleCAwMmEzMTJjLi42ZmUxMjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC01NDMsNyArNTQyLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUocngtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdShyeC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHJ4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUocngtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01NzAsNyArNTcwLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUodHgtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdSh0eC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHR4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUodHgtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01OTMsMzcgKzU5NCwxNiBAQAogfQogCiAKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKQogewotCWludCBoZHJsZW4gPSAyNDsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmIGllZWU4MDIxMV9oYXNfYTQgKGZjKSkKKwkJcmV0dXJuIDMwOyAvKiBBZGRyNCAqLworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19jdHMoZmMpIHx8IGllZWU4MDIxMV9pc19hY2soZmMpKQorCQlyZXR1cm4gMTA7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChmYykpCisJCXJldHVybiAxNjsKIAotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IDMwOyAvKiBBZGRyNCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWhkcmxlbiA9IDE2OwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGhkcmxlbjsKLX0KLQotCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKLQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZpZmFjZS0+c3RhdHM7CisJcmV0dXJuIDI0OwogfQogCiAKQEAgLTgzNSw2ICs4MTUsNDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9vcHMpOwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tZ210X25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiB2b2lkIGhvc3RhcF9zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbG9jYWxfaW5mb190ICpsb2NhbCwKIAkJICAgICAgaW50IHR5cGUpCiB7CkBAIC04NDQsMzcgKzg2NCwzMSBAQAogCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKiBrZXJuZWwgY2FsbGJhY2tzICovCi0JZGV2LT5nZXRfc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzOwogCWlmIChpZmFjZSkgewogCQkvKiBDdXJyZW50bHksIHdlIHBvaW50IHRvIHRoZSBwcm9wZXIgc3B5X2RhdGEgb25seSBvbgogCQkgKiB0aGUgbWFpbl9kZXYuIFRoaXMgY291bGQgYmUgZml4ZWQuIEplYW4gSUkgKi8KIAkJaWZhY2UtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmaWZhY2UtPnNweV9kYXRhOwogCQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmaWZhY2UtPndpcmVsZXNzX2RhdGE7CiAJfQotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCQkoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZob3N0YXBfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5kb19pb2N0bCA9IGhvc3RhcF9pb2N0bDsKLQlkZXYtPm9wZW4gPSBwcmlzbTJfb3BlbjsKLQlkZXYtPnN0b3AgPSBwcmlzbTJfY2xvc2U7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBwcmlzbTJfc2V0X21hY19hZGRyZXNzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBwcmlzbTJfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBwcmlzbTJfdHhfdGltZW91dDsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmhvc3RhcF9pd19oYW5kbGVyX2RlZjsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAotCWlmICh0eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfQVApIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfbWdtdF9zdGFydF94bWl0OworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBIT1NUQVBfSU5URVJGQUNFX0FQOgorCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21nbXRfbmV0ZGV2X29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7Ci0JfSBlbHNlIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfZGF0YV9zdGFydF94bWl0OworCQlicmVhazsKKwljYXNlIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSOgorCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CS8qIHVzZSBtYWluIHJhZGlvIGRldmljZSBxdWV1ZSAqLworCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21hc3Rlcl9vcHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbmV0ZGV2X29wczsKIAl9CiAKIAlkZXYtPm10dSA9IGxvY2FsLT5tdHU7Ci0JaWYgKHR5cGUgIT0gSE9TVEFQX0lOVEVSRkFDRV9NQVNURVIpIHsKLQkJLyogdXNlIG1haW4gcmFkaW8gZGV2aWNlIHF1ZXVlICovCi0JCWRldi0+dHhfcXVldWVfbGVuID0gMDsKLQl9CisKIAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZwcmlzbTJfZXRodG9vbF9vcHMpOwogCkBAIC0xMTI0LDcgKzExMzgsNiBAQAogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF9yeF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF90eF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfODAyMTFfZ2V0X2hkcmxlbik7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF9nZXRfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0dXBfZGV2KTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9zZXRfaG9zdGFwZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCmluZGV4IDRkOGQ1MWEzLi4zZDIzODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaApAQCAtNjg0LDcgKzY4NCw2IEBACiAJdTE2IGNoYW5uZWxfbWFzazsgLyogbWFzayBvZiBhbGxvd2VkIGNoYW5uZWxzICovCiAJdTE2IHNjYW5fY2hhbm5lbF9tYXNrOyAvKiBtYXNrIG9mIGNoYW5uZWxzIHRvIGJlIHNjYW5uZWQgKi8KIAlzdHJ1Y3QgY29tbV90YWxsaWVzX3N1bXMgY29tbV90YWxsaWVzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAlpbnQgaXdfbW9kZTsgLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KIAlpbnQgcHNldWRvX2FkaG9jOyAvKiAwOiBJV19NT0RFX0FESE9DIGlzIHJlYWwgODAyLjExIGNvbXBsaWFudCBJQlNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKaW5kZXggM2Q1Y2M0NC4uODVjYzc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZwpAQCAtMTUwLDYgKzE1MCw3IEBACiAKIGNvbmZpZyBMSUJJUFcKIAl0cmlzdGF0ZQorCWRlcGVuZHMgb24gUENJICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fQVJDNApAQCAtMTg1LDcgKzE4Niw3IEBACiAJICAlIGVjaG8gMHgwMDAwMEZGTyA+IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKIAogCSAgRm9yIGEgbGlzdCBvZiB2YWx1ZXMgeW91IGNhbiBhc3NpZ24gdG8gZGVidWdfbGV2ZWwsIHlvdQotCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiA8bmV0L2llZWU4MDIxMS5oPgorCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiBpZWVlODAyMTEuaAogCiAJICBJZiB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gZGVidWcgb3IgZGV2ZWxvcCB0aGUgbGliaXB3CiAJICBjb21wb25lbnQsIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHNheSBOIGhlcmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaWVlZTgwMjExLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaWVlZTgwMjExLmgKaW5kZXggYWRiN2NmMy4uNzA3NTVjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApAQCAtNTQsNjUgKzU0LDEyIEBACiAjZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQogI2RlZmluZQlNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCiAKLS8qIEZyYW1lIGNvbnRyb2wgZmllbGQgY29uc3RhbnRzICovCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1ZFUlMJCTB4MDAwMwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GVFlQRQkJMHgwMDBjCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1NUWVBFCQkweDAwZjAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVE9EUwkJMHgwMTAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZST01EUwkJMHgwMjAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUwkweDA0MDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUkVUUlkJCTB4MDgwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9QTQkJMHgxMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBCQkweDIwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVECTB4NDAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9PUkRFUgkJMHg4MDAwCi0KLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX01HTVQJCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfQ1RMCQkweDAwMDQKLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX0RBVEEJCTB4MDAwOAotCi0vKiBtYW5hZ2VtZW50ICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQIAkweDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRCTB4MDAyMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRCTB4MDA0MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUAkweDAwNTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0JFQUNPTgkJMHgwMDgwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVElNCQkweDAwOTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DCTB4MDBBMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVVUSAkJMHgwMEIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgJCTB4MDBDMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OCQkweDAwRDAKLQotLyogY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMCQkweDAwQTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JUUwkJMHgwMEIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DVFMJCTB4MDBDMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQUNLCQkweDAwRDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGRU5ECQkweDAwRTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLCTB4MDBGMAotCi0vKiBkYXRhICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBCQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0sJMHgwMDEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGUE9MTAkweDAwMjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZBQ0tQT0xMCTB4MDAzMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDSwkJMHgwMDUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRlBPTEwJCTB4MDA2MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZBQ0tQT0xMCTB4MDA3MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEgICAgICAgIDB4MDA4MAotCi0jZGVmaW5lIElFRUU4MDIxMV9TQ1RMX0ZSQUcJCTB4MDAwRgotI2RlZmluZSBJRUVFODAyMTFfU0NUTF9TRVEJCTB4RkZGMAotCiAvKiBRT1MgY29udHJvbCAqLwogI2RlZmluZSBJRUVFODAyMTFfUUNUTF9USUQJCTB4MDAwRgogCiAvKiBkZWJ1ZyBtYWNyb3MgKi8KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiBleHRlcm4gdTMyIGllZWU4MDIxMV9kZWJ1Z19sZXZlbDsKICNkZWZpbmUgSUVFRTgwMjExX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKIGRvIHsgaWYgKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKQEAgLTEyOCw3ICs3NSw3IEBACiB7CiAJcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmCQkJCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiAKIC8qCiAgKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbToKQEAgLTE1Miw3ICs5OSw3IEBACiAgKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGllZWU4MDIxMV9kZWJ1Z19sZXZlbCBhcnJheS4KICAqCiAgKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaWVlZTgwMjExIHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgorICogQ09ORklHX0xJQklQV19ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KICAqCiAgKi8KIApAQCAtMjE3LDIzICsxNjQsNiBAQAogI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCiAjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKIAotLyogQWN0aW9uIGNhdGVnb3JpZXMgLSA4MDIuMTFoICovCi1lbnVtIGllZWU4MDIxMV9hY3Rpb25jYXRlZ29yaWVzIHsKLQlXTEFOX0FDVElPTl9TUEVDVFJVTV9NR01UID0gMCwKLQkvKiBSZXNlcnZlZCAxLTEyNyAgKi8KLQkvKiBFcnJvciAgICAxMjgtMjU1ICovCi19OwotCi0vKiBBY3Rpb24gZGV0YWlscyAtIDgwMi4xMWggKi8KLWVudW0gaWVlZTgwMjExX2FjdGlvbmRldGFpbHMgewotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX01FQVNVUkVfUkVRVUVTVCA9IDAsCi0JV0xBTl9BQ1RJT05fQ0FURUdPUllfTUVBU1VSRV9SRVBPUlQgPSAxLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX1RQQ19SRVFVRVNUID0gMiwKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9UUENfUkVQT1JUID0gMywKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9DSEFOTkVMX1NXSVRDSCA9IDQsCi0JLyogNSAtIDI1NSBSZXNlcnZlZCAqLwotfTsKLQogI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMICgxPDwwKQogI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSAoMTw8MSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFICgxPDwyKQpAQCAtNDExLDM3ICszNDEsNiBAQAogCiAjZGVmaW5lIEJFQUNPTl9QUk9CRV9TU0lEX0lEX1BPU0lUSU9OIDEyCiAKLS8qIE1hbmFnZW1lbnQgRnJhbWUgSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAqLwotZW51bSBpZWVlODAyMTFfbWZpZSB7Ci0JTUZJRV9UWVBFX1NTSUQgPSAwLAotCU1GSUVfVFlQRV9SQVRFUyA9IDEsCi0JTUZJRV9UWVBFX0ZIX1NFVCA9IDIsCi0JTUZJRV9UWVBFX0RTX1NFVCA9IDMsCi0JTUZJRV9UWVBFX0NGX1NFVCA9IDQsCi0JTUZJRV9UWVBFX1RJTSA9IDUsCi0JTUZJRV9UWVBFX0lCU1NfU0VUID0gNiwKLQlNRklFX1RZUEVfQ09VTlRSWSA9IDcsCi0JTUZJRV9UWVBFX0hPUF9QQVJBTVMgPSA4LAotCU1GSUVfVFlQRV9IT1BfVEFCTEUgPSA5LAotCU1GSUVfVFlQRV9SRVFVRVNUID0gMTAsCi0JTUZJRV9UWVBFX0NIQUxMRU5HRSA9IDE2LAotCU1GSUVfVFlQRV9QT1dFUl9DT05TVFJBSU5UID0gMzIsCi0JTUZJRV9UWVBFX1BPV0VSX0NBUEFCSUxJVFkgPSAzMywKLQlNRklFX1RZUEVfVFBDX1JFUVVFU1QgPSAzNCwKLQlNRklFX1RZUEVfVFBDX1JFUE9SVCA9IDM1LAotCU1GSUVfVFlQRV9TVVBQX0NIQU5ORUxTID0gMzYsCi0JTUZJRV9UWVBFX0NTQSA9IDM3LAotCU1GSUVfVFlQRV9NRUFTVVJFX1JFUVVFU1QgPSAzOCwKLQlNRklFX1RZUEVfTUVBU1VSRV9SRVBPUlQgPSAzOSwKLQlNRklFX1RZUEVfUVVJRVQgPSA0MCwKLQlNRklFX1RZUEVfSUJTU19ERlMgPSA0MSwKLQlNRklFX1RZUEVfRVJQX0lORk8gPSA0MiwKLQlNRklFX1RZUEVfUlNOID0gNDgsCi0JTUZJRV9UWVBFX1JBVEVTX0VYID0gNTAsCi0JTUZJRV9UWVBFX0dFTkVSSUMgPSAyMjEsCi0JTUZJRV9UWVBFX1FPU19QQVJBTUVURVIgPSAyMjIsCi19OwotCiBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8xYWRkciB7CiAJX19sZTE2IGZyYW1lX2N0bDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CkBAIC04ODcsNyArNzg2LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYzsKIAogCS8qIEJvb2trZWVwaW5nIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIGllZWVfc3RhdHM7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2dlbyBnZW87CkBAIC0xMTE4LDYgKzEwMTYsMTAgQEAKIC8qIGllZWU4MDIxMS5jICovCiBleHRlcm4gdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdik7CitleHRlcm4gaW50IGllZWU4MDIxMV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKKworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2FnZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKTsKIAogZXh0ZXJuIGludCBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDgyM2MyYmYuLjExNWI3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC0xNjkyLDcgKzE2OTIsMTMgQEAKIAl1MzIgbG9jazsKIAl1MzIgb3JkX2xlbiA9IHNpemVvZihsb2NrKTsKIAotCS8qIFF1aXRlIGlmIG1hbnVhbGx5IGRpc2FibGVkLiAqLworCS8qIEFnZSBzY2FuIGxpc3QgZW50cmllcyBmb3VuZCBiZWZvcmUgc3VzcGVuZCAqLworCWlmIChwcml2LT5zdXNwZW5kX3RpbWUpIHsKKwkJaWVlZTgwMjExX25ldHdvcmtzX2FnZShwcml2LT5pZWVlLCBwcml2LT5zdXNwZW5kX3RpbWUpOworCQlwcml2LT5zdXNwZW5kX3RpbWUgPSAwOworCX0KKworCS8qIFF1aWV0IGlmIG1hbnVhbGx5IGRpc2FibGVkLiAqLwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVykgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IFJhZGlvIGlzIGRpc2FibGVkIGJ5IE1hbnVhbCBEaXNhYmxlICIKIAkJCSAgICAgICAic3dpdGNoXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKQEAgLTE5MTAsNyArMTkxNiw4IEBACiB7CiAKICNkZWZpbmUgTUFDX0FTU09DSUFUSU9OX1JFQURfREVMQVkgKEhaKQotCWludCByZXQsIGxlbiwgZXNzaWRfbGVuOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGxlbiwgZXNzaWRfbGVuOwogCWNoYXIgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwogCXUzMiB0eHJhdGU7CiAJdTMyIGNoYW47CkBAIC0yMzg0LDEzICsyMzkxLDE0IEBACiAjZW5kaWYKIAogCXByaXYtPmZhdGFsX2Vycm9yID0gSVBXMjEwMF9FUlJfQzNfQ09SUlVQVElPTjsKLQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlwcml2LT5uZXRfZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAlzY2hlZHVsZV9yZXNldChwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXNyX3J4KHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwogCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0ID0gJnByaXYtPnJ4X2J1ZmZlcnNbaV07CiAKQEAgLTIzOTksMTQgKzI0MDcsMTQgQEAKIAlpZiAodW5saWtlbHkoc3RhdHVzLT5mcmFtZV9zaXplID4gc2tiX3RhaWxyb29tKHBhY2tldC0+c2tiKSkpIHsKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiBmcmFtZV9zaXplICgldSkgPiBza2JfdGFpbHJvb20gKCV1KSEiCiAJCQkgICAgICAgIiAgRHJvcHBpbmcuXG4iLAotCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsCisJCQkgICAgICAgZGV2LT5uYW1lLAogCQkJICAgICAgIHN0YXR1cy0+ZnJhbWVfc2l6ZSwgc2tiX3RhaWxyb29tKHBhY2tldC0+c2tiKSk7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKIAkJcmV0dXJuOwpAQCAtMjQzNiwxMCArMjQ0NCwxMCBAQAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHBhY2tldC0+c2tiLCBzdGF0cykpIHsKICNpZmRlZiBJUFcyMTAwX1JYX0RFQlVHCiAJCUlQV19ERUJVR19EUk9QKCIlczogTm9uIGNvbnN1bWVkIHBhY2tldDpcbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJcHJpbnRrX2J1ZihJUFdfRExfRFJPUCwgcGFja2V0X2RhdGEsIHN0YXR1cy0+ZnJhbWVfc2l6ZSk7CiAjZW5kaWYKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAKIAkJLyogaWVlZTgwMjExX3J4IGZhaWxlZCwgc28gaXQgZGlkbid0IGZyZWUgdGhlIFNLQiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShwYWNrZXQtPnNrYik7CkBAIC0yNDUwLDcgKzI0NTgsNyBAQAogCWlmICh1bmxpa2VseShpcHcyMTAwX2FsbG9jX3NrYihwcml2LCBwYWNrZXQpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIKIAkJICAgICAgICIlczogVW5hYmxlIHRvIGFsbG9jYXRlIFNLQiBvbnRvIFJCRCByaW5nIC0gZGlzYWJsaW5nICIKLQkJICAgICAgICJhZGFwdGVyLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCSAgICAgICAiYWRhcHRlci5cbiIsIGRldi0+bmFtZSk7CiAJCS8qIFRPRE86IHNjaGVkdWxlIGFkYXB0ZXIgc2h1dGRvd24gKi8KIAkJSVBXX0RFQlVHX0lORk8oIlRPRE86IFNodXRkb3duIGFkYXB0ZXIuLi5cbiIpOwogCX0KQEAgLTI0NjQsNiArMjQ3Miw3IEBACiBzdGF0aWMgdm9pZCBpc3JfcnhfbW9uaXRvcihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgaSwKIAkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJc3RydWN0IGlwdzIxMDBfc3RhdHVzICpzdGF0dXMgPSAmcHJpdi0+c3RhdHVzX3F1ZXVlLmRydltpXTsKIAlzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQgKnBhY2tldCA9ICZwcml2LT5yeF9idWZmZXJzW2ldOwogCkBAIC0yNDgxLDE1ICsyNDkwLDE1IEBACiAJCQkJc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSkpIHsKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiBmcmFtZV9zaXplICgldSkgPiBza2JfdGFpbHJvb20gKCV1KSEiCiAJCQkgICAgICAgIiAgRHJvcHBpbmcuXG4iLAotCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsCisJCQkgICAgICAgZGV2LT5uYW1lLAogCQkJICAgICAgIHN0YXR1cy0+ZnJhbWVfc2l6ZSwKIAkJCSAgICAgICBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgeworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC0yNDk4LDcgKzI1MDcsNyBAQAogCWlmICh1bmxpa2VseShwcml2LT5jb25maWcgJiBDRkdfQ1JDX0NIRUNLICYmCiAJCSAgICAgc3RhdHVzLT5mbGFncyAmIElQV19TVEFUVVNfRkxBR19DUkNfRVJST1IpKSB7CiAJCUlQV19ERUJVR19SWCgiQ1JDIGVycm9yIGluIHBhY2tldC4gIERyb3BwaW5nLlxuIik7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTIwLDcgKzI1MjksNyBAQAogCXNrYl9wdXQocGFja2V0LT5za2IsIHN0YXR1cy0+ZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCQkvKiBpZWVlODAyMTFfcnggZmFpbGVkLCBzbyBpdCBkaWRuJ3QgZnJlZSB0aGUgU0tCICovCiAJCWRldl9rZnJlZV9za2JfYW55KHBhY2tldC0+c2tiKTsKQEAgLTI1MzEsNyArMjU0MCw3IEBACiAJaWYgKHVubGlrZWx5KGlwdzIxMDBfYWxsb2Nfc2tiKHByaXYsIHBhY2tldCkpKSB7CiAJCUlQV19ERUJVR19XQVJOSU5HKAogCQkJIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgU0tCIG9udG8gUkJEIHJpbmcgLSBkaXNhYmxpbmcgIgotCQkJImFkYXB0ZXIuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCSJhZGFwdGVyLlxuIiwgZGV2LT5uYW1lKTsKIAkJLyogVE9ETzogc2NoZWR1bGUgYWRhcHRlciBzaHV0ZG93biAqLwogCQlJUFdfREVCVUdfSU5GTygiVE9ETzogU2h1dGRvd24gYWRhcHRlci4uLlxuIik7CiAJfQpAQCAtMzMzMyw3ICszMzQyLDcgQEAKIAogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkgewogCQlJUFdfREVCVUdfSU5GTygiQ2FuIG5vdCB0cmFuc21pdCB3aGVuIG5vdCBjb25uZWN0ZWQuXG4iKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJcHJpdi0+bmV0X2Rldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KQEAgLTQwNTgsNyArNDA2Nyw3IEBACiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXUzMiBjaGFuID0gMDsKIAljaGFyICpvdXQgPSBidWY7Ci0JaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWludCByZXQ7CiAKIAlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKQEAgLTU4MjksNyArNTgzOCw3IEBACiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQlwcml2LT5pZWVlLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKQEAgLTU5OTksNiArNjAwOCwxNyBAQAogCiBzdGF0aWMgdm9pZCBpcHcyMTAwX2lycV90YXNrbGV0KHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwdzIxMDBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gaXB3MjEwMF9vcGVuLAorCS5uZG9fc3RvcAkJPSBpcHcyMTAwX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19pbml0CQk9IGlwdzIxMDBfbmV0X2luaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGlwdzIxMDBfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGlwdzIxMDBfc2V0X2FkZHJlc3MsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBMb29rIGludG8gdXNpbmcgbmV0ZGV2IGRlc3RydWN0b3IgdG8gc2h1dGRvd24gaWVlZTgwMjExPyAqLwogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwdzIxMDBfYWxsb2NfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LApAQCAtNjAyMywxNSArNjA0MywxMSBAQAogCXByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSA9IC0yMDsKIAlwcml2LT5pZWVlLT53b3JzdF9yc3NpID0gLTg1OwogCi0JZGV2LT5vcGVuID0gaXB3MjEwMF9vcGVuOwotCWRldi0+c3RvcCA9IGlwdzIxMDBfY2xvc2U7Ci0JZGV2LT5pbml0ID0gaXB3MjEwMF9uZXRfaW5pdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaXB3MjEwMF9uZXRkZXZfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmaXB3MjEwMF9ldGh0b29sX29wczsKLQlkZXYtPnR4X3RpbWVvdXQgPSBpcHcyMTAwX3R4X3RpbWVvdXQ7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpcHcyMTAwX3d4X2hhbmRsZXJfZGVmOwogCXByaXYtPndpcmVsZXNzX2RhdGEuaWVlZTgwMjExID0gcHJpdi0+aWVlZTsKIAlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGlwdzIxMDBfc2V0X2FkZHJlc3M7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDMgKiBIWjsKIAlkZXYtPmlycSA9IDA7CiAKQEAgLTY0MTQsNiArNjQzMCw4IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QzaG90KTsKIAorCXByaXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC02NDU3LDYgKzY0NzUsOCBAQAogCSAqIHRoZSBxdWV1ZSBvZiBuZWVkZWQgKi8KIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAKKwlwcml2LT5zdXNwZW5kX3RpbWUgPSBnZXRfc2Vjb25kcygpIC0gcHJpdi0+c3VzcGVuZF9hdDsKKwogCS8qIEJyaW5nIHRoZSBkZXZpY2UgYmFjayB1cCAqLwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSkKIAkJaXB3MjEwMF91cChwcml2LCAwKTsKQEAgLTcxMjIsNyArNzE0Miw3IEBACiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IHZhbDsKLQlpbnQgbGVuID0gc2l6ZW9mKHZhbCk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNpemVvZih2YWwpOwogCWludCBlcnIgPSAwOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0VOQUJMRUQpIHx8CkBAIC04Mjk3LDcgKzgzMTcsNyBAQAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwdzIxMDBfcHJpdiwgd3hfZXZlbnRfd29yay53b3JrKTsKIAl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JaW50IGxlbiA9IEVUSF9BTEVOOworCXVuc2lnbmVkIGludCBsZW4gPSBFVEhfQUxFTjsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU1RPUFBJTkcpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKaW5kZXggYmJmMWRkYy4uZjE4M2Q5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKQEAgLTM5LDggKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CS8vIG5ldyBkcml2ZXIgQVBJCiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+Ci0KICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogI2VuZGlmCkBAIC00OCw2ICs0Niw4IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAorI2luY2x1ZGUgImllZWU4MDIxMS5oIgorCiBzdHJ1Y3QgaXB3MjEwMF9wcml2Owogc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0Owogc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0OwpAQCAtNTkxLDYgKzU5MSwxMCBAQAogCiAJaW50IHVzZXJfcmVxdWVzdGVkX3NjYW47CiAKKwkvKiBUcmFjayB0aW1lIGluIHN1c3BlbmQgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX3RpbWU7CisKIAl1MzIgaW50ZXJydXB0czsKIAlpbnQgdHhfaW50ZXJydXB0czsKIAlpbnQgcnhfaW50ZXJydXB0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggNjI1ZjJjZi4uYjM0NDk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTMwMSw4OCArMzAxLDEwMiBAQAogfQogCiAvKiA4LWJpdCBkaXJlY3Qgd3JpdGUgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCkgd3JpdGViKCh2YWwpLCAoaXB3KS0+aHdfYmFzZSArIChvZnMpKQorc3RhdGljIGlubGluZSB2b2lkIF9pcHdfd3JpdGU4KHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcywKKwkJdTggdmFsKQoreworCXdyaXRlYih2YWwsIGlwdy0+aHdfYmFzZSArIG9mcyk7Cit9CiAKIC8qIDgtYml0IGRpcmVjdCB3cml0ZSAoZm9yIGxvdyA0SyBvZiBTUkFNL3JlZ3MpLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KICNkZWZpbmUgaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSBkbyB7IFwKLSBJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3Q4KDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAotIF9pcHdfd3JpdGU4KGlwdywgb2ZzLCB2YWwpOyBcCi0gfSB3aGlsZSAoMCkKKwlJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3Q4KDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIFwKKwkJCV9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAorCV9pcHdfd3JpdGU4KGlwdywgb2ZzLCB2YWwpOyBcCit9IHdoaWxlICgwKQogCiAvKiAxNi1iaXQgZGlyZWN0IHdyaXRlIChsb3cgNEspICovCi0jZGVmaW5lIF9pcHdfd3JpdGUxNihpcHcsIG9mcywgdmFsKSB3cml0ZXcoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTE2KHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcywKKwkJdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBpcHctPmh3X2Jhc2UgKyBvZnMpOworfQogCiAvKiAxNi1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfd3JpdGUxNihpcHcsIG9mcywgdmFsKSBcCi0gSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MTYoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpCisjZGVmaW5lIGlwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDE2KDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIFwKKwkJCV9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAorCV9pcHdfd3JpdGUxNihpcHcsIG9mcywgdmFsKTsgXAorfSB3aGlsZSAoMCkKIAogLyogMzItYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3dyaXRlMzIoaXB3LCBvZnMsIHZhbCkgd3JpdGVsKCh2YWwpLCAoaXB3KS0+aHdfYmFzZSArIChvZnMpKQorc3RhdGljIGlubGluZSB2b2lkIF9pcHdfd3JpdGUzMihzdHJ1Y3QgaXB3X3ByaXYgKmlwdywgdW5zaWduZWQgbG9uZyBvZnMsCisJCXUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgaXB3LT5od19iYXNlICsgb2ZzKTsKK30KIAogLyogMzItYml0IGRpcmVjdCB3cml0ZSAoZm9yIGxvdyA0SyBvZiBTUkFNL3JlZ3MpLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLSNkZWZpbmUgaXB3X3dyaXRlMzIoaXB3LCBvZnMsIHZhbCkgXAotIElQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDMyKDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAotIF9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKQorI2RlZmluZSBpcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSBkbyB7IFwKKwlJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3QzMigweCUwOFgsIDB4JTA4WClcbiIsIF9fRklMRV9fLCBcCisJCQlfX0xJTkVfXywgKHUzMikob2ZzKSwgKHUzMikodmFsKSk7IFwKKwlfaXB3X3dyaXRlMzIoaXB3LCBvZnMsIHZhbCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDgtYml0IGRpcmVjdCByZWFkIChsb3cgNEspICovCi0jZGVmaW5lIF9pcHdfcmVhZDgoaXB3LCBvZnMpIHJlYWRiKChpcHcpLT5od19iYXNlICsgKG9mcykpCi0KLS8qIDgtYml0IGRpcmVjdCByZWFkIChsb3cgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLXN0YXRpYyBpbmxpbmUgdTggX19pcHdfcmVhZDgoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1OCBfaXB3X3JlYWQ4KHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcykKIHsKLQlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2RpcmVjdDgoMHglMDhYKVxuIiwgZiwgbCwgKHUzMikgKG9mcykpOwotCXJldHVybiBfaXB3X3JlYWQ4KGlwdywgb2ZzKTsKKwlyZXR1cm4gcmVhZGIoaXB3LT5od19iYXNlICsgb2ZzKTsKIH0KIAogLyogYWxpYXMgdG8gOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SyBvZiBTUkFNL3JlZ3MpLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLSNkZWZpbmUgaXB3X3JlYWQ4KGlwdywgb2ZzKSBfX2lwd19yZWFkOChfX0ZJTEVfXywgX19MSU5FX18sIGlwdywgb2ZzKQorI2RlZmluZSBpcHdfcmVhZDgoaXB3LCBvZnMpICh7IFwKKwlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2RpcmVjdDgoMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCQkodTMyKShvZnMpKTsgXAorCV9pcHdfcmVhZDgoaXB3LCBvZnMpOyBcCit9KQogCiAvKiAxNi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkMTYoaXB3LCBvZnMpIHJlYWR3KChpcHcpLT5od19iYXNlICsgKG9mcykpCi0KLS8qIDE2LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi1zdGF0aWMgaW5saW5lIHUxNiBfX2lwd19yZWFkMTYoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MTYgX2lwd19yZWFkMTYoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MTYoMHglMDhYKVxuIiwgZiwgbCwgKHUzMikgKG9mcykpOwotCXJldHVybiBfaXB3X3JlYWQxNihpcHcsIG9mcyk7CisJcmV0dXJuIHJlYWR3KGlwdy0+aHdfYmFzZSArIG9mcyk7CiB9CiAKIC8qIGFsaWFzIHRvIDE2LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDE2KGlwdywgb2ZzKSBfX2lwd19yZWFkMTYoX19GSUxFX18sIF9fTElORV9fLCBpcHcsIG9mcykKKyNkZWZpbmUgaXB3X3JlYWQxNihpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MTYoMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCQkodTMyKShvZnMpKTsgXAorCV9pcHdfcmVhZDE2KGlwdywgb2ZzKTsgXAorfSkKIAogLyogMzItYml0IGRpcmVjdCByZWFkIChsb3cgNEspICovCi0jZGVmaW5lIF9pcHdfcmVhZDMyKGlwdywgb2ZzKSByZWFkbCgoaXB3KS0+aHdfYmFzZSArIChvZnMpKQotCi0vKiAzMi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotc3RhdGljIGlubGluZSB1MzIgX19pcHdfcmVhZDMyKGNoYXIgKmYsIHUzMiBsLCBzdHJ1Y3QgaXB3X3ByaXYgKmlwdywgdTMyIG9mcykKK3N0YXRpYyBpbmxpbmUgdTMyIF9pcHdfcmVhZDMyKHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcykKIHsKLQlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2RpcmVjdDMyKDB4JTA4WClcbiIsIGYsIGwsICh1MzIpIChvZnMpKTsKLQlyZXR1cm4gX2lwd19yZWFkMzIoaXB3LCBvZnMpOworCXJldHVybiByZWFkbChpcHctPmh3X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBhbGlhcyB0byAzMi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SyBvZiBTUkFNL3JlZ3MpLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLSNkZWZpbmUgaXB3X3JlYWQzMihpcHcsIG9mcykgX19pcHdfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgaXB3LCBvZnMpCisjZGVmaW5lIGlwd19yZWFkMzIoaXB3LCBvZnMpICh7IFwKKwlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2RpcmVjdDMyKDB4JTA4WClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgXAorCQkJKHUzMikob2ZzKSk7IFwKKwlfaXB3X3JlYWQzMihpcHcsIG9mcyk7IFwKK30pCiAKLS8qIG11bHRpLWJ5dGUgcmVhZCAoYWJvdmUgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KIHN0YXRpYyB2b2lkIF9pcHdfcmVhZF9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKiwgdTMyLCB1OCAqLCBpbnQpOwotc3RhdGljIGlubGluZSB2b2lkIF9faXB3X3JlYWRfaW5kaXJlY3QoY29uc3QgY2hhciAqZiwgaW50IGwsCi0JCQkJICAgICAgIHN0cnVjdCBpcHdfcHJpdiAqYSwgdTMyIGIsIHU4ICogYywgaW50IGQpCi17Ci0JSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9pbmRpcmVjdCgweCUwOFgpICVkIGJ5dGVzXG4iLCBmLCBsLCAodTMyKSAoYiksCi0JCSAgICAgZCk7Ci0JX2lwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpOwotfQotCiAvKiBhbGlhcyB0byBtdWx0aS1ieXRlIHJlYWQgKFNSQU0vcmVncyBhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSBfX2lwd19yZWFkX2luZGlyZWN0KF9fRklMRV9fLCBfX0xJTkVfXywgYSwgYiwgYywgZCkKKyNkZWZpbmUgaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCkgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfaW5kaXJlY3QoMHglMDhYKSAldSBieXRlc1xuIiwgX19GSUxFX18sIFwKKwkJCV9fTElORV9fLCAodTMyKShiKSwgKHUzMikoZCkpOyBcCisJX2lwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpOyBcCit9KQogCiAvKiBhbGlhcyB0byBtdWx0aS1ieXRlIHJlYWQgKFNSQU0vcmVncyBhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogc3RhdGljIHZvaWQgX2lwd193cml0ZV9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1OCAqIGRhdGEsCiAJCQkJaW50IG51bSk7Ci0jZGVmaW5lIGlwd193cml0ZV9pbmRpcmVjdChhLCBiLCBjLCBkKSBcCi0JSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfaW5kaXJlY3QoMHglMDhYKSAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCAodTMyKShiKSwgZCk7IFwKLQlfaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpCisjZGVmaW5lIGlwd193cml0ZV9pbmRpcmVjdChhLCBiLCBjLCBkKSBkbyB7IFwKKwlJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9pbmRpcmVjdCgweCUwOFgpICV1IGJ5dGVzXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKGIpLCAodTMyKShkKSk7IFwKKwlfaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpOyBcCit9IHdoaWxlICgwKQogCiAvKiAzMi1iaXQgaW5kaXJlY3Qgd3JpdGUgKGFib3ZlIDRLKSAqLwogc3RhdGljIHZvaWQgX2lwd193cml0ZV9yZWczMihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSkKQEAgLTc3MTcsMjIgKzc3MzEsMjMgQEAKIAkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCS8qIFdlIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgSFcsIHNvIHN0b3AgdGhlIHdhdGNoZG9nICovCi0JcHJpdi0+bmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUKIAkgKiBpbnRlcmZhY2UgaXMgb3BlbiAqLwogCWlmICh1bmxpa2VseSgobGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkgKyBJUFdfUlhfRlJBTUVfU0laRSkgPgogCQkgICAgIHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkISBPaCBubyFcbiIpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKIAkJcmV0dXJuOwpAQCAtNzc1NCw3ICs3NzY5LDcgQEAKIAkJaXB3X3JlYnVpbGRfZGVjcnlwdGVkX3NrYihwcml2LCByeGItPnNrYik7CiAKIAlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCByeGItPnNrYiwgc3RhdHMpKQotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAllbHNlIHsJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCiAJCXJ4Yi0+c2tiID0gTlVMTDsKIAkJX19pcHdfbGVkX2FjdGl2aXR5X29uKHByaXYpOwpAQCAtNzc2Niw2ICs3NzgxLDcgQEAKIAkJCQkJICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCiAJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXB3X3J4X2ZyYW1lICpmcmFtZSA9ICZwa3QtPnUuZnJhbWU7CiAKQEAgLTc3ODMsMTggKzc3OTksMTggQEAKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKTsKIAogCS8qIFdlIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgSFcsIHNvIHN0b3AgdGhlIHdhdGNoZG9nICovCi0JcHJpdi0+bmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUKIAkgKiBpbnRlcmZhY2UgaXMgb3BlbiAqLwogCWlmICh1bmxpa2VseSgobGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkgKyBJUFdfUlhfRlJBTUVfU0laRSkgPgogCQkgICAgIHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkISBPaCBubyFcbiIpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKIAkJcmV0dXJuOwpAQCAtNzgwNCw3ICs3ODIwLDcgQEAKIAkgKiB0aGF0IG5vdyAqLwogCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CiAJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCi0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHRvbyBsYXJnZSBwYWNrZXQgaW4gbW9uaXRvclxuIik7CiAJCXJldHVybjsKQEAgLTc5MTAsNyArNzkyNiw3IEBACiAJSVBXX0RFQlVHX1JYKCJSeCBwYWNrZXQgb2YgJWQgYnl0ZXMuXG4iLCByeGItPnNrYi0+bGVuKTsKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCi0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWVsc2UgewkJCS8qIGllZWU4MDIxMV9yeCBzdWNjZWVkZWQsIHNvIGl0IG5vdyBvd25zIHRoZSBTS0IgKi8KIAkJcnhiLT5za2IgPSBOVUxMOwogCQkvKiBubyBMRUQgZHVyaW5nIGNhcHR1cmUgKi8KQEAgLTc5NDIsNiArNzk1OCw3IEBACiAJCQkJICAgICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPnByb21fbmV0X2RldjsKIAlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGlwd19yeF9mcmFtZSAqZnJhbWUgPSAmcGt0LT51LmZyYW1lOwogCXN0cnVjdCBpcHdfcnRfaGRyICppcHdfcnQ7CkBAIC03OTY0LDE3ICs3OTgxLDE3IEBACiAJCXJldHVybjsKIAogCS8qIFdlIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgSFcsIHNvIHN0b3AgdGhlIHdhdGNoZG9nICovCi0JcHJpdi0+cHJvbV9uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAlpZiAodW5saWtlbHkoKGxlbiArIElQV19SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7Ci0JCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCUlQV19ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkISBPaCBubyFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUgaW50ZXJmYWNlIGlzIG9wZW4gKi8KLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkpIHsKLQkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKSB7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc5ODMsNyArODAwMCw3IEBACiAJICogdGhhdCBub3cgKi8KIAlpZiAobGVuID4gSVBXX1JYX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSkgewogCQkvKiBGSVhNRTogU2hvdWxkIGFsbG9jIGJpZ2dlciBza2IgaW5zdGVhZCAqLwotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyB0b28gbGFyZ2UgcGFja2V0IGluIG1vbml0b3JcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtODExNSw3ICs4MTMyLDcgQEAKIAlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHNrYi0+bGVuKTsKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgc2tiLCBzdGF0cykpIHsKLQkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiB9CkBAIC04MjcyLDcgKzgyODksNyBAQAogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCiAJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxMV9TVEFUUyk7CisJCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxMV9TVEFUUyk7CiAJCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2YocnhiLT5za2ItPmNiKSk7CiAJCW5ldGlmX3J4KHNrYik7CiAJCXJ4Yi0+c2tiID0gTlVMTDsKQEAgLTgzOTksNyArODQxNiw3IEBACiAJCQkJCUlQV19ERUJVR19EUk9QCiAJCQkJCSAgICAoIlJlY2VpdmVkIHBhY2tldCBpcyB0b28gc21hbGwuICIKIAkJCQkJICAgICAiRHJvcHBpbmcuXG4iKTsKLQkJCQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCXByaXYtPm5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTEwNDcwLDE1ICsxMDQ4Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppcHdfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlwcml2LT5pZWVlLT5zdGF0cy50eF9wYWNrZXRzID0gcHJpdi0+dHhfcGFja2V0czsKLQlwcml2LT5pZWVlLT5zdGF0cy5yeF9wYWNrZXRzID0gcHJpdi0+cnhfcGFja2V0czsKLQlyZXR1cm4gJnByaXYtPmllZWUtPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCkBAIC0xMTIyNCw2ICsxMTIzMiwxMiBAQAogewogCWludCByYywgaSwgajsKIAorCS8qIEFnZSBzY2FuIGxpc3QgZW50cmllcyBmb3VuZCBiZWZvcmUgc3VzcGVuZCAqLworCWlmIChwcml2LT5zdXNwZW5kX3RpbWUpIHsKKwkJaWVlZTgwMjExX25ldHdvcmtzX2FnZShwcml2LT5pZWVlLCBwcml2LT5zdXNwZW5kX3RpbWUpOworCQlwcml2LT5zdXNwZW5kX3RpbWUgPSAwOworCX0KKwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTE1MTUsMTEgKzExNTI5LDE0IEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwd19wcm9tX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcHdfcHJvbV9wcml2ICpwcm9tX3ByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiAmcHJvbV9wcml2LT5pZWVlLT5zdGF0czsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3X3Byb21fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGlwd19wcm9tX29wZW4sCisJLm5kb19zdG9wCQk9IGlwd19wcm9tX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCBpcHdfcHJvbV9hbGxvYyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CkBAIC0xMTU0MCwxMCArMTE1NTcsNyBAQAogCW1lbWNweShwcml2LT5wcm9tX25ldF9kZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJcHJpdi0+cHJvbV9uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQlwcml2LT5wcm9tX25ldF9kZXYtPm9wZW4gPSBpcHdfcHJvbV9vcGVuOwotCXByaXYtPnByb21fbmV0X2Rldi0+c3RvcCA9IGlwd19wcm9tX3N0b3A7Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5nZXRfc3RhdHMgPSBpcHdfcHJvbV9nZXRfc3RhdHM7Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQ7CisJcHJpdi0+cHJvbV9uZXRfZGV2LT5uZXRkZXZfb3BzID0gJmlwd19wcm9tX25ldGRldl9vcHM7CiAKIAlwcml2LT5wcm9tX3ByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX01PTklUT1I7CiAJU0VUX05FVERFVl9ERVYocHJpdi0+cHJvbV9uZXRfZGV2LCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKQEAgLTExNTcxLDYgKzExNTg1LDE3IEBACiAKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwd19uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBpcHdfbmV0X2luaXQsCisJLm5kb19vcGVuCQk9IGlwd19uZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gaXB3X25ldF9zdG9wLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXB3X25ldF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlwd19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTExNjcyLDEyICsxMTY5Nyw3IEBACiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKLQluZXRfZGV2LT5vcGVuID0gaXB3X25ldF9vcGVuOwotCW5ldF9kZXYtPnN0b3AgPSBpcHdfbmV0X3N0b3A7Ci0JbmV0X2Rldi0+aW5pdCA9IGlwd19uZXRfaW5pdDsKLQluZXRfZGV2LT5nZXRfc3RhdHMgPSBpcHdfbmV0X2dldF9zdGF0czsKLQluZXRfZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzczsKKwluZXRfZGV2LT5uZXRkZXZfb3BzID0gJmlwd19uZXRkZXZfb3BzOwogCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+aWVlZS0+c3B5X2RhdGE7CiAJbmV0X2Rldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwogCW5ldF9kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmlwd193eF9oYW5kbGVyX2RlZjsKQEAgLTExODI0LDYgKzExODQ0LDggQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CiAKKwlwcml2LT5zdXNwZW5kX2F0ID0gZ2V0X3NlY29uZHMoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTg1OSw2ICsxMTg4MSw4IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAorCXByaXYtPnN1c3BlbmRfdGltZSA9IGdldF9zZWNvbmRzKCkgLSBwcml2LT5zdXNwZW5kX2F0OworCiAJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT51cCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmgKaW5kZXggMjc3YjI3NC4uMDVlOGNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmgKQEAgLTQ5LDEzICs0OSwxNCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiaXB3MjIwMCIKIAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIC8qIEF1dGhlbnRpY2F0aW9uICBhbmQgQXNzb2NpYXRpb24gU3RhdGVzICovCiBlbnVtIGNvbm5lY3Rpb25fbWFuYWdlcl9hc3NvY19zdGF0ZXMgewogCUNNQVNfSU5JVCA9IDAsCkBAIC0xMzQ2LDYgKzEzNDcsMTAgQEAKIAogCXM4IHR4X3Bvd2VyOwogCisJLyogVHJhY2sgdGltZSBpbiBzdXNwZW5kICovCisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF90aW1lOworCiAjaWZkZWYgQ09ORklHX1BNCiAJdTMyIHBtX3N0YXRlWzE2XTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfZ2VvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYwppbmRleCA5NjBhZDEzLi45ZGZiYjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKIAogaW50IGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCBjaGFubmVsKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfbW9kdWxlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwppbmRleCBhMmY1NjE2Li45MmEyNjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTiAiODAyLjExIGRhdGEvbWFuYWdlbWVudC9jb250cm9sIHN0YWNrIgogI2RlZmluZSBEUlZfTkFNRSAgICAgICAgImllZWU4MDIxMSIKQEAgLTEwNSw2ICsxMDUsMjEgQEAKIAlpZWVlLT5uZXR3b3JrcyA9IE5VTEw7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2FnZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGFnZV9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcyhhZ2Vfc2VjcyAqIE1TRUNfUEVSX1NFQyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0d29yaywgJmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkgeworCQluZXR3b3JrLT5sYXN0X3NjYW5uZWQgLT0gYWdlX2ppZmZpZXM7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX25ldHdvcmtzX2FnZSk7CisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWludCBpOwpAQCAtMTE2LDIwICsxMzEsMTQgQEAKIAkJCSAgICAgICZpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdCk7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSUVFRTgwMjExX0RBVEFfTEVOKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCXJldHVybiAwOwogfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmllZWU4MDIxMV9nZW5lcmljX2dldF9zdGF0cygKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmllZWUtPnN0YXRzOwotfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2hhbmdlX210dSk7CiAKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KQogewpAQCAtMTQ1LDEyICsxNTQsMTAgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCWllZWUgPSBuZXRkZXZfcHJpdihkZXYpOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV94bWl0OwogCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCi0JLyogRHJpdmVycyBhcmUgZnJlZSB0byBvdmVycmlkZSB0aGlzIGlmIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uCi0JICogZG9lcyBub3QgbWVldCB0aGVpciBuZWVkcy4gKi8KLQlkZXYtPmdldF9zdGF0cyA9IGllZWU4MDIxMV9nZW5lcmljX2dldF9zdGF0czsKKyNlbmRpZgogCiAJaWVlZS0+ZGV2ID0gZGV2OwogCkBAIC0yMDYsNyArMjEzLDcgQEAKIAlmcmVlX25ldGRldihkZXYpOwogfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7CiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsID0gMDsKQEAgLTIzNywxMSArMjQ0LDExIEBACiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGxlbik7CiB9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogc3RhdGljIGludCBfX2luaXQgaWVlZTgwMjExX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAogCWllZWU4MDIxMV9kZWJ1Z19sZXZlbCA9IGRlYnVnOwpAQCAtMjYxLDcgKzI2OCw3IEBACiAJZS0+cmVhZF9wcm9jID0gc2hvd19kZWJ1Z19sZXZlbDsKIAllLT53cml0ZV9wcm9jID0gc3RvcmVfZGVidWdfbGV2ZWw7CiAJZS0+ZGF0YSA9IE5VTEw7Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfREVTQ1JJUFRJT04gIiwgIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgRFJWX0NPUFlSSUdIVCAiXG4iKTsKQEAgLTI3MSwyMCArMjc4LDIwIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZWVlODAyMTFfZXhpdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9wcm9jKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIGllZWU4MDIxMV9wcm9jKTsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKIAkJaWVlZTgwMjExX3Byb2MgPSBOVUxMOwogCX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogbW9kdWxlX2V4aXQoaWVlZTgwMjExX2V4aXQpOwogbW9kdWxlX2luaXQoaWVlZTgwMjExX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKaW5kZXggOWM2N2RmYS4uZGFlNGI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCkBAIC0zMyw3ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKworI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTMzNCw3ICszMzUsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJc2l6ZV90IGhkcmxlbjsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlLCBzYzsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGZyYWc7CiAJdTggKnBheWxvYWQ7CiAJdTE2IGV0aGVydHlwZTsKQEAgLTM1Myw4ICszNTMsNiBAQAogCWludCBjYW5fYmVfZGVjcnlwdGVkID0gMDsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKLQlzdGF0cyA9ICZpZWVlLT5zdGF0czsKLQogCWlmIChza2ItPmxlbiA8IDEwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTS0IgbGVuZ3RoIDwgMTBcbiIsIGRldi0+bmFtZSk7CiAJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTQxMSw4ICs0MDksOCBAQAogI2VuZGlmCiAKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJaWVlZTgwMjExX21vbml0b3JfcngoaWVlZSwgc2tiLCByeF9zdGF0cyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTc2OCw4ICs3NjYsOCBAQAogCX0KICNlbmRpZgogCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogI2lmZGVmIE5PVF9ZRVQKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUiAmJiAhd2RzICYmIGllZWUtPmFwLT5icmlkZ2VfcGFja2V0cykgewpAQCAtODExLDcgKzgwOSw3IEBACiAJCQkgKiBpbiBvdXIgc3RhdHMuICovCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUAogCQkJICAgICgiUlg6IG5ldGlmX3J4IGRyb3BwZWQgdGhlIHBhY2tldFxuIik7Ci0JCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCX0KIAl9CiAKQEAgLTgyMyw3ICs4MjEsNyBAQAogCXJldHVybiAxOwogCiAgICAgICByeF9kcm9wcGVkOgotCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAKIAkvKiBSZXR1cm5pbmcgMCBpbmRpY2F0ZXMgdG8gY2FsbGVyIHRoYXQgd2UgaGF2ZSBub3QgaGFuZGxlZCB0aGUgU0tCLS0KIAkgKiBzbyBpdCBpcyBzdGlsbCBhbGxvY2F0ZWQgYW5kIGNhbiBiZSB1c2VkIGFnYWluIGJ5IHVuZGVybHlpbmcKQEAgLTkxOCw3ICs5MTYsNyBAQAogCiBkcm9wX2ZyZWU6CiAJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQlpZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJaWVlZS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJcmV0dXJuOwogfQogCkBAIC0xMDc5LDM3ICsxMDc3LDM3IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotI2RlZmluZSBNRklFX1NUUklORyh4KSBjYXNlIE1GSUVfVFlQRV8gIyN4OiByZXR1cm4gI3gKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCisjZGVmaW5lIE1GSUVfU1RSSU5HKHgpIGNhc2UgV0xBTl9FSURfICMjeDogcmV0dXJuICN4CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfaW5mb19lbGVtZW50X3N0cmluZyh1MTYgaWQpCiB7CiAJc3dpdGNoIChpZCkgewogCQlNRklFX1NUUklORyhTU0lEKTsKLQkJTUZJRV9TVFJJTkcoUkFURVMpOwotCQlNRklFX1NUUklORyhGSF9TRVQpOwotCQlNRklFX1NUUklORyhEU19TRVQpOwotCQlNRklFX1NUUklORyhDRl9TRVQpOworCQlNRklFX1NUUklORyhTVVBQX1JBVEVTKTsKKwkJTUZJRV9TVFJJTkcoRkhfUEFSQU1TKTsKKwkJTUZJRV9TVFJJTkcoRFNfUEFSQU1TKTsKKwkJTUZJRV9TVFJJTkcoQ0ZfUEFSQU1TKTsKIAkJTUZJRV9TVFJJTkcoVElNKTsKLQkJTUZJRV9TVFJJTkcoSUJTU19TRVQpOworCQlNRklFX1NUUklORyhJQlNTX1BBUkFNUyk7CiAJCU1GSUVfU1RSSU5HKENPVU5UUlkpOwotCQlNRklFX1NUUklORyhIT1BfUEFSQU1TKTsKLQkJTUZJRV9TVFJJTkcoSE9QX1RBQkxFKTsKKwkJTUZJRV9TVFJJTkcoSFBfUEFSQU1TKTsKKwkJTUZJRV9TVFJJTkcoSFBfVEFCTEUpOwogCQlNRklFX1NUUklORyhSRVFVRVNUKTsKIAkJTUZJRV9TVFJJTkcoQ0hBTExFTkdFKTsKLQkJTUZJRV9TVFJJTkcoUE9XRVJfQ09OU1RSQUlOVCk7Ci0JCU1GSUVfU1RSSU5HKFBPV0VSX0NBUEFCSUxJVFkpOworCQlNRklFX1NUUklORyhQV1JfQ09OU1RSQUlOVCk7CisJCU1GSUVfU1RSSU5HKFBXUl9DQVBBQklMSVRZKTsKIAkJTUZJRV9TVFJJTkcoVFBDX1JFUVVFU1QpOwogCQlNRklFX1NUUklORyhUUENfUkVQT1JUKTsKLQkJTUZJRV9TVFJJTkcoU1VQUF9DSEFOTkVMUyk7Ci0JCU1GSUVfU1RSSU5HKENTQSk7CisJCU1GSUVfU1RSSU5HKFNVUFBPUlRFRF9DSEFOTkVMUyk7CisJCU1GSUVfU1RSSU5HKENIQU5ORUxfU1dJVENIKTsKIAkJTUZJRV9TVFJJTkcoTUVBU1VSRV9SRVFVRVNUKTsKIAkJTUZJRV9TVFJJTkcoTUVBU1VSRV9SRVBPUlQpOwogCQlNRklFX1NUUklORyhRVUlFVCk7CiAJCU1GSUVfU1RSSU5HKElCU1NfREZTKTsKIAkJTUZJRV9TVFJJTkcoRVJQX0lORk8pOwogCQlNRklFX1NUUklORyhSU04pOwotCQlNRklFX1NUUklORyhSQVRFU19FWCk7CisJCU1GSUVfU1RSSU5HKEVYVF9TVVBQX1JBVEVTKTsKIAkJTUZJRV9TVFJJTkcoR0VORVJJQyk7CiAJCU1GSUVfU1RSSU5HKFFPU19QQVJBTUVURVIpOwogCWRlZmF1bHQ6CkBAIC0xMTI0LDcgKzExMjIsNyBAQAogewogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAJdTggaTsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCWNoYXIgcmF0ZXNfc3RyWzY0XTsKIAljaGFyICpwOwogI2VuZGlmCkBAIC0xMTQ0LDcgKzExNDIsNyBAQAogCQl9CiAKIAkJc3dpdGNoIChpbmZvX2VsZW1lbnQtPmlkKSB7Ci0JCWNhc2UgTUZJRV9UWVBFX1NTSUQ6CisJCWNhc2UgV0xBTl9FSURfU1NJRDoKIAkJCW5ldHdvcmstPnNzaWRfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuLAogCQkJCQkJKHU4KSBJV19FU1NJRF9NQVhfU0laRSk7CiAJCQltZW1jcHkobmV0d29yay0+c3NpZCwgaW5mb19lbGVtZW50LT5kYXRhLApAQCAtMTE1MywyMSArMTE1MSwyMSBAQAogCQkJCW1lbXNldChuZXR3b3JrLT5zc2lkICsgbmV0d29yay0+c3NpZF9sZW4sIDAsCiAJCQkJICAgICAgIElXX0VTU0lEX01BWF9TSVpFIC0gbmV0d29yay0+c3NpZF9sZW4pOwogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9TU0lEOiAnJXMnIGxlbj0lZC5cbiIsCiAJCQkJCSAgICAgcHJpbnRfc3NpZChzc2lkLCBuZXR3b3JrLT5zc2lkLAogCQkJCQkJCW5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQkJICAgICBuZXR3b3JrLT5zc2lkX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9SQVRFUzoKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisJCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQlwID0gcmF0ZXNfc3RyOwogI2VuZGlmCiAJCQluZXR3b3JrLT5yYXRlc19sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4sCiAJCQkJCQkgTUFYX1JBVEVTX0xFTkdUSCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbmV0d29yay0+cmF0ZXNfbGVuOyBpKyspIHsKIAkJCQluZXR3b3JrLT5yYXRlc1tpXSA9IGluZm9fZWxlbWVudC0+ZGF0YVtpXTsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCQkJCXAgKz0gc25wcmludGYocCwgc2l6ZW9mKHJhdGVzX3N0cikgLQogCQkJCQkgICAgICAocCAtIHJhdGVzX3N0ciksICIlMDJYICIsCiAJCQkJCSAgICAgIG5ldHdvcmstPnJhdGVzW2ldKTsKQEAgLTExODIsMTkgKzExODAsMTkgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfUkFURVM6ICclcycgKCVkKVxuIiwKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9TVVBQX1JBVEVTOiAnJXMnICglZClcbiIsCiAJCQkJCSAgICAgcmF0ZXNfc3RyLCBuZXR3b3JrLT5yYXRlc19sZW4pOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUkFURVNfRVg6Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOgorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCXAgPSByYXRlc19zdHI7CiAjZW5kaWYKIAkJCW5ldHdvcmstPnJhdGVzX2V4X2xlbiA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiwKIAkJCQkJCSAgICBNQVhfUkFURVNfRVhfTEVOR1RIKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBuZXR3b3JrLT5yYXRlc19leF9sZW47IGkrKykgewogCQkJCW5ldHdvcmstPnJhdGVzX2V4W2ldID0gaW5mb19lbGVtZW50LT5kYXRhW2ldOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQkJcCArPSBzbnByaW50ZihwLCBzaXplb2YocmF0ZXNfc3RyKSAtCiAJCQkJCSAgICAgIChwIC0gcmF0ZXNfc3RyKSwgIiUwMlggIiwKIAkJCQkJICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtMTIwOSw0OSArMTIwNyw0OSBAQAogCQkJCX0KIAkJCX0KIAotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SQVRFU19FWDogJyVzJyAoJWQpXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOiAnJXMnICglZClcbiIsCiAJCQkJCSAgICAgcmF0ZXNfc3RyLCBuZXR3b3JrLT5yYXRlc19leF9sZW4pOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfRFNfU0VUOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9EU19TRVQ6ICVkXG4iLAorCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9EU19QQVJBTVM6ICVkXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXSk7CiAJCQluZXR3b3JrLT5jaGFubmVsID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfRkhfU0VUOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9GSF9TRVQ6IGlnbm9yZWRcbiIpOworCQljYXNlIFdMQU5fRUlEX0ZIX1BBUkFNUzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9GSF9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ0ZfU0VUOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9DRl9TRVQ6IGlnbm9yZWRcbiIpOworCQljYXNlIFdMQU5fRUlEX0NGX1BBUkFNUzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9DRl9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfVElNOgorCQljYXNlIFdMQU5fRUlEX1RJTToKIAkJCW5ldHdvcmstPnRpbS50aW1fY291bnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT50aW0udGltX3BlcmlvZCA9IGluZm9fZWxlbWVudC0+ZGF0YVsxXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9FUlBfSU5GTzoKKwkJY2FzZSBXTEFOX0VJRF9FUlBfSU5GTzoKIAkJCW5ldHdvcmstPmVycF92YWx1ZSA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX0VSUF9WQUxVRTsKIAkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfRVJQX1NFVDogJWRcbiIsCiAJCQkJCSAgICAgbmV0d29yay0+ZXJwX3ZhbHVlKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0lCU1NfU0VUOgorCQljYXNlIFdMQU5fRUlEX0lCU1NfUEFSQU1TOgogCQkJbmV0d29yay0+YXRpbV93aW5kb3cgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0lCU1NfU0VUOiAlZFxuIiwKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9JQlNTX1BBUkFNUzogJWRcbiIsCiAJCQkJCSAgICAgbmV0d29yay0+YXRpbV93aW5kb3cpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ0hBTExFTkdFOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9DSEFMTEVOR0U6IGlnbm9yZWRcbiIpOworCQljYXNlIFdMQU5fRUlEX0NIQUxMRU5HRToKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9DSEFMTEVOR0U6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfR0VORVJJQzoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfR0VORVJJQzogJWQgYnl0ZXNcbiIsCisJCWNhc2UgV0xBTl9FSURfR0VORVJJQzoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9HRU5FUklDOiAlZCBieXRlc1xuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbik7CiAJCQlpZiAoIWllZWU4MDIxMV9wYXJzZV9xb3NfaW5mb19wYXJhbV9JRShpbmZvX2VsZW1lbnQsCiAJCQkJCQkJICAgICAgIG5ldHdvcmspKQpAQCAtMTI2OSw4ICsxMjY3LDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1JTTjoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfUlNOOiAlZCBieXRlc1xuIiwKKwkJY2FzZSBXTEFOX0VJRF9SU046CisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfUlNOOiAlZCBieXRlc1xuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbik7CiAJCQluZXR3b3JrLT5yc25faWVfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuICsgMiwKIAkJCQkJCSAgTUFYX1dQQV9JRV9MRU4pOwpAQCAtMTI3OCwyMiArMTI3NiwyMiBAQAogCQkJICAgICAgIG5ldHdvcmstPnJzbl9pZV9sZW4pOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUU9TX1BBUkFNRVRFUjoKKwkJY2FzZSBXTEFOX0VJRF9RT1NfUEFSQU1FVEVSOgogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIlFvUyBFcnJvciBuZWVkIHRvIHBhcnNlIFFPU19QQVJBTUVURVIgSUVcbiIpOwogCQkJYnJlYWs7CiAJCQkvKiA4MDIuMTFoICovCi0JCWNhc2UgTUZJRV9UWVBFX1BPV0VSX0NPTlNUUkFJTlQ6CisJCWNhc2UgV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQ6CiAJCQluZXR3b3JrLT5wb3dlcl9jb25zdHJhaW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfUE9XRVJfQ09OU1RSQUlOVDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0NTQToKKwkJY2FzZSBXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSDoKIAkJCW5ldHdvcmstPnBvd2VyX2NvbnN0cmFpbnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19DU0E7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9RVUlFVDoKKwkJY2FzZSBXTEFOX0VJRF9RVUlFVDoKIAkJCW5ldHdvcmstPnF1aWV0LmNvdW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+cXVpZXQucGVyaW9kID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwogCQkJbmV0d29yay0+cXVpZXQuZHVyYXRpb24gPSBpbmZvX2VsZW1lbnQtPmRhdGFbMl07CkBAIC0xMzAxLDcgKzEyOTksNyBAQAogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfUVVJRVQ7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9JQlNTX0RGUzoKKwkJY2FzZSBXTEFOX0VJRF9JQlNTX0RGUzoKIAkJCWlmIChuZXR3b3JrLT5pYnNzX2RmcykKIAkJCQlicmVhazsKIAkJCW5ldHdvcmstPmlic3NfZGZzID0ga21lbWR1cChpbmZvX2VsZW1lbnQtPmRhdGEsCkBAIC0xMzEyLDcgKzEzMTAsNyBAQAogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfSUJTU19ERlM7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9UUENfUkVQT1JUOgorCQljYXNlIFdMQU5fRUlEX1RQQ19SRVBPUlQ6CiAJCQluZXR3b3JrLT50cGNfcmVwb3J0LnRyYW5zbWl0X3Bvd2VyID0KIAkJCSAgICBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT50cGNfcmVwb3J0LmxpbmtfbWFyZ2luID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwpAQCAtMTU2MSw3ICsxNTU5LDcgQEAKIAl9OwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqb2xkZXN0ID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppbmZvX2VsZW1lbnQgPSBiZWFjb24tPmluZm9fZWxlbWVudDsKICNlbmRpZgogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNjE1LDcgKzE2MTMsNyBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKChvbGRlc3QgPT0gTlVMTCkgfHwKLQkJICAgICh0YXJnZXQtPmxhc3Rfc2Nhbm5lZCA8IG9sZGVzdC0+bGFzdF9zY2FubmVkKSkKKwkJICAgIHRpbWVfYmVmb3JlKHRhcmdldC0+bGFzdF9zY2FubmVkLCBvbGRlc3QtPmxhc3Rfc2Nhbm5lZCkpCiAJCQlvbGRlc3QgPSB0YXJnZXQ7CiAJfQogCkBAIC0xNjM5LDcgKzE2MzcsNyBAQAogCQkJbGlzdF9kZWwoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCk7CiAJCX0KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgcHJpbnRfc3NpZChzc2lkLCBuZXR3b3JrLnNzaWQsCiAJCQkJCQkgbmV0d29yay5zc2lkX2xlbiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwppbmRleCBmNzhmNTdlLi42NWE4MTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIC8qCiAKQEAgLTI2MCw3ICsyNjAsNiBAQAogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplLAogCSAgICBydHNfcmVxdWlyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmaWVlZS0+c3RhdHM7CiAJaW50IGVuY3J5cHQsIGhvc3RfZW5jcnlwdCwgaG9zdF9lbmNyeXB0X21zZHUsIGhvc3RfYnVpbGRfaXY7CiAJX19iZTE2IGV0aGVyX3R5cGU7CiAJaW50IGJ5dGVzLCBmYywgaGRyX2xlbjsKQEAgLTMwNiw3ICszMDUsNyBAQAogCiAJaWYgKCFlbmNyeXB0ICYmIGllZWUtPmllZWU4MDJfMXggJiYKIAkgICAgaWVlZS0+ZHJvcF91bmVuY3J5cHRlZCAmJiBldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX1BBRSkpIHsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWdvdG8gc3VjY2VzczsKIAl9CiAKQEAgLTUyNiw4ICs1MjUsOCBAQAogCWlmICh0eGIpIHsKIAkJaW50IHJldCA9ICgqaWVlZS0+aGFyZF9zdGFydF94bWl0KSAodHhiLCBkZXYsIHByaW9yaXR5KTsKIAkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzdGF0cy0+dHhfcGFja2V0cysrOwotCQkJc3RhdHMtPnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNTM5LDggKzUzOCw5IEBACiAgICAgICBmYWlsZWQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlzdGF0cy0+dHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3htaXQpOwogCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eGJfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwppbmRleCAzMWVhM2FiLi4zYzA4MTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKQEAgLTM1LDEzICszNSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIHN0YXRpYyBjb25zdCBjaGFyICppZWVlODAyMTFfbW9kZXNbXSA9IHsKIAkiPyIsICJhIiwgImIiLCAiYWIiLCAiZyIsICJhZyIsICJiZyIsICJhYmciCiB9OwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBlbGFwc2VkX2ppZmZpZXNfbXNlY3ModW5zaWduZWQgbG9uZyBzdGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXM7CisKKwlpZiAoZW5kID49IHN0YXJ0KQorCQlyZXR1cm4gamlmZmllc190b19tc2VjcyhlbmQgLSBzdGFydCk7CisKKwlyZXR1cm4gamlmZmllc190b19tc2VjcyhlbmQgKyAoTUFYX0pJRkZZX09GRlNFVCAtIHN0YXJ0KSArIDEpOworfQorCiAjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0CiBzdGF0aWMgY2hhciAqaWVlZTgwMjExX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCSAgICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLApAQCAtMjE1LDggKzIyNiw4IEBACiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJcCA9IGN1c3RvbTsKIAlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLAotCQkgICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCSAgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkpOworCQkgICAgICAiIExhc3QgYmVhY29uOiAldW1zIGFnbyIsCisJCSAgICAgIGVsYXBzZWRfamlmZmllc19tc2VjcyhuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQogCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwpAQCAtMjc2LDE1ICsyODcsMTUgQEAKIAkJICAgIHRpbWVfYWZ0ZXIobmV0d29yay0+bGFzdF9zY2FubmVkICsgaWVlZS0+c2Nhbl9hZ2UsIGppZmZpZXMpKQogCQkJZXYgPSBpZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oaWVlZSwgZXYsIHN0b3AsIG5ldHdvcmssCiAJCQkJCQkgICAgICBpbmZvKTsKLQkJZWxzZQorCQllbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgotCQkJCQkgICAgICIlcE0pJyBkdWUgdG8gYWdlICglZG1zKS5cbiIsCisJCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCV1bXMpLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJIG5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQkJICAgICBuZXR3b3JrLT5ic3NpZCwKLQkJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQotCQkJCQkJCSAgICAgIG5ldHdvcmstPgotCQkJCQkJCSAgICAgIGxhc3Rfc2Nhbm5lZCkpOworCQkJCQkgICAgIGVsYXBzZWRfamlmZmllc19tc2VjcygKKwkJCQkJICAgICAgICAgICAgICAgbmV0d29yay0+bGFzdF9zY2FubmVkKSk7CisJCX0KIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKaW5kZXggNDdiZWUwZS4uODMwNGY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwpAQCAtMSwyNiArMSwyOSBAQAogY29uZmlnIElXTFdJRkkKLQl0cmlzdGF0ZQotCi1jb25maWcgSVdMQ09SRQotCXRyaXN0YXRlICJJbnRlbCBXaXJlbGVzcyBXaWZpIENvcmUiCisJdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpZmkiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgTElCODAyMTEKLQlzZWxlY3QgSVdMV0lGSQorCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgTUFDODAyMTFfTEVEUyBpZiBJV0xXSUZJX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUyBpZiBJV0xXSUZJX0xFRFMKIAlzZWxlY3QgUkZLSUxMIGlmIElXTFdJRklfUkZLSUxMCiAKIGNvbmZpZyBJV0xXSUZJX0xFRFMKLQlib29sCi0JZGVmYXVsdCBuCisJYm9vbCAiRW5hYmxlIExFRCBzdXBwb3J0IGluIGl3bGFnbiBhbmQgaXdsMzk0NSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCiBjb25maWcgSVdMV0lGSV9SRktJTEwKLQlib29sZWFuICJJd2x3aWZpIFJGIGtpbGwgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElXTENPUkUKKwlib29sICJFbmFibGUgUkYga2lsbCBzdXBwb3J0IGluIGl3bGFnbiBhbmQgaXdsMzk0NSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSVdMV0lGSQorCitjb25maWcgSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVAorCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2xhZ24gZHJpdmVyIgorCWRlcGVuZHMgb24gSVdMV0lGSQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGZvciB0aGUgaXdsYWduIGRyaXZlci4KIAogY29uZmlnIElXTFdJRklfREVCVUcKLQlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bGFnbiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0xDT1JFCisJYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKKwlkZXBlbmRzIG9uIElXTFdJRkkKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBkZWJ1ZyB0cmFjaW5nIG91dHB1dCBmb3IgdGhlIGl3bHdpZmkgZHJpdmVycwogCkBAIC00NCwxNiArNDcsMTQgQEAKIAkgIGFueSBwcm9ibGVtcyB5b3UgbWF5IGVuY291bnRlci4KIAogY29uZmlnIElXTFdJRklfREVCVUdGUwotICAgICAgICBib29sICJJd2x3aWZpIGRlYnVnZnMgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBJV0xDT1JFICYmIElXTFdJRklfREVCVUcgJiYgTUFDODAyMTFfREVCVUdGUworICAgICAgICBib29sICJpd2xhZ24gZGVidWdmcyBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIElXTFdJRkkgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCiAgICAgICAgIC0tLWhlbHAtLS0KIAkgIEVuYWJsZSBjcmVhdGlvbiBvZiBkZWJ1Z2ZzIGZpbGVzIGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzLgogCiBjb25maWcgSVdMQUdOCi0JdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBJV0xDT1JFCisJdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIChpd2xhZ24pIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOgogCkBAIC03NiwxOSArNzcsNiBAQAogCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uICBUaGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpd2xhZ24ua28uCiAKLWNvbmZpZyBJV0xBR05fU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTEFHTgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGZvciB0aGUgaXdsYWduIGRyaXZlci4KLQotY29uZmlnIElXTEFHTl9MRURTCi0JYm9vbCAiRW5hYmxlIExFRFMgZmVhdHVyZXMgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTEFHTgotCXNlbGVjdCBJV0xXSUZJX0xFRFMKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRFMgZm9yIHRoZSBpd2xhZ24gZHJpdmVycwotCiAKIGNvbmZpZyBJV0w0OTY1CiAJYm9vbCAiSW50ZWwgV2lyZWxlc3MgV2lGaSA0OTY1QUdOIgpAQCAtOTcsMjAgKzg1LDE0IEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayA0OTY1QUdOCiAKIGNvbmZpZyBJV0w1MDAwCi0JYm9vbCAiSW50ZWwgV2lyZWxlc3MgV2lGaSA1MDAwQUdOIgorCWJvb2wgIkludGVsIFdpcmVsZXNzIFdpRmkgNTAwMEFHTjsgSW50ZWwgV2lGaSBMaW5rIDEwMDAsIDYwMDAsIGFuZCA2MDUwIFNlcmllcyIKIAlkZXBlbmRzIG9uIElXTEFHTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDUwMDBBR04gRmFtaWx5CiAKIGNvbmZpZyBJV0wzOTQ1Ci0JdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiIKLQlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgTElCODAyMTEKLQlzZWxlY3QgSVdMV0lGSQotCXNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIElXTDM5NDVfTEVEUwotCXNlbGVjdCBMRURTX0NMQVNTIGlmIElXTDM5NDVfTEVEUwotCXNlbGVjdCBSRktJTEwgaWYgSVdMMzk0NV9SRktJTEwKKwl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIChpd2wzOTQ1KSIKKwlkZXBlbmRzIG9uIElXTFdJRkkKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApAQCAtMTMzLDQ1ICsxMTUsOCBAQAogCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uICBUaGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpd2wzOTQ1LmtvLgogCi1jb25maWcgSVdMMzk0NV9SRktJTEwKLQlib29sICJFbmFibGUgUkYga2lsbCBzdXBwb3J0IGluIGl3bDM5NDUgZHJpdmVycyIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQogY29uZmlnIElXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsMzk0NSBkcml2ZXJzIgorCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlciIKIAlkZXBlbmRzIG9uIElXTDM5NDUKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bDM5NDUgZHJpdmVyLgotCi1jb25maWcgSVdMMzk0NV9MRURTCi0JYm9vbCAiRW5hYmxlIExFRFMgZmVhdHVyZXMgaW4gaXdsMzk0NSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0wzOTQ1Ci0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBMRURTIGZvciB0aGUgaXdsMzk0NSBkcml2ZXIuCi0KLWNvbmZpZyBJV0wzOTQ1X0RFQlVHCi0JYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBpd2wzOTQ1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBkZWJ1ZyB0cmFjaW5nIG91dHB1dCBmb3IgdGhlIGl3bDM5NDUKLQkgIGRyaXZlci4KLQotCSAgVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUga2VybmVsIG1vZHVsZSBiZWluZyB+MTAwayBsYXJnZXIuICBZb3UgY2FuCi0JICBjb250cm9sIHdoaWNoIGRlYnVnIG91dHB1dCBpcyBzZW50IHRvIHRoZSBrZXJuZWwgbG9nIGJ5IHNldHRpbmcgdGhlCi0JICB2YWx1ZSBpbgotCi0JICAgICAgICAgIC9zeXMvYnVzL3BjaS9kcml2ZXJzLyR7RFJJVkVSfS9kZWJ1Z19sZXZlbAotCi0JICBUaGlzIGVudHJ5IHdpbGwgb25seSBleGlzdCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLgotCi0JICBUbyBzZXQgYSB2YWx1ZSwgc2ltcGx5IGVjaG8gYW4gOC1ieXRlIGhleCB2YWx1ZSB0byB0aGUgc2FtZSBmaWxlOgotCi0JCSAgJSBlY2hvIDB4NDNmZmYgPiAvc3lzL2J1cy9wY2kvZHJpdmVycy8ke0RSSVZFUn0vZGVidWdfbGV2ZWwKLQotCSAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGRlYnVnIG1hc2sgdmFsdWVzIGluOgotCQkgIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaAotCi0JICBJZiB0aGlzIGlzIHlvdXIgZmlyc3QgdGltZSB1c2luZyB0aGlzIGRyaXZlciwgeW91IHNob3VsZCBzYXkgWSBoZXJlCi0JICBhcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gY2FuIGFzc2lzdCBvdGhlcnMgaW4gaGVscGluZyB5b3UgcmVzb2x2ZQotCSAgYW55IHByb2JsZW1zIHlvdSBtYXkgZW5jb3VudGVyLgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQppbmRleCAwYmU5ZTZiLi5kNzlkOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKQEAgLTEsMjAgKzEsMjEgQEAKLW9iai0kKENPTkZJR19JV0xDT1JFKQkrPSBpd2xjb3JlLm8KK29iai0kKENPTkZJR19JV0xXSUZJKQkrPSBpd2xjb3JlLm8KIGl3bGNvcmUtb2JqcyAJCTo9IGl3bC1jb3JlLm8gaXdsLWVlcHJvbS5vIGl3bC1oY21kLm8gaXdsLXBvd2VyLm8KIGl3bGNvcmUtb2JqcyAJCSs9IGl3bC1yeC5vIGl3bC10eC5vIGl3bC1zdGEubyBpd2wtY2FsaWIubwogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXNjYW4ubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0RFQlVHRlMpICs9IGl3bC1kZWJ1Z2ZzLm8KIGl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9MRURTKSArPSBpd2wtbGVkLm8KIGl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9SRktJTEwpICs9IGl3bC1yZmtpbGwubwotaXdsY29yZS0kKENPTkZJR19JV0xBR05fU1BFQ1RSVU1fTUVBU1VSRU1FTlQpICs9IGl3bC1zcGVjdHJ1bS5vCitpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpICs9IGl3bC1zcGVjdHJ1bS5vCiAKIG9iai0kKENPTkZJR19JV0xBR04pCSs9IGl3bGFnbi5vCi1pd2xhZ24tb2JqcwkJOj0gaXdsLWFnbi5vIGl3bC1hZ24tcnMubyBpd2wtYWduLWhjbWQtY2hlY2subworaXdsYWduLW9ianMJCTo9IGl3bC1hZ24ubyBpd2wtYWduLXJzLm8KIAogaXdsYWduLSQoQ09ORklHX0lXTDQ5NjUpICs9IGl3bC00OTY1Lm8KIGl3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtNTAwMC5vCitpd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTYwMDAubworaXdsYWduLSQoQ09ORklHX0lXTDUwMDApICs9IGl3bC0xMDAwLm8KIAogb2JqLSQoQ09ORklHX0lXTDM5NDUpCSs9IGl3bDM5NDUubwotaXdsMzk0NS1vYmpzCQk6PSBpd2wzOTQ1LWJhc2UubyBpd2wtMzk0NS5vIGl3bC0zOTQ1LXJzLm8KLWl3bDM5NDUtJChDT05GSUdfSVdMMzk0NV9MRURTKSArPSBpd2wtMzk0NS1sZWQubworaXdsMzk0NS1vYmpzCQk6PSBpd2wzOTQ1LWJhc2UubyBpd2wtMzk0NS5vIGl3bC0zOTQ1LXJzLm8gaXdsLTM5NDUtbGVkLm8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhNTJmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDgtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKKworLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgSVdMMTAwMF9VQ09ERV9BUElfTUFYIDIKKworLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NSU4gMQorCisjZGVmaW5lIElXTDEwMDBfRldfUFJFICJpd2x3aWZpLTEwMDAtIgorI2RlZmluZSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCisjZGVmaW5lIElXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKworc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnID0geworCS5uYW1lID0gIjEwMDAgU2VyaWVzIEJHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMMTAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0wxMDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0wxMDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w1MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0EsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29tbWFuZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmNGViNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvbW1hbmRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgotICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgotICoKLSAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKLSAqIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKiBCU0QgTElDRU5TRQotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIFBsZWFzZSB1c2UgdGhpcyBmaWxlIChpd2wtMzk0NS1jb21tYW5kcy5oKSBvbmx5IGZvciB1Q29kZSBBUEkgZGVmaW5pdGlvbnMuCi0gKiBQbGVhc2UgdXNlIGl3bC0zOTQ1LWh3LmggZm9yIGhhcmR3YXJlLXJlbGF0ZWQgZGVmaW5pdGlvbnMuCi0gKiBQbGVhc2UgdXNlIGl3bC0zOTQ1LmggZm9yIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBkZWZpbml0aW9ucy4KLSAqLwotCi0jaWZuZGVmIF9faXdsXzM5NDVfY29tbWFuZHNfaF9fCi0jZGVmaW5lIF9faXdsXzM5NDVfY29tbWFuZHNfaF9fCi0KLS8qIHVDb2RlIHZlcnNpb24gY29udGFpbnMgNCB2YWx1ZXM6IE1ham9yL01pbm9yL0FQSS9TZXJpYWwgKi8KLSNkZWZpbmUgSVdMX1VDT0RFX01BSk9SKHZlcikJKCgodmVyKSAmIDB4RkYwMDAwMDApID4+IDI0KQotI2RlZmluZSBJV0xfVUNPREVfTUlOT1IodmVyKQkoKCh2ZXIpICYgMHgwMEZGMDAwMCkgPj4gMTYpCi0jZGVmaW5lIElXTF9VQ09ERV9BUEkodmVyKQkoKCh2ZXIpICYgMHgwMDAwRkYwMCkgPj4gOCkKLSNkZWZpbmUgSVdMX1VDT0RFX1NFUklBTCh2ZXIpCSgodmVyKSAmIDB4MDAwMDAwRkYpCi0KLWVudW0gewotCVJFUExZX0FMSVZFID0gMHgxLAotCVJFUExZX0VSUk9SID0gMHgyLAotCi0JLyogUlhPTiBhbmQgUU9TIGNvbW1hbmRzICovCi0JUkVQTFlfUlhPTiA9IDB4MTAsCi0JUkVQTFlfUlhPTl9BU1NPQyA9IDB4MTEsCi0JUkVQTFlfUU9TX1BBUkFNID0gMHgxMywKLQlSRVBMWV9SWE9OX1RJTUlORyA9IDB4MTQsCi0KLQkvKiBNdWx0aS1TdGF0aW9uIHN1cHBvcnQgKi8KLQlSRVBMWV9BRERfU1RBID0gMHgxOCwKLQlSRVBMWV9SRU1PVkVfU1RBID0gMHgxOSwJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9SRU1PVkVfQUxMX1NUQSA9IDB4MWEsCS8qIG5vdCB1c2VkICovCi0KLQkvKiBSWCwgVFgsIExFRHMgKi8KLQlSRVBMWV8zOTQ1X1JYID0gMHgxYiwJCS8qIDM5NDUgb25seSAqLwotCVJFUExZX1RYID0gMHgxYywKLQlSRVBMWV9SQVRFX1NDQUxFID0gMHg0NywJLyogMzk0NSBvbmx5ICovCi0JUkVQTFlfTEVEU19DTUQgPSAweDQ4LAotCVJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQgPSAweDRlLCAvKiA0OTY1IG9ubHkgKi8KLQotCS8qIDgwMi4xMWggcmVsYXRlZCAqLwotCVJBREFSX05PVElGSUNBVElPTiA9IDB4NzAsCS8qIG5vdCB1c2VkICovCi0JUkVQTFlfUVVJRVRfQ01EID0gMHg3MSwJCS8qIG5vdCB1c2VkICovCi0JUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyLAotCUNIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTiA9IDB4NzMsCi0JUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01EID0gMHg3NCwKLQlTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTiA9IDB4NzUsCi0KLQkvKiBQb3dlciBNYW5hZ2VtZW50ICovCi0JUE9XRVJfVEFCTEVfQ01EID0gMHg3NywKLQlQTV9TTEVFUF9OT1RJRklDQVRJT04gPSAweDdBLAotCVBNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDID0gMHg3QiwKLQotCS8qIFNjYW4gY29tbWFuZHMgYW5kIG5vdGlmaWNhdGlvbnMgKi8KLQlSRVBMWV9TQ0FOX0NNRCA9IDB4ODAsCi0JUkVQTFlfU0NBTl9BQk9SVF9DTUQgPSAweDgxLAotCVNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OID0gMHg4MiwKLQlTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OID0gMHg4MywKLQlTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiA9IDB4ODQsCi0KLQkvKiBJQlNTL0FQIGNvbW1hbmRzICovCi0JQkVBQ09OX05PVElGSUNBVElPTiA9IDB4OTAsCi0JUkVQTFlfVFhfQkVBQ09OID0gMHg5MSwKLQlXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OID0gMHg5NCwJLyogbm90IHVzZWQgKi8KLQotCS8qIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMgKi8KLQlRVUlFVF9OT1RJRklDQVRJT04gPSAweDk2LAkJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NywKLQlNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTiA9IDB4OTksCS8qIG5vdCB1c2VkICovCi0KLQkvKiBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIGNvbmZpZyBjb21tYW5kICovCi0JUkVQTFlfQlRfQ09ORklHID0gMHg5YiwKLQotCS8qIFN0YXRpc3RpY3MgKi8KLQlSRVBMWV9TVEFUSVNUSUNTX0NNRCA9IDB4OWMsCi0JU1RBVElTVElDU19OT1RJRklDQVRJT04gPSAweDlkLAotCi0JLyogUkYtS0lMTCBjb21tYW5kcyBhbmQgbm90aWZpY2F0aW9ucyAqLwotCVJFUExZX0NBUkRfU1RBVEVfQ01EID0gMHhhMCwKLQlDQVJEX1NUQVRFX05PVElGSUNBVElPTiA9IDB4YTEsCi0KLQkvKiBNaXNzZWQgYmVhY29ucyBub3RpZmljYXRpb24gKi8KLQlNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04gPSAweGEyLAotCi0JUkVQTFlfTUFYID0gMHhmZgotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDApCi0gKiBDb21tb25seSB1c2VkIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zOgotICogQ29tbWFuZCBoZWFkZXIsIHR4cG93ZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIGl3bDM5NDVfY21kX2hlYWRlciBmbGFncyB2YWx1ZSAqLwotI2RlZmluZSBJV0xfQ01EX0ZBSUxFRF9NU0sgMHg0MAotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIKLSAqCi0gKiBUaGlzIGhlYWRlciBmb3JtYXQgYXBwZWFycyBpbiB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY29tbWFuZCBzZW50IGZyb20gdGhlCi0gKiBkcml2ZXIsIGFuZCBlYWNoIHJlc3BvbnNlL25vdGlmaWNhdGlvbiByZWNlaXZlZCBmcm9tIHVDb2RlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9jbWRfaGVhZGVyIHsKLQl1OCBjbWQ7CQkvKiBDb21tYW5kIElEOiAgUkVQTFlfUlhPTiwgZXRjLiAqLwotCXU4IGZsYWdzOwkvKiBJV0xfQ01EXyogKi8KLQkvKgotCSAqIFRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgc2VxdWVuY2UgbnVtYmVyIHRvIHZhbHVlcyBvZiBpdHMgY2hvb3NpbmcuCi0JICogdUNvZGUgZG9lcyBub3QgdXNlIHRoaXMgdmFsdWUsIGJ1dCBwYXNzZXMgaXQgYmFjayB0byB0aGUgZHJpdmVyCi0JICogd2hlbiBzZW5kaW5nIHRoZSByZXNwb25zZSB0byBlYWNoIGRyaXZlci1vcmlnaW5hdGVkIGNvbW1hbmQsIHNvCi0JICogdGhlIGRyaXZlciBjYW4gbWF0Y2ggdGhlIHJlc3BvbnNlIHRvIHRoZSBjb21tYW5kLiAgU2luY2UgdGhlIHZhbHVlcwotCSAqIGRvbid0IGdldCB1c2VkIGJ5IHVDb2RlLCB0aGUgZHJpdmVyIG1heSBzZXQgdXAgYW4gYXJiaXRyYXJ5IGZvcm1hdC4KLQkgKgotCSAqIFRoZXJlIGlzIG9uZSBleGNlcHRpb246ICB1Q29kZSBzZXRzIGJpdCAxNSB3aGVuIGl0IG9yaWdpbmF0ZXMKLQkgKiB0aGUgcmVzcG9uc2Uvbm90aWZpY2F0aW9uLCBpLmUuIHdoZW4gdGhlIHJlc3BvbnNlL25vdGlmaWNhdGlvbgotCSAqIGlzIG5vdCBhIGRpcmVjdCByZXNwb25zZSB0byBhIGNvbW1hbmQgc2VudCBieSB0aGUgZHJpdmVyLiAgRm9yCi0JICogZXhhbXBsZSwgdUNvZGUgaXNzdWVzIFJFUExZXzM5NDVfUlggd2hlbiBpdCBzZW5kcyBhIHJlY2VpdmVkIGZyYW1lCi0JICogdG8gdGhlIGRyaXZlcjsgaXQgaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGFueSBkcml2ZXIgY29tbWFuZC4KLQkgKgotCSAqIFRoZSBMaW51eCBkcml2ZXIgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLQkgKgotCSAqICAwOjcgICAgaW5kZXgvcG9zaXRpb24gd2l0aGluIFR4IHF1ZXVlCi0JICogIDg6MTMgICBUeCBxdWV1ZSBzZWxlY3Rpb24KLQkgKiAxNDoxNCAgIGRyaXZlciBzZXRzIHRoaXMgdG8gaW5kaWNhdGUgY29tbWFuZCBpcyBpbiB0aGUgJ2h1Z2UnCi0JICogICAgICAgICBzdG9yYWdlIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgYnVmZmVycywgaS5lLiBzY2FuIGNtZAotCSAqIDE1OjE1ICAgdUNvZGUgc2V0cyB0aGlzIGluIHVDb2RlLW9yaWdpbmF0ZWQgcmVzcG9uc2Uvbm90aWZpY2F0aW9uCi0JICovCi0JX19sZTE2IHNlcXVlbmNlOwotCi0JLyogY29tbWFuZCBvciByZXNwb25zZS9ub3RpZmljYXRpb24gZGF0YSBmb2xsb3dzIGltbWVkaWF0ZWx5ICovCi0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyCi0gKgotICogVXNlZCBpbiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9TQ0FOX0NNRCwgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gKLSAqCi0gKiBFYWNoIGVudHJ5IGNvbnRhaW5zIHR3byB2YWx1ZXM6Ci0gKiAxKSAgRFNQIGdhaW4gKG9yIHNvbWV0aW1lcyBjYWxsZWQgRFNQIGF0dGVudWF0aW9uKS4gIFRoaXMgaXMgYSBmaW5lLWdyYWluZWQKLSAqICAgICBsaW5lYXIgdmFsdWUgdGhhdCBtdWx0aXBsaWVzIHRoZSBvdXRwdXQgb2YgdGhlIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciwKLSAqICAgICBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgYW5hbG9nIHJhZGlvLgotICogMikgIFJhZGlvIGdhaW4uICBUaGlzIHNldHMgdGhlIGFuYWxvZyBnYWluIG9mIHRoZSByYWRpbyBUeCBwYXRoLgotICogICAgIEl0IGlzIGEgY29hcnNlciBzZXR0aW5nLCBhbmQgYmVoYXZlcyBpbiBhIGxvZ2FyaXRobWljIChkQikgZmFzaGlvbi4KLSAqCi0gKiBEcml2ZXIgb2J0YWlucyB2YWx1ZXMgZnJvbSBzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciBwb3dlcl9nYWluX3RhYmxlW11bXS4KLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgewotCXU4IHR4X2dhaW47CQkvKiBnYWluIGZvciBhbmFsb2cgcmFkaW8gKi8KLQl1OCBkc3BfYXR0ZW47CQkvKiBnYWluIGZvciBEU1AgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlCi0gKgotICogVXNlZCBpbiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICovCi1zdHJ1Y3QgaXdsMzk0NV9wb3dlcl9wZXJfcmF0ZSB7Ci0JdTggcmF0ZTsJCS8qIHBsY3AgKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7Ci0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDBhKQotICogQWxpdmUgYW5kIEVycm9yIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBVQ09ERV9WQUxJRF9PSwljcHVfdG9fbGUzMigweDEpCi0jZGVmaW5lIElOSVRJQUxJWkVfU1VCVFlQRSAgICAoOSkKLQotLyoKLSAqICgiSW5pdGlhbGl6ZSIpIFJFUExZX0FMSVZFID0gMHgxIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIHVDb2RlIGlzc3VlcyB0aGlzICJpbml0aWFsaXplIGFsaXZlIiBub3RpZmljYXRpb24gb25jZSB0aGUgaW5pdGlhbGl6YXRpb24KLSAqIHVDb2RlIGltYWdlIGhhcyBjb21wbGV0ZWQgaXRzIHdvcmssIGFuZCBpcyByZWFkeSB0byBsb2FkIHRoZSBydW50aW1lIGltYWdlLgotICogVGhpcyBpcyB0aGUgKmZpcnN0KiAiYWxpdmUiIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBkcml2ZXIgd2lsbCByZWNlaXZlIGFmdGVyCi0gKiByZWJvb3RpbmcgdUNvZGU7IHRoZSAiaW5pdGlhbGl6ZSIgYWxpdmUgaXMgaW5kaWNhdGVkIGJ5IHN1YnR5cGUgZmllbGQgPT0gOS4KLSAqCi0gKiBTZWUgY29tbWVudHMgZG9jdW1lbnRpbmcgIkJTTSIgKGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lKS4KLSAqLwotc3RydWN0IGl3bDM5NDVfaW5pdF9hbGl2ZV9yZXNwIHsKLQl1OCB1Y29kZV9taW5vcjsKLQl1OCB1Y29kZV9tYWpvcjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN3X3Jldls4XTsKLQl1OCB2ZXJfdHlwZTsKLQl1OCB2ZXJfc3VidHlwZTsJCQkvKiAiOSIgZm9yIGluaXRpYWxpemUgYWxpdmUgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQyOwotCV9fbGUzMiBsb2dfZXZlbnRfdGFibGVfcHRyOwotCV9fbGUzMiBlcnJvcl9ldmVudF90YWJsZV9wdHI7Ci0JX19sZTMyIHRpbWVzdGFtcDsKLQlfX2xlMzIgaXNfdmFsaWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioKLSAqIFJFUExZX0FMSVZFID0gMHgxIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIHVDb2RlIGlzc3VlcyB0aGlzICJhbGl2ZSIgbm90aWZpY2F0aW9uIG9uY2UgdGhlIHJ1bnRpbWUgaW1hZ2UgaXMgcmVhZHkKLSAqIHRvIHJlY2VpdmUgY29tbWFuZHMgZnJvbSB0aGUgZHJpdmVyLiAgVGhpcyBpcyB0aGUgKnNlY29uZCogImFsaXZlIgotICogbm90aWZpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciB3aWxsIHJlY2VpdmUgYWZ0ZXIgcmVib290aW5nIHVDb2RlOwotICogdGhpcyAiYWxpdmUiIGlzIGluZGljYXRlZCBieSBzdWJ0eXBlIGZpZWxkICE9IDkuCi0gKgotICogU2VlIGNvbW1lbnRzIGRvY3VtZW50aW5nICJCU00iIChib290c3RyYXAgc3RhdGUgbWFjaGluZSkuCi0gKgotICogVGhpcyByZXNwb25zZSBpbmNsdWRlcyB0d28gcG9pbnRlcnMgdG8gc3RydWN0dXJlcyB3aXRoaW4gdGhlIGRldmljZSdzCi0gKiBkYXRhIFNSQU0gKGFjY2VzcyB2aWEgSEJVU19UQVJHX01FTV8qIHJlZ3MpIHRoYXQgYXJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nOgotICoKLSAqIDEpICBsb2dfZXZlbnRfdGFibGVfcHRyIGluZGljYXRlcyBiYXNlIG9mIHRoZSBldmVudCBsb2cuICBUaGlzIHRyYWNlcwotICogICAgIGEgMjU2LWVudHJ5IGhpc3Rvcnkgb2YgdUNvZGUgZXhlY3V0aW9uIHdpdGhpbiBhIGNpcmN1bGFyIGJ1ZmZlci4KLSAqCi0gKiAyKSAgZXJyb3JfZXZlbnRfdGFibGVfcHRyIGluZGljYXRlcyBiYXNlIG9mIHRoZSBlcnJvciBsb2cuICBUaGlzIGNvbnRhaW5zCi0gKiAgICAgaW5mb3JtYXRpb24gYWJvdXQgYW55IHVDb2RlIGVycm9yIHRoYXQgb2NjdXJzLgotICoKLSAqIFRoZSBMaW51eCBkcml2ZXIgY2FuIHByaW50IGJvdGggbG9ncyB0byB0aGUgc3lzdGVtIGxvZyB3aGVuIGEgdUNvZGUgZXJyb3IKLSAqIG9jY3Vycy4KLSAqLwotc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCB7Ci0JdTggdWNvZGVfbWlub3I7Ci0JdTggdWNvZGVfbWFqb3I7Ci0JX19sZTE2IHJlc2VydmVkMTsKLQl1OCBzd19yZXZbOF07Ci0JdTggdmVyX3R5cGU7Ci0JdTggdmVyX3N1YnR5cGU7CQkJLyogbm90ICI5IiBmb3IgcnVudGltZSBhbGl2ZSAqLwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JX19sZTMyIGxvZ19ldmVudF90YWJsZV9wdHI7CS8qIFNSQU0gYWRkcmVzcyBmb3IgZXZlbnQgbG9nICovCi0JX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsJLyogU1JBTSBhZGRyZXNzIGZvciBlcnJvciBsb2cgKi8KLQlfX2xlMzIgdGltZXN0YW1wOwotCV9fbGUzMiBpc192YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi11bmlvbiB0c2YgewotCXU4IGJ5dGVbOF07Ci0JX19sZTE2IHdvcmRbNF07Ci0JX19sZTMyIGR3WzJdOwotfTsKLQotLyoKLSAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9lcnJvcl9yZXNwIHsKLQlfX2xlMzIgZXJyb3JfdHlwZTsKLQl1OCBjbWRfaWQ7Ci0JdTggcmVzZXJ2ZWQxOwotCV9fbGUxNiBiYWRfY21kX3NlcV9udW07Ci0JX19sZTE2IHJlc2VydmVkMjsKLQlfX2xlMzIgZXJyb3JfaW5mbzsKLQl1bmlvbiB0c2YgdGltZXN0YW1wOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgxKQotICogUlhPTiBDb21tYW5kcyAmIFJlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBSeCBjb25maWcgZGVmaW5lcyAmIHN0cnVjdHVyZQotICovCi0vKiByeF9jb25maWcgZGV2aWNlIHR5cGVzICAqLwotZW51bSB7Ci0JUlhPTl9ERVZfVFlQRV9BUCA9IDEsCi0JUlhPTl9ERVZfVFlQRV9FU1MgPSAzLAotCVJYT05fREVWX1RZUEVfSUJTUyA9IDQsCi0JUlhPTl9ERVZfVFlQRV9TTklGRkVSID0gNiwKLX07Ci0KLS8qIHJ4X2NvbmZpZyBmbGFncyAqLwotLyogYmFuZCAmIG1vZHVsYXRpb24gc2VsZWN0aW9uICovCi0jZGVmaW5lIFJYT05fRkxHX0JBTkRfMjRHX01TSyAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZSBSWE9OX0ZMR19DQ0tfTVNLICAgICAgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMSkKLS8qIGF1dG8gZGV0ZWN0aW9uIGVuYWJsZSAqLwotI2RlZmluZSBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMikKLS8qIFRHZyBwcm90ZWN0aW9uIHdoZW4gdHggKi8KLSNkZWZpbmUgUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDMpCi0vKiBjY2sgc2hvcnQgc2xvdCAmIHByZWFtYmxlICovCi0jZGVmaW5lIFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgNCkKLSNkZWZpbmUgUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLICAgICBjcHVfdG9fbGUzMigxIDw8IDUpCi0vKiBhbnRlbm5hIHNlbGVjdGlvbiAqLwotI2RlZmluZSBSWE9OX0ZMR19ESVNfRElWX01TSyAgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgNykKLSNkZWZpbmUgUlhPTl9GTEdfQU5UX1NFTF9NU0sgICAgICAgICAgICBjcHVfdG9fbGUzMigweDBmMDApCi0jZGVmaW5lIFJYT05fRkxHX0FOVF9BX01TSyAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA4KQotI2RlZmluZSBSWE9OX0ZMR19BTlRfQl9NU0sgICAgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgOSkKLS8qIHJhZGFyIGRldGVjdGlvbiBlbmFibGUgKi8KLSNkZWZpbmUgUlhPTl9GTEdfUkFEQVJfREVURUNUX01TSyAgICAgICBjcHVfdG9fbGUzMigxIDw8IDEyKQotI2RlZmluZSBSWE9OX0ZMR19UR0pfTkFSUk9XX0JBTkRfTVNLICAgIGNwdV90b19sZTMyKDEgPDwgMTMpCi0vKiByeCByZXNwb25zZSB0byBob3N0IHdpdGggOC1ieXRlIFRTRgotKiAoYWNjb3JkaW5nIHRvIE9OX0FJUiBkZWFzc2VydGlvbikgKi8KLSNkZWZpbmUgUlhPTl9GTEdfVFNGMkhPU1RfTVNLICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDE1KQotCi0vKiByeF9jb25maWcgZmlsdGVyIGZsYWdzICovCi0vKiBhY2NlcHQgYWxsIGRhdGEgZnJhbWVzICovCi0jZGVmaW5lIFJYT05fRklMVEVSX1BST01JU0NfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAwKQotLyogcGFzcyBjb250cm9sICYgbWFuYWdlbWVudCB0byBob3N0ICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAxKQotLyogYWNjZXB0IG11bHRpLWNhc3QgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0sgICAgICBjcHVfdG9fbGUzMigxIDw8IDIpCi0vKiBkb24ndCBkZWNyeXB0IHVuaS1jYXN0IGZyYW1lcyAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0sgICAgIGNwdV90b19sZTMyKDEgPDwgMykKLS8qIGRvbid0IGRlY3J5cHQgbXVsdGktY2FzdCBmcmFtZXMgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfRElTX0dSUF9ERUNSWVBUX01TSyBjcHVfdG9fbGUzMigxIDw8IDQpCi0vKiBTVEEgaXMgYXNzb2NpYXRlZCAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgNSkKLS8qIHRyYW5zZmVyIHRvIGhvc3Qgbm9uIGJzc2lkIGJlYWNvbnMgaW4gYXNzb2NpYXRlZCBzdGF0ZSAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyAgICAgIGNwdV90b19sZTMyKDEgPDwgNikKLQotLyoqCi0gKiBSRVBMWV9SWE9OID0gMHgxMCAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIFJYT04gdHVuZXMgdGhlIHJhZGlvIHR1bmVyIHRvIGEgc2VydmljZSBjaGFubmVsLCBhbmQgc2V0cyB1cCBhIG51bWJlcgotICogb2YgcGFyYW1ldGVycyB0aGF0IGFyZSB1c2VkIHByaW1hcmlseSBmb3IgUngsIGJ1dCBhbHNvIGZvciBUeCBvcGVyYXRpb25zLgotICoKLSAqIE5PVEU6ICBXaGVuIHR1bmluZyB0byBhIG5ldyBjaGFubmVsLCBkcml2ZXIgbXVzdCBzZXQgdGhlCi0gKiAgICAgICAgUlhPTl9GSUxURVJfQVNTT0NfTVNLIHRvIDAuICBUaGlzIHdpbGwgY2xlYXIgc3RhdGlvbi1kZXBlbmRlbnQKLSAqICAgICAgICBpbmZvIHdpdGhpbiB0aGUgZGV2aWNlLCBpbmNsdWRpbmcgdGhlIHN0YXRpb24gdGFibGVzLCB0eCByZXRyeQotICogICAgICAgIHJhdGUgdGFibGVzLCBhbmQgdHhwb3dlciB0YWJsZXMuICBEcml2ZXIgbXVzdCBidWlsZCBhIG5ldyBzdGF0aW9uCi0gKiAgICAgICAgdGFibGUgYW5kIHR4cG93ZXIgdGFibGUgYmVmb3JlIHRyYW5zbWl0dGluZyBhbnl0aGluZyBvbiB0aGUgUlhPTgotICogICAgICAgIGNoYW5uZWwuCi0gKgotICogTk9URTogIEFsbCBSWE9OcyB3aXBlIGNsZWFuIHRoZSBpbnRlcm5hbCB0eHBvd2VyIHRhYmxlLiAgRHJpdmVyIG11c3QKLSAqICAgICAgICBpc3N1ZSBhIG5ldyBSRVBMWV9UWF9QV1JfVEFCTEVfQ01EIGFmdGVyIGVhY2ggUkVQTFlfUlhPTiAoMHgxMCksCi0gKiAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIFJYT05fRklMVEVSX0FTU09DX01TSyBpcyBzZXQuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHsKLQl1OCBub2RlX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMTsKLQl1OCBic3NpZF9hZGRyWzZdOwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JdTggd2xhcF9ic3NpZF9hZGRyWzZdOwotCV9fbGUxNiByZXNlcnZlZDM7Ci0JdTggZGV2X3R5cGU7Ci0JdTggYWlyX3Byb3BhZ2F0aW9uOwotCV9fbGUxNiByZXNlcnZlZDQ7Ci0JdTggb2ZkbV9iYXNpY19yYXRlczsKLQl1OCBjY2tfYmFzaWNfcmF0ZXM7Ci0JX19sZTE2IGFzc29jX2lkOwotCV9fbGUzMiBmbGFnczsKLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUxNiByZXNlcnZlZDU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIGZpbHRlcl9mbGFnczsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1JYT05fVElNSU5HID0gMHgxNCAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kIHsKLQl1bmlvbiB0c2YgdGltZXN0YW1wOwotCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7Ci0JX19sZTE2IGF0aW1fd2luZG93OwotCV9fbGUzMiBiZWFjb25faW5pdF92YWw7Ci0JX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX0NIQU5ORUxfU1dJVENIID0gMHg3MiAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3N3aXRjaF9jbWQgewotCXU4IGJhbmQ7Ci0JdTggZXhwZWN0X2JlYWNvbjsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMzIgcnhvbl9mbGFnczsKLQlfX2xlMzIgcnhvbl9maWx0ZXJfZmxhZ3M7Ci0JX19sZTMyIHN3aXRjaF90aW1lOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHBvd2VyW0lXTF9NQVhfUkFURVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT04gPSAweDczIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotc3RydWN0IGl3bDM5NDVfY3NhX25vdGlmaWNhdGlvbiB7Ci0JX19sZTE2IGJhbmQ7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTMyIHN0YXR1czsJCS8qIDAgLSBPSywgMSAtIGZhaWwgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMikKLSAqIFF1YWxpdHktb2YtU2VydmljZSAoUU9TKSBDb21tYW5kcyAmIFJlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogc3RydWN0IGl3bF9hY19xb3MgLS0gUU9TIHRpbWluZyBwYXJhbXMgZm9yIFJFUExZX1FPU19QQVJBTQotICogT25lIGZvciBlYWNoIG9mIDQgRURDQSBhY2Nlc3MgY2F0ZWdvcmllcyBpbiBzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZAotICoKLSAqIEBjd19taW46IENvbnRlbnRpb24gd2luZG93LCBzdGFydCB2YWx1ZSBpbiBudW1iZXJzIG9mIHNsb3RzLgotICogICAgICAgICAgU2hvdWxkIGJlIGEgcG93ZXItb2YtMiwgbWludXMgMS4gIERldmljZSdzIGRlZmF1bHQgaXMgMHgwZi4KLSAqIEBjd19tYXg6IENvbnRlbnRpb24gd2luZG93LCBtYXggdmFsdWUgaW4gbnVtYmVycyBvZiBzbG90cy4KLSAqICAgICAgICAgIFNob3VsZCBiZSBhIHBvd2VyLW9mLTIsIG1pbnVzIDEuICBEZXZpY2UncyBkZWZhdWx0IGlzIDB4M2YuCi0gKiBAYWlmc246ICBOdW1iZXIgb2Ygc2xvdHMgaW4gQXJiaXRyYXRpb24gSW50ZXJmcmFtZSBTcGFjZSAoYmVmb3JlCi0gKiAgICAgICAgICBwZXJmb3JtaW5nIHJhbmRvbSBiYWNrb2ZmIHRpbWluZyBwcmlvciB0byBUeCkuICBEZXZpY2UgZGVmYXVsdCAxLgotICogQGVkY2FfdHhvcDogIExlbmd0aCBvZiBUeCBvcHBvcnR1bml0eSwgaW4gdVNlY3MuICBEZXZpY2UgZGVmYXVsdCBpcyAwLgotICoKLSAqIERldmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jcmVhc2UgY29udGVudGlvbiB3aW5kb3cgYnkgKDIqQ1cpICsgMSBmb3IgZWFjaAotICogdHJhbnNtaXNzaW9uIHJldHJ5LiAgRGV2aWNlIHVzZXMgY3dfbWF4IGFzIGEgYml0IG1hc2ssIEFORGVkIHdpdGggbmV3IENXCi0gKiB2YWx1ZSwgdG8gY2FwIHRoZSBDVyB2YWx1ZS4KLSAqLwotc3RydWN0IGl3bDM5NDVfYWNfcW9zIHsKLQlfX2xlMTYgY3dfbWluOwotCV9fbGUxNiBjd19tYXg7Ci0JdTggYWlmc247Ci0JdTggcmVzZXJ2ZWQxOwotCV9fbGUxNiBlZGNhX3R4b3A7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogUW9TIGZsYWdzIGRlZmluZXMgKi8KLSNkZWZpbmUgUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0sJY3B1X3RvX2xlMzIoMHgwMSkKLSNkZWZpbmUgUU9TX1BBUkFNX0ZMR19UR05fTVNLCQljcHVfdG9fbGUzMigweDAyKQotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0sJY3B1X3RvX2xlMzIoMHgxMCkKLQotLyogTnVtYmVyIG9mIEFjY2VzcyBDYXRlZ29yaWVzIChBQykgKEVEQ0EpLCBxdWV1ZXMgMC4uMyAqLwotI2RlZmluZSBBQ19OVU0gICAgICAgICAgICAgICAgNAotCi0vKgotICogUkVQTFlfUU9TX1BBUkFNID0gMHgxMyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIFRoaXMgY29tbWFuZCBzZXRzIHVwIHRpbWluZ3MgZm9yIGVhY2ggb2YgdGhlIDQgcHJpb3JpdGl6ZWQgRURDQSBUeCBGSUZPcwotICogMDogQmFja2dyb3VuZCwgMTogQmVzdCBFZmZvcnQsIDI6IFZpZGVvLCAzOiBWb2ljZS4KLSAqLwotc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kIHsKLQlfX2xlMzIgcW9zX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X2FjX3FvcyBhY1tBQ19OVU1dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgzKQotICogQWRkL01vZGlmeSBTdGF0aW9ucyBDb21tYW5kcyAmIFJlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogTXVsdGkgc3RhdGlvbiBzdXBwb3J0Ci0gKi8KLQotLyogU3BlY2lhbCwgZGVkaWNhdGVkIGxvY2F0aW9ucyB3aXRoaW4gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLwotI2RlZmluZQlJV0xfQVBfSUQJCTAKLSNkZWZpbmUgSVdMX01VTFRJQ0FTVF9JRAkxCi0jZGVmaW5lCUlXTF9TVEFfSUQJCTIKLSNkZWZpbmUJSVdMMzk0NV9CUk9BRENBU1RfSUQJMjQKLSNkZWZpbmUgSVdMMzk0NV9TVEFUSU9OX0NPVU5UCTI1Ci0KLSNkZWZpbmUJSVdMX1NUQVRJT05fQ09VTlQJMzIgCS8qIE1BWCgzOTQ1LDQ5NjUpKi8KLSNkZWZpbmUJSVdMX0lOVkFMSURfU1RBVElPTiAJMjU1Ci0KLSNkZWZpbmUgU1RBX0ZMR19UWF9SQVRFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyKTsKLSNkZWZpbmUgU1RBX0ZMR19QV1JfU0FWRV9NU0sJCWNwdV90b19sZTMyKDEgPDwgOCk7Ci0KLS8qIFVzZSBpbiBtb2RlIGZpZWxkLiAgMTogbW9kaWZ5IGV4aXN0aW5nIGVudHJ5LCAwOiBhZGQgbmV3IHN0YXRpb24gZW50cnkgKi8KLSNkZWZpbmUgU1RBX0NPTlRST0xfTU9ESUZZX01TSwkJMHgwMQotCi0vKiBrZXkgZmxhZ3MgX19sZTE2Ki8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfRU5DUllQVF9NU0sJY3B1X3RvX2xlMTYoMHgwMDA3KQotI2RlZmluZSBTVEFfS0VZX0ZMR19OT19FTkMJY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBTVEFfS0VZX0ZMR19XRVAJCWNwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgU1RBX0tFWV9GTEdfQ0NNUAljcHVfdG9fbGUxNigweDAwMDIpCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1RLSVAJY3B1X3RvX2xlMTYoMHgwMDAzKQotCi0jZGVmaW5lIFNUQV9LRVlfRkxHX0tFWUlEX1BPUwk4Ci0jZGVmaW5lIFNUQV9LRVlfRkxHX0lOVkFMSUQgCWNwdV90b19sZTE2KDB4MDgwMCkKLS8qIHdlcCBrZXkgaXMgZWl0aGVyIGZyb20gZ2xvYmFsIGtleSAoMCkgb3IgZnJvbSBzdGF0aW9uIGluZm8gYXJyYXkgKDEpICovCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1dFUF9LRVlfTUFQX01TSyAgY3B1X3RvX2xlMTYoMHgwMDA4KQotCi0vKiB3ZXAga2V5IGluIFNUQTogNS1ieXRlcyAoMCkgb3IgMTMtYnl0ZXMgKDEpICovCi0jZGVmaW5lIFNUQV9LRVlfRkxHX0tFWV9TSVpFX01TSyAgICAgY3B1X3RvX2xlMTYoMHgxMDAwKQotI2RlZmluZSBTVEFfS0VZX01VTFRJQ0FTVF9NU0sgICAgICAgIGNwdV90b19sZTE2KDB4NDAwMCkKLQotLyogRmxhZ3MgaW5kaWNhdGUgd2hldGhlciB0byBtb2RpZnkgdnMuIGRvbid0IGNoYW5nZSB2YXJpb3VzIHN0YXRpb24gcGFyYW1zICovCi0jZGVmaW5lCVNUQV9NT0RJRllfS0VZX01BU0sJCTB4MDEKLSNkZWZpbmUJU1RBX01PRElGWV9USURfRElTQUJMRV9UWAkweDAyCi0jZGVmaW5lCVNUQV9NT0RJRllfVFhfUkFURV9NU0sJCTB4MDQKLQotLyoKLSAqIEFudGVubmEgbWFza3M6Ci0gKiBiaXQxNDoxNSAwMSBCIGluYWN0aXZlLCBBIGFjdGl2ZQotICogICAgICAgICAgMTAgQiBhY3RpdmUsIEEgaW5hY3RpdmUKLSAqICAgICAgICAgIDExIEJvdGggYWN0aXZlCi0gKi8KLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfUE9TCTE0Ci0jZGVmaW5lIFJBVEVfTUNTX0FOVF9CX1BPUwkxNQotI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sJMHg0MDAwCi0jZGVmaW5lIFJBVEVfTUNTX0FOVF9CX01TSwkweDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCX01TSwkweGMwMDAKLQotc3RydWN0IGl3bDM5NDVfa2V5aW5mbyB7Ci0JX19sZTE2IGtleV9mbGFnczsKLQl1OCB0a2lwX3J4X3RzY19ieXRlMjsJLyogVFNDWzJdIGZvciBrZXkgbWl4IHBoMSBkZXRlY3Rpb24gKi8KLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IHRraXBfcnhfdHRha1s1XTsJLyogMTAtYnl0ZSB1bmljYXN0IFRLSVAgVFRBSyAqLwotCXU4IGtleV9vZmZzZXQ7Ci0JdTggcmVzZXJ2ZWQyOwotCXU4IGtleVsxNl07CQkvKiAxNi1ieXRlIHVuaWNhc3QgZGVjcnlwdGlvbiBrZXkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzdGFfaWRfbW9kaWZ5Ci0gKiBAYWRkcltFVEhfQUxFTl06IHN0YXRpb24ncyBNQUMgYWRkcmVzcwotICogQHN0YV9pZDogaW5kZXggb2Ygc3RhdGlvbiBpbiB1Q29kZSdzIHN0YXRpb24gdGFibGUKLSAqIEBtb2RpZnlfbWFzazogU1RBX01PRElGWV8qLCAxOiBtb2RpZnksIDA6IGRvbid0IGNoYW5nZQotICoKLSAqIERyaXZlciBzZWxlY3RzIHVudXNlZCB0YWJsZSBpbmRleCB3aGVuIGFkZGluZyBuZXcgc3RhdGlvbiwKLSAqIG9yIHRoZSBpbmRleCB0byBhIHByZS1leGlzdGluZyBzdGF0aW9uIGVudHJ5IHdoZW4gbW9kaWZ5aW5nIHRoYXQgc3RhdGlvbi4KLSAqIFNvbWUgaW5kZXhlcyBoYXZlIHNwZWNpYWwgcHVycG9zZXMgKElXTF9BUF9JRCwgaW5kZXggMCwgaXMgZm9yIEFQKS4KLSAqCi0gKiBtb2RpZnlfbWFzayBmbGFncyBzZWxlY3Qgd2hpY2ggcGFyYW1ldGVycyB0byBtb2RpZnkgdnMuIGxlYXZlIGFsb25lLgotICovCi1zdHJ1Y3Qgc3RhX2lkX21vZGlmeSB7Ci0JdTggYWRkcltFVEhfQUxFTl07Ci0JX19sZTE2IHJlc2VydmVkMTsKLQl1OCBzdGFfaWQ7Ci0JdTggbW9kaWZ5X21hc2s7Ci0JX19sZTE2IHJlc2VydmVkMjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQUREX1NUQSA9IDB4MTggKGNvbW1hbmQpCi0gKgotICogVGhlIGRldmljZSBjb250YWlucyBhbiBpbnRlcm5hbCB0YWJsZSBvZiBwZXItc3RhdGlvbiBpbmZvcm1hdGlvbiwKLSAqIHdpdGggaW5mbyBvbiBzZWN1cml0eSBrZXlzLCBhZ2dyZWdhdGlvbiBwYXJhbWV0ZXJzLCBhbmQgVHggcmF0ZXMgZm9yCi0gKiBpbml0aWFsIFR4IGF0dGVtcHQgYW5kIGFueSByZXRyaWVzICg0OTY1IHVzZXMgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCwKLSAqIDM5NDUgdXNlcyBSRVBMWV9SQVRFX1NDQUxFIHRvIHNldCB1cCByYXRlIHRhYmxlcykuCi0gKgotICogUkVQTFlfQUREX1NUQSBzZXRzIHVwIHRoZSB0YWJsZSBlbnRyeSBmb3Igb25lIHN0YXRpb24sIGVpdGhlciBjcmVhdGluZwotICogYSBuZXcgZW50cnksIG9yIG1vZGlmeWluZyBhIHByZS1leGlzdGluZyBvbmUuCi0gKgotICogTk9URTogIFJYT04gY29tbWFuZCAod2l0aG91dCAiYXNzb2NpYXRlZCIgYml0IHNldCkgd2lwZXMgdGhlIHN0YXRpb24gdGFibGUKLSAqICAgICAgICBjbGVhbi4gIE1vdmluZyBpbnRvIFJGX0tJTEwgc3RhdGUgZG9lcyB0aGlzIGFsc28uICBEcml2ZXIgbXVzdCBzZXQgdXAKLSAqICAgICAgICBuZXcgc3RhdGlvbiB0YWJsZSBiZWZvcmUgdHJhbnNtaXR0aW5nIGFueXRoaW5nIG9uIHRoZSBSWE9OIGNoYW5uZWwKLSAqICAgICAgICAoZXhjZXB0IGFjdGl2ZSBzY2FucyBvciBhY3RpdmUgbWVhc3VyZW1lbnRzOyB0aG9zZSBjb21tYW5kcyBjYXJyeQotICogICAgICAgIHRoZWlyIG93biB0eHBvd2VyL3JhdGUgc2V0dXAgZGF0YSkuCi0gKgotICogICAgICAgIFdoZW4gZ2V0dGluZyBzdGFydGVkIG9uIGEgbmV3IGNoYW5uZWwsIGRyaXZlciBtdXN0IHNldCB1cCB0aGUKLSAqICAgICAgICBJV0xfQlJPQURDQVNUX0lEIGVudHJ5IChsYXN0IGVudHJ5IGluIHRoZSB0YWJsZSkuICBGb3IgYSBjbGllbnQKLSAqICAgICAgICBzdGF0aW9uIGluIGEgQlNTLCBvbmNlIGFuIEFQIGlzIHNlbGVjdGVkLCBkcml2ZXIgc2V0cyB1cCB0aGUgQVAgU1RBCi0gKiAgICAgICAgaW4gdGhlIElXTF9BUF9JRCBlbnRyeSAoMXN0IGVudHJ5IGluIHRoZSB0YWJsZSkuICBCUk9BRENBU1QgYW5kIEFQCi0gKiAgICAgICAgYXJlIGFsbCB0aGF0IGFyZSBuZWVkZWQgZm9yIGEgQlNTIGNsaWVudCBzdGF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwotICogICAgICAgIHVzZWQgYXMgQVAsIG9yIGluIGFuIElCU1MgbmV0d29yaywgZHJpdmVyIG11c3Qgc2V0IHVwIHN0YXRpb24gdGFibGUKLSAqICAgICAgICBlbnRyaWVzIGZvciBhbGwgU1RBcyBpbiBuZXR3b3JrLCBzdGFydGluZyB3aXRoIGluZGV4IElXTF9TVEFfSUQuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgewotCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLwotCXU4IHJlc2VydmVkWzNdOwotCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9rZXlpbmZvIGtleTsKLQlfX2xlMzIgc3RhdGlvbl9mbGFnczsJCS8qIFNUQV9GTEdfKiAqLwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzX21zazsJLyogU1RBX0ZMR18qICovCi0KLQkvKiBiaXQgZmllbGQgdG8gZGlzYWJsZSAoMSkgb3IgZW5hYmxlICgwKSBUeCBmb3IgVHJhZmZpYyBJRCAoVElEKQotCSAqIGNvcnJlc3BvbmRpbmcgdG8gYml0IChlLmcuIGJpdCA1IGNvbnRyb2xzIFRJRCA1KS4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfVElEX0RJU0FCTEVfVFggdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IHRpZF9kaXNhYmxlX3R4OwotCi0JX19sZTE2IHJhdGVfbl9mbGFnczsKLQotCS8qIFRJRCBmb3Igd2hpY2ggdG8gYWRkIGJsb2NrLWFjayBzdXBwb3J0LgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLwotCXU4IGFkZF9pbW1lZGlhdGVfYmFfdGlkOwotCi0JLyogVElEIGZvciB3aGljaCB0byByZW1vdmUgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggcmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZm9yIGFkZGVkIGJsb2NrLWFjayBzdXBwb3J0LgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLwotCV9fbGUxNiBhZGRfaW1tZWRpYXRlX2JhX3NzbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIEFERF9TVEFfU1VDQ0VTU19NU0sJCTB4MQotI2RlZmluZSBBRERfU1RBX05PX1JPT01fSU5fVEFCTEUJMHgyCi0jZGVmaW5lIEFERF9TVEFfTk9fQkxPQ0tfQUNLX1JFU09VUkNFCTB4NAotLyoKLSAqIFJFUExZX0FERF9TVEEgPSAweDE4IChyZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfYWRkX3N0YV9yZXNwIHsKLQl1OCBzdGF0dXM7CS8qIEFERF9TVEFfKiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDQpCi0gKiBSeCBSZXNwb25zZXM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyB7Ci0JdTggcGh5X2NvdW50OwotCXU4IGlkOwotCXU4IHJzc2k7Ci0JdTggYWdjOwotCV9fbGUxNiBzaWdfYXZnOwotCV9fbGUxNiBub2lzZV9kaWZmOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMTYgcGh5X2ZsYWdzOwotCXU4IHJlc2VydmVkMTsKLQl1OCByYXRlOwotCV9fbGUxNiBsZW47Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IJY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVwljcHVfdG9fbGUzMigxIDw8IDEpCi0KLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSwljcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTU9EX0NDS19NU0sJCWNwdV90b19sZTE2KDEgPDwgMSkKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19TSE9SVF9QUkVBTUJMRV9NU0sJY3B1X3RvX2xlMTYoMSA8PCAyKQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX05BUlJPV19CQU5EX01TSwljcHVfdG9fbGUxNigxIDw8IDMpCi0jZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9NU0sJCWNwdV90b19sZTE2KDB4ZjApCi0KLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0sJKDB4NyA8PCA4KQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX05PTkUJKDB4MCA8PCA4KQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1dFUAkoMHgxIDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUAkoMHgyIDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUAkoMHgzIDw8IDgpCi0KLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLCSgweDMgPDwgMTEpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9UX0RFQ1JZUFQJKDB4MCA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LCSgweDMgPDwgMTEpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMJKDB4MSA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19CQURfS0VZX1RUQUsJKDB4MiA8PCAxMSkKLQotc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIHsKLQlfX2xlMzIgc3RhdHVzOwotCV9fbGU2NCB0aW1lc3RhbXA7Ci0JX19sZTMyIGJlYWNvbl90aW1lc3RhbXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZXzM5NDVfUlggPSAweDFiIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIE5PVEU6ICBETyBOT1QgZGVyZWZlcmVuY2UgZnJvbSBjYXN0cyB0byB0aGlzIHN0cnVjdHVyZQotICogSXQgaXMgcHJvdmlkZWQgb25seSBmb3IgY2FsY3VsYXRpbmcgbWluaW11bSBkYXRhIHNldCBzaXplLgotICogVGhlIGFjdHVhbCBvZmZzZXRzIG9mIHRoZSBoZHIgYW5kIGVuZCBhcmUgZHluYW1pYyBiYXNlZCBvbgotICogc3RhdHMucGh5X2NvdW50Ci0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyBzdGF0czsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgaGRyOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2VuZCBlbmQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDUpCi0gKiBUeCBDb21tYW5kcyAmIFJlc3BvbnNlczoKLSAqCi0gKiBEcml2ZXIgbXVzdCBwbGFjZSBlYWNoIFJFUExZX1RYIGNvbW1hbmQgaW50byBvbmUgb2YgdGhlIHByaW9yaXRpemVkIFR4Ci0gKiBxdWV1ZXMgaW4gaG9zdCBEUkFNLCBzaGFyZWQgYmV0d2VlbiBkcml2ZXIgYW5kIGRldmljZS4gIFdoZW4gdGhlIGRldmljZSdzCi0gKiBUeCBzY2hlZHVsZXIgYW5kIHVDb2RlIGFyZSBwcmVwYXJpbmcgdG8gdHJhbnNtaXQsIHRoZSBkZXZpY2UgcHVsbHMgdGhlCi0gKiBUeCBjb21tYW5kIG92ZXIgdGhlIFBDSSBidXMgdmlhIG9uZSBvZiB0aGUgZGV2aWNlJ3MgVHggRE1BIGNoYW5uZWxzLAotICogdG8gZmlsbCBhbiBpbnRlcm5hbCBGSUZPIGZyb20gd2hpY2ggZGF0YSB3aWxsIGJlIHRyYW5zbWl0dGVkLgotICoKLSAqIHVDb2RlIGhhbmRsZXMgYWxsIHRpbWluZyBhbmQgcHJvdG9jb2wgcmVsYXRlZCB0byBjb250cm9sIGZyYW1lcwotICogKFJUUy9DVFMvQUNLKSwgYmFzZWQgb24gZmxhZ3MgaW4gdGhlIFR4IGNvbW1hbmQuCi0gKgotICogdUNvZGUgaGFuZGxlcyByZXRyeWluZyBUeCB3aGVuIGFuIEFDSyBpcyBleHBlY3RlZCBidXQgbm90IHJlY2VpdmVkLgotICogVGhpcyBpbmNsdWRlcyB0cnlpbmcgbG93ZXIgZGF0YSByYXRlcyB0aGFuIHRoZSBvbmUgcmVxdWVzdGVkIGluIHRoZSBUeAotICogY29tbWFuZCwgYXMgc2V0IHVwIGJ5IHRoZSBSRVBMWV9SQVRFX1NDQUxFIChmb3IgMzk0NSkgb3IKLSAqIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQgKDQ5NjUpLgotICoKLSAqIERyaXZlciBzZXRzIHVwIHRyYW5zbWl0IHBvd2VyIGZvciB2YXJpb3VzIHJhdGVzIHZpYSBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELgotICogVGhpcyBjb21tYW5kIG11c3QgYmUgZXhlY3V0ZWQgYWZ0ZXIgZXZlcnkgUlhPTiBjb21tYW5kLCBiZWZvcmUgVHggY2FuIG9jY3VyLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBSRVBMWV9UWCBUeCBmbGFncyBmaWVsZCAqLwotCi0vKiAxOiBVc2UgUmVxdWVzdC1Uby1TZW5kIHByb3RvY29sIGJlZm9yZSB0aGlzIGZyYW1lLgotICogTXV0dWFsbHkgZXhjbHVzaXZlIHZzLiBUWF9DTURfRkxHX0NUU19NU0suICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfUlRTX01TSyBjcHVfdG9fbGUzMigxIDw8IDEpCi0KLS8qIDE6IFRyYW5zbWl0IENsZWFyLVRvLVNlbmQgdG8gc2VsZiBiZWZvcmUgdGhpcyBmcmFtZS4KLSAqIERyaXZlciBzaG91bGQgc2V0IHRoaXMgZm9yIEFVVEgvREVBVVRIL0FTU09DLVJFUS9SRUFTU09DIG1nbW50IGZyYW1lcy4KLSAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB2cy4gVFhfQ01EX0ZMR19SVFNfTVNLLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0NUU19NU0sgY3B1X3RvX2xlMzIoMSA8PCAyKQotCi0vKiAxOiBFeHBlY3QgQUNLIGZyb20gcmVjZWl2aW5nIHN0YXRpb24KLSAqIDA6IERvbid0IGV4cGVjdCBBQ0sgKE1BQyBoZWFkZXIncyBkdXJhdGlvbiBmaWVsZCBzL2IgMCkKLSAqIFNldCB0aGlzIGZvciB1bmljYXN0IGZyYW1lcywgYnV0IG5vdCBicm9hZGNhc3QvbXVsdGljYXN0LiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0FDS19NU0sgY3B1X3RvX2xlMzIoMSA8PCAzKQotCi0vKiAxOiBVc2UgcmF0ZSBzY2FsZSB0YWJsZSAoc2VlIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQpLgotICogICAgVHggY29tbWFuZCdzIGluaXRpYWxfcmF0ZV9pbmRleCBpbmRpY2F0ZXMgZmlyc3QgcmF0ZSB0byB0cnk7Ci0gKiAgICB1Q29kZSB3YWxrcyB0aHJvdWdoIHRhYmxlIGZvciBhZGRpdGlvbmFsIFR4IGF0dGVtcHRzLgotICogMDogVXNlIFR4IHJhdGUvTUNTIGZyb20gVHggY29tbWFuZCdzIHJhdGVfbl9mbGFncyBmaWVsZC4KLSAqICAgIFRoaXMgcmF0ZSB3aWxsIGJlIHVzZWQgZm9yIGFsbCBUeCBhdHRlbXB0czsgaXQgd2lsbCBub3QgYmUgc2NhbGVkLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX1NUQV9SQVRFX01TSyBjcHVfdG9fbGUzMigxIDw8IDQpCi0KLS8qIDE6IEV4cGVjdCBpbW1lZGlhdGUgYmxvY2stYWNrLgotICogU2V0IHdoZW4gVHhpbmcgYSBibG9jay1hY2sgcmVxdWVzdCBmcmFtZS4gIEFsc28gc2V0IFRYX0NNRF9GTEdfQUNLX01TSy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19JTU1fQkFfUlNQX01BU0sgIGNwdV90b19sZTMyKDEgPDwgNikKLQotLyogMTogRnJhbWUgcmVxdWlyZXMgZnVsbCBUeC1PcCBwcm90ZWN0aW9uLgotICogU2V0IHRoaXMgaWYgZWl0aGVyIFJUUyBvciBDVFMgVHggRmxhZyBnZXRzIHNldC4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19GVUxMX1RYT1BfUFJPVF9NU0sgY3B1X3RvX2xlMzIoMSA8PCA3KQotCi0vKiBUeCBhbnRlbm5hIHNlbGVjdGlvbiBmaWVsZDsgdXNlZCBvbmx5IGZvciAzOTQ1LCByZXNlcnZlZCAoMCkgZm9yIDQ5NjUuCi0gKiBTZXQgZmllbGQgdG8gIjAiIHRvIGFsbG93IDM5NDUgdUNvZGUgdG8gc2VsZWN0IGFudGVubmEgKG5vcm1hbCB1c2FnZSkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQU5UX1NFTF9NU0sgY3B1X3RvX2xlMzIoMHhmMDApCi0jZGVmaW5lIFRYX0NNRF9GTEdfQU5UX0FfTVNLIGNwdV90b19sZTMyKDEgPDwgOCkKLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfQl9NU0sgY3B1X3RvX2xlMzIoMSA8PCA5KQotCi0vKiAxOiBJZ25vcmUgQmx1ZXRvb3RoIHByaW9yaXR5IGZvciB0aGlzIGZyYW1lLgotICogMDogRGVsYXkgVHggdW50aWwgQmx1ZXRvb3RoIGRldmljZSBpcyBkb25lIChub3JtYWwgdXNhZ2UpLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0JUX0RJU19NU0sgY3B1X3RvX2xlMzIoMSA8PCAxMikKLQotLyogMTogdUNvZGUgb3ZlcnJpZGVzIHNlcXVlbmNlIGNvbnRyb2wgZmllbGQgaW4gTUFDIGhlYWRlci4KLSAqIDA6IERyaXZlciBwcm92aWRlcyBzZXF1ZW5jZSBjb250cm9sIGZpZWxkIGluIE1BQyBoZWFkZXIuCi0gKiBTZXQgdGhpcyBmb3IgbWFuYWdlbWVudCBmcmFtZXMsIG5vbi1RT1MgZGF0YSBmcmFtZXMsIG5vbi11bmljYXN0IGZyYW1lcywKLSAqIGFuZCBhbHNvIGluIFR4IGNvbW1hbmQgZW1iZWRkZWQgaW4gUkVQTFlfU0NBTl9DTUQgZm9yIGFjdGl2ZSBzY2Fucy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19TRVFfQ1RMX01TSyBjcHVfdG9fbGUzMigxIDw8IDEzKQotCi0vKiAxOiBUaGlzIGZyYW1lIGlzIG5vbi1sYXN0IE1QRFU7IG1vcmUgZnJhZ21lbnRzIGFyZSBjb21pbmcuCi0gKiAwOiBMYXN0IGZyYWdtZW50LCBvciBub3QgdXNpbmcgZnJhZ21lbnRhdGlvbi4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19NT1JFX0ZSQUdfTVNLIGNwdV90b19sZTMyKDEgPDwgMTQpCi0KLS8qIDE6IHVDb2RlIGNhbGN1bGF0ZXMgYW5kIGluc2VydHMgVGltZXN0YW1wIEZ1bmN0aW9uIChUU0YpIGluIG91dGdvaW5nIGZyYW1lLgotICogMDogTm8gVFNGIHJlcXVpcmVkIGluIG91dGdvaW5nIGZyYW1lLgotICogU2V0IHRoaXMgZm9yIHRyYW5zbWl0dGluZyBiZWFjb25zIGFuZCBwcm9iZSByZXNwb25zZXMuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfVFNGX01TSyBjcHVfdG9fbGUzMigxIDw8IDE2KQotCi0vKiAxOiBEcml2ZXIgaW5zZXJ0ZWQgMiBieXRlcyBwYWQgYWZ0ZXIgdGhlIE1BQyBoZWFkZXIsIGZvciAocmVxdWlyZWQpIGR3b3JkCi0gKiAgICBhbGlnbm1lbnQgb2YgZnJhbWUncyBwYXlsb2FkIGRhdGEgZmllbGQuCi0gKiAwOiBObyBwYWQKLSAqIFNldCB0aGlzIGZvciBNQUMgaGVhZGVycyB3aXRoIDI2IG9yIDMwIGJ5dGVzLCBpLmUuIHRob3NlIHdpdGggUU9TIG9yIEFERFI0Ci0gKiBmaWVsZCAoYnV0IG5vdCBib3RoKS4gIERyaXZlciBtdXN0IGFsaWduIGZyYW1lIGRhdGEgKGkuZS4gZGF0YSBmb2xsb3dpbmcKLSAqIE1BQyBoZWFkZXIpIHRvIERXT1JEIGJvdW5kYXJ5LiAqLwotI2RlZmluZSBUWF9DTURfRkxHX01IX1BBRF9NU0sgY3B1X3RvX2xlMzIoMSA8PCAyMCkKLQotLyogSENDQS1BUCAtIGRpc2FibGUgZHVyYXRpb24gb3ZlcndyaXRpbmcuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfRFVSX01TSyBjcHVfdG9fbGUzMigxIDw8IDI1KQotCi0vKgotICogVFggY29tbWFuZCBzZWN1cml0eSBjb250cm9sCi0gKi8KLSNkZWZpbmUgVFhfQ01EX1NFQ19XRVAgIAkweDAxCi0jZGVmaW5lIFRYX0NNRF9TRUNfQ0NNICAJMHgwMgotI2RlZmluZSBUWF9DTURfU0VDX1RLSVAJCTB4MDMKLSNkZWZpbmUgVFhfQ01EX1NFQ19NU0sJCTB4MDMKLSNkZWZpbmUgVFhfQ01EX1NFQ19TSElGVAk2Ci0jZGVmaW5lIFRYX0NNRF9TRUNfS0VZMTI4CTB4MDgKLQotLyoKLSAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfY21kIHsKLQkvKgotCSAqIE1QRFUgYnl0ZSBjb3VudDoKLQkgKiBNQUMgaGVhZGVyICgyNC8yNi8zMC8zMiBieXRlcykgKyAyIGJ5dGVzIHBhZCBpZiAyNi8zMCBoZWFkZXIgc2l6ZSwKLQkgKiArIDggYnl0ZSBJViBmb3IgQ0NNIG9yIFRLSVAgKG5vdCB1c2VkIGZvciBXRVApCi0JICogKyBEYXRhIHBheWxvYWQKLQkgKiArIDgtYnl0ZSBNSUMgKG5vdCB1c2VkIGZvciBDQ00vV0VQKQotCSAqIE5PVEU6ICBEb2VzIG5vdCBpbmNsdWRlIFR4IGNvbW1hbmQgYnl0ZXMsIHBvc3QtTUFDIHBhZCBieXRlcywKLQkgKiAgICAgICAgTUlDIChDQ00pIDggYnl0ZXMsIElDViAoV0VQL1RLSVAvQ0tJUCkgNCBieXRlcywgQ1JDIDQgYnl0ZXMuaQotCSAqIFJhbmdlOiAxNC0yMzQyIGJ5dGVzLgotCSAqLwotCV9fbGUxNiBsZW47Ci0KLQkvKgotCSAqIE1QRFUgb3IgTVNEVSBieXRlIGNvdW50IGZvciBuZXh0IGZyYW1lLgotCSAqIFVzZWQgZm9yIGZyYWdtZW50YXRpb24gYW5kIGJ1cnN0aW5nLCBidXQgbm90IDExbiBhZ2dyZWdhdGlvbi4KLQkgKiBTYW1lIGFzICJsZW4iLCBidXQgZm9yIG5leHQgZnJhbWUuICBTZXQgdG8gMCBpZiBub3QgYXBwbGljYWJsZS4KLQkgKi8KLQlfX2xlMTYgbmV4dF9mcmFtZV9sZW47Ci0KLQlfX2xlMzIgdHhfZmxhZ3M7CS8qIFRYX0NNRF9GTEdfKiAqLwotCi0JdTggcmF0ZTsKLQotCS8qIEluZGV4IG9mIHJlY2lwaWVudCBzdGF0aW9uIGluIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZSAqLwotCXU4IHN0YV9pZDsKLQl1OCB0aWRfdHNwZWM7Ci0JdTggc2VjX2N0bDsKLQl1OCBrZXlbMTZdOwotCXVuaW9uIHsKLQkJdTggYnl0ZVs4XTsKLQkJX19sZTE2IHdvcmRbNF07Ci0JCV9fbGUzMiBkd1syXTsKLQl9IHRraXBfbWljOwotCV9fbGUzMiBuZXh0X2ZyYW1lX2luZm87Ci0JdW5pb24gewotCQlfX2xlMzIgbGlmZV90aW1lOwotCQlfX2xlMzIgYXR0ZW1wdDsKLQl9IHN0b3BfdGltZTsKLQl1OCBzdXBwX3JhdGVzWzJdOwotCXU4IHJ0c19yZXRyeV9saW1pdDsJLypieXRlIDUwICovCi0JdTggZGF0YV9yZXRyeV9saW1pdDsJLypieXRlIDUxICovCi0JdW5pb24gewotCQlfX2xlMTYgcG1fZnJhbWVfdGltZW91dDsKLQkJX19sZTE2IGF0dGVtcHRfZHVyYXRpb247Ci0JfSB0aW1lb3V0OwotCi0JLyoKLQkgKiBEdXJhdGlvbiBvZiBFRENBIGJ1cnN0IFR4IE9wcG9ydHVuaXR5LCBpbiAzMi11c2VjIHVuaXRzLgotCSAqIFNldCB0aGlzIGlmIHR4b3AgdGltZSBpcyBub3Qgc3BlY2lmaWVkIGJ5IEhDQ0EgcHJvdG9jb2wgKGUuZy4gYnkgQVApLgotCSAqLwotCV9fbGUxNiBkcml2ZXJfdHhvcDsKLQotCS8qCi0JICogTUFDIGhlYWRlciBnb2VzIGhlcmUsIGZvbGxvd2VkIGJ5IDIgYnl0ZXMgcGFkZGluZyBpZiBNQUMgaGVhZGVyCi0JICogbGVuZ3RoIGlzIDI2IG9yIDMwIGJ5dGVzLCBmb2xsb3dlZCBieSBwYXlsb2FkIGRhdGEKLQkgKi8KLQl1OCBwYXlsb2FkWzBdOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkclswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBUWCBjb21tYW5kIHJlc3BvbnNlIGlzIHNlbnQgYWZ0ZXIgKmFsbCogdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgotICoKLSAqIE5PVEVTOgotICoKLSAqIFRYX1NUQVRVU19GQUlMX05FWFRfRlJBRwotICoKLSAqIElmIHRoZSBmcmFnbWVudCBmbGFnIGluIHRoZSBNQUMgaGVhZGVyIGZvciB0aGUgZnJhbWUgYmVpbmcgdHJhbnNtaXR0ZWQKLSAqIGlzIHNldCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IHRpbWUgdG8gdHJhbnNtaXQgdGhlIG5leHQgZnJhbWUsIHRoZQotICogVFggc3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQgd2l0aCAnVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHJy4KLSAqCi0gKiBUWF9TVEFUVVNfRklGT19VTkRFUlJVTgotICoKLSAqIEluZGljYXRlcyB0aGUgaG9zdCBkaWQgbm90IHByb3ZpZGUgYnl0ZXMgdG8gdGhlIEZJRk8gZmFzdCBlbm91Z2ggd2hpbGUKLSAqIGEgVFggd2FzIGluIHByb2dyZXNzLgotICoKLSAqIFRYX1NUQVRVU19GQUlMX01HTU5UX0FCT1JUCi0gKgotICogVGhpcyBzdGF0dXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgQUJPUlQgT04gTUdNVCBSWCBwYXJhbWV0ZXIgd2FzCi0gKiBzZXQgdG8gdHJ1ZSB3aXRoIHRoZSBUWCBjb21tYW5kLgotICoKLSAqIElmIHRoZSBNU0Igb2YgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgaXMgc2V0IHRoZW4gYW4gYWJvcnQgc2VxdWVuY2UgaXMKLSAqIHJlcXVpcmVkLiAgVGhpcyBzZXF1ZW5jZSBjb25zaXN0cyBvZiB0aGUgaG9zdCBhY3RpdmF0aW5nIHRoZSBUWCBBYm9ydAotICogY29udHJvbCBsaW5lLCBhbmQgdGhlbiB3YWl0aW5nIGZvciB0aGUgVFggQWJvcnQgY29tbWFuZCByZXNwb25zZS4gIFRoaXMKLSAqIGluZGljYXRlcyB0aGF0IGEgdGhlIGRldmljZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc21pdCBzdGF0ZSwgYW5kIHRoYXQgdGhlCi0gKiBjb21tYW5kIEZJRk8gaGFzIGJlZW4gY2xlYXJlZC4gIFRoZSBob3N0IG11c3QgdGhlbiBkZWFjdGl2YXRlIHRoZSBUWCBBYm9ydAotICogY29udHJvbCBsaW5lLiAgUmVjZWl2aW5nIGlzIHN0aWxsIGFsbG93ZWQgaW4gdGhpcyBjYXNlLgotICovCi1lbnVtIHsKLQlUWF9TVEFUVVNfU1VDQ0VTUyA9IDB4MDEsCi0JVFhfU1RBVFVTX0RJUkVDVF9ET05FID0gMHgwMiwKLQlUWF9TVEFUVVNfRkFJTF9TSE9SVF9MSU1JVCA9IDB4ODIsCi0JVFhfU1RBVFVTX0ZBSUxfTE9OR19MSU1JVCA9IDB4ODMsCi0JVFhfU1RBVFVTX0ZBSUxfRklGT19VTkRFUlJVTiA9IDB4ODQsCi0JVFhfU1RBVFVTX0ZBSUxfTUdNTlRfQUJPUlQgPSAweDg1LAotCVRYX1NUQVRVU19GQUlMX05FWFRfRlJBRyA9IDB4ODYsCi0JVFhfU1RBVFVTX0ZBSUxfTElGRV9FWFBJUkUgPSAweDg3LAotCVRYX1NUQVRVU19GQUlMX0RFU1RfUFMgPSAweDg4LAotCVRYX1NUQVRVU19GQUlMX0FCT1JURUQgPSAweDg5LAotCVRYX1NUQVRVU19GQUlMX0JUX1JFVFJZID0gMHg4YSwKLQlUWF9TVEFUVVNfRkFJTF9TVEFfSU5WQUxJRCA9IDB4OGIsCi0JVFhfU1RBVFVTX0ZBSUxfRlJBR19EUk9QUEVEID0gMHg4YywKLQlUWF9TVEFUVVNfRkFJTF9USURfRElTQUJMRSA9IDB4OGQsCi0JVFhfU1RBVFVTX0ZBSUxfRlJBTUVfRkxVU0hFRCA9IDB4OGUsCi0JVFhfU1RBVFVTX0ZBSUxfSU5TVUZGSUNJRU5UX0NGX1BPTEwgPSAweDhmLAotCVRYX1NUQVRVU19GQUlMX1RYX0xPQ0tFRCA9IDB4OTAsCi0JVFhfU1RBVFVTX0ZBSUxfTk9fQkVBQ09OX09OX1JBREFSID0gMHg5MSwKLX07Ci0KLSNkZWZpbmUJVFhfUEFDS0VUX01PREVfUkVHVUxBUgkJMHgwMDAwCi0jZGVmaW5lCVRYX1BBQ0tFVF9NT0RFX0JVUlNUX1NFUQkweDAxMDAKLSNkZWZpbmUJVFhfUEFDS0VUX01PREVfQlVSU1RfRklSU1QJMHgwMjAwCi0KLWVudW0gewotCVRYX1BPV0VSX1BBX05PVF9BQ1RJVkUgPSAweDAsCi19OwotCi1lbnVtIHsKLQlUWF9TVEFUVVNfTVNLID0gMHgwMDAwMDBmZiwJLyogYml0cyAwOjcgKi8KLQlUWF9TVEFUVVNfREVMQVlfTVNLID0gMHgwMDAwMDA0MCwKLQlUWF9TVEFUVVNfQUJPUlRfTVNLID0gMHgwMDAwMDA4MCwKLQlUWF9QQUNLRVRfTU9ERV9NU0sgPSAweDAwMDBmZjAwLAkvKiBiaXRzIDg6MTUgKi8KLQlUWF9GSUZPX05VTUJFUl9NU0sgPSAweDAwMDcwMDAwLAkvKiBiaXRzIDE2OjE4ICovCi0JVFhfUkVTRVJWRUQgPSAweDAwNzgwMDAwLAkvKiBiaXRzIDE5OjIyICovCi0JVFhfUE9XRVJfUEFfREVURUNUX01TSyA9IDB4N2Y4MDAwMDAsCS8qIGJpdHMgMjM6MzAgKi8KLQlUWF9BQk9SVF9SRVFVSVJFRF9NU0sgPSAweDgwMDAwMDAwLAkvKiBiaXRzIDMxOjMxICovCi19OwotCi0vKgotICogUkVQTFlfVFggPSAweDFjIChyZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcmVzcCB7Ci0JdTggZmFpbHVyZV9ydHM7Ci0JdTggZmFpbHVyZV9mcmFtZTsKLQl1OCBidF9raWxsX2NvdW50OwotCXU4IHJhdGU7Ci0JX19sZTMyIHdpcmVsZXNzX21lZGlhX3RpbWU7Ci0JX19sZTMyIHN0YXR1czsJCS8qIFRYIHN0YXR1cyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kIHsKLQl1OCBiYW5kOwkJLyogMDogNSBHSHosIDE6IDIuNCBHSHogKi8KLQl1OCByZXNlcnZlZDsKLQlfX2xlMTYgY2hhbm5lbDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9wZXJfcmF0ZSBwb3dlcltJV0xfTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB7Ci0JX19sZTE2IHJhdGVfbl9mbGFnczsKLQl1OCB0cnlfY250OwotCXU4IG5leHRfcmF0ZV9pbmRleDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19jbWQgLSBSYXRlIFNjYWxpbmcgQ29tbWFuZCAmIFJlc3BvbnNlCi0gKgotICogUkVQTFlfUkFURV9TQ0FMRSA9IDB4NDcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqCi0gKiBOT1RFOiBUaGUgdGFibGUgb2YgcmF0ZXMgcGFzc2VkIHRvIHRoZSB1Q29kZSB2aWEgdGhlCi0gKiBSQVRFX1NDQUxFIGNvbW1hbmQgc2V0cyB1cCB0aGUgY29ycmVzcG9uZGluZyBvcmRlciBvZgotICogcmF0ZXMgdXNlZCBmb3IgYWxsIHJlbGF0ZWQgY29tbWFuZHMsIGluY2x1ZGluZyByYXRlCi0gKiBtYXNrcywgZXRjLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IDlNQiAoUExDUCAweDBmKSBhcyB0aGUgZmlyc3QKLSAqIHJhdGUgaW4gdGhlIHJhdGUgdGFibGUsIHRoZSBiaXQgbWFzayBmb3IgdGhhdCByYXRlCi0gKiB3aGVuIHBhc3NlZCB0aHJvdWdoIG9mZG1fYmFzaWNfcmF0ZXMgb24gdGhlIFJFUExZX1JYT04KLSAqIGNvbW1hbmQgd291bGQgYmUgYml0IDAgKDEgPDwgMCkKLSAqLwotc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCB7Ci0JdTggdGFibGVfaWQ7Ci0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2luZm8gdGFibGVbSVdMX01BWF9SQVRFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX0JUX0NPTkZJRyA9IDB4OWIgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqCi0gKiAzOTQ1IGFuZCA0OTY1IHN1cHBvcnQgaGFyZHdhcmUgaGFuZHNoYWtlIHdpdGggQmx1ZXRvb3RoIGRldmljZSBvbgotICogc2FtZSBwbGF0Zm9ybS4gIEJsdWV0b290aCBkZXZpY2UgYWxlcnRzIHdpcmVsZXNzIGRldmljZSB3aGVuIGl0IHdpbGwgVHg7Ci0gKiB3aXJlbGVzcyBkZXZpY2UgY2FuIGRlbGF5IG9yIGtpbGwgaXRzIG93biBUeCB0byBhY2NvbW1vZGF0ZS4KLSAqLwotc3RydWN0IGl3bDM5NDVfYnRfY21kIHsKLQl1OCBmbGFnczsKLQl1OCBsZWFkX3RpbWU7Ci0JdTggbWF4X2tpbGw7Ci0JdTggcmVzZXJ2ZWQ7Ci0JX19sZTMyIGtpbGxfYWNrX21hc2s7Ci0JX19sZTMyIGtpbGxfY3RzX21hc2s7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDYpCi0gKiBTcGVjdHJ1bSBNYW5hZ2VtZW50ICg4MDIuMTFoKSBDb21tYW5kcywgUmVzcG9uc2VzLCBOb3RpZmljYXRpb25zOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNwZWN0cnVtIE1hbmFnZW1lbnQKLSAqLwotI2RlZmluZSBNRUFTVVJFTUVOVF9GSUxURVJfRkxBRyAoUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgICAgICAgICB8IFwKLQkJCQkgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLICAgICAgICB8IFwKLQkJCQkgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0sgICAgICB8IFwKLQkJCQkgUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLICAgICB8IFwKLQkJCQkgUlhPTl9GSUxURVJfRElTX0dSUF9ERUNSWVBUX01TSyB8IFwKLQkJCQkgUlhPTl9GSUxURVJfQVNTT0NfTVNLICAgICAgICAgICB8IFwKLQkJCQkgUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0spCi0KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVfY2hhbm5lbCB7Ci0JX19sZTMyIGR1cmF0aW9uOwkvKiBtZWFzdXJlbWVudCBkdXJhdGlvbiBpbiBleHRlbmRlZCBiZWFjb24KLQkJCQkgKiBmb3JtYXQgKi8KLQl1OCBjaGFubmVsOwkJLyogY2hhbm5lbCB0byBtZWFzdXJlICovCi0JdTggdHlwZTsJCS8qIHNlZSBlbnVtIGl3bDM5NDVfbWVhc3VyZV90eXBlICovCi0JX19sZTE2IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQgPSAweDc0IChjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9jbWQgewotCV9fbGUxNiBsZW47CQkvKiBudW1iZXIgb2YgYnl0ZXMgc3RhcnRpbmcgZnJvbSB0b2tlbiAqLwotCXU4IHRva2VuOwkJLyogdG9rZW4gaWQgKi8KLQl1OCBpZDsJCQkvKiBtZWFzdXJlbWVudCBpZCAtLSAwIG9yIDEgKi8KLQl1OCBvcmlnaW47CQkvKiAwID0gVEdoLCAxID0gb3RoZXIsIDIgPSBUR2sgKi8KLQl1OCBwZXJpb2RpYzsJCS8qIDEgPSBwZXJpb2RpYyAqLwotCV9fbGUxNiBwYXRoX2xvc3NfdGltZW91dDsKLQlfX2xlMzIgc3RhcnRfdGltZTsJLyogc3RhcnQgdGltZSBpbiBleHRlbmRlZCBiZWFjb24gZm9ybWF0ICovCi0JX19sZTMyIHJlc2VydmVkMjsKLQlfX2xlMzIgZmxhZ3M7CQkvKiByeG9uIGZsYWdzICovCi0JX19sZTMyIGZpbHRlcl9mbGFnczsJLyogcnhvbiBmaWx0ZXIgZmxhZ3MgKi8KLQlfX2xlMTYgY2hhbm5lbF9jb3VudDsJLyogbWluaW11bSAxLCBtYXhpbXVtIDEwICovCi0JX19sZTE2IHJlc2VydmVkMzsKLQlzdHJ1Y3QgaXdsMzk0NV9tZWFzdXJlX2NoYW5uZWwgY2hhbm5lbHNbMTBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQgPSAweDc0IChyZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fcmVzcCB7Ci0JdTggdG9rZW47Ci0JdTggaWQ7CQkJLyogaWQgb2YgdGhlIHByaW9yIGNvbW1hbmQgcmVwbGFjZWQsIG9yIDB4ZmYgKi8KLQlfX2xlMTYgc3RhdHVzOwkJLyogMCAtIGNvbW1hbmQgd2lsbCBiZSBoYW5kbGVkCi0JCQkJICogMSAtIGNhbm5vdCBoYW5kbGUgKGNvbmZsaWN0cyB3aXRoIGFub3RoZXIKLQkJCQkgKiAgICAgbWVhc3VyZW1lbnQpICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSBpd2wzOTQ1X21lYXN1cmVtZW50X3N0YXRlIHsKLQlJV0xfTUVBU1VSRU1FTlRfU1RBUlQgPSAwLAotCUlXTF9NRUFTVVJFTUVOVF9TVE9QID0gMSwKLX07Ci0KLWVudW0gaXdsMzk0NV9tZWFzdXJlbWVudF9zdGF0dXMgewotCUlXTF9NRUFTVVJFTUVOVF9PSyA9IDAsCi0JSVdMX01FQVNVUkVNRU5UX0NPTkNVUlJFTlQgPSAxLAotCUlXTF9NRUFTVVJFTUVOVF9DU0FfQ09ORkxJQ1QgPSAyLAotCUlXTF9NRUFTVVJFTUVOVF9UR0hfQ09ORkxJQ1QgPSAzLAotCS8qIDQtNSByZXNlcnZlZCAqLwotCUlXTF9NRUFTVVJFTUVOVF9TVE9QUEVEID0gNiwKLQlJV0xfTUVBU1VSRU1FTlRfVElNRU9VVCA9IDcsCi0JSVdMX01FQVNVUkVNRU5UX1BFUklPRElDX0ZBSUxFRCA9IDgsCi19OwotCi0jZGVmaW5lIE5VTV9FTEVNRU5UU19JTl9ISVNUT0dSQU0gOAotCi1zdHJ1Y3QgaXdsMzk0NV9tZWFzdXJlbWVudF9oaXN0b2dyYW0gewotCV9fbGUzMiBvZmRtW05VTV9FTEVNRU5UU19JTl9ISVNUT0dSQU1dOwkvKiBpbiAwLjh1c2VjIGNvdW50cyAqLwotCV9fbGUzMiBjY2tbTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTV07CS8qIGluIDF1c2VjIGNvdW50cyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIGNsZWFyIGNoYW5uZWwgYXZhaWxhYmlsaXR5IGNvdW50ZXJzICovCi1zdHJ1Y3QgaXdsMzk0NV9tZWFzdXJlbWVudF9jY2FfY291bnRlcnMgewotCV9fbGUzMiBvZmRtOwotCV9fbGUzMiBjY2s7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSBpd2wzOTQ1X21lYXN1cmVfdHlwZSB7Ci0JSVdMX01FQVNVUkVfQkFTSUMgPSAoMSA8PCAwKSwKLQlJV0xfTUVBU1VSRV9DSEFOTkVMX0xPQUQgPSAoMSA8PCAxKSwKLQlJV0xfTUVBU1VSRV9ISVNUT0dSQU1fUlBJID0gKDEgPDwgMiksCi0JSVdMX01FQVNVUkVfSElTVE9HUkFNX05PSVNFID0gKDEgPDwgMyksCi0JSVdMX01FQVNVUkVfRlJBTUUgPSAoMSA8PCA0KSwKLQkvKiBiaXRzIDU6NiBhcmUgcmVzZXJ2ZWQgKi8KLQlJV0xfTUVBU1VSRV9JRExFID0gKDEgPDwgNyksCi19OwotCi0vKgotICogU1BFQ1RSVU1fTUVBU1VSRV9OT1RJRklDQVRJT04gPSAweDc1IChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIHsKLQl1OCBpZDsJCQkvKiBtZWFzdXJlbWVudCBpZCAtLSAwIG9yIDEgKi8KLQl1OCB0b2tlbjsKLQl1OCBjaGFubmVsX2luZGV4OwkvKiBpbmRleCBpbiBtZWFzdXJlbWVudCBjaGFubmVsIGxpc3QgKi8KLQl1OCBzdGF0ZTsJCS8qIDAgLSBzdGFydCwgMSAtIHN0b3AgKi8KLQlfX2xlMzIgc3RhcnRfdGltZTsJLyogbG93ZXIgMzItYml0cyBvZiBUU0YgKi8KLQl1OCBiYW5kOwkJLyogMCAtIDUuMkdIeiwgMSAtIDIuNEdIeiAqLwotCXU4IGNoYW5uZWw7Ci0JdTggdHlwZTsJCS8qIHNlZSBlbnVtIGl3bDM5NDVfbWVhc3VyZW1lbnRfdHlwZSAqLwotCXU4IHJlc2VydmVkMTsKLQkvKiBOT1RFOiAgY2NhX29mZG0sIGNjYV9jY2ssIGJhc2ljX3R5cGUsIGFuZCBoaXN0b2dyYW0gYXJlIG9ubHkgb25seQotCSAqIHZhbGlkIGlmIGFwcGxpY2FibGUgZm9yIG1lYXN1cmVtZW50IHR5cGUgcmVxdWVzdGVkLiAqLwotCV9fbGUzMiBjY2Ffb2ZkbTsJLyogY2NhIGZyYWN0aW9uIHRpbWUgaW4gNDBNaHogY2xvY2sgcGVyaW9kcyAqLwotCV9fbGUzMiBjY2FfY2NrOwkJLyogY2NhIGZyYWN0aW9uIHRpbWUgaW4gNDRNaHogY2xvY2sgcGVyaW9kcyAqLwotCV9fbGUzMiBjY2FfdGltZTsJLyogY2hhbm5lbCBsb2FkIHRpbWUgaW4gdXNlY3MgKi8KLQl1OCBiYXNpY190eXBlOwkJLyogMCAtIGJzcywgMSAtIG9mZG0gcHJlYW1ibGUsIDIgLQotCQkJCSAqIHVuaWRlbnRpZmllZCAqLwotCXU4IHJlc2VydmVkMlszXTsKLQlzdHJ1Y3QgaXdsMzk0NV9tZWFzdXJlbWVudF9oaXN0b2dyYW0gaGlzdG9ncmFtOwotCV9fbGUzMiBzdG9wX3RpbWU7CS8qIGxvd2VyIDMyLWJpdHMgb2YgVFNGICovCi0JX19sZTMyIHN0YXR1czsJCS8qIHNlZSBpd2wzOTQ1X21lYXN1cmVtZW50X3N0YXR1cyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICg3KQotICogUG93ZXIgTWFuYWdlbWVudCBDb21tYW5kcywgUmVzcG9uc2VzLCBOb3RpZmljYXRpb25zOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCAtIFBvd2VyIFRhYmxlIENvbW1hbmQKLSAqIEBmbGFnczogU2VlIGJlbG93OgotICoKLSAqIFBPV0VSX1RBQkxFX0NNRCA9IDB4NzcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqCi0gKiBQTSBhbGxvdzoKLSAqICAgYml0IDAgLSAnMCcgRHJpdmVyIG5vdCBhbGxvdyBwb3dlciBtYW5hZ2VtZW50Ci0gKiAgICAgICAgICAgJzEnIERyaXZlciBhbGxvdyBQTSAodXNlIHJlc3Qgb2YgcGFyYW1ldGVycykKLSAqIHVDb2RlIHNlbmQgc2xlZXAgbm90aWZpY2F0aW9uczoKLSAqICAgYml0IDEgLSAnMCcgRG9uJ3Qgc2VuZCBzbGVlcCBub3RpZmljYXRpb24KLSAqICAgICAgICAgICAnMScgc2VuZCBzbGVlcCBub3RpZmljYXRpb24gKFNFTkRfUE1fTk9USUZJQ0FUSU9OKQotICogU2xlZXAgb3ZlciBEVElNCi0gKiAgIGJpdCAyIC0gJzAnIFBNIGhhdmUgdG8gd2FsayB1cCBldmVyeSBEVElNCi0gKiAgICAgICAgICAgJzEnIFBNIGNvdWxkIHNsZWVwIG92ZXIgRFRJTSB0aWxsIGxpc3RlbiBJbnRlcnZhbC4KLSAqIFBDSSBwb3dlciBtYW5hZ2VkCi0gKiAgIGJpdCAzIC0gJzAnIChQQ0lfTElOS19DVFJMICYgMHgxKQotICogICAgICAgICAgICcxJyAhKFBDSV9MSU5LX0NUUkwgJiAweDEpCi0gKiBGb3JjZSBzbGVlcCBNb2RlcwotICogICBiaXQgMzEvMzAtICcwMCcgdXNlIGJvdGggbWFjL3h0YWwgc2xlZXBzCi0gKiAgICAgICAgICAgICAgJzAxJyBmb3JjZSBNYWMgc2xlZXAKLSAqICAgICAgICAgICAgICAnMTAnIGZvcmNlIHh0YWwgc2xlZXAKLSAqICAgICAgICAgICAgICAnMTEnIElsbGVnYWwgc2V0Ci0gKgotICogTk9URTogaWYgc2xlZXBfaW50ZXJ2YWxbU0xFRVBfSU5UUlZMX1RBQkxFX1NJWkUtMV0gPiBEVElNIHBlcmlvZCB0aGVuCi0gKiB1Y29kZSBhc3N1bWUgc2xlZXAgb3ZlciBEVElNIGlzIGFsbG93ZWQgYW5kIHdlIGRvbid0IG5lZWQgdG8gd2FrZXVwCi0gKiBmb3IgZXZlcnkgRFRJTS4KLSAqLwotI2RlZmluZSBJV0xfUE9XRVJfVkVDX1NJWkUgNQotCi0jZGVmaW5lIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLCWNwdV90b19sZTMyKDEgPDwgMCkKLSNkZWZpbmUgSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMikKLSNkZWZpbmUgSVdMX1BPV0VSX1BDSV9QTV9NU0sJCQljcHVfdG9fbGUzMigxIDw8IDMpCi1zdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiByeF9kYXRhX3RpbWVvdXQ7Ci0JX19sZTMyIHR4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgc2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLS8qCi0gKiBQTV9TTEVFUF9OT1RJRklDQVRJT04gPSAweDdBIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqIDM5NDUgYW5kIDQ5NjUgaWRlbnRpY2FsLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9zbGVlcF9ub3RpZmljYXRpb24gewotCXU4IHBtX3NsZWVwX21vZGU7Ci0JdTggcG1fd2FrZXVwX3NyYzsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci0JX19sZTMyIHNsZWVwX3RpbWU7Ci0JX19sZTMyIHRzZl9sb3c7Ci0JX19sZTMyIGJjb25fdGltZXI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogU2xlZXAgc3RhdGVzLiAgMzk0NSBhbmQgNDk2NSBpZGVudGljYWwuICovCi1lbnVtIHsKLQlJV0xfUE1fTk9fU0xFRVAgPSAwLAotCUlXTF9QTV9TTFBfTUFDID0gMSwKLQlJV0xfUE1fU0xQX0ZVTExfTUFDX1VOQVNTT0NJQVRFID0gMiwKLQlJV0xfUE1fU0xQX0ZVTExfTUFDX0NBUkRfU1RBVEUgPSAzLAotCUlXTF9QTV9TTFBfUEhZID0gNCwKLQlJV0xfUE1fU0xQX1JFUEVOVCA9IDUsCi0JSVdMX1BNX1dBS0VVUF9CWV9USU1FUiA9IDYsCi0JSVdMX1BNX1dBS0VVUF9CWV9EUklWRVIgPSA3LAotCUlXTF9QTV9XQUtFVVBfQllfUkZLSUxMID0gOCwKLQkvKiAzIHJlc2VydmVkICovCi0JSVdMX1BNX05VTV9PRl9NT0RFUyA9IDEyLAotfTsKLQotLyoKLSAqIFJFUExZX0NBUkRfU1RBVEVfQ01EID0gMHhhMCAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi0jZGVmaW5lIENBUkRfU1RBVEVfQ01EX0RJU0FCTEUgMHgwMAkvKiBQdXQgY2FyZCB0byBzbGVlcCAqLwotI2RlZmluZSBDQVJEX1NUQVRFX0NNRF9FTkFCTEUgIDB4MDEJLyogV2FrZSB1cCBjYXJkICovCi0jZGVmaW5lIENBUkRfU1RBVEVfQ01EX0hBTFQgICAgMHgwMgkvKiBQb3dlciBkb3duIHBlcm1hbmVudGx5ICovCi1zdHJ1Y3QgaXdsMzk0NV9jYXJkX3N0YXRlX2NtZCB7Ci0JX19sZTMyIHN0YXR1czsJCS8qIENBUkRfU1RBVEVfQ01EXyogcmVxdWVzdCBuZXcgcG93ZXIgc3RhdGUgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogQ0FSRF9TVEFURV9OT1RJRklDQVRJT04gPSAweGExIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotc3RydWN0IGl3bDM5NDVfY2FyZF9zdGF0ZV9ub3RpZiB7Ci0JX19sZTMyIGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgSFdfQ0FSRF9ESVNBQkxFRCAgIDB4MDEKLSNkZWZpbmUgU1dfQ0FSRF9ESVNBQkxFRCAgIDB4MDIKLSNkZWZpbmUgUkZfQ0FSRF9ESVNBQkxFRCAgIDB4MDQKLSNkZWZpbmUgUlhPTl9DQVJEX0RJU0FCTEVEIDB4MTAKLQotc3RydWN0IGl3bDM5NDVfY3Rfa2lsbF9jb25maWcgewotCV9fbGUzMiAgIHJlc2VydmVkOwotCV9fbGUzMiAgIGNyaXRpY2FsX3RlbXBlcmF0dXJlX007Ci0JX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfUjsKLX0gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDgpCi0gKiBTY2FuIENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCAtIGVudHJ5IGluIFJFUExZX1NDQU5fQ01EIGNoYW5uZWwgdGFibGUKLSAqCi0gKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCBpbiB0aGUgc2NhbiBsaXN0LgotICogRWFjaCBjaGFubmVsIGNhbiBpbmRlcGVuZGVudGx5IHNlbGVjdDoKLSAqIDEpICBTU0lEIGZvciBkaXJlY3RlZCBhY3RpdmUgc2NhbnMKLSAqIDIpICBUeHBvd2VyIHNldHRpbmcgKGZvciByYXRlIHNwZWNpZmllZCB3aXRoaW4gVHggY29tbWFuZCkKLSAqIDMpICBIb3cgbG9uZyB0byBzdGF5IG9uLWNoYW5uZWwgKGJlaGF2aW9yIG1heSBiZSBtb2RpZmllZCBieSBxdWlldF90aW1lLAotICogICAgIHF1aWV0X3BsY3BfdGgsIGdvb2RfQ1JDX3RoKQotICoKLSAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgYXJlIHRydWUgKHNlZSBjb21tZW50cwotICogdW5kZXIgc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQgYWJvdXQgbWF4X291dF90aW1lIGFuZCBxdWlldF90aW1lKToKLSAqIDEpICBJZiB1c2luZyBwYXNzaXZlX2R3ZWxsIChpLmUuIHBhc3NpdmVfZHdlbGwgIT0gMCk6Ci0gKiAgICAgYWN0aXZlX2R3ZWxsIDw9IHBhc3NpdmVfZHdlbGwgKDwgbWF4X291dF90aW1lIGlmIG1heF9vdXRfdGltZSAhPSAwKQotICogMikgIHF1aWV0X3RpbWUgPD0gYWN0aXZlX2R3ZWxsCi0gKiAzKSAgSWYgcmVzdHJpY3Rpbmcgb2ZmLWNoYW5uZWwgdGltZSAoaS5lLiBtYXhfb3V0X3RpbWUgIT0wKToKLSAqICAgICBwYXNzaXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCi0gKiAgICAgYWN0aXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCB7Ci0JLyoKLQkgKiB0eXBlIGlzIGRlZmluZWQgYXM6Ci0JICogMDowIDEgPSBhY3RpdmUsIDAgPSBwYXNzaXZlCi0JICogMTo0IFNTSUQgZGlyZWN0IGJpdCBtYXA7IGlmIGEgYml0IGlzIHNldCwgdGhlbiBjb3JyZXNwb25kaW5nCi0JICogICAgIFNTSUQgSUUgaXMgdHJhbnNtaXR0ZWQgaW4gcHJvYmUgcmVxdWVzdC4KLQkgKiA1OjcgcmVzZXJ2ZWQKLQkgKi8KLQl1OCB0eXBlOwotCXU4IGNoYW5uZWw7CS8qIGJhbmQgaXMgc2VsZWN0ZWQgYnkgaXdsMzk0NV9zY2FuX2NtZCAiZmxhZ3MiIGZpZWxkICovCi0Jc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwotCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCi0JX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3NzaWRfaWUgLSBkaXJlY3RlZCBzY2FuIG5ldHdvcmsgaW5mb3JtYXRpb24gZWxlbWVudAotICoKLSAqIFVwIHRvIDQgb2YgdGhlc2UgbWF5IGFwcGVhciBpbiBSRVBMWV9TQ0FOX0NNRCwgc2VsZWN0ZWQgYnkgInR5cGUiIGZpZWxkCi0gKiBpbiBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWw7IGVhY2ggY2hhbm5lbCBtYXkgc2VsZWN0IGRpZmZlcmVudCBzc2lkcyBmcm9tCi0gKiBhbW9uZyB0aGUgNCBlbnRyaWVzLiAgU1NJRCBJRXMgZ2V0IHRyYW5zbWl0dGVkIGluIHJldmVyc2Ugb3JkZXIgb2YgZW50cnkuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NzaWRfaWUgewotCXU4IGlkOwotCXU4IGxlbjsKLQl1OCBzc2lkWzMyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFBST0JFX09QVElPTl9NQVggICAgICAgIDB4NAotI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCWNwdV90b19sZTMyKDB4RkZGRkZGRkYpCi0jZGVmaW5lIElXTF9HT09EX0NSQ19USAkJY3B1X3RvX2xlMTYoMSkKLSNkZWZpbmUgSVdMX01BWF9TQ0FOX1NJWkUgMTAyNAotCi0vKgotICogUkVQTFlfU0NBTl9DTUQgPSAweDgwIChjb21tYW5kKQotICoKLSAqIFRoZSBoYXJkd2FyZSBzY2FuIGNvbW1hbmQgaXMgdmVyeSBwb3dlcmZ1bDsgdGhlIGRyaXZlciBjYW4gc2V0IGl0IHVwIHRvCi0gKiBtYWludGFpbiAocmVsYXRpdmVseSkgbm9ybWFsIG5ldHdvcmsgdHJhZmZpYyB3aGlsZSBkb2luZyBhIHNjYW4gaW4gdGhlCi0gKiBiYWNrZ3JvdW5kLiAgVGhlIG1heF9vdXRfdGltZSBhbmQgc3VzcGVuZF90aW1lIGNvbnRyb2wgdGhlIHJhdGlvIG9mIGhvdwotICogbG9uZyB0aGUgZGV2aWNlIHN0YXlzIG9uIGFuIGFzc29jaWF0ZWQgbmV0d29yayBjaGFubmVsICgic2VydmljZSBjaGFubmVsIikKLSAqIHZzLiBob3cgbG9uZyBpdCdzIGF3YXkgZnJvbSB0aGUgc2VydmljZSBjaGFubmVsLCB0dW5lZCB0byBvdGhlciBjaGFubmVscwotICogZm9yIHNjYW5uaW5nLgotICoKLSAqIG1heF9vdXRfdGltZSBpcyB0aGUgbWF4IHRpbWUgb2ZmLWNoYW5uZWwgKGluIHVzZWMpLCBhbmQgc3VzcGVuZF90aW1lCi0gKiBpcyBob3cgbG9uZyAoaW4gImV4dGVuZGVkIGJlYWNvbiIgZm9ybWF0KSB0aGF0IHRoZSBzY2FuIGlzICJzdXNwZW5kZWQiCi0gKiBhZnRlciByZXR1cm5pbmcgdG8gdGhlIHNlcnZpY2UgY2hhbm5lbC4gIFRoYXQgaXMsIHN1c3BlbmRfdGltZSBpcyB0aGUKLSAqIHRpbWUgdGhhdCB3ZSBzdGF5IG9uIHRoZSBzZXJ2aWNlIGNoYW5uZWwsIGRvaW5nIG5vcm1hbCB3b3JrLCBiZXR3ZWVuCi0gKiBzY2FuIHNlZ21lbnRzLiAgVGhlIGRyaXZlciBtYXkgc2V0IHRoZXNlIHBhcmFtZXRlcnMgZGlmZmVyZW50bHkgdG8gc3VwcG9ydAotICogc2Nhbm5pbmcgd2hlbiBhc3NvY2lhdGVkIHZzLiBub3QgYXNzb2NpYXRlZCwgYW5kIGxpZ2h0IHZzLiBoZWF2eSB0cmFmZmljCi0gKiBsb2FkcyB3aGVuIGFzc29jaWF0ZWQuCi0gKgotICogQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgY29tbWFuZCwgdGhlIGRldmljZSdzIHNjYW4gZW5naW5lIGRvZXMgdGhlIGZvbGxvd2luZzsKLSAqCi0gKiAxKSAgU2VuZHMgU0NBTl9TVEFSVCBub3RpZmljYXRpb24gdG8gZHJpdmVyCi0gKiAyKSAgQ2hlY2tzIHRvIHNlZSBpZiBpdCBoYXMgdGltZSB0byBkbyBzY2FuIGZvciBvbmUgY2hhbm5lbAotICogMykgIFNlbmRzIE5VTEwgcGFja2V0LCB3aXRoIHBvd2VyLXNhdmUgKFBTKSBiaXQgc2V0IHRvIDEsCi0gKiAgICAgdG8gdGVsbCBBUCB0aGF0IHdlJ3JlIGdvaW5nIG9mZi1jaGFubmVsCi0gKiA0KSAgVHVuZXMgdG8gZmlyc3QgY2hhbm5lbCBpbiBzY2FuIGxpc3QsIGRvZXMgYWN0aXZlIG9yIHBhc3NpdmUgc2NhbgotICogNSkgIFNlbmRzIFNDQU5fUkVTVUxUIG5vdGlmaWNhdGlvbiB0byBkcml2ZXIKLSAqIDYpICBDaGVja3MgdG8gc2VlIGlmIGl0IGhhcyB0aW1lIHRvIGRvIHNjYW4gb24gKm5leHQqIGNoYW5uZWwgaW4gbGlzdAotICogNykgIFJlcGVhdHMgNC02IHVudGlsIGl0IG5vIGxvbmdlciBoYXMgdGltZSB0byBzY2FuIHRoZSBuZXh0IGNoYW5uZWwKLSAqICAgICBiZWZvcmUgbWF4X291dF90aW1lIGV4cGlyZXMKLSAqIDgpICBSZXR1cm5zIHRvIHNlcnZpY2UgY2hhbm5lbAotICogOSkgIFNlbmRzIE5VTEwgcGFja2V0IHdpdGggUFM9MCB0byB0ZWxsIEFQIHRoYXQgd2UncmUgYmFjawotICogMTApIFN0YXlzIG9uIHNlcnZpY2UgY2hhbm5lbCB1bnRpbCBzdXNwZW5kX3RpbWUgZXhwaXJlcwotICogMTEpIFJlcGVhdHMgZW50aXJlIHByb2Nlc3MgMi0xMCB1bnRpbCBsaXN0IGlzIGNvbXBsZXRlCi0gKiAxMikgU2VuZHMgU0NBTl9DT01QTEVURSBub3RpZmljYXRpb24KLSAqCi0gKiBGb3IgZmFzdCwgZWZmaWNpZW50IHNjYW5zLCB0aGUgc2NhbiBjb21tYW5kIGFsc28gaGFzIHN1cHBvcnQgZm9yIHN0YXlpbmcgb24KLSAqIGEgY2hhbm5lbCBmb3IganVzdCBhIHNob3J0IHRpbWUsIGlmIGRvaW5nIGFjdGl2ZSBzY2FubmluZyBhbmQgZ2V0dGluZyBubwotICogcmVzcG9uc2VzIHRvIHRoZSB0cmFuc21pdHRlZCBwcm9iZSByZXF1ZXN0LiAgVGhpcyB0aW1lIGlzIGNvbnRyb2xsZWQgYnkKLSAqIHF1aWV0X3RpbWUsIGFuZCB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgYmVsb3cgd2hpY2ggYSBjaGFubmVsIGlzCi0gKiBjb25zaWRlcmVkICJxdWlldCIgaXMgY29udHJvbGxlZCBieSBxdWlldF9wbGNwX3RocmVzaG9sZC4KLSAqCi0gKiBGb3IgYWN0aXZlIHNjYW5uaW5nIG9uIGNoYW5uZWxzIHRoYXQgaGF2ZSByZWd1bGF0b3J5IHJlc3RyaWN0aW9ucyBhZ2FpbnN0Ci0gKiBibGluZGx5IHRyYW5zbWl0dGluZywgdGhlIHNjYW4gY2FuIGxpc3RlbiBiZWZvcmUgdHJhbnNtaXR0aW5nLCB0byBtYWtlIHN1cmUKLSAqIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBsZWdpdGltYXRlIGFjdGl2aXR5IG9uIHRoZSBjaGFubmVsLiAgSWYgZW5vdWdoCi0gKiBwYWNrZXRzIGFyZSBjbGVhbmx5IHJlY2VpdmVkIG9uIHRoZSBjaGFubmVsIChjb250cm9sbGVkIGJ5IGdvb2RfQ1JDX3RoLAotICogdHlwaWNhbCB2YWx1ZSAxKSwgdGhlIHNjYW4gZW5naW5lIHN0YXJ0cyB0cmFuc21pdHRpbmcgcHJvYmUgcmVxdWVzdHMuCi0gKgotICogRHJpdmVyIG11c3QgdXNlIHNlcGFyYXRlIHNjYW4gY29tbWFuZHMgZm9yIDIuNCB2cy4gNSBHSHogYmFuZHMuCi0gKgotICogVG8gYXZvaWQgdUNvZGUgZXJyb3JzLCBzZWUgdGltaW5nIHJlc3RyaWN0aW9ucyBkZXNjcmliZWQgdW5kZXIKLSAqIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbC4KLSAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQgewotCV9fbGUxNiBsZW47Ci0JdTggcmVzZXJ2ZWQwOwotCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgY2hhbm5lbHMgaW4gY2hhbm5lbCBsaXN0ICovCi0JX19sZTE2IHF1aWV0X3RpbWU7CS8qIGR3ZWxsIG9ubHkgdGhpcyAjIG1pbGxpc2VjcyBvbiBxdWlldCBjaGFubmVsCi0JCQkJICogKG9ubHkgZm9yIGFjdGl2ZSBzY2FuKSAqLwotCV9fbGUxNiBxdWlldF9wbGNwX3RoOwkvKiBxdWlldCBjaG5sIGlzIDwgdGhpcyAjIHBrdHMgKHR5cC4gMSkgKi8KLQlfX2xlMTYgZ29vZF9DUkNfdGg7CS8qIHBhc3NpdmUgLT4gYWN0aXZlIHByb21vdGlvbiB0aHJlc2hvbGQgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCV9fbGUzMiBtYXhfb3V0X3RpbWU7CS8qIG1heCB1c2VjIHRvIGJlIGF3YXkgZnJvbSBhc3NvY2lhdGVkIChzZXJ2aWNlKQotCQkJCSAqIGNoYW5uZWwgKi8KLQlfX2xlMzIgc3VzcGVuZF90aW1lOwkvKiBwYXVzZSBzY2FuIHRoaXMgbG9uZyAoaW4gImV4dGVuZGVkIGJlYWNvbgotCQkJCSAqIGZvcm1hdCIpIHdoZW4gcmV0dXJuaW5nIHRvIHNlcnZpY2UgY2hhbm5lbDoKLQkJCQkgKiAzOTQ1OyAzMToyNCAjIGJlYWNvbnMsIDE5OjAgYWRkaXRpb25hbCB1c2VjLAotCQkJCSAqIDQ5NjU7IDMxOjIyICMgYmVhY29ucywgMjE6MCBhZGRpdGlvbmFsIHVzZWMuCi0JCQkJICovCi0JX19sZTMyIGZsYWdzOwkJLyogUlhPTl9GTEdfKiAqLwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7CS8qIFJYT05fRklMVEVSXyogKi8KLQotCS8qIEZvciBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgZm9yIHBhc3NpdmUgc2NhbnMpLgotCSAqIERvZXMgbm90IGluY2x1ZGUgcGF5bG9hZC4gIE11c3Qgc3BlY2lmeSBUeCByYXRlOyBubyByYXRlIHNjYWxpbmcuICovCi0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4X2NtZDsKLQotCS8qIEZvciBkaXJlY3RlZCBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgb3RoZXJ3aXNlKSAqLwotCXN0cnVjdCBpd2wzOTQ1X3NzaWRfaWUgZGlyZWN0X3NjYW5bUFJPQkVfT1BUSU9OX01BWF07Ci0KLQkvKgotCSAqIFByb2JlIHJlcXVlc3QgZnJhbWUsIGZvbGxvd2VkIGJ5IGNoYW5uZWwgbGlzdC4KLQkgKgotCSAqIFNpemUgb2YgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBjb3VudCBpbiB0eF9jbWQuCi0JICogQ2hhbm5lbCBsaXN0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvYmUgcmVxdWVzdCBmcmFtZS4KLQkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gbGlzdCBpcyBzcGVjaWZpZWQgYnkgY2hhbm5lbF9jb3VudC4KLQkgKiBFYWNoIGNoYW5uZWwgaW4gbGlzdCBpcyBvZiB0eXBlOgotCSAqCi0JICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIGNoYW5uZWxzWzBdOwotCSAqCi0JICogTk9URTogIE9ubHkgb25lIGJhbmQgb2YgY2hhbm5lbHMgY2FuIGJlIHNjYW5uZWQgcGVyIHBhc3MuICBZb3UKLQkgKiBtdXN0IG5vdCBtaXggMi40R0h6IGNoYW5uZWxzIGFuZCA1LjJHSHogY2hhbm5lbHMsIGFuZCB5b3UgbXVzdCB3YWl0Ci0JICogZm9yIG9uZSBzY2FuIHRvIGNvbXBsZXRlIChpLmUuIHJlY2VpdmUgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pCi0JICogYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBzY2FuLgotCSAqLwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogQ2FuIGFib3J0IHdpbGwgbm90aWZ5IGJ5IGNvbXBsZXRlIG5vdGlmaWNhdGlvbiB3aXRoIGFib3J0IHN0YXR1cy4gKi8KLSNkZWZpbmUgQ0FOX0FCT1JUX1NUQVRVUwljcHVfdG9fbGUzMigweDEpCi0vKiBjb21wbGV0ZSBub3RpZmljYXRpb24gc3RhdHVzZXMgKi8KLSNkZWZpbmUgQUJPUlRfU1RBVFVTICAgICAgICAgICAgMHgyCi0KLS8qCi0gKiBSRVBMWV9TQ0FOX0NNRCA9IDB4ODAgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FucmVxX25vdGlmaWNhdGlvbiB7Ci0JX19sZTMyIHN0YXR1czsJCS8qIDE6IG9rYXksIDI6IGNhbm5vdCBmdWxmaWxsIHJlcXVlc3QgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gPSAweDgyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotc3RydWN0IGl3bDM5NDVfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiB7Ci0JX19sZTMyIHRzZl9sb3c7Ci0JX19sZTMyIHRzZl9oaWdoOwotCV9fbGUzMiBiZWFjb25fdGltZXI7Ci0JdTggY2hhbm5lbDsKLQl1OCBiYW5kOwotCXU4IHJlc2VydmVkWzJdOwotCV9fbGUzMiBzdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSAgU0NBTl9PV05FUl9TVEFUVVMgMHgxOwotI2RlZmluZSAgTUVBU1VSRV9PV05FUl9TVEFUVVMgMHgyOwotCi0jZGVmaW5lIE5VTUJFUl9PRl9TVEFUSVNUSUNTIDEJLyogZmlyc3QgX19sZTMyIGlzIGdvb2QgQ1JDICovCi0vKgotICogU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTiA9IDB4ODMgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gewotCXU4IGNoYW5uZWw7Ci0JdTggYmFuZDsKLQl1OCByZXNlcnZlZFsyXTsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci0JX19sZTMyIHN0YXRpc3RpY3NbTlVNQkVSX09GX1NUQVRJU1RJQ1NdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiA9IDB4ODQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuY29tcGxldGVfbm90aWZpY2F0aW9uIHsKLQl1OCBzY2FubmVkX2NoYW5uZWxzOwotCXU4IHN0YXR1czsKLQl1OCByZXNlcnZlZDsKLQl1OCBsYXN0X2NoYW5uZWw7Ci0JX19sZTMyIHRzZl9sb3c7Ci0JX19sZTMyIHRzZl9oaWdoOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDkpCi0gKiBJQlNTL0FQIENvbW1hbmRzIGFuZCBOb3RpZmljYXRpb25zOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEJFQUNPTl9OT1RJRklDQVRJT04gPSAweDkwIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOwotCV9fbGUzMiBsb3dfdHNmOwotCV9fbGUzMiBoaWdoX3RzZjsKLQlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9UWF9CRUFDT04gPSAweDkxIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgewotCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCB0eDsKLQlfX2xlMTYgdGltX2lkeDsKLQl1OCB0aW1fc2l6ZTsKLQl1OCByZXNlcnZlZDE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgZnJhbWVbMF07CS8qIGJlYWNvbiBmcmFtZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgxMCkKLSAqIFN0YXRpc3RpY3MgQ29tbWFuZHMgYW5kIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElXTF9URU1QX0NPTlZFUlQgMjYwCi0KLSNkZWZpbmUgU1VQX1JBVEVfMTFBX01BWF9OVU1fQ0hBTk5FTFMgIDgKLSNkZWZpbmUgU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFMgIDQKLSNkZWZpbmUgU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFMgIDEyCi0KLS8qIFVzZWQgZm9yIHBhc3NpbmcgdG8gZHJpdmVyIG51bWJlciBvZiBzdWNjZXNzZXMgYW5kIGZhaWx1cmVzIHBlciByYXRlICovCi1zdHJ1Y3QgcmF0ZV9oaXN0b2dyYW0gewotCXVuaW9uIHsKLQkJX19sZTMyIGFbU1VQX1JBVEVfMTFBX01BWF9OVU1fQ0hBTk5FTFNdOwotCQlfX2xlMzIgYltTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMU107Ci0JCV9fbGUzMiBnW1NVUF9SQVRFXzExR19NQVhfTlVNX0NIQU5ORUxTXTsKLQl9IHN1Y2Nlc3M7Ci0JdW5pb24gewotCQlfX2xlMzIgYVtTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMU107Ci0JCV9fbGUzMiBiW1NVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGdbU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFNdOwotCX0gZmFpbGVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgewotCV9fbGUzMiBpbmFfY250OwotCV9fbGUzMiBmaW5hX2NudDsKLQlfX2xlMzIgcGxjcF9lcnI7Ci0JX19sZTMyIGNyYzMyX2VycjsKLQlfX2xlMzIgb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOwotCV9fbGUzMiBjcmMzMl9nb29kOwotCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7Ci0JX19sZTMyIGZpbmFfc3luY19lcnJfY250OwotCV9fbGUzMiBzZmRfdGltZW91dDsKLQlfX2xlMzIgZmluYV90aW1lb3V0OwotCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7Ci0JX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOwotCV9fbGUzMiBzZW50X2Fja19jbnQ7Ci0JX19sZTMyIHNlbnRfY3RzX2NudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IHsKLQlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLwotCV9fbGUzMiBib2d1c19hY2s7CS8qIEFDSyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQUNLICovCi0JX19sZTMyIG5vbl9ic3NpZF9mcmFtZXM7CS8qIG51bWJlciBvZiBmcmFtZXMgd2l0aCBCU1NJRCB0aGF0Ci0JCQkJCSAqIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBTVEEgQlNTSUQgKi8KLQlfX2xlMzIgZmlsdGVyZWRfZnJhbWVzOwkvKiBjb3VudCBmcmFtZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbiB0aGUKLQkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLwotCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCi0JCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19yeCB7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IG9mZG07Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IGNjazsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHN0YXRpc3RpY3NfdHggewotCV9fbGUzMiBwcmVhbWJsZV9jbnQ7Ci0JX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKLQlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7Ci0JX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7Ci0JX19sZTMyIGZld19ieXRlc19jbnQ7Ci0JX19sZTMyIGN0c190aW1lb3V0OwotCV9fbGUzMiBhY2tfdGltZW91dDsKLQlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKLQlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHN0YXRpc3RpY3NfZGJnIHsKLQlfX2xlMzIgYnVyc3RfY2hlY2s7Ci0JX19sZTMyIGJ1cnN0X2NvdW50OwotCV9fbGUzMiByZXNlcnZlZFs0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19kaXYgewotCV9fbGUzMiB0eF9vbl9hOwotCV9fbGUzMiB0eF9vbl9iOwotCV9fbGUzMiBleGVjX3RpbWU7Ci0JX19sZTMyIHByb2JlX3RpbWU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCB7Ci0JX19sZTMyIHRlbXBlcmF0dXJlOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7Ci0JX19sZTMyIHNsZWVwX3RpbWU7Ci0JX19sZTMyIHNsb3RzX291dDsKLQlfX2xlMzIgc2xvdHNfaWRsZTsKLQlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19kaXYgZGl2OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCA9IDB4OWMsCi0gKiAzOTQ1IGFuZCA0OTY1IGlkZW50aWNhbC4KLSAqCi0gKiBUaGlzIGNvbW1hbmQgdHJpZ2dlcnMgYW4gaW1tZWRpYXRlIHJlc3BvbnNlIGNvbnRhaW5pbmcgdUNvZGUgc3RhdGlzdGljcy4KLSAqIFRoZSByZXNwb25zZSBpcyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgU1RBVElTVElDU19OT1RJRklDQVRJT04gMHg5ZCwgYmVsb3cuCi0gKgotICogSWYgdGhlIENMRUFSX1NUQVRTIGNvbmZpZ3VyYXRpb24gZmxhZyBpcyBzZXQsIHVDb2RlIHdpbGwgY2xlYXIgaXRzCi0gKiBpbnRlcm5hbCBjb3B5IG9mIHRoZSBzdGF0aXN0aWNzIChjb3VudGVycykgYWZ0ZXIgaXNzdWluZyB0aGUgcmVzcG9uc2UuCi0gKiBUaGlzIGZsYWcgZG9lcyBub3QgYWZmZWN0IFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OcyBhZnRlciBiZWFjb25zIChzZWUgYmVsb3cpLgotICoKLSAqIElmIHRoZSBESVNBQkxFX05PVElGIGNvbmZpZ3VyYXRpb24gZmxhZyBpcyBzZXQsIHVDb2RlIHdpbGwgbm90IGlzc3VlCi0gKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTnMgYWZ0ZXIgcmVjZWl2ZWQgYmVhY29ucyAoc2VlIGJlbG93KS4gIFRoaXMgZmxhZwotICogZG9lcyBub3QgYWZmZWN0IHRoZSByZXNwb25zZSB0byB0aGUgUkVQTFlfU1RBVElTVElDU19DTUQgMHg5YyBpdHNlbGYuCi0gKi8KLSNkZWZpbmUgSVdMX1NUQVRTX0NPTkZfQ0xFQVJfU1RBVFMgY3B1X3RvX2xlMzIoMHgxKQkvKiBzZWUgYWJvdmUgKi8KLSNkZWZpbmUgSVdMX1NUQVRTX0NPTkZfRElTQUJMRV9OT1RJRiBjcHVfdG9fbGUzMigweDIpLyogc2VlIGFib3ZlICovCi1zdHJ1Y3QgaXdsMzk0NV9zdGF0aXN0aWNzX2NtZCB7Ci0JX19sZTMyIGNvbmZpZ3VyYXRpb25fZmxhZ3M7CS8qIElXTF9TVEFUU19DT05GXyogKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogU1RBVElTVElDU19OT1RJRklDQVRJT04gPSAweDlkIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqCi0gKiBCeSBkZWZhdWx0LCB1Q29kZSBpc3N1ZXMgdGhpcyBub3RpZmljYXRpb24gYWZ0ZXIgcmVjZWl2aW5nIGEgYmVhY29uCi0gKiB3aGlsZSBhc3NvY2lhdGVkLiAgVG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLCBzZXQgRElTQUJMRV9OT1RJRiBmbGFnIGluIHRoZQotICogUkVQTFlfU1RBVElTVElDU19DTUQgMHg5YywgYWJvdmUuCi0gKgotICogU3RhdGlzdGljcyBjb3VudGVycyBjb250aW51ZSB0byBpbmNyZW1lbnQgYmVhY29uIGFmdGVyIGJlYWNvbiwgYnV0IGFyZQotICogY2xlYXJlZCB3aGVuIGNoYW5naW5nIGNoYW5uZWxzIG9yIHdoZW4gZHJpdmVyIGlzc3VlcyBSRVBMWV9TVEFUSVNUSUNTX0NNRAotICogMHg5YyB3aXRoIENMRUFSX1NUQVRTIGJpdCBzZXQgKHNlZSBhYm92ZSkuCi0gKgotICogdUNvZGUgYWxzbyBpc3N1ZXMgdGhpcyBub3RpZmljYXRpb24gZHVyaW5nIHNjYW5zLiAgdUNvZGUgY2xlYXJzIHN0YXRpc3RpY3MKLSAqIGFwcHJvcHJpYXRlbHkgc28gdGhhdCBlYWNoIG5vdGlmaWNhdGlvbiBjb250YWlucyBzdGF0aXN0aWNzIGZvciBvbmx5IHRoZQotICogb25lIGNoYW5uZWwgdGhhdCBoYXMganVzdCBiZWVuIHNjYW5uZWQuCi0gKi8KLSNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfQkFORF8yNEdfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHgyKQotI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDgpCi1zdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHsKLQlfX2xlMzIgZmxhZzsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKgotICogTUlTU0VEX0JFQUNPTlNfTk9USUZJQ0FUSU9OID0gMHhhMiAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLS8qIGlmIHVjb2RlIG1pc3NlZCBDT05TRUNVVElWRV9NSVNTRURfQkNPTlNfVEggYmVhY29ucyBpbiBhIHJvdywKLSAqIHRoZW4gdGhpcyBub3RpZmljYXRpb24gd2lsbCBiZSBzZW50LiAqLwotI2RlZmluZSBDT05TRUNVVElWRV9NSVNTRURfQkNPTlNfVEggMjAKLQotc3RydWN0IGl3bDM5NDVfbWlzc2VkX2JlYWNvbl9ub3RpZiB7Ci0JX19sZTMyIGNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zOwotCV9fbGUzMiB0b3RhbF9taXNzZWRfYmVjb25zOwotCV9fbGUzMiBudW1fZXhwZWN0ZWRfYmVhY29uczsKLQlfX2xlMzIgbnVtX3JlY3ZkX2JlYWNvbnM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDExKQotICogUnggQ2FsaWJyYXRpb24gQ29tbWFuZHM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFBIWV9DQUxJQlJBVEVfRElGRl9HQUlOX0NNRCAoNykKLSNkZWZpbmUgSERfVEFCTEVfU0laRSAgKDExKQotCi1zdHJ1Y3QgaXdsMzk0NV9zZW5zaXRpdml0eV9jbWQgewotCV9fbGUxNiBjb250cm9sOwotCV9fbGUxNiB0YWJsZVtIRF9UQUJMRV9TSVpFXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9jYWxpYnJhdGlvbl9jbWQgewotCXU4IG9wQ29kZTsKLQl1OCBmbGFnczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci0JczggZGlmZl9nYWluX2E7Ci0JczggZGlmZl9nYWluX2I7Ci0JczggZGlmZl9nYWluX2M7Ci0JdTggcmVzZXJ2ZWQxOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgxMikKLSAqIE1pc2NlbGxhbmVvdXMgQ29tbWFuZHM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTEVEcyBDb21tYW5kICYgUmVzcG9uc2UKLSAqIFJFUExZX0xFRFNfQ01EID0gMHg0OCAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIEZvciBlYWNoIG9mIDMgcG9zc2libGUgTEVEcyAoQWN0aXZpdHkvTGluay9UZWNoLCBzZWxlY3RlZCBieSAiaWQiIGZpZWxkKSwKLSAqIHRoaXMgY29tbWFuZCB0dXJucyBpdCBvbiBvciBvZmYsIG9yIHNldHMgdXAgYSBwZXJpb2RpYyBibGlua2luZyBjeWNsZS4KLSAqLwotc3RydWN0IGl3bDM5NDVfbGVkX2NtZCB7Ci0JX19sZTMyIGludGVydmFsOwkvKiAiaW50ZXJ2YWwiIGluIHVTZWMgKi8KLQl1OCBpZDsJCQkvKiAxOiBBY3Rpdml0eSwgMjogTGluaywgMzogVGVjaCAqLwotCXU4IG9mZjsJCQkvKiAjIGludGVydmFscyBvZmYgd2hpbGUgYmxpbmtpbmc7Ci0JCQkJICogIjAiLCB3aXRoID4wICJvbiIgdmFsdWUsIHR1cm5zIExFRCBvbiAqLwotCXU4IG9uOwkJCS8qICMgaW50ZXJ2YWxzIG9uIHdoaWxlIGJsaW5raW5nOwotCQkJCSAqICIwIiwgcmVnYXJkbGVzcyBvZiAib2ZmIiwgdHVybnMgTEVEIG9mZiAqLwotCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgxMykKLSAqIFVuaW9uIG9mIGFsbCBleHBlY3RlZCBub3RpZmljYXRpb25zL3Jlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCB7Ci0JX19sZTMyIGxlbjsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfaGVhZGVyIGhkcjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3AgYWxpdmVfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHJ4X2ZyYW1lOwotCQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHR4X3Jlc3A7Ci0JCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiBzcGVjdHJ1bV9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7Ci0JCXN0cnVjdCBpd2wzOTQ1X2Vycm9yX3Jlc3AgZXJyX3Jlc3A7Ci0JCXN0cnVjdCBpd2wzOTQ1X2NhcmRfc3RhdGVfbm90aWYgY2FyZF9zdGF0ZV9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIGJlYWNvbl9zdGF0dXM7Ci0JCXN0cnVjdCBpd2wzOTQ1X2FkZF9zdGFfcmVzcCBhZGRfc3RhOwotCQlzdHJ1Y3QgaXdsMzk0NV9zbGVlcF9ub3RpZmljYXRpb24gc2xlZXBfbm90aWY7Ci0JCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX3Jlc3Agc3BlY3RydW07Ci0JCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdHM7Ci0JCV9fbGUzMiBzdGF0dXM7Ci0JCXU4IHJhd1swXTsKLQl9IHU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBJV0xfUlhfRlJBTUVfU0laRSAgICAgICAgKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQotCi0jZW5kaWYJCQkJLyogX19pd2wzOTQ1XzM5NDVfY29tbWFuZHNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWI3NzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2wzOTQ1X2RlYnVnX2hfXwotI2RlZmluZSBfX2l3bDM5NDVfZGVidWdfaF9fCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotZXh0ZXJuIHUzMiBpd2wzOTQ1X2RlYnVnX2xldmVsOwotI2RlZmluZSBJV0xfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSI6ICVjICVzICIgZm10LCBcCi0JIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci0JaWYgKCEoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIGxldmVsKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIml3bCBkYXRhOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAotCQkJcCwgbGVuLCAxKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHX0xJTUlUKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci19Ci0jZW5kaWYJLyogQ09ORklHX0lXTDM5NDVfREVCVUcgKi8KLQotCi0KLS8qCi0gKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbTsKLSAqCi0gKiBJZiB5b3UgYXJlIGRlZmluaW5nIGEgbmV3IGRlYnVnIGNsYXNzaWZpY2F0aW9uLCBzaW1wbHkgYWRkIGl0IHRvIHRoZSAjZGVmaW5lCi0gKiBsaXN0IGhlcmUgaW4gdGhlIGZvcm0gb2Y6Ci0gKgotICogI2RlZmluZSBJV0xfRExfeHh4eCBWQUxVRQotICoKLSAqIHNoaWZ0aW5nIHZhbHVlIHRvIHRoZSBsZWZ0IG9uZSBiaXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkuICB4eHh4IHNob3VsZCBiZQotICogdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIChmb3IgZXhhbXBsZSwgV0VQKQotICoKLSAqIFlvdSB0aGVuIG5lZWQgdG8gZWl0aGVyIGFkZCBhIElXTF94eHh4X0RFQlVHKCkgbWFjcm8gZGVmaW5pdGlvbiBmb3IgeW91cgotICogY2xhc3NpZmljYXRpb24sIG9yIHVzZSBJV0xfREVCVUcoSVdMX0RMX3h4eHgsIC4uLikgd2hlbmV2ZXIgeW91IHdhbnQKLSAqIHRvIHNlbmQgb3V0cHV0IHRvIHRoYXQgY2xhc3NpZmljYXRpb24uCi0gKgotICogVG8gYWRkIHlvdXIgZGVidWcgbGV2ZWwgdG8gdGhlIGxpc3Qgb2YgbGV2ZWxzIHNlZW4gd2hlbiB5b3UgcGVyZm9ybQotICoKLSAqICUgY2F0IC9wcm9jL25ldC9pd2wvZGVidWdfbGV2ZWwKLSAqCi0gKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGl3bDM5NDVfZGVidWdfbGV2ZWxzIGFycmF5LgotICoKLSAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pd2wgdGhlbiB5b3UgZG8gbm90IGhhdmUKLSAqIENPTkZJR19JV0wzOTQ1X0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElXTF9ETF9JTkZPICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIElXTF9ETF9NQUM4MDIxMSAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElXTF9ETF9IT1NUX0NPTU1BTkQgICgxIDw8IDIpCi0jZGVmaW5lIElXTF9ETF9TVEFURSAgICAgICAgICgxIDw8IDMpCi0KLSNkZWZpbmUgSVdMX0RMX1JBRElPICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSVdMX0RMX1BPV0VSICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSVdMX0RMX1RFTVAgICAgICAgICAgKDEgPDwgOSkKLQotI2RlZmluZSBJV0xfRExfTk9USUYgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSVdMX0RMX1NDQU4gICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElXTF9ETF9BU1NPQyAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJV0xfRExfRFJPUCAgICAgICAgICAoMSA8PCAxMykKLQotI2RlZmluZSBJV0xfRExfVFhQT1dFUiAgICAgICAoMSA8PCAxNCkKLQotI2RlZmluZSBJV0xfRExfQVAgICAgICAgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBJV0xfRExfRlcgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSVdMX0RMX1JGX0tJTEwgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElXTF9ETF9GV19FUlJPUlMgICAgICgxIDw8IDE4KQotCi0jZGVmaW5lIElXTF9ETF9MRUQgICAgICAgICAgICgxIDw8IDE5KQotCi0jZGVmaW5lIElXTF9ETF9SQVRFICAgICAgICAgICgxIDw8IDIwKQotCi0jZGVmaW5lIElXTF9ETF9DQUxJQiAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJV0xfRExfV0VQICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSVdMX0RMX1RYICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElXTF9ETF9SWCAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJV0xfRExfSVNSICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSVdMX0RMX0hUICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJV0xfRExfMTFIICAgICAgICAgICAoMSA8PCAyOCkKLQotI2RlZmluZSBJV0xfRExfU1RBVFMgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSVdMX0RMX1RYX1JFUExZICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElXTF9ETF9RT1MgICAgICAgICAgICgxIDw8IDMxKQotCi0jZGVmaW5lIElXTF9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lORk8oZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RFTVAoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1RFTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUlgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9UWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lTUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0xFRChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5ELCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0ZXKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfRlcsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0RST1AoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0lPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFURShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1JBVEUsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX05PVElGKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTk9USUYsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChmLCBhLi4uKSBcCi0JSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSFQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IVCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TVEFUU19MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1FPUyhmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfUU9TLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFESU8oZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUkFESU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19QT1dFUihmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9QT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHXzExSChmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF8xMUgsIGYsICMjIGEpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2UyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX2l3bF8zOTQ1X2ZoX2hfXworI2RlZmluZSBfX2l3bF8zOTQ1X2ZoX2hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogaXdsMzk0NSBGbG93IEhhbmRsZXIgRGVmaW5pdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBJL08gYXJlYSBpcyBkaXJlY3RseSByZWFkL3dyaXRhYmxlIGJ5IGRyaXZlciAoZS5nLiBMaW51eCB1c2VzIHdyaXRlbCgpKQorICogQWRkcmVzc2VzIGFyZSBvZmZzZXRzIGZyb20gZGV2aWNlJ3MgUENJIGhhcmR3YXJlIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBGSDM5X01FTV9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAoMHgwODAwKQorI2RlZmluZSBGSDM5X01FTV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorCisjZGVmaW5lIEZIMzlfQ0JDQ19UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHgxNDApCisjZGVmaW5lIEZIMzlfVEZEQl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHgxODApCisjZGVmaW5lIEZIMzlfUkNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg0MDApCisjZGVmaW5lIEZIMzlfUlNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg0YzApCisjZGVmaW5lIEZIMzlfVENTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg1MDApCisjZGVmaW5lIEZIMzlfVFNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg2ODApCisKKy8qIFRGREIgKFRyYW5zbWl0IEZyYW1lIEJ1ZmZlciBEZXNjcmlwdG9yKSAqLworI2RlZmluZSBGSDM5X1RGREIoX2NoLCBidWYpCQkJKEZIMzlfVEZEQl9UQUJMRSArIFwKKwkJCQkJCSAoKF9jaCkgKiAyICsgKGJ1ZikpICogMHgyOCkKKyNkZWZpbmUgRkgzOV9URkRCX0NITkxfQlVGX0NUUkxfUkVHKF9jaCkJKEZIMzlfVEZEQl9UQUJMRSArIDB4NTAgKiAoX2NoKSkKKworLyogQ0JDQyBjaGFubmVsIGlzIFswLDJdICovCisjZGVmaW5lIEZIMzlfQ0JDQyhfY2gpCQkoRkgzOV9DQkNDX1RBQkxFICsgKF9jaCkgKiAweDgpCisjZGVmaW5lIEZIMzlfQ0JDQ19DVFJMKF9jaCkJKEZIMzlfQ0JDQyhfY2gpICsgMHgwMCkKKyNkZWZpbmUgRkgzOV9DQkNDX0JBU0UoX2NoKQkoRkgzOV9DQkNDKF9jaCkgKyAweDA0KQorCisvKiBSQ1NSIGNoYW5uZWwgaXMgWzAsMl0gKi8KKyNkZWZpbmUgRkgzOV9SQ1NSKF9jaCkJCQkoRkgzOV9SQ1NSX1RBQkxFICsgKF9jaCkgKiAweDQwKQorI2RlZmluZSBGSDM5X1JDU1JfQ09ORklHKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MDApCisjZGVmaW5lIEZIMzlfUkNTUl9SQkRfQkFTRShfY2gpCQkoRkgzOV9SQ1NSKF9jaCkgKyAweDA0KQorI2RlZmluZSBGSDM5X1JDU1JfV1BUUihfY2gpCQkoRkgzOV9SQ1NSKF9jaCkgKyAweDIwKQorI2RlZmluZSBGSDM5X1JDU1JfUlBUUl9BRERSKF9jaCkJKEZIMzlfUkNTUihfY2gpICsgMHgyNCkKKworI2RlZmluZSBGSDM5X1JTQ1NSX0NITkwwX1dQVFIJCShGSDM5X1JDU1JfV1BUUigwKSkKKworLyogUlNTUiAqLworI2RlZmluZSBGSDM5X1JTU1JfQ1RSTAkJCShGSDM5X1JTU1JfVEFCTEUgKyAweDAwMCkKKyNkZWZpbmUgRkgzOV9SU1NSX1NUQVRVUwkJKEZIMzlfUlNTUl9UQUJMRSArIDB4MDA0KQorCisvKiBUQ1NSICovCisjZGVmaW5lIEZIMzlfVENTUihfY2gpCQkJKEZIMzlfVENTUl9UQUJMRSArIChfY2gpICogMHgyMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX0NPTkZJRyhfY2gpCQkoRkgzOV9UQ1NSKF9jaCkgKyAweDAwKQorI2RlZmluZSBGSDM5X1RDU1JfQ1JFRElUKF9jaCkJCShGSDM5X1RDU1IoX2NoKSArIDB4MDQpCisjZGVmaW5lIEZIMzlfVENTUl9CVUZGX1NUVFMoX2NoKQkoRkgzOV9UQ1NSKF9jaCkgKyAweDA4KQorCisvKiBUU1NSICovCisjZGVmaW5lIEZIMzlfVFNTUl9DQkJfQkFTRSAgICAgICAgKEZIMzlfVFNTUl9UQUJMRSArIDB4MDAwKQorI2RlZmluZSBGSDM5X1RTU1JfTVNHX0NPTkZJRyAgICAgIChGSDM5X1RTU1JfVEFCTEUgKyAweDAwOCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVUyAgICAgICAoRkgzOV9UU1NSX1RBQkxFICsgMHgwMTApCisKKworLyogREJNICovCisKKyNkZWZpbmUgRkgzOV9TUlZDX0NITkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX1JCRENfU0laRSAgICAgKDIwKQorI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEggICAgICAoNCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19CSVRfV1JfU1RUU19FTiAgICAoMHgwODAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFICAgICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkRSQkRfRU5fRU5BQkxFICAgICAgICAgICAoMHgyMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjgJCSgweDAxMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9JUlFfREVTVF9JTlRfSE9TVAkJKDB4MDAwMDEwMDApCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0ZICQkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX1RYRgkJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9EUklWRVIJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMCSgweDAwMDAwMDAwKQorI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMCSgweDAwMDAwMDA4KQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQJCSgweDAwMjAwMDAwKQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX1JUQ19OT0lOVAkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX1BBVVNFCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX0VOQUJMRQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQJCSgweDAwMDA0MDAwKQorCisjZGVmaW5lIEZIMzlfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX0JJVF9URkRCX1dQVFIJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTgkoMHhGRjAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OCSgweDAwRkYwMDAwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCCSgweDAwMDAwNDAwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVEZEX09OCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9DQkJfT04JCSgweDAwMDAwMDgwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEgJKDB4MDAwMDAwMjApCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfUlNQX1dBSVRfVEgJCSgweDAwMDAwMDA1KQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaCkJKEJJVChfY2gpIDw8IDI0KQorI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoKQkoQklUKF9jaCkgPDwgMTYpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShfY2gpIFwKKwkoRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoKSB8IFwKKwkgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaCkpCisKKyNkZWZpbmUgRkgzOV9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJCQkoMHgwMTAwMDAwMCkKKworc3RydWN0IGl3bDM5NDVfdGZkX3RiIHsKKwlfX2xlMzIgYWRkcjsKKwlfX2xlMzIgbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpd2wzOTQ1X3RmZCB7CisJX19sZTMyIGNvbnRyb2xfZmxhZ3M7CisJc3RydWN0IGl3bDM5NDVfdGZkX3RiIHRic1s0XTsKKwl1OCBfX3BhZFsyOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZW5kaWYgLyogX19pd2xfMzk0NV9maF9oX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDk0ZWEwZTYuLjczZjkzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3NyArNjksMjYgQEAKICNpZm5kZWYgX19pd2xfMzk0NV9od19fCiAjZGVmaW5lIF9faXdsXzM5NDVfaHdfXwogCisjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgorCiAvKgogICogdUNvZGUgcXVldWUgbWFuYWdlbWVudCBkZWZpbml0aW9ucyAuLi4KICAqIFF1ZXVlICM0IGlzIHRoZSBjb21tYW5kIHF1ZXVlIGZvciAzOTQ1IGFuZCA0OTY1LgogICovCi0jZGVmaW5lIElXTF9DTURfUVVFVUVfTlVNICAgICAgIDQKLQotLyogVHggcmF0ZXMgKi8KLSNkZWZpbmUgSVdMX0NDS19SQVRFUyA0Ci0jZGVmaW5lIElXTF9PRkRNX1JBVEVTIDgKLSNkZWZpbmUgSVdMX0hUX1JBVEVTIDAKLSNkZWZpbmUgSVdMX01BWF9SQVRFUyAgKElXTF9DQ0tfUkFURVMrSVdMX09GRE1fUkFURVMrSVdMX0hUX1JBVEVTKQorI2RlZmluZSBJV0xfQ01EX1FVRVVFX05VTQk0CiAKIC8qIFRpbWUgY29uc3RhbnRzICovCiAjZGVmaW5lIFNIT1JUX1NMT1RfVElNRSA5CiAjZGVmaW5lIExPTkdfU0xPVF9USU1FIDIwCiAKIC8qIFJTU0kgdG8gZEJtICovCi0jZGVmaW5lIElXTF9SU1NJX09GRlNFVAk5NQorI2RlZmluZSBJV0wzOV9SU1NJX09GRlNFVAk5NQogCiAvKgogICogRUVQUk9NIHJlbGF0ZWQgY29uc3RhbnRzLCBlbnVtcywgYW5kIHN0cnVjdHVyZXMuCiAgKi8KLQotLyoKLSAqIEVFUFJPTSBhY2Nlc3MgdGltZSB2YWx1ZXM6Ci0gKgotICogRHJpdmVyIGluaXRpYXRlcyBFRVBST00gcmVhZCBieSB3cml0aW5nIGJ5dGUgYWRkcmVzcyA8PCAxIHRvIENTUl9FRVBST01fUkVHLAotICogICB0aGVuIGNsZWFyaW5nICh3aXRoIHN1YnNlcXVlbnQgcmVhZC9tb2RpZnkvd3JpdGUpIENTUl9FRVBST01fUkVHIGJpdAotICogICBDU1JfRUVQUk9NX1JFR19CSVRfQ01EICgweDIpLgotICogRHJpdmVyIHRoZW4gcG9sbHMgQ1NSX0VFUFJPTV9SRUcgZm9yIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLICgweDEpLgotICogV2hlbiBwb2xsaW5nLCB3YWl0IDEwIHVTZWMgYmV0d2VlbiBwb2xsaW5nIGxvb3BzLCB1cCB0byBhIG1heGltdW0gNTAwMCB1U2VjLgotICogRHJpdmVyIHJlYWRzIDE2LWJpdCB2YWx1ZSBmcm9tIGJpdHMgMzEtMTYgb2YgQ1NSX0VFUFJPTV9SRUcuCi0gKi8KLSNkZWZpbmUgSVdMX0VFUFJPTV9BQ0NFU1NfVElNRU9VVAk1MDAwIC8qIHVTZWMgKi8KLQotLyoKLSAqIFJlZ3VsYXRvcnkgY2hhbm5lbCB1c2FnZSBmbGFncyBpbiBFRVBST00gc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbC5mbGFncy4KLSAqCi0gKiBJQlNTIGFuZC9vciBBUCBvcGVyYXRpb24gaXMgYWxsb3dlZCAqb25seSogb24gdGhvc2UgY2hhbm5lbHMgd2l0aAotICogKFZBTElEICYmIElCU1MgJiYgQUNUSVZFICYmICFSQURBUikuICBUaGlzIHJlc3RyaWN0aW9uIGlzIGluIHBsYWNlIGJlY2F1c2UKLSAqIFJBREFSIGRldGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAzOTQ1IGRyaXZlciwgYnV0IGlzIGEKLSAqIHJlcXVpcmVtZW50IGZvciBlc3RhYmxpc2hpbmcgYSBuZXcgbmV0d29yayBmb3IgbGVnYWwgb3BlcmF0aW9uIG9uIGNoYW5uZWxzCi0gKiByZXF1aXJpbmcgUkFEQVIgZGV0ZWN0aW9uIG9yIHJlc3RyaWN0aW5nIEFDVElWRSBzY2FubmluZy4KLSAqCi0gKiBOT1RFOiAgIldJREUiIGZsYWcgaW5kaWNhdGVzIHRoYXQgMjAgTUh6IGNoYW5uZWwgaXMgc3VwcG9ydGVkOwotICogICAgICAgIDM5NDUgZG9lcyBub3Qgc3VwcG9ydCBGQVQgNDAgTUh6LXdpZGUgY2hhbm5lbHMuCi0gKgotICogTk9URTogIFVzaW5nIGEgY2hhbm5lbCBpbmFwcHJvcHJpYXRlbHkgd2lsbCByZXN1bHQgaW4gYSB1Q29kZSBlcnJvciEKLSAqLwotZW51bSB7Ci0JRUVQUk9NX0NIQU5ORUxfVkFMSUQgPSAoMSA8PCAwKSwJLyogdXNhYmxlIGZvciB0aGlzIFNLVS9nZW8gKi8KLQlFRVBST01fQ0hBTk5FTF9JQlNTID0gKDEgPDwgMSksCQkvKiB1c2FibGUgYXMgYW4gSUJTUyBjaGFubmVsICovCi0JLyogQml0IDIgUmVzZXJ2ZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9BQ1RJVkUgPSAoMSA8PCAzKSwJLyogYWN0aXZlIHNjYW5uaW5nIGFsbG93ZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9SQURBUiA9ICgxIDw8IDQpLAkvKiByYWRhciBkZXRlY3Rpb24gcmVxdWlyZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9XSURFID0gKDEgPDwgNSksCQkvKiAyMCBNSHogY2hhbm5lbCBva2F5ICovCi0JLyogQml0IDYgUmVzZXJ2ZWQgKHdhcyBOYXJyb3cgQ2hhbm5lbCkgKi8KLQlFRVBST01fQ0hBTk5FTF9ERlMgPSAoMSA8PCA3KSwJLyogZHluYW1pYyBmcmVxIHNlbGVjdGlvbiBjYW5kaWRhdGUgKi8KLX07Ci0KLS8qIFNLVSBDYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfT1BfTU9ERV9NUkMgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKIAotLyogKnJlZ3VsYXRvcnkqIGNoYW5uZWwgZGF0YSBmcm9tIGVlcHJvbSwgb25lIGZvciBlYWNoIGNoYW5uZWwgKi8KLXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIHsKLQl1OCBmbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwotCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogLyoKICAqIE1hcHBpbmcgb2YgYSBUeCBwb3dlciBsZXZlbCwgYXQgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSwKICAqICAgdG8gYSByYWRpby9EU1AgZ2FpbiB0YWJsZSBpbmRleC4KQEAgLTIzMyw3ICsxODIsNyBAQAogICogMi40IEdIeiBjaGFubmVscyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKICAqLwogCXUxNiBiYW5kXzFfY291bnQ7CS8qIGFicy5vZnM6IDE5NiAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07ICAvKiBhYnMub2ZzOiAxOTYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07ICAvKiBhYnMub2ZzOiAxOTggKi8KIAogLyoKICAqIDQuOSBHSHogY2hhbm5lbHMgMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsCkBAIC0yNDEsMjggKzE5MCwyOCBAQAogICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCiAgKi8KIAl1MTYgYmFuZF8yX2NvdW50OwkvKiBhYnMub2ZzOiAyMjYgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCiAKIC8qCiAgKiA1LjIgR0h6IGNoYW5uZWxzIDM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKICAqICg1MTcwLTUzMjBNSHopCiAgKi8KIAl1MTYgYmFuZF8zX2NvdW50OwkvKiBhYnMub2ZzOiAyNTQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCiAKIC8qCiAgKiA1LjUgR0h6IGNoYW5uZWxzIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCiAgKiAoNTUwMC01NzAwTUh6KQogICovCiAJdTE2IGJhbmRfNF9jb3VudDsJLyogYWJzLm9mczogMjgwICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLwogCiAvKgogICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CiAgKiAoNTcyNS01ODI1TUh6KQogICovCiAJdTE2IGJhbmRfNV9jb3VudDsJLyogYWJzLm9mczogMzA0ICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF81X2NoYW5uZWxzWzZdOyAgLyogYWJzLm9mczogMzA2ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzVfY2hhbm5lbHNbNl07ICAvKiBhYnMub2ZzOiAzMDYgKi8KIAogCXU4IHJlc2VydmVkOVsxOTRdOwogCkBAIC0yNzYsMTI1ICsyMjUsMTUgQEAKIAl1OCByZXNlcnZlZDE2WzE3Ml07CS8qIGZpbGwgb3V0IHRvIGZ1bGwgMTAyNCBieXRlIGJsb2NrICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJV0xfRUVQUk9NX0lNQUdFX1NJWkUgMTAyNAorI2RlZmluZSBJV0wzOTQ1X0VFUFJPTV9JTUdfU0laRSAxMDI0CiAKIC8qIEVuZCBvZiBFRVBST00gKi8KIAotCi0jaW5jbHVkZSAiaXdsLTM5NDUtY29tbWFuZHMuaCIKLQotI2RlZmluZSBQQ0lfTElOS19DVFJMICAgICAgMHgwRjAKLSNkZWZpbmUgUENJX1BPV0VSX1NPVVJDRSAgIDB4MEM4Ci0jZGVmaW5lIFBDSV9SRUdfV1VNOCAgICAgICAweDBFOAotI2RlZmluZSBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCAgICAgICAgICgweDgwMDAwMDAwKQotCi0vKj09PSBGSCAoZGF0YSBGbG93IEhhbmRsZXIpID09PSovCi0jZGVmaW5lIEZIX0JBU0UgICAgICgweDgwMCkKLQotI2RlZmluZSBGSF9DQkNDX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDE0MCkKLSNkZWZpbmUgRkhfVEZEQl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHgxODApCi0jZGVmaW5lIEZIX1JDU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NDAwKQotI2RlZmluZSBGSF9SU1NSX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDRjMCkKLSNkZWZpbmUgRkhfVENTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg1MDApCi0jZGVmaW5lIEZIX1RTU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NjgwKQotCi0vKiBURkRCIChUcmFuc21pdCBGcmFtZSBCdWZmZXIgRGVzY3JpcHRvcikgKi8KLSNkZWZpbmUgRkhfVEZEQihfY2hhbm5lbCwgYnVmKSBcCi0JKEZIX1RGREJfVEFCTEUrKChfY2hhbm5lbCkqMisoYnVmKSkqMHgyOCkKLSNkZWZpbmUgQUxNX0ZIX1RGREJfQ0hOTF9CVUZfQ1RSTF9SRUcoX2NoYW5uZWwpIFwKLQkoRkhfVEZEQl9UQUJMRSArIDB4NTAgKiBfY2hhbm5lbCkKLS8qIENCQ0MgX2NoYW5uZWwgaXMgWzAsMl0gKi8KLSNkZWZpbmUgRkhfQ0JDQyhfY2hhbm5lbCkgICAgICAgICAgIChGSF9DQkNDX1RBQkxFKyhfY2hhbm5lbCkqMHg4KQotI2RlZmluZSBGSF9DQkNDX0NUUkwoX2NoYW5uZWwpICAgICAgKEZIX0NCQ0MoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX0NCQ0NfQkFTRShfY2hhbm5lbCkgICAgICAoRkhfQ0JDQyhfY2hhbm5lbCkrMHgwNCkKLQotLyogUkNTUiBfY2hhbm5lbCBpcyBbMCwyXSAqLwotI2RlZmluZSBGSF9SQ1NSKF9jaGFubmVsKSAgICAgICAgICAgKEZIX1JDU1JfVEFCTEUrKF9jaGFubmVsKSoweDQwKQotI2RlZmluZSBGSF9SQ1NSX0NPTkZJRyhfY2hhbm5lbCkgICAgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX1JDU1JfUkJEX0JBU0UoX2NoYW5uZWwpICAoRkhfUkNTUihfY2hhbm5lbCkrMHgwNCkKLSNkZWZpbmUgRkhfUkNTUl9XUFRSKF9jaGFubmVsKSAgICAgIChGSF9SQ1NSKF9jaGFubmVsKSsweDIwKQotI2RlZmluZSBGSF9SQ1NSX1JQVFJfQUREUihfY2hhbm5lbCkgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MjQpCi0KLSNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfV1BUUiAgICAgICAgKEZIX1JDU1JfV1BUUigwKSkKLQotLyogUlNTUiAqLwotI2RlZmluZSBGSF9SU1NSX0NUUkwgICAgICAgICAgICAoRkhfUlNTUl9UQUJMRSsweDAwMCkKLSNkZWZpbmUgRkhfUlNTUl9TVEFUVVMgICAgICAgICAgKEZIX1JTU1JfVEFCTEUrMHgwMDQpCi0jZGVmaW5lIEZIX1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRQkoMHgwMTAwMDAwMCkKLS8qIFRDU1IgKi8KLSNkZWZpbmUgRkhfVENTUihfY2hhbm5lbCkgICAgICAgICAgIChGSF9UQ1NSX1RBQkxFKyhfY2hhbm5lbCkqMHgyMCkKLSNkZWZpbmUgRkhfVENTUl9DT05GSUcoX2NoYW5uZWwpICAgIChGSF9UQ1NSKF9jaGFubmVsKSsweDAwKQotI2RlZmluZSBGSF9UQ1NSX0NSRURJVChfY2hhbm5lbCkgICAgKEZIX1RDU1IoX2NoYW5uZWwpKzB4MDQpCi0jZGVmaW5lIEZIX1RDU1JfQlVGRl9TVFRTKF9jaGFubmVsKSAoRkhfVENTUihfY2hhbm5lbCkrMHgwOCkKLS8qIFRTU1IgKi8KLSNkZWZpbmUgRkhfVFNTUl9DQkJfQkFTRSAgICAgICAgKEZIX1RTU1JfVEFCTEUrMHgwMDApCi0jZGVmaW5lIEZIX1RTU1JfTVNHX0NPTkZJRyAgICAgIChGSF9UU1NSX1RBQkxFKzB4MDA4KQotI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVUyAgICAgICAoRkhfVFNTUl9UQUJMRSsweDAxMCkKLQotCi0vKiBEQk0gKi8KLQotI2RlZmluZSBBTE1fRkhfU1JWQ19DSE5MICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX1JCRENfU0laRSAgICAgKDIwKQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19JUlFfUkJUSCAgICAgICg0KQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfQklUX1dSX1NUVFNfRU4gICAgKDB4MDgwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgICAgICAgICAgICgweDIwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4ICAgICAgICAgKDB4MDEwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfSVJRX0RFU1RfSU5UX0hPU1QgICAgICAgICAoMHgwMDAwMTAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX1RYRiAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0RSSVZFUiAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9ESVNBQkxFX1ZBTCAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMICAgICAoMHgwMDAwMDAwOCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQgICAgICAgICAgICgweDAwMjAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFICAgICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX1ZBTF9URkRCX1ZBTElEICAgICAgICAgICgweDAwMDA0MDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfQklUX1RGREJfV1BUUiAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1NOT09QX1JEX1RYUERfT04gICAgICAoMHhGRjAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX1RYUERfT04gICAgICAoMHgwMEZGMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCICAgICgweDAwMDAwNDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9DQkJfT04gICAgICAgKDB4MDAwMDAwODApCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIICAgICAoMHgwMDAwMDAyMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIICAgICAgICAgICAoMHgwMDAwMDAwNSkKLQotI2RlZmluZSBBTE1fVEJfTUFYX0JZVEVTX0NPVU5UICAgICAgKDB4RkZGMCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaGFubmVsKSBcCi0JKCgxTFUgPDwgX2NoYW5uZWwpIDw8IDI0KQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2hhbm5lbCkgXAotCSgoMUxVIDw8IF9jaGFubmVsKSA8PCAxNikKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUoX2NoYW5uZWwpIFwKLQkoQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hhbm5lbCkgfCBcCi0JIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaGFubmVsKSkKICNkZWZpbmUgUENJX0NGR19SRVZfSURfQklUX0JBU0lDX1NLVSAgICAgICAgICAgICAgICAoMHg0MCkJLyogYml0IDYgICAgKi8KICNkZWZpbmUgUENJX0NGR19SRVZfSURfQklUX1JUUCAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkJLyogYml0IDcgICAgKi8KIAogI2RlZmluZSBURkRfUVVFVUVfTUlOICAgICAgICAgICAwCi0jZGVmaW5lIFRGRF9RVUVVRV9NQVggICAgICAgICAgIDYKLSNkZWZpbmUgVEZEX1FVRVVFX1NJWkVfTUFYICAgICAgKDI1NikKKyNkZWZpbmUgVEZEX1FVRVVFX01BWCAgICAgICAgICAgNQkvKiA0IERBVEEgKyAxIENNRCAqLwogCiAjZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQogCkBAIC00MTYsMTIgKzI1NSw2IEBACiAjZGVmaW5lIFRGRF9DVExfUEFEX1NFVChuKSAgICAgICAgIChuIDw8IDI4KQogI2RlZmluZSBURkRfQ1RMX1BBRF9HRVQoY3RsKSAgICAgICAoY3RsID4+IDI4KQogCi0jZGVmaW5lIFRGRF9UWF9DTURfU0xPVFMgMjU2Ci0jZGVmaW5lIFRGRF9DTURfU0xPVFMgMzIKLQotI2RlZmluZSBURkRfTUFYX1BBWUxPQURfU0laRSAoc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX21ldGEpKQotCiAvKgogICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKICAqLwpAQCAtNDMwLDQ1ICsyNjMsMzUgQEAKIAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogMzk0NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwotI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKLSNkZWZpbmUgQUxNX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCiAKLSNkZWZpbmUgUlRDX0RBVEFfTE9XRVJfQk9VTkQJCQkoMHg4MDAwMDApCi0jZGVmaW5lIEFMTV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQogCi0jZGVmaW5lIEFMTV9SVENfSU5TVF9TSVpFIChBTE1fUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgQUxNX1JUQ19EQVRBX1NJWkUgKEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0wzOV9SVENfSU5TVF9TSVpFIChJV0wzOV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0wzOV9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMMzlfUlRDX0RBVEFfU0laRSAoSVdMMzlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMMzlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgQUxNX1JUQ19JTlNUX1NJWkUKLSNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgQUxNX1JUQ19EQVRBX1NJWkUKKyNkZWZpbmUgSVdMMzlfTUFYX0lOU1RfU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9EQVRBX1NJWkUgSVdMMzlfUlRDX0RBVEFfU0laRQogCiAvKiBTaXplIG9mIHVDb2RlIGluc3RydWN0aW9uIG1lbW9yeSBpbiBib290c3RyYXAgc3RhdGUgbWFjaGluZSAqLwotI2RlZmluZSBJV0xfTUFYX0JTTV9TSVpFIEFMTV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9CU01fU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCiAKICNkZWZpbmUgSVdMMzlfTUFYX05VTV9RVUVVRVMJOAogCiBzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyID49IFJUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgotCSAgICAgICAoYWRkciA8IEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCk7CisJcmV0dXJuIChhZGRyID49IElXTDM5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgorCSAgICAgICAoYWRkciA8IElXTDM5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIAogLyogQmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGl3bDM5NDVfc2hhcmVkIGlzIHByb3ZpZGVkIHRvIEZIX1RTU1JfQ0JCX0JBU0UKICAqIGFuZCAmaXdsMzk0NV9zaGFyZWQucnhfcmVhZF9wdHJbMF0gaXMgcHJvdmlkZWQgdG8gRkhfUkNTUl9SUFRSX0FERFIoMCkgKi8KIHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCB7CiAJX19sZTMyIHR4X2Jhc2VfcHRyWzhdOwotCV9fbGUzMiByeF9yZWFkX3B0clszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWVfZGF0YSB7Ci0JX19sZTMyIGFkZHI7Ci0JX19sZTMyIGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgewotCV9fbGUzMiBjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZV9kYXRhIHBhWzRdOwotCXU4IHJlc2VydmVkWzI4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdGF0aWMgaW5saW5lIHU4IGl3bDM5NDVfaHdfZ2V0X3JhdGUoX19sZTE2IHJhdGVfbl9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0MGZkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDM5NDVfaW9faF9fCi0jZGVmaW5lIF9faXdsMzk0NV9pb19oX18KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJpd2wtMzk0NS1kZWJ1Zy5oIgotCi0vKgotICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCi0gKgotICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKLSAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKLSAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBpcyBwcmludGVkIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQotICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBfX0xJTkVfXyB0byB0aGUgZG91YmxlIHByZWZpeCB2ZXJzaW9uLgotICoKLSAqIElmIHlvdSB3aXNoIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgYW55IGRlYnVnIG9yIHN0YXRlIGNoZWNraW5nLAotICogeW91IHNob3VsZCB1c2UgdGhlIHNpbmdsZSBfIHByZWZpeCB2ZXJzaW9uIChhcyBpcyB1c2VkIGJ5IGRlcGVuZGVudCBJTwotICogcm91dGluZXMsIGZvciBleGFtcGxlIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCi0gKiBfaXdsMzk0NV9yZWFkMzIuKQotICoKLSAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgKmV4dHJlbWVseSogdXNlZnVsIGluIHF1aWNrbHkgaXNvbGF0aW5nIGNvZGUgZGVsdGFzCi0gKiB3aGljaCByZXN1bHQgaW4gbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUgSS9PLiAgSW4gY29tYmluYXRpb24gd2l0aAotICogZ2l0LWJpc2VjdCBhbmQgdGhlIElPIGRlYnVnIGxldmVsIHlvdSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljCi0gKiBjb21taXQgd2hpY2ggYnJlYWtzIHRoZSBJTyBzZXF1ZW5jZSB0byB0aGUgaGFyZHdhcmUuCi0gKgotICovCi0KLSNkZWZpbmUgX2l3bDM5NDVfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgaW93cml0ZTMyKCh2YWwpLCAocHJpdiktPmh3X2Jhc2UgKyAob2ZzKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV93cml0ZTMyKGNvbnN0IGNoYXIgKmYsIHUzMiBsLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQotewotCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOwotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwotfQotI2RlZmluZSBpd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGUzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIG9mcywgdmFsKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKQotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcykgaW9yZWFkMzIoKHByaXYpLT5od19iYXNlICsgKG9mcykpCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBvZnMpCi17Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCBmLCBsKTsKLQlyZXR1cm4gX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVhZDMyKHByaXYsIG9mcylfX2l3bDM5NDVfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgb2ZzKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9yZWFkMzIocCwgbykgX2l3bDM5NDVfcmVhZDMyKHAsIG8pCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlkbyB7Ci0JCWlmICgoX2l3bDM5NDVfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKLQkJCXJldHVybiBpOwotCQl1ZGVsYXkoMTApOwotCQlpICs9IDEwOwotCX0gd2hpbGUgKGkgPCB0aW1lb3V0KTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bDM5NDVfcG9sbF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAotCQkgICAgICBhZGRyLCBiaXRzLCBtYXNrLAotCQkgICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcG9sbF9iaXQocHJpdiwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2wzOTQ1X3NldF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfc2V0X2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JdTMyIHZhbCA9IF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzazsKLQlJV0xfREVCVUdfSU8oInNldF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfc2V0X2JpdChwLCByLCBtKSBfX2l3bDM5NDVfc2V0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXQocCwgciwgbSkgX2l3bDM5NDVfc2V0X2JpdChwLCByLCBtKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9jbGVhcl9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpICYgfm1hc2spOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKLQlfaXdsMzk0NV93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkgX19pd2wzOTQ1X2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X2NsZWFyX2JpdChwLCByLCBtKSBfaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBfaXdsMzk0NV9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCS8qIHRoaXMgYml0IHdha2VzIHVwIHRoZSBOSUMgKi8KLQlfaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQlyZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICBDU1JfR1BfQ05UUkxfUkVHX1ZBTF9NQUNfQUNDRVNTX0VOLAotCQkJICAgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgfAotCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCksIDUwKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIk1BQyBpcyBpbiBkZWVwIHNsZWVwIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JYXRvbWljX2luYygmcHJpdi0+cmVzdHJpY3RfcmVmY250KTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0RFQlVHX0lORk8oIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgYXQgIgotCQkJICAgICAgICJsaW5lICVkLlxuIiwgbCk7Ci0KLQlJV0xfREVCVUdfSU8oImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoX19GSUxFX18sIF9fTElORV9fLCBwcml2KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotI2VuZGlmCi0JCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlZC5cbiIsIGwpOwotCi0JSVdMX0RFQlVHX0lPKCJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfX2l3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdikKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHUzMiBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHUzMiBfX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZykKLXsKLQl1MzIgdmFsdWUgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIHJlZyk7Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgJWRcbiIsIGYsIGwpOwotCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCU0WCkgPSAweCUwOHggLSAlcyAlZCBcbiIsIHJlZywgdmFsdWUsCi0JCSAgICAgZiwgbCk7Ci0JcmV0dXJuIHZhbHVlOwotfQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKSBcCi0JX19pd2wzOTQ1X3JlYWRfZGlyZWN0MzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCByZWcpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIgX2l3bDM5NDVfcmVhZF9kaXJlY3QzMgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV93cml0ZV9kaXJlY3QzMih1MzIgbGluZSwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsdWUpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSkgXAotCV9faXdsMzk0NV93cml0ZV9kaXJlY3QzMihfX0xJTkVfXywgcHJpdiwgcmVnLCB2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIgX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV93cml0ZV9yZWdfYnVmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgICB1MzIgcmVnLCB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQl1MzIgY291bnQgPSBzaXplb2YodTMyKTsKLQotCWlmICgocHJpdiAhPSBOVUxMKSAmJiAodmFsdWVzICE9IE5VTEwpKSB7Ci0JCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gY291bnQsIHJlZyArPSBjb3VudCwgdmFsdWVzKyspCi0JCQlfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgIHUzMiBhZGRyLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3BvbGxfYml0KHByaXYsIGFkZHIsIG1hc2ssIG1hc2ssIHRpbWVvdXQpOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgICAgdTMyIGFkZHIsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmV0ICA9IF9pd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKLQotCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKLQkJCSAgICAgInRpbWVkb3V0IC0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPKCJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYICIKLQkJCSAgICAgIi0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIHJldCwgZiwgbCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bDM5NDVfcmVhZF9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkFERFIsIHJlZyB8ICgzIDw8IDI0KSk7Ci0Jcm1iKCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkRBVCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkX3BycGgodTMyIGxpbmUsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgXAotCV9faXdsMzk0NV9yZWFkX3BycGgoX19MSU5FX18sIHByaXYsIHJlZykKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoIF9pd2wzOTQ1X3JlYWRfcHJwaAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfV0FERFIsCi0JCQkgICAgICAoKGFkZHIgJiAweDAwMDBGRkZGKSB8ICgzIDw8IDI0KSkpOwotCXdtYigpOwotCV9pd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dEQVQsIHZhbCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfd3JpdGVfcHJwaCh1MzIgbGluZSwgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGVfcHJwaChfX0xJTkVfXywgcHJpdiwgYWRkciwgdmFsKTsKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaCBfaXdsMzk0NV93cml0ZV9wcnBoCi0jZW5kaWYKLQotI2RlZmluZSBfaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgfCBtYXNrKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9zZXRfYml0c19wcnBoKHUzMiBsaW5lLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQl1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSBsaW5lICVkXG4iLCBsaW5lKTsKLQotCV9pd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9faXdsMzk0NV9zZXRfYml0c19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX3BycGggX2l3bDM5NDVfc2V0X2JpdHNfcHJwaAotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoKF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCh1MzIgbGluZSwKLQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIGJpdHMsIHUzMiBtYXNrKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCV9pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spOwotfQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spIFwKLQlfX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIGJpdHMsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCBfaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgoc3RydWN0IGl3bDM5NDVfcHJpdgotCQkJCQkJICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZyk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCi17Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBhZGRyKTsKLQlybWIoKTsKLQlyZXR1cm4gaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9XQUREUiwgYWRkcik7Ci0Jd21iKCk7Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtX2J1ZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQkJICB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCXdtYigpOwotCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gc2l6ZW9mKHUzMiksIHZhbHVlcysrKQotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0RBVCwgKnZhbHVlcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCmluZGV4IDRjNjM4OTAuLmFjMjJmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCw2ICsyNCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zOCw4ICszOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCisjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKLSNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewpAQCAtNjcsOCArNzAsOCBAQAogI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KICNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKIAotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDE7CkBAIC04MCwyNyArODMsMjcgQEAKIH0KIAogLyogU2VuZCBsZWQgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfbGVkX2NtZCAqbGVkX2NtZCkKK3N0YXRpYyBpbnQgaXdsX3NlbmRfbGVkX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKQogewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfTEVEU19DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbGVkX2NtZCksCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9sZWRfY21kKSwKIAkJLmRhdGEgPSBsZWRfY21kLAogCQkubWV0YS5mbGFncyA9IENNRF9BU1lOQywKIAkJLm1ldGEudS5jYWxsYmFjayA9IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjaywKIAl9OwogCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogCiAKIC8qIFNldCBsZWQgb24gY29tbWFuZCAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9wYXR0ZXJuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBpZHgpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAogCX07CkBAIC0xMTQsMTEgKzExNywxMCBAQAogfQogCiAKLSNpZiAxCiAvKiBTZXQgbGVkIG9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKKwlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkX2NtZCA9IHsKIAkJLmlkID0gbGVkX2lkLAogCQkub24gPSBJV0xfTEVEX1NPTElELAogCQkub2ZmID0gMCwKQEAgLTEyOCwyNCArMTMwLDIyIEBACiB9CiAKIC8qIFNldCBsZWQgb2ZmIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb2ZmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5vbiA9IDAsCiAJCS5vZmYgPSAwLAogCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKIAl9OwotCUlXTF9ERUJVR19MRUQoImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9mZiAlZFxuIiwgbGVkX2lkKTsKIAlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7CiB9Ci0jZW5kaWYKLQogCiAvKgogICogYnJpZ2h0bmVzcyBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yIFR4L1J4IExFRAogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgICF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKQpAQCAtMTY0LDkgKzE2NCw5IEBACiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9sZWQsIGxlZF9kZXYpOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CisJc3RydWN0IGl3bF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd2xfbGVkLCBsZWRfZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWNhc2UgTEVEX0ZVTEw6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMTsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyAgYXNzb2NpYXRlZFxuIik7CisJCQlJV0xfREVCVUdfTEVEKHByaXYsICJNQUMgaXMgIGFzc29jaWF0ZWRcbiIpOwogCQl9CiAJCWlmIChsZWQtPmxlZF9vbikKIAkJCWxlZC0+bGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAljYXNlIExFRF9PRkY6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMDsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKKwkJCUlXTF9ERUJVR19MRUQocHJpdiwgIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKIAkJfQogCQlpZiAobGVkLT5sZWRfb2ZmKQogCQkJbGVkLT5sZWRfb2ZmKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0yMDIsOCArMjAyLDggQEAKIC8qCiAgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bDM5NDVfbGVkICpsZWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bF9sZWQgKmxlZCwKIAkJCQkgICBlbnVtIGxlZF90eXBlIHR5cGUsIHU4IHNldF9sZWQsCiAJCQkJICAgY2hhciAqdHJpZ2dlcikKIHsKQEAgLTIxOSw3ICsyMTksNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjM0LDcgKzIzNCw3IEBACiAvKgogICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcwogICovCi1zdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaW5kZXg7CiAJdTY0IGN1cnJlbnRfdHB0ID0gcHJpdi0+cnh0eHBhY2tldHM7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKIAkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgKiBoYXBwZW4gdmVyeSBmcmVxdWVudCB3ZSBwb3N0cG9uZSBsZWQgY29tbWFuZCB0byBiZSBjYWxsZWQgZnJvbQogICogUkVQTFkgaGFuZGxlciBzbyB3ZSBrbm93IHVjb2RlIGlzIHVwCiAgKi8KLXZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCBibGlua19pZHg7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCiAKIC8qIFJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlciAqLwotaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWNoYXIgKnRyaWdnZXI7CiAJaW50IHJldDsKQEAgLTMxNyw3ICszMTcsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOnJhZGlvIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9vbjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHByaXYsCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczpSWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczo6UlgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6VFgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6OlRYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKQEAgLTM4OSw3ICszODksNyBAQAogCiAKIC8qIHVucmVnaXN0ZXIgbGVkIGNsYXNzICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsMzk0NV9sZWQgKmxlZCwgdTggc2V0X2xlZCkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfbGVkICpsZWQsIHU4IHNldF9sZWQpCiB7CiAJaWYgKCFsZWQtPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQAogfQogCiAvKiBVbnJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlcnMgKi8KLXZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOwpAQCAtNDEwLDMgKzQxMCw0IEBACiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sIDEpOwogfQogCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCmluZGV4IDc0OWFjMDMuLjNiNjU2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw0OCArMjcsMjAgQEAKICNpZm5kZWYgSVdMMzk0NV9MRURTX0gKICNkZWZpbmUgSVdMMzk0NV9MRURTX0gKIAotc3RydWN0IGl3bDM5NDVfcHJpdjsKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKLSNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQotI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCi0jZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCi0jZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCi0jZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCisjaW5jbHVkZSAiaXdsLWxlZC5oIgogCi1lbnVtIGxlZF90eXBlIHsKLQlJV0xfTEVEX1RSR19UWCwKLQlJV0xfTEVEX1RSR19SWCwKLQlJV0xfTEVEX1RSR19BU1NPQywKLQlJV0xfTEVEX1RSR19SQURJTywKLQlJV0xfTEVEX1RSR19NQVgsCi19OwotCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotCi1zdHJ1Y3QgaXdsMzk0NV9sZWQgewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwotCWNoYXIgbmFtZVszMl07Ci0KLQlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKLQlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7Ci0JaW50ICgqbGVkX3BhdHRlcm4pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwotCi0JZW51bSBsZWRfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwotfTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfTEVEUyAqLworc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CiAKKyNlbmRpZiAvKiBJV0xXSUZJX0xFRFMqLwogI2VuZGlmIC8qIElXTDM5NDVfTEVEU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKaW5kZXggMjFjODQxOC4uYWY2YjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTM5NDUtcnMiCkBAIC01MSw2ICs1Miw3IEBACiAKIHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSB7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzMzIgKmV4cGVjdGVkX3RwdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcGFydGlhbF9mbHVzaDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfZmx1c2g7CkBAIC02Miw3ICs2NCw3IEBACiAJdTggc3RhcnRfcmF0ZTsKIAl1OCBpYnNzX3N0YV9hZGRlZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByYXRlX3NjYWxlX2ZsdXNoOwotCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRdOworCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZTsKICNlbmRpZgpAQCAtNzEsMTkgKzczLDE5IEBACiAJaW50IGxhc3RfdHhyYXRlX2lkeDsKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfZ1tJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJNywgMTMsIDM1LCA1OCwgMCwgMCwgNzYsIDEwNCwgMTMwLCAxNjgsIDE5MSwgMjAyCiB9OwogCi1zdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCA4MCwgOTMsIDExMywgMTIzLCAxMjUKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYVtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2FbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJMCwgMCwgMCwgMCwgNDAsIDU3LCA3MiwgOTgsIDEyMSwgMTU0LCAxNzcsIDE4NgogfTsKIAotc3RhdGljIHMzMiBpd2wzOTQ1X2V4cGVjdGVkX3RwdF9iW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYltJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OwogCkBAIC0xMTksMTIgKzEyMSwxMyBAQAogI2RlZmluZSBJV0xfUkFURV9NQVhfV0lORE9XICAgICAgICAgIDYyCiAjZGVmaW5lIElXTF9SQVRFX0ZMVVNIICAgICAgIAkgKDMqSFopCiAjZGVmaW5lIElXTF9SQVRFX1dJTl9GTFVTSCAgICAgICAoSFovMikKLSNkZWZpbmUgSVdMX1JBVEVfSElHSF9USCAgICAgICAgICAxMTUyMAorI2RlZmluZSBJV0wzOV9SQVRFX0hJR0hfVEggICAgICAgICAgMTE1MjAKICNkZWZpbmUgSVdMX1NVQ0NFU1NfVVBfVEgJICAgODk2MAogI2RlZmluZSBJV0xfU1VDQ0VTU19ET1dOX1RICSAgMTA4ODAKLSNkZWZpbmUgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEggICAgICAgOAorI2RlZmluZSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCAgICAgICA2CiAjZGVmaW5lIElXTF9SQVRFX01JTl9TVUNDRVNTX1RIICAgICAgIDgKICNkZWZpbmUgSVdMX1JBVEVfREVDUkVBU0VfVEggICAgICAgMTkyMAorI2RlZmluZSBJV0xfUkFURV9SRVRSWV9USAkgICAgIDE1CiAKIHN0YXRpYyB1OCBpd2wzOTQ1X2dldF9yYXRlX2luZGV4X2J5X3Jzc2koczMyIHJzc2ksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTE2NSw3ICsxNjgsNyBAQAogCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gMDsKIAl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSAtMTsKIAl3aW5kb3ctPmNvdW50ZXIgPSAwOwotCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKKwl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJd2luZG93LT5zdGFtcCA9IDA7CiB9CiAKQEAgLTE4MSwyMCArMTg0LDIxIEBACiAJaW50IHVuZmx1c2hlZCA9IDA7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAkvKgogCSAqIEZvciBlYWNoIHJhdGUsIGlmIHdlIGhhdmUgY29sbGVjdGVkIGRhdGEgb24gdGhhdCByYXRlCiAJICogYW5kIGl0IGhhcyBiZWVuIG1vcmUgdGhhbiBJV0xfUkFURV9XSU5fRkxVU0gKIAkgKiBzaW5jZSB3ZSBmbHVzaGVkLCBjbGVhciBvdXQgdGhlIGdhdGhlcmVkIHN0YXRpc3RpY3MKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OyBpKyspIHsKIAkJaWYgKCFyc19zdGEtPndpbltpXS5jb3VudGVyKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCByc19zdGEtPndpbltpXS5zdGFtcCArCiAJCQkgICAgICAgSVdMX1JBVEVfV0lOX0ZMVVNIKSkgewotCQkJSVdMX0RFQlVHX1JBVEUoImZsdXNoaW5nICVkIHNhbXBsZXMgb2YgcmF0ZSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiZmx1c2hpbmcgJWQgc2FtcGxlcyBvZiByYXRlICIKIAkJCQkgICAgICAgImluZGV4ICVkXG4iLAogCQkJCSAgICAgICByc19zdGEtPndpbltpXS5jb3VudGVyLCBpKTsKIAkJCWl3bDM5NDVfY2xlYXJfd2luZG93KCZyc19zdGEtPndpbltpXSk7CkBAIC0yMTMsMTEgKzIxNywxMiBAQAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yYXRlX3NjYWxlX2ZsdXNoKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAJaW50IHVuZmx1c2hlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcGFja2V0X2NvdW50LCBkdXJhdGlvbiwgcHBzOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJdW5mbHVzaGVkID0gaXdsMzk0NV9yYXRlX3NjYWxlX2ZsdXNoX3dpbmRvd3MocnNfc3RhKTsKIApAQCAtMjMyLDcgKzIzNyw3IEBACiAJCWR1cmF0aW9uID0KIAkJICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHJzX3N0YS0+bGFzdF9wYXJ0aWFsX2ZsdXNoKTsKIAotCQlJV0xfREVCVUdfUkFURSgiVHgnZCAlZCBwYWNrZXRzIGluICVkbXNcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJUeCdkICVkIHBhY2tldHMgaW4gJWRtc1xuIiwKIAkJCSAgICAgICBwYWNrZXRfY291bnQsIGR1cmF0aW9uKTsKIAogCQkvKiBEZXRlcm1pbmUgcGFja2V0cyBwZXIgc2Vjb25kICovCkBAIC0yNTIsNyArMjU3LDcgQEAKIAogCQlyc19zdGEtPmZsdXNoX3RpbWUgPSBtc2Vjc190b19qaWZmaWVzKGR1cmF0aW9uKTsKIAotCQlJV0xfREVCVUdfUkFURSgibmV3IGZsdXNoIHBlcmlvZDogJWQgbXNlYyBhdmUgJWRcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJuZXcgZmx1c2ggcGVyaW9kOiAlZCBtc2VjIGF2ZSAlZFxuIiwKIAkJCSAgICAgICBkdXJhdGlvbiwgcGFja2V0X2NvdW50KTsKIAogCQltb2RfdGltZXIoJnJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaCwgamlmZmllcyArCkBAIC0yNzAsNyArMjc1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAvKioKQEAgLTI4Niw1MCArMjkxLDcwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzMzIgZmFpbF9jb3VudDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAlpZiAoIXJldHJpZXMpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByZXRyaWVzID09IDAgLS0gc2hvdWxkIGJlIGF0IGxlYXN0IDFcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IHJldHJpZXMgPT0gMCAtLSBzaG91bGQgYmUgYXQgbGVhc3QgMVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKHJldHJpZXMtLSkgewogCi0JCS8qIElmIHdlIGhhdmUgZmlsbGVkIHVwIHRoZSB3aW5kb3cgdGhlbiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUKLQkJICogc3VjY2VzcyBjb3VudGVyIGlmIHRoZSBoaWdoLWJpdCBpcyBjb3VudGluZyB0b3dhcmQKLQkJICogc3VjY2VzcyAqLwotCQlpZiAod2luZG93LT5jb3VudGVyID09IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKLQkJCWlmICh3aW5kb3ctPmRhdGEgJiAoMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKSkKKwkvKgorCSAqIEtlZXAgdHJhY2sgb2Ygb25seSB0aGUgbGF0ZXN0IDYyIHR4IGZyYW1lIGF0dGVtcHRzIGluIHRoaXMgcmF0ZSdzCisJICogaGlzdG9yeSB3aW5kb3c7IGFueXRoaW5nIG9sZGVyIGlzbid0IHJlYWxseSByZWxldmFudCBhbnkgbW9yZS4KKwkgKiBJZiB3ZSBoYXZlIGZpbGxlZCB1cCB0aGUgc2xpZGluZyB3aW5kb3csIGRyb3AgdGhlIG9sZGVzdCBhdHRlbXB0OworCSAqIGlmIHRoZSBvbGRlc3QgYXR0ZW1wdCAoaGlnaGVzdCBiaXQgaW4gYml0bWFwKSBzaG93cyAic3VjY2VzcyIsCisJICogc3VidHJhY3QgIjEiIGZyb20gdGhlIHN1Y2Nlc3MgY291bnRlciAodGhpcyBpcyB0aGUgbWFpbiByZWFzb24KKwkgKiB3ZSBrZWVwIHRoZXNlIGJpdG1hcHMhKS4KKwkgKiAqLworCXdoaWxlIChyZXRyaWVzID4gMCkgeworCQlpZiAod2luZG93LT5jb3VudGVyID49IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKKworCQkJLyogcmVtb3ZlIGVhcmxpZXN0ICovCisJCQl3aW5kb3ctPmNvdW50ZXIgPSBJV0xfUkFURV9NQVhfV0lORE9XIC0gMTsKKworCQkJaWYgKHdpbmRvdy0+ZGF0YSAmICgxVUxMIDw8IChJV0xfUkFURV9NQVhfV0lORE9XIC0gMSkpKSB7CisJCQkJd2luZG93LT5kYXRhICY9IH4oMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKTsKIAkJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlci0tOwotCQl9IGVsc2UKLQkJCXdpbmRvdy0+Y291bnRlcisrOwotCi0JCS8qIFNsaWRlIHRoZSB3aW5kb3cgdG8gdGhlIGxlZnQgb25lIGJpdCAqLwotCQl3aW5kb3ctPmRhdGEgPSAod2luZG93LT5kYXRhIDw8IDEpOwotCi0JCS8qIElmIHRoaXMgcGFja2V0IHdhcyBhIHN1Y2Nlc3MgdGhlbiBzZXQgdGhlIGxvdyBiaXQgaGlnaCAqLwotCQlpZiAoc3VjY2VzcykgewotCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIrKzsKLQkJCXdpbmRvdy0+ZGF0YSB8PSAxOworCQkJfQogCQl9CiAKLQkJLyogd2luZG93LT5jb3VudGVyIGNhbid0IGJlIDAgLS0gaXQgaXMgZWl0aGVyID4wIG9yCi0JCSAqIElXTF9SQVRFX01BWF9XSU5ET1cgKi8KLQkJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gMTI4MDAgKiB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciAvCi0JCSAgICB3aW5kb3ctPmNvdW50ZXI7CisJCS8qIEluY3JlbWVudCBmcmFtZXMtYXR0ZW1wdGVkIGNvdW50ZXIgKi8KKwkJd2luZG93LT5jb3VudGVyKys7CiAKLQkJLyogVGFnIHRoaXMgd2luZG93IGFzIGhhdmluZyBiZWVuIHVwZGF0ZWQgKi8KLQkJd2luZG93LT5zdGFtcCA9IGppZmZpZXM7CisJCS8qIFNoaWZ0IGJpdG1hcCBieSBvbmUgZnJhbWUgKHRocm93IGF3YXkgb2xkZXN0IGhpc3RvcnkpLAorCQkgKiBPUiBpbiAiMSIsIGFuZCBpbmNyZW1lbnQgInN1Y2Nlc3MiIGlmIHRoaXMKKwkJICogZnJhbWUgd2FzIHN1Y2Nlc3NmdWwuICovCisJCXdpbmRvdy0+ZGF0YSA8PD0gMTsKKwkJaWYgKHN1Y2Nlc3MgPiAwKSB7CisJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcisrOworCQkJd2luZG93LT5kYXRhIHw9IDB4MTsKKwkJCXN1Y2Nlc3MtLTsKKwkJfQogCisJCXJldHJpZXMtLTsKIAl9CiAKKwkvKiBDYWxjdWxhdGUgY3VycmVudCBzdWNjZXNzIHJhdGlvLCBhdm9pZCBkaXZpZGUtYnktMCEgKi8KKwlpZiAod2luZG93LT5jb3VudGVyID4gMCkKKwkJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gMTI4ICogKDEwMCAqIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyKQorCQkJCQkvIHdpbmRvdy0+Y291bnRlcjsKKwllbHNlCisJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IElXTF9JTlZBTElEX1ZBTFVFOworCiAJZmFpbF9jb3VudCA9IHdpbmRvdy0+Y291bnRlciAtIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyOworCisJLyogQ2FsY3VsYXRlIGF2ZXJhZ2UgdGhyb3VnaHB1dCwgaWYgd2UgaGF2ZSBlbm91Z2ggaGlzdG9yeS4gKi8KIAlpZiAoKGZhaWxfY291bnQgPj0gSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpIHx8CiAJICAgICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA+PSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpCiAJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyAqCiAJCQkJcnNfc3RhLT5leHBlY3RlZF90cHRbaW5kZXhdICsgNjQpIC8gMTI4KTsKIAllbHNlCi0JCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKKwkJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOworCisJLyogVGFnIHRoaXMgd2luZG93IGFzIGhhdmluZyBiZWVuIHVwZGF0ZWQgKi8KKwl3aW5kb3ctPnN0YW1wID0gamlmZmllczsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCkBAIC0zMzksMTAgKzM2NCwxMCBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhKQogewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7CiAJaW50IGk7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiBUT0RPOiB3aGF0IGlzIGEgZ29vZCBzdGFydGluZyByYXRlIGZvciBTVEE/IEFib3V0IG1pZGRsZT8gTWF5YmUgbm90CiAJICogdGhlIGxvd2VzdCBvciB0aGUgaGlnaGVzdCByYXRlLi4gQ291bGQgY29uc2lkZXIgdXNpbmcgUlNTSSBmcm9tCkBAIC0zNjUsNyArMzkwLDcgQEAKIAl9CiAKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgKnJzX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQpAQCAtMzc5LDEwICs0MDQsMTEgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkICpyc19hbGxvY19zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIHZvaWQgKnJzX2FsbG9jX3N0YSh2b2lkICppd2xfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhOwogCXN0cnVjdCBpd2wzOTQ1X3N0YV9wcml2ICpwc3RhID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBpd2xfcHJpdjsKIAlpbnQgaTsKIAogCS8qCkBAIC0zOTAsMTEgKzQxNiwxMSBAQAogCSAqCWFzIHdlbGwganVzdCBwdXQgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGVyZS4KIAkgKi8KIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJzX3N0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSksIGdmcCk7CiAJaWYgKCFyc19zdGEpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBFTk9NRU1cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IEVOT01FTVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDAyLDYgKzQyOCw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcnNfc3RhLT5sb2NrKTsKIAorCXJzX3N0YS0+cHJpdiA9IHByaXY7CisKIAlyc19zdGEtPnN0YXJ0X3JhdGUgPSBJV0xfUkFURV9JTlZBTElEOwogCiAJLyogZGVmYXVsdCB0byBqdXN0IDgwMi4xMWIgKi8KQEAgLTQxNywzMyArNDQ1LDM0IEBACiAJcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoLmRhdGEgPSAodW5zaWduZWQgbG9uZylyc19zdGE7CiAJcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoLmZ1bmN0aW9uID0gJml3bDM5NDVfYmdfcmF0ZV9zY2FsZV9mbHVzaDsKIAotCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OyBpKyspCiAJCWl3bDM5NDVfY2xlYXJfd2luZG93KCZyc19zdGEtPndpbltpXSk7CiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gcnNfc3RhOwogfQogCi1zdGF0aWMgdm9pZCByc19mcmVlX3N0YSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorc3RhdGljIHZvaWQgcnNfZnJlZV9zdGEodm9pZCAqaXdsX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQl2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YSA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSBwcml2X3N0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAlwc3RhLT5yc19zdGEgPSBOVUxMOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCWRlbF90aW1lcl9zeW5jKCZyc19zdGEtPnJhdGVfc2NhbGVfZmx1c2gpOwogCWtmcmVlKHJzX3N0YSk7Ci0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAKIC8qKgogICogcnNfdHhfc3RhdHVzIC0gVXBkYXRlIHJhdGUgY29udHJvbCB2YWx1ZXMgYmFzZWQgb24gVHggcmVzdWx0cwogICoKLSAqIE5PVEU6IFVzZXMgaXdsMzk0NV9wcml2LT5yZXRyeV9yYXRlIGZvciB0aGUgIyBvZiByZXRyaWVzIGF0dGVtcHRlZCBieQorICogTk9URTogVXNlcyBpd2xfcHJpdi0+cmV0cnlfcmF0ZSBmb3IgdGhlICMgb2YgcmV0cmllcyBhdHRlbXB0ZWQgYnkKICAqIHRoZSBoYXJkd2FyZSBmb3IgZWFjaCByYXRlLgogICovCiBzdGF0aWMgdm9pZCByc190eF9zdGF0dXModm9pZCAqcHJpdl9yYXRlLCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKQEAgLTQ1MywyMiArNDgyLDI1IEBACiAJczggcmV0cmllcyA9IDAsIGN1cnJlbnRfY291bnQ7CiAJaW50IHNjYWxlX3JhdGVfaW5kZXgsIGZpcnN0X2luZGV4LCBsYXN0X2luZGV4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yYXRlOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3JhdGU7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50OworCS8qIFNhbml0eSBDaGVjayBmb3IgcmV0cmllcyAqLworCWlmIChyZXRyaWVzID4gSVdMX1JBVEVfUkVUUllfVEgpCisJCXJldHJpZXMgPSBJV0xfUkFURV9SRVRSWV9USDsKIAogCWZpcnN0X2luZGV4ID0gc2JhbmQtPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmh3X3ZhbHVlOwotCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlQpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlZFxuIiwgZmlyc3RfaW5kZXgpOworCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlRfMzk0NSkpIHsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBSYXRlIG91dCBvZiBib3VuZHM6ICVkXG4iLCBmaXJzdF9pbmRleCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIXByaXZfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDIsNyArNTM0LDcgQEAKIAkJaXdsMzk0NV9jb2xsZWN0X3R4X2RhdGEocnNfc3RhLAogCQkJCSAgICAmcnNfc3RhLT53aW5bc2NhbGVfcmF0ZV9pbmRleF0sCiAJCQkJICAgIDAsIGN1cnJlbnRfY291bnQsIHNjYWxlX3JhdGVfaW5kZXgpOwotCQlJV0xfREVCVUdfUkFURSgiVXBkYXRlIHJhdGUgJWQgZm9yICVkIHJldHJpZXMuXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiVXBkYXRlIHJhdGUgJWQgZm9yICVkIHJldHJpZXMuXG4iLAogCQkJICAgICAgIHNjYWxlX3JhdGVfaW5kZXgsIGN1cnJlbnRfY291bnQpOwogCiAJCXJldHJpZXMgLT0gY3VycmVudF9jb3VudDsKQEAgLTUxMiw3ICs1NDQsNyBAQAogCiAKIAkvKiBVcGRhdGUgdGhlIGxhc3QgaW5kZXggd2luZG93IHdpdGggc3VjY2Vzcy9mYWlsdXJlIGJhc2VkIG9uIEFDSyAqLwotCUlXTF9ERUJVR19SQVRFKCJVcGRhdGUgcmF0ZSAlZCB3aXRoICVzLlxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiVXBkYXRlIHJhdGUgJWQgd2l0aCAlcy5cbiIsCiAJCSAgICAgICBsYXN0X2luZGV4LAogCQkgICAgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSA/CiAJCSAgICAgICAic3VjY2VzcyIgOiAiZmFpbHVyZSIpOwpAQCAtNTM3LDcgKzU2OSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTU0Nyw2ICs1NzksNyBAQAogewogCXU4IGhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOwogCXU4IGxvdyA9IElXTF9SQVRFX0lOVkFMSUQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJLyogODAyLjExQSB3YWxrcyB0byB0aGUgbmV4dCBsaXRlcmFsIGFkamFjZW50IHJhdGUgaW4KIAkgKiB0aGUgcmF0ZSB0YWJsZSAqLwpAQCAtNTY1LDcgKzU5OCw4IEBACiAKIAkJLyogRmluZCB0aGUgbmV4dCByYXRlIHRoYXQgaXMgaW4gdGhlIHJhdGUgbWFzayAqLwogCQlpID0gaW5kZXggKyAxOwotCQlmb3IgKG1hc2sgPSAoMSA8PCBpKTsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyssIG1hc2sgPDw9IDEpIHsKKwkJZm9yIChtYXNrID0gKDEgPDwgaSk7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OworCQkgICAgIGkrKywgbWFzayA8PD0gMSkgewogCQkJaWYgKHJhdGVfbWFzayAmIG1hc2spIHsKIAkJCQloaWdoID0gaTsKIAkJCQlicmVhazsKQEAgLTU4NSw3ICs2MTksNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBsb3cpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtNTk4LDcgKzYzMiw3IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTYzMSwxOSArNjY1LDIwIEBACiAJaW50IGluZGV4OwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cgPSBOVUxMOwotCWludCBjdXJyZW50X3RwdCA9IElXTF9JTlZfVFBUOwotCWludCBsb3dfdHB0ID0gSVdMX0lOVl9UUFQ7Ci0JaW50IGhpZ2hfdHB0ID0gSVdMX0lOVl9UUFQ7CisJaW50IGN1cnJlbnRfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJaW50IGxvd190cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwlpbnQgaGlnaF90cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKIAl1MzIgZmFpbF9jb3VudDsKIAlzOCBzY2FsZV9hY3Rpb24gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAl1MTYgZmM7CiAJdTE2IHJhdGVfbWFzayA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yOworCXM4IG1heF9yYXRlX2lkeCA9IC0xOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKHN0YSkKIAkJcmF0ZV9tYXNrID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKQEAgLTY1NCw3ICs2ODksNyBAQAogCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKIAkgICAgIXN0YSB8fCAhcHJpdl9zdGEpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7CiAJCWlmICghcmF0ZV9tYXNrKQogCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPQogCQkJCQlyYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgTlVMTCk7CkBAIC02NjQsNyArNjk5LDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlpbmRleCA9IG1pbihyc19zdGEtPmxhc3RfdHhyYXRlX2lkeCAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKKwkvKiBnZXQgdXNlciBtYXggcmF0ZSBpZiBzZXQgKi8KKwltYXhfcmF0ZV9pZHggPSB0eHJjLT5tYXhfcmF0ZV9pZHg7CisJaWYgKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJiAobWF4X3JhdGVfaWR4ICE9IC0xKSkKKwkJbWF4X3JhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJaWYgKChtYXhfcmF0ZV9pZHggPCAwKSB8fCAobWF4X3JhdGVfaWR4ID49IElXTF9SQVRFX0NPVU5UKSkKKwkJbWF4X3JhdGVfaWR4ID0gLTE7CisKKwlpbmRleCA9IG1pbihyc19zdGEtPmxhc3RfdHhyYXRlX2lkeCAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlRfMzk0NSAtIDEpOwogCiAJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJhdGVfbWFzayA9IHJhdGVfbWFzayA8PCBJV0xfRklSU1RfT0ZETV9SQVRFOwpAQCAtNjc0LDcgKzcxNiw3IEBACiAJCXU4IHN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlcG1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwbVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsCiAJCQkJICAgIGhkci0+YWRkcjEsIDAsIENNRF9BU1lOQyk7CkBAIC02OTUsMjEgKzczNywzMCBAQAogCQlyc19zdGEtPnN0YXJ0X3JhdGUgPSBJV0xfUkFURV9JTlZBTElEOwogCX0KIAorCS8qIGZvcmNlIHVzZXIgbWF4IHJhdGUgaWYgc2V0IGJ5IHVzZXIgKi8KKwlpZiAoKG1heF9yYXRlX2lkeCAhPSAtMSkgJiYgKG1heF9yYXRlX2lkeCA8IGluZGV4KSkgeworCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbWF4X3JhdGVfaWR4KSkKKwkJCWluZGV4ID0gbWF4X3JhdGVfaWR4OworCX0KKwogCXdpbmRvdyA9ICYocnNfc3RhLT53aW5baW5kZXhdKTsKIAogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKIAotCWlmICgoKGZhaWxfY291bnQgPD0gSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCisJaWYgKCgoZmFpbF9jb3VudCA8IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgogCSAgICAgKHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyIDwgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCQlJV0xfREVCVUdfUkFURSgiSW52YWxpZCBhdmVyYWdlX3RwdCBvbiByYXRlICVkOiAiCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJJbnZhbGlkIGF2ZXJhZ2VfdHB0IG9uIHJhdGUgJWQ6ICIKIAkJCSAgICAgICAiY291bnRlcjogJWQsIHN1Y2Nlc3NfY291bnRlcjogJWQsICIKIAkJCSAgICAgICAiZXhwZWN0ZWRfdHB0IGlzICVzTlVMTFxuIiwKIAkJCSAgICAgICBpbmRleCwKIAkJCSAgICAgICB3aW5kb3ctPmNvdW50ZXIsCiAJCQkgICAgICAgd2luZG93LT5zdWNjZXNzX2NvdW50ZXIsCiAJCQkgICAgICAgcnNfc3RhLT5leHBlY3RlZF90cHQgPyAibm90ICIgOiAiIik7CisKKwkgICAvKiBDYW4ndCBjYWxjdWxhdGUgdGhpcyB5ZXQ7IG5vdCBlbm91Z2ggaGlzdG9yeSAqLworCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJCWdvdG8gb3V0OwogCiAJfQpAQCAtNzIxLDYgKzc3MiwxMSBAQAogCWxvdyA9IGhpZ2hfbG93ICYgMHhmZjsKIAloaWdoID0gKGhpZ2hfbG93ID4+IDgpICYgMHhmZjsKIAorCS8qIElmIHVzZXIgc2V0IG1heCByYXRlLCBkb250IGFsbG93IGhpZ2hlciB0aGFuIHVzZXIgY29uc3RyYWluICovCisJaWYgKChtYXhfcmF0ZV9pZHggIT0gLTEpICYmIChtYXhfcmF0ZV9pZHggPCBoaWdoKSkKKwkJaGlnaCA9IElXTF9SQVRFX0lOVkFMSUQ7CisKKwkvKiBDb2xsZWN0IE1lYXN1cmVkIHRocm91Z2hwdXRzIG9mIGFkamFjZW50IHJhdGVzICovCiAJaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQogCQlsb3dfdHB0ID0gcnNfc3RhLT53aW5bbG93XS5hdmVyYWdlX3RwdDsKIApAQCAtNzI5LDU2ICs3ODUsNzggQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0Jc2NhbGVfYWN0aW9uID0gMTsKKwlzY2FsZV9hY3Rpb24gPSAwOwogCisJLyogTG93IHN1Y2Nlc3MgcmF0aW8gLCBuZWVkIHRvIGRyb3AgdGhlIHJhdGUgKi8KIAlpZiAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA8IElXTF9SQVRFX0RFQ1JFQVNFX1RIKSB8fCAhY3VycmVudF90cHQpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOwogCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQl9IGVsc2UgaWYgKChsb3dfdHB0ID09IElXTF9JTlZfVFBUKSAmJiAoaGlnaF90cHQgPT0gSVdMX0lOVl9UUFQpKQotCQlzY2FsZV9hY3Rpb24gPSAxOwotCWVsc2UgaWYgKChsb3dfdHB0ICE9IElXTF9JTlZfVFBUKSAmJiAoaGlnaF90cHQgIT0gSVdMX0lOVl9UUFQpICYmCisJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzLAorCSAqIHRyeSBpbmNyZWFzZSAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpIHsKKworCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+PSBJV0xfUkFURV9JTkNSRUFTRV9USCkKKwkJCXNjYWxlX2FjdGlvbiA9IDE7CisJCWVsc2UgaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQorCQkJc2NhbGVfYWN0aW9uID0gMDsKKworCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzCisJICogYmV0dGVyIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZQorCSAqIGl0ISAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAoaGlnaF90cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAobG93X3RwdCA8IGN1cnJlbnRfdHB0KSAmJiAoaGlnaF90cHQgPCBjdXJyZW50X3RwdCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIk5vIGFjdGlvbiAtLSBsb3cgWyVkXSAmIGhpZ2ggWyVkXSA8ICIKKworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CisKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhdGVzIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCX0gZWxzZSB7Ci0JCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgewotCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCisJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgeworCisJCQkvKiBIaWdoIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0LCBJbmNyZWFzZQorCQkJICogcmF0ZSAqLworCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQgJiYKKwkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCWVsc2UgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKLQkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwkJCQlJV0xfREVCVUdfUkFURShwcml2LAorCQkJCSAgICAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKKwkJCQlzY2FsZV9hY3Rpb24gPSAwOwogCQkJfQotCQl9IGVsc2UgaWYgKGxvd190cHQgIT0gSVdMX0lOVl9UUFQpIHsKKwkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CiAJCQlpZiAobG93X3RwdCA+IGN1cnJlbnRfdHB0KSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIGlmICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKKwkJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIKKwkJCQkgKiB0aHJvdWdocHV0LGRlY3JlYXNlIHJhdGUgKi8KIAkJCQlzY2FsZV9hY3Rpb24gPSAxOworCQkJfQogCQl9CiAJfQogCi0JaWYgKHNjYWxlX2FjdGlvbiA9PSAtMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvID4gSVdMX1NVQ0NFU1NfRE9XTl9USCkKLQkJCXNjYWxlX2FjdGlvbiA9IDA7Ci0JfSBlbHNlIGlmIChzY2FsZV9hY3Rpb24gPT0gMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvIDwgSVdMX1NVQ0NFU1NfVVBfVEgpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJObyBhY3Rpb24gLS0gc3VjY2Vzc19yYXRpbyBbJWRdIDwgIgotCQkJICAgICAgICJTVUNDRVNTIFVQXG4iLCB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8pOwotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQkJfQotCX0KKwkvKiBTYW5pdHkgY2hlY2s7IGFza2VkIGZvciBkZWNyZWFzZSwgYnV0IHN1Y2Nlc3MgcmF0ZSBvciB0aHJvdWdocHV0CisJICogaGFzIGJlZW4gZ29vZCBhdCBvbGQgcmF0ZS4gIERvbid0IGNoYW5nZSBpdC4gKi8KKwlpZiAoKHNjYWxlX2FjdGlvbiA9PSAtMSkgJiYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKSAmJgorCQkgICAgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPiBJV0xfUkFURV9ISUdIX1RIKSB8fAorCQkgICAgIChjdXJyZW50X3RwdCA+ICgxMDAgKiByc19zdGEtPmV4cGVjdGVkX3RwdFtsb3ddKSkpKQorCQlzY2FsZV9hY3Rpb24gPSAwOwogCiAJc3dpdGNoIChzY2FsZV9hY3Rpb24pIHsKIAljYXNlIC0xOgorCisJCS8qIERlY3Jlc2UgcmF0ZSAqLwogCQlpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCiAJCQlpbmRleCA9IGxvdzsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CisJCS8qIEluY3JlYXNlIHJhdGUgKi8KIAkJaWYgKGhpZ2ggIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWluZGV4ID0gaGlnaDsKIApAQCAtNzg2LDEwICs4NjQsMTEgQEAKIAogCWNhc2UgMDoKIAlkZWZhdWx0OgorCQkvKiBObyBjaGFuZ2UgKi8KIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCiAJCSAgICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gpOwogCiAgb3V0OgpAQCAtODAxLDcgKzg4MCw3IEBACiAJZWxzZQogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJzX3N0YS0+bGFzdF90eHJhdGVfaWR4OwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogJWRcbiIsIGluZGV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCkBAIC04MTUsMjQgKzg5NCwzMSBAQAogCQkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgajsKKwlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZXNjICs9IHNwcmludGYoYnVmZiArIGRlc2MsICJ0eCBwYWNrZXRzPSVkIGxhc3QgcmF0ZSBpbmRleD0lZFxuIgogCQkJInJhdGU9MHglWCBmbHVzaCB0aW1lICVkXG4iLAogCQkJbHFfc3RhLT50eF9wYWNrZXRzLAogCQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHgsCiAJCQlscV9zdGEtPnN0YXJ0X3JhdGUsIGppZmZpZXNfdG9fbXNlY3MobHFfc3RhLT5mbHVzaF90aW1lKSk7Ci0JZm9yIChqID0gMDsgaiA8IElXTF9SQVRFX0NPVU5UOyBqKyspIHsKKwlmb3IgKGogPSAwOyBqIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaisrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsCiAJCQkJImNvdW50ZXI9JWQgc3VjY2Vzcz0lZCAlJT0lZFxuIiwKIAkJCQlscV9zdGEtPndpbltqXS5jb3VudGVyLAogCQkJCWxxX3N0YS0+d2luW2pdLnN1Y2Nlc3NfY291bnRlciwKIAkJCQlscV9zdGEtPndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpAQCAtODc3LDE4ICs5NjMsMTggQEAKIAogdm9pZCBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJczMyIHJzc2kgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MjQsMTEgKzEwMTAsMTEgQEAKIAlpZiAocnNzaSA9PSAwKQogCQlyc3NpID0gSVdMX01JTl9SU1NJX1ZBTDsKIAotCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SQVRFLCAiTmV0d29yayBSU1NJOiAlZFxuIiwgcnNzaSk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIk5ldHdvcmsgUlNTSTogJWRcbiIsIHJzc2kpOwogCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHJzc2ksIHByaXYtPmJhbmQpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCiAJCSAgICAgICAiJWQgKHBsY3AgMHgleClcbiIsIHJzc2ksIHJzX3N0YS0+c3RhcnRfcmF0ZSwKIAkJICAgICAgIGl3bDM5NDVfcmF0ZXNbcnNfc3RhLT5zdGFydF9yYXRlXS5wbGNwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjYxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9yc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9yc19oX18KLQotc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKLQl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwotCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLwotCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KLQl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLwotCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0JdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwotCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLwotCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KLX07Ci0KLS8qCi0gKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLSAqLwotZW51bSB7Ci0JSVdMX1JBVEVfMU1fSU5ERVggPSAwLAotCUlXTF9SQVRFXzJNX0lOREVYLAotCUlXTF9SQVRFXzVNX0lOREVYLAotCUlXTF9SQVRFXzExTV9JTkRFWCwKLQlJV0xfUkFURV82TV9JTkRFWCwKLQlJV0xfUkFURV85TV9JTkRFWCwKLQlJV0xfUkFURV8xMk1fSU5ERVgsCi0JSVdMX1JBVEVfMThNX0lOREVYLAotCUlXTF9SQVRFXzI0TV9JTkRFWCwKLQlJV0xfUkFURV8zNk1fSU5ERVgsCi0JSVdMX1JBVEVfNDhNX0lOREVYLAotCUlXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfUkFURV9DT1VOVCwKLQlJV0xfUkFURV9JTlZNX0lOREVYLAotCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9JTlZNX0lOREVYCi19OwotCi1lbnVtIHsKLQlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCi0JSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYLAotfTsKLQotZW51bSB7Ci0JSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAotCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKLQlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKLX07Ci0KLS8qICNkZWZpbmUgdnMuIGVudW0gdG8ga2VlcCBmcm9tIGRlZmF1bHRpbmcgdG8gJ2xhcmdlIGludGVnZXInICovCi0jZGVmaW5lCUlXTF9SQVRFXzZNX01BU0sgICAoMSA8PCBJV0xfUkFURV82TV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfOU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzlNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTJNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xOE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMThNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8yNE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMjRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8zNk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMzZNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV80OE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNDhNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV81NE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNTRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xTV9NQVNLICAgKDEgPDwgSVdMX1JBVEVfMU1fSU5ERVgpCi0jZGVmaW5lCUlXTF9SQVRFXzJNX01BU0sgICAoMSA8PCBJV0xfUkFURV8yTV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfNU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzVNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMU1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTFNX0lOREVYKQotCi0vKiAzOTQ1IHVDb2RlIEFQSSB2YWx1ZXMgZm9yIChsZWdhY3kpIGJpdCByYXRlcywgYm90aCBPRkRNIGFuZCBDQ0sgKi8KLWVudW0gewotCUlXTF9SQVRFXzZNX1BMQ1AgPSAxMywKLQlJV0xfUkFURV85TV9QTENQID0gMTUsCi0JSVdMX1JBVEVfMTJNX1BMQ1AgPSA1LAotCUlXTF9SQVRFXzE4TV9QTENQID0gNywKLQlJV0xfUkFURV8yNE1fUExDUCA9IDksCi0JSVdMX1JBVEVfMzZNX1BMQ1AgPSAxMSwKLQlJV0xfUkFURV80OE1fUExDUCA9IDEsCi0JSVdMX1JBVEVfNTRNX1BMQ1AgPSAzLAotCUlXTF9SQVRFXzFNX1BMQ1AgPSAxMCwKLQlJV0xfUkFURV8yTV9QTENQID0gMjAsCi0JSVdMX1JBVEVfNU1fUExDUCA9IDU1LAotCUlXTF9SQVRFXzExTV9QTENQID0gMTEwLAotfTsKLQotLyogTUFDIGhlYWRlciB2YWx1ZXMgZm9yIGJpdCByYXRlcyAqLwotZW51bSB7Ci0JSVdMX1JBVEVfNk1fSUVFRSA9IDEyLAotCUlXTF9SQVRFXzlNX0lFRUUgPSAxOCwKLQlJV0xfUkFURV8xMk1fSUVFRSA9IDI0LAotCUlXTF9SQVRFXzE4TV9JRUVFID0gMzYsCi0JSVdMX1JBVEVfMjRNX0lFRUUgPSA0OCwKLQlJV0xfUkFURV8zNk1fSUVFRSA9IDcyLAotCUlXTF9SQVRFXzQ4TV9JRUVFID0gOTYsCi0JSVdMX1JBVEVfNTRNX0lFRUUgPSAxMDgsCi0JSVdMX1JBVEVfMU1fSUVFRSA9IDIsCi0JSVdMX1JBVEVfMk1fSUVFRSA9IDQsCi0JSVdMX1JBVEVfNU1fSUVFRSA9IDExLAotCUlXTF9SQVRFXzExTV9JRUVFID0gMjIsCi19OwotCi0jZGVmaW5lIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSyAgICBcCi0gICAgICAgKElXTF9SQVRFXzFNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMk1fTUFTSykKLQotI2RlZmluZSBJV0xfQ0NLX1JBVEVTX01BU0sgICAgICAgICAgXAotICAgICAgIChJV0xfQkFTSUNfUkFURVNfTUFTSyAgICAgIHwgXAotCUlXTF9SQVRFXzVNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMTFNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyAgIFwKLQkoSVdMX1JBVEVfNk1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzEyTV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMjRNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fUkFURVNfTUFTSyAgICAgICAgIFwKLSAgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJV0xfUkFURV85TV9NQVNLICAgICAgICAgIHwgXAotCUlXTF9SQVRFXzE4TV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMzZNX01BU0sgICAgICAgICB8IFwKLQlJV0xfUkFURV80OE1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzU0TV9NQVNLKQotCi0jZGVmaW5lIElXTF9CQVNJQ19SQVRFU19NQVNLICAgICAgICAgXAotCShJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAotCSBJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSVdMX1JBVEVTX01BU0sgKCgxIDw8IElXTF9SQVRFX0NPVU5UKSAtIDEpCi0KLSNkZWZpbmUgSVdMX0lOVl9UUFQgICAgLTEKLQotI2RlZmluZSBJV0xfTUlOX1JTU0lfVkFMICAgICAgICAgICAgICAgICAtMTAwCi0jZGVmaW5lIElXTF9NQVhfUlNTSV9WQUwgICAgICAgICAgICAgICAgICAgIDAKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLQotc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQotewotCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKLQotCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCi0JCXJhdGUgPSByYXRlX2luZGV4OwotCXJldHVybiByYXRlOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCi0gKgotICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCi0gKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCi0gKgotICogU2luY2UgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gaXMgaGFyZHdhcmUgc3BlY2lmaWMsIHRoZXJlIGlzIG5vIG5lZWQKLSAqIG9yIHJlYXNvbiB0byBwbGFjZSBpdCBhcyBhIHN0YW5kIGFsb25lIG1vZHVsZS4gIFRoZSBkcml2ZXIgY2FuIGNhbGwKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKiB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICBUaGlzIHNob3VsZCBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gY2FsbGluZwotICogaWVlZTgwMjExX3JlZ2lzdGVyX2h3Ci0gKgotICovCi1leHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcsIGJ1dCBiZWZvcmUKLSAqIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCi0gKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDQ1Y2ZhMWNmLi4yMzk5MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM4LDEwICszOCwxNSBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIml3bC0zOTQ1LWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1maC5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtMzk0NS5oIgorI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtYWduLXJzLmgiCiAKICNkZWZpbmUgSVdMX0RFQ0xBUkVfUkFURV9JTkZPKHIsIGlwLCBpbiwgcnAsIHJuLCBwcCwgbnApICAgIFwKIAlbSVdMX1JBVEVfIyNyIyNNX0lOREVYXSA9IHsgSVdMX1JBVEVfIyNyIyNNX1BMQ1AsICAgXApAQCAtNjMsNyArNjgsNyBAQAogICogbWFwcyB0byBJV0xfUkFURV9JTlZBTElECiAgKgogICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF0gPSB7Citjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAlJV0xfREVDTEFSRV9SQVRFX0lORk8oMSwgSU5WLCAyLCBJTlYsIDIsIElOViwgMiksICAgIC8qICAxbWJwcyAqLwogCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygyLCAxLCA1LCAxLCA1LCAxLCA1KSwgICAgICAgICAgLyogIDJtYnBzICovCiAJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDUsIDIsIDYsIDIsIDExLCAyLCAxMSksICAgICAgICAvKjUuNW1icHMgKi8KQEAgLTkxLDcgKzk2LDcgQEAKICAqIFVzZSBmb3Igb25seSBzcGVjaWFsIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyIGFzLWlzLAogICogICB5b3UnbGwgbmVlZCB0byBwcm92aWRlIHRoZSBzcGVjaWFsIGJpdHMhIC4uLgogICogICAuLi4gYW5kIHNldCBJV0xfRVZUX0RJU0FCTEUgdG8gMS4gKi8KLXZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMTUwLDM0ICsxNTUsMzQgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZGlzYWJsZV9wdHIgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICg0ICogc2l6ZW9mKHUzMikpKTsKLQlhcnJheV9zaXplID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoNSAqIHNpemVvZih1MzIpKSk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJZGlzYWJsZV9wdHIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkpOworCWFycmF5X3NpemUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDUgKiBzaXplb2YodTMyKSkpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoSVdMX0VWVF9ESVNBQkxFICYmIChhcnJheV9zaXplID09IElXTF9FVlRfRElTQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIHNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgYXQgMHgleFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBzZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIGF0IDB4JXhcbiIsCiAJCQkgICAgICAgZGlzYWJsZV9wdHIpOwotCQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAkJZm9yIChpID0gMDsgaSA8IElXTF9FVlRfRElTQUJMRV9TSVpFOyBpKyspCi0JCQlpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHByaXYsCisJCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwKIAkJCQkJICAgZGlzYWJsZV9wdHIgKyAoaSAqIHNpemVvZih1MzIpKSwKIAkJCQkJICAgZXZ0X2Rpc2FibGVbaV0pOwogCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIG1heSBiZSBkaXNhYmxlZFxuIik7Ci0JCUlXTF9ERUJVR19JTkZPKCIgIGJ5IHdyaXRpbmcgXCIxXCJzIGludG8gZGlzYWJsZSBiaXRtYXBcbiIpOwotCQlJV0xfREVCVUdfSU5GTygiICBpbiBTUkFNIGF0IDB4JXgsIHNpemUgJWQgdTMyc1xuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgbWF5IGJlIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiAgYnkgd3JpdGluZyBcIjFcInMgaW50byBkaXNhYmxlIGJpdG1hcFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIgIGluIFNSQU0gYXQgMHgleCwgc2l6ZSAlZCB1MzJzXG4iLAogCQkJICAgICAgIGRpc2FibGVfcHRyLCBhcnJheV9zaXplKTsKIAl9CiAKQEAgLTE5Myw0MCArMTk4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qKgotICogaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyAtIEdldCBhbnRlbm5hIGZsYWdzIGZvciBSWE9OIGNvbW1hbmQKLSAqIEBwcml2OiBlZXByb20gYW5kIGFudGVubmEgZmllbGRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBhbnRlbm5hIGZsYWdzCi0gKgotICogcHJpdi0+ZWVwcm9tICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAotICogcHJpdi0+YW50ZW5uYSBzcGVjaWZpZXMgdGhlIGFudGVubmEgZGl2ZXJzaXR5IG1vZGU6Ci0gKgotICogSVdMX0FOVEVOTkFfRElWRVJTSVRZIC0gTklDIHNlbGVjdHMgYmVzdCBhbnRlbm5hIGJ5IGl0c2VsZgotICogSVdMX0FOVEVOTkFfTUFJTiAgICAgIC0gRm9yY2UgTUFJTiBhbnRlbm5hCi0gKiBJV0xfQU5URU5OQV9BVVggICAgICAgLSBGb3JjZSBBVVggYW50ZW5uYQotICovCi1fX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN3aXRjaCAocHJpdi0+YW50ZW5uYSkgewotCWNhc2UgSVdMX0FOVEVOTkFfRElWRVJTSVRZOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgSVdMX0FOVEVOTkFfTUFJTjoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7Ci0KLQljYXNlIElXTF9BTlRFTk5BX0FVWDoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7Ci0JfQotCi0JLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KLQlJV0xfRVJST1IoIkJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICgweCV4KVxuIiwgcHJpdi0+YW50ZW5uYSk7Ci0JcmV0dXJuIDA7CQkvKiAiZGl2ZXJzaXR5IiBpcyBkZWZhdWx0IGlmIGVycm9yICovCi19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKml3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCkBAIC0yNjYsNyArMjM4LDcgQEAKICAqIGZvciBBIGFuZCBCIG1vZGUgd2UgbmVlZCB0byBvdmVycmlnaHQgcHJldgogICogdmFsdWUKICAqLwotaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCByYXRlKQoraW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpCiB7CiAJaW50IG5leHRfcmF0ZSA9IGl3bDM5NDVfZ2V0X3ByZXZfaWVlZV9yYXRlKHJhdGUpOwogCkBAIC0yNzksNyArMjUxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCQlpZiAocmF0ZSA9PSBJV0xfUkFURV8xMU1fSU5ERVgpCiAJCQkJbmV4dF9yYXRlID0gSVdMX1JBVEVfNU1fSU5ERVg7CiAJCX0KQEAgLTMwMCwxMiArMjcyLDEyIEBACiAgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuIElmIHRoZXJlIGlzCiAgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKKwlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4X2luZm87CiAKIAlCVUdfT04odHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKTsKIApAQCAtMzE1LDM0ICsyODcsMzQgQEAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYlswXSk7CiAJCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7Ci0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCX0KIAotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiAodHhxX2lkID49IDApICYmCiAJCQkodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSAmJgogCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiB9CiAKIC8qKgogICogaXdsMzk0NV9yeF9yZXBseV90eCAtIEhhbmRsZSBUeCByZXNwb25zZQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKIAlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKIAlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKIAl1MzIgIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cyk7CiAJaW50IHJhdGVfaWR4OwogCWludCBmYWlsOwogCi0JaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWRcbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHR4cS0+cS5uX2JkLCB0eHEtPnEud3JpdGVfcHRyLAogCQkJICB0eHEtPnEucmVhZF9wdHIpOwpAQCAtMzY2LDE1ICszMzgsMTUgQEAKIAlpbmZvLT5mbGFncyB8PSAoKHN0YXR1cyAmIFRYX1NUQVRVU19NU0spID09IFRYX1NUQVRVU19TVUNDRVNTKSA/CiAJCQkJSUVFRTgwMjExX1RYX1NUQVRfQUNLIDogMDsKIAotCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAorCUlXTF9ERUJVR19UWChwcml2LCAiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAogCQkJdHhxX2lkLCBpd2wzOTQ1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCiAJCQl0eF9yZXNwLT5yYXRlLCB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOwogCWl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiAKQEAgLTM4NywxNCArMzU5LDE0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCit2b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUlgoIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAorCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyksCiAJCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKIAotCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3NfMzksIHBrdC0+dS5yYXcsIHNpemVvZihwcml2LT5zdGF0aXN0aWNzXzM5KSk7CiAKIAlpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHByaXYpOwogCkBAIC00MDYsNyArMzc4LDcgQEAKICAqIE1pc2MuIGludGVybmFsIHN0YXRlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAKIC8qKgogICogaXdsMzk0NV9yZXBvcnRfZnJhbWUgLSBkdW1wIGZyYW1lIHRvIHN5c2xvZyBkdXJpbmcgZGVidWcgc2Vzc2lvbnMKQEAgLTQxNSw4ICszODcsOCBAQAogICogaW5jbHVkaW5nIHNlbGVjdGl2ZSBmcmFtZSBkdW1wcy4KICAqIGdyb3VwMTAwIHBhcmFtZXRlciBzZWxlY3RzIHdoZXRoZXIgdG8gc2hvdyAxIG91dCBvZiAxMDAgZ29vZCBmcmFtZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCwKK3N0YXRpYyB2b2lkIF9pd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCiB7CiAJdTMyIHRvX3VzOwpAQCAtNTI0LDEzICs0OTYsMTMgQEAKIAkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAogCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KIAkJaWYgKGRhdGFmcmFtZSkKLQkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JWQsIFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCiAJCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIHJhdGUpOwogCQllbHNlIHsKIAkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KLQkJCUlXTF9ERUJVR19SWCgiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCiAJCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCiAJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCkBAIC01NDAsMTggKzUxMiwyNyBAQAogCQl9CiAJfQogCWlmIChwcmludF9kdW1wKQotCQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKKwkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKIH0KKworc3RhdGljIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwgaW50IGdyb3VwMTAwKQoreworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkKKwkJX2l3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgZ3JvdXAxMDApOworfQorCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCiB7CiB9CiAjZW5kaWYKIAogLyogVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBmb3IgYSBudW1iZXIgb2Ygc3RhdGlzdGljcywgc2VlIHRoZSBjYWxsZXIuICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCiB7CiAJLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldGVkIHRvd2FyZApAQCAtNTY4LDEyICs1NDksMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CiAjZW5kaWYKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKQEAgLTU4MSwxNSArNTYyLDE1IEBACiAJc2hvcnQgbGVuID0gbGUxNl90b19jcHUocnhfaGRyLT5sZW4pOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlpZiAodW5saWtlbHkoKGxlbiArIElXTF9SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkIVxuIik7CisJaWYgKHVubGlrZWx5KChsZW4gKyBJV0wzOV9SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJDb3JydXB0aW9uIGRldGVjdGVkIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwogCWlmICh1bmxpa2VseSghcHJpdi0+aXNfb3BlbikpIHsKLQkJSVdMX0RFQlVHX0RST1BfTElNSVQKLQkJICAgICgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOworCQlJV0xfREVCVUdfRFJPUF9MSU1JVChwcml2LAorCQkJIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTk3LDExICs1NzgsMTIgQEAKIAkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIHNrYiB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgKi8KIAlza2JfcHV0KHJ4Yi0+c2tiLCBsZTE2X3RvX2NwdShyeF9oZHItPmxlbikpOwogCi0JaWYgKGl3bDM5NDVfcGFyYW1faHdjcnlwdG8pCi0JCWl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHByaXYsIHJ4Yi0+c2tiLAorCWlmICghaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0bykKKwkJaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LAorCQkJCSAgICAgICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeGItPnNrYi0+ZGF0YSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUocnhfZW5kLT5zdGF0dXMpLCBzdGF0cyk7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZW47CiAjZW5kaWYKQEAgLTYxMSwxMiArNTkzLDEyIEBACiAKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQyAoSFoqNikKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfcngoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXI7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyAqcnhfc3RhdHMgPSBJV0xfUlhfU1RBVFMocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgKnJ4X2VuZCA9IElXTF9SWF9FTkQocGt0KTsKQEAgLTY0NCwyMiArNjI2LDIxIEBACiAJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAKIAlpZiAoKHVubGlrZWx5KHJ4X3N0YXRzLT5waHlfY291bnQgPiAyMCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QCi0JCSAgICAoImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICIKLQkJICAgICAiJWQvbiIsIHJ4X3N0YXRzLT5waHlfY291bnQpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCisJCQkJcnhfc3RhdHMtPnBoeV9jb3VudCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIShyeF9lbmQtPnN0YXR1cyAmIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IpCiAJICAgIHx8ICEocnhfZW5kLT5zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKLQkJSVdMX0RFQlVHX1JYKCJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsIHJ4X2VuZC0+c3RhdHVzKTsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsIHJ4X2VuZC0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAogCiAKIAkvKiBDb252ZXJ0IDM5NDUncyByc3NpIGluZGljYXRvciB0byBkQm0gKi8KLQlyeF9zdGF0dXMuc2lnbmFsID0gcnhfc3RhdHMtPnJzc2kgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcnhfc3RhdHVzLnNpZ25hbCA9IHJ4X3N0YXRzLT5yc3NpIC0gSVdMMzlfUlNTSV9PRkZTRVQ7CiAKIAkvKiBTZXQgZGVmYXVsdCBub2lzZSB2YWx1ZSB0byAtMTI3ICovCiAJaWYgKHByaXYtPmxhc3Rfcnhfbm9pc2UgPT0gMCkKQEAgLTY5MSw3ICs2NzIsNyBAQAogCX0KIAogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpICVkIG5vaXNlICVkIHF1YWwgJWQgc2lnX2F2ZyAlZCBub2lzZV9kaWZmICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSAlZCBub2lzZSAlZCBxdWFsICVkIHNpZ19hdmcgJWQgbm9pc2VfZGlmZiAlZFxuIiwKIAkJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnF1YWwsCiAJCQlyeF9zdGF0c19zaWdfYXZnLCByeF9zdGF0c19ub2lzZV9kaWZmKTsKIApAQCAtNjk5LDE3ICs2ODAsMTQgQEAKIAogCW5ldHdvcmtfcGFja2V0ID0gaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChwcml2LCBoZWFkZXIpOwogCi0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJbJWNdICVkIFJTU0k6JWQgU2lnbmFsOiV1LCBOb2lzZToldSwgUmF0ZToldVxuIiwKKwlJV0xfREVCVUdfU1RBVFNfTElNSVQocHJpdiwgIlslY10gJWQgUlNTSTolZCBTaWduYWw6JXUsIE5vaXNlOiV1LCBSYXRlOiV1XG4iLAogCQkJICAgICAgbmV0d29ya19wYWNrZXQgPyAnKicgOiAnICcsCiAJCQkgICAgICBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpLAogCQkJICAgICAgcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLnNpZ25hbCwKIAkJCSAgICAgIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnJhdGVfaWR4KTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX1JYKSkKLQkJLyogU2V0ICIxIiB0byByZXBvcnQgZ29vZCBkYXRhIGZyYW1lcyBpbiBncm91cHMgb2YgMTAwICovCi0JCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7Ci0jZW5kaWYKKwkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KKwlpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIDEpOwogCiAJaWYgKG5ldHdvcmtfcGFja2V0KSB7CiAJCXByaXYtPmxhc3RfYmVhY29uX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9lbmQtPmJlYWNvbl90aW1lc3RhbXApOwpAQCAtNzIxLDI0ICs2OTksMzEgQEAKIAlpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIHJ4YiwgJnJ4X3N0YXR1cyk7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB2b2lkICpwdHIsCi0JCQkJIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKK2ludCBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJICAgICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpCiB7CiAJaW50IGNvdW50OwotCXUzMiBwYWQ7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQgPSAoc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICopcHRyOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bDM5NDVfdGZkICp0ZmQsICp0ZmRfdG1wOworCisJcSA9ICZ0eHEtPnE7CisJdGZkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmQgKil0eHEtPnRmZHM7CisJdGZkID0gJnRmZF90bXBbcS0+d3JpdGVfcHRyXTsKKworCWlmIChyZXNldCkKKwkJbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKIAogCWNvdW50ID0gVEZEX0NUTF9DT1VOVF9HRVQobGUzMl90b19jcHUodGZkLT5jb250cm9sX2ZsYWdzKSk7Ci0JcGFkID0gVEZEX0NUTF9QQURfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCiAJaWYgKChjb3VudCA+PSBOVU1fVEZEX0NIVU5LUykgfHwgKGNvdW50IDwgMCkpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCiAJCQkgIE5VTV9URkRfQ0hVTktTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdGZkLT5wYVtjb3VudF0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwotCXRmZC0+cGFbY291bnRdLmxlbiA9IGNwdV90b19sZTMyKGxlbik7CisJdGZkLT50YnNbY291bnRdLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwl0ZmQtPnRic1tjb3VudF0ubGVuID0gY3B1X3RvX2xlMzIobGVuKTsKIAogCWNvdW50Kys7CiAKQEAgLTc1MywzMiArNzM4LDM1IEBACiAgKgogICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgaW5kZXhlcwogICovCi1pbnQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKK3ZvaWQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZF90bXAgPSAoc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICopJnR4cS0+YmRbMF07Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZCA9ICZiZF90bXBbdHhxLT5xLnJlYWRfcHRyXTsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZF90bXAgPSAoc3RydWN0IGl3bDM5NDVfdGZkICopdHhxLT50ZmRzOworCWludCBpbmRleCA9IHR4cS0+cS5yZWFkX3B0cjsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZCA9ICZ0ZmRfdG1wW2luZGV4XTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKIAlpbnQgaTsKIAlpbnQgY291bnRlcjsKIAotCS8qIGNsYXNzaWZ5IGJkICovCi0JaWYgKHR4cS0+cS5pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJLyogbm90aGluZyB0byBjbGVhbnVwIGFmdGVyIGZvciBob3N0IGNvbW1hbmRzICovCi0JCXJldHVybiAwOwotCiAJLyogc2FuaXR5IGNoZWNrICovCi0JY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KGJkLT5jb250cm9sX2ZsYWdzKSk7CisJY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCWlmIChjb3VudGVyID4gTlVNX1RGRF9DSFVOS1MpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBjb3VudGVyKTsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgY291bnRlcik7CiAJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAorCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChjb3VudGVyKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKIAkvKiB1bm1hcCBjaHVua3MgaWYgYW55ICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgY291bnRlcjsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdShiZC0+cGFbaV0uYWRkciksCi0JCQkJIGxlMzJfdG9fY3B1KGJkLT5wYVtpXS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmFkZHIpLAorCQkJIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXTsKIAkJCWlmICh0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSkgewpAQCAtNzg4LDEwICs3NzYsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gOwogfQogCi11OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3U4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGksIHN0YXJ0ID0gSVdMX0FQX0lEOwogCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtODAyLDE4ICs3OTAsMTggQEAKIAkJc3RhcnQgPSBJV0xfU1RBX0lEOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQlpZiAoKHByaXYtPnN0YXRpb25zW2ldLnVzZWQpICYmCisJZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCisJCWlmICgocHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCkgJiYKIAkJICAgICghY29tcGFyZV9ldGhlcl9hZGRyCi0JCSAgICAgKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CisJCSAgICAgKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CiAJCQlyZXQgPSBpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19JTkZPKCJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAogCQkgICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTgyNCwxMiArODEyLDEwIEBACiAgKiBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlIC0gQWRkIHJhdGUgcG9ydGlvbiB0byBUWF9DTUQ6CiAgKgogKi8KLXZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGh3X3ZhbHVlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAJdTE2IHJhdGVfaW5kZXggPSBtaW4oaHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CiAJdTE2IHJhdGVfbWFzazsKQEAgLTgzOCwyNSArODI0LDE1IEBACiAJdTggZGF0YV9yZXRyeV9saW1pdDsKIAlfX2xlMzIgdHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAogCXJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnBsY3A7Ci0JdHhfZmxhZ3MgPSBjbWQtPmNtZC50eC50eF9mbGFnczsKKwl0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAogCS8qIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzdGEtPnN1cHBfcmF0ZXMgd2hpbGUKIAkgKiBpbiB0aGlzIHJ1bm5pbmcgY29udGV4dCAqLwogCXJhdGVfbWFzayA9IElXTF9SQVRFU19NQVNLOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSByYXRlOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgotCSAgICAoc3RhX2lkICE9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkKSAmJgotCQkoc3RhX2lkICE9IElXTF9NVUxUSUNBU1RfSUQpKQotCQlwcml2LT5zdGF0aW9uc1tJV0xfU1RBX0lEXS5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzID0gcmF0ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAodHhfaWQgPj0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCXJ0c19yZXRyeV9saW1pdCA9IDM7CiAJZWxzZQpAQCAtODg4LDI1ICs4NjQsMjUgQEAKIAkJfQogCX0KIAotCWNtZC0+Y21kLnR4LnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5yYXRlID0gcmF0ZTsKLQljbWQtPmNtZC50eC50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4LT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7CisJdHgtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OworCXR4LT5yYXRlID0gcmF0ZTsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKIAogCS8qIE9GRE0gKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzBdID0KKwl0eC0+c3VwcF9yYXRlc1swXSA9CiAJICAgKChyYXRlX21hc2sgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CiAKIAkvKiBDQ0sgKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzFdID0gKHJhdGVfbWFzayAmIDB4Rik7CisJdHgtPnN1cHBfcmF0ZXNbMV0gPSAocmF0ZV9tYXNrICYgMHhGKTsKIAotCUlXTF9ERUJVR19SQVRFKCJUeCBzdGEgaWQ6ICVkLCByYXRlOiAlZCAocGxjcCksIGZsYWdzOiAweCU0WCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlR4IHN0YSBpZDogJWQsIHJhdGU6ICVkIChwbGNwKSwgZmxhZ3M6IDB4JTRYICIKIAkJICAgICAgICJjY2svb2ZkbSBtYXNrOiAweCV4LzB4JXhcbiIsIHN0YV9pZCwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnJhdGUsIGxlMzJfdG9fY3B1KGNtZC0+Y21kLnR4LnR4X2ZsYWdzKSwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMV0sIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMF0pOworCQkgICAgICAgdHgtPnJhdGUsIGxlMzJfdG9fY3B1KHR4LT50eF9mbGFncyksCisJCSAgICAgICB0eC0+c3VwcF9yYXRlc1sxXSwgdHgtPnN1cHBfcmF0ZXNbMF0pOwogfQogCi11OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHUxNiB0eF9yYXRlLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgKnN0YXRpb247CkBAIC05MTUsMTM4ICs4OTEsMTMzIEBACiAJCXJldHVybiBJV0xfSU5WQUxJRF9TVEFUSU9OOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CisJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdOwogCiAJc3RhdGlvbi0+c3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfVFhfUkFURV9NU0s7CiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHR4X3JhdGUpOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSB0eF9yYXRlOwogCXN0YXRpb24tPnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAotCWl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmc3RhdGlvbi0+c3RhLCBmbGFncyk7Ci0JSVdMX0RFQlVHX1JBVEUoIlNDQUxFIHN5bmMgc3RhdGlvbiAlZCB0byByYXRlICVkXG4iLAorCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTQ0FMRSBzeW5jIHN0YXRpb24gJWQgdG8gcmF0ZSAlZFxuIiwKIAkJCXN0YV9pZCwgdHhfcmF0ZSk7CiAJcmV0dXJuIHN0YV9pZDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaXdsX3B3cl9zcmMgc3JjKQogewotCWludCByYzsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghcHdyX21heCkgewotCQl1MzIgdmFsOwotCi0JCXJjID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsCi0JCQkJUENJX1BPV0VSX1NPVVJDRSwgJnZhbCk7Ci0JCWlmICh2YWwgJiBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCkgewotCQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKKwkJaWYgKHBjaV9wbWVfY2FwYWJsZShwcml2LT5wY2lfZGV2LCBQQ0lfRDNjb2xkKSkgeworCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJfkFQTUdfUFNfQ1RSTF9NU0tfUFdSX1NSQyk7Ci0JCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKLQkJCWl3bDM5NDVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCisJCQlpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCiAJCQkJICAgICBDU1JfR1BJT19JTl9WQUxfVkFVWF9QV1JfU1JDLAogCQkJCSAgICAgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiwgNTAwMCk7Ci0JCX0gZWxzZQotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCX0gZWxzZSB7CisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQl9CiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WTUFJTiwKIAkJCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKIAotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCiAJCQkgICAgIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIsIDUwMDApOwkvKiB1UyAqLwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3J4X2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyBpbnQgaXdsMzk0NV9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmRtYV9hZGRyKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfUlBUUl9BRERSKDApLAotCQkJICAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzICsKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkLCByeF9yZWFkX3B0clswXSkpOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUkNTUl9XUFRSKDApLCAwKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggfAotCQkoUlhfUVVFVUVfU0laRV9MT0cgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFKSB8Ci0JCUFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKLQkJKDEgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEgpIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUkJEX0JBU0UoMCksIHJ4cS0+ZG1hX2FkZHIpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUlBUUl9BRERSKDApLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1dQVFIoMCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfQ09ORklHKDApLAorCQlGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4IHwKKwkJKFJYX1FVRVVFX1NJWkVfTE9HIDw8IEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19SQkRDX1NJWkUpIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKKwkJKDEgPDwgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIKSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCk7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYgSS9PICovCi0JaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEZIX1JTU1JfQ1RSTCk7CisJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgRkgzOV9SU1NSX0NUUkwpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogYnlwYXNzIG1vZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMHgyKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX01PREVfUkVHLCAweDIpOwogCiAJLyogUkEgMCBpcyBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CiAKIAkvKiBhbGwgNiBmaWZvIGFyZSBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEZBQ1RfUkVHLCAweDNmKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRkFDVF9SRUcsIDB4M2YpOwogCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHLCAweDAxMDAwMCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfVFhGNE1GX1JFRywgMHgwMDAwMDQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRjVNRl9SRUcsIDB4MDAwMDA1KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1NCWVBfTU9ERV8xX1JFRywgMHgwMTAwMDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY0TUZfUkVHLCAweDAwMDAwNCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY1TUZfUkVHLCAweDAwMDAwNSk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UsCi0JCQkgICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RTU1JfQ0JCX0JBU0UsCisJCQkgICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVFNTUl9NU0dfQ09ORklHLAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4QiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfQ0JCX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UU1NSX01TR19DT05GSUcsCisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCIHwKKwkJRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDU3LDcgKzEwMjgsNyBAQAogICoKICAqIERlc3Ryb3lzIGFsbCBETUEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtIGFnYWluCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhxX2N0eF9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCWludCB0eHFfaWQsIHNsb3RzX251bTsKQEAgLTEwNzAsMTMgKzEwNDEsMTMgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIFR4IHF1ZXVlKHMpICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBURkRfUVVFVUVfTUFYOyB0eHFfaWQrKykgeworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKIAkJc2xvdHNfbnVtID0gKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkgPwogCQkJCVRGRF9DTURfU0xPVFMgOiBURkRfVFhfQ01EX1NMT1RTOwotCQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKLQkJCQl0eHFfaWQpOworCQlyYyA9IGl3bF90eF9xdWV1ZV9pbml0KHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgc2xvdHNfbnVtLAorCQkJCSAgICAgICB0eHFfaWQpOwogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7CisJCQlJV0xfRVJSKHByaXYsICJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CkBAIC0xMDg4LDExMSArMTA1OSwxNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfYXBtX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJaXdsX3Bvd2VyX2luaXRpYWxpemUocHJpdik7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJCSAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9ESVNfTDBTX0VYSVRfVElNRVIpOworCisJLyogZGlzYWJsZSBMMHMgd2l0aG91dCBhZmZlY3RpbmcgTDEgOmRvbid0IHdhaXQgZm9yIElDSCBMMHMgYnVnIFcvQSkgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJCSAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9MMUFfTk9fTDBTX1JYKTsKKworCS8qIHNldCAiaW5pdGlhbGl6YXRpb24gY29tcGxldGUiIGJpdCB0byBtb3ZlIGFkYXB0ZXIKKwkqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBlbmFibGUgRE1BICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8CisJCQkJCQlBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOworCisJdWRlbGF5KDIwKTsKKworCS8qIGRpc2FibGUgTDEtQWN0aXZlICovCisJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKKwkJCSAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXdsMzk0NV9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCByZXZfaWQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfUlRQKQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUlRQIHR5cGUgXG4iKTsKKwllbHNlIGlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfQkFTSUNfU0tVKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1IFJBRElPLU1CIHR5cGVcbiIpOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKKwl9IGVsc2UgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NTSk7CisJfQorCisJaWYgKEVFUFJPTV9TS1VfQ0FQX09QX01PREVfTVJDID09IGVlcHJvbS0+c2t1X2NhcCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfU0tVX01SQyk7CisJfSBlbHNlCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTS1UgT1AgbW9kZSBpcyBiYXNpY1xuIik7CisKKwlpZiAoKGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCisJCQkgICAgICAgZWVwcm9tLT5ib2FyZF9yZXZpc2lvbik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCisJCQkgICAgICAgZWVwcm9tLT5ib2FyZF9yZXZpc2lvbik7CisJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKKwl9CisKKwlpZiAoZWVwcm9tLT5hbG1nb3JfbV92ZXJzaW9uIDw9IDEpIHsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbik7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhcmQgTSB0eXBlIEIgdmVyc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlZXByb20tPnNrdV9jYXAgJiBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSkKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlNXIFJGIEtJTEwgc3VwcG9ydGVkIGluIEVFUFJPTS5cbiIpOworCisJaWYgKGVlcHJvbS0+c2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQorCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7Cit9CisKK2ludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCByZXZfaWQ7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7Ci0KLQlpd2wzOTQ1X3Bvd2VyX2luaXRfaGFuZGxlKHByaXYpOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjM5X0FOQV9QTExfQ0ZHX1ZBTCk7Ci0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAotCQkgICAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9MMUFfTk9fTDBTX1JYKTsKLQotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwotCXJjID0gaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwotCWlmIChyYyA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCi0JCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8Ci0JCQkJIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7Ci0JdWRlbGF5KDIwKTsKLQlpd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKLQkJCQkgICAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLmluaXQocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogRGV0ZXJtaW5lIEhXIHR5cGUgKi8KIAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldl9pZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JSVdMX0RFQlVHX0lORk8oIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCByZXZfaWQpOwogCi0JaXdsMzk0NV9uaWNfc2V0X3B3cl9zcmMocHJpdiwgMSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyYyA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc2V0X3B3cl9zcmMocHJpdiwgSVdMX1BXUl9TUkNfVk1BSU4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFApCi0JCUlXTF9ERUJVR19JTkZPKCJSVFAgdHlwZSBcbiIpOwotCWVsc2UgaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UpIHsKLQkJSVdMX0RFQlVHX0lORk8oIjM5NDUgUkFESU8tTUIgdHlwZVxuIik7Ci0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOwotCX0KLQotCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBwcml2LT5lZXByb20uc2t1X2NhcCkgewotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOwotCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOwotCi0JaWYgKChwcml2LT5lZXByb20uYm9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOwotCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKLQl9Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24gPD0gMSkgewotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAotCQkJICAgICAgIHByaXYtPmVlcHJvbS5hbG1nb3JfbV92ZXJzaW9uKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBNIHR5cGUgQiB2ZXJzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24pOwotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9CKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHByaXYtPmVlcHJvbS5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCi0JCUlXTF9ERUJVR19SRl9LSUxMKCJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKLQotCWlmIChwcml2LT5lZXByb20uc2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQotCQlJV0xfREVCVUdfUkZfS0lMTCgiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5jb25maWcocHJpdik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUlggcXVldWUsIG9yIHJlc2V0IGlmIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkICovCiAJaWYgKCFyeHEtPmJkKSB7Ci0JCXJjID0gaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhwcml2KTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfYWxsb2MocHJpdik7CiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQotCQlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9yZXNldChwcml2LCByeHEpOwogCiAJaXdsMzk0NV9yeF9yZXBsZW5pc2gocHJpdik7CiAKQEAgLTEyMDIsMTYgKzEyMDIsMTYgQEAKIAogCS8qIExvb2sgYXQgdXNpbmcgdGhpcyBpbnN0ZWFkOgogCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwotCWl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJKi8KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1dQVFIoMCksIHJ4cS0+d3JpdGUgJiB+Nyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9XUFRSKDApLCByeHEtPndyaXRlICYgfjcpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjksMTE2ICsxMjI5LDEyNSBAQAogICoKICAqIERlc3Ryb3kgYWxsIFRYIERNQSBxdWV1ZXMgYW5kIHN0cnVjdHVyZXMKICAqLwotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgVEZEX1FVRVVFX01BWDsgdHhxX2lkKyspCi0JCWl3bDM5NDVfdHhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0pOworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspCisJCWlmICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCisJCQlpd2xfY21kX3F1ZXVlX2ZyZWUocHJpdik7CisJCWVsc2UKKwkJCWl3bF90eF9xdWV1ZV9mcmVlKHByaXYsIHR4cV9pZCk7CisKIH0KIAotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHF1ZXVlOworCWludCB0eHFfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJaWYgKGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHN0b3AgU0NEICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOwogCiAJLyogcmVzZXQgVEZEIHF1ZXVlcyAqLwotCWZvciAocXVldWUgPSBURkRfUVVFVUVfTUlOOyBxdWV1ZSA8IFRGRF9RVUVVRV9NQVg7IHF1ZXVlKyspIHsKLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9UQ1NSX0NPTkZJRyhxdWV1ZSksIDB4MCk7Ci0JCWl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX1RTU1JfVFhfU1RBVFVTLAotCQkJCUFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShxdWV1ZSksCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPD0gcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtOyB0eHFfaWQrKykgeworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UQ1NSX0NPTkZJRyh0eHFfaWQpLCAweDApOworCQlpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIMzlfVFNTUl9UWF9TVEFUVVMsCisJCQkJRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRSh0eHFfaWQpLAogCQkJCTEwMDApOwogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsMzk0NV9od190eHFfY3R4X2ZyZWUocHJpdik7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19zdG9wX21hc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2FwbV9zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjID0gMDsKLQl1MzIgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHNldCBzdG9wIG1hc3RlciBiaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1RPUF9NQVNURVIpOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NUT1BfTUFTVEVSKTsKIAotCXJlZ192YWwgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpOworCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX1JFU0VULAorCQkJICAgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CiAKLQlpZiAoQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19QT1dFUl9TQVZFID09Ci0JICAgIChyZWdfdmFsICYgQ1NSX0dQX0NOVFJMX1JFR19NU0tfUE9XRVJfU0FWRV9UWVBFKSkKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgaW4gcG93ZXIgc2F2ZSwgbWFzdGVyIGlzIGFscmVhZHkgIgotCQkJICAgICAgICJzdG9wcGVkXG4iKTsKLQllbHNlIHsKLQkJcmMgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfUkVTRVQsCi0JCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInN0b3AgbWFzdGVyXG4iKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCi1pbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYXBtX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpd2wzOTQ1X2FwbV9zdG9wX21hc3Rlcihwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisKKwl1ZGVsYXkoMTApOworCS8qIGNsZWFyICJpbml0IGNvbXBsZXRlIiAgbW92ZSBhZGFwdGVyIEQwQSogLS0+IEQwVSBzdGF0ZSAqLworCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaXdsMzk0NV9od19uaWNfc3RvcF9tYXN0ZXIocHJpdik7CisJaXdsMzk0NV9hcG1fc3RvcF9tYXN0ZXIocHJpdik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisJdWRlbGF5KDEwKTsKIAotCWl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQkgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKCFyYykgewotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKIAotCQl1ZGVsYXkoMTApOwotCi0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7Ci0KLQkJaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9NU0tfUkVHLCAweDApOwotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX1NUVF9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9NU0tfUkVHLCAweDApOworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX1JUQ19JTlRfU1RUX1JFRywKIAkJCQkJMHhGRkZGRkZGRik7CiAKIAkJLyogZW5hYmxlIERNQSAqLwotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAorCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCiAJCQkJCSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAogCQkJCQkgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKIAkJdWRlbGF5KDEwKTsKIAotCQlpd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKIAkJCQlBUE1HX1BTX0NUUkxfVkFMX1JFU0VUX1JFUSk7CiAJCXVkZWxheSg1KTsKLQkJaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCiAJLyogQ2xlYXIgdGhlICdob3N0IGNvbW1hbmQgYWN0aXZlJyBiaXQuLi4gKi8KQEAgLTEzNjcsMzMgKzEzNzYsMzQgQEAKIAlyZXR1cm4gKCh0ZW1wZXJhdHVyZSA8IC0yNjApIHx8ICh0ZW1wZXJhdHVyZSA+IDI1KSkgPyAxIDogMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXJldHVybiBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMik7CisJcmV0dXJuIGl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDIpOwogfQogCiAvKioKICAqIGl3bDM5NDVfaHdfcmVnX3R4cG93ZXJfZ2V0X3RlbXBlcmF0dXJlCiAgKiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYnkgcmVhZGluZyBmcm9tIE5JQwogKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogeworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKIAlpbnQgdGVtcGVyYXR1cmU7CiAKIAl0ZW1wZXJhdHVyZSA9IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHByaXYpOwogCiAJLyogZHJpdmVyJ3Mgb2theSByYW5nZSBpcyAtMjYwIHRvICsyNS4KIAkgKiAgIGh1bWFuIHJlYWRhYmxlIG9rYXkgcmFuZ2UgaXMgMCB0byArMjg1ICovCi0JSVdMX0RFQlVHX0lORk8oIlRlbXBlcmF0dXJlOiAlZFxuIiwgdGVtcGVyYXR1cmUgKyBJV0xfVEVNUF9DT05WRVJUKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiVGVtcGVyYXR1cmU6ICVkXG4iLCB0ZW1wZXJhdHVyZSArIElXTF9URU1QX0NPTlZFUlQpOwogCiAJLyogaGFuZGxlIGluc2FuZSB0ZW1wIHJlYWRpbmcgKi8KIAlpZiAoaXdsMzk0NV9od19yZWdfdGVtcF9vdXRfb2ZfcmFuZ2UodGVtcGVyYXR1cmUpKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYmFkIHRlbXBlcmF0dXJlIHZhbHVlICAlZFxuIiwgdGVtcGVyYXR1cmUpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBiYWQgdGVtcGVyYXR1cmUgdmFsdWUgICVkXG4iLCB0ZW1wZXJhdHVyZSk7CiAKIAkJLyogaWYgcmVhbGx5IHJlYWxseSBob3QoPyksCiAJCSAqICAgc3Vic3RpdHV0ZSB0aGUgM3JkIGJhbmQvZ3JvdXAncyB0ZW1wIG1lYXN1cmVkIGF0IGZhY3RvcnkgKi8KIAkJaWYgKHByaXYtPmxhc3RfdGVtcGVyYXR1cmUgPiAxMDApCi0JCQl0ZW1wZXJhdHVyZSA9IHByaXYtPmVlcHJvbS5ncm91cHNbMl0udGVtcGVyYXR1cmU7CisJCQl0ZW1wZXJhdHVyZSA9IGVlcHJvbS0+Z3JvdXBzWzJdLnRlbXBlcmF0dXJlOwogCQllbHNlIC8qIGVsc2UgdXNlIG1vc3QgcmVjZW50ICJzYW5lIiB2YWx1ZSBmcm9tIGRyaXZlciAqLwogCQkJdGVtcGVyYXR1cmUgPSBwcml2LT5sYXN0X3RlbXBlcmF0dXJlOwogCX0KQEAgLTE0MTIsNyArMTQyMiw3IEBACiAgKiByZWNvcmRzIG5ldyB0ZW1wZXJhdHVyZSBpbiB0eF9tZ3ItPnRlbXBlcmF0dXJlLgogICogcmVwbGFjZXMgdHhfbWdyLT5sYXN0X3RlbXBlcmF0dXJlICpvbmx5KiBpZiBjYWxpYiBuZWVkZWQKICAqICAgIChhc3N1bWVzIGNhbGxlciB3aWxsIGFjdHVhbGx5IGRvIHRoZSBjYWxpYnJhdGlvbiEpLiAqLwotc3RhdGljIGludCBpc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHRlbXBfZGlmZjsKIApAQCAtMTQyMSwyMCArMTQzMSwyMCBAQAogCiAJLyogZ2V0IGFic29sdXRlIHZhbHVlICovCiAJaWYgKHRlbXBfZGlmZiA8IDApIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CiAJCXRlbXBfZGlmZiA9IC10ZW1wX2RpZmY7CiAJfSBlbHNlIGlmICh0ZW1wX2RpZmYgPT0gMCkKLQkJSVdMX0RFQlVHX1BPV0VSKCJTYW1lIHRlbXAsXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTYW1lIHRlbXAsXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19QT1dFUigiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLFxuIiwgdGVtcF9kaWZmKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJHZXR0aW5nIHdhcm1lciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOwogCiAJLyogaWYgd2UgZG9uJ3QgbmVlZCBjYWxpYnJhdGlvbiwgKmRvbid0KiB1cGRhdGUgbGFzdF90ZW1wZXJhdHVyZSAqLwogCWlmICh0ZW1wX2RpZmYgPCBJV0xfVEVNUEVSQVRVUkVfTElNSVRfVElNRVIpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJUaW1lZCB0aGVybWFsIGNhbGliIG5vdCBuZWVkZWRcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlRpbWVkIHRoZXJtYWwgY2FsaWIgbm90IG5lZWRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiVGltZWQgdGhlcm1hbCBjYWxpYiBuZWVkZWRcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGltZWQgdGhlcm1hbCBjYWxpYiBuZWVkZWRcbiIpOwogCiAJLyogYXNzdW1lIHRoYXQgY2FsbGVyIHdpbGwgYWN0dWFsbHkgZG8gY2FsaWIgLi4uCiAJICogICB1cGRhdGUgdGhlICJsYXN0IHRlbXBlcmF0dXJlIiB2YWx1ZSAqLwpAQCAtMTYyNyw5ICsxNjM3LDkgQEAKICAqIFNldCAoaW4gb3VyIGNoYW5uZWwgaW5mbyBkYXRhYmFzZSkgdGhlIGRpcmVjdCBzY2FuIFR4IHBvd2VyIGZvciAxIE1iaXQgKENDSykKICAqIG9yIDYgTWJpdCAoT0ZETSkgcmF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaHdfcmVnX3NldF9zY2FuX3Bvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBzY2FuX3RibF9pbmRleCwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaHdfcmVnX3NldF9zY2FuX3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHNjYW5fdGJsX2luZGV4LAogCQkJICAgICAgIHMzMiByYXRlX2luZGV4LCBjb25zdCBzOCAqY2xpcF9wd3JzLAotCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbywKIAkJCSAgICAgICBpbnQgYmFuZF9pbmRleCkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gKnNjYW5fcG93ZXJfaW5mbzsKQEAgLTE2NDYsNyArMTY1Niw3IEBACiAJLyogZnVydGhlciBsaW1pdCB0byB1c2VyJ3MgbWF4IHBvd2VyIHByZWZlcmVuY2UuCiAJICogRklYTUU6ICBPdGhlciBzcGVjdHJ1bSBtYW5hZ2VtZW50IHBvd2VyIGxpbWl0YXRpb25zIGRvIG5vdAogCSAqICAgc2VlbSB0byBhcHBseT8/ICovCi0JcG93ZXIgPSBtaW4ocG93ZXIsIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCk7CisJcG93ZXIgPSBtaW4ocG93ZXIsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIAlzY2FuX3Bvd2VyX2luZm8tPnJlcXVlc3RlZF9wb3dlciA9IHBvd2VyOwogCiAJLyogZmluZCBkaWZmZXJlbmNlIGJldHdlZW4gbmV3IHNjYW4gKnBvd2VyKiBhbmQgY3VycmVudCAibm9ybWFsIgpAQCAtMTY3OCwzMiArMTY4OCwzMiBAQAogfQogCiAvKioKLSAqIGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlciAtIGZpbGwgaW4gVHggUG93ZXIgY29tbWFuZCB3aXRoIGdhaW4gc2V0dGluZ3MKKyAqIGl3bDM5NDVfc2VuZF90eF9wb3dlciAtIGZpbGwgaW4gVHggUG93ZXIgY29tbWFuZCB3aXRoIGdhaW4gc2V0dGluZ3MKICAqCiAgKiBDb25maWd1cmVzIHBvd2VyIHNldHRpbmdzIGZvciBhbGwgcmF0ZXMgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwsCiAgKiB1c2luZyB2YWx1ZXMgZnJvbSBjaGFubmVsIGluZm8gc3RydWN0LCBhbmQgc2VuZCB0byBOSUMKICAqLwotaW50IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYXRlX2lkeCwgaTsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kIHR4cG93ZXIgPSB7CiAJCS5jaGFubmVsID0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCwKIAl9OwogCiAJdHhwb3dlci5iYW5kID0gKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPyAwIDogMTsKLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCisJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCiAJCQkJICAgICAgIHByaXYtPmJhbmQsCiAJCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKIAlpZiAoIWNoX2luZm8pIHsKLQkJSVdMX0VSUk9SCi0JCSAgICAoIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBpbmZvIGZvciBjaGFubmVsICVkIFslZF1cbiIsCi0JCSAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksIHByaXYtPmJhbmQpOworCQlJV0xfRVJSKHByaXYsCisJCQkiRmFpbGVkIHRvIGdldCBjaGFubmVsIGluZm8gZm9yIGNoYW5uZWwgJWQgWyVkXVxuIiwKKwkJCWxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpLCBwcml2LT5iYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19QT1dFUigiTm90IGNhbGxpbmcgVFhfUFdSX1RBQkxFX0NNRCBvbiAiCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiTm90IGNhbGxpbmcgVFhfUFdSX1RBQkxFX0NNRCBvbiAiCiAJCQkJIm5vbi1UeCBjaGFubmVsLlxuIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTE3MTEsMTIgKzE3MjEsMTIgQEAKIAkvKiBmaWxsIGNtZCB3aXRoIHBvd2VyIHNldHRpbmdzIGZvciBhbGwgcmF0ZXMgZm9yIGN1cnJlbnQgY2hhbm5lbCAqLwogCS8qIEZpbGwgT0ZETSByYXRlICovCiAJZm9yIChyYXRlX2lkeCA9IElXTF9GSVJTVF9PRkRNX1JBVEUsIGkgPSAwOwotCSAgICAgcmF0ZV9pZHggPD0gSVdMX0xBU1RfT0ZETV9SQVRFOyByYXRlX2lkeCsrLCBpKyspIHsKKwkgICAgIHJhdGVfaWR4IDw9IElXTDM5X0xBU1RfT0ZETV9SQVRFOyByYXRlX2lkeCsrLCBpKyspIHsKIAogCQl0eHBvd2VyLnBvd2VyW2ldLnRwYyA9IGNoX2luZm8tPnBvd2VyX2luZm9baV0udHBjOwogCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaWR4XS5wbGNwOwogCi0JCUlXTF9ERUJVR19QT1dFUigiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKIAkJCQlsZTE2X3RvX2NwdSh0eHBvd2VyLmNoYW5uZWwpLAogCQkJCXR4cG93ZXIuYmFuZCwKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnRwYy50eF9nYWluLApAQCAtMTcyOSw3ICsxNzM5LDcgQEAKIAkJdHhwb3dlci5wb3dlcltpXS50cGMgPSBjaF9pbmZvLT5wb3dlcl9pbmZvW2ldLnRwYzsKIAkJdHhwb3dlci5wb3dlcltpXS5yYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKIAotCQlJV0xfREVCVUdfUE9XRVIoImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJjaCAlZDolZCByZiAlZCBkc3AgJTNkIHJhdGUgY29kZSAweCUwMnhcbiIsCiAJCQkJbGUxNl90b19jcHUodHhwb3dlci5jaGFubmVsKSwKIAkJCQl0eHBvd2VyLmJhbmQsCiAJCQkJdHhwb3dlci5wb3dlcltpXS50cGMudHhfZ2FpbiwKQEAgLTE3MzcsOCArMTc0Nyw5IEBACiAJCQkJdHhwb3dlci5wb3dlcltpXS5yYXRlKTsKIAl9CiAKLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kKSwgJnR4cG93ZXIpOworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsCisJCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQpLAorCQkJCSZ0eHBvd2VyKTsKIAogfQogCkBAIC0xNzU4LDggKzE3NjksOCBAQAogICoJIHByb3Blcmx5IGZpbGwgb3V0IHRoZSBzY2FuIHBvd2VycywgYW5kIGFjdHVhbCBoL3cgZ2FpbiBzZXR0aW5ncywKICAqCSBhbmQgc2VuZCBjaGFuZ2VzIHRvIE5JQwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX3NldF9uZXdfcG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19zZXRfbmV3X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7CiAJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvICpwb3dlcl9pbmZvOwogCWludCBwb3dlcl9jaGFuZ2VkID0gMDsKQEAgLTE3NjgsNyArMTc3OSw3IEBACiAJaW50IHBvd2VyOwogCiAJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtdG8tbWF4L2NsaXAtcG93ZXJzIHRhYmxlICovCi0JY2xpcF9wd3JzID0gcHJpdi0+Y2xpcF9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOworCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJLyogR2V0IHRoaXMgY2hhbm5lbCdzIHJhdGUtdG8tY3VycmVudC1wb3dlciBzZXR0aW5ncyB0YWJsZSAqLwogCXBvd2VyX2luZm8gPSBjaF9pbmZvLT5wb3dlcl9pbmZvOwpAQCAtMTgyMSw3ICsxODMyLDcgQEAKICAqCSBiYXNlZCBzdHJpY3RseSBvbiByZWd1bGF0b3J5IChlZXByb20gYW5kIHNwZWN0cnVtIG1ndCkgbGltaXRhdGlvbnMKICAqCSAobm8gY29uc2lkZXJhdGlvbiBmb3IgaC93IGNsaXBwaW5nIGxpbWl0YXRpb25zKS4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfdHhwb3dlcl9saW1pdChzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9jaF90eHBvd2VyX2xpbWl0KHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewogCXM4IG1heF9wb3dlcjsKIApAQCAtMTg0OSw5ICsxODYwLDEwIEBACiAgKgogICogSWYgUnhPbiBpcyAiYXNzb2NpYXRlZCIsIHRoaXMgc2VuZHMgdGhlIG5ldyBUeHBvd2VyIHRvIE5JQyEKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19jb21wX3R4cG93ZXJfdGVtcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19jb21wX3R4cG93ZXJfdGVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWludCBkZWx0YV9pbmRleDsKIAljb25zdCBzOCAqY2xpcF9wd3JzOyAvKiBhcnJheSBvZiBoL3cgbWF4IHBvd2VyIGxldmVscyBmb3IgZWFjaCByYXRlICovCiAJdTggYV9iYW5kOwpAQCAtMTg2Nyw3ICsxODc5LDcgQEAKIAkJYV9iYW5kID0gaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbyk7CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIGZhY3RvcnkgY2FsaWJyYXRpb24gdGVtcGVyYXR1cmUgKi8KLQkJcmVmX3RlbXAgPSAoczE2KXByaXYtPmVlcHJvbS5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgorCQlyZWZfdGVtcCA9IChzMTYpZWVwcm9tLT5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgogCQkgICAgdGVtcGVyYXR1cmU7CiAKIAkJLyogZ2V0IHBvd2VyIGluZGV4IGFkanVzdG1lbnQgYmFzZWQgb24gY3VycmVudCBhbmQgZmFjdG9yeQpAQCAtMTg5Myw3ICsxOTA1LDcgQEAKIAkJfQogCiAJCS8qIEdldCB0aGlzIGNobmxncnAncyByYXRlLXRvLW1heC9jbGlwLXBvd2VycyB0YWJsZSAqLwotCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJCS8qIHNldCBzY2FuIHR4IHBvd2VyLCAxTWJpdCBmb3IgQ0NLLCA2TWJpdCBmb3IgT0ZETSAqLwogCQlmb3IgKHNjYW5fdGJsX2luZGV4ID0gMDsKQEAgLTE5MDcsMjQgKzE5MTksMjQgQEAKIAl9CiAKIAkvKiBzZW5kIFR4cG93ZXIgY29tbWFuZCBmb3IgY3VycmVudCBjaGFubmVsIHRvIHVjb2RlICovCi0JcmV0dXJuIGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKKwlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcihwcml2KTsKIH0KIAotaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHM4IHBvd2VyKQoraW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCXM4IG1heF9wb3dlcjsKIAl1OCBhX2JhbmQ7CiAJdTggaTsKIAotCWlmIChwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPT0gcG93ZXIpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJSZXF1ZXN0ZWQgVHggcG93ZXIgc2FtZSBhcyBjdXJyZW50ICIKKwlpZiAocHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPT0gcG93ZXIpIHsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSZXF1ZXN0ZWQgVHggcG93ZXIgc2FtZSBhcyBjdXJyZW50ICIKIAkJCQkibGltaXQ6ICVkZEJtLlxuIiwgcG93ZXIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfUE9XRVIoIlNldHRpbmcgdXBwZXIgbGltaXQgY2xhbXAgdG8gJWRkQm0uXG4iLCBwb3dlcik7Ci0JcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0ID0gcG93ZXI7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTZXR0aW5nIHVwcGVyIGxpbWl0IGNsYW1wIHRvICVkZEJtLlxuIiwgcG93ZXIpOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gcG93ZXI7CiAKIAkvKiBzZXQgdXAgbmV3IFR4IHBvd2VycyBmb3IgZWFjaCBhbmQgZXZlcnkgY2hhbm5lbCwgMi40IGFuZCA1LnggKi8KIApAQCAtMTk1Myw3ICsxOTY1LDcgQEAKIH0KIAogLyogd2lsbCBhZGQgMzk0NSBjaGFubmVsIHN3aXRjaCBjbWQgaGFuZGxpbmcgbGF0ZXIgKi8KLWludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQoraW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgY2hhbm5lbCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NjgsNyArMTk4MCw3IEBACiAgKiAgICAgLS0gc2VuZCBuZXcgc2V0IG9mIGdhaW4gc2V0dGluZ3MgdG8gTklDCiAgKiBOT1RFOiAgVGhpcyBzaG91bGQgY29udGludWUgd29ya2luZywgZXZlbiB3aGVuIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLAogICogICBzbyB3ZSBjYW4ga2VlcCBvdXIgaW50ZXJuYWwgdGFibGUgb2Ygc2NhbiBwb3dlcnMgY3VycmVudC4gKi8KLXZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBUaGlzIHdpbGwga2ljayBpbiB0aGUgImJydXRlIGZvcmNlIgogCSAqIGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKCkgYmVsb3cgKi8KQEAgLTE5ODcsNyArMTk5OSw3IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LAogCQkJCQkgICAgIHRoZXJtYWxfcGVyaW9kaWMud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCkBAIC0yMDA5LDEwICsyMDIxLDExIEBACiAgKgkgb24gQS1iYW5kLCBFRVBST00ncyAiZ3JvdXAgZnJlcXVlbmN5IiBlbnRyaWVzIHJlcHJlc2VudCB0aGUgdG9wCiAgKgkgY2hhbm5lbCBpbiBlYWNoIGdyb3VwIDEtNC4gIEdyb3VwIDUgQWxsIEIvRyBjaGFubmVscyBhcmUgaW4gZ3JvdXAgMC4KICAqLwotc3RhdGljIHUxNiBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKK3N0YXRpYyB1MTYgaXdsMzk0NV9od19yZWdfZ2V0X2NoX2dycF9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpjaF9ncnAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1swXTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNoX2dycCA9ICZlZXByb20tPmdyb3Vwc1swXTsKIAl1OCBncm91cDsKIAl1MTYgZ3JvdXBfaW5kZXggPSAwOwkvKiBiYXNlZCBvbiBmYWN0b3J5IGNhbGliIGZyZXF1ZW5jaWVzICovCiAJdTggZ3JwX2NoYW5uZWw7CkBAIC0yMDMyLDcgKzIwNDUsNyBAQAogCX0gZWxzZQogCQlncm91cF9pbmRleCA9IDA7CS8qIDIuNCBHSHosIGdyb3VwIDAgKi8KIAotCUlXTF9ERUJVR19QT1dFUigiQ2hubCAlZCBtYXBwZWQgdG8gZ3JwICVkXG4iLCBjaF9pbmZvLT5jaGFubmVsLAorCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2hubCAlZCBtYXBwZWQgdG8gZ3JwICVkXG4iLCBjaF9pbmZvLT5jaGFubmVsLAogCQkJZ3JvdXBfaW5kZXgpOwogCXJldHVybiBncm91cF9pbmRleDsKIH0KQEAgLTIwNDMsMTEgKzIwNTYsMTIgQEAKICAqIEludGVycG9sYXRlIHRvIGdldCBub21pbmFsIChpLmUuIGF0IGZhY3RvcnkgY2FsaWJyYXRpb24gdGVtcGVyYXR1cmUpIGluZGV4CiAgKiAgIGludG8gcmFkaW8vRFNQIGdhaW4gc2V0dGluZ3MgdGFibGUgZm9yIHJlcXVlc3RlZCBwb3dlci4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfbWF0Y2hlZF9wb3dlcl9pbmRleChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfbWF0Y2hlZF9wb3dlcl9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHM4IHJlcXVlc3RlZF9wb3dlciwKIAkJCQkgICAgICAgczMyIHNldHRpbmdfaW5kZXgsIHMzMiAqbmV3X2luZGV4KQogewogCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpjaG5sX2dycCA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCXMzMiBpbmRleDAsIGluZGV4MTsKIAlzMzIgcG93ZXIgPSAyICogcmVxdWVzdGVkX3Bvd2VyOwogCXMzMiBpOwpAQCAtMjA1Niw3ICsyMDcwLDcgQEAKIAlzMzIgcmVzOwogCXMzMiBkZW5vbWluYXRvcjsKIAotCWNobmxfZ3JwID0gJnByaXYtPmVlcHJvbS5ncm91cHNbc2V0dGluZ19pbmRleF07CisJY2hubF9ncnAgPSAmZWVwcm9tLT5ncm91cHNbc2V0dGluZ19pbmRleF07CiAJc2FtcGxlcyA9IGNobmxfZ3JwLT5zYW1wbGVzOwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJaWYgKHBvd2VyID09IHNhbXBsZXNbaV0ucG93ZXIpIHsKQEAgLTIwOTEsMjIgKzIxMDUsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfaW5pdF9jaGFubmVsX2dyb3VwcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfaW5pdF9jaGFubmVsX2dyb3VwcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTMyIGk7CiAJczMyIHJhdGVfaW5kZXg7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpncm91cDsKIAotCUlXTF9ERUJVR19QT1dFUigiSW5pdGlhbGl6aW5nIGZhY3RvcnkgY2FsaWIgaW5mbyBmcm9tIEVFUFJPTVxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJJbml0aWFsaXppbmcgZmFjdG9yeSBjYWxpYiBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJV0xfTlVNX1RYX0NBTElCX0dST1VQUzsgaSsrKSB7CiAJCXM4ICpjbGlwX3B3cnM7CS8qIHRhYmxlIG9mIHBvd2VyIGxldmVscyBmb3IgZWFjaCByYXRlICovCiAJCXM4IHNhdHVyX3B3cjsJLyogc2F0dXJhdGlvbiBwb3dlciBmb3IgZWFjaCBjaG5sIGdyb3VwICovCi0JCWdyb3VwID0gJnByaXYtPmVlcHJvbS5ncm91cHNbaV07CisJCWdyb3VwID0gJmVlcHJvbS0+Z3JvdXBzW2ldOwogCiAJCS8qIHNhbml0eSBjaGVjayBvbiBmYWN0b3J5IHNhdHVyYXRpb24gcG93ZXIgdmFsdWUgKi8KIAkJaWYgKGdyb3VwLT5zYXR1cmF0aW9uX3Bvd2VyIDwgNDApIHsKLQkJCUlXTF9XQVJOSU5HKCJFcnJvcjogc2F0dXJhdGlvbiBwb3dlciBpcyAlZCwgIgorCQkJSVdMX1dBUk4ocHJpdiwgIkVycm9yOiBzYXR1cmF0aW9uIHBvd2VyIGlzICVkLCAiCiAJCQkJICAgICJsZXNzIHRoYW4gbWluaW11bSBleHBlY3RlZCA0MFxuIiwKIAkJCQkgICAgZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIpOwogCQkJcmV0dXJuOwpAQCAtMjEyMSw3ICsyMTM2LDcgQEAKIAkJICogICBwb3dlciBwZWFrcywgd2l0aG91dCB0b28gbXVjaCBkaXN0b3J0aW9uIChjbGlwcGluZykuCiAJCSAqLwogCQkvKiB3ZSdsbCBmaWxsIGluIHRoaXMgYXJyYXkgd2l0aCBoL3cgbWF4IHBvd2VyIGxldmVscyAqLwotCQljbGlwX3B3cnMgPSAoczggKikgcHJpdi0+Y2xpcF9ncm91cHNbaV0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IChzOCAqKSBwcml2LT5jbGlwMzlfZ3JvdXBzW2ldLmNsaXBfcG93ZXJzOwogCiAJCS8qIGRpdmlkZSBmYWN0b3J5IHNhdHVyYXRpb24gcG93ZXIgYnkgMiB0byBmaW5kIC0zZEIgbGV2ZWwgKi8KIAkJc2F0dXJfcHdyID0gKHM4KSAoZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIgPj4gMSk7CkBAIC0yMTcxLDEwICsyMTg2LDExIEBACiAgKgogICogVGhpcyBkb2VzICpub3QqIHdyaXRlIHZhbHVlcyB0byBOSUMsIGp1c3Qgc2V0cyB1cCBvdXIgaW50ZXJuYWwgdGFibGUuCiAgKi8KLWludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CiAJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvICpwd3JfaW5mbzsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJaW50IGRlbHRhX2luZGV4OwogCXU4IHJhdGVfaW5kZXg7CiAJdTggc2Nhbl90YmxfaW5kZXg7CkBAIC0yMjA0LDE1ICsyMjIwLDE1IEBACiAJCQlpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHByaXYsIGNoX2luZm8pOwogCiAJCS8qIEdldCB0aGlzIGNobmxncnAncyByYXRlLT5tYXgvY2xpcC1wb3dlcnMgdGFibGUgKi8KLQkJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcF9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOworCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwMzlfZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS5jbGlwX3Bvd2VyczsKIAogCQkvKiBjYWxjdWxhdGUgcG93ZXIgaW5kZXggKmFkanVzdG1lbnQqIHZhbHVlIGFjY29yZGluZyB0bwogCQkgKiAgZGlmZiBiZXR3ZWVuIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIGZhY3RvcnkgdGVtcGVyYXR1cmUgKi8KIAkJZGVsdGFfaW5kZXggPSBpd2wzOTQ1X2h3X3JlZ19hZGp1c3RfcG93ZXJfYnlfdGVtcCh0ZW1wZXJhdHVyZSwKLQkJCQlwcml2LT5lZXByb20uZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS4KKwkJCQllZXByb20tPmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCiAJCQkJdGVtcGVyYXR1cmUpOwogCi0JCUlXTF9ERUJVR19QT1dFUigiRGVsdGEgaW5kZXggZm9yIGNoYW5uZWwgJWQ6ICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiRGVsdGEgaW5kZXggZm9yIGNoYW5uZWwgJWQ6ICVkIFslZF1cbiIsCiAJCQkJY2hfaW5mby0+Y2hhbm5lbCwgZGVsdGFfaW5kZXgsIHRlbXBlcmF0dXJlICsKIAkJCQlJV0xfVEVNUF9DT05WRVJUKTsKIApAQCAtMjIzNSw3ICsyMjUxLDcgQEAKIAkJCQkJCQkgY2hfaW5mby0+Z3JvdXBfaW5kZXgsCiAJCQkJCQkJICZwb3dlcl9pZHgpOwogCQkJaWYgKHJjKSB7Ci0JCQkJSVdMX0VSUk9SKCJJbnZhbGlkIHBvd2VyIGluZGV4XG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIHBvd2VyIGluZGV4XG4iKTsKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCQlwd3JfaW5mby0+YmFzZV9wb3dlcl9pbmRleCA9ICh1OCkgcG93ZXJfaWR4OwpAQCAtMjI5NSw3NSArMjMxMSw5MCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX0NPTkZJRygwKSwgMCk7Ci0JcmMgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSF9SU1NSX1NUQVRVUywKLQkJCUZIX1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRSwgMTAwMCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9DT05GSUcoMCksIDApOworCXJjID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSDM5X1JTU1JfU1RBVFVTLAorCQkJRkgzOV9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUsIDEwMDApOwogCWlmIChyYyA8IDApCi0JCUlXTF9FUlJPUigiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKK2ludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKIAotCXN0cnVjdCBpd2wzOTQ1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0OworCXN0cnVjdCBpd2wzOTQ1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5zaGFyZWRfdmlydDsKIAogCXNoYXJlZF9kYXRhLT50eF9iYXNlX3B0clt0eHFfaWRdID0gY3B1X3RvX2xlMzIoKHUzMil0eHEtPnEuZG1hX2FkZHIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfQ0JDQ19DVFJMKHR4cV9pZCksIDApOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfQ0JDQ19CQVNFKHR4cV9pZCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X0NCQ0NfQ1RSTCh0eHFfaWQpLCAwKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9DQkNDX0JBU0UodHhxX2lkKSwgMCk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RDU1JfQ09ORklHKHR4cV9pZCksCi0JCUFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9IT1NUX0lGVEZEIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UQ1NSX0NPTkZJRyh0eHFfaWQpLAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGIHwKKwkJRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogZmFrZSByZWFkIHRvIGZsdXNoIGFsbCBwcmV2LiB3cml0ZXMgKi8KLQlpd2wzOTQ1X3JlYWQzMihwcml2LCBGSF9UU1NSX0NCQl9CQVNFKTsKKwlpd2xfcmVhZDMyKHByaXYsIEZIMzlfVFNTUl9DQkJfQkFTRSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCisvKgorICogSENNRCB1dGlscworICovCitzdGF0aWMgdTE2IGl3bDM5NDVfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCiB7Ci0Jc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQ7CisJc3dpdGNoIChjbWRfaWQpIHsKKwljYXNlIFJFUExZX1JYT046CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpOworCWNhc2UgUE9XRVJfVEFCTEVfQ01EOgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbGVuOworCX0KK30KIAotCXJldHVybiBsZTMyX3RvX2NwdShzaGFyZWRfZGF0YS0+cnhfcmVhZF9wdHJbMF0pOworc3RhdGljIHUxNiBpd2wzOTQ1X2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLCB1OCAqZGF0YSkKK3sKKwl1MTYgc2l6ZSA9ICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQpOworCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOworCXJldHVybiBzaXplOwogfQogCiAvKioKICAqIGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlIC0gSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgcmF0ZSBmYWxsYmFjayB0YWJsZQogICovCi1pbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjLCBpLCBpbmRleCwgcHJldl9pbmRleDsKIAlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHJhdGVfY21kID0gewpAQCAtMjM4NCw3ICsyNDE1LDcgQEAKIAogCXN3aXRjaCAocHJpdi0+YmFuZCkgewogCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJSVdMX0RFQlVHX1JBVEUoIlNlbGVjdCBBIG1vZGUgcmF0ZSBzY2FsZVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZWxlY3QgQSBtb2RlIHJhdGUgc2NhbGVcbiIpOwogCQkvKiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBDQ0sgcmF0ZXMgaXMgdXNlZCwKIAkJICogaGF2ZSBpdCBmYWxsIGJhY2sgdG8gdGhlIDZNIE9GRE0gcmF0ZSAqLwogCQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWF9UQUJMRTsKQEAgLTI0MDIsMTIgKzI0MzMsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCUlXTF9ERUJVR19SQVRFKCJTZWxlY3QgQi9HIG1vZGUgcmF0ZSBzY2FsZVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZWxlY3QgQi9HIG1vZGUgcmF0ZSBzY2FsZVxuIik7CiAJCS8qIElmIGFuIE9GRE0gcmF0ZSBpcyB1c2VkLCBoYXZlIGl0IGZhbGwgYmFjayB0byB0aGUKIAkJICogMU0gQ0NLIHJhdGVzICovCiAKIAkJaWYgKCEocHJpdi0+c3RhX3N1cHBfcmF0ZXMgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSAmJgotCQkgICAgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCSAgICBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCiAJCQlpbmRleCA9IElXTF9GSVJTVF9DQ0tfUkFURTsKIAkJCWZvciAoaSA9IElXTF9SQVRFXzZNX0lOREVYX1RBQkxFOwpAQCAtMjQyOCw0NyArMjQ1OSw1MSBAQAogCiAJLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGNvbnRyb2wgZnJhbWUgVHggKi8KIAlyYXRlX2NtZC50YWJsZV9pZCA9IDA7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAogCQkJICAgICAgJnJhdGVfY21kKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAogCS8qIFVwZGF0ZSB0aGUgcmF0ZSBzY2FsaW5nIGZvciBkYXRhIGZyYW1lIFR4ICovCiAJcmF0ZV9jbWQudGFibGVfaWQgPSAxOwotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAorCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCiAJCQkJJnJhdGVfY21kKTsKIH0KIAogLyogQ2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nIGRyaXZlciAqLwotaW50IGl3bDM5NDVfaHdfc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCW1lbXNldCgodm9pZCAqKSZwcml2LT5od19zZXR0aW5nLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8pKTsKKwltZW1zZXQoKHZvaWQgKikmcHJpdi0+aHdfcGFyYW1zLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9od19wYXJhbXMpKTsKIAotCXByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQgPQorCXByaXYtPnNoYXJlZF92aXJ0ID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKIAkJCQkgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCksCi0JCQkJICZwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzKTsKKwkJCQkgJnByaXYtPnNoYXJlZF9waHlzKTsKIAotCWlmICghcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCkgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKKwlpZiAoIXByaXYtPnNoYXJlZF92aXJ0KSB7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXByaXYtPmh3X3NldHRpbmcucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkU7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcGt0X3NpemUgPSAyMzQyOwotCXByaXYtPmh3X3NldHRpbmcudHhfY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9jbWQpOwotCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKLQlwcml2LT5od19zZXR0aW5nLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnMgPSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQ7Ci0JcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQgPSBJV0wzOTQ1X0JST0FEQ0FTVF9JRDsKKwkvKiBBc3NpZ24gbnVtYmVyIG9mIFVzYWJsZSBUWCBxdWV1ZXMgKi8KKwlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBURkRfUVVFVUVfTUFYOwogCi0JcHJpdi0+aHdfc2V0dGluZy50eF9hbnRfbnVtID0gMjsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdGZkKTsKKwlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkVfM0s7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9wa3Rfc2l6ZSA9IDIzNDI7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfc2l6ZSA9IFJYX1FVRVVFX1NJWkU7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9ucyA9IElXTDM5NDVfU1RBVElPTl9DT1VOVDsKKwlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMMzk0NV9CUk9BRENBU1RfSUQ7CisKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSDM5X1JTQ1NSX0NITkwwX1dQVFI7CisKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3Vuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lLCB1OCByYXRlKQogewogCXN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQ7CkBAIC0yNDc3LDcgKzI1MTIsNyBAQAogCXR4X2JlYWNvbl9jbWQgPSAoc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCAqKSZmcmFtZS0+dTsKIAltZW1zZXQodHhfYmVhY29uX2NtZCwgMCwgc2l6ZW9mKCp0eF9iZWFjb25fY21kKSk7CiAKLQl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXR4X2JlYWNvbl9jbWQtPnR4LnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUocHJpdiwKQEAgLTI1MDEsMzcgKzI1MzYsMjYyIEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kKSArIGZyYW1lX3NpemU7CiB9CiAKLXZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfVFhdID0gaXdsMzk0NV9yeF9yZXBseV90eDsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV8zOTQ1X1JYXSA9IGl3bDM5NDVfcnhfcmVwbHlfcng7CiB9CiAKLXZvaWQgaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnRoZXJtYWxfcGVyaW9kaWMsCiAJCQkgIGl3bDM5NDVfYmdfcmVnX3R4cG93ZXJfcGVyaW9kaWMpOwogfQogCi12b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3ZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+dGhlcm1hbF9wZXJpb2RpYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYmdfY2ZnID0geworLyogY2hlY2sgY29udGVudHMgb2Ygc3BlY2lhbCBib290c3RyYXAgdUNvZGUgU1JBTSAqLworc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9ic20oc3RydWN0IGl3bF9wcml2ICpwcml2KQorIHsKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCXUzMiByZWc7CisJdTMyIHZhbDsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKworCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLworCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKKwlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOworCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKKwkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKKwkJCUlXTF9FUlIocHJpdiwgIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKKwkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKKwkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAorCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKKwkJCQkgIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKKworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFRVBST00gcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ2xlYXIgdGhlIE9XTkVSX01TSywgdG8gZXN0YWJsaXNoIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSBydW5uaW5nIG9uCisgKiBlbWJlZGRlZCBjb250cm9sbGVyKSBhcyBFRVBST00gcmVhZGVyOyBlYWNoIHJlYWQgaXMgYSBzZXJpZXMgb2YgcHVsc2VzCisgKiB0by9mcm9tIHRoZSBFRVBST00gY2hpcCwgbm90IGEgc2luZ2xlIGV2ZW50LCBzbyBldmVuIHJlYWRzIGNvdWxkIGNvbmZsaWN0CisgKiBpZiB0aGV5IHdlcmVuJ3QgYXJiaXRyYXRlZCBieSBzb21lIG93bmVyc2hpcCBtZWNoYW5pc20uICBIZXJlLCB0aGUgZHJpdmVyCisgKiBzaW1wbHkgY2xhaW1zIG93bmVyc2hpcCwgd2hpY2ggc2hvdWxkIGJlIHNhZmUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogKGkuZS4gYmVmb3JlIGxvYWRpbmcgdUNvZGUhKS4KKyAqLworc3RhdGljIGludCBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9HUCwgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0spOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm47Cit9CisKKyAvKioKKyAgKiBpd2wzOTQ1X2xvYWRfYnNtIC0gTG9hZCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zCisgICoKKyAgKiBCU00gb3BlcmF0aW9uOgorICAqCisgICogVGhlIEJvb3RzdHJhcCBTdGF0ZSBNYWNoaW5lIChCU00pIHN0b3JlcyBhIHNob3J0IGJvb3RzdHJhcCB1Q29kZSBwcm9ncmFtCisgICogaW4gc3BlY2lhbCBTUkFNIHRoYXQgZG9lcyBub3QgcG93ZXIgZG93biBkdXJpbmcgUkZLSUxMLiAgV2hlbiBwb3dlcmluZyBiYWNrCisgICogdXAgYWZ0ZXIgcG93ZXItc2F2aW5nIHNsZWVwcyAob3IgZHVyaW5nIGluaXRpYWwgdUNvZGUgbG9hZCksIHRoZSBCU00gbG9hZHMKKyAgKiB0aGUgYm9vdHN0cmFwIHByb2dyYW0gaW50byB0aGUgb24tYm9hcmQgcHJvY2Vzc29yLCBhbmQgc3RhcnRzIGl0LgorICAqCisgICogVGhlIGJvb3RzdHJhcCBwcm9ncmFtIGxvYWRzICh2aWEgRE1BKSBpbnN0cnVjdGlvbnMgYW5kIGRhdGEgZm9yIGEgbmV3CisgICogcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMgaW5kaWNhdGVkIGJ5IHRoZSBob3N0IGRyaXZlciBpbiB0aGUKKyAgKiBCU01fRFJBTV8qIHJlZ2lzdGVycy4gIE9uY2UgdGhlIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCwgaXQgc3RhcnRzCisgICogYXV0b21hdGljYWxseS4KKyAgKgorICAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBwb2ludHMgdGhlIEJTTSB0byB0aGUKKyAgKiAiaW5pdGlhbGl6ZSIgdUNvZGUgaW1hZ2UuICBUaGlzIHVDb2RlIHNldHMgdXAgc29tZSBpbnRlcm5hbCBkYXRhLCB0aGVuCisgICogbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIHRoYXQgaXQgaXMgY29tcGxldGUuCisgICoKKyAgKiBUaGUgaG9zdCB0aGVuIHJlcGxhY2VzIHRoZSBCU01fRFJBTV8qIHBvaW50ZXIgdmFsdWVzIHRvIHBvaW50IHRvIHRoZQorICAqIG5vcm1hbCBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgYSBiYWNrdXAgdUNvZGUgZGF0YSBjYWNoZSBidWZmZXIKKyAgKiAoZmlsbGVkIGluaXRpYWxseSB3aXRoIHN0YXJ0aW5nIGRhdGEgdmFsdWVzIGZvciB0aGUgb24tYm9hcmQgcHJvY2Vzc29yKSwKKyAgKiB0aGVuIHRyaWdnZXJzIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gbG9hZCBhbmQgbGF1bmNoIHRoZSBydW50aW1lIHVDb2RlLAorICAqIHdoaWNoIGJlZ2lucyBub3JtYWwgb3BlcmF0aW9uLgorICAqCisgICogV2hlbiBkb2luZyBhIHBvd2VyLXNhdmUgc2h1dGRvd24sIHJ1bnRpbWUgdUNvZGUgc2F2ZXMgZGF0YSBTUkFNIGludG8KKyAgKiB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW4gRFJBTSBiZWZvcmUgU1JBTSBpcyBwb3dlcmVkIGRvd24uCisgICoKKyAgKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAsIHRoZSBCU00gbG9hZHMgdGhlIGJvb3RzdHJhcCBwcm9ncmFtLiAgVGhpcyByZWxvYWRzCisgICogdGhlIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW50byBTUkFNLAorICAqIGFuZCByZS1sYXVuY2hlcyB0aGUgcnVudGltZSB1Q29kZSBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLgorICAqLworc3RhdGljIGludCBpd2wzOTQ1X2xvYWRfYnNtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCWRtYV9hZGRyX3QgcGluc3Q7CisJZG1hX2FkZHJfdCBwZGF0YTsKKwl1MzIgaW5zdF9sZW47CisJdTMyIGRhdGFfbGVuOworCWludCByYzsKKwlpbnQgaTsKKwl1MzIgZG9uZTsKKwl1MzIgcmVnX29mZnNldDsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCZWdpbiBsb2FkIGJzbVxuIik7CisKKwkvKiBtYWtlIHN1cmUgYm9vdHN0cmFwIHByb2dyYW0gaXMgbm8gbGFyZ2VyIHRoYW4gQlNNJ3MgU1JBTSBzaXplICovCisJaWYgKGxlbiA+IElXTDM5X01BWF9CU01fU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIHRoZSAiSW5pdGlhbGl6ZSIgdUNvZGUKKwkqICAgaW4gaG9zdCBEUkFNIC4uLiBob3N0IERSQU0gcGh5c2ljYWwgYWRkcmVzcyBiaXRzIDMxOjAgZm9yIDM5NDUuCisJKiBOT1RFOiAgaXdsMzk0NV9pbml0aWFsaXplX2FsaXZlX3N0YXJ0KCkgd2lsbCByZXBsYWNlIHRoZXNlIHZhbHVlcywKKwkqICAgICAgICBhZnRlciB0aGUgImluaXRpYWxpemUiIHVDb2RlIGhhcyBydW4sIHRvIHBvaW50IHRvCisJKiAgICAgICAgcnVudGltZS9wcm90b2NvbCBpbnN0cnVjdGlvbnMgYW5kIGJhY2t1cCBkYXRhIGNhY2hlLiAqLworCXBpbnN0ID0gcHJpdi0+dWNvZGVfaW5pdC5wX2FkZHI7CisJcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyOworCWluc3RfbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CisJZGF0YV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOworCisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHLCBkYXRhX2xlbik7CisKKwkvKiBGaWxsIEJTTSBtZW1vcnkgd2l0aCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zICovCisJZm9yIChyZWdfb2Zmc2V0ID0gQlNNX1NSQU1fTE9XRVJfQk9VTkQ7CisJICAgICByZWdfb2Zmc2V0IDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWdfb2Zmc2V0ICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKQorCQlfaXdsX3dyaXRlX3BycGgocHJpdiwgcmVnX29mZnNldCwKKwkJCQkJICBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKKworCXJjID0gaXdsMzk0NV92ZXJpZnlfYnNtKHByaXYpOworCWlmIChyYykgeworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fU1JDX1JFRywgMHgwKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX0RTVF9SRUcsCisJCQkJIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKKworCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKKwkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCisJCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpOworCisJLyogV2FpdCBmb3IgbG9hZCBvZiBib290c3RyYXAgdUNvZGUgdG8gZmluaXNoICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWRvbmUgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRyk7CisJCWlmICghKGRvbmUgJiBCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoaSA8IDEwMCkKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJTTSB3cml0ZSBjb21wbGV0ZSwgcG9sbCAlZCBpdGVyYXRpb25zXG4iLCBpKTsKKwllbHNlIHsKKwkJSVdMX0VSUihwcml2LCAiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRW5hYmxlIGZ1dHVyZSBib290IGxvYWRzIHdoZW5ldmVyIHBvd2VyIG1hbmFnZW1lbnQgdW5pdCB0cmlnZ2VycyBpdAorCSAqICAgKGUuZy4gd2hlbiBwb3dlcmluZyBiYWNrIHVwIGFmdGVyIHBvd2VyLXNhdmUgc2h1dGRvd24pICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAorCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUX0VOKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wzOTQ1X2xpYiA9IHsKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQsCisJLnR4cV9mcmVlX3RmZCA9IGl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdCwKKwkubG9hZF91Y29kZSA9IGl3bDM5NDVfbG9hZF9ic20sCisJLmFwbV9vcHMgPSB7CisJCS5pbml0ID0gaXdsMzk0NV9hcG1faW5pdCwKKwkJLnJlc2V0ID0gaXdsMzk0NV9hcG1fcmVzZXQsCisJCS5zdG9wID0gaXdsMzk0NV9hcG1fc3RvcCwKKwkJLmNvbmZpZyA9IGl3bDM5NDVfbmljX2NvbmZpZywKKwkJLnNldF9wd3Jfc3JjID0gaXdsMzk0NV9zZXRfcHdyX3NyYywKKwl9LAorCS5lZXByb21fb3BzID0geworCQkucmVndWxhdG9yeV9iYW5kcyA9IHsKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMV9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfM19DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNF9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFULAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQsCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2wzOTQ1X2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLnF1ZXJ5X2FkZHIgPSBpd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyLAorCX0sCisJLnNlbmRfdHhfcG93ZXIJPSBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIsCisJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2wzOTQ1X2hjbWRfdXRpbHMgPSB7CisJLmdldF9oY21kX3NpemUgPSBpd2wzOTQ1X2dldF9oY21kX3NpemUsCisJLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsMzk0NV9idWlsZF9hZGRzdGFfaGNtZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2wzOTQ1X29wcyA9IHsKKwkubGliID0gJml3bDM5NDVfbGliLAorCS51dGlscyA9ICZpd2wzOTQ1X2hjbWRfdXRpbHMsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9jZmcgaXdsMzk0NV9iZ19jZmcgPSB7CiAJLm5hbWUgPSAiMzk0NUJHIiwKIAkuZndfbmFtZV9wcmUgPSBJV0wzOTQ1X0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDM5NDVfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDM5NDVfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9HLAorCS5lZXByb21fc2l6ZSA9IElXTDM5NDVfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCisJLm9wcyA9ICZpd2wzOTQ1X29wcywKKwkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYWJnX2NmZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CiAJLm5hbWUgPSAiMzk0NUFCRyIsCiAJLmZ3X25hbWVfcHJlID0gSVdMMzk0NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0wzOTQ1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0wzOTQ1X1VDT0RFX0FQSV9NSU4sCiAJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLmVlcHJvbV9zaXplID0gSVdMMzk0NV9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTiwKKwkub3BzID0gJml3bDM5NDVfb3BzLAorCS5tb2RfcGFyYW1zID0gJml3bDM5NDVfbW9kX3BhcmFtcwogfTsKIAogc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCmluZGV4IDJjMGRkYzUuLmFiN2FhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDMsMTEgKzQzLDEzIEBACiAvKiBIYXJkd2FyZSBzcGVjaWZpYyBmaWxlIGRlZmluZXMgdGhlIFBDSSBJRHMgdGFibGUgZm9yIHRoYXQgaGFyZHdhcmUgbW9kdWxlICovCiBleHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdOwogCi0jZGVmaW5lIERSVl9OQU1FCSJpd2wzOTQ1IgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1maC5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWh3LmgiCi0jaW5jbHVkZSAiaXdsLTM5NDUtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtcG93ZXIuaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCkBAIC03NCw4ICs3Niw3IEBACiAjZGVmaW5lIElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEUgKC0xMjcpCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzIGFjY2Vzc2libGUgZnJvbSBpd2wtKi5jICovCi1leHRlcm4gaW50IGl3bDM5NDVfcGFyYW1faHdjcnlwdG87Ci1leHRlcm4gaW50IGl3bDM5NDVfcGFyYW1fcXVldWVzX251bTsKK2V4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsMzk0NV9tb2RfcGFyYW1zOwogCiBzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiB7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CkBAIC05NSw3ICs5Niw2IEBACiAgKiBlbHNlIFJUUyBmb3IgZGF0YS9tYW5hZ2VtZW50IGZyYW1lcyB3aGVyZSBNUERVIGlzIGxhcmdlcgogICogICB0aGFuIFJUUyB2YWx1ZS4KICAqLwotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkUgICAgICAgICAgIDMwMDBVCiAjZGVmaW5lIERFRkFVTFRfUlRTX1RIUkVTSE9MRCAgICAgMjM0N1UKICNkZWZpbmUgTUlOX1JUU19USFJFU0hPTEQgICAgICAgICAwVQogI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRCAgICAgICAgIDIzNDdVCkBAIC0xMDUsMTM2ICsxMDUsNyBAQAogI2RlZmluZQlERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUIDdVCiAjZGVmaW5lCURFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCAgNFUKIAotc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciB7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLS8qCi0gKiBHZW5lcmljIHF1ZXVlIHN0cnVjdHVyZQotICoKLSAqIENvbnRhaW5zIGNvbW1vbiBkYXRhIGZvciBSeCBhbmQgVHggcXVldWVzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3F1ZXVlIHsKLQlpbnQgbl9iZDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBCRHMgaW4gdGhpcyBxdWV1ZSAqLwotCWludCB3cml0ZV9wdHI7ICAgICAgIC8qIDEtc3QgZW1wdHkgZW50cnkgKGluZGV4KSBob3N0X3cqLwotCWludCByZWFkX3B0cjsgICAgICAgICAvKiBsYXN0IHVzZWQgZW50cnkgKGluZGV4KSBob3N0X3IqLwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7ICAgLyogcGh5c2ljYWwgYWRkciBmb3IgQkQncyAqLwotCWludCBuX3dpbmRvdzsJICAgICAgIC8qIHNhZmUgcXVldWUgd2luZG93ICovCi0JdTMyIGlkOwotCWludCBsb3dfbWFyazsJICAgICAgIC8qIGxvdyB3YXRlcm1hcmssIHJlc3VtZSBxdWV1ZSBpZiBmcmVlCi0JCQkJKiBzcGFjZSBtb3JlIHRoYW4gdGhpcyAqLwotCWludCBoaWdoX21hcms7ICAgICAgICAgLyogaGlnaCB3YXRlcm1hcmssIHN0b3AgcXVldWUgaWYgZnJlZQotCQkJCSogc3BhY2UgbGVzcyB0aGFuIHRoaXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1pbnQgaXdsMzk0NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSk7Ci1pbnQgaXdsMzk0NV94Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSk7Ci0KLSNkZWZpbmUgTUFYX05VTV9PRl9UQlMgICAgICAgICAgKDIwKQotCi0vKiBPbmUgZm9yIGVhY2ggVEZEICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9pbmZvIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiW01BWF9OVU1fT0ZfVEJTXTsKLX07Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgLSBUeCBRdWV1ZSBmb3IgRE1BCi0gKiBAcTogZ2VuZXJpYyBSeC9UeCBxdWV1ZSBkZXNjcmlwdG9yCi0gKiBAYmQ6IGJhc2Ugb2YgY2lyY3VsYXIgYnVmZmVyIG9mIFRGRHMKLSAqIEBjbWQ6IGFycmF5IG9mIGNvbW1hbmQvVHggYnVmZmVycwotICogQGRtYV9hZGRyX2NtZDogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQvdHggYnVmZmVyIGFycmF5Ci0gKiBAdHhiOiBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhCi0gKiBAbmVlZF91cGRhdGU6IGluZGljYXRlcyBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4Ci0gKgotICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKLSAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSB7Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgcTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kOwotCWRtYV9hZGRyX3QgZG1hX2FkZHJfY21kOwotCXN0cnVjdCBpd2wzOTQ1X3R4X2luZm8gKnR4YjsKLQlpbnQgbmVlZF91cGRhdGU7Ci0JaW50IGFjdGl2ZTsKLX07Ci0KLSNkZWZpbmUgSVdMX05VTV9TQ0FOX1JBVEVTICAgICAgICAgKDIpCi0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdkX2luZm8gewotCXU4IHR5cGU7Ci0JczggbWF4X3Bvd2VyOwotfTsKLQotc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2hfaW5mbyB7Ci0JczY0IGxhc3RfcmFkYXJfdGltZTsKLX07Ci0KLS8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgotICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKLSAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCi0gKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50Ci0gKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCi0gKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCi0JczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCi0JczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLwotfTsKLQotLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKLSAqIGNoYW5uZWwuICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KLX07Ci0KLS8qCi0gKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQotICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudAotICogICAgIHdpdGggb25lIGFub3RoZXIhCi0gKi8KLSNkZWZpbmUgSVdMNDk2NV9NQVhfUkFURSAoMzMpCi0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2RfaW5mbyB0Z2Q7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2hfaW5mbyB0Z2g7Ci0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGZhdF9lZXByb207CS8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0IGZvcgotCQkJCQkJICogRkFUIGNoYW5uZWwgKi8KLQotCXU4IGNoYW5uZWw7CSAgLyogY2hhbm5lbCBudW1iZXIgKi8KLQl1OCBmbGFnczsJICAvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KLQlzOCBtYXhfcG93ZXJfYXZnOyAvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBub3JtYWwgVHgsIGFueSByYXRlICovCi0JczggY3Vycl90eHBvdzsJICAvKiAoZEJtKSByZWd1bGF0b3J5L3NwZWN0cnVtL3VzZXIgKG5vdCBoL3cpICovCi0JczggbWluX3Bvd2VyOwkgIC8qIGFsd2F5cyAwICovCi0Jczggc2Nhbl9wb3dlcjsJICAvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBkaXJlY3Qgc2NhbnMsIGFueSByYXRlICovCi0KLQl1OCBncm91cF9pbmRleDsJICAvKiAwLTQsIG1hcHMgY2hhbm5lbCB0byBncm91cDEvMi8zLzQvNSAqLwotCXU4IGJhbmRfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gYmFuZDEvMi8zLzQvNSAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KLQkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKLQkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKLQotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoIHNjYW4gcmF0ZSwgZm9yIGRpcmVjdGVkIHNjYW5zLiAqLwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyBzY2FuX3B3cl9pbmZvW0lXTF9OVU1fU0NBTl9SQVRFU107Ci19OwotCi1zdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIHsKLQkvKiBtYXhpbXVtIHBvd2VyIGxldmVsIHRvIHByZXZlbnQgY2xpcHBpbmcgZm9yIGVhY2ggcmF0ZSwgZGVyaXZlZCBieQotCSAqICAgdXMgZnJvbSB0aGlzIGJhbmQncyBzYXR1cmF0aW9uIHBvd2VyIGluIEVFUFJPTSAqLwotCWNvbnN0IHM4IGNsaXBfcG93ZXJzW0lXTF9NQVhfUkFURVNdOwotfTsKLQotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWFnbi1ycy5oIgogCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMAkwCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMQkxCkBAIC0yNDcsMzMgKzExOCw2IEBACiAvKiBNaW5pbXVtIG51bWJlciBvZiBxdWV1ZXMuIE1BWF9OVU0gaXMgZGVmaW5lZCBpbiBodyBzcGVjaWZpYyBmaWxlcyAqLwogI2RlZmluZSBJV0xfTUlOX05VTV9RVUVVRVMJNAogCi0vKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHN0cnVjdHVyZXMgKi8KLQotc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0JdTggbm9fZHRpbTsKLX07Ci0jZGVmaW5lIElXTF9QT1dFUl9SQU5HRV8wICAoMCkKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzEgICgxKQotCi0jZGVmaW5lIElXTF9QT1dFUl9NT0RFX0NBTQkweDAwCS8qIENvbnRpbnVvdXNseSBBd2FyZSBNb2RlLCBhbHdheXMgb24gKi8KLSNkZWZpbmUgSVdMX1BPV0VSX0lOREVYXzMJMHgwMwotI2RlZmluZSBJV0xfUE9XRVJfSU5ERVhfNQkweDA1Ci0jZGVmaW5lIElXTF9QT1dFUl9BQwkJMHgwNgotI2RlZmluZSBJV0xfUE9XRVJfQkFUVEVSWQkweDA3Ci0jZGVmaW5lIElXTF9QT1dFUl9MSU1JVAkJMHgwNwotI2RlZmluZSBJV0xfUE9XRVJfTUFTSwkJMHgwRgotI2RlZmluZSBJV0xfUE9XRVJfRU5BQkxFRAkweDEwCi0jZGVmaW5lIElXTF9QT1dFUl9MRVZFTCh4KQkoKHgpICYgSVdMX1BPV0VSX01BU0spCi0KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX21nciB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMFtJV0xfUE9XRVJfQUNdOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMVtJV0xfUE9XRVJfQUNdOwotCXU4IGFjdGl2ZV9pbmRleDsKLQl1MzIgZHRpbV92YWw7Ci19OwotCiAjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTiAgICAgICAgICAgICAgMjMwNAogI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOICAgICAgICAgICAgIDMwCiAjZGVmaW5lIElFRUU4MDIxMV9ITEVOICAgICAgICAgICAgICAgICAgKElFRUU4MDIxMV80QUREUl9MRU4pCkBAIC0yODksODEgKzEzMywxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLSNkZWZpbmUgU0VRX1RPX1FVRVVFKHgpICAoKHggPj4gOCkgJiAweGJmKQotI2RlZmluZSBRVUVVRV9UT19TRVEoeCkgICgoeCAmIDB4YmYpIDw8IDgpCi0jZGVmaW5lIFNFUV9UT19JTkRFWCh4KSAoKHU4KSh4ICYgMHhmZikpCi0jZGVmaW5lIElOREVYX1RPX1NFUSh4KSAoKHU4KSh4ICYgMHhmZikpCi0jZGVmaW5lIFNFUV9IVUdFX0ZSQU1FICAoMHg0MDAwKQotI2RlZmluZSBTRVFfUlhfRlJBTUUgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCiAjZGVmaW5lIFNFUV9UT19TTihzZXEpICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCiAjZGVmaW5lIFNOX1RPX1NFUShzc24pICgoKHNzbikgPDwgNCkgJiBJRUVFODAyMTFfU0NUTF9TRVEpCiAjZGVmaW5lIE1BWF9TTiAoKElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKIAotZW51bSB7Ci0JLyogQ01EX1NJWkVfTk9STUFMID0gMCwgKi8KLQlDTURfU0laRV9IVUdFID0gKDEgPDwgMCksCi0JLyogQ01EX1NZTkMgPSAwLCAqLwotCUNNRF9BU1lOQyA9ICgxIDw8IDEpLAotCS8qIENNRF9OT19TS0IgPSAwLCAqLwotCUNNRF9XQU5UX1NLQiA9ICgxIDw8IDIpLAotfTsKLQotc3RydWN0IGl3bDM5NDVfY21kOwotc3RydWN0IGl3bDM5NDVfcHJpdjsKLQotc3RydWN0IGl3bDM5NDVfY21kX21ldGEgewotCXN0cnVjdCBpd2wzOTQ1X2NtZF9tZXRhICpzb3VyY2U7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdTsKLQotCS8qIFRoZSBDTURfU0laRV9IVUdFIGZsYWcgYml0IGluZGljYXRlcyB0aGF0IHRoZSBjb21tYW5kCi0JICogc3RydWN0dXJlIGlzIHN0b3JlZCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFyZWQgcXVldWUgbWVtb3J5LiAqLwotCXUzMiBmbGFnczsKLQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfY21kCi0gKgotICogRm9yIGFsbG9jYXRpb24gb2YgdGhlIGNvbW1hbmQgYW5kIHR4IHF1ZXVlcywgdGhpcyBlc3RhYmxpc2hlcyB0aGUgb3ZlcmFsbAotICogc2l6ZSBvZiB0aGUgbGFyZ2VzdCBjb21tYW5kIHdlIHNlbmQgdG8gdUNvZGUsIGV4Y2VwdCBmb3IgYSBzY2FuIGNvbW1hbmQKLSAqICh3aGljaCBpcyByZWxhdGl2ZWx5IGh1Z2U7IHNwYWNlIGlzIGFsbG9jYXRlZCBzZXBhcmF0ZWx5KS4KLSAqLwotc3RydWN0IGl3bDM5NDVfY21kIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSBtZXRhOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBhZGRzdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkOwotCQl1MzIgZmxhZ3M7Ci0JCXU4IHZhbDg7Ci0JCXUxNiB2YWwxNjsKLQkJdTMyIHZhbDMyOwotCQlzdHJ1Y3QgaXdsMzk0NV9idF9jbWQgYnQ7Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgcnhvbl90aW1lOwotCQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBwb3dlcnRhYmxlOwotCQlzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgcW9zcGFyYW07Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCB0eDsKLQkJc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB0eF9iZWFjb247Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHJ4b25fYXNzb2M7Ci0JCXU4ICppbmRpcmVjdDsKLQkJdTggcGF5bG9hZFszNjBdOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNtZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCB7Ci0JdTggaWQ7Ci0JdTE2IGxlbjsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSBtZXRhOwotCWNvbnN0IHZvaWQgKmRhdGE7Ci19OwotCi0jZGVmaW5lIFRGRF9NQVhfUEFZTE9BRF9TSVpFIChzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAtIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSkpCi0KIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwogICovCkBAIC0zNzQsMzMgKzE0Nyw2IEBACiAjZGVmaW5lIFNVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTICA0CiAjZGVmaW5lIFNVUF9SQVRFXzExR19NQVhfTlVNX0NIQU5ORUxTICAxMgogCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIC0gUnggcXVldWUKLSAqIEBwcm9jZXNzZWQ6IEludGVybmFsIGluZGV4IHRvIGxhc3QgaGFuZGxlZCBSeCBwYWNrZXQKLSAqIEByZWFkOiBTaGFyZWQgaW5kZXggdG8gbmV3ZXN0IGF2YWlsYWJsZSBSeCBidWZmZXIKLSAqIEB3cml0ZTogU2hhcmVkIGluZGV4IHRvIG9sZGVzdCB3cml0dGVuIFJ4IHBhY2tldAotICogQGZyZWVfY291bnQ6IE51bWJlciBvZiBwcmUtYWxsb2NhdGVkIGJ1ZmZlcnMgaW4gcnhfZnJlZQotICogQHJ4X2ZyZWU6IGxpc3Qgb2YgZnJlZSBTS0JzIGZvciB1c2UKLSAqIEByeF91c2VkOiBMaXN0IG9mIFJ4IGJ1ZmZlcnMgd2l0aCBubyBTS0IKLSAqIEBuZWVkX3VwZGF0ZTogZmxhZyB0byBpbmRpY2F0ZSB3ZSBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4Ci0gKgotICogTk9URTogIHJ4X2ZyZWUgYW5kIHJ4X3VzZWQgYXJlIHVzZWQgYXMgYSBGSUZPIGZvciBpd2wzOTQ1X3J4X21lbV9idWZmZXJzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIHsKLQlfX2xlMzIgKmJkOwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciBwb29sW1JYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlNdOwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnF1ZXVlW1JYX1FVRVVFX1NJWkVdOwotCXUzMiBwcm9jZXNzZWQ7Ci0JdTMyIHJlYWQ7Ci0JdTMyIHdyaXRlOwotCXUzMiBmcmVlX2NvdW50OwotCXN0cnVjdCBsaXN0X2hlYWQgcnhfZnJlZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3VzZWQ7Ci0JaW50IG5lZWRfdXBkYXRlOwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KICNkZWZpbmUgSVdMX1NVUFBPUlRFRF9SQVRFU19JRV9MRU4gICAgICAgICA4CiAKICNkZWZpbmUgU0NBTl9JTlRFUlZBTCAxMDAKQEAgLTQzMCw4NyArMTc2LDkgQEAKICNkZWZpbmUgSVdMX0lOVkFMSURfUkFURSAgICAgMHhGRgogI2RlZmluZSBJV0xfSU5WQUxJRF9WQUxVRSAgICAtMQogCi1zdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB7Ci0JdTE2IHNlcV9udW1iZXI7Ci19OwotCi1zdHJ1Y3QgaXdsMzk0NV9od19rZXkgewotCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwotCWludCBrZXlsZW47Ci0JdTgga2V5WzMyXTsKLX07Ci0KLXVuaW9uIGl3bDM5NDVfaHRfcmF0ZV9zdXBwIHsKLQl1MTYgcmF0ZXM7Ci0Jc3RydWN0IHsKLQkJdTggc2lzb19yYXRlOwotCQl1OCBtaW1vX3JhdGU7Ci0JfTsKLX07Ci0KLXVuaW9uIGl3bDM5NDVfcW9zX2NhcGFiaXR5IHsKLQlzdHJ1Y3QgewotCQl1OCBlZGNhX2NvdW50OjQ7CS8qIGJpdCAwLTMgKi8KLQkJdTggcV9hY2s6MTsJCS8qIGJpdCA0ICovCi0JCXU4IHF1ZXVlX3JlcXVlc3Q6MTsJLyogYml0IDUgKi8KLQkJdTggdHhvcF9yZXF1ZXN0OjE7CS8qIGJpdCA2ICovCi0JCXU4IHJlc2VydmVkOjE7CQkvKiBiaXQgNyAqLwotCX0gcV9BUDsKLQlzdHJ1Y3QgewotCQl1OCBhY3ZvX0FQU0Q6MTsJCS8qIGJpdCAwICovCi0JCXU4IGFjdmlfQVBTRDoxOwkJLyogYml0IDEgKi8KLQkJdTggYWNfYmtfQVBTRDoxOwkvKiBiaXQgMiAqLwotCQl1OCBhY19iZV9BUFNEOjE7CS8qIGJpdCAzICovCi0JCXU4IHFfYWNrOjE7CQkvKiBiaXQgNCAqLwotCQl1OCBtYXhfbGVuOjI7CQkvKiBiaXQgNS02ICovCi0JCXU4IG1vcmVfZGF0YV9hY2s6MTsJLyogYml0IDcgKi8KLQl9IHFfU1RBOwotCXU4IHZhbDsKLX07Ci0KLS8qIFFvUyBzdHJ1Y3R1cmVzICovCi1zdHJ1Y3QgaXdsMzk0NV9xb3NfaW5mbyB7Ci0JaW50IHFvc19hY3RpdmU7Ci0JdW5pb24gaXdsMzk0NV9xb3NfY2FwYWJpdHkgcW9zX2NhcDsKLQlzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgZGVmX3Fvc19wYXJtOwotfTsKLQogI2RlZmluZSBTVEFfUFNfU1RBVFVTX1dBS0UgICAgICAgICAgICAgMAogI2RlZmluZSBTVEFfUFNfU1RBVFVTX1NMRUVQICAgICAgICAgICAgMQogCi1zdHJ1Y3QgaXdsMzk0NV9zdGF0aW9uX2VudHJ5IHsKLQlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kIHN0YTsKLQlzdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTggcmF0ZTsKLQkJCXU4IGZsYWdzOwotCQl9IHM7Ci0JCXUxNiByYXRlX25fZmxhZ3M7Ci0JfSBjdXJyZW50X3JhdGU7Ci0JdTggdXNlZDsKLQl1OCBwc19zdGF0dXM7Ci0Jc3RydWN0IGl3bDM5NDVfaHdfa2V5IGtleWluZm87Ci19OwotCi0vKiBvbmUgZm9yIGVhY2ggdUNvZGUgaW1hZ2UgKGluc3QvZGF0YSwgYm9vdC9pbml0L3J1bnRpbWUpICovCi1zdHJ1Y3QgZndfZGVzYyB7Ci0Jdm9pZCAqdl9hZGRyOwkJLyogYWNjZXNzIGJ5IGRyaXZlciAqLwotCWRtYV9hZGRyX3QgcF9hZGRyOwkvKiBhY2Nlc3MgYnkgY2FyZCdzIGJ1c21hc3RlciBETUEgKi8KLQl1MzIgbGVuOwkJLyogYnl0ZXMgKi8KLX07Ci0KLS8qIHVDb2RlIGZpbGUgbGF5b3V0ICovCi1zdHJ1Y3QgaXdsMzk0NV91Y29kZSB7Ci0JX19sZTMyIHZlcjsJCS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KLQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLwotCV9fbGUzMiBpbml0X3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCV9fbGUzMiBib290X3NpemU7CS8qIGJ5dGVzIG9mIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBkYXRhWzBdOwkJLyogZGF0YSBpbiBzYW1lIG9yZGVyIGFzICJzaXplIiBlbGVtZW50cyAqLwotfTsKLQogc3RydWN0IGl3bDM5NDVfaWJzc19zZXEgewogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTE2IHNlcV9udW07CkBAIC01MTksMzQgKzE4Nyw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbwotICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCi0gKiBAdHhfY21kX2xlbjogU2l6ZSBvZiBUeCBjb21tYW5kIChidXQgbm90IGluY2x1ZGluZyBmcmFtZSBpdHNlbGYpCi0gKiBAdHhfYW50X251bTogTnVtYmVyIG9mIFRYIGFudGVubmFzCi0gKiBAbWF4X3J4cV9zaXplOiBNYXggIyBSeCBmcmFtZXMgaW4gUnggcXVldWUgKG11c3QgYmUgcG93ZXItb2YtMikKLSAqIEByeF9idWZfc2l6ZToKLSAqIEBtYXhfcGt0X3NpemU6Ci0gKiBAbWF4X3J4cV9sb2c6IExvZy1iYXNlLTIgb2YgbWF4X3J4cV9zaXplCi0gKiBAbWF4X3N0YXRpb25zOgotICogQGJjYXN0X3N0YV9pZDoKLSAqIEBzaGFyZWRfdmlydDogUG9pbnRlciB0byBkcml2ZXIvdUNvZGUgc2hhcmVkIFR4IEJ5dGUgQ291bnRzIGFuZCBSeCBzdGF0dXMKLSAqIEBzaGFyZWRfcGh5czogUGh5c2ljYWwgUG9pbnRlciB0byBUeCBCeXRlIENvdW50cyBhbmQgUnggc3RhdHVzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2RyaXZlcl9od19pbmZvIHsKLQl1MTYgbWF4X3R4cV9udW07Ci0JdTE2IHR4X2NtZF9sZW47Ci0JdTE2IHR4X2FudF9udW07Ci0JdTE2IG1heF9yeHFfc2l6ZTsKLQl1MzIgcnhfYnVmX3NpemU7Ci0JdTMyIG1heF9wa3Rfc2l6ZTsKLQl1MTYgbWF4X3J4cV9sb2c7Ci0JdTggIG1heF9zdGF0aW9uczsKLQl1OCAgYmNhc3Rfc3RhX2lkOwotCXZvaWQgKnNoYXJlZF92aXJ0OwotCWRtYV9hZGRyX3Qgc2hhcmVkX3BoeXM7Ci19OwotCiAjZGVmaW5lIElXTF9SWF9IRFIoeCkgKChzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKikoXAogCQkgICAgICAgeC0+dS5yeF9mcmFtZS5zdGF0cy5wYXlsb2FkICsgXAogCQkgICAgICAgeC0+dS5yeF9mcmFtZS5zdGF0cy5waHlfY291bnQpKQpAQCAtNTY0LDQwICsyMDQsMzAgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kOwotZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKTsKLWV4dGVybiB1OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCwKK2V4dGVybiB1OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkLAogCQkJICBpbnQgaXNfYXAsIHU4IGZsYWdzKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2VlcHJvbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bDM5NDVfY2FsY19kYl9mcm9tX3JhdGlvKGludCBzaWdfcmF0aW8pOwogZXh0ZXJuIGludCBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwoaW50IHJzc2lfZGJtLCBpbnQgbm9pc2VfZGJtKTsKLWV4dGVybiBpbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEsIGludCBjb3VudCwgdTMyIGlkKTsKK2V4dGVybiBpbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLCBpbnQgY291bnQsIHUzMiBpZCk7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggaWQsIHUxNiBsZW4sCitleHRlcm4gdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGlkLCB1MTYgbGVuLAogCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixpbnQgbGVmdCk7Ci1leHRlcm4gaW50IGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICB1MzIgZGVjcnlwdF9yZXMsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKTsKLWV4dGVybiBjb25zdCB1OCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyW0VUSF9BTEVOXTsKIAogLyoKICAqIEN1cnJlbnRseSB1c2VkIGJ5IGl3bC0zOTQ1LXJzLi4uIGxvb2sgYXQgcmVzdHJ1Y3R1cmluZyBzbyB0aGF0IGl0IGRvZXNuJ3QKICAqIGNhbGwgdGhpcy4uLiB0b2RvLi4uIGZpeCB0aGF0LgogKi8KLWV4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgc3RhX2lkLAorZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKIAkJCSAgIHUxNiB0eF9yYXRlLCB1OCBmbGFncyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYxNiwzNiArMjQ2LDM3IEBACiAgKiBpd2wzOTQ1X21hY18gICAgIDwtLSBtYWM4MDIxMSBjYWxsYmFjawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfc3RvcF9tYXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdm9pZCAqdGZkLAotCQkJCQlkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3J4cV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCQkgICAgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLAorCQkJCQkgICAgdTggcmVzZXQsIHU4IHBhZCk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3J4X3JlYWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKK3ZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgICAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3JlZ19zZXRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzOCBwb3dlcik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfZGlzYWJsZV9ldmVudHMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3JlZ19zZW5kX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCBwb3dlcik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKgogICogaXdsMzk0NV9od19maW5kX3N0YXRpb24gLSBGaW5kIHN0YXRpb24gaWQgZm9yIGEgZ2l2ZW4gQlNTSUQKQEAgLTY1NSwzMDIgKzI4NiwyNiBAQAogICogbm90IHlldCBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGNvbW1vbiBsYXllciBmb3IgbWFuYWdpbmcgdGhlCiAgKiBzdGF0aW9uIHRhYmxlcy4KICAqLwotZXh0ZXJuIHU4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCk7CitleHRlcm4gdTggaXdsMzk0NV9od19maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwogCi1leHRlcm4gaW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOwogCiAvKgogICogRm9yd2FyZCBkZWNsYXJlIGl3bC0zOTQ1LmMgZnVuY3Rpb25zIGZvciBpd2wtYmFzZS5jCiAgKi8KLWV4dGVybiBfX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKK2V4dGVybiBfX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdTggaXdsMzk0NV9zeW5jX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCSB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbygKKwljb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKK2V4dGVybiBpbnQgaXdsMzk0NV9yc19uZXh0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgcmF0ZSk7CiAKLWVudW0gewotCU1FQVNVUkVNRU5UX1JFQURZID0gKDEgPDwgMCksCi0JTUVBU1VSRU1FTlRfQUNUSVZFID0gKDEgPDwgMSksCi19OwotCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAotc3RydWN0IGl3bDM5NDVfcHJpdjsKLQotdm9pZCBpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci12b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1pbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMgSVdMMzlfTUFYX05VTV9RVUVVRVMKLQotc3RydWN0IGl3bDM5NDVfcHJpdiB7Ci0KLQkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWVfY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICppZWVlX3JhdGVzOwotCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZzsgLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLQotCS8qIHRlbXBvcmFyeSBmcmFtZSBzdG9yYWdlIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZnJhbWVzOwotCWludCBmcmFtZXNfY291bnQ7Ci0KLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JaW50IGFsbG9jX3J4Yl9za2I7Ci0KLQl2b2lkICgqcnhfaGFuZGxlcnNbUkVQTFlfTUFYXSkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLQotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCS8qIHNwZWN0cnVtIG1lYXN1cmVtZW50IHJlcG9ydCBjYWNoaW5nICovCi0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwotCXU4IG1lYXN1cmVtZW50X3N0YXR1czsKLSNlbmRpZgotCS8qIHVjb2RlIGJlYWNvbiB0aW1lICovCi0JdTMyIHVjb2RlX2JlYWNvbl90aW1lOwotCi0JLyogd2UgYWxsb2NhdGUgYXJyYXkgb2YgaXdsMzk0NV9jaGFubmVsX2luZm8gZm9yIE5JQydzIHZhbGlkIGNoYW5uZWxzLgotCSAqICAgIEFjY2VzcyB2aWEgY2hhbm5lbCAjIHVzaW5nIGluZGlyZWN0IGluZGV4IGFycmF5ICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaGFubmVsX2luZm87CS8qIGNoYW5uZWwgaW5mbyBhcnJheSAqLwotCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgb2YgY2hhbm5lbHMgKi8KLQotCS8qIGVhY2ggY2FsaWJyYXRpb24gY2hhbm5lbCBncm91cCBpbiB0aGUgRUVQUk9NIGhhcyBhIGRlcml2ZWQKLQkgKiBjbGlwIHNldHRpbmcgZm9yIGVhY2ggcmF0ZS4gKi8KLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIGNsaXBfZ3JvdXBzWzVdOwotCi0JLyogdGhlcm1hbCBjYWxpYnJhdGlvbiAqLwotCXMzMiB0ZW1wZXJhdHVyZTsJLyogZGVncmVlcyBLZWx2aW4gKi8KLQlzMzIgbGFzdF90ZW1wZXJhdHVyZTsKLQotCS8qIFNjYW4gcmVsYXRlZCB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9qaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9zY2FuX2ppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9wYXNzX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydF90c2Y7Ci0JaW50IHNjYW5fYmFuZHM7Ci0JaW50IG9uZV9kaXJlY3Rfc2NhbjsKLQl1OCBkaXJlY3Rfc3NpZF9sZW47Ci0JdTggZGlyZWN0X3NzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kICpzY2FuOwotCi0JLyogc3BpbmxvY2sgKi8KLQlzcGlubG9ja190IGxvY2s7CS8qIHByb3RlY3QgZ2VuZXJhbCBzaGFyZWQgZGF0YSAqLwotCXNwaW5sb2NrX3QgaGNtZF9sb2NrOwkvKiBwcm90ZWN0IGhjbWQgKi8KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0KLQkvKiBiYXNpYyBwY2ktbmV0d29yayBkcml2ZXIgc3R1ZmYgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQotCS8qIHBjaSBoYXJkd2FyZSBhZGRyZXNzIHN1cHBvcnQgKi8KLQl2b2lkIF9faW9tZW0gKmh3X2Jhc2U7Ci0KLQkvKiB1Q29kZSBpbWFnZXMsIHNhdmUgdG8gcmVsb2FkIGluIGNhc2Ugb2YgZmFpbHVyZSAqLwotCXUzMiB1Y29kZV92ZXI7CQkJLyogdWNvZGUgdmVyc2lvbiwgY29weSBvZgotCQkJCQkgICBpd2wzOTQ1X3Vjb2RlLnZlciAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2NvZGU7CS8qIHJ1bnRpbWUgaW5zdCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2RhdGE7CS8qIHJ1bnRpbWUgZGF0YSBvcmlnaW5hbCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2RhdGFfYmFja3VwOwkvKiBydW50aW1lIGRhdGEgc2F2ZS9yZXN0b3JlICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfaW5pdDsJLyogaW5pdGlhbGl6YXRpb24gaW5zdCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2luaXRfZGF0YTsJLyogaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2Jvb3Q7CS8qIGJvb3RzdHJhcCBpbnN0ICovCi0KLQotCXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgcnhvbl90aW1pbmc7Ci0KLQkvKiBXZSBkZWNsYXJlIHRoaXMgY29uc3Qgc28gaXQgY2FuIG9ubHkgYmUKLQkgKiBjaGFuZ2VkIHZpYSBleHBsaWNpdCBjYXN0IHdpdGhpbiB0aGUKLQkgKiByb3V0aW5lcyB0aGF0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgcGh5c2ljYWwKLQkgKiBoYXJkd2FyZSAqLwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIGFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHN0YWdpbmdfcnhvbjsKLQotCWludCBlcnJvcl9yZWNvdmVyaW5nOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHJlY292ZXJ5X3J4b247Ci0KLQkvKiAxc3QgcmVzcG9uc2VzIGZyb20gaW5pdGlhbGl6ZSBhbmQgcnVudGltZSB1Q29kZSBpbWFnZXMuCi0JICogNDk2NSdzIGluaXRpYWxpemUgYWxpdmUgcmVzcG9uc2UgY29udGFpbnMgc29tZSBjYWxpYnJhdGlvbiBkYXRhLiAqLwotCXN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7Ci0Jc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOwotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUkZLSUxMCi0Jc3RydWN0IHJma2lsbCAqcmZraWxsOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCi0Jc3RydWN0IGl3bDM5NDVfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwotCXU4IGxhc3RfYmxpbmtfcmF0ZTsKLQl1OCBhbGxvd19ibGlua2luZzsKLQl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7Ci0JdTY0IGxlZF90cHQ7Ci0jZW5kaWYKLQotCi0JdTE2IGFjdGl2ZV9yYXRlOwotCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKLQotCXUzMiBzdGFfc3VwcF9yYXRlczsKLQotCXU4IGNhbGxfcG9zdF9hc3NvY19mcm9tX2JlYWNvbjsKLQkvKiBSYXRlIHNjYWxpbmcgZGF0YSAqLwotCXM4IGRhdGFfcmV0cnlfbGltaXQ7Ci0JdTggcmV0cnlfcmF0ZTsKLQotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfY29tbWFuZF9xdWV1ZTsKLQotCWludCBhY3Rpdml0eV90aW1lcl9hY3RpdmU7Ci0KLQkvKiBSeCBhbmQgVHggRE1BIHByb2Nlc3NpbmcgcXVldWVzICovCi0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgcnhxOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlIHR4cVtJV0xfTUFYX05VTV9RVUVVRVNdOwotCi0JdW5zaWduZWQgbG9uZyBzdGF0dXM7Ci0KLQlpbnQgbGFzdF9yeF9yc3NpOwkvKiBGcm9tIFJ4IHBhY2tldCBzdGF0aXNpdGljcyAqLwotCWludCBsYXN0X3J4X25vaXNlOwkvKiBGcm9tIGJlYWNvbiBzdGF0aXN0aWNzICovCi0KLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgcG93ZXJfZGF0YTsKLQotCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfc3RhdGlzdGljc190aW1lOwotCi0JLyogY29udGV4dCBpbmZvcm1hdGlvbiAqLwotCXUxNiByYXRlc19tYXNrOwotCi0JdTMyIHBvd2VyX21vZGU7Ci0JdTMyIGFudGVubmE7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXUxNiBydHNfdGhyZXNob2xkOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQotCS8qc3RhdGlvbiB0YWJsZSB2YXJpYWJsZXMgKi8KLQlzcGlubG9ja190IHN0YV9sb2NrOwotCWludCBudW1fc3RhdGlvbnM7Ci0Jc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc1tJV0xfU1RBVElPTl9DT1VOVF07Ci0KLQkvKiBJbmRpY2F0aW9uIGlmIGllZWU4MDIxMV9vcHMtPm9wZW4gaGFzIGJlZW4gY2FsbGVkICovCi0JdTggaXNfb3BlbjsKLQotCXU4IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Ci0KLQkvKiBSeCdkIHBhY2tldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KLQl1MzIgbGFzdF9iZWFjb25fdGltZTsKLQl1NjQgbGFzdF90c2Y7Ci0KLQkvKiBlZXByb20gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gZWVwcm9tOwotCi0JZW51bSBubDgwMjExX2lmdHlwZSBpd19tb2RlOwotCi0Jc3RydWN0IHNrX2J1ZmYgKmlic3NfYmVhY29uOwotCi0JLyogTGFzdCBSeCdkIGJlYWNvbiB0aW1lc3RhbXAgKi8KLQl1MzIgdGltZXN0YW1wMDsKLQl1MzIgdGltZXN0YW1wMTsKLQl1MTYgYmVhY29uX2ludDsKLQlzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbyBod19zZXR0aW5nOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0KLQkvKiBDdXJyZW50IGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25maWd1cmUgdGhlCi0JICogaGFyZHdhcmUgKi8KLQl1MTYgYXNzb2NfaWQ7Ci0JdTE2IGFzc29jX2NhcGFiaWxpdHk7Ci0JdTggcHNfbW9kZTsKLQotCXN0cnVjdCBpd2wzOTQ1X3Fvc19pbmZvIHFvc19kYXRhOwotCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2FsaWJyYXRlZF93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2NvbXBsZXRlZDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfcmVwbGVuaXNoOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZl9raWxsOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhYm9ydF9zY2FuOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cGRhdGVfbGlua19sZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGF1dGhfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVwb3J0X3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3Rfc2NhbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZTsKLQotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKLQotCXN0cnVjdCBkZWxheWVkX3dvcmsgaW5pdF9hbGl2ZV9zdGFydDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGFsaXZlX3N0YXJ0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYWN0aXZpdHlfdGltZXI7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB0aGVybWFsX3BlcmlvZGljOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgZ2F0aGVyX3N0YXRzOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl9jaGVjazsKLQotI2RlZmluZSBJV0xfREVGQVVMVF9UWF9QT1dFUiAweDBGCi0JczggdXNlcl90eHBvd2VyX2xpbWl0OwotCXM4IG1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQ7Ci0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JLyogZGVidWdnaW5nIGluZm8gKi8KLQl1MzIgZnJhbWVjbnRfdG9fdXM7Ci0JYXRvbWljX3QgcmVzdHJpY3RfcmVmY250OwotI2VuZGlmCi19OwkJCQkvKml3bDM5NDVfcHJpdiAqLwotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF92YWxpZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JaWYgKGNoX2luZm8gPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIChjaF9pbmZvLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1ZBTElEKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3JhZGFyKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gKGNoX2luZm8tPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9hX2JhbmQoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQotewotCXJldHVybiBjaF9pbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9iZ19iYW5kKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gY2hfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3Bhc3NpdmUoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaCkKLXsKLQlyZXR1cm4gKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9pYnNzKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2gpCi17Ci0JcmV0dXJuICgoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpID8gMSA6IDA7Ci19Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbygKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X3JzX25leHRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcmF0ZSk7Ci0KLS8qIFJlcXVpcmVzIGZ1bGwgZGVjbGFyYXRpb24gb2YgaXdsMzk0NV9wcml2IGJlZm9yZSBpbmNsdWRpbmcgKi8KLSNpbmNsdWRlICJpd2wtMzk0NS1pby5oIgorLyogUmVxdWlyZXMgZnVsbCBkZWNsYXJhdGlvbiBvZiBpd2xfcHJpdiBiZWZvcmUgaW5jbHVkaW5nICovCisjaW5jbHVkZSAiaXdsLWlvLmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCmluZGV4IDY2NDlmN2IuLmE3MWE0ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2NCArODksNDMgQEAKICNkZWZpbmUgTE9OR19TTE9UX1RJTUUgMjAKIAogLyogUlNTSSB0byBkQm0gKi8KLSNkZWZpbmUgSVdMX1JTU0lfT0ZGU0VUCTQ0Ci0KKyNkZWZpbmUgSVdMNDlfUlNTSV9PRkZTRVQJNDQKIAogCiAvKiBQQ0kgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSV9DRkdfUkVUUllfVElNRU9VVAkweDA0MQotI2RlZmluZSBQQ0lfQ0ZHX1BPV0VSX1NPVVJDRQkweDBDOAotI2RlZmluZSBQQ0lfUkVHX1dVTTgJCTB4MEU4Ci0jZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMCTB4MEYwCiAKIC8qIFBDSSByZWdpc3RlciB2YWx1ZXMgKi8KICNkZWZpbmUgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTgkweDAxCiAjZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTgkweDAyCi0jZGVmaW5lIFBDSV9DRkdfQ01EX1JFR19JTlRfRElTX01TSwkweDA0Ci0jZGVmaW5lIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUICAgICAgICAgKDB4ODAwMDAwMDApCi0KIAogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9SRVRSWSAgMTUKIAotI2RlZmluZSBSWF9RVUVVRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgotI2RlZmluZSBSWF9RVUVVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDI1NQotI2RlZmluZSBSWF9RVUVVRV9TSVpFX0xPRyAgICAgICAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBURkRfVFhfQ01EX1NMT1RTIDI1NgotI2RlZmluZSBURkRfQ01EX1NMT1RTIDMyCi0KLS8qCi0gKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAotI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKLQotLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLwotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfNEsgKDQgKiAxMDI0KQotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfOEsgKDggKiAxMDI0KQogCiAvKiBTaXplcyBhbmQgYWRkcmVzc2VzIGZvciBpbnN0cnVjdGlvbiBhbmQgZGF0YSBtZW1vcnkgKFNSQU0pIGluCiAgKiA0OTY1J3MgZW1iZWRkZWQgcHJvY2Vzc29yLiAgRHJpdmVyIGFjY2VzcyBpcyB2aWEgSEJVU19UQVJHX01FTV8qIHJlZ3MuICovCi0jZGVmaW5lIFJUQ19JTlNUX0xPV0VSX0JPVU5ECQkJKDB4MDAwMDAwKQorI2RlZmluZSBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORAkJKDB4MDAwMDAwKQogI2RlZmluZSBJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORAkJKDB4MDE4MDAwKQogCi0jZGVmaW5lIFJUQ19EQVRBX0xPV0VSX0JPVU5ECQkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQogI2RlZmluZSBJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODBBMDAwKQogCi0jZGVmaW5lIElXTDQ5X1JUQ19JTlNUX1NJWkUgIChJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFJUQ19JTlNUX0xPV0VSX0JPVU5EKQotI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFICAoSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBSVENfREFUQV9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfU0laRSAgKElXTDQ5X1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFICAoSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNDlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQotI2RlZmluZSBJV0xfTUFYX0RBVEFfU0laRSBJV0w0OV9SVENfREFUQV9TSVpFCisjZGVmaW5lIElXTDQ5X01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQorI2RlZmluZSBJV0w0OV9NQVhfREFUQV9TSVpFIElXTDQ5X1JUQ19EQVRBX1NJWkUKIAogLyogU2l6ZSBvZiB1Q29kZSBpbnN0cnVjdGlvbiBtZW1vcnkgaW4gYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUgKi8KLSNkZWZpbmUgSVdMX01BWF9CU01fU0laRSBCU01fU1JBTV9TSVpFCisjZGVmaW5lIElXTDQ5X01BWF9CU01fU0laRSBCU01fU1JBTV9TSVpFCiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKLQlyZXR1cm4gKGFkZHIgPj0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCisJcmV0dXJuIChhZGRyID49IElXTDQ5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgogCSAgICAgICAoYWRkciA8IElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDVhNzJiYzAuLjg0N2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNzYsNyArNzYsNyBAQAogCXUzMiByZWc7CiAJdTMyIHZhbDsKIAotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CiAKIAkvKiB2ZXJpZnkgQlNNIFNSQU0gY29udGVudHMgKi8KIAl2YWwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7CkBAIC04NSw3ICs4NSw3IEBACiAJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKIAkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgogCQkJCSAgImFkZHIgMHglMDhYKyV1IChvZiAldSksIGlzIDB4JXgsIHMvYiAweCV4XG4iLAogCQkJCSAgQlNNX1NSQU1fTE9XRVJfQk9VTkQsCiAJCQkJICByZWcgLSBCU01fU1JBTV9MT1dFUl9CT1VORCwgbGVuLApAQCAtOTQsNyArOTQsNyBAQAogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkJTTSBib290c3RyYXAgdUNvZGUgaW1hZ2UgT0tcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ0LDEyICsxNDQsMTIgQEAKIAl1MzIgcmVnX29mZnNldDsKIAlpbnQgcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIGxvYWQgYnNtXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gbG9hZCBic21cbiIpOwogCiAJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1JUOwogCiAJLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLwotCWlmIChsZW4gPiBJV0xfTUFYX0JTTV9TSVpFKQorCWlmIChsZW4gPiBJV0w0OV9NQVhfQlNNX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCkBAIC0xODYsNyArMTg2LDcgQEAKIAogCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KIAlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLCBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORCk7CiAJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7CiAKIAkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCkBAIC0yMDEsOSArMjAxLDkgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAJaWYgKGkgPCAxMDApCi0JCUlXTF9ERUJVR19JTkZPKCJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CiAJZWxzZSB7Ci0JCUlXTF9FUlJPUigiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNTcsNyArMjU3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIHBvaW50ZXJzIGFyZSBzZXQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc5LDcgKzI3OSw3IEBACiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKGl3bF92ZXJpZnlfdWNvZGUocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7CiAJCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC0yOTksMTEgKzI5OSwxMSBAQAogCS8qIFNlbmQgcG9pbnRlcnMgdG8gcHJvdG9jb2wvcnVudGltZSB1Q29kZSBpbWFnZSAuLi4gaW5pdCBjb2RlIHdpbGwKIAkgKiBsb2FkIGFuZCBsYXVuY2ggcnVudGltZSB1Q29kZSwgd2hpY2ggd2lsbCBzZW5kIHVzIGFub3RoZXIgIkFsaXZlIgogCSAqIG5vdGlmaWNhdGlvbi4gKi8KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAlpZiAoaXdsNDk2NV9zZXRfdWNvZGVfcHRycyhwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd29uJ3QgaGFwcGVuOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvdWxkbid0IHNldCB1cCB1Q29kZSBwb2ludGVycy5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXJldHVybjsKQEAgLTM1NCw3ICszNTQsNyBAQAogCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzgxLDI3ICszODEsMjAgQEAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgdmFsOwogCXUxNiByYWRpb19jZmc7Ci0JdTE2IGxpbms7CisJdTE2IGxjdGw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKChwcml2LT5yZXZfaWQgJiAweDgwKSA9PSAweDgwICYmIChwcml2LT5yZXZfaWQgJiAweDdmKSA8IDgpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9SRUdfV1VNOCwgJnZhbCk7Ci0JCS8qIEVuYWJsZSBObyBTbm9vcCBmaWVsZCAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9SRUdfV1VNOCwKLQkJCQkgICAgICAgdmFsICYgfigxIDw8IDExKSk7Ci0JfQorCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DRkdfTElOS19DVFJMLCAmbGluayk7Ci0KLQkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KLQlpZiAoKGxpbmsgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKLQkJLyogZGlzYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkvKiBIVyBidWcgVy9BIC0gbmVnbGlnaWJsZSBwb3dlciBjb25zdW1wdGlvbiAqLworCS8qIEwxLUFTUE0gaXMgZW5hYmxlZCBieSBCSU9TICovCisJaWYgKChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pCisJCS8qIEwxLUFTUE0gZW5hYmxlZDogZGlzYWJsZSBMMFMgICovCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HSU9fUkVHLCBDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOwogCWVsc2UKLQkJLyogTDBTIGVuYWJsZWQgTDFBIGRpc2FibGVkICovCisJCS8qIEwxLUFTUE0gZGlzYWJsZWQ6IGVuYWJsZSBMMFMgKi8KIAkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAogCXJhZGlvX2NmZyA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fUkFESU9fQ09ORklHKTsKQEAgLTQzNyw3ICs0MzAsNyBAQAogCQkJQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfSU5GTygic3RvcCBtYXN0ZXJcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJzdG9wIG1hc3RlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMyw5ICs1MTYsMTAgQEAKIAkJY21kLmRpZmZfZ2Fpbl9jID0gMDsKIAkJaWYgKGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKIAkJCQkgc2l6ZW9mKGNtZCksICZjbWQpKQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7Ci0JCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CiAJfQogfQogCkBAIC01NTcsNyArNTUxLDcgQEAKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9IDA7CiAJCX0KIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJkZWx0YV9nYWluX2NvZGVzOiBhICVkIGIgJWQgYyAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImRlbHRhX2dhaW5fY29kZXM6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVswXSwKIAkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV0sCiAJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKQEAgLTU3NSw3ICs1NjksNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCiAJCQkJICAgICAgc2l6ZW9mKGNtZCksICZjbWQpOwogCQlpZiAocmV0KQotCQkJSVdMX0RFQlVHX0NBTElCKCJmYWlsIHNlbmRpbmcgY21kICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiZmFpbCBzZW5kaW5nIGNtZCAiCiAJCQkJICAgICAiUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCBcbiIpOwogCiAJCS8qIFRPRE8gd2UgbWlnaHQgd2FudCByZWNhbGN1bGF0ZQpAQCAtNjY4LDcgKzY2Miw3IEBACiAKIAl0eHEtPnNjaGVkX3JldHJ5ID0gc2NkX3JldHJ5OwogCi0JSVdMX0RFQlVHX0lORk8oIiVzICVzIFF1ZXVlICVkIG9uIEFDICVkXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKIAkJICAgICAgIGFjdGl2ZSA/ICJBY3RpdmF0ZSIgOiAiRGVhY3RpdmF0ZSIsCiAJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKIH0KQEAgLTgwNCw4ICs3OTgsOSBAQAogCiAJaWYgKChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPiBJV0w0OV9OVU1fUVVFVUVTKSB8fAogCSAgICAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewotCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTDQ5X05VTV9RVUVVRVMpOworCQlJV0xfRVJSKHByaXYsCisJCQkiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCQlJV0xfTUlOX05VTV9RVUVVRVMsIElXTDQ5X05VTV9RVUVVRVMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTgxMyw2ICs4MDgsNyBAQAogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDQ5X1RDU1JfQ0hOTF9OVU07CiAJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQogCQkJSVdMNDlfTlVNX1FVRVVFUyAqIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w0OTY1X1NUQVRJT05fQ09VTlQ7CiAJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDQ5NjVfQlJPQURDQVNUX0lEOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNDlfUlRDX0RBVEFfU0laRTsKQEAgLTgyMCw2ICs4MTYsOCBAQAogCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSBCU01fU1JBTV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5mYXRfY2hhbm5lbCA9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAorCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKIAlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IDI7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwogCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQSB8IEFOVF9COwpAQCAtOTAyLDcgKzkwMCw2IEBACiAJICAgIGNoYW5uZWwgPD0gQ0FMSUJfSVdMX1RYX0FUVEVOX0dSNF9MQ0gpCiAJCXJldHVybiBDQUxJQl9DSF9HUk9VUF80OwogCi0JSVdMX0VSUk9SKCJDYW4ndCBmaW5kIHR4YXR0ZW4gZ3JvdXAgZm9yIGNoYW5uZWwgJWQuXG4iLCBjaGFubmVsKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTk1Niw3ICs5NTMsNyBAQAogCiAJcyA9IGl3bDQ5NjVfZ2V0X3N1Yl9iYW5kKHByaXYsIGNoYW5uZWwpOwogCWlmIChzID49IEVFUFJPTV9UWF9QT1dFUl9CQU5EUykgewotCQlJV0xfRVJST1IoIlR4IFBvd2VyIGNhbiBub3QgZmluZCBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKKwkJSVdMX0VSUihwcml2LCAiVHggUG93ZXIgY2FuIG5vdCBmaW5kIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC05NjQsNyArOTYxLDcgQEAKIAljaF9pMiA9IHByaXYtPmNhbGliX2luZm8tPmJhbmRfaW5mb1tzXS5jaDIuY2hfbnVtOwogCWNoYW5faW5mby0+Y2hfbnVtID0gKHU4KSBjaGFubmVsOwogCi0JSVdMX0RFQlVHX1RYUE9XRVIoImNoYW5uZWwgJWQgc3ViYmFuZCAlZCBmYWN0b3J5IGNhbCBjaCAlZCAmICVkXG4iLAorCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFubmVsICVkIHN1YmJhbmQgJWQgZmFjdG9yeSBjYWwgY2ggJWQgJiAlZFxuIiwKIAkJCSAgY2hhbm5lbCwgcywgY2hfaTEsIGNoX2kyKTsKIAogCWZvciAoYyA9IDA7IGMgPCBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TOyBjKyspIHsKQEAgLTk5NCwxOSArOTkxLDE5IEBACiAJCQkJCQkJICAgbTEtPnBhX2RldCwgY2hfaTIsCiAJCQkJCQkJICAgbTItPnBhX2RldCk7CiAKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkIEFQMT0lZCBBUDI9JWQgQVA9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT5hY3R1YWxfcG93LCBtMi0+YWN0dWFsX3Bvdywgb21lYXMtPmFjdHVhbF9wb3cpOwotCQkJSVdMX0RFQlVHX1RYUE9XRVIKLQkJCSAgICAoImNoYWluICVkIG1lYXMgJWQgTkkxPSVkIE5JMj0lZCBOST0lZFxuIiwgYywgbSwKLQkJCSAgICAgbTEtPmdhaW5faWR4LCBtMi0+Z2Fpbl9pZHgsIG9tZWFzLT5nYWluX2lkeCk7Ci0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCBQQTE9JWQgUEEyPSVkIFBBPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+cGFfZGV0LCBtMi0+cGFfZGV0LCBvbWVhcy0+cGFfZGV0KTsKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkICBUMT0lZCAgVDI9JWQgIFQ9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT50ZW1wZXJhdHVyZSwgbTItPnRlbXBlcmF0dXJlLAotCQkJICAgICBvbWVhcy0+dGVtcGVyYXR1cmUpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBBUDE9JWQgQVAyPSVkIEFQPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5hY3R1YWxfcG93LCBtMi0+YWN0dWFsX3Bvdywgb21lYXMtPmFjdHVhbF9wb3cpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBOSTE9JWQgTkkyPSVkIE5JPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5nYWluX2lkeCwgbTItPmdhaW5faWR4LCBvbWVhcy0+Z2Fpbl9pZHgpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBQQTE9JWQgUEEyPSVkIFBBPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5wYV9kZXQsIG0yLT5wYV9kZXQsIG9tZWFzLT5wYV9kZXQpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCAgVDE9JWQgIFQyPSVkICBUPSVkXG4iLCBjLCBtLAorCQkJCW0xLT50ZW1wZXJhdHVyZSwgbTItPnRlbXBlcmF0dXJlLAorCQkJCW9tZWFzLT50ZW1wZXJhdHVyZSk7CiAJCX0KIAl9CiAKQEAgLTEzMDMsMTIgKzEzMDAsMTIgQEAKIAlzMzIgZmFjdG9yeV9hY3R1YWxfcHdyWzJdOwogCXMzMiBwb3dlcl9pbmRleDsKIAotCS8qIHVzZXJfdHhwb3dlcl9saW1pdCBpcyBpbiBkQm0sIGNvbnZlcnQgdG8gaGFsZi1kQm0gKGhhbGYtZEIgdW5pdHMKKwkvKiB0eF9wb3dlcl91c2VyX2xtdCBpcyBpbiBkQm0sIGNvbnZlcnQgdG8gaGFsZi1kQm0gKGhhbGYtZEIgdW5pdHMKIAkgKiAgIGFyZSB1c2VkIGZvciBpbmRleGluZyBpbnRvIHR4cG93ZXIgdGFibGUpICovCiAJdXNlcl90YXJnZXRfcG93ZXIgPSAyICogcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQ7CiAKIAkvKiBHZXQgY3VycmVudCAoUlhPTikgY2hhbm5lbCwgYmFuZCwgd2lkdGggKi8KLQlJV0xfREVCVUdfVFhQT1dFUigiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKIAkJCSAgaXNfZmF0KTsKIAogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKQEAgLTEzMTksMTAgKzEzMTYsMTMgQEAKIAkvKiBnZXQgdHhhdHRlbiBncm91cCwgdXNlZCB0byBzZWxlY3QgMSkgdGhlcm1hbCB0eHBvd2VyIGFkanVzdG1lbnQKIAkgKiAgIGFuZCAyKSBtaW1vIHR4cG93ZXIgYmFsYW5jZSBiZXR3ZWVuIFR4IGNoYWlucy4gKi8KIAl0eGF0dGVuX2dycCA9IGl3bDQ5NjVfZ2V0X3R4X2F0dGVuX2dycChjaGFubmVsKTsKLQlpZiAodHhhdHRlbl9ncnAgPCAwKQorCWlmICh0eGF0dGVuX2dycCA8IDApIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuJ3QgZmluZCB0eGF0dGVuIGdyb3VwIGZvciBjaGFubmVsICVkLlxuIiwKKwkJCSAgY2hhbm5lbCk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFubmVsICVkIGJlbG9uZ3MgdG8gdHhhdHRlbiBncm91cCAlZFxuIiwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHR4YXR0ZW5fZ3JwKTsKIAogCWlmIChpc19mYXQpIHsKQEAgLTEzNzIsNyArMTM3Miw3IEBACiAJdm9sdGFnZV9jb21wZW5zYXRpb24gPQogCSAgICBpd2w0OTY1X2dldF92b2x0YWdlX2NvbXBlbnNhdGlvbih2b2x0YWdlLCBpbml0X3ZvbHRhZ2UpOwogCi0JSVdMX0RFQlVHX1RYUE9XRVIoImN1cnIgdm9sdCAlZCBlZXByb20gdm9sdCAlZCB2b2x0IGNvbXAgJWRcbiIsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImN1cnIgdm9sdCAlZCBlZXByb20gdm9sdCAlZCB2b2x0IGNvbXAgJWRcbiIsCiAJCQkgIGluaXRfdm9sdGFnZSwKIAkJCSAgdm9sdGFnZSwgdm9sdGFnZV9jb21wZW5zYXRpb24pOwogCkBAIC0xNDAzLDEzICsxNDAzLDEzIEBACiAJCWZhY3RvcnlfZ2Fpbl9pbmRleFtjXSA9IG1lYXN1cmVtZW50LT5nYWluX2lkeDsKIAkJZmFjdG9yeV9hY3R1YWxfcHdyW2NdID0gbWVhc3VyZW1lbnQtPmFjdHVhbF9wb3c7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImNoYWluID0gJWRcbiIsIGMpOwotCQlJV0xfREVCVUdfVFhQT1dFUigiZmN0cnkgdG1wICVkLCAiCisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFpbiA9ICVkXG4iLCBjKTsKKwkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImZjdHJ5IHRtcCAlZCwgIgogCQkJCSAgImN1cnIgdG1wICVkLCBjb21wICVkIHN0ZXBzXG4iLAogCQkJCSAgZmFjdG9yeV90ZW1wLCBjdXJyZW50X3RlbXAsCiAJCQkJICB0ZW1wZXJhdHVyZV9jb21wW2NdKTsKIAotCQlJV0xfREVCVUdfVFhQT1dFUigiZmN0cnkgaWR4ICVkLCBmY3RyeSBwd3IgJWRcbiIsCisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJmY3RyeSBpZHggJWQsIGZjdHJ5IHB3ciAlZFxuIiwKIAkJCQkgIGZhY3RvcnlfZ2Fpbl9pbmRleFtjXSwKIAkJCQkgIGZhY3RvcnlfYWN0dWFsX3B3cltjXSk7CiAJfQpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAKIAkJaWYgKHRhcmdldF9wb3dlciA+IHBvd2VyX2xpbWl0KQogCQkJdGFyZ2V0X3Bvd2VyID0gcG93ZXJfbGltaXQ7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoInJhdGUgJWQgc2F0ICVkIHJlZyAlZCB1c3IgJWQgdGd0ICVkXG4iLAorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAicmF0ZSAlZCBzYXQgJWQgcmVnICVkIHVzciAlZCB0Z3QgJWRcbiIsCiAJCQkJICBpLCBzYXR1cmF0aW9uX3Bvd2VyIC0gYmFja19vZmZfdGFibGVbaV0sCiAJCQkJICBjdXJyZW50X3JlZ3VsYXRvcnksIHVzZXJfdGFyZ2V0X3Bvd2VyLAogCQkJCSAgdGFyZ2V0X3Bvd2VyKTsKQEAgLTE0NjYsNyArMTQ2Niw3IEBACiAJCQkJCSAgICB2b2x0YWdlX2NvbXBlbnNhdGlvbiArCiAJCQkJCSAgICBhdHRlbl92YWx1ZSk7CiAKLS8qCQkJSVdMX0RFQlVHX1RYUE9XRVIoImNhbGN1bGF0ZWQgdHhwb3dlciBpbmRleCAlZFxuIiwKKy8qCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNhbGN1bGF0ZWQgdHhwb3dlciBpbmRleCAlZFxuIiwKIAkJCQkJCXBvd2VyX2luZGV4KTsgKi8KIAogCQkJaWYgKHBvd2VyX2luZGV4IDwgZ2V0X21pbl9wb3dlcl9pbmRleChpLCBiYW5kKSkKQEAgLTE0ODMsMTIgKzE0ODMsMTIgQEAKIAogCQkJLyogc3RheSB3aXRoaW4gdGhlIHRhYmxlISAqLwogCQkJaWYgKHBvd2VyX2luZGV4ID4gMTA3KSB7Ci0JCQkJSVdMX1dBUk5JTkcoInR4cG93ZXIgaW5kZXggJWQgPiAxMDdcbiIsCisJCQkJSVdMX1dBUk4ocHJpdiwgInR4cG93ZXIgaW5kZXggJWQgPiAxMDdcbiIsCiAJCQkJCSAgICBwb3dlcl9pbmRleCk7CiAJCQkJcG93ZXJfaW5kZXggPSAxMDc7CiAJCQl9CiAJCQlpZiAocG93ZXJfaW5kZXggPCAwKSB7Ci0JCQkJSVdMX1dBUk5JTkcoInR4cG93ZXIgaW5kZXggJWQgPCAwXG4iLAorCQkJCUlXTF9XQVJOKHByaXYsICJ0eHBvd2VyIGluZGV4ICVkIDwgMFxuIiwKIAkJCQkJICAgIHBvd2VyX2luZGV4KTsKIAkJCQlwb3dlcl9pbmRleCA9IDA7CiAJCQl9CkBAIC0xNDk5LDcgKzE0OTksNyBAQAogCQkJdHhfcG93ZXIucy5kc3BfcHJlZGlzX2F0dGVuW2NdID0KIAkJCQlnYWluX3RhYmxlW2JhbmRdW3Bvd2VyX2luZGV4XS5kc3A7CiAKLQkJCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFpbiAlZCBtaW1vICVkIGluZGV4ICVkICIKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFpbiAlZCBtaW1vICVkIGluZGV4ICVkICIKIAkJCQkJICAiZ2FpbiAweCUwMnggZHNwICVkXG4iLAogCQkJCQkgIGMsIGF0dGVuX3ZhbHVlLCBwb3dlcl9pbmRleCwKIAkJCQkJdHhfcG93ZXIucy5yYWRpb190eF9nYWluW2NdLApAQCAtMTUzMSw3ICsxNTMxLDcgQEAKIAkJLyogSWYgdGhpcyBnZXRzIGhpdCBhIGxvdCwgc3dpdGNoIGl0IHRvIGEgQlVHKCkgYW5kIGNhdGNoCiAJCSAqIHRoZSBzdGFjayB0cmFjZSB0byBmaW5kIG91dCB3aG8gaXMgY2FsbGluZyB0aGlzIGR1cmluZwogCQkgKiBhIHNjYW4uICovCi0JCUlXTF9XQVJOSU5HKCJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlRYIFBvd2VyIHJlcXVlc3RlZCB3aGlsZSBzY2FubmluZyFcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAJICAgICByeG9uMi0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKIAkgICAgKHJ4b24xLT5yeF9jaGFpbiA9PSByeG9uMi0+cnhfY2hhaW4pICYmCiAJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjMxLDcgKzE2MzEsNyBAQAogCXJjID0gaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHByaXYsIGJhbmQsIGNoYW5uZWwsIGlzX2ZhdCwKIAkJCQkgICAgICBjdHJsX2NoYW5faGlnaCwgJmNtZC50eF9wb3dlcik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9ERUJVR18xMUgoImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CisJCUlXTF9ERUJVR18xMUgocHJpdiwgImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpICYmCiAJCShwcml2LT5zdGF0aXN0aWNzLmZsYWcgJiBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0spKSB7Ci0JCUlXTF9ERUJVR19URU1QKCJSdW5uaW5nIEZBVCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIEZBVCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMV0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzFdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1sxXSk7CiAJCVI0ID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3I0WzFdKTsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfVEVNUCgiUnVubmluZyB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIHRlbXBlcmF0dXJlIGNhbGlicmF0aW9uXG4iKTsKIAkJUjEgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMVswXSk7CiAJCVIyID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjJbMF0pOwogCQlSMyA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IzWzBdKTsKQEAgLTE3MjIsMTAgKzE3MjIsMTAgQEAKIAkJdnQgPSBzaWduX2V4dGVuZCgKIAkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSksIDIzKTsKIAotCUlXTF9ERUJVR19URU1QKCJDYWxpYiB2YWx1ZXMgUlsxLTNdOiAlZCAlZCAlZCBSNDogJWRcbiIsIFIxLCBSMiwgUjMsIHZ0KTsKKwlJV0xfREVCVUdfVEVNUChwcml2LCAiQ2FsaWIgdmFsdWVzIFJbMS0zXTogJWQgJWQgJWQgUjQ6ICVkXG4iLCBSMSwgUjIsIFIzLCB2dCk7CiAKIAlpZiAoUjMgPT0gUjEpIHsKLQkJSVdMX0VSUk9SKCJDYWxpYnJhdGlvbiBjb25mbGljdCBSMSA9PSBSM1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNhbGlicmF0aW9uIGNvbmZsaWN0IFIxID09IFIzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTczNSw3ICsxNzM1LDcgQEAKIAl0ZW1wZXJhdHVyZSAvPSAoUjMgLSBSMSk7CiAJdGVtcGVyYXR1cmUgPSAodGVtcGVyYXR1cmUgKiA5NykgLyAxMDAgKyBURU1QRVJBVFVSRV9DQUxJQl9LRUxWSU5fT0ZGU0VUOwogCi0JSVdMX0RFQlVHX1RFTVAoIkNhbGlicmF0ZWQgdGVtcGVyYXR1cmU6ICVkSywgJWRDXG4iLAorCUlXTF9ERUJVR19URU1QKHByaXYsICJDYWxpYnJhdGVkIHRlbXBlcmF0dXJlOiAlZEssICVkQ1xuIiwKIAkJCXRlbXBlcmF0dXJlLCBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wZXJhdHVyZSkpOwogCiAJcmV0dXJuIHRlbXBlcmF0dXJlOwpAQCAtMTc1OCw3ICsxNzU4LDcgQEAKIAlpbnQgdGVtcF9kaWZmOwogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlIG5vdCB1cGRhdGVkIC0tIG5vIHN0YXRpc3RpY3MuXG4iKTsKKwkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlRlbXBlcmF0dXJlIG5vdCB1cGRhdGVkIC0tIG5vIHN0YXRpc3RpY3MuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzY2LDE5ICsxNzY2LDE5IEBACiAKIAkvKiBnZXQgYWJzb2x1dGUgdmFsdWUgKi8KIAlpZiAodGVtcF9kaWZmIDwgMCkgewotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOwogCQl0ZW1wX2RpZmYgPSAtdGVtcF9kaWZmOwogCX0gZWxzZSBpZiAodGVtcF9kaWZmID09IDApCi0JCUlXTF9ERUJVR19QT1dFUigiU2FtZSB0ZW1wLCBcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNhbWUgdGVtcCwgXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19QT1dFUigiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLCBcbiIsIHRlbXBfZGlmZik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLCBcbiIsIHRlbXBfZGlmZik7CiAKIAlpZiAodGVtcF9kaWZmIDwgSVdMX1RFTVBFUkFUVVJFX1RIUkVTSE9MRCkgewotCQlJV0xfREVCVUdfUE9XRVIoIlRoZXJtYWwgdHhwb3dlciBjYWxpYiBub3QgbmVlZGVkXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbm90IG5lZWRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5lZWRlZFxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbmVlZGVkXG4iKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTc5MywxMiArMTc5MywxMiBAQAogCiAJaWYgKHByaXYtPnRlbXBlcmF0dXJlICE9IHRlbXApIHsKIAkJaWYgKHByaXYtPnRlbXBlcmF0dXJlKQotCQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlIGNoYW5nZWQgIgorCQkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlRlbXBlcmF0dXJlIGNoYW5nZWQgIgogCQkJCSAgICAgICAiZnJvbSAlZEMgdG8gJWRDXG4iLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyhwcml2LT50ZW1wZXJhdHVyZSksCiAJCQkJICAgICAgIEtFTFZJTl9UT19DRUxTSVVTKHRlbXApKTsKIAkJZWxzZQotCQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlICIKKwkJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSAiCiAJCQkJICAgICAgICJpbml0aWFsaXplZCB0byAlZENcbiIsCiAJCQkJICAgICAgIEtFTFZJTl9UT19DRUxTSVVTKHRlbXApKTsKIAl9CkBAIC0xODM3LDcgKzE4MzcsOCBAQAogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTA4LDcgKzE5MDksOCBAQAogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTg2LDggKzE5ODgsOCBAQAogCWFkZHN0YS0+YWRkX2ltbWVkaWF0ZV9iYV90aWQgPSBjbWQtPmFkZF9pbW1lZGlhdGVfYmFfdGlkOwogCWFkZHN0YS0+cmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQgPSBjbWQtPnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkOwogCWFkZHN0YS0+YWRkX2ltbWVkaWF0ZV9iYV9zc24gPSBjbWQtPmFkZF9pbW1lZGlhdGVfYmFfc3NuOwotCWFkZHN0YS0+cmVzZXJ2ZWQxID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKLQlhZGRzdGEtPnJlc2VydmVkMiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7CisJYWRkc3RhLT5yZXNlcnZlZDEgPSBjcHVfdG9fbGUxNigwKTsKKwlhZGRzdGEtPnJlc2VydmVkMiA9IGNwdV90b19sZTMyKDApOwogCiAJcmV0dXJuICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQpOwogfQpAQCAtMjAxMyw3ICsyMDE1LDcgQEAKIAlpbnQgaSwgc2gsIGlkeDsKIAl1MTYgc2VxOwogCWlmIChhZ2ctPndhaXRfZm9yX2JhKQotCQlJV0xfREVCVUdfVFhfUkVQTFkoImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJnb3QgdHggcmVzcG9uc2Ugdy9vIGJsb2NrLWFja1xuIik7CiAKIAlhZ2ctPmZyYW1lX2NvdW50ID0gdHhfcmVzcC0+ZnJhbWVfY291bnQ7CiAJYWdnLT5zdGFydF9pZHggPSBzdGFydF9pZHg7CkBAIC0yMDI3LDcgKzIwMjksNyBAQAogCQlpZHggPSBzdGFydF9pZHg7CiAKIAkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiAqLwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCiAJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsIGlkeCk7CiAKIAkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKTsKQEAgLTIwMzgsOSArMjA0MCw5IEBACiAJCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCByYXRlX25fZmxhZ3MsIGluZm8pOwogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0yMDYwLDIxICsyMDYyLDIxIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAotCQkJCQkgIGlkeCwgU0VRX1RPX1NOKHNjKSwKLQkJCQkJICBoZHItPnNlcV9jdHJsKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCisJCQkJCSIgaWR4PSVkLCBzZXFfaWR4PSVkLCBzZXE9JWRcbiIsCisJCQkJCWlkeCwgU0VRX1RPX1NOKHNjKSwgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0yMDkyLDEzICsyMDk0LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0yMTI5LDcgKzIxMzEsNyBAQAogCXU4ICpxYyA9IE5VTEw7CiAKIAlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQoJnR4cS0+cSwgaW5kZXgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWRcbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHR4cS0+cS5uX2JkLCB0eHEtPnEud3JpdGVfcHRyLAogCQkJICB0eHEtPnEucmVhZF9wdHIpOwpAQCAtMjE0Nyw3ICsyMTQ5LDcgQEAKIAogCXN0YV9pZCA9IGl3bF9nZXRfcmFfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHR4cS0+c2NoZWRfcmV0cnkgJiYgdW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKSB7Ci0JCUlXTF9FUlJPUigiU3RhdGlvbiBub3Qga25vd25cbiIpOworCQlJV0xfRVJSKHByaXYsICJTdGF0aW9uIG5vdCBrbm93blxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNjcsNyArMjE2OSw3IEBACiAKIAkJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoc2NkX3NzbiAmIDB4ZmYpKSB7CiAJCQlpbmRleCA9IGl3bF9xdWV1ZV9kZWNfd3JhcChzY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gc2NkX3NzbiAiCiAJCQkJCSAgICIlZCBpbmRleCAlZFxuIiwgc2NkX3NzbiAsIGluZGV4KTsKIAkJCWZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CkBAIC0yMTc2LDEwICsyMTc4LDkgQEAKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgogCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpIHsKIAkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKLQkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJCQkJZWxzZQotCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywKLQkJCQkJCQkgICAgIHR4cS0+c3dxX2lkKTsKKwkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTIxOTAsNyArMjE5MSw3IEBACiAJCQkJCWxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCiAJCQkJCWluZm8pOwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSAiCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSAiCiAJCQkJICAgInJhdGVfbl9mbGFncyAweCV4IHJldHJpZXMgJWRcbiIsCiAJCQkJICAgdHhxX2lkLAogCQkJCSAgIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oc3RhdHVzKSwgc3RhdHVzLApAQCAtMjIwMywxNCArMjIwNCwxNCBAQAogCiAJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSkKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOworCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxX2lkKTsKIAl9CiAKIAlpZiAocWMgJiYgbGlrZWx5KHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bDQ5NjVfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyMzgsMTMgKzIyMzksMTMgQEAKIAkJaWYgKHZhbGlkX2FudGVubmFlICYgKDEgPDwgaSkpCiAJCQltYXhfcnNzaSA9IG1heChuY3BoeS0+cnNzaV9pbmZvW2kgPDwgMV0sIG1heF9yc3NpKTsKIAotCUlXTF9ERUJVR19TVEFUUygiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAogCQluY3BoeS0+cnNzaV9pbmZvWzBdLCBuY3BoeS0+cnNzaV9pbmZvWzJdLCBuY3BoeS0+cnNzaV9pbmZvWzRdLAogCQltYXhfcnNzaSwgYWdjKTsKIAogCS8qIGRCbSA9IG1heF9yc3NpIGRCIC0gYWdjIGRCIC0gY29uc3RhbnQuCiAJICogSGlnaGVyIEFHQyAoaGlnaGVyIHJhZGlvIGdhaW4pIG1lYW5zIGxvd2VyIHNpZ25hbC4gKi8KLQlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKIApAQCAtMjI4Nyw2ICsyMjg4LDkgQEAKIAkudHhxX3NldF9zY2hlZCA9IGl3bDQ5NjVfdHhxX3NldF9zY2hlZCwKIAkudHhxX2FnZ19lbmFibGUgPSBpd2w0OTY1X3R4cV9hZ2dfZW5hYmxlLAogCS50eHFfYWdnX2Rpc2FibGUgPSBpd2w0OTY1X3R4cV9hZ2dfZGlzYWJsZSwKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKKwkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bDQ5NjVfcnhfaGFuZGxlcl9zZXR1cCwKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bDQ5NjVfc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuY2FuY2VsX2RlZmVycmVkX3dvcmsgPSBpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCmluZGV4IDgyYzM4NTkuLjE1Y2FjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OCwxMCArNjgsMTYgQEAKICNpZm5kZWYgX19pd2xfNTAwMF9od19oX18KICNkZWZpbmUgX19pd2xfNTAwMF9od19oX18KIAorI2RlZmluZSBJV0w1MF9SVENfSU5TVF9MT1dFUl9CT1VORAkJKDB4MDAwMDAwKQogI2RlZmluZSBJV0w1MF9SVENfSU5TVF9VUFBFUl9CT1VORAkJKDB4MDIwMDAwKQorCisjZGVmaW5lIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5ECQkoMHg4MDAwMDApCiAjZGVmaW5lIElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5ECQkoMHg4MEMwMDApCi0jZGVmaW5lIElXTDUwX1JUQ19JTlNUX1NJWkUgKElXTDUwX1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gUlRDX0lOU1RfTE9XRVJfQk9VTkQpCi0jZGVmaW5lIElXTDUwX1JUQ19EQVRBX1NJWkUgKElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpCisKKyNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfU0laRSAoSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNTBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDUwX1JUQ19EQVRBX1NJWkUgKElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKQogCiAvKiBFRVBST00gKi8KICNkZWZpbmUgSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFCQkJMjA0OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDY2ZDA1M2QuLmU1Y2EyNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQzLDEwICs0MywxMSBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC01MDAwLWh3LmgiCisjaW5jbHVkZSAiaXdsLTYwMDAtaHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgSVdMNTAwMF9VQ09ERV9BUElfTUFYIDEKLSNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDEKKyNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDIKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NSU4gMQpAQCAtODQsNyArODUsNyBAQAogCQkJCSAgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfSU5GTygic3RvcCBtYXN0ZXJcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJzdG9wIG1hc3RlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOCw3ICsxMDksOCBAQAogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0hBUF9XQUtFX0wxQSk7CiAKLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CisJaWYgKHByaXYtPmNmZy0+bmVlZF9wbGxfY2ZnKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CiAKIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCiAJICogRDBVKiAtLT4gRDBBKiBzdGF0ZSAqLwpAQCAtMTE4LDcgKzEyMCw3IEBACiAJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE3Niw3ICsxNzgsOCBAQAogCiAJLyogRklYTUU6IHB1dCBoZXJlIEwxQSAtTDBTIHcvYSAqLwogCi0JaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOworCWlmIChwcml2LT5jZmctPm5lZWRfcGxsX2NmZykKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOwogCiAJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlcgogCSAqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KQEAgLTE4Niw3ICsxODksNyBAQAogCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjE2LDE4ICsyMTksMTkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiByYWRpb19jZmc7Ci0JdTE2IGxpbms7CisJdTE2IGxjdGw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZsaW5rKTsKKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CiAKLQkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KLQlpZiAoKGxpbmsgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKLQkJLyogZGlzYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkvKiBIVyBidWcgVy9BICovCisJLyogTDEtQVNQTSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KKwlpZiAoKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKKwkJLyogTDEtQVBTTSBlbmFibGVkOiBkaXNhYmxlIEwwUyAgKi8KIAkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAJZWxzZQotCQkvKiBMMFMgZW5hYmxlZCBMMUEgZGlzYWJsZWQgKi8KKwkJLyogTDEtQVNQTSBkaXNhYmxlZDogZW5hYmxlIEwwUyAqLwogCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HSU9fUkVHLCBDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOwogCiAJcmFkaW9fY2ZnID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9SQURJT19DT05GSUcpOwpAQCAtMjg5LDcgKzI5Myw3IEBACiAJCW9mZnNldCA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNTAwMF9MSU5LX09USEVSUyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiaWxsZWdhbCBpbmRpcmVjdCB0eXBlOiAweCVYXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbGxlZ2FsIGluZGlyZWN0IHR5cGU6IDB4JVhcbiIsCiAJCWFkZHJlc3MgJiBJTkRJUkVDVF9UWVBFX01TSyk7CiAJCWJyZWFrOwogCX0KQEAgLTMzOCw3ICszNDIsNyBAQAogCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldIHw9ICgxIDw8IDIpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiRGVsdGEgZ2FpbnM6IEFOVF9CID0gJWQgIEFOVF9DID0gJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJEZWx0YSBnYWluczogQU5UX0IgPSAlZCAgQU5UX0MgPSAlZFxuIiwKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVsxXSwgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKIAogCWlmICghZGF0YS0+cmFkaW9fd3JpdGUpIHsKQEAgLTM4NCwxMyArMzg4LDE0IEBACiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKIAkJCQkJc2l6ZW9mKGNtZCksICZjbWQpOwogCQlpZiAocmV0KQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7Ci0JCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCit2b2lkIGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCV9fbGUzMiAqdHhfZmxhZ3MpCiB7CiAJaWYgKChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB8fApAQCAtNTA3LDcgKzUxMiw3IEBACiAJCWluZGV4ID0gSVdMX0NBTElCX0JBU0VfQkFORDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbmtub3duIGNhbGlicmF0aW9uIG5vdGlmaWNhdGlvbiAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiVW5rbm93biBjYWxpYnJhdGlvbiBub3RpZmljYXRpb24gJWRcbiIsCiAJCQkgIGhkci0+b3BfY29kZSk7CiAJCXJldHVybjsKIAl9CkBAIC01MTcsNyArNTIyLDcgQEAKIHN0YXRpYyB2b2lkIGl3bDUwMDBfcnhfY2FsaWJfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCUlXTF9ERUJVR19JTkZPKCJJbml0LiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQsIHJlc3RhcnRpbmcgZncuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdC4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkLCByZXN0YXJ0aW5nIGZ3LlxuIik7CiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKIH0KIApAQCAtNTgwLDQwICs1ODUsNDEgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHByaXYsIGluc3RfaW1hZ2UsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlyZXQgPSBpd2w1MDAwX2xvYWRfc2VjdGlvbihwcml2LCBpbnN0X2ltYWdlLAorCQkJCSAgIElXTDUwX1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIklOU1QgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJTlNUIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCiAJCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwogCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCiAJCQkidG8gaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvblxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAogCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlID0gMDsKIAogCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKAotCQlwcml2LCBkYXRhX2ltYWdlLCBSVENfREFUQV9MT1dFUl9CT1VORCk7CisJCXByaXYsIGRhdGFfaW1hZ2UsIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJEQVRBIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKIAkJCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSwgNSAqIEhaKTsKIAlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgogCQkJInRvIGludGVycnVwdFxuIik7CiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmICghcmV0KSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBEQVRBIHVDb2RlIHNlY3Rpb25cbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9IGVsc2UKIAkJcmV0ID0gMDsKQEAgLTYyOSwyMCArNjM1LDIwIEBACiAKIAkvKiBjaGVjayB3aGV0aGVyIGluaXQgdWNvZGUgc2hvdWxkIGJlIGxvYWRlZCwgb3IgcmF0aGVyIHJ1bnRpbWUgdWNvZGUgKi8KIAlpZiAocHJpdi0+dWNvZGVfaW5pdC5sZW4gJiYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfTk9ORSkpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgZm91bmQuIExvYWRpbmcgaW5pdCB1Y29kZS4uLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGZvdW5kLiBMb2FkaW5nIGluaXQgdWNvZGUuLi5cbiIpOwogCQlyZXQgPSBpd2w1MDAwX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKIAkJCSZwcml2LT51Y29kZV9pbml0LCAmcHJpdi0+dWNvZGVfaW5pdF9kYXRhKTsKIAkJaWYgKCFyZXQpIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKIAkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9JTklUOwogCQl9CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgbm90IGZvdW5kLCBvciBhbHJlYWR5IGxvYWRlZC4gIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCiAJCQkiTG9hZGluZyBydW50aW1lIHVjb2RlLi4uXG4iKTsKIAkJcmV0ID0gaXdsNTAwMF9sb2FkX2dpdmVuX3Vjb2RlKHByaXYsCiAJCQkmcHJpdi0+dWNvZGVfY29kZSwgJnByaXYtPnVjb2RlX2RhdGEpOwogCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwogCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1JUOwogCQl9CiAJfQpAQCAtNjU4LDcgKzY2NCw3IEBACiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNjY4LDE0ICs2NzQsMTUgQEAKIAlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbjogJWRcbiIsIHJldCk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTcxMCw3ICs3MTcsNyBAQAogCiAJdHhxLT5zY2hlZF9yZXRyeSA9IHNjZF9yZXRyeTsKIAotCUlXTF9ERUJVR19JTkZPKCIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJXMgJXMgUXVldWUgJWQgb24gQUMgJWRcbiIsCiAJCSAgICAgICBhY3RpdmUgPyAiQWN0aXZhdGUiIDogIkRlYWN0aXZhdGUiLAogCQkgICAgICAgc2NkX3JldHJ5ID8gIkJBIiA6ICJBQyIsIHR4cV9pZCwgdHhfZmlmb19pZCk7CiB9CkBAIC04MjQsOCArODMxLDkgQEAKIHsKIAlpZiAoKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+IElXTDUwX05VTV9RVUVVRVMpIHx8CiAJICAgIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7Ci0JCUlXTF9FUlJPUigiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCi0JCQkgIElXTF9NSU5fTlVNX1FVRVVFUywgSVdMNTBfTlVNX1FVRVVFUyk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMNTBfTlVNX1FVRVVFUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODMzLDYzICs4NDEsNDcgQEAKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg1MF9UQ1NSX0NITkxfTlVNOwogCXByaXYtPmh3X3BhcmFtcy5zY2RfYmNfdGJsc19zaXplID0KIAkJCUlXTDUwX05VTV9RVUVVRVMgKiBzaXplb2Yoc3RydWN0IGl3bDUwMDBfc2NkX2JjX3RibCk7CisJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKIAlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNTAwMF9TVEFUSU9OX0NPVU5UOwogCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w1MDAwX0JST0FEQ0FTVF9JRDsKLQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDUwX1JUQ19EQVRBX1NJWkU7Ci0JcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w1MF9SVENfSU5TVF9TSVpFOworCisJc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7CisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNngwMDoKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDUwOgorCQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDYwX1JUQ19EQVRBX1NJWkU7CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNjBfUlRDX0lOU1RfU0laRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w1MF9SVENfREFUQV9TSVpFOworCQlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDUwX1JUQ19JTlNUX1NJWkU7CisJfQorCiAJcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSA9IDA7CiAJcHJpdi0+aHdfcGFyYW1zLmZhdF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOworCiAJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNTAwMF9zZW5zaXRpdml0eTsKIAotCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6Ci0JCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0I7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUI7Ci0JCWJyZWFrOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxNTA6Ci0JCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0E7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUI7Ci0JCWJyZWFrOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAzOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDM7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQUJDOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gQU5UX0FCQzsKLQkJYnJlYWs7Ci0JfQorCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7CisJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKKwlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQ7CisJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfcnhfYW50OwogCiAJc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6Ci0JCS8qIDVYMDAgYW5kIDUzNTAgd2FudHMgaW4gQ2Vsc2l1cyAqLwotCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKLQkJYnJlYWs7CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTE1MDoKIAkJLyogNTE1MCB3YW50cyBpbiBLZWx2aW4gKi8KIAkJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0KIAkJCQlpd2w1MTUwX2dldF9jdF90aHJlc2hvbGQocHJpdik7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGFsbCBvdGhlcnMgd2FudCBDZWxzaXVzICovCisJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOworCQlicmVhazsKIAl9CiAKIAkvKiBTZXQgaW5pdGlhbCBjYWxpYnJhdGlvbiBzZXQgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLmNhbGliX2luaXRfY2ZnID0KLQkJCUJJVChJV0xfQ0FMSUJfWFRBTCkJCXwKLQkJCUJJVChJV0xfQ0FMSUJfTE8pCQl8Ci0JCQlCSVQoSVdMX0NBTElCX1RYX0lRKSAJCXwKLQkJCUJJVChJV0xfQ0FMSUJfVFhfSVFfUEVSRCkJfAotCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOwotCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9EQykJCXwKQEAgLTg5OCw2ICs4OTAsMTQgQEAKIAkJCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKIAogCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAorCQkJQklUKElXTF9DQUxJQl9MTykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8CisJCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisJCWJyZWFrOwogCX0KIAogCkBAIC0xMDExLDcgKzEwMTEsOCBAQAogCiAJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDUwX05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDc2LDcgKzEwNzcsOCBAQAogCiAJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX0VSUihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDQsNyArMTEwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCit1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCiB7CiAJdTE2IHNpemUgPSAodTE2KXNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpOwogCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOwpAQCAtMTE0Miw3ICsxMTQ0LDcgQEAKIAl1MTYgc2VxOwogCiAJaWYgKGFnZy0+d2FpdF9mb3JfYmEpCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKIAogCWFnZy0+ZnJhbWVfY291bnQgPSB0eF9yZXNwLT5mcmFtZV9jb3VudDsKIAlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeDsKQEAgLTExNTYsNyArMTE1OCw3IEBACiAJCWlkeCA9IHN0YXJ0X2lkeDsKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uICovCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOwpAQCAtMTE2OCw5ICsxMTcwLDkgQEAKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0xMTkwLDIxICsxMTkyLDIyIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKKwkJCQkJIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKIAkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCiAJCQkJCSAgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0xMjIyLDEzICsxMjI1LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0xMjU0LDcgKzEyNTcsNyBAQAogCWludCBmcmVlZDsKIAogCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0xMjgxLDcgKzEyODQsNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gIgorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSAiCiAJCQkJCSJzY2Rfc3NuPSVkIGlkeD0lZCB0eHE9JWQgc3dxPSVkXG4iLAogCQkJCQlzY2Rfc3NuICwgaW5kZXgsIHR4cV9pZCwgdHhxLT5zd3FfaWQpOwogCkBAIC0xMjkyLDEwICsxMjk1LDkgQEAKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgogCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpIHsKIAkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKLQkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJCQkJZWxzZQotCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywKLQkJCQkJCQkgICAgIHR4cS0+c3dxX2lkKTsKKwkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTEzMDgsNyArMTMxMCw3IEBACiAJCQkJCWxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCiAJCQkJCWluZm8pOwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSByYXRlX25fZmxhZ3MgIgorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRYUSAlZCBzdGF0dXMgJXMgKDB4JTA4eCkgcmF0ZV9uX2ZsYWdzICIKIAkJCQkgICAiMHgleCByZXRyaWVzICVkXG4iLAogCQkJCSAgIHR4cV9pZCwKIAkJCQkgICBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKHN0YXR1cyksIHN0YXR1cywKQEAgLTEzMjEsMTggKzEzMjMsMTggQEAKIAogCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgdHhxX2lkKTsKKwkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJfQogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3Fvcyh0eF9yZXNwLT5mcmFtZV9jdHJsKSkKIAkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiAvKiBDdXJyZW50bHkgNTAwMCBpcyB0aGUgc3VwZXJzZXQgb2YgZXZlcnl0aGluZyAqLwotc3RhdGljIHUxNiBpd2w1MDAwX2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQordTE2IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCiB7CiAJcmV0dXJuIGxlbjsKIH0KQEAgLTEzNTYsNyArMTM1OCw3IEBACiAKIHN0YXRpYyBpbnQgaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQogewotCXJldHVybiAoYWRkciA+PSBSVENfREFUQV9MT1dFUl9CT1VORCkgJiYKKwlyZXR1cm4gKGFkZHIgPj0gSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCiAJCShhZGRyIDwgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQpOwogfQogCkBAIC0xMzc5LDcgKzEzODEsNyBAQAogCSAgICAocnhvbjEtPmFjcXVpc2l0aW9uX2RhdGEgPT0gcnhvbjItPmFjcXVpc2l0aW9uX2RhdGEpICYmCiAJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQwOSwxMiArMTQxMSwxOSBAQAogc3RhdGljIGludCAgaXdsNTAwMF9zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsNTAwMF90eF9wb3dlcl9kYm1fY21kIHR4X3Bvd2VyX2NtZDsKKwl1OCB0eF9hbnRfY2ZnX2NtZDsKIAogCS8qIGhhbGYgZEJtIG5lZWQgdG8gbXVsdGlwbHkgKi8KIAl0eF9wb3dlcl9jbWQuZ2xvYmFsX2xtdCA9IChzOCkoMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIAl0eF9wb3dlcl9jbWQuZmxhZ3MgPSBJV0w1MF9UWF9QT1dFUl9OT19DTE9TRUQ7CiAJdHhfcG93ZXJfY21kLnNydl9jaGFuX2xtdCA9IElXTDUwX1RYX1BPV0VSX0FVVE87Ci0JcmV0dXJuICBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1RYX1BPV0VSX0RCTV9DTUQsCisKKwlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID09IDEpCisJCXR4X2FudF9jZmdfY21kID0gUkVQTFlfVFhfUE9XRVJfREJNX0NNRF9WMTsKKwllbHNlCisJCXR4X2FudF9jZmdfY21kID0gUkVQTFlfVFhfUE9XRVJfREJNX0NNRDsKKworCXJldHVybiAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCB0eF9hbnRfY2ZnX2NtZCwKIAkJCQkgICAgICAgc2l6ZW9mKHR4X3Bvd2VyX2NtZCksICZ0eF9wb3dlcl9jbWQsCiAJCQkJICAgICAgIE5VTEwpOwogfQpAQCAtMTQyNiw3ICsxNDM1LDcgQEAKIH0KIAogLyogQ2FsYyBtYXggc2lnbmFsIGxldmVsIChkQm0pIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzICovCi1zdGF0aWMgaW50IGl3bDUwMDBfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK2ludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCkKIHsKIAkvKiBkYXRhIGZyb20gUEhZL0RTUCByZWdhcmRpbmcgc2lnbmFsIHN0cmVuZ3RoLCBldGMuLApAQCAtMTQ1NSwxOSArMTQ2NCwxOSBAQAogCW1heF9yc3NpID0gbWF4X3QodTMyLCByc3NpX2EsIHJzc2lfYik7CiAJbWF4X3Jzc2kgPSBtYXhfdCh1MzIsIG1heF9yc3NpLCByc3NpX2MpOwogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCiAJCXJzc2lfYSwgcnNzaV9iLCByc3NpX2MsIG1heF9yc3NpLCBhZ2MpOwogCiAJLyogZEJtID0gbWF4X3Jzc2kgZEIgLSBhZ2MgZEIgLSBjb25zdGFudC4KIAkgKiBIaWdoZXIgQUdDIChoaWdoZXIgcmFkaW8gZ2FpbikgbWVhbnMgbG93ZXIgc2lnbmFsLiAqLwotCXJldHVybiBtYXhfcnNzaSAtIGFnYyAtIElXTF9SU1NJX09GRlNFVDsKKwlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0w0OV9SU1NJX09GRlNFVDsKIH0KIAotc3RhdGljIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsNTAwMF9oY21kID0geworc3RydWN0IGl3bF9oY21kX29wcyBpd2w1MDAwX2hjbWQgPSB7CiAJLnJ4b25fYXNzb2MgPSBpd2w1MDAwX3NlbmRfcnhvbl9hc3NvYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlscyA9IHsKK3N0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNTAwMF9oY21kX3V0aWxzID0gewogCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCiAJLmdhaW5fY29tcHV0YXRpb24gPSBpd2w1MDAwX2dhaW5fY29tcHV0YXRpb24sCkBAIC0xNDc2LDEzICsxNDg1LDE2IEBACiAJLmNhbGNfcnNzaSA9IGl3bDUwMDBfY2FsY19yc3NpLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKK3N0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAogCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAogCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCiAJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLApAQCAtMTUxNywxMyArMTUyOSwxMyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CitzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wcyA9IHsKIAkubGliID0gJml3bDUwMDBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKIAkudXRpbHMgPSAmaXdsNTAwMF9oY21kX3V0aWxzLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zID0geworc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDUwX21vZF9wYXJhbXMgPSB7CiAJLm51bV9vZl9xdWV1ZXMgPSBJV0w1MF9OVU1fUVVFVUVTLAogCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMNTBfTlVNX0FNUERVX1FVRVVFUywKIAkuYW1zZHVfc2l6ZV84SyA9IDEsCkBAIC0xNTQzLDYgKzE1NTUsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2JnX2NmZyA9IHsKQEAgLTE1NTYsNiArMTU3MSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZyA9IHsKQEAgLTE1NjksNiArMTU4Nyw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWduX2NmZyA9IHsKQEAgLTE1ODIsNiArMTYwMyw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZyA9IHsKQEAgLTE1OTUsNiArMTYxOSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZyA9IHsKQEAgLTE2MDgsNiArMTYzNSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0EsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0w1MDAwX01PRFVMRV9GSVJNV0FSRShJV0w1MDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29yZS5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmgKaW5kZXggNmY0NjM1NS4uOTAxODU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01OCw0NyArNTgsMjQgQEAKICAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9kZXZfaF9fCi0jZGVmaW5lIF9faXdsXzM5NDVfZGV2X2hfXwotCi0jZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKLQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwgIC5kZXZpY2UgPSAoZGV2KSwgXAotCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELCAuc3ViZGV2aWNlID0gKHN1YmRldiksIFwKLQkuZHJpdmVyX2RhdGEgPSAoa2VybmVsX3Vsb25nX3QpJihjZmcpCi0KLSNkZWZpbmUgSVdMX1NLVV9HICAgICAgIDB4MQotI2RlZmluZSBJV0xfU0tVX0EgICAgICAgMHgyCi0KLS8qKgotICogc3RydWN0IGl3bF8zOTQ1X2NmZwotICogQGZ3X25hbWVfcHJlOiBGaXJtd2FyZSBmaWxlbmFtZSBwcmVmaXguIFRoZSBhcGkgdmVyc2lvbiBhbmQgZXh0ZW5zaW9uCi0gKiAJKC51Y29kZSkgd2lsbCBiZSBhZGRlZCB0byBmaWxlbmFtZSBiZWZvcmUgbG9hZGluZyBmcm9tIGRpc2suIFRoZQotICogCWZpbGVuYW1lIGlzIGNvbnN0cnVjdGVkIGFzIGZ3X25hbWVfcHJlPGFwaT4udWNvZGUuCi0gKiBAdWNvZGVfYXBpX21heDogSGlnaGVzdCB2ZXJzaW9uIG9mIHVDb2RlIEFQSSBzdXBwb3J0ZWQgYnkgZHJpdmVyLgotICogQHVjb2RlX2FwaV9taW46IExvd2VzdCB2ZXJzaW9uIG9mIHVDb2RlIEFQSSBzdXBwb3J0ZWQgYnkgZHJpdmVyLgotICoKLSAqIFdlIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd3J0IEFQSSB2ZXJzaW9uLiBUaGUKLSAqIGRyaXZlciBzcGVjaWZpZXMgd2hpY2ggQVBJcyBpdCBzdXBwb3J0cyAod2l0aCBAdWNvZGVfYXBpX21heCBiZWluZyB0aGUKLSAqIGhpZ2hlc3QgYW5kIEB1Y29kZV9hcGlfbWluIHRoZSBsb3dlc3QpLiBGaXJtd2FyZSB3aWxsIG9ubHkgYmUgbG9hZGVkIGlmCi0gKiBpdCBoYXMgYSBzdXBwb3J0ZWQgQVBJIHZlcnNpb24uIFRoZSBmaXJtd2FyZSdzIEFQSSB2ZXJzaW9uIHdpbGwgYmUKLSAqIHN0b3JlZCBpbiBAaXdsX3ByaXYsIGVuYWJsaW5nIHRoZSBkcml2ZXIgdG8gbWFrZSBydW50aW1lIGNoYW5nZXMgYmFzZWQKLSAqIG9uIGZpcm13YXJlIHZlcnNpb24gdXNlZC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwKLSAqIGlmIChJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlcikgPj0gMikgewotICogCURyaXZlciBpbnRlcmFjdHMgd2l0aCBGaXJtd2FyZSBBUEkgdmVyc2lvbiA+PSAyLgotICogfSBlbHNlIHsKLSAqIAlEcml2ZXIgaW50ZXJhY3RzIHdpdGggRmlybXdhcmUgQVBJIHZlcnNpb24gMS4KLSAqIH0KKy8qCisgKiBQbGVhc2UgdXNlIHRoaXMgZmlsZSAoaXdsLTYwMDAtaHcuaCkgb25seSBmb3IgaGFyZHdhcmUtcmVsYXRlZCBkZWZpbml0aW9ucy4KKyAqIFVzZSBpd2wtNTAwMC1jb21tYW5kcy5oIGZvciB1Q29kZSBBUEkgZGVmaW5pdGlvbnMuCiAgKi8KLXN0cnVjdCBpd2xfMzk0NV9jZmcgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3QgY2hhciAqZndfbmFtZV9wcmU7Ci0JY29uc3QgdW5zaWduZWQgaW50IHVjb2RlX2FwaV9tYXg7Ci0JY29uc3QgdW5zaWduZWQgaW50IHVjb2RlX2FwaV9taW47Ci0JdW5zaWduZWQgaW50IHNrdTsKLX07CiAKLSNlbmRpZiAvKiBfX2l3bF9kZXZfaF9fICovCisjaWZuZGVmIF9faXdsXzYwMDBfaHdfaF9fCisjZGVmaW5lIF9faXdsXzYwMDBfaHdfaF9fCisKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfTE9XRVJfQk9VTkQJCSgweDAwMDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfVVBQRVJfQk9VTkQJCSgweDA0MDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgxNDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfU0laRSBcCisJKElXTDYwX1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gSVdMNjBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX1NJWkUgXAorCShJV0w2MF9SVENfREFUQV9VUFBFUl9CT1VORCAtIElXTDYwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKQorCisjZW5kaWYgLyogX19pd2xfNjAwMF9od19oX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmE1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKyNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgorCisvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggMgorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggMgorCisvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCisjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01JTiAxCisjZGVmaW5lIElXTDYwNTBfVUNPREVfQVBJX01JTiAxCisKKyNkZWZpbmUgSVdMNjAwMF9GV19QUkUgIml3bHdpZmktNjAwMC0iCisjZGVmaW5lIF9JV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorCisjZGVmaW5lIElXTDYwNTBfRldfUFJFICJpd2x3aWZpLTYwNTAtIgorI2RlZmluZSBfSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCisjZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNjAwMF9oY21kX3V0aWxzID0geworCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAorCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCisJLnJ0c190eF9jbWRfZmxhZyA9IGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnLAorCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2w2MDAwX29wcyA9IHsKKwkubGliID0gJml3bDUwMDBfbGliLAorCS5oY21kID0gJml3bDUwMDBfaGNtZCwKKwkudXRpbHMgPSAmaXdsNjAwMF9oY21kX3V0aWxzLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnID0geworCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBRyIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDUwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAzeDMgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzNhZ25fY2ZnID0geworCS5uYW1lID0gIjYwNTAgU2VyaWVzIDN4MyBBR04iLAorCS5md19uYW1lX3ByZSA9IElXTDYwNTBfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAorCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDYwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUJDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUJDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX1VDT0RFX0FQSV9NQVgpKTsKK01PRFVMRV9GSVJNV0FSRShJV0w2MDUwX01PRFVMRV9GSVJNV0FSRShJV0w2MDUwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLWNoZWNrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODEzN2VlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLWNoZWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotICogVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaXdsLWRldi5oIgotI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgotI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgotCi0KLS8qKgotICogaXdsX2NoZWNrX3J4b25fY21kIC0gdmFsaWRhdGUgUlhPTiBzdHJ1Y3R1cmUgaXMgdmFsaWQKLSAqCi0gKiBOT1RFOiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZHVyaW5nIGRldmVsb3BtZW50IGFuZCBjYW4gZXZlbnR1YWxseQotICogYmUgI2lmZGVmJ2Qgb3V0IG9uY2UgdGhlIGRyaXZlciBpcyBzdGFibGUgYW5kIGZvbGtzIGFyZW4ndCBhY3RpdmVseQotICogbWFraW5nIGNoYW5nZXMKLSAqLwotaW50IGl3bF9hZ25fY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjb3VudGVyID0gMTsKLQotCWlmIChyeG9uLT5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgewotCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmCi0JCQkJKFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0sgfAotCQkJCSBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLKSk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayAyNEcgZmllbGRzICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCX0gZWxzZSB7Ci0JCWVycm9yIHw9IChyeG9uLT5mbGFncyAmIFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSA/Ci0JCQkJMCA6IGxlMzJfdG9fY3B1KFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDUyIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDUyIENDSyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9Ci0JZXJyb3IgfD0gKHJ4b24tPm5vZGVfYWRkclswXSB8IHJ4b24tPmJzc2lkX2FkZHJbMF0pICYgMHgxOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIG1hYyBhZGRyICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JLyogbWFrZSBzdXJlIGJhc2ljIHJhdGVzIDZNYnBzIGFuZCAxTWJwcyBhcmUgc3VwcG9ydGVkICovCi0JZXJyb3IgfD0gKCgocnhvbi0+b2ZkbV9iYXNpY19yYXRlcyAmIElXTF9SQVRFXzZNX01BU0spID09IDApICYmCi0JCSAgKChyeG9uLT5jY2tfYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV8xTV9NQVNLKSA9PSAwKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYmFzaWMgcmF0ZSAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9IChsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkgPiAyMDA3KTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBhc3NvYyBpZCAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSkKLQkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgYW5kIHNob3J0IHNsb3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSykpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIENDSyAmIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8Ci0JCQlSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spKSA9PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIFRHRyBhbmQgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoIlR1bmluZyB0byBjaGFubmVsICVkXG4iLAotCQkJICAgIGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpKTsKLQotCWlmIChlcnJvcikgewotCQlJV0xfRVJST1IoIk5vdCBhIHZhbGlkIGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgZmllbGQgdmFsdWVzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCAyN2Y1MDQ3Li5jYWI3ODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00OSw2ICs0OSw4IEBACiAjZGVmaW5lIElXTF9SQVRFX01JTl9GQUlMVVJFX1RICQk2CS8qIG1pbiBmYWlsdXJlcyB0byBjYWxjIHRwdCAqLwogI2RlZmluZSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USAkJOAkvKiBtaW4gc3VjY2Vzc2VzIHRvIGNhbGMgdHB0ICovCiAKKy8qIG1heCBhbGxvd2VkIHJhdGUgbWlzcyBiZWZvcmUgc3luYyBMUSBjbWQgKi8KKyNkZWZpbmUgSVdMX01JU1NFRF9SQVRFX01BWAkJMTUKIC8qIG1heCB0aW1lIHRvIGFjY3VtIGhpc3RvcnkgMiBzZWNvbmRzICovCiAjZGVmaW5lIElXTF9SQVRFX1NDQUxFX0ZMVVNIX0lOVFZMICAgKDIqSFopCiAKQEAgLTE0OCw2ICsxNTAsOCBAQAogCXUxNiBhY3RpdmVfbWltbzJfcmF0ZTsKIAl1MTYgYWN0aXZlX21pbW8zX3JhdGU7CiAJdTE2IGFjdGl2ZV9yYXRlX2Jhc2ljOworCXM4IG1heF9yYXRlX2lkeDsgICAgIC8qIE1heCByYXRlIHNldCBieSB1c2VyICovCisJdTggbWlzc2VkX3JhdGVfY291bnRlcjsKIAogCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCBscTsKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvIGxxX2luZm9bTFFfU0laRV07IC8qICJhY3RpdmUiLCAic2VhcmNoIiAqLwpAQCAtMzU2LDcgKzM2MCw3IEBACiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlpZiAocnNfdGxfZ2V0X2xvYWQobHFfZGF0YSwgdGlkKSA+IElXTF9BR0dfTE9BRF9USFJFU0hPTEQpIHsKLQkJSVdMX0RFQlVHX0hUKCJTdGFydGluZyBUeCBhZ2c6IFNUQTogJXBNIHRpZDogJWRcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAogCQkJCXN0YS0+YWRkciwgdGlkKTsKIAkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24ocHJpdi0+aHcsIHN0YS0+YWRkciwgdGlkKTsKIAl9CkBAIC00NjMsOCArNDY3LDkgQEAKICAqIEZpbGwgdUNvZGUgQVBJIHJhdGVfbl9mbGFncyBmaWVsZCwgYmFzZWQgb24gInNlYXJjaCIgb3IgImFjdGl2ZSIgdGFibGUuCiAgKi8KIC8qIEZJWE1FOlJTOnJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZCBwdXQgdGhlIGZsYWdzIHN0YXRpY2FsbHkgaW4gdGhlIHRhYmxlICovCi1zdGF0aWMgdTMyIHJhdGVfbl9mbGFnc19mcm9tX3RibChzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwsCi0JCQkJICAgICAgIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQorc3RhdGljIHUzMiByYXRlX25fZmxhZ3NfZnJvbV90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwsCisJCQkJIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQogewogCXUzMiByYXRlX25fZmxhZ3MgPSAwOwogCkBAIC00NzUsNyArNDgwLDcgQEAKIAogCX0gZWxzZSBpZiAoaXNfSHQodGJsLT5scV90eXBlKSkgewogCQlpZiAoaW5kZXggPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHsKLQkJCUlXTF9FUlJPUigiaW52YWxpZCBIVCByYXRlIGluZGV4ICVkXG4iLCBpbmRleCk7CisJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIEhUIHJhdGUgaW5kZXggJWRcbiIsIGluZGV4KTsKIAkJCWluZGV4ID0gSVdMX0xBU1RfT0ZETV9SQVRFOwogCQl9CiAJCXJhdGVfbl9mbGFncyA9IFJBVEVfTUNTX0hUX01TSzsKQEAgLTQ4Nyw3ICs0OTIsNyBAQAogCQllbHNlCiAJCQlyYXRlX25fZmxhZ3MgfD0JaXdsX3JhdGVzW2luZGV4XS5wbGNwX21pbW8zOwogCX0gZWxzZSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCB0YmwtPmxxX3R5cGUgJWRcbiIsIHRibC0+bHFfdHlwZSk7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgdGJsLT5scV90eXBlICVkXG4iLCB0YmwtPmxxX3R5cGUpOwogCX0KIAogCXJhdGVfbl9mbGFncyB8PSAoKHRibC0+YW50X3R5cGUgPDwgUkFURV9NQ1NfQU5UX1BPUykgJgpAQCAtNTA3LDcgKzUxMiw3IEBACiAJCQlyYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfR0ZfTVNLOwogCQkJaWYgKGlzX3Npc28odGJsLT5scV90eXBlKSAmJiB0YmwtPmlzX1NHSSkgewogCQkJCXJhdGVfbl9mbGFncyAmPSB+UkFURV9NQ1NfU0dJX01TSzsKLQkJCQlJV0xfRVJST1IoIkdGIHdhcyBzZXQgd2l0aCBTR0k6U0lTT1xuIik7CisJCQkJSVdMX0VSUihwcml2LCAiR0Ygd2FzIHNldCB3aXRoIFNHSTpTSVNPXG4iKTsKIAkJCX0KIAkJfQogCX0KQEAgLTY4OCw3ICs2OTMsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBsb3cpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtNjk4LDcgKzcwMyw3IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTc1OCw3ICs3NjMsNyBAQAogCQlsb3cgPSBzY2FsZV9pbmRleDsKIAogb3V0OgotCXJldHVybiByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBsb3csIGlzX2dyZWVuKTsKKwlyZXR1cm4gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKGxxX3N0YS0+ZHJ2LCB0YmwsIGxvdywgaXNfZ3JlZW4pOwogfQogCiAvKgpAQCAtNzg1LDcgKzc5MCw3IEBACiAJdTggYWN0aXZlX2luZGV4ID0gMDsKIAlzMzIgdHB0ID0gMDsKIAotCUlXTF9ERUJVR19SQVRFX0xJTUlUKCJnZXQgZnJhbWUgYWNrIHJlc3BvbnNlLCB1cGRhdGUgcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOworCUlXTF9ERUJVR19SQVRFX0xJTUlUKHByaXYsICJnZXQgZnJhbWUgYWNrIHJlc3BvbnNlLCB1cGRhdGUgcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOwogCiAJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQpAQCAtNzk2LDcgKzgwMSwxMCBAQAogCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpKQogCQlyZXR1cm47CiAKLQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKKwkJcmV0cmllcyA9IDA7CisJZWxzZQorCQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKIAogCWlmIChyZXRyaWVzID4gMTUpCiAJCXJldHJpZXMgPSAxNTsKQEAgLTgzNSwxNCArODQzLDE5IEBACiAJICAgICghISh0eF9yYXRlICYgUkFURV9NQ1NfR0ZfTVNLKSAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpKSB8fAogCSAgICAoaHctPndpcGh5LT5iYW5kc1twcml2LT5iYW5kXS0+Yml0cmF0ZXNbcnNfaW5kZXhdLmJpdHJhdGUgIT0KIAkgICAgIGh3LT53aXBoeS0+YmFuZHNbaW5mby0+YmFuZF0tPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmJpdHJhdGUpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CiAJCS8qIHRoZSBsYXN0IExRIGNvbW1hbmQgY291bGQgZmFpbGVkIHNvIHRoZSBMUSBpbiB1Y29kZSBub3QKIAkJICogdGhlIHNhbWUgaW4gZHJpdmVyIHN5bmMgdXAKIAkJICovCi0JCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwkJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyKys7CisJCWlmIChscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPiBJV0xfTUlTU0VEX1JBVEVfTUFYKSB7CisJCQlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSAwOworCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIAorCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA9IDA7CiAJLyogVXBkYXRlIGZyYW1lIGhpc3Rvcnkgd2luZG93IHdpdGggImZhaWx1cmUiIGZvciBlYWNoIFR4IHJldHJ5LiAqLwogCXdoaWxlIChyZXRyaWVzKSB7CiAJCS8qIExvb2sgdXAgdGhlIHJhdGUgYW5kIG90aGVyIGluZm8gdXNlZCBmb3IgZWFjaCB0eCBhdHRlbXB0LgpAQCAtOTAzLDcgKzkxNiw3IEBACiAJCQl0cHQgPSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbcnNfaW5kZXhdOwogCQllbHNlCiAJCQl0cHQgPSAwOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKIAkJCXJzX2NvbGxlY3RfdHhfZGF0YShzZWFyY2hfd2luLCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTE5LDcgKzkzMiw3IEBACiAJCQl0cHQgPSBjdXJyX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTMxLDcgKzk0NCw3IEBACiAJLyogSWYgbm90IHNlYXJjaGluZyBmb3IgbmV3IG1vZGUsIGluY3JlbWVudCBzdWNjZXNzL2ZhaWxlZCBjb3VudGVyCiAJICogLi4uIHRoZXNlIGhlbHAgZGV0ZXJtaW5lIHdoZW4gdG8gc3RhcnQgc2VhcmNoaW5nIGFnYWluICovCiAJaWYgKGxxX3N0YS0+c3RheV9pbl90YmwpIHsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkgewogCQkJbHFfc3RhLT50b3RhbF9zdWNjZXNzICs9IGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwOwogCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQgKz0KIAkJCSAgICAgKGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuIC0gaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTYxLDcgKzk3NCw3IEBACiBzdGF0aWMgdm9pZCByc19zZXRfc3RheV9pbl90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGlzX2xlZ2FjeSwKIAkJCQkgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSkKIHsKLQlJV0xfREVCVUdfUkFURSgid2UgYXJlIHN0YXlpbmcgaW4gdGhlIHNhbWUgdGFibGVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJ3ZSBhcmUgc3RheWluZyBpbiB0aGUgc2FtZSB0YWJsZVxuIik7CiAJbHFfc3RhLT5zdGF5X2luX3RibCA9IDE7CS8qIG9ubHkgcGxhY2UgdGhpcyBnZXRzIHNldCAqLwogCWlmIChpc19sZWdhY3kpIHsKIAkJbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCA9IElXTF9MRUdBQ1lfVEFCTEVfQ09VTlQ7CkBAIC0xMTI5LDcgKzExNDIsNyBAQAogCXMzMiByYXRlOwogCXM4IGlzX2dyZWVuID0gbHFfc3RhLT5pc19ncmVlbjsKIAotCWlmICghY29uZi0+aHQuZW5hYmxlZCB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCWlmICghY29uZl9pc19odChjb25mKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PiAyKQpAQCAtMTE0MCw3ICsxMTUzLDcgQEAKIAlpZiAocHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPCAyKQogCQlyZXR1cm4gLTE7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6IHRyeSB0byBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogdHJ5IHRvIHN3aXRjaCB0byBNSU1PMlxuIik7CiAKIAl0YmwtPmxxX3R5cGUgPSBMUV9NSU1PMjsKIAl0YmwtPmlzX2R1cCA9IGxxX3N0YS0+aXNfZHVwOwpAQCAtMTE2OSwxNiArMTE4MiwxNiBAQAogCiAJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8yIGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOwogCiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJDYW4ndCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJDYW4ndCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCiAJCQkJCQlyYXRlLCByYXRlX21hc2spOwogCQlyZXR1cm4gLTE7CiAJfQotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZSwgaXNfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgcmF0ZSwgaXNfZ3JlZW4pOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAogCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLCBpc19ncmVlbik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTk2LDEwICsxMjA5LDEwIEBACiAJdTggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCXMzMiByYXRlOwogCi0JaWYgKCFjb25mLT5odC5lbmFibGVkIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJaWYgKCFjb25mX2lzX2h0KGNvbmYpIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogdHJ5IHRvIHN3aXRjaCB0byBTSVNPXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHRyeSB0byBzd2l0Y2ggdG8gU0lTT1xuIik7CiAKIAl0YmwtPmlzX2R1cCA9IGxxX3N0YS0+aXNfZHVwOwogCXRibC0+bHFfdHlwZSA9IExRX1NJU087CkBAIC0xMjMwLDE0ICsxMjQzLDE0IEBACiAJcnNfc2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHRibCk7CiAJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJjYW4gbm90IHN3aXRjaCB3aXRoIGluZGV4ICVkIHJhdGUgbWFzayAleFxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNhbiBub3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAogCQkJICAgICByYXRlLCByYXRlX21hc2spOwogCQlyZXR1cm4gLTE7CiAJfQotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZSwgaXNfZ3JlZW4pOwotCUlXTF9ERUJVR19SQVRFKCJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCisJdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCByYXRlLCBpc19ncmVlbik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKIAkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZSwgaXNfZ3JlZW4pOwogCXJldHVybiAwOwogfQpAQCAtMTI2Niw3ICsxMjc5LDcgQEAKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX0FOVEVOTkExOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOwogCiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAKQEAgLTEyOTAsNyArMTMwMyw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9TSVNPOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIFNJU09cbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBMZWdhY3kgc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJCQkvKiBTZXQgdXAgc2VhcmNoIHRhYmxlIHRvIHRyeSBTSVNPICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xMzA2LDcgKzEzMTksNyBAQAogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0FCOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0FDOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0JDOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHN3aXRjaCB0byBNSU1PMlxuIik7CiAKIAkJCS8qIFNldCB1cCBzZWFyY2ggdGFibGUgdG8gdHJ5IE1JTU8gKi8KIAkJCW1lbWNweShzZWFyY2hfdGJsLCB0YmwsIHN6KTsKQEAgLTEzNzUsNyArMTM4OCw3IEBACiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfQU5URU5OQTE6CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTSVNPIHRvZ2dsZSBBbnRlbm5hXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU0lTTyB0b2dnbGUgQW50ZW5uYVxuIik7CiAKIAkJCWlmICgodGJsLT5hY3Rpb24gPT0gSVdMX1NJU09fU1dJVENIX0FOVEVOTkExICYmCiAJCQkJCQkJdHhfY2hhaW5zX251bSA8PSAxKSB8fApAQCAtMTM5NCw3ICsxNDA3LDcgQEAKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfTUlNTzJfQUI6CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU8yX0FDOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9NSU1PMl9CQzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHN3aXRjaCB0byBNSU1PMlxuIik7CiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAwOwogCkBAIC0xNDIzLDE0ICsxNDM2LDE1IEBACiAJCQkJCQlIVF9TSE9SVF9HSV80ME1IWikpCiAJCQkJYnJlYWs7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyB0b2dnbGUgU0dJL05HSVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNJU08gdG9nZ2xlIFNHSS9OR0lcbiIpOwogCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlpZiAoaXNfZ3JlZW4pIHsKIAkJCQlpZiAoIXRibC0+aXNfU0dJKQogCQkJCQlicmVhazsKIAkJCQllbHNlCi0JCQkJCUlXTF9FUlJPUigiU0dJIHdhcyBzZXQgaW4gR0YrU0lTT1xuIik7CisJCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJCSJTR0kgd2FzIHNldCBpbiBHRitTSVNPXG4iKTsKIAkJCX0KIAkJCXNlYXJjaF90YmwtPmlzX1NHSSA9ICF0YmwtPmlzX1NHSTsKIAkJCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCBzZWFyY2hfdGJsKTsKQEAgLTE0MzksOCArMTQ1Myw5IEBACiAJCQkJaWYgKHRwdCA+PSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbaW5kZXhdKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCgKLQkJCQkJCXNlYXJjaF90YmwsIGluZGV4LCBpc19ncmVlbik7CisJCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPQorCQkJCXJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCBzZWFyY2hfdGJsLAorCQkJCQkJICAgICAgaW5kZXgsIGlzX2dyZWVuKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXRibC0+YWN0aW9uKys7CkBAIC0xNDg2LDcgKzE1MDEsNyBAQAogCQlzd2l0Y2ggKHRibC0+YWN0aW9uKSB7CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9BTlRFTk5BMToKIAkJY2FzZSBJV0xfTUlNTzJfU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PIHRvZ2dsZSBBbnRlbm5hc1xuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8gdG9nZ2xlIEFudGVubmFzXG4iKTsKIAogCQkJaWYgKHR4X2NoYWluc19udW0gPD0gMikKIAkJCQlicmVhazsKQEAgLTE1MDIsNyArMTUxNyw3IEBACiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0E6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0I6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0M6Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IE1JTU8yIHN3aXRjaCB0byBTSVNPXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTzIgc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJCQkvKiBTZXQgdXAgbmV3IHNlYXJjaCB0YWJsZSBmb3IgU0lTTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTUzNCw3ICsxNTQ5LDcgQEAKIAkJCQkJCUhUX1NIT1JUX0dJXzQwTUhaKSkKIAkJCQlicmVhazsKIAotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PIHRvZ2dsZSBTR0kvTkdJXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTyB0b2dnbGUgU0dJL05HSVxuIik7CiAKIAkJCS8qIFNldCB1cCBuZXcgc2VhcmNoIHRhYmxlIGZvciBNSU1PICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xNTUxLDggKzE1NjYsOSBAQAogCQkJCWlmICh0cHQgPj0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W2luZGV4XSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwoCi0JCQkJCQlzZWFyY2hfdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0KKwkJCQlyYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgc2VhcmNoX3RibCwKKwkJCQkJCSAgICAgIGluZGV4LCBpc19ncmVlbik7CiAJCQlnb3RvIG91dDsKIAogCQl9CkBAIC0xNjE2LDcgKzE2MzIsNyBAQAogCQkgICAgKGxxX3N0YS0+dG90YWxfc3VjY2VzcyA+IGxxX3N0YS0+bWF4X3N1Y2Nlc3NfbGltaXQpIHx8CiAJCSAgICAoKCFscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsKSAmJiAobHFfc3RhLT5mbHVzaF90aW1lcikKIAkJICAgICAmJiAoZmx1c2hfaW50ZXJ2YWxfcGFzc2VkKSkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogc3RheSBpcyBleHBpcmVkICVkICVkICVkXG46IiwKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RheSBpcyBleHBpcmVkICVkICVkICVkXG46IiwKIAkJCQkgICAgIGxxX3N0YS0+dG90YWxfZmFpbGVkLAogCQkJCSAgICAgbHFfc3RhLT50b3RhbF9zdWNjZXNzLAogCQkJCSAgICAgZmx1c2hfaW50ZXJ2YWxfcGFzc2VkKTsKQEAgLTE2MzksNyArMTY1NSw3IEBACiAJCQkgICAgbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCkgewogCQkJCWxxX3N0YS0+dGFibGVfY291bnQgPSAwOwogCi0JCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CiAJCQkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KAogCQkJCQkJJih0YmwtPndpbltpXSkpOwpAQCAtMTY4Nyw4ICsxNzAzLDkgQEAKIAl1MTYgaGlnaF9sb3c7CiAJczMyIHNyOwogCXU4IHRpZCA9IE1BWF9USURfQ09VTlQ7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGE7CiAKLQlJV0xfREVCVUdfUkFURSgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nCiAJICogbG93ZXN0IHJhdGUuICovCkBAIC0xNzIwLDEzICsxNzM3LDEzIEBACiAJLyogY3VycmVudCB0eCByYXRlICovCiAJaW5kZXggPSBscV9zdGEtPmxhc3RfdHhyYXRlX2lkeDsKIAotCUlXTF9ERUJVR19SQVRFKCJSYXRlIHNjYWxlIGluZGV4ICVkIGZvciB0eXBlICVkXG4iLCBpbmRleCwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiUmF0ZSBzY2FsZSBpbmRleCAlZCBmb3IgdHlwZSAlZFxuIiwgaW5kZXgsCiAJCSAgICAgICB0YmwtPmxxX3R5cGUpOwogCiAJLyogcmF0ZXMgYXZhaWxhYmxlIGZvciB0aGlzIGFzc29jaWF0aW9uLCBhbmQgZm9yIG1vZHVsYXRpb24gbW9kZSAqLwogCXJhdGVfbWFzayA9IHJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBoZHIsIHRibC0+bHFfdHlwZSk7CiAKLQlJV0xfREVCVUdfUkFURSgibWFzayAweCUwNFggXG4iLCByYXRlX21hc2spOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJtYXNrIDB4JTA0WCBcbiIsIHJhdGVfbWFzayk7CiAKIAkvKiBtYXNrIHdpdGggc3RhdGlvbiByYXRlIHJlc3RyaWN0aW9uICovCiAJaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7CkBAIC0xNzQ1LDE2ICsxNzYyLDI1IEBACiAJCXJhdGVfc2NhbGVfaW5kZXhfbXNrID0gcmF0ZV9tYXNrOwogCiAJaWYgKCEoKDEgPDwgaW5kZXgpICYgcmF0ZV9zY2FsZV9pbmRleF9tc2spKSB7Ci0JCUlXTF9FUlJPUigiQ3VycmVudCBSYXRlIGlzIG5vdCB2YWxpZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkN1cnJlbnQgUmF0ZSBpcyBub3QgdmFsaWRcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogR2V0IGV4cGVjdGVkIHRocm91Z2hwdXQgdGFibGUgYW5kIGhpc3Rvcnkgd2luZG93IGZvciBjdXJyZW50IHJhdGUgKi8KIAlpZiAoIXRibC0+ZXhwZWN0ZWRfdHB0KSB7Ci0JCUlXTF9FUlJPUigidGJsLT5leHBlY3RlZF90cHQgaXMgTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInRibC0+ZXhwZWN0ZWRfdHB0IGlzIE5VTExcbiIpOwogCQlyZXR1cm47CiAJfQogCisJLyogZm9yY2UgdXNlciBtYXggcmF0ZSBpZiBzZXQgYnkgdXNlciAqLworCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpICYmCisJICAgIChscV9zdGEtPm1heF9yYXRlX2lkeCA8IGluZGV4KSkgeworCQlpbmRleCA9IGxxX3N0YS0+bWF4X3JhdGVfaWR4OworCQl1cGRhdGVfbHEgPSAxOworCQl3aW5kb3cgPSAmKHRibC0+d2luW2luZGV4XSk7CisJCWdvdG8gbHFfdXBkYXRlOworCX0KKwogCXdpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKIAogCS8qCkBAIC0xNzY3LDcgKzE3OTMsNyBAQAogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKIAlpZiAoKGZhaWxfY291bnQgPCBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKIAkJCSh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkgewotCQlJV0xfREVCVUdfUkFURSgiTFE6IHN0aWxsIGJlbG93IFRILiBzdWNjPSVkIHRvdGFsPSVkICIKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBzdGlsbCBiZWxvdyBUSC4gc3VjYz0lZCB0b3RhbD0lZCAiCiAJCQkgICAgICAgImZvciBpbmRleCAlZFxuIiwKIAkJCSAgICAgICB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciwgd2luZG93LT5jb3VudGVyLCBpbmRleCk7CiAKQEAgLTE3OTUsNyArMTgyMSw3IEBACiAJCSAqIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSBzZXR1cCB0aGF0IHdlJ3ZlIGJlZW4gdHJ5aW5nLiAqLwogCQlpZiAod2luZG93LT5hdmVyYWdlX3RwdCA+IGxxX3N0YS0+bGFzdF90cHQpIHsKIAotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTV0lUQ0hJTkcgVE8gTkVXIFRBQkxFICIKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU1dJVENISU5HIFRPIE5FVyBUQUJMRSAiCiAJCQkJCSJzdWM9JWQgY3VyLXRwdD0lZCBvbGQtdHB0PSVkXG4iLAogCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCiAJCQkJCXdpbmRvdy0+YXZlcmFnZV90cHQsCkBAIC0xODExLDcgKzE4MzcsNyBAQAogCQkvKiBFbHNlIHBvb3Igc3VjY2VzczsgZ28gYmFjayB0byBtb2RlIGluICJhY3RpdmUiIHRhYmxlICovCiAJCX0gZWxzZSB7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogR09JTkcgQkFDSyBUTyBUSEUgT0xEIFRBQkxFICIKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogR09JTkcgQkFDSyBUTyBUSEUgT0xEIFRBQkxFICIKIAkJCQkJInN1Yz0lZCBjdXItdHB0PSVkIG9sZC10cHQ9JWRcbiIsCiAJCQkJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbywKIAkJCQkJd2luZG93LT5hdmVyYWdlX3RwdCwKQEAgLTE4NDYsNiArMTg3MiwxMSBAQAogCWxvdyA9IGhpZ2hfbG93ICYgMHhmZjsKIAloaWdoID0gKGhpZ2hfbG93ID4+IDgpICYgMHhmZjsKIAorCS8qIElmIHVzZXIgc2V0IG1heCByYXRlLCBkb250IGFsbG93IGhpZ2hlciB0aGFuIHVzZXIgY29uc3RyYWluICovCisJaWYgKChscV9zdGEtPm1heF9yYXRlX2lkeCAhPSAtMSkgJiYKKwkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4IDwgaGlnaCkpCisJCWhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOworCiAJc3IgPSB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW87CiAKIAkvKiBDb2xsZWN0IG1lYXN1cmVkIHRocm91Z2hwdXRzIGZvciBjdXJyZW50IGFuZCBhZGphY2VudCByYXRlcyAqLwpAQCAtMTg1OSw3ICsxODkwLDcgQEAKIAogCS8qIFRvbyBtYW55IGZhaWx1cmVzLCBkZWNyZWFzZSByYXRlICovCiAJaWYgKChzciA8PSBJV0xfUkFURV9ERUNSRUFTRV9USCkgfHwgKGN1cnJlbnRfdHB0ID09IDApKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKIAkJc2NhbGVfYWN0aW9uID0gLTE7CiAKIAkvKiBObyB0aHJvdWdocHV0IG1lYXN1cmVkIHlldCBmb3IgYWRqYWNlbnQgcmF0ZXM7IHRyeSBpbmNyZWFzZS4gKi8KQEAgLTE4NjksNyArMTkwMCw3IEBACiAJCWlmIChoaWdoICE9IElXTF9SQVRFX0lOVkFMSUQgJiYgc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQllbHNlIGlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKLQkJCXNjYWxlX2FjdGlvbiA9IC0xOworCQkJc2NhbGVfYWN0aW9uID0gMDsKIAl9CiAKIAkvKiBCb3RoIGFkamFjZW50IHRocm91Z2hwdXRzIGFyZSBtZWFzdXJlZCwgYnV0IG5laXRoZXIgb25lIGhhcyBiZXR0ZXIKQEAgLTE4OTAsMTcgKzE5MjEsMTUgQEAKIAkJCQkJc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQkJfSBlbHNlIHsKLQkJCQlJV0xfREVCVUdfUkFURQotCQkJCSAgICAoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBoaWdoIHRwdFxuIik7Ci0JCQkJc2NhbGVfYWN0aW9uID0gLTE7CisJCQkJc2NhbGVfYWN0aW9uID0gMDsKIAkJCX0KIAogCQkvKiBMb3dlciBhZGphY2VudCByYXRlJ3MgdGhyb3VnaHB1dCBpcyBtZWFzdXJlZCAqLwogCQl9IGVsc2UgaWYgKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpIHsKIAkJCS8qIExvd2VyIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0ICovCiAJCQlpZiAobG93X3RwdCA+IGN1cnJlbnRfdHB0KSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAkJCX0gZWxzZSBpZiAoc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwpAQCAtMTkzNywxNCArMTk2NiwxNCBAQAogCQlicmVhazsKIAl9CiAKLQlJV0xfREVCVUdfUkFURSgiY2hvb3NlIHJhdGUgc2NhbGUgaW5kZXggJWQgYWN0aW9uICVkIGxvdyAlZCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNob29zZSByYXRlIHNjYWxlIGluZGV4ICVkIGFjdGlvbiAlZCBsb3cgJWQgIgogCQkgICAgImhpZ2ggJWQgdHlwZSAlZFxuIiwKIAkJICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gsIHRibC0+bHFfdHlwZSk7CiAKIGxxX3VwZGF0ZToKIAkvKiBSZXBsYWNlIHVDb2RlJ3MgcmF0ZSB0YWJsZSBmb3IgdGhlIGRlc3RpbmF0aW9uIHN0YXRpb24uICovCiAJaWYgKHVwZGF0ZV9scSkgewotCQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIGluZGV4LCBpc19ncmVlbik7CiAJCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCByYXRlKTsKIAkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogCX0KQEAgLTE5ODEsNyArMjAxMCw3IEBACiAJCQkvKiBVc2UgbmV3ICJzZWFyY2giIHN0YXJ0IHJhdGUgKi8KIAkJCWluZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh0YmwtPmN1cnJlbnRfcmF0ZSk7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJTd2l0Y2ggY3VycmVudCAgbWNzOiAlWCBpbmRleDogJWRcbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiU3dpdGNoIGN1cnJlbnQgIG1jczogJVggaW5kZXg6ICVkXG4iLAogCQkJCSAgICAgdGJsLT5jdXJyZW50X3JhdGUsIGluZGV4KTsKIAkJCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCB0YmwtPmN1cnJlbnRfcmF0ZSk7CiAJCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CkBAIC0xOTkzLDEwICsyMDIyLDEwIEBACiAJCSAqIHN0YXkgd2l0aCBiZXN0IGFudGVubmEgbGVnYWN5IG1vZHVsYXRpb24gZm9yIGEgd2hpbGUKIAkJICogYmVmb3JlIG5leHQgcm91bmQgb2YgbW9kZSBjb21wYXJpc29ucy4gKi8KIAkJdGJsMSA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOwotCQlpZiAoaXNfbGVnYWN5KHRibDEtPmxxX3R5cGUpICYmICFjb25mLT5odC5lbmFibGVkICYmCisJCWlmIChpc19sZWdhY3kodGJsMS0+bHFfdHlwZSkgJiYgIWNvbmZfaXNfaHQoY29uZikgJiYKIAkJICAgIGxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPj0gMSkgewogCQkJbHFfc3RhLT5hY3Rpb25fY291bnRlciA9IDA7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNUQVkgaW4gbGVnYWN5IHRhYmxlXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU1RBWSBpbiBsZWdhY3kgdGFibGVcbiIpOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMSwgbHFfc3RhKTsKIAkJfQogCkBAIC0yMDA4LDggKzIwMzcsMTUgQEAKIAkJCWlmICgobHFfc3RhLT5sYXN0X3RwdCA+IElXTF9BR0dfVFBUX1RIUkVIT0xEKSAmJgogCQkJICAgIChscV9zdGEtPnR4X2FnZ190aWRfZW4gJiAoMSA8PCB0aWQpKSAmJgogCQkJICAgICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkpIHsKLQkJCQlJV0xfREVCVUdfUkFURSgidHJ5IHRvIGFnZ3JlZ2F0ZSB0aWQgJWRcbiIsIHRpZCk7Ci0JCQkJcnNfdGxfdHVybl9vbl9hZ2cocHJpdiwgdGlkLCBscV9zdGEsIHN0YSk7CisJCQkJdGlkX2RhdGEgPQorCQkJCSAgICZwcml2LT5zdGF0aW9uc1tscV9zdGEtPmxxLnN0YV9pZF0udGlkW3RpZF07CisJCQkJaWYgKHRpZF9kYXRhLT5hZ2cuc3RhdGUgPT0gSVdMX0FHR19PRkYpIHsKKwkJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkJCSAgICAgICAidHJ5IHRvIGFnZ3JlZ2F0ZSB0aWQgJWRcbiIsCisJCQkJCQkgICAgICAgdGlkKTsKKwkJCQkJcnNfdGxfdHVybl9vbl9hZ2cocHJpdiwgdGlkLAorCQkJCQkJCSAgbHFfc3RhLCBzdGEpOworCQkJCX0KIAkJCX0KIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMCwgbHFfc3RhKTsKQEAgLTIwMjgsNyArMjA2NCw3IEBACiAJfQogCiBvdXQ6Ci0JdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKIAlpID0gaW5kZXg7CiAJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSBpOwogCkBAIC0yMDgxLDcgKzIxMTcsNyBAQAogCWlmICghcnNfaXNfdmFsaWRfYW50KHZhbGlkX3R4X2FudCwgdGJsLT5hbnRfdHlwZSkpCiAJICAgIHJzX3RvZ2dsZV9hbnRlbm5hKHZhbGlkX3R4X2FudCwgJnJhdGUsIHRibCk7CiAKLQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZV9pZHgsIHVzZV9ncmVlbik7CisJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOwogCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZTsKIAlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKIAlyc19maWxsX2xpbmtfY21kKE5VTEwsIGxxX3N0YSwgcmF0ZSk7CkBAIC0yMTA0LDcgKzIxNDAsMTggQEAKIAlpbnQgcmF0ZV9pZHg7CiAJdTY0IG1hc2tfYml0ID0gMDsKIAotCUlXTF9ERUJVR19SQVRFX0xJTUlUKCJyYXRlIHNjYWxlIGNhbGN1bGF0ZSBuZXcgcmF0ZSBmb3Igc2tiXG4iKTsKKwlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisKKwkvKiBHZXQgbWF4IHJhdGUgaWYgdXNlciBzZXQgbWF4IHJhdGUgKi8KKwlpZiAobHFfc3RhKSB7CisJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gdHhyYy0+bWF4X3JhdGVfaWR4OworCQlpZiAoKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopICYmCisJCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpKQorCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJaWYgKChscV9zdGEtPm1heF9yYXRlX2lkeCA8IDApIHx8CisJCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggPj0gSVdMX1JBVEVfQ09VTlQpKQorCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKKwl9CiAKIAlpZiAoc3RhKQogCQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC0yMTI5LDcgKzIxNzYsNyBAQAogCQl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgaGRyLT5hZGRyMSwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwpAQCAtMjE1OCw3ICsyMjA1LDcgQEAKIAlpbnQgaSwgajsKIAogCXByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwotCUlXTF9ERUJVR19SQVRFKCJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNyZWF0ZSBzdGF0aW9uIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKIAogCWxxX3N0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfbHFfc3RhKSwgZ2ZwKTsKIApAQCAtMjE4Miw2ICsyMjI5LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmcHJpdi0+aHctPmNvbmY7CiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOwogCXUxNiBtYXNrX2JpdCA9IDA7CisJaW50IGNvdW50OworCWludCBzdGFydF9yYXRlID0gMDsKIAogCWxxX3N0YS0+Zmx1c2hfdGltZXIgPSAwOwogCWxxX3N0YS0+c3VwcF9yYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC0yMTg5LDcgKzIyMzgsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykKIAkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KCZscV9zdGEtPmxxX2luZm9bal0ud2luW2ldKTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogKioqIHJhdGUgc2NhbGUgc3RhdGlvbiBnbG9iYWwgaW5pdCAqKipcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogKioqIHJhdGUgc2NhbGUgc3RhdGlvbiBnbG9iYWwgaW5pdCAqKipcbiIpOwogCS8qIFRPRE86IHdoYXQgaXMgYSBnb29kIHN0YXJ0aW5nIHJhdGUgZm9yIFNUQT8gQWJvdXQgbWlkZGxlPyBNYXliZSBub3QKIAkgKiB0aGUgbG93ZXN0IG9yIHRoZSBoaWdoZXN0IHJhdGUuLiBDb3VsZCBjb25zaWRlciB1c2luZyBSU1NJIGZyb20KIAkgKiBwcmV2aW91cyBwYWNrZXRzPyBOZWVkIHRvIGhhdmUgSUVFRSA4MDIuMVggYXV0aCBzdWNjZWVkIGltbWVkaWF0ZWx5CkBAIC0yMjAwLDEwICsyMjQ5LDEwIEBACiAJCXU4IHN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyKTsKIAogCQkvKiBmb3IgSUJTUyB0aGUgY2FsbCBhcmUgZnJvbSB0YXNrbGV0ICovCi0JCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgc3RhLT5hZGRyLAogCQkJCQkJCTAsIENNRF9BU1lOQywgTlVMTCk7CiAJCX0KQEAgLTIyMTYsNiArMjI2NSw4IEBACiAJfQogCiAJbHFfc3RhLT5pc19kdXAgPSAwOworCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gLTE7CisJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID0gSVdMX01JU1NFRF9SQVRFX01BWDsKIAlscV9zdGEtPmlzX2dyZWVuID0gcnNfdXNlX2dyZWVuKHByaXYsIGNvbmYpOwogCWxxX3N0YS0+YWN0aXZlX2xlZ2FjeV9yYXRlID0gcHJpdi0+YWN0aXZlX3JhdGUgJiB+KDB4MTAwMCk7CiAJbHFfc3RhLT5hY3RpdmVfcmF0ZV9iYXNpYyA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljOwpAQCAtMjI0MCw3ICsyMjkxLDcgQEAKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICY9IH4oKHUxNikweDIpOwogCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKLQlJV0xfREVCVUdfUkFURSgiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlKTsKQEAgLTIyNTQsMTYgKzIzMDUsMjAgQEAKIAlscV9zdGEtPmRydiA9IHByaXY7CiAKIAkvKiBGaW5kIGhpZ2hlc3QgdHggcmF0ZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF0gJiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKLQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IDM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspCisJbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOworCWNvdW50ID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJY291bnQgKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJc3RhcnRfcmF0ZSA9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCW1hc2tfYml0IDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOworCX0KKworCW1hc2tfYml0ID0gbWFza19iaXQgJiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKKwlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IDQ7CisJZm9yIChpID0gc3RhcnRfcmF0ZTsgaSA8IGNvdW50OyBpKyspCiAJCWlmIChtYXNrX2JpdCAmIEJJVChpKSkKIAkJCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gaTsKIAotCS8qIEZvciBNT0RFX0lFRUU4MDIxMUEsIHNraXAgb3ZlciBjY2sgcmF0ZXMgaW4gZ2xvYmFsIHJhdGUgdGFibGUgKi8KLQlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQogCXJzX2luaXRpYWxpemVfbHEocHJpdiwgY29uZiwgc3RhLCBscV9zdGEpOwogfQogCkBAIC0yNDAyLDkgKzI0NTcsOSBAQAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBwcml2X3I7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAJa2ZyZWUobHFfc3RhKTsKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIApAQCAtMjQxOCwyMCArMjQ3MywyNyBAQAogCQkJICAgICB1MzIgKnJhdGVfbl9mbGFncywgaW50IGluZGV4KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwl1OCB2YWxpZF90eF9hbnQ7CisJdTggYW50X3NlbF90eDsKIAogCXByaXYgPSBscV9zdGEtPmRydjsKKwl2YWxpZF90eF9hbnQgPSBwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50OwogCWlmIChscV9zdGEtPmRiZ19maXhlZF9yYXRlKSB7Ci0JCWlmIChpbmRleCA8IDEyKSB7CisJCWFudF9zZWxfdHggPQorCQkgICgobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSAmIFJBVEVfTUNTX0FOVF9BQkNfTVNLKQorCQkgID4+IFJBVEVfTUNTX0FOVF9QT1MpOworCQlpZiAoKHZhbGlkX3R4X2FudCAmIGFudF9zZWxfdHgpID09IGFudF9zZWxfdHgpIHsKIAkJCSpyYXRlX25fZmxhZ3MgPSBscV9zdGEtPmRiZ19maXhlZF9yYXRlOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkZpeGVkIHJhdGUgT05cbiIpOwogCQl9IGVsc2UgewotCQkJaWYgKGxxX3N0YS0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJCSpyYXRlX25fZmxhZ3MgPSAweDgwMEQ7Ci0JCQllbHNlCi0JCQkJKnJhdGVfbl9mbGFncyA9IDB4ODIwQTsKKwkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUgPSAwOworCQkJSVdMX0VSUihwcml2LAorCQkJICAgICJJbnZhbGlkIGFudGVubmEgc2VsZWN0aW9uIDB4JVgsIFZhbGlkIGlzIDB4JVhcbiIsCisJCQkgICAgYW50X3NlbF90eCwgdmFsaWRfdHhfYW50KTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9GRlxuIik7CiAJCX0KLQkJSVdMX0RFQlVHX1JBVEUoIkZpeGVkIHJhdGUgT05cbiIpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9GRlxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9GRlxuIik7CiAJfQogfQogCkBAIC0yNDYwLDcgKzI1MjIsNyBAQAogCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwogCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwogCi0JSVdMX0RFQlVHX1JBVEUoInN0YV9pZCAlZCByYXRlIDB4JVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInN0YV9pZCAlZCByYXRlIDB4JVhcbiIsCiAJCWxxX3N0YS0+bHEuc3RhX2lkLCBscV9zdGEtPmRiZ19maXhlZF9yYXRlKTsKIAogCWlmIChscV9zdGEtPmRiZ19maXhlZF9yYXRlKSB7CkBAIC0yNDc0LDExICsyNTM2LDE5IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpID0gMDsKKwlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OworCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKnRibCA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOworCisJcHJpdiA9IGxxX3N0YS0+ZHJ2OworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAic3RhX2lkICVkXG4iLCBscV9zdGEtPmxxLnN0YV9pZCk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZhaWxlZD0lZCBzdWNjZXNzPSVkIHJhdGU9MCVYXG4iLApAQCAtMjQ4Niw2ICsyNTU2LDIwIEBACiAJCQlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZpeGVkIHJhdGUgMHglWFxuIiwKIAkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJ2YWxpZF90eF9hbnQgJXMlcyVzXG4iLAorCSAgICAocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCAmIEFOVF9BKSA/ICJBTlRfQSwiIDogIiIsCisJICAgIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQU5UX0IpID8gIkFOVF9CLCIgOiAiIiwKKwkgICAgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBBTlRfQykgPyAiQU5UX0MiIDogIiIpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJscSB0eXBlICVzXG4iLAorCSAgIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgPyAibGVnYWN5IiA6ICJIVCIpOworCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7CisJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXMiLAorCQkgICAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSA/ICJTSVNPIiA6CisJCSAgICgoaXNfbWltbzIodGJsLT5scV90eXBlKSkgPyAiTUlNTzIiIDogIk1JTU8zIikpOworCQkgICBkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKKwkJICAgKHRibC0+aXNfZmF0KSA/ICI0ME1IeiIgOiAiMjBNSHoiKTsKKwkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiAlc1xuIiwgKHRibC0+aXNfU0dJKSA/ICJTR0kiIDogIiIpOworCX0KIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiZ2VuZXJhbDoiCiAJCSJmbGFncz0weCVYIG1pbW8tZD0lZCBzLWFudDB4JXggZC1hbnQ9MHgleFxuIiwKIAkJbHFfc3RhLT5scS5nZW5lcmFsX3BhcmFtcy5mbGFncywKQEAgLTI1MTEsNyArMjU5NSw5IEBACiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgcmF0ZVslZF0gMHglWFxuIiwKIAkJCWksIGxlMzJfdG9fY3B1KGxxX3N0YS0+bHEucnNfdGFibGVbaV0ucmF0ZV9uX2ZsYWdzKSk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zY2FsZV90YWJsZV9vcHMgPSB7CkBAIC0yNTIyLDExICsyNjA4LDE3IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpLCBqOworCXNzaXplX3QgcmV0OwogCiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgTFFfU0laRTsgaSsrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIlcyB0eXBlPSVkIFNHST0lZCBGQVQ9JWQgRFVQPSVkXG4iCiAJCQkJInJhdGU9MHglWFxuIiwKQEAgLTI1NDQsNyArMjYzNiw5IEBACiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAkJfQogCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zdGF0c190YWJsZV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IDc4ZWU4M2EuLmFiNTlhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgX19pd2xfYWduX3JzX2hfXwogI2RlZmluZSBfX2l3bF9hZ25fcnNfaF9fCiAKLSNpbmNsdWRlICJpd2wtZGV2LmgiCi0KIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIHsKIAl1OCBwbGNwOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV82TV9QTENQLCBldGMuICovCiAJdTggcGxjcF9zaXNvOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV9TSVNPXzZNX1BMQ1AsIGV0Yy4gKi8KQEAgLTQzLDYgKzQxLDE5IEBACiAJdTggbmV4dF9yc190Z2c7ICAvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwogfTsKIAorc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKKwl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLworCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLworCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KKwl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KKwl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KKwl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLworCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCisJdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLworCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLworCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KK307CisKIC8qCiAgKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KICAqIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF07CkBAIC02MiwxMiArNzMsMzAgQEAKIAlJV0xfUkFURV81NE1fSU5ERVgsCiAJSVdMX1JBVEVfNjBNX0lOREVYLAogCUlXTF9SQVRFX0NPVU5ULCAvKkZJWE1FOlJTOmNoYW5nZSB0byBJV0xfUkFURV9JTkRFWF9DT1VOVCwqLworCUlXTF9SQVRFX0NPVU5UXzM5NDUgPSBJV0xfUkFURV9DT1VOVCAtIDEsCiAJSVdMX1JBVEVfSU5WTV9JTkRFWCA9IElXTF9SQVRFX0NPVU5ULAogCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9DT1VOVCwKIH07CiAKIGVudW0geworCUlXTF9SQVRFXzZNX0lOREVYX1RBQkxFID0gMCwKKwlJV0xfUkFURV85TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xMk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMThNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzI0TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8zNk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfNDhNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzU0TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xTV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8yTV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV81TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xMU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfSU5WTV9JTkRFWF9UQUJMRSA9IElXTF9SQVRFX0lOVk1fSU5ERVggLSAxLAorfTsKKworZW51bSB7CiAJSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAorCUlXTDM5X0xBU1RfT0ZETV9SQVRFID0gSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKIAlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKQEAgLTIwMiw3ICsyMzEsNyBAQAogI2RlZmluZSBJV0xfUlNfR09PRF9SQVRJTwkJMTI4MDAJLyogMTAwJSAqLwogI2RlZmluZSBJV0xfUkFURV9TQ0FMRV9TV0lUQ0gJCTEwODgwCS8qICA4NSUgKi8KICNkZWZpbmUgSVdMX1JBVEVfSElHSF9USAkJMTA4ODAJLyogIDg1JSAqLwotI2RlZmluZSBJV0xfUkFURV9JTkNSRUFTRV9USCAgICAgICAgICAgIDg5NjAJLyogIDcwJSAqLworI2RlZmluZSBJV0xfUkFURV9JTkNSRUFTRV9USAkJNjQwMAkvKiAgNTAlICovCiAjZGVmaW5lIElXTF9SQVRFX0RFQ1JFQVNFX1RICQkxOTIwCS8qICAxNSUgKi8KIAogLyogcG9zc2libGUgYWN0aW9ucyB3aGVuIGluIGxlZ2FjeSBtb2RlICovCkBAIC0yNDgsNiArMjc3LDcgQEAKICNkZWZpbmUgVElNRV9XUkFQX0FST1VORCh4LCB5KSAoKCh5KSA+ICh4KSkgPyAoeSkgLSAoeCkgOiAoMC0oeCkpICsgKHkpKQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9yYXRlX2luZm8gaXdsX3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XTsKIAogZW51bSBpd2xfdGFibGVfdHlwZSB7CiAJTFFfTk9ORSwKQEAgLTMwMyw2ICszMzMsMjMgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAorc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQoreworCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKKworCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCisJCXJhdGUgPSByYXRlX2luZGV4OworCXJldHVybiByYXRlOworfQorCisvKioKKyAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCisgKgorICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCisgKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KKyAqLworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOworCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBjYWxsYmFja3MKICAqCkBAIC0zMTQsNiArMzYxLDcgQEAKICAqCiAgKi8KIGV4dGVybiBpbnQgaXdsYWduX3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7CiAKIC8qKgogICogaXdsX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGNhbGxiYWNrcwpAQCAtMzIyLDUgKzM3MCw2IEBACiAgKiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkLgogICovCiBleHRlcm4gdm9pZCBpd2xhZ25fcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYgLyogX19pd2xfYWduX19yc19fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDEyOWUyZDMuLjY2M2RjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00NCw2ICs0NCw4IEBACiAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAorI2RlZmluZSBEUlZfTkFNRSAgICAgICAgIml3bGFnbiIKKwogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKQEAgLTYxLDkgKzYzLDcgQEAKIAogLyoKICAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KLSAqIE5PVEU6IERSVl9OQU1FIGlzIGRlZmluZWQgaW4gaXdsd2lmaS5oIGZvciB1c2UgYnkgaXdsLWRlYnVnLmggYW5kIHByaW50awogICovCi0KICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBXaXJlbGVzcyBXaUZpIExpbmsgQUdOIGRyaXZlciBmb3IgTGludXgiCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwpAQCAtNzIsNyArNzIsNyBAQAogI2RlZmluZSBWRAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWZkZWYgQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKICNkZWZpbmUgVlMgInMiCiAjZWxzZQogI2RlZmluZSBWUwpAQCAtOTQsNjYgKzk0LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KLQotc3RhdGljIHZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpCi17Ci0Jc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0KLQlpZiAoaHdfZGVjcnlwdCkKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0JZWxzZQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCi19Ci0KLS8qKgotICogaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCAtIGNoZWNrIGlmIGZ1bGwgUlhPTiAodnMgUlhPTl9BU1NPQykgY21kIGlzIG5lZWRlZAotICogQHByaXY6IHN0YWdpbmdfcnhvbiBpcyBjb21wYXJlZCB0byBhY3RpdmVfcnhvbgotICoKLSAqIElmIHRoZSBSWE9OIHN0cnVjdHVyZSBpcyBjaGFuZ2luZyBlbm91Z2ggdG8gcmVxdWlyZSBhIG5ldyB0dW5lLAotICogb3IgaXMgY2xlYXJpbmcgdGhlIFJYT05fRklMVEVSX0FTU09DX01TSywgdGhlbiByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0Ci0gKiBhIG5ldyB0dW5lIChmdWxsIFJYT04gY29tbWFuZCwgcmF0aGVyIHRoYW4gUlhPTl9BU1NPQyBjbWQpIGlzIHJlcXVpcmVkLgotICovCi1zdGF0aWMgaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCi0JLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KLQlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KLQkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KLQkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgotCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCi0JICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCi0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQotCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQotCQlyZXR1cm4gMTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQotCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgpAQCAtMTc5LDkgKzExOSw5IEBACiAJICogNTAwMCwgYnV0IHdpbGwgbm90IGRhbWFnZSA0OTY1ICovCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NFTEZfQ1RTX0VOOwogCi0JcmV0ID0gaXdsX2Fnbl9jaGVja19yeG9uX2NtZCgmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlyZXQgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5MSw3ICsxMzEsNyBAQAogCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewogCQlyZXQgPSBpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKQEAgLTIwNyw3ICsxNDcsNyBAQAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KIAlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKQEAgLTIxOCwxMiArMTU4LDEyIEBACiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwogCQlpZiAocmV0KSB7CiAJCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJCUlXTF9FUlJPUigiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfSU5GTygiU2VuZGluZyBSWE9OXG4iCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbmRpbmcgUlhPTlxuIgogCQkgICAgICAgIiogd2l0aCVzIFJYT05fRklMVEVSX0FTU09DX01TS1xuIgogCQkgICAgICAgIiogY2hhbm5lbCA9ICVkXG4iCiAJCSAgICAgICAiKiBic3NpZCA9ICVwTVxuIiwKQEAgLTI0Miw3ICsxODIsNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZwcml2LT5zdGFnaW5nX3J4b24pOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CkBAIC0yNTYsNyArMTk2LDcgQEAKIAkvKiBBZGQgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNvIHdlIGNhbiBzZW5kIGJyb2FkY2FzdCBmcmFtZXMgKi8KIAlpZiAoaXdsX3J4b25fYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDApID09CiAJCQkJCQlJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjY3LDEzICsyMDcsMTUgQEAKIAkJCXJldCA9IGl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsCiAJCQkJCSAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsIDEpOwogCQkJaWYgKHJldCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgVFguXG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgVFguXG4iKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJCXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgPSAxOwogCQkJaWYgKHByaXYtPmRlZmF1bHRfd2VwX2tleSAmJgogCQkJICAgIGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApKQotCQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHNlbmQgV0VQIHN0YXRpYyBrZXkuXG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJDb3VsZCBub3Qgc2VuZCBXRVAgc3RhdGljIGtleS5cbiIpOwogCQl9CiAKIAkJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uCkBAIC0yODIsNyArMjI0LDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwpAQCAtMjk0LDcgKzIzNiw3IEBACiAJICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzICovCiAJcmV0ID0gaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBUWCBwb3dlciAoJWQpXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzA4LDI1ICsyNTAsMTEgQEAKIAlpd2xfY29tbWl0X3J4b24ocHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2J0X2NtZCBidF9jbWQgPSB7Ci0JCS5mbGFncyA9IDMsCi0JCS5sZWFkX3RpbWUgPSAweEFBLAotCQkubWF4X2tpbGwgPSAxLAotCQkua2lsbF9hY2tfbWFzayA9IDAsCi0JCS5raWxsX2N0c19tYXNrID0gMCwKLQl9OwotCi0JcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2J0X2NtZCksICZidF9jbWQpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAogCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CkBAIC0zMzcsNyArMjY1LDcgQEAKIAl9CiAKIAlpZiAocHJpdi0+ZnJhbWVzX2NvdW50KSB7Ci0JCUlXTF9XQVJOSU5HKCIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKKwkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAogCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAJCXByaXYtPmZyYW1lc19jb3VudCA9IDA7CiAJfQpAQCAtMzUwLDcgKzI3OCw3IEBACiAJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewogCQlmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKCpmcmFtZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWZyYW1lKSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOworCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0zODYsMzEgKzMxNCw2IEBACiAJcmV0dXJuIHByaXYtPmlic3NfYmVhY29uLT5sZW47CiB9CiAKLXN0YXRpYyB1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCBpOwotCWludCByYXRlX21hc2s7Ci0KLQkvKiBTZXQgcmF0ZSBtYXNrKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfUkFURVNfTUFTSzsKLQllbHNlCi0JCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX09GRE1fUkFURVNfTUFTSzsKLQotCS8qIEZpbmQgbG93ZXN0IHZhbGlkIHJhdGUgKi8KLQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWDsgaSAhPSBJV0xfUkFURV9JTlZBTElEOwotCQkJCQlpID0gaXdsX3JhdGVzW2ldLm5leHRfaWVlZSkgewotCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgaSkpCi0JCQlyZXR1cm4gaXdsX3JhdGVzW2ldLnBsY3A7Ci0JfQotCi0JLyogTm8gdmFsaWQgcmF0ZSB3YXMgZm91bmQuIEFzc2lnbiB0aGUgbG93ZXN0IG9uZSAqLwotCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCi0JCXJldHVybiBJV0xfUkFURV8xTV9QTENQOwotCWVsc2UKLQkJcmV0dXJuIElXTF9SQVRFXzZNX1BMQ1A7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXdsX2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpCiB7CkBAIC00NTIsNyArMzU1LDcgQEAKIAlmcmFtZSA9IGl3bF9nZXRfZnJlZV9mcmFtZShwcml2KTsKIAogCWlmICghZnJhbWUpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgogCQkJICAiY29tbWFuZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC00NjksNiArMzcyLDE1OSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQoreworCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOworCisJZG1hX2FkZHJfdCBhZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZ0Yi0+bG8pOworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkKKwkJYWRkciB8PQorCQkoKGRtYV9hZGRyX3QpKGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgJiAweEYpIDw8IDE2KSA8PCAxNjsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBpd2xfdGZkX3RiX2dldF9sZW4oc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQoreworCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgPj4gNDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGl3bF90ZmRfc2V0X3RiKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCwKKwkJCQkgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKwl1MTYgaGlfbl9sZW4gPSBsZW4gPDwgNDsKKworCXB1dF91bmFsaWduZWRfbGUzMihhZGRyLCAmdGItPmxvKTsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCisJCWhpX25fbGVuIHw9ICgoYWRkciA+PiAxNikgPj4gMTYpICYgMHhGOworCisJdGItPmhpX25fbGVuID0gY3B1X3RvX2xlMTYoaGlfbl9sZW4pOworCisJdGZkLT5udW1fdGJzID0gaWR4ICsgMTsKK30KKworc3RhdGljIGlubGluZSB1OCBpd2xfdGZkX2dldF9udW1fdGJzKHN0cnVjdCBpd2xfdGZkICp0ZmQpCit7CisJcmV0dXJuIHRmZC0+bnVtX3RicyAmIDB4MWY7Cit9CisKKy8qKgorICogaXdsX2h3X3R4cV9mcmVlX3RmZCAtIEZyZWUgYWxsIGNodW5rcyByZWZlcmVuY2VkIGJ5IFRGRCBbdHhxLT5xLnJlYWRfcHRyXQorICogQHByaXYgLSBkcml2ZXIgcHJpdmF0ZSBkYXRhCisgKiBAdHhxIC0gdHggcXVldWUKKyAqCisgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcworICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKKyAqLwordm9pZCBpd2xfaHdfdHhxX2ZyZWVfdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCXN0cnVjdCBpd2xfdGZkICp0ZmRfdG1wID0gKHN0cnVjdCBpd2xfdGZkICopdHhxLT50ZmRzOworCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisJaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOworCWludCBpOworCWludCBudW1fdGJzOworCisJdGZkID0gJnRmZF90bXBbaW5kZXhdOworCisJLyogU2FuaXR5IGNoZWNrIG9uIG51bWJlciBvZiBjaHVua3MgKi8KKwludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOworCisJaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgbnVtX3Ricyk7CisJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLworCQlyZXR1cm47CisJfQorCisJLyogVW5tYXAgdHhfY21kICovCisJaWYgKG51bV90YnMpCisJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAorCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAorCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKKwkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCisJZm9yIChpID0gMTsgaSA8IG51bV90YnM7IGkrKykgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwgaXdsX3RmZF90Yl9nZXRfYWRkcih0ZmQsIGkpLAorCQkJCWl3bF90ZmRfdGJfZ2V0X2xlbih0ZmQsIGkpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlpZiAodHhxLT50eGIpIHsKKwkJCWRldl9rZnJlZV9za2IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaSAtIDFdKTsKKwkJCXR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK2ludCBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCSBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sCisJCQkJIHU4IHJlc2V0LCB1OCBwYWQpCit7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkLCAqdGZkX3RtcDsKKwl1MzIgbnVtX3RiczsKKworCXEgPSAmdHhxLT5xOworCXRmZF90bXAgPSAoc3RydWN0IGl3bF90ZmQgKil0eHEtPnRmZHM7CisJdGZkID0gJnRmZF90bXBbcS0+d3JpdGVfcHRyXTsKKworCWlmIChyZXNldCkKKwkJbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKKworCW51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7CisKKwkvKiBFYWNoIFRGRCBjYW4gcG9pbnQgdG8gYSBtYXhpbXVtIDIwIFR4IGJ1ZmZlcnMgKi8KKwlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJCSAgSVdMX05VTV9PRl9UQlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlCVUdfT04oYWRkciAmIH5ETUFfQklUX01BU0soMzYpKTsKKwlpZiAodW5saWtlbHkoYWRkciAmIH5JV0xfVFhfRE1BX01BU0spKQorCQlJV0xfRVJSKHByaXYsICJVbmFsaWduZWQgYWRkcmVzcyA9ICVsbHhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7CisKKwlpd2xfdGZkX3NldF90Yih0ZmQsIG51bV90YnMsIGFkZHIsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgorICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCisgKgorICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCisgKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCisgKi8KK2ludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIENpcmN1bGFyIGJ1ZmZlciAoVEZEIHF1ZXVlIGluIERSQU0pIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAorCQkJICAgICB0eHEtPnEuZG1hX2FkZHIgPj4gOCk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBNaXNjLiBpbnRlcm5hbCBzdGF0ZSBhbmQgaGVscGVyIGZ1bmN0aW9ucwpAQCAtNDgyLDcgKzUzOCw3IEBACiAJc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiBcbiIpOwogCiAJaWYgKCFpd2xfY29uZi0+aXNfaHQpCiAJCXJldHVybjsKQEAgLTUyMCw5ICs1NzYsOSBAQAogCSAqLwogCiAJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX05PTkU7Ci0JaWYgKHByaXYtPmh3LT5jb25mLmh0LmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCWlmIChjb25mX2lzX2h0NDBfbWludXMoJnByaXYtPmh3LT5jb25mKSkKIAkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOwotCWVsc2UgaWYocHJpdi0+aHctPmNvbmYuaHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKKwllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cygmcHJpdi0+aHctPmNvbmYpKQogCQlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU7CiAKIAkvKiBJZiBubyBhYm92ZSBvciBiZWxvdyBjaGFubmVsIHN1cHBsaWVkIGRpc2FibGUgRkFUIGNoYW5uZWwgKi8KQEAgLTU0MiwzOSArNTk4LDcgQEAKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci19Ci0KLS8qCi0gKiBRb1MgIHN1cHBvcnQKLSovCi1zdGF0aWMgdm9pZCBpd2xfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpCi17Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAucXVldWVfcmVxdWVzdCAmJgotCSAgICAhcHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnR4b3BfcmVxdWVzdCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19UWE9QX1RZUEVfTVNLOwotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSzsKLQotCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PSBRT1NfUEFSQU1fRkxHX1RHTl9NU0s7Ci0KLQlpZiAoZm9yY2UgfHwgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAotCQkJCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUsCi0JCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7Ci0KLQkJaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZCksCi0JCQkJICAgICAgICZwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0sIE5VTEwpOwotCX0KKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQwOTYKQEAgLTU4OCw2ICs2MTIsOSBAQAogCQkJCQkvIE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CiAJbmV3X3ZhbCA9IGJlYWNvbl92YWwgLyBiZWFjb25fZmFjdG9yOwogCisJaWYgKCFuZXdfdmFsKQorCQluZXdfdmFsID0gTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTDsKKwogCXJldHVybiBuZXdfdmFsOwogfQogCkBAIC02MjQsMTE3ICs2NTEsMTYgQEAKIAlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwgPSBjcHVfdG9fbGUzMihpbnRlcnZhbF90bSAtIHJlbSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0FTU09DKCJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpLAogCQkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQotCQkgICAgfihSWE9OX0ZMR19CQU5EXzI0R19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sKLQkJICAgICAgfCBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCX0gZWxzZSB7Ci0JCS8qIENvcGllZCBmcm9tIGl3bF9wb3N0X2Fzc29jaWF0ZSgpICovCi0JCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQkJZWxzZQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0FVVE9fREVURUNUX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19DQ0tfTVNLOwotCX0KLX0KLQotLyoKLSAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQotICovCi1zdGF0aWMgdm9pZCBpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQotewotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfQVA7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0VTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfSUJTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0sgfAotCQkJCQkJICBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfU05JRkZFUjsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLIHwKLQkJICAgIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyB8IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0jaWYgMAotCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCi0JICogdGhhdCAqLwotCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotI2VuZGlmCi0KLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKLQkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwotCi0JaWYgKCFjaF9pbmZvKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCS8qCi0JICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUwotCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAotCSAqLwotCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKLQkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7Ci0JcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7Ci0KLQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOwotCi0JcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAotCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOwotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKLQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsX3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7CisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwogCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwpAQCAtNzQ1LDggKzY3MSw4IEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQlJV0xfV0FSTklORygiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtNzU1LDU0ICs2ODEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfc2V0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmh3ID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGk7Ci0KLQlodyA9IGl3bF9nZXRfaHdfbW9kZShwcml2LCBwcml2LT5iYW5kKTsKLQlpZiAoIWh3KSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7Ci0JCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQotCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOwotCX0KLQotCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAotCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKLQotCS8qCi0JICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKLQkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKLQkgKiBPRkRNCi0JICovCi0JaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgotCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLX0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogR2VuZXJpYyBSWCBoYW5kbGVyIGltcGxlbWVudGF0aW9ucwpAQCAtODE3LDE5ICs2OTUsMTkgQEAKIAogCXBhbGl2ZSA9ICZwa3QtPnUuYWxpdmVfZnJhbWU7CiAKLQlJV0xfREVCVUdfSU5GTygiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgogCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCiAJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAogCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CiAKIAlpZiAocGFsaXZlLT52ZXJfc3VidHlwZSA9PSBJTklUSUFMSVpFX1NVQlRZUEUpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmVfaW5pdCwKIAkJICAgICAgICZwa3QtPnUuYWxpdmVfZnJhbWUsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3ApKTsKIAkJcHdvcmsgPSAmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydDsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmUsICZwa3QtPnUuYWxpdmVfZnJhbWUsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwpAQCAtODQxLDU1ICs3MTksNyBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCBwd29yaywKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUpKTsKIAllbHNlCi0JCUlXTF9XQVJOSU5HKCJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfRVJST1IoIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCi0JCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKLQkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCi0JCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCi0JCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOwotfQotCi0jZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKLQotc3RhdGljIHZvaWQgaXdsX3J4X2NzYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0Jc3RydWN0IGl3bF9jc2Ffbm90aWZpY2F0aW9uICpjc2EgPSAmKHBrdC0+dS5jc2Ffbm90aWYpOwotCUlXTF9ERUJVR18xMUgoIkNTQSBub3RpZjogY2hhbm5lbCAlZCwgc3RhdHVzICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpLCBsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykpOwotCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9wbV9zbGVlcF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWCgic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworCQlJV0xfV0FSTihwcml2LCAidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTkwMiw3ICs3MzIsNyBAQAogCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKLQkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTUwLDcgKzc4MCw3IEBACiAJCShzdHJ1Y3QgaXdsNDk2NV9iZWFjb25fbm90aWYgKilwa3QtPnUucmF3OwogCXU4IHJhdGUgPSBpd2xfaHdfZ2V0X3JhdGUoYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5yYXRlX25fZmxhZ3MpOwogCi0JSVdMX0RFQlVHX1JYKCJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKKwlJV0xfREVCVUdfUlgocHJpdiwgImJlYWNvbiBzdGF0dXMgJXggcmV0cmllcyAlZCBpc3MgJWQgIgogCQkidHNmICVkICVkIHJhdGUgJWRcbiIsCiAJCWxlMzJfdG9fY3B1KGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIudS5zdGF0dXMpICYgVFhfU1RBVFVTX01TSywKIAkJYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5mYWlsdXJlX2ZyYW1lLApAQCAtOTczLDcgKzgwMyw3IEBACiAJdTMyIGZsYWdzID0gbGUzMl90b19jcHUocGt0LT51LmNhcmRfc3RhdGVfbm90aWYuZmxhZ3MpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcHJpdi0+c3RhdHVzOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAorCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKIAkJCSAgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAogCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIpOwogCkBAIC0xMDQ2LDExICs4NzYsNyBAQAogCQlnb3RvIGVycjsKIAogCWlmIChzcmMgPT0gSVdMX1BXUl9TUkNfVkFVWCkgewotCQl1MzIgdmFsOwotCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19QT1dFUl9TT1VSQ0UsCi0JCQkJCSAgICAmdmFsKTsKLQotCQlpZiAodmFsICYgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQpCisJCWlmIChwY2lfcG1lX2NhcGFibGUocHJpdi0+cGNpX2RldiwgUENJX0QzY29sZCkpCiAJCQlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCiAJCQkJCSAgICAgICBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJICAgICAgIH5BUE1HX1BTX0NUUkxfTVNLX1BXUl9TUkMpOwpAQCAtMTEzNSw3ICs5NjEsNyBAQAogCiAJLyogUnggaW50ZXJydXB0LCBidXQgbm90aGluZyBzZW50IGZyb20gdUNvZGUgKi8KIAlpZiAoaSA9PSByKQotCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOworCQlJV0xfREVCVUdfUlgocHJpdiwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKIAogCWlmIChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCiAJCWZpbGxfcnggPSAxOwpAQCAtMTE3NSwxMiArMTAwMSwxMiBAQAogCQkgKiAgIGhhbmRsZSB0aG9zZSB0aGF0IG5lZWQgaGFuZGxpbmcgdmlhIGZ1bmN0aW9uIGluCiAJCSAqICAgcnhfaGFuZGxlcnMgdGFibGUuICBTZWUgaXdsX3NldHVwX3J4X2hhbmRsZXJzKCkgKi8KIAkJaWYgKHByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0pIHsKLQkJCUlXTF9ERUJVRyhJV0xfRExfUlgsICJyID0gJWQsIGkgPSAlZCwgJXMsIDB4JTAyeFxuIiwgciwKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsCiAJCQkJaSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfUlgsCisJCQlJV0xfREVCVUdfUlgocHJpdiwKIAkJCQkiciAlZCBpICVkIE5vIGhhbmRsZXIgbmVlZGVkIGZvciAlcywgMHglMDJ4XG4iLAogCQkJCXIsIGksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksCiAJCQkJcGt0LT5oZHIuY21kKTsKQEAgLTExOTMsNyArMTAxOSw3IEBACiAJCQlpZiAocnhiICYmIHJ4Yi0+c2tiKQogCQkJCWl3bF90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKIAkJCWVsc2UKLQkJCQlJV0xfV0FSTklORygiQ2xhaW0gbnVsbCByeGI/XG4iKTsKKwkJCQlJV0xfV0FSTihwcml2LCAiQ2xhaW0gbnVsbCByeGI/XG4iKTsKIAkJfQogCiAJCS8qIEZvciBub3cgd2UganVzdCBkb24ndCByZS11c2UgYW55dGhpbmcuICBXZSBjYW4gdHdlYWsgdGhpcwpAQCAtMTIyOSwyNyArMTA1NSw2IEBACiAJaXdsX3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCi0JSVdMX0RFQlVHX1JBRElPKCJSWCBDT05GSUc6XG4iKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCi0JCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCi0JCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwotfQotI2VuZGlmCi0KIC8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTEyNTgsNDUgKzEwNjMsNiBAQAogCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwogfQogCi0vKioKLSAqIGl3bF9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCi0gKi8KLXN0YXRpYyB2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2xfZG93biAqLwotCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCi0JY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9GV19FUlJPUlMpIHsKLQkJaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKLQkJaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdik7Ci0JfQotI2VuZGlmCi0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7Ci0KLQkvKiBLZWVwIHRoZSByZXN0YXJ0IHByb2Nlc3MgZnJvbSB0cnlpbmcgdG8gc2VuZCBob3N0Ci0JICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIElOSVQgc3RhdHVzIGJpdCAqLwotCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwotCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0ZXX0VSUk9SUywKLQkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKLQotCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJCW1lbWNweSgmcHJpdi0+cmVjb3ZlcnlfcnhvbiwgJnByaXYtPmFjdGl2ZV9yeG9uLAotCQkJICAgICAgIHNpemVvZihwcml2LT5yZWNvdmVyeV9yeG9uKSk7Ci0JCQlwcml2LT5lcnJvcl9yZWNvdmVyaW5nID0gMTsKLQkJfQotCQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5yZXN0YXJ0X2Z3KQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNDEsNyArMTEwNyw3IEBACiAJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwogCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCUlXTF9ERUJVR19JU1IoImludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAorCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKIAkJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CiAJfQogI2VuZGlmCkBAIC0xMzU3LDcgKzExMjMsNyBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKQEAgLTEzNzUsMTIgKzExNDEsMTIgQEAKIAlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkKLQkJCUlXTF9ERUJVR19JU1IoIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCisJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgogCQkJCSAgICAgICJ0aGUgZnJhbWUvZnJhbWVzLlxuIik7CiAKIAkJLyogQWxpdmUgbm90aWZpY2F0aW9uIHZpYSBSeCBpbnRlcnJ1cHQgd2lsbCBkbyB0aGUgcmVhbCB3b3JrICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfQUxJVkUpCi0JCQlJV0xfREVCVUdfSVNSKCJBbGl2ZSBpbnRlcnJ1cHRcbiIpOworCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiQWxpdmUgaW50ZXJydXB0XG4iKTsKIAl9CiAjZW5kaWYKIAkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwpAQCAtMTM5MywxNyArMTE1OSwyMCBAQAogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKSkKIAkJCWh3X3JmX2tpbGwgPSAxOwogCi0JCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQkvKiBkcml2ZXIgb25seSBsb2FkcyB1Y29kZSBvbmNlIHNldHRpbmcgdGhlIGludGVyZmFjZSB1cC4KLQkJICogdGhlIGRyaXZlciBhcyB3ZWxsIHdvbid0IGFsbG93IGxvYWRpbmcgaWYgUkZLSUxMIGlzIHNldAotCQkgKiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXN0YXJ0IHRoZSBkcml2ZXIgZnJvbSB0aGlzIGhhbmRsZXIKKwkJICogdGhlIGRyaXZlciBhbGxvd3MgbG9hZGluZyB0aGUgdWNvZGUgZXZlbiBpZiB0aGUgcmFkaW8KKwkJICogaXMga2lsbGVkLiBIZW5jZSB1cGRhdGUgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgaGVyZS4gVGhlCisJCSAqIHJma2lsbCBoYW5kbGVyIHdpbGwgY2FyZSBhYm91dCByZXN0YXJ0aW5nIGlmIG5lZWRlZC4KIAkJICovCi0JCWlmICghaHdfcmZfa2lsbCAmJiAhdGVzdF9iaXQoU1RBVFVTX0FMSVZFLCAmcHJpdi0+c3RhdHVzKSkgewotCQkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQkJCWlmIChwcml2LT5pc19vcGVuICYmICFpd2xfaXNfcmZraWxsKHByaXYpKQotCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+dXApOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKKwkJCWlmIChod19yZl9raWxsKQorCQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCQkJZWxzZQorCQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwpOwogCQl9CiAKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9SRl9LSUxMOwpAQCAtMTQxMSwyMSArMTE4MCwyMSBAQAogCiAJLyogQ2hpcCBnb3QgdG9vIGhvdCBhbmQgc3RvcHBlZCBpdHNlbGYgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0NUX0tJTEwpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgQ1Qga2lsbCBlcnJvciBkZXRlY3RlZC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgQ1Qga2lsbCBlcnJvciBkZXRlY3RlZC5cbiIpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0NUX0tJTEw7CiAJfQogCiAJLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcgMHglWC5cbiIsCi0JCQkgIGludGEpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKKwkJCSIgUmVzdGFydGluZyAweCVYLlxuIiwgaW50YSk7CiAJCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1NXX0VSUjsKIAl9CiAKIAkvKiB1Q29kZSB3YWtlcyB1cCBhZnRlciBwb3dlci1kb3duIHNsZWVwICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9XQUtFVVApIHsKLQkJSVdMX0RFQlVHX0lTUigiV2FrZXVwIGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOwogCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKIAkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMF0pOwogCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsxXSk7CkBAIC0xNDQ2LDcgKzEyMTUsNyBAQAogCX0KIAogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJSVdMX0RFQlVHX0lTUigiVHggaW50ZXJydXB0XG4iKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiVHggaW50ZXJydXB0XG4iKTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9GSF9UWDsKIAkJLyogRkggZmluaXNoZWQgdG8gd3JpdGUsIHNlbmQgZXZlbnQgKi8KIAkJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAxOwpAQCAtMTQ1NCwxMiArMTIyMywxMiBAQAogCX0KIAogCWlmIChpbnRhICYgfmhhbmRsZWQpCi0JCUlXTF9FUlJPUigiVW5oYW5kbGVkIElOVEEgYml0cyAweCUwOHhcbiIsIGludGEgJiB+aGFuZGxlZCk7CisJCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwogCiAJaWYgKGludGEgJiB+Q1NSX0lOSV9TRVRfTUFTSykgewotCQlJV0xfV0FSTklORygiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCisJCUlXTF9XQVJOKHByaXYsICJEaXNhYmxlZCBJTlRBIGJpdHMgMHglMDh4IHdlcmUgcGVuZGluZ1xuIiwKIAkJCSBpbnRhICYgfkNTUl9JTklfU0VUX01BU0spOwotCQlJV0xfV0FSTklORygiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOworCQlJV0xfV0FSTihwcml2LCAiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOwogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwpAQCAtMTQ3Miw3MSArMTI0MSwxMyBAQAogCQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JCUlXTF9ERUJVR19JU1IoIkVuZCBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eCwgIgorCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKLQl1MzIgaW50YSwgaW50YV9tYXNrOwotCXUzMiBpbnRhX2ZoOwotCWlmICghcHJpdikKLQkJcmV0dXJuIElSUV9OT05FOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAotCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KLQkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgotCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLwotCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCi0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCi0JaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCi0JLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCi0JICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKLQkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLwotCWlmICghaW50YSAmJiAhaW50YV9maCkgewotCQlJV0xfREVCVUdfSVNSKCJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7Ci0JCWdvdG8gbm9uZTsKLQl9Ci0KLQlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKLQkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKLQkJICogYW4gaW50ZXJydXB0ICovCi0JCUlXTF9XQVJOSU5HKCJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOwotCQlnb3RvIHVucGx1Z2dlZDsKLQl9Ci0KLQlJV0xfREVCVUdfSVNSKCJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCi0JCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7Ci0KLQlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7Ci0KLQkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KLQlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLQotIHVucGx1Z2dlZDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gbm9uZToKLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiBJUlFfTk9ORTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwpAQCAtMTU4NCw3ICsxMjk1LDcgQEAKIAkJc3ByaW50ZihidWYsICIlcyVkJXMiLCBuYW1lX3ByZSwgaW5kZXgsICIudWNvZGUiKTsKIAkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmdWNvZGVfcmF3LCBidWYsICZwcml2LT5wY2lfZGV2LT5kZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6IFJlYXNvbiAlZFxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIiVzIGZpcm13YXJlIGZpbGUgcmVxIGZhaWxlZDogJWRcbiIsCiAJCQkJICBidWYsIHJldCk7CiAJCQlpZiAocmV0ID09IC1FTk9FTlQpCiAJCQkJY29udGludWU7CkBAIC0xNTkyLDkgKzEzMDMsMTIgQEAKIAkJCQlnb3RvIGVycm9yOwogCQl9IGVsc2UgewogCQkJaWYgKGluZGV4IDwgYXBpX21heCkKLQkJCQlJV0xfRVJST1IoIkxvYWRlZCBmaXJtd2FyZSAlcywgd2hpY2ggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAorCQkJCUlXTF9FUlIocHJpdiwgIkxvYWRlZCBmaXJtd2FyZSAlcywgIgorCQkJCQkid2hpY2ggaXMgZGVwcmVjYXRlZC4gIgorCQkJCQkiUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAogCQkJCQkgIGJ1ZiwgYXBpX21heCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCisKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKIAkJCQkgICAgICAgYnVmLCB1Y29kZV9yYXctPnNpemUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE2MDUsNyArMTMxOSw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KIAlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKLQkJSVdMX0VSUk9SKCJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOworCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTE2MjYsNyArMTM0MCw3IEBACiAJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLwogCiAJaWYgKGFwaV92ZXIgPCBhcGlfbWluIHx8IGFwaV92ZXIgPiBhcGlfbWF4KSB7Ci0JCUlXTF9FUlJPUigiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCisJCUlXTF9FUlIocHJpdiwgIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgogCQkJICAiRHJpdmVyIHN1cHBvcnRzIHYldSwgZmlybXdhcmUgaXMgdiV1LlxuIiwKIAkJCSAgYXBpX21heCwgYXBpX3Zlcik7CiAJCXByaXYtPnVjb2RlX3ZlciA9IDA7CkBAIC0xNjM0LDI4ICsxMzQ4LDI4IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChhcGlfdmVyICE9IGFwaV9tYXgpCi0JCUlXTF9FUlJPUigiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgdiV1LCAiCisJCUlXTF9FUlIocHJpdiwgIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkIHYldSwgIgogCQkJICAiZ290IHYldS4gTmV3IGZpcm13YXJlIGNhbiBiZSBvYnRhaW5lZCAiCiAJCQkgICJmcm9tIGh0dHA6Ly93d3cuaW50ZWxsaW51eHdpcmVsZXNzLm9yZy5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAotCQkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfTUlOT1IocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CisJSVdMX0lORk8ocHJpdiwgImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAorCSAgICAgICBJV0xfVUNPREVfTUFKT1IocHJpdi0+dWNvZGVfdmVyKSwKKwkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKKwkgICAgICAgSVdMX1VDT0RFX1NFUklBTChwcml2LT51Y29kZV92ZXIpKTsKIAotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAogCQkgICAgICAgcHJpdi0+dWNvZGVfdmVyKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5zdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgZGF0YSBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5pdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgZGF0YSBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5pdF9kYXRhX3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgYm9vdCBpbnN0IHNpemUgPSAldVxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCiAJCSAgICAgICBib290X3NpemUpOwogCiAJLyogVmVyaWZ5IHNpemUgb2YgZmlsZSB2cy4gaW1hZ2Ugc2l6ZSBpbmZvIGluIGZpbGUncyBoZWFkZXIgKi8KQEAgLTE2NjMsNyArMTM3Nyw3IEBACiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAogCQkJICAgICAgIChpbnQpdWNvZGVfcmF3LT5zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKQEAgLTE2NzEsMzYgKzEzODUsMzMgQEAKIAogCS8qIFZlcmlmeSB0aGF0IHVDb2RlIGltYWdlcyB3aWxsIGZpdCBpbiBjYXJkJ3MgU1JBTSAqLwogCWlmIChpbnN0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBpbnN0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAogCWlmIChkYXRhX3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkJZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJaWYgKGluaXRfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCSAgICAgIGluaXRfc2l6ZSk7CisJCUlXTF9JTkZPKHByaXYsICJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQkJaW5pdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJaWYgKGluaXRfZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkgICAgICBpbml0X2RhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChib290X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGJvb3QgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCSAgICAgIGJvb3Rfc2l6ZSk7CisJCUlXTF9JTkZPKHByaXYsICJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQkJYm9vdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC0xNzQ5LDE2ICsxNDYwLDE2IEBACiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbMF07CiAJbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBpbnN0ciBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgc3JjLCBsZW4pOwotCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCiAJCXByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCAodTMyKXByaXYtPnVjb2RlX2NvZGUucF9hZGRyKTsKIAogCS8qIFJ1bnRpbWUgZGF0YSAoMm5kIGJsb2NrKQogCSAqIE5PVEU6ICBDb3B5IGludG8gYmFja3VwIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW4gaXdsX3VwKCkgICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZV07CiAJbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyLCBzcmMsIGxlbik7CiAKQEAgLTE3NjYsNyArMTQ3Nyw3IEBACiAJaWYgKGluaXRfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47Ci0JCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICVaZFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAogCQkJCWxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOwogCX0KQEAgLTE3NzUsNyArMTQ4Niw3IEBACiAJaWYgKGluaXRfZGF0YV9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlWmRcbiIsCiAJCQkgICAgICAgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAl9CkBAIC0xNzgzLDcgKzE0OTQsNyBAQAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKIAkvKiBXZSBoYXZlIG91ciBjb3BpZXMgbm93LCBhbGxvdyBPUyByZWxlYXNlIGl0cyBjb3BpZXMgKi8KQEAgLTE3OTEsNyArMTUwMiw3IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfcGNpX2FsbG9jOgotCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAlyZXQgPSAtRU5PTUVNOwogCWl3bF9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIApAQCAtMTgxNSwxMiArMTUyNiwxMiBAQAogewogCWludCByZXQgPSAwOwogCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCiAJaWYgKHByaXYtPmNhcmRfYWxpdmUuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMTgzMCwxNSArMTU0MSwxNSBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwKLQkJCSAgICByZXQpOworCQlJV0xfV0FSTihwcml2LAorCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwgcmV0KTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMTg1NiwxMyArMTU2NywxMyBAQAogCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmVfcnhvbiA9CiAJCQkJKHN0cnVjdCBpd2xfcnhvbl9jbWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0KLQkJbWVtY3B5KCZwcml2LT5zdGFnaW5nX3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJICAgICAgIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKKwkJLyogYXBwbHkgYW55IGNoYW5nZXMgaW4gc3RhZ2luZyAqLworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCX0gZWxzZSB7CiAJCS8qIEluaXRpYWxpemUgb3VyIHJ4X2NvbmZpZyBkYXRhICovCiAJCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIHByaXYtPml3X21vZGUpOworCQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CiAJCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCX0KIApAQCAtMTg3OSw3ICsxNTkwLDcgQEAKIAogCWl3bF9sZWRzX3JlZ2lzdGVyKHByaXYpOwogCi0JSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOwogCXNldF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTE5MTMsNyArMTYyNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKLQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKIAlpZiAoIWV4aXRfcGVuZGluZykKIAkJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTIwMjQsMTIgKzE3MzUsMTIgQEAKIAlpbnQgcmV0OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOworCQlJV0xfV0FSTihwcml2LCAiRXhpdCBwZW5kaW5nOyB3aWxsIG5vdCBicmluZyB0aGUgTklDIHVwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKCFwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIgfHwgIXByaXYtPnVjb2RlX2RhdGEudl9hZGRyKSB7Ci0JCUlXTF9FUlJPUigidWNvZGUgbm90IGF2YWlsYWJsZSBmb3IgZGV2aWNlIGJyaW5ndXBcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjA0MSw3ICsxNzUyLDcgQEAKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQkJSVdMX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5ICVzIFJGIEtpbGwgc3dpdGNoXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgJXMgUkYgS2lsbCBzd2l0Y2hcbiIsCiAJCSAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPyAiSFciIDogIlNXIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTIwNTAsNyArMTc2MSw3IEBACiAKIAlyZXQgPSBpd2xfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMDgzLDcgKzE3OTQsOCBAQAogCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLAorCQkJCXJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMDkzLDcgKzE4MDUsNyBAQAogCQkvKiBzdGFydCBjYXJkOyAiaW5pdGlhbGl6ZSIgd2lsbCBsb2FkIHJ1bnRpbWUgdWNvZGUgKi8KIAkJaXdsX25pY19zdGFydChwcml2KTsKIAotCQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMTA0LDcgKzE4MTYsNyBAQAogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMjE0MSw0MCArMTg1Myw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCByZl9raWxsKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKCFpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwKLQkJCSAgIkhXIGFuZC9vciBTVyBSRiBLaWxsIG5vIGxvbmdlciBhY3RpdmUsIHJlc3RhcnRpbmcgIgotCQkJICAiZGV2aWNlXG4iKTsKLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfSBlbHNlIHsKLQkJLyogbWFrZSBzdXJlIG1hYzgwMjExIHN0b3Agc2VuZGluZyBUeCBmcmFtZSAqLwotCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpCi0JCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCi0JCQkJCSAgImRpc2FibGVkIGJ5IFNXIHN3aXRjaFxuIik7Ci0JCWVsc2UKLQkJCUlXTF9XQVJOSU5HKCJSYWRpbyBGcmVxdWVuY3kgS2lsbCBTd2l0Y2ggaXMgT246XG4iCi0JCQkJICAgICJLaWxsIHN3aXRjaCBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yICIKLQkJCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX2JnX3J1bl90aW1lX2NhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCkBAIC0yMjQ0LDExICsxOTIyLDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCUlXTF9FUlJPUigiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOworCQlJV0xfRVJSKHByaXYsICIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfREVCVUdfQVNTT0MoIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKTsKIAogCkBAIC0yMjcxLDcgKzE5NDksNyBAQAogCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCiAJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCWlmIChyZXQpCi0JCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwpAQCAtMjI4MSw3ICsxOTU5LDcgQEAKIAlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CiAJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gY3B1X3RvX2xlMTYocHJpdi0+YXNzb2NfaWQpOwogCi0JSVdMX0RFQlVHX0FTU09DKCJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YmVhY29uX2ludCk7CiAKIAlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTIzMTcsNyArMTk5NSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAorCQlJV0xfRVJSKHByaXYsICIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAogCQkJICBfX2Z1bmNfXywgcHJpdi0+aXdfbW9kZSk7CiAJCWJyZWFrOwogCX0KQEAgLTIzNTMsMzAgKzIwMzEsOCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7Ci0JdTE2IHBjaV9jbWQ7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwcml2LT5wY2lfZGV2KSkgewotCQlJV0xfRVJST1IoIkZhaWwgdG8gcGNpX2VuYWJsZV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyBpZiBuZWVkZWQ6IGh3IGJ1ZyB3L2EgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwotCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKSB7Ci0JCXBjaV9jbWQgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKLQl9Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3IsIElSUUZfU0hBUkVELAotCQkJICBEUlZfTkFNRSwgcHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOwotCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMjM4OCw5ICsyMDQ0LDkgQEAKIAlpZiAoIXByaXYtPnVjb2RlX2NvZGUubGVuKSB7CiAJCXJldCA9IGl3bF9yZWFkX3Vjb2RlKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgcmVhZCBtaWNyb2NvZGU6ICVkXG4iLCByZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTI0MDEsMTIgKzIwNTcsMTIgQEAKIAlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAogCWlmIChyZXQpCi0JCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCiAJCWdvdG8gb3V0OwogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0IFVQIHdvcmsgZG9uZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydCBVUCB3b3JrIGRvbmUuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwpAQCAtMjQxOCwzNiArMjA3NCwyNiBAQAogCQkJVUNPREVfUkVBRFlfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCisJCQlJV0xfRVJSKHByaXYsICJTVEFSVF9BTElWRSB0aW1lb3V0IGFmdGVyICVkbXMuXG4iLAogCQkJCWppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAl9CiAKIG91dDoKIAlwcml2LT5pc19vcGVuID0gMTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKLQotb3V0X3JlbGVhc2VfaXJxOgotCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7Ci1vdXRfZGlzYWJsZV9tc2k6Ci0JcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwcml2LT5wY2lfZGV2KTsKLQlwcml2LT5pc19vcGVuID0gMDsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gZmFpbGVkXG4iKTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghcHJpdi0+aXNfb3BlbikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2tpcFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBza2lwXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQ2NSwyNyArMjExMSwyNyBAQAogCWl3bF9kb3duKHByaXYpOwogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX3NhdmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJLyogZW5hYmxlIGludGVycnVwdHMgYWdhaW4gaW4gb3JkZXIgdG8gcmVjZWl2ZSByZmtpbGwgY2hhbmdlcyAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bF9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDRFVNUCgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJlbnRlclxuIik7CiAKLQlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAorCUlXTF9ERUJVR19UWChwcml2LCAiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCiAJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAogCWlmIChpd2xfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQlJV0xfREVCVUdfTUFDRFVNUCgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMjQ5NSwxMCArMjE0MSwxMCBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKIAogCWlmIChwcml2LT52aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIApAQCAtMjUxMSw3ICsyMTU3LDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJTZXQgJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiU2V0ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwogCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCkBAIC0yNTIxLDcgKzIxNjcsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUzNywxMTcgKzIxODMsMTIyIEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IHJldCA9IDA7Ci0JdTE2IGNoYW5uZWw7CisJdTE2IGNoOworCWludCBzY2FuX2FjdGl2ZSA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7Ci0KLQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCA9IGNvbmYtPmh0LmVuYWJsZWQ7Ci0KLQlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJiBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGLUtJTEwgLSB3YWl0aW5nIGZvciB1Q29kZVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkKLQkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKLQotCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkIGNoYW5nZWQgMHglWFxuIiwKKwkJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNoYW5nZWQpOwogCiAJaWYgKHVubGlrZWx5KCFwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGVfaHdfc2NhbiAmJgotCQkgICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBzY2FubmluZ1xuIik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gMDsKKwkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7CisJCXNjYW5fYWN0aXZlID0gMTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAl9CiAKLQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY2hhbm5lbCk7Ci0JaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKworCS8qIGR1cmluZyBzY2FubmluZyBtYWM4MDIxMSB3aWxsIGRlbGF5IGNoYW5uZWwgc2V0dGluZyB1bnRpbAorCSAqIHNjYW4gZmluaXNoIHdpdGggY2hhbmdlZCA9IDAKKwkgKi8KKwlpZiAoIWNoYW5nZWQgfHwgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpIHsKKwkJaWYgKHNjYW5fYWN0aXZlKQorCQkJZ290byBzZXRfY2hfb3V0OworCisJCWNoID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsIGNoKTsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHNldF9jaF9vdXQ7CisJCX0KKworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCQkJIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgeworCQkJSVdMX0VSUihwcml2LCAiY2hhbm5lbCAlZCBpbiBiYW5kICVkIG5vdCAiCisJCQkJIklCU1MgY2hhbm5lbFxuIiwKKwkJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBzZXRfY2hfb3V0OworCQl9CisKKwkJcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKworCQkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCisJCSAqIGZyb20gYW55IGh0IHJlbGF0ZWQgaW5mbyBzaW5jZSAyLjQgZG9lcyBub3QKKwkJICogc3VwcG9ydCBodCAqLworCQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSAhPSBjaCkpCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOworCisJCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOworCisJCWl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKyBzZXRfY2hfb3V0OgorCQkvKiBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHJhdGUgbWFzayBjYW4gYmUgZGlmZmVyZW50CisJCSAqIGZvciBlYWNoIGJhbmQ7IHNpbmNlIHRoZSBiYW5kIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0CisJCSAqIHRoZSByYXRlIG1hc2sgdG8gd2hhdCBtYWM4MDIxMSBsaXN0cyAqLworCQlpd2xfc2V0X3JhdGUocHJpdik7CiAJfQogCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgewotCQlJV0xfRVJST1IoImNoYW5uZWwgJWQgaW4gYmFuZCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAotCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9JTkRFWF8zKTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX01PREVfQ0FNKTsKKwkJaWYgKHJldCkKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiVFggUG93ZXIgb2xkPSVkIG5ldz0lZFxuIiwKKwkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCBjb25mLT5wb3dlcl9sZXZlbCk7CiAKLQotCS8qIGlmIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBodCB0byAyLjQgY2xlYXIgZmxhZ3MKLQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90Ci0JICogc3VwcG9ydCBodCAqLwotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpICE9IGNoYW5uZWwpCi0jaWZkZWYgSUVFRTgwMjExX0NPTkZfQ0hBTk5FTF9TV0lUQ0gKLQkgICAgJiYgIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5ORUxfU1dJVENIKQotI2VuZGlmCi0JKQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOwotCi0JaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbCk7Ci0KLQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCi0JLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAotCSAqIGZvciBlYWNoIGJhbmQ7IHNpbmNlIHRoZSBiYW5kIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0Ci0JICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCi0JaXdsX3NldF9yYXRlKHByaXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgSUVFRTgwMjExX0NPTkZfQ0hBTk5FTF9TV0lUQ0gKLQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOTkVMX1NXSVRDSCkgewotCQlpd2xfaHdfY2hhbm5lbF9zd2l0Y2gocHJpdiwgY29uZi0+Y2hhbm5lbCk7Ci0JCWdvdG8gb3V0OworCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7CiAJfQotI2VuZGlmCisKKwkvKiBjYWxsIHRvIGVuc3VyZSB0aGF0IDQ5NjUgcnhfY2hhaW4gaXMgc2V0IHByb3Blcmx5IGluIG1vbml0b3IgbW9kZSAqLworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKKwkJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYKKwkJCWl3bF9yYWRpb19raWxsX3N3X2VuYWJsZV9yYWRpbyhwcml2KSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSAiCisJCQkJCQkid2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpCisJCQlpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHByaXYpOworCX0KIAogCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7Ci0JCXJldCA9IC1FSU87CisJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQotCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfSU5ERVhfMyk7Ci0JZWxzZQotCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTU9ERV9DQU0pOwotCWlmIChyZXQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIlRYIFBvd2VyIG9sZD0lZCBuZXc9JWRcbiIsCi0JCQkgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgY29uZi0+cG93ZXJfbGV2ZWwpOwotCi0JaXdsX3NldF90eF9wb3dlcihwcml2LCBjb25mLT5wb3dlcl9sZXZlbCwgZmFsc2UpOwotCi0JaXdsX3NldF9yYXRlKHByaXYpOworCWlmIChzY2FuX2FjdGl2ZSkKKwkJZ290byBvdXQ7CiAKIAlpZiAobWVtY21wKCZwcml2LT5hY3RpdmVfcnhvbiwKIAkJICAgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpKQogCQlpd2xfY29tbWl0X3J4b24ocHJpdik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiAKIG91dDoKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjY3Miw3ICsyMzIzLDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCQlzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCQlpZiAocmV0KQotCQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkJCSJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAkJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwpAQCAtMjcyNiw3ICsyMzc3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAocHJpdi0+dmlmICE9IHZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNzQ4LDcgKzIzOTksNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChjb25mLT5ic3NpZCkKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQ6ICVwTVxuIiwgY29uZi0+YnNzaWQpOwogCiAvKgogICogdmVyeSBkdWJpb3VzIGNvZGUgd2FzIGhlcmU7IHRoZSBwcm9iZSBmaWx0ZXJpbmcgZmxhZyBpcyBuZXZlciBzZXQ6CkBAIC0yNzYxLDcgKzI0MTIsNyBAQAogCQlpZiAoIWNvbmYtPmJzc2lkKSB7CiAJCQljb25mLT5ic3NpZCA9IHByaXYtPm1hY19hZGRyOwogCQkJbWVtY3B5KHByaXYtPmJzc2lkLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZCB3YXMgc2V0IHRvOiAlcE1cbiIsCisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKIAkJCQkJICAgY29uZi0+YnNzaWQpOwogCQl9CiAJCWlmIChwcml2LT5pYnNzX2JlYWNvbikKQEAgLTI3NzgsOSArMjQyOSw5IEBACiAJCS8qIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIEhXIHNjYW4gZ29pbmcgb24gaW4gdGhlIGJhY2tncm91bmQKIAkJICogdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBpdCBlbHNlIHRoZSBSWE9OIGJlbG93IHdpbGwgZmFpbC4gKi8KIAkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgIgorCQkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCiAJCQkJICAgICJhZnRlciAxMDBtc1xuIik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KQEAgLTI4MDgsNjQgKzI0NTksMTggQEAKIAl9CiAKICBkb25lOgotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlfX2xlMzIgKmZpbHRlcl9mbGFncyA9ICZwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJFbnRlcjogY2hhbmdlZDogMHgleCwgdG90YWw6IDB4JXhcbiIsCi0JCQljaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9NSVNDX0lOX0JTUykpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX1BST01JU0NfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSzsKLQl9Ci0KLQkvKiBXZSBhdm9pZCBpd2xfY29tbWl0X3J4b24gaGVyZSB0byBjb21taXQgdGhlIG5ldyBmaWx0ZXIgZmxhZ3MKLQkgKiBzaW5jZSBtYWM4MDIxMSB3aWxsIGNhbGwgaWVlZTgwMjExX2h3X2NvbmZpZyBpbW1lZGlhdGVseS4KLQkgKiAobWNfbGlzdCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSkuIE90aGVyd2lzZSwgd2UgbmVlZCB0bwotCSAqIHF1ZXVlIGEgYmFja2dyb3VuZCBpd2xfY29tbWl0X3J4b24gd29yay4KLQkgKi8KLQotCSp0b3RhbF9mbGFncyAmPSBGSUZfT1RIRVJfQlNTIHwgRklGX0FMTE1VTFRJIHwgRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0NPTlRST0w7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTI4ODAsNyArMjQ4NSw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIH0KIApAQCAtMjg5MiwxMCArMjQ5NywxMCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9QUkVBTUJMRSAlZFxuIiwKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfUFJFQU1CTEUgJWRcbiIsCiAJCQkJICAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKQEAgLTI5MDQsNyArMjUwOSw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKIAkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QgJiYgKHByaXYtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwogCQllbHNlCkBAIC0yOTE3LDcgKzI1MjIsNyBAQAogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKIAkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkCiAJCSAqIG5ldmVyIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLwogCQlpZiAoV0FSTl9PTl9PTkNFKGluX2ludGVycnVwdCgpKSkKQEAgLTI5MzksMTA4ICsyNTQ0LDQ5IEBACiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPmFzc29jX2lkID0gMDsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQl9CiAJfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX2lkKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CiAJCQlpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCX0KIAogfQogCi1zdGF0aWMgaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJcmV0ID0gLUVJTzsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogV2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kLgotCSAqIEF2b2lkIHNjYW5uaW5nIGR1cmluZyBwb3NzaWJsZSBFQVBPTCBleGNoYW5nZSwgcmV0dXJuCi0JICogc3VjY2VzcyBpbW1lZGlhdGVseS4KLQkgKi8KLQlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKLQkgICAgdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBuZXh0IHNjYW4gcGVyaW9kXG4iKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLwotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JaWYgKHNzaWRfbGVuKSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICBtaW5fdCh1OCwgc3NpZF9sZW4sIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwotCX0gZWxzZSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDA7Ci0JfQotCi0JcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGNvbnN0IHU4ICphZGRyLAogCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KQogewogCiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpd2xfdXBkYXRlX3RraXBfa2V5KHByaXYsIGtleWNvbmYsIGFkZHIsIGl2MzIsIHBoYXNlMWtleSk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2xfbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTggc3RhX2lkID0gSVdMX0lOVkFMSURfU1RBVElPTjsKLQl1OCBpc19kZWZhdWx0X3dlcF9rZXkgPSAwOworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQ7CisJdTggc3RhX2lkOworCWJvb2wgaXNfZGVmYXVsdF93ZXBfa2V5ID0gZmFsc2U7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmIChwcml2LT5od19wYXJhbXMuc3dfY3J5cHRvKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0KLQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpKQotCQkvKiBvbmx5IHN1cHBvcnQgcGFpcndpc2Uga2V5cyAqLwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogaXdsX2JjYXN0X2FkZHI7CiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCiAJCQkJICAgYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMDcwLDcgKzI2MTYsNyBAQAogCQllbHNlCiAJCQlyZXQgPSBpd2xfc2V0X2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOgogCQlpZiAoaXNfZGVmYXVsdF93ZXBfa2V5KQpAQCAtMzA3OCwxMyArMjYyNCwxMyBAQAogCQllbHNlCiAJCQlyZXQgPSBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA5NiwxNSArMjY0MiwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHE7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHF1ZXVlID49IEFDX05VTSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcXVldWUgPj0gQUNfTlVNICVkXG4iLCBxdWV1ZSk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMTI4LDcgKzI2NzQsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMzcsOCArMjY4Myw5IEBACiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CiAKLQlJV0xfREVCVUdfSFQoIkEtTVBEVSBhY3Rpb24gb24gYWRkciAlcE0gdGlkICVkXG4iLAorCUlXTF9ERUJVR19IVChwcml2LCAiQS1NUERVIGFjdGlvbiBvbiBhZGRyICVwTSB0aWQgJWRcbiIsCiAJCSAgICAgc3RhLT5hZGRyLCB0aWQpOwogCiAJaWYgKCEocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pKQpAQCAtMzE0NiwxOSArMjY5MywyNyBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKLQkJSVdMX0RFQlVHX0hUKCJzdGFydCBSeFxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAic3RhcnQgUnhcbiIpOwogCQlyZXR1cm4gaXdsX3N0YV9yeF9hZ2dfc3RhcnQocHJpdiwgc3RhLT5hZGRyLCB0aWQsICpzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBSeFxuIik7Ci0JCXJldHVybiBpd2xfc3RhX3J4X2FnZ19zdG9wKHByaXYsIHN0YS0+YWRkciwgdGlkKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdG9wIFJ4XG4iKTsKKwkJcmV0ID0gaXdsX3N0YV9yeF9hZ2dfc3RvcChwcml2LCBzdGEtPmFkZHIsIHRpZCk7CisJCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gcmV0OwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFR4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0YXJ0KHByaXYsIHN0YS0+YWRkciwgdGlkLCBzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBUeFxuIik7Ci0JCXJldHVybiBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOworCQlJV0xfREVCVUdfSFQocHJpdiwgInN0b3AgVHhcbiIpOworCQlyZXQgPSBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOworCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIHJldDsKIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSFQoInVua25vd25cbiIpOworCQlJV0xfREVCVUdfSFQocHJpdiwgInVua25vd25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQpAQCAtMzE3NCwxMCArMjcyOSwxMCBAQAogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMxOTUsNyArMjc1MCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjA2LDggKzI3NjEsOCBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCiAJcHJpdiA9IGh3LT5wcml2OwotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjE4LDcgKzI3NzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCW1lbXNldCgmcHJpdi0+Y3VycmVudF9odF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2h0X2luZm8pKTsKQEAgLTMyNDUsNyArMjgwMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KQEAgLTMyNzQsNyArMjgyOSw3IEBACiAJCQkJCQkgICAgIElFRUU4MDIxMV9DSEFOX1JBREFSKSkKIAkJCQlpd2xfcG93ZXJfZGlzYWJsZV9tYW5hZ2VtZW50KHByaXYsIDMwMDApOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMzI4Myw3ICsyODM4LDcgQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzI5MiwxNSArMjg0NywxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTY0IHRpbWVzdGFtcDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IElCU1NcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMzMTUsNyArMjg3MCw3IEBACiAJdGltZXN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CiAJcHJpdi0+dGltZXN0YW1wID0gbGU2NF90b19jcHUodGltZXN0YW1wKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWl3bF9yZXNldF9xb3MocHJpdik7CkBAIC0zMzU5LDggKzI5MTQsNyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9FUlIocHJpdiwgIiVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwogCkBAIC0zNDM5LDggKzI5OTMsNyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7CiAKQEAgLTM0NzMsOSArMzAyNiw5IEBACiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncykgIT0gZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0IHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsIGZsYWdzKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXQgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwgZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCQkJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogCQl9CkBAIC0zNTEyLDkgKzMwNjUsOSBAQAogCWlmIChsZTMyX3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzKSAhPSBmaWx0ZXJfZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgogCQkJCSAgICAgICAiMHglMDRYXG4iLCBmaWx0ZXJfZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9CiAJCQkJY3B1X3RvX2xlMzIoZmlsdGVyX2ZsYWdzKTsKQEAgLTM1MjksMzEgKzMwODIsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGZpbHRlcl9mbGFncywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmlsdGVyX2ZsYWdzLAogCQkgICBzdG9yZV9maWx0ZXJfZmxhZ3MpOwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9yZXRyeV9yYXRlKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWxvbmcgdmFsOwotCWludCByZXQgID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHJldDsKLQotCXByaXYtPnJldHJ5X3JhdGUgPSAodmFsID4gMCkgPyB2YWwgOiAxOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHByaXYtPnJldHJ5X3JhdGUpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmV0cnlfcmF0ZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcmV0cnlfcmF0ZSwKLQkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7Ci0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTM1NjUsMTggKzMwOTMsMTMgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtb2RlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY291bnQ7CkBAIC0zNjU2LDE2ICszMTc5LDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHN0YXRpc3RpY3MsIFNfSVJVR08sIHNob3dfc3RhdGlzdGljcywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzY3NSw3ICszMTg4LDcgQEAKIAogc3RhdGljIHZvaWQgaXdsX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOworCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTM3MTksOSArMzIzMiw3IEBACiAJJmRldl9hdHRyX2ZsYWdzLmF0dHIsCiAJJmRldl9hdHRyX2ZpbHRlcl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9wb3dlcl9sZXZlbC5hdHRyLAotCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKLQkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3RlbXBlcmF0dXJlLmF0dHIsCiAJJmRldl9hdHRyX3R4X3Bvd2VyLmF0dHIsCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTM3NjQsNiArMzI3NSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBwY2lfY21kOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDEuIEFsbG9jYXRpbmcgSFcgZGF0YQpAQCAtMzc4OCw3ICszMzAwLDcgQEAKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CiAJcHJpdi0+Y2ZnID0gY2ZnOwogCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogCkBAIC0zODE2LDggKzMzMjgsNyBAQAogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQkvKiBib3RoIGF0dGVtcHRzIGZhaWxlZDogKi8KIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAotCQkJCURSVl9OQU1FKTsKKwkJCUlXTF9XQVJOKHByaXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJCX0KIAl9CkBAIC0zODM4LDEzICszMzQ5LDEyIEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOwogCiAJaXdsX2h3X2RldGVjdChwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlcyBSRVY9MHglWFxuIiwKKwlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzIFJFVj0weCVYXG4iLAogCQlwcml2LT5jZmctPm5hbWUsIHByaXYtPmh3X3Jldik7CiAKIAkvKiBXZSBkaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0zODU0LDcgKzMzNjQsNyBAQAogCS8qIGFtcCBpbml0ICovCiAJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCBBUE1HXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCS8qKioqKioqKioqKioqKioqKgpAQCAtMzg2Myw3ICszMzczLDcgQEAKIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KIAllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCWVyciA9IGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihwcml2KTsKQEAgLTM4NzIsMTQgKzMzODIsMTQgQEAKIAogCS8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi8KIAlpd2xfZWVwcm9tX2dldF9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cwogCSAqKioqKioqKioqKioqKioqKioqKioqKiovCiAJaWYgKGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKIAkJZ290byBvdXRfZnJlZV9lZXByb207CiAJfQogCkBAIC0zODk5LDcgKzM0MDksNyBAQAogCS8qIERpc2FibGUgcmFkaW8gKFNXIFJGIEtJTEwpIHZpYSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIGRyaXZlciAqLwogCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGUpIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCUlXTF9ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioKQEAgLTM5MDksMzggKzM0MTksNTcgQEAKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAorCXBjaV9lbmFibGVfbXNpKHByaXYtPnBjaV9kZXYpOworCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2xfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJWX05BTUUsIHByaXYpOworCWlmIChlcnIpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CisJCWdvdG8gb3V0X2Rpc2FibGVfbXNpOworCX0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF91bmluaXRfZHJ2OworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCi0KIAlpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQkvKioqKioqKioqKioqKioqKioqKioKLQkgKiA5LiBDb25jbHVkZQotCSAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqIDEwLiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKKwkgKiA5LiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKKwkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOworCX0KKworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwogCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwogCiAJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisKKwkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLworCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJiBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKKwkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwllbHNlCisJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCiAJZXJyID0gaXdsX3Jma2lsbF9pbml0KHByaXYpOwogCWlmIChlcnIpCi0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzk0OCw3ICszNDc3LDEwIEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2xfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfdW5pbml0X2RydjoKKyBvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKKyBvdXRfZGlzYWJsZV9tc2k6CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwogIG91dF9mcmVlX2VlcHJvbToKIAlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CkBAIC0zOTczLDcgKzM1MDUsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CkBAIC00MDE5LDYgKzM1NTEsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDA0NCwxOSArMzU3OCw4IEBACiAJCXByaXYtPmlzX29wZW4gPSAxOwogCX0KIAotCS8qIHBjaSBkcml2ZXIgYXNzdW1lcyBzdGF0ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogcGNpIHN0YXRlIGlzIHNhdmVkIGFuZCBkZXZpY2UgZGlzYWJsZWQgd2hlbiBpbnRlcmZhY2UgaXMKLQkgKiBzdG9wcGVkLCBzbyBhdCB0aGlzIHRpbWUgcGNpIGRldmljZSB3aWxsIGFsd2F5cyBiZSBkaXNhYmxlZCAtCi0JICogd2hldGhlciBpbnRlcmZhY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90LiBzYXZpbmcgcGNpIHN0YXRlIG5vdyB3aWxsCi0JICogY2F1c2Ugc2F2ZWQgc3RhdGUgYmUgdGhhdCBvZiBhIGRpc2FibGVkIGRldmljZSwgd2hpY2ggd2lsbCBjYXVzZQotCSAqIHByb2JsZW1zIGR1cmluZyByZXN1bWUgaW4gdGhhdCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgZGlzYWJsZWQgZGV2aWNlLgotCSAqCi0JICogaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBzYXZlZCBzdGF0ZSAoZnJvbSB3aGVuIGludGVyZmFjZSB3YXMKLQkgKiBzdG9wcGVkKSBpcyB2YWxpZC4gaWYgaW50ZXJmYWNlIHdhcyBuZXZlciB1cCBhdCB0aW1lIG9mIHN1c3BlbmQKLQkgKiB0aGVuIHRoZSBzYXZlZCBzdGF0ZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGl0IHdhcyBzYXZlZCBkdXJpbmcKLQkgKiAucHJvYmUuICovCi0JcGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwotCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwpAQCAtNDA2NSw4ICszNTg4LDE0IEBACiBzdGF0aWMgaW50IGl3bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bF9tYWNfc3RhcnQocHJpdi0+aHcpOwpAQCAtNDEwNyw2ICszNjM2LDIxIEBACiAvKiA1MTUwIFdpZmkvV2lNYXggKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNDLCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNELCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKKy8qIDYwMDAvNjA1MCBTZXJpZXMgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDExMDIsIGl3bDYwMDBfMmFnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTExMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTIyLCBpd2w2MDAwXzJhZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJCLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOCwgUENJX0FOWV9JRCwgaXdsNjAwMF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NiwgUENJX0FOWV9JRCwgaXdsNjA1MF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODcsIFBDSV9BTllfSUQsIGl3bDYwNTBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg4LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4OSwgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAorLyogMTAwMCBTZXJpZXMgV2lGaSAqLworCXtJV0xfUENJX0RFVklDRSgweDAwODMsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODQsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAogI2VuZGlmIC8qIENPTkZJR19JV0w1MDAwICovCiAKIAl7MH0KQEAgLTQxMzMsMTMgKzM2NzcsMTQgQEAKIAogCXJldCA9IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggZjgzNmVjYy4uNzM1ZjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCXJldHVybiAwOwogZXJyOgotCUlXTF9FUlJPUigiRXJyb3IgJWQgaXRlcmF0aW9uICVkXG4iLCByZXQsIGkpOworCUlXTF9FUlIocHJpdiwgIkVycm9yICVkIGl0ZXJhdGlvbiAlZFxuIiwgcmV0LCBpKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQl2YWwgPSBkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldOwogCQlzaWxlbmNlX3JlZiA9IG1heChzaWxlbmNlX3JlZiwgdmFsKTsKIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCiAJCQlzaWxlbmNlX3Jzc2lfYSwgc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jLAogCQkJc2lsZW5jZV9yZWYpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKIAltYXhfbnJnX2NjayArPSA2OwogCi0JSVdMX0RFQlVHX0NBTElCKCJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCiAJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKIAkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKIApAQCAtMjM2LDE1ICsyMzYsMTUgQEAKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSsrOwogCWVsc2UKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSA9IDA7Ci0JSVdMX0RFQlVHX0NBTElCKCJjb25zZWN1dGl2ZSBiY25zIHdpdGggZmV3IGZhbHNlIGFsYXJtcyA9ICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY29uc2VjdXRpdmUgYmNucyB3aXRoIGZldyBmYWxzZSBhbGFybXMgPSAldVxuIiwKIAkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOwogCiAJLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLwogCWlmICgoZmFsc2VfYWxhcm1zID4gbWF4X2ZhbHNlX2FsYXJtcykgJiYKIAkJKGRhdGEtPmF1dG9fY29ycl9jY2sgPiBBVVRPX0NPUlJfTUFYX1RIX0NDSykpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXVcbiIsCiAJCSAgICAgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKLQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gcmVkdWNpbmcgc2Vuc2l0aXZpdHlcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiByZWR1Y2luZyBzZW5zaXRpdml0eVxuIik7CiAJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOwogCQkvKiBTdG9yZSBmb3IgImZld2VyIHRoYW4gZGVzaXJlZCIgb24gbGF0ZXIgYmVhY29uICovCiAJCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gKHMzMilkYXRhLT5ucmdfc2lsZW5jZV9yZWYgLQogCQkJCQkJICAgKHMzMilzaWxlbmNlX3JlZjsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXUsIHNpbGVuY2UgZGlmZiAlZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1IDwgbWluIEZBICV1LCBzaWxlbmNlIGRpZmYgJWRcbiIsCiAJCQkgZmFsc2VfYWxhcm1zLCBtaW5fZmFsc2VfYWxhcm1zLAogCQkJIGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmKTsKIApAQCAtMjgwLDE3ICsyODAsMTcgQEAKIAkJCSgoZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPiBOUkdfRElGRikgfHwKIAkJCShkYXRhLT5udW1faW5fY2NrX25vX2ZhID4gTUFYX05VTUJFUl9DQ0tfTk9fRkEpKSkgewogCi0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBpbmNyZWFzaW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGluY3JlYXNpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQkJLyogSW5jcmVhc2UgbnJnIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCiAJCQl2YWwgPSBkYXRhLT5ucmdfdGhfY2NrICsgTlJHX1NURVBfQ0NLOwogCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1pbigodTMyKXJhbmdlcy0+bWluX25yZ19jY2ssIHZhbCk7CiAJCX0gZWxzZSB7Ci0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBidXQgbm90IGNoYW5naW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGJ1dCBub3QgY2hhbmdpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQl9CiAKIAkvKiBFbHNlIHdlIGdvdCBhIGhlYWx0aHkgbnVtYmVyIG9mIGZhbHNlIGFsYXJtcywga2VlcCBzdGF0dXMgcXVvICovCiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCIgRkEgaW4gc2FmZSB6b25lXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgRkEgaW4gc2FmZSB6b25lXG4iKTsKIAkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfR09PRF9SQU5HRTsKIAogCQkvKiBTdG9yZSBmb3IgdXNlIGluICJmZXdlciB0aGFuIGRlc2lyZWQiIHdpdGggbGF0ZXIgYmVhY29uICovCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJICogICBnaXZlIGl0IHNvbWUgZXh0cmEgbWFyZ2luIGJ5IHJlZHVjaW5nIHNlbnNpdGl2aXR5IGFnYWluCiAJCSAqICAgKGJ1dCBkb24ndCBnbyBiZWxvdyBtZWFzdXJlZCBlbmVyZ3kgb2YgZGVzaXJlZCBSeCkgKi8KIAkJaWYgKElXTF9GQV9UT09fTUFOWSA9PSBkYXRhLT5ucmdfcHJldl9zdGF0ZSkgewotCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOwogCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAobWF4X25yZ19jY2sgKyBOUkdfTUFSR0lOKSkKIAkJCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47CiAJCQllbHNlCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkgKiBMb3dlciB2YWx1ZSBpcyBoaWdoZXIgZW5lcmd5LCBzbyB3ZSB1c2UgbWF4KCkhCiAJICovCiAJZGF0YS0+bnJnX3RoX2NjayA9IG1heChtYXhfbnJnX2NjaywgZGF0YS0+bnJnX3RoX2Njayk7Ci0JSVdMX0RFQlVHX0NBTElCKCJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CiAKIAlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IGRhdGEtPm5yZ19jdXJyX3N0YXRlOwogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCiAJaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAogCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwogCiAJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KIAllbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7CiAKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1IDwgbWluIEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXVcbiIsCiAJCQkgICAgIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcyk7CiAKIAkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG0gLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9CiAJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEsIHZhbCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJtaW4gRkEgJXUgPCBub3JtIEZBICV1IDwgbWF4IEZBICV1IE9LXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCiAJCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTIsMTggKzQ1MiwxOCBAQAogCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX29mZG0pOwogCiAJY21kLnRhYmxlW0hEX0JBUktFUl9DT1JSX1RIX0FERF9NSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDE5MCk7CisJCQkJY3B1X3RvX2xlMTYoMTkwKTsKIAljbWQudGFibGVbSERfQkFSS0VSX0NPUlJfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDM5MCk7CisJCQkJY3B1X3RvX2xlMTYoMzkwKTsKIAljbWQudGFibGVbSERfT0ZETV9FTkVSR1lfVEhfSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDYyKTsKKwkJCQljcHVfdG9fbGUxNig2Mik7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm9mZG06IGFjICV1IG1yYyAldSB4MSAldSBtcmNfeDEgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAib2ZkbTogYWMgJXUgbXJjICV1IHgxICV1IG1yY194MSAldSB0aHJlc2ggJXVcbiIsCiAJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjLAogCQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEsIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSwKIAkJCWRhdGEtPm5yZ190aF9vZmRtKTsKIAotCUlXTF9ERUJVR19DQUxJQigiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAogCQkJZGF0YS0+YXV0b19jb3JyX2NjaywgZGF0YS0+YXV0b19jb3JyX2Nja19tcmMsCiAJCQlkYXRhLT5ucmdfdGhfY2NrKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAJLyogRG9uJ3Qgc2VuZCBjb21tYW5kIHRvIHVDb2RlIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgKi8KIAlpZiAoIW1lbWNtcCgmY21kLnRhYmxlWzBdLCAmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksCiAJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCiAJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKIAlpZiAocmV0KQotCQlJV0xfRVJST1IoIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTRU5TSVRJVklUWV9DTUQgZmFpbGVkXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00OTgsNyArNDk4LDcgQEAKIAlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0NBTElCKCJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CiAKIAkvKiBDbGVhciBkcml2ZXIncyBzZW5zaXRpdml0eSBhbGdvIGRhdGEgKi8KIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWRhdGEtPmxhc3RfZmFfY250X2NjayA9IDA7CiAKIAlyZXQgfD0gaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHByaXYpOwotCUlXTF9ERUJVR19DQUxJQigiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8cmV0dXJuIDB4JVhcbiIsIHJldCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X3NlbnNpdGl2aXR5KTsKIApAQCAtNTYyLDEzICs1NjIsMTMgQEAKIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiPDwgaW52YWxpZCBkYXRhLlxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgaW52YWxpZCBkYXRhLlxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU5NSwxMCArNTk1LDEwIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKIAogCWlmICghcnhfZW5hYmxlX3RpbWUpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCBSWCBFbmFibGUgVGltZSA9PSAwISBcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IFJYIEVuYWJsZSBUaW1lID09IDAhIFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYzNyw3ICs2MzcsNyBAQAogCW5vcm1fZmFfb2ZkbSA9IGZhX29mZG0gKyBiYWRfcGxjcF9vZmRtOwogCW5vcm1fZmFfY2NrID0gZmFfY2NrICsgYmFkX3BsY3BfY2NrOwogCi0JSVdMX0RFQlVHX0NBTElCKCJjY2s6IGZhICV1IGJhZHAgJXUgIG9mZG06IGZhICV1IGJhZHAgJXVcbiIsIGZhX2NjaywKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNjazogZmEgJXUgYmFkcCAldSAgb2ZkbTogZmEgJXUgYmFkcCAldVxuIiwgZmFfY2NrLAogCQkJYmFkX3BsY3BfY2NrLCBmYV9vZmRtLCBiYWRfcGxjcF9vZmRtKTsKIAogCWl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOwpAQCAtNjkwLDEzICs2OTAsMTMgQEAKIAkgKiAgIHRoZW4gd2UncmUgZG9uZSBmb3JldmVyLiAqLwogCWlmIChkYXRhLT5zdGF0ZSAhPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURSkgewogCQlpZiAoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKQotCQkJSVdMX0RFQlVHX0NBTElCKCJXYWl0IGZvciBub2lzZSBjYWxpYiByZXNldFxuIik7CisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIldhaXQgZm9yIG5vaXNlIGNhbGliIHJlc2V0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiIDw8IEludGVyZmVyZW5jZSBkYXRhIHVuYXZhaWxhYmxlXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC03MDksNyArNzA5LDcgQEAKIAkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKIAkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KIAlpZiAoKHJ4b25fY2hudW0gIT0gc3RhdF9jaG51bSkgfHwgKHJ4b25fYmFuZDI0ICE9IHN0YXRfYmFuZDI0KSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQyND0lZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGF0cyBub3QgZnJvbSBjaGFuPSVkLCBiYW5kMjQ9JWRcbiIsCiAJCQkJcnhvbl9jaG51bSwgcnhvbl9iYW5kMjQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTczOSwxMSArNzM5LDExIEBACiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAoY2hhaW5fc2lnX2IgKyBkYXRhLT5jaGFpbl9zaWduYWxfYik7CiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2MgPSAoY2hhaW5fc2lnX2MgKyBkYXRhLT5jaGFpbl9zaWduYWxfYyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoImNoYW49JWQsIGJhbmQyND0lZCwgYmVhY29uPSVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhbj0lZCwgYmFuZDI0PSVkLCBiZWFjb249JWRcbiIsCiAJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCwgZGF0YS0+YmVhY29uX2NvdW50KTsKLQlJV0xfREVCVUdfQ0FMSUIoImNoYWluX3NpZzogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkJY2hhaW5fc2lnX2EsIGNoYWluX3NpZ19iLCBjaGFpbl9zaWdfYyk7Ci0JSVdMX0RFQlVHX0NBTElCKCJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQljaGFpbl9ub2lzZV9hLCBjaGFpbl9ub2lzZV9iLCBjaGFpbl9ub2lzZV9jKTsKIAogCS8qIElmIHRoaXMgaXMgdGhlIDIwdGggYmVhY29uLCBkZXRlcm1pbmU6CkBAIC03NzMsOSArNzczLDkgQEAKIAkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGF2ZXJhZ2Vfc2lnWzBdLCBhdmVyYWdlX3NpZ1sxXSwgYXZlcmFnZV9zaWdbMl0pOwotCUlXTF9ERUJVR19DQUxJQigibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtYXhfYXZlcmFnZV9zaWcgPSAlZCwgYW50ZW5uYSAlZFxuIiwKIAkJICAgICBtYXhfYXZlcmFnZV9zaWcsIG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCiAJLyogQ29tcGFyZSBzaWduYWwgc3RyZW5ndGhzIGZvciBhbGwgMyByZWNlaXZlcnMuICovCkBAIC03ODksNyArNzg5LDcgQEAKIAkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMTsKIAkJCWVsc2UKIAkJCQlhY3RpdmVfY2hhaW5zIHw9ICgxIDw8IGkpOwotCQkJSVdMX0RFQlVHX0NBTElCKCJpID0gJWQgIHJzc2lEZWx0YSA9ICVkICAiCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKIAkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKIAkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7CiAJCX0KQEAgLTgxMyw3ICs4MTMsNyBAQAogCQkJICogZGlzY29ubmVjdGVkIGNvbm5lY3QgaXQgYW55d2F5ICovCiAJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMDsKIAkJCWFjdGl2ZV9jaGFpbnMgfD0gYW50X21zazsKLQkJCUlXTF9ERUJVR19DQUxJQigiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKIAkJCQkiZGVjbGFyZSAlZCBhcyBjb25uZWN0ZWRcbiIsIGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgyMSw3ICs4MjEsNyBAQAogCiAJLyogU2F2ZSBmb3IgdXNlIHdpdGhpbiBSWE9OLCBUWCwgU0NBTiBjb21tYW5kcywgZXRjLiAqLwogCXByaXYtPmNoYWluX25vaXNlX2RhdGEuYWN0aXZlX2NoYWlucyA9IGFjdGl2ZV9jaGFpbnM7Ci0JSVdMX0RFQlVHX0NBTElCKCJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCiAJCQlhY3RpdmVfY2hhaW5zKTsKIAogCS8qIEFuYWx5emUgbm9pc2UgZm9yIHJ4IGJhbGFuY2UgKi8KQEAgLTgzOSwxNSArODM5LDE2IEBACiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQlhdmVyYWdlX25vaXNlWzBdLCBhdmVyYWdlX25vaXNlWzFdLAogCQkJYXZlcmFnZV9ub2lzZVsyXSk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm1pbl9hdmVyYWdlX25vaXNlID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtaW5fYXZlcmFnZV9ub2lzZSA9ICVkLCBhbnRlbm5hICVkXG4iLAogCQkJbWluX2F2ZXJhZ2Vfbm9pc2UsIG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSk7CiAKLQlwcml2LT5jZmctPm9wcy0+dXRpbHMtPmdhaW5fY29tcHV0YXRpb24ocHJpdiwgYXZlcmFnZV9ub2lzZSwKLQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pLCBtaW5fYXZlcmFnZV9ub2lzZSk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nYWluX2NvbXB1dGF0aW9uKHByaXYsIGF2ZXJhZ2Vfbm9pc2UsCisJCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksIG1pbl9hdmVyYWdlX25vaXNlKTsKIAogCS8qIFNvbWUgcG93ZXIgY2hhbmdlcyBtYXkgaGF2ZSBiZWVuIG1hZGUgZHVyaW5nIHRoZSBjYWxpYnJhdGlvbi4KIAkgKiBVcGRhdGUgYW5kIGNvbW1pdCB0aGUgUlhPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKaW5kZXggMWFiZTg0Yi4uYjZjZWY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBiYTk5NzIwLi4yOWQ0MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSwxMiArNjksMjAgQEAKICNpZm5kZWYgX19pd2xfY29tbWFuZHNfaF9fCiAjZGVmaW5lIF9faXdsX2NvbW1hbmRzX2hfXwogCitzdHJ1Y3QgaXdsX3ByaXY7CisKIC8qIHVDb2RlIHZlcnNpb24gY29udGFpbnMgNCB2YWx1ZXM6IE1ham9yL01pbm9yL0FQSS9TZXJpYWwgKi8KICNkZWZpbmUgSVdMX1VDT0RFX01BSk9SKHZlcikJKCgodmVyKSAmIDB4RkYwMDAwMDApID4+IDI0KQogI2RlZmluZSBJV0xfVUNPREVfTUlOT1IodmVyKQkoKCh2ZXIpICYgMHgwMEZGMDAwMCkgPj4gMTYpCiAjZGVmaW5lIElXTF9VQ09ERV9BUEkodmVyKQkoKCh2ZXIpICYgMHgwMDAwRkYwMCkgPj4gOCkKICNkZWZpbmUgSVdMX1VDT0RFX1NFUklBTCh2ZXIpCSgodmVyKSAmIDB4MDAwMDAwRkYpCiAKKworLyogVHggcmF0ZXMgKi8KKyNkZWZpbmUgSVdMX0NDS19SQVRFUwk0CisjZGVmaW5lIElXTF9PRkRNX1JBVEVTCTgKKyNkZWZpbmUgSVdMX01BWF9SQVRFUwkoSVdMX0NDS19SQVRFUyArIElXTF9PRkRNX1JBVEVTKQorCiBlbnVtIHsKIAlSRVBMWV9BTElWRSA9IDB4MSwKIAlSRVBMWV9FUlJPUiA9IDB4MiwKQEAgLTEzNiw5ICsxNDQsMTEgQEAKIAlXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OID0gMHg5NCwJLyogbm90IHVzZWQgKi8KIAogCS8qIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMgKi8KKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5NSwKIAlRVUlFVF9OT1RJRklDQVRJT04gPSAweDk2LAkJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NywKLQlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OCwKKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EX1YxID0gMHg5OCwJLyogb2xkIHZlcnNpb24gb2YgQVBJICovCisJVFhfQU5UX0NPTkZJR1VSQVRJT05fQ01EID0gMHg5OCwJLyogbm90IHVzZWQgKi8KIAlNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTiA9IDB4OTksCS8qIG5vdCB1c2VkICovCiAKIAkvKiBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIGNvbmZpZyBjb21tYW5kICovCkBAIC0yMTksNiArMjI5LDM3IEBACiAJdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAorICoKKyAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKKyAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAorICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAorICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCisgKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCisgKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgorICoKKyAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7CisJdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLworCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICisgKi8KK3N0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKKwl1OCByYXRlOwkJLyogcGxjcCAqLworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGl3bGFnbiByYXRlX25fZmxhZ3MgYml0IGZpZWxkcwogICoKQEAgLTMwMCwxMSArMzQxLDEyIEBACiAgKiA1MzUwIGhhcyAzIHRyYW5zbWl0dGVycwogICogYml0MTQ6MTYKICAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfUE9TICAgICAgMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLICAgIDB4MDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLICAgIDB4MDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0NfTVNLICAgIDB4MTAwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCQ19NU0sgIDB4MUMwMDAKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX1BPUwkxNAorI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sJMHgwNDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sJMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQ19NU0sJMHgxMDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCShSQVRFX01DU19BTlRfQV9NU0sgfCBSQVRFX01DU19BTlRfQl9NU0spCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9BQkNfTVNLCShSQVRFX01DU19BTlRfQUJfTVNLIHwgUkFURV9NQ1NfQU5UX0NfTVNLKQogI2RlZmluZSBSQVRFX0FOVF9OVU0gMwogCiAjZGVmaW5lIFBPV0VSX1RBQkxFX05VTV9FTlRSSUVTCQkJMzMKQEAgLTQ5Miw4ICs1MzQsNiBAQAogCV9fbGUzMiBpc192YWxpZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KLQogLyoKICAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQogICovCkBAIC01MjUsNiArNTY1LDcgQEAKIAogCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSwkJY3B1X3RvX2xlMTYoMHgxIDw8IDApCisjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUwkJKDApCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfTVNLCQkJY3B1X3RvX2xlMTYoMHg3IDw8IDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TCQkJKDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRk9SQ0VfU0VMX01TSwkJY3B1X3RvX2xlMTYoMHg3IDw8IDQpCkBAIC02MTEsNiArNjUyLDI2IEBACiAgKiAgICAgICAgaXNzdWUgYSBuZXcgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCBhZnRlciBlYWNoIFJFUExZX1JYT04gKDB4MTApLAogICogICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgaXMgc2V0LgogICovCisKK3N0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHsKKwl1OCBub2RlX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMTsKKwl1OCBic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDI7CisJdTggd2xhcF9ic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDM7CisJdTggZGV2X3R5cGU7CisJdTggYWlyX3Byb3BhZ2F0aW9uOworCV9fbGUxNiByZXNlcnZlZDQ7CisJdTggb2ZkbV9iYXNpY19yYXRlczsKKwl1OCBjY2tfYmFzaWNfcmF0ZXM7CisJX19sZTE2IGFzc29jX2lkOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUxNiByZXNlcnZlZDU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgewogCXU4IG5vZGVfYWRkcls2XTsKIAlfX2xlMTYgcmVzZXJ2ZWQxOwpAQCAtNjU2LDYgKzcxNywyOCBAQAogCV9fbGUxNiByZXNlcnZlZDY7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCisgKi8KK3N0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIGZpbHRlcl9mbGFnczsKKwl1OCBvZmRtX2Jhc2ljX3JhdGVzOworCXU4IGNja19iYXNpY19yYXRlczsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCXU4IG9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOworCV9fbGUxNiByeF9jaGFpbl9zZWxlY3RfZmxhZ3M7CisJX19sZTE2IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKIAlfX2xlMzIgZmxhZ3M7CiAJX19sZTMyIGZpbHRlcl9mbGFnczsKQEAgLTY3MSwyMCArNzU0LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qCi0gKiBSRVBMWV9SWE9OX0FTU09DID0gMHgxMSAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JdTggb2ZkbV9iYXNpY19yYXRlczsKLQl1OCBjY2tfYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JX19sZTE2IHJ4X2NoYWluX3NlbGVjdF9mbGFnczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCiAKIC8qCkBAIC03MDIsNiArNzcxLDE2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7CisJdTggYmFuZDsKKwl1OCBleHBlY3RfYmVhY29uOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUzMiByeG9uX2ZsYWdzOworCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKKwlfX2xlMzIgc3dpdGNoX3RpbWU7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9jaGFubmVsX3N3aXRjaF9jbWQgewogCXU4IGJhbmQ7CiAJdTggZXhwZWN0X2JlYWNvbjsKQEAgLTc4Myw2ICs4NjIsOCBAQAogI2RlZmluZQlJV0xfQVBfSUQJCTAKICNkZWZpbmUgSVdMX01VTFRJQ0FTVF9JRAkxCiAjZGVmaW5lCUlXTF9TVEFfSUQJCTIKKyNkZWZpbmUJSVdMMzk0NV9CUk9BRENBU1RfSUQJMjQKKyNkZWZpbmUgSVdMMzk0NV9TVEFUSU9OX0NPVU5UCTI1CiAjZGVmaW5lIElXTDQ5NjVfQlJPQURDQVNUX0lECTMxCiAjZGVmaW5lCUlXTDQ5NjVfU1RBVElPTl9DT1VOVAkzMgogI2RlZmluZSBJV0w1MDAwX0JST0FEQ0FTVF9JRAkxNQpAQCAtNzkxLDYgKzg3Miw4IEBACiAjZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCisjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CisjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwogI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKQEAgLTkwMSw2ICs5ODQsMzUgQEAKICAqICAgICAgICB1c2VkIGFzIEFQLCBvciBpbiBhbiBJQlNTIG5ldHdvcmssIGRyaXZlciBtdXN0IHNldCB1cCBzdGF0aW9uIHRhYmxlCiAgKiAgICAgICAgZW50cmllcyBmb3IgYWxsIFNUQXMgaW4gbmV0d29yaywgc3RhcnRpbmcgd2l0aCBpbmRleCBJV0xfU1RBX0lELgogICovCisKK3N0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgeworCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKKwlzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvIGtleTsKKwlfX2xlMzIgc3RhdGlvbl9mbGFnczsJCS8qIFNUQV9GTEdfKiAqLworCV9fbGUzMiBzdGF0aW9uX2ZsYWdzX21zazsJLyogU1RBX0ZMR18qICovCisKKwkvKiBiaXQgZmllbGQgdG8gZGlzYWJsZSAoMSkgb3IgZW5hYmxlICgwKSBUeCBmb3IgVHJhZmZpYyBJRCAoVElEKQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYml0IChlLmcuIGJpdCA1IGNvbnRyb2xzIFRJRCA1KS4KKwkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfVElEX0RJU0FCTEVfVFggdG8gdXNlIHRoaXMgZmllbGQuICovCisJX19sZTE2IHRpZF9kaXNhYmxlX3R4OworCisJX19sZTE2IHJhdGVfbl9mbGFnczsKKworCS8qIFRJRCBmb3Igd2hpY2ggdG8gYWRkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCXU4IGFkZF9pbW1lZGlhdGVfYmFfdGlkOworCisJLyogVElEIGZvciB3aGljaCB0byByZW1vdmUgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJdTggcmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQ7CisKKwkvKiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZm9yIGFkZGVkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCV9fbGUxNiBhZGRfaW1tZWRpYXRlX2JhX3NzbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kIHsKIAl1OCBtb2RlOwkJLyogMTogbW9kaWZ5IGV4aXN0aW5nLCAwOiBhZGQgbmV3IHN0YXRpb24gKi8KIAl1OCByZXNlcnZlZFszXTsKQEAgLTEwNTQsNiArMTE2Niw0OCBAQAogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSwkoMSA8PCA3KQogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLCSgweDgwMCkKIAorCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyB7CisJdTggcGh5X2NvdW50OworCXU4IGlkOworCXU4IHJzc2k7CisJdTggYWdjOworCV9fbGUxNiBzaWdfYXZnOworCV9fbGUxNiBub2lzZV9kaWZmOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKKwlfX2xlMTYgY2hhbm5lbDsKKwlfX2xlMTYgcGh5X2ZsYWdzOworCXU4IHJlc2VydmVkMTsKKwl1OCByYXRlOworCV9fbGUxNiBsZW47CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgeworCV9fbGUzMiBzdGF0dXM7CisJX19sZTY0IHRpbWVzdGFtcDsKKwlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCisgKgorICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCisgKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCisgKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCisgKiBzdGF0cy5waHlfY291bnQKKyAqLworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgeworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7CisJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIElXTDM5X1JYX0ZSQU1FX1NJWkUJKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQorCiAvKiBGaXhlZCAobm9uLWNvbmZpZ3VyYWJsZSkgcnggZGF0YSBmcm9tIHBoeSAqLwogCiAjZGVmaW5lIElXTDQ5X1JYX1JFU19QSFlfQ05UIDE0CkBAIC0xMjM0LDYgKzEzODgsODQgQEAKICNkZWZpbmUgVEtJUF9JQ1ZfTEVOIDQKIAogLyoKKyAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKKyAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgeworCS8qCisJICogTVBEVSBieXRlIGNvdW50OgorCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAorCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKKwkgKiArIERhdGEgcGF5bG9hZAorCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCisJICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAorCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCisJICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCisJICovCisJX19sZTE2IGxlbjsKKworCS8qCisJICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCisJICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgorCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgorCSAqLworCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKKworCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCisKKwl1OCByYXRlOworCisJLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCisJdTggc3RhX2lkOworCXU4IHRpZF90c3BlYzsKKwl1OCBzZWNfY3RsOworCXU4IGtleVsxNl07CisJdW5pb24geworCQl1OCBieXRlWzhdOworCQlfX2xlMTYgd29yZFs0XTsKKwkJX19sZTMyIGR3WzJdOworCX0gdGtpcF9taWM7CisJX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKKwl1bmlvbiB7CisJCV9fbGUzMiBsaWZlX3RpbWU7CisJCV9fbGUzMiBhdHRlbXB0OworCX0gc3RvcF90aW1lOworCXU4IHN1cHBfcmF0ZXNbMl07CisJdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KKwl1bmlvbiB7CisJCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OworCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKKwl9IHRpbWVvdXQ7CisKKwkvKgorCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCisJICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCisJICovCisJX19sZTE2IGRyaXZlcl90eG9wOworCisJLyoKKwkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKKwkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQorCSAqLworCXU4IHBheWxvYWRbMF07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKKwl1OCBmYWlsdXJlX3J0czsKKwl1OCBmYWlsdXJlX2ZyYW1lOworCXU4IGJ0X2tpbGxfY291bnQ7CisJdTggcmF0ZTsKKwlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKKwlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KICAqIERyaXZlciBzaG91bGQgc2V0IHRoZXNlIGZpZWxkcyB0byAwLgpAQCAtMTI0NCw5ICsxNDc2LDYgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyoKLSAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKLSAqLwogc3RydWN0IGl3bF90eF9jbWQgewogCS8qCiAJICogTVBEVSBieXRlIGNvdW50OgpAQCAtMTU4NCw2ICsxODEzLDE0IEBACiAgKgogICogU2VlIGRldGFpbHMgdW5kZXIgIlRYUE9XRVIiIGluIGl3bC00OTY1LWh3LmguCiAgKi8KKworc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCB7CisJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IGNoYW5uZWw7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCB7CiAJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCiAJdTggcmVzZXJ2ZWQ7CkBAIC0xNTkxLDYgKzE4MjgsMzUgQEAKIAlzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB0eF9wb3dlcjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKKyAqCisgKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQorICoKKyAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKKyAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCisgKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKKyAqIG1hc2tzLCBldGMuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAorICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKKyAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgorICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQorICovCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB7CisJX19sZTE2IHJhdGVfbl9mbGFnczsKKwl1OCB0cnlfY250OworCXU4IG5leHRfcmF0ZV9pbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKKwl1OCB0YWJsZV9pZDsKKwl1OCByZXNlcnZlZFszXTsKKwlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIC8qUlNfTkVXX0FQSTogb25seSBUTENfUlRTIHJlbWFpbnMgYW5kIG1vdmVkIHRvIGJpdCAwICovCiAjZGVmaW5lICBMSU5LX1FVQUxfRkxBR1NfU0VUX1NUQV9UTENfUlRTX01TSwkoMSA8PCAwKQogCkBAIC0yMDQ0LDE1ICsyMzEwLDIzIEBACiAgKi8KICNkZWZpbmUgSVdMX1BPV0VSX1ZFQ19TSVpFIDUKIAotI2RlZmluZSBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSwljcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lIElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLCQljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIElXTF9QT1dFUl9QQ0lfUE1fTVNLCQkJY3B1X3RvX2xlMTYoMSA8PCAzKQotI2RlZmluZSBJV0xfUE9XRVJfRkFTVF9QRAkJCWNwdV90b19sZTE2KDEgPDwgNCkKKyNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMTYoQklUKDApKQorI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMTYoQklUKDIpKQorI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTE2KEJJVCgzKSkKKyNkZWZpbmUgSVdMX1BPV0VSX0ZBU1RfUEQJCQljcHVfdG9fbGUxNihCSVQoNCkpCisKK3N0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKKwlfX2xlMTYgZmxhZ3M7CisJdTggcmVzZXJ2ZWRbMl07CisJX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKKwlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgewogCV9fbGUxNiBmbGFnczsKLQl1OCBrZWVwX2FsaXZlX3NlY29uZHM7Ci0JdTggZGVidWdfZmxhZ3M7CisJdTgga2VlcF9hbGl2ZV9zZWNvbmRzOwkJLyogMzk0NSByZXNlcnZlZCAqLworCXU4IGRlYnVnX2ZsYWdzOwkJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KIAlfX2xlMzIgcnhfZGF0YV90aW1lb3V0OwogCV9fbGUzMiB0eF9kYXRhX3RpbWVvdXQ7CiAJX19sZTMyIHNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRV07CkBAIC0yMTQzLDYgKzI0MTcsMjYgQEAKICAqICAgICBwYXNzaXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKiAgICAgYWN0aXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKi8KKworLyogRklYTUU6IHJlbmFtZSB0byBBUDEsIHJlbW92ZSB0cGMgKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCB7CisJLyoKKwkgKiB0eXBlIGlzIGRlZmluZWQgYXM6CisJICogMDowIDEgPSBhY3RpdmUsIDAgPSBwYXNzaXZlCisJICogMTo0IFNTSUQgZGlyZWN0IGJpdCBtYXA7IGlmIGEgYml0IGlzIHNldCwgdGhlbiBjb3JyZXNwb25kaW5nCisJICogICAgIFNTSUQgSUUgaXMgdHJhbnNtaXR0ZWQgaW4gcHJvYmUgcmVxdWVzdC4KKwkgKiA1OjcgcmVzZXJ2ZWQKKwkgKi8KKwl1OCB0eXBlOworCXU4IGNoYW5uZWw7CS8qIGJhbmQgaXMgc2VsZWN0ZWQgYnkgaXdsMzk0NV9zY2FuX2NtZCAiZmxhZ3MiIGZpZWxkICovCisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOworCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCisJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLworI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCisKIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTIxNTksNiArMjQ1Myw5IEBACiAJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgX19sZTMyIHR5cGUgKi8KKyNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3NzaWRfaWUgLSBkaXJlY3RlZCBzY2FuIG5ldHdvcmsgaW5mb3JtYXRpb24gZWxlbWVudAogICoKQEAgLTIxNzIsNiArMjQ2OSw3IEBACiAJdTggc3NpZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYX0FQSTEJCTB4NAogI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYICAgICAgICAJMHgxNAogI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCWNwdV90b19sZTMyKDB4RkZGRkZGRkYpCiAjZGVmaW5lIElXTF9HT09EX0NSQ19USAkJCWNwdV90b19sZTE2KDEpCkBAIC0yMjI5LDYgKzI1MjcsNTEgQEAKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgc2VlIHRpbWluZyByZXN0cmljdGlvbnMgZGVzY3JpYmVkIHVuZGVyCiAgKiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbC4KICAqLworCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7CisJX19sZTE2IGxlbjsKKwl1OCByZXNlcnZlZDA7CisJdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KKwlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKKwkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCisJX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLworCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCisJCQkJICogY2hhbm5lbCAqLworCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCisJCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgorCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCisJCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KKwkJCQkgKi8KKwlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCisJX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLworCisJLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCisJICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOworCisJLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCisJc3RydWN0IGl3bF9zc2lkX2llIGRpcmVjdF9zY2FuW1BST0JFX09QVElPTl9NQVhfQVBJMV07CisKKwkvKgorCSAqIFByb2JlIHJlcXVlc3QgZnJhbWUsIGZvbGxvd2VkIGJ5IGNoYW5uZWwgbGlzdC4KKwkgKgorCSAqIFNpemUgb2YgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBjb3VudCBpbiB0eF9jbWQuCisJICogQ2hhbm5lbCBsaXN0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvYmUgcmVxdWVzdCBmcmFtZS4KKwkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gbGlzdCBpcyBzcGVjaWZpZWQgYnkgY2hhbm5lbF9jb3VudC4KKwkgKiBFYWNoIGNoYW5uZWwgaW4gbGlzdCBpcyBvZiB0eXBlOgorCSAqCisJICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIGNoYW5uZWxzWzBdOworCSAqCisJICogTk9URTogIE9ubHkgb25lIGJhbmQgb2YgY2hhbm5lbHMgY2FuIGJlIHNjYW5uZWQgcGVyIHBhc3MuICBZb3UKKwkgKiBtdXN0IG5vdCBtaXggMi40R0h6IGNoYW5uZWxzIGFuZCA1LjJHSHogY2hhbm5lbHMsIGFuZCB5b3UgbXVzdCB3YWl0CisJICogZm9yIG9uZSBzY2FuIHRvIGNvbXBsZXRlIChpLmUuIHJlY2VpdmUgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pCisJICogYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBzY2FuLgorCSAqLworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9zY2FuX2NtZCB7CiAJX19sZTE2IGxlbjsKIAl1OCByZXNlcnZlZDA7CkBAIC0yMzM2LDYgKzI2NzksMTQgQEAKIC8qCiAgKiBCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKi8KKworc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOworCV9fbGUzMiBsb3dfdHNmOworCV9fbGUzMiBoaWdoX3RzZjsKKwlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w0OTY1X2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCBiZWFjb25fbm90aWZ5X2hkcjsKIAlfX2xlMzIgbG93X3RzZjsKQEAgLTIzNDYsNiArMjY5NywxNSBAQAogLyoKICAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7CisJX19sZTE2IHRpbV9pZHg7CisJdTggdGltX3NpemU7CisJdTggcmVzZXJ2ZWQxOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGZyYW1lWzBdOwkvKiBiZWFjb24gZnJhbWUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMjM4Miw2ICsyNzQyLDc2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgeworCV9fbGUzMiBpbmFfY250OworCV9fbGUzMiBmaW5hX2NudDsKKwlfX2xlMzIgcGxjcF9lcnI7CisJX19sZTMyIGNyYzMyX2VycjsKKwlfX2xlMzIgb3ZlcnJ1bl9lcnI7CisJX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOworCV9fbGUzMiBjcmMzMl9nb29kOworCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7CisJX19sZTMyIGZpbmFfc3luY19lcnJfY250OworCV9fbGUzMiBzZmRfdGltZW91dDsKKwlfX2xlMzIgZmluYV90aW1lb3V0OworCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7CisJX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOworCV9fbGUzMiBzZW50X2Fja19jbnQ7CisJX19sZTMyIHNlbnRfY3RzX2NudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IHsKKwlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLworCV9fbGUzMiBib2d1c19hY2s7CS8qIEFDSyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQUNLICovCisJX19sZTMyIG5vbl9ic3NpZF9mcmFtZXM7CS8qIG51bWJlciBvZiBmcmFtZXMgd2l0aCBCU1NJRCB0aGF0CisJCQkJCSAqIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBTVEEgQlNTSUQgKi8KKwlfX2xlMzIgZmlsdGVyZWRfZnJhbWVzOwkvKiBjb3VudCBmcmFtZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbiB0aGUKKwkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLworCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCisJCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCB7CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IGNjazsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggeworCV9fbGUzMiBwcmVhbWJsZV9jbnQ7CisJX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKKwlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7CisJX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7CisJX19sZTMyIGZld19ieXRlc19jbnQ7CisJX19sZTMyIGN0c190aW1lb3V0OworCV9fbGUzMiBhY2tfdGltZW91dDsKKwlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKKwlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHN0YXRpc3RpY3NfZGJnIHsKKwlfX2xlMzIgYnVyc3RfY2hlY2s7CisJX19sZTMyIGJ1cnN0X2NvdW50OworCV9fbGUzMiByZXNlcnZlZFs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgeworCV9fbGUzMiB0eF9vbl9hOworCV9fbGUzMiB0eF9vbl9iOworCV9fbGUzMiBleGVjX3RpbWU7CisJX19sZTMyIHByb2JlX3RpbWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCB7CisJX19sZTMyIHRlbXBlcmF0dXJlOworCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CisJX19sZTMyIHNsZWVwX3RpbWU7CisJX19sZTMyIHNsb3RzX291dDsKKwlfX2xlMzIgc2xvdHNfaWRsZTsKKwlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgZGl2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7CiAJX19sZTMyIGluYV9jbnQ7CiAJX19sZTMyIGZpbmFfY250OwpAQCAtMjQxOCw3ICsyODQ4LDcgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMigxKQorI2RlZmluZSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUgICAgICBjcHVfdG9fbGUzMigxKQogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IHsKIAlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLwpAQCAtMjQ5MywxMSArMjkyMyw2IEBACiAJc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBzdGF0aXN0aWNzX2RiZyB7Ci0JX19sZTMyIGJ1cnN0X2NoZWNrOwotCV9fbGUzMiBidXJzdF9jb3VudDsKLQlfX2xlMzIgcmVzZXJ2ZWRbNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHN0YXRpc3RpY3NfZGl2IHsKIAlfX2xlMzIgdHhfb25fYTsKQEAgLTI1NjEsNiArMjk4NiwxNCBAQAogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKICNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorCitzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgZmxhZzsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCByeDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc190eCB0eDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTMwMTIsNiArMzQ0NSwxMCBAQAogCV9fbGUzMiBsZW47CiAJc3RydWN0IGl3bF9jbWRfaGVhZGVyIGhkcjsKIAl1bmlvbiB7CisJCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHJ4X2ZyYW1lOworCQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHR4X3Jlc3A7CisJCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiBiZWFjb25fc3RhdHVzOworCiAJCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKIAkJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gc3BlY3RydW1fbm90aWY7CiAJCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7CkBAIC0zMDI5LDYgKzM0NjYsNiBAQAogCX0gdTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1pbnQgaXdsX2Fnbl9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uKTsKK2ludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKICNlbmRpZgkJCQkvKiBfX2l3bF9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA3M2Q3OTczLi5jNTRmYjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCkBAIC0xNzAsNyArMTcxLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9CiAJCWllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bF9wcml2KSwgaHdfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAorCQkgICAgICAgY2ZnLT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTAsNyArMjEyLDcgQEAKIAlpZiAoIXJ4cS0+YmQpIHsKIAkJcmV0ID0gaXdsX3J4X3F1ZXVlX2FsbG9jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlCkBAIC0yMzgsNiArMjQwLDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9od19uaWNfaW5pdCk7CiAKKy8qCisgKiBRb1MgIHN1cHBvcnQKKyovCit2b2lkIGl3bF9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmb3JjZSkKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOworCisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCisJICAgICFwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAudHhvcF9yZXF1ZXN0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9CisJCQlRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0s7CisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KKwkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOworCisJaWYgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9IFFPU19QQVJBTV9GTEdfVEdOX01TSzsKKworCWlmIChmb3JjZSB8fCBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCQlJV0xfREVCVUdfUU9TKHByaXYsICJzZW5kIFFvUyBjbWQgd2l0aCBRb3MgYWN0aXZlPSVkIEZMQUdTPTB4JVhcbiIsCisJCQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSwKKwkJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzKTsKKworCQlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1FPU19QQVJBTSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kKSwKKwkJCQkgICAgICAgJnByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybSwgTlVMTCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfYWN0aXZhdGVfcW9zKTsKKwogdm9pZCBpd2xfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MTYgY3dfbWluID0gMTU7CkBAIC0zMjEsNyArMzU2LDcgQEAKIAkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwogCQl9CiAJfQotCUlXTF9ERUJVR19RT1MoInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOworCUlXTF9ERUJVR19RT1MocHJpdiwgInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtNDAyLDEwICs0MzcsMTEgQEAKIAl9CiB9CiAKKwogLyoqCiAgKiBpd2xjb3JlX2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCiAgKi8KLXN0YXRpYyBpbnQgaXdsY29yZV9pbml0X2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2g7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CkBAIC00MTYsNyArNDUyLDcgQEAKIAogCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CiAJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwogCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQ1Nyw4ICs0OTMsNiBAQAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKIAlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CiAKLQlpd2xjb3JlX2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCiAJZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwogCkBAIC01MDAsNyArNTM0LDcgQEAKIAkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwogCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MHglWFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgJWQgRnJlcT0lZFslc0dIel0gJXMgZmxhZz0weCVYXG4iLAogCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAogCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAogCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/CkBAIC01MTAsMzMgKzU0NCwzMyBAQAogCiAJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCiAJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJSVdMX0lORk8ocHJpdiwgIkluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAiCisJCQkiUGxlYXNlIHNlbmQgeW91ciBQQ0kgSUQgMHglMDRYOjB4JTA0WCB0byBtYWludGFpbmVyLlxuIiwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPmRldmljZSwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpOwotCisJSVdMX0lORk8ocHJpdiwgIlR1bmFibGUgY2hhbm5lbHM6ICVkIDgwMi4xMWJnLCAlZCA4MDIuMTFhIGNoYW5uZWxzXG4iLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKIAogCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xjb3JlX2luaXRfZ2Vvcyk7CiAKIC8qCiAgKiBpd2xjb3JlX2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsY29yZV9pbml0X2dlb3MKICAqLwotc3RhdGljIHZvaWQgaXdsY29yZV9mcmVlX2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2xjb3JlX2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJa2ZyZWUocHJpdi0+aWVlZV9jaGFubmVscyk7CiAJa2ZyZWUocHJpdi0+aWVlZV9yYXRlcyk7CiAJY2xlYXJfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bGNvcmVfZnJlZV9nZW9zKTsKIAogc3RhdGljIGJvb2wgaXNfc2luZ2xlX3J4X3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC01ODcsNiArNjIxLDE2NyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfaXNfZmF0X3R4X2FsbG93ZWQpOwogCit2b2lkIGl3bF9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKGh3X2RlY3J5cHQpCisJCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOworCWVsc2UKKwkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKKworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25faHdjcnlwdG8pOworCisvKioKKyAqIGl3bF9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCisgKgorICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKKyAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKKyAqIG1ha2luZyBjaGFuZ2VzCisgKi8KK2ludCBpd2xfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBlcnJvciA9IDA7CisJaW50IGNvdW50ZXIgPSAxOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CisJCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYKKwkJCQkoUlhPTl9GTEdfVEdKX05BUlJPV19CQU5EX01TSyB8CisJCQkJIFJYT05fRkxHX1JBREFSX0RFVEVDVF9NU0spKTsKKwkJaWYgKGVycm9yKQorCQkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIDI0RyBmaWVsZHMgJWQgfCAlZFxuIiwKKwkJCQkgICAgY291bnRlcisrLCBlcnJvcik7CisJfSBlbHNlIHsKKwkJZXJyb3IgfD0gKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID8KKwkJCQkwIDogbGUzMl90b19jcHUoUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgZmllbGRzICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmIFJYT05fRkxHX0NDS19NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgQ0NLICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCX0KKwllcnJvciB8PSAocnhvbi0+bm9kZV9hZGRyWzBdIHwgcnhvbi0+YnNzaWRfYWRkclswXSkgJiAweDE7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgbWFjIGFkZHIgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7CisKKwkvKiBtYWtlIHN1cmUgYmFzaWMgcmF0ZXMgNk1icHMgYW5kIDFNYnBzIGFyZSBzdXBwb3J0ZWQgKi8KKwllcnJvciB8PSAoKChyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfNk1fTUFTSykgPT0gMCkgJiYKKwkJICAoKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApKTsKKwlpZiAoZXJyb3IpCisJCUlXTF9XQVJOKHByaXYsICJjaGVjayBiYXNpYyByYXRlICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIGFzc29jIGlkICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQorCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIENDSyBhbmQgc2hvcnQgc2xvdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSkKKwkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgQ0NLICYgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKKwkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKKworCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwKKwkJCVJYT05fRkxHX1RHR19QUk9URUNUX01TSykpID09IFJYT05fRkxHX1RHR19QUk9URUNUX01TSyk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgVEdHIGFuZCBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCisJaWYgKGVycm9yKSB7CisJCUlXTF9FUlIocHJpdiwgIk5vdCBhIHZhbGlkIGl3bF9yeG9uX2Fzc29jX2NtZCBmaWVsZCB2YWx1ZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfY2hlY2tfcnhvbl9jbWQpOworCisvKioKKyAqIGl3bF9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKKyAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KKyAqCisgKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKKyAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAorICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KKyAqLworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KKwlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCisJCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9CisJICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgorCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCisJICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCisKKwkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLworCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQorCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQorCQlyZXR1cm4gMTsKKworCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCisJaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQorCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCk7CisKK3U4IGl3bF9yYXRlX2dldF9sb3dlc3RfcGxjcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJhdGVfbWFzazsKKworCS8qIFNldCByYXRlIG1hc2sqLworCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCisJCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19SQVRFU19NQVNLOworCWVsc2UKKwkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9SQVRFU19NQVNLOworCisJLyogRmluZCBsb3dlc3QgdmFsaWQgcmF0ZSAqLworCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYOyBpICE9IElXTF9SQVRFX0lOVkFMSUQ7CisJCQkJCWkgPSBpd2xfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7CisJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJldHVybiBpd2xfcmF0ZXNbaV0ucGxjcDsKKwl9CisKKwkvKiBObyB2YWxpZCByYXRlIHdhcyBmb3VuZC4gQXNzaWduIHRoZSBsb3dlc3Qgb25lICovCisJaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKKwkJcmV0dXJuIElXTF9SQVRFXzFNX1BMQ1A7CisJZWxzZQorCQlyZXR1cm4gSVdMX1JBVEVfNk1fUExDUDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKTsKKwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CkBAIC02MjgsNyArODIzLDcgQEAKIAogCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAotCUlXTF9ERUJVR19BU1NPQygic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgogCQkJInJ4b24gZmxhZ3MgMHglWCBvcGVyYXRpb24gbW9kZSA6MHglWCAiCiAJCQkiZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IDB4JXhcbiIsCiAJCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSwKQEAgLTY3OSw3ICs4NzQsNyBAQAogCQlicmVhazsKIAljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0lOVkFMSUQ6CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIG1pbW8gcHMgbW9kZSAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBtaW1vIHBzIG1vZGUgJWRcbiIsCiAJCQkgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbV9wcyk7CiAJCVdBUk5fT04oMSk7CiAJCWlkbGVfY250ID0gLTE7CkBAIC03MDAsNiArODk1LDE4IEBACiB9CiAKIC8qKgorICogaXdsX2lzX21vbml0b3JfbW9kZSAtIERldGVybWluZSBpZiBpbnRlcmZhY2UgaW4gbW9uaXRvciBtb2RlCisgKgorICogcHJpdi0+aXdfbW9kZSBpcyBzZXQgaW4gYWRkX2ludGVyZmFjZSwgYnV0IGFkZF9pbnRlcmZhY2UgaXMKKyAqIG5ldmVyIGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlLiBUaGUgb25seSB3YXkgbWFjODAyMTEgaW5mb3JtcyB1cyBhYm91dAorICogbW9uaXRvciBtb2RlIGlzIHRocm91Z2ggY29uZmlndXJpbmcgZmlsdGVycyAoY2FsbCB0byBjb25maWd1cmVfZmlsdGVyKS4KKyAqLworc3RhdGljIGJvb2wgaXdsX2lzX21vbml0b3JfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuICEhKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyk7Cit9CisKKy8qKgogICogaXdsX3NldF9yeG9uX2NoYWluIC0gU2V0IHVwIFJ4IGNoYWluIHVzYWdlIGluICJzdGFnaW5nIiBSWE9OIGltYWdlCiAgKgogICogU2VsZWN0cyBob3cgbWFueSBhbmQgd2hpY2ggUnggcmVjZWl2ZXJzL2FudGVubmFzL2NoYWlucyB0byB1c2UuCkBAIC03NDIsNiArOTQ5LDE5IEBACiAJcnhfY2hhaW4gfD0gYWN0aXZlX3J4X2NudCA8PCBSWE9OX1JYX0NIQUlOX01JTU9fQ05UX1BPUzsKIAlyeF9jaGFpbiB8PSBpZGxlX3J4X2NudCAgPDwgUlhPTl9SWF9DSEFJTl9DTlRfUE9TOwogCisJLyogY29waWVkIGZyb20gJ2l3bF9iZ19yZXF1ZXN0X3NjYW4oKScgKi8KKwkvKiBGb3JjZSB1c2Ugb2YgY2hhaW5zIEIgYW5kIEMgKDB4NikgZm9yIFJ4IGZvciA0OTY1CisJICogQXZvaWQgQSAoMHgxKSBiZWNhdXNlIG9mIGl0cyBvZmYtY2hhbm5lbCByZWNlcHRpb24gb24gQS1iYW5kLgorCSAqIE1JTU8gaXMgbm90IHVzZWQgaGVyZSwgYnV0IHZhbHVlIGlzIHJlcXVpcmVkICovCisJaWYgKGl3bF9pc19tb25pdG9yX21vZGUocHJpdikgJiYKKwkgICAgIShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICYmCisJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpKSB7CisJCXJ4X2NoYWluID0gMHgwNyA8PCBSWE9OX1JYX0NIQUlOX1ZBTElEX1BPUzsKKwkJcnhfY2hhaW4gfD0gMHgwNiA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDcgPDwgUlhPTl9SWF9DSEFJTl9GT1JDRV9NSU1PX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDEgPDwgUlhPTl9SWF9DSEFJTl9EUklWRVJfRk9SQ0VfUE9TOworCX0KKwogCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiA9IGNwdV90b19sZTE2KHJ4X2NoYWluKTsKIAogCWlmICghaXNfc2luZ2xlICYmIChhY3RpdmVfcnhfY250ID49IElXTF9OVU1fUlhfQ0hBSU5TX1NJTkdMRSkgJiYgaXNfY2FtKQpAQCAtNzQ5LDcgKzk2OSw3IEBACiAJZWxzZQogCQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gJj0gflJYT05fUlhfQ0hBSU5fTUlNT19GT1JDRV9NU0s7CiAKLQlJV0xfREVCVUdfQVNTT0MoInJ4X2NoYWluPTB4JVggYWN0aXZlPSVkIGlkbGU9JWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJyeF9jaGFpbj0weCVYIGFjdGl2ZT0lZCBpZGxlPSVkXG4iLAogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluLAogCQkJYWN0aXZlX3J4X2NudCwgaWRsZV9yeF9jbnQpOwogCkBAIC03NzQsNyArOTk0LDcgQEAKIAl1MTYgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaC0+Y2VudGVyX2ZyZXEpOwogCiAJaWYgKCFpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZCBub3Qgc2V0IGNoYW5uZWwgdG8gJWQgWyVkXVxuIiwKIAkJCSAgICAgICBjaGFubmVsLCBiYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzkxLDEyICsxMDExLDI4MyBAQAogCiAJcHJpdi0+YmFuZCA9IGJhbmQ7CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25fY2hhbm5lbCk7CiAKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CisJCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSworCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CisJfSBlbHNlIHsKKwkJLyogQ29waWVkIGZyb20gaXdsX3Bvc3RfYXNzb2NpYXRlKCkgKi8KKwkJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCQllbHNlCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCisJCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKKworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKKworLyoKKyAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQorICovCit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCit7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisKKwltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9BUDsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyB8CisJCQkJCQkgIFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQlicmVhazsKKworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9TTklGRkVSOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgfAorCQkgICAgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLIHwgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKKwkJYnJlYWs7CisJfQorCisjaWYgMAorCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCisJICogdGhhdCAqLworCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworI2VuZGlmCisKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKKwkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOworCisJaWYgKCFjaF9pbmZvKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCS8qCisJICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUworCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAorCSAqLworCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKKwkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7CisJcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7CisKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOworCisJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQorCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9CisJICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAorCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcpOworCit2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaHcgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlpbnQgaTsKKworCWh3ID0gaXdsX2dldF9od19tb2RlKHByaXYsIHByaXYtPmJhbmQpOworCWlmICghaHcpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+YWN0aXZlX3JhdGUgPSAwOworCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7CisJCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOworCX0KKworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAorCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKKworCS8qCisJICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKKwkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKKwkgKiBPRkRNCisJICovCisJaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCisJCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgorCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9CisJCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9yYXRlKTsKKwordm9pZCBpd2xfcnhfY3NhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsX2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7CisJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCisJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7CisJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X2NzYSk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJSWCBDT05GSUc6XG4iKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCisJCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCisJCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOworfQorI2VuZGlmCisKKy8qKgorICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKKyAqLwordm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsX2Rvd24gKi8KKwlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7CisKKwkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLworCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7CisJCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CisJCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdik7CisJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOworCX0KKyNlbmRpZgorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCisJLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAorCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KKwljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKKworCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCisJCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7CisKKwkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOworCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7CisJCX0KKwkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfaXJxX2hhbmRsZV9lcnJvcik7CisKK3ZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKKwkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQorCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7CisJfQorCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQllbHNlCisJCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKKwl9CisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOworCX0KKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7CisJCWVsc2UKKwkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOworCX0KKworCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncworCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgorCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCisJICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgorCSAqLworCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2NvbmZpZ3VyZV9maWx0ZXIpOworCiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKQEAgLTgwNiwxOCArMTI5NywxOCBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOworCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKLQlody0+d2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAKIAkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KIAlody0+cXVldWVzID0gNDsKLQkvKiBxdWV1ZXMgdG8gc3VwcG9ydCAxMW4gYWdncmVnYXRpb24gKi8KLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pCi0JCWh3LT5hbXBkdV9xdWV1ZXMgPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9hbXBkdV9xdWV1ZXM7CiAKIAlody0+Y29uZi5iZWFjb25faW50ID0gMTAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gSVdMX0NPTk5fTUFYX0xJU1RFTl9JTlRFUlZBTDsKQEAgLTgzMSw3ICsxMzIyLDcgQEAKIAogCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBodyAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CkBAIC04NjMsNyArMTM1NCw2IEBACiB7CiAJaW50IHJldDsKIAotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKQEAgLTg5NywyMSArMTM4NywyMiBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCi0JcHJpdi0+cG93ZXJfbW9kZSA9IElXTF9QT1dFUl9BQzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CisJaXdsY29yZV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTkyNiwxNCArMTQxNywxNiBAQAogewogCWludCByZXQgPSAwOwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh0eF9wb3dlciA+IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIHVwcGVyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTQyLDYgKzE0MzUsMTAgQEAKIAogCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gdHhfcG93ZXI7CiAKKwkvKiBpZiBuaWMgaXMgbm90IHVwIGRvbid0IHNlbmQgY29tbWFuZCAqLworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCiAJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7CiAKQEAgLTk3MCwxOCArMTQ2Nyw5MiBAQAogCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhmZmZmZmZmZik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCUlXTF9ERUJVR19JU1IoIkRpc2FibGVkIGludGVycnVwdHNcbiIpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkRpc2FibGVkIGludGVycnVwdHNcbiIpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKTsKIAogdm9pZCBpd2xfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCUlXTF9ERUJVR19JU1IoIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwogCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIENTUl9JTklfU0VUX01BU0spOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZW5hYmxlX2ludGVycnVwdHMpOwogCitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKKwl1MzIgaW50YSwgaW50YV9tYXNrOworCXUzMiBpbnRhX2ZoOworCWlmICghcHJpdikKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAorCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KKwkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgorCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLworCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCisJLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCisJICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKKwkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLworCWlmICghaW50YSAmJiAhaW50YV9maCkgeworCQlJV0xfREVCVUdfSVNSKHByaXYsICJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7CisJCWdvdG8gbm9uZTsKKwl9CisKKwlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKKwkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKKwkJICogYW4gaW50ZXJydXB0ICovCisJCUlXTF9XQVJOKHByaXYsICJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOworCQlnb3RvIHVucGx1Z2dlZDsKKwl9CisKKwlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCisJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CisKKwlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7CisKKwkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KKwlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKKworIHVucGx1Z2dlZDoKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworCisgbm9uZToKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KKwkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQorCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiBJUlFfTk9ORTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2lzcik7CisKK2ludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfYnRfY21kIGJ0X2NtZCA9IHsKKwkJLmZsYWdzID0gMywKKwkJLmxlYWRfdGltZSA9IDB4QUEsCisJCS5tYXhfa2lsbCA9IDEsCisJCS5raWxsX2Fja19tYXNrID0gMCwKKwkJLmtpbGxfY3RzX21hc2sgPSAwLAorCX07CisKKwlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT05GSUcsCisJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfY21kKSwgJmJ0X2NtZCk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2J0X2NvbmZpZyk7CisKIGludCBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmbGFncykKIHsKIAl1MzIgc3RhdF9mbGFncyA9IDA7CkBAIC0xMDA3LDcgKzE1NzgsNyBAQAogCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KQpAQCAtMTAxOCw3ICsxNTg5LDcgQEAKIAkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCiAJCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KIAkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCi0JCQlpICsgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCQkJaSArIElXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewogCQkJcmV0ID0gLUVJTzsKQEAgLTEwNDUsMTMgKzE2MTYsMTQgQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgZXJyY250OwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKKwkJCSAgIElXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAogCWVycmNudCA9IDA7CiAJZm9yICg7IGxlbiA+IDA7IGxlbiAtPSBzaXplb2YodTMyKSwgaW1hZ2UrKykgewpAQCAtMTA2MCw3ICsxNjMyLDcgQEAKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKIAkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCiAJCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKIAkJCXJldCA9IC1FSU87CkBAIC0xMDczLDggKzE2NDUsOCBAQAogCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkgICAgInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDk0LDcgKzE2NjYsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTAzLDcgKzE2NzUsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExMTIsMTEgKzE2ODQsMTEgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKIAlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKIAlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0VSUk9SKCJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOworCUlXTF9FUlIocHJpdiwgIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CiAKIAkvKiBTaW5jZSBub3RoaW5nIHNlZW1zIHRvIG1hdGNoLCBzaG93IGZpcnN0IHNldmVyYWwgZGF0YSBlbnRyaWVzIGluCiAJICogaW5zdHJ1Y3Rpb24gU1JBTSwgc28gbWF5YmUgdmlzdWFsIGluc3BlY3Rpb24gd2lsbCBnaXZlIGEgY2x1ZS4KQEAgLTExODgsMjEgKzE3NjAsMjIgQEAKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAogCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAorCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7CiAJfQogCiAJZGVzYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxICogc2l6ZW9mKHUzMikpOwpAQCAtMTIxNSwxMiArMTc4OCwxMiBAQAogCWxpbmUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKIAl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDExICogc2l6ZW9mKHUzMikpOwogCi0JSVdMX0VSUk9SKCJEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUgICAgICAgIgorCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCiAJCSJkYXRhMSAgICAgIGRhdGEyICAgICAgbGluZVxuIik7Ci0JSVdMX0VSUk9SKCIlLTI4cyAoIyUwMmQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCisJSVdMX0VSUihwcml2LCAiJS0yOHMgKCMlMDJkKSAlMDEwdSAweCUwOFggMHglMDhYICV1XG4iLAogCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgZGF0YTEsIGRhdGEyLCBsaW5lKTsKLQlJV0xfRVJST1IoImJsaW5rMSAgYmxpbmsyICBpbGluazEgIGlsaW5rMlxuIik7Ci0JSVdMX0VSUk9SKCIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAorCUlXTF9FUlIocHJpdiwgImJsaW5rMSAgYmxpbmsyICBpbGluazEgIGlsaW5rMlxuIik7CisJSVdMX0VSUihwcml2LCAiMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYXG4iLCBibGluazEsIGJsaW5rMiwKIAkJaWxpbmsxLCBpbGluazIpOwogCiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKQEAgLTEyNjYsMTEgKzE4MzksMTEgQEAKIAkJcHRyICs9IHNpemVvZih1MzIpOwogCQlpZiAobW9kZSA9PSAwKSB7CiAJCQkvKiBkYXRhLCBldiAqLwotCQkJSVdMX0VSUk9SKCJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CiAJCX0gZWxzZSB7CiAJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiRVZUX0xPR1Q6JTAxMHU6MHglMDh4OiUwNHVcbiIsCisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKIAkJCQkJdGltZSwgZGF0YSwgZXYpOwogCQl9CiAJfQpAQCAtMTI5MiwxMyArMTg2NSwxMyBAQAogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTMxMiwxMiArMTg4NSwxMiBAQAogCiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwogCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCQlyZXR1cm47CiAJfQogCi0JSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAorCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCiAJCQlzaXplLCBudW1fd3JhcHMpOwogCiAJLyogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLCBzdGFydCBhdCB0aGUgb2xkZXN0IGVudHJ5LApAQCAtMTM0OSw5ICsxOTIyLDkgQEAKIAlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKIAkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7CiAJaWYgKHJldCkKLQkJSVdMX0VSUk9SKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgogCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAogCQkJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IpOwogfQpAQCAtMTM2OCw3ICsxOTQxLDcgQEAKICAqIFdoZW4gaW4gdGhlICdoYWx0JyBzdGF0ZSwgdGhlIGNhcmQgaXMgc2h1dCBkb3duIGFuZCBtdXN0IGJlIGZ1bGx5CiAgKiByZXN0YXJ0ZWQgdG8gY29tZSBiYWNrIG9uLgogICovCi1zdGF0aWMgaW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsIHU4IG1ldGFfZmxhZykKK2ludCBpd2xfc2VuZF9jYXJkX3N0YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGZsYWdzLCB1OCBtZXRhX2ZsYWcpCiB7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX0NBUkRfU1RBVEVfQ01ELApAQCAtMTM3OSw2ICsxOTUyLDcgQEAKIAogCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NhcmRfc3RhdGUpOwogCiB2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtMTM4Nyw3ICsxOTYxLDcgQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPRkZcbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9GRlxuIik7CiAKIAlpd2xfc2Nhbl9jYW5jZWwocHJpdik7CiAJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwpAQCAtMTQxNiw3ICsxOTkwLDcgQEAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPTlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gT05cbiIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKQEAgLTE0NDEsNyArMjAxNSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKIAkJCQkgICJkaXNhYmxlZCBieSBIVyBzd2l0Y2hcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDYzLDMgKzIwMzcsNzggQEAKIAlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKTsKKwordm9pZCBpd2xfYmdfcmZfa2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgcmZfa2lsbCk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LAorCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCisJCQkgICJkZXZpY2VcbiIpOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCisJCSAgICB0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKQorCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwl9IGVsc2UgeworCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCisJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKKworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKKwkJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKKwkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKKwkJZWxzZQorCQkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKKwkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgorCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOworfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfcmZfa2lsbCk7CisKK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAorCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3BtX3NsZWVwX25vdGlmKTsKKwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgorCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAorCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZik7CisKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKworCUlXTF9FUlIocHJpdiwgIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCisJCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCisJCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKKwkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCisJCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCisJCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAorCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcmVwbHlfZXJyb3IpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggN2MzYTIwYS4uYThlYWM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzEsNyArNzEsNyBAQAogCiAKICNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICIxLjMuMjdrIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA4IEludGVsIENvcnBvcmF0aW9uIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA5IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBEUlZfQVVUSE9SICAgICAiPGlsd0BsaW51eC5pbnRlbC5jb20+IgogCiAjZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKQEAgLTExMCw2ICsxMTAsMTQgQEAKIAl2b2lkICgqdHhxX2ludmFsX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCXZvaWQgKCp0eHFfc2V0X3NjaGVkKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtYXNrKTsKKwlpbnQgKCp0eHFfYXR0YWNoX2J1Zl90b190ZmQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgICAgIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpOworCXZvaWQgKCp0eHFfZnJlZV90ZmQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKKwlpbnQgKCp0eHFfaW5pdCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIAkvKiBhZ2dyZWdhdGlvbnMgKi8KIAlpbnQgKCp0eHFfYWdnX2VuYWJsZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgdHhfZmlmbywKIAkJCSAgICAgIGludCBzdGFfaWQsIGludCB0aWQsIHUxNiBzc25faWR4KTsKQEAgLTIwMyw2ICsyMTEsOSBAQAogCXUxNiAgZWVwcm9tX2NhbGliX3ZlcjsKIAljb25zdCBzdHJ1Y3QgaXdsX29wcyAqb3BzOwogCWNvbnN0IHN0cnVjdCBpd2xfbW9kX3BhcmFtcyAqbW9kX3BhcmFtczsKKwl1OCAgIHZhbGlkX3R4X2FudDsKKwl1OCAgIHZhbGlkX3J4X2FudDsKKwlib29sIG5lZWRfcGxsX2NmZzsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIxMywxMSArMjI0LDI2IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfb3BzICpod19vcHMpOwogdm9pZCBpd2xfaHdfZGV0ZWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZXNldF9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKTsKK3ZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpOworaW50IGl3bF9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoKTsKIHZvaWQgaXdsX3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKTsKIHU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpzdGFfaHRfaW5mKTsKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Cit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpOworaW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCSAgIHUzMiBkZWNyeXB0X3JlcywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7Cit2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CiBpbnQgaXdsX2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0yMjUsOSArMjUxLDIwIEBACiB2b2lkIGl3bF91bmluaXRfZHJ2KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlggaGFuZGxlcnMuCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFJYCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9yeF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKK3ZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0yNDUsNiArMjgyLDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiB2b2lkIGl3bF9yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X2NzYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIAogLyogVFggaGVscGVycyAqLwogCkBAIC0yNTIsOSArMjkwLDE4IEBACiAqIFRYCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgaXdsX3R4cV9jdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLCB1OCByZXNldCwgdTggcGFkKTsKIGludCBpd2xfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGl3bF9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIGludCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKTsKK3ZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKTsKIGludCBpd2xfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKnJhLCB1MTYgdGlkLCB1MTYgKnNzbik7CiBpbnQgaXdsX3R4X2FnZ19zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiAsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCk7CiBpbnQgaXdsX3R4cV9jaGVja19lbXB0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHU4IHRpZCwgaW50IHR4cV9pZCk7CkBAIC0yNjcsNyArMzE0LDcgQEAKICAqIFJGIC1LaWxsIC0gaGVyZSBhbmQgbm90IGluIGl3bC1yZmtpbGwuaCB0byBiZSBhdmFpbGFibGUgd2hlbgogICogUkYta2lsbCBzdWJzeXN0ZW0gaXMgbm90IGNvbXBpbGVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGl3bF9yZl9raWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIApAQCAtMjc5LDYgKzMyNiwxMCBAQAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKTsKIGludCBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHUzMiByYXRlX25fZmxhZ3MpOwogCit1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwordm9pZCBpd2xfc2V0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwogdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnRfaWR4KTsKIAogc3RhdGljIGlubGluZSB1MzIgaXdsX2FudF9pZHhfdG9fZmxhZ3ModTggYW50X2lkeCkKQEAgLTMwNiw4ICszNTcsMzAgQEAKIGludCBpd2xfc2Nhbl9jYW5jZWwoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgbXMpOwogaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwordTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsIGludCBsZWZ0KTsKIHZvaWQgaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3UxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgIHU4IG5fcHJvYmVzKTsKK3UxNiBpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK3ZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKK3ZvaWQgaXdsX2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKKy8qIEZvciBmYXN0ZXIgYWN0aXZlIHNjYW5uaW5nLCBzY2FuIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBjaGFubmVsIGlmIGZld2VyIHRoYW4KKyAqIFBMQ1BfUVVJRVRfVEhSRVNIIHBhY2tldHMgYXJlIGhlYXJkIG9uIHRoaXMgY2hhbm5lbCB3aXRoaW4KKyAqIEFDVElWRV9RVUlFVF9USU1FIGFmdGVyIHNlbmRpbmcgcHJvYmUgcmVxdWVzdC4gIFRoaXMgc2hvcnRlbnMgdGhlIGR3ZWxsCisgKiB0aW1lIGlmIGl0J3MgYSBxdWlldCBjaGFubmVsIChub3RoaW5nIHJlc3BvbmRlZCB0byBvdXIgcHJvYmUsIGFuZCB0aGVyZSdzCisgKiBubyBvdGhlciB0cmFmZmljKS4KKyAqIERpc2FibGUgInF1aWV0IiBmZWF0dXJlIGJ5IHNldHRpbmcgUExDUF9RVUlFVF9USFJFU0ggdG8gMC4gKi8KKyNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIGNwdV90b19sZTE2KDEwKSAgLyogbXNlYyAqLworI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgY3B1X3RvX2xlMTYoMSkgIC8qIHBhY2tldHMgKi8KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ2FsaWJyYXRpb25zIC0gaW1wbGVtZW50ZWQgaW4gaXdsLWNhbGliLmMKQEAgLTMxOSw3ICszOTIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNwZWN0cnVtIE1lYXN1cmVlbXRucyBpbiAgaXdsLXNwZWN0cnVtLmMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCiB2b2lkIGl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7fQpAQCAtMzQyLDExICs0MTUsMjMgQEAKIAogaW50IGl3bF9lbnF1ZXVlX2hjbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOwogCitpbnQgaXdsX3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywKKwkJCXU4IG1ldGFfZmxhZyk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUENJCQkJCQkJICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIGlubGluZSB1MTYgaXdsX3BjaWVfbGlua19jdGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBwb3M7CisJdTE2IHBjaV9sbmtfY3RsOworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocHJpdi0+cGNpX2RldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmcGNpX2xua19jdGwpOworCXJldHVybiBwY2lfbG5rX2N0bDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFcnJvciBIYW5kbGluZyBEZWJ1Z2dpbmcKQEAgLTM1NCw2ICs0MzksMTEgQEAKIHZvaWQgaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgR0VPUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bGNvcmVfZnJlZV9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKiogRFJJVkVSIFNUQVRVUyBGVU5DVElPTlMgICAqKioqKi8KIApAQCAtNDIyLDYgKzUxMiw3IEBACiB9CiAKIGV4dGVybiB2b2lkIGl3bF9yZl9raWxsX2N0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MpOwogZXh0ZXJuIGludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bF9zZW5kX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCmluZGV4IGYzNGVkZTQuLjJmMTI0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjExLDYgKzIxMSw5IEBACiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MzUwICAgICAgICAgICAoMHgwMDAwMDMwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTEwMCAgICAgICAgICAgKDB4MDAwMDA1MCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxNTAgICAgICAgICAgICgweDAwMDAwNDApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV8xMDAwICAgICAgICAgICAoMHgwMDAwMDYwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNngwMCAgICAgICAgICAgKDB4MDAwMDA3MCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4NTAgICAgICAgICAgICgweDAwMDAwODApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV9OT05FICAgICAgICAgICAoMHgwMDAwMEYwKQogCiAvKiBFRVBST00gUkVHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCA1NmMxM2I0Li42NWQxYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtMjksMTYgKzI5LDI5IEBACiAjaWZuZGVmIF9faXdsX2RlYnVnX2hfXwogI2RlZmluZSBfX2l3bF9kZWJ1Z19oX18KIAotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJihwcml2LT5ody0+d2lwaHktPmRldiksICIlYyAlcyAiIGZtdCwgXAotCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoKHByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIGRldl9wcmludGsoS0VSTl9FUlIsICYocHJpdi0+aHctPndpcGh5LT5kZXYpLCAiJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIElXTF9FUlIocCwgZiwgYS4uLikgZGV2X2VycigmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX1dBUk4ocCwgZiwgYS4uLikgZGV2X3dhcm4oJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisjZGVmaW5lIElXTF9JTkZPKHAsIGYsIGEuLi4pIGRldl9pbmZvKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfQ1JJVChwLCBmLCBhLi4uKSBkZXZfY3JpdCgmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisjZGVmaW5lIElXTF9ERUJVRyhfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKQkJCQlcCisJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCisJCQkgIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAorCQkJX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKChfX3ByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKF9fcHJpdi0+aHctPndpcGh5LT5kZXYpLAkJXAorCQkJIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAorCQkJIF9fZnVuY19fICwgIyMgYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIGxldmVsLCBwLCBsZW4pIAkJCVwKIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKQEAgLTYxLDYgKzc0LDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOwogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9jaGFubmVsczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0dXM7CiAJfSBkYmdmc19kYXRhX2ZpbGVzOwogCXN0cnVjdCBkaXJfcmZfZmlsZXMgewogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHk7CkBAIC03Niw4ICs5MCw4IEBACiAjZW5kaWYKIAogI2Vsc2UKLSNkZWZpbmUgSVdMX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pCi0jZGVmaW5lIElXTF9ERUJVR19MSU1JVChsZXZlbCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQogc3RhdGljIGlubGluZSB2b2lkIGl3bF9wcmludF9oZXhfZHVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZXZlbCwKIAkJCQkgICAgICB2b2lkICpwLCB1MzIgbGVuKQoge30KQEAgLTExNyw4NCArMTMxLDg1IEBACiAgKiB3aGVuIENPTkZJR19JV0xXSUZJX0RFQlVHPXkuCiAgKi8KIAorLyogMHgwMDAwMDAwRiAtIDB4MDAwMDAwMDEgKi8KICNkZWZpbmUgSVdMX0RMX0lORk8JCSgxIDw8IDApCiAjZGVmaW5lIElXTF9ETF9NQUM4MDIxMQkJKDEgPDwgMSkKICNkZWZpbmUgSVdMX0RMX0hDTUQJCSgxIDw8IDIpCiAjZGVmaW5lIElXTF9ETF9TVEFURQkJKDEgPDwgMykKKy8qIDB4MDAwMDAwRjAgLSAweDAwMDAwMDEwICovCiAjZGVmaW5lIElXTF9ETF9NQUNEVU1QCQkoMSA8PCA0KQogI2RlZmluZSBJV0xfRExfSENNRF9EVU1QCSgxIDw8IDUpCi0jZGVmaW5lIElXTF9ETF9SQURJTyAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElXTF9ETF9QT1dFUiAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElXTF9ETF9URU1QICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElXTF9ETF9SQURJTwkJKDEgPDwgNykKKy8qIDB4MDAwMDBGMDAgLSAweDAwMDAwMTAwICovCisjZGVmaW5lIElXTF9ETF9QT1dFUgkJKDEgPDwgOCkKKyNkZWZpbmUgSVdMX0RMX1RFTVAJCSgxIDw8IDkpCisjZGVmaW5lIElXTF9ETF9OT1RJRgkJKDEgPDwgMTApCisjZGVmaW5lIElXTF9ETF9TQ0FOCQkoMSA8PCAxMSkKKy8qIDB4MDAwMEYwMDAgLSAweDAwMDAxMDAwICovCisjZGVmaW5lIElXTF9ETF9BU1NPQwkJKDEgPDwgMTIpCisjZGVmaW5lIElXTF9ETF9EUk9QCQkoMSA8PCAxMykKKyNkZWZpbmUgSVdMX0RMX1RYUE9XRVIJCSgxIDw8IDE0KQorI2RlZmluZSBJV0xfRExfQVAJCSgxIDw8IDE1KQorLyogMHgwMDBGMDAwMCAtIDB4MDAwMTAwMDAgKi8KKyNkZWZpbmUgSVdMX0RMX0ZXCQkoMSA8PCAxNikKKyNkZWZpbmUgSVdMX0RMX1JGX0tJTEwJCSgxIDw8IDE3KQorI2RlZmluZSBJV0xfRExfRldfRVJST1JTCSgxIDw8IDE4KQorI2RlZmluZSBJV0xfRExfTEVECQkoMSA8PCAxOSkKKy8qIDB4MDBGMDAwMDAgLSAweDAwMTAwMDAwICovCisjZGVmaW5lIElXTF9ETF9SQVRFCQkoMSA8PCAyMCkKKyNkZWZpbmUgSVdMX0RMX0NBTElCCQkoMSA8PCAyMSkKKyNkZWZpbmUgSVdMX0RMX1dFUAkJKDEgPDwgMjIpCisjZGVmaW5lIElXTF9ETF9UWAkJKDEgPDwgMjMpCisvKiAweDBGMDAwMDAwIC0gMHgwMTAwMDAwMCAqLworI2RlZmluZSBJV0xfRExfUlgJCSgxIDw8IDI0KQorI2RlZmluZSBJV0xfRExfSVNSCQkoMSA8PCAyNSkKKyNkZWZpbmUgSVdMX0RMX0hUCQkoMSA8PCAyNikKKyNkZWZpbmUgSVdMX0RMX0lPCQkoMSA8PCAyNykKKy8qIDB4RjAwMDAwMDAgLSAweDEwMDAwMDAwICovCisjZGVmaW5lIElXTF9ETF8xMUgJCSgxIDw8IDI4KQorI2RlZmluZSBJV0xfRExfU1RBVFMJCSgxIDw8IDI5KQorI2RlZmluZSBJV0xfRExfVFhfUkVQTFkJCSgxIDw8IDMwKQorI2RlZmluZSBJV0xfRExfUU9TCQkoMSA8PCAzMSkKIAotI2RlZmluZSBJV0xfRExfTk9USUYgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSVdMX0RMX1NDQU4gICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElXTF9ETF9BU1NPQyAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJV0xfRExfRFJPUCAgICAgICAgICAoMSA8PCAxMykKLQotI2RlZmluZSBJV0xfRExfVFhQT1dFUiAgICAgICAoMSA8PCAxNCkKLQotI2RlZmluZSBJV0xfRExfQVAgICAgICAgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBJV0xfRExfRlcgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSVdMX0RMX1JGX0tJTEwgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElXTF9ETF9GV19FUlJPUlMgICAgICgxIDw8IDE4KQotCi0jZGVmaW5lIElXTF9ETF9MRUQgICAgICAgICAgICgxIDw8IDE5KQotCi0jZGVmaW5lIElXTF9ETF9SQVRFICAgICAgICAgICgxIDw8IDIwKQotCi0jZGVmaW5lIElXTF9ETF9DQUxJQiAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJV0xfRExfV0VQICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSVdMX0RMX1RYICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElXTF9ETF9SWCAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJV0xfRExfSVNSICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSVdMX0RMX0hUICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJV0xfRExfMTFIICAgICAgICAgICAoMSA8PCAyOCkKLQotI2RlZmluZSBJV0xfRExfU1RBVFMgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSVdMX0RMX1RYX1JFUExZICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElXTF9ETF9RT1MgICAgICAgICAgICgxIDw8IDMxKQotCi0jZGVmaW5lIElXTF9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lORk8oZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX01BQ0RVTVAoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfTUFDRFVNUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RFTVAoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1RFTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUlgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9UWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lTUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0xFRChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSENNRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDX0RVTVAoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IQ01EX0RVTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19DQUxJQihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0NBTElCLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRlcoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9GVywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19EUk9QX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FQKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lPKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9SQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTk9USUYoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IVChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hULCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU1RBVFMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFlfTElNSVQoZiwgYS4uLikgXAotCUlXTF9ERUJVR19MSU1JVChJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19RT1MoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1FPUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1JBRElPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUE9XRVIoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR18xMUgoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfMTFILCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSU5GTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX01BQzgwMjExLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTUFDRFVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX01BQ0RVTVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19URU1QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVEVNUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1NDQU4ocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9TQ0FOLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUlgocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9SWCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFgsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JU1IocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9JU1IsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19MRUQocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9MRUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19XRVAocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9XRVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hDTUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQ19EVU1QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSENNRF9EVU1QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0ZXKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfRlcsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0RST1AocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9EUk9QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChwLCBmLCBhLi4uKQlcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0FQKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfQVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0lPKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSU8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQVRFKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkFURSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19OT1RJRihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX05PVElGLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0MocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUcocCwgSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChwLCBmLCBhLi4uKQlcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0hUKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSFQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TVEFUUyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU1RBVFNfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZX0xJTUlUKHAsIGYsIGEuLi4pIFwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1FPUyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1FPUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkFESU8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19QT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfMTFIKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfMTFILCBmLCAjIyBhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwppbmRleCBkNTI1M2ExLi42NGViNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTYzLDYgKzYzLDE0IEBACiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKKwlkZWJ1Z2ZzX2NyZWF0ZV94MzIoI25hbWUsIDA0NDQsIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgICBcCisJaWYgKElTX0VSUihkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJCVwKKwkJCXx8ICFkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJXAorCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgREVCVUdGU19SRU1PVkUobmFtZSkgIGRvIHsgICAgICAgICAgICAgIFwKIAlkZWJ1Z2ZzX3JlbW92ZShuYW1lKTsgICAgICAgICAgICAgICAgICAgXAogCW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNjQsOSArMTcyLDYgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIm9mZnNldCBpczogMHgleFx0bGVuIGlzOiAweCV4XG4iLAotCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCwgcHJpdi0+ZGJnZnMtPnNyYW1fbGVuKTsKLQogCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJZm9yIChpID0gcHJpdi0+ZGJnZnMtPnNyYW1fbGVuOyBpID4gMDsgaSAtPSA0KSB7CiAJCXZhbCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCArIFwKQEAgLTMwMSwxNCArMzA2LDE0IEBACiAJYnVmX3NpemUgPSA0ICogZWVwcm9tX2xlbiArIDI1NjsKIAogCWlmIChlZXByb21fbGVuICUgMTYpIHsKLQkJSVdMX0VSUk9SKCJFRVBST00gc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMTYuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRUVQUk9NIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDE2LlxuIik7CiAJCXJldHVybiAtRU5PREFUQTsKIAl9CiAKIAkvKiA0IGNoYXJhY3RlcnMgZm9yIGJ5dGUgMHhZWSAqLwogCWJ1ZiA9IGt6YWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7Ci0JCUlXTF9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzY1LDcgKzM3MCw3IEBACiAKIAlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyMCw2ICs0MjUsNTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCWludCBwb3MgPSAwOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0hDTURfQUNUSVZFOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSENNRF9TWU5DX0FDVElWRTogJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0lOVF9FTkFCTEVEOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9IVzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9TVzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSU5JVDpcdFx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19BTElWRTpcdFx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkVBRFk6XHRcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1RFTVBFUkFUVVJFOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfR0VPX0NPTkZJR1VSRUQ6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19FWElUX1BFTkRJTkc6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSU5fU1VTUEVORDpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfU1RBVElTVElDUzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfU0NBTk5JTkc6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19TQ0FOX0FCT1JUSU5HOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19TQ0FOX0hXOlx0XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1BPV0VSX1BNSTpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19GV19FUlJPUjpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX01PREVfUEVORElORzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX01PREVfUEVORElORywgJnByaXYtPnN0YXR1cykpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KIAogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNyYW0pOwogREVCVUdGU19XUklURV9GSUxFX09QUyhsb2dfZXZlbnQpOwpAQCAtNDI4LDYgKzQ4Miw3IEBACiBERUJVR0ZTX1JFQURfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhbm5lbHMpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXR1cyk7CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGRlYnVnZnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCkBAIC00NjIsNiArNTE3LDcgQEAKIAlERUJVR0ZTX0FERF9GSUxFKHJ4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUodHhfc3RhdGlzdGljcywgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShjaGFubmVscywgZGF0YSk7CisJREVCVUdGU19BRERfRklMRShzdGF0dXMsIGRhdGEpOwogCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgcmYsICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIHJmLAogCQkJICZwcml2LT5kaXNhYmxlX2NoYWluX25vaXNlX2NhbCk7CkBAIC00NjksNyArNTI1LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCUlXTF9FUlJPUigiQ2FuJ3Qgb3BlbiB0aGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCUlXTF9FUlIocHJpdiwgIkNhbid0IG9wZW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDkxLDYgKzU0Nyw3IEBACiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sb2dfZXZlbnQpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdGlvbnMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY2hhbm5lbHMpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdHVzKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2RhdGEpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHkpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfY2hhaW5fbm9pc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAwNDY4ZmNjLi5lYzlhMTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiwxMyArMzYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAKLSNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpd2xhZ24iCi0jaW5jbHVkZSAiaXdsLXJma2lsbC5oIgogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKLSNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1maC5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgorI2luY2x1ZGUgIml3bC1yZmtpbGwuaCIKKyNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWh3LmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAjaW5jbHVkZSAiaXdsLWxlZC5oIgogI2luY2x1ZGUgIml3bC1wb3dlci5oIgogI2luY2x1ZGUgIml3bC1hZ24tcnMuaCIKQEAgLTU1LDYgKzU3LDI4IEBACiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzJhZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8zYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmc7CisKKy8qIHNoYXJlZCBzdHJ1Y3R1cmVzIGZyb20gaXdsLTUwMDAuYyAqLworZXh0ZXJuIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zOworZXh0ZXJuIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzOworZXh0ZXJuIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYjsKK2V4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZDsKK2V4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlsczsKKworLyogc2hhcmVkIGZ1bmN0aW9ucyBmcm9tIGl3bC01MDAwLmMgKi8KK2V4dGVybiB1MTYgaXdsNTAwMF9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbik7CitleHRlcm4gdTE2IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsCisJCQkJICAgICB1OCAqZGF0YSk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICAgIF9fbGUzMiAqdHhfZmxhZ3MpOworZXh0ZXJuIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCk7CiAKIC8qIENULUtJTEwgY29uc3RhbnRzICovCiAjZGVmaW5lIENUX0tJTExfVEhSRVNIT0xECTExMCAvKiBpbiBDZWxzaXVzICovCkBAIC0xMzIsOSArMTU2LDEyIEBACiAgKiBBIFR4IHF1ZXVlIGNvbnNpc3RzIG9mIGNpcmN1bGFyIGJ1ZmZlciBvZiBCRHMgKGEuay5hLiBURkRzLCB0cmFuc21pdCBmcmFtZQogICogZGVzY3JpcHRvcnMpIGFuZCByZXF1aXJlZCBsb2NraW5nIHN0cnVjdHVyZXMuCiAgKi8KKyNkZWZpbmUgVEZEX1RYX0NNRF9TTE9UUyAyNTYKKyNkZWZpbmUgVEZEX0NNRF9TTE9UUyAzMgorCiBzdHJ1Y3QgaXdsX3R4X3F1ZXVlIHsKIAlzdHJ1Y3QgaXdsX3F1ZXVlIHE7Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZHM7CisJdm9pZCAqdGZkczsKIAlzdHJ1Y3QgaXdsX2NtZCAqY21kW1RGRF9UWF9DTURfU0xPVFNdOwogCXN0cnVjdCBpd2xfdHhfaW5mbyAqdHhiOwogCXU4IG5lZWRfdXBkYXRlOwpAQCAtMTU0LDYgKzE4MSwzNiBAQAogCXM2NCBsYXN0X3JhZGFyX3RpbWU7CiB9OwogCisjZGVmaW5lIElXTDQ5NjVfTUFYX1JBVEUgKDMzKQorCitzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIHsKKwkvKiBtYXhpbXVtIHBvd2VyIGxldmVsIHRvIHByZXZlbnQgY2xpcHBpbmcgZm9yIGVhY2ggcmF0ZSwgZGVyaXZlZCBieQorCSAqICAgdXMgZnJvbSB0aGlzIGJhbmQncyBzYXR1cmF0aW9uIHBvd2VyIGluIEVFUFJPTSAqLworCWNvbnN0IHM4IGNsaXBfcG93ZXJzW0lXTF9NQVhfUkFURVNdOworfTsKKworLyogY3VycmVudCBUeCBwb3dlciB2YWx1ZXMgdG8gdXNlLCBvbmUgZm9yIGVhY2ggcmF0ZSBmb3IgZWFjaCBjaGFubmVsLgorICogcmVxdWVzdGVkIHBvd2VyIGlzIGxpbWl0ZWQgYnk6CisgKiAtLSByZWd1bGF0b3J5IEVFUFJPTSBsaW1pdHMgZm9yIHRoaXMgY2hhbm5lbAorICogLS0gaGFyZHdhcmUgY2FwYWJpbGl0aWVzIChjbGlwLXBvd2VycykKKyAqIC0tIHNwZWN0cnVtIG1hbmFnZW1lbnQKKyAqIC0tIHVzZXIgcHJlZmVyZW5jZSAoZS5nLiBpd2NvbmZpZykKKyAqIHdoZW4gcmVxdWVzdGVkIHBvd2VyIGlzIHNldCwgYmFzZSBwb3dlciBpbmRleCBtdXN0IGFsc28gYmUgc2V0LiAqLworc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7CS8qIGFjdHVhbCByYWRpbyBhbmQgRFNQIGdhaW4gc2V0dGluZ3MgKi8KKwlzOCBwb3dlcl90YWJsZV9pbmRleDsJLyogYWN0dWFsIChjb21wZW5zdCdkKSBpbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KKwlzOCBiYXNlX3Bvd2VyX2luZGV4OwkvKiBnYWluIGluZGV4IGZvciBwb3dlciBhdCBmYWN0b3J5IHRlbXAuICovCisJczggcmVxdWVzdGVkX3Bvd2VyOwkvKiBwb3dlciAoZEJtKSByZXF1ZXN0ZWQgZm9yIHRoaXMgY2hubC9yYXRlICovCit9OworCisvKiBjdXJyZW50IHNjYW4gVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHNjYW4gcmF0ZSBmb3IgZWFjaAorICogY2hhbm5lbC4gKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyB7CisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCisJczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCisJczggcmVxdWVzdGVkX3Bvd2VyOwkvKiBzY2FuIHB3ciAoZEJtKSByZXF1ZXN0ZWQgZm9yIGNobmwvcmF0ZSAqLworfTsKKwogLyoKICAqIE9uZSBmb3IgZWFjaCBjaGFubmVsLCBob2xkcyBhbGwgY2hhbm5lbCBzZXR1cCBkYXRhCiAgKiBTb21lIG9mIHRoZSBmaWVsZHMgKGUuZy4gZWVwcm9tIGFuZCBmbGFncy9tYXhfcG93ZXJfYXZnKSBhcmUgcmVkdW5kYW50CkBAIC0xODQsOCArMjQxLDE1IEBACiAJczggZmF0X3NjYW5fcG93ZXI7CS8qIChkQm0pIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwogCXU4IGZhdF9mbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwogCXU4IGZhdF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLwotfTsKIAorCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KKwkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKKwkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKKworCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoIHNjYW4gcmF0ZSwgZm9yIGRpcmVjdGVkIHNjYW5zLiAqLworCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyBzY2FuX3B3cl9pbmZvW0lXTF9OVU1fU0NBTl9SQVRFU107Cit9OwogCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMAkwCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMQkxCkBAIC0zNzAsNyArNDM0LDcgQEAKIAl1OCBrZXlbMzJdOwogfTsKIAotdW5pb24gaXdsNDk2NV9odF9yYXRlX3N1cHAgewordW5pb24gaXdsX2h0X3JhdGVfc3VwcCB7CiAJdTE2IHJhdGVzOwogCXN0cnVjdCB7CiAJCXU4IHNpc29fcmF0ZTsKQEAgLTQzMCw2ICs0OTQsMjQgQEAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKIAorc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgeworCXUxNiBzZXFfbnVtYmVyOworfTsKKworc3RydWN0IGl3bDM5NDVfaHdfa2V5IHsKKwllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKKwlpbnQga2V5bGVuOworCXU4IGtleVszMl07Cit9OworCitzdHJ1Y3QgaXdsMzk0NV9zdGF0aW9uX2VudHJ5IHsKKwlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kIHN0YTsKKwlzdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07CisJdTggdXNlZDsKKwl1OCBwc19zdGF0dXM7CisJc3RydWN0IGl3bDM5NDVfaHdfa2V5IGtleWluZm87Cit9OworCiBzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgewogCXN0cnVjdCBpd2xfYWRkc3RhX2NtZCBzdGE7CiAJc3RydWN0IGl3bF90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07CkBAIC00OTcsMTEgKzU3OSwxMyBAQAogICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCiAgKiBAZG1hX2NobmxfbnVtOiBOdW1iZXIgb2YgVHggRE1BL0ZJRk8gY2hhbm5lbHMKICAqIEBzY2RfYmNfdGJsc19zaXplOiBzaXplIG9mIHNjaGVkdWxlciBieXRlIGNvdW50IHRhYmxlcworICogQHRmZF9zaXplOiBURkQgc2l6ZQogICogQHR4L3J4X2NoYWluc19udW06IE51bWJlciBvZiBUWC9SWCBjaGFpbnMKICAqIEB2YWxpZF90eC9yeF9hbnQ6IHVzYWJsZSBhbnRlbm5hcwogICogQG1heF9yeHFfc2l6ZTogTWF4ICMgUnggZnJhbWVzIGluIFJ4IHF1ZXVlIChtdXN0IGJlIHBvd2VyLW9mLTIpCiAgKiBAbWF4X3J4cV9sb2c6IExvZy1iYXNlLTIgb2YgbWF4X3J4cV9zaXplCiAgKiBAcnhfYnVmX3NpemU6IFJ4IGJ1ZmZlciBzaXplCisgKiBAcnhfd3J0X3B0cl9yZWc6IEZIezM5fV9SU0NTUl9DSE5MMF9XUFRSCiAgKiBAbWF4X3N0YXRpb25zOgogICogQGJjYXN0X3N0YV9pZDoKICAqIEBmYXRfY2hhbm5lbDogaXMgNDBNSHogd2lkdGggcG9zc2libGUgaW4gYmFuZCAyLjQKQEAgLTUxNiw2ICs2MDAsNyBAQAogCXU4IG1heF90eHFfbnVtOwogCXU4IGRtYV9jaG5sX251bTsKIAl1MTYgc2NkX2JjX3RibHNfc2l6ZTsKKwl1MzIgdGZkX3NpemU7CiAJdTggIHR4X2NoYWluc19udW07CiAJdTggIHJ4X2NoYWluc19udW07CiAJdTggIHZhbGlkX3R4X2FudDsKQEAgLTUyMyw2ICs2MDgsNyBAQAogCXUxNiBtYXhfcnhxX3NpemU7CiAJdTE2IG1heF9yeHFfbG9nOwogCXUzMiByeF9idWZfc2l6ZTsKKwl1MzIgcnhfd3J0X3B0cl9yZWc7CiAJdTMyIG1heF9wa3Rfc2l6ZTsKIAl1OCAgbWF4X3N0YXRpb25zOwogCXU4ICBiY2FzdF9zdGFfaWQ7CkBAIC03NTUsNyArODQxLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgfHwgZGVmaW5lZChDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkKIAkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwogCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwogCXU4IG1lYXN1cmVtZW50X3N0YXR1czsKQEAgLTc2OCw2ICs4NTQsMTAgQEAKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hhbm5lbF9pbmZvOwkvKiBjaGFubmVsIGluZm8gYXJyYXkgKi8KIAl1OCBjaGFubmVsX2NvdW50OwkvKiAjIG9mIGNoYW5uZWxzICovCiAKKwkvKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlIEVFUFJPTSBoYXMgYSBkZXJpdmVkCisJICogY2xpcCBzZXR0aW5nIGZvciBlYWNoIHJhdGUuIDM5NDUgb25seS4qLworCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NsaXBfZ3JvdXAgY2xpcDM5X2dyb3Vwc1s1XTsKKwogCS8qIHRoZXJtYWwgY2FsaWJyYXRpb24gKi8KIAlzMzIgdGVtcGVyYXR1cmU7CS8qIGRlZ3JlZXMgS2VsdmluICovCiAJczMyIGxhc3RfdGVtcGVyYXR1cmU7CkBAIC03ODEsNyArODcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3Bhc3Nfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0X3RzZjsKLQlzdHJ1Y3QgaXdsX3NjYW5fY21kICpzY2FuOworCXZvaWQgKnNjYW47CiAJaW50IHNjYW5fYmFuZHM7CiAJaW50IG9uZV9kaXJlY3Rfc2NhbjsKIAl1OCBkaXJlY3Rfc3NpZF9sZW47CkBAIC04MzIsMTggKzkyMiwxOCBAQAogCSAqIDQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KIAlzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7CiAJc3RydWN0IGl3bF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmU7Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfUkZLSUxMCisjaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9SRktJTEwpCiAJc3RydWN0IHJma2lsbCAqcmZraWxsOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCi0Jc3RydWN0IGl3bF9sZWQgbGVkW0lXTF9MRURfVFJHX01BWF07CiAJdW5zaWduZWQgbG9uZyBsYXN0X2JsaW5rX3RpbWU7CiAJdTggbGFzdF9ibGlua19yYXRlOwogCXU4IGFsbG93X2JsaW5raW5nOwogCXU2NCBsZWRfdHB0OworCXN0cnVjdCBpd2xfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOworCXVuc2lnbmVkIGludCByeHR4cGFja2V0czsKICNlbmRpZgotCiAJdTE2IGFjdGl2ZV9yYXRlOwogCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKIApAQCAtODkzLDcgKzk4Myw2IEBACiAJdTE2IHJhdGVzX21hc2s7CiAKIAl1MzIgcG93ZXJfbW9kZTsKLQl1MzIgYW50ZW5uYTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTE2IHJ0c190aHJlc2hvbGQ7CiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwpAQCAtOTA3LDYgKzk5NiwxMiBAQAogCXU4IGtleV9tYXBwaW5nX2tleTsKIAl1bnNpZ25lZCBsb25nIHVjb2RlX2tleV90YWJsZTsKIAorCS8qIHF1ZXVlIHJlZmNvdW50cyAqLworI2RlZmluZSBJV0xfTUFYX0hXX1FVRVVFUwkzMgorCXVuc2lnbmVkIGxvbmcgcXVldWVfc3RvcHBlZFtCSVRTX1RPX0xPTkdTKElXTF9NQVhfSFdfUVVFVUVTKV07CisJLyogZm9yIGVhY2ggQUMgKi8KKwlhdG9taWNfdCBxdWV1ZV9zdG9wX2NvdW50WzRdOworCiAJLyogSW5kaWNhdGlvbiBpZiBpZWVlODAyMTFfb3BzLT5vcGVuIGhhcyBiZWVuIGNhbGxlZCAqLwogCXU4IGlzX29wZW47CiAKQEAgLTkyOSw2ICsxMDI0LDEwIEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAorCS8qQWRkZWQgZm9yIDM5NDUgKi8KKwl2b2lkICpzaGFyZWRfdmlydDsKKwlkbWFfYWRkcl90IHNoYXJlZF9waHlzOworCS8qRW5kKi8KIAlzdHJ1Y3QgaXdsX2h3X3BhcmFtcyBod19wYXJhbXM7CiAKIApAQCAtOTYwLDYgKzEwNTksMTEgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7CisKKwkvKkZvciAzOTQ1IG9ubHkqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKIAlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKQEAgLTk4Miw2ICsxMDg2LDE1IEBACiAJdTMyIGRpc2FibGVfdHhfcG93ZXJfY2FsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CisKKwkvKkZvciAzOTQ1Ki8KKyNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgorCisJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzXzM5OworCisJc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc18zOVtJV0xfU1RBVElPTl9DT1VOVF07CisKKwl1MzIgc3RhX3N1cHBfcmF0ZXM7CiB9OyAvKml3bF9wcml2ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IGNlMmY0NzMuLjc1NTE3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKIAkJCQlFRVBST01fU0VNX1RJTUVPVVQpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCUlXTF9ERUJVR19JTygiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKKwkJCUlXTF9ERUJVR19JTyhwcml2LCAiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKIAkJCQljb3VudCsxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAogCQkJCQkgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOworCQkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLAorCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSBWRVI9MHgleCA8IDB4JXggQ0FMSUI9MHgleCA8IDB4JXhcbiIsCiAJCSAgZWVwcm9tX3ZlciwgcHJpdi0+Y2ZnLT5lZXByb21fdmVyLAogCQkgIGNhbGliX3ZlciwgIHByaXYtPmNmZy0+ZWVwcm9tX2NhbGliX3Zlcik7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19JTkZPKCJGQVQgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC00MzIsMTEgKzQzMiwxMSBAQAogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCiAJaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCXByaXYtPmNoYW5uZWxfY291bnQgPQogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKSArCkBAIC00NDUsMTIgKzQ0NSwxMiBAQAogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF80KSArCiAJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzUpOwogCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwogCiAJcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9jaGFubmVsX2luZm8pICoKIAkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwogCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJIElFRUU4MDIxMV9DSEFOX05PX0ZBVF9CRUxPVyk7CiAKIAkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgorCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKIAkJCQkJICAgICAgICJObyB0cmFmZmljXG4iLAogCQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGNoX2luZm8tPmZsYWdzLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CiAJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwogCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKIAkJCQkgICAgICAgIiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCiAJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB1c2VyX3R4cG93ZXJfbGltaXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCS8qIFNldCB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKIAkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwogCQkJaWYgKGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnID4KIAkJCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQpAQCAtNTMxLDYgKzUzMSwxMyBAQAogCQl9CiAJfQogCisJLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09CisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMucmVndWxhdG9yeV9iYW5kc1s2XSA9PQorCSAgICBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCkKKwkJcmV0dXJuIDA7CisKIAkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCiAJZm9yIChiYW5kID0gNjsgYmFuZCA8PSA3OyBiYW5kKyspIHsKIAkJZW51bSBpZWVlODAyMTFfYmFuZCBpZWVlYmFuZDsKQEAgLTU4Miw2ICs1ODksNyBAQAogCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7CiAJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NoYW5uZWxfbWFwKTsKIAogLyoqCiAgKiBpd2xfZ2V0X2NoYW5uZWxfaW5mbyAtIEZpbmQgZHJpdmVyJ3MgcHJpdmF0ZSBjaGFubmVsIGluZm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggNjAzYzg0Yi4uMzQ3OTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExOCw2ICsxMTgsOSBAQAogCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogMzk0NSBTcGVjaWZpYyAqLworI2RlZmluZSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTgkoMHgyZikKKwogLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLwogI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCiAKQEAgLTM2Nyw2ICszNzAsOCBAQAogICovCiAjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMgKDIqMHhBOCkJLyogMjIgYnl0ZXMgKi8KIAorI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVAkJCSgwKQorCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwogCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggZDdkYTE5OC4uNjVmYThhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5OSw2ICszOTksMjEgQEAKICAqLwogI2RlZmluZSBGSF9UWF9DSElDS0VOX0JJVFNfU0NEX0FVVE9fUkVUUllfRU4JKDB4MDAwMDAwMDIpCiAKKyNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4CisKKy8qCisgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAorI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKKworLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLworI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfM0sgKDMgKiAxMDAwKSAvKiAzOTQ1IG9ubHkgKi8KKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3JiX3N0YXR1cyAtIHJlc2V2ZSBidWZmZXIgc3RhdHVzCiAgKiAJaG9zdCBtZW1vcnkgbWFwcGVkIEZIIHJlZ2lzdGVycwpAQCAtNDE0LDYgKzQyOSw3IEBACiAJX19sZTE2IGNsb3NlZF9mcl9udW07CiAJX19sZTE2IGZpbmlzaGVkX3JiX251bTsKIAlfX2xlMTYgZmluaXNoZWRfZnJfbmFtOworCV9fbGUzMiBfX3VudXNlZDsgLyogMzk0NSBvbmx5ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00NzcsNyArNDkzLDYgQEAKIAlfX2xlMzIgX19wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCiAvKiBLZWVwIFdhcm0gU2l6ZSAqLwogI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyogNGsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDRiMzViMzAuLjE3ZDYxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTA5LDE0ICsxMDksMTQgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXJldHVybiAxOwogCX0KIAogCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlzd2l0Y2ggKGNtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJCQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiYmFjayBmcm9tICVzICgweCUwOFgpXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAl9CiAjZW5kaWYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJcmV0ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzQsOCArMTc0LDkgQEAKIAlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODgsNyArMTg5LDcgQEAKIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nICVzOiBlbnF1ZXVlX2hjbWQgZmFpbGVkOiAlZFxuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5OCw5ICsxOTksMTAgQEAKIAkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CiAKIAkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKQEAgLTIwOSwxOSArMjExLDE5IEBACiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUNBTkNFTEVEOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGNhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCBjYTRmNjM4Li5hMTMyOGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC05Myw0ICs5Myw1NiBAQAogCXJldHVybiAoZGVzYy0+dl9hZGRyICE9IE5VTEwpID8gMCA6IC1FTk9NRU07CiB9CiAKKy8qCisgKiB3ZSBoYXZlIDggYml0cyB1c2VkIGxpa2UgdGhpczoKKyAqCisgKiA3IDYgNSA0IDMgMiAxIDAKKyAqIHwgfCB8IHwgfCB8IHwgfAorICogfCB8IHwgfCB8IHwgKy0rLS0tLS0tLS0gQUMgcXVldWUgKDAtMykKKyAqIHwgfCB8IHwgfCB8CisgKiB8ICstKy0rLSstKy0tLS0tLS0tLS0tLSBIVyBBLU1QRFUgcXVldWUKKyAqIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluZGljYXRlcyBhZ2cgcXVldWUKKyAqLworc3RhdGljIGlubGluZSB1OCBpd2xfdmlydHVhbF9hZ2dfcXVldWVfbnVtKHU4IGFjLCB1OCBod3EpCit7CisJQlVHX09OKGFjID4gMyk7ICAgLyogb25seSBoYXZlIDIgYml0cyAqLworCUJVR19PTihod3EgPiAzMSk7IC8qIG9ubHkgaGF2ZSA1IGJpdHMgKi8KKworCXJldHVybiAweDgwIHwgKGh3cSA8PCAyKSB8IGFjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dha2VfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3sKKwl1OCBhYyA9IHF1ZXVlOworCXU4IGh3cSA9IHF1ZXVlOworCisJaWYgKHF1ZXVlICYgMHg4MCkgeworCQlhYyA9IHF1ZXVlICYgMzsKKwkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKKwl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGh3cSwgcHJpdi0+cXVldWVfc3RvcHBlZCkpCisJCWlmIChhdG9taWNfZGVjX3JldHVybigmcHJpdi0+cXVldWVfc3RvcF9jb3VudFthY10pIDw9IDApCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgYWMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N0b3BfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3sKKwl1OCBhYyA9IHF1ZXVlOworCXU4IGh3cSA9IHF1ZXVlOworCisJaWYgKHF1ZXVlICYgMHg4MCkgeworCQlhYyA9IHF1ZXVlICYgMzsKKwkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaHdxLCBwcml2LT5xdWV1ZV9zdG9wcGVkKSkKKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2FjXSkgPiAwKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGFjKTsKK30KKworI2RlZmluZSBpZWVlODAyMTFfc3RvcF9xdWV1ZSBET19OT1RfVVNFX2llZWU4MDIxMV9zdG9wX3F1ZXVlCisjZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3dha2VfcXVldWUKKwogI2VuZGlmCQkJCS8qIF9faXdsX2hlbHBlcnNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwYTkyZTc0Li4wODNlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgdTMyIG9mcywgdTMyIHZhbCkKIHsKLQlJV0xfREVCVUdfSU8oIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwogfQogI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXApAQCAtNzksNyArNzksNyBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiBzdGF0aWMgaW5saW5lIHUzMiBfX2l3bF9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcykKIHsKLQlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglMDhYKSAtICVzICVkXG4iLCBvZnMsIGYsIGwpOworCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7CiAJcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7CiB9CiAjZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJCQkgdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKIHsKIAlpbnQgcmV0ID0gX2l3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCiAJCSAgICAgYWRkciwgYml0cywgbWFzaywKIAkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwogCXJldHVybiByZXQ7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAl1MzIgdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2s7Ci0JSVdMX0RFQlVHX0lPKCJzZXRfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOworCUlXTF9ERUJVR19JTyhwcml2LCAic2V0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfc2V0X2JpdChwLCByLCBtKSBfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiB7CiAJdTMyIHZhbCA9IF9pd2xfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfY2xlYXJfYml0KHAsIHIsIG0pIF9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCkBAIC0xNTYsNiArMTU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OworCXUzMiB2YWw7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCiAJCXJldHVybiAwOwpAQCAtMTY1LDkgKzE2NiwxMCBAQAogCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKIAkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCA1MCk7CisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgMTUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiTUFDIGlzIGluIGRlZXAgc2xlZXAhXG4iKTsKKwkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE4Miw5ICsxODQsOSBAQAogCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkICVzICVkLlxuIiwgZiwgbCk7CisJCUlXTF9FUlIocHJpdiwgIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CiAJcmV0dXJuIF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogfQogI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKQEAgLTIwNyw5ICsyMDksOSBAQAogCQkJCQkgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlcyAlZC5cbiIsIGYsIGwpOworCQlJV0xfRVJSKHByaXYsICJSZWxlYXNlIHVuaGVsZCBuaWMgYWNjZXNzIGF0IGxpbmUgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CisJSVdMX0RFQlVHX0lPKHByaXYsICJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKIAlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KICNkZWZpbmUgaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCkBAIC0yMjksOCArMjMxLDggQEAKIHsKIAl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyAlZFxuIiwgZiwgbCk7Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTRYKSA9IDB4JTA4eCAtICVzICVkIFxuIiwgcmVnLCB2YWx1ZSwKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWQgXG4iLCByZWcsIHZhbHVlLAogCQkgICAgIGYsIGwpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTI1MCw3ICsyNTIsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsIHZhbHVlKTsKIH0KICNkZWZpbmUgaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpIFwKQEAgLTI4NCwxMCArMjg2LDEwIEBACiAJaW50IHJldCAgPSBfaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKKwkJSVdMX0RFQlVHX0lPKHByaXYsICJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpIC0gIgogCQkJICAgICAidGltZWRvdXQgLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgZiwgbCk7CiAJZWxzZQotCQlJV0xfREVCVUdfSU8oInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgorCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgogCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA4LDcgKzMxMCw3IEBACiAJCQkJICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlyZXR1cm4gX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIH0KIApAQCAtMzMxLDcgKzMzMyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlfaXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKIH0KIApAQCAtMzQ5LDcgKzM1MSw3IEBACiAJCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAKIAlfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKIH0KQEAgLTM2Nyw3ICszNjksNyBAQAogCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKIHsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOwogCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7CiB9CiAjZGVmaW5lIGl3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDExZWNjZDdkMi4uMTk2ODBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTIzLDcgKzEyMyw3IEBACiAvKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLwogc3RhdGljIGludCBpd2w0OTY1X2xlZF9vbl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCUlXTF9ERUJVR19MRUQoImxlZCBvbiAlZFxuIiwgbGVkX2lkKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJsZWQgb24gJWRcbiIsIGxlZF9pZCk7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIENTUl9MRURfUkVHX1RSVU5fT04pOwogCXJldHVybiAwOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCS5vZmYgPSAwLAogCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKIAl9OwotCUlXTF9ERUJVR19MRUQoImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9mZiAlZFxuIiwgbGVkX2lkKTsKIAlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7CiB9CiAjZW5kaWYKQEAgLTE1OSw3ICsxNTksNyBAQAogLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb2ZmX3JlZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7Ci0JSVdMX0RFQlVHX0xFRCgiTEVEIFJlZyBvZmZcbiIpOworCUlXTF9ERUJVR19MRUQocHJpdiwgIkxFRCBSZWcgb2ZmXG4iKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgQ1NSX0xFRF9SRUdfVFJVTl9PRkYpOwogCXJldHVybiAwOwogfQpAQCAtMTY5LDcgKzE2OSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaXdsX2xlZF9hc3NvY2lhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCUlXTF9ERUJVR19MRUQoIkFzc29jaWF0ZWRcbiIpOworCUlXTF9ERUJVR19MRUQocHJpdiwgIkFzc29jaWF0ZWRcbiIpOwogCXByaXYtPmFsbG93X2JsaW5raW5nID0gMTsKIAlyZXR1cm4gaXdsNDk2NV9sZWRfb25fcmVnKHByaXYsIGxlZF9pZCk7CiB9CkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJcmV0dXJuOwogCiAKLQlJV0xfREVCVUdfTEVEKCJMZWQgdHlwZSA9ICVzIGJyaWdodG5lc3MgPSAlZFxuIiwKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMZWQgdHlwZSA9ICVzIGJyaWdodG5lc3MgPSAlZFxuIiwKIAkJCWxlZF90eXBlX3N0cltsZWQtPnR5cGVdLCBicmlnaHRuZXNzKTsKIAlzd2l0Y2ggKGJyaWdodG5lc3MpIHsKIAljYXNlIExFRF9GVUxMOgpAQCAtMjU0LDcgKzI1NCw3IEBACiAKIAlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2aWNlLCAmbGVkLT5sZWRfZGV2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvcjogZmFpbGVkIHRvIHJlZ2lzdGVyIGxlZCBoYW5kbGVyLlxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yODAsNyArMjgwLDcgQEAKIAlpZiAodHB0IDwgMCkgLyogd3JhcGFyb3VuZCAqLwogCQl0cHQgPSAtdHB0OwogCi0JSVdMX0RFQlVHX0xFRCgidHB0ICVsbGQgY3VycmVudF90cHQgJWxsdVxuIiwKKwlJV0xfREVCVUdfTEVEKHByaXYsICJ0cHQgJWxsZCBjdXJyZW50X3RwdCAlbGx1XG4iLAogCQkobG9uZyBsb25nKXRwdCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50X3RwdCk7CiAJcHJpdi0+bGVkX3RwdCA9IGN1cnJlbnRfdHB0OwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJCQlpZiAodHB0ICA+IChibGlua190YmxbaV0udHB0ICogSVdMXzFNQl9SQVRFKSkKIAkJCQlicmVhazsKIAotCUlXTF9ERUJVR19MRUQoIkxFRCBCTElOSyBJRFg9JWRcbiIsIGkpOworCUlXTF9ERUJVR19MRUQocHJpdiwgIkxFRCBCTElOSyBJRFg9JWRcbiIsIGkpOwogCXJldHVybiBpOwogfQogCkBAIC0zNTIsNyArMzUyLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lKSwgIml3bC0lczpyYWRpbyIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lKSwgIml3bC0lczo6cmFkaW8iLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubGVkX29uID0gaXdsNDk2NV9sZWRfb25fcmVnOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSksICJpd2wtJXM6YXNzb2MiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSksICJpd2wtJXM6OmFzc29jIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2xfbGVkc19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10sCkBAIC0zODIsNyArMzgyLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczpSWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczo6UlgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXSwKQEAgLTM5Nyw3ICszOTcsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUpLCAiaXdsLSVzOlRYIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUpLCAiaXdsLSVzOjpUWCIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaAppbmRleCAwMjFlMDBiLi5lZjliMTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNSw3ICszNSw3IEBACiAKICNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQogI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCi0jZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisjZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBjcHVfdG9fbGUzMigxMDAwKQogCiAjZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCiAjZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCkBAIC00Nyw3ICs0Nyw5IEBACiAJSVdMX0xFRF9UUkdfUkFESU8sCiAJSVdMX0xFRF9UUkdfTUFYLAogfTsKKyNlbmRpZgogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCiBzdHJ1Y3QgaXdsX2xlZCB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKaW5kZXggNzVjYTZhNS4uNDdjODk0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC02MCwxNCArNjAsNiBAQAogI2RlZmluZSBJV0xfUE9XRVJfUkFOR0VfMV9NQVggICgxMCkKIAogCi0jZGVmaW5lIE5PU0xQIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksIDAsIDAKLSNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLLCAwLCAwCi0jZGVmaW5lIFNMUF9UT1VUKFQpIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKFQpICogTVNFQ19UT19VU0VDKQotI2RlZmluZSBTTFBfVkVDKFgwLCBYMSwgWDIsIFgzLCBYNCkge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDApLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgxKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMiksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDMpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFg0KX0KIAogI2RlZmluZSBJV0xfUE9XRVJfT05fQkFUVEVSWQkJSVdMX1BPV0VSX0lOREVYXzUKICNkZWZpbmUgSVdMX1BPV0VSX09OX0FDX0RJU0FTU09DCUlXTF9QT1dFUl9NT0RFX0NBTQpAQCAtMTEwLDYgKzEwMiw3IEBACiAJe3tTTFAsIFNMUF9UT1VUKDI1KSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQogfTsKIAorCiAvKiBzZXQgY2FyZCBwb3dlciBjb21tYW5kICovCiBzdGF0aWMgaW50IGl3bF9zZXRfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpjbWQpCiB7CkBAIC0xMzQsMTMgKzEyNyw2IEBACiAJCWVsc2UKIAkJCW1vZGUgPSBJV0xfUE9XRVJfT05fQUNfRElTQVNTT0M7CiAJCWJyZWFrOwotCS8qIEZJWE1FOiByZW1vdmUgYmF0dGVyeSBhbmQgYWMgZnJvbSBoZXJlICovCi0JY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKLQkJbW9kZSA9IElXTF9QT1dFUl9JTkRFWF8zOwotCQlicmVhazsKLQljYXNlIElXTF9QT1dFUl9BQzoKLQkJbW9kZSA9IElXTF9QT1dFUl9NT0RFX0NBTTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbW9kZSA9IHByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nOwogCQlicmVhazsKQEAgLTE0OSwxNyArMTM1LDE3IEBACiB9CiAKIC8qIGluaXRpYWxpemUgdG8gZGVmYXVsdCAqLwotc3RhdGljIGludCBpd2xfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7CiAJaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX01BWDsKIAlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQ7CiAJaW50IGk7Ci0JdTE2IHBjaV9wbTsKKwl1MTYgbGN0bDsKIAotCUlXTF9ERUJVR19QT1dFUigiSW5pdGlhbGl6ZSBwb3dlciBcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiSW5pdGlhbGl6ZSBwb3dlciBcbiIpOwogCi0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOworCXBvd19kYXRhID0gJnByaXYtPnBvd2VyX2RhdGE7CiAKIAltZW1zZXQocG93X2RhdGEsIDAsIHNpemVvZigqcG93X2RhdGEpKTsKIApAQCAtMTY3LDM4ICsxNTMsMzcgQEAKIAltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMVswXSwgJnJhbmdlXzFbMF0sIHNpemUpOwogCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8yWzBdLCAmcmFuZ2VfMlswXSwgc2l6ZSk7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ0ZHX0xJTktfQ1RSTCwgJnBjaV9wbSk7CisJbGN0bCA9IGl3bF9wY2llX2xpbmtfY3RsKHByaXYpOwogCi0JSVdMX0RFQlVHX1BPV0VSKCJhZGp1c3QgcG93ZXIgY29tbWFuZCBmbGFnc1xuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJhZGp1c3QgcG93ZXIgY29tbWFuZCBmbGFnc1xuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX01BWDsgaSsrKSB7CiAJCWNtZCA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbaV0uY21kOwogCi0JCWlmIChwY2lfcG0gJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKQorCQlpZiAobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMFNfRU4pCiAJCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfUENJX1BNX01TSzsKIAkJZWxzZQogCQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfUENJX1BNX01TSzsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIGFkanVzdCBwb3dlciBjb21tYW5kIGFjY29yZGluZyB0byBEVElNIHBlcmlvZCBhbmQgcG93ZXIgbGV2ZWwqLwotc3RhdGljIGludCBpd2xfdXBkYXRlX3Bvd2VyX2NvbW1hbmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQsCi0JCQkJICAgIHUxNiBtb2RlKQorc3RhdGljIGludCBpd2xfdXBkYXRlX3Bvd2VyX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLCB1MTYgbW9kZSkKIHsKLQlpbnQgcmV0ID0gMCwgaTsKLQl1OCBza2lwOwotCXUzMiBtYXhfc2xlZXAgPSAwOwogCXN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5ICpyYW5nZTsKLQl1OCBwZXJpb2QgPSAwOwogCXN0cnVjdCBpd2xfcG93ZXJfbWdyICpwb3dfZGF0YTsKKwlpbnQgaTsKKwl1MzIgbWF4X3NsZWVwID0gMDsKKwl1OCBwZXJpb2Q7CisJYm9vbCBza2lwOwogCiAJaWYgKG1vZGUgPiBJV0xfUE9XRVJfSU5ERVhfNSkgewotCQlJV0xfREVCVUdfUE9XRVIoIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOwotCQlyZXR1cm4gLTE7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiRXJyb3IgaW52YWxpZCBwb3dlciBtb2RlIFxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwb3dfZGF0YSA9ICYocHJpdi0+cG93ZXJfZGF0YSk7CisKKwlwb3dfZGF0YSA9ICZwcml2LT5wb3dlcl9kYXRhOwogCiAJaWYgKHBvd19kYXRhLT5kdGltX3BlcmlvZCA8PSBJV0xfUE9XRVJfUkFOR0VfMF9NQVgpCiAJCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXTsKQEAgLTIxMiwxNCArMTk3LDEyIEBACiAKIAlpZiAocGVyaW9kID09IDApIHsKIAkJcGVyaW9kID0gMTsKLQkJc2tpcCA9IDA7Ci0JfSBlbHNlCi0JCXNraXAgPSByYW5nZVttb2RlXS5ub19kdGltOwotCi0JaWYgKHNraXAgPT0gMCkgewotCQltYXhfc2xlZXAgPSBwZXJpb2Q7Ci0JCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLOworCQlza2lwID0gZmFsc2U7CiAJfSBlbHNlIHsKKwkJc2tpcCA9ICEhcmFuZ2VbbW9kZV0ubm9fZHRpbTsKKwl9CisKKwlpZiAoc2tpcCkgewogCQlfX2xlMzIgc2xwX2l0cnZsID0gY21kLT5zbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkUgLSAxXTsKIAkJbWF4X3NsZWVwID0gbGUzMl90b19jcHUoc2xwX2l0cnZsKTsKIAkJaWYgKG1heF9zbGVlcCA9PSAweEZGKQpAQCAtMjI3LDI0ICsyMTAsMjYgQEAKIAkJZWxzZSBpZiAobWF4X3NsZWVwID4gIHBlcmlvZCkKIAkJCW1heF9zbGVlcCA9IChsZTMyX3RvX2NwdShzbHBfaXRydmwpIC8gcGVyaW9kKSAqIHBlcmlvZDsKIAkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwl9IGVsc2UgeworCQltYXhfc2xlZXAgPSBwZXJpb2Q7CisJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfVkVDX1NJWkU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfVkVDX1NJWkU7IGkrKykKIAkJaWYgKGxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0pID4gbWF4X3NsZWVwKQogCQkJY21kLT5zbGVlcF9pbnRlcnZhbFtpXSA9IGNwdV90b19sZTMyKG1heF9zbGVlcCk7Ci0JfQogCi0JSVdMX0RFQlVHX1BPV0VSKCJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkZsYWdzIHZhbHVlID0gMHglMDhYXG4iLCBjbWQtPmZsYWdzKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlR4IHRpbWVvdXQgPSAldVxuIiwgbGUzMl90b19jcHUoY21kLT50eF9kYXRhX3RpbWVvdXQpKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlJ4IHRpbWVvdXQgPSAldVxuIiwgbGUzMl90b19jcHUoY21kLT5yeF9kYXRhX3RpbWVvdXQpKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNsZWVwIGludGVydmFsIHZlY3RvciA9IHsgJWQgLCAlZCAsICVkICwgJWQgLCAlZCB9XG4iLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFswXSksCiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzFdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMl0pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFszXSksCiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzRdKSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAKQEAgLTI4OCwxNCArMjczLDE0IEBACiAJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJZmluYWxfbW9kZSA9IElXTF9QT1dFUl9NT0RFX0NBTTsKIAotCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSAmJiAhc2V0dGluZy0+cG93ZXJfZGlzYWJsZWQgJiYKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpICYmICFzZXR0aW5nLT5wb3dlcl9kaXNhYmxlZCAmJgogCSAgICAoKHNldHRpbmctPnBvd2VyX21vZGUgIT0gZmluYWxfbW9kZSkgfHwgZm9yY2UpKSB7CiAJCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgY21kOwogCiAJCWlmIChmaW5hbF9tb2RlICE9IElXTF9QT1dFUl9NT0RFX0NBTSkKIAkJCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7CiAKLQkJaXdsX3VwZGF0ZV9wb3dlcl9jb21tYW5kKHByaXYsICZjbWQsIGZpbmFsX21vZGUpOworCQlpd2xfdXBkYXRlX3Bvd2VyX2NtZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKIAkJY21kLmtlZXBfYWxpdmVfYmVhY29ucyA9IDA7CiAKIAkJaWYgKGZpbmFsX21vZGUgPT0gSVdMX1BPV0VSX0lOREVYXzUpCkBAIC0zMTEsNyArMjk2LDcgQEAKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyAmJiB1cGRhdGVfY2hhaW5zKQogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzKHByaXYpOwogCQllbHNlCi0JCQlJV0xfREVCVUdfUE9XRVIoIkNhbm5vdCB1cGRhdGUgdGhlIHBvd2VyLCBjaGFpbiBub2lzZSAiCisJCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkNhbm5vdCB1cGRhdGUgdGhlIHBvd2VyLCBjaGFpbiBub2lzZSAiCiAJCQkJCSJjYWxpYnJhdGlvbiBydW5uaW5nOiAlZFxuIiwKIAkJCQkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5zdGF0ZSk7CiAJCWlmICghcmV0KQpAQCAtMzY2LDcgKzM1MSw3IEBACiAvKiBzZXQgdXNlcl9wb3dlcl9zZXR0aW5nICovCiBpbnQgaXdsX3Bvd2VyX3NldF91c2VyX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgbW9kZSkKIHsKLQlpZiAobW9kZSA+IElXTF9QT1dFUl9MSU1JVCkKKwlpZiAobW9kZSA+IElXTF9QT1dFUl9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmcgPSBtb2RlOwpAQCAtMzgwLDExICszNjUsMTAgQEAKICAqLwogaW50IGl3bF9wb3dlcl9zZXRfc3lzdGVtX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgbW9kZSkKIHsKLQlpZiAobW9kZSA+IElXTF9QT1dFUl9MSU1JVCkKKwlpZiAobW9kZSA8IElXTF9QT1dFUl9TWVNfTUFYKQorCQlwcml2LT5wb3dlcl9kYXRhLnN5c3RlbV9wb3dlcl9zZXR0aW5nID0gbW9kZTsKKwllbHNlCiAJCXJldHVybiAtRUlOVkFMOwotCi0JcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZyA9IG1vZGU7Ci0KIAlyZXR1cm4gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIDApOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfc2V0X3N5c3RlbV9tb2RlKTsKQEAgLTM5MiwxMyArMzc2LDExIEBACiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KIHZvaWQgaXdsX3Bvd2VyX2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCiAJaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHByaXYpOwogCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gSVdMX1BPV0VSX0FVVE87Ci0JcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9kaXNhYmxlZCA9IDA7CiAJcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZyA9IElXTF9QT1dFUl9TWVNfQVVUTzsKLQlwcml2LT5wb3dlcl9kYXRhLmlzX2JhdHRlcnlfYWN0aXZlID0gMDsKIAlwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkID0gMDsKKwlwcml2LT5wb3dlcl9kYXRhLmlzX2JhdHRlcnlfYWN0aXZlID0gMDsKIAlwcml2LT5wb3dlcl9kYXRhLmNyaXRpY2FsX3Bvd2VyX3NldHRpbmcgPSAwOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfaW5pdGlhbGl6ZSk7CkBAIC00MDcsOCArMzg5LDggQEAKIGludCBpd2xfcG93ZXJfdGVtcGVyYXR1cmVfY2hhbmdlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKLQl1MTYgbmV3X2NyaXRpY2FsID0gcHJpdi0+cG93ZXJfZGF0YS5jcml0aWNhbF9wb3dlcl9zZXR0aW5nOwogCXMzMiB0ZW1wZXJhdHVyZSA9IEtFTFZJTl9UT19DRUxTSVVTKHByaXYtPmxhc3RfdGVtcGVyYXR1cmUpOworCXUxNiBuZXdfY3JpdGljYWwgPSBwcml2LT5wb3dlcl9kYXRhLmNyaXRpY2FsX3Bvd2VyX3NldHRpbmc7CiAKIAlpZiAodGVtcGVyYXR1cmUgPiBJV0xfQ1RfS0lMTF9URU1QRVJBVFVSRSkKIAkJcmV0dXJuIDA7CkBAIC00MzQsNyArNDE2LDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKIAkJCQlzdHJ1Y3QgaXdsX3ByaXYsIHNldF9wb3dlcl9zYXZlLndvcmspOwotCUlXTF9ERUJVRyhJV0xfRExfU1RBVEUsICJ1cGRhdGUgcG93ZXJcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAidXBkYXRlIHBvd2VyXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKaW5kZXggZmEwOThkOC4uMTg5NjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00MiwyMiArNDIsMjYgQEAKIAlJV0xfUE9XRVJfSU5ERVhfNSwKIAlJV0xfUE9XRVJfQVVUTywKIAlJV0xfUE9XRVJfTUFYID0gSVdMX1BPV0VSX0FVVE8sCi0JSVdMX1BPV0VSX0FDLAotCUlXTF9QT1dFUl9CQVRURVJZLAogfTsKIAogZW51bSB7CiAJSVdMX1BPV0VSX1NZU19BVVRPLAogCUlXTF9QT1dFUl9TWVNfQUMsCiAJSVdMX1BPV0VSX1NZU19CQVRURVJZLAorCUlXTF9QT1dFUl9TWVNfTUFYLAogfTsKIAotI2RlZmluZSBJV0xfUE9XRVJfTElNSVQJCTB4MDgKLSNkZWZpbmUgSVdMX1BPV0VSX01BU0sJCTB4MEYKLSNkZWZpbmUgSVdMX1BPV0VSX0VOQUJMRUQJMHgxMAogCiAvKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHN0cnVjdHVyZXMgKi8KIAorI2RlZmluZSBOT1NMUCBjcHVfdG9fbGUxNigwKSwgMCwgMAorI2RlZmluZSBTTFAgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0ssIDAsIDAKKyNkZWZpbmUgU0xQX1RPVVQoVCkgY3B1X3RvX2xlMzIoKFQpICogTVNFQ19UT19VU0VDKQorI2RlZmluZSBTTFBfVkVDKFgwLCBYMSwgWDIsIFgzLCBYNCkge2NwdV90b19sZTMyKFgwKSwgXAorCQkJCSAgICAgY3B1X3RvX2xlMzIoWDEpLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYMiksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFgzKSwgXAorCQkJCSAgICAgY3B1X3RvX2xlMzIoWDQpfQogc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgewogCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgY21kOwogCXU4IG5vX2R0aW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKaW5kZXggYjdhNWYyMy4uM2I5Y2FjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmMKaW5kZXggNGI2OWRhMy4uMmFkOWZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQ3LDcgKzQ3LDcgQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIndlIHJlY2VpdmVkIHNvZnQgUkZLSUxMIHNldCB0byBzdGF0ZSAlZFxuIiwgc3RhdGUpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJ3ZSByZWNlaXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CkBAIC02Miw3ICs2Miw4IEBACiAJCWl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8ocHJpdik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJ3ZSByZWNlaXZlZCB1bmV4cGVjdGVkIFJGS0lMTCBzdGF0ZSAlZFxuIiwgc3RhdGUpOworCQlJV0xfV0FSTihwcml2LCAid2UgcmVjZWl2ZWQgdW5leHBlY3RlZCBSRktJTEwgc3RhdGUgJWRcbiIsCisJCQlzdGF0ZSk7CiAJCWJyZWFrOwogCX0KIG91dF91bmxvY2s6CkBAIC03OCwxMCArNzksMTAgQEAKIAogCUJVR19PTihkZXZpY2UgPT0gTlVMTCk7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiSW5pdGlhbGl6aW5nIFJGS0lMTC5cbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJJbml0aWFsaXppbmcgUkZLSUxMLlxuIik7CiAJcHJpdi0+cmZraWxsID0gcmZraWxsX2FsbG9jYXRlKGRldmljZSwgUkZLSUxMX1RZUEVfV0xBTik7CiAJaWYgKCFwcml2LT5yZmtpbGwpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgUkZLSUxMIGRldmljZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gYWxsb2NhdGUgUkZLSUxMIGRldmljZS5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTk3LDExICs5OCwxMSBAQAogCiAJcmV0ID0gcmZraWxsX3JlZ2lzdGVyKHByaXYtPnJma2lsbCk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciBSRktJTEw6ICVkXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgUkZLSUxMOiAlZFxuIiwgcmV0KTsKIAkJZ290byBmcmVlX3Jma2lsbDsKIAl9CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwogCXJldHVybiByZXQ7CiAKIGZyZWVfcmZraWxsOgpAQCAtMTEwLDcgKzExMSw3IEBACiAJcHJpdi0+cmZraWxsID0gTlVMTDsKIAogZXJyb3I6Ci0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfcmZraWxsX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuaAppbmRleCA4NmRjMDU1Li42MzNkYWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggYzVmMWFhMC4uOGY2NTkwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0xMjUsOSArMTI1LDEwIEBACiAgKi8KIGludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpCiB7Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcnhfd3J0X3B0cl9yZWcgPSBwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWc7CisJdTMyIHJlZzsKKwlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE0OSwxNSArMTUwLDE0IEBACiAJCQlnb3RvIGV4aXRfdW5sb2NrOwogCiAJCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwKLQkJCQkgICAgIHEtPndyaXRlICYgfjB4Nyk7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCByeF93cnRfcHRyX3JlZywgcS0+d3JpdGUgJiB+MHg3KTsKIAkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCS8qIEVsc2UgZGV2aWNlIGlzIGFzc3VtZWQgdG8gYmUgYXdha2UgKi8KLQl9IGVsc2UKKwl9IGVsc2UgewogCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsX3dyaXRlMzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwgcS0+d3JpdGUgJiB+MHg3KTsKLQorCQlpd2xfd3JpdGUzMihwcml2LCByeF93cnRfcHRyX3JlZywgcS0+d3JpdGUgJiB+MHg3KTsKKwl9CiAKIAlxLT5uZWVkX3VwZGF0ZSA9IDA7CiAKQEAgLTI2Miw4ICsyNjIsNyBAQAogCQlyeGItPnNrYiA9IGFsbG9jX3NrYihwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgKyAyNTYsCiAJCQkJICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyeGItPnNrYikgewotCQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTkFNRQotCQkJCSAgICJDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKKwkJCUlXTF9DUklUKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKIAkJCS8qIFdlIGRvbid0IHJlc2NoZWR1bGUgcmVwbGVuaXNoIHdvcmsgaGVyZSAtLSB3ZSB3aWxsCiAJCQkgKiBjYWxsIHRoZSByZXN0b2NrIG1ldGhvZCBhbmQgaWYgaXQgc3RpbGwgbmVlZHMKIAkJCSAqIG1vcmUgYnVmZmVycyBpdCB3aWxsIHNjaGVkdWxlIHJlcGxlbmlzaCAqLwpAQCAtNDk1LDcgKzQ5NCw3IEBACiAKIAltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOwogCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucykgPiA1KSB7Ci0JCUlXTF9ERUJVR19DQUxJQigibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtaXNzZWQgYmNuIGNuc3EgJWQgdG90bCAlZCByY2QgJWQgZXhwY3RkICVkXG4iLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+Y29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+dG90YWxfbWlzc2VkX2JlY29ucyksCiAJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5udW1fcmVjdmRfYmVhY29ucyksCkBAIC01NDIsNyArNTQxLDcgQEAKIAllbHNlCiAJCXByaXYtPmxhc3Rfcnhfbm9pc2UgPSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFOwogCi0JSVdMX0RFQlVHX0NBTElCKCJpbmJhbmQgc2lsZW5jZSBhICV1LCBiICV1LCBjICV1LCBkQm0gJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJpbmJhbmQgc2lsZW5jZSBhICV1LCBiICV1LCBjICV1LCBkQm0gJWRcbiIsCiAJCQliY25fc2lsZW5jZV9hLCBiY25fc2lsZW5jZV9iLCBiY25fc2lsZW5jZV9jLAogCQkJcHJpdi0+bGFzdF9yeF9ub2lzZSk7CiB9CkBAIC01NTUsNyArNTU0LDcgQEAKIAlpbnQgY2hhbmdlOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAotCUlXTF9ERUJVR19SWCgiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCisJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKIAkJICAgICAoaW50KXNpemVvZihwcml2LT5zdGF0aXN0aWNzKSwgcGt0LT5sZW4pOwogCiAJY2hhbmdlID0gKChwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwudGVtcGVyYXR1cmUgIT0KQEAgLTc0MiwxMyArNzQxLDEzIEBACiAJCSAqIE1BQyBhZGRyZXNzZXMgc2hvdyBqdXN0IHRoZSBsYXN0IGJ5dGUgKGZvciBicmV2aXR5KSwKIAkJICogICAgYnV0IHlvdSBjYW4gaGFjayBpdCB0byBzaG93IG1vcmUsIGlmIHlvdSdkIGxpa2UgdG8uICovCiAJCWlmIChkYXRhZnJhbWUpCi0JCQlJV0xfREVCVUdfUlgoIiVzOiBtaGQ9MHglMDR4LCBkc3Q9MHglMDJ4LCAiCisJCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiBtaGQ9MHglMDR4LCBkc3Q9MHglMDJ4LCAiCiAJCQkJICAgICAibGVuPSV1LCByc3NpPSVkLCBjaG5sPSVkLCByYXRlPSV1LCBcbiIsCiAJCQkJICAgICB0aXRsZSwgbGUxNl90b19jcHUoZmMpLCBoZWFkZXItPmFkZHIxWzVdLAogCQkJCSAgICAgbGVuZ3RoLCByc3NpLCBjaGFubmVsLCBiaXRyYXRlKTsKIAkJZWxzZSB7CiAJCQkvKiBzcmMvZHN0IGFkZHJlc3NlcyBhc3N1bWUgbWFuYWdlZCBtb2RlICovCi0JCQlJV0xfREVCVUdfUlgoIiVzOiAweCUwNHgsIGRzdD0weCUwMngsIHNyYz0weCUwMngsICIKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgc3JjPTB4JTAyeCwgIgogCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgdGltPSVsdSB1c2VjLCAiCiAJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCkBAIC03NzMsMTAgKzc3MiwxMCBAQAogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkCiAgKi8KLXN0YXRpYyBpbnQgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKLQkJCQkgICAgICB1MzIgZGVjcnlwdF9yZXMsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQoraW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCSAgIHUzMiBkZWNyeXB0X3JlcywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKIHsKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCkBAIC03ODYsNyArNzg1LDcgQEAKIAlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCiAJCXJldHVybiAwOwogCi0JSVdMX0RFQlVHX1JYKCJkZWNyeXB0X3JlczoweCV4XG4iLCBkZWNyeXB0X3Jlcyk7CisJSVdMX0RFQlVHX1JYKHByaXYsICJkZWNyeXB0X3JlczoweCV4XG4iLCBkZWNyeXB0X3Jlcyk7CiAJc3dpdGNoIChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLKSB7CiAJY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1RLSVA6CiAJCS8qIFRoZSB1Q29kZSBoYXMgZ290IGEgYmFkIHBoYXNlIDEgS2V5LCBwdXNoZXMgdGhlIHBhY2tldC4KQEAgLTgwMCwxMyArNzk5LDEzIEBACiAJCSAgICBSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDKSB7CiAJCQkvKiBiYWQgSUNWLCB0aGUgcGFja2V0IGlzIGRlc3Ryb3llZCBzaW5jZSB0aGUKIAkJCSAqIGRlY3J5cHRpb24gaXMgaW5wbGFjZSwgZHJvcCBpdCAqLwotCQkJSVdMX0RFQlVHX1JYKCJQYWNrZXQgZGVzdHJveWVkXG4iKTsKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiUGFja2V0IGRlc3Ryb3llZFxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUDoKIAkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KIAkJICAgIFJYX1JFU19TVEFUVVNfREVDUllQVF9PSykgewotCQkJSVdMX0RFQlVHX1JYKCJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7CisJCQlJV0xfREVCVUdfUlgocHJpdiwgImh3IGRlY3J5cHQgc3VjY2Vzc2Z1bGx5ISEhXG4iKTsKIAkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQl9CiAJCWJyZWFrOwpAQCAtODE2LDYgKzgxNSw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKTsKIAogc3RhdGljIHUzMiBpd2xfdHJhbnNsYXRlX3J4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBkZWNyeXB0X2luKQogewpAQCAtODcwLDcgKzg3MCw3IEBACiAJCWJyZWFrOwogCX07CiAKLQlJV0xfREVCVUdfUlgoImRlY3J5cHRfaW46MHgleCAgZGVjcnlwdF9vdXQgPSAweCV4XG4iLAorCUlXTF9ERUJVR19SWChwcml2LCAiZGVjcnlwdF9pbjoweCV4ICBkZWNyeXB0X291dCA9IDB4JXhcbiIsCiAJCQkJCWRlY3J5cHRfaW4sIGRlY3J5cHRfb3V0KTsKIAogCXJldHVybiBkZWNyeXB0X291dDsKQEAgLTg5NSw3ICs4OTUsNyBAQAogCQlyeF9zdGFydCA9IChzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKikmcHJpdi0+bGFzdF9waHlfcmVzWzFdOwogCiAJaWYgKCFyeF9zdGFydCkgewotCQlJV0xfRVJST1IoIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmIChpbmNsdWRlX3BoeSkgewpAQCAtOTM0LDggKzkzNCw4IEBACiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwogCWlmICh1bmxpa2VseSghcHJpdi0+aXNfb3BlbikpIHsKLQkJSVdMX0RFQlVHX0RST1BfTElNSVQKLQkJICAgICgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOworCQlJV0xfREVCVUdfRFJPUF9MSU1JVChwcml2LAorCQkgICAgIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkvKnJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsqLwogCiAJaWYgKCh1bmxpa2VseShyeF9zdGFydC0+Y2ZnX3BoeV9jbnQgPiAyMCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAlZC9uIiwKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICVkL24iLAogCQkJCXJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogCX0KIAogCWlmICghcnhfc3RhcnQpIHsKLQkJSVdMX0VSUk9SKCJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKIAogCWlmICghKCpyeF9lbmQgJiBSWF9SRVNfU1RBVFVTX05PX0NSQzMyX0VSUk9SKSB8fAogCSAgICAhKCpyeF9lbmQgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKLQkJSVdMX0RFQlVHX1JYKCJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsCisJCUlXTF9ERUJVR19SWChwcml2LCAiQmFkIENSQyBvciBGSUZPOiAweCUwOFguXG4iLAogCQkJCWxlMzJfdG9fY3B1KCpyeF9lbmQpKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJaWYgKHVubGlrZWx5KHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX1JYKSkKIAkJaXdsX2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcnhfc3RhcnQsIGxlbiwgaGVhZGVyLCAxKTsKICNlbmRpZgotCUlXTF9ERUJVR19TVEFUU19MSU1JVCgiUnNzaSAlZCwgbm9pc2UgJWQsIHF1YWwgJWQsIFRTRiAlbGx1XG4iLAorCUlXTF9ERUJVR19TVEFUU19MSU1JVChwcml2LCAiUnNzaSAlZCwgbm9pc2UgJWQsIHF1YWwgJWQsIFRTRiAlbGx1XG4iLAogCQlyeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMubm9pc2UsIHJ4X3N0YXR1cy5zaWduYWwsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnhfc3RhdHVzLm1hY3RpbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKaW5kZXggM2M4MDNmNi4uMjM2NDRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00NiwxNSArNDYsNiBAQAogI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl8yNEdIWiAoMykKICNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfNTJHSFogKDIpCiAKLS8qIEZvciBmYXN0ZXIgYWN0aXZlIHNjYW5uaW5nLCBzY2FuIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBjaGFubmVsIGlmIGZld2VyIHRoYW4KLSAqIFBMQ1BfUVVJRVRfVEhSRVNIIHBhY2tldHMgYXJlIGhlYXJkIG9uIHRoaXMgY2hhbm5lbCB3aXRoaW4KLSAqIEFDVElWRV9RVUlFVF9USU1FIGFmdGVyIHNlbmRpbmcgcHJvYmUgcmVxdWVzdC4gIFRoaXMgc2hvcnRlbnMgdGhlIGR3ZWxsCi0gKiB0aW1lIGlmIGl0J3MgYSBxdWlldCBjaGFubmVsIChub3RoaW5nIHJlc3BvbmRlZCB0byBvdXIgcHJvYmUsIGFuZCB0aGVyZSdzCi0gKiBubyBvdGhlciB0cmFmZmljKS4KLSAqIERpc2FibGUgInF1aWV0IiBmZWF0dXJlIGJ5IHNldHRpbmcgUExDUF9RVUlFVF9USFJFU0ggdG8gMC4gKi8KLSNkZWZpbmUgSVdMX1BMQ1BfUVVJRVRfVEhSRVNIICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSkgIC8qIHBhY2tldHMgKi8KLSNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTApICAvKiBtc2VjICovCi0KIC8qIEZvciBwYXNzaXZlIHNjYW4sIGxpc3RlbiBQQVNTSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbC4KICAqIE11c3QgYmUgc2V0IGxvbmdlciB0aGFuIGFjdGl2ZSBkd2VsbCB0aW1lLgogICogRm9yIHRoZSBtb3N0IHJlbGlhYmxlIHNjYW4sIHNldCA+IEFQIGJlYWNvbiBpbnRlcnZhbCAodHlwaWNhbGx5IDEwMG1zZWMpLiAqLwpAQCAtNjMsNyArNTQsNiBAQAogI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICAgICAgKDEwMCkKICNkZWZpbmUgSVdMX0NIQU5ORUxfVFVORV9USU1FICAgICAgIDUKIAotI2RlZmluZSBJV0xfU0NBTl9QUk9CRV9NQVNLKG4pIAljcHVfdG9fbGUzMigoQklUKG4pIHwgKEJJVChuKSAtIEJJVCgxKSkpKQogCiAKIC8qKgpAQCAtODAsMTIgKzcwLDEyIEBACiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgewogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQkJSVdMX0RFQlVHX1NDQU4oIlF1ZXVpbmcgc2NhbiBhYm9ydC5cbiIpOworCQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlF1ZXVpbmcgc2NhbiBhYm9ydC5cbiIpOwogCQkJc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CiAJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFib3J0X3NjYW4pOwogCiAJCX0gZWxzZQotCQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWJvcnQgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOworCQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gYWJvcnQgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwogCiAJCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwogCX0KQEAgLTExOSw3ICsxMDksNyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dCk7CiAKLXN0YXRpYyBpbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKQEAgLTE1MCw3ICsxNDAsNyBAQAogCQkgKiBjYW4gb2NjdXIgaWYgd2Ugc2VuZCB0aGUgc2NhbiBhYm9ydCBiZWZvcmUgd2UKIAkJICogdGhlIG1pY3JvY29kZSBoYXMgbm90aWZpZWQgdXMgdGhhdCBhIHNjYW4gaXMKIAkJICogY29tcGxldGVkLiAqLwotCQlJV0xfREVCVUdfSU5GTygiU0NBTl9BQk9SVCByZXR1cm5lZCAlZC5cbiIsIHJlcy0+dS5zdGF0dXMpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU0NBTl9BQk9SVCByZXR1cm5lZCAlZC5cbiIsIHJlcy0+dS5zdGF0dXMpOwogCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwogCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpOwogCX0KQEAgLTE2MCw3ICsxNTAsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQorRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9zY2FuX2Fib3J0KTsKIAogLyogU2VydmljZSByZXNwb25zZSB0byBSRVBMWV9TQ0FOX0NNRCAoMHg4MCkgKi8KIHN0YXRpYyB2b2lkIGl3bF9yeF9yZXBseV9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTE3MSw3ICsxNjEsNyBAQAogCXN0cnVjdCBpd2xfc2NhbnJlcV9ub3RpZmljYXRpb24gKm5vdGlmID0KIAkgICAgKHN0cnVjdCBpd2xfc2NhbnJlcV9ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwogCi0JSVdMX0RFQlVHX1JYKCJTY2FuIHJlcXVlc3Qgc3RhdHVzID0gMHgleFxuIiwgbm90aWYtPnN0YXR1cyk7CisJSVdMX0RFQlVHX1JYKHByaXYsICJTY2FuIHJlcXVlc3Qgc3RhdHVzID0gMHgleFxuIiwgbm90aWYtPnN0YXR1cyk7CiAjZW5kaWYKIH0KIApAQCAtMTgzLDcgKzE3Myw3IEBACiAJc3RydWN0IGl3bF9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICpub3RpZiA9CiAJICAgIChzdHJ1Y3QgaXdsX3NjYW5zdGFydF9ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwogCXByaXYtPnNjYW5fc3RhcnRfdHNmID0gbGUzMl90b19jcHUobm90aWYtPnRzZl9sb3cpOwotCUlXTF9ERUJVR19TQ0FOKCJTY2FuIHN0YXJ0OiAiCisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gc3RhcnQ6ICIKIAkJICAgICAgICIlZCBbODAyLjExJXNdICIKIAkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAoYmVhY29uIHRpbWVyICV1KVxuIiwKIAkJICAgICAgIG5vdGlmLT5jaGFubmVsLApAQCAtMjAyLDcgKzE5Miw3IEBACiAJc3RydWN0IGl3bF9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKm5vdGlmID0KIAkgICAgKHN0cnVjdCBpd2xfc2NhbnJlc3VsdHNfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKIAotCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGNoLnJlczogIgorCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGNoLnJlczogIgogCQkgICAgICAgIiVkIFs4MDIuMTElc10gIgogCQkgICAgICAgIihUU0Y6IDB4JTA4WDolMDhYKSAtICVkICIKIAkJICAgICAgICJlbGFwc2VkPSVsdSB1c2VjICglZG1zIHNpbmNlIGxhc3QpXG4iLApAQCAtMjI4LDcgKzIxOCw3IEBACiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpd2xfc2NhbmNvbXBsZXRlX25vdGlmaWNhdGlvbiAqc2Nhbl9ub3RpZiA9ICh2b2lkICopcGt0LT51LnJhdzsKIAotCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGNvbXBsZXRlOiAlZCBjaGFubmVscyAoVFNGIDB4JTA4WDolMDhYKSAtICVkXG4iLAorCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGNvbXBsZXRlOiAlZCBjaGFubmVscyAoVFNGIDB4JTA4WDolMDhYKSAtICVkXG4iLAogCQkgICAgICAgc2Nhbl9ub3RpZi0+c2Nhbm5lZF9jaGFubmVscywKIAkJICAgICAgIHNjYW5fbm90aWYtPnRzZl9sb3csCiAJCSAgICAgICBzY2FuX25vdGlmLT50c2ZfaGlnaCwgc2Nhbl9ub3RpZi0+c3RhdHVzKTsKQEAgLTI0MCw3ICsyMzAsNyBAQAogCS8qIFRoZSBzY2FuIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGNhbWUgaW4sIHNvIGtpbGwgdGhhdCB0aW1lci4uLiAqLwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwogCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCiAJCSAgICAgICAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgPwogCQkJCQkJIjIuNCIgOiAiNS4yIiwKIAkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzCkBAIC0yNTgsNyArMjQ4LDcgQEAKIAkgKiB0aGVuIHdlIHJlc2V0IHRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgYW5kIHRlcm1pbmF0ZSwKIAkgKiByZS1xdWV1aW5nIGFub3RoZXIgc2NhbiBpZiBvbmUgaGFzIGJlZW4gcmVxdWVzdGVkICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQWJvcnRlZCBzY2FuIGNvbXBsZXRlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWJvcnRlZCBzY2FuIGNvbXBsZXRlZC5cbiIpOwogCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwogCX0gZWxzZSB7CiAJCS8qIElmIHRoZXJlIGFyZSBtb3JlIGJhbmRzIG9uIHRoaXMgc2NhbiBwYXNzIHJlc2NoZWR1bGUgKi8KQEAgLTI2OCwxMSArMjU4LDExIEBACiAKIAlwcml2LT5sYXN0X3NjYW5famlmZmllcyA9IGppZmZpZXM7CiAJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSAwOwotCUlXTF9ERUJVR19JTkZPKCJTZXR0aW5nIHNjYW4gdG8gb2ZmXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7CiAKIAljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHRvb2sgJWRtc1xuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2NhbiB0b29rICVkbXNcbiIsCiAJCWppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzKHByaXYtPnNjYW5fc3RhcnQsIGppZmZpZXMpKSk7CiAKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKQEAgLTI5Niw5ICsyODYsOSBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0dXBfcnhfc2Nhbl9oYW5kbGVycyk7CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGl3bF9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCQkgICAgdTggbl9wcm9iZXMpCitpbmxpbmUgdTE2IGl3bF9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCSAgICAgdTggbl9wcm9iZXMpCiB7CiAJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJcmV0dXJuIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MiArCkBAIC0zMDcsOSArMjk3LDEwIEBACiAJCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQgKwogCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKiAobl9wcm9iZXMgKyAxKTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZSk7CiAKLXN0YXRpYyB1MTYgaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3UxNiBpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXUxNiBwYXNzaXZlID0gKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwogCSAgICBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICsgSVdMX1BBU1NJVkVfRFdFTExfVElNRV8yNCA6CkBAIC0zMjcsNiArMzE4LDcgQEAKIAogCXJldHVybiBwYXNzaXZlOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZSk7CiAKIHN0YXRpYyBpbnQgaXdsX2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCkBAIC0zNjMsNyArMzU1LDcgQEAKIAogCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCk7CiAJCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewotCQkJSVdMX0RFQlVHX1NDQU4oIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKKwkJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJDaGFubmVsICVkIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCiAJCQkJCWNoYW5uZWwpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTM5Miw3ICszODQsNyBAQAogCQllbHNlCiAJCQlzY2FuX2NoLT50eF9nYWluID0gKCgxIDw8IDUpIHwgKDUgPDwgMykpOwogCi0JCUlXTF9ERUJVR19TQ0FOKCJTY2FubmluZyBjaD0lZCBwcm9iPTB4JVggWyVzICVkXVxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW5uaW5nIGNoPSVkIHByb2I9MHglWCBbJXMgJWRdXG4iLAogCQkJICAgICAgIGNoYW5uZWwsIGxlMzJfdG9fY3B1KHNjYW5fY2gtPnR5cGUpLAogCQkJICAgICAgIChzY2FuX2NoLT50eXBlICYgU0NBTl9DSEFOTkVMX1RZUEVfQUNUSVZFKSA/CiAJCQkJIkFDVElWRSIgOiAiUEFTU0lWRSIsCkBAIC00MDMsNyArMzk1LDcgQEAKIAkJYWRkZWQrKzsKIAl9CiAKLQlJV0xfREVCVUdfU0NBTigidG90YWwgY2hhbm5lbHMgdG8gc2NhbiAlZCBcbiIsIGFkZGVkKTsKKwlJV0xfREVCVUdfU0NBTihwcml2LCAidG90YWwgY2hhbm5lbHMgdG8gc2NhbiAlZCBcbiIsIGFkZGVkKTsKIAlyZXR1cm4gYWRkZWQ7CiB9CiAKQEAgLTQxOSwyMSArNDExLDIxIEBACiBpbnQgaXdsX3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vdCByZWFkeS5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmdcbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmdcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhcnRpbmcgc2Nhbi4uLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOwogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKIAkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7CiAJaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQpAQCAtNDQ4LDkgKzQ0MCw3NyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfc2Nhbl9pbml0aWF0ZSk7CiAKKyNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTiAoSFoqMikKKworaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCXU4ICpzc2lkID0gTlVMTDsKKwlzaXplX3Qgc3NpZF9sZW4gPSAwOworCisJaWYgKHJlcS0+bl9zc2lkcykgeworCQlzc2lkID0gcmVxLT5zc2lkc1swXS5zc2lkOworCQlzc2lkX2xlbiA9IHJlcS0+c3NpZHNbMF0uc3NpZF9sZW47CisJfQorCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCXJldCA9IC1FSU87CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHkgb3IgZXhpdCBwZW5kaW5nXG4iKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIFdlIGRvbid0IHNjaGVkdWxlIHNjYW4gd2l0aGluIG5leHRfc2Nhbl9qaWZmaWVzIHBlcmlvZC4KKwkgKiBBdm9pZCBzY2FubmluZyBkdXJpbmcgcG9zc2libGUgRUFQT0wgZXhjaGFuZ2UsIHJldHVybgorCSAqIHN1Y2Nlc3MgaW1tZWRpYXRlbHkuCisJICovCisJaWYgKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzICYmCisJICAgIHRpbWVfYWZ0ZXIocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMsIGppZmZpZXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJzY2FuIHJlamVjdGVkOiB3aXRoaW4gbmV4dCBzY2FuIHBlcmlvZFxuIik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOworCQlyZXQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogaWYgd2UganVzdCBmaW5pc2hlZCBzY2FuIGFzayBmb3IgZGVsYXkgKi8KKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgJiYKKwkgICAgdGltZV9hZnRlcihwcml2LT5sYXN0X3NjYW5famlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU4sIGppZmZpZXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJzY2FuIHJlamVjdGVkOiB3aXRoaW4gcHJldmlvdXMgc2NhbiBwZXJpb2RcbiIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmIChzc2lkX2xlbikgeworCQlwcml2LT5vbmVfZGlyZWN0X3NjYW4gPSAxOworCQlwcml2LT5kaXJlY3Rfc3NpZF9sZW4gPSAgc3NpZF9sZW47CisJCW1lbWNweShwcml2LT5kaXJlY3Rfc3NpZCwgc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKKwl9IGVsc2UgeworCQlwcml2LT5vbmVfZGlyZWN0X3NjYW4gPSAwOworCX0KKworCXJldCA9IGl3bF9zY2FuX2luaXRpYXRlKHByaXYpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX21hY19od19zY2FuKTsKKwogI2RlZmluZSBJV0xfU0NBTl9DSEVDS19XQVRDSERPRyAoNyAqIEhaKQogCi1zdGF0aWMgdm9pZCBpd2xfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBzY2FuX2NoZWNrLndvcmspOwpAQCAtNDYxLDcgKzUyMSw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUcoSVdMX0RMX1NDQU4sICJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nICIKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gY29tcGxldGlvbiB3YXRjaGRvZyByZXNldHRpbmcgIgogCQkJImFkYXB0ZXIgKCVkbXMpXG4iLAogCQkJamlmZmllc190b19tc2VjcyhJV0xfU0NBTl9DSEVDS19XQVRDSERPRykpOwogCkBAIC00NzAsNiArNTMwLDggQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9iZ19zY2FuX2NoZWNrKTsKKwogLyoqCiAgKiBpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUgLSBmaWxsIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZSBpbiBJRSBmaWVsZAogICoKQEAgLTUyNywxMCArNTg5LDEwIEBACiAgKiBpd2xfZmlsbF9wcm9iZV9yZXEgLSBmaWxsIGluIGFsbCByZXF1aXJlZCBmaWVsZHMgYW5kIElFIGZvciBwcm9iZSByZXF1ZXN0CiAgKi8KIAotc3RhdGljIHUxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKLQkJCQkgIGludCBsZWZ0KQordTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLAorCQkgICAgICAgaW50IGxlZnQpCiB7CiAJaW50IGxlbiA9IDA7CiAJdTggKnBvcyA9IE5VTEw7CkBAIC02MjQsNiArNjg2LDcgQEAKIAogCXJldHVybiAodTE2KWxlbjsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2ZpbGxfcHJvYmVfcmVxKTsKIAogc3RhdGljIHZvaWQgaXdsX2JnX3JlcXVlc3Rfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7CkBAIC02NTAsNyArNzEzLDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewotCQlJV0xfV0FSTklORygicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgInJlcXVlc3Qgc2NhbiBjYWxsZWQgd2hlbiBkcml2ZXIgbm90IHJlYWR5LlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTY2MiwzNCArNzI1LDM0IEBACiAJLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9yIHNjaGVkdWxlZCBpZiB0aGVyZSBpcyBjdXJyZW50bHkKIAkgKiBhIHNjYW4gYWN0aXZlIGluIHRoZSBoYXJkd2FyZS4gKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyBpbiBwYXJhbGxlbC4gIgogCQkJICAgICAgICJJZ25vcmluZyBzZWNvbmQgcmVxdWVzdC5cbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gZGV2aWNlIHNodXRkb3duXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuICBRdWV1aW5nLlxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuICBRdWV1aW5nLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXByaXYtPnNjYW5fYmFuZHMpIHsKLQkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBubyByZXF1ZXN0ZWQgYmFuZHNcbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTcxNCw3ICs3NzcsNyBAQAogCQl1MzIgc2Nhbl9zdXNwZW5kX3RpbWUgPSAxMDA7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJSVdMX0RFQlVHX0lORk8oIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJaW50ZXJ2YWwgPSBwcml2LT5iZWFjb25faW50OwpAQCAtNzI5LDEzICs3OTIsMTMgQEAKIAkJc2Nhbl9zdXNwZW5kX3RpbWUgPSAoZXh0cmEgfAogCQkgICAgKChzdXNwZW5kX3RpbWUgJSBpbnRlcnZhbCkgKiAxMDI0KSk7CiAJCXNjYW4tPnN1c3BlbmRfdGltZSA9IGNwdV90b19sZTMyKHNjYW5fc3VzcGVuZF90aW1lKTsKLQkJSVdMX0RFQlVHX1NDQU4oInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKIAkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOwogCX0KIAogCS8qIFdlIHNob3VsZCBhZGQgdGhlIGFiaWxpdHkgZm9yIHVzZXIgdG8gbG9jayB0byBQQVNTSVZFIE9OTFkgKi8KIAlpZiAocHJpdi0+b25lX2RpcmVjdF9zY2FuKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTdGFydCBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN0YXJ0IGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAogCQkJCXByaW50X3NzaWQoc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWQsCiAJCQkJCSAgIHByaXYtPmRpcmVjdF9zc2lkX2xlbikpOwogCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5pZCA9IFdMQU5fRUlEX1NTSUQ7CkBAIC03NDQsNyArODA3LDcgQEAKIAkJICAgICAgIHByaXYtPmRpcmVjdF9zc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwogCQluX3Byb2JlcysrOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTdGFydCBpbmRpcmVjdCBzY2FuLlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdGFydCBpbmRpcmVjdCBzY2FuLlxuIik7CiAJfQogCiAJc2Nhbi0+dHhfY21kLnR4X2ZsYWdzID0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKQEAgLTc3Myw3ICs4MzYsNyBAQAogCQlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KQogCQkJcnhfY2hhaW4gPSAweDY7CiAJfSBlbHNlIHsKLQkJSVdMX1dBUk5JTkcoIkludmFsaWQgc2NhbiBiYW5kIGNvdW50XG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkludmFsaWQgc2NhbiBiYW5kIGNvdW50XG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtODA2LDcgKzg2OSw3IEBACiAJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7CiAKIAlpZiAoc2Nhbi0+Y2hhbm5lbF9jb3VudCA9PSAwKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJjaGFubmVsIGNvdW50ICVkXG4iLCBzY2FuLT5jaGFubmVsX2NvdW50KTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC04MzksNyArOTAyLDcgQEAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsX2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBpd2xfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgYWJvcnRfc2Nhbik7CiAKQEAgLTg1MywxOCArOTE2LDE5IEBACiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2JnX2Fib3J0X3NjYW4pOwogCi1zdGF0aWMgdm9pZCBpd2xfYmdfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBpd2xfYmdfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIHNjYW5fY29tcGxldGVkKTsKIAotCUlXTF9ERUJVR19TQ0FOKCJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOworCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcpOworCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odywgZmFsc2UpOwogCiAJLyogU2luY2Ugc2V0dGluZyB0aGUgVFhQT1dFUiBtYXkgaGF2ZSBiZWVuIGRlZmVycmVkIHdoaWxlCiAJICogcGVyZm9ybWluZyB0aGUgc2NhbiwgZmlyZSBvbmUgb2ZmICovCkBAIC04NzIsNyArOTM2LDcgQEAKIAlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCB0cnVlKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KLQorRVhQT1JUX1NZTUJPTChpd2xfYmdfc2Nhbl9jb21wbGV0ZWQpOwogCiB2b2lkIGl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKaW5kZXggODM2YzNjOC4uMDIyYmNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWF9PTl9BU1NPQyBjb21tYW5kXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOwogCQlyYyA9IC1FSU87CiAJfQogCkBAIC0xNTQsOSArMTU0LDkgQEAKIAlzd2l0Y2ggKHNwZWN0cnVtX3Jlc3Bfc3RhdHVzKSB7CiAJY2FzZSAwOgkJLyogQ29tbWFuZCB3aWxsIGJlIGhhbmRsZWQgKi8KIAkJaWYgKHJlcy0+dS5zcGVjdHJ1bS5pZCAhPSAweGZmKSB7Ci0JCQlJV0xfREVCVUdfSU5GTwotCQkJICAgICgiUmVwbGFjZWQgZXhpc3RpbmcgbWVhc3VyZW1lbnQ6ICVkXG4iLAotCQkJICAgICByZXMtPnUuc3BlY3RydW0uaWQpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkiUmVwbGFjZWQgZXhpc3RpbmcgbWVhc3VyZW1lbnQ6ICVkXG4iLAorCQkJCXJlcy0+dS5zcGVjdHJ1bS5pZCk7CiAJCQlwcml2LT5tZWFzdXJlbWVudF9zdGF0dXMgJj0gfk1FQVNVUkVNRU5UX1JFQURZOwogCQl9CiAJCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9BQ1RJVkU7CkBAIC0xODEsNyArMTgxLDcgQEAKIAlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOwogCiAJaWYgKCFyZXBvcnQtPnN0YXRlKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfMTFILAorCQlJV0xfREVCVUdfMTFIKHByaXYsCiAJCQkiU3BlY3RydW0gTWVhc3VyZSBOb3RpZmljYXRpb246IFN0YXJ0XG4iKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCmluZGV4IGI3ZDc5NDMuLmE3N2MxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKaW5kZXggNzBhOGIyMS4uNTc5OGZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTYwLDcgKzYwLDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQlJV0xfREVCVUdfQVNTT0NfTElNSVQoImNhbiBub3QgZmluZCBTVEEgJXBNIHRvdGFsICVkXG4iLAorCUlXTF9ERUJVR19BU1NPQ19MSU1JVChwcml2LCAiY2FuIG5vdCBmaW5kIFNUQSAlcE0gdG90YWwgJWRcbiIsCiAJCQkgICAgICBhZGRyLCBwcml2LT5udW1fc3RhdGlvbnMpOwogCiAgb3V0OgpAQCAtODYsMTEgKzg2LDEzIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCi0JCUlXTF9FUlJPUigiQUNUSVZBVEUgYSBub24gRFJJVkVSIGFjdGl2ZSBzdGF0aW9uICVkXG4iLCBzdGFfaWQpOworCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkgJiYKKwkgICAgIShwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKQorCQlJV0xfRVJSKHByaXYsICJBQ1RJVkFURSBhIG5vbiBEUklWRVIgYWN0aXZlIHN0YXRpb24gJWRcbiIsCisJCQlzdGFfaWQpOwogCiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkIHw9IElXTF9TVEFfVUNPREVfQUNUSVZFOwotCUlXTF9ERUJVR19BU1NPQygiQWRkZWQgU1RBIHRvIFVjb2RlOiAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBZGRlZCBTVEEgdG8gVWNvZGU6ICVwTVxuIiwKIAkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5hZGRyKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CkBAIC0xMDUsMTMgKzEwNywxMyBAQAogCXU4IHN0YV9pZCA9IGFkZHN0YS0+c3RhLnN0YV9pZDsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfQUREX1NUQS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9BRERfU1RBLlxuIik7CiAJCXJldHVybiAxOwogCX0KIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTIxLDcgKzEyMyw3IEBACiAJCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKIAkJIC8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IQygiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTooMHglMDhYKVxuIiwKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOigweCUwOFgpXG4iLAogCQkJICAgICByZXMtPnUuYWRkX3N0YS5zdGF0dXMpOwogCQlicmVhazsKIAl9CkBAIC0xMzAsNyArMTMyLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpd2xfc2VuZF9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK2ludCBpd2xfc2VuZF9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJICAgICBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpCiB7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CkBAIC0xNTUsNyArMTU3LDcgQEAKIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAorCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwogCQlyZXQgPSAtRUlPOwogCX0KQEAgLTE2NCwxMSArMTY2LDExIEBACiAJCXN3aXRjaCAocmVzLT51LmFkZF9zdGEuc3RhdHVzKSB7CiAJCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKIAkJCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhLT5zdGEuc3RhX2lkKTsKLQkJCUlXTF9ERUJVR19JTkZPKCJSRVBMWV9BRERfU1RBIFBBU1NFRFxuIik7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtRUlPOwotCQkJSVdMX1dBUk5JTkcoIlJFUExZX0FERF9TVEEgZmFpbGVkXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9BRERfU1RBIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE3OCw2ICsxODAsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfYWRkX3N0YSk7CiAKIHN0YXRpYyB2b2lkIGl3bF9zZXRfaHRfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpbmRleCwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpCkBAIC0yMDQsNyArMjA3LDcgQEAKIAljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVEOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfV0FSTklORygiSW52YWxpZCBNSU1PIFBTIG1vZGUgJWRcbiIsIG1pbW9fcHNfbW9kZSk7CisJCUlXTF9XQVJOKHByaXYsICJJbnZhbGlkIE1JTU8gUFMgbW9kZSAlZFxuIiwgbWltb19wc19tb2RlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNjksNyArMjcyLDcgQEAKIAogCXN0YXRpb24gPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXTsKIAlzdGF0aW9uLT51c2VkID0gSVdMX1NUQV9EUklWRVJfQUNUSVZFOwotCUlXTF9ERUJVR19BU1NPQygiQWRkIFNUQSB0byBkcml2ZXIgSUQgJWQ6ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZCBTVEEgdG8gZHJpdmVyIElEICVkOiAlcE1cbiIsCiAJCQlzdGFfaWQsIGFkZHIpOwogCXByaXYtPm51bV9zdGF0aW9ucysrOwogCkBAIC0zMDEsMTMgKzMwNCwxMyBAQAogCiAJQlVHX09OKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKTsKIAotCUlXTF9ERUJVR19BU1NPQygiUmVtb3ZlZCBTVEEgZnJvbSBVY29kZTogJXBNXG4iLCBhZGRyKTsKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIlJlbW92ZWQgU1RBIGZyb20gVWNvZGU6ICVwTVxuIiwgYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCS8qIFVjb2RlIG11c3QgYmUgYWN0aXZlIGFuZCBkcml2ZXIgbXVzdCBiZSBub24gYWN0aXZlICovCiAJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAhPSBJV0xfU1RBX1VDT0RFX0FDVElWRSkKLQkJSVdMX0VSUk9SKCJyZW1vdmVkIG5vbiBhY3RpdmUgU1RBICVkXG4iLCBzdGFfaWQpOworCQlJV0xfRVJSKHByaXYsICJyZW1vdmVkIG5vbiBhY3RpdmUgU1RBICVkXG4iLCBzdGFfaWQpOwogCiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICY9IH5JV0xfU1RBX1VDT0RFX0FDVElWRTsKIApAQCAtMzI0LDEzICszMjcsMTMgQEAKIAljb25zdCBjaGFyICphZGRyID0gcm1fc3RhLT5hZGRyOwogCiAJaWYgKCFza2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9SRU1PVkVfU1RBLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX1JFTU9WRV9TVEEuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLAorCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKIAkJcmVzLT5oZHIuZmxhZ3MpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0zNDAsNyArMzQzLDcgQEAKIAkJaXdsX3N0YV91Y29kZV9kZWFjdGl2YXRlKHByaXYsIGFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiUkVQTFlfUkVNT1ZFX1NUQSBmYWlsZWRcbiIpOwogCQlicmVhazsKIAl9CiAKQEAgLTM3OCw3ICszODEsNyBAQAogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7CiAJCXJldCA9IC1FSU87CiAJfQpAQCAtMzg3LDExICszOTAsMTEgQEAKIAkJc3dpdGNoIChyZXMtPnUucmVtX3N0YS5zdGF0dXMpIHsKIAkJY2FzZSBSRU1fU1RBX1NVQ0NFU1NfTVNLOgogCQkJaXdsX3N0YV91Y29kZV9kZWFjdGl2YXRlKHByaXYsIGFkZHIpOwotCQkJSVdMX0RFQlVHX0FTU09DKCJSRVBMWV9SRU1PVkVfU1RBIFBBU1NFRFxuIik7CisJCQlJV0xfREVCVUdfQVNTT0MocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgUEFTU0VEXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVJTzsKLQkJCUlXTF9FUlJPUigiUkVQTFlfUkVNT1ZFX1NUQSBmYWlsZWRcbiIpOworCQkJSVdMX0VSUihwcml2LCAiUkVQTFlfUkVNT1ZFX1NUQSBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC00MjksMTcgKzQzMiwxNyBAQAogCWlmICh1bmxpa2VseShzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikpCiAJCWdvdG8gb3V0OwogCi0JSVdMX0RFQlVHX0FTU09DKCJSZW1vdmluZyBTVEEgZnJvbSBkcml2ZXI6JWQgICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIlJlbW92aW5nIFNUQSBmcm9tIGRyaXZlcjolZCAgJXBNXG4iLAogCQlzdGFfaWQsIGFkZHIpOwogCiAJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkgewotCQlJV0xfRVJST1IoIlJlbW92aW5nICVwTSBidXQgbm9uIERSSVZFUiBhY3RpdmVcbiIsCisJCUlXTF9FUlIocHJpdiwgIlJlbW92aW5nICVwTSBidXQgbm9uIERSSVZFUiBhY3RpdmVcbiIsCiAJCQkJYWRkcik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfVUNPREVfQUNUSVZFKSkgewotCQlJV0xfRVJST1IoIlJlbW92aW5nICVwTSBidXQgbm9uIFVDT0RFIGFjdGl2ZVxuIiwKKwkJSVdMX0VSUihwcml2LCAiUmVtb3ZpbmcgJXBNIGJ1dCBub24gVUNPREUgYWN0aXZlXG4iLAogCQkJCWFkZHIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NjksMTMgKzQ3MiwxNCBAQAogdm9pZCBpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCWlmIChpd2xfaXNfYWxpdmUocHJpdikgJiYKIAkgICAhdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgJiYKIAkgICBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1JFTU9WRV9BTExfU1RBLCAwLCBOVUxMLCBOVUxMKSkKLQkJSVdMX0VSUk9SKCJDb3VsZG4ndCBjbGVhciB0aGUgc3RhdGlvbiB0YWJsZVxuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkbid0IGNsZWFyIHRoZSBzdGF0aW9uIHRhYmxlXG4iKTsKIAogCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7CiAJbWVtc2V0KHByaXYtPnN0YXRpb25zLCAwLCBzaXplb2YocHJpdi0+c3RhdGlvbnMpKTsKQEAgLTQ4MywxMSArNDg3LDE3IEBACiAJLyogY2xlYW4gdWNvZGUga2V5IHRhYmxlIGJpdCBtYXAgKi8KIAlwcml2LT51Y29kZV9rZXlfdGFibGUgPSAwOwogCisJLyoga2VlcCB0cmFjayBvZiBzdGF0aWMga2V5cyAqLworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZU19NQVggOyBpKyspIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzW2ldLmtleV9zaXplKQorCQkJdGVzdF9hbmRfc2V0X2JpdChpLCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKTsKKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUpOwogCi1zdGF0aWMgaW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCBpOwogCkBAIC00OTcsNiArNTA3LDcgQEAKIAogCXJldHVybiBXRVBfSU5WQUxJRF9PRkZTRVQ7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgpOwogCiBpbnQgaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBzZW5kX2lmX2VtcHR5KQogewpAQCAtNTUxLDEzICs1NjIsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KGtleWNvbmYtPmtleWlkeCwgJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCi0JCUlXTF9FUlJPUigiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKIAkJCSAga2V5Y29uZi0+a2V5aWR4KTsKIAogCXByaXYtPmRlZmF1bHRfd2VwX2tleS0tOwogCW1lbXNldCgmcHJpdi0+d2VwX2tleXNba2V5Y29uZi0+a2V5aWR4XSwgMCwgc2l6ZW9mKHByaXYtPndlcF9rZXlzWzBdKSk7CiAJcmV0ID0gaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQocHJpdiwgMSk7Ci0JSVdMX0RFQlVHX1dFUCgiUmVtb3ZlIGRlZmF1bHQgV0VQIGtleTogaWR4PSVkIHJldD0lZFxuIiwKKwlJV0xfREVCVUdfV0VQKHByaXYsICJSZW1vdmUgZGVmYXVsdCBXRVAga2V5OiBpZHg9JWQgcmV0PSVkXG4iLAogCQkgICAgICBrZXljb25mLT5rZXlpZHgsIHJldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIApAQCAtNTczLDcgKzU4NCw3IEBACiAKIAlpZiAoa2V5Y29uZi0+a2V5bGVuICE9IFdFUF9LRVlfTEVOXzEyOCAmJgogCSAgICBrZXljb25mLT5rZXlsZW4gIT0gV0VQX0tFWV9MRU5fNjQpIHsKLQkJSVdMX0RFQlVHX1dFUCgiQmFkIFdFUCBrZXkgbGVuZ3RoICVkXG4iLCBrZXljb25mLT5rZXlsZW4pOworCQlJV0xfREVCVUdfV0VQKHByaXYsICJCYWQgV0VQIGtleSBsZW5ndGggJWRcbiIsIGtleWNvbmYtPmtleWxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTg1LDcgKzU5Niw3IEBACiAJcHJpdi0+ZGVmYXVsdF93ZXBfa2V5Kys7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChrZXljb25mLT5rZXlpZHgsICZwcml2LT51Y29kZV9rZXlfdGFibGUpKQotCQlJV0xfRVJST1IoImluZGV4ICVkIGFscmVhZHkgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbmRleCAlZCBhbHJlYWR5IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKIAkJCWtleWNvbmYtPmtleWlkeCk7CiAKIAlwcml2LT53ZXBfa2V5c1trZXljb25mLT5rZXlpZHhdLmtleV9zaXplID0ga2V5Y29uZi0+a2V5bGVuOwpAQCAtNTkzLDcgKzYwNCw3IEBACiAJCQkJCQkJa2V5Y29uZi0+a2V5bGVuKTsKIAogCXJldCA9IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApOwotCUlXTF9ERUJVR19XRVAoIlNldCBkZWZhdWx0IFdFUCBrZXk6IGxlbj0lZCBpZHg9JWQgcmV0PSVkXG4iLAorCUlXTF9ERUJVR19XRVAocHJpdiwgIlNldCBkZWZhdWx0IFdFUCBrZXk6IGxlbj0lZCBpZHg9JWQgcmV0PSVkXG4iLAogCQlrZXljb25mLT5rZXlsZW4sIGtleWNvbmYtPmtleWlkeCwgcmV0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCkBAIC02NDEsNyArNjUyLDcgQEAKIAkgKiBpbiB1Q29kZS4gKi8KIAogCVdBUk4ocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAotCQkibm8gc3BhY2UgZm9yIG5ldyBrZXciKTsKKwkJIm5vIHNwYWNlIGZvciBhIG5ldyBrZXkiKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKQEAgLTY4OSw3ICs3MDAsNyBAQAogCSAqIGluIHVDb2RlLiAqLwogCiAJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCi0JCSJubyBzcGFjZSBmb3IgbmV3IGtldyIpOworCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOwogCiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwpAQCAtNzI1LDcgKzczNiw3IEBACiAJICogaW4gdUNvZGUuICovCiAKIAlXQVJOKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCwKLQkJIm5vIHNwYWNlIGZvciBuZXcga2V3Iik7CisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CiAKIAkvKiBUaGlzIGNvcHkgaXMgYWN1dGFsbHkgbm90IG5lZWRlZDogd2UgZ2V0IHRoZSBrZXkgd2l0aCBlYWNoIFRYICovCiAJbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXksIGtleWNvbmYtPmtleSwgMTYpOwpAQCAtNzQ5LDcgKzc2MCw3IEBACiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwogCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKIAkJCQkgICBhZGRyKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgwMSw3ICs4MTIsNyBAQAogCWtleV9mbGFncyA9IGxlMTZfdG9fY3B1KHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MpOwogCWtleWlkeCA9IChrZXlfZmxhZ3MgPj4gU1RBX0tFWV9GTEdfS0VZSURfUE9TKSAmIDB4MzsKIAotCUlXTF9ERUJVR19XRVAoIlJlbW92ZSBkeW5hbWljIGtleTogaWR4PSVkIHN0YT0lZFxuIiwKKwlJV0xfREVCVUdfV0VQKHByaXYsICJSZW1vdmUgZHluYW1pYyBrZXk6IGlkeD0lZCBzdGE9JWRcbiIsCiAJCSAgICAgIGtleWNvbmYtPmtleWlkeCwgc3RhX2lkKTsKIAogCWlmIChrZXljb25mLT5rZXlpZHggIT0ga2V5aWR4KSB7CkBAIC04MTUsNyArODI2LDcgQEAKIAl9CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VUKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZW1vdmluZyB3cm9uZyBrZXkgJWQgMHgleFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwgIlJlbW92aW5nIHdyb25nIGtleSAlZCAweCV4XG4iLAogCQkJICAgIGtleWNvbmYtPmtleWlkeCwga2V5X2ZsYWdzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CkBAIC04MjMsNyArODM0LDcgQEAKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0LAogCQkmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKLQkJSVdMX0VSUk9SKCJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAogCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQpOwogCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLCAwLAogCQkJCQlzaXplb2Yoc3RydWN0IGl3bF9od19rZXkpKTsKQEAgLTg2MCwxMSArODcxLDEyIEBACiAJCXJldCA9IGl3bF9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOworCQlJV0xfRVJSKHByaXYsCisJCQkiVW5rbm93biBhbGc6ICVzIGFsZyA9ICVkXG4iLCBfX2Z1bmNfXywga2V5Y29uZi0+YWxnKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQlJV0xfREVCVUdfV0VQKCJTZXQgZHluYW1pYyBrZXk6IGFsZz0gJWQgbGVuPSVkIGlkeD0lZCBzdGE9JWQgcmV0PSVkXG4iLAorCUlXTF9ERUJVR19XRVAocHJpdiwgIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCiAJCSAgICAgIGtleWNvbmYtPmFsZywga2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsCiAJCSAgICAgIHN0YV9pZCwgcmV0KTsKIApAQCAtODc3LDEzICs4ODksMTMgQEAKIAkJCSAgIHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqbHEpCiB7CiAJaW50IGk7Ci0JSVdMX0RFQlVHX1JBVEUoImxxIHN0YXRpb24gaWQgMHgleFxuIiwgbHEtPnN0YV9pZCk7Ci0JSVdMX0RFQlVHX1JBVEUoImxxIGFudCAweCVYIDB4JVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxxIHN0YXRpb24gaWQgMHgleFxuIiwgbHEtPnN0YV9pZCk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxxIGFudCAweCVYIDB4JVhcbiIsCiAJCSAgICAgICBscS0+Z2VuZXJhbF9wYXJhbXMuc2luZ2xlX3N0cmVhbV9hbnRfbXNrLAogCQkgICAgICAgbHEtPmdlbmVyYWxfcGFyYW1zLmR1YWxfc3RyZWFtX2FudF9tc2spOwogCiAJZm9yIChpID0gMDsgaSA8IExJTktfUVVBTF9NQVhfUkVUUllfTlVNOyBpKyspCi0JCUlXTF9ERUJVR19SQVRFKCJscSBpbmRleCAlZCAweCVYXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAibHEgaW5kZXggJWQgMHglWFxuIiwKIAkJCSAgICAgICBpLCBscS0+cnNfdGFibGVbaV0ucmF0ZV9uX2ZsYWdzKTsKIH0KICNlbHNlCkBAIC0xMDYwLDcgKzEwNzIsNyBAQAogCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQlyZXR1cm4gc3RhX2lkOwogCi0JCUlXTF9ERUJVR19EUk9QKCJTdGF0aW9uICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuICIKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIlN0YXRpb24gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgogCQkJICAgICAgICJEZWZhdWx0aW5nIHRvIGJyb2FkY2FzdC4uLlxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9EUk9QLCAodTggKikgaGRyLCBzaXplb2YoKmhkcikpOwpAQCAtMTA3Miw3ICsxMDg0LDggQEAKIAkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAKIAlkZWZhdWx0OgotCQlJV0xfV0FSTklORygiVW5rbm93biBtb2RlIG9mIG9wZXJhdGlvbjogJWRcbiIsIHByaXYtPml3X21vZGUpOworCQlJV0xfV0FSTihwcml2LCAiVW5rbm93biBtb2RlIG9mIG9wZXJhdGlvbjogJWRcbiIsCisJCQlwcml2LT5pd19tb2RlKTsKIAkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJfQogfQpAQCAtMTEyNSw4ICsxMTM4LDEwIEBACiAJaW50IHN0YV9pZDsKIAogCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7Ci0JaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQorCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgeworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIHN0YXRpb24gZm9yIEFHRyB0aWQgJWRcbiIsIHRpZCk7CiAJCXJldHVybiAtRU5YSU87CisJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhdGlvbl9mbGFnc19tc2sgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAppbmRleCA5YmI3Y2VmLi41OWE1ODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNTQsOCArNTQsMTEgQEAKIGludCBpd2xfcnhvbl9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApOwogaW50IGl3bF9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApOwogdm9pZCBpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX2dldF9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKTsKIGludCBpd2xfZ2V0X3JhX3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOworaW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncyk7CiB1OCBpd2xfYWRkX3N0YXRpb25fZmxhZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwKIAkJCWludCBpc19hcCwgdTggZmxhZ3MsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2luZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKaW5kZXggYWIxM2ZmMi4uMWYxMTdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC03NiwxMTYgKzc2LDYgQEAKIAltZW1zZXQocHRyLCAwLCBzaXplb2YoKnB0cikpOwogfQogCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgaXdsX3RmZF90Yl9nZXRfYWRkcihzdHJ1Y3QgaXdsX3RmZCAqdGZkLCB1OCBpZHgpCi17Ci0Jc3RydWN0IGl3bF90ZmRfdGIgKnRiID0gJnRmZC0+dGJzW2lkeF07Ci0KLQlkbWFfYWRkcl90IGFkZHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJnRiLT5sbyk7Ci0JaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKQotCQlhZGRyIHw9Ci0JCSgoZG1hX2FkZHJfdCkobGUxNl90b19jcHUodGItPmhpX25fbGVuKSAmIDB4RikgPDwgMTYpIDw8IDE2OwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGl3bF90ZmRfdGJfZ2V0X2xlbihzdHJ1Y3QgaXdsX3RmZCAqdGZkLCB1OCBpZHgpCi17Ci0Jc3RydWN0IGl3bF90ZmRfdGIgKnRiID0gJnRmZC0+dGJzW2lkeF07Ci0KLQlyZXR1cm4gbGUxNl90b19jcHUodGItPmhpX25fbGVuKSA+PiA0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3RmZF9zZXRfdGIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4LAotCQkJCSAgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQotewotCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOwotCXUxNiBoaV9uX2xlbiA9IGxlbiA8PCA0OwotCi0JcHV0X3VuYWxpZ25lZF9sZTMyKGFkZHIsICZ0Yi0+bG8pOwotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkKLQkJaGlfbl9sZW4gfD0gKChhZGRyID4+IDE2KSA+PiAxNikgJiAweEY7Ci0KLQl0Yi0+aGlfbl9sZW4gPSBjcHVfdG9fbGUxNihoaV9uX2xlbik7Ci0KLQl0ZmQtPm51bV90YnMgPSBpZHggKyAxOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGl3bF90ZmRfZ2V0X251bV90YnMoc3RydWN0IGl3bF90ZmQgKnRmZCkKLXsKLQlyZXR1cm4gdGZkLT5udW1fdGJzICYgMHgxZjsKLX0KLQotLyoqCi0gKiBpd2xfaHdfdHhxX2ZyZWVfdGZkIC0gRnJlZSBhbGwgY2h1bmtzIHJlZmVyZW5jZWQgYnkgVEZEIFt0eHEtPnEucmVhZF9wdHJdCi0gKiBAcHJpdiAtIGRyaXZlciBwcml2YXRlIGRhdGEKLSAqIEB0eHEgLSB0eCBxdWV1ZQotICoKLSAqIERvZXMgTk9UIGFkdmFuY2UgYW55IFRGRCBjaXJjdWxhciBidWZmZXIgcmVhZC93cml0ZSBpbmRleGVzCi0gKiBEb2VzIE5PVCBmcmVlIHRoZSBURkQgaXRzZWxmICh3aGljaCBpcyB3aXRoaW4gY2lyY3VsYXIgYnVmZmVyKQotICovCi1zdGF0aWMgdm9pZCBpd2xfaHdfdHhxX2ZyZWVfdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQotewotCXN0cnVjdCBpd2xfdGZkICp0ZmRfdG1wID0gKHN0cnVjdCBpd2xfdGZkICopJnR4cS0+dGZkc1swXTsKLQlzdHJ1Y3QgaXdsX3RmZCAqdGZkOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBpbmRleCA9IHR4cS0+cS5yZWFkX3B0cjsKLQlpbnQgaTsKLQlpbnQgbnVtX3RiczsKLQotCXRmZCA9ICZ0ZmRfdG1wW2luZGV4XTsKLQotCS8qIFNhbml0eSBjaGVjayBvbiBudW1iZXIgb2YgY2h1bmtzICovCi0JbnVtX3RicyA9IGl3bF90ZmRfZ2V0X251bV90YnModGZkKTsKLQotCWlmIChudW1fdGJzID49IElXTF9OVU1fT0ZfVEJTKSB7Ci0JCUlXTF9FUlJPUigiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgbnVtX3Ricyk7Ci0JCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogVW5tYXAgdHhfY21kICovCi0JaWYgKG51bV90YnMpCi0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAotCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKLQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCi0JLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCi0JZm9yIChpID0gMTsgaSA8IG51bV90YnM7IGkrKykgewotCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwgaXdsX3RmZF90Yl9nZXRfYWRkcih0ZmQsIGkpLAotCQkJCWl3bF90ZmRfdGJfZ2V0X2xlbih0ZmQsIGkpLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQlpZiAodHhxLT50eGIpIHsKLQkJCWRldl9rZnJlZV9za2IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaSAtIDFdKTsKLQkJCXR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSA9IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCXN0cnVjdCBpd2xfdGZkICp0ZmQsCi0JCQkJCWRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKLXsKLQotCXUzMiBudW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOwotCi0JLyogRWFjaCBURkQgY2FuIHBvaW50IHRvIGEgbWF4aW11bSAyMCBUeCBidWZmZXJzICovCi0JaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKLQkJCSAgSVdMX05VTV9PRl9UQlMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlCVUdfT04oYWRkciAmIH5ETUFfQklUX01BU0soMzYpKTsKLQlpZiAodW5saWtlbHkoYWRkciAmIH5JV0xfVFhfRE1BX01BU0spKQotCQlJV0xfRVJST1IoIlVuYWxpZ25lZCBhZGRyZXNzID0gJWxseFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyKTsKLQotCWl3bF90ZmRfc2V0X3RiKHRmZCwgbnVtX3RicywgYWRkciwgbGVuKTsKLQotCXJldHVybiAwOwotfQotCiAvKioKICAqIGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0ciAtIFNlbmQgbmV3IHdyaXRlIGluZGV4IHRvIGhhcmR3YXJlCiAgKi8KQEAgLTIwNiw3ICs5Niw3IEBACiAJCXJlZyA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwogCiAJCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiUmVxdWVzdGluZyB3YWtldXAsIEdQMSA9IDB4JXhcbiIsIHJlZyk7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmVxdWVzdGluZyB3YWtldXAsIEdQMSA9IDB4JXhcbiIsIHJlZyk7CiAJCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CiAJCQlyZXR1cm4gcmV0OwpAQCAtMjQxLDcgKzEzMSw3IEBACiAgKiBGcmVlIGFsbCBidWZmZXJzLgogICogMC1maWxsLCBidXQgZG8gbm90IGZyZWUgInR4cSIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bF90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKK3ZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKQogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKQEAgLTI1NCw3ICsxNDQsNyBAQAogCS8qIGZpcnN0LCBlbXB0eSBhbGwgQkQncyAqLwogCWZvciAoOyBxLT53cml0ZV9wdHIgIT0gcS0+cmVhZF9wdHI7CiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCi0JCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAKIAlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9jbWQpICogcS0+bl93aW5kb3c7CiAKQEAgLTI2NCw3ICsxNTQsNyBAQAogCiAJLyogRGUtYWxsb2MgY2lyY3VsYXIgYnVmZmVyIG9mIFRGRHMgKi8KIAlpZiAodHhxLT5xLm5fYmQpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGl3bF90ZmQpICoKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSAqCiAJCQkJICAgIHR4cS0+cS5uX2JkLCB0eHEtPnRmZHMsIHR4cS0+cS5kbWFfYWRkcik7CiAKIAkvKiBEZS1hbGxvYyBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhICovCkBAIC0yNzQsNyArMTY0LDcgQEAKIAkvKiAwLWZpbGwgcXVldWUgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgKi8KIAltZW1zZXQodHhxLCAwLCBzaXplb2YoKnR4cSkpOwogfQotCitFWFBPUlRfU1lNQk9MKGl3bF90eF9xdWV1ZV9mcmVlKTsKIAogLyoqCiAgKiBpd2xfY21kX3F1ZXVlX2ZyZWUgLSBEZWFsbG9jYXRlIERNQSBxdWV1ZS4KQEAgLTI4NCw3ICsxNzQsNyBAQAogICogRnJlZSBhbGwgYnVmZmVycy4KICAqIDAtZmlsbCwgYnV0IGRvIG5vdCBmcmVlICJ0eHEiIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCBpd2xfY21kX3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2xfY21kX3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwpAQCAtMzAzLDEyICsxOTMsMTQgQEAKIAogCS8qIERlLWFsbG9jIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzICovCiAJaWYgKHR4cS0+cS5uX2JkKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKSAqCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBwcml2LT5od19wYXJhbXMudGZkX3NpemUgKgogCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOwogCiAJLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCiAJbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2NtZF9xdWV1ZV9mcmVlKTsKKwogLyoqKioqKioqKioqKioqKiBETUEtUVVFVUUtR0VORVJBTC1GVU5DVElPTlMgICoqKioqCiAgKiBETUEgc2VydmljZXMKICAqCkBAIC0zODgsNiArMjgwLDcgQEAKIAkJCSAgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwgdTMyIGlkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OworCXNpemVfdCB0ZmRfc3ogPSBwcml2LT5od19wYXJhbXMudGZkX3NpemUgKiBURkRfUVVFVUVfU0laRV9NQVg7CiAKIAkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKIAkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLwpAQCAtMzk1LDIyICsyODgsMjAgQEAKIAkJdHhxLT50eGIgPSBrbWFsbG9jKHNpemVvZih0eHEtPnR4YlswXSkgKgogCQkJCSAgIFRGRF9RVUVVRV9TSVpFX01BWCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHhxLT50eGIpIHsKLQkJCUlXTF9FUlJPUigia21hbGxvYyBmb3IgYXV4aWxpYXJ5IEJEICIKKwkJCUlXTF9FUlIocHJpdiwgImttYWxsb2MgZm9yIGF1eGlsaWFyeSBCRCAiCiAJCQkJICAic3RydWN0dXJlcyBmYWlsZWRcbiIpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXR4cS0+dHhiID0gTlVMTDsKKwl9CiAKIAkvKiBDaXJjdWxhciBidWZmZXIgb2YgdHJhbnNtaXQgZnJhbWUgZGVzY3JpcHRvcnMgKFRGRHMpLAogCSAqIHNoYXJlZCB3aXRoIGRldmljZSAqLwotCXR4cS0+dGZkcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwKLQkJCXNpemVvZih0eHEtPnRmZHNbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYLAotCQkJJnR4cS0+cS5kbWFfYWRkcik7CisJdHhxLT50ZmRzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCB0ZmRfc3osICZ0eHEtPnEuZG1hX2FkZHIpOwogCiAJaWYgKCF0eHEtPnRmZHMpIHsKLQkJSVdMX0VSUk9SKCJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwKLQkJCSAgc2l6ZW9mKHR4cS0+dGZkc1swXSkgKiBURkRfUVVFVUVfU0laRV9NQVgpOworCQlJV0xfRVJSKHByaXYsICJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwgdGZkX3N6KTsKIAkJZ290byBlcnJvcjsKIAl9CiAJdHhxLT5xLmlkID0gaWQ7CkBAIC00MjQsNDIgKzMxNSwxMSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0vKgotICogVGVsbCBuaWMgd2hlcmUgdG8gZmluZCBjaXJjdWxhciBidWZmZXIgb2YgVHggRnJhbWUgRGVzY3JpcHRvcnMgZm9yCi0gKiBnaXZlbiBUeCBxdWV1ZSwgYW5kIGVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgdXNlZCBmb3IgdGhhdCBxdWV1ZS4KLSAqCi0gKiA0OTY1IHN1cHBvcnRzIHVwIHRvIDE2IFR4IHF1ZXVlcyBpbiBEUkFNLCBtYXBwZWQgdG8gdXAgdG8gOCBUeCBETUEKLSAqIGNoYW5uZWxzIHN1cHBvcnRlZCBpbiBoYXJkd2FyZS4KLSAqLwotc3RhdGljIGludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyZXQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIENpcmN1bGFyIGJ1ZmZlciAoVEZEIHF1ZXVlIGluIERSQU0pIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLwotCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAotCQkJICAgICB0eHEtPnEuZG1hX2FkZHIgPj4gOCk7Ci0KLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCiAvKioKICAqIGl3bF90eF9xdWV1ZV9pbml0IC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIHR4L2NtZCBxdWV1ZQogICovCi1zdGF0aWMgaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAotCQkJICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKQoraW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKQogewogCWludCBpLCBsZW47CiAJaW50IHJldDsKQEAgLTUwMSw3ICszNjEsNyBAQAogCWl3bF9xdWV1ZV9pbml0KHByaXYsICZ0eHEtPnEsIFRGRF9RVUVVRV9TSVpFX01BWCwgc2xvdHNfbnVtLCB0eHFfaWQpOwogCiAJLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBxdWV1ZSAqLwotCWl3bF9od190eF9xdWV1ZV9pbml0KHByaXYsIHR4cSk7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2luaXQocHJpdiwgdHhxKTsKIAogCXJldHVybiAwOwogZXJyOgpAQCAtNTE2LDYgKzM3Niw4IEBACiAJfQogCXJldHVybiAtRU5PTUVNOwogfQorRVhQT1JUX1NZTUJPTChpd2xfdHhfcXVldWVfaW5pdCk7CisKIC8qKgogICogaXdsX2h3X3R4cV9jdHhfZnJlZSAtIEZyZWUgVFhRIENvbnRleHQKICAqCkBAIC01NTcsMTMgKzQxOSwxMyBAQAogCXJldCA9IGl3bF9hbGxvY19kbWFfcHRyKHByaXYsICZwcml2LT5zY2RfYmNfdGJscywKIAkJCQlwcml2LT5od19wYXJhbXMuc2NkX2JjX3RibHNfc2l6ZSk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlNjaGVkdWxlciBCQyBUYWJsZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIlNjaGVkdWxlciBCQyBUYWJsZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3JfYmNfdGJsczsKIAl9CiAJLyogQWxsb2Mga2VlcC13YXJtIGJ1ZmZlciAqLwogCXJldCA9IGl3bF9hbGxvY19kbWFfcHRyKHByaXYsICZwcml2LT5rdywgSVdMX0tXX1NJWkUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJLZWVwIFdhcm0gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJLZWVwIFdhcm0gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2t3OwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNTg5LDcgKzQ1MSw3IEBACiAJCXJldCA9IGl3bF90eF9xdWV1ZV9pbml0KHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgc2xvdHNfbnVtLAogCQkJCSAgICAgICB0eHFfaWQpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOworCQkJSVdMX0VSUihwcml2LCAiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQpAQCAtNzc4LDE0ICs2NDAsMTQgQEAKIAkJbWVtY3B5KHR4X2NtZC0+a2V5LCBrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCiAJCQl0eF9jbWQtPnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUdHX0NDTVBfTVNLOwotCQlJV0xfREVCVUdfVFgoInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggQUVTIGh3Y3J5cHRvXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFMR19US0lQOgogCQl0eF9jbWQtPnNlY19jdGwgPSBUWF9DTURfU0VDX1RLSVA7CiAJCWllZWU4MDIxMV9nZXRfdGtpcF9rZXkoa2V5Y29uZiwgc2tiX2ZyYWcsCiAJCQlJRUVFODAyMTFfVEtJUF9QMl9LRVksIHR4X2NtZC0+a2V5KTsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCB0a2lwIGh3Y3J5cHRvXG4iKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJ0eF9jbWQgd2l0aCB0a2lwIGh3Y3J5cHRvXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFMR19XRVA6CkBAIC03OTcsMTIgKzY1OSwxMiBAQAogCiAJCW1lbWNweSgmdHhfY21kLT5rZXlbM10sIGtleWNvbmYtPmtleSwga2V5Y29uZi0+a2V5bGVuKTsKIAotCQlJV0xfREVCVUdfVFgoIkNvbmZpZ3VyaW5nIHBhY2tldCBmb3IgV0VQIGVuY3J5cHRpb24gIgorCQlJV0xfREVCVUdfVFgocHJpdiwgIkNvbmZpZ3VyaW5nIHBhY2tldCBmb3IgV0VQIGVuY3J5cHRpb24gIgogCQkJICAgICAid2l0aCBrZXkgJWRcbiIsIGtleWNvbmYtPmtleWlkeCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWNvbmYtPmFsZyk7CisJCUlXTF9FUlIocHJpdiwgIlVua25vd24gZW5jb2RlIGFsZyAlZFxuIiwga2V5Y29uZi0+YWxnKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtODIyLDcgKzY4NCw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZDsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHE7CiAJc3RydWN0IGl3bF9xdWV1ZSAqcTsKIAlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZDsKQEAgLTg0NCwxMyArNzA1LDEzIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIFJGIEtJTExcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CiAKIAlpZiAoKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShwcml2LT5odywgaW5mbyktPmh3X3ZhbHVlICYgMHhGRikgPT0KIAkgICAgIElXTF9JTlZBTElEX1JBVEUpIHsKLQkJSVdMX0VSUk9SKCJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCkBAIC04NTgsMTEgKzcxOSwxMSBAQAogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBVVRIIGZyYW1lXG4iKTsKIAllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKIAllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKICNlbmRpZgogCiAJLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KQEAgLTg3Miw3ICs3MzMsNyBAQAogCSAgICAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8CiAJICAgICAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYgIXByaXYtPmFzc29jX2lkKSB8fAogCSAgICAgIXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFpd2xfaXNfYXNzb2NpYXRlZFxuIik7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtICFpd2xfaXNfYXNzb2NpYXRlZFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCkBAIC04ODMsMTIgKzc0NCwxMiBAQAogCS8qIEZpbmQgKG9yIGNyZWF0ZSkgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCiAJc3RhX2lkID0gaXdsX2dldF9zdGFfaWQocHJpdiwgaGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQlnb3RvIGRyb3A7CiAJfQogCi0JSVdMX0RFQlVHX1RYKCJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOworCUlXTF9ERUJVR19UWChwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKIAogCXN3cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXR4cV9pZCA9IHN3cV9pZDsKQEAgLTg5OCwxMiArNzU5LDE0IEBACiAJCXNlcV9udW1iZXIgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXI7CiAJCXNlcV9udW1iZXIgJj0gSUVFRTgwMjExX1NDVExfU0VROwogCQloZHItPnNlcV9jdHJsID0gaGRyLT5zZXFfY3RybCAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKIAkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzZXFfbnVtYmVyKTsKIAkJc2VxX251bWJlciArPSAweDEwOwogCQkvKiBhZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGhpcyA8c3RhLHRpZD4gKi8KLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewogCQkJdHhxX2lkID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cudHhxX2lkOworCQkJc3dxX2lkID0gaXdsX3ZpcnR1YWxfYWdnX3F1ZXVlX251bShzd3FfaWQsIHR4cV9pZCk7CisJCX0KIAkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlKys7CiAJfQogCkBAIC05MTMsMTAgKzc3Niw2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyogU2V0IHVwIGZpcnN0IGVtcHR5IFRGRCB3aXRoaW4gdGhpcyBxdWV1ZSdzIGNpcmN1bGFyIFRGRCBidWZmZXIgKi8KLQl0ZmQgPSAmdHhxLT50ZmRzW3EtPndyaXRlX3B0cl07Ci0JbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKLQogCS8qIFNldCB1cCBkcml2ZXIgZGF0YSBmb3IgdGhpcyBURkQgKi8KIAltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHhfaW5mbykpOwogCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiWzBdID0gc2tiOwpAQCAtOTcwLDcgKzgyOSw4IEBACiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKIAkgKiBmaXJzdCBlbnRyeSAqLwogCXR4Y21kX3BoeXMgKz0gb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7Ci0JaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHR4Y21kX3BoeXMsIGxlbik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCSAgIHR4Y21kX3BoeXMsIGxlbiwgMSwgMCk7CiAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCiAJCWl3bF90eF9jbWRfYnVpbGRfaHdjcnlwdG8ocHJpdiwgaW5mbywgdHhfY21kLCBza2IsIHN0YV9pZCk7CkBAIC05ODEsNyArODQxLDkgQEAKIAlpZiAobGVuKSB7CiAJCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIGhkcl9sZW4sCiAJCQkJCSAgIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGxlbik7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkJICAgcGh5c19hZGRyLCBsZW4sCisJCQkJCQkJICAgMCwgMCk7CiAJfQogCiAJLyogVGVsbCBOSUMgYWJvdXQgYW55IDItYnl0ZSBwYWRkaW5nIGFmdGVyIE1BQyBoZWFkZXIgKi8KQEAgLTEwMzUsNyArODk3LDcgQEAKIAkJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQl9IGVsc2UgewotCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIHR4cS0+c3dxX2lkKTsKKwkJCWl3bF9zdG9wX3F1ZXVlKHByaXYsIHR4cS0+c3dxX2lkKTsKIAkJfQogCX0KIApAQCAtMTA2Myw3ICs5MjUsNiBAQAogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CiAJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwODEsMjEgKzk0MiwxNyBAQAogCSAgICAgICAhKGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpKTsKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJOb3Qgc2VuZGluZyBjb21tYW5kIC0gUkYgS0lMTCIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSA/IDIgOiAxKSkgewotCQlJV0xfRVJST1IoIk5vIHNwYWNlIGZvciBUeFxuIik7CisJCUlXTF9FUlIocHJpdiwgIk5vIHNwYWNlIGZvciBUeFxuIik7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKIAotCXRmZCA9ICZ0eHEtPnRmZHNbcS0+d3JpdGVfcHRyXTsKLQltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOwotCi0KIAlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSk7CiAJb3V0X2NtZCA9IHR4cS0+Y21kW2lkeF07CiAKQEAgLTExMjAsMTMgKzk3NywxNSBAQAogCXBjaV91bm1hcF9sZW5fc2V0KCZvdXRfY21kLT5tZXRhLCBsZW4sIGxlbik7CiAJcGh5c19hZGRyICs9IG9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwogCi0JaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHBoeXNfYWRkciwgZml4X3NpemUpOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICBwaHlzX2FkZHIsIGZpeF9zaXplLCAxLAorCQkJCQkJICAgVTMyX1BBRChjbWQtPmxlbikpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlzd2l0Y2ggKG91dF9jbWQtPmhkci5jbWQpIHsKIAljYXNlIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQ6CiAJY2FzZSBTRU5TSVRJVklUWV9DTUQ6Ci0JCUlXTF9ERUJVR19IQ19EVU1QKCJTZW5kaW5nIGNvbW1hbmQgJXMgKCMleCksIHNlcTogMHglMDRYLCAiCisJCUlXTF9ERUJVR19IQ19EVU1QKHByaXYsICJTZW5kaW5nIGNvbW1hbmQgJXMgKCMleCksIHNlcTogMHglMDRYLCAiCiAJCQkJIiVkIGJ5dGVzIGF0ICVkWyVkXTolZFxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhvdXRfY21kLT5oZHIuY21kKSwKIAkJCQlvdXRfY21kLT5oZHIuY21kLApAQCAtMTEzNCw3ICs5OTMsNyBAQAogCQkJCXEtPndyaXRlX3B0ciwgaWR4LCBJV0xfQ01EX1FVRVVFX05VTSk7CiAJCQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJTZW5kaW5nIGNvbW1hbmQgJXMgKCMleCksIHNlcTogMHglMDRYLCAiCisJCUlXTF9ERUJVR19IQyhwcml2LCAiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgogCQkJCSIlZCBieXRlcyBhdCAlZFslZF06JWRcbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcob3V0X2NtZC0+aGRyLmNtZCksCiAJCQkJb3V0X2NtZC0+aGRyLmNtZCwKQEAgLTExNDQsOCArMTAwMyw5IEBACiAjZW5kaWYKIAl0eHEtPm5lZWRfdXBkYXRlID0gMTsKIAotCS8qIFNldCB1cCBlbnRyeSBpbiBxdWV1ZSdzIGJ5dGUgY291bnQgY2lyY3VsYXIgYnVmZmVyICovCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX3VwZGF0ZV9ieXRlX2NudF90YmwocHJpdiwgdHhxLCAwKTsKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX3VwZGF0ZV9ieXRlX2NudF90YmwpCisJCS8qIFNldCB1cCBlbnRyeSBpbiBxdWV1ZSdzIGJ5dGUgY291bnQgY2lyY3VsYXIgYnVmZmVyICovCisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgMCk7CiAKIAkvKiBJbmNyZW1lbnQgYW5kIHVwZGF0ZSBxdWV1ZSdzIHdyaXRlIGluZGV4ICovCiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CkBAIC0xMTYzLDcgKzEwMjMsNyBAQAogCWludCBuZnJlZWQgPSAwOwogCiAJaWYgKChpbmRleCA+PSBxLT5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQocSwgaW5kZXgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7CiAJCXJldHVybiAwOwpAQCAtMTE4MCw3ICsxMDQwLDcgQEAKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbnZhbF9ieXRlX2NudF90YmwpCiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CiAKLQkJaXdsX2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKIAkJbmZyZWVkKys7CiAJfQogCXJldHVybiBuZnJlZWQ7CkBAIC0xMjAzLDcgKzEwNjMsNyBAQAogCWludCBuZnJlZWQgPSAwOwogCiAJaWYgKChpZHggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGlkeCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCisJCUlXTF9FUlIocHJpdiwgIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHEgaWQgKCVkKSwgaW5kZXggJWQsICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWQuXG4iLCB0eHFfaWQsCiAJCQkgIGlkeCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7CiAJCXJldHVybjsKQEAgLTEyMTgsNyArMTA3OCw3IEBACiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKIAogCQlpZiAobmZyZWVkKysgPiAwKSB7Ci0JCQlJV0xfRVJST1IoIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaWR4LAorCQkJSVdMX0VSUihwcml2LCAiSENNRCBza2lwcGVkOiBpbmRleCAoJWQpICVkICVkXG4iLCBpZHgsCiAJCQkJCXEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKIAkJfQpAQCAtMTMwNiw3ICsxMTY2LDcgQEAKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JSVdMX1dBUk5JTkcoIiVzIG9uIHJhID0gJXBNIHRpZCA9ICVkXG4iLAorCUlXTF9XQVJOKHByaXYsICIlcyBvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwKIAkJCV9fZnVuY19fLCByYSwgdGlkKTsKIAogCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgcmEpOwpAQCAtMTMxNCw3ICsxMTc0LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSAhPSBJV0xfQUdHX09GRikgewotCQlJV0xfRVJST1IoIlN0YXJ0IEFHRyB3aGVuIHN0YXRlIGlzIG5vdCBJV0xfQUdHX09GRiAhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgQUdHIHdoZW4gc3RhdGUgaXMgbm90IElXTF9BR0dfT0ZGICFcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTMzNCwxMSArMTE5NCwxMSBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CisJCUlXTF9FUlIocHJpdiwgIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKIAkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT047CiAJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCByYSwgdGlkKTsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGlzIE5PVCBlbXB0eTogJWQgcGFja2V0cyBpbiBIVyBxdWV1ZVxuIiwKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBpcyBOT1QgZW1wdHk6ICVkIHBhY2tldHMgaW4gSFcgcXVldWVcbiIsCiAJCQkgICAgIHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlKTsKIAkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQTsKIAl9CkBAIC0xMzU0LDcgKzEyMTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXJhKSB7Ci0JCUlXTF9FUlJPUigicmEgPSBOVUxMXG4iKTsKKwkJSVdMX0VSUihwcml2LCAicmEgPSBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzY1LDExICsxMjI1LDEzIEBACiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHJhKTsKIAotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBzdGF0aW9uIGZvciBBR0cgdGlkICVkXG4iLCB0aWQpOwogCQlyZXR1cm4gLUVOWElPOworCX0KIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSAhPSBJV0xfQUdHX09OKQotCQlJV0xfV0FSTklORygiU3RvcHBpbmcgQUdHIHdoaWxlIHN0YXRlIG5vdCBJV0xfQUdHX09OXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CiAKIAl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwogCXNzbiA9ICh0aWRfZGF0YS0+c2VxX251bWJlciAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKQEAgLTEzNzksMTMgKzEyNDEsMTMgQEAKIAogCS8qIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHkgKi8KIAlpZiAod3JpdGVfcHRyICE9IHJlYWRfcHRyKSB7Ci0JCUlXTF9ERUJVR19IVCgiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJTdG9wcGluZyBhIG5vbiBlbXB0eSBBR0cgSFcgUVVFVUVcbiIpOwogCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9CiAJCQkJSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKKwlJV0xfREVCVUdfSFQocHJpdiwgIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTE0MTYsNyArMTI3OCw3IEBACiAJCSAgICAocS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyKSkgewogCQkJdTE2IHNzbiA9IFNFUV9UT19TTih0aWRfZGF0YS0+c2VxX251bWJlcik7CiAJCQlpbnQgdHhfZmlmbyA9IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bdGlkXTsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIERFTEJBIGZsb3dcbiIpOworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgREVMQkEgZmxvd1xuIik7CiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLAogCQkJCQkJCSAgICAgc3NuLCB0eF9maWZvKTsKIAkJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKQEAgLTE0MjYsNyArMTI4OCw3IEBACiAJY2FzZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE6CiAJCS8qIFdlIGFyZSByZWNsYWltaW5nIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgcXVldWUgKi8KIAkJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIEFEREJBIGZsb3dcbiIpOworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgQUREQkEgZmxvd1xuIik7CiAJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PTjsKIAkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCBhZGRyLCB0aWQpOwogCQl9CkBAIC0xNDU1LDEzICsxMzE3LDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCiAJaWYgKHVubGlrZWx5KCFhZ2ctPndhaXRfZm9yX2JhKSkgIHsKLQkJSVdMX0VSUk9SKCJSZWNlaXZlZCBCQSB3aGVuIG5vdCBleHBlY3RlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIlJlY2VpdmVkIEJBIHdoZW4gbm90IGV4cGVjdGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTWFyayB0aGF0IHRoZSBleHBlY3RlZCBibG9jay1hY2sgcmVzcG9uc2UgYXJyaXZlZCAqLwogCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiQkEgJWQgJWRcbiIsIGFnZy0+c3RhcnRfaWR4LCBiYV9yZXNwLT5zZXFfY3RsKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CiAKIAkvKiBDYWxjdWxhdGUgc2hpZnQgdG8gYWxpZ24gYmxvY2stYWNrIGJpdHMgd2l0aCBvdXIgVHggd2luZG93IGJpdHMgKi8KIAlzaCA9IGFnZy0+c3RhcnRfaWR4IC0gU0VRX1RPX0lOREVYKHNlcV9jdGwgPj4gNCk7CkBAIC0xNDcyLDcgKzEzMzQsNyBAQAogCWJpdG1hcCA9IGxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCkgPj4gc2g7CiAKIAlpZiAoYWdnLT5mcmFtZV9jb3VudCA+ICg2NCAtIHNoKSkgewotCQlJV0xfREVCVUdfVFhfUkVQTFkoIm1vcmUgZnJhbWVzIHRoYW4gYml0bWFwIHNpemUiKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0ODUsNyArMTM0Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IGFnZy0+ZnJhbWVfY291bnQgOyBpKyspIHsKIAkJYWNrID0gYml0bWFwICYgKDFVTEwgPDwgaSk7CiAJCXN1Y2Nlc3NlcyArPSAhIWFjazsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCIlcyBPTiBpPSVkIGlkeD0lZCByYXc9JWRcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAogCQkJYWNrID8gIkFDSyIgOiAiTkFDSyIsIGksIChhZ2ctPnN0YXJ0X2lkeCArIGkpICYgMHhmZiwKIAkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7CiAJfQpAQCAtMTQ5OCw3ICsxMzYwLDcgQEAKIAlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7CiAJaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiQml0bWFwICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYml0bWFwKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJpdG1hcCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MjgsNyArMTM5MCw4IEBACiAJdTE2IGJhX3Jlc3Bfc2NkX3NzbiA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNjZF9zc24pOwogCiAJaWYgKHNjZF9mbG93ID49IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSkgewotCQlJV0xfRVJST1IoIkJVR19PTiBzY2RfZmxvdyBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcXVldWVzXG4iKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkJVR19PTiBzY2RfZmxvdyBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcXVldWVzXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU0MiwxOSArMTQwNSwxOSBAQAogCiAJLyogVE9ETzogTmVlZCB0byBnZXQgdGhpcyBjb3B5IG1vcmUgc2FmZWx5IC0gbm93IGdvb2QgZm9yIGRlYnVnICovCiAKLQlJV0xfREVCVUdfVFhfUkVQTFkoIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXSBSZWNlaXZlZCBmcm9tICVwTSwgIgorCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUkVQTFlfQ09NUFJFU1NFRF9CQSBbJWRdIFJlY2VpdmVkIGZyb20gJXBNLCAiCiAJCQkgICAic3RhX2lkID0gJWRcbiIsCiAJCQkgICBhZ2ctPndhaXRfZm9yX2JhLAogCQkJICAgKHU4ICopICZiYV9yZXNwLT5zdGFfYWRkcl9sbzMyLAogCQkJICAgYmFfcmVzcC0+c3RhX2lkKTsKLQlJV0xfREVCVUdfVFhfUkVQTFkoIlRJRCA9ICVkLCBTZXFDdGwgPSAlZCwgYml0bWFwID0gMHglbGx4LCBzY2RfZmxvdyA9ICIKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRJRCA9ICVkLCBTZXFDdGwgPSAlZCwgYml0bWFwID0gMHglbGx4LCBzY2RfZmxvdyA9ICIKIAkJCSAgICIlZCwgc2NkX3NzbiA9ICVkXG4iLAogCQkJICAgYmFfcmVzcC0+dGlkLAogCQkJICAgYmFfcmVzcC0+c2VxX2N0bCwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSwKIAkJCSAgIGJhX3Jlc3AtPnNjZF9mbG93LAogCQkJICAgYmFfcmVzcC0+c2NkX3Nzbik7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJEQVQgc3RhcnRfaWR4ID0gJWQsIGJpdG1hcCA9IDB4JWxseCBcbiIsCisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJEQVQgc3RhcnRfaWR4ID0gJWQsIGJpdG1hcCA9IDB4JWxseCBcbiIsCiAJCQkgICBhZ2ctPnN0YXJ0X2lkeCwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0xNTcyLDcgKzE0MzUsNyBAQAogCQlpZiAoKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykgJiYKIAkJICAgIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKIAkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgdHhxLT5zd3FfaWQpOworCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCiAJCWl3bF90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHNjZF9mbG93KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA1N2RkMzRlLi5hNzFiMDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQ2LDQwICs0NiwyNSBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlICJpd2wtMzk0NS1jb3JlLmgiCisjZGVmaW5lIERSVl9OQU1FCSJpd2wzOTQ1IgorCisjaW5jbHVkZSAiaXdsLWZoLmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtZmguaCIKKyNpbmNsdWRlICJpd2wtY29tbWFuZHMuaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXUzMiBpd2wzOTQ1X2RlYnVnX2xldmVsOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIG1vZHVsZSBib2lsZXIgcGxhdGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBtb2R1bGUgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbjsgLyogZGVmOiAwID0gdXNlIDM5NDUncyBoL3cgc2NhbiAqLwotc3RhdGljIHUzMiBpd2wzOTQ1X3BhcmFtX2RlYnVnOyAgICAvKiBkZWY6IDAgPSBtaW5pbWFsIGRlYnVnIGxvZyBtZXNzYWdlcyAqLwotc3RhdGljIGludCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGU7ICAvKiBkZWY6IDAgPSBlbmFibGUgcmFkaW8gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9hbnRlbm5hOyAgLyogZGVmOiAwID0gYm90aCBhbnRlbm5hcyAodXNlIGRpdmVyc2l0eSkgKi8KLWludCBpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvOyAgICAgICAgLyogZGVmOiAwID0gdXNlIHNvZnR3YXJlIGVuY3J5cHRpb24gKi8KLWludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPSBJV0wzOV9NQVhfTlVNX1FVRVVFUzsgLyogZGVmOiA4IFR4IHF1ZXVlcyAqLworI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgotICogTk9URTogRFJWX05BTUUgaXMgZGVmaW5lZCBpbiBpd2x3aWZpLmggZm9yIHVzZSBieSBpd2wtZGVidWcuaCBhbmQgcHJpbnRrCiAgKi8KIAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JXAogIkludGVsKFIpIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiBkcml2ZXIgZm9yIExpbnV4IgogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogI2RlZmluZSBWRCAiZCIKICNlbHNlCiAjZGVmaW5lIFZECkBAIC05MSwxMCArNzYsMTAgQEAKICNkZWZpbmUgVlMKICNlbmRpZgogCi0jZGVmaW5lIElXTFdJRklfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgSVdMMzlfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTgorI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVdMMzlfVkVSU0lPTgogCiAKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMTAyLDIzNSArODcsMTMgQEAKIE1PRFVMRV9BVVRIT1IoRFJWX0NPUFlSSUdIVCAiICIgRFJWX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICppd2wzOTQ1X2dldF9iYW5kKAotCQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JcmV0dXJuIHByaXYtPmh3LT53aXBoeS0+YmFuZHNbYmFuZF07Ci19Ci0KLS8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgotICogRE1BIHNlcnZpY2VzCi0gKgotICogVGhlb3J5IG9mIG9wZXJhdGlvbgotICoKLSAqIEEgVHggb3IgUnggcXVldWUgcmVzaWRlcyBpbiBob3N0IERSQU0sIGFuZCBpcyBjb21wcmlzZWQgb2YgYSBjaXJjdWxhciBidWZmZXIKLSAqIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycywgZWFjaCBvZiB3aGljaCBwb2ludHMgdG8gb25lIG9yIG1vcmUgZGF0YSBidWZmZXJzIGZvcgotICogdGhlIGRldmljZSB0byByZWFkIGZyb20gb3IgZmlsbC4gIERyaXZlciBhbmQgZGV2aWNlIGV4Y2hhbmdlIHN0YXR1cyBvZiBlYWNoCi0gKiBxdWV1ZSB2aWEgInJlYWQiIGFuZCAid3JpdGUiIHBvaW50ZXJzLiAgRHJpdmVyIGtlZXBzIG1pbmltdW0gb2YgMiBlbXB0eQotICogZW50cmllcyBpbiBlYWNoIGNpcmN1bGFyIGJ1ZmZlciwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmZ1c2luZyBlbXB0eSBhbmQgZnVsbAotICogcXVldWUgc3RhdGVzLgotICoKLSAqIFRoZSBkZXZpY2UgcmVhZHMgb3Igd3JpdGVzIHRoZSBkYXRhIGluIHRoZSBxdWV1ZXMgdmlhIHRoZSBkZXZpY2UncyBzZXZlcmFsCi0gKiBETUEvRklGTyBjaGFubmVscy4gIEVhY2ggcXVldWUgaXMgbWFwcGVkIHRvIGEgc2luZ2xlIERNQSBjaGFubmVsLgotICoKLSAqIEZvciBUeCBxdWV1ZSwgdGhlcmUgYXJlIGxvdyBtYXJrIGFuZCBoaWdoIG1hcmsgbGltaXRzLiBJZiwgYWZ0ZXIgcXVldWluZwotICogdGhlIHBhY2tldCBmb3IgVHgsIGZyZWUgc3BhY2UgYmVjb21lIDwgbG93IG1hcmssIFR4IHF1ZXVlIHN0b3BwZWQuIFdoZW4KLSAqIHJlY2xhaW1pbmcgcGFja2V0cyAob24gJ3R4IGRvbmUgSVJRKSwgaWYgZnJlZSBzcGFjZSBiZWNvbWUgPiBoaWdoIG1hcmssCi0gKiBUeCBxdWV1ZSByZXN1bWVkLgotICoKLSAqIFRoZSAzOTQ1IG9wZXJhdGVzIHdpdGggc2l4IHF1ZXVlczogIE9uZSByZWNlaXZlIHF1ZXVlLCBvbmUgdHJhbnNtaXQgcXVldWUKLSAqICgjNCkgZm9yIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIGRldmljZSBmaXJtd2FyZSwgYW5kIGZvdXIgdHJhbnNtaXQgcXVldWVzCi0gKiAoIzAtMykgZm9yIGRhdGEgdHggdmlhIEVEQ0EuICBBbiBhZGRpdGlvbmFsIDIgSENDQSBxdWV1ZXMgYXJlIHVudXNlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBpd2wzOTQ1X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxKQotewotCWludCBzID0gcS0+cmVhZF9wdHIgLSBxLT53cml0ZV9wdHI7Ci0KLQlpZiAocS0+cmVhZF9wdHIgPiBxLT53cml0ZV9wdHIpCi0JCXMgLT0gcS0+bl9iZDsKLQotCWlmIChzIDw9IDApCi0JCXMgKz0gcS0+bl93aW5kb3c7Ci0JLyoga2VlcCBzb21lIHJlc2VydmUgdG8gbm90IGNvbmZ1c2UgZW1wdHkgYW5kIGZ1bGwgc2l0dWF0aW9ucyAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi1pbnQgaXdsMzk0NV94Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSkKLXsKLQlyZXR1cm4gcS0+d3JpdGVfcHRyID4gcS0+cmVhZF9wdHIgPwotCQkoaSA+PSBxLT5yZWFkX3B0ciAmJiBpIDwgcS0+d3JpdGVfcHRyKSA6Ci0JCSEoaSA8IHEtPnJlYWRfcHRyICYmIGkgPj0gcS0+d3JpdGVfcHRyKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHU4IGdldF9jbWRfaW5kZXgoc3RydWN0IGl3bDM5NDVfcXVldWUgKnEsIHUzMiBpbmRleCwgaW50IGlzX2h1Z2UpCi17Ci0JLyogVGhpcyBpcyBmb3Igc2NhbiBjb21tYW5kLCB0aGUgYmlnIGJ1ZmZlciBhdCBlbmQgb2YgY29tbWFuZCBhcnJheSAqLwotCWlmIChpc19odWdlKQotCQlyZXR1cm4gcS0+bl93aW5kb3c7CS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwotCi0JLyogT3RoZXJ3aXNlLCB1c2Ugbm9ybWFsIHNpemUgYnVmZmVycyAqLwotCXJldHVybiBpbmRleCAmIChxLT5uX3dpbmRvdyAtIDEpOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcXVldWVfaW5pdCAtIEluaXRpYWxpemUgcXVldWUncyBoaWdoL2xvdy13YXRlciBhbmQgcmVhZC93cml0ZSBpbmRleGVzCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLAotCQkJICBpbnQgY291bnQsIGludCBzbG90c19udW0sIHUzMiBpZCkKLXsKLQlxLT5uX2JkID0gY291bnQ7Ci0JcS0+bl93aW5kb3cgPSBzbG90c19udW07Ci0JcS0+aWQgPSBpZDsKLQotCS8qIGNvdW50IG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZSBpd2xfcXVldWVfaW5jX3dyYXAKLQkgKiBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKGNvdW50KSk7Ci0KLQkvKiBzbG90c19udW0gbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlCi0JICogZ2V0X2NtZF9pbmRleCBpcyBicm9rZW4uICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKHNsb3RzX251bSkpOwotCi0JcS0+bG93X21hcmsgPSBxLT5uX3dpbmRvdyAvIDQ7Ci0JaWYgKHEtPmxvd19tYXJrIDwgNCkKLQkJcS0+bG93X21hcmsgPSA0OwotCi0JcS0+aGlnaF9tYXJrID0gcS0+bl93aW5kb3cgLyA4OwotCWlmIChxLT5oaWdoX21hcmsgPCAyKQotCQlxLT5oaWdoX21hcmsgPSAyOwotCi0JcS0+d3JpdGVfcHRyID0gcS0+cmVhZF9wdHIgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyAtIEFsbG9jIGRyaXZlciBkYXRhIGFuZCBURkQgQ0IgZm9yIG9uZSBUeC9jbWQgcXVldWUKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0KLQkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKLQkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLwotCWlmIChpZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQl0eHEtPnR4YiA9IGttYWxsb2Moc2l6ZW9mKHR4cS0+dHhiWzBdKSAqCi0JCQkJICAgVEZEX1FVRVVFX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0eHEtPnR4YikgewotCQkJSVdMX0VSUk9SKCJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgotCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2UKLQkJdHhxLT50eGIgPSBOVUxMOwotCi0JLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKLQkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LAotCQkJc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYLAotCQkJJnR4cS0+cS5kbWFfYWRkcik7Ci0KLQlpZiAoIXR4cS0+YmQpIHsKLQkJSVdMX0VSUk9SKCJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwKLQkJCSAgc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdHhxLT5xLmlkID0gaWQ7Ci0KLQlyZXR1cm4gMDsKLQotIGVycm9yOgotCWtmcmVlKHR4cS0+dHhiKTsKLQl0eHEtPnR4YiA9IE5VTEw7Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgdHgvY21kIHF1ZXVlCi0gKi8KLWludCBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSwgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgbGVuOwotCWludCByYyA9IDA7Ci0KLQkvKgotCSAqIEFsbG9jIGJ1ZmZlciBhcnJheSBmb3IgY29tbWFuZHMgKFR4IG9yIG90aGVyIHR5cGVzIG9mIGNvbW1hbmRzKS4KLQkgKiBGb3IgdGhlIGNvbW1hbmQgcXVldWUgKCM0KSwgYWxsb2NhdGUgY29tbWFuZCBzcGFjZSArIG9uZSBiaWcKLQkgKiBjb21tYW5kIGZvciBzY2FuLCBzaW5jZSBzY2FuIGNvbW1hbmQgaXMgdmVyeSBodWdlOyB0aGUgc3lzdGVtIHdpbGwKLQkgKiBub3QgaGF2ZSB0d28gc2NhbnMgYXQgdGhlIHNhbWUgdGltZSwgc28gb25seSBvbmUgaXMgbmVlZGVkLgotCSAqIEZvciBkYXRhIFR4IHF1ZXVlcyAoYWxsIG90aGVyIHF1ZXVlcyksIG5vIHN1cGVyLXNpemUgY29tbWFuZAotCSAqIHNwYWNlIGlzIG5lZWRlZC4KLQkgKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIHNsb3RzX251bTsKLQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQotCQlsZW4gKz0gIElXTF9NQVhfU0NBTl9TSVpFOwotCXR4cS0+Y21kID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBsZW4sICZ0eHEtPmRtYV9hZGRyX2NtZCk7Ci0JaWYgKCF0eHEtPmNtZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBBbGxvYyBkcml2ZXIgZGF0YSBhcnJheSBhbmQgVEZEIGNpcmN1bGFyIGJ1ZmZlciAqLwotCXJjID0gaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyhwcml2LCB0eHEsIHR4cV9pZCk7Ci0JaWYgKHJjKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXR4cS0+bmVlZF91cGRhdGUgPSAwOwotCi0JLyogVEZEX1FVRVVFX1NJWkVfTUFYIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGl3bF9xdWV1ZV9pbmNfd3JhcCBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVJTERfQlVHX09OKFRGRF9RVUVVRV9TSVpFX01BWCAmIChURkRfUVVFVUVfU0laRV9NQVggLSAxKSk7Ci0KLQkvKiBJbml0aWFsaXplIHF1ZXVlIGhpZ2gvbG93LXdhdGVyLCBoZWFkL3RhaWwgaW5kZXhlcyAqLwotCWl3bDM5NDVfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKLQotCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUsIGVuYWJsZSBETUEgY2hhbm5lbC4gKi8KLQlpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQocHJpdiwgdHhxKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgotICogQHR4cTogVHJhbnNtaXQgcXVldWUgdG8gZGVhbGxvY2F0ZS4KLSAqCi0gKiBFbXB0eSBxdWV1ZSBieSByZW1vdmluZyBhbmQgZGVzdHJveWluZyBhbGwgQkQncy4KLSAqIEZyZWUgYWxsIGJ1ZmZlcnMuCi0gKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAqLwotdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGxlbjsKLQotCWlmIChxLT5uX2JkID09IDApCi0JCXJldHVybjsKLQotCS8qIGZpcnN0LCBlbXB0eSBhbGwgQkQncyAqLwotCWZvciAoOyBxLT53cml0ZV9wdHIgIT0gcS0+cmVhZF9wdHI7Ci0JICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCi0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7Ci0KLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIHEtPm5fd2luZG93OwotCWlmIChxLT5pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJbGVuICs9IElXTF9NQVhfU0NBTl9TSVpFOwotCi0JLyogRGUtYWxsb2MgYXJyYXkgb2YgY29tbWFuZC90eCBidWZmZXJzICovCi0JcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIGxlbiwgdHhxLT5jbWQsIHR4cS0+ZG1hX2FkZHJfY21kKTsKLQotCS8qIERlLWFsbG9jIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzICovCi0JaWYgKHR4cS0+cS5uX2JkKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZSkgKgotCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT5iZCwgdHhxLT5xLmRtYV9hZGRyKTsKLQotCS8qIERlLWFsbG9jIGFycmF5IG9mIHBlci1URkQgZHJpdmVyIGRhdGEgKi8KLQlrZnJlZSh0eHEtPnR4Yik7Ci0JdHhxLT50eGIgPSBOVUxMOwotCi0JLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCi0JbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKLX0KLQotY29uc3QgdTggaXdsMzk0NV9icm9hZGNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKKyAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDM5NDVfbW9kX3BhcmFtcyA9IHsKKwkubnVtX29mX3F1ZXVlcyA9IElXTDM5X01BWF9OVU1fUVVFVUVTLAorCS5zd19jcnlwdG8gPSAxLAorCS5yZXN0YXJ0X2Z3ID0gMSwKKwkvKiB0aGUgcmVzdCBhcmUgMCBieSBkZWZhdWx0ICovCit9OwogCiAvKioqKioqKioqKioqKioqIFNUQVRJT04gVEFCTEUgTUFOQUdFTUVOVCAqKioqCiAgKiBtYWM4MDIxMSBzaG91bGQgYmUgZXhhbWluZWQgdG8gZGV0ZXJtaW5lIGlmIHN0YV9pbmZvIGlzIGR1cGxpY2F0aW5nCkBAIC0zNDQsNyArMTA3LDcgQEAKICAqCiAgKiBOT1RFOiAgVGhpcyBkb2VzIG5vdCByZW1vdmUgc3RhdGlvbiBmcm9tIGRldmljZSdzIHN0YXRpb24gdGFibGUuCiAgKi8KLXN0YXRpYyB1OCBpd2wzOTQ1X3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCitzdGF0aWMgdTggaXdsMzk0NV9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCiB7CiAJaW50IGluZGV4ID0gSVdMX0lOVkFMSURfU1RBVElPTjsKIAlpbnQgaTsKQEAgLTM1NSwxMSArMTE4LDExIEBACiAJaWYgKGlzX2FwKQogCQlpbmRleCA9IElXTF9BUF9JRDsKIAllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJaW5kZXggPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJaW5kZXggPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCWVsc2UKLQkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3NldHRpbmcubWF4X3N0YXRpb25zOyBpKyspCi0JCQlpZiAocHJpdi0+c3RhdGlvbnNbaV0udXNlZCAmJgotCQkJICAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLAorCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsgaSsrKQorCQkJaWYgKHByaXYtPnN0YXRpb25zXzM5W2ldLnVzZWQgJiYKKwkJCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwogCQkJCWJyZWFrOwpAQCAtMzY4LDggKzEzMSw4IEBACiAJaWYgKHVubGlrZWx5KGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pKQogCQlnb3RvIG91dDsKIAotCWlmIChwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCkgewotCQlwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCA9IDA7CisJaWYgKHByaXYtPnN0YXRpb25zXzM5W2luZGV4XS51c2VkKSB7CisJCXByaXYtPnN0YXRpb25zXzM5W2luZGV4XS51c2VkID0gMDsKIAkJcHJpdi0+bnVtX3N0YXRpb25zLS07CiAJfQogCkBAIC0zODYsMTQgKzE0OSwxNCBAQAogICoKICAqIE5PVEU6ICBUaGlzIGRvZXMgbm90IGNsZWFyIG9yIG90aGVyd2lzZSBhbHRlciB0aGUgZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZS4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+bnVtX3N0YXRpb25zID0gMDsKLQltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOworCW1lbXNldChwcml2LT5zdGF0aW9uc18zOSwgMCwgc2l6ZW9mKHByaXYtPnN0YXRpb25zXzM5KSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQpAQCAtNDAxLDcgKzE2NCw3IEBACiAvKioKICAqIGl3bDM5NDVfYWRkX3N0YXRpb24gLSBBZGQgc3RhdGlvbiB0byBzdGF0aW9uIHRhYmxlcyBpbiBkcml2ZXIgYW5kIGRldmljZQogICovCi11OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXAsIHU4IGZsYWdzKQordTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXAsIHU4IGZsYWdzKQogewogCWludCBpOwogCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047CkBAIC00MTMsMTYgKzE3NiwxNiBAQAogCWlmIChpc19hcCkKIAkJaW5kZXggPSBJV0xfQVBfSUQ7CiAJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCWluZGV4ID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWluZGV4ID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAllbHNlCi0JCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKSB7Ci0JCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCisJCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIXByaXYtPnN0YXRpb25zW2ldLnVzZWQgJiYKKwkJCWlmICghcHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCAmJgogCQkJICAgIGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQkJaW5kZXggPSBpOwogCQl9CkBAIC00MzQsMTQgKzE5NywxNCBAQAogCQlyZXR1cm4gaW5kZXg7CiAJfQogCi0JaWYgKHByaXYtPnN0YXRpb25zW2luZGV4XS51c2VkICYmCi0JICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpbmRleF0uc3RhLnN0YS5hZGRyLCBhZGRyKSkgeworCWlmIChwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCAmJgorCSAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdLnN0YS5zdGEuYWRkciwgYWRkcikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOwogCQlyZXR1cm4gaW5kZXg7CiAJfQogCi0JSVdMX0RFQlVHX0FTU09DKCJBZGQgU1RBIElEICVkOiAlcE1cbiIsIGluZGV4LCBhZGRyKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW2luZGV4XTsKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZCBTVEEgSUQgJWQ6ICVwTVxuIiwgaW5kZXgsIGFkZHIpOworCXN0YXRpb24gPSAmcHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdOwogCXN0YXRpb24tPnVzZWQgPSAxOwogCXByaXYtPm51bV9zdGF0aW9ucysrOwogCkBAIC00NjAsNTMxICsyMjMsMzUgQEAKIAkvKiBUdXJuIG9uIGJvdGggYW50ZW5uYXMgZm9yIHRoZSBzdGF0aW9uLi4uICovCiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9CiAJCQlpd2wzOTQ1X2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZSwgUkFURV9NQ1NfQU5UX0FCX01TSyk7Ci0Jc3RhdGlvbi0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9Ci0JCQlsZTE2X3RvX2NwdShzdGF0aW9uLT5zdGEucmF0ZV9uX2ZsYWdzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAogCS8qIEFkZCBzdGF0aW9uIHRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOwogCXJldHVybiBpbmRleDsKIAogfQogCi0vKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmVhZHkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQkvKiBUaGUgYWRhcHRlciBpcyAncmVhZHknIGlmIFJFQURZIGFuZCBHRU9fQ09ORklHVVJFRCBiaXRzIGFyZQotCSAqIHNldCBidXQgRVhJVF9QRU5ESU5HIGlzIG5vdCAqLwotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpICYmCi0JICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgJiYKLQkgICAgICAgIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2FsaXZlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmZraWxsX3N3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZmtpbGxfaHcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3Jma2lsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSB8fAotCQlpd2wzOTQ1X2lzX3Jma2lsbF9zdyhwcml2KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZWFkeV9yZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpd2wzOTQ1X2lzX3JlYWR5KHByaXYpOwotfQotCi0vKioqKioqKioqKioqKioqIEhPU1QgQ09NTUFORCBRVUVVRSBGVU5DVElPTlMgICAqKioqKi8KLQotI2RlZmluZSBJV0xfQ01EKHgpIGNhc2UgeDogcmV0dXJuICN4Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfY21kX3N0cmluZyh1OCBjbWQpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQkJSVdMX0NNRChSRVBMWV9BTElWRSk7Ci0JCUlXTF9DTUQoUkVQTFlfRVJST1IpOwotCQlJV0xfQ01EKFJFUExZX1JYT04pOwotCQlJV0xfQ01EKFJFUExZX1JYT05fQVNTT0MpOwotCQlJV0xfQ01EKFJFUExZX1FPU19QQVJBTSk7Ci0JCUlXTF9DTUQoUkVQTFlfUlhPTl9USU1JTkcpOwotCQlJV0xfQ01EKFJFUExZX0FERF9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1JFTU9WRV9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1JFTU9WRV9BTExfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV8zOTQ1X1JYKTsKLQkJSVdMX0NNRChSRVBMWV9UWCk7Ci0JCUlXTF9DTUQoUkVQTFlfUkFURV9TQ0FMRSk7Ci0JCUlXTF9DTUQoUkVQTFlfTEVEU19DTUQpOwotCQlJV0xfQ01EKFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQpOwotCQlJV0xfQ01EKFJBREFSX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfUVVJRVRfQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9DSEFOTkVMX1NXSVRDSCk7Ci0JCUlXTF9DTUQoQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQpOwotCQlJV0xfQ01EKFNQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChQT1dFUl9UQUJMRV9DTUQpOwotCQlJV0xfQ01EKFBNX1NMRUVQX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMpOwotCQlJV0xfQ01EKFJFUExZX1NDQU5fQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9TQ0FOX0FCT1JUX0NNRCk7Ci0JCUlXTF9DTUQoU0NBTl9TVEFSVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChCRUFDT05fTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9UWF9CRUFDT04pOwotCQlJV0xfQ01EKFdIT19JU19BV0FLRV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFFVSUVUX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCk7Ci0JCUlXTF9DTUQoTUVBU1VSRV9BQk9SVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX0JUX0NPTkZJRyk7Ci0JCUlXTF9DTUQoUkVQTFlfU1RBVElTVElDU19DTUQpOwotCQlJV0xfQ01EKFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9DQVJEX1NUQVRFX0NNRCk7Ci0JCUlXTF9DTUQoQ0FSRF9TVEFURV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKE1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJVTktOT1dOIjsKLQotCX0KLX0KLQotI2RlZmluZSBIT1NUX0NPTVBMRVRFX1RJTUVPVVQgKEhaIC8gMikKLQotLyoqCi0gKiBpd2wzOTQ1X2VucXVldWVfaGNtZCAtIGVucXVldWUgYSB1Q29kZSBjb21tYW5kCi0gKiBAcHJpdjogZGV2aWNlIHByaXZhdGUgZGF0YSBwb2ludAotICogQGNtZDogYSBwb2ludCB0byB0aGUgdWNvZGUgY29tbWFuZCBzdHJ1Y3R1cmUKLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyA8IDAgdmFsdWVzIHRvIGluZGljYXRlIHRoZSBvcGVyYXRpb24gaXMKLSAqIGZhaWxlZC4gT24gc3VjY2VzcywgaXQgdHVybnMgdGhlIGluZGV4ICg+IDApIG9mIGNvbW1hbmQgaW4gdGhlCi0gKiBjb21tYW5kIHF1ZXVlLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZDsKLQl1MzIgKmNvbnRyb2xfZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfY21kICpvdXRfY21kOwotCXUzMiBpZHg7Ci0JdTE2IGZpeF9zaXplID0gKHUxNikoY21kLT5sZW4gKyBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci0JaW50IHBhZDsKLQl1MTYgY291bnQ7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCi0JICogdGhlIFRGRF9NQVhfUEFZTE9BRF9TSVpFLCBhbmQgaXQgc2VudCBhcyBhICdzbWFsbCcgY29tbWFuZCB0aGVuCi0JICogd2Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBURkQgZW50cmllcyAqLwotCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKLQkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7Ci0KLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGl3bDM5NDVfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0KLQl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7Ci0KLQlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSk7Ci0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOwotCi0Jb3V0X2NtZC0+aGRyLmNtZCA9IGNtZC0+aWQ7Ci0JbWVtY3B5KCZvdXRfY21kLT5tZXRhLCAmY21kLT5tZXRhLCBzaXplb2YoY21kLT5tZXRhKSk7Ci0JbWVtY3B5KCZvdXRfY21kLT5jbWQucGF5bG9hZCwgY21kLT5kYXRhLCBjbWQtPmxlbik7Ci0KLQkvKiBBdCB0aGlzIHBvaW50LCB0aGUgb3V0X2NtZCBub3cgaGFzIGFsbCBvZiB0aGUgaW5jb21pbmcgY21kCi0JICogaW5mb3JtYXRpb24gKi8KLQotCW91dF9jbWQtPmhkci5mbGFncyA9IDA7Ci0Jb3V0X2NtZC0+aGRyLnNlcXVlbmNlID0gY3B1X3RvX2xlMTYoUVVFVUVfVE9fU0VRKElXTF9DTURfUVVFVUVfTlVNKSB8Ci0JCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSk7Ci0JaWYgKG91dF9jbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKQotCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gY3B1X3RvX2xlMTYoU0VRX0hVR0VfRlJBTUUpOwotCi0JcGh5c19hZGRyID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2YodHhxLT5jbWRbMF0pICogaWR4ICsKLQkJCW9mZnNldG9mKHN0cnVjdCBpd2wzOTQ1X2NtZCwgaGRyKTsKLQlpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHBoeXNfYWRkciwgZml4X3NpemUpOwotCi0JcGFkID0gVTMyX1BBRChjbWQtPmxlbik7Ci0JY291bnQgPSBURkRfQ1RMX0NPVU5UX0dFVCgqY29udHJvbF9mbGFncyk7Ci0JKmNvbnRyb2xfZmxhZ3MgPSBURkRfQ1RMX0NPVU5UX1NFVChjb3VudCkgfCBURkRfQ1RMX1BBRF9TRVQocGFkKTsKLQotCUlXTF9ERUJVR19IQygiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgotCQkgICAgICIlZCBieXRlcyBhdCAlZFslZF06JWRcbiIsCi0JCSAgICAgZ2V0X2NtZF9zdHJpbmcob3V0X2NtZC0+aGRyLmNtZCksCi0JCSAgICAgb3V0X2NtZC0+aGRyLmNtZCwgbGUxNl90b19jcHUob3V0X2NtZC0+aGRyLnNlcXVlbmNlKSwKLQkJICAgICBmaXhfc2l6ZSwgcS0+d3JpdGVfcHRyLCBpZHgsIElXTF9DTURfUVVFVUVfTlVNKTsKLQotCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCi0JLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwotCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwotCXJldCA9IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldCA/IHJldCA6IGlkeDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfY21kX2FzeW5jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0JaW50IHJldDsKLQotCUJVR19PTighKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykpOwotCi0JLyogQW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBleHBlY3QgYW4gU0tCIHRvIGJlIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKTsKLQotCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIE1VU1QgaGF2ZSBhIGNhbGxiYWNrLiAqLwotCUJVR19PTighY21kLT5tZXRhLnUuY2FsbGJhY2spOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0ID0gaXdsMzk0NV9lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGl3bDM5NDVfZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfY21kX3N5bmMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCkKLXsKLQlpbnQgY21kX2lkeDsKLQlpbnQgcmV0OwotCi0JQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQyk7Ci0KLQkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZXRfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKQotCQljbWQtPm1ldGEuc291cmNlID0gJmNtZC0+bWV0YTsKLQotCWNtZF9pZHggPSBpd2wzOTQ1X2VucXVldWVfaGNtZChwcml2LCBjbWQpOwotCWlmIChjbWRfaWR4IDwgMCkgewotCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGl3bDM5NDVfZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCi0JCQkhdGVzdF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSwKLQkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7Ci0JaWYgKCFyZXQpIHsKLQkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7Ci0KLQkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gY2FuY2VsOwotCQl9Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKLQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FQ0FOQ0VMRUQ7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgZmFpbGVkOiBGVyBFcnJvclxuIiwKLQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPm1ldGEudS5za2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAnJXMnXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gY2FuY2VsOwotCX0KLQotCXJldCA9IDA7Ci0JZ290byBvdXQ7Ci0KLWNhbmNlbDoKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCXN0cnVjdCBpd2wzOTQ1X2NtZCAqcWNtZDsKLQotCQkvKiBDYW5jZWwgdGhlIENNRF9XQU5UX1NLQiBmbGFnIGZvciB0aGUgY21kIGluIHRoZQotCQkgKiBUWCBjbWQgcXVldWUuIE90aGVyd2lzZSBpbiBjYXNlIHRoZSBjbWQgY29tZXMKLQkJICogaW4gbGF0ZXIsIGl0IHdpbGwgcG9zc2libHkgc2V0IGFuIGludmFsaWQKLQkJICogYWRkcmVzcyAoY21kLT5tZXRhLnNvdXJjZSkuICovCi0JCXFjbWQgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5jbWRbY21kX2lkeF07Ci0JCXFjbWQtPm1ldGEuZmxhZ3MgJj0gfkNNRF9XQU5UX1NLQjsKLQl9Ci1mYWlsOgotCWlmIChjbWQtPm1ldGEudS5za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5tZXRhLnUuc2tiKTsKLQkJY21kLT5tZXRhLnUuc2tiID0gTlVMTDsKLQl9Ci1vdXQ6Ci0JY2xlYXJfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpCi0JCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsIGNtZCk7Ci19Ci0KLWludCBpd2wzOTQ1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IGlkLAotCQkubGVuID0gbGVuLAotCQkuZGF0YSA9IGRhdGEsCi0JfTsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWRfdTMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGlkLCB1MzIgdmFsKQotewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gaWQsCi0JCS5sZW4gPSBzaXplb2YodmFsKSwKLQkJLmRhdGEgPSAmdmFsLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3UzMihwcml2LCBSRVBMWV9TVEFUSVNUSUNTX0NNRCwgMCk7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsIC0gU2V0IHRoZSBwaHltb2RlIGFuZCBjaGFubmVsIHZhbHVlcyBpbiBzdGFnaW5nIFJYT04KLSAqIEBiYW5kOiAyLjQgb3IgNSBHSHogYmFuZAotICogQGNoYW5uZWw6IEFueSBjaGFubmVsIHZhbGlkIGZvciB0aGUgcmVxdWVzdGVkIGJhbmQKLQotICogSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgc3RhZ2luZyBSWE9OLCBwcml2LT5iYW5kIGlzIGFsc28gc2V0LgotICoKLSAqIE5PVEU6ICBEb2VzIG5vdCBjb21taXQgdG8gdGhlIGhhcmR3YXJlOyBpdCBzZXRzIGFwcHJvcHJpYXRlIGJpdCBmaWVsZHMKLSAqIGluIHRoZSBzdGFnaW5nIFJYT04gZmxhZyBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIGJhbmQKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgICB1MTYgY2hhbm5lbCkKLXsKLQlpZiAoIWl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCi0JCQkgICAgICAgY2hhbm5lbCwgYmFuZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpID09IGNoYW5uZWwpICYmCi0JICAgIChwcml2LT5iYW5kID09IGJhbmQpKQotCQlyZXR1cm4gMDsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCi0JcHJpdi0+YmFuZCA9IGJhbmQ7Ci0KLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQgLSB2YWxpZGF0ZSBSWE9OIHN0cnVjdHVyZSBpcyB2YWxpZAotICoKLSAqIE5PVEU6ICBUaGlzIGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIGNhbiBldmVudHVhbGx5Ci0gKiBiZSAjaWZkZWYnZCBvdXQgb25jZSB0aGUgZHJpdmVyIGlzIHN0YWJsZSBhbmQgZm9sa3MgYXJlbid0IGFjdGl2ZWx5Ci0gKiBtYWtpbmcgY2hhbmdlcwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnJ4b24pCi17Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgY291bnRlciA9IDE7Ci0KLQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJgotCQkJCShSWE9OX0ZMR19UR0pfTkFSUk9XX0JBTkRfTVNLIHwKLQkJCQkgUlhPTl9GTEdfUkFEQVJfREVURUNUX01TSykpOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgMjRHIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9IGVsc2UgewotCQllcnJvciB8PSAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPwotCQkJCTAgOiBsZTMyX3RvX2NwdShSWE9OX0ZMR19TSE9SVF9TTE9UX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBDQ0sgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfQotCWVycm9yIHw9IChyeG9uLT5ub2RlX2FkZHJbMF0gfCByeG9uLT5ic3NpZF9hZGRyWzBdKSAmIDB4MTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBtYWMgYWRkciAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwotCWVycm9yIHw9ICgoKHJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV82TV9NQVNLKSA9PSAwKSAmJgotCQkgICgocnhvbi0+Y2NrX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfMU1fTUFTSykgPT0gMCkpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGJhc2ljIHJhdGUgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAobGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpID4gMjAwNyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYXNzb2MgaWQgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLIGFuZCBzaG9ydCBzbG90ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgJiBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfAotCQkJUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBUR0cgYW5kIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfRElTX0RJVl9NU0spKQotCQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FOVF9CX01TSyB8Ci0JCQkJUlhPTl9GTEdfQU5UX0FfTVNLKSkgPT0gMCk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYW50ZW5uYSAlZCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJUdW5pbmcgdG8gY2hhbm5lbCAlZFxuIiwKLQkJCSAgICBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0KLQlpZiAoZXJyb3IpIHsKLQkJSVdMX0VSUk9SKCJOb3QgYSB2YWxpZCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIGZpZWxkIHZhbHVlc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKLSAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KLSAqCi0gKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKLSAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAotICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KLQlpZiAoIShpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ub2RlX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLndsYXBfYnNzaWRfYWRkcikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSAhPSBwcml2LT5hY3RpdmVfcnhvbi5kZXZfdHlwZSkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsICE9IHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYWlyX3Byb3BhZ2F0aW9uICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5haXJfcHJvcGFnYXRpb24pIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgIT0gcHJpdi0+YWN0aXZlX3J4b24uYXNzb2NfaWQpKQotCQlyZXR1cm4gMTsKLQotCS8qIGZsYWdzLCBmaWx0ZXJfZmxhZ3MsIG9mZG1fYmFzaWNfcmF0ZXMsIGFuZCBjY2tfYmFzaWNfcmF0ZXMgY2FuCi0JICogYmUgdXBkYXRlZCB3aXRoIHRoZSBSWE9OX0FTU09DIGNvbW1hbmQgLS0gaG93ZXZlciBvbmx5IHNvbWUKLQkgKiBmbGFnIHRyYW5zaXRpb25zIGFyZSBhbGxvd2VkIHVzaW5nIFJYT05fQVNTT0MgKi8KLQotCS8qIENoZWNrIGlmIHdlIGFyZSBub3Qgc3dpdGNoaW5nIGJhbmRzICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICE9Ci0JICAgIChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykpCi0JCXJldHVybiAxOwotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIHN3aXRjaGluZyBhc3NvY2lhdGlvbiB0b2dnbGUgKi8KLQlpZiAoKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spICE9Ci0JCShwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfUlhPTl9BU1NPQywKIAkJLmxlbiA9IHNpemVvZihyeG9uX2Fzc29jKSwKIAkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCiAJCS5kYXRhID0gJnJ4b25fYXNzb2MsCiAJfTsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uMiA9ICZwcml2LT5hY3RpdmVfcnhvbjsKKwljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjIgPSAmcHJpdi0+YWN0aXZlX3J4b247CiAKIAlpZiAoKHJ4b24xLT5mbGFncyA9PSByeG9uMi0+ZmxhZ3MpICYmCiAJICAgIChyeG9uMS0+ZmlsdGVyX2ZsYWdzID09IHJ4b24yLT5maWx0ZXJfZmxhZ3MpICYmCiAJICAgIChyeG9uMS0+Y2NrX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5jY2tfYmFzaWNfcmF0ZXMpICYmCiAJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05OTQsMTMgKzI2MSwxMyBAQAogCXJ4b25fYXNzb2MuY2NrX2Jhc2ljX3JhdGVzID0gcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlczsKIAlyeG9uX2Fzc29jLnJlc2VydmVkID0gMDsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYT05fQVNTT0MgY29tbWFuZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWE9OX0FTU09DIGNvbW1hbmRcbiIpOwogCQlyYyA9IC1FSU87CiAJfQogCkBAIC0xMDExLDYgKzI3OCw0MyBAQAogfQogCiAvKioKKyAqIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MgLSBHZXQgYW50ZW5uYSBmbGFncyBmb3IgUlhPTiBjb21tYW5kCisgKiBAcHJpdjogZWVwcm9tIGFuZCBhbnRlbm5hIGZpZWxkcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgYW50ZW5uYSBmbGFncworICoKKyAqIHByaXYtPmVlcHJvbTM5ICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAorICogaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEgc3BlY2lmaWVzIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBtb2RlOgorICoKKyAqIElXTF9BTlRFTk5BX0RJVkVSU0lUWSAtIE5JQyBzZWxlY3RzIGJlc3QgYW50ZW5uYSBieSBpdHNlbGYKKyAqIElXTF9BTlRFTk5BX01BSU4gICAgICAtIEZvcmNlIE1BSU4gYW50ZW5uYQorICogSVdMX0FOVEVOTkFfQVVYICAgICAgIC0gRm9yY2UgQVVYIGFudGVubmEKKyAqLworX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKworCXN3aXRjaCAoaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEpIHsKKwljYXNlIElXTF9BTlRFTk5BX0RJVkVSU0lUWToKKwkJcmV0dXJuIDA7CisKKwljYXNlIElXTF9BTlRFTk5BX01BSU46CisJCWlmIChlZXByb20tPmFudGVubmFfc3dpdGNoX3R5cGUpCisJCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7CisJCXJldHVybiBSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9BX01TSzsKKworCWNhc2UgSVdMX0FOVEVOTkFfQVVYOgorCQlpZiAoZWVwcm9tLT5hbnRlbm5hX3N3aXRjaF90eXBlKQorCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOworCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7CisJfQorCisJLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KKwlJV0xfRVJSKHByaXYsICJCYWQgYW50ZW5uYSBzZWxlY3RvciB2YWx1ZSAoMHgleClcbiIsCisJCWl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKTsKKworCXJldHVybiAwOwkJLyogImRpdmVyc2l0eSIgaXMgZGVmYXVsdCBpZiBlcnJvciAqLworfQorCisvKioKICAqIGl3bDM5NDVfY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgogICogVGhlIFJYT04gY29tbWFuZCBpbiBzdGFnaW5nX3J4b24gaXMgY29tbWl0dGVkIHRvIHRoZSBoYXJkd2FyZSBhbmQKQEAgLTEwMTgsNDEgKzMyMiw0NCBAQAogICogZnVuY3Rpb24gY29ycmVjdGx5IHRyYW5zaXRpb25zIG91dCBvZiB0aGUgUlhPTl9BU1NPQ19NU0sgc3RhdGUgaWYKICAqIGEgSFcgdHVuZSBpcyByZXF1aXJlZCBiYXNlZCBvbiB0aGUgUlhPTiBzdHJ1Y3R1cmUgY2hhbmdlcy4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIGNhc3QgYXdheSB0aGUgY29uc3QgZm9yIGFjdGl2ZV9yeG9uIGluIHRoaXMgZnVuY3Rpb24gKi8KIAlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqc3RhZ2luZ19yeG9uID0gKHZvaWQgKikmcHJpdi0+c3RhZ2luZ19yeG9uOwogCWludCByYyA9IDA7CisJYm9vbCBuZXdfYXNzb2MgPQorCQkhIShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKTsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC0xOwogCiAJLyogYWx3YXlzIGdldCB0aW1lc3RhbXAgd2l0aCBSeCBmcmFtZSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CisJc3RhZ2luZ19yeG9uLT5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CiAKIAkvKiBzZWxlY3QgYW50ZW5uYSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQorCXN0YWdpbmdfcnhvbi0+ZmxhZ3MgJj0KIAkgICAgfihSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9TRUxfTVNLKTsKLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhwcml2KTsKKwlzdGFnaW5nX3J4b24tPmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CiAKLQlyYyA9IGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmMgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gIE5vdCBjb21taXR0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIElmIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBhIGZ1bGwgUlhPTiwgd2UgY2FuIHVzZQogCSAqIGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgd2hpY2ggaXMgdXNlZCB0byByZWNvbmZpZ3VyZSBmaWx0ZXIKIAkgKiBhbmQgb3RoZXIgZmxhZ3MgZm9yIHRoZSBjdXJyZW50IHJhZGlvIGNvbmZpZ3VyYXRpb24uICovCi0JaWYgKCFpd2wzOTQ1X2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgeworCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewogCQlyYyA9IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICIKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAKLQkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJCW1lbWNweShhY3RpdmVfcnhvbiwgc3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA2MSwxMiArMzY4LDE3IEBACiAJICogYW4gUlhPTl9BU1NPQyBhbmQgdGhlIG5ldyBjb25maWcgd2FudHMgdGhlIGFzc29jaWF0ZWQgbWFzayBlbmFibGVkLAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkgewotCQlJV0xfREVCVUdfSU5GTygiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOwogCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAorCQkvKgorCQkgKiByZXNlcnZlZDQgYW5kIDUgY291bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgaXdsY29yZSBjb2RlLgorCQkgKiBMZXQncyBjbGVhciB0aGVtIGJlZm9yZSBwdXNoaW5nIHRvIHRoZSAzOTQ1LgorCQkgKi8KKwkJYWN0aXZlX3J4b24tPnJlc2VydmVkNCA9IDA7CisJCWFjdGl2ZV9yeG9uLT5yZXNlcnZlZDUgPSAwOworCQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKIAkJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLAogCQkJCSAgICAgICZwcml2LT5hY3RpdmVfcnhvbik7CiAKQEAgLTEwNzQsMjkwICszODYsMjEzIEBACiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwogCQlpZiAocmMpIHsKIAkJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCQkJSVdMX0VSUk9SKCJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gY3VycmVudCAiCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gY3VycmVudCAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlNlbmRpbmcgUlhPTlxuIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZW5kaW5nIFJYT05cbiIKIAkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKIAkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgogCQkgICAgICAgIiogYnNzaWQgPSAlcE1cbiIsCi0JCSAgICAgICAoKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJgotCQkJIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAiIiA6ICJvdXQiKSwKLQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSwKLQkJICAgICAgIHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyKTsKKwkJICAgICAgIChuZXdfYXNzb2MgPyAiIiA6ICJvdXQiKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KHN0YWdpbmdfcnhvbi0+Y2hhbm5lbCksCisJCSAgICAgICBzdGFnaW5nX3J4b24tPmJzc2lkX2FkZHIpOworCisJLyoKKwkgKiByZXNlcnZlZDQgYW5kIDUgY291bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgaXdsY29yZSBjb2RlLgorCSAqIExldCdzIGNsZWFyIHRoZW0gYmVmb3JlIHB1c2hpbmcgdG8gdGhlIDM5NDUuCisJICovCisJc3RhZ2luZ19yeG9uLT5yZXNlcnZlZDQgPSAwOworCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ1ID0gMDsKKworCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCksCisJCQkgICAgICBzdGFnaW5nX3J4b24pOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJbWVtY3B5KGFjdGl2ZV9yeG9uLCBzdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKIAogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwotCXJjID0gaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOworCXJjID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcihwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFR4IHBvd2VyICglZCkuXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgVHggcG93ZXIgKCVkKS5cbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIEFkZCB0aGUgYnJvYWRjYXN0IGFkZHJlc3Mgc28gd2UgY2FuIHNlbmQgYnJvYWRjYXN0IGZyYW1lcyAqLwotCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIDAsIDApID09CisJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDAsIDApID09CiAJICAgIElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogSWYgd2UgaGF2ZSBzZXQgdGhlIEFTU09DX01TSyBhbmQgd2UgYXJlIGluIEJTUyBtb2RlIHRoZW4KIAkgKiBhZGQgdGhlIElXTF9BUF9JRCB0byB0aGUgc3RhdGlvbiByYXRlIHRhYmxlICovCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJgorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJgogCSAgICAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKLQkJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwgMSwgMCkKKwkJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwKKwkJCQkJMSwgMCkKIAkJICAgID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgdHJhbnNtaXRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCS8qIEluaXQgdGhlIGhhcmR3YXJlJ3MgcmF0ZSBmYWxsYmFjayBvcmRlciBiYXNlZCBvbiB0aGUgYmFuZCAqLwogCXJjID0gaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBIVyByYXRlIHRhYmxlOiAlMDJYXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgSFcgcmF0ZSB0YWJsZTogJTAyWFxuIiwgcmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bDM5NDVfYnRfY21kIGJ0X2NtZCA9IHsKLQkJLmZsYWdzID0gMywKLQkJLmxlYWRfdGltZSA9IDB4QUEsCi0JCS5tYXhfa2lsbCA9IDEsCi0JCS5raWxsX2Fja19tYXNrID0gMCwKLQkJLmtpbGxfY3RzX21hc2sgPSAwLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9idF9jbWQpLCAmYnRfY21kKTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXM7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9TQ0FOX0FCT1JUX0NNRCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCi0JfTsKLQotCS8qIElmIHRoZXJlIGlzbid0IGEgc2NhbiBhY3RpdmVseSBnb2luZyBvbiBpbiB0aGUgaGFyZHdhcmUKLQkgKiB0aGVuIHdlIGFyZSBpbiBiZXR3ZWVuIHNjYW4gYmFuZHMgYW5kIG5vdCBhY3R1YWxseQotCSAqIGFjdGl2ZWx5IHNjYW5uaW5nLCBzbyBkb24ndCBzZW5kIHRoZSBhYm9ydCBjb21tYW5kICovCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci0JaWYgKHJjKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7Ci0JaWYgKHJlcy0+dS5zdGF0dXMgIT0gQ0FOX0FCT1JUX1NUQVRVUykgewotCQkvKiBUaGUgc2NhbiBhYm9ydCB3aWxsIHJldHVybiAxIGZvciBzdWNjZXNzIG9yCi0JCSAqIDIgZm9yICJmYWlsdXJlIi4gIEEgZmFpbHVyZSBjb25kaXRpb24gY2FuIGJlCi0JCSAqIGR1ZSB0byBzaW1wbHkgbm90IGJlaW5nIGluIGFuIGFjdGl2ZSBzY2FuIHdoaWNoCi0JCSAqIGNhbiBvY2N1ciBpZiB3ZSBzZW5kIHRoZSBzY2FuIGFib3J0IGJlZm9yZSB3ZQotCQkgKiB0aGUgbWljcm9jb2RlIGhhcyBub3RpZmllZCB1cyB0aGF0IGEgc2NhbiBpcwotCQkgKiBjb21wbGV0ZWQuICovCi0JCUlXTF9ERUJVR19JTkZPKCJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfY2FyZF9zdGF0ZV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCXN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAxOwotfQotCi0vKgotICogQ0FSRF9TVEFURV9DTUQKLSAqCi0gKiBVc2U6IFNldHMgdGhlIGRldmljZSdzIGludGVybmFsIGNhcmQgc3RhdGUgdG8gZW5hYmxlLCBkaXNhYmxlLCBvciBoYWx0Ci0gKgotICogV2hlbiBpbiB0aGUgJ2VuYWJsZScgc3RhdGUgdGhlIGNhcmQgb3BlcmF0ZXMgYXMgbm9ybWFsLgotICogV2hlbiBpbiB0aGUgJ2Rpc2FibGUnIHN0YXRlLCB0aGUgY2FyZCBlbnRlcnMgaW50byBhIGxvdyBwb3dlciBtb2RlLgotICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKLSAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGZsYWdzLCB1OCBtZXRhX2ZsYWcpCi17Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9DQVJEX1NUQVRFX0NNRCwKLQkJLmxlbiA9IHNpemVvZih1MzIpLAotCQkuZGF0YSA9ICZmbGFncywKLQkJLm1ldGEuZmxhZ3MgPSBtZXRhX2ZsYWcsCi0JfTsKLQotCWlmIChtZXRhX2ZsYWcgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2NhcmRfc3RhdGVfc3luY19jYWxsYmFjazsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kKHByaXYsICZjbWQpOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7Ci0KLQlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKLQlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcmVzLT5oZHIuZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewotCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyogV2UgZGlkbid0IGNhY2hlIHRoZSBTS0I7IGxldCB0aGUgY2FsbGVyIGZyZWUgaXQgKi8KLQlyZXR1cm4gMTsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJIHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9BRERfU1RBLAotCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQpLAotCQkubWV0YS5mbGFncyA9IGZsYWdzLAotCQkuZGF0YSA9IHN0YSwKLQl9OwotCi0JaWYgKGZsYWdzICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsMzk0NV9hZGRfc3RhX3N5bmNfY2FsbGJhY2s7Ci0JZWxzZQotCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7Ci0KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7Ci0KLQlpZiAocmMgfHwgKGZsYWdzICYgQ01EX0FTWU5DKSkKLQkJcmV0dXJuIHJjOwotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAotCQkJICByZXMtPmhkci5mbGFncyk7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlpZiAocmMgPT0gMCkgewotCQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewotCQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyYyA9IC1FSU87Ci0JCQlJV0xfV0FSTklORygiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfdXBkYXRlX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCiAJCQkJICAgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2IGtleV9mbGFncyA9IDA7CisJaW50IHJldDsKIAotCXN3aXRjaCAoa2V5Y29uZi0+YWxnKSB7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfRkxHX0NDTVA7Ci0JCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNigKLQkJCQlrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKLQkJa2V5X2ZsYWdzICY9IH5TVEFfS0VZX0ZMR19JTlZBTElEOwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCWNhc2UgQUxHX1dFUDoKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19DQ01QIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKworCWlmIChzdGFfaWQgPT0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCkKKwkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfTVVMVElDQVNUX01TSzsKKworCWtleWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwlrZXljb25mLT5od19rZXlfaWR4ID0ga2V5Y29uZi0+a2V5aWR4OworCWtleV9mbGFncyAmPSB+U1RBX0tFWV9GTEdfSU5WQUxJRDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKLQltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LAorCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOwogCi0JbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXksIGtleWNvbmYtPmtleSwKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKworCWlmICgocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyAmIFNUQV9LRVlfRkxHX0VOQ1JZUFRfTVNLKQorCQkJPT0gU1RBX0tFWV9GTEdfTk9fRU5DKQorCQlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9CisJCQkJIGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgocHJpdik7CisJLyogZWxzZSwgd2UgYXJlIG92ZXJyaWRpbmcgYW4gZXhpc3Rpbmcga2V5ID0+IG5vIG5lZWQgdG8gYWxsb2NhdGVkIHJvb20KKwkqIGluIHVDb2RlLiAqLworCisJV0FSTihwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CisKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiaHdjcnlwdG86IG1vZGlmeSB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKKworCXJldCA9IGl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiaHdjcnlwdG86IG1vZGlmeSB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICB1OCBzdGFfaWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICB1OCBzdGFfaWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2h3X2tleSkpOwotCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfa2V5aW5mbykpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2h3X2tleSkpOworCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LCAwLAorCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfa2V5aW5mbykpOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiaHdjcnlwdG86IGNsZWFyIHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgdTggc3RhX2lkKQoreworCWludCByZXQgPSAwOworCisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IEhXX0tFWV9EWU5BTUlDOworCisJc3dpdGNoIChrZXljb25mLT5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlyZXQgPSBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfVEtJUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1dFUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUihwcml2LCAiVW5rbm93biBhbGc6ICVzIGFsZyA9ICVkXG4iLCBfX2Z1bmNfXywga2V5Y29uZi0+YWxnKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlJV0xfREVCVUdfV0VQKHByaXYsICJTZXQgZHluYW1pYyBrZXk6IGFsZz0gJWQgbGVuPSVkIGlkeD0lZCBzdGE9JWQgcmV0PSVkXG4iLAorCQkgICAgICBrZXljb25mLT5hbGcsIGtleWNvbmYtPmtleWxlbiwga2V5Y29uZi0+a2V5aWR4LAorCQkgICAgICBzdGFfaWQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfcmVtb3ZlX3N0YXRpY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfc3RhdGljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCWlmIChrZXktPmFsZyA9PSBBTEdfV0VQKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlJV0xfRVJSKHByaXYsICJTdGF0aWMga2V5IGludmFsaWQ6IGFsZyAlZFxuIiwga2V5LT5hbGcpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCi0JSVdMX0RFQlVHX0lORk8oIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlZCBmcmFtZXMgb24gcHJlLWFsbG9jYXRlZCBoZWFwIG9uIGNsZWFyLlxuIiwKIAkJICAgICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewpAQCAtMTM2OCwyMCArNjAzLDIwIEBACiAJfQogCiAJaWYgKHByaXYtPmZyYW1lc19jb3VudCkgewotCQlJV0xfV0FSTklORygiJWQgZnJhbWVzIHN0aWxsIGluIHVzZS4gIERpZCB3ZSBsb3NlIG9uZT9cbiIsCisJCUlXTF9XQVJOKHByaXYsICIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKIAkJCSAgICBwcml2LT5mcmFtZXNfY291bnQpOwogCQlwcml2LT5mcmFtZXNfY291bnQgPSAwOwogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICppd2wzOTQ1X2dldF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgc3RydWN0IGl3bDM5NDVfZnJhbWUgKml3bDM5NDVfZ2V0X2ZyZWVfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCWlmIChsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKIAkJZnJhbWUgPSBremFsbG9jKHNpemVvZigqZnJhbWUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFmcmFtZSkgewotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgZnJhbWUhXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMTM5NCwxOCArNjI5LDE4IEBACiAJcmV0dXJuIGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDM5NDVfZnJhbWUsIGxpc3QpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2ZyZWVfZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lKQorc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lKQogewogCW1lbXNldChmcmFtZSwgMCwgc2l6ZW9mKCpmcmFtZSkpOwogCWxpc3RfYWRkKCZmcmFtZS0+bGlzdCwgJnByaXYtPmZyZWVfZnJhbWVzKTsKIH0KIAotdW5zaWduZWQgaW50IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3Vuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCWludCBsZWZ0KQogewogCi0JaWYgKCFpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgfHwgIXByaXYtPmlic3NfYmVhY29uIHx8CisJaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fCAhcHJpdi0+aWJzc19iZWFjb24gfHwKIAkgICAgKChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgogCSAgICAgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApKSkKIAkJcmV0dXJuIDA7CkBAIC0xNDE4LDMxICs2NTMsNyBAQAogCXJldHVybiBwcml2LT5pYnNzX2JlYWNvbi0+bGVuOwogfQogCi1zdGF0aWMgdTggaXdsMzk0NV9yYXRlX2dldF9sb3dlc3RfcGxjcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXU4IGk7Ci0JaW50IHJhdGVfbWFzazsKLQotCS8qIFNldCByYXRlIG1hc2sqLwotCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCi0JCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19SQVRFU19NQVNLOwotCWVsc2UKLQkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9SQVRFU19NQVNLOwotCi0JZm9yIChpID0gSVdMX1JBVEVfMU1fSU5ERVg7IGkgIT0gSVdMX1JBVEVfSU5WQUxJRDsKLQkgICAgIGkgPSBpd2wzOTQ1X3JhdGVzW2ldLm5leHRfaWVlZSkgewotCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgaSkpCi0JCQlyZXR1cm4gaXdsMzk0NV9yYXRlc1tpXS5wbGNwOwotCX0KLQotCS8qIE5vIHZhbGlkIHJhdGUgd2FzIGZvdW5kLiBBc3NpZ24gdGhlIGxvd2VzdCBvbmUgKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyZXR1cm4gSVdMX1JBVEVfMU1fUExDUDsKLQllbHNlCi0JCXJldHVybiBJV0xfUkFURV82TV9QTENQOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWU7CiAJdW5zaWduZWQgaW50IGZyYW1lX3NpemU7CkBAIC0xNDUyLDE2ICs2NjMsMTYgQEAKIAlmcmFtZSA9IGl3bDM5NDVfZ2V0X2ZyZWVfZnJhbWUocHJpdik7CiAKIAlpZiAoIWZyYW1lKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IG9idGFpbiBmcmVlIGZyYW1lIGJ1ZmZlciBmb3IgYmVhY29uICIKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IG9idGFpbiBmcmVlIGZyYW1lIGJ1ZmZlciBmb3IgYmVhY29uICIKIAkJCSAgImNvbW1hbmQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmF0ZSA9IGl3bDM5NDVfcmF0ZV9nZXRfbG93ZXN0X3BsY3AocHJpdik7CisJcmF0ZSA9IGl3bF9yYXRlX2dldF9sb3dlc3RfcGxjcChwcml2KTsKIAogCWZyYW1lX3NpemUgPSBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHByaXYsIGZyYW1lLCByYXRlKTsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfQkVBQ09OLCBmcmFtZV9zaXplLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9CRUFDT04sIGZyYW1lX3NpemUsCiAJCQkgICAgICAmZnJhbWUtPnUuY21kWzBdKTsKIAogCWl3bDM5NDVfZnJlZV9mcmFtZShwcml2LCBmcmFtZSk7CkBAIC0xNDY5LDU2NiArNjgwLDE3IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRUVQUk9NIHJlbGF0ZWQgZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgZ2V0X2VlcHJvbV9tYWMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggKm1hYykKK3N0YXRpYyB2b2lkIGl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQltZW1jcHkobWFjLCBwcml2LT5lZXByb20ubWFjX2FkZHJlc3MsIDYpOwotfQotCi0vKgotICogQ2xlYXIgdGhlIE9XTkVSX01TSywgdG8gZXN0YWJsaXNoIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSBydW5uaW5nIG9uCi0gKiBlbWJlZGRlZCBjb250cm9sbGVyKSBhcyBFRVBST00gcmVhZGVyOyBlYWNoIHJlYWQgaXMgYSBzZXJpZXMgb2YgcHVsc2VzCi0gKiB0by9mcm9tIHRoZSBFRVBST00gY2hpcCwgbm90IGEgc2luZ2xlIGV2ZW50LCBzbyBldmVuIHJlYWRzIGNvdWxkIGNvbmZsaWN0Ci0gKiBpZiB0aGV5IHdlcmVuJ3QgYXJiaXRyYXRlZCBieSBzb21lIG93bmVyc2hpcCBtZWNoYW5pc20uICBIZXJlLCB0aGUgZHJpdmVyCi0gKiBzaW1wbHkgY2xhaW1zIG93bmVyc2hpcCwgd2hpY2ggc2hvdWxkIGJlIHNhZmUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAotICogKGkuZS4gYmVmb3JlIGxvYWRpbmcgdUNvZGUhKS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlfaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9HUCwgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0spOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfZWVwcm9tX2luaXQgLSByZWFkIEVFUFJPTSBjb250ZW50cwotICoKLSAqIExvYWQgdGhlIEVFUFJPTSBjb250ZW50cyBmcm9tIGFkYXB0ZXIgaW50byBwcml2LT5lZXByb20KLSAqCi0gKiBOT1RFOiAgVGhpcyByb3V0aW5lIHVzZXMgdGhlIG5vbi1kZWJ1ZyBJTyBhY2Nlc3MgZnVuY3Rpb25zLgotICovCi1pbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXUxNiAqZSA9ICh1MTYgKikmcHJpdi0+ZWVwcm9tOwotCXUzMiBncCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwotCWludCBzeiA9IHNpemVvZihwcml2LT5lZXByb20pOwotCWludCByZXQ7Ci0JdTE2IGFkZHI7Ci0KLQkvKiBUaGUgRUVQUk9NIHN0cnVjdHVyZSBoYXMgc2V2ZXJhbCBwYWRkaW5nIGJ1ZmZlcnMgd2l0aGluIGl0Ci0JICogYW5kIHdoZW4gYWRkaW5nIG5ldyBFRVBST00gbWFwcyBpcyBzdWJqZWN0IHRvIHByb2dyYW1tZXIgZXJyb3JzCi0JICogd2hpY2ggbWF5IGJlIHZlcnkgZGlmZmljdWx0IHRvIGlkZW50aWZ5IHdpdGhvdXQgZXhwbGljaXRseQotCSAqIGNoZWNraW5nIHRoZSByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZWVwcm9tIG1hcC4gKi8KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmVlcHJvbSkgIT0gSVdMX0VFUFJPTV9JTUFHRV9TSVpFKTsKLQotCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQkvKiBNYWtlIHN1cmUgZHJpdmVyIChpbnN0ZWFkIG9mIHVDb2RlKSBpcyBhbGxvd2VkIHRvIHJlYWQgRUVQUk9NICovCi0JcmV0ID0gaXdsMzk0NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUocHJpdik7Ci0JaWYgKHJldCA8IDApIHsKLQkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCS8qIGVlcHJvbSBpcyBhbiBhcnJheSBvZiAxNmJpdCB2YWx1ZXMgKi8KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc3o7IGFkZHIgKz0gc2l6ZW9mKHUxNikpIHsKLQkJdTMyIHI7Ci0KLQkJX2l3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkgQ1NSX0VFUFJPTV9SRUdfTVNLX0FERFIgJiAoYWRkciA8PCAxKSk7Ci0JCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfRUVQUk9NX1JFRywgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRCk7Ci0JCXJldCA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAotCQkJCQkgICAgICBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSywKLQkJCQkJICAgICAgSVdMX0VFUFJPTV9BQ0NFU1NfVElNRU9VVCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlJV0xfRVJST1IoIlRpbWUgb3V0IHJlYWRpbmcgRUVQUk9NWyVkXVxuIiwgYWRkcik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJciA9IF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgQ1NSX0VFUFJPTV9SRUcpOwotCQllW2FkZHIgLyAyXSA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikociA+PiAxNikpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3Vuc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpZiAocHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCkKKwlpZiAocHJpdi0+c2hhcmVkX3ZpcnQpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCksCi0JCQkJICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQsCi0JCQkJICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc3VwcG9ydGVkX3JhdGVfdG9faWUgLSBmaWxsIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZSBpbiBJRSBmaWVsZAotICoKLSAqIHJldHVybiA6IHNldCB0aGUgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByYXRlIGluc2VydCBpbiBpZQotICovCi1zdGF0aWMgdTE2IGl3bDM5NDVfc3VwcG9ydGVkX3JhdGVfdG9faWUodTggKmllLCB1MTYgc3VwcG9ydGVkX3JhdGUsCi0JCQkJICAgIHUxNiBiYXNpY19yYXRlLCBpbnQgKmxlZnQpCi17Ci0JdTE2IHJldF9yYXRlcyA9IDAsIGJpdDsKLQlpbnQgaTsKLQl1OCAqY250ID0gaWU7Ci0JdTggKnJhdGVzID0gaWUgKyAxOwotCi0JZm9yIChiaXQgPSAxLCBpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyssIGJpdCA8PD0gMSkgewotCQlpZiAoYml0ICYgc3VwcG9ydGVkX3JhdGUpIHsKLQkJCXJldF9yYXRlcyB8PSBiaXQ7Ci0JCQlyYXRlc1sqY250XSA9IGl3bDM5NDVfcmF0ZXNbaV0uaWVlZSB8Ci0JCQkJKChiaXQgJiBiYXNpY19yYXRlKSA/IDB4ODAgOiAweDAwKTsKLQkJCSgqY250KSsrOwotCQkJKCpsZWZ0KS0tOwotCQkJaWYgKCgqbGVmdCA8PSAwKSB8fAotCQkJICAgICgqY250ID49IElXTF9TVVBQT1JURURfUkFURVNfSUVfTEVOKSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiByZXRfcmF0ZXM7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9maWxsX3Byb2JlX3JlcSAtIGZpbGwgaW4gYWxsIHJlcXVpcmVkIGZpZWxkcyBhbmQgSUUgZm9yIHByb2JlIHJlcXVlc3QKLSAqLwotc3RhdGljIHUxNiBpd2wzOTQ1X2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLAotCQkJICAgICAgaW50IGxlZnQpCi17Ci0JaW50IGxlbiA9IDA7Ci0JdTggKnBvcyA9IE5VTEw7Ci0JdTE2IGFjdGl2ZV9yYXRlcywgcmV0X3JhdGVzLCBjY2tfcmF0ZXM7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgcHJvYmUgcmVxdWVzdCwKLQkgKiB0d28gbWFuZGF0b3J5IElFcyBhbmQgdGhlIGRhdGEgKi8KLQlsZWZ0IC09IDI0OwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0JbGVuICs9IDI0OwotCi0JZnJhbWUtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQltZW1jcHkoZnJhbWUtPmRhLCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGZyYW1lLT5zYSwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkoZnJhbWUtPmJzc2lkLCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyLCBFVEhfQUxFTik7Ci0JZnJhbWUtPnNlcV9jdHJsID0gMDsKLQotCS8qIGZpbGwgaW4gb3VyIGluZGlyZWN0IFNTSUQgSUUgKi8KLQkvKiAuLi5uZXh0IElFLi4uICovCi0KLQlsZWZ0IC09IDI7Ci0JaWYgKGxlZnQgPCAwKQotCQlyZXR1cm4gMDsKLQlsZW4gKz0gMjsKLQlwb3MgPSAmKGZyYW1lLT51LnByb2JlX3JlcS52YXJpYWJsZVswXSk7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSAwOwotCi0JLyogZmlsbCBpbiBzdXBwb3J0ZWQgcmF0ZSAqLwotCS8qIC4uLm5leHQgSUUuLi4gKi8KLQlsZWZ0IC09IDI7Ci0JaWYgKGxlZnQgPCAwKQotCQlyZXR1cm4gMDsKLQotCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCi0JKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQkqcG9zID0gMDsKLQotCXByaXYtPmFjdGl2ZV9yYXRlID0gcHJpdi0+cmF0ZXNfbWFzazsKLQlhY3RpdmVfcmF0ZXMgPSBwcml2LT5hY3RpdmVfcmF0ZTsKLQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IHByaXYtPnJhdGVzX21hc2sgJiBJV0xfQkFTSUNfUkFURVNfTUFTSzsKLQotCWNja19yYXRlcyA9IElXTF9DQ0tfUkFURVNfTUFTSyAmIGFjdGl2ZV9yYXRlczsKLQlyZXRfcmF0ZXMgPSBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgY2NrX3JhdGVzLAotCQkJcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMsICZsZWZ0KTsKLQlhY3RpdmVfcmF0ZXMgJj0gfnJldF9yYXRlczsKLQotCXJldF9yYXRlcyA9IGl3bDM5NDVfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBhY3RpdmVfcmF0ZXMsCi0JCQkJIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7Ci0JYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7Ci0KLQlsZW4gKz0gMiArICpwb3M7Ci0JcG9zICs9ICgqcG9zKSArIDE7Ci0JaWYgKGFjdGl2ZV9yYXRlcyA9PSAwKQotCQlnb3RvIGZpbGxfZW5kOwotCi0JLyogZmlsbCBpbiBzdXBwb3J0ZWQgZXh0ZW5kZWQgcmF0ZSAqLwotCS8qIC4uLm5leHQgSUUuLi4gKi8KLQlsZWZ0IC09IDI7Ci0JaWYgKGxlZnQgPCAwKQotCQlyZXR1cm4gMDsKLQkvKiAuLi4gZmlsbCBpdCBpbi4uLiAqLwotCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCSpwb3MgPSAwOwotCWl3bDM5NDVfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBhY3RpdmVfcmF0ZXMsCi0JCQkJIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7Ci0JaWYgKCpwb3MgPiAwKQotCQlsZW4gKz0gMiArICpwb3M7Ci0KLSBmaWxsX2VuZDoKLQlyZXR1cm4gKHUxNilsZW47Ci19Ci0KLS8qCi0gKiBRb1MgIHN1cHBvcnQKLSovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kICpxb3MpCi17Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUU9TX1BBUkFNLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQpLCBxb3MpOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3Jlc2V0X3FvcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXUxNiBjd19taW4gPSAxNTsKLQl1MTYgY3dfbWF4ID0gMTAyMzsKLQl1OCBhaWZzID0gMjsKLQl1OCBpc19sZWdhY3kgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwotCi0JLyogUW9TIGFsd2F5cyBhY3RpdmUgaW4gQVAgYW5kIEFESE9DIG1vZGUKLQkgKiBJbiBTVEEgbW9kZSB3YWl0IGZvciBhc3NvY2lhdGlvbgotCSAqLwotCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8Ci0JICAgIHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAxOwotCWVsc2UKLQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0KLQotCS8qIGNoZWNrIGZvciBsZWdhY3kgbW9kZSAqLwotCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICAgKHByaXYtPmFjdGl2ZV9yYXRlICYgSVdMX09GRE1fUkFURVNfTUFTSykgPT0gMCkgfHwKLQkgICAgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSA9PSAwKSkgewotCQljd19taW4gPSAzMTsKLQkJaXNfbGVnYWN5ID0gMTsKLQl9Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJYWlmcyA9IDM7Ci0KLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uY3dfbWluID0gY3B1X3RvX2xlMTYoY3dfbWluKTsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uY3dfbWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uYWlmc24gPSBhaWZzOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5lZGNhX3R4b3AgPSAwOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5yZXNlcnZlZDEgPSAwOwotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpIHsKLQkJaSA9IDE7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gNzsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9IDA7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCi0JCWkgPSAyOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KLQkJCWNwdV90b19sZTE2KChjd19taW4gKyAxKSAvIDIgLSAxKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9Ci0JCQljcHVfdG9fbGUxNihjd19tYXgpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSAyOwotCQlpZiAoaXNfbGVnYWN5KQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoNjAxNik7Ci0JCWVsc2UKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDMwMDgpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQotCQlpID0gMzsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9Ci0JCQljcHVfdG9fbGUxNigoY3dfbWluICsgMSkgLyA0IC0gMSk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPQotCQkJY3B1X3RvX2xlMTYoKGN3X21heCArIDEpIC8gMiAtIDEpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSAyOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQkJaWYgKGlzX2xlZ2FjeSkKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDMyNjQpOwotCQllbHNlCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNigxNTA0KTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KLQkJCQljcHVfdG9fbGUxNihjd19taW4pOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9Ci0JCQkJY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IGFpZnM7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0gMDsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCQl9Ci0JfQotCUlXTF9ERUJVR19RT1MoInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBmb3JjZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOwotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCi0JICAgICFwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAudHhvcF9yZXF1ZXN0KQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0s7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZm9yY2UgfHwgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19RT1MoInNlbmQgUW9TIGNtZCB3aXRoIFFvUyBhY3RpdmUgJWQgXG4iLAotCQkJICAgICAgcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSk7Ci0KLQkJaXdsMzk0NV9zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChwcml2LAotCQkJCSYocHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtKSk7Ci0JfQotfQotCi0vKgotICogUG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyISkgZnVuY3Rpb25zCi0gKi8KLSNkZWZpbmUgTVNFQ19UT19VU0VDIDEwMjQKLQotI2RlZmluZSBOT1NMUCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApCi0jZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSwotI2RlZmluZSBTTFBfVElNRU9VVChUKSBfX2NvbnN0YW50X2NwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKLSNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKFgwKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMSksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDIpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgzKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYNCl9Ci0KLQotLyogZGVmYXVsdCBwb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHRhYmxlIHZhbHVlcyAqLwotLyogZm9yIFRJTSAgMC0xMCAqLwotc3RhdGljIHN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8wW0lXTF9QT1dFUl9BQ10gPSB7Ci0Je3tOT1NMUCwgU0xQX1RJTUVPVVQoMCksIFNMUF9USU1FT1VUKDApLCBTTFBfVkVDKDAsIDAsIDAsIDAsIDApfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDUwMCksIFNMUF9WRUMoMSwgMiwgMywgNCwgNCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoMzAwKSwgU0xQX1ZFQygyLCA0LCA2LCA3LCA3KX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCg1MCksIFNMUF9USU1FT1VUKDEwMCksIFNMUF9WRUMoMiwgNiwgOSwgOSwgMTApfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVkVDKDIsIDcsIDksIDksIDEwKX0sIDF9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyNSksIFNMUF9USU1FT1VUKDI1KSwgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDEwKX0sIDF9Ci19OwotCi0vKiBmb3IgVElNID4gMTAgKi8KLXN0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcmFuZ2VfMVtJV0xfUE9XRVJfQUNdID0gewotCXt7Tk9TTFAsIFNMUF9USU1FT1VUKDApLCBTTFBfVElNRU9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCg1MDApLAotCQkgU0xQX1ZFQygxLCAyLCAzLCA0LCAweEZGKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCgzMDApLAotCQkgU0xQX1ZFQygyLCA0LCA2LCA3LCAweEZGKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCg1MCksIFNMUF9USU1FT1VUKDEwMCksCi0JCSBTTFBfVkVDKDIsIDYsIDksIDksIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVkVDKDIsIDcsIDksIDksIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDI1KSwgU0xQX1RJTUVPVVQoMjUpLAotCQkgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDB4RkYpfSwgMH0KLX07Ci0KLWludCBpd2wzOTQ1X3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaW50IHJjID0gMCwgaTsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgKnBvd19kYXRhOwotCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSkgKiBJV0xfUE9XRVJfQUM7Ci0JdTE2IHBjaV9wbTsKLQotCUlXTF9ERUJVR19QT1dFUigiSW5pdGlhbGl6ZSBwb3dlciBcbiIpOwotCi0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOwotCi0JbWVtc2V0KHBvd19kYXRhLCAwLCBzaXplb2YoKnBvd19kYXRhKSk7Ci0KLQlwb3dfZGF0YS0+YWN0aXZlX2luZGV4ID0gSVdMX1BPV0VSX1JBTkdFXzA7Ci0JcG93X2RhdGEtPmR0aW1fdmFsID0gMHhmZmZmOwotCi0JbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF0sICZyYW5nZV8wWzBdLCBzaXplKTsKLQltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMVswXSwgJnJhbmdlXzFbMF0sIHNpemUpOwotCi0JcmMgPSBwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfTElOS19DVFJMLCAmcGNpX3BtKTsKLQlpZiAocmMgIT0gMCkKLQkJcmV0dXJuIDA7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kICpjbWQ7Ci0KLQkJSVdMX0RFQlVHX1BPV0VSKCJhZGp1c3QgcG93ZXIgY29tbWFuZCBmbGFnc1xuIik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9BQzsgaSsrKSB7Ci0JCQljbWQgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wW2ldLmNtZDsKLQotCQkJaWYgKHBjaV9wbSAmIDB4MSkKLQkJCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfUENJX1BNX01TSzsKLQkJCWVsc2UKLQkJCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCQl9Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3VwZGF0ZV9wb3dlcl9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCAqY21kLCB1MzIgbW9kZSkKLXsKLQlpbnQgcmMgPSAwLCBpOwotCXU4IHNraXA7Ci0JdTMyIG1heF9zbGVlcCA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5ICpyYW5nZTsKLQl1OCBwZXJpb2QgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX21nciAqcG93X2RhdGE7Ci0KLQlpZiAobW9kZSA+IElXTF9QT1dFUl9JTkRFWF81KSB7Ci0JCUlXTF9ERUJVR19QT1dFUigiRXJyb3IgaW52YWxpZCBwb3dlciBtb2RlIFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOwotCi0JaWYgKHBvd19kYXRhLT5hY3RpdmVfaW5kZXggPT0gSVdMX1BPV0VSX1JBTkdFXzApCi0JCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXTsKLQllbHNlCi0JCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMVsxXTsKLQotCW1lbWNweShjbWQsICZyYW5nZVttb2RlXS5jbWQsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCkpOwotCi0jaWZkZWYgSVdMX01BQzgwMjExX0RJU0FCTEUKLQlpZiAocHJpdi0+YXNzb2NfbmV0d29yayAhPSBOVUxMKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJcGVyaW9kID0gcHJpdi0+YXNzb2NfbmV0d29yay0+dGltLnRpbV9wZXJpb2Q7Ci0JfQotI2VuZGlmCS8qSVdMX01BQzgwMjExX0RJU0FCTEUgKi8KLQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKLQotCWlmIChwZXJpb2QgPT0gMCkgewotCQlwZXJpb2QgPSAxOwotCQlza2lwID0gMDsKLQl9Ci0KLQlpZiAoc2tpcCA9PSAwKSB7Ci0JCW1heF9zbGVlcCA9IHBlcmlvZDsKLQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7Ci0JfSBlbHNlIHsKLQkJX19sZTMyIHNscF9pdHJ2bCA9IGNtZC0+c2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFIC0gMV07Ci0JCW1heF9zbGVlcCA9IChsZTMyX3RvX2NwdShzbHBfaXRydmwpIC8gcGVyaW9kKSAqIHBlcmlvZDsKLQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKLQkJaWYgKGxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0pID4gbWF4X3NsZWVwKQotCQkJY21kLT5zbGVlcF9pbnRlcnZhbFtpXSA9IGNwdV90b19sZTMyKG1heF9zbGVlcCk7Ci0JfQotCi0JSVdMX0RFQlVHX1BPV0VSKCJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7Ci0JSVdMX0RFQlVHX1BPV0VSKCJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9wb3dlcl9tb2RlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBtb2RlKQotewotCXUzMiB1bmluaXRpYWxpemVkX3ZhcihmaW5hbF9tb2RlKTsKLQlpbnQgcmM7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgY21kOwotCi0JLyogSWYgb24gYmF0dGVyeSwgc2V0IHRvIDMsCi0JICogaWYgcGx1Z2dlZCBpbnRvIEFDIHBvd2VyLCBzZXQgdG8gQ0FNICgiY29udGludW91c2x5IGF3YXJlIG1vZGUiKSwKLQkgKiBlbHNlIHVzZXIgbGV2ZWwgKi8KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIElXTF9QT1dFUl9CQVRURVJZOgotCQlmaW5hbF9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzM7Ci0JCWJyZWFrOwotCWNhc2UgSVdMX1BPV0VSX0FDOgotCQlmaW5hbF9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmaW5hbF9tb2RlID0gbW9kZTsKLQkJYnJlYWs7Ci0JfQotCi0JaXdsMzk0NV91cGRhdGVfcG93ZXJfY21kKHByaXYsICZjbWQsIGZpbmFsX21vZGUpOwotCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBQT1dFUl9UQUJMRV9DTUQsIHNpemVvZihjbWQpLCAmY21kKTsKLQotCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9NT0RFX0NBTSkKLQkJY2xlYXJfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwotCWVsc2UKLQkJc2V0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3NjYW5fY2FuY2VsIC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KLSAqCi0gKiBOT1RFOiBwcml2LT5tdXRleCBpcyBub3QgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2Nhbl9jYW5jZWwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJRdWV1aW5nIHNjYW4gYWJvcnQuXG4iKTsKLQkJCXNldF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hYm9ydF9zY2FuKTsKLQotCQl9IGVsc2UKLQkJCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFib3J0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKLQotCQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQgLSBDYW5jZWwgYW55IGN1cnJlbnRseSBleGVjdXRpbmcgSFcgc2NhbgotICogQG1zOiBhbW91bnQgb2YgdGltZSB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBzY2FuIHRvIGFib3J0Ci0gKgotICogTk9URTogcHJpdi0+bXV0ZXggbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcykKLXsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IGl3bDM5NDVfc2Nhbl9jYW5jZWwocHJpdik7Ci0JaWYgKHJldCAmJiBtcykgewotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIG5vdyArIG1zZWNzX3RvX2ppZmZpZXMobXMpKSAmJgotCQkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCi0JCQltc2xlZXAoMSk7Ci0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OworCQkJCSAgICBwcml2LT5zaGFyZWRfdmlydCwKKwkJCQkgICAgcHJpdi0+c2hhcmVkX3BoeXMpOwogfQogCiAjZGVmaW5lIE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUwJMTAyNAotI2RlZmluZSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4QSkKKyNkZWZpbmUgSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUwJY3B1X3RvX2xlMTYoMHhBKQogCiBzdGF0aWMgX19sZTE2IGl3bDM5NDVfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCh1MTYgYmVhY29uX3ZhbCkKIHsKQEAgLTIwNDMsNyArNzA1LDcgQEAKIAlyZXR1cm4gY3B1X3RvX2xlMTYobmV3X3ZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhvbl90aW1pbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhvbl90aW1pbmcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXU2NCBpbnRlcnZhbF90bV91bml0OwogCXU2NCB0c2YsIHJlc3VsdDsKQEAgLTIwNTQsMTMgKzcxNiwxMCBAQAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAuZHdbMV0gPSBjcHVfdG9fbGUzMihwcml2LT50aW1lc3RhbXAxKTsKLQlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAuZHdbMF0gPSBjcHVfdG9fbGUzMihwcml2LT50aW1lc3RhbXAwKTsKLQorCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHByaXYtPnRpbWVzdGFtcCk7CiAJcHJpdi0+cnhvbl90aW1pbmcubGlzdGVuX2ludGVydmFsID0gSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUw7CiAKLQl0c2YgPSBwcml2LT50aW1lc3RhbXAxOwotCXRzZiA9ICgodHNmIDw8IDMyKSB8IHByaXYtPnRpbWVzdGFtcDApOworCXRzZiA9IHByaXYtPnRpbWVzdGFtcDsKIAogCWJlYWNvbl9pbnQgPSBwcml2LT5iZWFjb25faW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTIwOTIsMTgzICs3NTEsNDEgQEAKIAlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwgPQogCSAgICBjcHVfdG9fbGUzMigodTMyKSAoKHU2NCkgaW50ZXJ2YWxfdG1fdW5pdCAtIHJlc3VsdCkpOwogCi0JSVdMX0RFQlVHX0FTU09DCi0JICAgICgiYmVhY29uIGludGVydmFsICVkIGJlYWNvbiB0aW1lciAlZCBiZWFjb24gdGltICVkXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LAorCQkiYmVhY29uIGludGVydmFsICVkIGJlYWNvbiB0aW1lciAlZCBiZWFjb24gdGltICVkXG4iLAogCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpLAogCQlsZTMyX3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwpLAogCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdykpOwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICAiCi0JCQkgICAgICAgIlF1ZXVpbmcuXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JcHJpdi0+c2Nhbl9zdGFydCA9IGppZmZpZXM7Ci0JcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gcHJpdi0+c2Nhbl9zdGFydDsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2V0X3J4b25faHdjcnlwdG8oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCi0JaWYgKGh3X2RlY3J5cHQpCi0JCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCWVsc2UKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldF9mbGFnc19mb3JfcGh5bW9kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQotCQkgICAgfihSWE9OX0ZMR19CQU5EXzI0R19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sKLQkJICAgICAgfCBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCX0gZWxzZSB7Ci0JCS8qIENvcGllZCBmcm9tIGl3bDM5NDVfYmdfcG9zdF9hc3NvY2lhdGUoKSAqLwotCQlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JCWVsc2UKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfQ0NLX01TSzsKLQl9Ci19Ci0KLS8qCi0gKiBpbml0aWFsaXplIHJ4b24gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgZnJvbSBlZXByb20KLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgIGludCBtb2RlKQotewotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0FQOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9FU1M7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0lCU1M7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyA9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLIHwKLQkJCQkJCSAgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX1NOSUZGRVI7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyB8Ci0JCSAgICBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgfCBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSAlZFxuIiwgbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotI2lmIDAKLQkvKiBUT0RPOiAgRmlndXJlIG91dCB3aGVuIHNob3J0X3ByZWFtYmxlIHdvdWxkIGJlIHNldCBhbmQgY2FjaGUgZnJvbQotCSAqIHRoYXQgKi8KLQlpZiAoIWh3X3RvX2xvY2FsKHByaXYtPmh3KS0+c2hvcnRfcHJlYW1ibGUpCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLSNlbmRpZgotCi0JY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLAotCQkJCSAgICAgICBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSk7Ci0KLQlpZiAoIWNoX2luZm8pCi0JCWNoX2luZm8gPSAmcHJpdi0+Y2hhbm5lbF9pbmZvWzBdOwotCi0JLyoKLQkgKiBpbiBzb21lIGNhc2UgQSBjaGFubmVscyBhcmUgYWxsIG5vbiBJQlNTCi0JICogaW4gdGhpcyBjYXNlIGZvcmNlIEIvRyBjaGFubmVsCi0JICovCi0JaWYgKChtb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJiAhKGlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkpCi0JCWNoX2luZm8gPSAmcHJpdi0+Y2hhbm5lbF9pbmZvWzBdOwotCi0JcHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaF9pbmZvLT5jaGFubmVsKTsKLQlpZiAoaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbykpCi0JCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwotCWVsc2UKLQkJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0KLQlpd2wzOTQ1X3NldF9mbGFnc19mb3JfcGh5bW9kZShwcml2LCBwcml2LT5iYW5kKTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkgICAgKElXTF9PRkRNX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jY2tfYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX0NDS19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfbW9kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQogewogCWlmIChtb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwkJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAKLQkJY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAorCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwKIAkJCXByaXYtPmJhbmQsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkpOwogCiAJCWlmICghY2hfaW5mbyB8fCAhaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSB7Ci0JCQlJV0xfRVJST1IoImNoYW5uZWwgJWQgbm90IElCU1MgY2hhbm5lbFxuIiwKKwkJCUlXTF9FUlIocHJpdiwgImNoYW5uZWwgJWQgbm90IElCU1MgY2hhbm5lbFxuIiwKIAkJCQkgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWl3bDM5NDVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBtb2RlKTsKLQltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBtb2RlKTsKIAogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBkb24ndCBjb21taXQgcnhvbiBpZiByZi1raWxsIGlzIG9uKi8KLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpCisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7Ci0JaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7Ci0JCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAwbXNcbiIpOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOworCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7CisJCUlXTF9XQVJOKHByaXYsICJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAwbXNcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTIyNzcsNDkgKzc5NCw0MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKLQkJCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKKwkJCQkgICAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2JfZnJhZywKLQkJCQkgICAgICBpbnQgbGFzdF9mcmFnKQorCQkJCSAgICAgIGludCBzdGFfaWQpCiB7CisJc3RydWN0IGl3bDM5NDVfdHhfY21kICp0eCA9IChzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKiljbWQtPmNtZC5wYXlsb2FkOwogCXN0cnVjdCBpd2wzOTQ1X2h3X2tleSAqa2V5aW5mbyA9Ci0JICAgICZwcml2LT5zdGF0aW9uc1tpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeF0ua2V5aW5mbzsKKwkgICAgJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mbzsKIAogCXN3aXRjaCAoa2V5aW5mby0+YWxnKSB7CiAJY2FzZSBBTEdfQ0NNUDoKLQkJY21kLT5jbWQudHguc2VjX2N0bCA9IFRYX0NNRF9TRUNfQ0NNOwotCQltZW1jcHkoY21kLT5jbWQudHgua2V5LCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7Ci0JCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggQUVTIGh3Y3J5cHRvXG4iKTsKKwkJdHgtPnNlY19jdGwgPSBUWF9DTURfU0VDX0NDTTsKKwkJbWVtY3B5KHR4LT5rZXksIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOwogCQlicmVhazsKIAogCWNhc2UgQUxHX1RLSVA6Ci0jaWYgMAotCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwotCi0JCWlmIChsYXN0X2ZyYWcpCi0JCQltZW1jcHkoY21kLT5jbWQudHgudGtpcF9taWMuYnl0ZSwgc2tiX2ZyYWctPnRhaWwgLSA4LAotCQkJICAgICAgIDgpOwotCQllbHNlCi0JCQltZW1zZXQoY21kLT5jbWQudHgudGtpcF9taWMuYnl0ZSwgMCwgOCk7Ci0jZW5kaWYKIAkJYnJlYWs7CiAKIAljYXNlIEFMR19XRVA6Ci0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX1dFUCB8CisJCXR4LT5zZWNfY3RsID0gVFhfQ01EX1NFQ19XRVAgfAogCQkgICAgKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4ICYgVFhfQ01EX1NFQ19NU0spIDw8IFRYX0NNRF9TRUNfU0hJRlQ7CiAKIAkJaWYgKGtleWluZm8tPmtleWxlbiA9PSAxMykKLQkJCWNtZC0+Y21kLnR4LnNlY19jdGwgfD0gVFhfQ01EX1NFQ19LRVkxMjg7CisJCQl0eC0+c2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKIAotCQltZW1jcHkoJmNtZC0+Y21kLnR4LmtleVszXSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOworCQltZW1jcHkoJnR4LT5rZXlbM10sIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKIAotCQlJV0xfREVCVUdfVFgoIkNvbmZpZ3VyaW5nIHBhY2tldCBmb3IgV0VQIGVuY3J5cHRpb24gIgorCQlJV0xfREVCVUdfVFgocHJpdiwgIkNvbmZpZ3VyaW5nIHBhY2tldCBmb3IgV0VQIGVuY3J5cHRpb24gIgogCQkJICAgICAid2l0aCBrZXkgJWRcbiIsIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4KTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIlVua25vd24gZW5jb2RlIGFsZyAlZFxuIiwga2V5aW5mby0+YWxnKTsKKwkJSVdMX0VSUihwcml2LCAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXlpbmZvLT5hbGcpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yMzI3LDE3ICs4MzYsMTcgQEAKIC8qCiAgKiBoYW5kbGUgYnVpbGQgUkVQTFlfVFggY29tbWFuZCBub3RpZmljYXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAotCQkJCSAgaW50IGlzX3VuaWNhc3QsIHU4IHN0ZF9pZCkKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4IHN0ZF9pZCkKIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKnR4ID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqKWNtZC0+Y21kLnBheWxvYWQ7CisJX19sZTMyIHR4X2ZsYWdzID0gdHgtPnR4X2ZsYWdzOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQlfX2xlMzIgdHhfZmxhZ3MgPSBjbWQtPmNtZC50eC50eF9mbGFnczsKIAl1OCByY19mbGFncyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CiAKLQljbWQtPmNtZC50eC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKKwl0eC0+c3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19BQ0tfTVNLOwogCQlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKQpAQCAtMjM1MCwxMyArODU5LDEzIEBACiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CiAJfQogCi0JY21kLT5jbWQudHguc3RhX2lkID0gc3RkX2lkOworCXR4LT5zdGFfaWQgPSBzdGRfaWQ7CiAJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSkKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NT1JFX0ZSQUdfTVNLOwogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7Ci0JCWNtZC0+Y21kLnR4LnRpZF90c3BlYyA9IHFjWzBdICYgMHhmOworCQl0eC0+dGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CiAJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVExfTVNLOwogCX0gZWxzZSB7CiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CkBAIC0yMzc2LDI1ICs4ODUsMjUgQEAKIAl0eF9mbGFncyAmPSB+KFRYX0NNRF9GTEdfQU5UX1NFTF9NU0spOwogCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpIHsKIAkJaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXEoZmMpIHx8IGllZWU4MDIxMV9pc19yZWFzc29jX3JlcShmYykpCi0JCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigzKTsKKwkJCXR4LT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigzKTsKIAkJZWxzZQotCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMik7CisJCQl0eC0+dGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMik7CiAJfSBlbHNlIHsKLQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gMDsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisJCXR4LT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSAwOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAkJcHJpdi0+cnh0eHBhY2tldHMgKz0gbGUxNl90b19jcHUoY21kLT5jbWQudHgubGVuKTsKICNlbmRpZgogCX0KIAotCWNtZC0+Y21kLnR4LmRyaXZlcl90eG9wID0gMDsKLQljbWQtPmNtZC50eC50eF9mbGFncyA9IHR4X2ZsYWdzOwotCWNtZC0+Y21kLnR4Lm5leHRfZnJhbWVfbGVuID0gMDsKKwl0eC0+ZHJpdmVyX3R4b3AgPSAwOworCXR4LT50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4LT5uZXh0X2ZyYW1lX2xlbiA9IDA7CiB9CiAKIC8qKgogICogaXdsMzk0NV9nZXRfc3RhX2lkIC0gRmluZCBzdGF0aW9uJ3MgaW5kZXggd2l0aGluIHN0YXRpb24gdGFibGUKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2dldF9zdGFfaWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3N0YXRpYyBpbnQgaXdsMzk0NV9nZXRfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlpbnQgc3RhX2lkOwogCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CkBAIC0yNDAyLDcgKzkxMSw3IEBACiAJLyogSWYgdGhpcyBmcmFtZSBpcyBicm9hZGNhc3Qgb3IgbWFuYWdlbWVudCwgdXNlIGJyb2FkY2FzdCBzdGF0aW9uIGlkICovCiAJaWYgKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3dpdGNoIChwcml2LT5pd19tb2RlKSB7CiAKQEAgLTI0MTYsNyArOTI1LDcgQEAKIAkJc3RhX2lkID0gaXdsMzk0NV9od19maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CiAJCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKIAkJCXJldHVybiBzdGFfaWQ7Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAKIAkvKiBJZiB0aGlzIGZyYW1lIGlzIGdvaW5nIG91dCB0byBhbiBJQlNTIG5ldHdvcmssIGZpbmQgdGhlIHN0YXRpb24sCiAJICogb3IgY3JlYXRlIGEgbmV3IHN0YXRpb24gdGFibGUgZW50cnkgKi8KQEAgLTI0MzEsMzggKzk0MCwzOCBAQAogCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQlyZXR1cm4gc3RhX2lkOwogCi0JCUlXTF9ERUJVR19EUk9QKCJTdGF0aW9uICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuICIKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIlN0YXRpb24gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgogCQkJICAgICAgICJEZWZhdWx0aW5nIHRvIGJyb2FkY2FzdC4uLlxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKLQkJaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCX0KIAkvKiBJZiB3ZSBhcmUgaW4gbW9uaXRvciBtb2RlLCB1c2UgQkNBU1QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCiAJICogcGFja2V0IGluamVjdGlvbi4gKi8KIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAKIAlkZWZhdWx0OgotCQlJV0xfV0FSTklORygiVW5rbm93biBtb2RlIG9mIG9wZXJhdGlvbjogJWRcbiIsIHByaXYtPml3X21vZGUpOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCUlXTF9XQVJOKHByaXYsICJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwKKwkJCXByaXYtPml3X21vZGUpOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl9CiB9CiAKIC8qCiAgKiBzdGFydCBSRVBMWV9UWCBjb21tYW5kIHByb2Nlc3MKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3NrYihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpd2wzOTQ1X3R4X3NrYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQ7Ci0JdTMyICpjb250cm9sX2ZsYWdzOwotCWludCB0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gTlVMTDsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfdHhfY21kICp0eDsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSBOVUxMOworCXN0cnVjdCBpd2xfcXVldWUgKnEgPSBOVUxMOworCXN0cnVjdCBpd2xfY21kICpvdXRfY21kID0gTlVMTDsKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAlkbWFfYWRkcl90IHR4Y21kX3BoeXM7Ci0Jc3RydWN0IGl3bDM5NDVfY21kICpvdXRfY21kID0gTlVMTDsKKwlpbnQgdHhxX2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAJdTE2IGxlbiwgaWR4LCBsZW5fb3JnLCBoZHJfbGVuOwogCXU4IGlkOwogCXU4IHVuaWNhc3Q7CkBAIC0yNDc2LDEzICs5ODUsMTMgQEAKIAlpbnQgcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CiAKIAlpZiAoKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShwcml2LT5odywgaW5mbyktPmh3X3ZhbHVlICYgMHhGRikgPT0gSVdMX0lOVkFMSURfUkFURSkgewotCQlJV0xfRVJST1IoIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CiAKQEAgLTI0OTEsMjEgKzEwMDAsMjEgQEAKIAogCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCWlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBVVRIIGZyYW1lXG4iKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOwogCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXEoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVNTT0MgZnJhbWVcbiIpOwogCWVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOwogI2VuZGlmCiAKIAkvKiBkcm9wIGFsbCBkYXRhIGZyYW1lIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgJiYKIAkgICAgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgJiYgLyogcGFja2V0IGluamVjdGlvbiAqLwotCSAgICAoIWl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSB8fAorCSAgICAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8CiAJICAgICAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYgIXByaXYtPmFzc29jX2lkKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gIWl3bDM5NDVfaXNfYXNzb2NpYXRlZFxuIik7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtICFpd2xfaXNfYXNzb2NpYXRlZFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCkBAIC0yNTE2LDIxICsxMDI1LDIxIEBACiAJLyogRmluZCAob3IgY3JlYXRlKSBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgZm9yIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KIAlzdGFfaWQgPSBpd2wzOTQ1X2dldF9zdGFfaWQocHJpdiwgaGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQlnb3RvIGRyb3A7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwotCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyICYKKwkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCiAJCQkJSUVFRTgwMjExX1NDVExfU0VROwogCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxX251bWJlcikgfAogCQkJKGhkci0+c2VxX2N0cmwgJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOworCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpKTsKIAkJc2VxX251bWJlciArPSAweDEwOwogCX0KIApAQCAtMjU0MCwyMCArMTA0OSwxNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBURkQgd2l0aGluIHRoaXMgcXVldWUncyBjaXJjdWxhciBURkQgYnVmZmVyICovCi0JdGZkID0gJnR4cS0+YmRbcS0+d3JpdGVfcHRyXTsKLQltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOwotCWNvbnRyb2xfZmxhZ3MgPSAodTMyICopIHRmZDsKIAlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgMCk7CiAKIAkvKiBTZXQgdXAgZHJpdmVyIGRhdGEgZm9yIHRoaXMgVEZEICovCi0JbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvKSk7CisJbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2luZm8pKTsKIAl0eHEtPnR4YltxLT53cml0ZV9wdHJdLnNrYlswXSA9IHNrYjsKIAogCS8qIEluaXQgZmlyc3QgZW1wdHkgZW50cnkgaW4gcXVldWUncyBhcnJheSBvZiBUeC9jbWQgYnVmZmVycyAqLwotCW91dF9jbWQgPSAmdHhxLT5jbWRbaWR4XTsKKwlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKKwl0eCA9IChzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKilvdXRfY21kLT5jbWQucGF5bG9hZDsKIAltZW1zZXQoJm91dF9jbWQtPmhkciwgMCwgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwotCW1lbXNldCgmb3V0X2NtZC0+Y21kLnR4LCAwLCBzaXplb2Yob3V0X2NtZC0+Y21kLnR4KSk7CisJbWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7CiAKIAkvKgogCSAqIFNldCB1cCB0aGUgVHgtY29tbWFuZCAobm90IE1BQyEpIGhlYWRlci4KQEAgLTI1NjYsNyArMTA3Miw3IEBACiAJCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpKTsKIAogCS8qIENvcHkgTUFDIGhlYWRlciBmcm9tIHNrYiBpbnRvIGNvbW1hbmQgYnVmZmVyICovCi0JbWVtY3B5KG91dF9jbWQtPmNtZC50eC5oZHIsIGhkciwgaGRyX2xlbik7CisJbWVtY3B5KHR4LT5oZHIsIGhkciwgaGRyX2xlbik7CiAKIAkvKgogCSAqIFVzZSB0aGUgZmlyc3QgZW1wdHkgZW50cnkgaW4gdGhpcyBxdWV1ZSdzIGNvbW1hbmQgYnVmZmVyIGFycmF5CkBAIC0yNTc3LDggKzEwODMsOCBAQAogCSAqIG9mIHRoZSBNQUMgaGVhZGVyIChkZXZpY2UgcmVhZHMgb24gZHdvcmQgYm91bmRhcmllcykuCiAJICogV2UnbGwgdGVsbCBkZXZpY2UgYWJvdXQgdGhpcyBwYWRkaW5nIGxhdGVyLgogCSAqLwotCWxlbiA9IHByaXYtPmh3X3NldHRpbmcudHhfY21kX2xlbiArCi0JCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9jbWRfaGVhZGVyKSArIGhkcl9sZW47CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCkgKworCQkJc2l6ZW9mKHN0cnVjdCBpd2xfY21kX2hlYWRlcikgKyBoZHJfbGVuOwogCiAJbGVuX29yZyA9IGxlbjsKIAlsZW4gPSAobGVuICsgMykgJiB+MzsKQEAgLTI1OTAsMTUgKzEwOTYsMjIgQEAKIAogCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBUeCBjb21tYW5kJ3MgaGVhZGVyIChub3QgTUFDIGhlYWRlciEpLAogCSAqIHdpdGhpbiBjb21tYW5kIGJ1ZmZlciBhcnJheS4gKi8KLQl0eGNtZF9waHlzID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIGlkeCArCi0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDM5NDVfY21kLCBoZHIpOworCXR4Y21kX3BoeXMgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAorCQkJCSAgICBvdXRfY21kLCBzaXplb2Yoc3RydWN0IGl3bF9jbWQpLAorCQkJCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQoJm91dF9jbWQtPm1ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOworCXBjaV91bm1hcF9sZW5fc2V0KCZvdXRfY21kLT5tZXRhLCBsZW4sIHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkpOworCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCisJICogZmlyc3QgZW50cnkgKi8KKwl0eGNtZF9waHlzICs9IG9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwogCiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKIAkgKiBmaXJzdCBlbnRyeSAqLwotCWl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgdHhjbWRfcGh5cywgbGVuKTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJICAgdHhjbWRfcGh5cywgbGVuLCAxLCAwKTsKIAogCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkKLQkJaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8ocHJpdiwgaW5mbywgb3V0X2NtZCwgc2tiLCAwKTsKKwkJaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8ocHJpdiwgaW5mbywgb3V0X2NtZCwgc2tiLCBzdGFfaWQpOwogCiAJLyogU2V0IHVwIFRGRCdzIDJuZCBlbnRyeSB0byBwb2ludCBkaXJlY3RseSB0byByZW1haW5kZXIgb2Ygc2tiLAogCSAqIGlmIGFueSAoODAyLjExIG51bGwgZnJhbWVzIGhhdmUgbm8gcGF5bG9hZCkuICovCkBAIC0yNjA2LDY0ICsxMTE5LDU2IEBACiAJaWYgKGxlbikgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAogCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHBoeXNfYWRkciwgbGVuKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCQkgICBwaHlzX2FkZHIsIGxlbiwKKwkJCQkJCQkgICAwLCBVMzJfUEFEKGxlbikpOwogCX0KIAotCWlmICghbGVuKQotCQkvKiBJZiB0aGVyZSBpcyBubyBwYXlsb2FkLCB0aGVuIHdlIHVzZSBvbmx5IG9uZSBUeCBidWZmZXIgKi8KLQkJKmNvbnRyb2xfZmxhZ3MgPSBURkRfQ1RMX0NPVU5UX1NFVCgxKTsKLQllbHNlCi0JCS8qIEVsc2UgdXNlIDIgYnVmZmVycy4KLQkJICogVGVsbCAzOTQ1IGFib3V0IGFueSBwYWRkaW5nIGFmdGVyIE1BQyBoZWFkZXIgKi8KLQkJKmNvbnRyb2xfZmxhZ3MgPSBURkRfQ1RMX0NPVU5UX1NFVCgyKSB8Ci0JCQlURkRfQ1RMX1BBRF9TRVQoVTMyX1BBRChsZW4pKTsKLQogCS8qIFRvdGFsICMgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KIAlsZW4gPSAodTE2KXNrYi0+bGVuOwotCW91dF9jbWQtPmNtZC50eC5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCXR4LT5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwogCiAJLyogVE9ETyBuZWVkIHRoaXMgZm9yIGJ1cnN0IG1vZGUgbGF0ZXIgb24gKi8KLQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhwcml2LCBvdXRfY21kLCBpbmZvLCBoZHIsIHVuaWNhc3QsIHN0YV9pZCk7CisJaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMocHJpdiwgb3V0X2NtZCwgaW5mbywgaGRyLCBzdGFfaWQpOwogCiAJLyogc2V0IGlzX2hjY2EgdG8gMDsgaXQgcHJvYmFibHkgd2lsbCBuZXZlciBiZSBpbXBsZW1lbnRlZCAqLwogCWl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUocHJpdiwgb3V0X2NtZCwgaW5mbywgaGRyLCBzdGFfaWQsIDApOwogCi0Jb3V0X2NtZC0+Y21kLnR4LnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9BX01TSzsKLQlvdXRfY21kLT5jbWQudHgudHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0JfTVNLOworCXR4LT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQV9NU0s7CisJdHgtPnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9CX01TSzsKIAogCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKIAkJaWYgKHFjKQotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKKwkJCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CiAJfSBlbHNlIHsKIAkJd2FpdF93cml0ZV9wdHIgPSAxOwogCQl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIAl9CiAKLQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9UWCwgb3V0X2NtZC0+Y21kLnBheWxvYWQsCi0JCQkgICBzaXplb2Yob3V0X2NtZC0+Y21kLnR4KSk7CisJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9UWCwgdHgsIHNpemVvZigqdHgpKTsKIAotCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1RYLCAodTggKilvdXRfY21kLT5jbWQudHguaGRyLAorCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfVFgsICh1OCAqKXR4LT5oZHIsCiAJCQkgICBpZWVlODAyMTFfaGRybGVuKGZjKSk7CiAKIAkvKiBUZWxsIGRldmljZSB0aGUgd3JpdGUgaW5kZXggKmp1c3QgcGFzdCogdGhpcyBsYXRlc3QgZmlsbGVkIFRGRCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwotCXJjID0gaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CisJcmMgPSBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWlmICgoaXdsMzk0NV9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykKKwlpZiAoKGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykKIAkgICAgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewogCQlpZiAod2FpdF93cml0ZV9wdHIpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQkJCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCQkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCX0KIAotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCQlpd2xfc3RvcF9xdWV1ZShwcml2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNjc0LDE0MiArMTE3OSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlpbnQgaTsKLQotCXNiYW5kID0gaXdsMzk0NV9nZXRfYmFuZChwcml2LCBwcml2LT5iYW5kKTsKLQlpZiAoIXNiYW5kKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKLQotCUlXTF9ERUJVR19SQVRFKCJTZXR0aW5nIHJhdGVzIGZvciAlcyBHSHpcbiIsCi0JCSAgICAgICBzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haID8gIjIuNCIgOiAiNSIpOwotCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWlmICgocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVCkgJiYKLQkJICAgICEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJBZGRpbmcgcmF0ZSBpbmRleCAlZCAocGxjcCAlZClcbiIsCi0JCQkJICAgICAgIHJhdGUtPmh3X3ZhbHVlLCBpd2wzOTQ1X3JhdGVzW3JhdGUtPmh3X3ZhbHVlXS5wbGNwKTsKLQkJCXByaXYtPmFjdGl2ZV9yYXRlIHw9ICgxIDw8IHJhdGUtPmh3X3ZhbHVlKTsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAotCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKLQotCS8qCi0JICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKLQkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKLQkgKiBPRkRNCi0JICovCi0JaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgotCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yYWRpb19raWxsX3N3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISFkaXNhYmxlX3JhZGlvID09IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gJXNcbiIsCi0JCQkgIGRpc2FibGVfcmFkaW8gPyAiT0ZGIiA6ICJPTiIpOwotCi0JaWYgKGRpc2FibGVfcmFkaW8pIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKLQkJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwotCQlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCi0JCQkJICAgIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDM5NDVfc2VuZF9jYXJkX3N0YXRlKHByaXYsIENBUkRfU1RBVEVfQ01EX0RJU0FCTEUsIDApOwotCQkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCi0JY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWtlIHVwIHVjb2RlICovCi0JbXNsZWVwKDEwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCWlmICghaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCSAgImRpc2FibGVkIGJ5IEhXIHN3aXRjaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocHJpdi0+aXNfb3BlbikKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICB1MzIgZGVjcnlwdF9yZXMsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKLXsKLQl1MTYgZmMgPQotCSAgICBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhKS0+ZnJhbWVfY29udHJvbCk7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLKQotCQlyZXR1cm47Ci0KLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCi0JCXJldHVybjsKLQotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOwotCXN3aXRjaCAoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgewotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQOgotCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQotCQkgICAgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQykKLQkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQOgotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QOgotCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQotCQkgICAgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LKSB7Ci0JCQlJV0xfREVCVUdfUlgoImh3IGRlY3J5cHQgc3VjY2Vzc2Z1bGx5ISEhXG4iKTsKLQkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCiAjaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAogI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgpAQCAtMjg2MywxMyArMTIzMiwxMyBAQAogCXJldHVybiBjcHVfdG9fbGUzMihyZXMpOwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgICAgIHU4IHR5cGUpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fY21kIHNwZWN0cnVtOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX3NwZWN0cnVtX2NtZCBzcGVjdHJ1bTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzOworCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQsCiAJCS5kYXRhID0gKHZvaWQgKikmc3BlY3RydW0sCiAJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLApAQCAtMjg3OSw3ICsxMjQ4LDcgQEAKIAlpbnQgc3BlY3RydW1fcmVzcF9zdGF0dXM7CiAJaW50IGR1cmF0aW9uID0gbGUxNl90b19jcHUocGFyYW1zLT5kdXJhdGlvbik7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKQorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKIAkJYWRkX3RpbWUgPQogCQkgICAgaXdsMzk0NV91c2Vjc190b19iZWFjb25zKAogCQkJbGU2NF90b19jcHUocGFyYW1zLT5zdGFydF90aW1lKSAtIHByaXYtPmxhc3RfdHNmLApAQCAtMjg5NCw3ICsxMjYzLDcgQEAKIAljbWQubGVuID0gc2l6ZW9mKHNwZWN0cnVtKTsKIAlzcGVjdHJ1bS5sZW4gPSBjcHVfdG9fbGUxNihjbWQubGVuIC0gc2l6ZW9mKHNwZWN0cnVtLmxlbikpOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCXNwZWN0cnVtLnN0YXJ0X3RpbWUgPQogCQkgICAgaXdsMzk0NV9hZGRfYmVhY29uX3RpbWUocHJpdi0+bGFzdF9iZWFjb25fdGltZSwKIAkJCQlhZGRfdGltZSwKQEAgLTI5MDksMTMgKzEyNzgsMTMgQEAKIAkJc3BlY3RydW0uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwKIAkJICAgIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKIAl9CiAKQEAgLTI5MjMsNyArMTI5Miw3IEBACiAJc3dpdGNoIChzcGVjdHJ1bV9yZXNwX3N0YXR1cykgewogCWNhc2UgMDoJCS8qIENvbW1hbmQgd2lsbCBiZSBoYW5kbGVkICovCiAJCWlmIChyZXMtPnUuc3BlY3RydW0uaWQgIT0gMHhmZikgewotCQkJSVdMX0RFQlVHX0lORk8oIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCiAJCQkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwogCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKIAkJfQpAQCAtMjk0MiwzMCArMTMxMSwyOSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCAqcGFsaXZlOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCAqcGFsaXZlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgKnB3b3JrOwogCiAJcGFsaXZlID0gJnBrdC0+dS5hbGl2ZV9mcmFtZTsKIAotCUlXTF9ERUJVR19JTkZPKCJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCiAJCSAgICAgICAiMHglMDFYIDB4JTAxWFxuIiwKIAkJICAgICAgIHBhbGl2ZS0+aXNfdmFsaWQsIHBhbGl2ZS0+dmVyX3R5cGUsCiAJCSAgICAgICBwYWxpdmUtPnZlcl9zdWJ0eXBlKTsKIAogCWlmIChwYWxpdmUtPnZlcl9zdWJ0eXBlID09IElOSVRJQUxJWkVfU1VCVFlQRSkgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKLQkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsCi0JCSAgICAgICAmcGt0LT51LmFsaXZlX2ZyYW1lLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCkpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsICZwa3QtPnUuYWxpdmVfZnJhbWUsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmluaXRfYWxpdmVfc3RhcnQ7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlLCAmcGt0LT51LmFsaXZlX2ZyYW1lLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3ApKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApKTsKIAkJcHdvcmsgPSAmcHJpdi0+YWxpdmVfc3RhcnQ7CiAJCWl3bDM5NDVfZGlzYWJsZV9ldmVudHMocHJpdik7CiAJfQpAQCAtMjk3Niw5NSArMTM0NCwzMSBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCBwd29yaywKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUpKTsKIAllbHNlCi0JCUlXTF9XQVJOSU5HKCJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgInVDb2RlIGRpZCBub3QgcmVzcG9uZCBPSy5cbiIpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FkZF9zdGEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisjZW5kaWYKIAotCUlXTF9ERUJVR19SWCgiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTogMHglMDJYXG4iLCBwa3QtPnUuc3RhdHVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6IDB4JTAyWFxuIiwgcGt0LT51LnN0YXR1cyk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQotCUlXTF9FUlJPUigiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKLQkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX3R5cGUpLAotCQlnZXRfY21kX3N0cmluZyhwa3QtPnUuZXJyX3Jlc3AuY21kX2lkKSwKLQkJcGt0LT51LmVycl9yZXNwLmNtZF9pZCwKLQkJbGUxNl90b19jcHUocGt0LT51LmVycl9yZXNwLmJhZF9jbWRfc2VxX251bSksCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl9pbmZvKSk7Ci19Ci0KLSNkZWZpbmUgVFhfU1RBVFVTX0VOVFJZKHgpIGNhc2UgVFhfU1RBVFVTX0ZBSUxfICMjIHg6IHJldHVybiAjeAotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2NzYShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0Jc3RydWN0IGl3bDM5NDVfY3NhX25vdGlmaWNhdGlvbiAqY3NhID0gJihwa3QtPnUuY3NhX25vdGlmKTsKLQlJV0xfREVCVUdfMTFIKCJDU0Egbm90aWY6IGNoYW5uZWwgJWQsIHN0YXR1cyAlZFxuIiwKLQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSwgbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpKTsKLQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uICpyZXBvcnQgPSAmKHBrdC0+dS5zcGVjdHJ1bV9ub3RpZik7Ci0KLQlpZiAoIXJlcG9ydC0+c3RhdGUpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF8xMUggfCBJV0xfRExfSU5GTywKLQkJCSAgIlNwZWN0cnVtIE1lYXN1cmUgTm90aWZpY2F0aW9uOiBTdGFydFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoJnByaXYtPm1lYXN1cmVfcmVwb3J0LCByZXBvcnQsIHNpemVvZigqcmVwb3J0KSk7Ci0JcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzIHw9IE1FQVNVUkVNRU5UX1JFQURZOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWCgic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIGJlYWNvbl91cGRhdGUpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGJlYWNvbl91cGRhdGUpOwogCXN0cnVjdCBza19idWZmICpiZWFjb247CiAKIAkvKiBQdWxsIHVwZGF0ZWQgQVAgYmVhY29uIGZyb20gbWFjODAyMTEuIHdpbGwgZmFpbCBpZiBub3QgaW4gQVAgbW9kZSAqLwogCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKLQkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzA3OSwxNSArMTM4MywxNSBAQAogCWl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfYmVhY29uX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiAqYmVhY29uID0gJihwa3QtPnUuYmVhY29uX3N0YXR1cyk7CiAJdTggcmF0ZSA9IGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIucmF0ZTsKIAotCUlXTF9ERUJVR19SWCgiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCisJSVdMX0RFQlVHX1JYKHByaXYsICJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKIAkJInRzZiAlZCAlZCByYXRlICVkXG4iLAogCQlsZTMyX3RvX2NwdShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnN0YXR1cykgJiBUWF9TVEFUVVNfTVNLLAogCQliZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLmZhaWx1cmVfZnJhbWUsCkBAIC0zMTAxLDEzNyArMTQwNSwyMCBAQAogCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmJlYWNvbl91cGRhdGUpOwogfQogCi0vKiBTZXJ2aWNlIHJlc3BvbnNlIHRvIFJFUExZX1NDQU5fQ01EICgweDgwKSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9zY2FuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnJlcV9ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQotCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwotI2VuZGlmCi19Ci0KLS8qIFNlcnZpY2UgU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gKDB4ODIpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQlwcml2LT5zY2FuX3N0YXJ0X3RzZiA9IGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KTsKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBzdGFydDogIgotCQkgICAgICAgIiVkIFs4MDIuMTElc10gIgotCQkgICAgICAgIihUU0Y6IDB4JTA4WDolMDhYKSAtICVkIChiZWFjb24gdGltZXIgJXUpXG4iLAotCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCi0JCSAgICAgICBub3RpZi0+YmFuZCA/ICJiZyIgOiAiYSIsCi0JCSAgICAgICBub3RpZi0+dHNmX2hpZ2gsCi0JCSAgICAgICBub3RpZi0+dHNmX2xvdywgbm90aWYtPnN0YXR1cywgbm90aWYtPmJlYWNvbl90aW1lcik7Ci19Ci0KLS8qIFNlcnZpY2UgU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTiAoMHg4MykgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9yZXN1bHRzX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjaC5yZXM6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCi0JCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9oaWdoKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT5zdGF0aXN0aWNzWzBdKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkpOwotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLX0KLQotLyogU2VydmljZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiAoMHg4NCkgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gKnNjYW5fbm90aWYgPSAodm9pZCAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKLQkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCi0JCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgSFcgaXMgbm8gbG9uZ2VyIHNjYW5uaW5nICovCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIFRoZSBzY2FuIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGNhbWUgaW4sIHNvIGtpbGwgdGhhdCB0aW1lci4uLiAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCi0JCSAgICAgICAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgPwotCQkJCQkJCSIyLjQiIDogIjUuMiIsCi0JCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwotCQkJCQkocHJpdi0+c2Nhbl9wYXNzX3N0YXJ0LCBqaWZmaWVzKSkpOwotCi0JLyogUmVtb3ZlIHRoaXMgc2Nhbm5lZCBiYW5kIGZyb20gdGhlIGxpc3Qgb2YgcGVuZGluZwotCSAqIGJhbmRzIHRvIHNjYW4sIGJhbmQgRyBwcmVjZWRlcyBBIGluIG9yZGVyIG9mIHNjYW5uaW5nCi0JICogYXMgc2VlbiBpbiBpd2wzOTQ1X2JnX3JlcXVlc3Rfc2NhbiAqLwotCWlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JZWxzZSBpZiAocHJpdi0+c2Nhbl9iYW5kcyAmICBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikpCi0JCXByaXYtPnNjYW5fYmFuZHMgJj0gfkJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQotCS8qIElmIGEgcmVxdWVzdCB0byBhYm9ydCB3YXMgZ2l2ZW4sIG9yIHRoZSBzY2FuIGRpZCBub3Qgc3VjY2VlZAotCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAotCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLwotCQlpZiAocHJpdi0+c2Nhbl9iYW5kcyA+IDApCi0JCQlnb3RvIHJlc2NoZWR1bGU7Ci0JfQotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7Ci0KLQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHRvb2sgJWRtc1xuIiwKLQkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCi0JcmV0dXJuOwotCi1yZXNjaGVkdWxlOgotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IGppZmZpZXM7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotfQotCiAvKiBIYW5kbGUgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUgdGhhdCBjYXJkJ3MgcG93ZXIgc3RhdGUgaXMgY2hhbmdpbmcKICAqIGR1ZSB0byBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGNyaXRpY2FsIHRlbXBlcmF0dXJlIFJGS0lMTCAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAogCQkJICAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCiAJCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIik7CiAKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAorCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAKIAlpZiAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKQpAQCAtMzI0NSw3ICsxNDMyLDcgQEAKIAllbHNlCiAJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7CiAKLQlpd2wzOTQ1X3NjYW5fY2FuY2VsKHByaXYpOworCWl3bF9zY2FuX2NhbmNlbChwcml2KTsKIAogCWlmICgodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZzdGF0dXMpICE9CiAJICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHx8CkBAIC0zMjY1LDE3ICsxNDUyLDE1IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNoYWlucyBpbnRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaWxlcyBmb3IgdGhlbSB0byBzZXR1cAogICogYW55IGhhcmR3YXJlIHNwZWNpZmljIGhhbmRsZXJzIGFzIHdlbGwuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FMSVZFXSA9IGl3bDM5NDVfcnhfcmVwbHlfYWxpdmU7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQUREX1NUQV0gPSBpd2wzOTQ1X3J4X3JlcGx5X2FkZF9zdGE7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfRVJST1JdID0gaXdsMzk0NV9yeF9yZXBseV9lcnJvcjsKLQlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9jc2E7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU1BFQ1RSVU1fTUVBU1VSRV9OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmOwotCXByaXYtPnJ4X2hhbmRsZXJzW1BNX1NMRUVQX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3BtX3NsZWVwX25vdGlmOworCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bF9yeF9yZXBseV9lcnJvcjsKKwlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsX3J4X2NzYTsKKwlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsX3J4X3BtX3NsZWVwX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW1BNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDXSA9Ci0JICAgIGl3bDM5NDVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKKwkgICAgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbQkVBQ09OX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZjsKIAogCS8qCkBAIC0zMjg2LDkwICsxNDcxLDE0IEBACiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfU1RBVElTVElDU19DTURdID0gaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzOwogCXByaXYtPnJ4X2hhbmRsZXJzW1NUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NDQU5fQ01EXSA9IGl3bDM5NDVfcnhfcmVwbHlfc2NhbjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1NUQVJUX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fY29tcGxldGVfbm90aWY7CisJaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHByaXYpOworCWl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHByaXYpOwogCXByaXYtPnJ4X2hhbmRsZXJzW0NBUkRfU1RBVEVfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZjsKIAogCS8qIFNldCB1cCBoYXJkd2FyZSBzcGVjaWZpYyBSeCBoYW5kbGVycyAqLwogCWl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltIC0gUmVjbGFpbSBDTUQgcXVldWUgZW50cmllcwotICogV2hlbiBGVyBhZHZhbmNlcyAnUicgaW5kZXgsIGFsbCBlbnRyaWVzIGJldHdlZW4gb2xkIGFuZCBuZXcgJ1InIGluZGV4Ci0gKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4KLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlpbnQgbmZyZWVkID0gMDsKLQotCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZChxLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCi0JCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGluZGV4ID0gaXdsX3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaW5kZXg7Ci0JCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewotCQlpZiAobmZyZWVkID4gMSkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGluZGV4LAotCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JCQlicmVhazsKLQkJfQotCQluZnJlZWQrKzsKLQl9Ci19Ci0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZSAtIFB1bGwgdW51c2VkIGJ1ZmZlcnMgb2ZmIHRoZSBxdWV1ZSBhbmQgcmVjbGFpbSB0aGVtCi0gKiBAcnhiOiBSeCBidWZmZXIgdG8gcmVjbGFpbQotICoKLSAqIElmIGFuIFJ4IGJ1ZmZlciBoYXMgYW4gYXN5bmMgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIGl0IHRoZSBjYWxsYmFjawotICogd2lsbCBiZSBleGVjdXRlZC4gIFRoZSBhdHRhY2hlZCBza2IgKGlmIHByZXNlbnQpIHdpbGwgb25seSBiZSBmcmVlZAotICogaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgMQotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQl1MTYgc2VxdWVuY2UgPSBsZTE2X3RvX2NwdShwa3QtPmhkci5zZXF1ZW5jZSk7Ci0JaW50IHR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXF1ZW5jZSk7Ci0JaW50IGluZGV4ID0gU0VRX1RPX0lOREVYKHNlcXVlbmNlKTsKLQlpbnQgaHVnZSA9IHNlcXVlbmNlICYgU0VRX0hVR0VfRlJBTUU7Ci0JaW50IGNtZF9pbmRleDsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZDsKLQotCUJVR19PTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pOwotCi0JY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7Ci0JY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pbmRleF07Ci0KLQkvKiBJbnB1dCBlcnJvciBjaGVja2luZyBpcyBkb25lIHdoZW4gY29tbWFuZHMgYXJlIGFkZGVkIHRvIHF1ZXVlLiAqLwotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpIHsKLQkJY21kLT5tZXRhLnNvdXJjZS0+dS5za2IgPSByeGItPnNrYjsKLQkJcnhiLT5za2IgPSBOVUxMOwotCX0gZWxzZSBpZiAoY21kLT5tZXRhLnUuY2FsbGJhY2sgJiYKLQkJICAgIWNtZC0+bWV0YS51LmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpKQotCQlyeGItPnNrYiA9IE5VTEw7Ci0KLQlpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwotCi0JaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgewotCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCX0KLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIFJYLUZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIFJ4IHRoZW9yeSBvZiBvcGVyYXRpb24KQEAgLTM0MTcsNyArMTUyNiw2IEBACiAgKgogICogRHJpdmVyIHNlcXVlbmNlOgogICoKLSAqIGl3bDM5NDVfcnhfcXVldWVfYWxsb2MoKSAgIEFsbG9jYXRlcyByeF9mcmVlCiAgKiBpd2wzOTQ1X3J4X3JlcGxlbmlzaCgpICAgICBSZXBsZW5pc2hlcyByeF9mcmVlIGxpc3QgZnJvbSByeF91c2VkLCBhbmQgY2FsbHMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jawogICogaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKCkgTW92ZXMgYXZhaWxhYmxlIGJ1ZmZlcnMgZnJvbSByeF9mcmVlIGludG8gUngKQEAgLTM0MjYsNyArMTUzNCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYXZhaWxhYmxlLCBzY2hlZHVsZXMgaXdsMzk0NV9yeF9yZXBsZW5pc2gKICAqCiAgKiAtLSBlbmFibGUgaW50ZXJydXB0cyAtLQotICogSVNSIC0gaXdsMzk0NV9yeCgpICAgICAgICAgRGV0YWNoIGl3bDM5NDVfcnhfbWVtX2J1ZmZlcnMgZnJvbSBwb29sIHVwIHRvIHRoZQorICogSVNSIC0gaXdsMzk0NV9yeCgpICAgICAgICAgRGV0YWNoIGl3bF9yeF9tZW1fYnVmZmVycyBmcm9tIHBvb2wgdXAgdG8gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEIElOREVYLCBkZXRhY2hpbmcgdGhlIFNLQiBmcm9tIHRoZSBwb29sLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZXMgdGhlIHBhY2tldCBidWZmZXIgZnJvbSBxdWV1ZSB0byByeF91c2VkLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbHMgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrIHRvIHJlZmlsbCBhbnkgZW1wdHkKQEAgLTM0MzYsNzAgKzE1NDQsOSBAQAogICovCiAKIC8qKgotICogaXdsMzk0NV9yeF9xdWV1ZV9zcGFjZSAtIFJldHVybiBudW1iZXIgb2YgZnJlZSBzbG90cyBhdmFpbGFibGUgaW4gcXVldWUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcSkKLXsKLQlpbnQgcyA9IHEtPnJlYWQgLSBxLT53cml0ZTsKLQlpZiAocyA8PSAwKQotCQlzICs9IFJYX1FVRVVFX1NJWkU7Ci0JLyoga2VlcCBzb21lIGJ1ZmZlciB0byBub3QgY29uZnVzZSBmdWxsIGFuZCBlbXB0eSBxdWV1ZSAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCi0gKi8KLWludCBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChxLT5uZWVkX3VwZGF0ZSA9PSAwKQotCQlnb3RvIGV4aXRfdW5sb2NrOwotCi0JLyogSWYgcG93ZXItc2F2aW5nIGlzIGluIHVzZSwgbWFrZSBzdXJlIGRldmljZSBpcyBhd2FrZSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewotCQlyZWcgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCQl9Ci0KLQkJcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQkJaWYgKHJjKQotCQkJZ290byBleGl0X3VubG9jazsKLQotCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLAotCQkJCSAgICAgcS0+d3JpdGUgJiB+MHg3KTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCi0JfSBlbHNlCi0JCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwgcS0+d3JpdGUgJiB+MHg3KTsKLQotCi0JcS0+bmVlZF91cGRhdGUgPSAwOwotCi0gZXhpdF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIgLSBjb252ZXJ0IGEgRE1BIGFkZHJlc3MgdG8gYSB1Q29kZSByZWFkIGJ1ZmZlciBwdHIKICAqLwotc3RhdGljIGlubGluZSBfX2xlMzIgaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW5saW5lIF9fbGUzMiBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIGNwdV90b19sZTMyKCh1MzIpZG1hX2FkZHIpOwpAQCAtMzUxNiwyNCArMTU2MywyNCBAQAogICogYWxzbyB1cGRhdGVzIHRoZSBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgZmlybXdhcmUgdG8gcmVmZXJlbmNlIHRoZSBuZXcKICAqIHRhcmdldCBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB3cml0ZSwgcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJd3JpdGUgPSByeHEtPndyaXRlICYgfjB4NzsKLQl3aGlsZSAoKGl3bDM5NDVfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CisJd2hpbGUgKChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CiAJCS8qIEdldCBuZXh0IGZyZWUgUnggYnVmZmVyLCByZW1vdmUgZnJvbSBmcmVlIGxpc3QgKi8KIAkJZWxlbWVudCA9IHJ4cS0+cnhfZnJlZS5uZXh0OwotCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIsIGxpc3QpOworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCiAJCS8qIFBvaW50IHRvIFJ4IGJ1ZmZlciB2aWEgbmV4dCBSQkQgaW4gY2lyY3VsYXIgYnVmZmVyICovCi0JCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIocHJpdiwgcnhiLT5kbWFfYWRkcik7CisJCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIocHJpdiwgcnhiLT5yZWFsX2RtYV9hZGRyKTsKIAkJcnhxLT5xdWV1ZVtyeHEtPndyaXRlXSA9IHJ4YjsKIAkJcnhxLT53cml0ZSA9IChyeHEtPndyaXRlICsgMSkgJiBSWF9RVUVVRV9NQVNLOwogCQlyeHEtPmZyZWVfY291bnQtLTsKQEAgLTM1NTIsNyArMTU5OSw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJcnhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCQlyYyA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CkBAIC0zNTY4LDI0ICsxNjE1LDI0IEBACiAgKiBBbHNvIHJlc3RvY2sgdGhlIFJ4IHF1ZXVlIHZpYSBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2suCiAgKiBUaGlzIGlzIGNhbGxlZCBhcyBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gKGV4Y2VwdCBmb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uKQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2FsbG9jYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2FsbG9jYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiOworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcnhxLT5yeF91c2VkKSkgewogCQllbGVtZW50ID0gcnhxLT5yeF91c2VkLm5leHQ7Ci0JCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CisJCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyLCBsaXN0KTsKIAogCQkvKiBBbGxvYyBhIG5ldyByZWNlaXZlIGJ1ZmZlciAqLwogCQlyeGItPnNrYiA9Ci0JCSAgICBhbGxvY19za2IoSVdMX1JYX0JVRl9TSVpFLCBfX0dGUF9OT1dBUk4gfCBHRlBfQVRPTUlDKTsKKwkJICAgIGFsbG9jX3NrYihwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJX19HRlBfTk9XQVJOIHwgR0ZQX0FUT01JQyk7CiAJCWlmICghcnhiLT5za2IpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTkFNRQotCQkJCSAgICAgICAiOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKKwkJCQlJV0xfQ1JJVChwcml2LCAiOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKIAkJCS8qIFdlIGRvbid0IHJlc2NoZWR1bGUgcmVwbGVuaXNoIHdvcmsgaGVyZSAtLSB3ZSB3aWxsCiAJCQkgKiBjYWxsIHRoZSByZXN0b2NrIG1ldGhvZCBhbmQgaWYgaXQgc3RpbGwgbmVlZHMKIAkJCSAqIG1vcmUgYnVmZmVycyBpdCB3aWxsIHNjaGVkdWxlIHJlcGxlbmlzaCAqLwpAQCAtMzYwNCw5ICsxNjUxLDEwIEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCiAJCS8qIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIFJCL1NLQiAqLwotCQlyeGItPmRtYV9hZGRyID0KLQkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+c2tiLT5kYXRhLAotCQkJCSAgIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhiLT5yZWFsX2RtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKKwkJCQkJCXJ4Yi0+c2tiLT5kYXRhLAorCQkJCQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcnhxLT5yeF9mcmVlKTsKIAkJcnhxLT5mcmVlX2NvdW50Kys7CiAJfQpAQCAtMzYxOCw3ICsxNjY2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pd2wzOTQ1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7CiAKIAlpd2wzOTQ1X3J4X2FsbG9jYXRlKHByaXYpOwogCWl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKQEAgLTM2MjcsNyArMTY3NSw3IEBACiAKIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpd2wzOTQ1X3J4X2FsbG9jYXRlKHByaXYpOwpAQCAtMzYzNyw4NCArMTY4NSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi0vKiBBc3N1bWVzIHRoYXQgdGhlIHNrYiBmaWVsZCBvZiB0aGUgYnVmZmVycyBpbiAncG9vbCcgaXMga2VwdCBhY2N1cmF0ZS4KLSAqIElmIGFuIFNLQiBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIFBPT0wgbmVlZHMgdG8gaGF2ZSBpdHMgU0tCIHNldCB0byBOVUxMCi0gKiBUaGlzIGZyZWUgcm91dGluZSB3YWxrcyB0aGUgbGlzdCBvZiBQT09MIGVudHJpZXMgYW5kIGlmIFNLQiBpcyBzZXQgdG8KLSAqIG5vbiBOVUxMIGl0IGlzIHVubWFwcGVkIGFuZCBmcmVlZAotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfU0laRSArIFJYX0ZSRUVfQlVGRkVSUzsgaSsrKSB7Ci0JCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkJIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWRldl9rZnJlZV9za2IocnhxLT5wb29sW2ldLnNrYik7Ci0JCX0KLQl9Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAotCQkJICAgIHJ4cS0+ZG1hX2FkZHIpOwotCXJ4cS0+YmQgPSBOVUxMOwotfQotCi1pbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnJ4cS0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfZnJlZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfdXNlZCk7Ci0KLQkvKiBBbGxvYyB0aGUgY2lyY3VsYXIgYnVmZmVyIG9mIFJlYWQgQnVmZmVyIERlc2NyaXB0b3JzIChSQkRzKSAqLwotCXJ4cS0+YmQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCAmcnhxLT5kbWFfYWRkcik7Ci0JaWYgKCFyeHEtPmJkKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspCi0JCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0JcnhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspIHsKLQkJLyogSW4gdGhlIHJlc2V0IGZ1bmN0aW9uLCB0aGVzZSBidWZmZXJzIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkCi0JCSAqIHRvIGFuIFNLQiwgc28gd2UgbmVlZCB0byB1bm1hcCBhbmQgZnJlZSBwb3RlbnRpYWwgc3RvcmFnZSAqLwotCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQkJcnhxLT5wb29sW2ldLnNrYiA9IE5VTEw7Ci0JCX0KLQkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwotCX0KLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIENvbnZlcnQgbGluZWFyIHNpZ25hbC10by1ub2lzZSByYXRpbyBpbnRvIGRCICovCiBzdGF0aWMgdTggcmF0aW8yZEJbMTAwXSA9IHsKIC8qCSAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICovCkBAIC0zODAwLDExICsxNzcwLDExIEBACiAgKiB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMsIGluY2x1ZGluZyBjb21tYW5kIHJlc3BvbnNlcywKICAqIGZyYW1lLXJlY2VpdmVkIG5vdGlmaWNhdGlvbnMsIGFuZCBvdGhlciBub3RpZmljYXRpb25zLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0OworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJdTMyIHIsIGk7CiAJaW50IHJlY2xhaW07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM4MTMsMTQgKzE3ODMsMTQgQEAKIAogCS8qIHVDb2RlJ3MgcmVhZCBpbmRleCAoc3RvcmVkIGluIHNoYXJlZCBEUkFNKSBpbmRpY2F0ZXMgdGhlIGxhc3QgUngKIAkgKiBidWZmZXIgdGhhdCB0aGUgZHJpdmVyIG1heSBwcm9jZXNzIChsYXN0IGJ1ZmZlciBmaWxsZWQgYnkgdWNvZGUpLiAqLwotCXIgPSBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHByaXYpOworCXIgPSBsZTE2X3RvX2NwdShyeHEtPnJiX3N0dHMtPmNsb3NlZF9yYl9udW0pICYgIDB4MEZGRjsKIAlpID0gcnhxLT5yZWFkOwogCi0JaWYgKGl3bDM5NDVfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCisJaWYgKGl3bF9yeF9xdWV1ZV9zcGFjZShyeHEpID4gKFJYX1FVRVVFX1NJWkUgLyAyKSkKIAkJZmlsbF9yeCA9IDE7CiAJLyogUnggaW50ZXJydXB0LCBidXQgbm90aGluZyBzZW50IGZyb20gdUNvZGUgKi8KIAlpZiAoaSA9PSByKQotCQlJV0xfREVCVUcoSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CiAKIAl3aGlsZSAoaSAhPSByKSB7CiAJCXJ4YiA9IHJ4cS0+cXVldWVbaV07CkBAIC0zODMyLDEwICsxODAyLDEwIEBACiAKIAkJcnhxLT5xdWV1ZVtpXSA9IE5VTEw7CiAKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHByaXYtPnBjaV9kZXYsIHJ4Yi0+ZG1hX2FkZHIsCi0JCQkJCSAgICBJV0xfUlhfQlVGX1NJWkUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPnJlYWxfZG1hX2FkZHIsCisJCQkJCSAgICBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJCS8qIFJlY2xhaW0gYSBjb21tYW5kIGJ1ZmZlciBvbmx5IGlmIHRoaXMgcGFja2V0IGlzIGEgcmVzcG9uc2UKIAkJICogICB0byBhIChkcml2ZXItb3JpZ2luYXRlZCkgY29tbWFuZC4KQEAgLTM4NTEsMTMgKzE4MjEsMTMgQEAKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgogCQkgKiAgIHJ4X2hhbmRsZXJzIHRhYmxlLiAgU2VlIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoKSAqLwogCQlpZiAocHJpdi0+cnhfaGFuZGxlcnNbcGt0LT5oZHIuY21kXSkgewotCQkJSVdMX0RFQlVHKElXTF9ETF9IT1NUX0NPTU1BTkQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAorCQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9IQ01EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKIAkJCQkiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsIGksCiAJCQkJZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKKwkJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfSENNRCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCiAJCQkJInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CkBAIC0zODY1LDEyICsxODM1LDEyIEBACiAKIAkJaWYgKHJlY2xhaW0pIHsKIAkJCS8qIEludm9rZSBhbnkgY2FsbGJhY2tzLCB0cmFuc2ZlciB0aGUgc2tiIHRvIGNhbGxlciwgYW5kCi0JCQkgKiBmaXJlIG9mZiB0aGUgKHBvc3NpYmx5KSBibG9ja2luZyBpd2wzOTQ1X3NlbmRfY21kKCkKKwkJCSAqIGZpcmUgb2ZmIHRoZSAocG9zc2libHkpIGJsb2NraW5nIGl3bF9zZW5kX2NtZCgpCiAJCQkgKiBhcyB3ZSByZWNsYWltIHRoZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSAqLwogCQkJaWYgKHJ4YiAmJiByeGItPnNrYikKLQkJCQlpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZShwcml2LCByeGIpOworCQkJCWl3bF90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKIAkJCWVsc2UKLQkJCQlJV0xfV0FSTklORygiQ2xhaW0gbnVsbCByeGI/XG4iKTsKKwkJCQlJV0xfV0FSTihwcml2LCAiQ2xhaW0gbnVsbCByeGI/XG4iKTsKIAkJfQogCiAJCS8qIEZvciBub3cgd2UganVzdCBkb24ndCByZS11c2UgYW55dGhpbmcuICBXZSBjYW4gdHdlYWsgdGhpcwpAQCAtMzg4Miw4ICsxODUyLDkgQEAKIAkJCXJ4Yi0+c2tiID0gTlVMTDsKIAkJfQogCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKLQkJCQkgSVdMX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+cmVhbF9kbWFfYWRkciwKKwkJCQlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZyeGItPmxpc3QsICZwcml2LT5yeHEucnhfdXNlZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwpAQCAtMzkwNSwxMDIgKzE4NzYsMTQgQEAKIAlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJjID0gMDsKLQlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwotCi0JaWYgKHR4cS0+bmVlZF91cGRhdGUgPT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JLyogaWYgd2UncmUgdHJ5aW5nIHRvIHNhdmUgcG93ZXIgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpIHsKLQkJLyogd2FrZSB1cCBuaWMgaWYgaXQncyBwb3dlcmVkIGRvd24gLi4uCi0JCSAqIHVDb2RlIHdpbGwgd2FrZSB1cCwgYW5kIGludGVycnVwdCB1cyBhZ2Fpbiwgc28gbmV4dAotCQkgKiB0aW1lIHdlJ2xsIHNraXAgdGhpcyBwYXJ0LiAqLwotCQlyZWcgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKLQkJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQkvKiByZXN0b3JlIHRoaXMgcXVldWUncyBwYXJhbWV0ZXJzIGluIG5pYyBoYXJkd2FyZS4gKi8KLQkJcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKLQkJCQkgICAgIHR4cS0+cS53cml0ZV9wdHIgfCAodHhxX2lkIDw8IDgpKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBlbHNlIG5vdCBpbiBwb3dlci1zYXZlIG1vZGUsIHVDb2RlIHdpbGwgbmV2ZXIgc2xlZXAgd2hlbiB3ZSdyZQotCSAqIHRyeWluZyB0byB0eCAoZHVyaW5nIFJGS0lMTCwgd2UncmUgbm90IHRyeWluZyB0byB0eCkuICovCi0JfSBlbHNlCi0JCWl3bDM5NDVfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOwotCi0JdHhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIHZvaWQgaXdsMzk0NV9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uKQotewotCUlXTF9ERUJVR19SQURJTygiUlggQ09ORklHOlxuIik7Ci0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sICh1OCAqKSByeG9uLCBzaXplb2YoKnJ4b24pKTsKLQlJV0xfREVCVUdfUkFESU8oInUxNiBjaGFubmVsOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmxhZ3M6IDB4JTA4WFxuIiwgbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInUzMiBmaWx0ZXJfZmxhZ3M6IDB4JTA4eFxuIiwKLQkJCWxlMzJfdG9fY3B1KHJ4b24tPmZpbHRlcl9mbGFncykpOwotCUlXTF9ERUJVR19SQURJTygidTggZGV2X3R5cGU6IDB4JXhcbiIsIHJ4b24tPmRldl90eXBlKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IG9mZG1fYmFzaWNfcmF0ZXM6IDB4JTAyeFxuIiwKLQkJCXJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidTggY2NrX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsIHJ4b24tPmNja19iYXNpY19yYXRlcyk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBub2RlX2FkZHI6ICVwTVxuIiwgcnhvbi0+bm9kZV9hZGRyKTsKLQlJV0xfREVCVUdfUkFESU8oInU4WzZdIGJzc2lkX2FkZHI6ICVwTVxuIiwgcnhvbi0+YnNzaWRfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgYXNzb2NfaWQ6IDB4JXhcbiIsIGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCUlXTF9ERUJVR19JU1IoIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwotCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBDU1JfSU5JX1NFVF9NQVNLKTsKLX0KLQotCiAvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9zeW5jaHJvbml6ZV9pcnEoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIHdhaXQgdG8gbWFrZSBzdXJlIHdlIGZsdXNoIHBlbmRpbmcgdGFza2xldCovCiAJc3luY2hyb25pemVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSk7CiAJdGFza2xldF9raWxsKCZwcml2LT5pcnFfdGFza2xldCk7CiB9CiAKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JY2xlYXJfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBkaXNhYmxlIGludGVycnVwdHMgZnJvbSB1Q29kZS9OSUMgdG8gaG9zdCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOwotCi0JLyogYWNrbm93bGVkZ2UvY2xlYXIvcmVzZXQgYW55IGludGVycnVwdHMgc3RpbGwgcGVuZGluZwotCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4ZmZmZmZmZmYpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JSVdMX0RFQlVHX0lTUigiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKIHsKIAlzd2l0Y2ggKGkpIHsKQEAgLTQwMjQsNyArMTkwNyw3IEBACiAjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKICNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBpOwogCXUzMiBkZXNjLCB0aW1lLCBjb3VudCwgYmFzZSwgZGF0YTE7CkBAIC00MDM0LDQ5ICsxOTE3LDUwIEBACiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWNvdW50ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAKIAlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlJPUigiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsIHByaXYtPnN0YXR1cywgY291bnQpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsCisJCQlwcml2LT5zdGF0dXMsIGNvdW50KTsKIAl9CiAKLQlJV0xfRVJST1IoIkRlc2MgICAgICAgVGltZSAgICAgICBhc3J0UEMgIGJsaW5rMiAiCisJSVdMX0VSUihwcml2LCAiRGVzYyAgICAgICBUaW1lICAgICAgIGFzcnRQQyAgYmxpbmsyICIKIAkJICAiaWxpbmsxICBubWlQQyAgIExpbmVcbiIpOwogCWZvciAoaSA9IEVSUk9SX1NUQVJUX09GRlNFVDsKIAkgICAgIGkgPCAoY291bnQgKiBFUlJPUl9FTEVNX1NJWkUpICsgRVJST1JfU1RBUlRfT0ZGU0VUOwogCSAgICAgaSArPSBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJZGVzYyA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSk7CisJCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSk7CiAJCXRpbWUgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKIAkJYmxpbmsxID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDIgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDIgKiBzaXplb2YodTMyKSk7CiAJCWJsaW5rMiA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOwogCQlpbGluazEgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKIAkJaWxpbmsyID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDUgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDUgKiBzaXplb2YodTMyKSk7CiAJCWRhdGExID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CiAKLQkJSVdMX0VSUk9SCi0JCSAgICAoIiUtMTNzICgjJWQpICUwMTB1IDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WCAldVxuXG4iLAotCQkgICAgIGRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBibGluazEsIGJsaW5rMiwKLQkJICAgICBpbGluazEsIGlsaW5rMiwgZGF0YTEpOworCQlJV0xfRVJSKHByaXYsCisJCQkiJS0xM3MgKCMlZCkgJTAxMHUgMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYICV1XG5cbiIsCisJCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgYmxpbmsxLCBibGluazIsCisJCQlpbGluazEsIGlsaW5rMiwgZGF0YTEpOwogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIH0KIApAQCAtNDA4NSw5ICsxOTY5LDkgQEAKIC8qKgogICogaXdsMzk0NV9wcmludF9ldmVudF9sb2cgLSBEdW1wIGVycm9yIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqCi0gKiBOT1RFOiBNdXN0IGJlIGNhbGxlZCB3aXRoIGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKCkgYWxyZWFkeSBvYnRhaW5lZCEKKyAqIE5PVEU6IE11c3QgYmUgY2FsbGVkIHdpdGggaXdsX2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCiAJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQogewogCXUzMiBpOwpAQCAtNDExMSwyMSArMTk5NSwyMiBAQAogCS8qICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KIAkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCXRpbWUgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJaWYgKG1vZGUgPT0gMCkKLQkJCUlXTF9FUlJPUigiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7IC8qIGRhdGEsIGV2ICovCi0JCWVsc2UgewotCQkJZGF0YSA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlpZiAobW9kZSA9PSAwKSB7CisJCQkvKiBkYXRhLCBldiAqLworCQkJSVdMX0VSUihwcml2LCAiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOworCQkJSVdMX0VSUihwcml2LCAiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLwpAQCAtNDEzNywzMiArMjAyMiwzMiBAQAogCiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJaWYgKCFpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKLQkJSVdMX0VSUk9SKCJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCi0JY2FwYWNpdHkgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7Ci0JbW9kZSA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOwotCW51bV93cmFwcyA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOwotCW5leHRfZW50cnkgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgzICogc2l6ZW9mKHUzMikpKTsKKwljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOworCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CisJbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CiAKIAlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OwogCiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJcmV0dXJuOwogCX0KIAotCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKKwlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAogCQkgIHNpemUsIG51bV93cmFwcyk7CiAKIAkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCkBAIC00MTc0LDQ4ICsyMDU5LDEwIEBACiAJLyogKHRoZW4vZWxzZSkgc3RhcnQgYXQgdG9wIG9mIGxvZyAqLwogCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsMzk0NV9kb3duICovCi0Jc2V0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOwotCi0JLyogQ2FuY2VsIGN1cnJlbnRseSBxdWV1ZWQgY29tbWFuZC4gKi8KLQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7Ci0JCWl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCQlpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsMzk0NV9wcmludF9yeF9jb25maWdfY21kKCZwcml2LT5zdGFnaW5nX3J4b24pOwotCX0KLSNlbmRpZgotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KLQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX0ZXX0VSUk9SUywKLQkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKLQotCQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOwotCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7Ci0JCX0KLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQyMzIsMTIgKzIwNzksMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBpbnRhLCBoYW5kbGVkID0gMDsKIAl1MzIgaW50YV9maDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAl1MzIgaW50YV9tYXNrOwogI2VuZGlmCiAKQEAgLTQyNDYsMjAgKzIwOTMsMjAgQEAKIAkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyB1Q29kZSBpbnRlcnJ1cHRzLgogCSAqIE5vdGU6ICBTb21lIGJpdHMgaW4gQ1NSX0lOVCBhcmUgIk9SIiBvZiBiaXRzIGluIENTUl9GSF9JTlRfU1RBVFVTLAogCSAqICBhbmQgd2lsbCBjbGVhciBvbmx5IHdoZW4gQ1NSX0ZIX0lOVF9TVEFUVVMgZ2V0cyBjbGVhcmVkLiAqLwotCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgaW50YSk7CisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgaW50YSk7CiAKIAkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyBmbG93LWhhbmRsZXIgKERNQSkgaW50ZXJydXB0cy4KIAkgKiBBbnkgbmV3IGludGVycnVwdHMgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhpcywgZWl0aGVyIHdoaWxlIHdlJ3JlCiAJICogaW4gdGhpcyB0YXNrbGV0LCBvciBsYXRlciwgd2lsbCBzaG93IHVwIGluIG5leHQgSVNSL3Rhc2tsZXQuICovCi0JaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOworCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgaW50YV9maCk7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCQlpbnRhX21hc2sgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwotCQlJV0xfREVCVUdfSVNSKCJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKIAkJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CiAJfQogI2VuZGlmCkBAIC00Mjc1LDEyICsyMTIyLDEyIEBACiAKIAkvKiBOb3cgc2VydmljZSBhbGwgaW50ZXJydXB0IGJpdHMgZGlzY292ZXJlZCBhYm92ZS4gKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0hXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOwogCiAJCS8qIFRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAotCQlpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IocHJpdik7CisJCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfSFdfRVJSOwogCkBAIC00Mjg5LDE2ICsyMTM2LDE2IEBACiAJCXJldHVybjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkKLQkJCUlXTF9ERUJVR19JU1IoIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCisJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgogCQkJCSAgICAgICJ0aGUgZnJhbWUvZnJhbWVzLlxuIik7CiAKIAkJLyogQWxpdmUgbm90aWZpY2F0aW9uIHZpYSBSeCBpbnRlcnJ1cHQgd2lsbCBkbyB0aGUgcmVhbCB3b3JrICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfQUxJVkUpCi0JCQlJV0xfREVCVUdfSVNSKCJBbGl2ZSBpbnRlcnJ1cHRcbiIpOworCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiQWxpdmUgaW50ZXJydXB0XG4iKTsKIAl9CiAjZW5kaWYKIAkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwpAQCAtNDMwNiwyMiArMjE1MywyMiBAQAogCiAJLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcgMHglWC5cbiIsCi0JCQkgIGludGEpOwotCQlpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IocHJpdik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIgorCQkJIlJlc3RhcnRpbmcgMHglWC5cbiIsIGludGEpOworCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7CiAJfQogCiAJLyogdUNvZGUgd2FrZXMgdXAgYWZ0ZXIgcG93ZXItZG93biBzbGVlcCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IoIldha2V1cCBpbnRlcnJ1cHRcbiIpOwotCQlpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsyXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzNdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNF0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs1XSk7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOworCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMF0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsxXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzJdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbM10pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs0XSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzVdKTsKIAogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1dBS0VVUDsKIAl9CkBAIC00MzM1LDQzMiArMjE4Miw2MyBAQAogCX0KIAogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJSVdMX0RFQlVHX0lTUigiVHggaW50ZXJydXB0XG4iKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiVHggaW50ZXJydXB0XG4iKTsKIAotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsICgxIDw8IDYpKTsKLQkJaWYgKCFpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LAotCQkJCQkgICAgIEZIX1RDU1JfQ1JFRElUCi0JCQkJCSAgICAgKEFMTV9GSF9TUlZDX0NITkwpLCAweDApOwotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAoMSA8PCA2KSk7CisJCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfVENTUl9DUkVESVQKKwkJCQkJICAgICAoRkgzOV9TUlZDX0NITkwpLCAweDApOworCQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJfQogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0ZIX1RYOwogCX0KIAogCWlmIChpbnRhICYgfmhhbmRsZWQpCi0JCUlXTF9FUlJPUigiVW5oYW5kbGVkIElOVEEgYml0cyAweCUwOHhcbiIsIGludGEgJiB+aGFuZGxlZCk7CisJCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwogCiAJaWYgKGludGEgJiB+Q1NSX0lOSV9TRVRfTUFTSykgewotCQlJV0xfV0FSTklORygiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCisJCUlXTF9XQVJOKHByaXYsICJEaXNhYmxlZCBJTlRBIGJpdHMgMHglMDh4IHdlcmUgcGVuZGluZ1xuIiwKIAkJCSBpbnRhICYgfkNTUl9JTklfU0VUX01BU0spOwotCQlJV0xfV0FSTklORygiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOworCQlJV0xfV0FSTihwcml2LCAiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOwogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7Ci0JCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQkJaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQkJSVdMX0RFQlVHX0lTUigiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKKwkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2wzOTQ1X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOwotCXUzMiBpbnRhLCBpbnRhX21hc2s7Ci0JdTMyIGludGFfZmg7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCi0JLyogRGlzYWJsZSAoYnV0IGRvbid0IGNsZWFyISkgaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkCi0JICogICAgYmFjay10by1iYWNrIElTUnMgYW5kIHNwb3JhZGljIGludGVycnVwdHMgZnJvbSBvdXIgTklDLgotCSAqIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlcnZpY2UsIHRoZSB0YXNrbGV0IHdpbGwgcmUtZW5hYmxlIGludHMuCi0JICogSWYgd2UgKmRvbid0KiBoYXZlIHNvbWV0aGluZywgd2UnbGwgcmUtZW5hYmxlIGJlZm9yZSBsZWF2aW5nIGhlcmUuICovCi0JaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpbnRhX2ZoID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCi0JLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCi0JICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKLQkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLwotCWlmICghaW50YSAmJiAhaW50YV9maCkgewotCQlJV0xfREVCVUdfSVNSKCJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7Ci0JCWdvdG8gbm9uZTsKLQl9Ci0KLQlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKLQkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQgKi8KLQkJSVdMX1dBUk5JTkcoIkhBUkRXQVJFIEdPTkU/PyBJTlRBID09IDB4JTA4eFxuIiwgaW50YSk7Ci0JCWdvdG8gdW5wbHVnZ2VkOwotCX0KLQotCUlXTF9ERUJVR19JU1IoIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKLQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKLQotCWludGEgJj0gfkNTUl9JTlRfQklUX1NDRDsKLQotCS8qIGl3bDM5NDVfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KLQlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLXVucGx1Z2dlZDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLSBub25lOgotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFRVBST00gQkFORFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoZSBpd2wzOTQ1X2VlcHJvbV9iYW5kIGRlZmluaXRpb25zIGJlbG93IHByb3ZpZGUgdGhlIG1hcHBpbmcgZnJvbSB0aGUKLSAqIEVFUFJPTSBjb250ZW50cyB0byB0aGUgc3BlY2lmaWMgY2hhbm5lbCBudW1iZXIgc3VwcG9ydGVkIGZvciBlYWNoCi0gKiBiYW5kLgotICoKLSAqIEZvciBleGFtcGxlLCBpd2wzOTQ1X3ByaXYtPmVlcHJvbS5iYW5kXzNfY2hhbm5lbHNbNF0gZnJvbSB0aGUgYmFuZF8zCi0gKiBkZWZpbml0aW9uIGJlbG93IG1hcHMgdG8gcGh5c2ljYWwgY2hhbm5lbCA0MiBpbiB0aGUgNS4yR0h6IHNwZWN0cnVtLgotICogVGhlIHNwZWNpZmljIGdlb2dyYXBoeSBhbmQgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoYXQgY2hhbm5lbAotICogaXMgY29udGFpbmVkIGluIHRoZSBlZXByb20gbWFwIGl0c2VsZi4KLSAqCi0gKiBEdXJpbmcgaW5pdCwgd2UgY29weSB0aGUgZWVwcm9tIGluZm9ybWF0aW9uIGFuZCBjaGFubmVsIG1hcAotICogaW5mb3JtYXRpb24gaW50byBwcml2LT5jaGFubmVsX2luZm9fMjQvNTIgYW5kIHByaXYtPmNoYW5uZWxfbWFwXzI0LzUyCi0gKgotICogY2hhbm5lbF9tYXBfMjQvNTIgcHJvdmlkZXMgdGhlIGluZGV4IGluIHRoZSBjaGFubmVsX2luZm8gYXJyYXkgZm9yIGEKLSAqIGdpdmVuIGNoYW5uZWwuICBXZSBoYXZlIHRvIGhhdmUgdHdvIHNlcGFyYXRlIG1hcHMgYXMgdGhlcmUgaXMgY2hhbm5lbAotICogb3ZlcmxhcCB3aXRoIHRoZSAyLjRHSHogYW5kIDUuMkdIeiBzcGVjdHJ1bSBhcyBzZWVuIGluIGJhbmRfMSBhbmQKLSAqIGJhbmRfMgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZiBzdG9yZWQgaW4gdGhlIGNoYW5uZWxfbWFwIGluZGljYXRlcyB0aGF0IHRoZSBjaGFubmVsCi0gKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhdCBhbGwuCi0gKgotICogQSB2YWx1ZSBvZiAweGZlIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbCBpcyBub3QKLSAqIHZhbGlkIGZvciBUeCB3aXRoIHRoZSBjdXJyZW50IGhhcmR3YXJlLiAgVGhpcyBtZWFucyB0aGF0Ci0gKiB3aGlsZSB0aGUgc3lzdGVtIGNhbiB0dW5lIGFuZCByZWNlaXZlIG9uIGEgZ2l2ZW4gY2hhbm5lbCwgaXQgbWF5IG5vdAotICogYmUgYWJsZSB0byBhc3NvY2lhdGUgb3IgdHJhbnNtaXQgYW55IGZyYW1lcyBvbiB0aGF0Ci0gKiBjaGFubmVsLiAgVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBjaGFubmVsIGluZm9ybWF0aW9uIGZvciB0aGF0Ci0gKiBlbnRyeS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAyLjQgR0h6ICovCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8xWzE0XSA9IHsKLQkxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKLX07Ci0KLS8qIDUuMiBHSHogYmFuZHMgKi8KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzJbXSA9IHsJLyogNDkxNS01MDgwTUh6ICovCi0JMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsIDcsIDgsIDExLCAxMiwgMTYKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzNbXSA9IHsJLyogNTE3MC01MzIwTUh6ICovCi0JMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfNFtdID0gewkvKiA1NTAwLTU3MDBNSHogKi8KLQkxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfNVtdID0gewkvKiA1NzI1LTU4MjVNSHogKi8KLQkxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1Ci19OwotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfYmFuZF9yZWZlcmVuY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGJhbmQsCi0JCQkJICAgIGludCAqZWVwcm9tX2NoX2NvdW50LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbAotCQkJCSAgICAqKmVlcHJvbV9jaF9pbmZvLAotCQkJCSAgICBjb25zdCB1OCAqKmVlcHJvbV9jaF9pbmRleCkKLXsKLQlzd2l0Y2ggKGJhbmQpIHsKLQljYXNlIDE6CQkvKiAyLjRHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8xX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8xOwotCQlicmVhazsKLQljYXNlIDI6CQkvKiA0LjlHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzIpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8yX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8yOwotCQlicmVhazsKLQljYXNlIDM6CQkvKiA1LjJHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzMpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8zOwotCQlicmVhazsKLQljYXNlIDQ6CQkvKiA1LjVHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzQpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF80X2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF80OwotCQlicmVhazsKLQljYXNlIDU6CQkvKiA1LjdHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzUpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF81X2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF81OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8gLSBGaW5kIGRyaXZlcidzIHByaXZhdGUgY2hhbm5lbCBpbmZvCi0gKgotICogQmFzZWQgb24gYmFuZCBhbmQgY2hhbm5lbCBudW1iZXIuCi0gKi8KLWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCXN3aXRjaCAoYmFuZCkgewotCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJZm9yIChpID0gMTQ7IGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKLQkJCWlmIChwcml2LT5jaGFubmVsX2luZm9baV0uY2hhbm5lbCA9PSBjaGFubmVsKQotCQkJCXJldHVybiAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQlpZiAoY2hhbm5lbCA+PSAxICYmIGNoYW5uZWwgPD0gMTQpCi0JCQlyZXR1cm4gJnByaXYtPmNoYW5uZWxfaW5mb1tjaGFubmVsIC0gMV07Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX05VTV9CQU5EUzoKLQkJV0FSTl9PTigxKTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotI2RlZmluZSBDSEVDS19BTkRfUFJJTlQoeCkgKChlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF8jI3gpIFwKLQkJCSAgICA/ICMgeCAiICIgOiAiIikKLQotLyoqCi0gKiBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAgLSBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgYWxsIHBvc3NpYmxlIGNoYW5uZWxzCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaW50IGVlcHJvbV9jaF9jb3VudCA9IDA7Ci0JY29uc3QgdTggKmVlcHJvbV9jaF9pbmRleCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaF9pbmZvID0gTlVMTDsKLQlpbnQgYmFuZCwgY2g7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHByaXYtPmVlcHJvbS52ZXJzaW9uIDwgMHgyZikgewotCQlJV0xfV0FSTklORygiVW5zdXBwb3J0ZWQgRUVQUk9NIHZlcnNpb246IDB4JTA0WFxuIiwKLQkJCSAgICBwcml2LT5lZXByb20udmVyc2lvbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKLQotCXByaXYtPmNoYW5uZWxfY291bnQgPQotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSkgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMikgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMykgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfNCkgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfNSk7Ci0KLQlJV0xfREVCVUdfSU5GTygiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwotCi0JcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvKSAqCi0JCQkJICAgICBwcml2LT5jaGFubmVsX2NvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmNoYW5uZWxfaW5mbykgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwotCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2hfaW5mbyA9IHByaXYtPmNoYW5uZWxfaW5mbzsKLQotCS8qIExvb3AgdGhyb3VnaCB0aGUgNSBFRVBST00gYmFuZHMgYWRkaW5nIHRoZW0gaW4gb3JkZXIgdG8gdGhlCi0JICogY2hhbm5lbCBtYXAgd2UgbWFpbnRhaW4gKHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGFuCi0JICogd2hhdCBqdXN0IGluIHRoZSBFRVBST00pICovCi0JZm9yIChiYW5kID0gMTsgYmFuZCA8PSA1OyBiYW5kKyspIHsKLQotCQlpd2wzOTQ1X2luaXRfYmFuZF9yZWZlcmVuY2UocHJpdiwgYmFuZCwgJmVlcHJvbV9jaF9jb3VudCwKLQkJCQkJJmVlcHJvbV9jaF9pbmZvLCAmZWVwcm9tX2NoX2luZGV4KTsKLQotCQkvKiBMb29wIHRocm91Z2ggZWFjaCBiYW5kIGFkZGluZyBlYWNoIG9mIHRoZSBjaGFubmVscyAqLwotCQlmb3IgKGNoID0gMDsgY2ggPCBlZXByb21fY2hfY291bnQ7IGNoKyspIHsKLQkJCWNoX2luZm8tPmNoYW5uZWwgPSBlZXByb21fY2hfaW5kZXhbY2hdOwotCQkJY2hfaW5mby0+YmFuZCA9IChiYW5kID09IDEpID8gSUVFRTgwMjExX0JBTkRfMkdIWiA6Ci0JCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWjsKLQotCQkJLyogcGVybWFuZW50bHkgc3RvcmUgRUVQUk9NJ3MgY2hhbm5lbCByZWd1bGF0b3J5IGZsYWdzCi0JCQkgKiAgIGFuZCBtYXggcG93ZXIgaW4gY2hhbm5lbCBpbmZvIGRhdGFiYXNlLiAqLwotCQkJY2hfaW5mby0+ZWVwcm9tID0gZWVwcm9tX2NoX2luZm9bY2hdOwotCi0JCQkvKiBDb3B5IHRoZSBydW4tdGltZSBmbGFncyBzbyB0aGV5IGFyZSB0aGVyZSBldmVuIG9uCi0JCQkgKiBpbnZhbGlkIGNoYW5uZWxzICovCi0JCQljaF9pbmZvLT5mbGFncyA9IGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFnczsKLQotCQkJaWYgKCEoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkpIHsKLQkJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIEZsYWdzICV4IFslc0dIel0gLSAiCi0JCQkJCSAgICAgICAiTm8gdHJhZmZpY1xuIiwKLQkJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCi0JCQkJCSAgICAgICBjaF9pbmZvLT5mbGFncywKLQkJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KLQkJCQkJICAgICAgICI1LjIiIDogIjIuNCIpOwotCQkJCWNoX2luZm8rKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogSW5pdGlhbGl6ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KLQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KLQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPnNjYW5fcG93ZXIgPSBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPm1pbl9wb3dlciA9IDA7Ci0KLQkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4IgotCQkJCSAgICAgICAiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAotCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAotCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkJICAgICAgICI1LjIiIDogIjIuNCIsCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChWQUxJRCksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChJQlNTKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKEFDVElWRSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChSQURBUiksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChXSURFKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKERGUyksCi0JCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncywKLQkJCQkgICAgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcsCi0JCQkJICAgICAgICgoZWVwcm9tX2NoX2luZm9bY2hdLgotCQkJCQkgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKQotCQkJCQkmJiAhKGVlcHJvbV9jaF9pbmZvW2NoXS4KLQkJCQkJICAgICBmbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSkKLQkJCQkgICAgICAgPyAiIiA6ICJub3QgIik7Ci0KLQkJCS8qIFNldCB0aGUgdXNlcl90eHBvd2VyX2xpbWl0IHRvIHRoZSBoaWdoZXN0IHBvd2VyCi0JCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KLQkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+Ci0JCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KQotCQkJCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9Ci0JCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwotCi0JCQljaF9pbmZvKys7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdXAgdHhwb3dlciBzZXR0aW5ncyBpbiBkcml2ZXIgZm9yIGFsbCBjaGFubmVscyAqLwotCWlmIChpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHByaXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+Y2hhbm5lbF9pbmZvKTsKLQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLX0KLQotLyogRm9yIGFjdGl2ZSBzY2FuLCBsaXN0ZW4gQUNUSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbCBhZnRlcgotICogc2VuZGluZyBwcm9iZSByZXEuICBUaGlzIHNob3VsZCBiZSBzZXQgbG9uZyBlbm91Z2ggdG8gaGVhciBwcm9iZSByZXNwb25zZXMKLSAqIGZyb20gbW9yZSB0aGFuIG9uZSBBUC4gICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV8yNCAgICAoMzApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MiAgICAoMjApCi0KLSNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKDMpCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICgyKQotCi0vKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCi0gKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCi0gKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAotICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncwotICogbm8gb3RoZXIgdHJhZmZpYykuCi0gKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCi0jZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpCS8qIHBhY2tldHMgKi8KLSNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTApCS8qIG1zZWMgKi8KLQotLyogRm9yIHBhc3NpdmUgc2NhbiwgbGlzdGVuIFBBU1NJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsLgotICogTXVzdCBiZSBzZXQgbG9uZ2VyIHRoYW4gYWN0aXZlIGR3ZWxsIHRpbWUuCi0gKiBGb3IgdGhlIG1vc3QgcmVsaWFibGUgc2Nhbiwgc2V0ID4gQVAgYmVhY29uIGludGVydmFsICh0eXBpY2FsbHkgMTAwbXNlYykuICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgICAoMjApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTIgICAoMTApCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQotI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQotCi0jZGVmaW5lIElXTF9TQ0FOX1BST0JFX01BU0sobikJIChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkKLQotc3RhdGljIGlubGluZSB1MTYgaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkJCXU4IG5fcHJvYmVzKQotewotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgKwotCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfNTJHSFogKiAobl9wcm9iZXMgKyAxKTsKLQllbHNlCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQgKwotCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKiAobl9wcm9iZXMgKyAxKTsKLX0KLQotc3RhdGljIHUxNiBpd2wzOTQ1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JdTE2IHBhc3NpdmUgPSAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSA/Ci0JICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0IDoKLQkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTI7Ci0KLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCS8qIElmIHdlJ3JlIGFzc29jaWF0ZWQsIHdlIGNsYW1wIHRoZSBtYXhpbXVtIHBhc3NpdmUKLQkJICogZHdlbGwgdGltZSB0byBiZSA5OCUgb2YgdGhlIGJlYWNvbiBpbnRlcnZhbCAobWludXMKLQkJICogMiAqIGNoYW5uZWwgdHVuZSB0aW1lKSAqLwotCQlwYXNzaXZlID0gcHJpdi0+YmVhY29uX2ludDsKLQkJaWYgKChwYXNzaXZlID4gSVdMX1BBU1NJVkVfRFdFTExfQkFTRSkgfHwgIXBhc3NpdmUpCi0JCQlwYXNzaXZlID0gSVdMX1BBU1NJVkVfRFdFTExfQkFTRTsKLQkJcGFzc2l2ZSA9IChwYXNzaXZlICogOTgpIC8gMTAwIC0gSVdMX0NIQU5ORUxfVFVORV9USU1FICogMjsKLQl9Ci0KLQlyZXR1cm4gcGFzc2l2ZTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJICAgICB1OCBpc19hY3RpdmUsIHU4IG5fcHJvYmVzLAogCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAl1MTYgcGFzc2l2ZV9kd2VsbCA9IDA7CiAJdTE2IGFjdGl2ZV9kd2VsbCA9IDA7CiAJaW50IGFkZGVkLCBpOwogCi0Jc2JhbmQgPSBpd2wzOTQ1X2dldF9iYW5kKHByaXYsIGJhbmQpOworCXNiYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIGJhbmQpOwogCWlmICghc2JhbmQpCiAJCXJldHVybiAwOwogCiAJY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7CiAKLQlhY3RpdmVfZHdlbGwgPSBpd2wzOTQ1X2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7Ci0JcGFzc2l2ZV9kd2VsbCA9IGl3bDM5NDVfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kKTsKKwlhY3RpdmVfZHdlbGwgPSBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQsIG5fcHJvYmVzKTsKKwlwYXNzaXZlX2R3ZWxsID0gaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CiAKIAlpZiAocGFzc2l2ZV9kd2VsbCA8PSBhY3RpdmVfZHdlbGwpCiAJCXBhc3NpdmVfZHdlbGwgPSBhY3RpdmVfZHdlbGwgKyAxOwpAQCAtNDc3MSw5ICsyMjQ5LDkgQEAKIAogCQlzY2FuX2NoLT5jaGFubmVsID0gY2hhbm5lbHNbaV0uaHdfdmFsdWU7CiAKLQkJY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBzY2FuX2NoLT5jaGFubmVsKTsKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIHNjYW5fY2gtPmNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAogCQkJCSAgICAgICBzY2FuX2NoLT5jaGFubmVsKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00Nzk4LDEyICsyMjc2LDEyIEBACiAJCSAqIGhlYXJpbmcgY2xlYXIgUnggcGFja2V0KS4qLwogCQlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKIAkJCWlmIChuX3Byb2JlcykKLQkJCQlzY2FuX2NoLT50eXBlIHw9IElXTF9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOworCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMMzlfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHVDb2RlIHYxIGRvZXMgbm90IGFsbG93IHNldHRpbmcgZGlyZWN0IHByb2JlIGJpdHMgb24KIAkJCSAqIHBhc3NpdmUgY2hhbm5lbC4gKi8KIAkJCWlmICgoc2Nhbl9jaC0+dHlwZSAmIDEpICYmIG5fcHJvYmVzKQotCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMX1NDQU5fUFJPQkVfTUFTSyhuX3Byb2Jlcyk7CisJCQkJc2Nhbl9jaC0+dHlwZSB8PSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOwogCQl9CiAKIAkJLyogU2V0IHR4cG93ZXIgbGV2ZWxzIHRvIGRlZmF1bHRzICovCkBAIC00ODIxLDcgKzIyOTksNyBAQAogCQkJICovCiAJCX0KIAotCQlJV0xfREVCVUdfU0NBTigiU2Nhbm5pbmcgJWQgWyVzICVkXVxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW5uaW5nICVkIFslcyAlZF1cbiIsCiAJCQkgICAgICAgc2Nhbl9jaC0+Y2hhbm5lbCwKIAkJCSAgICAgICAoc2Nhbl9jaC0+dHlwZSAmIDEpID8gIkFDVElWRSIgOiAiUEFTU0lWRSIsCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiAxKSA/CkBAIC00ODMxLDExICsyMzA5LDExIEBACiAJCWFkZGVkKys7CiAJfQogCi0JSVdMX0RFQlVHX1NDQU4oInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CiAJcmV0dXJuIGFkZGVkOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfaHdfcmF0ZXMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9od19yYXRlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzKQogewogCWludCBpOwpAQCAtNDg0NSw3ICsyMzIzLDcgQEAKIAkJcmF0ZXNbaV0uaHdfdmFsdWUgPSBpOyAvKiBSYXRlIHNjYWxpbmcgd2lsbCB3b3JrIG9uIGluZGV4ZXMgKi8KIAkJcmF0ZXNbaV0uaHdfdmFsdWVfc2hvcnQgPSBpOwogCQlyYXRlc1tpXS5mbGFncyA9IDA7Ci0JCWlmICgoaSA+IElXTF9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgeworCQlpZiAoKGkgPiBJV0wzOV9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgewogCQkJLyoKIAkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCiAJCQkgKi8KQEAgLTQ4NTUsMTQ1ICsyMzMzLDEzIEBACiAJfQogfQogCi0vKioKLSAqIGl3bDM5NDVfaW5pdF9nZW9zIC0gSW5pdGlhbGl6ZSBtYWM4MDIxMSdzIGdlby9jaGFubmVsIGluZm8gYmFzZWQgZnJvbSBlZXByb20KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2luaXRfZ2VvcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmdlb19jaDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzOwotCWludCBpID0gMDsKLQotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8Ci0JICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7Ci0JCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpICoKLQkJCSAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwotCWlmICghY2hhbm5lbHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmF0ZXMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYXRlKSAqIChJV0xfUkFURV9DT1VOVCArIDEpKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghcmF0ZXMpIHsKLQkJa2ZyZWUoY2hhbm5lbHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiA1LjJHSHogY2hhbm5lbHMgc3RhcnQgYWZ0ZXIgdGhlIDIuNEdIeiBjaGFubmVscyAqLwotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9ICZjaGFubmVsc1tBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSldOwotCS8qIGp1c3QgT0ZETSAqLwotCXNiYW5kLT5iaXRyYXRlcyA9ICZyYXRlc1tJV0xfRklSU1RfT0ZETV9SQVRFXTsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UIC0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9IGNoYW5uZWxzOwotCS8qIE9GRE0gJiBDQ0sgKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSByYXRlczsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UOwotCi0JcHJpdi0+aWVlZV9jaGFubmVscyA9IGNoYW5uZWxzOwotCXByaXYtPmllZWVfcmF0ZXMgPSByYXRlczsKLQotCWl3bDM5NDVfaW5pdF9od19yYXRlcyhwcml2LCByYXRlcyk7Ci0KLQlmb3IgKGkgPSAwOyAgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewotCQljaCA9ICZwcml2LT5jaGFubmVsX2luZm9baV07Ci0KLQkJLyogRklYTUU6IG1pZ2h0IGJlIHJlbW92ZWQgaWYgc2NhbiBpcyBPSyovCi0JCWlmICghaXNfY2hhbm5lbF92YWxpZChjaCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaXNfY2hhbm5lbF9hX2JhbmQoY2gpKQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCQllbHNlCi0JCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0KLQkJZ2VvX2NoID0gJnNiYW5kLT5jaGFubmVsc1tzYmFuZC0+bl9jaGFubmVscysrXTsKLQotCQlnZW9fY2gtPmNlbnRlcl9mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoLT5jaGFubmVsKTsKLQkJZ2VvX2NoLT5tYXhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKLQkJZ2VvX2NoLT5tYXhfYW50ZW5uYV9nYWluID0gMHhmZjsKLQkJZ2VvX2NoLT5od192YWx1ZSA9IGNoLT5jaGFubmVsOwotCi0JCWlmIChpc19jaGFubmVsX3ZhbGlkKGNoKSkgewotCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOwotCi0JCQlpZiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOwotCi0JCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9SQURBUjsKLQotCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT5tYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0ID0KLQkJCQkgICAgY2gtPm1heF9wb3dlcl9hdmc7Ci0JCX0gZWxzZSB7Ci0JCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwotCQl9Ci0KLQkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwotCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwotCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MCVYXG4iLAotCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAotCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAotCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/Ci0JCQkJInJlc3RyaWN0ZWQiIDogInZhbGlkIiwKLQkJCQkgZ2VvX2NoLT5mbGFncyk7Ci0JfQotCi0JaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCi0JICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQkJIHByaXYtPmNmZy0+c2t1ICY9IH5JV0xfU0tVX0E7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCSAgICAgICAiOiBUdW5hYmxlIGNoYW5uZWxzOiAlZCA4MDIuMTFiZywgJWQgODAyLjExYSBjaGFubmVsc1xuIiwKLQkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscywKLQkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyk7Ci0KLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscykKLQkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9Ci0JCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpCi0JCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQotCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0Jc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpd2wzOTQ1X2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsMzk0NV9pbml0X2dlb3MKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2dlb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlrZnJlZShwcml2LT5pZWVlX2NoYW5uZWxzKTsKLQlrZnJlZShwcml2LT5pZWVlX3JhdGVzKTsKLQljbGVhcl9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2koc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2koc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2NvZGUpOwogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGEpOwpAQCAtNTAwNywyOSArMjM1MywzMCBAQAogICogaXdsMzk0NV92ZXJpZnlfaW5zdF9mdWxsIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKICAqICAgICBsb29raW5nIGF0IGFsbCBkYXRhLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X2Z1bGwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQogewogCXUzMiB2YWw7CiAJdTMyIHNhdmVfbGVuID0gbGVuOwogCWludCByYyA9IDA7CiAJdTMyIGVycmNudDsKIAotCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCQkgICAgICAgSVdMMzlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCiAJZXJyY250ID0gMDsKIAlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CiAJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQl2YWwgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwogCQkJcmMgPSAtRUlPOwpAQCAtNTAzOSwxMCArMjM4NiwxMSBAQAogCQl9CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmICghZXJyY250KQotCQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUwNTMsMTYgKzI0MDEsMTYgQEAKICAqICAgdXNpbmcgc2FtcGxlIGRhdGEgMTAwIGJ5dGVzIGFwYXJ0LiAgSWYgdGhlc2Ugc2FtcGxlIHBvaW50cyBhcmUgZ29vZCwKICAqICAgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGVtIGlzIGdvb2QsIHRvby4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsIHUzMiBsZW4pCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwogCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTUwNzAsMTIgKzI0MTgsMTIgQEAKIAkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCiAJCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZwogCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCi0JCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKLQkJCWkgKyBSVENfSU5TVF9MT1dFUl9CT1VORCk7Ci0JCXZhbCA9IF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCQlpICsgSVdMMzlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CiAjaWYgMCAvKiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscyAqLwotCQkJSVdMX0VSUk9SKCJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCisJCQlJV0xfRVJSKHByaXYsICJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCiAJCQkJICAib2Zmc2V0IDB4JXgsIGlzIDB4JXgsIHMvYiAweCV4XG4iLAogCQkJCSAgaSwgdmFsLCAqaW1hZ2UpOwogI2VuZGlmCkBAIC01MDg2LDcgKzI0MzQsNyBAQAogCQl9CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUwOTYsNyArMjQ0NCw3IEBACiAgKiBpd2wzOTQ1X3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAogICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJX19sZTMyICppbWFnZTsKIAl1MzIgbGVuOwpAQCAtNTEwNyw3ICsyNDU1LDcgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MTE2LDcgKzI0NjQsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwogCXJjID0gaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKHJjID09IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTEyNSwxMSArMjQ3MywxMSBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwogCXJjID0gaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKHJjID09IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9FUlJPUigiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKKwlJV0xfRVJSKHByaXYsICJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOwogCiAJLyogU2luY2Ugbm90aGluZyBzZWVtcyB0byBtYXRjaCwgc2hvdyBmaXJzdCBzZXZlcmFsIGRhdGEgZW50cmllcyBpbgogCSAqIGluc3RydWN0aW9uIFNSQU0sIHNvIG1heWJlIHZpc3VhbCBpbnNwZWN0aW9uIHdpbGwgZ2l2ZSBhIGNsdWUuCkBAIC01MTQxLDE2MCArMjQ4OSwxMCBAQAogCXJldHVybiByYzsKIH0KIAotCi0vKiBjaGVjayBjb250ZW50cyBvZiBzcGVjaWFsIGJvb3RzdHJhcCB1Q29kZSBTUkFNICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdmVyaWZ5X2JzbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCV9fbGUzMiAqaW1hZ2UgPSBwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQl1MzIgbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47Ci0JdTMyIHJlZzsKLQl1MzIgdmFsOwotCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIHZlcmlmeSBic21cbiIpOwotCi0JLyogdmVyaWZ5IEJTTSBTUkFNIGNvbnRlbnRzICovCi0JdmFsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKLQlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47Ci0JICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKLQkJdmFsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgcmVnKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKLQkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKLQkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAotCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKLQkJCQkgIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfbG9hZF9ic20gLSBMb2FkIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMKLSAqCi0gKiBCU00gb3BlcmF0aW9uOgotICoKLSAqIFRoZSBCb290c3RyYXAgU3RhdGUgTWFjaGluZSAoQlNNKSBzdG9yZXMgYSBzaG9ydCBib290c3RyYXAgdUNvZGUgcHJvZ3JhbQotICogaW4gc3BlY2lhbCBTUkFNIHRoYXQgZG9lcyBub3QgcG93ZXIgZG93biBkdXJpbmcgUkZLSUxMLiAgV2hlbiBwb3dlcmluZyBiYWNrCi0gKiB1cCBhZnRlciBwb3dlci1zYXZpbmcgc2xlZXBzIChvciBkdXJpbmcgaW5pdGlhbCB1Q29kZSBsb2FkKSwgdGhlIEJTTSBsb2FkcwotICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtIGludG8gdGhlIG9uLWJvYXJkIHByb2Nlc3NvciwgYW5kIHN0YXJ0cyBpdC4KLSAqCi0gKiBUaGUgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgKHZpYSBETUEpIGluc3RydWN0aW9ucyBhbmQgZGF0YSBmb3IgYSBuZXcKLSAqIHByb2dyYW0gZnJvbSBob3N0IERSQU0gbG9jYXRpb25zIGluZGljYXRlZCBieSB0aGUgaG9zdCBkcml2ZXIgaW4gdGhlCi0gKiBCU01fRFJBTV8qIHJlZ2lzdGVycy4gIE9uY2UgdGhlIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCwgaXQgc3RhcnRzCi0gKiBhdXRvbWF0aWNhbGx5LgotICoKLSAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBwb2ludHMgdGhlIEJTTSB0byB0aGUKLSAqICJpbml0aWFsaXplIiB1Q29kZSBpbWFnZS4gIFRoaXMgdUNvZGUgc2V0cyB1cCBzb21lIGludGVybmFsIGRhdGEsIHRoZW4KLSAqIG5vdGlmaWVzIGhvc3QgdmlhICJpbml0aWFsaXplIGFsaXZlIiB0aGF0IGl0IGlzIGNvbXBsZXRlLgotICoKLSAqIFRoZSBob3N0IHRoZW4gcmVwbGFjZXMgdGhlIEJTTV9EUkFNXyogcG9pbnRlciB2YWx1ZXMgdG8gcG9pbnQgdG8gdGhlCi0gKiBub3JtYWwgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIGEgYmFja3VwIHVDb2RlIGRhdGEgY2FjaGUgYnVmZmVyCi0gKiAoZmlsbGVkIGluaXRpYWxseSB3aXRoIHN0YXJ0aW5nIGRhdGEgdmFsdWVzIGZvciB0aGUgb24tYm9hcmQgcHJvY2Vzc29yKSwKLSAqIHRoZW4gdHJpZ2dlcnMgdGhlICJpbml0aWFsaXplIiB1Q29kZSB0byBsb2FkIGFuZCBsYXVuY2ggdGhlIHJ1bnRpbWUgdUNvZGUsCi0gKiB3aGljaCBiZWdpbnMgbm9ybWFsIG9wZXJhdGlvbi4KLSAqCi0gKiBXaGVuIGRvaW5nIGEgcG93ZXItc2F2ZSBzaHV0ZG93biwgcnVudGltZSB1Q29kZSBzYXZlcyBkYXRhIFNSQU0gaW50bwotICogdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGluIERSQU0gYmVmb3JlIFNSQU0gaXMgcG93ZXJlZCBkb3duLgotICoKLSAqIFdoZW4gcG93ZXJpbmcgYmFjayB1cCwgdGhlIEJTTSBsb2FkcyB0aGUgYm9vdHN0cmFwIHByb2dyYW0uICBUaGlzIHJlbG9hZHMKLSAqIHRoZSBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGludG8gU1JBTSwKLSAqIGFuZCByZS1sYXVuY2hlcyB0aGUgcnVudGltZSB1Q29kZSBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbG9hZF9ic20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCWRtYV9hZGRyX3QgcGluc3Q7Ci0JZG1hX2FkZHJfdCBwZGF0YTsKLQl1MzIgaW5zdF9sZW47Ci0JdTMyIGRhdGFfbGVuOwotCWludCByYzsKLQlpbnQgaTsKLQl1MzIgZG9uZTsKLQl1MzIgcmVnX29mZnNldDsKLQotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiBsb2FkIGJzbVxuIik7Ci0KLQkvKiBtYWtlIHN1cmUgYm9vdHN0cmFwIHByb2dyYW0gaXMgbm8gbGFyZ2VyIHRoYW4gQlNNJ3MgU1JBTSBzaXplICovCi0JaWYgKGxlbiA+IElXTF9NQVhfQlNNX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCi0JICogICBpbiBob3N0IERSQU0gLi4uIGhvc3QgRFJBTSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgMzE6MCBmb3IgMzk0NS4KLQkgKiBOT1RFOiAgaXdsMzk0NV9pbml0aWFsaXplX2FsaXZlX3N0YXJ0KCkgd2lsbCByZXBsYWNlIHRoZXNlIHZhbHVlcywKLQkgKiAgICAgICAgYWZ0ZXIgdGhlICJpbml0aWFsaXplIiB1Q29kZSBoYXMgcnVuLCB0byBwb2ludCB0bwotCSAqICAgICAgICBydW50aW1lL3Byb3RvY29sIGluc3RydWN0aW9ucyBhbmQgYmFja3VwIGRhdGEgY2FjaGUuICovCi0JcGluc3QgPSBwcml2LT51Y29kZV9pbml0LnBfYWRkcjsKLQlwZGF0YSA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5wX2FkZHI7Ci0JaW5zdF9sZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlkYXRhX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47Ci0KLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywgZGF0YV9sZW4pOwotCi0JLyogRmlsbCBCU00gbWVtb3J5IHdpdGggYm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLwotCWZvciAocmVnX29mZnNldCA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnX29mZnNldCA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnX29mZnNldCArPSBzaXplb2YodTMyKSwgaW1hZ2UrKykKLQkJX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWdfb2Zmc2V0LAotCQkJCQkgIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCi0JcmMgPSBpd2wzOTQ1X3ZlcmlmeV9ic20ocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywKLQkJCQkgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKLQotCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKLQkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAotCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKTsKLQotCS8qIFdhaXQgZm9yIGxvYWQgb2YgYm9vdHN0cmFwIHVDb2RlIHRvIGZpbmlzaCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlkb25lID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHKTsKLQkJaWYgKCEoZG9uZSAmIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWlmIChpIDwgMTAwKQotCQlJV0xfREVCVUdfSU5GTygiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwotCWVsc2UgewotCQlJV0xfRVJST1IoIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgdHJpZ2dlcnMgaXQKLQkgKiAgIChlLmcuIHdoZW4gcG93ZXJpbmcgYmFjayB1cCBhZnRlciBwb3dlci1zYXZlIHNodXRkb3duKSAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCi0JCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4pOwotCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9uaWNfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbmljX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBSZW1vdmUgYWxsIHJlc2V0cyB0byBhbGxvdyBOSUMgdG8gb3BlcmF0ZSAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgMCk7CiB9CiAKIC8qKgpAQCAtNTMwMiw5ICsyNTAwLDkgQEAKICAqCiAgKiBDb3B5IGludG8gYnVmZmVycyBmb3IgY2FyZCB0byBmZXRjaCB2aWEgYnVzLW1hc3RlcmluZwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcmVhZF91Y29kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3Vjb2RlICp1Y29kZTsKKwlzdHJ1Y3QgaXdsX3Vjb2RlICp1Y29kZTsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaW5kZXg7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXc7CiAJLyogZmlybXdhcmUgZmlsZSBuYW1lIGNvbnRhaW5zIHVDb2RlL2RyaXZlciBjb21wYXRpYmlsaXR5IHZlcnNpb24gKi8KQEAgLTUzMjIsNyArMjUyMCw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMldSVzIiwgbmFtZV9wcmUsIGluZGV4LCAiLnVjb2RlIik7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVjb2RlX3JhdywgYnVmLCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiBSZWFzb24gJWRcbiIsCisJCQlJV0xfRVJSKHByaXYsICIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6ICVkXG4iLAogCQkJCSAgYnVmLCByZXQpOwogCQkJaWYgKHJldCA9PSAtRU5PRU5UKQogCQkJCWNvbnRpbnVlOwpAQCAtNTMzMCw5ICsyNTI4LDEyIEBACiAJCQkJZ290byBlcnJvcjsKIAkJfSBlbHNlIHsKIAkJCWlmIChpbmRleCA8IGFwaV9tYXgpCi0JCQkJSVdMX0VSUk9SKCJMb2FkZWQgZmlybXdhcmUgJXMsIHdoaWNoIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKKwkJCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgZmlybXdhcmUgJXMsICIKKwkJCQkJIndoaWNoIGlzIGRlcHJlY2F0ZWQuICIKKwkJCQkJIiBQbGVhc2UgdXNlIEFQSSB2JXUgaW5zdGVhZC5cbiIsCiAJCQkJCSAgYnVmLCBhcGlfbWF4KTsKLQkJCUlXTF9ERUJVR19JTkZPKCJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICIKKwkJCQkgICAgICAgIiglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKIAkJCQkgICAgICAgYnVmLCB1Y29kZV9yYXctPnNpemUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUzNDMsNyArMjU0NCw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KIAlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKLQkJSVdMX0VSUk9SKCJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOworCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTUzNjQsNyArMjU2NSw3IEBACiAJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLwogCiAJaWYgKGFwaV92ZXIgPCBhcGlfbWluIHx8IGFwaV92ZXIgPiBhcGlfbWF4KSB7Ci0JCUlXTF9FUlJPUigiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCisJCUlXTF9FUlIocHJpdiwgIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgogCQkJICAiRHJpdmVyIHN1cHBvcnRzIHYldSwgZmlybXdhcmUgaXMgdiV1LlxuIiwKIAkJCSAgYXBpX21heCwgYXBpX3Zlcik7CiAJCXByaXYtPnVjb2RlX3ZlciA9IDA7CkBAIC01MzcyLDIzICsyNTczLDI5IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChhcGlfdmVyICE9IGFwaV9tYXgpCi0JCUlXTF9FUlJPUigiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgJXUsICIKKwkJSVdMX0VSUihwcml2LCAiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgJXUsICIKIAkJCSAgImdvdCAldS4gTmV3IGZpcm13YXJlIGNhbiBiZSBvYnRhaW5lZCAiCiAJCQkgICJmcm9tIGh0dHA6Ly93d3cuaW50ZWxsaW51eHdpcmVsZXNzLm9yZy5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAotCQkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfTUlOT1IocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciB1Y29kZSB2ZXJzaW9uIHJhdyA9IDB4JXhcbiIsCisJSVdMX0lORk8ocHJpdiwgImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAorCQlJV0xfVUNPREVfTUFKT1IocHJpdi0+dWNvZGVfdmVyKSwKKwkJSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKKwkJSVdMX1VDT0RFX1NFUklBTChwcml2LT51Y29kZV92ZXIpKTsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAogCQkgICAgICAgcHJpdi0+dWNvZGVfdmVyKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgaW5zdCBzaXplID0gJXVcbiIsIGluc3Rfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLCBkYXRhX3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwgaW5pdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgZGF0YSBzaXplID0gJXVcbiIsIGluaXRfZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsIGJvb3Rfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgaW5zdF9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgZGF0YSBzaXplID0gJXVcbiIsCisJCSAgICAgICBkYXRhX3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluaXRfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgaW5pdF9kYXRhX3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgYm9vdCBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGJvb3Rfc2l6ZSk7CiAKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCkBAIC01Mzk2LDQwICsyNjAzLDQzIEBACiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgKGludCl1Y29kZV9yYXctPnNpemUpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICV6ZCB0b28gc21hbGxcbiIsCisJCQkgICAgICAgdWNvZGVfcmF3LT5zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBWZXJpZnkgdGhhdCB1Q29kZSBpbWFnZXMgd2lsbCBmaXQgaW4gY2FyZCdzIFNSQU0gKi8KLQlpZiAoaW5zdF9zaXplID4gSVdMX01BWF9JTlNUX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbnN0X3NpemUgPiBJV0wzOV9NQVhfSU5TVF9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBpbnN0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAotCWlmIChkYXRhX3NpemUgPiBJV0xfTUFYX0RBVEFfU0laRSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoZGF0YV9zaXplID4gSVdMMzlfTUFYX0RBVEFfU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBkYXRhX3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KLQlpZiAoaW5pdF9zaXplID4gSVdMX01BWF9JTlNUX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGluaXRfc2l6ZSA+IElXTDM5X01BWF9JTlNUX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgaW5pdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlpbml0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KLQlpZiAoaW5pdF9kYXRhX3NpemUgPiBJV0xfTUFYX0RBVEFfU0laRSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbml0X2RhdGFfc2l6ZSA+IElXTDM5X01BWF9EQVRBX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWluaXRfZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGJvb3Rfc2l6ZSA+IElXTF9NQVhfQlNNX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGJvb3QgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGJvb3Rfc2l6ZSA+IElXTDM5X01BWF9CU01fU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWJvb3Rfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CkBAIC01NDc5LDE2ICsyNjg5LDE4IEBACiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbMF07CiAJbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBpbnN0ciBsZW4gJXpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgc3JjLCBsZW4pOwotCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCiAJCXByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCAodTMyKXByaXYtPnVjb2RlX2NvZGUucF9hZGRyKTsKIAogCS8qIFJ1bnRpbWUgZGF0YSAoMm5kIGJsb2NrKQogCSAqIE5PVEU6ICBDb3B5IGludG8gYmFja3VwIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW4gaXdsMzk0NV91cCgpICAqLwogCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2RhdGEubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgc3JjLCBsZW4pOwogCkBAIC01NDk2LDggKzI3MDgsOCBAQAogCWlmIChpbml0X3NpemUpIHsKIAkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07CiAJCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlWmRcbiIsCi0JCQkgICAgICAgbGVuKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXQudl9hZGRyLCBzcmMsIGxlbik7CiAJfQogCkBAIC01NTA1LDE2ICsyNzE3LDE2IEBACiAJaWYgKGluaXRfZGF0YV9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVkXG4iLAotCQkJICAgICAgIChpbnQpbGVuKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgZGF0YSBsZW4gJXpkXG4iLCBsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCX0KIAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVkXG4iLAotCQkgICAgICAgKGludClsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfYm9vdC52X2FkZHIsIHNyYywgbGVuKTsKIAogCS8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqLwpAQCAtNTUyMiw3ICsyNzM0LDcgQEAKIAlyZXR1cm4gMDsKIAogIGVycl9wY2lfYWxsb2M6Ci0JSVdMX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgcGNpIG1lbW9yeVxuIik7CisJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOwogCXJldCA9IC1FTk9NRU07CiAJaXdsMzk0NV9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIApAQCAtNTU0Myw3ICsyNzU1LDcgQEAKICAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGVtIHRvIGxvYWQgcnVudGltZSB1Q29kZSBpbnN0IGFuZCBkYXRhLAogICogYW5kIHRvIHNhdmUgcnVudGltZSBkYXRhIHdoZW4gcG93ZXJpbmcgZG93bi4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NldF91Y29kZV9wdHJzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3Vjb2RlX3B0cnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWRtYV9hZGRyX3QgcGluc3Q7CiAJZG1hX2FkZHJfdCBwZGF0YTsKQEAgLTU1NTUsMjggKzI3NjcsMjggQEAKIAlwZGF0YSA9IHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnBfYWRkcjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgaW1hZ2UgdG8gbG9hZCAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCiAJCQkJIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKIAogCS8qIEluc3QgYnl0ZSBjb3VudCBtdXN0IGJlIGxhc3QgdG8gc2V0IHVwLCBiaXQgMzEgc2lnbmFscyB1Q29kZQogCSAqICAgdGhhdCBhbGwgbmV3IHB0ci9zaXplIGluZm8gaXMgaW4gcGxhY2UgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLAorCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywKIAkJCQkgcHJpdi0+dWNvZGVfY29kZS5sZW4gfCBCU01fRFJBTV9JTlNUX0xPQUQpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIHBvaW50ZXJzIGFyZSBzZXQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01NTg4LDEzICsyODAwLDEzIEBACiAgKgogICogVGVsbCAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gZ28gYWhlYWQgYW5kIGxvYWQgdGhlIHJ1bnRpbWUgdUNvZGUuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBDaGVjayBhbGl2ZSByZXNwb25zZSBmb3IgInZhbGlkIiBzaWduIGZyb20gdUNvZGUgKi8KIAlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC01NjA0LDE4ICsyODE2LDE4IEBACiAJaWYgKGl3bDM5NDVfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCS8qIFNlbmQgcG9pbnRlcnMgdG8gcHJvdG9jb2wvcnVudGltZSB1Q29kZSBpbWFnZSAuLi4gaW5pdCBjb2RlIHdpbGwKIAkgKiBsb2FkIGFuZCBsYXVuY2ggcnVudGltZSB1Q29kZSwgd2hpY2ggd2lsbCBzZW5kIHVzIGFub3RoZXIgIkFsaXZlIgogCSAqIG5vdGlmaWNhdGlvbi4gKi8KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAlpZiAoaXdsMzk0NV9zZXRfdWNvZGVfcHRycyhwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd29uJ3QgaGFwcGVuOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvdWxkbid0IHNldCB1cCB1Q29kZSBwb2ludGVycy5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXJldHVybjsKQEAgLTU2MzQsMTggKzI4NDYsMTggQEAKICAqICAgICAgICAgICAgICAgICAgIGZyb20gcHJvdG9jb2wvcnVudGltZSB1Q29kZSAoaW5pdGlhbGl6YXRpb24gdUNvZGUncwogICogICAgICAgICAgICAgICAgICAgQWxpdmUgZ2V0cyBoYW5kbGVkIGJ5IGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgdGhlcm1hbF9zcGluID0gMDsKIAl1MzIgcmZraWxsOwogCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCiAJaWYgKHByaXYtPmNhcmRfYWxpdmUuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNTY1NSwyMSArMjg2NywyMSBAQAogCWlmIChpd2wzOTQ1X3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCiAJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIFJGS0lMTCBzdGF0dXMgZnJvbSBhZGFwdGVyXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBSRktJTEwgc3RhdHVzIGZyb20gYWRhcHRlclxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlyZmtpbGwgPSBpd2wzOTQ1X3JlYWRfcHJwaChwcml2LCBBUE1HX1JGS0lMTF9SRUcpOwotCUlXTF9ERUJVR19JTkZPKCJSRktJTEwgc3RhdHVzOiAweCV4XG4iLCByZmtpbGwpOwotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXJma2lsbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19SRktJTExfUkVHKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkZLSUxMIHN0YXR1czogMHgleFxuIiwgcmZraWxsKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJaWYgKHJma2lsbCAmIDB4MSkgewogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtNTY4MSw3ICsyODkzLDcgQEAKIAkJfQogCiAJCWlmICh0aGVybWFsX3NwaW4pCi0JCQlJV0xfREVCVUdfSU5GTygiVGhlcm1hbCBjYWxpYnJhdGlvbiB0b29rICVkdXNcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVGhlcm1hbCBjYWxpYnJhdGlvbiB0b29rICVkdXNcbiIsCiAJCQkJICAgICAgIHRoZXJtYWxfc3BpbiAqIDEwKTsKIAl9IGVsc2UKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CkBAIC01NjkyLDcgKzI5MDQsNyBAQAogCS8qIENsZWFyIG91dCB0aGUgdUNvZGUgZXJyb3IgYml0IGlmIGl0IGlzIHNldCAqLwogCWNsZWFyX2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOwogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlyZXR1cm47CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOwpAQCAtNTcwMCw5ICsyOTEyLDkgQEAKIAlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7CiAJcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7CiAKLQlpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSkpOworCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICphY3RpdmVfcnhvbiA9CiAJCQkJKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICopKCZwcml2LT5hY3RpdmVfcnhvbik7CiAKQEAgLTU3MTEsMTIgKzI5MjMsMTEgQEAKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCX0gZWxzZSB7CiAJCS8qIEluaXRpYWxpemUgb3VyIHJ4X2NvbmZpZyBkYXRhICovCi0JCWl3bDM5NDVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBwcml2LT5pd19tb2RlKTsKLQkJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIHByaXYtPml3X21vZGUpOwogCX0KIAogCS8qIENvbmZpZ3VyZSBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIHN1cHBvcnQgKi8KLQlpd2wzOTQ1X3NlbmRfYnRfY29uZmlnKHByaXYpOworCWl3bF9zZW5kX2J0X2NvbmZpZyhwcml2KTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBmb3IgdW5hc3NvY2lhdGVkIG9wZXJhdGlvbiAqLwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CkBAIC01NzI1LDcgKzI5MzYsNyBAQAogCiAJaXdsMzk0NV9sZWRfcmVnaXN0ZXIocHJpdik7CiAKLQlJV0xfREVCVUdfSU5GTygiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7CiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIApAQCAtNTc0NiwxNSArMjk1NywxNSBAQAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7CitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV9kb3duKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBfX2l3bDM5NDVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKIAotCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBnb2luZyBkb3duXG4iKTsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCkBAIC01NzczLDExICsyOTg0LDExIEBACiAJCWNsZWFyX2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAogCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CiAKIAkvKiB0ZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CiAKQEAgLTU3ODYsNyArMjk5Nyw3IEBACiAKIAkvKiBJZiB3ZSBoYXZlIG5vdCBwcmV2aW91c2x5IGNhbGxlZCBpd2wzOTQ1X2luaXQoKSB0aGVuCiAJICogY2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsIGFuZCBTVVNQRU5EIGJpdHMgYW5kIHJldHVybiAqLwotCWlmICghaXdsMzk0NV9pc19pbml0KHByaXYpKSB7CisJaWYgKCFpd2xfaXNfaW5pdChwcml2KSkgewogCQlwcml2LT5zdGF0dXMgPSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPDwKIAkJCQkJU1RBVFVTX1JGX0tJTExfSFcgfAogCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSA8PApAQCAtNTgxNSwyOSArMzAyNiwzMSBAQAogCQkJdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgPDwKIAkJCQlTVEFUVVNfRVhJVF9QRU5ESU5HOwogCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5yZXNldChwcml2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKwlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChwcml2KTsKIAlpd2wzOTQ1X2h3X3J4cV9zdG9wKHByaXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAorCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXVkZWxheSg1KTsKIAotCWl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHByaXYpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7Ci0JaXdsMzk0NV9od19uaWNfcmVzZXQocHJpdik7CisJaWYgKGV4aXRfcGVuZGluZyB8fCB0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc3RvcChwcml2KTsKKwllbHNlCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMucmVzZXQocHJpdik7CiAKICBleGl0OgotCW1lbXNldCgmcHJpdi0+Y2FyZF9hbGl2ZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3ApKTsKKwltZW1zZXQoJnByaXYtPmNhcmRfYWxpdmUsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApKTsKIAogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5pYnNzX2JlYWNvbik7CkBAIC01ODQ3LDcgKzMwNjAsNyBAQAogCWl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZG93bihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kb3duKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJX19pd2wzOTQ1X2Rvd24ocHJpdik7CkBAIC01ODU4LDU4ICszMDcxLDU4IEBACiAKICNkZWZpbmUgTUFYX0hXX1JFU1RBUlRTIDUKIAotc3RhdGljIGludCBfX2l3bDM5NDVfdXAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgX19pd2wzOTQ1X3VwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMsIGk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX1dBUk5JTkcoIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBTVyBSRiBraWxsIChtb2R1bGUgIgorCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgU1cgUkYga2lsbCAobW9kdWxlICIKIAkJCSAgICAicGFyYW1ldGVyKVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICghcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkcikgewotCQlJV0xfRVJST1IoInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZyB1cFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZyB1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCi0JaWYgKGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgorCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCWVsc2UgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBIVyBSRiBLaWxsIHN3aXRjaFxuIik7CisJCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CiAKIAlyYyA9IGl3bDM5NDVfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGludCBuaWNcbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW50IG5pY1xuIik7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAogCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX0NNRF9CTE9DS0VEKTsKIAogCS8qIGNsZWFyIChhZ2FpbiksIHRoZW4gZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCS8qIHJlYWxseSBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKIAogCS8qIENvcHkgb3JpZ2luYWwgdWNvZGUgZGF0YSBpbWFnZSBmcm9tIGRpc2sgaW50byBiYWNrdXAgY2FjaGUuCiAJICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgb24tYm9hcmQgcHJvY2Vzc29yJ3MKQEAgLTU5MjgsMTcgKzMxNDEsMTggQEAKIAkJLyogbG9hZCBib290c3RyYXAgc3RhdGUgbWFjaGluZSwKIAkJICogbG9hZCBib290c3RyYXAgcHJvZ3JhbSBpbnRvIHByb2Nlc3NvcidzIG1lbW9yeSwKIAkJICogcHJlcGFyZSB0byBsb2FkIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQkJcmMgPSBpd2wzOTQ1X2xvYWRfYnNtKHByaXYpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJjKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByYyk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwogCQlpd2wzOTQ1X25pY19zdGFydChwcml2KTsKIAotCQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC01OTQ5LDcgKzMxNjMsNyBAQAogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNTk2Miw4ICszMTc2LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIGluaXRfYWxpdmVfc3RhcnQud29yayk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgaW5pdF9hbGl2ZV9zdGFydC53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNTk3NSw4ICszMTg5LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19hbGl2ZV9zdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNTk4Niw2NiArMzIwMCwzMSBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3JmX2tpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yZmtpbGxfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByZl9raWxsKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZmtpbGxfcG9sbC53b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKwlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpCisJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJZWxzZQorCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnN0YXR1cykgIT0gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQorCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwpOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMiAqIEhaKSk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SRl9LSUxMLAotCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCi0JCQkgICJkZXZpY2VcbiIpOwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9IGVsc2UgewotCi0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQotCQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCQkgICJkaXNhYmxlZCBieSBTVyBzd2l0Y2hcbiIpOwotCQllbHNlCi0JCQlJV0xfV0FSTklORygiUmFkaW8gRnJlcXVlbmN5IEtpbGwgU3dpdGNoIGlzIE9uOlxuIgotCQkJCSAgICAiS2lsbCBzd2l0Y2ggbXVzdCBiZSB0dXJuZWQgb2ZmIGZvciAiCi0JCQkJICAgICJ3aXJlbGVzcyBuZXR3b3JraW5nIHRvIHdvcmsuXG4iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiB9CiAKICNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHNjYW5fY2hlY2sud29yayk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sCi0JCQkgICJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nIGFkYXB0ZXIgKCVkbXMpXG4iLAotCQkJICBqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCWl3bDM5NDVfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgcmVxdWVzdF9zY2FuKTsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVxdWVzdF9zY2FuKTsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQpLAogCQkubWV0YS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCkBAIC02MDYxLDggKzMyNDAsOCBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9XQVJOSU5HKCJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9XQVJOKHByaXYsICJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02MDc0LDM0ICszMjUzLDM2IEBACiAJLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9yIHNjaGVkdWxlZCBpZiB0aGVyZSBpcyBjdXJyZW50bHkKIAkgKiBhIHNjYW4gYWN0aXZlIGluIHRoZSBoYXJkd2FyZS4gKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKLQkJCSAgICAgICAiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyAgIgorCQkJCSJJZ25vcmluZyBzZWNvbmQgcmVxdWVzdC5cbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwKKwkJCSJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsCisJCQkiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghcHJpdi0+c2Nhbl9iYW5kcykgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjExOSwxNCArMzMwMCwxNCBAQAogCXNjYW4tPnF1aWV0X3BsY3BfdGggPSBJV0xfUExDUF9RVUlFVF9USFJFU0g7CiAJc2Nhbi0+cXVpZXRfdGltZSA9IElXTF9BQ1RJVkVfUVVJRVRfVElNRTsKIAotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJdTE2IGludGVydmFsID0gMDsKIAkJdTMyIGV4dHJhOwogCQl1MzIgc3VzcGVuZF90aW1lID0gMTAwOwogCQl1MzIgc2Nhbl9zdXNwZW5kX3RpbWUgPSAxMDA7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJSVdMX0RFQlVHX0lORk8oIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJaW50ZXJ2YWwgPSBwcml2LT5iZWFjb25faW50OwpAQCAtNjE0OCwxNSArMzMyOSwxNCBAQAogCQkgICAgKGV4dHJhIHwgKChzdXNwZW5kX3RpbWUgJSBpbnRlcnZhbCkgKiAxMDI0KSk7CiAKIAkJc2Nhbi0+c3VzcGVuZF90aW1lID0gY3B1X3RvX2xlMzIoc2Nhbl9zdXNwZW5kX3RpbWUpOwotCQlJV0xfREVCVUdfU0NBTigic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJICAgICAgIHNjYW5fc3VzcGVuZF90aW1lLCBpbnRlcnZhbCk7CiAJfQogCiAJLyogV2Ugc2hvdWxkIGFkZCB0aGUgYWJpbGl0eSBmb3IgdXNlciB0byBsb2NrIHRvIFBBU1NJVkUgT05MWSAqLwogCWlmIChwcml2LT5vbmVfZGlyZWN0X3NjYW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4KLQkJICAgICgiS2lja2luZyBvZmYgb25lIGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAotCQkgICAgIHByaW50X3NzaWQoc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWQsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJLaWNraW5nIG9mZiBvbmUgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCisJCQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZCwKIAkJCQlwcml2LT5kaXJlY3Rfc3NpZF9sZW4pKTsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uaWQgPSBXTEFOX0VJRF9TU0lEOwogCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5sZW4gPSBwcml2LT5kaXJlY3Rfc3NpZF9sZW47CkBAIC02MTY0LDE1ICszMzQ0LDEyIEBACiAJCSAgICAgICBwcml2LT5kaXJlY3Rfc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKIAkJbl9wcm9iZXMrKzsKIAl9IGVsc2UKLQkJSVdMX0RFQlVHX1NDQU4oIktpY2tpbmcgb2ZmIG9uZSBpbmRpcmVjdCBzY2FuLlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJLaWNraW5nIG9mZiBvbmUgaW5kaXJlY3Qgc2Nhbi5cbiIpOwogCiAJLyogV2UgZG9uJ3QgYnVpbGQgYSBkaXJlY3Qgc2NhbiBwcm9iZSByZXF1ZXN0OyB0aGUgdUNvZGUgd2lsbCBkbwogCSAqIHRoYXQgYmFzZWQgb24gdGhlIGRpcmVjdF9tYXNrIGFkZGVkIHRvIGVhY2ggY2hhbm5lbCBlbnRyeSAqLwotCXNjYW4tPnR4X2NtZC5sZW4gPSBjcHVfdG9fbGUxNigKLQkJaXdsMzk0NV9maWxsX3Byb2JlX3JlcShwcml2LCAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKLQkJCUlXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOwogCXNjYW4tPnR4X2NtZC50eF9mbGFncyA9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0Jc2Nhbi0+dHhfY21kLnN0YV9pZCA9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXNjYW4tPnR4X2NtZC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAogCS8qIGZsYWdzICsgcmF0ZSBzZWxlY3Rpb24gKi8KQEAgLTYxODcsMTAgKzMzNjQsMTUgQEAKIAkJc2Nhbi0+Z29vZF9DUkNfdGggPSBJV0xfR09PRF9DUkNfVEg7CiAJCWJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwogCX0gZWxzZSB7Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCisJCWl3bF9maWxsX3Byb2JlX3JlcShwcml2LCBiYW5kLAorCQkJCSAgIChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCSAgIElXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOworCiAJLyogc2VsZWN0IFJ4IGFudGVubmFzICovCiAJc2Nhbi0+ZmxhZ3MgfD0gaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhwcml2KTsKIApAQCAtNjIwMyw3ICszMzg1LDcgQEAKIAkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKIAogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKLQkJSVdMX0RFQlVHX1NDQU4oImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTYyMTMsNyArMzM5NSw3IEBACiAJc2Nhbi0+bGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbik7CiAKIAlzZXRfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJZ290byBkb25lOwogCkBAIC02MjM5LDcgKzM0MjEsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHVwKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCB1cCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTYyNDcsMTIgKzM0MjksMTIgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJX19pd2wzOTQ1X3VwKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHJlc3RhcnQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlc3RhcnQpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02MjYzLDggKzM0NDUsOCBAQAogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByeF9yZXBsZW5pc2gpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJ4X3JlcGxlbmlzaCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTYyNzYsMTggKzM0NTgsMTggQEAKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQlJV0xfRVJST1IoIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKKwkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCiAKLQlJV0xfREVCVUdfQVNTT0MoIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKQEAgLTYyOTYsMjYgKzM0NzgsMjYgQEAKIAlpZiAoIXByaXYtPnZpZiB8fCAhcHJpdi0+aXNfb3BlbikKIAkJcmV0dXJuOwogCi0JaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CisJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMjAwKTsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAKLQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl90aW1lX2NtZCkpOworCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKIAlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOwotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAogCQkJICAgICAgc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwgJnByaXYtPnJ4b25fdGltaW5nKTsKIAlpZiAocmMpCi0JCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gY3B1X3RvX2xlMTYocHJpdi0+YXNzb2NfaWQpOwogCi0JSVdMX0RFQlVHX0FTU09DKCJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YmVhY29uX2ludCk7CiAKIAlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTYzNTUsNTYgKzM1MzcsMTkgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQkgSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAorCQkgSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKIAkJCSAgIF9fZnVuY19fLCBwcml2LT5pd19tb2RlKTsKIAkJYnJlYWs7CiAJfQogCi0JaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKIAogCS8qIHdlIGhhdmUganVzdCBhc3NvY2lhdGVkLCBkb24ndCBzdGFydCBzY2FuIHRvbyBlYXJseSAqLwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU47CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBhYm9ydF9zY2FuKTsKLQotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0Jc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JaXdsMzk0NV9zZW5kX3NjYW5fYWJvcnQocHJpdik7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBzY2FuX2NvbXBsZXRlZCk7Ci0KLQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfU0NBTiwgIlNDQU4gY29tcGxldGUgc2NhblxuIik7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9tYWNfY29uZmlnKHByaXYtPmh3LCAwKTsKLQotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odyk7Ci0KLQkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKLQkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBtYWM4MDIxMSBlbnRyeSBwb2ludCBmdW5jdGlvbnMKQEAgLTY0MTUsMzYgKzM1NjAsMjIgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJldDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpKSB7Ci0JCUlXTF9FUlJPUigiRmFpbCB0byBwY2lfZW5hYmxlX2RldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwY2lfcmVzdG9yZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgaXdsMzk0NV9pc3IsIElSUUZfU0hBUkVELAotCQkJICBEUlZfTkFNRSwgcHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOwotCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCkpOworCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7CiAJLyogZmV0Y2ggdWNvZGUgZmlsZSBmcm9tIGRpc2ssIGFsbG9jIGFuZCBjb3B5IHRvIGJ1cy1tYXN0ZXIgYnVmZmVycyAuLi4KIAkgKiB1Y29kZSBmaWxlbmFtZSBhbmQgbWF4IHNpemVzIGFyZSBjYXJkLXNwZWNpZmljLiAqLwogCiAJaWYgKCFwcml2LT51Y29kZV9jb2RlLmxlbikgewogCQlyZXQgPSBpd2wzOTQ1X3JlYWRfdWNvZGUocHJpdik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHJlYWQgbWljcm9jb2RlOiAlZFxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCQl9CkBAIC02NDU0LDEyICszNTg1LDEyIEBACiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0IFVQIHdvcmsuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnQgVVAgd29yay5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CkBAIC02NDcxLDg2ICszNjAyLDg3IEBACiAJCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiV2FpdCBmb3IgU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOworCQkJSVdMX0VSUihwcml2LAorCQkJCSJXYWl0IGZvciBTVEFSVF9BTElWRSB0aW1lb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCQl9CiAJfQogCisJLyogdWNvZGUgaXMgcnVubmluZyBhbmQgd2lsbCBzZW5kIHJma2lsbCBub3RpZmljYXRpb25zLAorCSAqIG5vIG5lZWQgdG8gcG9sbCB0aGUga2lsbHN3aXRjaCBzdGF0ZSBhbnltb3JlICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZraWxsX3BvbGwpOworCiAJcHJpdi0+aXNfb3BlbiA9IDE7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiAKIG91dF9yZWxlYXNlX2lycToKLQlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOwotb3V0X2Rpc2FibGVfbXNpOgotCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGNpX2Rldik7CiAJcHJpdi0+aXNfb3BlbiA9IDA7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGZhaWxlZFxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGZhaWxlZFxuIik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghcHJpdi0+aXNfb3BlbikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2tpcFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBza2lwXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaXYtPmlzX29wZW4gPSAwOwogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CiAJCS8qIHN0b3AgbWFjLCBjYW5jZWwgYW55IHNjYW4gcmVxdWVzdCBhbmQgY2xlYXIKIAkJICogUlhPTl9GSUxURVJfQVNTT0NfTVNLIEJJVAogCQkgKi8KIAkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJfQogCiAJaXdsMzk0NV9kb3duKHByaXYpOwogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX3NhdmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJLyogc3RhcnQgcG9sbGluZyB0aGUga2lsbHN3aXRjaCBzdGF0ZSBhZ2FpbiAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMiAqIEhaKSk7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCUlXTF9ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCisJSVdMX0RFQlVHX1RYKHByaXYsICJkZXYtPnhtaXQoJWQgYnl0ZXMpIGF0IHJhdGUgMHglMDJ4XG4iLCBza2ItPmxlbiwKIAkJICAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSktPmJpdHJhdGUpOwogCiAJaWYgKGl3bDM5NDVfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CiAKIAlpZiAocHJpdi0+dmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKQEAgLTY1NjMsMTYgKzM2OTUsMTYgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJTZXQ6ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIlNldDogJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CiAJCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9CiAKLQlpZiAoaXdsMzk0NV9pc19yZWFkeShwcml2KSkKKwlpZiAoaXdsX2lzX3JlYWR5KHByaXYpKQogCQlpd2wzOTQ1X3NldF9tb2RlKHByaXYsIGNvbmYtPnR5cGUpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU4NSwyNCArMzcxNywyNSBAQAogICovCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodW5saWtlbHkoIWl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuICYmCisJaWYgKHVubGlrZWx5KCFpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuICYmCiAJCSAgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAkJc2V0X2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwpAQCAtNjYxMCwyNSArMzc0MywyNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKLQkJCQkJICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOworCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLAorCQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIFslZF0gaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKLQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LAorCQkJCSJDaGFubmVsICVkIFslZF0gaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKKwkJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbCk7CiAKLQlpd2wzOTQ1X3NldF9mbGFnc19mb3JfcGh5bW9kZShwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwogCiAJLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAogCSAqIGZvciBlYWNoIHBoeW1vZGU7IHNpbmNlIHRoZSBwaHltb2RlIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0CiAJICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTY2MzksMjggKzM3NzMsMzYgQEAKIAl9CiAjZW5kaWYKIAotCWl3bDM5NDVfcmFkaW9fa2lsbF9zdyhwcml2LCAhY29uZi0+cmFkaW9fZW5hYmxlZCk7CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRCkgeworCQlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJgorCQkgICAgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHByaXYpKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYtS0lMTCAtICIKKwkJCQkJCSAid2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQkJZ290byBvdXQ7CisJCX0KIAotCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOwotCQlnb3RvIG91dDsKKwkJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7CisJCQlpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHByaXYpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHJhZGlvIGRpc2FibGVkXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBraWxsXG4iKTsKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYga2lsbFxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAotCWl3bDM5NDVfc2V0X3JhdGUocHJpdik7CisJaXdsX3NldF9yYXRlKHByaXYpOwogCiAJaWYgKG1lbWNtcCgmcHJpdi0+YWN0aXZlX3J4b24sCiAJCSAgICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKSkKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAllbHNlCi0JCUlXTF9ERUJVR19JTkZPKCJObyByZS1zZW5kaW5nIHNhbWUgUlhPTiBjb25maWd1cmF0aW9uLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJOb3QgcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvblxuIik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogb3V0OgogCWNsZWFyX2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTY2NjgsNyArMzgxMCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9jb25maWdfYXAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwogCkBAIC02Njc2LDE5ICszODE4LDIwIEBACiAJCXJldHVybjsKIAogCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGRvbmUgb25seSBhdCBBUCBicmluZyB1cCAqLwotCWlmICghKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkpIHsKKwlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkpIHsKIAogCQkvKiBSWE9OIC0gdW5hc3NvYyAodG8gc2V0IHRpbWluZyBjb21tYW5kKSAqLwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAKIAkJLyogUlhPTiBUaW1pbmcgKi8KLQkJbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQpKTsKKwkJbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl90aW1lX2NtZCkpOwogCQlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOwotCQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAotCQkJCXNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CisJCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKKwkJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLAorCQkJCSAgICAgICZwcml2LT5yeG9uX3RpbWluZyk7CiAJCWlmIChyYykKLQkJCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgogCQkJCQkiQXR0ZW1wdGluZyB0byBjb250aW51ZS5cbiIpOwogCiAJCS8qIEZJWE1FOiB3aGF0IHNob3VsZCBiZSB0aGUgYXNzb2NfaWQgZm9yIEFQPyAqLwpAQCAtNjcxNiw3ICszODU5LDcgQEAKIAkJLyogcmVzdG9yZSBSWE9OIGFzc29jICovCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQlpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIDAsIDApOworCQlpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwLCAwKTsKIAl9CiAJaXdsMzk0NV9zZW5kX2JlYWNvbl9jbWQocHJpdik7CiAKQEAgLTY3MjcsMTYgKzM4NzAsMTYgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJjOwogCiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAocHJpdi0+dmlmICE9IHZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC02NzUzLDEzICszODk2LDEzIEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCi0JaWYgKCFpd2wzOTQ1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChjb25mLT5ic3NpZCkKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQ6ICVwTVxuIiwgY29uZi0+YnNzaWQpOwogCiAvKgogICogdmVyeSBkdWJpb3VzIGNvZGUgd2FzIGhlcmU7IHRoZSBwcm9iZSBmaWx0ZXJpbmcgZmxhZyBpcyBuZXZlciBzZXQ6CkBAIC02NzcyLDcgKzM5MTUsNyBAQAogCQlpZiAoIWNvbmYtPmJzc2lkKSB7CiAJCQljb25mLT5ic3NpZCA9IHByaXYtPm1hY19hZGRyOwogCQkJbWVtY3B5KHByaXYtPmJzc2lkLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZCB3YXMgc2V0IHRvOiAlcE1cbiIsCisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKIAkJCQkJICAgY29uZi0+YnNzaWQpOwogCQl9CiAJCWlmIChwcml2LT5pYnNzX2JlYWNvbikKQEAgLTY3ODEsMTcgKzM5MjQsMTcgQEAKIAkJcHJpdi0+aWJzc19iZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAl9CiAKLQlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpCisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCiAJCWdvdG8gZG9uZTsKIAogCWlmIChjb25mLT5ic3NpZCAmJiAhaXNfemVyb19ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKSAmJgogCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpKSB7CiAJCS8qIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIEhXIHNjYW4gZ29pbmcgb24gaW4gdGhlIGJhY2tncm91bmQKIAkJICogdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBpdCBlbHNlIHRoZSBSWE9OIGJlbG93IHdpbGwgZmFpbC4gKi8KLQkJaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7Ci0JCQlJV0xfV0FSTklORygiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzICIKKwkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKKwkJCUlXTF9XQVJOKHByaXYsICJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgIgogCQkJCSAgICAiYWZ0ZXIgMTAwbXNcbiIpOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZzpzY2FuIGFib3J0IGZhaWxlZFxuIik7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CkBAIC02ODEzLDc1ICszOTU2LDI5IEBACiAJCX0KIAogCX0gZWxzZSB7Ci0JCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJfQogCiAgZG9uZToKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlfX2xlMzIgKmZpbHRlcl9mbGFncyA9ICZwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJFbnRlcjogY2hhbmdlZDogMHgleCwgdG90YWw6IDB4JXhcbiIsCi0JCQljaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9NSVNDX0lOX0JTUykpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX1BST01JU0NfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSzsKLQl9Ci0KLQkvKiBXZSBhdm9pZCBpd2xfY29tbWl0X3J4b24gaGVyZSB0byBjb21taXQgdGhlIG5ldyBmaWx0ZXIgZmxhZ3MKLQkgKiBzaW5jZSBtYWM4MDIxMSB3aWxsIGNhbGwgaWVlZTgwMjExX2h3X2NvbmZpZyBpbW1lZGlhdGVseS4KLQkgKiAobWNfbGlzdCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSkuIE90aGVyd2lzZSwgd2UgbmVlZCB0bwotCSAqIHF1ZXVlIGEgYmFja2dyb3VuZCBpd2xfY29tbWl0X3J4b24gd29yay4KLQkgKi8KLQotCSp0b3RhbF9mbGFncyAmPSBGSUZfT1RIRVJfQlNTIHwgRklGX0FMTE1VTFRJIHwgRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0NPTlRST0w7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bDM5NDVfbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmIChpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCX0KQEAgLTY4OTEsNyArMzk4OCw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQyAoSFoqNikKQEAgLTY5MDEsMjEgKzM5OTgsMjMgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQkJCSAgICAgdTMyIGNoYW5nZXMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9QUkVBTUJMRSAlZFxuIiwKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfUFJFQU1CTEUgJWRcbiIsCiAJCQkJICAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAkJZWxzZQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KKwkJCQl+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRVJQX0NUUyAlZFxuIiwgYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRVJQX0NUUyAlZFxuIiwKKwkJCQkgICBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKIAkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QgJiYgKHByaXYtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwogCQllbHNlCkBAIC02OTIzLDcgKzQwMjIsNyBAQAogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKIAkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkCiAJCSAqIG5ldmVyIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLwogCQlpZiAoV0FSTl9PTl9PTkNFKGluX2ludGVycnVwdCgpKSkKQEAgLTY5MzEsMTAgKzQwMzAsOSBAQAogCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCQlwcml2LT5hc3NvY19pZCA9IGJzc19jb25mLT5haWQ7CiAJCQlwcml2LT5iZWFjb25faW50ID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7Ci0JCQlwcml2LT50aW1lc3RhbXAwID0gYnNzX2NvbmYtPnRpbWVzdGFtcCAmIDB4RkZGRkZGRkY7Ci0JCQlwcml2LT50aW1lc3RhbXAxID0gKGJzc19jb25mLT50aW1lc3RhbXAgPj4gMzIpICYKLQkJCQkJICAgICAweEZGRkZGRkZGOworCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKIAkJCXByaXYtPmFzc29jX2NhcGFiaWxpdHkgPSBic3NfY29uZi0+YXNzb2NfY2FwYWJpbGl0eTsKKwkJCXByaXYtPnBvd2VyX2RhdGEuZHRpbV9wZXJpb2QgPSBic3NfY29uZi0+ZHRpbV9wZXJpb2Q7CiAJCQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IGppZmZpZXMgKwogCQkJCQlJV0xfREVMQVlfTkVYVF9TQ0FOX0FGVEVSX0FTU09DOwogCQkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtNjk0MiwxNDMgKzQwNDAsOTEgQEAKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQl9IGVsc2UgewogCQkJcHJpdi0+YXNzb2NfaWQgPSAwOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJESVNBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LAorCQkJCQkiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CiAJCX0KLQl9IGVsc2UgaWYgKGNoYW5nZXMgJiYgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX2lkKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CisJfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX2lkKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwKKwkJCQkJIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CiAJCQlpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKIAl9CiAKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCURFQ0xBUkVfU1NJRF9CVUYoc3NpZF9idWYpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlyYyA9IC1FSU87Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHkgb3IgZXhpdCBwZW5kaW5nXG4iKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qIHdlIGRvbid0IHNjaGVkdWxlIHNjYW4gd2l0aGluIG5leHRfc2Nhbl9qaWZmaWVzIHBlcmlvZCAqLwotCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgotCQkJdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKLQkJcmMgPSAtRUFHQUlOOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5IGZvciBhIGJyb2FkY2FzdCBzY2FuICovCi0JaWYgKChsZW4gPT0gMCkgJiYgcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgJiYKLQkgICAgdGltZV9hZnRlcihwcml2LT5sYXN0X3NjYW5famlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU4sCi0JCSAgICAgICBqaWZmaWVzKSkgewotCQlyYyA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JaWYgKGxlbikgewotCQlJV0xfREVCVUdfU0NBTigiZGlyZWN0IHNjYW4gZm9yICVzIFslZF1cbiAiLAotCQkJICAgICAgIHByaW50X3NzaWQoc3NpZF9idWYsIHNzaWQsIGxlbiksIChpbnQpbGVuKTsKLQotCQlwcml2LT5vbmVfZGlyZWN0X3NjYW4gPSAxOwotCQlwcml2LT5kaXJlY3Rfc3NpZF9sZW4gPSAodTgpCi0JCSAgICBtaW4oKHU4KSBsZW4sICh1OCkgSVdfRVNTSURfTUFYX1NJWkUpOwotCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7Ci0JfSBlbHNlCi0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDA7Ci0KLQlyYyA9IGl3bDM5NDVfc2Nhbl9pbml0aWF0ZShwcml2KTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBpd2wzOTQ1X21hY19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyLCBjb25zdCB1OCAqYWRkciwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmMgPSAwOwotCXU4IHN0YV9pZDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwljb25zdCB1OCAqYWRkcjsKKwlpbnQgcmV0ID0gMDsKKwl1OCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOworCXU4IHN0YXRpY19rZXk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWlmICghaXdsMzk0NV9wYXJhbV9od2NyeXB0bykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOworCWlmIChpd2wzOTQ1X21vZF9wYXJhbXMuc3dfY3J5cHRvKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpKQotCQkvKiBvbmx5IHN1cHBvcnQgcGFpcndpc2Uga2V5cyAqLwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJYWRkciA9IHN0YSA/IHN0YS0+YWRkciA6IGl3bF9iY2FzdF9hZGRyOworCXN0YXRpY19rZXkgPSAhaXdsX2lzX2Fzc29jaWF0ZWQocHJpdik7CiAKLQlzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAotCQkJCSAgIGFkZHIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXN0YXRpY19rZXkpIHsKKwkJc3RhX2lkID0gaXdsMzk0NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CisJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtICVwTW5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCisJCQkJCSAgICBhZGRyKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAgU0VUX0tFWToKLQkJcmMgPSBpd2wzOTQ1X3VwZGF0ZV9zdGFfa2V5X2luZm8ocHJpdiwga2V5LCBzdGFfaWQpOwotCQlpZiAoIXJjKSB7Ci0JCQlpd2wzOTQ1X3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsIDEpOwotCQkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKLQkJCWtleS0+aHdfa2V5X2lkeCA9IHN0YV9pZDsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgic2V0X2tleSBzdWNjZXNzLCB1c2luZyBod2NyeXB0b1xuIik7Ci0JCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQkJfQorCWNhc2UgU0VUX0tFWToKKwkJaWYgKHN0YXRpY19rZXkpCisJCQlyZXQgPSBpd2wzOTQ1X3NldF9zdGF0aWNfa2V5KHByaXYsIGtleSk7CisJCWVsc2UKKwkJCXJldCA9IGl3bDM5NDVfc2V0X2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbmFibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBESVNBQkxFX0tFWToKLQkJcmMgPSBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhwcml2LCBzdGFfaWQpOwotCQlpZiAoIXJjKSB7Ci0JCQlpd2wzOTQ1X3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsIDApOwotCQkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiZGlzYWJsZSBod2NyeXB0byBrZXlcbiIpOwotCQl9CisJCWlmIChzdGF0aWNfa2V5KQorCQkJcmV0ID0gaXdsMzk0NV9yZW1vdmVfc3RhdGljX2tleShwcml2KTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsMzk0NV9jbGVhcl9zdGFfa2V5X2luZm8ocHJpdiwgc3RhX2lkKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJjID0gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHE7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHF1ZXVlID49IEFDX05VTSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcXVldWUgPj0gQUNfTlVNICVkXG4iLCBxdWV1ZSk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MDk5LDI5ICs0MTQ1LDI5IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDEpOwotCWVsc2UgaWYgKHByaXYtPmFzc29jX2lkICYmIGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJCWl3bF9hY3RpdmF0ZV9xb3MocHJpdiwgMSk7CisJZWxzZSBpZiAocHJpdi0+YXNzb2NfaWQgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCisJCWl3bF9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGksIGF2YWlsOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHE7Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgKnE7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTcxMzAsNyArNDE3Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IEFDX05VTTsgaSsrKSB7CiAJCXR4cSA9ICZwcml2LT50eHFbaV07CiAJCXEgPSAmdHhxLT5xOwotCQlhdmFpbCA9IGl3bDM5NDVfcXVldWVfc3BhY2UocSk7CisJCWF2YWlsID0gaXdsX3F1ZXVlX3NwYWNlKHEpOwogCiAJCXN0YXRzW2ldLmxlbiA9IHEtPm5fd2luZG93IC0gYXZhaWw7CiAJCXN0YXRzW2ldLmxpbWl0ID0gcS0+bl93aW5kb3cgLSBxLT5oaWdoX21hcms7CkBAIC03MTM5LDM0ICs0MTg1LDI0IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCi17Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaXdsMzk0NV9yZXNldF9xb3MocHJpdik7CisJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+YXNzb2NfaWQgPSAwOwogCXByaXYtPmFzc29jX2NhcGFiaWxpdHkgPSAwOwotCXByaXYtPmNhbGxfcG9zdF9hc3NvY19mcm9tX2JlYWNvbiA9IDA7CiAKIAkvKiBuZXcgYXNzb2NpYXRpb24gZ2V0IHJpZCBvZiBpYnNzIGJlYWNvbiBza2IgKi8KIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCkBAIC03MTc1LDE1ICs0MjExLDE0IEBACiAJcHJpdi0+aWJzc19iZWFjb24gPSBOVUxMOwogCiAJcHJpdi0+YmVhY29uX2ludCA9IHByaXYtPmh3LT5jb25mLmJlYWNvbl9pbnQ7Ci0JcHJpdi0+dGltZXN0YW1wMSA9IDA7Ci0JcHJpdi0+dGltZXN0YW1wMCA9IDA7CisJcHJpdi0+dGltZXN0YW1wID0gMDsKIAlpZiAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXByaXYtPmJlYWNvbl9pbnQgPSAwOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KQEAgLTcxOTIsNyArNDIyNyw3IEBACiAJICogY2xlYXIgUlhPTl9GSUxURVJfQVNTT0NfTVNLIGJpdAogCSovCiAJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAl9CkBAIC03MjAwLDMzICs0MjM1LDM0IEBACiAJLyogUGVyIG1hYzgwMjExLmg6IFRoaXMgaXMgb25seSB1c2VkIGluIElCU1MgbW9kZS4uLiAqLwogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCBpbiBJQlNTXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBpbiBJQlNTXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKLQlpd2wzOTQ1X3NldF9yYXRlKHByaXYpOworCWl3bF9zZXRfcmF0ZShwcml2KTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fbGU2NCB0aW1lc3RhbXA7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCBJQlNTXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBJQlNTXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03MjM4LDExICs0Mjc0LDEzIEBACiAJcHJpdi0+aWJzc19iZWFjb24gPSBza2I7CiAKIAlwcml2LT5hc3NvY19pZCA9IDA7CisJdGltZXN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CisJcHJpdi0+dGltZXN0YW1wID0gbGU2NF90b19jcHUodGltZXN0YW1wKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWl3bDM5NDVfcmVzZXRfcW9zKHByaXYpOworCWl3bF9yZXNldF9xb3MocHJpdik7CiAKIAlpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHByaXYpOwogCkBAIC03MjU2LDcgKzQyOTQsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgYWRkcyBhIG5ldyBhdHRyaWJ1dGUgdG8gdGhlIHN5c2ZzIHJlcHJlc2VudGF0aW9uCkBAIC03MjY1LDM4ICs0MzAzLDQxIEBACiAgKgogICogU2VlIHRoZSBsZXZlbCBkZWZpbml0aW9ucyBpbiBpd2wgZm9yIGRldGFpbHMuCiAgKi8KLQotc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpd2wzOTQ1X2RlYnVnX2xldmVsKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgcHJpdi0+ZGVidWdfbGV2ZWwpOwogfQotc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsCitzdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQljaGFyICpwID0gKGNoYXIgKilidWY7Ci0JdTMyIHZhbDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OwogCi0JdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOwotCWlmIChwID09IGJ1ZikKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCkKKwkJSVdMX0lORk8ocHJpdiwgIiVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCi0JCWl3bDM5NDVfZGVidWdfbGV2ZWwgPSB2YWw7CisJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBEUklWRVJfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgIHNob3dfZGVidWdfbGV2ZWwsIHN0b3JlX2RlYnVnX2xldmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2RlYnVnX2xldmVsLCBzdG9yZV9kZWJ1Z19sZXZlbCk7CiAKLSNlbmRpZiAvKiBDT05GSUdfSVdMMzk0NV9ERUJVRyAqLworI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUocHJpdikpOwpAQCAtNzMwNywyMiArNDM0OCwyMSBAQAogc3RhdGljIHNzaXplX3Qgc2hvd190eF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT51c2VyX3R4cG93ZXJfbGltaXQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV90eF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCXUzMiB2YWw7CiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMTApOwogCWlmIChwID09IGJ1ZikKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9JTkZPKHByaXYsICI6ICVzIGlzIG5vdCBpbiBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKIAkJaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIocHJpdiwgdmFsKTsKIApAQCAtNzMzNCw3ICs0Mzc0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmxhZ3Moc3RydWN0IGRldmljZSAqZCwKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNFhcbiIsIHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzKTsKIH0KQEAgLTczNDMsMTYgKzQzODMsMTYgQEAKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCXUzMiBmbGFncyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncykgIT0gZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwotCQlpZiAoaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCi0JCQlJV0xfV0FSTklORygiQ291bGQgbm90IGNhbmNlbCBzY2FuLlxuIik7CisJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQorCQkJSVdMX1dBUk4ocHJpdiwgIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXR0aW5nIHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29tbWl0dGluZyByeG9uLmZsYWdzID0gMHglMDRYXG4iLAogCQkJCSAgICAgICBmbGFncyk7CiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CiAJCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwpAQCAtNzM2OCw3ICs0NDA4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmlsdGVyX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDRYXG4iLAogCQlsZTMyX3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MpKTsKQEAgLTczNzgsMTYgKzQ0MTgsMTYgQEAKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCXUzMiBmaWx0ZXJfZmxhZ3MgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChsZTMyX3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzKSAhPSBmaWx0ZXJfZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwotCQlpZiAoaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCi0JCQlJV0xfV0FSTklORygiQ291bGQgbm90IGNhbmNlbCBzY2FuLlxuIik7CisJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQorCQkJSVdMX1dBUk4ocHJpdiwgIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdHRpbmcgcnhvbi5maWx0ZXJfZmxhZ3MgPSAiCiAJCQkJICAgICAgICIweCUwNFhcbiIsIGZpbHRlcl9mbGFncyk7CiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0KIAkJCQljcHVfdG9fbGUzMihmaWx0ZXJfZmxhZ3MpOwpAQCAtNzQwNyw4ICs0NDQ3LDggQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbWVhc3VyZW1lbnQoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKIAl1MzIgc2l6ZSA9IHNpemVvZihtZWFzdXJlX3JlcG9ydCksIGxlbiA9IDAsIG9mcyA9IDA7CiAJdTggKmRhdGEgPSAodTggKikmbWVhc3VyZV9yZXBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc0NDAsNyArNDQ4MCw3IEBACiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyBwYXJhbXMgPSB7CiAJCS5jaGFubmVsID0gbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksCiAJCS5zdGFydF90aW1lID0gY3B1X3RvX2xlNjQocHJpdi0+bGFzdF90c2YpLApAQCAtNzQ2NCw3ICs0NTA0LDcgQEAKIAkJCXR5cGUgPSBzaW1wbGVfc3RydG91bChwICsgMSwgTlVMTCwgMCk7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkludm9raW5nIG1lYXN1cmVtZW50IG9mIHR5cGUgJWQgb24gIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbnZva2luZyBtZWFzdXJlbWVudCBvZiB0eXBlICVkIG9uICIKIAkJICAgICAgICJjaGFubmVsICVkIChmb3IgJyVzJylcbiIsIHR5cGUsIHBhcmFtcy5jaGFubmVsLCBidWYpOwogCWl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHByaXYsICZwYXJhbXMsIHR5cGUpOwogCkBAIC03NDc5LDcgKzQ1MTksNyBAQAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCiAJcHJpdi0+cmV0cnlfcmF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJaWYgKHByaXYtPnJldHJ5X3JhdGUgPD0gMCkKQEAgLTc0OTEsNTAgKzQ1MzEsNzIgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfcmV0cnlfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQiLCBwcml2LT5yZXRyeV9yYXRlKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHJldHJ5X3JhdGUsIFNfSVdVU1IgfCBTX0lSVVNSLCBzaG93X3JldHJ5X3JhdGUsCiAJCSAgIHN0b3JlX3JldHJ5X3JhdGUpOwogCisKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWludCByYzsKLQlpbnQgbW9kZTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIG1vZGU7CiAKLQltb2RlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKKwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkgewotCQlyYyA9IC1FQUdBSU47CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgbW9kZSk7CisJaWYgKHJldCkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCi0JaWYgKChtb2RlIDwgMSkgfHwgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpIHx8IChtb2RlID09IElXTF9QT1dFUl9BQykpCi0JCW1vZGUgPSBJV0xfUE9XRVJfQUM7Ci0JZWxzZQotCQltb2RlIHw9IElXTF9QT1dFUl9FTkFCTEVEOwotCi0JaWYgKG1vZGUgIT0gcHJpdi0+cG93ZXJfbW9kZSkgewotCQlyYyA9IGl3bDM5NDVfc2VuZF9wb3dlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9MRVZFTChtb2RlKSk7Ci0JCWlmIChyYykgewotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlwcml2LT5wb3dlcl9tb2RlID0gbW9kZTsKLQl9Ci0KLQlyYyA9IGNvdW50OworCXJldCA9IGNvdW50OwogCiAgb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJaW50IG1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKKwlpbnQgc3lzdGVtID0gcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZzsKKwlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7CisJY2hhciAqcCA9IGJ1ZjsKKworCXN3aXRjaCAoc3lzdGVtKSB7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0FVVE86CisJCXAgKz0gc3ByaW50ZihwLCAiU1lTVEVNOmF1dG8iKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0FDOgorCQlwICs9IHNwcmludGYocCwgIlNZU1RFTTphYyIpOworCQlicmVhazsKKwljYXNlIElXTF9QT1dFUl9TWVNfQkFUVEVSWToKKwkJcCArPSBzcHJpbnRmKHAsICJTWVNURU06YmF0dGVyeSIpOworCQlicmVhazsKKwl9CisKKwlwICs9IHNwcmludGYocCwgIlx0TU9ERTolcyIsIChtb2RlIDwgSVdMX1BPV0VSX0FVVE8pID8KKwkJCSJmaXhlZCIgOiAiYXV0byIpOworCXAgKz0gc3ByaW50ZihwLCAiXHRJTkRFWDolZCIsIGxldmVsKTsKKwlwICs9IHNwcmludGYocCwgIlxuIik7CisJcmV0dXJuIHAgLSBidWYgKyAxOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVVNSLAorCQkgICBzaG93X3Bvd2VyX2xldmVsLCBzdG9yZV9wb3dlcl9sZXZlbCk7CisKICNkZWZpbmUgTUFYX1dYX1NUUklORyA4MAogCiAvKiBWYWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kICovCkBAIC03NTUzLDQxICs0NjE1LDYgQEAKIAkxMDAwMDAwCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWludCBsZXZlbCA9IElXTF9QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKLQljaGFyICpwID0gYnVmOwotCi0JcCArPSBzcHJpbnRmKHAsICIlZCAiLCBsZXZlbCk7Ci0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgSVdMX1BPV0VSX01PREVfQ0FNOgotCWNhc2UgSVdMX1BPV0VSX0FDOgotCQlwICs9IHNwcmludGYocCwgIihBQykiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKLQkJcCArPSBzcHJpbnRmKHAsICIoQkFUVEVSWSkiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcCArPSBzcHJpbnRmKHAsCi0JCQkgICAgICIoVGltZW91dCAlZG1zLCBQZXJpb2QgJWRtcykiLAotCQkJICAgICB0aW1lb3V0X2R1cmF0aW9uW2xldmVsIC0gMV0gLyAxMDAwLAotCQkJICAgICBwZXJpb2RfZHVyYXRpb25bbGV2ZWwgLSAxXSAvIDEwMDApOwotCX0KLQotCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJV0xfUE9XRVJfRU5BQkxFRCkpCi0JCXAgKz0gc3ByaW50ZihwLCAiIE9GRlxuIik7Ci0JZWxzZQotCQlwICs9IHNwcmludGYocCwgIiBcbiIpOwotCi0JcmV0dXJuIHAgLSBidWYgKyAxOwotCi19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcG93ZXJfbGV2ZWwsCi0JCSAgIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQogc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVscyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzYwMCwxNyArNDYyNywxNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0aXN0aWNzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAl1MzIgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKTsKIAl1MzIgbGVuID0gMCwgb2ZzID0gMDsKLQl1OCAqZGF0YSA9ICh1OCAqKSZwcml2LT5zdGF0aXN0aWNzOworCXU4ICpkYXRhID0gKHU4ICopJnByaXYtPnN0YXRpc3RpY3NfMzk7CiAJaW50IHJjID0gMDsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYpOworCXJjID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKHJjKSB7CkBAIC03NjM4LDM0ICs0NjY1LDM0IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2FudGVubmEoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5hbnRlbm5hKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9hbnRlbm5hKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJaW50IGFudDsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAwOwogCiAJaWYgKHNzY2FuZihidWYsICIlMWkiLCAmYW50KSAhPSAxKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAibm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAogCWlmICgoYW50ID49IDApICYmIChhbnQgPD0gMikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgYW50ZW5uYSBzZWxlY3QgdG8gJWQuXG4iLCBhbnQpOwotCQlwcml2LT5hbnRlbm5hID0gKGVudW0gaXdsMzk0NV9hbnRlbm5hKWFudDsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgYW50ZW5uYSBzZWxlY3QgdG8gJWQuXG4iLCBhbnQpOworCQlpd2wzOTQ1X21vZF9wYXJhbXMuYW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlhbnQ7CiAJfSBlbHNlCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgYW50ZW5uYSBzZWxlY3QgdmFsdWUgJWQuXG4iLCBhbnQpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIGFudGVubmEgc2VsZWN0IHZhbHVlICVkLlxuIiwgYW50KTsKIAogCiAJcmV0dXJuIGNvdW50OwpAQCAtNzY3Niw4ICs0NzAzLDggQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgKGludClwcml2LT5zdGF0dXMpOwogfQpAQCAtNzY5MSw3ICs0NzE4LDcgQEAKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAKIAlpZiAocFswXSA9PSAnMScpCi0JCWl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOworCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC03NzA1LDcgKzQ3MzIsNyBAQAogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAogCWlmIChwWzBdID09ICcxJykKLQkJaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7CisJCWl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KQEAgLTc3MTgsMjMgKzQ3NDUsMjQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKKwlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShEUlZfTkFNRSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCiAJSU5JVF9XT1JLKCZwcml2LT51cCwgaXdsMzk0NV9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2wzOTQ1X2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsMzk0NV9iZ19zY2FuX2NvbXBsZXRlZCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZXF1ZXN0X3NjYW4sIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKTsKLQlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bDM5NDVfYmdfYWJvcnRfc2Nhbik7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpd2wzOTQ1X2JnX3JmX2tpbGwpOworCUlOSVRfV09SSygmcHJpdi0+cmZfa2lsbCwgaXdsX2JnX3JmX2tpbGwpOwogCUlOSVRfV09SSygmcHJpdi0+YmVhY29uX3VwZGF0ZSwgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCwgaXdsMzk0NV9iZ19pbml0X2FsaXZlX3N0YXJ0KTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+YWxpdmVfc3RhcnQsIGl3bDM5NDVfYmdfYWxpdmVfc3RhcnQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX2NoZWNrLCBpd2wzOTQ1X2JnX3NjYW5fY2hlY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yZmtpbGxfcG9sbCwgaXdsMzk0NV9yZmtpbGxfcG9sbCk7CisJSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsX2JnX3NjYW5fY29tcGxldGVkKTsKKwlJTklUX1dPUksoJnByaXYtPnJlcXVlc3Rfc2NhbiwgaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4pOworCUlOSVRfV09SSygmcHJpdi0+YWJvcnRfc2NhbiwgaXdsX2JnX2Fib3J0X3NjYW4pOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX2NoZWNrLCBpd2xfYmdfc2Nhbl9jaGVjayk7CiAKIAlpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CiAKQEAgLTc3NDIsNyArNDc3MCw3IEBACiAJCSAgICAgaXdsMzk0NV9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CiAKQEAgLTc3NjgsNyArNDc5Niw5IEBACiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAogCSZkZXZfYXR0cl90eF9wb3dlci5hdHRyLAotCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwkmZGV2X2F0dHJfZGVidWdfbGV2ZWwuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKQEAgLTc3ODUsODMgKzQ4MTUsMTc5IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UgPSBpd2wzOTQ1X21hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcgPSBpd2wzOTQ1X21hY19jb25maWcsCiAJLmNvbmZpZ19pbnRlcmZhY2UgPSBpd2wzOTQ1X21hY19jb25maWdfaW50ZXJmYWNlLAotCS5jb25maWd1cmVfZmlsdGVyID0gaXdsMzk0NV9jb25maWd1cmVfZmlsdGVyLAorCS5jb25maWd1cmVfZmlsdGVyID0gaXdsX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9rZXkgPSBpd2wzOTQ1X21hY19zZXRfa2V5LAotCS5nZXRfc3RhdHMgPSBpd2wzOTQ1X21hY19nZXRfc3RhdHMsCiAJLmdldF90eF9zdGF0cyA9IGl3bDM5NDVfbWFjX2dldF90eF9zdGF0cywKIAkuY29uZl90eCA9IGl3bDM5NDVfbWFjX2NvbmZfdHgsCiAJLnJlc2V0X3RzZiA9IGl3bDM5NDVfbWFjX3Jlc2V0X3RzZiwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IGl3bDM5NDVfYnNzX2luZm9fY2hhbmdlZCwKLQkuaHdfc2NhbiA9IGl3bDM5NDVfbWFjX2h3X3NjYW4KKwkuaHdfc2NhbiA9IGl3bF9tYWNfaHdfc2NhbgogfTsKIAorc3RhdGljIGludCBpd2wzOTQ1X2luaXRfZHJ2KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKworCXByaXYtPnJldHJ5X3JhdGUgPSAxOworCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cG93ZXJfZGF0YS5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5oY21kX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVfZnJhbWVzKTsKKworCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKKworCS8qIENsZWFyIHRoZSBkcml2ZXIncyAobm90IGRldmljZSdzKSBzdGF0aW9uIHRhYmxlICovCisJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKKworCXByaXYtPmRhdGFfcmV0cnlfbGltaXQgPSAtMTsKKwlwcml2LT5pZWVlX2NoYW5uZWxzID0gTlVMTDsKKwlwcml2LT5pZWVlX3JhdGVzID0gTlVMTDsKKwlwcml2LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKworCXByaXYtPml3X21vZGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOworCisJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKKworCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOworCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKKworCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfREVGQVVMVF9UWF9QT1dFUjsKKworCWlmIChlZXByb20tPnZlcnNpb24gPCBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTikgeworCQlJV0xfV0FSTihwcml2LCAiVW5zdXBwb3J0ZWQgRUVQUk9NIHZlcnNpb246IDB4JTA0WFxuIiwKKwkJCSBlZXByb20tPnZlcnNpb24pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJcmV0ID0gaXdsX2luaXRfY2hhbm5lbF9tYXAocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXQgdXAgdHhwb3dlciBzZXR0aW5ncyBpbiBkcml2ZXIgZm9yIGFsbCBjaGFubmVscyAqLworCWlmIChpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHByaXYpKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyX2ZyZWVfY2hhbm5lbF9tYXA7CisJfQorCisJcmV0ID0gaXdsY29yZV9pbml0X2dlb3MocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgZ2VvcyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2NoYW5uZWxfbWFwOworCX0KKwlpd2wzOTQ1X2luaXRfaHdfcmF0ZXMocHJpdiwgcHJpdi0+aWVlZV9yYXRlcyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfY2hhbm5lbF9tYXA6CisJaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXYtPmh3OworCisJaHctPnJhdGVfY29udHJvbF9hbGdvcml0aG0gPSAiaXdsLTM5NDUtcnMiOworCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3N0YV9wcml2KTsKKworCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLworCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAorCQkgICAgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisKKwlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKworCS8qIERlZmF1bHQgdmFsdWU7IDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLworCWh3LT5xdWV1ZXMgPSA0OworCisJaHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKKworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpd2wzOTQ1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3QgaXdsXzM5NDVfY2ZnICpjZmcgPSAoc3RydWN0IGl3bF8zOTQ1X2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKKwlzdHJ1Y3QgaXdsX2NmZyAqY2ZnID0gKHN0cnVjdCBpd2xfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAxLiBBbGxvY2F0aW5nIEhXIGRhdGEKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KIAotCS8qIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCi0JICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uICovCi0JaWYgKGl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJEaXNhYmxpbmcgaHdfc2NhblxuIik7Ci0JCWl3bDM5NDVfaHdfb3BzLmh3X3NjYW4gPSBOVUxMOwotCX0KLQotCWlmICgoaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtID4gSVdMMzlfTUFYX05VTV9RVUVVRVMpIHx8Ci0JICAgIChpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7Ci0JCUlXTF9FUlJPUigiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCi0JCQkgIElXTF9NSU5fTlVNX1FVRVVFUywgSVdMMzlfTUFYX05VTV9RVUVVRVMpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCiAJICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9wcml2KSwgJml3bDM5NDVfaHdfb3BzKTsKKwlodyA9IGl3bF9hbGxvY19hbGwoY2ZnLCAmaXdsMzk0NV9od19vcHMpOwogCWlmIChodyA9PSBOVUxMKSB7Ci0JCUlXTF9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiQ2FuIG5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQorCXByaXYgPSBody0+cHJpdjsKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CiAKLQlwcml2ID0gaHctPnByaXY7Ci0JcHJpdi0+aHcgPSBodzsKLQlwcml2LT5wY2lfZGV2ID0gcGRldjsKKwlpZiAoKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID4gSVdMMzlfTUFYX05VTV9RVUVVRVMpIHx8CisJICAgICAoaXdsMzk0NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMMzlfTUFYX05VTV9RVUVVRVMpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9pZWVlODAyMTFfZnJlZV9odzsKKwl9CisKKwkvKgorCSAqIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCisJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uCisJICovCisJaWYgKGl3bDM5NDVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBod19zY2FuXG4iKTsKKwkJaXdsMzk0NV9od19vcHMuaHdfc2NhbiA9IE5VTEw7CisJfQorCisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CiAJcHJpdi0+Y2ZnID0gY2ZnOworCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBMT0FEIERSSVZFUiAqKipcbiIpOwotCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gIml3bC0zOTQ1LXJzIjsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdik7Ci0KLQkvKiBTZWxlY3QgYW50ZW5uYSAobWF5IGJlIGhlbHBmdWwgaWYgb25seSBvbmUgYW50ZW5uYSBpcyBjb25uZWN0ZWQpICovCi0JcHJpdi0+YW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlpd2wzOTQ1X3BhcmFtX2FudGVubmE7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpd2wzOTQ1X2RlYnVnX2xldmVsID0gaXdsMzk0NV9wYXJhbV9kZWJ1ZzsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXByaXYtPmRlYnVnX2xldmVsID0gaXdsMzk0NV9tb2RfcGFyYW1zLmRlYnVnOwogCWF0b21pY19zZXQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCwgMCk7CiAjZW5kaWYKIAotCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwotCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07Ci0KLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7Ci0KLQlody0+d2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSA9IHRydWU7Ci0KLQkvKiA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KLQlody0+cXVldWVzID0gNDsKLQogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAyLiBJbml0aWFsaXppbmcgUENJIGJ1cwogCSAqICoqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03ODc2LDcgKzUwMDIsNyBAQAogCWlmICghZXJyKQogCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gb3V0X3BjaV9kaXNhYmxlX2RldmljZTsKIAl9CiAKQEAgLTc4OTQsOTggKzUwMjAsNTggQEAKIAkJZ290byBvdXRfcGNpX3JlbGVhc2VfcmVnaW9uczsKIAl9CiAKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfbGVuID0gMHglMDhsbHhcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOwogCiAJLyogV2UgZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAogCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMHgwMCk7CiAKLQkvKiBuaWMgaW5pdCAqLwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKLQkJCUNTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfRElTX0wwU19FWElUX1RJTUVSKTsKLQotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwotCWVyciA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKLQkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CisJLyogYW1wIGluaXQgKi8KKwllcnIgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLmluaXQocHJpdik7CiAJaWYgKGVyciA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKIAkJZ290byBvdXRfaW91bm1hcDsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA0LiBSZWFkIEVFUFJPTQogCSAqICoqKioqKioqKioqKioqKioqKioqLworCiAJLyogUmVhZCB0aGUgRUVQUk9NICovCi0JZXJyID0gaXdsMzk0NV9lZXByb21faW5pdChwcml2KTsKKwllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCS8qIE1BQyBBZGRyZXNzIGxvY2F0aW9uIGluIEVFUFJPTSBzYW1lIGZvciAzOTQ1LzQ5NjUgKi8KLQlnZXRfZWVwcm9tX21hYyhwcml2LCBwcml2LT5tYWNfYWRkcik7Ci0JSVdMX0RFQlVHX0lORk8oIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKKwllZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOworCW1lbWNweShwcml2LT5tYWNfYWRkciwgZWVwcm9tLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocHJpdi0+aHcsIHByaXYtPm1hY19hZGRyKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIENvbnN0YW50cwogCSAqICoqKioqKioqKioqKioqKioqKioqLwogCS8qIERldmljZS1zcGVjaWZpYyBzZXR1cCAqLwotCWlmIChpd2wzOTQ1X2h3X3NldF9od19zZXR0aW5nKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBzZXR0aW5nc1xuIik7Ci0JCWdvdG8gb3V0X2lvdW5tYXA7CisJaWYgKGl3bDM5NDVfaHdfc2V0X2h3X3BhcmFtcyhwcml2KSkgeworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gc2V0IGh3IHNldHRpbmdzXG4iKTsKKwkJZ290byBvdXRfZWVwcm9tX2ZyZWU7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogNi4gU2V0dXAgcHJpdgogCSAqICoqKioqKioqKioqKioqKioqKioqLwotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwotCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cG93ZXJfZGF0YS5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5oY21kX2xvY2spOwotCi0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVfZnJhbWVzKTsKLQltdXRleF9pbml0KCZwcml2LT5tdXRleCk7Ci0KLQkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLwotCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7Ci0KLQlwcml2LT5kYXRhX3JldHJ5X2xpbWl0ID0gLTE7Ci0JcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7Ci0JcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7Ci0JcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0KLQlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKLQotCWl3bDM5NDVfcmVzZXRfcW9zKHByaXYpOwotCi0JcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0JcHJpdi0+cW9zX2RhdGEucW9zX2NhcC52YWwgPSAwOwotCi0KLQlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7Ci0JLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQUMgbW9kZSAqLwotCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfQUM7Ci0JcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7Ci0KLQllcnIgPSBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAocHJpdik7CisJZXJyID0gaXdsMzk0NV9pbml0X2Rydihwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgZmFpbGVkOiAlZFxuIiwgZXJyKTsKLQkJZ290byBvdXRfdW5zZXRfaHdfc2V0dGluZzsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGRyaXZlciBmYWlsZWRcbiIpOworCQlnb3RvIG91dF91bnNldF9od19wYXJhbXM7CiAJfQogCi0JZXJyID0gaXdsMzk0NV9pbml0X2dlb3MocHJpdik7Ci0JaWYgKGVycikgewotCQlJV0xfRVJST1IoImluaXRpYWxpemluZyBnZW9zIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCWdvdG8gb3V0X2ZyZWVfY2hhbm5lbF9tYXA7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkiOiBEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXNcbiIsIHByaXYtPmNmZy0+bmFtZSk7CisJSVdMX0lORk8ocHJpdiwgIkRldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlc1xuIiwKKwkJcHJpdi0+Y2ZnLT5uYW1lKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDcuIEluaXRpYWxpemUgTW9kdWxlIFBhcmFtZXRlcnMKQEAgLTc5OTMsOSArNTA3OSw5IEBACiAKIAkvKiBJbml0aWFsaXplIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWVzIGhlcmUgKi8KIAkvKiBEaXNhYmxlIHJhZGlvIChTVyBSRiBLSUxMKSB2aWEgcGFyYW1ldGVyIHdoZW4gbG9hZGluZyBkcml2ZXIgKi8KLQlpZiAoaXdsMzk0NV9wYXJhbV9kaXNhYmxlKSB7CisJaWYgKGl3bDM5NDVfbW9kX3BhcmFtcy5kaXNhYmxlKSB7CiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwotCQlJV0xfREVCVUdfSU5GTygiUmFkaW8gZGlzYWJsZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJhZGlvIGRpc2FibGVkLlxuIik7CiAJfQogCiAKQEAgLTgwMDQsNDMgKzUwOTAsNDkgQEAKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKKwlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgaXdsX2lzciwgSVJRRl9TSEFSRUQsCisJCQkgIERSVl9OQU1FLCBwcml2KTsKKwlpZiAoZXJyKSB7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOworCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKKwl9CisKIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsMzk0NV9hdHRyaWJ1dGVfZ3JvdXApOwogCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKLQkJZ290byBvdXRfZnJlZV9nZW9zOworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9pcnE7CiAJfQogCi0JaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIElFRUU4MDIxMV9CQU5EXzJHSFosIDYpOworCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsCisJCQkgICAgICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5jaGFubmVsc1s1XSk7CiAJaXdsMzk0NV9zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOwogCWl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQkvKioqKioqKioqKioqKioqKioqKioqKioKLQkgKiA5LiBDb25jbHVkZQotCSAqICoqKioqKioqKioqKioqKioqKioqLwotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkgKiAxMC4gU2V0dXAgYW5kIFJlZ2lzdGVyIG1hYzgwMjExCisJICogOS4gU2V0dXAgYW5kIFJlZ2lzdGVyIG1hYzgwMjExCiAJICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7Ci0JaWYgKGVycikgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBuZXR3b3JrIGRldmljZSAoZXJyb3IgJWQpXG4iLCBlcnIpOwotCQlnb3RvICBvdXRfcmVtb3ZlX3N5c2ZzOwotCX0KKwlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQlwcml2LT5ody0+Y29uZi5iZWFjb25faW50ID0gMTAwOwotCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOwotCi0KLQllcnIgPSBpd2wzOTQ1X3Jma2lsbF9pbml0KHByaXYpOworCWVyciA9IGl3bDM5NDVfc2V0dXBfbWFjKHByaXYpOwogCWlmIChlcnIpCi0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQlnb3RvICBvdXRfcmVtb3ZlX3N5c2ZzOworCisJZXJyID0gaXdsX3Jma2lsbF9pbml0KHByaXYpOworCWlmIChlcnIpCisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJGS0lMTCBzeXN0ZW0uICIKIAkJCQkgICJJZ25vcmluZyBlcnJvcjogJWRcbiIsIGVycik7CisJZWxzZQorCQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKworCS8qIFN0YXJ0IG1vbml0b3JpbmcgdGhlIGtpbGxzd2l0Y2ggKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZraWxsX3BvbGwsCisJCQkgICAyICogSFopOwogCiAJcmV0dXJuIDA7CiAKQEAgLTgwNDgsMTIgKzUxNDAsMTYgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCXByaXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfZnJlZV9nZW9zOgotCWl3bDM5NDVfZnJlZV9nZW9zKHByaXYpOwotIG91dF9mcmVlX2NoYW5uZWxfbWFwOgotCWl3bDM5NDVfZnJlZV9jaGFubmVsX21hcChwcml2KTsKLSBvdXRfdW5zZXRfaHdfc2V0dGluZzoKLQlpd2wzOTQ1X3Vuc2V0X2h3X3NldHRpbmcocHJpdik7Cisgb3V0X3JlbGVhc2VfaXJxOgorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7Cisgb3V0X2Rpc2FibGVfbXNpOgorCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKKwlpd2xjb3JlX2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKKyBvdXRfdW5zZXRfaHdfcGFyYW1zOgorCWl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOworIG91dF9lZXByb21fZnJlZToKKwlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CiAgb3V0X2lvdW5tYXA6CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+aHdfYmFzZSk7CiAgb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM6CkBAIC04MDY5LDQyICs1MTY1LDQ2IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpd2wzOTQ1X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKIAlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCi0JaXdsMzk0NV9kb3duKHByaXYpOworCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CisJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKwkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDA7CisJfSBlbHNlIHsKKwkJaXdsMzk0NV9kb3duKHByaXYpOworCX0KIAogCS8qIG1ha2Ugc3VyZSB3ZSBmbHVzaCBhbnkgcGVuZGluZyBpcnEgb3IKIAkgKiB0YXNrbGV0IGZvciB0aGUgZHJpdmVyCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsMzk0NV9hdHRyaWJ1dGVfZ3JvdXApOwogCi0JaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3Rlcihwcml2KTsKKwlpd2xfcmZraWxsX3VucmVnaXN0ZXIocHJpdik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZraWxsX3BvbGwpOworCiAJaXdsMzk0NV9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIAogCWlmIChwcml2LT5yeHEuYmQpCi0JCWl3bDM5NDVfcnhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+cnhxKTsKKwkJaXdsX3J4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnJ4cSk7CiAJaXdsMzk0NV9od190eHFfY3R4X2ZyZWUocHJpdik7CiAKLQlpd2wzOTQ1X3Vuc2V0X2h3X3NldHRpbmcocHJpdik7CisJaXdsMzk0NV91bnNldF9od19wYXJhbXMocHJpdik7CiAJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAotCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQotCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7Ci0KIAkvKm5ldGlmX3N0b3BfcXVldWUoZGV2KTsgKi8KIAlmbHVzaF93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIApAQCAtODExNCwxMyArNTIxNCwxNiBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAorCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CisJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+aHdfYmFzZSk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOwotCWl3bDM5NDVfZnJlZV9nZW9zKHByaXYpOworCWl3bF9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOworCWl3bGNvcmVfZnJlZV9nZW9zKHByaXYpOwogCWtmcmVlKHByaXYtPnNjYW4pOwogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5pYnNzX2JlYWNvbik7CkBAIC04MTMyLDI3ICs1MjM1LDE1IEBACiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pIHsKIAkJc2V0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cyk7CiAJCWl3bDM5NDVfbWFjX3N0b3AocHJpdi0+aHcpOwogCQlwcml2LT5pc19vcGVuID0gMTsKIAl9Ci0KLQkvKiBwY2kgZHJpdmVyIGFzc3VtZXMgc3RhdGUgd2lsbCBiZSBzYXZlZCBpbiB0aGlzIGZ1bmN0aW9uLgotCSAqIHBjaSBzdGF0ZSBpcyBzYXZlZCBhbmQgZGV2aWNlIGRpc2FibGVkIHdoZW4gaW50ZXJmYWNlIGlzCi0JICogc3RvcHBlZCwgc28gYXQgdGhpcyB0aW1lIHBjaSBkZXZpY2Ugd2lsbCBhbHdheXMgYmUgZGlzYWJsZWQgLQotCSAqIHdoZXRoZXIgaW50ZXJmYWNlIHdhcyBzdGFydGVkIG9yIG5vdC4gc2F2aW5nIHBjaSBzdGF0ZSBub3cgd2lsbAotCSAqIGNhdXNlIHNhdmVkIHN0YXRlIGJlIHRoYXQgb2YgYSBkaXNhYmxlZCBkZXZpY2UsIHdoaWNoIHdpbGwgY2F1c2UKLQkgKiBwcm9ibGVtcyBkdXJpbmcgcmVzdW1lIGluIHRoYXQgd2Ugd2lsbCBlbmQgdXAgd2l0aCBhIGRpc2FibGVkIGRldmljZS4KLQkgKgotCSAqIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgc2F2ZWQgc3RhdGUgKGZyb20gd2hlbiBpbnRlcmZhY2Ugd2FzCi0JICogc3RvcHBlZCkgaXMgdmFsaWQuIGlmIGludGVyZmFjZSB3YXMgbmV2ZXIgdXAgYXQgdGltZSBvZiBzdXNwZW5kCi0JICogdGhlbiB0aGUgc2F2ZWQgc3RhdGUgd2lsbCBzdGlsbCBiZSB2YWxpZCBhcyBpdCB3YXMgc2F2ZWQgZHVyaW5nCi0JICogLnByb2JlLiAqLwotCXBkZXYtPnN0YXRlX3NhdmVkID0gdHJ1ZTsKLQorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNjAsOSArNTI1MSwxNCBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAlpZiAocHJpdi0+aXNfb3BlbikKIAkJaXdsMzk0NV9tYWNfc3RhcnQocHJpdi0+aHcpOwpAQCAtODE3MywxMTQgKzUyNjksNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLS8qKioqKioqKioqKioqKiogUkZLSUxMIEZVTkNUSU9OUyAqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAotLyogc29mdHdhcmUgcmYta2lsbCBmcm9tIHVzZXIgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yZmtpbGxfc29mdF9yZl9raWxsKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOwotCWludCBlcnIgPSAwOwotCi0JaWYgKCFwcml2LT5yZmtpbGwpCi0JcmV0dXJuIDA7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybiAwOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIndlIHJlY2VpdmVkIHNvZnQgUkZLSUxMIHNldCB0byBzdGF0ZSAlZFxuIiwgc3RhdGUpOwotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ6Ci0JCWlmIChpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSkgewotCQkJZXJyID0gLUVCVVNZOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCWl3bDM5NDVfcmFkaW9fa2lsbF9zdyhwcml2LCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEOgotCQlpd2wzOTQ1X3JhZGlvX2tpbGxfc3cocHJpdiwgMSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJ3ZSByZWNlaXZlZCB1bmV4cGVjdGVkIFJGS0lMTCBzdGF0ZSAlZFxuIiwgc3RhdGUpOwotCQlicmVhazsKLQl9Ci1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotaW50IGl3bDM5NDVfcmZraWxsX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSB3aXBoeV9kZXYocHJpdi0+aHctPndpcGh5KTsKLQlpbnQgcmV0ID0gMDsKLQotCUJVR19PTihkZXZpY2UgPT0gTlVMTCk7Ci0KLQlJV0xfREVCVUdfUkZfS0lMTCgiSW5pdGlhbGl6aW5nIFJGS0lMTC5cbiIpOwotCXByaXYtPnJma2lsbCA9IHJma2lsbF9hbGxvY2F0ZShkZXZpY2UsIFJGS0lMTF9UWVBFX1dMQU4pOwotCWlmICghcHJpdi0+cmZraWxsKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIHJma2lsbCBkZXZpY2UuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcml2LT5yZmtpbGwtPm5hbWUgPSBwcml2LT5jZmctPm5hbWU7Ci0JcHJpdi0+cmZraWxsLT5kYXRhID0gcHJpdjsKLQlwcml2LT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQlwcml2LT5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IGl3bDM5NDVfcmZraWxsX3NvZnRfcmZfa2lsbDsKLQlwcml2LT5yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOwotCi0JcHJpdi0+cmZraWxsLT5kZXYuY2xhc3MtPnN1c3BlbmQgPSBOVUxMOwotCXByaXYtPnJma2lsbC0+ZGV2LmNsYXNzLT5yZXN1bWUgPSBOVUxMOwotCi0JcmV0ID0gcmZraWxsX3JlZ2lzdGVyKHByaXYtPnJma2lsbCk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciByZmtpbGw6ICVkXG4iLCByZXQpOwotCQlnb3RvIGZyZWVkX3Jma2lsbDsKLQl9Ci0KLQlJV0xfREVCVUdfUkZfS0lMTCgiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7Ci0JcmV0dXJuIHJldDsKLQotZnJlZWRfcmZraWxsOgotCWlmIChwcml2LT5yZmtpbGwgIT0gTlVMTCkKLQkJcmZraWxsX2ZyZWUocHJpdi0+cmZraWxsKTsKLQlwcml2LT5yZmtpbGwgPSBOVUxMOwotCi1lcnJvcjoKLQlJV0xfREVCVUdfUkZfS0lMTCgiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBpd2wzOTQ1X3Jma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKHByaXYtPnJma2lsbCkKLQkJcmZraWxsX3VucmVnaXN0ZXIocHJpdi0+cmZraWxsKTsKLQotCXByaXYtPnJma2lsbCA9IE5VTEw7Ci19Ci0KLS8qIHNldCByZi1raWxsIHRvIHRoZSByaWdodCBzdGF0ZS4gKi8KLXZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0KLQlpZiAoIXByaXYtPnJma2lsbCkKLQkJcmV0dXJuOwotCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsX2h3KHByaXYpKSB7Ci0JCXJma2lsbF9mb3JjZV9zdGF0ZShwcml2LT5yZmtpbGwsIFJGS0lMTF9TVEFURV9IQVJEX0JMT0NLRUQpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFpd2wzOTQ1X2lzX3Jma2lsbF9zdyhwcml2KSkKLQkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCk7Ci0JZWxzZQotCQlyZmtpbGxfZm9yY2Vfc3RhdGUocHJpdi0+cmZraWxsLCBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEKTsKLX0KLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBkcml2ZXIgYW5kIG1vZHVsZSBlbnRyeSBwb2ludApAQCAtODMwNywyOSArNTI5NSwxOSBAQAogCiAJcmV0ID0gaXdsMzk0NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsMzk0NV9kcml2ZXIpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBQQ0kgbW9kdWxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBQQ0kgbW9kdWxlXG4iKTsKIAkJZ290byBlcnJvcl9yZWdpc3RlcjsKIAl9Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlyZXQgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJml3bDM5NDVfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX2RlYnVnX2xldmVsKTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBkcml2ZXIgc3lzZnMgZmlsZVxuIik7Ci0JCWdvdG8gZXJyb3JfZGVidWc7Ci0JfQotI2VuZGlmCiAKIAlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLWVycm9yX2RlYnVnOgotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXdsMzk0NV9kcml2ZXIpOwotI2VuZGlmCiBlcnJvcl9yZWdpc3RlcjoKIAlpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiAJcmV0dXJuIHJldDsKQEAgLTgzMzcsMjkgKzUzMTUsMjkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGl3bDM5NDVfZXhpdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JZHJpdmVyX3JlbW92ZV9maWxlKCZpd2wzOTQ1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7Ci0jZW5kaWYKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKIAlpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiB9CiAKIE1PRFVMRV9GSVJNV0FSRShJV0wzOTQ1X01PRFVMRV9GSVJNV0FSRShJV0wzOTQ1X1VDT0RFX0FQSV9NQVgpKTsKIAotbW9kdWxlX3BhcmFtX25hbWVkKGFudGVubmEsIGl3bDM5NDVfcGFyYW1fYW50ZW5uYSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChhbnRlbm5hLCBpd2wzOTQ1X21vZF9wYXJhbXMuYW50ZW5uYSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYW50ZW5uYSwgInNlbGVjdCBhbnRlbm5hICgxPU1haW4sIDI9QXV4LCBkZWZhdWx0IDAgW2JvdGhdKSIpOwotbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGUsIGl3bDM5NDVfcGFyYW1fZGlzYWJsZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlLCBpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZSwgIm1hbnVhbGx5IGRpc2FibGUgdGhlIHJhZGlvIChkZWZhdWx0IDAgW3JhZGlvIG9uXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChod2NyeXB0bywgaXdsMzk0NV9wYXJhbV9od2NyeXB0bywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaHdjcnlwdG8sCi0JCSAidXNpbmcgaGFyZHdhcmUgY3J5cHRvIGVuZ2luZSAoZGVmYXVsdCAwIFtzb2Z0d2FyZV0pXG4iKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaXdsMzk0NV9wYXJhbV9kZWJ1ZywgdWludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoc3djcnlwdG8sIGl3bDM5NDVfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvLAorCQkgInVzaW5nIHNvZnR3YXJlIGNyeXB0byAoZGVmYXVsdCAxIFtzb2Z0d2FyZV0pXG4iKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaXdsMzk0NV9tb2RfcGFyYW1zLmRlYnVnLCB1aW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwotbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfaHdfc2NhbiwgaXdsMzk0NV9wYXJhbV9kaXNhYmxlX2h3X3NjYW4sIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZV9od19zY2FuLCBpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2h3X3NjYW4sICJkaXNhYmxlIGhhcmR3YXJlIHNjYW5uaW5nIChkZWZhdWx0IDApIik7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZXNfbnVtLCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0sIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bSwgaXdsMzk0NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW0sICJudW1iZXIgb2YgaHcgcXVldWVzLiIpOwogCittb2R1bGVfcGFyYW1fbmFtZWQoZndfcmVzdGFydDM5NDUsIGl3bDM5NDVfbW9kX3BhcmFtcy5yZXN0YXJ0X2Z3LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmd19yZXN0YXJ0Mzk0NSwgInJlc3RhcnQgZmlybXdhcmUgaW4gY2FzZSBvZiBlcnJvciIpOworCiBtb2R1bGVfZXhpdChpd2wzOTQ1X2V4aXQpOwogbW9kdWxlX2luaXQoaXdsMzk0NV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKaW5kZXggMDIwODBhMy4uMGI2OTE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKQEAgLTQsOCArNCwxMCBAQAogdXNiOHh4eC1vYmpzICs9IGlmX3VzYi5vCiBsaWJlcnRhc19jcy1vYmpzICs9IGlmX2NzLm8KIGxpYmVydGFzX3NkaW8tb2JqcyArPSBpZl9zZGlvLm8KK2xpYmVydGFzX3NwaS1vYmpzICs9IGlmX3NwaS5vCiAKIG9iai0kKENPTkZJR19MSUJFUlRBUykgICAgICs9IGxpYmVydGFzLm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19VU0IpICs9IHVzYjh4eHgubwogb2JqLSQoQ09ORklHX0xJQkVSVEFTX0NTKSAgKz0gbGliZXJ0YXNfY3Mubwogb2JqLSQoQ09ORklHX0xJQkVSVEFTX1NESU8pICs9IGxpYmVydGFzX3NkaW8ubworb2JqLSQoQ09ORklHX0xJQkVSVEFTX1NQSSkgKz0gbGliZXJ0YXNfc3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwppbmRleCBlYzRlZmQ3Li41MGUyOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCkBAIC02MjksNyArNjI5LDcgQEAKIAkJcmVzID0gLUVGQVVMVDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlwcml2LT5yZl9vZmZzZXQgPSBzaW1wbGVfc3RydG91bCgoY2hhciAqKWJ1ZiwgTlVMTCwgMTYpOworCXByaXYtPnJmX29mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTYpOwogCXJlcyA9IGNvdW50Owogb3V0X3VubG9jazoKIAlmcmVlX3BhZ2UoYWRkcik7CkBAIC02ODAsMTIgKzY4MCwxMiBAQAogfQogCiBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgcGVybTsKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHM7CiB9OwogCi1zdGF0aWMgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19maWxlc1tdID0gewogCXsgImluZm8iLCAwNDQ0LCBGT1BTKGxic19kZXZfaW5mbywgd3JpdGVfZmlsZV9kdW1teSksIH0sCiAJeyAiZ2V0c2NhbnRhYmxlIiwgMDQ0NCwgRk9QUyhsYnNfZ2V0c2NhbnRhYmxlLAogCQkJCQl3cml0ZV9maWxlX2R1bW15KSwgfSwKQEAgLTY5Myw3ICs2OTMsNyBAQAogCQkJCWxic19zbGVlcHBhcmFtc193cml0ZSksIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZXZlbnRzX2ZpbGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZXZlbnRzX2ZpbGVzW10gPSB7CiAJeyJsb3dfcnNzaSIsIDA2NDQsIEZPUFMobGJzX2xvd3Jzc2lfcmVhZCwKIAkJCQlsYnNfbG93cnNzaV93cml0ZSksIH0sCiAJeyJsb3dfc25yIiwgMDY0NCwgRk9QUyhsYnNfbG93c25yX3JlYWQsCkBAIC03MDgsNyArNzA4LDcgQEAKIAkJCQlsYnNfaGlnaHNucl93cml0ZSksIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfcmVnc19maWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX3JlZ3NfZmlsZXNbXSA9IHsKIAl7InJkbWFjIiwgMDY0NCwgRk9QUyhsYnNfcmRtYWNfcmVhZCwgbGJzX3JkbWFjX3dyaXRlKSwgfSwKIAl7IndybWFjIiwgMDYwMCwgRk9QUyhOVUxMLCBsYnNfd3JtYWNfd3JpdGUpLCB9LAogCXsicmRiYnAiLCAwNjQ0LCBGT1BTKGxic19yZGJicF9yZWFkLCBsYnNfcmRiYnBfd3JpdGUpLCB9LApAQCAtNzM1LDcgKzczNSw3IEBACiB2b2lkIGxic19kZWJ1Z2ZzX2luaXRfb25lKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgKmZpbGVzOworCWNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyAqZmlsZXM7CiAJaWYgKCFsYnNfZGlyKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTkzOCw3ICs5MzgsNyBAQAogCXJldHVybiAoc3NpemVfdCljbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxic19kZWJ1Z19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGJzX2RlYnVnX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBvcGVuX2ZpbGVfZ2VuZXJpYywKIAkud3JpdGUgPSBsYnNfZGVidWdmc193cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAppbmRleCBjMzY0ZTRjMC4uZThkZmRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBMQlNfREVCX0hFWAkweDAwMjAwMDAwCiAjZGVmaW5lIExCU19ERUJfU0RJTwkweDAwNDAwMDAwCiAjZGVmaW5lIExCU19ERUJfU1lTRlMJMHgwMDgwMDAwMAorI2RlZmluZSBMQlNfREVCX1NQSQkweDAxMDAwMDAwCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbGJzX2RlYnVnOwogCkBAIC04NCw2ICs4NSw3IEBACiAjZGVmaW5lIGxic19kZWJfdGhyZWFkKGZtdCwgYXJncy4uLikgICAgTEJTX0RFQl9MTChMQlNfREVCX1RIUkVBRCwgIiB0aHJlYWQiLCBmbXQsICMjYXJncykKICNkZWZpbmUgbGJzX2RlYl9zZGlvKGZtdCwgYXJncy4uLikgICAgICBMQlNfREVCX0xMKExCU19ERUJfU0RJTywgIiBzZGlvIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfc3lzZnMoZm10LCBhcmdzLi4uKSAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NZU0ZTLCAiIHN5c2ZzIiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIGxic19kZWJfc3BpKGZtdCwgYXJncy4uLikgICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NQSSwgIiBzcGkiLCBmbXQsICMjYXJncykKIAogI2RlZmluZSBsYnNfcHJfaW5mbyhmb3JtYXQsIGFyZ3MuLi4pIFwKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FIjogIiBmb3JtYXQsICMjIGFyZ3MpCkBAIC0yNjMsNiArMjY1LDcgQEAKIAogI2RlZmluZQlDTURfRl9IT1NUQ01ECQkoMSA8PCAwKQogI2RlZmluZSBGV19DQVBJTkZPX1dQQSAgCSgxIDw8IDApCisjZGVmaW5lIEZXX0NBUElORk9fUFMgIAkJKDEgPDwgMSkKICNkZWZpbmUgRldfQ0FQSU5GT19GSVJNV0FSRV9VUEdSQURFCSgxIDw8IDEzKQogI2RlZmluZSBGV19DQVBJTkZPX0JPT1QyX1VQR1JBREUJKDE8PDE0KQogI2RlZmluZSBGV19DQVBJTkZPX1BFUlNJU1RFTlRfQ09ORklHCSgxPDwxNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKaW5kZXggZGQ2ODJjNC4uMjdlODFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKQEAgLTEwOSw3ICsxMDksNiBAQAogCXZvaWQgKmNhcmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2RldjsgLyogVmlydHVhbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqcnRhcF9uZXRfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKaW5kZXggMjc3ZmYxOS4uZDQ0NTdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaApAQCAtNjYsNiArNjYsNyBAQAogI2RlZmluZSBDTURfODAyXzExX0xFRF9HUElPX0NUUkwJCTB4MDA0ZQogI2RlZmluZSBDTURfODAyXzExX0VFUFJPTV9BQ0NFU1MJCTB4MDA1OQogI2RlZmluZSBDTURfODAyXzExX0JBTkRfQ09ORklHCQkJMHgwMDU4CisjZGVmaW5lIENNRF9HU1BJX0JVU19DT05GSUcJCQkweDAwNWEKICNkZWZpbmUgQ01EXzgwMl8xMURfRE9NQUlOX0lORk8JCQkweDAwNWIKICNkZWZpbmUgQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwJCQkweDAwNWUKICNkZWZpbmUgQ01EXzgwMl8xMV9TTEVFUF9QQVJBTVMJCQkweDAwNjYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaAppbmRleCBmNmE3OWE2Li5hODk5YWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCkBAIC0yMjEsNiArMjIxLDE0IEBACiAJdTggbWFjbGlzdFtFVEhfQUxFTiAqIE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGNtZF9kc19nc3BpX2J1c19jb25maWcgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBidXNfZGVsYXlfbW9kZTsKKwlfX2xlMTYgaG9zdF90aW1lX2RlbGF5X3RvX3JlYWRfcG9ydDsKKwlfX2xlMTYgaG9zdF90aW1lX2RlbGF5X3RvX3JlYWRfcmVnaXN0ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlIHsKIAl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKIAl1OCBhdXRodHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCmluZGV4IDg0MmEwOGQuLmNlZGVhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CiAJCXU4IHZhbCA9IGlmX2NzX3JlYWQ4KGNhcmQsIGFkZHIpOwogCQlpZiAodmFsID09IHJlZykKLQkJCXJldHVybiBpOworCQkJcmV0dXJuIDA7CiAJCXVkZWxheSg1KTsKIAl9CiAJcmV0dXJuIC1FVElNRTsKQEAgLTQyMSw3ICs0MjEsNyBAQAogCWxlbiA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19SRUFEX0xFTik7CiAJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7CiAJCWxic19wcl9lcnIoImNhcmQgZGF0YSBidWZmZXIgaGFzIGludmFsaWQgIyBvZiBieXRlcyAoJWQpXG4iLCBsZW4pOwotCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlnb3RvIGRhdF9lcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggNDUxOWQ3My4uNzZmNGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwpAQCAtOTUsNiArOTUsOCBAQAogCiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgaWZfc2Rpb19wYWNrZXQJKnBhY2tldHM7CisKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlwYWNrZXRfd29ya2VyOwogfTsKIApAQCAtMjA5LDYgKzIxMSw5IEBACiAJCWV2ZW50ID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBJRl9TRElPX0VWRU5ULCAmcmV0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OworCisJCS8qIHJpZ2h0IHNoaWZ0IDMgYml0cyB0byBnZXQgdGhlIGV2ZW50IGlkICovCisJCWV2ZW50ID4+PSAzOwogCX0gZWxzZSB7CiAJCWlmIChzaXplIDwgNCkgewogCQkJbGJzX2RlYl9zZGlvKCJldmVudCBwYWNrZXQgdG9vIHNtYWxsICglZCBieXRlcylcbiIsCkBAIC03NDMsNyArNzQ4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAotCXNjaGVkdWxlX3dvcmsoJmNhcmQtPnBhY2tldF93b3JrZXIpOworCXF1ZXVlX3dvcmsoY2FyZC0+d29ya3F1ZXVlLCAmY2FyZC0+cGFja2V0X3dvcmtlcik7CiAKIAlyZXQgPSAwOwogCkBAIC04MzMsNiArODM4LDcgQEAKIAljYXJkLT5mdW5jID0gZnVuYzsKIAljYXJkLT5tb2RlbCA9IG1vZGVsOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKwljYXJkLT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJsaWJlcnRhc19zZGlvIik7CiAJSU5JVF9XT1JLKCZjYXJkLT5wYWNrZXRfd29ya2VyLCBpZl9zZGlvX2hvc3RfdG9fY2FyZF93b3JrZXIpOwogCiAJZm9yIChpID0gMDtpIDwgQVJSQVlfU0laRShpZl9zZGlvX21vZGVscyk7aSsrKSB7CkBAIC05MjEsMTUgKzkyNywxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FjdGl2YXRlX2NhcmQ7CiAKKwlpZiAocHJpdi0+ZndjYXBpbmZvICYgRldfQ0FQSU5GT19QUykKKwkJcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKKwogb3V0OgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIAogZXJyX2FjdGl2YXRlX2NhcmQ6Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlmcmVlX25ldGRldihwcml2LT5kZXYpOwotCWtmcmVlKHByaXYpOworCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsKIHJlY2xhaW06CiAJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwogcmVsZWFzZV9pbnQ6CkBAIC05MzksNiArOTQ3LDcgQEAKIHJlbGVhc2U6CiAJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CiBmcmVlOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAJd2hpbGUgKGNhcmQtPnBhY2tldHMpIHsKIAkJcGFja2V0ID0gY2FyZC0+cGFja2V0czsKIAkJY2FyZC0+cGFja2V0cyA9IGNhcmQtPnBhY2tldHMtPm5leHQ7CkBAIC05NjUsNyArOTc0LDggQEAKIAlsYnNfc3RvcF9jYXJkKGNhcmQtPnByaXYpOwogCWxic19yZW1vdmVfY2FyZChjYXJkLT5wcml2KTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKIAogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIAlzZGlvX3JlbGVhc2VfaXJxKGZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzMxMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKQEAgLTAsMCArMSwxMjE4IEBACisvKgorICoJbGludXgvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKyAqCisgKglEcml2ZXIgZm9yIE1hcnZlbGwgU1BJIFdMQU4gY2FyZHMuCisgKgorICoJQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqCUF1dGhvcnM6CisgKglBbmRyZXkgWXVyb3Zza3kgPGFuZHJleUBjb3p5Yml0LmNvbT4KKyAqCUNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+CisgKgorICoJSW5zcGlyZWQgYnkgaWZfc2Rpby5jLCBDb3B5cmlnaHQgMjAwNy0yMDA4IFBpZXJyZSBPc3NtYW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlICJob3N0LmgiCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJkZXYuaCIKKyNpbmNsdWRlICJpZl9zcGkuaCIKKworc3RydWN0IGlmX3NwaV9wYWNrZXQgeworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CisJdTE2CQkJCWJsZW47CisJdTgJCQkJYnVmZmVyWzBdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKK307CisKK3N0cnVjdCBpZl9zcGlfY2FyZCB7CisJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJc3RydWN0IGxic19wcml2YXRlCQkqcHJpdjsKKwlzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJY2hhcgkJCQloZWxwZXJfZndfbmFtZVtGSVJNV0FSRV9OQU1FX01BWF07CisJY2hhcgkJCQltYWluX2Z3X25hbWVbRklSTVdBUkVfTkFNRV9NQVhdOworCisJLyogVGhlIGNhcmQgSUQgYW5kIGNhcmQgcmV2aXNpb24sIGFzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gKi8KKwl1MTYJCQkJY2FyZF9pZDsKKwl1OAkJCQljYXJkX3JldjsKKworCS8qIFBpbiBudW1iZXIgZm9yIG91ciBHUElPIGNoaXAtc2VsZWN0LiAqLworCS8qIFRPRE86IE9uY2UgdGhlIGdlbmVyaWMgU1BJIGxheWVyIGhhcyBzb21lIGFkZGl0aW9uYWwgZmVhdHVyZXMsIHdlCisJICogc2hvdWxkIHRha2UgdGhpcyBvdXQgYW5kIHVzZSB0aGUgbm9ybWFsIGNoaXAgc2VsZWN0IGhlcmUuCisJICogV2UgbmVlZCBzdXBwb3J0IGZvciBjaGlwIHNlbGVjdCBkZWxheXMsIGFuZCBub3QgZHJvcHBpbmcgY2hpcHNlbGVjdAorCSAqIGFmdGVyIGVhY2ggd29yZC4gKi8KKwlpbnQJCQkJZ3Bpb19jczsKKworCS8qIFRoZSBsYXN0IHRpbWUgdGhhdCB3ZSBpbml0aWF0ZWQgYW4gU1BVIG9wZXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJCQlwcmV2X3hmZXJfdGltZTsKKworCWludAkJCQl1c2VfZHVtbXlfd3JpdGVzOworCXVuc2lnbmVkIGxvbmcJCQlzcHVfcG9ydF9kZWxheTsKKwl1bnNpZ25lZCBsb25nCQkJc3B1X3JlZ19kZWxheTsKKworCS8qIEhhbmRsZXMgYWxsIFNQSSBjb21tdW5pY2F0aW9uIChleGNlcHQgZm9yIEZXIGxvYWQpICovCisJc3RydWN0IHRhc2tfc3RydWN0CQkqc3BpX3RocmVhZDsKKwlpbnQJCQkJcnVuX3RocmVhZDsKKworCS8qIFVzZWQgdG8gd2FrZSB1cCB0aGUgc3BpX3RocmVhZCAqLworCXN0cnVjdCBzZW1hcGhvcmUJCXNwaV9yZWFkeTsKKwlzdHJ1Y3Qgc2VtYXBob3JlCQlzcGlfdGhyZWFkX3Rlcm1pbmF0ZWQ7CisKKwl1OAkJCQljbWRfYnVmZmVyW0lGX1NQSV9DTURfQlVGX1NJWkVdOworCisJLyogQSBidWZmZXIgb2YgaW5jb21pbmcgcGFja2V0cyBmcm9tIGxpYmVydGFzIGNvcmUuCisJICogU2luY2Ugd2UgY2FuJ3Qgc2xlZXAgaW4gaHdfaG9zdF90b19jYXJkLCB3ZSBoYXZlIHRvIGJ1ZmZlcgorCSAqIHRoZW0uICovCisJc3RydWN0IGxpc3RfaGVhZAkJY21kX3BhY2tldF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCWRhdGFfcGFja2V0X2xpc3Q7CisKKwkvKiBQcm90ZWN0cyBjbWRfcGFja2V0X2xpc3QgYW5kIGRhdGFfcGFja2V0X2xpc3QgKi8KKwlzcGlubG9ja190CQkJYnVmZmVyX2xvY2s7Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX2lmX3NwaV9jYXJkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXJzb3IsICpuZXh0OworCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisKKwlCVUdfT04oY2FyZC0+cnVuX3RocmVhZCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnNvciwgbmV4dCwgJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCkgeworCQlwYWNrZXQgPSBjb250YWluZXJfb2YoY3Vyc29yLCBzdHJ1Y3QgaWZfc3BpX3BhY2tldCwgbGlzdCk7CisJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQlrZnJlZShwYWNrZXQpOworCX0KKwlsaXN0X2Zvcl9lYWNoX3NhZmUoY3Vyc29yLCBuZXh0LCAmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCkgeworCQlwYWNrZXQgPSBjb250YWluZXJfb2YoY3Vyc29yLCBzdHJ1Y3QgaWZfc3BpX3BhY2tldCwgbGlzdCk7CisJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQlrZnJlZShwYWNrZXQpOworCX0KKwlzcGlfc2V0X2RydmRhdGEoY2FyZC0+c3BpLCBOVUxMKTsKKwlrZnJlZShjYXJkKTsKK30KKworc3RhdGljIHN0cnVjdCBjaGlwX2lkZW50IGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbXSA9IHsKKwl7IC5jaGlwX2lkID0gMHgwNCwgLm5hbWUgPSA4Mzg1IH0sCisJeyAuY2hpcF9pZCA9IDB4MGIsIC5uYW1lID0gODY4NiB9LAorfTsKKworLyoKKyAqIFNQSSBJbnRlcmZhY2UgVW5pdCBSb3V0aW5lcworICoKKyAqIFRoZSBTUFUgc2l0cyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgV0xBTiBtb2R1bGUuCisgKiBBbGwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBmaXJtd2FyZSBpcyB0aHJvdWdoIFNQVSB0cmFuc2FjdGlvbnMuCisgKgorICogRmlyc3Qgd2UgaGF2ZSB0byBwdXQgYSBTUFUgcmVnaXN0ZXIgbmFtZSBvbiB0aGUgYnVzLiBUaGVuIHdlIGNhbgorICogZWl0aGVyIHJlYWQgZnJvbSBvciB3cml0ZSB0byB0aGF0IHJlZ2lzdGVyLgorICoKKyAqIEZvciAxNi1iaXQgdHJhbnNhY3Rpb25zLCBieXRlIG9yZGVyIG9uIHRoZSBidXMgaXMgYmlnLWVuZGlhbi4KKyAqIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhhdCBoZXJlLCB0aG91Z2guCisgKiBUaGUgdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UgaW4gdGhlIFNQSSByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgdm9pZCBzcHVfdHJhbnNhY3Rpb25faW5pdChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGNhcmQtPnByZXZfeGZlcl90aW1lICsgMSkpIHsKKwkJLyogVW5mb3J0dW5hdGVseSwgdGhlIFNQVSByZXF1aXJlcyBhIGRlbGF5IGJldHdlZW4gc3VjY2Vzc2l2ZQorCQkgKiB0cmFuc2FjdGlvbnMuIElmIG91ciBsYXN0IHRyYW5zYWN0aW9uIHdhcyBtb3JlIHRoYW4gYSBqaWZmeQorCQkgKiBhZ28sIHdlIGhhdmUgb2J2aW91c2x5IGFscmVhZHkgZGVsYXllZCBlbm91Z2guCisJCSAqIElmIG5vdCwgd2UgaGF2ZSB0byBidXN5LXdhaXQgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gKi8KKwkJbmRlbGF5KDQwMCk7CisJfQorCWdwaW9fc2V0X3ZhbHVlKGNhcmQtPmdwaW9fY3MsIDApOyAvKiBhc3NlcnQgQ1MgKi8KK30KKworc3RhdGljIHZvaWQgc3B1X3RyYW5zYWN0aW9uX2ZpbmlzaChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJZ3Bpb19zZXRfdmFsdWUoY2FyZC0+Z3Bpb19jcywgMSk7IC8qIGRyb3AgQ1MgKi8KKwljYXJkLT5wcmV2X3hmZXJfdGltZSA9IGppZmZpZXM7Cit9CisKKy8qIFdyaXRlIG91dCBhIGJ5dGUgYnVmZmVyIHRvIGFuIFNQSSByZWdpc3RlciwKKyAqIHVzaW5nIGEgc2VyaWVzIG9mIDE2LWJpdCB0cmFuc2ZlcnMuICovCitzdGF0aWMgaW50IHNwdV93cml0ZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCit7CisJaW50IGVyciA9IDA7CisJdTE2IHJlZ19vdXQgPSByZWcgfCBJRl9TUElfV1JJVEVfT1BFUkFUSU9OX01BU0s7CisKKwkvKiBZb3UgbXVzdCBnaXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBTUFUsIGV2ZW4gaWYgaXQKKwkgKiBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGxhc3Qgb25lLiAgKi8KKwlCVUdfT04obGVuICYgMHgxKTsKKworCXNwdV90cmFuc2FjdGlvbl9pbml0KGNhcmQpOworCisJLyogd3JpdGUgU1BVIHJlZ2lzdGVyIGluZGV4ICovCisJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnJlZ19vdXQsIHNpemVvZih1MTYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksIGJ1ZiwgbGVuKTsKKworb3V0OgorCXNwdV90cmFuc2FjdGlvbl9maW5pc2goY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3B1X3dyaXRlX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJcmV0dXJuIHNwdV93cml0ZShjYXJkLCByZWcsICh1OCAqKSZ2YWwsIHNpemVvZih1MTYpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3B1X3dyaXRlX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJLyogVGhlIGxvd2VyIDE2IGJpdHMgYXJlIHdyaXR0ZW4gZmlyc3QuICovCisJdTE2IG91dFsyXTsKKwlvdXRbMF0gPSB2YWwgJiAweGZmZmY7CisJb3V0WzFdID0gKHZhbCAmIDB4ZmZmZjAwMDApID4+IDE2OworCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmb3V0LCBzaXplb2YodTMyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV9yZWdfaXNfcG9ydF9yZWcodTE2IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgSUZfU1BJX0lPX1JEV1JQT1JUX1JFRzoKKwljYXNlIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHOgorCWNhc2UgSUZfU1BJX0RBVEFfUkRXUlBPUlRfUkVHOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3B1X3JlYWQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1OCAqYnVmLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBpLCBkZWxheTsKKwlpbnQgZXJyID0gMDsKKwl1MTYgemVybyA9IDA7CisJdTE2IHJlZ19vdXQgPSByZWcgfCBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSzsKKworCS8qIFlvdSBtdXN0IHRha2UgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgU1BVLCBldmVuIGlmIHlvdQorCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGxhc3Qgb25lLiAgKi8KKwlCVUdfT04obGVuICYgMHgxKTsKKworCXNwdV90cmFuc2FjdGlvbl9pbml0KGNhcmQpOworCisJLyogd3JpdGUgU1BVIHJlZ2lzdGVyIGluZGV4ICovCisJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnJlZ19vdXQsIHNpemVvZih1MTYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWRlbGF5ID0gc3B1X3JlZ19pc19wb3J0X3JlZyhyZWcpID8gY2FyZC0+c3B1X3BvcnRfZGVsYXkgOgorCQkJCQkJY2FyZC0+c3B1X3JlZ19kZWxheTsKKwlpZiAoY2FyZC0+dXNlX2R1bW15X3dyaXRlcykgeworCQkvKiBDbG9jayBpbiBkdW1teSBjeWNsZXMgd2hpbGUgdGhlIFNQVSBmaWxscyB0aGUgRklGTyAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGVsYXkgLyAxNjsgKytpKSB7CisJCQllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCAodTggKikmemVybywgc2l6ZW9mKHUxNikpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJLyogQnVzeS13YWl0IHdoaWxlIHRoZSBTUFUgZmlsbHMgdGhlIEZJRk8gKi8KKwkJbmRlbGF5KDEwMCArIChkZWxheSAqIDEwKSk7CisJfQorCisJLyogcmVhZCBpbiBkYXRhICovCisJZXJyID0gc3BpX3JlYWQoY2FyZC0+c3BpLCBidWYsIGxlbik7CisKK291dDoKKwlzcHVfdHJhbnNhY3Rpb25fZmluaXNoKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFJlYWQgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciAqLworc3RhdGljIGlubGluZSBpbnQgc3B1X3JlYWRfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2ICp2YWwpCit7CisJcmV0dXJuIHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopdmFsLCBzaXplb2YodTE2KSk7Cit9CisKKy8qIFJlYWQgMzIgYml0cyBmcm9tIGFuIFNQSSByZWdpc3Rlci4KKyAqIFRoZSBsb3cgMTYgYml0cyBhcmUgcmVhZCBmaXJzdC4gKi8KK3N0YXRpYyBpbnQgc3B1X3JlYWRfdTMyKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTMyICp2YWwpCit7CisJdTE2IGJ1ZlsyXTsKKwlpbnQgZXJyOworCWVyciA9IHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopYnVmLCBzaXplb2YodTMyKSk7CisJaWYgKCFlcnIpCisJCSp2YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDE2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBLZWVwIHJlYWRpbmcgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciB1bnRpbCB5b3UgZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdC4KKyAqCisgKiBJZiBtYXNrID0gMCwgdGhlIGNvcnJlY3QgcmVzdWx0IGlzIGFueSBub24temVybyBudW1iZXIuCisgKiBJZiBtYXNrICE9IDAsIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyBhbnkgbnVtYmVyIHdoZXJlCisgKiBudW1iZXIgJiB0YXJnZXRfbWFzayA9PSB0YXJnZXQKKyAqCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSBzZWNvbmQgcGFzc2VzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcmVzdWx0LiAqLworc3RhdGljIGludCBzcHVfd2FpdF9mb3JfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywKKwkJCXUxNiB0YXJnZXRfbWFzaywgdTE2IHRhcmdldCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyA1KkhaOworCXdoaWxlICgxKSB7CisJCXUxNiB2YWw7CisJCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCByZWcsICZ2YWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHRhcmdldF9tYXNrKSB7CisJCQlpZiAoKHZhbCAmIHRhcmdldF9tYXNrKSA9PSB0YXJnZXQpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAodmFsKQorCQkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxMDApOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJbGJzX3ByX2VycigiJXM6IHRpbWVvdXQgd2l0aCB2YWw9JTAyeCwgIgorCQkJICAgICAgICJ0YXJnZXRfbWFzaz0lMDJ4LCB0YXJnZXQ9JTAyeFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgdmFsLCB0YXJnZXRfbWFzaywgdGFyZ2V0KTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorfQorCisvKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IHJlY2VpdmUgYSBzcGVjaWZpYyB2YWx1ZS4KKyAqIFJldHVybnMgLUVUSU1FRE9VVCBpZiBhIDQgdHJpZXMgcGFzcyB3aXRob3V0IHN1Y2Nlc3MuICovCitzdGF0aWMgaW50IHNwdV93YWl0X2Zvcl91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MzIgcmVnLCB1MzIgdGFyZ2V0KQoreworCWludCBlcnIsIHRyeTsKKwlmb3IgKHRyeSA9IDA7IHRyeSA8IDQ7ICsrdHJ5KSB7CisJCXUzMiB2YWwgPSAwOworCQllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgcmVnLCAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmICh2YWwgPT0gdGFyZ2V0KQorCQkJcmV0dXJuIDA7CisJCW1kZWxheSgxMDApOworCX0KKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBzcHVfc2V0X2ludGVycnVwdF9tb2RlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCSAgIGludCBzdXBwcmVzc19ob3N0X2ludCwKKwkJCSAgIGludCBhdXRvX2ludCkKK3sKKwlpbnQgZXJyID0gMDsKKworCS8qIFdlIGNhbiBzdXBwcmVzcyBhIGhvc3QgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBhcHByb3ByaWF0ZQorCSAqIGJpdCBpbiB0aGUgImhvc3QgaW50ZXJydXB0IHN0YXR1cyBtYXNrIiByZWdpc3RlciAqLworCWlmIChzdXBwcmVzc19ob3N0X2ludCkgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsCisJCQkgICAgICBJRl9TUElfSElTTV9UWF9ET1dOTE9BRF9SRFkgfAorCQkJICAgICAgSUZfU1BJX0hJU01fUlhfVVBMT0FEX1JEWSB8CisJCQkgICAgICBJRl9TUElfSElTTV9DTURfRE9XTkxPQURfUkRZIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX0NBUkRFVkVOVCB8CisJCQkgICAgICBJRl9TUElfSElTTV9DTURfVVBMT0FEX1JEWSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIElmIGF1dG8taW50ZXJydXB0cyBhcmUgb24sIHRoZSBjb21wbGV0aW9uIG9mIGNlcnRhaW4gdHJhbnNhY3Rpb25zCisJICogd2lsbCB0cmlnZ2VyIGFuIGludGVycnVwdCBhdXRvbWF0aWNhbGx5LiBJZiBhdXRvLWludGVycnVwdHMKKwkgKiBhcmUgb2ZmLCB3ZSBuZWVkIHRvIHNldCB0aGUgIkNhcmQgSW50ZXJydXB0IENhdXNlIiByZWdpc3RlciB0bworCSAqIHRyaWdnZXIgYSBjYXJkIGludGVycnVwdC4gKi8KKwlpZiAoYXV0b19pbnQpIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfQ1RSTF9SRUcsCisJCQkJSUZfU1BJX0hJQ1RfVFhfRE9XTkxPQURfT1ZFUl9BVVRPIHwKKwkJCQlJRl9TUElfSElDVF9SWF9VUExPQURfT1ZFUl9BVVRPIHwKKwkJCQlJRl9TUElfSElDVF9DTURfRE9XTkxPQURfT1ZFUl9BVVRPIHwKKwkJCQlJRl9TUElfSElDVF9DTURfVVBMT0FEX09WRVJfQVVUTyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNwdV9nZXRfY2hpcF9yZXZpc2lvbihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkJICB1MTYgKmNhcmRfaWQsIHU4ICpjYXJkX3JldikKK3sKKwlpbnQgZXJyID0gMDsKKwl1MzIgZGV2X2N0cmw7CisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRywgJmRldl9jdHJsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCSpjYXJkX2lkID0gSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfSUQoZGV2X2N0cmwpOworCSpjYXJkX3JldiA9IElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX1JFVihkZXZfY3RybCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzcHVfc2V0X2J1c19tb2RlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IG1vZGUpCit7CisJaW50IGVyciA9IDA7CisJdTE2IHJ2YWw7CisJLyogc2V0IGJ1cyBtb2RlICovCisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU1BVX0JVU19NT0RFX1JFRywgbW9kZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKiBDaGVjayB0aGF0IHdlIHdlcmUgYWJsZSB0byByZWFkIGJhY2sgd2hhdCB3ZSBqdXN0IHdyb3RlLiAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU1BVX0JVU19NT0RFX1JFRywgJnJ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKHJ2YWwgIT0gbW9kZSkgeworCQlsYnNfcHJfZXJyKCJDYW4ndCByZWFkIGJ1cyBtb2RlIHJlZ2lzdGVyLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcHVfaW5pdChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIGludCB1c2VfZHVtbXlfd3JpdGVzKQoreworCWludCBlcnIgPSAwOworCXUzMiBkZWxheTsKKworCS8qIFdlIGhhdmUgdG8gc3RhcnQgdXAgaW4gdGltZWQgZGVsYXkgbW9kZSBzbyB0aGF0IHdlIGNhbiBzYWZlbHkKKwkgKiByZWFkIHRoZSBEZWxheSBSZWFkIFJlZ2lzdGVyLiAqLworCWNhcmQtPnVzZV9kdW1teV93cml0ZXMgPSAwOworCWVyciA9IHNwdV9zZXRfYnVzX21vZGUoY2FyZCwKKwkJCQlJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyB8CisJCQkJSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9USU1FRCB8CisJCQkJSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhcmQtPnNwdV9wb3J0X2RlbGF5ID0gMTAwMDsKKwljYXJkLT5zcHVfcmVnX2RlbGF5ID0gMTAwMDsKKwllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgSUZfU1BJX0RFTEFZX1JFQURfUkVHLCAmZGVsYXkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FyZC0+c3B1X3BvcnRfZGVsYXkgPSBkZWxheSAmIDB4MDAwMGZmZmY7CisJY2FyZC0+c3B1X3JlZ19kZWxheSA9IChkZWxheSAmIDB4ZmZmZjAwMDApID4+IDE2OworCisJLyogSWYgZHVtbXkgY2xvY2sgZGVsYXkgbW9kZSBoYXMgYmVlbiByZXF1ZXN0ZWQsIHN3aXRjaCB0byBpdCBub3cgKi8KKwlpZiAodXNlX2R1bW15X3dyaXRlcykgeworCQljYXJkLT51c2VfZHVtbXlfd3JpdGVzID0gMTsKKwkJZXJyID0gc3B1X3NldF9idXNfbW9kZShjYXJkLAorCQkJCUlGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfUklTSU5HIHwKKwkJCQlJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX0RVTU1ZX0NMT0NLIHwKKwkJCQlJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMTZfQklUX0RBVEEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlsYnNfZGViX3NwaSgiSW5pdGlhbGl6ZWQgU1BVIHVuaXQuICIKKwkJICAgICJzcHVfcG9ydF9kZWxheT0weCUwNGx4LCBzcHVfcmVnX2RlbGF5PTB4JTA0bHhcbiIsCisJCSAgICBjYXJkLT5zcHVfcG9ydF9kZWxheSwgY2FyZC0+c3B1X3JlZ19kZWxheSk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZpcm13YXJlIExvYWRpbmcKKyAqLworCitzdGF0aWMgaW50IGlmX3NwaV9wcm9nX2hlbHBlcl9maXJtd2FyZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaW50IGVyciA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisJaW50IGJ5dGVzX3JlbWFpbmluZzsKKwljb25zdCB1OCAqZnc7CisJdTggdGVtcFtIRUxQRVJfRldfTE9BRF9DSFVOS19TWl07CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNhcmQtPnNwaTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJZXJyID0gc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShjYXJkLCAxLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwkvKiBHZXQgaGVscGVyIGZpcm13YXJlIGltYWdlICovCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsIGNhcmQtPmhlbHBlcl9md19uYW1lLCAmc3BpLT5kZXYpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigicmVxdWVzdF9maXJtd2FyZSBmYWlsZWQgd2l0aCBlcnIgPSAlZFxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCWJ5dGVzX3JlbWFpbmluZyA9IGZpcm13YXJlLT5zaXplOworCWZ3ID0gZmlybXdhcmUtPmRhdGE7CisKKwkvKiBMb2FkIGhlbHBlciBmaXJtd2FyZSBpbWFnZSAqLworCXdoaWxlIChieXRlc19yZW1haW5pbmcgPiAwKSB7CisJCS8qIFNjcmF0Y2ggcGFkIDEgc2hvdWxkIGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZQorCQkgKiB3YW50IHRvIGRvd25sb2FkIHRvIHRoZSBmaXJtd2FyZSAqLworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLAorCQkJCQlIRUxQRVJfRldfTE9BRF9DSFVOS19TWik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKKwkJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSwKKwkJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJLyogRmVlZCB0aGUgZGF0YSBpbnRvIHRoZSBjb21tYW5kIHJlYWQvd3JpdGUgcG9ydCByZWcKKwkJICogaW4gY2h1bmtzIG9mIDY0IGJ5dGVzICovCisJCW1lbXNldCh0ZW1wLCAwLCBzaXplb2YodGVtcCkpOworCQltZW1jcHkodGVtcCwgZncsCisJCSAgICAgICBtaW4oYnl0ZXNfcmVtYWluaW5nLCBIRUxQRVJfRldfTE9BRF9DSFVOS19TWikpOworCQltZGVsYXkoMTApOworCQllcnIgPSBzcHVfd3JpdGUoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJCXRlbXAsIEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCQkvKiBJbnRlcnJ1cHQgdGhlIGJvb3QgY29kZSAqLworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHLAorCQkJCSAgICAgICBJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJYnl0ZXNfcmVtYWluaW5nIC09IEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaOworCQlmdyArPSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWjsKKwl9CisKKwkvKiBPbmNlIHRoZSBoZWxwZXIgLyBzaW5nbGUgc3RhZ2UgZmlybXdhcmUgZG93bmxvYWQgaXMgY29tcGxldGUsCisJICogd3JpdGUgMCB0byBzY3JhdGNoIHBhZCAxIGFuZCBpbnRlcnJ1cHQgdGhlCisJICogYm9vdGxvYWRlci4gVGhpcyBjb21wbGV0ZXMgdGhlIGhlbHBlciBkb3dubG9hZC4gKi8KKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLCBGSVJNV0FSRV9ETkxEX09LKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRywKKwkJCQlJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSKTsKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJbGJzX2RlYl9zcGkoIndhaXRpbmcgZm9yIGhlbHBlciB0byBib290Li4uXG4iKTsKKworcmVsZWFzZV9maXJtd2FyZToKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBoZWxwZXIgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgcGFja2V0IHRoZSBmaXJtd2FyZSBleHBlY3RzIHVzIHRvIHNlbmQKKyAqIFNldHMgY3JjX2VyciBpZiB0aGUgcHJldmlvdXMgdHJhbnNmZXIgaGFkIGEgQ1JDIGVycm9yLiAqLworc3RhdGljIGludCBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlX2NoZWNrX2xlbihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkJCQlpbnQgKmNyY19lcnIpCit7CisJdTE2IGxlbjsKKwlpbnQgZXJyID0gMDsKKworCS8qIHdhaXQgdW50aWwgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBpbmRpY2F0ZXMKKwkgKiB0aGF0IHdlIGFyZSByZWFkeSB0byBkb3dubG9hZCAqLworCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCisJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSwKKwkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoInRpbWVkIG91dCB3YWl0aW5nIGZvciBob3N0X2ludF9zdGF0dXNcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEFzayB0aGUgZGV2aWNlIGhvdyBtYW55IGJ5dGVzIG9mIGZpcm13YXJlIGl0IHdhbnRzLiAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgJmxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7CisJCWxic19wcl9lcnIoImZpcm13YXJlIGxvYWQgZGV2aWNlIHJlcXVlc3RlZCBhIGxhcmdlciAiCisJCQkgICAidHJhbmZlciB0aGFuIHdlIGFyZSBwcmVwYXJlZCB0byAiCisJCQkgICAiaGFuZGxlLiAobGVuID0gJWQpXG4iLCBsZW4pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGxlbiAmIDB4MSkgeworCQlsYnNfZGViX3NwaSgiJXM6IGNyYyBlcnJvclxuIiwgX19mdW5jX18pOworCQlsZW4gJj0gfjB4MTsKKwkJKmNyY19lcnIgPSAxOworCX0gZWxzZQorCQkqY3JjX2VyciA9IDA7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWludCBsZW4sIHByZXZfbGVuOworCWludCBieXRlcywgY3JjX2VyciA9IDAsIGVyciA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisJY29uc3QgdTggKmZ3OworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjYXJkLT5zcGk7CisJdTE2IG51bV9jcmNfZXJyczsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJZXJyID0gc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShjYXJkLCAxLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIEdldCBmaXJtd2FyZSBpbWFnZSAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBjYXJkLT5tYWluX2Z3X25hbWUsICZzcGktPmRldik7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGZpcm13YXJlICclcycgZnJvbSBrZXJuZWwuICIKKwkJCSJlcnIgPSAlZFxuIiwgX19mdW5jX18sIGNhcmQtPm1haW5fZndfbmFtZSwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgMCwgMCk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGluaXRpYWwgIgorCQkJICAgInNjcmF0Y2ggcmVnID0gMFxuIiwgX19mdW5jX18pOworCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJfQorCisJbnVtX2NyY19lcnJzID0gMDsKKwlwcmV2X2xlbiA9IDA7CisJYnl0ZXMgPSBmaXJtd2FyZS0+c2l6ZTsKKwlmdyA9IGZpcm13YXJlLT5kYXRhOworCXdoaWxlICgobGVuID0gaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZV9jaGVja19sZW4oY2FyZCwgJmNyY19lcnIpKSkgeworCQlpZiAobGVuIDwgMCkgeworCQkJZXJyID0gbGVuOworCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQl9CisJCWlmIChieXRlcyA8IDApIHsKKwkJCS8qIElmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGxlZnQsIHdlIHdvdWxkIG5vcm1hbGx5CisJCQkgKiBleHBlY3QgdG8gaGF2ZSB0ZXJtaW5hdGVkIHdpdGggbGVuID0gMCAqLworCQkJbGJzX3ByX2VycigiRmlybXdhcmUgbG9hZCB3YW50cyBtb3JlIGJ5dGVzICIKKwkJCQkgICAidGhhbiB3ZSBoYXZlIHRvIG9mZmVyLlxuIik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY3JjX2VycikgeworCQkJLyogUHJldmlvdXMgdHJhbnNmZXIgZmFpbGVkLiAqLworCQkJaWYgKCsrbnVtX2NyY19lcnJzID4gTUFYX01BSU5fRldfTE9BRF9DUkNfRVJSKSB7CisJCQkJbGJzX3ByX2VycigiVG9vIG1hbnkgQ1JDIGVycm9ycyBlbmNvdW50ZXJlZCAiCisJCQkJCSAgICJpbiBmaXJtd2FyZSBsb2FkLlxuIik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBQcmV2aW91cyB0cmFuc2ZlciBzdWNjZWVkZWQuIEFkdmFuY2UgY291bnRlcnMuICovCisJCQlieXRlcyAtPSBwcmV2X2xlbjsKKwkJCWZ3ICs9IHByZXZfbGVuOworCQl9CisJCWlmIChieXRlcyA8IGxlbikgeworCQkJbWVtc2V0KGNhcmQtPmNtZF9idWZmZXIsIDAsIGxlbik7CisJCQltZW1jcHkoY2FyZC0+Y21kX2J1ZmZlciwgZncsIGJ5dGVzKTsKKwkJfSBlbHNlCisJCQltZW1jcHkoY2FyZC0+Y21kX2J1ZmZlciwgZncsIGxlbik7CisKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWVyciA9IHNwdV93cml0ZShjYXJkLCBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRywKKwkJCQljYXJkLT5jbWRfYnVmZmVyLCBsZW4pOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcgLAorCQkJCQlJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJcHJldl9sZW4gPSBsZW47CisJfQorCWlmIChieXRlcyA+IHByZXZfbGVuKSB7CisJCWxic19wcl9lcnIoImZpcm13YXJlIGxvYWQgd2FudHMgZmV3ZXIgYnl0ZXMgdGhhbiAiCisJCQkgICAid2UgaGF2ZSB0byBvZmZlci5cbiIpOworCX0KKworCS8qIENvbmZpcm0gZmlybXdhcmUgZG93bmxvYWQgKi8KKwllcnIgPSBzcHVfd2FpdF9mb3JfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzRfUkVHLAorCQkJCQlTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoImZhaWxlZCB0byBjb25maXJtIHRoZSBmaXJtd2FyZSBkb3dubG9hZFxuIik7CisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwl9CisKK3JlbGVhc2VfZmlybXdhcmU6CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwgZXJyKTsKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnIgJWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTUEkgVHJhbnNmZXIgVGhyZWFkCisgKgorICogVGhlIFNQSSB0aHJlYWQgaGFuZGxlcyBhbGwgU1BJIHRyYW5zZmVycywgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBsb2NrLgorICovCisKKy8qIE1vdmUgYSBjb21tYW5kIGZyb20gdGhlIGNhcmQgdG8gdGhlIGhvc3QgKi8KK3N0YXRpYyBpbnQgaWZfc3BpX2MyaF9jbWQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKwl1MTYgbGVuOworCXU4IGk7CisKKwkvKiBXZSBuZWVkIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaGFuZGxlIHdoYXRldmVyIHBlb3BsZSBzZW5kIHRvCisJICogaHdfaG9zdF90b19jYXJkICovCisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgPCBMQlNfQ01EX0JVRkZFUl9TSVpFKTsKKwlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSA8IExCU19VUExEX1NJWkUpOworCisJLyogSXQncyBqdXN0IGFubm95aW5nIGlmIHRoZSBidWZmZXIgc2l6ZSBpc24ndCBhIG11bHRpcGxlIG9mIDQsIGJlY2F1c2UKKwkgKiB0aGVuIHdlIG1pZ2h0IGhhdmUgbGVuIDwgIElGX1NQSV9DTURfQlVGX1NJWkUgYnV0CisJICogQUxJR04obGVuLCA0KSA+IElGX1NQSV9DTURfQlVGX1NJWkUgKi8KKwlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSAlIDQgIT0gMCk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCS8qIEhvdyBtYW55IGJ5dGVzIGFyZSB0aGVyZSB0byByZWFkPyAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8yX1JFRywgJmxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJaWYgKCFsZW4pIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAorCQkJICAgX19mdW5jX18pOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGxlbiA+IElGX1NQSV9DTURfQlVGX1NJWkUpIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiByZXNwb25zZSBwYWNrZXQgdG9vIGxhcmdlOiAiCisJCQkgICAiJWQgYnl0ZXMsIGJ1dCBtYXhpbXVtIGlzICVkXG4iLAorCQkJICAgX19mdW5jX18sIGxlbiwgSUZfU1BJX0NNRF9CVUZfU0laRSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUgaW50byBvdXIgY29tbWFuZCBidWZmZXIgKi8KKwllcnIgPSBzcHVfcmVhZChjYXJkLCBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRywKKwkJCQljYXJkLT5jbWRfYnVmZmVyLCBBTElHTihsZW4sIDQpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCWkgPSAocHJpdi0+cmVzcF9pZHggPT0gMCkgPyAxIDogMDsKKwlCVUdfT04ocHJpdi0+cmVzcF9sZW5baV0pOworCXByaXYtPnJlc3BfbGVuW2ldID0gbGVuOworCW1lbWNweShwcml2LT5yZXNwX2J1ZltpXSwgY2FyZC0+Y21kX2J1ZmZlciwgbGVuKTsKKwlsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2UocHJpdiwgaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIE1vdmUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBob3N0ICovCitzdGF0aWMgaW50IGlmX3NwaV9jMmhfZGF0YShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwljaGFyICpkYXRhOworCXUxNiBsZW47CisJaW50IGVyciA9IDA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCS8qIEhvdyBtYW55IGJ5dGVzIGFyZSB0aGVyZSB0byByZWFkPyAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgJmxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJaWYgKCFsZW4pIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAorCQkJICAgX19mdW5jX18pOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgJWQgYnl0ZXMgb2YgZGF0YSwgYnV0ICIKKwkJCSAgICJvdXIgbWF4aW11bSBza2Igc2l6ZSBpcyAldVxuIiwKKwkJCSAgIF9fZnVuY19fLCBsZW4sIE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVE9ETzogc2hvdWxkIHdlIGFsbG9jYXRlIGEgc21hbGxlciBza2IgaWYgd2UgaGF2ZSBsZXNzIGRhdGE/ICovCisJc2tiID0gZGV2X2FsbG9jX3NrYihNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CisJaWYgKCFza2IpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKwlza2JfcmVzZXJ2ZShza2IsIElQRklFTERfQUxJR05fT0ZGU0VUKTsKKwlkYXRhID0gc2tiX3B1dChza2IsIGxlbik7CisKKwkvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlIGludG8gb3VyIHNrYi4uLiAqLworCWVyciA9IHNwdV9yZWFkKGNhcmQsIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRywgZGF0YSwgQUxJR04obGVuLCA0KSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3NrYjsKKworCS8qIHBhc3MgdGhlIFNLQiB0byBsaWJlcnRhcyAqLworCWVyciA9IGxic19wcm9jZXNzX3J4ZWRfcGFja2V0KGNhcmQtPnByaXYsIHNrYik7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3NrYjsKKworCS8qIHN1Y2Nlc3MgKi8KKwlnb3RvIG91dDsKKworZnJlZV9za2I6CisJZGV2X2tmcmVlX3NrYihza2IpOworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIE1vdmUgZGF0YSBvciBhIGNvbW1hbmQgZnJvbSB0aGUgaG9zdCB0byB0aGUgY2FyZC4gKi8KK3N0YXRpYyB2b2lkIGlmX3NwaV9oMmMoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldCwgaW50IHR5cGUpCit7CisJaW50IGVyciA9IDA7CisJdTE2IGludF90eXBlLCBwb3J0X3JlZzsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTVZNU19EQVQ6CisJCWludF90eXBlID0gSUZfU1BJX0NJQ19UWF9ET1dOTE9BRF9PVkVSOworCQlwb3J0X3JlZyA9IElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRzsKKwkJYnJlYWs7CisJY2FzZSBNVk1TX0NNRDoKKwkJaW50X3R5cGUgPSBJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSOworCQlwb3J0X3JlZyA9IElGX1NQSV9DTURfUkRXUlBPUlRfUkVHOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsYnNfcHJfZXJyKCJjYW4ndCB0cmFuc2ZlciBidWZmZXIgb2YgdHlwZSAlZFxuIiwgdHlwZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBjYXJkICovCisJZXJyID0gc3B1X3dyaXRlKGNhcmQsIHBvcnRfcmVnLCBwYWNrZXQtPmJ1ZmZlciwgcGFja2V0LT5ibGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworb3V0OgorCWtmcmVlKHBhY2tldCk7CisKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworfQorCisvKiBJbmZvcm0gdGhlIGhvc3QgYWJvdXQgYSBjYXJkIGV2ZW50ICovCitzdGF0aWMgdm9pZCBpZl9zcGlfZTJoKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjYXVzZTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzNfUkVHLCAmY2F1c2UpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJbGJzX3F1ZXVlX2V2ZW50KHByaXYsIGNhdXNlICYgMHhmZik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7Cit9CisKK3N0YXRpYyBpbnQgbGJzX3NwaV90aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IGRhdGE7CisJdTE2IGhpU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldDsKKworCXdoaWxlICgxKSB7CisJCS8qIFdhaXQgdG8gYmUgd29rZW4gdXAgYnkgb25lIG9mIHR3byB0aGluZ3MuICBGaXJzdCwgb3VyIElTUgorCQkgKiBjb3VsZCB0ZWxsIHVzIHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkIG9uIHRoZSBXTEFOLgorCQkgKiBTZWNvbmRseSwgbGliZXJ0YXMgY291bGQgY2FsbCBod19ob3N0X3RvX2NhcmQgd2l0aCBtb3JlCisJCSAqIGRhdGEsIHdoaWNoIHdlIG1pZ2h0IGJlIGFibGUgdG8gc2VuZC4KKwkJICovCisJCWRvIHsKKwkJCWVyciA9IGRvd25faW50ZXJydXB0aWJsZSgmY2FyZC0+c3BpX3JlYWR5KTsKKwkJCWlmICghY2FyZC0+cnVuX3RocmVhZCkgeworCQkJCXVwKCZjYXJkLT5zcGlfdGhyZWFkX3Rlcm1pbmF0ZWQpOworCQkJCWRvX2V4aXQoMCk7CisJCQl9CisJCX0gd2hpbGUgKGVyciA9PSBFSU5UUik7CisKKwkJLyogUmVhZCB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSB3aGF0IHdlCisJCSAqIGNhbiBkby4gKi8KKwkJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLAorCQkJCQkmaGlTdGF0dXMpOworCQlpZiAoZXJyKSB7CisJCQlsYnNfcHJfZXJyKCJJL08gZXJyb3JcbiIpOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DTURfVVBMT0FEX1JEWSkKKwkJCWVyciA9IGlmX3NwaV9jMmhfY21kKGNhcmQpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycjsKKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfUlhfVVBMT0FEX1JEWSkKKwkJCWVyciA9IGlmX3NwaV9jMmhfZGF0YShjYXJkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpIHsKKwkJCS8qIFRoaXMgbWVhbnMgdHdvIHRoaW5ncy4gRmlyc3Qgb2YgYWxsLAorCQkJICogaWYgdGhlcmUgd2FzIGEgcHJldmlvdXMgY29tbWFuZCBzZW50LCB0aGUgY2FyZCBoYXMKKwkJCSAqIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBpdC4KKwkJCSAqIFNlY29uZGx5LCBpdCBpcyBub3cgcmVhZHkgdG8gZG93bmxvYWQgYW5vdGhlcgorCQkJICogY29tbWFuZC4KKwkJCSAqLworCQkJbGJzX2hvc3RfdG9fY2FyZF9kb25lKGNhcmQtPnByaXYpOworCisJCQkvKiBEbyB3ZSBoYXZlIGFueSBjb21tYW5kIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bworCQkJICogc2VuZD8gKi8KKwkJCXBhY2tldCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+Y21kX3BhY2tldF9saXN0KSkgeworCQkJCXBhY2tldCA9IChzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqKShjYXJkLT4KKwkJCQkJCWNtZF9wYWNrZXRfbGlzdC5uZXh0KTsKKwkJCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwkJCWlmIChwYWNrZXQpCisJCQkJaWZfc3BpX2gyYyhjYXJkLCBwYWNrZXQsIE1WTVNfQ01EKTsKKwkJfQorCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9UWF9ET1dOTE9BRF9SRFkpIHsKKwkJCS8qIERvIHdlIGhhdmUgYW55IGRhdGEgcGFja2V0cyBmcm9tIHRoZSBob3N0IHRvCisJCQkgKiBzZW5kPyAqLworCQkJcGFja2V0ID0gTlVMTDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5kYXRhX3BhY2tldF9saXN0KSkgeworCQkJCXBhY2tldCA9IChzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqKShjYXJkLT4KKwkJCQkJCWRhdGFfcGFja2V0X2xpc3QubmV4dCk7CisJCQkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocGFja2V0KQorCQkJCWlmX3NwaV9oMmMoY2FyZCwgcGFja2V0LCBNVk1TX0RBVCk7CisJCX0KKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ0FSRF9FVkVOVCkKKwkJCWlmX3NwaV9lMmgoY2FyZCk7CisKK2VycjoKKwkJaWYgKGVycikKKwkJCWxic19wcl9lcnIoIiVzOiBnb3QgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCX0KK30KKworLyogQmxvY2sgdW50aWwgbGJzX3NwaV90aHJlYWQgdGhyZWFkIGhhcyB0ZXJtaW5hdGVkICovCitzdGF0aWMgdm9pZCBpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCS8qIEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIGt0aHJlYWRfc3RvcCBoZXJlLCBidXQgdGhhdCBmdW5jdGlvbgorCSAqIGNhbid0IHdha2UgdGhyZWFkcyB3YWl0aW5nIGZvciBhIHNlbWFwaG9yZS4gKi8KKwljYXJkLT5ydW5fdGhyZWFkID0gMDsKKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKKwlkb3duKCZjYXJkLT5zcGlfdGhyZWFkX3Rlcm1pbmF0ZWQpOworfQorCisvKgorICogSG9zdCB0byBDYXJkCisgKgorICogQ2FsbGVkIGZyb20gTGliZXJ0YXMgdG8gdHJhbnNmZXIgc29tZSBkYXRhIHRvIHRoZSBXTEFOIGRldmljZQorICogV2UgY2FuJ3Qgc2xlZXAgaGVyZS4gKi8KK3N0YXRpYyBpbnQgaWZfc3BpX2hvc3RfdG9fY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJdTggdHlwZSwgdTggKmJ1ZiwgdTE2IG5iKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKKwlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCXUxNiBibGVuOworCisJbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfU1BJLCAidHlwZSAlZCwgYnl0ZXMgJWQiLCB0eXBlLCBuYik7CisKKwlpZiAobmIgPT0gMCkgeworCQlsYnNfcHJfZXJyKCIlczogaW52YWxpZCBzaXplIHJlcXVlc3RlZDogJWRcbiIsIF9fZnVuY19fLCBuYik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlibGVuID0gQUxJR04obmIsIDQpOworCXBhY2tldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl9zcGlfcGFja2V0KSArIGJsZW4sIEdGUF9BVE9NSUMpOworCWlmICghcGFja2V0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlwYWNrZXQtPmJsZW4gPSBibGVuOworCW1lbWNweShwYWNrZXQtPmJ1ZmZlciwgYnVmLCBuYik7CisJbWVtc2V0KHBhY2tldC0+YnVmZmVyICsgbmIsIDAsIGJsZW4gLSBuYik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1WTVNfQ01EOgorCQlwcml2LT5kbmxkX3NlbnQgPSBETkxEX0NNRF9TRU5UOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmY2FyZC0+Y21kX3BhY2tldF9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBNVk1TX0RBVDoKKwkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9EQVRBX1NFTlQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZwYWNrZXQtPmxpc3QsICZjYXJkLT5kYXRhX3BhY2tldF9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWQiLCB0eXBlKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJLyogV2FrZSB1cCB0aGUgc3BpIHRocmVhZCAqLworCXVwKCZjYXJkLT5zcGlfcmVhZHkpOworb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVycj0lZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEhvc3QgSW50ZXJydXB0cworICoKKyAqIFNlcnZpY2UgaW5jb21pbmcgaW50ZXJydXB0cyBmcm9tIHRoZSBXTEFOIGRldmljZS4gV2UgY2FuJ3Qgc2xlZXAgaGVyZSwgc28KKyAqIGRvbid0IHRyeSB0byB0YWxrIG9uIHRoZSBTUEkgYnVzLCBqdXN0IHdha2UgdXAgdGhlIFNQSSB0aHJlYWQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpZl9zcGlfaG9zdF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IGRldl9pZDsKKworCXVwKCZjYXJkLT5zcGlfcmVhZHkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFNQSSBjYWxsYmFja3MKKyAqLworCitzdGF0aWMgaW50IGlmX3NwaV9jYWxjdWxhdGVfZndfbmFtZXModTE2IGNhcmRfaWQsCisJCQkgICAgICBjaGFyICpoZWxwZXJfZncsIGNoYXIgKm1haW5fZncpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcF9pZF90b19kZXZpY2VfbmFtZSk7ICsraSkgeworCQlpZiAoY2FyZF9pZCA9PSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLmNoaXBfaWQpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShjaGlwX2lkX3RvX2RldmljZV9uYW1lKSkgeworCQlsYnNfcHJfZXJyKCJVbnN1cHBvcnRlZCBjaGlwX2lkOiAweCUwMnhcbiIsIGNhcmRfaWQpOworCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKwl9CisJc25wcmludGYoaGVscGVyX2Z3LCBGSVJNV0FSRV9OQU1FX01BWCwgImxpYmVydGFzL2dzcGklZF9obHAuYmluIiwKKwkJIGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbaV0ubmFtZSk7CisJc25wcmludGYobWFpbl9mdywgRklSTVdBUkVfTkFNRV9NQVgsICJsaWJlcnRhcy9nc3BpJWQuYmluIiwKKwkJIGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbaV0ubmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlmX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBOVUxMOworCXN0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBlcnIgPSAwOworCXUzMiBzY3JhdGNoOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwlpZiAoIXBkYXRhKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGF0YS0+c2V0dXApIHsKKwkJZXJyID0gcGRhdGEtPnNldHVwKHNwaSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhpcyBzcGVjaWZpYyBkZXZpY2UgKi8KKwljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlmX3NwaV9jYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBjYXJkKTsKKwljYXJkLT5wZGF0YSA9IHBkYXRhOworCWNhcmQtPnNwaSA9IHNwaTsKKwljYXJkLT5ncGlvX2NzID0gcGRhdGEtPmdwaW9fY3M7CisJY2FyZC0+cHJldl94ZmVyX3RpbWUgPSBqaWZmaWVzOworCisJc2VtYV9pbml0KCZjYXJkLT5zcGlfcmVhZHksIDApOworCXNlbWFfaW5pdCgmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkLCAwKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y21kX3BhY2tldF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmJ1ZmZlcl9sb2NrKTsKKworCS8qIHNldCB1cCBHUElPIENTIGxpbmUuIFRPRE86IHVzZSAgcmVndWxhciBDUyBsaW5lICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KGNhcmQtPmdwaW9fY3MsICJpZl9zcGlfZ3Bpb19jaGlwX3NlbGVjdCIpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9jYXJkOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjYXJkLT5ncGlvX2NzLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKworCS8qIEluaXRpYWxpemUgdGhlIFNQSSBJbnRlcmZhY2UgVW5pdCAqLworCWVyciA9IHNwdV9pbml0KGNhcmQsIHBkYXRhLT51c2VfZHVtbXlfd3JpdGVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKwllcnIgPSBzcHVfZ2V0X2NoaXBfcmV2aXNpb24oY2FyZCwgJmNhcmQtPmNhcmRfaWQsICZjYXJkLT5jYXJkX3Jldik7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBGaXJtd2FyZSBsb2FkICovCisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzRfUkVHLCAmc2NyYXRjaCk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisJaWYgKHNjcmF0Y2ggPT0gU1VDQ0VTU0ZVTF9GV19ET1dOTE9BRF9NQUdJQykKKwkJbGJzX2RlYl9zcGkoIkZpcm13YXJlIGlzIGFscmVhZHkgbG9hZGVkIGZvciAiCisJCQkgICAgIk1hcnZlbGwgV0xBTiA4MDIuMTEgYWRhcHRlclxuIik7CisJZWxzZSB7CisJCWVyciA9IGlmX3NwaV9jYWxjdWxhdGVfZndfbmFtZXMoY2FyZC0+Y2FyZF9pZCwKKwkJCQljYXJkLT5oZWxwZXJfZndfbmFtZSwgY2FyZC0+bWFpbl9md19uYW1lKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9ncGlvOworCisJCWxic19kZWJfc3BpKCJJbml0aWFsaXppbmcgRlcgZm9yIE1hcnZlbGwgV0xBTiA4MDIuMTEgYWRhcHRlciAiCisJCQkJIihjaGlwX2lkID0gMHglMDR4LCBjaGlwX3JldiA9IDB4JTAyeCkgIgorCQkJCSJhdHRhY2hlZCB0byBTUEkgYnVzX251bSAlZCwgY2hpcF9zZWxlY3QgJWQuICIKKwkJCQkic3BpLT5tYXhfc3BlZWRfaHo9JWRcbiIsCisJCQkJY2FyZC0+Y2FyZF9pZCwgY2FyZC0+Y2FyZF9yZXYsCisJCQkJc3BpLT5tYXN0ZXItPmJ1c19udW0sIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkJc3BpLT5tYXhfc3BlZWRfaHopOworCQllcnIgPSBpZl9zcGlfcHJvZ19oZWxwZXJfZmlybXdhcmUoY2FyZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKwkJZXJyID0gaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZShjYXJkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9ncGlvOworCQlsYnNfZGViX3NwaSgibG9hZGVkIEZXIGZvciBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIpOworCX0KKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMCwgMSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBSZWdpc3RlciBvdXIgY2FyZCB3aXRoIGxpYmVydGFzLgorCSAqIFRoaXMgd2lsbCBjYWxsIGFsbG9jX2V0aGVyZGV2ICovCisJcHJpdiA9IGxic19hZGRfY2FyZChjYXJkLCAmc3BpLT5kZXYpOworCWlmICghcHJpdikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZ3BpbzsKKwl9CisJY2FyZC0+cHJpdiA9IHByaXY7CisJcHJpdi0+Y2FyZCA9IGNhcmQ7CisJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfc3BpX2hvc3RfdG9fY2FyZDsKKwlwcml2LT5md19yZWFkeSA9IDE7CisJcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKKworCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGhhbmRsaW5nIHN0dWZmLiAqLworCWNhcmQtPnJ1bl90aHJlYWQgPSAxOworCWNhcmQtPnNwaV90aHJlYWQgPSBrdGhyZWFkX3J1bihsYnNfc3BpX3RocmVhZCwgY2FyZCwgImxic19zcGlfdGhyZWFkIik7CisJaWYgKElTX0VSUihjYXJkLT5zcGlfdGhyZWFkKSkgeworCQljYXJkLT5ydW5fdGhyZWFkID0gMDsKKwkJZXJyID0gUFRSX0VSUihjYXJkLT5zcGlfdGhyZWFkKTsKKwkJbGJzX3ByX2VycigiZXJyb3IgY3JlYXRpbmcgU1BJIHRocmVhZDogZXJyPSVkXG4iLCBlcnIpOworCQlnb3RvIHJlbW92ZV9jYXJkOworCX0KKwllcnIgPSByZXF1ZXN0X2lycShzcGktPmlycSwgaWZfc3BpX2hvc3RfaW50ZXJydXB0LAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsICJsaWJlcnRhc19zcGkiLCBjYXJkKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoImNhbid0IGdldCBob3N0IGlycSBsaW5lLS0gcmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJZ290byB0ZXJtaW5hdGVfdGhyZWFkOworCX0KKworCS8qIFN0YXJ0IHRoZSBjYXJkLgorCSAqIFRoaXMgd2lsbCBjYWxsIHJlZ2lzdGVyX25ldGRldiwgYW5kIHdlJ2xsIHN0YXJ0CisJICogZ2V0dGluZyBpbnRlcnJ1cHRzLi4uICovCisJZXJyID0gbGJzX3N0YXJ0X2NhcmQocHJpdik7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2lycTsKKworCWxic19kZWJfc3BpKCJGaW5pc2hlZCBpbml0aWFsaXppbmcgV0xBTiBtb2R1bGUuXG4iKTsKKworCS8qIHN1Y2Nlc3NmdWwgZXhpdCAqLworCWdvdG8gb3V0OworCityZWxlYXNlX2lycToKKwlmcmVlX2lycShzcGktPmlycSwgY2FyZCk7Cit0ZXJtaW5hdGVfdGhyZWFkOgorCWlmX3NwaV90ZXJtaW5hdGVfc3BpX3RocmVhZChjYXJkKTsKK3JlbW92ZV9jYXJkOgorCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCitmcmVlX2dwaW86CisJZ3Bpb19mcmVlKGNhcmQtPmdwaW9fY3MpOworZnJlZV9jYXJkOgorCWZyZWVfaWZfc3BpX2NhcmQoY2FyZCk7CitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxpYmVydGFzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCisJbGJzX2RlYl9zcGkoImxpYmVydGFzX3NwaV9yZW1vdmVcbiIpOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXByaXYtPnN1cnByaXNlcmVtb3ZlZCA9IDE7CisKKwlsYnNfc3RvcF9jYXJkKHByaXYpOworCWZyZWVfaXJxKHNwaS0+aXJxLCBjYXJkKTsKKwlpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoY2FyZCk7CisJbGJzX3JlbW92ZV9jYXJkKHByaXYpOyAvKiB3aWxsIGNhbGwgZnJlZV9uZXRkZXYgKi8KKwlncGlvX2ZyZWUoY2FyZC0+Z3Bpb19jcyk7CisJaWYgKGNhcmQtPnBkYXRhLT50ZWFyZG93bikKKwkJY2FyZC0+cGRhdGEtPnRlYXJkb3duKHNwaSk7CisJZnJlZV9pZl9zcGlfY2FyZChjYXJkKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxpYmVydGFzX3NwaV9kcml2ZXIgPSB7CisJLnByb2JlCT0gaWZfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsaWJlcnRhc19zcGlfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJsaWJlcnRhc19zcGkiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qCisgKiBNb2R1bGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBfX2luaXQgaWZfc3BpX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibGliZXJ0YXNfc3BpOiBMaWJlcnRhcyBTUEkgZHJpdmVyXG4iKTsKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZsaWJlcnRhc19zcGlfZHJpdmVyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWZfc3BpX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsaWJlcnRhc19zcGlfZHJpdmVyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKK30KKworbW9kdWxlX2luaXQoaWZfc3BpX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGlmX3NwaV9leGl0X21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGliZXJ0YXMgU1BJIFdMQU4gRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXkgWXVyb3Zza3kgPGFuZHJleUBjb3p5Yml0LmNvbT4sICIKKwkgICAgICAiQ29saW4gTWNDYWJlIDxjb2xpbkBjb3p5Yml0LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwMzg2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICoJbGludXgvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKyAqCisgKglEcml2ZXIgZm9yIE1hcnZlbGwgU1BJIFdMQU4gY2FyZHMuCisgKgorICoJQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqCUF1dGhvcnM6CisgKglBbmRyZXkgWXVyb3Zza3kgPGFuZHJleUBjb3p5Yml0LmNvbT4KKyAqCUNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MQlNfSUZfU1BJX0hfCisjZGVmaW5lIF9MQlNfSUZfU1BJX0hfCisKKyNkZWZpbmUgSVBGSUVMRF9BTElHTl9PRkZTRVQgMgorI2RlZmluZSBJRl9TUElfQ01EX0JVRl9TSVpFIDI0MDAKKworLyoqKioqKioqKioqKioqKioqIEZpcm13YXJlICoqKioqKioqKioqKioqKioqLworc3RydWN0IGNoaXBfaWRlbnQgeworCXUxNiBjaGlwX2lkOworCXUxNiBuYW1lOworfTsKKworI2RlZmluZSBNQVhfTUFJTl9GV19MT0FEX0NSQ19FUlIgMTAKKworLyogQ2h1bmsgc2l6ZSB3aGVuIGxvYWRpbmcgdGhlIGhlbHBlciBmaXJtd2FyZSAqLworI2RlZmluZSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWiA2NAorCisvKiBWYWx1ZSB0byB3cml0ZSB0byBpbmRpY2F0ZSBlbmQgb2YgaGVscGVyIGZpcm13YXJlIGRubGQgKi8KKyNkZWZpbmUgRklSTVdBUkVfRE5MRF9PSyAweDAwMDAKKworLyogVmFsdWUgdG8gY2hlY2sgb25jZSB0aGUgbWFpbiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkICovCisjZGVmaW5lIFNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMgMHg4ODg4ODg4OAorCisvKioqKioqKioqKioqKioqKiogU1BJIEludGVyZmFjZSBVbml0ICoqKioqKioqKioqKioqKioqLworLyogTWFza3MgdXNlZCBpbiBTUEkgcmVnaXN0ZXIgcmVhZC93cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIElGX1NQSV9SRUFEX09QRVJBVElPTl9NQVNLIDB4MAorI2RlZmluZSBJRl9TUElfV1JJVEVfT1BFUkFUSU9OX01BU0sgMHg4MDAwCisKKy8qIFNQSSByZWdpc3RlciBvZmZzZXRzLiA0LWJ5dGUgYWxpZ25lZC4gKi8KKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHIDB4MDAJLyogRGV2aWNlSUQgY29udHJvbGxlciByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1JFQURCQVNFX1JFRyAweDA0IAkvKiBSZWFkIEkvTyBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSU9fV1JJVEVCQVNFX1JFRyAweDA4CS8qIFdyaXRlIEkvTyBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSU9fUkRXUlBPUlRfUkVHIDB4MEMJLyogUmVhZC9Xcml0ZSBJL08gcG9ydCByZWcgKi8KKworI2RlZmluZSBJRl9TUElfQ01EX1JFQURCQVNFX1JFRyAweDEwCS8qIFJlYWQgY29tbWFuZCBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ01EX1dSSVRFQkFTRV9SRUcgMHgxNAkvKiBXcml0ZSBjb21tYW5kIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHIDB4MTgJLyogUmVhZC9Xcml0ZSBjb21tYW5kIHBvcnQgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0RBVEFfUkVBREJBU0VfUkVHIDB4MUMJLyogUmVhZCBkYXRhIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9EQVRBX1dSSVRFQkFTRV9SRUcgMHgyMAkvKiBXcml0ZSBkYXRhIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRyAweDI0CS8qIFJlYWQvV3JpdGUgZGF0YSBwb3J0IHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzFfUkVHIDB4MjgJLyogU2NyYXRjaCByZWcgMSAqLworI2RlZmluZSBJRl9TUElfU0NSQVRDSF8yX1JFRyAweDJDCS8qIFNjcmF0Y2ggcmVnIDIgKi8KKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfM19SRUcgMHgzMAkvKiBTY3JhdGNoIHJlZyAzICovCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzRfUkVHIDB4MzQJLyogU2NyYXRjaCByZWcgNCAqLworCisjZGVmaW5lIElGX1NQSV9UWF9GUkFNRV9TRVFfTlVNX1JFRyAweDM4IC8qIFR4IGZyYW1lIHNlcXVlbmNlIG51bWJlciByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX1RYX0ZSQU1FX1NUQVRVU19SRUcgMHgzQwkvKiBUeCBmcmFtZSBzdGF0dXMgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHIDB4NDAJLyogSG9zdCBpbnRlcnJ1cHQgY29udHJvbGxlciByZWcgKi8KKworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHIDB4NDQJLyogQ2FyZCBpbnRlcnJ1cHQgY2F1c2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfUkVHIDB4NDggLyogQ2FyZCBpbnRlcnVwdCBzdGF0dXMgcmVnICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9FVkVOVF9NQVNLX1JFRyAweDRDIC8qIENhcmQgaW50ZXJydXB0IGV2ZW50IG1hc2sgKi8KKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX1NUQVRVU19NQVNLX1JFRwkweDUwIC8qIENhcmQgaW50ZXJydXB0IHN0YXR1cyBtYXNrICovCisKKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX1JFU0VUX1NFTEVDVF9SRUcgMHg1NCAvKiBDYXJkIGludGVycnVwdCByZXNldCBzZWxlY3QgKi8KKworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfQ0FVU0VfUkVHIDB4NTgJLyogSG9zdCBpbnRlcnJ1cHQgY2F1c2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHIDB4NUMJLyogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfRVZFTlRfTUFTS19SRUcgMHg2MCAvKiBIb3N0IGludGVycnVwdCBldmVudCBtYXNrICovCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcJMHg2NCAvKiBIb3N0IGludGVycnVwdCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfUkVTRVRfU0VMRUNUX1JFRyAweDY4IC8qIEhvc3QgaW50ZXJydXB0IHJlc2V0IHNlbGVjdCAqLworCisjZGVmaW5lIElGX1NQSV9ERUxBWV9SRUFEX1JFRyAweDZDCS8qIERlbGF5IHJlYWQgcmVnICovCisjZGVmaW5lIElGX1NQSV9TUFVfQlVTX01PREVfUkVHIDB4NzAJLyogU1BVIEJVUyBtb2RlIHJlZyAqLworCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHICoqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9JRChkYykgKChkYyAmIDB4ZmZmZjAwMDApPj4xNikKKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfUkVWKGRjKSAoZGMgJiAweDAwMDAwMGZmKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHICoqKioqKioqKioqKioqKioqLworLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogV2FrZSB1cCAqLworI2RlZmluZSBJRl9TUElfSElDVF9XQUtFX1VQCQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogV0xBTiByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElDVF9XTEFOX1JFQURZCQkJCSgxPDwxKQorLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fRklSU1RfSEFMRl9FTVBUWQkJKDE8PDIpICovCisvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfRklGT19TRUNPTkRfSEFMRl9FTVBUWQkJKDE8PDMpICovCisvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfSVJRU1JDX1dMQU4JCQkoMTw8NCkgKi8KKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFR4IGF1dG8gZG93bmxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfVFhfRE9XTkxPQURfT1ZFUl9BVVRPCQkoMTw8NSkKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFJ4IGF1dG8gdXBsb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1JYX1VQTE9BRF9PVkVSX0FVVE8JCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byBkb3dubG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9DTURfRE9XTkxPQURfT1ZFUl9BVVRPCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byB1cGxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX1VQTE9BRF9PVkVSX0FVVE8JCSgxPDw4KQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFR4IGRvd25sb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19UWF9ET1dOTE9BRF9PVkVSCQkJKDE8PDApCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBSeCB1cGxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX1JYX1VQTE9BRF9PVkVSCQkJKDE8PDEpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBDb21tYW5kIGRvd25sb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUgkJCSgxPDwyKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogSG9zdCBldmVudCAqLworI2RlZmluZSBJRl9TUElfQ0lDX0hPU1RfRVZFTlQJCQkJKDE8PDMpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBDb21tYW5kIHVwbG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfQ01EX1VQTE9BRF9PVkVSCQkJKDE8PDQpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBQb3dlciBkb3duICovCisjZGVmaW5lIElGX1NQSV9DSUNfUE9XRVJfRE9XTgkJCQkoMTw8NSkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfUkVHICoqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRl9TUElfQ0lTX1RYX0RPV05MT0FEX09WRVIJCQkoMTw8MCkKKyNkZWZpbmUgSUZfU1BJX0NJU19SWF9VUExPQURfT1ZFUgkJCSgxPDwxKQorI2RlZmluZSBJRl9TUElfQ0lTX0NNRF9ET1dOTE9BRF9PVkVSCQkJKDE8PDIpCisjZGVmaW5lIElGX1NQSV9DSVNfSE9TVF9FVkVOVAkJCQkoMTw8MykKKyNkZWZpbmUgSUZfU1BJX0NJU19DTURfVVBMT0FEX09WRVIJCQkoMTw8NCkKKyNkZWZpbmUgSUZfU1BJX0NJU19QT1dFUl9ET1dOCQkJCSgxPDw1KQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX0NBVVNFX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1VfVFhfRE9XTkxPQURfUkRZCQkJKDE8PDApCisjZGVmaW5lIElGX1NQSV9ISUNVX1JYX1VQTE9BRF9SRFkJCQkoMTw8MSkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorI2RlZmluZSBJRl9TUElfSElDVV9DQVJEX0VWRU5UCQkJCSgxPDwzKQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQorI2RlZmluZSBJRl9TUElfSElDVV9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisjZGVmaW5lIElGX1NQSV9ISUNVX0lPX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8NikKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfREFUQV9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDgpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogVHggZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfVFhfRE9XTkxPQURfUkRZCQkJKDE8PDApCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IFJ4IHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDYXJkIGV2ZW50ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NBUkRfRVZFTlQJCQkJKDE8PDMpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0lPX1dSX0ZJRk9fT1ZFUkZMT1cJCQkoMTw8NSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfSU9fUkRfRklGT19VTkRSRkxPVwkJCSgxPDw2KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw5KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHICoqKioqKioqKioqKioqKioqLworLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IFJ4IHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfRE9XTkxPQURfUkRZCQkJKDE8PDIpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ2FyZCBldmVudCAqLworI2RlZmluZSBJRl9TUElfSElTTV9DQVJERVZFTlQJCQkJKDE8PDMpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fSU9fUkRfRklGT19VTkRFUkZMT1cJCSgxPDw2KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9EQVRBX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw3KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fREFUQV9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDgpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcgKioqKioqKioqKioqKioqKiovCisvKiBTQ0sgZWRnZSBvbiB3aGljaCB0aGUgV0xBTiBtb2R1bGUgb3V0cHV0cyBkYXRhIG9uIE1JU08gKi8KKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9GQUxMSU5HIDB4OAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyAweDAKKworLyogSW4gYSBTUFUgcmVhZCBvcGVyYXRpb24sIHRoZXJlIGlzIGEgZGVsYXkgYmV0d2VlbiB3cml0aW5nIHRoZSBTUFUKKyAqIHJlZ2lzdGVyIG5hbWUgYW5kIGdldHRpbmcgYmFjayBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlLgorICogVGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRlcm1zIG9mIG5hbm9zZWNvbmRzIG9yIGluIHRlcm1zIG9mIGR1bW15CisgKiBjbG9jayBjeWNsZXMgd2hpY2ggdGhlIG1hc3RlciBtdXN0IG91dHB1dCBiZWZvcmUgcmVjZWl2aW5nIGEgcmVzcG9uc2UuICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfRFVNTVlfQ0xPQ0sgMHg0CisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfVElNRUQgMHgwCisKKy8qIFNvbWUgZGlmZmVyZW50IG1vZGVzIG9mIFNQSSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzhfQklUX0FERFJFU1NfMTZfQklUX0RBVEEgMHgwMAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfOF9CSVRfQUREUkVTU18zMl9CSVRfREFUQSAweDAxCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18xNl9CSVRfREFUQSAweDAyCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18zMl9CSVRfREFUQSAweDAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGY3NjYyM2UuLjhhZTkzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTU4MiwyMCArNTgyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxic19ob3N0X3RvX2NhcmRfZG9uZSk7CiAKLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5ldHdvcmsgc3RhdGlzdGljcwotICoKLSAqICBAcGFyYW0gZGV2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdHVyZQotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxic19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGxic19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTEwMDYsOSArOTkyLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19yZXN1bWUpOwogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgZmlybXdhcmUgaW1hZ2UsIGdldHMKLSAqICBIVyBzcGVjIGZyb20gZmlybXdhcmUgYW5kIHNldCBiYXNpYyBwYXJhbWV0ZXJzIHRvCi0gKiAgZmlybXdhcmUuCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBIVyBzcGVjIGZyb20gdGhlIGZpcm13YXJlIGFuZCBzZXRzCisgKiAgICAgICAgc29tZSBiYXNpYyBwYXJhbWV0ZXJzLgogICoKICAqICBAcGFyYW0gcHJpdiAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICogIEByZXR1cm4gCSAgIDAgb3IgLTEKQEAgLTExNjMsNiArMTE0OCwxNyBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsYnNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGxic19kZXZfb3BlbiwKKwkubmRvX3N0b3AJCT0gbGJzX2V0aF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYnNfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbGJzX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbGJzX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgY2FyZC4gaXQgd2lsbCBwcm9iZSB0aGUKICAqIGNhcmQsIGFsbG9jYXRlIHRoZSBsYnNfcHJpdiBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgpAQCAtMTE5NywxOSArMTE5MywxMyBAQAogCXByaXYtPmluZnJhX29wZW4gPSAwOwogCiAJLyogU2V0dXAgdGhlIE9TIEludGVyZmFjZSB0byBvdXIgZnVuY3Rpb25zICovCi0JZGV2LT5vcGVuID0gbGJzX2Rldl9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSBsYnNfZXRoX3N0b3A7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYnNfc2V0X21hY19hZGRyZXNzOwotCWRldi0+dHhfdGltZW91dCA9IGxic190eF90aW1lb3V0OwotCWRldi0+Z2V0X3N0YXRzID0gbGJzX2dldF9zdGF0czsKKyAJZGV2LT5uZXRkZXZfb3BzID0gJmxic19uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZsYnNfZXRodG9vbF9vcHM7CiAjaWZkZWYJV0lSRUxFU1NfRVhUCi0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbGJzX2hhbmRsZXJfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmbGJzX2hhbmRsZXJfZGVmOwogI2VuZGlmCiAJZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsIGRtZGV2KTsKIApAQCAtMTQxOSw2ICsxNDA5LDE0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfc3RvcF9jYXJkKTsKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1lc2hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGJzX2Rldl9vcGVuLAorCS5uZG9fc3RvcCAJCT0gbGJzX21lc2hfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogLyoqCiAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhZGRzIG1zaFggaW50ZXJmYWNlCiAgKgpAQCAtMTQ0MSwxMSArMTQzOSw3IEBACiAJbWVzaF9kZXYtPm1sX3ByaXYgPSBwcml2OwogCXByaXYtPm1lc2hfZGV2ID0gbWVzaF9kZXY7CiAKLQltZXNoX2Rldi0+b3BlbiA9IGxic19kZXZfb3BlbjsKLQltZXNoX2Rldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX2hhcmRfc3RhcnRfeG1pdDsKLQltZXNoX2Rldi0+c3RvcCA9IGxic19tZXNoX3N0b3A7Ci0JbWVzaF9kZXYtPmdldF9zdGF0cyA9IGxic19nZXRfc3RhdHM7Ci0JbWVzaF9kZXYtPnNldF9tYWNfYWRkcmVzcyA9IGxic19zZXRfbWFjX2FkZHJlc3M7CisJbWVzaF9kZXYtPm5ldGRldl9vcHMgPSAmbWVzaF9uZXRkZXZfb3BzOwogCW1lc2hfZGV2LT5ldGh0b29sX29wcyA9ICZsYnNfZXRodG9vbF9vcHM7CiAJbWVtY3B5KG1lc2hfZGV2LT5kZXZfYWRkciwgcHJpdi0+ZGV2LT5kZXZfYWRkciwKIAkJCXNpemVvZihwcml2LT5kZXYtPmRldl9hZGRyKSk7CkBAIC0xNDU2LDcgKzE0NTAsNiBAQAogCW1lc2hfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbWVzaF9oYW5kbGVyX2RlZjsKICNlbmRpZgogCW1lc2hfZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKLQltZXNoX2Rldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdDsKIAkvKiBSZWdpc3RlciB2aXJ0dWFsIG1lc2ggaW50ZXJmYWNlICovCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG1lc2hfZGV2KTsKIAlpZiAocmV0KSB7CkBAIC0xNjQ5LDE0ICsxNjQyLDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGJzX3J0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQgbGJzX3JlbW92ZV9ydGFwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CkBAIC0xNjY5LDYgKzE2NTQsMTIgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRhcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGxic19ydGFwX29wZW4sCisJLm5kb19zdG9wID0gbGJzX3J0YXBfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgaW50IGxic19hZGRfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xNjg4LDEwICsxNjc5LDcgQEAKIAogCW1lbWNweShydGFwX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmN1cnJlbnRfYWRkciwgRVRIX0FMRU4pOwogCXJ0YXBfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQlydGFwX2Rldi0+b3BlbiA9IGxic19ydGFwX29wZW47Ci0JcnRhcF9kZXYtPnN0b3AgPSBsYnNfcnRhcF9zdG9wOwotCXJ0YXBfZGV2LT5nZXRfc3RhdHMgPSBsYnNfcnRhcF9nZXRfc3RhdHM7Ci0JcnRhcF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19ydGFwX2hhcmRfc3RhcnRfeG1pdDsKKwlydGFwX2Rldi0+bmV0ZGV2X29wcyA9ICZydGFwX25ldGRldl9vcHM7CiAJcnRhcF9kZXYtPm1sX3ByaXYgPSBwcml2OwogCVNFVF9ORVRERVZfREVWKHJ0YXBfZGV2LCBwcml2LT5kZXYtPmRldi5wYXJlbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yYWRpb3RhcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaAppbmRleCBmOGViOTA5Ny4uZDE2YjI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yYWRpb3RhcC5oCkBAIC0zMywyMiArMzMsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7CiAJdTggZmxhZ3M7CiAJdTggcmF0ZTsKLQl1MTYgY2hhbl9mcmVxOwotCXUxNiBjaGFuX2ZsYWdzOwotCXU4IGFudGVubmE7CiAJdTggYW50c2lnbmFsOwotCXUxNiByeF9mbGFnczsKLSNpZiAwCi0JdTggcGFkW0lFRUU4MDIxMV9SQURJT1RBUF9IRFJMRU4gLSAxOF07Ci0jZW5kaWYKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIFJYX1JBRElPVEFQX1BSRVNFTlQgKAkJCVwKIAkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MpIHwJXAogCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKSB8CVwKLQkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkgfAlcCi0JKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpIHwJXAogCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwpIHxcCi0JKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTKSB8CVwKIAkwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwppbmRleCAwNzllNmFhLi42M2Q3ZTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKEVUSF9ITEVOICsgOCArIHNpemVvZihzdHJ1Y3QgcnhwZCkpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgbGVuZ3RoXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE3OSw3ICsxNzksNyBAQAogCWlmICghKHBfcnhfcGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgc3RhdHVzXG4iKTsKIAkJbGJzX3ByX2FsZXJ0KCJyeHBkIG5vdCBva1xuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXQgPSAwOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjQzLDggKzI0Myw4IEBACiAJbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwX3J4X3BkKTsKIAogCWxic19kZWJfcngoInJ4IGRhdGE6IHNpemUgb2YgYWN0dWFsIHBhY2tldCAlZFxuIiwgc2tiLT5sZW4pOwotCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAlpZiAoaW5faW50ZXJydXB0KCkpCkBAIC0zMTEsNyArMzExLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByZXQgPSAwOwotCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKIAlzdHJ1Y3Qgcng4MDIxMXBhY2tldGhkciAqcF9yeF9wa3Q7CiAJc3RydWN0IHJ4cGQgKnByeHBkOwogCXN0cnVjdCByeF9yYWRpb3RhcF9oZHIgcmFkaW90YXBfaGRyOwpAQCAtMzI2LDcgKzMyNiw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCAoRVRIX0hMRU4gKyA4ICsgc2l6ZW9mKHN0cnVjdCByeHBkKSkpIHsKIAkJbGJzX2RlYl9yeCgicnggZXJyOiBmcmFtZSByZWNlaXZlZCB3aXRoIGJhZCBsZW5ndGhcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlyZXQgPSAtRUlOVkFMOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBkb25lOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJICovCiAJaWYgKCEocHJ4cGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKSB7CiAJCS8vbGJzX2RlYl9yeCgicnggZXJyOiBmcmFtZSByZWNlaXZlZCB3aXRoIGJhZCBzdGF0dXNcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAl9CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBza2ItPmxlbi1zaXplb2YoUnhQZCkgPSAlZC0lemQgPSAlemRcbiIsCkBAIC0zNTEsMTkgKzM1MSwxMSBAQAogCXJhZGlvdGFwX2hkci5oZHIuaXRfcGFkID0gMDsKIAlyYWRpb3RhcF9oZHIuaGRyLml0X2xlbiA9IGNwdV90b19sZTE2IChzaXplb2Yoc3RydWN0IHJ4X3JhZGlvdGFwX2hkcikpOwogCXJhZGlvdGFwX2hkci5oZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyIChSWF9SQURJT1RBUF9QUkVTRU5UKTsKLQkvKiB1bmtub3duIHZhbHVlcyAqLwotCXJhZGlvdGFwX2hkci5mbGFncyA9IDA7Ci0JcmFkaW90YXBfaGRyLmNoYW5fZnJlcSA9IDA7Ci0JcmFkaW90YXBfaGRyLmNoYW5fZmxhZ3MgPSAwOwotCXJhZGlvdGFwX2hkci5hbnRlbm5hID0gMDsKLQkvKiBrbm93biB2YWx1ZXMgKi8KKwlpZiAoIShwcnhwZC0+c3RhdHVzICYgY3B1X3RvX2xlMTYoTVJWRFJWX1JYUERfU1RBVFVTX09LKSkpCisJCXJhZGlvdGFwX2hkci5mbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9CQURGQ1M7CiAJcmFkaW90YXBfaGRyLnJhdGUgPSBjb252ZXJ0X212X3JhdGVfdG9fcmFkaW90YXAocHJ4cGQtPnJ4X3JhdGUpOwogCS8qIFhYWCBtdXN0IGNoZWNrIG5vIGNhcnJ5b3V0ICovCiAJcmFkaW90YXBfaGRyLmFudHNpZ25hbCA9IHByeHBkLT5zbnIgKyBwcnhwZC0+bmY7Ci0JcmFkaW90YXBfaGRyLnJ4X2ZsYWdzID0gMDsKLQlpZiAoIShwcnhwZC0+c3RhdHVzICYgY3B1X3RvX2xlMTYoTVJWRFJWX1JYUERfU1RBVFVTX09LKSkpCi0JCXJhZGlvdGFwX2hkci5yeF9mbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURGQ1M7Ci0JLy9tZW1zZXQocmFkaW90YXBfaGRyLnBhZCwgMHgxMSwgSUVFRTgwMjExX1JBRElPVEFQX0hEUkxFTiAtIDE4KTsKIAogCS8qIGNob3AgdGhlIHJ4cGQgKi8KIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcnhwZCkpOwpAQCAtMzg5LDggKzM4MSw4IEBACiAJbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwcnhwZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaXYtPnJ0YXBfbmV0X2Rldik7CiAJbmV0aWZfcngoc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwppbmRleCA5MDE0OTUwLi44MTI0ZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkJCQkJICAgIGJzcy0+d3BhX2llX2xlbik7CiAJCQl9IGVsc2UgaWYgKHBvc1sxXSA+PSBNQVJWRUxMX01FU0hfSUVfTEVOR1RIICYmCiAJCQkJICAgcG9zWzJdID09IDB4MDAgJiYgcG9zWzNdID09IDB4NTAgJiYKLQkJCQkgICBwb3NbNF0gPT0gMHg0MyAmJiBwb3NbNF0gPT0gMHgwNCkgeworCQkJCSAgIHBvc1s0XSA9PSAweDQzICYmIHBvc1s1XSA9PSAweDA0KSB7CiAJCQkJbGJzX2RlYl9zY2FuKCJnb3QgbWVzaCBJRVxuIik7CiAJCQkJYnNzLT5tZXNoID0gMTsKIAkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwppbmRleCA2OGJlYzMxLi5mMTBhYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKQEAgLTgyLDggKzgyLDggQEAKIAkJICAgICAgIHNrYi0+bGVuLCBNUlZEUlZfRVRIX1RYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CiAJCS8qIFdlJ2xsIG5ldmVyIG1hbmFnZSB0byBzZW5kIHRoaXMgb25lOyBkcm9wIGl0IGFuZCByZXR1cm4gJ09LJyAqLwogCi0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlnb3RvIGZyZWU7CiAJfQogCkBAIC0xNDYsOCArMTQ2LDggQEAKIAogCWxic19kZWJfdHgoIiVzIGxpbmVkIHVwIHBhY2tldFxuIiwgX19mdW5jX18pOwogCi0JcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmluZGV4IGYxNmQxMzYuLjhiYzE5MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC04MzAsNyArODMwLDcgQEAKIAlxdWFsaXR5ID0gcnNzaV9xdWFsOwogCiAJLyogUXVhbGl0eSBieSBUWCBlcnJvcnMgKi8KLQlwcml2LT53c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gcHJpdi0+c3RhdHMudHhfZXJyb3JzOworCXByaXYtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKIAogCW1lbXNldCgmbG9nLCAwLCBzaXplb2YobG9nKSk7CiAJbG9nLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGxvZykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYwppbmRleCAzZDM5MTRjLi4yODc5MGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJbGJ0Zl9jbWRfYXN5bmMocHJpdiwgQ01EXzgwMl8xMV9TRVRfTU9ERSwgJmNtZC5oZHIsIHNpemVvZihjbWQpKTsKIH0KIAotdm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCB1OCAqYnNzaWQpCit2b2lkIGxidGZfc2V0X2Jzc2lkKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGJvb2wgYWN0aXZhdGUsIGNvbnN0IHU4ICpic3NpZCkKIHsKIAlzdHJ1Y3QgY21kX2RzX3NldF9ic3NpZCBjbWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCmluZGV4IDg5OTVjZDcuLjRjYzQyZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaApAQCAtNDYzLDcgKzQ2Myw3IEBACiBpbnQgbGJ0Zl91cGRhdGVfaHdfc3BlYyhzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2KTsKIGludCBsYnRmX2NtZF9zZXRfbWFjX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYpOwogdm9pZCBsYnRmX3NldF9tb2RlKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGVudW0gbGJ0Zl9tb2RlIG1vZGUpOwotdm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCB1OCAqYnNzaWQpOwordm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCBjb25zdCB1OCAqYnNzaWQpOwogaW50IGxidGZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIHVpbnQ4X3QgKm1hY19hZGRyKTsKIAogaW50IGxidGZfc2V0X2NoYW5uZWwoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgdTggY2hhbm5lbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCBmODNkNjllLi5kNGZkYzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTEwLDcgKzEwLDYgQEAKIC8qCiAgKiBUT0RPOgogICogLSBJQlNTIG1vZGUgc2ltdWxhdGlvbiAoQmVhY29uIHRyYW5zbWlzc2lvbiB3aXRoIGNvbXBldGl0aW9uIGZvciAiYWlyIHRpbWUiKQotICogLSBJRUVFIDgwMi4xMWEgYW5kIDgwMi4xMW4gbW9kZXMKICAqIC0gUlggZmlsdGVyaW5nIGJhc2VkIG9uIGZpbHRlciBjb25maWd1cmF0aW9uIChkYXRhLT5yeF9maWx0ZXIpCiAgKi8KIApAQCAtMzEsNiArMzAsMTEyIEBACiBtb2R1bGVfcGFyYW0ocmFkaW9zLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb3MsICJOdW1iZXIgb2Ygc2ltdWxhdGVkIHJhZGlvcyIpOwogCisvKioKKyAqIGVudW0gaHdzaW1fcmVndGVzdCAtIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgdGVzdHMgd2Ugb2ZmZXIKKyAqCisgKiBUaGVzZSBhcmUgdGhlIGRpZmZlcmVudCB2YWx1ZXMgeW91IGNhbiB1c2UgZm9yIHRoZSByZWd0ZXN0CisgKiBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGlzIHVzZWZ1bCB0byBoZWxwIHRlc3Qgd29ybGQgcm9hbWluZworICogYW5kIHRoZSBkcml2ZXIgcmVndWxhdG9yeV9oaW50KCkgY2FsbCBhbmQgY29tYmluYXRpb25zIG9mIHRoZXNlLgorICogSWYgeW91IHdhbnQgdG8gZG8gc3BlY2lmaWMgYWxwaGEyIHJlZ3VsYXRvcnkgZG9tYWluIHRlc3RzIHNpbXBseQorICogdXNlIHRoZSB1c2Vyc3BhY2UgcmVndWxhdG9yeSByZXF1ZXN0IGFzIHRoYXQgd2lsbCBiZSByZXNwZWN0ZWQgYXMKKyAqIHdlbGwgd2l0aG91dCB0aGUgbmVlZCBvZiB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgaXMgZGVzaWduZWQKKyAqIG9ubHkgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QsIHdvcmxkIHJvYW1pbmcKKyAqIGFuZCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zLgorICoKKyAqIEBIV1NJTV9SRUdURVNUX0RJU0FCTEVEOiBObyByZWd1bGF0b3J5IHRlc3RzIGFyZSBwZXJmb3JtZWQsCisgKiAJdGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqIEBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeQorICoJaGludCwgb25seSBvbmUgZHJpdmVyIHJlZ3VsYXRvcnkgaGludCB3aWxsIGJlIHNlbnQgYXMgc3VjaCB0aGUKKyAqIAlzZWNvbmRhcnkgcmFkaW9zIGFyZSBleHBlY3RlZCB0byBmb2xsb3cuCisgKiBASFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTDogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqIAlyZXF1ZXN0IHdpdGggYWxsIHJhZGlvcyByZXBvcnRpbmcgdGhlIHNhbWUgcmVndWxhdG9yeSBkb21haW4uCisgKiBASFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlcnMgY2FsbGluZworICogCWRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMgcmVxdWVzdHMuIEV4cGVjdGVkIGJlaGF2aW91ciBpcyBmb3IKKyAqIAlhbiBpbnRlcnNlY3Rpb24gdG8gb2NjdXIgYnV0IGVhY2ggZGV2aWNlIHdpbGwgc3RpbGwgdXNlIHRoZWlyCisgKiAJcmVzcGVjdGl2ZSByZWd1bGF0b3J5IHJlcXVlc3RlZCBkb21haW5zLiBTdWJzZXF1ZW50IHJhZGlvcyB3aWxsCisgKiAJdXNlIHRoZSByZXN1bHRpbmcgaW50ZXJzZWN0aW9uLgorICogQEhXU0lNX1JFR1RFU1RfV09STERfUk9BTTogVXNlZCBmb3IgdGVzdGluZyB0aGUgd29ybGQgcm9hbWluZy4gV2UgYWNvbXBsaXNoCisgKgl0aGlzIGJ5IHVzaW5nIGEgY3VzdG9tIGJlYWNvbi1jYXBhYmxlIHJlZ3VsYXRvcnkgZG9tYWluIGZvciB0aGUgZmlyc3QKKyAqCXJhZGlvLiBBbGwgb3RoZXIgZGV2aWNlIHdvcmxkIHJvYW0uCisgKiBASFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQ6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluIHJlcXVlc3RzLiBBbGwgcmFkaW9zIHdpbGwgYWRoZXJlIHRvIHRoaXMgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBASFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjogVXNlZCBmb3IgdGVzdGluZyAyIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluIHJlcXVlc3RzLiBUaGUgZmlyc3QgcmFkaW8gd2lsbCBhZGhlcmUgdG8gdGhlIGZpcnN0IGN1c3RvbSB3b3JsZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLCB0aGUgc2Vjb25kIG9uZSB0byB0aGUgc2Vjb25kIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLiBBbGwgb3RoZXIgZGV2aWNlcyB3aWxsIHdvcmxkIHJvYW0uCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XXzogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLCBvbmx5IHRoZSBmaXJzdCByYWRpbyB3aWxsIHNlbmQgYSByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKglhbmQgdXNlIHN0cmljdCBzZXR0aW5ncy4gVGhlIHJlc3Qgb2YgdGhlIHJhZGlvcyBhcmUgZXhwZWN0ZWQgdG8gZm9sbG93LgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLiBBbGwgcmFkaW9zIHdpbGwgYWRoZXJlIHRvIHRoaXMuCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkKKyAqCWRvbWFpbiBzZXR0aW5ncywgY29tYmluZWQgd2l0aCBzZWNvbmRhcnkgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncy4gVGhlIGZpcnN0IHJhZGlvIHdpbGwgZ2V0IGEgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmcKKyAqCXVzaW5nIHRoZSBmaXJzdCBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0IGFuZCB0aGUgc2Vjb25kIHJhZGlvIHdpbGwgdXNlCisgKglub24tc3RyaWN0IHNldHRpbmdzIHVzaW5nIHRoZSBzZWNvbmQgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdC4gQWxsCisgKglvdGhlciBkZXZpY2VzIHNob3VsZCBmb2xsb3cgdGhlIGludGVyc2VjdGlvbiBjcmVhdGVkIGJldHdlZW4gdGhlCisgKglmaXJzdCB0d28uCisgKiBASFdTSU1fUkVHVEVTVF9BTEw6IFVzZWQgZm9yIHRlc3RpbmcgZXZlcnkgcG9zc2libGUgbWl4LiBZb3Ugd2lsbCBuZWVkCisgKiAJYXQgbGVhc3QgNiByYWRpb3MgZm9yIGEgY29tcGxldGUgdGVzdC4gV2Ugd2lsbCB0ZXN0IGluIHRoaXMgb3JkZXI6CisgKiAJMSAtIGRyaXZlciBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAkyIC0gc2Vjb25kIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbgorICogCTMgLSBmaXJzdCBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICogCTQgLSBzZWNvbmQgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqIAk1IC0gc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHVzaW5nIHRoZSB0aGlyZCBkcml2ZXIgcmVndWxhdG9yeQorICogCSAgICBkb21haW4gcmVxdWVzdAorICogCTYgYW5kIG9uIC0gc2hvdWxkIGZvbGxvdyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSAzcmQsIDRydGggYW5kIDV0aCByYWRpbworICogCSAgICAgICAgICAgcmVndWxhdG9yeSByZXF1ZXN0cy4KKyAqLworZW51bSBod3NpbV9yZWd0ZXN0IHsKKwlIV1NJTV9SRUdURVNUX0RJU0FCTEVEID0gMCwKKwlIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XID0gMSwKKwlIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMID0gMiwKKwlIV1NJTV9SRUdURVNUX0RJRkZfQ09VTlRSWSA9IDMsCisJSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNID0gNCwKKwlIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRCA9IDUsCisJSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMiA9IDYsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XID0gNywKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9BTEwgPSA4LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHID0gOSwKKwlIV1NJTV9SRUdURVNUX0FMTCA9IDEwLAorfTsKKworLyogU2V0IHRvIG9uZSBvZiB0aGUgSFdTSU1fUkVHVEVTVF8qIHZhbHVlcyBhYm92ZSAqLworc3RhdGljIGludCByZWd0ZXN0ID0gSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDsKK21vZHVsZV9wYXJhbShyZWd0ZXN0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZWd0ZXN0LCAiVGhlIHR5cGUgb2YgcmVndWxhdG9yeSB0ZXN0IHdlIHdhbnQgdG8gcnVuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpod3NpbV9hbHBoYTJzW10gPSB7CisJIkZJIiwKKwkiQUwiLAorCSJVUyIsCisJIkRFIiwKKwkiSlAiLAorCSJBTCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSA9IHsKKwkubl9yZWdfcnVsZXMgPSA0LAorCS5hbHBoYTIgPSAgIjk5IiwKKwkucmVnX3J1bGVzID0geworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSg1MTUwLTEwLCA1MjQwKzEwLCA0MCwgMCwgMzAsIDApLAorCQlSRUdfUlVMRSg1NzQ1LTEwLCA1ODI1KzEwLCA0MCwgMCwgMzAsIDApLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAyID0geworCS5uX3JlZ19ydWxlcyA9IDIsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCAwLCAyMCwgMCksCisJCVJFR19SVUxFKDU3MjUtMTAsIDU4NTArMTAsIDQwLCAwLCAzMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpLAorCX0KK307CisKIHN0cnVjdCBod3NpbV92aWZfcHJpdiB7CiAJdTMyIG1hZ2ljOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTg2LDIyICsxOTEsNjUgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpod3NpbV9tb247IC8qIGdsb2JhbCBtb25pdG9yIG5ldGRldiAqLwogCisjZGVmaW5lIENIQU4yRyhfZnJlcSkgIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2ZyZXEpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNbXSA9IHsKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NzIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0ODQgfSwKKyNkZWZpbmUgQ0hBTjVHKF9mcmVxKSB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9mcmVxKSwgXAorCS5tYXhfcG93ZXIgPSAyMCwgXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzXzJnaHpbXSA9IHsKKwlDSEFOMkcoMjQxMiksIC8qIENoYW5uZWwgMSAqLworCUNIQU4yRygyNDE3KSwgLyogQ2hhbm5lbCAyICovCisJQ0hBTjJHKDI0MjIpLCAvKiBDaGFubmVsIDMgKi8KKwlDSEFOMkcoMjQyNyksIC8qIENoYW5uZWwgNCAqLworCUNIQU4yRygyNDMyKSwgLyogQ2hhbm5lbCA1ICovCisJQ0hBTjJHKDI0MzcpLCAvKiBDaGFubmVsIDYgKi8KKwlDSEFOMkcoMjQ0MiksIC8qIENoYW5uZWwgNyAqLworCUNIQU4yRygyNDQ3KSwgLyogQ2hhbm5lbCA4ICovCisJQ0hBTjJHKDI0NTIpLCAvKiBDaGFubmVsIDkgKi8KKwlDSEFOMkcoMjQ1NyksIC8qIENoYW5uZWwgMTAgKi8KKwlDSEFOMkcoMjQ2MiksIC8qIENoYW5uZWwgMTEgKi8KKwlDSEFOMkcoMjQ2NyksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiksIC8qIENoYW5uZWwgMTMgKi8KKwlDSEFOMkcoMjQ4NCksIC8qIENoYW5uZWwgMTQgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNfNWdoeltdID0geworCUNIQU41Ryg1MTgwKSwgLyogQ2hhbm5lbCAzNiAqLworCUNIQU41Ryg1MjAwKSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwKSwgLyogQ2hhbm5lbCA0NCAqLworCUNIQU41Ryg1MjQwKSwgLyogQ2hhbm5lbCA0OCAqLworCisJQ0hBTjVHKDUyNjApLCAvKiBDaGFubmVsIDUyICovCisJQ0hBTjVHKDUyODApLCAvKiBDaGFubmVsIDU2ICovCisJQ0hBTjVHKDUzMDApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjApLCAvKiBDaGFubmVsIDY0ICovCisKKwlDSEFONUcoNTUwMCksIC8qIENoYW5uZWwgMTAwICovCisJQ0hBTjVHKDU1MjApLCAvKiBDaGFubmVsIDEwNCAqLworCUNIQU41Ryg1NTQwKSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCksIC8qIENoYW5uZWwgMTEyICovCisJQ0hBTjVHKDU1ODApLCAvKiBDaGFubmVsIDExNiAqLworCUNIQU41Ryg1NjAwKSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCksIC8qIENoYW5uZWwgMTI0ICovCisJQ0hBTjVHKDU2NDApLCAvKiBDaGFubmVsIDEyOCAqLworCUNIQU41Ryg1NjYwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCksIC8qIENoYW5uZWwgMTM2ICovCisJQ0hBTjVHKDU3MDApLCAvKiBDaGFubmVsIDE0MCAqLworCisJQ0hBTjVHKDU3NDUpLCAvKiBDaGFubmVsIDE0OSAqLworCUNIQU41Ryg1NzY1KSwgLyogQ2hhbm5lbCAxNTMgKi8KKwlDSEFONUcoNTc4NSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUpLCAvKiBDaGFubmVsIDE2MSAqLworCUNIQU41Ryg1ODI1KSwgLyogQ2hhbm5lbCAxNjUgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgaHdzaW1fcmF0ZXNbXSA9IHsKQEAgLTEyNiw4ICsyNzQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKV07CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kc1syXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfMmdoeltBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzJnaHopXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfNWdoeltBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzVnaHopXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbQVJSQVlfU0laRShod3NpbV9yYXRlcyldOwogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwpAQCAtNTkwLDEwICs3MzksMTYgQEAKIAkubmFtZSA9ICJtYWM4MDIxMV9od3NpbSIKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHdzaW1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgCT0gaHdzaW1fbW9uX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyB2b2lkIGh3c2ltX21vbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaHdzaW1fbW9uX3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmh3c2ltX25ldGRldl9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CkBAIC03MjgsNiArODgzLDcgQEAKIAl1OCBhZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKIAlpZiAocmFkaW9zIDwgMSB8fCByYWRpb3MgPiAxMDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc3LDMyICs5MzMsMTE2IEBACiAJCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAogCQkJQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CiAJCQlCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7Ci0JCWh3LT5hbXBkdV9xdWV1ZXMgPSAxOworCisJCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRTsKIAogCQkvKiBhc2sgbWFjODAyMTEgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbWFnaWMgKi8KIAkJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3c2ltX3ZpZl9wcml2KTsKIAkJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3c2ltX3N0YV9wcml2KTsKIAotCQltZW1jcHkoZGF0YS0+Y2hhbm5lbHMsIGh3c2ltX2NoYW5uZWxzLCBzaXplb2YoaHdzaW1fY2hhbm5lbHMpKTsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzXzJnaHosIGh3c2ltX2NoYW5uZWxzXzJnaHosCisJCQlzaXplb2YoaHdzaW1fY2hhbm5lbHNfMmdoeikpOworCQltZW1jcHkoZGF0YS0+Y2hhbm5lbHNfNWdoeiwgaHdzaW1fY2hhbm5lbHNfNWdoeiwKKwkJCXNpemVvZihod3NpbV9jaGFubmVsc181Z2h6KSk7CiAJCW1lbWNweShkYXRhLT5yYXRlcywgaHdzaW1fcmF0ZXMsIHNpemVvZihod3NpbV9yYXRlcykpOwotCQlkYXRhLT5iYW5kLmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHM7Ci0JCWRhdGEtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHMpOwotCQlkYXRhLT5iYW5kLmJpdHJhdGVzID0gZGF0YS0+cmF0ZXM7Ci0JCWRhdGEtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5odF9zdXBwb3J0ZWQgPSB0cnVlOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8Ci0JCQlJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmFtcGR1X2ZhY3RvciA9IDB4MzsKLQkJZGF0YS0+YmFuZC5odF9jYXAuYW1wZHVfZGVuc2l0eSA9IDB4NjsKLQkJbWVtc2V0KCZkYXRhLT5iYW5kLmh0X2NhcC5tY3MsIDAsCi0JCSAgICAgICBzaXplb2YoZGF0YS0+YmFuZC5odF9jYXAubWNzKSk7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnJ4X21hc2tbMV0gPSAweGZmOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmRhdGEtPmJhbmQ7CiAKKwkJZm9yIChiYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSAmZGF0YS0+YmFuZHNbYmFuZF07CisJCQlzd2l0Y2ggKGJhbmQpIHsKKwkJCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJCQlzYmFuZC0+Y2hhbm5lbHMgPSBkYXRhLT5jaGFubmVsc18yZ2h6OworCQkJCXNiYW5kLT5uX2NoYW5uZWxzID0KKwkJCQkJQVJSQVlfU0laRShod3NpbV9jaGFubmVsc18yZ2h6KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJCQlzYmFuZC0+Y2hhbm5lbHMgPSBkYXRhLT5jaGFubmVsc181Z2h6OworCQkJCXNiYW5kLT5uX2NoYW5uZWxzID0KKwkJCQkJQVJSQVlfU0laRShod3NpbV9jaGFubmVsc181Z2h6KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXNiYW5kLT5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOworCQkJc2JhbmQtPm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKKworCQkJc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQgPSB0cnVlOworCQkJc2JhbmQtPmh0X2NhcC5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKKwkJCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7CisJCQlzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvciA9IDB4MzsKKwkJCXNiYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA9IDB4NjsKKwkJCW1lbXNldCgmc2JhbmQtPmh0X2NhcC5tY3MsIDAsCisJCQkgICAgICAgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPSAweGZmOworCQkJc2JhbmQtPmh0X2NhcC5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOworCisJCQlody0+d2lwaHktPmJhbmRzW2JhbmRdID0gc2JhbmQ7CisJCX0KKworCQkvKiBXb3JrIHRvIGJlIGRvbmUgcHJpb3IgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkgKi8KKwkJc3dpdGNoIChyZWd0ZXN0KSB7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEw6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6CisJCQkvKgorCQkJICogTm90aGluZyB0byBiZSBkb25lIGZvciBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4KKwkJCSAqIGhpbnRzIHByaW9yIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfV09STERfUk9BTToKKwkJCWlmIChpID09IDApIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOgorCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEpOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjoKKwkJCWlmIChpID09IDApIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCX0gZWxzZSBpZiAoaSA9PSAxKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6CisJCQlody0+d2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVzoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRzoKKwkJCWlmIChpID09IDApCisJCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0FMTDoKKwkJCWlmIChpID09IDApIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCX0gZWxzZSBpZiAoaSA9PSAxKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMik7CisJCQl9IGVsc2UgaWYgKGkgPT0gNCkKKwkJCQlody0+d2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQkvKiBnaXZlIHRoZSByZWd1bGF0b3J5IHdvcmtxdWV1ZSBhIGNoYW5jZSB0byBydW4gKi8KKwkJaWYgKHJlZ3Rlc3QpCisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CiAJCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAibWFjODAyMTFfaHdzaW06ICIKQEAgLTgxMCw2ICsxMDUwLDUyIEBACiAJCQlnb3RvIGZhaWxlZF9odzsKIAkJfQogCisJCS8qIFdvcmsgdG8gYmUgZG9uZSBhZnRlciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKSAqLworCQlzd2l0Y2ggKHJlZ3Rlc3QpIHsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDoKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19GT0xMT1c6CisJCQlpZiAoIWkpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDoKKwkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6CisJCQlpZiAoaSA8IEFSUkFZX1NJWkUoaHdzaW1fYWxwaGEycykpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1tpXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRF8yOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKwkJCSAqIGRvbWFpbnMgYWZ0ZXIgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3CisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVzoKKwkJCWlmIChpID09IDApCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRzoKKwkJCWlmIChpID09IDApCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQllbHNlIGlmIChpID09IDEpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1sxXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0FMTDoKKwkJCWlmIChpID09IDIpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQllbHNlIGlmIChpID09IDMpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1sxXSk7CisJCQllbHNlIGlmIChpID09IDQpCisJCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1syXSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBod2FkZHIgJXBNIHJlZ2lzdGVyZWRcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksCiAJCSAgICAgICBody0+d2lwaHktPnBlcm1fYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2EwMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMCwwICsxLDM3ODkgQEAKKy8qCisgKiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGRyaXZlciBmb3IgTWFydmVsbCBUT1BET0cgODAyLjExIFdpcmVsZXNzIGNhcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBNV0w4S19ERVNDCSJNYXJ2ZWxsIFRPUERPRyhSKSA4MDIuMTEgV2lyZWxlc3MgTmV0d29yayBEcml2ZXIiCisjZGVmaW5lIE1XTDhLX05BTUUJS0JVSUxEX01PRE5BTUUKKyNkZWZpbmUgTVdMOEtfVkVSU0lPTgkiMC45LjEiCisKK01PRFVMRV9ERVNDUklQVElPTihNV0w4S19ERVNDKTsKK01PRFVMRV9WRVJTSU9OKE1XTDhLX1ZFUlNJT04pOworTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtd2w4a190YWJsZSkgPSB7CisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhMmIpLCAuZHJpdmVyX2RhdGEgPSA4Njg3LCB9LAorCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTMwKSwgLmRyaXZlcl9kYXRhID0gODY4NywgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbXdsOGtfdGFibGUpOworCisjZGVmaW5lIElFRUU4MDIxMV9BRERSX0xFTgkJCUVUSF9BTEVOCisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9HRU5fUFRSCQkJMHgwMDAwMGMxMAorI2RlZmluZSAgTVdMOEtfTU9ERV9TVEEJCQkJMHgwMDAwMDA1YQorI2RlZmluZSAgTVdMOEtfTU9ERV9BUAkJCQkweDAwMDAwMGE1CisjZGVmaW5lIE1XTDhLX0hJVV9JTlRfQ09ERQkJCTB4MDAwMDBjMTQKKyNkZWZpbmUgIE1XTDhLX0ZXU1RBX1JFQURZCQkJMHhmMGYxZjJmNAorI2RlZmluZSAgTVdMOEtfRldBUF9SRUFEWQkJCTB4ZjFmMmY0YTUKKyNkZWZpbmUgIE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRAkJMHgwMDAwMDAwNQorI2RlZmluZSBNV0w4S19ISVVfU0NSQVRDSAkJCTB4MDAwMDBjNDAKKworLyogSG9zdC0+ZGV2aWNlIGNvbW11bmljYXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUwkJMHgwMDAwMGMxOAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDAwMDBjMWMKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfTUFTSwkJMHgwMDAwMGMyMAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMyNAorI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzI4CisjZGVmaW5lICBNV0w4S19IMkFfSU5UX0RVTU1ZCQkJKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1JFU0VUCQkJKDEgPDwgMTUpCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1BTCQkJKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwJCQkoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUEFfUkVBRFkJCSgxIDw8IDApCisKKy8qIERldmljZS0+aG9zdCBjb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9FVkVOVFMJCTB4MDAwMDBjMmMKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTCQkweDAwMDAwYzMwCisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0sJCTB4MDAwMDBjMzQKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMCTB4MDAwMDBjMzgKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0sJMHgwMDAwMGMzYworI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9EVU1NWQkJCSgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVECQkoMSA8PCAxMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkJCSgxIDw8IDEwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURBUl9ERVRFQ1QJCSgxIDw8IDcpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBRElPX09OCQkJKDEgPDwgNikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT0ZGCQkoMSA8PCA1KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQJCSgxIDw8IDMpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX09QQ19ET05FCQkJKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkJCQkoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9UWF9ET05FCQkJKDEgPDwgMCkKKworI2RlZmluZSBNV0w4S19BMkhfRVZFTlRTCShNV0w4S19BMkhfSU5UX0RVTU1ZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBRElPX09OIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBRElPX09GRiB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkKKworLyogV01FIHN0cmVhbSBjbGFzc2VzICovCisjZGVmaW5lIFdNRV9BQ19CRQkwCQkvKiBiZXN0IGVmZm9ydCAqLworI2RlZmluZSBXTUVfQUNfQksJMQkJLyogYmFja2dyb3VuZCAqLworI2RlZmluZSBXTUVfQUNfVkkJMgkJLyogdmlkZW8gKi8KKyNkZWZpbmUgV01FX0FDX1ZPCTMJCS8qIHZvaWNlICovCisKKyNkZWZpbmUgTVdMOEtfUlhfUVVFVUVTCQkxCisjZGVmaW5lIE1XTDhLX1RYX1FVRVVFUwkJNAorCitzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgeworCWludCByeF9kZXNjX2NvdW50OworCisJLyogaHcgcmVjZWl2ZXMgaGVyZSAqLworCWludCByeF9oZWFkOworCisJLyogcmVmaWxsIGRlc2NzIGhlcmUgKi8KKwlpbnQgcnhfdGFpbDsKKworCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjX2FyZWE7CisJZG1hX2FkZHJfdCByeF9kZXNjX2RtYTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKK307CisKK3N0cnVjdCBtd2w4a19za2IgeworCS8qCisJICogVGhlIERNQSBlbmdpbmUgcmVxdWlyZXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIHBheWxvYWQuCisJICogSWYgdGhlIHNrYnVmZiBpcyBzaGFyZWQvY2xvbmVkLCBpdCBuZWVkcyB0byBiZSB1bnNoYXJlZC4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgc3RhY2sgYWx3YXlzIGdldHMgYmFjaworCSAqIHRoZSBza2J1ZmYgaXQgc2VudCBmb3IgdHJhbnNtaXNzaW9uLgorCSAqLworCXN0cnVjdCBza19idWZmICpjbG9uZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfTsKKworc3RydWN0IG13bDhrX3R4X3F1ZXVlIHsKKwkvKiBodyB0cmFuc21pdHMgaGVyZSAqLworCWludCB0eF9oZWFkOworCisJLyogc3cgYXBwZW5kcyBoZXJlICovCisJaW50IHR4X3RhaWw7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjX2FyZWE7CisJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKKwlzdHJ1Y3QgbXdsOGtfc2tiICp0eF9za2I7Cit9OworCisvKiBQb2ludGVycyB0byB0aGUgZmlybXdhcmUgZGF0YSBhbmQgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCBpdC4gICovCitzdHJ1Y3QgbXdsOGtfZmlybXdhcmUgeworCS8qIE1pY3JvY29kZSAqLworCXN0cnVjdCBmaXJtd2FyZSAqdWNvZGU7CisKKwkvKiBCb290IGhlbHBlciBjb2RlICovCisJc3RydWN0IGZpcm13YXJlICpoZWxwZXI7Cit9OworCitzdHJ1Y3QgbXdsOGtfcHJpdiB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdTggbmFtZVsxNl07CisJLyogZmlybXdhcmUgYWNjZXNzIGxvY2sgKi8KKwlzcGlubG9ja190IGZ3X2xvY2s7CisKKwkvKiBmaXJtd2FyZSBmaWxlcyBhbmQgbWV0YSBkYXRhICovCisJc3RydWN0IG13bDhrX2Zpcm13YXJlIGZ3OworCXUzMiBwYXJ0X251bTsKKworCS8qIGxvY2sgaGVsZCBvdmVyIFRYIGFuZCBUWCByZWFwICovCisJc3BpbmxvY2tfdCB0eF9sb2NrOworCXUzMiBpbnRfbWFzazsKKworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IGxpc3RfaGVhZCB2aWZfbGlzdDsKKworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VycmVudF9jaGFubmVsOworCisJLyogcG93ZXIgbWFuYWdlbWVudCBzdGF0dXMgY29va2llIGZyb20gZmlybXdhcmUgKi8KKwl1MzIgKmNvb2tpZTsKKwlkbWFfYWRkcl90IGNvb2tpZV9kbWE7CisKKwl1MTYgbnVtX21jYWRkcnM7CisJdTE2IHJlZ2lvbl9jb2RlOworCXU4IGh3X3JldjsKKwlfX2xlMzIgZndfcmV2OworCXUzMiB3ZXBfZW5hYmxlZDsKKworCS8qCisJICogUnVubmluZyBjb3VudCBvZiBUWCBwYWNrZXRzIGluIGZsaWdodCwgdG8gYXZvaWQKKwkgKiBpdGVyYXRpbmcgb3ZlciB0aGUgdHJhbnNtaXQgcmluZ3MgZWFjaCB0aW1lLgorCSAqLworCWludCBwZW5kaW5nX3R4X3BrdHM7CisKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgcnhxW01XTDhLX1JYX1FVRVVFU107CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlIHR4cVtNV0w4S19UWF9RVUVVRVNdOworCisJLyogUEhZIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOworCisJLyogUkYgcHJlYW1ibGU6IFNob3J0LCBMb25nIG9yIEF1dG8gKi8KKwl1OAlyYWRpb19wcmVhbWJsZTsKKwl1OAlyYWRpb19zdGF0ZTsKKworCS8qIFdNTSBNT0RFIDEgZm9yIGVuYWJsZWQ7IDAgZm9yIGRpc2FibGVkICovCisJYm9vbCB3bW1fbW9kZTsKKworCS8qIFNldCBpZiBQSFkgY29uZmlnIGlzIGluIHByb2dyZXNzICovCisJYm9vbCBpbmNvbmZpZzsKKworCS8qIFhYWCBuZWVkIHRvIGNvbnZlcnQgdGhpcyB0byBoYW5kbGUgbXVsdGlwbGUgaW50ZXJmYWNlcyAqLworCWJvb2wgY2FwdHVyZV9iZWFjb247CisJdTggY2FwdHVyZV9ic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCXN0cnVjdCBza19idWZmICpiZWFjb25fc2tiOworCisJLyoKKwkgKiBUaGlzIEZKIHdvcmtlciBoYXMgdG8gYmUgZ2xvYmFsIGFzIGl0IGlzIHNjaGVkdWxlZCBmcm9tIHRoZQorCSAqIFJYIGhhbmRsZXIuICBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgd2hpY2ggaW50ZXJmYWNlIGl0CisJICogYmVsb25ncyB0byB1bnRpbCB0aGUgbGlzdCBvZiBic3NpZHMgd2FpdGluZyB0byBjb21wbGV0ZSBqb2luCisJICogaXMgY2hlY2tlZC4KKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluYWxpemVfam9pbl93b3JrZXI7CisKKwkvKiBUYXNrbGV0IHRvIHJlY2xhaW0gVFggZGVzY3JpcHRvcnMgYW5kIGJ1ZmZlcnMgYWZ0ZXIgdHggKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcmVjbGFpbV90YXNrOworCisJLyogV29yayB0aHJlYWQgdG8gc2VyaWFsaXplIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY29uZmlnX3dxOworCXN0cnVjdCBjb21wbGV0aW9uICpob3N0Y21kX3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gKnR4X3dhaXQ7Cit9OworCisvKiBQZXIgaW50ZXJmYWNlIHNwZWNpZmljIHByaXZhdGUgZGF0YSAqLworc3RydWN0IG13bDhrX3ZpZiB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCisJLyogYmFja3BvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCisJLyogQlNTIGNvbmZpZyBvZiBBUCBvciBJQlNTIGZyb20gbWFjODAyMTEqLworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgYnNzX2luZm87CisKKwkvKiBCU1NJRCBvZiBBUCBvciBJQlNTICovCisJdTgJYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwl1OAltYWNfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCisJLyoKKwkgKiBTdWJzZXQgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcy4KKwkgKiBJbnRlcnNlY3Rpb24gb2YgQVAgYW5kIFNUQSBzdXBwb3J0ZWQgcmF0ZXMuCisJICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlIGxlZ2FjeV9yYXRlc1sxMl07CisKKwkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcyAqLworCXU4CWxlZ2FjeV9ucmF0ZXM7CisKKwkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIE1DUyByYXRlcy4gV29yayBpbiBwcm9ncmVzcyAqLworCXU4CW1jc19ucmF0ZXM7CisKKwkgLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLlJldHVybmVkIGJ5IHVwZGF0ZV9zdGFfZGIgY2FsbCAqLworCXU4CXBlZXJfaWQ7CisKKwkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlciAqLworCXUxNglzZXFubzsKKworCS8qIE5vdGU6VGhlcmUgaXMgbm8gY2hhbm5lbCBpbmZvLAorCSAqIHJlZmVyIHRvIHRoZSBtYXN0ZXIgY2hhbm5lbCBpbmZvIGluIHByaXYKKwkgKi8KK307CisKKyNkZWZpbmUgTVdMOEtfVklGKF92aWYpIChzdHJ1Y3QgbXdsOGtfdmlmICopKCYoKF92aWYpLT5kcnZfcHJpdikpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgbXdsOGtfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13bDhrX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gNCwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LAorCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMTIsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAxOCwgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAyMiwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwKKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwKKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA0OCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSA5NiwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sCit9OworCisvKiBSYWRpbyBzZXR0aW5ncyAqLworI2RlZmluZSBNV0w4S19SQURJT19GT1JDRQkJMHgyCisjZGVmaW5lIE1XTDhLX1JBRElPX0VOQUJMRQkJMHgxCisjZGVmaW5lIE1XTDhLX1JBRElPX0RJU0FCTEUJCTB4MAorI2RlZmluZSBNV0w4S19SQURJT19BVVRPX1BSRUFNQkxFCTB4MDAwNQorI2RlZmluZSBNV0w4S19SQURJT19TSE9SVF9QUkVBTUJMRQkweDAwMDMKKyNkZWZpbmUgTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRQkweDAwMDEKKworLyogV01NICovCisjZGVmaW5lIE1XTDhLX1dNTV9FTkFCTEUJCTEKKyNkZWZpbmUgTVdMOEtfV01NX0RJU0FCTEUJCTAKKworI2RlZmluZSBNV0w4S19SQURJT19ERUZBVUxUX1BSRUFNQkxFCU1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUKKworLyogU2xvdCB0aW1lICovCisKKy8qIFNob3J0IFNsb3Q6IDl1cyBzbG90IHRpbWUgKi8KKyNkZWZpbmUgTVdMOEtfU0hPUlRfU0xPVFRJTUUJCTEKKworLyogTG9uZyBzbG90OiAyMHVzIHNsb3QgdGltZSAqLworI2RlZmluZSBNV0w4S19MT05HX1NMT1RUSU1FCQkwCisKKy8qIFNldCBvciBnZXQgaW5mbyBmcm9tIEZpcm13YXJlICovCisjZGVmaW5lIE1XTDhLX0NNRF9TRVQJCQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfQ01EX0dFVAkJCTB4MDAwMAorCisvKiBGaXJtd2FyZSBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIE1XTDhLX0NNRF9DT0RFX0ROTEQJCTB4MDAwMQorI2RlZmluZSBNV0w4S19DTURfR0VUX0hXX1NQRUMJCTB4MDAwMworI2RlZmluZSBNV0w4S19DTURfTUFDX01VTFRJQ0FTVF9BRFIJMHgwMDEwCisjZGVmaW5lIE1XTDhLX0NNRF9HRVRfU1RBVAkJMHgwMDE0CisjZGVmaW5lIE1XTDhLX0NNRF9SQURJT19DT05UUk9MCQkweDAwMUMKKyNkZWZpbmUgTVdMOEtfQ01EX1JGX1RYX1BPV0VSCQkweDAwMUUKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QUkVfU0NBTgkJMHgwMTA3CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOCQkweDAxMDgKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMCTB4MDEwQQorI2RlZmluZSBNV0w4S19DTURfU0VUX1NMT1QJCTB4MDExNAorI2RlZmluZSBNV0w4S19DTURfTUlNT19DT05GSUcJCTB4MDEyNQorI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfV01NX01PREUJCTB4MDEyMworI2RlZmluZSBNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TCTB4MDExNQorI2RlZmluZSBNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4JMHgwMTExCisjZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfU1RBREIJCTB4MTEyMworI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMworI2RlZmluZSBNV0w4S19DTURfU0VUX0xJTktBREFQVF9NT0RFCTB4MDEyOQorI2RlZmluZSBNV0w4S19DTURfU0VUX0FJRAkJMHgwMTBkCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURQkJMHgwMTEwCisjZGVmaW5lIE1XTDhLX0NNRF9VU0VfRklYRURfUkFURQkweDAxMjYKKyNkZWZpbmUgTVdMOEtfQ01EX1JUU19USFJFU0hPTEQJCTB4MDExMworI2RlZmluZSBNV0w4S19DTURfRU5DUllQVElPTgkJMHgxMTIyCisKK3N0YXRpYyBjb25zdCBjaGFyICptd2w4a19jbWRfbmFtZSh1MTYgY21kLCBjaGFyICpidWYsIGludCBidWZzaXplKQoreworI2RlZmluZSBNV0w4S19DTUROQU1FKHgpCWNhc2UgTVdMOEtfQ01EXyMjeDogZG8ge1wKKwkJCQkJc25wcmludGYoYnVmLCBidWZzaXplLCAiJXMiLCAjeCk7XAorCQkJCQlyZXR1cm4gYnVmO1wKKwkJCQkJfSB3aGlsZSAoMCkKKwlzd2l0Y2ggKGNtZCAmICh+MHg4MDAwKSkgeworCQlNV0w4S19DTUROQU1FKENPREVfRE5MRCk7CisJCU1XTDhLX0NNRE5BTUUoR0VUX0hXX1NQRUMpOworCQlNV0w4S19DTUROQU1FKE1BQ19NVUxUSUNBU1RfQURSKTsKKwkJTVdMOEtfQ01ETkFNRShHRVRfU1RBVCk7CisJCU1XTDhLX0NNRE5BTUUoUkFESU9fQ09OVFJPTCk7CisJCU1XTDhLX0NNRE5BTUUoUkZfVFhfUE9XRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9QUkVfU0NBTik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1BPU1RfU0NBTik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JGX0NIQU5ORUwpOworCQlNV0w4S19DTUROQU1FKFNFVF9TTE9UKTsKKwkJTVdMOEtfQ01ETkFNRShNSU1PX0NPTkZJRyk7CisJCU1XTDhLX0NNRE5BTUUoRU5BQkxFX1NOSUZGRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9XTU1fTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0VEQ0FfUEFSQU1TKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfRklOQUxJWkVfSk9JTik7CisJCU1XTDhLX0NNRE5BTUUoVVBEQVRFX1NUQURCKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUkFURUFEQVBUX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9MSU5LQURBUFRfTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0FJRCk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEUpOworCQlNV0w4S19DTUROQU1FKFVTRV9GSVhFRF9SQVRFKTsKKwkJTVdMOEtfQ01ETkFNRShSVFNfVEhSRVNIT0xEKTsKKwkJTVdMOEtfQ01ETkFNRShFTkNSWVBUSU9OKTsKKwlkZWZhdWx0OgorCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIweCV4IiwgY21kKTsKKwl9CisjdW5kZWYgTVdMOEtfQ01ETkFNRQorCisJcmV0dXJuIGJ1ZjsKK30KKworLyogSGFyZHdhcmUgYW5kIGZpcm13YXJlIHJlc2V0ICovCitzdGF0aWMgdm9pZCBtd2w4a19od19yZXNldChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9SRVNFVCwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUkVTRVQsCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCW1zbGVlcCgyMCk7Cit9CisKKy8qIFJlbGVhc2UgZncgaW1hZ2UgKi8KK3N0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZncoc3RydWN0IGZpcm13YXJlICoqZncpCit7CisJaWYgKCpmdyA9PSBOVUxMKQorCQlyZXR1cm47CisJcmVsZWFzZV9maXJtd2FyZSgqZncpOworCSpmdyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncudWNvZGUpOworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LmhlbHBlcik7Cit9CisKKy8qIFJlcXVlc3QgZncgaW1hZ2UgKi8KK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9mdyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpcm13YXJlICoqZncpCit7CisJLyogcmVsZWFzZSBjdXJyZW50IGltYWdlICovCisJaWYgKCpmdyAhPSBOVUxMKQorCQltd2w4a19yZWxlYXNlX2Z3KGZ3KTsKKworCXJldHVybiByZXF1ZXN0X2Zpcm13YXJlKChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiopZncsCisJCQkJCQlmbmFtZSwgJnByaXYtPnBkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgdTMyIHBhcnRfbnVtKQoreworCXU4IGZpbGVuYW1lWzY0XTsKKwlpbnQgcmM7CisKKwlwcml2LT5wYXJ0X251bSA9IHBhcnRfbnVtOworCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAibXdsOGsvaGVscGVyXyV1LmZ3IiwgcHJpdi0+cGFydF9udW0pOworCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZpbGVuYW1lLCAmcHJpdi0+ZncuaGVscGVyKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMgRXJyb3IgcmVxdWVzdGluZyBoZWxwZXIgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJCXBjaV9uYW1lKHByaXYtPnBkZXYpLCBmaWxlbmFtZSk7CisJCXJldHVybiByYzsKKwl9CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKKwkJICJtd2w4ay9mbWltYWdlXyV1LmZ3IiwgcHJpdi0+cGFydF9udW0pOworCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZpbGVuYW1lLCAmcHJpdi0+ZncudWNvZGUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIEVycm9yIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJCQkJcGNpX25hbWUocHJpdi0+cGRldiksIGZpbGVuYW1lKTsKKwkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncuaGVscGVyKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXdsOGtfY21kX3BrdCB7CisJX19sZTE2CWNvZGU7CisJX19sZTE2CWxlbmd0aDsKKwlfX2xlMTYJc2VxX251bTsKKwlfX2xlMTYJcmVzdWx0OworCWNoYXIJcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBGaXJtd2FyZSBsb2FkaW5nLgorICovCitzdGF0aWMgaW50Cittd2w4a19zZW5kX2Z3X2xvYWRfY21kKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtPnJlZ3M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgcmM7CisJaW50IGxvb3BzOworCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBkYXRhLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hX2FkZHIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvd3JpdGUzMihkbWFfYWRkciwgcmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwlpb3dyaXRlMzIoMCwgcmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKworCXJjID0gLUVUSU1FRE9VVDsKKwlsb29wcyA9IDEwMDA7CisJZG8geworCQl1MzIgaW50X2NvZGU7CisKKwkJaW50X2NvZGUgPSBpb3JlYWQzMihyZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKKwkJaWYgKGludF9jb2RlID09IE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRCkgeworCQkJaW93cml0ZTMyKDAsIHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJLyoKKwkgKiBDbGVhciAnY29tbWFuZCBkb25lJyBpbnRlcnJ1cHQgYml0LgorCSAqLworCWxvb3BzID0gMTAwMDsKKwlkbyB7CisJCXUzMiBzdGF0dXM7CisKKwkJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArCisJCQkJTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKKwkJCWlvd3JpdGUzMih+TVdMOEtfQTJIX0lOVF9PUENfRE9ORSwKKwkJCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJCWlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCQkJYnJlYWs7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfbG9hZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqY21kOworCWludCBkb25lOworCWludCByYyA9IDA7CisKKwljbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSArIDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+Y29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9DT0RFX0ROTEQpOworCWNtZC0+c2VxX251bSA9IDA7CisJY21kLT5yZXN1bHQgPSAwOworCisJZG9uZSA9IDA7CisJd2hpbGUgKGxlbmd0aCkgeworCQlpbnQgYmxvY2tfc2l6ZSA9IGxlbmd0aCA+IDI1NiA/IDI1NiA6IGxlbmd0aDsKKworCQltZW1jcHkoY21kLT5wYXlsb2FkLCBkYXRhICsgZG9uZSwgYmxvY2tfc2l6ZSk7CisJCWNtZC0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoYmxvY2tfc2l6ZSk7CisKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGNtZCwKKwkJCQkJCXNpemVvZigqY21kKSArIGJsb2NrX3NpemUpOworCQlpZiAocmMpCisJCQlicmVhazsKKworCQlkb25lICs9IGJsb2NrX3NpemU7CisJCWxlbmd0aCAtPSBibG9ja19zaXplOworCX0KKworCWlmICghcmMpIHsKKwkJY21kLT5sZW5ndGggPSAwOworCQlyYyA9IG13bDhrX3NlbmRfZndfbG9hZF9jbWQocHJpdiwgY21kLCBzaXplb2YoKmNtZCkpOworCX0KKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZmVlZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IG1heV9jb250aW51ZSwgcmMgPSAwOworCXUzMiBkb25lLCBwcmV2X2Jsb2NrX3NpemU7CisKKwlidWZmZXIgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkb25lID0gMDsKKwlwcmV2X2Jsb2NrX3NpemUgPSAwOworCW1heV9jb250aW51ZSA9IDEwMDA7CisJd2hpbGUgKG1heV9jb250aW51ZSA+IDApIHsKKwkJdTMyIGJsb2NrX3NpemU7CisKKwkJYmxvY2tfc2l6ZSA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfU0NSQVRDSCk7CisJCWlmIChibG9ja19zaXplICYgMSkgeworCQkJYmxvY2tfc2l6ZSAmPSB+MTsKKwkJCW1heV9jb250aW51ZS0tOworCQl9IGVsc2UgeworCQkJZG9uZSArPSBwcmV2X2Jsb2NrX3NpemU7CisJCQlsZW5ndGggLT0gcHJldl9ibG9ja19zaXplOworCQl9CisKKwkJaWYgKGJsb2NrX3NpemUgPiAxMDI0IHx8IGJsb2NrX3NpemUgPiBsZW5ndGgpIHsKKwkJCXJjID0gLUVPVkVSRkxPVzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxlbmd0aCA9PSAwKSB7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChibG9ja19zaXplID09IDApIHsKKwkJCXJjID0gLUVQUk9UTzsKKwkJCW1heV9jb250aW51ZS0tOworCQkJdWRlbGF5KDEpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmV2X2Jsb2NrX3NpemUgPSBibG9ja19zaXplOworCQltZW1jcHkoYnVmZmVyLCBkYXRhICsgZG9uZSwgYmxvY2tfc2l6ZSk7CisKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGJ1ZmZlciwgYmxvY2tfc2l6ZSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKworCWlmICghcmMgJiYgbGVuZ3RoICE9IDApCisJCXJjID0gLUVSRU1PVEVJTzsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfbG9hZF9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpbnQgbG9vcHMsIHJjOworCisJY29uc3QgdTggKnVjb2RlID0gcHJpdi0+ZncudWNvZGUtPmRhdGE7CisJc2l6ZV90IHVjb2RlX2xlbiA9IHByaXYtPmZ3LnVjb2RlLT5zaXplOworCWNvbnN0IHU4ICpoZWxwZXIgPSBwcml2LT5mdy5oZWxwZXItPmRhdGE7CisJc2l6ZV90IGhlbHBlcl9sZW4gPSBwcml2LT5mdy5oZWxwZXItPnNpemU7CisKKwlpZiAoIW1lbWNtcCh1Y29kZSwgIlx4MDFceDAwXHgwMFx4MDAiLCA0KSkgeworCQlyYyA9IG13bDhrX2xvYWRfZndfaW1hZ2UocHJpdiwgaGVscGVyLCBoZWxwZXJfbGVuKTsKKwkJaWYgKHJjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAiCisJCQkJImhlbHBlciBpbWFnZVxuIiwgcGNpX25hbWUocHJpdi0+cGRldikpOworCQkJcmV0dXJuIHJjOworCQl9CisJCW1zbGVlcCgxKTsKKworCQlyYyA9IG13bDhrX2ZlZWRfZndfaW1hZ2UocHJpdiwgdWNvZGUsIHVjb2RlX2xlbik7CisJfSBlbHNlIHsKKwkJcmMgPSBtd2w4a19sb2FkX2Z3X2ltYWdlKHByaXYsIHVjb2RlLCB1Y29kZV9sZW4pOworCX0KKworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBkYXRhXG4iLAorCQkJcGNpX25hbWUocHJpdi0+cGRldikpOworCQlyZXR1cm4gcmM7CisJfQorCisJaW93cml0ZTMyKE1XTDhLX01PREVfU1RBLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCW1zbGVlcCgxKTsKKworCWxvb3BzID0gMjAwMDAwOworCWRvIHsKKwkJaWYgKGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpCisJCQkJCQk9PSBNV0w4S19GV1NUQV9SRUFEWSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wcyk7CisKKwlyZXR1cm4gbG9vcHMgPyAwIDogLUVUSU1FRE9VVDsKK30KKworCisvKgorICogRGVmaW5lcyBzaGFyZWQgYmV0d2VlbiB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4KKyAqLworLyogSFQgY29udHJvbCBmaWVsZHMgZm9yIGZpcm13YXJlICovCitzdHJ1Y3QgZXdjX2h0X2luZm8geworCV9fbGUxNgljb250cm9sMTsKKwlfX2xlMTYJY29udHJvbDI7CisJX19sZTE2CWNvbnRyb2wzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRmlybXdhcmUgU3RhdGlvbiBkYXRhYmFzZSBvcGVyYXRpb25zICovCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9BRERfRU5UUlkJCTAKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWQkxCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkJCTIKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX0ZMVVNICQkzCisKKy8qIFBlZXIgRW50cnkgZmxhZ3MgLSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgcGVlciBub2RlICovCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVAkyCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BREhPQ19TVEFUSU9OCTQKKworI2RlZmluZSBNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTCTEyCisjZGVmaW5lIE1XTDhLX01DU19CSVRNQVBfU0laRQkJMTYKKyNkZWZpbmUgcGFkX3NpemUJCQkxNgorCitzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8geworCS8qIFBlZXIgdHlwZSAtIEFQIHZzLiBTVEEuICAqLworCV9fdTgJcGVlcl90eXBlOworCisJLyogQmFzaWMgODAyLjExIGNhcGFiaWxpdGllcyBmcm9tIGFzc29jIHJlc3AuICAqLworCV9fbGUxNgliYXNpY19jYXBzOworCisJLyogU2V0IGlmIHBlZXIgc3VwcG9ydHMgODAyLjExbiBoaWdoIHRocm91Z2hwdXQgKEhUKS4gICovCisJX191OAlodF9zdXBwb3J0OworCisJLyogVmFsaWQgaWYgSFQgaXMgc3VwcG9ydGVkLiAgKi8KKwlfX2xlMTYJaHRfY2FwczsKKwlfX3U4CWV4dGVuZGVkX2h0X2NhcHM7CisJc3RydWN0IGV3Y19odF9pbmZvCWV3Y19pbmZvOworCisJLyogTGVnYWN5IHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJbGVnYWN5X3JhdGVzW01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworCisJLyogSFQgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCisJX191OAlodF9yYXRlc1tNV0w4S19NQ1NfQklUTUFQX1NJWkVdOworCV9fdTgJcGFkW3BhZF9zaXplXTsKKworCS8qIElmIHNldCwgaW50ZXJvcGVyYWJpbGl0eSBtb2RlLCBubyBwcm9wcmlldGFyeSBleHRlbnNpb25zLiAgKi8KKwlfX3U4CWludGVyb3A7CisJX191OAlwYWQyOworCV9fdTgJc3RhdGlvbl9pZDsKKwlfX2xlMTYJYW1zZHVfZW5hYmxlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIElubGluZSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBRb1MgZmllbGQgaW4gZGF0YSBkZXNjcmlwdG9yLiAgKi8KK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfdGlkKHUxNiBxb3MsIHU4IHRpZCkKK3sKKwl1MTYgdmFsX21hc2sgPSAweDAwMGY7CisJdTE2IHFvc19tYXNrID0gfnZhbF9tYXNrOworCisJLyogVElEIGJpdHMgMC0zICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAodGlkICYgdmFsX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AodTE2IHFvcykKK3sKKwl1MTYgdmFsX21hc2sgPSAxIDw8IDQ7CisKKwkvKiBFbmQgb2YgU2VydmljZSBQZXJpb2QgQml0IDQgKi8KKwlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYWNrKHUxNiBxb3MsIHU4IGFja19wb2xpY3kpCit7CisJdTE2IHZhbF9tYXNrID0gMHgzOworCXU4CXNoaWZ0ID0gNTsKKwl1MTYgcW9zX21hc2sgPSB+KHZhbF9tYXNrIDw8IHNoaWZ0KTsKKworCS8qIEFjayBQb2xpY3kgQml0IDUtNiAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChhY2tfcG9saWN5ICYgdmFsX21hc2spIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9hbXNkdSh1MTYgcW9zKQoreworCXUxNiB2YWxfbWFzayA9IDEgPDwgNzsKKworCS8qIEFNU0RVIHByZXNlbnQgQml0IDcgKi8KKwlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfcWxlbih1MTYgcW9zLCB1OCBsZW4pCit7CisJdTE2IHZhbF9tYXNrID0gMHhmZjsKKwl1OAlzaGlmdCA9IDg7CisJdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7CisKKwkvKiBRdWV1ZSBMZW5ndGggQml0cyA4LTE1ICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAoKGxlbiAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Cit9CisKKy8qIERNQSBoZWFkZXIgdXNlZCBieSBmaXJtd2FyZSBhbmQgaGFyZHdhcmUuICAqLworc3RydWN0IG13bDhrX2RtYV9kYXRhIHsKKwlfX2xlMTYgZndsZW47CisJc3RydWN0IGllZWU4MDIxMV9oZHIgd2g7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBSb3V0aW5lcyB0byBhZGQvcmVtb3ZlIERNQSBoZWFkZXIgZnJvbSBza2IuICAqLworc3RhdGljIGlubGluZSBpbnQgbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKShza2ItPmRhdGEpOworCXZvaWQgKmRzdCwgKnNyYyA9ICZ0ci0+d2g7CisJX19sZTE2IGZjID0gdHItPndoLmZyYW1lX2NvbnRyb2w7CisJaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOworCXUxNiBzcGFjZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gaGRybGVuOworCisJZHN0ID0gKHZvaWQgKil0ciArIHNwYWNlOworCWlmIChkc3QgIT0gc3JjKSB7CisJCW1lbW1vdmUoZHN0LCBzcmMsIGhkcmxlbik7CisJCXNrYl9wdWxsKHNrYiwgc3BhY2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptd2w4a19hZGRfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKwl1MzIgaGRybGVuLCBwa3RsZW47CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0cjsKKworCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOworCXBrdGxlbiA9IHNrYi0+bGVuOworCisJLyoKKwkgKiBDb3B5IHVwL2Rvd24gdGhlIDgwMi4xMSBoZWFkZXI7IHRoZSBmaXJtd2FyZSByZXF1aXJlcworCSAqIHdlIHByZXNlbnQgYSAyLWJ5dGUgcGF5bG9hZCBsZW5ndGggZm9sbG93ZWQgYnkgYQorCSAqIDQtYWRkcmVzcyBoZWFkZXIgKHcvbyBRb1MpLCBmb2xsb3dlZCAob3B0aW9uYWxseSkgYnkKKwkgKiBhbnkgV0VQL0V4dElWIGhlYWRlciAoYnV0IG9ubHkgZmlsbGVkIGluIGZvciBDQ01QKS4KKwkgKi8KKwlpZiAoaGRybGVuICE9IHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpKQorCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gaGRybGVuKTsKKworCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKKwlpZiAod2ggIT0gJnRyLT53aCkKKwkJbWVtbW92ZSgmdHItPndoLCB3aCwgaGRybGVuKTsKKworCS8qIENsZWFyIGFkZHI0ICovCisJbWVtc2V0KHRyLT53aC5hZGRyNCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCS8qCisJICogRmlybXdhcmUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGx5IGZvcm1lZCAiODAyLjExCisJICogcGF5bG9hZCIuICBUaGF0IGlzLCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlIDgwMi4xMSBoZWFkZXIuCisJICogVGhpcyBpbmNsdWRlcyBhbGwgY3J5cHRvIG1hdGVyaWFsIGluY2x1ZGluZyB0aGUgTUlDLgorCSAqLworCXRyLT5md2xlbiA9IGNwdV90b19sZTE2KHBrdGxlbiAtIGhkcmxlbik7CisKKwlyZXR1cm4gc2tiOworfQorCisKKy8qCisgKiBQYWNrZXQgcmVjZXB0aW9uLgorICovCisjZGVmaW5lIE1XTDhLX1JYX0NUUkxfS0VZX0lOREVYX01BU0sJMHgzMAorI2RlZmluZSBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHgwMgorI2RlZmluZSBNV0w4S19SWF9DVFJMX0FNUERVCQkweDAxCisKK3N0cnVjdCBtd2w4a19yeF9kZXNjIHsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX3U4IGxpbmtfcXVhbGl0eTsKKwlfX3U4IG5vaXNlX2xldmVsOworCV9fbGUzMiBwa3RfcGh5c19hZGRyOworCV9fbGUzMiBuZXh0X3J4X2Rlc2NfcGh5c19hZGRyOworCV9fbGUxNiBxb3NfY29udHJvbDsKKwlfX2xlMTYgcmF0ZV9pbmZvOworCV9fbGUzMiBwYWQwWzRdOworCV9fdTggcnNzaTsKKwlfX3U4IGNoYW5uZWw7CisJX19sZTE2IHBhZDE7CisJX191OCByeF9jdHJsOworCV9fdTggcnhfc3RhdHVzOworCV9fdTggcGFkMlsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfUlhfREVTQ1MJCTI1NgorI2RlZmluZSBNV0w4S19SWF9NQVhTWgkJMzgwMAorCitzdGF0aWMgaW50IG13bDhrX3J4cV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBzaXplOworCWludCBpOworCisJcnhxLT5yeF9kZXNjX2NvdW50ID0gMDsKKwlyeHEtPnJ4X2hlYWQgPSAwOworCXJ4cS0+cnhfdGFpbCA9IDA7CisKKwlzaXplID0gTVdMOEtfUlhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3J4X2Rlc2MpOworCisJcnhxLT5yeF9kZXNjX2FyZWEgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmcnhxLT5yeF9kZXNjX2RtYSk7CisJaWYgKHJ4cS0+cnhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIGRlc2NyaXB0b3JzXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocnhxLT5yeF9kZXNjX2FyZWEsIDAsIHNpemUpOworCisJcnhxLT5yeF9za2IgPSBrbWFsbG9jKE1XTDhLX1JYX0RFU0NTICoKKwkJCQlzaXplb2YoKnJ4cS0+cnhfc2tiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4cS0+cnhfc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFJYIHNrYnVmZiBsaXN0XG4iLAorCQkJcHJpdi0+bmFtZSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwKKwkJCQkgICAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHJ4cS0+cnhfc2tiLCAwLCBNV0w4S19SWF9ERVNDUyAqIHNpemVvZigqcnhxLT5yeF9za2IpKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CisJCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjOworCQlpbnQgbmV4dGk7CisKKwkJcnhfZGVzYyA9IHJ4cS0+cnhfZGVzY19hcmVhICsgaTsKKwkJbmV4dGkgPSAoaSArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisKKwkJcnhfZGVzYy0+bmV4dF9yeF9kZXNjX3BoeXNfYWRkciA9CisJCQljcHVfdG9fbGUzMihyeHEtPnJ4X2Rlc2NfZG1hCisJCQkJCQkrIG5leHRpICogc2l6ZW9mKCpyeF9kZXNjKSk7CisJCXJ4X2Rlc2MtPnJ4X2N0cmwgPQorCQkJY3B1X3RvX2xlMzIoTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByeHFfcmVmaWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSAqcnhxID0gcHJpdi0+cnhxICsgaW5kZXg7CisJaW50IHJlZmlsbGVkOworCisJcmVmaWxsZWQgPSAwOworCXdoaWxlIChyeHEtPnJ4X2Rlc2NfY291bnQgPCBNV0w4S19SWF9ERVNDUyAmJiBsaW1pdC0tKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWludCByeDsKKworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKE1XTDhLX1JYX01BWFNaKTsKKwkJaWYgKHNrYiA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcnhxLT5yeF9kZXNjX2NvdW50Kys7CisKKwkJcnggPSByeHEtPnJ4X3RhaWw7CisJCXJ4cS0+cnhfdGFpbCA9IChyeCArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnBrdF9waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAorCQkJCQlNV0w4S19SWF9NQVhTWiwgRE1BX0ZST01fREVWSUNFKSk7CisKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnBrdF9sZW4gPSBjcHVfdG9fbGUxNihNV0w4S19SWF9NQVhTWik7CisJCXJ4cS0+cnhfc2tiW3J4XSA9IHNrYjsKKwkJd21iKCk7CisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5yeF9jdHJsID0gMDsKKworCQlyZWZpbGxlZCsrOworCX0KKworCXJldHVybiByZWZpbGxlZDsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBjYXJkJ3MgcmVjZXB0aW9uIGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCitzdGF0aWMgdm9pZCBtd2w4a19yeHFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1JYX0RFU0NTOyBpKyspIHsKKwkJaWYgKHJ4cS0+cnhfc2tiW2ldICE9IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCQkJYWRkciA9IGxlMzJfdG9fY3B1KHJ4cS0+cnhfZGVzY19hcmVhW2ldLnBrdF9waHlzX2FkZHIpOworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBhZGRyLCBNV0w4S19SWF9NQVhTWiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlrZnJlZV9za2IocnhxLT5yeF9za2JbaV0pOworCQkJcnhxLT5yeF9za2JbaV0gPSBOVUxMOworCQl9CisJfQorCisJa2ZyZWUocnhxLT5yeF9za2IpOworCXJ4cS0+cnhfc2tiID0gTlVMTDsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwKKwkJCSAgICBNV0w4S19SWF9ERVNDUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhfZGVzYyksCisJCQkgICAgcnhxLT5yeF9kZXNjX2FyZWEsIHJ4cS0+cnhfZGVzY19kbWEpOworCXJ4cS0+cnhfZGVzY19hcmVhID0gTlVMTDsKK30KKworCisvKgorICogU2NhbiBhIGxpc3Qgb2YgQlNTSURzIHRvIHByb2Nlc3MgZm9yIGZpbmFsaXplIGpvaW4uCisgKiBBbGxvd3MgZm9yIGV4dGVuc2lvbiB0byBwcm9jZXNzIG11bHRpcGxlIEJTU0lEcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK213bDhrX2NhcHR1cmVfYnNzaWQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICp3aCkKK3sKKwlyZXR1cm4gcHJpdi0+Y2FwdHVyZV9iZWFjb24gJiYKKwkJaWVlZTgwMjExX2lzX2JlYWNvbih3aC0+ZnJhbWVfY29udHJvbCkgJiYKKwkJIWNvbXBhcmVfZXRoZXJfYWRkcih3aC0+YWRkcjMsIHByaXYtPmNhcHR1cmVfYnNzaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfc2F2ZV9iZWFjb24oc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCW1lbXNldChwcml2LT5jYXB0dXJlX2Jzc2lkLCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJLyoKKwkgKiBVc2UgR0ZQX0FUT01JQyBhcyByeHFfcHJvY2VzcyBpcyBjYWxsZWQgZnJvbQorCSAqIHRoZSBwcmltYXJ5IGludGVycnVwdCBoYW5kbGVyLCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxsCisJICogbXVzdCBub3Qgc2xlZXAuCisJICovCisJcHJpdi0+YmVhY29uX3NrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKKwkJcXVldWVfd29yayhwcml2LT5jb25maWdfd3EsCisJCQkJJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKK30KKworc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgbGltaXQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCBwcm9jZXNzZWQ7CisKKwlwcm9jZXNzZWQgPSAwOworCXdoaWxlIChyeHEtPnJ4X2Rlc2NfY291bnQgJiYgbGltaXQtLSkgeworCQlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzYzsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKworCQlyeF9kZXNjID0gcnhxLT5yeF9kZXNjX2FyZWEgKyByeHEtPnJ4X2hlYWQ7CisJCWlmICghKHJ4X2Rlc2MtPnJ4X2N0cmwgJiBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQorCQkJYnJlYWs7CisJCXJtYigpOworCisJCXNrYiA9IHJ4cS0+cnhfc2tiW3J4cS0+cnhfaGVhZF07CisJCXJ4cS0+cnhfc2tiW3J4cS0+cnhfaGVhZF0gPSBOVUxMOworCisJCXJ4cS0+cnhfaGVhZCA9IChyeHEtPnJ4X2hlYWQgKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCQlyeHEtPnJ4X2Rlc2NfY291bnQtLTsKKworCQlhZGRyID0gbGUzMl90b19jcHUocnhfZGVzYy0+cGt0X3BoeXNfYWRkcik7CisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwKKwkJCQkJTVdMOEtfUlhfTUFYU1osIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJc2tiX3B1dChza2IsIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnBrdF9sZW4pKTsKKwkJaWYgKG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYikpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHBlbmRpbmcgam9pbiBvcGVyYXRpb24uIHNhdmUgYSBjb3B5IG9mCisJCSAqIHRoZSBiZWFjb24gYW5kIHNjaGVkdWxlIGEgdGFza2xldCB0byBzZW5kIGZpbmFsaXplCisJCSAqIGpvaW4gY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisJCSAqLworCQlpZiAobXdsOGtfY2FwdHVyZV9ic3NpZChwcml2LCB3aCkpCisJCQltd2w4a19zYXZlX2JlYWNvbihwcml2LCBza2IpOworCisJCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisJCXN0YXR1cy5tYWN0aW1lID0gMDsKKwkJc3RhdHVzLnNpZ25hbCA9IC1yeF9kZXNjLT5yc3NpOworCQlzdGF0dXMubm9pc2UgPSAtcnhfZGVzYy0+bm9pc2VfbGV2ZWw7CisJCXN0YXR1cy5xdWFsID0gcnhfZGVzYy0+bGlua19xdWFsaXR5OworCQlzdGF0dXMuYW50ZW5uYSA9IDE7CisJCXN0YXR1cy5yYXRlX2lkeCA9IDE7CisJCXN0YXR1cy5mbGFnID0gMDsKKwkJc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzdGF0dXMuZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShyeF9kZXNjLT5jaGFubmVsKTsKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYiwgJnN0YXR1cyk7CisKKwkJcHJvY2Vzc2VkKys7CisJfQorCisJcmV0dXJuIHByb2Nlc3NlZDsKK30KKworCisvKgorICogUGFja2V0IHRyYW5zbWlzc2lvbi4KKyAqLworCisvKiBUcmFuc21pdCBxdWV1ZSBhc3NpZ25tZW50LiAgKi8KK2VudW0geworCU1XTDhLX1dNRV9BQ19CSwk9IDAsCQkvKiBiYWNrZ3JvdW5kIGFjY2VzcyAqLworCU1XTDhLX1dNRV9BQ19CRQk9IDEsCQkvKiBiZXN0IGVmZm9ydCBhY2Nlc3MgKi8KKwlNV0w4S19XTUVfQUNfVkkJPSAyLAkJLyogdmlkZW8gYWNjZXNzICovCisJTVdMOEtfV01FX0FDX1ZPCT0gMywJCS8qIHZvaWNlIGFjY2VzcyAqLworfTsKKworLyogVHJhbnNtaXQgcGFja2V0IEFDSyBwb2xpY3kgKi8KKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMCQkwCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PTkUJCTEKKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9fRVhQTElDSVQJMgorI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSwkJMworCisjZGVmaW5lIEdFVF9UWFEoX2FjKSAoXAorCQkoKF9hYykgPT0gV01FX0FDX1ZPKSA/IE1XTDhLX1dNRV9BQ19WTyA6IFwKKwkJKChfYWMpID09IFdNRV9BQ19WSSkgPyBNV0w4S19XTUVfQUNfVkkgOiBcCisJCSgoX2FjKSA9PSBXTUVfQUNfQkspID8gTVdMOEtfV01FX0FDX0JLIDogXAorCQlNV0w4S19XTUVfQUNfQkUpCisKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19JRExFCQkJMHgwMDAwMDAwMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX1VTRUQJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0sJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZCQkweDAwMDAwMDA0CisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYCQkweDAwMDAwMDA4CisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfQlJPQURDQVNUX1RYCQkweDAwMDAwMDEwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0xJTktfRVJST1IJMHgwMDAwMDAyMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQJMHgwMDAwMDA0MAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9BR0lORwkJMHgwMDAwMDA4MAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0hPU1RfQ01ECQkweDQwMDAwMDAwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEUJCQkJMHg4MAorI2RlZmluZSAgTVdMOEtfVFhEX1NPRlRTVEFMRV9NR01UX1JFVFJZCQkJMHgwMQorCitzdHJ1Y3QgbXdsOGtfdHhfZGVzYyB7CisJX19sZTMyIHN0YXR1czsKKwlfX3U4IGRhdGFfcmF0ZTsKKwlfX3U4IHR4X3ByaW9yaXR5OworCV9fbGUxNiBxb3NfY29udHJvbDsKKwlfX2xlMzIgcGt0X3BoeXNfYWRkcjsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX3U4IGRlc3RfTUFDX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX2xlMzIgbmV4dF90eF9kZXNjX3BoeXNfYWRkcjsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisJX19sZTE2IHJhdGVfaW5mbzsKKwlfX3U4IHBlZXJfaWQ7CisJX191OCB0eF9mcmFnX2NudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfVFhfREVTQ1MJCTEyOAorCitzdGF0aWMgaW50IG13bDhrX3R4cV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCWludCBzaXplOworCWludCBpOworCisJbWVtc2V0KCZ0eHEtPnR4X3N0YXRzLCAwLAorCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOworCXR4cS0+dHhfc3RhdHMubGltaXQgPSBNV0w4S19UWF9ERVNDUzsKKwl0eHEtPnR4X2hlYWQgPSAwOworCXR4cS0+dHhfdGFpbCA9IDA7CisKKwlzaXplID0gTVdMOEtfVFhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4X2Rlc2MpOworCisJdHhxLT50eF9kZXNjX2FyZWEgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLCAmdHhxLT50eF9kZXNjX2RtYSk7CisJaWYgKHR4cS0+dHhfZGVzY19hcmVhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFRYIGRlc2NyaXB0b3JzXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHhxLT50eF9kZXNjX2FyZWEsIDAsIHNpemUpOworCisJdHhxLT50eF9za2IgPSBrbWFsbG9jKE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKCp0eHEtPnR4X3NrYiksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICh0eHEtPnR4X3NrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBUWCBza2J1ZmYgbGlzdFxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsCisJCQkJICAgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0eHEtPnR4X3NrYiwgMCwgTVdMOEtfVFhfREVTQ1MgKiBzaXplb2YoKnR4cS0+dHhfc2tiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfREVTQ1M7IGkrKykgeworCQlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwkJaW50IG5leHRpOworCisJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIGk7CisJCW5leHRpID0gKGkgKyAxKSAlIE1XTDhLX1RYX0RFU0NTOworCisJCXR4X2Rlc2MtPnN0YXR1cyA9IDA7CisJCXR4X2Rlc2MtPm5leHRfdHhfZGVzY19waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIodHhxLT50eF9kZXNjX2RtYSArCisJCQkJCQluZXh0aSAqIHNpemVvZigqdHhfZGVzYykpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfdHhfc3RhcnQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUFBBX1JFQURZLAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG13bDhrX3R4cV9idXN5KHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5wZW5kaW5nX3R4X3BrdHM7Cit9CisKK3N0cnVjdCBtd2w4a190eHFfaW5mbyB7CisJdTMyIGZ3X293bmVkOworCXUzMiBkcnZfb3duZWQ7CisJdTMyIHVudXNlZDsKKwl1MzIgbGVuOworCXUzMiBoZWFkOworCXUzMiB0YWlsOworfTsKKworc3RhdGljIGludCBtd2w4a19zY2FuX3R4X3Jpbmcoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1tdLAorCQkJCXUzMiBudW1fcXVldWVzKQoreworCWludCBjb3VudCwgZGVzYywgc3RhdHVzOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCWludCBuZGVzY3MgPSAwOworCisJbWVtc2V0KHR4aW5mbywgMCwgbnVtX3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhxX2luZm8pKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG51bV9xdWV1ZXM7IGNvdW50KyspIHsKKwkJdHhxID0gcHJpdi0+dHhxICsgY291bnQ7CisJCXR4aW5mb1tjb3VudF0ubGVuID0gdHhxLT50eF9zdGF0cy5sZW47CisJCXR4aW5mb1tjb3VudF0uaGVhZCA9IHR4cS0+dHhfaGVhZDsKKwkJdHhpbmZvW2NvdW50XS50YWlsID0gdHhxLT50eF90YWlsOworCQlmb3IgKGRlc2MgPSAwOyBkZXNjIDwgTVdMOEtfVFhfREVTQ1M7IGRlc2MrKykgeworCQkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgZGVzYzsKKwkJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnN0YXR1cyk7CisKKwkJCWlmIChzdGF0dXMgJiBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKQorCQkJCXR4aW5mb1tjb3VudF0uZndfb3duZWQrKzsKKwkJCWVsc2UKKwkJCQl0eGluZm9bY291bnRdLmRydl9vd25lZCsrOworCisJCQlpZiAodHhfZGVzYy0+cGt0X2xlbiA9PSAwKQorCQkJCXR4aW5mb1tjb3VudF0udW51c2VkKys7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcmV0dXJuIG5kZXNjczsKK30KKworc3RhdGljIGludCBtd2w4a190eF93YWl0X2VtcHR5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgZGVsYXlfbXMpCit7CisJdTMyIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBQcmV2aW91cyBUWFdhaXRFbXB0eSBpbnN0YW5jZVxuIik7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJaWYgKGNvdW50KSB7CisJCXByaXYtPnR4X3dhaXQgPSAmY21kX3dhaXQ7CisJCWlmIChwcml2LT5yYWRpb19zdGF0ZSkKKwkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlpZiAoY291bnQpIHsKKwkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1s0XTsKKwkJaW50IGluZGV4OworCQlpbnQgbmV3Y291bnQ7CisKKwkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKKwkJaWYgKHRpbWVvdXQpCisJCQlyZXR1cm4gMDsKKworCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCQlwcml2LT50eF93YWl0ID0gTlVMTDsKKwkJbmV3Y291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJCXByaW50ayhLRVJOX0VSUiAiJXMoJXUpIFRJTUVET1VUOiV1bXMgUGVuZDoldS0tPiV1XG4iLAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCBkZWxheV9tcywgY291bnQsIG5ld2NvdW50KTsKKworCQltd2w4a19zY2FuX3R4X3JpbmcocHJpdiwgdHhpbmZvLCA0KTsKKwkJZm9yIChpbmRleCA9IDAgOyBpbmRleCA8IDQ7IGluZGV4KyspCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiVFhROiV1IEw6JXUgSDoldSBUOiV1IEZXOiV1IERSVjoldSBVOiV1XG4iLAorCQkJCQlpbmRleCwKKwkJCQkJdHhpbmZvW2luZGV4XS5sZW4sCisJCQkJCXR4aW5mb1tpbmRleF0uaGVhZCwKKwkJCQkJdHhpbmZvW2luZGV4XS50YWlsLAorCQkJCQl0eGluZm9baW5kZXhdLmZ3X293bmVkLAorCQkJCQl0eGluZm9baW5kZXhdLmRydl9vd25lZCwKKwkJCQkJdHhpbmZvW2luZGV4XS51bnVzZWQpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNV0w4S19UWERfT0sJKE1XTDhLX1RYRF9TVEFUVVNfT0sgfCBcCisJCQkgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWSB8IFwKKwkJCSBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkpCisjZGVmaW5lIE1XTDhLX1RYRF9TVUNDRVNTKHN0YXQpCQkoKHN0YXQpICYgTVdMOEtfVFhEX09LKQorI2RlZmluZSBNV0w4S19UWERfRkFJTF9SRVRSWShzdGF0KQlcCisJKChzdGF0KSAmIChNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQpKQorCitzdGF0aWMgdm9pZCBtd2w4a190eHFfcmVjbGFpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgZm9yY2UpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCWludCB3YWtlID0gMDsKKworCXdoaWxlICh0eHEtPnR4X3N0YXRzLmxlbiA+IDApIHsKKwkJaW50IHR4OworCQlpbnQgcmM7CisJCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJCXUzMiBzdGF0dXM7CisKKwkJcmMgPSAwOworCQl0eCA9IHR4cS0+dHhfaGVhZDsKKwkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHg7CisKKwkJc3RhdHVzID0gbGUzMl90b19jcHUodHhfZGVzYy0+c3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCkgeworCQkJaWYgKCFmb3JjZSkKKwkJCQlicmVhazsKKwkJCXR4X2Rlc2MtPnN0YXR1cyAmPQorCQkJCX5jcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwkJfQorCisJCXR4cS0+dHhfaGVhZCA9ICh0eCArIDEpICUgTVdMOEtfVFhfREVTQ1M7CisJCUJVR19PTih0eHEtPnR4X3N0YXRzLmxlbiA9PSAwKTsKKwkJdHhxLT50eF9zdGF0cy5sZW4tLTsKKwkJcHJpdi0+cGVuZGluZ190eF9wa3RzLS07CisKKwkJYWRkciA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnBrdF9waHlzX2FkZHIpOworCQlzaXplID0gKHUzMikobGUxNl90b19jcHUodHhfZGVzYy0+cGt0X2xlbikpOworCQlza2IgPSB0eHEtPnR4X3NrYlt0eF0uc2tiOworCQl0eHEtPnR4X3NrYlt0eF0uc2tiID0gTlVMTDsKKworCQlCVUdfT04oc2tiID09IE5VTEwpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXJjID0gbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiKTsKKworCQkvKiBNYXJrIGRlc2NyaXB0b3IgYXMgdW51c2VkICovCisJCXR4X2Rlc2MtPnBrdF9waHlzX2FkZHIgPSAwOworCQl0eF9kZXNjLT5wa3RfbGVuID0gMDsKKworCQlpZiAodHhxLT50eF9za2JbdHhdLmNsb25lKSB7CisJCQkvKiBSZXBsYWNlIHdpdGggb3JpZ2luYWwgc2tiCisJCQkgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHN0YWNrCisJCQkgKiBhcyBidWZmZXIgaGFzIGJlZW4gY2xvbmVkCisJCQkgKi8KKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IHR4cS0+dHhfc2tiW3R4XS5jbG9uZTsKKwkJCXR4cS0+dHhfc2tiW3R4XS5jbG9uZSA9IE5VTEw7CisJCX0KKworCQlpZiAocmMpIHsKKwkJCS8qIFNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBoZXJlLgorCQkJICogRmFpbGVkIHRvIHJlbW92ZSBETUEgaGVhZGVyLgorCQkJICogUHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgZHJvcCBwYWNrZXQuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlbW92aW5nIERNQSBoZWFkZXIgZnJvbSAiCisJCQkJCSJ0eCBza2IgMHglcC5cbiIsIHByaXYtPm5hbWUsIHNrYik7CisKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOworCisJCS8qIENvbnZlcnQgZmlybXdhcmUgc3RhdHVzIHN0dWZmIGludG8gdHhfc3RhdHVzICovCisJCWlmIChNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCQkvKiBUcmFuc21pdCBPSyAqLworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQl9CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCisJCXdha2UgPSAhcHJpdi0+aW5jb25maWcgJiYgcHJpdi0+cmFkaW9fc3RhdGU7CisJfQorCisJaWYgKHdha2UpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpbmRleCk7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUgY2FyZCdzIHRyYW5zbWl0IGlzIGNvbXBsZXRlbHkgaGFsdGVkICovCitzdGF0aWMgdm9pZCBtd2w4a190eHFfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCisJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGluZGV4LCAxKTsKKworCWtmcmVlKHR4cS0+dHhfc2tiKTsKKwl0eHEtPnR4X3NrYiA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsCisJCQkgICAgTVdMOEtfVFhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4X2Rlc2MpLAorCQkJICAgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwl0eHEtPnR4X2Rlc2NfYXJlYSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX3R4cV94bWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eDsKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyOworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MTYgcW9zID0gMDsKKwlib29sIHFvc2ZyYW1lID0gZmFsc2UsIGFtcGR1ZnJhbWUgPSBmYWxzZTsKKwlib29sIG1jZnJhbWUgPSBmYWxzZSwgZWFwb2xmcmFtZSA9IGZhbHNlOworCWJvb2wgYW1zZHVmcmFtZSA9IGZhbHNlOworCV9fbGUxNiBmYzsKKworCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCXR4ID0gdHhxLT50eF9kZXNjX2FyZWEgKyB0eHEtPnR4X3RhaWw7CisKKwlCVUdfT04odHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgIT0gTlVMTCk7CisKKwkvKgorCSAqIEFwcGVuZCBIVyBETUEgaGVhZGVyIHRvIHN0YXJ0IG9mIHBhY2tldC4gIERyb3AgcGFja2V0IGlmCisJICogdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBvciBhIGZhaWx1cmUgdG8gdW5zaGFyZS91bmNsb25lCisJICogdGhlIHNrYi4KKwkgKi8KKwlza2IgPSBtd2w4a19hZGRfZG1hX2hlYWRlcihza2IpOworCisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHByZXBlbmQgSFcgRE1BICIKKwkJCSJoZWFkZXIsIGRyb3BwaW5nIFRYIGZyYW1lLlxuIiwgcHJpdi0+bmFtZSk7CisJCWRldl9rZnJlZV9za2Iob3JnX3NrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltd2w4a192aWYgPSBNV0w4S19WSUYodHhfaW5mby0+Y29udHJvbC52aWYpOworCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKKwl3aCA9ICZ0ci0+d2g7CisJZmMgPSB3aC0+ZnJhbWVfY29udHJvbDsKKwlxb3NmcmFtZSA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYyk7CisJbWNmcmFtZSA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHdoLT5hZGRyMSk7CisJYW1wZHVmcmFtZSA9ICEhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKKwkJdTE2IHNlcW5vID0gbXdsOGtfdmlmLT5zZXFubzsKKwkJd2gtPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2Vxbm8gPDwgNCk7CisJCW13bDhrX3ZpZi0+c2Vxbm8gPSBzZXFubysrICUgNDA5NjsKKwl9CisKKwlpZiAocW9zZnJhbWUpCisJCXFvcyA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKWllZWU4MDIxMV9nZXRfcW9zX2N0bCh3aCkpKTsKKworCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQlza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZG1hIG1hcCBza2IsICIKKwkJCSJkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOworCisJCWlmIChvcmdfc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOworCQlpZiAoc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJLyogU2V0IGRlc2MgaGVhZGVyLCBjcHUgYml0IG9yZGVyLiAgKi8KKwl0eC0+c3RhdHVzID0gMDsKKwl0eC0+ZGF0YV9yYXRlID0gMDsKKwl0eC0+dHhfcHJpb3JpdHkgPSBpbmRleDsKKwl0eC0+cW9zX2NvbnRyb2wgPSAwOworCXR4LT5yYXRlX2luZm8gPSAwOworCXR4LT5wZWVyX2lkID0gbXdsOGtfdmlmLT5wZWVyX2lkOworCisJYW1zZHVmcmFtZSA9ICEhKHFvcyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCk7CisKKwkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJpdCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gICovCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fCBpZWVlODAyMTFfaXNfY3RsKGZjKSkgeworCQl0eC0+ZGF0YV9yYXRlID0gMDsKKwkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7CisJCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCisJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCXR4LT5kYXRhX3JhdGUgPSAxOworCQlpZiAobWNmcmFtZSkKKwkJCXR4LT5zdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7CisKKwkJLyoKKwkJICogVGVsbCBmaXJtd2FyZSB0byBub3Qgc2VuZCBFQVBPTCBwa3RzIGluIGFuCisJCSAqIGFnZ3JlZ2F0ZS4gIFZlcmlmeSBhZ2FpbnN0IG1hYzgwMjExIHR4IHBhdGguICBJZgorCQkgKiBzdGFjayB0dXJucyBvZmYgQU1QRFUgZm9yIGFuIEVBUE9MIGZyYW1lIHRoaXMKKwkJICogY2hlY2sgd2lsbCBiZSByZW1vdmVkLgorCQkgKi8KKwkJaWYgKGVhcG9sZnJhbWUpIHsKKwkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOworCQl9IGVsc2UgeworCQkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KKwkJCWlmIChhbXBkdWZyYW1lKQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0spOworCQkJZWxzZQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKKworCQkJaWYgKGFtc2R1ZnJhbWUpCisJCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hbXNkdShxb3MpOworCQl9CisJfQorCisJLyogQ29udmVydCB0byBsaXR0bGUgZW5kaWFuICovCisJdHgtPnFvc19jb250cm9sID0gY3B1X3RvX2xlMTYocW9zKTsKKwl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIodHgtPnN0YXR1cyk7CisJdHgtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihkbWEpOworCXR4LT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgPSBza2I7CisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5jbG9uZSA9CisJCXNrYiA9PSBvcmdfc2tiID8gTlVMTCA6IG9yZ19za2I7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfT0sgfAorCQkJCQlNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwl3bWIoKTsKKwl0eHEtPnR4X3N0YXRzLmxlbisrOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cysrOworCXR4cS0+dHhfc3RhdHMuY291bnQrKzsKKwl0eHEtPnR4X3RhaWwrKzsKKworCWlmICh0eHEtPnR4X3RhaWwgPT0gTVdMOEtfVFhfREVTQ1MpCisJCXR4cS0+dHhfdGFpbCA9IDA7CisJaWYgKHR4cS0+dHhfaGVhZCA9PSB0eHEtPnR4X3RhaWwpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBpbmRleCk7CisKKwlpZiAocHJpdi0+aW5jb25maWcpIHsKKwkJLyoKKwkJICogU2lsZW50bHkgcXVldWUgcGFja2V0IHdoZW4gd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKKwkJICogYSBjb25maWcgY3ljbGUuICBOb3RpZnkgZmlybXdhcmUgb25seSBpZiB3ZSBhcmUKKwkJICogd2FpdGluZyBmb3IgVFhRcyB0byBlbXB0eS4gIElmIGEgcGFja2V0IGlzIHNlbnQKKwkJICogYmVmb3JlIC5jb25maWcoKSBpcyBjb21wbGV0ZSwgcGVyaGFwcyBpdCBpcyBiZXR0ZXIKKwkJICogdG8gZHJvcCB0aGUgcGFja2V0LCBhcyB0aGUgY2hhbm5lbCBpcyBiZWluZyBjaGFuZ2VkCisJCSAqIGFuZCB0aGUgcGFja2V0IHdpbGwgZW5kIHVwIG9uIHRoZSB3cm9uZyBjaGFubmVsLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HIFRYIGFjdGl2aXR5IHdoaWxlICIKKwkJCSJpbiBjb25maWdcbiIsIF9fZnVuY19fKTsKKworCQlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKQorCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfSBlbHNlCisJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCisvKgorICogQ29tbWFuZCBwcm9jZXNzaW5nLgorICovCisKKy8qIFRpbWVvdXQgZmlybXdhcmUgY29tbWFuZHMgYWZ0ZXIgMjAwMG1zICovCisjZGVmaW5lIE1XTDhLX0NNRF9USU1FT1VUX01TCTIwMDAKKworc3RhdGljIGludCBtd2w4a19wb3N0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG13bDhrX2NtZF9wa3QgKmNtZCkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdW5zaWduZWQgaW50IGRtYV9zaXplOworCWludCByYzsKKwl1MTYgX19pb21lbSAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJdTggYnVmWzMyXTsKKworCWNtZC0+cmVzdWx0ID0gMHhGRkZGOworCWRtYV9zaXplID0gbGUxNl90b19jcHUoY21kLT5sZW5ndGgpOworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgY21kLCBkbWFfc2l6ZSwKKwkJCQkgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWFfYWRkcikpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgaG9zdCBjb21tYW5kIGluIHByb2dyZXNzXG4iKTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCXByaXYtPmhvc3RjbWRfd2FpdCA9ICZjbWRfd2FpdDsKKwlpb3dyaXRlMzIoZG1hX2FkZHIsIHJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJbXNlY3NfdG9famlmZmllcyhNV0w4S19DTURfVElNRU9VVF9NUykpOworCisJcmVzdWx0ID0gJmNtZC0+cmVzdWx0OworCWlmICghdGltZW91dCkgeworCQlzcGluX2xvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwkJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyB0aW1lb3V0IGFmdGVyICV1IG1zXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSwKKwkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCSAgICAgICBNV0w4S19DTURfVElNRU9VVF9NUyk7CisJCXJjID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgeworCQlyYyA9ICpyZXN1bHQgPyAtRUlOVkFMIDogMDsKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyBlcnJvciAweCV4XG4iLAorCQkJICAgICAgIHByaXYtPm5hbWUsCisJCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKKwkJCSAgICAgICAqcmVzdWx0KTsKKwl9CisKKwlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBkbWFfc2l6ZSwKKwkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBHRVRfSFdfU1BFQy4KKyAqLworc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlYyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTggaHdfcmV2OworCV9fdTggaG9zdF9pbnRlcmZhY2U7CisJX19sZTE2IG51bV9tY2FkZHJzOworCV9fdTggcGVybV9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX19sZTE2IHJlZ2lvbl9jb2RlOworCV9fbGUzMiBmd19yZXY7CisJX19sZTMyIHBzX2Nvb2tpZTsKKwlfX2xlMzIgY2FwczsKKwlfX3U4IG1jc19iaXRtYXBbMTZdOworCV9fbGUzMiByeF9xdWV1ZV9wdHI7CisJX19sZTMyIG51bV90eF9xdWV1ZXM7CisJX19sZTMyIHR4X3F1ZXVlX3B0cnNbTVdMOEtfVFhfUVVFVUVTXTsKKwlfX2xlMzIgY2FwczI7CisJX19sZTMyIG51bV90eF9kZXNjX3Blcl9xdWV1ZTsKKwlfX2xlMzIgdG90YWxfcnhfZGVzYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlYyAqY21kOworCWludCByYzsKKwlpbnQgaTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVRfSFdfU1BFQyk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCW1lbXNldChjbWQtPnBlcm1fYWRkciwgMHhmZiwgc2l6ZW9mKGNtZC0+cGVybV9hZGRyKSk7CisJY21kLT5wc19jb29raWUgPSBjcHVfdG9fbGUzMihwcml2LT5jb29raWVfZG1hKTsKKwljbWQtPnJ4X3F1ZXVlX3B0ciA9IGNwdV90b19sZTMyKHByaXYtPnJ4cVswXS5yeF9kZXNjX2RtYSk7CisJY21kLT5udW1fdHhfcXVldWVzID0gTVdMOEtfVFhfUVVFVUVTOworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJY21kLT50eF9xdWV1ZV9wdHJzW2ldID0gY3B1X3RvX2xlMzIocHJpdi0+dHhxW2ldLnR4X2Rlc2NfZG1hKTsKKwljbWQtPm51bV90eF9kZXNjX3Blcl9xdWV1ZSA9IE1XTDhLX1RYX0RFU0NTOworCWNtZC0+dG90YWxfcnhfZGVzYyA9IE1XTDhLX1JYX0RFU0NTOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworCWlmICghcmMpIHsKKwkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGNtZC0+cGVybV9hZGRyKTsKKwkJcHJpdi0+bnVtX21jYWRkcnMgPSBsZTE2X3RvX2NwdShjbWQtPm51bV9tY2FkZHJzKTsKKwkJcHJpdi0+ZndfcmV2ID0gY21kLT5md19yZXY7CisJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OworCQlwcml2LT5yZWdpb25fY29kZSA9IGxlMTZfdG9fY3B1KGNtZC0+cmVnaW9uX2NvZGUpOworCX0KKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX01BQ19NVUxUSUNBU1RfQURSLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgbnVtYWRkcjsKKwlfX3U4IGFkZHJbMV1bSUVFRTgwMjExX0FERFJfTEVOXTsKK307CisKKyNkZWZpbmUgTVdMOEtfRU5BQkxFX1JYX01VTFRJQ0FTVCAweDAwMEYKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQlpbnQgbWNfY291bnQsCisJCQkJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisJc3RydWN0IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkciAqY21kOworCWludCBpbmRleCA9IDA7CisJaW50IHJjOworCWludCBzaXplID0gc2l6ZW9mKCpjbWQpICsgKChtY19jb3VudCAtIDEpICogSUVFRTgwMjExX0FERFJfTEVOKTsKKwljbWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0VOQUJMRV9SWF9NVUxUSUNBU1QpOworCWNtZC0+bnVtYWRkciA9IGNwdV90b19sZTE2KG1jX2NvdW50KTsKKwl3aGlsZSAoKGluZGV4IDwgbWNfY291bnQpICYmIG1jbGlzdCkgeworCQlpZiAobWNsaXN0LT5kYV9hZGRybGVuICE9IElFRUU4MDIxMV9BRERSX0xFTikgeworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHJfZXhpdDsKKwkJfQorCQltZW1jcHkoY21kLT5hZGRyW2luZGV4XSwgbWNsaXN0LT5kYV9hZGRyLCBJRUVFODAyMTFfQUREUl9MRU4pOworCQlpbmRleCsrOworCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJfQorCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfODAyXzExX0dFVF9TVEFULgorICovCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTMyIHN0YXRzWzY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfU1RBVF9BQ0tfRkFJTFVSRQk5CisjZGVmaW5lIE1XTDhLX1NUQVRfUlRTX0ZBSUxVUkUJMTIKKyNkZWZpbmUgTVdMOEtfU1RBVF9GQ1NfRVJST1IJMjQKKyNkZWZpbmUgTVdMOEtfU1RBVF9SVFNfU1VDQ0VTUwkxMQorCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVF9TVEFUKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWlmICghcmMpIHsKKwkJc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9BQ0tfRkFJTFVSRV0pOworCQlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX1JUU19GQUlMVVJFXSk7CisJCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX0ZDU19FUlJPUl0pOworCQlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX1JUU19TVUNDRVNTXSk7CisJfQorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfODAyXzExX1JBRElPX0NPTlRST0wuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBjb250cm9sOworCV9fbGUxNiByYWRpb19vbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqY21kOworCWludCByYzsKKworCWlmICgoKGVuYWJsZSAmIE1XTDhLX1JBRElPX0VOQUJMRSkgPT0gcHJpdi0+cmFkaW9fc3RhdGUpICYmCisJICAgICEoZW5hYmxlICYgTVdMOEtfUkFESU9fRk9SQ0UpKQorCQlyZXR1cm4gMDsKKworCWVuYWJsZSAmPSBNV0w4S19SQURJT19FTkFCTEU7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUkFESU9fQ09OVFJPTCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3ByZWFtYmxlKTsKKwljbWQtPnJhZGlvX29uID0gY3B1X3RvX2xlMTYoZW5hYmxlID8gMHgwMDAxIDogMHgwMDAwKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCWlmICghcmMpCisJCXByaXYtPnJhZGlvX3N0YXRlID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50Cittd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgc2hvcnRfcHJlYW1ibGUpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisKKwlpZiAoaHcgPT0gTlVMTCB8fCBody0+cHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcml2ID0gaHctPnByaXY7CisKKwlwcml2LT5yYWRpb19wcmVhbWJsZSA9IChzaG9ydF9wcmVhbWJsZSA/CisJCU1XTDhLX1JBRElPX1NIT1JUX1BSRUFNQkxFIDoKKwkJTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRSk7CisKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LAorCQkJTVdMOEtfUkFESU9fRU5BQkxFIHwgTVdMOEtfUkFESU9fRk9SQ0UpOworfQorCisvKgorICogQ01EXzgwMl8xMV9SRl9UWF9QT1dFUi4KKyAqLworI2RlZmluZSBNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTAk4CisKK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgc3VwcG9ydF9sZXZlbDsKKwlfX2xlMTYgY3VycmVudF9sZXZlbDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZEJtKQoreworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JGX1RYX1BPV0VSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5zdXBwb3J0X2xldmVsID0gY3B1X3RvX2xlMTYoZEJtKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUFJFX1NDQU4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1BSRV9TQ0FOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9QT1NUX1NDQU4uCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBpc2lic3M7CisJX191OCBic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggbWFjW0lFRUU4MDIxMV9BRERSX0xFTl0pCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9QT1NUX1NDQU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5pc2lic3MgPSAwOworCW1lbWNweShjbWQtPmJzc2lkLCBtYWMsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JGX0NIQU5ORUwuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fdTggY3VycmVudF9jaGFubmVsOworCV9fbGUzMiBjaGFubmVsX2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsLT5od192YWx1ZTsKKwlpZiAoY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgPSBjcHVfdG9fbGUzMigweDAwMDAwMDgxKTsKKwllbHNlCisJCWNtZC0+Y2hhbm5lbF9mbGFncyA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9TTE9ULgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90IHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX3U4IHNob3J0X3Nsb3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfc2xvdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHNsb3RfdGltZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90ICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9TTE9UKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5zaG9ydF9zbG90ID0gc2xvdF90aW1lID09IE1XTDhLX1NIT1JUX1NMT1RUSU1FID8gMSA6IDA7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfTUlNT19DT05GSUcuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworCV9fdTggcnhfYW50ZW5uYV9tYXA7CisJX191OCB0eF9hbnRlbm5hX21hcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQoreworCXN0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfTUlNT19DT05GSUcpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpOworCWNtZC0+cnhfYW50ZW5uYV9tYXAgPSByeDsKKwljbWQtPnR4X2FudGVubmFfbWFwID0gdHg7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfRU5BQkxFX1NOSUZGRVIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19lbmFibGVfc25pZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTMyKCh1MzIpTVdMOEtfQ01EX1NFVCkgOiAwOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SQVRFX0FEQVBUX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG1vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3UxNiBtb2RlKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfV01NX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3NldF93bW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfd21tICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9XTU1fTU9ERSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpIDogMDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCWlmICghcmMpCisJCXByaXYtPndtbV9tb2RlID0gZW5hYmxlOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SVFNfVEhSRVNIT0xELgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiB0aHJlc2hvbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgdTE2IGFjdGlvbiwgdTE2ICp0aHJlc2hvbGQpCit7CisJc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JUU19USFJFU0hPTEQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOworCWNtZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYoKnRocmVzaG9sZCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX0VEQ0FfUEFSQU1TLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCisJLyogU2VlIE1XTDhLX1NFVF9FRENBX1hYWCBiZWxvdyAqLworCV9fbGUxNiBhY3Rpb247CisKKwkvKiBUWCBvcHBvcnR1bml0eSBpbiB1bml0cyBvZiAzMiB1cyAqLworCV9fbGUxNiB0eG9wOworCisJLyogTG9nIGV4cG9uZW50IG9mIG1heCBjb250ZW50aW9uIHBlcmlvZDogMC4uLjE1Ki8KKwlfX3U4IGxvZ19jd19tYXg7CisKKwkvKiBMb2cgZXhwb25lbnQgb2YgbWluIGNvbnRlbnRpb24gcGVyaW9kOiAwLi4uMTUgKi8KKwlfX3U4IGxvZ19jd19taW47CisKKwkvKiBBZGFwdGl2ZSBpbnRlcmZyYW1lIHNwYWNpbmcgaW4gdW5pdHMgb2YgMzJ1cyAqLworCV9fdTggYWlmczsKKworCS8qIFRYIHF1ZXVlIHRvIGNvbmZpZ3VyZSAqLworCV9fdTggdHhxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19HRVRfRURDQV9BTEwJMAorI2RlZmluZSBNV0w4S19TRVRfRURDQV9DVwkweDAxCisjZGVmaW5lIE1XTDhLX1NFVF9FRENBX1RYT1AJMHgwMgorI2RlZmluZSBNV0w4S19TRVRfRURDQV9BSUZTCTB4MDQKKworI2RlZmluZSBNV0w4S19TRVRfRURDQV9BTEwJKE1XTDhLX1NFVF9FRENBX0NXIHwgXAorCQkJCSBNV0w4S19TRVRfRURDQV9UWE9QIHwgXAorCQkJCSBNV0w4S19TRVRfRURDQV9BSUZTKQorCitzdGF0aWMgaW50Cittd2w4a19zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcW51bSwKKwkJX191MTYgY3dfbWluLCBfX3UxNiBjd19tYXgsCisJCV9fdTggYWlmcywgX191MTYgdHhvcCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyAqY21kOworCXUzMiBsb2dfY3dfbWluLCBsb2dfY3dfbWF4OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbG9nX2N3X21pbiA9IGlsb2cyKGN3X21pbisxKTsKKwlsb2dfY3dfbWF4ID0gaWxvZzIoY3dfbWF4KzEpOworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19TRVRfRURDQV9BTEwpOworCWNtZC0+dHhvcCA9IGNwdV90b19sZTE2KHR4b3ApOworCWNtZC0+bG9nX2N3X21heCA9ICh1OClsb2dfY3dfbWF4OworCWNtZC0+bG9nX2N3X21pbiA9ICh1OClsb2dfY3dfbWluOworCWNtZC0+YWlmcyA9IGFpZnM7CisJY21kLT50eHEgPSBxbnVtOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0ZJTkFMSVpFX0pPSU4uCisgKi8KKworLyogRkogYmVhY29uIGJ1ZmZlciBzaXplIGlzIGNvbXBpbGVkIGludG8gdGhlIGZpcm13YXJlLiAgKi8KKyNkZWZpbmUgTVdMOEtfRkpfQkVBQ09OX01BWExFTgkxMjgKKworc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIHNsZWVwX2ludGVydmFsOwkvKiBOdW1iZXIgb2YgYmVhY29uIHBlcmlvZHMgdG8gc2xlZXAgKi8KKwlfX3U4IGJlYWNvbl9kYXRhW01XTDhLX0ZKX0JFQUNPTl9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19maW5hbGl6ZV9qb2luKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpmcmFtZSwKKwkJCQlfX3UxNiBmcmFtZWxlbiwgX191MTYgZHRpbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4gKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnBheWxvYWQgPSBmcmFtZTsKKwl1MTYgaGRybGVuOworCXUzMiBwYXlsb2FkX2xlbjsKKwlpbnQgcmM7CisKKwlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlpZiAoZHRpbSkKKwkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGR0aW0pOworCWVsc2UKKwkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKDEpOworCisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihwYXlsb2FkLT5mcmFtZV9jb250cm9sKTsKKworCXBheWxvYWRfbGVuID0gZnJhbWVsZW4gPiBoZHJsZW4gPyBmcmFtZWxlbiAtIGhkcmxlbiA6IDA7CisKKwkvKiBYWFggVEJEIE1pZ2h0IGp1c3QgaGF2ZSB0byBhYm9ydCBhbmQgcmV0dXJuIGFuIGVycm9yICovCisJaWYgKHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTikKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HOiBJbmNvbXBsZXRlIGJlYWNvbiAiCisJCQkic2VudCB0byBmaXJtd2FyZS4gU3o9JXUgTUFYPSV1XG4iLCBfX2Z1bmNfXywKKwkJCXBheWxvYWRfbGVuLCBNV0w4S19GSl9CRUFDT05fTUFYTEVOKTsKKworCXBheWxvYWRfbGVuID0gcGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOID8KKwkJCQlNV0w4S19GSl9CRUFDT05fTUFYTEVOIDogcGF5bG9hZF9sZW47CisKKwlpZiAocGF5bG9hZCAmJiBwYXlsb2FkX2xlbikKKwkJbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9VUERBVEVfU1RBREIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCisJLyogU2VlIFNUQURCX0FDVElPTl9UWVBFICovCisJX19sZTMyCWFjdGlvbjsKKworCS8qIFBlZXIgTUFDIGFkZHJlc3MgKi8KKwlfX3U4CXBlZXJfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCisJX19sZTMyCXJlc2VydmVkOworCisJLyogUGVlciBpbmZvIC0gdmFsaWQgZHVyaW5nIGFkZC91cGRhdGUuICAqLworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbwlwZWVyX2luZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBfX3UzMiBhY3Rpb24pCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiAqY21kOworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyAqcGVlcl9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXMgPSBtdl92aWYtPmxlZ2FjeV9yYXRlczsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlpbnQgcmM7CisJX191OCBjb3VudCwgKnJhdGVzOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VQREFURV9TVEFEQik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKKwlwZWVyX2luZm8gPSAmY21kLT5wZWVyX2luZm87CisJbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1XTDhLX1NUQV9EQl9BRERfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZOgorCQkvKiBCdWlsZCBwZWVyX2luZm8gYmxvY2sgKi8KKwkJcGVlcl9pbmZvLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7CisJCXBlZXJfaW5mby0+YmFzaWNfY2FwcyA9IGNwdV90b19sZTE2KGluZm8tPmFzc29jX2NhcGFiaWxpdHkpOworCQlwZWVyX2luZm8tPmludGVyb3AgPSAxOworCQlwZWVyX2luZm8tPmFtc2R1X2VuYWJsZWQgPSAwOworCisJCXJhdGVzID0gcGVlcl9pbmZvLT5sZWdhY3lfcmF0ZXM7CisJCWZvciAoY291bnQgPSAwIDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCQlyYXRlc1tjb3VudF0gPSBiaXRyYXRlc1tjb3VudF0uaHdfdmFsdWU7CisKKwkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwkJaWYgKHJjID09IDApCisJCQltdl92aWYtPnBlZXJfaWQgPSBwZWVyX2luZm8tPnN0YXRpb25faWQ7CisKKwkJYnJlYWs7CisKKwljYXNlIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfRkxVU0g6CisJZGVmYXVsdDoKKwkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwkJaWYgKHJjID09IDApCisJCQltdl92aWYtPnBlZXJfaWQgPSAwOworCQlicmVhazsKKwl9CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfQUlELgorICovCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfRElTQUJMRUQJCQkweDAwCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfTk9OX01FTUJFUl9QUk9UX01PREUJCTB4MDEKKyNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9PTkVfMjBNSFpfU1RBX1BST1RfTU9ERQkweDAyCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfSFRNSVhFRF9QUk9UX01PREUJCTB4MDMKKworI2RlZmluZSBNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWQkJCTE0CisKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRAkJCTB4MDAKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMUcJCQkJMHgwNworI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZCQkweDAyCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTAkJCTB4MDYKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9NQVNLCQkJCTB4MDcKKworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNglhaWQ7CisKKwkgLyogQVAncyBNQUMgYWRkcmVzcyAoQlNTSUQpICovCisJX191OAlic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7CisJX191OAlzdXBwX3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJaW50IGNvdW50OworCXUxNiBwcm90X21vZGU7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9BSUQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5haWQgPSBjcHVfdG9fbGUxNihpbmZvLT5haWQpOworCisJbWVtY3B5KGNtZC0+YnNzaWQsIG12X3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCisJaWYgKGluZm8tPnVzZV9jdHNfcHJvdCkgeworCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExRzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGluZm8tPmh0Lm9wZXJhdGlvbl9tb2RlICYKKwkJCUlFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT04pIHsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OXzIwTUhaOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OSFRfTUlYRUQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCWNtZC0+cHJvdGVjdGlvbl9tb2RlID0gY3B1X3RvX2xlMTYocHJvdF9tb2RlKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJY21kLT5zdXBwX3JhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURS4KKyAqLworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfcmF0ZXNldCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTgJbGVnYWN5X3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKKworCS8qIEJpdG1hcCBmb3Igc3VwcG9ydGVkIE1DUyBjb2Rlcy4gICovCisJX191OAltY3Nfc2V0W01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworCV9fdTgJcmVzZXJ2ZWRbTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFU107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX3VwZGF0ZV9yYXRlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgKmNtZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJaW50IGNvdW50OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJY21kLT5sZWdhY3lfcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1VTRV9GSVhFRF9SQVRFLgorICovCisjZGVmaW5lIE1XTDhLX1JBVEVfVEFCTEVfU0laRQk4CisjZGVmaW5lIE1XTDhLX1VDQVNUX1JBVEUJMAorI2RlZmluZSBNV0w4S19NQ0FTVF9SQVRFCTEKKyNkZWZpbmUgTVdMOEtfQkNBU1RfUkFURQkyCisKKyNkZWZpbmUgTVdMOEtfVVNFX0ZJWEVEX1JBVEUJMHgwMDAxCisjZGVmaW5lIE1XTDhLX1VTRV9BVVRPX1JBVEUJMHgwMDAyCisKK3N0cnVjdCBtd2w4a19yYXRlX2VudHJ5IHsKKwkvKiBTZXQgdG8gMSBpZiBIVCByYXRlLCAwIGlmIGxlZ2FjeS4gICovCisJX19sZTMyCWlzX2h0X3JhdGU7CisKKwkvKiBTZXQgdG8gMSB0byB1c2UgcmV0cnlfY291bnQgZmllbGQuICAqLworCV9fbGUzMgllbmFibGVfcmV0cnk7CisKKwkvKiBTcGVjaWZpZWQgbGVnYWN5IHJhdGUgb3IgTUNTLiAgKi8KKwlfX2xlMzIJcmF0ZTsKKworCS8qIE51bWJlciBvZiBhbGxvd2VkIHJldHJpZXMuICAqLworCV9fbGUzMglyZXRyeV9jb3VudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtd2w4a19yYXRlX3RhYmxlIHsKKwkvKiAxIHRvIGFsbG93IHNwZWNpZmllZCByYXRlIGFuZCBiZWxvdyAqLworCV9fbGUzMglhbGxvd19yYXRlX2Ryb3A7CisJX19sZTMyCW51bV9yYXRlczsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSByYXRlX2VudHJ5W01XTDhLX1JBVEVfVEFCTEVfU0laRV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlIHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyCWFjdGlvbjsKKwlzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSByYXRlX3RhYmxlOworCisJLyogVW5pY2FzdCwgQnJvYWRjYXN0IG9yIE11bHRpY2FzdCAqLworCV9fbGUzMglyYXRlX3R5cGU7CisJX19sZTMyCXJlc2VydmVkMTsKKwlfX2xlMzIJcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJdTMyIGFjdGlvbiwgdTMyIHJhdGVfdHlwZSwgc3RydWN0IG13bDhrX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSAqY21kOworCWludCBjb3VudDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7CisJY21kLT5yYXRlX3R5cGUgPSBjcHVfdG9fbGUzMihyYXRlX3R5cGUpOworCisJaWYgKHJhdGVfdGFibGUgIT0gTlVMTCkgeworCQkvKiBDb3B5IG92ZXIgZWFjaCBmaWVsZCBtYW51YWxseSBzbworCQkqIHRoYXQgYml0ZmxpcHBpbmcgY2FuIGJlIGRvbmUKKwkJKi8KKwkJY21kLT5yYXRlX3RhYmxlLmFsbG93X3JhdGVfZHJvcCA9CisJCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+YWxsb3dfcmF0ZV9kcm9wKTsKKwkJY21kLT5yYXRlX3RhYmxlLm51bV9yYXRlcyA9CisJCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+bnVtX3JhdGVzKTsKKworCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCByYXRlX3RhYmxlLT5udW1fcmF0ZXM7IGNvdW50KyspIHsKKwkJCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5ICpkc3QgPQorCQkJCSZjbWQtPnJhdGVfdGFibGUucmF0ZV9lbnRyeVtjb3VudF07CisJCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqc3JjID0KKwkJCQkmcmF0ZV90YWJsZS0+cmF0ZV9lbnRyeVtjb3VudF07CisKKwkJCWRzdC0+aXNfaHRfcmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+aXNfaHRfcmF0ZSk7CisJCQlkc3QtPmVuYWJsZV9yZXRyeSA9IGNwdV90b19sZTMyKHNyYy0+ZW5hYmxlX3JldHJ5KTsKKwkJCWRzdC0+cmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+cmF0ZSk7CisJCQlkc3QtPnJldHJ5X2NvdW50ID0gY3B1X3RvX2xlMzIoc3JjLT5yZXRyeV9jb3VudCk7CisJCX0KKwl9CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIEludGVycnVwdCBoYW5kbGluZy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG13bDhrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJaW93cml0ZTMyKH5zdGF0dXMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCisJc3RhdHVzICY9IHByaXYtPmludF9tYXNrOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9UWF9ET05FKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkpIHsKKwkJd2hpbGUgKHJ4cV9wcm9jZXNzKGh3LCAwLCAxKSkKKwkJCXJ4cV9yZWZpbGwoaHcsIDAsIDEpOworCX0KKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7CisJCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkgeworCQkJY29tcGxldGUocHJpdi0+aG9zdGNtZF93YWl0KTsKKwkJCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWSkgeworCQlpZiAoIXByaXYtPmluY29uZmlnICYmCisJCQlwcml2LT5yYWRpb19zdGF0ZSAmJgorCQkJbXdsOGtfdHhxX2J1c3kocHJpdikpCisJCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qCisgKiBDb3JlIGRyaXZlciBvcGVyYXRpb25zLgorICovCitzdGF0aWMgaW50IG13bDhrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGluZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJaW50IHJjOworCisJaWYgKHByaXYtPmN1cnJlbnRfY2hhbm5lbCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyAiCisJCSAgICAgICAiZGlzYWJsZWRcbiIsIHByaXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJcmMgPSBtd2w4a190eHFfeG1pdChodywgaW5kZXgsIHNrYik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a193b3JrX3N0cnVjdCB7CisJLyogSW5pdGlhbGl6ZWQgYnkgbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3Q7CisKKwkvKiBSZXF1aXJlZCBmaWVsZCBwYXNzZWQgaW4gdG8gbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCS8qIFJlcXVpcmVkIGZpZWxkIHBhc3NlZCBpbiB0byBtd2w4a19xdWV1ZV93b3JrKCkuICAqLworCWludCAoKndmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOworCisJLyogSW5pdGlhbGl6ZWQgYnkgbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiAqY21kX3dhaXQ7CisKKwkvKiBSZXN1bHQgY29kZS4gICovCisJaW50IHJjOworCisJLyoKKwkgKiBPcHRpb25hbCBmaWVsZC4gUmVmZXIgdG8gZXhwbGFuYXRpb24gb2YgTVdMOEtfV1FfWFhYX1hYWAorCSAqIGZsYWdzIGZvciBleHBsYW5hdGlvbi4gIERlZmF1bHRzIHRvIE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUy4KKwkgKi8KKwl1MzIgb3B0aW9uczsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfQ09ORklHX1RJTUVPVVRfTVMuICAqLworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9tczsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTLiAgKi8KKwl1MzIgdHh3YWl0X2F0dGVtcHRzOworCisJLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19UWFdBSVRfTVMuICAqLworCXUzMiB0eF90aW1lb3V0X21zOworCXUzMiBzdGVwOworfTsKKworLyogRmxhZ3MgY29udHJvbGxpbmcgYmVoYXZpb3Igb2YgY29uZmlnIHF1ZXVlIHJlcXVlc3RzICovCisKKy8qIENhbGxlciBzcGlucyB3aGlsZSB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfU1BJTgkJCTB4MDAwMDAwMDEKKworLyogV2FpdCBmb3IgVFggcXVldWVzIHRvIGVtcHR5IGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkJCTB4MDAwMDAwMDIKKworLyogUXVldWUgcmVxdWVzdCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfUE9TVF9SRVFVRVNUCQkweDAwMDAwMDA0CisKKy8qCisgKiBDYWxsZXIgc2xlZXBzIGFuZCB3YWl0cyBmb3IgdGFzayBjb21wbGV0ZSBub3RpZmljYXRpb24uCisgKiBEbyBub3QgdXNlIGluIGF0b21pYyBjb250ZXh0LgorICovCisjZGVmaW5lIE1XTDhLX1dRX1NMRUVQCQkJMHgwMDAwMDAwOAorCisvKiBGcmVlIHdvcmsgc3RydWN0IHdoZW4gdGFzayBpcyBkb25lLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUCTB4MDAwMDAwMTAKKworLyoKKyAqIENvbmZpZyByZXF1ZXN0IGlzIHF1ZXVlZCBhbmQgcmV0dXJucyB0byBjYWxsZXIgaW1lZGlhdGVseS4gIFVzZQorICogdGhpcyBpbiBhdG9taWMgY29udGV4dC4gV29yayBzdHJ1Y3QgaXMgZnJlZWQgYnkgbXdsOGtfcXVldWVfd29yaygpCisgKiB3aGVuIHRoaXMgZmxhZyBpcyBzZXQuCisgKi8KKyNkZWZpbmUgTVdMOEtfV1FfUVVFVUVfT05MWQkoTVdMOEtfV1FfUE9TVF9SRVFVRVNUIHwgXAorCQkJCSBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QpCisKKy8qIERlZmF1bHQgd29yayBxdWV1ZSBiZWhhdmlvciBpcyB0byBzbGVlcCBhbmQgd2FpdCBmb3IgdHggY29tcGxldGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUyAoTVdMOEtfV1FfU0xFRVAgfCBNV0w4S19XUV9UWF9XQUlUX0VNUFRZKQorCisvKgorICogRGVmYXVsdCBjb25maWcgcmVxdWVzdCB0aW1lb3V0LiAgQWRkIGFkanVzdG1lbnRzIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGNvbmZpZyB0aHJlYWQgd2FpdHMgbG9uZyBlbm91Z2ggZm9yIGJvdGggdHggd2FpdCBhbmQgY21kIHdhaXQgYmVmb3JlCisgKiB0aW1pbmcgb3V0LgorICovCisKKy8qIFRpbWUgdG8gd2FpdCBmb3IgYWxsIFRYUXMgdG8gZHJhaW4uICBUWCBEb29yYmVsbCBpcyBwcmVzc2VkIGVhY2ggdGltZS4gICovCisjZGVmaW5lIE1XTDhLX1RYV0FJVF9USU1FT1VUX01TCQkxMDAwCisKKy8qIERlZmF1bHQgbnVtYmVyIG9mIFRYIHdhaXQgYXR0ZW1wdHMuICAqLworI2RlZmluZSBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMJNAorCisvKiBUb3RhbCB0aW1lIHRvIHdhaXQgZm9yIFRYUSB0byBkcmFpbi4gICovCisjZGVmaW5lIE1XTDhLX1RYV0FJVF9NUwkJCShNV0w4S19UWFdBSVRfVElNRU9VVF9NUyAqIFwKKwkJCQkJCU1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUykKKworLyogU2NoZWR1bGluZyBzbG9wLiAgKi8KKyNkZWZpbmUgTVdMOEtfT1NfU0NIRURVTEVfT1ZFUkhFQURfTVMJMjAwCisKKyNkZWZpbmUgTVdMOEtfQ09ORklHX1RJTUVPVVRfTVMJKE1XTDhLX0NNRF9USU1FT1VUX01TICsgXAorCQkJCSBNV0w4S19UWFdBSVRfTVMgKyBcCisJCQkJIE1XTDhLX09TX1NDSEVEVUxFX09WRVJIRUFEX01TKQorCitzdGF0aWMgdm9pZCBtd2w4a19jb25maWdfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCXByaXYtPmluY29uZmlnID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCS8qCisJICogV2FpdCBmb3IgaG9zdCBxdWV1ZXMgdG8gZHJhaW4gYmVmb3JlIGRvaW5nIFBIWQorCSAqIHJlY29uZmlndXJhdGlvbi4gVGhpcyBhdm9pZHMgaW50ZXJydXB0aW5nIGFueSBpbi1mbGlnaHQKKwkgKiBETUEgdHJhbnNmZXJzIHRvIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWSkgeworCQl1MzIgdGltZW91dDsKKwkJdTMyIHRpbWVfcmVtYWluaW5nOworCQl1MzIgaXRlcjsKKwkJdTMyIHR4X3dhaXRfYXR0ZW1wdHMgPSB3b3JrZXItPnR4d2FpdF9hdHRlbXB0czsKKworCQl0aW1lX3JlbWFpbmluZyA9IHdvcmtlci0+dHhfdGltZW91dF9tczsKKwkJaWYgKCF0eF93YWl0X2F0dGVtcHRzKQorCQkJdHhfd2FpdF9hdHRlbXB0cyA9IDE7CisKKwkJdGltZW91dCA9IHdvcmtlci0+dHhfdGltZW91dF9tcy90eF93YWl0X2F0dGVtcHRzOworCQlpZiAoIXRpbWVvdXQpCisJCQl0aW1lb3V0ID0gMTsKKworCQlpdGVyID0gdHhfd2FpdF9hdHRlbXB0czsKKwkJZG8geworCQkJaW50IHdhaXRfdGltZTsKKworCQkJaWYgKHRpbWVfcmVtYWluaW5nID4gdGltZW91dCkgeworCQkJCXRpbWVfcmVtYWluaW5nIC09IHRpbWVvdXQ7CisJCQkJd2FpdF90aW1lID0gdGltZW91dDsKKwkJCX0gZWxzZQorCQkJCXdhaXRfdGltZSA9IHRpbWVfcmVtYWluaW5nOworCisJCQlpZiAoIXdhaXRfdGltZSkKKwkJCQl3YWl0X3RpbWUgPSAxOworCisJCQlyYyA9IG13bDhrX3R4X3dhaXRfZW1wdHkoaHcsIHdhaXRfdGltZSk7CisJCQlpZiAocmMpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHR4d2FpdCB0aW1lb3V0PSV1bXMgIgorCQkJCQkiUmV0cnk6JXUvJXVcbiIsIF9fZnVuY19fLCB0aW1lb3V0LAorCQkJCQl0eF93YWl0X2F0dGVtcHRzIC0gaXRlciArIDEsCisJCQkJCXR4X3dhaXRfYXR0ZW1wdHMpOworCisJCX0gd2hpbGUgKHJjICYmIC0taXRlcik7CisKKwkJcmMgPSBpdGVyID8gMCA6IC1FVElNRURPVVQ7CisJfQorCWlmICghcmMpCisJCXJjID0gd29ya2VyLT53ZnVuYyh3dCk7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOworCWlmIChwcml2LT5wZW5kaW5nX3R4X3BrdHMgJiYgcHJpdi0+cmFkaW9fc3RhdGUpCisJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKKworCXdvcmtlci0+cmMgPSByYzsKKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU0xFRVApCisJCWNvbXBsZXRlKHdvcmtlci0+Y21kX3dhaXQpOworCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVCkKKwkJa2ZyZWUod3QpOworfQorCitzdGF0aWMgaW50IG13bDhrX3F1ZXVlX3dvcmsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0ICp3b3JrZXIsCisJCQkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxdWV1ZSwKKwkJCQlpbnQgKCp3ZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3KSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCWludCByYyA9IDA7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisKKwlpZiAoIXdvcmtlci0+dGltZW91dF9tcykKKwkJd29ya2VyLT50aW1lb3V0X21zID0gTVdMOEtfQ09ORklHX1RJTUVPVVRfTVM7CisKKwlpZiAoIXdvcmtlci0+b3B0aW9ucykKKwkJd29ya2VyLT5vcHRpb25zID0gTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TOworCisJaWYgKCF3b3JrZXItPnR4d2FpdF9hdHRlbXB0cykKKwkJd29ya2VyLT50eHdhaXRfYXR0ZW1wdHMgPSBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFM7CisKKwlpZiAoIXdvcmtlci0+dHhfdGltZW91dF9tcykKKwkJd29ya2VyLT50eF90aW1lb3V0X21zID0gTVdMOEtfVFhXQUlUX01TOworCisJd29ya2VyLT5odyA9IGh3OworCXdvcmtlci0+Y21kX3dhaXQgPSAmY21kX3dhaXQ7CisJd29ya2VyLT5yYyA9IDE7CisJd29ya2VyLT53ZnVuYyA9IHdmdW5jOworCisJSU5JVF9XT1JLKCZ3b3JrZXItPnd0LCBtd2w4a19jb25maWdfdGhyZWFkKTsKKwlxdWV1ZV93b3JrKHdxdWV1ZSwgJndvcmtlci0+d3QpOworCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1BPU1RfUkVRVUVTVCkgeworCQlyYyA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NQSU4pIHsKKwkJCXRpbWVvdXQgPSB3b3JrZXItPnRpbWVvdXRfbXM7CisJCQl3aGlsZSAodGltZW91dCAmJiAod29ya2VyLT5yYyA+IDApKSB7CisJCQkJbWRlbGF5KDEpOworCQkJCXRpbWVvdXQtLTsKKwkJCX0KKwkJfSBlbHNlIGlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TTEVFUCkKKwkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCW1zZWNzX3RvX2ppZmZpZXMod29ya2VyLT50aW1lb3V0X21zKSk7CisKKwkJaWYgKHRpbWVvdXQpCisJCQlyYyA9IHdvcmtlci0+cmM7CisJCWVsc2UgeworCQkJY2FuY2VsX3dvcmtfc3luYygmd29ya2VyLT53dCk7CisJCQlyYyA9IC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3N0YXJ0X3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqd29ya2VyID0gKHN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCWlmIChwcml2LT52aWYgIT0gTlVMTCkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBUdXJuIG9uIHJhZGlvICovCisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRU5BQkxFKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBQdXJnZSBUWC9SWCBIVyBxdWV1ZXMgKi8KKwlpZiAobXdsOGtfY21kX3NldF9wcmVfc2NhbihodykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIikpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRW5hYmxlIGZpcm13YXJlIHJhdGUgYWRhcHRhdGlvbiAqLworCWlmIChtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShodywgMCkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRGlzYWJsZSBXTU0uIFdNTSBnZXRzIGVuYWJsZWQgd2hlbiBzdGFjayBzZW5kcyBXTU0gcGFybXMgKi8KKwlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0RJU0FCTEUpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIERpc2FibGUgc25pZmZlciBtb2RlICovCisJaWYgKG13bDhrX2VuYWJsZV9zbmlmZmVyKGh3LCAwKSkKKwkJcmMgPSAtRUlPOworCittd2w4a19zdGFydF9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmM7CisKKwkvKiBFbmFibGUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9lbmFibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJm13bDhrX2ludGVycnVwdCwKKwkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2Rpc2FibGVfdGFza2xldDsKKwl9CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbXdsOGtfc3RhcnRfZGlzYWJsZV9pcnE7CisJfQorCisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX3N0YXJ0X3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmICghcmMpCisJCXJldHVybiByYzsKKworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisKKwlyYyA9IC1FSU87CisKK213bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOgorCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworbXdsOGtfc3RhcnRfZGlzYWJsZV90YXNrbGV0OgorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCXJldHVybiByYzsKK30KKworc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworfTsKKworc3RhdGljIGludCBtd2w4a19zdG9wX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlpbnQgcmM7CisKKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGk7CisKKwlpZiAocHJpdi0+dmlmICE9IE5VTEwpCisJCXJldHVybjsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfc3RvcF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCisJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwlpZiAocHJpdi0+YmVhY29uX3NrYiAhPSBOVUxMKQorCQlkZXZfa2ZyZWVfc2tiKHByaXYtPmJlYWNvbl9za2IpOworCisJLyogU3RvcCB0eCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwkvKiBTdG9wIGNvbmZpZyB0aHJlYWQgKi8KKwlmbHVzaF93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCS8qIFJldHVybiBhbGwgc2ticyB0byBtYWM4MDIxMSAqLworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDEpOworfQorCitzdGF0aWMgaW50IG13bDhrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgbWFuYWdlZCBpbnRlcmZhY2VzIGZvciBub3cuCisJICovCisJaWYgKGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2xlYW4gb3V0IGRyaXZlciBwcml2YXRlIGFyZWEgKi8KKwltd2w4a192aWYgPSBNV0w4S19WSUYoY29uZi0+dmlmKTsKKwltZW1zZXQobXdsOGtfdmlmLCAwLCBzaXplb2YoKm13bDhrX3ZpZikpOworCisJLyogU2F2ZSB0aGUgbWFjIGFkZHJlc3MgKi8KKwltZW1jcHkobXdsOGtfdmlmLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwkvKiBCYWNrIHBvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLworCW13bDhrX3ZpZi0+cHJpdiA9IHByaXY7CisKKwkvKiBTZXR1cCBpbml0aWFsIFBIWSBwYXJhbWV0ZXJzICovCisJbWVtY3B5KG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzICwKKwkJcHJpdi0+cmF0ZXMsIHNpemVvZihtd2w4a192aWYtPmxlZ2FjeV9yYXRlcykpOworCW13bDhrX3ZpZi0+bGVnYWN5X25yYXRlcyA9IEFSUkFZX1NJWkUocHJpdi0+cmF0ZXMpOworCisJLyogU2V0IEluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8gKi8KKwltd2w4a192aWYtPnNlcW5vID0gMDsKKworCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmIChwcml2LT52aWYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHJpdi0+dmlmID0gTlVMTDsKK30KKworc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTMyIGNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZ193dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKKwkJbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwkJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gTlVMTDsKKwkJcmMgPSAwOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisKKwlpZiAobXdsOGtfY21kX3NldF9yZl9jaGFubmVsKGh3LCBjb25mLT5jaGFubmVsKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKGNvbmYtPnBvd2VyX2xldmVsID4gMTgpCisJCWNvbmYtPnBvd2VyX2xldmVsID0gMTg7CisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIoaHcsIGNvbmYtPnBvd2VyX2xldmVsKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF9taW1vX2NvbmZpZyhodywgMHg3LCAweDcpKQorCQlyYyA9IC1FSU5WQUw7CisKK213bDhrX2NvbmZpZ19leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCWludCByYyA9IDA7CisJc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPmNoYW5nZWQgPSBjaGFuZ2VkOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19jb25maWdfd3QpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXQuXG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZSh3b3JrZXIpOworCisJLyoKKwkgKiBtYWM4MDIxMSB3aWxsIGNyYXNoIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gLUVJTlZBTCBvbgorCSAqIGVycm9yLiBMb29rcyBsaWtlIHdpcmVsZXNzIGV4dGVuc2lvbnMgd2hpY2ggY2FsbHMgbWFjODAyMTEKKwkgKiBtYXkgYmUgdGhlIGFjdHVhbCBjdWxwcml0Li4uCisJICovCisJcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJdTMyIGNoYW5nZWQgPSBjb25mLT5jaGFuZ2VkOworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CU1NJRCkKKwkJbWVtY3B5KG12X3ZpZi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm87CisJdTMyIGNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSB3b3JrZXItPnZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gd29ya2VyLT5pbmZvOworCXUzMiBjaGFuZ2VkOworCWludCByYzsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7CisKKwljaGFuZ2VkID0gd29ya2VyLT5jaGFuZ2VkOworCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7CisKKwlpZiAoaW5mby0+YXNzb2MpIHsKKwkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKworCQkvKiBJbnN0YWxsIHJhdGVzICovCisJCWlmIChtd2w4a191cGRhdGVfcmF0ZXNldChodywgdmlmKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFR1cm4gb24gcmF0ZSBhZGFwdGF0aW9uICovCisJCWlmIChtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoaHcsIE1XTDhLX1VTRV9BVVRPX1JBVEUsCisJCQlNV0w4S19VQ0FTVF9SQVRFLCBOVUxMKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFNldCByYWRpbyBwcmVhbWJsZSAqLworCQlpZiAobXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LAorCQkJCWluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBTZXQgc2xvdCB0aW1lICovCisJCWlmIChtd2w4a19jbWRfc2V0X3Nsb3QoaHcsIGluZm8tPnVzZV9zaG9ydF9zbG90ID8KKwkJCQlNV0w4S19TSE9SVF9TTE9UVElNRSA6IE1XTDhLX0xPTkdfU0xPVFRJTUUpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogVXBkYXRlIHBlZXIgcmF0ZSBpbmZvICovCisJCWlmIChtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLAorCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogU2V0IEFJRCAqLworCQlpZiAobXdsOGtfY21kX3NldF9haWQoaHcsIHZpZikpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKgorCQkgKiBGaW5hbGl6ZSB0aGUgam9pbi4gIFRlbGwgcnggaGFuZGxlciB0byBwcm9jZXNzCisJCSAqIG5leHQgYmVhY29uIGZyb20gb3VyIEJTU0lELgorCQkgKi8KKwkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsCisJCQkJbXdsOGtfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSB0cnVlOworCX0gZWxzZSB7CisJCW13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkpOworCQltZW1zZXQoJm13bDhrX3ZpZi0+YnNzX2luZm8sIDAsCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOworCQltZW1zZXQobXdsOGtfdmlmLT5ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwl9CisKK213bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDoKKwlyYyA9IDA7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJCQkgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYzsKKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSA9PSAwKQorCQlyZXR1cm47CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3b3JrZXItPnZpZiA9IHZpZjsKKwl3b3JrZXItPmluZm8gPSBpbmZvOworCXdvcmtlci0+Y2hhbmdlZCA9IGNoYW5nZWQ7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsCisJCQkgICAgICBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzOworCWludCBtY19jb3VudDsKKwlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0OworfTsKKworI2RlZmluZSBNV0w4S19TVVBQT1JURURfSUZfRkxBR1MJRklGX0JDTl9QUkJSRVNQX1BST01JU0MKKworc3RhdGljIGludCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzID0gd29ya2VyLT5jaGFuZ2VkX2ZsYWdzOworCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MgPSB3b3JrZXItPnRvdGFsX2ZsYWdzOworCWludCBtY19jb3VudCA9IHdvcmtlci0+bWNfY291bnQ7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCA9IHdvcmtlci0+bWNsaXN0OworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWY7CisJaW50IHJjID0gMDsKKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQorCQkJcmMgPSBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKKwkJZWxzZSB7CisJCQltdl92aWYgPSBNV0w4S19WSUYocHJpdi0+dmlmKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsIG12X3ZpZi0+YnNzaWQpOworCQl9CisJfQorCisJaWYgKHJjKQorCQlnb3RvIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfZXhpdDsKKwlpZiAobWNfY291bnQpIHsKKwkJbWNfY291bnQgPSBtY19jb3VudCA8IHByaXYtPm51bV9tY2FkZHJzID8KKwkJCQltY19jb3VudCA6IHByaXYtPm51bV9tY2FkZHJzOworCQlyYyA9IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkcihodywgbWNfY291bnQsIG1jbGlzdCk7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzKClFcnJvciBzZXR0aW5nIG11bHRpY2FzdCBhZGRyZXNzZXNcbiIsCisJCQlfX2Z1bmNfXyk7CisJfQorCittd2w4a19jb25maWd1cmVfZmlsdGVyX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJICAgaW50IG1jX2NvdW50LAorCQkJCSAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisKKwlzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJLyogQ2xlYXIgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmbGFncyAqLworCSp0b3RhbF9mbGFncyAmPSBNV0w4S19TVVBQT1JURURfSUZfRkxBR1M7CisKKwlpZiAoIShjaGFuZ2VkX2ZsYWdzICYgTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTKSAmJiAhbWNfY291bnQpCisJCXJldHVybjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfQVRPTUlDKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybjsKKworCXdvcmtlci0+aGVhZGVyLm9wdGlvbnMgPSBNV0w4S19XUV9RVUVVRV9PTkxZIHwgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWTsKKwl3b3JrZXItPmNoYW5nZWRfZmxhZ3MgPSBjaGFuZ2VkX2ZsYWdzOworCXdvcmtlci0+dG90YWxfZmxhZ3MgPSB0b3RhbF9mbGFnczsKKwl3b3JrZXItPm1jX2NvdW50ID0gbWNfY291bnQ7CisJd29ya2VyLT5tY2xpc3QgPSBtY2xpc3Q7CisKKwltd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsIHByaXYtPmNvbmZpZ193cSwKKwkJCSBtd2w4a19jb25maWd1cmVfZmlsdGVyX3d0KTsKK30KKworc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MzIgdmFsdWU7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKil3dDsKKworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJdTE2IHRocmVzaG9sZCA9ICh1MTYpKHdvcmtlci0+dmFsdWUpOworCWludCByYzsKKworCXJjID0gbXdsOGtfcnRzX3RocmVzaG9sZChodywgTVdMOEtfQ01EX1NFVCwgJnRocmVzaG9sZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+dmFsdWUgPSB2YWx1ZTsKKworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLAorCQkJICAgICAgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd3QpOworCWtmcmVlKHdvcmtlcik7CisKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MTYgcXVldWU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtczsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZl90eF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyID0KKwkoc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXUxNiBxdWV1ZSA9IHdvcmtlci0+cXVldWU7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyA9IHdvcmtlci0+cGFyYW1zOworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJaWYgKHByaXYtPndtbV9tb2RlID09IE1XTDhLX1dNTV9ESVNBQkxFKQorCQlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0VOQUJMRSkpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gbXdsOGtfY29uZl90eF9leGl0OworCX0KKworCWlmIChtd2w4a19zZXRfZWRjYV9wYXJhbXMoaHcsIEdFVF9UWFEocXVldWUpLCBwYXJhbXMtPmN3X21pbiwKKwkJcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKSkKKwkJCXJjID0gLUVJTlZBTDsKK213bDhrX2NvbmZfdHhfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+cXVldWUgPSBxdWV1ZTsKKwl3b3JrZXItPnBhcmFtcyA9IHBhcmFtczsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfY29uZl90eF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CisJaW50IGluZGV4OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNV0w4S19UWF9RVUVVRVM7IGluZGV4KyspIHsKKwkJdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisJCW1lbWNweSgmc3RhdHNbaW5kZXhdLCAmdHhxLT50eF9zdGF0cywKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzOworfTsKKworc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHNfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICopd3Q7CisKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCh3b3JrZXItPmhlYWRlci5odywgd29ya2VyLT5zdGF0cyk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+c3RhdHMgPSBzdGF0czsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfZ2V0X3N0YXRzX3d0KTsKKworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsOGtfb3BzID0geworCS50eAkJCT0gbXdsOGtfdHgsCisJLnN0YXJ0CQkJPSBtd2w4a19zdGFydCwKKwkuc3RvcAkJCT0gbXdsOGtfc3RvcCwKKwkuYWRkX2ludGVyZmFjZQkJPSBtd2w4a19hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gbXdsOGtfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSBtd2w4a19jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UJPSBtd2w4a19jb25maWdfaW50ZXJmYWNlLAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gbXdsOGtfYnNzX2luZm9fY2hhbmdlZCwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF9ydHNfdGhyZXNob2xkCT0gbXdsOGtfc2V0X3J0c190aHJlc2hvbGQsCisJLmNvbmZfdHgJCT0gbXdsOGtfY29uZl90eCwKKwkuZ2V0X3R4X3N0YXRzCQk9IG13bDhrX2dldF90eF9zdGF0cywKKwkuZ2V0X3N0YXRzCQk9IG13bDhrX2dldF9zdGF0cywKK307CisKK3N0YXRpYyB2b2lkIG13bDhrX3R4X3JlY2xhaW1faGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKSBkYXRhOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDApOworCisJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkgeworCQlpbnQgY291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOworCQkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG13bDhrX3ByaXYsIGZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+YmVhY29uX3NrYjsKKwl1OCBkdGltID0gKE1XTDhLX1ZJRihwcml2LT52aWYpKS0+YnNzX2luZm8uZHRpbV9wZXJpb2Q7CisKKwltd2w4a19maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBkdGltKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlwcml2LT5iZWFjb25fc2tiID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXdsOGtfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlpbnQgcmM7CisJaW50IGk7CisJdTggKmZ3OworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIiwKKwkJICAgICAgIE1XTDhLX05BTUUpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIE1XTDhLX05BTUUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBNV0w4S19OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJm13bDhrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIiwgTVdMOEtfTkFNRSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9yZWc7CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisJcHJpdi0+cGRldiA9IHBkZXY7CisJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwlwcml2LT50eF93YWl0ID0gTlVMTDsKKwlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOworCXByaXYtPndlcF9lbmFibGVkID0gMDsKKwlwcml2LT53bW1fbW9kZSA9IGZhbHNlOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cyA9IDA7CisJc3RybmNweShwcml2LT5uYW1lLCBNV0w4S19OQU1FLCBzaXplb2YocHJpdi0+bmFtZSkpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmZ3X2xvY2spOworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisKKwlwcml2LT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDEsIDB4MTAwMDApOworCWlmIChwcml2LT5yZWdzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIG13bDhrX2NoYW5uZWxzLCBzaXplb2YobXdsOGtfY2hhbm5lbHMpKTsKKwlwcml2LT5iYW5kLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCXByaXYtPmJhbmQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKwlwcml2LT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13bDhrX2NoYW5uZWxzKTsKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gcHJpdi0+cmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShtd2w4a19yYXRlcyk7CisJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlcykgIT0gc2l6ZW9mKG13bDhrX3JhdGVzKSk7CisJbWVtY3B5KHByaXYtPnJhdGVzLCBtd2w4a19yYXRlcywgc2l6ZW9mKG13bDhrX3JhdGVzKSk7CisKKwkvKgorCSAqIEV4dHJhIGhlYWRyb29tIGlzIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBETUEgaGVhZGVyCisJICogbWludXMgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IDgwMi4xMSBmcmFtZSAoQ1RTIGZyYW1lKS4KKwkgKi8KKwlody0+ZXh0cmFfdHhfaGVhZHJvb20gPQorCQlzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2N0cyk7CisKKwlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwOworCisJaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOworCisJLyogU2V0IHJzc2kgYW5kIG5vaXNlIHZhbHVlcyB0byBkQm0gKi8KKwlody0+ZmxhZ3MgfD0gKElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTSk7CisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG13bDhrX3ZpZik7CisJcHJpdi0+dmlmID0gTlVMTDsKKworCS8qIFNldCBkZWZhdWx0IHJhZGlvIHN0YXRlIGFuZCBwcmVhbWJsZSAqLworCXByaXYtPnJhZGlvX3ByZWFtYmxlID0gTVdMOEtfUkFESU9fREVGQVVMVF9QUkVBTUJMRTsKKwlwcml2LT5yYWRpb19zdGF0ZSA9IE1XTDhLX1JBRElPX0RJU0FCTEU7CisKKwkvKiBGaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCUlOSVRfV09SSygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIsIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKTsKKworCS8qIFRYIHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfaW5pdCgmcHJpdi0+dHhfcmVjbGFpbV90YXNrLAorCQkJbXdsOGtfdHhfcmVjbGFpbV9oYW5kbGVyLCAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogQ29uZmlnIHdvcmt0aHJlYWQgKi8KKwlwcml2LT5jb25maWdfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibXdsOGtfY29uZmlnIik7CisJaWYgKHByaXYtPmNvbmZpZ193cSA9PSBOVUxMKQorCQlnb3RvIGVycl9pb3VubWFwOworCisJLyogUG93ZXIgbWFuYWdlbWVudCBjb29raWUgKi8KKwlwcml2LT5jb29raWUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LCAmcHJpdi0+Y29va2llX2RtYSk7CisJaWYgKHByaXYtPmNvb2tpZSA9PSBOVUxMKQorCQlnb3RvIGVycl9pb3VubWFwOworCisJcmMgPSBtd2w4a19yeHFfaW5pdChodywgMCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9pb3VubWFwOworCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7CisJCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJcHJpdi0+aW50X21hc2sgPSAwOworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKKwlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKKworCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmbXdsOGtfaW50ZXJydXB0LAorCQkJIElSUUZfU0hBUkVELCBNV0w4S19OQU1FLCBodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwkvKiBSZXNldCBmaXJtd2FyZSBhbmQgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIEFzayB1c2VybGFuZCBob3RwbHVnIGRhZW1vbiBmb3IgdGhlIGRldmljZSBmaXJtd2FyZSAqLworCXJjID0gbXdsOGtfcmVxdWVzdF9maXJtd2FyZShwcml2LCAodTMyKWlkLT5kcml2ZXJfZGF0YSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGZpbGVzIG5vdCBmb3VuZFxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLworCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShwcml2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHN0YXJ0IGZpcm13YXJlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBSZWNsYWltIG1lbW9yeSBvbmNlIGZpcm13YXJlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgKi8KKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBlbmFibGUgaW50ZXJydXB0cy4gIEluaXRpYWwgZmlybXdhcmUgaG9zdAorCSAqIGNvbW1hbmRzIHVzZSBpbnRlcnJ1cHRzIGFuZCBhdm9pZHMgcG9sbGluZy4gIERpc2FibGUKKwkgKiBpbnRlcnJ1cHRzIHdoZW4gZG9uZS4KKwkgKi8KKwlwcml2LT5pbnRfbWFzayB8PSBNV0w4S19BMkhfRVZFTlRTOworCisJaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisKKwkvKiBHZXQgY29uZmlnIGRhdGEsIG1hYyBhZGRycyBldGMgKi8KKwlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlYyhodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBpbml0aWFsaXNlIGZpcm13YXJlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBUdXJuIHJhZGlvIG9mZiAqLworCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGRpc2FibGVcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworCXJjID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJZncgPSAodTggKikmcHJpdi0+ZndfcmV2OworCXByaW50ayhLRVJOX0lORk8gIiVzOiA4OFcldSAlc1xuIiwgcHJpdi0+bmFtZSwgcHJpdi0+cGFydF9udW0sCisJCU1XTDhLX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgVmVyOiVzICBGaXJtd2FyZSBWZXI6JXUuJXUuJXUuJXVcbiIsCisJCXByaXYtPm5hbWUsIE1XTDhLX1ZFUlNJT04sIGZ3WzNdLCBmd1syXSwgZndbMV0sIGZ3WzBdKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogTUFDIEFkZHJlc3M6ICVzXG4iLCBwcml2LT5uYW1lLAorCSAgICAgICBwcmludF9tYWMobWFjLCBody0+d2lwaHktPnBlcm1fYWRkcikpOworCisJcmV0dXJuIDA7CisKK2Vycl9zdG9wX2Zpcm13YXJlOgorCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CisKK2Vycl9mcmVlX2lycToKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKK2Vycl9mcmVlX3F1ZXVlczoKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCitlcnJfaW91bm1hcDoKKwlpZiAocHJpdi0+Y29va2llICE9IE5VTEwpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKKwkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOworCisJaWYgKHByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CisKKwlpZiAocHJpdi0+Y29uZmlnX3dxICE9IE5VTEwpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCitlcnJfZnJlZV9yZWc6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtd2w4a19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICI9PT0+JXMoJXUpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXdsOGtfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJaW50IGk7CisKKwlpZiAoaHcgPT0gTlVMTCkKKwkJcmV0dXJuOworCXByaXYgPSBody0+cHJpdjsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwkvKiBSZW1vdmUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9raWxsKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogU3RvcCBjb25maWcgdGhyZWFkICovCisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCS8qIFN0b3AgaGFyZHdhcmUgKi8KKwltd2w4a19od19yZXNldChwcml2KTsKKworCS8qIFJldHVybiBhbGwgc2ticyB0byBtYWM4MDIxMSAqLworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDEpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKKworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LAorCQkJCXByaXYtPmNvb2tpZSwgcHJpdi0+Y29va2llX2RtYSk7CisKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXdsOGtfZHJpdmVyID0geworCS5uYW1lCQk9IE1XTDhLX05BTUUsCisJLmlkX3RhYmxlCT0gbXdsOGtfdGFibGUsCisJLnByb2JlCQk9IG13bDhrX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXdsOGtfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBfX2RldmV4aXRfcChtd2w4a19zaHV0ZG93biksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtd2w4a19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm13bDhrX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtd2w4a19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtd2w4a19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtd2w4a19pbml0KTsKK21vZHVsZV9leGl0KG13bDhrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCmluZGV4IDI0Y2FlYzYuLmQ2M2M4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTIxMCwxMCArMjEwLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR3YXZlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgbmV0d2F2ZV93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotLyogU3RhdGlzdGljcyAqLwotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR3YXZlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQogLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzKiBuZXR3YXZlX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApAQCAtMjc1LDE0ICsyNzEsOSBAQAogICAgIGludCAgICAgICAgbGFzdEV4ZWM7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICB3YXRjaGRvZzsJLyogVG8gYXZvaWQgYmxvY2tpbmcgc3RhdGUgKi8KICAgICBzdHJ1Y3Qgc2l0ZV9zdXJ2ZXkgICAgIG5zczsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAgIGl3X3N0YXRzOyAgICAvKiBXaXJlbGVzcyBzdGF0cyAqLwogfSBuZXR3YXZlX3ByaXZhdGU7CiAKLSNpZmRlZiBORVRXQVZFX1NUQVRTCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHdhdmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCi0KIC8qCiAgKiBUaGUgTmV0d2F2ZSBjYXJkIGlzIGxpdHRsZS1lbmRpYW4sIHNvIHdvbid0IHdvcmsgZm9yIGJpZyBlbmRpYW4KICAqIHN5c3RlbXMuCkBAIC0zNjQsNiArMzU1LDE3IEBACiAgICAgcmV0dXJuICZwcml2LT5pd19zdGF0czsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXR3YXZlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAJPSBuZXR3YXZlX29wZW4sCisJLm5kb19zdG9wCQk9IG5ldHdhdmVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5ldHdhdmVfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbmV0d2F2ZV93YXRjaGRvZywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIG5ldHdhdmVfYXR0YWNoICh2b2lkKQogICoKQEAgLTQxMiwxNyArNDE0LDEyIEBACiAgICAgc3Bpbl9sb2NrX2luaXQoJnByaXYtPnNwaW5sb2NrKTsKIAogICAgIC8qIE5ldHdhdmUgc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJm5ldHdhdmVfc3RhcnRfeG1pdDsKLSAgICBkZXYtPmdldF9zdGF0cyAgPSAmbmV0d2F2ZV9nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZuZXR3YXZlX25ldGRldl9vcHM7CiAgICAgLyogd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwotICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm5ldHdhdmVfaGFuZGxlcl9kZWY7CisgICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZuZXR3YXZlX2hhbmRsZXJfZGVmOwogCi0gICAgZGV2LT50eF90aW1lb3V0ID0gJm5ldHdhdmVfd2F0Y2hkb2c7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKLSAgICBkZXYtPm9wZW4gPSAmbmV0d2F2ZV9vcGVuOwotICAgIGRldi0+c3RvcCA9ICZuZXR3YXZlX2Nsb3NlOwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogICAgIHJldHVybiBuZXR3YXZlX3BjbWNpYV9jb25maWcoIGxpbmspOwpAQCAtOTg4LDcgKzk4NSw3IEBACiAJcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworICAgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwogCiAgICAgREVCVUcoMywgIlRyYW5zbWl0dGluZyB3aXRoIFNQQ1EgJXggU1BVICV4IExJRiAleCBJU1BMUSAleFxuIiwKIAkgIHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCkBAIC0xMTA3LDExICsxMTA0LDExIEBACiAJICAgIHJzZXIgPSByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1JTRVIpOwkJCQogCSAgICAKIAkgICAgaWYgKHJzZXIgJiAweDA0KSB7Ci0JCSsrcHJpdi0+c3RhdHMucnhfZHJvcHBlZDsgCi0JCSsrcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJCSsrZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzOwogCSAgICB9CiAJICAgIGlmIChyc2VyICYgMHgwMikKLQkJKytwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CiAJCQkKIAkgICAgLyogQ2xlYXIgdGhlIFJ4RXJyIGJpdCBpbiBSU0VSLiBSU0VSKzQgaXMgdGhlCiAJICAgICAqIHdyaXRlIHBhcnQuIEFsc28gY2xlYXIgdGhlIFJ4Q1JDICgweDA0KSBhbmQgCkBAIC0xMTI1LDggKzExMjIsOCBAQAogCSAgICB3YWl0X1dPQyhpb2Jhc2UpOwogCSAgICB3cml0ZWIoMHg0MCwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19BU0NDKTsKIAotCSAgICAvKiBSZW1lbWJlciB0byBjb3VudCB1cCBwcml2LT5zdGF0cyBvbiBlcnJvciBwYWNrZXRzICovCi0JICAgICsrcHJpdi0+c3RhdHMucnhfZXJyb3JzOworCSAgICAvKiBSZW1lbWJlciB0byBjb3VudCB1cCBkZXYtPnN0YXRzIG9uIGVycm9yIHBhY2tldHMgKi8KKwkgICAgKytkZXYtPnN0YXRzLnJ4X2Vycm9yczsKIAl9CiAJLyogVHhETiAqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CkBAIC0xMTQwLDE3ICsxMTM3LDE3IEBACiAJCS8qIFRyYW5zbWl0dGluZyB3YXMgb2theSwgY2xlYXIgYml0cyAqLwogCQl3YWl0X1dPQyhpb2Jhc2UpOwogCQl3cml0ZWIoMHgyZiwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19UU0VSICsgNCk7Ci0JCSsrcHJpdi0+c3RhdHMudHhfcGFja2V0czsKKwkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CiAJICAgIH0KIAkJCQogCSAgICBpZiAodHhTdGF0dXMgJiAweGQwKSB7CiAJCWlmICh0eFN0YXR1cyAmIDB4ODApIHsKLQkJICAgICsrcHJpdi0+c3RhdHMuY29sbGlzaW9uczsgLyogQmVjYXVzZSBvZiAvcHJvYy9uZXQvZGV2Ki8KLQkJICAgIC8qICsrcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnM7ICovCisJCSAgICArK2Rldi0+c3RhdHMuY29sbGlzaW9uczsgLyogQmVjYXVzZSBvZiAvcHJvYy9uZXQvZGV2Ki8KKwkJICAgIC8qICsrZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9yczsgKi8KIAkJICAgIC8qIHByaW50aygiQ29sbGlzaW9uLiAlbGRcbiIsIGppZmZpZXMgLSBkZXYtPnRyYW5zX3N0YXJ0KTsgKi8KIAkJfQogCQlpZiAodHhTdGF0dXMgJiAweDQwKSAKLQkJICAgICsrcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CisJCSAgICArK2Rldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CiAJCS8qIDB4ODAgVHhHVSBUcmFuc21pdCBnaXZldXAgLSBuaW5lIHRpbWVzIGFuZCBubyBsdWNrCiAJCSAqIDB4NDAgVHhOT0FQIE5vIGFjY2VzcyBwb2ludC4gRGlzY2FyZGVkIHBhY2tldC4KIAkJICogMHgxMCBUeEVyciBUcmFuc21pdCBlcnJvci4gQWx3YXlzIHNldCB3aGVuIApAQCAtMTE2Myw3ICsxMTYwLDcgQEAKIAkJLyogQ2xlYXIgb3V0IFR4R1UsIFR4Tk9BUCwgVHhFcnIgYW5kIFR4VHJ5cyAqLwogCQl3YWl0X1dPQyhpb2Jhc2UpOwogCQl3cml0ZWIoMHhkZiAmIHR4U3RhdHVzLCByYW1CYXNlK05FVFdBVkVfRVJFR19UU0VSKzQpOwotCQkrK3ByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnR4X2Vycm9yczsKIAkgICAgfQogCSAgICBERUJVRygzLCAiTmV3IHN0YXR1cyBpcyBUU0VSICV4IEFTUiAleFxuIiwKIAkJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1RTRVIpLApAQCAtMTE5Nyw0MCArMTE5NCw2IEBACiAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfSAvKiBuZXR3YXZlX3dhdGNoZG9nICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0d2F2ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLSAgICB1cGRhdGVfc3RhdHMoZGV2KTsKLQotICAgIERFQlVHKDIsICJuZXR3YXZlOiBTUENRICV4IFNQVSAleCBMSUYgJXggSVNQTFEgJXggTUhTICV4IHJ4dHggJXgiCi0JICAiICV4IHR4ICV4ICV4ICV4ICV4XG4iLCAKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQVSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0xJRiksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0lTUExRKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfTUhTKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweGUpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4ZiksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxOCksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxOSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxYSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHgxYikpOwotCi0gICAgcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICAvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0vKiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsgKi8KLQotICAgIC8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci0KLS8qICAgIHByaXYtPnN0YXRzLnJ4X3BhY2tldHMgPSByZWFkYihwcml2LT5yYW1CYXNlICsgMHgxOGUpOyAKLSAgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzID0gcmVhZGIocHJpdi0+cmFtQmFzZSArIDB4MThmKTsgKi8KLQotICAgIC8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBuZXR3YXZlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyNzQsNyArMTIzNyw3IEBACiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJICAgIERFQlVHKDEsICJuZXR3YXZlX3J4OiBDb3VsZCBub3QgYWxsb2NhdGUgYW4gc2tfYnVmZiBvZiAiCiAJCSAgImxlbmd0aCAlZFxuIiwgcmN2TGVuKTsKLQkgICAgKytwcml2LT5zdGF0cy5yeF9kcm9wcGVkOyAKKwkgICAgKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CiAJICAgIC8qIFRlbGwgdGhlIGFkYXB0ZXIgdG8gc2tpcCB0aGUgcGFja2V0ICovCiAJICAgIHdhaXRfV09DKGlvYmFzZSk7CiAJICAgIHdyaXRlYihORVRXQVZFX0NNRF9TUlAsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfQ0IgKyAwKTsKQEAgLTEzMDcsOCArMTI3MCw4IEBACiAJLyogUXVldWUgcGFja2V0IGZvciBuZXR3b3JrIGxheWVyICovCiAJbmV0aWZfcngoc2tiKTsKIAotCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSByY3ZMZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByY3ZMZW47CiAKIAkvKiBHb3QgdGhlIHBhY2tldCwgdGVsbCB0aGUgYWRhcHRlciB0byBza2lwIGl0ICovCiAJd2FpdF9XT0MoaW9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQxMWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnCkBAIC0wLDAgKzEsMTIwIEBACitjb25maWcgSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKKwlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciA4MDIuMTFiIHdpcmVsZXNzIGNhcmRzIGJhc2VkIG9uIHRoZSAiSGVybWVzIiBvcgorCSAgSW50ZXJzaWwgSEZBMzg0eCAoUHJpc20gMikgTUFDIGNvbnRyb2xsZXIuICBUaGlzIGluY2x1ZGVzIHRoZSB2YXN0CisJICBtYWpvcml0eSBvZiB0aGUgUENNQ0lBIDgwMi4xMWIgY2FyZHMgKHdoaWNoIGFyZSBuZWFybHkgYWxsIHJlYmFkZ2VzKQorCSAgLSBleGNlcHQgZm9yIHRoZSBDaXNjby9BaXJvbmV0IGNhcmRzLiAgQ2FyZHMgc3VwcG9ydGVkIGluY2x1ZGUgdGhlCisJICBBcHBsZSBBaXJwb3J0IChub3QgYSBQQ01DSUEgY2FyZCksIFdhdmVsYW5JRUVFL09yaW5vY28sCisJICBDYWJsZXRyb24vRW50ZXJhU3lzIFJvYW1hYm91dCwgRUxTQSBBaXJMYW5jZXIsIE1FTENPIEJ1ZmZhbG8sIEF2YXlhLAorCSAgSUJNIEhpZ2ggUmF0ZSBXaXJlbGVzcywgRmFycmFsb24gU3l5bGluZSwgU2Ftc3VuZyBNYWdpY0xBTiwgTmV0Z2VhcgorCSAgTUE0MDEsIExpbmtTeXMgV1BDLTExLCBELUxpbmsgRFdMLTY1MCwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbAorCSAgSVBXMjAxMSwgYW5kIFN5bWJvbCBTcGVjdHJ1bTI0IEhpZ2ggUmF0ZSBhbW9uZ3N0IG90aGVycy4KKworCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdGhlIGd1dHMgb2YgdGhlIGRyaXZlciwgYnV0IGluIG9yZGVyIHRvCisJICBhY3R1YWxseSB1c2UgYSBjYXJkIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBCisJICBIZXJtZXMgY2FyZHMsIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzIG9yIHRoZSBBcHBsZSBBaXJwb3J0IGJlbG93LgorCisJICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IGFsc28gbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KKwkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrcyA6CisJICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPgorCitjb25maWcgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKKwlib29sICJDYWNoZSBIZXJtZXMgZmlybXdhcmUgb24gZHJpdmVyIGluaXRpYWxpc2F0aW9uIgorCWRlcGVuZHMgb24gSEVSTUVTCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgU2F5IFkgdG8gY2FjaGUgYW55IGZpcm13YXJlIHJlcXVpcmVkIGJ5IHRoZSBIZXJtZXMgZHJpdmVycworCSAgb24gc3RhcnR1cC4gIFRoZSBmaXJtd2FyZSB3aWxsIHJlbWFpbiBjYWNoZWQgdW50aWwgdGhlCisJICBkcml2ZXIgaXMgdW5sb2FkZWQuICBUaGUgY2FjaGUgdXNlcyA2NEsgb2YgUkFNLgorCisJICBPdGhlcndpc2UgbG9hZCB0aGUgZmlybXdhcmUgZnJvbSB1c2Vyc3BhY2UgYXMgcmVxdWlyZWQuICBJbgorCSAgdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHVubG9hZGVkIGFuZCByZXN0YXJ0ZWQKKwkgIHdoZW5ldmVyIHRoZSBmaXJtd2FyZSBpcyBjaGFuZ2VkLgorCisJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgWS4KKworY29uZmlnIEFQUExFX0FJUlBPUlQKKwl0cmlzdGF0ZSAiQXBwbGUgQWlycG9ydCBzdXBwb3J0IChidWlsdC1pbikiCisJZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBIRVJNRVMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFpcnBvcnQgODAyLjExYiB3aXJlbGVzcyBFdGhlcm5ldCBoYXJkd2FyZQorCSAgYnVpbHQgaW50byB0aGUgTWFjaW50b3NoIGlCb29rIGFuZCBvdGhlciByZWNlbnQgUG93ZXJQQy1iYXNlZAorCSAgTWFjaW50b3NoIG1hY2hpbmVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgTHVjZW50IE9yaW5vY28gY2FyZCB3aXRoCisJICBhIG5vbi1zdGFuZGFyZCBpbnRlcmZhY2UuCisKKwkgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIEFpcnBvcnQgRXh0cmVtZSAoODAyLjExYi9nKS4gVXNlCisJICB0aGUgQkNNNDN4eCBkcml2ZXIgZm9yIEFpcnBvcnQgRXh0cmVtZSBjYXJkcy4KKworY29uZmlnIFBMWF9IRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIGluIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCAoTmV0Z2VhciBNQTMwMSBldGMuKSIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQorCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCisJICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCisJICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKKwkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuICBUaGUgTmV0Z2VhcgorCSAgTUEzMDEgaXMgc3VjaCBhbiBhZGFwdG9yLgorCitjb25maWcgVE1EX0hFUk1FUworCXRyaXN0YXRlICJIZXJtZXMgaW4gVE1ENzE2MCBiYXNlZCBQQ0kgYWRhcHRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoZSAiSGVybWVzIiAoYWthCisJICBvcmlub2NvKSBkcml2ZXIgd2hlbiB1c2VkIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3JzLiAgVGhlc2UKKwkgIGFkYXB0b3JzIGFyZSBub3QgYSBmdWxsIFBDTUNJQSBjb250cm9sbGVyIGJ1dCBhY3QgYXMgYSBtb3JlIGxpbWl0ZWQKKwkgIFBDSSA8LT4gUENNQ0lBIGJyaWRnZS4gIFNldmVyYWwgdmVuZG9ycyBzZWxsIHN1Y2ggYWRhcHRvcnMgc28gdGhhdAorCSAgODAyLjExYiBQQ01DSUEgY2FyZHMgY2FuIGJlIHVzZWQgaW4gZGVza3RvcCBtYWNoaW5lcy4KKworY29uZmlnIE5PUlRFTF9IRVJNRVMKKwl0cmlzdGF0ZSAiTm9ydGVsIGVtb2JpbGl0eSBQQ0kgYWRhcHRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoZSAiSGVybWVzIiAoYWthCisJICBvcmlub2NvKSBkcml2ZXIgd2hlbiB1c2VkIGluIE5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3JzLiAgVGhlc2UKKwkgIGFkYXB0b3JzIGFyZSBub3QgZnVsbCBQQ01DSUEgY29udHJvbGxlcnMsIGJ1dCBhY3QgYXMgYSBtb3JlIGxpbWl0ZWQKKwkgIFBDSSA8LT4gUENNQ0lBIGJyaWRnZS4KKworY29uZmlnIFBDSV9IRVJNRVMKKwl0cmlzdGF0ZSAiUHJpc20gMi41IFBDSSA4MDIuMTFiIGFkYXB0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENJIGFuZCBtaW5pLVBDSSA4MDIuMTFiIHdpcmVsZXNzIE5JQ3MgYmFzZWQgb24KKwkgIHRoZSBQcmlzbSAyLjUgY2hpcHNldC4gIFRoZXNlIGFyZSB0cnVlIFBDSSBjYXJkcywgbm90IHRoZSA4MDIuMTFiCisJICBQQ01DSUEgY2FyZHMgYnVuZGxlZCB3aXRoIFBDSTwtPlBDTUNJQSBhZGFwdG9ycyB3aGljaCBhcmUgYWxzbworCSAgY29tbW9uLiAgU29tZSBvZiB0aGUgYnVpbHQtaW4gd2lyZWxlc3MgYWRhcHRvcnMgaW4gbGFwdG9wcyBhcmUgb2YKKwkgIHRoaXMgdmFyaWV0eS4KKworY29uZmlnIFBDTUNJQV9IRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIFBDTUNJQSBjYXJkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgSEVSTUVTCisJLS0taGVscC0tLQorCSAgQSBkcml2ZXIgZm9yICJIZXJtZXMiIGNoaXBzZXQgYmFzZWQgUENNQ0lBIHdpcmVsZXNzIGFkYXB0b3JzLCBzdWNoCisJICBhcyB0aGUgTHVjZW50IFdhdmVsYW5JRUVFL09yaW5vY28gY2FyZHMgYW5kIHRoZWlyIE9FTSAoQ2FibGV0cm9uLworCSAgRW50ZXJhU3lzIFJvYW1BYm91dCA4MDIuMTEsIEVMU0EgQWlybGFuY2VyLCBNZWxjbyBCdWZmYWxvIGFuZAorCSAgb3RoZXJzKS4gIEl0IHNob3VsZCBhbHNvIGJlIHVzYWJsZSBvbiB2YXJpb3VzIFByaXNtIElJIGJhc2VkIGNhcmRzCisJICBzdWNoIGFzIHRoZSBMaW5rc3lzLCBELUxpbmsgYW5kIEZhcmFsbG9uIFNreWxpbmUuICBJdCBzaG91bGQgYWxzbworCSAgd29yayBvbiBTeW1ib2wgY2FyZHMgc3VjaCBhcyB0aGUgM0NvbSBBaXJDb25uZWN0IGFuZCBFcmljc3NvbiBXTEFOLgorCisJICBZb3Ugd2lsbCB2ZXJ5IGxpa2VseSBuZWVkIHRoZSBXaXJlbGVzcyBUb29scyBpbiBvcmRlciB0bworCSAgY29uZmlndXJlIHlvdXIgY2FyZCBhbmQgdGhhdCAvZXRjL3BjbWNpYS93aXJlbGVzcy5vcHRzIHdvcmtzOgorCSAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4uCisKK2NvbmZpZyBQQ01DSUFfU1BFQ1RSVU0KKwl0cmlzdGF0ZSAiU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSBQQ01DSUEgY2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUworCS0tLWhlbHAtLS0KKworCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgODAyLjExYiBjYXJkcyB1c2luZyBSQU0tbG9hZGFibGUgU3ltYm9sCisJICBmaXJtd2FyZSwgc3VjaCBhcyBTeW1ib2wgV2lyZWxlc3MgTmV0d29ya2VyIExBNDEwMCwgQ29tcGFjdEZsYXNoCisJICBjYXJkcyBieSBTb2NrZXQgQ29tbXVuaWNhdGlvbnMgYW5kIEludGVsIFBSTy9XaXJlbGVzcyAyMDExQi4KKworCSAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgZG93bmxvYWQgb24gc3RhcnR1cC4gIFV0aWxpdGllcworCSAgZm9yIGRvd25sb2FkaW5nIFN5bWJvbCBmaXJtd2FyZSBhcmUgYXZhaWxhYmxlIGF0CisJICA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9vcmlub2NvLz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCmluZGV4IDc5MTM2NmUuLjFmYzc0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQpAQCAtMSw4ICsxLDkgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBvcmlub2NvIHdpcmVsZXNzIGRldmljZSBkcml2ZXJzLgogIworb3Jpbm9jby1vYmpzIDo9IG1haW4ubyBmdy5vIGh3Lm8gbWljLm8gc2Nhbi5vIHdleHQubyBoZXJtZXNfZGxkLm8gaGVybWVzLm8KIAotb2JqLSQoQ09ORklHX0hFUk1FUykJCSs9IG9yaW5vY28ubyBoZXJtZXMubyBoZXJtZXNfZGxkLm8KK29iai0kKENPTkZJR19IRVJNRVMpCQkrPSBvcmlub2NvLm8KIG9iai0kKENPTkZJR19QQ01DSUFfSEVSTUVTKQkrPSBvcmlub2NvX2NzLm8KIG9iai0kKENPTkZJR19BUFBMRV9BSVJQT1JUKQkrPSBhaXJwb3J0Lm8KIG9iai0kKENPTkZJR19QTFhfSEVSTUVTKQkrPSBvcmlub2NvX3BseC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jCmluZGV4IDI4ZjFjYWUuLjhjNDA2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jCkBAIC0zLDEwICszLDEwIEBACiAgKiBBIGRyaXZlciBmb3IgIkhlcm1lcyIgY2hpcHNldCBiYXNlZCBBcHBsZSBBaXJwb3J0IHdpcmVsZXNzCiAgKiBjYXJkLgogICoKLSAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgb3Jpbm9jby5jCi0gKiAKKyAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgbWFpbi5jCisgKgogICogTm90ZSBzcGVjaWZpYyB0byBhaXJwb3J0IHN0dWI6Ci0gKiAKKyAqCiAgKiAgMC4wNSA6IGZpcnN0IHZlcnNpb24gb2YgdGhlIG5ldyBzcGxpdCBkcml2ZXIKICAqICAwLjA2IDogZml4IHBvc3NpYmxlIGhhbmcgb24gcG93ZXJ1cCwgYWRkIHNsZWVwIHN1cHBvcnQKICAqLwpAQCAtNjAsNyArNjAsOCBAQAogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAKIAlkaXNhYmxlX2lycShkZXYtPmlycSk7Ci0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NSw3ICs3Niw4IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFpcnBvcnQgd2FraW5nIHVwXG4iLCBkZXYtPm5hbWUpOwogCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOwogCW1zbGVlcCgyMDApOwogCiAJZW5hYmxlX2lycShkZXYtPmlycSk7CkBAIC05Myw3ICs5NSw3IEBACiAKIAlwcml2LT5od191bmF2YWlsYWJsZS0tOwogCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CisJaWYgKHByaXYtPm9wZW4gJiYgKCFwcml2LT5od191bmF2YWlsYWJsZSkpIHsKIAkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmQgb24gUEJPT0tfV0FLRVxuIiwKQEAgLTEyNyw3ICsxMjksOCBAQAogCiAJbWFjaW9fcmVsZWFzZV9yZXNvdXJjZShtZGV2LCAwKTsKIAotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKIAlzc2xlZXAoMSk7CiAKIAltYWNpb19zZXRfZHJ2ZGF0YShtZGV2LCBOVUxMKTsKQEAgLTE1Myw5ICsxNTYsMTEgQEAKIAkgKiBvZmYuICovCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAwKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDApOwogCXNzbGVlcCgxKTsKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDEpOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMSk7CiAJc3NsZWVwKDEpOwogCiAJZW5hYmxlX2lycShkZXYtPmlycSk7CkBAIC0xODIsNyArMTg3LDcgQEAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJm1kZXYtPm9mZGV2LmRldiwKIAkJCSAgICAgICBhaXJwb3J0X2hhcmRfcmVzZXQsIE5VTEwpOwotCWlmICghIGRldikgeworCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTIxNCw5ICsyMTksMTAgQEAKIAl9CiAKIAloZXJtZXNfc3RydWN0X2luaXQoaHcsIGNhcmQtPnZhZGRyLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7Ci0JCQorCiAJLyogUG93ZXIgdXAgY2FyZCAqLwotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKIAlzc2xlZXAoMSk7CiAKIAkvKiBSZXNldCBpdCBiZWZvcmUgd2UgZ2V0IHRoZSBpbnRlcnJ1cHQgKi8KQEAgLTI0OCw3ICsyNTQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBBcHBsZSBBaXJwb3J0IHdpcmVsZXNzIGNhcmQuIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFpcnBvcnRfbWF0Y2hbXSA9IAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYWlycG9ydF9tYXRjaFtdID0KIHsKIAl7CiAJLm5hbWUgCQk9ICJyYWRpbyIsCkBAIC0yNTYsMTAgKzI2Miw5IEBACiAJe30sCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFIChvZiwgYWlycG9ydF9tYXRjaCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhaXJwb3J0X21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgYWlycG9ydF9kcml2ZXIgPSAKLXsKK3N0YXRpYyBzdHJ1Y3QgbWFjaW9fZHJpdmVyIGFpcnBvcnRfZHJpdmVyID0gewogCS5uYW1lIAkJPSBEUklWRVJfTkFNRSwKIAkubWF0Y2hfdGFibGUJPSBhaXJwb3J0X21hdGNoLAogCS5wcm9iZQkJPSBhaXJwb3J0X2F0dGFjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg0YjQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCkBAIC0wLDAgKzEsMzkwIEBACisvKiBGaXJtd2FyZSBmaWxlIHJlYWRpbmcgYW5kIGRvd25sb2FkIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiZncuaCIKKworLyogRW5kIG1hcmtlcnMgKGZvciBTeW1ib2wgZmlybXdhcmUgb25seSkgKi8KKyNkZWZpbmUgVEVYVF9FTkQJMHgxQQkJLyogRW5kIG9mIHRleHQgaGVhZGVyICovCisKK3N0cnVjdCBmd19pbmZvIHsKKwljaGFyICpwcmlfZnc7CisJY2hhciAqc3RhX2Z3OworCWNoYXIgKmFwX2Z3OworCXUzMiBwZGFfYWRkcjsKKwl1MTYgcGRhX3NpemU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2luZm8gb3Jpbm9jb19md1tdID0geworCXsgTlVMTCwgImFnZXJlX3N0YV9mdy5iaW4iLCAiYWdlcmVfYXBfZncuYmluIiwgMHgwMDM5MDAwMCwgMTAwMCB9LAorCXsgTlVMTCwgInByaXNtX3N0YV9mdy5iaW4iLCAicHJpc21fYXBfZncuYmluIiwgMCwgMTAyNCB9LAorCXsgInN5bWJvbF9zcDI0dF9wcmltX2Z3IiwgInN5bWJvbF9zcDI0dF9zZWNfZnciLCBOVUxMLCAweDAwMDAzMTAwLCA1MTIgfQorfTsKKworLyogU3RydWN0dXJlIHVzZWQgdG8gYWNjZXNzIGZpZWxkcyBpbiBGVworICogTWFrZSBzdXJlIExFIGRlY29kaW5nIG1hY3JvcyBhcmUgdXNlZAorICovCitzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgeworCWNoYXIgaGRyX3ZlcnNbNl07ICAgICAgIC8qIEFTQ0lJIHN0cmluZyBmb3IgaGVhZGVyIHZlcnNpb24gKi8KKwlfX2xlMTYgaGVhZGVyc2l6ZTsgICAgICAvKiBUb3RhbCBsZW5ndGggb2YgaGVhZGVyICovCisJX19sZTMyIGVudHJ5X3BvaW50OyAgICAgLyogTklDIGVudHJ5IHBvaW50ICovCisJX19sZTMyIGJsb2NrczsgICAgICAgICAgLyogTnVtYmVyIG9mIGJsb2NrcyB0byBwcm9ncmFtICovCisJX19sZTMyIGJsb2NrX29mZnNldDsgICAgLyogT2Zmc2V0IG9mIGJsb2NrIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCisJX19sZTMyIHBkcl9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIFBEUiBkYXRhIGZyb20gZW9mIGhlYWRlciAqLworCV9fbGUzMiBwcmlfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBwcmltYXJ5IHBsdWcgZGF0YSAqLworCV9fbGUzMiBjb21wYXRfb2Zmc2V0OyAgIC8qIE9mZnNldCB0byBjb21wYXRpYmlsaXR5IGRhdGEqLworCWNoYXIgc2lnbmF0dXJlWzBdOyAgICAgIC8qIEZXIHNpZ25hdHVyZSBsZW5ndGggaGVhZGVyc2l6ZS0yMCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIENoZWNrIHRoZSByYW5nZSBvZiB2YXJpb3VzIGhlYWRlciBlbnRyaWVzLiBSZXR1cm4gYSBwb2ludGVyIHRvIGEKKyAqIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCBvciBOVUxMIGlmIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp2YWxpZGF0ZV9mdyhjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkciwgc2l6ZV90IGxlbikKK3sKKwl1MTYgaGRyc2l6ZTsKKworCWlmIChsZW4gPCBzaXplb2YoKmhkcikpCisJCXJldHVybiAiaW1hZ2UgdG9vIHNtYWxsIjsKKwlpZiAobWVtY21wKGhkci0+aGRyX3ZlcnMsICJIRlciLCAzKSAhPSAwKQorCQlyZXR1cm4gImZvcm1hdCBub3QgcmVjb2duaXNlZCI7CisKKwloZHJzaXplID0gbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKTsKKwlpZiAoaGRyc2l6ZSA+IGxlbikKKwkJcmV0dXJuICJiYWQgaGVhZGVyc2l6ZSI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgYmxvY2sgb2Zmc2V0IjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPnBkcl9vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgUERSIG9mZnNldCI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5wcmlfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIFBSSSBvZmZzZXQiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+Y29tcGF0X29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBjb21wYXQgb2Zmc2V0IjsKKworCS8qIFRPRE86IGNvbnNpZGVyIGFkZGluZyBhIGNoZWNrc3VtIG9yIENSQyB0byB0aGUgZmlybXdhcmUgZm9ybWF0ICovCisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqCitvcmlub2NvX2NhY2hlZF9md19nZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgYm9vbCBwcmltYXJ5KQoreworCWlmIChwcmltYXJ5KQorCQlyZXR1cm4gcHJpdi0+Y2FjaGVkX3ByaV9mdzsKKwllbHNlCisJCXJldHVybiBwcml2LT5jYWNoZWRfZnc7Cit9CisjZWxzZQorI2RlZmluZSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgcHJpbWFyeSkgKE5VTEwpCisjZW5kaWYKKworLyogRG93bmxvYWQgZWl0aGVyIFNUQSBvciBBUCBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLiAqLworc3RhdGljIGludAorb3Jpbm9jb19kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkgICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAorCQkgICAgaW50IGFwKQoreworCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCisJX19sZTE2ICpwZGE7CisKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwljb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkcjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKKwljb25zdCB2b2lkICplbmQ7CisJY29uc3QgY2hhciAqZmlybXdhcmU7CisJY29uc3QgY2hhciAqZndfZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCWludCBlcnIgPSAwOworCisJcGRhID0ga3phbGxvYyhmdy0+cGRhX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcGRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhcCkKKwkJZmlybXdhcmUgPSBmdy0+YXBfZnc7CisJZWxzZQorCQlmaXJtd2FyZSA9IGZ3LT5zdGFfZnc7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZmlybXdhcmUgJXNcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOworCisJLyogUmVhZCBjdXJyZW50IHBsdWcgZGF0YSAqLworCWVyciA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWFkIFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZTsKKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkgeworCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZmlybXdhcmUsIHByaXYtPmRldik7CisKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmUgJXNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmaXJtd2FyZSk7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBmcmVlOworCQl9CisJfSBlbHNlCisJCWZ3X2VudHJ5ID0gb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKTsKKworCWhkciA9IChjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKikgZndfZW50cnktPmRhdGE7CisKKwlmd19lcnIgPSB2YWxpZGF0ZV9mdyhoZHIsIGZ3X2VudHJ5LT5zaXplKTsKKwlpZiAoZndfZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlIGRldGVjdGVkICglcykuICIKKwkJICAgICAgICJBYm9ydGluZyBkb3dubG9hZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZndfZXJyKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBFbmFibGUgYXV4IHBvcnQgdG8gYWxsb3cgcHJvZ3JhbW1pbmcgKi8KKwllcnIgPSBoZXJtZXNpX3Byb2dyYW1faW5pdChodywgbGUzMl90b19jcHUoaGRyLT5lbnRyeV9wb2ludCkpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBpbml0IHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIGFib3J0OworCisJLyogUHJvZ3JhbSBkYXRhICovCisJZmlyc3RfYmxvY2sgPSAoZndfZW50cnktPmRhdGEgKworCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCisJCSAgICAgICBsZTMyX3RvX2NwdShoZHItPmJsb2NrX29mZnNldCkpOworCWVuZCA9IGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemU7CisKKwllcnIgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIGFib3J0OworCisJLyogVXBkYXRlIHByb2R1Y3Rpb24gZGF0YSAqLworCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKworCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5wZHJfb2Zmc2V0KSk7CisKKwllcnIgPSBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaHcsIGZpcnN0X2Jsb2NrLCBlbmQsIHBkYSwKKwkJCQkJICAgICAmcGRhW2Z3LT5wZGFfc2l6ZSAvIHNpemVvZigqcGRhKV0pOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQXBwbHkgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVycikKKwkJZ290byBhYm9ydDsKKworCS8qIFRlbGwgY2FyZCB3ZSd2ZSBmaW5pc2hlZCAqLworCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9lbmQoaHcpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBlbmQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gYWJvcnQ7CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBydW5uaW5nICovCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoZXJtZXNfcHJlc2VudCByZXR1cm5lZCAlZFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcHJlc2VudChodykpOworCithYm9ydDoKKwkvKiBJZiB3ZSByZXF1ZXN0ZWQgdGhlIGZpcm13YXJlLCByZWxlYXNlIGl0LiAqLworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisKK2ZyZWU6CisJa2ZyZWUocGRhKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUHJvY2VzcyBhIGZpcm13YXJlIGltYWdlIC0gc3RvcCB0aGUgY2FyZCwgbG9hZCB0aGUgZmlybXdhcmUsIHJlc2V0CisgKiB0aGUgY2FyZCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzLiAgRm9yIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgdGFrZQorICogY2FyZSBvZiB0aGUgUERBIC0gcmVhZCBpdCBhbmQgdGhlbiB3cml0ZSBpdCBvbiB0b3Agb2YgdGhlIGZpcm13YXJlLgorICovCitzdGF0aWMgaW50CitzeW1ib2xfZGxfaW1hZ2Uoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbWFnZSwgY29uc3Qgdm9pZCAqZW5kLAorCQlpbnQgc2Vjb25kYXJ5KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwdHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7CisKKwkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLworCV9fbGUxNiAqcGRhID0gTlVMTDsKKworCS8qIEJpbmFyeSBibG9jayBiZWdpbnMgYWZ0ZXIgdGhlIDB4MUEgbWFya2VyICovCisJcHRyID0gaW1hZ2U7CisJd2hpbGUgKCpwdHIrKyAhPSBURVhUX0VORCk7CisJZmlyc3RfYmxvY2sgPSBwdHI7CisKKwkvKiBSZWFkIHRoZSBQREEgZnJvbSBFRVBST00gKi8KKwlpZiAoc2Vjb25kYXJ5KSB7CisJCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZGEpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCX0KKworCS8qIFN0b3AgdGhlIGZpcm13YXJlLCBzbyB0aGF0IGl0IGNhbiBiZSBzYWZlbHkgcmV3cml0dGVuICovCisJaWYgKHByaXYtPnN0b3BfZncpIHsKKwkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBhZGFwdGVyIHdpdGggbmV3IGZpcm13YXJlICovCisJcmV0ID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZTsKKworCS8qIFdyaXRlIHRoZSBQREEgdG8gdGhlIGFkYXB0ZXIgKi8KKwlpZiAoc2Vjb25kYXJ5KSB7CisJCXNpemVfdCBsZW4gPSBoZXJtZXNfYmxvY2tzX2xlbmd0aChmaXJzdF9ibG9jaywgZW5kKTsKKwkJcHRyID0gZmlyc3RfYmxvY2sgKyBsZW47CisJCXJldCA9IGhlcm1lc19hcHBseV9wZGEoaHcsIHB0ciwgZW5kLCBwZGEsCisJCQkJICAgICAgICZwZGFbZnctPnBkYV9zaXplIC8gc2l6ZW9mKCpwZGEpXSk7CisJCWtmcmVlKHBkYSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJ1biB0aGUgZmlybXdhcmUgKi8KKwlpZiAocHJpdi0+c3RvcF9mdykgeworCQlyZXQgPSBwcml2LT5zdG9wX2Z3KHByaXYsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZXNldCBoZXJtZXMgY2hpcCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzICovCisJcmV0ID0gaGVybWVzX2luaXQoaHcpOworCisJLyogaGVybWVzX3Jlc2V0KCkgc2hvdWxkIHJldHVybiAwIHdpdGggdGhlIHNlY29uZGFyeSBmaXJtd2FyZSAqLworCWlmIChzZWNvbmRhcnkgJiYgcmV0ICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogQW5kIHRoaXMgc2hvdWxkIHdvcmsgd2l0aCBhbnkgZmlybXdhcmUgKi8KKwlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKKworZnJlZToKKwlrZnJlZShwZGEpOworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIERvd25sb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLCB0aGlzIGFsc28gZG9lcyBhIFBDTUNJQSBzb2Z0CisgKiByZXNldCBvbiB0aGUgY2FyZCwgdG8gbWFrZSBzdXJlIGl0J3MgaW4gYSBzYW5lIHN0YXRlLgorICovCitzdGF0aWMgaW50CitzeW1ib2xfZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpKSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnByaV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+cHJpX2Z3KTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfSBlbHNlCisJCWZ3X2VudHJ5ID0gb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpOworCisJLyogTG9hZCBwcmltYXJ5IGZpcm13YXJlICovCisJcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKKwkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDApOworCisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSkpCisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkgeworCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5zdGFfZncsIHByaXYtPmRldikgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnN0YV9mdyk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCX0gZWxzZQorCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSk7CisKKwkvKiBMb2FkIHNlY29uZGFyeSBmaXJtd2FyZSAqLworCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCisJCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAxKTsKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpCisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogU2Vjb25kYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IG9yaW5vY29fZG93bmxvYWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgZXJyID0gMDsKKwkvKiBSZWxvYWQgZmlybXdhcmUgKi8KKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCS8qIGNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogKi8KKwkJZXJyID0gb3Jpbm9jb19kbF9maXJtd2FyZShwcml2LAorCQkJCQkgICZvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQllcnIgPSBzeW1ib2xfZGxfZmlybXdhcmUocHJpdiwKKwkJCQkJICZvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdKTsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQlicmVhazsKKwl9CisJLyogVE9ETzogaWYgd2UgZmFpbCB3ZSBwcm9iYWJseSBuZWVkIHRvIHJlaW5pdGlhbGlzZQorCSAqIHRoZSBkcml2ZXIgKi8KKworCXJldHVybiBlcnI7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCit2b2lkIG9yaW5vY29fY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGFwKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOworCWNvbnN0IGNoYXIgKnByaV9mdzsKKwljb25zdCBjaGFyICpmdzsKKworCXByaV9mdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0ucHJpX2Z3OworCWlmIChhcCkKKwkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLmFwX2Z3OworCWVsc2UKKwkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnN0YV9mdzsKKworCWlmIChwcmlfZncpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBwcmlfZncsIHByaXYtPmRldikgPT0gMCkKKwkJCXByaXYtPmNhY2hlZF9wcmlfZncgPSBmd19lbnRyeTsKKwl9CisKKwlpZiAoZncpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdywgcHJpdi0+ZGV2KSA9PSAwKQorCQkJcHJpdi0+Y2FjaGVkX2Z3ID0gZndfZW50cnk7CisJfQorfQorCit2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT5jYWNoZWRfcHJpX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9wcmlfZncpOworCWlmIChwcml2LT5jYWNoZWRfZncpCisJCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+Y2FjaGVkX2Z3KTsKKworCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOworCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZjMjZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIEZpcm13YXJlIGZpbGUgcmVhZGluZyBhbmQgZG93bmxvYWQgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX0ZXX0hfCisjZGVmaW5lIF9PUklOT0NPX0ZXX0hfCisKKy8qIEZvcndhcmQgZGVjbGF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKKworaW50IG9yaW5vY29fZG93bmxvYWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCit2b2lkIG9yaW5vY29fY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGFwKTsKK3ZvaWQgb3Jpbm9jb191bmNhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworI2Vsc2UKKyNkZWZpbmUgb3Jpbm9jb19jYWNoZV9mdyhwcml2LCBhcCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIG9yaW5vY29fdW5jYWNoZV9mdyhwcml2KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmIC8qIF9PUklOT0NPX0ZXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYwppbmRleCBiZmEzNzUzLi5mMmM5MThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIERhdmlkIEdpYnNvbiwgTGludXhjYXJlIEF1c3RyYWxpYS4KICAqIChDKSBDb3B5cmlnaHQgRGF2aWQgR2lic29uLCBJQk0gQ29ycC4gMjAwMS0yMDAzLgotICogCisgKgogICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQogICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgogICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKQEAgLTQ1LDExICs0NSw2IEBACiAKICNpbmNsdWRlICJoZXJtZXMuaCIKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJMb3ctbGV2ZWwgZHJpdmVyIGhlbHBlciBmb3IgTHVjZW50IEhlcm1lcyBjaGlwc2V0IGFuZCBQcmlzbSBJSSBIRkEzODR4IHdpcmVsZXNzIE1BQyBjb250cm9sbGVyIik7Ci1NT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiIKLQkiICYgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwotCiAvKiBUaGVzZSBhcmUgbWF4aW11bSB0aW1lb3V0cy4gTW9zdCBvZnRlbiwgY2FyZCB3aWwgcmVhY3QgbXVjaCBmYXN0ZXIgKi8KICNkZWZpbmUgQ01EX0JVU1lfVElNRU9VVCAoMTAwKSAvKiBJbiBpdGVyYXRpb25zIG9mIH4xdXMgKi8KICNkZWZpbmUgQ01EX0lOSVRfVElNRU9VVCAoNTAwMDApIC8qIGluIGl0ZXJhdGlvbnMgb2YgfjEwdXMgKi8KQEAgLTYxLDEzICs1NiwxMyBAQAogICovCiAKICNkZWZpbmUgRE1TRyhzdHVmZi4uLikgZG8ge3ByaW50ayhLRVJOX0RFQlVHICJoZXJtZXMgQCAlcDogIiAsIGh3LT5pb2Jhc2UpOyBcCi0JCQlwcmludGsoc3R1ZmYpO30gd2hpbGUgKDApCisJCQlwcmludGsoc3R1ZmYpOyB9IHdoaWxlICgwKQogCiAjdW5kZWYgSEVSTUVTX0RFQlVHCiAjaWZkZWYgSEVSTUVTX0RFQlVHCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLSNkZWZpbmUgREVCVUcobHZsLCBzdHVmZi4uLikgaWYgKCAobHZsKSA8PSBIRVJNRVNfREVCVUcpIERNU0coc3R1ZmYpCisjZGVmaW5lIERFQlVHKGx2bCwgc3R1ZmYuLi4pIGlmICgobHZsKSA8PSBIRVJNRVNfREVCVUcpIERNU0coc3R1ZmYpCiAKICNlbHNlIC8qICEgSEVSTUVTX0RFQlVHICovCiAKQEAgLTk1LDIwICs5MCwxOSBAQAogCiAJLyogRmlyc3Qgd2FpdCBmb3IgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgdG8gdW5idXN5ICovCiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKLQl3aGlsZSAoIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpICYmIGsgKSB7CisJd2hpbGUgKChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMSk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJfQotCWlmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpIHsKKwlpZiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKQogCQlyZXR1cm4gLUVCVVNZOwotCX0KIAogCWhlcm1lc193cml0ZV9yZWduKGh3LCBQQVJBTTIsIHBhcmFtMik7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFBBUkFNMSwgcGFyYW0xKTsKIAloZXJtZXNfd3JpdGVfcmVnbihodywgUEFSQU0wLCBwYXJhbTApOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBDTUQsIGNtZCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxLDIzICsxODUsMjMgQEAKIAloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7CiAKIAkvKiBOb3JtYWxseSBpdCdzIGEgImNhbid0IGhhcHBlbiIgZm9yIHRoZSBjb21tYW5kIHJlZ2lzdGVyIHRvCi0gICAgICAgICAgIGJlIGJ1c3kgd2hlbiB3ZSBnbyB0byBpc3N1ZSBhIGNvbW1hbmQgYmVjYXVzZSB3ZSBhcmUKLSAgICAgICAgICAgc2VyaWFsaXppbmcgYWxsIGNvbW1hbmRzLiAgSG93ZXZlciB3ZSB3YW50IHRvIGhhdmUgc29tZQotICAgICAgICAgICBjaGFuY2Ugb2YgcmVzZXR0aW5nIHRoZSBjYXJkIGV2ZW4gaWYgaXQgZ2V0cyBpbnRvIGEgc3R1cGlkCi0gICAgICAgICAgIHN0YXRlLCBzbyB3ZSBhY3R1YWxseSB3YWl0IHRvIHNlZSBpZiB0aGUgY29tbWFuZCByZWdpc3RlcgotICAgICAgICAgICB3aWxsIHVuYnVzeSBpdHNlbGYgaGVyZS4gKi8KKwkgICBiZSBidXN5IHdoZW4gd2UgZ28gdG8gaXNzdWUgYSBjb21tYW5kIGJlY2F1c2Ugd2UgYXJlCisJICAgc2VyaWFsaXppbmcgYWxsIGNvbW1hbmRzLiAgSG93ZXZlciB3ZSB3YW50IHRvIGhhdmUgc29tZQorCSAgIGNoYW5jZSBvZiByZXNldHRpbmcgdGhlIGNhcmQgZXZlbiBpZiBpdCBnZXRzIGludG8gYSBzdHVwaWQKKwkgICBzdGF0ZSwgc28gd2UgYWN0dWFsbHkgd2FpdCB0byBzZWUgaWYgdGhlIGNvbW1hbmQgcmVnaXN0ZXIKKwkgICB3aWxsIHVuYnVzeSBpdHNlbGYgaGVyZS4gKi8KIAlrID0gQ01EX0JVU1lfVElNRU9VVDsKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwogCXdoaWxlIChrICYmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpKSB7Ci0JCWlmIChyZWcgPT0gMHhmZmZmKSAvKiBTcGVjaWFsIGNhc2UgLSB0aGUgY2FyZCBoYXMgcHJvYmFibHkgYmVlbiByZW1vdmVkLAotCQkJCSAgICAgIHNvIGRvbid0IHdhaXQgZm9yIHRoZSB0aW1lb3V0ICovCisJCWlmIChyZWcgPT0gMHhmZmZmKSAvKiBTcGVjaWFsIGNhc2UgLSB0aGUgY2FyZCBoYXMgcHJvYmFibHkgYmVlbgorCQkJCSAgICAgIHJlbW92ZWQsIHNvIGRvbid0IHdhaXQgZm9yIHRoZSB0aW1lb3V0ICovCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQlrLS07CiAJCXVkZWxheSgxKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl9Ci0JCisKIAkvKiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSB0aW1lb3V0IC0gaWYgd2UndmUgdGltZWQKIAkgICBvdXQgaGVybWVzX2lzc3VlX2NtZCgpIHdpbGwgcHJvYmFibHkgcmV0dXJuIC1FQlVTWSBiZWxvdyAqLwogCkBAIC0yMjgsNyArMjIyLDEwIEBACiAvKiBJc3N1ZSBhIGNvbW1hbmQgdG8gdGhlIGNoaXAsIGFuZCAoYnVzeSEpIHdhaXQgZm9yIGl0IHRvCiAgKiBjb21wbGV0ZS4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZXJyb3IsIDAgb24gc3VjY2VzcywgPiAwIG9uIGVycm9yIHJldHVybmVkIGJ5IHRoZSBmaXJtd2FyZQorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZXJyb3IKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvciByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUKICAqCiAgKiBDYWxsYWJsZSBmcm9tIGFueSBjb250ZXh0LCBidXQgbG9ja2luZyBpcyB5b3VyIHByb2JsZW0uICovCiBpbnQgaGVybWVzX2RvY21kX3dhaXQoaGVybWVzX3QgKmh3LCB1MTYgY21kLCB1MTYgcGFybTAsCkBAIC0yNDEsMTMgKzIzOCwxMyBAQAogCiAJZXJyID0gaGVybWVzX2lzc3VlX2NtZChodywgY21kLCBwYXJtMCwgMCwgMCk7CiAJaWYgKGVycikgewotCQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKKwkJaWYgKCFoZXJtZXNfcHJlc2VudChodykpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVybWVzIEAgJXA6ICIKIAkJCQkgICAgICAgIkNhcmQgcmVtb3ZlZCB3aGlsZSBpc3N1aW5nIGNvbW1hbmQgIgogCQkJCSAgICAgICAiMHglMDR4LlxuIiwgaHctPmlvYmFzZSwgY21kKTsKIAkJCWVyciA9IC1FTk9ERVY7Ci0JCX0gZWxzZSAKKwkJfSBlbHNlCiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0VSUiAiaGVybWVzIEAgJXA6ICIKIAkJCQkgICAgICAgIkVycm9yICVkIGlzc3VpbmcgY29tbWFuZCAweCUwNHguXG4iLApAQCAtMjU3LDIxICsyNTQsMjEgQEAKIAogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJayA9IENNRF9DT01QTF9USU1FT1VUOwotCXdoaWxlICggKCEgKHJlZyAmIEhFUk1FU19FVl9DTUQpKSAmJiBrKSB7CisJd2hpbGUgKCghKHJlZyAmIEhFUk1FU19FVl9DTUQpKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEwKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAl9CiAKLQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKKwlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZXJtZXMgQCAlcDogQ2FyZCByZW1vdmVkICIKIAkJICAgICAgICJ3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kIDB4JTA0eCBjb21wbGV0aW9uLlxuIiwKIAkJICAgICAgIGh3LT5pb2Jhc2UsIGNtZCk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQkJCi0JaWYgKCEgKHJlZyAmIEhFUk1FU19FVl9DTUQpKSB7CisKKwlpZiAoIShyZWcgJiBIRVJNRVNfRVZfQ01EKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhlcm1lcyBAICVwOiBUaW1lb3V0IHdhaXRpbmcgZm9yICIKIAkJICAgICAgICJjb21tYW5kIDB4JTA0eCBjb21wbGV0aW9uLlxuIiwgaHctPmlvYmFzZSwgY21kKTsKIAkJZXJyID0gLUVUSU1FRE9VVDsKQEAgLTMwMSwzMSArMjk4LDMwIEBACiAJaW50IGVyciA9IDA7CiAJaW50IGs7CiAJdTE2IHJlZzsKLQkKLQlpZiAoIChzaXplIDwgSEVSTUVTX0FMTE9DX0xFTl9NSU4pIHx8IChzaXplID4gSEVSTUVTX0FMTE9DX0xFTl9NQVgpICkKKworCWlmICgoc2l6ZSA8IEhFUk1FU19BTExPQ19MRU5fTUlOKSB8fCAoc2l6ZSA+IEhFUk1FU19BTExPQ19MRU5fTUFYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9BTExPQywgc2l6ZSwgTlVMTCk7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAlrID0gQUxMT0NfQ09NUExfVElNRU9VVDsKLQl3aGlsZSAoICghIChyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSAmJiBrKSB7CisJd2hpbGUgKCghKHJlZyAmIEhFUk1FU19FVl9BTExPQykpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMTApOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwogCX0KLQkKLQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKKworCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlcm1lcyBAICVwOiAiCiAJCSAgICAgICAiQ2FyZCByZW1vdmVkIHdhaXRpbmcgZm9yIGZyYW1lIGFsbG9jYXRpb24uXG4iLAogCQkgICAgICAgaHctPmlvYmFzZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQkJCi0JaWYgKCEgKHJlZyAmIEhFUk1FU19FVl9BTExPQykpIHsKKworCWlmICghKHJlZyAmIEhFUk1FU19FVl9BTExPQykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZXJtZXMgQCAlcDogIgogCQkgICAgICAgIlRpbWVvdXQgd2FpdGluZyBmb3IgZnJhbWUgYWxsb2NhdGlvblxuIiwKIAkJICAgICAgIGh3LT5pb2Jhc2UpOwpAQCAtMzM0LDE0ICszMzAsMTcgQEAKIAogCSpmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCk7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCBIRVJNRVNfRVZfQUxMT0MpOwotCQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19hbGxvY2F0ZSk7CiAKIC8qIFNldCB1cCBhIEJBUCB0byByZWFkIGEgcGFydGljdWxhciBjaHVuayBvZiBkYXRhIGZyb20gY2FyZCdzIGludGVybmFsIGJ1ZmZlci4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4wIG9uIGVycm9yCisgKiBSZXR1cm5zOgorICogICAgIDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubykKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvcgogICogZnJvbSBmaXJtd2FyZQogICoKICAqIENhbGxhYmxlIGZyb20gYW55IGNvbnRleHQgKi8KQEAgLTM1Myw3ICszNTIsNyBAQAogCXUxNiByZWc7CiAKIAkvKiBQYXJhbm9pYS4uICovCi0JaWYgKCAob2Zmc2V0ID4gSEVSTUVTX0JBUF9PRkZTRVRfTUFYKSB8fCAob2Zmc2V0ICUgMikgKQorCWlmICgob2Zmc2V0ID4gSEVSTUVTX0JBUF9PRkZTRVRfTUFYKSB8fCAob2Zmc2V0ICUgMikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJayA9IEhFUk1FU19CQVBfQlVTWV9USU1FT1VUOwpAQCAtMzc0LDcgKzM3Myw3IEBACiAJLyogV2FpdCBmb3IgdGhlIEJBUCB0byBiZSByZWFkeSAqLwogCWsgPSBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVDsKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWcoaHcsIG9yZWcpOwotCXdoaWxlICggKHJlZyAmIChIRVJNRVNfT0ZGU0VUX0JVU1kgfCBIRVJNRVNfT0ZGU0VUX0VSUikpICYmIGspIHsKKwl3aGlsZSAoKHJlZyAmIChIRVJNRVNfT0ZGU0VUX0JVU1kgfCBIRVJNRVNfT0ZGU0VUX0VSUikpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMSk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZyhodywgb3JlZyk7CkBAIC0zODYsOSArMzg1LDggQEAKIAkJICAgICAgIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpID8gInRpbWVvdXQiIDogImVycm9yIiwKIAkJICAgICAgIHJlZywgaWQsIG9mZnNldCk7CiAKLQkJaWYgKHJlZyAmIEhFUk1FU19PRkZTRVRfQlVTWSkgeworCQlpZiAocmVnICYgSEVSTUVTX09GRlNFVF9CVVNZKQogCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JCX0KIAogCQlyZXR1cm4gLUVJTzsJCS8qIGVycm9yIG9yIHdyb25nIG9mZnNldCAqLwogCX0KQEAgLTQwMCw3ICszOTgsMTAgQEAKICAqIEJBUC4gU3luY2hyb25pemF0aW9uL3NlcmlhbGl6YXRpb24gaXMgdGhlIGNhbGxlcidzIHByb2JsZW0uICBsZW4KICAqIG11c3QgYmUgZXZlbi4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCisgKiBSZXR1cm5zOgorICogICAgIDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubykKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCiAgKi8KIGludCBoZXJtZXNfYmFwX3ByZWFkKGhlcm1lc190ICpodywgaW50IGJhcCwgdm9pZCAqYnVmLCBpbnQgbGVuLAogCQkgICAgIHUxNiBpZCwgdTE2IG9mZnNldCkKQEAgLTQwOCw3ICs0MDksNyBAQAogCWludCBkcmVnID0gYmFwID8gSEVSTUVTX0RBVEExIDogSEVSTUVTX0RBVEEwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKCAobGVuIDwgMCkgfHwgKGxlbiAlIDIpICkKKwlpZiAoKGxlbiA8IDApIHx8IChsZW4gJSAyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBoZXJtZXNfYmFwX3NlZWsoaHcsIGJhcCwgaWQsIG9mZnNldCk7CkBAIC00MjYsNyArNDI3LDEwIEBACiAvKiBXcml0ZSBhIGJsb2NrIG9mIGRhdGEgdG8gdGhlIGNoaXAncyBidWZmZXIsIHZpYSB0aGUKICAqIEJBUC4gU3luY2hyb25pemF0aW9uL3NlcmlhbGl6YXRpb24gaXMgdGhlIGNhbGxlcidzIHByb2JsZW0uCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQogICovCiBpbnQgaGVybWVzX2JhcF9wd3JpdGUoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4sCiAJCSAgICAgIHUxNiBpZCwgdTE2IG9mZnNldCkKQEAgLTQ0MCwxMSArNDQ0LDExIEBACiAJZXJyID0gaGVybWVzX2JhcF9zZWVrKGh3LCBiYXAsIGlkLCBvZmZzZXQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCQorCiAJLyogQWN0dWFsbHkgZG8gdGhlIHRyYW5zZmVyICovCiAJaGVybWVzX3dyaXRlX2J5dGVzKGh3LCBkcmVnLCBidWYsIGxlbik7CiAKLSBvdXQ6CQorIG91dDoKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfYmFwX3B3cml0ZSk7CkBAIC00NjUsNyArNDY5LDcgQEAKIAl1MTYgcmxlbmd0aCwgcnR5cGU7CiAJdW5zaWduZWQgbndvcmRzOwogCi0JaWYgKCAoYnVmc2l6ZSA8IDApIHx8IChidWZzaXplICUgMikgKQorCWlmICgoYnVmc2l6ZSA8IDApIHx8IChidWZzaXplICUgMikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfQUNDRVNTLCByaWQsIE5VTEwpOwpAQCAtNDc4LDcgKzQ4Miw3IEBACiAKIAlybGVuZ3RoID0gaGVybWVzX3JlYWRfcmVnKGh3LCBkcmVnKTsKIAotCWlmICghIHJsZW5ndGgpCisJaWYgKCFybGVuZ3RoKQogCQlyZXR1cm4gLUVOT0RBVEE7CiAKIAlydHlwZSA9IGhlcm1lc19yZWFkX3JlZyhodywgZHJlZyk7CkBAIC01MDMsNyArNTA3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX3JlYWRfbHR2KTsKIAotaW50IGhlcm1lc193cml0ZV9sdHYoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLCAKK2ludCBoZXJtZXNfd3JpdGVfbHR2KGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwKIAkJICAgICB1MTYgbGVuZ3RoLCBjb25zdCB2b2lkICp2YWx1ZSkKIHsKIAlpbnQgZHJlZyA9IGJhcCA/IEhFUk1FU19EQVRBMSA6IEhFUk1FU19EQVRBMDsKQEAgLTUzMCwxNSArNTM0LDMgQEAKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfd3JpdGVfbHR2KTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9oZXJtZXModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaGVybWVzKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfaGVybWVzKTsKLW1vZHVsZV9leGl0KGV4aXRfaGVybWVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCmluZGV4IDhiMTNjOGYuLmM3OGM0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaApAQCAtMTUsNyArMTUsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwLCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCiAgKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnAuIDIwMDEtMjAwMy4KICAqCi0gKiBQb3J0aW9ucyB0YWtlbiBmcm9tIGhmYTM4NHguaCwgQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogUG9ydGlvbnMgdGFrZW4gZnJvbSBoZmEzODR4LmguCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBmaWxlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwsIHZlcnNpb24gMi4KICAqLwpAQCAtMzEsNyArMzIsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyoKICAqIExpbWl0cyBhbmQgY29uc3RhbnRzCkBAIC0yMDMsNyArMjA0LDcgQEAKIAlfX2xlMzIgc3dfc3VwcG9ydDsKIAl1OCByZXRyeV9jb3VudDsKIAl1OCB0eF9yYXRlOwotCV9fbGUxNiB0eF9jb250cm9sOwkKKwlfX2xlMTYgdHhfY29udHJvbDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhFUk1FU19UWFNUQVRfUkVUUllFUlIJCSgweDAwMDEpCkBAIC0yOTgsNyArMjk5LDcgQEAKIAkvKiBiaXRzOiAwLWVzcywgMS1pYnNzLCA0LXByaXZhY3kgW3dlcF0gKi8KIAlfX2xlMTYgZXNzaWRfbGVuOwkvKiBFU1NJRCBsZW5ndGggKi8KIAl1OCBlc3NpZFszMl07CQkvKiBFU1NJRCBvZiB0aGUgbmV0d29yayAqLwotICAgIAlfX2xlMTYgcmF0ZXNbNV07CS8qIEJpdCByYXRlIHN1cHBvcnRlZCAqLworCV9fbGUxNiByYXRlc1s1XTsJLyogQml0IHJhdGUgc3VwcG9ydGVkICovCiAJX19sZTE2IGJhc2ljX3JhdGVzOwkvKiBCYXNpYyByYXRlcyBiaXRtYXNrICovCiAJdTggdW5rbm93bjJbNl07CQkvKiBBbHdheXMgRkY6RkY6RkY6RkY6MDA6MDAgKi8KIAl1OCB1bmtub3duM1s4XTsJCS8qIEFsd2F5cyAwLCBhcHBlYXJlZCBpbiBmL3cgMy45MS02OCAqLwpAQCAtMzQ0LDE0ICszNDUsMTQgQEAKIAl1OAlkYXRhWzMxNl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEICAgKDB4MDAwMCkgIAorI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEICAgKDB4MDAwMCkKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEICAgICAgICgweDAwMDEpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0RJU0NPTk5FQ1RFRCAgICAoMHgwMDAyKQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0UgICAgICAgKDB4MDAwMykKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICgweDAwMDQpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFICAgICAoMHgwMDA1KQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BU1NPQ19GQUlMRUQgICAgKDB4MDAwNikKLSAgCisKIHN0cnVjdCBoZXJtZXNfbGlua3N0YXR1cyB7CiAJX19sZTE2IGxpbmtzdGF0dXM7ICAgICAgICAgLyogTGluayBzdGF0dXMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMzg0LDExICszODUsMTIgQEAKIAogLyogUmVnaXN0ZXIgYWNjZXNzIGNvbnZlbmllbmNlIG1hY3JvcyAqLwogI2RlZmluZSBoZXJtZXNfcmVhZF9yZWcoaHcsIG9mZikgXAotCShpb3JlYWQxNigoaHcpLT5pb2Jhc2UgKyAoIChvZmYpIDw8IChodyktPnJlZ19zcGFjaW5nICkpKQorCShpb3JlYWQxNigoaHcpLT5pb2Jhc2UgKyAoKG9mZikgPDwgKGh3KS0+cmVnX3NwYWNpbmcpKSkKICNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZyhodywgb2ZmLCB2YWwpIFwKIAkoaW93cml0ZTE2KCh2YWwpLCAoaHcpLT5pb2Jhc2UgKyAoKG9mZikgPDwgKGh3KS0+cmVnX3NwYWNpbmcpKSkKICNkZWZpbmUgaGVybWVzX3JlYWRfcmVnbihodywgbmFtZSkgaGVybWVzX3JlYWRfcmVnKChodyksIEhFUk1FU18jI25hbWUpCi0jZGVmaW5lIGhlcm1lc193cml0ZV9yZWduKGh3LCBuYW1lLCB2YWwpIGhlcm1lc193cml0ZV9yZWcoKGh3KSwgSEVSTUVTXyMjbmFtZSwgKHZhbCkpCisjZGVmaW5lIGhlcm1lc193cml0ZV9yZWduKGh3LCBuYW1lLCB2YWwpIFwKKwloZXJtZXNfd3JpdGVfcmVnKChodyksIEhFUk1FU18jI25hbWUsICh2YWwpKQogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiB2b2lkIGhlcm1lc19zdHJ1Y3RfaW5pdChoZXJtZXNfdCAqaHcsIHZvaWQgX19pb21lbSAqYWRkcmVzcywgaW50IHJlZ19zcGFjaW5nKTsKQEAgLTQzMCw3ICs0MzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBoZXJtZXNfZGlzYWJsZV9wb3J0KGhlcm1lc190ICpodywgaW50IHBvcnQpCiB7Ci0JcmV0dXJuIGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0RJU0FCTEUgfCAocG9ydCA8PCA4KSwgCisJcmV0dXJuIGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0RJU0FCTEUgfCAocG9ydCA8PCA4KSwKIAkJCQkgMCwgTlVMTCk7CiB9CiAKQEAgLTQ0MSwxMSArNDQzLDEyIEBACiAJcmV0dXJuIGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0lOUVVJUkUsIHJpZCwgTlVMTCk7CiB9CiAKLSNkZWZpbmUgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihuKSAoICgoKG4pKzEpLzIpICsgMSApCi0jZGVmaW5lIEhFUk1FU19SRUNMRU5fVE9fQllURVMobikgKCAoKG4pLTEpICogMiApCisjZGVmaW5lIEhFUk1FU19CWVRFU19UT19SRUNMRU4obikgKCgoKG4pKzEpLzIpICsgMSkKKyNkZWZpbmUgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhuKSAoKChuKS0xKSAqIDIpCiAKIC8qIE5vdGUgdGhhdCBmb3IgdGhlIG5leHQgdHdvLCB0aGUgY291bnQgaXMgaW4gMTYtYml0IHdvcmRzLCBub3QgYnl0ZXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfcmVhZF93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwgdm9pZCAqYnVmLCB1bnNpZ25lZCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfcmVhZF93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwKKwkJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgY291bnQpCiB7CiAJb2ZmID0gb2ZmIDw8IGh3LT5yZWdfc3BhY2luZzsKIAlpb3JlYWQxNl9yZXAoaHctPmlvYmFzZSArIG9mZiwgYnVmLCBjb3VudCk7CkBAIC00NjAsNyArNDYzLDggQEAKIAkJaW93cml0ZTgoYnVmW2NvdW50IC0gMV0sIGh3LT5pb2Jhc2UgKyBvZmYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX2NsZWFyX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLCB1bnNpZ25lZCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfY2xlYXJfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsCisJCQkJICAgICAgdW5zaWduZWQgY291bnQpCiB7CiAJdW5zaWduZWQgaTsKIApAQCAtNDcxLDkgKzQ3NSwxMCBAQAogfQogCiAjZGVmaW5lIEhFUk1FU19SRUFEX1JFQ09SRChodywgYmFwLCByaWQsIGJ1ZikgXAotCShoZXJtZXNfcmVhZF9sdHYoKGh3KSwoYmFwKSwocmlkKSwgc2l6ZW9mKCpidWYpLCBOVUxMLCAoYnVmKSkpCisJKGhlcm1lc19yZWFkX2x0digoaHcpLCAoYmFwKSwgKHJpZCksIHNpemVvZigqYnVmKSwgTlVMTCwgKGJ1ZikpKQogI2RlZmluZSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBiYXAsIHJpZCwgYnVmKSBcCi0JKGhlcm1lc193cml0ZV9sdHYoKGh3KSwoYmFwKSwocmlkKSxIRVJNRVNfQllURVNfVE9fUkVDTEVOKHNpemVvZigqYnVmKSksKGJ1ZikpKQorCShoZXJtZXNfd3JpdGVfbHR2KChodyksIChiYXApLCAocmlkKSwgXAorCQkJICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHNpemVvZigqYnVmKSksIChidWYpKSkKIAogc3RhdGljIGlubGluZSBpbnQgaGVybWVzX3JlYWRfd29yZHJlYyhoZXJtZXNfdCAqaHcsIGludCBiYXAsIHUxNiByaWQsIHUxNiAqd29yZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKaW5kZXggZDhjNjI2ZS4uYTliYTE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKQEAgLTEsMTMgKzEsNyBAQAogLyoKLSAqIEhlcm1lcyBkb3dubG9hZCBoZWxwZXIgZHJpdmVyLgorICogSGVybWVzIGRvd25sb2FkIGhlbHBlci4KICAqCi0gKiBUaGlzIGNvdWxkIGJlIGVudGlyZWx5IG1lcmdlZCBpbnRvIGhlcm1lcy5jLgotICoKLSAqIEknbSBrZWVwaW5nIGl0IHNlcGFyYXRlIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgbWVyZ2luZyBiZXR3ZWVuCi0gKiBrZXJuZWwgdXBncmFkZXMuIEl0IGFsc28gbWVhbnMgdGhlIG1lbW9yeSBvdmVyaGVhZCBmb3IgZHJpdmVycyB0aGF0Ci0gKiBkb24ndCBuZWVkIGZpcm13YXJlIGRvd25sb2FkIGxvdy4KLSAqCi0gKiBUaGlzIGRyaXZlcjoKKyAqIFRoaXMgaGVscGVyOgogICogIC0gaXMgY2FwYWJsZSBvZiB3cml0aW5nIHRvIHRoZSB2b2xhdGlsZSBhcmVhIG9mIHRoZSBoZXJtZXMgZGV2aWNlCiAgKiAgLSBpcyBjdXJyZW50bHkgbm90IGNhcGFibGUgb2Ygd3JpdGluZyB0byBub24tdm9sYXRpbGUgYXJlYXMKICAqICAtIHByb3ZpZGUgaGVscGVycyB0byBpZGVudGlmeSBhbmQgdXBkYXRlIHBsdWdpbiBkYXRhCkBAIC01MCwxMCArNDQsNiBAQAogI2luY2x1ZGUgImhlcm1lcy5oIgogI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJEb3dubG9hZCBoZWxwZXIgZm9yIEx1Y2VudCBIZXJtZXMgY2hpcHNldCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgS2lscm95IDxraWxyb3lkQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKLQogI2RlZmluZSBQRlggImhlcm1lc19kbGQ6ICIKIAogLyoKQEAgLTgxLDE4ICs3MSw2IEBACiAjZGVmaW5lIEJMT0NLX0VORAkweEZGRkZGRkZGCS8qIExhc3QgaW1hZ2UgYmxvY2sgKi8KICNkZWZpbmUgVEVYVF9FTkQJMHgxQQkJLyogRW5kIG9mIHRleHQgaGVhZGVyICovCiAKLS8qCi0gKiBQREEgPT0gUHJvZHVjdGlvbiBEYXRhIEFyZWEKLSAqCi0gKiBJbiBwcmluY2lwbGUsIHRoZSBtYXguIHNpemUgb2YgdGhlIFBEQSBpcyBpcyA0MDk2IHdvcmRzLiBDdXJyZW50bHksCi0gKiBob3dldmVyLCBvbmx5IGFib3V0IDUwMCBieXRlcyBvZiB0aGlzIGFyZWEgYXJlIHVzZWQuCi0gKgotICogU29tZSBVU0IgaW1wbGVtZW50YXRpb25zIGNhbid0IGhhbmRsZSBzaXplcyBpbiBleGNlc3Mgb2YgMTAxNi4gTm90ZQotICogdGhhdCBQREEgaXMgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhvc2UgVVNCIGVudmlyb25tZW50cywgYnV0IG1heSBiZQotICogcmV0cmlldmVkIGJ5IGNvbW1vbiBjb2RlLgotICovCi0jZGVmaW5lIE1BWF9QREFfU0laRQkxMDAwCi0KIC8qIExpbWl0IHRoZSBhbW91dCB3ZSB0cnkgdG8gZG93bmxvYWQgaW4gYSBzaW5nbGUgc2hvdC4KICAqIFNpemUgaXMgaW4gYnl0ZXMuCiAgKi8KQEAgLTIyOCwxMyArMjA2LDE0IEBACiAgKiBTY2FuIFBEUiBmb3IgdGhlIHJlY29yZCB3aXRoIHRoZSBzcGVjaWZpZWQgUkVDT1JEX0lELgogICogSWYgaXQncyBub3QgZm91bmQsIHJldHVybiBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IHBkciAqCi1oZXJtZXNfZmluZF9wZHIoc3RydWN0IHBkciAqZmlyc3RfcGRyLCB1MzIgcmVjb3JkX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZHIgKgoraGVybWVzX2ZpbmRfcGRyKGNvbnN0IHN0cnVjdCBwZHIgKmZpcnN0X3BkciwgdTMyIHJlY29yZF9pZCwgY29uc3Qgdm9pZCAqZW5kKQogewotCXN0cnVjdCBwZHIgKnBkciA9IGZpcnN0X3BkcjsKLQl2b2lkICplbmQgPSAodm9pZCAqKWZpcnN0X3BkciArIE1BWF9QREFfU0laRTsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHIgPSBmaXJzdF9wZHI7CiAKLQl3aGlsZSAoKCh2b2lkICopcGRyIDwgZW5kKSAmJgorCWVuZCAtPSBzaXplb2Yoc3RydWN0IHBkcik7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkciA8PSBlbmQpICYmCiAJICAgICAgIChwZHJfaWQocGRyKSAhPSBQRElfRU5EKSkgewogCQkvKgogCQkgKiBQRFIgYXJlYSBpcyBjdXJyZW50bHkgbm90IHRlcm1pbmF0ZWQgYnkgUERJX0VORC4KQEAgLTI1NCwxMiArMjMzLDE1IEBACiB9CiAKIC8qIFNjYW4gcHJvZHVjdGlvbiBkYXRhIGl0ZW1zIGZvciBhIHBhcnRpY3VsYXIgZW50cnkgKi8KLXN0YXRpYyBzdHJ1Y3QgcGRpICoKLWhlcm1lc19maW5kX3BkaShzdHJ1Y3QgcGRpICpmaXJzdF9wZGksIHUzMiByZWNvcmRfaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHBkaSAqCitoZXJtZXNfZmluZF9wZGkoY29uc3Qgc3RydWN0IHBkaSAqZmlyc3RfcGRpLCB1MzIgcmVjb3JkX2lkLCBjb25zdCB2b2lkICplbmQpCiB7Ci0Jc3RydWN0IHBkaSAqcGRpID0gZmlyc3RfcGRpOworCWNvbnN0IHN0cnVjdCBwZGkgKnBkaSA9IGZpcnN0X3BkaTsKIAotCXdoaWxlIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSB7CisJZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRpKTsKKworCXdoaWxlICgoKHZvaWQgKikgcGRpIDw9IGVuZCkgJiYKKwkgICAgICAgKHBkaV9pZChwZGkpICE9IFBESV9FTkQpKSB7CiAKIAkJLyogSWYgdGhlIHJlY29yZCBJRCBtYXRjaGVzLCB3ZSBhcmUgZG9uZSAqLwogCQlpZiAocGRpX2lkKHBkaSkgPT0gcmVjb3JkX2lkKQpAQCAtMjcyLDEyICsyNTQsMTMgQEAKIAogLyogUHJvY2VzcyBvbmUgUGx1ZyBEYXRhIEl0ZW0gLSBmaW5kIGNvcnJlc3BvbmRpbmcgUERSIGFuZCBwbHVnIGl0ICovCiBzdGF0aWMgaW50Ci1oZXJtZXNfcGx1Z19wZGkoaGVybWVzX3QgKmh3LCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsIGNvbnN0IHN0cnVjdCBwZGkgKnBkaSkKK2hlcm1lc19wbHVnX3BkaShoZXJtZXNfdCAqaHcsIGNvbnN0IHN0cnVjdCBwZHIgKmZpcnN0X3BkciwKKwkJY29uc3Qgc3RydWN0IHBkaSAqcGRpLCBjb25zdCB2b2lkICpwZHJfZW5kKQogewotCXN0cnVjdCBwZHIgKnBkcjsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHI7CiAKIAkvKiBGaW5kIHRoZSBQRFIgY29ycmVzcG9uZGluZyB0byB0aGlzIFBESSAqLwotCXBkciA9IGhlcm1lc19maW5kX3BkcihmaXJzdF9wZHIsIHBkaV9pZChwZGkpKTsKKwlwZHIgPSBoZXJtZXNfZmluZF9wZHIoZmlyc3RfcGRyLCBwZGlfaWQocGRpKSwgcGRyX2VuZCk7CiAKIAkvKiBObyBtYXRjaCBpcyBmb3VuZCwgc2FmZSB0byBpZ25vcmUgKi8KIAlpZiAoIXBkcikKQEAgLTM0Nyw3ICszMzAsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc19yZWFkX3BkYSk7CiAKIC8qIFBhcnNlIFBEQSBhbmQgd3JpdGUgdGhlIHJlY29yZHMgaW50byB0aGUgYWRhcHRlcgogICoKQEAgLTM1NiwxOCArMzM4LDIyIEBACiAgKi8KIGludCBoZXJtZXNfYXBwbHlfcGRhKGhlcm1lc190ICpodywKIAkJICAgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCSAgICAgY29uc3QgX19sZTE2ICpwZGEpCisJCSAgICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJICAgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJICAgICBjb25zdCB2b2lkICpwZGFfZW5kKQogewogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHBkaSAqcGRpOwotCXN0cnVjdCBwZHIgKnBkcjsKKwljb25zdCBzdHJ1Y3QgcGRyICpwZHI7CiAKLQlwZHIgPSAoc3RydWN0IHBkciAqKSBmaXJzdF9wZHI7CisJcGRyID0gKGNvbnN0IHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOworCXBkYV9lbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZGkpOwogCiAJLyogR28gdGhyb3VnaCBldmVyeSBQREkgYW5kIHBsdWcgdGhlbSBpbnRvIHRoZSBhZGFwdGVyICovCiAJcGRpID0gKGNvbnN0IHN0cnVjdCBwZGkgKikgKHBkYSArIDIpOwotCXdoaWxlIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSB7Ci0JCXJldCA9IGhlcm1lc19wbHVnX3BkaShodywgcGRyLCBwZGkpOworCXdoaWxlICgoKHZvaWQgKikgcGRpIDw9IHBkYV9lbmQpICYmCisJICAgICAgIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSkgeworCQlyZXQgPSBoZXJtZXNfcGx1Z19wZGkoaHcsIHBkciwgcGRpLCBwZHJfZW5kKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTM3NiwyMSArMzYyLDIzIEBACiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfYXBwbHlfcGRhKTsKIAogLyogSWRlbnRpZnkgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBhbGwgYmxvY2tzCiAgKiBpbmNsdWRpbmcgdGhlIGhlYWRlciBkYXRhLgogICovCiBzaXplX3QKLWhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrKQoraGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCkKIHsKIAljb25zdCBzdHJ1Y3QgZGJsb2NrICpibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSBmaXJzdF9ibG9jazsKIAlpbnQgdG90YWxfbGVuID0gMDsKIAlpbnQgbGVuOwogCisJZW5kIC09IHNpemVvZigqYmxrKTsKKwogCS8qIFNraXAgYWxsIGJsb2NrcyB0byBsb2NhdGUgUGx1ZyBEYXRhIFJlZmVyZW5jZXMKIAkgKiAoU3BlY3RydW0gQ1MpICovCi0Jd2hpbGUgKGRibG9ja19hZGRyKGJsaykgIT0gQkxPQ0tfRU5EKSB7CisJd2hpbGUgKCgodm9pZCAqKSBibGsgPD0gZW5kKSAmJgorCSAgICAgICAoZGJsb2NrX2FkZHIoYmxrKSAhPSBCTE9DS19FTkQpKSB7CiAJCWxlbiA9IGRibG9ja19sZW4oYmxrKTsKIAkJdG90YWxfbGVuICs9IHNpemVvZigqYmxrKSArIGxlbjsKIAkJYmxrID0gKHN0cnVjdCBkYmxvY2sgKikgJmJsay0+ZGF0YVtsZW5dOwpAQCAtMzk4LDcgKzM4Niw2IEBACiAKIAlyZXR1cm4gdG90YWxfbGVuOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfYmxvY2tzX2xlbmd0aCk7CiAKIC8qKiogSGVybWVzIHByb2dyYW1taW5nICoqKi8KIApAQCAtNDUyLDcgKzQzOSw2IEBACiAKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNpX3Byb2dyYW1faW5pdCk7CiAKIC8qIERvbmUgcHJvZ3JhbW1pbmcgZGF0YSAoSGVybWVzIEkpCiAgKgpAQCAtNDg4LDEwICs0NzQsOSBAQAogCiAJcmV0dXJuIHJjID8gcmMgOiBlcnI7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc2lfcHJvZ3JhbV9lbmQpOwogCiAvKiBQcm9ncmFtIHRoZSBkYXRhIGJsb2NrcyAqLwotaW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IGNoYXIgKmVuZCkKK2ludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpCiB7CiAJY29uc3Qgc3RydWN0IGRibG9jayAqYmxrOwogCXUzMiBibGthZGRyOwpAQCAtNTAzLDE0ICs0ODgsMTQgQEAKIAogCWJsayA9IChjb25zdCBzdHJ1Y3QgZGJsb2NrICopIGZpcnN0X2Jsb2NrOwogCi0JaWYgKChjb25zdCBjaGFyICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQorCWlmICgodm9pZCAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlibGthZGRyID0gZGJsb2NrX2FkZHIoYmxrKTsKIAlibGtsZW4gPSBkYmxvY2tfbGVuKGJsayk7CiAKIAl3aGlsZSAoKGJsa2FkZHIgIT0gQkxPQ0tfRU5EKSAmJgotCSAgICAgICAoKChjb25zdCBjaGFyICopIGJsayArIGJsa2xlbikgPD0gZW5kKSkgeworCSAgICAgICAoKCh2b2lkICopIGJsayArIGJsa2xlbikgPD0gZW5kKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKIAkJICAgICAgICJQcm9ncmFtbWluZyBibG9jayBvZiBsZW5ndGggJWQgdG8gYWRkcmVzcyAweCUwOHhcbiIsCiAJCSAgICAgICBibGtsZW4sIGJsa2FkZHIpOwpAQCAtNTQyLDcgKzUyNyw3IEBACiAjZW5kaWYKIAkJYmxrID0gKGNvbnN0IHN0cnVjdCBkYmxvY2sgKikgJmJsay0+ZGF0YVtibGtsZW5dOwogCi0JCWlmICgoY29uc3QgY2hhciAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKKwkJaWYgKCh2b2lkICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJYmxrYWRkciA9IGRibG9ja19hZGRyKGJsayk7CkBAIC01NTAsMTkgKzUzNSw2IEBACiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfcHJvZ3JhbSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaGVybWVzX2RsZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9oZXJtZXNfZGxkKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfaGVybWVzX2RsZCk7Ci1tb2R1bGVfZXhpdChleGl0X2hlcm1lc19kbGQpOwogCiAvKioqIERlZmF1bHQgcGx1Z2dpbmcgZGF0YSBmb3IgSGVybWVzIEkgKioqLwogLyogVmFsdWVzIGZyb20gd2xfbGttXzcxOC9oY2YvZGhmLmMgKi8KQEAgLTU3Myw5ICs1NDUsOSBAQAogCV9fbGUxNiBpZDsJCQkJCQkJXAogCXU4IHZhbFtsZW5ndGhdOwkJCQkJCQlcCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkID0gewkJCVwKLQlfX2NvbnN0YW50X2NwdV90b19sZTE2KChzaXplb2YoZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCkvCQlcCisJY3B1X3RvX2xlMTYoKHNpemVvZihkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkKS8JCQlcCiAJCQkJc2l6ZW9mKF9fbGUxNikpIC0gMSksCQkJXAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYocGlkKSwJCQkJCVwKKwljcHVfdG9fbGUxNihwaWQpLAkJCQkJCVwKIAlkYXRhCQkJCQkJCQlcCiB9CiAKQEAgLTY0NCwxNyArNjE2LDIwIEBACiAgKi8KIGludCBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaGVybWVzX3QgKmh3LAogCQkJCSAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSkKKwkJCQkgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkJCSAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpCiB7CiAJY29uc3Qgc3RydWN0IHBkciAqcGRyID0gKGNvbnN0IHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOwotCXN0cnVjdCBwZGkgKmZpcnN0X3BkaSA9IChzdHJ1Y3QgcGRpICopICZwZGFbMl07Ci0Jc3RydWN0IHBkaSAqcGRpOwotCXN0cnVjdCBwZGkgKmRlZmF1bHRfcGRpID0gTlVMTDsKLQlzdHJ1Y3QgcGRpICpvdXRkb29yX3BkaTsKLQl2b2lkICplbmQgPSAodm9pZCAqKWZpcnN0X3BkciArIE1BWF9QREFfU0laRTsKKwljb25zdCBzdHJ1Y3QgcGRpICpmaXJzdF9wZGkgPSAoY29uc3Qgc3RydWN0IHBkaSAqKSAmcGRhWzJdOworCWNvbnN0IHN0cnVjdCBwZGkgKnBkaTsKKwljb25zdCBzdHJ1Y3QgcGRpICpkZWZhdWx0X3BkaSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IHBkaSAqb3V0ZG9vcl9wZGk7CiAJaW50IHJlY29yZF9pZDsKIAotCXdoaWxlICgoKHZvaWQgKilwZHIgPCBlbmQpICYmCisJcGRyX2VuZCAtPSBzaXplb2Yoc3RydWN0IHBkcik7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkciA8PSBwZHJfZW5kKSAmJgogCSAgICAgICAocGRyX2lkKHBkcikgIT0gUERJX0VORCkpIHsKIAkJLyoKIAkJICogRm9yIHNwZWN0cnVtX2NzIGZpcm13YXJlcywKQEAgLTY2Niw3ICs2NDEsNyBAQAogCQkJYnJlYWs7CiAJCXJlY29yZF9pZCA9IHBkcl9pZChwZHIpOwogCi0JCXBkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCk7CisJCXBkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCwgcGRhX2VuZCk7CiAJCWlmIChwZGkpCiAJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkZvdW5kIHJlY29yZCAweCUwNHggYXQgJXBcbiIsCiAJCQkgICAgICAgcmVjb3JkX2lkLCBwZGkpOwpAQCAtNjc0LDcgKzY0OSw4IEBACiAJCXN3aXRjaCAocmVjb3JkX2lkKSB7CiAJCWNhc2UgMHgxMTA6IC8qIE1vZGVtIFJFRkRBQyB2YWx1ZXMgKi8KIAkJY2FzZSAweDEyMDogLyogTW9kZW0gVkdEQUMgdmFsdWVzICovCi0JCQlvdXRkb29yX3BkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCArIDEpOworCQkJb3V0ZG9vcl9wZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQgKyAxLAorCQkJCQkJICAgICAgcGRhX2VuZCk7CiAJCQlkZWZhdWx0X3BkaSA9IE5VTEw7CiAJCQlpZiAob3V0ZG9vcl9wZGkpIHsKIAkJCQlwZGkgPSBvdXRkb29yX3BkaTsKQEAgLTcxNSw3ICs2OTEsOCBAQAogCiAJCWlmIChwZGkpIHsKIAkJCS8qIExlbmd0aHMgb2YgdGhlIGRhdGEgaW4gUERJIGFuZCBQRFIgbXVzdCBtYXRjaCAqLwotCQkJaWYgKHBkaV9sZW4ocGRpKSA9PSBwZHJfbGVuKHBkcikpIHsKKwkJCWlmICgocGRpX2xlbihwZGkpID09IHBkcl9sZW4ocGRyKSkgJiYKKwkJCSAgICAoKHZvaWQgKikgcGRpLT5kYXRhICsgcGRpX2xlbihwZGkpIDwgcGRhX2VuZCkpIHsKIAkJCQkvKiBkbyB0aGUgYWN0dWFsIHBsdWdnaW5nICovCiAJCQkJaGVybWVzX2F1eF9zZXRhZGRyKGh3LCBwZHJfYWRkcihwZHIpKTsKIAkJCQloZXJtZXNfd3JpdGVfYnl0ZXMoaHcsIEhFUk1FU19BVVhEQVRBLApAQCAtNzI3LDQgKzcwNCwzIEBACiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaAppbmRleCA2ZmNiMjYyLi41ODNhNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaApAQCAtMjksNyArMjksNyBAQAogCiBpbnQgaGVybWVzaV9wcm9ncmFtX2luaXQoaGVybWVzX3QgKmh3LCB1MzIgb2Zmc2V0KTsKIGludCBoZXJtZXNpX3Byb2dyYW1fZW5kKGhlcm1lc190ICpodyk7Ci1pbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3QgY2hhciAqZW5kKTsKK2ludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpOwogCiBpbnQgaGVybWVzX3JlYWRfcGRhKGhlcm1lc190ICpodywKIAkJICAgIF9fbGUxNiAqcGRhLApAQCAtMzgsMTEgKzM4LDE1IEBACiAJCSAgICBpbnQgdXNlX2VlcHJvbSk7CiBpbnQgaGVybWVzX2FwcGx5X3BkYShoZXJtZXNfdCAqaHcsCiAJCSAgICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhKTsKKwkJICAgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkgICAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpOwogaW50IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhoZXJtZXNfdCAqaHcsCiAJCQkJICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhKTsKKwkJCQkgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkJCSAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpOwogCi1zaXplX3QgaGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2spOworc2l6ZV90IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpOwogCiAjZW5kaWYgLyogX0hFUk1FU19ETERfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTQyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qIEVuY2Fwc3VsYXRlIGJhc2ljIHNldHRpbmcgY2hhbmdlcyBhbmQgcmV0cmlldmFsIG9uIEhlcm1lcyBoYXJkd2FyZQorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKworI2luY2x1ZGUgImhlcm1lcy5oIgorI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKyNpbmNsdWRlICJody5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgdGFibGVzIGdpdmVzIHRoZSBhY3R1YWwgbWVhbmluZ3Mgb2YgdGhlIGJpdHJhdGUgSURzIHJldHVybmVkCisgKiBieSB0aGUgZmlybXdhcmUuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgYml0cmF0ZTsgLyogaW4gMTAwcyBvZiBraWxvYml0cyAqLworCWludCBhdXRvbWF0aWM7CisJdTE2IGFnZXJlX3R4cmF0ZWN0cmw7CisJdTE2IGludGVyc2lsX3R4cmF0ZWN0cmw7Cit9IGJpdHJhdGVfdGFibGVbXSA9IHsKKwl7MTEwLCAxLCAgMywgMTV9LCAvKiBFbnRyeSAwIGlzIHRoZSBkZWZhdWx0ICovCisJezEwLCAgMCwgIDEsICAxfSwKKwl7MTAsICAxLCAgMSwgIDF9LAorCXsyMCwgIDAsICAyLCAgMn0sCisJezIwLCAgMSwgIDYsICAzfSwKKwl7NTUsICAwLCAgNCwgIDR9LAorCXs1NSwgIDEsICA3LCAgN30sCisJezExMCwgMCwgIDUsICA4fSwKK307CisjZGVmaW5lIEJJVFJBVEVfVEFCTEVfU0laRSBBUlJBWV9TSVpFKGJpdHJhdGVfdGFibGUpCisKK2ludCBvcmlub2NvX2dldF9iaXRyYXRlbW9kZShpbnQgYml0cmF0ZSwgaW50IGF1dG9tYXRpYykKK3sKKwlpbnQgcmF0ZW1vZGUgPSAtMTsKKwlpbnQgaTsKKworCWlmICgoYml0cmF0ZSAhPSAxMCkgJiYgKGJpdHJhdGUgIT0gMjApICYmCisJICAgIChiaXRyYXRlICE9IDU1KSAmJiAoYml0cmF0ZSAhPSAxMTApKQorCQlyZXR1cm4gcmF0ZW1vZGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaWYgKChiaXRyYXRlX3RhYmxlW2ldLmJpdHJhdGUgPT0gYml0cmF0ZSkgJiYKKwkJICAgIChiaXRyYXRlX3RhYmxlW2ldLmF1dG9tYXRpYyA9PSBhdXRvbWF0aWMpKSB7CisJCQlyYXRlbW9kZSA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmF0ZW1vZGU7Cit9CisKK3ZvaWQgb3Jpbm9jb19nZXRfcmF0ZW1vZGVfY2ZnKGludCByYXRlbW9kZSwgaW50ICpiaXRyYXRlLCBpbnQgKmF1dG9tYXRpYykKK3sKKwlCVUdfT04oKHJhdGVtb2RlIDwgMCkgfHwgKHJhdGVtb2RlID49IEJJVFJBVEVfVEFCTEVfU0laRSkpOworCisJKmJpdHJhdGUgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5iaXRyYXRlICogMTAwMDAwOworCSphdXRvbWF0aWMgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hdXRvbWF0aWM7Cit9CisKKy8qIEdldCB0c2MgZnJvbSB0aGUgZmlybXdhcmUgKi8KK2ludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksIHU4ICp0c2MpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXU4IHRzY19hcnJbNF1bSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisKKwlpZiAoKGtleSA8IDApIHx8IChrZXkgPiA0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfVEtJUF9JViwKKwkJCSAgICAgIHNpemVvZih0c2NfYXJyKSwgTlVMTCwgJnRzY19hcnIpOworCWlmICghZXJyKQorCQltZW1jcHkodHNjLCAmdHNjX2FycltrZXldWzBdLCBzaXplb2YodHNjX2FyclswXSkpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgcmF0ZW1vZGUgPSBwcml2LT5iaXRyYXRlbW9kZTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBJbnZhbGlkIGJpdHJhdGUgbW9kZSAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHJhdGVtb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAorCQkJCWJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmFnZXJlX3R4cmF0ZWN0cmwpOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCUhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKKwkJCQliaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5pbnRlcnNpbF90eHJhdGVjdHJsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYml0cmF0ZSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisJdTE2IHZhbDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DVVJSRU5UVFhSQVRFLCAmdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBMdWNlbnQgc3R5bGUgcmF0ZSAqLworCQkvKiBOb3RlIDogaW4gTHVjZW50IGZpcm13YXJlLCB0aGUgcmV0dXJuIHZhbHVlIG9mCisJCSAqIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSBpcyB0aGUgYml0cmF0ZSBpbiBNYi9zLAorCQkgKiBhbmQgdGhlcmVmb3JlIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlCisJCSAqIGVuY29kaW5nIG9mIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTC4KKwkJICogRG9uJ3QgZm9yZ2V0IHRoYXQgNk1iL3MgaXMgcmVhbGx5IDUuNU1iL3MgKi8KKwkJaWYgKHZhbCA9PSA2KQorCQkJKmJpdHJhdGUgPSA1NTAwMDAwOworCQllbHNlCisJCQkqYml0cmF0ZSA9IHZhbCAqIDEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgcmF0ZSAqLworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSByYXRlICovCisJCWZvciAoaSA9IDA7IGkgPCBCSVRSQVRFX1RBQkxFX1NJWkU7IGkrKykKKwkJCWlmIChiaXRyYXRlX3RhYmxlW2ldLmludGVyc2lsX3R4cmF0ZWN0cmwgPT0gdmFsKQorCQkJCWJyZWFrOworCisJCWlmIChpID49IEJJVFJBVEVfVEFCTEVfU0laRSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYml0cmF0ZSAoMHglMDRoeClcbiIsCisJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgdmFsKTsKKworCQkqYml0cmF0ZSA9IGJpdHJhdGVfdGFibGVbaV0uYml0cmF0ZSAqIDEwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogU2V0IGZpeGVkIEFQIGFkZHJlc3MgKi8KK2ludCBfX29yaW5vY29faHdfc2V0X3dhcChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWludCByb2FtaW5nX2ZsYWc7CisJaW50IGVyciA9IDA7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBub3Qgc3VwcG9ydGVkICovCisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJaWYgKHByaXYtPmJzc2lkX2ZpeGVkKQorCQkJcm9hbWluZ19mbGFnID0gMjsKKwkJZWxzZQorCQkJcm9hbWluZ19mbGFnID0gMTsKKworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUk9BTUlOR01PREUsCisJCQkJCSAgIHJvYW1pbmdfZmxhZyk7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTUFOREFUT1JZQlNTSURfU1lNQk9MLAorCQkJCQkgICZwcml2LT5kZXNpcmVkX2Jzc2lkKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qIENoYW5nZSB0aGUgV0VQIGtleXMgYW5kL29yIHRoZSBjdXJyZW50IGtleXMuICBDYW4gYmUgY2FsbGVkCisgKiBlaXRoZXIgZnJvbSBfX29yaW5vY29faHdfc2V0dXBfZW5jKCkgb3IgZGlyZWN0bHkgZnJvbQorICogb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSgpLiAgSW4gdGhlIGxhdGVyIGNhc2UgdGhlIGFzc29jaWF0aW9uCisgKiB3aXRoIHRoZSBBUCBpcyBub3QgYnJva2VuIChpZiB0aGUgZmlybXdhcmUgY2FuIGhhbmRsZSBpdCksCisgKiB3aGljaCBpcyBuZWVkZWQgZm9yIDgwMi4xeCBpbXBsZW1lbnRhdGlvbnMuICovCitpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GV0VQS0VZU19BR0VSRSwKKwkJCQkJICAmcHJpdi0+a2V5cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GVFhLRVlfQUdFUkUsCisJCQkJCSAgIHByaXYtPnR4X2tleSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJeworCQkJaW50IGtleWxlbjsKKwkJCWludCBpOworCisJCQkvKiBGb3JjZSB1bmlmb3JtIGtleSBsZW5ndGggdG8gd29yayBhcm91bmQKKwkJCSAqIGZpcm13YXJlIGJ1Z3MgKi8KKwkJCWtleWxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbcHJpdi0+dHhfa2V5XS5sZW4pOworCisJCQlpZiAoa2V5bGVuID4gTEFSR0VfS0VZX1NJWkUpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEtleSAlZCBoYXMgb3ZlcnNpemUgbGVuZ3RoICVkLlxuIiwKKwkJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcHJpdi0+dHhfa2V5LCBrZXlsZW4pOworCQkJCXJldHVybiAtRTJCSUc7CisJCQl9CisKKwkJCS8qIFdyaXRlIGFsbCA0IGtleXMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9LRVlTOyBpKyspIHsKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GREVGQVVMVEtFWTAgKyBpLAorCQkJCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihrZXlsZW4pLAorCQkJCQkJcHJpdi0+a2V5c1tpXS5kYXRhKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQkvKiBXcml0ZSB0aGUgaW5kZXggb2YgdGhlIGtleSB1c2VkIGluIHRyYW5zbWlzc2lvbiAqLworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsCisJCQkJCQlwcml2LT50eF9rZXkpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgX19vcmlub2NvX2h3X3NldHVwX2VuYyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwlpbnQgbWFzdGVyX3dlcF9mbGFnOworCWludCBhdXRoX2ZsYWc7CisJaW50IGVuY19mbGFnOworCisJLyogU2V0dXAgV0VQIGtleXMgZm9yIFdFUCBhbmQgV1BBICovCisJaWYgKHByaXYtPmVuY29kZV9hbGcpCisJCV9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOworCisJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKKwkJYXV0aF9mbGFnID0gSEVSTUVTX0FVVEhfU0hBUkVEX0tFWTsKKwllbHNlCisJCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX09QRU47CisKKwlpZiAocHJpdi0+d3BhX2VuYWJsZWQpCisJCWVuY19mbGFnID0gMjsKKwllbHNlIGlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKQorCQllbmNfZmxhZyA9IDE7CisJZWxzZQorCQllbmNfZmxhZyA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEFnZXJlIHN0eWxlIFdFUCAqLworCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgeworCQkJLyogRW5hYmxlIHRoZSBzaGFyZWQta2V5IGF1dGhlbnRpY2F0aW9uLiAqLworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQlIRVJNRVNfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0FHRVJFLAorCQkJCQlhdXRoX2ZsYWcpOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBFTkFCTEVEX0FHRVJFLAorCQkJCQkgICBlbmNfZmxhZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmIChwcml2LT5oYXNfd3BhKSB7CisJCQkvKiBTZXQgV1BBIGtleSBtYW5hZ2VtZW50ICovCisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlNFVFdQQUFVVEhNR01UU1VJVEVfQUdFUkUsCisJCQkJICBwcml2LT5rZXlfbWdtdCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgV0VQICovCisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIFdFUCAqLworCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgeworCQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCB8fAorCQkJICAgIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKSkKKwkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRCB8CisJCQkJCQkgIEhFUk1FU19XRVBfRVhDTF9VTkVOQ1JZUFRFRDsKKwkJCWVsc2UKKwkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRDsKKworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTiwKKwkJCQkJCSAgIGF1dGhfZmxhZyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0gZWxzZQorCQkJbWFzdGVyX3dlcF9mbGFnID0gMDsKKworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCisJCQltYXN0ZXJfd2VwX2ZsYWcgfD0gSEVSTUVTX1dFUF9IT1NUX0RFQ1JZUFQ7CisKKwkJLyogTWFzdGVyIFdFUCBzZXR0aW5nIDogb24vb2ZmICovCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBGTEFHU19JTlRFUlNJTCwKKwkJCQkJICAgbWFzdGVyX3dlcF9mbGFnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCBpbmNsdWRpbmcgdGhlIHR4IGFuZCByeCBNSUMga2V5cy4KKyAqIHJzYyBtdXN0IGJlIDggYnl0ZXMKKyAqIHRzYyBtdXN0IGJlIDggYnl0ZXMgb3IgTlVMTAorICovCitpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShoZXJtZXNfdCAqaHcsIGludCBrZXlfaWR4LCBpbnQgc2V0X3R4LAorCQkJICAgICAgdTggKmtleSwgdTggKnJzYywgdTggKnRzYykKK3sKKwlzdHJ1Y3QgeworCQlfX2xlMTYgaWR4OworCQl1OCByc2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJCXU4IGtleVtUS0lQX0tFWUxFTl07CisJCXU4IHR4X21pY1tNSUNfS0VZTEVOXTsKKwkJdTggcnhfbWljW01JQ19LRVlMRU5dOworCQl1OCB0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOworCWludCByZXQ7CisJaW50IGVycjsKKwlpbnQgazsKKwl1MTYgeG1pdHRpbmc7CisKKwlrZXlfaWR4ICY9IDB4MzsKKworCWlmIChzZXRfdHgpCisJCWtleV9pZHggfD0gMHg4MDAwOworCisJYnVmLmlkeCA9IGNwdV90b19sZTE2KGtleV9pZHgpOworCW1lbWNweShidWYua2V5LCBrZXksCisJICAgICAgIHNpemVvZihidWYua2V5KSArIHNpemVvZihidWYudHhfbWljKSArIHNpemVvZihidWYucnhfbWljKSk7CisKKwlpZiAocnNjID09IE5VTEwpCisJCW1lbXNldChidWYucnNjLCAwLCBzaXplb2YoYnVmLnJzYykpOworCWVsc2UKKwkJbWVtY3B5KGJ1Zi5yc2MsIHJzYywgc2l6ZW9mKGJ1Zi5yc2MpKTsKKworCWlmICh0c2MgPT0gTlVMTCkgeworCQltZW1zZXQoYnVmLnRzYywgMCwgc2l6ZW9mKGJ1Zi50c2MpKTsKKwkJYnVmLnRzY1s0XSA9IDB4MTA7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1Zi50c2MsIHRzYywgc2l6ZW9mKGJ1Zi50c2MpKTsKKwl9CisKKwkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCisJayA9IDEwMDsKKwlkbyB7CisJCWstLTsKKwkJdWRlbGF5KDEwMDApOworCQlyZXQgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9UWFFVRVVFRU1QVFksCisJCQkJCSAgJnhtaXR0aW5nKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKChrID4gMCkgJiYgeG1pdHRpbmcpOworCisJaWYgKGsgPT0gMCkKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKworCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZBRERERUZBVUxUVEtJUEtFWV9BR0VSRSwKKwkJCQkgICZidWYpOworCisJcmV0dXJuIHJldCA/IHJldCA6IGVycjsKK30KKworaW50IG9yaW5vY29fY2xlYXJfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleV9pZHgpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwltZW1zZXQoJnByaXYtPnRraXBfa2V5W2tleV9pZHhdLCAwLCBzaXplb2YocHJpdi0+dGtpcF9rZXlba2V5X2lkeF0pKTsKKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICAgSEVSTUVTX1JJRF9DTkZSRU1ERUZBVUxUVEtJUEtFWV9BR0VSRSwKKwkJCQkgICBrZXlfaWR4KTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgY2xlYXJpbmcgVEtJUCBrZXkgJWRcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIsIGtleV9pZHgpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0LAorCQkJCSAgICBpbnQgbWNfY291bnQsIGludCBwcm9taXNjKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwcm9taXNjICE9IHByaXYtPnByb21pc2N1b3VzKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUk9NSVNDVU9VU01PREUsCisJCQkJCSAgIHByb21pc2MpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFBST01JU0NVT1VTTU9ERSB0byAxLlxuIiwKKwkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIpOworCQl9IGVsc2UKKwkJCXByaXYtPnByb21pc2N1b3VzID0gcHJvbWlzYzsKKwl9CisKKwkvKiBJZiB3ZSdyZSBub3QgaW4gcHJvbWlzY3VvdXMgbW9kZSwgdGhlbiB3ZSBuZWVkIHRvIHNldCB0aGUKKwkgKiBncm91cCBhZGRyZXNzIGlmIGVpdGhlciB3ZSB3YW50IHRvIG11bHRpY2FzdCwgb3IgaWYgd2Ugd2VyZQorCSAqIG11bHRpY2FzdGluZyBhbmQgd2FudCB0byBzdG9wICovCisJaWYgKCFwcm9taXNjICYmIChtY19jb3VudCB8fCBwcml2LT5tY19jb3VudCkpIHsKKwkJc3RydWN0IGRldl9tY19saXN0ICpwID0gbWNfbGlzdDsKKwkJc3RydWN0IGhlcm1lc19tdWx0aWNhc3QgbWNsaXN0OworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQkJLyogcGFyYW5vaWE6IGlzIGxpc3Qgc2hvcnRlciB0aGFuIG1jX2NvdW50PyAqLworCQkJQlVHX09OKCFwKTsKKwkJCS8qIHBhcmFub2lhOiBiYWQgYWRkcmVzcyBzaXplIGluIGxpc3Q/ICovCisJCQlCVUdfT04ocC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pOworCisJCQltZW1jcHkobWNsaXN0LmFkZHJbaV0sIHAtPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCQlwID0gcC0+bmV4dDsKKwkJfQorCisJCWlmIChwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE11bHRpY2FzdCBsaXN0IGlzICIKKwkJCSAgICAgICAibG9uZ2VyIHRoYW4gbWNfY291bnRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOworCisJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCSAgIEhFUk1FU19SSURfQ05GR1JPVVBBRERSRVNTRVMsCisJCQkJICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihtY19jb3VudCAqIEVUSF9BTEVOKSwKKwkJCQkgICAmbWNsaXN0KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbXVsdGljYXN0IGxpc3QuXG4iLAorCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGVycik7CisJCWVsc2UKKwkJCXByaXYtPm1jX2NvdW50ID0gbWNfY291bnQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qIFJldHVybiA6IDwgMCAtPiBlcnJvciBjb2RlIDsgPj0gMCAtPiBsZW5ndGggKi8KK2ludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKKwkJCSBjaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBlc3NpZGJ1ZjsKKwljaGFyICpwID0gKGNoYXIgKikoJmVzc2lkYnVmLnZhbCk7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID4gMCkgeworCQkvKiBXZSByZWFkIHRoZSBkZXNpcmVkIFNTSUQgZnJvbSB0aGUgaGFyZHdhcmUgcmF0aGVyCisJCSAgIHRoYW4gZnJvbSBwcml2LT5kZXNpcmVkX2Vzc2lkLCBqdXN0IGluIGNhc2UgdGhlCisJCSAgIGZpcm13YXJlIGlzIGFsbG93ZWQgdG8gY2hhbmdlIGl0IG9uIHVzLiBJJ20gbm90CisJCSAgIHN1cmUgYWJvdXQgdGhpcyAqLworCQkvKiBNeSBndWVzcyBpcyB0aGF0IHRoZSBPV05TU0lEIHNob3VsZCBhbHdheXMgYmUgd2hhdGV2ZXIKKwkJICogd2Ugc2V0IHRvIHRoZSBjYXJkLCB3aGVyZWFzIENVUlJFTlRfU1NJRCBpcyB0aGUgb25lIHRoYXQKKwkJICogbWF5IGNoYW5nZS4uLiAtIEplYW4gSUkgKi8KKwkJdTE2IHJpZDsKKworCQkqYWN0aXZlID0gMTsKKworCQlyaWQgPSAocHJpdi0+cG9ydF90eXBlID09IDMpID8gSEVSTUVTX1JJRF9DTkZPV05TU0lEIDoKKwkJCUhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQ7CisKKwkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBzaXplb2YoZXNzaWRidWYpLAorCQkJCSAgICAgIE5VTEwsICZlc3NpZGJ1Zik7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxfdW5sb2NrOworCX0gZWxzZSB7CisJCSphY3RpdmUgPSAwOworCisJCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVFNTSUQsCisJCQkJICAgICAgc2l6ZW9mKGVzc2lkYnVmKSwgTlVMTCwgJmVzc2lkYnVmKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbF91bmxvY2s7CisJfQorCisJbGVuID0gbGUxNl90b19jcHUoZXNzaWRidWYubGVuKTsKKwlCVUdfT04obGVuID4gSVdfRVNTSURfTUFYX1NJWkUpOworCisJbWVtc2V0KGJ1ZiwgMCwgSVdfRVNTSURfTUFYX1NJWkUpOworCW1lbWNweShidWYsIHAsIGxlbik7CisJZXJyID0gbGVuOworCisgZmFpbF91bmxvY2s6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9mcmVxKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiBjaGFubmVsOworCWludCBmcmVxID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQ0hBTk5FTCwKKwkJCQkgICZjaGFubmVsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIEludGVyc2lsIGZpcm13YXJlIDEuMy41IHJldHVybnMgMCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLworCWlmIChjaGFubmVsID09IDApIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGNoYW5uZWwgPCAxKSB8fCAoY2hhbm5lbCA+IE5VTV9DSEFOTkVMUykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENoYW5uZWwgb3V0IG9mIHJhbmdlICglZCkhXG4iLAorCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgY2hhbm5lbCk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisKKwl9CisJZnJlcSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJaWYgKGVyciA+IDApCisJCWVyciA9IC1FQlVTWTsKKwlyZXR1cm4gZXJyID8gZXJyIDogZnJlcTsKK30KKworaW50IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgaW50ICpudW1yYXRlcywgczMyICpyYXRlcywgaW50IG1heCkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBsaXN0OworCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZsaXN0LnZhbDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgbnVtOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1VQUE9SVEVEREFUQVJBVEVTLAorCQkJICAgICAgc2l6ZW9mKGxpc3QpLCBOVUxMLCAmbGlzdCk7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwludW0gPSBsZTE2X3RvX2NwdShsaXN0Lmxlbik7CisJKm51bXJhdGVzID0gbnVtOworCW51bSA9IG1pbihudW0sIG1heCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCXJhdGVzW2ldID0gKHBbaV0gJiAweDdmKSAqIDUwMDAwMDsgLyogY29udmVydCB0byBicHMgKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjM2YyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKQEAgLTAsMCArMSw0NyBAQAorLyogRW5jYXBzdWxhdGUgYmFzaWMgc2V0dGluZyBjaGFuZ2VzIG9uIEhlcm1lcyBoYXJkd2FyZQorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX0hXX0hfCisjZGVmaW5lIF9PUklOT0NPX0hXX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKy8qIEhhcmR3YXJlIEJBUHMgKi8KKyNkZWZpbmUgVVNFUl9CQVAgMAorI2RlZmluZSBJUlFfQkFQICAxCisKKy8qIFdFUCBrZXkgc2l6ZXMgKi8KKyNkZWZpbmUgU01BTExfS0VZX1NJWkUgNQorI2RlZmluZSBMQVJHRV9LRVlfU0laRSAxMworCisvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIGNoYW5uZWxzICovCisjZGVmaW5lIE5VTV9DSEFOTkVMUyAxNAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKK3N0cnVjdCBkZXZfYWRkcl9saXN0OworCitpbnQgb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoaW50IGJpdHJhdGUsIGludCBhdXRvbWF0aWMpOwordm9pZCBvcmlub2NvX2dldF9yYXRlbW9kZV9jZmcoaW50IHJhdGVtb2RlLCBpbnQgKmJpdHJhdGUsIGludCAqYXV0b21hdGljKTsKKworaW50IG9yaW5vY29faHdfZ2V0X3RraXBfaXYoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleSwgdTggKnRzYyk7CitpbnQgX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYml0cmF0ZSk7CitpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX2h3X3NldHVwX2VuYyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCisJCQkgICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKTsKK2ludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4KTsKK2ludCBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0LAorCQkJCSAgICBpbnQgbWNfY291bnQsIGludCBwcm9taXNjKTsKK2ludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKKwkJCSBjaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSk7CitpbnQgb3Jpbm9jb19od19nZXRfZnJlcShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJICAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpOworCisjZW5kaWYgLyogX09SSU5PQ09fSFdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1NTkzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC0wLDAgKzEsMjY2NyBAQAorLyogbWFpbi5jIC0gKGZvcm1lcmx5IGtub3duIGFzIGRsZHdkX2NzLmMsIG9yaW5vY29fY3MuYyBhbmQgb3Jpbm9jby5jKQorICoKKyAqIEEgZHJpdmVyIGZvciBIZXJtZXMgb3IgUHJpc20gMiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcworICogYWRhcHRvcnMsIHdpdGggTHVjZW50L0FnZXJlLCBJbnRlcnNpbCBvciBTeW1ib2wgZmlybXdhcmUuCisgKgorICogQ3VycmVudCBtYWludGFpbmVycyAoYXMgb2YgMjkgU2VwdGVtYmVyIDIwMDMpIGFyZToKKyAqIAlQYXZlbCBSb3NraW4gPHByb3NraSBBVCBnbnUub3JnPgorICogYW5kCURhdmlkIEdpYnNvbiA8aGVybWVzIEFUIGdpYnNvbi5kcm9wYmVhci5pZC5hdT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uIDIwMDEtMjAwMy4KKyAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCisgKglXaXRoIHNvbWUgaGVscCBmcm9tIDoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBKZWFuIFRvdXJyaWxoZXMsIEhQIExhYnMKKyAqIENvcHlyaWdodCAoQykgMjAwMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0CisgKgorICogQmFzZWQgb24gZHVtbXlfY3MuYyAxLjI3IDIwMDAvMDYvMTIgMjE6Mjc6MjUKKyAqCisgKiBQb3J0aW9ucyBiYXNlZCBvbiB3dmxhbl9jcy5jIDEuMC42LCBDb3B5cmlnaHQgQW5kcmVhcyBOZXVoYXVzIDxhbmR5CisgKiBBVCBmYXN0YS5maC1kb3J0bXVuZC5kZT4KKyAqICAgICAgaHR0cDovL3d3dy5zdHVkLmZoLWRvcnRtdW5kLmRlL35hbmR5L3d2bGFuLworICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCisgKiBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisgKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCisgKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAqIDxkYWhpbmRzIEFUIHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkCisgKiBBLiBIaW5kcyBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cworICogUmVzZXJ2ZWQuCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluCisgKiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyAqIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgKiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQorICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLiAgKi8KKworLyoKKyAqIFRPRE8KKyAqCW8gSGFuZGxlIGRlLWVuY2Fwc3VsYXRpb24gd2l0aGluIG5ldHdvcmsgbGF5ZXIsIHByb3ZpZGUgODAyLjExCisgKgkgIGhlYWRlcnMgKHBhdGNoIGZyb20gVGhvbWFzICdEZW50JyBNaXJsYWNoZXIpCisgKglvIEZpeCBwb3NzaWJsZSByYWNlcyBpbiBTUFkgaGFuZGxpbmcuCisgKglvIERpc2Nvbm5lY3Qgd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcm9tIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24uCisgKglvIChtYXliZSkgU29mdHdhcmUgV0VQIHN1cHBvcnQgKHBhdGNoIGZyb20gU3Rhbm8gTWVkdW5hKS4KKyAqCW8gKG1heWJlKSBVc2UgbXVsdGlwbGUgVHggYnVmZmVycyAtIGRyaXZlciBoYW5kbGluZyBxdWV1ZQorICoJICByYXRoZXIgdGhhbiBmaXJtd2FyZS4KKyAqLworCisvKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb246CisgKgorICogVGhlIGJhc2ljIHByaW5jaXBsZSBpcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgc2VyaWFsaXplZCB0aHJvdWdoIGEKKyAqIHNpbmdsZSBzcGlubG9jaywgcHJpdi0+bG9jay4gIFRoZSBsb2NrIGlzIHVzZWQgaW4gdXNlciwgYmggYW5kIGlycQorICogY29udGV4dCwgc28gd2hlbiB0YWtlbiBvdXRzaWRlIGhhcmRpcnEgY29udGV4dCBpdCBzaG91bGQgYWx3YXlzIGJlCisgKiB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICBUaGUgbG9jayBwcm90ZWN0cyBib3RoIHRoZQorICogaGFyZHdhcmUgYW5kIHRoZSBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLgorICoKKyAqIEFub3RoZXIgZmxhZywgcHJpdi0+aHdfdW5hdmFpbGFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIGlzCisgKiB1bmF2YWlsYWJsZSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUgKGUuZy4gc3VzcGVuZGVkLCBvciBpbgorICogdGhlIG1pZGRsZSBvZiBhIGhhcmQgcmVzZXQpLiAgVGhpcyBmbGFnIGlzIHByb3RlY3RlZCBieSB0aGUKKyAqIHNwaW5sb2NrLiAgQWxsIGNvZGUgd2hpY2ggdG91Y2hlcyB0aGUgaGFyZHdhcmUgc2hvdWxkIGNoZWNrIHRoZQorICogZmxhZyBhZnRlciB0YWtpbmcgdGhlIGxvY2ssIGFuZCBpZiBpdCBpcyBzZXQsIGdpdmUgdXAgb24gd2hhdGV2ZXIKKyAqIHRoZXkgYXJlIGRvaW5nIGFuZCBkcm9wIHRoZSBsb2NrIGFnYWluLiAgVGhlIG9yaW5vY29fbG9jaygpCisgKiBmdW5jdGlvbiBoYW5kbGVzIHRoaXMgKGl0IHVubG9ja3MgYW5kIHJldHVybnMgLUVCVVNZIGlmCisgKiBod191bmF2YWlsYWJsZSBpcyBub24temVybykuCisgKi8KKworI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jbyIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisKKyNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCisjaW5jbHVkZSAiaGVybWVzX2RsZC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAic2Nhbi5oIgorI2luY2x1ZGUgIm1pYy5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAid2V4dC5oIgorI2luY2x1ZGUgIm1haW4uaCIKKworI2luY2x1ZGUgIm9yaW5vY28uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTW9kdWxlIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitNT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmICIKKwkgICAgICAiRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEx1Y2VudCBPcmlub2NvLCBQcmlzbSBJSSBiYXNlZCAiCisJCSAgICJhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOworCisvKiBMZXZlbCBvZiBkZWJ1Z2dpbmcuIFVzZWQgaW4gdGhlIG1hY3JvcyBpbiBvcmlub2NvLmggKi8KKyNpZmRlZiBPUklOT0NPX0RFQlVHCitpbnQgb3Jpbm9jb19kZWJ1ZyA9IE9SSU5PQ09fREVCVUc7CitFWFBPUlRfU1lNQk9MKG9yaW5vY29fZGVidWcpOworbW9kdWxlX3BhcmFtKG9yaW5vY29fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG9yaW5vY29fZGVidWcsICJEZWJ1ZyBsZXZlbCIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgc3VwcHJlc3NfbGlua3N0YXR1czsgLyogPSAwICovCittb2R1bGVfcGFyYW0oc3VwcHJlc3NfbGlua3N0YXR1cywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN1cHByZXNzX2xpbmtzdGF0dXMsICJEb24ndCBsb2cgbGluayBzdGF0dXMgY2hhbmdlcyIpOworCitzdGF0aWMgaW50IGlnbm9yZV9kaXNjb25uZWN0OyAvKiA9IDAgKi8KK21vZHVsZV9wYXJhbShpZ25vcmVfZGlzY29ubmVjdCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2Rpc2Nvbm5lY3QsCisJCSAiRG9uJ3QgcmVwb3J0IGxvc3QgbGluayB0byB0aGUgbmV0d29yayBsYXllciIpOworCitpbnQgZm9yY2VfbW9uaXRvcjsgLyogPSAwICovCittb2R1bGVfcGFyYW0oZm9yY2VfbW9uaXRvciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfbW9uaXRvciwgIkFsbG93IG1vbml0b3IgbW9kZSBmb3IgYWxsIGZpcm13YXJlIHZlcnNpb25zIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVybmFsIGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogODAyLjIgTExDL1NOQVAgaGVhZGVyIHVzZWQgZm9yIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24gb3ZlciA4MDIuMTEgKi8KK3N0YXRpYyBjb25zdCB1OCBlbmNhcHNfaGRyW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CisjZGVmaW5lIEVOQ0FQU19PVkVSSEVBRAkJKHNpemVvZihlbmNhcHNfaGRyKSArIDIpCisKKyNkZWZpbmUgT1JJTk9DT19NSU5fTVRVCQkyNTYKKyNkZWZpbmUgT1JJTk9DT19NQVhfTVRVCQkoSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIEVOQ0FQU19PVkVSSEVBRCkKKworI2RlZmluZSBTWU1CT0xfTUFYX1ZFUl9MRU4JKDE0KQorI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0lSUQkxMAorI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZCSgyMDAwMC9IWikgLyogQmFzZWQgb24gYSBndWVzdGltYXRlIG9mCisJCQkJCSAgICAqIGhvdyBtYW55IGV2ZW50cyB0aGUKKwkJCQkJICAgICogZGV2aWNlIGNvdWxkCisJCQkJCSAgICAqIGxlZ2l0aW1hdGVseSBnZW5lcmF0ZSAqLworI2RlZmluZSBUWF9OSUNCVUZfU0laRV9CVUcJMTU4NQkJLyogQnVnIGluIFN5bWJvbCBmaXJtd2FyZSAqLworCisjZGVmaW5lIERVTU1ZX0ZJRAkJMHhGRkZGCisKKy8qI2RlZmluZSBNQVhfTVVMVElDQVNUKHByaXYpCShwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUgPyBcCisgIEhFUk1FU19NQVhfTVVMVElDQVNUIDogMCkqLworI2RlZmluZSBNQVhfTVVMVElDQVNUKHByaXYpCShIRVJNRVNfTUFYX01VTFRJQ0FTVCkKKworI2RlZmluZSBPUklOT0NPX0lOVEVOCSAJKEhFUk1FU19FVl9SWCB8IEhFUk1FU19FVl9BTExPQyBcCisJCQkJIHwgSEVSTUVTX0VWX1RYIHwgSEVSTUVTX0VWX1RYRVhDIFwKKwkJCQkgfCBIRVJNRVNfRVZfV1RFUlIgfCBIRVJNRVNfRVZfSU5GTyBcCisJCQkJIHwgSEVSTUVTX0VWX0lORkRST1ApCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGF0YSB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCZWdpbm5pbmcgb2YgdGhlIFR4IGRlc2NyaXB0b3IsIHVzZWQgaW4gVHhFeGMgaGFuZGxpbmcgKi8KK3N0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSB7CisJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFJ4IGZyYW1lIGhlYWRlciBleGNlcHQgY29tcGF0aWJpbGl0eSA4MDIuMyBoZWFkZXIgKi8KK3N0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciB7CisJLyogQ29udHJvbCAqLworCV9fbGUxNiBzdGF0dXM7CisJX19sZTMyIHRpbWU7CisJdTggc2lsZW5jZTsKKwl1OCBzaWduYWw7CisJdTggcmF0ZTsKKwl1OCByeGZsb3c7CisJX19sZTMyIHJlc2VydmVkOworCisJLyogODAyLjExIGhlYWRlciAqLworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IGFkZHI0W0VUSF9BTEVOXTsKKworCS8qIERhdGEgbGVuZ3RoICovCisJX19sZTE2IGRhdGFfbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBvcmlub2NvX3J4X2RhdGEgeworCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKKwljYXNlIElXX01PREVfSU5GUkE6CisJCXByaXYtPnBvcnRfdHlwZSA9IDE7CisJCXByaXYtPmNyZWF0ZWlic3MgPSAwOworCQlicmVhazsKKwljYXNlIElXX01PREVfQURIT0M6CisJCWlmIChwcml2LT5wcmVmZXJfcG9ydDMpIHsKKwkJCXByaXYtPnBvcnRfdHlwZSA9IDM7CisJCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnBvcnRfdHlwZSA9IHByaXYtPmlic3NfcG9ydDsKKwkJCXByaXYtPmNyZWF0ZWlic3MgPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQlwcml2LT5wb3J0X3R5cGUgPSAzOworCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBwcml2LT5pd19tb2RlIGluIHNldF9wb3J0X3R5cGUoKVxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGV2aWNlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG9yaW5vY29fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gX19vcmlub2NvX3VwKGRldik7CisKKwlpZiAoIWVycikKKwkJcHJpdi0+b3BlbiA9IDE7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKworCS8qIFdlIG11c3RuJ3QgdXNlIG9yaW5vY29fbG9jaygpIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byBiZQorCSAgIGFibGUgdG8gY2xvc2UgdGhlIGludGVyZmFjZSBldmVuIGlmIGh3X3VuYXZhaWxhYmxlIGlzIHNldAorCSAgIChlLmcuIGFzIHdlJ3JlIHJlbGVhc2VkIGFmdGVyIGEgUEMgQ2FyZCByZW1vdmFsKSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcHJpdi0+b3BlbiA9IDA7CisKKwllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqb3Jpbm9jb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAmcHJpdi0+c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoKSAiCisJCSAgICAgICAiY2FsbGVkIHdoZW4gaHdfdW5hdmFpbGFibGVcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKK30KKworc3RhdGljIGludCBvcmlub2NvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoKG5ld19tdHUgPCBPUklOT0NPX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gT1JJTk9DT19NQVhfTVRVKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBNVFUgKyBlbmNhcHN1bGF0aW9uICsgaGVhZGVyIGxlbmd0aCAqLworCWlmICgobmV3X210dSArIEVOQ0FQU19PVkVSSEVBRCArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpID4KKwkgICAgIChwcml2LT5uaWNidWZfc2l6ZSAtIEVUSF9ITEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPm10dSA9IG5ld19tdHU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVHggcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG9yaW5vY29feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTE2IHR4ZmlkID0gcHJpdi0+dHhmaWQ7CisJc3RydWN0IGV0aGhkciAqZWg7CisJaW50IHR4X2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IG9uIHN0b3BwZWQgZGV2aWNlIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggd2hpbGUgdHJhbnNtaXR0ZXIgYnVzeSFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb194bWl0KCkgY2FsbGVkIHdoaWxlIGh3X3VuYXZhaWxhYmxlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8IChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKKwkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCisJCSAgIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCAodGhpcyBzZWVtcyB0byBiZSB0aGUKKwkJICAgc2FmZXN0IGFwcHJvYWNoKS4gKi8KKwkJZ290byBkcm9wOworCX0KKworCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KKwlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikKKwkJZ290byBkcm9wOworCisJdHhfY29udHJvbCA9IEhFUk1FU19UWENUUkxfVFhfT0sgfCBIRVJNRVNfVFhDVFJMX1RYX0VYOworCisJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKQorCQl0eF9jb250cm9sIHw9IChwcml2LT50eF9rZXkgPDwgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpIHwKKwkJCUhFUk1FU19UWENUUkxfTUlDOworCisJaWYgKHByaXYtPmhhc19hbHRfdHhjbnRsKSB7CisJCS8qIFdQQSBlbmFibGVkIGZpcm13YXJlcyBoYXZlIHR4X2NudGwgYXQgdGhlIGVuZCBvZgorCQkgKiB0aGUgODAyLjExIGhlYWRlci4gIFNvIHdyaXRlIHplcm9lZCBkZXNjcmlwdG9yIGFuZAorCQkgKiA4MDIuMTEgaGVhZGVyIGF0IHRoZSBzYW1lIHRpbWUKKwkJICovCisJCWNoYXIgZGVzY1tIRVJNRVNfODAyXzNfT0ZGU0VUXTsKKwkJX19sZTE2ICp0eGNudGwgPSAoX19sZTE2ICopICZkZXNjW0hFUk1FU19UWENOVEwyX09GRlNFVF07CisKKwkJbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJCSp0eGNudGwgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAorCQkJCQl0eGZpZCwgMCk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCisJCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBidXN5OworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CisKKwkJbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJCWRlc2MudHhfY29udHJvbCA9IGNwdV90b19sZTE2KHR4X2NvbnRyb2wpOworCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZkZXNjLCBzaXplb2YoZGVzYyksCisJCQkJCXR4ZmlkLCAwKTsKKwkJaWYgKGVycikgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIFR4ICIKKwkJCQkgICAgICAgImRlc2NyaXB0b3IgdG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGJ1c3k7CisJCX0KKworCQkvKiBDbGVhciB0aGUgODAyLjExIGhlYWRlciBhbmQgZGF0YSBsZW5ndGggZmllbGRzIC0gc29tZQorCQkgKiBmaXJtd2FyZXMgKGUuZy4gTHVjZW50L0FnZXJlIDgueHgpIGFwcGVhciB0byBnZXQgY29uZnVzZWQKKwkJICogaWYgdGhpcyBpc24ndCBkb25lLiAqLworCQloZXJtZXNfY2xlYXJfd29yZHMoaHcsIEhFUk1FU19EQVRBMCwKKwkJCQkgICBIRVJNRVNfODAyXzNfT0ZGU0VUIC0gSEVSTUVTXzgwMl8xMV9PRkZTRVQpOworCX0KKworCWVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisKKwkvKiBFbmNhcHN1bGF0ZSBFdGhlcm5ldC1JSSBmcmFtZXMgKi8KKwlpZiAobnRvaHMoZWgtPmhfcHJvdG8pID4gRVRIX0RBVEFfTEVOKSB7IC8qIEV0aGVybmV0LUlJIGZyYW1lICovCisJCXN0cnVjdCBoZWFkZXJfc3RydWN0IHsKKwkJCXN0cnVjdCBldGhoZHIgZXRoOwkvKiA4MDIuMyBoZWFkZXIgKi8KKwkJCXU4IGVuY2FwWzZdOwkJLyogODAyLjIgaGVhZGVyICovCisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhkcjsKKworCQkvKiBTdHJpcCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIGZyb20gdGhlIGRhdGEgKi8KKwkJc2tiX3B1bGwoc2tiLCAyICogRVRIX0FMRU4pOworCisJCS8qIEFuZCBtb3ZlIHRoZW0gdG8gYSBzZXBhcmF0ZSBoZWFkZXIgKi8KKwkJbWVtY3B5KCZoZHIuZXRoLCBlaCwgMiAqIEVUSF9BTEVOKTsKKwkJaGRyLmV0aC5oX3Byb3RvID0gaHRvbnMoc2l6ZW9mKGVuY2Fwc19oZHIpICsgc2tiLT5sZW4pOworCQltZW1jcHkoaGRyLmVuY2FwLCBlbmNhcHNfaGRyLCBzaXplb2YoZW5jYXBzX2hkcikpOworCisJCS8qIEluc2VydCB0aGUgU05BUCBoZWFkZXIgKi8KKwkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKGhkcikpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogTm90IGVub3VnaCBoZWFkcm9vbSBmb3IgODAyLjIgaGVhZGVycyAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHNrYl9oZWFkcm9vbShza2IpKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCQllaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKGhkcikpOworCQltZW1jcHkoZWgsICZoZHIsIHNpemVvZihoZHIpKTsKKwl9CisKKwllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBwYWNrZXQgdG8gQkFQXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGJ1c3k7CisJfQorCisJLyogQ2FsY3VsYXRlIE1pY2hhZWwgTUlDICovCisJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB7CisJCXU4IG1pY19idWZbTUlDSEFFTF9NSUNfTEVOICsgMV07CisJCXU4ICptaWM7CisJCXNpemVfdCBvZmZzZXQ7CisJCXNpemVfdCBsZW47CisKKwkJaWYgKHNrYi0+bGVuICUgMikgeworCQkJLyogTUlDIHN0YXJ0IGlzIG9uIGFuIG9kZCBib3VuZGFyeSAqLworCQkJbWljX2J1ZlswXSA9IHNrYi0+ZGF0YVtza2ItPmxlbiAtIDFdOworCQkJbWljID0gJm1pY19idWZbMV07CisJCQlvZmZzZXQgPSBza2ItPmxlbiAtIDE7CisJCQlsZW4gPSBNSUNIQUVMX01JQ19MRU4gKyAxOworCQl9IGVsc2UgeworCQkJbWljID0gJm1pY19idWZbMF07CisJCQlvZmZzZXQgPSBza2ItPmxlbjsKKwkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTjsKKwkJfQorCisJCW9yaW5vY29fbWljKHByaXYtPnR4X3RmbV9taWMsCisJCQkgICAgcHJpdi0+dGtpcF9rZXlbcHJpdi0+dHhfa2V5XS50eF9taWMsCisJCQkgICAgZWgtPmhfZGVzdCwgZWgtPmhfc291cmNlLCAwIC8qIHByaW9yaXR5ICovLAorCQkJICAgIHNrYi0+ZGF0YSArIEVUSF9ITEVOLCBza2ItPmxlbiAtIEVUSF9ITEVOLCBtaWMpOworCisJCS8qIFdyaXRlIHRoZSBNSUMgKi8KKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmbWljX2J1ZlswXSwgbGVuLAorCQkJCQl0eGZpZCwgSEVSTUVTXzgwMl8zX09GRlNFVCArIG9mZnNldCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgTUlDIHRvIEJBUFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGJ1c3k7CisJCX0KKwl9CisKKwkvKiBGaW5hbGx5LCB3ZSBhY3R1YWxseSBpbml0aWF0ZSB0aGUgc2VuZCAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RYIHwgSEVSTUVTX0NNRF9SRUNMLAorCQkJCXR4ZmlkLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB0cmFuc21pdHRpbmcgcGFja2V0XG4iLAorCQkJCWRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBidXN5OworCX0KKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXN0YXRzLT50eF9ieXRlcyArPSBIRVJNRVNfODAyXzNfT0ZGU0VUICsgc2tiLT5sZW47CisJZ290byBvazsKKworIGRyb3A6CisJc3RhdHMtPnR4X2Vycm9ycysrOworCXN0YXRzLT50eF9kcm9wcGVkKys7CisKKyBvazoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCisgYnVzeToKKwlpZiAoZXJyID09IC1FSU8pCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCk7CisKKwlpZiAoZmlkICE9IHByaXYtPnR4ZmlkKSB7CisJCWlmIChmaWQgIT0gRFVNTVlfRklEKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEFsbG9jYXRlIGV2ZW50IG9uIHVuZXhwZWN0ZWQgZmlkICglMDRYKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZpZCk7CisJCXJldHVybjsKKwl9CisKKwloZXJtZXNfd3JpdGVfcmVnbihodywgQUxMT0NGSUQsIERVTU1ZX0ZJRCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCisJc3RhdHMtPnR4X3BhY2tldHMrKzsKKworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKworCWhlcm1lc193cml0ZV9yZWduKGh3LCBUWENPTVBMRklELCBEVU1NWV9GSUQpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHhleGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCk7CisJdTE2IHN0YXR1czsKKwlzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgaGRyOworCWludCBlcnIgPSAwOworCisJaWYgKGZpZCA9PSBEVU1NWV9GSUQpCisJCXJldHVybjsgLyogTm90aGluZydzIHJlYWxseSBoYXBwZW5lZCAqLworCisJLyogUmVhZCBwYXJ0IG9mIHRoZSBmcmFtZSBoZWFkZXIgLSB3ZSBuZWVkIHN0YXR1cyBhbmQgYWRkcjEgKi8KKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmaGRyLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEpLAorCQkJICAgICAgIGZpZCwgMCk7CisKKwloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVhZCBkZXNjcmlwdG9yIG9uIFR4IGVycm9yICIKKwkJICAgICAgICIoRklEPSUwNFggZXJyb3IgJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBmaWQsIGVycik7CisJCXJldHVybjsKKwl9CisKKwlERUJVRygxLCAiJXM6IFR4IGVycm9yLCBlcnIgJWQgKEZJRD0lMDRYKVxuIiwgZGV2LT5uYW1lLAorCSAgICAgIGVyciwgZmlkKTsKKworCS8qIFdlIHByb2R1Y2UgYSBUWERST1AgZXZlbnQgb25seSBmb3IgcmV0cnkgb3IgbGlmZXRpbWUKKwkgKiBleGNlZWRlZCwgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgc3RhdHVzIHRoYXQgcmVhbGx5IG1lYW4KKwkgKiB0aGF0IHRoaXMgcGFydGljdWxhciBub2RlIHdlbnQgYXdheS4KKwkgKiBPdGhlciBlcnJvcnMgbWVhbnMgdGhhdCAqd2UqIHNjcmV3ZWQgdXAuIC0gSmVhbiBJSSAqLworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGhkci5kZXNjLnN0YXR1cyk7CisJaWYgKHN0YXR1cyAmIChIRVJNRVNfVFhTVEFUX1JFVFJZRVJSIHwgSEVSTUVTX1RYU1RBVF9BR0VERVJSKSkgeworCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CisKKwkJLyogQ29weSA4MDIuMTEgZGVzdCBhZGRyZXNzLgorCQkgKiBXZSB1c2UgdGhlIDgwMi4xMSBoZWFkZXIgYmVjYXVzZSB0aGUgZnJhbWUgbWF5CisJCSAqIG5vdCBiZSA4MDIuMyBvciBtYXkgYmUgbWFuZ2xlZC4uLgorCQkgKiBJbiBBZC1Ib2MgbW9kZSwgaXQgd2lsbCBiZSB0aGUgbm9kZSBhZGRyZXNzLgorCQkgKiBJbiBtYW5hZ2VkIG1vZGUsIGl0IHdpbGwgYmUgbW9zdCBsaWtlbHkgdGhlIEFQIGFkZHIKKwkJICogVXNlciBzcGFjZSB3aWxsIGZpZ3VyZSBvdXQgaG93IHRvIGNvbnZlcnQgaXQgdG8KKwkJICogd2hhdGV2ZXIgaXQgbmVlZHMgKElQIGFkZHJlc3Mgb3IgZWxzZSkuCisJCSAqIC0gSmVhbiBJSSAqLworCQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIGhkci5hZGRyMSwgRVRIX0FMRU4pOworCQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCisJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVlRYRFJPUCwgJndycXUsIE5VTEwpOworCX0KKworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFR4IHRpbWVvdXQhICIKKwkgICAgICAgIkFMTE9DRklEPSUwNHgsIFRYQ09NUExGSUQ9JTA0eCwgRVZTVEFUPSUwNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpLAorCSAgICAgICBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKSwgaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKSk7CisKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisKKwlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUnggcGF0aCAoZGF0YSBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEb2VzIHRoZSBmcmFtZSBoYXZlIGEgU05BUCBoZWFkZXIgaW5kaWNhdGluZyBpdCBzaG91bGQgYmUKKyAqIGRlLWVuY2Fwc3VsYXRlZCB0byBFdGhlcm5ldC1JST8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V0aGVyc25hcCh2b2lkICpfaGRyKQoreworCXU4ICpoZHIgPSBfaGRyOworCisJLyogV2UgZGUtZW5jYXBzdWxhdGUgYWxsIHBhY2tldHMgd2hpY2gsIGEpIGhhdmUgU05BUCBoZWFkZXJzCisJICogKGkuZS4gU1NBUD1EU0FQPTB4YWEgYW5kIENUUkw9MHgzIGluIHRoZSA4MDIuMiBMTEMgaGVhZGVyCisJICogYW5kIHdoZXJlIGIpIHRoZSBPVUkgb2YgdGhlIFNOQVAgaGVhZGVyIGlzIDAwOjAwOjAwIG9yCisJICogMDA6MDA6ZjggLSB3ZSBuZWVkIGJvdGggYmVjYXVzZSBkaWZmZXJlbnQgQVBzIGFwcGVhciB0byB1c2UKKwkgKiBkaWZmZXJlbnQgT1VJcyBmb3Igc29tZSByZWFzb24gKi8KKwlyZXR1cm4gKG1lbWNtcChoZHIsICZlbmNhcHNfaGRyLCA1KSA9PSAwKQorCQkmJiAoKGhkcls1XSA9PSAweDAwKSB8fCAoaGRyWzVdID09IDB4ZjgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgKm1hYywKKwkJCQkgICAgICBpbnQgbGV2ZWwsIGludCBub2lzZSkKK3sKKwlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7CisJd3N0YXRzLmxldmVsID0gbGV2ZWwgLSAweDk1OworCXdzdGF0cy5ub2lzZSA9IG5vaXNlIC0gMHg5NTsKKwl3c3RhdHMucXVhbCA9IChsZXZlbCA+IG5vaXNlKSA/IChsZXZlbCAtIG5vaXNlKSA6IDA7CisJd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07CisJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIG1hYywgJndzdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc3RhdF9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIFVzaW5nIHNweSBzdXBwb3J0IHdpdGggbG90cyBvZiBSeCBwYWNrZXRzLCBsaWtlIGluIGFuCisJICogaW5mcmFzdHJ1Y3R1cmUgKEFQKSwgd2lsbCByZWFsbHkgc2xvdyBkb3duIGV2ZXJ5dGhpbmcsIGJlY2F1c2UKKwkgKiB0aGUgTUFDIGFkZHJlc3MgbXVzdCBiZSBjb21wYXJlZCB0byBlYWNoIGVudHJ5IG9mIHRoZSBzcHkgbGlzdC4KKwkgKiBJZiB0aGUgdXNlciByZWFsbHkgYXNrcyBmb3IgaXQgKHNldCBzb21lIGFkZHJlc3MgaW4gdGhlCisJICogc3B5IGxpc3QpLCB3ZSBkbyBpdCwgYnV0IGhlIHdpbGwgcGF5IHRoZSBwcmljZS4KKwkgKiBOb3RlIHRoYXQgdG8gZ2V0IGhlcmUsIHlvdSBuZWVkIGJvdGggV0lSRUxFU1NfU1BZCisJICogY29tcGlsZWQgaW4gQU5EIHNvbWUgYWRkcmVzc2VzIGluIHRoZSBsaXN0ICEhIQorCSAqLworCS8qIE5vdGUgOiBnY2Mgd2lsbCBvcHRpbWlzZSB0aGUgd2hvbGUgc2VjdGlvbiBhd2F5IGlmCisJICogV0lSRUxFU1NfU1BZIGlzIG5vdCBkZWZpbmVkLi4uIC0gSmVhbiBJSSAqLworCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7CisJCW9yaW5vY29fc3B5X2dhdGhlcihkZXYsIHNrYl9tYWNfaGVhZGVyKHNrYikgKyBFVEhfQUxFTiwKKwkJCQkgICBkZXNjLT5zaWduYWwsIGRlc2MtPnNpbGVuY2UpOworCX0KK30KKworLyoKKyAqIG9yaW5vY29fcnhfbW9uaXRvciAtIGhhbmRsZSByZWNlaXZlZCBtb25pdG9yIGZyYW1lcy4KKyAqCisgKiBBcmd1bWVudHM6CisgKglkZXYJCW5ldHdvcmsgZGV2aWNlCisgKglyeGZpZAkJcmVjZWl2ZWQgRklECisgKglkZXNjCQlyeCBkZXNjcmlwdG9yIG9mIHRoZSBmcmFtZQorICoKKyAqIENhbGwgY29udGV4dDogaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fcnhfbW9uaXRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcnhmaWQsCisJCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQoreworCXUzMiBoZHJsZW4gPSAzMDsJLyogcmV0dXJuIGZ1bGwgaGVhZGVyIGJ5IGRlZmF1bHQgKi8KKwl1MzIgZGF0YWxlbiA9IDA7CisJdTE2IGZjOworCWludCBlcnI7CisJaW50IGxlbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisKKwlsZW4gPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7CisKKwkvKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGRhdGEgKi8KKwlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7CisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKKwkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCisJCSAgICAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQorCQkJaGRybGVuID0gMzA7CisJCWVsc2UKKwkJCWhkcmxlbiA9IDI0OworCQlkYXRhbGVuID0gbGVuOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgorCQloZHJsZW4gPSAyNDsKKwkJZGF0YWxlbiA9IGxlbjsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgorCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SVFM6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSzoKKwkJCWhkcmxlbiA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgorCQkJaGRybGVuID0gMTA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIGZyYW1lIHR5cGUgKi8KKwkJYnJlYWs7CisJfQorCisJLyogc2FuaXR5IGNoZWNrIHRoZSBsZW5ndGggKi8KKwlpZiAoZGF0YWxlbiA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKyAxMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG92ZXJzaXplZCBtb25pdG9yIGZyYW1lLCAiCisJCSAgICAgICAiZGF0YSBsZW5ndGggPSAlZFxuIiwgZGV2LT5uYW1lLCBkYXRhbGVuKTsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihoZHJsZW4gKyBkYXRhbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBmb3IgbW9uaXRvciBmcmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIENvcHkgdGhlIDgwMi4xMSBoZWFkZXIgdG8gdGhlIHNrYiAqLworCW1lbWNweShza2JfcHV0KHNrYiwgaGRybGVuKSwgJihkZXNjLT5mcmFtZV9jdGwpLCBoZHJsZW4pOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwkvKiBJZiBhbnksIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgc2tiICovCisJaWYgKGRhdGFsZW4gPiAwKSB7CisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBkYXRhbGVuKSwKKwkJCQkgICAgICAgQUxJR04oZGF0YWxlbiwgMiksIHJ4ZmlkLAorCQkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBtb25pdG9yIGZyYW1lXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCX0KKworCXNrYi0+ZGV2ID0gZGV2OworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpOworCisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwluZXRpZl9yeChza2IpOworCXJldHVybjsKKworIGRyb3A6CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKyB1cGRhdGVfc3RhdHM6CisJc3RhdHMtPnJ4X2Vycm9ycysrOworCXN0YXRzLT5yeF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiByeGZpZCwgc3RhdHVzOworCWludCBsZW5ndGg7CisJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGE7CisJaW50IGVycjsKKworCWRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9BVE9NSUMpOworCWlmICghZGVzYykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6IENhbid0IGFsbG9jYXRlIHNwYWNlIGZvciBSWCBkZXNjcmlwdG9yXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJcnhmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBSWEZJRCk7CisKKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBkZXNjLCBzaXplb2YoKmRlc2MpLAorCQkJICAgICAgIHJ4ZmlkLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgUnggZGVzY3JpcHRvci4gIgorCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1cyk7CisKKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9CQURDUkMpIHsKKwkJREVCVUcoMSwgIiVzOiBCYWQgQ1JDIG9uIFJ4LiBGcmFtZSBkcm9wcGVkLlxuIiwKKwkJICAgICAgZGV2LT5uYW1lKTsKKwkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogSGFuZGxlIGZyYW1lcyBpbiBtb25pdG9yIG1vZGUgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJb3Jpbm9jb19yeF9tb25pdG9yKGRldiwgcnhmaWQsIGRlc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9VTkRFQ1JZUFRBQkxFKSB7CisJCURFQlVHKDEsICIlczogVW5kZWNyeXB0YWJsZSBmcmFtZSBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCisJCSAgICAgIGRldi0+bmFtZSk7CisJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAobGVuZ3RoIDwgMykgeyAvKiBObyBmb3IgZXZlbiBhbiA4MDIuMiBMTEMgaGVhZGVyICovCisJCS8qIEF0IGxlYXN0IG9uIFN5bWJvbCBmaXJtd2FyZSB3aXRoIFBDRiB3ZSBnZXQgcXVpdGUgYQorCQkgICBsb3Qgb2YgdGhlc2UgbGVnaXRpbWF0ZWx5IC0gUG9sbCBmcmFtZXMgd2l0aCBubworCQkgICBkYXRhLiAqLworCQlnb3RvIG91dDsKKwl9CisJaWYgKGxlbmd0aCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE92ZXJzaXplZCBmcmFtZSByZWNlaXZlZCAoJWQgYnl0ZXMpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBsZW5ndGgpOworCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwkvKiBQYXlsb2FkIHNpemUgZG9lcyBub3QgaW5jbHVkZSBNaWNoYWVsIE1JQy4gSW5jcmVhc2UgcGF5bG9hZAorCSAqIHNpemUgdG8gcmVhZCBpdCB0b2dldGhlciB3aXRoIHRoZSBkYXRhLiAqLworCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykKKwkJbGVuZ3RoICs9IE1JQ0hBRUxfTUlDX0xFTjsKKworCS8qIFdlIG5lZWQgc3BhY2UgZm9yIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYsIHBsdXMgYW4gZXRoZXJuZXQKKwkgICBoZWFkZXIsIHBsdXMgMiBieXRlcyBzbyB3ZSBjYW4gYWxpZ24gdGhlIElQIGhlYWRlciBvbiBhCisJICAgMzJiaXQgYm91bmRhcnksIHBsdXMgMSBieXRlIHNvIHdlIGNhbiByZWFkIGluIG9kZCBsZW5ndGgKKwkgICBwYWNrZXRzIGZyb20gdGhlIGNhcmQsIHdoaWNoIGhhcyBhbiBJTyBncmFudWxhcml0eSBvZiAxNgorCSAgIGJpdHMgKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCtFVEhfSExFTisyKzEpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBza2IgZm9yIFJ4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogV2UnbGwgcHJlcGVuZCB0aGUgaGVhZGVyLCBzbyByZXNlcnZlIHNwYWNlIGZvciBpdC4gIFRoZSB3b3JzdAorCSAgIGNhc2UgaXMgbm8gZGVjYXBzdWxhdGlvbiwgd2hlbiA4MDIuMyBoZWFkZXIgaXMgcHJlcGVuZGVkIGFuZAorCSAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4gIDIgaXMgZm9yIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIuICAqLworCXNrYl9yZXNlcnZlKHNrYiwgRVRIX0hMRU4gKyAyKTsKKworCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBsZW5ndGgpLAorCQkJICAgICAgIEFMSUdOKGxlbmd0aCwgMiksIHJ4ZmlkLAorCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBmcmFtZS4gIgorCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZHJvcDsKKwl9CisKKwkvKiBBZGQgZGVzYyBhbmQgc2tiIHRvIHJ4IHF1ZXVlICovCisJcnhfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9kYXRhKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFyeF9kYXRhKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBSWCBwYWNrZXRcbiIsCisJCQlkZXYtPm5hbWUpOworCQlnb3RvIGRyb3A7CisJfQorCXJ4X2RhdGEtPmRlc2MgPSBkZXNjOworCXJ4X2RhdGEtPnNrYiA9IHNrYjsKKwlsaXN0X2FkZF90YWlsKCZyeF9kYXRhLT5saXN0LCAmcHJpdi0+cnhfbGlzdCk7CisJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cnhfdGFza2xldCk7CisKKwlyZXR1cm47CisKK2Ryb3A6CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKK3VwZGF0ZV9zdGF0czoKKwlzdGF0cy0+cnhfZXJyb3JzKys7CisJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKK291dDoKKwlrZnJlZShkZXNjKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJdTE2IHN0YXR1cywgZmM7CisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgZXRoaGRyICpoZHI7CisKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOworCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7CisKKwkvKiBDYWxjdWxhdGUgYW5kIGNoZWNrIE1JQyAqLworCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykgeworCQlpbnQga2V5X2lkID0gKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQ19LRVlfSUQpID4+CisJCQkgICAgICBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCk7CisJCXU4IG1pY1tNSUNIQUVMX01JQ19MRU5dOworCQl1OCAqcnhtaWM7CisJCXU4ICpzcmMgPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpID8KKwkJCWRlc2MtPmFkZHIzIDogZGVzYy0+YWRkcjI7CisKKwkJLyogRXh0cmFjdCBNaWNoYWVsIE1JQyBmcm9tIHBheWxvYWQgKi8KKwkJcnhtaWMgPSBza2ItPmRhdGEgKyBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTjsKKworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gTUlDSEFFTF9NSUNfTEVOKTsKKwkJbGVuZ3RoIC09IE1JQ0hBRUxfTUlDX0xFTjsKKworCQlvcmlub2NvX21pYyhwcml2LT5yeF90Zm1fbWljLAorCQkJICAgIHByaXYtPnRraXBfa2V5W2tleV9pZF0ucnhfbWljLAorCQkJICAgIGRlc2MtPmFkZHIxLAorCQkJICAgIHNyYywKKwkJCSAgICAwLCAvKiBwcmlvcml0eSBvciBRb1M/ICovCisJCQkgICAgc2tiLT5kYXRhLAorCQkJICAgIHNrYi0+bGVuLAorCQkJICAgICZtaWNbMF0pOworCisJCWlmIChtZW1jbXAobWljLCByeG1pYywKKwkJCSAgIE1JQ0hBRUxfTUlDX0xFTikpIHsKKwkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwkJCXN0cnVjdCBpd19taWNoYWVsbWljZmFpbHVyZSB3eG1pYzsKKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKKwkJCSAgICAgICAiSW52YWxpZCBNaWNoYWVsIE1JQyBpbiBkYXRhIGZyYW1lIGZyb20gJXBNLCAiCisJCQkgICAgICAgInVzaW5nIGtleSAlaVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHNyYywga2V5X2lkKTsKKworCQkJLyogVE9ETzogdXBkYXRlIHN0YXRzICovCisKKwkJCS8qIE5vdGlmeSB1c2Vyc3BhY2UgKi8KKwkJCW1lbXNldCgmd3htaWMsIDAsIHNpemVvZih3eG1pYykpOworCQkJd3htaWMuZmxhZ3MgPSBrZXlfaWQgJiBJV19NSUNGQUlMVVJFX0tFWV9JRDsKKwkJCXd4bWljLmZsYWdzIHw9IChkZXNjLT5hZGRyMVswXSAmIDEpID8KKwkJCQlJV19NSUNGQUlMVVJFX0dST1VQIDogSVdfTUlDRkFJTFVSRV9QQUlSV0lTRTsKKwkJCXd4bWljLnNyY19hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCW1lbWNweSh3eG1pYy5zcmNfYWRkci5zYV9kYXRhLCBzcmMsIEVUSF9BTEVOKTsKKworCQkJKHZvaWQpIG9yaW5vY29faHdfZ2V0X3RraXBfaXYocHJpdiwga2V5X2lkLAorCQkJCQkJICAgICAgJnd4bWljLnRzY1swXSk7CisKKwkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSBzaXplb2Yod3htaWMpOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZNSUNIQUVMTUlDRkFJTFVSRSwgJndycXUsCisJCQkJCSAgICAoY2hhciAqKSAmd3htaWMpOworCisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgZGVjYXBzdWxhdGlvbgorCSAqIEluIG1vc3QgY2FzZXMsIHRoZSBmaXJtd2FyZSB0ZWxsIHVzIGFib3V0IFNOQVAgZnJhbWVzLgorCSAqIEZvciBzb21lIHJlYXNvbiwgdGhlIFNOQVAgZnJhbWVzIHNlbnQgYnkgTGlua1N5cyBBUHMKKwkgKiBhcmUgbm90IHByb3Blcmx5IHJlY29nbmlzZWQgYnkgbW9zdCBmaXJtd2FyZXMuCisJICogU28sIGNoZWNrIG91cnNlbHZlcyAqLworCWlmIChsZW5ndGggPj0gRU5DQVBTX09WRVJIRUFEICYmCisJICAgICgoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTVNHVFlQRSkgPT0gSEVSTUVTX1JYU1RBVF8xMDQyKSB8fAorCSAgICAgKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfVFVOTkVMKSB8fAorCSAgICAgaXNfZXRoZXJzbmFwKHNrYi0+ZGF0YSkpKSB7CisJCS8qIFRoZXNlIGluZGljYXRlIGEgU05BUCB3aXRoaW4gODAyLjIgTExDIHdpdGhpbgorCQkgICA4MDIuMTEgZnJhbWUgd2hpY2ggd2UnbGwgbmVlZCB0byBkZS1lbmNhcHN1bGF0ZSB0bworCQkgICB0aGUgb3JpZ2luYWwgRXRoZXJuZXRJSSBmcmFtZS4gKi8KKwkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsCisJCQkJCQlFVEhfSExFTiAtIEVOQ0FQU19PVkVSSEVBRCk7CisJfSBlbHNlIHsKKwkJLyogODAyLjMgZnJhbWUgLSBwcmVwZW5kIDgwMi4zIGhlYWRlciBhcyBpcyAqLworCQloZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOworCQloZHItPmhfcHJvdG8gPSBodG9ucyhsZW5ndGgpOworCX0KKwltZW1jcHkoaGRyLT5oX2Rlc3QsIGRlc2MtPmFkZHIxLCBFVEhfQUxFTik7CisJaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKQorCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjMsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMiwgRVRIX0FMRU4pOworCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKKwkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisKKwkvKiBQcm9jZXNzIHRoZSB3aXJlbGVzcyBzdGF0cyBpZiBuZWVkZWQgKi8KKwlvcmlub2NvX3N0YXRfZ2F0aGVyKGRldiwgc2tiLCBkZXNjKTsKKworCS8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0d29ya2luZyBzdGFjayAqLworCW5ldGlmX3J4KHNrYik7CisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOworCisJcmV0dXJuOworCisgZHJvcDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJc3RhdHMtPnJ4X2Vycm9ycysrOworCXN0YXRzLT5yeF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKKwlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogb3Jpbm9jb19yeCByZXF1aXJlcyB0aGUgZHJpdmVyIGxvY2ssIGFuZCB3ZSBhbHNvIG5lZWQgdG8KKwkgKiBwcm90ZWN0IHByaXYtPnJ4X2xpc3QsIHNvIGp1c3QgaG9sZCB0aGUgbG9jayBvdmVyIHRoZQorCSAqIGxvdC4KKwkgKgorCSAqIElmIG9yaW5vY29fbG9jayBmYWlscywgd2UndmUgdW5wbHVnZ2VkIHRoZSBjYXJkLiBJbiB0aGlzCisJICogY2FzZSBqdXN0IGFib3J0LiAqLworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm47CisKKwkvKiBleHRyYWN0IGRlc2MgYW5kIHNrYiBmcm9tIHF1ZXVlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7CisJCWRlc2MgPSByeF9kYXRhLT5kZXNjOworCQlza2IgPSByeF9kYXRhLT5za2I7CisJCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKKwkJa2ZyZWUocnhfZGF0YSk7CisKKwkJb3Jpbm9jb19yeChkZXYsIGRlc2MsIHNrYik7CisKKwkJa2ZyZWUoZGVzYyk7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUnggcGF0aCAoaW5mbyBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcmludF9saW5rc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBzdGF0dXMpCit7CisJY2hhciAqczsKKworCWlmIChzdXBwcmVzc19saW5rc3RhdHVzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRDoKKwkJcyA9ICJOb3QgQ29ubmVjdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQ6CisJCXMgPSAiQ29ubmVjdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19ESVNDT05ORUNURUQ6CisJCXMgPSAiRGlzY29ubmVjdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0U6CisJCXMgPSAiQVAgQ2hhbmdlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFOgorCQlzID0gIkFQIE91dCBvZiBSYW5nZSI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0U6CisJCXMgPSAiQVAgSW4gUmFuZ2UiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FTU09DX0ZBSUxFRDoKKwkJcyA9ICJBc3NvY2lhdGlvbiBGYWlsZWQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzID0gIlVOS05PV04iOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogTmV3IGxpbmsgc3RhdHVzOiAlcyAoJTA0eClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcywgc3RhdHVzKTsKK30KKworLyogU2VhcmNoIHNjYW4gcmVzdWx0cyBmb3IgcmVxdWVzdGVkIEJTU0lELCBqb2luIGl0IGlmIGZvdW5kICovCitzdGF0aWMgdm9pZCBvcmlub2NvX2pvaW5fYXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgam9pbl93b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGpvaW5fcmVxIHsKKwkJdTggYnNzaWRbRVRIX0FMRU5dOworCQlfX2xlMTYgY2hhbm5lbDsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSByZXE7CisJY29uc3QgaW50IGF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7CisJc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqYXRvbSA9IE5VTEw7CisJaW50IG9mZnNldCA9IDQ7CisJaW50IGZvdW5kID0gMDsKKwl1OCAqYnVmOworCXUxNiBsZW47CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHNjYW4gcmVzdWx0cyAqLworCWJ1ZiA9IGttYWxsb2MoTUFYX1NDQU5fTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCWdvdG8gZmFpbF9sb2NrOworCisJLyogU2FuaXR5IGNoZWNrcyBpbiBjYXNlIHVzZXIgY2hhbmdlZCBzb21ldGhpbmcgaW4gdGhlIG1lYW50aW1lICovCisJaWYgKCFwcml2LT5ic3NpZF9maXhlZCkKKwkJZ290byBvdXQ7CisKKwlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApCisJCWdvdG8gb3V0OworCisJLyogUmVhZCBzY2FuIHJlc3VsdHMgZnJvbSB0aGUgZmlybXdhcmUgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAorCQkJICAgICAgSEVSTUVTX1JJRF9TQ0FOUkVTVUxUU1RBQkxFLAorCQkJICAgICAgTUFYX1NDQU5fTEVOLCAmbGVuLCBidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc2NhbiByZXN1bHRzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW4pOworCisJLyogR28gdGhyb3VnaCB0aGUgc2NhbiByZXN1bHRzIGxvb2tpbmcgZm9yIHRoZSBjaGFubmVsIG9mIHRoZSBBUAorCSAqIHdlIHdlcmUgcmVxdWVzdGVkIHRvIGpvaW4gKi8KKwlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKKwkJYXRvbSA9IChzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvICopIChidWYgKyBvZmZzZXQpOworCQlpZiAobWVtY21wKCZhdG9tLT5ic3NpZCwgcHJpdi0+ZGVzaXJlZF9ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlERUJVRygxLCAiJXM6IFJlcXVlc3RlZCBBUCBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXG4iLAorCQkgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkocmVxLmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTik7CisJcmVxLmNoYW5uZWwgPSBhdG9tLT5jaGFubmVsOwkvKiBib3RoIGFyZSBsaXR0bGUtZW5kaWFuICovCisJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GSk9JTlJFUVVFU1QsCisJCQkJICAmcmVxKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpc3N1aW5nIGpvaW4gcmVxdWVzdFxuIiwgZGV2LT5uYW1lKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisgZmFpbF9sb2NrOgorCWtmcmVlKGJ1Zik7Cit9CisKKy8qIFNlbmQgbmV3IEJTU0lEIHRvIHVzZXJzcGFjZSAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgd3JxdS5hcF9hZGRyLnNhX2RhdGEpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuOworCisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCWludCBlcnI7CisJdTggYnVmWzg4XTsKKwl1OCAqaWU7CisKKwlpZiAoIXByaXYtPmhhc193cGEpCisJCXJldHVybjsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVFfSU5GTywKKwkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybjsKKworCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChpZSkgeworCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOworCisJCWlmICh3cnF1LmRhdGEubGVuZ3RoKQorCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVRSUUsICZ3cnF1LCBpZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCWludCBlcnI7CisJdTggYnVmWzg4XTsgLyogVE9ETzogdmVyaWZ5IG1heCBzaXplIG9yIElXX0dFTkVSSUNfSUVfTUFYICovCisJdTggKmllOworCisJaWYgKCFwcml2LT5oYXNfd3BhKQorCQlyZXR1cm47CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVTUF9JTkZPLAorCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuOworCisJaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKGllKSB7CisJCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOworCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOworCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKKwkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07CisKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCisJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVNQSUUsICZ3cnF1LCBpZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfd2V2ZW50cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCB3ZXZlbnRfd29yayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm47CisKKwlvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQocHJpdik7CisJb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChwcml2KTsKKwlvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHByaXYpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNiBpbmZvZmlkOworCXN0cnVjdCB7CisJCV9fbGUxNiBsZW47CisJCV9fbGUxNiB0eXBlOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluZm87CisJaW50IGxlbiwgdHlwZTsKKwlpbnQgZXJyOworCisJLyogVGhpcyBpcyBhbiBhbnN3ZXIgdG8gYW4gSU5RVUlSRSBjb21tYW5kIHRoYXQgd2UgZGlkIGVhcmxpZXIsCisJICogb3IgYW4gaW5mb3JtYXRpb24gImV2ZW50IiBnZW5lcmF0ZWQgYnkgdGhlIGNhcmQKKwkgKiBUaGUgY29udHJvbGxlciByZXR1cm4gdG8gdXMgYSBwc2V1ZG8gZnJhbWUgY29udGFpbmluZworCSAqIHRoZSBpbmZvcm1hdGlvbiBpbiBxdWVzdGlvbiAtIEplYW4gSUkgKi8KKwlpbmZvZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgSU5GT0ZJRCk7CisKKwkvKiBSZWFkIHRoZSBpbmZvIGZyYW1lIGhlYWRlciAtIGRvbid0IHRyeSB0b28gaGFyZCAqLworCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZpbmZvLCBzaXplb2YoaW5mbyksCisJCQkgICAgICAgaW5mb2ZpZCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIGluZm8gZnJhbWUuICIKKwkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZTE2X3RvX2NwdShpbmZvLmxlbikpOworCXR5cGUgPSBsZTE2X3RvX2NwdShpbmZvLnR5cGUpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBIRVJNRVNfSU5RX1RBTExJRVM6IHsKKwkJc3RydWN0IGhlcm1lc190YWxsaWVzX2ZyYW1lIHRhbGxpZXM7CisJCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOworCisJCWlmIChsZW4gPiBzaXplb2YodGFsbGllcykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUYWxsaWVzIGZyYW1lIHRvbyBsb25nICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJbGVuID0gc2l6ZW9mKHRhbGxpZXMpOworCQl9CisKKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJnRhbGxpZXMsIGxlbiwKKwkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCS8qIEluY3JlbWVudCBvdXIgdmFyaW91cyBjb3VudGVycyAqLworCQkvKiB3c3RhdHMtPmRpc2NhcmQubndpZCAtIG5vIHdyb25nIEJTU0lEIHN0dWZmICovCisJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9CisJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4V0VQVW5kZWNyeXB0YWJsZSk7CisJCWlmIChsZW4gPT0gc2l6ZW9mKHRhbGxpZXMpKQorCQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0KKwkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQSUNWRXJyb3IpICsKKwkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQRXhjbHVkZWQpOworCQl3c3RhdHMtPmRpc2NhcmQubWlzYyArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5UeERpc2NhcmRzV3JvbmdTQSk7CisJCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5SeE1zZ0luQmFkTXNnRnJhZ21lbnRzKTsKKwkJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhSZXRyeUxpbWl0RXhjZWVkZWQpOworCQkvKiB3c3RhdHMtPm1pc3MuYmVhY29uIC0gbm8gbWF0Y2ggKi8KKwl9CisJYnJlYWs7CisJY2FzZSBIRVJNRVNfSU5RX0xJTktTVEFUVVM6IHsKKwkJc3RydWN0IGhlcm1lc19saW5rc3RhdHVzIGxpbmtzdGF0dXM7CisJCXUxNiBuZXdzdGF0dXM7CisJCWludCBjb25uZWN0ZWQ7CisKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQorCQkJYnJlYWs7CisKKwkJaWYgKGxlbiAhPSBzaXplb2YobGlua3N0YXR1cykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmV4cGVjdGVkIHNpemUgZm9yIGxpbmtzdGF0dXMgZnJhbWUgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZsaW5rc3RhdHVzLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJbmV3c3RhdHVzID0gbGUxNl90b19jcHUobGlua3N0YXR1cy5saW5rc3RhdHVzKTsKKworCQkvKiBTeW1ib2wgZmlybXdhcmUgdXNlcyAib3V0IG9mIHJhbmdlIiB0byBzaWduYWwgdGhhdAorCQkgKiB0aGUgaG9zdHNjYW4gZnJhbWUgY2FuIGJlIHJlcXVlc3RlZC4gICovCisJCWlmIChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICYmCisJCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MICYmCisJCSAgICBwcml2LT5oYXNfaG9zdHNjYW4gJiYgcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCQloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0wpOworCQkJYnJlYWs7CisJCX0KKworCQljb25uZWN0ZWQgPSAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCkKKwkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFKQorCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRSk7CisKKwkJaWYgKGNvbm5lY3RlZCkKKwkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwkJZWxzZSBpZiAoIWlnbm9yZV9kaXNjb25uZWN0KQorCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCQlpZiAobmV3c3RhdHVzICE9IHByaXYtPmxhc3RfbGlua3N0YXR1cykgeworCQkJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gbmV3c3RhdHVzOworCQkJcHJpbnRfbGlua3N0YXR1cyhkZXYsIG5ld3N0YXR1cyk7CisJCQkvKiBUaGUgaW5mbyBmcmFtZSBjb250YWlucyBvbmx5IG9uZSB3b3JkIHdoaWNoIGlzIHRoZQorCQkJICogc3RhdHVzIChzZWUgaGVybWVzLmgpLiBUaGUgc3RhdHVzIGlzIHByZXR0eSBib3JpbmcKKwkJCSAqIGluIGl0c2VsZiwgdGhhdCdzIHdoeSB3ZSBleHBvcnQgdGhlIG5ldyBCU1NJRC4uLgorCQkJICogSmVhbiBJSSAqLworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+d2V2ZW50X3dvcmspOworCQl9CisJfQorCWJyZWFrOworCWNhc2UgSEVSTUVTX0lOUV9TQ0FOOgorCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcyAmJiBwcml2LT5ic3NpZF9maXhlZCAmJgorCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMKSB7CisJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5qb2luX3dvcmspOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOOgorCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0w6IHsKKwkJLyogUmVzdWx0IG9mIGEgc2Nhbm5pbmcuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CisJCSAqIGNlbGxzIGluIHRoZSB2aWNpbml0eSAtIEplYW4gSUkgKi8KKwkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCQl1bnNpZ25lZCBjaGFyICpidWY7CisKKwkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KKwkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKGxlbiA+IDQwOTYpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHJlc3VsdHMgKi8KKwkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoYnVmID09IE5VTEwpCisJCQkvKiBObyBtZW1vcnksIHNvIGNhbid0IHByaW50aygpLi4uICovCisJCQlicmVhazsKKworCQkvKiBSZWFkIHNjYW4gZGF0YSAqLworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBidWYsIGxlbiwKKwkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUoYnVmKTsKKwkJCWJyZWFrOworCQl9CisKKyNpZmRlZiBPUklOT0NPX0RFQlVHCisJCXsKKwkJCWludAlpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNjYW4gcmVzdWx0IFslMDJYIiwgYnVmWzBdKTsKKwkJCWZvciAoaSA9IDE7IGkgPCAobGVuICogMik7IGkrKykKKwkJCQlwcmludGsoIjolMDJYIiwgYnVmW2ldKTsKKwkJCXByaW50aygiXVxuIik7CisJCX0KKyNlbmRpZgkvKiBPUklOT0NPX0RFQlVHICovCisKKwkJaWYgKG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMocHJpdiwgYnVmLCBsZW4pID09IDApIHsKKwkJCS8qIFNlbmQgYW4gZW1wdHkgZXZlbnQgdG8gdXNlciBzcGFjZS4KKwkJCSAqIFdlIGRvbid0IHNlbmQgdGhlIHJlY2VpdmVkIGRhdGEgb24gdGhlIGV2ZW50IGJlY2F1c2UKKwkJCSAqIGl0IHdvdWxkIHJlcXVpcmUgdXMgdG8gZG8gY29tcGxleCB0cmFuc2NvZGluZywgYW5kCisJCQkgKiB3ZSB3YW50IHRvIG1pbmltaXNlIHRoZSB3b3JrIGRvbmUgaW4gdGhlIGlycSBoYW5kbGVyCisJCQkgKiBVc2UgYSByZXF1ZXN0IHRvIGV4dHJhY3QgdGhlIGRhdGEgLSBKZWFuIElJICovCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwkJfQorCQlrZnJlZShidWYpOworCX0KKwlicmVhazsKKwljYXNlIEhFUk1FU19JTlFfQ0hBTk5FTElORk86CisJeworCQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzOworCisJCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEdvdCBjaGFuaW5mbyB3aXRob3V0IHNjYW4sICIKKwkJCSAgICAgICAibGVuPSVkXG4iLCBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEFuIGVtcHR5IHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBjb21wbGV0ZSAqLworCQlpZiAobGVuID09IDApIHsKKwkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKKworCQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KKwkJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisKKwkJCXdycXUuZGF0YS5sZW5ndGggPSAwOworCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJZWxzZSBpZiAobGVuID4gc2l6ZW9mKCpic3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBFeHQgc2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpLiAiCisJCQkgICAgICAgIlRydW5jYXRpbmcgcmVzdWx0cyB0byAlemQgYnl0ZXMuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBzaXplb2YoKmJzcykpOworCQkJbGVuID0gc2l6ZW9mKCpic3MpOworCQl9IGVsc2UgaWYgKGxlbiA8IChvZmZzZXRvZihzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbywKKwkJCQkJICAgZGF0YSkgKyAyKSkgeworCQkJLyogRHJvcCB0aGlzIHJlc3VsdCBub3cgc28gd2UgZG9uJ3QgaGF2ZSB0bworCQkJICoga2VlcCBjaGVja2luZyBsYXRlciAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gc2hvcnQgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCWJzcyA9IGttYWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGJzcyA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJLyogUmVhZCBzY2FuIGRhdGEgKi8KKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnNzLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKGJzcyk7CisJCQlicmVhazsKKwkJfQorCisJCW9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChwcml2LCBic3MpOworCisJCWtmcmVlKGJzcyk7CisJCWJyZWFrOworCX0KKwljYXNlIEhFUk1FU19JTlFfU0VDX1NUQVRfQUdFUkU6CisJCS8qIFNlY3VyaXR5IHN0YXR1cyAoQWdlcmUgc3BlY2lmaWMpICovCisJCS8qIElnbm9yZSB0aGlzIGZyYW1lIGZvciBub3cgKi8KKwkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVua25vd24gaW5mb3JtYXRpb24gZnJhbWUgcmVjZWl2ZWQ6ICIKKwkJICAgICAgICJ0eXBlIDB4JTA0eCwgbGVuZ3RoICVkXG4iLCBkZXYtPm5hbWUsIHR5cGUsIGxlbik7CisJCS8qIFdlIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFib3V0IGl0ICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZmRyb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW5mb3JtYXRpb24gZnJhbWUgbG9zdC5cbiIsIGRldi0+bmFtZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVybmFsIGhhcmR3YXJlIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZSAqLworCisJZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgY29uZmlndXJpbmcgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBGaXJlIHRoaW5ncyB1cCBhZ2FpbiAqLworCWhlcm1lc19zZXRfaXJxbWFzayhodywgT1JJTk9DT19JTlRFTik7CisJZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGVuYWJsaW5nIE1BQyBwb3J0XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19vcmlub2NvX3VwKTsKKworaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWlmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKKwkJaWYgKCFwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKKwkJCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCQkJaWYgKGVycikgeworCQkJCS8qIFNvbWUgZmlybXdhcmVzIChlLmcuIEludGVyc2lsIDEuMy54KSBzZWVtCisJCQkJICogdG8gaGF2ZSBwcm9ibGVtcyBkaXNhYmxpbmcgdGhlIHBvcnQsIG9oCisJCQkJICogd2VsbCwgdG9vIGJhZC4gKi8KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZGlzYWJsaW5nIE1BQyBwb3J0XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKKwkJCX0KKwkJfQorCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7CisJfQorCisJLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19vcmlub2NvX2Rvd24pOworCitzdGF0aWMgaW50IG9yaW5vY29fYWxsb2NhdGVfZmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7CisJaWYgKGVyciA9PSAtRUlPICYmIHByaXYtPm5pY2J1Zl9zaXplID4gVFhfTklDQlVGX1NJWkVfQlVHKSB7CisJCS8qIFRyeSB3b3JrYXJvdW5kIGZvciBvbGQgU3ltYm9sIGZpcm13YXJlIGJ1ZyAqLworCQlwcml2LT5uaWNidWZfc2l6ZSA9IFRYX05JQ0JVRl9TSVpFX0JVRzsKKwkJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmlybXdhcmUgQUxMT0MgYnVnIGRldGVjdGVkICIKKwkJICAgICAgICIob2xkIFN5bWJvbCBmaXJtd2FyZT8pLiBXb3JrIGFyb3VuZCAlc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyID8gImZhaWxlZCEiIDogIm9rLiIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfaW5pdChodyk7CisJaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkICYmICFlcnIpIHsKKwkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKKwl9CisJaWYgKCFlcnIpCisJCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChvcmlub2NvX3JlaW5pdF9maXJtd2FyZSk7CisKK2ludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKKworCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAorCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oRVRIX0FMRU4pLCBkZXYtPmRldl9hZGRyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgTUFDIGFkZHJlc3NcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHVwIHRoZSBsaW5rIG1vZGUgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE9SVFRZUEUsCisJCQkJICAgcHJpdi0+cG9ydF90eXBlKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcG9ydCB0eXBlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiBTZXQgdGhlIGNoYW5uZWwvZnJlcXVlbmN5ICovCisJaWYgKHByaXYtPmNoYW5uZWwgIT0gMCAmJiBwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk9XTkNIQU5ORUwsCisJCQkJCSAgIHByaXYtPmNoYW5uZWwpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIHByaXYtPmNoYW5uZWwpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChwcml2LT5oYXNfaWJzcykgeworCQl1MTYgY3JlYXRlaWJzczsKKworCQlpZiAoKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSAmJiAocHJpdi0+Y3JlYXRlaWJzcykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUaGlzIGZpcm13YXJlIHJlcXVpcmVzIGFuICIKKwkJCSAgICAgICAiRVNTSUQgaW4gSUJTUy1BZC1Ib2MgbW9kZS5cbiIsIGRldi0+bmFtZSk7CisJCQkvKiBXaXRoIHd2bGFuX2NzLCBpbiB0aGlzIGNhc2UsIHdlIHdvdWxkIGNyYXNoLgorCQkJICogaG9wZWZ1bGx5LCB0aGlzIGRyaXZlciB3aWxsIGJlaGF2ZSBiZXR0ZXIuLi4KKwkJCSAqIEplYW4gSUkgKi8KKwkJCWNyZWF0ZWlic3MgPSAwOworCQl9IGVsc2UgeworCQkJY3JlYXRlaWJzcyA9IHByaXYtPmNyZWF0ZWlic3M7CisJCX0KKworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GQ1JFQVRFSUJTUywKKwkJCQkJICAgY3JlYXRlaWJzcyk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQ1JFQVRFSUJTU1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJLyogU2V0IHRoZSBkZXNpcmVkIEJTU0lEICovCisJZXJyID0gX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIEFQIGFkZHJlc3NcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCS8qIFNldCB0aGUgZGVzaXJlZCBFU1NJRCAqLworCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7CisJbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPmRlc2lyZWRfZXNzaWQsIHNpemVvZihpZGJ1Zi52YWwpKTsKKwkvKiBXaW5YUCB3YW50cyBwYXJ0bmVyIHRvIGNvbmZpZ3VyZSBPV05TU0lEIGV2ZW4gaW4gSUJTUyBtb2RlLiAoamltYykgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05TU0lELAorCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCisJCQkmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBPV05TU0lEXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAorCQkJJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgREVTSVJFRFNTSURcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KKwlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+bmljaykpOworCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5uaWNrLCBzaXplb2YoaWRidWYudmFsKSk7CisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKKwkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5uaWNrKSsyKSwKKwkJCSAgICAgICAmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBuaWNrbmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgQVAgZGVuc2l0eSAqLworCWlmIChwcml2LT5oYXNfc2Vuc2l0aXZpdHkpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAorCQkJCQkgICBwcml2LT5hcF9kZW5zaXR5KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIHNldHRpbmcgU1lTVEVNU0NBTEUuICIKKwkJCSAgICAgICAiRGlzYWJsaW5nIHNlbnNpdGl2aXR5IGNvbnRyb2xcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCisJCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOworCQl9CisJfQorCisJLyogU2V0IFJUUyB0aHJlc2hvbGQgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAorCQkJCSAgIHByaXYtPnJ0c190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBSVFMgdGhyZXNob2xkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBvciBNV08gcm9idXN0bmVzcyAqLworCWlmIChwcml2LT5oYXNfbXdvKQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICBwcml2LT5td29fcm9idXN0KTsKKwllbHNlCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAorCQkJCQkgICBwcml2LT5mcmFnX3RocmVzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGZyYWdtZW50YXRpb25cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGJpdHJhdGUgKi8KKwllcnIgPSBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUocHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGJpdHJhdGVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlpZiAocHJpdi0+aGFzX3BtKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsCisJCQkJCSAgIHByaXYtPnBtX29uKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsCisJCQkJCSAgIHByaXYtPnBtX21jYXN0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAorCQkJCQkgICBwcml2LT5wbV9wZXJpb2QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKKwkJCQkJICAgcHJpdi0+cG1fdGltZW91dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCBwcmVhbWJsZSAtIG9ubHkgZm9yIFN5bWJvbCBzbyBmYXIuLi4gKi8KKwlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCisJCQkJCSAgIHByaXYtPnByZWFtYmxlKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwcmVhbWJsZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJLyogU2V0IHVwIGVuY3J5cHRpb24gKi8KKwlpZiAocHJpdi0+aGFzX3dlcCB8fCBwcml2LT5oYXNfd3BhKSB7CisJCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF9lbmMocHJpdik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGFjdGl2YXRpbmcgZW5jcnlwdGlvblxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9NT05JVE9SLCAwLCBOVUxMKTsKKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLworCQlkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfU1RPUCwgMCwgTlVMTCk7CisJfQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBTZXQgcHJvbWlzY3VpdHkgLyBtdWx0aWNhc3QqLworCXByaXYtPnByb21pc2N1b3VzID0gMDsKKwlwcml2LT5tY19jb3VudCA9IDA7CisKKwkvKiBGSVhNRTogd2hhdCBhYm91dCBuZXRpZl90eF9sb2NrICovCisJX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiByZXR1cm4gaW50PyAqLworc3RhdGljIHZvaWQKK19fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgcHJvbWlzYywgbWNfY291bnQ7CisKKwkvKiBUaGUgSGVybWVzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGFsbG11bHRpIG1vZGUsIHNvIHdlIGdvCisJICogaW50byBwcm9taXNjdW91cyBtb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxldmVscyBkZWFsLiAqLworCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkgICAgKGRldi0+bWNfY291bnQgPiBNQVhfTVVMVElDQVNUKHByaXYpKSkgeworCQlwcm9taXNjID0gMTsKKwkJbWNfY291bnQgPSAwOworCX0gZWxzZSB7CisJCXByb21pc2MgPSAwOworCQltY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisJfQorCisJZXJyID0gX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChwcml2LCBkZXYtPm1jX2xpc3QsIG1jX2NvdW50LAorCQkJCQkgICAgICBwcm9taXNjKTsKK30KKworLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgd2l0aG91dCBsb2NrcyBoZWxkIC0gdXNlCisgKiBzY2hlZHVsZV93b3JrKCkgKi8KK3ZvaWQgb3Jpbm9jb19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCByZXNldF93b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJLyogV2hlbiB0aGUgaGFyZHdhcmUgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4sIHdoYXRldmVyCisJCSAqIGRldGVjdHMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmUtaW5pdGlhbGl6aW5nCisJCSAqIGl0LiBTbyBubyBuZWVkIGZvciBhbnl0aGluZyBmdXJ0aGVyICovCisJCXJldHVybjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIFNodXQgb2ZmIGludGVycnVwdHMuICBEZXBlbmRpbmcgb24gd2hhdCBzdGF0ZSB0aGUgaGFyZHdhcmUKKwkgKiBpcyBpbiwgdGhpcyBtaWdodCBub3Qgd29yaywgYnV0IHdlJ2xsIHRyeSBhbnl3YXkgKi8KKwloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKKworCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CisJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOyAvKiBmaXJtd2FyZSB3aWxsIGhhdmUgdG8gcmVhc3NvY2lhdGUgKi8KKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCS8qIFNjYW5uaW5nIHN1cHBvcnQ6IENsZWFudXAgb2YgZHJpdmVyIHN0cnVjdCAqLworCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIDApOworCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisKKwlpZiAocHJpdi0+aGFyZF9yZXNldCkgeworCQllcnIgPSAoKnByaXYtPmhhcmRfcmVzZXQpKHByaXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCAiCisJCQkgICAgICAgInBlcmZvcm1pbmcgaGFyZCByZXNldFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBkaXNhYmxlOworCQl9CisJfQorCisJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBkaXNhYmxlOworCX0KKworCS8qIFRoaXMgaGFzIHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKworCS8qIHByaXYtPm9wZW4gb3IgcHJpdi0+aHdfdW5hdmFpbGFibGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdoaWxlCisJICogd2UgZHJvcHBlZCB0aGUgbG9jayAqLworCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CisJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZWVuYWJsaW5nIGNhcmRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQl9IGVsc2UKKwkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlyZXR1cm47CisgZGlzYWJsZToKKwloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBEZXZpY2UgaGFzIGJlZW4gZGlzYWJsZWQhXG4iLCBkZXYtPm5hbWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcnJ1cHQgaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90aWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRJQ0tcbiIsIGRldi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl93dGVycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJLyogVGhpcyBzZWVtcyB0byBoYXBwZW4gYSBmYWlyIGJpdCB1bmRlciBsb2FkLCBidXQgaWdub3JpbmcgaXQKKwkgICBzZWVtcyB0byB3b3JrIGZpbmUuLi4qLworCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGNvbnRyb2xsZXIgZXJyb3IgKFdURVJSKS4gSWdub3JpbmcuXG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworfQorCitpcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGNvdW50ID0gTUFYX0lSUUxPT1BTX1BFUl9JUlE7CisJdTE2IGV2c3RhdCwgZXZlbnRzOworCS8qIFRoZXNlIGFyZSB1c2VkIHRvIGRldGVjdCBhIHJ1bmF3YXkgaW50ZXJydXB0IHNpdHVhdGlvbi4KKwkgKgorCSAqIElmIHdlIGdldCBtb3JlIHRoYW4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSBpdGVyYXRpb25zIGluIGEgamlmZnksCisJICogd2UgcGFuaWMgYW5kIHNodXQgZG93biB0aGUgaGFyZHdhcmUKKwkgKi8KKwkvKiBqaWZmaWVzIHZhbHVlIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQgKi8KKwlzdGF0aWMgaW50IGxhc3RfaXJxX2ppZmZ5OyAvKiA9IDAgKi8KKwlzdGF0aWMgaW50IGxvb3BzX3RoaXNfamlmZnk7IC8qID0gMCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgeworCQkvKiBJZiBodyBpcyB1bmF2YWlsYWJsZSAtIHdlIGRvbid0IGtub3cgaWYgdGhlIGlycSB3YXMKKwkJICogZm9yIHVzIG9yIG5vdCAqLworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKKwlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47CisJaWYgKCFldmVudHMpIHsKKwkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChqaWZmaWVzICE9IGxhc3RfaXJxX2ppZmZ5KQorCQlsb29wc190aGlzX2ppZmZ5ID0gMDsKKwlsYXN0X2lycV9qaWZmeSA9IGppZmZpZXM7CisKKwl3aGlsZSAoZXZlbnRzICYmIGNvdW50LS0pIHsKKwkJaWYgKCsrbG9vcHNfdGhpc19qaWZmeSA+IE1BWF9JUlFMT09QU19QRVJfSklGRlkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJUlEgaGFuZGxlciBpcyBsb29waW5nIHRvbyAiCisJCQkgICAgICAgIm11Y2ghIFJlc2V0dGluZy5cbiIsIGRldi0+bmFtZSk7CisJCQkvKiBEaXNhYmxlIGludGVycnVwdHMgZm9yIG5vdyAqLworCQkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGVjayB0aGUgY2FyZCBoYXNuJ3QgYmVlbiByZW1vdmVkICovCisJCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CisJCQlERUJVRygwLCAib3Jpbm9jb19pbnRlcnJ1cHQoKTogY2FyZCByZW1vdmVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9USUNLKQorCQkJX19vcmlub2NvX2V2X3RpY2soZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfV1RFUlIpCisJCQlfX29yaW5vY29fZXZfd3RlcnIoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfSU5GRFJPUCkKKwkJCV9fb3Jpbm9jb19ldl9pbmZkcm9wKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORk8pCisJCQlfX29yaW5vY29fZXZfaW5mbyhkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9SWCkKKwkJCV9fb3Jpbm9jb19ldl9yeChkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWEVYQykKKwkJCV9fb3Jpbm9jb19ldl90eGV4YyhkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWCkKKwkJCV9fb3Jpbm9jb19ldl90eChkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9BTExPQykKKwkJCV9fb3Jpbm9jb19ldl9hbGxvYyhkZXYsIGh3KTsKKworCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIGV2c3RhdCk7CisKKwkJZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKKwkJZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOworCX07CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19pbnRlcnJ1cHQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQb3dlciBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICYmICFkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkKK3N0YXRpYyBpbnQgb3Jpbm9jb19wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcG1fZXZlbnQsCisJCQkgICAgICAgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsCisJCQkJCQkgICAgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwKKwkJCQkJCSAgICBwbV9ub3RpZmllcik7CisKKwkvKiBBbGwgd2UgbmVlZCB0byBkbyBpcyBjYWNoZSB0aGUgZmlybXdhcmUgYmVmb3JlIHN1c3BlbmQsIGFuZAorCSAqIHJlbGVhc2UgaXQgd2hlbiB3ZSBjb21lIG91dC4KKwkgKgorCSAqIE9ubHkgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIGRvd25sb2FkaW5nIGZpcm13YXJlLiAqLworCWlmICghcHJpdi0+ZG9fZndfZG93bmxvYWQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXN3aXRjaCAocG1fZXZlbnQpIHsKKwljYXNlIFBNX0hJQkVSTkFUSU9OX1BSRVBBUkU6CisJY2FzZSBQTV9TVVNQRU5EX1BSRVBBUkU6CisJCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7CisJCWJyZWFrOworCisJY2FzZSBQTV9QT1NUX1JFU1RPUkU6CisJCS8qIFJlc3RvcmUgZnJvbSBoaWJlcm5hdGlvbiBmYWlsZWQuIFdlIG5lZWQgdG8gY2xlYW4KKwkJICogdXAgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXksIHNvIGZhbGwgdGhyb3VnaC4gKi8KKwljYXNlIFBNX1BPU1RfSElCRVJOQVRJT046CisJY2FzZSBQTV9QT1NUX1NVU1BFTkQ6CisJCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNX1JFU1RPUkVfUFJFUEFSRToKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlwcml2LT5wbV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gb3Jpbm9jb19wbV9ub3RpZmllcjsKKwlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Cit9CisjZWxzZSAvKiAhUE1fU0xFRVAgfHwgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQgKi8KKyNkZWZpbmUgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNvbXBfaWQgeworCXUxNiBpZCwgdmFyaWFudCwgbWFqb3IsIG1pbm9yOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgZnd0eXBlX3QgZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoc3RydWN0IGNvbXBfaWQgKm5pY19pZCkKK3sKKwlpZiAobmljX2lkLT5pZCA8IDB4ODAwMCkKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfQUdFUkU7CisJZWxzZSBpZiAobmljX2lkLT5pZCA9PSAweDgwMDAgJiYgbmljX2lkLT5tYWpvciA9PSAwKQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9TWU1CT0w7CisJZWxzZQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9JTlRFUlNJTDsKK30KKworLyogU2V0IHByaXYtPmZpcm13YXJlIHR5cGUsIGRldGVybWluZSBmaXJtd2FyZSBwcm9wZXJ0aWVzICovCitzdGF0aWMgaW50IGRldGVybWluZV9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXN0cnVjdCBjb21wX2lkIG5pY19pZCwgc3RhX2lkOworCXVuc2lnbmVkIGludCBmaXJtdmVyOworCWNoYXIgdG1wW1NZTUJPTF9NQVhfVkVSX0xFTisxXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDIpKSk7CisKKwkvKiBHZXQgdGhlIGhhcmR3YXJlIHZlcnNpb24gKi8KKwllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX05JQ0lELCAmbmljX2lkKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIGhhcmR3YXJlIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5pZCk7CisJbGUxNl90b19jcHVzKCZuaWNfaWQudmFyaWFudCk7CisJbGUxNl90b19jcHVzKCZuaWNfaWQubWFqb3IpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhhcmR3YXJlIGlkZW50aXR5ICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgbmljX2lkLmlkLCBuaWNfaWQudmFyaWFudCwKKwkgICAgICAgbmljX2lkLm1ham9yLCBuaWNfaWQubWlub3IpOworCisJcHJpdi0+ZmlybXdhcmVfdHlwZSA9IGRldGVybWluZV9maXJtd2FyZV90eXBlKCZuaWNfaWQpOworCisJLyogR2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCisJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVEFJRCwgJnN0YV9pZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzdGF0aW9uIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5pZCk7CisJbGUxNl90b19jcHVzKCZzdGFfaWQudmFyaWFudCk7CisJbGUxNl90b19jcHVzKCZzdGFfaWQubWFqb3IpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gaWRlbnRpdHkgICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgc3RhX2lkLmlkLCBzdGFfaWQudmFyaWFudCwKKwkgICAgICAgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOworCisJc3dpdGNoIChzdGFfaWQuaWQpIHsKKwljYXNlIDB4MTU6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSAweDE0YjoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGVydGlhcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSAweDFmOgkvKiBJbnRlcnNpbCwgQWdlcmUsIFN5bWJvbCBTcGVjdHJ1bTI0ICovCisJY2FzZSAweDIxOgkvKiBTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVua25vd24gc3RhdGlvbiBJRCwgcGxlYXNlIHJlcG9ydFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWJyZWFrOworCX0KKworCS8qIERlZmF1bHQgY2FwYWJpbGl0aWVzICovCisJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMTsKKwlwcml2LT5oYXNfbXdvID0gMDsKKwlwcml2LT5oYXNfcHJlYW1ibGUgPSAwOworCXByaXYtPmhhc19wb3J0MyA9IDE7CisJcHJpdi0+aGFzX2lic3MgPSAxOworCXByaXYtPmhhc193ZXAgPSAwOworCXByaXYtPmhhc19iaWdfd2VwID0gMDsKKwlwcml2LT5oYXNfYWx0X3R4Y250bCA9IDA7CisJcHJpdi0+aGFzX2V4dF9zY2FuID0gMDsKKwlwcml2LT5oYXNfd3BhID0gMDsKKwlwcml2LT5kb19md19kb3dubG9hZCA9IDA7CisKKwkvKiBEZXRlcm1pbmUgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCS8qIEx1Y2VudCBXYXZlbGFuIElFRUUsIEx1Y2VudCBPcmlub2NvLCBDYWJsZXRyb24gUm9hbUFib3V0LAorCQkgICBFTFNBLCBNZWxjbywgSFAsIElCTSwgRGVsbCAxMTUwLCBDb21wYXEgMTEwLzIxMCAqLworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJMdWNlbnQvQWdlcmUgJWQuJTAyZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKKworCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfCBzdGFfaWQubWlub3I7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDYwMDA2KTsKKwkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4NDAwMjApOworCQlwcml2LT5oYXNfYmlnX3dlcCA9IDE7IC8qIEZJWE1FOiB0aGlzIGlzIHdyb25nIC0gaG93IGRvIHdlIHRlbGwKKwkJCQkJICBHb2xkIGNhcmRzIGZyb20gdGhlIG90aGVycz8gKi8KKwkJcHJpdi0+aGFzX213byA9IChmaXJtdmVyID49IDB4NjAwMDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDQwMDIwKTsgLyogRG9uJ3Qgd29yayBpbiA3LjUyID8gKi8KKwkJcHJpdi0+aWJzc19wb3J0ID0gMTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHg4MDAwYSk7CisJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMTsKKwkJcHJpdi0+YnJva2VuX21vbml0b3IgPSAoZmlybXZlciA+PSAweDgwMDAwKTsKKwkJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCisJCXByaXYtPmhhc19leHRfc2NhbiA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KKwkJcHJpdi0+aGFzX3dwYSA9IChmaXJtdmVyID49IDB4OTAwMmEpOworCQkvKiBUZXN0ZWQgd2l0aCBBZ2VyZSBmaXJtd2FyZSA6CisJCSAqCTEuMTYgOyA0LjA4IDsgNC41MiA7IDYuMDQgOyA2LjE2IDsgNy4yOCA9PiBKZWFuIElJCisJCSAqIFRlc3RlZCBDYWJsZVRyb24gZmlybXdhcmUgOiA0LjMyID0+IEFudG9uICovCisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCS8qIFN5bWJvbCAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwsIEVyaWNzc29uIFdMQU4gKi8KKwkJLyogSW50ZWwgTUFDIDogMDA6MDI6QjM6KiAqLworCQkvKiAzQ29tIE1BQyA6IDAwOjUwOkRBOiogKi8KKwkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCQkvKiBHZXQgdGhlIFN5bWJvbCBmaXJtd2FyZSB2ZXJzaW9uICovCisJCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCisJCQkJICAgICAgSEVSTUVTX1JJRF9TRUNPTkRBUllWRVJTSU9OX1NZTUJPTCwKKwkJCQkgICAgICBTWU1CT0xfTUFYX1ZFUl9MRU4sIE5VTEwsICZ0bXApOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBFcnJvciAlZCByZWFkaW5nIFN5bWJvbCBmaXJtd2FyZSBpbmZvLiAiCisJCQkgICAgICAgIldpbGRseSBndWVzc2luZyBjYXBhYmlsaXRpZXMuLi5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJZmlybXZlciA9IDA7CisJCQl0bXBbMF0gPSAnXDAnOworCQl9IGVsc2UgeworCQkJLyogVGhlIGZpcm13YXJlIHJldmlzaW9uIGlzIGEgc3RyaW5nLCB0aGUgZm9ybWF0IGlzCisJCQkgKiBzb21ldGhpbmcgbGlrZSA6ICJWMi4yMC0wMSIuCisJCQkgKiBRdWljayBhbmQgZGlydHkgcGFyc2luZy4uLiAtIEplYW4gSUkKKwkJCSAqLworCQkJZmlybXZlciA9ICgodG1wWzFdIC0gJzAnKSA8PCAxNikKKwkJCQl8ICgodG1wWzNdIC0gJzAnKSA8PCAxMikKKwkJCQl8ICgodG1wWzRdIC0gJzAnKSA8PCA4KQorCQkJCXwgKCh0bXBbNl0gLSAnMCcpIDw8IDQpCisJCQkJfCAodG1wWzddIC0gJzAnKTsKKworCQkJdG1wW1NZTUJPTF9NQVhfVkVSX0xFTl0gPSAnXDAnOworCQl9CisKKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiU3ltYm9sICVzIiwgdG1wKTsKKworCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgxNTAxMik7CisJCXByaXYtPmhhc19iaWdfd2VwID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MjAwMDAgJiYgZmlybXZlciA8IDB4MjIwMDApIHx8CisJCQkgICAgICAgKGZpcm12ZXIgPj0gMHgyOTAwMCAmJiBmaXJtdmVyIDwgMHgzMDAwMCkgfHwKKwkJCSAgICAgICBmaXJtdmVyID49IDB4MzEwMDA7CisJCXByaXYtPmhhc19wcmVhbWJsZSA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5pYnNzX3BvcnQgPSA0OworCisJCS8qIFN5bWJvbCBmaXJtd2FyZSBpcyBmb3VuZCBvbiB2YXJpb3VzIGNhcmRzLCBidXQKKwkJICogdGhlcmUgaGFzIGJlZW4gbm8gYXR0ZW1wdCB0byBjaGVjayBmaXJtd2FyZQorCQkgKiBkb3dubG9hZCBvbiBub24tc3BlY3RydW1fY3MgYmFzZWQgY2FyZHMuCisJCSAqCisJCSAqIEdpdmVuIHRoYXQgdGhlIEFnZXJlIGZpcm13YXJlIGRvd25sb2FkIHdvcmtzCisJCSAqIGRpZmZlcmVudGx5LCB3ZSBzaG91bGQgYXZvaWQgZG9pbmcgYSBmaXJtd2FyZQorCQkgKiBkb3dubG9hZCB3aXRoIHRoZSBTeW1ib2wgYWxnb3JpdGhtIG9uIG5vbi1zcGVjdHJ1bQorCQkgKiBjYXJkcy4KKwkJICoKKwkJICogRm9yIG5vdyB3ZSBjYW4gaWRlbnRpZnkgYSBzcGVjdHJ1bV9jcyBiYXNlZCBjYXJkCisJCSAqIGJlY2F1c2UgaXQgaGFzIGEgZmlybXdhcmUgcmVzZXQgZnVuY3Rpb24uCisJCSAqLworCQlwcml2LT5kb19md19kb3dubG9hZCA9IChwcml2LT5zdG9wX2Z3ICE9IE5VTEwpOworCisJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IChmaXJtdmVyID09IDB4MjUwMTMpIHx8CisJCQkJKGZpcm12ZXIgPj0gMHgzMDAwMCAmJiBmaXJtdmVyIDw9IDB4MzEwMDApOworCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDMxMDAxKSB8fAorCQkJCSAgICAgKGZpcm12ZXIgPj0gMHgyOTA1NyAmJiBmaXJtdmVyIDwgMHgzMDAwMCk7CisJCS8qIFRlc3RlZCB3aXRoIEludGVsIGZpcm13YXJlIDogMHgyMDAxNSA9PiBKZWFuIElJICovCisJCS8qIFRlc3RlZCB3aXRoIDNDb20gZmlybXdhcmUgOiAweDE1MDEyICYgMHgyMjAwMSA9PiBKZWFuIElJICovCisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJLyogRC1MaW5rLCBMaW5rc3lzLCBBZHRyb24sIFpvb21BaXIsIGFuZCBtYW55IG90aGVycy4uLgorCQkgKiBTYW1zdW5nLCBDb21wYXEgMTAwLzIwMCBhbmQgUHJveGltIGFyZSBzbGlnaHRseQorCQkgKiBkaWZmZXJlbnQgYW5kIGxlc3Mgd2VsbCB0ZXN0ZWQgKi8KKwkJLyogRC1MaW5rIE1BQyA6IDAwOjQwOjA1OiogKi8KKwkJLyogQWRkdHJvbiBNQUMgOiAwMDo5MDpEMToqICovCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIkludGVyc2lsICVkLiVkLiVkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IsCisJCQkgc3RhX2lkLnZhcmlhbnQpOworCisJCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8CisJCQkoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1pbm9yIDw8IDgpIHwgc3RhX2lkLnZhcmlhbnQ7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDAwMDcwMCk7IC8qIEZJWE1FICovCisJCXByaXYtPmhhc19iaWdfd2VwID0gcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MDAwODAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOworCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDAxMDMwMSk7CisKKwkJaWYgKGZpcm12ZXIgPj0gMHgwMDA4MDApCisJCQlwcml2LT5pYnNzX3BvcnQgPSAwOworCQllbHNlIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludGVyc2lsIGZpcm13YXJlIGVhcmxpZXIgIgorCQkJICAgICAgICJ0aGFuIHYwLjgueCAtIHNldmVyYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKKwkJfQorCQlicmVhazsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGaXJtd2FyZSBkZXRlcm1pbmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHByaXYtPmZ3X25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbmlja2J1ZjsKKwl1MTYgcmVjbGVuOworCWludCBsZW47CisKKwkvKiBObyBuZWVkIHRvIGxvY2ssIHRoZSBod191bmF2YWlsYWJsZSBmbGFnIGlzIGFscmVhZHkgc2V0IGluCisJICogYWxsb2Nfb3Jpbm9jb2RldigpICovCisJcHJpdi0+bmljYnVmX3NpemUgPSBJRUVFODAyMTFfTUFYX0ZSQU1FX0xFTiArIEVUSF9ITEVOOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZmlybXdhcmUgKi8KKwllcnIgPSBoZXJtZXNfaW5pdChodyk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIGZpcm13YXJlIChlcnIgPSAlZClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkKSB7CisjaWZkZWYgQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUCisJCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7CisjZW5kaWYKKworCQllcnIgPSBvcmlub2NvX2Rvd25sb2FkKHByaXYpOworCQlpZiAoZXJyKQorCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOworCisJCS8qIENoZWNrIGZpcm13YXJlIHZlcnNpb24gYWdhaW4gKi8KKwkJZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aGFzX3BvcnQzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkLWhvYyBkZW1vIG1vZGUgc3VwcG9ydGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwlpZiAocHJpdi0+aGFzX2lic3MpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUVFRSBzdGFuZGFyZCBJQlNTIGFkLWhvYyBtb2RlIHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJaWYgKHByaXYtPmhhc193ZXApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXRVAgc3VwcG9ydGVkLCAlcy1iaXQga2V5XG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICBwcml2LT5oYXNfYmlnX3dlcCA/ICIxMDQiIDogIjQwIik7CisJfQorCWlmIChwcml2LT5oYXNfd3BhKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogV1BBLVBTSyBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7CisJCWlmIChvcmlub2NvX21pY19pbml0KHByaXYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gc2V0dXAgTUlDIGNyeXB0byAiCisJCQkgICAgICAgImFsZ29yaXRobS4gRGlzYWJsaW5nIFdQQSBzdXBwb3J0XG4iLCBkZXYtPm5hbWUpOworCQkJcHJpdi0+aGFzX3dwYSA9IDA7CisJCX0KKwl9CisKKwkvKiBOb3cgd2UgaGF2ZSB0aGUgZmlybXdhcmUgY2FwYWJpbGl0aWVzLCBhbGxvY2F0ZSBhcHByb3BpYXRlCisJICogc2l6ZWQgc2NhbiBidWZmZXJzICovCisJaWYgKG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUocHJpdikpCisJCWdvdG8gb3V0OworCW9yaW5vY29fYnNzX2RhdGFfaW5pdChwcml2KTsKKworCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgZGV2LT5kZXZfYWRkcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3MhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgYWRkcmVzcyAlcE1cbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CisKKwkvKiBHZXQgdGhlIHN0YXRpb24gbmFtZSAqLworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKKwkJCSAgICAgIHNpemVvZihuaWNrYnVmKSwgJnJlY2xlbiwgJm5pY2tidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgc3RhdGlvbiBuYW1lXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChuaWNrYnVmLmxlbikKKwkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAoaW50KWxlMTZfdG9fY3B1KG5pY2tidWYubGVuKSk7CisJZWxzZQorCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIDIgKiByZWNsZW4pOworCW1lbWNweShwcml2LT5uaWNrLCAmbmlja2J1Zi52YWwsIGxlbik7CisJcHJpdi0+bmlja1tsZW5dID0gJ1wwJzsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBuYW1lIFwiJXNcIlxuIiwgZGV2LT5uYW1lLCBwcml2LT5uaWNrKTsKKworCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgTklDIGJ1ZmZlciFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgYWxsb3dlZCBjaGFubmVscyAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NIQU5ORUxMSVNULAorCQkJCSAgJnByaXYtPmNoYW5uZWxfbWFzayk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBjaGFubmVsIGxpc3QhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGluaXRpYWwgQVAgZGVuc2l0eSAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAorCQkJCSAgJnByaXYtPmFwX2RlbnNpdHkpOworCWlmIChlcnIgfHwgcHJpdi0+YXBfZGVuc2l0eSA8IDEgfHwgcHJpdi0+YXBfZGVuc2l0eSA+IDMpCisJCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7CisKKwkvKiBHZXQgaW5pdGlhbCBSVFMgdGhyZXNob2xkICovCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAorCQkJCSAgJnByaXYtPnJ0c190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgUlRTIHRocmVzaG9sZCFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgaW5pdGlhbCBmcmFnbWVudGF0aW9uIHNldHRpbmdzICovCisJaWYgKHByaXYtPmhhc19td28pCisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICZwcml2LT5td29fcm9idXN0KTsKKwllbHNlCisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAmcHJpdi0+ZnJhZ190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQb3dlciBtYW5hZ2VtZW50IHNldHVwICovCisJaWYgKHByaXYtPmhhc19wbSkgeworCQlwcml2LT5wbV9vbiA9IDA7CisJCXByaXYtPnBtX21jYXN0ID0gMTsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAorCQkJCQkgICZwcml2LT5wbV9wZXJpb2QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAorCQkJCQkgICZwcml2LT5wbV90aW1lb3V0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCB0aW1lb3V0IVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBQcmVhbWJsZSBzZXR1cCAqLworCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCisJCQkJCSAgJnByaXYtPnByZWFtYmxlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCisJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJLyogQnkgZGVmYXVsdCB1c2UgSUVFRS9JQlNTIGFkLWhvYyBtb2RlIGlmIHdlIGhhdmUgaXQgKi8KKwlwcml2LT5wcmVmZXJfcG9ydDMgPSBwcml2LT5oYXNfcG9ydDMgJiYgKCFwcml2LT5oYXNfaWJzcyk7CisJc2V0X3BvcnRfdHlwZShwcml2KTsKKwlwcml2LT5jaGFubmVsID0gMDsgLyogdXNlIGZpcm13YXJlIGRlZmF1bHQgKi8KKworCXByaXYtPnByb21pc2N1b3VzID0gMDsKKwlwcml2LT5lbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCXByaXYtPnR4X2tleSA9IDA7CisJcHJpdi0+d3BhX2VuYWJsZWQgPSAwOworCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKKwlwcml2LT5rZXlfbWdtdCA9IDA7CisJcHJpdi0+d3BhX2llX2xlbiA9IDA7CisJcHJpdi0+d3BhX2llID0gTlVMTDsKKworCS8qIE1ha2UgdGhlIGhhcmR3YXJlIGF2YWlsYWJsZSwgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbgorCSAqIHJlbW92ZWQgZWxzZXdoZXJlIChlLmcuIGJ5IFBDTUNJQSBob3QgdW5wbHVnKSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVhZHlcbiIsIGRldi0+bmFtZSk7CisKKyBvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvcmlub2NvX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IG9yaW5vY29faW5pdCwKKwkubmRvX29wZW4JCT0gb3Jpbm9jb19vcGVuLAorCS5uZG9fc3RvcAkJPSBvcmlub2NvX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IG9yaW5vY29feG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBvcmlub2NvX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9IG9yaW5vY29fdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBvcmlub2NvX2dldF9zdGF0cywKK307CisKK3N0cnVjdCBuZXRfZGV2aWNlCisqYWxsb2Nfb3Jpbm9jb2RldihpbnQgc2l6ZW9mX2NhcmQsCisJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkgIGludCAoKmhhcmRfcmVzZXQpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiksCisJCSAgaW50ICgqc3RvcF9mdykoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLCBpbnQpKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSArIHNpemVvZl9jYXJkKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJcHJpdi0+bmRldiA9IGRldjsKKwlpZiAoc2l6ZW9mX2NhcmQpCisJCXByaXYtPmNhcmQgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwcml2CisJCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkpOworCWVsc2UKKwkJcHJpdi0+Y2FyZCA9IE5VTEw7CisJcHJpdi0+ZGV2ID0gZGV2aWNlOworCisJLyogU2V0dXAgLyBvdmVycmlkZSBuZXRfZGV2aWNlIGZpZWxkcyAqLworCWRldi0+bmV0ZGV2X29wcyA9ICZvcmlub2NvX25ldGRldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCisJZGV2LT5ldGh0b29sX29wcyA9ICZvcmlub2NvX2V0aHRvb2xfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmb3Jpbm9jb19oYW5kbGVyX2RlZjsKKyNpZmRlZiBXSVJFTEVTU19TUFkKKwlwcml2LT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnByaXYtPnNweV9kYXRhOworCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOworI2VuZGlmCisJLyogd2UgdXNlIHRoZSBkZWZhdWx0IGV0aF9tYWNfYWRkciBmb3Igc2V0dGluZyB0aGUgTUFDIGFkZHIgKi8KKworCS8qIFJlc2VydmUgc3BhY2UgaW4gc2tiIGZvciB0aGUgU05BUCBoZWFkZXIgKi8KKwlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBFTkNBUFNfT1ZFUkhFQUQ7CisKKwkvKiBTZXQgdXAgZGVmYXVsdCBjYWxsYmFja3MgKi8KKwlwcml2LT5oYXJkX3Jlc2V0ID0gaGFyZF9yZXNldDsKKwlwcml2LT5zdG9wX2Z3ID0gc3RvcF9mdzsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5vcGVuID0gMDsKKwlwcml2LT5od191bmF2YWlsYWJsZSA9IDE7IC8qIG9yaW5vY29faW5pdCgpIG11c3QgY2xlYXIgdGhpcworCQkJCSAgICogYmVmb3JlIGFueXRoaW5nIGVsc2UgdG91Y2hlcyB0aGUKKwkJCQkgICAqIGhhcmR3YXJlICovCisJSU5JVF9XT1JLKCZwcml2LT5yZXNldF93b3JrLCBvcmlub2NvX3Jlc2V0KTsKKwlJTklUX1dPUksoJnByaXYtPmpvaW5fd29yaywgb3Jpbm9jb19qb2luX2FwKTsKKwlJTklUX1dPUksoJnByaXYtPndldmVudF93b3JrLCBvcmlub2NvX3NlbmRfd2V2ZW50cyk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfbGlzdCk7CisJdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBvcmlub2NvX3J4X2lzcl90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCisJcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IE5VTEw7CisJcHJpdi0+Y2FjaGVkX2Z3ID0gTlVMTDsKKyNlbmRpZgorCisJLyogUmVnaXN0ZXIgUE0gbm90aWZpZXJzICovCisJb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKKworCXJldHVybiBkZXY7Cit9CitFWFBPUlRfU1lNQk9MKGFsbG9jX29yaW5vY29kZXYpOworCit2b2lkIGZyZWVfb3Jpbm9jb2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGEsICp0ZW1wOworCisJLyogSWYgdGhlIHRhc2tsZXQgaXMgc2NoZWR1bGVkIHdoZW4gd2UgY2FsbCB0YXNrbGV0X2tpbGwgaXQKKwkgKiB3aWxsIHJ1biBvbmUgZmluYWwgdGltZS4gSG93ZXZlciB0aGUgdGFza2xldCB3aWxsIG9ubHkKKwkgKiBkcmFpbiBwcml2LT5yeF9saXN0IGlmIHRoZSBodyBpcyBzdGlsbCBhdmFpbGFibGUuICovCisJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKKworCS8qIEV4cGxpY2l0bHkgZHJhaW4gcHJpdi0+cnhfbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7CisKKwkJZGV2X2tmcmVlX3NrYihyeF9kYXRhLT5za2IpOworCQlrZnJlZShyeF9kYXRhLT5kZXNjKTsKKwkJa2ZyZWUocnhfZGF0YSk7CisJfQorCisJb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOworCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKKworCXByaXYtPndwYV9pZV9sZW4gPSAwOworCWtmcmVlKHByaXYtPndwYV9pZSk7CisJb3Jpbm9jb19taWNfZnJlZShwcml2KTsKKwlvcmlub2NvX2Jzc19kYXRhX2ZyZWUocHJpdik7CisJZnJlZV9uZXRkZXYoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0woZnJlZV9vcmlub2NvZGV2KTsKKworc3RhdGljIHZvaWQgb3Jpbm9jb19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpIC0gMSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7CisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCBwcml2LT5md19uYW1lLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikgLSAxKTsKKwlpZiAoZGV2LT5kZXYucGFyZW50KQorCQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAorCQkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEpOworCWVsc2UKKwkJc25wcmludGYoaW5mby0+YnVzX2luZm8sIHNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxLAorCQkJICJQQ01DSUEgJXAiLCBwcml2LT5ody5pb2Jhc2UpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvID0gb3Jpbm9jb19nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDYW4ndCBiZSBkZWNsYXJlZCAiY29uc3QiIG9yIHRoZSB3aG9sZSBfX2luaXRkYXRhIHNlY3Rpb24gd2lsbAorICogYmVjb21lIGNvbnN0ICovCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9IERSSVZFUl9OQU1FICIgIiBEUklWRVJfVkVSU0lPTgorCSIgKERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4sICIKKwkiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4sIGV0IGFsKSI7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfb3Jpbm9jbyh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X29yaW5vY28odm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoaW5pdF9vcmlub2NvKTsKK21vZHVsZV9leGl0KGV4aXRfb3Jpbm9jbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmJhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaApAQCAtMCwwICsxLDYzIEBACisvKiBFeHBvcnRzIGZyb20gbWFpbiB0byBoZWxwZXIgbW9kdWxlcworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX01BSU5fSF8KKyNkZWZpbmUgX09SSU5PQ09fTUFJTl9IXworCisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb21waWxlIHRpbWUgY29uZmlndXJhdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBzdHVmZiAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFdlIGRvIHRoaXMgdGhpcyB3YXkgdG8gYXZvaWQgaWZkZWZzIGluIHRoZSBhY3R1YWwgY29kZSAqLworI2lmZGVmIFdJUkVMRVNTX1NQWQorI2RlZmluZSBTUFlfTlVNQkVSKHByaXYpCShwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyKQorI2Vsc2UKKyNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkwCisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRXhwb3J0IG1vZHVsZSBwYXJhbWV0ZXIgKi8KK2V4dGVybiBpbnQgZm9yY2VfbW9uaXRvcjsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBuZXRfZGV2aWNlOworc3RydWN0IHdvcmtfc3RydWN0OworCit2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgb3Jpbm9jb19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisKKy8qIEluZm9ybWF0aW9uIGVsZW1lbnQgaGVscGVycyAtIGZpbmQgYSBob21lIGZvciB0aGVzZS4uLiAqLworc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfaWUodTggKmRhdGEsIHNpemVfdCBsZW4sCisJCQkJIGVudW0gaWVlZTgwMjExX2VpZCBlaWQpCit7CisJdTggKnAgPSBkYXRhOworCXdoaWxlICgocCArIDIpIDwgKGRhdGEgKyBsZW4pKSB7CisJCWlmIChwWzBdID09IGVpZCkKKwkJCXJldHVybiBwOworCQlwICs9IHBbMV0gKyAyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBXUEFfT1VJX1RZUEUJIlx4MDBceDUwXHhGMlx4MDEiCisjZGVmaW5lIFdQQV9TRUxFQ1RPUl9MRU4gNAorc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfd3BhX2llKHU4ICpkYXRhLCBzaXplX3QgbGVuKQoreworCXU4ICpwID0gZGF0YTsKKwl3aGlsZSAoKHAgKyAyICsgV1BBX1NFTEVDVE9SX0xFTikgPCAoZGF0YSArIGxlbikpIHsKKwkJaWYgKChwWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpICYmCisJCSAgICAobWVtY21wKCZwWzJdLCBXUEFfT1VJX1RZUEUsIFdQQV9TRUxFQ1RPUl9MRU4pID09IDApKQorCQkJcmV0dXJuIHA7CisJCXAgKz0gcFsxXSArIDI7CisJfQorCXJldHVybiBOVUxMOworfQorCisjZW5kaWYgLyogX09SSU5PQ09fTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmMKQEAgLTAsMCArMSw3OSBAQAorLyogT3Jpbm9jbyBNSUMgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCisjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm1pYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNaWNoYWVsIE1JQyBjcnlwdG8gc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgb3Jpbm9jb19taWNfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXByaXYtPnR4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9taWMpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgorCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOworCQlwcml2LT50eF90Zm1fbWljID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdi0+cnhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOworCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX21pYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCisJCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7CisJCXByaXYtPnJ4X3RmbV9taWMgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcmlub2NvX21pY19mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPnR4X3RmbV9taWMpCisJCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+dHhfdGZtX21pYyk7CisJaWYgKHByaXYtPnJ4X3RmbV9taWMpCisJCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+cnhfdGZtX21pYyk7Cit9CisKK2ludCBvcmlub2NvX21pYyhzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9taWNoYWVsLCB1OCAqa2V5LAorCQl1OCAqZGEsIHU4ICpzYSwgdTggcHJpb3JpdHksCisJCXU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKKwl1OCBoZHJbRVRIX0hMRU4gKyAyXTsgLyogc2l6ZSBvZiBoZWFkZXIgKyBwYWRkaW5nICovCisKKwlpZiAodGZtX21pY2hhZWwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcmlub2NvX21pYzogdGZtX21pY2hhZWwgPT0gTlVMTFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDb3B5IGhlYWRlciBpbnRvIGJ1ZmZlci4gV2UgbmVlZCB0aGUgcGFkZGluZyBvbiB0aGUgZW5kIHplcm9lZCAqLworCW1lbWNweSgmaGRyWzBdLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweSgmaGRyW0VUSF9BTEVOXSwgc2EsIEVUSF9BTEVOKTsKKwloZHJbRVRIX0FMRU4qMl0gPSBwcmlvcml0eTsKKwloZHJbRVRIX0FMRU4qMisxXSA9IDA7CisJaGRyW0VUSF9BTEVOKjIrMl0gPSAwOworCWhkcltFVEhfQUxFTioyKzNdID0gMDsKKworCS8qIFVzZSBzY2F0dGVyIGdhdGhlciB0byBNSUMgaGVhZGVyIGFuZCBkYXRhIGluIG9uZSBnbyAqLworCXNnX2luaXRfdGFibGUoc2csIDIpOworCXNnX3NldF9idWYoJnNnWzBdLCBoZHIsIHNpemVvZihoZHIpKTsKKwlzZ19zZXRfYnVmKCZzZ1sxXSwgZGF0YSwgZGF0YV9sZW4pOworCisJaWYgKGNyeXB0b19oYXNoX3NldGtleSh0Zm1fbWljaGFlbCwga2V5LCBNSUNfS0VZTEVOKSkKKwkJcmV0dXJuIC0xOworCisJZGVzYy50Zm0gPSB0Zm1fbWljaGFlbDsKKwlkZXNjLmZsYWdzID0gMDsKKwlyZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyBzaXplb2YoaGRyKSwKKwkJCQkgIG1pYyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGQwNWJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuaApAQCAtMCwwICsxLDIyIEBACisvKiBPcmlub2NvIE1JQyBoZWxwZXJzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fTUlDX0hfCisjZGVmaW5lIF9PUklOT0NPX01JQ19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNSUNIQUVMX01JQ19MRU4gOAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKK3N0cnVjdCBjcnlwdG9faGFzaDsKKworaW50IG9yaW5vY29fbWljX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG9yaW5vY29fbWljX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgb3Jpbm9jb19taWMoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fbWljaGFlbCwgdTggKmtleSwKKwkJdTggKmRhLCB1OCAqc2EsIHU4IHByaW9yaXR5LAorCQl1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKKworI2VuZGlmIC8qIE9SSU5PQ09fTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2N2QxYTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MTU5ICswLDAgQEAKLS8qIG9yaW5vY28uYyAtIChmb3JtZXJseSBrbm93biBhcyBkbGR3ZF9jcy5jIGFuZCBvcmlub2NvX2NzLmMpCi0gKgotICogQSBkcml2ZXIgZm9yIEhlcm1lcyBvciBQcmlzbSAyIGNoaXBzZXQgYmFzZWQgUENNQ0lBIHdpcmVsZXNzCi0gKiBhZGFwdG9ycywgd2l0aCBMdWNlbnQvQWdlcmUsIEludGVyc2lsIG9yIFN5bWJvbCBmaXJtd2FyZS4KLSAqCi0gKiBDdXJyZW50IG1haW50YWluZXJzIChhcyBvZiAyOSBTZXB0ZW1iZXIgMjAwMykgYXJlOgotICogCVBhdmVsIFJvc2tpbiA8cHJvc2tpIEFUIGdudS5vcmc+Ci0gKiBhbmQJRGF2aWQgR2lic29uIDxoZXJtZXMgQVQgZ2lic29uLmRyb3BiZWFyLmlkLmF1PgotICoKLSAqIChDKSBDb3B5cmlnaHQgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24gMjAwMS0yMDAzLgotICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEdpYnNvbiwgTGludXhjYXJlIEF1c3RyYWxpYS4KLSAqCVdpdGggc29tZSBoZWxwIGZyb20gOgotICogQ29weXJpZ2h0IChDKSAyMDAxIEplYW4gVG91cnJpbGhlcywgSFAgTGFicwotICogQ29weXJpZ2h0IChDKSAyMDAxIEJlbmphbWluIEhlcnJlbnNjaG1pZHQKLSAqCi0gKiBCYXNlZCBvbiBkdW1teV9jcy5jIDEuMjcgMjAwMC8wNi8xMiAyMToyNzoyNQotICoKLSAqIFBvcnRpb25zIGJhc2VkIG9uIHd2bGFuX2NzLmMgMS4wLjYsIENvcHlyaWdodCBBbmRyZWFzIE5ldWhhdXMgPGFuZHkKLSAqIEFUIGZhc3RhLmZoLWRvcnRtdW5kLmRlPgotICogICAgICBodHRwOi8vd3d3LnN0dWQuZmgtZG9ydG11bmQuZGUvfmFuZHkvd3ZsYW4vCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgotICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKLSAqIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKLSAqIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKLSAqIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcwotICogPGRhaGluZHMgQVQgdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQKLSAqIEEuIEhpbmRzIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzCi0gKiBSZXNlcnZlZC4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotICogYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLSAqIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKLSAqIGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAotICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCi0gKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLSAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuICAqLwotCi0vKgotICogVE9ETwotICoJbyBIYW5kbGUgZGUtZW5jYXBzdWxhdGlvbiB3aXRoaW4gbmV0d29yayBsYXllciwgcHJvdmlkZSA4MDIuMTEKLSAqCSAgaGVhZGVycyAocGF0Y2ggZnJvbSBUaG9tYXMgJ0RlbnQnIE1pcmxhY2hlcikKLSAqCW8gRml4IHBvc3NpYmxlIHJhY2VzIGluIFNQWSBoYW5kbGluZy4KLSAqCW8gRGlzY29ubmVjdCB3aXJlbGVzcyBleHRlbnNpb25zIGZyb20gZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbi4KLSAqCW8gKG1heWJlKSBTb2Z0d2FyZSBXRVAgc3VwcG9ydCAocGF0Y2ggZnJvbSBTdGFubyBNZWR1bmEpLgotICoJbyAobWF5YmUpIFVzZSBtdWx0aXBsZSBUeCBidWZmZXJzIC0gZHJpdmVyIGhhbmRsaW5nIHF1ZXVlCi0gKgkgIHJhdGhlciB0aGFuIGZpcm13YXJlLgotICovCi0KLS8qIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbjoKLSAqCi0gKiBUaGUgYmFzaWMgcHJpbmNpcGxlIGlzIHRoYXQgZXZlcnl0aGluZyBpcyBzZXJpYWxpemVkIHRocm91Z2ggYQotICogc2luZ2xlIHNwaW5sb2NrLCBwcml2LT5sb2NrLiAgVGhlIGxvY2sgaXMgdXNlZCBpbiB1c2VyLCBiaCBhbmQgaXJxCi0gKiBjb250ZXh0LCBzbyB3aGVuIHRha2VuIG91dHNpZGUgaGFyZGlycSBjb250ZXh0IGl0IHNob3VsZCBhbHdheXMgYmUKLSAqIHRha2VuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gIFRoZSBsb2NrIHByb3RlY3RzIGJvdGggdGhlCi0gKiBoYXJkd2FyZSBhbmQgdGhlIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUuCi0gKgotICogQW5vdGhlciBmbGFnLCBwcml2LT5od191bmF2YWlsYWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgaXMKLSAqIHVuYXZhaWxhYmxlIGZvciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZSAoZS5nLiBzdXNwZW5kZWQsIG9yIGluCi0gKiB0aGUgbWlkZGxlIG9mIGEgaGFyZCByZXNldCkuICBUaGlzIGZsYWcgaXMgcHJvdGVjdGVkIGJ5IHRoZQotICogc3BpbmxvY2suICBBbGwgY29kZSB3aGljaCB0b3VjaGVzIHRoZSBoYXJkd2FyZSBzaG91bGQgY2hlY2sgdGhlCi0gKiBmbGFnIGFmdGVyIHRha2luZyB0aGUgbG9jaywgYW5kIGlmIGl0IGlzIHNldCwgZ2l2ZSB1cCBvbiB3aGF0ZXZlcgotICogdGhleSBhcmUgZG9pbmcgYW5kIGRyb3AgdGhlIGxvY2sgYWdhaW4uICBUaGUgb3Jpbm9jb19sb2NrKCkKLSAqIGZ1bmN0aW9uIGhhbmRsZXMgdGhpcyAoaXQgdW5sb2NrcyBhbmQgcmV0dXJucyAtRUJVU1kgaWYKLSAqIGh3X3VuYXZhaWxhYmxlIGlzIG5vbi16ZXJvKS4KLSAqLwotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotCi0jaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLQotI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKLSNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCi0jaW5jbHVkZSAib3Jpbm9jby5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNb2R1bGUgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLU1PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEx1Y2VudCBPcmlub2NvLCBQcmlzbSBJSSBiYXNlZCBhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwotCi0vKiBMZXZlbCBvZiBkZWJ1Z2dpbmcuIFVzZWQgaW4gdGhlIG1hY3JvcyBpbiBvcmlub2NvLmggKi8KLSNpZmRlZiBPUklOT0NPX0RFQlVHCi1pbnQgb3Jpbm9jb19kZWJ1ZyA9IE9SSU5PQ09fREVCVUc7Ci1tb2R1bGVfcGFyYW0ob3Jpbm9jb19kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mob3Jpbm9jb19kZWJ1ZywgIkRlYnVnIGxldmVsIik7Ci1FWFBPUlRfU1lNQk9MKG9yaW5vY29fZGVidWcpOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc3VwcHJlc3NfbGlua3N0YXR1czsgLyogPSAwICovCi1tb2R1bGVfcGFyYW0oc3VwcHJlc3NfbGlua3N0YXR1cywgYm9vbCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN1cHByZXNzX2xpbmtzdGF0dXMsICJEb24ndCBsb2cgbGluayBzdGF0dXMgY2hhbmdlcyIpOwotc3RhdGljIGludCBpZ25vcmVfZGlzY29ubmVjdDsgLyogPSAwICovCi1tb2R1bGVfcGFyYW0oaWdub3JlX2Rpc2Nvbm5lY3QsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9kaXNjb25uZWN0LCAiRG9uJ3QgcmVwb3J0IGxvc3QgbGluayB0byB0aGUgbmV0d29yayBsYXllciIpOwotCi1zdGF0aWMgaW50IGZvcmNlX21vbml0b3I7IC8qID0gMCAqLwotbW9kdWxlX3BhcmFtKGZvcmNlX21vbml0b3IsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX21vbml0b3IsICJBbGxvdyBtb25pdG9yIG1vZGUgZm9yIGFsbCBmaXJtd2FyZSB2ZXJzaW9ucyIpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBDb21waWxlIHRpbWUgY29uZmlndXJhdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBzdHVmZiAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdlIGRvIHRoaXMgdGhpcyB3YXkgdG8gYXZvaWQgaWZkZWZzIGluIHRoZSBhY3R1YWwgY29kZSAqLwotI2lmZGVmIFdJUkVMRVNTX1NQWQotI2RlZmluZSBTUFlfTlVNQkVSKHByaXYpCShwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyKQotI2Vsc2UKLSNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkwCi0jZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogODAyLjIgTExDL1NOQVAgaGVhZGVyIHVzZWQgZm9yIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24gb3ZlciA4MDIuMTEgKi8KLXN0YXRpYyBjb25zdCB1OCBlbmNhcHNfaGRyW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07Ci0jZGVmaW5lIEVOQ0FQU19PVkVSSEVBRAkJKHNpemVvZihlbmNhcHNfaGRyKSArIDIpCi0KLSNkZWZpbmUgT1JJTk9DT19NSU5fTVRVCQkyNTYKLSNkZWZpbmUgT1JJTk9DT19NQVhfTVRVCQkoSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIEVOQ0FQU19PVkVSSEVBRCkKLQotI2RlZmluZSBTWU1CT0xfTUFYX1ZFUl9MRU4JKDE0KQotI2RlZmluZSBVU0VSX0JBUAkJMAotI2RlZmluZSBJUlFfQkFQCQkJMQotI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0lSUQkxMAotI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZCSgyMDAwMC9IWikgLyogQmFzZWQgb24gYSBndWVzdGltYXRlIG9mCi0JCQkJCSAgICAqIGhvdyBtYW55IGV2ZW50cyB0aGUKLQkJCQkJICAgICogZGV2aWNlIGNvdWxkCi0JCQkJCSAgICAqIGxlZ2l0aW1hdGVseSBnZW5lcmF0ZSAqLwotI2RlZmluZSBTTUFMTF9LRVlfU0laRQkJNQotI2RlZmluZSBMQVJHRV9LRVlfU0laRQkJMTMKLSNkZWZpbmUgVFhfTklDQlVGX1NJWkVfQlVHCTE1ODUJCS8qIEJ1ZyBpbiBTeW1ib2wgZmlybXdhcmUgKi8KLQotI2RlZmluZSBEVU1NWV9GSUQJCTB4RkZGRgotCi0vKiNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFID8gXAotICBIRVJNRVNfTUFYX01VTFRJQ0FTVCA6IDApKi8KLSNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkoSEVSTUVTX01BWF9NVUxUSUNBU1QpCi0KLSNkZWZpbmUgT1JJTk9DT19JTlRFTgkgCShIRVJNRVNfRVZfUlggfCBIRVJNRVNfRVZfQUxMT0MgXAotCQkJCSB8IEhFUk1FU19FVl9UWCB8IEhFUk1FU19FVl9UWEVYQyBcCi0JCQkJIHwgSEVSTUVTX0VWX1dURVJSIHwgSEVSTUVTX0VWX0lORk8gXAotCQkJCSB8IEhFUk1FU19FVl9JTkZEUk9QICkKLQotI2RlZmluZSBNQVhfUklEX0xFTiAxMDI0Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgb3Jpbm9jb19oYW5kbGVyX2RlZjsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wczsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGF0YSB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUgZnJlcXVlbmN5IG9mIGVhY2ggY2hhbm5lbCBpbiBNSHogKi8KLXN0YXRpYyBjb25zdCBsb25nIGNoYW5uZWxfZnJlcXVlbmN5W10gPSB7Ci0JMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKLQkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0Ci19OwotI2RlZmluZSBOVU1fQ0hBTk5FTFMgQVJSQVlfU0laRShjaGFubmVsX2ZyZXF1ZW5jeSkKLQotLyogVGhpcyB0YWJsZXMgZ2l2ZXMgdGhlIGFjdHVhbCBtZWFuaW5ncyBvZiB0aGUgYml0cmF0ZSBJRHMgcmV0dXJuZWQKLSAqIGJ5IHRoZSBmaXJtd2FyZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgewotCWludCBiaXRyYXRlOyAvKiBpbiAxMDBzIG9mIGtpbG9iaXRzICovCi0JaW50IGF1dG9tYXRpYzsKLQl1MTYgYWdlcmVfdHhyYXRlY3RybDsKLQl1MTYgaW50ZXJzaWxfdHhyYXRlY3RybDsKLX0gYml0cmF0ZV90YWJsZVtdID0gewotCXsxMTAsIDEsICAzLCAxNX0sIC8qIEVudHJ5IDAgaXMgdGhlIGRlZmF1bHQgKi8KLQl7MTAsICAwLCAgMSwgIDF9LAotCXsxMCwgIDEsICAxLCAgMX0sCi0JezIwLCAgMCwgIDIsICAyfSwKLQl7MjAsICAxLCAgNiwgIDN9LAotCXs1NSwgIDAsICA0LCAgNH0sCi0JezU1LCAgMSwgIDcsICA3fSwKLQl7MTEwLCAwLCAgNSwgIDh9LAotfTsKLSNkZWZpbmUgQklUUkFURV9UQUJMRV9TSVpFIEFSUkFZX1NJWkUoYml0cmF0ZV90YWJsZSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGF0YSB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBCZWdpbm5pbmcgb2YgdGhlIFR4IGRlc2NyaXB0b3IsIHVzZWQgaW4gVHhFeGMgaGFuZGxpbmcgKi8KLXN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSB7Ci0Jc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFJ4IGZyYW1lIGhlYWRlciBleGNlcHQgY29tcGF0aWJpbGl0eSA4MDIuMyBoZWFkZXIgKi8KLXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciB7Ci0JLyogQ29udHJvbCAqLwotCV9fbGUxNiBzdGF0dXM7Ci0JX19sZTMyIHRpbWU7Ci0JdTggc2lsZW5jZTsKLQl1OCBzaWduYWw7Ci0JdTggcmF0ZTsKLQl1OCByeGZsb3c7Ci0JX19sZTMyIHJlc2VydmVkOwotCi0JLyogODAyLjExIGhlYWRlciAqLwotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IGFkZHI0W0VUSF9BTEVOXTsKLQotCS8qIERhdGEgbGVuZ3RoICovCi0JX19sZTE2IGRhdGFfbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWljaGFlbCBNSUMgY3J5cHRvIHNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBNSUNIQUVMX01JQ19MRU4gOAotc3RhdGljIGludCBvcmlub2NvX21pY19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JcHJpdi0+dHhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOwotCWlmIChJU19FUlIocHJpdi0+dHhfdGZtX21pYykpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7Ci0JCXByaXYtPnR4X3RmbV9taWMgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwcml2LT5yeF90Zm1fbWljID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwgMCk7Ci0JaWYgKElTX0VSUihwcml2LT5yeF90Zm1fbWljKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAib3Jpbm9jb19taWNfaW5pdDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKLQkJcHJpdi0+cnhfdGZtX21pYyA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX21pY19mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPnR4X3RmbV9taWMpCi0JCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+dHhfdGZtX21pYyk7Ci0JaWYgKHByaXYtPnJ4X3RmbV9taWMpCi0JCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+cnhfdGZtX21pYyk7Ci19Ci0KLXN0YXRpYyBpbnQgbWljaGFlbF9taWMoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fbWljaGFlbCwgdTggKmtleSwKLQkJICAgICAgIHU4ICpkYSwgdTggKnNhLCB1OCBwcmlvcml0eSwKLQkJICAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCi17Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKLQl1OCBoZHJbRVRIX0hMRU4gKyAyXTsgLyogc2l6ZSBvZiBoZWFkZXIgKyBwYWRkaW5nICovCi0KLQlpZiAodGZtX21pY2hhZWwgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtaWNoYWVsX21pYzogdGZtX21pY2hhZWwgPT0gTlVMTFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBDb3B5IGhlYWRlciBpbnRvIGJ1ZmZlci4gV2UgbmVlZCB0aGUgcGFkZGluZyBvbiB0aGUgZW5kIHplcm9lZCAqLwotCW1lbWNweSgmaGRyWzBdLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweSgmaGRyW0VUSF9BTEVOXSwgc2EsIEVUSF9BTEVOKTsKLQloZHJbRVRIX0FMRU4qMl0gPSBwcmlvcml0eTsKLQloZHJbRVRIX0FMRU4qMisxXSA9IDA7Ci0JaGRyW0VUSF9BTEVOKjIrMl0gPSAwOwotCWhkcltFVEhfQUxFTioyKzNdID0gMDsKLQotCS8qIFVzZSBzY2F0dGVyIGdhdGhlciB0byBNSUMgaGVhZGVyIGFuZCBkYXRhIGluIG9uZSBnbyAqLwotCXNnX2luaXRfdGFibGUoc2csIDIpOwotCXNnX3NldF9idWYoJnNnWzBdLCBoZHIsIHNpemVvZihoZHIpKTsKLQlzZ19zZXRfYnVmKCZzZ1sxXSwgZGF0YSwgZGF0YV9sZW4pOwotCi0JaWYgKGNyeXB0b19oYXNoX3NldGtleSh0Zm1fbWljaGFlbCwga2V5LCBNSUNfS0VZTEVOKSkKLQkJcmV0dXJuIC0xOwotCi0JZGVzYy50Zm0gPSB0Zm1fbWljaGFlbDsKLQlkZXNjLmZsYWdzID0gMDsKLQlyZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyBzaXplb2YoaGRyKSwKLQkJCQkgIG1pYyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCXByaXYtPnBvcnRfdHlwZSA9IDE7Ci0JCXByaXYtPmNyZWF0ZWlic3MgPSAwOwotCQlicmVhazsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCWlmIChwcml2LT5wcmVmZXJfcG9ydDMpIHsKLQkJCXByaXYtPnBvcnRfdHlwZSA9IDM7Ci0JCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPnBvcnRfdHlwZSA9IHByaXYtPmlic3NfcG9ydDsKLQkJCXByaXYtPmNyZWF0ZWlic3MgPSAxOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9NT05JVE9SOgotCQlwcml2LT5wb3J0X3R5cGUgPSAzOwotCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBwcml2LT5pd19tb2RlIGluIHNldF9wb3J0X3R5cGUoKVxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUpOwotCX0KLX0KLQotI2RlZmluZSBPUklOT0NPX01BWF9CU1NfQ09VTlQJNjQKLXN0YXRpYyBpbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT5ic3NfeGJzc19kYXRhKQotCQlyZXR1cm4gMDsKLQotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCi0JCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgeGJzc19lbGVtZW50KSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JZWxzZQotCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGJzc19lbGVtZW50KSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXByaXYtPmJzc194YnNzX2RhdGEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX2Jzc19kYXRhX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlrZnJlZShwcml2LT5ic3NfeGJzc19kYXRhKTsKLQlwcml2LT5ic3NfeGJzc19kYXRhID0gTlVMTDsKLX0KLQotI2RlZmluZSBQUklWX0JTUwkoKHN0cnVjdCBic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCi0jZGVmaW5lIFBSSVZfWEJTUwkoKHN0cnVjdCB4YnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQotc3RhdGljIHZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaW50IGk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19saXN0KTsKLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQotCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCi0JCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9YQlNTW2ldLmxpc3QpLAotCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQllbHNlCi0JCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKLQkJCWxpc3RfYWRkX3RhaWwoJihQUklWX0JTU1tpXS5saXN0KSwKLQkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0KLX0KLQotc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfaWUodTggKmRhdGEsIHNpemVfdCBsZW4sCi0JCQkJIGVudW0gaWVlZTgwMjExX2VpZCBlaWQpCi17Ci0JdTggKnAgPSBkYXRhOwotCXdoaWxlICgocCArIDIpIDwgKGRhdGEgKyBsZW4pKSB7Ci0JCWlmIChwWzBdID09IGVpZCkKLQkJCXJldHVybiBwOwotCQlwICs9IHBbMV0gKyAyOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotI2RlZmluZSBXUEFfT1VJX1RZUEUJIlx4MDBceDUwXHhGMlx4MDEiCi0jZGVmaW5lIFdQQV9TRUxFQ1RPUl9MRU4gNAotc3RhdGljIGlubGluZSB1OCAqb3Jpbm9jb19nZXRfd3BhX2llKHU4ICpkYXRhLCBzaXplX3QgbGVuKQotewotCXU4ICpwID0gZGF0YTsKLQl3aGlsZSAoKHAgKyAyICsgV1BBX1NFTEVDVE9SX0xFTikgPCAoZGF0YSArIGxlbikpIHsKLQkJaWYgKChwWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpICYmCi0JCSAgICAobWVtY21wKCZwWzJdLCBXUEFfT1VJX1RZUEUsIFdQQV9TRUxFQ1RPUl9MRU4pID09IDApKQotCQkJcmV0dXJuIHA7Ci0JCXAgKz0gcFsxXSArIDI7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERvd25sb2FkIGZ1bmN0aW9uYWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGZ3X2luZm8gewotCWNoYXIgKnByaV9mdzsKLQljaGFyICpzdGFfZnc7Ci0JY2hhciAqYXBfZnc7Ci0JdTMyIHBkYV9hZGRyOwotCXUxNiBwZGFfc2l6ZTsKLX07Ci0KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgZndfaW5mbyBvcmlub2NvX2Z3W10gPSB7Ci0JeyBOVUxMLCAiYWdlcmVfc3RhX2Z3LmJpbiIsICJhZ2VyZV9hcF9mdy5iaW4iLCAweDAwMzkwMDAwLCAxMDAwIH0sCi0JeyBOVUxMLCAicHJpc21fc3RhX2Z3LmJpbiIsICJwcmlzbV9hcF9mdy5iaW4iLCAwLCAxMDI0IH0sCi0JeyAic3ltYm9sX3NwMjR0X3ByaW1fZnciLCAic3ltYm9sX3NwMjR0X3NlY19mdyIsIE5VTEwsIDB4MDAwMDMxMDAsIDUxMiB9Ci19OwotCi0vKiBTdHJ1Y3R1cmUgdXNlZCB0byBhY2Nlc3MgZmllbGRzIGluIEZXCi0gKiBNYWtlIHN1cmUgTEUgZGVjb2RpbmcgbWFjcm9zIGFyZSB1c2VkCi0gKi8KLXN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciB7Ci0JY2hhciBoZHJfdmVyc1s2XTsgICAgICAgLyogQVNDSUkgc3RyaW5nIGZvciBoZWFkZXIgdmVyc2lvbiAqLwotCV9fbGUxNiBoZWFkZXJzaXplOyAgICAgIC8qIFRvdGFsIGxlbmd0aCBvZiBoZWFkZXIgKi8KLQlfX2xlMzIgZW50cnlfcG9pbnQ7ICAgICAvKiBOSUMgZW50cnkgcG9pbnQgKi8KLQlfX2xlMzIgYmxvY2tzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgYmxvY2tzIHRvIHByb2dyYW0gKi8KLQlfX2xlMzIgYmxvY2tfb2Zmc2V0OyAgICAvKiBPZmZzZXQgb2YgYmxvY2sgZGF0YSBmcm9tIGVvZiBoZWFkZXIgKi8KLQlfX2xlMzIgcGRyX29mZnNldDsgICAgICAvKiBPZmZzZXQgdG8gUERSIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCi0JX19sZTMyIHByaV9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIHByaW1hcnkgcGx1ZyBkYXRhICovCi0JX19sZTMyIGNvbXBhdF9vZmZzZXQ7ICAgLyogT2Zmc2V0IHRvIGNvbXBhdGliaWxpdHkgZGF0YSovCi0JY2hhciBzaWduYXR1cmVbMF07ICAgICAgLyogRlcgc2lnbmF0dXJlIGxlbmd0aCBoZWFkZXJzaXplLTIwICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogRG93bmxvYWQgZWl0aGVyIFNUQSBvciBBUCBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLiAqLwotc3RhdGljIGludAotb3Jpbm9jb19kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkgICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAotCQkgICAgaW50IGFwKQotewotCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCi0JX19sZTE2ICpwZGE7Ci0KLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKLQljb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKmhkcjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKLQljb25zdCB1bnNpZ25lZCBjaGFyICplbmQ7Ci0JY29uc3QgY2hhciAqZmlybXdhcmU7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0JaW50IGVyciA9IDA7Ci0KLQlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwZGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGFwKQotCQlmaXJtd2FyZSA9IGZ3LT5hcF9mdzsKLQllbHNlCi0JCWZpcm13YXJlID0gZnctPnN0YV9mdzsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQXR0ZW1wdGluZyB0byBkb3dubG9hZCBmaXJtd2FyZSAlc1xuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBmaXJtd2FyZSk7Ci0KLQkvKiBSZWFkIGN1cnJlbnQgcGx1ZyBkYXRhICovCi0JZXJyID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlYWQgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVycikKLQkJZ290byBmcmVlOwotCi0JaWYgKCFwcml2LT5jYWNoZWRfZncpIHsKLQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZpcm13YXJlLCBwcml2LT5kZXYpOwotCi0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOwotCQkJZXJyID0gLUVOT0VOVDsKLQkJCWdvdG8gZnJlZTsKLQkJfQotCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9mdzsKLQotCWhkciA9IChjb25zdCBzdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgKikgZndfZW50cnktPmRhdGE7Ci0KLQkvKiBFbmFibGUgYXV4IHBvcnQgdG8gYWxsb3cgcHJvZ3JhbW1pbmcgKi8KLQllcnIgPSBoZXJtZXNpX3Byb2dyYW1faW5pdChodywgbGUzMl90b19jcHUoaGRyLT5lbnRyeV9wb2ludCkpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBpbml0IHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIGFib3J0OwotCi0JLyogUHJvZ3JhbSBkYXRhICovCi0JZmlyc3RfYmxvY2sgPSAoZndfZW50cnktPmRhdGEgKwotCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCi0JCSAgICAgICBsZTMyX3RvX2NwdShoZHItPmJsb2NrX29mZnNldCkpOwotCWVuZCA9IGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemU7Ci0KLQllcnIgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIGFib3J0OwotCi0JLyogVXBkYXRlIHByb2R1Y3Rpb24gZGF0YSAqLwotCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKLQkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKwotCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5wZHJfb2Zmc2V0KSk7Ci0KLQllcnIgPSBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaHcsIGZpcnN0X2Jsb2NrLCBwZGEpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQXBwbHkgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVycikKLQkJZ290byBhYm9ydDsKLQotCS8qIFRlbGwgY2FyZCB3ZSd2ZSBmaW5pc2hlZCAqLwotCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9lbmQoaHcpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSBlbmQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQlpZiAoZXJyICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KLQkvKiBDaGVjayBpZiB3ZSdyZSBydW5uaW5nICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoZXJtZXNfcHJlc2VudCByZXR1cm5lZCAlZFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcHJlc2VudChodykpOwotCi1hYm9ydDoKLQkvKiBJZiB3ZSByZXF1ZXN0ZWQgdGhlIGZpcm13YXJlLCByZWxlYXNlIGl0LiAqLwotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQotZnJlZToKLQlrZnJlZShwZGEpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEVuZCBtYXJrZXJzICovCi0jZGVmaW5lIFRFWFRfRU5ECTB4MUEJCS8qIEVuZCBvZiB0ZXh0IGhlYWRlciAqLwotCi0vKgotICogUHJvY2VzcyBhIGZpcm13YXJlIGltYWdlIC0gc3RvcCB0aGUgY2FyZCwgbG9hZCB0aGUgZmlybXdhcmUsIHJlc2V0Ci0gKiB0aGUgY2FyZCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzLiAgRm9yIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgdGFrZQotICogY2FyZSBvZiB0aGUgUERBIC0gcmVhZCBpdCBhbmQgdGhlbiB3cml0ZSBpdCBvbiB0b3Agb2YgdGhlIGZpcm13YXJlLgotICovCi1zdGF0aWMgaW50Ci1zeW1ib2xfZGxfaW1hZ2Uoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICppbWFnZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAotCQlpbnQgc2Vjb25kYXJ5KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgcmV0ID0gMDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpwdHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7Ci0KLQkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLwotCV9fbGUxNiAqcGRhID0gTlVMTDsKLQotCS8qIEJpbmFyeSBibG9jayBiZWdpbnMgYWZ0ZXIgdGhlIDB4MUEgbWFya2VyICovCi0JcHRyID0gaW1hZ2U7Ci0Jd2hpbGUgKCpwdHIrKyAhPSBURVhUX0VORCk7Ci0JZmlyc3RfYmxvY2sgPSBwdHI7Ci0KLQkvKiBSZWFkIHRoZSBQREEgZnJvbSBFRVBST00gKi8KLQlpZiAoc2Vjb25kYXJ5KSB7Ci0JCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZGEpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlyZXQgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBmcmVlOwotCX0KLQotCS8qIFN0b3AgdGhlIGZpcm13YXJlLCBzbyB0aGF0IGl0IGNhbiBiZSBzYWZlbHkgcmV3cml0dGVuICovCi0JaWYgKHByaXYtPnN0b3BfZncpIHsKLQkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTsKLQl9Ci0KLQkvKiBQcm9ncmFtIHRoZSBhZGFwdGVyIHdpdGggbmV3IGZpcm13YXJlICovCi0JcmV0ID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOwotCWlmIChyZXQpCi0JCWdvdG8gZnJlZTsKLQotCS8qIFdyaXRlIHRoZSBQREEgdG8gdGhlIGFkYXB0ZXIgKi8KLQlpZiAoc2Vjb25kYXJ5KSB7Ci0JCXNpemVfdCBsZW4gPSBoZXJtZXNfYmxvY2tzX2xlbmd0aChmaXJzdF9ibG9jayk7Ci0JCXB0ciA9IGZpcnN0X2Jsb2NrICsgbGVuOwotCQlyZXQgPSBoZXJtZXNfYXBwbHlfcGRhKGh3LCBwdHIsIHBkYSk7Ci0JCWtmcmVlKHBkYSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFJ1biB0aGUgZmlybXdhcmUgKi8KLQlpZiAocHJpdi0+c3RvcF9mdykgewotCQlyZXQgPSBwcml2LT5zdG9wX2Z3KHByaXYsIDApOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBSZXNldCBoZXJtZXMgY2hpcCBhbmQgbWFrZSBzdXJlIGl0IHJlc3BvbmRzICovCi0JcmV0ID0gaGVybWVzX2luaXQoaHcpOwotCi0JLyogaGVybWVzX3Jlc2V0KCkgc2hvdWxkIHJldHVybiAwIHdpdGggdGhlIHNlY29uZGFyeSBmaXJtd2FyZSAqLwotCWlmIChzZWNvbmRhcnkgJiYgcmV0ICE9IDApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogQW5kIHRoaXMgc2hvdWxkIHdvcmsgd2l0aCBhbnkgZmlybXdhcmUgKi8KLQlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gMDsKLQotZnJlZToKLQlrZnJlZShwZGEpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoKLSAqIERvd25sb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLCB0aGlzIGFsc28gZG9lcyBhIFBDTUNJQSBzb2Z0Ci0gKiByZXNldCBvbiB0aGUgY2FyZCwgdG8gbWFrZSBzdXJlIGl0J3MgaW4gYSBzYW5lIHN0YXRlLgotICovCi1zdGF0aWMgaW50Ci1zeW1ib2xfZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJICAgY29uc3Qgc3RydWN0IGZ3X2luZm8gKmZ3KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCWludCByZXQ7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKLQotCWlmICghcHJpdi0+Y2FjaGVkX3ByaV9mdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5wcmlfZncsIHByaXYtPmRldikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnByaV9mdyk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9wcmlfZnc7Ci0KLQkvKiBMb2FkIHByaW1hcnkgZmlybXdhcmUgKi8KLQlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAotCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMCk7Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9wcmlfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KSB7Ci0JCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnN0YV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+c3RhX2Z3KTsKLQkJCXJldHVybiAtRU5PRU5UOwotCQl9Ci0JfSBlbHNlCi0JCWZ3X2VudHJ5ID0gcHJpdi0+Y2FjaGVkX2Z3OwotCi0JLyogTG9hZCBzZWNvbmRhcnkgZmlybXdhcmUgKi8KLQlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAotCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMSk7Ci0JaWYgKCFwcml2LT5jYWNoZWRfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogU2Vjb25kYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2Rvd25sb2FkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaW50IGVyciA9IDA7Ci0JLyogUmVsb2FkIGZpcm13YXJlICovCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkvKiBjYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6ICovCi0JCWVyciA9IG9yaW5vY29fZGxfZmlybXdhcmUocHJpdiwKLQkJCQkJICAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJZXJyID0gc3ltYm9sX2RsX2Zpcm13YXJlKHByaXYsCi0JCQkJCSAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSk7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJYnJlYWs7Ci0JfQotCS8qIFRPRE86IGlmIHdlIGZhaWwgd2UgcHJvYmFibHkgbmVlZCB0byByZWluaXRpYWxpc2UKLQkgKiB0aGUgZHJpdmVyICovCi0KLQlyZXR1cm4gZXJyOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQotc3RhdGljIHZvaWQgb3Jpbm9jb19jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgYXApCi17Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7Ci0JY29uc3QgY2hhciAqcHJpX2Z3OwotCWNvbnN0IGNoYXIgKmZ3OwotCi0JcHJpX2Z3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5wcmlfZnc7Ci0JaWYgKGFwKQotCQlmdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0uYXBfZnc7Ci0JZWxzZQotCQlmdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0uc3RhX2Z3OwotCi0JaWYgKHByaV9mdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHByaV9mdywgcHJpdi0+ZGV2KSA9PSAwKQotCQkJcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IGZ3X2VudHJ5OwotCX0KLQotCWlmIChmdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LCBwcml2LT5kZXYpID09IDApCi0JCQlwcml2LT5jYWNoZWRfZncgPSBmd19lbnRyeTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT5jYWNoZWRfcHJpX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9wcmlfZncpOwotCWlmIChwcml2LT5jYWNoZWRfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+Y2FjaGVkX2Z3KTsKLQotCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOwotCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7Ci19Ci0jZWxzZQotI2RlZmluZSBvcmlub2NvX2NhY2hlX2Z3KHByaXYsIGFwKQotI2RlZmluZSBvcmlub2NvX3VuY2FjaGVfZncocHJpdikKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEZXZpY2UgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgb3Jpbm9jb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKLQotCWlmICghIGVycikKLQkJcHJpdi0+b3BlbiA9IDE7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFdlIG11c3RuJ3QgdXNlIG9yaW5vY29fbG9jaygpIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byBiZQotCSAgIGFibGUgdG8gY2xvc2UgdGhlIGludGVyZmFjZSBldmVuIGlmIGh3X3VuYXZhaWxhYmxlIGlzIHNldAotCSAgIChlLmcuIGFzIHdlJ3JlIHJlbGVhc2VkIGFmdGVyIGEgUEMgQ2FyZCByZW1vdmFsKSAqLwotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JcHJpdi0+b3BlbiA9IDA7Ci0KLQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqb3Jpbm9jb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKm9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghIG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGdldF93aXJlbGVzc19zdGF0cygpIGNhbGxlZCB3aGlsZSBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gTlVMTDsgLyogRklYTUU6IENhbiB3ZSBkbyBiZXR0ZXIgdGhhbiB0aGlzPyAqLwotCX0KLQotCS8qIElmIGJ1c3ksIHJldHVybiB0aGUgb2xkIHN0YXRzLiAgUmV0dXJuaW5nIE5VTEwgbWF5IGNhdXNlCi0JICogdGhlIGludGVyZmFjZSB0byBkaXNhcHBlYXIgZnJvbSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIHdzdGF0czsKLQotCS8qIFdlIGNhbid0IHJlYWxseSB3YWl0IGZvciB0aGUgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgdG8KLQkgKiBjb21wbGV0ZSwgc28gd2UganVzdCB1c2UgdGhlIHByZXZpb3VzIHJlc3VsdHMgYW5kIHRyaWdnZXIKLQkgKiBhIG5ldyB0YWxsaWVzIGlucXVpcnkgY29tbWFuZCBmb3IgbmV4dCB0aW1lIC0gSmVhbiBJSSAqLwotCS8qIEZJWE1FOiBSZWFsbHkgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBpbnF1aXJ5IHRvIGNvbWUgYmFjayAtCi0JICogYXMgaXQgaXMgdGhlIHN0YXRzIHdlIGdpdmUgZG9uJ3QgbWFrZSBhIHdob2xlIGxvdCBvZiBzZW5zZS4KLQkgKiBVbmZvcnR1bmF0ZWx5LCBpdCdzIG5vdCBjbGVhciBob3cgdG8gZG8gdGhhdCB3aXRoaW4gdGhlCi0JICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcmFtZXdvcms6IEkgdGhpbmsgd2UncmUgaW4gdXNlcgotCSAqIGNvbnRleHQsIGJ1dCBhIGxvY2sgc2VlbXMgdG8gYmUgaGVsZCBieSB0aGUgdGltZSB3ZSBnZXQgaW4KLQkgKiBoZXJlIHNvIHdlJ3JlIG5vdCBzYWZlIHRvIHNsZWVwIGhlcmUuICovCi0JaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfVEFMTElFUyk7Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7Ci0JCW1lbXNldCgmd3N0YXRzLT5xdWFsLCAwLCBzaXplb2Yod3N0YXRzLT5xdWFsKSk7Ci0JCS8qIElmIGEgc3B5IGFkZHJlc3MgaXMgZGVmaW5lZCwgd2UgcmVwb3J0IHN0YXRzIG9mIHRoZQotCQkgKiBmaXJzdCBzcHkgYWRkcmVzcyAtIEplYW4gSUkgKi8KLQkJaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKLQkJCXdzdGF0cy0+cXVhbC5xdWFsID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKLQkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOwotCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgewotCQkJX19sZTE2IHF1YWwsIHNpZ25hbCwgbm9pc2UsIHVudXNlZDsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3E7Ci0KLQkJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJIEhFUk1FU19SSURfQ09NTVNRVUFMSVRZLCAmY3EpOwotCi0JCWlmICghZXJyKSB7Ci0JCQl3c3RhdHMtPnF1YWwucXVhbCA9IChpbnQpbGUxNl90b19jcHUoY3EucXVhbCk7Ci0JCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnNpZ25hbCkgLSAweDk1OwotCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gKGludClsZTE2X3RvX2NwdShjcS5ub2lzZSkgLSAweDk1OwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07Ci0JCX0KLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiB3c3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoKSAiCi0JCSAgICAgICAiY2FsbGVkIHdoZW4gaHdfdW5hdmFpbGFibGVcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIChuZXdfbXR1IDwgT1JJTk9DT19NSU5fTVRVKSB8fCAobmV3X210dSA+IE9SSU5PQ09fTUFYX01UVSkgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE1UVSArIGVuY2Fwc3VsYXRpb24gKyBoZWFkZXIgbGVuZ3RoICovCi0JaWYgKCAobmV3X210dSArIEVOQ0FQU19PVkVSSEVBRCArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpID4KLQkgICAgIChwcml2LT5uaWNidWZfc2l6ZSAtIEVUSF9ITEVOKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGV2LT5tdHUgPSBuZXdfbXR1OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFR4IHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBvcmlub2NvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiB0eGZpZCA9IHByaXYtPnR4ZmlkOwotCXN0cnVjdCBldGhoZHIgKmVoOwotCWludCB0eF9jb250cm9sOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVHggb24gc3RvcHBlZCBkZXZpY2UhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQkKLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggd2hpbGUgdHJhbnNtaXR0ZXIgYnVzeSFcbiIsIAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQkKLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3htaXQoKSBjYWxsZWQgd2hpbGUgaHdfdW5hdmFpbGFibGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCi0JaWYgKCEgbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8IChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKLQkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0ICh0aGlzIHNlZW1zIHRvIGJlIHRoZQotICAgICAgICAgICAgICAgICAgIHNhZmVzdCBhcHByb2FjaCkuICovCi0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCi0JaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCi0JCWdvdG8gZHJvcDsKLQotCXR4X2NvbnRyb2wgPSBIRVJNRVNfVFhDVFJMX1RYX09LIHwgSEVSTUVTX1RYQ1RSTF9UWF9FWDsKLQotCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkKLQkJdHhfY29udHJvbCB8PSAocHJpdi0+dHhfa2V5IDw8IEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKSB8Ci0JCQlIRVJNRVNfVFhDVFJMX01JQzsKLQotCWlmIChwcml2LT5oYXNfYWx0X3R4Y250bCkgewotCQkvKiBXUEEgZW5hYmxlZCBmaXJtd2FyZXMgaGF2ZSB0eF9jbnRsIGF0IHRoZSBlbmQgb2YKLQkJICogdGhlIDgwMi4xMSBoZWFkZXIuICBTbyB3cml0ZSB6ZXJvZWQgZGVzY3JpcHRvciBhbmQKLQkJICogODAyLjExIGhlYWRlciBhdCB0aGUgc2FtZSB0aW1lCi0JCSAqLwotCQljaGFyIGRlc2NbSEVSTUVTXzgwMl8zX09GRlNFVF07Ci0JCV9fbGUxNiAqdHhjbnRsID0gKF9fbGUxNiAqKSAmZGVzY1tIRVJNRVNfVFhDTlRMMl9PRkZTRVRdOwotCi0JCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKLQotCQkqdHhjbnRsID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7Ci0JCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKLQkJCQkJdHhmaWQsIDApOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgotCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gYnVzeTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOwotCi0JCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKLQotCQlkZXNjLnR4X2NvbnRyb2wgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKLQkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAotCQkJCQl0eGZpZCwgMCk7Ci0JCWlmIChlcnIpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCi0JCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBidXN5OwotCQl9Ci0KLQkJLyogQ2xlYXIgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgbGVuZ3RoIGZpZWxkcyAtIHNvbWUKLQkJICogZmlybXdhcmVzIChlLmcuIEx1Y2VudC9BZ2VyZSA4Lnh4KSBhcHBlYXIgdG8gZ2V0IGNvbmZ1c2VkCi0JCSAqIGlmIHRoaXMgaXNuJ3QgZG9uZS4gKi8KLQkJaGVybWVzX2NsZWFyX3dvcmRzKGh3LCBIRVJNRVNfREFUQTAsCi0JCQkJICAgSEVSTUVTXzgwMl8zX09GRlNFVCAtIEhFUk1FU184MDJfMTFfT0ZGU0VUKTsKLQl9Ci0KLQllaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwotCi0JLyogRW5jYXBzdWxhdGUgRXRoZXJuZXQtSUkgZnJhbWVzICovCi0JaWYgKG50b2hzKGVoLT5oX3Byb3RvKSA+IEVUSF9EQVRBX0xFTikgeyAvKiBFdGhlcm5ldC1JSSBmcmFtZSAqLwotCQlzdHJ1Y3QgaGVhZGVyX3N0cnVjdCB7Ci0JCQlzdHJ1Y3QgZXRoaGRyIGV0aDsJLyogODAyLjMgaGVhZGVyICovCi0JCQl1OCBlbmNhcFs2XTsJCS8qIDgwMi4yIGhlYWRlciAqLwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZHI7Ci0KLQkJLyogU3RyaXAgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBmcm9tIHRoZSBkYXRhICovCi0JCXNrYl9wdWxsKHNrYiwgMiAqIEVUSF9BTEVOKTsKLQotCQkvKiBBbmQgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUgaGVhZGVyICovCi0JCW1lbWNweSgmaGRyLmV0aCwgZWgsIDIgKiBFVEhfQUxFTik7Ci0JCWhkci5ldGguaF9wcm90byA9IGh0b25zKHNpemVvZihlbmNhcHNfaGRyKSArIHNrYi0+bGVuKTsKLQkJbWVtY3B5KGhkci5lbmNhcCwgZW5jYXBzX2hkciwgc2l6ZW9mKGVuY2Fwc19oZHIpKTsKLQotCQkvKiBJbnNlcnQgdGhlIFNOQVAgaGVhZGVyICovCi0JCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZihoZHIpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IE5vdCBlbm91Z2ggaGVhZHJvb20gZm9yIDgwMi4yIGhlYWRlcnMgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBza2JfaGVhZHJvb20oc2tiKSk7Ci0JCQlnb3RvIGRyb3A7Ci0JCX0KLQkJZWggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVzaChza2IsIHNpemVvZihoZHIpKTsKLQkJbWVtY3B5KGVoLCAmaGRyLCBzaXplb2YoaGRyKSk7Ci0JfQotCi0JZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCBza2ItPmRhdGEsIHNrYi0+bGVuLAotCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgcGFja2V0IHRvIEJBUFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBidXN5OwotCX0KLQotCS8qIENhbGN1bGF0ZSBNaWNoYWVsIE1JQyAqLwotCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgewotCQl1OCBtaWNfYnVmW01JQ0hBRUxfTUlDX0xFTiArIDFdOwotCQl1OCAqbWljOwotCQlzaXplX3Qgb2Zmc2V0OwotCQlzaXplX3QgbGVuOwotCi0JCWlmIChza2ItPmxlbiAlIDIpIHsKLQkJCS8qIE1JQyBzdGFydCBpcyBvbiBhbiBvZGQgYm91bmRhcnkgKi8KLQkJCW1pY19idWZbMF0gPSBza2ItPmRhdGFbc2tiLT5sZW4gLSAxXTsKLQkJCW1pYyA9ICZtaWNfYnVmWzFdOwotCQkJb2Zmc2V0ID0gc2tiLT5sZW4gLSAxOwotCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOICsgMTsKLQkJfSBlbHNlIHsKLQkJCW1pYyA9ICZtaWNfYnVmWzBdOwotCQkJb2Zmc2V0ID0gc2tiLT5sZW47Ci0JCQlsZW4gPSBNSUNIQUVMX01JQ19MRU47Ci0JCX0KLQotCQltaWNoYWVsX21pYyhwcml2LT50eF90Zm1fbWljLAotCQkJICAgIHByaXYtPnRraXBfa2V5W3ByaXYtPnR4X2tleV0udHhfbWljLAotCQkJICAgIGVoLT5oX2Rlc3QsIGVoLT5oX3NvdXJjZSwgMCAvKiBwcmlvcml0eSAqLywKLQkJCSAgICBza2ItPmRhdGEgKyBFVEhfSExFTiwgc2tiLT5sZW4gLSBFVEhfSExFTiwgbWljKTsKLQotCQkvKiBXcml0ZSB0aGUgTUlDICovCi0JCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJm1pY19idWZbMF0sIGxlbiwKLQkJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQgKyBvZmZzZXQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIE1JQyB0byBCQVBcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBidXN5OwotCQl9Ci0JfQotCi0JLyogRmluYWxseSwgd2UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHNlbmQgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9UWCB8IEhFUk1FU19DTURfUkVDTCwKLQkJCQl0eGZpZCwgTlVMTCk7Ci0JaWYgKGVycikgewotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKLQkJCQlkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gYnVzeTsKLQl9Ci0KLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gSEVSTUVTXzgwMl8zX09GRlNFVCArIHNrYi0+bGVuOwotCWdvdG8gb2s7Ci0KLSBkcm9wOgotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCi0gb2s6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLQotIGJ1c3k6Ci0JaWYgKGVyciA9PSAtRUlPKQotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOwotCi0JaWYgKGZpZCAhPSBwcml2LT50eGZpZCkgewotCQlpZiAoZmlkICE9IERVTU1ZX0ZJRCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBbGxvY2F0ZSBldmVudCBvbiB1bmV4cGVjdGVkIGZpZCAoJTA0WClcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmaWQpOwotCQlyZXR1cm47Ci0JfQotCi0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIEFMTE9DRklELCBEVU1NWV9GSUQpOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0KLQloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4ZXhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOwotCXUxNiBzdGF0dXM7Ci0Jc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIGhkcjsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChmaWQgPT0gRFVNTVlfRklEKQotCQlyZXR1cm47IC8qIE5vdGhpbmcncyByZWFsbHkgaGFwcGVuZWQgKi8KLQotCS8qIFJlYWQgcGFydCBvZiB0aGUgZnJhbWUgaGVhZGVyIC0gd2UgbmVlZCBzdGF0dXMgYW5kIGFkZHIxICovCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmhkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhlcm1lc190eGV4Y19kYXRhKSwKLQkJCSAgICAgICBmaWQsIDApOwotCi0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7Ci0Jc3RhdHMtPnR4X2Vycm9ycysrOwotCi0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlYWQgZGVzY3JpcHRvciBvbiBUeCBlcnJvciAiCi0JCSAgICAgICAiKEZJRD0lMDRYIGVycm9yICVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZmlkLCBlcnIpOwotCQlyZXR1cm47Ci0JfQotCQotCURFQlVHKDEsICIlczogVHggZXJyb3IsIGVyciAlZCAoRklEPSUwNFgpXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgZXJyLCBmaWQpOwotICAgIAotCS8qIFdlIHByb2R1Y2UgYSBUWERST1AgZXZlbnQgb25seSBmb3IgcmV0cnkgb3IgbGlmZXRpbWUKLQkgKiBleGNlZWRlZCwgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgc3RhdHVzIHRoYXQgcmVhbGx5IG1lYW4KLQkgKiB0aGF0IHRoaXMgcGFydGljdWxhciBub2RlIHdlbnQgYXdheS4KLQkgKiBPdGhlciBlcnJvcnMgbWVhbnMgdGhhdCAqd2UqIHNjcmV3ZWQgdXAuIC0gSmVhbiBJSSAqLwotCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGhkci5kZXNjLnN0YXR1cyk7Ci0JaWYgKHN0YXR1cyAmIChIRVJNRVNfVFhTVEFUX1JFVFJZRVJSIHwgSEVSTUVTX1RYU1RBVF9BR0VERVJSKSkgewotCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0KLQkJLyogQ29weSA4MDIuMTEgZGVzdCBhZGRyZXNzLgotCQkgKiBXZSB1c2UgdGhlIDgwMi4xMSBoZWFkZXIgYmVjYXVzZSB0aGUgZnJhbWUgbWF5Ci0JCSAqIG5vdCBiZSA4MDIuMyBvciBtYXkgYmUgbWFuZ2xlZC4uLgotCQkgKiBJbiBBZC1Ib2MgbW9kZSwgaXQgd2lsbCBiZSB0aGUgbm9kZSBhZGRyZXNzLgotCQkgKiBJbiBtYW5hZ2VkIG1vZGUsIGl0IHdpbGwgYmUgbW9zdCBsaWtlbHkgdGhlIEFQIGFkZHIKLQkJICogVXNlciBzcGFjZSB3aWxsIGZpZ3VyZSBvdXQgaG93IHRvIGNvbnZlcnQgaXQgdG8KLQkJICogd2hhdGV2ZXIgaXQgbmVlZHMgKElQIGFkZHJlc3Mgb3IgZWxzZSkuCi0JCSAqIC0gSmVhbiBJSSAqLwotCQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIGhkci5hZGRyMSwgRVRIX0FMRU4pOwotCQl3cnF1LmFkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCi0JCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVlRYRFJPUCwgJndycXUsIE5VTEwpOwotCX0KLQotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFR4IHRpbWVvdXQhICIKLQkgICAgICAgIkFMTE9DRklEPSUwNHgsIFRYQ09NUExGSUQ9JTA0eCwgRVZTVEFUPSUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpLAotCSAgICAgICBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKSwgaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKSk7Ci0KLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0KLQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUnggcGF0aCAoZGF0YSBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBEb2VzIHRoZSBmcmFtZSBoYXZlIGEgU05BUCBoZWFkZXIgaW5kaWNhdGluZyBpdCBzaG91bGQgYmUKLSAqIGRlLWVuY2Fwc3VsYXRlZCB0byBFdGhlcm5ldC1JST8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2V0aGVyc25hcCh2b2lkICpfaGRyKQotewotCXU4ICpoZHIgPSBfaGRyOwotCi0JLyogV2UgZGUtZW5jYXBzdWxhdGUgYWxsIHBhY2tldHMgd2hpY2gsIGEpIGhhdmUgU05BUCBoZWFkZXJzCi0JICogKGkuZS4gU1NBUD1EU0FQPTB4YWEgYW5kIENUUkw9MHgzIGluIHRoZSA4MDIuMiBMTEMgaGVhZGVyCi0JICogYW5kIHdoZXJlIGIpIHRoZSBPVUkgb2YgdGhlIFNOQVAgaGVhZGVyIGlzIDAwOjAwOjAwIG9yCi0JICogMDA6MDA6ZjggLSB3ZSBuZWVkIGJvdGggYmVjYXVzZSBkaWZmZXJlbnQgQVBzIGFwcGVhciB0byB1c2UKLQkgKiBkaWZmZXJlbnQgT1VJcyBmb3Igc29tZSByZWFzb24gKi8KLQlyZXR1cm4gKG1lbWNtcChoZHIsICZlbmNhcHNfaGRyLCA1KSA9PSAwKQotCQkmJiAoIChoZHJbNV0gPT0gMHgwMCkgfHwgKGhkcls1XSA9PSAweGY4KSApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciAqbWFjLAotCQkJCSAgICAgIGludCBsZXZlbCwgaW50IG5vaXNlKQotewotCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQl3c3RhdHMubGV2ZWwgPSBsZXZlbCAtIDB4OTU7Ci0Jd3N0YXRzLm5vaXNlID0gbm9pc2UgLSAweDk1OwotCXdzdGF0cy5xdWFsID0gKGxldmVsID4gbm9pc2UpID8gKGxldmVsIC0gbm9pc2UpIDogMDsKLQl3c3RhdHMudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKLQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KLQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbWFjLCAmd3N0YXRzKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zdGF0X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogVXNpbmcgc3B5IHN1cHBvcnQgd2l0aCBsb3RzIG9mIFJ4IHBhY2tldHMsIGxpa2UgaW4gYW4KLQkgKiBpbmZyYXN0cnVjdHVyZSAoQVApLCB3aWxsIHJlYWxseSBzbG93IGRvd24gZXZlcnl0aGluZywgYmVjYXVzZQotCSAqIHRoZSBNQUMgYWRkcmVzcyBtdXN0IGJlIGNvbXBhcmVkIHRvIGVhY2ggZW50cnkgb2YgdGhlIHNweSBsaXN0LgotCSAqIElmIHRoZSB1c2VyIHJlYWxseSBhc2tzIGZvciBpdCAoc2V0IHNvbWUgYWRkcmVzcyBpbiB0aGUKLQkgKiBzcHkgbGlzdCksIHdlIGRvIGl0LCBidXQgaGUgd2lsbCBwYXkgdGhlIHByaWNlLgotCSAqIE5vdGUgdGhhdCB0byBnZXQgaGVyZSwgeW91IG5lZWQgYm90aCBXSVJFTEVTU19TUFkKLQkgKiBjb21waWxlZCBpbiBBTkQgc29tZSBhZGRyZXNzZXMgaW4gdGhlIGxpc3QgISEhCi0JICovCi0JLyogTm90ZSA6IGdjYyB3aWxsIG9wdGltaXNlIHRoZSB3aG9sZSBzZWN0aW9uIGF3YXkgaWYKLQkgKiBXSVJFTEVTU19TUFkgaXMgbm90IGRlZmluZWQuLi4gLSBKZWFuIElJICovCi0JaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKLQkJb3Jpbm9jb19zcHlfZ2F0aGVyKGRldiwgc2tiX21hY19oZWFkZXIoc2tiKSArIEVUSF9BTEVOLAotCQkJCSAgIGRlc2MtPnNpZ25hbCwgZGVzYy0+c2lsZW5jZSk7Ci0JfQotfQotCi0vKgotICogb3Jpbm9jb19yeF9tb25pdG9yIC0gaGFuZGxlIHJlY2VpdmVkIG1vbml0b3IgZnJhbWVzLgotICoKLSAqIEFyZ3VtZW50czoKLSAqCWRldgkJbmV0d29yayBkZXZpY2UKLSAqCXJ4ZmlkCQlyZWNlaXZlZCBGSUQKLSAqCWRlc2MJCXJ4IGRlc2NyaXB0b3Igb2YgdGhlIGZyYW1lCi0gKgotICogQ2FsbCBjb250ZXh0OiBpbnRlcnJ1cHQKLSAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19yeF9tb25pdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByeGZpZCwKLQkJCSAgICAgICBzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCi17Ci0JdTMyIGhkcmxlbiA9IDMwOwkvKiByZXR1cm4gZnVsbCBoZWFkZXIgYnkgZGVmYXVsdCAqLwotCXUzMiBkYXRhbGVuID0gMDsKLQl1MTYgZmM7Ci0JaW50IGVycjsKLQlpbnQgbGVuOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQotCWxlbiA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKLQotCS8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGFuZCB0aGUgZGF0YSAqLwotCWZjID0gbGUxNl90b19jcHUoZGVzYy0+ZnJhbWVfY3RsKTsKLQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKLQkJICAgICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCi0JCQloZHJsZW4gPSAzMDsKLQkJZWxzZQotCQkJaGRybGVuID0gMjQ7Ci0JCWRhdGFsZW4gPSBsZW47Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCWhkcmxlbiA9IDI0OwotCQlkYXRhbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QU1BPTEw6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQ6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLOgotCQkJaGRybGVuID0gMTY7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6Ci0JCQloZHJsZW4gPSAxMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIFVua25vd24gZnJhbWUgdHlwZSAqLwotCQlicmVhazsKLQl9Ci0KLQkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLwotCWlmIChkYXRhbGVuID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTiArIDEyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb3ZlcnNpemVkIG1vbml0b3IgZnJhbWUsICIKLQkJICAgICAgICJkYXRhIGxlbmd0aCA9ICVkXG4iLCBkZXYtPm5hbWUsIGRhdGFsZW4pOwotCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGhkcmxlbiArIGRhdGFsZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgYWxsb2NhdGUgc2tiIGZvciBtb25pdG9yIGZyYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiICovCi0JbWVtY3B5KHNrYl9wdXQoc2tiLCBoZHJsZW4pLCAmKGRlc2MtPmZyYW1lX2N0bCksIGhkcmxlbik7Ci0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQotCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KLQlpZiAoZGF0YWxlbiA+IDApIHsKLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgc2tiX3B1dChza2IsIGRhdGFsZW4pLAotCQkJCSAgICAgICBBTElHTihkYXRhbGVuLCAyKSwgcnhmaWQsCi0JCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIG1vbml0b3IgZnJhbWVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBkcm9wOwotCQl9Ci0JfQotCi0Jc2tiLT5kZXYgPSBkZXY7Ci0Jc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8yKTsKLQkKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCW5ldGlmX3J4KHNrYik7Ci0JcmV0dXJuOwotCi0gZHJvcDoKLQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotIHVwZGF0ZV9zdGF0czoKLQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLX0KLQotLyogR2V0IHRzYyBmcm9tIHRoZSBmaXJtd2FyZSAqLwotc3RhdGljIGludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksCi0JCQkJICB1OCAqdHNjKQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1OCB0c2NfYXJyWzRdW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwotCi0JaWYgKChrZXkgPCAwKSB8fCAoa2V5ID4gNCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX1RLSVBfSVYsCi0JCQkgICAgICBzaXplb2YodHNjX2FyciksIE5VTEwsICZ0c2NfYXJyKTsKLQlpZiAoIWVycikKLQkJbWVtY3B5KHRzYywgJnRzY19hcnJba2V5XVswXSwgc2l6ZW9mKHRzY19hcnJbMF0pKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwotCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCXUxNiByeGZpZCwgc3RhdHVzOwotCWludCBsZW5ndGg7Ci0Jc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGE7Ci0JaW50IGVycjsKLQotCWRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9BVE9NSUMpOwotCWlmICghZGVzYykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IENhbid0IGFsbG9jYXRlIHNwYWNlIGZvciBSWCBkZXNjcmlwdG9yXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JcnhmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBSWEZJRCk7Ci0KLQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBkZXNjLCBzaXplb2YoKmRlc2MpLAotCQkJICAgICAgIHJ4ZmlkLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgUnggZGVzY3JpcHRvci4gIgotCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1cyk7Ci0KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9CQURDUkMpIHsKLQkJREVCVUcoMSwgIiVzOiBCYWQgQ1JDIG9uIFJ4LiBGcmFtZSBkcm9wcGVkLlxuIiwKLQkJICAgICAgZGV2LT5uYW1lKTsKLQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogSGFuZGxlIGZyYW1lcyBpbiBtb25pdG9yIG1vZGUgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJb3Jpbm9jb19yeF9tb25pdG9yKGRldiwgcnhmaWQsIGRlc2MpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9VTkRFQ1JZUFRBQkxFKSB7Ci0JCURFQlVHKDEsICIlczogVW5kZWNyeXB0YWJsZSBmcmFtZSBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCi0JCSAgICAgIGRldi0+bmFtZSk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5jb2RlKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKLQotCS8qIFNhbml0eSBjaGVja3MgKi8KLQlpZiAobGVuZ3RoIDwgMykgeyAvKiBObyBmb3IgZXZlbiBhbiA4MDIuMiBMTEMgaGVhZGVyICovCi0JCS8qIEF0IGxlYXN0IG9uIFN5bWJvbCBmaXJtd2FyZSB3aXRoIFBDRiB3ZSBnZXQgcXVpdGUgYQotICAgICAgICAgICAgICAgICAgIGxvdCBvZiB0aGVzZSBsZWdpdGltYXRlbHkgLSBQb2xsIGZyYW1lcyB3aXRoIG5vCi0gICAgICAgICAgICAgICAgICAgZGF0YS4gKi8KLQkJZ290byBvdXQ7Ci0JfQotCWlmIChsZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgZnJhbWUgcmVjZWl2ZWQgKCVkIGJ5dGVzKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuZ3RoKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogUGF5bG9hZCBzaXplIGRvZXMgbm90IGluY2x1ZGUgTWljaGFlbCBNSUMuIEluY3JlYXNlIHBheWxvYWQKLQkgKiBzaXplIHRvIHJlYWQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgZGF0YS4gKi8KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpCi0JCWxlbmd0aCArPSBNSUNIQUVMX01JQ19MRU47Ci0KLQkvKiBXZSBuZWVkIHNwYWNlIGZvciB0aGUgcGFja2V0IGRhdGEgaXRzZWxmLCBwbHVzIGFuIGV0aGVybmV0Ci0JICAgaGVhZGVyLCBwbHVzIDIgYnl0ZXMgc28gd2UgY2FuIGFsaWduIHRoZSBJUCBoZWFkZXIgb24gYQotCSAgIDMyYml0IGJvdW5kYXJ5LCBwbHVzIDEgYnl0ZSBzbyB3ZSBjYW4gcmVhZCBpbiBvZGQgbGVuZ3RoCi0JICAgcGFja2V0cyBmcm9tIHRoZSBjYXJkLCB3aGljaCBoYXMgYW4gSU8gZ3JhbnVsYXJpdHkgb2YgMTYKLQkgICBiaXRzICovICAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCtFVEhfSExFTisyKzEpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBza2IgZm9yIFJ4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JLyogV2UnbGwgcHJlcGVuZCB0aGUgaGVhZGVyLCBzbyByZXNlcnZlIHNwYWNlIGZvciBpdC4gIFRoZSB3b3JzdAotCSAgIGNhc2UgaXMgbm8gZGVjYXBzdWxhdGlvbiwgd2hlbiA4MDIuMyBoZWFkZXIgaXMgcHJlcGVuZGVkIGFuZAotCSAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4gIDIgaXMgZm9yIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIuICAqLwotCXNrYl9yZXNlcnZlKHNrYiwgRVRIX0hMRU4gKyAyKTsKLQotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBsZW5ndGgpLAotCQkJICAgICAgIEFMSUdOKGxlbmd0aCwgMiksIHJ4ZmlkLAotCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBmcmFtZS4gIgotCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBBZGQgZGVzYyBhbmQgc2tiIHRvIHJ4IHF1ZXVlICovCi0JcnhfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9kYXRhKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFyeF9kYXRhKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSBSWCBwYWNrZXRcbiIsCi0JCQlkZXYtPm5hbWUpOwotCQlnb3RvIGRyb3A7Ci0JfQotCXJ4X2RhdGEtPmRlc2MgPSBkZXNjOwotCXJ4X2RhdGEtPnNrYiA9IHNrYjsKLQlsaXN0X2FkZF90YWlsKCZyeF9kYXRhLT5saXN0LCAmcHJpdi0+cnhfbGlzdCk7Ci0JdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cnhfdGFza2xldCk7Ci0KLQlyZXR1cm47Ci0KLWRyb3A6Ci0JZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLXVwZGF0ZV9zdGF0czoKLQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLW91dDoKLQlrZnJlZShkZXNjKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjLAotCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JdTE2IHN0YXR1cywgZmM7Ci0JaW50IGxlbmd0aDsKLQlzdHJ1Y3QgZXRoaGRyICpoZHI7Ci0KLQlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOwotCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKLQlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7Ci0KLQkvKiBDYWxjdWxhdGUgYW5kIGNoZWNrIE1JQyAqLwotCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykgewotCQlpbnQga2V5X2lkID0gKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQ19LRVlfSUQpID4+Ci0JCQkgICAgICBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCk7Ci0JCXU4IG1pY1tNSUNIQUVMX01JQ19MRU5dOwotCQl1OCAqcnhtaWM7Ci0JCXU4ICpzcmMgPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpID8KLQkJCWRlc2MtPmFkZHIzIDogZGVzYy0+YWRkcjI7Ci0KLQkJLyogRXh0cmFjdCBNaWNoYWVsIE1JQyBmcm9tIHBheWxvYWQgKi8KLQkJcnhtaWMgPSBza2ItPmRhdGEgKyBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTjsKLQotCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gTUlDSEFFTF9NSUNfTEVOKTsKLQkJbGVuZ3RoIC09IE1JQ0hBRUxfTUlDX0xFTjsKLQotCQltaWNoYWVsX21pYyhwcml2LT5yeF90Zm1fbWljLAotCQkJICAgIHByaXYtPnRraXBfa2V5W2tleV9pZF0ucnhfbWljLAotCQkJICAgIGRlc2MtPmFkZHIxLAotCQkJICAgIHNyYywKLQkJCSAgICAwLCAvKiBwcmlvcml0eSBvciBRb1M/ICovCi0JCQkgICAgc2tiLT5kYXRhLAotCQkJICAgIHNrYi0+bGVuLAotCQkJICAgICZtaWNbMF0pOwotCi0JCWlmIChtZW1jbXAobWljLCByeG1pYywKLQkJCSAgIE1JQ0hBRUxfTUlDX0xFTikpIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQkJCXN0cnVjdCBpd19taWNoYWVsbWljZmFpbHVyZSB3eG1pYzsKLQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKLQkJCSAgICAgICAiSW52YWxpZCBNaWNoYWVsIE1JQyBpbiBkYXRhIGZyYW1lIGZyb20gJXBNLCAiCi0JCQkgICAgICAgInVzaW5nIGtleSAlaVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHNyYywga2V5X2lkKTsKLQotCQkJLyogVE9ETzogdXBkYXRlIHN0YXRzICovCi0KLQkJCS8qIE5vdGlmeSB1c2Vyc3BhY2UgKi8KLQkJCW1lbXNldCgmd3htaWMsIDAsIHNpemVvZih3eG1pYykpOwotCQkJd3htaWMuZmxhZ3MgPSBrZXlfaWQgJiBJV19NSUNGQUlMVVJFX0tFWV9JRDsKLQkJCXd4bWljLmZsYWdzIHw9IChkZXNjLT5hZGRyMVswXSAmIDEpID8KLQkJCQlJV19NSUNGQUlMVVJFX0dST1VQIDogSVdfTUlDRkFJTFVSRV9QQUlSV0lTRTsKLQkJCXd4bWljLnNyY19hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJCW1lbWNweSh3eG1pYy5zcmNfYWRkci5zYV9kYXRhLCBzcmMsIEVUSF9BTEVOKTsKLQotCQkJKHZvaWQpIG9yaW5vY29faHdfZ2V0X3RraXBfaXYocHJpdiwga2V5X2lkLAotCQkJCQkJICAgICAgJnd4bWljLnRzY1swXSk7Ci0KLQkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQkJCXdycXUuZGF0YS5sZW5ndGggPSBzaXplb2Yod3htaWMpOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZNSUNIQUVMTUlDRkFJTFVSRSwgJndycXUsCi0JCQkJCSAgICAoY2hhciAqKSAmd3htaWMpOwotCi0JCQlnb3RvIGRyb3A7Ci0JCX0KLQl9Ci0KLQkvKiBIYW5kbGUgZGVjYXBzdWxhdGlvbgotCSAqIEluIG1vc3QgY2FzZXMsIHRoZSBmaXJtd2FyZSB0ZWxsIHVzIGFib3V0IFNOQVAgZnJhbWVzLgotCSAqIEZvciBzb21lIHJlYXNvbiwgdGhlIFNOQVAgZnJhbWVzIHNlbnQgYnkgTGlua1N5cyBBUHMKLQkgKiBhcmUgbm90IHByb3Blcmx5IHJlY29nbmlzZWQgYnkgbW9zdCBmaXJtd2FyZXMuCi0JICogU28sIGNoZWNrIG91cnNlbHZlcyAqLwotCWlmIChsZW5ndGggPj0gRU5DQVBTX09WRVJIRUFEICYmCi0JICAgICgoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTVNHVFlQRSkgPT0gSEVSTUVTX1JYU1RBVF8xMDQyKSB8fAotCSAgICAgKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfVFVOTkVMKSB8fAotCSAgICAgaXNfZXRoZXJzbmFwKHNrYi0+ZGF0YSkpKSB7Ci0JCS8qIFRoZXNlIGluZGljYXRlIGEgU05BUCB3aXRoaW4gODAyLjIgTExDIHdpdGhpbgotCQkgICA4MDIuMTEgZnJhbWUgd2hpY2ggd2UnbGwgbmVlZCB0byBkZS1lbmNhcHN1bGF0ZSB0bwotCQkgICB0aGUgb3JpZ2luYWwgRXRoZXJuZXRJSSBmcmFtZS4gKi8KLQkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsIEVUSF9ITEVOIC0gRU5DQVBTX09WRVJIRUFEKTsKLQl9IGVsc2UgewotCQkvKiA4MDIuMyBmcmFtZSAtIHByZXBlbmQgODAyLjMgaGVhZGVyIGFzIGlzICovCi0JCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBFVEhfSExFTik7Ci0JCWhkci0+aF9wcm90byA9IGh0b25zKGxlbmd0aCk7Ci0JfQotCW1lbWNweShoZHItPmhfZGVzdCwgZGVzYy0+YWRkcjEsIEVUSF9BTEVOKTsKLQlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpCi0JCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMywgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KGhkci0+aF9zb3VyY2UsIGRlc2MtPmFkZHIyLCBFVEhfQUxFTik7Ci0KLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKQotCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQkKLQkvKiBQcm9jZXNzIHRoZSB3aXJlbGVzcyBzdGF0cyBpZiBuZWVkZWQgKi8KLQlvcmlub2NvX3N0YXRfZ2F0aGVyKGRldiwgc2tiLCBkZXNjKTsKLQotCS8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0d29ya2luZyBzdGFjayAqLwotCW5ldGlmX3J4KHNrYik7Ci0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOwotCi0JcmV0dXJuOwotCi0gZHJvcDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0Jc3RhdHMtPnJ4X2Vycm9ycysrOwotCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKLQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogb3Jpbm9jb19yeCByZXF1aXJlcyB0aGUgZHJpdmVyIGxvY2ssIGFuZCB3ZSBhbHNvIG5lZWQgdG8KLQkgKiBwcm90ZWN0IHByaXYtPnJ4X2xpc3QsIHNvIGp1c3QgaG9sZCB0aGUgbG9jayBvdmVyIHRoZQotCSAqIGxvdC4KLQkgKgotCSAqIElmIG9yaW5vY29fbG9jayBmYWlscywgd2UndmUgdW5wbHVnZ2VkIHRoZSBjYXJkLiBJbiB0aGlzCi0JICogY2FzZSBqdXN0IGFib3J0LiAqLwotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm47Ci0KLQkvKiBleHRyYWN0IGRlc2MgYW5kIHNrYiBmcm9tIHF1ZXVlICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7Ci0JCWRlc2MgPSByeF9kYXRhLT5kZXNjOwotCQlza2IgPSByeF9kYXRhLT5za2I7Ci0JCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKLQkJa2ZyZWUocnhfZGF0YSk7Ci0KLQkJb3Jpbm9jb19yeChkZXYsIGRlc2MsIHNrYik7Ci0KLQkJa2ZyZWUoZGVzYyk7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUnggcGF0aCAoaW5mbyBmcmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBwcmludF9saW5rc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBzdGF0dXMpCi17Ci0JY2hhciAqIHM7Ci0KLQlpZiAoc3VwcHJlc3NfbGlua3N0YXR1cykKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQ6Ci0JCXMgPSAiTm90IENvbm5lY3RlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEOgotCQlzID0gIkNvbm5lY3RlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfRElTQ09OTkVDVEVEOgotCQlzID0gIkRpc2Nvbm5lY3RlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFOgotCQlzID0gIkFQIENoYW5nZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRToKLQkJcyA9ICJBUCBPdXQgb2YgUmFuZ2UiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFOgotCQlzID0gIkFQIEluIFJhbmdlIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BU1NPQ19GQUlMRUQ6Ci0JCXMgPSAiQXNzb2NpYXRpb24gRmFpbGVkIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcyA9ICJVTktOT1dOIjsKLQl9Ci0JCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOZXcgbGluayBzdGF0dXM6ICVzICglMDR4KVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBzLCBzdGF0dXMpOwotfQotCi0vKiBTZWFyY2ggc2NhbiByZXN1bHRzIGZvciByZXF1ZXN0ZWQgQlNTSUQsIGpvaW4gaXQgaWYgZm91bmQgKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fam9pbl9hcChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCBqb2luX3dvcmspOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgam9pbl9yZXEgewotCQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JCV9fbGUxNiBjaGFubmVsOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJlcTsKLQljb25zdCBpbnQgYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKLQlzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvICphdG9tID0gTlVMTDsKLQlpbnQgb2Zmc2V0ID0gNDsKLQlpbnQgZm91bmQgPSAwOwotCXU4ICpidWY7Ci0JdTE2IGxlbjsKLQotCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3Igc2NhbiByZXN1bHRzICovCi0JYnVmID0ga21hbGxvYyhNQVhfU0NBTl9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghIGJ1ZikKLQkJcmV0dXJuOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCWdvdG8gZmFpbF9sb2NrOwotCi0JLyogU2FuaXR5IGNoZWNrcyBpbiBjYXNlIHVzZXIgY2hhbmdlZCBzb21ldGhpbmcgaW4gdGhlIG1lYW50aW1lICovCi0JaWYgKCEgcHJpdi0+YnNzaWRfZml4ZWQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCS8qIFJlYWQgc2NhbiByZXN1bHRzIGZyb20gdGhlIGZpcm13YXJlICovCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCSAgICAgIEhFUk1FU19SSURfU0NBTlJFU1VMVFNUQUJMRSwKLQkJCSAgICAgIE1BWF9TQ0FOX0xFTiwgJmxlbiwgYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIHNjYW4gcmVzdWx0c1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuKTsKLQotCS8qIEdvIHRocm91Z2ggdGhlIHNjYW4gcmVzdWx0cyBsb29raW5nIGZvciB0aGUgY2hhbm5lbCBvZiB0aGUgQVAKLQkgKiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBqb2luICovCi0JZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7Ci0JCWF0b20gPSAoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKLQkJaWYgKG1lbWNtcCgmYXRvbS0+YnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghIGZvdW5kKSB7Ci0JCURFQlVHKDEsICIlczogUmVxdWVzdGVkIEFQIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcbiIsCi0JCSAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbWNweShyZXEuYnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKTsKLQlyZXEuY2hhbm5lbCA9IGF0b20tPmNoYW5uZWw7CS8qIGJvdGggYXJlIGxpdHRsZS1lbmRpYW4gKi8KLQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZKT0lOUkVRVUVTVCwKLQkJCQkgICZyZXEpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGlzc3Vpbmcgam9pbiByZXF1ZXN0XG4iLCBkZXYtPm5hbWUpOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLSBmYWlsX2xvY2s6Ci0Ja2ZyZWUoYnVmKTsKLX0KLQotLyogU2VuZCBuZXcgQlNTSUQgdG8gdXNlcnNwYWNlICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRCU1NJRCwKLQkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCB3cnF1LmFwX2FkZHIuc2FfZGF0YSk7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm47Ci0KLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCi0JLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0Jd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JaW50IGVycjsKLQl1OCBidWZbODhdOwotCXU4ICppZTsKLQotCWlmICghcHJpdi0+aGFzX3dwYSkKLQkJcmV0dXJuOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX0FTU09DX1JFUV9JTkZPLAotCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuOwotCi0JaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGllKSB7Ci0JCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKLQkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07Ci0KLQkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCi0JCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVFJRSwgJndycXUsIGllKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9hc3NvY3Jlc3BpZV93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JaW50IGVycjsKLQl1OCBidWZbODhdOyAvKiBUT0RPOiB2ZXJpZnkgbWF4IHNpemUgb3IgSVdfR0VORVJJQ19JRV9NQVggKi8KLQl1OCAqaWU7Ci0KLQlpZiAoIXByaXYtPmhhc193cGEpCi0JCXJldHVybjsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVNQX0lORk8sCi0JCQkgICAgICBzaXplb2YoYnVmKSwgTlVMTCwgJmJ1Zik7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm47Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShidWYsIHNpemVvZihidWYpKTsKLQlpZiAoaWUpIHsKLQkJaW50IHJlbSA9IHNpemVvZihidWYpIC0gKGllIC0gJmJ1ZlswXSk7Ci0JCXdycXUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWlmICh3cnF1LmRhdGEubGVuZ3RoID4gcmVtKQotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlbTsKLQotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCkKLQkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFU1BJRSwgJndycXUsIGllKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF93ZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIHdldmVudF93b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybjsKLQotCW9yaW5vY29fc2VuZF9hc3NvY3JlcWllX3dldmVudChwcml2KTsKLQlvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHByaXYpOwotCW9yaW5vY29fc2VuZF9ic3NpZF93ZXZlbnQocHJpdik7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzY2FuX2FnZSkKLXsKLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqdG1wX2JzczsKLQotCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghc2Nhbl9hZ2UgfHwKLQkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKLQkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqdG1wX2JzczsKLQotCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghc2Nhbl9hZ2UgfHwKLQkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKLQkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmF0b20pCi17Ci0Jc3RydWN0IHhic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYnNzaWQsIGF0b20tPmJzc2lkKSkKLQkJCWNvbnRpbnVlOwotCQkvKiBFU1NJRCBsZW5ndGhzICovCi0JCWlmIChic3MtPmJzcy5kYXRhWzFdICE9IGF0b20tPmRhdGFbMV0pCi0JCQljb250aW51ZTsKLQkJaWYgKG1lbWNtcCgmYnNzLT5ic3MuZGF0YVsyXSwgJmF0b20tPmRhdGFbMl0sCi0JCQkgICBhdG9tLT5kYXRhWzFdKSkKLQkJCWNvbnRpbnVlOwotCQlmb3VuZCA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KLQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgewotCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHhic3NfZWxlbWVudCwgbGlzdCk7Ci0JCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7Ci0KLQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOwotCX0KLQotCWlmIChic3MpIHsKLQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KLQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQl1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJCWludCBsZW4pCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50CQkJb2Zmc2V0OwkJLyogSW4gdGhlIHNjYW4gZGF0YSAqLwotCXVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmF0b207Ci0JaW50CQkJYXRvbV9sZW47Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCWF0b21fbGVuID0gc2l6ZW9mKHN0cnVjdCBhZ2VyZV9zY2FuX2FwaW5mbyk7Ci0JCW9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCS8qIExhY2sgb2YgZG9jdW1lbnRhdGlvbiBuZWNlc3NpdGF0ZXMgdGhpcyBoYWNrLgotCQkgKiBEaWZmZXJlbnQgZmlybXdhcmVzIGhhdmUgNjggb3IgNzYgYnl0ZSBsb25nIGF0b21zLgotCQkgKiBXZSB0cnkgbW9kdWxvIGZpcnN0LiAgSWYgdGhlIGxlbmd0aCBkaXZpZGVzIGJ5IGJvdGgsCi0JCSAqIHdlIGNoZWNrIHdoYXQgd291bGQgYmUgdGhlIGNoYW5uZWwgaW4gdGhlIHNlY29uZAotCQkgKiBmcmFtZSBmb3IgYSA2OC1ieXRlIGF0b20uICA3Ni1ieXRlIGF0b21zIGhhdmUgMCB0aGVyZS4KLQkJICogVmFsaWQgY2hhbm5lbCBjYW5ub3QgYmUgMC4gICovCi0JCWlmIChsZW4gJSA3NikKLQkJCWF0b21fbGVuID0gNjg7Ci0JCWVsc2UgaWYgKGxlbiAlIDY4KQotCQkJYXRvbV9sZW4gPSA3NjsKLQkJZWxzZSBpZiAobGVuID49IDEyOTIgJiYgYnVmWzY4XSA9PSAwKQotCQkJYXRvbV9sZW4gPSA3NjsKLQkJZWxzZQotCQkJYXRvbV9sZW4gPSA2ODsKLQkJb2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQlvZmZzZXQgPSA0OwotCQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7Ci0JCQlhdG9tX2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopYnVmKTsKLQkJCS8qIFNhbml0eSBjaGVjayBmb3IgYXRvbV9sZW4gKi8KLQkJCWlmIChhdG9tX2xlbiA8IHNpemVvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYXRvbV9sZW4gaW4gc2NhbiAiCi0JCQkJICAgICAgICJkYXRhOiAlZFxuIiwgZGV2LT5uYW1lLCBhdG9tX2xlbik7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCX0gZWxzZQotCQkJYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCS8qIENoZWNrIHRoYXQgd2UgZ290IGFuIHdob2xlIG51bWJlciBvZiBhdG9tcyAqLwotCWlmICgobGVuIC0gb2Zmc2V0KSAlIGF0b21fbGVuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgc2NhbiBkYXRhIGxlbmd0aCAlZCwgIgotCQkgICAgICAgImF0b21fbGVuICVkLCBvZmZzZXQgJWRcbiIsIGRldi0+bmFtZSwgbGVuLAotCQkgICAgICAgYXRvbV9sZW4sIG9mZnNldCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIG1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKLQotCS8qIFJlYWQgdGhlIGVudHJpZXMgb25lIGJ5IG9uZSAqLwotCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgewotCQlpbnQgZm91bmQgPSAwOwotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7Ci0KLQkJLyogR2V0IG5leHQgYXRvbSAqLwotCQlhdG9tID0gKHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKikgKGJ1ZiArIG9mZnNldCk7Ci0KLQkJLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5hLmJzc2lkLCBhdG9tLT5hLmJzc2lkKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChsZTE2X3RvX2NwdShic3MtPmJzcy5hLmVzc2lkX2xlbikgIT0KLQkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChtZW1jbXAoYnNzLT5ic3MuYS5lc3NpZCwgYXRvbS0+YS5lc3NpZCwKLQkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkpCi0JCQkJY29udGludWU7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KLQkJaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKLQkJCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAotCQkJCQkgc3RydWN0IGJzc19lbGVtZW50LCBsaXN0KTsKLQkJCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7Ci0KLQkJCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKLQkJfQotCi0JCWlmIChic3MpIHsKLQkJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCi0JCQltZW1jcHkoJmJzcy0+YnNzLCBhdG9tLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2IGluZm9maWQ7Ci0Jc3RydWN0IHsKLQkJX19sZTE2IGxlbjsKLQkJX19sZTE2IHR5cGU7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaW5mbzsKLQlpbnQgbGVuLCB0eXBlOwotCWludCBlcnI7Ci0KLQkvKiBUaGlzIGlzIGFuIGFuc3dlciB0byBhbiBJTlFVSVJFIGNvbW1hbmQgdGhhdCB3ZSBkaWQgZWFybGllciwKLQkgKiBvciBhbiBpbmZvcm1hdGlvbiAiZXZlbnQiIGdlbmVyYXRlZCBieSB0aGUgY2FyZAotCSAqIFRoZSBjb250cm9sbGVyIHJldHVybiB0byB1cyBhIHBzZXVkbyBmcmFtZSBjb250YWluaW5nCi0JICogdGhlIGluZm9ybWF0aW9uIGluIHF1ZXN0aW9uIC0gSmVhbiBJSSAqLwotCWluZm9maWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBJTkZPRklEKTsKLQotCS8qIFJlYWQgdGhlIGluZm8gZnJhbWUgaGVhZGVyIC0gZG9uJ3QgdHJ5IHRvbyBoYXJkICovCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmluZm8sIHNpemVvZihpbmZvKSwKLQkJCSAgICAgICBpbmZvZmlkLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgaW5mbyBmcmFtZS4gIgotCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybjsKLQl9Ci0JCi0JbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZTE2X3RvX2NwdShpbmZvLmxlbikpOwotCXR5cGUgPSBsZTE2X3RvX2NwdShpbmZvLnR5cGUpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBIRVJNRVNfSU5RX1RBTExJRVM6IHsKLQkJc3RydWN0IGhlcm1lc190YWxsaWVzX2ZyYW1lIHRhbGxpZXM7Ci0JCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwotCQkKLQkJaWYgKGxlbiA+IHNpemVvZih0YWxsaWVzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRhbGxpZXMgZnJhbWUgdG9vIGxvbmcgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlsZW4gPSBzaXplb2YodGFsbGllcyk7Ci0JCX0KLQkJCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZ0YWxsaWVzLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJCi0JCS8qIEluY3JlbWVudCBvdXIgdmFyaW91cyBjb3VudGVycyAqLwotCQkvKiB3c3RhdHMtPmRpc2NhcmQubndpZCAtIG5vIHdyb25nIEJTU0lEIHN0dWZmICovCi0JCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4V0VQVW5kZWNyeXB0YWJsZSk7Ci0JCWlmIChsZW4gPT0gc2l6ZW9mKHRhbGxpZXMpKSAgCi0JCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQotCQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhEaXNjYXJkc19XRVBJQ1ZFcnJvcikgKwotCQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhEaXNjYXJkc19XRVBFeGNsdWRlZCk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5taXNjICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlR4RGlzY2FyZHNXcm9uZ1NBKTsKLQkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4TXNnSW5CYWRNc2dGcmFnbWVudHMpOwotCQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5UeFJldHJ5TGltaXRFeGNlZWRlZCk7Ci0JCS8qIHdzdGF0cy0+bWlzcy5iZWFjb24gLSBubyBtYXRjaCAqLwotCX0KLQlicmVhazsKLQljYXNlIEhFUk1FU19JTlFfTElOS1NUQVRVUzogewotCQlzdHJ1Y3QgaGVybWVzX2xpbmtzdGF0dXMgbGlua3N0YXR1czsKLQkJdTE2IG5ld3N0YXR1czsKLQkJaW50IGNvbm5lY3RlZDsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCi0JCQlicmVhazsKLQotCQlpZiAobGVuICE9IHNpemVvZihsaW5rc3RhdHVzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuZXhwZWN0ZWQgc2l6ZSBmb3IgbGlua3N0YXR1cyBmcmFtZSAoJWQgYnl0ZXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmxpbmtzdGF0dXMsIGxlbiwKLQkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCQluZXdzdGF0dXMgPSBsZTE2X3RvX2NwdShsaW5rc3RhdHVzLmxpbmtzdGF0dXMpOwotCi0JCS8qIFN5bWJvbCBmaXJtd2FyZSB1c2VzICJvdXQgb2YgcmFuZ2UiIHRvIHNpZ25hbCB0aGF0Ci0JCSAqIHRoZSBob3N0c2NhbiBmcmFtZSBjYW4gYmUgcmVxdWVzdGVkLiAgKi8KLQkJaWYgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0UgJiYKLQkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wgJiYKLQkJICAgIHByaXYtPmhhc19ob3N0c2NhbiAmJiBwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKLQkJCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWNvbm5lY3RlZCA9IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEKQotCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0UpCi0JCQl8fCAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFKTsKLQotCQlpZiAoY29ubmVjdGVkKQotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQllbHNlIGlmICghaWdub3JlX2Rpc2Nvbm5lY3QpCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCi0JCWlmIChuZXdzdGF0dXMgIT0gcHJpdi0+bGFzdF9saW5rc3RhdHVzKSB7Ci0JCQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSBuZXdzdGF0dXM7Ci0JCQlwcmludF9saW5rc3RhdHVzKGRldiwgbmV3c3RhdHVzKTsKLQkJCS8qIFRoZSBpbmZvIGZyYW1lIGNvbnRhaW5zIG9ubHkgb25lIHdvcmQgd2hpY2ggaXMgdGhlCi0JCQkgKiBzdGF0dXMgKHNlZSBoZXJtZXMuaCkuIFRoZSBzdGF0dXMgaXMgcHJldHR5IGJvcmluZwotCQkJICogaW4gaXRzZWxmLCB0aGF0J3Mgd2h5IHdlIGV4cG9ydCB0aGUgbmV3IEJTU0lELi4uCi0JCQkgKiBKZWFuIElJICovCi0JCQlzY2hlZHVsZV93b3JrKCZwcml2LT53ZXZlbnRfd29yayk7Ci0JCX0KLQl9Ci0JYnJlYWs7Ci0JY2FzZSBIRVJNRVNfSU5RX1NDQU46Ci0JCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzICYmIHByaXYtPmJzc2lkX2ZpeGVkICYmCi0JCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwpIHsKLQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmpvaW5fd29yayk7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIEhFUk1FU19JTlFfSE9TVFNDQU46Ci0JY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTDogewotCQkvKiBSZXN1bHQgb2YgYSBzY2FubmluZy4gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLQkJICogY2VsbHMgaW4gdGhlIHZpY2luaXR5IC0gSmVhbiBJSSAqLwotCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0JCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLwotCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCi0JCS8qIFNhbml0eSBjaGVjayAqLwotCQlpZiAobGVuID4gNDA5NikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcmVzdWx0cyAqLwotCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChidWYgPT0gTlVMTCkKLQkJCS8qIE5vIG1lbW9yeSwgc28gY2FuJ3QgcHJpbnRrKCkuLi4gKi8KLQkJCWJyZWFrOwotCi0JCS8qIFJlYWQgc2NhbiBkYXRhICovCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJ1ZiwgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJYnJlYWs7Ci0JCX0KLQotI2lmZGVmIE9SSU5PQ09fREVCVUcKLQkJewotCQkJaW50CWk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiU2NhbiByZXN1bHQgWyUwMlgiLCBidWZbMF0pOwotCQkJZm9yKGkgPSAxOyBpIDwgKGxlbiAqIDIpOyBpKyspCi0JCQkJcHJpbnRrKCI6JTAyWCIsIGJ1ZltpXSk7Ci0JCQlwcmludGsoIl1cbiIpOwotCQl9Ci0jZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwotCi0JCWlmIChvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKGRldiwgYnVmLCBsZW4pID09IDApIHsKLQkJCS8qIFNlbmQgYW4gZW1wdHkgZXZlbnQgdG8gdXNlciBzcGFjZS4KLQkJCSAqIFdlIGRvbid0IHNlbmQgdGhlIHJlY2VpdmVkIGRhdGEgb24gdGhlIGV2ZW50IGJlY2F1c2UKLQkJCSAqIGl0IHdvdWxkIHJlcXVpcmUgdXMgdG8gZG8gY29tcGxleCB0cmFuc2NvZGluZywgYW5kCi0JCQkgKiB3ZSB3YW50IHRvIG1pbmltaXNlIHRoZSB3b3JrIGRvbmUgaW4gdGhlIGlycSBoYW5kbGVyCi0JCQkgKiBVc2UgYSByZXF1ZXN0IHRvIGV4dHJhY3QgdGhlIGRhdGEgLSBKZWFuIElJICovCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKLQkJCXdycXUuZGF0YS5mbGFncyA9IDA7Ci0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKLQkJfQotCQlrZnJlZShidWYpOwotCX0KLQlicmVhazsKLQljYXNlIEhFUk1FU19JTlFfQ0hBTk5FTElORk86Ci0JewotCQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzOwotCi0JCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEdvdCBjaGFuaW5mbyB3aXRob3V0IHNjYW4sICIKLQkJCSAgICAgICAibGVuPSVkXG4iLCBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEFuIGVtcHR5IHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBjb21wbGV0ZSAqLwotCQlpZiAobGVuID09IDApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQotCQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KLQkJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7Ci0KLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJZWxzZSBpZiAobGVuID4gc2l6ZW9mKCpic3MpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFeHQgc2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpLiAiCi0JCQkgICAgICAgIlRydW5jYXRpbmcgcmVzdWx0cyB0byAlemQgYnl0ZXMuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBzaXplb2YoKmJzcykpOwotCQkJbGVuID0gc2l6ZW9mKCpic3MpOwotCQl9IGVsc2UgaWYgKGxlbiA8IChvZmZzZXRvZihzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbywKLQkJCQkJICAgZGF0YSkgKyAyKSkgewotCQkJLyogRHJvcCB0aGlzIHJlc3VsdCBub3cgc28gd2UgZG9uJ3QgaGF2ZSB0bwotCQkJICoga2VlcCBjaGVja2luZyBsYXRlciAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gc2hvcnQgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWJzcyA9IGttYWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJzcyA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJLyogUmVhZCBzY2FuIGRhdGEgKi8KLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnNzLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlKGJzcyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCW9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChwcml2LCBic3MpOwotCi0JCWtmcmVlKGJzcyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIEhFUk1FU19JTlFfU0VDX1NUQVRfQUdFUkU6Ci0JCS8qIFNlY3VyaXR5IHN0YXR1cyAoQWdlcmUgc3BlY2lmaWMpICovCi0JCS8qIElnbm9yZSB0aGlzIGZyYW1lIGZvciBub3cgKi8KLQkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKLQkJCWJyZWFrOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVua25vd24gaW5mb3JtYXRpb24gZnJhbWUgcmVjZWl2ZWQ6ICIKLQkJICAgICAgICJ0eXBlIDB4JTA0eCwgbGVuZ3RoICVkXG4iLCBkZXYtPm5hbWUsIHR5cGUsIGxlbik7Ci0JCS8qIFdlIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFib3V0IGl0ICovCi0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZmRyb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW5mb3JtYXRpb24gZnJhbWUgbG9zdC5cbiIsIGRldi0+bmFtZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGhhcmR3YXJlIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZSAqLwotCi0JZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgY29uZmlndXJpbmcgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBGaXJlIHRoaW5ncyB1cCBhZ2FpbiAqLwotCWhlcm1lc19zZXRfaXJxbWFzayhodywgT1JJTk9DT19JTlRFTik7Ci0JZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGVuYWJsaW5nIE1BQyBwb3J0XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCWlmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSB7Ci0JCWlmICghIHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgewotCQkJZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJLyogU29tZSBmaXJtd2FyZXMgKGUuZy4gSW50ZXJzaWwgMS4zLngpIHNlZW0KLQkJCQkgKiB0byBoYXZlIHByb2JsZW1zIGRpc2FibGluZyB0aGUgcG9ydCwgb2gKLQkJCQkgKiB3ZWxsLCB0b28gYmFkLiAqLwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkaXNhYmxpbmcgTUFDIHBvcnRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOwotCQkJfQotCQl9Ci0JCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7Ci0JCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKLQl9Ci0JCi0JLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2FsbG9jYXRlX2ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwotCWlmIChlcnIgPT0gLUVJTyAmJiBwcml2LT5uaWNidWZfc2l6ZSA+IFRYX05JQ0JVRl9TSVpFX0JVRykgewotCQkvKiBUcnkgd29ya2Fyb3VuZCBmb3Igb2xkIFN5bWJvbCBmaXJtd2FyZSBidWcgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZpcm13YXJlIEFMTE9DIGJ1ZyBkZXRlY3RlZCAiCi0JCSAgICAgICAiKG9sZCBTeW1ib2wgZmlybXdhcmU/KS4gVHJ5aW5nIHRvIHdvcmsgYXJvdW5kLi4uICIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQkKLQkJcHJpdi0+bmljYnVmX3NpemUgPSBUWF9OSUNCVUZfU0laRV9CVUc7Ci0JCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoImZhaWxlZCFcbiIpOwotCQllbHNlCi0JCQlwcmludGsoIm9rLlxuIik7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCWVyciA9IGhlcm1lc19pbml0KGh3KTsKLQlpZiAocHJpdi0+ZG9fZndfZG93bmxvYWQgJiYgIWVycikgewotCQllcnIgPSBvcmlub2NvX2Rvd25sb2FkKHByaXYpOwotCQlpZiAoZXJyKQotCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwotCX0KLQlpZiAoIWVycikKLQkJZXJyID0gb3Jpbm9jb19hbGxvY2F0ZV9maWQoZGV2KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCi0JaWYgKHByaXYtPmJpdHJhdGVtb2RlID49IEJJVFJBVEVfVEFCTEVfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEludmFsaWQgYml0cmF0ZSBtb2RlICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcHJpdi0+Yml0cmF0ZW1vZGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAotCQkJCQkgICBiaXRyYXRlX3RhYmxlW3ByaXYtPmJpdHJhdGVtb2RlXS5hZ2VyZV90eHJhdGVjdHJsKTsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAotCQkJCQkgICBiaXRyYXRlX3RhYmxlW3ByaXYtPmJpdHJhdGVtb2RlXS5pbnRlcnNpbF90eHJhdGVjdHJsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogU2V0IGZpeGVkIEFQIGFkZHJlc3MgKi8KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgcm9hbWluZ19mbGFnOwotCWludCBlcnIgPSAwOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJLyogbm90IHN1cHBvcnRlZCAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCWlmIChwcml2LT5ic3NpZF9maXhlZCkKLQkJCXJvYW1pbmdfZmxhZyA9IDI7Ci0JCWVsc2UKLQkJCXJvYW1pbmdfZmxhZyA9IDE7Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlJPQU1JTkdNT0RFLAotCQkJCQkgICByb2FtaW5nX2ZsYWcpOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1BTkRBVE9SWUJTU0lEX1NZTUJPTCwKLQkJCQkJICAmcHJpdi0+ZGVzaXJlZF9ic3NpZCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBDaGFuZ2UgdGhlIFdFUCBrZXlzIGFuZC9vciB0aGUgY3VycmVudCBrZXlzLiAgQ2FuIGJlIGNhbGxlZAotICogZWl0aGVyIGZyb20gX19vcmlub2NvX2h3X3NldHVwX2VuYygpIG9yIGRpcmVjdGx5IGZyb20KLSAqIG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoKS4gIEluIHRoZSBsYXRlciBjYXNlIHRoZSBhc3NvY2lhdGlvbgotICogd2l0aCB0aGUgQVAgaXMgbm90IGJyb2tlbiAoaWYgdGhlIGZpcm13YXJlIGNhbiBoYW5kbGUgaXQpLAotICogd2hpY2ggaXMgbmVlZGVkIGZvciA4MDIuMXggaW1wbGVtZW50YXRpb25zLiAqLwotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZXRVBLRVlTX0FHRVJFLAotCQkJCQkgICZwcml2LT5rZXlzKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWEtFWV9BR0VSRSwKLQkJCQkJICAgcHJpdi0+dHhfa2V5KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQl7Ci0JCQlpbnQga2V5bGVuOwotCQkJaW50IGk7Ci0KLQkJCS8qIEZvcmNlIHVuaWZvcm0ga2V5IGxlbmd0aCB0byB3b3JrIGFyb3VuZCBmaXJtd2FyZSBidWdzICovCi0JCQlrZXlsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ubGVuKTsKLQkJCQotCQkJaWYgKGtleWxlbiA+IExBUkdFX0tFWV9TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBLZXkgJWQgaGFzIG92ZXJzaXplIGxlbmd0aCAlZC5cbiIsCi0JCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPnR4X2tleSwga2V5bGVuKTsKLQkJCQlyZXR1cm4gLUUyQklHOwotCQkJfQotCi0JCQkvKiBXcml0ZSBhbGwgNCBrZXlzICovCi0JCQlmb3IoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9LRVlTOyBpKyspIHsKLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgICAgICBIRVJNRVNfUklEX0NORkRFRkFVTFRLRVkwICsgaSwKLQkJCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGtleWxlbiksCi0JCQkJCQkgICAgICAgcHJpdi0+a2V5c1tpXS5kYXRhKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCi0JCQkvKiBXcml0ZSB0aGUgaW5kZXggb2YgdGhlIGtleSB1c2VkIGluIHRyYW5zbWlzc2lvbiAqLwotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsCi0JCQkJCQkgICBwcml2LT50eF9rZXkpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXR1cF9lbmMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG1hc3Rlcl93ZXBfZmxhZzsKLQlpbnQgYXV0aF9mbGFnOwotCWludCBlbmNfZmxhZzsKLQotCS8qIFNldHVwIFdFUCBrZXlzIGZvciBXRVAgYW5kIFdQQSAqLwotCWlmIChwcml2LT5lbmNvZGVfYWxnKQotCQlfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKLQotCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCi0JCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZQotCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9PUEVOOwotCi0JaWYgKHByaXYtPndwYV9lbmFibGVkKQotCQllbmNfZmxhZyA9IDI7Ci0JZWxzZSBpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkKLQkJZW5jX2ZsYWcgPSAxOwotCWVsc2UKLQkJZW5jX2ZsYWcgPSAwOwotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBBZ2VyZSBzdHlsZSBXRVAgKi8KLQkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKLQkJCS8qIEVuYWJsZSB0aGUgc2hhcmVkLWtleSBhdXRoZW50aWNhdGlvbi4gKi8KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT05fQUdFUkUsCi0JCQkJCQkgICBhdXRoX2ZsYWcpOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBFTkFCTEVEX0FHRVJFLAotCQkJCQkgICBlbmNfZmxhZyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCQkvKiBTZXQgV1BBIGtleSBtYW5hZ2VtZW50ICovCi0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORlNFVFdQQUFVVEhNR01UU1VJVEVfQUdFUkUsCi0JCQkJICBwcml2LT5rZXlfbWdtdCk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlicmVhazsKLQotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgV0VQICovCi0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIFdFUCAqLwotCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgewotCQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCB8fAotCQkJICAgIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKSkKLQkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRCB8Ci0JCQkJCQkgIEhFUk1FU19XRVBfRVhDTF9VTkVOQ1JZUFRFRDsKLQkJCWVsc2UKLQkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRDsKLQotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTiwKLQkJCQkJCSAgIGF1dGhfZmxhZyk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZQotCQkJbWFzdGVyX3dlcF9mbGFnID0gMDsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCi0JCQltYXN0ZXJfd2VwX2ZsYWcgfD0gSEVSTUVTX1dFUF9IT1NUX0RFQ1JZUFQ7Ci0KLQkJLyogTWFzdGVyIFdFUCBzZXR0aW5nIDogb24vb2ZmICovCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZXRVBGTEFHU19JTlRFUlNJTCwKLQkJCQkJICAgbWFzdGVyX3dlcF9mbGFnKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CQotCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBrZXkgbXVzdCBiZSAzMiBieXRlcywgaW5jbHVkaW5nIHRoZSB0eCBhbmQgcnggTUlDIGtleXMuCi0gKiByc2MgbXVzdCBiZSA4IGJ5dGVzCi0gKiB0c2MgbXVzdCBiZSA4IGJ5dGVzIG9yIE5VTEwKLSAqLwotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCi0JCQkJICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKQotewotCXN0cnVjdCB7Ci0JCV9fbGUxNiBpZHg7Ci0JCXU4IHJzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKLQkJdTgga2V5W1RLSVBfS0VZTEVOXTsKLQkJdTggdHhfbWljW01JQ19LRVlMRU5dOwotCQl1OCByeF9taWNbTUlDX0tFWUxFTl07Ci0JCXU4IHRzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7Ci0JaW50IHJldDsKLQlpbnQgZXJyOwotCWludCBrOwotCXUxNiB4bWl0dGluZzsKLQotCWtleV9pZHggJj0gMHgzOwotCi0JaWYgKHNldF90eCkKLQkJa2V5X2lkeCB8PSAweDgwMDA7Ci0KLQlidWYuaWR4ID0gY3B1X3RvX2xlMTYoa2V5X2lkeCk7Ci0JbWVtY3B5KGJ1Zi5rZXksIGtleSwKLQkgICAgICAgc2l6ZW9mKGJ1Zi5rZXkpICsgc2l6ZW9mKGJ1Zi50eF9taWMpICsgc2l6ZW9mKGJ1Zi5yeF9taWMpKTsKLQotCWlmIChyc2MgPT0gTlVMTCkKLQkJbWVtc2V0KGJ1Zi5yc2MsIDAsIHNpemVvZihidWYucnNjKSk7Ci0JZWxzZQotCQltZW1jcHkoYnVmLnJzYywgcnNjLCBzaXplb2YoYnVmLnJzYykpOwotCi0JaWYgKHRzYyA9PSBOVUxMKSB7Ci0JCW1lbXNldChidWYudHNjLCAwLCBzaXplb2YoYnVmLnRzYykpOwotCQlidWYudHNjWzRdID0gMHgxMDsKLQl9IGVsc2UgewotCQltZW1jcHkoYnVmLnRzYywgdHNjLCBzaXplb2YoYnVmLnRzYykpOwotCX0KLQotCS8qIFdhaXQgdXB0byAxMDBtcyBmb3IgdHggcXVldWUgdG8gZW1wdHkgKi8KLQlrID0gMTAwOwotCWRvIHsKLQkJay0tOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXJldCA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1RYUVVFVUVFTVBUWSwKLQkJCQkJICAmeG1pdHRpbmcpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoKGsgPiAwKSAmJiB4bWl0dGluZyk7Ci0KLQlpZiAoayA9PSAwKQotCQlyZXQgPSAtRVRJTUVET1VUOwotCi0JZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORkFERERFRkFVTFRUS0lQS0VZX0FHRVJFLAotCQkJCSAgJmJ1Zik7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fY2xlYXJfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgIGludCBrZXlfaWR4KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZwcml2LT50a2lwX2tleVtrZXlfaWR4XSwgMCwgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2tleV9pZHhdKSk7Ci0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgIEhFUk1FU19SSURfQ05GUkVNREVGQVVMVFRLSVBLRVlfQUdFUkUsCi0JCQkJICAga2V5X2lkeCk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGNsZWFyaW5nIFRLSVAga2V5ICVkXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyLCBrZXlfaWR4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOwotCi0JLyogU2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihFVEhfQUxFTiksIGRldi0+ZGV2X2FkZHIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBNQUMgYWRkcmVzc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgdXAgdGhlIGxpbmsgbW9kZSAqLwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQT1JUVFlQRSwKLQkJCQkgICBwcml2LT5wb3J0X3R5cGUpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwb3J0IHR5cGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCS8qIFNldCB0aGUgY2hhbm5lbC9mcmVxdWVuY3kgKi8KLQlpZiAocHJpdi0+Y2hhbm5lbCAhPSAwICYmIHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GT1dOQ0hBTk5FTCwKLQkJCQkJICAgcHJpdi0+Y2hhbm5lbCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgY2hhbm5lbCAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgcHJpdi0+Y2hhbm5lbCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc19pYnNzKSB7Ci0JCXUxNiBjcmVhdGVpYnNzOwotCi0JCWlmICgoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApICYmIChwcml2LT5jcmVhdGVpYnNzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRoaXMgZmlybXdhcmUgcmVxdWlyZXMgYW4gIgotCQkJICAgICAgICJFU1NJRCBpbiBJQlNTLUFkLUhvYyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKLQkJCS8qIFdpdGggd3ZsYW5fY3MsIGluIHRoaXMgY2FzZSwgd2Ugd291bGQgY3Jhc2guCi0JCQkgKiBob3BlZnVsbHksIHRoaXMgZHJpdmVyIHdpbGwgYmVoYXZlIGJldHRlci4uLgotCQkJICogSmVhbiBJSSAqLwotCQkJY3JlYXRlaWJzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQljcmVhdGVpYnNzID0gcHJpdi0+Y3JlYXRlaWJzczsKLQkJfQotCQkKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORkNSRUFURUlCU1MsCi0JCQkJCSAgIGNyZWF0ZWlic3MpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIENSRUFURUlCU1NcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCB0aGUgZGVzaXJlZCBCU1NJRCAqLwotCWVyciA9IF9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBBUCBhZGRyZXNzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBTZXQgdGhlIGRlc2lyZWQgRVNTSUQgKi8KLQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOwotCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBzaXplb2YoaWRidWYudmFsKSk7Ci0JLyogV2luWFAgd2FudHMgcGFydG5lciB0byBjb25maWd1cmUgT1dOU1NJRCBldmVuIGluIElCU1MgbW9kZS4gKGppbWMpICovCi0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOU1NJRCwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKLQkJCSAgICAgICAmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBPV05TU0lEXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRCwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKLQkJCSAgICAgICAmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBERVNJUkVEU1NJRFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgdGhlIHN0YXRpb24gbmFtZSAqLwotCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5uaWNrKSk7Ci0JbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPm5pY2ssIHNpemVvZihpZGJ1Zi52YWwpKTsKLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPm5pY2spKzIpLAotCQkJICAgICAgICZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG5pY2tuYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBBUCBkZW5zaXR5ICovCi0JaWYgKHByaXYtPmhhc19zZW5zaXRpdml0eSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCi0JCQkJCSAgIHByaXYtPmFwX2RlbnNpdHkpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgc2V0dGluZyBTWVNURU1TQ0FMRS4gICIKLQkJCSAgICAgICAiRGlzYWJsaW5nIHNlbnNpdGl2aXR5IGNvbnRyb2xcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCi0JCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOwotCQl9Ci0JfQotCi0JLyogU2V0IFJUUyB0aHJlc2hvbGQgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAotCQkJCSAgIHByaXYtPnJ0c190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBSVFMgdGhyZXNob2xkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBvciBNV08gcm9idXN0bmVzcyAqLwotCWlmIChwcml2LT5oYXNfbXdvKQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICBwcml2LT5td29fcm9idXN0KTsKLQllbHNlCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAotCQkJCQkgICBwcml2LT5mcmFnX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGZyYWdtZW50YXRpb25cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IGJpdHJhdGUgKi8KLQllcnIgPSBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUocHJpdik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGJpdHJhdGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KLQlpZiAocHJpdi0+aGFzX3BtKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsCi0JCQkJCSAgIHByaXYtPnBtX29uKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsCi0JCQkJCSAgIHByaXYtPnBtX21jYXN0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAotCQkJCQkgICBwcml2LT5wbV9wZXJpb2QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKLQkJCQkJICAgcHJpdi0+cG1fdGltZW91dCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCBwcmVhbWJsZSAtIG9ubHkgZm9yIFN5bWJvbCBzbyBmYXIuLi4gKi8KLQlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCi0JCQkJCSAgIHByaXYtPnByZWFtYmxlKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwcmVhbWJsZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogU2V0IHVwIGVuY3J5cHRpb24gKi8KLQlpZiAocHJpdi0+aGFzX3dlcCB8fCBwcml2LT5oYXNfd3BhKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF9lbmMocHJpdik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGFjdGl2YXRpbmcgZW5jcnlwdGlvblxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KLQkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8IAotCQkJCQkgICAgSEVSTUVTX1RFU1RfTU9OSVRPUiwgMCwgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KLQkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKLQkJCQkJICAgIEhFUk1FU19URVNUX1NUT1AsIDAsIE5VTEwpOwotCX0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KLQlwcml2LT5wcm9taXNjdW91cyA9IDA7Ci0JcHJpdi0+bWNfY291bnQgPSAwOwotCi0JLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLwotCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogcmV0dXJuIGludD8gKi8KLXN0YXRpYyB2b2lkCi1fX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCWludCBwcm9taXNjLCBtY19jb3VudDsKLQotCS8qIFRoZSBIZXJtZXMgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW4gYWxsbXVsdGkgbW9kZSwgc28gd2UgZ28KLQkgKiBpbnRvIHByb21pc2N1b3VzIG1vZGUgYW5kIGxldCB0aGUgdXBwZXIgbGV2ZWxzIGRlYWwuICovCi0JaWYgKCAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgIChkZXYtPm1jX2NvdW50ID4gTUFYX01VTFRJQ0FTVChwcml2KSkgKSB7Ci0JCXByb21pc2MgPSAxOwotCQltY19jb3VudCA9IDA7Ci0JfSBlbHNlIHsKLQkJcHJvbWlzYyA9IDA7Ci0JCW1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKLQl9Ci0KLQlpZiAocHJvbWlzYyAhPSBwcml2LT5wcm9taXNjdW91cykgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUFJPTUlTQ1VPVVNNT0RFLAotCQkJCQkgICBwcm9taXNjKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBQUk9NSVNDVU9VU01PREUgdG8gMS5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQl9IGVsc2UgCi0JCQlwcml2LT5wcm9taXNjdW91cyA9IHByb21pc2M7Ci0JfQotCi0JLyogSWYgd2UncmUgbm90IGluIHByb21pc2N1b3VzIG1vZGUsIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhlCi0JICogZ3JvdXAgYWRkcmVzcyBpZiBlaXRoZXIgd2Ugd2FudCB0byBtdWx0aWNhc3QsIG9yIGlmIHdlIHdlcmUKLQkgKiBtdWx0aWNhc3RpbmcgYW5kIHdhbnQgdG8gc3RvcCAqLwotCWlmICghIHByb21pc2MgJiYgKG1jX2NvdW50IHx8IHByaXYtPm1jX2NvdW50KSApIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICpwID0gZGV2LT5tY19saXN0OwotCQlzdHJ1Y3QgaGVybWVzX211bHRpY2FzdCBtY2xpc3Q7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7Ci0JCQkvKiBwYXJhbm9pYTogaXMgbGlzdCBzaG9ydGVyIHRoYW4gbWNfY291bnQ/ICovCi0JCQlCVUdfT04oISBwKTsKLQkJCS8qIHBhcmFub2lhOiBiYWQgYWRkcmVzcyBzaXplIGluIGxpc3Q/ICovCi0JCQlCVUdfT04ocC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pOwotCQkJCi0JCQltZW1jcHkobWNsaXN0LmFkZHJbaV0sIHAtPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0JCQlwID0gcC0+bmV4dDsKLQkJfQotCQkKLQkJaWYgKHApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTXVsdGljYXN0IGxpc3QgaXMgIgotCQkJICAgICAgICJsb25nZXIgdGhhbiBtY19jb3VudFxuIiwgZGV2LT5uYW1lKTsKLQotCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkgICBIRVJNRVNfUklEX0NORkdST1VQQUREUkVTU0VTLAotCQkJCSAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obWNfY291bnQgKiBFVEhfQUxFTiksCi0JCQkJICAgJm1jbGlzdCk7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG11bHRpY2FzdCBsaXN0LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWVsc2UKLQkJCXByaXYtPm1jX2NvdW50ID0gbWNfY291bnQ7Ci0JfQotfQotCi0vKiBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LCB3aXRob3V0IGxvY2tzIGhlbGQgLSB1c2UKLSAqIHNjaGVkdWxlX3dvcmsoKSAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCByZXNldF93b3JrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJLyogV2hlbiB0aGUgaGFyZHdhcmUgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4sIHdoYXRldmVyCi0JCSAqIGRldGVjdHMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmUtaW5pdGlhbGl6aW5nCi0JCSAqIGl0LiBTbyBubyBuZWVkIGZvciBhbnl0aGluZyBmdXJ0aGVyICovCi0JCXJldHVybjsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIFNodXQgb2ZmIGludGVycnVwdHMuICBEZXBlbmRpbmcgb24gd2hhdCBzdGF0ZSB0aGUgaGFyZHdhcmUKLQkgKiBpcyBpbiwgdGhpcyBtaWdodCBub3Qgd29yaywgYnV0IHdlJ2xsIHRyeSBhbnl3YXkgKi8KLQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKLQotCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7Ci0JcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOyAvKiBmaXJtd2FyZSB3aWxsIGhhdmUgdG8gcmVhc3NvY2lhdGUgKi8KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotIAkvKiBTY2FubmluZyBzdXBwb3J0OiBDbGVhbnVwIG9mIGRyaXZlciBzdHJ1Y3QgKi8KLQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCAwKTsKLQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCi0JaWYgKHByaXYtPmhhcmRfcmVzZXQpIHsKLQkJZXJyID0gKCpwcml2LT5oYXJkX3Jlc2V0KShwcml2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgIgotCQkJICAgICAgICJwZXJmb3JtaW5nIGhhcmQgcmVzZXRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gZGlzYWJsZTsKLQkJfQotCX0KLQotCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gZGlzYWJsZTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsgLyogVGhpcyBoYXMgdG8gYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0ICovCi0KLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JLyogcHJpdi0+b3BlbiBvciBwcml2LT5od191bmF2YWlsYWJsZSBtaWdodCBoYXZlIGNoYW5nZWQgd2hpbGUKLQkgKiB3ZSBkcm9wcGVkIHRoZSBsb2NrICovCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZWVuYWJsaW5nIGNhcmRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQl9IGVsc2UKLQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm47Ci0gZGlzYWJsZToKLQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBEZXZpY2UgaGFzIGJlZW4gZGlzYWJsZWQhXG4iLCBkZXYtPm5hbWUpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcnJ1cHQgaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90aWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRJQ0tcbiIsIGRldi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl93dGVycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0JLyogVGhpcyBzZWVtcyB0byBoYXBwZW4gYSBmYWlyIGJpdCB1bmRlciBsb2FkLCBidXQgaWdub3JpbmcgaXQKLQkgICBzZWVtcyB0byB3b3JrIGZpbmUuLi4qLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGNvbnRyb2xsZXIgZXJyb3IgKFdURVJSKS4gSWdub3JpbmcuXG4iLAotCSAgICAgICBkZXYtPm5hbWUpOwotfQotCi1pcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGNvdW50ID0gTUFYX0lSUUxPT1BTX1BFUl9JUlE7Ci0JdTE2IGV2c3RhdCwgZXZlbnRzOwotCS8qIFRoZXNlIGFyZSB1c2VkIHRvIGRldGVjdCBhIHJ1bmF3YXkgaW50ZXJydXB0IHNpdHVhdGlvbiAqLwotCS8qIElmIHdlIGdldCBtb3JlIHRoYW4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSBpdGVyYXRpb25zIGluIGEgamlmZnksCi0JICogd2UgcGFuaWMgYW5kIHNodXQgZG93biB0aGUgaGFyZHdhcmUgKi8KLQlzdGF0aWMgaW50IGxhc3RfaXJxX2ppZmZ5ID0gMDsgLyogamlmZmllcyB2YWx1ZSB0aGUgbGFzdCB0aW1lCi0JCQkJCSogd2Ugd2VyZSBjYWxsZWQgKi8KLQlzdGF0aWMgaW50IGxvb3BzX3RoaXNfamlmZnkgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQkvKiBJZiBodyBpcyB1bmF2YWlsYWJsZSAtIHdlIGRvbid0IGtub3cgaWYgdGhlIGlycSB3YXMKLQkJICogZm9yIHVzIG9yIG5vdCAqLwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKLQlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47Ci0JaWYgKCEgZXZlbnRzKSB7Ci0JCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9Ci0JCi0JaWYgKGppZmZpZXMgIT0gbGFzdF9pcnFfamlmZnkpCi0JCWxvb3BzX3RoaXNfamlmZnkgPSAwOwotCWxhc3RfaXJxX2ppZmZ5ID0gamlmZmllczsKLQotCXdoaWxlIChldmVudHMgJiYgY291bnQtLSkgewotCQlpZiAoKytsb29wc190aGlzX2ppZmZ5ID4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElSUSBoYW5kbGVyIGlzIGxvb3BpbmcgdG9vICIKLQkJCSAgICAgICAibXVjaCEgUmVzZXR0aW5nLlxuIiwgZGV2LT5uYW1lKTsKLQkJCS8qIERpc2FibGUgaW50ZXJydXB0cyBmb3Igbm93ICovCi0JCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIENoZWNrIHRoZSBjYXJkIGhhc24ndCBiZWVuIHJlbW92ZWQgKi8KLQkJaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7Ci0JCQlERUJVRygwLCAib3Jpbm9jb19pbnRlcnJ1cHQoKTogY2FyZCByZW1vdmVkXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9USUNLKQotCQkJX19vcmlub2NvX2V2X3RpY2soZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfV1RFUlIpCi0JCQlfX29yaW5vY29fZXZfd3RlcnIoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfSU5GRFJPUCkKLQkJCV9fb3Jpbm9jb19ldl9pbmZkcm9wKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORk8pCi0JCQlfX29yaW5vY29fZXZfaW5mbyhkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9SWCkKLQkJCV9fb3Jpbm9jb19ldl9yeChkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWEVYQykKLQkJCV9fb3Jpbm9jb19ldl90eGV4YyhkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9UWCkKLQkJCV9fb3Jpbm9jb19ldl90eChkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9BTExPQykKLQkJCV9fb3Jpbm9jb19ldl9hbGxvYyhkZXYsIGh3KTsKLQkJCi0JCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgZXZzdGF0KTsKLQotCQlldnN0YXQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwotCQlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47Ci0JfTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBQb3dlciBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICYmICFkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkKLXN0YXRpYyBpbnQgb3Jpbm9jb19wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcG1fZXZlbnQsCi0JCQkgICAgICAgdm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsCi0JCQkJCQkgICAgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwKLQkJCQkJCSAgICBwbV9ub3RpZmllcik7Ci0KLQkvKiBBbGwgd2UgbmVlZCB0byBkbyBpcyBjYWNoZSB0aGUgZmlybXdhcmUgYmVmb3JlIHN1c3BlbmQsIGFuZAotCSAqIHJlbGVhc2UgaXQgd2hlbiB3ZSBjb21lIG91dC4KLQkgKgotCSAqIE9ubHkgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIGRvd25sb2FkaW5nIGZpcm13YXJlLiAqLwotCWlmICghcHJpdi0+ZG9fZndfZG93bmxvYWQpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXN3aXRjaCAocG1fZXZlbnQpIHsKLQljYXNlIFBNX0hJQkVSTkFUSU9OX1BSRVBBUkU6Ci0JY2FzZSBQTV9TVVNQRU5EX1BSRVBBUkU6Ci0JCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQTV9QT1NUX1JFU1RPUkU6Ci0JCS8qIFJlc3RvcmUgZnJvbSBoaWJlcm5hdGlvbiBmYWlsZWQuIFdlIG5lZWQgdG8gY2xlYW4KLQkJICogdXAgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXksIHNvIGZhbGwgdGhyb3VnaC4gKi8KLQljYXNlIFBNX1BPU1RfSElCRVJOQVRJT046Ci0JY2FzZSBQTV9QT1NUX1NVU1BFTkQ6Ci0JCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBNX1JFU1RPUkVfUFJFUEFSRToKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlwcml2LT5wbV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gb3Jpbm9jb19wbV9ub3RpZmllcjsKLQlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Ci19Ci0jZWxzZSAvKiAhUE1fU0xFRVAgfHwgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQgKi8KLSNkZWZpbmUgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGNvbXBfaWQgewotCXUxNiBpZCwgdmFyaWFudCwgbWFqb3IsIG1pbm9yOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0YXRpYyBpbmxpbmUgZnd0eXBlX3QgZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoc3RydWN0IGNvbXBfaWQgKm5pY19pZCkKLXsKLQlpZiAobmljX2lkLT5pZCA8IDB4ODAwMCkKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfQUdFUkU7Ci0JZWxzZSBpZiAobmljX2lkLT5pZCA9PSAweDgwMDAgJiYgbmljX2lkLT5tYWpvciA9PSAwKQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9TWU1CT0w7Ci0JZWxzZQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9JTlRFUlNJTDsKLX0KLQotLyogU2V0IHByaXYtPmZpcm13YXJlIHR5cGUsIGRldGVybWluZSBmaXJtd2FyZSBwcm9wZXJ0aWVzICovCi1zdGF0aWMgaW50IGRldGVybWluZV9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXN0cnVjdCBjb21wX2lkIG5pY19pZCwgc3RhX2lkOwotCXVuc2lnbmVkIGludCBmaXJtdmVyOwotCWNoYXIgdG1wW1NZTUJPTF9NQVhfVkVSX0xFTisxXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDIpKSk7Ci0KLQkvKiBHZXQgdGhlIGhhcmR3YXJlIHZlcnNpb24gKi8KLQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX05JQ0lELCAmbmljX2lkKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIGhhcmR3YXJlIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5pZCk7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQudmFyaWFudCk7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQubWFqb3IpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLm1pbm9yKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhhcmR3YXJlIGlkZW50aXR5ICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbmljX2lkLmlkLCBuaWNfaWQudmFyaWFudCwKLQkgICAgICAgbmljX2lkLm1ham9yLCBuaWNfaWQubWlub3IpOwotCi0JcHJpdi0+ZmlybXdhcmVfdHlwZSA9IGRldGVybWluZV9maXJtd2FyZV90eXBlKCZuaWNfaWQpOwotCi0JLyogR2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0JZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVEFJRCwgJnN0YV9pZCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzdGF0aW9uIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5pZCk7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQudmFyaWFudCk7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQubWFqb3IpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1pbm9yKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gaWRlbnRpdHkgICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgc3RhX2lkLmlkLCBzdGFfaWQudmFyaWFudCwKLQkgICAgICAgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOwotCi0Jc3dpdGNoIChzdGFfaWQuaWQpIHsKLQljYXNlIDB4MTU6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSAweDE0YjoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGVydGlhcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSAweDFmOgkvKiBJbnRlcnNpbCwgQWdlcmUsIFN5bWJvbCBTcGVjdHJ1bTI0ICovCi0JY2FzZSAweDIxOgkvKiBTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVua25vd24gc3RhdGlvbiBJRCwgcGxlYXNlIHJlcG9ydFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIERlZmF1bHQgY2FwYWJpbGl0aWVzICovCi0JcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMTsKLQlwcml2LT5oYXNfbXdvID0gMDsKLQlwcml2LT5oYXNfcHJlYW1ibGUgPSAwOwotCXByaXYtPmhhc19wb3J0MyA9IDE7Ci0JcHJpdi0+aGFzX2lic3MgPSAxOwotCXByaXYtPmhhc193ZXAgPSAwOwotCXByaXYtPmhhc19iaWdfd2VwID0gMDsKLQlwcml2LT5oYXNfYWx0X3R4Y250bCA9IDA7Ci0JcHJpdi0+aGFzX2V4dF9zY2FuID0gMDsKLQlwcml2LT5oYXNfd3BhID0gMDsKLQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7Ci0KLQkvKiBEZXRlcm1pbmUgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCS8qIEx1Y2VudCBXYXZlbGFuIElFRUUsIEx1Y2VudCBPcmlub2NvLCBDYWJsZXRyb24gUm9hbUFib3V0LAotCQkgICBFTFNBLCBNZWxjbywgSFAsIElCTSwgRGVsbCAxMTUwLCBDb21wYXEgMTEwLzIxMCAqLwotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJMdWNlbnQvQWdlcmUgJWQuJTAyZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKLQotCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfCBzdGFfaWQubWlub3I7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDYwMDA2KTsKLQkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4NDAwMjApOwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IDE7IC8qIEZJWE1FOiB0aGlzIGlzIHdyb25nIC0gaG93IGRvIHdlIHRlbGwKLQkJCQkJICBHb2xkIGNhcmRzIGZyb20gdGhlIG90aGVycz8gKi8KLQkJcHJpdi0+aGFzX213byA9IChmaXJtdmVyID49IDB4NjAwMDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDQwMDIwKTsgLyogRG9uJ3Qgd29yayBpbiA3LjUyID8gKi8KLQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHg4MDAwYSk7Ci0JCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMTsKLQkJcHJpdi0+YnJva2VuX21vbml0b3IgPSAoZmlybXZlciA+PSAweDgwMDAwKTsKLQkJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCi0JCXByaXYtPmhhc19leHRfc2NhbiA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KLQkJcHJpdi0+aGFzX3dwYSA9IChmaXJtdmVyID49IDB4OTAwMmEpOwotCQkvKiBUZXN0ZWQgd2l0aCBBZ2VyZSBmaXJtd2FyZSA6Ci0JCSAqCTEuMTYgOyA0LjA4IDsgNC41MiA7IDYuMDQgOyA2LjE2IDsgNy4yOCA9PiBKZWFuIElJCi0JCSAqIFRlc3RlZCBDYWJsZVRyb24gZmlybXdhcmUgOiA0LjMyID0+IEFudG9uICovCi0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCS8qIFN5bWJvbCAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwsIEVyaWNzc29uIFdMQU4gKi8KLQkJLyogSW50ZWwgTUFDIDogMDA6MDI6QjM6KiAqLwotCQkvKiAzQ29tIE1BQyA6IDAwOjUwOkRBOiogKi8KLQkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCQkvKiBHZXQgdGhlIFN5bWJvbCBmaXJtd2FyZSB2ZXJzaW9uICovCi0JCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCi0JCQkJICAgICAgSEVSTUVTX1JJRF9TRUNPTkRBUllWRVJTSU9OX1NZTUJPTCwKLQkJCQkgICAgICBTWU1CT0xfTUFYX1ZFUl9MRU4sIE5VTEwsICZ0bXApOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFcnJvciAlZCByZWFkaW5nIFN5bWJvbCBmaXJtd2FyZSBpbmZvLiBXaWxkbHkgZ3Vlc3NpbmcgY2FwYWJpbGl0aWVzLi4uXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWZpcm12ZXIgPSAwOwotCQkJdG1wWzBdID0gJ1wwJzsKLQkJfSBlbHNlIHsKLQkJCS8qIFRoZSBmaXJtd2FyZSByZXZpc2lvbiBpcyBhIHN0cmluZywgdGhlIGZvcm1hdCBpcwotCQkJICogc29tZXRoaW5nIGxpa2UgOiAiVjIuMjAtMDEiLgotCQkJICogUXVpY2sgYW5kIGRpcnR5IHBhcnNpbmcuLi4gLSBKZWFuIElJCi0JCQkgKi8KLQkJCWZpcm12ZXIgPSAoKHRtcFsxXSAtICcwJykgPDwgMTYpIHwgKCh0bXBbM10gLSAnMCcpIDw8IDEyKQotCQkJCXwgKCh0bXBbNF0gLSAnMCcpIDw8IDgpIHwgKCh0bXBbNl0gLSAnMCcpIDw8IDQpCi0JCQkJfCAodG1wWzddIC0gJzAnKTsKLQotCQkJdG1wW1NZTUJPTF9NQVhfVkVSX0xFTl0gPSAnXDAnOwotCQl9Ci0KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiU3ltYm9sICVzIiwgdG1wKTsKLQotCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgxNTAxMik7Ci0JCXByaXYtPmhhc19iaWdfd2VwID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MjAwMDAgJiYgZmlybXZlciA8IDB4MjIwMDApIHx8IAotCQkJICAgICAgIChmaXJtdmVyID49IDB4MjkwMDAgJiYgZmlybXZlciA8IDB4MzAwMDApIHx8Ci0JCQkgICAgICAgZmlybXZlciA+PSAweDMxMDAwOwotCQlwcml2LT5oYXNfcHJlYW1ibGUgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aWJzc19wb3J0ID0gNDsKLQotCQkvKiBTeW1ib2wgZmlybXdhcmUgaXMgZm91bmQgb24gdmFyaW91cyBjYXJkcywgYnV0Ci0JCSAqIHRoZXJlIGhhcyBiZWVuIG5vIGF0dGVtcHQgdG8gY2hlY2sgZmlybXdhcmUKLQkJICogZG93bmxvYWQgb24gbm9uLXNwZWN0cnVtX2NzIGJhc2VkIGNhcmRzLgotCQkgKgotCQkgKiBHaXZlbiB0aGF0IHRoZSBBZ2VyZSBmaXJtd2FyZSBkb3dubG9hZCB3b3JrcwotCQkgKiBkaWZmZXJlbnRseSwgd2Ugc2hvdWxkIGF2b2lkIGRvaW5nIGEgZmlybXdhcmUKLQkJICogZG93bmxvYWQgd2l0aCB0aGUgU3ltYm9sIGFsZ29yaXRobSBvbiBub24tc3BlY3RydW0KLQkJICogY2FyZHMuCi0JCSAqCi0JCSAqIEZvciBub3cgd2UgY2FuIGlkZW50aWZ5IGEgc3BlY3RydW1fY3MgYmFzZWQgY2FyZAotCQkgKiBiZWNhdXNlIGl0IGhhcyBhIGZpcm13YXJlIHJlc2V0IGZ1bmN0aW9uLgotCQkgKi8KLQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAocHJpdi0+c3RvcF9mdyAhPSBOVUxMKTsKLQotIAkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gKGZpcm12ZXIgPT0gMHgyNTAxMykgfHwKLSAJCQkJCSAgIChmaXJtdmVyID49IDB4MzAwMDAgJiYgZmlybXZlciA8PSAweDMxMDAwKTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgzMTAwMSkgfHwKLQkJCQkgICAgIChmaXJtdmVyID49IDB4MjkwNTcgJiYgZmlybXZlciA8IDB4MzAwMDApOwotCQkvKiBUZXN0ZWQgd2l0aCBJbnRlbCBmaXJtd2FyZSA6IDB4MjAwMTUgPT4gSmVhbiBJSSAqLwotCQkvKiBUZXN0ZWQgd2l0aCAzQ29tIGZpcm13YXJlIDogMHgxNTAxMiAmIDB4MjIwMDEgPT4gSmVhbiBJSSAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCS8qIEQtTGluaywgTGlua3N5cywgQWR0cm9uLCBab29tQWlyLCBhbmQgbWFueSBvdGhlcnMuLi4KLQkJICogU2Ftc3VuZywgQ29tcGFxIDEwMC8yMDAgYW5kIFByb3hpbSBhcmUgc2xpZ2h0bHkKLQkJICogZGlmZmVyZW50IGFuZCBsZXNzIHdlbGwgdGVzdGVkICovCi0JCS8qIEQtTGluayBNQUMgOiAwMDo0MDowNToqICovCi0JCS8qIEFkZHRyb24gTUFDIDogMDA6OTA6RDE6KiAqLwotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJJbnRlcnNpbCAlZC4lZC4lZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yLAotCQkJIHN0YV9pZC52YXJpYW50KTsKLQotCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfAotCQkJKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5taW5vciA8PCA4KSB8IHN0YV9pZC52YXJpYW50OwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOyAvKiBGSVhNRSAqLwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IHByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDAwMDgwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgwMTAzMDEpOwotCi0JCWlmIChmaXJtdmVyID49IDB4MDAwODAwKQotCQkJcHJpdi0+aWJzc19wb3J0ID0gMDsKLQkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnRlcnNpbCBmaXJtd2FyZSBlYXJsaWVyICIKLQkJCSAgICAgICAidGhhbiB2MC44LnggLSBzZXZlcmFsIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCXByaXYtPmlic3NfcG9ydCA9IDE7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICIlczogRmlybXdhcmUgZGV0ZXJtaW5lZCBhcyAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwcml2LT5md19uYW1lKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIG5pY2tidWY7Ci0JdTE2IHJlY2xlbjsKLQlpbnQgbGVuOwotCi0JLyogTm8gbmVlZCB0byBsb2NrLCB0aGUgaHdfdW5hdmFpbGFibGUgZmxhZyBpcyBhbHJlYWR5IHNldCBpbgotCSAqIGFsbG9jX29yaW5vY29kZXYoKSAqLwotCXByaXYtPm5pY2J1Zl9zaXplID0gSUVFRTgwMjExX01BWF9GUkFNRV9MRU4gKyBFVEhfSExFTjsKLQotCS8qIEluaXRpYWxpemUgdGhlIGZpcm13YXJlICovCi0JZXJyID0gaGVybWVzX2luaXQoaHcpOwotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5kb19md19kb3dubG9hZCkgewotI2lmZGVmIENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVAotCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOwotI2VuZGlmCi0KLQkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKLQkJaWYgKGVycikKLQkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKLQotCQkvKiBDaGVjayBmaXJtd2FyZSB2ZXJzaW9uIGFnYWluICovCi0JCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOwotCQlpZiAoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc19wb3J0MykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZC1ob2MgZGVtbyBtb2RlIHN1cHBvcnRlZFxuIiwgZGV2LT5uYW1lKTsKLQlpZiAocHJpdi0+aGFzX2lic3MpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSUVFRSBzdGFuZGFyZCBJQlNTIGFkLWhvYyBtb2RlIHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JaWYgKHByaXYtPmhhc193ZXApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXRVAgc3VwcG9ydGVkLCAiLCBkZXYtPm5hbWUpOwotCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApCi0JCQlwcmludGsoIjEwNC1iaXQga2V5XG4iKTsKLQkJZWxzZQotCQkJcHJpbnRrKCI0MC1iaXQga2V5XG4iKTsKLQl9Ci0JaWYgKHByaXYtPmhhc193cGEpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXUEEtUFNLIHN1cHBvcnRlZFxuIiwgZGV2LT5uYW1lKTsKLQkJaWYgKG9yaW5vY29fbWljX2luaXQocHJpdikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBzZXR1cCBNSUMgY3J5cHRvICIKLQkJCSAgICAgICAiYWxnb3JpdGhtLiBEaXNhYmxpbmcgV1BBIHN1cHBvcnRcbiIsIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5oYXNfd3BhID0gMDsKLQkJfQotCX0KLQotCS8qIE5vdyB3ZSBoYXZlIHRoZSBmaXJtd2FyZSBjYXBhYmlsaXRpZXMsIGFsbG9jYXRlIGFwcHJvcGlhdGUKLQkgKiBzaXplZCBzY2FuIGJ1ZmZlcnMgKi8KLQlpZiAob3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShwcml2KSkKLQkJZ290byBvdXQ7Ci0Jb3Jpbm9jb19ic3NfZGF0YV9pbml0KHByaXYpOwotCi0JLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKLQkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBkZXYtPmRldl9hZGRyKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBhZGRyZXNzICVwTVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKLQotCS8qIEdldCB0aGUgc3RhdGlvbiBuYW1lICovCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAotCQkJICAgICAgc2l6ZW9mKG5pY2tidWYpLCAmcmVjbGVuLCAmbmlja2J1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBzdGF0aW9uIG5hbWVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKG5pY2tidWYubGVuKQotCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIChpbnQpbGUxNl90b19jcHUobmlja2J1Zi5sZW4pKTsKLQllbHNlCi0JCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgMiAqIHJlY2xlbik7Ci0JbWVtY3B5KHByaXYtPm5pY2ssICZuaWNrYnVmLnZhbCwgbGVuKTsKLQlwcml2LT5uaWNrW2xlbl0gPSAnXDAnOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIG5hbWUgXCIlc1wiXG4iLCBkZXYtPm5hbWUsIHByaXYtPm5pY2spOwotCi0JZXJyID0gb3Jpbm9jb19hbGxvY2F0ZV9maWQoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBOSUMgYnVmZmVyIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCBhbGxvd2VkIGNoYW5uZWxzICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ0hBTk5FTExJU1QsCi0JCQkJICAmcHJpdi0+Y2hhbm5lbF9tYXNrKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGNoYW5uZWwgbGlzdCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBBUCBkZW5zaXR5ICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCi0JCQkJICAmcHJpdi0+YXBfZGVuc2l0eSk7Ci0JaWYgKGVyciB8fCBwcml2LT5hcF9kZW5zaXR5IDwgMSB8fCBwcml2LT5hcF9kZW5zaXR5ID4gMykgewotCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOwotCX0KLQotCS8qIEdldCBpbml0aWFsIFJUUyB0aHJlc2hvbGQgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCi0JCQkJICAmcHJpdi0+cnRzX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBSVFMgdGhyZXNob2xkIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCBpbml0aWFsIGZyYWdtZW50YXRpb24gc2V0dGluZ3MgKi8KLQlpZiAocHJpdi0+aGFzX213bykKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCi0JCQkJCSAgJnByaXYtPm13b19yb2J1c3QpOwotCWVsc2UKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAmcHJpdi0+ZnJhZ190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBQb3dlciBtYW5hZ2VtZW50IHNldHVwICovCi0JaWYgKHByaXYtPmhhc19wbSkgewotCQlwcml2LT5wbV9vbiA9IDA7Ci0JCXByaXYtPnBtX21jYXN0ID0gMTsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAotCQkJCQkgICZwcml2LT5wbV9wZXJpb2QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAotCQkJCQkgICZwcml2LT5wbV90aW1lb3V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCB0aW1lb3V0IVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQkvKiBQcmVhbWJsZSBzZXR1cCAqLwotCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCi0JCQkJCSAgJnByaXYtPnByZWFtYmxlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQkJCi0JLyogU2V0IHVwIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKLQkvKiBCeSBkZWZhdWx0IHVzZSBJRUVFL0lCU1MgYWQtaG9jIG1vZGUgaWYgd2UgaGF2ZSBpdCAqLwotCXByaXYtPnByZWZlcl9wb3J0MyA9IHByaXYtPmhhc19wb3J0MyAmJiAoISBwcml2LT5oYXNfaWJzcyk7Ci0Jc2V0X3BvcnRfdHlwZShwcml2KTsKLQlwcml2LT5jaGFubmVsID0gMDsgLyogdXNlIGZpcm13YXJlIGRlZmF1bHQgKi8KLQotCXByaXYtPnByb21pc2N1b3VzID0gMDsKLQlwcml2LT5lbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOwotCXByaXYtPnR4X2tleSA9IDA7Ci0JcHJpdi0+d3BhX2VuYWJsZWQgPSAwOwotCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKLQlwcml2LT5rZXlfbWdtdCA9IDA7Ci0JcHJpdi0+d3BhX2llX2xlbiA9IDA7Ci0JcHJpdi0+d3BhX2llID0gTlVMTDsKLQotCS8qIE1ha2UgdGhlIGhhcmR3YXJlIGF2YWlsYWJsZSwgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbgotCSAqIHJlbW92ZWQgZWxzZXdoZXJlIChlLmcuIGJ5IFBDTUNJQSBob3QgdW5wbHVnKSAqLwotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVhZHlcbiIsIGRldi0+bmFtZSk7Ci0KLSBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IG5ldF9kZXZpY2UKLSphbGxvY19vcmlub2NvZGV2KGludCBzaXplb2ZfY2FyZCwKLQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCSAgaW50ICgqaGFyZF9yZXNldCkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqKSwKLQkJICBpbnQgKCpzdG9wX2Z3KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICosIGludCkpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwotCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpICsgc2l6ZW9mX2NhcmQpOwotCWlmICghIGRldikKLQkJcmV0dXJuIE5VTEw7Ci0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcHJpdi0+bmRldiA9IGRldjsKLQlpZiAoc2l6ZW9mX2NhcmQpCi0JCXByaXYtPmNhcmQgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwcml2Ci0JCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkpOwotCWVsc2UKLQkJcHJpdi0+Y2FyZCA9IE5VTEw7Ci0JcHJpdi0+ZGV2ID0gZGV2aWNlOwotCi0JLyogU2V0dXAgLyBvdmVycmlkZSBuZXRfZGV2aWNlIGZpZWxkcyAqLwotCWRldi0+aW5pdCA9IG9yaW5vY29faW5pdDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG9yaW5vY29feG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBvcmlub2NvX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCi0JZGV2LT5nZXRfc3RhdHMgPSBvcmlub2NvX2dldF9zdGF0czsKLQlkZXYtPmV0aHRvb2xfb3BzID0gJm9yaW5vY29fZXRodG9vbF9vcHM7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmb3Jpbm9jb19oYW5kbGVyX2RlZjsKLSNpZmRlZiBXSVJFTEVTU19TUFkKLQlwcml2LT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnByaXYtPnNweV9kYXRhOwotCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwotI2VuZGlmCi0JZGV2LT5jaGFuZ2VfbXR1ID0gb3Jpbm9jb19jaGFuZ2VfbXR1OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JLyogd2UgdXNlIHRoZSBkZWZhdWx0IGV0aF9tYWNfYWRkciBmb3Igc2V0dGluZyB0aGUgTUFDIGFkZHIgKi8KLQotCS8qIFJlc2VydmUgc3BhY2UgaW4gc2tiIGZvciB0aGUgU05BUCBoZWFkZXIgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBFTkNBUFNfT1ZFUkhFQUQ7Ci0KLQkvKiBTZXQgdXAgZGVmYXVsdCBjYWxsYmFja3MgKi8KLQlkZXYtPm9wZW4gPSBvcmlub2NvX29wZW47Ci0JZGV2LT5zdG9wID0gb3Jpbm9jb19zdG9wOwotCXByaXYtPmhhcmRfcmVzZXQgPSBoYXJkX3Jlc2V0OwotCXByaXYtPnN0b3BfZncgPSBzdG9wX2Z3OwotCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwotCXByaXYtPm9wZW4gPSAwOwotCXByaXYtPmh3X3VuYXZhaWxhYmxlID0gMTsgLyogb3Jpbm9jb19pbml0KCkgbXVzdCBjbGVhciB0aGlzCi0JCQkJICAgKiBiZWZvcmUgYW55dGhpbmcgZWxzZSB0b3VjaGVzIHRoZQotCQkJCSAgICogaGFyZHdhcmUgKi8KLQlJTklUX1dPUksoJnByaXYtPnJlc2V0X3dvcmssIG9yaW5vY29fcmVzZXQpOwotCUlOSVRfV09SSygmcHJpdi0+am9pbl93b3JrLCBvcmlub2NvX2pvaW5fYXApOwotCUlOSVRfV09SSygmcHJpdi0+d2V2ZW50X3dvcmssIG9yaW5vY29fc2VuZF93ZXZlbnRzKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5yeF9saXN0KTsKLQl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldik7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKLQotCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOwotCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7Ci0KLQkvKiBSZWdpc3RlciBQTSBub3RpZmllcnMgKi8KLQlvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOwotCi0JcmV0dXJuIGRldjsKLX0KLQotdm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKLQotCS8qIElmIHRoZSB0YXNrbGV0IGlzIHNjaGVkdWxlZCB3aGVuIHdlIGNhbGwgdGFza2xldF9raWxsIGl0Ci0JICogd2lsbCBydW4gb25lIGZpbmFsIHRpbWUuIEhvd2V2ZXIgdGhlIHRhc2tsZXQgd2lsbCBvbmx5Ci0JICogZHJhaW4gcHJpdi0+cnhfbGlzdCBpZiB0aGUgaHcgaXMgc3RpbGwgYXZhaWxhYmxlLiAqLwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7Ci0KLQkvKiBFeHBsaWNpdGx5IGRyYWluIHByaXYtPnJ4X2xpc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfZGF0YSwgdGVtcCwgJnByaXYtPnJ4X2xpc3QsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnJ4X2RhdGEtPmxpc3QpOwotCi0JCWRldl9rZnJlZV9za2IocnhfZGF0YS0+c2tiKTsKLQkJa2ZyZWUocnhfZGF0YS0+ZGVzYyk7Ci0JCWtmcmVlKHJ4X2RhdGEpOwotCX0KLQotCW9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKLQlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7Ci0KLQlwcml2LT53cGFfaWVfbGVuID0gMDsKLQlrZnJlZShwcml2LT53cGFfaWUpOwotCW9yaW5vY29fbWljX2ZyZWUocHJpdik7Ci0Jb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHByaXYpOwotCWZyZWVfbmV0ZGV2KGRldik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogUmV0dXJuIDogPCAwIC0+IGVycm9yIGNvZGUgOyA+PSAwIC0+IGxlbmd0aCAqLwotc3RhdGljIGludCBvcmlub2NvX2h3X2dldF9lc3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmFjdGl2ZSwKLQkJCQljaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXSkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBlc3NpZGJ1ZjsKLQljaGFyICpwID0gKGNoYXIgKikoJmVzc2lkYnVmLnZhbCk7Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID4gMCkgewotCQkvKiBXZSByZWFkIHRoZSBkZXNpcmVkIFNTSUQgZnJvbSB0aGUgaGFyZHdhcmUgcmF0aGVyCi0JCSAgIHRoYW4gZnJvbSBwcml2LT5kZXNpcmVkX2Vzc2lkLCBqdXN0IGluIGNhc2UgdGhlCi0JCSAgIGZpcm13YXJlIGlzIGFsbG93ZWQgdG8gY2hhbmdlIGl0IG9uIHVzLiBJJ20gbm90Ci0JCSAgIHN1cmUgYWJvdXQgdGhpcyAqLwotCQkvKiBNeSBndWVzcyBpcyB0aGF0IHRoZSBPV05TU0lEIHNob3VsZCBhbHdheXMgYmUgd2hhdGV2ZXIKLQkJICogd2Ugc2V0IHRvIHRoZSBjYXJkLCB3aGVyZWFzIENVUlJFTlRfU1NJRCBpcyB0aGUgb25lIHRoYXQKLQkJICogbWF5IGNoYW5nZS4uLiAtIEplYW4gSUkgKi8KLQkJdTE2IHJpZDsKLQotCQkqYWN0aXZlID0gMTsKLQotCQlyaWQgPSAocHJpdi0+cG9ydF90eXBlID09IDMpID8gSEVSTUVTX1JJRF9DTkZPV05TU0lEIDoKLQkJCUhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQ7Ci0JCQotCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCByaWQsIHNpemVvZihlc3NpZGJ1ZiksCi0JCQkJICAgICAgTlVMTCwgJmVzc2lkYnVmKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbF91bmxvY2s7Ci0JfSBlbHNlIHsKLQkJKmFjdGl2ZSA9IDA7Ci0KLQkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UU1NJRCwKLQkJCQkgICAgICBzaXplb2YoZXNzaWRidWYpLCBOVUxMLCAmZXNzaWRidWYpOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsX3VubG9jazsKLQl9Ci0KLQlsZW4gPSBsZTE2X3RvX2NwdShlc3NpZGJ1Zi5sZW4pOwotCUJVR19PTihsZW4gPiBJV19FU1NJRF9NQVhfU0laRSk7Ci0KLQltZW1zZXQoYnVmLCAwLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0JbWVtY3B5KGJ1ZiwgcCwgbGVuKTsKLQllcnIgPSBsZW47Ci0KLSBmYWlsX3VubG9jazoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsgICAgICAgCi19Ci0KLXN0YXRpYyBsb25nIG9yaW5vY29faHdfZ2V0X2ZyZXEoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQkKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IGNoYW5uZWw7Ci0JbG9uZyBmcmVxID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVENIQU5ORUwsICZjaGFubmVsKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCS8qIEludGVyc2lsIGZpcm13YXJlIDEuMy41IHJldHVybnMgMCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmIChjaGFubmVsID09IDApIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiBOVU1fQ0hBTk5FTFMpICkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2hhbm5lbCBvdXQgb2YgcmFuZ2UgKCVkKSFcbiIsCi0JCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBjaGFubmVsKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQotCX0KLQlmcmVxID0gY2hhbm5lbF9mcmVxdWVuY3lbY2hhbm5lbC0xXSAqIDEwMDAwMDsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JaWYgKGVyciA+IDApCi0JCWVyciA9IC1FQlVTWTsKLQlyZXR1cm4gZXJyID8gZXJyIDogZnJlcTsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCSAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbGlzdDsKLQl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbGlzdC52YWw7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG51bTsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NVUFBPUlRFRERBVEFSQVRFUywKLQkJCSAgICAgIHNpemVvZihsaXN0KSwgTlVMTCwgJmxpc3QpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCQotCW51bSA9IGxlMTZfdG9fY3B1KGxpc3QubGVuKTsKLQkqbnVtcmF0ZXMgPSBudW07Ci0JbnVtID0gbWluKG51bSwgbWF4KTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyYXRlc1tpXSA9IChwW2ldICYgMHg3ZikgKiA1MDAwMDA7IC8qIGNvbnZlcnQgdG8gYnBzICovCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIGNoYXIgKm5hbWUsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBudW1yYXRlczsKLQlpbnQgZXJyOwotCi0JZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLCBOVUxMLCAwKTsKLQotCWlmICghZXJyICYmIChudW1yYXRlcyA+IDIpKQotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExYiIpOwotCWVsc2UKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RhdGljIGNvbnN0IHU4IG9mZl9hZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQlzdGF0aWMgY29uc3QgdTggYW55X2FkZHJbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBFbmFibGUgYXV0b21hdGljIHJvYW1pbmcgLSBubyBzYW5pdHkgY2hlY2tzIGFyZSBuZWVkZWQgKi8KLQlpZiAobWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBvZmZfYWRkciwgRVRIX0FMRU4pID09IDAgfHwKLQkgICAgbWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBhbnlfYWRkciwgRVRIX0FMRU4pID09IDApIHsKLQkJcHJpdi0+YnNzaWRfZml4ZWQgPSAwOwotCQltZW1zZXQocHJpdi0+ZGVzaXJlZF9ic3NpZCwgMCwgRVRIX0FMRU4pOwotCi0JCS8qICJvZmYiIG1lYW5zIGtlZXAgZXhpc3RpbmcgY29ubmVjdGlvbiAqLwotCQlpZiAoYXBfYWRkci0+c2FfZGF0YVswXSA9PSAwKSB7Ci0JCQlfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKLQkJCWVyciA9IDA7Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTHVjZW50L0FnZXJlIGZpcm13YXJlIGRvZXNuJ3QgIgotCQkgICAgICAgInN1cHBvcnQgbWFudWFsIHJvYW1pbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWFudWFsIHJvYW1pbmcgc3VwcG9ydGVkIG9ubHkgaW4gIgotCQkgICAgICAgIm1hbmFnZWQgbW9kZVxuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEludGVyc2lsIGZpcm13YXJlIGhhbmdzIHdpdGhvdXQgRGVzaXJlZCBFU1NJRCAqLwotCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwgJiYKLQkgICAgc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERlc2lyZWQgRVNTSUQgbXVzdCBiZSBzZXQgZm9yICIKLQkJICAgICAgICJtYW51YWwgcm9hbWluZ1xuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEZpbmFsbHksIGVuYWJsZSBtYW51YWwgcm9hbWluZyAqLwotCXByaXYtPmJzc2lkX2ZpeGVkID0gMTsKLQltZW1jcHkocHJpdi0+ZGVzaXJlZF9ic3NpZCwgJmFwX2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgYXBfYWRkci0+c2FfZGF0YSk7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdTMyICptb2RlLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSAqbW9kZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAoKm1vZGUpIHsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCWlmICghcHJpdi0+aGFzX2lic3MgJiYgIXByaXYtPmhhc19wb3J0MykKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJYnJlYWs7Ci0KLQljYXNlIElXX01PREVfTU9OSVRPUjoKLQkJaWYgKHByaXYtPmJyb2tlbl9tb25pdG9yICYmICFmb3JjZV9tb25pdG9yKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTW9uaXRvciBtb2RlIHN1cHBvcnQgaXMgIgotCQkJICAgICAgICJidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCXByaXYtPml3X21vZGUgPSAqbW9kZTsKLQkJc2V0X3BvcnRfdHlwZShwcml2KTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdTMyICptb2RlLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCSptb2RlID0gcHJpdi0+aXdfbW9kZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpycnEsCi0JCQkJICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotCWludCBudW1yYXRlczsKLQlpbnQgaSwgazsKLQotCXJycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7Ci0KLQlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLQlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMjsKLQotCS8qIFNldCBhdmFpbGFibGUgY2hhbm5lbHMvZnJlcXVlbmNpZXMgKi8KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOwotCWsgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQlpZiAocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgaSkpIHsKLQkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsKLQkJCXJhbmdlLT5mcmVxW2tdLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeVtpXSAqIDEwMDAwMDsKLQkJCXJhbmdlLT5mcmVxW2tdLmUgPSAxOwotCQkJaysrOwotCQl9Ci0JCQotCQlpZiAoayA+PSBJV19NQVhfRlJFUVVFTkNJRVMpCi0JCQlicmVhazsKLQl9Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOwotCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7Ci0KLQlpZiAocHJpdi0+aGFzX3dlcCkgewotCQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE9SSU5PQ09fTUFYX0tFWVM7Ci0JCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gU01BTExfS0VZX1NJWkU7Ci0JCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAxOwotCi0JCWlmIChwcml2LT5oYXNfYmlnX3dlcCkgewotCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSBMQVJHRV9LRVlfU0laRTsKLQkJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc193cGEpCi0JCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX0NJUEhFUl9US0lQOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmICghU1BZX05VTUJFUihwcml2KSkpewotCQkvKiBRdWFsaXR5IHN0YXRzIG1lYW5pbmdsZXNzIGluIGFkLWhvYyBtb2RlICovCi0JfSBlbHNlIHsKLQkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAweDhiIC0gMHgyZjsKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMHgyZiAtIDB4OTUgLSAxOwotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAweDJmIC0gMHg5NSAtIDE7Ci0JCS8qIE5lZWQgdG8gZ2V0IGJldHRlciB2YWx1ZXMgKi8KLQkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSAweDI0OwotCQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAweEMyOwotCQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAweDlFOwotCX0KLQotCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywKLQkJCQkJIHJhbmdlLT5iaXRyYXRlLCBJV19NQVhfQklUUkFURVMpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmFuZ2UtPm51bV9iaXRyYXRlcyA9IG51bXJhdGVzOwotCi0JLyogU2V0IGFuIGluZGljYXRpb24gb2YgdGhlIG1heCBUQ1AgdGhyb3VnaHB1dCBpbiBiaXQvcyB0aGF0IHdlIGNhbgotCSAqIGV4cGVjdCB1c2luZyB0aGlzIGludGVyZmFjZS4gTWF5IGJlIHVzZSBmb3IgUW9TIHN0dWZmLi4uCi0JICogSmVhbiBJSSAqLwotCWlmIChudW1yYXRlcyA+IDIpCi0JCXJhbmdlLT50aHJvdWdocHV0ID0gNSAqIDEwMDAgKiAxMDAwOwkvKiB+NSBNYi9zICovCi0JZWxzZQotCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDEuNSAqIDEwMDAgKiAxMDAwOwkvKiB+MS41IE1iL3MgKi8KLQotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+bWluX3BtcCA9IDA7Ci0JcmFuZ2UtPm1heF9wbXAgPSA2NTUzNTAwMDsKLQlyYW5nZS0+bWluX3BtdCA9IDA7Ci0JcmFuZ2UtPm1heF9wbXQgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLwotCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7Ci0JcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7Ci0JcmFuZ2UtPnBtX2NhcGEgPSBJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9USU1FT1VUIHwgSVdfUE9XRVJfVU5JQ0FTVF9SOwotCi0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xJRkVUSU1FOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yX3RpbWVfZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gNjU1MzU7CS8qID8/PyAqLwotCXJhbmdlLT5taW5fcl90aW1lID0gMDsKLQlyYW5nZS0+bWF4X3JfdGltZSA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCi0KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQotCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOwotCWVsc2UKLQkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9OT05FOwotCi0JLyogRXZlbnQgY2FwYWJpbGl0eSAoa2VybmVsKSAqLwotCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7Ci0JLyogRXZlbnQgY2FwYWJpbGl0eSAoZHJpdmVyKSAqLwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXVEhSU1BZKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBJV0VWVFhEUk9QKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgICAgIGNoYXIgKmtleWJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCWludCBzZXRpbmRleCA9IHByaXYtPnR4X2tleTsKLQlpbnQgZW5jb2RlX2FsZyA9IHByaXYtPmVuY29kZV9hbGc7Ci0JaW50IHJlc3RyaWN0ZWQgPSBwcml2LT53ZXBfcmVzdHJpY3Q7Ci0JdTE2IHhsZW4gPSAwOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghIHByaXYtPmhhc193ZXApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChlcnEtPnBvaW50ZXIpIHsKLQkJLyogV2UgYWN0dWFsbHkgaGF2ZSBhIGtleSB0byBzZXQgLSBjaGVjayBpdHMgbGVuZ3RoICovCi0JCWlmIChlcnEtPmxlbmd0aCA+IExBUkdFX0tFWV9TSVpFKQotCQkJcmV0dXJuIC1FMkJJRzsKLQotCQlpZiAoIChlcnEtPmxlbmd0aCA+IFNNQUxMX0tFWV9TSVpFKSAmJiAhcHJpdi0+aGFzX2JpZ193ZXAgKQotCQkJcmV0dXJuIC1FMkJJRzsKLQl9Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIENsZWFyIGFueSBUS0lQIGtleSB3ZSBoYXZlICovCi0JaWYgKChwcml2LT5oYXNfd3BhKSAmJiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApKQotCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBzZXRpbmRleCk7Ci0KLQlpZiAoZXJxLT5sZW5ndGggPiAwKSB7Ci0JCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCi0JCQlpbmRleCA9IHByaXYtPnR4X2tleTsKLQotCQkvKiBBZGp1c3Qga2V5IGxlbmd0aCB0byBhIHN1cHBvcnRlZCB2YWx1ZSAqLwotCQlpZiAoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkgewotCQkJeGxlbiA9IExBUkdFX0tFWV9TSVpFOwotCQl9IGVsc2UgaWYgKGVycS0+bGVuZ3RoID4gMCkgewotCQkJeGxlbiA9IFNNQUxMX0tFWV9TSVpFOwotCQl9IGVsc2UKLQkJCXhsZW4gPSAwOwotCi0JCS8qIFN3aXRjaCBvbiBXRVAgaWYgb2ZmICovCi0JCWlmICgoZW5jb2RlX2FsZyAhPSBJV19FTkNPREVfQUxHX1dFUCkgJiYgKHhsZW4gPiAwKSkgewotCQkJc2V0aW5kZXggPSBpbmRleDsKLQkJCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEltcG9ydGFudCBub3RlIDogaWYgdGhlIHVzZXIgZG8gIml3Y29uZmlnIGV0aDAgZW5jIG9mZiIsCi0JCSAqIHdlIHdpbGwgYXJyaXZlIHRoZXJlIHdpdGggYW4gaW5kZXggb2YgLTEuIFRoaXMgaXMgdmFsaWQKLQkJICogYnV0IG5lZWQgdG8gYmUgdGFrZW4gY2FyZSBvZmYuLi4gSmVhbiBJSSAqLwotCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKSB7Ci0JCQlpZigoaW5kZXggIT0gLTEpIHx8IChlcnEtPmZsYWdzID09IDApKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFNldCB0aGUgaW5kZXggOiBDaGVjayB0aGF0IHRoZSBrZXkgaXMgdmFsaWQgKi8KLQkJCWlmKHByaXYtPmtleXNbaW5kZXhdLmxlbiA9PSAwKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXNldGluZGV4ID0gaW5kZXg7Ci0JCX0KLQl9Ci0KLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKLQkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQotCQlyZXN0cmljdGVkID0gMDsKLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQotCQlyZXN0cmljdGVkID0gMTsKLQotCWlmIChlcnEtPnBvaW50ZXIgJiYgZXJxLT5sZW5ndGggPiAwKSB7Ci0JCXByaXYtPmtleXNbaW5kZXhdLmxlbiA9IGNwdV90b19sZTE2KHhsZW4pOwotCQltZW1zZXQocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgMCwKLQkJICAgICAgIHNpemVvZihwcml2LT5rZXlzW2luZGV4XS5kYXRhKSk7Ci0JCW1lbWNweShwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBrZXlidWYsIGVycS0+bGVuZ3RoKTsKLQl9Ci0JcHJpdi0+dHhfa2V5ID0gc2V0aW5kZXg7Ci0KLQkvKiBUcnkgZmFzdCBrZXkgY2hhbmdlIGlmIGNvbm5lY3RlZCBhbmQgb25seSBrZXlzIGFyZSBjaGFuZ2VkICovCi0JaWYgKChwcml2LT5lbmNvZGVfYWxnID09IGVuY29kZV9hbGcpICYmCi0JICAgIChwcml2LT53ZXBfcmVzdHJpY3QgPT0gcmVzdHJpY3RlZCkgJiYKLQkgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOwotCQkvKiBObyBuZWVkIHRvIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCi0JCWdvdG8gb3V0OwotCX0KLQotCXByaXYtPmVuY29kZV9hbGcgPSBlbmNvZGVfYWxnOwotCXByaXYtPndlcF9yZXN0cmljdCA9IHJlc3RyaWN0ZWQ7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAotCQkJCSAgICAgY2hhciAqa2V5YnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JdTE2IHhsZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBwcml2LT5oYXNfd2VwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCi0JCWluZGV4ID0gcHJpdi0+dHhfa2V5OwotCi0JZXJxLT5mbGFncyA9IDA7Ci0JaWYgKCFwcml2LT5lbmNvZGVfYWxnKQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQllcnEtPmZsYWdzIHw9IGluZGV4ICsgMTsKLQotCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0JZWxzZQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwotCi0JeGxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaW5kZXhdLmxlbik7Ci0KLQllcnEtPmxlbmd0aCA9IHhsZW47Ci0KLQltZW1jcHkoa2V5YnVmLCBwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBPUklOT0NPX01BWF9LRVlfU0laRSk7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgIGNoYXIgKmVzc2lkYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBOb3RlIDogRVNTSUQgaXMgaWdub3JlZCBpbiBBZC1Ib2MgZGVtbyBtb2RlLCBidXQgd2UgY2FuIHNldCBpdAotCSAqIGFueXdheS4uLiAtIEplYW4gSUkgKi8KLQotCS8qIEh1bS4uLiBTaG91bGQgbm90IHVzZSBXaXJlbGVzcyBFeHRlbnNpb24gY29uc3RhbnQgKG1heSBjaGFuZ2UpLAotCSAqIHNob3VsZCB1c2Ugb3VyIG93bi4uLiAtIEplYW4gSUkgKi8KLQlpZiAoZXJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKLQkJcmV0dXJuIC1FMkJJRzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogTlVMTCB0aGUgc3RyaW5nIChmb3IgTlVMTCB0ZXJtaW5hdGlvbiAmIEVTU0lEID0gQU5ZKSAtIEplYW4gSUkgKi8KLQltZW1zZXQocHJpdi0+ZGVzaXJlZF9lc3NpZCwgMCwgc2l6ZW9mKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKLQotCS8qIElmIG5vdCBBTlksIGdldCB0aGUgbmV3IEVTU0lEICovCi0JaWYgKGVycS0+ZmxhZ3MpIHsKLQkJbWVtY3B5KHByaXYtPmRlc2lyZWRfZXNzaWQsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAotCQkJCSAgY2hhciAqZXNzaWRidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGFjdGl2ZTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSBvcmlub2NvX2h3X2dldF9lc3NpZChwcml2LCAmYWN0aXZlLCBlc3NpZGJ1Zik7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJZXJxLT5sZW5ndGggPSBlcnI7Ci0JfSBlbHNlIHsKLQkJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCQlyZXR1cm4gLUVCVVNZOwotCQltZW1jcHkoZXNzaWRidWYsIHByaXYtPmRlc2lyZWRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJZXJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCk7Ci0JCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JfQotCi0JZXJxLT5mbGFncyA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCi0JCQkJIGNoYXIgKm5pY2tidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChucnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQotCQlyZXR1cm4gLUUyQklHOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKLQltZW1jcHkocHJpdi0+bmljaywgbmlja2J1ZiwgbnJxLT5sZW5ndGgpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAotCQkJCSBjaGFyICpuaWNrYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW1lbWNweShuaWNrYnVmLCBwcml2LT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCW5ycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBjaGFuID0gLTE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCi0JLyogSW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSB0aGUgQVAgc2V0cyB0aGUgY2hhbm5lbCAqLwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfSU5GUkEpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoIChmcnEtPmUgPT0gMCkgJiYgKGZycS0+bSA8PSAxMDAwKSApIHsKLQkJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLwotCQljaGFuID0gZnJxLT5tOwotCX0gZWxzZSB7Ci0JCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5IC0gc2VhcmNoIHRoZSB0YWJsZSAqLwotCQlpbnQgbXVsdCA9IDE7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAoNiAtIGZycS0+ZSk7IGkrKykKLQkJCW11bHQgKj0gMTA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKQotCQkJaWYgKGZycS0+bSA9PSAoY2hhbm5lbF9mcmVxdWVuY3lbaV0gKiBtdWx0KSkKLQkJCQljaGFuID0gaSsxOwotCX0KLQotCWlmICggKGNoYW4gPCAxKSB8fCAoY2hhbiA+IE5VTV9DSEFOTkVMUykgfHwKLQkgICAgICEgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IChjaGFuLTEpKSApICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXByaXYtPmNoYW5uZWwgPSBjaGFuOwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQkvKiBGYXN0IGNoYW5uZWwgY2hhbmdlIC0gbm8gY29tbWl0IGlmIHN1Y2Nlc3NmdWwgKi8KLQkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKLQkJCQkJICAgIEhFUk1FU19URVNUX1NFVF9DSEFOTkVMLAotCQkJCQljaGFuLCBOVUxMKTsKLQl9Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB0bXA7Ci0KLQkvKiBMb2NraW5nIGRvbmUgaW4gdGhlcmUgKi8KLQl0bXAgPSBvcmlub2NvX2h3X2dldF9mcmVxKHByaXYpOwotCWlmICh0bXAgPCAwKSB7Ci0JCXJldHVybiB0bXA7Ci0JfQotCi0JZnJxLT5tID0gdG1wOwotCWZycS0+ZSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQl1MTYgdmFsOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsICZ2YWwpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0Jc3JxLT52YWx1ZSA9IHZhbDsKLQlzcnEtPmZpeGVkID0gMDsgLyogYXV0byAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdmFsID0gc3JxLT52YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFwcml2LT5oYXNfc2Vuc2l0aXZpdHkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmICgodmFsIDwgMSkgfHwgKHZhbCA+IDMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkKLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQlwcml2LT5hcF9kZW5zaXR5ID0gdmFsOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdmFsID0gcnJxLT52YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHJycS0+ZGlzYWJsZWQpCi0JCXZhbCA9IDIzNDc7Ci0KLQlpZiAoICh2YWwgPCAwKSB8fCAodmFsID4gMjM0NykgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcHJpdi0+cnRzX3RocmVzaCA9IHZhbDsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlycnEtPnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaDsKLQlycnEtPmRpc2FibGVkID0gKHJycS0+dmFsdWUgPT0gMjM0Nyk7Ci0JcnJxLT5maXhlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHByaXYtPmhhc19td28pIHsKLQkJaWYgKGZycS0+ZGlzYWJsZWQpCi0JCQlwcml2LT5td29fcm9idXN0ID0gMDsKLQkJZWxzZSB7Ci0JCQlpZiAoZnJxLT5maXhlZCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRml4ZWQgZnJhZ21lbnRhdGlvbiBpcyAiCi0JCQkJICAgICAgICJub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUuICIKLQkJCQkgICAgICAgIlVzaW5nIE1XTyByb2J1c3QgaW5zdGVhZC5cbiIsIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5td29fcm9idXN0ID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChmcnEtPmRpc2FibGVkKQotCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSAyMzQ2OwotCQllbHNlIHsKLQkJCWlmICggKGZycS0+dmFsdWUgPCAyNTYpIHx8IChmcnEtPnZhbHVlID4gMjM0NikgKQotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQllbHNlCi0JCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSBmcnEtPnZhbHVlICYgfjB4MTsgLyogbXVzdCBiZSBldmVuICovCi0JCX0KLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXUxNiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWlmIChwcml2LT5oYXNfbXdvKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICZ2YWwpOwotCQlpZiAoZXJyKQotCQkJdmFsID0gMDsKLQotCQlmcnEtPnZhbHVlID0gdmFsID8gMjM0NyA6IDA7Ci0JCWZycS0+ZGlzYWJsZWQgPSAhIHZhbDsKLQkJZnJxLT5maXhlZCA9IDA7Ci0JfSBlbHNlIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAmdmFsKTsKLQkJaWYgKGVycikKLQkJCXZhbCA9IDA7Ci0KLQkJZnJxLT52YWx1ZSA9IHZhbDsKLQkJZnJxLT5kaXNhYmxlZCA9ICh2YWwgPj0gMjM0Nik7Ci0JCWZycS0+Zml4ZWQgPSAxOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYXRlbW9kZSA9IC0xOwotCWludCBiaXRyYXRlOyAvKiAxMDBzIG9mIGtpbG9iaXRzICovCi0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQkvKiBBcyB0aGUgdXNlciBzcGFjZSBkb2Vzbid0IGtub3cgb3VyIGhpZ2hlc3QgcmF0ZSwgaXQgdXNlcyAtMQotCSAqIHRvIGFzayB1cyB0byBzZXQgdGhlIGhpZ2hlc3QgcmF0ZS4gIFRlc3QgaXQgdXNpbmcgIml3Y29uZmlnCi0JICogZXRoWCByYXRlIGF1dG8iIC0gSmVhbiBJSSAqLwotCWlmIChycnEtPnZhbHVlID09IC0xKQotCQliaXRyYXRlID0gMTEwOwotCWVsc2UgewotCQlpZiAocnJxLT52YWx1ZSAlIDEwMDAwMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQliaXRyYXRlID0gcnJxLT52YWx1ZSAvIDEwMDAwMDsKLQl9Ci0KLQlpZiAoIChiaXRyYXRlICE9IDEwKSAmJiAoYml0cmF0ZSAhPSAyMCkgJiYKLQkgICAgIChiaXRyYXRlICE9IDU1KSAmJiAoYml0cmF0ZSAhPSAxMTApICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspCi0JCWlmICggKGJpdHJhdGVfdGFibGVbaV0uYml0cmF0ZSA9PSBiaXRyYXRlKSAmJgotCQkgICAgIChiaXRyYXRlX3RhYmxlW2ldLmF1dG9tYXRpYyA9PSAhIHJycS0+Zml4ZWQpICkgewotCQkJcmF0ZW1vZGUgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQkKLQlpZiAocmF0ZW1vZGUgPT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JcHJpdi0+Yml0cmF0ZW1vZGUgPSByYXRlbW9kZTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlpbnQgcmF0ZW1vZGU7Ci0JaW50IGk7Ci0JdTE2IHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlyYXRlbW9kZSA9IHByaXYtPmJpdHJhdGVtb2RlOwotCi0JQlVHX09OKChyYXRlbW9kZSA8IDApIHx8IChyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpKTsKLQotCXJycS0+dmFsdWUgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5iaXRyYXRlICogMTAwMDAwOwotCXJycS0+Zml4ZWQgPSAhIGJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmF1dG9tYXRpYzsKLQlycnEtPmRpc2FibGVkID0gMDsKLQotCS8qIElmIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZyB3ZSB0cnkgdG8gZmluZCBtb3JlIGFib3V0IHRoZQotCSAgIGN1cnJlbnQgbW9kZSAqLwotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DVVJSRU5UVFhSQVRFLCAmdmFsKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQkKLQkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogTHVjZW50IHN0eWxlIHJhdGUgKi8KLQkJCS8qIE5vdGUgOiBpbiBMdWNlbnQgZmlybXdhcmUsIHRoZSByZXR1cm4gdmFsdWUgb2YKLQkJCSAqIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSBpcyB0aGUgYml0cmF0ZSBpbiBNYi9zLAotCQkJICogYW5kIHRoZXJlZm9yZSBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZQotCQkJICogZW5jb2Rpbmcgb2YgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLgotCQkJICogRG9uJ3QgZm9yZ2V0IHRoYXQgNk1iL3MgaXMgcmVhbGx5IDUuNU1iL3MgKi8KLQkJCWlmICh2YWwgPT0gNikKLQkJCQlycnEtPnZhbHVlID0gNTUwMDAwMDsKLQkJCWVsc2UKLQkJCQlycnEtPnZhbHVlID0gdmFsICogMTAwMDAwMDsKLQkJCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIHJhdGUgKi8KLQkJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIHJhdGUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBCSVRSQVRFX1RBQkxFX1NJWkU7IGkrKykKLQkJCQlpZiAoYml0cmF0ZV90YWJsZVtpXS5pbnRlcnNpbF90eHJhdGVjdHJsID09IHZhbCkgewotCQkJCQlyYXRlbW9kZSA9IGk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWlmIChpID49IEJJVFJBVEVfVEFCTEVfU0laRSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IGJpdHJhdGUgKDB4JTA0aHgpXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHZhbCk7Ci0KLQkJCXJycS0+dmFsdWUgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5iaXRyYXRlICogMTAwMDAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJfQotCX0KLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwcnEtPmRpc2FibGVkKSB7Ci0JCXByaXYtPnBtX29uID0gMDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7Ci0JCWNhc2UgSVdfUE9XRVJfVU5JQ0FTVF9SOgotCQkJcHJpdi0+cG1fbWNhc3QgPSAwOwotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfUE9XRVJfQUxMX1I6Ci0JCQlwcml2LT5wbV9tY2FzdCA9IDE7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBJV19QT1dFUl9PTjoKLQkJCS8qIE5vIGZsYWdzIDogYnV0IHdlIG1heSBoYXZlIGEgdmFsdWUgLSBKZWFuIElJICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkKLQkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKSB7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlwcml2LT5wbV90aW1lb3V0ID0gcHJxLT52YWx1ZSAvIDEwMDA7Ci0JCX0KLQkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9QRVJJT0QpIHsKLQkJCXByaXYtPnBtX29uID0gMTsKLQkJCXByaXYtPnBtX3BlcmlvZCA9IHBycS0+dmFsdWUgLyAxMDAwOwotCQl9Ci0JCS8qIEl0J3MgdmFsaWQgdG8gbm90IGhhdmUgYSB2YWx1ZSBpZiB3ZSBhcmUganVzdCB0b2dnbGluZwotCQkgKiB0aGUgZmxhZ3MuLi4gSmVhbiBJSSAqLwotCQlpZighcHJpdi0+cG1fb24pIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQkJCQotCX0KLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IGVuYWJsZSwgcGVyaW9kLCB0aW1lb3V0LCBtY2FzdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELCAmZW5hYmxlKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCAmcGVyaW9kKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwgJnRpbWVvdXQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GTVVMVElDQVNUUkVDRUlWRSwgJm1jYXN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCXBycS0+ZGlzYWJsZWQgPSAhZW5hYmxlOwotCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBwZXJpb2QgKi8KLQlpZiAoKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9UWVBFKSA9PSBJV19QT1dFUl9USU1FT1VUKSB7Ci0JCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwotCQlwcnEtPnZhbHVlID0gdGltZW91dCAqIDEwMDA7Ci0JfSBlbHNlIHsKLQkJcHJxLT5mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKLQkJcHJxLT52YWx1ZSA9IHBlcmlvZCAqIDEwMDA7Ci0JfQotCWlmIChtY2FzdCkKLQkJcHJxLT5mbGFncyB8PSBJV19QT1dFUl9BTExfUjsKLQllbHNlCi0JCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfVU5JQ0FTVF9SOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQgaWR4LCBhbGcgPSBleHQtPmFsZywgc2V0X2tleSA9IDE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQl1MTYga2V5X2xlbjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogRGV0ZXJtaW5lIGFuZCB2YWxpZGF0ZSB0aGUga2V5IGluZGV4ICovCi0JaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCWlmIChpZHgpIHsKLQkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCi0JCQlnb3RvIG91dDsKLQkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IHByaXYtPnR4X2tleTsKLQotCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JICAgIGFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQotCWlmIChwcml2LT5oYXNfd3BhICYmIChhbGcgIT0gSVdfRU5DT0RFX0FMR19US0lQKSkgewotCQkvKiBDbGVhciBhbnkgVEtJUCBUWCBrZXkgd2UgaGFkICovCi0JCSh2b2lkKSBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHByaXYsIHByaXYtPnR4X2tleSk7Ci0JfQotCi0JaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7Ci0JCXByaXYtPnR4X2tleSA9IGlkeDsKLQkJc2V0X2tleSA9ICgoYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgfHwKLQkJCSAgIChleHQtPmtleV9sZW4gPiAwKSkgPyAxIDogMDsKLQl9Ci0KLQlpZiAoc2V0X2tleSkgewotCQkvKiBTZXQgdGhlIHJlcXVlc3RlZCBrZXkgZmlyc3QgKi8KLQkJc3dpdGNoIChhbGcpIHsKLQkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6Ci0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IDA7Ci0JCQlicmVhazsKLQotCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQkJaWYgKGV4dC0+a2V5X2xlbiA+IFNNQUxMX0tFWV9TSVpFKQotCQkJCWtleV9sZW4gPSBMQVJHRV9LRVlfU0laRTsKLQkJCWVsc2UgaWYgKGV4dC0+a2V5X2xlbiA+IDApCi0JCQkJa2V5X2xlbiA9IFNNQUxMX0tFWV9TSVpFOwotCQkJZWxzZQotCQkJCWdvdG8gb3V0OwotCi0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IGNwdV90b19sZTE2KGtleV9sZW4pOwotCi0JCQlrZXlfbGVuID0gbWluKGV4dC0+a2V5X2xlbiwga2V5X2xlbik7Ci0KLQkJCW1lbXNldChwcml2LT5rZXlzW2lkeF0uZGF0YSwgMCwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOwotCQkJbWVtY3B5KHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleSwga2V5X2xlbik7Ci0JCQlicmVhazsKLQotCQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKLQkJewotCQkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCQkJdTggKnRraXBfaXYgPSBOVUxMOwotCi0JCQlpZiAoIXByaXYtPmhhc193cGEgfHwKLQkJCSAgICAoZXh0LT5rZXlfbGVuID4gc2l6ZW9mKHByaXYtPnRraXBfa2V5WzBdKSkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7Ci0JCQltZW1zZXQoJnByaXYtPnRraXBfa2V5W2lkeF0sIDAsCi0JCQkgICAgICAgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2lkeF0pKTsKLQkJCW1lbWNweSgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7Ci0KLQkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElEKQotCQkJCXRraXBfaXYgPSAmZXh0LT5yeF9zZXFbMF07Ci0KLQkJCWVyciA9IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaHcsIGlkeCwKLQkJCQkgZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVksCi0JCQkJICh1OCAqKSAmcHJpdi0+dGtpcF9rZXlbaWR4XSwKLQkJCQkgdGtpcF9pdiwgTlVMTCk7Ci0JCQlpZiAoZXJyKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgVEtJUCBrZXkiCi0JCQkJICAgICAgICJcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWVyciA9IC1FSU5QUk9HUkVTUzsKLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCWludCBpZHgsIG1heF9rZXlfbGVuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gLUVJTlZBTDsKLQltYXhfa2V5X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7Ci0JaWYgKG1heF9rZXlfbGVuIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCkgewotCQlpZiAoKGlkeCA8IDEpIHx8IChpZHggPiA0KSkKLQkJCWdvdG8gb3V0OwotCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gcHJpdi0+dHhfa2V5OwotCi0JZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKLQltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwotCi0JZXh0LT5hbGcgPSBwcml2LT5lbmNvZGVfYWxnOwotCXN3aXRjaCAocHJpdi0+ZW5jb2RlX2FsZykgewotCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgotCQlleHQtPmtleV9sZW4gPSAwOwotCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaWR4XS5sZW4pLAotCQkJCSAgICAgbWF4X2tleV9sZW4pOwotCQltZW1jcHkoZXh0LT5rZXksIHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleV9sZW4pOwotCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSksCi0JCQkJICAgICBtYXhfa2V5X2xlbik7Ci0JCW1lbWNweShleHQtPmtleSwgJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5X2xlbik7Ci0JCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKLQkJYnJlYWs7Ci0JfQotCi0JZXJyID0gMDsKLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5QUk9HUkVTUzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLQljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6Ci0JY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJLyoKLQkJICogb3Jpbm9jbyBkb2VzIG5vdCB1c2UgdGhlc2UgcGFyYW1ldGVycwotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfS0VZX01HTVQ6Ci0JCS8qIHdsX2xrbSBpbXBsaWVzIHZhbHVlIDIgPT0gUFNLIGZvciBIZXJtZXMgSQotCQkgKiB3aGljaCB0aWVzIGluIHdpdGggV0VYVAotCQkgKiBubyBvdGhlciBoaW50cyB0aG8gOigKLQkJICovCi0JCXByaXYtPmtleV9tZ210ID0gcGFyYW0tPnZhbHVlOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQkJLyogV2hlbiBjb3VudGVybWVhc3VyZXMgYXJlIGVuYWJsZWQsIHNodXQgZG93biB0aGUKLQkJICogY2FyZDsgd2hlbiBkaXNhYmxlZCwgcmUtZW5hYmxlIHRoZSBjYXJkLiBUaGlzIG11c3QKLQkJICogdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuCi0JCSAqCi0JCSAqIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHRoZSBFQVBPTCBtZXNzYWdlIGlzIGdldHRpbmcKLQkJICogICAgICAgb3V0IGJlZm9yZSBjYXJkIGRpc2FibGVkCi0JCSAqLwotCQlpZiAocGFyYW0tPnZhbHVlKSB7Ci0JCQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDE7Ci0JCQlyZXQgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOwotCQl9IGVsc2UgewotCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAwOwotCQkJcmV0ID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKQotCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMTsKLQkJZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pCi0JCQlwcml2LT53ZXBfcmVzdHJpY3QgPSAwOwotCQllbHNlCi0JCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJaWYgKHByaXYtPmhhc193cGEpIHsKLQkJCXByaXYtPndwYV9lbmFibGVkID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGFyYW0tPnZhbHVlKQotCQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJLyogZWxzZSBzaWxlbnRseSBhY2NlcHQgZGlzYWJsZSBvZiBXUEEgKi8KLQkJCXByaXYtPndwYV9lbmFibGVkID0gMDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfS0VZX01HTVQ6Ci0JCXBhcmFtLT52YWx1ZSA9IHByaXYtPmtleV9tZ210OwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQkJcGFyYW0tPnZhbHVlID0gcHJpdi0+dGtpcF9jbV9hY3RpdmU7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQotCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQkJZWxzZQotCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgotCQlwYXJhbS0+dmFsdWUgPSBwcml2LT53cGFfZW5hYmxlZDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXU4ICpidWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGN1dCBvZmYgYXQgSUVFRTgwMjExX01BWF9EQVRBX0xFTiAqLwotCWlmICgod3JxdS0+ZGF0YS5sZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB8fAotCSAgICAod3JxdS0+ZGF0YS5sZW5ndGggJiYgKGV4dHJhID09IE5VTEwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKLQkJYnVmID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChidWYgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCW1lbWNweShidWYsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7Ci0JfSBlbHNlCi0JCWJ1ZiA9IE5VTEw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWtmcmVlKHByaXYtPndwYV9pZSk7Ci0JcHJpdi0+d3BhX2llID0gYnVmOwotCXByaXYtPndwYV9pZV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKLQotCWlmIChwcml2LT53cGFfaWUpIHsKLQkJLyogTG9va3MgbGlrZSB3bF9sa20gd2FudHMgdG8gY2hlY2sgdGhlIGF1dGggYWxnLCBhbmQKLQkJICogc29tZWhvdyBwYXNzIGl0IHRvIHRoZSBmaXJtd2FyZS4KLQkJICogSW5zdGVhZCBpdCBqdXN0IGNhbGxzIHRoZSBrZXkgbWdtdCByaWQKLQkJICogICAtIHdlIGRvIHRoaXMgaW4gc2V0IGF1dGguCi0JCSAqLwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICgocHJpdi0+d3BhX2llX2xlbiA9PSAwKSB8fCAocHJpdi0+d3BhX2llID09IE5VTEwpKSB7Ci0JCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgcHJpdi0+d3BhX2llX2xlbikgewotCQllcnIgPSAtRTJCSUc7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdycXUtPmRhdGEubGVuZ3RoID0gcHJpdi0+d3BhX2llX2xlbjsKLQltZW1jcHkoZXh0cmEsIHByaXYtPndwYV9pZSwgcHJpdi0+d3BhX2llX2xlbik7Ci0KLW91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAobWxtZS0+Y21kKSB7Ci0JY2FzZSBJV19NTE1FX0RFQVVUSDoKLQkJLyogc2lsZW50bHkgaWdub3JlICovCi0JCWJyZWFrOwotCi0JY2FzZSBJV19NTE1FX0RJU0FTU09DOgotCXsKLQkJc3RydWN0IHsKLQkJCXU4IGFkZHJbRVRIX0FMRU5dOwotCQkJX19sZTE2IHJlYXNvbl9jb2RlOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7Ci0KLQkJbWVtY3B5KGJ1Zi5hZGRyLCBtbG1lLT5hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKLQkJYnVmLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYobWxtZS0+cmVhc29uX2NvZGUpOwotCQlyZXQgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORkRJU0FTU09DSUFURSwKLQkJCQkJICAmYnVmKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IHNob3J0X2xpbWl0LCBsb25nX2xpbWl0LCBsaWZldGltZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU0hPUlRSRVRSWUxJTUlULAotCQkJCSAgJnNob3J0X2xpbWl0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0xPTkdSRVRSWUxJTUlULAotCQkJCSAgJmxvbmdfbGltaXQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTUFYVFJBTlNNSVRMSUZFVElNRSwKLQkJCQkgICZsaWZldGltZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlycnEtPmRpc2FibGVkID0gMDsJCS8qIENhbid0IGJlIGRpc2FibGVkICovCi0KLQkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcmV0cnkgbnVtYmVyICovCi0JaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKLQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOwotCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDAwOwkvKiA/Pz8gKi8KLQl9IGVsc2UgewotCQkvKiBCeSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBtaW4gbnVtYmVyICovCi0JCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpKSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwotCQkJcnJxLT52YWx1ZSA9IGxvbmdfbGltaXQ7Ci0JCX0gZWxzZSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JCQlycnEtPnZhbHVlID0gc2hvcnRfbGltaXQ7Ci0JCQlpZihzaG9ydF9saW1pdCAhPSBsb25nX2xpbWl0KQotCQkJCXJycS0+ZmxhZ3MgfD0gSVdfUkVUUllfU0hPUlQ7Ci0JCX0KLQl9Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdm9pZCAqd3JxdSwKLQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghIGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoaW5mby0+Y21kID09IChTSU9DSVdGSVJTVFBSSVYgKyAweDEpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2luZyByZXNldCFcbiIsIGRldi0+bmFtZSk7Ci0KLQkJLyogRmlybXdhcmUgcmVzZXQgKi8KLQkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3JjZSBzY2hlZHVsaW5nIHJlc2V0IVxuIiwgZGV2LT5uYW1lKTsKLQotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9ICooIChpbnQgKikgZXh0cmEgKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlwcml2LT5pYnNzX3BvcnQgPSB2YWwgOwotCi0JLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLwotCXNldF9wb3J0X3R5cGUocHJpdik7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHZvaWQgKndycXUsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7Ci0KLQkqdmFsID0gcHJpdi0+aWJzc19wb3J0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cG9ydDMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB2b2lkICp3cnF1LAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9ICooIChpbnQgKikgZXh0cmEgKTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMDogLyogVHJ5IHRvIGRvIElFRUUgYWQtaG9jIG1vZGUgKi8KLQkJaWYgKCEgcHJpdi0+aGFzX2lic3MpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAwOwotCQkJCi0JCWJyZWFrOwotCi0JY2FzZSAxOiAvKiBUcnkgdG8gZG8gTHVjZW50IHByb3ByaWV0YXJ5IGFkLWhvYyBtb2RlICovCi0JCWlmICghIHByaXYtPmhhc19wb3J0MykgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXByaXYtPnByZWZlcl9wb3J0MyA9IDE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoISBlcnIpIHsKLQkJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLwotCQlzZXRfcG9ydF90eXBlKHByaXYpOwotCQllcnIgPSAtRUlOUFJPR1JFU1M7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHZvaWQgKndycXUsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7Ci0KLQkqdmFsID0gcHJpdi0+cHJlZmVyX3BvcnQzOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdmFsOwotCi0JaWYgKCEgcHJpdi0+aGFzX3ByZWFtYmxlKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkvKiA4MDIuMTFiIGhhcyByZWNlbnRseSBkZWZpbmVkIHNvbWUgc2hvcnQgcHJlYW1ibGUuCi0JICogQmFzaWNhbGx5LCB0aGUgUGh5IGhlYWRlciBoYXMgYmVlbiByZWR1Y2VkIGluIHNpemUuCi0JICogVGhpcyBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBhdCBoaWdoIHJhdGVzCi0JICogKHRoZSBwcmVhbWJsZSBpcyB0cmFuc21pdHRlZCBhdCAxTWIvcyksIHVuZm9ydHVuYXRlbHkKLQkgKiB0aGlzIGdpdmUgY29tcGF0aWJpbGl0eSB0cm91Ymxlcy4uLiAtIEplYW4gSUkgKi8KLQl2YWwgPSAqKCAoaW50ICopIGV4dHJhICk7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICh2YWwpCi0JCXByaXYtPnByZWFtYmxlID0gMTsKLQllbHNlCi0JCXByaXYtPnByZWFtYmxlID0gMDsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwotCi0JaWYgKCEgcHJpdi0+aGFzX3ByZWFtYmxlKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkqdmFsID0gcHJpdi0+cHJlYW1ibGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGlvY3RsIGludGVyZmFjZSB0byBoZXJtZXNfcmVhZF9sdHYoKQotICogVG8gdXNlIHdpdGggaXdwcml2LCBwYXNzIHRoZSBSSUQgYXMgdGhlIHRva2VuIGFyZ3VtZW50LCBlLmcuCi0gKiBpd3ByaXYgZ2V0X3JpZCBbMHhmYzAwXQotICogQXQgbGVhc3QgV2lyZWxlc3MgVG9vbHMgMjUgaXMgcmVxdWlyZWQgdG8gdXNlIGl3cHJpdi4KLSAqIEZvciBXaXJlbGVzcyBUb29scyAyNSBhbmQgMjYgYXBwZW5kICJkdW1teSIgYXJlIHRoZSBlbmQuICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCByaWQgPSBkYXRhLT5mbGFnczsKLQl1MTYgbGVuZ3RoOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIEl0J3MgYSAiZ2V0IiBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQgdXNlcnMgdG8gYWNjZXNzIHRoZQotCSAqIFdFUCBrZXkgYW5kIG90aGVyIHJhdyBmaXJtd2FyZSBkYXRhICovCi0JaWYgKCEgY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChyaWQgPCAweGZjMDAgfHwgcmlkID4gMHhmZmZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBNQVhfUklEX0xFTiwgJmxlbmd0aCwKLQkJCSAgICAgIGV4dHJhKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWRhdGEtPmxlbmd0aCA9IG1pbl90KHUxNiwgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW5ndGgpLAotCQkJICAgICBNQVhfUklEX0xFTik7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBUcmlnZ2VyIGEgc2NhbiAobG9vayBmb3Igb3RoZXIgY2VsbHMgaW4gdGhlIHZpY2luaXR5KSAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnNpID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKSBleHRyYTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTm90ZSA6IHlvdSBtYXkgaGF2ZSByZWFsaXNlZCB0aGF0LCBhcyB0aGlzIGlzIGEgU0VUIG9wZXJhdGlvbiwKLQkgKiB0aGlzIGlzIHByaXZpbGVnZWQgYW5kIHRoZXJlZm9yZSBhIG5vcm1hbCB1c2VyIGNhbid0Ci0JICogcGVyZm9ybSBzY2FubmluZy4KLQkgKiBUaGlzIGlzIG5vdCBhbiBlcnJvciwgd2hpbGUgdGhlIGRldmljZSBwZXJmb3JtIHNjYW5uaW5nLAotCSAqIHRyYWZmaWMgZG9lc24ndCBmbG93LCBzbyBpdCdzIGEgcGVyZmVjdCBEb1MuLi4KLQkgKiBKZWFuIElJICovCi0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFNjYW5uaW5nIHdpdGggcG9ydCAwIGRpc2FibGVkIHdvdWxkIGZhaWwgKi8KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSAtRU5FVERPV047Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEluIG1vbml0b3IgbW9kZSwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgYWx3YXlzIGVtcHR5LgotCSAqIFByb2JlIHJlc3BvbnNlcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgcmVjZWl2ZWQKLQkgKiBmcmFtZXMgYW5kIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBzb2Z0d2FyZS4gKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIE5vdGUgOiBiZWNhdXNlIHdlIGRvbid0IGxvY2sgb3V0IHRoZSBpcnEgaGFuZGxlciwgdGhlIHdheQotCSAqIHdlIGFjY2VzcyBzY2FuIHZhcmlhYmxlcyBpbiBwcml2IGlzIGNyaXRpY2FsLgotCSAqCW8gc2Nhbl9pbnByb2dyZXNzIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKLQkgKglvIHNjYW5fbW9kZSA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCi0JICogQmVmb3JlIG1vZGlmeWluZyBhbnl0aGluZyBvbiB0aG9zZSB2YXJpYWJsZXMsIHBsZWFzZSB0aGluayBoYXJkICEKLQkgKiBKZWFuIElJICovCi0KLQkvKiBTYXZlIGZsYWdzICovCi0JcHJpdi0+c2Nhbl9tb2RlID0gc3JxLT5mbGFnczsKLQotCS8qIEFsd2F5cyB0cmlnZ2VyIHNjYW5uaW5nLCBldmVuIGlmIGl0J3MgaW4gcHJvZ3Jlc3MuCi0JICogVGhpcyB3YXksIGlmIHRoZSBpbmZvIGZyYW1lIGdldCBsb3N0LCB3ZSB3aWxsIHJlY292ZXIgc29tZXdoYXQKLQkgKiBncmFjZWZ1bGx5ICAtIEplYW4gSUkgKi8KLQotCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKLQkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORkhPU1RTQ0FOX1NZTUJPTCwKLQkJCQkJCSAgIEhFUk1FU19IT1NUU0NBTl9TWU1CT0xfT05DRSB8Ci0JCQkJCQkgICBIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX0JDQVNUKTsKLQkJCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IHsKLQkJCV9fbGUxNiByZXFbM107Ci0KLQkJCXJlcVswXSA9IGNwdV90b19sZTE2KDB4M2ZmZik7CS8qIEFsbCBjaGFubmVscyAqLwotCQkJcmVxWzFdID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsJLyogcmF0ZSAxIE1icHMgKi8KLQkJCXJlcVsyXSA9IDA7CQkJLyogQW55IEVTU0lEICovCi0JCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTiwgJnJlcSk7Ci0JCX0KLQkJYnJlYWs7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJCWlmIChwcml2LT5zY2FuX21vZGUgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKLQkJCQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOwotCQkJCXNpemVfdCBsZW4gPSBtaW4oc2l6ZW9mKGlkYnVmLnZhbCksCi0JCQkJCQkgKHNpemVfdCkgc2ktPmVzc2lkX2xlbik7Ci0JCQkJaWRidWYubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKLQkJCQltZW1jcHkoaWRidWYudmFsLCBzaS0+ZXNzaWQsIGxlbik7Ci0KLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgICAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCi0JCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGxlbiArIDIpLAotCQkJCQkgICAgICAgJmlkYnVmKTsKLQkJCX0gZWxzZQotCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCi0JCQkJCQkgICAwKTsJLyogQW55IEVTU0lEICovCi0JCQlpZiAoZXJyKQotCQkJCWJyZWFrOwotCi0JCQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCQkJLyogQ2xlYXIgc2NhbiByZXN1bHRzIGF0IHRoZSBzdGFydCBvZgotCQkJCSAqIGFuIGV4dGVuZGVkIHNjYW4gKi8KLQkJCQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LAotCQkJCQkJbXNlY3NfdG9famlmZmllcygxNTAwMCkpOwotCi0JCQkJLyogVE9ETzogSXMgdGhpcyBhdmFpbGFibGUgb24gb2xkZXIgZmlybXdhcmU/Ci0JCQkJICogICBDYW4gd2UgdXNlIGl0IHRvIHNjYW4gc3BlY2lmaWMgY2hhbm5lbHMKLQkJCQkgKiAgIGZvciBJV19TQ0FOX1RISVNfRlJFUT8gKi8KLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQlIRVJNRVNfUklEX0NORlNDQU5DSEFOTkVMUzJHSFosCi0JCQkJCQkweDdGRkYpOwotCQkJCWlmIChlcnIpCi0JCQkJCWdvdG8gb3V0OwotCi0JCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsCi0JCQkJCQkgICAgIEhFUk1FU19JTlFfQ0hBTk5FTElORk8pOwotCQkJfSBlbHNlCi0JCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZQotCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKLQotCS8qIE9uZSBtb3JlIGNsaWVudCAqLwotCWlmICghIGVycikKLQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLSNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKLQotLyogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGFudAotICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkgKi8KLXN0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCQkgICBjaGFyICpjdXJyZW50X2V2LAotCQkJCQkgICBjaGFyICplbmRfYnVmLAotCQkJCQkgICB1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICpic3MsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNgkJCWNhcGFiaWxpdGllczsKLQl1MTYJCQljaGFubmVsOwotCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0KLQkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCi0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmEuYnNzaWQsIEVUSF9BTEVOKTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0KLQkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KLQotCS8qIEFkZCB0aGUgRVNTSUQgKi8KLQlpd2UudS5kYXRhLmxlbmd0aCA9IGxlMTZfdG9fY3B1KGJzcy0+YS5lc3NpZF9sZW4pOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQotCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwotCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0JaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgYnNzLT5hLmVzc2lkKTsKLQotCS8qIEFkZCBtb2RlICovCi0JaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+YS5jYXBhYmlsaXRpZXMpOwotCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgewotCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJZWxzZQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7Ci0JfQotCi0JY2hhbm5lbCA9IGJzcy0+cy5jaGFubmVsOwotCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7Ci0JCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KLQkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOwotCQlpd2UudS5mcmVxLmUgPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCi0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWxfZnJlcXVlbmN5W2NoYW5uZWwtMV0gKiAxMDAwMDA7Ci0JCWl3ZS51LmZyZXEuZSA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0JfQotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KLQlpd2UuY21kID0gSVdFVlFVQUw7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQlpd2UudS5xdWFsLmxldmVsID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5sZXZlbCkgLSAweDk1OwotCWl3ZS51LnF1YWwubm9pc2UgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLm5vaXNlKSAtIDB4OTU7Ci0JLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQotCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCi0JaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQotCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKLQllbHNlCi0JCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotCi0JLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgTlVMTCk7Ci0KLQkvKiBCaXQgcmF0ZSBpcyBub3QgYXZhaWxhYmxlIGluIEx1Y2VudC9BZ2VyZSBmaXJtd2FyZXMgKi8KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSAhPSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7Ci0JCWNoYXIgKmN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0JCWludCBzdGVwOwotCi0JCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKQotCQkJc3RlcCA9IDI7Ci0JCWVsc2UKLQkJCXN0ZXAgPSAxOwotCi0JCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLQkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCi0JCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQkJLyogTWF4IDEwIHZhbHVlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkgKz0gc3RlcCkgewotCQkJLyogTlVMTCB0ZXJtaW5hdGVkICovCi0JCQlpZiAoYnNzLT5wLnJhdGVzW2ldID09IDB4MCkKLQkJCQlicmVhazsKLQkJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCi0JCQlpd2UudS5iaXRyYXRlLnZhbHVlID0KLQkJCQkoKGJzcy0+cC5yYXRlc1tpXSAmIDB4N2YpICogNTAwMDAwKTsKLQkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgICBjdXJyZW50X3ZhbCwKLQkJCQkJCQkgICBlbmRfYnVmLCAmaXdlLAotCQkJCQkJCSAgIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKLQkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKLQl9Ci0KLQkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiYmNuX2ludD0lZCIsCi0JCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmEuYmVhY29uX2ludGVydikpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBDYXBhYmlsaXRlcyAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJjYXBhYj0weCUwNHgiLAotCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0JICogZm9yIGdpdmVuIG5ldHdvcmsuICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCXJldHVybiBjdXJyZW50X2V2OwotfQotCi1zdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCQkgICAgICAgY2hhciAqY3VycmVudF9ldiwKLQkJCQkJICAgICAgIGNoYXIgKmVuZF9idWYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCi17Ci0JdTE2CQkJY2FwYWJpbGl0aWVzOwotCXUxNgkJCWNoYW5uZWw7Ci0Jc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0JY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOwotCXU4ICppZTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0KLQkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCi0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCi0KLQkvKiBBZGQgdGhlIEVTU0lEICovCi0JaWUgPSBic3MtPmRhdGE7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpIHsKLQkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCi0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwotCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsICZpZVsyXSk7Ci0JfQotCi0JLyogQWRkIG1vZGUgKi8KLQljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmNhcGFiaWxpdGllcyk7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfRFNfUEFSQU1TKTsKLQljaGFubmVsID0gaWUgPyBpZVsyXSA6IDA7Ci0JaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKLQkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwotCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7Ci0JCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0KLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbY2hhbm5lbC0xXSAqIDEwMDAwMDsKLQkJaXdlLnUuZnJlcS5lID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQl9Ci0KLQkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPmxldmVsIC0gMHg5NTsKLQlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZSAtIDB4OTU7Ci0JLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQotCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCi0JaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQotCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKLQllbHNlCi0JCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotCi0JLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgTlVMTCk7Ci0KLQkvKiBXUEEgSUUgKi8KLQlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpKTsKLQlpZiAoaWUpIHsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBpZSk7Ci0JfQotCi0JLyogUlNOIElFICovCi0JaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9SU04pOwotCWlmIChpZSkgewotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGllKTsKLQl9Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1NVUFBfUkFURVMpOwotCWlmIChpZSkgewotCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0KLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDI7IGkgPCAoaWVbMV0gKyAyKTsgaSsrKSB7Ci0JCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChpZVtpXSAmIDB4N0YpICogNTAwMDAwKTsKLQkJCXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LCBwLCBlbmRfYnVmLAotCQkJCQkJICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmIChwID4gKGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpKQotCQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JLyogVGltZXN0YW1wICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPQotCQlzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLCAidHNmPSUwMTZsbHgiLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGJzcy0+dGltZXN0YW1wKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEJlYWNvbiBpbnRlcnZhbCAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJiY25faW50PSVkIiwKLQkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YmVhY29uX2ludGVydmFsKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIENhcGFiaWxpdGVzICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCi0JCQkJICAgICBjYXBhYmlsaXRpZXMpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKLQkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLS8qIFJldHVybiByZXN1bHRzIG9mIGEgc2NhbiAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCS8qIEltcG9ydGFudCBub3RlIDogd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgY2FsbGVyCi0JCSAqIHVudGlsIHJlc3VsdHMgYXJlIHJlYWR5IGZvciB2YXJpb3VzIHJlYXNvbnMuCi0JCSAqIEZpcnN0LCBtYW5hZ2luZyB3YWl0IHF1ZXVlcyBpcyBjb21wbGV4IGFuZCByYWN5LgotCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29tbWluZwotCQkgKiBoZXJlIChpbiBkZXZfaW9jdGwoKSkuCi0JCSAqIFRoaXJkLCB3ZSBnZW5lcmF0ZSBhbiBXaXJlbGVzcyBFdmVudCwgc28gdGhlCi0JCSAqIGNhbGxlciBjYW4gd2FpdCBpdHNlbGYgb24gdGhhdCAtIEplYW4gSUkgKi8KLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCi0JCQljdXJyZW50X2V2ID0KLQkJCQlvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihkZXYsIGluZm8sCi0JCQkJCQkJICAgY3VycmVudF9ldiwKLQkJCQkJCQkgICBleHRyYSArIHNycS0+bGVuZ3RoLAotCQkJCQkJCSAgICZic3MtPmJzcywKLQkJCQkJCQkgICBic3MtPmxhc3Rfc2Nhbm5lZCk7Ci0KLQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwotCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKLQkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgewotCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKLQkJCQkgKiBiaWdnZXIgYnVmZmVyICovCi0JCQkJZXJyID0gLUUyQklHOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KLQkJCWN1cnJlbnRfZXYgPSBvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywKLQkJCQkJCQkgICAgY3VycmVudF9ldiwKLQkJCQkJCQkgICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKLQkJCQkJCQkgICAgJmJzcy0+YnNzLAotCQkJCQkJCSAgICBic3MtPmxhc3Rfc2Nhbm5lZCk7Ci0KLQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwotCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKLQkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgewotCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKLQkJCQkgKiBiaWdnZXIgYnVmZmVyICovCi0JCQkJZXJyID0gLUUyQklHOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCi0Jc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKLQlzcnEtPmZsYWdzID0gKF9fdTE2KSBwcml2LT5zY2FuX21vZGU7Ci0KLW91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIENvbW1pdCBoYW5kbGVyLCBjYWxsZWQgYWZ0ZXIgc2V0IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXZvaWQgKndycXUsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcHJpdi0+b3BlbikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7Ci0JCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBkaXNhYmxlIHBvcnQgIgotCQkgICAgICAgIndoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwgZGV2LT5uYW1lKTsKLQkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWNvbmZpZ3VyZSBjYXJkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHBvcnQgd2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0gb3V0OgotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc2V0dGluZyBpbnN0ZWFkLi4uXG4iLCBkZXYtPm5hbWUpOwotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQkJZXJyID0gMDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIG9yaW5vY29fcHJpdnRhYltdID0gewotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgwLCAwLCAwLCAiZm9yY2VfcmVzZXQiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDEsIDAsIDAsICJjYXJkX3Jlc2V0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgyLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgIDAsICJzZXRfcG9ydDMiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDMsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgImdldF9wb3J0MyIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAwLCAic2V0X3ByZWFtYmxlIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg1LCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgICJnZXRfcHJlYW1ibGUiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDYsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgMCwgInNldF9pYnNzcG9ydCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NywgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAiZ2V0X2lic3Nwb3J0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg5LCAwLCBJV19QUklWX1RZUEVfQllURSB8IE1BWF9SSURfTEVOLAotCSAgImdldF9yaWQiIH0sCi19OwotCi0KLS8qCi0gKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKLSAqLwotCi0jZGVmaW5lIFNURF9JV19IQU5ETEVSKGlkLCBmdW5jKSBcCi0JW0lXX0lPQ1RMX0lEWChpZCldID0gKGl3X2hhbmRsZXIpIGZ1bmMKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29faGFuZGxlcltdID0gewotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdDT01NSVQsCW9yaW5vY29faW9jdGxfY29tbWl0KSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTkFNRSwJb3Jpbm9jb19pb2N0bF9nZXRuYW1lKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9zZXRmcmVxKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9nZXRmcmVxKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9zZXRtb2RlKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9nZXRtb2RlKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXU0VOUywJb3Jpbm9jb19pb2N0bF9zZXRzZW5zKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU0VOUywJb3Jpbm9jb19pb2N0bF9nZXRzZW5zKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUkFOR0UsCW9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NQWSwJaXdfaGFuZGxlcl9zZXRfc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU1BZLAlpd19oYW5kbGVyX2dldF9zcHkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdUSFJTUFksCWl3X2hhbmRsZXJfc2V0X3RocnNweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1RIUlNQWSwJaXdfaGFuZGxlcl9nZXRfdGhyc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXQVAsCW9yaW5vY29faW9jdGxfc2V0d2FwKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXQVAsCW9yaW5vY29faW9jdGxfZ2V0d2FwKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9zZXRzY2FuKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9nZXRzY2FuKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRVNTSUQsCW9yaW5vY29faW9jdGxfc2V0ZXNzaWQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9nZXRlc3NpZCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV05JQ0tOLAlvcmlub2NvX2lvY3RsX3NldG5pY2spLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9nZXRuaWNrKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXUkFURSwJb3Jpbm9jb19pb2N0bF9zZXRyYXRlKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUkFURSwJb3Jpbm9jb19pb2N0bF9nZXRyYXRlKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXUlRTLAlvcmlub2NvX2lvY3RsX3NldHJ0cyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JUUywJb3Jpbm9jb19pb2N0bF9nZXRydHMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkFHLAlvcmlub2NvX2lvY3RsX3NldGZyYWcpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkFHLAlvcmlub2NvX2lvY3RsX2dldGZyYWcpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSRVRSWSwJb3Jpbm9jb19pb2N0bF9nZXRyZXRyeSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1BPV0VSLAlvcmlub2NvX2lvY3RsX3NldHBvd2VyKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUE9XRVIsCW9yaW5vY29faW9jdGxfZ2V0cG93ZXIpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNTE1FLAlvcmlub2NvX2lvY3RsX3NldF9tbG1lKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXQVVUSCwJb3Jpbm9jb19pb2N0bF9zZXRfYXV0aCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FVVEgsCW9yaW5vY29faW9jdGxfZ2V0X2F1dGgpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERUVYVCwgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KSwKLX07Ci0KLQotLyoKLSAgQWRkZWQgdHlwZWNhc3Rpbmcgc2luY2Ugd2Ugbm8gbG9uZ2VyIHVzZSBpd3JlcV9kYXRhIC0tIE1vdXN0YWZhCi0gKi8KLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyW10gPSB7Ci0JWzBdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCi0JWzFdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCi0JWzJdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cG9ydDMsCi0JWzNdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cG9ydDMsCi0JWzRdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUsCi0JWzVdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUsCi0JWzZdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0aWJzc3BvcnQsCi0JWzddID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQsCi0JWzldID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cmlkLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKG9yaW5vY29faGFuZGxlciksCi0JLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZhdGVfaGFuZGxlciksCi0JLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdnRhYiksCi0JLnN0YW5kYXJkID0gb3Jpbm9jb19oYW5kbGVyLAotCS5wcml2YXRlID0gb3Jpbm9jb19wcml2YXRlX2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncyA9IG9yaW5vY29fcHJpdnRhYiwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMsCi19OwotCi1zdGF0aWMgdm9pZCBvcmlub2NvX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikgLSAxKTsKLQlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikgLSAxKTsKLQlzdHJuY3B5KGluZm8tPmZ3X3ZlcnNpb24sIHByaXYtPmZ3X25hbWUsIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSAtIDEpOwotCWlmIChkZXYtPmRldi5wYXJlbnQpCi0JCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCi0JCQlzaXplb2YoaW5mby0+YnVzX2luZm8pIC0gMSk7Ci0JZWxzZQotCQlzbnByaW50ZihpbmZvLT5idXNfaW5mbywgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEsCi0JCQkgIlBDTUNJQSAlcCIsIHByaXYtPmh3LmlvYmFzZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8gPSBvcmlub2NvX2dldF9kcnZpbmZvLAotCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLUVYUE9SVF9TWU1CT0woYWxsb2Nfb3Jpbm9jb2Rldik7Ci1FWFBPUlRfU1lNQk9MKGZyZWVfb3Jpbm9jb2Rldik7Ci0KLUVYUE9SVF9TWU1CT0woX19vcmlub2NvX3VwKTsKLUVYUE9SVF9TWU1CT0woX19vcmlub2NvX2Rvd24pOwotRVhQT1JUX1NZTUJPTChvcmlub2NvX3JlaW5pdF9maXJtd2FyZSk7Ci0KLUVYUE9SVF9TWU1CT0wob3Jpbm9jb19pbnRlcnJ1cHQpOwotCi0vKiBDYW4ndCBiZSBkZWNsYXJlZCAiY29uc3QiIG9yIHRoZSB3aG9sZSBfX2luaXRkYXRhIHNlY3Rpb24gd2lsbAotICogYmVjb21lIGNvbnN0ICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9IERSSVZFUl9OQU1FICIgIiBEUklWRVJfVkVSU0lPTgotCSIgKERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4sICIKLQkiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4sIGV0IGFsKSI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfb3Jpbm9jbyh2b2lkKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgdmVyc2lvbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X29yaW5vY28odm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9vcmlub2NvKTsKLW1vZHVsZV9leGl0KGV4aXRfb3Jpbm9jbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oCmluZGV4IDAwNzUwYzguLjhlNWE3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oCkBAIC0xLDUgKzEsNSBAQAogLyogb3Jpbm9jby5oCi0gKiAKKyAqCiAgKiBDb21tb24gZGVmaW5pdGlvbnMgdG8gYWxsIHBpZWNlcyBvZiB0aGUgdmFyaW91cyBvcmlub2NvCiAgKiBkcml2ZXJzCiAgKi8KQEAgLTE4LDkgKzE4LDkgQEAKICNpbmNsdWRlICJoZXJtZXMuaCIKIAogLyogVG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzICovCi0vLyNkZWZpbmUgT1JJTk9DT19ERUJVRwkJMworLyojZGVmaW5lIE9SSU5PQ09fREVCVUcJCTMqLwogCi0jZGVmaW5lIFdJUkVMRVNTX1NQWQkJLy8gZW5hYmxlIGl3c3B5IHN1cHBvcnQKKyNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBlbmFibGUgaXdzcHkgc3VwcG9ydCAqLwogCiAjZGVmaW5lIE1BWF9TQ0FOX0xFTgkJNDA5NgogCkBAIC01OSwxNCArNTksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvcjsKLQotc3RydWN0IG9yaW5vY29fcnhfZGF0YSB7Ci0Jc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQogc3RydWN0IGZpcm13YXJlOwogCiBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlIHsKQEAgLTgzLDcgKzc1LDYgQEAKIAkvKiBJbnRlcnJ1cHQgdGFza2xldHMgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X2xpc3Q7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YTsKIAogCS8qIGRyaXZlciBzdGF0ZSAqLwogCWludCBvcGVuOwpAQCAtMTMwLDcgKzEyMSw3IEBACiAJdTE2IGVuY29kZV9hbGcsIHdlcF9yZXN0cmljdCwgdHhfa2V5OwogCXN0cnVjdCBvcmlub2NvX2tleSBrZXlzW09SSU5PQ09fTUFYX0tFWVNdOwogCWludCBiaXRyYXRlbW9kZTsKLSAJY2hhciBuaWNrW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCWNoYXIgbmlja1tJV19FU1NJRF9NQVhfU0laRSsxXTsKIAljaGFyIGRlc2lyZWRfZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CiAJY2hhciBkZXNpcmVkX2Jzc2lkW0VUSF9BTEVOXTsKIAlpbnQgYnNzaWRfZml4ZWQ7CkBAIC0xNDAsNyArMTMxLDcgQEAKIAl1MTYgcG1fb24sIHBtX21jYXN0LCBwbV9wZXJpb2QsIHBtX3RpbWVvdXQ7CiAJdTE2IHByZWFtYmxlOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotIAlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7IC8qIGl3c3B5IHN1cHBvcnQgKi8KKwlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7IC8qIGl3c3B5IHN1cHBvcnQgKi8KIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEJd2lyZWxlc3NfZGF0YTsKICNlbmRpZgogCkBAIC0xNjgsMTYgKzE1OSwyMSBAQAogCXVuc2lnbmVkIGludCB0a2lwX2NtX2FjdGl2ZToxOwogCXVuc2lnbmVkIGludCBrZXlfbWdtdDozOwogCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQogCS8qIENhY2hlZCBpbiBtZW1vcnkgZmlybXdhcmUgdG8gdXNlIGR1cmluZyAtPnJlc3VtZS4gKi8KIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmNhY2hlZF9wcmlfZnc7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpjYWNoZWRfZnc7CisjZW5kaWYKIAogCXN0cnVjdCBub3RpZmllcl9ibG9jayBwbV9ub3RpZmllcjsKIH07CiAKICNpZmRlZiBPUklOT0NPX0RFQlVHCiBleHRlcm4gaW50IG9yaW5vY29fZGVidWc7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGRvIHsgaWYgKG9yaW5vY29fZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgfSB3aGlsZSgwKQorI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IFwKKwlpZiAob3Jpbm9jb19kZWJ1ZyA+IChuKSkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgXAorfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgkvKiBPUklOT0NPX0RFQlVHICovCkBAIC0xOTQsNyArMTkwLDcgQEAKIGV4dGVybiBpbnQgX19vcmlub2NvX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBfX29yaW5vY29fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqIGRldl9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYwppbmRleCAwYjMyMjE1Li5iMzgxYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYwpAQCAtNiw4ICs2LDggQEAKICAqIEl0IHNob3VsZCBhbHNvIGJlIHVzYWJsZSBvbiB2YXJpb3VzIFByaXNtIElJIGJhc2VkIGNhcmRzIHN1Y2ggYXMgdGhlCiAgKiBMaW5rc3lzLCBELUxpbmsgYW5kIEZhcmFsbG9uIFNreWxpbmUuIEl0IHNob3VsZCBhbHNvIHdvcmsgb24gU3ltYm9sCiAgKiBjYXJkcyBzdWNoIGFzIHRoZSAzQ29tIEFpckNvbm5lY3QgYW5kIEVyaWNzc29uIFdMQU4uCi0gKiAKLSAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgb3Jpbm9jby5jCisgKgorICogQ29weXJpZ2h0IG5vdGljZSAmIHJlbGVhc2Ugbm90ZXMgaW4gZmlsZSBtYWluLmMKICAqLwogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvX2NzIgpAQCAtMzAsNyArMzAsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUENNQ0lBIEx1Y2VudCBPcmlub2NvLCBQcmlzbSBJSSBiYXNlZCBhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBDTUNJQSBMdWNlbnQgT3Jpbm9jbywiCisJCSAgICIgUHJpc20gSUkgYmFzZWQgYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KQEAgLTUzLDggKzU0LDggQEAKIAogCS8qIFVzZWQgdG8gaGFuZGxlIGhhcmQgcmVzZXQgKi8KIAkvKiB5dWNrLCB3ZSBuZWVkIHRoaXMgaGFjayB0byB3b3JrIGFyb3VuZCB0aGUgaW5zYW5pdHkgb2YgdGhlCi0gICAgICAgICAqIFBDTUNJQSBsYXllciAqLwotCXVuc2lnbmVkIGxvbmcgaGFyZF9yZXNldF9pbl9wcm9ncmVzczsgCisJICogUENNQ0lBIGxheWVyICovCisJdW5zaWduZWQgbG9uZyBoYXJkX3Jlc2V0X2luX3Byb2dyZXNzOwogfTsKIAogCkBAIC05OCw3ICs5OSw3IEBACiAgKiBUaGlzIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nIGxvY2FsIGRhdGEKICAqIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCBDYXJkCiAgKiBTZXJ2aWNlcy4KLSAqIAorICoKICAqIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogICogY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEgY2FyZAogICogaW5zZXJ0aW9uIGV2ZW50LiAgKi8KQEAgLTExMSw3ICsxMTIsNyBAQAogCiAJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCSAgICAgICBvcmlub2NvX2NzX2hhcmRfcmVzZXQsIE5VTEwpOwotCWlmICghIGRldikKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7CkBAIC0xMjQsNyArMTI1LDcgQEAKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBvcmlub2NvX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7IAorCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICogY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yCkBAIC0xNjIsOCArMTYzLDEwIEBACiAgKi8KIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBkbyB7IFwKLQkJbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IFwKLQl9IHdoaWxlICgwKQorCWxhc3RfZm4gPSAoZm4pOyBcCisJaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBcCisJCWdvdG8gY3NfZmFpbGVkOyBcCit9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50IG9yaW5vY29fY3NfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCkBAIC0zMDcsOCArMzEwLDggQEAKIAkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4gKi8KIAlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKIAlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KKwkJCQkgICAgICAgKiB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCisJCQkJICAgICAgICogbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAKIAkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgpAQCAtMzU5LDcgKzM2Miw3IEBACiAJLyogVGhpcyBpcyBwcm9iYWJseSByYWN5LCBidXQgSSBjYW4ndCB0aGluayBvZgogCSAgIGEgYmV0dGVyIHdheSwgc2hvcnQgb2YgcmV3cml0aW5nIHRoZSBQQ01DSUEKIAkgICBsYXllciB0byBub3Qgc3VjayA6LSggKi8KLQlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKKwlpZiAoIXRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CkBAIC0zODQsNyArMzg3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CisJaWYgKCF0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLApAQCAtMzk3LDcgKzQwMCw3IEBACiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKIAotCQlpZiAocHJpdi0+b3BlbiAmJiAhIHByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CisJCWlmIChwcml2LT5vcGVuICYmICFwcml2LT5od191bmF2YWlsYWJsZSkgewogCQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CiAJCQlpZiAoZXJyKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYwppbmRleCAyZmM4NjU5Li5iMDE3MjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCkBAIC05LDEyICs5LDEyIEBACiAgKgogICogU29tZSBvZiB0aGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBvcmlub2NvX3BseC5jCiAgKglDb3B5cmlnaHQgKEMpIDIwMDEgRGFuaWVsIEJhcmxvdwotICogU29tZSBvZiB0aGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBvcmlub2NvX3BjaS5jIAorICogU29tZSBvZiB0aGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBvcmlub2NvX3BjaS5jCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEplYW4gVG91cnJpbGhlcwogICogU29tZSBvZiB0aGlzIGNvZGUgaXMgImluc3BpcmVkIiBieSBsaW51eC13bGFuLW5nLTAuMS4xMCwgYnV0IG5vdGhpbmcKICAqIGhhcyBiZWVuIGNvcGllZCBmcm9tIGl0LiBsaW51eC13bGFuLW5nLTAuMS4xMCBpcyBvcmlnaW5hbGx5IDoKICAqCUNvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCiAgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQpAQCAtMTAzLDkgKzEwMyw4IEBACiAJaW93cml0ZTE2KDB4OCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CiAJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAkJbWRlbGF5KDMwKTsKLQkJaWYgKGlvcmVhZDE2KGNhcmQtPmJyaWRnZV9pbykgJiAweDEwKSB7CisJCWlmIChpb3JlYWQxNihjYXJkLT5icmlkZ2VfaW8pICYgMHgxMCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCWlmIChpID09IDMwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJyZzEgdGltZWQgb3V0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwppbmRleCA0ZWJkNjM4Li43OGNhZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyogb3Jpbm9jb19wY2kuYwotICogCisgKgogICogRHJpdmVyIGZvciBQcmlzbSAyLjUvMyBkZXZpY2VzIHRoYXQgaGF2ZSBhIGRpcmVjdCBQQ0kgaW50ZXJmYWNlCiAgKiAoaS5lLiB0aGVzZSBhcmUgbm90IFBDTUNJQSBjYXJkcyBpbiBhIFBDTUNJQS10by1QQ0kgYnJpZGdlKS4KICAqIFRoZSBjYXJkIGNvbnRhaW5zIG9ubHkgb25lIFBDSSByZWdpb24sIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgdXN1YWwKQEAgLTIzNyw3ICsyMzcsOCBAQAogCSIgKFBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LCIKIAkiIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4gJiIKIAkiIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4pIjsKLU1PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOworTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4gJiIKKwkgICAgICAiIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB3aXJlbGVzcyBMQU4gY2FyZHMgdXNpbmcgZGlyZWN0IFBDSSBpbnRlcmZhY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCmluZGV4IGY0ZTVlMDYuLmM2NTViNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qIG9yaW5vY29fcGNpLmgKLSAqIAorICoKICAqIENvbW1vbiBjb2RlIGZvciBhbGwgT3Jpbm9jbyBkcml2ZXJzIGZvciBQQ0kgZGV2aWNlcywgaW5jbHVkaW5nCiAgKiBib3RoIG5hdGl2ZSBQQ0kgYW5kIFBDTUNJQS10by1QQ0kgYnJpZGdlcy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIFBhdmVsIFJvc2tpbi4KLSAqIFNlZSBvcmlub2NvLmMgZm9yIGxpY2Vuc2UuCisgKiBTZWUgbWFpbi5jIGZvciBsaWNlbnNlLgogICovCiAKICNpZm5kZWYgX09SSU5PQ09fUENJX0gKQEAgLTM3LDExICszNywxMSBAQAogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBlcnJvciAlZCBicmluZ2luZyBpbnRlcmZhY2UgZG93biAiCiAJCSAgICAgICAiZm9yIHN1c3BlbmRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkKKwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7Ci0JCisKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwpAQCAtOTAsMTMgKzkwLDEzIEBACiAKIAlwcml2LT5od191bmF2YWlsYWJsZS0tOwogCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CisJaWYgKHByaXYtPm9wZW4gJiYgKCFwcml2LT5od191bmF2YWlsYWJsZSkpIHsKIAkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CiAJCWlmIChlcnIpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmQgb24gcmVzdW1lXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKIAl9Ci0JCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwppbmRleCBlZjc2MTg1Li5hMmE0NDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCkBAIC0xNDYsOSArMTQ2LDggQEAKIAl9OwogCiAJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVM6ICIpOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCXByaW50aygiJTAyWDoiLCBpb3JlYWQ4KGNhcmQtPmF0dHJfaW8gKyAoaSA8PCAxKSkpOwotCX0KIAlwcmludGsoIlxuIik7CiAKIAkvKiBWZXJpZnkgd2hldGhlciBhIHN1cHBvcnRlZCBQQyBjYXJkIGlzIHByZXNlbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwppbmRleCBlZGUyNGVjLi5jZGEwZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCkBAIC0xLDcgKzEsNyBAQAogLyogb3Jpbm9jb190bWQuYwogICoKICAqIERyaXZlciBmb3IgUHJpc20gSUkgZGV2aWNlcyB3aGljaCB3b3VsZCB1c3VhbGx5IGJlIGRyaXZlbiBieSBvcmlub2NvX2NzLAotICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBUTUQ3MTYwLiAKKyAqIGJ1dCBhcmUgY29ubmVjdGVkIHRvIHRoZSBQQ0kgYnVzIGJ5IGEgVE1ENzE2MC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSm9lcmcgRG9yY2hhaW4gPGpvZXJnIEFUIGRvcmNoYWluLm5ldD4KICAqIGJhc2VkIGhlYXZpbHkgdXBvbiBvcmlub2NvX3BseC5jIENvcHlyaWdodCAoQykgMjAwMSBEYW5pZWwgQmFybG93CkBAIC0yNyw3ICsyNyw3IEBACiAgKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCiAgKgotICogVGhlIGFjdHVhbCBkcml2aW5nIGlzIGRvbmUgYnkgb3Jpbm9jby5jLCB0aGlzIGlzIGp1c3QgcmVzb3VyY2UKKyAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG1haW4uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCiAgKiBhbGxvY2F0aW9uIHN0dWZmLgogICoKICAqIFRoaXMgZHJpdmVyIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIG9yaW5vY29fcGx4IGRyaXZlci4gVGhlIG1haW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNjk5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jCkBAIC0wLDAgKzEsMjMzIEBACisvKiBIZWxwZXJzIGZvciBtYW5hZ2luZyBzY2FuIHF1ZXVlcworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAic2Nhbi5oIgorCisjZGVmaW5lIE9SSU5PQ09fTUFYX0JTU19DT1VOVAk2NAorCisjZGVmaW5lIFBSSVZfQlNTCSgoc3RydWN0IGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKKyNkZWZpbmUgUFJJVl9YQlNTCSgoc3RydWN0IHhic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCisKK2ludCBvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPmJzc194YnNzX2RhdGEpCisJCXJldHVybiAwOworCisJaWYgKHByaXYtPmhhc19leHRfc2NhbikKKwkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB4YnNzX2VsZW1lbnQpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwllbHNlCisJCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYnNzX2VsZW1lbnQpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdi0+YnNzX3hic3NfZGF0YSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYmVhY29ucyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJa2ZyZWUocHJpdi0+YnNzX3hic3NfZGF0YSk7CisJcHJpdi0+YnNzX3hic3NfZGF0YSA9IE5VTEw7Cit9CisKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaW50IGk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19saXN0KTsKKwlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQorCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCisJCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9YQlNTW2ldLmxpc3QpLAorCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKKwllbHNlCisJCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKKwkJCWxpc3RfYWRkX3RhaWwoJihQUklWX0JTU1tpXS5saXN0KSwKKwkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisKK30KKwordm9pZCBvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCXVuc2lnbmVkIGxvbmcgc2Nhbl9hZ2UpCit7CisJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7CisJCXN0cnVjdCB4YnNzX2VsZW1lbnQgKnRtcF9ic3M7CisKKwkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoIXNjYW5fYWdlIHx8CisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgeworCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCisJCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLworCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOworCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKnRtcF9ic3M7CisKKwkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoIXNjYW5fYWdlIHx8CisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgeworCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCisJCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLworCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOworCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmF0b20pCit7CisJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKKwlpbnQgZm91bmQgPSAwOworCisJLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYnNzaWQsIGF0b20tPmJzc2lkKSkKKwkJCWNvbnRpbnVlOworCQkvKiBFU1NJRCBsZW5ndGhzICovCisJCWlmIChic3MtPmJzcy5kYXRhWzFdICE9IGF0b20tPmRhdGFbMV0pCisJCQljb250aW51ZTsKKwkJaWYgKG1lbWNtcCgmYnNzLT5ic3MuZGF0YVsyXSwgJmF0b20tPmRhdGFbMl0sCisJCQkgICBhdG9tLT5kYXRhWzFdKSkKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IDE7CisJCWJyZWFrOworCX0KKworCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KKwlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgeworCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKKwkJCQkgc3RydWN0IHhic3NfZWxlbWVudCwgbGlzdCk7CisJCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOworCX0KKworCWlmIChic3MpIHsKKwkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KKwkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7CisJCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKKwl9Cit9CisKK2ludCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbikKK3sKKwlpbnQJCQlvZmZzZXQ7CQkvKiBJbiB0aGUgc2NhbiBkYXRhICovCisJdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYXRvbTsKKwlpbnQJCQlhdG9tX2xlbjsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJYXRvbV9sZW4gPSBzaXplb2Yoc3RydWN0IGFnZXJlX3NjYW5fYXBpbmZvKTsKKwkJb2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJLyogTGFjayBvZiBkb2N1bWVudGF0aW9uIG5lY2Vzc2l0YXRlcyB0aGlzIGhhY2suCisJCSAqIERpZmZlcmVudCBmaXJtd2FyZXMgaGF2ZSA2OCBvciA3NiBieXRlIGxvbmcgYXRvbXMuCisJCSAqIFdlIHRyeSBtb2R1bG8gZmlyc3QuICBJZiB0aGUgbGVuZ3RoIGRpdmlkZXMgYnkgYm90aCwKKwkJICogd2UgY2hlY2sgd2hhdCB3b3VsZCBiZSB0aGUgY2hhbm5lbCBpbiB0aGUgc2Vjb25kCisJCSAqIGZyYW1lIGZvciBhIDY4LWJ5dGUgYXRvbS4gIDc2LWJ5dGUgYXRvbXMgaGF2ZSAwIHRoZXJlLgorCQkgKiBWYWxpZCBjaGFubmVsIGNhbm5vdCBiZSAwLiAgKi8KKwkJaWYgKGxlbiAlIDc2KQorCQkJYXRvbV9sZW4gPSA2ODsKKwkJZWxzZSBpZiAobGVuICUgNjgpCisJCQlhdG9tX2xlbiA9IDc2OworCQllbHNlIGlmIChsZW4gPj0gMTI5MiAmJiBidWZbNjhdID09IDApCisJCQlhdG9tX2xlbiA9IDc2OworCQllbHNlCisJCQlhdG9tX2xlbiA9IDY4OworCQlvZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCW9mZnNldCA9IDQ7CisJCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKKwkJCWF0b21fbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilidWYpOworCQkJLyogU2FuaXR5IGNoZWNrIGZvciBhdG9tX2xlbiAqLworCQkJaWYgKGF0b21fbGVuIDwgc2l6ZW9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBhdG9tX2xlbiBpbiBzY2FuICIKKwkJCQkgICAgICAgImRhdGE6ICVkXG4iLCBwcml2LT5uZGV2LT5uYW1lLAorCQkJCSAgICAgICBhdG9tX2xlbik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0gZWxzZQorCQkJYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIENoZWNrIHRoYXQgd2UgZ290IGFuIHdob2xlIG51bWJlciBvZiBhdG9tcyAqLworCWlmICgobGVuIC0gb2Zmc2V0KSAlIGF0b21fbGVuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgc2NhbiBkYXRhIGxlbmd0aCAlZCwgIgorCQkgICAgICAgImF0b21fbGVuICVkLCBvZmZzZXQgJWRcbiIsIHByaXYtPm5kZXYtPm5hbWUsIGxlbiwKKwkJICAgICAgIGF0b21fbGVuLCBvZmZzZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCBtc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7CisKKwkvKiBSZWFkIHRoZSBlbnRyaWVzIG9uZSBieSBvbmUgKi8KKwlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKKwkJaW50IGZvdW5kID0gMDsKKwkJc3RydWN0IGJzc19lbGVtZW50ICpic3MgPSBOVUxMOworCisJCS8qIEdldCBuZXh0IGF0b20gKi8KKwkJYXRvbSA9ICh1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICopIChidWYgKyBvZmZzZXQpOworCisJCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYS5ic3NpZCwgYXRvbS0+YS5ic3NpZCkpCisJCQkJY29udGludWU7CisJCQlpZiAobGUxNl90b19jcHUoYnNzLT5ic3MuYS5lc3NpZF9sZW4pICE9CisJCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpCisJCQkJY29udGludWU7CisJCQlpZiAobWVtY21wKGJzcy0+YnNzLmEuZXNzaWQsIGF0b20tPmEuZXNzaWQsCisJCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpKQorCQkJCWNvbnRpbnVlOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCisJCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7CisJCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKKwkJCQkJIHN0cnVjdCBic3NfZWxlbWVudCwgbGlzdCk7CisJCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOworCisJCQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7CisJCX0KKworCQlpZiAoYnNzKSB7CisJCQkvKiBBbHdheXMgdXBkYXRlIHRoZSBCU1MgdG8gZ2V0IGxhdGVzdCBiZWFjb24gaW5mbyAqLworCQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7CisJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxOWY3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIEhlbHBlcnMgZm9yIG1hbmFnaW5nIHNjYW4gcXVldWVzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fU0NBTl9IXworI2RlZmluZSBfT1JJTk9DT19TQ0FOX0hfCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOworc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm87CisKKy8qIFNldHVwIGFuZCBmcmVlIG1lbW9yeSBmb3Igc2NhbiByZXN1bHRzICovCitpbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwordm9pZCBvcmlub2NvX2Jzc19kYXRhX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CisKKy8qIEFkZCBzY2FuIHJlc3VsdHMgKi8KK3ZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKTsKK2ludCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKmRldiwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKTsKKworLyogQ2xlYXIgc2NhbiByZXN1bHRzICovCit2b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJdW5zaWduZWQgbG9uZyBzY2FuX2FnZSk7CisKKworI2VuZGlmIC8qIF9PUklOT0NPX1NDQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwppbmRleCBiMmNhMmUzLi4zOGU1MTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCkBAIC00LDcgKzQsNyBAQAogICogQ29tbXVuaWNhdGlvbnMgYW5kIEludGVsIFBSTy9XaXJlbGVzcyAyMDExQi4KICAqCiAgKiBUaGUgZHJpdmVyIGltcGxlbWVudHMgU3ltYm9sIGZpcm13YXJlIGRvd25sb2FkLiAgVGhlIHJlc3QgaXMgaGFuZGxlZAotICogaW4gaGVybWVzLmMgYW5kIG9yaW5vY28uYy4KKyAqIGluIGhlcm1lcy5jIGFuZCBtYWluLmMuCiAgKgogICogVXRpbGl0aWVzIGZvciBkb3dubG9hZGluZyB0aGUgU3ltYm9sIGZpcm13YXJlIGFyZSBhdmFpbGFibGUgYXQKICAqIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8KQEAgLTE1LDcgKzE1LDcgQEAKICAqIFBvcnRpb25zIGJhc2VkIG9uIFNwZWN0cnVtMjR0RG5sZC5jIGZyb20gb3JpZ2luYWwgc3BlY3RydW0yNCBkcml2ZXI6CiAgKiAJQ29weXJpZ2h0IChDKSBTeW1ib2wgVGVjaG5vbG9naWVzLgogICoKLSAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGZpbGUgb3Jpbm9jby5jLgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gZmlsZSBtYWluLmMuCiAgKi8KIAogI2RlZmluZSBEUklWRVJfTkFNRSAic3BlY3RydW1fY3MiCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1ZGVsYXkoMTAwMCk7CiAJcmV0dXJuIDA7CiAKLSAgICAgIGNzX2ZhaWxlZDoKK2NzX2ZhaWxlZDoKIAljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CkBAIC0xNzEsNyArMTcxLDcgQEAKICAqIFRoaXMgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcgbG9jYWwgZGF0YQogICogc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIENhcmQKICAqIFNlcnZpY2VzLgotICogCisgKgogICogVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgKiBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkCiAgKiBpbnNlcnRpb24gZXZlbnQuICAqLwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCSAgICAgICBzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0LAogCQkJICAgICAgIHNwZWN0cnVtX2NzX3N0b3BfZmlybXdhcmUpOwotCWlmICghIGRldikKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7CkBAIC0xOTgsNyArMTk4LDcgQEAKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBvcmlub2NvX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7IAorCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICogY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yCkBAIC0zNjcsOSArMzY3LDggQEAKIAljYXJkLT5ub2RlLm1ham9yID0gY2FyZC0+bm9kZS5taW5vciA9IDA7CiAKIAkvKiBSZXNldCBjYXJkICovCi0JaWYgKHNwZWN0cnVtX2NzX2hhcmRfcmVzZXQocHJpdikgIT0gMCkgeworCWlmIChzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0KHByaXYpICE9IDApCiAJCWdvdG8gZmFpbGVkOwotCX0KIAogCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCS8qIFRlbGwgdGhlIHN0YWNrIHdlIGV4aXN0ICovCkBAIC0zODIsOCArMzgxLDggQEAKIAkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4gKi8KIAlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKIAlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KKwkJCQkgICAgICAgKiB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCisJCQkJICAgICAgICogbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAKIAkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjA4MTQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKQEAgLTAsMCArMSwyMzI1IEBACisvKiBXaXJlbGVzcyBleHRlbnNpb25zIHN1cHBvcnQuCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJtaWMuaCIKKyNpbmNsdWRlICJzY2FuLmgiCisjaW5jbHVkZSAibWFpbi5oIgorCisjaW5jbHVkZSAid2V4dC5oIgorCisjZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKKworc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGdldF93aXJlbGVzc19zdGF0cygpIGNhbGxlZCB3aGlsZSBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsgLyogRklYTUU6IENhbiB3ZSBkbyBiZXR0ZXIgdGhhbiB0aGlzPyAqLworCX0KKworCS8qIElmIGJ1c3ksIHJldHVybiB0aGUgb2xkIHN0YXRzLiAgUmV0dXJuaW5nIE5VTEwgbWF5IGNhdXNlCisJICogdGhlIGludGVyZmFjZSB0byBkaXNhcHBlYXIgZnJvbSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIHdzdGF0czsKKworCS8qIFdlIGNhbid0IHJlYWxseSB3YWl0IGZvciB0aGUgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgdG8KKwkgKiBjb21wbGV0ZSwgc28gd2UganVzdCB1c2UgdGhlIHByZXZpb3VzIHJlc3VsdHMgYW5kIHRyaWdnZXIKKwkgKiBhIG5ldyB0YWxsaWVzIGlucXVpcnkgY29tbWFuZCBmb3IgbmV4dCB0aW1lIC0gSmVhbiBJSSAqLworCS8qIEZJWE1FOiBSZWFsbHkgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBpbnF1aXJ5IHRvIGNvbWUgYmFjayAtCisJICogYXMgaXQgaXMgdGhlIHN0YXRzIHdlIGdpdmUgZG9uJ3QgbWFrZSBhIHdob2xlIGxvdCBvZiBzZW5zZS4KKwkgKiBVbmZvcnR1bmF0ZWx5LCBpdCdzIG5vdCBjbGVhciBob3cgdG8gZG8gdGhhdCB3aXRoaW4gdGhlCisJICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcmFtZXdvcms6IEkgdGhpbmsgd2UncmUgaW4gdXNlcgorCSAqIGNvbnRleHQsIGJ1dCBhIGxvY2sgc2VlbXMgdG8gYmUgaGVsZCBieSB0aGUgdGltZSB3ZSBnZXQgaW4KKwkgKiBoZXJlIHNvIHdlJ3JlIG5vdCBzYWZlIHRvIHNsZWVwIGhlcmUuICovCisJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfVEFMTElFUyk7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCW1lbXNldCgmd3N0YXRzLT5xdWFsLCAwLCBzaXplb2Yod3N0YXRzLT5xdWFsKSk7CisJCS8qIElmIGEgc3B5IGFkZHJlc3MgaXMgZGVmaW5lZCwgd2UgcmVwb3J0IHN0YXRzIG9mIHRoZQorCQkgKiBmaXJzdCBzcHkgYWRkcmVzcyAtIEplYW4gSUkgKi8KKwkJaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKKwkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9CisJCQkJcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYgcXVhbCwgc2lnbmFsLCBub2lzZSwgdW51c2VkOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjcTsKKworCQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgSEVSTUVTX1JJRF9DT01NU1FVQUxJVFksICZjcSk7CisKKwkJaWYgKCFlcnIpIHsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gKGludClsZTE2X3RvX2NwdShjcS5xdWFsKTsKKwkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IChpbnQpbGUxNl90b19jcHUoY3Euc2lnbmFsKSAtIDB4OTU7CisJCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAoaW50KWxlMTZfdG9fY3B1KGNxLm5vaXNlKSAtIDB4OTU7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9CisJCQkJSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOworCQl9CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gd3N0YXRzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBXaXJlbGVzcyBleHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIGNoYXIgKm5hbWUsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBudW1yYXRlczsKKwlpbnQgZXJyOworCisJZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLCBOVUxMLCAwKTsKKworCWlmICghZXJyICYmIChudW1yYXRlcyA+IDIpKQorCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExYiIpOworCWVsc2UKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RhdGljIGNvbnN0IHU4IG9mZl9hZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggYW55X2FkZHJbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBFbmFibGUgYXV0b21hdGljIHJvYW1pbmcgLSBubyBzYW5pdHkgY2hlY2tzIGFyZSBuZWVkZWQgKi8KKwlpZiAobWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBvZmZfYWRkciwgRVRIX0FMRU4pID09IDAgfHwKKwkgICAgbWVtY21wKCZhcF9hZGRyLT5zYV9kYXRhLCBhbnlfYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwkJcHJpdi0+YnNzaWRfZml4ZWQgPSAwOworCQltZW1zZXQocHJpdi0+ZGVzaXJlZF9ic3NpZCwgMCwgRVRIX0FMRU4pOworCisJCS8qICJvZmYiIG1lYW5zIGtlZXAgZXhpc3RpbmcgY29ubmVjdGlvbiAqLworCQlpZiAoYXBfYWRkci0+c2FfZGF0YVswXSA9PSAwKSB7CisJCQlfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKKwkJCWVyciA9IDA7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTHVjZW50L0FnZXJlIGZpcm13YXJlIGRvZXNuJ3QgIgorCQkgICAgICAgInN1cHBvcnQgbWFudWFsIHJvYW1pbmdcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWFudWFsIHJvYW1pbmcgc3VwcG9ydGVkIG9ubHkgaW4gIgorCQkgICAgICAgIm1hbmFnZWQgbW9kZVxuIiwgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEludGVyc2lsIGZpcm13YXJlIGhhbmdzIHdpdGhvdXQgRGVzaXJlZCBFU1NJRCAqLworCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwgJiYKKwkgICAgc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERlc2lyZWQgRVNTSUQgbXVzdCBiZSBzZXQgZm9yICIKKwkJICAgICAgICJtYW51YWwgcm9hbWluZ1xuIiwgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEZpbmFsbHksIGVuYWJsZSBtYW51YWwgcm9hbWluZyAqLworCXByaXYtPmJzc2lkX2ZpeGVkID0gMTsKKwltZW1jcHkocHJpdi0+ZGVzaXJlZF9ic3NpZCwgJmFwX2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXR3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgYXBfYWRkci0+c2FfZGF0YSk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdTMyICptb2RlLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSAqbW9kZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAoKm1vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CisJCWlmICghcHJpdi0+aGFzX2lic3MgJiYgIXByaXYtPmhhc19wb3J0MykKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJYnJlYWs7CisKKwljYXNlIElXX01PREVfTU9OSVRPUjoKKwkJaWYgKHByaXYtPmJyb2tlbl9tb25pdG9yICYmICFmb3JjZV9tb25pdG9yKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTW9uaXRvciBtb2RlIHN1cHBvcnQgaXMgIgorCQkJICAgICAgICJidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7CisJCXByaXYtPml3X21vZGUgPSAqbW9kZTsKKwkJc2V0X3BvcnRfdHlwZShwcml2KTsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdTMyICptb2RlLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCSptb2RlID0gcHJpdi0+aXdfbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpycnEsCisJCQkJICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCWludCBudW1yYXRlczsKKwlpbnQgaSwgazsKKworCXJycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMjsKKworCS8qIFNldCBhdmFpbGFibGUgY2hhbm5lbHMvZnJlcXVlbmNpZXMgKi8KKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOworCWsgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgeworCQlpZiAocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgaSkpIHsKKwkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsKKwkJCXJhbmdlLT5mcmVxW2tdLm0gPSAoaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqCisJCQkJCSAgICAxMDAwMDApOworCQkJcmFuZ2UtPmZyZXFba10uZSA9IDE7CisJCQlrKys7CisJCX0KKworCQlpZiAoayA+PSBJV19NQVhfRlJFUVVFTkNJRVMpCisJCQlicmVhazsKKwl9CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7CisKKwlpZiAocHJpdi0+aGFzX3dlcCkgeworCQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE9SSU5PQ09fTUFYX0tFWVM7CisJCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gU01BTExfS0VZX1NJWkU7CisJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAxOworCisJCWlmIChwcml2LT5oYXNfYmlnX3dlcCkgeworCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSBMQVJHRV9LRVlfU0laRTsKKwkJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCQl9CisJfQorCisJaWYgKHByaXYtPmhhc193cGEpCisJCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX0NJUEhFUl9US0lQOworCisJaWYgKChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmICghU1BZX05VTUJFUihwcml2KSkpIHsKKwkJLyogUXVhbGl0eSBzdGF0cyBtZWFuaW5nbGVzcyBpbiBhZC1ob2MgbW9kZSAqLworCX0gZWxzZSB7CisJCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMHg4YiAtIDB4MmY7CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDB4MmYgLSAweDk1IC0gMTsKKwkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMHgyZiAtIDB4OTUgLSAxOworCQkvKiBOZWVkIHRvIGdldCBiZXR0ZXIgdmFsdWVzICovCisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMHgyNDsKKwkJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMHhDMjsKKwkJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMHg5RTsKKwl9CisKKwllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsCisJCQkJCSByYW5nZS0+Yml0cmF0ZSwgSVdfTUFYX0JJVFJBVEVTKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBudW1yYXRlczsKKworCS8qIFNldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBtYXggVENQIHRocm91Z2hwdXQgaW4gYml0L3MgdGhhdCB3ZSBjYW4KKwkgKiBleHBlY3QgdXNpbmcgdGhpcyBpbnRlcmZhY2UuIE1heSBiZSB1c2UgZm9yIFFvUyBzdHVmZi4uLgorCSAqIEplYW4gSUkgKi8KKwlpZiAobnVtcmF0ZXMgPiAyKQorCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsJLyogfjUgTWIvcyAqLworCWVsc2UKKwkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjUgKiAxMDAwICogMTAwMDsJLyogfjEuNSBNYi9zICovCisKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisJcmFuZ2UtPm1pbl9wbXAgPSAwOworCXJhbmdlLT5tYXhfcG1wID0gNjU1MzUwMDA7CisJcmFuZ2UtPm1pbl9wbXQgPSAwOworCXJhbmdlLT5tYXhfcG10ID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KKwlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOworCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOworCXJhbmdlLT5wbV9jYXBhID0gKElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfAorCQkJICBJV19QT1dFUl9VTklDQVNUX1IpOworCisJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xJRkVUSU1FOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yX3RpbWVfZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKKwlyYW5nZS0+bWluX3JldHJ5ID0gMDsKKwlyYW5nZS0+bWF4X3JldHJ5ID0gNjU1MzU7CS8qID8/PyAqLworCXJhbmdlLT5taW5fcl90aW1lID0gMDsKKwlyYW5nZS0+bWF4X3JfdGltZSA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCisKKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQorCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOworCWVsc2UKKwkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9OT05FOworCisJLyogRXZlbnQgY2FwYWJpbGl0eSAoa2VybmVsKSAqLworCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7CisJLyogRXZlbnQgY2FwYWJpbGl0eSAoZHJpdmVyKSAqLworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXVEhSU1BZKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBJV0VWVFhEUk9QKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgICAgIGNoYXIgKmtleWJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCWludCBzZXRpbmRleCA9IHByaXYtPnR4X2tleTsKKwlpbnQgZW5jb2RlX2FsZyA9IHByaXYtPmVuY29kZV9hbGc7CisJaW50IHJlc3RyaWN0ZWQgPSBwcml2LT53ZXBfcmVzdHJpY3Q7CisJdTE2IHhsZW4gPSAwOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3dlcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGVycS0+cG9pbnRlcikgeworCQkvKiBXZSBhY3R1YWxseSBoYXZlIGEga2V5IHRvIHNldCAtIGNoZWNrIGl0cyBsZW5ndGggKi8KKwkJaWYgKGVycS0+bGVuZ3RoID4gTEFSR0VfS0VZX1NJWkUpCisJCQlyZXR1cm4gLUUyQklHOworCisJCWlmICgoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkgJiYgIXByaXYtPmhhc19iaWdfd2VwKQorCQkJcmV0dXJuIC1FMkJJRzsKKwl9CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIENsZWFyIGFueSBUS0lQIGtleSB3ZSBoYXZlICovCisJaWYgKChwcml2LT5oYXNfd3BhKSAmJiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApKQorCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBzZXRpbmRleCk7CisKKwlpZiAoZXJxLT5sZW5ndGggPiAwKSB7CisJCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCisJCQlpbmRleCA9IHByaXYtPnR4X2tleTsKKworCQkvKiBBZGp1c3Qga2V5IGxlbmd0aCB0byBhIHN1cHBvcnRlZCB2YWx1ZSAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkKKwkJCXhsZW4gPSBMQVJHRV9LRVlfU0laRTsKKwkJZWxzZSBpZiAoZXJxLT5sZW5ndGggPiAwKQorCQkJeGxlbiA9IFNNQUxMX0tFWV9TSVpFOworCQllbHNlCisJCQl4bGVuID0gMDsKKworCQkvKiBTd2l0Y2ggb24gV0VQIGlmIG9mZiAqLworCQlpZiAoKGVuY29kZV9hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApICYmICh4bGVuID4gMCkpIHsKKwkJCXNldGluZGV4ID0gaW5kZXg7CisJCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19XRVA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBJbXBvcnRhbnQgbm90ZSA6IGlmIHRoZSB1c2VyIGRvICJpd2NvbmZpZyBldGgwIGVuYyBvZmYiLAorCQkgKiB3ZSB3aWxsIGFycml2ZSB0aGVyZSB3aXRoIGFuIGluZGV4IG9mIC0xLiBUaGlzIGlzIHZhbGlkCisJCSAqIGJ1dCBuZWVkIHRvIGJlIHRha2VuIGNhcmUgb2ZmLi4uIEplYW4gSUkgKi8KKwkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkgeworCQkJaWYgKChpbmRleCAhPSAtMSkgfHwgKGVycS0+ZmxhZ3MgPT0gMCkpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogU2V0IHRoZSBpbmRleCA6IENoZWNrIHRoYXQgdGhlIGtleSBpcyB2YWxpZCAqLworCQkJaWYgKHByaXYtPmtleXNbaW5kZXhdLmxlbiA9PSAwKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXNldGluZGV4ID0gaW5kZXg7CisJCX0KKwl9CisKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCQlyZXN0cmljdGVkID0gMDsKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQorCQlyZXN0cmljdGVkID0gMTsKKworCWlmIChlcnEtPnBvaW50ZXIgJiYgZXJxLT5sZW5ndGggPiAwKSB7CisJCXByaXYtPmtleXNbaW5kZXhdLmxlbiA9IGNwdV90b19sZTE2KHhsZW4pOworCQltZW1zZXQocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgMCwKKwkJICAgICAgIHNpemVvZihwcml2LT5rZXlzW2luZGV4XS5kYXRhKSk7CisJCW1lbWNweShwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBrZXlidWYsIGVycS0+bGVuZ3RoKTsKKwl9CisJcHJpdi0+dHhfa2V5ID0gc2V0aW5kZXg7CisKKwkvKiBUcnkgZmFzdCBrZXkgY2hhbmdlIGlmIGNvbm5lY3RlZCBhbmQgb25seSBrZXlzIGFyZSBjaGFuZ2VkICovCisJaWYgKChwcml2LT5lbmNvZGVfYWxnID09IGVuY29kZV9hbGcpICYmCisJICAgIChwcml2LT53ZXBfcmVzdHJpY3QgPT0gcmVzdHJpY3RlZCkgJiYKKwkgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOworCQkvKiBObyBuZWVkIHRvIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCisJCWdvdG8gb3V0OworCX0KKworCXByaXYtPmVuY29kZV9hbGcgPSBlbmNvZGVfYWxnOworCXByaXYtPndlcF9yZXN0cmljdCA9IHJlc3RyaWN0ZWQ7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgICAgY2hhciAqa2V5YnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJdTE2IHhsZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc193ZXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKKwkJaW5kZXggPSBwcml2LT50eF9rZXk7CisKKwllcnEtPmZsYWdzID0gMDsKKwlpZiAoIXByaXYtPmVuY29kZV9hbGcpCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWVycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOworCisJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CisKKwl4bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1tpbmRleF0ubGVuKTsKKworCWVycS0+bGVuZ3RoID0geGxlbjsKKworCW1lbWNweShrZXlidWYsIHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgY2hhciAqZXNzaWRidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE5vdGUgOiBFU1NJRCBpcyBpZ25vcmVkIGluIEFkLUhvYyBkZW1vIG1vZGUsIGJ1dCB3ZSBjYW4gc2V0IGl0CisJICogYW55d2F5Li4uIC0gSmVhbiBJSSAqLworCisJLyogSHVtLi4uIFNob3VsZCBub3QgdXNlIFdpcmVsZXNzIEV4dGVuc2lvbiBjb25zdGFudCAobWF5IGNoYW5nZSksCisJICogc2hvdWxkIHVzZSBvdXIgb3duLi4uIC0gSmVhbiBJSSAqLworCWlmIChlcnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQorCQlyZXR1cm4gLUUyQklHOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBOVUxMIHRoZSBzdHJpbmcgKGZvciBOVUxMIHRlcm1pbmF0aW9uICYgRVNTSUQgPSBBTlkpIC0gSmVhbiBJSSAqLworCW1lbXNldChwcml2LT5kZXNpcmVkX2Vzc2lkLCAwLCBzaXplb2YocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOworCisJLyogSWYgbm90IEFOWSwgZ2V0IHRoZSBuZXcgRVNTSUQgKi8KKwlpZiAoZXJxLT5mbGFncykKKwkJbWVtY3B5KHByaXYtPmRlc2lyZWRfZXNzaWQsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCisJCQkJICBjaGFyICplc3NpZGJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgYWN0aXZlOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHByaXYsICZhY3RpdmUsIGVzc2lkYnVmKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnEtPmxlbmd0aCA9IGVycjsKKwl9IGVsc2UgeworCQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJCXJldHVybiAtRUJVU1k7CisJCW1lbWNweShlc3NpZGJ1ZiwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCQllcnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKTsKKwkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwl9CisKKwllcnEtPmZsYWdzID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKKwkJCQkgY2hhciAqbmlja2J1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG5ycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCXJldHVybiAtRTJCSUc7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbXNldChwcml2LT5uaWNrLCAwLCBzaXplb2YocHJpdi0+bmljaykpOworCW1lbWNweShwcml2LT5uaWNrLCBuaWNrYnVmLCBucnEtPmxlbmd0aCk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCisJCQkJIGNoYXIgKm5pY2tidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtY3B5KG5pY2tidWYsIHByaXYtPm5pY2ssIElXX0VTU0lEX01BWF9TSVpFKTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJbnJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X2ZyZXEgKmZycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNoYW4gPSAtMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisKKwkvKiBJbiBpbmZyYXN0cnVjdHVyZSBtb2RlIHRoZSBBUCBzZXRzIHRoZSBjaGFubmVsICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICgoZnJxLT5lID09IDApICYmIChmcnEtPm0gPD0gMTAwMCkpIHsKKwkJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLworCQljaGFuID0gZnJxLT5tOworCX0gZWxzZSB7CisJCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5ICovCisJCWludCBkZW5vbSA9IDE7CisJCWludCBpOworCisJCS8qIENhbGN1bGF0ZSBkZW5vbWluYXRvciB0byByZXNjYWxlIHRvIE1IeiAqLworCQlmb3IgKGkgPSAwOyBpIDwgKDYgLSBmcnEtPmUpOyBpKyspCisJCQlkZW5vbSAqPSAxMDsKKworCQljaGFuID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGZycS0+bSAvIGRlbm9tKTsKKwl9CisKKwlpZiAoKGNoYW4gPCAxKSB8fCAoY2hhbiA+IE5VTV9DSEFOTkVMUykgfHwKKwkgICAgICEocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgKGNoYW4tMSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmNoYW5uZWwgPSBjaGFuOworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQkvKiBGYXN0IGNoYW5uZWwgY2hhbmdlIC0gbm8gY29tbWl0IGlmIHN1Y2Nlc3NmdWwgKi8KKwkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX1NFVF9DSEFOTkVMLAorCQkJCQljaGFuLCBOVUxMKTsKKwl9CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB0bXA7CisKKwkvKiBMb2NraW5nIGRvbmUgaW4gdGhlcmUgKi8KKwl0bXAgPSBvcmlub2NvX2h3X2dldF9mcmVxKHByaXYpOworCWlmICh0bXAgPCAwKQorCQlyZXR1cm4gdG1wOworCisJZnJxLT5tID0gdG1wICogMTAwMDAwOworCWZycS0+ZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwl1MTYgdmFsOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsICZ2YWwpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3JxLT52YWx1ZSA9IHZhbDsKKwlzcnEtPmZpeGVkID0gMDsgLyogYXV0byAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gc3JxLT52YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5oYXNfc2Vuc2l0aXZpdHkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICgodmFsIDwgMSkgfHwgKHZhbCA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCXByaXYtPmFwX2RlbnNpdHkgPSB2YWw7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSBycnEtPnZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocnJxLT5kaXNhYmxlZCkKKwkJdmFsID0gMjM0NzsKKworCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDIzNDcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJcHJpdi0+cnRzX3RocmVzaCA9IHZhbDsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlycnEtPnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaDsKKwlycnEtPmRpc2FibGVkID0gKHJycS0+dmFsdWUgPT0gMjM0Nyk7CisJcnJxLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPmhhc19td28pIHsKKwkJaWYgKGZycS0+ZGlzYWJsZWQpCisJCQlwcml2LT5td29fcm9idXN0ID0gMDsKKwkJZWxzZSB7CisJCQlpZiAoZnJxLT5maXhlZCkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRml4ZWQgZnJhZ21lbnRhdGlvbiAiCisJCQkJICAgICAgICJpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUuICIKKwkJCQkgICAgICAgIlVzaW5nIE1XTyByb2J1c3QgaW5zdGVhZC5cbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlwcml2LT5td29fcm9idXN0ID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChmcnEtPmRpc2FibGVkKQorCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSAyMzQ2OworCQllbHNlIHsKKwkJCWlmICgoZnJxLT52YWx1ZSA8IDI1NikgfHwgKGZycS0+dmFsdWUgPiAyMzQ2KSkKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJCS8qIG11c3QgYmUgZXZlbiAqLworCQkJCXByaXYtPmZyYWdfdGhyZXNoID0gZnJxLT52YWx1ZSAmIH4weDE7CisJCX0KKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXUxNiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPmhhc19td28pIHsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCisJCQkJCSAgJnZhbCk7CisJCWlmIChlcnIpCisJCQl2YWwgPSAwOworCisJCWZycS0+dmFsdWUgPSB2YWwgPyAyMzQ3IDogMDsKKwkJZnJxLT5kaXNhYmxlZCA9ICF2YWw7CisJCWZycS0+Zml4ZWQgPSAwOworCX0gZWxzZSB7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXZhbCA9IDA7CisKKwkJZnJxLT52YWx1ZSA9IHZhbDsKKwkJZnJxLT5kaXNhYmxlZCA9ICh2YWwgPj0gMjM0Nik7CisJCWZycS0+Zml4ZWQgPSAxOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJhdGVtb2RlOworCWludCBiaXRyYXRlOyAvKiAxMDBzIG9mIGtpbG9iaXRzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEFzIHRoZSB1c2VyIHNwYWNlIGRvZXNuJ3Qga25vdyBvdXIgaGlnaGVzdCByYXRlLCBpdCB1c2VzIC0xCisJICogdG8gYXNrIHVzIHRvIHNldCB0aGUgaGlnaGVzdCByYXRlLiAgVGVzdCBpdCB1c2luZyAiaXdjb25maWcKKwkgKiBldGhYIHJhdGUgYXV0byIgLSBKZWFuIElJICovCisJaWYgKHJycS0+dmFsdWUgPT0gLTEpCisJCWJpdHJhdGUgPSAxMTA7CisJZWxzZSB7CisJCWlmIChycnEtPnZhbHVlICUgMTAwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJpdHJhdGUgPSBycnEtPnZhbHVlIC8gMTAwMDAwOworCX0KKworCXJhdGVtb2RlID0gb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoYml0cmF0ZSwgIXJycS0+Zml4ZWQpOworCisJaWYgKHJhdGVtb2RlID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCXByaXYtPmJpdHJhdGVtb2RlID0gcmF0ZW1vZGU7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgYml0cmF0ZSwgYXV0b21hdGljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW9yaW5vY29fZ2V0X3JhdGVtb2RlX2NmZyhwcml2LT5iaXRyYXRlbW9kZSwgJmJpdHJhdGUsICZhdXRvbWF0aWMpOworCisJLyogSWYgdGhlIGludGVyZmFjZSBpcyBydW5uaW5nIHdlIHRyeSB0byBmaW5kIG1vcmUgYWJvdXQgdGhlCisJICAgY3VycmVudCBtb2RlICovCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZXJyID0gb3Jpbm9jb19od19nZXRfYWN0X2JpdHJhdGUocHJpdiwgJmJpdHJhdGUpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJycS0+dmFsdWUgPSBiaXRyYXRlOworCXJycS0+Zml4ZWQgPSAhYXV0b21hdGljOworCXJycS0+ZGlzYWJsZWQgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcnEtPmRpc2FibGVkKSB7CisJCXByaXYtPnBtX29uID0gMDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CisJCWNhc2UgSVdfUE9XRVJfVU5JQ0FTVF9SOgorCQkJcHJpdi0+cG1fbWNhc3QgPSAwOworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgSVdfUE9XRVJfQUxMX1I6CisJCQlwcml2LT5wbV9tY2FzdCA9IDE7CisJCQlwcml2LT5wbV9vbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJV19QT1dFUl9PTjoKKwkJCS8qIE5vIGZsYWdzIDogYnV0IHdlIG1heSBoYXZlIGEgdmFsdWUgLSBKZWFuIElJICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkgeworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJcHJpdi0+cG1fdGltZW91dCA9IHBycS0+dmFsdWUgLyAxMDAwOworCQl9CisJCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKSB7CisJCQlwcml2LT5wbV9vbiA9IDE7CisJCQlwcml2LT5wbV9wZXJpb2QgPSBwcnEtPnZhbHVlIC8gMTAwMDsKKwkJfQorCQkvKiBJdCdzIHZhbGlkIHRvIG5vdCBoYXZlIGEgdmFsdWUgaWYgd2UgYXJlIGp1c3QgdG9nZ2xpbmcKKwkJICogdGhlIGZsYWdzLi4uIEplYW4gSUkgKi8KKwkJaWYgKCFwcml2LT5wbV9vbikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgZW5hYmxlLCBwZXJpb2QsIHRpbWVvdXQsIG1jYXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsICZlbmFibGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sICZwZXJpb2QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwgJnRpbWVvdXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsICZtY2FzdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwcnEtPmRpc2FibGVkID0gIWVuYWJsZTsKKwkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcGVyaW9kICovCisJaWYgKChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVFlQRSkgPT0gSVdfUE9XRVJfVElNRU9VVCkgeworCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKKwkJcHJxLT52YWx1ZSA9IHRpbWVvdXQgKiAxMDAwOworCX0gZWxzZSB7CisJCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7CisJCXBycS0+dmFsdWUgPSBwZXJpb2QgKiAxMDAwOworCX0KKwlpZiAobWNhc3QpCisJCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfQUxMX1I7CisJZWxzZQorCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX1VOSUNBU1RfUjsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCQkgICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IC1FSU5WQUw7CisJdTE2IGtleV9sZW47CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIERldGVybWluZSBhbmQgdmFsaWRhdGUgdGhlIGtleSBpbmRleCAqLworCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpZiAoaWR4KSB7CisJCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQorCQkJZ290byBvdXQ7CisJCWlkeC0tOworCX0gZWxzZQorCQlpZHggPSBwcml2LT50eF9rZXk7CisKKwlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCQlhbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisKKwlpZiAocHJpdi0+aGFzX3dwYSAmJiAoYWxnICE9IElXX0VOQ09ERV9BTEdfVEtJUCkpIHsKKwkJLyogQ2xlYXIgYW55IFRLSVAgVFgga2V5IHdlIGhhZCAqLworCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBwcml2LT50eF9rZXkpOworCX0KKworCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgeworCQlwcml2LT50eF9rZXkgPSBpZHg7CisJCXNldF9rZXkgPSAoKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHx8CisJCQkgICAoZXh0LT5rZXlfbGVuID4gMCkpID8gMSA6IDA7CisJfQorCisJaWYgKHNldF9rZXkpIHsKKwkJLyogU2V0IHRoZSByZXF1ZXN0ZWQga2V5IGZpcnN0ICovCisJCXN3aXRjaCAoYWxnKSB7CisJCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgorCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKKwkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKKwkJCWlmIChleHQtPmtleV9sZW4gPiBTTUFMTF9LRVlfU0laRSkKKwkJCQlrZXlfbGVuID0gTEFSR0VfS0VZX1NJWkU7CisJCQllbHNlIGlmIChleHQtPmtleV9sZW4gPiAwKQorCQkJCWtleV9sZW4gPSBTTUFMTF9LRVlfU0laRTsKKwkJCWVsc2UKKwkJCQlnb3RvIG91dDsKKworCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKKwkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSBjcHVfdG9fbGUxNihrZXlfbGVuKTsKKworCQkJa2V5X2xlbiA9IG1pbihleHQtPmtleV9sZW4sIGtleV9sZW4pOworCisJCQltZW1zZXQocHJpdi0+a2V5c1tpZHhdLmRhdGEsIDAsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKKwkJCW1lbWNweShwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXksIGtleV9sZW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CisJCXsKKwkJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwkJCXU4ICp0a2lwX2l2ID0gTlVMTDsKKworCQkJaWYgKCFwcml2LT5oYXNfd3BhIHx8CisJCQkgICAgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihwcml2LT50a2lwX2tleVswXSkpKQorCQkJCWdvdG8gb3V0OworCisJCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOworCQkJbWVtc2V0KCZwcml2LT50a2lwX2tleVtpZHhdLCAwLAorCQkJICAgICAgIHNpemVvZihwcml2LT50a2lwX2tleVtpZHhdKSk7CisJCQltZW1jcHkoJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOworCisJCQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCkKKwkJCQl0a2lwX2l2ID0gJmV4dC0+cnhfc2VxWzBdOworCisJCQllcnIgPSBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGh3LCBpZHgsCisJCQkJIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZLAorCQkJCSAodTggKikgJnByaXYtPnRraXBfa2V5W2lkeF0sCisJCQkJIHRraXBfaXYsIE5VTEwpOworCQkJaWYgKGVycikKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFRLSVAga2V5IgorCQkJCSAgICAgICAiXG4iLCBkZXYtPm5hbWUsIGVycik7CisKKwkJCWdvdG8gb3V0OworCQl9CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwllcnIgPSAtRUlOUFJPR1JFU1M7Cisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJCSAgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKwlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IC1FSU5WQUw7CisJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmIChtYXhfa2V5X2xlbiA8IDApCisJCWdvdG8gb3V0OworCisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHgpIHsKKwkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCisJCQlnb3RvIG91dDsKKwkJaWR4LS07CisJfSBlbHNlCisJCWlkeCA9IHByaXYtPnR4X2tleTsKKworCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7CisJbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKKworCWV4dC0+YWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKKwlzd2l0Y2ggKHByaXYtPmVuY29kZV9hbGcpIHsKKwljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKKwkJZXh0LT5rZXlfbGVuID0gMDsKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKKwkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2lkeF0ubGVuKSwKKwkJCQkgICAgIG1heF9rZXlfbGVuKTsKKwkJbWVtY3B5KGV4dC0+a2V5LCBwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXlfbGVuKTsKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOworCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKKwkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBzaXplb2Yoc3RydWN0IG9yaW5vY29fdGtpcF9rZXkpLAorCQkJCSAgICAgbWF4X2tleV9sZW4pOworCQltZW1jcHkoZXh0LT5rZXksICZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleV9sZW4pOworCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJCWJyZWFrOworCX0KKworCWVyciA9IDA7Cisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOUFJPR1JFU1M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgorCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCS8qCisJCSAqIG9yaW5vY28gZG9lcyBub3QgdXNlIHRoZXNlIHBhcmFtZXRlcnMKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQkvKiB3bF9sa20gaW1wbGllcyB2YWx1ZSAyID09IFBTSyBmb3IgSGVybWVzIEkKKwkJICogd2hpY2ggdGllcyBpbiB3aXRoIFdFWFQKKwkJICogbm8gb3RoZXIgaGludHMgdGhvIDooCisJCSAqLworCQlwcml2LT5rZXlfbWdtdCA9IHBhcmFtLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCS8qIFdoZW4gY291bnRlcm1lYXN1cmVzIGFyZSBlbmFibGVkLCBzaHV0IGRvd24gdGhlCisJCSAqIGNhcmQ7IHdoZW4gZGlzYWJsZWQsIHJlLWVuYWJsZSB0aGUgY2FyZC4gVGhpcyBtdXN0CisJCSAqIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LgorCQkgKgorCQkgKiBUT0RPOiBNYWtlIHN1cmUgdGhhdCB0aGUgRUFQT0wgbWVzc2FnZSBpcyBnZXR0aW5nCisJCSAqICAgICAgIG91dCBiZWZvcmUgY2FyZCBkaXNhYmxlZAorCQkgKi8KKwkJaWYgKHBhcmFtLT52YWx1ZSkgeworCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAxOworCQkJcmV0ID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKKwkJCXJldCA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkKKwkJCXByaXYtPndlcF9yZXN0cmljdCA9IDE7CisJCWVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQorCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMDsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCWlmIChwcml2LT5oYXNfd3BhKSB7CisJCQlwcml2LT53cGFfZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSA/IDEgOiAwOworCQl9IGVsc2UgeworCQkJaWYgKHBhcmFtLT52YWx1ZSkKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCS8qIGVsc2Ugc2lsZW50bHkgYWNjZXB0IGRpc2FibGUgb2YgV1BBICovCisJCQlwcml2LT53cGFfZW5hYmxlZCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQlwYXJhbS0+dmFsdWUgPSBwcml2LT5rZXlfbWdtdDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCXBhcmFtLT52YWx1ZSA9IHByaXYtPnRraXBfY21fYWN0aXZlOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKKwkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX1NIQVJFRF9LRVk7CisJCWVsc2UKKwkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJcGFyYW0tPnZhbHVlID0gcHJpdi0+d3BhX2VuYWJsZWQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBjdXQgb2ZmIGF0IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKi8KKwlpZiAoKHdycXUtPmRhdGEubGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgfHwKKwkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIChleHRyYSA9PSBOVUxMKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7CisJCWJ1ZiA9IGttYWxsb2Mod3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkoYnVmLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOworCX0gZWxzZQorCQlidWYgPSBOVUxMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlrZnJlZShwcml2LT53cGFfaWUpOworCXByaXYtPndwYV9pZSA9IGJ1ZjsKKwlwcml2LT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7CisKKwlpZiAocHJpdi0+d3BhX2llKSB7CisJCS8qIExvb2tzIGxpa2Ugd2xfbGttIHdhbnRzIHRvIGNoZWNrIHRoZSBhdXRoIGFsZywgYW5kCisJCSAqIHNvbWVob3cgcGFzcyBpdCB0byB0aGUgZmlybXdhcmUuCisJCSAqIEluc3RlYWQgaXQganVzdCBjYWxscyB0aGUga2V5IG1nbXQgcmlkCisJCSAqICAgLSB3ZSBkbyB0aGlzIGluIHNldCBhdXRoLgorCQkgKi8KKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoKHByaXYtPndwYV9pZV9sZW4gPT0gMCkgfHwgKHByaXYtPndwYV9pZSA9PSBOVUxMKSkgeworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHByaXYtPndwYV9pZV9sZW4pIHsKKwkJZXJyID0gLUUyQklHOworCQlnb3RvIG91dDsKKwl9CisKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IHByaXYtPndwYV9pZV9sZW47CisJbWVtY3B5KGV4dHJhLCBwcml2LT53cGFfaWUsIHByaXYtPndwYV9pZV9sZW4pOworCitvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKG1sbWUtPmNtZCkgeworCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJCS8qIHNpbGVudGx5IGlnbm9yZSAqLworCQlicmVhazsKKworCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKKwl7CisJCXN0cnVjdCB7CisJCQl1OCBhZGRyW0VUSF9BTEVOXTsKKwkJCV9fbGUxNiByZWFzb25fY29kZTsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOworCisJCW1lbWNweShidWYuYWRkciwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7CisJCWJ1Zi5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KG1sbWUtPnJlYXNvbl9jb2RlKTsKKwkJcmV0ID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZESVNBU1NPQ0lBVEUsCisJCQkJCSAgJmJ1Zik7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiBzaG9ydF9saW1pdCwgbG9uZ19saW1pdCwgbGlmZXRpbWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU0hPUlRSRVRSWUxJTUlULAorCQkJCSAgJnNob3J0X2xpbWl0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0xPTkdSRVRSWUxJTUlULAorCQkJCSAgJmxvbmdfbGltaXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTUFYVFJBTlNNSVRMSUZFVElNRSwKKwkJCQkgICZsaWZldGltZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlycnEtPmRpc2FibGVkID0gMDsJCS8qIENhbid0IGJlIGRpc2FibGVkICovCisKKwkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcmV0cnkgbnVtYmVyICovCisJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKKwkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOworCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDAwOwkvKiA/Pz8gKi8KKwl9IGVsc2UgeworCQkvKiBCeSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBtaW4gbnVtYmVyICovCisJCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpKSB7CisJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOworCQkJcnJxLT52YWx1ZSA9IGxvbmdfbGltaXQ7CisJCX0gZWxzZSB7CisJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJCQlycnEtPnZhbHVlID0gc2hvcnRfbGltaXQ7CisJCQlpZiAoc2hvcnRfbGltaXQgIT0gbG9uZ19saW1pdCkKKwkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOworCQl9CisJfQorCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHZvaWQgKndycXUsCisJCQkgICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoaW5mby0+Y21kID09IChTSU9DSVdGSVJTVFBSSVYgKyAweDEpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2luZyByZXNldCFcbiIsIGRldi0+bmFtZSk7CisKKwkJLyogRmlybXdhcmUgcmVzZXQgKi8KKwkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3JjZSBzY2hlZHVsaW5nIHJlc2V0IVxuIiwgZGV2LT5uYW1lKTsKKworCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgdm9pZCAqd3JxdSwKKwkJCQkgICAgIGNoYXIgKmV4dHJhKQorCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbCA9ICooKGludCAqKSBleHRyYSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJcHJpdi0+aWJzc19wb3J0ID0gdmFsIDsKKworCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KKwlzZXRfcG9ydF90eXBlKHByaXYpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOworCisJKnZhbCA9IHByaXYtPmlic3NfcG9ydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdm9pZCAqd3JxdSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSAqKChpbnQgKikgZXh0cmEpOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOiAvKiBUcnkgdG8gZG8gSUVFRSBhZC1ob2MgbW9kZSAqLworCQlpZiAoIXByaXYtPmhhc19pYnNzKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcHJpdi0+cHJlZmVyX3BvcnQzID0gMDsKKworCQlicmVhazsKKworCWNhc2UgMTogLyogVHJ5IHRvIGRvIEx1Y2VudCBwcm9wcmlldGFyeSBhZC1ob2MgbW9kZSAqLworCQlpZiAoIXByaXYtPmhhc19wb3J0MykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXByaXYtPnByZWZlcl9wb3J0MyA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWVycikgeworCQkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCisJCXNldF9wb3J0X3R5cGUocHJpdik7CisJCWVyciA9IC1FSU5QUk9HUkVTUzsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdm9pZCAqd3JxdSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKKworCSp2YWwgPSBwcml2LT5wcmVmZXJfcG9ydDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2YWw7CisKKwlpZiAoIXByaXYtPmhhc19wcmVhbWJsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogODAyLjExYiBoYXMgcmVjZW50bHkgZGVmaW5lZCBzb21lIHNob3J0IHByZWFtYmxlLgorCSAqIEJhc2ljYWxseSwgdGhlIFBoeSBoZWFkZXIgaGFzIGJlZW4gcmVkdWNlZCBpbiBzaXplLgorCSAqIFRoaXMgaW5jcmVhc2UgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgYXQgaGlnaCByYXRlcworCSAqICh0aGUgcHJlYW1ibGUgaXMgdHJhbnNtaXR0ZWQgYXQgMU1iL3MpLCB1bmZvcnR1bmF0ZWx5CisJICogdGhpcyBnaXZlIGNvbXBhdGliaWxpdHkgdHJvdWJsZXMuLi4gLSBKZWFuIElJICovCisJdmFsID0gKigoaW50ICopIGV4dHJhKTsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHZhbCkKKwkJcHJpdi0+cHJlYW1ibGUgPSAxOworCWVsc2UKKwkJcHJpdi0+cHJlYW1ibGUgPSAwOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7CisKKwlpZiAoIXByaXYtPmhhc19wcmVhbWJsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJKnZhbCA9IHByaXYtPnByZWFtYmxlOworCXJldHVybiAwOworfQorCisvKiBpb2N0bCBpbnRlcmZhY2UgdG8gaGVybWVzX3JlYWRfbHR2KCkKKyAqIFRvIHVzZSB3aXRoIGl3cHJpdiwgcGFzcyB0aGUgUklEIGFzIHRoZSB0b2tlbiBhcmd1bWVudCwgZS5nLgorICogaXdwcml2IGdldF9yaWQgWzB4ZmMwMF0KKyAqIEF0IGxlYXN0IFdpcmVsZXNzIFRvb2xzIDI1IGlzIHJlcXVpcmVkIHRvIHVzZSBpd3ByaXYuCisgKiBGb3IgV2lyZWxlc3MgVG9vbHMgMjUgYW5kIDI2IGFwcGVuZCAiZHVtbXkiIGFyZSB0aGUgZW5kLiAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgcmlkID0gZGF0YS0+ZmxhZ3M7CisJdTE2IGxlbmd0aDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJdCdzIGEgImdldCIgZnVuY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50IHVzZXJzIHRvIGFjY2VzcyB0aGUKKwkgKiBXRVAga2V5IGFuZCBvdGhlciByYXcgZmlybXdhcmUgZGF0YSAqLworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChyaWQgPCAweGZjMDAgfHwgcmlkID4gMHhmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBNQVhfUklEX0xFTiwgJmxlbmd0aCwKKwkJCSAgICAgIGV4dHJhKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWRhdGEtPmxlbmd0aCA9IG1pbl90KHUxNiwgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW5ndGgpLAorCQkJICAgICBNQVhfUklEX0xFTik7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBUcmlnZ2VyIGEgc2NhbiAobG9vayBmb3Igb3RoZXIgY2VsbHMgaW4gdGhlIHZpY2luaXR5KSAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnNpID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKSBleHRyYTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTm90ZSA6IHlvdSBtYXkgaGF2ZSByZWFsaXNlZCB0aGF0LCBhcyB0aGlzIGlzIGEgU0VUIG9wZXJhdGlvbiwKKwkgKiB0aGlzIGlzIHByaXZpbGVnZWQgYW5kIHRoZXJlZm9yZSBhIG5vcm1hbCB1c2VyIGNhbid0CisJICogcGVyZm9ybSBzY2FubmluZy4KKwkgKiBUaGlzIGlzIG5vdCBhbiBlcnJvciwgd2hpbGUgdGhlIGRldmljZSBwZXJmb3JtIHNjYW5uaW5nLAorCSAqIHRyYWZmaWMgZG9lc24ndCBmbG93LCBzbyBpdCdzIGEgcGVyZmVjdCBEb1MuLi4KKwkgKiBKZWFuIElJICovCisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFNjYW5uaW5nIHdpdGggcG9ydCAwIGRpc2FibGVkIHdvdWxkIGZhaWwgKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCS8qIEluIG1vbml0b3IgbW9kZSwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgYWx3YXlzIGVtcHR5LgorCSAqIFByb2JlIHJlc3BvbnNlcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgcmVjZWl2ZWQKKwkgKiBmcmFtZXMgYW5kIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBzb2Z0d2FyZS4gKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIE5vdGUgOiBiZWNhdXNlIHdlIGRvbid0IGxvY2sgb3V0IHRoZSBpcnEgaGFuZGxlciwgdGhlIHdheQorCSAqIHdlIGFjY2VzcyBzY2FuIHZhcmlhYmxlcyBpbiBwcml2IGlzIGNyaXRpY2FsLgorCSAqCW8gc2Nhbl9pbnByb2dyZXNzIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKKwkgKglvIHNjYW5fbW9kZSA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCisJICogQmVmb3JlIG1vZGlmeWluZyBhbnl0aGluZyBvbiB0aG9zZSB2YXJpYWJsZXMsIHBsZWFzZSB0aGluayBoYXJkICEKKwkgKiBKZWFuIElJICovCisKKwkvKiBTYXZlIGZsYWdzICovCisJcHJpdi0+c2Nhbl9tb2RlID0gc3JxLT5mbGFnczsKKworCS8qIEFsd2F5cyB0cmlnZ2VyIHNjYW5uaW5nLCBldmVuIGlmIGl0J3MgaW4gcHJvZ3Jlc3MuCisJICogVGhpcyB3YXksIGlmIHRoZSBpbmZvIGZyYW1lIGdldCBsb3N0LCB3ZSB3aWxsIHJlY292ZXIgc29tZXdoYXQKKwkgKiBncmFjZWZ1bGx5ICAtIEplYW4gSUkgKi8KKworCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKKwkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORkhPU1RTQ0FOX1NZTUJPTCwKKwkJCQkJCUhFUk1FU19IT1NUU0NBTl9TWU1CT0xfT05DRSB8CisJCQkJCQlIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX0JDQVNUKTsKKwkJCWJyZWFrOworCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IHsKKwkJCV9fbGUxNiByZXFbM107CisKKwkJCXJlcVswXSA9IGNwdV90b19sZTE2KDB4M2ZmZik7CS8qIEFsbCBjaGFubmVscyAqLworCQkJcmVxWzFdID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsJLyogcmF0ZSAxIE1icHMgKi8KKwkJCXJlcVsyXSA9IDA7CQkJLyogQW55IEVTU0lEICovCisJCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJCSAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTiwgJnJlcSk7CisJCX0KKwkJYnJlYWs7CisJCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJCWlmIChwcml2LT5zY2FuX21vZGUgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJCQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOworCQkJCXNpemVfdCBsZW4gPSBtaW4oc2l6ZW9mKGlkYnVmLnZhbCksCisJCQkJCQkgKHNpemVfdCkgc2ktPmVzc2lkX2xlbik7CisJCQkJaWRidWYubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwkJCQltZW1jcHkoaWRidWYudmFsLCBzaS0+ZXNzaWQsIGxlbik7CisKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgICAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCisJCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGxlbiArIDIpLAorCQkJCQkgICAgICAgJmlkYnVmKTsKKwkJCX0gZWxzZQorCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCSAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCisJCQkJCQkgICAwKTsJLyogQW55IEVTU0lEICovCisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCisJCQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7CisJCQkJLyogQ2xlYXIgc2NhbiByZXN1bHRzIGF0IHRoZSBzdGFydCBvZgorCQkJCSAqIGFuIGV4dGVuZGVkIHNjYW4gKi8KKwkJCQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LAorCQkJCQkJbXNlY3NfdG9famlmZmllcygxNTAwMCkpOworCisJCQkJLyogVE9ETzogSXMgdGhpcyBhdmFpbGFibGUgb24gb2xkZXIgZmlybXdhcmU/CisJCQkJICogICBDYW4gd2UgdXNlIGl0IHRvIHNjYW4gc3BlY2lmaWMgY2hhbm5lbHMKKwkJCQkgKiAgIGZvciBJV19TQ0FOX1RISVNfRlJFUT8gKi8KKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORlNDQU5DSEFOTkVMUzJHSFosCisJCQkJCQkweDdGRkYpOworCQkJCWlmIChlcnIpCisJCQkJCWdvdG8gb3V0OworCisJCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsCisJCQkJCQkgICAgIEhFUk1FU19JTlFfQ0hBTk5FTElORk8pOworCQkJfSBlbHNlCisJCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZQorCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKKworCS8qIE9uZSBtb3JlIGNsaWVudCAqLworCWlmICghZXJyKQorCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAxOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBNQVhfQ1VTVE9NX0xFTiA2NAorCisvKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kYW50CisgKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kIC0gSmVhbiBJSSAqLworc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJCSAgIGNoYXIgKmN1cnJlbnRfZXYsCisJCQkJCSAgIGNoYXIgKmVuZF9idWYsCisJCQkJCSAgIHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmJzcywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTE2CQkJY2FwYWJpbGl0aWVzOworCXUxNgkJCWNoYW5uZWw7CisJc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCisJY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKworCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YS5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKworCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLworCisJLyogQWRkIHRoZSBFU1NJRCAqLworCWl3ZS51LmRhdGEubGVuZ3RoID0gbGUxNl90b19jcHUoYnNzLT5hLmVzc2lkX2xlbik7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCisJCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7CisJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBic3MtPmEuZXNzaWQpOworCisJLyogQWRkIG1vZGUgKi8KKwlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5hLmNhcGFiaWxpdGllcyk7CisJaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7CisJCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwl9CisKKwljaGFubmVsID0gYnNzLT5zLmNoYW5uZWw7CisJaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKKwkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLworCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7CisJCWl3ZS51LmZyZXEuZSA9IDA7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisKKwkJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpICogMTAwMDAwOworCQlpd2UudS5mcmVxLmUgPSAxOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCX0KKworCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCisJaXdlLmNtZCA9IElXRVZRVUFMOworCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7CisJaXdlLnUucXVhbC5sZXZlbCA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubGV2ZWwpIC0gMHg5NTsKKwlpd2UudS5xdWFsLm5vaXNlID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5ub2lzZSkgLSAweDk1OworCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKKwkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLworCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKKwkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7CisJZWxzZQorCQlpd2UudS5xdWFsLnF1YWwgPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKworCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIE5VTEwpOworCisJLyogQml0IHJhdGUgaXMgbm90IGF2YWlsYWJsZSBpbiBMdWNlbnQvQWdlcmUgZmlybXdhcmVzICovCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgIT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgeworCQljaGFyICpjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CisJCWludCBpOworCQlpbnQgc3RlcDsKKworCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkKKwkJCXN0ZXAgPSAyOworCQllbHNlCisJCQlzdGVwID0gMTsKKworCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJCS8qIE1heCAxMCB2YWx1ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpICs9IHN0ZXApIHsKKwkJCS8qIE5VTEwgdGVybWluYXRlZCAqLworCQkJaWYgKGJzcy0+cC5yYXRlc1tpXSA9PSAweDApCisJCQkJYnJlYWs7CisJCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9CisJCQkJKChic3MtPnAucmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7CisJCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICAgY3VycmVudF92YWwsCisJCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOworCQl9CisJCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLworCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpCisJCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CisJfQorCisJLyogQmVhY29uIGludGVydmFsICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImJjbl9pbnQ9JWQiLAorCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5hLmJlYWNvbl9pbnRlcnYpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQ2FwYWJpbGl0ZXMgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiY2FwYWI9MHglMDR4IiwKKwkJCQkgICAgIGNhcGFiaWxpdGllcyk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQorCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKKwkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwlyZXR1cm4gY3VycmVudF9ldjsKK30KKworc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkJICAgICAgIGNoYXIgKmN1cnJlbnRfZXYsCisJCQkJCSAgICAgICBjaGFyICplbmRfYnVmLAorCQkJCQkgICAgICAgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQoreworCXUxNgkJCWNhcGFiaWxpdGllczsKKwl1MTYJCQljaGFubmVsOworCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKKwl1OCAqaWU7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCisJLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKworCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLworCisJLyogQWRkIHRoZSBFU1NJRCAqLworCWllID0gYnNzLT5kYXRhOworCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKSB7CisJCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQorCQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCAmaWVbMl0pOworCX0KKworCS8qIEFkZCBtb2RlICovCisJY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5jYXBhYmlsaXRpZXMpOworCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgeworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwl9CisKKwlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX0RTX1BBUkFNUyk7CisJY2hhbm5lbCA9IGllID8gaWVbMl0gOiAwOworCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7CisJCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOworCQlpd2UudS5mcmVxLmUgPSAwOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisJCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKSAqIDEwMDAwMDsKKwkJaXdlLnUuZnJlcS5lID0gMTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwl9CisKKwkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOworCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPmxldmVsIC0gMHg5NTsKKwlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZSAtIDB4OTU7CisJLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQorCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCisJaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQorCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKKwllbHNlCisJCWl3ZS51LnF1YWwucXVhbCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCisJLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCWVsc2UKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgTlVMTCk7CisKKwkvKiBXUEEgSUUgKi8KKwlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpKTsKKwlpZiAoaWUpIHsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBpZSk7CisJfQorCisJLyogUlNOIElFICovCisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9SU04pOworCWlmIChpZSkgeworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGllKTsKKwl9CisKKwlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1NVUFBfUkFURVMpOworCWlmIChpZSkgeworCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKwkJaW50IGk7CisKKwkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCisJCWZvciAoaSA9IDI7IGkgPCAoaWVbMV0gKyAyKTsgaSsrKSB7CisJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChpZVtpXSAmIDB4N0YpICogNTAwMDAwKTsKKwkJCXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LCBwLCBlbmRfYnVmLAorCQkJCQkJICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJCX0KKwkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCisJCWlmIChwID4gKGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpKQorCQkJY3VycmVudF9ldiA9IHA7CisJfQorCisJLyogVGltZXN0YW1wICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPQorCQlzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLCAidHNmPSUwMTZsbHgiLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGJzcy0+dGltZXN0YW1wKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIEJlYWNvbiBpbnRlcnZhbCAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJiY25faW50PSVkIiwKKwkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YmVhY29uX2ludGVydmFsKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIENhcGFiaWxpdGVzICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCisJCQkJICAgICBjYXBhYmlsaXRpZXMpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKwkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCisJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKy8qIFJldHVybiByZXN1bHRzIG9mIGEgc2NhbiAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCS8qIEltcG9ydGFudCBub3RlIDogd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgY2FsbGVyCisJCSAqIHVudGlsIHJlc3VsdHMgYXJlIHJlYWR5IGZvciB2YXJpb3VzIHJlYXNvbnMuCisJCSAqIEZpcnN0LCBtYW5hZ2luZyB3YWl0IHF1ZXVlcyBpcyBjb21wbGV4IGFuZCByYWN5LgorCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29tbWluZworCQkgKiBoZXJlIChpbiBkZXZfaW9jdGwoKSkuCisJCSAqIFRoaXJkLCB3ZSBnZW5lcmF0ZSBhbiBXaXJlbGVzcyBFdmVudCwgc28gdGhlCisJCSAqIGNhbGxlciBjYW4gd2FpdCBpdHNlbGYgb24gdGhhdCAtIEplYW4gSUkgKi8KKwkJZXJyID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCisJCQljdXJyZW50X2V2ID0KKwkJCQlvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihkZXYsIGluZm8sCisJCQkJCQkJICAgY3VycmVudF9ldiwKKwkJCQkJCQkgICBleHRyYSArIHNycS0+bGVuZ3RoLAorCQkJCQkJCSAgICZic3MtPmJzcywKKwkJCQkJCQkgICBic3MtPmxhc3Rfc2Nhbm5lZCk7CisKKwkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLworCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKKwkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgeworCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKKwkJCQkgKiBiaWdnZXIgYnVmZmVyICovCisJCQkJZXJyID0gLUUyQklHOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KKwkJCWN1cnJlbnRfZXYgPSBvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywKKwkJCQkJCQkgICAgY3VycmVudF9ldiwKKwkJCQkJCQkgICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKKwkJCQkJCQkgICAgJmJzcy0+YnNzLAorCQkJCQkJCSAgICBic3MtPmxhc3Rfc2Nhbm5lZCk7CisKKwkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLworCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKKwkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgeworCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKKwkJCQkgKiBiaWdnZXIgYnVmZmVyICovCisJCQkJZXJyID0gLUUyQklHOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKKwlzcnEtPmZsYWdzID0gKF9fdTE2KSBwcml2LT5zY2FuX21vZGU7CisKK291dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKKy8qIENvbW1pdCBoYW5kbGVyLCBjYWxsZWQgYWZ0ZXIgc2V0IG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXZvaWQgKndycXUsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmICghcHJpdi0+b3BlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAocHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7CisJCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBkaXNhYmxlIHBvcnQgIgorCQkgICAgICAgIndoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwgZGV2LT5uYW1lKTsKKwkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gX19vcmlub2NvX3Byb2dyYW1fcmlkcyhkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWNvbmZpZ3VyZSBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHBvcnQgd2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisgb3V0OgorCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc2V0dGluZyBpbnN0ZWFkLi4uXG4iLCBkZXYtPm5hbWUpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwkJZXJyID0gMDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIG9yaW5vY29fcHJpdnRhYltdID0geworCXsgU0lPQ0lXRklSU1RQUklWICsgMHgwLCAwLCAwLCAiZm9yY2VfcmVzZXQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDEsIDAsIDAsICJjYXJkX3Jlc2V0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgyLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIDAsICJzZXRfcG9ydDMiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDMsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgImdldF9wb3J0MyIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAwLCAic2V0X3ByZWFtYmxlIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg1LCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICJnZXRfcHJlYW1ibGUiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDYsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgMCwgInNldF9pYnNzcG9ydCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NywgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAiZ2V0X2lic3Nwb3J0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg5LCAwLCBJV19QUklWX1RZUEVfQllURSB8IE1BWF9SSURfTEVOLAorCSAgImdldF9yaWQiIH0sCit9OworCisKKy8qCisgKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKKyAqLworCisjZGVmaW5lIFNURF9JV19IQU5ETEVSKGlkLCBmdW5jKSBcCisJW0lXX0lPQ1RMX0lEWChpZCldID0gKGl3X2hhbmRsZXIpIGZ1bmMKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29faGFuZGxlcltdID0geworCVNURF9JV19IQU5ETEVSKFNJT0NTSVdDT01NSVQsCW9yaW5vY29faW9jdGxfY29tbWl0KSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTkFNRSwJb3Jpbm9jb19pb2N0bF9nZXRuYW1lKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9zZXRmcmVxKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRlJFUSwJb3Jpbm9jb19pb2N0bF9nZXRmcmVxKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9zZXRtb2RlKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTU9ERSwJb3Jpbm9jb19pb2N0bF9nZXRtb2RlKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXU0VOUywJb3Jpbm9jb19pb2N0bF9zZXRzZW5zKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU0VOUywJb3Jpbm9jb19pb2N0bF9nZXRzZW5zKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkFOR0UsCW9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NQWSwJaXdfaGFuZGxlcl9zZXRfc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU1BZLAlpd19oYW5kbGVyX2dldF9zcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdUSFJTUFksCWl3X2hhbmRsZXJfc2V0X3RocnNweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1RIUlNQWSwJaXdfaGFuZGxlcl9nZXRfdGhyc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQVAsCW9yaW5vY29faW9jdGxfc2V0d2FwKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXQVAsCW9yaW5vY29faW9jdGxfZ2V0d2FwKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9zZXRzY2FuKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9nZXRzY2FuKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRVNTSUQsCW9yaW5vY29faW9jdGxfc2V0ZXNzaWQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9nZXRlc3NpZCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV05JQ0tOLAlvcmlub2NvX2lvY3RsX3NldG5pY2spLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9nZXRuaWNrKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXUkFURSwJb3Jpbm9jb19pb2N0bF9zZXRyYXRlKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkFURSwJb3Jpbm9jb19pb2N0bF9nZXRyYXRlKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXUlRTLAlvcmlub2NvX2lvY3RsX3NldHJ0cyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JUUywJb3Jpbm9jb19pb2N0bF9nZXRydHMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkFHLAlvcmlub2NvX2lvY3RsX3NldGZyYWcpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkFHLAlvcmlub2NvX2lvY3RsX2dldGZyYWcpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSRVRSWSwJb3Jpbm9jb19pb2N0bF9nZXRyZXRyeSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERSwJb3Jpbm9jb19pb2N0bF9nZXRpd2VuY29kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1BPV0VSLAlvcmlub2NvX2lvY3RsX3NldHBvd2VyKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUE9XRVIsCW9yaW5vY29faW9jdGxfZ2V0cG93ZXIpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdHRU5JRSwJb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNTE1FLAlvcmlub2NvX2lvY3RsX3NldF9tbG1lKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQVVUSCwJb3Jpbm9jb19pb2N0bF9zZXRfYXV0aCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FVVEgsCW9yaW5vY29faW9jdGxfZ2V0X2F1dGgpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERUVYVCwgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KSwKK307CisKKworLyoKKyAgQWRkZWQgdHlwZWNhc3Rpbmcgc2luY2Ugd2Ugbm8gbG9uZ2VyIHVzZSBpd3JlcV9kYXRhIC0tIE1vdXN0YWZhCisgKi8KK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyCW9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyW10gPSB7CisJWzBdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCisJWzFdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfcmVzZXQsCisJWzJdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cG9ydDMsCisJWzNdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cG9ydDMsCisJWzRdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUsCisJWzVdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUsCisJWzZdID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfc2V0aWJzc3BvcnQsCisJWzddID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQsCisJWzldID0gKGl3X2hhbmRsZXIpIG9yaW5vY29faW9jdGxfZ2V0cmlkLAorfTsKKworY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWYgPSB7CisJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUob3Jpbm9jb19oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUob3Jpbm9jb19wcml2dGFiKSwKKwkuc3RhbmRhcmQgPSBvcmlub2NvX2hhbmRsZXIsCisJLnByaXZhdGUgPSBvcmlub2NvX3ByaXZhdGVfaGFuZGxlciwKKwkucHJpdmF0ZV9hcmdzID0gb3Jpbm9jb19wcml2dGFiLAorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NzlmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaApAQCAtMCwwICsxLDEzIEBACisvKiBXaXJlbGVzcyBleHRlbnNpb25zIHN1cHBvcnQuCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fV0VYVF9IXworI2RlZmluZSBfT1JJTk9DT19XRVhUX0hfCisKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisvKiBTdHJ1Y3R1cmUgZGVmaW5pbmcgYWxsIG91ciBXRVhUIGhhbmRsZXJzICovCitleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWY7CisKKyNlbmRpZiAvKiBfT1JJTk9DT19XRVhUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCmluZGV4IGQzNDY5ZDAuLmI0NWQ2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCkBAIC0xLDkgKzEsMTAgQEAKIGNvbmZpZyBQNTRfQ09NTU9OCiAJdHJpc3RhdGUgIlNvZnRtYWMgUHJpc201NCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBGV19MT0FERVIgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4IGJhc2VkIGNhcmRzLgotCSAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJIGZyb250ZW5kcworCSAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eC9zdGxjNDV4eCBiYXNlZCBtb2R1bGVzLgorCSAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJL1NQSSBmcm9udC1lbmRzCiAJICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLgogCiAJICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKQEAgLTE3LDMxICsxOCw2IEBACiAJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLgotCSAgVGhlc2UgYXJlIFVTQiBiYXNlZCBhZGFwdGVycyBmb3VuZCBpbiBkZXZpY2VzIHN1Y2ggYXM6Ci0KLQkgIDNDT00gM0NSV0UyNTRHNzIKLQkgIFNNQyAyODYyVy1HCi0JICBBY2N0b24gODAyLjExZyBXTjQ1MDEgVVNCCi0JICBTaWVtZW5zIEdpZ2FzZXQgVVNCCi0JICBOZXRnZWFyIFdHMTIxCi0JICBOZXRnZWFyIFdHMTExCi0JICBNZWRpb24gNDA5MDAsIFJvcGVyIEV1cm9wZQotCSAgU2h1dHRsZSBQTjE1LCBBaXJ2YXN0IFdNMTY4ZywgSU9HZWFyIEdXVTUxMwotCSAgTGlua3N5cyBXVVNCNTRHCi0JICBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUKLQkgIERMaW5rIERXTC1HMTIwIFNwaW5uYWtlcgotCSAgRExpbmsgRFdMLUcxMjIKLQkgIEJlbGtpbiBGNUQ3MDUwIHZlciAxMDAwCi0JICBDb2hpYmEgUHJvdG8gYm9hcmQKLQkgIFNNQyAyODYyVy1HIHZlcnNpb24gMgotCSAgVS5TLiBSb2JvdGljcyBVNSA4MDIuMTFnIEFkYXB0ZXIKLQkgIEZVSklUU1UgRS01NDAwIFVTQiBEMTcwMAotCSAgU2FnZW0gWEc3MDNBCi0JICBETGluayBEV0wtRzEyMCBDb2hpYmEKLQkgIFNwaW5uYWtlciBQcm90byBib2FyZAotCSAgTGlua3N5cyBXVVNCNTRBRwotCSAgSW52ZW50ZWwgVVIwNTRHCi0JICBTcGlubmFrZXIgRFVUCiAKIAkgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdAogCSAgaHR0cDovL3ByaXNtNTQub3JnLwpAQCAtNjEsMyArMzcsMTggQEAKIAkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KIAogCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS4KKworY29uZmlnIFA1NF9TUEkKKwl0cmlzdGF0ZSAiUHJpc201NCBTUEkgKHN0bGM0NXh4KSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUDU0X0NPTU1PTiAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfSEFSRElSUVMKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHMuCisJICBUaGlzIGRyaXZlciBpcyBleHBlcmltZW50YWwsIHVudGVzdGVkIGFuZCB3aWxsIHByb2JhYmx5IG9ubHkgd29yayBvbgorCSAgTm9raWEncyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LgorCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0c3BpLgorCitjb25maWcgUDU0X0xFRFMKKwlib29sCisJZGVwZW5kcyBvbiBQNTRfQ09NTU9OICYmIE1BQzgwMjExX0xFRFMgJiYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKQorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCmluZGV4IDRmYTljZTcuLmMyMDUwZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAogb2JqLSQoQ09ORklHX1A1NF9DT01NT04pCSs9IHA1NGNvbW1vbi5vCiBvYmotJChDT05GSUdfUDU0X1VTQikJCSs9IHA1NHVzYi5vCiBvYmotJChDT05GSUdfUDU0X1BDSSkJCSs9IHA1NHBjaS5vCitvYmotJChDT05GSUdfUDU0X1NQSSkJCSs9IHA1NHNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKaW5kZXggYWI3OWUzMi4uMmRkYTVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApAQCAtMTQsNiArMTQsMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCiBlbnVtIHA1NF9jb250cm9sX2ZyYW1lX3R5cGVzIHsKIAlQNTRfQ09OVFJPTF9UWVBFX1NFVFVQID0gMCwKIAlQNTRfQ09OVFJPTF9UWVBFX1NDQU4sCkBAIC00NCw2ICs0OCwxOCBAQAogCVA1NF9DT05UUk9MX1RZUEVfQlRfT1BUSU9OUyA9IDM1CiB9OwogCisvKiBwcm92aWRlIDE2IGJ5dGVzIGZvciB0aGUgdHJhbnNwb3J0IGJhY2stZW5kICovCisjZGVmaW5lIFA1NF9UWF9JTkZPX0RBVEFfU0laRQkJMTYKKworLyogc3RvcmVkIGluIGllZWU4MDIxMV90eF9pbmZvJ3MgcmF0ZV9kcml2ZXJfZGF0YSAqLworc3RydWN0IHA1NF90eF9pbmZvIHsKKwl1MzIgc3RhcnRfYWRkcjsKKwl1MzIgZW5kX2FkZHI7CisJdm9pZCAqZGF0YVtQNTRfVFhfSU5GT19EQVRBX1NJWkUgLyBzaXplb2Yodm9pZCAqKV07Cit9OworCisjZGVmaW5lIFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4JCTB4MTAwMAorCiAjZGVmaW5lIFA1NF9IRFJfRkxBR19DT05UUk9MCQlCSVQoMTUpCiAjZGVmaW5lIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VUCShCSVQoMTUpICsgQklUKDApKQogCkBAIC03NSw2ICs5MSwxNCBAQAogCXMxNiBsb25nYm93X3VuazI7CiB9OwogCitzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSB7CisJc2l6ZV90IGVudHJpZXM7CisJc2l6ZV90IGVudHJ5X3NpemU7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3QgbGVuOworCXU4IGRhdGFbMF07Cit9OworCiAjZGVmaW5lIEVFUFJPTV9SRUFEQkFDS19MRU4gMHgzZmMKIAogI2RlZmluZSBJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSIDB4MjAwMDAKQEAgLTg0LDYgKzEwOCwyOSBAQAogI2RlZmluZSBGV19MTTg3IDB4NGM0ZDM4MzcKICNkZWZpbmUgRldfTE0yMCAweDRjNGQzMjMwCiAKK2VudW0gZndfc3RhdGUgeworCUZXX1NUQVRFX09GRiwKKwlGV19TVEFURV9CT09USU5HLAorCUZXX1NUQVRFX1JFQURZLAorCUZXX1NUQVRFX1JFU0VULAorCUZXX1NUQVRFX1JFU0VUVElORywKK307CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCisjZGVmaW5lIFA1NF9MRURfTUFYX05BTUVfTEVOIDMxCisKK3N0cnVjdCBwNTRfbGVkX2RldiB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHdfZGV2OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2RldjsKKwljaGFyIG5hbWVbUDU0X0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJlZDsKK307CisKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCiBzdHJ1Y3QgcDU0X2NvbW1vbiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJdTMyIHJ4X3N0YXJ0OwpAQCAtOTksMTEgKzE0NiwxMiBAQAogCXN0cnVjdCBtdXRleCBjb25mX211dGV4OwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggcnhfZGl2ZXJzaXR5X21hc2s7CisJdTggdHhfZGl2ZXJzaXR5X21hc2s7CiAJc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOwogCXVuc2lnbmVkIGludCBpcV9hdXRvY2FsX2xlbjsKLQlzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0ICpvdXRwdXRfbGltaXQ7Ci0JdW5zaWduZWQgaW50IG91dHB1dF9saW1pdF9sZW47Ci0Jc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhOworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpvdXRwdXRfbGltaXQ7CisJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKmN1cnZlX2RhdGE7CiAJc3RydWN0IHA1NF9yc3NpX2xpbmVhcl9hcHByb3hpbWF0aW9uIHJzc2ljYWxfZGJbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdW5zaWduZWQgaW50IGZpbHRlcl9mbGFnczsKIAlib29sIHVzZV9zaG9ydF9zbG90OwpAQCAtMTE1LDcgKzE2Myw3IEBACiAJdW5zaWduZWQgaW50IG91dHB1dF9wb3dlcjsKIAl1MzIgdHNmX2xvdzMyOwogCXUzMiB0c2ZfaGlnaDMyOwotCXU2NCBiYXNpY19yYXRlX21hc2s7CisJdTMyIGJhc2ljX3JhdGVfbWFzazsKIAl1MTYgd2FrZXVwX3RpbWVyOwogCXUxNiBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s4XTsKQEAgLTEyOCwxMyArMTc2LDIxIEBACiAJc3RydWN0IGNvbXBsZXRpb24gZWVwcm9tX2NvbXA7CiAJdTggcHJpdmFjeV9jYXBzOwogCXU4IHJ4X2tleWNhY2hlX3NpemU7CisJLyogTEVEIG1hbmFnZW1lbnQgKi8KKwkjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgYXNzb2NfbGVkOworCXN0cnVjdCBwNTRfbGVkX2RldiB0eF9sZWQ7CisJI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCisJdTE2IHNvZnRsZWRfc3RhdGU7CQkvKiBiaXQgZmllbGQgb2YgZ2xvd2luZyBMRURzICovCiB9OwogCiBpbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOworaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pOwogaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwogc3RydWN0IGllZWU4MDIxMV9odyAqcDU0X2luaXRfY29tbW9uKHNpemVfdCBwcml2X2RhdGFfbGVuKTsKK2ludCBwNTRfcmVnaXN0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGRldmljZSAqcGRldik7CiB2b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwogCiAjZW5kaWYgLyogUDU0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwppbmRleCBmMTcwMTA2Li4wYzFiMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCkBAIC0yMSw2ICsyMSw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2lmZGVmIENPTkZJR19QNTRfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KIAogI2luY2x1ZGUgInA1NC5oIgogI2luY2x1ZGUgInA1NGNvbW1vbi5oIgpAQCAtMjM5LDExICsyNDIsMTEgQEAKIAogCWlmIChwcml2LT5md192YXIgPj0gMHgzMDApIHsKIAkJLyogRmlybXdhcmUgc3VwcG9ydHMgUW9TLCB1c2UgaXQhICovCi0JCXByaXYtPnR4X3N0YXRzWzRdLmxpbWl0ID0gMzsJCS8qIEFDX1ZPICovCi0JCXByaXYtPnR4X3N0YXRzWzVdLmxpbWl0ID0gNDsJCS8qIEFDX1ZJICovCi0JCXByaXYtPnR4X3N0YXRzWzZdLmxpbWl0ID0gMzsJCS8qIEFDX0JFICovCi0JCXByaXYtPnR4X3N0YXRzWzddLmxpbWl0ID0gMjsJCS8qIEFDX0JLICovCi0JCWRldi0+cXVldWVzID0gNDsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZPXS5saW1pdCA9IDM7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WSV0ubGltaXQgPSA0OworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQkVdLmxpbWl0ID0gMzsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JLXS5saW1pdCA9IDI7CisJCWRldi0+cXVldWVzID0gUDU0X1FVRVVFX0FDX05VTTsKIAl9CiAKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKQEAgLTI3MiwxMyArMjc1LDE5IEBACiAJdW5zaWduZWQgaW50IGksIGo7CiAJdm9pZCAqc291cmNlLCAqdGFyZ2V0OwogCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2MoY2RfbGVuLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpICsgY2RfbGVuLAorCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCisJCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOworCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKKwltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CiAJc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CiAJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKIAkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwpAQCAtMzE4LDEzICszMjcsMTkgQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAl2b2lkICpzb3VyY2UsICp0YXJnZXQ7CiAKLQlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhjZF9sZW4sIEdGUF9LRVJORUwpOworCXByaXYtPmN1cnZlX2RhdGEgPSBremFsbG9jKGNkX2xlbiArIHNpemVvZigqcHJpdi0+Y3VydmVfZGF0YSksCisJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5jdXJ2ZV9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzID0gY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSA9IHNpemVvZihfX2xlMTYpICsKKwkJc2l6ZW9mKCpkc3QpICogY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCXByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSwgZGF0YSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+bGVuID0gY2RfbGVuOworCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKIAlzb3VyY2UgPSBjdXJ2ZV9kYXRhLT5kYXRhOwotCXRhcmdldCA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisJdGFyZ2V0ID0gKChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSktPmRhdGE7CiAJZm9yIChpID0gMDsgaSA8IGN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKIAkJX19sZTE2ICpmcmVxID0gc291cmNlOwogCQlzb3VyY2UgKz0gc2l6ZW9mKF9fbGUxNik7CkBAIC0zNzYsNyArMzkxLDEwMiBAQAogCX0KIH0KIAotc3RhdGljIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcGRhX2NvdW50cnkgKmNvdW50cnk7CisKKwlpZiAobGVuICE9IHNpemVvZigqY291bnRyeSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZm91bmQgcG9zc2libGUgaW52YWxpZCBkZWZhdWx0IGNvdW50cnkgIgorCQkJCSJlZXByb20gZW50cnkuIChlbnRyeSBzaXplOiAlZClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZW4pOworCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJjb3VudHJ5OiIsIERVTVBfUFJFRklYX05PTkUsCisJCQkJICAgICBkYXRhLCBsZW4pOworCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50cnkgPSAoc3RydWN0IHBkYV9jb3VudHJ5ICopIGRhdGE7CisJaWYgKGNvdW50cnktPmZsYWdzID09IFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9QU0VVRE8pCisJCXJlZ3VsYXRvcnlfaGludChkZXYtPndpcGh5LCBjb3VudHJ5LT5hbHBoYTIpOworCWVsc2UgeworCQkvKiBUT0RPOgorCQkgKiB3cml0ZSBhIHNoYXJlZC9jb21tb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cworCQkgKiAiUmVndWxhdG9yeSBkb21haW4gY29kZXMiICg4MDIuMTEtMjAwNyAxNC44LjIuMikKKwkJICogaW50byBJU08vSUVDIDMxNjYtMSBhbHBoYTIgZm9yIHJlZ3VsYXRvcnlfaGludC4KKwkJICovCisJfQorfQorCitzdGF0aWMgaW50IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgdTggKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gb3V0cHV0IHBvd2VyIGRiIHJldmlzaW9uOiV4XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgZGF0YVswXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgyICsgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSA+IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5vdXRwdXRfbGltaXQgPSBrbWFsbG9jKGRhdGFbMV0gKgorCQlzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgKworCQlzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCksIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQgPSAwOworCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcyA9IGRhdGFbMV07CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpOworCXByaXYtPm91dHB1dF9saW1pdC0+bGVuID0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICoKKwkJCQkgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcyArCisJCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldDsKKworCW1lbWNweShwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEsICZkYXRhWzJdLAorCSAgICAgICBkYXRhWzFdICogc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKnA1NF9jb252ZXJ0X2RiKHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnNyYywKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pCit7CisJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKmRzdDsKKwlzaXplX3QgcGF5bG9hZF9sZW4sIGVudHJpZXMsIGVudHJ5X3NpemUsIG9mZnNldDsKKworCXBheWxvYWRfbGVuID0gbGUxNl90b19jcHUoc3JjLT5sZW4pOworCWVudHJpZXMgPSBsZTE2X3RvX2NwdShzcmMtPmVudHJpZXMpOworCWVudHJ5X3NpemUgPSBsZTE2X3RvX2NwdShzcmMtPmVudHJ5X3NpemUpOworCW9mZnNldCA9IGxlMTZfdG9fY3B1KHNyYy0+b2Zmc2V0KTsKKwlpZiAoKChlbnRyaWVzICogZW50cnlfc2l6ZSArIG9mZnNldCkgIT0gcGF5bG9hZF9sZW4pIHx8CisJICAgICAocGF5bG9hZF9sZW4gKyBzaXplb2YoKnNyYykgIT0gdG90YWxfbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc3QgPSBrbWFsbG9jKHNpemVvZigqZHN0KSArIHBheWxvYWRfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc3QtPmVudHJpZXMgPSBlbnRyaWVzOworCWRzdC0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CisJZHN0LT5vZmZzZXQgPSBvZmZzZXQ7CisJZHN0LT5sZW4gPSBwYXlsb2FkX2xlbjsKKworCW1lbWNweShkc3QtPmRhdGEsIHNyYy0+ZGF0YSwgcGF5bG9hZF9sZW4pOworCXJldHVybiBkc3Q7Cit9CisKK2ludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBlZXByb21fcGRhX3dyYXAgKndyYXAgPSBOVUxMOwpAQCAtNDAxLDMwICs1MTEsMTcgQEAKIAogCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSkgewogCQljYXNlIFBEUl9NQUNfQUREUkVTUzoKKwkJCWlmIChkYXRhX2xlbiAhPSBFVEhfQUxFTikKKwkJCQlicmVhazsKIAkJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZW50cnktPmRhdGEpOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTOgotCQkJaWYgKGRhdGFfbGVuIDwgMikgewotCQkJCWVyciA9IC1FSU5WQUw7CisJCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0KQorCQkJCWJyZWFrOworCQkJZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LT5kYXRhLAorCQkJCQkJCWRhdGFfbGVuKTsKKwkJCWlmIChlcnIpCiAJCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWlmICgyICsgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpID4gZGF0YV9sZW4pIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlwcml2LT5vdXRwdXRfbGltaXQgPSBrbWFsbG9jKGVudHJ5LT5kYXRhWzFdICoKLQkJCQlzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCksIEdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXByaXYtPm91dHB1dF9saW1pdCkgewotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCW1lbWNweShwcml2LT5vdXRwdXRfbGltaXQsICZlbnRyeS0+ZGF0YVsyXSwKLQkJCSAgICAgICBlbnRyeS0+ZGF0YVsxXSpzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCkpOwotCQkJcHJpdi0+b3V0cHV0X2xpbWl0X2xlbiA9IGVudHJ5LT5kYXRhWzFdOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBOiB7CiAJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQpAQCAtNDYzLDYgKzU2MCw5IEBACiAJCQltZW1jcHkocHJpdi0+aXFfYXV0b2NhbCwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKIAkJCXByaXYtPmlxX2F1dG9jYWxfbGVuID0gZGF0YV9sZW4gLyBzaXplb2Yoc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5KTsKIAkJCWJyZWFrOworCQljYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6CisJCQlwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKKwkJCWJyZWFrOwogCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKIAkJCXRtcCA9IGVudHJ5LT5kYXRhOwogCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKQEAgLTQ3Myw2ICs1NzMsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRDoKKwkJCWlmIChkYXRhX2xlbiA8IDIpCisJCQkJYnJlYWs7CiAJCQlwcml2LT52ZXJzaW9uID0gKih1OCAqKShlbnRyeS0+ZGF0YSArIDEpOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT046CkBAIC00ODEsNiArNTgzLDM0IEBACiAJCQlwNTRfcGFyc2VfcnNzaWNhbChkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbiwKIAkJCQkJICBsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpOwogCQkJYnJlYWs7CisJCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NOiB7CisJCQlfX2xlMTYgKnNyYyA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJczE2ICpkc3QgPSAodm9pZCAqKSAmcHJpdi0+cnNzaWNhbF9kYjsKKwkJCWludCBpOworCisJCQlpZiAoZGF0YV9sZW4gIT0gc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHJpdi0+cnNzaWNhbF9kYikgLworCQkJCQlzaXplb2YoKnNyYyk7IGkrKykKKwkJCQkqKGRzdCsrKSA9IChzMTYpIGxlMTZfdG9fY3B1KCooc3JjKyspKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT006IHsKKwkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCB8fCBkYXRhX2xlbiA8IHNpemVvZigqcGRhKSkKKwkJCQlicmVhazsKKwkJCXByaXYtPm91dHB1dF9saW1pdCA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTTogeworCQkJc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqcGRhID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlpZiAocHJpdi0+Y3VydmVfZGF0YSB8fCBkYXRhX2xlbiA8IHNpemVvZigqcGRhKSkKKwkJCQlicmVhazsKKwkJCXByaXYtPmN1cnZlX2RhdGEgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFBEUl9FTkQ6CiAJCQkvKiBtYWtlIGl0IG92ZXJydW4gKi8KIAkJCWVudHJ5X2xlbiA9IGxlbjsKQEAgLTQ5Nyw3ICs2MjcsNiBAQAogCQljYXNlIFBEUl9VVEY4X09FTV9OQU1FOgogCQljYXNlIFBEUl9VVEY4X1BST0RVQ1RfTkFNRToKIAkJY2FzZSBQRFJfQ09VTlRSWV9MSVNUOgotCQljYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6CiAJCWNhc2UgUERSX0FOVEVOTkFfR0FJTjoKIAkJY2FzZSBQRFJfUFJJU01fSU5ESUdPX1BBX0NBTElCUkFUSU9OX0RBVEE6CiAJCWNhc2UgUERSX1JFR1VMQVRPUllfUE9XRVJfTElNSVRTOgpAQCAtNTI1LDEyICs2NTQsMTYgQEAKIAl9CiAKIAlwcml2LT5yeGh3ID0gc3ludGggJiBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSzsKLQlpZiAocHJpdi0+cnhodyA9PSA0KQorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKQogCQlwNTRfaW5pdF94Ym93X3N5bnRoKGRldik7CiAJaWYgKCEoc3ludGggJiBQRFJfU1lOVEhfMjRfR0haX0RJU0FCTEVEKSkKIAkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmYmFuZF8yR0h6OwogCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzVfR0haX0RJU0FCTEVEKSkKIAkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmYmFuZF81R0h6OworCWlmICgoc3ludGggJiBQRFJfU1lOVEhfUlhfRElWX01BU0spID09IFBEUl9TWU5USF9SWF9ESVZfU1VQUE9SVEVEKQorCQlwcml2LT5yeF9kaXZlcnNpdHlfbWFzayA9IDM7CisJaWYgKChzeW50aCAmIFBEUl9TWU5USF9UWF9ESVZfTUFTSykgPT0gUERSX1NZTlRIX1RYX0RJVl9TVVBQT1JURUQpCisJCXByaXYtPnR4X2RpdmVyc2l0eV9tYXNrID0gMzsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPndpcGh5LT5wZXJtX2FkZHIpKSB7CiAJCXU4IHBlcm1fYWRkcltFVEhfQUxFTl07CkBAIC01NjgsMTMgKzcwMSwyMSBAQAogCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7CiAKIHN0YXRpYyBpbnQgcDU0X3Jzc2lfdG9fZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHJzc2kpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAotCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCisJaWYgKHByaXYtPnJ4aHcgIT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpCisJCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCisJCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKKwllbHNlCisJCS8qCisJCSAqIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgZm9ybXVsYQorCQkgKi8KKwkJcmV0dXJuICgocnNzaSAqIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKSAvIDY0ICsKIAkJCSBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCkgLyA0OwogfQogCkBAIC01OTcsMTAgKzczOCw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCEoaGRyLT5mbGFncyAmIGNwdV90b19sZTE2KFA1NF9IRFJfRkxBR19EQVRBX0lOX0ZDU19HT09EKSkpIHsKLQkJaWYgKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9GQ1NGQUlMKQotCQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQkJZWxzZQotCQkJcmV0dXJuIDA7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX09LKQpAQCAtNjU1LDcgKzc5Myw4IEBACiAJCXJldHVybiA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZXM7IGkrKykKLQkJaWYgKHByaXYtPnR4X3N0YXRzW2kgKyA0XS5sZW4gPCBwcml2LT50eF9zdGF0c1tpICsgNF0ubGltaXQpCisJCWlmIChwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxlbiA8CisJCSAgICBwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxpbWl0KQogCQkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LCBpKTsKIH0KIApAQCAtNjYzLDcgKzgwMiw3IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgZnJlZWQgPSAwLCBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIApAQCAtNjgxLDE4ICs4MjAsMTggQEAKIAlyYW5nZSA9ICh2b2lkICopaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKIAlpZiAoc2tiLT5wcmV2ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKIAogCQluaSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiLT5wcmV2KTsKLQkJbXIgPSAoc3RydWN0IG1lbXJlY29yZCAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOworCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJbGFzdF9hZGRyID0gbXItPmVuZF9hZGRyOwogCX0KIAlpZiAoc2tiLT5uZXh0ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKIAogCQluaSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiLT5uZXh0KTsKLQkJbXIgPSAoc3RydWN0IG1lbXJlY29yZCAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOworCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJZnJlZWQgPSBtci0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKIAl9IGVsc2UKIAkJZnJlZWQgPSBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHI7CkBAIC03MzUsNyArODc0LDcgQEAKIAlzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgKnBheWxvYWQgPSAoc3RydWN0IHA1NF9mcmFtZV9zZW50ICopIGhkci0+ZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CiAJdTMyIGFkZHIgPSBsZTMyX3RvX2NwdShoZHItPnJlcV9pZCkgLSBwcml2LT5oZWFkcm9vbTsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZSA9IE5VTEw7CisJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZSA9IE5VTEw7CiAJdTMyIGZyZWVkID0gMDsKIAl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc1OCwxMCArODk3LDEwIEBACiAKIAkJaWYgKGVudHJ5LT5uZXh0ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewogCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJCXN0cnVjdCBtZW1yZWNvcmQgKm1yOworCQkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKIAogCQkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5uZXh0KTsKLQkJCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwogCQkJZnJlZWQgPSBtci0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKIAkJfSBlbHNlCiAJCQlmcmVlZCA9IHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcjsKQEAgLTc3Niw5ICs5MTUsMTYgQEAKIAkJcHJpdi0+dHhfc3RhdHNbZW50cnlfZGF0YS0+aHdfcXVldWVdLmxlbi0tOwogCQlwcml2LT5zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCArPSBwYXlsb2FkLT50cmllcyAtIDE7CiAKLQkJaWYgKHVubGlrZWx5KGVudHJ5ID09IHByaXYtPmNhY2hlZF9iZWFjb24pKSB7CisJCS8qCisJCSAqIEZyYW1lcyBpbiBQNTRfUVVFVUVfRldTQ0FOIGFuZCBQNTRfUVVFVUVfQkVBQ09OIGFyZQorCQkgKiBnZW5lcmF0ZWQgYnkgdGhlIGRyaXZlci4gVGhlcmVmb3JlIHR4X3N0YXR1cyBpcyBib2d1cworCQkgKiBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHRoZSBtYWM4MDIxMSBzdGFjay4KKwkJICovCisJCWlmICh1bmxpa2VseShlbnRyeV9kYXRhLT5od19xdWV1ZSA8IFA1NF9RVUVVRV9GV1NDQU4pKSB7CisJCQlpZiAoZW50cnlfZGF0YS0+aHdfcXVldWUgPT0gUDU0X1FVRVVFX0JFQUNPTikKKwkJCQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKKwogCQkJa2ZyZWVfc2tiKGVudHJ5KTsKLQkJCXByaXYtPmNhY2hlZF9iZWFjb24gPSBOVUxMOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtOTcxLDggKzExMTcsOCBAQAogICogY2FuIGZpbmQgc29tZSB1bnVzZWQgbWVtb3J5IHRvIHVwbG9hZCBvdXIgcGFja2V0cyB0by4gSG93ZXZlciwgZGF0YSB0aGF0IHdlCiAgKiB3YW50IHRoZSBjYXJkIHRvIFRYIG5lZWRzIHRvIHN0YXkgaW50YWN0IHVudGlsIHRoZSBjYXJkIGhhcyB0b2xkIHVzIHRoYXQKICAqIGl0IGlzIGRvbmUgd2l0aCBpdC4gVGhpcyBmdW5jdGlvbiBmaW5kcyBlbXB0eSBwbGFjZXMgd2UgY2FuIHVwbG9hZCB0byBhbmQKLSAqIG1hcmtzIGFsbG9jYXRlZCBhcmVhcyBhcyByZXNlcnZlZCBpZiBuZWNlc3NhcnkuIHA1NF9yeF9mcmFtZV9zZW50IGZyZWVzCi0gKiBhbGxvY2F0ZWQgYXJlYXMuCisgKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfcnhfZnJhbWVfc2VudCBvcgorICogcDU0X2ZyZWVfc2tiIGZyZWVzIGFsbG9jYXRlZCBhcmVhcy4KICAqLwogc3RhdGljIGludCBwNTRfYXNzaWduX2FkZHJlc3Moc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBwNTRfaGRyICpkYXRhLCB1MzIgbGVuKQpAQCAtOTgxLDcgKzExMjcsNyBAQAogCXN0cnVjdCBza19idWZmICplbnRyeTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFyZ2V0X3NrYiA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7CiAJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwogCXUzMiBsYXJnZXN0X2hvbGUgPSAwOwogCXUzMiB0YXJnZXRfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwpAQCAtMTA2MywyNSArMTIwOSwyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQl1MTYgaGRyX2ZsYWdzLCB1MTYgbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgaGRyX2ZsYWdzLAorCQkJCSAgICAgdTE2IHBheWxvYWRfbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBmcmFtZV9sZW4gPSBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbjsKIAotCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4gKyBwcml2LT50eF9oZHJfbGVuLCBtZW1mbGFncyk7CisJaWYgKGZyYW1lX2xlbiA+IFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4pCisJCXJldHVybiBOVUxMOworCisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKHByaXYtPnR4X2hkcl9sZW4gKyBmcmFtZV9sZW4sIG1lbWZsYWdzKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5VTEw7CiAJc2tiX3Jlc2VydmUoc2tiLCBwcml2LT50eF9oZHJfbGVuKTsKIAogCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKIAloZHItPmZsYWdzID0gY3B1X3RvX2xlMTYoaGRyX2ZsYWdzKTsKLQloZHItPmxlbiA9IGNwdV90b19sZTE2KGxlbiAtIHNpemVvZigqaGRyKSk7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihwYXlsb2FkX2xlbik7CiAJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7CiAJaGRyLT50cmllcyA9IGhkci0+cnRzX3RyaWVzID0gMDsKIAotCWlmICh1bmxpa2VseShwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBza2IsIGhkciwgbGVuKSkpIHsKKwlpZiAocDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgc2tiLCBoZHIsIGZyYW1lX2xlbikpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTEwOTEsNyArMTI0MSw2IEBACiBpbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gTlVMTDsKIAlzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICplZXByb21faGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTsKQEAgLTExMDQsOSArMTI1Myw5IEBACiAJZWxzZQogCQltYXhibG9ja3NpemUgLT0gMHg0OwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2YoKmhkcikgKwotCQkJICAgIHNpemVvZigqZWVwcm9tX2hkcikgKyBtYXhibG9ja3NpemUsCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssIEdGUF9LRVJORUwpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgc2l6ZW9mKCplZXByb21faGRyKSArCisJCQkgICAgbWF4YmxvY2tzaXplLCBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSywKKwkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJZ290byBmcmVlOwogCXByaXYtPmVlcHJvbSA9IGt6YWxsb2MoRUVQUk9NX1JFQURCQUNLX0xFTiwgR0ZQX0tFUk5FTCk7CkBAIC0xMTYyLDkgKzEzMTEsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF90aW0gKnRpbTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqdGltKSwKLQkJICAgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp0aW0pLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTExODEsOSArMTMyOSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKnN0YTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqc3RhKSwKLQkJUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnN0YSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjIzLDkgKzEzNzAsOCBAQAogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHA1NF90eGNhbmNlbCAqY2FuY2VsOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULAotCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsgc2l6ZW9mKCpjYW5jZWwpLAotCQlQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqY2FuY2VsKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyNDIsNDYgKzEzODgsNzMgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCByZXQgPSAwOwotCi0JaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMDsKLQkJCSpleHRyYV9sZW4gPSBJRUVFODAyMTFfTUFYX1RJTV9MRU47Ci0JCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQkJKmFpZCA9IDA7Ci0JCQkqcXVldWUgPSAyOwotCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUCB8Ci0JCQkJIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJKnF1ZXVlID0gMjsKLQkJCXJldCA9IDA7Ci0JCX0KLQl9IGVsc2UgewotCQkqcXVldWUgKz0gNDsKLQkJcmV0ID0gMTsKLQl9CisJaW50IHJldCA9IDE7CiAKIAlzd2l0Y2ggKHByaXYtPm1vZGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gc2V0IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDIGZvcgorCQkgKiBldmVyeSBmcmFtZSBpbiBwcm9taXNjdW91cy9tb25pdG9yIG1vZGUuCisJCSAqIHNlZSBTVFNXNDV4MEMgTE1BQyBBUEkgLSBwYWdlIDEyLgorCQkgKi8KKwkJKmFpZCA9IDA7CisJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDOworCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJKmFpZCA9IDE7CisJCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7CisJCQlyZXQgPSAwOworCQl9IGVsc2UKKwkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKIAkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMzsKKwkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9DQUI7CiAJCQlyZXR1cm4gMDsKIAkJfQorCisJCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCQkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCQkqYWlkID0gMDsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKKwkJCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QIHwKKwkJCQkJIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkJKmFpZCA9IDA7CisKKwkJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSB7CisJCQkJCS8qCisJCQkJCSAqIEluamVjdGluZyBiZWFjb25zIG9uIHRvcCBvZiBhIEFQIGlzCisJCQkJCSAqIG5vdCBhIGdvb2QgaWRlYS4uLiBuZXZlcnRoZWxlc3MsCisJCQkJCSAqIGl0IHNob3VsZCBiZSBkb2FibGUuCisJCQkJCSAqLworCisJCQkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCisJCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUDsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfQkVBQ09OOworCQkJCSpleHRyYV9sZW4gPSBJRUVFODAyMTFfTUFYX1RJTV9MRU47CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOworCQkJCXJldCA9IDA7CisJCQl9CisJCX0gZWxzZQorCQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOworCiAJCWlmIChpbmZvLT5jb250cm9sLnN0YSkKIAkJCSphaWQgPSBpbmZvLT5jb250cm9sLnN0YS0+YWlkOwogCQllbHNlCiAJCQkqZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOworCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEzMDMsNyArMTQ3Niw3IEBACiBzdGF0aWMgaW50IHA1NF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKmN1cnJlbnRfcXVldWUgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKmN1cnJlbnRfcXVldWU7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOwpAQCAtMTQ0NiwxNSArMTYxOSwxNyBAQAogCX0KIAl0eGhkci0+Y3J5cHRfb2Zmc2V0ID0gY3J5cHRfb2Zmc2V0OwogCXR4aGRyLT5od19xdWV1ZSA9IHF1ZXVlOwotCWlmIChjdXJyZW50X3F1ZXVlKQotCQl0eGhkci0+YmFja2xvZyA9IGN1cnJlbnRfcXVldWUtPmxlbjsKLQllbHNlCi0JCXR4aGRyLT5iYWNrbG9nID0gMDsKKwl0eGhkci0+YmFja2xvZyA9IGN1cnJlbnRfcXVldWUtPmxlbjsKIAltZW1zZXQodHhoZHItPmR1cmF0aW9ucywgMCwgc2l6ZW9mKHR4aGRyLT5kdXJhdGlvbnMpKTsKLQl0eGhkci0+dHhfYW50ZW5uYSA9IChpbmZvLT5hbnRlbm5hX3NlbF90eCA9PSAwKSA/Ci0JCTIgOiBpbmZvLT5hbnRlbm5hX3NlbF90eCAtIDE7Ci0JdHhoZHItPm91dHB1dF9wb3dlciA9IHByaXYtPm91dHB1dF9wb3dlcjsKLQl0eGhkci0+Y3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwl0eGhkci0+dHhfYW50ZW5uYSA9ICgoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPworCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxKSAmIHByaXYtPnR4X2RpdmVyc2l0eV9tYXNrOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCXR4aGRyLT5sb25nYm93LmN0c19yYXRlID0gY3RzX3JhdGU7CisJCXR4aGRyLT5sb25nYm93Lm91dHB1dF9wb3dlciA9IGNwdV90b19sZTE2KHByaXYtPm91dHB1dF9wb3dlcik7CisJfSBlbHNlIHsKKwkJdHhoZHItPm5vcm1hbC5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7CisJCXR4aGRyLT5ub3JtYWwuY3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwl9CiAJaWYgKHBhZGRpbmcpCiAJCXR4aGRyLT5hbGlnblswXSA9IHBhZGRpbmc7CiAKQEAgLTE0NjcsMTQgKzE2NDIsMTIgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLAogCQkJICAgbXNlY3NfdG9famlmZmllcyhQNTRfVFhfRlJBTUVfTElGRVRJTUUpKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKICBlcnI6CiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKnR4aGRyKSArIHBhZGRpbmcpOwotCWlmIChjdXJyZW50X3F1ZXVlKSB7Ci0JCWN1cnJlbnRfcXVldWUtPmxlbi0tOwotCQljdXJyZW50X3F1ZXVlLT5jb3VudC0tOwotCX0KKwljdXJyZW50X3F1ZXVlLT5sZW4tLTsKKwljdXJyZW50X3F1ZXVlLT5jb3VudC0tOwogCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIApAQCAtMTQ4NSw5ICsxNjU4LDggQEAKIAlzdHJ1Y3QgcDU0X3NldHVwX21hYyAqc2V0dXA7CiAJdTE2IG1vZGU7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApICsKLQkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLAotCQkJICAgIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzZXR1cCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNTA0LDE5ICsxNjc2LDI5IEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSUJTUzsKIAkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX05PTkU7CisJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCisKKwkJLyoKKwkJICogIlRSQU5TUEFSRU5UIGFuZCBQUk9NSVNDVU9VUyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorCQkgKiBTVFNXNDVYMEMgTE1BQyBBUEkgLSBwYWdlIDEyCisJCSAqLworCQlpZiAoKChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHx8CisJCSAgICAgKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9PVEhFUl9CU1MpKSAmJgorCQkgICAgKG1vZGUgIT0gUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTKSkKIAkJCW1vZGUgfD0gUDU0X0ZJTFRFUl9UWVBFX1RSQU5TUEFSRU5UOwogCX0gZWxzZQotCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1JYX0RJU0FCTEVEOworCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTsKIAogCXNldHVwLT5tYWNfbW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwogCW1lbWNweShzZXR1cC0+bWFjX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHNldHVwLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKLQlzZXR1cC0+cnhfYW50ZW5uYSA9IDI7IC8qIGF1dG9tYXRpYyAqLworCXNldHVwLT5yeF9hbnRlbm5hID0gMiAmIHByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrOyAvKiBhdXRvbWF0aWMgKi8KIAlzZXR1cC0+cnhfYWxpZ24gPSAwOwogCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgewogCQlzZXR1cC0+djEuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKQEAgLTE1NDksNzkgKzE3MzEsMTM3IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X3NjYW4gKmNoYW47CisJc3RydWN0IHA1NF9oZHIgKmhkcjsKKwlzdHJ1Y3QgcDU0X3NjYW5faGVhZCAqaGVhZDsKKwlzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgKmlxX2F1dG9jYWw7CisJdW5pb24gcDU0X3NjYW5fYm9keV91bmlvbiAqYm9keTsKKwlzdHJ1Y3QgcDU0X3NjYW5fdGFpbF9yYXRlICpyYXRlOworCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKnJzc2k7CiAJdW5zaWduZWQgaW50IGk7CiAJdm9pZCAqZW50cnk7Ci0JX19sZTE2IGZyZXEgPSBjcHVfdG9fbGUxNihkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisJX19sZTE2IGZyZXEgPSBjcHVfdG9fbGUxNihkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNoYW4pICsKLQkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX1NDQU4sCi0JCQkgICAgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmhlYWQpICsKKwkJCSAgICAyICsgc2l6ZW9mKCppcV9hdXRvY2FsKSArIHNpemVvZigqYm9keSkgKworCQkJICAgIHNpemVvZigqcmF0ZSkgKyAyICogc2l6ZW9mKCpyc3NpKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NDQU4sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNoYW4gPSAoc3RydWN0IHA1NF9zY2FuICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmNoYW4pKTsKLQltZW1zZXQoY2hhbi0+cGFkZGluZzEsIDAsIHNpemVvZihjaGFuLT5wYWRkaW5nMSkpOwotCWNoYW4tPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQljaGFuLT5kd2VsbCA9IGNwdV90b19sZTE2KGR3ZWxsKTsKKwloZWFkID0gKHN0cnVjdCBwNTRfc2Nhbl9oZWFkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWQpKTsKKwltZW1zZXQoaGVhZC0+c2Nhbl9wYXJhbXMsIDAsIHNpemVvZihoZWFkLT5zY2FuX3BhcmFtcykpOworCWhlYWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKwloZWFkLT5kd2VsbCA9IGNwdV90b19sZTE2KGR3ZWxsKTsKKwloZWFkLT5mcmVxID0gZnJlcTsKIAorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCV9fbGUxNiAqcGFfcG93ZXJfcG9pbnRzID0gKF9fbGUxNiAqKSBza2JfcHV0KHNrYiwgMik7CisJCSpwYV9wb3dlcl9wb2ludHMgPSBjcHVfdG9fbGUxNigweDBjKTsKKwl9CisKKwlpcV9hdXRvY2FsID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaXFfYXV0b2NhbCkpOwogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5pcV9hdXRvY2FsX2xlbjsgaSsrKSB7CiAJCWlmIChwcml2LT5pcV9hdXRvY2FsW2ldLmZyZXEgIT0gZnJlcSkKIAkJCWNvbnRpbnVlOwogCi0JCW1lbWNweSgmY2hhbi0+aXFfYXV0b2NhbCwgJnByaXYtPmlxX2F1dG9jYWxbaV0sCi0JCSAgICAgICBzaXplb2YoKnByaXYtPmlxX2F1dG9jYWwpKTsKKwkJbWVtY3B5KGlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLnBhcmFtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkpKTsKIAkJYnJlYWs7CiAJfQogCWlmIChpID09IHByaXYtPmlxX2F1dG9jYWxfbGVuKQogCQlnb3RvIGVycjsKIAotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXRfbGVuOyBpKyspIHsKLQkJaWYgKHByaXYtPm91dHB1dF9saW1pdFtpXS5mcmVxICE9IGZyZXEpCisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpCisJCWJvZHkgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKGJvZHktPmxvbmdib3cpKTsKKwllbHNlCisJCWJvZHkgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKGJvZHktPm5vcm1hbCkpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllczsgaSsrKSB7CisJCV9fbGUxNiAqZW50cnlfZnJlcSA9ICh2b2lkICopIChwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEgKworCQkJCSAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICogaSk7CisKKwkJaWYgKCplbnRyeV9mcmVxICE9IGZyZXEpCiAJCQljb250aW51ZTsKIAotCQljaGFuLT52YWxfYmFya2VyID0gMHgzODsKLQkJY2hhbi0+dmFsX2Jwc2sgPSBjaGFuLT5kdXBfYnBzayA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsX2Jwc2s7Ci0JCWNoYW4tPnZhbF9xcHNrID0gY2hhbi0+ZHVwX3Fwc2sgPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF9xcHNrOwotCQljaGFuLT52YWxfMTZxYW0gPSBjaGFuLT5kdXBfMTZxYW0gPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF8xNnFhbTsKLQkJY2hhbi0+dmFsXzY0cWFtID0gY2hhbi0+ZHVwXzY0cWFtID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfNjRxYW07CisJCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCQltZW1jcHkoJmJvZHktPmxvbmdib3cucG93ZXJfbGltaXRzLAorCQkJICAgICAgICh2b2lkICopIGVudHJ5X2ZyZXEgKyBzaXplb2YoX19sZTE2KSwKKwkJCSAgICAgICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqbGltaXRzID0KKwkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxOworCisJCQlib2R5LT5ub3JtYWwudmFsX2JhcmtlciA9IDB4Mzg7CisJCQlib2R5LT5ub3JtYWwudmFsX2Jwc2sgPSBib2R5LT5ub3JtYWwuZHVwX2Jwc2sgPQorCQkJCWxpbWl0cy0+dmFsX2Jwc2s7CisJCQlib2R5LT5ub3JtYWwudmFsX3Fwc2sgPSBib2R5LT5ub3JtYWwuZHVwX3Fwc2sgPQorCQkJCWxpbWl0cy0+dmFsX3Fwc2s7CisJCQlib2R5LT5ub3JtYWwudmFsXzE2cWFtID0gYm9keS0+bm9ybWFsLmR1cF8xNnFhbSA9CisJCQkJbGltaXRzLT52YWxfMTZxYW07CisJCQlib2R5LT5ub3JtYWwudmFsXzY0cWFtID0gYm9keS0+bm9ybWFsLmR1cF82NHFhbSA9CisJCQkJbGltaXRzLT52YWxfNjRxYW07CisJCX0KIAkJYnJlYWs7CiAJfQotCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdF9sZW4pCisJaWYgKGkgPT0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzKQogCQlnb3RvIGVycjsKIAotCWVudHJ5ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgeworCWVudHJ5ID0gKHZvaWQgKikocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSArIHByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCk7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXM7IGkrKykgewogCQlpZiAoKigoX19sZTE2ICopZW50cnkpICE9IGZyZXEpIHsKLQkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOwotCQkJZW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKLQkJCQkgcHJpdi0+Y3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCQkJZW50cnkgKz0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCWNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUgPSA4OwotCQltZW1zZXQoY2hhbi0+Y3VydmVfZGF0YSwgMCwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSk7Ci0JCW1lbWNweShjaGFuLT5jdXJ2ZV9kYXRhLCBlbnRyeSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCi0JCSAgICAgICBtaW4oKHU4KTgsIHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCkpOworCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LmN1cnZlX2RhdGEsCisJCQkJKHZvaWQgKikgZW50cnkgKyBzaXplb2YoX19sZTE2KSwKKwkJCQlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwNTRfc2Nhbl9ib2R5ICpjaGFuID0gJmJvZHktPm5vcm1hbDsKKwkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CisJCQkJKHZvaWQgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKworCQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7CisJCQljaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlID0gODsKKwkJCW1lbXNldChjaGFuLT5jdXJ2ZV9kYXRhLCAwLCBzaXplb2YoKmNoYW4tPmN1cnZlX2RhdGEpKTsKKwkJCW1lbWNweShjaGFuLT5jdXJ2ZV9kYXRhLCBlbnRyeSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgorCQkJICAgICAgIG1pbigodTgpOCwgY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKSk7CisJCX0KIAkJYnJlYWs7CiAJfQorCWlmIChpID09IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMpCisJCWdvdG8gZXJyOwogCi0JaWYgKHByaXYtPmZ3X3ZhciA8IDB4NTAwKSB7Ci0JCWNoYW4tPnYxX3Jzc2kubXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpOwotCQljaGFuLT52MV9yc3NpLmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKTsKLQl9IGVsc2UgewotCQljaGFuLT52Mi5yc3NpLm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKLQkJY2hhbi0+djIucnNzaS5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7Ci0JCWNoYW4tPnYyLmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7Ci0JCW1lbXNldChjaGFuLT52Mi5ydHNfcmF0ZXMsIDAsIDgpOworCWlmICgocHJpdi0+ZndfdmFyID49IDB4NTAwKSAmJiAocHJpdi0+ZndfdmFyIDwgMHg1MDkpKSB7CisJCXJhdGUgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyYXRlKSk7CisJCXJhdGUtPmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmF0ZS0+cnRzX3JhdGVzKTsgaSsrKQorCQkJcmF0ZS0+cnRzX3JhdGVzW2ldID0gaTsKIAl9CisKKwlyc3NpID0gKHN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKikgc2tiX3B1dChza2IsIHNpemVvZigqcnNzaSkpOworCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKKwlyc3NpLT5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7CisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJLyogTG9uZ2JvdyBmcm9udGVuZCBuZWVkcyBldmVyIG1vcmUgKi8KKwkJcnNzaSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwkJcnNzaS0+bXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3Vua24pOworCQlyc3NpLT5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmxvbmdib3dfdW5rMik7CisJfQorCisJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwOSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CisJfQorCisJaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gc2l6ZW9mKCpoZHIpKTsKKwogCXByaXYtPnR4KGRldiwgc2tiKTsKIAlyZXR1cm4gMDsKIApAQCAtMTYzMSwyMyArMTg3MSwyMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBtb2RlLCBpbnQgbGluaywgaW50IGFjdCkKK3N0YXRpYyBpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfbGVkICpsZWQ7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqbGVkKSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLAlQNTRfQ09OVFJPTF9UWVBFX0xFRCwKLQkJCUdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpsZWQpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsZWQgPSAoc3RydWN0IHA1NF9sZWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpsZWQpKTsKLQlsZWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQlsZWQtPmxlZF9wZXJtYW5lbnQgPSBjcHVfdG9fbGUxNihsaW5rKTsKLQlsZWQtPmxlZF90ZW1wb3JhcnkgPSBjcHVfdG9fbGUxNihhY3QpOwotCWxlZC0+ZHVyYXRpb24gPSBjcHVfdG9fbGUxNigxMDAwKTsKKwlsZWQgPSAoc3RydWN0IHA1NF9sZWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqbGVkKSk7CisJbGVkLT5mbGFncyA9IGNwdV90b19sZTE2KDB4MDAwMyk7CisJbGVkLT5tYXNrWzBdID0gbGVkLT5tYXNrWzFdID0gY3B1X3RvX2xlMTYocHJpdi0+c29mdGxlZF9zdGF0ZSk7CisJbGVkLT5kZWxheVswXSA9IGNwdV90b19sZTE2KDEpOworCWxlZC0+ZGVsYXlbMV0gPSBjcHVfdG9fbGUxNigwKTsKIAlwcml2LT50eChkZXYsIHNrYik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjY2LDkgKzE5MDUsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF9lZGNmICplZGNmOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpICsKLQkJCXNpemVvZihzdHJ1Y3QgcDU0X2hkciksIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwKLQkJCUdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCplZGNmKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTY5Miw2ICsxOTMwLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcDU0X3NldF9wcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3BzbSAqcHNtOworCXUxNiBtb2RlOworCWludCBpOworCisJaWYgKGRldi0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQorCQltb2RlID0gUDU0X1BTTSB8IFA1NF9QU01fRFRJTSB8IFA1NF9QU01fTUNCQzsKKwllbHNlCisJCW1vZGUgPSBQNTRfUFNNX0NBTTsKKworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpwc20pLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwc20gPSAoc3RydWN0IHA1NF9wc20gKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpwc20pKTsKKwlwc20tPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKwlwc20tPmFpZCA9IGNwdV90b19sZTE2KHByaXYtPmFpZCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHNtLT5pbnRlcnZhbHMpOyBpKyspIHsKKwkJcHNtLT5pbnRlcnZhbHNbaV0uaW50ZXJ2YWwgPQorCQkJY3B1X3RvX2xlMTYoZGV2LT5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLnBlcmlvZHMgPSBjcHVfdG9fbGUxNigxKTsKKwl9CisKKwlwc20tPmJlYWNvbl9yc3NpX3NraXBfbWF4ID0gNjA7CisJcHNtLT5yc3NpX2RlbHRhX3RocmVzaG9sZCA9IDA7CisJcHNtLT5uciA9IDA7CisKKwlwcml2LT50eChkZXYsIHNrYik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwNTRfYmVhY29uX3RpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCkBAIC0xNzk2LDYgKzIwNzAsOSBAQAogCiAJcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywgMCk7CiAKKwlwcml2LT5zb2Z0bGVkX3N0YXRlID0gMDsKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcmV0dXJuIGVycjsKQEAgLTE4MDgsNiArMjA4NSw5IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJcDU0X3NldF9sZWRzKGRldik7CisKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCWlmIChwcml2LT5jYWNoZWRfYmVhY29uKQogCQlwNTRfdHhfY2FuY2VsKGRldiwgcHJpdi0+Y2FjaGVkX2JlYWNvbik7CkBAIC0xODQ1LDcgKzIxMjUsNiBAQAogCiAJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCXA1NF9zZXR1cF9tYWMoZGV2KTsKLQlwNTRfc2V0X2xlZHMoZGV2LCAxLCAwLCAwKTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtMTg4NCw2ICsyMTYzLDExIEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJcmV0ID0gcDU0X3NldF9wcyhkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKQEAgLTE5MjAsOCArMjIwNCw2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBwNTRfc2V0X2xlZHMoZGV2LCAxLCAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpLCAwKTsKLQogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTE5MzUsMTIgKzIyMTcsMTEgQEAKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAogCSp0b3RhbF9mbGFncyAmPSBGSUZfUFJPTUlTQ19JTl9CU1MgfAotCQkJKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgPwotCQkJCUZJRl9GQ1NGQUlMIDogMDsKKwkJCUZJRl9PVEhFUl9CU1M7CiAKIAlwcml2LT5maWx0ZXJfZmxhZ3MgPSAqdG90YWxfZmxhZ3M7CiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTKSkKIAkJcDU0X3NldHVwX21hYyhkZXYpOwogfQogCkBAIC0xOTY3LDEwICsyMjQ4LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfeGJvd19zeW50aCAqeGJvdzsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp4Ym93KSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLAotCQkJICAgIEdGUF9LRVJORUwpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp4Ym93KSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5OTksNyArMjI3OCw3IEBACiAJICogICAgICAyLiBjYW5jZWwgc3R1Y2sgZnJhbWVzIC8gcmVzZXQgdGhlIGRldmljZSBpZiBuZWNlc3NhcnkuCiAJICovCiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9zdGF0aXN0aWNzKSwKIAkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NUQVRfUkVBREJBQ0ssIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQpAQCAtMjAyMiw4ICsyMzAxLDggQEAKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCW1lbWNweShzdGF0cywgJnByaXYtPnR4X3N0YXRzWzRdLCBzaXplb2Yoc3RhdHNbMF0pICogZGV2LT5xdWV1ZXMpOwotCisJbWVtY3B5KHN0YXRzLCAmcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLAorCSAgICAgICBzaXplb2Yoc3RhdHNbMF0pICogZGV2LT5xdWV1ZXMpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDU5LDcgKzIzMzgsNyBAQAogfQogCiBzdGF0aWMgaW50IHA1NF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwpAQCAtMjExMCw5ICsyMzg5LDggQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcnhrZXkpICsKLQkJCXNpemVvZihzdHJ1Y3QgcDU0X2hkciksCVA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcnhrZXkpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjEyMyw4ICsyNDAxLDggQEAKIAlyeGtleS0+ZW50cnkgPSBrZXktPmtleWlkeDsKIAlyeGtleS0+a2V5X2lkID0ga2V5LT5rZXlpZHg7CiAJcnhrZXktPmtleV90eXBlID0gYWxnbzsKLQlpZiAoYWRkcmVzcykKLQkJbWVtY3B5KHJ4a2V5LT5tYWMsIGFkZHJlc3MsIEVUSF9BTEVOKTsKKwlpZiAoc3RhKQorCQltZW1jcHkocnhrZXktPm1hYywgc3RhLT5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZQogCQltZW1zZXQocnhrZXktPm1hYywgfjAsIEVUSF9BTEVOKTsKIAlpZiAoa2V5LT5hbGcgIT0gQUxHX1RLSVApIHsKQEAgLTIxNDIsNiArMjQyMCw5NiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1A1NF9MRURTCitzdGF0aWMgdm9pZCBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBwNTRfbGVkX2RldiAqbGVkID0gY29udGFpbmVyX29mKGxlZF9kZXYsIHN0cnVjdCBwNTRfbGVkX2RldiwKKwkJCQkJICAgICAgIGxlZF9kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGxlZC0+aHdfZGV2OworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwkvKiBEb24ndCB0b2dnbGUgdGhlIExFRCwgd2hlbiB0aGUgZGV2aWNlIGlzIGRvd24uICovCisJaWYgKHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCisJCXJldHVybiA7CisKKwlpZiAoYnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQlwcml2LT5zb2Z0bGVkX3N0YXRlIHw9IEJJVChsZWQtPmluZGV4KTsKKwllbHNlCisJCXByaXYtPnNvZnRsZWRfc3RhdGUgJj0gfkJJVChsZWQtPmluZGV4KTsKKworCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOworCWlmIChlcnIgJiYgbmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gdXBkYXRlICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZWRfZGV2LT5uYW1lKTsKK30KKworc3RhdGljIGludCBwNTRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVkX2luZGV4LAorCQkJICAgIGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWlmIChsZWQtPnJlZ2lzdGVyZWQpCisJCXJldHVybiAtRUVYSVNUOworCisJc25wcmludGYobGVkLT5uYW1lLCBzaXplb2YobGVkLT5uYW1lKSwgInA1NC0lczo6JXMiLAorCQkgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7CisJbGVkLT5od19kZXYgPSBkZXY7CisJbGVkLT5pbmRleCA9IGxlZF9pbmRleDsKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0OworCisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2RldihkZXYtPndpcGh5KSwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBuYW1lKTsKKwllbHNlCisJCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA1NF9pbml0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwkvKgorCSAqIFRPRE86CisJICogRmlndXJlIG91dCBpZiB0aGUgRUVQUk9NIGNvbnRhaW5zIHNvbWUgaGludHMgYWJvdXQgdGhlIG51bWJlcgorCSAqIG9mIGF2YWlsYWJsZS9wcm9ncmFtbWFibGUgTEVEcyBvZiB0aGUgZGV2aWNlLgorCSAqIEJ1dCBmb3Igbm93LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZSB0d28gcHJvZ3JhbW1hYmxlIExFRHMuCisJICovCisKKwllcnIgPSBwNTRfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPmFzc29jX2xlZCwgMCwgImFzc29jIiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKGRldikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwNTRfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPnR4X2xlZCwgMSwgInR4IiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGRldikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwNTRfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChwcml2LT50eF9sZWQucmVnaXN0ZXJlZCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnByaXYtPnR4X2xlZC5sZWRfZGV2KTsKKwlpZiAocHJpdi0+YXNzb2NfbGVkLnJlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT5hc3NvY19sZWQubGVkX2Rldik7Cit9CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBwNTRfb3BzID0gewogCS50eAkJCT0gcDU0X3R4LAogCS5zdGFydAkJCT0gcDU0X3N0YXJ0LApAQCAtMjE3NSw2ICsyNTQzLDggQEAKIAlwcml2LT5iYXNpY19yYXRlX21hc2sgPSAweDE1ZjsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eF9xdWV1ZSk7CiAJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKIAkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIApAQCAtMjE4NCwxMSArMjU1NCwxMSBAQAogCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKIAogCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCi0JcHJpdi0+dHhfc3RhdHNbMF0ubGltaXQgPSAxOwkJLyogQmVhY29uIHF1ZXVlICovCi0JcHJpdi0+dHhfc3RhdHNbMV0ubGltaXQgPSAxOwkJLyogUHJvYmUgcXVldWUgZm9yIEhXIHNjYW4gKi8KLQlwcml2LT50eF9zdGF0c1syXS5saW1pdCA9IDM7CQkvKiBxdWV1ZSBmb3IgTUxNRXMgKi8KLQlwcml2LT50eF9zdGF0c1szXS5saW1pdCA9IDM7CQkvKiBCcm9hZGNhc3QgLyBNQyBxdWV1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzRdLmxpbWl0ID0gNTsJCS8qIERhdGEgKi8KKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQkVBQ09OXS5saW1pdCA9IDE7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0ZXU0NBTl0ubGltaXQgPSAxOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9NR01UXS5saW1pdCA9IDM7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0NBQl0ubGltaXQgPSAzOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9EQVRBXS5saW1pdCA9IDU7CiAJZGV2LT5xdWV1ZXMgPSAxOwogCXByaXYtPm5vaXNlID0gLTk0OwogCS8qCkBAIC0yMjEyLDEyICsyNTgyLDM3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwNTRfaW5pdF9jb21tb24pOwogCitpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKworCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihwZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIGRldmljZSAoJWQpLlxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKyNpZmRlZiBDT05GSUdfUDU0X0xFRFMKKwllcnIgPSBwNTRfaW5pdF9sZWRzKGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KKworCWRldl9pbmZvKHBkZXYsICJpcyByZWdpc3RlcmVkIGFzICclcydcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlZ2lzdGVyX2NvbW1vbik7CisKIHZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlrZnJlZShwcml2LT5pcV9hdXRvY2FsKTsKIAlrZnJlZShwcml2LT5vdXRwdXRfbGltaXQpOwogCWtmcmVlKHByaXYtPmN1cnZlX2RhdGEpOworCisjaWZkZWYgQ09ORklHX1A1NF9MRURTCisJcDU0X3VucmVnaXN0ZXJfbGVkcyhkZXYpOworI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZyZWVfY29tbW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCmluZGV4IGY1NzI5ZGUuLjc1ZWFkN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKQEAgLTI2LDEyICsyNiwxNyBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSwkJMHgwMDA3CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9EVUVUVEUzCTB4MDAwMQorI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMgkweDAwMDIKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0ZSSVNCRUUJMHgwMDAzCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9YQk9XCQkweDAwMDQKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cJMHgwMDA1CiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfTUFTSwkJMHgwMDE4CiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfUEFfREVURUNUT1IJMHgwMDAwCiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfRElTQUJMRUQJMHgwMDA4CiAjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfWklGCQkweDAwMTAKICNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfTUFTSwkweDAwMjAKLSNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfRU5BQkxFRAkweDAwMDEKKyNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfRU5BQkxFRAkweDAwMjAKICNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9NQVNLCQkweDAwNDAKICNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRAkweDAwNDAKICNkZWZpbmUgUERSX1NZTlRIXzVfR0haX01BU0sJCTB4MDA4MApAQCAtMTI1LDkgKzEzMCwxMyBAQAogCXU4IGRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHsKKwlfX2xlMTYgaXFfcGFyYW1bNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5IHsKICAgICAgICAgX19sZTE2IGZyZXE7Ci0gICAgICAgIF9fbGUxNiBpcV9wYXJhbVs0XTsKKwlzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgewpAQCAtMTgwLDYgKzE4OSwzNSBAQAogCV9fbGUxNiBhZGQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHBkYV9jb3VudHJ5IHsKKwl1OCByZWdkb21haW47CisJdTggYWxwaGEyWzJdOworCXU4IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBXYXJuaW5nOiBMb25nYm93J3Mgc3RydWN0dXJlcyBhcmUgYm9ndXMuCisgKi8KK3N0cnVjdCBwNTRfY2hhbm5lbF9vdXRwdXRfbGltaXRfbG9uZ2JvdyB7CisJX19sZTE2IHJmX3Bvd2VyX3BvaW50c1sxMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9sb25nYm93IHsKKwlfX2xlMTYgcmZfcG93ZXI7CisJX19sZTE2IHBhX2RldGVjdG9yOworCXN0cnVjdCB7CisJCV9fbGUxNiBkYXRhWzRdOworCX0gcG9pbnRzWzNdIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyIHsKKwlfX2xlMTYgZW50cmllczsKKwlfX2xlMTYgZW50cnlfc2l6ZTsKKwlfX2xlMTYgb2Zmc2V0OworCV9fbGUxNiBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKgogICogdGhpcyBkZWZpbmVzIHRoZSBQRFIgY29kZXMgdXNlZCB0byBidWlsZCBQREFzIGFzIGRlZmluZWQgaW4gZG9jdW1lbnQKICAqIG51bWJlciA1NTMxNTUuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1pcnJvcnMgdmVyc2lvbiAxLjEgb2YgdGhlCkBAIC0yMjUsOCArMjYzLDEzIEBACiAvKiByZXNlcnZlZCByYW5nZSAoMHgyMDAwIC0gMHg3ZmZmKSAqLwogCiAvKiBjdXN0b21lciByYW5nZSAoMHg4MDAwIC0gMHhmZmZmKSAqLwotI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJMHg4MDAwCi0jZGVmaW5lIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlMJMHg4MDAxCisjZGVmaW5lIFBEUl9CQVNFQkFORF9SRUdJU1RFUlMJCQkJMHg4MDAwCisjZGVmaW5lIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlMJCTB4ODAwMQorCisvKiB1c2VkIGJ5IG91ciBtb2RpZmljYXRlZCBlZXByb20gaW1hZ2UgKi8KKyNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NCQkweERFQUQKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTQkweEJFRUYKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTQkJMHhCMDVECiAKIC8qIFBEUiBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBjb3VudHJ5ICYgY291bnRyeSBsaXN0ICovCiAjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERQkJMHg4MApAQCAtMjQxLDEyICsyODQsNiBAQAogI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lPRE9PUl9PVVRET09SCTB4MzAKICNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JTkRFWAkJMHgwRgogCi0vKiBzdG9yZWQgaW4gc2tiLT5jYiAqLwotc3RydWN0IG1lbXJlY29yZCB7Ci0JdTMyIHN0YXJ0X2FkZHI7Ci0JdTMyIGVuZF9hZGRyOwotfTsKLQogc3RydWN0IHA1NF9lZXByb21fbG04NiB7CiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtMzI5LDcgKzM2Niw3IEBACiAJdTggcGFkZGluZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1lbnVtICBwNTRfdHhfZGF0YV9jcnlwdCB7CitlbnVtIHA1NF90eF9kYXRhX2NyeXB0IHsKIAlQNTRfQ1JZUFRPX05PTkUgPSAwLAogCVA1NF9DUllQVE9fV0VQLAogCVA1NF9DUllQVE9fVEtJUCwKQEAgLTM0MCw2ICszNzcsMjMgQEAKIAlQNTRfQ1JZUFRPX0FFU0NDTVAKIH07CiAKK2VudW0gcDU0X3R4X2RhdGFfcXVldWUgeworCVA1NF9RVUVVRV9CRUFDT04JPSAwLAorCVA1NF9RVUVVRV9GV1NDQU4JPSAxLAorCVA1NF9RVUVVRV9NR01UCQk9IDIsCisJUDU0X1FVRVVFX0NBQgkJPSAzLAorCVA1NF9RVUVVRV9EQVRBCQk9IDQsCisKKwlQNTRfUVVFVUVfQUNfTlVNCT0gNCwKKwlQNTRfUVVFVUVfQUNfVk8JCT0gNCwKKwlQNTRfUVVFVUVfQUNfVkkJCT0gNSwKKwlQNTRfUVVFVUVfQUNfQkUJCT0gNiwKKwlQNTRfUVVFVUVfQUNfQksJCT0gNywKKworCS8qIGtlZXAgbGFzdCAqLworCVA1NF9RVUVVRV9OVU0JCT0gOCwKK307CisKIHN0cnVjdCBwNTRfdHhfZGF0YSB7CiAJdTggcmF0ZXNldFs4XTsKIAl1OCBydHNfcmF0ZV9pZHg7CkBAIC0zNTEsOSArNDA1LDE4IEBACiAJdTggYmFja2xvZzsKIAlfX2xlMTYgZHVyYXRpb25zWzRdOwogCXU4IHR4X2FudGVubmE7Ci0JdTggb3V0cHV0X3Bvd2VyOwotCXU4IGN0c19yYXRlOwotCXU4IHVuYWxsb2MyWzNdOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGN0c19yYXRlOworCQkJX19sZTE2IG91dHB1dF9wb3dlcjsKKwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBsb25nYm93OworCQlzdHJ1Y3QgeworCQkJdTggb3V0cHV0X3Bvd2VyOworCQkJdTggY3RzX3JhdGU7CisJCQl1OCB1bmFsbG9jOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBub3JtYWw7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJdTggdW5hbGxvYzJbMl07CiAJdTggYWxpZ25bMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNDE0LDExICs0NzcsMTQgQEAKICNkZWZpbmUgUDU0X1NDQU5fQUNUSVZFIEJJVCgyKQogI2RlZmluZSBQNTRfU0NBTl9GSUxURVIgQklUKDMpCiAKLXN0cnVjdCBwNTRfc2NhbiB7CitzdHJ1Y3QgcDU0X3NjYW5faGVhZCB7CiAJX19sZTE2IG1vZGU7CiAJX19sZTE2IGR3ZWxsOwotCXU4IHBhZGRpbmcxWzIwXTsKLQlzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgaXFfYXV0b2NhbDsKKwl1OCBzY2FuX3BhcmFtc1syMF07CisJX19sZTE2IGZyZXE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9zY2FuX2JvZHkgewogCXU4IHBhX3BvaW50c19wZXJfY3VydmU7CiAJdTggdmFsX2JhcmtlcjsKIAl1OCB2YWxfYnBzazsKQEAgLTQzMCwyNSArNDk2LDI4IEBACiAJdTggZHVwX3Fwc2s7CiAJdTggZHVwXzE2cWFtOwogCXU4IGR1cF82NHFhbTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgdjFfcnNzaTsKLQotCQlzdHJ1Y3QgewotCQkJX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKLQkJCXU4IHJ0c19yYXRlc1s4XTsKLQkJCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgcnNzaTsKLQkJfSB2MiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBQNTRfU0NBTl9WMV9MRU4gMHg3MAotI2RlZmluZSBQNTRfU0NBTl9WMl9MRU4gMHg3Yworc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyB7CisJc3RydWN0IHA1NF9jaGFubmVsX291dHB1dF9saW1pdF9sb25nYm93IHBvd2VyX2xpbWl0czsKKwlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgY3VydmVfZGF0YVs4XTsKKwlfX2xlMTYgdW5rbls2XTsJCS8qIG1heWJlIG1vcmUgcG93ZXJfbGltaXRzIG9yIHJhdGVfbWFzayAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3VuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24geworCXN0cnVjdCBwNTRfc2Nhbl9ib2R5IG5vcm1hbDsKKwlzdHJ1Y3QgcDU0X3NjYW5fYm9keV9sb25nYm93IGxvbmdib3c7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSB7CisJX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKKwl1OCBydHNfcmF0ZXNbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHA1NF9sZWQgewotCV9fbGUxNiBtb2RlOwotCV9fbGUxNiBsZWRfdGVtcG9yYXJ5OwotCV9fbGUxNiBsZWRfcGVybWFuZW50OwotCV9fbGUxNiBkdXJhdGlvbjsKKwlfX2xlMTYgZmxhZ3M7CisJX19sZTE2IG1hc2tbMl07CisJX19sZTE2IGRlbGF5WzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwNTRfZWRjZiB7CkBAIC01MTEsNiArNTgwLDcgQEAKIAlfX2xlMTYgcGVyaW9kczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFA1NF9QU01fQ0FNCQkJMAogI2RlZmluZSBQNTRfUFNNCQkJCUJJVCgwKQogI2RlZmluZSBQNTRfUFNNX0RUSU0JCQlCSVQoMSkKICNkZWZpbmUgUDU0X1BTTV9NQ0JDCQkJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggYWEzNjdhMC4uZTM1NjlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtNzksNiArNzksMTIgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKHByaXYtPmNvbW1vbi5md19pbnRlcmZhY2UgIT0gRldfTE04NikgeworCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICJ3cm9uZyBmaXJtd2FyZSwgIgorCQkJInBsZWFzZSBnZXQgYSBMTTg2KFBDSSkgZmlybXdhcmUgYSB0cnkgYWdhaW4uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJZGF0YSA9IChfX2xlMzIgKikgcHJpdi0+ZmlybXdhcmUtPmRhdGE7CiAJcmVtYWlucyA9IHByaXYtPmZpcm13YXJlLT5zaXplOwogCWRldmljZV9hZGRyID0gSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUjsKQEAgLTQwNyw4ICs0MTMsNyBAQAogCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJnA1NHBfaW50ZXJydXB0LAogCQkJICBJUlFGX1NIQVJFRCwgInA1NHBjaSIsIGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTQ3MCwzMCArNDc1LDI2IEBACiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCW1lbV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCWlmIChtZW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBwNTRwX2NzcikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogVG9vIHNob3J0IFBDSSByZXNvdXJjZXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlRvbyBzaG9ydCBQQ0kgcmVzb3VyY2VzXG4iKTsKIAkJZ290byBlcnJfZGlzYWJsZV9kZXY7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAicDU0cGNpIik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2OwogCX0KIAogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSB8fAogCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIpOwogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9CiAKQEAgLTUwNSw4ICs1MDYsNyBAQAogCiAJZGV2ID0gcDU0X2luaXRfY29tbW9uKHNpemVvZigqcHJpdikpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9CkBAIC01MTksMTcgKzUxOSwxNSBAQAogCiAJcHJpdi0+bWFwID0gaW9yZW1hcChtZW1fYWRkciwgbWVtX2xlbik7CiAJaWYgKCFwcml2LT5tYXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOwotCQllcnIgPSAtRUlOVkFMOwkvLyBUT0RPOiB1c2UgYSBiZXR0ZXIgZXJyb3IgY29kZT8KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCiAJcHJpdi0+cmluZ19jb250cm9sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKCpwcml2LT5yaW5nX2NvbnRyb2wpLAogCQkJCQkJICAmcHJpdi0+cmluZ19jb250cm9sX2RtYSk7CiAJaWYgKCFwcml2LT5yaW5nX2NvbnRyb2wpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IGFsbG9jYXRlIHJpbmdzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgcmluZ3NcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3VubWFwOwogCX0KQEAgLTU0Myw4ICs1NDEsNyBAQAogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnByaXYtPmZpcm13YXJlLCAiaXNsMzg4NnBjaSIsCiAJCQkgICAgICAgJnByaXYtPnBkZXYtPmRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBjYW5ub3QgZmluZCBmaXJtd2FyZSAiCi0JCQkiKGlzbDM4ODZwY2kpXG4iLCBwY2lfbmFtZShwcml2LT5wZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIGZpcm13YXJlIChpc2wzODg2cGNpKVxuIik7CiAJCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnByaXYtPmZpcm13YXJlLCAiaXNsMzg4NiIsCiAJCQkJICAgICAgICZwcml2LT5wZGV2LT5kZXYpOwogCQlpZiAoZXJyKQpAQCAtNTU5LDEyICs1NTYsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOwogCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCWVyciA9IHA1NF9yZWdpc3Rlcl9jb21tb24oZGV2LCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKLQl9CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjIyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKQEAgLTAsMCArMSw3NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICogQ29weXJpZ2h0IDIwMDggICAgICAgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBhIHBvcnQgZnJvbSBzdGxjNDV4eDoKKyAqCUNvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSAicDU0c3BpLmgiCisjaW5jbHVkZSAicDU0c3BpX2VlcHJvbS5oIgorI2luY2x1ZGUgInA1NC5oIgorCisjaW5jbHVkZSAicDU0Y29tbW9uLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiMzgyNi5hcm0iKTsKK01PRFVMRV9BTElBUygic3RsYzQ1eHgiKTsKKworLyoKKyAqIGdwaW9zIHNob3VsZCBiZSBoYW5kbGVkIGluIGJvYXJkIGZpbGVzIGFuZCBwcm92aWRlZCB2aWEgcGxhdGZvcm0gZGF0YSwKKyAqIGJ1dCBiZWNhdXNlIGl0J3MgY3VycmVudGx5IGltcG9zc2libGUgZm9yIHA1NHNwaSB0byBoYXZlIGEgaGVhZGVyIGZpbGUKKyAqIGluIGluY2x1ZGUvbGludXgsIGxldCdzIHVzZSBtb2R1bGUgcGFyYW1hdGVycyBmb3Igbm93CisgKi8KKworc3RhdGljIGludCBwNTRzcGlfZ3Bpb19wb3dlciA9IDk3OworbW9kdWxlX3BhcmFtKHA1NHNwaV9ncGlvX3Bvd2VyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhwNTRzcGlfZ3Bpb19wb3dlciwgImdwaW8gbnVtYmVyIGZvciBwb3dlciBsaW5lIik7CisKK3N0YXRpYyBpbnQgcDU0c3BpX2dwaW9faXJxID0gODc7Cittb2R1bGVfcGFyYW0ocDU0c3BpX2dwaW9faXJxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhwNTRzcGlfZ3Bpb19pcnEsICJncGlvIG51bWJlciBmb3IgaXJxIGxpbmUiKTsKKworc3RhdGljIHZvaWQgcDU0c3BpX3NwaV9yZWFkKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHJlc3MsCisJCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCV9fbGUxNiBhZGRyOworCisJLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLworCWFkZHIgPSBjcHVfdG9fbGUxNihhZGRyZXNzIDw8IDggfCBTUElfQURSU19SRUFEX0JJVF8xNSk7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmFkZHI7CisJdFswXS5sZW4gPSBzaXplb2YoYWRkcik7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0ucnhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlzcGlfc3luYyhwcml2LT5zcGksICZtKTsKK30KKworCitzdGF0aWMgdm9pZCBwNTRzcGlfc3BpX3dyaXRlKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHJlc3MsCisJCQkgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJX19sZTE2IGFkZHI7CisKKwkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCisJYWRkciA9IGNwdV90b19sZTE2KGFkZHJlc3MgPDwgOCk7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmFkZHI7CisJdFswXS5sZW4gPSBzaXplb2YoYWRkcik7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0udHhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlpZiAobGVuICUgMikgeworCQlfX2xlMTYgbGFzdF93b3JkOworCQlsYXN0X3dvcmQgPSBjcHVfdG9fbGUxNigoKHU4ICopYnVmKVtsZW4gLSAxXSk7CisKKwkJdFsyXS50eF9idWYgPSAmbGFzdF93b3JkOworCQl0WzJdLmxlbiA9IHNpemVvZihsYXN0X3dvcmQpOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOworCX0KKworCXNwaV9zeW5jKHByaXYtPnNwaSwgJm0pOworfQorCitzdGF0aWMgdTE2IHA1NHNwaV9yZWFkMTYoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkcikKK3sKKwlfX2xlMTYgdmFsOworCisJcDU0c3BpX3NwaV9yZWFkKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiBsZTE2X3RvX2NwdSh2YWwpOworfQorCitzdGF0aWMgdTMyIHA1NHNwaV9yZWFkMzIoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkcikKK3sKKwlfX2xlMzIgdmFsOworCisJcDU0c3BpX3NwaV9yZWFkKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiBsZTMyX3RvX2NwdSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX3dyaXRlMTYoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkciwgX19sZTE2IHZhbCkKK3sKKwlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHA1NHNwaV93cml0ZTMyKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIsIF9fbGUzMiB2YWwpCit7CisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKK3N0cnVjdCBwNTRzcGlfc3BpX3JlZyB7CisJdTE2IGFkZHJlc3M7CQkvKiBfX2xlMTYgPyAqLworCXUxNiBsZW5ndGg7CisJY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcDU0c3BpX3NwaV9yZWcgcDU0c3BpX3JlZ2lzdGVyc19hcnJheVtdID0KK3sKKwl7IFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLAkzMiwgIkFSTV9JTlQgICAgICIgfSwKKwl7IFNQSV9BRFJTX0FSTV9JTlRfRU4sCQkzMiwgIkFSTV9JTlRfRU5BICIgfSwKKwl7IFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUywJMzIsICJIT1NUX0lOVCAgICAiIH0sCisJeyBTUElfQURSU19IT1NUX0lOVF9FTiwJCTMyLCAiSE9TVF9JTlRfRU5BIiB9LAorCXsgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLAkzMiwgIkhPU1RfSU5UX0FDSyIgfSwKKwl7IFNQSV9BRFJTX0dFTl9QVVJQXzEsCQkzMiwgIkdQMV9DT01NICAgICIgfSwKKwl7IFNQSV9BRFJTX0dFTl9QVVJQXzIsCQkzMiwgIkdQMl9DT01NICAgICIgfSwKKwl7IFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCTMyLCAiREVWX0NUUkxfU1RBIiB9LAorCXsgU1BJX0FEUlNfRE1BX0RBVEEsCQkxNiwgIkRNQV9EQVRBICAgICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAkxNiwgIkRNQV9XUl9DVFJMICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9MRU4sCTE2LCAiRE1BX1dSX0xFTiAgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCTMyLCAiRE1BX1dSX0JBU0UgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCwJMTYsICJETUFfUkRfQ1RSTCAiIH0sCisJeyBTUElfQURSU19ETUFfUkVBRF9MRU4sCTE2LCAiRE1BX1JEX0xFTiAgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCTMyLCAiRE1BX1JEX0JBU0UgIiB9Cit9OworCitzdGF0aWMgaW50IHA1NHNwaV93YWl0X2JpdChzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1MTYgcmVnLCBfX2xlMzIgYml0cykKK3sKKwlpbnQgaTsKKwlfX2xlMzIgYnVmZmVyOworCisJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgeworCQlwNTRzcGlfc3BpX3JlYWQocHJpdiwgcmVnLCAmYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmIChidWZmZXIgPT0gYml0cykKKwkJCXJldHVybiAxOworCisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldDsKKworCS8qIEZJWE1FOiBzaG91bGQgZHJpdmVyIHVzZSBpdCdzIG93biBzdHJ1Y3QgZGV2aWNlPyAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnByaXYtPmZpcm13YXJlLCAiMzgyNi5hcm0iLCAmcHJpdi0+c3BpLT5kZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJyZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi0+ZmlybXdhcmUpOworCWlmIChyZXQpIHsKKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5maXJtd2FyZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZWVwcm9tOworCWludCByZXQ7CisKKwkvKgorCSAqIGFsbG93IHVzZXJzIHRvIGN1c3RvbWl6ZSB0aGVpciBlZXByb20uCisJICovCisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZlZXByb20sICIzODI2LmVlcHJvbSIsICZwcml2LT5zcGktPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2luZm8oJnByaXYtPnNwaS0+ZGV2LCAibG9hZGluZyBkZWZhdWx0IGVlcHJvbS4uLlxuIik7CisJCXJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBwNTRzcGlfZWVwcm9tLAorCQkJCSAgICAgICBzaXplb2YocDU0c3BpX2VlcHJvbSkpOworCX0gZWxzZSB7CisJCWRldl9pbmZvKCZwcml2LT5zcGktPmRldiwgImxvYWRpbmcgdXNlciBlZXByb20uLi5cbiIpOworCQlyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgKHZvaWQgKikgZWVwcm9tLT5kYXRhLAorCQkJCSAgICAgICAoaW50KWVlcHJvbS0+c2l6ZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZWVwcm9tKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwNTRzcGlfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZndfbGVuLCBmd19hZGRyOworCWxvbmcgX2Z3X2xlbjsKKworCS8qIHN0b3AgdGhlIGRldmljZSAqLworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUIHwKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKSk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwgY3B1X3RvX2xlMTYoCisJCSAgICAgICBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpKTsKKworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlmd19hZGRyID0gSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUjsKKwlmd19sZW4gPSBwcml2LT5maXJtd2FyZS0+c2l6ZTsKKworCXdoaWxlIChmd19sZW4gPiAwKSB7CisJCV9md19sZW4gPSBtaW5fdChsb25nLCBmd19sZW4sIFNQSV9NQVhfUEFDS0VUX1NJWkUpOworCisJCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAorCQkJICAgICAgIGNwdV90b19sZTE2KFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUpKTsKKworCQlpZiAocDU0c3BpX3dhaXRfYml0KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAorCQkJCSAgICBjcHVfdG9fbGUzMihIT1NUX0FMTE9XRUQpKSA9PSAwKSB7CisJCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImZ3X3VwbG9hZCBub3QgYWxsb3dlZCAiCisJCQkJInRvIERNQSB3cml0ZS4iKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiwKKwkJCSAgICAgICBjcHVfdG9fbGUxNihfZndfbGVuKSk7CisJCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAorCQkJICAgICAgIGNwdV90b19sZTMyKGZ3X2FkZHIpKTsKKworCQlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBLAorCQkJCSAmcHJpdi0+ZmlybXdhcmUtPmRhdGEsIF9md19sZW4pOworCisJCWZ3X2xlbiAtPSBfZndfbGVuOworCQlmd19hZGRyICs9IF9md19sZW47CisKKwkJLyogRklYTUU6IEkgdGhpbmsgdGhpcyBkb2Vzbid0IHdvcmsgaWYgZmlybXdhcmUgaXMgbGFyZ2UsCisJCSAqIHRoaXMgbG9vcCBnb2VzIHRvIHNlY29uZCByb3VuZC4gZnctPmRhdGEgaXMgbm90CisJCSAqIGluY3JlYXNlZCBhdCBhbGwhICovCisJfQorCisJQlVHX09OKGZ3X2xlbiAhPSAwKTsKKworCS8qIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19IT1NUX0lOVF9FTiwKKwkJICAgICAgIGNwdV90b19sZTMyKFNQSV9IT1NUX0lOVFNfREVGQVVMVCkpOworCisJLyogYm9vdCB0aGUgZGV2aWNlICovCisJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwgY3B1X3RvX2xlMTYoCisJCSAgICAgICBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgfAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCkpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCkpOworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9wb3dlcl9vZmYoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlkaXNhYmxlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpKTsKKwlncGlvX3NldF92YWx1ZShwNTRzcGlfZ3Bpb19wb3dlciwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9wb3dlcl9vbihzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCWdwaW9fc2V0X3ZhbHVlKHA1NHNwaV9ncGlvX3Bvd2VyLCAxKTsKKwllbmFibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOworCisJLyoKKwkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmdodAorCSAqIGlzIGp1c3QgYSBndWVzcworCSAqLworCW1zbGVlcCgxMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfaW50X2FjayhzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1MzIgdmFsKQoreworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5UX0FDSywgY3B1X3RvX2xlMzIodmFsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV93YWtldXAoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHM7CisKKwkvKiB3YWtlIHRoZSBjaGlwICovCisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsCisJCSAgICAgICBjcHVfdG9fbGUzMihTUElfVEFSR0VUX0lOVF9XQUtFVVApKTsKKworCS8qIEFuZCB3YWl0IGZvciB0aGUgUkVBRFkgaW50ZXJydXB0ICovCisJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKworCWludHMgPSAgcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJCWdvdG8gb3V0OworCQlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCX0KKworCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9SRUFEWSk7CisKK291dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfc2xlZXAoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19BUk1fSU5URVJSVVBUUywKKwkJICAgICAgIGNwdV90b19sZTMyKFNQSV9UQVJHRVRfSU5UX1NMRUVQKSk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9pbnRfcmVhZHkoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19IT1NUX0lOVF9FTiwgY3B1X3RvX2xlMzIoCisJCSAgICAgICBTUElfSE9TVF9JTlRfVVBEQVRFIHwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkpOworCisJc3dpdGNoIChwcml2LT5md19zdGF0ZSkgeworCWNhc2UgRldfU1RBVEVfQk9PVElORzoKKwkJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKKwkJY29tcGxldGUoJnByaXYtPmZ3X2NvbXApOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRFX1JFU0VUVElORzoKKwkJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKKwkJLyogVE9ETzogcmVpbml0aWFsaXplIHN0YXRlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBwNTRzcGlfcngoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiBsZW47CisKKwlwNTRzcGlfd2FrZXVwKHByaXYpOworCisJLyogZHVtbXkgcmVhZCB0byBmbHVzaCBTUEkgRE1BIGNvbnRyb2xsZXIgYnVnICovCisJcDU0c3BpX3JlYWQxNihwcml2LCBTUElfQURSU19HRU5fUFVSUF8xKTsKKworCWxlbiA9IHA1NHNwaV9yZWFkMTYocHJpdiwgU1BJX0FEUlNfRE1BX0RBVEEpOworCisJaWYgKGxlbiA9PSAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicnggcmVxdWVzdCBvZiB6ZXJvIGJ5dGVzIik7CisJCXJldHVybiAwOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKKwlpZiAoIXNrYikgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImNvdWxkIG5vdCBhbGxvYyBza2IiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcDU0c3BpX3NwaV9yZWFkKHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBLCBza2JfcHV0KHNrYiwgbGVuKSwgbGVuKTsKKwlwNTRzcGlfc2xlZXAocHJpdik7CisKKwlpZiAocDU0X3J4KHByaXYtPmh3LCBza2IpID09IDApCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwNTRzcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmNvbmZpZykKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29uZmlnOworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCXF1ZXVlX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHA1NHNwaV90eF9mcmFtZShzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBwNTRzX2RtYV9yZWdzIGRtYV9yZWdzOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgaW50czsKKworCXA1NHNwaV93YWtldXAocHJpdik7CisKKwlkbWFfcmVncy5jbWQgPSBjcHVfdG9fbGUxNihTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFKTsKKwlkbWFfcmVncy5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJZG1hX3JlZ3MuYWRkciA9IGhkci0+cmVxX2lkOworCisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgJmRtYV9yZWdzLAorCQkJICAgc2l6ZW9mKGRtYV9yZWdzKSk7CisKKwlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOworCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJd2hpbGUgKCEoaW50cyAmIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiV1JfUkVBRFkgdGltZW91dCIpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCX0KKworCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSk7CisJcDU0c3BpX3NsZWVwKHByaXYpOworCitvdXQ6CisJaWYgKEZSRUVfQUZURVJfVFgoc2tiKSkKKwkJcDU0X2ZyZWVfc2tiKHByaXYtPmh3LCBza2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3dxX3R4KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHA1NHNfdHhfaW5mbyAqZW50cnk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IHA1NF90eF9pbmZvICptaW5mbzsKKwlzdHJ1Y3QgcDU0c190eF9pbmZvICpkaW5mbzsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPnR4X3BlbmRpbmcpKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShwcml2LT50eF9wZW5kaW5nLm5leHQsCisJCQkJICAgc3RydWN0IHA1NHNfdHhfaW5mbywgdHhfbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmZW50cnktPnR4X2xpc3QpOworCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCQlkaW5mbyA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBlbnRyeSwgc3RydWN0IHA1NHNfdHhfaW5mbywKKwkJCQkgICAgIHR4X2xpc3QpOworCQltaW5mbyA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBkaW5mbywgc3RydWN0IHA1NF90eF9pbmZvLAorCQkJCSAgICAgZGF0YSk7CisJCWluZm8gPSBjb250YWluZXJfb2YoKHZvaWQgKikgbWluZm8sIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywKKwkJCQkgICAgcmF0ZV9kcml2ZXJfZGF0YSk7CisJCXNrYiA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBpbmZvLCBzdHJ1Y3Qgc2tfYnVmZiwgY2IpOworCisJCXJldCA9IHA1NHNwaV90eF9mcmFtZShwcml2LCBza2IpOworCisJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCXA1NF9mcmVlX3NrYihwcml2LT5odywgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IHA1NF90eF9pbmZvICptaSA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcDU0c190eF9pbmZvICpkaSA9IChzdHJ1Y3QgcDU0c190eF9pbmZvICopIG1pLT5kYXRhOworCisJQlVJTERfQlVHX09OKHNpemVvZigqZGkpID4gc2l6ZW9mKChtaS0+ZGF0YSkpKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZGktPnR4X2xpc3QsICZwcml2LT50eF9wZW5kaW5nKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlxdWV1ZV93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHA1NHNfcHJpdiwgd29yayk7CisJdTMyIGludHM7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCWlmIChwcml2LT5md19zdGF0ZSA9PSBGV19TVEFURV9PRkYgJiYKKwkgICAgcHJpdi0+Zndfc3RhdGUgPT0gRldfU1RBVEVfUkVTRVQpCisJCWdvdG8gb3V0OworCisJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKworCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSB7CisJCXA1NHNwaV9pbnRfcmVhZHkocHJpdik7CisJCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9SRUFEWSk7CisJfQorCisJaWYgKHByaXYtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQorCQlnb3RvIG91dDsKKworCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1VQREFURSkgeworCQlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfVVBEQVRFKTsKKwkJcmV0ID0gcDU0c3BpX3J4KHByaXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpIHsKKwkJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7CisJCXJldCA9IHA1NHNwaV9yeChwcml2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBwNTRzcGlfd3FfdHgocHJpdik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHA1NHNwaV9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdXRleCkpIHsKKwkJcmV0ID0gLUVJTlRSOworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX0JPT1RJTkc7CisKKwlwNTRzcGlfcG93ZXJfb24ocHJpdik7CisKKwlyZXQgPSBwNTRzcGlfdXBsb2FkX2Zpcm13YXJlKGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZwcml2LT5md19jb21wLAorCQkJCQkJCSAgICB0aW1lb3V0KTsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJmaXJtd2FyZSBib290IGZhaWxlZCIpOworCQlwNTRzcGlfcG93ZXJfb2ZmKHByaXYpOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXV0ZXgpKSB7CisJCXJldCA9IC1FSU5UUjsKKwkJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwkJZ290byBvdXQ7CisJfQorCisJV0FSTl9PTihwcml2LT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KSkgeworCQkvKiBGSVhNRTogaG93IHRvIGhhbmRsZSB0aGlzIGVycm9yPyAqLworCQlyZXR1cm47CisJfQorCisJV0FSTl9PTihwcml2LT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7CisKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53b3JrKTsKKworCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dHhfcGVuZGluZyk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9PRkY7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHA1NHNwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWludCByZXQgPSAtRUlOVkFMOworCisJaHcgPSBwNTRfaW5pdF9jb21tb24oc2l6ZW9mKCpwcml2KSk7CisJaWYgKCFodykgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgcHJpdik7CisJcHJpdi0+c3BpID0gc3BpOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpLT5tYXhfc3BlZWRfaHogPSAyNDAwMDAwMDsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAic3BpX3NldHVwIGZhaWxlZCIpOworCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QocDU0c3BpX2dwaW9fcG93ZXIsICJwNTRzcGkgcG93ZXIiKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHA1NHNwaV9ncGlvX2lycSwgInA1NHNwaSBpcnEiKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImlycSBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChwNTRzcGlfZ3Bpb19wb3dlciwgMCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQocDU0c3BpX2dwaW9faXJxKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksCisJCQkgIHA1NHNwaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJwNTRzcGkiLAorCQkJICBwcml2LT5zcGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicmVxdWVzdF9pcnEoKSBmYWlsZWQiKTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksCisJCSAgICAgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSk7CisKKwlJTklUX1dPUksoJnByaXYtPndvcmssIHA1NHNwaV93b3JrKTsKKwlpbml0X2NvbXBsZXRpb24oJnByaXYtPmZ3X2NvbXApOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT50eF9wZW5kaW5nKTsKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZzcGktPmRldik7CisJcHJpdi0+Y29tbW9uLm9wZW4gPSBwNTRzcGlfb3Bfc3RhcnQ7CisJcHJpdi0+Y29tbW9uLnN0b3AgPSBwNTRzcGlfb3Bfc3RvcDsKKwlwcml2LT5jb21tb24udHggPSBwNTRzcGlfb3BfdHg7CisKKwlyZXQgPSBwNTRzcGlfcmVxdWVzdF9maXJtd2FyZShodyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCisJcmV0ID0gcDU0c3BpX3JlcXVlc3RfZWVwcm9tKGh3KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKworCXJldCA9IHA1NF9yZWdpc3Rlcl9jb21tb24oaHcsICZwcml2LT5zcGktPmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfY29tbW9uOgorCXA1NF9mcmVlX2NvbW1vbihwcml2LT5odyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcDU0c3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKworCWZyZWVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksIHNwaSk7CisKKwlncGlvX2ZyZWUocDU0c3BpX2dwaW9fcG93ZXIpOworCWdwaW9fZnJlZShwNTRzcGlfZ3Bpb19pcnEpOworCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZmlybXdhcmUpOworCisJbXV0ZXhfZGVzdHJveSgmcHJpdi0+bXV0ZXgpOworCisJcDU0X2ZyZWVfY29tbW9uKHByaXYtPmh3KTsKKwlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgcDU0c3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkvKiB1c2UgY3gzMTEweCBuYW1lIGJlY2F1c2UgYm9hcmQtbjgwMC5jIHVzZXMgdGhhdCBmb3IgdGhlCisJCSAqIFNQSSBwb3J0ICovCisJCS5uYW1lCQk9ICJjeDMxMTB4IiwKKwkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKworCS5wcm9iZQkJPSBwNTRzcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwNTRzcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHA1NHNwaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnA1NHNwaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIFNQSSBkcml2ZXI6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHA1NHNwaV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZwNTRzcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocDU0c3BpX2luaXQpOworbW9kdWxlX2V4aXQocDU0c3BpX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiZThkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogVGhpcyBkcml2ZXIgaXMgYSBwb3J0IGZyb20gc3RsYzQ1eHg6CisgKglDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIFA1NFNQSV9ICisjZGVmaW5lIFA1NFNQSV9ICisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInA1NC5oIgorCisvKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KKyNkZWZpbmUgU1BJX0FEUlNfUkVBRF9CSVRfMTUJCTB4ODAwMAorCisjZGVmaW5lIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTCQkweDAwCisjZGVmaW5lIFNQSV9BRFJTX0FSTV9JTlRfRU4JCTB4MDQKKworI2RlZmluZSBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMJMHgwOAorI2RlZmluZSBTUElfQURSU19IT1NUX0lOVF9FTgkJMHgwYworI2RlZmluZSBTUElfQURSU19IT1NUX0lOVF9BQ0sJCTB4MTAKKworI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8xCQkweDE0CisjZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzIJCTB4MTgKKworI2RlZmluZSBTUElfQURSU19ERVZfQ1RSTF9TVEFUCQkweDI2ICAgIC8qIGhpZ2ggd29yZCAqLworCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9EQVRBCQkweDI4CisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwJCTB4MmMKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTgkJMHgyZQorI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfQkFTRQkJMHgzMAorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0NUUkwJCTB4MzQKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOCQkweDM2CisjZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0JBU0UJCTB4MzgKKworI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUJMHg4MDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVECTB4NDAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX1JBTV9CT09UCQkweDIwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCTB4MTAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfQ1BVX0VOCTB4MDgwMAorCisjZGVmaW5lIFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUJMHgwMDAxCisjZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRQkweDAwMDEKKyNkZWZpbmUgSE9TVF9BTExPV0VECQkJKDEgPDwgNykKKworI2RlZmluZSBTUElfVElNRU9VVAkJCTEwMCAgICAgICAgIC8qIG1zZWMgKi8KKworI2RlZmluZSBTUElfTUFYX1RYX1BBQ0tFVFMJCTMyCisKKyNkZWZpbmUgU1BJX01BWF9QQUNLRVRfU0laRQkJMzI3NjcKKworI2RlZmluZSBTUElfVEFSR0VUX0lOVF9XQUtFVVAJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfU0xFRVAJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfUkRET05FCQkweDAwMDAwMDA0CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTCQkweDAwMDA0MDAwCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX0RSCQkweDAwMDA4MDAwCisKKyNkZWZpbmUgU1BJX0hPU1RfSU5UX1JFQURZCQkweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9XUl9SRUFEWQkJMHgwMDAwMDAwMgorI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFCQkweDAwMDAwMDA0CisjZGVmaW5lIFNQSV9IT1NUX0lOVF9VUERBVEUJCTB4MTAwMDAwMDAKKworLyogY2xlYXIgdG8gc2VuZCAqLworI2RlZmluZSBTUElfSE9TVF9JTlRfQ1IJCQkweDAwMDA0MDAwCisKKy8qIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgU1BJX0hPU1RfSU5UX0RSCQkJMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCAJCQkJCQkgICAgXAorCShTUElfSE9TVF9JTlRfUkVBRFkgfCBTUElfSE9TVF9JTlRfVVBEQVRFIHwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkKKworI2RlZmluZSBUQVJHRVRfQk9PVF9TTEVFUCA1MAorCitzdHJ1Y3QgcDU0c19kbWFfcmVncyB7CisJX19sZTE2IGNtZDsKKwlfX2xlMTYgbGVuOworCV9fbGUzMiBhZGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRzX3R4X2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgdHhfbGlzdDsKK307CisKK3N0cnVjdCBwNTRzX3ByaXYgeworCS8qIHA1NF9jb21tb24gaGFzIHRvIGJlIHRoZSBmaXJzdCBlbnRyeSAqLworCXN0cnVjdCBwNTRfY29tbW9uIGNvbW1vbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKKworCXNwaW5sb2NrX3QgdHhfbG9jazsKKworCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOworCisJZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworfTsKKworI2VuZGlmIC8qIFA1NFNQSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpX2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaV9lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWExMDUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaV9lZXByb20uaApAQCAtMCwwICsxLDY3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBDb25leGFudCBBbWVyaWNhcyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogYmFzZWQgb246CisgKiAgLSBjeDMxMTB4J3MgcGRhLmggZnJvbSBOb2tpYQorICogIC0gY3gzMTEwLXRyYW5zZmVyLmxvZyBieSBKb2hhbm5lcyBCZXJnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBQNTRTUElfRUVQUk9NX0gKKyNkZWZpbmUgUDU0U1BJX0VFUFJPTV9ICisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHA1NHNwaV9lZXByb21bXSA9IHsKKworLyogc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqLworMHg0NywgMHg0ZCwgMHg1NSwgMHhhYSwJLyogbWFnaWMgKi8KKzB4MDAsIDB4MDAsCQkvKiBwYWQgKi8KKzB4MDAsIDB4MDAsCQkvKiBlZXByb21fcGRhX2RhdGFfd3JhcCBsZW5ndGggKi8KKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIGFybSBvcGNvZGUgKi8KKworLyogYm9ndXMgTUFDIGFkZHJlc3MgKi8KKzB4MDQsIDB4MDAsIDB4MDEsIDB4MDEsCQkvKiBQRFJfTUFDX0FERFJFU1MgKi8KKwkweDAwLCAweDAyLCAweGVlLCAweGMwLCAweGZmLCAweGVlLAorCisvKiBzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKi8KKzB4MDYsIDB4MDAsIDB4MDEsIDB4MTAsCQkvKiBQRFJfSU5URVJGQUNFX0xJU1QgKi8KKwkweDAwLCAweDAwLAkJCS8qIHJvbGUgKi8KKwkweDBmLCAweDAwLAkJCS8qIGlmX2lkICovCisJMHg4NSwgMHgwMCwJCQkvKiB2YXJpYW50ID0gTG9uZ2JvdyBSRiwgMkdIeiAqLworCTB4MDEsIDB4MDAsCQkJLyogYnRtX2NvbXBhdCAqLworCTB4MWYsIDB4MDAsCQkJLyogdG9wX2NvbXBhdCAqLworCisweDAzLCAweDAwLCAweDAyLCAweDEwLAkJLyogUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRCAqLworCTB4MDMsIDB4MjAsIDB4MDAsIDB4NDMsCisKKy8qIHN0cnVjdCBwZGFfY291bnRyeVs2XSAqLworMHgwZCwgMHgwMCwgMHgwNywgMHgxMCwJCS8qIFBEUl9DT1VOVFJZX0xJU1QgKi8KKwkweDEwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKworLyogc3RydWN0IHBkYV9jb3VudHJ5ICovCisweDAzLCAweDAwLCAweDA4LCAweDEwLAkJLyogUERSX0RFRkFVTFRfQ09VTlRSWSAqLworCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsCQkvKiBFVFNJICovCisKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MTEsCQkvKiBQRFJfQU5URU5OQV9HQUlOICovCisJMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwKKworMHgwOSwgMHgwMCwgMHhhZCwgMHhkZSwJCS8qIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTSAqLworCTB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKworLyogc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqLworMHgxMCwgMHgwNiwgMHg1ZCwgMHhiMCwJCS8qIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT00gKi8KKwkweDBkLCAweDAwLCAweGVlLCAweDAwLAkJLyogMTMgZW50cmllcywgMjM4IGJ5dGVzIHBlciBlbnRyeSAqLworCTB4MDAsIDB4MDAsIDB4MTYsIDB4MGMsCQkvKiBubyBvZmZzZXQsIDMwOTQgdG90YWwgbGVuICovCisJCS8qIDI0MTIgTUh6ICovCisJCTB4NmMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDlhLCAweDg0LAorCQkJCTB4YWEsIDB4OGEsIDB4YWEsIDB4OGEsIDB4YWEsIDB4OGEsIDB4YWEsIDB4OGEsCisJCQkJMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwKKwkJCQkweDNjLCAweGI2LCAweDNjLCAweGI2LCAweDNjLCAweGI2LCAweDNjLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHg5NCwgMHg2YywKKwkJCQkweDk5LCAweDgyLCAweDk5LCAweDgyLCAweDk5LCAweDgyLCAweDk5LCAweDgyLAorCQkJCTB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsCisJCQkJMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4YWEsIDB4NWEsCisJCQkJMHg4OCwgMHg3YSwgMHg4OCwgMHg3YSwgMHg4OCwgMHg3YSwgMHg4OCwgMHg3YSwKKwkJCQkweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LAorCQkJCTB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweGYzLCAweDQ3LAorCQkJCTB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsIDB4NmUsCisJCQkJMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwKKwkJCQkweDAwLCAweDlhLCAweDAwLCAweDlhLCAweDAwLCAweDlhLCAweDAwLCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHg1OSwgMHgzNiwKKwkJCQkweDQzLCAweDVhLCAweDQzLCAweDVhLCAweDQzLCAweDVhLCAweDQzLCAweDVhLAorCQkJCTB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsCisJCQkJMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsCisJCQkJMHgxOCwgMHg0NiwgMHgxOCwgMHg0NiwgMHgxOCwgMHg0NiwgMHgxOCwgMHg0NiwKKwkJCQkweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLAorCQkJCTB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDE3IE1IeiAqLworCQkweDcxLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhiOSwgMHg4MywKKwkJCQkweDdkLCAweDhhLCAweDdkLCAweDhhLCAweDdkLCAweDhhLCAweDdkLCAweDhhLAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkJMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MmUsIDB4NmMsCisJCQkJMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJCTB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDhkLCAweDVhLAorCQkJCTB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCQkweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgwYSwgMHg0OCwKKwkJCQkweDMyLCAweDZlLCAweDMyLCAweDZlLCAweDMyLCAweDZlLCAweDMyLCAweDZlLAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkJMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4N2MsIDB4MzYsCisJCQkJMHhmYywgMHg1OSwgMHhmYywgMHg1OSwgMHhmYywgMHg1OSwgMHhmYywgMHg1OSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJCTB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGY1LCAweDJkLAorCQkJCTB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCQkweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQyMiBNSHogKi8KKwkJMHg3NiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4YjksIDB4ODMsCisJCQkJMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDJlLCAweDZjLAorCQkJCTB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg4ZCwgMHg1YSwKKwkJCQkweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MGEsIDB4NDgsCisJCQkJMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDdjLCAweDM2LAorCQkJCTB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHhmNSwgMHgyZCwKKwkJCQkweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MjcgTUh6ICovCisJCTB4N2IsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDQ4LCAweDgzLAorCQkJCTB4NjcsIDB4OGEsIDB4NjcsIDB4OGEsIDB4NjcsIDB4OGEsIDB4NjcsIDB4OGEsCisJCQkJMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwKKwkJCQkweGY5LCAweGI1LCAweGY5LCAweGI1LCAweGY5LCAweGI1LCAweGY5LCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHhmYiwgMHg2YiwKKwkJCQkweDUwLCAweDgyLCAweDUwLCAweDgyLCAweDUwLCAweDgyLCAweDUwLCAweDgyLAorCQkJCTB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsCisJCQkJMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4N2UsIDB4NWEsCisJCQkJMHgzOCwgMHg3YSwgMHgzOCwgMHg3YSwgMHgzOCwgMHg3YSwgMHgzOCwgMHg3YSwKKwkJCQkweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LAorCQkJCTB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDE1LCAweDQ4LAorCQkJCTB4MTQsIDB4NmUsIDB4MTQsIDB4NmUsIDB4MTQsIDB4NmUsIDB4MTQsIDB4NmUsCisJCQkJMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwKKwkJCQkweGE2LCAweDk5LCAweGE2LCAweDk5LCAweGE2LCAweDk5LCAweGE2LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHg4ZSwgMHgzNiwKKwkJCQkweGQ5LCAweDU5LCAweGQ5LCAweDU5LCAweGQ5LCAweDU5LCAweGQ5LCAweDU5LAorCQkJCTB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsCisJCQkJMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MmQsCisJCQkJMHg5ZCwgMHg0NSwgMHg5ZCwgMHg0NSwgMHg5ZCwgMHg0NSwgMHg5ZCwgMHg0NSwKKwkJCQkweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLAorCQkJCTB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDMyIE1IeiAqLworCQkweDgwLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhkNywgMHg4MiwKKwkJCQkweDUxLCAweDhhLCAweDUxLCAweDhhLCAweDUxLCAweDhhLCAweDUxLCAweDhhLAorCQkJCTB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsCisJCQkJMHhlMywgMHhiNSwgMHhlMywgMHhiNSwgMHhlMywgMHhiNSwgMHhlMywgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4YzgsIDB4NmIsCisJCQkJMHgzNywgMHg4MiwgMHgzNywgMHg4MiwgMHgzNywgMHg4MiwgMHgzNywgMHg4MiwKKwkJCQkweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLAorCQkJCTB4YzksIDB4YWQsIDB4YzksIDB4YWQsIDB4YzksIDB4YWQsIDB4YzksIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDZmLCAweDVhLAorCQkJCTB4MWQsIDB4N2EsIDB4MWQsIDB4N2EsIDB4MWQsIDB4N2EsIDB4MWQsIDB4N2EsCisJCQkJMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwKKwkJCQkweGFmLCAweGE1LCAweGFmLCAweGE1LCAweGFmLCAweGE1LCAweGFmLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgyMCwgMHg0OCwKKwkJCQkweGY2LCAweDZkLCAweGY2LCAweDZkLCAweGY2LCAweDZkLCAweGY2LCAweDZkLAorCQkJCTB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksCisJCQkJMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4OWYsIDB4MzYsCisJCQkJMHhiNSwgMHg1OSwgMHhiNSwgMHg1OSwgMHhiNSwgMHg1OSwgMHhiNSwgMHg1OSwKKwkJCQkweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LAorCQkJCTB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDA2LCAweDJlLAorCQkJCTB4NzQsIDB4NDUsIDB4NzQsIDB4NDUsIDB4NzQsIDB4NDUsIDB4NzQsIDB4NDUsCisJCQkJMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwKKwkJCQkweDA2LCAweDcxLCAweDA2LCAweDcxLCAweDA2LCAweDcxLCAweDA2LCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQzNyBNSHogKi8KKwkJMHg4NSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NjcsIDB4ODIsCisJCQkJMHgzYSwgMHg4YSwgMHgzYSwgMHg4YSwgMHgzYSwgMHg4YSwgMHgzYSwgMHg4YSwKKwkJCQkweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LAorCQkJCTB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweDk1LCAweDZiLAorCQkJCTB4MWYsIDB4ODIsIDB4MWYsIDB4ODIsIDB4MWYsIDB4ODIsIDB4MWYsIDB4ODIsCisJCQkJMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwKKwkJCQkweGIxLCAweGFkLCAweGIxLCAweGFkLCAweGIxLCAweGFkLCAweGIxLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg2MSwgMHg1YSwKKwkJCQkweDAyLCAweDdhLCAweDAyLCAweDdhLCAweDAyLCAweDdhLCAweDAyLCAweDdhLAorCQkJCTB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsCisJCQkJMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MmMsIDB4NDgsCisJCQkJMHhkOCwgMHg2ZCwgMHhkOCwgMHg2ZCwgMHhkOCwgMHg2ZCwgMHhkOCwgMHg2ZCwKKwkJCQkweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LAorCQkJCTB4NmEsIDB4OTksIDB4NmEsIDB4OTksIDB4NmEsIDB4OTksIDB4NmEsIDB4OTksCisJCQkweDUwLCAweDAwLCAweGIxLCAweDM2LAorCQkJCTB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwZiwgMHgyZSwKKwkJCQkweDRiLCAweDQ1LCAweDRiLCAweDQ1LCAweDRiLCAweDQ1LCAweDRiLCAweDQ1LAorCQkJCTB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsCisJCQkJMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NDIgTUh6ICovCisJCTB4OGEsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGY2LCAweDgxLAorCQkJCTB4MjQsIDB4OGEsIDB4MjQsIDB4OGEsIDB4MjQsIDB4OGEsIDB4MjQsIDB4OGEsCisJCQkJMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwKKwkJCQkweGI2LCAweGI1LCAweGI2LCAweGI1LCAweGI2LCAweGI1LCAweGI2LCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHg2MiwgMHg2YiwKKwkJCQkweDA2LCAweDgyLCAweDA2LCAweDgyLCAweDA2LCAweDgyLCAweDA2LCAweDgyLAorCQkJCTB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsCisJCQkJMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4NTIsIDB4NWEsCisJCQkJMHhlNywgMHg3OSwgMHhlNywgMHg3OSwgMHhlNywgMHg3OSwgMHhlNywgMHg3OSwKKwkJCQkweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LAorCQkJCTB4NzksIDB4YTUsIDB4NzksIDB4YTUsIDB4NzksIDB4YTUsIDB4NzksIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDM3LCAweDQ4LAorCQkJCTB4YmEsIDB4NmQsIDB4YmEsIDB4NmQsIDB4YmEsIDB4NmQsIDB4YmEsIDB4NmQsCisJCQkJMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwKKwkJCQkweDRjLCAweDk5LCAweDRjLCAweDk5LCAweDRjLCAweDk5LCAweDRjLCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjMiwgMHgzNiwKKwkJCQkweDZlLCAweDU5LCAweDZlLCAweDU5LCAweDZlLCAweDU5LCAweDZlLCAweDU5LAorCQkJCTB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsCisJCQkJMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTcsIDB4MmUsCisJCQkJMHgyMiwgMHg0NSwgMHgyMiwgMHg0NSwgMHgyMiwgMHg0NSwgMHgyMiwgMHg0NSwKKwkJCQkweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLAorCQkJCTB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDQ3IE1IeiAqLworCQkweDhmLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg3NSwgMHg4MywKKwkJCQkweDYxLCAweDhhLCAweDYxLCAweDhhLCAweDYxLCAweDhhLCAweDYxLCAweDhhLAorCQkJCTB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsCisJCQkJMHhmMywgMHhiNSwgMHhmMywgMHhiNSwgMHhmMywgMHhiNSwgMHhmMywgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4NGIsIDB4NmMsCisJCQkJMHgzZiwgMHg4MiwgMHgzZiwgMHg4MiwgMHgzZiwgMHg4MiwgMHgzZiwgMHg4MiwKKwkJCQkweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLAorCQkJCTB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweGRhLCAweDVhLAorCQkJCTB4MWMsIDB4N2EsIDB4MWMsIDB4N2EsIDB4MWMsIDB4N2EsIDB4MWMsIDB4N2EsCisJCQkJMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwKKwkJCQkweGFlLCAweGE1LCAweGFlLCAweGE1LCAweGFlLCAweGE1LCAweGFlLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHg2ZCwgMHg0OCwKKwkJCQkweGU5LCAweDZkLCAweGU5LCAweDZkLCAweGU5LCAweDZkLCAweGU5LCAweDZkLAorCQkJCTB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksCisJCQkJMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4YzYsIDB4MzYsCisJCQkJMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJCTB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDE1LCAweDJlLAorCQkJCTB4M2MsIDB4NDUsIDB4M2MsIDB4NDUsIDB4M2MsIDB4NDUsIDB4M2MsIDB4NDUsCisJCQkJMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwKKwkJCQkweGNlLCAweDcwLCAweGNlLCAweDcwLCAweGNlLCAweDcwLCAweGNlLCAweDcwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQ1MiBNSHogKi8KKwkJMHg5NCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZjQsIDB4ODQsCisJCQkJMHg5ZSwgMHg4YSwgMHg5ZSwgMHg4YSwgMHg5ZSwgMHg4YSwgMHg5ZSwgMHg4YSwKKwkJCQkweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LAorCQkJCTB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDM0LCAweDZkLAorCQkJCTB4NzcsIDB4ODIsIDB4NzcsIDB4ODIsIDB4NzcsIDB4ODIsIDB4NzcsIDB4ODIsCisJCQkJMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwKKwkJCQkweDA5LCAweGFlLCAweDA5LCAweGFlLCAweDA5LCAweGFlLCAweDA5LCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHg2MiwgMHg1YiwKKwkJCQkweDUwLCAweDdhLCAweDUwLCAweDdhLCAweDUwLCAweDdhLCAweDUwLCAweDdhLAorCQkJCTB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsCisJCQkJMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4YTIsIDB4NDgsCisJCQkJMHgxNywgMHg2ZSwgMHgxNywgMHg2ZSwgMHgxNywgMHg2ZSwgMHgxNywgMHg2ZSwKKwkJCQkweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LAorCQkJCTB4YTksIDB4OTksIDB4YTksIDB4OTksIDB4YTksIDB4OTksIDB4YTksIDB4OTksCisJCQkweDUwLCAweDAwLCAweGM5LCAweDM2LAorCQkJCTB4YjcsIDB4NTksIDB4YjcsIDB4NTksIDB4YjcsIDB4NTksIDB4YjcsIDB4NTksCisJCQkJMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwKKwkJCQkweDQ5LCAweDg1LCAweDQ5LCAweDg1LCAweDQ5LCAweDg1LCAweDQ5LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgxMiwgMHgyZSwKKwkJCQkweDU3LCAweDQ1LCAweDU3LCAweDQ1LCAweDU3LCAweDQ1LCAweDU3LCAweDQ1LAorCQkJCTB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsCisJCQkJMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NTIgTUh6ICovCisJCTB4OTksIDB4MDksCisJCQkweDEwLCAweDAxLCAweDc0LCAweDg2LAorCQkJCTB4ZGIsIDB4OGEsIDB4ZGIsIDB4OGEsIDB4ZGIsIDB4OGEsIDB4ZGIsIDB4OGEsCisJCQkJMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwKKwkJCQkweDZkLCAweGI2LCAweDZkLCAweGI2LCAweDZkLCAweGI2LCAweDZkLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgxZSwgMHg2ZSwKKwkJCQkweGIwLCAweDgyLCAweGIwLCAweDgyLCAweGIwLCAweDgyLCAweGIwLCAweDgyLAorCQkJCTB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsCisJCQkJMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4ZWIsIDB4NWIsCisJCQkJMHg4NSwgMHg3YSwgMHg4NSwgMHg3YSwgMHg4NSwgMHg3YSwgMHg4NSwgMHg3YSwKKwkJCQkweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LAorCQkJCTB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweGQ4LCAweDQ4LAorCQkJCTB4NDYsIDB4NmUsIDB4NDYsIDB4NmUsIDB4NDYsIDB4NmUsIDB4NDYsIDB4NmUsCisJCQkJMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwKKwkJCQkweGQ4LCAweDk5LCAweGQ4LCAweDk5LCAweGQ4LCAweDk5LCAweGQ4LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjZCwgMHgzNiwKKwkJCQkweGRiLCAweDU5LCAweGRiLCAweDU5LCAweGRiLCAweDU5LCAweGRiLCAweDU5LAorCQkJCTB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsCisJCQkJMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTAsIDB4MmUsCisJCQkJMHg3MSwgMHg0NSwgMHg3MSwgMHg0NSwgMHg3MSwgMHg0NSwgMHg3MSwgMHg0NSwKKwkJCQkweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLAorCQkJCTB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNTU3IE1IeiAqLworCQkweDllLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmMywgMHg4NywKKwkJCQkweDE3LCAweDhiLCAweDE3LCAweDhiLCAweDE3LCAweDhiLCAweDE3LCAweDhiLAorCQkJCTB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsCisJCQkJMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MDcsIDB4NmYsCisJCQkJMHhlOSwgMHg4MiwgMHhlOSwgMHg4MiwgMHhlOSwgMHg4MiwgMHhlOSwgMHg4MiwKKwkJCQkweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLAorCQkJCTB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweDczLCAweDVjLAorCQkJCTB4YmEsIDB4N2EsIDB4YmEsIDB4N2EsIDB4YmEsIDB4N2EsIDB4YmEsIDB4N2EsCisJCQkJMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwKKwkJCQkweDRjLCAweGE2LCAweDRjLCAweGE2LCAweDRjLCAweGE2LCAweDRjLCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHgwZCwgMHg0OSwKKwkJCQkweDc0LCAweDZlLCAweDc0LCAweDZlLCAweDc0LCAweDZlLCAweDc0LCAweDZlLAorCQkJCTB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsCisJCQkJMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4ZDEsIDB4MzYsCisJCQkJMHhmZiwgMHg1OSwgMHhmZiwgMHg1OSwgMHhmZiwgMHg1OSwgMHhmZiwgMHg1OSwKKwkJCQkweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LAorCQkJCTB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDBlLCAweDJlLAorCQkJCTB4OGIsIDB4NDUsIDB4OGIsIDB4NDUsIDB4OGIsIDB4NDUsIDB4OGIsIDB4NDUsCisJCQkJMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwKKwkJCQkweDFkLCAweDcxLCAweDFkLCAweDcxLCAweDFkLCAweDcxLCAweDFkLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjU2MiBNSHogKi8KKwkJMHhhMywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NzIsIDB4ODksCisJCQkJMHg1NCwgMHg4YiwgMHg1NCwgMHg4YiwgMHg1NCwgMHg4YiwgMHg1NCwgMHg4YiwKKwkJCQkweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LAorCQkJCTB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDZmLAorCQkJCTB4MjEsIDB4ODMsIDB4MjEsIDB4ODMsIDB4MjEsIDB4ODMsIDB4MjEsIDB4ODMsCisJCQkJMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwKKwkJCQkweGIzLCAweGFlLCAweGIzLCAweGFlLCAweGIzLCAweGFlLCAweGIzLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHhmYiwgMHg1YywKKwkJCQkweGVlLCAweDdhLCAweGVlLCAweDdhLCAweGVlLCAweDdhLCAweGVlLCAweDdhLAorCQkJCTB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsCisJCQkJMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4NDMsIDB4NDksCisJCQkJMHhhMywgMHg2ZSwgMHhhMywgMHg2ZSwgMHhhMywgMHg2ZSwgMHhhMywgMHg2ZSwKKwkJCQkweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLAorCQkJCTB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsCisJCQkweDUwLCAweDAwLCAweGQ0LCAweDM2LAorCQkJCTB4MjQsIDB4NWEsIDB4MjQsIDB4NWEsIDB4MjQsIDB4NWEsIDB4MjQsIDB4NWEsCisJCQkJMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwKKwkJCQkweGI2LCAweDg1LCAweGI2LCAweDg1LCAweGI2LCAweDg1LCAweGI2LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwYiwgMHgyZSwKKwkJCQkweGE2LCAweDQ1LCAweGE2LCAweDQ1LCAweGE2LCAweDQ1LCAweGE2LCAweDQ1LAorCQkJCTB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsCisJCQkJMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI1NzIgTUh6ICovCisJCTB4YTgsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGYxLCAweDhhLAorCQkJCTB4OTEsIDB4OGIsIDB4OTEsIDB4OGIsIDB4OTEsIDB4OGIsIDB4OTEsIDB4OGIsCisJCQkJMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywKKwkJCQkweDIzLCAweGI3LCAweDIzLCAweGI3LCAweDIzLCAweGI3LCAweDIzLCAweGI3LAorCQkJMHhmMCwgMHgwMCwgMHhkOSwgMHg3MCwKKwkJCQkweDVhLCAweDgzLCAweDVhLCAweDgzLCAweDVhLCAweDgzLCAweDVhLCAweDgzLAorCQkJCTB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsCisJCQkJMHhlYywgMHhhZSwgMHhlYywgMHhhZSwgMHhlYywgMHhhZSwgMHhlYywgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4ODMsIDB4NWQsCisJCQkJMHgyMywgMHg3YiwgMHgyMywgMHg3YiwgMHgyMywgMHg3YiwgMHgyMywgMHg3YiwKKwkJCQkweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LAorCQkJCTB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweDc4LCAweDQ5LAorCQkJCTB4ZDEsIDB4NmUsIDB4ZDEsIDB4NmUsIDB4ZDEsIDB4NmUsIDB4ZDEsIDB4NmUsCisJCQkJMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwKKwkJCQkweDYzLCAweDlhLCAweDYzLCAweDlhLCAweDYzLCAweDlhLCAweDYzLCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHhkOCwgMHgzNiwKKwkJCQkweDQ4LCAweDVhLCAweDQ4LCAweDVhLCAweDQ4LCAweDVhLCAweDQ4LCAweDVhLAorCQkJCTB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsCisJCQkJMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MDksIDB4MmUsCisJCQkJMHhjMCwgMHg0NSwgMHhjMCwgMHg0NSwgMHhjMCwgMHg0NSwgMHhjMCwgMHg0NSwKKwkJCQkweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLAorCQkJCTB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworLyoKKyAqIE5vdCByZWFsbHkgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IHRoZSBwb3dlcl9saW1pdCBkYXRhYmFzZSwKKyAqIGl0IGxvb2tzIGEgYml0ICJyZWxhdGVkIiB0byBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OCisgKi8KKy8qIHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKi8KKzB4YWUsIDB4MDAsIDB4ZWYsIDB4YmUsICAgICAgLyogUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTSAqLworCTB4MGQsIDB4MDAsIDB4MWEsIDB4MDAsCQkvKiAxMyBlbnRyaWVzLCAyNiBieXRlcyBwZXIgZW50cnkgKi8KKwkweDAwLCAweDAwLCAweDUyLCAweDAxLAkJLyogbm8gb2Zmc2V0LCAzMzggYnl0ZXMgdG90YWwgKi8KKworCQkvKiAyNDEyIE1IeiAqLworCQkweDZjLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MTcgTUh6ICovCisJCTB4NzEsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQyMiBNSHogKi8KKwkJMHg3NiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDI3IE1IeiAqLworCQkweDdiLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MzIgTUh6ICovCisJCTB4ODAsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQzNyBNSHogKi8KKwkJMHg4NSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDQyIE1IeiAqLworCQkweDhhLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NDcgTUh6ICovCisJCTB4OGYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ1MiBNSHogKi8KKwkJMHg5NCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDU3IE1IeiAqLworCQkweDk5LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NjIgTUh6ICovCisJCTB4OWUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ2NyBNSHogKi8KKwkJMHhhMywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDcyIE1IeiAqLworCQkweGE4LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisvKiBzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnlbMTNdICovCisweDQyLCAweDAwLCAweDA2LCAweDE5LAkJLyogUERSX1BSSVNNX1pJRl9UWF9JUV9DQUxJQlJBVElPTiAqLworCS8qIDI0MTIgTUh6ICovCisJMHg2YywgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDE3IE1IeiAqLworCTB4NzEsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQyMiBNSHogKi8KKwkweDc2LCAweDA5LCAweDI2LCAweDAwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MjcgTUh6ICovCisJMHg3YiwgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDMyIE1IeiAqLworCTB4ODAsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQzNyBNSHogKi8KKwkweDg1LCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NDIgTUh6ICovCisJMHg4YSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDQ3IE1IeiAqLworCTB4OGYsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQ1MiBNSHogKi8KKwkweDk0LCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NTcgTUh6ICovCisJMHg5OSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKwkvKiAyNDYyIE1IeiAqLworCTB4OWUsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisJLyogMjQ2NyBNSHogKi8KKwkweGEzLCAweDA5LCAweDI1LCAweDAwLCAweGY1LCAweGZmLCAweGY5LCAweGZmLCAweDAwLCAweDAxLAorCS8qIDI0NzIgTUh6ICovCisJMHhhOCwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKworMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwJCS8qIFBEUl9FTkQgKi8KKwkweGE4LCAweGY1CQkJLyogYm9ndXMgZGF0YSAqLworfTsKKworI2VuZGlmIC8qIFA1NFNQSV9FRVBST01fSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKaW5kZXggNWRlMmViZi4uZGE2NjQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwpAQCAtNDI0LDkgKzQyNCw0NiBAQAogCQkJICAgIGRhdGEsIGxlbiwgJmFsZW4sIDIwMDApOwogfQogCitzdGF0aWMgY29uc3QgY2hhciBwNTR1X3JvbWJvb3RfMzg4N1tdID0gIn5+fn4iOworc3RhdGljIGNvbnN0IGNoYXIgcDU0dV9maXJtd2FyZV91cGxvYWRfMzg4N1tdID0gIjxcciI7CisKK3N0YXRpYyBpbnQgcDU0dV9kZXZpY2VfcmVzZXRfMzg4NyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgcmV0LCBsb2NrID0gKHByaXYtPmludGYtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JJTkRJTkcpOworCXU4IGJ1Zls0XTsKKworCWlmIChsb2NrKSB7CisJCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQocHJpdi0+dWRldiwgcHJpdi0+aW50Zik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSB1bmFibGUgdG8gbG9jayAiCisJCQkJIiBkZXZpY2UgZm9yIHJlc2V0OiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKHByaXYtPnVkZXYpOworCWlmIChsb2NrKQorCQl1c2JfdW5sb2NrX2RldmljZShwcml2LT51ZGV2KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgdW5hYmxlIHRvIHJlc2V0ICIKKwkJCSJkZXZpY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbWNweSgmYnVmLCBwNTR1X3JvbWJvb3RfMzg4Nywgc2l6ZW9mKGJ1ZikpOworCXJldCA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsCisJCQkgICAgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKHJldCkKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgdW5hYmxlIHRvIGp1bXAgdG8gIgorCQkJImJvb3QgUk9NOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7Ci0Jc3RhdGljIGNoYXIgc3RhcnRfc3RyaW5nW10gPSAifn5+fjxcciI7CiAJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKIAlpbnQgZXJyLCBhbGVuOwpAQCAtNDQ1LDEyICs0ODIsOSBAQAogCQlnb3RvIGVycl9idWZhbGxvYzsKIAl9CiAKLQltZW1jcHkoYnVmLCBzdGFydF9zdHJpbmcsIDQpOwotCWVyciA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsIGJ1ZiwgNCk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSByZXNldCBmYWlsZWQhICglZClcbiIsIGVycik7CisJZXJyID0gcDU0dV9kZXZpY2VfcmVzZXRfMzg4NyhkZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX3Jlc2V0OwotCX0KIAogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaXNsMzg4N3VzYiIsICZwcml2LT51ZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKQEAgLTQ2NiwxNSArNTAwLDIyIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfdXBsb2FkX2ZhaWxlZDsKIAorCWlmIChwcml2LT5jb21tb24uZndfaW50ZXJmYWNlICE9IEZXX0xNODcpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAid3JvbmcgZmlybXdhcmUsICIKKwkJCSJwbGVhc2UgZ2V0IGEgTE04NyBmaXJtd2FyZSBhbmQgdHJ5IGFnYWluLlxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CisJfQorCiAJbGVmdCA9IGJsb2NrX3NpemUgPSBtaW4oKHNpemVfdClQNTRVX0ZXX0JMT0NLLCBmd19lbnRyeS0+c2l6ZSk7Ci0Jc3RyY3B5KGJ1Ziwgc3RhcnRfc3RyaW5nKTsKLQlsZWZ0IC09IHN0cmxlbihzdGFydF9zdHJpbmcpOwotCXRtcCArPSBzdHJsZW4oc3RhcnRfc3RyaW5nKTsKKwlzdHJjcHkoYnVmLCBwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KTsKKwlsZWZ0IC09IHN0cmxlbihwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KTsKKwl0bXAgKz0gc3RybGVuKHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODcpOwogCiAJZGF0YSA9IGZ3X2VudHJ5LT5kYXRhOwogCXJlbWFpbnMgPSBmd19lbnRyeS0+c2l6ZTsKIAotCWhkciA9IChzdHJ1Y3QgeDJfaGVhZGVyICopKGJ1ZiArIHN0cmxlbihzdGFydF9zdHJpbmcpKTsKKwloZHIgPSAoc3RydWN0IHgyX2hlYWRlciAqKShidWYgKyBzdHJsZW4ocDU0dV9maXJtd2FyZV91cGxvYWRfMzg4NykpOwogCW1lbWNweShoZHItPnNpZ25hdHVyZSwgWDJfU0lHTkFUVVJFLCBYMl9TSUdOQVRVUkVfU0laRSk7CiAJaGRyLT5md19sb2FkX2FkZHIgPSBjcHVfdG9fbGUzMihJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSKTsKIAloZHItPmZ3X2xlbmd0aCA9IGNwdV90b19sZTMyKGZ3X2VudHJ5LT5zaXplKTsKQEAgLTYxNiw2ICs2NTcsMTQgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAocHJpdi0+Y29tbW9uLmZ3X2ludGVyZmFjZSAhPSBGV19MTTg2KSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIndyb25nIGZpcm13YXJlLCAiCisJCQkicGxlYXNlIGdldCBhIExNODYoVVNCKSBmaXJtd2FyZSBhbmQgdHJ5IGFnYWluLlxuIik7CisJCWtmcmVlKGJ1Zik7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKICNkZWZpbmUgUDU0VV9XUklURSh0eXBlLCBhZGRyLCBkYXRhKSBcCiAJZG8ge1wKIAkJZXJyID0gcDU0dV93cml0ZShwcml2LCBidWYsIHR5cGUsXApAQCAtODc2LDYgKzkyNSw5IEBACiAJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmaW50Zi0+ZGV2KTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAJcHJpdi0+dWRldiA9IHVkZXY7CisJcHJpdi0+aW50ZiA9IGludGY7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcXVldWUpOworCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+c3VibWl0dGVkKTsKIAogCXVzYl9nZXRfZGV2KHVkZXYpOwogCkBAIC05MTgsMjAgKzk3MCwxNSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcXVldWUpOwotCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+c3VibWl0dGVkKTsKLQogCXA1NHVfb3BlbihkZXYpOwogCWVyciA9IHA1NF9yZWFkX2VlcHJvbShkZXYpOwogCXA1NHVfc3RvcChkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICIocDU0dXNiKSBDYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlXG4iKTsKKwllcnIgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGRldiwgJnVkZXYtPmRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQogCiAJcmV0dXJuIDA7CiAKQEAgLTk1OCwxMSArMTAwNSwyNCBAQAogCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CiB9CiAKK3N0YXRpYyBpbnQgcDU0dV9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0dV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7CiAJLm5hbWUJPSAicDU0dXNiIiwKIAkuaWRfdGFibGUgPSBwNTR1X3RhYmxlLAogCS5wcm9iZSA9IHA1NHVfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBwNTR1X2Rpc2Nvbm5lY3QsCisJLnByZV9yZXNldCA9IHA1NHVfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0gcDU0dV9wb3N0X3Jlc2V0LAorCS5zb2Z0X3VuYmluZCA9IDEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBwNTR1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaAppbmRleCA1NGVlNzM4Li44YmM1ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oCkBAIC0xMjYsNiArMTI2LDcgQEAKIHN0cnVjdCBwNTR1X3ByaXYgewogCXN0cnVjdCBwNTRfY29tbW9uIGNvbW1vbjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAllbnVtIHsKIAkJUDU0VV9ORVQyMjgwID0gMCwKIAkJUDU0VV8zODg3CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwppbmRleCA1N2ExNTBhLi40Yzk3YzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKQEAgLTI5ODEsNyArMjk4MSw4IEBACiAJCXVuaW9uIGl3cmVxX2RhdGEgKnV3cnEsIGNoYXIgKmV4dHJhKQogewogCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JdTMyIHUsIG9pZCA9IE9JRF9JTkxfQ09ORklHOworCXUzMiB1OworCWVudW0gb2lkX251bV90IG9pZCA9IE9JRF9JTkxfQ09ORklHOwogCiAJZG93bl93cml0ZSgmcHJpdi0+bWliX3NlbSk7CiAJbWd0X2dldChwcml2LCBPSURfSU5MX0NPTkZJRywgJnUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCA5MTk2ODI1Li4xNjZlZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtNDMsNyArNDMsNiBAQAogCiBzdGF0aWMgaW50IHByaXNtNTRfYnJpbmdfZG93bihpc2xwY2lfcHJpdmF0ZSAqKTsKIHN0YXRpYyBpbnQgaXNscGNpX2FsbG9jX21lbW9yeShpc2xwY2lfcHJpdmF0ZSAqKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXNscGNpX3N0YXRpc3RpY3Moc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIC8qIFRlbXBvcmFyeSBkdW1teSBNQUMgYWRkcmVzcyB0byB1c2UgdW50aWwgZmlybXdhcmUgaXMgbG9hZGVkLgogICogVGhlIGlkZWEgdGhlcmUgaXMgdGhhdCBzb21lIHRvb2xzIChzdWNoIGFzIG5hbWVpZikgbWF5IHF1ZXJ5CkBAIC02MTQsMTggKzYxMyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotaXNscGNpX3N0YXRpc3RpY3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0JaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQotI2lmIFZFUkJPU0UgPiBTSE9XX0VSUk9SX01FU1NBR0VTCi0JREVCVUcoU0hPV19GVU5DVElPTl9DQUxMUywgImlzbHBjaV9zdGF0aXN0aWNzXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuICZwcml2LT5zdGF0aXN0aWNzOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgTmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgwNCwxMCArNzkxLDIyIEBACiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpc2xwY2lfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlzbHBjaV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBpc2xwY2lfZXRodG9vbF9nZXRfZHJ2aW5mbywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXNscGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBpc2xwY2lfb3BlbiwKKwkubmRvX3N0b3AJCT0gaXNscGNpX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gcHJpc201NF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaXNscGNpX2V0aF90cmFuc21pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaXNscGNpX2V0aF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IHByaXNtNTRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqCiBpc2xwY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC04MjcsMjUgKzgyNiwxNiBAQAogCW5kZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0JbmRldi0+b3BlbiA9ICZpc2xwY2lfb3BlbjsKLQluZGV2LT5zdG9wID0gJmlzbHBjaV9jbG9zZTsKLQluZGV2LT5nZXRfc3RhdHMgPSAmaXNscGNpX3N0YXRpc3RpY3M7Ci0JbmRldi0+ZG9faW9jdGwgPSAmcHJpc201NF9pb2N0bDsKLQluZGV2LT53aXJlbGVzc19oYW5kbGVycyA9Ci0JICAgIChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikgJnByaXNtNTRfaGFuZGxlcl9kZWY7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZpc2xwY2lfbmV0ZGV2X29wczsKKwluZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZwcmlzbTU0X2hhbmRsZXJfZGVmOwogCW5kZXYtPmV0aHRvb2xfb3BzID0gJmlzbHBjaV9ldGh0b29sX29wczsKIAotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZpc2xwY2lfZXRoX3RyYW5zbWl0OwogCS8qIG5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZpc2xwY2lfc2V0X211bHRpY2FzdF9saXN0OyAqLwogCW5kZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47Ci0JbmRldi0+c2V0X21hY19hZGRyZXNzID0gJnByaXNtNTRfc2V0X21hY19hZGRyZXNzOwogCS8qIEdldCBhIG5vbi16ZXJvIGR1bW15IE1BQyBhZGRyZXNzIGZvciBuYW1laWYuIEplYW4gSUkgKi8KIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGR1bW15X21hYywgNik7CiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKIAluZGV2LT53YXRjaGRvZ190aW1lbyA9IElTTFBDSV9UWF9USU1FT1VUOwotCW5kZXYtPnR4X3RpbWVvdXQgPSAmaXNscGNpX2V0aF90eF90aW1lb3V0OwotI2VuZGlmCiAKIAkvKiBhbGxvY2F0ZSBhIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZSB0byB0aGUgbmV0d29yayBkZXZpY2UgICovCiAJcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaAppbmRleCA4ZTU1YTVmLi5jNGQwZjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaApAQCAtMTU4LDkgKzE1OCw2IEBACiAJZG1hX2FkZHJfdCBwY2lfbWFwX3R4X2FkZHJlc3NbSVNMMzhYWF9DQl9UWF9RU0laRV07CiAJZG1hX2FkZHJfdCBwY2lfbWFwX3J4X2FkZHJlc3NbSVNMMzhYWF9DQl9SWF9RU0laRV07CiAKLQkvKiBkcml2ZXIgbmV0d29yayBpbnRlcmZhY2UgbWVtYmVycyAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRpc3RpY3M7Ci0KIAkvKiB3YWl0IGZvciBhIHJlc2V0IGludGVycnVwdCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHJlc2V0X2RvbmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggZTQzYmFlOS4uZWYzZWY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgInByaXNtY29tcGF0LmgiCiAjaW5jbHVkZSAiaXNsXzM4eHguaCIKQEAgLTIzMCw4ICsyMzEsOCBAQAogCiAJLyogc2V0IHRoZSB0cmFuc21pc3Npb24gdGltZSAqLwogCW5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlwcml2LT5zdGF0aXN0aWNzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0aXN0aWNzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCW5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIHRyaWdnZXIgdGhlIGRldmljZSAqLwogCWlzbHBjaV90cmlnZ2VyKHByaXYpOwpAQCAtMjQyLDcgKzI0Myw3IEBACiAJcmV0dXJuIDA7CiAKICAgICAgIGRyb3BfZnJlZToKLQlwcml2LT5zdGF0aXN0aWNzLnR4X2Ryb3BwZWQrKzsKKwluZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2xvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKQEAgLTQwNyw4ICs0MDgsOCBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKIAl9CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCXByaXYtPnN0YXRpc3RpY3MucnhfcGFja2V0cysrOwotCXByaXYtPnN0YXRpc3RpY3MucnhfYnl0ZXMgKz0gc2l6ZTsKKwluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCS8qIGRlbGl2ZXIgdGhlIHNrYiB0byB0aGUgbmV0d29yayBsYXllciAqLwogI2lmZGVmIElTTFBDSV9FVEhfREVCVUcKQEAgLTQ3MSw4ICs0NzIsOCBAQAogCQl3bWIoKTsKIAogCQkvKiBpbmNyZW1lbnQgdGhlIGRyaXZlciByZWFkIHBvaW50ZXIgKi8KLQkJYWRkX2xlMzJwKCZjb250cm9sX2Jsb2NrLT4KLQkJCSAgZHJpdmVyX2N1cnJfZnJhZ1tJU0wzOFhYX0NCX1JYX0RBVEFfTFFdLCAxKTsKKwkJbGUzMl9hZGRfY3B1KCZjb250cm9sX2Jsb2NrLT4KKwkJCSAgICAgZHJpdmVyX2N1cnJfZnJhZ1tJU0wzOFhYX0NCX1JYX0RBVEFfTFFdLCAxKTsKIAl9CiAKIAkvKiB0cmlnZ2VyIHRoZSBkZXZpY2UgKi8KQEAgLTQ5NiwxMCArNDk3LDkgQEAKIGlzbHBjaV9ldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0aXN0aWNzID0gJnByaXYtPnN0YXRpc3RpY3M7CiAKIAkvKiBpbmNyZW1lbnQgdGhlIHRyYW5zbWl0IGVycm9yIGNvdW50ZXIgKi8KLQlzdGF0aXN0aWNzLT50eF9lcnJvcnMrKzsKKwluZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCWlmICghcHJpdi0+cmVzZXRfdGFza19wZW5kaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmgKaW5kZXggZjkxYTg4Zi4uODdhMTczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmgKQEAgLTg1LDEyICs4NSw2IEBACiAjZGVmaW5lIFBJTUZPUl9GTEFHX0FQUExJQ19PUklHSU4gICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIFBJTUZPUl9GTEFHX0xJVFRMRV9FTkRJQU4gICAgICAgICAgICAgICAweDAyCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotYWRkX2xlMzJwKF9fbGUzMiAqIGxlX251bWJlciwgdTMyIGFkZCkKLXsKLQkqbGVfbnVtYmVyID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHVwKGxlX251bWJlcikgKyBhZGQpOwotfQotCiB2b2lkIGRpc3BsYXlfYnVmZmVyKGNoYXIgKiwgaW50KTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKaW5kZXggNTdhNGFjMy4uMTE4N2U2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKQEAgLTY5OCw3ICs2OTgsNyBAQAogbWd0X2NvbW1pdChpc2xwY2lfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgcnZhbHVlOwotCXUzMiB1OworCWVudW0gb2lkX251bV90IHU7CiAKIAlpZiAoaXNscGNpX2dldF9zdGF0ZShwcml2KSA8IFBSVl9TVEFURV9JTklUKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggOTllYzdkNi4uZmE5MGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDE5OTggIENvcmV5IFRob21hcyAoY29yZXlAd29ybGQuc3RkLmNvbSkKICAqCiAgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9ubHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvbmx5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogSXQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKQEAgLTI3LDcgKzI3LDcgQEAKICAqCiAgKiBEYW5pZWxlIEJlbGx1Y2NpIDxiZWxsdWNkYUB0aXNjYWxpLml0PiAtIDA3LzEwLzIwMDMKICAqIC0gQXVkaXQgY29weV90b191c2VyIGluIGlvY3RsKFNJT0NHSVdFU1NJRCkKLSAqIAorICoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjUsOCArNjUsOCBAQAogLyogV2FybmluZyA6IHRoZXNlIHN0dWZmIHdpbGwgc2xvdyBkb3duIHRoZSBkcml2ZXIuLi4gKi8KICNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBFbmFibGUgc3B5aW5nIGFkZHJlc3NlcyAqLwogLyogRGVmaW5pdGlvbnMgd2UgbmVlZCBmb3Igc3B5ICovCi10eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzCWl3X3N0YXRzOwotdHlwZWRlZiB1X2NoYXIJbWFjX2FkZHJbRVRIX0FMRU5dOwkvKiBIYXJkd2FyZSBhZGRyZXNzICovCit0eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOwordHlwZWRlZiB1X2NoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOwkvKiBIYXJkd2FyZSBhZGRyZXNzICovCiAKICNpbmNsdWRlICJyYXljdGwuaCIKICNpbmNsdWRlICJyYXlfY3MuaCIKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7CiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7CiAvKiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyAqLwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoYXJncyk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1ZyA+IChuKSkgcHJpbnRrKGFyZ3MpOwogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJheV91cGRhdGVfbXVsdGlfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWxsKTsKIHN0YXRpYyBpbnQgdHJhbnNsYXRlX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pOwotc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwgVUNIQVIgbXNnX3R5cGUsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSk7CisJCQkgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCisJCQkgICAgIFVDSEFSIG1zZ190eXBlLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKIHN0YXRpYyB2b2lkIHVudHJhbnNsYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwotc3RhdGljIGl3X3N0YXRzICogcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldik7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmCXJheV9oYW5kbGVyX2RlZjsKK3N0YXRpYyBpd19zdGF0cyAqcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcmF5X2hhbmRsZXJfZGVmOwogCiAvKioqKiogUHJvdG90eXBlcyBmb3IgcmF5bGluayBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGFzY190b19pbnQoY2hhciBhKTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogc3RhdGljIGludCBnZXRfZnJlZV90eF9jY3MocmF5X2Rldl90ICpsb2NhbCk7CiBzdGF0aWMgdm9pZCBpbml0X3N0YXJ0dXBfcGFyYW1zKHJheV9kZXZfdCAqbG9jYWwpOwogc3RhdGljIGludCBwYXJzZV9hZGRyKGNoYXIgKmluX3N0ciwgVUNIQVIgKm91dCk7Ci1zdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIqIGRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFVDSEFSIHR5cGUpOworc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBVQ0hBUiB0eXBlKTsKIHN0YXRpYyBpbnQgcmF5X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGludGVycnVwdF9lY2YocmF5X2Rldl90ICpsb2NhbCwgaW50IGNjcyk7CiBzdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogc3RhdGljIHZvaWQgdmVyaWZ5X2RsX3N0YXJ0dXAodV9sb25nKTsKIAogLyogUHJvdG90eXBlcyBmb3IgaW50ZXJycHQgdGltZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0IChpbnQgcmVnLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IHJheV9pbnRlcnJ1cHQoaW50IHJlZywgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGNsZWFyX2ludGVycnVwdChyYXlfZGV2X3QgKmxvY2FsKTsKLXN0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CitzdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOwogc3RhdGljIGludCBjb3B5X2Zyb21fcnhfYnVmZihyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IHBrdF9hZGRyLCBpbnQgbGVuKTsKIHN0YXRpYyB2b2lkIHJheV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCByYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpOwogc3RhdGljIHZvaWQgcmVsZWFzZV9mcmFnX2NoYWluKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcyk7CiBzdGF0aWMgdm9pZCByeF9hdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKLXN0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIAotICAgICAgICAgICAgIGludCByeF9sZW4pOworCQkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CitzdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CiBzdGF0aWMgdm9pZCBhc3NvY2lhdGUocmF5X2Rldl90ICpsb2NhbCk7CiAKIC8qIENhcmQgY29tbWFuZCBmdW5jdGlvbnMgKi8KQEAgLTIxOSw4MiArMjE5LDk3IEBACiBtb2R1bGVfcGFyYW0ocmF5X21lbV9zcGVlZCwgaW50LCAwKTsKIAogc3RhdGljIFVDSEFSIGI1X2RlZmF1bHRfc3RhcnR1cF9wYXJtc1tdID0gewotICAgIDAsICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRob2Mgc3RhdGlvbiAqLwotICAgJ0wnLCdJJywnTicsJ1UnLCdYJywgMCwgIDAsICAwLCAgLyogMzIgY2hhciBFU1NJRCAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDEsICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAgICAgICAgIC8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBGcmFnIHRocmVzaG9sZCAqLwotICAgIDB4MDAsIDB4ODAsICAgICAgICAgICAgICAgICAgICAgLyogSG9wIHRpbWUgMTI4IEt1cyovCi0gICAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgICAgICAgICAvKiBCZWFjb24gcGVyaW9kIDI1NiBLdXMgKi8KLSAgICAweDAxLCAweDA3LCAweGEzLCAgICAgICAgICAgICAgIC8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0Ki8KLSAgICAweDFkLCAweDgyLCAweDRlLCAgICAgICAgICAgICAgIC8qIFNJRlMsIERJRlMsIFBJRlMgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIFJUUyB0aHJlc2hvbGQgKi8KLSAgICAweDA0LCAweGUyLCAweDM4LCAweEE0LCAgICAgICAgIC8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCi0gICAgMHgwNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCi0gICAgMHgwOCwgMHgwMiwgMHgwOCwgICAgICAgICAgICAgICAvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9taXNjdW91cyBtb2RlICovCi0gICAgMHgwYywgMHgwYmQsICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgd29yZCAqLwotICAgIDB4MzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdCB0aW1lICovCi0gICAgMHhmZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KLSAgICAweDA1LCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLwotICAgIDB4MDEsIDB4MGIsIDB4NGYsICAgICAgICAgICAgICAgLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KKwkwLCAwLAkJCS8qIEFkaG9jIHN0YXRpb24gKi8KKwknTCcsICdJJywgJ04nLCAnVScsICdYJywgMCwgMCwgMCwJLyogMzIgY2hhciBFU1NJRCAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTEsIDAsCQkJLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLAkvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLworCTB4N2YsIDB4ZmYsCQkvKiBGcmFnIHRocmVzaG9sZCAqLworCTB4MDAsIDB4ODAsCQkvKiBIb3AgdGltZSAxMjggS3VzICovCisJMHgwMSwgMHgwMCwJCS8qIEJlYWNvbiBwZXJpb2QgMjU2IEt1cyAqLworCTB4MDEsIDB4MDcsIDB4YTMsCS8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0ICovCisJMHgxZCwgMHg4MiwgMHg0ZSwJLyogU0lGUywgRElGUywgUElGUyAqLworCTB4N2YsIDB4ZmYsCQkvKiBSVFMgdGhyZXNob2xkICovCisJMHgwNCwgMHhlMiwgMHgzOCwgMHhBNCwJLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KKwkweDA1LAkJCS8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KKwkweDA4LCAweDAyLCAweDA4LAkvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCAqLworCTAsCQkJLyogUHJvbWlzY3VvdXMgbW9kZSAqLworCTB4MGMsIDB4MGJkLAkJLyogVW5pcXVlIHdvcmQgKi8KKwkweDMyLAkJCS8qIFNsb3QgdGltZSAqLworCTB4ZmYsIDB4ZmYsCQkvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KKwkweDA1LCAweGZmLAkJLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCisJMHgwMSwgMHgwYiwgMHg0ZiwJLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KIC8qIGI0IC0gYjUgZGlmZmVyZW5jZXMgc3RhcnQgaGVyZSAqLwotICAgIDB4MDAsIDB4M2YsICAgICAgICAgICAgICAgICAgICAgLyogQ1cgbWF4ICovCi0gICAgMHgwMCwgMHgwZiwgICAgICAgICAgICAgICAgICAgICAvKiBDVyBtaW4gKi8KLSAgICAweDA0LCAweDA4LCAgICAgICAgICAgICAgICAgICAgIC8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLwotICAgIDB4MjgsIDB4MjgsICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KLSAgICA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldCBzeW5jIHRocmVzaCAqLwotICAgIDAsIDIsIDIsICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVzdCBtb2RlLCBtaW4sIG1heCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxsb3cgYnJvYWRjYXN0IFNTSUQgcHJvYmUgcmVzcCAqLwotICAgIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpdmFjeSBtdXN0IHN0YXJ0LCBjYW4gam9pbiAqLwotICAgIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAgICAgICAgICAgLyogYmFzaWMgcmF0ZSBzZXQgKi8KKwkweDAwLCAweDNmLAkJLyogQ1cgbWF4ICovCisJMHgwMCwgMHgwZiwJCS8qIENXIG1pbiAqLworCTB4MDQsIDB4MDgsCQkvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KKwkweDI4LCAweDI4LAkJLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KKwk3LAkJCS8qIGRldCBzeW5jIHRocmVzaCAqLworCTAsIDIsIDIsCQkvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4ICovCisJMCwJCQkvKiBhbGxvdyBicm9hZGNhc3QgU1NJRCBwcm9iZSByZXNwICovCisJMCwgMCwJCQkvKiBwcml2YWN5IG11c3Qgc3RhcnQsIGNhbiBqb2luICovCisJMiwgMCwgMCwgMCwgMCwgMCwgMCwgMAkvKiBiYXNpYyByYXRlIHNldCAqLwogfTsKIAogc3RhdGljIFVDSEFSIGI0X2RlZmF1bHRfc3RhcnR1cF9wYXJtc1tdID0gewotICAgIDAsICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRob2Mgc3RhdGlvbiAqLwotICAgJ0wnLCdJJywnTicsJ1UnLCdYJywgMCwgIDAsICAwLCAgLyogMzIgY2hhciBFU1NJRCAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotICAgIDEsICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAgICAgICAgIC8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBGcmFnIHRocmVzaG9sZCAqLwotICAgIDB4MDIsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgLyogSG9wIHRpbWUgKi8KLSAgICAweDAwLCAweDAxLCAgICAgICAgICAgICAgICAgICAgIC8qIEJlYWNvbiBwZXJpb2QgKi8KLSAgICAweDAxLCAweDA3LCAweGEzLCAgICAgICAgICAgICAgIC8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0Ki8KLSAgICAweDFkLCAweDgyLCAweGNlLCAgICAgICAgICAgICAgIC8qIFNJRlMsIERJRlMsIFBJRlMgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIFJUUyB0aHJlc2hvbGQgKi8KLSAgICAweGZiLCAweDFlLCAweGM3LCAweDVjLCAgICAgICAgIC8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCi0gICAgMHgwNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCi0gICAgMHgwNCwgMHgwMiwgMHg0LCAgICAgICAgICAgICAgICAvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9taXNjdW91cyBtb2RlICovCi0gICAgMHgwYywgMHgwYmQsICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgd29yZCAqLwotICAgIDB4NGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdCB0aW1lIChUQkQgc2VlbXMgd3JvbmcpKi8KLSAgICAweGZmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLwotICAgIDB4MDUsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCi0gICAgMHgwMSwgMHgwYiwgMHg0ZSwgICAgICAgICAgICAgICAvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLworCTAsIDAsCQkJLyogQWRob2Mgc3RhdGlvbiAqLworCSdMJywgJ0knLCAnTicsICdVJywgJ1gnLCAwLCAwLCAwLAkvKiAzMiBjaGFyIEVTU0lEICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMSwgMCwJCQkvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLworCTAsIDAsIDAsIDAsIDAsIDAsCS8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCisJMHg3ZiwgMHhmZiwJCS8qIEZyYWcgdGhyZXNob2xkICovCisJMHgwMiwgMHgwMCwJCS8qIEhvcCB0aW1lICovCisJMHgwMCwgMHgwMSwJCS8qIEJlYWNvbiBwZXJpb2QgKi8KKwkweDAxLCAweDA3LCAweGEzLAkvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCAqLworCTB4MWQsIDB4ODIsIDB4Y2UsCS8qIFNJRlMsIERJRlMsIFBJRlMgKi8KKwkweDdmLCAweGZmLAkJLyogUlRTIHRocmVzaG9sZCAqLworCTB4ZmIsIDB4MWUsIDB4YzcsIDB4NWMsCS8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCisJMHgwNSwJCQkvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCisJMHgwNCwgMHgwMiwgMHg0LAkvKiBhZGhvYywgaW5mcmEsIHN1cGVyIGN5Y2xlIG1heCAqLworCTAsCQkJLyogUHJvbWlzY3VvdXMgbW9kZSAqLworCTB4MGMsIDB4MGJkLAkJLyogVW5pcXVlIHdvcmQgKi8KKwkweDRlLAkJCS8qIFNsb3QgdGltZSAoVEJEIHNlZW1zIHdyb25nKSAqLworCTB4ZmYsIDB4ZmYsCQkvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KKwkweDA1LCAweGZmLAkJLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCisJMHgwMSwgMHgwYiwgMHg0ZSwJLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KIC8qIGI0IC0gYjUgZGlmZmVyZW5jZXMgc3RhcnQgaGVyZSAqLwotICAgIDB4M2YsIDB4MGYsICAgICAgICAgICAgICAgICAgICAgLyogQ1cgbWF4LCBtaW4gKi8KLSAgICAweDA0LCAweDA4LCAgICAgICAgICAgICAgICAgICAgIC8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLwotICAgIDB4MjgsIDB4MjgsICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KLSAgICA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldCBzeW5jIHRocmVzaCAqLwotICAgIDAsIDIsIDIgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVzdCBtb2RlLCBtaW4sIG1heCovCisJMHgzZiwgMHgwZiwJCS8qIENXIG1heCwgbWluICovCisJMHgwNCwgMHgwOCwJCS8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLworCTB4MjgsIDB4MjgsCQkvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLworCTcsCQkJLyogZGV0IHN5bmMgdGhyZXNoICovCisJMCwgMiwgMgkJCS8qIHRlc3QgbW9kZSwgbWluLCBtYXggKi8KIH07CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGV0aDJfbGxjW10gPSB7MHhhYSwgMHhhYSwgMywgMCwgMCwgMH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBldGgyX2xsY1tdID0geyAweGFhLCAweGFhLCAzLCAwLCAwLCAwIH07CiAKIHN0YXRpYyBjaGFyIGhvcF9wYXR0ZXJuX2xlbmd0aFtdID0geyAxLAotCSAgICAgVVNBX0hPUF9NT0QsICAgICAgICAgICAgIEVVUk9QRV9IT1BfTU9ELAotCSAgICAgSkFQQU5fSE9QX01PRCwgICAgICAgICAgIEtPUkVBX0hPUF9NT0QsCi0JICAgICBTUEFJTl9IT1BfTU9ELCAgICAgICAgICAgRlJBTkNFX0hPUF9NT0QsCi0JICAgICBJU1JBRUxfSE9QX01PRCwgICAgICAgICAgQVVTVFJBTElBX0hPUF9NT0QsCi0JICAgICBKQVBBTl9URVNUX0hPUF9NT0QKKwlVU0FfSE9QX01PRCwgRVVST1BFX0hPUF9NT0QsCisJSkFQQU5fSE9QX01PRCwgS09SRUFfSE9QX01PRCwKKwlTUEFJTl9IT1BfTU9ELCBGUkFOQ0VfSE9QX01PRCwKKwlJU1JBRUxfSE9QX01PRCwgQVVTVFJBTElBX0hPUF9NT0QsCisJSkFQQU5fVEVTVF9IT1BfTU9ECiB9OwogCi1zdGF0aWMgY2hhciByY3NpZFtdID0gIlJheWxpbmsvV2ViR2VhciB3aXJlbGVzcyBMQU4gLSBDb3JleSA8VGhvbWFzIGNvcmV5QHdvcmxkLnN0ZC5jb20+IjsKK3N0YXRpYyBjaGFyIHJjc2lkW10gPQorICAgICJSYXlsaW5rL1dlYkdlYXIgd2lyZWxlc3MgTEFOIC0gQ29yZXkgPFRob21hcyBjb3JleUB3b3JsZC5zdGQuY29tPiI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcmF5X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0IAkJPSByYXlfZGV2X2luaXQsCisJLm5kb19vcGVuIAkJPSByYXlfb3BlbiwKKwkubmRvX3N0b3AgCQk9IHJheV9kZXZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHJheV9kZXZfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9jb25maWcJCT0gcmF5X2Rldl9jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gcmF5X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIHJheV9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMzA2LDcxICszMjEsNjYgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJcmF5X2Rldl90ICpsb2NhbDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0gICAgREVCVUcoMSwgInJheV9hdHRhY2goKVxuIik7CisJREVCVUcoMSwgInJheV9hdHRhY2goKVxuIik7CiAKLSAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwotICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihyYXlfZGV2X3QpKTsKLSAgICBpZiAoIWRldikKLQkgICAgZ290byBmYWlsX2FsbG9jX2RldjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihyYXlfZGV2X3QpKTsKKwlpZiAoIWRldikKKwkJZ290byBmYWlsX2FsbG9jX2RldjsKIAotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsb2NhbC0+ZmluZGVyID0gcF9kZXY7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWxvY2FsLT5maW5kZXIgPSBwX2RldjsKIAotICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZy4gTm9uZSB1c2VkIGhlcmUgKi8KLSAgICBwX2Rldi0+aW8uTnVtUG9ydHMxID0gMDsKLSAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OworCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZy4gTm9uZSB1c2VkIGhlcmUgKi8KKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gMDsKKwlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OwogCi0gICAgLyogSW50ZXJydXB0IHNldHVwLiBGb3IgUENNQ0lBLCBkcml2ZXIgdGFrZXMgd2hhdCdzIGdpdmVuICovCi0gICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotICAgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7Ci0gICAgcF9kZXYtPmlycS5IYW5kbGVyID0gJnJheV9pbnRlcnJ1cHQ7CisJLyogSW50ZXJydXB0IHNldHVwLiBGb3IgUENNQ0lBLCBkcml2ZXIgdGFrZXMgd2hhdCdzIGdpdmVuICovCisJcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCXBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJcF9kZXYtPmlycS5IYW5kbGVyID0gJnJheV9pbnRlcnJ1cHQ7CiAKLSAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCi0gICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0gICAgcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOworCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KKwlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROworCXBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKwlwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAKLSAgICBwX2Rldi0+cHJpdiA9IGRldjsKLSAgICBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwotICAgIAotICAgIGxvY2FsLT5maW5kZXIgPSBwX2RldjsKLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOU0VSVEVEOwotICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKLSAgICBsb2NhbC0+bnVtX211bHRpID0gMDsKLSAgICBERUJVRygyLCJyYXlfYXR0YWNoIHBfZGV2ID0gJXAsICBkZXYgPSAlcCwgIGxvY2FsID0gJXAsIGludHIgPSAlcFxuIiwKLSAgICAgICAgICBwX2RldixkZXYsbG9jYWwsJnJheV9pbnRlcnJ1cHQpOworCXBfZGV2LT5wcml2ID0gZGV2OworCXBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKLSAgICAvKiBSYXlsaW5rIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZyYXlfZGV2X3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJnJheV9kZXZfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzICA9ICZyYXlfZ2V0X3N0YXRzOwotICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwotICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcmF5X2hhbmRsZXJfZGVmOworCWxvY2FsLT5maW5kZXIgPSBwX2RldjsKKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOU0VSVEVEOworCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKKwlsb2NhbC0+bnVtX211bHRpID0gMDsKKwlERUJVRygyLCAicmF5X2F0dGFjaCBwX2RldiA9ICVwLCAgZGV2ID0gJXAsICBsb2NhbCA9ICVwLCBpbnRyID0gJXBcbiIsCisJICAgICAgcF9kZXYsIGRldiwgbG9jYWwsICZyYXlfaW50ZXJydXB0KTsKKworCS8qIFJheWxpbmsgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCWRldi0+bmV0ZGV2X29wcyA9ICZyYXlfbmV0ZGV2X29wczsKKwlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJheV9oYW5kbGVyX2RlZjsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICBsb2NhbC0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZsb2NhbC0+c3B5X2RhdGE7Ci0gICAgZGV2LT53aXJlbGVzc19kYXRhID0gJmxvY2FsLT53aXJlbGVzc19kYXRhOwotI2VuZGlmCS8qIFdJUkVMRVNTX1NQWSAqLworCWxvY2FsLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJmxvY2FsLT5zcHlfZGF0YTsKKwlkZXYtPndpcmVsZXNzX2RhdGEgPSAmbG9jYWwtPndpcmVsZXNzX2RhdGE7CisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiAKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CiAKLSAgICBERUJVRygyLCJyYXlfY3MgcmF5X2F0dGFjaCBjYWxsaW5nIGV0aGVyX3NldHVwLilcbiIpOwotICAgIGRldi0+aW5pdCA9ICZyYXlfZGV2X2luaXQ7Ci0gICAgZGV2LT5vcGVuID0gJnJheV9vcGVuOwotICAgIGRldi0+c3RvcCA9ICZyYXlfZGV2X2Nsb3NlOwotICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlERUJVRygyLCAicmF5X2NzIHJheV9hdHRhY2ggY2FsbGluZyBldGhlcl9zZXR1cC4pXG4iKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICBpbml0X3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWluaXRfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICB0aGlzX2RldmljZSA9IHBfZGV2OwotICAgIHJldHVybiByYXlfY29uZmlnKHBfZGV2KTsKKwl0aGlzX2RldmljZSA9IHBfZGV2OworCXJldHVybiByYXlfY29uZmlnKHBfZGV2KTsKIAogZmFpbF9hbGxvY19kZXY6Ci0gICAgcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIC1FTk9NRU07CiB9IC8qIHJheV9hdHRhY2ggKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCiAgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCkBAIC0zNzksMjUgKzM4OSwyNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgIHJheV9kZXZfdCAqbG9jYWw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlyYXlfZGV2X3QgKmxvY2FsOwogCi0gICAgREVCVUcoMSwgInJheV9kZXRhY2goMHglcClcbiIsIGxpbmspOworCURFQlVHKDEsICJyYXlfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIHRoaXNfZGV2aWNlID0gTlVMTDsKLSAgICBkZXYgPSBsaW5rLT5wcml2OworCXRoaXNfZGV2aWNlID0gTlVMTDsKKwlkZXYgPSBsaW5rLT5wcml2OwogCi0gICAgcmF5X3JlbGVhc2UobGluayk7CisJcmF5X3JlbGVhc2UobGluayk7CiAKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICBpZiAobGluay0+cHJpdikgewotCWlmIChsaW5rLT5kZXZfbm9kZSkgdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLSAgICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKLSAgICB9Ci0gICAgREVCVUcoMiwicmF5X2NzIHJheV9kZXRhY2ggZW5kaW5nXG4iKTsKKwlpZiAobGluay0+cHJpdikgeworCQlpZiAobGluay0+ZGV2X25vZGUpCisJCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlmcmVlX25ldGRldihkZXYpOworCX0KKwlERUJVRygyLCAicmF5X2NzIHJheV9kZXRhY2ggZW5kaW5nXG4iKTsKIH0gLyogcmF5X2RldGFjaCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgcmF5X2NvbmZpZygpIGlzIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CiAgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCkBAIC00MDgsOTIgKzQyMCwxMDEgQEAKICNkZWZpbmUgTUFYX1RVUExFX1NJWkUgMTI4CiBzdGF0aWMgaW50IHJheV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgaW50IGxhc3RfZm4gPSAwLCBsYXN0X3JldCA9IDA7Ci0gICAgaW50IGk7Ci0gICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGxhc3RfZm4gPSAwLCBsYXN0X3JldCA9IDA7CisJaW50IGk7CisJd2luX3JlcV90IHJlcTsKKwltZW1yZXFfdCBtZW07CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICBERUJVRygxLCAicmF5X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJREVCVUcoMSwgInJheV9jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0gICAgLyogRGV0ZXJtaW5lIGNhcmQgdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHByaW50ayhLRVJOX0lORk8gInJheV9jcyBEZXRlY3RlZDogJXMlcyVzJXNcbiIsCi0JICAgbGluay0+cHJvZF9pZFswXSA/IGxpbmstPnByb2RfaWRbMF0gOiAiICIsCi0JICAgbGluay0+cHJvZF9pZFsxXSA/IGxpbmstPnByb2RfaWRbMV0gOiAiICIsCi0JICAgbGluay0+cHJvZF9pZFsyXSA/IGxpbmstPnByb2RfaWRbMl0gOiAiICIsCi0JICAgbGluay0+cHJvZF9pZFszXSA/IGxpbmstPnByb2RfaWRbM10gOiAiICIpOworCS8qIERldGVybWluZSBjYXJkIHR5cGUgYW5kIGZpcm13YXJlIHZlcnNpb24gKi8KKwlwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgRGV0ZWN0ZWQ6ICVzJXMlcyVzXG4iLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzBdID8gbGluay0+cHJvZF9pZFswXSA6ICIgIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFsxXSA/IGxpbmstPnByb2RfaWRbMV0gOiAiICIsCisJICAgICAgIGxpbmstPnByb2RfaWRbMl0gPyBsaW5rLT5wcm9kX2lkWzJdIDogIiAiLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzNdID8gbGluay0+cHJvZF9pZFszXSA6ICIgIik7CiAKLSAgICAvKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAotICAgICAgIGFjdHVhbGx5IGFzc2lnbiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KLSAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7Ci0gICAgCi0gICAgLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKLSAgICAgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KLSAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJLyogTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKKwkgICBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCisJICovCisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKworCS8qIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCisJICovCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIC8qKiogU2V0IHVwIDMyayB3aW5kb3cgZm9yIHNoYXJlZCBtZW1vcnkgKHRyYW5zbWl0IGFuZCBjb250cm9sKSAqKioqKioqKioqKiovCi0gICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKLSAgICByZXEuQmFzZSA9IDA7Ci0gICAgcmVxLlNpemUgPSAweDgwMDA7Ci0gICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKLSAgICBtZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7Ci0gICAgbG9jYWwtPnNyYW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKKwlyZXEuQXR0cmlidXRlcyA9CisJICAgIFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOworCXJlcS5CYXNlID0gMDsKKwlyZXEuU2l6ZSA9IDB4ODAwMDsKKwlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOworCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOworCW1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOworCW1lbS5QYWdlID0gMDsKKwlDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpOworCWxvY2FsLT5zcmFtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCiAvKioqIFNldCB1cCAxNmsgd2luZG93IGZvciBzaGFyZWQgbWVtb3J5IChyZWNlaXZlIGJ1ZmZlcikgKioqKioqKioqKioqKioqLwotICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7Ci0gICAgcmVxLkJhc2UgPSAwOwotICAgIHJlcS5TaXplID0gMHg0MDAwOwotICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAweDgwMDA7IG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5ybWVtX2hhbmRsZSwgJm1lbSkpOwotICAgIGxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CisJcmVxLkF0dHJpYnV0ZXMgPQorCSAgICBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKKwlyZXEuQmFzZSA9IDA7CisJcmVxLlNpemUgPSAweDQwMDA7CisJcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKKwlDU19DSEVDSyhSZXF1ZXN0V2luZG93LAorCQkgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKSk7CisJbWVtLkNhcmRPZmZzZXQgPSAweDgwMDA7CisJbWVtLlBhZ2UgPSAwOworCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPnJtZW1faGFuZGxlLCAmbWVtKSk7CisJbG9jYWwtPnJtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKIC8qKiogU2V0IHVwIHdpbmRvdyBmb3IgYXR0cmlidXRlIG1lbW9yeSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQU0gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOwotICAgIHJlcS5CYXNlID0gMDsKLSAgICByZXEuU2l6ZSA9IDB4MTAwMDsKLSAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSkpOwotICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOyBtZW0uUGFnZSA9IDA7Ci0gICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+YW1lbV9oYW5kbGUsICZtZW0pKTsKLSAgICBsb2NhbC0+YW1lbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOworCXJlcS5BdHRyaWJ1dGVzID0KKwkgICAgV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9BTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CisJcmVxLkJhc2UgPSAwOworCXJlcS5TaXplID0gMHgxMDAwOworCXJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7CisJQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywKKwkJIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSkpOworCW1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOworCW1lbS5QYWdlID0gMDsKKwlDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5hbWVtX2hhbmRsZSwgJm1lbSkpOworCWxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCi0gICAgREVCVUcoMywicmF5X2NvbmZpZyBzcmFtPSVwXG4iLGxvY2FsLT5zcmFtKTsKLSAgICBERUJVRygzLCJyYXlfY29uZmlnIHJtZW09JXBcbiIsbG9jYWwtPnJtZW0pOwotICAgIERFQlVHKDMsInJheV9jb25maWcgYW1lbT0lcFxuIixsb2NhbC0+YW1lbSk7Ci0gICAgaWYgKHJheV9pbml0KGRldikgPCAwKSB7Ci0gICAgICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJREVCVUcoMywgInJheV9jb25maWcgc3JhbT0lcFxuIiwgbG9jYWwtPnNyYW0pOworCURFQlVHKDMsICJyYXlfY29uZmlnIHJtZW09JXBcbiIsIGxvY2FsLT5ybWVtKTsKKwlERUJVRygzLCAicmF5X2NvbmZpZyBhbWVtPSVwXG4iLCBsb2NhbC0+YW1lbSk7CisJaWYgKHJheV9pbml0KGRldikgPCAwKSB7CisJCXJheV9yZWxlYXNlKGxpbmspOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKLSAgICBpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gICAgaWYgKGkgIT0gMCkgewotICAgICAgICBwcmludGsoInJheV9jb25maWcgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLSAgICAgICAgcmF5X3JlbGVhc2UobGluayk7Ci0gICAgICAgIHJldHVybiBpOwotICAgIH0KKwlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGkgIT0gMCkgeworCQlwcmludGsoInJheV9jb25maWcgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKKwkJcmF5X3JlbGVhc2UobGluayk7CisJCXJldHVybiBpOworCX0KIAotICAgIHN0cmNweShsb2NhbC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKLSAgICBsaW5rLT5kZXZfbm9kZSA9ICZsb2NhbC0+bm9kZTsKKwlzdHJjcHkobG9jYWwtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CisJbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7CiAKLSAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmF5TGluaywgaXJxICVkLCBod19hZGRyICVwTVxuIiwKLSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogUmF5TGluaywgaXJxICVkLCBod19hZGRyICVwTVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKLSAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICByZXR1cm4gLUVOT0RFVjsKKwlyYXlfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0gLyogcmF5X2NvbmZpZyAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjY3MgX19pb21lbSAqY2NzX2Jhc2UocmF5X2Rldl90ICpkZXYpCkBAIC01MTYsMjY3ICs1MzcsMjc4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgaW50IGk7Ci0gICAgVUNIQVIgKnA7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBERUJVRygxLCAicmF5X2luaXQoMHglcClcbiIsIGRldik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygwLCJyYXlfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJaW50IGk7CisJVUNIQVIgKnA7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlERUJVRygxLCAicmF5X2luaXQoMHglcClcbiIsIGRldik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygwLCAicmF5X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgbG9jYWwtPm5ldF90eXBlID0gbmV0X3R5cGU7Ci0gICAgbG9jYWwtPnN0YV90eXBlID0gVFlQRV9TVEE7CisJbG9jYWwtPm5ldF90eXBlID0gbmV0X3R5cGU7CisJbG9jYWwtPnN0YV90eXBlID0gVFlQRV9TVEE7CiAKLSAgICAvKiBDb3B5IHRoZSBzdGFydHVwIHJlc3VsdHMgdG8gbG9jYWwgbWVtb3J5ICovCi0gICAgbWVtY3B5X2Zyb21pbygmbG9jYWwtPnN0YXJ0dXBfcmVzLCBsb2NhbC0+c3JhbSArIEVDRl9UT19IT1NUX0JBU0UsXAotICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN0YXJ0dXBfcmVzXzYpKTsKKwkvKiBDb3B5IHRoZSBzdGFydHVwIHJlc3VsdHMgdG8gbG9jYWwgbWVtb3J5ICovCisJbWVtY3B5X2Zyb21pbygmbG9jYWwtPnN0YXJ0dXBfcmVzLCBsb2NhbC0+c3JhbSArIEVDRl9UT19IT1NUX0JBU0UsCisJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc3RhcnR1cF9yZXNfNikpOwogCi0gICAgLyogQ2hlY2sgUG93ZXIgdXAgdGVzdCBzdGF0dXMgYW5kIGdldCBtYWMgYWRkcmVzcyBmcm9tIGNhcmQgKi8KLSAgICBpZiAobG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCAhPSAweDgwKSB7Ci0gICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2luaXQgRVJST1IgY2FyZCBzdGF0dXMgPSAlMnhcbiIsCi0gICAgICAgICAgIGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOSVRfRVJST1I7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJLyogQ2hlY2sgUG93ZXIgdXAgdGVzdCBzdGF0dXMgYW5kIGdldCBtYWMgYWRkcmVzcyBmcm9tIGNhcmQgKi8KKwlpZiAobG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCAhPSAweDgwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheV9pbml0IEVSUk9SIGNhcmQgc3RhdHVzID0gJTJ4XG4iLAorCQkgICAgICAgbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCk7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5JVF9FUlJPUjsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIGxvY2FsLT5md192ZXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblswXTsKLSAgICBsb2NhbC0+ZndfYmxkID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMV07Ci0gICAgbG9jYWwtPmZ3X3ZhciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzJdOwotICAgIERFQlVHKDEsInJheV9pbml0IGZpcm13YXJlIHZlcnNpb24gJWQuJWQgXG4iLGxvY2FsLT5md192ZXIsIGxvY2FsLT5md19ibGQpOworCWxvY2FsLT5md192ZXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblswXTsKKwlsb2NhbC0+ZndfYmxkID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMV07CisJbG9jYWwtPmZ3X3ZhciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzJdOworCURFQlVHKDEsICJyYXlfaW5pdCBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkIFxuIiwgbG9jYWwtPmZ3X3ZlciwKKwkgICAgICBsb2NhbC0+ZndfYmxkKTsKIAotICAgIGxvY2FsLT50aWJfbGVuZ3RoID0gMHgyMDsKLSAgICBpZiAoKGxvY2FsLT5md192ZXIgPT0gNSkgJiYgKGxvY2FsLT5md19ibGQgPj0gMzApKQotICAgICAgICBsb2NhbC0+dGliX2xlbmd0aCA9IGxvY2FsLT5zdGFydHVwX3Jlcy50aWJfbGVuZ3RoOwotICAgIERFQlVHKDIsInJheV9pbml0IHRpYl9sZW5ndGggPSAweCUwMnhcbiIsIGxvY2FsLT50aWJfbGVuZ3RoKTsKLSAgICAvKiBJbml0aWFsaXplIENDUydzIHRvIGJ1ZmZlciBmcmVlIHN0YXRlICovCi0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBmb3IgKGk9MDsgIGk8TlVNQkVSX09GX0NDUzsgIGkrKykgewotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KLSAgICBpbml0X3N0YXJ0dXBfcGFyYW1zKGxvY2FsKTsKKwlsb2NhbC0+dGliX2xlbmd0aCA9IDB4MjA7CisJaWYgKChsb2NhbC0+ZndfdmVyID09IDUpICYmIChsb2NhbC0+ZndfYmxkID49IDMwKSkKKwkJbG9jYWwtPnRpYl9sZW5ndGggPSBsb2NhbC0+c3RhcnR1cF9yZXMudGliX2xlbmd0aDsKKwlERUJVRygyLCAicmF5X2luaXQgdGliX2xlbmd0aCA9IDB4JTAyeFxuIiwgbG9jYWwtPnRpYl9sZW5ndGgpOworCS8qIEluaXRpYWxpemUgQ0NTJ3MgdG8gYnVmZmVyIGZyZWUgc3RhdGUgKi8KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0NTOyBpKyspIHsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwl9CisJaW5pdF9zdGFydHVwX3BhcmFtcyhsb2NhbCk7CiAKLSAgICAvKiBjb3B5IG1hYyBhZGRyZXNzIHRvIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwotICAgIGlmIChwYXJzZV9hZGRyKHBoeV9hZGRyLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcikpCi0gICAgewotICAgICAgICBwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1lbWNweSgmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsCi0gICAgICAgICAgICAgICAmbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXRpb25fYWRkciwgQUREUkxFTik7Ci0gICAgICAgIHAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKLSAgICB9CisJLyogY29weSBtYWMgYWRkcmVzcyB0byBzdGFydHVwIHBhcmFtZXRlcnMgKi8KKwlpZiAocGFyc2VfYWRkcihwaHlfYWRkciwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIpKSB7CisJCXAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKKwl9IGVsc2UgeworCQltZW1jcHkoJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLAorCQkgICAgICAgJmxvY2FsLT5zdGFydHVwX3Jlcy5zdGF0aW9uX2FkZHIsIEFERFJMRU4pOworCQlwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7CisJfQogCi0gICAgY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsgLyogQ2xlYXIgYW55IGludGVycnVwdCBmcm9tIHRoZSBjYXJkICovCi0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BV0FJVElOR19QQVJBTTsKLSAgICBERUJVRygyLCJyYXlfaW5pdCBlbmRpbmdcbiIpOwotICAgIHJldHVybiAwOworCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CS8qIENsZWFyIGFueSBpbnRlcnJ1cHQgZnJvbSB0aGUgY2FyZCAqLworCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVdBSVRJTkdfUEFSQU07CisJREVCVUcoMiwgInJheV9pbml0IGVuZGluZ1xuIik7CisJcmV0dXJuIDA7CiB9IC8qIHJheV9pbml0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyB0byB0aGUgY2FyZCBhbmQgY29tbWFuZCBpdCB0byByZWFkIHRoZW0gICAgICAgKi8KIHN0YXRpYyBpbnQgZGxfc3RhcnR1cF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgY2NzaW5kZXg7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIERFQlVHKDEsImRsX3N0YXJ0dXBfcGFyYW1zIGVudGVyZWRcbiIpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAKLSAgICAvKiBDb3B5IHBhcmFtZXRlcnMgdG8gaG9zdCB0byBFQ0YgYXJlYSAqLwotICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpIAotICAgICAgICBtZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjQsCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7Ci0gICAgZWxzZQotICAgICAgICBtZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjUsCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CisJREVCVUcoMSwgImRsX3N0YXJ0dXBfcGFyYW1zIGVudGVyZWRcbiIpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICAKLSAgICAvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgcmV0dXJuIC0xOwotICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MgPSBjY3NpbmRleDsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUywgJnBjY3MtPmNtZCk7Ci0gICAgREVCVUcoMiwiZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnQgY2NzaW5kZXggPSAlZFxuIiwgbG9jYWwtPmRsX3BhcmFtX2Njcyk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyYXkgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgotICAgICAgICAgICAiRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybiAtMjsKLSAgICB9Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTTsKLSAgICAvKiBTdGFydCBrZXJuZWwgdGltZXIgdG8gd2FpdCBmb3IgZGwgc3RhcnR1cCB0byBjb21wbGV0ZS4gKi8KLSAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWi8yOwotICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnZlcmlmeV9kbF9zdGFydHVwOwotICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBERUJVRygyLCJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnRlZCB0aW1lciBmb3IgdmVyaWZ5X2RsX3N0YXJ0dXBcbiIpOwotICAgIHJldHVybiAwOworCS8qIENvcHkgcGFyYW1ldGVycyB0byBob3N0IHRvIEVDRiBhcmVhICovCisJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKKwkJbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI0LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKKwllbHNlCisJCW1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CisKKwkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKKwkJcmV0dXJuIC0xOworCWxvY2FsLT5kbF9wYXJhbV9jY3MgPSBjY3NpbmRleDsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUywgJnBjY3MtPmNtZCk7CisJREVCVUcoMiwgImRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0IGNjc2luZGV4ID0gJWRcbiIsCisJICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXkgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgorCQkgICAgICAgIkVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm4gLTI7CisJfQorCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU07CisJLyogU3RhcnQga2VybmVsIHRpbWVyIHRvIHdhaXQgZm9yIGRsIHN0YXJ0dXAgdG8gY29tcGxldGUuICovCisJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogLyAyOworCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnZlcmlmeV9kbF9zdGFydHVwOworCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlERUJVRygyLAorCSAgICAgICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnRlZCB0aW1lciBmb3IgdmVyaWZ5X2RsX3N0YXJ0dXBcbiIpOworCXJldHVybiAwOwogfSAvKiBkbF9zdGFydHVwX3BhcmFtcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBpbml0X3N0YXJ0dXBfcGFyYW1zKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgaW50IGk7IAorCWludCBpOwogCi0gICAgaWYgKGNvdW50cnkgPiBKQVBBTl9URVNUKSBjb3VudHJ5ID0gVVNBOwotICAgIGVsc2UKLSAgICAgICAgaWYgKGNvdW50cnkgPCBVU0EpIGNvdW50cnkgPSBVU0E7Ci0gICAgLyogc3RydWN0dXJlIGZvciBob3AgdGltZSBhbmQgYmVhY29uIHBlcmlvZCBpcyBkZWZpbmVkIGhlcmUgdXNpbmcgCi0gICAgICogTmV3IDgwMi4xMUQ2LjEgZm9ybWF0LiAgQ2FyZCBmaXJtd2FyZSBpcyBzdGlsbCB1c2luZyBvbGQgZm9ybWF0Ci0gICAgICogdW50aWwgdmVyc2lvbiA2LgotICAgICAqICAgIEJlZm9yZSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIKLSAgICAgKiAgICBhX2hvcF90aW1lIG1zIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbXMgYnl0ZQotICAgICAqICAgIGFfaG9wX3RpbWUgMnMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBscyBieXRlCi0gICAgICogICAgYV9ob3BfdGltZSBscyBieXRlICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbXMgYnl0ZQotICAgICAqICAgIGFfYmVhY29uX3BlcmlvZCAgICAgICAgICAgYV9iZWFjb25fcGVyaW9kIGxzIGJ5dGUKLSAgICAgKgotICAgICAqICAgIGFfaG9wX3RpbWUgPSB1UyAgICAgICAgICAgYV9ob3BfdGltZSA9IEt1UwotICAgICAqICAgIGFfYmVhY29uX3BlcmlvZCA9IGhvcHMgICAgYV9iZWFjb25fcGVyaW9kID0gS3VTCi0gICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NG1zID0gMDEwMDAwICovCi0gICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgIHsKLSAgICAgICAgbWVtY3B5KChVQ0hBUiAqKSZsb2NhbC0+c3Bhcm0uYjQsIGI0X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywgCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7Ci0gICAgICAgIC8qIFRyYW5zbGF0ZSBzYW5lIGt1cyBpbnB1dCB2YWx1ZXMgdG8gb2xkIGJ1aWxkIDQvNSBmb3JtYXQgKi8KLSAgICAgICAgLyogaSA9IGhvcCB0aW1lIGluIHVTIHRydW5jYXRlZCB0byAzIGJ5dGVzICovCi0gICAgICAgIGkgPSAoaG9wX2R3ZWxsICogMTAyNCkgJiAweGZmZmZmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMF0gPSAoaSA+PiAxNikgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVsxXSA9IChpID4+IDgpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFswXSA9IDA7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMV0gPQotICAgICAgICAgICAgKChiZWFjb25fcGVyaW9kL2hvcF9kd2VsbCkgLSAxKSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0gCi0gICAgICAgICAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XSAtIDE7Ci0gICAgICAgIGlmIChiYykKLSAgICAgICAgewotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfYWNrX3RpbWVvdXQgPSAweDUwOwotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfc2lmcyA9IDB4M2Y7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7ICAgIC8qIFZlcnNpb24gNSB1c2VzIHJlYWwga3VzIHZhbHVlcyAqLwotICAgICAgICBtZW1jcHkoKFVDSEFSICopJmxvY2FsLT5zcGFybS5iNSwgYjVfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLCAKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKKwlpZiAoY291bnRyeSA+IEpBUEFOX1RFU1QpCisJCWNvdW50cnkgPSBVU0E7CisJZWxzZSBpZiAoY291bnRyeSA8IFVTQSkKKwkJY291bnRyeSA9IFVTQTsKKwkvKiBzdHJ1Y3R1cmUgZm9yIGhvcCB0aW1lIGFuZCBiZWFjb24gcGVyaW9kIGlzIGRlZmluZWQgaGVyZSB1c2luZworCSAqIE5ldyA4MDIuMTFENi4xIGZvcm1hdC4gIENhcmQgZmlybXdhcmUgaXMgc3RpbGwgdXNpbmcgb2xkIGZvcm1hdAorCSAqIHVudGlsIHZlcnNpb24gNi4KKwkgKiAgICBCZWZvcmUgICAgICAgICAgICAgICAgICAgIEFmdGVyCisJICogICAgYV9ob3BfdGltZSBtcyBieXRlICAgICAgICBhX2hvcF90aW1lIG1zIGJ5dGUKKwkgKiAgICBhX2hvcF90aW1lIDJzIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbHMgYnl0ZQorCSAqICAgIGFfaG9wX3RpbWUgbHMgYnl0ZSAgICAgICAgYV9iZWFjb25fcGVyaW9kIG1zIGJ5dGUKKwkgKiAgICBhX2JlYWNvbl9wZXJpb2QgICAgICAgICAgIGFfYmVhY29uX3BlcmlvZCBscyBieXRlCisJICoKKwkgKiAgICBhX2hvcF90aW1lID0gdVMgICAgICAgICAgIGFfaG9wX3RpbWUgPSBLdVMKKwkgKiAgICBhX2JlYWNvbl9wZXJpb2QgPSBob3BzICAgIGFfYmVhY29uX3BlcmlvZCA9IEt1UworCSAqLy8qIDY0bXMgPSAwMTAwMDAgKi8KKwlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSB7CisJCW1lbWNweSgoVUNIQVIgKikgJmxvY2FsLT5zcGFybS5iNCwgYjRfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOworCQkvKiBUcmFuc2xhdGUgc2FuZSBrdXMgaW5wdXQgdmFsdWVzIHRvIG9sZCBidWlsZCA0LzUgZm9ybWF0ICovCisJCS8qIGkgPSBob3AgdGltZSBpbiB1UyB0cnVuY2F0ZWQgdG8gMyBieXRlcyAqLworCQlpID0gKGhvcF9kd2VsbCAqIDEwMjQpICYgMHhmZmZmZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzBdID0gKGkgPj4gMTYpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMV0gPSAoaSA+PiA4KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMF0gPSAwOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzFdID0KKwkJICAgICgoYmVhY29uX3BlcmlvZCAvIGhvcF9kd2VsbCkgLSAxKSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0KKwkJICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldIC0gMTsKKwkJaWYgKGJjKSB7CisJCQlsb2NhbC0+c3Bhcm0uYjQuYV9hY2tfdGltZW91dCA9IDB4NTA7CisJCQlsb2NhbC0+c3Bhcm0uYjQuYV9zaWZzID0gMHgzZjsKKwkJfQorCX0gZWxzZSB7IC8qIFZlcnNpb24gNSB1c2VzIHJlYWwga3VzIHZhbHVlcyAqLworCQltZW1jcHkoKFVDSEFSICopICZsb2NhbC0+c3Bhcm0uYjUsIGI1X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKIAotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVswXSA9IChob3BfZHdlbGwgPj4gOCkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVsxXSA9IGhvcF9kd2VsbCAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMF0gPSAoYmVhY29uX3BlcmlvZCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMV0gPSBiZWFjb25fcGVyaW9kICYgMHhmZjsKLSAgICAgICAgaWYgKHBzbSkKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX3Bvd2VyX21ndF9zdGF0ZSA9IDE7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0gCi0gICAgICAgICAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsKLSAgICB9Ci0gICAgCi0gICAgbG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID0gbmV0X3R5cGUgJiAweDAxOwotICAgIGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMgPSBUWVBFX1NUQTsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMF0gPSAoaG9wX2R3ZWxsID4+IDgpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMV0gPSBob3BfZHdlbGwgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzBdID0KKwkJICAgIChiZWFjb25fcGVyaW9kID4+IDgpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFsxXSA9IGJlYWNvbl9wZXJpb2QgJiAweGZmOworCQlpZiAocHNtKQorCQkJbG9jYWwtPnNwYXJtLmI1LmFfcG93ZXJfbWd0X3N0YXRlID0gMTsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OworCQlsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfcGF0dGVybl9sZW5ndGggPQorCQkgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07CisJfQogCi0gICAgaWYgKGVzc2lkICE9IE5VTEwpCi0gICAgICAgIHN0cm5jcHkobG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQsIGVzc2lkLCBFU1NJRF9TSVpFKTsKLX0gLyogaW5pdF9zdGFydHVwX3BhcmFtcyAqLyAKKwlsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPSBuZXRfdHlwZSAmIDB4MDE7CisJbG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cyA9IFRZUEVfU1RBOworCisJaWYgKGVzc2lkICE9IE5VTEwpCisJCXN0cm5jcHkobG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQsIGVzc2lkLCBFU1NJRF9TSVpFKTsKK30gLyogaW5pdF9zdGFydHVwX3BhcmFtcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCB2ZXJpZnlfZGxfc3RhcnR1cCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgbG9jYWwtPmRsX3BhcmFtX2NjczsKLSAgICBVQ0hBUiBzdGF0dXM7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgbG9jYWwtPmRsX3BhcmFtX2NjczsKKwlVQ0hBUiBzdGF0dXM7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgdmVyaWZ5X2RsX3N0YXJ0dXAgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyB2ZXJpZnlfZGxfc3RhcnR1cCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMikgewotICAgIGludCBpOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJ2ZXJpZnlfZGxfc3RhcnR1cCBwYXJhbWV0ZXJzIHNlbnQgdmlhIGNjcyAlZDpcbiIsCi0gICAgICAgICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MpOwotICAgICAgICBmb3IgKGk9MDsgaTxzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKTsgaSsrKSB7Ci0gICAgICAgICAgICBwcmludGsoIiAlMngiLCAodW5zaWduZWQgaW50KSByZWFkYihsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UgKyBpKSk7Ci0gICAgICAgIH0KLSAgICBwcmludGsoIlxuIik7Ci0gICAgfQorCWlmIChwY19kZWJ1ZyA+IDIpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAidmVyaWZ5X2RsX3N0YXJ0dXAgcGFyYW1ldGVycyBzZW50IHZpYSBjY3MgJWQ6XG4iLAorCQkgICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKTsgaSsrKSB7CisJCQlwcmludGsoIiAlMngiLAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIobG9jYWwtPnNyYW0gKworCQkJCQkJICAgSE9TVF9UT19FQ0ZfQkFTRSArIGkpKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQogI2VuZGlmCiAKLSAgICBzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgaWYgKHN0YXR1cyE9IENDU19CVUZGRVJfRlJFRSkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIkRvd25sb2FkIHN0YXJ0dXAgcGFyYW1zIGZhaWxlZC4gIFN0YXR1cyA9ICVkXG4iLAotICAgICAgICAgICBzdGF0dXMpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpCi0gICAgICAgIHN0YXJ0X25ldCgodV9sb25nKWxvY2FsKTsKLSAgICBlbHNlCi0gICAgICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOworCXN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IENDU19CVUZGRVJfRlJFRSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiRG93bmxvYWQgc3RhcnR1cCBwYXJhbXMgZmFpbGVkLiAgU3RhdHVzID0gJWRcbiIsCisJCSAgICAgICBzdGF0dXMpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOworCQlyZXR1cm47CisJfQorCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpCisJCXN0YXJ0X25ldCgodV9sb25nKSBsb2NhbCk7CisJZWxzZQorCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CiAKLSAgICByZXR1cm47CisJcmV0dXJuOwogfSAvKiBlbmQgdmVyaWZ5X2RsX3N0YXJ0dXAgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29tbWFuZCBjYXJkIHRvIHN0YXJ0IGEgbmV0d29yayAqLwogc3RhdGljIHZvaWQgc3RhcnRfbmV0KHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBzdGFydF9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSByZXR1cm47Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfU1RBUlRfTkVUV09SSywgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIuc3RhcnRfbmV0d29yay51cGRhdGVfcGFyYW0pOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5IHN0YXJ0IG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7Ci0gICAgcmV0dXJuOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBjY3NpbmRleDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIHN0YXJ0X25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CisJLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCisJCXJldHVybjsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19TVEFSVF9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLCAicmF5IHN0YXJ0IG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybjsKKwl9CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7CisJcmV0dXJuOwogfSAvKiBlbmQgc3RhcnRfbmV0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvbW1hbmQgY2FyZCB0byBqb2luIGEgbmV0d29yayAqLwogc3RhdGljIHZvaWQgam9pbl9uZXQodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CiAKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBqb2luX25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHJldHVybjsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19KT0lOX05FVFdPUkssICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay51cGRhdGVfcGFyYW0pOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay5uZXRfaW5pdGlhdGVkKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheSBqb2luIG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7Ci0gICAgcmV0dXJuOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgY2NzaW5kZXg7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKKwkJcmV0dXJuOworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX0pPSU5fTkVUV09SSywgJnBjY3MtPmNtZCk7CisJd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7CisJd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwgInJheSBqb2luIG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybjsKKwl9CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7CisJcmV0dXJuOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBBZnRlciBhIGNhcmQgaXMgcmVtb3ZlZCwgcmF5X3JlbGVhc2UoKSB3aWxsIHVucmVnaXN0ZXIgdGhlIG5ldAogICAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcwpAQCAtNzg0LDI1ICs4MTYsMjcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJheV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OyAKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBpbnQgaTsKLSAgICAKLSAgICBERUJVRygxLCAicmF5X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOwogCi0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCURFQlVHKDEsICJyYXlfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpb3VubWFwKGxvY2FsLT5zcmFtKTsKLSAgICBpb3VubWFwKGxvY2FsLT5ybWVtKTsKLSAgICBpb3VubWFwKGxvY2FsLT5hbWVtKTsKLSAgICAvKiBEbyBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+YW1lbV9oYW5kbGUpOwotICAgIGlmICggaSAhPSAwICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsb2NhbC0+YW1lbSkgcmV0ID0gJXhcbiIsaSk7Ci0gICAgaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+cm1lbV9oYW5kbGUpOwotICAgIGlmICggaSAhPSAwICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsaSk7Ci0gICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIERFQlVHKDIsInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CisJaW91bm1hcChsb2NhbC0+c3JhbSk7CisJaW91bm1hcChsb2NhbC0+cm1lbSk7CisJaW91bm1hcChsb2NhbC0+YW1lbSk7CisJLyogRG8gYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLworCWkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPmFtZW1faGFuZGxlKTsKKwlpZiAoaSAhPSAwKQorCQlERUJVRygwLCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+YW1lbSkgcmV0ID0gJXhcbiIsIGkpOworCWkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKKwlpZiAoaSAhPSAwKQorCQlERUJVRygwLCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsIGkpOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKworCURFQlVHKDIsICJyYXlfcmVsZWFzZSBlbmRpbmdcbiIpOwogfQogCiBzdGF0aWMgaW50IHJheV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtODMxLDIzNiArODY1LDI0MiBAQAogc3RhdGljIGludCByYXlfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBSQVlfSU1NRURJQVRFX0lOSVQKLSAgICBpbnQgaTsKLSNlbmRpZgkvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGk7CisjZW5kaWYgLyogUkFZX0lNTUVESUFURV9JTklUICovCisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgREVCVUcoMSwicmF5X2Rldl9pbml0KGRldj0lcClcbiIsZGV2KTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9kZXZfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJREVCVUcoMSwgInJheV9kZXZfaW5pdChkZXY9JXApXG4iLCBkZXYpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9kZXZfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAjaWZkZWYgUkFZX0lNTUVESUFURV9JTklUCi0gICAgLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCi0gICAgaWYgKCAoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCi0gICAgICAgICAgICJyZXR1cm5zIDB4JXhcbiIsaSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZWxzZQkvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KLSAgICAvKiBQb3N0cG9uZSB0aGUgY2FyZCBpbml0IHNvIHRoYXQgd2UgY2FuIHN0aWxsIGNvbmZpZ3VyZSB0aGUgY2FyZCwKLSAgICAgKiBmb3IgZXhhbXBsZSB1c2luZyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucy4gVGhlIGluaXQgd2lsbCBoYXBwZW4KLSAgICAgKiBpbiByYXlfb3BlbigpIC0gSmVhbiBJSSAqLwotICAgIERFQlVHKDEsInJheV9kZXZfaW5pdDogcG9zdHBvbmluZyBjYXJkIGluaXQgdG8gcmF5X29wZW4oKSA7IFN0YXR1cyA9ICVkXG4iLAotCSAgbG9jYWwtPmNhcmRfc3RhdHVzKTsKLSNlbmRpZgkvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KKwkvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KKwlpZiAoKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKKwkJICAgICAgICJyZXR1cm5zIDB4JXhcbiIsIGkpOworCQlyZXR1cm4gLTE7CisJfQorI2Vsc2UgLyogUkFZX0lNTUVESUFURV9JTklUICovCisJLyogUG9zdHBvbmUgdGhlIGNhcmQgaW5pdCBzbyB0aGF0IHdlIGNhbiBzdGlsbCBjb25maWd1cmUgdGhlIGNhcmQsCisJICogZm9yIGV4YW1wbGUgdXNpbmcgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMuIFRoZSBpbml0IHdpbGwgaGFwcGVuCisJICogaW4gcmF5X29wZW4oKSAtIEplYW4gSUkgKi8KKwlERUJVRygxLAorCSAgICAgICJyYXlfZGV2X2luaXQ6IHBvc3Rwb25pbmcgY2FyZCBpbml0IHRvIHJheV9vcGVuKCkgOyBTdGF0dXMgPSAlZFxuIiwKKwkgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMpOworI2VuZGlmIC8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwogCi0gICAgLyogY29weSBtYWMgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgdG8gbGludXggZGV2aWNlICovCi0gICAgbWVtY3B5KCZkZXYtPmRldl9hZGRyLCAmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOwotICAgIG1lbXNldChkZXYtPmJyb2FkY2FzdCwgMHhmZiwgRVRIX0FMRU4pOworCS8qIGNvcHkgbWFjIGFuZCBicm9hZGNhc3QgYWRkcmVzc2VzIHRvIGxpbnV4IGRldmljZSAqLworCW1lbWNweSgmZGV2LT5kZXZfYWRkciwgJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKKwltZW1zZXQoZGV2LT5icm9hZGNhc3QsIDB4ZmYsIEVUSF9BTEVOKTsKIAotICAgIERFQlVHKDIsInJheV9kZXZfaW5pdCBlbmRpbmdcbiIpOwotICAgIHJldHVybiAwOworCURFQlVHKDIsICJyYXlfZGV2X2luaXQgZW5kaW5nXG4iKTsKKwlyZXR1cm4gMDsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfZGV2X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgLyogRHVtbXkgcm91dGluZSB0byBzYXRpc2Z5IGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBERUJVRygxLCJyYXlfZGV2X2NvbmZpZyhkZXY9JXAsaWZtYXA9JXApXG4iLGRldixtYXApOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2Rldl9jb25maWcgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwkvKiBEdW1teSByb3V0aW5lIHRvIHNhdGlzZnkgZGV2aWNlIHN0cnVjdHVyZSAqLworCURFQlVHKDEsICJyYXlfZGV2X2NvbmZpZyhkZXY9JXAsaWZtYXA9JXApXG4iLCBkZXYsIG1hcCk7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2Rldl9jb25maWcgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHNob3J0IGxlbmd0aCA9IHNrYi0+bGVuOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBERUJVRygzLCJyYXlfZGV2X3N0YXJ0X3htaXQoc2tiPSVwLCBkZXY9JXApXG4iLHNrYixkZXYpOwotICAgIGlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gTkVFRF9UT19BVVRIKSB7Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4iKTsKLSAgICAgICAgaWYgKCFidWlsZF9hdXRoX2ZyYW1lIChsb2NhbCwgbG9jYWwtPmF1dGhfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgewotICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVVUSEVOVElDQVRFRDsKLSAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9kZXZfc3RhcnRfeG1pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJREVCVUcoMywgInJheV9kZXZfc3RhcnRfeG1pdChza2I9JXAsIGRldj0lcClcbiIsIHNrYiwgZGV2KTsKKwlpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IE5FRURfVE9fQVVUSCkgeworCQlERUJVRygwLCAicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiIpOworCQlpZiAoIWJ1aWxkX2F1dGhfZnJhbWUobG9jYWwsIGxvY2FsLT5hdXRoX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKKwkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFVVEhFTlRJQ0FURUQ7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KIAotICAgIGlmIChsZW5ndGggPCBFVEhfWkxFTikKLSAgICB7Ci0gICAgCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0gICAgCQlyZXR1cm4gMDsKLSAgICAJbGVuZ3RoID0gRVRIX1pMRU47Ci0gICAgfQotICAgIHN3aXRjaCAocmF5X2h3X3htaXQoIHNrYi0+ZGF0YSwgbGVuZ3RoLCBkZXYsIERBVEFfVFlQRSkpIHsKLSAgICAgICAgY2FzZSBYTUlUX05PX0NDUzoKLSAgICAgICAgY2FzZSBYTUlUX05FRURfQVVUSDoKLQkgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgWE1JVF9OT19JTlRSOgotICAgICAgICBjYXNlIFhNSVRfTVNHX0JBRDoKLSAgICAgICAgY2FzZSBYTUlUX09LOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0gICAgICAgICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CisJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCQlyZXR1cm4gMDsKKwkJbGVuZ3RoID0gRVRIX1pMRU47CisJfQorCXN3aXRjaCAocmF5X2h3X3htaXQoc2tiLT5kYXRhLCBsZW5ndGgsIGRldiwgREFUQV9UWVBFKSkgeworCWNhc2UgWE1JVF9OT19DQ1M6CisJY2FzZSBYTUlUX05FRURfQVVUSDoKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gMTsKKwljYXNlIFhNSVRfTk9fSU5UUjoKKwljYXNlIFhNSVRfTVNHX0JBRDoKKwljYXNlIFhNSVRfT0s6CisJZGVmYXVsdDoKKwkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOwogfSAvKiByYXlfZGV2X3N0YXJ0X3htaXQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCAKLSAgICAgICAgICAgICAgICBVQ0hBUiBtc2dfdHlwZSkKK3N0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIFVDSEFSIG1zZ190eXBlKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaW50IG9mZnNldDsKLSAgICBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsgLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBQQyBzcGFjZSAqLwotICAgIHNob3J0IGludCBhZGRyOyAgICAgLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBjYXJkIHNwYWNlICovCi0gICAgCi0gICAgREVCVUcoMywicmF5X2h3X3htaXQoZGF0YT0lcCwgbGVuPSVkLCBkZXY9JXApXG4iLGRhdGEsbGVuLGRldik7Ci0gICAgaWYgKGxlbiArIFRYX0hFQURFUl9MRU5HVEggPiBUWF9CVUZfU0laRSkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInJheV9od194bWl0IHBhY2tldCB0b28gbGFyZ2U6ICVkIGJ5dGVzXG4iLGxlbik7Ci0gICAgICAgIHJldHVybiBYTUlUX01TR19CQUQ7Ci0gICAgfQorCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgY2NzaW5kZXg7CisJaW50IG9mZnNldDsKKwlzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsJLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBQQyBzcGFjZSAqLworCXNob3J0IGludCBhZGRyOwkJLyogQWRkcmVzcyBvZiB4bWl0IGJ1ZmZlciBpbiBjYXJkIHNwYWNlICovCisKKwlERUJVRygzLCAicmF5X2h3X3htaXQoZGF0YT0lcCwgbGVuPSVkLCBkZXY9JXApXG4iLCBkYXRhLCBsZW4sIGRldik7CisJaWYgKGxlbiArIFRYX0hFQURFUl9MRU5HVEggPiBUWF9CVUZfU0laRSkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXlfaHdfeG1pdCBwYWNrZXQgdG9vIGxhcmdlOiAlZCBieXRlc1xuIiwKKwkJICAgICAgIGxlbik7CisJCXJldHVybiBYTUlUX01TR19CQUQ7CisJfQogCXN3aXRjaCAoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSB7CiAJY2FzZSBFQ0NTQlVTWToKLQkJREVCVUcoMiwicmF5X2h3X3htaXQgdHhfY2NzIHRhYmxlIGJ1c3lcbiIpOworCQlERUJVRygyLCAicmF5X2h3X3htaXQgdHhfY2NzIHRhYmxlIGJ1c3lcbiIpOwogCWNhc2UgRUNDU0ZVTEw6Ci0gICAgICAgIERFQlVHKDIsInJheV9od194bWl0IE5vIGZyZWUgdHggY2NzXG4iKTsKKwkJREVCVUcoMiwgInJheV9od194bWl0IE5vIGZyZWUgdHggY2NzXG4iKTsKIAljYXNlIEVDQVJER09ORToKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgIHJldHVybiBYTUlUX05PX0NDUzsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gWE1JVF9OT19DQ1M7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotICAgIGFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7CisJYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKIAotICAgIGlmIChtc2dfdHlwZSA9PSBEQVRBX1RZUEUpIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnR4X3BhY2tldHMrKzsKLSAgICB9CisJaWYgKG1zZ190eXBlID09IERBVEFfVFlQRSkgeworCQlsb2NhbC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworCQlsb2NhbC0+c3RhdHMudHhfcGFja2V0cysrOworCX0KIAotICAgIHB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKKwlwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7CiAKLSAgICByYXlfYnVpbGRfaGVhZGVyKGxvY2FsLCBwdHgsIG1zZ190eXBlLCBkYXRhKTsKLSAgICBpZiAodHJhbnNsYXRlKSB7Ci0gICAgICAgIG9mZnNldCA9IHRyYW5zbGF0ZV9mcmFtZShsb2NhbCwgcHR4LCBkYXRhLCBsZW4pOwotICAgIH0KLSAgICBlbHNlIHsgLyogRW5jYXBzdWxhdGUgZnJhbWUgKi8KLSAgICAgICAgLyogVEJEIFRJQiBsZW5ndGggd2lsbCBtb3ZlIGFkZHJlc3Mgb2YgcHR4LT52YXIgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhLCBsZW4pOwotICAgICAgICBvZmZzZXQgPSAwOwotICAgIH0KKwlyYXlfYnVpbGRfaGVhZGVyKGxvY2FsLCBwdHgsIG1zZ190eXBlLCBkYXRhKTsKKwlpZiAodHJhbnNsYXRlKSB7CisJCW9mZnNldCA9IHRyYW5zbGF0ZV9mcmFtZShsb2NhbCwgcHR4LCBkYXRhLCBsZW4pOworCX0gZWxzZSB7IC8qIEVuY2Fwc3VsYXRlIGZyYW1lICovCisJCS8qIFRCRCBUSUIgbGVuZ3RoIHdpbGwgbW92ZSBhZGRyZXNzIG9mIHB0eC0+dmFyICovCisJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSwgbGVuKTsKKwkJb2Zmc2V0ID0gMDsKKwl9CiAKLSAgICAvKiBmaWxsIGluIHRoZSBDQ1MgKi8KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgbGVuICs9IFRYX0hFQURFUl9MRU5HVEggKyBvZmZzZXQ7Ci0gICAgd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoYWRkciA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMF0pOwotICAgIHdyaXRlYihsb2NhbC0+dGliX2xlbmd0aCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzFdKTsKLSAgICB3cml0ZWIobGVuID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFswXSk7Ci0gICAgd3JpdGViKGxlbiAmIDB4ZmYsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFsxXSk7CisJLyogZmlsbCBpbiB0aGUgQ0NTICovCisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCWxlbiArPSBUWF9IRUFERVJfTEVOR1RIICsgb2Zmc2V0OworCXdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7CisJd3JpdGViKGFkZHIgPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzBdKTsKKwl3cml0ZWIobG9jYWwtPnRpYl9sZW5ndGgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clsxXSk7CisJd3JpdGViKGxlbiA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMF0pOworCXdyaXRlYihsZW4gJiAweGZmLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMV0pOwogLyogVEJEIHN0aWxsIG5lZWQgcHNtX2NhbT8gKi8KLSAgICB3cml0ZWIoUFNNX0NBTSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7Ci0gICAgd3JpdGViKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfcmF0ZSk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5hbnRlbm5hKTsKLSAgICBERUJVRygzLCJyYXlfaHdfeG1pdCBkZWZhdWx0X3R4X3JhdGUgPSAweCV4XG4iLFwKLSAgICAgICAgICBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSk7CisJd3JpdGViKFBTTV9DQU0sICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOworCXdyaXRlYihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X3JhdGUpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QuYW50ZW5uYSk7CisJREVCVUcoMywgInJheV9od194bWl0IGRlZmF1bHRfdHhfcmF0ZSA9IDB4JXhcbiIsCisJICAgICAgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUpOwogCi0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygyLCJyYXlfaHdfeG1pdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDIsICJyYXlfaHdfeG1pdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKIC8qIFRCRCB2ZXJ5IGluZWZmaWNpZW50IHRvIGNvcHkgcGFja2V0IHRvIGJ1ZmZlciwgYW5kIHRoZW4gbm90CiAgICBzZW5kIGl0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIHRvIHF1ZXVlIHRoZSBtZXNzYWdlcyBhbmQgdGhhdAogICAgd29uJ3QgYmUgZG9uZSBmb3IgYSB3aGlsZS4gIE1heWJlIHNldCB0YnVzeSB1bnRpbCBhIENDUyBpcyBmcmVlPwogKi8KLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm4gWE1JVF9OT19JTlRSOwotICAgIH0KLSAgICByZXR1cm4gWE1JVF9PSzsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm4gWE1JVF9OT19JTlRSOworCX0KKwlyZXR1cm4gWE1JVF9PSzsKIH0gLyogZW5kIHJheV9od194bWl0ICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwgdW5zaWduZWQgY2hhciAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbikKLXsKLSAgICBfX2JlMTYgcHJvdG8gPSAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9wcm90bzsKLSAgICBpZiAobnRvaHMocHJvdG8pID49IDE1MzYpIHsgLyogRElYIElJIGV0aGVybmV0IGZyYW1lICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgRElYIElJXG4iKTsKLSAgICAgICAgLyogQ29weSBMTEMgaGVhZGVyIHRvIGNhcmQgYnVmZmVyICovCi0gICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZXRoMl9sbGMsIHNpemVvZihldGgyX2xsYykpOwotICAgICAgICBtZW1jcHlfdG9pbyggKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIpICsgc2l6ZW9mKGV0aDJfbGxjKSwgKFVDSEFSICopJnByb3RvLCAyKTsKLSAgICAgICAgaWYgKHByb3RvID09IGh0b25zKEVUSF9QX0FBUlApIHx8IHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkpIHsKLSAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIHNlbGVjdGl2ZSB0cmFuc2xhdGlvbiB0YWJsZSwgb25seSAyIGVudHJpZXMgKi8KLSAgICAgICAgICAgIHdyaXRlYigweGY4LCAmKChzdHJ1Y3Qgc25hcGhkcl90IF9faW9tZW0gKilwdHgtPnZhciktPm9yZ1szXSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQ29weSBib2R5IG9mIGV0aGVybmV0IHBhY2tldCB3aXRob3V0IGV0aGVybmV0IGhlYWRlciAqLwotICAgICAgICBtZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyICsgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpLCBcCi0gICAgICAgICAgICAgICAgICAgIGRhdGEgKyBFVEhfSExFTiwgIGxlbiAtIEVUSF9ITEVOKTsKLSAgICAgICAgcmV0dXJuIChpbnQpIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwotICAgIH0KLSAgICBlbHNlIHsgLyogYWxyZWFkeSAgODAyIHR5cGUsIGFuZCBwcm90byBpcyBsZW5ndGggKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSA4MDJcbiIpOwotICAgICAgICBpZiAocHJvdG8gPT0gaHRvbnMoMHhmZmZmKSkgeyAvKiBldmlsIG5ldHdhcmUgSVBYIDgwMi4zIHdpdGhvdXQgTExDICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgZXZpbCBJUFhcbiIpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sICBsZW4gLSBFVEhfSExFTik7Ci0gICAgICAgICAgICByZXR1cm4gMCAtIEVUSF9ITEVOOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCAgbGVuIC0gRVRIX0hMRU4pOwotICAgICAgICByZXR1cm4gMCAtIEVUSF9ITEVOOwotICAgIH0KLSAgICAvKiBUQkQgZG8gb3RoZXIgZnJhbWUgdHlwZXMgKi8KLX0gLyogZW5kIHRyYW5zbGF0ZV9mcmFtZSAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwgVUNIQVIgbXNnX3R5cGUsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSkKLXsKLSAgICB3cml0ZWIoUFJPVE9DT0xfVkVSIHwgbXNnX3R5cGUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7Ci0vKioqIElFRUUgODAyLjExIEFkZHJlc3MgZmllbGQgYXNzaWdubWVudHMgKioqKioqKioqKioqKgotICAgICAgICAgICAgICAgIFRPRFMgRlJPTURTICAgYWRkcl8xICAgICBhZGRyXzIgICAgICAgICAgYWRkcl8zICAgYWRkcl80Ci1BZGhvYyAgICAgICAgICAgMCAgICAwICAgICAgICBkZXN0ICAgICAgIHNyYyAodGVybWluYWwpICBCU1NJRCAgICBOL0EKLUFQIHRvIFRlcm1pbmFsICAwICAgIDEgICAgICAgIGRlc3QgICAgICAgQVAoQlNTSUQpICAgICAgIHNvdXJjZSAgIE4vQQotVGVybWluYWwgdG8gQVAgIDEgICAgMCAgICAgICAgQVAoQlNTSUQpICBzcmMgKHRlcm1pbmFsKSAgZGVzdCAgICAgTi9BCi1BUCB0byBBUCAgICAgICAgMSAgICAxICAgICAgICBkZXN0IEFQICAgIHNyYyBBUCAgICAgICAgICBkZXN0ICAgICBzb3VyY2UgICAgICAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgaWYgKGxvY2FsLT5uZXRfdHlwZSA9PSBBREhPQykgeyAgIAotICAgICAgICB3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKLSAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCAyICogQUREUkxFTik7Ci0gICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7Ci0gICAgfQotICAgIGVsc2UgLyogaW5mcmFzdHJ1Y3R1cmUgKi8KLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZWIoRkMyX0ZST01fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+YnNzX2lkLCA2KTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8qIFRlcm1pbmFsICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlYihGQzJfVE9fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKLSAgICAgICAgfQotICAgIH0KLX0gLyogZW5kIGVuY2Fwc3VsYXRlX2ZyYW1lICovCiAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyBpbnQgdHJhbnNsYXRlX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAorCQkJICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlfX2JlMTYgcHJvdG8gPSAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9wcm90bzsKKwlpZiAobnRvaHMocHJvdG8pID49IDE1MzYpIHsgLyogRElYIElJIGV0aGVybmV0IGZyYW1lICovCisJCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIERJWCBJSVxuIik7CisJCS8qIENvcHkgTExDIGhlYWRlciB0byBjYXJkIGJ1ZmZlciAqLworCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGV0aDJfbGxjLCBzaXplb2YoZXRoMl9sbGMpKTsKKwkJbWVtY3B5X3RvaW8oKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIpICsgc2l6ZW9mKGV0aDJfbGxjKSwKKwkJCSAgICAoVUNIQVIgKikgJnByb3RvLCAyKTsKKwkJaWYgKHByb3RvID09IGh0b25zKEVUSF9QX0FBUlApIHx8IHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkpIHsKKwkJCS8qIFRoaXMgaXMgdGhlIHNlbGVjdGl2ZSB0cmFuc2xhdGlvbiB0YWJsZSwgb25seSAyIGVudHJpZXMgKi8KKwkJCXdyaXRlYigweGY4LAorCQkJICAgICAgICYoKHN0cnVjdCBzbmFwaGRyX3QgX19pb21lbSAqKXB0eC0+dmFyKS0+b3JnWzNdKTsKKwkJfQorCQkvKiBDb3B5IGJvZHkgb2YgZXRoZXJuZXQgcGFja2V0IHdpdGhvdXQgZXRoZXJuZXQgaGVhZGVyICovCisJCW1lbWNweV90b2lvKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIgKworCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSwgZGF0YSArIEVUSF9ITEVOLAorCQkJICAgIGxlbiAtIEVUSF9ITEVOKTsKKwkJcmV0dXJuIChpbnQpc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47CisJfSBlbHNlIHsgLyogYWxyZWFkeSAgODAyIHR5cGUsIGFuZCBwcm90byBpcyBsZW5ndGggKi8KKwkJREVCVUcoMywgInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgODAyXG4iKTsKKwkJaWYgKHByb3RvID09IGh0b25zKDB4ZmZmZikpIHsgLyogZXZpbCBuZXR3YXJlIElQWCA4MDIuMyB3aXRob3V0IExMQyAqLworCQkJREVCVUcoMywgInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgZXZpbCBJUFhcbiIpOworCQkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sIGxlbiAtIEVUSF9ITEVOKTsKKwkJCXJldHVybiAwIC0gRVRIX0hMRU47CisJCX0KKwkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sIGxlbiAtIEVUSF9ITEVOKTsKKwkJcmV0dXJuIDAgLSBFVEhfSExFTjsKKwl9CisJLyogVEJEIGRvIG90aGVyIGZyYW1lIHR5cGVzICovCit9IC8qIGVuZCB0cmFuc2xhdGVfZnJhbWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKKwkJCSAgICAgVUNIQVIgbXNnX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJd3JpdGViKFBST1RPQ09MX1ZFUiB8IG1zZ190eXBlLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOworLyoqKiBJRUVFIDgwMi4xMSBBZGRyZXNzIGZpZWxkIGFzc2lnbm1lbnRzICoqKioqKioqKioqKioKKwkJVE9EUwlGUk9NRFMJYWRkcl8xCQlhZGRyXzIJCWFkZHJfMwlhZGRyXzQKK0FkaG9jCQkwCTAJZGVzdAkJc3JjICh0ZXJtaW5hbCkJQlNTSUQJTi9BCitBUCB0byBUZXJtaW5hbAkwCTEJZGVzdAkJQVAoQlNTSUQpCXNvdXJjZQlOL0EKK1Rlcm1pbmFsIHRvIEFQCTEJMAlBUChCU1NJRCkJc3JjICh0ZXJtaW5hbCkJZGVzdAlOL0EKK0FQIHRvIEFQCTEJMQlkZXN0IEFQCQlzcmMgQVAJCWRlc3QJc291cmNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChsb2NhbC0+bmV0X3R5cGUgPT0gQURIT0MpIHsKKwkJd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwKKwkJCSAgICAyICogQUREUkxFTik7CisJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CisJfSBlbHNlIHsgLyogaW5mcmFzdHJ1Y3R1cmUgKi8KKworCQlpZiAobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykgeworCQkJd3JpdGViKEZDMl9GUk9NX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPmJzc19pZCwgNik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7CisJCX0gZWxzZSB7IC8qIFRlcm1pbmFsICovCisKKwkJCXdyaXRlYihGQzJfVE9fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKKwkJfQorCX0KK30gLyogZW5kIGVuY2Fwc3VsYXRlX2ZyYW1lICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMTA3MSw3ICsxMTExLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKKwkuZ2V0X2RydmluZm8gPSBuZXRkZXZfZ2V0X2RydmluZm8sCiB9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTEwODEsOSArMTEyMSw3IEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IHByb3RvY29sIG5hbWUKICAqLwogc3RhdGljIGludCByYXlfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQljaGFyICpjd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjd3JxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJjcHkoY3dycSwgIklFRUUgODAyLjExLUZIIik7CiAJcmV0dXJuIDA7CkBAIC0xMDk1LDE0ICsxMTMzLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCkBAIC0xMTEzLDE1ICsxMTUwLDE0IEBACiAKIAlyZXR1cm4gZXJyOwogfQotIAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBmcmVxdWVuY3kKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xMTM2LDIyICsxMTcyLDIxIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJIGNoYXIgKmV4dHJhKQorCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2hlY2sgaWYgd2UgYXNrZWQgZm9yIGBhbnknICovCi0JaWYoZHdycS0+ZmxhZ3MgPT0gMCkgeworCWlmIChkd3JxLT5mbGFncyA9PSAwKSB7CiAJCS8qIENvcmV5IDogY2FuIHlvdSBkbyB0aGF0ID8gKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0gZWxzZSB7CiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgKi8KLQkJaWYoZHdycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpIHsKKwkJaWYgKGR3cnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKSB7CiAJCQlyZXR1cm4gLUUyQklHOwogCQl9CiAKQEAgLTExNjAsNyArMTE5NSw3IEBACiAJCW1lbWNweShsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZCwgZXh0cmEsIGR3cnEtPmxlbmd0aCk7CiAJfQogCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTExNjksOCArMTIwNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJIGNoYXIgKmV4dHJhKQorCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTExNzksNyArMTIxMyw3IEBACiAKIAkvKiBQdXNoIGl0IG91dCAhICovCiAJZHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKTsKLQlkd3JxLT5mbGFncyA9IDE7IC8qIGFjdGl2ZSAqLworCWR3cnEtPmZsYWdzID0gMTsJLyogYWN0aXZlICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODksOSArMTIyMyw4IEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IEFQIGFkZHJlc3MKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBzb2NrYWRkciAqYXdycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTEyMDcsMjUgKzEyNDAsMjQgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2hlY2sgaWYgcmF0ZSBpcyBpbiByYW5nZSAqLwotCWlmKCh2d3JxLT52YWx1ZSAhPSAxMDAwMDAwKSAmJiAodndycS0+dmFsdWUgIT0gMjAwMDAwMCkpCisJaWYgKCh2d3JxLT52YWx1ZSAhPSAxMDAwMDAwKSAmJiAodndycS0+dmFsdWUgIT0gMjAwMDAwMCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogSGFjayBmb3IgMS41IE1iL3MgaW5zdGVhZCBvZiAyIE1iL3MgKi8KLQlpZigobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAmJgkJLyogUGxlYXNlIGNoZWNrICovCi0JICAgKHZ3cnEtPnZhbHVlID09IDIwMDAwMDApKQorCWlmICgobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAmJgkvKiBQbGVhc2UgY2hlY2sgKi8KKwkgICAgKHZ3cnEtPnZhbHVlID09IDIwMDAwMDApKQogCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IDM7CiAJZWxzZQotCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IHZ3cnEtPnZhbHVlLzUwMDAwMDsKKwkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSB2d3JxLT52YWx1ZSAvIDUwMDAwMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTIzNiwxNiArMTI2OCwxNSBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID09IDMpCi0JCXZ3cnEtPnZhbHVlID0gMjAwMDAwMDsJCS8qIEh1bS4uLiAqLworCWlmIChsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9PSAzKQorCQl2d3JxLT52YWx1ZSA9IDIwMDAwMDA7CS8qIEh1bS4uLiAqLwogCWVsc2UKIAkJdndycS0+dmFsdWUgPSBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSAqIDUwMDAwMDsKLQl2d3JxLT5maXhlZCA9IDA7CQkvKiBXZSBhcmUgaW4gYXV0byBtb2RlICovCisJdndycS0+Zml4ZWQgPSAwOwkvKiBXZSBhcmUgaW4gYXV0byBtb2RlICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNTYsNDMgKzEyODcsNDAgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJICAgICAgIGNoYXIgKmV4dHJhKQorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcnRociA9IHZ3cnEtPnZhbHVlOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIGlmKHdycS0+dS5ydHMuZml4ZWQgPT0gMCkgd2Ugc2hvdWxkIGNvbXBsYWluICovCi0JaWYodndycS0+ZGlzYWJsZWQpCisJaWYgKHZ3cnEtPmRpc2FibGVkKQogCQlydGhyID0gMzI3Njc7CiAJZWxzZSB7Ci0JCWlmKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzQ3KSkgLyogV2hhdCdzIHRoZSBtYXggcGFja2V0IHNpemUgPz8/ICovCisJCWlmICgocnRociA8IDApIHx8IChydGhyID4gMjM0NykpICAgLyogV2hhdCdzIHRoZSBtYXggcGFja2V0IHNpemUgPz8/ICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFswXSA9IChydGhyID4+IDgpICYgMHhGRjsKIAlsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzFdID0gcnRociAmIDB4RkY7CiAKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXJldHVybiAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBSVFMgdGhyZXNob2xkCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCSAgICAgICBjaGFyICpleHRyYSkKKwkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2d3JxLT52YWx1ZSA9IChsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzBdIDw8IDgpCi0JCSsgbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFsxXTsKKwkgICAgKyBsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzFdOwogCXZ3cnEtPmRpc2FibGVkID0gKHZ3cnEtPnZhbHVlID09IDMyNzY3KTsKIAl2d3JxLT5maXhlZCA9IDE7CiAKQEAgLTEzMDUsMjcgKzEzMzMsMjYgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGZ0aHIgPSB2d3JxLT52YWx1ZTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBpZih3cnEtPnUuZnJhZy5maXhlZCA9PSAwKSBzaG91bGQgY29tcGxhaW4gKi8KLQlpZih2d3JxLT5kaXNhYmxlZCkKKwlpZiAodndycS0+ZGlzYWJsZWQpCiAJCWZ0aHIgPSAzMjc2NzsKIAllbHNlIHsKLQkJaWYoKGZ0aHIgPCAyNTYpIHx8IChmdGhyID4gMjM0NykpIC8qIFRvIGNoZWNrIG91dCAhICovCisJCWlmICgoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzQ3KSkJLyogVG8gY2hlY2sgb3V0ICEgKi8KIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFswXSA9IChmdGhyID4+IDgpICYgMHhGRjsKIAlsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFsxXSA9IGZ0aHIgJiAweEZGOwogCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEzMzQsMTMgKzEzNjEsMTIgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2d3JxLT52YWx1ZSA9IChsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFswXSA8PCA4KQotCQkrIGxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzFdOworCSAgICArIGxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzFdOwogCXZ3cnEtPmRpc2FibGVkID0gKHZ3cnEtPnZhbHVlID09IDMyNzY3KTsKIAl2d3JxLT5maXhlZCA9IDE7CiAKQEAgLTEzNTIsMjMgKzEzNzgsMjAgQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBzZXQgTW9kZSBvZiBPcGVyYXRpb24KICAqLwogc3RhdGljIGludCByYXlfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlfX3UzMiAqdXdycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKnV3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogCWNoYXIgY2FyZF9tb2RlID0gMTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKCp1d3JxKQotCXsKKwlzd2l0Y2ggKCp1d3JxKSB7CiAJY2FzZSBJV19NT0RFX0FESE9DOgogCQljYXJkX21vZGUgPSAwOwotCQkvLyBGYWxsIHRocm91Z2gKKwkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBJV19NT0RFX0lORlJBOgogCQlsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUgPSBjYXJkX21vZGU7CiAJCWJyZWFrOwpAQCAtMTM4NCwxMyArMTQwNywxMSBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBNb2RlIG9mIE9wZXJhdGlvbgogICovCiBzdGF0aWMgaW50IHJheV9nZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCV9fdTMyICp1d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBfX3UzMiAqdXdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZihsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUpCisJaWYgKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSkKIAkJKnV3cnEgPSBJV19NT0RFX0lORlJBOwogCWVsc2UKIAkJKnV3cnEgPSBJV19NT0RFX0FESE9DOwpAQCAtMTQwNCwxMiArMTQyNSwxMSBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfcmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwKLQkJCSBjaGFyICpleHRyYSkKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7CiAKLQltZW1zZXQoKGNoYXIgKikgcmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKwltZW1zZXQoKGNoYXIgKilyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwogCiAJLyogU2V0IHRoZSBsZW5ndGggKHZlcnkgaW1wb3J0YW50IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSAqLwogCWR3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwpAQCAtMTQyMCw3ICsxNDQwLDcgQEAKIAogCS8qIFNldCBpbmZvcm1hdGlvbiBpbiB0aGUgcmFuZ2Ugc3RydWN0ICovCiAJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjEgKiAxMDAwICogMTAwMDsJLyogUHV0IHRoZSByaWdodCBudW1iZXIgaGVyZSAqLwotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsgCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOwogCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDA7CiAJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMjU1OwkvKiBXaGF0J3MgdGhlIGNvcnJlY3QgdmFsdWUgPyAqLwpAQCAtMTQzNyw4ICsxNDU3LDcgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2ZyYW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgY2hhciAqZXh0cmEpCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAl0cmFuc2xhdGUgPSAqKGV4dHJhKTsJLyogU2V0IGZyYW1pbmcgbW9kZSAqLwogCkBAIC0xNDUxLDggKzE0NzAsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZnJhbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICBjaGFyICpleHRyYSkKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCSooZXh0cmEpID0gdHJhbnNsYXRlOwogCkBAIC0xNDY1LDggKzE0ODMsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfY291bnRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICBjaGFyICpleHRyYSkKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCSooZXh0cmEpID0gY291bnRyeTsKIApAQCAtMTQ3NywxMSArMTQ5NCwxMCBAQAogLyoKICAqIENvbW1pdCBoYW5kbGVyIDogY2FsbGVkIGFmdGVyIGEgYnVuY2ggb2YgU0VUIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIGludCByYXlfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCS8qIE5VTEwgKi8KLQkJICAgICAgdm9pZCAqendycSwJCQkvKiBOVUxMICovCi0JCSAgICAgIGNoYXIgKmV4dHJhKQkJCS8qIE5VTEwgKi8KLXsKK3N0YXRpYyBpbnQgcmF5X2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAkvKiBOVUxMICovCisJCSAgICAgIHZvaWQgKnp3cnEsCS8qIE5VTEwgKi8KKwkJICAgICAgY2hhciAqZXh0cmEpCit7IC8qIE5VTEwgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ4OSwzMyArMTUwNSwzNCBAQAogLyoKICAqIFN0YXRzIGhhbmRsZXIgOiByZXR1cm4gV2lyZWxlc3MgU3RhdHMKICAqLwotc3RhdGljIGl3X3N0YXRzICogcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKK3N0YXRpYyBpd19zdGF0cyAqcmF5X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICByYXlfZGV2X3QgKglsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKIAotICBpZihsb2NhbCA9PSAocmF5X2Rldl90ICopIE5VTEwpCi0gICAgcmV0dXJuIChpd19zdGF0cyAqKSBOVUxMOworCWlmIChsb2NhbCA9PSAocmF5X2Rldl90ICopIE5VTEwpCisJCXJldHVybiAoaXdfc3RhdHMgKikgTlVMTDsKIAotICBsb2NhbC0+d3N0YXRzLnN0YXR1cyA9IGxvY2FsLT5jYXJkX3N0YXR1czsKKwlsb2NhbC0+d3N0YXRzLnN0YXR1cyA9IGxvY2FsLT5jYXJkX3N0YXR1czsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgaWYoKGxvY2FsLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgJiYgKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSA9PSAwKSkKLSAgICB7Ci0gICAgICAvKiBHZXQgaXQgZnJvbSB0aGUgZmlyc3Qgbm9kZSBpbiBzcHkgbGlzdCAqLwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5ub2lzZTsKLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7Ci0gICAgfQorCWlmICgobG9jYWwtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKQorCSAgICAmJiAobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlID09IDApKSB7CisJCS8qIEdldCBpdCBmcm9tIHRoZSBmaXJzdCBub2RlIGluIHNweSBsaXN0ICovCisJCWxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7CisJCWxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOworCQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9CisJCSAgICBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKKwl9CiAjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiAKLSAgaWYocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7Ci0gICAgbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gcmVhZGIoJnAtPnJ4bm9pc2UpOwotICAgIGxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkIHw9IDQ7Ci0gIH0KKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CisJCWxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IHJlYWRiKCZwLT5yeG5vaXNlKTsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gNDsKKwl9CiAKLSAgcmV0dXJuICZsb2NhbC0+d3N0YXRzOworCXJldHVybiAmbG9jYWwtPndzdGF0czsKIH0gLyogZW5kIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTUyMywxMTU5ICsxNTQwLDEyNjQgQEAKICAqIFN0cnVjdHVyZXMgdG8gZXhwb3J0IHRoZSBXaXJlbGVzcyBIYW5kbGVycwogICovCiAKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCXJheV9oYW5kbGVyW10gPSB7Ci0JW1NJT0NTSVdDT01NSVQtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9jb21taXQsCi0JW1NJT0NHSVdOQU1FICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbmFtZSwKLQlbU0lPQ1NJV0ZSRVEgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmVxLAotCVtTSU9DR0lXRlJFUSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyZXEsCi0JW1NJT0NTSVdNT0RFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfbW9kZSwKLQlbU0lPQ0dJV01PREUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9tb2RlLAotCVtTSU9DR0lXUkFOR0UgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhbmdlLAorc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcmF5X2hhbmRsZXJbXSA9IHsKKwlbU0lPQ1NJV0NPTU1JVCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfY29tbWl0LAorCVtTSU9DR0lXTkFNRSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X25hbWUsCisJW1NJT0NTSVdGUkVRIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJlcSwKKwlbU0lPQ0dJV0ZSRVEgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmVxLAorCVtTSU9DU0lXTU9ERSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X21vZGUsCisJW1NJT0NHSVdNT0RFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbW9kZSwKKwlbU0lPQ0dJV1JBTkdFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmFuZ2UsCiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gCVtTSU9DU0lXU1BZICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF9zcHksCi0JW1NJT0NHSVdTUFkgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3NweSwKLQlbU0lPQ1NJV1RIUlNQWS1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfdGhyc3B5LAotCVtTSU9DR0lXVEhSU1BZLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF90aHJzcHksCi0jZW5kaWYJLyogV0lSRUxFU1NfU1BZICovCi0JW1NJT0NHSVdBUCAgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfd2FwLAotCVtTSU9DU0lXRVNTSUQgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2Vzc2lkLAotCVtTSU9DR0lXRVNTSUQgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2Vzc2lkLAotCVtTSU9DU0lXUkFURSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3JhdGUsCi0JW1NJT0NHSVdSQVRFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmF0ZSwKLQlbU0lPQ1NJV1JUUyAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9ydHMsCi0JW1NJT0NHSVdSVFMgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcnRzLAotCVtTSU9DU0lXRlJBRyAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyYWcsCi0JW1NJT0NHSVdGUkFHICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJhZywKKwlbU0lPQ1NJV1NQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF9zcHksCisJW1NJT0NHSVdTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfc3B5LAorCVtTSU9DU0lXVEhSU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3RocnNweSwKKwlbU0lPQ0dJV1RIUlNQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF90aHJzcHksCisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCisJW1NJT0NHSVdBUCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3dhcCwKKwlbU0lPQ1NJV0VTU0lEIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZXNzaWQsCisJW1NJT0NHSVdFU1NJRCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2Vzc2lkLAorCVtTSU9DU0lXUkFURSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3JhdGUsCisJW1NJT0NHSVdSQVRFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmF0ZSwKKwlbU0lPQ1NJV1JUUyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3J0cywKKwlbU0lPQ0dJV1JUUyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3J0cywKKwlbU0lPQ1NJV0ZSQUcgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmFnLAorCVtTSU9DR0lXRlJBRyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyYWcsCiB9OwogCi0jZGVmaW5lIFNJT0NTSVBGUkFNSU5HCVNJT0NJV0ZJUlNUUFJJVgkJLyogU2V0IGZyYW1pbmcgbW9kZSAqLworI2RlZmluZSBTSU9DU0lQRlJBTUlORwlTSU9DSVdGSVJTVFBSSVYJLyogU2V0IGZyYW1pbmcgbW9kZSAqLwogI2RlZmluZSBTSU9DR0lQRlJBTUlORwlTSU9DSVdGSVJTVFBSSVYgKyAxCS8qIEdldCBmcmFtaW5nIG1vZGUgKi8KICNkZWZpbmUgU0lPQ0dJUENPVU5UUlkJU0lPQ0lXRklSU1RQUklWICsgMwkvKiBHZXQgY291bnRyeSBjb2RlICovCiAKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCXJheV9wcml2YXRlX2hhbmRsZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJheV9wcml2YXRlX2hhbmRsZXJbXSA9IHsKIAlbMF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmFtaW5nLAogCVsxXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyYW1pbmcsCiAJWzNdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfY291bnRyeSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzCXJheV9wcml2YXRlX2FyZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIHJheV9wcml2YXRlX2FyZ3NbXSA9IHsKIC8qIGNtZCwJCXNldF9hcmdzLAlnZXRfYXJncywJbmFtZSAqLwoteyBTSU9DU0lQRlJBTUlORywgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X2ZyYW1pbmciIH0sCi17IFNJT0NHSVBGUkFNSU5HLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRfZnJhbWluZyIgfSwKLXsgU0lPQ0dJUENPVU5UUlksIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldF9jb3VudHJ5IiB9LAorCXtTSU9DU0lQRlJBTUlORywgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLAorCSAic2V0X2ZyYW1pbmcifSwKKwl7U0lPQ0dJUEZSQU1JTkcsIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgImdldF9mcmFtaW5nIn0sCisJe1NJT0NHSVBDT1VOVFJZLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICJnZXRfY291bnRyeSJ9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglyYXlfaGFuZGxlcl9kZWYgPQotewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKHJheV9oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGUJPSBBUlJBWV9TSVpFKHJheV9wcml2YXRlX2hhbmRsZXIpLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiByYXlfaGFuZGxlcl9kZWYgPSB7CisJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUocmF5X2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUocmF5X3ByaXZhdGVfaGFuZGxlciksCiAJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKHJheV9wcml2YXRlX2FyZ3MpLAotCS5zdGFuZGFyZAk9IHJheV9oYW5kbGVyLAotCS5wcml2YXRlCT0gcmF5X3ByaXZhdGVfaGFuZGxlciwKLQkucHJpdmF0ZV9hcmdzCT0gcmF5X3ByaXZhdGVfYXJncywKKwkuc3RhbmRhcmQgPSByYXlfaGFuZGxlciwKKwkucHJpdmF0ZSA9IHJheV9wcml2YXRlX2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyA9IHJheV9wcml2YXRlX2FyZ3MsCiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgCi0gICAgREVCVUcoMSwgInJheV9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKGxpbmstPm9wZW4gPT0gMCkKLQkgICAgbG9jYWwtPm51bV9tdWx0aSA9IDA7Ci0gICAgbGluay0+b3BlbisrOworCURFQlVHKDEsICJyYXlfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIC8qIElmIHRoZSBjYXJkIGlzIG5vdCBzdGFydGVkLCB0aW1lIHRvIHN0YXJ0IGl0ICEgLSBKZWFuIElJICovCi0gICAgaWYobG9jYWwtPmNhcmRfc3RhdHVzID09IENBUkRfQVdBSVRJTkdfUEFSQU0pIHsKLQlpbnQgaTsKKwlpZiAobGluay0+b3BlbiA9PSAwKQorCQlsb2NhbC0+bnVtX211bHRpID0gMDsKKwlsaW5rLT5vcGVuKys7CiAKLQlERUJVRygxLCJyYXlfb3BlbjogZG9pbmcgaW5pdCBub3cgIVxuIik7CisJLyogSWYgdGhlIGNhcmQgaXMgbm90IHN0YXJ0ZWQsIHRpbWUgdG8gc3RhcnQgaXQgISAtIEplYW4gSUkgKi8KKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzID09IENBUkRfQVdBSVRJTkdfUEFSQU0pIHsKKwkJaW50IGk7CiAKLQkvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KLQlpZiAoIChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKQotCSAgewotCSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgotCQkgICAicmV0dXJucyAweCV4XG4iLGkpOwotCSAgICByZXR1cm4gLTE7Ci0JICB9Ci0gICAgIH0KKwkJREVCVUcoMSwgInJheV9vcGVuOiBkb2luZyBpbml0IG5vdyAhXG4iKTsKIAotICAgIGlmIChzbmlmZmVyKSBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgZWxzZSAgICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLworCQlpZiAoKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKKwkJCSAgICAgICAicmV0dXJucyAweCV4XG4iLCBpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KIAotICAgIERFQlVHKDIsInJheV9vcGVuIGVuZGluZ1xuIik7Ci0gICAgcmV0dXJuIDA7CisJaWYgKHNuaWZmZXIpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwllbHNlCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlERUJVRygyLCAicmF5X29wZW4gZW5kaW5nXG4iKTsKKwlyZXR1cm4gMDsKIH0gLyogZW5kIHJheV9vcGVuICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIGxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgREVCVUcoMSwgInJheV9kZXZfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CisJREVCVUcoMSwgInJheV9kZXZfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKLSAgICBsaW5rLT5vcGVuLS07Ci0gICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWxpbmstPm9wZW4tLTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICAvKiBJbiBoZXJlLCB3ZSBzaG91bGQgc3RvcCB0aGUgaGFyZHdhcmUgKHN0b3AgY2FyZCBmcm9tIGJlZWluZyBhY3RpdmUpCi0gICAgICogYW5kIHNldCBsb2NhbC0+Y2FyZF9zdGF0dXMgdG8gQ0FSRF9BV0FJVElOR19QQVJBTSwgc28gdGhhdCB3aGlsZSB0aGUKLSAgICAgKiBjYXJkIGlzIGNsb3NlZCB3ZSBjYW4gY2hhZ2UgaXRzIGNvbmZpZ3VyYXRpb24uCi0gICAgICogUHJvYmFibHkgYWxzbyBuZWVkIGEgQ09SIHJlc2V0IHRvIGdldCBzYW5lIHN0YXRlIC0gSmVhbiBJSSAqLworCS8qIEluIGhlcmUsIHdlIHNob3VsZCBzdG9wIHRoZSBoYXJkd2FyZSAoc3RvcCBjYXJkIGZyb20gYmVlaW5nIGFjdGl2ZSkKKwkgKiBhbmQgc2V0IGxvY2FsLT5jYXJkX3N0YXR1cyB0byBDQVJEX0FXQUlUSU5HX1BBUkFNLCBzbyB0aGF0IHdoaWxlIHRoZQorCSAqIGNhcmQgaXMgY2xvc2VkIHdlIGNhbiBjaGFnZSBpdHMgY29uZmlndXJhdGlvbi4KKwkgKiBQcm9iYWJseSBhbHNvIG5lZWQgYSBDT1IgcmVzZXQgdG8gZ2V0IHNhbmUgc3RhdGUgLSBKZWFuIElJICovCiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0gLyogZW5kIHJheV9kZXZfY2xvc2UgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICBERUJVRygxLCJyYXlfcmVzZXQgZW50ZXJlZFxuIik7Ci0gICAgcmV0dXJuOworc3RhdGljIHZvaWQgcmF5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJREVCVUcoMSwgInJheV9yZXNldCBlbnRlcmVkXG4iKTsKKwlyZXR1cm47CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENhdXNlIGEgZmlybXdhcmUgaW50ZXJydXB0IGlmIGl0IGlzIHJlYWR5IGZvciBvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFJldHVybiBub256ZXJvIGlmIG5vdCByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpbnQgaW50ZXJydXB0X2VjZihyYXlfZGV2X3QgKmxvY2FsLCBpbnQgY2NzKQogewotICAgIGludCBpID0gNTA7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpID0gNTA7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0X2VjZiAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgREVCVUcoMiwiaW50ZXJydXB0X2VjZihsb2NhbD0lcCwgY2NzID0gMHgleFxuIixsb2NhbCxjY3MpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBpbnRlcnJ1cHRfZWNmIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlERUJVRygyLCAiaW50ZXJydXB0X2VjZihsb2NhbD0lcCwgY2NzID0gMHgleFxuIiwgbG9jYWwsIGNjcyk7CiAKLSAgICB3aGlsZSAoIGkgJiYgCi0gICAgICAgICAgICAocmVhZGIobG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKSAmIEVDRl9JTlRSX1NFVCkpCi0gICAgICAgIGktLTsKLSAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHRfZWNmIGNhcmQgbm90IHJlYWR5IGZvciBpbnRlcnJ1cHRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCXdoaWxlIChpICYmCisJICAgICAgIChyZWFkYihsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpICYKKwkJRUNGX0lOVFJfU0VUKSkKKwkJaS0tOworCWlmIChpID09IDApIHsKKwkJREVCVUcoMiwgInJheV9jcyBpbnRlcnJ1cHRfZWNmIGNhcmQgbm90IHJlYWR5IGZvciBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCS8qIEZpbGwgdGhlIG1haWxib3gsIHRoZW4ga2ljayB0aGUgY2FyZCAqLwotICAgIHdyaXRlYihjY3MsIGxvY2FsLT5zcmFtICsgU0NCX0JBU0UpOwotICAgIHdyaXRlYihFQ0ZfSU5UUl9TRVQsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCk7Ci0gICAgcmV0dXJuIDA7CisJd3JpdGViKGNjcywgbG9jYWwtPnNyYW0gKyBTQ0JfQkFTRSk7CisJd3JpdGViKEVDRl9JTlRSX1NFVCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKTsKKwlyZXR1cm4gMDsKIH0gLyogaW50ZXJydXB0X2VjZiAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBHZXQgbmV4dCBmcmVlIHRyYW5zbWl0IENDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZXR1cm4gLSBpbmRleCBvZiBjdXJyZW50IHR4IGNjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGdldF9mcmVlX3R4X2NjcyhyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIGludCBpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGk7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGdldF9mcmVlX3R4X2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiBFQ0FSREdPTkU7Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBnZXRfZnJlZV90eF9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gRUNBUkRHT05FOworCX0KIAotICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsJmxvY2FsLT50eF9jY3NfbG9jaykpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHR4X2Njc19sb2NrIGJ1c3lcbiIpOwotICAgICAgICByZXR1cm4gRUNDU0JVU1k7Ci0gICAgfSAKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbG9jYWwtPnR4X2Njc19sb2NrKSkgeworCQlERUJVRygxLCAicmF5X2NzIHR4X2Njc19sb2NrIGJ1c3lcbiIpOworCQlyZXR1cm4gRUNDU0JVU1k7CisJfQogCi0gICAgZm9yIChpPTA7IGkgPCBOVU1CRVJfT0ZfVFhfQ0NTOyBpKyspIHsKLSAgICAgICAgaWYgKHJlYWRiKCYocGNjcytpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICAgICAgd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzK2kpLT5saW5rKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX1RYX0NDUzsgaSsrKSB7CisJCWlmIChyZWFkYigmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7CisJCQl3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cyk7CisJCQl3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MgKyBpKS0+bGluayk7CiAJCQlsb2NhbC0+dHhfY2NzX2xvY2sgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KIAlsb2NhbC0+dHhfY2NzX2xvY2sgPSAwOwotICAgIERFQlVHKDIsInJheV9jcyBFUlJPUiBubyBmcmVlIHR4IENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKLSAgICByZXR1cm4gRUNDU0ZVTEw7CisJREVCVUcoMiwgInJheV9jcyBFUlJPUiBubyBmcmVlIHR4IENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKKwlyZXR1cm4gRUNDU0ZVTEw7CiB9IC8qIGdldF9mcmVlX3R4X2NjcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBHZXQgbmV4dCBmcmVlIENDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZXR1cm4gLSBpbmRleCBvZiBjdXJyZW50IGNjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGdldF9mcmVlX2NjcyhyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIGludCBpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGk7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGdldF9mcmVlX2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiBFQ0FSREdPTkU7Ci0gICAgfQotICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsJmxvY2FsLT5jY3NfbG9jaykpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGNjc19sb2NrIGJ1c3lcbiIpOwotICAgICAgICByZXR1cm4gRUNDU0JVU1k7Ci0gICAgfSAKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgZ2V0X2ZyZWVfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIEVDQVJER09ORTsKKwl9CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmxvY2FsLT5jY3NfbG9jaykpIHsKKwkJREVCVUcoMSwgInJheV9jcyBjY3NfbG9jayBidXN5XG4iKTsKKwkJcmV0dXJuIEVDQ1NCVVNZOworCX0KIAotICAgIGZvciAoaSA9IE5VTUJFUl9PRl9UWF9DQ1M7IGkgPCBOVU1CRVJfT0ZfQ0NTOyBpKyspIHsKLSAgICAgICAgaWYgKHJlYWRiKCYocGNjcytpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICAgICAgd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzK2kpLT5saW5rKTsKKwlmb3IgKGkgPSBOVU1CRVJfT0ZfVFhfQ0NTOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7CisJCWlmIChyZWFkYigmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cykgPT0gQ0NTX0JVRkZFUl9GUkVFKSB7CisJCQl3cml0ZWIoQ0NTX0JVRkZFUl9CVVNZLCAmKHBjY3MgKyBpKS0+YnVmZmVyX3N0YXR1cyk7CisJCQl3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MgKyBpKS0+bGluayk7CiAJCQlsb2NhbC0+Y2NzX2xvY2sgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KIAlsb2NhbC0+Y2NzX2xvY2sgPSAwOwotICAgIERFQlVHKDEsInJheV9jcyBFUlJPUiBubyBmcmVlIENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKLSAgICByZXR1cm4gRUNDU0ZVTEw7CisJREVCVUcoMSwgInJheV9jcyBFUlJPUiBubyBmcmVlIENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKKwlyZXR1cm4gRUNDU0ZVTEw7CiB9IC8qIGdldF9mcmVlX2NjcyAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGVfdGltZW91dCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7Ci0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIHByaW50ayhLRVJOX0lORk8gInJheV9jcyBBdXRoZW50aWNhdGlvbiB3aXRoIGFjY2VzcyBwb2ludCBmYWlsZWQiCi0gICAgICAgIiAtIHRpbWVvdXRcbiIpOwotICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOworCXJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopIGRhdGE7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCXByaW50ayhLRVJOX0lORk8gInJheV9jcyBBdXRoZW50aWNhdGlvbiB3aXRoIGFjY2VzcyBwb2ludCBmYWlsZWQiCisJICAgICAgICIgLSB0aW1lb3V0XG4iKTsKKwlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgYXNjX3RvX2ludChjaGFyIGEpCiB7Ci0gICAgaWYgKGEgPCAnMCcpIHJldHVybiAtMTsKLSAgICBpZiAoYSA8PSAnOScpIHJldHVybiAoYSAtICcwJyk7Ci0gICAgaWYgKGEgPCAnQScpIHJldHVybiAtMTsKLSAgICBpZiAoYSA8PSAnRicpIHJldHVybiAoMTAgKyBhIC0gJ0EnKTsKLSAgICBpZiAoYSA8ICdhJykgcmV0dXJuIC0xOwotICAgIGlmIChhIDw9ICdmJykgcmV0dXJuICgxMCArIGEgLSAnYScpOwotICAgIHJldHVybiAtMTsKKwlpZiAoYSA8ICcwJykKKwkJcmV0dXJuIC0xOworCWlmIChhIDw9ICc5JykKKwkJcmV0dXJuIChhIC0gJzAnKTsKKwlpZiAoYSA8ICdBJykKKwkJcmV0dXJuIC0xOworCWlmIChhIDw9ICdGJykKKwkJcmV0dXJuICgxMCArIGEgLSAnQScpOworCWlmIChhIDwgJ2EnKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPD0gJ2YnKQorCQlyZXR1cm4gKDEwICsgYSAtICdhJyk7CisJcmV0dXJuIC0xOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHBhcnNlX2FkZHIoY2hhciAqaW5fc3RyLCBVQ0hBUiAqb3V0KQogewotICAgIGludCBsZW47Ci0gICAgaW50IGksaixrOwotICAgIGludCBzdGF0dXM7Ci0gICAgCi0gICAgaWYgKGluX3N0ciA9PSBOVUxMKSByZXR1cm4gMDsKLSAgICBpZiAoKGxlbiA9IHN0cmxlbihpbl9zdHIpKSA8IDIpIHJldHVybiAwOwotICAgIG1lbXNldChvdXQsIDAsIEFERFJMRU4pOworCWludCBsZW47CisJaW50IGksIGosIGs7CisJaW50IHN0YXR1czsKIAotICAgIHN0YXR1cyA9IDE7Ci0gICAgaiA9IGxlbiAtIDE7Ci0gICAgaWYgKGogPiAxMikgaiA9IDEyOwotICAgIGkgPSA1OwotICAgIAotICAgIHdoaWxlIChqID4gMCkKLSAgICB7Ci0gICAgICAgIGlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkgb3V0W2ldID0gazsKLSAgICAgICAgZWxzZSByZXR1cm4gMDsKKwlpZiAoaW5fc3RyID09IE5VTEwpCisJCXJldHVybiAwOworCWlmICgobGVuID0gc3RybGVuKGluX3N0cikpIDwgMikKKwkJcmV0dXJuIDA7CisJbWVtc2V0KG91dCwgMCwgQUREUkxFTik7CiAKLSAgICAgICAgaWYgKGogPT0gMCkgYnJlYWs7Ci0gICAgICAgIGlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkgb3V0W2ldICs9IGsgPDwgNDsKLSAgICAgICAgZWxzZSByZXR1cm4gMDsKLSAgICAgICAgaWYgKCFpLS0pIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IDE7CisJaiA9IGxlbiAtIDE7CisJaWYgKGogPiAxMikKKwkJaiA9IDEyOworCWkgPSA1OworCisJd2hpbGUgKGogPiAwKSB7CisJCWlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkKKwkJCW91dFtpXSA9IGs7CisJCWVsc2UKKwkJCXJldHVybiAwOworCisJCWlmIChqID09IDApCisJCQlicmVhazsKKwkJaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKQorCQkJb3V0W2ldICs9IGsgPDwgNDsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJCWlmICghaS0tKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBzdGF0dXM7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcmF5X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIG5ldF9kZXZpY2Vfc3RhdHMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gJmxvY2FsLT5zdGF0czsKLSAgICB9Ci0gICAgaWYgKHJlYWRiKCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpKQotICAgIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+bXJ4X292ZXJmbG93KSk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfb3ZlcmZsb3cpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KTsKLSAgICB9Ci0gICAgaWYgKHJlYWRiKCZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpKQotICAgIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9jaGVja3N1bV9lcnJvcik7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpOwotICAgIH0KLSAgICBpZiAocmVhZGIoJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCkpCi0gICAgewotICAgICAgICBsb2NhbC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+cnhfaGVjX2Vycm9yKSk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5yeF9oZWNfZXJyb3IpOwotICAgICAgICB3cml0ZWIoMCwmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KTsKLSAgICB9Ci0gICAgcmV0dXJuICZsb2NhbC0+c3RhdHM7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIG5ldF9kZXZpY2Vfc3RhdHMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gJmxvY2FsLT5zdGF0czsKKwl9CisJaWYgKHJlYWRiKCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpKSB7CisJCWxvY2FsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPm1yeF9vdmVyZmxvdykpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9vdmVyZmxvdyk7CisJCXdyaXRlYigwLCAmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KTsKKwl9CisJaWYgKHJlYWRiKCZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpKSB7CisJCWxvY2FsLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9CisJCSAgICBzd2FiMTYocmVhZHcoJnAtPm1yeF9jaGVja3N1bV9lcnJvcikpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9jaGVja3N1bV9lcnJvcik7CisJCXdyaXRlYigwLCAmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KTsKKwl9CisJaWYgKHJlYWRiKCZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpKSB7CisJCWxvY2FsLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5yeF9oZWNfZXJyb3IpKTsKKwkJd3JpdGViKDAsICZwLT5yeF9oZWNfZXJyb3IpOworCQl3cml0ZWIoMCwgJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCk7CisJfQorCXJldHVybiAmbG9jYWwtPnN0YXRzOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfdXBkYXRlX3Bhcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgb2JqaWQsIFVDSEFSICp2YWx1ZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHJheV91cGRhdGVfcGFybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBVQ0hBUiBvYmppZCwgVUNIQVIgKnZhbHVlLAorCQkJICAgIGludCBsZW4pCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIGludCBjY3NpbmRleDsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBjY3NpbmRleDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV91cGRhdGVfcGFybSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KIAotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCi0gICAgewotICAgICAgICBERUJVRygwLCJyYXlfdXBkYXRlX3Bhcm0gLSBObyBmcmVlIGNjc1xuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfVVBEQVRFX1BBUkFNUywgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKG9iamlkLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5vYmplY3RfaWQpOwotICAgIHdyaXRlYigxLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5udW1iZXJfb2JqZWN0cyk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLmZhaWx1cmVfY2F1c2UpOwotICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7Ci0gICAgICAgIHdyaXRlYih2YWx1ZVtpXSwgbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFKTsKLSAgICB9Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygwLCJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSB7CisJCURFQlVHKDAsICJyYXlfdXBkYXRlX3Bhcm0gLSBObyBmcmVlIGNjc1xuIik7CisJCXJldHVybjsKKwl9CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfVVBEQVRFX1BBUkFNUywgJnBjY3MtPmNtZCk7CisJd3JpdGViKG9iamlkLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5vYmplY3RfaWQpOworCXdyaXRlYigxLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5udW1iZXJfb2JqZWN0cyk7CisJd3JpdGViKDAsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLmZhaWx1cmVfY2F1c2UpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl3cml0ZWIodmFsdWVbaV0sIGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSk7CisJfQorCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJfQogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX211bHRpX2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFsbCkKIHsKLSAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgKipkbWlwOwotICAgIGludCBjY3NpbmRleDsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGkgPSAwOwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICB2b2lkIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0U7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWksICoqZG1pcDsKKwlpbnQgY2NzaW5kZXg7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBpID0gMDsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJdm9pZCBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX211bHRpX2xpc3QgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UgCi0gICAgICAgIERFQlVHKDIsInJheV91cGRhdGVfbXVsdGlfbGlzdCglcClcbiIsZGV2KTsKLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKLSAgICAgICAgREVCVUcoMSwicmF5X3VwZGF0ZV9tdWx0aSAtIE5vIGZyZWUgY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19VUERBVEVfTVVMVElDQVNUX0xJU1QsICZwY2NzLT5jbWQpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJREVCVUcoMiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCglcClcbiIsIGRldik7CisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgeworCQlERUJVRygxLCAicmF5X3VwZGF0ZV9tdWx0aSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19VUERBVEVfTVVMVElDQVNUX0xJU1QsICZwY2NzLT5jbWQpOwogCi0gICAgaWYgKGFsbCkgewotICAgICAgICB3cml0ZWIoMHhmZiwgJnBjY3MtPnZhcik7Ci0gICAgICAgIGxvY2FsLT5udW1fbXVsdGkgPSAweGZmOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogQ29weSB0aGUga2VybmVsJ3MgbGlzdCBvZiBNQyBhZGRyZXNzZXMgdG8gY2FyZCAqLwotICAgICAgICBmb3IgKGRtaXA9JmRldi0+bWNfbGlzdDsgKGRtaT0qZG1pcCkhPU5VTEw7IGRtaXA9JmRtaS0+bmV4dCkgewotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocCwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotICAgICAgICAgICAgREVCVUcoMSwicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsZG1pLT5kbWlfYWRkclswXSxkbWktPmRtaV9hZGRyWzFdLGRtaS0+ZG1pX2FkZHJbMl0sZG1pLT5kbWlfYWRkclszXSxkbWktPmRtaV9hZGRyWzRdLGRtaS0+ZG1pX2FkZHJbNV0pOwotICAgICAgICAgICAgcCArPSBFVEhfQUxFTjsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+IDI1Ni9BRERSTEVOKSBpID0gMjU2L0FERFJMRU47Ci0gICAgICAgIHdyaXRlYigoVUNIQVIpaSwgJnBjY3MtPnZhcik7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyB1cGRhdGVfbXVsdGkgJWQgYWRkcmVzc2VzIGluIGxpc3RcbiIsIGkpOwotICAgICAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICAgICAgbG9jYWwtPm51bV9tdWx0aSA9IGk7Ci0gICAgfQotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHVwZGF0ZV9tdWx0aSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9CisJaWYgKGFsbCkgeworCQl3cml0ZWIoMHhmZiwgJnBjY3MtPnZhcik7CisJCWxvY2FsLT5udW1fbXVsdGkgPSAweGZmOworCX0gZWxzZSB7CisJCS8qIENvcHkgdGhlIGtlcm5lbCdzIGxpc3Qgb2YgTUMgYWRkcmVzc2VzIHRvIGNhcmQgKi8KKwkJZm9yIChkbWlwID0gJmRldi0+bWNfbGlzdDsgKGRtaSA9ICpkbWlwKSAhPSBOVUxMOworCQkgICAgIGRtaXAgPSAmZG1pLT5uZXh0KSB7CisJCQltZW1jcHlfdG9pbyhwLCBkbWktPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV91cGRhdGVfbXVsdGkgYWRkIGFkZHIgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJICAgICAgZG1pLT5kbWlfYWRkclswXSwgZG1pLT5kbWlfYWRkclsxXSwKKwkJCSAgICAgIGRtaS0+ZG1pX2FkZHJbMl0sIGRtaS0+ZG1pX2FkZHJbM10sCisJCQkgICAgICBkbWktPmRtaV9hZGRyWzRdLCBkbWktPmRtaV9hZGRyWzVdKTsKKwkJCXAgKz0gRVRIX0FMRU47CisJCQlpKys7CisJCX0KKwkJaWYgKGkgPiAyNTYgLyBBRERSTEVOKQorCQkJaSA9IDI1NiAvIEFERFJMRU47CisJCXdyaXRlYigoVUNIQVIpIGksICZwY2NzLT52YXIpOworCQlERUJVRygxLCAicmF5X2NzIHVwZGF0ZV9tdWx0aSAlZCBhZGRyZXNzZXMgaW4gbGlzdFxuIiwgaSk7CisJCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCQlsb2NhbC0+bnVtX211bHRpID0gaTsKKwl9CisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLAorCQkgICAgICAicmF5X2NzIHVwZGF0ZV9tdWx0aSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwl9CiB9IC8qIGVuZCByYXlfdXBkYXRlX211bHRpX2xpc3QgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgVUNIQVIgcHJvbWlzYzsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlVQ0hBUiBwcm9taXNjOwogCi0gICAgREVCVUcoMiwicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCglcClcbiIsZGV2KTsKKwlERUJVRygyLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCglcClcbiIsIGRldik7CiAKLSAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMCkgewotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9uXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAxOwotICAgICAgICAgICAgcHJvbWlzYyA9IDE7Ci0gICAgICAgICAgICByYXlfdXBkYXRlX3Bhcm0oZGV2LCAgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAxKSB7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb2ZmXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAwOwotICAgICAgICAgICAgcHJvbWlzYyA9IDA7Ci0gICAgICAgICAgICByYXlfdXBkYXRlX3Bhcm0oZGV2LCAgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOwotICAgICAgICB9Ci0gICAgfQorCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMCkgeworCQkJREVCVUcoMSwgInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvblxuIik7CisJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMTsKKwkJCXByb21pc2MgPSAxOworCQkJcmF5X3VwZGF0ZV9wYXJtKGRldiwgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwKKwkJCQkJJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAxKSB7CisJCQlERUJVRygxLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9mZlxuIik7CisJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMDsKKwkJCXByb21pc2MgPSAwOworCQkJcmF5X3VwZGF0ZV9wYXJtKGRldiwgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwKKwkJCQkJJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7CisJCX0KKwl9CiAKLSAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5udW1fbXVsdGkgIT0gZGV2LT5tY19jb3VudCkgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMCk7Ci0gICAgfQorCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQlyYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAxKTsKKwllbHNlIHsKKwkJaWYgKGxvY2FsLT5udW1fbXVsdGkgIT0gZGV2LT5tY19jb3VudCkKKwkJCXJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDApOworCX0KIH0gLyogZW5kIHNldF9tdWx0aWNhc3RfbGlzdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBBbGwgcm91dGluZXMgYmVsb3cgaGVyZSBhcmUgcnVuIGF0IGludGVycnVwdCB0aW1lLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGlycXJldHVybl90IHJheV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzOwotICAgIFVDSEFSIHJjc2luZGV4OwotICAgIFVDSEFSIHRtcDsKLSAgICBVQ0hBUiBjbWQ7Ci0gICAgVUNIQVIgc3RhdHVzOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJcmF5X2Rldl90ICpsb2NhbDsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzOworCVVDSEFSIHJjc2luZGV4OworCVVDSEFSIHRtcDsKKwlVQ0hBUiBjbWQ7CisJVUNIQVIgc3RhdHVzOwogCi0gICAgaWYgKGRldiA9PSBOVUxMKSAvKiBOb3RlIHRoYXQgd2Ugd2FudCBpbnRlcnJ1cHRzIHdpdGggZGV2LT5zdGFydCA9PSAwICovCi0JcmV0dXJuIElSUV9OT05FOworCWlmIChkZXYgPT0gTlVMTCkJLyogTm90ZSB0aGF0IHdlIHdhbnQgaW50ZXJydXB0cyB3aXRoIGRldi0+c3RhcnQgPT0gMCAqLworCQlyZXR1cm4gSVJRX05PTkU7CiAKLSAgICBERUJVRyg0LCJyYXlfY3M6IGludGVycnVwdCBmb3IgKmRldj0lcFxuIixkZXYpOworCURFQlVHKDQsICJyYXlfY3M6IGludGVycnVwdCBmb3IgKmRldj0lcFxuIiwgZGV2KTsKIAotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopbG9jYWwtPmZpbmRlcjsKLSAgICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0IGZyb20gZGV2aWNlIG5vdCBwcmVzZW50IG9yIHN1c3BlbmRlZC5cbiIpOwotICAgICAgICByZXR1cm4gSVJRX05PTkU7Ci0gICAgfQotICAgIHJjc2luZGV4ID0gcmVhZGIoJigoc3RydWN0IHNjYiBfX2lvbWVtICopKGxvY2FsLT5zcmFtKSktPnJjc19pbmRleCk7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilsb2NhbC0+ZmluZGVyOworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CisJCURFQlVHKDIsCisJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGZyb20gZGV2aWNlIG5vdCBwcmVzZW50IG9yIHN1c3BlbmRlZC5cbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCXJjc2luZGV4ID0gcmVhZGIoJigoc3RydWN0IHNjYiBfX2lvbWVtICopKGxvY2FsLT5zcmFtKSktPnJjc19pbmRleCk7CiAKLSAgICBpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkKLSAgICB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIixyY3NpbmRleCk7Ci0gICAgICAgIGNsZWFyX2ludGVycnVwdChsb2NhbCk7Ci0gICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKLSAgICB9Ci0gICAgaWYgKHJjc2luZGV4IDwgTlVNQkVSX09GX0NDUykgLyogSWYgaXQncyBhIHJldHVybmVkIENDUyAqLwotICAgIHsKLSAgICAgICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OwotICAgICAgICBjbWQgPSByZWFkYigmcGNjcy0+Y21kKTsKLSAgICAgICAgc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICBzd2l0Y2ggKGNtZCkKLSAgICAgICAgewotICAgICAgICBjYXNlIENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUzogLyogSGFwcGVucyBpbiBmaXJtd2FyZSBzb21lZGF5ICovCi0gICAgICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgT0tcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgZmFpbFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVVBEQVRFX1BBUkFNUzoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBkb25lXG4iKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICB0bXAgPSByZWFkYigmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5mYWlsdXJlX2NhdXNlKTsKLSAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBmYWlsZWQgLSByZWFzb24gJWRcbiIsdG1wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19SRVBPUlRfUEFSQU1TOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCByZXBvcnQgcGFyYW1zIGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVDogLyogTm90ZSB0aGF0IHRoaXMgQ0NTIGlzbid0IHJldHVybmVkICovCi0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IENDUyBVcGRhdGUgTXVsdGljYXN0IExpc3QgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVVBEQVRFX1BPV0VSX1NBVklOR1NfTU9ERToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TVEFSVF9ORVRXT1JLOgotICAgICAgICBjYXNlIENDU19KT0lOX05FVFdPUks6Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfaW5pdGlhdGVkKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnRlZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbmVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLHBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmJzc2lkLEFERFJMRU4pOworCWlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKSB7CisJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIsIHJjc2luZGV4KTsKKwkJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlpZiAocmNzaW5kZXggPCBOVU1CRVJfT0ZfQ0NTKSB7IC8qIElmIGl0J3MgYSByZXR1cm5lZCBDQ1MgKi8KKwkJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OworCQljbWQgPSByZWFkYigmcGNjcy0+Y21kKTsKKwkJc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIENDU19ET1dOTE9BRF9TVEFSVFVQX1BBUkFNUzoJLyogSGFwcGVucyBpbiBmaXJtd2FyZSBzb21lZGF5ICovCisJCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgT0tcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBmYWlsXG4iKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19VUERBVEVfUEFSQU1TOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBkb25lXG4iKTsKKwkJCWlmIChzdGF0dXMgIT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQl0bXAgPQorCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS4KKwkJCQkJICBmYWlsdXJlX2NhdXNlKTsKKwkJCQlERUJVRygwLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZmFpbGVkIC0gcmVhc29uICVkXG4iLAorCQkJCSAgICAgIHRtcCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfUkVQT1JUX1BBUkFNUzoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJlcG9ydCBwYXJhbXMgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNUOgkvKiBOb3RlIHRoYXQgdGhpcyBDQ1MgaXNuJ3QgcmV0dXJuZWQgKi8KKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBDQ1MgVXBkYXRlIE11bHRpY2FzdCBMaXN0IGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1VQREFURV9QT1dFUl9TQVZJTkdTX01PREU6CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19TVEFSVF9ORVRXT1JLOgorCQljYXNlIENDU19KT0lOX05FVFdPUks6CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJaWYgKHJlYWRiCisJCQkJICAgICgmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsubmV0X2luaXRpYXRlZCkgPT0KKwkJCQkgICAgMSkgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydGVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbmVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJfQorCQkJCW1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQsCisJCQkJCSAgICAgIHBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmJzc2lkLAorCQkJCQkgICAgICBBRERSTEVOKTsKIAotICAgICAgICAgICAgICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gMzsKLSAgICAgICAgICAgICAgICBlbHNlIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLm5ldF9kZWZhdWx0X3R4X3JhdGUpOwotICAgICAgICAgICAgICAgIGxvY2FsLT5lbmNyeXB0aW9uID0gcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmVuY3J5cHRpb24pOwotICAgICAgICAgICAgICAgIGlmICghc25pZmZlciAmJiAobG9jYWwtPm5ldF90eXBlID09IElORlJBKQotICAgICAgICAgICAgICAgICAgICAmJiAhKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZShsb2NhbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfRkFJTEVEOworCQkJCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCisJCQkJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gMzsKKwkJCQllbHNlCisJCQkJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0KKwkJCQkJICAgIHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay4KKwkJCQkJCSAgbmV0X2RlZmF1bHRfdHhfcmF0ZSk7CisJCQkJbG9jYWwtPmVuY3J5cHRpb24gPQorCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuZW5jcnlwdGlvbik7CisJCQkJaWYgKCFzbmlmZmVyICYmIChsb2NhbC0+bmV0X3R5cGUgPT0gSU5GUkEpCisJCQkJICAgICYmICEobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykpIHsKKwkJCQkJYXV0aGVudGljYXRlKGxvY2FsKTsKKwkJCQl9CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7CisJCQl9IGVsc2UgeworCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0ZBSUxFRDsKIAotICAgICAgICAgICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWio1OwotICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfU1RBUlRfTkVUV09SSykgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0IGZhaWxlZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnN0YXJ0X25ldDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbiBmYWlsZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NUQVJUX0FTU09DSUFUSU9OOgotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfQ09NUExFVEU7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGFzc29jaWF0aW9uIHN1Y2Nlc3NmdWxcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBhc3NvY2lhdGlvbiBmYWlsZWQsXG4iKTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKLSAgICAgICAgICAgICAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19UWF9SRVFVRVNUOgotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIERFQlVHKDMsInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBjb21wbGV0ZVxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc25pZmZlcikgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19URVNUX01FTU9SWToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgbWVtIHRlc3QgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU0hVVERPV046Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIHJldHVybmVkIC0gU2h1dGRvd25cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX0RVTVBfTUVNT1JZOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBkdW1wIG1lbW9yeSBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TVEFSVF9USU1FUjoKLSAgICAgICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHQgRElORyAtIHJheWxpbmsgdGltZXIgZXhwaXJlZFxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgMHgleCByZXR1cm5lZCAweCV4XG4iLFwKLSAgICAgICAgICAgICAgICAgIHJjc2luZGV4LCBjbWQpOwotICAgICAgICB9Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9Ci0gICAgZWxzZSAvKiBJdCdzIGFuIFJDUyAqLwotICAgIHsKLSAgICAgICAgcHJjcyA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OwotICAgIAotICAgICAgICBzd2l0Y2ggKHJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgUFJPQ0VTU19SWF9QQUNLRVQ6Ci0gICAgICAgICAgICByYXlfcngoZGV2LCBsb2NhbCwgcHJjcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSRUpPSU5fTkVUX0NPTVBMRVRFOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCByZWpvaW4gbmV0IGNvbXBsZXRlXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOwotICAgICAgICAgICAgLyogZG8gd2UgbmVlZCB0byBjbGVhciB0eCBidWZmZXJzIENDUydzPyAqLwotICAgICAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgewotICAgICAgICAgICAgICAgIGlmICghc25pZmZlcikgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQsIHByY3MtPnZhci5yZWpvaW5fbmV0X2NvbXBsZXRlLmJzc2lkLCBBRERSTEVOKTsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgbmV3IEJTU0lEID0gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YnNzX2lkWzBdLCBsb2NhbC0+YnNzX2lkWzFdLCBsb2NhbC0+YnNzX2lkWzJdLFwKLSAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YnNzX2lkWzNdLCBsb2NhbC0+YnNzX2lkWzRdLCBsb2NhbC0+YnNzX2lkWzVdKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNuaWZmZXIpIGF1dGhlbnRpY2F0ZShsb2NhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBST0FNSU5HX0lOSVRJQVRFRDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgcm9hbWluZyBpbml0aWF0ZWRcbiIpOyAKLSAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSkFQQU5fQ0FMTF9TSUdOX1JYRDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgamFwYW4gY2FsbCBzaWduIHJ4XG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIFVuZXhwZWN0ZWQgaW50ZXJydXB0IGZvciBSQ1MgMHgleCBjbWQgPSAweCV4XG4iLFwKLSAgICAgICAgICAgICAgICAgIHJjc2luZGV4LCAodW5zaWduZWQgaW50KSByZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQotICAgIGNsZWFyX2ludGVycnVwdChsb2NhbCk7Ci0gICAgcmV0dXJuIElSUV9IQU5ETEVEOworCQkJCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJCQlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAqIDU7CisJCQkJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwkJCQlpZiAoc3RhdHVzID09IENDU19TVEFSVF9ORVRXT1JLKSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0IGZhaWxlZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmc3RhcnRfbmV0OworCQkJCX0gZWxzZSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW4gZmFpbGVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKKwkJCQl9CisJCQkJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NUQVJUX0FTU09DSUFUSU9OOgorCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfQ09NUExFVEU7CisJCQkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGlvbiBzdWNjZXNzZnVsXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGlvbiBmYWlsZWQsXG4iKTsKKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKKwkJCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVFhfUkVRVUVTVDoKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlERUJVRygzLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgY29tcGxldGVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCX0KKwkJCWlmICghc25pZmZlcikKKwkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1RFU1RfTUVNT1JZOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgbWVtIHRlc3QgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU0hVVERPV046CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgcmV0dXJuZWQgLSBTaHV0ZG93blxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfRFVNUF9NRU1PUlk6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBkdW1wIG1lbW9yeSBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19TVEFSVF9USU1FUjoKKwkJCURFQlVHKDIsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBESU5HIC0gcmF5bGluayB0aW1lciBleHBpcmVkXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIDB4JXggcmV0dXJuZWQgMHgleFxuIiwKKwkJCSAgICAgIHJjc2luZGV4LCBjbWQpOworCQl9CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwl9IGVsc2UgeyAvKiBJdCdzIGFuIFJDUyAqLworCisJCXByY3MgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKKworCQlzd2l0Y2ggKHJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKSB7CisJCWNhc2UgUFJPQ0VTU19SWF9QQUNLRVQ6CisJCQlyYXlfcngoZGV2LCBsb2NhbCwgcHJjcyk7CisJCQlicmVhazsKKwkJY2FzZSBSRUpPSU5fTkVUX0NPTVBMRVRFOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcmVqb2luIG5ldCBjb21wbGV0ZVxuIik7CisJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKKwkJCS8qIGRvIHdlIG5lZWQgdG8gY2xlYXIgdHggYnVmZmVycyBDQ1Mncz8gKi8KKwkJCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKKwkJCQlpZiAoIXNuaWZmZXIpCisJCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCQl9IGVsc2UgeworCQkJCW1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQsCisJCQkJCSAgICAgIHByY3MtPnZhci5yZWpvaW5fbmV0X2NvbXBsZXRlLgorCQkJCQkgICAgICBic3NpZCwgQUREUkxFTik7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIG5ldyBCU1NJRCA9ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzBdLCBsb2NhbC0+YnNzX2lkWzFdLAorCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbMl0sIGxvY2FsLT5ic3NfaWRbM10sCisJCQkJICAgICAgbG9jYWwtPmJzc19pZFs0XSwgbG9jYWwtPmJzc19pZFs1XSk7CisJCQkJaWYgKCFzbmlmZmVyKQorCQkJCQlhdXRoZW50aWNhdGUobG9jYWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUk9BTUlOR19JTklUSUFURUQ6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByb2FtaW5nIGluaXRpYXRlZFxuIik7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKKwkJCWJyZWFrOworCQljYXNlIEpBUEFOX0NBTExfU0lHTl9SWEQ6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBqYXBhbiBjYWxsIHNpZ24gcnhcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBVbmV4cGVjdGVkIGludGVycnVwdCBmb3IgUkNTIDB4JXggY21kID0gMHgleFxuIiwKKwkJCSAgICAgIHJjc2luZGV4LAorCQkJICAgICAgKHVuc2lnbmVkIGludClyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSk7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjcy0+YnVmZmVyX3N0YXR1cyk7CisJfQorCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfSAvKiByYXlfaW50ZXJydXB0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCByYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpCitzdGF0aWMgdm9pZCByYXlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcmF5X2Rldl90ICpsb2NhbCwKKwkJICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKQogewotICAgIGludCByeF9sZW47Ci0gICAgdW5zaWduZWQgaW50IHBrdF9hZGRyOwotICAgIHZvaWQgX19pb21lbSAqcG1zZzsKLSAgICBERUJVRyg0LCJyYXlfcnggcHJvY2VzcyByeCBwYWNrZXRcbiIpOworCWludCByeF9sZW47CisJdW5zaWduZWQgaW50IHBrdF9hZGRyOworCXZvaWQgX19pb21lbSAqcG1zZzsKKwlERUJVRyg0LCAicmF5X3J4IHByb2Nlc3MgcnggcGFja2V0XG4iKTsKIAotICAgIC8qIENhbGN1bGF0ZSBhZGRyZXNzIG9mIHBhY2tldCB3aXRoaW4gUnggYnVmZmVyICovCi0gICAgcGt0X2FkZHIgPSAoKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKSAmIFJYX0JVRkZfRU5EOwotICAgIC8qIExlbmd0aCBvZiBmaXJzdCBwYWNrZXQgZnJhZ21lbnQgKi8KLSAgICByeF9sZW4gPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOworCS8qIENhbGN1bGF0ZSBhZGRyZXNzIG9mIHBhY2tldCB3aXRoaW4gUnggYnVmZmVyICovCisJcGt0X2FkZHIgPSAoKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQorCQkgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpICYgUlhfQlVGRl9FTkQ7CisJLyogTGVuZ3RoIG9mIGZpcnN0IHBhY2tldCBmcmFnbWVudCAqLworCXJ4X2xlbiA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKKwkgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7CiAKLSAgICBsb2NhbC0+bGFzdF9yc2wgPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9zaWdfbGV2KTsKLSAgICBwbXNnID0gbG9jYWwtPnJtZW0gKyBwa3RfYWRkcjsKLSAgICBzd2l0Y2gocmVhZGIocG1zZykpCi0gICAgewotICAgIGNhc2UgREFUQV9UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggZGF0YSB0eXBlXG4iKTsKLSAgICAgICAgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFVVEhFTlRJQ19UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggYXV0aGVudGljIHR5cGVcbiIpOwotICAgICAgICBpZiAoc25pZmZlcikgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBlbHNlIHJ4X2F1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgREVBVVRIRU5USUNfVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGRlYXV0aCB0eXBlXG4iKTsKLSAgICAgICAgaWYgKHNuaWZmZXIpIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgZWxzZSByeF9kZWF1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlVMTF9NU0dfVFlQRToKLSAgICAgICAgREVCVUcoMywicmF5X2NzIHJ4IE5VTEwgbXNnXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCRUFDT05fVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGJlYWNvbiB0eXBlXG4iKTsKLSAgICAgICAgaWYgKHNuaWZmZXIpIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwlsb2NhbC0+bGFzdF9yc2wgPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9zaWdfbGV2KTsKKwlwbXNnID0gbG9jYWwtPnJtZW0gKyBwa3RfYWRkcjsKKwlzd2l0Y2ggKHJlYWRiKHBtc2cpKSB7CisJY2FzZSBEQVRBX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggZGF0YSB0eXBlXG4iKTsKKwkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQlicmVhazsKKwljYXNlIEFVVEhFTlRJQ19UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGF1dGhlbnRpYyB0eXBlXG4iKTsKKwkJaWYgKHNuaWZmZXIpCisJCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWVsc2UKKwkJCXJ4X2F1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWJyZWFrOworCWNhc2UgREVBVVRIRU5USUNfVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBkZWF1dGggdHlwZVxuIik7CisJCWlmIChzbmlmZmVyKQorCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQllbHNlCisJCQlyeF9kZWF1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWJyZWFrOworCWNhc2UgTlVMTF9NU0dfVFlQRToKKwkJREVCVUcoMywgInJheV9jcyByeCBOVUxMIG1zZ1xuIik7CisJCWJyZWFrOworCWNhc2UgQkVBQ09OX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggYmVhY29uIHR5cGVcbiIpOworCQlpZiAoc25pZmZlcikKKwkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKIAotICAgICAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgKFVDSEFSICopJmxvY2FsLT5sYXN0X2JjbiwgcGt0X2FkZHIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICByeF9sZW4gPCBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkgPyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfbGVuIDogc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpKTsKKwkJY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIChVQ0hBUiAqKSAmbG9jYWwtPmxhc3RfYmNuLCBwa3RfYWRkciwKKwkJCQkgIHJ4X2xlbiA8IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSA/CisJCQkJICByeF9sZW4gOiBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkpOwogCi0JbG9jYWwtPmJlYWNvbl9yeGVkID0gMTsKLSAgICAgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIHNvIHRoZSBjYXJkIGNvdW50ZXJzIG5ldmVyIG92ZXJmbG93ICovCi0gICAgICAgIHJheV9nZXRfc3RhdHMoZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyB1bmtub3duIHBrdCB0eXBlICUyeFxuIiwgKHVuc2lnbmVkIGludCkgcmVhZGIocG1zZykpOwotICAgICAgICBicmVhazsKLSAgICB9CisJCWxvY2FsLT5iZWFjb25fcnhlZCA9IDE7CisJCS8qIEdldCB0aGUgc3RhdGlzdGljcyBzbyB0aGUgY2FyZCBjb3VudGVycyBuZXZlciBvdmVyZmxvdyAqLworCQlyYXlfZ2V0X3N0YXRzKGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHKDAsICJyYXlfY3MgdW5rbm93biBwa3QgdHlwZSAlMnhcbiIsCisJCSAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIocG1zZykpOworCQlicmVhazsKKwl9CiAKIH0gLyogZW5kIHJheV9yeCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgdW5zaWduZWQgaW50IHBrdF9hZGRyLCAKLSAgICAgICAgICAgICBpbnQgcnhfbGVuKQorc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCiB7Ci0gICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0gICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgVUNIQVIgKnJ4X3B0cjsKLSAgICBpbnQgdG90YWxfbGVuOwotICAgIGludCB0bXA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJVUNIQVIgKnJ4X3B0cjsKKwlpbnQgdG90YWxfbGVuOworCWludCB0bXA7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgaW50IHNpZ2xldiA9IGxvY2FsLT5sYXN0X3JzbDsKLSAgICB1X2NoYXIgbGlua3NyY2FkZHJbRVRIX0FMRU5dOwkvKiBPdGhlciBlbmQgb2YgdGhlIHdpcmVsZXNzIGxpbmsgKi8KKwlpbnQgc2lnbGV2ID0gbG9jYWwtPmxhc3RfcnNsOworCXVfY2hhciBsaW5rc3JjYWRkcltFVEhfQUxFTl07CS8qIE90aGVyIGVuZCBvZiB0aGUgd2lyZWxlc3MgbGluayAqLwogI2VuZGlmCiAKLSAgICBpZiAoIXNuaWZmZXIpIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZSkgeworCWlmICghc25pZmZlcikgeworCQlpZiAodHJhbnNsYXRlKSB7CiAvKiBUQkQgbGVuZ3RoIG5lZWRzIGZpeGluZyBmb3IgdHJhbnNsYXRlZCBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKLSAgICAgICAgICAgICAgICByeF9sZW4gPiAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsgRkNTX0xFTikpIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLHJ4X2xlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLyogZW5jYXBzdWxhdGVkIGV0aGVybmV0ICovIHsKLSAgICAgICAgICAgIGlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKLSAgICAgICAgICAgICAgICByeF9sZW4gPiAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsgRkNTX0xFTikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIscnhfbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgREVCVUcoNCwicmF5X2NzIHJ4X2RhdGEgcGFja2V0XG4iKTsKLSAgICAvKiBJZiBmcmFnbWVudGVkIHBhY2tldCwgdmVyaWZ5IHNpemVzIG9mIGZyYWdtZW50cyBhZGQgdXAgKi8KLSAgICBpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgcngnZWQgZnJhZ21lbnRcbiIpOwotICAgICAgICB0bXAgPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICAgICArICByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFsxXSk7Ci0gICAgICAgIHRvdGFsX2xlbiA9IHRtcDsKLSAgICAgICAgcHJjc2xpbmsgPSBwcmNzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB0bXAgLT0gKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICArICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKLSAgICAgICAgICAgIGlmIChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgPT0gMHhGRgotICAgICAgICAgICAgICAgIHx8IHRtcCA8IDApIGJyZWFrOwotICAgICAgICAgICAgcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKLSAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+bGlua19maWVsZCk7Ci0gICAgICAgIH0gd2hpbGUgKDEpOworCQkJaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAorCQkJICAgIHJ4X2xlbiA+CisJCQkgICAgKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArCisJCQkgICAgIEZDU19MRU4pKSB7CisJCQkJREVCVUcoMCwKKwkJCQkgICAgICAicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIsCisJCQkJICAgICAgcnhfbGVuKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7IC8qIGVuY2Fwc3VsYXRlZCBldGhlcm5ldCAqLwogCi0gICAgICAgIGlmICh0bXAgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgcnhfZGF0YSBmcmFnbWVudCBsZW5ndGhzIGRvbid0IGFkZCB1cFxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOyAKLSAgICAgICAgICAgIHJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7IC8qIFNpbmdsZSB1bmZyYWdtZW50ZWQgcGFja2V0ICovCi0gICAgICAgIHRvdGFsX2xlbiA9IHJ4X2xlbjsKLSAgICB9CisJCQlpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8CisJCQkgICAgcnhfbGVuID4KKwkJCSAgICAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsKKwkJCSAgICAgRkNTX0xFTikpIHsKKwkJCQlERUJVRygwLAorCQkJCSAgICAgICJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIiwKKwkJCQkgICAgICByeF9sZW4pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwlERUJVRyg0LCAicmF5X2NzIHJ4X2RhdGEgcGFja2V0XG4iKTsKKwkvKiBJZiBmcmFnbWVudGVkIHBhY2tldCwgdmVyaWZ5IHNpemVzIG9mIGZyYWdtZW50cyBhZGQgdXAgKi8KKwlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgeworCQlERUJVRygxLCAicmF5X2NzIHJ4J2VkIGZyYWdtZW50XG4iKTsKKwkJdG1wID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzBdKSA8PCA4KQorCQkgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFsxXSk7CisJCXRvdGFsX2xlbiA9IHRtcDsKKwkJcHJjc2xpbmsgPSBwcmNzOworCQlkbyB7CisJCQl0bXAgLT0KKwkJCSAgICAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKQorCQkJICAgICA8PCA4KQorCQkJICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKKwkJCWlmIChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkKKwkJCSAgICA9PSAweEZGIHx8IHRtcCA8IDApCisJCQkJYnJlYWs7CisJCQlwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQorCQkJICAgICsgcmVhZGIoJnByY3NsaW5rLT5saW5rX2ZpZWxkKTsKKwkJfSB3aGlsZSAoMSk7CiAKLSAgICBza2IgPSBkZXZfYWxsb2Nfc2tiKCB0b3RhbF9sZW4rNSApOwotICAgIGlmIChza2IgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyByeF9kYXRhIGNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwotICAgICAgICBsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOyAKLSAgICAgICAgaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpCi0gICAgICAgICAgICByZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNrYl9yZXNlcnZlKCBza2IsIDIpOyAgIC8qIEFsaWduIElQIG9uIDE2IGJ5dGUgKFRCRCBjaGVjayB0aGlzKSovCisJCWlmICh0bXAgPCAwKSB7CisJCQlERUJVRygwLAorCQkJICAgICAgInJheV9jcyByeF9kYXRhIGZyYWdtZW50IGxlbmd0aHMgZG9uJ3QgYWRkIHVwXG4iKTsKKwkJCWxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsgLyogU2luZ2xlIHVuZnJhZ21lbnRlZCBwYWNrZXQgKi8KKwkJdG90YWxfbGVuID0gcnhfbGVuOworCX0KIAotICAgIERFQlVHKDQsInJheV9jcyByeF9kYXRhIHRvdGFsX2xlbiA9ICV4LCByeF9sZW4gPSAleFxuIix0b3RhbF9sZW4scnhfbGVuKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHRvdGFsX2xlbiArIDUpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlERUJVRygwLCAicmF5X2NzIHJ4X2RhdGEgY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CisJCWxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKQorCQkJcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiBBbGlnbiBJUCBvbiAxNiBieXRlIChUQkQgY2hlY2sgdGhpcykgKi8KKworCURFQlVHKDQsICJyYXlfY3MgcnhfZGF0YSB0b3RhbF9sZW4gPSAleCwgcnhfbGVuID0gJXhcbiIsIHRvdGFsX2xlbiwKKwkgICAgICByeF9sZW4pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIFJlc2VydmUgZW5vdWdoIHJvb20gZm9yIHRoZSB3aG9sZSBkYW1uIHBhY2tldC4gKi8KLSAgICByeF9wdHIgPSBza2JfcHV0KCBza2IsIHRvdGFsX2xlbik7Ci0gICAgLyogQ29weSB0aGUgd2hvbGUgcGFja2V0IHRvIHNrX2J1ZmYgKi8KLSAgICByeF9wdHIgKz0gY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIgJiBSWF9CVUZGX0VORCwgcnhfbGVuKTsKLSAgICAvKiBHZXQgc291cmNlIGFkZHJlc3MgKi8KKwkvKiBSZXNlcnZlIGVub3VnaCByb29tIGZvciB0aGUgd2hvbGUgZGFtbiBwYWNrZXQuICovCisJcnhfcHRyID0gc2tiX3B1dChza2IsIHRvdGFsX2xlbik7CisJLyogQ29weSB0aGUgd2hvbGUgcGFja2V0IHRvIHNrX2J1ZmYgKi8KKwlyeF9wdHIgKz0KKwkgICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIgJiBSWF9CVUZGX0VORCwgcnhfbGVuKTsKKwkvKiBHZXQgc291cmNlIGFkZHJlc3MgKi8KICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICBza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZnNldG9mKHN0cnVjdCBtYWNfaGVhZGVyLCBhZGRyXzIpLAotCQkJCSAgICAgbGlua3NyY2FkZHIsIEVUSF9BTEVOKTsKKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsCisJCQkJCSBvZmZzZXRvZihzdHJ1Y3QgbWFjX2hlYWRlciwgYWRkcl8yKSwKKwkJCQkJIGxpbmtzcmNhZGRyLCBFVEhfQUxFTik7CiAjZW5kaWYKLSAgICAvKiBOb3csIGRlYWwgd2l0aCBlbmNhcHN1bGF0aW9uL3RyYW5zbGF0aW9uL3NuaWZmZXIgKi8KLSAgICBpZiAoIXNuaWZmZXIpIHsKLSAgICAgICAgaWYgKCF0cmFuc2xhdGUpIHsgCi0gICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZWQgZXRoZXJuZXQsIHNvIGp1c3QgbG9wIG9mZiA4MDIuMTEgTUFDIGhlYWRlciAqLworCS8qIE5vdywgZGVhbCB3aXRoIGVuY2Fwc3VsYXRpb24vdHJhbnNsYXRpb24vc25pZmZlciAqLworCWlmICghc25pZmZlcikgeworCQlpZiAoIXRyYW5zbGF0ZSkgeworCQkJLyogRW5jYXBzdWxhdGVkIGV0aGVybmV0LCBzbyBqdXN0IGxvcCBvZmYgODAyLjExIE1BQyBoZWFkZXIgKi8KIC8qIFRCRCByZXNlcnZlICAgICAgICAgICAgc2tiX3Jlc2VydmUoIHNrYiwgUlhfTUFDX0hFQURFUl9MRU5HVEgpOyAqLwotICAgICAgICAgICAgc2tiX3B1bGwoIHNrYiwgUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRG8gdHJhbnNsYXRpb24gKi8KLSAgICAgICAgICAgIHVudHJhbnNsYXRlKGxvY2FsLCBza2IsIHRvdGFsX2xlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7ICAvKiBzbmlmZmVyIG1vZGUsIHNvIGp1c3QgcGFzcyB3aG9sZSBwYWNrZXQgKi8gIH07CisJCQlza2JfcHVsbChza2IsIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERvIHRyYW5zbGF0aW9uICovCisJCQl1bnRyYW5zbGF0ZShsb2NhbCwgc2tiLCB0b3RhbF9sZW4pOworCQl9CisJfSBlbHNlIHsgLyogc25pZmZlciBtb2RlLCBzbyBqdXN0IHBhc3Mgd2hvbGUgcGFja2V0ICovCisJfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBOb3cgcGljayB1cCB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzIGlmIGFueSAqLwotICAgIHRtcCA9IDE3OyAKLSAgICBpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgewotICAgICAgICBwcmNzbGluayA9IHByY3M7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyByeF9kYXRhIGluIGZyYWdtZW50IGxvb3BcbiIpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQotICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOwotICAgICAgICAgICAgcnhfbGVuID0gKCggcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKSkKLSAgICAgICAgICAgICAgICAmIFJYX0JVRkZfRU5EOwotICAgICAgICAgICAgcGt0X2FkZHIgPSAoKCByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpCi0gICAgICAgICAgICAgICAgJiBSWF9CVUZGX0VORDsKKwkvKiBOb3cgcGljayB1cCB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzIGlmIGFueSAqLworCXRtcCA9IDE3OworCWlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7CisJCXByY3NsaW5rID0gcHJjczsKKwkJREVCVUcoMSwgInJheV9jcyByeF9kYXRhIGluIGZyYWdtZW50IGxvb3BcbiIpOworCQlkbyB7CisJCQlwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQorCQkJICAgICsKKwkJCSAgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisJCQlyeF9sZW4gPQorCQkJICAgICgocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKQorCQkJICAgICAgPDwgOCkKKwkJCSAgICAgKworCQkJICAgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pKQorCQkJICAgICYgUlhfQlVGRl9FTkQ7CisJCQlwa3RfYWRkciA9CisJCQkgICAgKChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8CisJCQkgICAgICA4KQorCQkJICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpCisJCQkgICAgJiBSWF9CVUZGX0VORDsKIAotICAgICAgICAgICAgcnhfcHRyICs9IGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyLCByeF9sZW4pOworCQkJcnhfcHRyICs9CisJCQkgICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIsIHJ4X2xlbik7CiAKLSAgICAgICAgfSB3aGlsZSAodG1wLS0gJiYgCi0gICAgICAgICAgICAgICAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKTsKLSAgICAgICAgcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKLSAgICB9CisJCX0gd2hpbGUgKHRtcC0tICYmCisJCQkgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9CisJCQkgMHhGRik7CisJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CisJfQogCi0gICAgc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgICBsb2NhbC0+c3RhdHMucnhfYnl0ZXMgKz0gdG90YWxfbGVuOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJbmV0aWZfcngoc2tiKTsKKwlsb2NhbC0+c3RhdHMucnhfcGFja2V0cysrOworCWxvY2FsLT5zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9sZW47CiAKLSAgICAvKiBHYXRoZXIgc2lnbmFsIHN0cmVuZ3RoIHBlciBhZGRyZXNzICovCisJLyogR2F0aGVyIHNpZ25hbCBzdHJlbmd0aCBwZXIgYWRkcmVzcyAqLwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIC8qIEZvciB0aGUgQWNjZXNzIFBvaW50IG9yIHRoZSBub2RlIGhhdmluZyBzdGFydGVkIHRoZSBhZC1ob2MgbmV0Ci0gICAgICogbm90ZSA6IGFkLWhvYyB3b3JrIG9ubHkgaW4gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IHdlCi0gICAgICoga2x1ZGdlIGluIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMuLi4gKi8KLSAgICBpZighbWVtY21wKGxpbmtzcmNhZGRyLCBsb2NhbC0+YnNzX2lkLCBFVEhfQUxFTikpCi0gICAgICB7Ci0JLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KLQkvKmxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbm9uZSA/ICovCi0JbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gc2lnbGV2OwotCS8qbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbm9uZSA/ICovCi0JbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSAweDI7Ci0gICAgICB9Ci0gICAgLyogTm93LCB1cGRhdGUgdGhlIHNweSBzdHVmZiAqLwotICAgIHsKLQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7Ci0Jd3N0YXRzLmxldmVsID0gc2lnbGV2OwotCS8qIHdzdGF0cy5ub2lzZSA9IG5vbmUgPyAqLwotCS8qIHdzdGF0cy5xdWFsID0gbm9uZSA/ICovCi0Jd3N0YXRzLnVwZGF0ZWQgPSAweDI7Ci0JLyogVXBkYXRlIHNweSByZWNvcmRzICovCi0Jd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIGxpbmtzcmNhZGRyLCAmd3N0YXRzKTsKLSAgICB9Ci0jZW5kaWYJLyogV0lSRUxFU1NfU1BZICovCisJLyogRm9yIHRoZSBBY2Nlc3MgUG9pbnQgb3IgdGhlIG5vZGUgaGF2aW5nIHN0YXJ0ZWQgdGhlIGFkLWhvYyBuZXQKKwkgKiBub3RlIDogYWQtaG9jIHdvcmsgb25seSBpbiBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBidXQgd2UKKwkgKiBrbHVkZ2UgaW4gcmF5X2dldF93aXJlbGVzc19zdGF0cy4uLiAqLworCWlmICghbWVtY21wKGxpbmtzcmNhZGRyLCBsb2NhbC0+YnNzX2lkLCBFVEhfQUxFTikpIHsKKwkJLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KKwkJLypsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IG5vbmUgPyAqLworCQlsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBzaWdsZXY7CisJCS8qbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbm9uZSA/ICovCisJCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0gMHgyOworCX0KKwkvKiBOb3csIHVwZGF0ZSB0aGUgc3B5IHN0dWZmICovCisJeworCQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7CisJCXdzdGF0cy5sZXZlbCA9IHNpZ2xldjsKKwkJLyogd3N0YXRzLm5vaXNlID0gbm9uZSA/ICovCisJCS8qIHdzdGF0cy5xdWFsID0gbm9uZSA/ICovCisJCXdzdGF0cy51cGRhdGVkID0gMHgyOworCQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KKwkJd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIGxpbmtzcmNhZGRyLCAmd3N0YXRzKTsKKwl9CisjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiB9IC8qIGVuZCByeF9kYXRhICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHVudHJhbnNsYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiB7Ci0gICAgc25hcGhkcl90ICpwc25hcCA9IChzbmFwaGRyX3QgKikoc2tiLT5kYXRhICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpwbWFjID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotICAgIF9fYmUxNiB0eXBlID0gKihfX2JlMTYgKilwc25hcC0+ZXRoZXJ0eXBlOwotICAgIGludCBkZWx0YTsKLSAgICBzdHJ1Y3QgZXRoaGRyICpwZXRoOwotICAgIFVDSEFSIHNyY2FkZHJbQUREUkxFTl07Ci0gICAgVUNIQVIgZGVzdGFkZHJbQUREUkxFTl07Ci0gICAgc3RhdGljIFVDSEFSIG9yZ19icmlkZ2VbM10gPSB7MCwgMCwgMHhmOH07Ci0gICAgc3RhdGljIFVDSEFSIG9yZ18xMDQyWzNdID0gezAsIDAsIDB9OworCXNuYXBoZHJfdCAqcHNuYXAgPSAoc25hcGhkcl90ICopIChza2ItPmRhdGEgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKnBtYWMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJX19iZTE2IHR5cGUgPSAqKF9fYmUxNiAqKSBwc25hcC0+ZXRoZXJ0eXBlOworCWludCBkZWx0YTsKKwlzdHJ1Y3QgZXRoaGRyICpwZXRoOworCVVDSEFSIHNyY2FkZHJbQUREUkxFTl07CisJVUNIQVIgZGVzdGFkZHJbQUREUkxFTl07CisJc3RhdGljIFVDSEFSIG9yZ19icmlkZ2VbM10gPSB7IDAsIDAsIDB4ZjggfTsKKwlzdGF0aWMgVUNIQVIgb3JnXzEwNDJbM10gPSB7IDAsIDAsIDAgfTsKIAotICAgIG1lbWNweShkZXN0YWRkciwgaWVlZTgwMjExX2dldF9EQShwbWFjKSwgQUREUkxFTik7Ci0gICAgbWVtY3B5KHNyY2FkZHIsIGllZWU4MDIxMV9nZXRfU0EocG1hYyksIEFERFJMRU4pOworCW1lbWNweShkZXN0YWRkciwgaWVlZTgwMjExX2dldF9EQShwbWFjKSwgQUREUkxFTik7CisJbWVtY3B5KHNyY2FkZHIsIGllZWU4MDIxMV9nZXRfU0EocG1hYyksIEFERFJMRU4pOwogCiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMykgewotICAgIGludCBpOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYmVmb3JlIHVudHJhbnNsYXRlIik7Ci0gICAgZm9yIChpPTA7aTw2NDtpKyspIAotICAgICAgICBwcmludGsoIiUwMnggIixza2ItPmRhdGFbaV0pOwotICAgIHByaW50aygiXG4iIEtFUk5fREVCVUcgInR5cGUgPSAlMDh4LCB4c2FwID0gJTAyeCUwMnglMDJ4LCBvcmcgPSAlMDJ4MDJ4MDJ4XG4iLAotICAgICAgICAgICBudG9ocyh0eXBlKSwKLQkgICBwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsLAotCSAgIHBzbmFwLT5vcmdbMF0sIHBzbmFwLT5vcmdbMV0sIHBzbmFwLT5vcmdbMl0pOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJ1bnRyYW5zbGF0ZSBza2ItPmRhdGEgPSAlcFxuIixza2ItPmRhdGEpOwotICAgIH0KKwlpZiAocGNfZGVidWcgPiAzKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGJlZm9yZSB1bnRyYW5zbGF0ZSIpOworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJCXByaW50aygiJTAyeCAiLCBza2ItPmRhdGFbaV0pOworCQlwcmludGsoIlxuIiBLRVJOX0RFQlVHCisJCSAgICAgICAidHlwZSA9ICUwOHgsIHhzYXAgPSAlMDJ4JTAyeCUwMngsIG9yZyA9ICUwMngwMngwMnhcbiIsCisJCSAgICAgICBudG9ocyh0eXBlKSwgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCwKKwkJICAgICAgIHBzbmFwLT5vcmdbMF0sIHBzbmFwLT5vcmdbMV0sIHBzbmFwLT5vcmdbMl0pOworCQlwcmludGsoS0VSTl9ERUJVRyAidW50cmFuc2xhdGUgc2tiLT5kYXRhID0gJXBcbiIsIHNrYi0+ZGF0YSk7CisJfQogI2VuZGlmCiAKLSAgICBpZiAocHNuYXAtPmRzYXAgIT0gMHhhYSB8fCBwc25hcC0+c3NhcCAhPSAweGFhIHx8IHBzbmFwLT5jdHJsICE9IDMpIHsKLSAgICAgICAgLyogbm90IGEgc25hcCB0eXBlIHNvIGxlYXZlIGl0IGFsb25lICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBOT1QgU05BUCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCk7CisJaWYgKHBzbmFwLT5kc2FwICE9IDB4YWEgfHwgcHNuYXAtPnNzYXAgIT0gMHhhYSB8fCBwc25hcC0+Y3RybCAhPSAzKSB7CisJCS8qIG5vdCBhIHNuYXAgdHlwZSBzbyBsZWF2ZSBpdCBhbG9uZSAqLworCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIE5PVCBTTkFQICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICBwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsKTsKIAotICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47Ci0gICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgIHBldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBJdHMgYSBTTkFQICovCi0gICAgICAgIGlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnX2JyaWRnZSwgMykgPT0gMCkgeyAvKiBFdGhlcklJIGFuZCBudWtlIHRoZSBMTEMgICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBCcmlkZ2UgZW5jYXBcbiIpOwotICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAKLSAgICAgICAgICAgICAgICArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwotICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSB0eXBlOwotCX0gZWxzZSBpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ18xMDQyLCAzKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChudG9ocyh0eXBlKSkgewotICAgICAgICAgICAgICAgIGNhc2UgRVRIX1BfSVBYOgotICAgICAgICAgICAgICAgIGNhc2UgRVRIX1BfQUFSUDoKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBJUFgvQUFSUFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKLSAgICAgICAgICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBkZWZhdWx0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCArIAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGsoInJheV9jcyB1bnRyYW5zbGF0ZSB2ZXJ5IGNvbmZ1c2VkIGJ5IHBhY2tldFxuIik7Ci0gICAgICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwotICAgICAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKKwkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJcGV0aC0+aF9wcm90byA9IGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwl9IGVsc2UgeyAvKiBJdHMgYSBTTkFQICovCisJCWlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnX2JyaWRnZSwgMykgPT0gMCkgeworCQkvKiBFdGhlcklJIGFuZCBudWtlIHRoZSBMTEMgKi8KKwkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgQnJpZGdlIGVuY2FwXG4iKTsKKwkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEgKKwkJCSAgICArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOworCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCXBldGgtPmhfcHJvdG8gPSB0eXBlOworCQl9IGVsc2UgaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfMTA0MiwgMykgPT0gMCkgeworCQkJc3dpdGNoIChudG9ocyh0eXBlKSkgeworCQkJY2FzZSBFVEhfUF9JUFg6CisJCQljYXNlIEVUSF9QX0FBUlA6CisJCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgSVBYL0FBUlBcbiIpOworCQkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKKwkJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJCXBldGgtPmhfcHJvdG8gPQorCQkJCSAgICBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIGRlZmF1bHRcbiIpOworCQkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggKworCQkJCSAgICBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKKwkJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJCXBldGgtPmhfcHJvdG8gPSB0eXBlOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKCJyYXlfY3MgdW50cmFuc2xhdGUgdmVyeSBjb25mdXNlZCBieSBwYWNrZXRcbiIpOworCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOworCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCXBldGgtPmhfcHJvdG8gPSB0eXBlOworCQl9CiAJfQotICAgIH0KIC8qIFRCRCByZXNlcnZlICBza2JfcmVzZXJ2ZShza2IsIGRlbHRhKTsgKi8KLSAgICBza2JfcHVsbChza2IsIGRlbHRhKTsKLSAgICBERUJVRygzLCJ1bnRyYW5zbGF0ZSBhZnRlciBza2JfcHVsbCglZCksIHNrYi0+ZGF0YSA9ICVwXG4iLGRlbHRhLHNrYi0+ZGF0YSk7Ci0gICAgbWVtY3B5KHBldGgtPmhfZGVzdCwgZGVzdGFkZHIsIEFERFJMRU4pOwotICAgIG1lbWNweShwZXRoLT5oX3NvdXJjZSwgc3JjYWRkciwgQUREUkxFTik7CisJc2tiX3B1bGwoc2tiLCBkZWx0YSk7CisJREVCVUcoMywgInVudHJhbnNsYXRlIGFmdGVyIHNrYl9wdWxsKCVkKSwgc2tiLT5kYXRhID0gJXBcbiIsIGRlbHRhLAorCSAgICAgIHNrYi0+ZGF0YSk7CisJbWVtY3B5KHBldGgtPmhfZGVzdCwgZGVzdGFkZHIsIEFERFJMRU4pOworCW1lbWNweShwZXRoLT5oX3NvdXJjZSwgc3JjYWRkciwgQUREUkxFTik7CiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMykgewotICAgIGludCBpOwotICAgIHByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYWZ0ZXIgdW50cmFuc2xhdGU6Iik7Ci0gICAgZm9yIChpPTA7aTw2NDtpKyspCi0gICAgICAgIHByaW50aygiJTAyeCAiLHNrYi0+ZGF0YVtpXSk7Ci0gICAgcHJpbnRrKCJcbiIpOwotICAgIH0KKwlpZiAocGNfZGVidWcgPiAzKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGFmdGVyIHVudHJhbnNsYXRlOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJCXByaW50aygiJTAyeCAiLCBza2ItPmRhdGFbaV0pOworCQlwcmludGsoIlxuIik7CisJfQogI2VuZGlmCiB9IC8qIGVuZCB1bnRyYW5zbGF0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciByZWNlaXZlIGJ1ZmZlciB0byBQQyBtZW1vcnkuCiAgKiBkZXN0ICAgICA9IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gUEMgbWVtb3J5CiAgKiBwa3RfYWRkciA9IHNvdXJjZSBhZGRyZXNzIGluIHJlY2VpdmUgYnVmZmVyCiAgKiBsZW4gICAgICA9IGxlbmd0aCBvZiBwYWNrZXQgdG8gY29weQogICovCi1zdGF0aWMgaW50IGNvcHlfZnJvbV9yeF9idWZmKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgcGt0X2FkZHIsIGludCBsZW5ndGgpCitzdGF0aWMgaW50IGNvcHlfZnJvbV9yeF9idWZmKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgcGt0X2FkZHIsCisJCQkgICAgIGludCBsZW5ndGgpCiB7Ci0gICAgaW50IHdyYXBfYnl0ZXMgPSAocGt0X2FkZHIgKyBsZW5ndGgpIC0gKFJYX0JVRkZfRU5EICsgMSk7Ci0gICAgaWYgKHdyYXBfYnl0ZXMgPD0gMCkKLSAgICB7Ci0gICAgICAgIG1lbWNweV9mcm9taW8oZGVzdCxsb2NhbC0+cm1lbSArIHBrdF9hZGRyLGxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UgLyogUGFja2V0IHdyYXBwZWQgaW4gY2lyY3VsYXIgYnVmZmVyICovCi0gICAgewotICAgICAgICBtZW1jcHlfZnJvbWlvKGRlc3QsbG9jYWwtPnJtZW0rcGt0X2FkZHIsbGVuZ3RoIC0gd3JhcF9ieXRlcyk7Ci0gICAgICAgIG1lbWNweV9mcm9taW8oZGVzdCArIGxlbmd0aCAtIHdyYXBfYnl0ZXMsIGxvY2FsLT5ybWVtLCB3cmFwX2J5dGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJlbGVhc2VfZnJhZ19jaGFpbihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKiBwcmNzKQotewotICAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOwotICAgIGludCB0bXAgPSAxNzsKLSAgICB1bnNpZ25lZCByY3NpbmRleCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCWludCB3cmFwX2J5dGVzID0gKHBrdF9hZGRyICsgbGVuZ3RoKSAtIChSWF9CVUZGX0VORCArIDEpOworCWlmICh3cmFwX2J5dGVzIDw9IDApIHsKKwkJbWVtY3B5X2Zyb21pbyhkZXN0LCBsb2NhbC0+cm1lbSArIHBrdF9hZGRyLCBsZW5ndGgpOworCX0gZWxzZSB7IC8qIFBhY2tldCB3cmFwcGVkIGluIGNpcmN1bGFyIGJ1ZmZlciAqLwogCi0gICAgd2hpbGUgKHRtcC0tKSB7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIGlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKSB7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIscmNzaW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgCi0gICAgICAgIH0gICAKLSAgICAgICAgcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKLSAgICAgICAgcmNzaW5kZXggPSByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7Ci0gICAgfQotICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7CisJCW1lbWNweV9mcm9taW8oZGVzdCwgbG9jYWwtPnJtZW0gKyBwa3RfYWRkciwKKwkJCSAgICAgIGxlbmd0aCAtIHdyYXBfYnl0ZXMpOworCQltZW1jcHlfZnJvbWlvKGRlc3QgKyBsZW5ndGggLSB3cmFwX2J5dGVzLCBsb2NhbC0+cm1lbSwKKwkJCSAgICAgIHdyYXBfYnl0ZXMpOworCX0KKwlyZXR1cm4gbGVuZ3RoOwogfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCByZWxlYXNlX2ZyYWdfY2hhaW4ocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKQoreworCXN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOworCWludCB0bXAgPSAxNzsKKwl1bnNpZ25lZCByY3NpbmRleCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCisJd2hpbGUgKHRtcC0tKSB7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7CisJCWlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKSB7CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLAorCQkJICAgICAgcmNzaW5kZXgpOworCQkJYnJlYWs7CisJCX0KKwkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKKwkJcmNzaW5kZXggPSByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisJfQorCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzbGluay0+YnVmZmVyX3N0YXR1cyk7Cit9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBERUJVRygwLCJyYXlfY3MgU3RhcnRpbmcgYXV0aGVudGljYXRpb24uXG4iKTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBhdXRoZW50aWNhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlERUJVRygwLCAicmF5X2NzIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uLlxuIik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGF1dGhlbnRpY2F0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CiAKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgaWYgKGJ1aWxkX2F1dGhfZnJhbWUobG9jYWwsIGxvY2FsLT5ic3NfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgewotICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmYXV0aGVudGljYXRlX3RpbWVvdXQ7Ci0gICAgfQotICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaKjI7Ci0gICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVdBSVRJTkdfUkVTUE9OU0U7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWlmIChidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YnNzX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKKwkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OworCX0gZWxzZSB7CisJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZhdXRoZW50aWNhdGVfdGltZW91dDsKKwl9CisJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiAyOworCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFXQUlUSU5HX1JFU1BPTlNFOwogfSAvKiBlbmQgYXV0aGVudGljYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJ4X2F1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCisJCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQogewotICAgIFVDSEFSIGJ1ZmZbMjU2XTsKLSAgICBzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7Ci0gICAgCi0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCVVDSEFSIGJ1ZmZbMjU2XTsKKwlzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7CiAKLSAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgYnVmZiwgcGt0X2FkZHIsIHJ4X2xlbiAmIDB4ZmYpOwotICAgIC8qIGlmIHdlIGFyZSB0cnlpbmcgdG8gZ2V0IGF1dGhlbnRpY2F0ZWQgKi8KLSAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyByeF9hdXRoIHZhcj0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsIG1zZy0+dmFyWzBdLG1zZy0+dmFyWzFdLG1zZy0+dmFyWzJdLG1zZy0+dmFyWzNdLG1zZy0+dmFyWzRdLG1zZy0+dmFyWzVdKTsKLSAgICAgICAgaWYgKG1zZy0+dmFyWzJdID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVzcG9uc2UuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWlsZF9hdXRoX2ZyYW1lIChsb2NhbCwgbXNnLT5tYWMuYWRkcl8yLCBPUEVOX0FVVEhfUkVTUE9OU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBORUVEX1RPX0FVVEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkobG9jYWwtPmF1dGhfaWQsIG1zZy0+bWFjLmFkZHJfMiwgQUREUkxFTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIC8qIEluZnJhc3RydWN0dXJlIG5ldHdvcmsgKi8KLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gQVdBSVRJTkdfUkVTUE9OU0UpIHsKLSAgICAgICAgICAgIC8qIFZlcmlmeSBhdXRoZW50aWNhdGlvbiBzZXF1ZW5jZSAjMiBhbmQgc3VjY2VzcyAqLwotICAgICAgICAgICAgaWYgKG1zZy0+dmFyWzJdID09IDIpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG1zZy0+dmFyWzNdIHwgbXNnLT52YXJbNF0pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMSwiQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9DT01QTEVURTsKLSAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVVUSEVOVElDQVRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfUkVGVVNFRDsKLSAgICAgICAgICAgICAgICAgICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCisJY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIGJ1ZmYsIHBrdF9hZGRyLCByeF9sZW4gJiAweGZmKTsKKwkvKiBpZiB3ZSBhcmUgdHJ5aW5nIHRvIGdldCBhdXRoZW50aWNhdGVkICovCisJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgeworCQlERUJVRygxLCAicmF5X2NzIHJ4X2F1dGggdmFyPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJICAgICAgbXNnLT52YXJbMF0sIG1zZy0+dmFyWzFdLCBtc2ctPnZhclsyXSwgbXNnLT52YXJbM10sCisJCSAgICAgIG1zZy0+dmFyWzRdLCBtc2ctPnZhcls1XSk7CisJCWlmIChtc2ctPnZhclsyXSA9PSAxKSB7CisJCQlERUJVRygwLCAicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVzcG9uc2UuXG4iKTsKKwkJCWlmICghYnVpbGRfYXV0aF9mcmFtZQorCQkJICAgIChsb2NhbCwgbXNnLT5tYWMuYWRkcl8yLCBPUEVOX0FVVEhfUkVTUE9OU0UpKSB7CisJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gTkVFRF9UT19BVVRIOworCQkJCW1lbWNweShsb2NhbC0+YXV0aF9pZCwgbXNnLT5tYWMuYWRkcl8yLAorCQkJCSAgICAgICBBRERSTEVOKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7IC8qIEluZnJhc3RydWN0dXJlIG5ldHdvcmsgKi8KKworCQlpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IEFXQUlUSU5HX1JFU1BPTlNFKSB7CisJCQkvKiBWZXJpZnkgYXV0aGVudGljYXRpb24gc2VxdWVuY2UgIzIgYW5kIHN1Y2Nlc3MgKi8KKwkJCWlmIChtc2ctPnZhclsyXSA9PSAyKSB7CisJCQkJaWYgKChtc2ctPnZhclszXSB8IG1zZy0+dmFyWzRdKSA9PSAwKSB7CisJCQkJCURFQlVHKDEsICJBdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsXG4iKTsKKwkJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX0NPTVBMRVRFOworCQkJCQlhc3NvY2lhdGUobG9jYWwpOworCQkJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPQorCQkJCQkgICAgQVVUSEVOVElDQVRFRDsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVRygwLCAiQXV0aGVudGljYXRpb24gcmVmdXNlZFxuIik7CisJCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9SRUZVU0VEOworCQkJCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CisJCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9CisJCQkJCSAgICBVTkFVVEhFTlRJQ0FURUQ7CisJCQkJfQorCQkJfQorCQl9CisJfQogCiB9IC8qIGVuZCByeF9hdXRoZW50aWNhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXNzb2NpYXRlKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgYXNzb2NpYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCWludCBjY3NpbmRleDsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgYXNzb2NpYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgewogLyogVEJEIHNob3VsZCBuZXZlciBiZSBoZXJlIGJ1dC4uLiB3aGF0IGlmIHdlIGFyZT8gKi8KLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGFzc29jaWF0ZSAtIE5vIGZyZWUgY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBERUJVRygxLCJyYXlfY3MgU3RhcnRpbmcgYXNzb2NpYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnRcbiIpOwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICAvKiBmaWxsIGluIHRoZSBDQ1MgKi8KLSAgICB3cml0ZWIoQ0NTX1NUQVJUX0FTU09DSUFUSU9OLCAmcGNjcy0+Y21kKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCURFQlVHKDEsICJyYXlfY3MgYXNzb2NpYXRlIC0gTm8gZnJlZSBjY3NcbiIpOworCQlyZXR1cm47CisJfQorCURFQlVHKDEsICJyYXlfY3MgU3RhcnRpbmcgYXNzb2NpYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnRcbiIpOworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwkvKiBmaWxsIGluIHRoZSBDQ1MgKi8KKwl3cml0ZWIoQ0NTX1NUQVJUX0FTU09DSUFUSU9OLCAmcGNjcy0+Y21kKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsICJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwogCi0gICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMjsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OwotICAgICAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghc25pZmZlcikgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAqIDI7CisJCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKKwkJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXNuaWZmZXIpCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKIH0gLyogZW5kIGFzc29jaWF0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCitzdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCiB7CiAvKiAgVUNIQVIgYnVmZlsyNTZdOwogICAgIHN0cnVjdCByeF9tc2cgKm1zZyA9IChzdHJ1Y3QgcnhfbXNnICopYnVmZjsKICovCi0gICAgREVCVUcoMCwiRGVhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZFxuIik7Ci0gICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwotICAgIC8qIE5lZWQgdG8gcmVhdXRoZW50aWNhdGUgb3IgcmVqb2luIGRlcGVuZGluZyBvbiByZWFzb24gY29kZSAqLworCURFQlVHKDAsICJEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkXG4iKTsKKwlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7CisJLyogTmVlZCB0byByZWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gZGVwZW5kaW5nIG9uIHJlYXNvbiBjb2RlICovCiAvKiAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIGJ1ZmYsIHBrdF9hZGRyLCByeF9sZW4gJiAweGZmKTsKICAqLwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBjbGVhcl9pbnRlcnJ1cHQocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICB3cml0ZWIoMCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgSENTX0lOVFJfT0ZGU0VUKTsKKwl3cml0ZWIoMCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgSENTX0lOVFJfT0ZGU0VUKTsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAjZGVmaW5lIE1BWERBVEEgKFBBR0VfU0laRSAtIDgwKQogCiBzdGF0aWMgY2hhciAqY2FyZF9zdGF0dXNbXSA9IHsKLSAgICAiQ2FyZCBpbnNlcnRlZCAtIHVuaW5pdGlhbGl6ZWQiLCAgICAgLyogMCAqLwotICAgICJDYXJkIG5vdCBkb3dubG9hZGVkIiwgICAgICAgICAgICAgICAvKiAxICovCi0gICAgIldhaXRpbmcgZm9yIGRvd25sb2FkIHBhcmFtZXRlcnMiLCAgIC8qIDIgKi8KLSAgICAiQ2FyZCBkb2luZyBhY3F1aXNpdGlvbiIsICAgICAgICAgICAgLyogMyAqLwotICAgICJBY3F1aXNpdGlvbiBjb21wbGV0ZSIsICAgICAgICAgICAgICAvKiA0ICovCi0gICAgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlIiwgICAgICAgICAgIC8qIDUgKi8KLSAgICAiQXNzb2NpYXRpb24gY29tcGxldGUiLCAgICAgICAgICAgICAgLyogNiAqLwotICAgICI/Pz8iLCAiPz8/IiwgIj8/PyIsICI/Pz8iLCAgICAgICAgICAvKiA3IDggOSAxMCB1bmRlZmluZWQgKi8KLSAgICAiQ2FyZCBpbml0IGVycm9yIiwgICAgICAgICAgICAgICAgICAgLyogMTEgKi8KLSAgICAiRG93bmxvYWQgcGFyYW1ldGVycyBlcnJvciIsICAgICAgICAgLyogMTIgKi8KLSAgICAiPz8/IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgKi8KLSAgICAiQWNxdWlzaXRpb24gZmFpbGVkIiwgICAgICAgICAgICAgICAgLyogMTQgKi8KLSAgICAiQXV0aGVudGljYXRpb24gcmVmdXNlZCIsICAgICAgICAgICAgLyogMTUgKi8KLSAgICAiQXNzb2NpYXRpb24gZmFpbGVkIiAgICAgICAgICAgICAgICAgLyogMTYgKi8KKwkiQ2FyZCBpbnNlcnRlZCAtIHVuaW5pdGlhbGl6ZWQiLAkvKiAwICovCisJIkNhcmQgbm90IGRvd25sb2FkZWQiLAkJCS8qIDEgKi8KKwkiV2FpdGluZyBmb3IgZG93bmxvYWQgcGFyYW1ldGVycyIsCS8qIDIgKi8KKwkiQ2FyZCBkb2luZyBhY3F1aXNpdGlvbiIsCQkvKiAzICovCisJIkFjcXVpc2l0aW9uIGNvbXBsZXRlIiwJCQkvKiA0ICovCisJIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlIiwJCS8qIDUgKi8KKwkiQXNzb2NpYXRpb24gY29tcGxldGUiLAkJCS8qIDYgKi8KKwkiPz8/IiwgIj8/PyIsICI/Pz8iLCAiPz8/IiwJCS8qIDcgOCA5IDEwIHVuZGVmaW5lZCAqLworCSJDYXJkIGluaXQgZXJyb3IiLAkJCS8qIDExICovCisJIkRvd25sb2FkIHBhcmFtZXRlcnMgZXJyb3IiLAkJLyogMTIgKi8KKwkiPz8/IiwJCQkJCS8qIDEzICovCisJIkFjcXVpc2l0aW9uIGZhaWxlZCIsCQkJLyogMTQgKi8KKwkiQXV0aGVudGljYXRpb24gcmVmdXNlZCIsCQkvKiAxNSAqLworCSJBc3NvY2lhdGlvbiBmYWlsZWQiCQkJLyogMTYgKi8KIH07CiAKLXN0YXRpYyBjaGFyICpuZXR0eXBlW10gPSB7IkFkaG9jIiwgIkluZnJhICJ9Owotc3RhdGljIGNoYXIgKmZyYW1pbmdbXSA9IHsiRW5jYXBzdWxhdGlvbiIsICJUcmFuc2xhdGlvbiJ9CitzdGF0aWMgY2hhciAqbmV0dHlwZVtdID0geyAiQWRob2MiLCAiSW5mcmEgIiB9Oworc3RhdGljIGNoYXIgKmZyYW1pbmdbXSA9IHsgIkVuY2Fwc3VsYXRpb24iLCAiVHJhbnNsYXRpb24iIH0KKwogOwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfY3NfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIC8qIFByaW50IGN1cnJlbnQgdmFsdWVzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHZpYSBvdGhlciBtZWFucwotICogZWcgaWZjb25maWcgCisgKiBlZyBpZmNvbmZpZwogICovCi0gICAgaW50IGk7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLSAgICByYXlfZGV2X3QgKmxvY2FsOwotICAgIFVDSEFSICpwOwotICAgIHN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICpwZmg7Ci0gICAgVUNIQVIgY1szM107CisJaW50IGk7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlyYXlfZGV2X3QgKmxvY2FsOworCVVDSEFSICpwOworCXN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICpwZmg7CisJVUNIQVIgY1szM107CiAKLSAgICBsaW5rID0gdGhpc19kZXZpY2U7Ci0gICAgaWYgKCFsaW5rKQotICAgIAlyZXR1cm4gMDsKLSAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OwotICAgIGlmICghZGV2KQotICAgIAlyZXR1cm4gMDsKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgaWYgKCFsb2NhbCkKLSAgICAJcmV0dXJuIDA7CisJbGluayA9IHRoaXNfZGV2aWNlOworCWlmICghbGluaykKKwkJcmV0dXJuIDA7CisJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWlmICghbG9jYWwpCisJCXJldHVybiAwOwogCi0gICAgc2VxX3B1dHMobSwgIlJheWxpbmsgV2lyZWxlc3MgTEFOIGRyaXZlciBzdGF0dXNcbiIpOwotICAgIHNlcV9wcmludGYobSwgIiVzXG4iLCByY3NpZCk7Ci0gICAgLyogYnVpbGQgNCBkb2VzIG5vdCByZXBvcnQgdmVyc2lvbiwgYW5kIGZpZWxkIGlzIDB4NTUgYWZ0ZXIgbWVtdGVzdCAqLwotICAgIHNlcV9wdXRzKG0sICJGaXJtd2FyZSB2ZXJzaW9uICAgICA9ICIpOwotICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCi0gICAgICAgIHNlcV9wdXRzKG0sICI0IC0gVXNlIGR1bXBfY2lzIGZvciBtb3JlIGRldGFpbHNcbiIpOwotICAgIGVsc2UKLSAgICAgICAgc2VxX3ByaW50ZihtLCAiJTJkLiUwMmQuJTAyZFxuIiwKLSAgICAgICAgICAgICAgICAgICBsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkLCBsb2NhbC0+ZndfdmFyKTsKKwlzZXFfcHV0cyhtLCAiUmF5bGluayBXaXJlbGVzcyBMQU4gZHJpdmVyIHN0YXR1c1xuIik7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHJjc2lkKTsKKwkvKiBidWlsZCA0IGRvZXMgbm90IHJlcG9ydCB2ZXJzaW9uLCBhbmQgZmllbGQgaXMgMHg1NSBhZnRlciBtZW10ZXN0ICovCisJc2VxX3B1dHMobSwgIkZpcm13YXJlIHZlcnNpb24gICAgID0gIik7CisJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKKwkJc2VxX3B1dHMobSwgIjQgLSBVc2UgZHVtcF9jaXMgZm9yIG1vcmUgZGV0YWlsc1xuIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICIlMmQuJTAyZC4lMDJkXG4iLAorCQkJICAgbG9jYWwtPmZ3X3ZlciwgbG9jYWwtPmZ3X2JsZCwgbG9jYWwtPmZ3X3Zhcik7CiAKLSAgICBmb3IgKGk9MDsgaTwzMjsgaSsrKSBjW2ldID0gbG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWRbaV07Ci0gICAgY1szMl0gPSAwOwotICAgIHNlcV9wcmludGYobSwgIiVzIG5ldHdvcmsgRVNTSUQgPSBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgbmV0dHlwZVtsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGVdLCBjKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJY1tpXSA9IGxvY2FsLT5zcGFybS5iNS5hX2N1cnJlbnRfZXNzX2lkW2ldOworCWNbMzJdID0gMDsKKwlzZXFfcHJpbnRmKG0sICIlcyBuZXR3b3JrIEVTU0lEID0gXCIlc1wiXG4iLAorCQkgICBuZXR0eXBlW2xvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZV0sIGMpOwogCi0gICAgcCA9IGxvY2FsLT5ic3NfaWQ7Ci0gICAgc2VxX3ByaW50ZihtLCAiQlNTSUQgICAgICAgICAgICAgICAgPSAlcE1cbiIsIHApOworCXAgPSBsb2NhbC0+YnNzX2lkOworCXNlcV9wcmludGYobSwgIkJTU0lEICAgICAgICAgICAgICAgID0gJXBNXG4iLCBwKTsKIAotICAgIHNlcV9wcmludGYobSwgIkNvdW50cnkgY29kZSAgICAgICAgID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUpOworCXNlcV9wcmludGYobSwgIkNvdW50cnkgY29kZSAgICAgICAgID0gJWRcbiIsCisJCSAgIGxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlKTsKIAotICAgIGkgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7Ci0gICAgaWYgKGkgPCAwKSBpID0gMTA7Ci0gICAgaWYgKGkgPiAxNikgaSA9IDEwOwotICAgIHNlcV9wcmludGYobSwgIkNhcmQgc3RhdHVzICAgICAgICAgID0gJXNcbiIsIGNhcmRfc3RhdHVzW2ldKTsKKwlpID0gbG9jYWwtPmNhcmRfc3RhdHVzOworCWlmIChpIDwgMCkKKwkJaSA9IDEwOworCWlmIChpID4gMTYpCisJCWkgPSAxMDsKKwlzZXFfcHJpbnRmKG0sICJDYXJkIHN0YXR1cyAgICAgICAgICA9ICVzXG4iLCBjYXJkX3N0YXR1c1tpXSk7CiAKLSAgICBzZXFfcHJpbnRmKG0sICJGcmFtaW5nIG1vZGUgICAgICAgICA9ICVzXG4iLGZyYW1pbmdbdHJhbnNsYXRlXSk7CisJc2VxX3ByaW50ZihtLCAiRnJhbWluZyBtb2RlICAgICAgICAgPSAlc1xuIiwgZnJhbWluZ1t0cmFuc2xhdGVdKTsKIAotICAgIHNlcV9wcmludGYobSwgIkxhc3QgcGt0IHNpZ25hbCBsdmwgID0gJWRcbiIsIGxvY2FsLT5sYXN0X3JzbCk7CisJc2VxX3ByaW50ZihtLCAiTGFzdCBwa3Qgc2lnbmFsIGx2bCAgPSAlZFxuIiwgbG9jYWwtPmxhc3RfcnNsKTsKIAotICAgIGlmIChsb2NhbC0+YmVhY29uX3J4ZWQpIHsKLQkvKiBQdWxsIHNvbWUgZmllbGRzIG91dCBvZiBsYXN0IGJlYWNvbiByZWNlaXZlZCAqLwotCXNlcV9wcmludGYobSwgIkJlYWNvbiBJbnRlcnZhbCAgICAgID0gJWQgS3VzXG4iLAotCQkgICAgICAgbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFswXQotCQkgICAgICAgKyAyNTYgKiBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzFdKTsKLSAgICAKLSAgICBwID0gbG9jYWwtPmxhc3RfYmNuLmVsZW1lbnRzOwotICAgIGlmIChwWzBdID09IENfRVNTSURfRUxFTUVOVF9JRCkgcCArPSBwWzFdICsgMjsKLSAgICBlbHNlIHsKLSAgICAgICAgc2VxX3ByaW50ZihtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBlc3NpZCBlbGVtZW50IGlkID0gJWRcbiIscFswXSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAobG9jYWwtPmJlYWNvbl9yeGVkKSB7CisJCS8qIFB1bGwgc29tZSBmaWVsZHMgb3V0IG9mIGxhc3QgYmVhY29uIHJlY2VpdmVkICovCisJCXNlcV9wcmludGYobSwgIkJlYWNvbiBJbnRlcnZhbCAgICAgID0gJWQgS3VzXG4iLAorCQkJICAgbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFswXQorCQkJICAgKyAyNTYgKiBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzFdKTsKIAotICAgIGlmIChwWzBdID09IENfU1VQUE9SVEVEX1JBVEVTX0VMRU1FTlRfSUQpIHsKLSAgICAgICAgc2VxX3B1dHMobSwgIlN1cHBvcnRlZCByYXRlIGNvZGVzID0gIik7Ci0gICAgICAgIGZvciAoaT0yOyBpPHBbMV0gKyAyOyBpKyspIAotICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAiMHglMDJ4ICIsIHBbaV0pOwotICAgICAgICBzZXFfcHV0YyhtLCAnXG4nKTsKLSAgICAgICAgcCArPSBwWzFdICsgMjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IHJhdGVzIGVsZW1lbnRcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisJCXAgPSBsb2NhbC0+bGFzdF9iY24uZWxlbWVudHM7CisJCWlmIChwWzBdID09IENfRVNTSURfRUxFTUVOVF9JRCkKKwkJCXAgKz0gcFsxXSArIDI7CisJCWVsc2UgeworCQkJc2VxX3ByaW50ZihtLAorCQkJCSAgICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IGVzc2lkIGVsZW1lbnQgaWQgPSAlZFxuIiwKKwkJCQkgICBwWzBdKTsKKwkJCXJldHVybiAwOworCQl9CiAKLQlpZiAocFswXSA9PSBDX0ZIX1BBUkFNX1NFVF9FTEVNRU5UX0lEKSB7Ci0JICAgIHBmaCA9IChzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqKXA7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBkd2VsbCAgICAgICAgICAgID0gJWQgS3VzXG4iLAotCQkJICAgcGZoLT5kd2VsbF90aW1lWzBdICsgMjU2ICogcGZoLT5kd2VsbF90aW1lWzFdKTsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIHNldCAgICAgICAgICAgICAgPSAlZCBcbiIsIHBmaC0+aG9wX3NldCk7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBwYXR0ZXJuICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9wYXR0ZXJuKTsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIGluZGV4ICAgICAgICAgICAgPSAlZCBcbiIsIHBmaC0+aG9wX2luZGV4KTsKLQkgICAgcCArPSBwWzFdICsgMjsKKwkJaWYgKHBbMF0gPT0gQ19TVVBQT1JURURfUkFURVNfRUxFTUVOVF9JRCkgeworCQkJc2VxX3B1dHMobSwgIlN1cHBvcnRlZCByYXRlIGNvZGVzID0gIik7CisJCQlmb3IgKGkgPSAyOyBpIDwgcFsxXSArIDI7IGkrKykKKwkJCQlzZXFfcHJpbnRmKG0sICIweCUwMnggIiwgcFtpXSk7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwkJCXAgKz0gcFsxXSArIDI7CisJCX0gZWxzZSB7CisJCQlzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCByYXRlcyBlbGVtZW50XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHBbMF0gPT0gQ19GSF9QQVJBTV9TRVRfRUxFTUVOVF9JRCkgeworCQkJcGZoID0gKHN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICopcDsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBkd2VsbCAgICAgICAgICAgID0gJWQgS3VzXG4iLAorCQkJCSAgIHBmaC0+ZHdlbGxfdGltZVswXSArCisJCQkJICAgMjU2ICogcGZoLT5kd2VsbF90aW1lWzFdKTsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBzZXQgICAgICAgICAgICAgID0gJWQgXG4iLAorCQkJCSAgIHBmaC0+aG9wX3NldCk7CisJCQlzZXFfcHJpbnRmKG0sICJIb3AgcGF0dGVybiAgICAgICAgICA9ICVkIFxuIiwKKwkJCQkgICBwZmgtPmhvcF9wYXR0ZXJuKTsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBpbmRleCAgICAgICAgICAgID0gJWQgXG4iLAorCQkJCSAgIHBmaC0+aG9wX2luZGV4KTsKKwkJCXAgKz0gcFsxXSArIDI7CisJCX0gZWxzZSB7CisJCQlzZXFfcHV0cyhtLAorCQkJCSAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBGSCBwYXJhbSBlbGVtZW50XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJc2VxX3B1dHMobSwgIk5vIGJlYWNvbnMgcmVjZWl2ZWRcbiIpOwogCX0KLQllbHNlIHsKLQkgICAgc2VxX3B1dHMobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgRkggcGFyYW0gZWxlbWVudFxuIik7Ci0JICAgIHJldHVybiAwOwotCX0KLSAgICB9IGVsc2UgewotCXNlcV9wdXRzKG0sICJObyBiZWFjb25zIHJlY2VpdmVkXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmF5X2NzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTI2ODQsNzQgKzI4MDYsNzcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF5X2NzX3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gcmF5X2NzX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gcmF5X2NzX3Byb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAjZW5kaWYKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgYnVpbGRfYXV0aF9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IGF1dGhfdHlwZSkKIHsKLSAgICBpbnQgYWRkcjsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7Ci0gICAgaW50IGNjc2luZGV4OworCWludCBhZGRyOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsKKwlpbnQgY2NzaW5kZXg7CiAKLSAgICAvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX3R4X2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0ZSAtIE5vIGZyZWUgdHggY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwkvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX3R4X2Njcyhsb2NhbCkpIDwgMCkgeworCQlERUJVRygxLCAicmF5X2NzIHNlbmQgYXV0aGVudGljYXRlIC0gTm8gZnJlZSB0eCBjY3NcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKIAotICAgIC8qIEFkZHJlc3MgaW4gY2FyZCBzcGFjZSAqLwotICAgIGFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7Ci0gICAgLyogZmlsbCBpbiB0aGUgQ0NTICovCi0gICAgd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoYWRkciA+PiA4LCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0cik7Ci0gICAgd3JpdGViKDB4MjAsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyICsgMSk7Ci0gICAgd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTVNCLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCk7Ci0gICAgd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTFNCLHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoICsgMSk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOworCS8qIEFkZHJlc3MgaW4gY2FyZCBzcGFjZSAqLworCWFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7CisJLyogZmlsbCBpbiB0aGUgQ0NTICovCisJd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoYWRkciA+PiA4LCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0cik7CisJd3JpdGViKDB4MjAsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyICsgMSk7CisJd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTVNCLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCk7CisJd3JpdGViKFRYX0FVVEhFTlRJQ0FURV9MRU5HVEhfTFNCLAorCSAgICAgICBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCArIDEpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKIAotICAgIHB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKLSAgICAvKiBmaWxsIGluIHRoZSBtYWMgaGVhZGVyICovCi0gICAgd3JpdGViKFBST1RPQ09MX1ZFUiB8IEFVVEhFTlRJQ19UWVBFLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOwotICAgIHdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCXB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKKwkvKiBmaWxsIGluIHRoZSBtYWMgaGVhZGVyICovCisJd3JpdGViKFBST1RPQ09MX1ZFUiB8IEFVVEhFTlRJQ19UWVBFLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOworCXdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwogCi0gICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBkZXN0LCBBRERSTEVOKTsKLSAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKLSAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOworCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgZGVzdCwgQUREUkxFTik7CisJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7CisJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKIAotICAgIC8qIEZpbGwgaW4gbXNnIGJvZHkgd2l0aCBwcm90b2NvbCAwMCAwMCwgc2VxdWVuY2UgMDEgMDAgLHN0YXR1cyAwMCAwMCAqLwotICAgIG1lbXNldF9pbyhwdHgtPnZhciwgMCwgNik7Ci0gICAgd3JpdGViKGF1dGhfdHlwZSAmIDB4ZmYsIHB0eC0+dmFyICsgMik7CisJLyogRmlsbCBpbiBtc2cgYm9keSB3aXRoIHByb3RvY29sIDAwIDAwLCBzZXF1ZW5jZSAwMSAwMCAsc3RhdHVzIDAwIDAwICovCisJbWVtc2V0X2lvKHB0eC0+dmFyLCAwLCA2KTsKKwl3cml0ZWIoYXV0aF90eXBlICYgMHhmZiwgcHR4LT52YXIgKyAyKTsKIAotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHNlbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsCisJCSAgICAgICJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOwogfSAvKiBFbmQgYnVpbGRfYXV0aF9mcmFtZSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIHJheWNzX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUsIHdyaXRlX3Byb2NfdCAqdywgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBlbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZSRUcgfCBTX0lXVVNSLCBOVUxMKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0KKwkgICAgY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJFRyB8IFNfSVdVU1IsIE5VTEwpOwogCWlmIChlbnRyeSkgewogCQllbnRyeS0+d3JpdGVfcHJvYyA9IHc7CiAJCWVudHJ5LT5kYXRhID0gZGF0YTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZXNzaWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHdyaXRlX2Vzc2lkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgY2hhciBwcm9jX2Vzc2lkWzMzXTsKIAlpbnQgbGVuID0gY291bnQ7CkBAIC0yNzY1LDcgKzI4OTAsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9pbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHdyaXRlX2ludChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBjaGFyIHByb2NfbnVtYmVyWzEwXTsKIAljaGFyICpwOwpAQCAtMjc4NSw3ICsyOTExLDcgQEAKIAkJdW5zaWduZWQgaW50IGMgPSAqcCAtICcwJzsKIAkJaWYgKGMgPiA5KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW5yID0gbnIqMTAgKyBjOworCQluciA9IG5yICogMTAgKyBjOwogCQlwKys7CiAJfSB3aGlsZSAoLS1sZW4pOwogCSooaW50ICopZGF0YSA9IG5yOwpAQCAtMjc5Nyw1NSArMjkyMyw1OCBAQAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFhNiwgMHgwMDAwKSwKIAlQQ01DSUFfREVWSUNFX05VTEwsCiB9OworCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgcmF5X2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciByYXlfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZHJ2CQk9IHsKLQkJLm5hbWUJPSAicmF5X2NzIiwKLQl9LAotCS5wcm9iZQkJPSByYXlfcHJvYmUsCi0JLnJlbW92ZQkJPSByYXlfZGV0YWNoLAotCS5pZF90YWJsZSAgICAgICA9IHJheV9pZHMsCi0JLnN1c3BlbmQJPSByYXlfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHJheV9yZXN1bWUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJLm5hbWUgPSAicmF5X2NzIiwKKwkJfSwKKwkucHJvYmUgPSByYXlfcHJvYmUsCisJLnJlbW92ZSA9IHJheV9kZXRhY2gsCisJLmlkX3RhYmxlID0gcmF5X2lkcywKKwkuc3VzcGVuZCA9IHJheV9zdXNwZW5kLAorCS5yZXN1bWUgPSByYXlfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9yYXlfY3Modm9pZCkKIHsKLSAgICBpbnQgcmM7Ci0gICAgCi0gICAgREVCVUcoMSwgIiVzXG4iLCByY3NpZCk7Ci0gICAgcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKLSAgICBERUJVRygxLCAicmF5bGluayBpbml0X21vZHVsZSByZWdpc3Rlcl9wY21jaWFfZHJpdmVyIHJldHVybnMgMHgleFxuIixyYyk7CisJaW50IHJjOworCisJREVCVUcoMSwgIiVzXG4iLCByY3NpZCk7CisJcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKKwlERUJVRygxLCAicmF5bGluayBpbml0X21vZHVsZSByZWdpc3Rlcl9wY21jaWFfZHJpdmVyIHJldHVybnMgMHgleFxuIiwKKwkgICAgICByYyk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotICAgIHByb2NfbWtkaXIoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKKwlwcm9jX21rZGlyKCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CiAKLSAgICBwcm9jX2NyZWF0ZSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCAwLCBOVUxMLCAmcmF5X2NzX3Byb2NfZm9wcyk7Ci0gICAgcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvZXNzaWQiLCB3cml0ZV9lc3NpZCwgTlVMTCk7Ci0gICAgcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCB3cml0ZV9pbnQsICZuZXRfdHlwZSk7Ci0gICAgcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgd3JpdGVfaW50LCAmdHJhbnNsYXRlKTsKKwlwcm9jX2NyZWF0ZSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCAwLCBOVUxMLCAmcmF5X2NzX3Byb2NfZm9wcyk7CisJcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvZXNzaWQiLCB3cml0ZV9lc3NpZCwgTlVMTCk7CisJcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCB3cml0ZV9pbnQsICZuZXRfdHlwZSk7CisJcmF5Y3Nfd3JpdGUoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgd3JpdGVfaW50LCAmdHJhbnNsYXRlKTsKICNlbmRpZgotICAgIGlmICh0cmFuc2xhdGUgIT0gMCkgdHJhbnNsYXRlID0gMTsKLSAgICByZXR1cm4gMDsKKwlpZiAodHJhbnNsYXRlICE9IDApCisJCXRyYW5zbGF0ZSA9IDE7CisJcmV0dXJuIDA7CiB9IC8qIGluaXRfcmF5X2NzICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmF5X2NzKHZvaWQpCiB7Ci0gICAgREVCVUcoMCwgInJheV9jczogY2xlYW51cF9tb2R1bGVcbiIpOworCURFQlVHKDAsICJyYXlfY3M6IGNsZWFudXBfbW9kdWxlXG4iKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvZXNzaWQiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvZXNzaWQiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CiAjZW5kaWYKIAotICAgIHBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKIH0gLyogZXhpdF9yYXlfY3MgKi8KIAogbW9kdWxlX2luaXQoaW5pdF9yYXlfY3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCmluZGV4IGVkOTNhYzQuLmRiOTFkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKQEAgLTkwLDQ0ICs5MCw0NCBAQAogCiAKIC8qIHZhcmlvdXMgUk5ESVMgT0lEIGRlZnMgKi8KLSNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVECQkJY2NwdTIoMHgwMDAxMDEwNykKLSNkZWZpbmUgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSCQljY3B1MigweDAwMDEwMjFiKQorI2RlZmluZSBPSURfR0VOX0xJTktfU1BFRUQJCQljcHVfdG9fbGUzMigweDAwMDEwMTA3KQorI2RlZmluZSBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVIJCWNwdV90b19sZTMyKDB4MDAwMTAyMWIpCiAKLSNkZWZpbmUgT0lEX0dFTl9YTUlUX09LCQkJCWNjcHUyKDB4MDAwMjAxMDEpCi0jZGVmaW5lIE9JRF9HRU5fUkNWX09LCQkJCWNjcHUyKDB4MDAwMjAxMDIpCi0jZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUgkJCWNjcHUyKDB4MDAwMjAxMDMpCi0jZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SCQkJY2NwdTIoMHgwMDAyMDEwNCkKLSNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCQkJY2NwdTIoMHgwMDAyMDEwNSkKKyNkZWZpbmUgT0lEX0dFTl9YTUlUX09LCQkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDEpCisjZGVmaW5lIE9JRF9HRU5fUkNWX09LCQkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDIpCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDMpCisjZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwNCkKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwNSkKIAotI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJCWNjcHUyKDB4MDEwMTAxMDEpCi0jZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MJCWNjcHUyKDB4MDEwMTAxMDIpCi0jZGVmaW5lIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVAkJY2NwdTIoMHgwMTAxMDEwMykKLSNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFCQljY3B1MigweDAxMDEwMTA0KQorI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJCWNwdV90b19sZTMyKDB4MDEwMTAxMDEpCisjZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MJCWNwdV90b19sZTMyKDB4MDEwMTAxMDIpCisjZGVmaW5lIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVAkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMykKKyNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFCQljcHVfdG9fbGUzMigweDAxMDEwMTA0KQogCi0jZGVmaW5lIE9JRF84MDJfMTFfQlNTSUQJCQljY3B1MigweDBkMDEwMTAxKQotI2RlZmluZSBPSURfODAyXzExX1NTSUQJCQkJY2NwdTIoMHgwZDAxMDEwMikKLSNkZWZpbmUgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFCQljY3B1MigweDBkMDEwMTA4KQotI2RlZmluZSBPSURfODAyXzExX0FERF9XRVAJCQljY3B1MigweDBkMDEwMTEzKQotI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9XRVAJCQljY3B1MigweDBkMDEwMTE0KQotI2RlZmluZSBPSURfODAyXzExX0RJU0FTU09DSUFURQkJCWNjcHUyKDB4MGQwMTAxMTUpCi0jZGVmaW5lIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQkJY2NwdTIoMHgwZDAxMDExOCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgkJY2NwdTIoMHgwZDAxMDExOSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4JCWNjcHUyKDB4MGQwMTAxMWEpCi0jZGVmaW5lIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCWNjcHUyKDB4MGQwMTAxMWIpCi0jZGVmaW5lIE9JRF84MDJfMTFfQUREX0tFWQkJCWNjcHUyKDB4MGQwMTAxMWQpCi0jZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX0tFWQkJCWNjcHUyKDB4MGQwMTAxMWUpCi0jZGVmaW5lIE9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04JY2NwdTIoMHgwZDAxMDExZikKLSNkZWZpbmUgT0lEXzgwMl8xMV9QTUtJRAkJCWNjcHUyKDB4MGQwMTAxMjMpCi0jZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQJY2NwdTIoMHgwZDAxMDIwMykKLSNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCQljY3B1MigweDBkMDEwMjA0KQotI2RlZmluZSBPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQljY3B1MigweDBkMDEwMjA1KQotI2RlZmluZSBPSURfODAyXzExX1JTU0kJCQkJY2NwdTIoMHgwZDAxMDIwNikKLSNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIJCQljY3B1MigweDBkMDEwMjA3KQotI2RlZmluZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECWNjcHUyKDB4MGQwMTAyMDkpCi0jZGVmaW5lIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAkJY2NwdTIoMHgwZDAxMDIwYSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMJCWNjcHUyKDB4MGQwMTAyMGUpCi0jZGVmaW5lIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTgkJY2NwdTIoMHgwZDAxMDIxMSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUCQkJY2NwdTIoMHgwZDAxMDIxNykKKyNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMDEpCisjZGVmaW5lIE9JRF84MDJfMTFfU1NJRAkJCQljcHVfdG9fbGUzMigweDBkMDEwMTAyKQorI2RlZmluZSBPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUJCWNwdV90b19sZTMyKDB4MGQwMTAxMDgpCisjZGVmaW5lIE9JRF84MDJfMTFfQUREX1dFUAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMTMpCisjZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMTQpCisjZGVmaW5lIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExNSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCQljcHVfdG9fbGUzMigweDBkMDEwMTE4KQorI2RlZmluZSBPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQljcHVfdG9fbGUzMigweDBkMDEwMTE5KQorI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJY3B1X3RvX2xlMzIoMHgwZDAxMDExYSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJY3B1X3RvX2xlMzIoMHgwZDAxMDExYikKKyNkZWZpbmUgT0lEXzgwMl8xMV9BRERfS0VZCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExZCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExZSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgljcHVfdG9fbGUzMigweDBkMDEwMTFmKQorI2RlZmluZSBPSURfODAyXzExX1BNS0lECQkJY3B1X3RvX2xlMzIoMHgwZDAxMDEyMykKKyNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRAljcHVfdG9fbGUzMigweDBkMDEwMjAzKQorI2RlZmluZSBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UJCWNwdV90b19sZTMyKDB4MGQwMTAyMDQpCisjZGVmaW5lIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwJCWNwdV90b19sZTMyKDB4MGQwMTAyMDUpCisjZGVmaW5lIE9JRF84MDJfMTFfUlNTSQkJCQljcHVfdG9fbGUzMigweDBkMDEwMjA2KQorI2RlZmluZSBPSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCWNwdV90b19sZTMyKDB4MGQwMTAyMDcpCisjZGVmaW5lIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQJY3B1X3RvX2xlMzIoMHgwZDAxMDIwOSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xECQljcHVfdG9fbGUzMigweDBkMDEwMjBhKQorI2RlZmluZSBPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUwkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwZSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OCQljcHVfdG9fbGUzMigweDBkMDEwMjExKQorI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1QJCQljcHVfdG9fbGUzMigweDBkMDEwMjE3KQogCiAKIC8qIFR5cGljYWwgbm9pc2UvbWF4aW11bSBzaWduYWwgbGV2ZWwgdmFsdWVzIHRha2VuIGZyb20gbmRpc3dyYXBwZXIgaXdfbmRpcy5oICovCkBAIC0xNDQsOCArMTQ0LDggQEAKIAogCiAvKiBjb2RlcyBmb3IgInN0YXR1cyIgZmllbGQgb2YgY29tcGxldGlvbiBtZXNzYWdlcyAqLwotI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfUkVBRFkJCWNjcHUyKDB4YzAwMTAwMTEpCi0jZGVmaW5lIFJORElTX1NUQVRVU19BREFQVEVSX05PVF9PUEVOCQljY3B1MigweGMwMDEwMDEyKQorI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfUkVBRFkJCWNwdV90b19sZTMyKDB4YzAwMTAwMTEpCisjZGVmaW5lIFJORElTX1NUQVRVU19BREFQVEVSX05PVF9PUEVOCQljcHVfdG9fbGUzMigweGMwMDEwMDEyKQogCiAKIC8qIE5ESVMgZGF0YSBzdHJ1Y3R1cmVzLiBUYWtlbiBmcm9tIHdwYV9zdXBwbGljYW50IGRyaXZlcl9uZGlzLmMKQEAgLTM2OSw5ICszNjksNiBAQAogfTsKIAogCi1zdGF0aWMgY29uc3QgaW50IGZyZXFfY2hhbltdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogc3RhdGljIGNvbnN0IGludCByYXRlc184MDIxMWdbOF0gPSB7IDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQgfTsKIAogc3RhdGljIGNvbnN0IGludCBiY200MzIwX3Bvd2VyX291dHB1dFs0XSA9IHsgMjUsIDUwLCA3NSwgMTAwIH07CkBAIC00NDUsNyArNDQyLDcgQEAKIAogCW1lbXNldCh1LmdldCwgMCwgc2l6ZW9mICp1LmdldCk7CiAJdS5nZXQtPm1zZ190eXBlID0gUk5ESVNfTVNHX1FVRVJZOwotCXUuZ2V0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmdldCk7CisJdS5nZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuZ2V0KTsKIAl1LmdldC0+b2lkID0gb2lkOwogCiAJcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBidWZsZW4pOwpAQCAtNDk0LDggKzQ5MSw4IEBACiAJdS5zZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoKnUuc2V0KSArIGxlbik7CiAJdS5zZXQtPm9pZCA9IG9pZDsKIAl1LnNldC0+bGVuID0gY3B1X3RvX2xlMzIobGVuKTsKLQl1LnNldC0+b2Zmc2V0ID0gY2NwdTIoc2l6ZW9mKCp1LnNldCkgLSA4KTsKLQl1LnNldC0+aGFuZGxlID0gY2NwdTIoMCk7CisJdS5zZXQtPm9mZnNldCA9IGNwdV90b19sZTMyKHNpemVvZigqdS5zZXQpIC0gOCk7CisJdS5zZXQtPmhhbmRsZSA9IGNwdV90b19sZTMyKDApOwogCW1lbWNweSh1LmJ1ZiArIHNpemVvZigqdS5zZXQpLCBkYXRhLCBsZW4pOwogCiAJcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBidWZsZW4pOwpAQCAtNjQwLDggKzYzNyw4IEBACiBzdGF0aWMgaW50IGZyZXFfdG9fZHNjb25maWcoc3RydWN0IGl3X2ZyZXEgKmZyZXEsIHVuc2lnbmVkIGludCAqZHNjb25maWcpCiB7CiAJaWYgKGZyZXEtPm0gPCAxMDAwICYmIGZyZXEtPmUgPT0gMCkgewotCQlpZiAoZnJlcS0+bSA+PSAxICYmIGZyZXEtPm0gPD0gQVJSQVlfU0laRShmcmVxX2NoYW4pKQotCQkJKmRzY29uZmlnID0gZnJlcV9jaGFuW2ZyZXEtPm0gLSAxXSAqIDEwMDA7CisJCWlmIChmcmVxLT5tID49IDEgJiYgZnJlcS0+bSA8PSAxNCkKKwkJCSpkc2NvbmZpZyA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShmcmVxLT5tKSAqIDEwMDA7CiAJCWVsc2UKIAkJCXJldHVybiAtMTsKIAl9IGVsc2UgewpAQCAtMTE3OCwxMSArMTE3NSwxMSBAQAogCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDExICogMTAwMCAqIDEwMDAgLyAyOwogCX0KIAotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGZyZXFfY2hhbik7CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IDE0OwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnJlcV9jaGFuKSAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAoaSA8IDE0KSAmJiAoaSA8IElXX01BWF9GUkVRVUVOQ0lFUyk7IGkrKykgewogCQlyYW5nZS0+ZnJlcVtpXS5pID0gaSArIDE7Ci0JCXJhbmdlLT5mcmVxW2ldLm0gPSBmcmVxX2NoYW5baV0gKiAxMDAwMDA7CisJCXJhbmdlLT5mcmVxW2ldLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoaSArIDEpICogMTAwMDAwOwogCQlyYW5nZS0+ZnJlcVtpXS5lID0gMTsKIAl9CiAJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBpOwpAQCAtMTYzMyw3ICsxNjMwLDcgQEAKIAlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV1NDQU4iKTsKIAogCWlmICh3cnF1LT5kYXRhLmZsYWdzID09IDApIHsKLQkJdG1wID0gY2NwdTIoMSk7CisJCXRtcCA9IGNwdV90b19sZTMyKDEpOwogCQlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKIAkJZXZ0LmRhdGEuZmxhZ3MgPSAwOwpAQCAtMjQzMSw3ICsyNDI4LDcgQEAKIAkJLyogU2VuZCBzY2FuIE9JRC4gVXNlIG9mIGJvdGggT0lEcyBpcyByZXF1aXJlZCB0byBnZXQgZGV2aWNlCiAJCSAqIHdvcmtpbmcuCiAJCSAqLwotCQl0bXAgPSBjY3B1MigxKTsKKwkJdG1wID0gY3B1X3RvX2xlMzIoMSk7CiAJCXJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwogCkBAIC0yNTI3LDYgKzI1MjQsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogc2FtZSBhcyBybmRpc19uZXRkZXZfb3BzIGJ1dCB3aXRoIGxvY2FsIG11bHRpY2FzdCBoYW5kbGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJuZGlzX3dleHRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcm5kaXNfd2V4dF9zZXRfbXVsdGljYXN0X2xpc3QsCit9OworCiAKIHN0YXRpYyBpbnQgcm5kaXNfd2V4dF9iaW5kKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CkBAIC0yNTYyLDcgKzI1NzAsOCBAQAogCSAqIHJuZGlzX2hvc3Qgd2FudHMgdG8gYXZvaWQgYWxsIE9JRCBhcyBtdWNoIGFzIHBvc3NpYmxlCiAJICogc28gZG8gcHJvbWlzYy9tdWx0aWNhc3QgaGFuZGxpbmcgaW4gcm5kaXNfd2V4dC4KIAkgKi8KLQl1c2JkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gcm5kaXNfd2V4dF9zZXRfbXVsdGljYXN0X2xpc3Q7CisJdXNiZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmcm5kaXNfd2V4dF9uZXRkZXZfb3BzOworCiAJdG1wID0gUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgfCBSTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1Q7CiAJcmV0dmFsID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCmluZGV4IDE3OGIzMTMuLmJmYzVkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCkBAIC05NywxMCArOTcsMTEgQEAKIAogY29uZmlnIFJUMlgwMF9MSUJfUkZLSUxMCiAJYm9vbGVhbgotCWRlZmF1bHQgeSBpZiAoUlQyWDAwX0xJQj15ICYmIFJGS0lMTD15KSB8fCAoUlQyWDAwX0xJQj1tICYmIFJGS0lMTCE9bikKKwlkZWZhdWx0IHkgaWYgKFJUMlgwMF9MSUI9eSAmJiBJTlBVVD15KSB8fCAoUlQyWDAwX0xJQj1tICYmIElOUFVUIT1uKQorCXNlbGVjdCBJTlBVVF9QT0xMREVWCiAKLWNvbW1lbnQgInJ0MngwMCByZmtpbGwgc3VwcG9ydCBkaXNhYmxlZCBkdWUgdG8gbW9kdWxhcml6ZWQgUkZLSUxMIGFuZCBidWlsdC1pbiBydDJ4MDAiCi0JZGVwZW5kcyBvbiBSVDJYMDBfTElCPXkgJiYgUkZLSUxMPW0KK2NvbW1lbnQgInJ0MngwMCByZmtpbGwgc3VwcG9ydCBkaXNhYmxlZCBkdWUgdG8gbW9kdWxhcml6ZWQgSU5QVVQgYW5kIGJ1aWx0LWluIHJ0MngwMCIKKwlkZXBlbmRzIG9uIFJUMlgwMF9MSUI9eSAmJiBJTlBVVD1tCiAKIGNvbmZpZyBSVDJYMDBfTElCX0xFRFMKIAlib29sZWFuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKaW5kZXggOTE3Y2I0Zi4uZjIyZDgwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKIHJ0MngwMGxpYi15CQkJCSs9IHJ0MngwMG1hYy5vCiBydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBjb25maWcubwogcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwcXVldWUubworcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwbGluay5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTKQkrPSBydDJ4MDBkZWJ1Zy5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8pCSs9IHJ0MngwMGNyeXB0by5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwpCSs9IHJ0MngwMHJma2lsbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKaW5kZXggNmE5Nzc2Ny4uMGYwODc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTExNCw5ICsxMTQsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC01MjQsNiArNTIxLDMyIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTIsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IyMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIChsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMjApICogMTYpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisJfQorCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTUzNyw2ICs1NjAsOCBAQAogCQlydDI0MDBwY2lfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQyNDAwcGNpX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQyNDAwcGNpX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX2N3KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC01NzIsMzUgKzU5NywzNyBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IGJicDsKIH0KIAotc3RhdGljIHZvaWQgcnQyNDAwcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyNDAwcGNpX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIHU4IHZnY19sZXZlbCkKIHsKLQlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsIDB4MDgpOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDA4OworCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgdmdjX2xldmVsKTsKKwlxdWFsLT52Z2NfbGV2ZWwgPSB2Z2NfbGV2ZWw7CisJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKIH0KIAotc3RhdGljIHZvaWQgcnQyNDAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQl1OCByZWc7CisJcnQyNDAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDA4KTsKK30KIAorc3RhdGljIHZvaWQgcnQyNDAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCS8qCiAJICogVGhlIGxpbmsgdHVuZXIgc2hvdWxkIG5vdCBydW4gbG9uZ2VyIHRoZW4gNjAgc2Vjb25kcywKIAkgKiBhbmQgc2hvdWxkIHJ1biBvbmNlIGV2ZXJ5IDIgc2Vjb25kcy4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ID4gNjAgfHwgIShydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKSkKKwlpZiAoY291bnQgPiA2MCB8fCAhKGNvdW50ICYgMSkpCiAJCXJldHVybjsKIAogCS8qCiAJICogQmFzZSByMTMgbGluayB0dW5pbmcgb24gdGhlIGZhbHNlIGNjYSBjb3VudC4KIAkgKi8KLQlydDI0MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxMywgJnJlZyk7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHJlZyA8IDB4MjApIHsKLQkJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCArK3JlZyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByZWc7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcmVnID4gMHgwOCkgewotCQlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsIC0tcmVnKTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHJlZzsKLQl9CisJaWYgKChxdWFsLT5mYWxzZV9jY2EgPiA1MTIpICYmIChxdWFsLT52Z2NfbGV2ZWwgPCAweDIwKSkKKwkJcnQyNDAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCArK3F1YWwtPnZnY19sZXZlbCk7CisJZWxzZSBpZiAoKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCkgJiYgKHF1YWwtPnZnY19sZXZlbCA+IDB4MDgpKQorCQlydDI0MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIC0tcXVhbC0+dmdjX2xldmVsKTsKIH0KIAogLyoKQEAgLTkwNCwyMSArOTMxLDEwIEBACiAKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyIHJlZzsKLQorCS8qCisJICogRGlzYWJsZSBwb3dlcgorCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUkNTUjAsIDApOwotCi0JLyoKLQkgKiBEaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0KLQkvKgotCSAqIENhbmNlbCBSWCBhbmQgVFguCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBydDI0MDBwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC0xMTE1LDYgKzExMzEsMjAgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKQoreworCXUzMiByZWc7CisKKwlpZiAocWlkID09IFFJRF9CRUFDT04pIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOworCX0gZWxzZSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKKwl9Cit9CisKIC8qCiAgKiBSWCBjb250cm9sIGhhbmRsZXJzCiAgKi8KQEAgLTEzNjUsNyArMTM5NSw5IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CiAKIAlydDI0MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sIExFRF9UWVBFX1JBRElPKTsKLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9ERUZBVUxUIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0FTVVMpCiAJCXJ0MjQwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAogCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCkBAIC0xNDE5LDcgKzE0NTEsOSBAQAogCSAqIEluaXRpYWxpemUgYWxsIGh3IGZpZWxkcy4KIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0xNTcyLDYgKzE2MDYsNyBAQAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNDAwcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNDAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjQwMHBjaV9jb25maWdfZmlsdGVyLAogCS5jb25maWdfaW50ZgkJPSBydDI0MDBwY2lfY29uZmlnX2ludGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKaW5kZXggOWFlZmRhNC4uZWMzYjAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ4LDggKzQ4LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwMjAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMGMKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggZDNiYzIxOC4uMjc2YTgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTExNCw5ICsxMTQsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC01NzMsNiArNTcwLDMyIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTIsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IyMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIChsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMjApICogMTYpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMjAsIHJlZyk7CisJfQorCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTU4OCw2ICs2MTEsOCBAQAogCQlydDI1MDBwY2lfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQyNTAwcGNpX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQyNTAwcGNpX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtNjExLDI5ICs2MzYsMzMgQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDTlQzX0ZBTFNFX0NDQSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0MjUwMHBjaV9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDQ4KTsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMHg0ODsKKwlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2Z2NfbGV2ZWwpOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQyNTAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NDgpOworfQogCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpCit7CiAJLyoKIAkgKiBUbyBwcmV2ZW50IGNvbGxpc2lvbnMgd2l0aCBNQUMgQVNJQyBvbiBjaGlwc2V0cwogCSAqIHVwIHRvIHZlcnNpb24gQyB0aGUgbGluayB0dW5pbmcgc2hvdWxkIGhhbHQgYWZ0ZXIgMjAKIAkgKiBzZWNvbmRzIHdoaWxlIGJlaW5nIGFzc29jaWF0ZWQuCiAJICovCiAJaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EICYmCi0JICAgIHJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkICYmCi0JICAgIHJ0MngwMGRldi0+bGluay5jb3VudCA+IDIwKQorCSAgICBydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCAmJiBjb3VudCA+IDIwKQogCQlyZXR1cm47CiAKLQlydDI1MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIENoaXBzZXQgdmVyc2lvbnMgQyBhbmQgbG93ZXIgc2hvdWxkIGRpcmVjdGx5IGNvbnRpbnVlCiAJICogdG8gdGhlIGR5bmFtaWMgQ0NBIHR1bmluZy4gQ2hpcHNldCB2ZXJzaW9uIEQgYW5kIGhpZ2hlcgpAQCAtNjQ5LDI5ICs2NzgsMjUgQEAKIAkgKiB0aGVuIGNvcnJ1cHQgdGhlIFIxNyB0dW5pbmcuIFRvIHJlbWlkeSB0aGlzIHRoZSB0dW5pbmcgc2hvdWxkCiAJICogYmUgc3RvcHBlZCAoV2hpbGUgbWFraW5nIHN1cmUgdGhlIFIxNyB2YWx1ZSB3aWxsIG5vdCBleGNlZWQgbGltaXRzKQogCSAqLwotCWlmIChyc3NpIDwgLTgwICYmIHJ0MngwMGRldi0+bGluay5jb3VudCA+IDIwKSB7Ci0JCWlmIChyMTcgPj0gMHg0MSkgewotCQkJcjE3ID0gcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbDsKLQkJCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQkJfQorCWlmIChxdWFsLT5yc3NpIDwgLTgwICYmIGNvdW50ID4gMjApIHsKKwkJaWYgKHF1YWwtPnZnY19sZXZlbF9yZWcgPj0gMHg0MSkKKwkJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgcXVhbC0+dmdjX2xldmVsKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IDB4NTApCi0JCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NTApOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlpZiAocjE3ICE9IDB4NDEpCi0JCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NDEpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4NDEpOwogCQlyZXR1cm47CiAJfQogCkBAIC02NzksOCArNzA0LDggQEAKIAkgKiBMZWF2ZSBzaG9ydCBvciBtaWRkbGUgZGlzdGFuY2UgY29uZGl0aW9uLCByZXN0b3JlIHIxNwogCSAqIHRvIHRoZSBkeW5hbWljIHR1bmluZyByYW5nZS4KIAkgKi8KLQlpZiAocjE3ID49IDB4NDEpIHsKLQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsKTsKKwlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyA+PSAweDQxKSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgcXVhbC0+dmdjX2xldmVsKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjkwLDEyICs3MTUsMTIgQEAKIAkgKiBSMTcgaXMgaW5zaWRlIHRoZSBkeW5hbWljIHR1bmluZyByYW5nZSwKIAkgKiBzdGFydCB0dW5pbmcgdGhlIGxpbmsgYmFzZWQgb24gdGhlIGZhbHNlIGNjYSBjb3VudGVyLgogCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcjE3IDwgMHg0MCkgewotCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsICsrcjE3KTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHIxNzsKLQl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA8IDEwMCAmJiByMTcgPiAweDMyKSB7Ci0JCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgLS1yMTcpOwotCQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gcjE3OworCWlmIChxdWFsLT5mYWxzZV9jY2EgPiA1MTIgJiYgcXVhbC0+dmdjX2xldmVsX3JlZyA8IDB4NDApIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCArK3F1YWwtPnZnY19sZXZlbF9yZWcpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSBxdWFsLT52Z2NfbGV2ZWxfcmVnOworCX0gZWxzZSBpZiAocXVhbC0+ZmFsc2VfY2NhIDwgMTAwICYmIHF1YWwtPnZnY19sZXZlbF9yZWcgPiAweDMyKSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgLS1xdWFsLT52Z2NfbGV2ZWxfcmVnKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gcXVhbC0+dmdjX2xldmVsX3JlZzsKIAl9CiB9CiAKQEAgLTEwNjUsMjEgKzEwOTAsMTAgQEAKIAogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQl1MzIgcmVnOwotCisJLyoKKwkgKiBEaXNhYmxlIHBvd2VyCisJICovCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSQ1NSMCwgMCk7Ci0KLQkvKgotCSAqIERpc2FibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKLQotCS8qCi0JICogQ2FuY2VsIFJYIGFuZCBUWC4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHJ0MjUwMHBjaV9zZXRfc3RhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTEyMDUsNyArMTIxOSw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9DSVBIRVJfT1dORVIsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1JFVFJZX01PREUsCkBAIC0xMjc1LDYgKzEyODksMjAgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKQoreworCXUzMiByZWc7CisKKwlpZiAocWlkID09IFFJRF9CRUFDT04pIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOworCX0gZWxzZSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKKwl9Cit9CisKIC8qCiAgKiBSWCBjb250cm9sIGhhbmRsZXJzCiAgKi8KQEAgLTE1MjQsNyArMTU1Miw5IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CiAKIAlydDI1MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sIExFRF9UWVBFX1JBRElPKTsKLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9ERUZBVUxUIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0FTVVMpCiAJCXJ0MjUwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAogCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCkBAIC0xNzIxLDcgKzE3NTEsOSBAQAogCSAqIEluaXRpYWxpemUgYWxsIGh3IGZpZWxkcy4KIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKIApAQCAtMTg3Myw2ICsxOTA1LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNTAwcGNpX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyNTAwcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjUwMHBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX2ZpbHRlcgkJPSBydDI1MDBwY2lfY29uZmlnX2ZpbHRlciwKIAkuY29uZmlnX2ludGYJCT0gcnQyNTAwcGNpX2NvbmZpZ19pbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCmluZGV4IGUxMzUyNDcuLmNlMmYwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01OSw4ICs1OSw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMjAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDQwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IDNlMmFjMmIuLjllNjMwZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yMDQsOSArMjA0LDYgQEAKIHsKIAl1MTYgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtMjgwLDYgKzI3NywxOCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKK3N0YXRpYyBpbnQgcnQyNTAwdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdTE2IHJlZzsKKworCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjE5LCAmcmVnKTsKKwlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjE5X0JJVDcpOworfQorI2Vsc2UKKyNkZWZpbmUgcnQyNTAwdXNiX3Jma2lsbF9wb2xsCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KKwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKIHN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKQEAgLTYzNCw2ICs2NDMsMzIgQEAKIAlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE4LCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MTYgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjE4LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9ERUxBWV9BRlRFUl9CRUFDT04sCisJCQkJICAgbGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDIwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9CRUFDT05TX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjE4X0FVVE9fV0FLRSwgMCk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxOCwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjE4X0FVVE9fV0FLRSwgMSk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxOCwgcmVnKTsKKwl9CisKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtNjQ3LDYgKzY4Miw4IEBACiAJCQkJCSBsaWJjb25mLT5jb25mLT5wb3dlcl9sZXZlbCk7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQyNTAwdXNiX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQyNTAwdXNiX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtNjcwLDcgKzcwNyw4IEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gcnQyeDAwX2dldF9maWVsZDE2KHJlZywgU1RBX0NTUjNfRkFMU0VfQ0NBX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQgcnQyNTAwdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7CiAJdTE2IGVlcHJvbTsKIAl1MTYgdmFsdWU7CkBAIC02OTEsNyArNzI5LDcgQEAKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9CQlBUVU5FX1ZHQ1VQUEVSKTsKIAlydDI1MDB1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZhbHVlKTsKIAotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSB2YWx1ZTsKKwlxdWFsLT52Z2NfbGV2ZWwgPSB2YWx1ZTsKIH0KIAogLyoKQEAgLTExNzYsNyArMTIxNCw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9ORVdfU0VRLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwpAQCAtMTU2MiwxMiArMTYwMCwyMiBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCiAJcnQyNTAwdXNiX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7Ci0JaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfREVGQVVMVCB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9BU1VTKQogCQlydDI1MDB1c2JfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKIAkJCQkgICBMRURfVFlQRV9BQ1RJVklUWSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwogCiAJLyoKKwkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCisJICovCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKKwkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCisJLyoKIAkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZGlzYWJsZWQuCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7CkBAIC0xNzUyLDcgKzE4MDAsOSBAQAogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CiAJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCSAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7CiAKQEAgLTE4MzksNyArMTg4OSw3IEBACiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KSB7CiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJX19zZXRfYml0KENPTkZJR19DUllQVE9fQ09QWV9JViwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCX0KIAlfX3NldF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKIApAQCAtMTg3Myw2ICsxOTIzLDcgQEAKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl91bmluaXRpYWxpemUsCiAJLmNsZWFyX2VudHJ5CQk9IHJ0MngwMHVzYl9jbGVhcl9lbnRyeSwKIAkuc2V0X2RldmljZV9zdGF0ZQk9IHJ0MjUwMHVzYl9zZXRfZGV2aWNlX3N0YXRlLAorCS5yZmtpbGxfcG9sbAkJPSBydDI1MDB1c2JfcmZraWxsX3BvbGwsCiAJLmxpbmtfc3RhdHMJCT0gcnQyNTAwdXNiX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjUwMHVzYl9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI1MDB1c2JfbGlua190dW5lciwKQEAgLTE4ODEsNiArMTkzMiw3IEBACiAJLndyaXRlX2JlYWNvbgkJPSBydDI1MDB1c2Jfd3JpdGVfYmVhY29uLAogCS5nZXRfdHhfZGF0YV9sZW4JPSBydDI1MDB1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjUwMHVzYl9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI1MDB1c2JfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQyNTAwdXNiX2NvbmZpZ19rZXksCiAJLmNvbmZpZ19wYWlyd2lzZV9rZXkJPSBydDI1MDB1c2JfY29uZmlnX2tleSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaAppbmRleCA0MzQ3ZGZkLi41YmM0NmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTksOCArNTksOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDA2YQogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA2MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KQEAgLTE4OSw2ICsxODksMTQgQEAKICAqIE1BQ19DU1IxOTogR1BJTyBjb250cm9sIHJlZ2lzdGVyLgogICovCiAjZGVmaW5lIE1BQ19DU1IxOQkJCTB4MDQyNgorI2RlZmluZSBNQUNfQ1NSMTlfQklUMAkJCUZJRUxEMzIoMHgwMDAxKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUMQkJCUZJRUxEMzIoMHgwMDAyKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUMgkJCUZJRUxEMzIoMHgwMDA0KQorI2RlZmluZSBNQUNfQ1NSMTlfQklUMwkJCUZJRUxEMzIoMHgwMDA4KQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNAkJCUZJRUxEMzIoMHgwMDEwKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNQkJCUZJRUxEMzIoMHgwMDIwKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNgkJCUZJRUxEMzIoMHgwMDQwKQorI2RlZmluZSBNQUNfQ1NSMTlfQklUNwkJCUZJRUxEMzIoMHgwMDgwKQogCiAvKgogICogTUFDX0NTUjIwOiBMRUQgY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCAzOWVjZjNiLi44NGJkNmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQtcG9sbGRldi5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKQEAgLTQ0LDcgKzQ1LDcgQEAKIC8qCiAgKiBNb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMi4zIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4zLjAiCiAjZGVmaW5lIERSVl9QUk9KRUNUCSJodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20iCiAKIC8qCkBAIC0xNzcsNTIgKzE3OCw0MSBAQAogICovCiBzdHJ1Y3QgbGlua19xdWFsIHsKIAkvKgotCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIExpbmsgdHVuaW5nLgotCSAqIEZvciB0aGUgYXZlcmFnZSBSU1NJIHZhbHVlIHdlIHVzZSB0aGUgIldhbGtpbmcgYXZlcmFnZSIgYXBwcm9hY2guCi0JICogV2hlbiBhZGRpbmcgUlNTSSB0byB0aGUgYXZlcmFnZSB2YWx1ZSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uCi0JICogaXMgbmVlZGVkOgotCSAqCi0JICogICAgICAgIGF2Z19yc3NpID0gKChhdmdfcnNzaSAqIDcpICsgcnNzaSkgLyA4OwotCSAqCi0JICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2Ugb25seSBuZWVkIDEgdmFyaWFibGUKLQkgKiB0byBzdG9yZSB0aGUgYXZlcmFnZSBpbiAoTm8gbmVlZCBmb3IgYSBjb3VudCBhbmQgYSB0b3RhbCkuCi0JICogQnV0IG1vcmUgaW1wb3J0YW50bHksIG5vcm1hbCBhdmVyYWdlIHZhbHVlcyB3aWxsIG92ZXIgdGltZQotCSAqIG1vdmUgbGVzcyBhbmQgbGVzcyB0b3dhcmRzIG5ld2x5IGFkZGVkIHZhbHVlcyB0aGlzIHJlc3VsdHMKLQkgKiB0aGF0IHdpdGggbGluayB0dW5pbmcsIHRoZSBkZXZpY2UgY2FuIGhhdmUgYSB2ZXJ5IGdvb2QgUlNTSQotCSAqIGZvciBhIGZldyBtaW51dGVzIGJ1dCB3aGVuIHRoZSBkZXZpY2UgaXMgbW92ZWQgYXdheSBmcm9tIHRoZSBBUAotCSAqIHRoZSBhdmVyYWdlIHdpbGwgbm90IGRlY3JlYXNlIGZhc3QgZW5vdWdoIHRvIGNvbXBlbnNhdGUuCi0JICogVGhlIHdhbGtpbmcgYXZlcmFnZSBjb21wZW5zYXRlcyB0aGlzIGFuZCB3aWxsIG1vdmUgdG93YXJkcwotCSAqIHRoZSBuZXcgdmFsdWVzIGNvcnJlY3RseSBhbGxvd2luZyBhIGVmZmVjdGl2ZSBsaW5rIHR1bmluZy4KKwkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBMaW5rIHR1bmluZyBieSBkcml2ZXIKKwkgKiBUaGUgcnNzaSB2YWx1ZSBpcyBwcm92aWRlZCBieSBydDJ4MDBsaWIgZHVyaW5nIHRoZQorCSAqIGxpbmtfdHVuZXIoKSBjYWxsYmFjayBmdW5jdGlvbi4KKwkgKiBUaGUgZmFsc2VfY2NhIGZpZWxkIGlzIGZpbGxlZCBkdXJpbmcgdGhlIGxpbmtfc3RhdHMoKQorCSAqIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBjb3VsZCBiZSB1c2VkIGR1cmluZyB0aGUKKwkgKiBsaW5rX3R1bmVyKCkgY2FsbGJhY2sgZnVuY3Rpb24uCiAJICovCi0JaW50IGF2Z19yc3NpOworCWludCByc3NpOwogCWludCBmYWxzZV9jY2E7CiAKIAkvKgotCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIFNpZ25hbCBxdWFsaXR5IGNhbGN1bGF0aW9uLgotCSAqIEZvciBjYWxjdWxhdGluZyB0aGUgU2lnbmFsIHF1YWxpdHkgd2UgaGF2ZSB0byBkZXRlcm1pbmUKLQkgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHN1Y2Nlc3MgYW5kIGZhaWxlZCBSWCBhbmQgVFggZnJhbWVzLgotCSAqIEFmdGVyIHRoYXQgd2UgYWxzbyB1c2UgdGhlIGF2ZXJhZ2UgUlNTSSB2YWx1ZSB0byBoZWxwCi0JICogZGV0ZXJtaW5pbmcgdGhlIHNpZ25hbCBxdWFsaXR5LgotCSAqIEZvciB0aGUgY2FsY3VsYXRpb24gd2Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisJICogVkdDIGxldmVscworCSAqIEhhcmR3YXJlIGRyaXZlciB3aWxsIHR1bmUgdGhlIFZHQyBsZXZlbCBkdXJpbmcgZWFjaCBjYWxsCisJICogdG8gdGhlIGxpbmtfdHVuZXIoKSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyB2Z2NfbGV2ZWwgaXMKKwkgKiBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBsaW5rIHF1YWxpdHkgc3RhdGlzdGljcyBsaWtlCisJICogYXZlcmFnZSBSU1NJIGFuZCB0aGUgZmFsc2UgQ0NBIGNvdW50LgogCSAqCi0JICogICAgICAgICByc3NpX3BlcmNlbnRhZ2UgPSAoYXZnX3Jzc2kgKiAxMDApIC8gcnNzaV9vZmZzZXQKLQkgKiAgICAgICAgIHJ4X3BlcmNlbnRhZ2UgPSAocnhfc3VjY2VzcyAqIDEwMCkgLyByeF90b3RhbAotCSAqICAgICAgICAgdHhfcGVyY2VudGFnZSA9ICh0eF9zdWNjZXNzICogMTAwKSAvIHR4X3RvdGFsCi0JICogICAgICAgICBhdmdfc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIGF2Z19yc3NpKSArCi0JICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfVFggKiB0eF9wZXJjZW50YWdlKSArCi0JICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfUlggKiByeF9wZXJjZW50YWdlKSkgLyAxMDAKLQkgKgotCSAqIFRoaXMgdmFsdWUgc2hvdWxkIHRoZW4gYmUgY2hlY2tlZCB0byBub3QgYmUgZ3JlYXRlZCB0aGVuIDEwMC4KKwkgKiBJbiBzb21lIGNhc2VzIHRoZSBkcml2ZXJzIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuCisJICogdGhlIGN1cnJlbnRseSAiZGVzaXJlZCIgVkdDIGxldmVsIGFuZCB0aGUgbGV2ZWwgY29uZmlndXJlZAorCSAqIGluIHRoZSBoYXJkd2FyZS4gVGhlIGxhdHRlciBpcyBpbXBvcnRhbnQgdG8gcmVkdWNlIHRoZQorCSAqIG51bWJlciBvZiBCQlAgcmVnaXN0ZXIgcmVhZHMgdG8gcmVkdWNlIHJlZ2lzdGVyIGFjY2VzcworCSAqIG92ZXJoZWFkLiBGb3IgdGhpcyByZWFzb24gd2Ugc3RvcmUgYm90aCB2YWx1ZXMgaGVyZS4KIAkgKi8KLQlpbnQgcnhfcGVyY2VudGFnZTsKKwl1OCB2Z2NfbGV2ZWw7CisJdTggdmdjX2xldmVsX3JlZzsKKworCS8qCisJICogU3RhdGlzdGljcyByZXF1aXJlZCBmb3IgU2lnbmFsIHF1YWxpdHkgY2FsY3VsYXRpb24uCisJICogVGhlc2UgZmllbGRzIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaW5rX3N0YXRzKCkKKwkgKiBjYWxsYmFjayBmdW5jdGlvbi4KKwkgKi8KIAlpbnQgcnhfc3VjY2VzczsKIAlpbnQgcnhfZmFpbGVkOwotCWludCB0eF9wZXJjZW50YWdlOwogCWludCB0eF9zdWNjZXNzOwogCWludCB0eF9mYWlsZWQ7Ci0jZGVmaW5lIFdFSUdIVF9SU1NJCTIwCi0jZGVmaW5lIFdFSUdIVF9SWAk0MAotI2RlZmluZSBXRUlHSFRfVFgJNDAKIH07CiAKIC8qCkBAIC0yODYsOSArMjc2LDE2IEBACiAJc3RydWN0IGxpbmtfYW50IGFudDsKIAogCS8qCi0JICogQWN0aXZlIFZHQyBsZXZlbAorCSAqIEN1cnJlbnRseSBhY3RpdmUgYXZlcmFnZSBSU1NJIHZhbHVlCiAJICovCi0JaW50IHZnY19sZXZlbDsKKwlpbnQgYXZnX3Jzc2k7CisKKwkvKgorCSAqIEN1cnJlbnRseSBwcmVjYWxjdWxhdGVkIHBlcmNlbnRhZ2VzIG9mIHN1Y2Nlc3NmdWwKKwkgKiBUWCBhbmQgUlggZnJhbWVzLgorCSAqLworCWludCByeF9wZXJjZW50YWdlOworCWludCB0eF9wZXJjZW50YWdlOwogCiAJLyoKIAkgKiBXb3JrIHN0cnVjdHVyZSBmb3Igc2NoZWR1bGluZyBwZXJpb2RpYyBsaW5rIHR1bmluZy4KQEAgLTI5Nyw1NSArMjk0LDYgQEAKIH07CiAKIC8qCi0gKiBTbWFsbCBoZWxwZXIgbWFjcm8gdG8gd29yayB3aXRoIG1vdmluZy93YWxraW5nIGF2ZXJhZ2VzLgotICovCi0jZGVmaW5lIE1PVklOR19BVkVSQUdFKF9fYXZnLCBfX3ZhbCwgX19zYW1wbGVzKSBcCi0JKCAoKChfX2F2ZykgKiAoKF9fc2FtcGxlcykgLSAxKSkgKyAoX192YWwpKSAvIChfX3NhbXBsZXMpICkKLQotLyoKLSAqIFdoZW4gd2UgbGFjayBSU1NJIGluZm9ybWF0aW9uIHJldHVybiBzb21ldGhpbmcgbGVzcyB0aGVuIC04MCB0bwotICogdGVsbCB0aGUgZHJpdmVyIHRvIHR1bmUgdGhlIGRldmljZSB0byBtYXhpbXVtIHNlbnNpdGl2aXR5LgotICovCi0jZGVmaW5lIERFRkFVTFRfUlNTSQkoIC0xMjggKQotCi0vKgotICogTGluayBxdWFsaXR5IGFjY2VzcyBmdW5jdGlvbnMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9nZXRfbGlua19yc3NpKHN0cnVjdCBsaW5rICpsaW5rKQotewotCWlmIChsaW5rLT5xdWFsLmF2Z19yc3NpICYmIGxpbmstPnF1YWwucnhfc3VjY2VzcykKLQkJcmV0dXJuIGxpbmstPnF1YWwuYXZnX3Jzc2k7Ci0JcmV0dXJuIERFRkFVTFRfUlNTSTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpKHN0cnVjdCBsaW5rICpsaW5rKQotewotCWlmIChsaW5rLT5hbnQucnNzaV9hbnQgJiYgbGluay0+cXVhbC5yeF9zdWNjZXNzKQotCQlyZXR1cm4gbGluay0+YW50LnJzc2lfYW50OwotCXJldHVybiBERUZBVUxUX1JTU0k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBfcmVzZXRfbGlua19hbnRfcnNzaShzdHJ1Y3QgbGluayAqbGluaykKLXsKLQlsaW5rLT5hbnQucnNzaV9hbnQgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2lfaGlzdG9yeShzdHJ1Y3QgbGluayAqbGluaywKLQkJCQkJCSAgIGVudW0gYW50ZW5uYSBhbnQpCi17Ci0JaWYgKGxpbmstPmFudC5yc3NpX2hpc3RvcnlbYW50IC0gQU5URU5OQV9BXSkKLQkJcmV0dXJuIGxpbmstPmFudC5yc3NpX2hpc3RvcnlbYW50IC0gQU5URU5OQV9BXTsKLQlyZXR1cm4gREVGQVVMVF9SU1NJOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfdXBkYXRlX2FudF9yc3NpKHN0cnVjdCBsaW5rICpsaW5rLCBpbnQgcnNzaSkKLXsKLQlpbnQgb2xkX3Jzc2kgPSBsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2xpbmstPmFudC5hY3RpdmUucnggLSBBTlRFTk5BX0FdOwotCWxpbmstPmFudC5yc3NpX2hpc3RvcnlbbGluay0+YW50LmFjdGl2ZS5yeCAtIEFOVEVOTkFfQV0gPSByc3NpOwotCXJldHVybiBvbGRfcnNzaTsKLX0KLQotLyoKICAqIEludGVyZmFjZSBzdHJ1Y3R1cmUKICAqIFBlciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBkZXRhaWxzLCB0aGlzIHN0cnVjdHVyZQogICogaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgZm9yIGllZWU4MDIxMV92aWYuCkBAIC00NDgsNyArMzk2LDcgQEAKIAlpbnQgYWNrX3RpbWVvdXQ7CiAJaW50IGFja19jb25zdW1lX3RpbWU7CiAKLQl1NjQgYmFzaWNfcmF0ZXM7CisJdTMyIGJhc2ljX3JhdGVzOwogCiAJaW50IHNsb3RfdGltZTsKIApAQCAtNTIwLDkgKzQ2OCwxMCBAQAogCSAqLwogCWludCAoKnByb2JlX2h3KSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAJY2hhciAqKCpnZXRfZmlybXdhcmVfbmFtZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotCXUxNiAoKmdldF9maXJtd2FyZV9jcmMpIChjb25zdCB2b2lkICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKLQlpbnQgKCpsb2FkX2Zpcm13YXJlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCSAgICAgIGNvbnN0IHNpemVfdCBsZW4pOworCWludCAoKmNoZWNrX2Zpcm13YXJlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CisJaW50ICgqbG9hZF9maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CiAKIAkvKgogCSAqIERldmljZSBpbml0aWFsaXphdGlvbi9kZWluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgpAQCAtNTQ0LDggKzQ5MywxMCBAQAogCWludCAoKnJma2lsbF9wb2xsKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAJdm9pZCAoKmxpbmtfc3RhdHMpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOwotCXZvaWQgKCpyZXNldF90dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisJdm9pZCAoKnJlc2V0X3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCk7CisJdm9pZCAoKmxpbmtfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCk7CiAKIAkvKgogCSAqIFRYIGNvbnRyb2wgaGFuZGxlcnMKQEAgLTU1OCw2ICs1MDksOCBAQAogCWludCAoKmdldF90eF9kYXRhX2xlbikgKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogCXZvaWQgKCpraWNrX3R4X3F1ZXVlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKTsKKwl2b2lkICgqa2lsbF90eF9xdWV1ZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZSk7CiAKIAkvKgogCSAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKQEAgLTYyNSw3ICs1NzgsNiBAQAogCURFVklDRV9TVEFURV9SRUdJU1RFUkVEX0hXLAogCURFVklDRV9TVEFURV9JTklUSUFMSVpFRCwKIAlERVZJQ0VfU1RBVEVfU1RBUlRFRCwKLQlERVZJQ0VfU1RBVEVfU1RBUlRFRF9TVVNQRU5ELAogCURFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLAogCURFVklDRV9TVEFURV9ESVNBQkxFRF9SQURJT19IVywKIApAQCAtNjM3LDYgKzU4OSw3IEBACiAJRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwKIAlEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsCiAJRFJJVkVSX1JFUVVJUkVfRE1BLAorCURSSVZFUl9SRVFVSVJFX0NPUFlfSVYsCiAKIAkvKgogCSAqIERyaXZlciBmZWF0dXJlcwpAQCAtNjUzLDcgKzYwNiw2IEBACiAJQ09ORklHX0VYVEVSTkFMX0xOQV9CRywKIAlDT05GSUdfRE9VQkxFX0FOVEVOTkEsCiAJQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsCi0JQ09ORklHX0NSWVBUT19DT1BZX0lWLAogfTsKIAogLyoKQEAgLTY4OSw4ICs2NDEsOCBAQAogCXVuc2lnbmVkIGxvbmcgcmZraWxsX3N0YXRlOwogI2RlZmluZSBSRktJTExfU1RBVEVfQUxMT0NBVEVECQkxCiAjZGVmaW5lIFJGS0lMTF9TVEFURV9SRUdJU1RFUkVECQkyCi0Jc3RydWN0IHJma2lsbCAqcmZraWxsOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgcmZraWxsX3dvcms7CisjZGVmaW5lIFJGS0lMTF9TVEFURV9CTE9DS0VECQkzCisJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnJma2lsbF9wb2xsX2RldjsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogCS8qCkBAIC05MTgsNyArODcwLDcgQEAKIAlyZXR1cm4gKGNoaXBzZXQtPnJmID09IGNoaXApOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiBydDJ4MDBfcmV2KGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCkKK3N0YXRpYyBpbmxpbmUgdTMyIHJ0MngwMF9yZXYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0KQogewogCXJldHVybiBjaGlwc2V0LT5yZXY7CiB9CkBAIC05ODIsNyArOTM0LDcgQEAKIAkJCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8KIGludCBydDJ4MDBtYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKICNlbHNlCiAjZGVmaW5lIHJ0MngwMG1hY19zZXRfa2V5CU5VTEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCBlNjZmYjMxLi45YzJmNTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzIsNyArMzIsNyBAQAogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKIAkJCSAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwKLQkJCSAgIHU4ICptYWMsIHU4ICpic3NpZCkKKwkJCSAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICpic3NpZCkKIHsKIAlzdHJ1Y3QgcnQyeDAwaW50Zl9jb25mIGNvbmY7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKQEAgLTQyLDYgKzQyLDggQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgogCQljb25mLnN5bmMgPSBUU0ZfU1lOQ19CRUFDT047CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKQEAgLTE1Miw4ICsxNTQsNyBAQAogCSAqLwogCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19hbnQocnQyeDAwZGV2LCBhbnQpOwogCi0JcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLQlydDJ4MDBfcmVzZXRfbGlua19hbnRfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKKwlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgdHJ1ZSk7CiAKIAltZW1jcHkoYWN0aXZlLCBhbnQsIHNpemVvZigqYW50KSk7CiAKQEAgLTE5MSw3ICsxOTIsNyBAQAogCSAqIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGxpbmsgdHVuZXIuCiAJICovCiAJaWYgKGllZWU4MDIxMV9mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKQotCQlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOworCQlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgZmFsc2UpOwogCiAJcnQyeDAwZGV2LT5jdXJyX2JhbmQgPSBjb25mLT5jaGFubmVsLT5iYW5kOwogCXJ0MngwMGRldi0+dHhfcG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwppbmRleCBhZWU5Y2JhLi4wYjQxODQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDksOSArNDksMTQgQEAKIHZvaWQgcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAorCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIWh3X2tleSB8fCBlbnRyeS0+c2tiLT5kb19ub3RfZW5jcnlwdCkKKwkJcmV0dXJuOworCiAJX19zZXRfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncyk7CiAKIAl0eGRlc2MtPmNpcGhlciA9IHJ0MngwMGNyeXB0b19rZXlfdG9fY2lwaGVyKGh3X2tleSk7CkBAIC02OSwxMSArNzQsMTcgQEAKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9FTkNSWVBUX01NSUMsICZ0eGRlc2MtPmZsYWdzKTsKIH0KIAotdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCit1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKIAorCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIWtleSB8fCBza2ItPmRvX25vdF9lbmNyeXB0KQorCQlyZXR1cm4gb3ZlcmhlYWQ7CisKIAkvKgogCSAqIEV4dGVuZCBmcmFtZSBsZW5ndGggdG8gaW5jbHVkZSBJVi9FSVYvSUNWL01NSUMsCiAJICogbm90ZSB0aGF0IHRoZXNlIGxlbmd0aHMgc2hvdWxkIG9ubHkgYmUgYWRkZWQgd2hlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwppbmRleCA1NGRkMTAwLi4wN2QzNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEzMCw5ICsxMzAsMTEgQEAKIH07CiAKIHZvaWQgcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgIGVudW0gY2lwaGVyIGNpcGhlciwgZW51bSByeF9jcnlwdG8gc3RhdHVzKQorCQkJICAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmICppbnRmID0gcnQyeDAwZGV2LT5kZWJ1Z2ZzX2ludGY7CisJZW51bSBjaXBoZXIgY2lwaGVyID0gcnhkZXNjLT5jaXBoZXI7CisJZW51bSByeF9jcnlwdG8gc3RhdHVzID0gcnhkZXNjLT5jaXBoZXJfc3RhdHVzOwogCiAJaWYgKGNpcGhlciA9PSBDSVBIRVJfVEtJUF9OT19NSUMpCiAJCWNpcGhlciA9IENJUEhFUl9US0lQOwpAQCAtNDMzLDExICs0MzUsMTIgQEAKIAlpZiAoaW5kZXggPj0gZGVidWctPl9fbmFtZS53b3JkX2NvdW50KQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJCQkJCQkJCVwKKwlpbmRleCArPSAoZGVidWctPl9fbmFtZS53b3JkX2Jhc2UgLwkJCVwKKwkJICBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZSk7CQkJXAorCQkJCQkJCQlcCiAJaWYgKGRlYnVnLT5fX25hbWUuZmxhZ3MgJiBSVDJYMDBERUJVR0ZTX09GRlNFVCkJCVwKIAkJaW5kZXggKj0gZGVidWctPl9fbmFtZS53b3JkX3NpemU7CQlcCiAJCQkJCQkJCVwKLQlpbmRleCArPSBkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZTsJCQlcCi0JCQkJCQkJCVwKIAlkZWJ1Zy0+X19uYW1lLnJlYWQoaW50Zi0+cnQyeDAwZGV2LCBpbmRleCwgJnZhbHVlKTsJXAogCQkJCQkJCQlcCiAJc2l6ZSA9IHNwcmludGYobGluZSwgX19mb3JtYXQsIHZhbHVlKTsJCQlcCkBAIC00NzQsMTEgKzQ3NywxMiBAQAogCXNpemUgPSBzdHJsZW4obGluZSk7CQkJCQlcCiAJdmFsdWUgPSBzaW1wbGVfc3RydG91bChsaW5lLCBOVUxMLCAwKTsJCQlcCiAJCQkJCQkJCVwKKwlpbmRleCArPSAoZGVidWctPl9fbmFtZS53b3JkX2Jhc2UgLwkJCVwKKwkJICBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZSk7CQkJXAorCQkJCQkJCQlcCiAJaWYgKGRlYnVnLT5fX25hbWUuZmxhZ3MgJiBSVDJYMDBERUJVR0ZTX09GRlNFVCkJCVwKIAkJaW5kZXggKj0gZGVidWctPl9fbmFtZS53b3JkX3NpemU7CQlcCiAJCQkJCQkJCVwKLQlpbmRleCArPSBkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZTsJCQlcCi0JCQkJCQkJCVwKIAlkZWJ1Zy0+X19uYW1lLndyaXRlKGludGYtPnJ0MngwMGRldiwgaW5kZXgsIHZhbHVlKTsJXAogCQkJCQkJCQlcCiAJKm9mZnNldCArPSBzaXplOwkJCQkJXApAQCAtNTQzLDkgKzU0Nyw5IEBACiAJCXJldHVybiBOVUxMOwogCiAJYmxvYi0+ZGF0YSA9IGRhdGE7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJkcml2ZXI6ICVzXG4iLCBpbnRmLT5ydDJ4MDBkZXYtPm9wcy0+bmFtZSk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJ2ZXJzaW9uOiAlc1xuIiwgRFJWX1ZFUlNJT04pOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY29tcGlsZWQ6ICVzICVzXG4iLCBfX0RBVEVfXywgX19USU1FX18pOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZHJpdmVyOlx0JXNcbiIsIGludGYtPnJ0MngwMGRldi0+b3BzLT5uYW1lKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInZlcnNpb246XHQlc1xuIiwgRFJWX1ZFUlNJT04pOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY29tcGlsZWQ6XHQlcyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKIAlibG9iLT5zaXplID0gc3RybGVuKGJsb2ItPmRhdGEpOwogCiAJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwgU19JUlVTUiwgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgYmxvYik7CkBAIC01NjYsMTQgKzU3MCwyNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWJsb2ItPmRhdGEgPSBkYXRhOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicnQgY2hpcDogJTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJ0KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmIGNoaXA6ICUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZXZpc2lvbjolMDh4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmV2KTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJ0IGNoaXA6XHQlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucnQpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgY2hpcDpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZXZpc2lvbjpcdCUwOHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZXYpOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiXG4iKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImNzciBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+Y3NyLndvcmRfY291bnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZWVwcm9tIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5lZXByb20ud29yZF9jb3VudCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJiYnAgbGVuZ3RoOiAlZFxuIiwgZGVidWctPmJicC53b3JkX2NvdW50KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5yZi53b3JkX2NvdW50KTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJlZ2lzdGVyXHRiYXNlXHR3b3Jkc1x0d29yZHNpemVcbiIpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY3NyXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPmNzci53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+Y3NyLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+Y3NyLndvcmRfc2l6ZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJlZXByb21cdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+ZWVwcm9tLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5lZXByb20ud29yZF9jb3VudCwKKwkJCWRlYnVnLT5lZXByb20ud29yZF9zaXplKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImJicFx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5iYnAud29yZF9iYXNlLAorCQkJZGVidWctPmJicC53b3JkX2NvdW50LAorCQkJZGVidWctPmJicC53b3JkX3NpemUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmZcdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+cmYud29yZF9iYXNlLAorCQkJZGVidWctPnJmLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+cmYud29yZF9zaXplKTsKIAlibG9iLT5zaXplID0gc3RybGVuKGJsb2ItPmRhdGEpOwogCiAJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwgU19JUlVTUiwgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgYmxvYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCmluZGV4IGE5MjEwNGQuLjAzNWNiYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IDg3YzBmMmMuLjA1Zjk0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMCw2MCArMzAsNiBAQAogI2luY2x1ZGUgInJ0MngwMGxpYi5oIgogCiAvKgotICogTGluayB0dW5pbmcgaGFuZGxlcnMKLSAqLwotdm9pZCBydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBSZXNldCBsaW5rIGluZm9ybWF0aW9uLgotCSAqIEJvdGggdGhlIGN1cnJlbnRseSBhY3RpdmUgdmdjIGxldmVsIGFzIHdlbGwgYXMKLQkgKiB0aGUgbGluayB0dW5lciBjb3VudGVyIHNob3VsZCBiZSByZXNldC4gUmVzZXR0aW5nCi0JICogdGhlIGNvdW50ZXIgaXMgaW1wb3J0YW50IGZvciBkZXZpY2VzIHdoZXJlIHRoZQotCSAqIGRldmljZSBzaG91bGQgb25seSBwZXJmb3JtIGxpbmsgdHVuaW5nIGR1cmluZyB0aGUKLQkgKiBmaXJzdCBtaW51dGUgYWZ0ZXIgYmVpbmcgZW5hYmxlZC4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuY291bnQgPSAwOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAwOwotCi0JLyoKLQkgKiBSZXNldCB0aGUgbGluayB0dW5lci4KLQkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZXNldF90dW5lcihydDJ4MDBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCS8qCi0JICogQ2xlYXIgYWxsIChwb3NzaWJseSkgcHJlLWV4aXN0aW5nIHF1YWxpdHkgc3RhdGlzdGljcy4KLQkgKi8KLQltZW1zZXQoJnJ0MngwMGRldi0+bGluay5xdWFsLCAwLCBzaXplb2YocnQyeDAwZGV2LT5saW5rLnF1YWwpKTsKLQotCS8qCi0JICogVGhlIFJYIGFuZCBUWCBwZXJjZW50YWdlIHNob3VsZCBzdGFydCBhdCA1MCUKLQkgKiB0aGlzIHdpbGwgYXNzdXJlIHdlIHdpbGwgZ2V0IGF0IGxlYXN0IGdldCBzb21lCi0JICogZGVjZW50IHZhbHVlIHdoZW4gdGhlIGxpbmsgdHVuZXIgc3RhcnRzLgotCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIGRyb3BwZWQgYW5kIG92ZXJ3cml0dGVuIHdpdGgKLQkgKiB0aGUgY29ycmVjdCAobWVhc3VyZWQgKXZhbHVlIGFueXdheSBkdXJpbmcgdGhlCi0JICogZmlyc3QgcnVuIG9mIHRoZSBsaW5rIHR1bmVyLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3BlcmNlbnRhZ2UgPSA1MDsKLQlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9wZXJjZW50YWdlID0gNTA7Ci0KLQlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOwotCi0JcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKLQkJCSAgICZydDJ4MDBkZXYtPmxpbmsud29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3N0b3BfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5saW5rLndvcmspOwotfQotCi0vKgogICogUmFkaW8gY29udHJvbCBoYW5kbGVycy4KICAqLwogaW50IHJ0MngwMGxpYl9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEzNyw5ICs4MywxMCBAQAogCQlyZXR1cm47CiAKIAkvKgotCSAqIFN0b3AgdGhlIFRYIHF1ZXVlcy4KKwkgKiBTdG9wIHRoZSBUWCBxdWV1ZXMgaW4gbWFjODAyMTEuCiAJICovCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKHJ0MngwMGRldi0+aHcpOworCXJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHJ0MngwMGRldik7CiAKIAkvKgogCSAqIERpc2FibGUgUlguCkBAIC0xNjEsMjM4ICsxMDgsMTUgQEAKIAkgKiBXaGVuIHdlIGFyZSBkaXNhYmxpbmcgdGhlIFJYLCB3ZSBzaG91bGQgYWxzbyBzdG9wIHRoZSBsaW5rIHR1bmVyLgogCSAqLwogCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpCi0JCXJ0MngwMGxpYl9zdG9wX2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKKwkJcnQyeDAwbGlua19zdG9wX3R1bmVyKHJ0MngwMGRldik7CiAKIAlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOwogCiAJLyoKIAkgKiBXaGVuIHdlIGFyZSBlbmFibGluZyB0aGUgUlgsIHdlIHNob3VsZCBhbHNvIHN0YXJ0IHRoZSBsaW5rIHR1bmVyLgogCSAqLwotCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTiAmJgotCSAgICAocnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50IHx8IHJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQotCQlydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihydDJ4MDBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9zYW1wbGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBhbnQ7Ci0JaW50IHNhbXBsZV9hID0KLQkgICAgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpX2hpc3RvcnkoJnJ0MngwMGRldi0+bGluaywgQU5URU5OQV9BKTsKLQlpbnQgc2FtcGxlX2IgPQotCSAgICBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2lfaGlzdG9yeSgmcnQyeDAwZGV2LT5saW5rLCBBTlRFTk5BX0IpOwotCi0JbWVtY3B5KCZhbnQsICZydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZSwgc2l6ZW9mKGFudCkpOwotCi0JLyoKLQkgKiBXZSBhcmUgZG9uZSBzYW1wbGluZy4gTm93IHdlIHNob3VsZCBldmFsdWF0ZSB0aGUgcmVzdWx0cy4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX01PREVfU0FNUExFOwotCi0JLyoKLQkgKiBEdXJpbmcgdGhlIGxhc3QgcGVyaW9kIHdlIGhhdmUgc2FtcGxlZCB0aGUgUlNTSQotCSAqIGZyb20gYm90aCBhbnRlbm5hJ3MuIEl0IG5vdyBpcyB0aW1lIHRvIGRldGVybWluZQotCSAqIHdoaWNoIGFudGVubmEgZGVtb25zdHJhdGVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgotCSAqIFdoZW4gd2UgYXJlIGFscmVhZHkgb24gdGhlIGFudGVubmEgd2l0aCB0aGUgYmVzdAotCSAqIHBlcmZvcm1hbmNlLCB0aGVuIHRoZXJlIHJlYWxseSBpcyBub3RoaW5nIGZvciB1cwotCSAqIGxlZnQgdG8gZG8uCi0JICovCi0JaWYgKHNhbXBsZV9hID09IHNhbXBsZV9iKQotCQlyZXR1cm47Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQotCQlhbnQucnggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQotCQlhbnQudHggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7Ci0KLQlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmYW50KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfZXZhbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBhbnRlbm5hX3NldHVwIGFudDsKLQlpbnQgcnNzaV9jdXJyID0gcnQyeDAwX2dldF9saW5rX2FudF9yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCWludCByc3NpX29sZCA9IHJ0MngwMF91cGRhdGVfYW50X3Jzc2koJnJ0MngwMGRldi0+bGluaywgcnNzaV9jdXJyKTsKLQotCW1lbWNweSgmYW50LCAmcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUsIHNpemVvZihhbnQpKTsKLQotCS8qCi0JICogTGVnYWN5IGRyaXZlciBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgc3dhcCBhbnRlbm5hJ3MKLQkgKiB3aGVuIHRoZSBkaWZmZXJlbmNlIGluIFJTU0kgaXMgZ3JlYXRlciB0aGF0IDUuIFRoaXMKLQkgKiBhbHNvIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIFJTU0kgd2FzIGFjdHVhbGx5IGJldHRlcgotCSAqIHRoZW4gdGhlIHByZXZpb3VzIHNhbXBsZS4KLQkgKiBXaGVuIHRoZSBkaWZmZXJlbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCB3ZSBzaG91bGQKLQkgKiBzYW1wbGUgdGhlIHJzc2kgZnJvbSB0aGUgb3RoZXIgYW50ZW5uYSB0byBtYWtlIGEgdmFsaWQKLQkgKiBjb21wYXJpc29uIGJldHdlZW4gdGhlIDIgYW50ZW5uYXMuCi0JICovCi0JaWYgKGFicyhyc3NpX2N1cnIgLSByc3NpX29sZCkgPCA1KQotCQlyZXR1cm47Ci0KLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzIHw9IEFOVEVOTkFfTU9ERV9TQU1QTEU7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQotCQlhbnQucnggPSAoYW50LnJ4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7Ci0KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQotCQlhbnQudHggPSAoYW50LnR4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7Ci0KLQlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmYW50KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQkvKgotCSAqIERldGVybWluZSBpZiBzb2Z0d2FyZSBkaXZlcnNpdHkgaXMgZW5hYmxlZCBmb3IKLQkgKiBlaXRoZXIgdGhlIFRYIG9yIFJYIGFudGVubmEgKG9yIGJvdGgpLgotCSAqIEFsd2F5cyBwZXJmb3JtIHRoaXMgY2hlY2sgc2luY2Ugd2l0aGluIHRoZSBsaW5rCi0JICogdHVuZXIgaW50ZXJ2YWwgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOwotCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOwotCi0JaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7Ci0JaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7Ci0KLQlpZiAoIShydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpICYmCi0JICAgICEocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgewotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgd2UgaGF2ZSBvbmx5IHNhbXBsZWQgdGhlIGRhdGEgb3ZlciB0aGUgbGFzdCBwZXJpb2QKLQkgKiB3ZSBzaG91bGQgbm93IGhhcnZlc3QgdGhlIGRhdGEuIE90aGVyd2lzZSBqdXN0IGV2YWx1YXRlCi0JICogdGhlIGRhdGEuIFRoZSBsYXR0ZXIgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIG9uY2UKLQkgKiBldmVyeSAyIHNlY29uZHMuCi0JICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX01PREVfU0FNUExFKQotCQlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9zYW1wbGUocnQyeDAwZGV2KTsKLQllbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKQotCQlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9ldmFsKHJ0MngwMGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl91cGRhdGVfbGlua19zdGF0cyhzdHJ1Y3QgbGluayAqbGluaywgaW50IHJzc2kpCi17Ci0JaW50IGF2Z19yc3NpID0gcnNzaTsKLQotCS8qCi0JICogVXBkYXRlIGdsb2JhbCBSU1NJCi0JICovCi0JaWYgKGxpbmstPnF1YWwuYXZnX3Jzc2kpCi0JCWF2Z19yc3NpID0gTU9WSU5HX0FWRVJBR0UobGluay0+cXVhbC5hdmdfcnNzaSwgcnNzaSwgOCk7Ci0JbGluay0+cXVhbC5hdmdfcnNzaSA9IGF2Z19yc3NpOwotCi0JLyoKLQkgKiBVcGRhdGUgYW50ZW5uYSBSU1NJCi0JICovCi0JaWYgKGxpbmstPmFudC5yc3NpX2FudCkKLQkJcnNzaSA9IE1PVklOR19BVkVSQUdFKGxpbmstPmFudC5yc3NpX2FudCwgcnNzaSwgOCk7Ci0JbGluay0+YW50LnJzc2lfYW50ID0gcnNzaTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3ByZWNhbGN1bGF0ZV9saW5rX3NpZ25hbChzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQotewotCWlmIChxdWFsLT5yeF9mYWlsZWQgfHwgcXVhbC0+cnhfc3VjY2VzcykKLQkJcXVhbC0+cnhfcGVyY2VudGFnZSA9Ci0JCSAgICAocXVhbC0+cnhfc3VjY2VzcyAqIDEwMCkgLwotCQkgICAgKHF1YWwtPnJ4X2ZhaWxlZCArIHF1YWwtPnJ4X3N1Y2Nlc3MpOwotCWVsc2UKLQkJcXVhbC0+cnhfcGVyY2VudGFnZSA9IDUwOwotCi0JaWYgKHF1YWwtPnR4X2ZhaWxlZCB8fCBxdWFsLT50eF9zdWNjZXNzKQotCQlxdWFsLT50eF9wZXJjZW50YWdlID0KLQkJICAgIChxdWFsLT50eF9zdWNjZXNzICogMTAwKSAvCi0JCSAgICAocXVhbC0+dHhfZmFpbGVkICsgcXVhbC0+dHhfc3VjY2Vzcyk7Ci0JZWxzZQotCQlxdWFsLT50eF9wZXJjZW50YWdlID0gNTA7Ci0KLQlxdWFsLT5yeF9zdWNjZXNzID0gMDsKLQlxdWFsLT5yeF9mYWlsZWQgPSAwOwotCXF1YWwtPnR4X3N1Y2Nlc3MgPSAwOwotCXF1YWwtPnR4X2ZhaWxlZCA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnQyeDAwbGliX2NhbGN1bGF0ZV9saW5rX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQkgICBpbnQgcnNzaSkKLXsKLQlpbnQgcnNzaV9wZXJjZW50YWdlID0gMDsKLQlpbnQgc2lnbmFsOwotCi0JLyoKLQkgKiBXZSBuZWVkIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSBSU1NJLgotCSAqLwotCWlmIChyc3NpIDwgMCkKLQkJcnNzaSArPSBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVudCBwZXJjZW50YWdlcywKLQkgKiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzaWduYWwuCi0JICovCi0JaWYgKHJ0MngwMGRldi0+cnNzaV9vZmZzZXQpCi0JCXJzc2lfcGVyY2VudGFnZSA9IChyc3NpICogMTAwKSAvIHJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7Ci0KLQkvKgotCSAqIEFkZCB0aGUgaW5kaXZpZHVhbCBwZXJjZW50YWdlcyBhbmQgdXNlIHRoZSBXRUlHSFQKLQkgKiBkZWZpbmVzIHRvIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBsaW5rIHNpZ25hbC4KLQkgKi8KLQlzaWduYWwgPSAoKFdFSUdIVF9SU1NJICogcnNzaV9wZXJjZW50YWdlKSArCi0JCSAgKFdFSUdIVF9UWCAqIHJ0MngwMGRldi0+bGluay5xdWFsLnR4X3BlcmNlbnRhZ2UpICsKLQkJICAoV0VJR0hUX1JYICogcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfcGVyY2VudGFnZSkpIC8gMTAwOwotCi0JcmV0dXJuIChzaWduYWwgPiAxMDApID8gMTAwIDogc2lnbmFsOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfbGlua190dW5lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgbGluay53b3JrLndvcmspOwotCi0JLyoKLQkgKiBXaGVuIHRoZSByYWRpbyBpcyBzaHV0dGluZyBkb3duIHdlIHNob3VsZAotCSAqIGltbWVkaWF0ZWx5IGNlYXNlIGFsbCBsaW5rIHR1bmluZy4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCS8qCi0JICogVXBkYXRlIHN0YXRpc3RpY3MuCi0JICovCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua19zdGF0cyhydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxpbmsucXVhbCk7Ci0JcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFGQ1NFcnJvckNvdW50ICs9Ci0JICAgIHJ0MngwMGRldi0+bGluay5xdWFsLnJ4X2ZhaWxlZDsKLQotCS8qCi0JICogT25seSBwZXJmb3JtIHRoZSBsaW5rIHR1bmluZyB3aGVuIExpbmsgdHVuaW5nCi0JICogaGFzIGJlZW4gZW5hYmxlZCAoVGhpcyBjb3VsZCBoYXZlIGJlZW4gZGlzYWJsZWQgZnJvbSB0aGUgRUVQUk9NKS4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfdHVuZXIocnQyeDAwZGV2KTsKLQotCS8qCi0JICogUHJlY2FsY3VsYXRlIGEgcG9ydGlvbiBvZiB0aGUgbGluayBzaWduYWwgd2hpY2ggaXMKLQkgKiBpbiBiYXNlZCBvbiB0aGUgdHgvcnggc3VjY2Vzcy9mYWlsdXJlIGNvdW50ZXJzLgotCSAqLwotCXJ0MngwMGxpYl9wcmVjYWxjdWxhdGVfbGlua19zaWduYWwoJnJ0MngwMGRldi0+bGluay5xdWFsKTsKLQotCS8qCi0JICogU2VuZCBhIHNpZ25hbCB0byB0aGUgbGVkIHRvIHVwZGF0ZSB0aGUgbGVkIHNpZ25hbCBzdHJlbmd0aC4KLQkgKi8KLQlydDJ4MDBsZWRzX2xlZF9xdWFsaXR5KHJ0MngwMGRldiwgcnQyeDAwZGV2LT5saW5rLnF1YWwuYXZnX3Jzc2kpOwotCi0JLyoKLQkgKiBFdmFsdWF0ZSBhbnRlbm5hIHNldHVwLCBtYWtlIHRoaXMgdGhlIGxhc3Qgc3RlcCBzaW5jZSB0aGlzIGNvdWxkCi0JICogcG9zc2libHkgcmVzZXQgc29tZSBzdGF0aXN0aWNzLgotCSAqLwotCXJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hKHJ0MngwMGRldik7Ci0KLQkvKgotCSAqIEluY3JlYXNlIHR1bmVyIGNvdW50ZXIsIGFuZCByZXNjaGVkdWxlIHRoZSBuZXh0IGxpbmsgdHVuZXIgcnVuLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5jb3VudCsrOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmcnQyeDAwZGV2LT5saW5rLndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CisJaWYgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09OKQorCQlydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHJ0MngwMGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MngwMGxpYl9wYWNrZXRmaWx0ZXJfc2NoZWR1bGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTQzNCw3ICsxNTgsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikKLQkJcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZik7CisJCXJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYsIHRydWUpOwogCiAJaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX0NPTkZJR19FUlApCiAJCXJ0MngwMGxpYl9jb25maWdfZXJwKHJ0MngwMGRldiwgaW50ZiwgJmNvbmYpOwpAQCAtNDY3LDcgKzE5MSw5IEBACiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAogCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKLQkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUykKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTQ5MCw3ICsyMTYsNyBAQAogCQkJCQkJICAgcnQyeDAwbGliX2JlYWNvbmRvbmVfaXRlciwKIAkJCQkJCSAgIHJ0MngwMGRldik7CiAKLQlzY2hlZHVsZV93b3JrKCZydDJ4MDBkZXYtPmludGZfd29yayk7CisJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmludGZfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfYmVhY29uZG9uZSk7CiAKQEAgLTU5Nyw3ICszMjMsNiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9ICZydDJ4MDBkZXYtPnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqcmF0ZTsKIAl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgYWxpZ247CkBAIC02NjgsMzAgKzM5MywyMiBAQAogCiAJaWYgKGlkeCA8IDApIHsKIAkJV0FSTklORyhydDJ4MDBkZXYsICJGcmFtZSByZWNlaXZlZCB3aXRoIHVucmVjb2duaXplZCBzaWduYWwsIgotCQkJInNpZ25hbD0weCUuMngsIHBsY3A9JWQuXG4iLCByeGRlc2Muc2lnbmFsLAotCQkJISEocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfUExDUCkpOworCQkJInNpZ25hbD0weCUuMngsIHR5cGU9JWQuXG4iLCByeGRlc2Muc2lnbmFsLAorCQkJKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX01BU0spKTsKIAkJaWR4ID0gMDsKIAl9CiAKIAkvKgotCSAqIE9ubHkgdXBkYXRlIGxpbmsgc3RhdHVzIGlmIHRoaXMgaXMgYSBiZWFjb24gZnJhbWUgY2Fycnlpbmcgb3VyIGJzc2lkLgorCSAqIFVwZGF0ZSBleHRyYSBjb21wb25lbnRzCiAJICovCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCi0JICAgIChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX01ZX0JTUykpCi0JCXJ0MngwMGxpYl91cGRhdGVfbGlua19zdGF0cygmcnQyeDAwZGV2LT5saW5rLCByeGRlc2MucnNzaSk7Ci0KLQlydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHJ0MngwMGRldiwKLQkJCQkgIHJ4ZGVzYy5jaXBoZXIsCi0JCQkJICByeGRlc2MuY2lwaGVyX3N0YXR1cyk7Ci0KLQlydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9zdWNjZXNzKys7CisJcnQyeDAwbGlua191cGRhdGVfc3RhdHMocnQyeDAwZGV2LCBlbnRyeS0+c2tiLCAmcnhkZXNjKTsKKwlydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHJ0MngwMGRldiwgJnJ4ZGVzYyk7CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSByeGRlc2MudGltZXN0YW1wOwogCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBpZHg7Ci0Jcnhfc3RhdHVzLT5xdWFsID0KLQkgICAgcnQyeDAwbGliX2NhbGN1bGF0ZV9saW5rX3NpZ25hbChydDJ4MDBkZXYsIHJ4ZGVzYy5yc3NpKTsKKwlyeF9zdGF0dXMtPnF1YWwgPSBydDJ4MDBsaW5rX2NhbGN1bGF0ZV9zaWduYWwocnQyeDAwZGV2LCByeGRlc2MucnNzaSk7CiAJcnhfc3RhdHVzLT5zaWduYWwgPSByeGRlc2MucnNzaTsKKwlyeF9zdGF0dXMtPm5vaXNlID0gcnhkZXNjLm5vaXNlOwogCXJ4X3N0YXR1cy0+ZmxhZyA9IHJ4ZGVzYy5mbGFnczsKIAlyeF9zdGF0dXMtPmFudGVubmEgPSBydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZS5yeDsKIApAQCAtMTA2Nyw3ICs3ODQsOSBAQAogCWlmIChydDJ4MDBkZXYtPm9wcy0+YmNuLT5lbnRyeV9udW0gPiAwKQogCQlydDJ4MDBkZXYtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzIHw9CiAJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKLQkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCk7CisJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CisJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfV0RTKTsKIAogCS8qCiAJICogTGV0IHRoZSBkcml2ZXIgcHJvYmUgdGhlIGRldmljZSB0byBkZXRlY3QgdGhlIGNhcGFiaWxpdGllcy4KQEAgLTEwODMsNyArODAyLDYgQEAKIAkgKi8KIAlJTklUX1dPUksoJnJ0MngwMGRldi0+aW50Zl93b3JrLCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQpOwogCUlOSVRfV09SSygmcnQyeDAwZGV2LT5maWx0ZXJfd29yaywgcnQyeDAwbGliX3BhY2tldGZpbHRlcl9zY2hlZHVsZWQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud29yaywgcnQyeDAwbGliX2xpbmtfdHVuZXIpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBxdWV1ZSBhcnJheS4KQEAgLTExMDQsNiArODIyLDcgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIGV4dHJhIGNvbXBvbmVudHMuCiAJICovCisJcnQyeDAwbGlua19yZWdpc3RlcihydDJ4MDBkZXYpOwogCXJ0MngwMGxlZHNfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDByZmtpbGxfYWxsb2NhdGUocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOwpAQCAtMTE2MywyMyArODgyLDE3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgcnQyeDAwbGliX3N1c3BlbmQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWludCByZXR2YWw7Ci0KIAlOT1RJQ0UocnQyeDAwZGV2LCAiR29pbmcgdG8gc2xlZXAuXG4iKTsKIAogCS8qCi0JICogT25seSBjb250aW51ZSBpZiBtYWM4MDIxMSBoYXMgb3BlbiBpbnRlcmZhY2VzLgorCSAqIFByZXZlbnQgbWFjODAyMTEgZnJvbSBhY2Nlc3NpbmcgZHJpdmVyIHdoaWxlIHN1c3BlbmRlZC4KIAkgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlnb3RvIGV4aXQ7Ci0KLQlzZXRfYml0KERFVklDRV9TVEFURV9TVEFSVEVEX1NVU1BFTkQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKIAogCS8qCi0JICogRGlzYWJsZSByYWRpby4KKwkgKiBDbGVhbnVwIGFzIG11Y2ggYXMgcG9zc2libGUuCiAJICovCi0JcnQyeDAwbGliX3N0b3AocnQyeDAwZGV2KTsKIAlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CiAKIAkvKgpAQCAtMTE4OCw3ICs5MDEsNiBAQAogCXJ0MngwMGxlZHNfc3VzcGVuZChydDJ4MDBkZXYpOwogCXJ0MngwMGRlYnVnX2RlcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAotZXhpdDoKIAkvKgogCSAqIFNldCBkZXZpY2UgbW9kZSB0byBzbGVlcCBmb3IgcG93ZXIgbWFuYWdlbWVudCwKIAkgKiBvbiBzb21lIGhhcmR3YXJlIHRoaXMgY2FsbCBzZWVtcyB0byBjb25zaXN0ZW50bHkgZmFpbC4KQEAgLTEyMDAsOCArOTEyLDcgQEAKIAkgKiB0aGUgcmFkaW8gYW5kIHRoZSBvdGhlciBjb21wb25lbnRzIGFscmVhZHkgZGlzYWJsZWQgdGhlCiAJICogZGV2aWNlIGlzIGFzIGdvb2QgYXMgZGlzYWJsZWQuCiAJICovCi0JcmV0dmFsID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX1NMRUVQKTsKLQlpZiAocmV0dmFsKQorCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfU0xFRVApKQogCQlXQVJOSU5HKHJ0MngwMGRldiwgIkRldmljZSBmYWlsZWQgdG8gZW50ZXIgc2xlZXAgc3RhdGUsICIKIAkJCSJjb250aW51ZSBzdXNwZW5kaW5nLlxuIik7CiAKQEAgLTEyMDksMzIgKzkyMCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfc3VzcGVuZCk7CiAKLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9yZXN1bWVfaW50Zih2b2lkICpkYXRhLCB1OCAqbWFjLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCi0Jc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKLQotCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsCi0JCQkgICAgICB2aWYtPnR5cGUsIGludGYtPm1hYywgaW50Zi0+YnNzaWQpOwotCi0KLQkvKgotCSAqIE1hc3RlciBvciBBZC1ob2MgbW9kZSByZXF1aXJlIGEgbmV3IGJlYWNvbiB1cGRhdGUuCi0JICovCi0JaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCSAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gREVMQVlFRF9VUERBVEVfQkVBQ09OOwotCi0Jc3Bpbl91bmxvY2soJmludGYtPmxvY2spOwotfQotCiBpbnQgcnQyeDAwbGliX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCWludCByZXR2YWw7Ci0KIAlOT1RJQ0UocnQyeDAwZGV2LCAiV2FraW5nIHVwLlxuIik7CiAKIAkvKgpAQCAtMTI0NCw2MCArOTMxLDExIEBACiAJcnQyeDAwbGVkc19yZXN1bWUocnQyeDAwZGV2KTsKIAogCS8qCi0JICogT25seSBjb250aW51ZSBpZiBtYWM4MDIxMSBoYWQgb3BlbiBpbnRlcmZhY2VzLgotCSAqLwotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERFVklDRV9TVEFURV9TVEFSVEVEX1NVU1BFTkQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFJlaW5pdGlhbGl6ZSBkZXZpY2UgYW5kIGFsbCBhY3RpdmUgaW50ZXJmYWNlcy4KLQkgKi8KLQlyZXR2YWwgPSBydDJ4MDBsaWJfc3RhcnQocnQyeDAwZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQkvKgotCSAqIFJlY29uZmlndXJlIGRldmljZS4KLQkgKi8KLQlyZXR2YWwgPSBydDJ4MDBtYWNfY29uZmlnKHJ0MngwMGRldi0+aHcsIH4wKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQkvKgotCSAqIEl0ZXJhdG9yIG92ZXIgZWFjaCBhY3RpdmUgaW50ZXJmYWNlIHRvCi0JICogcmVjb25maWd1cmUgdGhlIGhhcmR3YXJlLgotCSAqLwotCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKHJ0MngwMGRldi0+aHcsCi0JCQkJCSAgICBydDJ4MDBsaWJfcmVzdW1lX2ludGYsIHJ0MngwMGRldik7Ci0KLQkvKgogCSAqIFdlIGFyZSByZWFkeSBhZ2FpbiB0byByZWNlaXZlIHJlcXVlc3RzIGZyb20gbWFjODAyMTEuCiAJICovCiAJc2V0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCi0JLyoKLQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IGR1cmluZyB0aGF0IG1hYzgwMjExIGhhcyBhdHRlbXB0ZWQKLQkgKiB0byBzZW5kIGZyYW1lcyB3aGlsZSB3ZSB3ZXJlIHN1c3BlbmRpbmcgb3IgcmVzdW1pbmcuCi0JICogSW4gdGhhdCBjYXNlIHdlIGhhdmUgZGlzYWJsZWQgdGhlIFRYIHF1ZXVlIGFuZCBzaG91bGQKLQkgKiBub3cgZW5hYmxlIGl0IGFnYWluCi0JICovCi0JaWVlZTgwMjExX3dha2VfcXVldWVzKHJ0MngwMGRldi0+aHcpOwotCi0JLyoKLQkgKiBEdXJpbmcgaW50ZXJmYWNlIGl0ZXJhdGlvbiB3ZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlCi0JICogZGVsYXllZF9mbGFncywgdGltZSB0byBoYW5kbGVzIHRoZSBldmVudCBieSBjYWxsaW5nCi0JICogdGhlIHdvcmsgaGFuZGxlciBkaXJlY3RseS4KLQkgKi8KLQlydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKLQogCXJldHVybiAwOwotCi1leGl0OgotCXJ0MngwMGxpYl9zdG9wKHJ0MngwMGRldik7Ci0JcnQyeDAwbGliX3VuaW5pdGlhbGl6ZShydDJ4MDBkZXYpOwotCXJ0MngwMGRlYnVnX2RlcmVnaXN0ZXIocnQyeDAwZGV2KTsKLQotCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfcmVzdW1lKTsKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCmluZGV4IDcxNjljMjIuLmZkZWRiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKaW5kZXggYmFiMDVhNS4uZDJkZWVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNSw3ICszNSw2IEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAljaGFyICpmd19uYW1lOwogCWludCByZXR2YWw7Ci0JdTE2IGNyYzsKIAogCS8qCiAJICogUmVhZCBjb3JyZWN0IGZpcm13YXJlIGZyb20gaGFyZGRpc2suCkBAIC02MSwxNiArNjAsMjYgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY3JjID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+Z2V0X2Zpcm13YXJlX2NyYyhmdy0+ZGF0YSwgZnctPnNpemUpOwotCWlmIChjcmMgIT0gKGZ3LT5kYXRhW2Z3LT5zaXplIC0gMl0gPDwgOCB8IGZ3LT5kYXRhW2Z3LT5zaXplIC0gMV0pKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZpcm13YXJlIGNoZWNrc3VtIGVycm9yLlxuIik7Ci0JCXJldHZhbCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KIAlJTkZPKHJ0MngwMGRldiwgIkZpcm13YXJlIGRldGVjdGVkIC0gdmVyc2lvbjogJWQuJWQuXG4iLAogCSAgICAgZnctPmRhdGFbZnctPnNpemUgLSA0XSwgZnctPmRhdGFbZnctPnNpemUgLSAzXSk7CiAKKwlyZXR2YWwgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5jaGVja19maXJtd2FyZShydDJ4MDBkZXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJc3dpdGNoIChyZXR2YWwpIHsKKwljYXNlIEZXX09LOgorCQlicmVhazsKKwljYXNlIEZXX0JBRF9DUkM6CisJCUVSUk9SKHJ0MngwMGRldiwgIkZpcm13YXJlIGNoZWNrc3VtIGVycm9yLlxuIik7CisJCWdvdG8gZXhpdDsKKwljYXNlIEZXX0JBRF9MRU5HVEg6CisJCUVSUk9SKHJ0MngwMGRldiwKKwkJICAgICAgIkludmFsaWQgZmlybXdhcmUgZmlsZSBsZW5ndGggKGxlbj0lenUpXG4iLCBmdy0+c2l6ZSk7CisJCWdvdG8gZXhpdDsKKwljYXNlIEZXX0JBRF9WRVJTSU9OOgorCQlFUlJPUihydDJ4MDBkZXYsCisJCSAgICAgICJDdXJyZW50IGZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgZGV0ZWN0ZWQgY2hpcHNldC5cbiIpOworCQlnb3RvIGV4aXQ7CisJfTsKKwogCXJ0MngwMGRldi0+ZncgPSBmdzsKIAogCXJldHVybiAwOwpAQCAtNzgsNyArODcsNyBAQAogZXhpdDoKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKIGludCBydDJ4MDBsaWJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKaW5kZXggYTBjZDM1Yi4uNDk2NzFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCSBydDJ4MDBkZXYtPm9wcy0+bmFtZSwgd2lwaHlfbmFtZShydDJ4MDBkZXYtPmh3LT53aXBoeSkpOwogCiAJaWYgKHJ0MngwMGRldi0+bGVkX3JhZGlvLmZsYWdzICYgTEVEX0lOSVRJQUxJWkVEKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOnJhZGlvIiwgZGV2X25hbWUpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczo6cmFkaW8iLCBkZXZfbmFtZSk7CiAKIAkJcmV0dmFsID0gcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQocnQyeDAwZGV2LAogCQkJCQkJICZydDJ4MDBkZXYtPmxlZF9yYWRpbywKQEAgLTE0NCw3ICsxNDQsNyBAQAogCX0KIAogCWlmIChydDJ4MDBkZXYtPmxlZF9hc3NvYy5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczphc3NvYyIsIGRldl9uYW1lKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6OmFzc29jIiwgZGV2X25hbWUpOwogCiAJCXJldHZhbCA9IHJ0MngwMGxlZHNfcmVnaXN0ZXJfbGVkKHJ0MngwMGRldiwKIAkJCQkJCSAmcnQyeDAwZGV2LT5sZWRfYXNzb2MsCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl9CiAKIAlpZiAocnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczpxdWFsaXR5IiwgZGV2X25hbWUpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczo6cXVhbGl0eSIsIGRldl9uYW1lKTsKIAogCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCiAJCQkJCQkgJnJ0MngwMGRldi0+bGVkX3F1YWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaAppbmRleCA5ZGY0YTQ5YmQuLjEwNDY5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCA4NmNkMjZmLi5hNjMxNjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzMsNyArMzMsNyBAQAogICogQm90aCB0aGUgbGluayB0dW5lciBhcyB0aGUgcmZraWxsIHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyIHNlY29uZC4KICAqLwogI2RlZmluZSBMSU5LX1RVTkVfSU5URVJWQUwJKCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSApCi0jZGVmaW5lIFJGS0lMTF9QT0xMX0lOVEVSVkFMCSggcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikgKQorI2RlZmluZSBSRktJTExfUE9MTF9JTlRFUlZBTAkoIDEwMDAgKQogCiAvKgogICogcnQyeDAwX3JhdGU6IFBlciByYXRlIGRldmljZSBpbmZvcm1hdGlvbgpAQCAtNjMsNyArNjMsNiBAQAogaW50IHJ0MngwMGxpYl9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMGxpYl9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBsaWJfdG9nZ2xlX3J4KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGVudW0gZGV2X3N0YXRlIHN0YXRlKTsKLXZvaWQgcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBoYW5kbGVycy4KQEAgLTc3LDcgKzc2LDcgQEAKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCiAJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCi0JCQkgICB1OCAqbWFjLCB1OCAqYnNzaWQpOworCQkJICAgY29uc3QgdTggKm1hYywgY29uc3QgdTggKmJzc2lkKTsKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19lcnAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mKTsKQEAgLTEyNCw5ICsxMjMsMTEgQEAKICAqIHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24gLSBTZW5kIG5ldyBiZWFjb24gZnJvbSBtYWM4MDIxMSB0byBoYXJkd2FyZQogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKiBAdmlmOiBJbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSBiZWFjb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisgKiBAZW5hYmxlX2JlYWNvbjogRW5hYmxlIGJlYWNvbmluZwogICovCiBpbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgY29uc3QgYm9vbCBlbmFibGVfYmVhY29uKTsKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbmRleF9pbmMgLSBJbmRleCBpbmNyZW1lbnRhdGlvbiBmdW5jdGlvbgpAQCAtMTQwLDYgKzE0MSwxNSBAQAogdm9pZCBydDJ4MDBxdWV1ZV9pbmRleF9pbmMoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBlbnVtIHF1ZXVlX2luZGV4IGluZGV4KTsKIAogLyoqCisgKiBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyAtIEhhbHQgYWxsIGRhdGEgcXVldWVzCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vcCB0aHJvdWdoIGFsbCBhdmFpbGFibGUgcXVldWVzIHRvIHN0b3AKKyAqIGFueSBwZW5kaW5nIG91dGdvaW5nIGZyYW1lcy4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKworLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbml0X3F1ZXVlcyAtIEluaXRpYWxpemUgYWxsIGRhdGEgcXVldWVzCiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KICAqCkBAIC0xNTQsNiArMTY0LDgxIEBACiBpbnQgcnQyeDAwcXVldWVfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMHF1ZXVlX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKKy8qKgorICogcnQyeDAwbGlua191cGRhdGVfc3RhdHMgLSBVcGRhdGUgbGluayBzdGF0aXN0aWNzIGZyb20gUlggZnJhbWUKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHNrYjogUmVjZWl2ZWQgZnJhbWUKKyAqIEByeGRlc2M6IFJlY2VpdmVkIGZyYW1lIGRlc2NyaXB0b3IKKyAqCisgKiBVcGRhdGUgbGluayBzdGF0aXN0aWNzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICogcmVjZWl2ZWQgZnJhbWUgZGVzY3JpcHRvci4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYyk7CisKKy8qKgorICogcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsIC0gQ2FsY3VsYXRlIHNpZ25hbCBxdWFsaXR5CisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEByc3NpOiBSWCBGcmFtZSBSU1NJCisgKgorICogQ2FsY3VsYXRlIHRoZSBzaWduYWwgcXVhbGl0eSBvZiBhIGZyYW1lIGJhc2VkIG9uIHRoZSByc3NpCisgKiBtZWFzdXJlZCBkdXJpbmcgdGhlIHJlY2VpdmluZyBvZiB0aGUgZnJhbWUgYW5kIHRoZSBnbG9iYWwKKyAqIGxpbmsgcXVhbGl0eSBzdGF0aXN0aWNzIG1lYXN1cmVkIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUKKyAqIGxpbmsgdHVuaW5nLiBUaGUgcmVzdWx0IGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAgd2hpY2gKKyAqIGlzIGFuIGluZGljYXRpb24gb2YgdGhlIHNpZ25hbCBxdWFsaXR5LgorICovCitpbnQgcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGludCByc3NpKTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyIC0gU3RhcnQgcGVyaW9kaWMgbGluayB0dW5lciB3b3JrCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBUaGlzIHN0YXJ0IHRoZSBsaW5rIHR1bmVyIHBlcmlvZGljIHdvcmssIHRoaXMgd29yayB3aWxsCisgKiBiZSBleGVjdXRlZCBwZXJpb2RpY2FsbHkgdW50aWwgJnJ0MngwMGxpbmtfc3RvcF90dW5lciBoYXMKKyAqIGJlZW4gY2FsbGVkLgorICovCit2b2lkIHJ0MngwMGxpbmtfc3RhcnRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgorICogcnQyeDAwbGlua19zdG9wX3R1bmVyIC0gU3RvcCBwZXJpb2RpYyBsaW5rIHR1bmVyIHdvcmsKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVkIHRoZSBsaW5rIHR1bmVyIHdpbGwgbm90CisgKiBiZSBydW5uaW5nIHVudGlsICZydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyIGlzIGNhbGxlZC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0b3BfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgorICogcnQyeDAwbGlua19yZXNldF90dW5lciAtIFJlc2V0IHBlcmlvZGljIGxpbmsgdHVuZXIgd29yaworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAYW50ZW5uYTogU2hvdWxkIHRoZSBhbnRlbm5hIHR1bmluZyBhbHNvIGJlIHJlc2V0CisgKgorICogVGhlIFZHQyBsaW1pdCBjb25maWd1cmVkIGluIHRoZSBoYXJkd2FyZSB3aWxsIGJlIHJlc2V0IHRvIDAKKyAqIHdoaWNoIGZvcmNlcyB0aGUgZHJpdmVyIHRvIHJlZGlzY292ZXIgdGhlIGNvcnJlY3QgdmFsdWUgZm9yCisgKiB0aGUgY3VycmVudCBhc3NvY2lhdGlvbi4gVGhpcyBpcyBuZWVkZWQgd2hlbiBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIGhhdmUgY2hhbmdlZCB3aGljaCBjb3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgdGhlCisgKiBTTlIgbGV2ZWwgb3IgbGluayBxdWFsaXR5IChpLmUuIGNoYW5naW5nIHRoZSBhbnRlbm5hIHNldHRpbmcpLgorICoKKyAqIFJlc2V0dGluZyB0aGUgbGluayB0dW5lciB3aWxsIGFsc28gY2F1c2UgdGhlIHBlcmlvZGljIHdvcmsgY291bnRlcgorICogdG8gYmUgcmVzZXQuIEFueSBkcml2ZXIgd2hpY2ggaGFzIGEgZml4ZWQgbGltaXQgb24gdGhlIG51bWJlcgorICogb2Ygcm91bmRzIHRoZSBsaW5rIHR1bmVyIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2lsbCBhY2NlcHQgdGhlCisgKiB0dW5lciBhY3Rpb25zIGFnYWluIGlmIHRoaXMgbGltaXQgd2FzIHByZXZpb3VzbHkgcmVhY2hlZC4KKyAqCisgKiBJZiBAYW50ZW5uYSBpcyBzZXQgdG8gdHJ1ZSBhIHRoZSBzb2Z0d2FyZSBhbnRlbm5hIGRpdmVyc2l0eQorICogdHVuaW5nIHdpbGwgYWxzbyBiZSByZXNldC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGJvb2wgYW50ZW5uYSk7CisKKy8qKgorICogcnQyeDAwbGlua19yZWdpc3RlciAtIEluaXRpYWxpemUgbGluayB0dW5pbmcgZnVuY3Rpb25hbGl0eQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogSW5pdGlhbGl6ZSB3b3JrIHN0cnVjdHVyZSBhbmQgYWxsIGxpbmsgdHVuaW5nIHJlbGF0ZWQKKyAqIHBhcmFtdGVycy4gVGhpcyB3aWxsIG5vdCBzdGFydCB0aGUgbGluayB0dW5pbmcgcHJvY2VzcyBpdHNlbGYuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKwogLyoKICAqIEZpcm13YXJlIGhhbmRsZXJzLgogICovCkBAIC0xNzksNyArMjY0LDcgQEAKIHZvaWQgcnQyeDAwZGVidWdfZHVtcF9mcmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgIGVudW0gcnQyeDAwX2R1bXBfdHlwZSB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgIGVudW0gY2lwaGVyIGNpcGhlciwgZW51bSByeF9jcnlwdG8gc3RhdHVzKTsKKwkJCSAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYyk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGRlYnVnX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CkBAIC0xOTYsOCArMjgxLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJICAgICBlbnVtIGNpcGhlciBjaXBoZXIsCi0JCQkJCSAgICAgZW51bSByeF9jcnlwdG8gc3RhdHVzKQorCQkJCQkgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogfQogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KQEAgLTIwOSw3ICsyOTMsOCBAQAogZW51bSBjaXBoZXIgcnQyeDAwY3J5cHRvX2tleV90b19jaXBoZXIoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIHZvaWQgcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJICAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7Ci11bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyk7Cit1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHJ0MngwMGNyeXB0b190eF9jb3B5X2l2KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBpdl9sZW4pOwogdm9pZCBydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBpdl9sZW4pOwogdm9pZCBydDJ4MDBjcnlwdG9fdHhfaW5zZXJ0X2l2KHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMjI3LDcgKzMxMiw4IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViNWNkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisJNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorCU1vZHVsZTogcnQyeDAwbGliCisJQWJzdHJhY3Q6IHJ0MngwMCBnZW5lcmljIGxpbmsgdHVuaW5nIHJvdXRpbmVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgInJ0MngwMC5oIgorI2luY2x1ZGUgInJ0MngwMGxpYi5oIgorCisvKgorICogV2hlbiB3ZSBsYWNrIFJTU0kgaW5mb3JtYXRpb24gcmV0dXJuIHNvbWV0aGluZyBsZXNzIHRoZW4gLTgwIHRvCisgKiB0ZWxsIHRoZSBkcml2ZXIgdG8gdHVuZSB0aGUgZGV2aWNlIHRvIG1heGltdW0gc2Vuc2l0aXZpdHkuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9SU1NJCQktMTI4CisKKy8qCisgKiBXaGVuIG5vIFRYL1JYIHBlcmNlbnRhZ2UgY291bGQgYmUgY2FsY3VsYXRlZCBkdWUgdG8gbGFjayBvZgorICogZnJhbWVzIG9uIHRoZSBhaXIsIHdlIGZhbGxiYWNrIHRvIGEgcGVyY2VudGFnZSBvZiA1MCUuCisgKiBUaGlzIHdpbGwgYXNzdXJlIHdlIHdpbGwgZ2V0IGF0IGxlYXN0IGdldCBzb21lIGRlY2VudCB2YWx1ZQorICogd2hlbiB0aGUgbGluayB0dW5lciBzdGFydHMuCisgKiBUaGUgdmFsdWUgd2lsbCBiZSBkcm9wcGVkIGFuZCBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjb3JyZWN0IChtZWFzdXJlZCkKKyAqIHZhbHVlIGFueXdheSBkdXJpbmcgdGhlIGZpcnN0IHJ1biBvZiB0aGUgbGluayB0dW5lci4KKyAqLworI2RlZmluZSBERUZBVUxUX1BFUkNFTlRBR0UJNTAKKworLyoKKyAqIFNtYWxsIGhlbHBlciBtYWNybyB0byB3b3JrIHdpdGggbW92aW5nL3dhbGtpbmcgYXZlcmFnZXMuCisgKiBXaGVuIGFkZGluZyBhIHZhbHVlIHRvIHRoZSBhdmVyYWdlIHZhbHVlIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24KKyAqIGlzIG5lZWRlZDoKKyAqCisgKiAgICAgICAgYXZnX3Jzc2kgPSAoKGF2Z19yc3NpICogNykgKyByc3NpKSAvIDg7CisgKgorICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2Ugb25seSBuZWVkIDEgdmFyaWFibGUKKyAqIHRvIHN0b3JlIHRoZSBhdmVyYWdlIGluIChObyBuZWVkIGZvciBhIGNvdW50IGFuZCBhIHRvdGFsKS4KKyAqIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBub3JtYWwgYXZlcmFnZSB2YWx1ZXMgd2lsbCBvdmVyIHRpbWUKKyAqIG1vdmUgbGVzcyBhbmQgbGVzcyB0b3dhcmRzIG5ld2x5IGFkZGVkIHZhbHVlcyB0aGlzIHJlc3VsdHMKKyAqIHRoYXQgd2l0aCBsaW5rIHR1bmluZywgdGhlIGRldmljZSBjYW4gaGF2ZSBhIHZlcnkgZ29vZCBSU1NJCisgKiBmb3IgYSBmZXcgbWludXRlcyBidXQgd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIGF3YXkgZnJvbSB0aGUgQVAKKyAqIHRoZSBhdmVyYWdlIHdpbGwgbm90IGRlY3JlYXNlIGZhc3QgZW5vdWdoIHRvIGNvbXBlbnNhdGUuCisgKiBUaGUgd2Fsa2luZyBhdmVyYWdlIGNvbXBlbnNhdGVzIHRoaXMgYW5kIHdpbGwgbW92ZSB0b3dhcmRzCisgKiB0aGUgbmV3IHZhbHVlcyBjb3JyZWN0bHkgYWxsb3dpbmcgYSBlZmZlY3RpdmUgbGluayB0dW5pbmcuCisgKi8KKyNkZWZpbmUgTU9WSU5HX0FWRVJBR0UoX19hdmcsIF9fdmFsLCBfX3NhbXBsZXMpIFwKKwkoICgoKF9fYXZnKSAqICgoX19zYW1wbGVzKSAtIDEpKSArIChfX3ZhbCkpIC8gKF9fc2FtcGxlcykgKQorCisvKgorICogU21hbGwgaGVscGVyIG1hY3JvIGZvciBwZXJjZW50YWdlIGNhbGN1bGF0aW9uCisgKiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgbWFjcm8gd2l0aCB0aGUgb25seSBjYXRjaCB0aGF0IGl0IHdpbGwKKyAqIHByb2R1Y2UgYSBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugbm8gdG90YWwgdmFsdWUgd2FzIHByb3ZpZGVkLgorICovCisjZGVmaW5lIFBFUkNFTlRBR0UoX192YWx1ZSwgX190b3RhbCkgXAorCSggKF9fdG90YWwpID8gKCgoX192YWx1ZSkgKiAxMDApIC8gKF9fdG90YWwpKSA6IChERUZBVUxUX1BFUkNFTlRBR0UpICkKKworLyoKKyAqIEZvciBjYWxjdWxhdGluZyB0aGUgU2lnbmFsIHF1YWxpdHkgd2UgaGF2ZSBkZXRlcm1pbmVkCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHN1Y2Nlc3MgYW5kIGZhaWxlZCBSWCBhbmQgVFggZnJhbWVzLgorICogV2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGF2ZXJhZ2UgUlNTSSB2YWx1ZSB3ZSBjYW4gZGV0ZXJtaW5lCisgKiB0aGUgbGluayBxdWFsaXR5IHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICoKKyAqICAgICAgICAgcnNzaV9wZXJjZW50YWdlID0gKGF2Z19yc3NpICogMTAwKSAvIHJzc2lfb2Zmc2V0CisgKiAgICAgICAgIHJ4X3BlcmNlbnRhZ2UgPSAocnhfc3VjY2VzcyAqIDEwMCkgLyByeF90b3RhbAorICogICAgICAgICB0eF9wZXJjZW50YWdlID0gKHR4X3N1Y2Nlc3MgKiAxMDApIC8gdHhfdG90YWwKKyAqICAgICAgICAgYXZnX3NpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiBhdmdfcnNzaSkgKworICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfVFggKiB0eF9wZXJjZW50YWdlKSArCisgKiAgICAgICAgICAgICAgICAgICAgICAgKFdFSUdIVF9SWCAqIHJ4X3BlcmNlbnRhZ2UpKSAvIDEwMAorICoKKyAqIFRoaXMgdmFsdWUgc2hvdWxkIHRoZW4gYmUgY2hlY2tlZCB0byBub3QgYmUgZ3JlYXRlciB0aGVuIDEwMC4KKyAqIFRoaXMgbWVhbnMgdGhlIHZhbHVlcyBvZiBXRUlHSFRfUlNTSSwgV0VJR0hUX1JYLCBXRUlHSFRfVFggbXVzdAorICogc3VtIHVwIHRvIDEwMCBhcyB3ZWxsLgorICovCisjZGVmaW5lIFdFSUdIVF9SU1NJCTIwCisjZGVmaW5lIFdFSUdIVF9SWAk0MAorI2RlZmluZSBXRUlHSFRfVFgJNDAKKworc3RhdGljIGludCBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X2xpbmtfcnNzaShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisKKwlpZiAoYW50LT5yc3NpX2FudCAmJiBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9zdWNjZXNzKQorCQlyZXR1cm4gYW50LT5yc3NpX2FudDsKKwlyZXR1cm4gREVGQVVMVF9SU1NJOworfQorCitzdGF0aWMgaW50IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSAgICAgICBlbnVtIGFudGVubmEgYW50ZW5uYSkKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCisJaWYgKGFudC0+cnNzaV9oaXN0b3J5W2FudGVubmEgLSBBTlRFTk5BX0FdKQorCQlyZXR1cm4gYW50LT5yc3NpX2hpc3RvcnlbYW50ZW5uYSAtIEFOVEVOTkFfQV07CisJcmV0dXJuIERFRkFVTFRfUlNTSTsKK30KKy8qIFNtYWxsIHdyYXBwZXIgZm9yIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KCkgKi8KKyNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX3J4X2hpc3RvcnkoX19kZXYpIFwKKwlydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCisJCQkJCSAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUucngpCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV90eF9oaXN0b3J5KF9fZGV2KSBcCisJcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnR4KQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkJICAgZW51bSBhbnRlbm5hIGFudGVubmEsCisJCQkJCQkgICBpbnQgcnNzaSkKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCWFudC0+cnNzaV9oaXN0b3J5W2FudC0+YWN0aXZlLnJ4IC0gQU5URU5OQV9BXSA9IHJzc2k7Cit9CisvKiBTbWFsbCB3cmFwcGVyIGZvciBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgpICovCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9yeF9oaXN0b3J5KF9fZGV2LCBfX3Jzc2kpIFwKKwlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCisJCQkJCSAgICAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUucngsIFwKKwkJCQkJICAgICAgIChfX3Jzc2kpKQorI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfdHhfaGlzdG9yeShfX2RldiwgX19yc3NpKSBcCisJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnR4LCBcCisJCQkJCSAgICAgICAoX19yc3NpKSkKKworc3RhdGljIHZvaWQgcnQyeDAwbGlua19hbnRlbm5hX3Jlc2V0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJcnQyeDAwZGV2LT5saW5rLmFudC5yc3NpX2FudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9zYW1wbGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBhbnRlbm5hX3NldHVwIG5ld19hbnQ7CisJaW50IHNhbXBsZV9hID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2LCBBTlRFTk5BX0EpOworCWludCBzYW1wbGVfYiA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHJ0MngwMGRldiwgQU5URU5OQV9CKTsKKworCW1lbWNweSgmbmV3X2FudCwgJmFudC0+YWN0aXZlLCBzaXplb2YobmV3X2FudCkpOworCisJLyoKKwkgKiBXZSBhcmUgZG9uZSBzYW1wbGluZy4gTm93IHdlIHNob3VsZCBldmFsdWF0ZSB0aGUgcmVzdWx0cy4KKwkgKi8KKwlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX01PREVfU0FNUExFOworCisJLyoKKwkgKiBEdXJpbmcgdGhlIGxhc3QgcGVyaW9kIHdlIGhhdmUgc2FtcGxlZCB0aGUgUlNTSQorCSAqIGZyb20gYm90aCBhbnRlbm5hJ3MuIEl0IG5vdyBpcyB0aW1lIHRvIGRldGVybWluZQorCSAqIHdoaWNoIGFudGVubmEgZGVtb25zdHJhdGVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgorCSAqIFdoZW4gd2UgYXJlIGFscmVhZHkgb24gdGhlIGFudGVubmEgd2l0aCB0aGUgYmVzdAorCSAqIHBlcmZvcm1hbmNlLCB0aGVuIHRoZXJlIHJlYWxseSBpcyBub3RoaW5nIGZvciB1cworCSAqIGxlZnQgdG8gZG8uCisJICovCisJaWYgKHNhbXBsZV9hID09IHNhbXBsZV9iKQorCQlyZXR1cm47CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQorCQluZXdfYW50LnJ4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC50eCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKKworCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsICZuZXdfYW50KTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X2V2YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBhbnRlbm5hX3NldHVwIG5ld19hbnQ7CisJaW50IHJzc2lfY3VycjsKKwlpbnQgcnNzaV9vbGQ7CisKKwltZW1jcHkoJm5ld19hbnQsICZhbnQtPmFjdGl2ZSwgc2l6ZW9mKG5ld19hbnQpKTsKKworCS8qCisJICogR2V0IGN1cnJlbnQgUlNTSSB2YWx1ZSBhbG9uZyB3aXRoIHRoZSBoaXN0b3JpY2FsIHZhbHVlLAorCSAqIGFmdGVyIHRoYXQgdXBkYXRlIHRoZSBoaXN0b3J5IHdpdGggdGhlIGN1cnJlbnQgdmFsdWUuCisJICovCisJcnNzaV9jdXJyID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9saW5rX3Jzc2kocnQyeDAwZGV2KTsKKwlyc3NpX29sZCA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9yeF9oaXN0b3J5KHJ0MngwMGRldik7CisJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3J4X2hpc3RvcnkocnQyeDAwZGV2LCByc3NpX2N1cnIpOworCisJLyoKKwkgKiBMZWdhY3kgZHJpdmVyIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBzd2FwIGFudGVubmEncworCSAqIHdoZW4gdGhlIGRpZmZlcmVuY2UgaW4gUlNTSSBpcyBncmVhdGVyIHRoYXQgNS4gVGhpcworCSAqIGFsc28gc2hvdWxkIGJlIGRvbmUgd2hlbiB0aGUgUlNTSSB3YXMgYWN0dWFsbHkgYmV0dGVyCisJICogdGhlbiB0aGUgcHJldmlvdXMgc2FtcGxlLgorCSAqIFdoZW4gdGhlIGRpZmZlcmVuY2UgZXhjZWVkcyB0aGUgdGhyZXNob2xkIHdlIHNob3VsZAorCSAqIHNhbXBsZSB0aGUgcnNzaSBmcm9tIHRoZSBvdGhlciBhbnRlbm5hIHRvIG1ha2UgYSB2YWxpZAorCSAqIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgMiBhbnRlbm5hcy4KKwkgKi8KKwlpZiAoYWJzKHJzc2lfY3VyciAtIHJzc2lfb2xkKSA8IDUpCisJCXJldHVybjsKKworCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9NT0RFX1NBTVBMRTsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCisJCW5ld19hbnQucnggPSAobmV3X2FudC5yeCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC50eCA9IChuZXdfYW50LnR4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7CisKKwlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmbmV3X2FudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisKKwkvKgorCSAqIERldGVybWluZSBpZiBzb2Z0d2FyZSBkaXZlcnNpdHkgaXMgZW5hYmxlZCBmb3IKKwkgKiBlaXRoZXIgdGhlIFRYIG9yIFJYIGFudGVubmEgKG9yIGJvdGgpLgorCSAqIEFsd2F5cyBwZXJmb3JtIHRoaXMgY2hlY2sgc2luY2Ugd2l0aGluIHRoZSBsaW5rCisJICogdHVuZXIgaW50ZXJ2YWwgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkLgorCSAqLworCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOworCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOworCisJaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7CisJaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7CisKKwlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpICYmCisJICAgICEoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgeworCQlhbnQtPmZsYWdzID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBvbmx5IHNhbXBsZWQgdGhlIGRhdGEgb3ZlciB0aGUgbGFzdCBwZXJpb2QKKwkgKiB3ZSBzaG91bGQgbm93IGhhcnZlc3QgdGhlIGRhdGEuIE90aGVyd2lzZSBqdXN0IGV2YWx1YXRlCisJICogdGhlIGRhdGEuIFRoZSBsYXR0ZXIgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIG9uY2UKKwkgKiBldmVyeSAyIHNlY29uZHMuCisJICovCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX01PREVfU0FNUExFKQorCQlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfc2FtcGxlKHJ0MngwMGRldik7CisJZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkKKwkJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X2V2YWwocnQyeDAwZGV2KTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaW50IGF2Z19yc3NpID0gcnhkZXNjLT5yc3NpOworCWludCBhbnRfcnNzaSA9IHJ4ZGVzYy0+cnNzaTsKKworCS8qCisJICogRnJhbWUgd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSBzaW5jZSBub24tc3VjY2VzZnVsbAorCSAqIGZyYW1lcyB3b3VsZCBoYXZlIGJlZW4gZHJvcHBlZCBieSB0aGUgaGFyZHdhcmUuCisJICovCisJcXVhbC0+cnhfc3VjY2VzcysrOworCisJLyoKKwkgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHF1YWxpdHkgc3RhdGlzdGljcyBmcm9tCisJICogYmVhY29ucyB3aGljaCBjYW1lIGZyb20gdGhlIEJTUyB3aGljaCB3ZSBhcmUKKwkgKiBhc3NvY2lhdGVkIHdpdGguCisJICovCisJaWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgIShyeGRlc2MtPmRldl9mbGFncyAmIFJYRE9ORV9NWV9CU1MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSBnbG9iYWwgUlNTSQorCSAqLworCWlmIChsaW5rLT5hdmdfcnNzaSkKKwkJYXZnX3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5hdmdfcnNzaSwgcnhkZXNjLT5yc3NpLCA4KTsKKwlsaW5rLT5hdmdfcnNzaSA9IGF2Z19yc3NpOworCisJLyoKKwkgKiBVcGRhdGUgYW50ZW5uYSBSU1NJCisJICovCisJaWYgKGFudC0+cnNzaV9hbnQpCisJCWFudF9yc3NpID0gTU9WSU5HX0FWRVJBR0UoYW50LT5yc3NpX2FudCwgcnhkZXNjLT5yc3NpLCA4KTsKKwlhbnQtPnJzc2lfYW50ID0gYW50X3Jzc2k7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfcHJlY2FsY3VsYXRlX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJbGluay0+cnhfcGVyY2VudGFnZSA9CisJICAgIFBFUkNFTlRBR0UocXVhbC0+cnhfc3VjY2VzcywgcXVhbC0+cnhfZmFpbGVkICsgcXVhbC0+cnhfc3VjY2Vzcyk7CisJbGluay0+dHhfcGVyY2VudGFnZSA9CisJICAgIFBFUkNFTlRBR0UocXVhbC0+dHhfc3VjY2VzcywgcXVhbC0+dHhfZmFpbGVkICsgcXVhbC0+dHhfc3VjY2Vzcyk7Cit9CisKK2ludCBydDJ4MDBsaW5rX2NhbGN1bGF0ZV9zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgaW50IHJzc2kpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCWludCByc3NpX3BlcmNlbnRhZ2UgPSAwOworCWludCBzaWduYWw7CisKKwkvKgorCSAqIFdlIG5lZWQgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgdGhlIFJTU0kuCisJICovCisJaWYgKHJzc2kgPCAwKQorCQlyc3NpICs9IHJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZGlmZmVyZW50IHBlcmNlbnRhZ2VzLAorCSAqIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNpZ25hbC4KKwkgKi8KKwlyc3NpX3BlcmNlbnRhZ2UgPSBQRVJDRU5UQUdFKHJzc2ksIHJ0MngwMGRldi0+cnNzaV9vZmZzZXQpOworCisJLyoKKwkgKiBBZGQgdGhlIGluZGl2aWR1YWwgcGVyY2VudGFnZXMgYW5kIHVzZSB0aGUgV0VJR0hUCisJICogZGVmaW5lcyB0byBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgbGluayBzaWduYWwuCisJICovCisJc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIHJzc2lfcGVyY2VudGFnZSkgKworCQkgIChXRUlHSFRfVFggKiBsaW5rLT50eF9wZXJjZW50YWdlKSArCisJCSAgKFdFSUdIVF9SWCAqIGxpbmstPnJ4X3BlcmNlbnRhZ2UpKSAvIDEwMDsKKworCXJldHVybiBtYXhfdChpbnQsIHNpZ25hbCwgMTAwKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCisJLyoKKwkgKiBMaW5rIHR1bmluZyBzaG91bGQgb25seSBiZSBwZXJmb3JtZWQgd2hlbgorCSAqIGFuIGFjdGl2ZSBzdGEgb3IgbWFzdGVyIGludGVyZmFjZSBleGlzdHMuCisJICogU2luZ2xlIG1vbml0b3IgbW9kZSBpbnRlcmZhY2VzIHNob3VsZCBuZXZlciBoYXZlCisJICogd29yayB3aXRoIGxpbmsgdHVuZXJzLgorCSAqLworCWlmICghcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50ICYmICFydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KQorCQlyZXR1cm47CisKKwlsaW5rLT5yeF9wZXJjZW50YWdlID0gREVGQVVMVF9QRVJDRU5UQUdFOworCWxpbmstPnR4X3BlcmNlbnRhZ2UgPSBERUZBVUxUX1BFUkNFTlRBR0U7CisKKwlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgZmFsc2UpOworCisJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKKwkJCSAgICZsaW5rLT53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworfQorCit2b2lkIHJ0MngwMGxpbmtfc3RvcF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5saW5rLndvcmspOworfQorCit2b2lkIHJ0MngwMGxpbmtfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgYm9vbCBhbnRlbm5hKQoreworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCS8qCisJICogUmVzZXQgbGluayBpbmZvcm1hdGlvbi4KKwkgKiBCb3RoIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZnYyBsZXZlbCBhcyB3ZWxsIGFzCisJICogdGhlIGxpbmsgdHVuZXIgY291bnRlciBzaG91bGQgYmUgcmVzZXQuIFJlc2V0dGluZworCSAqIHRoZSBjb3VudGVyIGlzIGltcG9ydGFudCBmb3IgZGV2aWNlcyB3aGVyZSB0aGUKKwkgKiBkZXZpY2Ugc2hvdWxkIG9ubHkgcGVyZm9ybSBsaW5rIHR1bmluZyBkdXJpbmcgdGhlCisJICogZmlyc3QgbWludXRlIGFmdGVyIGJlaW5nIGVuYWJsZWQuCisJICovCisJcnQyeDAwZGV2LT5saW5rLmNvdW50ID0gMDsKKwltZW1zZXQocXVhbCwgMCwgc2l6ZW9mKCpxdWFsKSk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBsaW5rIHR1bmVyLgorCSAqLworCXJ0MngwMGRldi0+b3BzLT5saWItPnJlc2V0X3R1bmVyKHJ0MngwMGRldiwgcXVhbCk7CisKKwlpZiAoYW50ZW5uYSkKKwkJcnQyeDAwbGlua19hbnRlbm5hX3Jlc2V0KHJ0MngwMGRldik7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19yZXNldF9xdWFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCXF1YWwtPnJ4X3N1Y2Nlc3MgPSAwOworCXF1YWwtPnJ4X2ZhaWxlZCA9IDA7CisJcXVhbC0+dHhfc3VjY2VzcyA9IDA7CisJcXVhbC0+dHhfZmFpbGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGlua190dW5lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgbGluay53b3JrLndvcmspOworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJLyoKKwkgKiBXaGVuIHRoZSByYWRpbyBpcyBzaHV0dGluZyBkb3duIHdlIHNob3VsZAorCSAqIGltbWVkaWF0ZWx5IGNlYXNlIGFsbCBsaW5rIHR1bmluZy4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCS8qCisJICogVXBkYXRlIHN0YXRpc3RpY3MuCisJICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua19zdGF0cyhydDJ4MDBkZXYsIHF1YWwpOworCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExRkNTRXJyb3JDb3VudCArPSBxdWFsLT5yeF9mYWlsZWQ7CisKKwkvKgorCSAqIFVwZGF0ZSBxdWFsaXR5IFJTU0kgZm9yIGxpbmsgdHVuaW5nLAorCSAqIHdoZW4gd2UgaGF2ZSByZWNlaXZlZCBzb21lIGZyYW1lcyBhbmQgd2UgbWFuYWdlZCB0bworCSAqIGNvbGxlY3QgdGhlIFJTU0kgZGF0YSB3ZSBjb3VsZCB1c2UgdGhpcy4gT3RoZXJ3aXNlIHdlCisJICogbXVzdCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBSU1NJIHZhbHVlLgorCSAqLworCWlmICghbGluay0+YXZnX3Jzc2kgfHwgIXF1YWwtPnJ4X3N1Y2Nlc3MpCisJCXF1YWwtPnJzc2kgPSBERUZBVUxUX1JTU0k7CisJZWxzZQorCQlxdWFsLT5yc3NpID0gbGluay0+YXZnX3Jzc2k7CisKKwkvKgorCSAqIE9ubHkgcGVyZm9ybSB0aGUgbGluayB0dW5pbmcgd2hlbiBMaW5rIHR1bmluZworCSAqIGhhcyBiZWVuIGVuYWJsZWQgKFRoaXMgY291bGQgaGF2ZSBiZWVuIGRpc2FibGVkIGZyb20gdGhlIEVFUFJPTSkuCisJICovCisJaWYgKCF0ZXN0X2JpdChDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3R1bmVyKHJ0MngwMGRldiwgcXVhbCwgbGluay0+Y291bnQpOworCisJLyoKKwkgKiBQcmVjYWxjdWxhdGUgYSBwb3J0aW9uIG9mIHRoZSBsaW5rIHNpZ25hbCB3aGljaCBpcworCSAqIGluIGJhc2VkIG9uIHRoZSB0eC9yeCBzdWNjZXNzL2ZhaWx1cmUgY291bnRlcnMuCisJICovCisJcnQyeDAwbGlua19wcmVjYWxjdWxhdGVfc2lnbmFsKHJ0MngwMGRldik7CisKKwkvKgorCSAqIFNlbmQgYSBzaWduYWwgdG8gdGhlIGxlZCB0byB1cGRhdGUgdGhlIGxlZCBzaWduYWwgc3RyZW5ndGguCisJICovCisJcnQyeDAwbGVkc19sZWRfcXVhbGl0eShydDJ4MDBkZXYsIGxpbmstPmF2Z19yc3NpKTsKKworCS8qCisJICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgc2luY2UgdGhpcyBjb3VsZAorCSAqIHBvc3NpYmx5IHJlc2V0IHNvbWUgc3RhdGlzdGljcy4KKwkgKi8KKwlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkocnQyeDAwZGV2KTsKKworCS8qCisJICogUmVzZXQgdGhlIHF1YWxpdHkgY291bnRlcnMgd2hpY2ggcmVjb3VudGVkIGR1cmluZyBlYWNoIHBlcmlvZC4KKwkgKi8KKwlydDJ4MDBsaW5rX3Jlc2V0X3F1YWwocnQyeDAwZGV2KTsKKworCS8qCisJICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCisJICovCisJbGluay0+Y291bnQrKzsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAorCQkJICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud29yaywgcnQyeDAwbGlua190dW5lcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKaW5kZXggMzhlZGVlNS4uYzQxYTBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTc5LDggKzc5LDcgQEAKIAkgKiBSVFMvQ1RTIGZyYW1lIHNob3VsZCB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgcGx1cyBhbnkKIAkgKiBlbmNyeXB0aW9uIG92ZXJoZWFkIHRoYXQgd2lsbCBiZSBhZGRlZCBieSB0aGUgaGFyZHdhcmUuCiAJICovCi0JaWYgKCFmcmFnX3NrYi0+ZG9fbm90X2VuY3J5cHQpCi0JCWRhdGFfbGVuZ3RoICs9IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZCh0eF9pbmZvKTsKKwlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQocnQyeDAwZGV2LCBza2IpOwogCiAJaWYgKHR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQogCQlpZWVlODAyMTFfY3RzdG9zZWxmX2dldChydDJ4MDBkZXYtPmh3LCB0eF9pbmZvLT5jb250cm9sLnZpZiwKQEAgLTIyNiw2ICsyMjUsOCBAQAogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CiAJCS8qCiAJCSAqIFdlIGRvbid0IHN1cHBvcnQgbWl4ZWQgY29tYmluYXRpb25zIG9mCiAJCSAqIHN0YSBhbmQgYXAgaW50ZXJmYWNlcy4KQEAgLTQzMCw4ICs0MzEsMTAgQEAKIAkvKgogCSAqIFVwZGF0ZSB0aGUgYmVhY29uLgogCSAqLwotCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKQotCQlzdGF0dXMgPSBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmKTsKKwlpZiAoY29uZi0+Y2hhbmdlZCAmIChJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJICAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCkpCisJCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYsCisJCQkJCQkgICBjb25mLT5lbmFibGVfYmVhY29uKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00ODIsMTYgKzQ4NSwzNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIpOwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPCitzdGF0aWMgdm9pZCBtZW1jcHlfdGtpcChzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byAqY3J5cHRvLCB1OCAqa2V5LCB1OCBrZXlfbGVuKQoreworCWlmIChrZXlfbGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZKQorCQltZW1jcHkoJmNyeXB0by0+a2V5LAorCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVldLAorCQkgICAgICAgc2l6ZW9mKGNyeXB0by0+a2V5KSk7CisKKwlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZKQorCQltZW1jcHkoJmNyeXB0by0+dHhfbWljLAorCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWV0sCisJCSAgICAgICBzaXplb2YoY3J5cHRvLT50eF9taWMpKTsKKworCWlmIChrZXlfbGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkpCisJCW1lbWNweSgmY3J5cHRvLT5yeF9taWMsCisJCSAgICAgICAma2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZXSwKKwkJICAgICAgIHNpemVvZihjcnlwdG8tPnJ4X21pYykpOworfQorCiBpbnQgcnQyeDAwbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCWludCAoKnNldF9rZXkpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gKmNyeXB0bywKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAJc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gY3J5cHRvOworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9CisJCXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgfTsKIAogCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CkBAIC01MDksNDUgKzUzMiwyNSBAQAogCWlmIChydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KQogCQljcnlwdG8uYnNzaWR4ID0gMDsKIAllbHNlCi0JCWNyeXB0by5ic3NpZHggPQotCQkgICAgbG9jYWxfYWRkcmVzc1s1XSAmIChydDJ4MDBkZXYtPm9wcy0+bWF4X2FwX2ludGYgLSAxKTsKKwkJY3J5cHRvLmJzc2lkeCA9IGludGYtPm1hY1s1XSAmIChydDJ4MDBkZXYtPm9wcy0+bWF4X2FwX2ludGYgLSAxKTsKIAogCWNyeXB0by5jaXBoZXIgPSBydDJ4MDBjcnlwdG9fa2V5X3RvX2NpcGhlcihrZXkpOwogCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9OT05FKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAljcnlwdG8uY21kID0gY21kOwotCWNyeXB0by5hZGRyZXNzID0gYWRkcmVzczsKIAotCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9US0lQKSB7Ci0JCWlmIChrZXktPmtleWxlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWSkKLQkJCW1lbWNweSgmY3J5cHRvLmtleSwKLQkJCSAgICAgICAma2V5LT5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZXSwKLQkJCSAgICAgICBzaXplb2YoY3J5cHRvLmtleSkpOwotCi0JCWlmIChrZXktPmtleWxlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZKQotCQkJbWVtY3B5KCZjcnlwdG8udHhfbWljLAotCQkJICAgICAgICZrZXktPmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWV0sCi0JCQkgICAgICAgc2l6ZW9mKGNyeXB0by50eF9taWMpKTsKLQotCQlpZiAoa2V5LT5rZXlsZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWSkKLQkJCW1lbWNweSgmY3J5cHRvLnJ4X21pYywKLQkJCSAgICAgICAma2V5LT5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVldLAotCQkJICAgICAgIHNpemVvZihjcnlwdG8ucnhfbWljKSk7Ci0JfSBlbHNlCi0JCW1lbWNweSgmY3J5cHRvLmtleSwgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7Ci0KLQkvKgotCSAqIERpc2NvdmVyIHRoZSBBc3NvY2lhdGlvbiBJRCBmcm9tIG1hYzgwMjExLgotCSAqIFNvbWUgZHJpdmVycyBuZWVkIHRoaXMgaW5mb3JtYXRpb24gd2hlbiB1cGRhdGluZyB0aGUKLQkgKiBoYXJkd2FyZSBrZXkgKGVpdGhlciBhZGRpbmcgb3IgcmVtb3ZpbmcpLgotCSAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEoaHcsIGFkZHJlc3MpOwotCWlmIChzdGEpCisJaWYgKHN0YSkgeworCQkvKiBzb21lIGRyaXZlcnMgbmVlZCB0aGUgQUlEICovCiAJCWNyeXB0by5haWQgPSBzdGEtPmFpZDsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwkJY3J5cHRvLmFkZHJlc3MgPSBzdGEtPmFkZHI7CisJfSBlbHNlCisJCWNyeXB0by5hZGRyZXNzID0gYmNhc3RfYWRkcjsKIAorCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9US0lQKQorCQltZW1jcHlfdGtpcCgmY3J5cHRvLCAma2V5LT5rZXlbMF0sIGtleS0+a2V5bGVuKTsKKwllbHNlCisJCW1lbWNweSgmY3J5cHRvLmtleSwgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7CiAJLyoKIAkgKiBFYWNoIEJTUyBoYXMgYSBtYXhpbXVtIG9mIDQgc2hhcmVkIGtleXMuCiAJICogU2hhcmVkIGtleSBpbmRleCB2YWx1ZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggZDUyYjIyYi4uZTYxNmMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaAppbmRleCA5YzBhNGQ3Li4xNWExMjQ4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDA3MDlkZWMuLmE1NjY0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTQ4LDIwICsxNDgsMTA1IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Jfc2VxKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJCQkgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodHhfaW5mby0+Y29udHJvbC52aWYpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgfHwKKwkgICAgdW5saWtlbHkoIXR4X2luZm8tPmNvbnRyb2wudmlmKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBIYXJkd2FyZSBzaG91bGQgaW5zZXJ0IHNlcXVlbmNlIGNvdW50ZXIuCisJICogRklYTUU6IFdlIGluc2VydCBhIHNvZnR3YXJlIHNlcXVlbmNlIGNvdW50ZXIgZmlyc3QgZm9yCisJICogaGFyZHdhcmUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgaGFyZHdhcmUgc2VxdWVuY2UgY291bnRpbmcuCisJICoKKwkgKiBUaGlzIGlzIHdyb25nIGJlY2F1c2UgYmVhY29ucyBhcmUgbm90IGdldHRpbmcgc2VxdWVuY2UKKwkgKiBudW1iZXJzIGFzc2lnbmVkIHByb3Blcmx5LgorCSAqCisJICogQSBzZWNvbmRhcnkgcHJvYmxlbSBleGlzdHMgZm9yIGRyaXZlcnMgdGhhdCBjYW5ub3QgdG9nZ2xlCisJICogc2VxdWVuY2UgY291bnRpbmcgcGVyLWZyYW1lLCBzaW5jZSB0aG9zZSB3aWxsIG92ZXJyaWRlIHRoZQorCSAqIHNlcXVlbmNlIGNvdW50ZXIgZ2l2ZW4gYnkgbWFjODAyMTEuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKKworCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKSkKKwkJaW50Zi0+c2Vxbm8gKz0gMHgxMDsKKwloZHItPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoaW50Zi0+c2Vxbm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+c2VxbG9jaywgaXJxZmxhZ3MpOworCisJX19zZXRfYml0KEVOVFJZX1RYRF9HRU5FUkFURV9TRVEsICZ0eGRlc2MtPmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3JfcGxjcChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkJICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlID0gJnR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF07CisJdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoOworCXVuc2lnbmVkIGludCBkdXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgcmVzaWR1YWw7CisKKwkvKiBEYXRhIGxlbmd0aCArIENSQyArIENyeXB0byBvdmVyaGVhZCAoSVYvRUlWL0lDVi9NSUMpICovCisJZGF0YV9sZW5ndGggPSBlbnRyeS0+c2tiLT5sZW4gKyA0OworCWRhdGFfbGVuZ3RoICs9IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChydDJ4MDBkZXYsIGVudHJ5LT5za2IpOworCisJLyoKKwkgKiBQTENQIHNldHVwCisJICogTGVuZ3RoIGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gT0ZETS9DQ0sgcmF0ZS4KKwkgKi8KKwl0eGRlc2MtPnNpZ25hbCA9IGh3cmF0ZS0+cGxjcDsKKwl0eGRlc2MtPnNlcnZpY2UgPSAweDA0OworCisJaWYgKGh3cmF0ZS0+ZmxhZ3MgJiBERVZfUkFURV9PRkRNKSB7CisJCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZGF0YV9sZW5ndGggPj4gNikgJiAweDNmOworCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkYXRhX2xlbmd0aCAmIDB4M2Y7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ29udmVydCBsZW5ndGggdG8gbWljcm9zZWNvbmRzLgorCQkgKi8KKwkJcmVzaWR1YWwgPSBHRVRfRFVSQVRJT05fUkVTKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOworCQlkdXJhdGlvbiA9IEdFVF9EVVJBVElPTihkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKKworCQlpZiAocmVzaWR1YWwgIT0gMCkgeworCQkJZHVyYXRpb24rKzsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBMZW5ndGggRXh0ZW5zaW9uCisJCQkgKi8KKwkJCWlmIChod3JhdGUtPmJpdHJhdGUgPT0gMTEwICYmIHJlc2lkdWFsIDw9IDMwKQorCQkJCXR4ZGVzYy0+c2VydmljZSB8PSAweDgwOworCQl9CisKKwkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7CisJCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGR1cmF0aW9uICYgMHhmZjsKKworCQkvKgorCQkgKiBXaGVuIHByZWFtYmxlIGlzIGVuYWJsZWQgd2Ugc2hvdWxkIHNldCB0aGUKKwkJICogcHJlYW1ibGUgYml0IGZvciB0aGUgc2lnbmFsLgorCQkgKi8KKwkJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQorCQkJdHhkZXNjLT5zaWduYWwgfD0gMHgwODsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJCSAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKillbnRyeS0+c2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlID0gJnR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0KIAkgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKHJ0MngwMGRldi0+aHcsIHR4X2luZm8pOwogCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlOwotCXVuc2lnbmVkIGludCBkYXRhX2xlbmd0aDsKLQl1bnNpZ25lZCBpbnQgZHVyYXRpb247Ci0JdW5zaWduZWQgaW50IHJlc2lkdWFsOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKIAltZW1zZXQodHhkZXNjLCAwLCBzaXplb2YoKnR4ZGVzYykpOwogCkBAIC0xNzMsMjcgKzI1OCwxMiBAQAogCXR4ZGVzYy0+Y3dfbWF4ID0gZW50cnktPnF1ZXVlLT5jd19tYXg7CiAJdHhkZXNjLT5haWZzID0gZW50cnktPnF1ZXVlLT5haWZzOwogCi0JLyogRGF0YSBsZW5ndGggKyBDUkMgKi8KLQlkYXRhX2xlbmd0aCA9IGVudHJ5LT5za2ItPmxlbiArIDQ7Ci0KIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBmcmFtZSBpcyB0byBiZSBhY2tlZC4KIAkgKi8KIAlpZiAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9BQ0ssICZ0eGRlc2MtPmZsYWdzKTsKIAotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSAmJgotCSAgICAhZW50cnktPnNrYi0+ZG9fbm90X2VuY3J5cHQpIHsKLQkJLyogQXBwbHkgY3J5cHRvIHNwZWNpZmljIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gKi8KLQkJcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCB0eGRlc2MpOwotCi0JCS8qCi0JCSAqIEV4dGVuZCBmcmFtZSBsZW5ndGggdG8gaW5jbHVkZSBhbGwgZW5jcnlwdGlvbiBvdmVyaGVhZAotCQkgKiB0aGF0IHdpbGwgYmUgYWRkZWQgYnkgdGhlIGhhcmR3YXJlLgotCQkgKi8KLQkJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHR4X2luZm8pOwotCX0KLQogCS8qCiAJICogQ2hlY2sgaWYgdGhpcyBpcyBhIFJUUy9DVFMgZnJhbWUKIAkgKi8KQEAgLTIzNyw4NiArMzA3LDI3IEBACiAJICogU2V0IGlmcyB0byBJRlNfU0lGUyB3aGVuIHRoZSB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZnJhZ21lbnQsCiAJICogb3IgdGhpcyBmcmFnbWVudCBjYW1lIGFmdGVyIFJUUy9DVFMuCiAJICovCi0JaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MtPmZsYWdzKSkgewotCQl0eGRlc2MtPmlmcyA9IElGU19TSUZTOwotCX0gZWxzZSBpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKSB7CisJaWYgKCh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpICYmCisJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncykpIHsKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpOwogCQl0eGRlc2MtPmlmcyA9IElGU19CQUNLT0ZGOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXR4ZGVzYy0+aWZzID0gSUZTX1NJRlM7Ci0JfQogCiAJLyoKLQkgKiBIYXJkd2FyZSBzaG91bGQgaW5zZXJ0IHNlcXVlbmNlIGNvdW50ZXIuCi0JICogRklYTUU6IFdlIGluc2VydCBhIHNvZnR3YXJlIHNlcXVlbmNlIGNvdW50ZXIgZmlyc3QgZm9yCi0JICogaGFyZHdhcmUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgaGFyZHdhcmUgc2VxdWVuY2UgY291bnRpbmcuCi0JICoKLQkgKiBUaGlzIGlzIHdyb25nIGJlY2F1c2UgYmVhY29ucyBhcmUgbm90IGdldHRpbmcgc2VxdWVuY2UKLQkgKiBudW1iZXJzIGFzc2lnbmVkIHByb3Blcmx5LgotCSAqCi0JICogQSBzZWNvbmRhcnkgcHJvYmxlbSBleGlzdHMgZm9yIGRyaXZlcnMgdGhhdCBjYW5ub3QgdG9nZ2xlCi0JICogc2VxdWVuY2UgY291bnRpbmcgcGVyLWZyYW1lLCBzaW5jZSB0aG9zZSB3aWxsIG92ZXJyaWRlIHRoZQotCSAqIHNlcXVlbmNlIGNvdW50ZXIgZ2l2ZW4gYnkgbWFjODAyMTEuCi0JICovCi0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7Ci0JCWlmIChsaWtlbHkodHhfaW5mby0+Y29udHJvbC52aWYpKSB7Ci0JCQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGY7Ci0KLQkJCWludGYgPSB2aWZfdG9faW50Zih0eF9pbmZvLT5jb250cm9sLnZpZik7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7Ci0KLQkJCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKSkKLQkJCQlpbnRmLT5zZXFubyArPSAweDEwOwotCQkJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKLQkJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoaW50Zi0+c2Vxbm8pOwotCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7Ci0KLQkJCV9fc2V0X2JpdChFTlRSWV9UWERfR0VORVJBVEVfU0VRLCAmdHhkZXNjLT5mbGFncyk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFBMQ1Agc2V0dXAKLQkgKiBMZW5ndGggY2FsY3VsYXRpb24gZGVwZW5kcyBvbiBPRkRNL0NDSyByYXRlLgorCSAqIERldGVybWluZSByYXRlIG1vZHVsYXRpb24uCiAJICovCiAJaHdyYXRlID0gcnQyeDAwX2dldF9yYXRlKHJhdGUtPmh3X3ZhbHVlKTsKLQl0eGRlc2MtPnNpZ25hbCA9IGh3cmF0ZS0+cGxjcDsKLQl0eGRlc2MtPnNlcnZpY2UgPSAweDA0OworCXR4ZGVzYy0+cmF0ZV9tb2RlID0gUkFURV9NT0RFX0NDSzsKKwlpZiAoaHdyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pCisJCXR4ZGVzYy0+cmF0ZV9tb2RlID0gUkFURV9NT0RFX09GRE07CiAKLQlpZiAoaHdyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pIHsKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKTsKLQotCQl0eGRlc2MtPmxlbmd0aF9oaWdoID0gKGRhdGFfbGVuZ3RoID4+IDYpICYgMHgzZjsKLQkJdHhkZXNjLT5sZW5ndGhfbG93ID0gZGF0YV9sZW5ndGggJiAweDNmOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIENvbnZlcnQgbGVuZ3RoIHRvIG1pY3Jvc2Vjb25kcy4KLQkJICovCi0JCXJlc2lkdWFsID0gR0VUX0RVUkFUSU9OX1JFUyhkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKLQkJZHVyYXRpb24gPSBHRVRfRFVSQVRJT04oZGF0YV9sZW5ndGgsIGh3cmF0ZS0+Yml0cmF0ZSk7Ci0KLQkJaWYgKHJlc2lkdWFsICE9IDApIHsKLQkJCWR1cmF0aW9uKys7Ci0KLQkJCS8qCi0JCQkgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgTGVuZ3RoIEV4dGVuc2lvbgotCQkJICovCi0JCQlpZiAoaHdyYXRlLT5iaXRyYXRlID09IDExMCAmJiByZXNpZHVhbCA8PSAzMCkKLQkJCQl0eGRlc2MtPnNlcnZpY2UgfD0gMHg4MDsKLQkJfQotCi0JCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZHVyYXRpb24gPj4gOCkgJiAweGZmOwotCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkdXJhdGlvbiAmIDB4ZmY7Ci0KLQkJLyoKLQkJICogV2hlbiBwcmVhbWJsZSBpcyBlbmFibGVkIHdlIHNob3VsZCBzZXQgdGhlCi0JCSAqIHByZWFtYmxlIGJpdCBmb3IgdGhlIHNpZ25hbC4KLQkJICovCi0JCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKLQkJCXR4ZGVzYy0+c2lnbmFsIHw9IDB4MDg7Ci0JfQorCS8qCisJICogQXBwbHkgVFggZGVzY3JpcHRvciBoYW5kbGluZyBieSBjb21wb25lbnRzCisJICovCisJcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCB0eGRlc2MpOworCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3NlcShlbnRyeSwgdHhkZXNjKTsKKwlydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9wbGNwKGVudHJ5LCB0eGRlc2MsIGh3cmF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKQEAgLTQwMyw3ICs0MTQsNyBAQAogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKIAkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSkgewotCQlpZiAodGVzdF9iaXQoQ09ORklHX0NSWVBUT19DT1BZX0lWLCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKIAkJCXJ0MngwMGNyeXB0b190eF9jb3B5X2l2KHNrYiwgaXZfbGVuKTsKIAkJZWxzZQogCQkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsIGl2X2xlbik7CkBAIC00MzIsNyArNDQzLDggQEAKIH0KIAogaW50IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgY29uc3QgYm9vbCBlbmFibGVfYmVhY29uKQogewogCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwpAQCAtNDQyLDYgKzQ1NCwxMSBAQAogCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCisJaWYgKCFlbmFibGVfYmVhY29uKSB7CisJCXJ0MngwMGRldi0+b3BzLT5saWItPmtpbGxfdHhfcXVldWUocnQyeDAwZGV2LCBRSURfQkVBQ09OKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaW50Zi0+YmVhY29uLT5za2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChydDJ4MDBkZXYtPmh3LCB2aWYpOwogCWlmICghaW50Zi0+YmVhY29uLT5za2IpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDkwLDYgKzUwNyw5IEBACiB7CiAJaW50IGF0aW0gPSB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKKwlpZiAocXVldWUgPT0gUUlEX1JYKQorCQlyZXR1cm4gcnQyeDAwZGV2LT5yeDsKKwogCWlmIChxdWV1ZSA8IHJ0MngwMGRldi0+b3BzLT50eF9xdWV1ZXMgJiYgcnQyeDAwZGV2LT50eCkKIAkJcmV0dXJuICZydDJ4MDBkZXYtPnR4W3F1ZXVlXTsKIApAQCAtNTY2LDYgKzU4NiwxNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CiB9CiAKK3ZvaWQgcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisKKwl0eGFsbF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWxsX3R4X3F1ZXVlKHJ0MngwMGRldiwgcXVldWUtPnFpZCk7Cit9CisKIHZvaWQgcnQyeDAwcXVldWVfaW5pdF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCmluZGV4IDI4MjkzNzEuLjk3ZTJhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTU4LDYgKzE1OCwxNCBAQAogfTsKIAogLyoqCisgKiBSWERPTkVfU0lHTkFMX01BU0sgLSBEZWZpbmUgdG8gbWFzayBvZmYgYWxsICZyeGRvbmVfZW50cnlfZGVzY19mbGFncyBmbGFncworICogZXhjZXB0IGZvciB0aGUgUlhET05FX1NJR05BTF8qIGZsYWdzLiBUaGlzIGlzIHVzZWZ1bCB0byBjb252ZXJ0IHRoZSBkZXZfZmxhZ3MKKyAqIGZyb20gJnJ4ZG9uZV9lbnRyeV9kZXNjIHRvIGEgc2lnbmFsIHZhbHVlIHR5cGUuCisgKi8KKyNkZWZpbmUgUlhET05FX1NJR05BTF9NQVNLIFwKKyAgICAgICAoIFJYRE9ORV9TSUdOQUxfUExDUCB8IFJYRE9ORV9TSUdOQUxfQklUUkFURSApCisKKy8qKgogICogc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjOiBSWCBFbnRyeSBkZXNjcmlwdG9yCiAgKgogICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIHJlYWQgZnJvbSB0aGUgUlggZnJhbWUgZGVzY3JpcHRvci4KQEAgLTE2NSw2ICsxNzMsNyBAQAogICogQHRpbWVzdGFtcDogUlggVGltZXN0YW1wCiAgKiBAc2lnbmFsOiBTaWduYWwgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgogICogQHJzc2k6IFJTU0kgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgorICogQG5vaXNlOiBNZWFzdXJlZCBub2lzZSBkdXJpbmcgZnJhbWUgcmVjZXB0aW9uLgogICogQHNpemU6IERhdGEgc2l6ZSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCiAgKiBAZmxhZ3M6IE1BQzgwMjExIHJlY2VpdmUgZmxhZ3MgKFNlZSAmZW51bSBtYWM4MDIxMV9yeF9mbGFncykuCiAgKiBAZGV2X2ZsYWdzOiBSYWxpbmsgcmVjZWl2ZSBmbGFncyAoU2VlICZlbnVtIHJ4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzKS4KQEAgLTE3Nyw2ICsxODYsNyBAQAogCXU2NCB0aW1lc3RhbXA7CiAJaW50IHNpZ25hbDsKIAlpbnQgcnNzaTsKKwlpbnQgbm9pc2U7CiAJaW50IHNpemU7CiAJaW50IGZsYWdzOwogCWludCBkZXZfZmxhZ3M7CkBAIC0yMjIsNyArMjMyLDYgQEAKICAqCiAgKiBARU5UUllfVFhEX1JUU19GUkFNRTogVGhpcyBmcmFtZSBpcyBhIFJUUyBmcmFtZS4KICAqIEBFTlRSWV9UWERfQ1RTX0ZSQU1FOiBUaGlzIGZyYW1lIGlzIGEgQ1RTLXRvLXNlbGYgZnJhbWUuCi0gKiBARU5UUllfVFhEX09GRE1fUkFURTogVGhpcyBmcmFtZSBpcyBzZW5kIG91dCB3aXRoIGFuIE9GRE0gcmF0ZS4KICAqIEBFTlRSWV9UWERfR0VORVJBVEVfU0VROiBUaGlzIGZyYW1lIHJlcXVpcmVzIHNlcXVlbmNlIGNvdW50ZXIuCiAgKiBARU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5UOiBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZS4KICAqIEBFTlRSWV9UWERfTU9SRV9GUkFHOiBUaGlzIGZyYW1lIGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgZnJhZ21lbnQuCkBAIC0yMzgsNyArMjQ3LDYgQEAKIGVudW0gdHhlbnRyeV9kZXNjX2ZsYWdzIHsKIAlFTlRSWV9UWERfUlRTX0ZSQU1FLAogCUVOVFJZX1RYRF9DVFNfRlJBTUUsCi0JRU5UUllfVFhEX09GRE1fUkFURSwKIAlFTlRSWV9UWERfR0VORVJBVEVfU0VRLAogCUVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwKIAlFTlRSWV9UWERfTU9SRV9GUkFHLApAQCAtMjYzLDYgKzI3MSw3IEBACiAgKiBAbGVuZ3RoX2xvdzogUExDUCBsZW5ndGggbG93IHdvcmQuCiAgKiBAc2lnbmFsOiBQTENQIHNpZ25hbC4KICAqIEBzZXJ2aWNlOiBQTENQIHNlcnZpY2UuCisgKiBAcmF0ZV9tb2RlOiBSYXRlIG1vZGUgKFNlZSBAZW51bSByYXRlX21vZHVsYXRpb24pLgogICogQHJldHJ5X2xpbWl0OiBNYXggbnVtYmVyIG9mIHJldHJpZXMuCiAgKiBAYWlmczogQUlGUyB2YWx1ZS4KICAqIEBpZnM6IElGUyB2YWx1ZS4KQEAgLTI4Miw2ICsyOTEsOCBAQAogCXUxNiBzaWduYWw7CiAJdTE2IHNlcnZpY2U7CiAKKwl1MTYgcmF0ZV9tb2RlOworCiAJc2hvcnQgcmV0cnlfbGltaXQ7CiAJc2hvcnQgYWlmczsKIAlzaG9ydCBpZnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKaW5kZXggYzJmYmE3Yy4uODYxMzIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyNSw2ICsxMjUsMjYgQEAKIH07CiAKIC8qCisgKiBSYXRlIG1vZHVsYXRpb25zCisgKi8KK2VudW0gcmF0ZV9tb2R1bGF0aW9uIHsKKwlSQVRFX01PREVfQ0NLID0gMCwKKwlSQVRFX01PREVfT0ZETSA9IDEsCisJUkFURV9NT0RFX0hUX01JWCA9IDIsCisJUkFURV9NT0RFX0hUX0dSRUVORklFTEQgPSAzLAorfTsKKworLyoKKyAqIEZpcm13YXJlIHZhbGlkYXRpb24gZXJyb3IgY29kZXMKKyAqLworZW51bSBmaXJtd2FyZV9lcnJvcnMgeworCUZXX09LLAorCUZXX0JBRF9DUkMsCisJRldfQkFEX0xFTkdUSCwKKwlGV19CQURfVkVSU0lPTiwKK307CisKKy8qCiAgKiBSZWdpc3RlciBoYW5kbGVycy4KICAqIFdlIHN0b3JlIHRoZSBwb3NpdGlvbiBvZiBhIHJlZ2lzdGVyIGZpZWxkIGluc2lkZSBhIGZpZWxkIHN0cnVjdHVyZSwKICAqIFRoaXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIGFuZCByZWFkaW5nIGEgY2VydGFpbiBmaWVsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCmluZGV4IDMyOThjYWUuLmI2ZDRjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSw3MyArMjUsMzAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCiAKLXN0YXRpYyBpbnQgcnQyeDAwcmZraWxsX3RvZ2dsZV9yYWRpbyh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKK3N0YXRpYyB2b2lkIHJ0MngwMHJma2lsbF9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWlmICh1bmxpa2VseSghcnQyeDAwZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIE9ubHkgY29udGludWUgaWYgdGhlcmUgYXJlIGVuYWJsZWQgaW50ZXJmYWNlcy4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JaWYgKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpIHsKLQkJSU5GTyhydDJ4MDBkZXYsICJSRktJTEwgZXZlbnQ6IGVuYWJsaW5nIHJhZGlvLlxuIik7Ci0JCWNsZWFyX2JpdChERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJcmV0dmFsID0gcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCX0gZWxzZSBpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCkgewotCQlJTkZPKHJ0MngwMGRldiwgIlJGS0lMTCBldmVudDogZGlzYWJsaW5nIHJhZGlvLlxuIik7Ci0JCXNldF9iaXQoREVWSUNFX1NUQVRFX0RJU0FCTEVEX1JBRElPX0hXLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCXJ0MngwMGxpYl9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7Ci0JfSBlbHNlIHsKLQkJV0FSTklORyhydDJ4MDBkZXYsICJSRktJTEwgZXZlbnQ6IHVua25vd24gc3RhdGUgJWQuXG4iLCBzdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBydDJ4MDByZmtpbGxfZ2V0X3N0YXRlKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKLQotCS8qCi0JICogcmZraWxsX3BvbGwgcmVwb3J0cyAxIHdoZW4gdGhlIGtleSBoYXMgYmVlbiBwcmVzc2VkIGFuZCB0aGUKLQkgKiByYWRpbyBzaG91bGQgYmUgYmxvY2tlZC4KLQkgKi8KLQkqc3RhdGUgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpID8KLQkgICAgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCA6IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwcmZraWxsX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIHJma2lsbF93b3JrLndvcmspOwotCWVudW0gcmZraWxsX3N0YXRlIHN0YXRlOworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBwb2xsX2Rldi0+cHJpdmF0ZTsKKwlpbnQgc3RhdGUsIG9sZF9zdGF0ZTsKIAogCWlmICghdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkgfHwKIAkgICAgIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIFBvbGwgbGF0ZXN0IHN0YXRlIGFuZCByZXBvcnQgaXQgdG8gcmZraWxsIHdobyBzaG91bGQgc29ydAotCSAqIG91dCBpZiB0aGUgc3RhdGUgc2hvdWxkIGJlIHRvZ2dsZWQgb3Igbm90LgorCSAqIFBvbGwgbGF0ZXN0IHN0YXRlLCBpZiB0aGUgc3RhdGUgaXMgZGlmZmVyZW50IHRoZW4gdGhlIHByZXZpb3VzIHN0YXRlLAorCSAqIHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBpbnB1dCBldmVudC4KIAkgKi8KLQlpZiAoIXJ0MngwMHJma2lsbF9nZXRfc3RhdGUocnQyeDAwZGV2LCAmc3RhdGUpKQotCQlyZmtpbGxfZm9yY2Vfc3RhdGUocnQyeDAwZGV2LT5yZmtpbGwsIHN0YXRlKTsKKwlzdGF0ZSA9ICEhcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KTsKKwlvbGRfc3RhdGUgPSAhIXRlc3RfYml0KFJGS0lMTF9TVEFURV9CTE9DS0VELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwogCi0JcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKLQkJCSAgICZydDJ4MDBkZXYtPnJma2lsbF93b3JrLCBSRktJTExfUE9MTF9JTlRFUlZBTCk7CisJaWYgKG9sZF9zdGF0ZSAhPSBzdGF0ZSkgeworCQlpbnB1dF9yZXBvcnRfc3dpdGNoKHBvbGxfZGV2LT5pbnB1dCwgU1dfUkZLSUxMX0FMTCwgc3RhdGUpOworCQljaGFuZ2VfYml0KFJGS0lMTF9TVEFURV9CTE9DS0VELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOworCX0KIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEwMCw4ICs1Nyw4IEBACiAJICAgIHRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQlpZiAocmZraWxsX3JlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcmZraWxsIGhhbmRsZXIuXG4iKTsKKwlpZiAoaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2RldikpIHsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHBvbGxlZCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA5LDEwICs2NiwxMCBAQAogCiAJLyoKIAkgKiBGb3JjZSBpbml0aWFsIHBvbGwgd2hpY2ggd2lsbCBkZXRlY3QgdGhlIGluaXRpYWwgZGV2aWNlIHN0YXRlLAotCSAqIGFuZCBjb3JyZWN0bHkgc2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgcmZraWxsIGxheWVyIGFib3V0IHRoaXMKKwkgKiBhbmQgY29ycmVjdGx5IHNlbmRzIHRoZSBzaWduYWwgdG8gdGhlIGlucHV0IGxheWVyIGFib3V0IHRoaXMKIAkgKiBzdGF0ZS4KIAkgKi8KLQlydDJ4MDByZmtpbGxfcG9sbCgmcnQyeDAwZGV2LT5yZmtpbGxfd29yay53b3JrKTsKKwlydDJ4MDByZmtpbGxfcG9sbChydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEyMSw1MiArNzgsNTAgQEAKIAkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+cmZraWxsX3dvcmspOwotCi0JcmZraWxsX3VucmVnaXN0ZXIocnQyeDAwZGV2LT5yZmtpbGwpOworCWlucHV0X3VucmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7CiAKIAlfX2NsZWFyX2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aXBoeV9kZXYocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldjsKIAotCWlmICh0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQorCWlmICh0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpIHx8CisJICAgICF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuOwogCi0JcnQyeDAwZGV2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2LCBSRktJTExfVFlQRV9XTEFOKTsKLQlpZiAoIXJ0MngwMGRldi0+cmZraWxsKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZmtpbGwgaGFuZGxlci5cbiIpOworCXBvbGxfZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOworCWlmICghcG9sbF9kZXYpIHsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBvbGxlZCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCXBvbGxfZGV2LT5wcml2YXRlID0gcnQyeDAwZGV2OworCXBvbGxfZGV2LT5wb2xsID0gcnQyeDAwcmZraWxsX3BvbGw7CisJcG9sbF9kZXYtPnBvbGxfaW50ZXJ2YWwgPSBSRktJTExfUE9MTF9JTlRFUlZBTDsKKworCXBvbGxfZGV2LT5pbnB1dC0+bmFtZSA9IHJ0MngwMGRldi0+b3BzLT5uYW1lOworCXBvbGxfZGV2LT5pbnB1dC0+cGh5cyA9IHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXBvbGxfZGV2LT5pbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVuZG9yID0gMHgxODE0OworCXBvbGxfZGV2LT5pbnB1dC0+aWQucHJvZHVjdCA9IHJ0MngwMGRldi0+Y2hpcC5ydDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlcnNpb24gPSBydDJ4MDBkZXYtPmNoaXAucmV2OworCXBvbGxfZGV2LT5pbnB1dC0+ZGV2LnBhcmVudCA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJcG9sbF9kZXYtPmlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9TVyk7CisJcG9sbF9kZXYtPmlucHV0LT5zd2JpdFswXSA9IEJJVChTV19SRktJTExfQUxMKTsKKworCXJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2ID0gcG9sbF9kZXY7CisKIAlfX3NldF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKLQotCXJ0MngwMGRldi0+cmZraWxsLT5uYW1lID0gcnQyeDAwZGV2LT5vcHMtPm5hbWU7Ci0JcnQyeDAwZGV2LT5yZmtpbGwtPmRhdGEgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHJ0MngwMHJma2lsbF90b2dnbGVfcmFkaW87Ci0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7Ci0JCXJ0MngwMGRldi0+cmZraWxsLT5nZXRfc3RhdGUgPSBydDJ4MDByZmtpbGxfZ2V0X3N0YXRlOwotCQlydDJ4MDBkZXYtPnJma2lsbC0+c3RhdGUgPQotCQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KSA/Ci0JCQkgICAgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCA6IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0JfSBlbHNlIHsKLQkJcnQyeDAwZGV2LT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQl9Ci0KLQlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5yZmtpbGxfd29yaywgcnQyeDAwcmZraWxsX3BvbGwpOwotCi0JcmV0dXJuOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQorCWlmICghX190ZXN0X2FuZF9jbGVhcl9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwKKwkJCQkgICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5yZmtpbGxfd29yayk7Ci0KLQlyZmtpbGxfZnJlZShydDJ4MDBkZXYtPnJma2lsbCk7Ci0JcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOworCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7CisJcnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IDBiMjlkNzYuLjdkNTBjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOTYsNiArMjk2LDQxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfa2lja190eF9xdWV1ZSk7CiAKK3ZvaWQgcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcWlkKTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXY7CisJdW5zaWduZWQgaW50IGk7CisJYm9vbCBraWxsX2d1YXJkOworCisJLyoKKwkgKiBXaGVuIGtpbGxpbmcgdGhlIGJlYWNvbiBxdWV1ZSwgd2UgbXVzdCBhbHNvIGtpbGwKKwkgKiB0aGUgYmVhY29uIGd1YXJkIGJ5dGUuCisJICovCisJa2lsbF9ndWFyZCA9CisJICAgIChxaWQgPT0gUUlEX0JFQUNPTikgJiYKKwkgICAgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKTsKKworCS8qCisJICogQ2FuY2VsIGFsbCBlbnRyaWVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQllbnRyeV9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQl1c2Jfa2lsbF91cmIoZW50cnlfcHJpdi0+dXJiKTsKKworCQkvKgorCQkgKiBLaWxsIGd1YXJkaWFuIHVyYiAoaWYgcmVxdWlyZWQgYnkgZHJpdmVyKS4KKwkJICovCisJCWlmIChraWxsX2d1YXJkKSB7CisJCQliY25fcHJpdiA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKTsKKwogLyoKICAqIFJYIGRhdGEgaGFuZGxlcnMuCiAgKi8KQEAgLTMzOCwzNSArMzczLDE0IEBACiAgKi8KIHZvaWQgcnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXY7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXY7Ci0Jc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwotCXVuc2lnbmVkIGludCBpOwotCiAJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX1JYX0NPTlRST0wsIDAsIDAsCiAJCQkJICAgIFJFR0lTVEVSX1RJTUVPVVQpOwogCiAJLyoKLQkgKiBDYW5jZWwgYWxsIHF1ZXVlcy4KKwkgKiBUaGUgVVNCIHZlcnNpb24gb2Yga2lsbF90eF9xdWV1ZSBhbHNvIHdvcmtzCisJICogb24gdGhlIFJYIHF1ZXVlLgogCSAqLwotCXF1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKLQkJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7Ci0JCQllbnRyeV9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJdXNiX2tpbGxfdXJiKGVudHJ5X3ByaXYtPnVyYik7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEtpbGwgZ3VhcmRpYW4gdXJiIChpZiByZXF1aXJlZCBieSBkcml2ZXIpLgotCSAqLwotCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPmJjbi0+bGltaXQ7IGkrKykgewotCQliY25fcHJpdiA9IHJ0MngwMGRldi0+YmNuLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKLQkJaWYgKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpCi0JCQl1c2Jfa2lsbF91cmIoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYik7Ci0JfQorCXJ0MngwMGRldi0+b3BzLT5saWItPmtpbGxfdHhfcXVldWUocnQyeDAwZGV2LCBRSURfUlgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKaW5kZXggMmJkNGFjOC4uYmQyZDU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQxOSw2ICs0MTksMTcgQEAKIHZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpOwogCisvKioKKyAqIHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlIC0gS2lsbCBkYXRhIHF1ZXVlCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgorICogQHFpZDogRGF0YSBxdWV1ZSB0byBraWxsCisgKgorICogVGhpcyB3aWxsIHdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBvZiB0aGUgcXVldWUgYW5kIGtpbGwgYWxsCisgKiBwcmV2aW91c2x5IGtpY2tlZCBmcmFtZXMgYmVmb3JlIHRoZXkgY2FuIGJlIHNlbmQuCisgKi8KK3ZvaWQgcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKTsKKwogLyoKICAqIERldmljZSBpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKaW5kZXggOTg3ZTg5MC4uMmNhOGI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTIzLDkgKzEyMyw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTE0NiwxMiArMTQzLDYgQEAKIAltdXRleF91bmxvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIH0KIAotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gcnQ2MXBjaV9sZWRfYnJpZ2h0bmVzcygpCi0gKiBtYWtlIGdjYyBoYXBweSBieSBwbGFjaW5nIHRoaXMgZnVuY3Rpb24gaW5zaWRlIHRoZQotICogc2FtZSBpZmRlZiBzdGF0ZW1lbnQgYXMgdGhlIGNhbGxlci4KLSAqLwogc3RhdGljIHZvaWQgcnQ2MXBjaV9tY3VfcmVxdWVzdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCWNvbnN0IHU4IGNvbW1hbmQsIGNvbnN0IHU4IHRva2VuLAogCQkJCWNvbnN0IHU4IGFyZzAsIGNvbnN0IHU4IGFyZzEpCkBAIC0xODAsNyArMTcxLDYgQEAKIAltdXRleF91bmxvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogfQotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KIAogc3RhdGljIHZvaWQgcnQ2MXBjaV9lZXByb21yZWdpc3Rlcl9yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKIHsKQEAgLTk2Nyw2ICs5NTcsNTAgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAxMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCA1KTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBTT0ZUX1JFU0VUX0NTUiwgMHgwMDAwMDAwNSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElPX0NOVExfQ1NSLCAweDAwMDAwMDFjKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUENJX1VTRUNfQ1NSLCAweDAwMDAwMDYwKTsKKworCQlydDYxcGNpX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1NMRUVQLCAweGZmLCAwLCAwKTsKKwl9IGVsc2UgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU09GVF9SRVNFVF9DU1IsIDB4MDAwMDAwMDcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJT19DTlRMX0NTUiwgMHgwMDAwMDAxOCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBDSV9VU0VDX0NTUiwgMHgwMDAwMDAyMCk7CisKKwkJcnQ2MXBjaV9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9XQUtFVVAsIDB4ZmYsIDAsIDApOworCX0KK30KKwogc3RhdGljIHZvaWQgcnQ2MXBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTk4NCw2ICsxMDE4LDggQEAKIAkJcnQ2MXBjaV9jb25maWdfcmV0cnlfbGltaXQocnQyeDAwZGV2LCBsaWJjb25mKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQogCQlydDYxcGNpX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQ2MXBjaV9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTEwMDcsMjEgKzEwNDMsMjggQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSMV9GQUxTRV9DQ0FfRVJST1IpOwogfQogCi1zdGF0aWMgdm9pZCBydDYxcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQ2MXBjaV9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4MjApOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDIwOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgIT0gdmdjX2xldmVsKSB7CisJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZnY19sZXZlbCk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHZnY19sZXZlbDsKKwkJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NjFwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQ2MXBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JaW50IHJzc2kgPSBydDJ4MDBfZ2V0X2xpbmtfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQl1OCByMTc7CisJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAl1OCB1cF9ib3VuZDsKIAl1OCBsb3dfYm91bmQ7CiAKLQlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCiAJLyoKIAkgKiBEZXRlcm1pbmUgcjE3IGJvdW5kcy4KIAkgKi8KQEAgLTEwNTEsMzggKzEwOTQsMzIgQEAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgdmVyeSBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC0zNSkgewotCQlpZiAocjE3ICE9IDB4NjApCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDYwKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtMzUpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg2MCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3Igc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNTgpIHsKLQkJaWYgKHIxNyAhPSB1cF9ib3VuZCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNTgpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIG1pZGRsZS1zaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC02NikgewotCQlsb3dfYm91bmQgKz0gMHgxMDsKLQkJaWYgKHIxNyAhPSBsb3dfYm91bmQpCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC02NikgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDEwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBtaWQtUjE3IGZvciBtaWRkbGUgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNzQpIHsKLQkJbG93X2JvdW5kICs9IDB4MDg7Ci0JCWlmIChyMTcgIT0gbG93X2JvdW5kKQotCQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgbG93X2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNzQpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgbG93X2JvdW5kICsgMHgwOCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwOTAsMTIgKzExMjcsMTIgQEAKIAkgKiBTcGVjaWFsIGNhc2U6IENoYW5nZSB1cF9ib3VuZCBiYXNlZCBvbiB0aGUgcnNzaS4KIAkgKiBMb3dlciB1cF9ib3VuZCB3aGVuIHJzc2kgaXMgd2Vha2VyIHRoZW4gLTc0IGRCbS4KIAkgKi8KLQl1cF9ib3VuZCAtPSAyICogKC03NCAtIHJzc2kpOworCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcXVhbC0+cnNzaSk7CiAJaWYgKGxvd19ib3VuZCA+IHVwX2JvdW5kKQogCQl1cF9ib3VuZCA9IGxvd19ib3VuZDsKIAotCWlmIChyMTcgPiB1cF9ib3VuZCkgewotCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB1cF9ib3VuZCk7CisJaWYgKHF1YWwtPnZnY19sZXZlbCA+IHVwX2JvdW5kKSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHVwX2JvdW5kKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTEwNSwxNSArMTE0MiwxMCBAQAogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCB1cF9ib3VuZCkgewotCQlpZiAoKytyMTcgPiB1cF9ib3VuZCkKLQkJCXIxNyA9IHVwX2JvdW5kOwotCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHIxNyA+IGxvd19ib3VuZCkgewotCQlpZiAoLS1yMTcgPCBsb3dfYm91bmQpCi0JCQlyMTcgPSBsb3dfYm91bmQ7Ci0JCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfQorCWlmICgocXVhbC0+ZmFsc2VfY2NhID4gNTEyKSAmJiAocXVhbC0+dmdjX2xldmVsIDwgdXBfYm91bmQpKQorCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCArK3F1YWwtPnZnY19sZXZlbCk7CisJZWxzZSBpZiAoKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCkgJiYgKHF1YWwtPnZnY19sZXZlbCA+IGxvd19ib3VuZCkpCisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIC0tcXVhbC0+dmdjX2xldmVsKTsKIH0KIAogLyoKQEAgLTExNDEsMjUgKzExNzMsMzcgQEAKIAlyZXR1cm4gZndfbmFtZTsKIH0KIAotc3RhdGljIHUxNiBydDYxcGNpX2dldF9maXJtd2FyZV9jcmMoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ2MXBjaV9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CisJdTE2IGZ3X2NyYzsKIAl1MTYgY3JjOwogCiAJLyoKLQkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICogT25seSBzdXBwb3J0IDhrYiBmaXJtd2FyZSBmaWxlcy4KKwkgKi8KKwlpZiAobGVuICE9IDgxOTIpCisJCXJldHVybiBGV19CQURfTEVOR1RIOworCisJLyoKIAkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCiAJICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwogCSAqIGFsZ29yaXRobS4KIAkgKi8KKwlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7CisKKwkvKgorCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKi8KIAljcmMgPSBjcmNfaXR1X3QoMCwgZGF0YSwgbGVuIC0gMik7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCi0JcmV0dXJuIGNyYzsKKwlyZXR1cm4gKGZ3X2NyYyA9PSBjcmMpID8gRldfT0sgOiBGV19CQURfQ1JDOwogfQogCi1zdGF0aWMgaW50IHJ0NjFwY2lfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB2b2lkICpkYXRhLAotCQkJCSBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDYxcGNpX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAJaW50IGk7CiAJdTMyIHJlZzsKQEAgLTE2NTYsMjQgKzE3MDAsMTAgQEAKIAogc3RhdGljIHZvaWQgcnQ2MXBjaV9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyIHJlZzsKLQorCS8qCisJICogRGlzYWJsZSBwb3dlcgorCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMCwgMHgwMDAwMTgxOCk7Ci0KLQkvKgotCSAqIERpc2FibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgMCk7Ci0KLQkvKgotCSAqIENhbmNlbCBSWCBhbmQgVFguCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMCwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMSwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMiwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMywgMSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgcnQ2MXBjaV9zZXRfc3RhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgZW51bSBkZXZfc3RhdGUgc3RhdGUpCkBAIC0xODEyLDcgKzE4NDIsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncykpOwpAQCAtMTg5Niw2ICsxOTI2LDI0IEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJdTMyIHJlZzsKKworCWlmIChxaWQgPT0gUUlEX0JFQUNPTikgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIDApOworCQlyZXR1cm47CisJfQorCisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMCwgKHFpZCA9PSBRSURfQUNfQkUpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMxLCAocWlkID09IFFJRF9BQ19CSykpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIChxaWQgPT0gUUlEX0FDX1ZJKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMywgKHFpZCA9PSBRSURfQUNfVk8pKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKK30KKwogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMjE5NSw3ICsyMjQzLDggQEAKIAlpZiAod29yZCA9PSAweGZmZmYpIHsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VOQUJMRV9ESVZFUlNJVFksIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZLCAwKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1RYX1JYX0ZJWEVELCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1JYX0ZJWEVELCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1RYX0ZJWEVELCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRywgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DQVJEQlVTX0FDQ0VMLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9BLCAwKTsKQEAgLTIzMzksMjQgKzIzODgsMTAgQEAKIAkgKi8KIAlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkgJiYKIAkgICAgIXRlc3RfYml0KENPTkZJR19ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7Ci0JCXN3aXRjaCAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19UWF9SWF9GSVhFRCkpIHsKLQkJY2FzZSAwOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQjsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0E7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQjsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0I7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQTsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0E7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQTsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0I7Ci0JCQlicmVhazsKLQkJfQorCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0KKwkJICAgIEFOVEVOTkFfQSArIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfUlhfRklYRUQpOworCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0KKwkJICAgIEFOVEVOTkFfQiAtIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfVFhfRklYRUQpOwogCiAJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1RYX0RJVkVSU0lUWSkpCiAJCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9TV19ESVZFUlNJVFk7CkBAIC0yNTM0LDcgKzI1NjksOSBAQAogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0yNjMzLDYgKzI2NzAsNyBAQAogCXN0cnVjdCBydDJ4MDBfZmllbGQzMiBmaWVsZDsKIAlpbnQgcmV0dmFsOwogCXUzMiByZWc7CisJdTMyIG9mZnNldDsKIAogCS8qCiAJICogRmlyc3QgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIHJ0MngwMGxpYiwgdGhhdCB3aWxsCkBAIC0yNjQ0LDI0ICsyNjgyLDIzIEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCS8qCisJICogV2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCByZWdpc3RlciBpbml0aWFsaXphdGlvbgorCSAqIGZvciBXTU0gcXVldWVzLworCSAqLworCWlmIChxdWV1ZV9pZHggPj0gNCkKKwkJcmV0dXJuIDA7CisKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlX2lkeCk7CiAKIAkvKiBVcGRhdGUgV01NIFRYT1AgcmVnaXN0ZXIgKi8KLQlpZiAocXVldWVfaWR4IDwgMikgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CisJb2Zmc2V0ID0gQUNfVFhPUF9DU1IwICsgKHNpemVvZih1MzIpICogKCEhKHF1ZXVlX2lkeCAmIDIpKSk7CisJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggJiAxKSAqIDE2OworCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CiAKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCByZWcpOwotCX0gZWxzZSBpZiAocXVldWVfaWR4IDwgNCkgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAtIDIpICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7Ci0KLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCByZWcpOwotCX0KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCiAJLyogVXBkYXRlIFdNTSByZWdpc3RlcnMgKi8KIAlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogNDsKQEAgLTI3MTcsNyArMjc1NCw3IEBACiAJLmlycV9oYW5kbGVyCQk9IHJ0NjFwY2lfaW50ZXJydXB0LAogCS5wcm9iZV9odwkJPSBydDYxcGNpX3Byb2JlX2h3LAogCS5nZXRfZmlybXdhcmVfbmFtZQk9IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX25hbWUsCi0JLmdldF9maXJtd2FyZV9jcmMJPSBydDYxcGNpX2dldF9maXJtd2FyZV9jcmMsCisJLmNoZWNrX2Zpcm13YXJlCQk9IHJ0NjFwY2lfY2hlY2tfZmlybXdhcmUsCiAJLmxvYWRfZmlybXdhcmUJCT0gcnQ2MXBjaV9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHBjaV9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX3VuaW5pdGlhbGl6ZSwKQEAgLTI3MzIsNiArMjc2OSw3IEBACiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyeDAwcGNpX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDYxcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDYxcGNpX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQ2MXBjaV9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDYxcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0NjFwY2lfY29uZmlnX3NoYXJlZF9rZXksCiAJLmNvbmZpZ19wYWlyd2lzZV9rZXkJPSBydDYxcGNpX2NvbmZpZ19wYWlyd2lzZV9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAppbmRleCA2NWZlMzMzLi40MWU4OTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01MCw4ICs1MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDgwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpAQCAtODgsOCArODgsMTAgQEAKIAogLyoKICAqIFNPRlRfUkVTRVRfQ1NSCisgKiBGT1JDRV9DTE9DS19PTjogSG9zdCBmb3JjZSBNQUMgY2xvY2sgT04KICAqLwogI2RlZmluZSBTT0ZUX1JFU0VUX0NTUgkJCTB4MDAxMAorI2RlZmluZSBTT0ZUX1JFU0VUX0NTUl9GT1JDRV9DTE9DS19PTglGSUVMRDMyKDB4MDAwMDAwMDIpCiAKIC8qCiAgKiBNQ1VfSU5UX1NPVVJDRV9DU1I6IE1DVSBpbnRlcnJ1cHQgc291cmNlL21hc2sgcmVnaXN0ZXIuCkBAIC0xMDU0LDggKzEwNTYsMTAgQEAKIAogLyoKICAqIElPX0NOVExfQ1NSCisgKiBSRl9QUzogU2V0IFJGIGludGVyZmFjZSB2YWx1ZSB0byBwb3dlciBzYXZlCiAgKi8KICNkZWZpbmUgSU9fQ05UTF9DU1IJCQkweDM0OTgKKyNkZWZpbmUgSU9fQ05UTF9DU1JfUkZfUFMJCUZJRUxEMzIoMHgwMDAwMDAwNCkKIAogLyoKICAqIFVBUlRfSU5UX1NPVVJDRV9DU1IKQEAgLTExODYsNyArMTE5MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9OSUMJCQkweDAwMTEKICNkZWZpbmUgRUVQUk9NX05JQ19FTkFCTEVfRElWRVJTSVRZCUZJRUxEMTYoMHgwMDAxKQogI2RlZmluZSBFRVBST01fTklDX1RYX0RJVkVSU0lUWQkJRklFTEQxNigweDAwMDIpCi0jZGVmaW5lIEVFUFJPTV9OSUNfVFhfUlhfRklYRUQJCUZJRUxEMTYoMHgwMDBjKQorI2RlZmluZSBFRVBST01fTklDX1JYX0ZJWEVECQlGSUVMRDE2KDB4MDAwNCkKKyNkZWZpbmUgRUVQUk9NX05JQ19UWF9GSVhFRAkJRklFTEQxNigweDAwMDgpCiAjZGVmaW5lIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0JHCUZJRUxEMTYoMHgwMDEwKQogI2RlZmluZSBFRVBST01fTklDX0NBUkRCVVNfQUNDRUwJRklFTEQxNigweDAwMjApCiAjZGVmaW5lIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0EJRklFTEQxNigweDAwNDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCBjZWZlZTFiLi40MjBmZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMjIsOSArMTIyLDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtMTg2LDYgKzE4MywxOCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKK3N0YXRpYyBpbnQgcnQ3M3VzYl9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXUzMiByZWc7CisKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMywgJnJlZyk7CisJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxM19CSVQ3KTsKK30KKyNlbHNlCisjZGVmaW5lIHJ0NzN1c2JfcmZraWxsX3BvbGwJTlVMTAorI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQ3M3VzYl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCkBAIC04NDQsNiArODUzLDQ0IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDczdXNiX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTMyIHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMTApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9XQUtFVVBfTEFURU5DWSwgNSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDEpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAorCQkJCQkgICAgVVNCX01PREVfU0xFRVAsIFJFR0lTVEVSX1RJTUVPVVQpOworCX0gZWxzZSB7CisJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwgMCwKKwkJCQkJICAgIFVTQl9NT0RFX1dBS0VVUCwgUkVHSVNURVJfVElNRU9VVCk7CisKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTEsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0RFTEFZX0FGVEVSX1RCQ04sIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1RCQ05fQkVGT1JFX1dBS0VVUCwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCAwKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCX0KK30KKwogc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTg2MSw2ICs5MDgsOCBAQAogCQlydDczdXNiX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0NzN1c2JfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDczdXNiX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtODg0LDIxICs5MzMsMjggQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSMV9GQUxTRV9DQ0FfRVJST1IpOwogfQogCi1zdGF0aWMgdm9pZCBydDczdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQ3M3VzYl9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4MjApOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDIwOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgIT0gdmdjX2xldmVsKSB7CisJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZnY19sZXZlbCk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHZnY19sZXZlbDsKKwkJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NzN1c2JfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQ3M3VzYl9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JaW50IHJzc2kgPSBydDJ4MDBfZ2V0X2xpbmtfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQl1OCByMTc7CisJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAl1OCB1cF9ib3VuZDsKIAl1OCBsb3dfYm91bmQ7CiAKLQlydDczdXNiX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCiAJLyoKIAkgKiBEZXRlcm1pbmUgcjE3IGJvdW5kcy4KIAkgKi8KQEAgLTkxMSwxMCArOTY3LDEwIEBACiAJCQl1cF9ib3VuZCArPSAweDEwOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHJzc2kgPiAtODIpIHsKKwkJaWYgKHF1YWwtPnJzc2kgPiAtODIpIHsKIAkJCWxvd19ib3VuZCA9IDB4MWM7CiAJCQl1cF9ib3VuZCA9IDB4NDA7Ci0JCX0gZWxzZSBpZiAocnNzaSA+IC04NCkgeworCQl9IGVsc2UgaWYgKHF1YWwtPnJzc2kgPiAtODQpIHsKIAkJCWxvd19ib3VuZCA9IDB4MWM7CiAJCQl1cF9ib3VuZCA9IDB4MjA7CiAJCX0gZWxzZSB7CkBAIC05MzgsMzcgKzk5NCwzMiBAQAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciB2ZXJ5IHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPiAtMzUpIHsKLQkJaWYgKHIxNyAhPSAweDYwKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg2MCk7CisJaWYgKHF1YWwtPnJzc2kgPiAtMzUpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg2MCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3Igc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNTgpIHsKLQkJaWYgKHIxNyAhPSB1cF9ib3VuZCkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNTgpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIG1pZGRsZS1zaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC02NikgewotCQlsb3dfYm91bmQgKz0gMHgxMDsKLQkJaWYgKHIxNyAhPSBsb3dfYm91bmQpCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC02NikgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDEwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBtaWQtUjE3IGZvciBtaWRkbGUgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNzQpIHsKLQkJaWYgKHIxNyAhPSAobG93X2JvdW5kICsgMHgxMCkpCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQgKyAweDA4KTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNzQpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgbG93X2JvdW5kICsgMHgwOCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk3NiwxMiArMTAyNywxMiBAQAogCSAqIFNwZWNpYWwgY2FzZTogQ2hhbmdlIHVwX2JvdW5kIGJhc2VkIG9uIHRoZSByc3NpLgogCSAqIExvd2VyIHVwX2JvdW5kIHdoZW4gcnNzaSBpcyB3ZWFrZXIgdGhlbiAtNzQgZEJtLgogCSAqLwotCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcnNzaSk7CisJdXBfYm91bmQgLT0gMiAqICgtNzQgLSBxdWFsLT5yc3NpKTsKIAlpZiAobG93X2JvdW5kID4gdXBfYm91bmQpCiAJCXVwX2JvdW5kID0gbG93X2JvdW5kOwogCi0JaWYgKHIxNyA+IHVwX2JvdW5kKSB7Ci0JCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+dmdjX2xldmVsID4gdXBfYm91bmQpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCkBAIC05OTEsMTcgKzEwNDIsMTIgQEAKIAkgKiByMTcgZG9lcyBub3QgeWV0IGV4Y2VlZCB1cHBlciBsaW1pdCwgY29udGludWUgYW5kIGJhc2UKIAkgKiB0aGUgcjE3IHR1bmluZyBvbiB0aGUgZmFsc2UgQ0NBIGNvdW50LgogCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcjE3IDwgdXBfYm91bmQpIHsKLQkJcjE3ICs9IDQ7Ci0JCWlmIChyMTcgPiB1cF9ib3VuZCkKLQkJCXIxNyA9IHVwX2JvdW5kOwotCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHIxNyA+IGxvd19ib3VuZCkgewotCQlyMTcgLT0gNDsKLQkJaWYgKHIxNyA8IGxvd19ib3VuZCkKLQkJCXIxNyA9IGxvd19ib3VuZDsKLQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQl9CisJaWYgKChxdWFsLT5mYWxzZV9jY2EgPiA1MTIpICYmIChxdWFsLT52Z2NfbGV2ZWwgPCB1cF9ib3VuZCkpCisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsCisJCQkJbWluX3QodTgsIHF1YWwtPnZnY19sZXZlbCArIDQsIHVwX2JvdW5kKSk7CisJZWxzZSBpZiAoKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCkgJiYgKHF1YWwtPnZnY19sZXZlbCA+IGxvd19ib3VuZCkpCisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsCisJCQkJbWF4X3QodTgsIHF1YWwtPnZnY19sZXZlbCAtIDQsIGxvd19ib3VuZCkpOwogfQogCiAvKgpAQCAtMTAxMiwyNSArMTA1OCwzNyBAQAogCXJldHVybiBGSVJNV0FSRV9SVDI1NzE7CiB9CiAKLXN0YXRpYyB1MTYgcnQ3M3VzYl9nZXRfZmlybXdhcmVfY3JjKGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHJ0NzN1c2JfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogeworCXUxNiBmd19jcmM7CiAJdTE2IGNyYzsKIAogCS8qCi0JICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqIE9ubHkgc3VwcG9ydCAya2IgZmlybXdhcmUgZmlsZXMuCisJICovCisJaWYgKGxlbiAhPSAyMDQ4KQorCQlyZXR1cm4gRldfQkFEX0xFTkdUSDsKKworCS8qCiAJICogVGhlIGxhc3QgMiBieXRlcyBpbiB0aGUgZmlybXdhcmUgYXJyYXkgYXJlIHRoZSBjcmMgY2hlY2tzdW0gaXRzZWxmLAogCSAqIHRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbmV2ZXIgcGFzcyB0aG9zZSAyIGJ5dGVzIHRvIHRoZSBjcmMKIAkgKiBhbGdvcml0aG0uCiAJICovCisJZndfY3JjID0gKGRhdGFbbGVuIC0gMl0gPDwgOCB8IGRhdGFbbGVuIC0gMV0pOworCisJLyoKKwkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICovCiAJY3JjID0gY3JjX2l0dV90KDAsIGRhdGEsIGxlbiAtIDIpOwogCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAotCXJldHVybiBjcmM7CisJcmV0dXJuIChmd19jcmMgPT0gY3JjKSA/IEZXX09LIDogRldfQkFEX0NSQzsKIH0KIAotc3RhdGljIGludCBydDczdXNiX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCQkgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ3M3VzYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGludCBpOwogCWludCBzdGF0dXM7CkBAIC0xNDQ5LDcgKzE1MDcsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncykpOwpAQCAtMTgxNiw2ICsxODc0LDE0IEBACiAJCV9fc2V0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKKwkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCisJICovCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKKwkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCisJLyoKIAkgKiBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQuCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsICZlZXByb20pOwpAQCAtMjAyMCw3ICsyMDg2LDkgQEAKIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CiAJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCSAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBUWERfREVTQ19TSVpFOwogCiAJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwpAQCAtMjEyMSw2ICsyMTg5LDcgQEAKIAlzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgZmllbGQ7CiAJaW50IHJldHZhbDsKIAl1MzIgcmVnOworCXUzMiBvZmZzZXQ7CiAKIAkvKgogCSAqIEZpcnN0IHBhc3MgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBydDJ4MDBsaWIsIHRoYXQgd2lsbApAQCAtMjEzMiwyNCArMjIwMSwyMyBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKKwkvKgorCSAqIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24KKwkgKiBmb3IgV01NIHF1ZXVlcy8KKwkgKi8KKwlpZiAocXVldWVfaWR4ID49IDQpCisJCXJldHVybiAwOworCiAJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxdWV1ZV9pZHgpOwogCiAJLyogVXBkYXRlIFdNTSBUWE9QIHJlZ2lzdGVyICovCi0JaWYgKHF1ZXVlX2lkeCA8IDIpIHsKLQkJZmllbGQuYml0X29mZnNldCA9IHF1ZXVlX2lkeCAqIDE2OwotCQlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OworCW9mZnNldCA9IEFDX1RYT1BfQ1NSMCArIChzaXplb2YodTMyKSAqICghIShxdWV1ZV9pZHggJiAyKSkpOworCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4ICYgMSkgKiAxNjsKKwlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OwogCi0JCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCAmcmVnKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7Ci0JCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgcmVnKTsKLQl9IGVsc2UgaWYgKHF1ZXVlX2lkeCA8IDQpIHsKLQkJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggLSAyKSAqIDE2OwotCQlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OwotCi0JCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCAmcmVnKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7Ci0JCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgcmVnKTsKLQl9CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBvZmZzZXQsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOworCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIG9mZnNldCwgcmVnKTsKIAogCS8qIFVwZGF0ZSBXTU0gcmVnaXN0ZXJzICovCiAJZmllbGQuYml0X29mZnNldCA9IHF1ZXVlX2lkeCAqIDQ7CkBAIC0yMTcwLDEzICsyMjM4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBNYWM4MDIxMSBkZW1hbmRzIGdldF90c2YgbXVzdCBiZSBhdG9taWMuCi0gKiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBmb3IgcnQ3M3VzYiBzaW5jZSBhbGwgcmVnaXN0ZXIgYWNjZXNzCi0gKiBmdW5jdGlvbnMgcmVxdWlyZSBzbGVlcGluZy4gVW50aWxsIG1hYzgwMjExIG5vIGxvbmdlciBuZWVkcwotICogZ2V0X3RzZiB0byBiZSBhdG9taWMsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkLgotICovCiBzdGF0aWMgdTY0IHJ0NzN1c2JfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CkBAIC0yMTkwLDkgKzIyNTEsNiBAQAogCiAJcmV0dXJuIHRzZjsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0NzN1c2JfZ2V0X3RzZglOVUxMCi0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0NzN1c2JfbWFjODAyMTFfb3BzID0gewogCS50eAkJCT0gcnQyeDAwbWFjX3R4LApAQCAtMjIxNCwxMiArMjI3MiwxMyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NzN1c2JfcnQyeDAwX29wcyA9IHsKIAkucHJvYmVfaHcJCT0gcnQ3M3VzYl9wcm9iZV9odywKIAkuZ2V0X2Zpcm13YXJlX25hbWUJPSBydDczdXNiX2dldF9maXJtd2FyZV9uYW1lLAotCS5nZXRfZmlybXdhcmVfY3JjCT0gcnQ3M3VzYl9nZXRfZmlybXdhcmVfY3JjLAorCS5jaGVja19maXJtd2FyZQkJPSBydDczdXNiX2NoZWNrX2Zpcm13YXJlLAogCS5sb2FkX2Zpcm13YXJlCQk9IHJ0NzN1c2JfbG9hZF9maXJtd2FyZSwKIAkuaW5pdGlhbGl6ZQkJPSBydDJ4MDB1c2JfaW5pdGlhbGl6ZSwKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl91bmluaXRpYWxpemUsCiAJLmNsZWFyX2VudHJ5CQk9IHJ0MngwMHVzYl9jbGVhcl9lbnRyeSwKIAkuc2V0X2RldmljZV9zdGF0ZQk9IHJ0NzN1c2Jfc2V0X2RldmljZV9zdGF0ZSwKKwkucmZraWxsX3BvbGwJCT0gcnQ3M3VzYl9yZmtpbGxfcG9sbCwKIAkubGlua19zdGF0cwkJPSBydDczdXNiX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0NzN1c2JfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQ3M3VzYl9saW5rX3R1bmVyLApAQCAtMjIyOCw2ICsyMjg3LDcgQEAKIAkud3JpdGVfYmVhY29uCQk9IHJ0NzN1c2Jfd3JpdGVfYmVhY29uLAogCS5nZXRfdHhfZGF0YV9sZW4JPSBydDczdXNiX2dldF90eF9kYXRhX2xlbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDczdXNiX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NzN1c2JfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQ3M3VzYl9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0NzN1c2JfY29uZmlnX3BhaXJ3aXNlX2tleSwKQEAgLTIzNjUsNiArMjQyNSw4IEBACiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5NzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBTdXJlY29tICovCiAJeyBVU0JfREVWSUNFKDB4MDc2OSwgMHgzMWYzKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwkvKiBUaWxnaW4gKi8KKwl7IFVTQl9ERVZJQ0UoMHg2OTMzLCAweDUwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIFBoaWxpcHMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDIwMGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIFBsYW5leCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKaW5kZXggNDZlMTQwNS4uYzgwMTZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTAsOCArNTAsOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDEwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA4MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KQEAgLTI2Nyw2ICsyNjcsMTkgQEAKICAqIE1BQ19DU1IxMzogR1BJTy4KICAqLwogI2RlZmluZSBNQUNfQ1NSMTMJCQkweDMwMzQKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDAJCQlGSUVMRDMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxCQkJRklFTEQzMigweDAwMDAwMDAyKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMgkJCUZJRUxEMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDMJCQlGSUVMRDMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ0CQkJRklFTEQzMigweDAwMDAwMDEwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNQkJCUZJRUxEMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDYJCQlGSUVMRDMyKDB4MDAwMDAwNDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ3CQkJRklFTEQzMigweDAwMDAwMDgwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUOAkJCUZJRUxEMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDkJCQlGSUVMRDMyKDB4MDAwMDAyMDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxMAkJCUZJRUxEMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDExCQkJRklFTEQzMigweDAwMDAwODAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMTIJCQlGSUVMRDMyKDB4MDAwMDEwMDApCiAKIC8qCiAgKiBNQUNfQ1NSMTQ6IExFRCBjb250cm9sIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaAppbmRleCAzYjFlMWMyLi45NzE4ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaApAQCAtMTAwLDYgKzEwMCw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJdTMyIHJ4X2NvbmY7CiAJc3RydWN0IHVzYl9hbmNob3IgYW5jaG9yZWQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKIAl1MTYgdHhwd3JfYmFzZTsKIAl1OCBhc2ljX3JldjsKIAl1OCBpc19ydGw4MTg3YjsKQEAgLTExNyw3ICsxMTksNyBAQAogCXN0cnVjdCB7CiAJCV9fbGU2NCBidWY7CiAJCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7Ci0JfSBiX3R4X3N0YXR1czsKKwl9IGJfdHhfc3RhdHVzOyAvKiBUaGlzIHF1ZXVlIGlzIHVzZWQgYnkgYm90aCAtYiBhbmQgbm9uLWIgZGV2aWNlcyAqLwogfTsKIAogdm9pZCBydGw4MTg3X3dyaXRlX3BoeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwppbmRleCBmNDc0N2ExLi5mZDgxODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCkBAIC0xODksMjUgKzE4OSwzMyBAQAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRsODE4N190eF9oZHIpKTsKIAlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CiAKLQlpZiAoIXVyYi0+c3RhdHVzICYmCi0JICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKLQkgICAgcHJpdi0+aXNfcnRsODE4N2IpIHsKLQkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOworCWlmICghKHVyYi0+c3RhdHVzKSAmJiAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CisJCWlmIChwcml2LT5pc19ydGw4MTg3YikgeworCQkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOwogCi0JCS8qIHF1ZXVlIGlzICJmdWxsIiwgZGlzY2FyZCBsYXN0IGl0ZW1zICovCi0JCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYjsKKwkJCS8qIHF1ZXVlIGlzICJmdWxsIiwgZGlzY2FyZCBsYXN0IGl0ZW1zICovCisJCQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpID4gNSkgeworCQkJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOwogCi0JCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCi0JCQkJInRyYW5zbWl0IHN0YXR1cyBxdWV1ZSBmdWxsXG4iKTsKKwkJCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCisJCQkJCSJ0cmFuc21pdCBzdGF0dXMgcXVldWUgZnVsbFxuIik7CiAKLQkJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOwotCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBvbGRfc2tiKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmICF1cmItPnN0YXR1cykKKwkJCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKKwkJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOworCQkJfQorCQkJcmV0dXJuOworCQl9IGVsc2UgewogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQl9CisJfQorCWlmIChwcml2LT5pc19ydGw4MTg3YikKIAkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCWVsc2UgeworCQkvKiBSZXRyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIFJUSTgxODcgaXMgb25seSBhdmFpbGFibGUgYnkKKwkJICogcmVhZGluZyBhIHJlZ2lzdGVyIGluIHRoZSBkZXZpY2UuIFdlIGFyZSBpbiBpbnRlcnJ1cHQgbW9kZQorCQkgKiBoZXJlLCB0aHVzIHF1ZXVlIHRoZSBza2IgYW5kIGZpbmlzaCBvbiBhIHdvcmsgcXVldWUuICovCisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT53b3JrLCAwKTsKIAl9CiB9CiAKQEAgLTQwMyw3ICs0MTEsNyBAQAogCXN0cnVjdCBydGw4MTg3X3J4X2luZm8gKmluZm87CiAJaW50IHJldCA9IDA7CiAKLQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcXVldWUpIDwgOCkgeworCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9xdWV1ZSkgPCAxNikgewogCQlza2IgPSBfX2Rldl9hbGxvY19za2IoUlRMODE4N19NQVhfUlgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNrYikgewogCQkJcmV0ID0gLUVOT01FTTsKQEAgLTY1Nyw3ICs2NjUsNyBAQAogCiAJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SU5UX1RJTUVPVVQsIDApOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgMHg4MSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCAwKTsKIAogCS8vIFRPRE86IHNldCBSRVNQX1JBVEUgYW5kIEJSU1IgcHJvcGVybHkKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJFU1BfUkFURSwgKDggPDwgNCkgfCAwKTsKQEAgLTc3Nyw5ICs3ODUsNiBAQAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCwgcmVnKTsKIAogCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkUwLCAweDBGRkYsIDEpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLKTsKLQlyZWcgfD0gUlRMODE4WF9SQVRFX0ZBTExCQUNLX0VOQUJMRTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIHJlZyk7CiAKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CRUFDT05fSU5URVJWQUwsIDEwMCk7CiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QVRJTV9XTkQsIDIpOwpAQCAtODY3LDYgKzg3MiwzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBydGw4MTg3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIFRoZSBSVEw4MTg3IHJldHVybnMgdGhlIHJldHJ5IGNvdW50IHRocm91Z2ggcmVnaXN0ZXIgMHhGRkZBLiBJbgorCSAqIGFkZGl0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgY3VtdWxhdGl2ZSByZXRyeSBjb3VudCwgbm90IHRoZQorCSAqIHZhbHVlIGZvciB0aGUgY3VycmVudCBUWCBwYWNrZXQuIFdoZW4gbXVsdGlwbGUgVFggZW50cmllcyBhcmUKKwkgKiBxdWV1ZWQsIHRoZSByZXRyeSBjb3VudCB3aWxsIGJlIHZhbGlkIGZvciB0aGUgbGFzdCBvbmUgaW4gdGhlIHF1ZXVlLgorCSAqIFRoZSAiZXJyb3IiIHNob3VsZCBub3QgbWF0dGVyIGZvciBwdXJwb3NlcyBvZiByYXRlIHNldHRpbmcuICovCisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE4N19wcml2LAorCQkJCSAgICB3b3JrLndvcmspOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwcml2LT5kZXY7CisJc3RhdGljIHUxNiByZXRyeTsKKwl1MTYgdG1wOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJdG1wID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAoX19sZTE2ICopMHhGRkZBKTsKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpID4gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYjsKKworCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Iob2xkX3NrYik7CisJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHRtcCAtIHJldHJ5ICsgMTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgb2xkX3NrYik7CisJfQorCXJldHJ5ID0gdG1wOworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgcnRsODE4N19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKQEAgLTg4MSw2ICs5MTQsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCiAJaW5pdF91c2JfYW5jaG9yKCZwcml2LT5hbmNob3JlZCk7CisJcHJpdi0+ZGV2ID0gZGV2OwogCiAJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CiAJCXJlZyA9IFJUTDgxOFhfUlhfQ09ORl9NR01UIHwKQEAgLTk0OCw2ICs5ODIsNyBAQAogCXJlZyB8PSBSVEw4MThYX0NNRF9UWF9FTkFCTEU7CiAJcmVnIHw9IFJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgcnRsODE4N193b3JrKTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC05NzgsNiArMTAxMyw4IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwcml2LT5hbmNob3JlZCk7CisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogfQogCkBAIC05ODYsMTkgKzEwMjMsMjEgQEAKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCWludCBpOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAorCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJZ290byBleGl0OwogCiAJc3dpdGNoIChjb25mLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CiAJfQogCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcmV0ID0gMDsKIAlwcml2LT52aWYgPSBjb25mLT52aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwpAQCAtMTAwNyw4ICsxMDQ2LDkgQEAKIAkJCQkgKCh1OCAqKWNvbmYtPm1hY19hZGRyKVtpXSk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKIAorZXhpdDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxODdfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCA3MDE1ZjI0Li5mOTUyMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTk1MCw2ICs5NTAsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqc3RyaXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKFJDVSkKIHsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcmV0dXJuICpwb3MgPyBzdHJpcF9nZXRfaWR4KCpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKQEAgLTk3Myw2ICs5NzQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzdHJpcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKFJDVSkKIHsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTExMjUsNyArMTEyNyw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdHJpcF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdHJpcF9zZXFfb3BzID0gewogCS5zdGFydCA9IHN0cmlwX3NlcV9zdGFydCwKIAkubmV4dCAgPSBzdHJpcF9zZXFfbmV4dCwKIAkuc3RvcCAgPSBzdHJpcF9zZXFfc3RvcCwKQEAgLTI0NzUsNiArMjQ3NywxNiBAQAogCS5yZWJ1aWxkID0gc3RyaXBfcmVidWlsZF9oZWFkZXIsCiB9OwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RyaXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCT0gc3RyaXBfb3Blbl9sb3csCisJLm5kb19zdG9wIAk9IHN0cmlwX2Nsb3NlX2xvdywKKwkubmRvX3N0YXJ0X3htaXQgPSBzdHJpcF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gc3RyaXBfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZ2V0X3N0YXRzCT0gc3RyaXBfZ2V0X3N0YXRzLAorCS5uZG9fY2hhbmdlX210dSA9IHN0cmlwX2NoYW5nZV9tdHUsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSBEREkgd2hlbiB0aGUKICAqIChkeW5hbWljYWxseSBhc3NpZ25lZCkgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKQEAgLTI1MDEsMTggKzI1MTMsOCBAQAogCWRldi0+ZGV2X2FkZHJbMF0gPSAwOwogCWRldi0+YWRkcl9sZW4gPSBzaXplb2YoTWV0cmljb21BZGRyZXNzKTsKIAotCS8qCi0JICogUG9pbnRlcnMgdG8gaW50ZXJmYWNlIHNlcnZpY2Ugcm91dGluZXMuCi0JICovCi0KLQlkZXYtPm9wZW4gPSBzdHJpcF9vcGVuX2xvdzsKLQlkZXYtPnN0b3AgPSBzdHJpcF9jbG9zZV9sb3c7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdHJpcF94bWl0OwotCWRldi0+aGVhZGVyX29wcyA9ICZzdHJpcF9oZWFkZXJfb3BzOwotCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzdHJpcF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMgPSBzdHJpcF9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gc3RyaXBfY2hhbmdlX210dTsKKwlkZXYtPmhlYWRlcl9vcHMgPSAmc3RyaXBfaGVhZGVyX29wcywKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RyaXBfbmV0ZGV2X29wczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwppbmRleCA4MzI2NzkzLi4zYWIzZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCkBAIC00MCwxMSArNDAsMTEgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgd3ZfcHNhX3RvX2lycSh1OCBpcnF2YWwpCiB7Ci0JaW50IGlycTsKKwlpbnQgaTsKIAotCWZvciAoaXJxID0gMDsgaXJxIDwgQVJSQVlfU0laRShpcnF2YWxzKTsgaXJxKyspCi0JCWlmIChpcnF2YWxzW2lycV0gPT0gaXJxdmFsKQotCQkJcmV0dXJuIGlycTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnF2YWxzKTsgaSsrKQorCQlpZiAoaXJxdmFsc1tpXSA9PSBpcnF2YWwpCisJCQlyZXR1cm4gaTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTczNSw5ICs3MzUsOSBAQAogCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9PSykgewogCQkJaW50IG5jb2xsaXNpb25zOwogCi0JCQlscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQluY29sbGlzaW9ucyA9IHR4X3N0YXR1cyAmIEFDX1NGTERfTUFYQ09MOwotCQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gbmNvbGxpc2lvbnM7CisJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gbmNvbGxpc2lvbnM7CiAjaWZkZWYgREVCVUdfVFhfSU5GTwogCQkJaWYgKG5jb2xsaXNpb25zID4gMCkKIAkJCQlwcmludGsoS0VSTl9ERUJVRwpAQCAtNzQ1LDkgKzc0NSw5IEBACiAJCQkJICAgICAgIGRldi0+bmFtZSwgbmNvbGxpc2lvbnMpOwogI2VuZGlmCiAJCX0gZWxzZSB7Ci0JCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmIEFDX1NGTERfUzEwKSB7Ci0JCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X2NvbXBsZXRlKCk6IHR4IGVycm9yOiBubyBDUy5cbiIsCkBAIC03NTUsNyArNzU1LDcgQEAKICNlbmRpZgogCQkJfQogCQkJaWYgKHR4X3N0YXR1cyAmIEFDX1NGTERfUzkpIHsKLQkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfY29tcGxldGUoKTogdHggZXJyb3I6IGxvc3QgQ1RTLlxuIiwKQEAgLTc2Myw3ICs3NjMsNyBAQAogI2VuZGlmCiAJCQl9CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TOCkgewotCQkJCWxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9jb21wbGV0ZSgpOiB0eCBlcnJvcjogc2xvdyBETUEuXG4iLApAQCAtNzcxLDcgKzc3MSw3IEBACiAjZW5kaWYKIAkJCX0KIAkJCWlmICh0eF9zdGF0dXMgJiBBQ19TRkxEX1M2KSB7Ci0JCQkJbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9jb21wbGV0ZSgpOiB0eCBlcnJvcjogaGVhcnQgYmVhdC5cbiIsCkBAIC03NzksNyArNzc5LDcgQEAKICNlbmRpZgogCQkJfQogCQkJaWYgKHR4X3N0YXR1cyAmIEFDX1NGTERfUzUpIHsKLQkJCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfY29tcGxldGUoKTogdHggZXJyb3I6IHRvbyBtYW55IGNvbGxpc2lvbnMuXG4iLApAQCAtMTM0NiwyMCArMTM0Niw2IEBACiAgKiBvciB3aXJlbGVzcyBleHRlbnNpb25zCiAgKi8KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIEdldCB0aGUgY3VycmVudCBFdGhlcm5ldCBzdGF0aXN0aWNzLiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLSAqIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKiBVc2VkIHdoZW4gdGhlIHVzZXIgcmVhZCAvcHJvYy9uZXQvZGV2Ci0gKi8KLXN0YXRpYyBlbl9zdGF0cyAqd2F2ZWxhbl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0jaWZkZWYgREVCVUdfSU9DVExfVFJBQ0UKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDw+d2F2ZWxhbl9nZXRfc3RhdHMoKVxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0JcmV0dXJuICYoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0czsKLX0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKQEAgLTI0NjYsNyArMjQ1Miw3IEBACiAJCSAgICAgICAiJXM6IHd2X3BhY2tldF9yZWFkKCk6IGNvdWxkIG5vdCBhbGxvY19za2IoJWQsIEdGUF9BVE9NSUMpLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgc2tzaXplKTsKICNlbmRpZgotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjUyNiw4ICsyNTEyLDggQEAKIAluZXRpZl9yeChza2IpOwogCiAJLyogS2VlcCBzdGF0aXN0aWNzIHVwIHRvIGRhdGUgKi8KLQlscC0+c3RhdHMucnhfcGFja2V0cysrOwotCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBza3NpemU7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza3NpemU7CiAKICNpZmRlZiBERUJVR19SWF9UUkFDRQogCXByaW50ayhLRVJOX0RFQlVHICIlczogPC13dl9wYWNrZXRfcmVhZCgpXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjYwOCw3ICsyNTk0LDcgQEAKICNlbmRpZgogCQl9IGVsc2UgewkvKiBJZiByZWNlcHRpb24gd2FzIG5vIHN1Y2Nlc3NmdWwgKi8KIAotCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogI2lmZGVmIERFQlVHX1JYX0lORk8KIAkJCXByaW50ayhLRVJOX0RFQlVHCkBAIC0yNjI0LDcgKzI2MTAsNyBAQAogI2VuZGlmCiAKIAkJCWlmICgoZmQuZmRfc3RhdHVzICYgRkRfU1RBVFVTX1M3KSAhPSAwKSB7Ci0JCQkJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9yZWNlaXZlKCk6IGZyYW1lIHRvbyBzaG9ydC5cbiIsCkBAIC0yNjMzLDcgKzI2MTksNyBAQAogCQkJfQogCiAJCQlpZiAoKGZkLmZkX3N0YXR1cyAmIEZEX1NUQVRVU19TOCkgIT0gMCkgewotCQkJCWxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9yZWNlaXZlKCk6IHJ4IERNQSBvdmVycnVuLlxuIiwKQEAgLTI2NDIsNyArMjYyOCw3IEBACiAJCQl9CiAKIAkJCWlmICgoZmQuZmRfc3RhdHVzICYgRkRfU1RBVFVTX1M5KSAhPSAwKSB7Ci0JCQkJbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogcmFuIG91dCBvZiByZXNvdXJjZXMuXG4iLApAQCAtMjY1MSw3ICsyNjM3LDcgQEAKIAkJCX0KIAogCQkJaWYgKChmZC5mZF9zdGF0dXMgJiBGRF9TVEFUVVNfUzEwKSAhPSAwKSB7Ci0JCQkJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfUlhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfcmVjZWl2ZSgpOiBhbGlnbm1lbnQgZXJyb3IuXG4iLApAQCAtMjY2MCw3ICsyNjQ2LDcgQEAKIAkJCX0KIAogCQkJaWYgKChmZC5mZF9zdGF0dXMgJiBGRF9TVEFUVVNfUzExKSAhPSAwKSB7Ci0JCQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9yZWNlaXZlKCk6IENSQyBlcnJvci5cbiIsCkBAIC0yODI2LDcgKzI4MTIsNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJLyogS2VlcCBzdGF0cyB1cCB0byBkYXRlLiAqLwotCWxwLT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CiAKIAlpZiAobHAtPnR4X2ZpcnN0X2luX3VzZSA9PSBJODI1ODZOVUxMKQogCQlscC0+dHhfZmlyc3RfaW5fdXNlID0gdHhibG9jazsKQEAgLTQwMzgsNiArNDAyNCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdhdmVsYW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IHdhdmVsYW5fb3BlbiwKKwkubmRvX3N0b3AgCQk9IHdhdmVsYW5fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdhdmVsYW5fcGFja2V0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdCwKKyAgICAgICAgLm5kb190eF90aW1lb3V0CQk9IHdhdmVsYW5fd2F0Y2hkb2csCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIFNFVF9NQUNfQUREUkVTUworCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3MKKyNlbHNlCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorI2VuZGlmCit9OworCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBQcm9iZSBhbiBJL08gYWRkcmVzcywgYW5kIGlmIHRoZSBXYXZlTEFOIGlzIHRoZXJlIGNvbmZpZ3VyZSB0aGUKQEAgLTQxMzAsMTcgKzQxMzIsOCBAQAogCS8qIEluaXQgc3BpbmxvY2sgKi8KIAlzcGluX2xvY2tfaW5pdCgmbHAtPnNwaW5sb2NrKTsKIAotCWRldi0+b3BlbiA9IHdhdmVsYW5fb3BlbjsKLQlkZXYtPnN0b3AgPSB3YXZlbGFuX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gd2F2ZWxhbl9wYWNrZXRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9IHdhdmVsYW5fZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJndhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0OwotICAgICAgICBkZXYtPnR4X3RpbWVvdXQJCT0gJndhdmVsYW5fd2F0Y2hkb2c7Ci0gICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8JPSBXQVRDSERPR19KSUZGSUVTOwotI2lmZGVmIFNFVF9NQUNfQUREUkVTUwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gJndhdmVsYW5fc2V0X21hY19hZGRyZXNzOwotI2VuZGlmCQkJCS8qIFNFVF9NQUNfQUREUkVTUyAqLwotCisJZGV2LT5uZXRkZXZfb3BzID0gJndhdmVsYW5fbmV0ZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gV0FUQ0hET0dfSklGRklFUzsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJndhdmVsYW5faGFuZGxlcl9kZWY7CiAJbHAtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmbHAtPnNweV9kYXRhOwogCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZscC0+d2lyZWxlc3NfZGF0YTsKQEAgLTQyODEsOCArNDI3NCw3IEBACiAKIAogCS8qIExvb3Agb24gYWxsIHBvc3NpYmxlIGJhc2UgYWRkcmVzc2VzLiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGlvWysraV0gIT0gMCkgJiYgKGkgPCBBUlJBWV9TSVpFKGlvKSkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbykgJiYgaW9baV0gIT0gMDsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobmV0X2xvY2FsKSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCmluZGV4IDQ0ZDMxYmIuLjJkYWEwMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCkBAIC00NTksMTEgKzQ1OSw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogU2hvcnRjdXRzICovCi10eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCWVuX3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3F1YWxpdHkJaXdfcXVhbDsKLXR5cGVkZWYgc3RydWN0IGl3X2ZyZXEJCWl3X2ZyZXE7Ci10eXBlZGVmIHN0cnVjdCBuZXRfbG9jYWwJbmV0X2xvY2FsOwordHlwZWRlZiBzdHJ1Y3QgaXdfZnJlcQkJaXdfZnJlcTt0eXBlZGVmIHN0cnVjdCBuZXRfbG9jYWwJbmV0X2xvY2FsOwogdHlwZWRlZiBzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcl9saXN0OwogCiAvKiBCYXNpYyB0eXBlcyAqLwpAQCAtNDc1LDE1ICs0NzMsMTIgQEAKICAqIEZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLCBMaW51eCBrZWVwcyBkYXRhIGluIHR3byBzdHJ1Y3R1cmVzOiAgImRldmljZSIKICAqIGtlZXBzIHRoZSBnZW5lcmljIGRhdGEgKHNhbWUgZm9ybWF0IGZvciBldmVyeWJvZHkpIGFuZCAibmV0X2xvY2FsIiBrZWVwcwogICogYWRkaXRpb25hbCBzcGVjaWZpYyBkYXRhLgotICogTm90ZSB0aGF0IHNvbWUgb2YgdGhpcyBzcGVjaWZpYyBkYXRhIGlzIGluIGZhY3QgZ2VuZXJpYyAoZW5fc3RhdHMsIGZvcgotICogZXhhbXBsZSkuCiAgKi8KIHN0cnVjdCBuZXRfbG9jYWwKIHsKICAgbmV0X2xvY2FsICoJbmV4dDsJCS8qIGxpbmtlZCBsaXN0IG9mIHRoZSBkZXZpY2VzICovCiAgIHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2OwkJLyogcmV2ZXJzZSBsaW5rICovCiAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCi0gIGVuX3N0YXRzCXN0YXRzOwkJLyogRXRoZXJuZXQgaW50ZXJmYWNlIHN0YXRpc3RpY3MgKi8KICAgaW50CQlucmVzZXRzOwkvKiBudW1iZXIgb2YgaGFyZHdhcmUgcmVzZXRzICovCiAgIHVfY2hhcglyZWNvbmZpZ184MjU4NjsJLyogV2UgbmVlZCB0byByZWNvbmZpZ3VyZSB0aGUgY29udHJvbGxlci4gKi8KICAgdV9jaGFyCXByb21pc2N1b3VzOwkvKiBwcm9taXNjdW91cyBtb2RlICovCkBAIC02MDEsOCArNTk2LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogCXd2X2luaXRfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogZGlzcGxheSBzdGFydHVwIGluZm8gKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gSU9DVEwsIFNUQVRTICYgUkVDT05GSUcgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLQl3YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogR2l2ZSBzdGF0cyAvcHJvYy9uZXQvZGV2ICovCiBzdGF0aWMgaXdfc3RhdHMgKgogCXdhdmVsYW5fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCBkZTcxN2Y4Li5lNTViMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC04MzgsOSArODM4LDggQEAKICAgICB9CiAgIHdoaWxlKCgoc3RhdHVzICYgU1IzX0VYRUNfU1RBVEVfTUFTSykgIT0gU1IzX0VYRUNfSURMRSkgJiYgKHNwaW4tLSA+IDApKTsKIAotICAvKiBJZiB0aGUgaW50ZXJydXB0IGhhc24ndCBiZSBwb3N0ZWQgKi8KLSAgaWYoc3BpbiA8PSAwKQotICAgIHsKKyAgLyogSWYgdGhlIGludGVycnVwdCBoYXNuJ3QgYmVlbiBwb3N0ZWQgKi8KKyAgaWYgKHNwaW4gPCAwKSB7CiAjaWZkZWYgREVCVUdfSU5URVJSVVBUX0VSUk9SCiAgICAgICBwcmludGsoS0VSTl9JTkZPICJ3dl84MjU5M19jbWQ6ICVzIHRpbWVvdXQgKHByZXZpb3VzIGNvbW1hbmQpLCBzdGF0dXMgMHglMDJ4XG4iLAogCSAgICAgc3RyLCBzdGF0dXMpOwpAQCAtMTM1MywyMSArMTM1Miw2IEBACiAgKiBvciB3aXJlbGVzcyBleHRlbnNpb25zCiAgKi8KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIEdldCB0aGUgY3VycmVudCBldGhlcm5ldCBzdGF0aXN0aWNzLiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLSAqIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKiBVc2VkIHdoZW4gdGhlIHVzZXIgcmVhZCAvcHJvYy9uZXQvZGV2Ci0gKi8KLXN0YXRpYyBlbl9zdGF0cwkqCi13YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKLXsKLSNpZmRlZiBERUJVR19JT0NUTF9UUkFDRQotICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IDw+d2F2ZWxhbl9nZXRfc3RhdHMoKVxuIiwgZGV2LT5uYW1lKTsKLSNlbmRpZgotCi0gIHJldHVybigmKChuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHMpOwotfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgpAQCAtMjgxOCw3ICsyODAyLDcgQEAKICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB3dl9wYWNrZXRfcmVhZCgpOiBjb3VsZCBub3QgYWxsb2Nfc2tiKCVkLCBHRlBfQVRPTUlDKVxuIiwKIAkgICAgIGRldi0+bmFtZSwgc2tzaXplKTsKICNlbmRpZgotICAgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKyAgICAgIGRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogICAgICAgLyoKICAgICAgICAqIE5vdCBvbmx5IGRvIHdlIHdhbnQgdG8gcmV0dXJuIGhlcmUsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gZHJvcCB0aGUKICAgICAgICAqIHBhY2tldCBvbiB0aGUgZmxvb3IgdG8gY2xlYXIgdGhlIGludGVycnVwdC4KQEAgLTI4NzgsOCArMjg2Miw4IEBACiAgIG5ldGlmX3J4KHNrYik7CiAKICAgLyogS2VlcCBzdGF0cyB1cCB0byBkYXRlICovCi0gIGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0gIGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza3NpemU7CisgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKIAogI2lmZGVmIERFQlVHX1JYX1RSQUNFCiAgIHByaW50ayhLRVJOX0RFQlVHICIlczogPC13dl9wYWNrZXRfcmVhZCgpXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjk4MSwxMyArMjk2NSwxMyBAQAogICAgICAgLyogQ2hlY2sgc3RhdHVzICovCiAgICAgICBpZigoc3RhdHVzICYgUlhfUkNWX09LKSAhPSBSWF9SQ1ZfT0spCiAJewotCSAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkgIGlmKHN0YXR1cyAmIFJYX05PX1NGRCkKLQkgICAgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCSAgaWYoc3RhdHVzICYgUlhfQ1JDX0VSUikKLQkgICAgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJICBpZihzdGF0dXMgJiBSWF9PVlJSVU4pCi0JICAgIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X3BhY2tldF9yY3YoKTogcGFja2V0IG5vdCByZWNlaXZlZCBvaywgc3RhdHVzID0gMHgleFxuIiwKQEAgLTMwNzQsNyArMzA1OCw3IEBACiAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAgIC8qIEtlZXAgc3RhdHMgdXAgdG8gZGF0ZSAqLwotICBscC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuZ3RoOworICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKIAogICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+c3BpbmxvY2ssIGZsYWdzKTsKIApAQCAtNDEwNyw3ICs0MDkxLDcgQEAKIAkgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogd3ZfaW50ZXJydXB0KCk6IHJlY2VpdmUgYnVmZmVyIG92ZXJmbG93XG4iLAogCQkgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkgICAgICBscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkgICAgICBkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJICAgICAgbHAtPm92ZXJydW5uaW5nID0gMTsKICAgICAgIAkgICAgfQogCkBAIC00MTU2LDcgKzQxNDAsNyBAQAogCSAgLyogQ2hlY2sgZm9yIHBvc3NpYmxlIGVycm9ycyAqLwogCSAgaWYoKHR4X3N0YXR1cyAmIFRYX09LKSAhPSBUWF9PSykKIAkgICAgewotCSAgICAgIGxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkgICAgICBkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfRlJUTCkKIAkJewpAQCAtNDE3MSwxNCArNDE1NSwxNCBAQAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IERNQSB1bmRlcnJ1blxuIiwKIAkJCSBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCSAgZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfTE9TVF9DVFMpCiAJCXsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogbm8gQ1RTXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCSAgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfTE9TVF9DUlMpCiAJCXsKQEAgLTQxODYsMTQgKzQxNzAsMTQgQEAKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBubyBjYXJyaWVyXG4iLAogCQkJIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9IUlRfQkVBVCkKIAkJewogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBoZWFydCBiZWF0XG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0RFRkVSKQogCQl7CkBAIC00MjE3LDE0ICs0MjAxLDE0IEBACiAjZW5kaWYKIAkJICAgICAgaWYoISh0eF9zdGF0dXMgJiBUWF9OQ09MX01BU0spKQogCQkJewotCQkJICBscC0+c3RhdHMuY29sbGlzaW9ucyArPSAweDEwOworCQkJICBkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMHgxMDsKIAkJCX0KIAkJICAgIH0KIAkJfQogCSAgICB9CS8qIGlmKCEodHhfc3RhdHVzICYgVFhfT0spKSAqLwogCi0JICBscC0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhfc3RhdHVzICYgVFhfTkNPTF9NQVNLKTsKLQkgIGxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJICBkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHR4X3N0YXR1cyAmIFRYX05DT0xfTUFTSyk7CisJICBkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAogCSAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCSAgb3V0YihDUjBfSU5UX0FDSyB8IE9QMF9OT1AsIExDQ1IoYmFzZSkpOwkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCkBAIC00NDUyLDYgKzQ0MzYsMTkgQEAKICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2F2ZWxhbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gd2F2ZWxhbl9vcGVuLAorCS5uZG9fc3RvcAkJPSB3YXZlbGFuX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB3YXZlbGFuX3BhY2tldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3QsCisjaWZkZWYgU0VUX01BQ19BRERSRVNTCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB3YXZlbGFuX3NldF9tYWNfYWRkcmVzcywKKyNlbmRpZgorCS5uZG9fdHhfdGltZW91dAkJPSB3YXZlbGFuX3dhdGNoZG9nLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiB3YXZlbGFuX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC00NTEyLDE3ICs0NTA5LDcgQEAKICAgbHAtPmRldiA9IGRldjsKIAogICAvKiB3YXZlbGFuIE5FVDMgY2FsbGJhY2tzICovCi0gIGRldi0+b3BlbiA9ICZ3YXZlbGFuX29wZW47Ci0gIGRldi0+c3RvcCA9ICZ3YXZlbGFuX2Nsb3NlOwotICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ3YXZlbGFuX3BhY2tldF94bWl0OwotICBkZXYtPmdldF9zdGF0cyA9ICZ3YXZlbGFuX2dldF9zdGF0czsKLSAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0jaWZkZWYgU0VUX01BQ19BRERSRVNTCi0gIGRldi0+c2V0X21hY19hZGRyZXNzID0gJndhdmVsYW5fc2V0X21hY19hZGRyZXNzOwotI2VuZGlmCS8qIFNFVF9NQUNfQUREUkVTUyAqLwotCi0gIC8qIFNldCB0aGUgd2F0Y2hkb2cgdGltZXIgKi8KLSAgZGV2LT50eF90aW1lb3V0CT0gJndhdmVsYW5fd2F0Y2hkb2c7CisgIGRldi0+bmV0ZGV2X29wcyA9ICZ3YXZlbGFuX25ldGRldl9vcHM7CiAgIGRldi0+d2F0Y2hkb2dfdGltZW8JPSBXQVRDSERPR19KSUZGSUVTOwogICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmb3BzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAppbmRleCA2MjgxOTJkLi43MDZmZDMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKQEAgLTU3Niw3ICs1NzYsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFNob3J0Y3V0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwllbl9zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3N0YXRpc3RpY3MJaXdfc3RhdHM7CiB0eXBlZGVmIHN0cnVjdCBpd19xdWFsaXR5CWl3X3F1YWw7CiB0eXBlZGVmIHN0cnVjdCBpd19mcmVxCQlpd19mcmVxOwpAQCAtNTkyLDggKzU5MSw2IEBACiAgKiBGb3IgZWFjaCBuZXR3b3JrIGludGVyZmFjZSwgTGludXgga2VlcCBkYXRhIGluIHR3byBzdHJ1Y3R1cmUuICJkZXZpY2UiCiAgKiBrZWVwIHRoZSBnZW5lcmljIGRhdGEgKHNhbWUgZm9ybWF0IGZvciBldmVyeWJvZHkpIGFuZCAibmV0X2xvY2FsIiBrZWVwCiAgKiB0aGUgYWRkaXRpb25hbCBzcGVjaWZpYyBkYXRhLgotICogTm90ZSB0aGF0IHNvbWUgb2YgdGhpcyBzcGVjaWZpYyBkYXRhIGlzIGluIGZhY3QgZ2VuZXJpYyAoZW5fc3RhdHMsIGZvcgotICogZXhhbXBsZSkuCiAgKi8KIHN0cnVjdCBuZXRfbG9jYWwKIHsKQEAgLTYwMSw3ICs1OTgsNiBAQAogICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldjsJCS8qIFJldmVyc2UgbGluay4uLiAqLwogICBzcGlubG9ja190CXNwaW5sb2NrOwkvKiBTZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSAoU01QKSAqLwogICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbms7CQkvKiBwY21jaWEgc3RydWN0dXJlICovCi0gIGVuX3N0YXRzCXN0YXRzOwkJLyogRXRoZXJuZXQgaW50ZXJmYWNlIHN0YXRpc3RpY3MgKi8KICAgaW50CQlucmVzZXRzOwkvKiBOdW1iZXIgb2YgaHcgcmVzZXRzICovCiAgIHVfY2hhcgljb25maWd1cmVkOwkvKiBJZiBpdCBpcyBjb25maWd1cmVkICovCiAgIHVfY2hhcglyZWNvbmZpZ184MjU5MzsJLyogTmVlZCB0byByZWNvbmZpZ3VyZSB0aGUgY29udHJvbGxlciAqLwpAQCAtNjk0LDggKzY5MCw2IEBACiBzdGF0aWMgdm9pZAogCXd2X2luaXRfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogZGlzcGxheSBzdGFydHVwIGluZm8gKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gSU9DVEwsIFNUQVRTICYgUkVDT05GSUcgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLQl3YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogR2l2ZSBzdGF0cyAvcHJvYy9uZXQvZGV2ICovCiBzdGF0aWMgaXdfc3RhdHMgKgogCXdhdmVsYW5fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUEFDS0VUIFJFQ0VQVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaAppbmRleCA1OWJiM2E1Li44YmNlMWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaApAQCAtNjA2LDcgKzYwNiw3IEBACiAJdTgJCQkJcmVnX2RvbWFpbjsKIAl1OAkJCQl2ZXJzaW9uWzJdOwogCXN0cnVjdCB3bDM1MDFfc2Nhbl9jb25maXJtCWJzc19zZXRbMjBdOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIAlzdGF0czsKKwogCXN0cnVjdCBpd19zdGF0aXN0aWNzCQl3c3RhdHM7CiAJc3RydWN0IGl3X3NweV9kYXRhCQlzcHlfZGF0YTsKIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEJCXdpcmVsZXNzX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IGM5OWExYjYuLjFmNjRkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCkBAIC0xMTEsMTIgKzExMiw2IEBACiAgKi8KIHN0YXRpYyBkZXZfaW5mb190IHdsMzUwMV9kZXZfaW5mbyA9ICJ3bDM1MDFfY3MiOwogCi1zdGF0aWMgaW50IHdsMzUwMV9jaGFuMmZyZXFbXSA9IHsKLQlbMF0gID0gMjQxMiwgWzFdICA9IDI0MTcsIFsyXSAgPSAyNDIyLCBbM10gID0gMjQyNywgWzRdID0gMjQzMiwKLQlbNV0gID0gMjQzNywgWzZdICA9IDI0NDIsIFs3XSAgPSAyNDQ3LCBbOF0gID0gMjQ1MiwgWzldID0gMjQ1NywKLQlbMTBdID0gMjQ2MiwgWzExXSA9IDI0NjcsIFsxMl0gPSAyNDcyLCBbMTNdID0gMjQ3NywKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWludCByZWdfZG9tYWluOwogCWludCBtaW4sIG1heCwgZGVmbHQ7CkBAIC0xMDA1LDcgKzEwMDAsNyBAQAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvYyBhIHNrX2J1ZmYgb2Ygc2l6ZSAlZC5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOwotCQl0aGlzLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCX0gZWxzZSB7CiAJCXNrYi0+ZGV2ID0gZGV2OwogCQlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBJUCBoZWFkZXJzIG9uIDE2IGJ5dGVzIGJvdW5kYXJpZXMgKi8KQEAgLTEwMTMsOCArMTAwOCw4IEBACiAJCXdsMzUwMV9yZWNlaXZlKHRoaXMsIHNrYi0+ZGF0YSwgcGt0X2xlbik7CiAJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJc2tiLT5wcm90b2NvbAk9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJdGhpcy0+c3RhdHMucnhfcGFja2V0cysrOwotCQl0aGlzLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGlmX3J4KHNrYik7CiAJfQogfQpAQCAtMTMxNiw3ICsxMzExLDcgQEAKIHN0YXRpYyB2b2lkIHdsMzUwMV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdGhpcy0+c3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKQEAgLTEzNTEsMTEgKzEzNDYsMTEgQEAKIAlpZiAoZW5hYmxlZCkKIAkJd2wzNTAxX3VuYmxvY2tfaW50ZXJydXB0KHRoaXMpOwogCWlmIChyYykgewotCQkrK3RoaXMtPnN0YXRzLnR4X2Ryb3BwZWQ7CisJCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfSBlbHNlIHsKLQkJKyt0aGlzLT5zdGF0cy50eF9wYWNrZXRzOwotCQl0aGlzLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCWtmcmVlX3NrYihza2IpOwogCiAJCWlmICh0aGlzLT50eF9idWZmZXJfY250IDwgMikKQEAgLTE0MDUsMTMgKzE0MDAsNiBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKndsMzUwMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZ0aGlzLT5zdGF0czsKLX0KLQogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICp3bDM1MDFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE1MTAsNyArMTQ5OCw3IEBACiB7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXdycXUtPmZyZXEubSA9IHdsMzUwMV9jaGFuMmZyZXFbdGhpcy0+Y2hhbiAtIDFdICogMTAwMDAwOworCXdycXUtPmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcSh0aGlzLT5jaGFuKSAqIDEwMDAwMDsKIAl3cnF1LT5mcmVxLmUgPSAxOwogCXJldHVybiAwOwogfQpAQCAtMTg5NSw2ICsxODgzLDE2IEBACiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHdsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdsMzUwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB3bDM1MDFfb3BlbiwKKwkubmRvX3N0b3AJCT0gd2wzNTAxX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB3bDM1MDFfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB3bDM1MDFfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKiB3bDM1MDFfYXR0YWNoIC0gY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIKICAqCkBAIC0xOTI3LDE3ICsxOTI1LDE2IEBACiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3bDM1MDFfY2FyZCkpOwogCWlmICghZGV2KQogCQlnb3RvIG91dF9saW5rOwotCWRldi0+b3BlbgkJPSB3bDM1MDFfb3BlbjsKLQlkZXYtPnN0b3AJCT0gd2wzNTAxX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gd2wzNTAxX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gd2wzNTAxX3R4X3RpbWVvdXQ7CisKKworCWRldi0+bmV0ZGV2X29wcwkJPSAmd2wzNTAxX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IDUgKiBIWjsKLQlkZXYtPmdldF9zdGF0cwkJPSB3bDM1MDFfZ2V0X3N0YXRzOworCiAJdGhpcyA9IG5ldGRldl9wcml2KGRldik7CiAJdGhpcy0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZ0aGlzLT5zcHlfZGF0YTsKIAl0aGlzLT5wX2RldiA9IHBfZGV2OwogCWRldi0+d2lyZWxlc3NfZGF0YQk9ICZ0aGlzLT53aXJlbGVzc19kYXRhOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMJPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJndsMzUwMV9oYW5kbGVyX2RlZjsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzCT0gJndsMzUwMV9oYW5kbGVyX2RlZjsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmb3BzKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcF9kZXYtPnByaXYgPSBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCBiNDVjMjdkLi45YjI0NGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMzI4LDggKzMyOCw4IEBACiAJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVtkYXRhbGVuLTI0XSwgMik7CiAJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEsIGxlbik7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB6ZC0+ZGV2KTsKLQkJCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQl6ZC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQl6ZC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCQlnb3RvIHJlc3VibWl0OwogCQl9CkBAIC0zODQsOCArMzg0LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSs4LCBsZW4pOwogCQl9CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOwotCQl6ZC0+c3RhdHMucnhfcGFja2V0cysrOwotCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXpkLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJemQtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGlmX3J4KHNrYik7CiAJfQogcmVzdWJtaXQ6CkBAIC03ODcsNyArNzg3LDcgQEAKIAlzdHJ1Y3QgdXJiICp1cmIgPSB6ZC0+dHhfdXJiOwogCiAJaWYgKCF6ZC0+bWFjX2VuYWJsZWQgfHwgemQtPm1vbml0b3IpIHsKLQkJemQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04MTcsMTIgKzgxNywxMiBAQAogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIoemQtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVycikgewotCQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCXJldHVybiBlcnI7CiAJfQotCXpkLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JemQtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJa2ZyZWVfc2tiKHNrYik7CiAKQEAgLTgzOCw3ICs4MzgsNyBAQAogCWRldl93YXJuKCZ6ZC0+dXNiLT5kZXYsICIlczogVFggdGltZW91dCwgc2hvb3RpbmcgZG93biB1cmJcbiIsCiAJICAgIGRldi0+bmFtZSk7CiAJdXNiX3VubGlua191cmIoemQtPnR4X3VyYik7Ci0JemQtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJLyogUmVzdGFydCB0aGUgdGltZW91dCB0byBxdWlldCB0aGUgd2F0Y2hkb2c6ICovCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiB9CkBAIC04NjEsMTMgKzg2MSw2IEBACiAJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnpkMTIwMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnpkLT5zdGF0czsKLX0KLQogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICp6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTE5LDEwICs5MTIsOSBAQAogCWlmIChmcmVxLT5lID09IDApCiAJCWNoYW5uZWwgPSBmcmVxLT5tOwogCWVsc2UgewotCQlpZiAoZnJlcS0+bSA+PSAyNDgyKQotCQkJY2hhbm5lbCA9IDE0OwotCQlpZiAoZnJlcS0+bSA+PSAyNDA3KQotCQkJY2hhbm5lbCA9IChmcmVxLT5tLTI0MDcpLzU7CisJCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZnJlcS0+bSk7CisJCWlmIChjaGFubmVsIDwgMCkKKwkJCWNoYW5uZWwgPSAwOwogCX0KIAogCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZPV05DSEFOTkVMLCBjaGFubmVsKTsKQEAgLTE3MjUsNiArMTcxNywxOCBAQAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMJPSB6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB6ZDEyMDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gemQxMjAxX25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB6ZDEyMDFfbmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHpkMTIwMV90eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gemQxMjAxX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB6ZDEyMDFfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IHpkMTIwMV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewpAQCAtMTc3NywxNiArMTc4MSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfc3RhcnQ7CiAKLQlkZXYtPm9wZW4gPSB6ZDEyMDFfbmV0X29wZW47Ci0JZGV2LT5zdG9wID0gemQxMjAxX25ldF9zdG9wOwotCWRldi0+Z2V0X3N0YXRzID0gemQxMjAxX2dldF9zdGF0czsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KLQkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZ6ZDEyMDFfaXdfaGFuZGxlcnM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB6ZDEyMDFfaGFyZF9zdGFydF94bWl0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ6ZDEyMDFfbmV0ZGV2X29wczsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnpkMTIwMV9pd19oYW5kbGVyczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gWkQxMjAxX1RYX1RJTUVPVVQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gemQxMjAxX3R4X3RpbWVvdXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3M7CiAJc3RyY3B5KGRldi0+bmFtZSwgIndsYW4lZCIpOwogCiAJZXJyID0gemQxMjAxX2dldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZPV05NQUNBRERSLCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKaW5kZXggMjM1ZjBlZS4uZGQ3ZWExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOwogCWludAkJCXJlbW92ZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd3N0YXRzOwogCiAJaW50CQkJZW5kcF9pbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwppbmRleCBmMTUxOTE0Li4yYzgxM2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCkBAIC0xNjE2LDMgKzE2MTYsMjQgQEAKIAogCXJldHVybiB6ZF9pb3dyaXRlMzJhKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKIH0KKwordTY0IHpkX2NoaXBfZ2V0X3RzZihzdHJ1Y3QgemRfY2hpcCAqY2hpcCkKK3sKKwlpbnQgcjsKKwlzdGF0aWMgY29uc3QgemRfYWRkcl90IGF3X3B0X2JpX2FkZHJbXSA9CisJCXsgQ1JfVFNGX0xPV19QQVJULCBDUl9UU0ZfSElHSF9QQVJUIH07CisJdTMyIHZhbHVlc1syXTsKKwl1NjQgdHNmOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCXIgPSB6ZF9pb3JlYWQzMnZfbG9ja2VkKGNoaXAsIHZhbHVlcywgKGNvbnN0IHpkX2FkZHJfdCAqKWF3X3B0X2JpX2FkZHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShhd19wdF9iaV9hZGRyKSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJaWYgKHIpCisJCXJldHVybiAwOworCisJdHNmID0gdmFsdWVzWzFdOworCXRzZiA9ICh0c2YgPDwgMzIpIHwgdmFsdWVzWzBdOworCisJcmV0dXJuIHRzZjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAppbmRleCBmOGMwNjFhLi5lZTQyNzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCkBAIC05NTAsNCArOTUwLDYgQEAKIGludCB6ZF9jaGlwX3NldF9tdWx0aWNhc3RfaGFzaChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwKIAkgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB6ZF9tY19oYXNoICpoYXNoKTsKIAordTY0IHpkX2NoaXBfZ2V0X3RzZihzdHJ1Y3QgemRfY2hpcCAqY2hpcCk7CisKICNlbmRpZiAvKiBfWkRfQ0hJUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9kZWYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCmluZGV4IDUyMDBkYjQuLjZhYzU5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCkBAIC0zMyw4ICszMywxMyBAQAogI2lmZGVmIERFQlVHCiAjICBkZWZpbmUgZGV2X2RiZ19mKGRldiwgZm10LCBhcmdzLi4uKSBcCiAJICBkZXZfcHJpbnRrX2YoS0VSTl9ERUJVRywgZGV2LCBmbXQsICMjIGFyZ3MpCisjICBkZWZpbmUgZGV2X2RiZ19mX2xpbWl0KGRldiwgZm10LCBhcmdzLi4uKSBkbyB7IFwKKwlpZiAobmV0X3JhdGVsaW1pdCgpKSBcCisJCWRldl9wcmludGtfZihLRVJOX0RFQlVHLCBkZXYsIGZtdCwgIyMgYXJncyk7IFwKK30gd2hpbGUgKDApCiAjZWxzZQogIyAgZGVmaW5lIGRldl9kYmdfZihkZXYsIGZtdCwgYXJncy4uLikgZG8geyAodm9pZCkoZGV2KTsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBkZXZfZGJnX2ZfbGltaXQoZGV2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgKHZvaWQpKGRldik7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogREVCVUcgKi8KIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IGE2MTFhZDguLmMzYTUxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0xNzAsMTAgKzE3MCwxMCBAQAogCQlnb3RvIGRpc2FibGVfaW50OwogCiAJciA9IHpkX3JlZzJhbHBoYTIobWFjLT5yZWdkb21haW4sIGFscGhhMik7Ci0JaWYgKCFyKQotCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBhbHBoYTIpOworCWlmIChyKQorCQlnb3RvIGRpc2FibGVfaW50OwogCi0JciA9IDA7CisJciA9IHJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGFscGhhMik7CiBkaXNhYmxlX2ludDoKIAl6ZF9jaGlwX2Rpc2FibGVfaW50KGNoaXApOwogb3V0OgpAQCAtNTc1LDEzICs1NzUsMTcgQEAKIAogCXIgPSBmaWxsX2N0cmxzZXQobWFjLCBza2IpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBmYWlsOwogCiAJaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IGh3OwogCiAJciA9IHpkX3VzYl90eCgmbWFjLT5jaGlwLnVzYiwgc2tiKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gZmFpbDsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2OCwxMyArNzcyLDIzIEBACiAJCQlpZiAoIWJlYWNvbikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCXIgPSB6ZF9tYWNfY29uZmlnX2JlYWNvbihodywgYmVhY29uKTsKLQkJCWlmIChyIDwgMCkKLQkJCQlyZXR1cm4gcjsKLQkJCXIgPSB6ZF9zZXRfYmVhY29uX2ludGVydmFsKCZtYWMtPmNoaXAsIEJDTl9NT0RFX0lCU1MgfAotCQkJCQlody0+Y29uZi5iZWFjb25faW50KTsKLQkJCWlmIChyIDwgMCkKLQkJCQlyZXR1cm4gcjsKIAkJCWtmcmVlX3NrYihiZWFjb24pOworCisJCQlpZiAociA8IDApCisJCQkJcmV0dXJuIHI7CisJCX0KKworCQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSB7CisJCQl1MzIgaW50ZXJ2YWw7CisKKwkJCWlmIChjb25mLT5lbmFibGVfYmVhY29uKQorCQkJCWludGVydmFsID0gQkNOX01PREVfSUJTUyB8IGh3LT5jb25mLmJlYWNvbl9pbnQ7CisJCQllbHNlCisJCQkJaW50ZXJ2YWwgPSAwOworCisJCQlyID0gemRfc2V0X2JlYWNvbl9pbnRlcnZhbCgmbWFjLT5jaGlwLCBpbnRlcnZhbCk7CisJCQlpZiAociA8IDApCisJCQkJcmV0dXJuIHI7CiAJCX0KIAl9IGVsc2UKIAkJYXNzb2NpYXRlZCA9IGlzX3ZhbGlkX2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpOwpAQCAtNzkzLDEwICs4MDcsOSBAQAogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemRfbWFjLCBwcm9jZXNzX2ludHIpOwogCiAJaW50X3N0YXR1cyA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopKG1hYy0+aW50cl9idWZmZXIrNCkpOwotCWlmIChpbnRfc3RhdHVzICYgSU5UX0NGR19ORVhUX0JDTikgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIklOVF9DRkdfTkVYVF9CQ05cbiIpOwotCX0gZWxzZQorCWlmIChpbnRfc3RhdHVzICYgSU5UX0NGR19ORVhUX0JDTikKKwkJZGV2X2RiZ19mX2xpbWl0KHpkX21hY19kZXYobWFjKSwgIklOVF9DRkdfTkVYVF9CQ05cbiIpOworCWVsc2UKIAkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIlVuc3VwcG9ydGVkIGludGVycnVwdFxuIik7CiAKIAl6ZF9jaGlwX2VuYWJsZV9od2ludCgmbWFjLT5jaGlwKTsKQEAgLTkyNiw2ICs5MzksMTIgQEAKIAl9CiB9CiAKK3N0YXRpYyB1NjQgemRfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOworCXJldHVybiB6ZF9jaGlwX2dldF90c2YoJm1hYy0+Y2hpcCk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB6ZF9vcHMgPSB7CiAJLnR4CQkJPSB6ZF9vcF90eCwKIAkuc3RhcnQJCQk9IHpkX29wX3N0YXJ0LApAQCAtOTM2LDYgKzk1NSw3IEBACiAJLmNvbmZpZ19pbnRlcmZhY2UJPSB6ZF9vcF9jb25maWdfaW50ZXJmYWNlLAogCS5jb25maWd1cmVfZmlsdGVyCT0gemRfb3BfY29uZmlndXJlX2ZpbHRlciwKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHpkX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLmdldF90c2YJCT0gemRfb3BfZ2V0X3RzZiwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnpkX21hY19hbGxvY19odyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTk2Nyw3ICs5ODcsNyBAQAogCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmbWFjLT5iYW5kOwogCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCOworCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUM7CiAKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IGNkNjE4NGUuLmY2NzMyNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IG5ldGZyb250X3R4X3Nsb3RfYXZhaWxhYmxlKHN0cnVjdCBuZXRmcm9udF9pbmZvICpucCkKQEAgLTMyOCw3ICszMjgsNyBAQAogCQl4ZW5uZXRfYWxsb2NfcnhfYnVmZmVycyhkZXYpOwogCQlucC0+cnguc3JpbmctPnJzcF9ldmVudCA9IG5wLT5yeC5yc3BfY29ucyArIDE7CiAJCWlmIChSSU5HX0hBU19VTkNPTlNVTUVEX1JFU1BPTlNFUygmbnAtPnJ4KSkKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZucC0+cnhfbG9jayk7CiAKQEAgLTk3OSw3ICs5NzksNyBAQAogCiAJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFU1BPTlNFUygmbnAtPnJ4LCBtb3JlX3RvX2RvKTsKIAkJaWYgKCFtb3JlX3RvX2RvKQotCQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQpAQCAtMTMxNyw3ICsxMzE3LDcgQEAKIAkJeGVubmV0X3R4X2J1Zl9nYyhkZXYpOwogCQkvKiBVbmRlciB0eF9sb2NrOiBwcm90ZWN0cyBhY2Nlc3MgdG8gcnggc2hhcmVkLXJpbmcgaW5kZXhlcy4gKi8KIAkJaWYgKFJJTkdfSEFTX1VOQ09OU1VNRURfUkVTUE9OU0VTKCZucC0+cngpKQotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+dHhfbG9jaywgZmxhZ3MpOwpAQCAtMTUxMSw3ICsxNTExLDcgQEAKIHN0YXRpYyB2b2lkIHhlbm5ldF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBUdXJuIG9mZiBhbGwgR1NPIGJpdHMgZXhjZXB0IFJPQlVTVC4gKi8KLQlkZXYtPmZlYXR1cmVzICY9ICgxIDw8IE5FVElGX0ZfR1NPX1NISUZUKSAtIDE7CisJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9HU09fTUFTSzsKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1JPQlVTVDsKIAl4ZW5uZXRfc2V0X3NnKGRldiwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3h0c29uaWMuYyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwppbmRleCAwM2EzZjM0Li5hMTJhNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94dHNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQveHRzb25pYy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAogCWlmIChscC0+ZGVzY3JpcHRvcnMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciAiCi0JCQkJIiBkZXNjcmlwdG9ycy5cbiIsIGxwLT5kZXZpY2UtPmJ1c19pZCk7CisJCQkJIiBkZXNjcmlwdG9ycy5cbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCmluZGV4IDJmMTY0NWQuLjc0NzdmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCkBAIC0xMDcsOSArMTA3LDkgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMDUgIDEvMDkvMjAwMSAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgotS0VSTl9JTkZPICIgICh1bm9mZmljaWFsIDIuNC54IHBvcnQsICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisgIEtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMDUgIDEvMDkvMjAwMSAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgorICBLRVJOX0lORk8gIiAgKHVub2ZmaWNpYWwgMi40LnggcG9ydCwgIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQYWNrZXQgRW5naW5lcyBZZWxsb3dmaW4gRy1OSUMgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCBmMGIxNWM5Li4wYTY5OTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0zNTgsNiArMzU4LDE3IEBACiAJICogbXVsdGljYXN0IGFkZHJlc3MgY29uZmlndXJlZCBpc24ndCBlcXVhbCB0byBJRkZfQUxMTVVMVEkgKi8KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB6bmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHpuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gem5ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gem5ldF9zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHpuZXRfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSB6bmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoZSBaLU5vdGUgcHJvYmUgaXMgcHJldHR5IGVhc3kuICBUaGUgTkVUSURCTEsgZXhpc3RzIGluIHRoZSBzYWZlLXRvLXByb2JlCiAgICBCSU9TIGFyZWEuICBXZSBqdXN0IHNjYW4gZm9yIHRoZSBzaWduYXR1cmUsIGFuZCBwdWxsIHRoZSB2aXRhbCBwYXJhbWV0ZXJzCiAgICBvdXQgb2YgdGhlIHN0cnVjdHVyZS4gKi8KQEAgLTQ0MCwxMSArNDUxLDcgQEAKIAl6bmV0LT50eF9lbmQgPSB6bmV0LT50eF9zdGFydCArIHpuZXQtPnR4X2J1Zl9sZW47CiAKIAkvKiBUaGUgWk5FVC1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZ6bmV0X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmem5ldF9zZW5kX3BhY2tldDsKLQlkZXYtPnN0b3AgPSAmem5ldF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ6bmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB6bmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnpuZXRfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCmluZGV4IDlkYTVhNGIuLmMzZWE1ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogc3RhdGljIExJU1RfSEVBRChkeWluZ190YXNrcyk7CiBzdGF0aWMgTElTVF9IRUFEKGRlYWRfdGFza3MpOwotc3RhdGljIGNwdW1hc2tfdCBtYXJrZWRfY3B1cyA9IENQVV9NQVNLX05PTkU7CitzdGF0aWMgY3B1bWFza192YXJfdCBtYXJrZWRfY3B1czsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19tb3J0dWFyeSk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3Rhc2tfbW9ydHVhcnkodm9pZCk7CiAKQEAgLTQ1NiwxMCArNDU2LDEwIEBACiB7CiAJaW50IGk7CiAKLQljcHVfc2V0KGNwdSwgbWFya2VkX2NwdXMpOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hcmtlZF9jcHVzKTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAoIWNwdV9pc3NldChpLCBtYXJrZWRfY3B1cykpCisJCWlmICghY3B1bWFza190ZXN0X2NwdShpLCBtYXJrZWRfY3B1cykpCiAJCQlyZXR1cm47CiAJfQogCkBAIC00NjgsNyArNDY4LDcgQEAKIAkgKi8KIAlwcm9jZXNzX3Rhc2tfbW9ydHVhcnkoKTsKIAotCWNwdXNfY2xlYXIobWFya2VkX2NwdXMpOworCWNwdW1hc2tfY2xlYXIobWFya2VkX2NwdXMpOwogfQogCiAKQEAgLTU2NSw2ICs1NjUsMjAgQEAKIAltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKK2ludCBfX2luaXQgYnVmZmVyX3N5bmNfaW5pdCh2b2lkKQoreworCWlmICghYWxsb2NfY3B1bWFza192YXIoJm1hcmtlZF9jcHVzLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcHVtYXNrX2NsZWFyKG1hcmtlZF9jcHVzKTsKKwkJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19leGl0IGJ1ZmZlcl9zeW5jX2NsZWFudXAodm9pZCkKK3sKKwlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKK30KKwogLyogVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFkZCBhIGJ1ZmZlciB3b3J0aCBvZiBkYXRhIGRpcmVjdGx5IHRvCiAgKiB0aGUga2VybmVsIGJ1ZmZlci4gVGhlIGJ1ZmZlciBpcyBhc3N1bWVkIHRvIGJlIGEgY2lyY3VsYXIgYnVmZmVyLgogICogVGFrZSB0aGUgZW50cmllcyBmcm9tIGluZGV4IHN0YXJ0IGFuZCBlbmQgYXQgaW5kZXggZW5kLCB3cmFwcGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oCmluZGV4IDMxMTA3MzIuLjBlYmY1ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaAorKysgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmgKQEAgLTE5LDQgKzE5LDggQEAKIC8qIHN5bmMgdGhlIGdpdmVuIENQVSdzIGJ1ZmZlciAqLwogdm9pZCBzeW5jX2J1ZmZlcihpbnQgY3B1KTsKIAorLyogaW5pdGlhbGl6ZS9kZXN0cm95IHRoZSBidWZmZXIgc3lzdGVtLiAqLworaW50IGJ1ZmZlcl9zeW5jX2luaXQodm9pZCk7Cit2b2lkIGJ1ZmZlcl9zeW5jX2NsZWFudXAodm9pZCk7CisKICNlbmRpZiAvKiBPUFJPRklMRV9CVUZGRVJfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMgYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKaW5kZXggM2NmZmNlOS4uY2VkMzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYwpAQCAtMTgzLDYgKzE4MywxMCBAQAogewogCWludCBlcnI7CiAKKwllcnIgPSBidWZmZXJfc3luY19pbml0KCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IG9wcm9maWxlX2FyY2hfaW5pdCgmb3Byb2ZpbGVfb3BzKTsKIAogCWlmIChlcnIgPCAwIHx8IHRpbWVyKSB7CkBAIC0xOTEsOCArMTk1LDEwIEBACiAJfQogCiAJZXJyID0gb3Byb2ZpbGVmc19yZWdpc3RlcigpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlvcHJvZmlsZV9hcmNoX2V4aXQoKTsKKwkJYnVmZmVyX3N5bmNfY2xlYW51cCgpOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0yMDIsNiArMjA4LDcgQEAKIHsKIAlvcHJvZmlsZWZzX3VucmVnaXN0ZXIoKTsKIAlvcHJvZmlsZV9hcmNoX2V4aXQoKTsKKwlidWZmZXJfc3luY19jbGVhbnVwKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZGluby5jIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCmluZGV4IGQ1MzlkOWQuLmJiNWExYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogCXJlcyA9ICZkaW5vX2Rldi0+aGJhLmxtbWlvX3NwYWNlOwogCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKIAlzaXplID0gc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIkRpbm8gTE1NSU8gKCVzKSIsIAotCQkJIGJ1cy0+YnJpZGdlLT5idXNfaWQpOworCQkJIGRldl9uYW1lKGJ1cy0+YnJpZGdlKSk7CiAJcmVzLT5uYW1lID0ga21hbGxvYyhzaXplKzEsIEdGUF9LRVJORUwpOwogCWlmKHJlcy0+bmFtZSkKIAkJc3RyY3B5KChjaGFyICopcmVzLT5uYW1lLCBuYW1lKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpsbiwgKnRtcF9sbjsKIAogCQlwcmludGsoS0VSTl9FUlIgIkRpbm86IGNhbm5vdCBhdHRhY2ggYnVzICVzXG4iLAotCQkgICAgICAgYnVzLT5icmlkZ2UtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShidXMtPmJyaWRnZSkpOwogCQkvKiBraWxsIHRoZSBidXMsIHdlIGNhbid0IGRvIGFueXRoaW5nIHdpdGggaXQgKi8KIAkJbGlzdF9mb3JfZWFjaF9zYWZlKGxuLCB0bXBfbG4sICZidXMtPmRldmljZXMpIHsKIAkJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwY2lfZGV2X2IobG4pOwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAJCQlidXMtPnJlc291cmNlW2krMV0gPSAmcmVzW2ldOwogCQl9CiAKLQl9IGVsc2UgaWYoYnVzLT5zZWxmKSB7CisJfSBlbHNlIGlmIChidXMtPnBhcmVudCkgewogCQlpbnQgaTsKIAogCQlwY2lfcmVhZF9icmlkZ2VfYmFzZXMoYnVzKTsKQEAgLTYxMSwxMiArNjExLDEyIEBACiAJCQl9CiAJCQkJCQogCQkJREJHKCJERUJVRyAlcyBhc3NpZ25pbmcgJWQgWzB4JWx4LDB4JWx4XVxuIiwKLQkJCSAgICBidXMtPnNlbGYtPmRldi5idXNfaWQsIGksCisJCQkgICAgZGV2X25hbWUoJmJ1cy0+c2VsZi0+ZGV2KSwgaSwKIAkJCSAgICBidXMtPnNlbGYtPnJlc291cmNlW2ldLnN0YXJ0LAogCQkJICAgIGJ1cy0+c2VsZi0+cmVzb3VyY2VbaV0uZW5kKTsKIAkJCXBjaV9hc3NpZ25fcmVzb3VyY2UoYnVzLT5zZWxmLCBpKTsKIAkJCURCRygiREVCVUcgJXMgYWZ0ZXIgYXNzaWduICVkIFsweCVseCwweCVseF1cbiIsCi0JCQkgICAgYnVzLT5zZWxmLT5kZXYuYnVzX2lkLCBpLAorCQkJICAgIGRldl9uYW1lKCZidXMtPnNlbGYtPmRldiksIGksCiAJCQkgICAgYnVzLT5zZWxmLT5yZXNvdXJjZVtpXS5zdGFydCwKIAkJCSAgICBidXMtPnNlbGYtPnJlc291cmNlW2ldLmVuZCk7CiAJCX0KQEAgLTEwMjYsNyArMTAyNiw4IEBACiAJCWRpbm9fY3VycmVudF9idXMgPSBidXMtPnN1Ym9yZGluYXRlICsgMTsKIAkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogZmFpbGVkIHRvIHNjYW4gUENJIGJ1cyBvbiAlcyAocHJvYmFibHkgZHVwbGljYXRlIGJ1cyBudW1iZXIgJWQpXG4iLCBkZXYtPmRldi5idXNfaWQsIGRpbm9fY3VycmVudF9idXMpOworCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBmYWlsZWQgdG8gc2NhbiBQQ0kgYnVzIG9uICVzIChwcm9iYWJseSBkdXBsaWNhdGUgYnVzIG51bWJlciAlZClcbiIsCisJCSAgICAgICBkZXZfbmFtZSgmZGV2LT5kZXYpLCBkaW5vX2N1cnJlbnRfYnVzKTsKIAkJLyogaW5jcmVtZW50IHRoZSBidXMgbnVtYmVyIGluIGNhc2Ugb2YgZHVwbGljYXRlcyAqLwogCQlkaW5vX2N1cnJlbnRfYnVzKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwppbmRleCBlNzZkYjllLi5kMzM2MzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9nc2MuYworKysgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwpAQCAtMTg2LDI5ICsxODYsMzQgQEAKIAkqaXJxcCA9IGlycTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQorc3RydWN0IGdzY19maXh1cF9zdHJ1Y3QgeworCXZvaWQgKCpjaG9vc2VfaXJxKShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqLCB2b2lkICopOworCXZvaWQgKmN0cmw7Cit9OworCitzdGF0aWMgaW50IGdzY19maXh1cF9pcnFzX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZSAqIG4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCkgOiBOVUxMOworCXN0cnVjdCBwYXJpc2NfZGV2aWNlICpwYWRldiA9IHRvX3BhcmlzY19kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZ3NjX2ZpeHVwX3N0cnVjdCAqZ2YgPSBkYXRhOworCisJLyogd29yay1hcm91bmQgZm9yIDcxNS82NCBhbmQgb3RoZXJzIHdoaWNoIGhhdmUgcGFyZW50CisJICAgYXQgcGF0aCBbNV0gYW5kIGNoaWxkcmVuIGF0IHBhdGggWzUvMC94XSAqLworCWlmIChwYWRldi0+aWQuaHdfdHlwZSA9PSBIUEhXX0ZBVUxUWSkKKwkJZ3NjX2ZpeHVwX2lycXMocGFkZXYsIGdmLT5jdHJsLCBnZi0+Y2hvb3NlX2lycSk7CisJZ2YtPmNob29zZV9pcnEocGFkZXYsIGdmLT5jdHJsKTsKKworCXJldHVybiAwOwogfQogCiB2b2lkIGdzY19maXh1cF9pcnFzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpwYXJlbnQsIHZvaWQgKmN0cmwsCiAJCQl2b2lkICgqY2hvb3NlX2lycSkoc3RydWN0IHBhcmlzY19kZXZpY2UgKiwgdm9pZCAqKSkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGtsaXN0X2l0ZXIgaTsKKwlzdHJ1Y3QgZ3NjX2ZpeHVwX3N0cnVjdCBkYXRhID0geworCQkuY2hvb3NlX2lycQk9IGNob29zZV9pcnEsCisJCS5jdHJsCQk9IGN0cmwsCisJfTsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5kZXYua2xpc3RfY2hpbGRyZW4sICZpKTsKLQl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkpIHsKLQkJc3RydWN0IHBhcmlzY19kZXZpY2UgKnBhZGV2ID0gdG9fcGFyaXNjX2RldmljZShkZXYpOwotCi0JCS8qIHdvcmstYXJvdW5kIGZvciA3MTUvNjQgYW5kIG90aGVycyB3aGljaCBoYXZlIHBhcmVudCAKLQkJICAgYXQgcGF0aCBbNV0gYW5kIGNoaWxkcmVuIGF0IHBhdGggWzUvMC94XSAqLwotCQlpZiAocGFkZXYtPmlkLmh3X3R5cGUgPT0gSFBIV19GQVVMVFkpCi0JCQlyZXR1cm4gZ3NjX2ZpeHVwX2lycXMocGFkZXYsIGN0cmwsIGNob29zZV9pcnEpOwotCQljaG9vc2VfaXJxKHBhZGV2LCBjdHJsKTsKLQl9Ci0Ja2xpc3RfaXRlcl9leGl0KCZpKTsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnBhcmVudC0+ZGV2LCAmZGF0YSwgZ3NjX2ZpeHVwX2lycXNfY2FsbGJhY2spOwogfQogCiBpbnQgZ3NjX2NvbW1vbl9zZXR1cChzdHJ1Y3QgcGFyaXNjX2RldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ3NjX2FzaWMgKmdzY19hc2ljKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCmluZGV4IDA3OTc2NTkuLjUwMWFhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYworKysgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCX0KIAogCS8qIENoZWNrIGlmIHBjaWRldiBiZWhpbmQgYSBQUEIgKi8KLQlpZiAoTlVMTCAhPSBwY2lkZXYtPmJ1cy0+c2VsZikgeworCWlmIChwY2lkZXYtPmJ1cy0+cGFyZW50KSB7CiAJCS8qIENvbnZlcnQgcGNpZGV2IElOVFJfUElOIGludG8gc29tZXRoaW5nIHdlCiAJCSoqIGNhbiBsb29rdXAgaW4gdGhlIElSVC4KIAkJKi8KQEAgLTUyMywxMCArNTIzLDkgQEAKICNlbmRpZiAvKiBQQ0lfQlJJREdFX0ZVTkNTICovCiAKIAkJLyoKLQkJKiogTG9jYXRlIHRoZSBob3N0IHNsb3QgdGhlIFBQQiBuZWFyZXN0IHRoZSBIb3N0IGJ1cwotCQkqKiBhZGFwdGVyLgotCQkqLwotCQl3aGlsZSAoTlVMTCAhPSBwLT5wYXJlbnQtPnNlbGYpCisJCSAqIExvY2F0ZSB0aGUgaG9zdCBzbG90IG9mIHRoZSBQUEIuCisJCSAqLworCQl3aGlsZSAocC0+cGFyZW50LT5wYXJlbnQpCiAJCQlwID0gcC0+cGFyZW50OwogCiAJCWludHJfc2xvdCA9IFBDSV9TTE9UKHAtPnNlbGYtPmRldmZuKTsKQEAgLTcwOSwxMSArNzA4LDE0IEBACiAJc3RydWN0IHZlY3Rvcl9pbmZvICp2aSA9IGlvc2FwaWNfZ2V0X3ZlY3RvcihpcnEpOwogCXUzMiBkMCwgZDEsIGR1bW15X2QwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRlc3RfY3B1OwogCi0JaWYgKGNwdV9jaGVja19hZmZpbml0eShpcnEsIGRlc3QpKQorCWRlc3RfY3B1ID0gY3B1X2NoZWNrX2FmZmluaXR5KGlycSwgZGVzdCk7CisJaWYgKGRlc3RfY3B1IDwgMCkKIAkJcmV0dXJuOwogCi0JdmktPnR4bl9hZGRyID0gdHhuX2FmZmluaXR5X2FkZHIoaXJxLCBjcHVtYXNrX2ZpcnN0KGRlc3QpKTsKKwlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoZGVzdF9jcHUpOworCXZpLT50eG5fYWRkciA9IHR4bl9hZmZpbml0eV9hZGRyKGlycSwgZGVzdF9jcHUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvc2FwaWNfbG9jaywgZmxhZ3MpOwogCS8qIGQxIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBDUFUsIHNvIG9ubHkgd2FudCB0byBzZXQgdGhhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvbGJhX3BjaS5jIGIvZHJpdmVycy9wYXJpc2MvbGJhX3BjaS5jCmluZGV4IGQ4MjMzZGUuLjU5ZmJiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYworKysgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKQEAgLTY0NCw3ICs2NDQsNyBAQAogCSoqIFByb3Blcmx5IFNldHVwIE1NSU8gcmVzb3VyY2VzIGZvciB0aGlzIGJ1cy4KIAkqKiBwY2lfYWxsb2NfcHJpbWFyeV9idXMoKSBtYW5nbGVzIHRoaXMuCiAJKi8KLQlpZiAoYnVzLT5zZWxmKSB7CisJaWYgKGJ1cy0+cGFyZW50KSB7CiAJCWludCBpOwogCQkvKiBQQ0ktUENJIEJyaWRnZSAqLwogCQlwY2lfcmVhZF9icmlkZ2VfYmFzZXMoYnVzKTsKQEAgLTgwMiw3ICs4MDIsNyBAQAogKiogQ2FuJ3QgZml4dXAgaGVyZSBhbnl3YXkuLi4uZ2Fyci4uLgogKi8KIAlpZiAoZmJiX2VuYWJsZSkgewotCQlpZiAoYnVzLT5zZWxmKSB7CisJCWlmIChidXMtPnBhcmVudCkgewogCQkJdTggY29udHJvbDsKIAkJCS8qIGVuYWJsZSBvbiBQUEIgKi8KIAkJCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShidXMtPnNlbGYsIFBDSV9CUklER0VfQ09OVFJPTCwgJmNvbnRyb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwppbmRleCBhNzBjZjE2Li5lNTk5OWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwpAQCAtMTIwNiwzMSArMTIwNiw0OSBAQAogCXJldHVybiAodm9pZCAqKSBwZGlyX2Jhc2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpuZXh0X2RldmljZShzdHJ1Y3Qga2xpc3RfaXRlciAqaSkKK3N0cnVjdCBpYmFzZV9kYXRhX3N0cnVjdCB7CisJc3RydWN0IGlvYyAqaW9jOworCWludCBpb2NfbnVtOworfTsKKworc3RhdGljIGludCBzZXR1cF9pYmFzZV9pbWFza19jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0gICAgICAgIHN0cnVjdCBrbGlzdF9ub2RlICogbiA9IGtsaXN0X25leHQoaSk7Ci0gICAgICAgIHJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCkgOiBOVUxMOworCS8qIGxiYV9zZXRfaXJlZ3MoKSBpcyBpbiBkcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMgKi8KKyAgICAgICAgZXh0ZXJuIHZvaWQgbGJhX3NldF9pcmVncyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqLCB1MzIsIHUzMik7CisJc3RydWN0IHBhcmlzY19kZXZpY2UgKmxiYSA9IHRvX3BhcmlzY19kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgaWJhc2VfZGF0YV9zdHJ1Y3QgKmliZCA9IGRhdGE7CisJaW50IHJvcGVfbnVtID0gKGxiYS0+aHBhLnN0YXJ0ID4+IDEzKSAmIDB4ZjsKKwlpZiAocm9wZV9udW0gPj4gMyA9PSBpYmQtPmlvY19udW0pCisJCWxiYV9zZXRfaXJlZ3MobGJhLCBpYmQtPmlvYy0+aWJhc2UsIGliZC0+aW9jLT5pbWFzayk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIHNldHVwIE1lcmN1cnkgb3IgRWxyb3kgSUJBU0UvSU1BU0sgcmVnaXN0ZXJzLiAqLwogc3RhdGljIHZvaWQgCiBzZXR1cF9pYmFzZV9pbWFzayhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqc2JhLCBzdHJ1Y3QgaW9jICppb2MsIGludCBpb2NfbnVtKQogewotCS8qIGxiYV9zZXRfaXJlZ3MoKSBpcyBpbiBkcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMgKi8KLSAgICAgICAgZXh0ZXJuIHZvaWQgbGJhX3NldF9pcmVncyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqLCB1MzIsIHUzMik7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBrbGlzdF9pdGVyIGk7CisJc3RydWN0IGliYXNlX2RhdGFfc3RydWN0IGliYXNlX2RhdGEgPSB7CisJCS5pb2MJCT0gaW9jLAorCQkuaW9jX251bQk9IGlvY19udW0sCisJfTsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmc2JhLT5kZXYua2xpc3RfY2hpbGRyZW4sICZpKTsKLQl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkpIHsKLQkJc3RydWN0IHBhcmlzY19kZXZpY2UgKmxiYSA9IHRvX3BhcmlzY19kZXZpY2UoZGV2KTsKLQkJaW50IHJvcGVfbnVtID0gKGxiYS0+aHBhLnN0YXJ0ID4+IDEzKSAmIDB4ZjsKLQkJaWYgKHJvcGVfbnVtID4+IDMgPT0gaW9jX251bSkKLQkJCWxiYV9zZXRfaXJlZ3MobGJhLCBpb2MtPmliYXNlLCBpb2MtPmltYXNrKTsKLQl9Ci0Ja2xpc3RfaXRlcl9leGl0KCZpKTsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnNiYS0+ZGV2LCAmaWJhc2VfZGF0YSwKKwkJCSAgICAgIHNldHVwX2liYXNlX2ltYXNrX2NhbGxiYWNrKTsKIH0KIAorI2lmZGVmIFNCQV9BR1BfU1VQUE9SVAorc3RhdGljIGludAorc2JhX2lvY19maW5kX3F1aWNrc2lsdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKmFncF9mb3VuZCA9IGRhdGE7CisJc3RydWN0IHBhcmlzY19kZXZpY2UgKmxiYSA9IHRvX3BhcmlzY19kZXZpY2UoZGV2KTsKKworCWlmIChJU19RVUlDS1NJTFZFUihsYmEpKQorCQkqYWdwX2ZvdW5kID0gMTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZAogc2JhX2lvY19pbml0X3BsdXRvKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpzYmEsIHN0cnVjdCBpb2MgKmlvYywgaW50IGlvY19udW0pCiB7CkBAIC0xMzMyLDkgKzEzNTAsNiBAQAogCVdSSVRFX1JFRyhpb2MtPmliYXNlIHwgMzEsIGlvYy0+aW9jX2hwYSArIElPQ19QQ09NKTsKIAogI2lmZGVmIFNCQV9BR1BfU1VQUE9SVAotewotCXN0cnVjdCBrbGlzdF9pdGVyIGk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKIAogCS8qCiAJKiogSWYgYW4gQUdQIGRldmljZSBpcyBwcmVzZW50LCBvbmx5IHVzZSBoYWxmIG9mIHRoZSBJT1Ygc3BhY2UKQEAgLTEzNDQsMTMgKzEzNTksNyBAQAogCSoqIFdlIHByb2dyYW0gdGhlIG5leHQgcGRpciBpbmRleCBhZnRlciB3ZSBzdG9wIHcvIGEga2V5IGZvcgogCSoqIHRoZSBHQVJUIGNvZGUgdG8gaGFuZHNoYWtlIG9uLgogCSovCi0Ja2xpc3RfaXRlcl9pbml0KCZzYmEtPmRldi5rbGlzdF9jaGlsZHJlbiwgJmkpOwotCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkgewotCQlzdHJ1Y3QgcGFyaXNjX2RldmljZSAqbGJhID0gdG9fcGFyaXNjX2RldmljZShkZXYpOwotCQlpZiAoSVNfUVVJQ0tTSUxWRVIobGJhKSkKLQkJCWFncF9mb3VuZCA9IDE7Ci0JfQotCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZzYmEtPmRldiwgJmFncF9mb3VuZCwgc2JhX2lvY19maW5kX3F1aWNrc2lsdmVyKTsKIAogCWlmIChhZ3BfZm91bmQgJiYgc2JhX3Jlc2VydmVfYWdwZ2FydCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXJ2aW5nICVkTWIgb2YgSU9WQSBzcGFjZSBmb3IgYWdwZ2FydFxuIiwKQEAgLTEzNTgsOSArMTM2Nyw3IEBACiAJCWlvYy0+cGRpcl9zaXplIC89IDI7CiAJCWlvYy0+cGRpcl9iYXNlW1BESVJfSU5ERVgoaW92YV9zcGFjZV9zaXplLzIpXSA9IFNCQV9BR1BHQVJUX0NPT0tJRTsKIAl9Ci19CiAjZW5kaWYgLypTQkFfQUdQX1NVUFBPUlQqLwotCiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggMjZjNTM2Yi4uNWYzMzM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtNDIsNiArNDIsNyBAQAogTElTVF9IRUFEKGRtYXJfZHJoZF91bml0cyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiBfX2luaXRkYXRhIGRtYXJfdGJsOworc3RhdGljIGFjcGlfc2l6ZSBkbWFyX3RibF9zaXplOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG1hcl9yZWdpc3Rlcl9kcmhkX3VuaXQoc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkKQogewpAQCAtMjg4LDggKzI4OSw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKIAkvKiBpZiB3ZSBjb3VsZCBmaW5kIERNQVIgdGFibGUsIHRoZW4gdGhlcmUgYXJlIERNQVIgZGV2aWNlcyAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX0RNQVIsIDAsCi0JCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmZG1hcl90YmwpOworCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShBQ1BJX1NJR19ETUFSLCAwLAorCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmRtYXJfdGJsLAorCQkJCSZkbWFyX3RibF9zaXplKTsKIAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAhZG1hcl90YmwpIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIERNQVJcbiIpOwpAQCAtNDg5LDYgKzQ5MSw3IEBACiAJCQlpb21tdV9kZXRlY3RlZCA9IDE7CiAjZW5kaWYKIAl9CisJZWFybHlfYWNwaV9vc191bm1hcF9tZW1vcnkoZG1hcl90YmwsIGRtYXJfdGJsX3NpemUpOwogCWRtYXJfdGJsID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCmluZGV4IGVhY2ZiMTMuLjlhYTRmZTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCkBAIC0xNDMsNyArMTQzLDcgQEAKIAogY29uZmlnIEhPVFBMVUdfUENJX1JQQQogCXRyaXN0YXRlICJSUEEgUENJIEhvdHBsdWcgZHJpdmVyIgotCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgJiYgUFBDNjQgJiYgIUhPVFBMVUdfUENJX0ZBS0UKKwlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIEVFSCAmJiAhSE9UUExVR19QQ0lfRkFLRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSUEEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgUENJIEhvdHBsdWcuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCmluZGV4IGExM2FiZjUuLjg0NTBmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYwpAQCAtMjI1LDcgKzIyNSw4IEBACiAKIHZvaWQgY3BxaHBfY3JlYXRlX2RlYnVnZnNfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7Ci0JY3RybC0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShjdHJsLT5wY2lfZGV2LT5kZXYuYnVzX2lkLCBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKKwljdHJsLT5kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRldl9uYW1lKCZjdHJsLT5wY2lfZGV2LT5kZXYpLAorCQkJCQkgICBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKIH0KIAogdm9pZCBjcHFocF9yZW1vdmVfZGVidWdmc19maWxlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDQ1ZWZmYzUuLjlkMDdhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlICJpbnRyX3JlbWFwcGluZy5oIgogCkBAIC0yMCw3ICsyMSw3IEBACiAJdTggIGlydGVfbWFzazsKIH07CiAKLSNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiBzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICpnZXRfb25lX2ZyZWVfaXJxXzJfaW9tbXUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlvbW11OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKaW5kZXggZDBjOTczNi4uMzgyNTc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCkBAIC0xMzMsNiArMTMzLDkgQEAKIAkJCQkJCSAgIGJvb2wgZW5hYmxlKQogewogCXNldF9kZXZpY2VfZXJyb3JfcmVwb3J0aW5nKGRldiwgJmVuYWJsZSk7CisKKwlpZiAoIWRldi0+c3Vib3JkaW5hdGUpCisJCXJldHVybjsKIAlwY2lfd2Fsa19idXMoZGV2LT5zdWJvcmRpbmF0ZSwgc2V0X2RldmljZV9lcnJvcl9yZXBvcnRpbmcsICZlbmFibGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggMjQ4YjRkYi4uNWVhNTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiBzdGF0aWMgdm9pZCBwY2llX3BvcnRkcnZfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJa2ZyZWUocGNpX2dldF9kcnZkYXRhKGRldikpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGYyMGQ1NTMuLjkyYjllZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KICNpbmNsdWRlICJwY2kuaCIKIAogaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwpAQCAtMTc0OSw2ICsxNzUwLDMwIEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELCBxdWlya19lMTAwX2ludGVycnVwdCk7CiAKKy8qCisgKiBUaGUgODI1NzUgYW5kIDgyNTk4IG1heSBleHBlcmllbmNlIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiB0cmFuc2l0aW9uaW5nCisgKiBvdXQgb2YgTDBTLiAgVG8gcHJldmVudCB0aGlzIHdlIG5lZWQgdG8gZGlzYWJsZSBMMFMgb24gdGhlIHBjaS1lIGxpbmsKKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJEaXNhYmxpbmcgTDBzXG4iKTsKKwlwY2lfZGlzYWJsZV9saW5rX3N0YXRlKGRldiwgUENJRV9MSU5LX1NUQVRFX0wwUyk7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwYTcsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGE5LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBiNiwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwYzYsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGM3LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBjOCwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZDYsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGRiLCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBkZCwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZTEsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGVjLCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBmMSwgcXVpcmtfZGlzYWJsZV9hc3BtX2wwcyk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZjQsIHF1aXJrX2Rpc2FibGVfYXNwbV9sMHMpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxNTA4LCBxdWlya19kaXNhYmxlX2FzcG1fbDBzKTsKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGZpeHVwX3JldjFfNTNjODEwKHN0cnVjdCBwY2lfZGV2KiBkZXYpCiB7CiAJLyogcmV2IDEgbmNyNTNjODEwIGNoaXBzIGRvbid0IHNldCB0aGUgY2xhc3MgYXQgYWxsIHdoaWNoIG1lYW5zCkBAIC0yMDk3LDcgKzIxMjIsNyBAQAogCiAJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHBvcyArIEhUX01TSV9GTEFHUywKIAkJCQkJICZmbGFncykgPT0gMCkgewotCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiRW5hYmxpbmcgSFQgTVNJIE1hcHBpbmdcbiIpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGlzYWJsaW5nIEhUIE1TSSBNYXBwaW5nXG4iKTsKIAogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAogCQkJCQkgICAgICBmbGFncyAmIH5IVF9NU0lfRkxBR1NfRU5BQkxFKTsKQEAgLTIxNDEsNiArMjE2NiwxMCBAQAogCWludCBwb3M7CiAJaW50IGZvdW5kOwogCisJLyogRW5hYmxpbmcgSFQgTVNJIG1hcHBpbmcgb24gdGhpcyBkZXZpY2UgYnJlYWtzIE1DUDUxICovCisJaWYgKGRldi0+ZGV2aWNlID09IDB4MjcwKQorCQlyZXR1cm47CisKIAkvKiBjaGVjayBpZiB0aGVyZSBpcyBIVCBNU0kgY2FwIG9yIGVuYWJsZWQgb24gdGhpcyBkZXZpY2UgKi8KIAlmb3VuZCA9IGh0X2NoZWNrX21zaV9tYXBwaW5nKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IGZjMWRlNDYuLjkwMDEzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtNDY4LDEzICs0NjgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKQEAgLTQ5OCwxMyArNDk4LDEzIEBACiAgKiBQQ01DSUEgIkRyaXZlciIgQVBJCiAgKi8KIAotc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnBjbWNpYV9zb2NrZXRzX2xvY2spOwogCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShhdTF4MDBfcGNtY2lhX2h3X2luaXQpOyBpKyspIHsKLQkJcmV0ID0gYXUxeDAwX3BjbWNpYV9od19pbml0W2ldKGRldik7CisJCXJldCA9IGF1MXgwMF9wY21jaWFfaHdfaW5pdFtpXSgmZGV2LT5kZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKIAl9CkBAIC01MTIsMTQgKzUxMiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTF4MDBfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MXgwMF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlLAotCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCisJLnN1c3BlbmQgCT0gYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIApAQCAtNTMzLDggKzU0NSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhdTF4MDBfcGNtY2lhX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWlmICgoZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKSkpCi0JCXJldHVybiBlcnJvcjsKKwllcnJvciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTQ0LDcgKzU1NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4MDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MXgwMF9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDcxNjUzYWIuLjQwZDQ5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMjM4LDYgKzEyMzgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIHN0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgcGNpY19vcGVyYXRpb25zID0gewogCS5pbml0CQkJPSBwY2ljX2luaXQsCiAJLmdldF9zdGF0dXMJCT0gcGNpY19nZXRfc3RhdHVzLApAQCAtMTI0OCwxMSArMTI1OCwxMyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGk4MjM2NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiaTgyMzY1IiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTgyMzY1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpODIzNjUiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gaTgyMzY1X2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmk4MjM2NV9kZXZpY2U7CkBAIC0xMjYxLDcgKzEyNzMsNyBAQAogewogICAgIGludCBpLCByZXQ7CiAKLSAgICByZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiAgICAgaWYgKHJldCkKIAlnb3RvIGVycl9vdXQ7CiAKQEAgLTEzMzcsNyArMTM0OSw3IEBACiAJcG5wX2Rpc2FibGVfZGV2KGk4MjM2NV9wbnBkZXYpOwogI2VuZGlmCiBlcnJfZHJpdmVyX3VucmVnaXN0ZXI6Ci0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIGVycl9vdXQ6CiAgICAgcmV0dXJuIHJldDsKIH0gLyogaW5pdF9pODIzNjUgKi8KQEAgLTEzNjUsNyArMTM3Nyw3IEBACiAgICAgaWYgKGk4MjM2NV9wbnBkZXYpCiAgICAgCQlwbnBfZGlzYWJsZV9kZXYoaTgyMzY1X3BucGRldik7CiAjZW5kaWYKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogfSAvKiBleGl0X2k4MjM2NSAqLwogCiBtb2R1bGVfaW5pdChpbml0X2k4MjM2NSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAyYWI0ZjIyLi42MmI0ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTY5NiwxMyArNjk2LDI1IEBACiAJLnNldF9tZW1fbWFwCQk9IHBjY19zZXRfbWVtX21hcCwKIH07CiAKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBjY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY2ZjIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiY2ZjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gY2ZjX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGNmY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjY19kZXZpY2UgPSB7CkBAIC03MTYsMTMgKzcyOCwxMyBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNjX2RldmljZSk7CiAJaWYgKHJldCl7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzU0LDcgKzc2Niw3IEBACiAJaWYgKHBjY19zb2NrZXRzID09IDApIHsKIAkJcHJpbnRrKCJzb2NrZXQgaXMgbm90IGZvdW5kLlxuIik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODAyLDcgKzgxNCw3IEBACiAJaWYgKHBvbGxfaW50ZXJ2YWwgIT0gMCkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfdGltZXIpOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIH0gLyogZXhpdF9tMzJyX3BjYyAqLwogCiBtb2R1bGVfaW5pdChpbml0X20zMnJfcGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDJmMTA4YzIuLjEyMDM0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtNjcyLDEzICs2NzIsMjUgQEAKIAkuc2V0X21lbV9tYXAJCT0gcGNjX3NldF9tZW1fbWFwLAogfTsKIAorc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwY2MiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJwY2MiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gcGNjX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNjX2RldmljZSA9IHsKQEAgLTY5MiwxMyArNzA0LDEzIEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKIAlpZiAocmV0KXsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03MTUsNyArNzI3LDcgQEAKIAlpZiAocGNjX3NvY2tldHMgPT0gMCkgewogCQlwcmludGsoInNvY2tldCBpcyBub3QgZm91bmQuXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBjY19kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NjMsNyArNzc1LDcgQEAKIAlpZiAocG9sbF9pbnRlcnZhbCAhPSAwKQogCQlkZWxfdGltZXJfc3luYygmcG9sbF90aW1lcik7CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogfSAvKiBleGl0X20zMnJfcGNjICovCiAKIG1vZHVsZV9pbml0KGluaXRfbTMycl9wY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggYzBlMmFmYy4uZTU5MmUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBtYWtlX3Jlc291cmNlKDAsIG51bSwgSU9SRVNPVVJDRV9JTywKLQkJCQkJICAgICBzLT5kZXYuYnVzX2lkKTsKKwkJCQkJICAgICBkZXZfbmFtZSgmcy0+ZGV2KSk7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4gPSBiYXNlOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBjNWIyYTQ0Li5kOGRhNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIApAQCAtNzMsNyArNzMsNyBAQAogCSAqIEluaXRpYWxpc2UgYW55ICJvbi1ib2FyZCIgUENNQ0lBIHNvY2tldHMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2ExMXgwX3BjbWNpYV9od19pbml0KTsgaSsrKSB7Ci0JCXJldCA9IHNhMTF4MF9wY21jaWFfaHdfaW5pdFtpXShkZXYpOworCQlyZXQgPSBzYTExeDBfcGNtY2lhX2h3X2luaXRbaV0oJmRldi0+ZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtODEsMTMgKzgxLDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJzYTExeDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlLAotCS5yZW1vdmUJCT0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSwKLQkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lIAk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3JlbW92ZSwKKwkuc3VzcGVuZCAJPSBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogLyogc2ExMXgwX3BjbWNpYV9pbml0KCkKQEAgLTEwMCw3ICsxMTgsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzYTExeDBfcGNtY2lhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOwogfQogCiAvKiBzYTExeDBfcGNtY2lhX2V4aXQoKQpAQCAtMTEwLDcgKzEyOCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkpvaG4gRG9yc2V5IDxqb2huK0Bjcy5jbXUuZWR1PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDJhNjEzZTkuLjlhZDk3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTM2MywxMyArMzYzLDI1IEBACiAgICAgcmV0dXJuIGlkOwogfQogCitzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRjaWNfZHJpdmVyID0gewotCS5uYW1lID0gInRjaWMtcGNtY2lhIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGNpY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGNpYy1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0Y2ljX2RldmljZSA9IHsKQEAgLTM4Myw3ICszOTUsNyBAQAogICAgIGludCBpLCBzb2NrLCByZXQgPSAwOwogICAgIHVfaW50IG1hc2ssIHNjYW47CiAKLSAgICBpZiAoZHJpdmVyX3JlZ2lzdGVyKCZ0Y2ljX2RyaXZlcikpCisgICAgaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGNpY19kcml2ZXIpKQogCXJldHVybiAtMTsKICAgICAKICAgICBwcmludGsoS0VSTl9JTkZPICJEYXRhYm9vayBUQ0lDLTIgUENNQ0lBIHByb2JlOiAiKTsKQEAgLTM5MSw3ICs0MDMsNyBAQAogCiAgICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbih0Y2ljX2Jhc2UsIDE2LCAidGNpYy0yIikpIHsKIAlwcmludGsoImNvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0cyxcbiAiKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNDE0LDcgKzQyNiw3IEBACiAgICAgaWYgKHNvY2sgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcmVsZWFzZV9yZWdpb24odGNpY19iYXNlLCAxNik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KIApAQCAtNTQyLDcgKzU1NCw3IEBACiAgICAgfQogCiAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRjaWNfZGV2aWNlKTsKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiB9IC8qIGV4aXRfdGNpYyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggYjJjNDEyNC4uNjU5NDIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNCwyNCArNzA0LDM3IEBACiAKIF9fc2V0dXAoInZyYzQxNzFfY2FyZD0iLCB2cmM0MTcxX2NhcmRfc2V0dXApOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdnJjNDE3MV9jYXJkX2RyaXZlciA9IHsKLQkubmFtZQkJPSB2cmM0MTcxX2NhcmRfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZyYzQxNzFfY2FyZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gdnJjNDE3MV9jYXJkX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kCT0gdnJjNDE3MV9jYXJkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2cmM0MTcxX2NhcmRfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdnJjNDE3MV9jYXJkX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTczNSwxMSArNzQ4LDEyIEBACiAJaWYgKHJldHZhbCA8IDApIHsKIAkJdnJjNDE3MV9yZW1vdmVfc29ja2V0cygpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzLCBjb25uZWN0ZWQgdG8gSVJRICVkXG4iLCB2cmM0MTcxX2NhcmRfZHJpdmVyLm5hbWUsIHZyYzQxNzFfaXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcywgY29ubmVjdGVkIHRvIElSUSAlZFxuIiwKKwkJdnJjNDE3MV9jYXJkX2RyaXZlci5kcml2ZXIubmFtZSwgdnJjNDE3MV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDksNyArNzYzLDcgQEAKIAlmcmVlX2lycSh2cmM0MTcxX2lycSwgdnJjNDE3MV9zb2NrZXRzKTsKIAl2cmM0MTcxX3JlbW92ZV9zb2NrZXRzKCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZyYzQxNzFfY2FyZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IGIzODY2YWQuLjM2MDgwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtMTUsOCArMTUsNyBAQAogaWYgWDg2X1BMQVRGT1JNX0RFVklDRVMKIAogY29uZmlnIEFDRVJfV01JCi0JdHJpc3RhdGUgIkFjZXIgV01JIExhcHRvcCBFeHRyYXMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiQWNlciBXTUkgTGFwdG9wIEV4dHJhcyIKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MKIAlkZXBlbmRzIG9uIE5FV19MRURTCkBAIC0zOSw5ICszOCw5IEBACiAJdHJpc3RhdGUgIkFzdXMgTGFwdG9wIEV4dHJhcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAhQUNQSV9BU1VTCi0JZGVwZW5kcyBvbiBMRURTX0NMQVNTCi0JZGVwZW5kcyBvbiBORVdfTEVEUwotCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCXNlbGVjdCBMRURTX0NMQVNTCisJc2VsZWN0IE5FV19MRURTCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZXBlbmRzIG9uIElOUFVUCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgbmV3IExpbnV4IGRyaXZlciBmb3IgQXN1cyBsYXB0b3BzLiBJdCBtYXkgYWxzbyBzdXBwb3J0IHNvbWUKQEAgLTE4NSwxMSArMTg0LDExIEBACiBjb25maWcgVEhJTktQQURfQUNQSQogCXRyaXN0YXRlICJUaGlua1BhZCBBQ1BJIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBBQ1BJCisJZGVwZW5kcyBvbiBJTlBVVAogCXNlbGVjdCBCQUNLTElHSFRfTENEX1NVUFBPUlQKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCXNlbGVjdCBIV01PTgogCXNlbGVjdCBOVlJBTQotCXNlbGVjdCBJTlBVVAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiAJc2VsZWN0IE5FVApAQCAtMzE1LDkgKzMxNCw4IEBACiAKIAogY29uZmlnIEFDUElfV01JCi0JdHJpc3RhdGUgIldNSSAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiV01JIgogCWRlcGVuZHMgb24gQUNQSQotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUNQSS1XTUkgKFdpbmRvd3MgTWFuYWdlbWVudAogCSAgSW5zdHJ1bWVudGF0aW9uKSBtYXBwZXIgZGV2aWNlIChQTlAwQzE0KSBmb3VuZCBvbiBzb21lIHN5c3RlbXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwppbmRleCA5NGM5ZjkxMS4uYTZhNDJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogCWtmcmVlKHdpcmVsZXNzX3Jma2lsbC0+ZGF0YSk7CiAJcmZraWxsX3VucmVnaXN0ZXIod2lyZWxlc3NfcmZraWxsKTsKIAlpZiAoaGFzX2NhcChBQ0VSX0NBUF9CTFVFVE9PVEgpKSB7Ci0JCWtmcmVlKHdpcmVsZXNzX3Jma2lsbC0+ZGF0YSk7CisJCWtmcmVlKGJsdWV0b290aF9yZmtpbGwtPmRhdGEpOwogCQlyZmtpbGxfdW5yZWdpc3RlcihibHVldG9vdGhfcmZraWxsKTsKIAl9CiAJcmV0dXJuOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAogCXNldF9xdWlya3MoKTsKIAotCWlmICghYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpICYmIGhhc19jYXAoQUNFUl9DQVBfQlJJR0hUTkVTUykpIHsKKwlpZiAoYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpICYmIGhhc19jYXAoQUNFUl9DQVBfQlJJR0hUTkVTUykpIHsKIAkJaW50ZXJmYWNlLT5jYXBhYmlsaXR5ICY9IH5BQ0VSX0NBUF9CUklHSFRORVNTOwogCQlwcmludGsoQUNFUl9JTkZPICJCcmlnaHRuZXNzIG11c3QgYmUgY29udHJvbGxlZCBieSAiCiAJCSAgICAgICAiZ2VuZXJpYyB2aWRlbyBkcml2ZXJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggNTZhZjZjZi4uZWVhZmM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC04MTUsNiArODE1LDcgQEAKIHN0YXRpYyB2b2lkIGFzdXNfaG90a19ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKKwl1MTYgY291bnQ7CiAKIAkvKiBUT0RPIEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBldmVudHMgY291bnQuICovCiAJaWYgKCFob3RrKQpAQCAtODMyLDkgKzgzMywxMSBAQAogCQlsY2RfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOKTsKIAl9CiAKKwljb3VudCA9IGhvdGstPmV2ZW50X2NvdW50W2V2ZW50ICUgMTI4XSsrOworCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoaG90ay0+ZGV2aWNlLCBldmVudCwgY291bnQpOwogCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoaG90ay0+ZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAogCQkJCQlkZXZfbmFtZSgmaG90ay0+ZGV2aWNlLT5kZXYpLCBldmVudCwKLQkJCQkJaG90ay0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKyspOworCQkJCQljb3VudCk7CiAKIAlpZiAoaG90ay0+aW5wdXRkZXYpIHsKIAkJa2V5ID0gYXN1c19nZXRfZW50cnlfYnlfc2NhbmNvZGUoZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCA3ODZlZDg2Li42ZjU0ZmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtNTU3LDEzICs1NTcsMTcgQEAKIHN0YXRpYyB2b2lkIGVlZXBjX2hvdGtfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisJdTE2IGNvdW50OworCiAJaWYgKCFlaG90aykKIAkJcmV0dXJuOwogCWlmIChldmVudCA+PSBOT1RJRllfQlJOX01JTiAmJiBldmVudCA8PSBOT1RJRllfQlJOX01BWCkKIAkJbm90aWZ5X2JybigpOworCWNvdW50ID0gZWhvdGstPmV2ZW50X2NvdW50W2V2ZW50ICUgMTI4XSsrOworCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZWhvdGstPmRldmljZSwgZXZlbnQsIGNvdW50KTsKIAlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGVob3RrLT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCiAJCQkJCWRldl9uYW1lKCZlaG90ay0+ZGV2aWNlLT5kZXYpLCBldmVudCwKLQkJCQkJZWhvdGstPmV2ZW50X2NvdW50W2V2ZW50ICUgMTI4XSsrKTsKKwkJCQkJY291bnQpOwogCWlmIChlaG90ay0+aW5wdXRkZXYpIHsKIAkJa2V5ID0gZWVwY19nZXRfZW50cnlfYnlfc2NhbmNvZGUoZXZlbnQpOwogCQlpZiAoa2V5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCA1Mzc5NTlkLi5iYzg5OTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTE5MTcsMTIgKzE5MTcsNyBAQAogCiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2NvbXBhdC5maWZvX2FzeW5jKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMpOwogfQogCiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggYmNiYzA1MS4uZDI0MzMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNzUzMiw3ICs3NTMyLDcgQEAKICAqIGlmIGl0IGlzIG5vdCB0aGVyZSB5ZXQuCiAgKi8KICNkZWZpbmUgSUJNX0JJT1NfTU9EVUxFX0FMSUFTKF9fdHlwZSkgXAotCU1PRFVMRV9BTElBUygiZG1pOmJ2bklCTTpidnIiIF9fdHlwZSAiRVQ/P1dXIikKKwlNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06YnZyIiBfX3R5cGUgIkVUPz9XVyoiKQogCiAvKiBOb24tYW5jaWVudCB0aGlua3BhZHMgKi8KIE1PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnN2bklCTToqOnB2clRoaW5rUGFkKjpydm5JQk06KiIpOwpAQCAtNzU0MSw5ICs3NTQxLDkgQEAKIC8qIEFuY2llbnQgdGhpbmtwYWQgQklPU2VzIGhhdmUgdG8gYmUgaWRlbnRpZmllZCBieQogICogQklPUyB0eXBlIG9yIG1vZGVsIG51bWJlciwgYW5kIHRoZXJlIGFyZSBmYXIgbGVzcwogICogQklPUyB0eXBlcyB0aGFuIG1vZGVsIG51bWJlcnMuLi4gKi8KLUlCTV9CSU9TX01PRFVMRV9BTElBUygiSVtCLEQsSCxJLE0sTixPLFQsVyxWLFksWl0iKTsKLUlCTV9CSU9TX01PRFVMRV9BTElBUygiMVswLDMsNiw4LEEtRyxJLEssTS1QLFMsVF0iKTsKLUlCTV9CSU9TX01PRFVMRV9BTElBUygiS1tVLFgtWl0iKTsKK0lCTV9CSU9TX01PRFVMRV9BTElBUygiSVtCREhJTU5PVFdWWVpdIik7CitJQk1fQklPU19NT0RVTEVfQUxJQVMoIjFbMDM2OEEtR0lLTS1QU1RdIik7CitJQk1fQklPU19NT0RVTEVfQUxJQVMoIktbVVgtWl0iKTsKIAogTU9EVUxFX0FVVEhPUigiQm9yaXNsYXYgRGVpYW5vdiwgSGVucmlxdWUgZGUgTW9yYWVzIEhvbHNjaHVoIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oVFBBQ1BJX0RFU0MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwppbmRleCA4YThiMzc3Li4yZjI2OWUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3dtaV9pbml0KHZvaWQpCiB7Ci0JYWNwaV9zdGF0dXMgcmVzdWx0OworCWludCByZXN1bHQ7CiAKIAlJTklUX0xJU1RfSEVBRCgmd21pX2Jsb2Nrcy5saXN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jCmluZGV4IDFkNzY4OTIuLmE1MmQ0YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2RzMjc2MF9iYXR0ZXJ5LmMKQEAgLTE4MCwxMCArMTgwLDEzIEBACiAJZGktPmVtcHR5X3VBaCA9IGJhdHRlcnlfaW50ZXJwb2xhdGUoc2NhbGUsIGRpLT50ZW1wX0MgLyAxMCk7CiAJZGktPmVtcHR5X3VBaCAqPSAxMDAwOyAvKiBjb252ZXJ0IHRvIMK1QWggKi8KIAotCS8qIEZyb20gTWF4aW0gQXBwbGljYXRpb24gTm90ZSAxMzE6IHJlbWFpbmluZyBjYXBhY2l0eSA9Ci0JICogKChJQ0EgLSBFbXB0eSBWYWx1ZSkgLyAoRnVsbCBWYWx1ZSAtIEVtcHR5IFZhbHVlKSkgeCAxMDAlICovCi0JZGktPnJlbV9jYXBhY2l0eSA9ICgoZGktPmFjY3VtX2N1cnJlbnRfdUFoIC0gZGktPmVtcHR5X3VBaCkgKiAxMDBMKSAvCi0JCQkgICAgKGRpLT5mdWxsX2FjdGl2ZV91QWggLSBkaS0+ZW1wdHlfdUFoKTsKKwlpZiAoZGktPmZ1bGxfYWN0aXZlX3VBaCA9PSBkaS0+ZW1wdHlfdUFoKQorCQlkaS0+cmVtX2NhcGFjaXR5ID0gMDsKKwllbHNlCisJCS8qIEZyb20gTWF4aW0gQXBwbGljYXRpb24gTm90ZSAxMzE6IHJlbWFpbmluZyBjYXBhY2l0eSA9CisJCSAqICgoSUNBIC0gRW1wdHkgVmFsdWUpIC8gKEZ1bGwgVmFsdWUgLSBFbXB0eSBWYWx1ZSkpIHggMTAwJSAqLworCQlkaS0+cmVtX2NhcGFjaXR5ID0gKChkaS0+YWNjdW1fY3VycmVudF91QWggLSBkaS0+ZW1wdHlfdUFoKSAqIDEwMEwpIC8KKwkJCQkgICAgKGRpLT5mdWxsX2FjdGl2ZV91QWggLSBkaS0+ZW1wdHlfdUFoKTsKIAogCWlmIChkaS0+cmVtX2NhcGFjaXR5IDwgMCkKIAkJZGktPnJlbV9jYXBhY2l0eSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYwppbmRleCBhZGRiODdjLi4zMjIyZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZSByaW9fYnVzID0gewotCS5idXNfaWQgPSAicmFwaWRpbyIsCisJLmluaXRfbmFtZSA9ICJyYXBpZGlvIiwKIH07CiAKIHN0cnVjdCBidXNfdHlwZSByaW9fYnVzX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCmluZGV4IGQ1ZTRlNjMuLjg2YzYxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkvKiByZWdpc3RlciBpcnEgaGFuZGxlciBhZnRlciB3ZSBrbm93IHdoYXQgbmFtZSB3ZSdsbCB1c2UgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShBVDkxX0lEX1NZUywgYXQ5MV9ydGNfaW50ZXJydXB0LAogCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJCQlydGMtPnJ0Y2Rldi0+ZGV2LmJ1c19pZCwgcnRjKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5ydGNkZXYtPmRldiksIHJ0Yyk7CiAJaWYgKHJldCkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBzaGFyZSBJUlEgJWQ/XG4iLCBBVDkxX0lEX1NZUyk7CiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMtPnJ0Y2Rldik7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAogCWlmIChncGJyX3JlYWRsKHJ0YykgPT0gMCkKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiVzOiBTRVQgVElNRSFcbiIsCi0JCQkJcnRjLT5ydGNkZXYtPmRldi5idXNfaWQpOworCQkJCWRldl9uYW1lKCZydGMtPnJ0Y2Rldi0+ZGV2KSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggMmNiZWIwNy4uYmQxY2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC0zNzcsMTMgKzM3NywxMyBAQAogCiAJLyogaGFuZGxlIHBlcmlvZGljIGFuZCBhbGFybSBpcnFzICovCiAJaWYgKHJlcXVlc3RfaXJxKG9tYXBfcnRjX3RpbWVyLCBydGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpKSB7CisJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIHRpbWVyIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y190aW1lcik7CiAJCWdvdG8gZmFpbDA7CiAJfQogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y19hbGFybSwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKSkgeworCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyBhbGFybSBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAogCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfYWxhcm0pOwogCQlnb3RvIGZhaWwxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAxYzNmYzZiLi40ODk4ZjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9ydGMuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2gtcnRjIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yLjAiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMSIKIAogI2RlZmluZSBSVENfUkVHKHIpCSgocikgKiBydGNfcmVnX3NpemUpCiAKQEAgLTk5LDU2ICs5OSw1MSBAQAogCXVuc2lnbmVkIHNob3J0IHBlcmlvZGljX2ZyZXE7CiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IF9fc2hfcnRjX2ludGVycnVwdChzdHJ1Y3Qgc2hfcnRjICpydGMpCiB7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IxX0NGOwogCXRtcCAmPSB+UkNSMV9DRjsKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKIAogCS8qIFVzZXJzIGhhdmUgcmVxdWVzdGVkIE9uZSB4IFNlY29uZCBJUlEgKi8KLQlpZiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKQorCWlmIChwZW5kaW5nICYmIHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykKIAkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfVUYgfCBSVENfSVJRRik7CiAKLQlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gcGVuZGluZzsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19hbGFybShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IF9fc2hfcnRjX2FsYXJtKHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisJcGVuZGluZyA9IHRtcCAmIFJDUjFfQUY7CiAJdG1wICY9IH4oUkNSMV9BRiB8IFJDUjFfQUlFKTsKLQkJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKLQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKKwlpZiAocGVuZGluZykKKwkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CiAKLQlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gcGVuZGluZzsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IF9fc2hfcnRjX3BlcmlvZGljKHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Y19kZXYgPSBydGMtPnJ0Y19kZXY7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlzdHJ1Y3QgcnRjX3Rhc2sgKmlycV90YXNrOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMl9QRUY7CiAJdG1wICY9IH5SQ1IyX1BFRjsKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKIAorCWlmICghcGVuZGluZykKKwkJcmV0dXJuIDA7CisKIAkvKiBIYWxmIHBlcmlvZCBlbmFibGVkIHRoYW4gb25lIHNraXBwZWQgYW5kIHRoZSBuZXh0IG5vdGlmaWVkICovCiAJaWYgKChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9IUCkgJiYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0NPVU5UKSkKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9DT1VOVDsKQEAgLTE1NywxNiArMTUyLDY1IEBACiAJCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gUEZfQ09VTlQ7CiAJCWlmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9LT1UpIHsKIAkJCXNwaW5fbG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7Ci0JCQlpZiAocnRjX2Rldi0+aXJxX3Rhc2spCi0JCQkJcnRjX2Rldi0+aXJxX3Rhc2stPmZ1bmMocnRjX2Rldi0+aXJxX3Rhc2stPnByaXZhdGVfZGF0YSk7CisJCQlpcnFfdGFzayA9IHJ0Y19kZXYtPmlycV90YXNrOworCQkJaWYgKGlycV90YXNrKQorCQkJCWlycV90YXNrLT5mdW5jKGlycV90YXNrLT5wcml2YXRlX2RhdGEpOwogCQkJc3Bpbl91bmxvY2soJnJ0Y19kZXYtPmlycV90YXNrX2xvY2spOwogCQl9IGVsc2UKIAkJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX1BGIHwgUlRDX0lSUUYpOwogCX0KIAorCXJldHVybiBwZW5kaW5nOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfaW50ZXJydXB0KHJ0Yyk7CiAJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19hbGFybShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfYWxhcm0ocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfcGVyaW9kaWMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX3BlcmlvZGljKHJ0Yyk7CisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3NoYXJlZChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfaW50ZXJydXB0KHJ0Yyk7CisJcmV0IHw9IF9fc2hfcnRjX2FsYXJtKHJ0Yyk7CisJcmV0IHw9IF9fc2hfcnRjX3BlcmlvZGljKHJ0Yyk7CisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfcnRjX3NldHBpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCkBAIC0yNzUsNiArMzE5LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9ydGNfc2V0Y2llKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKKworCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJaWYgKCFlbmFibGUpCisJCXRtcCAmPSB+UkNSMV9DSUU7CisJZWxzZQorCQl0bXAgfD0gUkNSMV9DSUU7CisKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKK30KKwogc3RhdGljIGludCBzaF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTI5MSw5ICszNTQsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9PWFM7CisJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09OOgogCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gUEZfT1hTOworCQlzaF9ydGNfc2V0Y2llKGRldiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgUlRDX0lSUVBfUkVBRDoKIAkJcmV0ID0gcHV0X3VzZXIocnRjLT5ydGNfZGV2LT5pcnFfZnJlcSwKQEAgLTM1NiwxOCArNDIxLDE3IEBACiAJCXRtLT50bV9zZWMtLTsKICNlbmRpZgogCisJLyogb25seSBrZWVwIHRoZSBjYXJyeSBpbnRlcnJ1cHQgZW5hYmxlZCBpZiBVSUUgaXMgb24gKi8KKwlpZiAoIShydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpKQorCQlzaF9ydGNfc2V0Y2llKGRldiwgMCk7CisKIAlkZXZfZGJnKGRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAogCQlfX2Z1bmNfXywKIAkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uICsgMSwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAotCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewotCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGF0ZVxuIik7Ci0JCXJ0Y190aW1lX3RvX3RtKDAsIHRtKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKIH0KIAogc3RhdGljIGludCBzaF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtNTcyLDcgKzYzNiw3IEBACiB7CiAJc3RydWN0IHNoX3J0YyAqcnRjOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXVuc2lnbmVkIGludCB0bXA7CisJc3RydWN0IHJ0Y190aW1lIHI7CiAJaW50IHJldDsKIAogCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9ydGMpLCBHRlBfS0VSTkVMKTsKQEAgLTU4NSwyNiArNjQ5LDEyIEBACiAJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7CiAJCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgcGVyaW9kXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIHJlc291cmNlXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KIAlydGMtPnBlcmlvZGljX2lycSA9IHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JaWYgKHVubGlrZWx5KHJldCA8PSAwKSkgewotCQlyZXQgPSAtRU5PRU5UOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGNhcnJ5XG4iKTsKLQkJZ290byBlcnJfYmFkcmVzOwotCX0KLQlydGMtPmNhcnJ5X2lycSA9IHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7Ci0JaWYgKHVubGlrZWx5KHJldCA8PSAwKSkgewotCQlyZXQgPSAtRU5PRU5UOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGFsYXJtXG4iKTsKLQkJZ290byBlcnJfYmFkcmVzOwotCX0KLQlydGMtPmFsYXJtX2lycSA9IHJldDsKKwlydGMtPmNhcnJ5X2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJcnRjLT5hbGFybV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwogCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpIHsKQEAgLTY0Niw0NyArNjk2LDY2IEBACiAJfQogCiAJcnRjLT5ydGNfZGV2LT5tYXhfdXNlcl9mcmVxID0gMjU2OwotCXJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEgPSAxOwotCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDB4NjA7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCi0JLyogcmVnaXN0ZXIgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLwotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfcGVyaW9kaWMsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgcGVyaW9kIiwgcnRjKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkicmVxdWVzdCBwZXJpb2QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKLQkJCXJ0Yy0+cGVyaW9kaWNfaXJxKTsKLQkJZ290byBlcnJfdW5tYXA7CisJaWYgKHJ0Yy0+Y2FycnlfaXJxIDw9IDApIHsKKwkJLyogcmVnaXN0ZXIgc2hhcmVkIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycSAqLworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3NoYXJlZCwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMiLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCisJCQkJcnRjLT5wZXJpb2RpY19pcnEpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKwl9IGVsc2UgeworCQkvKiByZWdpc3RlciBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfcGVyaW9kaWMsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIHBlcmlvZCIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgcGVyaW9kIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5wZXJpb2RpY19pcnEpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmNhcnJ5X2lycSwgc2hfcnRjX2ludGVycnVwdCwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgY2FycnkiLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IGNhcnJ5IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5jYXJyeV9pcnEpOworCQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIGFsYXJtIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBhbGFybSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKKwkJCQlyZXQsIHJ0Yy0+YWxhcm1faXJxKTsKKwkJCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOworCQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBzaF9ydGNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJICAic2gtcnRjIGNhcnJ5IiwgcnRjKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkicmVxdWVzdCBjYXJyeSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5jYXJyeV9pcnEpOwotCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQkJZ290byBlcnJfdW5tYXA7CisJLyogZXZlcnl0aGluZyBkaXNhYmxlZCBieSBkZWZhdWx0ICovCisJcnRjLT5wZXJpb2RpY19mcmVxID0gMDsKKwlydGMtPnJ0Y19kZXYtPmlycV9mcmVxID0gMDsKKwlzaF9ydGNfc2V0cGllKCZwZGV2LT5kZXYsIDApOworCXNoX3J0Y19zZXRhaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGNpZSgmcGRldi0+ZGV2LCAwKTsKKworCS8qIHJlc2V0IHJ0YyB0byBlcG9jaCAwIGlmIHRpbWUgaXMgaW52YWxpZCAqLworCWlmIChydGNfcmVhZF90aW1lKHJ0Yy0+cnRjX2RldiwgJnIpIDwgMCkgeworCQlydGNfdGltZV90b190bSgwLCAmcik7CisJCXJ0Y19zZXRfdGltZShydGMtPnJ0Y19kZXYsICZyKTsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmFsYXJtX2lycSwgc2hfcnRjX2FsYXJtLCBJUlFGX0RJU0FCTEVELAotCQkJICAic2gtcnRjIGFsYXJtIiwgcnRjKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkicmVxdWVzdCBhbGFybSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5hbGFybV9pcnEpOwotCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKLQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KLQotCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwotCXRtcCAmPSB+UkNSMV9DRjsKLQl0bXAgfD0gUkNSMV9DSUU7Ci0Jd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7Ci0KKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAJcmV0dXJuIDA7CiAKIGVycl91bm1hcDoKQEAgLTcwOCwxMCArNzc3LDEzIEBACiAKIAlzaF9ydGNfc2V0cGllKCZwZGV2LT5kZXYsIDApOwogCXNoX3J0Y19zZXRhaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGNpZSgmcGRldi0+ZGV2LCAwKTsKIAotCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOwogCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCWZyZWVfaXJxKHJ0Yy0+YWxhcm1faXJxLCBydGMpOworCWlmIChydGMtPmNhcnJ5X2lycSA+IDApIHsKKwkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CisJCWZyZWVfaXJxKHJ0Yy0+YWxhcm1faXJxLCBydGMpOworCX0KIAogCXJlbGVhc2VfcmVzb3VyY2UocnRjLT5yZXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jIGIvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYwppbmRleCBhZDM1Zjc2Li5hNjM0MWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB0d2w0MDMwX3J0Y19pbnRlcnJ1cHQsCiAJCQkJSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCQlydGMtPmRldi5idXNfaWQsIHJ0Yyk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJUlEgaXMgbm90IGZyZWUuXG4iKTsKIAkJZ290byBvdXQxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL01ha2VmaWxlCmluZGV4IGQwZWFlNTkuLjk1YmNjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKQEAgLTIsOSArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgUy8zOTAgc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMKICMKIAotQ0ZMQUdTX3N5c2luZm8ubyArPSAtSWluY2x1ZGUvbWF0aC1lbXUgLUlhcmNoL3MzOTAvbWF0aC1lbXUgLXcKLQotb2JqLXkgKz0gczM5MG1hY2gubyBzeXNpbmZvLm8KIG9iai15ICs9IGNpby8gYmxvY2svIGNoYXIvIGNyeXB0by8gbmV0LyBzY3NpLyBrdm0vCiAKIGRyaXZlcnMteSArPSBkcml2ZXJzL3MzOTAvYnVpbHQtaW4ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMDhjMjNhOS4uMmZkNjRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC05LDYgKzksOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTIyLDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAjaW5jbHVkZSA8YXNtL3RvZGNsay5oPgorI2luY2x1ZGUgPGFzbS9pdGN3Lmg+CiAKIC8qIFRoaXMgaXMgdWdseS4uLiAqLwogI2RlZmluZSBQUklOVEtfSEVBREVSICJkYXNkOiIKQEAgLTIyMSw3ICsyMjUsNyBAQAogCQkJcmV0dXJuIHJjOwogCX0KIAkvKiByZWdpc3RlciAnZGV2aWNlJyBkZWJ1ZyBhcmVhLCB1c2VkIGZvciBhbGwgREJGX0RFVl9YWFggY2FsbHMgKi8KLQlkZXZpY2UtPmRlYnVnX2FyZWEgPSBkZWJ1Z19yZWdpc3RlcihkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCAxLCAxLAorCWRldmljZS0+ZGVidWdfYXJlYSA9IGRlYnVnX3JlZ2lzdGVyKGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIDQsIDEsCiAJCQkJCSAgICA4ICogc2l6ZW9mKGxvbmcpKTsKIAlkZWJ1Z19yZWdpc3Rlcl92aWV3KGRldmljZS0+ZGVidWdfYXJlYSwgJmRlYnVnX3NwcmludGZfdmlldyk7CiAJZGVidWdfc2V0X2xldmVsKGRldmljZS0+ZGVidWdfYXJlYSwgREJGX1dBUk5JTkcpOwpAQCAtNzYyLDcgKzc2Niw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWRldmljZSA9IGNxci0+c3RhcnRkZXY7CiAJaWYgKHN0cm5jbXAoKGNoYXIgKikgJmNxci0+bWFnaWMsIGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgNCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKIAkJCSAgICAiIGRhc2RfY2N3X3JlcSAweCUwOHggbWFnaWMgZG9lc24ndCBtYXRjaCIKIAkJCSAgICAiIGRpc2NpcGxpbmUgMHglMDh4IiwKIAkJCSAgICBjcXItPm1hZ2ljLApAQCAtNzgyLDYgKzc4Niw3IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJldHJpZXMsIHJjOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJLyogQ2hlY2sgdGhlIGNxciAqLwogCXJjID0gZGFzZF9jaGVja19jcXIoY3FyKTsKQEAgLTgxNSwxMCArODIwLDEwIEBACiAJCQkJICAgICAgImRldmljZSBidXN5LCByZXRyeSBsYXRlciIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAibGluZSAlZCB1bmtub3duIFJDPSVkLCBwbGVhc2UgIgotCQkJCSAgICAicmVwb3J0IHRvIGxpbnV4MzkwQGRlLmlibS5jb20iLAotCQkJCSAgICBfX0xJTkVfXywgcmMpOworCQkJLyogaW50ZXJuYWwgZXJyb3IgMTAgLSB1bmtub3duIHJjKi8KKwkJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjEwICVkIiwgcmMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgIgorCQkJCSJEQVNEIGRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQkJQlVHKCk7CiAJCQlicmVhazsKIAkJfQpAQCAtODM2LDYgKzg0MSw3IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJjOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJLyogQ2hlY2sgdGhlIGNxciAqLwogCXJjID0gZGFzZF9jaGVja19jcXIoY3FyKTsKQEAgLTg0MywxNyArODQ5LDIzIEBACiAJCXJldHVybiByYzsKIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CiAJaWYgKGNxci0+cmV0cmllcyA8IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAotCQkJICAgICJzdGFydF9JTzogcmVxdWVzdCAlcCAoJTAyeC8laSkgLSBubyByZXRyeSBsZWZ0LiIsCi0JCQkgICAgY3FyLCBjcXItPnN0YXR1cywgY3FyLT5yZXRyaWVzKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTQgLSBzdGFydF9JTyBydW4gb3V0IG9mIHJldHJpZXMgKi8KKwkJc3ByaW50ZihlcnJvcnN0cmluZywgIjE0ICVwIiwgY3FyKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRVJST1I7CiAJCXJldHVybiAtRUlPOwogCX0KIAljcXItPnN0YXJ0Y2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGFydHRpbWUgPSBqaWZmaWVzOwogCWNxci0+cmV0cmllcy0tOwotCXJjID0gY2N3X2RldmljZV9zdGFydChkZXZpY2UtPmNkZXYsIGNxci0+Y3BhZGRyLCAobG9uZykgY3FyLAotCQkJICAgICAgY3FyLT5scG0sIDApOworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCXJjID0gY2N3X2RldmljZV90bV9zdGFydChkZXZpY2UtPmNkZXYsIGNxci0+Y3BhZGRyLAorCQkJCQkgKGxvbmcpIGNxciwgY3FyLT5scG0pOworCX0gZWxzZSB7CisJCXJjID0gY2N3X2RldmljZV9zdGFydChkZXZpY2UtPmNkZXYsIGNxci0+Y3BhZGRyLAorCQkJCSAgICAgIChsb25nKSBjcXIsIGNxci0+bHBtLCAwKTsKKwl9CiAJc3dpdGNoIChyYykgewogCWNhc2UgMDoKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9JTl9JTzsKQEAgLTg2MiwxMSArODc0LDExIEBACiAJCQkgICAgICBjcXIpOwogCQlicmVhazsKIAljYXNlIC1FQlVTWToKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IGRldmljZSBidXN5LCByZXRyeSBsYXRlciIpOwogCQlicmVhazsKIAljYXNlIC1FVElNRURPVVQ6Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiByZXF1ZXN0IHRpbWVvdXQsIHJldHJ5IGxhdGVyIik7CiAJCWJyZWFrOwogCWNhc2UgLUVBQ0NFUzoKQEAgLTg3NiwxOSArODg4LDI0IEBACiAJCSAqIERvIGEgcmV0cnkgd2l0aCBhbGwgYXZhaWxhYmxlIHBhdGhlcy4KIAkJICovCiAJCWNxci0+bHBtID0gTFBNX0FOWVBBVEg7Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiBzZWxlY3RlZCBwYXRoZXMgZ29uZSwiCiAJCQkgICAgICAiIHJldHJ5IG9uIGFsbCBwYXRoZXMiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRU5PREVWOgorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgInN0YXJ0X0lPOiAtRU5PREVWIGRldmljZSBnb25lLCByZXRyeSIpOworCQlicmVhazsKIAljYXNlIC1FSU86Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICAgInN0YXJ0X0lPOiBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJzdGFydF9JTzogLUVJTyBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCSAgICAibGluZSAlZCB1bmtub3duIFJDPSVkLCBwbGVhc2UgcmVwb3J0IgotCQkJICAgICIgdG8gbGludXgzOTBAZGUuaWJtLmNvbSIsIF9fTElORV9fLCByYyk7CisJCS8qIGludGVybmFsIGVycm9yIDExIC0gdW5rbm93biByYyAqLworCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIxMSAlZCIsIHJjKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJInJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQpAQCAtOTQ1LDcgKzk2Miw3IEBACiAJCXJldHVybjsKIAljcXIgPSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKSBpbnRwYXJtOwogCWlmIChjcXItPnN0YXR1cyAhPSBEQVNEX0NRUl9JTl9JTykgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsCisJCURCRl9FVkVOVChEQkZfREVCVUcsCiAJCQkiaW52YWxpZCBzdGF0dXMgaW4gaGFuZGxlX2tpbGxlZF9yZXF1ZXN0OiAiCiAJCQkiYnVzX2lkICVzLCBzdGF0dXMgJTAyeCIsCiAJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOwpAQCAtOTU2LDggKzk3Myw4IEBACiAJaWYgKGRldmljZSA9PSBOVUxMIHx8CiAJICAgIGRldmljZSAhPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpIHx8CiAJICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogYnVzX2lkICVzIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6ICIKKwkJCSAgICAgICJidXNfaWQgJXMiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk5NiwxMSArMTAxMywxMSBAQAogCQljYXNlIC1FSU86CiAJCQlicmVhazsKIAkJY2FzZSAtRVRJTUVET1VUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyglcyk6IHJlcXVlc3QgdGltZWQgb3V0XG4iLAorCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiJXMoJXMpOiByZXF1ZXN0IHRpbWVkIG91dFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzKCVzKTogdW5rbm93biBlcnJvciAlbGRcbiIsCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyglcyk6IHVua25vd24gZXJyb3IgJWxkXG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgUFRSX0VSUihpcmIpKTsKIAkJfQogCQlkYXNkX2hhbmRsZV9raWxsZWRfcmVxdWVzdChjZGV2LCBpbnRwYXJtKTsKQEAgLTEwMDksMTUgKzEwMjYsMTEgQEAKIAogCW5vdyA9IGdldF9jbG9jaygpOwogCi0JREJGX0VWRU5UKERCRl9FUlIsICJJbnRlcnJ1cHQ6IGJ1c19pZCAlcyBDUy9EUyAlMDR4IGlwICUwOHgiLAotCQkgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCAoKGlyYi0+c2Nzdy5jbWQuY3N0YXQgPDwgOCkgfAotCQkgIGlyYi0+c2Nzdy5jbWQuZHN0YXQpLCAodW5zaWduZWQgaW50KSBpbnRwYXJtKTsKLQogCS8qIGNoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzICovCiAJY3FyID0gKHN0cnVjdCBkYXNkX2Njd19yZXEgKikgaW50cGFybTsKLQlpZiAoIWNxciB8fCAoKGlyYi0+c2Nzdy5jbWQuY2MgPT0gMSkgJiYKLQkJICAgICAoaXJiLT5zY3N3LmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCi0JCSAgICAgKGlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpIHsKKwlpZiAoIWNxciB8fCAoKHNjc3dfY2MoJmlyYi0+c2NzdykgPT0gMSkgJiYKKwkJICAgICAoc2Nzd19mY3RsKCZpcmItPnNjc3cpICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCisJCSAgICAgKHNjc3dfc3RjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpIHsKIAkJaWYgKGNxciAmJiBjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9JTl9JTykKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwogCQlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpOwpAQCAtMTAzMywxNCArMTA0NiwxNCBAQAogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoIWRldmljZSB8fAogCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6IGJ1c19pZCAlcyIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiAiCisJCQkgICAgICAiYnVzX2lkICVzIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm47CiAJfQogCiAJLyogQ2hlY2sgZm9yIGNsZWFyIHBlbmRpbmcgKi8KIAlpZiAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfQ0xFQVJfUEVORElORyAmJgotCSAgICBpcmItPnNjc3cuY21kLmZjdGwgJiBTQ1NXX0ZDVExfQ0xFQVJfRlVOQykgeworCSAgICBzY3N3X2ZjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0ZDVExfQ0xFQVJfRlVOQykgewogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0NMRUFSRUQ7CiAJCWRhc2RfZGV2aWNlX2NsZWFyX3RpbWVyKGRldmljZSk7CiAJCXdha2VfdXAoJmRhc2RfZmx1c2hfd3EpOwpAQCAtMTA0OCwxOSArMTA2MSwxNyBAQAogCQlyZXR1cm47CiAJfQogCi0gCS8qIGNoZWNrIHN0YXR1cyAtIHRoZSByZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQgYnkgZHluIGRldGFjaCAqLworCS8qIGNoZWNrIHN0YXR1cyAtIHRoZSByZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQgYnkgZHluIGRldGFjaCAqLwogCWlmIChjcXItPnN0YXR1cyAhPSBEQVNEX0NRUl9JTl9JTykgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsCi0JCQkiaW52YWxpZCBzdGF0dXM6IGJ1c19pZCAlcywgc3RhdHVzICUwMngiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgc3RhdHVzOiBidXNfaWQgJXMsICIKKwkJCSAgICAgICJzdGF0dXMgJTAyeCIsIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9Ci0JREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIkludDogQ1MvRFMgMHglMDR4IGZvciBjcXIgJXAiLAotCQkgICAgICAoKGlyYi0+c2Nzdy5jbWQuY3N0YXQgPDwgOCkgfCBpcmItPnNjc3cuY21kLmRzdGF0KSwgY3FyKTsKKwogCW5leHQgPSBOVUxMOwogCWV4cGlyZXMgPSAwOwotCWlmIChpcmItPnNjc3cuY21kLmRzdGF0ID09IChERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkgJiYKLQkgICAgaXJiLT5zY3N3LmNtZC5jc3RhdCA9PSAwICYmICFpcmItPmVzdy5lc3cwLmVydy5jb25zKSB7CisJaWYgKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgPT0gKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSAmJgorCSAgICBzY3N3X2NzdGF0KCZpcmItPnNjc3cpID09IDApIHsKIAkJLyogcmVxdWVzdCB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1NVQ0NFU1M7CiAJCWNxci0+c3RvcGNsayA9IG5vdzsKQEAgLTEwNzEsMTggKzEwODIsMjMgQEAKIAkJfQogCX0gZWxzZSB7ICAvKiBlcnJvciAqLwogCQltZW1jcHkoJmNxci0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CisJCS8qIGxvZyBzZW5zZSBmb3IgZXZlcnkgZmFpbGVkIEkvTyB0byBzMzkwIGRlYnVnZmVhdHVyZSAqLworCQlkYXNkX2xvZ19zZW5zZV9kYmYoY3FyLCBpcmIpOwogCQlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKIAkJCWRhc2RfbG9nX3NlbnNlKGNxciwgaXJiKTsKIAkJfQorCiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IHdhbnQgY29tcGxleCBFUlAgZm9yIHRoaXMgcmVxdWVzdCwgdGhlbiBqdXN0CiAJCSAqIHJlc2V0IHRoaXMgYW5kIHJldHJ5IGl0IGluIHRoZSBmYXN0cGF0aAogCQkgKi8KIAkJaWYgKCF0ZXN0X2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncykgJiYKIAkJICAgIGNxci0+cmV0cmllcyA+IDApIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKLQkJCQkgICAgImRlZmF1bHQgRVJQIGluIGZhc3RwYXRoICglaSByZXRyaWVzIGxlZnQpIiwKLQkJCQkgICAgY3FyLT5yZXRyaWVzKTsKKwkJCWlmIChjcXItPmxwbSA9PSBMUE1fQU5ZUEFUSCkKKwkJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAorCQkJCQkgICAgICAiZGVmYXVsdCBFUlAgaW4gZmFzdHBhdGggIgorCQkJCQkgICAgICAiKCVpIHJldHJpZXMgbGVmdCkiLAorCQkJCQkgICAgICBjcXItPnJldHJpZXMpOwogCQkJY3FyLT5scG0gICAgPSBMUE1fQU5ZUEFUSDsKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwogCQkJbmV4dCA9IGNxcjsKQEAgLTEwOTMsMTAgKzExMDksNiBAQAogCSAgICAoIWRldmljZS0+c3RvcHBlZCkpIHsKIAkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+c3RhcnRfSU8obmV4dCkgPT0gMCkKIAkJCWV4cGlyZXMgPSBuZXh0LT5leHBpcmVzOwotCQllbHNlCi0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJJbnRlcnJ1cHQgZmFzdHBhdGggIgotCQkJCSAgICAiZmFpbGVkISIpOwogCX0KIAlpZiAoZXhwaXJlcyAhPSAwKQogCQlkYXNkX2RldmljZV9zZXRfdGltZXIoZGV2aWNlLCBleHBpcmVzKTsKQEAgLTExNjksNiArMTE4MSw3IEBACiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrOwogCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCB2b2lkICpkYXRhKTsKIAl2b2lkICpjYWxsYmFja19kYXRhOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGwsIG4sIGZpbmFsX3F1ZXVlKSB7CiAJCWNxciA9IGxpc3RfZW50cnkobCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgZGV2bGlzdCk7CkBAIC0xMTg5LDEwICsxMjAyLDExIEBACiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1RFUk1JTkFURUQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJ3cm9uZyBjcXIgc3RhdHVzIGluIF9fZGFzZF9wcm9jZXNzX2ZpbmFsX3F1ZXVlICIKLQkJCQkgICAgImZvciBjcXIgJXAsIHN0YXR1cyAleCIsCi0JCQkJICAgIGNxciwgY3FyLT5zdGF0dXMpOworCQkJLyogaW50ZXJuYWwgZXJyb3IgMTIgLSB3cm9uZyBjcXIgc3RhdHVzKi8KKwkJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjEyICVwICV4MDIiLCBjcXIsIGNxci0+c3RhdHVzKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkJInJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQkJQlVHKCk7CiAJCX0KIAkJaWYgKGNxci0+Y2FsbGJhY2sgIT0gTlVMTCkKQEAgLTEyMTcsMTggKzEyMzEsMTcgQEAKIAkgICAgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgY3FyLT5leHBpcmVzICsgY3FyLT5zdGFydHRpbWUpKSkgewogCQlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcikgIT0gMCkgewogCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDUgc2VjICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiaW50ZXJuYWwgZXJyb3IgLSB0aW1lb3V0ICglaXMpIGV4cGlyZWQgIgotCQkJCSAgICAiZm9yIGNxciAlcCwgdGVybWluYXRpb24gZmFpbGVkLCAiCi0JCQkJICAgICJyZXRyeWluZyBpbiA1cyIsCi0JCQkJICAgIChjcXItPmV4cGlyZXMvSFopLCBjcXIpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJImNxciAlcCB0aW1lZCBvdXQgKCVpcykgYnV0IGNhbm5vdCBiZSAiCisJCQkJImVuZGVkLCByZXRyeWluZyBpbiA1IHNcbiIsCisJCQkJY3FyLCAoY3FyLT5leHBpcmVzL0haKSk7CiAJCQljcXItPmV4cGlyZXMgKz0gNSpIWjsKIAkJCWRhc2RfZGV2aWNlX3NldF90aW1lcihkZXZpY2UsIDUqSFopOwogCQl9IGVsc2UgewotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImludGVybmFsIGVycm9yIC0gdGltZW91dCAoJWlzKSBleHBpcmVkICIKLQkJCQkgICAgImZvciBjcXIgJXAgKCVpIHJldHJpZXMgbGVmdCkiLAotCQkJCSAgICAoY3FyLT5leHBpcmVzL0haKSwgY3FyLCBjcXItPnJldHJpZXMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJImNxciAlcCB0aW1lZCBvdXQgKCVpcyksICVpIHJldHJpZXMgIgorCQkJCSJyZW1haW5pbmdcbiIsIGNxciwgKGNxci0+ZXhwaXJlcy9IWiksCisJCQkJY3FyLT5yZXRyaWVzKTsKIAkJfQogCX0KIH0KQEAgLTEyOTAsMTAgKzEzMDMsOSBAQAogCQkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKIAkJCWlmIChyYykgewogCQkJCS8qIHVuYWJsZSB0byB0ZXJtaW5hdGUgcmVxdWV1c3QgKi8KLQkJCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCQkgICAgImRhc2QgZmx1c2ggY2N3X3F1ZXVlIGlzIHVuYWJsZSAiCi0JCQkJCSAgICAiIHRvIHRlcm1pbmF0ZSByZXF1ZXN0ICVwIiwKLQkJCQkJICAgIGNxcik7CisJCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSJGbHVzaGluZyB0aGUgREFTRCByZXF1ZXN0IHF1ZXVlICIKKwkJCQkJImZhaWxlZCBmb3IgcmVxdWVzdCAlcFxuIiwgY3FyKTsKIAkJCQkvKiBzdG9wIGZsdXNoIHByb2Nlc3NpbmcgKi8KIAkJCQlnb3RvIGZpbmlzaGVkOwogCQkJfQpAQCAtMTUzNywxMCArMTU0OSw5IEBACiAJCS8qIHJlcXVlc3QgaW4gSU8gLSB0ZXJtaW5hdGUgSU8gYW5kIHJlbGVhc2UgYWdhaW4gKi8KIAkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKIAkJaWYgKHJjKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiZGFzZF9jYW5jZWxfcmVxIGlzIHVuYWJsZSAiCi0JCQkJICAgICIgdG8gdGVybWluYXRlIHJlcXVlc3QgJXAsIHJjID0gJWQiLAotCQkJCSAgICBjcXIsIHJjKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJDYW5jZWxsaW5nIHJlcXVlc3QgJXAgZmFpbGVkIHdpdGggcmM9JWRcbiIsCisJCQkJY3FyLCByYyk7CiAJCX0gZWxzZSB7CiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKIAkJCXJjID0gMTsKQEAgLTE2MTcsNyArMTYyOCw3IEBACiAJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0RPTkUpCiAJCURCRl9ERVZfRVZFTlQoREJGX05PVElDRSwgZGV2aWNlLCAiJXMiLCAiRVJQIHN1Y2Nlc3NmdWwiKTsKIAllbHNlCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsICJFUlAgdW5zdWNjZXNzZnVsIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiRVJQIGZhaWxlZCBmb3IgdGhlIERBU0RcbiIpOwogCWVycF9mbiA9IGRldmljZS0+ZGlzY2lwbGluZS0+ZXJwX3Bvc3RhY3Rpb24oY3FyKTsKIAllcnBfZm4oY3FyKTsKIH0KQEAgLTE5OTEsOCArMjAwMiwxMSBAQAogCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgbWF4KTsKIAlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwkvKiB3aXRoIHBhZ2Ugc2l6ZWQgc2VnbWVudHMgd2UgY2FuIHRyYW5zbGF0ZSBlYWNoIHNlZ2VtZW50IGludG8KKwkgKiBvbmUgaWRhdy90aWRhdworCSAqLworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBQQUdFX1NJWkUpOworCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBQQUdFX1NJWkUgLSAxKTsKIAlibGtfcXVldWVfb3JkZXJlZChibG9jay0+cmVxdWVzdF9xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CiB9CiAKQEAgLTIwNDMsOCArMjA1Nyw5IEBACiAJfQogCiAJaWYgKGRhc2RfcHJvYmVvbmx5KSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgYmFzZSwgIiVzIiwKLQkJCSAgICAiTm8gYWNjZXNzIHRvIGRldmljZSBkdWUgdG8gcHJvYmVvbmx5IG1vZGUiKTsKKwkJZGV2X2luZm8oJmJhc2UtPmNkZXYtPmRldiwKKwkJCSAiQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIGl0IGlzIGluICIKKwkJCSAicHJvYmVvbmx5IG1vZGVcbiIpOwogCQlyYyA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjEwMSw3ICsyMTE2LDggQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gZGFzZF9vcGVuLAogCS5yZWxlYXNlCT0gZGFzZF9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBkYXNkX2lvY3RsLAorCS5pb2N0bAkJPSBkYXNkX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBkYXNkX2lvY3RsLAogCS5nZXRnZW8JCT0gZGFzZF9nZXRnZW8sCiB9OwogCkBAIC0yMTQzLDE0ICsyMTU5LDE0IEBACiAKIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKGNkZXYsIENDV0RFVl9ET19QQVRIR1JPVVApOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCSAgICAgICAiZGFzZF9nZW5lcmljX3Byb2JlOiBjb3VsZCBub3Qgc2V0IGNjdy1kZXZpY2Ugb3B0aW9ucyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IGRhc2RfYWRkX3N5c2ZzX2ZpbGVzKGNkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCSAgICAgICAiZGFzZF9nZW5lcmljX3Byb2JlOiBjb3VsZCBub3QgYWRkIHN5c2ZzIGVudHJpZXMgIgogCQkgICAgICAgImZvciAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm4gcmV0OwpAQCAtMjE2Niw5ICsyMTgyLDcgQEAKIAkgICAgKGRhc2RfYXV0b2RldGVjdCAmJiBkYXNkX2J1c2lkX2tub3duKGRldl9uYW1lKCZjZGV2LT5kZXYpKSAhPSAwKSkKIAkJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNkZXYpOwogCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBpbml0aWFsbHkgIgotCQkgICAgICAgIm9ubGluZSBjY3ctZGV2aWNlICVzOyByZXR1cm4gY29kZTogJWRcbiIsCisJCXByX3dhcm5pbmcoIiVzOiBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgd2l0aCByYz0lZFxuIiwKIAkJICAgICAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCByZXQpOwogCXJldHVybiAwOwogfQpAQCAtMjIzMiwxMCArMjI0Niw5IEBACiAJZGlzY2lwbGluZSA9IGJhc2VfZGlzY2lwbGluZTsKIAlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9VU0VESUFHKSB7CiAJICAJaWYgKCFkYXNkX2RpYWdfZGlzY2lwbGluZV9wb2ludGVyKSB7Ci0JCSAgICAgICAgcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCQkiZGFzZF9nZW5lcmljIGNvdWxkbid0IG9ubGluZSBkZXZpY2UgJXMgIgotCQkJCSItIGRpc2NpcGxpbmUgRElBRyBub3QgYXZhaWxhYmxlXG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCBiZWNhdXNlICIKKwkJCQkgICAib2YgbWlzc2luZyBESUFHIGRpc2NpcGxpbmVcbiIsCisJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtMjI1NiwxMCArMjI2OSw5IEBACiAJLyogY2hlY2tfZGV2aWNlIHdpbGwgYWxsb2NhdGUgYmxvY2sgZGV2aWNlIGlmIG5lY2Vzc2FyeSAqLwogCXJjID0gZGlzY2lwbGluZS0+Y2hlY2tfZGV2aWNlKGRldmljZSk7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HCi0JCQkiZGFzZF9nZW5lcmljIGNvdWxkbid0IG9ubGluZSBkZXZpY2UgJXMgIgotCQkJIndpdGggZGlzY2lwbGluZSAlcyByYz0laVxuIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBkaXNjaXBsaW5lLT5uYW1lLCByYyk7CisJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIHdpdGggZGlzY2lwbGluZSAlcyAiCisJCQkgICAiZmFpbGVkIHdpdGggcmM9JWlcbiIsCisJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgZGlzY2lwbGluZS0+bmFtZSwgcmMpOwogCQltb2R1bGVfcHV0KGRpc2NpcGxpbmUtPm93bmVyKTsKIAkJbW9kdWxlX3B1dChiYXNlX2Rpc2NpcGxpbmUtPm93bmVyKTsKIAkJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CkBAIC0yMjY4LDkgKzIyODAsOCBAQAogCiAJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9PTkxJTkUpOwogCWlmIChkZXZpY2UtPnN0YXRlIDw9IERBU0RfU1RBVEVfS05PV04pIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCSJkYXNkX2dlbmVyaWMgZGlzY2lwbGluZSBub3QgZm91bmQgZm9yICVzXG4iLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlwcl93YXJuaW5nKCIlcyBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgYmVjYXVzZSBvZiBhICIKKwkJCSAgICJtaXNzaW5nIGRpc2NpcGxpbmVcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmMgPSAtRU5PREVWOwogCQlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX05FVyk7CiAJCWlmIChkZXZpY2UtPmJsb2NrKQpAQCAtMjMxNCwxMyArMjMyNSwxMyBAQAogCQlvcGVuX2NvdW50ID0gYXRvbWljX3JlYWQoJmRldmljZS0+YmxvY2stPm9wZW5fY291bnQpOwogCQlpZiAob3Blbl9jb3VudCA+IG1heF9jb3VudCkgewogCQkJaWYgKG9wZW5fY291bnQgPiAwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IG9mZmxpbmUgZGFzZCAiCi0JCQkJICAgICAgICJkZXZpY2Ugd2l0aCBvcGVuIGNvdW50ID0gJWkuXG4iLAotCQkJCSAgICAgICBvcGVuX2NvdW50KTsKKwkJCQlwcl93YXJuaW5nKCIlczogVGhlIERBU0QgY2Fubm90IGJlIHNldCBvZmZsaW5lICIKKwkJCQkJICAgIndpdGggb3BlbiBjb3VudCAlaVxuIiwKKwkJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldiksIG9wZW5fY291bnQpOwogCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIiwKLQkJCQkgICAgICAgIkNhbid0IG9mZmxpbmUgZGFzZCBkZXZpY2UgZHVlICIKLQkJCQkgICAgICAgInRvIGludGVybmFsIHVzZVxuIik7CisJCQkJcHJfd2FybmluZygiJXM6IFRoZSBEQVNEIGNhbm5vdCBiZSBzZXQgb2ZmbGluZSAiCisJCQkJCSAgICJ3aGlsZSBpdCBpcyBpbiB1c2VcbiIsCisJCQkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWNsZWFyX2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmRldmljZS0+ZmxhZ3MpOwogCQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjM5Myw4ICsyNDA0LDEwIEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QobWFnaWMsIDEgLyogUkRDICovLCByZGNfYnVmZmVyX3NpemUsIGRldmljZSk7CiAKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBSREMgcmVxdWVzdCIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxMyAtIEFsbG9jYXRpbmcgdGhlIFJEQyByZXF1ZXN0IGZhaWxlZCovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkgInJlYXNvbj0lc1xuIiwgIjEzIik7CiAJCXJldHVybiBjcXI7CiAJfQogCkBAIC0yNDMxLDYgKzI0NDQsNDAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyk7CiAKKy8qCisgKiAgIEluIGNvbW1hbmQgbW9kZSBhbmQgdHJhbnNwb3J0IG1vZGUgd2UgbmVlZCB0byBsb29rIGZvciBzZW5zZQorICogICBkYXRhIGluIGRpZmZlcmVudCBwbGFjZXMuIFRoZSBzZW5zZSBkYXRhIGl0c2VsZiBpcyBhbGx3YXlzCisgKiAgIGFuIGFycmF5IG9mIDMyIGJ5dGVzLCBzbyB3ZSBjYW4gdW5pZnkgdGhlIHNlbnNlIGRhdGEgYWNjZXNzCisgKiAgIGZvciBib3RoIG1vZGVzLgorICovCitjaGFyICpkYXNkX2dldF9zZW5zZShzdHJ1Y3QgaXJiICppcmIpCit7CisJc3RydWN0IHRzYiAqdHNiID0gTlVMTDsKKwljaGFyICpzZW5zZSA9IE5VTEw7CisKKwlpZiAoc2Nzd19pc190bSgmaXJiLT5zY3N3KSAmJiAoaXJiLT5zY3N3LnRtLmZjeHMgPT0gMHgwMSkpIHsKKwkJaWYgKGlyYi0+c2Nzdy50bS50Y3cpCisJCQl0c2IgPSB0Y3dfZ2V0X3RzYigoc3RydWN0IHRjdyAqKSh1bnNpZ25lZCBsb25nKQorCQkJCQkgIGlyYi0+c2Nzdy50bS50Y3cpOworCQlpZiAodHNiICYmIHRzYi0+bGVuZ3RoID09IDY0ICYmIHRzYi0+ZmxhZ3MpCisJCQlzd2l0Y2ggKHRzYi0+ZmxhZ3MgJiAweDA3KSB7CisJCQljYXNlIDE6CS8qIHRzYV9pb3N0YXQgKi8KKwkJCQlzZW5zZSA9IHRzYi0+dHNhLmlvc3RhdC5zZW5zZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogLyogdHNhX2RkcGMgKi8KKwkJCQlzZW5zZSA9IHRzYi0+dHNhLmRkcGMuc2Vuc2U7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGN1cnJlbnRseSB3ZSBkb24ndCB1c2UgaW50ZXJyb2dhdGUgZGF0YSAqLworCQkJCWJyZWFrOworCQkJfQorCX0gZWxzZSBpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCQlzZW5zZSA9IGlyYi0+ZWN3OworCX0KKwlyZXR1cm4gc2Vuc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dldF9zZW5zZSk7CisKIHN0YXRpYyBpbnQgX19pbml0IGRhc2RfaW5pdCh2b2lkKQogewogCWludCByYzsKQEAgLTI0NzIsNyArMjUxOSw3IEBACiAKIAlyZXR1cm4gMDsKIGZhaWxlZDoKLQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgImluaXRpYWxpemF0aW9uIG5vdCBwZXJmb3JtZWQgZHVlIHRvIGVycm9ycyIpOworCXByX2luZm8oIlRoZSBEQVNEIGRldmljZSBkcml2ZXIgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iKTsKIAlkYXNkX2V4aXQoKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCBkODJhYWQ1Li4yNzk5MWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTcsNiArNyw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KQEAgLTc1LDcgKzc3LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwKIAkJICAgICJibG9ja2luZyByZXF1ZXN0IHF1ZXVlIGZvciAlaXMiLCBleHBpcmVzL0haKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xMTQsOSArMTE2LDkgQEAKIAl9IGVsc2UgewogCiAJCS8qIGlzc3VlIGEgbWVzc2FnZSBhbmQgd2FpdCBmb3IgJ2RldmljZSByZWFkeScgaW50ZXJydXB0ICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJICAgICJpcyBvZmZsaW5lIG9yIG5vdCBpbnN0YWxsZWQgLSAiCi0JCQkgICAgIklOVEVSVkVOVElPTiBSRVFVSVJFRCEhIik7CisJCQkgICAgIklOVEVSVkVOVElPTiBSRVFVSVJFRCEhXG4iKTsKIAogCQlkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlKGVycCwgNjAqSFopOwogCX0KQEAgLTE1OCw3ICsxNjAsNyBAQAogCiAJaWYgKChlcnAtPmxwbSAmIG9wbSkgIT0gMHgwMCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICJ0cnkgYWx0ZXJuYXRlIGxwbT0leCAobHB1bT0leCAvIG9wbT0leCkiLAogCQkJICAgIGVycC0+bHBtLCBlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSwgb3BtKTsKIApAQCAtMTY2LDEwICsxNjgsOSBAQAogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKIAkJZXJwLT5yZXRyaWVzID0gMTA7CiAJfSBlbHNlIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCSAgICAiTm8gYWx0ZXJuYXRlIGNoYW5uZWwgcGF0aCBsZWZ0IChscHVtPSV4IC8gIgotCQkJICAgICJvcG09JXgpIC0+IHBlcm1hbmVudCBlcnJvciIsCi0JCQkgICAgZXJwLT5pcmIuZXN3LmVzdzAuc3VibG9nLmxwdW0sIG9wbSk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIlRoZSBEQVNEIGNhbm5vdCBiZSByZWFjaGVkIG9uIGFueSBwYXRoIChscHVtPSV4IgorCQkJIi9vcG09JXgpXG4iLCBlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSwgb3BtKTsKIAogCQkvKiBwb3N0IHJlcXVlc3Qgd2l0aCBwZXJtYW5lbnQgZXJyb3IgKi8KIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CkBAIC0yMDQsOCArMjA1LDggQEAKIAkJCQkJICBzaXplb2Yoc3RydWN0IERDVExfZGF0YSksCiAJCQkJCSAgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGRjdGxfY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgRENUTC1DUVIiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBEQ1RMLUNRUlxuIik7CiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCQlyZXR1cm4gZXJwOwogCX0KQEAgLTI5NCw3ICsyOTUsNyBAQAogCS8qIGludGVycnVwdCAodGhpcyBlbmFibGVzIGVhc2llciBlbnF1ZWluZyBvZiB0aGUgY3FyKQkgICAgKi8KIAlpZiAoZXJwLT5mdW5jdGlvbiAhPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwgIiVzIiwKIAkJCSAgICAiZGFzZF8zOTkwX2VycF9hY3Rpb25fNDogZmlyc3QgdGltZSByZXRyeSIpOwogCiAJCWVycC0+cmV0cmllcyA9IDI1NjsKQEAgLTMwMyw3ICszMDQsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChzZW5zZSAmJiAoc2Vuc2VbMjVdID09IDB4MUQpKSB7IC8qIHN0YXRlIGNoYW5nZSBwZW5kaW5nICovCiAKLQkJCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkJCSAgICAid2FpdGluZyBmb3Igc3RhdGUgY2hhbmdlIHBlbmRpbmcgIgogCQkJCSAgICAiaW50ZXJydXB0LCAlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICBlcnAtPnJldHJpZXMpOwpAQCAtMzExLDE1ICszMTIsMTQgQEAKIAkJCWRhc2RfMzk5MF9lcnBfYmxvY2tfcXVldWUoZXJwLCAzMCpIWik7CiAKIAkJfSBlbHNlIGlmIChzZW5zZSAmJiAoc2Vuc2VbMjVdID09IDB4MUUpKSB7CS8qIGJ1c3kgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkJCSAgICAiYnVzeSAtIHJlZHJpdmluZyByZXF1ZXN0IGxhdGVyLCAiCiAJCQkJICAgICIlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICBlcnAtPnJldHJpZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIEhaKTsKIAkJfSBlbHNlIHsKLQogCQkJLyogbm8gc3RhdGUgY2hhbmdlIHBlbmRpbmcgLSByZXRyeSAqLwotCQkJREVWX01FU1NBR0UgKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLAogCQkJCSAgICAgInJlZHJpdmluZyByZXF1ZXN0IGltbWVkaWF0ZWx5LCAiCiAJCQkJICAgICAiJWQgcmV0cmllcyBsZWZ0IiwKIAkJCQkgICAgIGVycC0+cmV0cmllcyk7CkBAIC0zODQsNiArMzg0LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAJY2hhciBtc2dfZm9ybWF0ID0gKHNlbnNlWzddICYgMHhGMCk7CiAJY2hhciBtc2dfbm8gPSAoc2Vuc2VbN10gJiAweDBGKTsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCXN3aXRjaCAobXNnX2Zvcm1hdCkgewogCWNhc2UgMHgwMDoJCS8qIEZvcm1hdCAwIC0gUHJvZ3JhbSBvciBTeXN0ZW0gQ2hlY2tzICovCkBAIC0zOTQsOTUgKzM5NSw5NyBAQAogCQkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDE6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIENvbW1hbmQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIENvbW1hbmRcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAyOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgQ29tbWFuZCAiCi0JCQkJCSAgICAiU2VxdWVuY2UiKTsKKwkJCQkJICAgICJTZXF1ZW5jZVxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDM6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ0NXIENvdW50IGxlc3MgdGhhbiAiCi0JCQkJCSAgICAicmVxdWlyZWQiKTsKKwkJCQkJICAgICJyZXF1aXJlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIFBhcmFtZXRlciIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgUGFyYW1ldGVyXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwNToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIERpYWdub3N0aWMgb2YgU2VwZWNpYWwiCi0JCQkJCSAgICAiIENvbW1hbmQgVmlvbGF0ZXMgRmlsZSBNYXNrIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gRGlhZ25vc3RpYyBvZiBTcGVjaWFsIgorCQkJCQkgICAgIiBDb21tYW5kIFZpb2xhdGVzIEZpbGUgTWFza1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDc6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ2hhbm5lbCBSZXR1cm5lZCB3aXRoICIKLQkJCQkJICAgICJJbmNvcnJlY3QgcmV0cnkgQ0NXIik7CisJCQkJCSAgICAiSW5jb3JyZWN0IHJldHJ5IENDV1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDg6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBSZXNldCBOb3RpZmljYXRpb24iKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBSZXNldCBOb3RpZmljYXRpb25cbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA5OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gU3RvcmFnZSBQYXRoIFJlc3RhcnQiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAiRk9STUFUIDAgLSBTdG9yYWdlIFBhdGggUmVzdGFydFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEE6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gQ2hhbm5lbCByZXF1ZXN0ZWQgIgotCQkJCQkgICAgIi4uLiAlMDJ4Iiwgc2Vuc2VbOF0pOworCQkJCQkgICAgIi4uLiAlMDJ4XG4iLCBzZW5zZVs4XSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEI6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBEZWZlY3RpdmUvIgotCQkJCQkgICAgIkFsdGVybmF0ZSBUcmFjayBQb2ludGVyIik7CisJCQkJCSAgICAiQWx0ZXJuYXRlIFRyYWNrIFBvaW50ZXJcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBDOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIERQUyBJbnN0YWxsYXRpb24gIgotCQkJCQkgICAgIkNoZWNrIik7CisJCQkJCSAgICAiQ2hlY2tcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBFOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIENvbW1hbmQgSW52YWxpZCBvbiAiCi0JCQkJCSAgICAiU2Vjb25kYXJ5IEFkZHJlc3MiKTsKKwkJCQkJICAgICJTZWNvbmRhcnkgQWRkcmVzc1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MEY6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gU3RhdHVzIE5vdCBBcyAiCi0JCQkJCSAgICAiUmVxdWlyZWQ6IHJlYXNvbiAlMDJ4Iiwgc2Vuc2VbOF0pOworCQkJCQkgICAgIlJlcXVpcmVkOiByZWFzb24gJTAyeFxuIiwKKwkJCQkJIHNlbnNlWzhdKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBSZXNldmVkIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWRcbiIpOwogCQkJfQogCQl9IGVsc2UgewogCQkJc3dpdGNoIChtc2dfbm8pIHsKIAkJCWNhc2UgMHgwMDoJLyogTm8gTWVzc2FnZSAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAxOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gRGV2aWNlIEVycm9yIFNvdXJjZSIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICJGT1JNQVQgMCAtIERldmljZSBFcnJvciAiCisJCQkJCSAiU291cmNlXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWRcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAzOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIERldmljZSBGZW5jZWQgLSAiCi0JCQkJCSAgICAiZGV2aWNlID0gJTAyeCIsIHNlbnNlWzRdKTsKKwkJCQkJICAgICJkZXZpY2UgPSAlMDJ4XG4iLCBzZW5zZVs0XSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCQkgICAgIkZPUk1BVCAwIC0gRGF0YSBQaW5uZWQgZm9yICIKLQkJCQkJICAgICJEZXZpY2UiKTsKKwkJCQkJICAgICJEZXZpY2VcbiIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXJ2ZWRcbiIpOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtNDkyLDM0OCArNDk1LDM1MiBAQAogCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIFN0YXR1cyAxIG5vdCBhcyAiCi0JCQkJICAgICJleHBlY3RlZCIpOworCQkJCSAgICAiZXhwZWN0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBJbmRleCBtaXNzaW5nIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIEluZGV4IG1pc3NpbmdcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBJbnRlcnJ1cHRpb24gY2Fubm90IGJlIHJlc2V0Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgMSAtIEludGVycnVwdGlvbiBjYW5ub3QgYmUgIgorCQkJCSAicmVzZXRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2UgZGlkIG5vdCByZXNwb25kIHRvICIKLQkJCQkgICAgInNlbGVjdGlvbiIpOworCQkJCSAgICAic2VsZWN0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIGNoZWNrLTIgZXJyb3Igb3IgU2V0ICIKLQkJCQkgICAgIlNlY3RvciBpcyBub3QgY29tcGxldGUiKTsKKwkJCQkgICAgIlNlY3RvciBpcyBub3QgY29tcGxldGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBIZWFkIGFkZHJlc3MgZG9lcyBub3QgIgotCQkJCSAgICAiY29tcGFyZSIpOworCQkJCSAgICAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBzdGF0dXMgMSBub3QgdmFsaWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIHN0YXR1cyAxIG5vdCB2YWxpZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBub3QgcmVhZHkiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIG5vdCByZWFkeVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIFRyYWNrIHBoeXNpY2FsIGFkZHJlc3MgZGlkICIKLQkJCQkgICAgIm5vdCBjb21wYXJlIik7CisJCQkJICAgICJub3QgY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIE1pc3NpbmcgZGV2aWNlIGFkZHJlc3MgYml0Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIE1pc3NpbmcgZGV2aWNlIGFkZHJlc3MgYml0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gRHJpdmUgbW90b3Igc3dpdGNoIGlzIG9mZiIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBEcml2ZSBtb3RvciBzd2l0Y2ggaXMgb2ZmXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gU2VlayBpbmNvbXBsZXRlIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIFNlZWsgaW5jb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIEN5bGluZGVyIGFkZHJlc3MgZGlkIG5vdCAiCi0JCQkJICAgICJjb21wYXJlIik7CisJCQkJICAgICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gT2Zmc2V0IGFjdGl2ZSBjYW5ub3QgYmUgIgotCQkJCSAgICAicmVzZXQiKTsKKwkJCQkgICAgInJlc2V0XG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHgyMDoJCS8qIEZvcm1hdCAyIC0gMzk5MCBFcXVpcG1lbnQgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDIgLSAzOTkwIGNoZWNrLTIgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAyIC0gMzk5MCBjaGVjay0yIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAyIC0gU3VwcG9ydCBmYWNpbGl0eSBlcnJvcnMiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAyIC0gU3VwcG9ydCBmYWNpbGl0eSBlcnJvcnNcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJCSAgICAiRk9STUFUIDIgLSBNaWNyb2NvZGUgZGV0ZWN0ZWQgZXJyb3IgJTAyeCIsCi0JCQkJICAgIHNlbnNlWzhdKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCAyIC0gTWljcm9jb2RlIGRldGVjdGVkIGVycm9yICIKKwkJCQkgIiUwMnhcbiIsCisJCQkJIHNlbnNlWzhdKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMiAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMiAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHgzMDoJCS8qIEZvcm1hdCAzIC0gMzk5MCBDb250cm9sIENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAzIC0gQWxsZWdpYW5jZSB0ZXJtaW5hdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMyAtIEFsbGVnaWFuY2UgdGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDMgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDMgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NDA6CQkvKiBGb3JtYXQgNCAtIERhdGEgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBIb21lIGFkZHJlc3MgYXJlYSBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBIb21lIGFkZHJlc3MgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIENvdW50IGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gQ291bnQgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIEtleSBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIEtleSBhcmVhIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gRGF0YSBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIERhdGEgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBob21lIGFkZHJlc3MgIgotCQkJCSAgICAiYXJlYSIpOworCQkJCSAgICAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBjb3VudCBhZGRyZXNzICIKLQkJCQkgICAgImFyZWEiKTsKKwkJCQkgICAgImFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4ga2V5IGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGtleSBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGRhdGEgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gZGF0YSBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gSG9tZSBhZGRyZXNzIGFyZWEgZXJyb3I7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBDb3VudCBhcmVhIGVycm9yOyBvZmZzZXQgIgotCQkJCSAgICAiYWN0aXZlIik7CisJCQkJICAgICJhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBLZXkgYXJlYSBlcnJvcjsgb2Zmc2V0ICIKLQkJCQkgICAgImFjdGl2ZSIpOworCQkJCSAgICAiYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gRGF0YSBhcmVhIGVycm9yOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGhvbWUgIgotCQkJCSAgICAiYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW4gYnl0ZSBpbiBjb3VudCAiCi0JCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBrZXkgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBGOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5biBieXRlIGluIGRhdGEgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NTA6ICAvKiBGb3JtYXQgNSAtIERhdGEgQ2hlY2sgd2l0aCBkaXNwbGFjZW1lbnQgaW5mb3JtYXRpb24gKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlICIKLQkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhIik7CisJCQkJICAgICJob21lIGFkZHJlc3MgYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGNvdW50IGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgY291bnQgIgorCQkJCSAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGtleSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGtleSBhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUgZGF0YSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGRhdGEgIgorCQkJCSAiYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlICIKLQkJCQkgICAgImhvbWUgYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJob21lIGFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGNvdW50IGFyZWE7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBrZXkgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGRhdGEgYXJlYTsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDUgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDUgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4NjA6ICAvKiBGb3JtYXQgNiAtIFVzYWdlIFN0YXRpc3RpY3MvT3ZlcnJ1biBFcnJvcnMgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBBIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBBXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEIiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEJcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQyIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQ1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBEIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBEXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEUiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRiIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRlxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBHIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBHXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEgiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEhcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDcwOiAgLyogRm9ybWF0IDcgLSBEZXZpY2UgQ29ubmVjdGlvbiBDb250cm9sIENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUkNDIGluaXRpYXRlZCBieSBhIGNvbm5lY3Rpb24gIgotCQkJCSAgICAiY2hlY2sgYWxlcnQiKTsKKwkJCQkgICAgImNoZWNrIGFsZXJ0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUkNDIDEgc2VxdWVuY2Ugbm90ICIKLQkJCQkgICAgInN1Y2Nlc3NmdWwiKTsKKwkJCQkgICAgInN1Y2Nlc3NmdWxcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBSQ0MgMSBhbmQgUkNDIDIgc2VxdWVuY2VzIG5vdCAiCi0JCQkJICAgICJzdWNjZXNzZnVsIik7CisJCQkJICAgICJzdWNjZXNzZnVsXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCB0YWctaW4gZHVyaW5nICIKLQkJCQkgICAgInNlbGVjdGlvbiBzZXF1ZW5jZSIpOworCQkJCSAgICAic2VsZWN0aW9uIHNlcXVlbmNlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA3IC0gZXh0cmEgUkNDIHJlcXVpcmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNyAtIGV4dHJhIFJDQyByZXF1aXJlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgRENDIHNlbGVjdGlvbiAiCi0JCQkJICAgICJyZXNwb25zZSBvciB0aW1lb3V0Iik7CisJCQkJICAgICJyZXNwb25zZSBvciB0aW1lb3V0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gTWlzc2luZyBlbmQgb3BlcmF0aW9uOyBkZXZpY2UgIgotCQkJCSAgICAidHJhbnNmZXIgY29tcGxldGUiKTsKKwkJCQkgICAgInRyYW5zZmVyIGNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gTWlzc2luZyBlbmQgb3BlcmF0aW9uOyBkZXZpY2UgIgotCQkJCSAgICAidHJhbnNmZXIgaW5jb21wbGV0ZSIpOworCQkJCSAgICAidHJhbnNmZXIgaW5jb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgdGFnLWluIGZvciBhbiAiCi0JCQkJICAgICJpbW1lZGlhdGUgY29tbWFuZCBzZXF1ZW5jZSIpOworCQkJCSAgICAiaW1tZWRpYXRlIGNvbW1hbmQgc2VxdWVuY2VcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBJbnZhbGlkIHRhZy1pbiBmb3IgYW4gIgotCQkJCSAgICAiZXh0ZW5kZWQgY29tbWFuZCBzZXF1ZW5jZSIpOworCQkJCSAgICAiZXh0ZW5kZWQgY29tbWFuZCBzZXF1ZW5jZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBBOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIDM5OTAgbWljcm9jb2RlIHRpbWUgb3V0IHdoZW4gIgotCQkJCSAgICAic3RvcHBpbmcgc2VsZWN0aW9uIik7CisJCQkJICAgICJzdG9wcGluZyBzZWxlY3Rpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBObyByZXNwb25zZSB0byBzZWxlY3Rpb24gIgotCQkJCSAgICAiYWZ0ZXIgYSBwb2xsIGludGVycnVwdGlvbiIpOworCQkJCSAgICAiYWZ0ZXIgYSBwb2xsIGludGVycnVwdGlvblxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIFBlcm1hbmVudCBwYXRoIGVycm9yIChEQVNEICIKLQkJCQkgICAgImNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSkiKTsKKwkJCQkgICAgImNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSlcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBEQVNEIGNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSIKLQkJCQkgICAgIiBvbiBkaXNjb25uZWN0ZWQgY29tbWFuZCBjaGFpbiIpOworCQkJCSAgICAiIG9uIGRpc2Nvbm5lY3RlZCBjb21tYW5kIGNoYWluXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNyAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNyAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIApAQCAtODQxLDUyICs4NDgsNTIgQEAKIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBFcnJvciBjb3JyZWN0aW9uIGNvZGUgIgotCQkJCSAgICAiaGFyZHdhcmUgZmF1bHQiKTsKKwkJCQkgICAgImhhcmR3YXJlIGZhdWx0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gVW5leHBlY3RlZCBlbmQgb3BlcmF0aW9uICIKLQkJCQkgICAgInJlc3BvbnNlIGNvZGUiKTsKKwkJCQkgICAgInJlc3BvbnNlIGNvZGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBFbmQgb3BlcmF0aW9uIHdpdGggdHJhbnNmZXIgIgotCQkJCSAgICAiY291bnQgbm90IHplcm8iKTsKKwkJCQkgICAgImNvdW50IG5vdCB6ZXJvXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gRW5kIG9wZXJhdGlvbiB3aXRoIHRyYW5zZmVyICIKLQkJCQkgICAgImNvdW50IHplcm8iKTsKKwkJCQkgICAgImNvdW50IHplcm9cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBEUFMgY2hlY2tzIGFmdGVyIGEgc3lzdGVtICIKLQkJCQkgICAgInJlc2V0IG9yIHNlbGVjdGl2ZSByZXNldCIpOworCQkJCSAgICAicmVzZXQgb3Igc2VsZWN0aXZlIHJlc2V0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA4IC0gRFBTIGNhbm5vdCBiZSBmaWxsZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA4IC0gRFBTIGNhbm5vdCBiZSBmaWxsZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBTaG9ydCBidXN5IHRpbWUtb3V0IGR1cmluZyAiCi0JCQkJICAgICJkZXZpY2Ugc2VsZWN0aW9uIik7CisJCQkJICAgICJkZXZpY2Ugc2VsZWN0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gREFTRCBjb250cm9sbGVyIGZhaWxlZCB0byAiCi0JCQkJICAgICJzZXQgb3IgcmVzZXQgdGhlIGxvbmcgYnVzeSBsYXRjaCIpOworCQkJCSAgICAic2V0IG9yIHJlc2V0IHRoZSBsb25nIGJ1c3kgbGF0Y2hcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDggLSBObyBpbnRlcnJ1cHRpb24gZnJvbSBkZXZpY2UgIgotCQkJCSAgICAiZHVyaW5nIGEgY29tbWFuZCBjaGFpbiIpOworCQkJCSAgICAiZHVyaW5nIGEgY29tbWFuZCBjaGFpblxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDggLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDggLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTg5NSw5NyArOTAyLDEwMCBAQAogCQljYXNlIDB4MDA6CiAJCQlicmVhazsJLyogTm8gTWVzc2FnZSAqLwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA5IC0gRGV2aWNlIGNoZWNrLTIgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA5IC0gRGV2aWNlIGNoZWNrLTIgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDkgLSBIZWFkIGFkZHJlc3MgZGlkIG5vdCBjb21wYXJlIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgOSAtIEhlYWQgYWRkcmVzcyBkaWQgbm90ICIKKwkJCQkgImNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDkgLSBUcmFjayBwaHlzaWNhbCBhZGRyZXNzIGRpZCAiCi0JCQkJICAgICJub3QgY29tcGFyZSB3aGlsZSBvcmllbnRlZCIpOworCQkJCSAgICAibm90IGNvbXBhcmUgd2hpbGUgb3JpZW50ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDkgLSBDeWxpbmRlciBhZGRyZXNzIGRpZCBub3QgIgotCQkJCSAgICAiY29tcGFyZSIpOworCQkJCSAgICAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDkgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDkgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4RjA6CQkvKiBGb3JtYXQgRiAtIENhY2hlIFN0b3JhZ2UgQ2hlY2tzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBPcGVyYXRpb24gVGVybWluYXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBPcGVyYXRpb24gVGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBQcm9jZXNzaW5nIEVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBQcm9jZXNzaW5nIEVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGUgb3Igbm9udm9sYXRpbGUgc3RvcmFnZSAiCi0JCQkJICAgICJlcXVpcG1lbnQgZmFpbHVyZSIpOworCQkJCSAgICAiZXF1aXBtZW50IGZhaWx1cmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHRlcm1pbmF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyB0ZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGUgZmFzdCB3cml0ZSBhY2Nlc3Mgbm90ICIKLQkJCQkgICAgImF1dGhvcml6ZWQiKTsKKwkJCQkgICAgImF1dGhvcml6ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBUcmFjayBmb3JtYXQgaW5jb3JyZWN0Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFRyYWNrIGZvcm1hdCBpbmNvcnJlY3RcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHJlaW5pdGlhdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgcmVpbml0aWF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBOb252b2xhdGlsZSBzdG9yYWdlICIKLQkJCQkgICAgInRlcm1pbmF0ZWQiKTsKKwkJCQkgICAgInRlcm1pbmF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBWb2x1bWUgaXMgc3VzcGVuZGVkIGR1cGxleCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBWb2x1bWUgaXMgc3VzcGVuZGVkIGR1cGxleFxuIik7CiAJCQkvKiBjYWxsIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyAoRUVSKSAqLwogCQkJZGFzZF9lZXJfd3JpdGUoZGV2aWNlLCBlcnAtPnJlZmVycywKIAkJCQkgICAgICAgREFTRF9FRVJfUFBSQ1NVU1BFTkQpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBTdWJzeXN0ZW0gc3RhdHVzIGNvbm5vdCBiZSAiCi0JCQkJICAgICJkZXRlcm1pbmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIFN1YnN5c3RlbSBzdGF0dXMgY2Fubm90IGJlICIKKwkJCQkgICAgImRldGVybWluZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHN0YXR1cyByZXNldCB0byAiCi0JCQkJICAgICJkZWZhdWx0Iik7CisJCQkJICAgICJkZWZhdWx0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gREFTRCBGYXN0IFdyaXRlIGluaGliaXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBEQVNEIEZhc3QgV3JpdGUgaW5oaWJpdGVkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRCAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRCAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAotCWRlZmF1bHQ6CS8qIHVua25vd24gbWVzc2FnZSBmb3JtYXQgLSBzaG91bGQgbm90IGhhcHBlbiAqLwotCSAgICAgICAgREVWX01FU1NBR0UgKEtFUk5fV0FSTklORywgZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBtZXNzYWdlIGZvcm1hdCAlMDJ4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX2Zvcm1hdCk7CisJZGVmYXVsdDoJLyogdW5rbm93biBtZXNzYWdlIGZvcm1hdCAtIHNob3VsZCBub3QgaGFwcGVuCisJCQkgICBpbnRlcm5hbCBlcnJvciAwMyAtIHVua25vd24gbWVzc2FnZSBmb3JtYXQgKi8KKwkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMDMgJXgwMiIsIG1zZ19mb3JtYXQpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJICJyZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJYnJlYWs7CiAJfQkJCS8qIGVuZCBzd2l0Y2ggbWVzc2FnZSBmb3JtYXQgKi8KIApAQCAtMTAxNSw3ICsxMDI1LDcgQEAKIAkvKiBlbnYgZGF0YSBwcmVzZW50IChBQ1RJT04gMTAgLSByZXRyeSBzaG91bGQgd29yaykgKi8KIAlpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ29tbWFuZCBSZWplY3QgLSBlbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOwogCiAJCWRhc2RfMzk5MF9oYW5kbGVfZW52X2RhdGEoZXJwLCBzZW5zZSk7CkBAIC0xMDIzLDkgKzEwMzMsMTAgQEAKIAkJZXJwLT5yZXRyaWVzID0gNTsKIAogCX0gZWxzZSB7Ci0JCS8qIGZhdGFsIGVycm9yIC0gIHNldCBzdGF0dXMgdG8gRkFJTEVEICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvbW1hbmQgUmVqZWN0IC0gRmF0YWwgZXJyb3IiKTsKKwkJLyogZmF0YWwgZXJyb3IgLSAgc2V0IHN0YXR1cyB0byBGQUlMRUQKKwkJICAgaW50ZXJuYWwgZXJyb3IgMDkgLSBDb21tYW5kIFJlamVjdCAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwOSIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQpAQCAtMTA2MSw3ICsxMDcyLDcgQEAKIAl9IGVsc2UgewogCiAJCS8qIGlzc3VlIGEgbWVzc2FnZSBhbmQgd2FpdCBmb3IgJ2RldmljZSByZWFkeScgaW50ZXJydXB0ICovCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJidXMgb3V0IHBhcml0eSBlcnJvciBvciBCT1BDIHJlcXVlc3RlZCBieSAiCiAJCQkgICAgImNoYW5uZWwiKTsKIApAQCAtMTA5MywyMSArMTEwNCwxOSBAQAogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2VxdWlwX2NoZWNrOwogCiAJaWYgKHNlbnNlWzFdICYgU05TMV9XUklURV9JTkhJQklURUQpIHsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJXcml0ZSBpbmhpYml0ZWQgcGF0aCBlbmNvdW50ZXJlZFxuIik7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJXcml0ZSBpbmhpYml0ZWQgcGF0aCBlbmNvdW50ZXJlZCIpOwotCi0JCS8qIHZhcnkgcGF0aCBvZmZsaW5lICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlBhdGggc2hvdWxkIGJlIHZhcmllZCBvZmYtbGluZS4gIgotCQkJICAgICJUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgXG4gLSBwbGVhc2UgcmVwb3J0ICIKLQkJCSAgICAidG8gbGludXgzOTBAZGUuaWJtLmNvbSIpOworCQkvKiB2YXJ5IHBhdGggb2ZmbGluZQorCQkgICBpbnRlcm5hbCBlcnJvciAwNCAtIFBhdGggc2hvdWxkIGJlIHZhcmllZCBvZmYtbGluZS4qLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwNCIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEoZXJwKTsKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiRXF1aXBtZW50IENoZWNrIC0gIiAiZW52aXJvbm1lbnRhbCBkYXRhIHByZXNlbnQiKTsKIAogCQlkYXNkXzM5OTBfaGFuZGxlX2Vudl9kYXRhKGVycCwgc2Vuc2UpOwpAQCAtMTExNiw3ICsxMTI1LDcgQEAKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMV0gJiBTTlMxX1BFUk1fRVJSKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkVxdWlwbWVudCBDaGVjayAtIHJldHJ5IGV4aGF1c3RlZCBvciAiCiAJCQkgICAgInVuZGVzaXJhYmxlIik7CiAKQEAgLTExMjUsNyArMTEzNCw3IEBACiAJfSBlbHNlIHsKIAkJLyogYWxsIG90aGVyIGVxdWlwbWVudCBjaGVja3MgLSBBY3Rpb24gNSAqLwogCQkvKiByZXN0IGlzIGRvbmUgd2hlbiByZXRyaWVzID09IDAgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkVxdWlwbWVudCBjaGVjayBvciBwcm9jZXNzaW5nIGVycm9yIik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNShlcnApOwpAQCAtMTE1Niw5ICsxMTY1LDkgQEAKIAlpZiAoc2Vuc2VbMl0gJiBTTlMyX0NPUlJFQ1RBQkxFKSB7CS8qIGNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgKi8KIAogCQkvKiBpc3N1ZSBtZXNzYWdlIHRoYXQgdGhlIGRhdGEgaGFzIGJlZW4gY29ycmVjdGVkICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJZGV2X2VtZXJnKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCSAgICAiRGF0YSByZWNvdmVyZWQgZHVyaW5nIHJldHJ5IHdpdGggUENJICIKLQkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmUiKTsKKwkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmVcbiIpOwogCiAJCS8qIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaW4gTGludXggKi8KIAkJcGFuaWMoIk5vIHdheSB0byBpbmZvcm0gYXBwbGljYXRpb24gYWJvdXQgdGhlIHBvc3NpYmx5ICIKQEAgLTExNjYsNyArMTE3NSw3IEBACiAKIAl9IGVsc2UgaWYgKHNlbnNlWzJdICYgU05TMl9FTlZfREFUQV9QUkVTRU5UKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlVuY29ycmVjdGFibGUgZGF0YSBjaGVjayByZWNvdmVyZWQgc2Vjb25kYXJ5ICIKIAkJCSAgICAiYWRkciBvZiBkdXBsZXggcGFpciIpOwogCkBAIC0xMTc0LDcgKzExODMsNyBAQAogCiAJfSBlbHNlIGlmIChzZW5zZVsxXSAmIFNOUzFfUEVSTV9FUlIpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5jb3JyZWN0YWJsZSBkYXRhIGNoZWNrIHdpdGggaW50ZXJuYWwgIgogCQkJICAgICJyZXRyeSBleGhhdXN0ZWQiKTsKIApAQCAtMTE4Miw3ICsxMTkxLDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIGFsbCBvdGhlciBkYXRhIGNoZWNrcyAqLwotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVW5jb3JyZWN0YWJsZSBkYXRhIGNoZWNrIHdpdGggcmV0cnkgY291bnQgIgogCQkJICAgICJleGhhdXN0ZWQuLi4iKTsKIApAQCAtMTIxMiw3ICsxMjIxLDcgQEAKIAogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX292ZXJydW47CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgIk92ZXJydW4gLSBzZXJ2aWNlIG92ZXJydW4gb3Igb3ZlcnJ1biIKIAkJICAgICIgZXJyb3IgcmVxdWVzdGVkIGJ5IGNoYW5uZWwiKTsKIApAQCAtMTI0Myw3ICsxMjUyLDcgQEAKIAogCWlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJUcmFjayBmb3JtYXQgZXJyb3Igd2hlbiBkZXN0YWdpbmcgb3IgIgogCQkJICAgICJzdGFnaW5nIGRhdGEiKTsKIApAQCAtMTI1Miw4ICsxMjYxLDEwIEBACiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBzZW5zZSk7CiAKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJJbnZhbGlkIFRyYWNrIEZvcm1hdCAtIEZhdGFsIGVycm9yIik7CisJCS8qIGludGVybmFsIGVycm9yIDA2IC0gVGhlIHRyYWNrIGZvcm1hdCBpcyBub3QgdmFsaWQqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkicmVhc29uPSVzXG4iLCAiMDYiKTsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCX0KQEAgLTEyNzksOCArMTI5MCw4IEBACiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGRlZmF1bHRfZXJwLT5zdGFydGRldjsKIAotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCSAgICAiRW5kLW9mLUN5bGluZGVyIC0gbXVzdCBuZXZlciBoYXBwZW4iKTsKKwlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJIlRoZSBjeWxpbmRlciBkYXRhIGZvciBhY2Nlc3NpbmcgdGhlIERBU0QgaXMgaW5jb25zaXN0ZW50XG4iKTsKIAogCS8qIGltcGxlbWVudCBhY3Rpb24gNyAtIEJVRyAqLwogCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CkBAIC0xMzA2LDcgKzEzMTcsNyBAQAogCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfZW52X2RhdGE7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsICJFbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOworCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwgIkVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CiAKIAlkYXNkXzM5OTBfaGFuZGxlX2Vudl9kYXRhKGVycCwgc2Vuc2UpOwogCkBAIC0xMzM5LDggKzEzNTAsOCBAQAogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBkZWZhdWx0X2VycC0+c3RhcnRkZXY7CiAKLQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkgICAgIk5vIFJlY29yZCBGb3VuZCAtIEZhdGFsIGVycm9yICIpOworCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgICAgIlRoZSBzcGVjaWZpZWQgcmVjb3JkIHdhcyBub3QgZm91bmRcbiIpOwogCiAJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKIApAQCAtMTM2NSw3ICsxMzc2LDggQEAKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsICJGaWxlIFByb3RlY3RlZCIpOworCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIG9mICIKKwkJImEgaGFyZHdhcmUgZXJyb3JcbiIpOwogCiAJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAKQEAgLTEzOTQsNyArMTQwNiw3IEBACiAJaWYgKGNxci0+YmxvY2sgJiYKIAkgICAgKGNxci0+YmxvY2stPmJhc2UgIT0gY3FyLT5zdGFydGRldikpIHsKIAkJaWYgKGNxci0+c3RhcnRkZXYtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGNxci0+c3RhcnRkZXYsCisJCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGNxci0+c3RhcnRkZXYsCiAJCQkJICAgICJFUlAgb24gYWxpYXMgZGV2aWNlIGZvciByZXF1ZXN0ICVwLCIKIAkJCQkgICAgIiByZWNvdmVyIG9uIGJhc2UgZGV2aWNlICVzIiwgY3FyLAogCQkJCSAgICBkZXZfbmFtZSgmY3FyLT5ibG9jay0+YmFzZS0+Y2Rldi0+ZGV2KSk7CkBAIC0xNTExLDcgKzE1MjMsNyBAQAogCWVycC0+cmV0cmllcyA9IDI1NjsKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMTBfMzI7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsICJQZXJmb3JtIGxvZ2dpbmcgcmVxdWVzdGVkIik7CisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLCAiUGVyZm9ybSBsb2dnaW5nIHJlcXVlc3RlZCIpOwogCiAJcmV0dXJuIGVycDsKIApAQCAtMTU0OSw3ICsxNTYxLDcgQEAKIAljaGFyICpMT19kYXRhOwkJLyogTE9fZWNrZF9kYXRhX3QgKi8KIAlzdHJ1Y3QgY2N3MSAqY2N3LCAqb2xkY2N3OwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJXcml0ZSBub3QgZmluaXNoZWQgYmVjYXVzZSBvZiB1bmV4cGVjdGVkIGNvbmRpdGlvbiIpOwogCiAJZGVmYXVsdF9lcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMUJfMzI7CkBAIC0xNTYxLDEwICsxNTczLDE2IEBACiAJCWNxciA9IGNxci0+cmVmZXJzOwogCX0KIAorCWlmIChzY3N3X2lzX3RtKCZjcXItPmlyYi5zY3N3KSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiMzIgYml0IHNlbnNlLCBhY3Rpb24gMUIgaXMgbm90IGRlZmluZWQiCisJCQkgICAgICAiIGluIHRyYW5zcG9ydCBtb2RlIC0ganVzdCByZXRyeSIpOworCQlyZXR1cm4gZGVmYXVsdF9lcnA7CisJfQorCiAJLyogZm9yIGltcHJlY2lzZSBlbmRpbmcganVzdCBkbyBkZWZhdWx0IGVycCAqLwogCWlmIChzZW5zZVsxXSAmIDB4MDEpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiSW1wcmVjaXNlIGVuZGluZyBpcyBzZXQgLSBqdXN0IHJldHJ5Iik7CiAKIAkJcmV0dXJuIGRlZmF1bHRfZXJwOwpAQCAtMTU3NSw4ICsxNTkzLDcgQEAKIAljcGEgPSBkZWZhdWx0X2VycC0+cmVmZXJzLT5pcmIuc2Nzdy5jbWQuY3BhOwogCiAJaWYgKGNwYSA9PSAwKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWRkcmVzcyBvZiB0aGUgQ0NXICIKIAkJCSAgICAidG8gYmUgcmVzdGFydGVkIik7CiAKQEAgLTE1OTAsNyArMTYwNyw5IEBACiAJCQkJICAgICBzaXplb2Yoc3RydWN0IExPX2Vja2RfZGF0YSksIGRldmljZSk7CiAKIAlpZiAoSVNfRVJSKGVycCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBFUlAiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMDEgLSBVbmFibGUgdG8gYWxsb2NhdGUgRVJQICovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjAxIik7CiAJCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfQogCkBAIC0xNTk5LDcgKzE2MTgsNyBAQAogCW9sZGNjdyA9IGNxci0+Y3BhZGRyOwogCWlmIChvbGRjY3ctPmNtZF9jb2RlID09IERBU0RfRUNLRF9DQ1dfUEZYKSB7CiAJCVBGWF9kYXRhID0gY3FyLT5kYXRhOwotCQltZW1jcHkoREVfZGF0YSwgJlBGWF9kYXRhLT5kZWZpbmVfZXh0ZW5kLAorCQltZW1jcHkoREVfZGF0YSwgJlBGWF9kYXRhLT5kZWZpbmVfZXh0ZW50LAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpKTsKIAl9IGVsc2UKIAkJbWVtY3B5KERFX2RhdGEsIGNxci0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpKTsKQEAgLTE2MDgsMTAgKzE2MjcsNyBAQAogCUxPX2RhdGEgPSBlcnAtPmRhdGEgKyBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSk7CiAKIAlpZiAoKHNlbnNlWzNdID09IDB4MDEpICYmIChMT19kYXRhWzFdICYgMHgwMSkpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJCVUcgLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIik7Ci0KKwkJLyogc2hvdWxkIG5vdCAqLwogCQlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGRlZmF1bHRfZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCX0KIApAQCAtMTcwMSw3ICsxNzE3LDcgQEAKIAljaGFyICpMT19kYXRhOwkJLyogc3RydWN0IExPX2Vja2RfZGF0YSAqLwogCXN0cnVjdCBjY3cxICpjY3c7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgIldyaXRlIG5vdCBmaW5pc2hlZCBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQgY29uZGl0aW9uIgogCQkgICAgIiAtIGZvbGxvdyBvbiIpOwogCkBAIC0xNzEyLDEwICsxNzI4LDE2IEBACiAJCWNxciA9IGNxci0+cmVmZXJzOwogCX0KIAorCWlmIChzY3N3X2lzX3RtKCZjcXItPmlyYi5zY3N3KSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiMzIgYml0IHNlbnNlLCBhY3Rpb24gMUIsIHVwZGF0ZSwiCisJCQkgICAgICAiIGluIHRyYW5zcG9ydCBtb2RlIC0ganVzdCByZXRyeSIpOworCQlyZXR1cm4gcHJldmlvdXNfZXJwOworCX0KKwogCS8qIGZvciBpbXByZWNpc2UgZW5kaW5nIGp1c3QgZG8gZGVmYXVsdCBlcnAgKi8KIAlpZiAoc2Vuc2VbMV0gJiAweDAxKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkltcHJlY2lzZSBlbmRpbmcgaXMgc2V0IC0ganVzdCByZXRyeSIpOwogCiAJCXByZXZpb3VzX2VycC0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwpAQCAtMTcyOCwxMCArMTc1MCwxMCBAQAogCWNwYSA9IHByZXZpb3VzX2VycC0+aXJiLnNjc3cuY21kLmNwYTsKIAogCWlmIChjcGEgPT0gMCkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiVW5hYmxlIHRvIGRldGVybWluZSBhZGRyZXNzIG9mIHRoZSBDQ1cgIgotCQkJICAgICJ0byBiZSByZXN0YXJ0ZWQiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMDIgLQorCQkgICBVbmFibGUgdG8gZGV0ZXJtaW5lIGFkZHJlc3Mgb2YgdGhlIENDVyB0byBiZSByZXN0YXJ0ZWQgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDIiKTsKIAogCQlwcmV2aW91c19lcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIApAQCAtMTc0NCwxMCArMTc2Niw3IEBACiAJTE9fZGF0YSA9IGVycC0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKIAogCWlmICgoc2Vuc2VbM10gPT0gMHgwMSkgJiYgKExPX2RhdGFbMV0gJiAweDAxKSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkJVRyAtIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iKTsKLQorCQkvKiBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlwcmV2aW91c19lcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAogCQlyZXR1cm4gcHJldmlvdXNfZXJwOwpAQCAtMTkzNSwxNCArMTk1NCwxMyBAQAogCiAJaWYgKChzZW5zZVsyNV0gJiBEQVNEX1NFTlNFX0JJVF8xKSAmJiAoc2Vuc2VbMjZdICYgREFTRF9TRU5TRV9CSVRfMikpIHsKIAotCQkvKiBzZXQgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZSB0aGVuIHJlc3RhcnQgKi8KKwkJLyogc2V0IHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUgdGhlbiByZXN0YXJ0CisJCSAgIGludGVybmFsIGVycm9yIDA1IC0gU2V0IGRldmljZSB0byBzdXNwZW5kZWQgZHVwbGV4IHN0YXRlCisJCSAgIHNob3VsZCBiZSBkb25lICovCiAJCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKLQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJTZXQgZGV2aWNlIHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUgc2hvdWxkIGJlICIKLQkJCSAgICAiZG9uZSFcbiIKLQkJCSAgICAiVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0IChmb3IgY29tcG91bmQgRVJQKSIKLQkJCSAgICAiIC0gcGxlYXNlIHJlcG9ydCB0byBsaW51eDM5MEBkZS5pYm0uY29tIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSJyZWFzb249JXNcbiIsICIwNSIpOwogCiAJfQogCkBAIC0yMDEyLDE1ICsyMDMwLDE0IEBACiB7CiAJLyogcHJpbnQgbWVzc2FnZSBhY2NvcmRpbmcgdG8gbG9nIG9yIG1lc3NhZ2UgdG8gb3BlcmF0b3IgbW9kZSAqLwogCWlmICgoc2Vuc2VbMjRdICYgREFTRF9TSU1fTVNHX1RPX09QKSB8fCAoc2Vuc2VbMV0gJiAweDEwKSkgewotCiAJCS8qIHByaW50IFNJTSBTUkMgZnJvbSBSZWZDb2RlICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICJTSU0gLSBTUkM6ICIKLQkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCIsIHNlbnNlWzIyXSwKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJTSU0gLSBTUkM6ICIKKwkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeFxuIiwgc2Vuc2VbMjJdLAogCQkJICAgIHNlbnNlWzIzXSwgc2Vuc2VbMTFdLCBzZW5zZVsxMl0pOwogCX0gZWxzZSBpZiAoc2Vuc2VbMjRdICYgREFTRF9TSU1fTE9HKSB7CiAJCS8qIHByaW50IFNJTSBTUkMgUmVmY29kZSAqLwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIlNJTSAtIFNSQzogIgotCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4Iiwgc2Vuc2VbMjJdLAorCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJsb2cgU0lNIC0gU1JDOiAiCisJCQkgICAgIiUwMnglMDJ4JTAyeCUwMnhcbiIsIHNlbnNlWzIyXSwKIAkJCSAgICBzZW5zZVsyM10sIHNlbnNlWzExXSwgc2Vuc2VbMTJdKTsKIAl9CiB9CkBAIC0yMDYzLDE0ICsyMDgwLDE0IEBACiAJCXN3aXRjaCAoc2Vuc2VbMjVdKSB7CiAKIAkJY2FzZSAweDAwOgkvKiBzdWNjZXNzIC0gdXNlIGRlZmF1bHQgRVJQIGZvciByZXRyaWVzICovCi0JCSAgICAgICAgREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIkVSUCBjYWxsZWQgZm9yIHN1Y2Nlc3NmdWwgcmVxdWVzdCIKIAkJCQkgICAgIiAtIGp1c3QgcmV0cnkiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwMToJLyogZmF0YWwgZXJyb3IgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJSZXRyeSBub3QgcmVjb21tZW5kZWQgLSBGYXRhbCBlcnJvciIpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJFUlAgZmFpbGVkIGZvciB0aGUgREFTRFxuIik7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTIwODAsMTMgKzIwOTcsMTAgQEAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfaW50X3JlcShlcnApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAweDBGOiAgLyogbGVuZ3RoIG1pc21hdGNoIGR1cmluZyB1cGRhdGUgd3JpdGUgY29tbWFuZCAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgInVwZGF0ZSB3cml0ZSBjb21tYW5kIGVycm9yIC0gc2hvdWxkIG5vdCAiCi0JCQkJICAgICJoYXBwZW47XG4iCi0JCQkJICAgICJQbGVhc2Ugc2VuZCB0aGlzIG1lc3NhZ2UgdG9nZXRoZXIgd2l0aCAiCi0JCQkJICAgICJ0aGUgYWJvdmUgc2Vuc2UgZGF0YSB0byBsaW51eDM5MEBkZS4iCi0JCQkJICAgICJpYm0uY29tIik7CisJCWNhc2UgMHgwRjogIC8qIGxlbmd0aCBtaXNtYXRjaCBkdXJpbmcgdXBkYXRlIHdyaXRlIGNvbW1hbmQKKwkJCSAgICAgICBpbnRlcm5hbCBlcnJvciAwOCAtIHVwZGF0ZSB3cml0ZSBjb21tYW5kIGVycm9yKi8KKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlICIKKwkJCQkiREFTRCBkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwOCIpOwogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCQkJYnJlYWs7CkBAIC0yMDk1LDEzICsyMTA5LDEyIEBACiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xMF8zMihlcnAsIHNlbnNlKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMHgxNToJLyogbmV4dCB0cmFjayBvdXRzaWRlIGRlZmluZWQgZXh0ZW5kICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAibmV4dCB0cmFjayBvdXRzaWRlIGRlZmluZWQgZXh0ZW5kIC0gIgotCQkJCSAgICAic2hvdWxkIG5vdCBoYXBwZW47XG4iCi0JCQkJICAgICJQbGVhc2Ugc2VuZCB0aGlzIG1lc3NhZ2UgdG9nZXRoZXIgd2l0aCAiCi0JCQkJICAgICJ0aGUgYWJvdmUgc2Vuc2UgZGF0YSB0byBsaW51eDM5MEBkZS4iCi0JCQkJICAgICJpYm0uY29tIik7CisJCWNhc2UgMHgxNToJLyogbmV4dCB0cmFjayBvdXRzaWRlIGRlZmluZWQgZXh0ZW5kCisJCQkJICAgaW50ZXJuYWwgZXJyb3IgMDcgLSBUaGUgbmV4dCB0cmFjayBpcyBub3QKKwkJCQkgICB3aXRoaW4gdGhlIGRlZmluZWQgc3RvcmFnZSBleHRlbnQgKi8KKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkJInJlYXNvbj0lc1xuIiwgIjA3Iik7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTIxMTIsOSArMjEyNSw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MUM6CS8qIGludmFsaWQgZGF0YSAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X2VtZXJnKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkRhdGEgcmVjb3ZlcmVkIGR1cmluZyByZXRyeSB3aXRoIFBDSSAiCi0JCQkJICAgICJmZXRjaCBtb2RlIGFjdGl2ZSIpOworCQkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmVcbiIpOwogCiAJCQkvKiBub3QgcG9zc2libGUgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uIGluIExpbnV4ICovCiAJCQlwYW5pYwpAQCAtMjEyMyw3ICsyMTM2LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxRDoJLyogc3RhdGUtY2hhbmdlIHBlbmRpbmcgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIkEgU3RhdGUgY2hhbmdlIHBlbmRpbmcgY29uZGl0aW9uIGV4aXN0cyAiCiAJCQkJICAgICJmb3IgdGhlIHN1YnN5c3RlbSBvciBkZXZpY2UiKTsKIApAQCAtMjEzMSw3ICsyMTQ0LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgxRToJLyogYnVzeSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiQnVzeSBjb25kaXRpb24gZXhpc3RzICIKIAkJCQkgICAgImZvciB0aGUgc3Vic3lzdGVtIG9yIGRldmljZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNChlcnAsIHNlbnNlKTsKQEAgLTIxNzEsOSArMjE4NCw5IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwogCi0JaWYgKGVycC0+cmVmZXJzLT5pcmIuc2Nzdy5jbWQuY3N0YXQgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsKKwlpZiAoc2Nzd19jc3RhdCgmZXJwLT5yZWZlcnMtPmlyYi5zY3N3KSAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISwogCQkJCQkgICB8IFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJjaGFubmVsIG9yIGludGVyZmFjZSBjb250cm9sIGNoZWNrIik7CiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBOVUxMKTsKIAl9CkBAIC0yMTkzLDIxICsyMjA2LDIzIEBACiAgKiAgIGVycF9uZXcJCWNvbnRlbnMgd2FzIHBvc3NpYmx5IG1vZGlmaWVkCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKLWRhc2RfMzk5MF9lcnBfaW5zcGVjdChzdHJ1Y3QgZGFzZF9jY3dfcmVxICogZXJwKQorZGFzZF8zOTkwX2VycF9pbnNwZWN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKmVycCkKIHsKIAogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycF9uZXcgPSBOVUxMOwotCS8qIHNlbnNlIGRhdGEgYXJlIGxvY2F0ZWQgaW4gdGhlIHJlZmVycyByZWNvcmQgb2YgdGhlICovCi0JLyogYWxyZWFkeSBzZXQgdXAgbmV3IEVSUCAhCQkJICAgICAgKi8KLQljaGFyICpzZW5zZSA9IGVycC0+cmVmZXJzLT5pcmIuZWN3OworCWNoYXIgKnNlbnNlOwogCiAJLyogaWYgdGhpcyBwcm9ibGVtIG9jY3VyZWQgb24gYW4gYWxpYXMgcmV0cnkgb24gYmFzZSAqLwogCWVycF9uZXcgPSBkYXNkXzM5OTBfZXJwX2luc3BlY3RfYWxpYXMoZXJwKTsKIAlpZiAoZXJwX25ldykKIAkJcmV0dXJuIGVycF9uZXc7CiAKLQkvKiBjaGVjayBpZiBubyBjb25jdXJyZW50IHNlbnMgaXMgYXZhaWxhYmxlICovCi0JaWYgKCFlcnAtPnJlZmVycy0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQorCS8qIHNlbnNlIGRhdGEgYXJlIGxvY2F0ZWQgaW4gdGhlIHJlZmVycyByZWNvcmQgb2YgdGhlCisJICogYWxyZWFkeSBzZXQgdXAgbmV3IEVSUCAhCisJICogY2hlY2sgaWYgY29uY3VycmVudCBzZW5zIGlzIGF2YWlsYWJsZQorCSAqLworCXNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoJmVycC0+cmVmZXJzLT5pcmIpOworCWlmICghc2Vuc2UpCiAJCWVycF9uZXcgPSBkYXNkXzM5OTBfZXJwX2NvbnRyb2xfY2hlY2soZXJwKTsKIAkvKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIDI0IGFuZCAzMiBieXRlIHNlbnNlIGRhdGEgKi8KIAllbHNlIGlmIChzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSB7CkBAIC0yMjMxLDcgKzIyNDYsMTEgQEAKICAqIERFU0NSSVBUSU9OCiAgKiAgIFRoaXMgZnVudGlvbiBhZGRzIGFuIGFkZGl0aW9uYWwgcmVxdWVzdCBibG9jayAoRVJQKSB0byB0aGUgaGVhZCBvZgogICogICB0aGUgZ2l2ZW4gY3FyIChvciBlcnApLgotICogICBUaGlzIGVycCBpcyBpbml0aWFsaXplZCBhcyBhbiBkZWZhdWx0IGVycCAocmV0cnkgVElDKQorICogICBGb3IgYSBjb21tYW5kIG1vZGUgY3FyIHRoZSBlcnAgaXMgaW5pdGlhbGl6ZWQgYXMgYW4gZGVmYXVsdCBlcnAKKyAqICAgKHJldHJ5IFRJQykuCisgKiAgIEZvciB0cmFuc3BvcnQgbW9kZSB3ZSBtYWtlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgVENXIChwb2ludHMgdG8KKyAqICAgdGhlIG9yaWdpbmFsIFRDQ0IsIFRJREFMcywgZXRjLikgYnV0IGdpdmUgaXQgYSBmcmVzaAorICogICBUU0Igc28gdGhlIG9yaWdpbmFsIHNlbnNlIGRhdGEgd2lsbCBub3QgYmUgY2hhbmdlZC4KICAqCiAgKiBQQVJBTUVURVIKICAqICAgY3FyCQloZWFkIG9mIHRoZSBjdXJyZW50IEVSUC1jaGFpbiAob3Igc2luZ2xlIGNxciBpZgpAQCAtMjIzOSwyNSArMjI1OCwzNSBAQAogICogUkVUVVJOIFZBTFVFUwogICogICBlcnAJCXBvaW50ZXIgdG8gbmV3IEVSUC1jaGFpbiBoZWFkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKLWRhc2RfMzk5MF9lcnBfYWRkX2VycChzdHJ1Y3QgZGFzZF9jY3dfcmVxICogY3FyKQorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfMzk5MF9lcnBfYWRkX2VycChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIpCiB7CiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGNxci0+c3RhcnRkZXY7CiAJc3RydWN0IGNjdzEgKmNjdzsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnA7CisJaW50IGNwbGVuZ3RoLCBkYXRhc2l6ZTsKKwlzdHJ1Y3QgdGN3ICp0Y3c7CisJc3RydWN0IHRzYiAqdHNiOworCisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJY3BsZW5ndGggPSAwOworCQlkYXRhc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGN3KSArIHNpemVvZihzdHJ1Y3QgdHNiKTsKKwl9IGVsc2UgeworCQljcGxlbmd0aCA9IDI7CisJCWRhdGFzaXplID0gMDsKKwl9CiAKIAkvKiBhbGxvY2F0ZSBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKi8KLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnA7Ci0KLQllcnAgPSBkYXNkX2FsbG9jX2VycF9yZXF1ZXN0KChjaGFyICopICZjcXItPm1hZ2ljLCAyLCAwLCBkZXZpY2UpOworCWVycCA9IGRhc2RfYWxsb2NfZXJwX3JlcXVlc3QoKGNoYXIgKikgJmNxci0+bWFnaWMsCisJCQkJICAgICBjcGxlbmd0aCwgZGF0YXNpemUsIGRldmljZSk7CiAJaWYgKElTX0VSUihlcnApKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNxci0+cmV0cmllcyA8PSAwKSB7Ci0JCSAgICAgICAgREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCByZXF1ZXN0Iik7CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+c3RvcGNsayA9IGdldF9jbG9jayAoKTsKIAkJfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX0VSUiwgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBFUlAgcmVxdWVzdCAiCiAJCQkJICAgICAiKCVpIHJldHJpZXMgbGVmdCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+cmV0cmllcyk7CkBAIC0yMjY2LDEzICsyMjk1LDI0IEBACiAJCXJldHVybiBjcXI7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSByZXF1ZXN0IHdpdGggZGVmYXVsdCBUSUMgdG8gY3VycmVudCBFUlAvQ1FSICovCi0JY2N3ID0gZXJwLT5jcGFkZHI7Ci0JY2N3LT5jbWRfY29kZSA9IENDV19DTURfTk9PUDsKLQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfQ0M7Ci0JY2N3Kys7Ci0JY2N3LT5jbWRfY29kZSA9IENDV19DTURfVElDOwotCWNjdy0+Y2RhICAgICAgPSAobG9uZykoY3FyLT5jcGFkZHIpOworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCS8qIG1ha2UgYSBzaGFsbG93IGNvcHkgb2YgdGhlIG9yaWdpbmFsIHRjdyBidXQgc2V0IG5ldyB0c2IgKi8KKwkJZXJwLT5jcG1vZGUgPSAxOworCQllcnAtPmNwYWRkciA9IGVycC0+ZGF0YTsKKwkJdGN3ID0gZXJwLT5kYXRhOworCQl0c2IgPSAoc3RydWN0IHRzYiAqKSAmdGN3WzFdOworCQkqdGN3ID0gKigoc3RydWN0IHRjdyAqKWNxci0+Y3BhZGRyKTsKKwkJdGN3LT50c2IgPSAobG9uZyl0c2I7CisJfSBlbHNlIHsKKwkJLyogaW5pdGlhbGl6ZSByZXF1ZXN0IHdpdGggZGVmYXVsdCBUSUMgdG8gY3VycmVudCBFUlAvQ1FSICovCisJCWNjdyA9IGVycC0+Y3BhZGRyOworCQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9OT09QOworCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfQ0M7CisJCWNjdysrOworCQljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9USUM7CisJCWNjdy0+Y2RhICAgICAgPSAobG9uZykoY3FyLT5jcGFkZHIpOworCX0KKwogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FkZF9lcnA7CiAJZXJwLT5yZWZlcnMgICA9IGNxcjsKIAllcnAtPnN0YXJ0ZGV2ID0gZGV2aWNlOwpAQCAtMjI4Miw3ICsyMzIyLDYgQEAKIAllcnAtPmV4cGlyZXMgID0gMDsKIAllcnAtPnJldHJpZXMgID0gMjU2OwogCWVycC0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKLQogCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogCiAJcmV0dXJuIGVycDsKQEAgLTIzNDAsMjggKzIzNzksMzMgQEAKICAqICAgbWF0Y2gJCSdib29sZWFuJyBmb3IgbWF0Y2ggZm91bmQKICAqCQkJcmV0dXJucyAxIGlmIG1hdGNoIGZvdW5kLCBvdGhlcndpc2UgMC4KICAqLwotc3RhdGljIGludAotZGFzZF8zOTkwX2VycF9lcnJvcl9tYXRjaChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIxLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIyKQorc3RhdGljIGludCBkYXNkXzM5OTBfZXJwX2Vycm9yX21hdGNoKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjEsCisJCQkJICAgICBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIyKQogeworCWNoYXIgKnNlbnNlMSwgKnNlbnNlMjsKIAogCWlmIChjcXIxLT5zdGFydGRldiAhPSBjcXIyLT5zdGFydGRldikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY3FyMS0+aXJiLmVzdy5lc3cwLmVydy5jb25zICE9IGNxcjItPmlyYi5lc3cuZXN3MC5lcncuY29ucykKLQkJcmV0dXJuIDA7CisJc2Vuc2UxID0gZGFzZF9nZXRfc2Vuc2UoJmNxcjEtPmlyYik7CisJc2Vuc2UyID0gZGFzZF9nZXRfc2Vuc2UoJmNxcjItPmlyYik7CiAKLQlpZiAoKGNxcjEtPmlyYi5lc3cuZXN3MC5lcncuY29ucyA9PSAwKSAmJgotCSAgICAoY3FyMi0+aXJiLmVzdy5lc3cwLmVydy5jb25zID09IDApKQl7Ci0JCWlmICgoY3FyMS0+aXJiLnNjc3cuY21kLmNzdGF0ICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKLQkJCQkJICAgICBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkgPT0KLQkJICAgIChjcXIyLT5pcmIuc2Nzdy5jbWQuY3N0YXQgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAotCQkJCQkgICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSkKKwkvKiBvbmUgcmVxdWVzdCBoYXMgc2Vuc2UgZGF0YSwgdGhlIG90aGVyIG5vdCAtPiBubyBtYXRjaCwgcmV0dXJuIDAgKi8KKwlpZiAoIXNlbnNlMSAhPSAhc2Vuc2UyKQorCQlyZXR1cm4gMDsKKwkvKiBubyBzZW5zZSBkYXRhIGluIGJvdGggY2FzZXMgLT4gY2hlY2sgY3N0YXQgZm9yIElGQ0MgKi8KKwlpZiAoIXNlbnNlMSAmJiAhc2Vuc2UyKQl7CisJCWlmICgoc2Nzd19jc3RhdCgmY3FyMS0+aXJiLnNjc3cpICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKKwkJCQkJCSAgICBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkgPT0KKwkJICAgIChzY3N3X2NzdGF0KCZjcXIyLT5pcmIuc2NzdykgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkJCQkJICAgIFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEspKSkKIAkJCXJldHVybiAxOyAvKiBtYXRjaCB3aXRoIGlmY2MqLwogCX0KIAkvKiBjaGVjayBzZW5zZSBkYXRhOyBieXRlIDAtMiwyNSwyNyAqLwotCWlmICghKChtZW1jbXAgKGNxcjEtPmlyYi5lY3csIGNxcjItPmlyYi5lY3csIDMpID09IDApICYmCi0JICAgICAgKGNxcjEtPmlyYi5lY3dbMjddID09IGNxcjItPmlyYi5lY3dbMjddKSAmJgotCSAgICAgIChjcXIxLT5pcmIuZWN3WzI1XSA9PSBjcXIyLT5pcmIuZWN3WzI1XSkpKSB7CisJaWYgKCEoc2Vuc2UxICYmIHNlbnNlMiAmJgorCSAgICAgIChtZW1jbXAoc2Vuc2UxLCBzZW5zZTIsIDMpID09IDApICYmCisJICAgICAgKHNlbnNlMVsyN10gPT0gc2Vuc2UyWzI3XSkgJiYKKwkgICAgICAoc2Vuc2UxWzI1XSA9PSBzZW5zZTJbMjVdKSkpIHsKIAogCQlyZXR1cm4gMDsJLyogc2Vuc2UgZG9lc24ndCBtYXRjaCAqLwogCX0KQEAgLTI0MzQsNyArMjQ3OCw3IEBACiB7CiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7Ci0JY2hhciAqc2Vuc2UgPSBlcnAtPmlyYi5lY3c7CisJY2hhciAqc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmZXJwLT5pcmIpOwogCiAJLyogY2hlY2sgZm9yIDI0IGJ5dGUgc2Vuc2UgRVJQICovCiAJaWYgKChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYnVzX291dCkgfHwKQEAgLTI0NDksNyArMjQ5Myw3IEBACiAJCS8qIHByZXBhcmUgZXJwIGZvciByZXRyeSBvbiBkaWZmZXJlbnQgY2hhbm5lbCBwYXRoICovCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEoZXJwKTsKIAotCQlpZiAoIShzZW5zZVsyXSAmIERBU0RfU0VOU0VfQklUXzApKSB7CisJCWlmIChzZW5zZSAmJiAhKHNlbnNlWzJdICYgREFTRF9TRU5TRV9CSVRfMCkpIHsKIAogCQkJLyogaXNzdWUgYSBEaWFnbm9zdGljIENvbnRyb2wgY29tbWFuZCB3aXRoIGFuCiAJCQkgKiBJbmhpYml0IFdyaXRlIHN1YmNvbW1hbmQgKi8KQEAgLTI0NzEsNyArMjUxNSw3IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCWRlZmF1bHQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAorCQkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKIAkJCQkJICAgICJpbnZhbGlkIHN1YmNvbW1hbmQgbW9kaWZpZXIgMHgleCAiCiAJCQkJCSAgICAiZm9yIERpYWdub3N0aWMgQ29udHJvbCBDb21tYW5kIiwKIAkJCQkJICAgIHNlbnNlWzI1XSk7CkBAIC0yNDc5LDE5ICsyNTIzLDIxIEBACiAJCX0KIAogCQkvKiBjaGVjayBmb3IgMzIgYnl0ZSBzZW5zZSBFUlAgKi8KLQl9IGVsc2UgaWYgKChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcmV0cnkpIHx8Ci0JCSAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcGF0aCkgfHwKLQkJICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb2RlKSB8fAotCQkgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX2NvbmZpZykpIHsKKwl9IGVsc2UgaWYgKHNlbnNlICYmCisJCSAgICgoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3JldHJ5KSB8fAorCQkgICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9wYXRoKSB8fAorCQkgICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb2RlKSB8fAorCQkgICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb25maWcpKSkgewogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfY29tcG91bmQoZXJwLCBzZW5zZSk7CiAKIAl9IGVsc2UgewotCQkvKiBObyByZXRyeSBsZWZ0IGFuZCBubyBhZGRpdGlvbmFsIHNwZWNpYWwgaGFuZGxpbmcgKi8KLQkJLypuZWNlc3NhcnkgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCSAgICAibm8gcmV0cmllcyBsZWZ0IGZvciBlcnAgJXAgLSAiCi0JCQkgICAgInNldCBzdGF0dXMgdG8gRkFJTEVEIiwgZXJwKTsKKwkJLyoKKwkJICogTm8gcmV0cnkgbGVmdCBhbmQgbm8gYWRkaXRpb25hbCBzcGVjaWFsIGhhbmRsaW5nCisJCSAqIG5lY2Vzc2FyeQorCQkgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiRVJQICVwIGhhcyBydW4gb3V0IG9mIHJldHJpZXMgYW5kIGZhaWxlZFxuIiwgZXJwKTsKIAogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAl9CkBAIC0yNTQ4LDI0ICsyNTk0LDI1IEBACiAKIAlpZiAoZXJwLT5yZXRyaWVzID4gMCkgewogCi0JCWNoYXIgKnNlbnNlID0gZXJwLT5yZWZlcnMtPmlyYi5lY3c7CisJCWNoYXIgKnNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoJmVycC0+cmVmZXJzLT5pcmIpOwogCiAJCS8qIGNoZWNrIGZvciBzcGVjaWFsIHJldHJpZXMgKi8KLQkJaWYgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNCkgeworCQlpZiAoc2Vuc2UgJiYgZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KSB7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBzZW5zZSk7CiAKLQkJfSBlbHNlIGlmIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzFCXzMyKSB7CisJCX0gZWxzZSBpZiAoc2Vuc2UgJiYKKwkJCSAgIGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMUJfMzIpIHsKIAogCQkJZXJwID0gZGFzZF8zOTkwX3VwZGF0ZV8xQihlcnAsIHNlbnNlKTsKIAotCQl9IGVsc2UgaWYgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKSB7CisJCX0gZWxzZSBpZiAoc2Vuc2UgJiYgZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2ludF9yZXEpIHsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKGVycCk7CiAKIAkJfSBlbHNlIHsKIAkJCS8qIHNpbXBsZSByZXRyeQkgICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAogCQkJCSAgICAiJWkgcmV0cmllcyBsZWZ0IGZvciBlcnAgJXAiLAogCQkJCSAgICBlcnAtPnJldHJpZXMsIGVycCk7CiAKQEAgLTI2MDksMjQgKzI2NTYsMjQgQEAKIAogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkvKiBwcmludCBjdXJyZW50IGVycF9jaGFpbiAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJFUlAgY2hhaW4gYXQgQkVHSU5OSU5HIG9mIEVSUC1BQ1RJT04iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIkVSUCBjaGFpbiBhdCBCRUdJTk5JTkcgb2YgRVJQLUFDVElPTlxuIik7CiAJCWZvciAodGVtcF9lcnAgPSBjcXI7CiAJCSAgICAgdGVtcF9lcnAgIT0gTlVMTDsgdGVtcF9lcnAgPSB0ZW1wX2VycC0+cmVmZXJzKSB7CiAKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICIgICBlcnAgJXAgKCUwMngpIHJlZmVycyB0byAlcCIsCisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkVSUCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwXG4iLAogCQkJCSAgICB0ZW1wX2VycCwgdGVtcF9lcnAtPnN0YXR1cywKIAkJCQkgICAgdGVtcF9lcnAtPnJlZmVycyk7CiAJCX0KIAl9CiAKIAkvKiBkb3VibGUtY2hlY2sgaWYgY3VycmVudCBlcnAvY3FyIHdhcyBzdWNjZXNzZnVsICovCi0JaWYgKChjcXItPmlyYi5zY3N3LmNtZC5jc3RhdCA9PSAweDAwKSAmJgotCSAgICAoY3FyLT5pcmIuc2Nzdy5jbWQuZHN0YXQgPT0KKwlpZiAoKHNjc3dfY3N0YXQoJmNxci0+aXJiLnNjc3cpID09IDB4MDApICYmCisJICAgIChzY3N3X2RzdGF0KCZjcXItPmlyYi5zY3N3KSA9PQogCSAgICAgKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCiAJCQkgICAgIkVSUCBjYWxsZWQgZm9yIHN1Y2Nlc3NmdWwgcmVxdWVzdCAlcCIKIAkJCSAgICAiIC0gTk8gRVJQIG5lY2Vzc2FyeSIsIGNxcik7CiAKQEAgLTI2NDgsMTMgKzI2OTUsMTMgQEAKIAogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkvKiBwcmludCBjdXJyZW50IGVycF9jaGFpbiAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJFUlAgY2hhaW4gYXQgRU5EIG9mIEVSUC1BQ1RJT04iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIkVSUCBjaGFpbiBhdCBFTkQgb2YgRVJQLUFDVElPTlxuIik7CiAJCWZvciAodGVtcF9lcnAgPSBlcnA7CiAJCSAgICAgdGVtcF9lcnAgIT0gTlVMTDsgdGVtcF9lcnAgPSB0ZW1wX2VycC0+cmVmZXJzKSB7CiAKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICIgICBlcnAgJXAgKCUwMngpIHJlZmVycyB0byAlcCIsCisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkVSUCAlcCAoJTAyeCkgcmVmZXJzIHRvICVwXG4iLAogCQkJCSAgICB0ZW1wX2VycCwgdGVtcF9lcnAtPnN0YXR1cywKIAkJCQkgICAgdGVtcF9lcnAtPnJlZmVycyk7CiAJCX0KQEAgLTI2NjcsNiArMjcxNCw4IEBACiAJCWxpc3RfYWRkX3RhaWwoJmVycC0+YmxvY2tsaXN0LCAmY3FyLT5ibG9ja2xpc3QpOwogCX0KIAorCisKIAlyZXR1cm4gZXJwOwogCiB9CQkJCS8qIGVuZCBkYXNkXzM5OTBfZXJwX2FjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKaW5kZXggMjA2NzZjZC4uNWI3YmJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCkBAIC01LDYgKzUsOCBAQAogICogQXV0aG9yKHMpOiBTdGVmYW4gV2Vpbmh1YmVyIDx3ZWluQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSAiZGFzZF9pbnQuaCIKQEAgLTUwMyw3ICs1MDUsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZsY3UtPmxvY2ssIGZsYWdzKTsKIAlpZiAocmMgfHwgKGxjdS0+ZmxhZ3MgJiBORUVEX1VBQ19VUERBVEUpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiY291bGQgbm90IHVwZGF0ZSIKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiY291bGQgbm90IHVwZGF0ZSIKIAkJCSAgICAiIGFsaWFzIGRhdGEgaW4gbGN1IChyYyA9ICVkKSwgcmV0cnkgbGF0ZXIiLCByYyk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbGN1LT5ydWFjX2RhdGEuZHdvcmssIDMwKkhaKTsKIAl9IGVsc2UgewpAQCAtNjQ2LDE0ICs2NDgsMTYgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJY3FyID0gbGN1LT5yc3VfY3FyOwogCXN0cm5jcHkoKGNoYXIgKikgJmNxci0+bWFnaWMsICJFQ0tEIiwgNCk7CiAJQVNDRUJDKChjaGFyICopICZjcXItPm1hZ2ljLCA0KTsKLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JTQ0s7Ci0JY3FyLT5jcGFkZHItPmZsYWdzID0gMCA7Ci0JY3FyLT5jcGFkZHItPmNvdW50ID0gMTY7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUlNDSzsKKwljY3ctPmZsYWdzID0gMCA7CisJY2N3LT5jb3VudCA9IDE2OworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAkoKGNoYXIgKiljcXItPmRhdGEpWzBdID0gcmVhc29uOwogCiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTg1NSwxNiArODU5LDI1IEBACiAJc3RydWN0IGFsaWFzX2xjdSAqbGN1OwogCWNoYXIgcmVhc29uOwogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwljaGFyICpzZW5zZTsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAotCXJlYXNvbiA9IGlyYi0+ZWN3WzhdOwotCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMgJXgiLAotCQkgICAgImVja2QgaGFuZGxlIHN1bW1hcnkgdW5pdCBjaGVjazogcmVhc29uIiwgcmVhc29uKTsKKwlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKGlyYik7CisJaWYgKHNlbnNlKSB7CisJCXJlYXNvbiA9IHNlbnNlWzhdOworCQlEQkZfREVWX0VWRU5UKERCRl9OT1RJQ0UsIGRldmljZSwgIiVzICV4IiwKKwkJCSAgICAiZWNrZCBoYW5kbGUgc3VtbWFyeSB1bml0IGNoZWNrOiByZWFzb24iLCByZWFzb24pOworCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAiZWNrZCBoYW5kbGUgc3VtbWFyeSB1bml0IGNoZWNrOiIKKwkJCSAgICAiIG5vIHJlYXNvbiBjb2RlIGF2YWlsYWJsZSIpOworCQlyZXR1cm47CisJfQogCiAJbGN1ID0gcHJpdmF0ZS0+bGN1OwogCWlmICghbGN1KSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImRldmljZSBub3QgcmVhZHkgdG8gaGFuZGxlIHN1bW1hcnkiCiAJCQkgICAgIiB1bml0IGNoZWNrIChubyBsY3Ugc3RydWN0dXJlKSIpOwogCQlyZXR1cm47CkBAIC04NzcsNyArODkwLDcgQEAKIAkgKiB0aGUgbmV4dCBpbnRlcnJ1cHQgb24gYSBkaWZmZXJlbnQgZGV2aWNlCiAJICovCiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+YWxpYXNfbGlzdCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiZGV2aWNlIGlzIGluIG9mZmxpbmUgcHJvY2Vzc2luZywiCiAJCQkgICAgIiBkb24ndCBkbyBzdW1tYXJ5IHVuaXQgY2hlY2sgaGFuZGxpbmciKTsKIAkJc3Bpbl91bmxvY2soJmxjdS0+bG9jayk7CkBAIC04ODUsNyArODk4LDcgQEAKIAl9CiAJaWYgKGxjdS0+c3VjX2RhdGEuZGV2aWNlKSB7CiAJCS8qIGFscmVhZHkgc2NoZWR1bGVkIG9yIHJ1bm5pbmcgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAicHJldmlvdXMgaW5zdGFuY2Ugb2Ygc3VtbWFyeSB1bml0IGNoZWNrIHdvcmtlciIKIAkJCSAgICAiIHN0aWxsIHBlbmRpbmciKTsKIAkJc3Bpbl91bmxvY2soJmxjdS0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDM0MzM5OTAuLmU3NzY2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTY3LDYgKzY5LDggQEAKIGludCBkYXNkX2F1dG9kZXRlY3QgPSAwOwkvKiBpcyB0cnVlLCB3aGVuIGF1dG9kZXRlY3Rpb24gaXMgYWN0aXZlICovCiBpbnQgZGFzZF9ub3BhdiA9IDA7CQkvKiBpcyB0cnVlLCB3aGVuIFBBViBpcyBkaXNhYmxlZCAqLwogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9ub3Bhdik7CitpbnQgZGFzZF9ub2ZjeDsJCQkvKiBkaXNhYmxlIEhpZ2ggUGVyZm9ybWFuY2UgRmljb24gKi8KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2Rfbm9mY3gpOwogCiAvKgogICogY2hhciAqZGFzZFtdIGlzIGludGVuZGVkIHRvIGhvbGQgdGhlIHJhbmdlcyBzdXBwbGllZCBieSB0aGUgZGFzZD0gc3RhdGVtZW50CkBAIC0xMjUsNiArMTI5LDcgQEAKICAqIFJlYWQgYSBkZXZpY2UgYnVzaWQvZGV2bm8gZnJvbSBhIHN0cmluZy4KICAqLwogc3RhdGljIGludAorCiBkYXNkX2J1c2lkKGNoYXIgKipzdHIsIGludCAqaWQwLCBpbnQgKmlkMSwgaW50ICpkZXZubykKIHsKIAlpbnQgdmFsLCBvbGRfc3R5bGU7CkBAIC0xMzIsOCArMTM3LDcgQEAKIAkvKiBJbnRlcnByZXQgaXBsZGV2IGJ1c2lkICovCiAJaWYgKHN0cm5jbXAoREFTRF9JUExERVYsICpzdHIsIHN0cmxlbihEQVNEX0lQTERFVikpID09IDApIHsKIAkJaWYgKGlwbF9pbmZvLnR5cGUgIT0gSVBMX1RZUEVfQ0NXKSB7Ci0JCQlNRVNTQUdFKEtFUk5fRVJSLCAiJXMiLCAiaXBsIGRldmljZSBpcyBub3QgYSBjY3cgIgotCQkJCSJkZXZpY2UiKTsKKwkJCXByX2VycigiVGhlIElQTCBkZXZpY2UgaXMgbm90IGEgQ0NXIGRldmljZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkqaWQwID0gMDsKQEAgLTIwOSw5ICsyMTMsOCBAQAogCQllbHNlIGlmIChsZW4gPT0gOCAmJiAhc3RybmNtcChzdHIsICJmYWlsZmFzdCIsIDgpKQogCQkJZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX0ZBSUxGQVNUOwogCQllbHNlIHsKLQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAotCQkJCSJ1bnN1cHBvcnRlZCBmZWF0dXJlOiAlKnMsICIKLQkJCQkiaWdub3Jpbmcgc2V0dGluZyIsIGxlbiwgc3RyKTsKKwkJCXByX3dhcm5pbmcoIiUqcyBpcyBub3QgYSBzdXBwb3J0ZWQgZGV2aWNlIG9wdGlvblxuIiwKKwkJCQkgICBsZW4sIHN0cik7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0KIAkJc3RyICs9IGxlbjsKQEAgLTIyMCw4ICsyMjMsOCBAQAogCQlzdHIrKzsKIAl9CiAJaWYgKCpzdHIgIT0gJyknKSB7Ci0JCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLAotCQkJIm1pc3NpbmcgJyknIGluIGRhc2QgcGFyYW1ldGVyIHN0cmluZ1xuIik7CisJCXByX3dhcm5pbmcoIkEgY2xvc2luZyBwYXJlbnRoZXNpcyAnKScgaXMgbWlzc2luZyBpbiB0aGUgIgorCQkJICAgImRhc2Q9IHBhcmFtZXRlclxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAl9IGVsc2UKIAkJc3RyKys7CkBAIC0yNTMsMjUgKzI1NiwyOSBAQAogICAgICAgICB9CiAJaWYgKHN0cm5jbXAoImF1dG9kZXRlY3QiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWRhc2RfYXV0b2RldGVjdCA9IDE7Ci0JCU1FU1NBR0UgKEtFUk5fSU5GTywgIiVzIiwKLQkJCSAidHVybmluZyB0byBhdXRvZGV0ZWN0aW9uIG1vZGUiKTsKKwkJcHJfaW5mbygiVGhlIGF1dG9kZXRlY3Rpb24gbW9kZSBoYXMgYmVlbiBhY3RpdmF0ZWRcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXNpZHVhbF9zdHI7CiAgICAgICAgIH0KIAlpZiAoc3RybmNtcCgicHJvYmVvbmx5IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlkYXNkX3Byb2Jlb25seSA9IDE7Ci0JCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLAotCQkJInR1cm5pbmcgdG8gcHJvYmVvbmx5IG1vZGUiKTsKKwkJcHJfaW5mbygiVGhlIHByb2Jlb25seSBtb2RlIGhhcyBiZWVuIGFjdGl2YXRlZFxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc2lkdWFsX3N0cjsKICAgICAgICAgfQogCWlmIChzdHJuY21wKCJub3BhdiIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJaWYgKE1BQ0hJTkVfSVNfVk0pCi0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIidub3Bhdicgbm90IHN1cHBvcnRlZCBvbiBWTSIpOworCQkJcHJfaW5mbygiJ25vcGF2JyBpcyBub3Qgc3VwcG9ydGVkIG9uIHovVk1cbiIpOwogCQllbHNlIHsKIAkJCWRhc2Rfbm9wYXYgPSAxOwotCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJkaXNhYmxlIFBBViBtb2RlIik7CisJCQlwcl9pbmZvKCJQQVYgc3VwcG9ydCBoYXMgYmUgZGVhY3RpdmF0ZWRcbiIpOwogCQl9CiAJCXJldHVybiByZXNpZHVhbF9zdHI7CiAJfQorCWlmIChzdHJuY21wKCJub2ZjeCIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKKwkJZGFzZF9ub2ZjeCA9IDE7CisJCXByX2luZm8oIkhpZ2ggUGVyZm9ybWFuY2UgRklDT04gc3VwcG9ydCBoYXMgYmVlbiAiCisJCQkiZGVhY3RpdmF0ZWRcbiIpOworCQlyZXR1cm4gcmVzaWR1YWxfc3RyOworCX0KIAlpZiAoc3RybmNtcCgiZml4ZWRidWZmZXJzIiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlpZiAoZGFzZF9wYWdlX2NhY2hlKQogCQkJcmV0dXJuIHJlc2lkdWFsX3N0cjsKQEAgLTI4MCwxMCArMjg3LDEwIEBACiAJCQkJCSAgUEFHRV9TSVpFLCBTTEFCX0NBQ0hFX0RNQSwKIAkJCQkJICBOVUxMKTsKIAkJaWYgKCFkYXNkX3BhZ2VfY2FjaGUpCi0JCQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwgIkZhaWxlZCB0byBjcmVhdGUgc2xhYiwgIgorCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiJXMiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzbGFiLCAiCiAJCQkJImZpeGVkIGJ1ZmZlciBtb2RlIGRpc2FibGVkLiIpOwogCQllbHNlCi0JCQlNRVNTQUdFIChLRVJOX0lORk8sICIlcyIsCisJCQlEQkZfRVZFTlQoREJGX0lORk8sICIlcyIsCiAJCQkJICJ0dXJuaW5nIG9uIGZpeGVkIGJ1ZmZlciBtb2RlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc2lkdWFsX3N0cjsKICAgICAgICAgfQpAQCAtMzIxLDcgKzMyOCw3IEBACiAJICAgIChmcm9tX2lkMCAhPSB0b19pZDAgfHwgZnJvbV9pZDEgIT0gdG9faWQxIHx8IGZyb20gPiB0bykpCiAJCXJjID0gLUVJTlZBTDsKIAlpZiAocmMpIHsKLQkJTUVTU0FHRShLRVJOX0VSUiwgIkludmFsaWQgZGV2aWNlIHJhbmdlICVzIiwgcGFyc2VzdHJpbmcpOworCQlwcl9lcnIoIiVzIGlzIG5vdCBhIHZhbGlkIGRldmljZSByYW5nZVxuIiwgcGFyc2VzdHJpbmcpOwogCQlyZXR1cm4gRVJSX1BUUihyYyk7CiAJfQogCWZlYXR1cmVzID0gZGFzZF9mZWF0dXJlX2xpc3Qoc3RyLCAmc3RyKTsKQEAgLTM0MCw4ICszNDcsOCBAQAogCQlyZXR1cm4gc3RyICsgMTsKIAlpZiAoKnN0ciA9PSAnXDAnKQogCQlyZXR1cm4gc3RyOwotCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAotCQkianVuayBhdCBlbmQgb2YgZGFzZCBwYXJhbWV0ZXIgc3RyaW5nOiAlc1xuIiwgc3RyKTsKKwlwcl93YXJuaW5nKCJUaGUgZGFzZD0gcGFyYW1ldGVyIHZhbHVlICVzIGhhcyBhbiBpbnZhbGlkIGVuZGluZ1xuIiwKKwkJICAgc3RyKTsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IGVmMmE1NjkuLmI5YTdmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTgsNiArOCw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNDQsOCArMTQ2LDggQEAKIAltZHNrX3Rlcm1faW8oZGV2aWNlKTsKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGRldmljZS0+YmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMpCi0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiRElBRyBFUlAgdW5zdWNjZXNzZnVsLCAiCi0JCQkgICAgInJjPSVkIiwgcmMpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIEVSUCBmYWlsZWQgd2l0aCAiCisJCQkgICAgInJjPSVkXG4iLCByYyk7CiB9CiAKIC8qIFN0YXJ0IGEgZ2l2ZW4gcmVxdWVzdCBhdCB0aGUgZGV2aWNlLiBSZXR1cm4gemVybyBvbiBzdWNjZXNzLCBub24temVybwpAQCAtMTYwLDcgKzE2Miw3IEBACiAKIAlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OwogCWlmIChjcXItPnJldHJpZXMgPCAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiRElBRyBzdGFydF9JTzogcmVxdWVzdCAlcCAiCisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiRElBRyBzdGFydF9JTzogcmVxdWVzdCAlcCAiCiAJCQkgICAgIi0gbm8gcmV0cnkgbGVmdCkiLCBjcXIpOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0VSUk9SOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE5NSw3ICsxOTcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OiAvKiBFcnJvciBjb25kaXRpb24gKi8KIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiZGlhMjUwIHJldHVybmVkIHJjPSVkIiwgcmMpOworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJkaWEyNTAgcmV0dXJuZWQgcmM9JWQiLCByYyk7CiAJCWRhc2RfZGlhZ19lcnAoZGV2aWNlKTsKIAkJcmMgPSAtRUlPOwogCQlicmVhazsKQEAgLTI0MywxMyArMjQ1LDE0IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKCFpcCkgewkJLyogbm8gaW50cGFybTogdW5zb2xpY2l0ZWQgaW50ZXJydXB0ICovCi0JCU1FU1NBR0UoS0VSTl9ERUJVRywgIiVzIiwgImNhdWdodCB1bnNvbGljaXRlZCBpbnRlcnJ1cHQiKTsKKwkJREJGX0VWRU5UKERCRl9OT1RJQ0UsICIlcyIsICJjYXVnaHQgdW5zb2xpY2l0ZWQgIgorCQkJICAgICAgImludGVycnVwdCIpOwogCQlyZXR1cm47CiAJfQogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGlwOwogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICIgbWFnaWMgbnVtYmVyIG9mIGRhc2RfY2N3X3JlcSAweCUwOFggZG9lc24ndCIKIAkJCSAgICAiIG1hdGNoIGRpc2NpcGxpbmUgMHglMDhYIiwKIAkJCSAgICBjcXItPm1hZ2ljLCAqKGludCAqKSAoJmRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSkpOwpAQCAtMjgxLDE1ICsyODQsMTEgQEAKIAkJCQlyYyA9IGRhc2Rfc3RhcnRfZGlhZyhuZXh0KTsKIAkJCQlpZiAocmMgPT0gMCkKIAkJCQkJZXhwaXJlcyA9IG5leHQtPmV4cGlyZXM7Ci0JCQkJZWxzZSBpZiAocmMgIT0gLUVBQ0NFUykKLQkJCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCQkgICAgIkludGVycnVwdCBmYXN0cGF0aCAiCi0JCQkJCQkgICAgImZhaWxlZCEiKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImludGVycnVwdCBzdGF0dXMgZm9yICIKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludGVycnVwdCBzdGF0dXMgZm9yICIKIAkJCSAgICAicmVxdWVzdCAlcCB3YXMgJWQgKCVkIHJldHJpZXMgbGVmdCkiLCBjcXIsIHN0YXR1cywKIAkJCSAgICBjcXItPnJldHJpZXMpOwogCQlkYXNkX2RpYWdfZXJwKGRldmljZSk7CkBAIC0zMjIsOCArMzIxLDkgQEAKIAlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7CiAJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9kaWFnX3ByaXZhdGUpLEdGUF9LRVJORUwpOwogCQlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlIGRhdGEiKTsKKwkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQkiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHByaXZhdGUgREFTRCBkYXRhICIKKwkJCQkgICAgICAiZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWNjd19kZXZpY2VfZ2V0X2lkKGRldmljZS0+Y2RldiwgJnByaXZhdGUtPmRldl9pZCk7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAl9CiAJYmxvY2sgPSBkYXNkX2FsbG9jX2Jsb2NrKCk7CiAJaWYgKElTX0VSUihibG9jaykpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgc3RydWN0dXJlIik7CiAJCWRldmljZS0+cHJpdmF0ZSA9IE5VTEw7CiAJCWtmcmVlKHByaXZhdGUpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIAlyYyA9IGRpYWcyMTAoKHN0cnVjdCBkaWFnMjEwICopIHJkY19kYXRhKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJmYWlsZWQgdG8gcmV0cmlldmUgZGV2aWNlICIKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiZmFpbGVkIHRvIHJldHJpZXZlIGRldmljZSAiCiAJCQkgICAgImluZm9ybWF0aW9uIChyYz0lZCkiLCByYyk7CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwpAQCAtMzYyLDggKzM2Miw4IEBACiAJCXByaXZhdGUtPnB0X2Jsb2NrID0gMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJ1bnN1cHBvcnRlZCBkZXZpY2UgY2xhc3MgIgotCQkJICAgICIoY2xhc3M9JWQpIiwgcHJpdmF0ZS0+cmRjX2RhdGEudmRldl9jbGFzcyk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldmljZSB0eXBlICVkIGlzIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgICJpbiBESUFHIG1vZGVcbiIsIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOwogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zODAsNyArMzgwLDcgQEAKIAkvKiBmaWd1cmUgb3V0IGJsb2Nrc2l6ZSBvZiBkZXZpY2UgKi8KIAlsYWJlbCA9IChzdHJ1Y3QgdnRvY19jbXNfbGFiZWwgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmIChsYWJlbCA9PSBOVUxMKSAgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJObyBtZW1vcnkgdG8gYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNDA0LDggKzQwNCw4IEBACiAJCXByaXZhdGUtPmlvYi5mbGFnYSA9IERBU0RfRElBR19GTEFHQV9ERUZBVUxUOwogCQlyYyA9IGRpYTI1MCgmcHJpdmF0ZS0+aW9iLCBSV19CSU8pOwogCQlpZiAocmMgPT0gMykgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJIkRJQUcgY2FsbCBmYWlsZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQSA2NC1iaXQgRElBRyBjYWxsIGZhaWxlZFxuIik7CiAJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfbGFiZWw7CiAJCX0KQEAgLTQxNCw4ICs0MTQsOCBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChic2l6ZSA+IFBBR0VfU0laRSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImRldmljZSBhY2Nlc3MgZmFpbGVkICIKLQkJCSAgICAiKHJjPSVkKSIsIHJjKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIgorCQkJICIgb2YgYW4gaW5jb3JyZWN0IGZvcm1hdCAocmM9JWQpXG4iLCByYyk7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXRfbGFiZWw7CiAJfQpAQCAtNDMzLDE1ICs0MzMsMTUgQEAKIAkJYmxvY2stPnMyYl9zaGlmdCsrOwogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgYmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJESUFHIGluaXRpYWxpemF0aW9uICIKLQkJCSJmYWlsZWQgKHJjPSVkKSIsIHJjKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRElBRyBpbml0aWFsaXphdGlvbiAiCisJCQkiZmFpbGVkIHdpdGggcmM9JWRcbiIsIHJjKTsKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkJICAgICIoJWxkIEIvYmxrKTogJWxka0IiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIChibG9jay0+YmxvY2tzIDw8Ci0JCQkJYmxvY2stPnMyYl9zaGlmdCkgPj4gMSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiTmV3IERBU0Qgd2l0aCAlbGQgYnl0ZS9ibG9jaywgdG90YWwgc2l6ZSAlbGQgS0JcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLT5icF9ibG9jaywKKwkJCSAodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKKwkJCQkJICBibG9jay0+czJiX3NoaWZ0KSA+PiAxKTsKIAl9CiBvdXRfbGFiZWw6CiAJZnJlZV9wYWdlKChsb25nKSBsYWJlbCk7CkBAIC01OTUsNyArNTk1LDcgQEAKIGRhc2RfZGlhZ19kdW1wX3NlbnNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICogcmVxLAogCQkgICAgIHN0cnVjdCBpcmIgKnN0YXQpCiB7Ci0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiZHVtcCBzZW5zZSBub3QgYXZhaWxhYmxlIGZvciBESUFHIGRhdGEiKTsKIH0KIApAQCAtNjIxLDEwICs2MjEsOCBAQAogZGFzZF9kaWFnX2luaXQodm9pZCkKIHsKIAlpZiAoIU1BQ0hJTkVfSVNfVk0pIHsKLQkJTUVTU0FHRV9MT0coS0VSTl9JTkZPLAotCQkJICAgICJNYWNoaW5lIGlzIG5vdCBWTTogJXMgIgotCQkJICAgICJkaXNjaXBsaW5lIG5vdCBpbml0aWFsaXppbmciLAotCQkJICAgIGRhc2RfZGlhZ19kaXNjaXBsaW5lLm5hbWUpOworCQlwcl9pbmZvKCJEaXNjaXBsaW5lICVzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgei9WTVxuIiwKKwkJCWRhc2RfZGlhZ19kaXNjaXBsaW5lLm5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJQVNDRUJDKGRhc2RfZGlhZ19kaXNjaXBsaW5lLmViY25hbWUsIDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGJkYjg3OTkuLjIxMjU0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTExLDYgKzExLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTI3LDkgKzI5LDEyIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgorI2luY2x1ZGUgPGFzbS9pdGN3Lmg+CiAKICNpbmNsdWRlICJkYXNkX2ludC5oIgogI2luY2x1ZGUgImRhc2RfZWNrZC5oIgorI2luY2x1ZGUgIi4uL2Npby9jaHNjLmgiCisKIAogI2lmZGVmIFBSSU5US19IRUFERVIKICN1bmRlZiBQUklOVEtfSEVBREVSCkBAIC04NCw3ICs4OSw3IEBACiAJLyogc2V0IEVDS0Qgc3BlY2lmaWMgY2N3LWRldmljZSBvcHRpb25zICovCiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb3B0aW9ucyhjZGV2LCBDQ1dERVZfQUxMT1dfRk9SQ0UpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCSAgICAgICAiZGFzZF9lY2tkX3Byb2JlOiBjb3VsZCBub3Qgc2V0IGNjdy1kZXZpY2Ugb3B0aW9ucyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CkBAIC0xNTksNiArMTY0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9jaF90KHN0cnVjdCBjaF90ICpnZW8sIF9fdTMyIGN5bCwgX191OCBoZWFkKQoreworCWdlby0+Y3lsID0gKF9fdTE2KSBjeWw7CisJZ2VvLT5oZWFkID0gY3lsID4+IDE2OworCWdlby0+aGVhZCA8PD0gNDsKKwlnZW8tPmhlYWQgfD0gaGVhZDsKK30KKwogc3RhdGljIGludAogY2hlY2tfWFJDIChzdHJ1Y3QgY2N3MSAgICAgICAgICpkZV9jY3csCiAgICAgICAgICAgIHN0cnVjdCBERV9lY2tkX2RhdGEgKmRhdGEsCkBAIC0xODYsMTEgKzE5OSwxMiBAQAogfQogCiBzdGF0aWMgaW50Ci1kZWZpbmVfZXh0ZW50KHN0cnVjdCBjY3cxICogY2N3LCBzdHJ1Y3QgREVfZWNrZF9kYXRhICogZGF0YSwgaW50IHRyaywKLQkgICAgICBpbnQgdG90cmssIGludCBjbWQsIHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKK2RlZmluZV9leHRlbnQoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IERFX2Vja2RfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHRyaywKKwkgICAgICB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKLQlzdHJ1Y3QgY2hfdCBnZW8sIGJlZywgZW5kOworCXUzMiBiZWdjeWwsIGVuZGN5bDsKKwl1MTYgaGVhZHMsIGJlZ2hlYWQsIGVuZGhlYWQ7CiAJaW50IHJjID0gMDsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKQEAgLTIzNiw3ICsyNTAsOCBAQAogCQlyYyA9IGNoZWNrX1hSQyAoY2N3LCBkYXRhLCBkZXZpY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAidW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIjB4JXggaXMgbm90IGEga25vd24gY29tbWFuZFxuIiwgY21kKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDgsMjcgKzI2MywyNCBAQAogCSAgICAmJiAhKHByaXZhdGUtPnVzZXNfY2RsICYmIHRyayA8IDIpKQogCQlkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQwOyAvKiBSZWd1bGFyIERhdGEgRm9ybWF0IE1vZGUgKi8KIAotCWdlby5jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWw7Ci0JZ2VvLmhlYWQgPSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQliZWcuY3lsID0gdHJrIC8gZ2VvLmhlYWQ7Ci0JYmVnLmhlYWQgPSB0cmsgJSBnZW8uaGVhZDsKLQllbmQuY3lsID0gdG90cmsgLyBnZW8uaGVhZDsKLQllbmQuaGVhZCA9IHRvdHJrICUgZ2VvLmhlYWQ7CisJaGVhZHMgPSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwliZWdjeWwgPSB0cmsgLyBoZWFkczsKKwliZWdoZWFkID0gdHJrICUgaGVhZHM7CisJZW5kY3lsID0gdG90cmsgLyBoZWFkczsKKwllbmRoZWFkID0gdG90cmsgJSBoZWFkczsKIAogCS8qIGNoZWNrIGZvciBzZXF1ZW50aWFsIHByZXN0YWdlIC0gZW5oYW5jZSBjeWxpbmRlciByYW5nZSAqLwogCWlmIChkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAogCSAgICBkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKIAotCQlpZiAoZW5kLmN5bCArIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwgPCBnZW8uY3lsKQotCQkJZW5kLmN5bCArPSBwcml2YXRlLT5hdHRyaWIubnJfY3lsOworCQlpZiAoZW5kY3lsICsgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCA8IHByaXZhdGUtPnJlYWxfY3lsKQorCQkJZW5kY3lsICs9IHByaXZhdGUtPmF0dHJpYi5ucl9jeWw7CiAJCWVsc2UKLQkJCWVuZC5jeWwgPSAoZ2VvLmN5bCAtIDEpOworCQkJZW5kY3lsID0gKHByaXZhdGUtPnJlYWxfY3lsIC0gMSk7CiAJfQogCi0JZGF0YS0+YmVnX2V4dC5jeWwgPSBiZWcuY3lsOwotCWRhdGEtPmJlZ19leHQuaGVhZCA9IGJlZy5oZWFkOwotCWRhdGEtPmVuZF9leHQuY3lsID0gZW5kLmN5bDsKLQlkYXRhLT5lbmRfZXh0LmhlYWQgPSBlbmQuaGVhZDsKKwlzZXRfY2hfdCgmZGF0YS0+YmVnX2V4dCwgYmVnY3lsLCBiZWdoZWFkKTsKKwlzZXRfY2hfdCgmZGF0YS0+ZW5kX2V4dCwgZW5kY3lsLCBlbmRoZWFkKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI4MywyOSArMjk1LDE0NSBAQAogCQlyZXR1cm4gMDsKIAogCS8qIHN3aXRjaCBvbiBTeXN0ZW0gVGltZSBTdGFtcCAtIG5lZWRlZCBmb3IgWFJDIFN1cHBvcnQgKi8KLQlwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kLmdhX2V4dGVuZGVkIHw9IDB4MDg7IC8qICdUaW1lIFN0YW1wIFZhbGlkJyAgICovCi0JcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZC5nYV9leHRlbmRlZCB8PSAweDAyOyAvKiAnRXh0ZW5kZWQgUGFyYW1ldGVyJyAqLworCXBmeGRhdGEtPmRlZmluZV9leHRlbnQuZ2FfZXh0ZW5kZWQgfD0gMHgwODsgLyogJ1RpbWUgU3RhbXAgVmFsaWQnICAgKi8KKwlwZnhkYXRhLT5kZWZpbmVfZXh0ZW50LmdhX2V4dGVuZGVkIHw9IDB4MDI7IC8qICdFeHRlbmRlZCBQYXJhbWV0ZXInICovCiAJcGZ4ZGF0YS0+dmFsaWRpdHkudGltZV9zdGFtcCA9IDE7CSAgICAvKiAnVGltZSBTdGFtcCBWYWxpZCcgICAqLwogCi0JcmMgPSBnZXRfc3luY19jbG9jaygmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZC5lcF9zeXNfdGltZSk7CisJcmMgPSBnZXRfc3luY19jbG9jaygmcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudC5lcF9zeXNfdGltZSk7CiAJLyogSWdub3JlIHJldHVybiBjb2RlIGlmIHN5bmMgY2xvY2sgaXMgc3dpdGNoZWQgb2ZmLiAqLwogCWlmIChyYyA9PSAtRU5PU1lTIHx8IHJjID09IC1FQUNDRVMpCiAJCXJjID0gMDsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgcHJlZml4KHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhLCBpbnQgdHJrLAotCQkgIGludCB0b3RyaywgaW50IGNtZCwgc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2LAotCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYpCitzdGF0aWMgdm9pZCBmaWxsX0xSRV9kYXRhKHN0cnVjdCBMUkVfZWNrZF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHJrLAorCQkJICB1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IGNvdW50LCBpbnQgY21kLAorCQkJICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwkJCSAgdW5zaWduZWQgaW50IHRsZikKK3sKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJaW50IHNlY3RvcjsKKwlpbnQgZG4sIGQ7CisKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisJc2VjdG9yID0gMDsKKwlpZiAocmVjX29uX3RyaykgeworCQlzd2l0Y2ggKHByaXZhdGUtPnJkY19kYXRhLmRldl90eXBlKSB7CisJCWNhc2UgMHgzMzkwOgorCQkJZG4gPSBjZWlsX3F1b3QocmVjbGVuICsgNiwgMjMyKTsKKwkJCWQgPSA5ICsgY2VpbF9xdW90KHJlY2xlbiArIDYgKiAoZG4gKyAxKSwgMzQpOworCQkJc2VjdG9yID0gKDQ5ICsgKHJlY19vbl90cmsgLSAxKSAqICgxMCArIGQpKSAvIDg7CisJCQlicmVhazsKKwkJY2FzZSAweDMzODA6CisJCQlkID0gNyArIGNlaWxfcXVvdChyZWNsZW4gKyAxMiwgMzIpOworCQkJc2VjdG9yID0gKDM5ICsgKHJlY19vbl90cmsgLSAxKSAqICg4ICsgZCkpIC8gNzsKKwkJCWJyZWFrOworCQl9CisJfQorCWRhdGEtPnNlY3RvciA9IHNlY3RvcjsKKwkvKiBub3RlOiBtZWFuaW5nIG9mIGNvdW50IGRlcGVuZHMgb24gdGhlIG9wZXJhdGlvbgorCSAqCSBmb3IgcmVjb3JkIGJhc2VkIEkvTyBpdCdzIHRoZSBudW1iZXIgb2YgcmVjb3JkcywgYnV0IGZvcgorCSAqCSB0cmFjayBiYXNlZCBJL08gaXQncyB0aGUgbnVtYmVyIG9mIHRyYWNrcworCSAqLworCWRhdGEtPmNvdW50ID0gY291bnQ7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfSE9NRV9BRERSRVNTOgorCQlkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDM7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAzOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9IT01FX0FERFJFU1M6CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MzsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MTY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9SRUNPUkRfWkVSTzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgxOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMzsKKwkJZGF0YS0+Y291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfUkVDT1JEX1pFUk86CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MzsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MTY7CisJCWRhdGEtPmNvdW50Kys7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURToKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfTVQ6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9LRF9NVDoKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDAzOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOwkvKiBub3QgdGxmLCBhcyBvbmUgbWlnaHQgdGhpbmsgKi8KKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4M0Y7CisJCWRhdGEtPmV4dGVuZGVkX29wZXJhdGlvbiA9IDB4MjM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX01UOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDA2OworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ0tEX01UOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDE2OworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9DT1VOVDoKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDY7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHRsZjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MEM7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19FUkFTRToKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwYjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsCisJCQkgICAgImZpbGwgTFJFIHVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlCVUcoKTsKKwl9CisJc2V0X2NoX3QoJmRhdGEtPnNlZWtfYWRkciwKKwkJIHRyayAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAorCQkgdHJrICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpOworCWRhdGEtPnNlYXJjaF9hcmcuY3lsID0gZGF0YS0+c2Vla19hZGRyLmN5bDsKKwlkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPSBkYXRhLT5zZWVrX2FkZHIuaGVhZDsKKwlkYXRhLT5zZWFyY2hfYXJnLnJlY29yZCA9IHJlY19vbl90cms7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X0xSRShzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqcGZ4ZGF0YSwKKwkJICAgICAgdW5zaWduZWQgaW50IHRyaywgdW5zaWduZWQgaW50IHRvdHJrLCBpbnQgY21kLAorCQkgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IGNvdW50LAorCQkgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSwgdW5zaWduZWQgaW50IHRsZikKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKmJhc2Vwcml2LCAqc3RhcnRwcml2OwotCXN0cnVjdCBERV9lY2tkX2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGNoX3QgZ2VvLCBiZWcsIGVuZDsKKwlzdHJ1Y3QgREVfZWNrZF9kYXRhICpkZWRhdGE7CisJc3RydWN0IExSRV9lY2tkX2RhdGEgKmxyZWRhdGE7CisJdTMyIGJlZ2N5bCwgZW5kY3lsOworCXUxNiBoZWFkcywgYmVnaGVhZCwgZW5kaGVhZDsKIAlpbnQgcmMgPSAwOwogCiAJYmFzZXByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CiAJc3RhcnRwcml2ID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBzdGFydGRldi0+cHJpdmF0ZTsKLQlkYXRhID0gJnBmeGRhdGEtPmRlZmluZV9leHRlbmQ7CisJZGVkYXRhID0gJnBmeGRhdGEtPmRlZmluZV9leHRlbnQ7CisJbHJlZGF0YSA9ICZwZnhkYXRhLT5sb2NhdGVfcmVjb3JkOwogCiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUEZYOwogCWNjdy0+ZmxhZ3MgPSAwOwpAQCAtMzE0LDEwICs0NDIsMTYgQEAKIAogCW1lbXNldChwZnhkYXRhLCAwLCBzaXplb2YoKnBmeGRhdGEpKTsKIAkvKiBwcmVmaXggZGF0YSAqLwotCXBmeGRhdGEtPmZvcm1hdCA9IDA7CisJaWYgKGZvcm1hdCA+IDEpIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LAorCQkJICAgICAgIlBGWCBMUkUgdW5rbm93biBmb3JtYXQgMHgleCIsIGZvcm1hdCk7CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcGZ4ZGF0YS0+Zm9ybWF0ID0gZm9ybWF0OwogCXBmeGRhdGEtPmJhc2VfYWRkcmVzcyA9IGJhc2Vwcml2LT5uZWQtPnVuaXRfYWRkcjsKIAlwZnhkYXRhLT5iYXNlX2xzcyA9IGJhc2Vwcml2LT5uZWQtPklEOwotCXBmeGRhdGEtPnZhbGlkaXR5LmRlZmluZV9leHRlbmQgPSAxOworCXBmeGRhdGEtPnZhbGlkaXR5LmRlZmluZV9leHRlbnQgPSAxOwogCiAJLyogcHJpdmF0ZSB1aWQgaXMga2VwdCB1cCB0byBkYXRlLCBjb25mX2RhdGEgbWF5IGJlIG91dGRhdGVkICovCiAJaWYgKHN0YXJ0cHJpdi0+dWlkLnR5cGUgIT0gVUFfQkFTRV9ERVZJQ0UpIHsKQEAgLTMzNyw3MCArNDcxLDk0IEBACiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0Q6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfS0RfTVQ6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ09VTlQ6Ci0JCWRhdGEtPm1hc2sucGVybSA9IDB4MTsKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5ibGtfc2l6ZSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURToKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfTVQ6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9LRF9NVDoKLQkJZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CiAJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UOgotCQlkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IERBU0RfQllQQVNTX0NBQ0hFOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CiAJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX0VSQVNFOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9IT01FX0FERFJFU1M6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1JFQ09SRF9aRVJPOgotCQlkYXRhLT5tYXNrLnBlcm0gPSAweDM7Ci0JCWRhdGEtPm1hc2suYXV0aCA9IDB4MTsKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDM7CisJCWRlZGF0YS0+bWFzay5hdXRoID0gMHgxOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CisJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gYmxrc2l6ZTsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgYmFzZWRldiwgInVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOwotCQlicmVhazsKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LAorCQkJICAgICJQRlggTFJFIHVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGF0YS0+YXR0cmlidXRlcy5tb2RlID0gMHgzOwkvKiBFQ0tEICovCisJZGVkYXRhLT5hdHRyaWJ1dGVzLm1vZGUgPSAweDM7CS8qIEVDS0QgKi8KIAogCWlmICgoYmFzZXByaXYtPnJkY19kYXRhLmN1X3R5cGUgPT0gMHgyMTA1IHx8CiAJICAgICBiYXNlcHJpdi0+cmRjX2RhdGEuY3VfdHlwZSA9PSAweDIxMDcgfHwKIAkgICAgIGJhc2Vwcml2LT5yZGNfZGF0YS5jdV90eXBlID09IDB4MTc1MCkKIAkgICAgJiYgIShiYXNlcHJpdi0+dXNlc19jZGwgJiYgdHJrIDwgMikpCi0JCWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDA7IC8qIFJlZ3VsYXIgRGF0YSBGb3JtYXQgTW9kZSAqLworCQlkZWRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4NDA7IC8qIFJlZ3VsYXIgRGF0YSBGb3JtYXQgTW9kZSAqLwogCi0JZ2VvLmN5bCA9IGJhc2Vwcml2LT5yZGNfZGF0YS5ub19jeWw7Ci0JZ2VvLmhlYWQgPSBiYXNlcHJpdi0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JYmVnLmN5bCA9IHRyayAvIGdlby5oZWFkOwotCWJlZy5oZWFkID0gdHJrICUgZ2VvLmhlYWQ7Ci0JZW5kLmN5bCA9IHRvdHJrIC8gZ2VvLmhlYWQ7Ci0JZW5kLmhlYWQgPSB0b3RyayAlIGdlby5oZWFkOworCWhlYWRzID0gYmFzZXByaXYtPnJkY19kYXRhLnRya19wZXJfY3lsOworCWJlZ2N5bCA9IHRyayAvIGhlYWRzOworCWJlZ2hlYWQgPSB0cmsgJSBoZWFkczsKKwllbmRjeWwgPSB0b3RyayAvIGhlYWRzOworCWVuZGhlYWQgPSB0b3RyayAlIGhlYWRzOwogCiAJLyogY2hlY2sgZm9yIHNlcXVlbnRpYWwgcHJlc3RhZ2UgLSBlbmhhbmNlIGN5bGluZGVyIHJhbmdlICovCi0JaWYgKGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8Ci0JICAgIGRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgeworCWlmIChkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX1BSRVNUQUdFIHx8CisJICAgIGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CiAKLQkJaWYgKGVuZC5jeWwgKyBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bCA8IGdlby5jeWwpCi0JCQllbmQuY3lsICs9IGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsOworCQlpZiAoZW5kY3lsICsgYmFzZXByaXYtPmF0dHJpYi5ucl9jeWwgPCBiYXNlcHJpdi0+cmVhbF9jeWwpCisJCQllbmRjeWwgKz0gYmFzZXByaXYtPmF0dHJpYi5ucl9jeWw7CiAJCWVsc2UKLQkJCWVuZC5jeWwgPSAoZ2VvLmN5bCAtIDEpOworCQkJZW5kY3lsID0gKGJhc2Vwcml2LT5yZWFsX2N5bCAtIDEpOwogCX0KIAotCWRhdGEtPmJlZ19leHQuY3lsID0gYmVnLmN5bDsKLQlkYXRhLT5iZWdfZXh0LmhlYWQgPSBiZWcuaGVhZDsKLQlkYXRhLT5lbmRfZXh0LmN5bCA9IGVuZC5jeWw7Ci0JZGF0YS0+ZW5kX2V4dC5oZWFkID0gZW5kLmhlYWQ7CisJc2V0X2NoX3QoJmRlZGF0YS0+YmVnX2V4dCwgYmVnY3lsLCBiZWdoZWFkKTsKKwlzZXRfY2hfdCgmZGVkYXRhLT5lbmRfZXh0LCBlbmRjeWwsIGVuZGhlYWQpOworCisJaWYgKGZvcm1hdCA9PSAxKSB7CisJCWZpbGxfTFJFX2RhdGEobHJlZGF0YSwgdHJrLCByZWNfb25fdHJrLCBjb3VudCwgY21kLAorCQkJICAgICAgYmFzZWRldiwgYmxrc2l6ZSwgdGxmKTsKKwl9CisKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgcHJlZml4KHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhLAorCQkgIHVuc2lnbmVkIGludCB0cmssIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwKKwkJICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYpCit7CisJcmV0dXJuIHByZWZpeF9MUkUoY2N3LCBwZnhkYXRhLCB0cmssIHRvdHJrLCBjbWQsIGJhc2VkZXYsIHN0YXJ0ZGV2LAorCQkJICAwLCAwLCAwLCAwLCAwKTsKK30KKwogc3RhdGljIHZvaWQKLWxvY2F0ZV9yZWNvcmQoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IExPX2Vja2RfZGF0YSAqZGF0YSwgaW50IHRyaywKLQkgICAgICBpbnQgcmVjX29uX3RyaywgaW50IG5vX3JlYywgaW50IGNtZCwKK2xvY2F0ZV9yZWNvcmQoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IExPX2Vja2RfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHRyaywKKwkgICAgICB1bnNpZ25lZCBpbnQgcmVjX29uX3RyaywgaW50IG5vX3JlYywgaW50IGNtZCwKIAkgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UsIGludCByZWNsZW4pCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwpAQCAtNDkxLDEyICs2NDksMTQgQEAKIAkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MGI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICJ1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICJ1bmtub3duIGxvY2F0ZSByZWNvcmQgIgorCQkJICAgICAgIm9wY29kZSAweCV4IiwgY21kKTsKIAl9Ci0JZGF0YS0+c2Vla19hZGRyLmN5bCA9IGRhdGEtPnNlYXJjaF9hcmcuY3lsID0KLQkJdHJrIC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JZGF0YS0+c2Vla19hZGRyLmhlYWQgPSBkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPQotCQl0cmsgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwlzZXRfY2hfdCgmZGF0YS0+c2Vla19hZGRyLAorCQkgdHJrIC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSB0cmsgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCk7CisJZGF0YS0+c2VhcmNoX2FyZy5jeWwgPSBkYXRhLT5zZWVrX2FkZHIuY3lsOworCWRhdGEtPnNlYXJjaF9hcmcuaGVhZCA9IGRhdGEtPnNlZWtfYWRkci5oZWFkOwogCWRhdGEtPnNlYXJjaF9hcmcucmVjb3JkID0gcmVjX29uX3RyazsKIH0KIApAQCAtNTg1LDggKzc0NSw4IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoIkVDS0QiLCAxIC8qIFJDRCAqLywgY2l3LT5jb3VudCwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJDRCByZXF1ZXN0Iik7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkNEIHJlcXVlc3QiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAKQEAgLTczNiwxNCArODk2LDE2IEBACiAJCQlyYyA9IGRhc2RfZWNrZF9yZWFkX2NvbmZfbHBtKGRldmljZSwgJmNvbmZfZGF0YSwKIAkJCQkJCSAgICAgJmNvbmZfbGVuLCBscG0pOwogCQkJaWYgKHJjICYmIHJjICE9IC1FT1BOT1RTVVBQKSB7CS8qIC1FT1BOT1RTVVBQIGlzIG9rICovCi0JCQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsCi0JCQkJCSJSZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSByZXR1cm5lZCAiCi0JCQkJCSJlcnJvciAlZCIsIHJjKTsKKwkJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCisJCQkJCSAgIlJlYWQgY29uZmlndXJhdGlvbiBkYXRhIHJldHVybmVkICIKKwkJCQkJICAiZXJyb3IgJWQgZm9yIGRldmljZTogJXMiLCByYywKKwkJCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCQlpZiAoY29uZl9kYXRhID09IE5VTEwpIHsKLQkJCQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwgIk5vIGNvbmZpZ3VyYXRpb24gIgotCQkJCQkiZGF0YSByZXRyaWV2ZWQiKTsKKwkJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJObyBjb25maWd1cmF0aW9uICIKKwkJCQkJICAiZGF0YSByZXRyaWV2ZWQgZm9yIGRldmljZTogJXMiLAorCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJCWNvbnRpbnVlOwkvKiBubyBlcnJvciAqLwogCQkJfQogCQkJLyogc2F2ZSBmaXJzdCB2YWxpZCBjb25maWd1cmF0aW9uIGRhdGEgKi8KQEAgLTc5MCw4ICs5NTIsOSBAQAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGRhc2RfcnNzZF9mZWF0dXJlcykpLAogCQkJCSAgIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gIgorCQkJICAicmVxdWVzdCBmb3IgZGV2aWNlOiAlcyIsCisJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwpAQCAtODQwLDcgKzEwMDMsOCBAQAogLyoKICAqIEJ1aWxkIENQIGZvciBQZXJmb3JtIFN1YnN5c3RlbSBGdW5jdGlvbiAtIFNTQy4KICAqLwotc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQkJCQkJICAgIGludCBlbmFibGVfcGF2KQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgZGFzZF9wc2Zfc3NjX2RhdGEgKnBzZl9zc2NfZGF0YTsKQEAgLTg1MSwxNSArMTAxNSwxNyBAQAogCQkJCSAgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBQU0YtU1NDIHJlcXVlc3QiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAJcHNmX3NzY19kYXRhID0gKHN0cnVjdCBkYXNkX3BzZl9zc2NfZGF0YSAqKWNxci0+ZGF0YTsKIAlwc2Zfc3NjX2RhdGEtPm9yZGVyID0gUFNGX09SREVSX1NTQzsKLQlwc2Zfc3NjX2RhdGEtPnN1Ym9yZGVyID0gMHg4ODsKLQlwc2Zfc3NjX2RhdGEtPnJlc2VydmVkWzBdID0gMHg4ODsKLQorCXBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgPSAweDQwOworCWlmIChlbmFibGVfcGF2KSB7CisJCXBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgfD0gMHg4ODsKKwkJcHNmX3NzY19kYXRhLT5yZXNlcnZlZFswXSA9IDB4ODg7CisJfQogCWNjdyA9IGNxci0+Y3BhZGRyOwogCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1BTRjsKIAljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KXBzZl9zc2NfZGF0YTsKQEAgLTg4MCwxMiArMTA0NiwxMiBAQAogICogY2FsbCBtaWdodCBjaGFuZ2UgYmVoYXZpb3VyIG9mIERBU0QgZGV2aWNlcy4KICAqLwogc3RhdGljIGludAotZGFzZF9lY2tkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCitkYXNkX2Vja2RfcHNmX3NzYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgaW50IGVuYWJsZV9wYXYpCiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKIAotCWNxciA9IGRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKGRldmljZSk7CisJY3FyID0gZGFzZF9lY2tkX2J1aWxkX3BzZl9zc2MoZGV2aWNlLCBlbmFibGVfcGF2KTsKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAKQEAgLTkwNCwxOSArMTA3MCwyMCBAQAogewogCWludCByYzsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJaW50IGVuYWJsZV9wYXY7CiAKLQkvKiBDdXJyZW50bHkgUEFWIGlzIHRoZSBvbmx5IHJlYXNvbiB0byAndmFsaWRhdGUnIHNlcnZlciBvbiBMUEFSICovCiAJaWYgKGRhc2Rfbm9wYXYgfHwgTUFDSElORV9JU19WTSkKLQkJcmV0dXJuIDA7Ci0KLQlyYyA9IGRhc2RfZWNrZF9wc2Zfc3NjKGRldmljZSk7CisJCWVuYWJsZV9wYXYgPSAwOworCWVsc2UKKwkJZW5hYmxlX3BhdiA9IDE7CisJcmMgPSBkYXNkX2Vja2RfcHNmX3NzYyhkZXZpY2UsIGVuYWJsZV9wYXYpOwogCS8qIG1heSBiZSByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIG9uIHNlcnZlciwKIAkgKiB0aGVyZWZvcmUganVzdCByZXBvcnQgZXJyb3IgYW5kIGdvIGFoZWFkICovCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgIlBTRi1TU0Mgb24gc3RvcmFnZSBzdWJzeXN0ZW0gJXMuJXMuJTA0eCByZXR1cm5lZCByYz0lZCIsCi0JCSAgICBwcml2YXRlLT51aWQudmVuZG9yLCBwcml2YXRlLT51aWQuc2VyaWFsLAotCQkgICAgcHJpdmF0ZS0+dWlkLnNzaWQsIHJjKTsKKwlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJQU0YtU1NDIG9uIHN0b3JhZ2Ugc3Vic3lzdGVtICVzLiVzLiUwNHggIgorCQkgICJyZXR1cm5lZCByYz0lZCBmb3IgZGV2aWNlOiAlcyIsCisJCSAgcHJpdmF0ZS0+dWlkLnZlbmRvciwgcHJpdmF0ZS0+dWlkLnNlcmlhbCwKKwkJICBwcml2YXRlLT51aWQuc3NpZCwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCS8qIFJFLVJlYWQgQ29uZmlndXJhdGlvbiBEYXRhICovCiAJcmV0dXJuIGRhc2RfZWNrZF9yZWFkX2NvbmYoZGV2aWNlKTsKIH0KQEAgLTkzOCw5ICsxMTA1LDkgQEAKIAkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSksCiAJCQkJICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlICIKLQkJCQkgICAgImRhdGEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIkFsbG9jYXRpbmcgbWVtb3J5IGZvciBwcml2YXRlIERBU0QgZGF0YSAiCisJCQkJICJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZGV2aWNlLT5wcml2YXRlID0gKHZvaWQgKikgcHJpdmF0ZTsKQEAgLTk2NSw4ICsxMTMyLDkgQEAKIAlpZiAocHJpdmF0ZS0+dWlkLnR5cGUgPT0gVUFfQkFTRV9ERVZJQ0UpIHsKIAkJYmxvY2sgPSBkYXNkX2FsbG9jX2Jsb2NrKCk7CiAJCWlmIChJU19FUlIoYmxvY2spKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrIHN0cnVjdHVyZSIpOworCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgIgorCQkJCSAgImJsb2NrIHN0cnVjdHVyZSBmb3IgZGV2aWNlOiAlcyIsCisJCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCXJjID0gUFRSX0VSUihibG9jayk7CiAJCQlnb3RvIG91dF9lcnIxOwogCQl9CkBAIC05OTcsMjAgKzExNjUsMjcgQEAKIAltZW1zZXQocmRjX2RhdGEsIDAsIHNpemVvZihyZGNfZGF0YSkpOwogCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgIkVDS0QiLCAmcmRjX2RhdGEsIDY0KTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0JCQkgICAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyByZXR1cm5lZCAiCi0JCQkgICAgInJjPSVkIiwgcmMpOworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCisJCQkgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgZmFpbGVkLCByYz0lZCBmb3IgIgorCQkJICAiZGV2aWNlOiAlcyIsIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZ290byBvdXRfZXJyMzsKIAl9Ci0JREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCi0JCSAgICAiJTA0WC8lMDJYKENVOiUwNFgvJTAyWCkgQ3lsOiVkIEhlYWQ6JWQgU2VjOiVkIiwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmRldl90eXBlLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X21vZGVsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfdHlwZSwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmN1X21vZGVsLm1vZGVsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3Ryayk7CisJLyogZmluZCB0aGUgdmFpbGQgY3lsaW5kZXIgc2l6ZSAqLworCWlmIChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgPT0gTFZfQ09NUEFUX0NZTCAmJgorCSAgICBwcml2YXRlLT5yZGNfZGF0YS5sb25nX25vX2N5bCkKKwkJcHJpdmF0ZS0+cmVhbF9jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5sb25nX25vX2N5bDsKKwllbHNlCisJCXByaXZhdGUtPnJlYWxfY3lsID0gcHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsOworCisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiTmV3IERBU0QgJTA0WC8lMDJYIChDVSAlMDRYLyUwMlgpICIKKwkJICJ3aXRoICVkIGN5bGluZGVycywgJWQgaGVhZHMsICVkIHNlY3RvcnNcbiIsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5kZXZfdHlwZSwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmRldl9tb2RlbCwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmN1X3R5cGUsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5jdV9tb2RlbC5tb2RlbCwKKwkJICAgIHByaXZhdGUtPnJlYWxfY3lsLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3Ryayk7CiAJcmV0dXJuIDA7CiAKIG91dF9lcnIzOgpAQCAtMTE1MSwxNCArMTMyNiwxMiBAQAogCXN0YXR1cyA9IHByaXZhdGUtPmluaXRfY3FyX3N0YXR1czsKIAlwcml2YXRlLT5pbml0X2Nxcl9zdGF0dXMgPSAtMTsKIAlpZiAoc3RhdHVzICE9IERBU0RfQ1FSX0RPTkUpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgInZvbHVtZSBhbmFseXNpcyByZXR1cm5lZCB1bmZvcm1hdHRlZCBkaXNrIik7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiVGhlIERBU0QgaXMgbm90IGZvcm1hdHRlZFxuIik7CiAJCXJldHVybiAtRU1FRElVTVRZUEU7CiAJfQogCiAJcHJpdmF0ZS0+dXNlc19jZGwgPSAxOwotCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2tzL3JlY29yZHMgcGVyIHRyYWNrLiAqLwotCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibG9jay0+YnBfYmxvY2spOwogCS8qIENoZWNrIFRyYWNrIDAgZm9yIENvbXBhdGlibGUgRGlzayBMYXlvdXQgKi8KIAljb3VudF9hcmVhID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CkBAIC0xMTgyLDggKzEzNTUsOCBAQAogCQkJY291bnRfYXJlYSA9ICZwcml2YXRlLT5jb3VudF9hcmVhWzBdOwogCX0gZWxzZSB7CiAJCWlmIChwcml2YXRlLT5jb3VudF9hcmVhWzNdLnJlY29yZCA9PSAxKQotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJUcmsgMDogbm8gcmVjb3JkcyBhZnRlciBWVE9DISIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiVHJhY2sgMCBoYXMgbm8gcmVjb3JkcyBmb2xsb3dpbmcgdGhlIFZUT0NcbiIpOwogCX0KIAlpZiAoY291bnRfYXJlYSAhPSBOVUxMICYmIGNvdW50X2FyZWEtPmtsID09IDApIHsKIAkJLyogd2UgZm91bmQgbm90dGhpbmcgdmlvbGF0aW5nIG91ciBkaXNrIGxheW91dCAqLwpAQCAtMTE5MSw4ICsxMzY0LDggQEAKIAkJCWJsb2NrLT5icF9ibG9jayA9IGNvdW50X2FyZWEtPmRsOwogCX0KIAlpZiAoYmxvY2stPmJwX2Jsb2NrID09IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlZvbHVtZSBoYXMgaW5jb21wYXRpYmxlIGRpc2sgbGF5b3V0Iik7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiVGhlIGRpc2sgbGF5b3V0IG9mIHRoZSBEQVNEIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVNRURJVU1UWVBFOwogCX0KIAlibG9jay0+czJiX3NoaWZ0ID0gMDsJLyogYml0cyB0byBzaGlmdCA1MTIgdG8gZ2V0IGEgYmxvY2sgKi8KQEAgLTEyMDAsMTkgKzEzNzMsMTkgQEAKIAkJYmxvY2stPnMyYl9zaGlmdCsrOwogCiAJYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsb2NrLT5icF9ibG9jayk7Ci0JYmxvY2stPmJsb2NrcyA9IChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgKgorCWJsb2NrLT5ibG9ja3MgPSAocHJpdmF0ZS0+cmVhbF9jeWwgKgogCQkJICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCAqCiAJCQkgIGJsa19wZXJfdHJrKTsKIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgIiglZGtCIGJsa3MpOiAlZGtCIGF0ICVka0IvdHJrICVzIiwKLQkJICAgIChibG9jay0+YnBfYmxvY2sgPj4gMTApLAotCQkgICAgKChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgKgotCQkgICAgICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCAqCi0JCSAgICAgIGJsa19wZXJfdHJrICogKGJsb2NrLT5icF9ibG9jayA+PiA5KSkgPj4gMSksCi0JCSAgICAoKGJsa19wZXJfdHJrICogYmxvY2stPmJwX2Jsb2NrKSA+PiAxMCksCi0JCSAgICBwcml2YXRlLT51c2VzX2NkbCA/Ci0JCSAgICAiY29tcGF0aWJsZSBkaXNrIGxheW91dCIgOiAibGludXggZGlzayBsYXlvdXQiKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAiREFTRCB3aXRoICVkIEtCL2Jsb2NrLCAlZCBLQiB0b3RhbCBzaXplLCAlZCBLQi90cmFjaywgIgorCQkgIiVzXG4iLCAoYmxvY2stPmJwX2Jsb2NrID4+IDEwKSwKKwkJICgocHJpdmF0ZS0+cmVhbF9jeWwgKgorCQkgICBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCAqCisJCSAgIGJsa19wZXJfdHJrICogKGJsb2NrLT5icF9ibG9jayA+PiA5KSkgPj4gMSksCisJCSAoKGJsa19wZXJfdHJrICogYmxvY2stPmJwX2Jsb2NrKSA+PiAxMCksCisJCSBwcml2YXRlLT51c2VzX2NkbCA/CisJCSAiY29tcGF0aWJsZSBkaXNrIGxheW91dCIgOiAibGludXggZGlzayBsYXlvdXQiKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI2MiwzMSArMTQzNSwzNSBAQAogCXN0cnVjdCBlY2tkX2NvdW50ICplY3Q7CiAJc3RydWN0IGNjdzEgKmNjdzsKIAl2b2lkICpkYXRhOwotCWludCBycHQsIGN5bCwgaGVhZDsKKwlpbnQgcnB0OworCXN0cnVjdCBjaF90IGFkZHJlc3M7CiAJaW50IGNwbGVuZ3RoLCBkYXRhc2l6ZTsKIAlpbnQgaTsKKwlpbnQgaW50ZW5zaXR5ID0gMDsKKwlpbnQgcjBfcGVybTsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAlycHQgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGZkYXRhLT5ibGtzaXplKTsKLQljeWwgPSBmZGF0YS0+c3RhcnRfdW5pdCAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOwotCWhlYWQgPSBmZGF0YS0+c3RhcnRfdW5pdCAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOworCXNldF9jaF90KCZhZGRyZXNzLAorCQkgZmRhdGEtPnN0YXJ0X3VuaXQgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIGZkYXRhLT5zdGFydF91bml0ICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpOwogCiAJLyogU2FuaXR5IGNoZWNrcy4gKi8KIAlpZiAoZmRhdGEtPnN0YXJ0X3VuaXQgPj0KLQkgICAgKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwgIlRyYWNrIG5vICVkIHRvbyBiaWchIiwKLQkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCk7CisJICAgIChwcml2YXRlLT5yZWFsX2N5bCAqIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKSkgeworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJTdGFydCB0cmFjayBudW1iZXIgJWQgdXNlZCBpbiAiCisJCQkgImZvcm1hdHRpbmcgaXMgdG9vIGJpZ1xuIiwgZmRhdGEtPnN0YXJ0X3VuaXQpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAJaWYgKGZkYXRhLT5zdGFydF91bml0ID4gZmRhdGEtPnN0b3BfdW5pdCkgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwgIlRyYWNrICVkIHJlYWNoZWQhIGVuZGluZy4iLAotCQkJICAgIGZkYXRhLT5zdGFydF91bml0KTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiU3RhcnQgdHJhY2sgJWQgdXNlZCBpbiAiCisJCQkgImZvcm1hdHRpbmcgZXhjZWVkcyBlbmQgdHJhY2tcbiIsIGZkYXRhLT5zdGFydF91bml0KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCWlmIChkYXNkX2NoZWNrX2Jsb2Nrc2l6ZShmZGF0YS0+Ymxrc2l6ZSkgIT0gMCkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCSAgICAiSW52YWxpZCBibG9ja3NpemUgJWQuLi50ZXJtaW5hdGluZyEiLAotCQkJICAgIGZkYXRhLT5ibGtzaXplKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgREFTRCBjYW5ub3QgYmUgZm9ybWF0dGVkIHdpdGggYmxvY2sgc2l6ZSAlZFxuIiwKKwkJCSBmZGF0YS0+Ymxrc2l6ZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIApAQCAtMTI5Niw5ICsxNDczLDE3IEBACiAJICogICBCaXQgMTogd3JpdGUgaG9tZSBhZGRyZXNzLCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAogCSAqICAgQml0IDI6IGludmFsaWRhdGUgdHJhY2tzCiAJICogICBCaXQgMzogdXNlIE9TLzM5MCBjb21wYXRpYmxlIGRpc2sgbGF5b3V0IChjZGwpCisJICogICBCaXQgNDogZG8gbm90IGFsbG93IHN0b3JhZ2Ugc3Vic3lzdGVtIHRvIG1vZGlmeSByZWNvcmQgemVybwogCSAqIE9ubHkgc29tZSBiaXQgY29tYmluYXRpb25zIGRvIG1ha2Ugc2Vuc2UuCiAJICovCi0Jc3dpdGNoIChmZGF0YS0+aW50ZW5zaXR5KSB7CisJaWYgKGZkYXRhLT5pbnRlbnNpdHkgJiAweDEwKSB7CisJCXIwX3Blcm0gPSAwOworCQlpbnRlbnNpdHkgPSBmZGF0YS0+aW50ZW5zaXR5ICYgfjB4MTA7CisJfSBlbHNlIHsKKwkJcjBfcGVybSA9IDE7CisJCWludGVuc2l0eSA9IGZkYXRhLT5pbnRlbnNpdHk7CisJfQorCXN3aXRjaCAoaW50ZW5zaXR5KSB7CiAJY2FzZSAweDAwOgkvKiBOb3JtYWwgZm9ybWF0ICovCiAJY2FzZSAweDA4OgkvKiBOb3JtYWwgZm9ybWF0LCB1c2UgY2RsLiAqLwogCQljcGxlbmd0aCA9IDIgKyBycHQ7CkBAIC0xMzIyLDggKzE1MDcsOCBAQAogCQkJc2l6ZW9mKHN0cnVjdCBlY2tkX2NvdW50KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJJbnZhbGlkIGZsYWdzIDB4JXguIiwKLQkJCSAgICBmZGF0YS0+aW50ZW5zaXR5KTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gSS9PIGNvbnRyb2wgY2FsbCB1c2VkICIKKwkJCSAiaW5jb3JyZWN0IGZsYWdzIDB4JXhcbiIsIGZkYXRhLT5pbnRlbnNpdHkpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAJLyogQWxsb2NhdGUgdGhlIGZvcm1hdCBjY3cgcmVxdWVzdC4gKi8KQEAgLTEzMzUsMTEgKzE1MjAsMTQgQEAKIAlkYXRhID0gZmNwLT5kYXRhOwogCWNjdyA9IGZjcC0+Y3BhZGRyOwogCi0Jc3dpdGNoIChmZGF0YS0+aW50ZW5zaXR5ICYgfjB4MDgpIHsKKwlzd2l0Y2ggKGludGVuc2l0eSAmIH4weDA4KSB7CiAJY2FzZSAweDAwOiAvKiBOb3JtYWwgZm9ybWF0LiAqLwogCQlkZWZpbmVfZXh0ZW50KGNjdysrLCAoc3RydWN0IERFX2Vja2RfZGF0YSAqKSBkYXRhLAogCQkJICAgICAgZmRhdGEtPnN0YXJ0X3VuaXQsIGZkYXRhLT5zdGFydF91bml0LAogCQkJICAgICAgREFTRF9FQ0tEX0NDV19XUklURV9DS0QsIGRldmljZSk7CisJCS8qIGdyYW50IHN1YnN5c3RlbSBwZXJtaXNzaW9uIHRvIGZvcm1hdCBSMCAqLworCQlpZiAocjBfcGVybSkKKwkJCSgoc3RydWN0IERFX2Vja2RfZGF0YSAqKWRhdGEpLT5nYV9leHRlbmRlZCB8PSAweDA0OwogCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKIAkJY2N3Wy0xXS5mbGFncyB8PSBDQ1dfRkxBR19DQzsKIAkJbG9jYXRlX3JlY29yZChjY3crKywgKHN0cnVjdCBMT19lY2tkX2RhdGEgKikgZGF0YSwKQEAgLTEzNzMsMTEgKzE1NjEsMTEgQEAKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IExPX2Vja2RfZGF0YSk7CiAJCWJyZWFrOwogCX0KLQlpZiAoZmRhdGEtPmludGVuc2l0eSAmIDB4MDEpIHsJLyogd3JpdGUgcmVjb3JkIHplcm8gKi8KKwlpZiAoaW50ZW5zaXR5ICYgMHgwMSkgewkvKiB3cml0ZSByZWNvcmQgemVybyAqLwogCQllY3QgPSAoc3RydWN0IGVja2RfY291bnQgKikgZGF0YTsKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwotCQllY3QtPmN5bCA9IGN5bDsKLQkJZWN0LT5oZWFkID0gaGVhZDsKKwkJZWN0LT5jeWwgPSBhZGRyZXNzLmN5bDsKKwkJZWN0LT5oZWFkID0gYWRkcmVzcy5oZWFkOwogCQllY3QtPnJlY29yZCA9IDA7CiAJCWVjdC0+a2wgPSAwOwogCQllY3QtPmRsID0gODsKQEAgLTEzODgsMTEgKzE1NzYsMTEgQEAKIAkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgZWN0OwogCQljY3crKzsKIAl9Ci0JaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgfjB4MDgpICYgMHgwNCkgewkvKiBlcmFzZSB0cmFjayAqLworCWlmICgoaW50ZW5zaXR5ICYgfjB4MDgpICYgMHgwNCkgewkvKiBlcmFzZSB0cmFjayAqLwogCQllY3QgPSAoc3RydWN0IGVja2RfY291bnQgKikgZGF0YTsKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IGVja2RfY291bnQpOwotCQllY3QtPmN5bCA9IGN5bDsKLQkJZWN0LT5oZWFkID0gaGVhZDsKKwkJZWN0LT5jeWwgPSBhZGRyZXNzLmN5bDsKKwkJZWN0LT5oZWFkID0gYWRkcmVzcy5oZWFkOwogCQllY3QtPnJlY29yZCA9IDE7CiAJCWVjdC0+a2wgPSAwOwogCQllY3QtPmRsID0gMDsKQEAgLTE0MDUsMjAgKzE1OTMsMjAgQEAKIAkJZm9yIChpID0gMDsgaSA8IHJwdDsgaSsrKSB7CiAJCQllY3QgPSAoc3RydWN0IGVja2RfY291bnQgKikgZGF0YTsKIAkJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBlY2tkX2NvdW50KTsKLQkJCWVjdC0+Y3lsID0gY3lsOwotCQkJZWN0LT5oZWFkID0gaGVhZDsKKwkJCWVjdC0+Y3lsID0gYWRkcmVzcy5jeWw7CisJCQllY3QtPmhlYWQgPSBhZGRyZXNzLmhlYWQ7CiAJCQllY3QtPnJlY29yZCA9IGkgKyAxOwogCQkJZWN0LT5rbCA9IDA7CiAJCQllY3QtPmRsID0gZmRhdGEtPmJsa3NpemU7CiAJCQkvKiBDaGVjayBmb3Igc3BlY2lhbCB0cmFja3MgMC0xIHdoZW4gZm9ybWF0dGluZyBDREwgKi8KLQkJCWlmICgoZmRhdGEtPmludGVuc2l0eSAmIDB4MDgpICYmCisJCQlpZiAoKGludGVuc2l0eSAmIDB4MDgpICYmCiAJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQgPT0gMCkgewogCQkJCWlmIChpIDwgMykgewogCQkJCQllY3QtPmtsID0gNDsKIAkJCQkJZWN0LT5kbCA9IHNpemVzX3RyazBbaV0gLSA0OwogCQkJCX0KIAkJCX0KLQkJCWlmICgoZmRhdGEtPmludGVuc2l0eSAmIDB4MDgpICYmCisJCQlpZiAoKGludGVuc2l0eSAmIDB4MDgpICYmCiAJCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQgPT0gMSkgewogCQkJCWVjdC0+a2wgPSA0NDsKIAkJCQllY3QtPmRsID0gTEFCRUxfU0laRSAtIDQ0OwpAQCAtMTQ3OSw1NyArMTY2Nyw2OSBAQAogCQkJCQkJICAgc3RydWN0IGlyYiAqaXJiKQogewogCWNoYXIgbWFzazsKKwljaGFyICpzZW5zZSA9IE5VTEw7CiAKIAkvKiBmaXJzdCBvZiBhbGwgY2hlY2sgZm9yIHN0YXRlIGNoYW5nZSBwZW5kaW5nIGludGVycnVwdCAqLwogCW1hc2sgPSBERVZfU1RBVF9BVFRFTlRJT04gfCBERVZfU1RBVF9ERVZfRU5EIHwgREVWX1NUQVRfVU5JVF9FWENFUDsKLQlpZiAoKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBtYXNrKSA9PSBtYXNrKSB7CisJaWYgKChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgbWFzaykgPT0gbWFzaykgewogCQlkYXNkX2dlbmVyaWNfaGFuZGxlX3N0YXRlX2NoYW5nZShkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCiAJLyogc3VtbWFyeSB1bml0IGNoZWNrICovCi0JaWYgKChpcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgJiYKKwlpZiAoKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBERVZfU1RBVF9VTklUX0NIRUNLKSAmJgogCSAgICAoaXJiLT5lY3dbN10gPT0gMHgwRCkpIHsKIAkJZGFzZF9hbGlhc19oYW5kbGVfc3VtbWFyeV91bml0X2NoZWNrKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KIAotCisJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZShpcmIpOwogCS8qIHNlcnZpY2UgaW5mb3JtYXRpb24gbWVzc2FnZSBTSU0gKi8KLQlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucyAmJiAhKGlyYi0+ZWN3WzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmCi0JICAgICgoaXJiLT5lY3dbNl0gJiBEQVNEX1NJTV9TRU5TRSkgPT0gREFTRF9TSU1fU0VOU0UpKSB7Ci0JCWRhc2RfMzk5MF9lcnBfaGFuZGxlX3NpbShkZXZpY2UsIGlyYi0+ZWN3KTsKKwlpZiAoc2Vuc2UgJiYgIShzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSAmJgorCSAgICAoKHNlbnNlWzZdICYgREFTRF9TSU1fU0VOU0UpID09IERBU0RfU0lNX1NFTlNFKSkgeworCQlkYXNkXzM5OTBfZXJwX2hhbmRsZV9zaW0oZGV2aWNlLCBzZW5zZSk7CiAJCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoKGlyYi0+c2Nzdy5jbWQuY2MgPT0gMSkgJiYKLQkgICAgKGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCSAgICAoaXJiLT5zY3N3LmNtZC5hY3RsICYgU0NTV19BQ1RMX1NUQVJUX1BFTkQpICYmCi0JICAgIChpcmItPnNjc3cuY21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpIHsKKwlpZiAoKHNjc3dfY2MoJmlyYi0+c2NzdykgPT0gMSkgJiYKKwkgICAgKHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgorCSAgICAoc2Nzd19hY3RsKCZpcmItPnNjc3cpICYgU0NTV19BQ1RMX1NUQVJUX1BFTkQpICYmCisJICAgIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpIHsKIAkJLyogZmFrZSBpcmIgZG8gbm90aGluZywgdGhleSBhcmUgaGFuZGxlZCBlbHNld2hlcmUgKi8KIAkJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICghKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpKSB7CisJaWYgKCFzZW5zZSkgewogCQkvKiBqdXN0IHJlcG9ydCBvdGhlciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAogCQkJICAgICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHQgcmVjZWl2ZWQiKTsKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKIAkJCSAgICAidW5zb2xpY2l0ZWQgaW50ZXJydXB0IHJlY2VpdmVkICIKIAkJCSAgICAiKHNlbnNlIGF2YWlsYWJsZSkiKTsKLQkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYiwKKwkJCQkJCSAgICJ1bnNvbGljaXRlZCIpOwogCX0KIAogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJcmV0dXJuOwogfTsKIAotc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcChzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwX2NtZF9zaW5nbGUoCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAogCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAotCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3RyaywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgKmlkYXdzOwpAQCAtMTUzOSwxMSArMTczOSw5IEBACiAJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOwogCXN0cnVjdCBiaW9fdmVjICpidjsKIAljaGFyICpkc3Q7Ci0JdW5zaWduZWQgaW50IGJsa3NpemUsIGJsa19wZXJfdHJrLCBvZmY7CisJdW5zaWduZWQgaW50IG9mZjsKIAlpbnQgY291bnQsIGNpZGF3LCBjcGxlbmd0aCwgZGF0YXNpemU7Ci0Jc2VjdG9yX3QgcmVjaWQsIGZpcnN0X3JlYywgbGFzdF9yZWM7Ci0Jc2VjdG9yX3QgZmlyc3RfdHJrLCBsYXN0X3RyazsKLQl1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzOworCXNlY3Rvcl90IHJlY2lkOwogCXVuc2lnbmVkIGNoYXIgY21kLCByY21kOwogCWludCB1c2VfcHJlZml4OwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKQEAgLTE1NTYsMTUgKzE3NTQsNyBAQAogCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1dSSVRFX01UOwogCWVsc2UKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCi0JYmxrc2l6ZSA9IGJsb2NrLT5icF9ibG9jazsKLQlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxrc2l6ZSk7Ci0JLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KLQlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSByZXEtPnNlY3RvciA+PiBibG9jay0+czJiX3NoaWZ0OwotCWZpcnN0X29mZnMgPSBzZWN0b3JfZGl2KGZpcnN0X3RyaywgYmxrX3Blcl90cmspOwotCWxhc3RfcmVjID0gbGFzdF90cmsgPQotCQkocmVxLT5zZWN0b3IgKyByZXEtPm5yX3NlY3RvcnMgLSAxKSA+PiBibG9jay0+czJiX3NoaWZ0OwotCWxhc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYobGFzdF90cmssIGJsa19wZXJfdHJrKTsKKwogCS8qIENoZWNrIHN0cnVjdCBiaW8gYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgYmxvY2tzIGZvciB0aGUgcmVxdWVzdC4gKi8KIAljb3VudCA9IDA7CiAJY2lkYXcgPSAwOwpAQCAtMTcxNCw2ICsxOTA0LDQ5NyBAQAogCXJldHVybiBjcXI7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3RyYWNrKAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3RyaywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUpCit7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXVuc2lnbmVkIGxvbmcgKmlkYXdzOworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKwlzdHJ1Y3QgY2N3MSAqY2N3OworCXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJY2hhciAqZHN0LCAqaWRhd19kc3Q7CisJdW5zaWduZWQgaW50IGNpZGF3LCBjcGxlbmd0aCwgZGF0YXNpemU7CisJdW5zaWduZWQgaW50IHRsZjsKKwlzZWN0b3JfdCByZWNpZDsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJdW5zaWduZWQgaW50IHRya2NvdW50LCBjb3VudCwgY291bnRfdG9fdHJrX2VuZDsKKwl1bnNpZ25lZCBpbnQgaWRhd19sZW4sIHNlZ19sZW4sIHBhcnRfbGVuLCBsZW5fdG9fdHJhY2tfZW5kOworCXVuc2lnbmVkIGNoYXIgbmV3X3RyYWNrLCBlbmRfaWRhdzsKKwlzZWN0b3JfdCB0cmtpZDsKKwl1bnNpZ25lZCBpbnQgcmVjb2ZmczsKKworCWJhc2VkZXYgPSBibG9jay0+YmFzZTsKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCWlmIChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpCisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOworCWVsc2UgaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpCisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQTsKKwllbHNlCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogVHJhY2sgYmFzZWQgSS9PIG5lZWRzIElEQVdzIGZvciBlYWNoIHBhZ2UsIGFuZCBub3QganVzdCBmb3IKKwkgKiA2NCBiaXQgYWRkcmVzc2VzLiBXZSBuZWVkIGFkZGl0aW9uYWwgaWRhbHMgZm9yIHBhZ2VzCisJICogdGhhdCBnZXQgZmlsbGVkIGZyb20gdHdvIHRyYWNrcywgc28gd2UgdXNlIHRoZSBudW1iZXIKKwkgKiBvZiByZWNvcmRzIGFzIHVwcGVyIGxpbWl0LgorCSAqLworCWNpZGF3ID0gbGFzdF9yZWMgLSBmaXJzdF9yZWMgKyAxOworCXRya2NvdW50ID0gbGFzdF90cmsgLSBmaXJzdF90cmsgKyAxOworCisJLyogMXggcHJlZml4ICsgb25lIHJlYWQvd3JpdGUgY2N3IHBlciB0cmFjayAqLworCWNwbGVuZ3RoID0gMSArIHRya2NvdW50OworCisJLyogb24gMzEtYml0IHdlIG5lZWQgc3BhY2UgZm9yIHR3byAzMiBiaXQgYWRkcmVzc2VzIHBlciBwYWdlCisJICogb24gNjQtYml0IG9uZSA2NCBiaXQgYWRkcmVzcworCSAqLworCWRhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCBQRlhfZWNrZF9kYXRhKSArCisJCWNpZGF3ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgY2N3IHJlcXVlc3QuICovCisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKKwkJCQkgICBjcGxlbmd0aCwgZGF0YXNpemUsIHN0YXJ0ZGV2KTsKKwlpZiAoSVNfRVJSKGNxcikpCisJCXJldHVybiBjcXI7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJLyogdHJhbnNmZXIgbGVuZ3RoIGZhY3RvcjogaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSBsYXN0IHRyYWNrICovCisJaWYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykKKwkJdGxmID0gbGFzdF9vZmZzIC0gZmlyc3Rfb2ZmcyArIDE7CisJZWxzZQorCQl0bGYgPSBsYXN0X29mZnMgKyAxOworCXRsZiAqPSBibGtzaXplOworCisJaWYgKHByZWZpeF9MUkUoY2N3KyssIGNxci0+ZGF0YSwgZmlyc3RfdHJrLAorCQkgICAgICAgbGFzdF90cmssIGNtZCwgYmFzZWRldiwgc3RhcnRkZXYsCisJCSAgICAgICAxIC8qIGZvcm1hdCAqLywgZmlyc3Rfb2ZmcyArIDEsCisJCSAgICAgICB0cmtjb3VudCwgYmxrc2l6ZSwKKwkJICAgICAgIHRsZikgPT0gLUVBR0FJTikgeworCQkvKiBDbG9jayBub3QgaW4gc3luYyBhbmQgWFJDIGlzIGVuYWJsZWQuCisJCSAqIFRyeSBhZ2FpbiBsYXRlci4KKwkJICovCisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJfQorCisJLyoKKwkgKiBUaGUgdHJhbnNsYXRpb24gb2YgcmVxdWVzdCBpbnRvIGNjdyBwcm9ncmFtcyBtdXN0IG1lZXQgdGhlCisJICogZm9sbG93aW5nIGNvbmRpdGlvbnM6CisJICogLSBhbGwgaWRhd3MgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgbXVzdCBhZGRyZXNzIGZ1bGwgcGFnZXMKKwkgKiAgIChvciAySyBibG9ja3Mgb24gMzEtYml0KQorCSAqIC0gdGhlIHNjb3BlIG9mIGEgY2N3IGFuZCBpdCdzIGlkYWwgZW5kcyB3aXRoIHRoZSB0cmFjayBib3VuZGFyaWVzCisJICovCisJaWRhd3MgPSAodW5zaWduZWQgbG9uZyAqKSAoY3FyLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBQRlhfZWNrZF9kYXRhKSk7CisJcmVjaWQgPSBmaXJzdF9yZWM7CisJbmV3X3RyYWNrID0gMTsKKwllbmRfaWRhdyA9IDA7CisJbGVuX3RvX3RyYWNrX2VuZCA9IDA7CisJaWRhd19kc3QgPSAwOworCWlkYXdfbGVuID0gMDsKKwlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJZHN0ID0gcGFnZV9hZGRyZXNzKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCXNlZ19sZW4gPSBidi0+YnZfbGVuOworCQl3aGlsZSAoc2VnX2xlbikgeworCQkJaWYgKG5ld190cmFjaykgeworCQkJCXRya2lkID0gcmVjaWQ7CisJCQkJcmVjb2ZmcyA9IHNlY3Rvcl9kaXYodHJraWQsIGJsa19wZXJfdHJrKTsKKwkJCQljb3VudF90b190cmtfZW5kID0gYmxrX3Blcl90cmsgLSByZWNvZmZzOworCQkJCWNvdW50ID0gbWluKChsYXN0X3JlYyAtIHJlY2lkICsgMSksCisJCQkJCSAgICAoc2VjdG9yX3QpY291bnRfdG9fdHJrX2VuZCk7CisJCQkJbGVuX3RvX3RyYWNrX2VuZCA9IGNvdW50ICogYmxrc2l6ZTsKKwkJCQljY3dbLTFdLmZsYWdzIHw9IENDV19GTEFHX0NDOworCQkJCWNjdy0+Y21kX2NvZGUgPSBjbWQ7CisJCQkJY2N3LT5jb3VudCA9IGxlbl90b190cmFja19lbmQ7CisJCQkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClpZGF3czsKKwkJCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfSURBOworCQkJCWNjdysrOworCQkJCXJlY2lkICs9IGNvdW50OworCQkJCW5ld190cmFjayA9IDA7CisJCQl9CisJCQkvKiBJZiB3ZSBzdGFydCBhIG5ldyBpZGF3LCBldmVyeXRoaW5nIGlzIGZpbmUgYW5kIHRoZQorCQkJICogc3RhcnQgb2YgdGhlIG5ldyBpZGF3IGlzIHRoZSBzdGFydCBvZiB0aGlzIHNlZ21lbnQuCisJCQkgKiBJZiB3ZSBjb250aW51ZSBhbiBpZGF3LCB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZQorCQkJICogY3VycmVudCBzZWdtZW50IGJlZ2lucyB3aGVyZSB0aGUgc28gZmFyIGFjY3VtdWxhdGVkCisJCQkgKiBpZGF3IGVuZHMKKwkJCSAqLworCQkJaWYgKCFpZGF3X2RzdCkKKwkJCQlpZGF3X2RzdCA9IGRzdDsKKwkJCWlmICgoaWRhd19kc3QgKyBpZGF3X2xlbikgIT0gZHN0KSB7CisJCQkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgc3RhcnRkZXYpOworCQkJCXJldHVybiBFUlJfUFRSKC1FUkFOR0UpOworCQkJfQorCQkJcGFydF9sZW4gPSBtaW4oc2VnX2xlbiwgbGVuX3RvX3RyYWNrX2VuZCk7CisJCQlzZWdfbGVuIC09IHBhcnRfbGVuOworCQkJZHN0ICs9IHBhcnRfbGVuOworCQkJaWRhd19sZW4gKz0gcGFydF9sZW47CisJCQlsZW5fdG9fdHJhY2tfZW5kIC09IHBhcnRfbGVuOworCQkJLyogY29sbGVjdGVkIG1lbW9yeSBhcmVhIGVuZHMgb24gYW4gSURBX0JMT0NLIGJvcmRlciwKKwkJCSAqIC0+IGNyZWF0ZSBhbiBpZGF3CisJCQkgKiBpZGFsX2NyZWF0ZV93b3JkcyB3aWxsIGhhbmRsZSBjYXNlcyB3aGVyZSBpZGF3X2xlbgorCQkJICogaXMgbGFyZ2VyIHRoZW4gSURBX0JMT0NLX1NJWkUKKwkJCSAqLworCQkJaWYgKCEoX19wYShpZGF3X2RzdCArIGlkYXdfbGVuKSAmIChJREFfQkxPQ0tfU0laRS0xKSkpCisJCQkJZW5kX2lkYXcgPSAxOworCQkJLyogV2UgYWxzbyBuZWVkIHRvIGVuZCB0aGUgaWRhdyBhdCB0cmFjayBlbmQgKi8KKwkJCWlmICghbGVuX3RvX3RyYWNrX2VuZCkgeworCQkJCW5ld190cmFjayA9IDE7CisJCQkJZW5kX2lkYXcgPSAxOworCQkJfQorCQkJaWYgKGVuZF9pZGF3KSB7CisJCQkJaWRhd3MgPSBpZGFsX2NyZWF0ZV93b3JkcyhpZGF3cywgaWRhd19kc3QsCisJCQkJCQkJICBpZGF3X2xlbik7CisJCQkJaWRhd19kc3QgPSAwOworCQkJCWlkYXdfbGVuID0gMDsKKwkJCQllbmRfaWRhdyA9IDA7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpIHx8CisJICAgIGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9GQUlMRkFTVCkKKwkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCisJY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOworCWNxci0+cmV0cmllcyA9IDI1NjsKKwljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CisJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CisJcmV0dXJuIGNxcjsKK30KKworc3RhdGljIGludCBwcmVwYXJlX2l0Y3coc3RydWN0IGl0Y3cgKml0Y3csCisJCQl1bnNpZ25lZCBpbnQgdHJrLCB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsCisJCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXYsCisJCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJdW5zaWduZWQgaW50IHJlY19vbl90cmssIGludCBjb3VudCwKKwkJCXVuc2lnbmVkIGludCBibGtzaXplLAorCQkJdW5zaWduZWQgaW50IHRvdGFsX2RhdGFfc2l6ZSwKKwkJCXVuc2lnbmVkIGludCB0bGYsCisJCQl1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmspCit7CisJc3RydWN0IFBGWF9lY2tkX2RhdGEgcGZ4ZGF0YTsKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKmJhc2Vwcml2LCAqc3RhcnRwcml2OworCXN0cnVjdCBERV9lY2tkX2RhdGEgKmRlZGF0YTsKKwlzdHJ1Y3QgTFJFX2Vja2RfZGF0YSAqbHJlZGF0YTsKKwlzdHJ1Y3QgZGN3ICpkY3c7CisKKwl1MzIgYmVnY3lsLCBlbmRjeWw7CisJdTE2IGhlYWRzLCBiZWdoZWFkLCBlbmRoZWFkOworCXU4IHBmeF9jbWQ7CisKKwlpbnQgcmMgPSAwOworCWludCBzZWN0b3IgPSAwOworCWludCBkbiwgZDsKKworCisJLyogc2V0dXAgcHJlZml4IGRhdGEgKi8KKwliYXNlcHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKKwlzdGFydHByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIHN0YXJ0ZGV2LT5wcml2YXRlOworCWRlZGF0YSA9ICZwZnhkYXRhLmRlZmluZV9leHRlbnQ7CisJbHJlZGF0YSA9ICZwZnhkYXRhLmxvY2F0ZV9yZWNvcmQ7CisKKwltZW1zZXQoJnBmeGRhdGEsIDAsIHNpemVvZihwZnhkYXRhKSk7CisJcGZ4ZGF0YS5mb3JtYXQgPSAxOyAvKiBQRlggd2l0aCBMUkUgKi8KKwlwZnhkYXRhLmJhc2VfYWRkcmVzcyA9IGJhc2Vwcml2LT5uZWQtPnVuaXRfYWRkcjsKKwlwZnhkYXRhLmJhc2VfbHNzID0gYmFzZXByaXYtPm5lZC0+SUQ7CisJcGZ4ZGF0YS52YWxpZGl0eS5kZWZpbmVfZXh0ZW50ID0gMTsKKworCS8qIHByaXZhdGUgdWlkIGlzIGtlcHQgdXAgdG8gZGF0ZSwgY29uZl9kYXRhIG1heSBiZSBvdXRkYXRlZCAqLworCWlmIChzdGFydHByaXYtPnVpZC50eXBlICE9IFVBX0JBU0VfREVWSUNFKSB7CisJCXBmeGRhdGEudmFsaWRpdHkudmVyaWZ5X2Jhc2UgPSAxOworCQlpZiAoc3RhcnRwcml2LT51aWQudHlwZSA9PSBVQV9IWVBFUl9QQVZfQUxJQVMpCisJCQlwZnhkYXRhLnZhbGlkaXR5Lmh5cGVyX3BhdiA9IDE7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOgorCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gYmxrc2l6ZTsKKwkJZGVkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQyOworCQlscmVkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDA7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDBDOworCQlscmVkYXRhLT5hdXhpbGlhcnkuY2hlY2tfYnl0ZXMgPSAweDAxOworCQlwZnhfY21kID0gREFTRF9FQ0tEX0NDV19QRlhfUkVBRDsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOworCQlkZWRhdGEtPmJsa19zaXplID0gYmxrc2l6ZTsKKwkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KCZwZnhkYXRhLCBiYXNlZGV2KTsKKwkJZGVkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQyOworCQlscmVkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDA7CisJCWxyZWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDNGOworCQlscmVkYXRhLT5leHRlbmRlZF9vcGVyYXRpb24gPSAweDIzOworCQlscmVkYXRhLT5hdXhpbGlhcnkuY2hlY2tfYnl0ZXMgPSAweDI7CisJCXBmeF9jbWQgPSBEQVNEX0VDS0RfQ0NXX1BGWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LAorCQkJICAgICAgInByZXBhcmUgaXRjdywgdW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlkZWRhdGEtPmF0dHJpYnV0ZXMubW9kZSA9IDB4MzsJLyogRUNLRCAqLworCisJaGVhZHMgPSBiYXNlcHJpdi0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJYmVnY3lsID0gdHJrIC8gaGVhZHM7CisJYmVnaGVhZCA9IHRyayAlIGhlYWRzOworCWVuZGN5bCA9IHRvdHJrIC8gaGVhZHM7CisJZW5kaGVhZCA9IHRvdHJrICUgaGVhZHM7CisKKwkvKiBjaGVjayBmb3Igc2VxdWVudGlhbCBwcmVzdGFnZSAtIGVuaGFuY2UgY3lsaW5kZXIgcmFuZ2UgKi8KKwlpZiAoZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAorCSAgICBkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgeworCisJCWlmIChlbmRjeWwgKyBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bCA8IGJhc2Vwcml2LT5yZWFsX2N5bCkKKwkJCWVuZGN5bCArPSBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bDsKKwkJZWxzZQorCQkJZW5kY3lsID0gKGJhc2Vwcml2LT5yZWFsX2N5bCAtIDEpOworCX0KKworCXNldF9jaF90KCZkZWRhdGEtPmJlZ19leHQsIGJlZ2N5bCwgYmVnaGVhZCk7CisJc2V0X2NoX3QoJmRlZGF0YS0+ZW5kX2V4dCwgZW5kY3lsLCBlbmRoZWFkKTsKKworCWRlZGF0YS0+ZXBfZm9ybWF0ID0gMHgyMDsgLyogcmVjb3JkcyBwZXIgdHJhY2sgaXMgdmFsaWQgKi8KKwlkZWRhdGEtPmVwX3JlY19wZXJfdHJhY2sgPSBibGtfcGVyX3RyazsKKworCWlmIChyZWNfb25fdHJrKSB7CisJCXN3aXRjaCAoYmFzZXByaXYtPnJkY19kYXRhLmRldl90eXBlKSB7CisJCWNhc2UgMHgzMzkwOgorCQkJZG4gPSBjZWlsX3F1b3QoYmxrc2l6ZSArIDYsIDIzMik7CisJCQlkID0gOSArIGNlaWxfcXVvdChibGtzaXplICsgNiAqIChkbiArIDEpLCAzNCk7CisJCQlzZWN0b3IgPSAoNDkgKyAocmVjX29uX3RyayAtIDEpICogKDEwICsgZCkpIC8gODsKKwkJCWJyZWFrOworCQljYXNlIDB4MzM4MDoKKwkJCWQgPSA3ICsgY2VpbF9xdW90KGJsa3NpemUgKyAxMiwgMzIpOworCQkJc2VjdG9yID0gKDM5ICsgKHJlY19vbl90cmsgLSAxKSAqICg4ICsgZCkpIC8gNzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbHJlZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDE7CisJbHJlZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF9zY29wZSA9IDE7CisJbHJlZGF0YS0+YXV4aWxpYXJ5LmltYmVkZGVkX2Njd192YWxpZCA9IDE7CisJbHJlZGF0YS0+bGVuZ3RoID0gdGxmOworCWxyZWRhdGEtPmltYmVkZGVkX2NjdyA9IGNtZDsKKwlscmVkYXRhLT5jb3VudCA9IGNvdW50OworCWxyZWRhdGEtPnNlY3RvciA9IHNlY3RvcjsKKwlzZXRfY2hfdCgmbHJlZGF0YS0+c2Vla19hZGRyLCBiZWdjeWwsIGJlZ2hlYWQpOworCWxyZWRhdGEtPnNlYXJjaF9hcmcuY3lsID0gbHJlZGF0YS0+c2Vla19hZGRyLmN5bDsKKwlscmVkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPSBscmVkYXRhLT5zZWVrX2FkZHIuaGVhZDsKKwlscmVkYXRhLT5zZWFyY2hfYXJnLnJlY29yZCA9IHJlY19vbl90cms7CisKKwlkY3cgPSBpdGN3X2FkZF9kY3coaXRjdywgcGZ4X2NtZCwgMCwKKwkJICAgICAmcGZ4ZGF0YSwgc2l6ZW9mKHBmeGRhdGEpLCB0b3RhbF9kYXRhX3NpemUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwX3RwbV90cmFjaygKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF90cmssCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBmaXJzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxhc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtfcGVyX3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtzaXplKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOworCXN0cnVjdCBiaW9fdmVjICpidjsKKwljaGFyICpkc3Q7CisJdW5zaWduZWQgaW50IHRya2NvdW50LCBjdGlkYXc7CisJdW5zaWduZWQgY2hhciBjbWQ7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2OworCXVuc2lnbmVkIGludCB0bGY7CisJc3RydWN0IGl0Y3cgKml0Y3c7CisJc3RydWN0IHRpZGF3ICpsYXN0X3RpZGF3ID0gTlVMTDsKKwlpbnQgaXRjd19vcDsKKwlzaXplX3QgaXRjd19zaXplOworCisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkgeworCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQTsKKwkJaXRjd19vcCA9IElUQ1dfT1BfUkVBRDsKKwl9IGVsc2UgaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpIHsKKwkJY21kID0gREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOworCQlpdGN3X29wID0gSVRDV19PUF9XUklURTsKKwl9IGVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiB0cmFja2Jhc2VkIEkvTyBuZWVkcyBhZGRyZXNzIGFsbCBtZW1vcnkgdmlhIFRJREFXcywKKwkgKiBub3QganVzdCBmb3IgNjQgYml0IGFkZHJlc3Nlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbWFwCisJICogZWFjaCBzZWdtZW50IGRpcmVjdGx5IHRvIG9uZSB0aWRhdy4KKwkgKi8KKwl0cmtjb3VudCA9IGxhc3RfdHJrIC0gZmlyc3RfdHJrICsgMTsKKwljdGlkYXcgPSAwOworCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgeworCQkrK2N0aWRhdzsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgY2N3IHJlcXVlc3QuICovCisJaXRjd19zaXplID0gaXRjd19jYWxjX3NpemUoMCwgY3RpZGF3LCAwKTsKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAorCQkJCSAgIDAsIGl0Y3dfc2l6ZSwgc3RhcnRkZXYpOworCWlmIChJU19FUlIoY3FyKSkKKwkJcmV0dXJuIGNxcjsKKworCWNxci0+Y3Btb2RlID0gMTsKKwljcXItPnN0YXJ0ZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKKwljcXItPmJsb2NrID0gYmxvY2s7CisJY3FyLT5leHBpcmVzID0gMTAwKkhaOworCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKwljcXItPnJldHJpZXMgPSAxMDsKKworCS8qIHRyYW5zZmVyIGxlbmd0aCBmYWN0b3I6IGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB0aGUgbGFzdCB0cmFjayAqLworCWlmIChmaXJzdF90cmsgPT0gbGFzdF90cmspCisJCXRsZiA9IGxhc3Rfb2ZmcyAtIGZpcnN0X29mZnMgKyAxOworCWVsc2UKKwkJdGxmID0gbGFzdF9vZmZzICsgMTsKKwl0bGYgKj0gYmxrc2l6ZTsKKworCWl0Y3cgPSBpdGN3X2luaXQoY3FyLT5kYXRhLCBpdGN3X3NpemUsIGl0Y3dfb3AsIDAsIGN0aWRhdywgMCk7CisJY3FyLT5jcGFkZHIgPSBpdGN3X2dldF90Y3coaXRjdyk7CisKKwlpZiAocHJlcGFyZV9pdGN3KGl0Y3csIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkgY21kLCBiYXNlZGV2LCBzdGFydGRldiwKKwkJCSBmaXJzdF9vZmZzICsgMSwKKwkJCSB0cmtjb3VudCwgYmxrc2l6ZSwKKwkJCSAobGFzdF9yZWMgLSBmaXJzdF9yZWMgKyAxKSAqIGJsa3NpemUsCisJCQkgdGxmLCBibGtfcGVyX3RyaykgPT0gLUVBR0FJTikgeworCQkvKiBDbG9jayBub3QgaW4gc3luYyBhbmQgWFJDIGlzIGVuYWJsZWQuCisJCSAqIFRyeSBhZ2FpbiBsYXRlci4KKwkJICovCisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJfQorCisJLyoKKwkgKiBBIHRpZGF3IGNhbiBhZGRyZXNzIDRrIG9mIG1lbW9yeSwgYnV0IG11c3Qgbm90IGNyb3NzIHBhZ2UgYm91bmRhcmllcworCSAqIFdlIGNhbiBsZXQgdGhlIGJsb2NrIGxheWVyIGhhbmRsZSB0aGlzIGJ5IHNldHRpbmcKKwkgKiBibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeSB0byBwYWdlIGJvdW5kYXJpZXMgYW5kCisJICogYmxrX21heF9zZWdtZW50X3NpemUgdG8gcGFnZSBzaXplIHdoZW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCBxdWV1ZS4KKwkgKi8KKwlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJZHN0ID0gcGFnZV9hZGRyZXNzKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCWxhc3RfdGlkYXcgPSBpdGN3X2FkZF90aWRhdyhpdGN3LCAweDAwLCBkc3QsIGJ2LT5idl9sZW4pOworCQlpZiAoSVNfRVJSKGxhc3RfdGlkYXcpKQorCQkJcmV0dXJuIChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopbGFzdF90aWRhdzsKKwl9CisKKwlsYXN0X3RpZGF3LT5mbGFncyB8PSAweDgwOworCWl0Y3dfZmluYWxpemUoaXRjdyk7CisKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpIHx8CisJICAgIGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9GQUlMRkFTVCkKKwkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCisJY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOworCWNxci0+cmV0cmllcyA9IDI1NjsKKwljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CisJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CisJcmV0dXJuIGNxcjsKK30KKworc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcChzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlpbnQgdHBtLCBjbWRydGQsIGNtZHd0ZDsKKwlpbnQgdXNlX3ByZWZpeDsKKworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgZmN4X2luX2NzcywgZmN4X2luX2duZXEsIGZjeF9pbl9mZWF0dXJlczsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJc2VjdG9yX3QgZmlyc3RfcmVjLCBsYXN0X3JlYzsKKwlzZWN0b3JfdCBmaXJzdF90cmssIGxhc3RfdHJrOworCXVuc2lnbmVkIGludCBmaXJzdF9vZmZzLCBsYXN0X29mZnM7CisJdW5zaWduZWQgaW50IGJsa19wZXJfdHJrLCBibGtzaXplOworCWludCBjZGxzcGVjaWFsOworCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKworCWJhc2VkZXYgPSBibG9jay0+YmFzZTsKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCisJLyogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MvcmVjb3JkcyBwZXIgdHJhY2suICovCisJYmxrc2l6ZSA9IGJsb2NrLT5icF9ibG9jazsKKwlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxrc2l6ZSk7CisJLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KKwlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSByZXEtPnNlY3RvciA+PiBibG9jay0+czJiX3NoaWZ0OworCWZpcnN0X29mZnMgPSBzZWN0b3JfZGl2KGZpcnN0X3RyaywgYmxrX3Blcl90cmspOworCWxhc3RfcmVjID0gbGFzdF90cmsgPQorCQkocmVxLT5zZWN0b3IgKyByZXEtPm5yX3NlY3RvcnMgLSAxKSA+PiBibG9jay0+czJiX3NoaWZ0OworCWxhc3Rfb2ZmcyA9IHNlY3Rvcl9kaXYobGFzdF90cmssIGJsa19wZXJfdHJrKTsKKwljZGxzcGVjaWFsID0gKHByaXZhdGUtPnVzZXNfY2RsICYmIGZpcnN0X3JlYyA8IDIqYmxrX3Blcl90cmspOworCisJLyogaXMgdHJhbnNwb3J0IG1vZGUgc3VwcG9ydGVkID8gKi8KKwlmY3hfaW5fY3NzID0gY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmZjeDsKKwlmY3hfaW5fZ25lcSA9IHByaXZhdGUtPmduZXEtPnJlc2VydmVkMls3XSAmIDB4MDQ7CisJZmN4X2luX2ZlYXR1cmVzID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs0MF0gJiAweDgwOworCXRwbSA9IGZjeF9pbl9jc3MgJiYgZmN4X2luX2duZXEgJiYgZmN4X2luX2ZlYXR1cmVzOworCisJLyogaXMgcmVhZCB0cmFjayBkYXRhIGFuZCB3cml0ZSB0cmFjayBkYXRhIGluIGNvbW1hbmQgbW9kZSBzdXBwb3J0ZWQ/ICovCisJY21kcnRkID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs5XSAmIDB4MjA7CisJY21kd3RkID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVsxMl0gJiAweDQwOworCXVzZV9wcmVmaXggPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzhdICYgMHgwMTsKKworCWNxciA9IE5VTEw7CisJaWYgKGNkbHNwZWNpYWwgfHwgZGFzZF9wYWdlX2NhY2hlKSB7CisJCS8qIGRvIG5vdGhpbmcsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBjbWQgbW9kZSBzaW5nbGUgY2FzZSAqLworCX0gZWxzZSBpZiAoIWRhc2Rfbm9mY3ggJiYgdHBtICYmIChmaXJzdF90cmsgPT0gbGFzdF90cmspKSB7CisJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF90cG1fdHJhY2soc3RhcnRkZXYsIGJsb2NrLCByZXEsCisJCQkJCQkgICAgZmlyc3RfcmVjLCBsYXN0X3JlYywKKwkJCQkJCSAgICBmaXJzdF90cmssIGxhc3RfdHJrLAorCQkJCQkJICAgIGZpcnN0X29mZnMsIGxhc3Rfb2ZmcywKKwkJCQkJCSAgICBibGtfcGVyX3RyaywgYmxrc2l6ZSk7CisJCWlmIChJU19FUlIoY3FyKSAmJiBQVFJfRVJSKGNxcikgIT0gLUVBR0FJTikKKwkJCWNxciA9IE5VTEw7CisJfSBlbHNlIGlmICh1c2VfcHJlZml4ICYmCisJCSAgICgoKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkgJiYgY21kcnRkKSB8fAorCQkgICAgKChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSAmJiBjbWR3dGQpKSkgeworCQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3RyYWNrKHN0YXJ0ZGV2LCBibG9jaywgcmVxLAorCQkJCQkJICAgZmlyc3RfcmVjLCBsYXN0X3JlYywKKwkJCQkJCSAgIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkJCQkgICBmaXJzdF9vZmZzLCBsYXN0X29mZnMsCisJCQkJCQkgICBibGtfcGVyX3RyaywgYmxrc2l6ZSk7CisJCWlmIChJU19FUlIoY3FyKSAmJiBQVFJfRVJSKGNxcikgIT0gLUVBR0FJTikKKwkJCWNxciA9IE5VTEw7CisJfQorCWlmICghY3FyKQorCQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfY3BfY21kX3NpbmdsZShzdGFydGRldiwgYmxvY2ssIHJlcSwKKwkJCQkJCSAgICBmaXJzdF9yZWMsIGxhc3RfcmVjLAorCQkJCQkJICAgIGZpcnN0X3RyaywgbGFzdF90cmssCisJCQkJCQkgICAgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzLAorCQkJCQkJICAgIGJsa19wZXJfdHJrLCBibGtzaXplKTsKKwlyZXR1cm4gY3FyOworfQorCiBzdGF0aWMgaW50CiBkYXNkX2Vja2RfZnJlZV9jcChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CkBAIC0xNzY3LDcgKzI0NDgsNyBAQAogfQogCiAvKgotICogTW9kaWZ5IGNjdyBjaGFpbiBpbiBjcXIgc28gaXQgY2FuIGJlIHN0YXJ0ZWQgb24gYSBiYXNlIGRldmljZS4KKyAqIE1vZGlmeSBjY3cvdGN3IGluIGNxciBzbyBpdCBjYW4gYmUgc3RhcnRlZCBvbiBhIGJhc2UgZGV2aWNlLgogICoKICAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBlbm91Z2ggdG8gcmVzdGFydCB0aGUgY3FyIQogICogRWl0aGVyIHJlc2V0IGNxci0+c3RhcnRkZXYgYXMgd2VsbCAoc3VtbWFyeSB1bml0IGNoZWNrIGhhbmRsaW5nKQpAQCAtMTc3NywxMyArMjQ1OCwyNCBAQAogewogCXN0cnVjdCBjY3cxICpjY3c7CiAJc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGE7CisJc3RydWN0IHRjdyAqdGN3OworCXN0cnVjdCB0Y2NiICp0Y2NiOworCXN0cnVjdCBkY3cgKmRjdzsKIAotCWNjdyA9IGNxci0+Y3BhZGRyOwotCXBmeGRhdGEgPSBjcXItPmRhdGE7Ci0KLQlpZiAoY2N3LT5jbWRfY29kZSA9PSBEQVNEX0VDS0RfQ0NXX1BGWCkgeworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCXRjdyA9IGNxci0+Y3BhZGRyOworCQl0Y2NiID0gdGN3X2dldF90Y2NiKHRjdyk7CisJCWRjdyA9IChzdHJ1Y3QgZGN3ICopJnRjY2ItPnRjYVswXTsKKwkJcGZ4ZGF0YSA9IChzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqKSZkY3ctPmNkWzBdOwogCQlwZnhkYXRhLT52YWxpZGl0eS52ZXJpZnlfYmFzZSA9IDA7CiAJCXBmeGRhdGEtPnZhbGlkaXR5Lmh5cGVyX3BhdiA9IDA7CisJfSBlbHNlIHsKKwkJY2N3ID0gY3FyLT5jcGFkZHI7CisJCXBmeGRhdGEgPSBjcXItPmRhdGE7CisJCWlmIChjY3ctPmNtZF9jb2RlID09IERBU0RfRUNLRF9DQ1dfUEZYKSB7CisJCQlwZnhkYXRhLT52YWxpZGl0eS52ZXJpZnlfYmFzZSA9IDA7CisJCQlwZnhkYXRhLT52YWxpZGl0eS5oeXBlcl9wYXYgPSAwOworCQl9CiAJfQogfQogCkBAIC0xODYxLDYgKzI1NTMsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xODY4LDE0ICsyNTYxLDE1IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9Ci0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRUxFQVNFOwotICAgICAgICBjcXItPmNwYWRkci0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOwotICAgICAgICBjcXItPmNwYWRkci0+Y291bnQgPSAzMjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRUxFQVNFOworCWNjdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOworCWNjdy0+Y291bnQgPSAzMjsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtMTkwMiw2ICsyNTk2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMTkwOSwxNCArMjYwNCwxNSBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCiAJCQkJICAgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVTRVJWRTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmNvdW50ID0gMzI7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVTRVJWRTsKKwljY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKKwljY3ctPmNvdW50ID0gMzI7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTE5NDIsNiArMjYzOCw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTE5NDksMTQgKzI2NDYsMTUgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NMQ0s7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5jb3VudCA9IDMyOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NMQ0s7CisJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7CisJY2N3LT5jb3VudCA9IDMyOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CkBAIC0xOTkwLDcgKzI2ODgsNyBAQAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGRhc2RfcnNzZF9wZXJmX3N0YXRzX3QpKSwKIAkJCQkgICBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KQEAgLTIwODAsOSArMjc3OCw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCXByaXZhdGUtPmF0dHJpYiA9IGF0dHJpYjsKIAotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgImNhY2hlIG9wZXJhdGlvbiBtb2RlIHNldCB0byAleCAoJWkgY3lsaW5kZXIgcHJlc3RhZ2UpIiwKLQkJICAgIHByaXZhdGUtPmF0dHJpYi5vcGVyYXRpb24sIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJICJUaGUgREFTRCBjYWNoZSBtb2RlIHdhcyBzZXQgdG8gJXggKCVpIGN5bGluZGVyIHByZXN0YWdlKVxuIiwKKwkJIHByaXZhdGUtPmF0dHJpYi5vcGVyYXRpb24sIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTMzLDcgKzI4MzEsNyBAQAogCS8qIHNldHVwIENDV3MgZm9yIFBTRiArIFJTU0QgKi8KIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDIgLCAwLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJjID0gUFRSX0VSUihjcXIpOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjI0MiwxMSArMjk0MCw1NCBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyB2b2lkCitkYXNkX2Vja2RfZHVtcF9zZW5zZV9kYmYoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwKKwkJCSBzdHJ1Y3QgaXJiICppcmIsIGNoYXIgKnJlYXNvbikKK3sKKwl1NjQgKnNlbnNlOworCWludCBzbDsKKwlzdHJ1Y3QgdHNiICp0c2I7CisKKwlzZW5zZSA9IE5VTEw7CisJdHNiID0gTlVMTDsKKwlpZiAocmVxICYmIHNjc3dfaXNfdG0oJnJlcS0+aXJiLnNjc3cpKSB7CisJCWlmIChpcmItPnNjc3cudG0udGN3KQorCQkJdHNiID0gdGN3X2dldF90c2IoCisJCQkJKHN0cnVjdCB0Y3cgKikodW5zaWduZWQgbG9uZylpcmItPnNjc3cudG0udGN3KTsKKwkJaWYgKHRzYiAmJiAoaXJiLT5zY3N3LnRtLmZjeHMgPT0gMHgwMSkpIHsKKwkJCXN3aXRjaCAodHNiLT5mbGFncyAmIDB4MDcpIHsKKwkJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJCXNlbnNlID0gKHU2NCAqKXRzYi0+dHNhLmlvc3RhdC5zZW5zZTsKKwkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiB0c19kZHBjICovCisJCQkJc2Vuc2UgPSAodTY0ICopdHNiLT50c2EuZGRwYy5zZW5zZTsKKwkJCWJyZWFrOworCQkJY2FzZSAzOiAvKiB0c2FfaW50cmcgKi8KKwkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpCisJCQlzZW5zZSA9ICh1NjQgKilpcmItPmVjdzsKKwl9CisJaWYgKHNlbnNlKSB7CisJCWZvciAoc2wgPSAwOyBzbCA8IDQ7IHNsKyspIHsKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VNRVJHLCBkZXZpY2UsCisJCQkJICAgICAgIiVzOiAlMDE2bGx4ICUwMTZsbHggJTAxNmxseCAlMDE2bGx4IiwKKwkJCQkgICAgICByZWFzb24sIHNlbnNlWzBdLCBzZW5zZVsxXSwgc2Vuc2VbMl0sCisJCQkJICAgICAgc2Vuc2VbM10pOworCQl9CisJfSBlbHNlIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CisJfQorfQorCiAvKgogICogUHJpbnQgc2Vuc2UgZGF0YSBhbmQgcmVsYXRlZCBjaGFubmVsIHByb2dyYW0uCiAgKiBQYXJ0cyBhcmUgcHJpbnRlZCBiZWNhdXNlIHByaW50ayBidWZmZXIgaXMgb25seSAxMDI0IGJ5dGVzLgogICovCi1zdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKK3N0YXRpYyB2b2lkIGRhc2RfZWNrZF9kdW1wX3NlbnNlX2NjdyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKIAkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJY2hhciAqcGFnZTsKQEAgLTIyNTUsOCArMjk5Niw4IEBACiAKIAlwYWdlID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmIChwYWdlID09IE5VTEwpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiAlcyIsCi0JCQkgICAgIk5vIG1lbW9yeSB0byBkdW1wIHNlbnNlIGRhdGEiKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIk5vIG1lbW9yeSB0byBkdW1wIHNlbnNlIGRhdGFcbiIpOwogCQlyZXR1cm47CiAJfQogCS8qIGR1bXAgdGhlIHNlbnNlIGRhdGEgKi8KQEAgLTIyNjUsNyArMzAwNiw3IEBACiAJCSAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJICAgICAgICIgaW4gcmVxOiAlcCBDUzogMHglMDJYIERTOiAweCUwMlhcbiIsIHJlcSwKLQkJICAgICAgIGlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOworCQkgICAgICAgc2Nzd19jc3RhdCgmaXJiLT5zY3N3KSwgc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSk7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgogCQkgICAgICAgIiBkZXZpY2UgJXM6IEZhaWxpbmcgQ0NXOiAlcFxuIiwKIAkJICAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCkBAIC0yMzQxLDYgKzMwODIsMTQ3IEBACiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKIH0KIAorCisvKgorICogUHJpbnQgc2Vuc2UgZGF0YSBmcm9tIGEgdGN3LgorICovCitzdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZV90Y3coc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwgc3RydWN0IGlyYiAqaXJiKQoreworCWNoYXIgKnBhZ2U7CisJaW50IGxlbiwgc2wsIHNjdCwgcmVzaWR1YWw7CisKKwlzdHJ1Y3QgdHNiICp0c2I7CisJdTggKnNlbnNlOworCisKKwlwYWdlID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCWlmIChwYWdlID09IE5VTEwpIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiICVzIiwKKwkJCSAgICAiTm8gbWVtb3J5IHRvIGR1bXAgc2Vuc2UgZGF0YSIpOworCQlyZXR1cm47CisJfQorCS8qIGR1bXAgdGhlIHNlbnNlIGRhdGEgKi8KKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCSAgICAgICIgSS9PIHN0YXR1cyByZXBvcnQgZm9yIGRldmljZSAlczpcbiIsCisJCSAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJICAgICAgICIgaW4gcmVxOiAlcCBDUzogMHglMDJYIERTOiAweCUwMlggIgorCQkgICAgICAgImZjeHM6IDB4JTAyWCBzY2h4czogMHglMDJYXG4iLCByZXEsCisJCSAgICAgICBzY3N3X2NzdGF0KCZpcmItPnNjc3cpLCBzY3N3X2RzdGF0KCZpcmItPnNjc3cpLAorCQkgICAgICAgaXJiLT5zY3N3LnRtLmZjeHMsIGlyYi0+c2Nzdy50bS5zY2h4cyk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkgICAgICAgIiBkZXZpY2UgJXM6IEZhaWxpbmcgVENXOiAlcFxuIiwKKwkJICAgICAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCisJCSAgICAgICAodm9pZCAqKSAoYWRkcl90KSBpcmItPnNjc3cudG0udGN3KTsKKworCXRzYiA9IE5VTEw7CisJc2Vuc2UgPSBOVUxMOworCWlmIChpcmItPnNjc3cudG0udGN3KQorCQl0c2IgPSB0Y3dfZ2V0X3RzYigKKwkJCShzdHJ1Y3QgdGN3ICopKHVuc2lnbmVkIGxvbmcpaXJiLT5zY3N3LnRtLnRjdyk7CisKKwlpZiAodHNiICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmxlbmd0aCAlZFxuIiwgdHNiLT5sZW5ndGgpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmZsYWdzICV4XG4iLCB0c2ItPmZsYWdzKTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT5kY3dfb2Zmc2V0ICVkXG4iLCB0c2ItPmRjd19vZmZzZXQpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPmNvdW50ICVkXG4iLCB0c2ItPmNvdW50KTsKKwkJcmVzaWR1YWwgPSB0c2ItPmNvdW50IC0gMjg7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHJlc2lkdWFsICVkXG4iLCByZXNpZHVhbCk7CisKKwkJc3dpdGNoICh0c2ItPmZsYWdzICYgMHgwNykgeworCQljYXNlIDE6CS8qIHRzYV9pb3N0YXQgKi8KKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZXZfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRldl90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZWZfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRlZl90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5xdWV1ZV90aW1lICVkXG4iLAorCQkJCSAgICAgICB0c2ItPnRzYS5pb3N0YXQucXVldWVfdGltZSk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQuZGV2X2J1c3lfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRldl9idXN5X3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRldl9hY3RfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LmRldl9hY3RfdGltZSk7CisJCQlzZW5zZSA9IHRzYi0+dHNhLmlvc3RhdC5zZW5zZTsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIHRzX2RkcGMgKi8KKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmRkcGMucmMgJWRcbiIsIHRzYi0+dHNhLmRkcGMucmMpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuZGRwYy5yY3E6ICAiKTsKKwkJCWZvciAoc2wgPSAwOyBzbCA8IDE2OyBzbCsrKSB7CisJCQkJZm9yIChzY3QgPSAwOyBzY3QgPCA4OyBzY3QrKykgeworCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiICUwMngiLAorCQkJCQkJICAgICAgIHRzYi0+dHNhLmRkcGMucmNxW3NsXSk7CisJCQkJfQorCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCQkJfQorCQkJc2Vuc2UgPSB0c2ItPnRzYS5kZHBjLnNlbnNlOworCQkJYnJlYWs7CisJCWNhc2UgMzogLyogdHNhX2ludHJnICovCisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJICAgICAgIiB0c2ItPnRzYS5pbnRyZy46IG5vdCBzdXBwb3J0ZXQgeWV0IFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzZW5zZSkgeworCQkJZm9yIChzbCA9IDA7IHNsIDwgNDsgc2wrKykgeworCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCisJCQkJCSAgICAgICBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJCSAgICAgICAiIFNlbnNlKGhleCkgJTJkLSUyZDoiLAorCQkJCQkgICAgICAgKDggKiBzbCksICgoOCAqIHNsKSArIDcpKTsKKwkJCQlmb3IgKHNjdCA9IDA7IHNjdCA8IDg7IHNjdCsrKSB7CisJCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgJTAyeCIsCisJCQkJCQkgICAgICAgc2Vuc2VbOCAqIHNsICsgc2N0XSk7CisJCQkJfQorCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCQkJfQorCisJCQlpZiAoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgeworCQkJCS8qIDI0IEJ5dGUgU2Vuc2UgRGF0YSAqLworCQkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCQkiIDI0IEJ5dGU6ICV4IE1TRyAleCwgIgorCQkJCQkiJXMgTVNHYiB0byBTWVNPUFxuIiwKKwkJCQkJc2Vuc2VbN10gPj4gNCwgc2Vuc2VbN10gJiAweDBmLAorCQkJCQlzZW5zZVsxXSAmIDB4MTAgPyAiIiA6ICJubyIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAzMiBCeXRlIFNlbnNlIERhdGEgKi8KKwkJCQlzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkJIiAzMiBCeXRlOiBGb3JtYXQ6ICV4ICIKKwkJCQkJIkV4Y2VwdGlvbiBjbGFzcyAleFxuIiwKKwkJCQkJc2Vuc2VbNl0gJiAweDBmLCBzZW5zZVsyMl0gPj4gNCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkiIFNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJIiBTT1JSWSAtIE5PIFRTQiBEQVRBIEFWQUlMQUJMRVxuIik7CisJfQorCXByaW50aygiJXMiLCBwYWdlKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLCBzdHJ1Y3QgaXJiICppcmIpCit7CisJaWYgKHJlcSAmJiBzY3N3X2lzX3RtKCZyZXEtPmlyYi5zY3N3KSkKKwkJZGFzZF9lY2tkX2R1bXBfc2Vuc2VfdGN3KGRldmljZSwgcmVxLCBpcmIpOworCWVsc2UKKwkJZGFzZF9lY2tkX2R1bXBfc2Vuc2VfY2N3KGRldmljZSwgcmVxLCBpcmIpOworfQorCisKIC8qCiAgKiBtYXhfYmxvY2tzIGlzIGRlcGVuZGVudCBvbiB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgdGhhdCBpcyBhdmFpbGFibGUKICAqIGluIHRoZSBzdGF0aWMgaW8gYnVmZmVyIGZvciBlYWNoIGRldmljZS4gQ3VycmVudGx5IGVhY2ggZGV2aWNlIGhhcwpAQCAtMjM3NSw2ICszMjU3LDcgQEAKIAkuYnVpbGRfY3AgPSBkYXNkX2Vja2RfYnVpbGRfYWxpYXNfY3AsCiAJLmZyZWVfY3AgPSBkYXNkX2Vja2RfZnJlZV9hbGlhc19jcCwKIAkuZHVtcF9zZW5zZSA9IGRhc2RfZWNrZF9kdW1wX3NlbnNlLAorCS5kdW1wX3NlbnNlX2RiZiA9IGRhc2RfZWNrZF9kdW1wX3NlbnNlX2RiZiwKIAkuZmlsbF9pbmZvID0gZGFzZF9lY2tkX2ZpbGxfaW5mbywKIAkuaW9jdGwgPSBkYXNkX2Vja2RfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCmluZGV4IDI0NzZmODcuLmFkNDViY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKQEAgLTM4LDggKzM4LDExIEBACiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVMRUFTRQkJIDB4OTQKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUFEX0NLRF9NVAkgMHg5ZQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRF9NVAkgMHg5ZAorI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEEJIDB4QTUKKyNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEEJIDB4QTYKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRVNFUlZFCQkgMHhCNAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1BGWAkJIDB4RTcKKyNkZWZpbmUgREFTRF9FQ0tEX0NDV19QRlhfUkVBRAkJIDB4RUEKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SU0NLCQkgMHhGOQogCiAvKgpAQCAtNDgsNiArNTEsMTEgQEAKICNkZWZpbmUgUFNGX09SREVSX1BSU1NEIDB4MTgKICNkZWZpbmUgUFNGX09SREVSX1NTQwkweDFECiAKKy8qCisgKiBTaXplIHRoYXQgaXMgcmVwb3J0ZXQgZm9yIGxhcmdlIHZvbHVtZXMgaW4gdGhlIG9sZCAxNi1iaXQgbm9fY3lsIGZpZWxkCisgKi8KKyNkZWZpbmUgTFZfQ09NUEFUX0NZTCAweEZGRkUKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRUNUSU9OOiBUeXBlIERlZmluaXRpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExOCw3ICsxMjYsOSBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBlcF9zeXNfdGltZTsgLyogRXh0IFBhcmFtZXRlciAtIFN5c3RlbSBUaW1lIFN0YW1wICovCiAJX191OCBlcF9mb3JtYXQ7ICAgICAgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgZm9ybWF0IGJ5dGUgICAgICAgKi8KIAlfX3U4IGVwX3ByaW87ICAgICAgICAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBwcmlvcml0eSBJL08gYnl0ZSAqLwotCV9fdTggZXBfcmVzZXJ2ZWRbNl07ICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIFJlc2VydmVkICAgICAgICAgICovCisJX191OCBlcF9yZXNlcnZlZDE7ICAgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgUmVzZXJ2ZWQJICAgICAgICovCisJX191OCBlcF9yZWNfcGVyX3RyYWNrOyAvKiBOdW1iZXIgb2YgcmVjb3JkcyBvbiBhIHRyYWNrCSAgICAgICAqLworCV9fdTggZXBfcmVzZXJ2ZWRbNF07ICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIFJlc2VydmVkCSAgICAgICAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBMT19lY2tkX2RhdGEgewpAQCAtMTM5LDExICsxNDksMzcgQEAKIAlfX3UxNiBsZW5ndGg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IExSRV9lY2tkX2RhdGEgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgb3JpZW50YXRpb246MjsKKwkJdW5zaWduZWQgY2hhciBvcGVyYXRpb246NjsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBvcGVyYXRpb247CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBsZW5ndGhfdmFsaWQ6MTsKKwkJdW5zaWduZWQgY2hhciBsZW5ndGhfc2NvcGU6MTsKKwkJdW5zaWduZWQgY2hhciBpbWJlZGRlZF9jY3dfdmFsaWQ6MTsKKwkJdW5zaWduZWQgY2hhciBjaGVja19ieXRlczoyOworCQl1bnNpZ25lZCBjaGFyIGltYmVkZGVkX2NvdW50X3ZhbGlkOjE7CisJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ6MTsKKwkJdW5zaWduZWQgY2hhciByZWFkX2NvdW50X3N1ZmZpeDoxOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF1eGlsaWFyeTsKKwlfX3U4IGltYmVkZGVkX2NjdzsKKwlfX3U4IGNvdW50OworCXN0cnVjdCBjaF90IHNlZWtfYWRkcjsKKwlzdHJ1Y3QgY2hyX3Qgc2VhcmNoX2FyZzsKKwlfX3U4IHNlY3RvcjsKKwlfX3UxNiBsZW5ndGg7CisJX191OCBpbWJlZGRlZF9jb3VudDsKKwlfX3U4IGV4dGVuZGVkX29wZXJhdGlvbjsKKwlfX3UxNiBleHRlbmRlZF9wYXJhbWV0ZXJfbGVuZ3RoOworCV9fdTggZXh0ZW5kZWRfcGFyYW1ldGVyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIFByZWZpeCBkYXRhIGZvciBmb3JtYXQgMHgwMCBhbmQgMHgwMSAqLwogc3RydWN0IFBGWF9lY2tkX2RhdGEgewogCXVuc2lnbmVkIGNoYXIgZm9ybWF0OwogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGNoYXIgZGVmaW5lX2V4dGVuZDoxOworCQl1bnNpZ25lZCBjaGFyIGRlZmluZV9leHRlbnQ6MTsKIAkJdW5zaWduZWQgY2hhciB0aW1lX3N0YW1wOjE7CiAJCXVuc2lnbmVkIGNoYXIgdmVyaWZ5X2Jhc2U6MTsKIAkJdW5zaWduZWQgY2hhciBoeXBlcl9wYXY6MTsKQEAgLTE1Myw5ICsxODksOCBAQAogCV9fdTggYXV4OwogCV9fdTggYmFzZV9sc3M7CiAJX191OCByZXNlcnZlZFs3XTsKLQlzdHJ1Y3QgREVfZWNrZF9kYXRhIGRlZmluZV9leHRlbmQ7Ci0Jc3RydWN0IExPX2Vja2RfZGF0YSBsb2NhdGVfcmVjb3JkOwotCV9fdTggTE9fZXh0ZW5kZWRfZGF0YVs0XTsKKwlzdHJ1Y3QgREVfZWNrZF9kYXRhIGRlZmluZV9leHRlbnQ7CisJc3RydWN0IExSRV9lY2tkX2RhdGEgbG9jYXRlX3JlY29yZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgZGFzZF9lY2tkX2NoYXJhY3RlcmlzdGljcyB7CkBAIC0yMjgsNyArMjYzLDggQEAKIAlfX3U4IGZhY3Rvcjc7CiAJX191OCBmYWN0b3I4OwogCV9fdTggcmVzZXJ2ZWQyWzNdOwotCV9fdTggcmVzZXJ2ZWQzWzEwXTsKKwlfX3U4IHJlc2VydmVkM1s2XTsKKwlfX3UzMiBsb25nX25vX2N5bDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBlbGVtZW50cyBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhICovCkBAIC00MDYsNiArNDQyLDcgQEAKIAlpbnQgdXNlc19jZGw7CiAJc3RydWN0IGF0dHJpYl9kYXRhX3QgYXR0cmliOwkvKiBlLmcuIGNhY2hlIG9wZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgZGFzZF9yc3NkX2ZlYXR1cmVzIGZlYXR1cmVzOworCXUzMiByZWFsX2N5bDsKIAogCS8qIGFsaWFzIG1hbmFnZW1uZXQgKi8KIAlzdHJ1Y3QgZGFzZF91aWQgdWlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwppbmRleCBmOGUwNWNlLi5jMjRjOGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwpAQCAtNiw2ICs2LDggQEAKICAqICBBdXRob3Iocyk6IFN0ZWZhbiBXZWluaHViZXIgPHdlaW5AZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOTcsMTEgKzI5OSwxMiBAQAogCXN0cnVjdCBkYXNkX2Vlcl9oZWFkZXIgaGVhZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVlcmJ1ZmZlciAqZWVyYjsKKwljaGFyICpzZW5zZTsKIAogCS8qIGdvIHRocm91Z2ggY3FyIGNoYWluIGFuZCBjb3VudCB0aGUgdmFsaWQgc2Vuc2UgZGF0YSBzZXRzICovCiAJZGF0YV9zaXplID0gMDsKIAlmb3IgKHRlbXBfY3FyID0gY3FyOyB0ZW1wX2NxcjsgdGVtcF9jcXIgPSB0ZW1wX2Nxci0+cmVmZXJzKQotCQlpZiAodGVtcF9jcXItPmlyYi5lc3cuZXN3MC5lcncuY29ucykKKwkJaWYgKGRhc2RfZ2V0X3NlbnNlKCZ0ZW1wX2Nxci0+aXJiKSkKIAkJCWRhdGFfc2l6ZSArPSAzMjsKIAogCWhlYWRlci50b3RhbF9zaXplID0gc2l6ZW9mKGhlYWRlcikgKyBkYXRhX3NpemUgKyA0OyAvKiAiRU9SIiAqLwpAQCAtMzE2LDkgKzMxOSwxMSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZWVyYiwgJmJ1ZmZlcmxpc3QsIGxpc3QpIHsKIAkJZGFzZF9lZXJfc3RhcnRfcmVjb3JkKGVlcmIsIGhlYWRlci50b3RhbF9zaXplKTsKIAkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIChjaGFyICopICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLQkJZm9yICh0ZW1wX2NxciA9IGNxcjsgdGVtcF9jcXI7IHRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVycykKLQkJCWlmICh0ZW1wX2Nxci0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQotCQkJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBjcXItPmlyYi5lY3csIDMyKTsKKwkJZm9yICh0ZW1wX2NxciA9IGNxcjsgdGVtcF9jcXI7IHRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVycykgeworCQkJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZSgmdGVtcF9jcXItPmlyYik7CisJCQlpZiAoc2Vuc2UpCisJCQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIHNlbnNlLCAzMik7CisJCX0KIAkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsICJFT1IiLCA0KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwpAQCAtNDUxLDYgKzQ1Niw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmIChkZXZpY2UtPmVlcl9jcXIpCiAJCXJldHVybiAwOwpAQCAtNDY4LDEwICs0NzQsMTEgQEAKIAljcXItPmV4cGlyZXMgPSAxMCAqIEhaOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CiAKLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NOU1M7Ci0JY3FyLT5jcGFkZHItPmNvdW50ID0gU05TU19EQVRBX1NJWkU7Ci0JY3FyLT5jcGFkZHItPmZsYWdzID0gMDsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19TTlNTOworCWNjdy0+Y291bnQgPSBTTlNTX0RBVEFfU0laRTsKKwljY3ctPmZsYWdzID0gMDsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CkBAIC01MzQsNyArNTQxLDcgQEAKIAlpZiAoZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPCAxIHx8CiAJICAgIGVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50ID4gSU5UX01BWCAvIFBBR0VfU0laRSkgewogCQlrZnJlZShlZXJiKTsKLQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsICJjYW4ndCBvcGVuIGRldmljZSBzaW5jZSBtb2R1bGUgIgorCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJjYW4ndCBvcGVuIGRldmljZSBzaW5jZSBtb2R1bGUgIgogCQkJInBhcmFtZXRlciBlZXJfcGFnZXMgaXMgc21hbGxlciB0aGFuIDEgb3IiCiAJCQkiIGJpZ2dlciB0aGFuICVkIiwgKGludCkoSU5UX01BWCAvIFBBR0VfU0laRSkpOwogCQl1bmxvY2tfa2VybmVsKCk7CkBAIC02ODcsNyArNjk0LDcgQEAKIAlpZiAocmMpIHsKIAkJa2ZyZWUoZGFzZF9lZXJfZGV2KTsKIAkJZGFzZF9lZXJfZGV2ID0gTlVMTDsKLQkJTUVTU0FHRShLRVJOX0VSUiwgIiVzIiwgImRhc2RfZWVyX2luaXQgY291bGQgbm90ICIKKwkJREJGX0VWRU5UKERCRl9FUlIsICIlcyIsICJkYXNkX2Vlcl9pbml0IGNvdWxkIG5vdCAiCiAJCSAgICAgICAicmVnaXN0ZXIgbWlzYyBkZXZpY2UiKTsKIAkJcmV0dXJuIHJjOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKaW5kZXggOGYxMDAwMC4uZDk3MGNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKQEAgLTksNiArOSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIApAQCAtOTEsMTQgKzkzLDE0IEBACiAKICAgICAgICAgLyoganVzdCByZXRyeSAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2F2ZSAuLi4gSSBnb3Qgbm8gc2Vuc2UgZGF0YS4uLi4gKi8KICAgICAgICAgaWYgKGNxci0+cmV0cmllcyA+IDApIHsKLQkJREVWX01FU1NBR0UgKEtFUk5fREVCVUcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgRVJQIGNhbGxlZCAoJWkgcmV0cmllcyBsZWZ0KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+cmV0cmllcyk7CiAJCWNxci0+bHBtICAgID0gTFBNX0FOWVBBVEg7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAgImRlZmF1bHQgRVJQIGNhbGxlZCAoTk8gcmV0cnkgbGVmdCkiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiZGVmYXVsdCBFUlAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iKTsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwogICAgICAgICB9CkBAIC0xNjIsOCArMTY0LDIxIEBACiAJCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZShkZXZpY2UsIGNxciwgaXJiKTsKIH0KIAordm9pZAorZGFzZF9sb2dfc2Vuc2VfZGJmKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOworCisJZGV2aWNlID0gY3FyLT5zdGFydGRldjsKKwkvKiBkdW1wIHNlbnNlIGRhdGEgdG8gczM5MCBkZWJ1Z2ZlYXR1cmUqLworCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUgJiYgZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZikKKwkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIGNxciwgaXJiLCAibG9nIik7Cit9CitFWFBPUlRfU1lNQk9MKGRhc2RfbG9nX3NlbnNlX2RiZik7CisKIEVYUE9SVF9TWU1CT0woZGFzZF9kZWZhdWx0X2VycF9hY3Rpb24pOwogRVhQT1JUX1NZTUJPTChkYXNkX2RlZmF1bHRfZXJwX3Bvc3RhY3Rpb24pOwogRVhQT1JUX1NZTUJPTChkYXNkX2FsbG9jX2VycF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZGFzZF9mcmVlX2VycF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZGFzZF9sb2dfc2Vuc2UpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCmluZGV4IGYxZDE3NjAyLi5hM2ViNmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtNiw2ICs2LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgpAQCAtMTI4LDE3ICsxMzAsMTggQEAKIAkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2ZiYV9wcml2YXRlKSwKIAkJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgIgotCQkJCSAgICAiZGF0YSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHByaXZhdGUgREFTRCAiCisJCQkJICJkYXRhIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlkZXZpY2UtPnByaXZhdGUgPSAodm9pZCAqKSBwcml2YXRlOwogCX0KIAlibG9jayA9IGRhc2RfYWxsb2NfYmxvY2soKTsKIAlpZiAoSVNfRVJSKGJsb2NrKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgc3RydWN0dXJlIik7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrICIKKwkJCSAgInN0cnVjdHVyZSBmb3IgZGV2aWNlOiAlcyIsCisJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlkZXZpY2UtPnByaXZhdGUgPSBOVUxMOwogCQlrZnJlZShwcml2YXRlKTsKIAkJcmV0dXJuIFBUUl9FUlIoYmxvY2spOwpAQCAtMTUwLDkgKzE1Myw5IEBACiAJcmRjX2RhdGEgPSAodm9pZCAqKSAmKHByaXZhdGUtPnJkY19kYXRhKTsKIAlyYyA9IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhkZXZpY2UsICJGQkEgIiwgJnJkY19kYXRhLCAzMik7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJICAgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgcmV0dXJuZWQgZXJyb3IgJWQiLAotCQkJICAgIHJjKTsKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkICIKKwkJCSAgImVycm9yICVkIGZvciBkZXZpY2U6ICVzIiwKKwkJCSAgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlkZXZpY2UtPmJsb2NrID0gTlVMTDsKIAkJZGFzZF9mcmVlX2Jsb2NrKGJsb2NrKTsKIAkJZGV2aWNlLT5wcml2YXRlID0gTlVMTDsKQEAgLTE2MCwxNSArMTYzLDE2IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICIlMDRYLyUwMlgoQ1U6JTA0WC8lMDJYKSAlZE1CIGF0KCVkIEIvYmxrKSIsCi0JCSAgICBjZGV2LT5pZC5kZXZfdHlwZSwKLQkJICAgIGNkZXYtPmlkLmRldl9tb2RlbCwKLQkJICAgIGNkZXYtPmlkLmN1X3R5cGUsCi0JCSAgICBjZGV2LT5pZC5jdV9tb2RlbCwKLQkJICAgICgocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX2Jkc2EgKgotCQkgICAgICAocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUgPj4gOSkpID4+IDExKSwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAiTmV3IEZCQSBEQVNEICUwNFgvJTAyWCAoQ1UgJTA0WC8lMDJYKSB3aXRoICVkIE1CICIKKwkJICJhbmQgJWQgQi9ibGtcbiIsCisJCSBjZGV2LT5pZC5kZXZfdHlwZSwKKwkJIGNkZXYtPmlkLmRldl9tb2RlbCwKKwkJIGNkZXYtPmlkLmN1X3R5cGUsCisJCSBjZGV2LT5pZC5jdV9tb2RlbCwKKwkJICgocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX2Jkc2EgKgorCQkgICAocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUgPj4gOSkpID4+IDExKSwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgwLDcgKzE4NCw3IEBACiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSAqKSBibG9jay0+YmFzZS0+cHJpdmF0ZTsKIAlyYyA9IGRhc2RfY2hlY2tfYmxvY2tzaXplKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBibG9jay0+YmFzZSwgInVua25vd24gYmxvY2tzaXplICVkIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgYmxvY2stPmJhc2UsICJ1bmtub3duIGJsb2Nrc2l6ZSAlZCIsCiAJCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUpOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMjE1LDcgKzIxOSw3IEBACiAJaWYgKGNxci0+ZnVuY3Rpb24gPT0gZGFzZF9kZWZhdWx0X2VycF9hY3Rpb24pCiAJCXJldHVybiBkYXNkX2RlZmF1bHRfZXJwX3Bvc3RhY3Rpb247CiAKLQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGNxci0+c3RhcnRkZXYsICJ1bmtub3duIEVSUCBhY3Rpb24gJXAiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGNxci0+c3RhcnRkZXYsICJ1bmtub3duIEVSUCBhY3Rpb24gJXAiLAogCQkgICAgY3FyLT5mdW5jdGlvbik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMzMsOSArMjM3LDkgQEAKIAl9CiAKIAkvKiBjaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyAqLwotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAidW5zb2xpY2l0ZWQgaW50ZXJydXB0IHJlY2VpdmVkIik7Ci0JZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiLCAidW5zb2xpY2l0ZWQiKTsKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCXJldHVybjsKIH07CkBAIC00MzcsNiArNDQxLDI1IEBACiB9CiAKIHN0YXRpYyB2b2lkCitkYXNkX2ZiYV9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLAorCQkJIHN0cnVjdCBpcmIgKmlyYiwgY2hhciAqcmVhc29uKQoreworCWludCBzbDsKKwlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCQlmb3IgKHNsID0gMDsgc2wgPCA0OyBzbCsrKSB7CisJCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLAorCQkJCSAgICAgICIlczogJTA4eCAlMDh4ICUwOHggJTA4eCIsCisJCQkJICAgICAgcmVhc29uLCBpcmItPmVjd1s4ICogMF0sIGlyYi0+ZWN3WzggKiAxXSwKKwkJCQkgICAgICBpcmItPmVjd1s4ICogMl0sIGlyYi0+ZWN3WzggKiAzXSk7CisJCX0KKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIlNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKIGRhc2RfZmJhX2R1bXBfc2Vuc2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKiByZXEsCiAJCSAgICBzdHJ1Y3QgaXJiICppcmIpCiB7CkBAIC00NDYsNyArNDY5LDcgQEAKIAogCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKHBhZ2UgPT0gTlVMTCkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiICVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhIik7CiAJCXJldHVybjsKIAl9CkBAIC00NzYsOCArNDk5LDcgQEAKIAkgICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJCSAgICAgICAiIFNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKIAl9Ci0JTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCSAgICBwYWdlICsgc2l6ZW9mKEtFUk5fRVJSIFBSSU5US19IRUFERVIpKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzIiwgcGFnZSk7CiAKIAkvKiBkdW1wIHRoZSBDaGFubmVsIFByb2dyYW0gKi8KIAkvKiBwcmludCBmaXJzdCBDQ1dzIChtYXhpbXVtIDgpICovCkBAIC00OTgsOCArNTIwLDcgQEAKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJCWFjdCsrOwogCX0KLQlNRVNTQUdFX0xPRyhLRVJOX0VSUiwgIiVzIiwKLQkJICAgIHBhZ2UgKyBzaXplb2YoS0VSTl9FUlIgUFJJTlRLX0hFQURFUikpOworCXByaW50ayhLRVJOX0VSUiAiJXMiLCBwYWdlKTsKIAogCiAJLyogcHJpbnQgZmFpbGluZyBDQ1cgYXJlYSAqLwpAQCAtNTQwLDggKzU2MSw3IEBACiAJCWFjdCsrOwogCX0KIAlpZiAobGVuID4gMCkKLQkJTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMiLCBwYWdlKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwogfQogCkBAIC01NzYsNiArNTk2LDcgQEAKIAkuYnVpbGRfY3AgPSBkYXNkX2ZiYV9idWlsZF9jcCwKIAkuZnJlZV9jcCA9IGRhc2RfZmJhX2ZyZWVfY3AsCiAJLmR1bXBfc2Vuc2UgPSBkYXNkX2ZiYV9kdW1wX3NlbnNlLAorCS5kdW1wX3NlbnNlX2RiZiA9IGRhc2RfZmJhX2R1bXBfc2Vuc2VfZGJmLAogCS5maWxsX2luZm8gPSBkYXNkX2ZiYV9maWxsX2luZm8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCBlOTlkNTY2Li5kMzE5ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTExLDYgKzExLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KQEAgLTE2Myw5ICsxNjUsOCBAQAogCS8qIFJlZ2lzdGVyIHRvIHN0YXRpYyBkYXNkIG1ham9yIDk0ICovCiAJcmMgPSByZWdpc3Rlcl9ibGtkZXYoREFTRF9NQUpPUiwgImRhc2QiKTsKIAlpZiAocmMgIT0gMCkgewotCQlNRVNTQUdFKEtFUk5fV0FSTklORywKLQkJCSJDb3VsZG4ndCByZWdpc3RlciBzdWNjZXNzZnVsbHkgdG8gIgotCQkJIm1ham9yIG5vICVkIiwgREFTRF9NQUpPUik7CisJCXByX3dhcm5pbmcoIlJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UgZHJpdmVyIHdpdGggbWFqb3IgbnVtYmVyICIKKwkJCSAgICIlZCBmYWlsZWRcbiIsIERBU0RfTUFKT1IpOwogCQlyZXR1cm4gcmM7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCA0YTM5MDg0Li5jMWU0ODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMTEyLDYgKzExMiw5IEBACiAJCQkJZF9kYXRhKTsgXAogfSB3aGlsZSgwKQogCisvKiBsaW1pdCBzaXplIGZvciBhbiBlcnJvcnN0cmluZyAqLworI2RlZmluZSBFUlJPUkxFTkdUSCAzMAorCiAvKiBkZWZpbml0aW9uIG9mIGRiZiBkZWJ1ZyBsZXZlbHMgKi8KICNkZWZpbmUJREJGX0VNRVJHCTAJLyogc3lzdGVtIGlzIHVudXNhYmxlCQkJKi8KICNkZWZpbmUJREJGX0FMRVJUCTEJLyogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkJKi8KQEAgLTE1Nyw3ICsxNjAsOCBAQAogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsJLyogdGhlIG9yaWdpbmF0aW5nIGJsb2NrIGRldmljZSAqLwogCXN0cnVjdCBkYXNkX2RldmljZSAqbWVtZGV2OwkvKiB0aGUgZGV2aWNlIHVzZWQgdG8gYWxsb2NhdGUgdGhpcyAqLwogCXN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXY7CS8qIGRldmljZSB0aGUgcmVxdWVzdCBpcyBzdGFydGVkIG9uICovCi0Jc3RydWN0IGNjdzEgKmNwYWRkcjsJCS8qIGFkZHJlc3Mgb2YgY2hhbm5lbCBwcm9ncmFtICovCisJdm9pZCAqY3BhZGRyOwkJCS8qIGFkZHJlc3Mgb2YgY2N3IG9yIHRjdyAqLworCXVuc2lnbmVkIGNoYXIgY3Btb2RlOwkJLyogMCA9IGNtZCBtb2RlLCAxID0gaXRjdyAqLwogCWNoYXIgc3RhdHVzOwkJCS8qIHN0YXR1cyBvZiB0aGlzIHJlcXVlc3QgKi8KIAlzaG9ydCByZXRyaWVzOwkJCS8qIEEgcmV0cnkgY291bnRlciAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgICAJLyogZmxhZ3Mgb2YgdGhpcyByZXF1ZXN0ICovCkBAIC0yODAsNiArMjg0LDggQEAKIAlkYXNkX2VycF9mbl90KCplcnBfcG9zdGFjdGlvbikgKHN0cnVjdCBkYXNkX2Njd19yZXEgKik7CiAJdm9pZCAoKmR1bXBfc2Vuc2UpIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgc3RydWN0IGRhc2RfY2N3X3JlcSAqLAogCQkJICAgIHN0cnVjdCBpcmIgKik7CisJdm9pZCAoKmR1bXBfc2Vuc2VfZGJmKSAoc3RydWN0IGRhc2RfZGV2aWNlICosIHN0cnVjdCBkYXNkX2Njd19yZXEgKiwKKwkJCSAgICBzdHJ1Y3QgaXJiICosIGNoYXIgKik7CiAKIAl2b2lkICgqaGFuZGxlX3Vuc29saWNpdGVkX2ludGVycnVwdCkgKHN0cnVjdCBkYXNkX2RldmljZSAqLAogCQkJCQkgICAgICBzdHJ1Y3QgaXJiICopOwpAQCAtMzc4LDcgKzM4NCw3IEBACiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAlhdG9taWNfdCBvcGVuX2NvdW50OwogCi0JdW5zaWduZWQgbG9uZyBibG9ja3M7CSAgIC8qIHNpemUgb2Ygdm9sdW1lIGluIGJsb2NrcyAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja3M7IC8qIHNpemUgb2Ygdm9sdW1lIGluIGJsb2NrcyAqLwogCXVuc2lnbmVkIGludCBicF9ibG9jazsJICAgLyogYnl0ZXMgcGVyIGJsb2NrICovCiAJdW5zaWduZWQgaW50IHMyYl9zaGlmdDsJICAgLyogbG9nMiAoYnBfYmxvY2svNTEyKSAqLwogCkBAIC01NzMsMTIgKzU3OSwxNCBAQAogdm9pZCBkYXNkX2dlbmVyaWNfaGFuZGxlX3N0YXRlX2NoYW5nZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKIGludCBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoc3RydWN0IGRhc2RfZGV2aWNlICosIGNoYXIgKiwgdm9pZCAqKiwgaW50KTsKK2NoYXIgKmRhc2RfZ2V0X3NlbnNlKHN0cnVjdCBpcmIgKik7CiAKIC8qIGV4dGVybmFscyBpbiBkYXNkX2Rldm1hcC5jICovCiBleHRlcm4gaW50IGRhc2RfbWF4X2RldmluZGV4OwogZXh0ZXJuIGludCBkYXNkX3Byb2Jlb25seTsKIGV4dGVybiBpbnQgZGFzZF9hdXRvZGV0ZWN0OwogZXh0ZXJuIGludCBkYXNkX25vcGF2OworZXh0ZXJuIGludCBkYXNkX25vZmN4OwogCiBpbnQgZGFzZF9kZXZtYXBfaW5pdCh2b2lkKTsKIHZvaWQgZGFzZF9kZXZtYXBfZXhpdCh2b2lkKTsKQEAgLTYyMyw2ICs2MzEsNyBAQAogCQkJCQkgICAgc3RydWN0IGRhc2RfZGV2aWNlICopOwogdm9pZCBkYXNkX2ZyZWVfZXJwX3JlcXVlc3Qoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiB2b2lkIGRhc2RfbG9nX3NlbnNlKHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgc3RydWN0IGlyYiAqKTsKK3ZvaWQgZGFzZF9sb2dfc2Vuc2VfZGJmKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgc3RydWN0IGlyYiAqaXJiKTsKIAogLyogZXh0ZXJuYWxzIGluIGRhc2RfMzk5MF9lcnAuYyAqLwogc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF8zOTkwX2VycF9hY3Rpb24oc3RydWN0IGRhc2RfY2N3X3JlcSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGI4MmQ4MTYuLjRjZTNmNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtOSw2ICs5LDkgQEAKICAqCiAgKiBpL28gY29udHJvbHMgZm9yIHRoZSBkYXNkIGRyaXZlci4KICAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtOTQsNyArOTcsOCBAQAogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgYmFzZSwgIiVzIiwgIlF1aWVzY2UgSU8gb24gZGV2aWNlIik7CisJZGV2X2luZm8oJmJhc2UtPmNkZXYtPmRldiwgIlRoZSBEQVNEIGhhcyBiZWVuIHB1dCBpbiB0aGUgcXVpZXNjZSAiCisJCSAic3RhdGVcbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwogCWJhc2UtPnN0b3BwZWQgfD0gREFTRF9TVE9QUEVEX1FVSUVTQ0U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKQEAgLTEwMyw3ICsxMDcsNyBAQAogCiAKIC8qCi0gKiBRdWllc2NlIGRldmljZS4KKyAqIFJlc3VtZSBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQgZGFzZF9pb2N0bF9yZXN1bWUoc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrKQogewpAQCAtMTE0LDcgKzExOCw4IEBACiAJaWYgKCFjYXBhYmxlIChDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBiYXNlLCAiJXMiLCAicmVzdW1lIElPIG9uIGRldmljZSIpOworCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsICJJL08gb3BlcmF0aW9ucyBoYXZlIGJlZW4gcmVzdW1lZCAiCisJCSAib24gdGhlIERBU0RcbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwogCWJhc2UtPnN0b3BwZWQgJj0gfkRBU0RfU1RPUFBFRF9RVUlFU0NFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xNDAsMTMgKzE0NSwxMyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGJhc2UtPnN0YXRlICE9IERBU0RfU1RBVEVfQkFTSUMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBiYXNlLCAiJXMiLAotCQkJICAgICJkYXNkX2Zvcm1hdDogZGV2aWNlIGlzIG5vdCBkaXNhYmxlZCEgIik7CisJCWRldl93YXJuKCZiYXNlLT5jZGV2LT5kZXYsCisJCQkgIlRoZSBEQVNEIGNhbm5vdCBiZSBmb3JtYXR0ZWQgd2hpbGUgaXQgaXMgZW5hYmxlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJREJGX0RFVl9FVkVOVChEQkZfTk9USUNFLCBiYXNlLAotCQkgICAgICAiZm9ybWF0dGluZyB1bml0cyAlZCB0byAlZCAoJWQgQiBibG9ja3MpIGZsYWdzICVkIiwKKwkJICAgICAgImZvcm1hdHRpbmcgdW5pdHMgJXUgdG8gJXUgKCV1IEIgYmxvY2tzKSBmbGFncyAldSIsCiAJCSAgICAgIGZkYXRhLT5zdGFydF91bml0LAogCQkgICAgICBmZGF0YS0+c3RvcF91bml0LCBmZGF0YS0+Ymxrc2l6ZSwgZmRhdGEtPmludGVuc2l0eSk7CiAKQEAgLTE2OSwxMCArMTc0LDkgQEAKIAkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgY3FyLT5tZW1kZXYpOwogCQlpZiAocmMpIHsKIAkJCWlmIChyYyAhPSAtRVJFU1RBUlRTWVMpCi0JCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGJhc2UsCi0JCQkJCSAgICAiIEZvcm1hdHRpbmcgb2YgdW5pdCAlZCBmYWlsZWQgIgotCQkJCQkgICAgIndpdGggcmMgPSAlZCIsCi0JCQkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCwgcmMpOworCQkJCWRldl9lcnIoJmJhc2UtPmNkZXYtPmRldiwKKwkJCQkJIkZvcm1hdHRpbmcgdW5pdCAlZCBmYWlsZWQgd2l0aCAiCisJCQkJCSJyYz0lZFxuIiwgZmRhdGEtPnN0YXJ0X3VuaXQsIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCQlmZGF0YS0+c3RhcnRfdW5pdCsrOwpAQCAtMTk5LDggKzIwMyw5IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgYmxvY2stPmJhc2UsICIlcyIsCi0JCQkgICAgIkNhbm5vdCBsb3ctbGV2ZWwgZm9ybWF0IGEgcGFydGl0aW9uIik7CisJCWRldl93YXJuKCZibG9jay0+YmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgc3BlY2lmaWVkIERBU0QgaXMgYSBwYXJ0aXRpb24gYW5kIGNhbm5vdCBiZSAiCisJCQkgImZvcm1hdHRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gZGFzZF9mb3JtYXQoYmxvY2ssICZmZGF0YSk7CkBAIC0zNjUsOSArMzcwLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQKLWRhc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAotCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludAorZGFzZF9kb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpAQCAtNDIwLDMgKzQyNSwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CisKK2ludCBkYXNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJjOworCisJbG9ja19rZXJuZWwoKTsKKwlyYyA9IGRhc2RfZG9faW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggYmY2ZmQzNC4uMjA4MGJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMTEsNiArMTEsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTExMiw3ICsxMTQsNyBAQAogCQkJc2VxX3ByaW50ZihtLCAibi9mCSAiKTsKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJhdCBibG9ja3NpemU6ICVkLCAlbGQgYmxvY2tzLCAlbGQgTUIiLAorCQkJCSAgICJhdCBibG9ja3NpemU6ICVkLCAlbGxkIGJsb2NrcywgJWxsZCBNQiIsCiAJCQkJICAgYmxvY2stPmJwX2Jsb2NrLCBibG9jay0+YmxvY2tzLAogCQkJCSAgICgoYmxvY2stPmJwX2Jsb2NrID4+IDkpICoKIAkJCQkgICAgYmxvY2stPmJsb2NrcykgPj4gMTEpOwpAQCAtMjY3LDcgKzI2OSw3IEBACiAJYnVmZmVyID0gZGFzZF9nZXRfdXNlcl9zdHJpbmcodXNlcl9idWYsIHVzZXJfbGVuKTsKIAlpZiAoSVNfRVJSKGJ1ZmZlcikpCiAJCXJldHVybiBQVFJfRVJSKGJ1ZmZlcik7Ci0JTUVTU0FHRV9MT0coS0VSTl9JTkZPLCAiL3Byb2MvZGFzZC9zdGF0aWN0aWNzOiAnJXMnIiwgYnVmZmVyKTsKKwlEQkZfRVZFTlQoREJGX0RFQlVHLCAiL3Byb2MvZGFzZC9zdGF0aWN0aWNzOiAnJXMnXG4iLCBidWZmZXIpOwogCiAJLyogY2hlY2sgZm9yIHZhbGlkIHZlcmJzICovCiAJZm9yIChzdHIgPSBidWZmZXI7IGlzc3BhY2UoKnN0cik7IHN0cisrKTsKQEAgLTI3NywzMyArMjc5LDMzIEBACiAJCWlmIChzdHJjbXAoc3RyLCAib24iKSA9PSAwKSB7CiAJCQkvKiBzd2l0Y2ggb24gc3RhdGlzdGljcyBwcm9maWxpbmcgKi8KIAkJCWRhc2RfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9PTjsKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyBzd2l0Y2hlZCBvbiIpOworCQkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgZmVhdHVyZSBoYXMgYmVlbiBzd2l0Y2hlZCAiCisJCQkJIm9uXG4iKTsKIAkJfSBlbHNlIGlmIChzdHJjbXAoc3RyLCAib2ZmIikgPT0gMCkgewogCQkJLyogc3dpdGNoIG9mZiBhbmQgcmVzZXQgc3RhdGlzdGljcyBwcm9maWxpbmcgKi8KIAkJCW1lbXNldCgmZGFzZF9nbG9iYWxfcHJvZmlsZSwKIAkJCSAgICAgICAwLCBzaXplb2YgKHN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190KSk7CiAJCQlkYXNkX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT0ZGOwotCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJTdGF0aXN0aWNzIHN3aXRjaGVkIG9mZiIpOworCQkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgZmVhdHVyZSBoYXMgYmVlbiBzd2l0Y2hlZCAiCisJCQkJIm9mZlxuIik7CiAJCX0gZWxzZQogCQkJZ290byBvdXRfZXJyb3I7CiAJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgInJlc2V0IiwgNSkgPT0gMCkgewogCQkvKiByZXNldCB0aGUgc3RhdGlzdGljcyAqLwogCQltZW1zZXQoJmRhc2RfZ2xvYmFsX3Byb2ZpbGUsIDAsCiAJCSAgICAgICBzaXplb2YgKHN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190KSk7Ci0JCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyByZXNldCIpOworCQlwcl9pbmZvKCJUaGUgc3RhdGlzdGljcyBoYXZlIGJlZW4gcmVzZXRcbiIpOwogCX0gZWxzZQogCQlnb3RvIG91dF9lcnJvcjsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiB1c2VyX2xlbjsKIG91dF9lcnJvcjoKLQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwKLQkJIi9wcm9jL2Rhc2Qvc3RhdGlzdGljczogb25seSAnc2V0IG9uJywgJ3NldCBvZmYnICIKLQkJImFuZCAncmVzZXQnIGFyZSBzdXBwb3J0ZWQgdmVyYnMiKTsKKwlwcl93YXJuaW5nKCIlcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIC9wcm9jL2Rhc2Qvc3RhdGlzdGljc1xuIiwKKwkJc3RyKTsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKLQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwKLQkJIi9wcm9jL2Rhc2Qvc3RhdGlzdGljczogaXMgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGtlcm5lbCIpOworCXByX3dhcm5pbmcoIi9wcm9jL2Rhc2Qvc3RhdGlzdGljczogaXMgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGtlcm5lbFxuIik7CiAJcmV0dXJuIHVzZXJfbGVuOwogI2VuZGlmCQkJCS8qIENPTkZJR19EQVNEX1BST0ZJTEUgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAppbmRleCBkMGQ1NjVhLi5jMDc4MDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCkBAIC0zMjQsOCArMzI0LDYgQEAKICNlbmRpZgogCiAvKiBhIGZ1bmN0aW9uIGZvciBkdW1waW5nIGRldmljZSBzZW5zZSBpbmZvICovCi1leHRlcm4gdm9pZCB0YXBlX2R1bXBfc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKiwKLQkJCSAgICBzdHJ1Y3QgaXJiICopOwogZXh0ZXJuIHZvaWQgdGFwZV9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgdGFwZV9kZXZpY2UgKiwgc3RydWN0IHRhcGVfcmVxdWVzdCAqLAogCQkJCXN0cnVjdCBpcmIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKaW5kZXggMjJjYTM0My4uODA3ZGVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKQEAgLTgsNiArOCw4IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpAQCAtMTgsOCArMjAsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfMzRYWDogIgotCiAvKgogICogUG9pbnRlciB0byBkZWJ1ZyBhcmVhLgogICovCkBAIC0yMDMsOCArMjAzLDcgQEAKIAkJdGFwZV8zNHh4X3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19NU0VOKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgInVuc29sLmlycSEgZGV2IGVuZDogJTA4eFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiVW5zb2xpY2l0ZWQgSVJRIChEZXZpY2UgRW5kKSBjYXVnaHQuXG4iKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYik7CiAJfQogCXJldHVybiBUQVBFX0lPX1NVQ0NFU1M7CiB9CkBAIC0yMjYsOSArMjI1LDcgQEAKIAkJdGFwZV9zdGRfcmVhZF9iYWNrd2FyZChkZXZpY2UsIHJlcXVlc3QpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAl9Ci0JaWYgKHJlcXVlc3QtPm9wICE9IFRPX1JCQSkKLQkJUFJJTlRfRVJSKCJyZWFkX29wcG9zaXRlIGNhbGxlZCB3aXRoIHN0YXRlOiVzXG4iLAotCQkJICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKwogCS8qCiAJICogV2UgdHJpZWQgdG8gcmVhZCBmb3J3YXJkIGFuZCBiYWNrd2FyZCwgYnV0IGhhdCBubwogCSAqIHN1Y2Nlc3MgLT4gZmFpbGVkLgpAQCAtMjQxLDEzICsyMzgsOSBAQAogCQkgIHN0cnVjdCBpcmIgKmlyYiwgaW50IG5vKQogewogCWlmIChyZXF1ZXN0LT5vcCAhPSBUT19BU1NJR04pIHsKLQkJUFJJTlRfV0FSTigiQW4gdW5leHBlY3RlZCBjb25kaXRpb24gIyVkIHdhcyBjYXVnaHQgaW4gIgotCQkJICAgInRhcGUgZXJyb3IgcmVjb3ZlcnkuXG4iLCBubyk7Ci0JCVBSSU5UX1dBUk4oIlBsZWFzZSByZXBvcnQgdGhpcyBpbmNpZGVudC5cbiIpOwotCQlpZiAocmVxdWVzdCkKLQkJCVBSSU5UX1dBUk4oIk9wZXJhdGlvbiBvZiB0YXBlOiVzXG4iLAotCQkJCSAgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIHVuZXhwZWN0ZWQgY29uZGl0aW9uICVkICIKKwkJCSJvY2N1cnJlZCBpbiB0YXBlIGVycm9yIHJlY292ZXJ5XG4iLCBubyk7CisJCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOwogCX0KIAlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiB9CkBAIC0yNjEsOSArMjU0LDggQEAKIAkJICAgICAgc3RydWN0IGlyYiAqaXJiKQogewogCWlmIChpcmItPmVjd1szXSA9PSAweDQwKSB7Ci0JCVBSSU5UX1dBUk4gKCJEYXRhIG92ZXJydW4gZXJyb3IgYmV0d2VlbiBjb250cm9sLXVuaXQgIgotCQkJICAgICJhbmQgZHJpdmUuIFVzZSBhIGZhc3RlciBjaGFubmVsIGNvbm5lY3Rpb24sICIKLQkJCSAgICAiaWYgcG9zc2libGUhIFxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGRhdGEgb3ZlcnJ1biBvY2N1cnJlZCBiZXR3ZWVuIgorCQkJIiB0aGUgY29udHJvbCB1bml0IGFuZCB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJfQogCXJldHVybiB0YXBlXzM0eHhfZXJwX2J1ZyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLTEpOwpAQCAtMjgwLDcgKzI3Miw4IEBACiAJCS8qCiAJCSAqIGN1IGRldGVjdGVkIGluY29ycmVjdCBibG9jay1pZCBzZXF1ZW5jZSBvbiB0YXBlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiSWxsZWdhbCBibG9jay1pZCBzZXF1ZW5jZSBmb3VuZCFcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIGJsb2NrIElEIHNlcXVlbmNlIG9uIHRoZSAiCisJCQkidGFwZSBpcyBpbmNvcnJlY3RcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJfQogCS8qCkBAIC0zOTMsOCArMzg2LDYgQEAKIAkJCS8qIFdyaXRpbmcgYXQgcGh5c2ljYWwgZW5kIG9mIHZvbHVtZSAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCQlkZWZhdWx0OgotCQkJUFJJTlRfRVJSKCJJbnZhbGlkIG9wIGluICVzOiVpXG4iLAotCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAwKTsKIAkJfQogCX0KQEAgLTQyMCw3ICs0MTEsOCBAQAogCQkJCQkJCSBpcmIsIC00KTsKIAogCQkJLyogZGF0YSBjaGVjayBpcyBwZXJtYW5lbnQsIENVIHJlY292ZXJ5IGhhcyBmYWlsZWQgKi8KLQkJCVBSSU5UX1dBUk4oIlBlcm1hbmVudCByZWFkIGVycm9yXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHJlYWQgZXJyb3Igb2NjdXJyZWQgIgorCQkJCSJ0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MjU6CiAJCQkvLyBhIHdyaXRlIGRhdGEgY2hlY2sgb2NjdXJyZWQKQEAgLTQzMywyMiArNDI1LDI2IEBACiAJCQkJCQkJIGlyYiwgLTUpOwogCiAJCQkvLyBkYXRhIGNoZWNrIGlzIHBlcm1hbmVudCwgY3UtcmVjb3ZlcnkgaGFzIGZhaWxlZAotCQkJUFJJTlRfV0FSTigiUGVybWFuZW50IHdyaXRlIGVycm9yXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHdyaXRlIGVycm9yIG9uIHRoZSAiCisJCQkJInRhcGUgY2Fubm90IGJlIHJlY292ZXJlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCWNhc2UgMHgyNjoKIAkJCS8qIERhdGEgQ2hlY2sgKHJlYWQgb3Bwb3NpdGUpIG9jY3VycmVkLiAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmVhZF9vcHBvc2l0ZShkZXZpY2UsIHJlcXVlc3QpOwogCQljYXNlIDB4Mjg6CiAJCQkvKiBJRC1NYXJrIGF0IHRhcGUgc3RhcnQgY291bGRuJ3QgYmUgd3JpdHRlbiAqLwotCQkJUFJJTlRfV0FSTigiSUQtTWFyayBjb3VsZCBub3QgYmUgd3JpdHRlbi5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIldyaXRpbmcgdGhlIElELW1hcmsgIgorCQkJCSJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MzE6CiAJCQkvKiBUYXBlIHZvaWQuIFRyaWVkIHRvIHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2UuICovCi0JCQlQUklOVF9XQVJOKCJSZWFkIGJleW9uZCBlbmQgb2YgcmVjb3JkZWQgYXJlYS5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlJlYWRpbmcgdGhlIHRhcGUgYmV5b25kIgorCQkJCSIgdGhlIGVuZCBvZiB0aGUgcmVjb3JkZWQgYXJlYSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCQljYXNlIDB4NDE6CiAJCQkvKiBSZWNvcmQgc2VxdWVuY2UgZXJyb3IuICovCi0JCQlQUklOVF9XQVJOKCJJbnZhbGlkIGJsb2NrLWlkIHNlcXVlbmNlIGZvdW5kLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgY29udGFpbnMgYW4gIgorCQkJCSJpbmNvcnJlY3QgYmxvY2sgSUQgc2VxdWVuY2VcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQlkZWZhdWx0OgogCQkJLyogYWxsIGRhdGEgY2hlY2tzIGZvciAzNDgwIHNob3VsZCByZXN1bHQgaW4gb25lIG9mCkBAIC00NzAsMTYgKzQ2NiwxMiBAQAogCXN3aXRjaCAoc2Vuc2VbM10pIHsKIAljYXNlIDB4MDA6CiAJCS8qIFVuaXQgY2hlY2sgd2l0aCBlcnBhIGNvZGUgMC4gUmVwb3J0IGFuZCBpZ25vcmUuICovCi0JCVBSSU5UX1dBUk4oIk5vbi1lcnJvciBzZW5zZSB3YXMgZm91bmQuICIKLQkJCSAgICJVbml0LWNoZWNrIHdpbGwgYmUgaWdub3JlZC5cbiIpOwogCQlyZXR1cm4gVEFQRV9JT19TVUNDRVNTOwogCWNhc2UgMHgyMToKIAkJLyoKIAkJICogRGF0YSBzdHJlYW1pbmcgbm90IG9wZXJhdGlvbmFsLiBDVSB3aWxsIHN3aXRjaCB0bwogCQkgKiBpbnRlcmxvY2sgbW9kZS4gUmVpc3N1ZSB0aGUgY29tbWFuZC4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkRhdGEgc3RyZWFtaW5nIG5vdCBvcGVyYXRpb25hbC4gIgotCQkJICAgIlN3aXRjaGluZyB0byBpbnRlcmxvY2stbW9kZS5cbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4MjI6CiAJCS8qCkBAIC00ODcsMTEgKzQ3OSw4IEBACiAJCSAqIGVycm9yIG9uIHRoZSBsb3dlciBpbnRlcmZhY2UsIGludGVybmFsIHBhdGggbm90IHVzYWJsZSwKIAkJICogb3IgZXJyb3IgZHVyaW5nIGNhcnRyaWRnZSBsb2FkLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiQSBwYXRoIGVxdWlwbWVudCBjaGVjayBvY2N1cnJlZC4gT25lIG9mIHRoZSAiCi0JCQkgICAiZm9sbG93aW5nIGNvbmRpdGlvbnMgb2NjdXJyZWQ6XG4iKTsKLQkJUFJJTlRfV0FSTigiZHJpdmUgYWRhcHRlciBlcnJvciwgYnVmZmVyIGVycm9yIG9uIHRoZSBsb3dlciAiCi0JCQkgICAiaW50ZXJmYWNlLCBpbnRlcm5hbCBwYXRoIG5vdCB1c2FibGUsIGVycm9yICIKLQkJCSAgICJkdXJpbmcgY2FydHJpZGdlIGxvYWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgcGF0aCBlcXVpcG1lbnQgY2hlY2sgb2NjdXJyZWQiCisJCQkiIGZvciB0aGUgdGFwZSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDI0OgogCQkvKgpAQCAtNTE0LDcgKzUwMyw2IEBACiAJCSAqIGJ1dCB0aGUgaGFyZHdhcmUgaXNuJ3QgY2FwYWJsZSB0byBkbyBpZHJjLCBvciBhIHBlcmZvcm0KIAkJICogc3Vic3lzdGVtIGZ1bmMgaXMgaXNzdWVkIGFuZCB0aGUgQ1UgaXMgbm90IG9uLWxpbmUuCiAJCSAqLwotCQlQUklOVF9XQVJOICgiRnVuY3Rpb24gaW5jb21wYXRpYmxlLiBUcnkgdG8gc3dpdGNoIG9mZiBpZHJjXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgyYToKIAkJLyoKQEAgLTU1MiwyMyArNTQwLDI2IEBACiAJCSAqIHJlYWRpbmcgdGhlIGZvcm1hdCBpZCBtYXJrIG9yIHRoYXQgdGhhdCBmb3JtYXQgc3BlY2lmaWVkCiAJCSAqIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiRHJpdmUgbm90IGNhcGFibGUgcHJvY2Vzc2luZyB0aGUgdGFwZSBmb3JtYXQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgY2Fubm90IHByb2Nlc3MgIgorCQkJInRoZSB0YXBlIGZvcm1hdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCWNhc2UgMHgzMDoKIAkJLyogVGhlIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQuICovCi0JCVBSSU5UX1dBUk4oIk1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBpcyB3cml0ZS0iCisJCQkicHJvdGVjdGVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FQUNDRVMpOwogCWNhc2UgMHgzMjoKIAkJLy8gVGVuc2lvbiBsb3NzLiBXZSBjYW5ub3QgcmVjb3ZlciB0aGlzLCBpdCdzIGFuIEkvTyBlcnJvci4KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGxvc3QgdGFwZSB0ZW5zaW9uLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBkb2VzIG5vdCBoYXZlIHRoZSAiCisJCQkicmVxdWlyZWQgdGFwZSB0ZW5zaW9uXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzMzoKIAkJLyoKIAkJICogTG9hZCBGYWlsdXJlLiBUaGUgY2FydHJpZGdlIHdhcyBub3QgaW5zZXJ0ZWQgY29ycmVjdGx5IG9yCiAJCSAqIHRoZSB0YXBlIGlzIG5vdCB0aHJlYWRlZCBjb3JyZWN0bHkuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJDYXJ0cmlkZ2UgbG9hZCBmYWlsdXJlLiBSZWxvYWQgdGhlIGNhcnRyaWRnZSAiCi0JCQkgICAiYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBmYWlsZWQgdG8gbG9hZCIKKwkJCSIgdGhlIGNhcnRyaWRnZVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzQ6CkBAIC01NzYsOCArNTY3LDggQEAKIAkJICogVW5sb2FkIGZhaWx1cmUuIFRoZSBkcml2ZSBjYW5ub3QgbWFpbnRhaW4gdGFwZSB0ZW5zaW9uCiAJCSAqIGFuZCBjb250cm9sIHRhcGUgbW92ZW1lbnQgZHVyaW5nIGFuIHVubG9hZCBvcGVyYXRpb24uCiAJCSAqLwotCQlQUklOVF9XQVJOKCJGYWlsdXJlIGR1cmluZyBjYXJ0cmlkZ2UgdW5sb2FkLiAiCi0JCQkgICAiUGxlYXNlIHRyeSBtYW51YWxseS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQXV0b21hdGljIHVubG9hZGluZyBvZiB0aGUgdGFwZSIKKwkJCSIgY2FydHJpZGdlIGZhaWxlZFxuIik7CiAJCWlmIChyZXF1ZXN0LT5vcCA9PSBUT19SVU4pCiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2J1ZyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgc2Vuc2VbM10pOwpAQCAtNTg5LDggKzU4MCw4IEBACiAJCSAqIC0gdGhlIGNhcnRyaWRnZSBsb2FkZXIgZG9lcyBub3QgcmVzcG9uZCBjb3JyZWN0bHkKIAkJICogLSBhIGZhaWx1cmUgb2NjdXJzIGR1cmluZyBhbiBpbmRleCwgbG9hZCwgb3IgdW5sb2FkIGN5Y2xlCiAJCSAqLwotCQlQUklOVF9XQVJOKCJFcXVpcG1lbnQgY2hlY2shIFBsZWFzZSBjaGVjayB0aGUgZHJpdmUgYW5kICIKLQkJCSAgICJ0aGUgY2FydHJpZGdlIGxvYWRlci5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXF1aXBtZW50IGNoZWNrIGhhcyBvY2N1cnJlZCIKKwkJCSIgb24gdGhlIHRhcGUgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzY6CiAJCWlmIChkZXZpY2UtPmNkZXYtPmlkLmRyaXZlcl9pbmZvID09IHRhcGVfMzQ5MCkKQEAgLTYwMyw3ICs1OTQsOCBAQAogCQkgKiBUYXBlIGxlbmd0aCBlcnJvci4gVGhlIHRhcGUgaXMgc2hvcnRlciB0aGFuIHJlcG9ydGVkIGluCiAJCSAqIHRoZSBiZWdpbm5pbmctb2YtdGFwZSBkYXRhLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBsZW5ndGggZXJyb3IuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGluZm9ybWF0aW9uIHN0YXRlcyBhbiIKKwkJCSIgaW5jb3JyZWN0IGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4Mzg6CiAJCS8qCkBAIC02MjAsMTIgKzYxMiwxMiBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDNhOgogCQkvKiBEcml2ZSBzd2l0Y2hlZCB0byBub3QgcmVhZHkuICovCi0JCVBSSU5UX1dBUk4oIkRyaXZlIG5vdCByZWFkeS4gVHVybiB0aGUgcmVhZHkvbm90IHJlYWR5IHN3aXRjaCAiCi0JCQkgICAidG8gcmVhZHkgcG9zaXRpb24gYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDNiOgogCQkvKiBNYW51YWwgcmV3aW5kIG9yIHVubG9hZC4gVGhpcyBjYXVzZXMgYW4gSS9PIGVycm9yLiAqLwotCQlQUklOVF9XQVJOKCJNZWRpdW0gd2FzIHJld291bmQgb3IgdW5sb2FkZWQgbWFudWFsbHkuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBoYXMgYmVlbiAiCisJCQkicmV3b3VuZCBvciB1bmxvYWRlZCBtYW51YWxseVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDI6CkBAIC02MzMsNyArNjI1LDggQEAKIAkJICogRGVncmFkZWQgbW9kZS4gQSBjb25kaXRpb24gdGhhdCBjYW4gY2F1c2UgZGVncmFkZWQKIAkJICogcGVyZm9ybWFuY2UgaXMgZGV0ZWN0ZWQuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJTdWJzeXN0ZW0gaXMgcnVubmluZyBpbiBkZWdyYWRlZCBtb2RlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBzdWJzeXN0ZW0gaXMgcnVubmluZyAiCisJCQkiaW4gZGVncmFkZWQgbW9kZVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg0MzoKIAkJLyogRHJpdmUgbm90IHJlYWR5LiAqLwpAQCAtNjUyLDcgKzY0NSw2IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBpcyBub3QgcmVhZHkuXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9NRURJVU0pOwogCWNhc2UgMHg0NDoKIAkJLyogTG9jYXRlIEJsb2NrIHVuc3VjY2Vzc2Z1bC4gKi8KQEAgLTY2Myw3ICs2NTUsOCBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ1OgogCQkvKiBUaGUgZHJpdmUgaXMgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgY2hhbm5lbCBwYXRoLiAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgYXNzaWduZWQgZWxzZXdoZXJlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIGFscmVhZHkgIgorCQkJImFzc2lnbmVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NjoKIAkJLyoKQEAgLTY3MSwxMSArNjY0LDEyIEBACiAJCSAqIHRoZSBwb3dlciBzdXBwbHkgbWF5IGJlIHN3aXRjaGVkIG9mZiBvcgogCQkgKiB0aGUgZHJpdmUgYWRkcmVzcyBtYXkgbm90IGJlIHNldCBjb3JyZWN0bHkuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgbm90IG9uLWxpbmUuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIG5vdCBvbmxpbmVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ3OgogCQkvKiBWb2x1bWUgZmVuY2VkLiBDVSByZXBvcnRzIHZvbHVtZSBpbnRlZ3JpdHkgaXMgbG9zdC4gKi8KLQkJUFJJTlRfV0FSTigiVm9sdW1lIGZlbmNlZC4gVGhlIHZvbHVtZSBpbnRlZ3JpdHkgaXMgbG9zdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIGNvbnRyb2wgdW5pdCBoYXMgZmVuY2VkICIKKwkJCSJhY2Nlc3MgdG8gdGhlIHRhcGUgdm9sdW1lXG4iKTsKIAkJdGFwZV8zNHh4X2RlbGV0ZV9zYmlkX2Zyb20oZGV2aWNlLCAwKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0ODoKQEAgLTY4MywyMCArNjc3LDIxIEBACiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg0OToKIAkJLyogQnVzIG91dCBjaGVjay4gQSBwYXJpdHkgY2hlY2sgZXJyb3Igb24gdGhlIGJ1cyB3YXMgZm91bmQuICovCi0JCVBSSU5UX1dBUk4oIkJ1cyBvdXQgY2hlY2suIEEgZGF0YSB0cmFuc2ZlciBvdmVyIHRoZSBidXMgIgotCQkJICAgImhhcyBiZWVuIGNvcnJ1cHRlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQgb24gdGhlICIKKwkJCSJ0YXBlIGJ1c1xuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGE6CiAJCS8qIENvbnRyb2wgdW5pdCBlcnAgZmFpbGVkLiAqLwotCQlQUklOVF9XQVJOKCJUaGUgY29udHJvbCB1bml0IEkvTyBlcnJvciByZWNvdmVyeSBmYWlsZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkkvTyBlcnJvciByZWNvdmVyeSBmYWlsZWQgb24gIgorCQkJInRoZSB0YXBlIGNvbnRyb2wgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGI6CiAJCS8qCiAJCSAqIENVIGFuZCBkcml2ZSBpbmNvbXBhdGlibGUuIFRoZSBkcml2ZSByZXF1ZXN0cyBtaWNyby1wcm9ncmFtCiAJCSAqIHBhdGNoZXMsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9uIHRoZSBDVS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBuZWVkcyBtaWNyb3Byb2dyYW0gcGF0Y2hlcyBmcm9tIHRoZSAiCi0JCQkgICAiY29udHJvbCB1bml0LCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCByZXF1aXJlcyBhICIKKwkJCSJmaXJtd2FyZSB1cGRhdGVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRjOgogCQkvKgpAQCAtNzIxLDggKzcxNiw4IEBACiAJCQkgKiB0aGUgYmxvY2sgdG8gYmUgd3JpdHRlbiBpcyBsYXJnZXIgdGhhbiBhbGxvd2VkIGZvcgogCQkJICogYnVmZmVyZWQgbW9kZS4KIAkJCSAqLwotCQkJUFJJTlRfV0FSTigiTWF4aW11bSBibG9jayBzaXplIGZvciBidWZmZXJlZCAiCi0JCQkJICAgIm1vZGUgZXhjZWVkZWQuXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgbWF4aW11bSBibG9jayBzaXplIgorCQkJCSIgZm9yIGJ1ZmZlcmVkIG1vZGUgaXMgZXhjZWVkZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9CVUZTKTsKIAkJfQogCQkvKiBUaGlzIGVycGEgaXMgcmVzZXJ2ZWQgZm9yIDM0ODAuICovCkBAIC03NTksMjIgKzc1NCwyMCBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NTU6CiAJCS8qIENoYW5uZWwgaW50ZXJmYWNlIHJlY292ZXJ5IChwZXJtYW5lbnQpLiAqLwotCQlQUklOVF9XQVJOKCJBIHBlcm1hbmVudCBjaGFubmVsIGludGVyZmFjZSBlcnJvciBvY2N1cnJlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBjaGFubmVsIGludGVyZmFjZSBlcnJvciBjYW5ub3QgYmUiCisJCQkiIHJlY292ZXJlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NTY6CiAJCS8qIENoYW5uZWwgcHJvdG9jb2wgZXJyb3IuICovCi0JCVBSSU5UX1dBUk4oIkEgY2hhbm5lbCBwcm90b2NvbCBlcnJvciBvY2N1cnJlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBjaGFubmVsIHByb3RvY29sIGVycm9yICIKKwkJCSJvY2N1cnJlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NTc6CiAJCWlmIChkZXZpY2UtPmNkZXYtPmlkLmRyaXZlcl9pbmZvID09IHRhcGVfMzQ4MCkgewogCQkJLyogQXR0ZW50aW9uIGludGVyY2VwdC4gKi8KLQkJCVBSSU5UX1dBUk4oIkFuIGF0dGVudGlvbiBpbnRlcmNlcHQgb2NjdXJyZWQsICIKLQkJCQkgICAid2hpY2ggd2lsbCBiZSByZWNvdmVyZWQuXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCQl9IGVsc2UgewogCQkJLyogR2xvYmFsIHN0YXR1cyBpbnRlcmNlcHQuICovCi0JCQlQUklOVF9XQVJOKCJBbiBnbG9iYWwgc3RhdHVzIGludGVyY2VwdCB3YXMgcmVjZWl2ZWQsICIKLQkJCQkgICAid2hpY2ggd2lsbCBiZSByZWNvdmVyZWQuXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCQl9CiAJY2FzZSAweDVhOgpAQCAtNzgyLDQyICs3NzUsMzEgQEAKIAkJICogVGFwZSBsZW5ndGggaW5jb21wYXRpYmxlLiBUaGUgdGFwZSBpbnNlcnRlZCBpcyB0b28gbG9uZywKIAkJICogd2hpY2ggY291bGQgY2F1c2UgZGFtYWdlIHRvIHRoZSB0YXBlIG9yIHRoZSBkcml2ZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgTGVuZ3RoIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIlRhcGUgbGVuZ3RoIGV4Y2VlZHMgSUJNIGVuaGFuY2VkIGNhcGFjaXR5ICIKLQkJCSJjYXJ0ZHJpZGdlIGxlbmd0aCBvciBhIG1lZGl1bVxuIik7Ci0JCVBSSU5UX1dBUk4oIndpdGggRUMtQ1NUIGlkZW50aWZpY2F0aW9uIG1hcmsgaGFzIGJlZW4gbW91bnRlZCAiCi0JCQkiaW4gYSBkZXZpY2UgdGhhdCB3cml0ZXNcbiIpOwotCQlQUklOVF9XQVJOKCIzNDgwIG9yIDM0ODAgWEYgZm9ybWF0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQgIgorCQkJInRoZSB0YXBlIGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWI6CiAJCS8qIEZvcm1hdCAzNDgwIFhGIGluY29tcGF0aWJsZSAqLwogCQlpZiAoc2Vuc2VbMV0gJiBTRU5TRV9CRUdJTk5JTkdfT0ZfVEFQRSkKIAkJCS8qIFRoZSB0YXBlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuLiAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7Ci0JCVBSSU5UX1dBUk4oIkZvcm1hdCAzNDgwIFhGIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIk1lZGl1bSBoYXMgYmVlbiBjcmVhdGVkIGluIDM0ODAgZm9ybWF0LiAiCi0JCQkiVG8gY2hhbmdlIHRoZSBmb3JtYXQgd3JpdGVzXG4iKTsKLQkJUFJJTlRfV0FSTigibXVzdCBiZSBpc3N1ZWQgYXQgQk9ULlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIGZvcm1hdCAzNDgwIFhGXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1YzoKIAkJLyogRm9ybWF0IDM0ODAtMiBYRiBpbmNvbXBhdGlibGUgKi8KLQkJUFJJTlRfV0FSTigiRm9ybWF0IDM0ODAtMiBYRiBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJEZXZpY2UgY2FuIG9ubHkgcmVhZCAzNDgwIG9yIDM0ODAgWEYgZm9ybWF0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQgdGFwZSAiCisJCQkiZm9ybWF0IDM0ODAtMiBYRlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWQ6CiAJCS8qIFRhcGUgbGVuZ3RoIHZpb2xhdGlvbi4gKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBMZW5ndGggVmlvbGF0aW9uXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhlIG1vdW50ZWQgdGFwZSBleGNlZWRzIElCTSBFbmhhbmNlZCBDYXBhY2l0eSAiCi0JCQkiQ2FydGRyaWRnZSBTeXN0ZW0gVGFwZSBsZW5ndGguXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhpcyBtYXkgY2F1c2UgZGFtYWdlIHRvIHRoZSBkcml2ZSBvciB0YXBlIHdoZW4gIgotCQkJInByb2Nlc3NpbmcgdG8gdGhlIEVPVlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIHRoZSBjdXJyZW50IHRhcGUgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAJY2FzZSAweDVlOgogCQkvKiBDb21wYWN0aW9uIGFsZ29yaXRobSBpbmNvbXBhdGlibGUuICovCi0JCVBSSU5UX1dBUk4oIkNvbXBhY3Rpb24gQWxnb3JpdGhtIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoZSB2b2x1bWUgaXMgcmVjb3JkZWQgdXNpbmcgYW4gaW5jb21wYXRpYmxlICIKLQkJCSJjb21wYWN0aW9uIGFsZ29yaXRobSxcbiIpOwotCQlQUklOVF9XQVJOKCJ3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCIKKwkJCSIgdGhlIGNvbXBhY3Rpb24gYWxnb3JpdGhtXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAKIAkJLyogVGhlIGZvbGxvd2luZyBlcnBhcyBzaG91bGQgaGF2ZSBiZWVuIGNvdmVyZWQgZWFybGllci4gKi8KQEAgLTg0OCw3ICs4MzAsNiBAQAogCSAgICAoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX0RFVl9FTkQpICYmCiAJICAgIChyZXF1ZXN0LT5vcCA9PSBUT19XUkkpKSB7CiAJCS8qIFdyaXRlIGF0IGVuZCBvZiB2b2x1bWUgKi8KLQkJUFJJTlRfSU5GTygiRW5kIG9mIHZvbHVtZVxuIik7IC8qIFhYWCAqLwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT1NQQyk7CiAJfQogCkBAIC04NjksOSArODUwLDcgQEAKIAl9CiAKIAlEQkZfRVZFTlQoNiwgInh1bmtub3duaXJxXG4iKTsKLQlQUklOVF9FUlIoIlVuZXhwZWN0ZWQgaW50ZXJydXB0LlxuIik7Ci0JUFJJTlRfRVJSKCJDdXJyZW50IG9wIGlzOiAlcyIsIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIHJlcXVlc3QsIGlyYik7CiAJcmV0dXJuIFRBUEVfSU9fU1RPUDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwppbmRleCA3MTYwNWExLi5mYzFkOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwpAQCAtOCwxMiArOCwxNSBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAKICNkZWZpbmUgVEFQRV9EQkZfQVJFQQl0YXBlXzM1OTBfZGJmCisjZGVmaW5lIEJVRlNJWkUgNTEyCS8qIHNpemUgb2YgYnVmZmVycyBmb3IgZHluYW1pYyBnZW5lcmF0ZWQgbWVzc2FnZXMgKi8KIAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgpAQCAtMzYsNyArMzksNyBAQAogICogLSBSZWFkIEFsdGVybmF0ZToJCSBpbXBsZW1lbnRlZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV8zNTkwOiAiCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgogCiBzdGF0aWMgY29uc3QgY2hhciAqdGFwZV8zNTkwX21zZ1tUQVBFXzM1OTBfTUFYX01TR10gPSB7CiAJWzB4MDBdID0gIiIsCkBAIC02NjEsOCArNjY0LDcgQEAKIAkJCWNjdysrOwogCQkJZHN0ICs9IFRBUEVCTE9DS19IU0VDX1NJWkU7CiAJCX0KLQkJaWYgKG9mZiA+IGJ2LT5idl9sZW4pCi0JCQlCVUcoKTsKKwkJQlVHX09OKG9mZiA+IGJ2LT5idl9sZW4pOwogCX0KIAljY3cgPSB0YXBlX2Njd19lbmQoY2N3LCBOT1AsIDAsIE5VTEwpOwogCURCRl9FVkVOVCg2LCAieEJSRURjY3dnXG4iKTsKQEAgLTcyNiw3ICs3MjgsNyBAQAogCX0KIAljX2luZm8tPm1lZGl1bV9zdGF0dXMgfD0gVEFQRTM5MF9NRURJVU1fTE9BREVEX01BU0s7CiAJaWYgKHNlbnNlLT5mbGFncyAmIE1TRU5TRV9DUllQVF9NQVNLKSB7Ci0JCVBSSU5UX0lORk8oIk1lZGl1bSBpcyBlbmNyeXB0ZWQgKCUwNHgpXG4iLCBzZW5zZS0+ZmxhZ3MpOworCQlEQkZfRVZFTlQoNiwgIk1lZGl1bSBpcyBlbmNyeXB0ZWQgKCUwNHgpXG4iLCBzZW5zZS0+ZmxhZ3MpOwogCQljX2luZm8tPm1lZGl1bV9zdGF0dXMgfD0gVEFQRTM5MF9NRURJVU1fRU5DUllQVEVEX01BU0s7CiAJfSBlbHNlCXsKIAkJREJGX0VWRU5UKDYsICJNZWRpdW0gaXMgbm90IGVuY3J5cHRlZCAlMDR4XG4iLCBzZW5zZS0+ZmxhZ3MpOwpAQCAtODQ3LDggKzg0OSw3IEBACiAJCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fUkVBRF9BVFRNU0cpOwogCX0gZWxzZSB7CiAJCURCRl9FVkVOVCgzLCAidW5zb2wuaXJxISBkZXYgZW5kOiAlMDh4XG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCJVbnNvbGljaXRlZCBJUlEgKERldmljZSBFbmQpIGNhdWdodC5cbiIpOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCQl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiKTsKIAl9CiAJLyogY2hlY2sgbWVkaXVtIHN0YXRlICovCiAJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19NU0VOKTsKQEAgLTg3Niw4ICs4NzcsNiBAQAogCWNhc2UgU0VOU0VfQlJBX0RSRToKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfZmFpbGVkKGRldmljZSwgcmVxdWVzdCwgaXJiLCByYyk7CiAJZGVmYXVsdDoKLQkJUFJJTlRfRVJSKCJVbmtub3duIEJSQSAleCAtIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hXG4iLAotCQkJICBzZW5zZS0+YnJhKTsKIAkJQlVHKCk7CiAJCXJldHVybiBUQVBFX0lPX1NUT1A7CiAJfQpAQCAtOTEwLDcgKzkwOSw4IEBACiAJICogc2hvdWxkIHByb2NlZWQgd2l0aCB0aGUgbmV3IHRhcGUuLi4gdGhpcwogCSAqIHNob3VsZCBwcm9iYWJseSBiZSBkb25lIGluIHVzZXIgc3BhY2UhCiAJICovCi0JUFJJTlRfV0FSTigiKCVzKTogU3dhcCBUYXBlIERldmljZSFcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gbXVzdCBiZSBsb2FkZWQgaW50byBhICIKKwkJImRpZmZlcmVudCB0YXBlIHVuaXRcbiIpOwogCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKIH0KIApAQCAtOTg1LDggKzk4NSw2IEBACiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oInJlYWRfb3Bwb3NpdGVfcmVjb3ZlcnlfY2FsbGVkX3dpdGhfb3A6ICVzXG4iLAotCQkJICAgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiAJfQogfQpAQCAtOTk4LDUwICs5OTYsNjEgQEAKIHRhcGVfMzU5MF9wcmludF9taW1fbXNnX2YwKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqc2Vuc2U7CisJY2hhciAqZXhjZXB0aW9uLCAqc2VydmljZTsKKworCWV4Y2VwdGlvbiA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisJc2VydmljZSA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWV4Y2VwdGlvbiB8fCAhc2VydmljZSkKKwkJZ290byBvdXRfbm9tZW07CiAKIAlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICopIGlyYi0+ZWN3OwogCS8qIEV4Y2VwdGlvbiBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MC5lbWMpIHsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRGF0YSBkZWdyYWRlZCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWQgaW4gcGFydGlvbiAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1wKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRGF0YSBkZWdyYWRlZCBpbiBwYXJ0aW9uICVpIiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1wKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gZGVncmFkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIGRlZ3JhZGVkIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIGRlZ3JhZGVkIGluIHBhcnRpdGlvbiAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1wKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIGRlZ3JhZGVkIGluIHBhcnRpdGlvbiAlaSIsCisJCQlzZW5zZS0+Zm10LmY3MC5tcCk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQmxvY2sgMCBFcnJvclxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJCbG9jayAwIEVycm9yIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIEV4Y2VwdGlvbiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tZCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBFeGNlcHRpb24gMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1kKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogTUlNIEV4TXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5lbWMpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzAuZW1jKTsKIAkJYnJlYWs7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuc21jKSB7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZWZlcmVuY2UgTWVkaWEgbWFpbnRlbmFuY2UgcHJvY2VkdXJlICVpXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubWQpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVmZXJlbmNlIE1lZGlhIG1haW50ZW5hbmNlICIKKwkJCSJwcm9jZWR1cmUgJWkiLCBzZW5zZS0+Zm10LmY3MC5tZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLnNtYyk7CiAJCWJyZWFrOwogCX0KKworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUYXBlIG1lZGlhIGluZm9ybWF0aW9uOiBleGNlcHRpb24gJXMsICIKKwkJInNlcnZpY2UgJXNcbiIsIGV4Y2VwdGlvbiwgc2VydmljZSk7CisKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTA1MSwxMDggKzEwNjAsMTA4IEBACiB0YXBlXzM1OTBfcHJpbnRfaW9fc2ltX21zZ19mMShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgIgorCQkJImltcGFjdCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBjaGFubmVsICIKKwkJCSJpbnRlcmZhY2UgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBkZXZpY2UgcGF0aCAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBkZXZpY2UgcGF0aCAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBsaWJyYXJ5IHBhdGggMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gbGlicmFyeSBwYXRoICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIG5vZGUgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gbm9kZSAweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBwYXJ0aXRpb24gMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gcGFydGl0aW9uICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFNJTSBFeE1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuZW1jKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLmVtYyk7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuc21jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgaW1wYWN0IGlzIHVua25vd25cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciBpbXBhY3QgaXMgdW5rbm93biIpOwogCQlicmVhazsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIG5vdCBpbXBhY3QgY3UgcGVyZm9ybWFuY2VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIG5vdCBpbXBhY3QgY3UgIgorCQkJInBlcmZvcm1hbmNlIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGUgIgorCQkJCSIweCV4IG9uIENVIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGVzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJub2RlcyAoMHgleC0weCV4KSBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNhbm5lbCBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoIDB4JXggb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwiCisJCQkJIiBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSIKKwkJCQkiIHBhdGggMHgleCBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UiCisJCQkJIiBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxpYnJhcnkgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImxpYnJhcnkgcGF0aCAweCV4IG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbGlicmFyeSBwYXRocyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibGlicmFyeSBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBDVVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gQ1UiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogU0lNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuc21jKTsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSS9PIHN1YnN5c3RlbSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uIgorCQkiICVzLCBzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMTYyLDExMSArMTE3MSwxMDkgQEAKIHRhcGVfMzU5MF9wcmludF9kZXZfc2ltX21zZ19mMihzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UiCisJCQkiIGltcGFjdCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBjaGFubmVsICIKKwkJCSJpbnRlcmZhY2UgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBsb2FkZXIgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gbG9hZGVyIDB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIG9uIG1lc3NhZ2UgZGlzcGxheSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBtZXNzYWdlIGRpc3BsYXkiCisJCQkiIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gaW4gdGFwZSBwYXRoXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBpbiB0YXBlIHBhdGgiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gaW4gZHJpdmVcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIGluIGRyaXZlIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERTSU0gRXhNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLmVtYyk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5lbWMpOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLnNtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIGltcGFjdCBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgaW1wYWN0IGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGRldmljZSBwZXJmb3JtYW5jZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgbm90IGltcGFjdCBkZXZpY2UgIgorCQkJInBlcmZvcm1hbmNlIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjaGFubmVsIHBhdGggIgotCQkJCSAgICIweCV4IG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJjaGFubmVsIHBhdGggMHgleCBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNoYW5uZWwgcGF0aCAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlIDB4JXggIgotCQkJCSAgICJvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiaW50ZXJmYWNlIDB4JXggb24gRFYiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlcyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiaW50ZXJmYWNlcyAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAweCV4ICIKLQkJCQkgICAib24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIiCisJCQkJIiAweCV4IG9uIERWIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciIKKwkJCQkiICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIERWXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBEViIpOwogCQlicmVhazsKIAljYXNlIDB4MDg6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbWVzc2FnZSAiCi0JCQkJICAgImRpc3BsYXkgMHgleCBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibWVzc2FnZSBkaXNwbGF5IDB4JXggb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBtZXNzYWdlICIKLQkJCQkgICAiZGlzcGxheXMgKDB4JXgtMHgleCkgb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJtZXNzYWdlIGRpc3BsYXlzICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQkgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA5OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDbGVhbiBEVlxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJDbGVhbiBEViIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEU0lNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuc21jKTsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV2aWNlIHN1YnN5c3RlbSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uIgorCQkiICVzLCBzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMjgyLDQ2ICsxMjg5LDQ0IEBACiAJCXJldHVybjsKIAlpZiAoKHNlbnNlLT5tYyA+IDApICYmIChzZW5zZS0+bWMgPCBUQVBFXzM1OTBfTUFYX01TRykpIHsKIAkJaWYgKHRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSAhPSBOVUxMKQotCQkJUFJJTlRfV0FSTigiKCVzKTogJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgdGFwZV8zNTkwX21zZ1tzZW5zZS0+bWNdKTsKLQkJZWxzZSB7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBNZXNzYWdlIENvZGUgMHgleFxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+bWMpOwotCQl9CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgIgorCQkJCSJpc3N1ZWQgc2Vuc2UgbWVzc2FnZSAlc1xuIiwKKwkJCQl0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10pOworCQllbHNlCisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgIgorCQkJCSJpc3N1ZWQgYW4gdW5rbm93biBzZW5zZSBtZXNzYWdlIGNvZGUgMHgleFxuIiwKKwkJCQlzZW5zZS0+bWMpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMCkgewogCQkvKiBTdGFuZGFyZCBNZWRpYSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCi0JCQkgICAiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5zZXYsIHNlbnNlLT5tYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLmVtYywgc2Vuc2UtPmZtdC5mNzAuc21jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAucmVmY29kZSwgc2Vuc2UtPmZtdC5mNzAubWlkLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAuZmlkKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIk1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCisJCQkiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIHNlbnNlLT5mbXQuZjcwLnNldiwgc2Vuc2UtPm1jLAorCQkJc2Vuc2UtPmZtdC5mNzAuZW1jLCBzZW5zZS0+Zm10LmY3MC5zbWMsCisJCQlzZW5zZS0+Zm10LmY3MC5yZWZjb2RlLCBzZW5zZS0+Zm10LmY3MC5taWQsCisJCQlzZW5zZS0+Zm10LmY3MC5maWQpOwogCQl0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKIAl9CiAJaWYgKHNlbnNlLT5tYyA9PSAweGYxKSB7CiAJCS8qIFN0YW5kYXJkIEkvTyBTdWJzeXN0ZW0gU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IElPU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsICIKLQkJCSAgICJNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuc2V2LAotCQkJICAgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCi0JCQkgICBzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnNtYywgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSU9TSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwiCisJCQkiIE1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCisJCQlzZW5zZS0+Zm10LmY3MS5zZXYsIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAorCQkJc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsIHNlbnNlLT5mbXQuZjcxLnNtYywKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKIAkJdGFwZV8zNTkwX3ByaW50X2lvX3NpbV9tc2dfZjEoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMikgewogCQkvKiBTdGFuZGFyZCBEZXZpY2UgU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IERFVlNJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4LCAiCi0JCQkgICAiTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNldiwKLQkJCSAgIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAotCQkJICAgc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5zbWMsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRFVlNJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4IgorCQkJIiwgTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNldiwgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCisJCQlzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywgc2Vuc2UtPmZtdC5mNzEuc21jLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOwogCQl0YXBlXzM1OTBfcHJpbnRfZGV2X3NpbV9tc2dfZjIoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTMyOSw4ICsxMzM0LDggQEAKIAkJLyogU3RhbmRhcmQgTGlicmFyeSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KIAkJcmV0dXJuOwogCX0KLQlQUklOVF9XQVJOKCIoJXMpOiBEZXZpY2UgTWVzc2FnZSgleClcbiIsCi0JCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5tYyk7CisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzIGlzc3VlZCBhbiB1bmtub3duICIKKwkJInNlbnNlIG1lc3NhZ2UgY29kZSAleFxuIiwgc2Vuc2UtPm1jKTsKIH0KIAogc3RhdGljIGludCB0YXBlXzM1OTBfY3J5cHRfZXJyb3Ioc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsCkBAIC0xMzU1LDkgKzEzNjAsOCBAQAogCQkvKiBObyBjb25uZWN0aW9uIHRvIEVLTSAqLwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT1RDT05OKTsKIAotCVBSSU5UX0VSUigiKCVzKTogVW5hYmxlIHRvIGdldCBlbmNyeXB0aW9uIGtleSBmcm9tIEVLTVxuIiwgYnVzX2lkKTsKLQlQUklOVF9FUlIoIiglcyk6IENVPSUwMlggRFJJVkU9JTA2WCBFS009JTAyWDolMDRYXG4iLCBidXNfaWQsIGN1X3JjLAotCQlkcnZfcmMsIGVrbV9yYzEsIGVrbV9yYzIpOworCWRldl9lcnIgKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZmFpbGVkIHRvIG9idGFpbiB0aGUgIgorCQkiZW5jcnlwdGlvbiBrZXkgZnJvbSBFS01cbiIpOwogCiAJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9LRVkpOwogfQpAQCAtMTQ0Myw4ICsxNDQ3LDYgQEAKIAkJICogcHJpbnQgYWRkaXRpb25hbCBtc2cgc2luY2UgZGVmYXVsdCBtc2cKIAkJICogImRldmljZSBpbnRlcnZlbnRpb24iIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWxsCiAJCSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBUYXBlIG9wZXJhdGlvbiB3aGVuIG1lZGl1bSBub3QgbG9hZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKIAkJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19DUllQVF9PRkYpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT01FRElVTSk7CkBAIC0xNDkwLDE5ICsxNDkyLDEzIEBACiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PTUVESVVNKTsKIAogCWNhc2UgMHg2MDIwOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDYXJ0cmlkZ2Ugb2Ygd3JvbmcgdHlwZSA/XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU1FRElVTVRZUEUpOwogCiAJY2FzZSAweDgwMTE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEFub3RoZXIgaG9zdCBoYXMgcmVzZXJ2ZWQgdGhlIHRhcGUgZGV2aWNlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRVBFUk0pOwogCWNhc2UgMHg4MDEzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBBbm90aGVyIGhvc3QgaGFzIHByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSAiCi0JCQkgICAidGFwZSBkZXZpY2VcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQlQUklOVF9XQVJOKCIoJXMpOiBUbyBzb2x2ZSB0aGUgcHJvYmxlbSB1bmxvYWQgdGhlIGN1cnJlbnQgIgotCQkJICAgImNhcnRyaWRnZSFcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBkaWZmZXJlbnQgaG9zdCBoYXMgcHJpdmlsZWdlZCIKKwkJCSIgYWNjZXNzIHRvIHRoZSB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVQRVJNKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CkBAIC0xNTUyLDkgKzE1NDgsNyBAQAogCX0KIAogCURCRl9FVkVOVCg2LCAieHVua25vd25pcnFcbiIpOwotCVBSSU5UX0VSUigiVW5leHBlY3RlZCBpbnRlcnJ1cHQuXG4iKTsKLQlQUklOVF9FUlIoIkN1cnJlbnQgb3AgaXM6ICVzIiwgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0JdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKIAlyZXR1cm4gVEFQRV9JT19TVE9QOwogfQogCkBAIC0xNjA5LDcgKzE2MDMsNiBAQAogCWlmIChyYykKIAkJZ290byBmYWlsX3JkY19kYXRhOwogCWlmIChyZGNfZGF0YS0+ZGF0YVszMV0gPT0gMHgxMykgewotCQlQUklOVF9JTkZPKCJEZXZpY2UgaGFzIGNyeXB0byBzdXBwb3J0XG4iKTsKIAkJZGF0YS0+Y3J5cHRfaW5mby5jYXBhYmlsaXR5IHw9IFRBUEUzOTBfQ1JZUFRfU1VQUE9SVEVEX01BU0s7CiAJCXRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KGRldmljZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCBhZTE4YmFmLi5mMzJlODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKgkJIFN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMjMsOCArMjUsNiBAQAogCiAjaW5jbHVkZSAidGFwZS5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfQkxPQ0s6ICIKLQogI2RlZmluZSBUQVBFQkxPQ0tfTUFYX1NFQwkxMDAKICNkZWZpbmUgVEFQRUJMT0NLX01JTl9SRVFVRVVFCTMKIApAQCAtMjc5LDggKzI3OSw2IEBACiAJdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CiAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEuZGlzaykgewotCQlQUklOVF9FUlIoIiglcyk6IE5vIGdlbmRpc2sgdG8gY2xlYW4gdXAhXG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWdvdG8gY2xlYW51cF9xdWV1ZTsKIAl9CiAKQEAgLTMxNCw3ICszMTIsOCBAQAogCWlmICghZGV2aWNlLT5ibGtfZGF0YS5tZWRpdW1fY2hhbmdlZCkKIAkJcmV0dXJuIDA7CiAKLQlQUklOVF9JTkZPKCJEZXRlY3RpbmcgbWVkaWEgc2l6ZS4uLlxuIik7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgdGhlIHJlY29yZGVkICIKKwkJImFyZWEuLi5cbiIpOwogCXJjID0gdGFwZV9tdG9wKGRldmljZSwgTVRGU0ZNLCAxKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTM0MSw3ICszNDAsOCBAQAogCWRldmljZS0+Ym9mID0gcmM7CiAJbnJfb2ZfYmxrcyAtPSByYzsKIAotCVBSSU5UX0lORk8oIkZvdW5kICVpIGJsb2NrcyBvbiBtZWRpYVxuIiwgbnJfb2ZfYmxrcyk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHNpemUgb2YgdGhlIHJlY29yZGVkIGFyZWEgaXMgJWkgIgorCQkiYmxvY2tzXG4iLCBucl9vZl9ibGtzKTsKIAlzZXRfY2FwYWNpdHkoZGV2aWNlLT5ibGtfZGF0YS5kaXNrLAogCQlucl9vZl9ibGtzKihUQVBFQkxPQ0tfSFNFQ19TSVpFLzUxMikpOwogCkBAIC0zNzYsOCArMzc2LDggQEAKIAogCWlmIChkZXZpY2UtPnJlcXVpcmVkX3RhcGVtYXJrcykgewogCQlEQkZfRVZFTlQoMiwgIlRCTE9DSzogbWlzc2luZyB0YXBlbWFya3NcbiIpOwotCQlQUklOVF9FUlIoIlRCTE9DSzogUmVmdXNpbmcgdG8gb3BlbiB0YXBlIHdpdGggbWlzc2luZyIKLQkJCSIgZW5kIG9mIGZpbGUgbWFya3MuXG4iKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiT3BlbmluZyB0aGUgdGFwZSBmYWlsZWQgYmVjYXVzZSIKKwkJCSIgb2YgbWlzc2luZyBlbmQtb2YtZmlsZSBtYXJrc1xuIik7CiAJCXJjID0gLUVQRVJNOwogCQlnb3RvIHB1dF9kZXZpY2U7CiAJfQpAQCAtNDUyLDcgKzQ1Miw2IEBACiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCVBSSU5UX1dBUk4oImludmFsaWQgaW9jdGwgMHgleFxuIiwgY29tbWFuZCk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJfQogCkBAIC00NzQsNyArNDczLDYgQEAKIAogCWlmICh0YXBlYmxvY2tfbWFqb3IgPT0gMCkKIAkJdGFwZWJsb2NrX21ham9yID0gcmM7Ci0JUFJJTlRfSU5GTygidGFwZSBnZXRzIG1ham9yICVkIGZvciBibG9jayBkZXZpY2VcbiIsIHRhcGVibG9ja19tYWpvcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKaW5kZXggYmUwY2UyMi4uMzE1NjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogI2luY2x1ZGUgInRhcGVfY2xhc3MuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0NIQVI6ICIKLQogI2RlZmluZSBUQVBFQ0hBUl9NQUpPUgkJMAkvKiBnZXQgZHluYW1pYyBtYWpvciAqLwogCiAvKgpAQCAtMTAyLDggKzEwMCw2IEBACiAJaWYgKGJsb2NrX3NpemUgPiBNQVhfQkxPQ0tTSVpFKSB7CiAJCURCRl9FVkVOVCgzLCAiSW52YWxpZCBibG9ja3NpemUgKCV6ZCA+ICVkKVxuIiwKIAkJCWJsb2NrX3NpemUsIE1BWF9CTE9DS1NJWkUpOwotCQlQUklOVF9FUlIoIkludmFsaWQgYmxvY2tzaXplICglemQ+ICVkKVxuIiwKLQkJCWJsb2NrX3NpemUsIE1BWF9CTE9DS1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ4NSw3ICs0ODEsNiBAQAogCQlyZXR1cm4gLTE7CiAKIAl0YXBlY2hhcl9tYWpvciA9IE1BSk9SKGRldik7Ci0JUFJJTlRfSU5GTygidGFwZSBnZXRzIG1ham9yICVkIGZvciBjaGFyYWN0ZXIgZGV2aWNlc1xuIiwgTUFKT1IoZGV2KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5Niw3ICs0OTEsNSBAQAogdm9pZAogdGFwZWNoYXJfZXhpdCh2b2lkKQogewotCVBSSU5UX0lORk8oInRhcGUgcmVsZWFzZXMgbWFqb3IgJWQgZm9yIGNoYXJhY3RlciBkZXZpY2VzXG4iLAotCQl0YXBlY2hhcl9tYWpvcik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHRhcGVjaGFyX21ham9yLCAwKSwgMjU2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggZjliYjUxZi4uMDhjMDlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CSAgICAgLy8gZm9yIGtlcm5lbCBwYXJhbWV0ZXJzCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgkgICAgIC8vIGZvciByZXF1ZXN0aW5nIG1vZHVsZXMKQEAgLTI1LDcgKzI2LDYgQEAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0NPUkU6ICIKICNkZWZpbmUgTE9OR19CVVNZX1RJTUVPVVQgMTgwIC8qIHNlY29uZHMgKi8KIAogc3RhdGljIHZvaWQgX190YXBlX2RvX2lycSAoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGlyYiAqKTsKQEAgLTIxNCwxMyArMjE0LDEzIEBACiAJc3dpdGNoKG5ld3N0YXRlKXsKIAljYXNlIE1TX1VOTE9BREVEOgogCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgfD0gR01UX0RSX09QRU4ofjApOwotCQlQUklOVF9JTkZPKCIoJXMpOiBUYXBlIGlzIHVubG9hZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGNhcnRyaWRnZSBoYXMgYmVlbiAiCisJCQkic3VjY2Vzc2Z1bGx5IHVubG9hZGVkXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBNU19MT0FERUQ6CiAJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyAmPSB+R01UX0RSX09QRU4ofjApOwotCQlQUklOVF9JTkZPKCIoJXMpOiBUYXBlIGhhcyBiZWVuIG1vdW50ZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSB0YXBlIGNhcnRyaWRnZSBoYXMgYmVlbiAiCisJCQkibW91bnRlZFxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8vIHByaW50IG5vdGhpbmcKQEAgLTMzMyw3ICszMzMsNiBAQAogCS8qIExldCB0aGUgZGlzY2lwbGluZSBoYXZlIGEgZ28gYXQgdGhlIGRldmljZS4gKi8KIAlkZXZpY2UtPmRpc2NpcGxpbmUgPSBkaXNjaXBsaW5lOwogCWlmICghdHJ5X21vZHVsZV9nZXQoZGlzY2lwbGluZS0+b3duZXIpKSB7Ci0JCVBSSU5UX0VSUigiQ2Fubm90IGdldCBtb2R1bGUuIE1vZHVsZSBnb25lLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzkxLDcgKzM5MCw2IEBACiB0YXBlX2dlbmVyaWNfb2ZmbGluZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlpZiAoIWRldmljZSkgewotCQlQUklOVF9FUlIoInRhcGVfZ2VuZXJpY19vZmZsaW5lOiBubyBzdWNoIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDEzLDkgKzQxMSw2IEBACiAJCQlEQkZfRVZFTlQoMywgIiglMDh4KTogU2V0IG9mZmxpbmUgZmFpbGVkICIKIAkJCQkiLSBkcml2ZSBpbiB1c2UuXG4iLAogCQkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBTZXQgb2ZmbGluZSBmYWlsZWQgIgotCQkJCSItIGRyaXZlIGluIHVzZS5cbiIsCi0JCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC00MzUsMTQgKzQzMCwxMSBAQAogCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXBlX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwotCQlQUklOVF9JTkZPICgiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCQkgICAgInRhcGUgaW5mbyBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAJZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwotCQlQUklOVF9JTkZPKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1vZGVzZXQgYnl0ZVxuIik7CiAJCWtmcmVlKGRldmljZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KQEAgLTQ5MCw3ICs0ODIsNiBAQAogCX0gZWxzZSB7CiAJCWlmIChyZW1haW4gPCAwKSB7CiAJCQlEQkZfRVZFTlQoNCwgInB1dCBkZXZpY2Ugd2l0aG91dCByZWZlcmVuY2VcbiIpOwotCQkJUFJJTlRfRVJSKCJwdXQgZGV2aWNlIHdpdGhvdXQgcmVmZXJlbmNlXG4iKTsKIAkJfSBlbHNlIHsKIAkJCURCRl9FVkVOVCg0LCAidGFwZV9mcmVlX2RldmljZSglcClcbiIsIGRldmljZSk7CiAJCQlrZnJlZShkZXZpY2UtPm1vZGVzZXRfYnl0ZSk7CkBAIC01MzgsOCArNTI5LDYgQEAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNkZXYtPmRldi5rb2JqLCAmdGFwZV9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KSB7CiAJCXRhcGVfcHV0X2RldmljZShkZXZpY2UpOwotCQlQUklOVF9FUlIoInByb2JlIGZhaWxlZCBmb3IgdGFwZSBkZXZpY2UgJXNcbiIsCi0JCQkgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJY2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gZGV2aWNlOwpAQCAtNTQ3LDcgKzUzNiw2IEBACiAJZGV2aWNlLT5jZGV2ID0gY2RldjsKIAljY3dfZGV2aWNlX2dldF9pZChjZGV2LCAmZGV2X2lkKTsKIAlkZXZpY2UtPmNkZXZfaWQgPSBkZXZpZF90b19pbnQoJmRldl9pZCk7Ci0JUFJJTlRfSU5GTygidGFwZSBkZXZpY2UgJXMgZm91bmRcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODQsNyArNTcyLDYgQEAKIAogCWRldmljZSA9IGNkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoIWRldmljZSkgewotCQlQUklOVF9FUlIoIk5vIGRldmljZSBwb2ludGVyIGluIHRhcGVfZ2VuZXJpY19yZW1vdmUhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlEQkZfTEgoMywgIiglMDh4KTogdGFwZV9nZW5lcmljX3JlbW92ZSglcClcbiIsIGRldmljZS0+Y2Rldl9pZCwgY2Rldik7CkBAIC02MTUsMTAgKzYwMiw4IEBACiAJCQkgKi8KIAkJCURCRl9FVkVOVCgzLCAiKCUwOHgpOiBEcml2ZSBpbiB1c2UgdmFuaXNoZWQhXG4iLAogCQkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBEcml2ZSBpbiB1c2UgdmFuaXNoZWQgLSAiCi0JCQkJImV4cGVjdCB0cm91YmxlIVxuIiwKLQkJCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJCVBSSU5UX1dBUk4oIlN0YXRlIHdhcyAlaVxuIiwgZGV2aWNlLT50YXBlX3N0YXRlKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgdGFwZSB1bml0IHdhcyBkZXRhY2hlZCIKKwkJCQkiIHdoaWxlIGluIHVzZVxuIik7CiAJCQl0YXBlX3N0YXRlX3NldChkZXZpY2UsIFRTX05PVF9PUEVSKTsKIAkJCV9fdGFwZV9kaXNjYXJkX3JlcXVlc3RzKGRldmljZSk7CiAJCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwpAQCAtNjM5LDggKzYyNCw3IEBACiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmIChkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fCAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpCi0JCUJVRygpOworCUJVR19PTihkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fCAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpOwogCiAJREJGX0xIKDYsICJ0YXBlX2FsbG9jX3JlcXVlc3QoJWQsICVkKVxuIiwgY3BsZW5ndGgsIGRhdGFzaXplKTsKIApAQCAtNzk3LDggKzc4MSw3IEBACiAJZGV2aWNlID0gKHN0cnVjdCB0YXBlX2RldmljZSAqKSBkYXRhOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGRldmljZS0+cmVxX3F1ZXVlLm5leHQsIHN0cnVjdCB0YXBlX3JlcXVlc3QsIGxpc3QpOwotCWlmIChyZXF1ZXN0LT5zdGF0dXMgIT0gVEFQRV9SRVFVRVNUX0xPTkdfQlVTWSkKLQkJQlVHKCk7CisJQlVHX09OKHJlcXVlc3QtPnN0YXR1cyAhPSBUQVBFX1JFUVVFU1RfTE9OR19CVVNZKTsKIAlEQkZfTEgoNiwgIiUwOHg6IExvbmcgYnVzeSB0aW1lb3V0LlxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKIAlfX3RhcGVfc3RhcnRfbmV4dF9yZXF1ZXN0KGRldmljZSk7CiAJZGV2aWNlLT5sYl90aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CkBAIC04MzAsMzAgKzgxMyw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBzZW5zZSBkYXRhIHRvIGNvbnNvbGUvZGJmCi0gKi8KLXZvaWQKLXRhcGVfZHVtcF9zZW5zZShzdHJ1Y3QgdGFwZV9kZXZpY2UqIGRldmljZSwgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCwKLQkJc3RydWN0IGlyYiAqaXJiKQotewotCXVuc2lnbmVkIGludCAqc3B0cjsKLQotCVBSSU5UX0lORk8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCVBSSU5UX0lORk8oIkRTVEFUIDogJTAyeCAgQ1NUQVQ6ICUwMngJQ1BBOiAlMDR4XG4iLAotCQkgICBpcmItPnNjc3cuY21kLmRzdGF0LCBpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmNwYSk7Ci0JUFJJTlRfSU5GTygiREVWSUNFOiAlc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JaWYgKHJlcXVlc3QgIT0gTlVMTCkKLQkJUFJJTlRfSU5GTygiT1AJICA6ICVzXG4iLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQotCXNwdHIgPSAodW5zaWduZWQgaW50ICopIGlyYi0+ZWN3OwotCVBSSU5UX0lORk8oIlNlbnNlIGRhdGE6ICUwOFggJTA4WCAlMDhYICUwOFggXG4iLAotCQkgICBzcHRyWzBdLCBzcHRyWzFdLCBzcHRyWzJdLCBzcHRyWzNdKTsKLQlQUklOVF9JTkZPKCJTZW5zZSBkYXRhOiAlMDhYICUwOFggJTA4WCAlMDhYIFxuIiwKLQkJICAgc3B0cls0XSwgc3B0cls1XSwgc3B0cls2XSwgc3B0cls3XSk7Ci0JUFJJTlRfSU5GTygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotfQotCi0vKgogICogV3JpdGUgc2Vuc2UgZGF0YSB0byBkYmYKICAqLwogdm9pZApAQCAtMTA1MSw4ICsxMDEwLDYgQEAKIAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgY2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewotCQlQUklOVF9FUlIoImNvdWxkIG5vdCBnZXQgZGV2aWNlIHN0cnVjdHVyZSBmb3IgJXMgIgotCQkJICAiaW4gaW50ZXJydXB0XG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAJcmVxdWVzdCA9IChzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICopIGludHBhcm07CkBAIC0xMDY0LDEzICsxMDIxLDEzIEBACiAJCS8qIEZJWE1FOiBXaGF0IHRvIGRvIHdpdGggdGhlIHJlcXVlc3Q/ICovCiAJCXN3aXRjaCAoUFRSX0VSUihpcmIpKSB7CiAJCQljYXNlIC1FVElNRURPVVQ6Ci0JCQkJUFJJTlRfV0FSTigiKCVzKTogUmVxdWVzdCB0aW1lZCBvdXRcbiIsCisJCQkJREJGX0xIKDEsICIoJXMpOiBSZXF1ZXN0IHRpbWVkIG91dFxuIiwKIAkJCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJY2FzZSAtRUlPOgogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIC1FSU8pOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlQUklOVF9FUlIoIiglcyk6IFVuZXhwZWN0ZWQgaS9vIGVycm9yICVsaVxuIiwKKwkJCQlEQkZfTEgoMSwgIiglcyk6IFVuZXhwZWN0ZWQgaS9vIGVycm9yICVsaVxuIiwKIAkJCQkJZGV2X25hbWUoJmNkZXYtPmRldiksCiAJCQkJCVBUUl9FUlIoaXJiKSk7CiAJCX0KQEAgLTExODIsOCArMTEzOSw2IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAocmMgPiAwKSB7CiAJCQkJREJGX0VWRU5UKDYsICJ4dW5rbm93bnJjXG4iKTsKLQkJCQlQUklOVF9FUlIoIkludmFsaWQgcmV0dXJuIGNvZGUgZnJvbSBkaXNjaXBsaW5lICIKLQkJCQkgIAkiaW50ZXJydXB0IGZ1bmN0aW9uLlxuIik7CiAJCQkJX190YXBlX2VuZF9yZXF1ZXN0KGRldmljZSwgcmVxdWVzdCwgLUVJTyk7CiAJCQl9IGVsc2UgewogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIHJjKTsKQEAgLTEzMjMsNyArMTI3OCw2IEBACiBFWFBPUlRfU1lNQk9MKHRhcGVfbWVkX3N0YXRlX3NldCk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfYWxsb2NfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZnJlZV9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0wodGFwZV9kdW1wX3NlbnNlKTsKIEVYUE9SVF9TWU1CT0wodGFwZV9kdW1wX3NlbnNlX2RiZik7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZG9faW8pOwogRVhQT1JUX1NZTUJPTCh0YXBlX2RvX2lvX2FzeW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKaW5kZXggOGEzNzZhZi4uMjAyZjQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKQEAgLTIwLDggKzIwLDYgQEAKIAogI2luY2x1ZGUgInRhcGUuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX1BST0M6ICIKLQogc3RhdGljIGNvbnN0IGNoYXIgKnRhcGVfbWVkX3N0X3ZlcmJvc2VbTVNfU0laRV0gPQogewogCVtNU19VTktOT1dOXSA9ICJVTktOT1dOICIsCkBAIC0xMjgsNyArMTI2LDYgQEAKIAkJcHJvY19jcmVhdGUoInRhcGVkZXZpY2VzIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMLAogCQkJICAgICZ0YXBlX3Byb2Nfb3BzKTsKIAlpZiAodGFwZV9wcm9jX2RldmljZXMgPT0gTlVMTCkgewotCQlQUklOVF9XQVJOKCJ0YXBlOiBDYW5ub3QgcmVnaXN0ZXIgcHJvY2ZzIGVudHJ5IHRhcGVkZXZpY2VzXG4iKTsKIAkJcmV0dXJuOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCmluZGV4IDViZDU3M2QuLjFhOTQyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfU1REOiAiCi0KIC8qCiAgKiB0YXBlX3N0ZF9hc3NpZ24KICAqLwpAQCAtMzksMTYgKzM3LDE1IEBACiAJaW50IHJjOwogCiAJcmVxdWVzdCA9IChzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICopIGRhdGE7Ci0JaWYgKChkZXZpY2UgPSByZXF1ZXN0LT5kZXZpY2UpID09IE5VTEwpCi0JCUJVRygpOworCWRldmljZSA9IHJlcXVlc3QtPmRldmljZTsKKwlCVUdfT04oIWRldmljZSk7CiAKIAlEQkZfRVZFTlQoMywgIiUwOHg6IEFzc2lnbm1lbnQgdGltZW91dC4gRGV2aWNlIGJ1c3kuXG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKIAlyYyA9IHRhcGVfY2FuY2VsX2lvKGRldmljZSwgcmVxdWVzdCk7CiAJaWYocmMpCi0JCVBSSU5UX0VSUigiKCVzKTogQXNzaWduIHRpbWVvdXQ6IENhbmNlbCBmYWlsZWQgd2l0aCByYyA9ICVpXG4iLAorCQlEQkZfRVZFTlQoMywgIiglcyk6IEFzc2lnbiB0aW1lb3V0OiBDYW5jZWwgZmFpbGVkIHdpdGggcmMgPSAlaVxuIiwKIAkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKLQogfQogCiBpbnQKQEAgLTgyLDggKzc5LDYgQEAKIAlkZWxfdGltZXIoJnRpbWVvdXQpOwogCiAJaWYgKHJjICE9IDApIHsKLQkJUFJJTlRfV0FSTigiJXM6IGFzc2lnbiBmYWlsZWQgLSBkZXZpY2UgbWlnaHQgYmUgYnVzeVxuIiwKLQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlEQkZfRVZFTlQoMywgIiUwOHg6IGFzc2lnbiBmYWlsZWQgLSBkZXZpY2UgbWlnaHQgYmUgYnVzeVxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7CiAJfSBlbHNlIHsKQEAgLTEwNSw4ICsxMDAsNiBAQAogCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPT0gVFNfTk9UX09QRVIpIHsKIAkJREJGX0VWRU5UKDMsICIoJTA4eCk6IENhbid0IHVuYXNzaWduIGRldmljZVxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENhbid0IHVuYXNzaWduIGRldmljZSAtIGRldmljZSBnb25lXG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTIwLDggKzExMyw2IEBACiAKIAlpZiAoKHJjID0gdGFwZV9kb19pbyhkZXZpY2UsIHJlcXVlc3QpKSAhPSAwKSB7CiAJCURCRl9FVkVOVCgzLCAiJTA4eDogVW5hc3NpZ24gZmFpbGVkXG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCIlczogVW5hc3NpZ24gZmFpbGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJfSBlbHNlIHsKIAkJREJGX0VWRU5UKDMsICIlMDh4OiBUYXBlIHVuYXNzaWduZWRcbiIsIGRldmljZS0+Y2Rldl9pZCk7CiAJfQpAQCAtMjQyLDggKzIzMyw2IEBACiAJaWYgKGNvdW50ID4gTUFYX0JMT0NLU0laRSkgewogCQlEQkZfRVZFTlQoMywgIkludmFsaWQgYmxvY2sgc2l6ZSAoJWQgPiAlZCkgZ2l2ZW4uXG4iLAogCQkJY291bnQsIE1BWF9CTE9DS1NJWkUpOwotCQlQUklOVF9FUlIoIkludmFsaWQgYmxvY2sgc2l6ZSAoJWQgPiAlZCkgZ2l2ZW4uXG4iLAotCQkJY291bnQsIE1BWF9CTE9DS1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTYzMywxNCArNjIyLDYgQEAKIAogCWlmIChtdF9jb3VudCA8IDAgfHwgbXRfY291bnQgPiAxKSB7CiAJCURCRl9FWENFUFRJT04oNiwgInhjb20gcGFybVxuIik7Ci0JCWlmICgqZGV2aWNlLT5tb2Rlc2V0X2J5dGUgJiAweDA4KQotCQkJUFJJTlRfSU5GTygiKCVzKSBDb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgb25cbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCWVsc2UKLQkJCVBSSU5UX0lORk8oIiglcykgQ29tcHJlc3Npb24gaXMgY3VycmVudGx5IG9mZlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJUFJJTlRfSU5GTygiVXNlIDEgdG8gc3dpdGNoIGNvbXByZXNzaW9uIG9uLCAwIHRvICIKLQkJCSAgICJzd2l0Y2ggaXQgb2ZmXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwppbmRleCBlZWZjNjYxLi4xYmJhZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwNworICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDgKICAqIEF1dGhvcihzKTogTWljaGFlbCBIb2x6aGV1CiAgKi8KIApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlICJzY2xwLmgiCiAKICNkZWZpbmUgVFJBQ0UoeC4uLikgZGVidWdfc3ByaW50Zl9ldmVudCh6Y29yZV9kYmYsIDEsIHgpCkBAIC00OCwxMiArNDksMTkgQEAKIAl1bmlvbiBzYXZlX2FyZWEJbGNfbWFzazsKIH07CiAKK3N0cnVjdCBpcGliX2luZm8geworCXVuc2lnbmVkIGxvbmcJaXBpYjsKKwl1MzIJCWNoZWNrc3VtOworfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2luZm8gc3lzX2luZm87CiBzdGF0aWMgc3RydWN0IGRlYnVnX2luZm8gKnpjb3JlX2RiZjsKIHN0YXRpYyBpbnQgaHNhX2F2YWlsYWJsZTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9kaXI7CiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqemNvcmVfZmlsZTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9tZW1tYXBfZmlsZTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9yZWlwbF9maWxlOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICppcGxfYmxvY2s7CiAKIC8qCiAgKiBDb3B5IG1lbW9yeSBmcm9tIEhTQSB0byBrZXJuZWwgb3IgdXNlciBtZW1vcnkgKG5vdCByZWVudHJhbnQpOgpAQCAtNTI3LDYgKzUzNSwzMyBAQAogCS5yZWxlYXNlCT0gemNvcmVfbWVtbWFwX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgc3NpemVfdCB6Y29yZV9yZWlwbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGlwbF9ibG9jaykgeworCQlkaWFnMzA4KERJQUczMDhfU0VULCBpcGxfYmxvY2spOworCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHpjb3JlX3JlaXBsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemNvcmVfcmVpcGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemNvcmVfcmVpcGxfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IHpjb3JlX3JlaXBsX3dyaXRlLAorCS5vcGVuCQk9IHpjb3JlX3JlaXBsX29wZW4sCisJLnJlbGVhc2UJPSB6Y29yZV9yZWlwbF9yZWxlYXNlLAorfTsKKwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3MzOTBfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKIHsKQEAgLTY0NSw2ICs2ODAsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFByb3ZpZGUgSVBMIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBibG9jayBmcm9tIGVpdGhlciBIU0Egb3IgbWVtb3J5CisgKiBmb3IgZnV0dXJlIHJlaXBsCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHpjb3JlX3JlaXBsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXBpYl9pbmZvIGlwaWJfaW5mbzsKKwlpbnQgcmM7CisKKwlyYyA9IG1lbWNweV9oc2Ffa2VybmVsKCZpcGliX2luZm8sIF9fTENfRFVNUF9SRUlQTCwgc2l6ZW9mKGlwaWJfaW5mbykpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWlmIChpcGliX2luZm8uaXBpYiA9PSAwKQorCQlyZXR1cm4gMDsKKwlpcGxfYmxvY2sgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFpcGxfYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCWlmIChpcGliX2luZm8uaXBpYiA8IFpGQ1BEVU1QX0hTQV9TSVpFKQorCQlyYyA9IG1lbWNweV9oc2Ffa2VybmVsKGlwbF9ibG9jaywgaXBpYl9pbmZvLmlwaWIsIFBBR0VfU0laRSk7CisJZWxzZQorCQlyYyA9IG1lbWNweV9yZWFsKGlwbF9ibG9jaywgaXBpYl9pbmZvLmlwaWIsIFBBR0VfU0laRSk7CisJaWYgKHJjKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXBsX2Jsb2NrKTsKKwkJcmV0dXJuIHJjOworCX0KKwlpZiAoY3N1bV9wYXJ0aWFsKGlwbF9ibG9jaywgaXBsX2Jsb2NrLT5oZHIubGVuLCAwKSAhPQorCSAgICBpcGliX2luZm8uY2hlY2tzdW0pIHsKKwkJVFJBQ0UoIkNoZWNrc3VtIGRvZXMgbm90IG1hdGNoXG4iKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCQlpcGxfYmxvY2sgPSBOVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgemNvcmVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYXJjaDsKQEAgLTY5MCw2ICs3NTksMTAgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIAorCXJjID0gemNvcmVfcmVpcGxfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBmYWlsOworCiAJemNvcmVfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ6Y29yZSIgLCBOVUxMKTsKIAlpZiAoIXpjb3JlX2RpcikgewogCQlyYyA9IC1FTk9NRU07CkBAIC03MDcsOSArNzgwLDE3IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2ZpbGU7CiAJfQorCXpjb3JlX3JlaXBsX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWlwbCIsIFNfSVJVU1IsIHpjb3JlX2RpciwKKwkJCQkJCU5VTEwsICZ6Y29yZV9yZWlwbF9mb3BzKTsKKwlpZiAoIXpjb3JlX3JlaXBsX2ZpbGUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbWVtbWFwX2ZpbGU7CisJfQogCWhzYV9hdmFpbGFibGUgPSAxOwogCXJldHVybiAwOwogCitmYWlsX21lbW1hcF9maWxlOgorCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX21lbW1hcF9maWxlKTsKIGZhaWxfZmlsZToKIAlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9maWxlKTsKIGZhaWxfZGlyOgpAQCAtNzIzLDEwICs4MDQsMTUgQEAKIHsKIAlkZWJ1Z191bnJlZ2lzdGVyKHpjb3JlX2RiZik7CiAJc2NscF9zZGlhc19leGl0KCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX3JlaXBsX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX21lbW1hcF9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9kaXIpOwogCWRpYWczMDgoRElBRzMwOF9SRUxfSFNBLCBOVUxMKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDciKTsKK01PRFVMRV9BVVRIT1IoIkNvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA4Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInpjb3JlIG1vZHVsZSBmb3IgemZjcGR1bXAgc3VwcG9ydCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQppbmRleCBiZDc5YmQxLi5hZGIzZGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai15ICs9IGFpcnEubyBibGFja2xpc3QubyBjaHNjLm8gY2lvLm8gY3NzLm8gY2hwLm8gaWRzZXQubyBpc2MubyBzY3N3Lm8gXAotCWZjeC5vIGl0Y3cubworCWZjeC5vIGl0Y3cubyBjcncubwogY2N3X2RldmljZS1vYmpzICs9IGRldmljZS5vIGRldmljZV9mc20ubyBkZXZpY2Vfb3BzLm8KIGNjd19kZXZpY2Utb2JqcyArPSBkZXZpY2VfaWQubyBkZXZpY2VfcGdpZC5vIGRldmljZV9zdGF0dXMubwogb2JqLXkgKz0gY2N3X2RldmljZS5vIGNtZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCmluZGV4IGZlNmNlYTEuLjY1ZDJlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCkBAIC0zNCw4ICszNCw4IEBACiAJdm9pZCAqZHJ2X2RhdGE7CiB9OwogCi1zdGF0aWMgdW5pb24gaW5kaWNhdG9yX3QgaW5kaWNhdG9yc1tNQVhfSVNDXTsKLXN0YXRpYyBzdHJ1Y3QgYWlycV90ICphaXJxc1tNQVhfSVNDXVtOUl9BSVJRU107CitzdGF0aWMgdW5pb24gaW5kaWNhdG9yX3QgaW5kaWNhdG9yc1tNQVhfSVNDKzFdOworc3RhdGljIHN0cnVjdCBhaXJxX3QgKmFpcnFzW01BWF9JU0MrMV1bTlJfQUlSUVNdOwogCiBzdGF0aWMgaW50IHJlZ2lzdGVyX2FpcnEoc3RydWN0IGFpcnFfdCAqYWlycSwgdTggaXNjKQogewpAQCAtMTMzLDYgKzEzMyw4IEBACiAJCXdoaWxlICh3b3JkKSB7CiAJCQlpZiAod29yZCAmIElORElDQVRPUl9NQVNLKSB7CiAJCQkJYWlycSA9IGFpcnFzW2lzY11baV07CisJCQkJLyogTWFrZSBzdXJlIGdjYyByZWFkcyBmcm9tIGFpcnFzIG9ubHkgb25jZS4gKi8KKwkJCQliYXJyaWVyKCk7CiAJCQkJaWYgKGxpa2VseShhaXJxKSkKIAkJCQkJYWlycS0+aGFuZGxlcigmaW5kaWNhdG9yc1tpc2NdLmJ5dGVbaV0sCiAJCQkJCQkgICAgICBhaXJxLT5kcnZfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwppbmRleCBmZTAwYmUzLi42NTY1ZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKQEAgLTMzNiw4ICszMzYsNyBAQAogCQkgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCkKIHsKIAljaGFyICpidWY7Ci0Jc2l6ZV90IGk7Ci0Jc3NpemVfdCByYywgcmV0OworCXNzaXplX3QgcmMsIHJldCwgaTsKIAogCWlmICgqb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwppbmRleCA5MThlNmZjLi4yMmNlNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCkBAIC0xMDQsOCArMTA0LDkgQEAKIAlyYyA9IGRldmljZV9zY2hlZHVsZV9jYWxsYmFjayhkZXYsIGNjd2dyb3VwX3VuZ3JvdXBfY2FsbGJhY2spOwogb3V0OgogCWlmIChyYykgewotCQkvKiBSZWxlYXNlIG9ub2ZmICJsb2NrIiB3aGVuIHVuZ3JvdXBpbmcgZmFpbGVkLiAqLwotCQlhdG9taWNfc2V0KCZnZGV2LT5vbm9mZiwgMCk7CisJCWlmIChyYyAhPSAtRUFHQUlOKQorCQkJLyogUmVsZWFzZSBvbm9mZiAibG9jayIgd2hlbiB1bmdyb3VwaW5nIGZhaWxlZC4gKi8KKwkJCWF0b21pY19zZXQoJmdkZXYtPm9ub2ZmLCAwKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gY291bnQ7CkBAIC0zMTQsMTYgKzMxNSwzMiBAQAogfQogRVhQT1JUX1NZTUJPTChjY3dncm91cF9jcmVhdGVfZnJvbV9zdHJpbmcpOwogCi1zdGF0aWMgaW50IF9faW5pdAotaW5pdF9jY3dncm91cCAodm9pZCkKK3N0YXRpYyBpbnQgY2N3Z3JvdXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgIHZvaWQgKmRhdGEpOworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNjd2dyb3VwX25iID0geworCS5ub3RpZmllcl9jYWxsID0gY2N3Z3JvdXBfbm90aWZpZXIKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfY2N3Z3JvdXAodm9pZCkKIHsKLQlyZXR1cm4gYnVzX3JlZ2lzdGVyICgmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWludCByZXQ7CisKKwlyZXQgPSBidXNfcmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZjY3dncm91cF9idXNfdHlwZSwgJmNjd2dyb3VwX25iKTsKKwlpZiAocmV0KQorCQlidXNfdW5yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0Ci1jbGVhbnVwX2Njd2dyb3VwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfY2N3Z3JvdXAodm9pZCkKIHsKLQlidXNfdW5yZWdpc3RlciAoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmY2N3Z3JvdXBfYnVzX3R5cGUsICZjY3dncm91cF9uYik7CisJYnVzX3VucmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9jY3dncm91cCk7CkBAIC0zOTEsMjcgKzQwOCwyOCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IHJldDsKIAotCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWlmICghZGV2LT5kcml2ZXIpCi0JCXJldHVybiBjb3VudDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYgKGdkZXYtPmRldi5kcml2ZXIpOworCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOworCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGdkcnYtPm93bmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JcmV0ID0gY291bnQ7CisKIAlpZiAodmFsdWUgPT0gMSkKLQkJY2N3Z3JvdXBfc2V0X29ubGluZShnZGV2KTsKKwkJcmV0ID0gY2N3Z3JvdXBfc2V0X29ubGluZShnZGV2KTsKIAllbHNlIGlmICh2YWx1ZSA9PSAwKQotCQljY3dncm91cF9zZXRfb2ZmbGluZShnZGV2KTsKKwkJcmV0ID0gY2N3Z3JvdXBfc2V0X29mZmxpbmUoZ2Rldik7CiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogb3V0OgogCW1vZHVsZV9wdXQoZ2Rydi0+b3duZXIpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIChyZXQgPT0gMCkgPyBjb3VudCA6IHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTQ1MywxMyArNDcxLDE4IEBACiAJc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldjsKIAlzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyICpnZHJ2OwogCisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX29ubGluZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VuZ3JvdXApOworCisJaWYgKCFkZXYtPmRyaXZlcikKKwkJcmV0dXJuIDA7CisKIAlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX29ubGluZSk7Ci0KLQlpZiAoZ2RydiAmJiBnZHJ2LT5yZW1vdmUpCisJaWYgKGdkcnYtPnJlbW92ZSkKIAkJZ2Rydi0+cmVtb3ZlKGdkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2OCw5ICs0OTEsMTMgQEAKIAlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmdkcnY7CiAKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm47CisKIAlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOwotCWlmIChnZHJ2ICYmIGdkcnYtPnNodXRkb3duKQorCisJaWYgKGdkcnYtPnNodXRkb3duKQogCQlnZHJ2LT5zaHV0ZG93bihnZGV2KTsKIH0KIApAQCAtNDgzLDYgKzUxMCwxOSBAQAogCS5zaHV0ZG93biA9IGNjd2dyb3VwX3NodXRkb3duLAogfTsKIAorCitzdGF0aWMgaW50IGNjd2dyb3VwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUikKKwkJZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrKGRldiwgY2N3Z3JvdXBfdW5ncm91cF9jYWxsYmFjayk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCisKIC8qKgogICogY2N3Z3JvdXBfZHJpdmVyX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIGNjdyBncm91cCBkcml2ZXIKICAqIEBjZHJpdmVyOiBkcml2ZXIgdG8gYmUgcmVnaXN0ZXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKaW5kZXggMTI0NmY2MS4uM2U1ZjMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiaW9hc20uaCIKQEAgLTcwNiwxMiArNzA2LDEyIEBACiAJc3RydWN0IGNocF9pZCBjaHBpZDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NQQVRILCBjaHBfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1BBVEgsIGNocF9wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAljaHBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvX2NocCIpOwogCWlmICghY2hwX3dxKSB7Ci0JCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NQQVRIKTsKKwkJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NQQVRIKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCUlOSVRfV09SSygmY2ZnX3dvcmssIGNmZ19mdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggZWJhYjZlYS4uODgzZjE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NocGlkLmg+CiAjaW5jbHVkZSA8YXNtL2Noc2MuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNpb19kZWJ1Zy5oIgpAQCAtNTg5LDYgKzU4OSw3IEBACiAJY2FzZSAweDAxMDI6CiAJY2FzZSAweDAxMDM6CiAJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IGNoc2NfZXJyb3JfZnJvbV9yZXNwb25zZShzZWNtX2FyZWEtPnJlc3BvbnNlLmNvZGUpOwogCX0KQEAgLTgyMCw3ICs4MjEsNyBAQAogCQkJICAgICAgImNoc2MgbWFjaGluZSBjaGVja3MhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MsIGNoc2NfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTLCBjaHNjX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlrZnJlZShzZWlfcGFnZSk7CiAJcmV0dXJuIHJldDsKQEAgLTgyOCw3ICs4MjksNyBAQAogCiB2b2lkIF9faW5pdCBjaHNjX2ZyZWVfc2VpX2FyZWEodm9pZCkKIHsKLQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MpOworCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWtmcmVlKHNlaV9wYWdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IDBhMmYyZWQuLjkzZWNhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTg0LDggKzg0LDggQEAKIAkJa2ZyZWUocHJpdmF0ZSk7CiAJfSBlbHNlIHsKIAkJc2NoLT5wcml2YXRlID0gcHJpdmF0ZTsKLQkJaWYgKHNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcykgewotCQkJc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwkJaWYgKGRldl9nZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldikpIHsKKwkJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggNjU5ZjhhNy4uMmFlYmI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL2lzYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZmN4Lmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaHNjLmgiCkBAIC0zOCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiYmxhY2tsaXN0LmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2hwLmgiCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKIAogZGVidWdfaW5mb190ICpjaW9fZGVidWdfbXNnX2lkOwogZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7CkBAIC00NzEsNiArNDcyLDcgQEAKIGludCBjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJY2hhciBkYmZfdHh0WzE1XTsKKwlpbnQgcmV0cnk7CiAJaW50IHJldDsKIAogCUNJT19UUkFDRV9FVkVOVCAoMiwgImRpc3NjaCIpOwpAQCAtNDgxLDE2ICs0ODMsMTcgQEAKIAlpZiAoY2lvX3VwZGF0ZV9zY2hpYihzY2gpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgIT0gMCkKLQkJLyoKLQkJICogdGhlIGRpc2FibGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZXJlIGFyZQotCQkgKiAgcmVxdWVzdHMgcGVuZGluZyBmb3IgY29tcGxldGlvbiAhCi0JCSAqLwotCQlyZXR1cm4gLUVCVVNZOwotCiAJc2NoLT5jb25maWcuZW5hID0gMDsKLQlyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpOwogCisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzsgcmV0cnkrKykgeworCQlyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpOworCQlpZiAocmV0ID09IC1FQlVTWSkgeworCQkJc3RydWN0IGlyYiBpcmI7CisJCQlpZiAodHNjaChzY2gtPnNjaGlkLCAmaXJiKSAhPSAwKQorCQkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KIAlzcHJpbnRmIChkYmZfdHh0LCAicmV0OiVkIiwgcmV0KTsKIAlDSU9fVFJBQ0VfRVZFTlQgKDIsIGRiZl90eHQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTU3NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqICAgQ2hhbm5lbCByZXBvcnQgaGFuZGxpbmcgY29kZQorICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KKworc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgY3J3X3NlbWFwaG9yZTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY3J3X2hhbmRsZXJfbXV0ZXgpOworc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOworCisvKioKKyAqIGNyd19yZWdpc3Rlcl9oYW5kbGVyKCkgLSByZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgorICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQorICogQGhhbmRsZXI6IGhhbmRsZXIgdG8gYmUgcmVnaXN0ZXJlZAorICoKKyAqIFJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJaW50IHJjID0gMDsKKworCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCWlmIChjcndfaGFuZGxlcnNbcnNjXSkKKwkJcmMgPSAtRUJVU1k7CisJZWxzZQorCQljcndfaGFuZGxlcnNbcnNjXSA9IGhhbmRsZXI7CisJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoKSAtIHVucmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKKyAqIEByc2M6IHJlcG9ydGluZyBzb3VyY2UgY29kZSB0byBoYW5kbGUKKyAqLwordm9pZCBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MpCit7CisJaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCWNyd19oYW5kbGVyc1tyc2NdID0gTlVMTDsKKwltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKK30KKworLyoKKyAqIFJldHJpZXZlIENSV3MgYW5kIGNhbGwgZnVuY3Rpb24gdG8gaGFuZGxlIGV2ZW50LgorICovCitzdGF0aWMgaW50IGNyd19jb2xsZWN0X2luZm8odm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBjcncgY3J3WzJdOworCWludCBjY29kZTsKKwl1bnNpZ25lZCBpbnQgY2hhaW47CisJaW50IGlnbm9yZTsKKworcmVwZWF0OgorCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZSgmY3J3X3NlbWFwaG9yZSk7CisJY2hhaW4gPSAwOworCXdoaWxlICgxKSB7CisJCWNyd19oYW5kbGVyX3QgaGFuZGxlcjsKKworCQlpZiAodW5saWtlbHkoY2hhaW4gPiAxKSkgeworCQkJc3RydWN0IGNydyB0bXBfY3J3OworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBDb2RlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSAiCisJCQkgICAgICAgInRoYW4gdHdvIGNoYWluZWQgY3J3czsgcGxlYXNlIHJlcG9ydCB0byAiCisJCQkgICAgICAgImxpbnV4MzkwQGRlLmlibS5jb20hXG4iLCBfX2Z1bmNfXyk7CisJCQljY29kZSA9IHN0Y3J3KCZ0bXBfY3J3KTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IGNydyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKKwkJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB0bXBfY3J3LnNsY3QsIHRtcF9jcncub2ZsdywKKwkJCSAgICAgICB0bXBfY3J3LmNobiwgdG1wX2Nydy5yc2MsIHRtcF9jcncuYW5jLAorCQkJICAgICAgIHRtcF9jcncuZXJjLCB0bXBfY3J3LnJzaWQpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogVGhpcyB3YXMgY3J3IG51bWJlciAleCBpbiB0aGUgIgorCQkJICAgICAgICJjaGFpblxuIiwgX19mdW5jX18sIGNoYWluKTsKKwkJCWlmIChjY29kZSAhPSAwKQorCQkJCWJyZWFrOworCQkJY2hhaW4gPSB0bXBfY3J3LmNobiA/IGNoYWluICsgMSA6IDA7CisJCQljb250aW51ZTsKKwkJfQorCQljY29kZSA9IHN0Y3J3KCZjcndbY2hhaW5dKTsKKwkJaWYgKGNjb2RlICE9IDApCisJCQlicmVhazsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNyd19pbmZvIDogQ1JXIHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgorCQkgICAgICAgImNobj0lZCwgcnNjPSVYLCBhbmM9JWQsIGVyYz0lWCwgcnNpZD0lWFxuIiwKKwkJICAgICAgIGNyd1tjaGFpbl0uc2xjdCwgY3J3W2NoYWluXS5vZmx3LCBjcndbY2hhaW5dLmNobiwKKwkJICAgICAgIGNyd1tjaGFpbl0ucnNjLCBjcndbY2hhaW5dLmFuYywgY3J3W2NoYWluXS5lcmMsCisJCSAgICAgICBjcndbY2hhaW5dLnJzaWQpOworCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLworCQlpZiAoY3J3W2NoYWluXS5vZmx3KSB7CisJCQlpbnQgaTsKKworCQkJcHJfZGVidWcoIiVzOiBjcncgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iLCBfX2Z1bmNfXyk7CisJCQltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTlJfUlNDUzsgaSsrKSB7CisJCQkJaWYgKGNyd19oYW5kbGVyc1tpXSkKKwkJCQkJY3J3X2hhbmRsZXJzW2ldKE5VTEwsIE5VTEwsIDEpOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCQljaGFpbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKKwkJCWNoYWluKys7CisJCQljb250aW51ZTsKKwkJfQorCQltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCWhhbmRsZXIgPSBjcndfaGFuZGxlcnNbY3J3W2NoYWluXS5yc2NdOworCQlpZiAoaGFuZGxlcikKKwkJCWhhbmRsZXIoJmNyd1swXSwgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwgMCk7CisJCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCisJCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOworCX0KKwlnb3RvIHJlcGVhdDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpCit7CisJdXAoJmNyd19zZW1hcGhvcmUpOworfQorCisvKgorICogU2VwYXJhdGUgaW5pdGNhbGwgbmVlZGVkIGZvciBzZW1hcGhvcmUgaW5pdGlhbGl6YXRpb24gc2luY2UKKyAqIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSBjcndfbWFjaGluZV9jaGVja19pbml0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBjcndfaW5pdF9zZW1hcGhvcmUodm9pZCkKK3sKKwlpbml0X01VVEVYX0xPQ0tFRCgmY3J3X3NlbWFwaG9yZSk7CisJcmV0dXJuIDA7Cit9CitwdXJlX2luaXRjYWxsKGNyd19pbml0X3NlbWFwaG9yZSk7CisKKy8qCisgKiBNYWNoaW5lIGNoZWNrcyBmb3IgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIG11c3QgYmUgZW5hYmxlZAorICogYWZ0ZXIgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIGlzIGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyd19tYWNoaW5lX2NoZWNrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwl0YXNrID0ga3RocmVhZF9ydW4oY3J3X2NvbGxlY3RfaW5mbywgTlVMTCwgImttY2hlY2siKTsKKwlpZiAoSVNfRVJSKHRhc2spKQorCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKKwljdGxfc2V0X2JpdCgxNCwgMjgpOwkvKiBlbmFibGUgY2hhbm5lbCByZXBvcnQgTUNIICovCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY3J3X21hY2hpbmVfY2hlY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCA4MDE5Mjg4Li4wMDg1ZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lzYy5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCkBAIC04Myw2ICs4MywyNSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjYWxsX2ZuX2FsbF9zY2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNiX2RhdGEgKmNiID0gZGF0YTsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByYyA9IDA7CisKKwlzY2ggPSBnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzY2hpZCk7CisJaWYgKHNjaCkgeworCQlpZiAoY2ItPmZuX2tub3duX3NjaCkKKwkJCXJjID0gY2ItPmZuX2tub3duX3NjaChzY2gsIGNiLT5kYXRhKTsKKwkJcHV0X2RldmljZSgmc2NoLT5kZXYpOworCX0gZWxzZSB7CisJCWlmIChjYi0+Zm5fdW5rbm93bl9zY2gpCisJCQlyYyA9IGNiLT5mbl91bmtub3duX3NjaChzY2hpZCwgY2ItPmRhdGEpOworCX0KKworCXJldHVybiByYzsKK30KKwogaW50IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKGludCAoKmZuX2tub3duKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCB2b2lkICopLAogCQkJICAgICAgIGludCAoKmZuX3Vua25vd24pKHN0cnVjdCBzdWJjaGFubmVsX2lkLAogCQkJICAgICAgIHZvaWQgKiksIHZvaWQgKmRhdGEpCkBAIC05MCwxMyArMTA5LDE3IEBACiAJc3RydWN0IGNiX2RhdGEgY2I7CiAJaW50IHJjOwogCi0JY2Iuc2V0ID0gaWRzZXRfc2NoX25ldygpOwotCWlmICghY2Iuc2V0KQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZHNldF9maWxsKGNiLnNldCk7CiAJY2IuZGF0YSA9IGRhdGE7CiAJY2IuZm5fa25vd25fc2NoID0gZm5fa25vd247CiAJY2IuZm5fdW5rbm93bl9zY2ggPSBmbl91bmtub3duOworCisJY2Iuc2V0ID0gaWRzZXRfc2NoX25ldygpOworCWlmICghY2Iuc2V0KQorCQkvKiBmYWxsIGJhY2sgdG8gYnJ1dGUgZm9yY2Ugc2Nhbm5pbmcgaW4gY2FzZSBvZiBvb20gKi8KKwkJcmV0dXJuIGZvcl9lYWNoX3N1YmNoYW5uZWwoY2FsbF9mbl9hbGxfc2NoLCAmY2IpOworCisJaWRzZXRfZmlsbChjYi5zZXQpOworCiAJLyogUHJvY2VzcyByZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogCXJjID0gYnVzX2Zvcl9lYWNoX2RldigmY3NzX2J1c190eXBlLCBOVUxMLCAmY2IsIGNhbGxfZm5fa25vd25fc2NoKTsKIAlpZiAocmMpCkBAIC0yNzIsNyArMjk1LDcgQEAKIAkgKiB0aGUgc3ViY2hhbm5lbCBkcml2ZXIgY2FuIGRlY2lkZSBpdHNlbGYgd2hlbiBpdCB3YW50cyB0byBpbmZvcm0KIAkgKiB1c2Vyc3BhY2Ugb2YgaXRzIGV4aXN0ZW5jZS4KIAkgKi8KLQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMSk7CiAJY3NzX3VwZGF0ZV9zc2RfaW5mbyhzY2gpOwogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGNzc19zY2hfZGV2aWNlX3JlZ2lzdGVyKHNjaCk7CkBAIC0yODcsNyArMzEwLDcgQEAKIAkJICogYSBmaXR0aW5nIGRyaXZlciBtb2R1bGUgbWF5IGJlIGxvYWRlZCBiYXNlZCBvbiB0aGUKIAkJICogbW9kYWxpYXMuCiAJCSAqLwotCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNTEwLDYgKzUzMywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJlcHJvYmVfYWZ0ZXJfaWRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KKwl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKKwkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKG5lZWRfcmVwcm9iZSkKKwkJY3NzX3NjaGVkdWxlX3JlcHJvYmUoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhyZXByb2JlX2lkbGVfd29yaywgcmVwcm9iZV9hZnRlcl9pZGxlKTsKKwogLyogV29yayBmdW5jdGlvbiB1c2VkIHRvIHJlcHJvYmUgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KIHN0YXRpYyB2b2lkIHJlcHJvYmVfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQogewpAQCAtNTE3LDEwICs1NTEsMTIgQEAKIAogCUNJT19NU0dfRVZFTlQoNCwgInJlcHJvYmUgc3RhcnRcbiIpOwogCi0JbmVlZF9yZXByb2JlID0gMDsKIAkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpICE9IDApIHsKKwkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZyZXByb2JlX2lkbGVfd29yayk7CisJCXJldHVybjsKKwl9CisJbmVlZF9yZXByb2JlID0gMDsKIAlyZXQgPSBmb3JfZWFjaF9zdWJjaGFubmVsX3N0YWdlZChOVUxMLCByZXByb2JlX3N1YmNoYW5uZWwsIE5VTEwpOwogCiAJQ0lPX01TR19FVkVOVCg0LCAicmVwcm9iZSBkb25lIChyYz0lZCwgbmVlZF9yZXByb2JlPSVkKVxuIiwgcmV0LApAQCAtNjE5LDcgKzY1NSw3IEBACiAJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmV4dF9jc3NpZC5jc3NpZCA9IGNzcy0+Y3NzaWQ7CiAJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfU01QCi0JCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gc3RhcCgpOwogI2Vsc2UKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSAwOwogI2VuZGlmCkBAIC03NjUsNyArODAxLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19TQ0gsIGNzc19wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19TQ0gsIGNzc19wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTg0NSw3ICs4ODEsNyBAQAogb3V0X2J1czoKIAlidXNfdW5yZWdpc3RlcigmY3NzX2J1c190eXBlKTsKIG91dDoKLQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MpOworCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWNoc2NfZnJlZV9zZWlfYXJlYSgpOwogCWtmcmVlKHNsb3dfc3ViY2hhbm5lbF9zZXQpOwogCXByX2FsZXJ0KCJUaGUgQ1NTIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggMjNkNTc1Mi4uYzRkMmY2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtNDU3LDEyICs0NTcsMTMgQEAKIAlyZXR1cm4gKHJldCA9PSAwKSA/IC1FTk9ERVYgOiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyBpbnQgb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKQogCQljY3dfZGV2aWNlX3JlbW92ZV9kaXNjb25uZWN0ZWQoY2Rldik7Ci0JZWxzZSBpZiAoY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29mZmxpbmUpCi0JCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2Rldik7CisJZWxzZSBpZiAoY2Rldi0+b25saW5lICYmIGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnNldF9vZmZsaW5lKQorCQlyZXR1cm4gY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvbmxpbmVfc3RvcmVfcmVjb2dfYW5kX29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKQEAgLTUzMCwxMyArNTMxLDEwIEBACiAJCWdvdG8gb3V0OwogCXN3aXRjaCAoaSkgewogCWNhc2UgMDoKLQkJb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKGNkZXYpOwotCQlyZXQgPSBjb3VudDsKKwkJcmV0ID0gb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKGNkZXYpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCXJldCA9IG9ubGluZV9zdG9yZV9oYW5kbGVfb25saW5lKGNkZXYsIGZvcmNlKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXQgPSBjb3VudDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTU0NSw3ICs1NDMsNyBAQAogCWlmIChjZGV2LT5kcnYpCiAJCW1vZHVsZV9wdXQoY2Rldi0+ZHJ2LT5vd25lcik7CiAJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwotCXJldHVybiByZXQ7CisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGNvdW50OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNjgxLDM1ICs2NzksMjIgQEAKIAlyZXR1cm4gZGV2ID8gdG9fY2N3ZGV2KGRldikgOiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZAotY2N3X2RldmljZV9hZGRfY2hhbmdlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKLQotCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKLQljZGV2ID0gcHJpdi0+Y2RldjsKLQlpZiAoZGV2aWNlX2FkZCgmY2Rldi0+ZGV2KSkgewotCQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwotCQlyZXR1cm47Ci0JfQotCXNldF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpOwotfQotCi12b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJldDsKIAogCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKIAljZGV2ID0gcHJpdi0+Y2RldjsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCi0JY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkgICAgIGNjd19kZXZpY2VfYWRkX2NoYW5nZWQpOwotCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwlpZiAodGVzdF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpKSB7CisJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmY2Rldi0+ZGV2KTsKKwkJcmV0ID0gZGV2aWNlX2F0dGFjaCgmY2Rldi0+ZGV2KTsKKwkJV0FSTl9PTihyZXQgPT0gLUVOT0RFVik7CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtNzk5LDcgKzc4NCw3IEBACiAJCXJldHVybjsKIAlvdGhlcl9zY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCS8qIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50ICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGlzY29ubmVjdGVkIGRldmljZSAwLiV4LiUwNHggZmFpbGVkICIKIAkJCSAgICAgICIocmV0PSVkKSFcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLApAQCAtODMwLDcgKzgxNSw3IEBACiAJICogVHJ5IHRvIG1vdmUgdGhlIGNjdyBkZXZpY2UgdG8gaXRzIG5ldyBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCBmcm9tIG9ycGhhbmFnZSAiCiAJCQkgICAgICAiZmFpbGVkIChyZXQ9JWQpIVxuIiwKQEAgLTg5Nyw3ICs4ODIsOCBAQAogCSAqIGNjdyBkZXZpY2UgY2FuIHRha2UgaXRzIHBsYWNlIG9uIHRoZSBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldiwKKwkJRFBNX09SREVSX05PTkUpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggdG8gb3JwaGFuYWdlIGZhaWxlZCAiCiAJCQkgICAgICAiKHJldD0lZCkhXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTk4MSw3ICs5NjcsNyBAQAogCSAqIE5vdyB3ZSBrbm93IHRoaXMgc3ViY2hhbm5lbCB3aWxsIHN0YXksIHdlIGNhbiB0aHJvdwogCSAqIG91ciBkZWxheWVkIHVldmVudC4KIAkgKi8KLQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAkvKiBtYWtlIGl0IGtub3duIHRvIHRoZSBzeXN0ZW0gKi8KIAlyZXQgPSBjY3dfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwpAQCAtMTAzNCw4ICsxMDIwLDYgQEAKIHZvaWQKIGlvX3N1YmNoYW5uZWxfcmVjb2dfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwotCiAJaWYgKGNzc19pbml0X2RvbmUgPT0gMCkgewogCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKIAkJcmV0dXJuOwpAQCAtMTA0Niw3ICsxMDMwLDYgQEAKIAkJLyogUmVtb3ZlIGRldmljZSBmb3VuZCBub3Qgb3BlcmF0aW9uYWwuICovCiAJCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKIAkJCWJyZWFrOwotCQlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKIAkJCSAgICAgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKIAkJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwpAQCAtMTEyOSw3ICsxMTEyLDcgQEAKIAkgKiBUcnkgdG8gbW92ZSB0aGUgY2N3IGRldmljZSB0byBpdHMgbmV3IHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyYyA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmMgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJbXV0ZXhfdW5sb2NrKCZzY2gtPnJlZ19tdXRleCk7CiAJaWYgKHJjKSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IHRvIHN1YmNoYW5uZWwgIgpAQCAtMTI0Myw3ICsxMjI2LDcgQEAKIAkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuIFRoaXMgaGFwcGVucyBmb3IgYWxsIGVhcmx5CiAJCSAqIGRldmljZXMsIGUuZy4gdGhlIGNvbnNvbGUuCiAJCSAqLwotCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCQljZGV2LT5kZXYuZ3JvdXBzID0gY2N3ZGV2X2F0dHJfZ3JvdXBzOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IDBmMmU2M2UuLjg1ZTAxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtODAsNyArODAsNyBAQAogCiBpbnQgY2N3X2RldmljZV9jYW5jZWxfaGFsdF9jbGVhcihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIAotdm9pZCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgY2N3X2RldmljZV9kb191bmJpbmRfYmluZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiB2b2lkIGNjd19kZXZpY2VfbW92ZV90b19vcnBoYW5hZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICopOwogaW50IGNjd19kZXZpY2VfaXNfb3JwaGFuKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDhkZjVlYWEuLjg3YjRiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkgICAgY2Rldi0+aWQuZGV2X3R5cGUgIT0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfdHlwZSB8fAogCSAgICBjZGV2LT5pZC5kZXZfbW9kZWwgIT0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfbW9kZWwpIHsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkgICAgIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcpOworCQkJICAgICBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zNjYsNyArMzY2LDcgQEAKIAl9CiAJLyogRHJpdmVyIGRvZXNuJ3Qgd2FudCBkZXZpY2UgYmFjay4gKi8KIAljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKTsKKwlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywgY2N3X2RldmljZV9kb191bmJpbmRfYmluZCk7CiAJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogfQogCkBAIC03MjgsNyArNzI4LDcgQEAKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwogCi0JY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfTk9UX09QRVI7CisJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOwogfQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCS8qCiAJICogQW4gaW50ZXJydXB0IGluIHN0YXRlIG9mZmxpbmUgbWVhbnMgYSBwcmV2aW91cyBkaXNhYmxlIHdhcyBub3QKLQkgKiBzdWNjZXNzZnVsLiBUcnkgYWdhaW4uCisJICogc3VjY2Vzc2Z1bCAtIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2UgdHJ5IHRvIGRpc2FibGUgYWdhaW4uCiAJICovCiAJY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzY2gpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCBlYWJjYzQyLi4xNTE3NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtNjgwLDcgKzY4MCw3IEBACiAJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUpCiAJCXJldHVybiAtRUlPOwogCWlmICghc2Nzd19pc190bSgmc2NoLT5zY2hpYi5zY3N3KSB8fAotCSAgICAhKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSB8IFNDU1dfQUNUTF9TVEFSVF9QRU5EKSkKKwkgICAgIShzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBjaW9fdG1faW50cmcoc2NoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKaW5kZXggNDJmMmIwOS4uMTNiY2I4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKQEAgLTE4Niw2ICsxODYsOSBAQAogCS8qIGlucHV0IGJ1ZmZlciBhY2tub3dsZWRnZW1lbnQgZmxhZyAqLwogCWludCBwb2xsaW5nOwogCisJLyogZmlyc3QgQUNLJ2VkIGJ1ZmZlciAqLworCWludCBhY2tfc3RhcnQ7CisKIAkvKiBob3cgbXVjaCBzYmFscyBhcmUgYWNrbm93bGVkZ2VkIHdpdGggcWVic20gKi8KIAlpbnQgYWNrX2NvdW50OwogCkBAIC0yMzQsNyArMjM3LDcgQEAKIAlpbnQgZmlyc3RfdG9fY2hlY2s7CiAKIAkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCi0JaW50IGxhc3RfbW92ZV9mdGM7CisJaW50IGxhc3RfbW92ZTsKIAogCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLwogCWludCBmaXJzdF90b19raWNrOwpAQCAtMjQ0LDcgKzI0Nyw2IEBACiAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCiAJLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KIAl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKQEAgLTM1NCw3ICszNTYsNyBAQAogCQkgIGludCBhdXRvX2Fjayk7CiB2b2lkIHFkaW9fY2hlY2tfb3V0Ym91bmRfYWZ0ZXJfdGhpbmludChzdHJ1Y3QgcWRpb19xICpxKTsKIGludCBxZGlvX2luYm91bmRfcV9tb3ZlZChzdHJ1Y3QgcWRpb19xICpxKTsKLXZvaWQgcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKTsKK3ZvaWQgcWRpb19raWNrX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSk7CiB2b2lkIHFkaW9fc3RvcF9wb2xsaW5nKHN0cnVjdCBxZGlvX3EgKnEpOwogaW50IHFkaW9fc2lnYV9zeW5jX3Eoc3RydWN0IHFkaW9fcSAqcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggZGE3YWZiMC4uZTM0MzRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTYzLDggKzYzLDkgQEAKIAlzZXFfcHJpbnRmKG0sICJkZXZpY2Ugc3RhdGUgaW5kaWNhdG9yOiAlZFxuIiwgKih1MzIgKilxLT5pcnFfcHRyLT5kc2NpKTsKIAlzZXFfcHJpbnRmKG0sICJucl91c2VkOiAlZFxuIiwgYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSk7CiAJc2VxX3ByaW50ZihtLCAiZnRjOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2spOwotCXNlcV9wcmludGYobSwgImxhc3RfbW92ZV9mdGM6ICVkXG4iLCBxLT5sYXN0X21vdmVfZnRjKTsKKwlzZXFfcHJpbnRmKG0sICJsYXN0X21vdmU6ICVkXG4iLCBxLT5sYXN0X21vdmUpOwogCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkXG4iLCBxLT51LmluLnBvbGxpbmcpOworCXNlcV9wcmludGYobSwgImFjayBzdGFydDogJWRcbiIsIHEtPnUuaW4uYWNrX3N0YXJ0KTsKIAlzZXFfcHJpbnRmKG0sICJhY2sgY291bnQ6ICVkXG4iLCBxLT51LmluLmFja19jb3VudCk7CiAJc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDAgICAgICB8OCAgICAgIHwxNiAgICAgfDI0ICAgICB8MzIgICAgIHw0MCAgICAgfDQ4ICAgICB8NTYgIDYzfFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCAxMGNiMGY4Li45ZThhMjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTM4MCwxMSArMzgwLDExIEBACiAKIAkvKiBzaG93IHRoZSBjYXJkIHRoYXQgd2UgYXJlIG5vdCBwb2xsaW5nIGFueW1vcmUgKi8KIAlpZiAoaXNfcWVic20ocSkpIHsKLQkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkJICAgICAgIHEtPnUuaW4uYWNrX2NvdW50KTsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwogCX0gZWxzZQotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CisJCXNldF9idWZfc3RhdGUocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCkBAIC00MTksMTUgKzQxOSwxNSBAQAogCQlpZiAoIXEtPnUuaW4ucG9sbGluZykgewogCQkJcS0+dS5pbi5wb2xsaW5nID0gMTsKIAkJCXEtPnUuaW4uYWNrX2NvdW50ID0gY291bnQ7Ci0JCQlxLT5sYXN0X21vdmVfZnRjID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJCQlxLT51LmluLmFja19zdGFydCA9IHEtPmZpcnN0X3RvX2NoZWNrOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJLyogZGVsZXRlIHRoZSBwcmV2aW91cyBBQ0sncyAqLwotCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJCXNldF9idWZfc3RhdGVzKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCQkgICAgICAgcS0+dS5pbi5hY2tfY291bnQpOwogCQlxLT51LmluLmFja19jb3VudCA9IGNvdW50OwotCQlxLT5sYXN0X21vdmVfZnRjID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gcS0+Zmlyc3RfdG9fY2hlY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQzOSwxNCArNDM5LDEzIEBACiAJaWYgKHEtPnUuaW4ucG9sbGluZykgewogCQkvKiByZXNldCB0aGUgcHJldmlvdXMgQUNLIGJ1dCBmaXJzdCBzZXQgdGhlIG5ldyBvbmUgKi8KIAkJc2V0X2J1Zl9zdGF0ZShxLCBuZXcsIFNMU0JfUF9JTlBVVF9BQ0spOwotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7Ci0JfQotCWVsc2UgeworCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOworCX0gZWxzZSB7CiAJCXEtPnUuaW4ucG9sbGluZyA9IDE7Ci0JCXNldF9idWZfc3RhdGUocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIFNMU0JfUF9JTlBVVF9BQ0spOworCQlzZXRfYnVmX3N0YXRlKHEsIG5ldywgU0xTQl9QX0lOUFVUX0FDSyk7CiAJfQogCi0JcS0+bGFzdF9tb3ZlX2Z0YyA9IG5ldzsKKwlxLT51LmluLmFja19zdGFydCA9IG5ldzsKIAljb3VudC0tOwogCWlmICghY291bnQpCiAJCXJldHVybjsKQEAgLTQ1NSw3ICs0NTQsNyBAQAogCSAqIE5lZWQgdG8gY2hhbmdlIGFsbCBQUklNRUQgYnVmZmVycyB0byBOT1RfSU5JVCwgb3RoZXJ3aXNlCiAJICogd2UncmUgbG9vc2luZyBpbml0aWF0aXZlIGluIHRoZSB0aGluaW50IGNvZGUuCiAJICovCi0Jc2V0X2J1Zl9zdGF0ZXMocSwgbmV4dF9idWYocS0+Zmlyc3RfdG9fY2hlY2spLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJICAgICAgIGNvdW50KTsKIH0KIApAQCAtNTIzLDcgKzUyMiw4IEBACiAKIAlidWZuciA9IGdldF9pbmJvdW5kX2J1ZmZlcl9mcm9udGllcihxKTsKIAotCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlX2Z0YykgfHwgcS0+cWRpb19lcnJvcikgeworCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwogCQlpZiAoIW5lZWRfc2lnYV9zeW5jKHEpICYmICFwY2lfb3V0X3N1cHBvcnRlZChxKSkKIAkJCXEtPnUuaW4udGltZXN0YW1wID0gZ2V0X3VzZWNzKCk7CiAKQEAgLTU3MCwyOSArNTcwLDMwIEBACiAJfQogfQogCi12b2lkIHFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKK3ZvaWQgcWRpb19raWNrX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlpbnQgY291bnQsIHN0YXJ0LCBlbmQ7Ci0KLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuaW5ib3VuZF9oYW5kbGVyKTsKLQotCXN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKLQllbmQgPSBxLT5maXJzdF90b19jaGVjazsKLQlpZiAoZW5kID49IHN0YXJ0KQotCQljb3VudCA9IGVuZCAtIHN0YXJ0OwotCWVsc2UKLQkJY291bnQgPSBlbmQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gc3RhcnQ7Ci0KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2loIHM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwlpbnQgc3RhcnQgPSBxLT5maXJzdF90b19raWNrOworCWludCBlbmQgPSBxLT5maXJzdF90b19jaGVjazsKKwlpbnQgY291bnQ7CiAKIAlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfQUNUSVZFKSkKIAkJcmV0dXJuOwogCi0JcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwKLQkJICAgc3RhcnQsIGNvdW50LCBxLT5pcnFfcHRyLT5pbnRfcGFybSk7CisJY291bnQgPSBzdWJfYnVmKGVuZCwgc3RhcnQpOworCisJaWYgKHEtPmlzX2lucHV0X3EpIHsKKwkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IG5yOiUxZCIsIHEtPm5yKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwl9CisKKwlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLCBzdGFydCwgY291bnQsCisJCSAgIHEtPmlycV9wdHItPmludF9wYXJtKTsKIAogCS8qIGZvciB0aGUgbmV4dCB0aW1lICovCi0JcS0+Zmlyc3RfdG9fa2ljayA9IHEtPmZpcnN0X3RvX2NoZWNrOworCXEtPmZpcnN0X3RvX2tpY2sgPSBlbmQ7CiAJcS0+cWRpb19lcnJvciA9IDA7CiB9CiAKQEAgLTYwMyw3ICs2MDQsNyBAQAogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAotCXFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIocSk7CisJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKIAlpZiAoIXFkaW9faW5ib3VuZF9xX2RvbmUocSkpCiAJCS8qIG1lYW5zIHBvbGwgdGltZSBpcyBub3QgeWV0IG92ZXIgKi8KQEAgLTY5OCwyMSArNjk5LDIxIEBACiAKIAlidWZuciA9IGdldF9vdXRib3VuZF9idWZmZXJfZnJvbnRpZXIocSk7CiAKLQlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZV9mdGMpIHx8IHEtPnFkaW9fZXJyb3IpIHsKLQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IGJ1Zm5yOworCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAib3V0IG1vdmVkOiUxZCIsIHEtPm5yKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBxZGlvX2tpY2tfb3V0Ym91bmRfcShzdHJ1Y3QgcWRpb19xICpxKQorc3RhdGljIGludCBxZGlvX2tpY2tfb3V0Ym91bmRfcShzdHJ1Y3QgcWRpb19xICpxKQogewogCXVuc2lnbmVkIGludCBidXN5X2JpdDsKIAlpbnQgY2M7CiAKIAlpZiAoIW5lZWRfc2lnYV9vdXQocSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13OiUxZCIsIHEtPm5yKTsKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuc2lnYV9vdXQpOwpAQCAtNzI0LDc1ICs3MjUsMzcgQEAKIAljYXNlIDI6CiAJCWlmIChidXN5X2JpdCkgewogCQkJREJGX0VSUk9SKCIlNHggY2MyIFJFUDolMWQiLCBTQ0hfTk8ocSksIHEtPm5yKTsKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYyB8IFFESU9fRVJST1JfU0lHQV9CVVNZOwotCQl9IGVsc2UgewotCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdyBjYzI6JTFkIiwKLQkJCQkgICAgICBxLT5ucik7Ci0JCQlxLT5xZGlvX2Vycm9yID0gY2M7Ci0JCX0KKwkJCWNjIHw9IFFESU9fRVJST1JfU0lHQV9CVVNZOworCQl9IGVsc2UKKwkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXcgY2MyOiUxZCIsIHEtPm5yKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCWNhc2UgMzoKIAkJREJGX0VSUk9SKCIlNHggU0lHQS1XOiUxZCIsIFNDSF9OTyhxKSwgY2MpOwotCQlxLT5xZGlvX2Vycm9yID0gY2M7CiAJCWJyZWFrOwogCX0KLX0KLQotc3RhdGljIHZvaWQgcWRpb19raWNrX291dGJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKLXsKLQlpbnQgc3RhcnQsIGVuZCwgY291bnQ7Ci0KLQlzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7Ci0JZW5kID0gcS0+bGFzdF9tb3ZlX2Z0YzsKLQlpZiAoZW5kID49IHN0YXJ0KQotCQljb3VudCA9IGVuZCAtIHN0YXJ0OwotCWVsc2UKLQkJY291bnQgPSBlbmQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gc3RhcnQ7Ci0KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2lja291dGg6ICUxZCIsIHEtPm5yKTsKLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOwotCi0JaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkpCi0JCXJldHVybjsKLQotCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKLQkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwotCi0JLyogZm9yIHRoZSBuZXh0IHRpbWU6ICovCi0JcS0+Zmlyc3RfdG9fa2ljayA9IHEtPmxhc3RfbW92ZV9mdGM7Ci0JcS0+cWRpb19lcnJvciA9IDA7CisJcmV0dXJuIGNjOwogfQogCiBzdGF0aWMgdm9pZCBfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhzdHJ1Y3QgcWRpb19xICpxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGFza2xldF9vdXRib3VuZCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKLQogCUJVR19PTihhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpIDwgMCk7CiAKIAlpZiAocWRpb19vdXRib3VuZF9xX21vdmVkKHEpKQotCQlxZGlvX2tpY2tfb3V0Ym91bmRfaGFuZGxlcihxKTsKKwkJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX1pGQ1BfUUZNVCkgeworCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fWkZDUF9RRk1UKQogCQlpZiAoIXBjaV9vdXRfc3VwcG9ydGVkKHEpICYmICFxZGlvX291dGJvdW5kX3FfZG9uZShxKSkKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwotCQlyZXR1cm47Ci0JfQorCQkJZ290byBzY2hlZDsKIAogCS8qIGJhaWwgb3V0IGZvciBIaXBlclNvY2tldHMgdW5pY2FzdCBxdWV1ZXMgKi8KIAlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQgJiYgIW11bHRpY2FzdF9vdXRib3VuZChxKSkKIAkJcmV0dXJuOwogCiAJaWYgKChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCkgJiYKLQkgICAgKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpID4gUURJT19JUURJT19QT0xMX0xWTCkgewotCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKLQkJcmV0dXJuOwotCX0KKwkgICAgKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpID4gUURJT19JUURJT19QT0xMX0xWTCkKKwkJZ290byBzY2hlZDsKIAogCWlmIChxLT51Lm91dC5wY2lfb3V0X2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTgxMCw2ICs3NzMsMTIgQEAKIAkJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z190bF9vdXRfdGltZXIpOwogCQl9CiAJfQorCXJldHVybjsKKworc2NoZWQ6CisJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CisJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiB9CiAKIC8qIG91dGJvdW5kIHRhc2tsZXQgKi8KQEAgLTgyMiw2ICs3OTEsOSBAQAogdm9pZCBxZGlvX291dGJvdW5kX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcWRpb19xICpxID0gKHN0cnVjdCBxZGlvX3EgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiB9CiAKQEAgLTg2Myw2ICs4MzUsOSBAQAogCWludCBpOwogCXN0cnVjdCBxZGlvX3EgKnE7CiAKKwlpZiAodW5saWtlbHkoaXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKKwogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5wY2lfaW50KTsKIAogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCkBAIC0xMDY1LDggKzEwNDAsOSBAQAogICogQGNkZXY6IGFzc29jaWF0ZWQgY2N3IGRldmljZQogICogQGhvdzogdXNlIGhhbHQgb3IgY2xlYXIgdG8gc2h1dGRvd24KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHFkaW9fc2h1dGRvd24oKSBmb3IgQGNkZXYgd2l0aCBtZXRob2QgQGhvdwotICogYW5kIG9uIHN1Y2Nlc3MgcWRpb19mcmVlKCkgZm9yIEBjZGV2LgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBxZGlvX3NodXRkb3duKCkgZm9yIEBjZGV2IHdpdGggbWV0aG9kIEBob3cuCisgKiBhbmQgcWRpb19mcmVlKCkuIFRoZSBxZGlvX2ZyZWUoKSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZCBzaW5jZQorICogIWlycV9wdHIgaXMgYWxyZWFkeSBjaGVja2VkLgogICovCiBpbnQgcWRpb19jbGVhbnVwKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgaG93KQogewpAQCAtMTA3Nyw4ICsxMDUzLDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyYyA9IHFkaW9fc2h1dGRvd24oY2RldiwgaG93KTsKLQlpZiAocmMgPT0gMCkKLQkJcmMgPSBxZGlvX2ZyZWUoY2Rldik7CisKKwlxZGlvX2ZyZWUoY2Rldik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWRpb19jbGVhbnVwKTsKQEAgLTEwOTAsMTEgKzEwNjYsMTEgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCi0JCXRhc2tsZXRfZGlzYWJsZSgmcS0+dGFza2xldCk7CisJCXRhc2tsZXRfa2lsbCgmcS0+dGFza2xldCk7CiAKIAlmb3JfZWFjaF9vdXRwdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkgewotCQl0YXNrbGV0X2Rpc2FibGUoJnEtPnRhc2tsZXQpOwogCQlkZWxfdGltZXIoJnEtPnUub3V0LnRpbWVyKTsKKwkJdGFza2xldF9raWxsKCZxLT50YXNrbGV0KTsKIAl9CiB9CiAKQEAgLTExMTIsNiArMTA4OCw3IEBACiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCUJVR19PTihpcnFzX2Rpc2FibGVkKCkpOwogCURCRl9FVkVOVCgicXNodXRkb3duOiU0eCIsIGNkZXYtPnByaXZhdGUtPnNjaGlkLnNjaF9ubyk7CiAKIAltdXRleF9sb2NrKCZpcnFfcHRyLT5zZXR1cF9tdXRleCk7CkBAIC0xMTI0LDYgKzExMDEsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgaXMgZ29pbmcgZG93bi4gU2NoZWR1bGluZyB0aGUgcXVldWUKKwkgKiB0YXNrbGV0cyBpcyBmb3JiaWRkZW4gZnJvbSBoZXJlIG9uLgorCSAqLworCXFkaW9fc2V0X3N0YXRlKGlycV9wdHIsIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpOworCiAJdGlxZGlvX3JlbW92ZV9pbnB1dF9xdWV1ZXMoaXJxX3B0cik7CiAJcWRpb19zaHV0ZG93bl9xdWV1ZXMoY2Rldik7CiAJcWRpb19zaHV0ZG93bl9kZWJ1Z19lbnRyaWVzKGlycV9wdHIsIGNkZXYpOwpAQCAtMTQwMyw5ICsxMzg2LDggQEAKIAlzd2l0Y2ggKGlycV9wdHItPnN0YXRlKSB7CiAJY2FzZSBRRElPX0lSUV9TVEFURV9TVE9QUEVEOgogCWNhc2UgUURJT19JUlFfU1RBVEVfRVJSOgotCQltdXRleF91bmxvY2soJmlycV9wdHItPnNldHVwX211dGV4KTsKLQkJcWRpb19zaHV0ZG93bihjZGV2LCBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXFkaW9fc2V0X3N0YXRlKGlycV9wdHIsIFFESU9fSVJRX1NUQVRFX0FDVElWRSk7CiAJCXJjID0gMDsKQEAgLTE0NDIsMTAgKzE0MjQsMTAgQEAKICAqIEBidWZucjogZmlyc3QgYnVmZmVyIHRvIHByb2Nlc3MKICAqIEBjb3VudDogaG93IG1hbnkgYnVmZmVycyBhcmUgZW1wdGllZAogICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfaW5ib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAotCQkJICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGhhbmRsZV9pbmJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCisJCQkgIGludCBidWZuciwgaW50IGNvdW50KQogewotCWludCB1c2VkLCBjYywgZGlmZjsKKwlpbnQgdXNlZCwgZGlmZjsKIAogCWlmICghcS0+dS5pbi5wb2xsaW5nKQogCQlnb3RvIHNldDsKQEAgLTE0NTYsMTkgKzE0MzgsMTggQEAKIAkJcS0+dS5pbi5wb2xsaW5nID0gMDsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwogCQlnb3RvIHNldDsKLQl9IGVsc2UgaWYgKGJ1Zl9pbl9iZXR3ZWVuKHEtPmxhc3RfbW92ZV9mdGMsIGJ1Zm5yLCBjb3VudCkpIHsKKwl9IGVsc2UgaWYgKGJ1Zl9pbl9iZXR3ZWVuKHEtPnUuaW4uYWNrX3N0YXJ0LCBidWZuciwgY291bnQpKSB7CiAJCWlmIChpc19xZWJzbShxKSkgewotCQkJLyogcGFydGlhbCBvdmVyd3JpdGUsIGp1c3QgdXBkYXRlIGxhc3RfbW92ZV9mdGMgKi8KKwkJCS8qIHBhcnRpYWwgb3ZlcndyaXRlLCBqdXN0IHVwZGF0ZSBhY2tfc3RhcnQgKi8KIAkJCWRpZmYgPSBhZGRfYnVmKGJ1Zm5yLCBjb3VudCk7Ci0JCQlkaWZmID0gc3ViX2J1ZihkaWZmLCBxLT5sYXN0X21vdmVfZnRjKTsKKwkJCWRpZmYgPSBzdWJfYnVmKGRpZmYsIHEtPnUuaW4uYWNrX3N0YXJ0KTsKIAkJCXEtPnUuaW4uYWNrX2NvdW50IC09IGRpZmY7CiAJCQlpZiAocS0+dS5pbi5hY2tfY291bnQgPD0gMCkgewogCQkJCXEtPnUuaW4ucG9sbGluZyA9IDA7CiAJCQkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwotCQkJCS8qIFRPRE86IG11c3Qgd2Ugc2V0IGxhc3RfbW92ZV9mdGMgdG8gc29tZXRoaW5nIG1lYW5pbmdmdWw/ICovCiAJCQkJZ290byBzZXQ7CiAJCQl9Ci0JCQlxLT5sYXN0X21vdmVfZnRjID0gYWRkX2J1ZihxLT5sYXN0X21vdmVfZnRjLCBkaWZmKTsKKwkJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gYWRkX2J1ZihxLT51LmluLmFja19zdGFydCwgZGlmZik7CiAJCX0KIAkJZWxzZQogCQkJLyogdGhlIG9ubHkgQUNLIHdpbGwgYmUgZGVsZXRlZCwgc28gc3RvcCBwb2xsaW5nICovCkBAIC0xNDgzLDEzICsxNDY0LDExIEBACiAKIAkvKiBubyBuZWVkIHRvIHNpZ25hbCBhcyBsb25nIGFzIHRoZSBhZGFwdGVyIGhhZCBmcmVlIGJ1ZmZlcnMgKi8KIAlpZiAodXNlZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCWlmIChuZWVkX3NpZ2FfaW4ocSkpIHsKLQkJY2MgPSBxZGlvX3NpZ2FfaW5wdXQocSk7Ci0JCWlmIChjYykKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYzsKLQl9CisJaWYgKG5lZWRfc2lnYV9pbihxKSkKKwkJcmV0dXJuIHFkaW9fc2lnYV9pbnB1dChxKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xNDk5LDExICsxNDc4LDExIEBACiAgKiBAYnVmbnI6IGZpcnN0IGJ1ZmZlciB0byBwcm9jZXNzCiAgKiBAY291bnQ6IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIGZpbGxlZAogICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKLQkJCSAgICBpbnQgYnVmbnIsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaGFuZGxlX291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCisJCQkgICBpbnQgYnVmbnIsIGludCBjb3VudCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXRlOwotCWludCB1c2VkOworCWludCB1c2VkLCByYyA9IDA7CiAKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcik7CiAKQEAgLTE1MTgsMjcgKzE0OTcsMjYgQEAKIAogCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCkgewogCQlpZiAobXVsdGljYXN0X291dGJvdW5kKHEpKQotCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCQllbHNlCiAJCQlpZiAoKHEtPmlycV9wdHItPnNzcWRfZGVzYy5tbXdjID4gMSkgJiYKIAkJCSAgICAoY291bnQgPiAxKSAmJgogCQkJICAgIChjb3VudCA8PSBxLT5pcnFfcHRyLT5zc3FkX2Rlc2MubW13YykpIHsKIAkJCQkvKiBleHBsb2l0IGVuaGFuY2VkIFNJR0EgKi8KIAkJCQlxLT51Lm91dC51c2VfZW5oX3NpZ2EgPSAxOwotCQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJKiBPbmUgc2lnYS13IHBlciBidWZmZXIgcmVxdWlyZWQgZm9yIHVuaWNhc3QKIAkJCQkqIEhpcGVyU29ja2V0cy4KIAkJCQkqLwogCQkJCXEtPnUub3V0LnVzZV9lbmhfc2lnYSA9IDA7Ci0JCQkJd2hpbGUgKGNvdW50LS0pCi0JCQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCXdoaWxlIChjb3VudC0tKSB7CisJCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJCWlmIChyYykKKwkJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCX0KLQotCQkvKiByZXBvcnQgQ0M9MiBjb25kaXRpb25zIHN5bmNocm9ub3VzbHkgKi8KLQkJaWYgKHEtPnFkaW9fZXJyb3IpCi0JCQlfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhxKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTUwLDE0ICsxNTI4LDE0IEBACiAJLyogdHJ5IHRvIGZhc3QgcmVxdWV1ZSBidWZmZXJzICovCiAJZ2V0X2J1Zl9zdGF0ZShxLCBwcmV2X2J1ZihidWZuciksICZzdGF0ZSwgMCk7CiAJaWYgKHN0YXRlICE9IFNMU0JfQ1VfT1VUUFVUX1BSSU1FRCkKLQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJZWxzZSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJmYXN0LXJlcSIpOwogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZmFzdF9yZXF1ZXVlKTsKIAl9CiBvdXQ6Ci0JLyogRml4bWU6IGNvdWxkIHdhaXQgZm9yZXZlciBpZiBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTU5NiwxNCArMTU3NCwxMiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX0lOUFVUKQotCQloYW5kbGVfaW5ib3VuZChpcnFfcHRyLT5pbnB1dF9xc1txX25yXSwgY2FsbGZsYWdzLCBidWZuciwKLQkJCSAgICAgICBjb3VudCk7CisJCXJldHVybiBoYW5kbGVfaW5ib3VuZChpcnFfcHRyLT5pbnB1dF9xc1txX25yXSwKKwkJCQkgICAgICBjYWxsZmxhZ3MsIGJ1Zm5yLCBjb3VudCk7CiAJZWxzZSBpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1NZTkNfT1VUUFVUKQotCQloYW5kbGVfb3V0Ym91bmQoaXJxX3B0ci0+b3V0cHV0X3FzW3FfbnJdLCBjYWxsZmxhZ3MsIGJ1Zm5yLAotCQkJCWNvdW50KTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCQlyZXR1cm4gaGFuZGxlX291dGJvdW5kKGlycV9wdHItPm91dHB1dF9xc1txX25yXSwKKwkJCQkgICAgICAgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOworCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG9fUURJTyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggYzA4MzU2Yi4uMThkNTRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTExNyw3ICsxMTcsNiBAQAogCXEtPm1hc2sgPSAxIDw8ICgzMSAtIGkpOwogCXEtPm5yID0gaTsKIAlxLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3N0b3JhZ2VfbGlzdHMoc3RydWN0IHFkaW9fcSAqcSwgc3RydWN0IHFkaW9faXJxICppcnFfcHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKaW5kZXggOGU5MGUxNC4uYzY1NWQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCkBAIC0zMSw2ICszMSw3IEBACiAKIC8qIGxpc3Qgb2YgdGhpbiBpbnRlcnJ1cHQgaW5wdXQgcXVldWVzICovCiBzdGF0aWMgTElTVF9IRUFEKHRpcV9saXN0KTsKK0RFRklORV9NVVRFWCh0aXFfbGlzdF9sb2NrKTsKIAogLyogYWRhcHRlciBsb2NhbCBzdW1tYXJ5IGluZGljYXRvciAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgKnRpcWRpb19hbHNpOwpAQCAtOTUsMTIgKzk2LDExIEBACiAJaWYgKCFjc3NfcWRpb19vbWl0X3N2cyAmJiBpcnFfcHRyLT5zaWdhX2ZsYWcuc3luYykKIAkJY3NzX3FkaW9fb21pdF9zdnMgPSAxOwogCi0JZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkgeworCW11dGV4X2xvY2soJnRpcV9saXN0X2xvY2spOworCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCWxpc3RfYWRkX3JjdSgmcS0+ZW50cnksICZ0aXFfbGlzdCk7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCX0KKwltdXRleF91bmxvY2soJnRpcV9saXN0X2xvY2spOwogCXhjaGcoaXJxX3B0ci0+ZHNjaSwgMSk7Ci0JdGFza2xldF9zY2hlZHVsZSgmdGlxZGlvX3Rhc2tsZXQpOwogfQogCiAvKgpAQCAtMTE4LDcgKzExOCwxMCBAQAogCQkvKiBpZiBlc3RhYmxpc2ggdHJpZ2dlcmVkIGFuIGVycm9yICovCiAJCWlmICghcSB8fCAhcS0+ZW50cnkucHJldiB8fCAhcS0+ZW50cnkubmV4dCkKIAkJCWNvbnRpbnVlOworCisJCW11dGV4X2xvY2soJnRpcV9saXN0X2xvY2spOwogCQlsaXN0X2RlbF9yY3UoJnEtPmVudHJ5KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAkJc3luY2hyb25pemVfcmN1KCk7CiAJfQogfQpAQCAtMTU1LDE1ICsxNTgsMTUgQEAKIAkgKi8KIAlxZGlvX2NoZWNrX291dGJvdW5kX2FmdGVyX3RoaW5pbnQocSk7CiAKLWFnYWluOgogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAotCXFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIocSk7CisJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKIAlpZiAoIXRpcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3ApOwotCQlnb3RvIGFnYWluOworCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiAJfQogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CkBAIC0xNzMsNyArMTc2LDggQEAKIAkgKi8KIAlpZiAoIXRpcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKTsKLQkJZ290byBhZ2FpbjsKKwkJaWYgKGxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCX0KIH0KIApAQCAtMzY2LDEwICszNzAsMTEgQEAKIAogdm9pZCBfX2V4aXQgdGlxZGlvX3VucmVnaXN0ZXJfdGhpbmludHModm9pZCkKIHsKLQl0YXNrbGV0X2Rpc2FibGUoJnRpcWRpb190YXNrbGV0KTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZ0aXFfbGlzdCkpOwogCiAJaWYgKHRpcWRpb19hbHNpKSB7CiAJCXMzOTBfdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdCh0aXFkaW9fYWxzaSwgUURJT19BSVJRX0lTQyk7CiAJCWlzY191bnJlZ2lzdGVyKFFESU9fQUlSUV9JU0MpOwogCX0KKwl0YXNrbGV0X2tpbGwoJnRpcWRpb190YXNrbGV0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKaW5kZXggY2IyMmI5Ny4uNjViNmE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKQEAgLTEyOCw4ICsxMjgsNyBAQAogCWlmIChsID09IHpkZXYtPmxpc3QucHJldikKIAkJcmV0dXJuOwogCS8qIE1vdmUgemRldiBiZWhpbmQgbCAqLwotCWxpc3RfZGVsKCZ6ZGV2LT5saXN0KTsKLQlsaXN0X2FkZCgmemRldi0+bGlzdCwgbCk7CisJbGlzdF9tb3ZlKCZ6ZGV2LT5saXN0LCBsKTsKIH0KIAogLyoqCkBAIC0xNTcsOCArMTU2LDcgQEAKIAlpZiAobCA9PSB6ZGV2LT5saXN0Lm5leHQpCiAJCXJldHVybjsKIAkvKiBNb3ZlIHpkZXYgYmVmb3JlIGwgKi8KLQlsaXN0X2RlbCgmemRldi0+bGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmemRldi0+bGlzdCwgbCk7CisJbGlzdF9tb3ZlX3RhaWwoJnpkZXYtPmxpc3QsIGwpOwogfQogCiBzdGF0aWMgdm9pZCB6Y3J5cHRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCmluZGV4IGU3YTFlMjIuLmMyMGQ0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCkBAIC03ODEsOCArNzgxLDcgQEAKIAkJLyogU2lnbmFsIHBlbmRpbmcuICovCiAJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CiBvdXRfZnJlZToKLQltZW1zZXQoYXBfbXNnLm1lc3NhZ2UsIDB4MCwgYXBfbXNnLmxlbmd0aCk7Ci0Ja2ZyZWUoYXBfbXNnLm1lc3NhZ2UpOworCWt6ZnJlZShhcF9tc2cubWVzc2FnZSk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvZWJjZGljLmMgYi9kcml2ZXJzL3MzOTAvZWJjZGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Yzk4ZGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL2ViY2RpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9lYmNkaWMuYwotICogICAgRUNCRElDIC0+IEFTQ0lJLCBBU0NJSSAtPiBFQ0JESUMgY29udmVyc2lvbiB0YWJsZXMuCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk4IElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKgotICogQVNDSUkgLT4gRUJDRElDCi0gKi8KLV9fdTggX2FzY2ViY1syNTZdID0KLXsKLSAvKjAwICBOTCAgICBTSCAgICBTWCAgICBFWCAgICBFVCAgICBOUSAgICBBSyAgICBCTCAqLwotICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDM3LCAweDJELCAweDJFLCAweDJGLAotIC8qMDggIEJTICAgIEhUICAgIExGICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgIDB4MTYsIDB4MDUsIDB4MTUsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gLyoxMCAgREwgICAgRDEgICAgRDIgICAgRDMgICAgRDQgICAgTksgICAgU04gICAgRUIgKi8KLSAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgzQywgMHgxNSwgMHgzMiwgMHgyNiwKLSAvKjE4ICBDTiAgICBFTSAgICBTQiAgICBFQyAgICBGUyAgICBHUyAgICBSUyAgICBVUyAqLwotICAgICAweDE4LCAweDE5LCAweDNGLCAweDI3LCAweDFDLCAweDFELCAweDFFLCAweDFGLAotIC8qMjAgIFNQICAgICAhICAgICAiICAgICAjICAgICAkICAgICAlICAgICAmICAgICAnICovCi0gICAgIDB4NDAsIDB4NUEsIDB4N0YsIDB4N0IsIDB4NUIsIDB4NkMsIDB4NTAsIDB4N0QsCi0gLyoyOCAgICggICAgICkgICAgICogICAgICsgICAgICwgICAgIC0gICAgLiAgICAgIC8gKi8KLSAgICAgMHg0RCwgMHg1RCwgMHg1QywgMHg0RSwgMHg2QiwgMHg2MCwgMHg0QiwgMHg2MSwKLSAvKjMwICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LAotIC8qMzggICA4ICAgICA5ICAgICA6ICAgICA7ICAgICA8ICAgICA9ICAgICA+ICAgICA/ICovCi0gICAgIDB4RjgsIDB4RjksIDB4N0EsIDB4NUUsIDB4NEMsIDB4N0UsIDB4NkUsIDB4NkYsCi0gLyo0MCAgIEAgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgMHg3QywgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNywKLSAvKjQ4ICAgSCAgICAgSSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAqLwotICAgICAweEM4LCAweEM5LCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LAotIC8qNTAgICBQICAgICBRICAgICBSICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICovCi0gICAgIDB4RDcsIDB4RDgsIDB4RDksIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsCi0gLyo1OCAgIFggICAgIFkgICAgIFogICAgIFsgICAgIFwgICAgIF0gICAgIF4gICAgIF8gKi8KLSAgICAgMHhFNywgMHhFOCwgMHhFOSwgMHhBRCwgMHhFMCwgMHhCRCwgMHg1RiwgMHg2RCwKLSAvKjYwICAgYCAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAweDc5LCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotIC8qNjggICBoICAgICBpICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICovCi0gICAgIDB4ODgsIDB4ODksIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCi0gLyo3MCAgIHAgICAgIHEgICAgIHIgICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgKi8KLSAgICAgMHg5NywgMHg5OCwgMHg5OSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwKLSAvKjc4ICAgeCAgICAgeSAgICAgeiAgICAgeyAgICAgfCAgICAgfSAgICAgfiAgICBETCAqLwotICAgICAweEE3LCAweEE4LCAweEE5LCAweEMwLCAweDRGLCAweEQwLCAweEExLCAweDA3LAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweEZGCi19OwotCi0vKgotICogRUJDRElDIC0+IEFTQ0lJCi0gKi8KLV9fdTggX2ViY2FzY1syNTZdID0KLXsKLSAvKiAweDAwICAgTlVMICAgU09IICAgU1RYICAgRVRYICAqU0VMICAgIEhUICAqUk5MICAgREVMICovCi0gICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNywgMHgwOSwgMHgwNywgMHg3RiwKLSAvKiAweDA4ICAgLUdFICAtU1BTICAtUlBUICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAvKiAweDEwICAgRExFICAgREMxICAgREMyICAgREMzICAtUkVTICAgLU5MICAgIEJTICAtUE9DCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUVOUCAgLT5MRiAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MDcsIDB4MEEsIDB4MDgsIDB4MDcsCi0gLyogMHgxOCAgIENBTiAgICBFTSAgLVVCUyAgLUNVMSAgLUlGUyAgLUlHUyAgLUlSUyAgLUlUQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JVVMgKi8KLSAgICAgICAgICAweDE4LCAweDE5LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4MjAgICAtRFMgIC1TT1MgICAgRlMgIC1XVVMgIC1CWVAgICAgTEYgICBFVEIgICBFU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSU5QICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxQywgMHgwNywgMHgwNywgMHgwQSwgMHgxNywgMHgxQiwKLSAvKiAweDI4ICAgLVNBICAtU0ZFICAgLVNNICAtQ1NQICAtTUZBICAgRU5RICAgQUNLICAgQkVMCi0gICAgICAgICAgICAgICAgICAgICAgIC1TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA1LCAweDA2LCAweDA3LAotIC8qIDB4MzAgIC0tLS0gIC0tLS0gICBTWU4gICAtSVIgICAtUFAgIC1UUk4gIC1OQlMgICBFT1QgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDE2LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA0LAotIC8qIDB4MzggIC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAotIC8qIDB4NDAgICAgU1AgICBSU1AgICAgICAgICAgIIHkICAgICAgICAgICAgICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyMCwgMHhGRiwgMHg4MywgMHg4NCwgMHg4NSwgMHhBMCwgMHgwNywgMHg4NiwKLSAvKiAweDQ4ICAgICAgICAgICAgICAgICAgICAgICAuICAgICA8ICAgICAoICAgICArICAgICB8ICovCi0gICAgICAgICAgMHg4NywgMHhBNCwgMHg5QiwgMHgyRSwgMHgzQywgMHgyOCwgMHgyQiwgMHg3QywKLSAvKiAweDUwICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHgyNiwgMHg4MiwgMHg4OCwgMHg4OSwgMHg4QSwgMHhBMSwgMHg4QywgMHgwNywKLSAvKiAweDU4ICAgICAgICAgICCB3yAgICAgISAgICAgJCAgICAgKiAgICAgKSAgICAgOyAgICAgICAqLwotICAgICAgICAgIDB4OEQsIDB4RTEsIDB4MjEsIDB4MjQsIDB4MkEsIDB4MjksIDB4M0IsIDB4QUEsCi0gLyogMHg2MCAgICAgLSAgICAgLyAgLS0tLSAgICAggcQgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDJELCAweDJGLCAweDA3LCAweDhFLCAweDA3LCAweDA3LCAweDA3LCAweDhGLAotIC8qIDB4NjggICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCi0gICAgICAgICAgMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKLSAvKiAweDcwICAtLS0tICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgwNywgMHg5MCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweDc4ICAgICAqICAgICBgICAgICA6ICAgICAjICAgICBAICAgICAnICAgICA9ICAgICAiICovCi0gICAgICAgICAgMHg3MCwgMHg2MCwgMHgzQSwgMHgyMywgMHg0MCwgMHgyNywgMHgzRCwgMHgyMiwKLSAvKiAweDgwICAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgICAgICAgMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLSAvKiAweDg4ICAgICBoICAgICBpICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHhBRSwgMHhBRiwgMHgwNywgMHgwNywgMHgwNywgMHhGMSwKLSAvKiAweDkwICAgICCBsCAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAgICAgcCAqLwotICAgICAgICAgIDB4RjgsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0gLyogMHg5OCAgICAgcSAgICAgciAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4QTYsIDB4QTcsIDB4OTEsIDB4MDcsIDB4OTIsIDB4MDcsCi0gLyogMHhBMCAgICAgICAgICAgfiAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAgICAgeCAqLwotICAgICAgICAgIDB4RTYsIDB4N0UsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0gLyogMHhBOCAgICAgeSAgICAgeiAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4QUQsIDB4QUIsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhCMCAgICAgXiAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAggacgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDVFLCAweDlDLCAweDlELCAweEZBLCAweDA3LCAweDA3LCAweDA3LCAweEFDLAotIC8qIDB4QjggICAgICAgIC0tLS0gICAgIFsgICAgIF0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweEFCLCAweDA3LCAweDVCLCAweDVELCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4QzAgICAgIHsgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgICAgICAweDdCLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAotIC8qIDB4QzggICAgIEggICAgIEkgIC0tLS0gICAgICAgICAgIIH2ICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg0OCwgMHg0OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKLSAvKiAweEQwICAgICB9ICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICAgICBQICovCi0gICAgICAgICAgMHg3RCwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKLSAvKiAweEQ4ICAgICBRICAgICBSICAtLS0tICAgICAgICAgICCB/CAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4NTEsIDB4NTIsIDB4MDcsIDB4OTYsIDB4ODEsIDB4OTcsIDB4QTMsIDB4OTgsCi0gLyogMHhFMCAgICAgXCAgICAgICAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAqLwotICAgICAgICAgIDB4NUMsIDB4RjYsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCi0gLyogMHhFOCAgICAgWSAgICAgWiAgICAgICAgLS0tLSAgICAggdYgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDU5LCAweDVBLCAweEZELCAweDA3LCAweDk5LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4RjAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgICAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotIC8qIDB4RjggICAgIDggICAgIDkgIC0tLS0gIC0tLS0gICAgIIHcICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg5QSwgMHgwNywgMHgwNywgMHgwNwotfTsKLQotLyoKLSAqIEVCQ0RJQyAoY2FwaXRhbHMpIC0+IEFTQ0lJIChzbWFsbCBjYXNlKQotICovCi1fX3U4IF9lYmNhc2NfcmVkdWNlX2Nhc2VbMjU2XSA9Ci17Ci0gLyogMHgwMCAgIE5VTCAgIFNPSCAgIFNUWCAgIEVUWCAgKlNFTCAgICBIVCAgKlJOTCAgIERFTCAqLwotICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MDksIDB4MDcsIDB4N0YsCi0KLSAvKiAweDA4ICAgLUdFICAtU1BTICAtUlBUICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLQotIC8qIDB4MTAgICBETEUgICBEQzEgICBEQzIgICBEQzMgIC1SRVMgICAtTkwgICAgQlMgIC1QT0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRU5QICAtPkxGICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgwNywgMHgwQSwgMHgwOCwgMHgwNywKLQotIC8qIDB4MTggICBDQU4gICAgRU0gIC1VQlMgIC1DVTEgIC1JRlMgIC1JR1MgIC1JUlMgIC1JVEIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSVVTICovCi0gICAgICAgICAgMHgxOCwgMHgxOSwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4MjAgICAtRFMgIC1TT1MgICAgRlMgIC1XVVMgIC1CWVAgICAgTEYgICBFVEIgICBFU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSU5QICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxQywgMHgwNywgMHgwNywgMHgwQSwgMHgxNywgMHgxQiwKLQotIC8qIDB4MjggICAtU0EgIC1TRkUgICAtU00gIC1DU1AgIC1NRkEgICBFTlEgICBBQ0sgICBCRUwKLSAgICAgICAgICAgICAgICAgICAgICAgLVNXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDcsCi0KLSAvKiAweDMwICAtLS0tICAtLS0tICAgU1lOICAgLUlSICAgLVBQICAtVFJOICAtTkJTICAgRU9UICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxNiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNCwKLQotIC8qIDB4MzggIC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAotCi0gLyogMHg0MCAgICBTUCAgIFJTUCAgICAgICAgICAggeQgICAgICAgICAgICAgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDIwLCAweEZGLCAweDgzLCAweDg0LCAweDg1LCAweEEwLCAweDA3LCAweDg2LAotCi0gLyogMHg0OCAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgPCAgICAgKCAgICAgKyAgICAgfCAqLwotICAgICAgICAgIDB4ODcsIDB4QTQsIDB4OUIsIDB4MkUsIDB4M0MsIDB4MjgsIDB4MkIsIDB4N0MsCi0KLSAvKiAweDUwICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHgyNiwgMHg4MiwgMHg4OCwgMHg4OSwgMHg4QSwgMHhBMSwgMHg4QywgMHgwNywKLQotIC8qIDB4NTggICAgICAgICAgIIHfICAgICAhICAgICAkICAgICAqICAgICApICAgICA7ICAgICAgICovCi0gICAgICAgICAgMHg4RCwgMHhFMSwgMHgyMSwgMHgyNCwgMHgyQSwgMHgyOSwgMHgzQiwgMHhBQSwKLQotIC8qIDB4NjAgICAgIC0gICAgIC8gIC0tLS0gICAgIIHEICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyRCwgMHgyRiwgMHgwNywgMHg4NCwgMHgwNywgMHgwNywgMHgwNywgMHg4RiwKLQotIC8qIDB4NjggICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCi0gICAgICAgICAgMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKLQotIC8qIDB4NzAgIC0tLS0gICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDA3LCAweDkwLCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHg3OCAgICAgKiAgICAgYCAgICAgOiAgICAgIyAgICAgQCAgICAgJyAgICAgPSAgICAgIiAqLwotICAgICAgICAgIDB4NzAsIDB4NjAsIDB4M0EsIDB4MjMsIDB4NDAsIDB4MjcsIDB4M0QsIDB4MjIsCi0KLSAvKiAweDgwICAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgICAgICAgMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQotIC8qIDB4ODggICAgIGggICAgIGkgICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweEFFLCAweEFGLCAweDA3LCAweDA3LCAweDA3LCAweEYxLAotCi0gLyogMHg5MCAgICAggbAgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gICAgIHAgKi8KLSAgICAgICAgICAweEY4LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotCi0gLyogMHg5OCAgICAgcSAgICAgciAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4QTYsIDB4QTcsIDB4OTEsIDB4MDcsIDB4OTIsIDB4MDcsCi0KLSAvKiAweEEwICAgICAgICAgICB+ICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAgICB4ICovCi0gICAgICAgICAgMHhFNiwgMHg3RSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLQotIC8qIDB4QTggICAgIHkgICAgIHogICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEFELCAweEFCLCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhCMCAgICAgXiAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAggacgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDVFLCAweDlDLCAweDlELCAweEZBLCAweDA3LCAweDA3LCAweDA3LCAweEFDLAotCi0gLyogMHhCOCAgICAgICAgLS0tLSAgICAgWyAgICAgXSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4QUIsIDB4MDcsIDB4NUIsIDB4NUQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEMwICAgICB7ICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgICAgICAgMHg3QiwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQotIC8qIDB4QzggICAgIEggICAgIEkgIC0tLS0gICAgICAgICAgIIH2ICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKLQotIC8qIDB4RDAgICAgIH0gICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gICAgIFAgKi8KLSAgICAgICAgICAweDdELCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotCi0gLyogMHhEOCAgICAgUSAgICAgUiAgLS0tLSAgICAgICAgICAggfwgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweDA3LCAweDk2LCAweDgxLCAweDk3LCAweEEzLCAweDk4LAotCi0gLyogMHhFMCAgICAgXCAgICAgICAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAqLwotICAgICAgICAgIDB4NUMsIDB4RjYsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0KLSAvKiAweEU4ICAgICBZICAgICBaICAgICAgICAtLS0tICAgICCB1iAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4RkQsIDB4MDcsIDB4OTQsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEYwICAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgICAgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQotIC8qIDB4RjggICAgIDggICAgIDkgIC0tLS0gIC0tLS0gICAgIIHcICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg4MSwgMHgwNywgMHgwNywgMHgwNwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDYzODJjMDQuLjk2ZWRkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAKIG9iai0kKENPTkZJR19TTVNHSVVDVikgKz0gc21zZ2l1Y3Yubwogb2JqLSQoQ09ORklHX0xDUykgKz0gbGNzLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19DTEFXKSArPSBjbGF3Lm8gY3UzMDg4Lm8KLXFldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8gcWV0aF9jb3JlX29mZmwubworcWV0aC15ICs9IHFldGhfY29yZV9zeXMubyBxZXRoX2NvcmVfbWFpbi5vIHFldGhfY29yZV9tcGMubwogb2JqLSQoQ09ORklHX1FFVEgpICs9IHFldGgubwogcWV0aF9sMi15ICs9IHFldGhfbDJfbWFpbi5vCiBvYmotJChDT05GSUdfUUVUSF9MMikgKz0gcWV0aF9sMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IGY1ZTYxODUuLjMwYTQzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC02MCw2ICs2MCw5IEBACiAgKiAgICAxLjI1ICBBZGRlZCBQYWNraW5nIHN1cHBvcnQKICAqICAgIDEuNQogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImNsYXciCisKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CkBAIC05NCw3ICs5Nyw3IEBACiAgICBDTEFXIHVzZXMgdGhlIHMzOTBkYmYgZmlsZSBzeXN0ZW0gIHNlZSBjbGF3X3RyYWNlIGFuZCBjbGF3X3NldHVwCiAqLwogCi0KK3N0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gIkNMQVcgZHJpdmVyIjsKIHN0YXRpYyBjaGFyIGRlYnVnX2J1ZmZlclsyNTVdOwogLyoqCiAgKiBEZWJ1ZyBGYWNpbGl0eSBTdHVmZgpAQCAtMjA2LDIwICsyMDksMzAgQEAKIHN0YXRpYyBpbnQgcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKGludCBudW1fb2ZfcGFnZXMpOwogc3RhdGljIHN0cnVjdCBza19idWZmICpjbGF3X3BhY2tfc2tiKHN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdnB0cik7CiAvKiBzeXNmcyBGdW5jdGlvbnMgKi8KLXN0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogc3RhdGljIGludCBjbGF3X2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY2xhd19yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTI5OCw4ICszMTEsOCBAQAogCWlmIChyYykgewogCQlwcm9iZV9lcnJvcihjZ2Rldik7CiAJCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGRfZmlsZXMgZmFpbGVkICVzICVzIEV4aXQgTGluZSAlZCBcbiIsCi0JCQlkZXZfbmFtZSgmY2dkZXYtPmNkZXZbMF0tPmRldiksIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCWRldl9lcnIoJmNnZGV2LT5kZXYsICJDcmVhdGluZyB0aGUgL3Byb2MgZmlsZXMgZm9yIGEgbmV3IgorCQkiIENMQVcgZGV2aWNlIGZhaWxlZFxuIik7CiAJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAicHJvYmV4JWQiLCByYyk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0zMzUsNiArMzQ4LDggQEAKICAgICAgICAgcmM9Y2xhd19od190eCggc2tiLCBkZXYsIDEgKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socF9jaC0+Y2RldiksIHNhdmVmbGFncyk7CiAJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJjbGF3dHglZCIsIHJjKTsKKwlpZiAocmMpCisJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAgICAgICAgIHJldHVybiByYzsKIH0gICAvKiAgZW5kIG9mIGNsYXdfdHggKi8KIApAQCAtNDk2LDcgKzUxMSw4IEBACiAgICAgICAgICAgIH4oREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpKSAhPSAweDAwKSB8fAogICAgICAgICAgICAoKChwcml2cHRyLT5jaGFubmVsW1JFQURdLmZsYWcgfAogCSAgIAlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5mbGFnKSAmIENMQVdfVElNRVIpICE9IDB4MDApKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBzaWRlIGlzIG5vdCByZWFkeVxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2LAorCQkJIiVzOiByZW1vdGUgc2lkZSBpcyBub3QgcmVhZHlcbiIsIGRldi0+bmFtZSk7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJub3RyZHkiKTsKIAogICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMjsgIGkrKykgewpAQCAtNTgyLDEwICs1OTgsOSBAQAogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJjbGF3aXJxIik7CiAgICAgICAgIC8qIEJ5cGFzcyBhbGwgJ3Vuc29saWNpdGVkIGludGVycnVwdHMnICovCiAJaWYgKCFjZGV2LT5kZXYuZHJpdmVyX2RhdGEpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgZm9yIGRldmljZToiCi0JCSAJIiVzIHJlY2VpdmVkIGMtJTAyeCBkLSUwMnhcbiIsCi0JCSAgICAgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgaXJiLT5zY3N3LmNtZC5jc3RhdCwKLQkJICAgICAgIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOworCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiQW4gdW5pbml0aWFsaXplZCBDTEFXIGRldmljZSByZWNlaXZlZCBhbiIKKwkJCSIgSVJRLCBjLSUwMnggZC0lMDJ4XG4iLAorCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5kc3RhdCk7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRpcnEiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTU5Nyw4ICs2MTIsNyBAQAogCWVsc2UgaWYgKHByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmNkZXYgPT0gY2RldikKIAkJcF9jaCA9ICZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKIAllbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogQ2FuJ3QgZGV0ZXJtaW5lIGNoYW5uZWwgZm9yICIKLQkJCSJpbnRlcnJ1cHQsIGRldmljZSAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiVGhlIGRldmljZSBpcyBub3QgYSBDTEFXIGRldmljZVxuIik7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRjaGFuIik7CiAJCXJldHVybjsKIAl9CkBAIC02MTIsNyArNjI2LDggQEAKIAogCS8qIENoZWNrIGZvciBnb29kIHN1YmNoYW5uZWwgcmV0dXJuIGNvZGUsIG90aGVyd2lzZSBpbmZvIG1lc3NhZ2UgKi8KIAlpZiAoaXJiLT5zY3N3LmNtZC5jc3RhdCAmJiAhKGlyYi0+c2Nzdy5jbWQuY3N0YXQgJiBTQ0hOX1NUQVRfUENJKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBzdWJjaGFubmVsIGNoZWNrIGZvciBkZXZpY2U6ICUwNHggLSIKKwkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCSIlczogc3ViY2hhbm5lbCBjaGVjayBmb3IgZGV2aWNlOiAlMDR4IC0iCiAJCQkiIFNjaCBTdGF0ICUwMnggIERldiBTdGF0ICUwMnggQ1BBIC0gJTA0eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9jaC0+ZGV2bm8sCiAJCQlpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0LApAQCAtNjUxLDcgKzY2Niw3IEBACiAJCQl3YWtlX3VwKCZwX2NoLT53YWl0KTsgLyogd2FrZSBjbGF3X29wZW4gKFJFQUQpKi8KIAkJfSBlbHNlIGlmIChwX2NoLT5mbGFnID09IENMQVdfV1JJVEUpIHsKIAkJCXBfY2gtPmNsYXdfc3RhdGUgPSBDTEFXX1NUQVJUX1dSSVRFOwotCQkJLyoJc2VuZCBTWVNURU1fVkFMSURBVEUJCQkqLworCQkJLyogICAgICBzZW5kIFNZU1RFTV9WQUxJREFURSAgICAgICAgICAgICAgICAgICAgKi8KIAkJCWNsYXdfc3RydF9yZWFkKGRldiwgTE9DS19OTyk7CiAJCQljbGF3X3NlbmRfY29udHJvbChkZXYsCiAJCQkJU1lTVEVNX1ZBTElEQVRFX1JFUVVFU1QsCkBAIC02NTksMTAgKzY3NCw5IEBACiAJCQkJcF9lbnYtPmhvc3RfbmFtZSwKIAkJCQlwX2Vudi0+YWRhcHRlcl9uYW1lKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IHVuc29saWNpdGVkICIKLQkJCQkiaW50ZXJydXB0IGZvciBkZXZpY2U6IgotCQkJCSIlcyByZWNlaXZlZCBjLSUwMnggZC0lMDJ4XG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLAorCQkJZGV2X3dhcm4oJmNkZXYtPmRldiwgIlRoZSBDTEFXIGRldmljZSByZWNlaXZlZCIKKwkJCQkiIGFuIHVuZXhwZWN0ZWQgSVJRLCAiCisJCQkJImMtJTAyeCBkLSUwMnhcbiIsCiAJCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwKIAkJCQlpcmItPnNjc3cuY21kLmRzdGF0KTsKIAkJCXJldHVybjsKQEAgLTY3Nyw4ICs2OTEsOCBAQAogCQkJICAgIChwX2NoLT5pcmItPmVjd1swXSAmIDB4NDApID09IDB4NDAgfHwKIAkJCSAgICAocF9jaC0+aXJiLT5lY3dbMF0pICAgICAgICA9PSAwKSB7CiAJCQkJcHJpdnB0ci0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc3RhcnQgaXMgIgotCQkJCQkicmVxdWlyZWQgYWZ0ZXIgcmVtb3RlICIKKwkJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCQkiJXM6IFJlc3RhcnQgaXMgcmVxdWlyZWQgYWZ0ZXIgcmVtb3RlICIKIAkJCQkJInNpZGUgcmVjb3ZlcnMgXG4iLAogCQkJCQlkZXYtPm5hbWUpOwogCQkJfQpAQCAtNzEzLDExICs3MjcsMTMgQEAKIAkJcmV0dXJuOwogCWNhc2UgQ0xBV19TVEFSVF9XUklURToKIAkJaWYgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBDaGVjayBPY2N1cmVkIGluICIKKwkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJIiVzOiBVbml0IENoZWNrIE9jY3VyZWQgaW4gIgogCQkJCSJ3cml0ZSBjaGFubmVsXG4iLCBkZXYtPm5hbWUpOwogCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7CiAJCQlpZiAocF9jaC0+aXJiLT5lY3dbMF0gJiAweDgwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc2V0dGluZyBFdmVudCAiCisJCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkJIiVzOiBSZXNldHRpbmcgRXZlbnQgIgogCQkJCQkib2NjdXJyZWQ6XG4iLCBkZXYtPm5hbWUpOwogCQkJCWluaXRfdGltZXIoJnBfY2gtPnRpbWVyKTsKIAkJCQlwX2NoLT50aW1lci5mdW5jdGlvbiA9CkBAIC03MjUsNyArNzQxLDggQEAKIAkJCQlwX2NoLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcF9jaDsKIAkJCQlwX2NoLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIDEwKkhaOwogCQkJCWFkZF90aW1lcigmcF9jaC0+dGltZXIpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3cml0ZSBjb25uZWN0aW9uICIKKwkJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCQkiJXM6IHdyaXRlIGNvbm5lY3Rpb24gIgogCQkJCQkicmVzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCX0KIAkJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJyc3RydHdydCIpOwpAQCAtNzMzLDkgKzc1MCwxMCBAQAogCQl9CiAJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9FWENFUCkgewogCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBFeGNlcHRpb24gIgotCQkJICAgICAgICJPY2N1cmVkIGluIHdyaXRlIGNoYW5uZWxcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJIiVzOiBVbml0IEV4Y2VwdGlvbiAiCisJCQkJIm9jY3VycmVkIGluIHdyaXRlIGNoYW5uZWxcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQlpZiAoISgocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU0VDX1NUQVRVUykgfHwKIAkJKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0gU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKQEAgLTc1Nyw4ICs3NzUsOSBAQAogCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiU3RXdEV4aXQiKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3cm9uZyBzZWxlY3Rpb24gY29kZSAtIGlycSAiCi0JCQkic3RhdGU9JWRcbiIsIGRldi0+bmFtZSwgcF9jaC0+Y2xhd19zdGF0ZSk7CisJCWRldl93YXJuKCZjZGV2LT5kZXYsCisJCQkiVGhlIENMQVcgZGV2aWNlIGZvciAlcyByZWNlaXZlZCBhbiB1bmV4cGVjdGVkIElSUVxuIiwKKwkJCSBkZXYtPm5hbWUpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiYmFkSVJRIik7CiAJCXJldHVybjsKICAgICAgICAgfQpAQCAtOTEwLDggKzkyOSwxMCBAQAogICAgICAgICBpZiAoKChwcml2cHRyLT5jaGFubmVsW1JFQURdLmxhc3RfZHN0YXQgfAogCQlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5sYXN0X2RzdGF0KSAmCiAJCX4oREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpKSAhPSAweDAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNoYW5uZWwgcHJvYmxlbXMgZHVyaW5nIGNsb3NlIC0gIgotCQkJInJlYWQ6ICUwMnggLSAgd3JpdGU6ICUwMnhcbiIsCisJCWRldl93YXJuKCZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldiwKKwkJCSJEZWFjdGl2YXRpbmcgJXMgY29tcGxldGVkIHdpdGggaW5jb3JyZWN0IgorCQkJIiBzdWJjaGFubmVsIHN0YXR1cyAiCisJCQkiKHJlYWQgJTAyeCwgd3JpdGUgJTAyeClcbiIsCiAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLAogCQlwcml2cHRyLT5jaGFubmVsW1JFQURdLmxhc3RfZHN0YXQsCiAJCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmxhc3RfZHN0YXQpOwpAQCAtMTAxMiw3ICsxMDMzLDcgQEAKIHBhZ2VzX3RvX29yZGVyX29mX21hZyhpbnQgbnVtX29mX3BhZ2VzKQogewogCWludAlvcmRlcl9vZl9tYWc9MTsJCS8qIGFzc3VtZSAyIHBhZ2VzICovCi0JaW50CW51bXA9MjsKKwlpbnQJbnVtcDsKIAogCUNMQVdfREJGX1RFWFRfKDUsIHRyYWNlLCAicGFnZXMlZCIsIG51bV9vZl9wYWdlcyk7CiAJaWYgKG51bV9vZl9wYWdlcyA9PSAxKSAgIHtyZXR1cm4gMDsgfSAgLyogbWFnbml0dWRlIG9mIDAgPSAxIHBhZ2UgKi8KQEAgLTEwNzYsOCArMTA5Nyw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09TlVMTCApIHsKLSAgICAgICAgICAgICAgICBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdD0gcF9maXJzdDsgIC8qICAgIHNldCBuZXcgZmlyc3QgKi8KLSAgICAgICAgICAgICAgICBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9sYXN0ID0gcF9sYXN0OyAgIC8qICAgIHNldCBuZXcgbGFzdCAgKi8KKwkJcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdCA9IHBfZmlyc3Q7ICAvKiAgc2V0IG5ldyBmaXJzdCAqLworCQlwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QgID0gcF9sYXN0OyAgIC8qICBzZXQgbmV3IGxhc3QgICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAKQEAgLTExMTMsNyArMTEzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QtPnJfVElDXzIuY2RhPQogCQkJCShfX3UzMilfX3BhKCZwX2ZpcnN0LT5yZWFkKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogICAgICBjaGFpbiBpbiBuZXcgc2V0IG9mIGJsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qICAgICAgY2hhaW4gaW4gbmV3IHNldCBvZiBibG9ja3MgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QtPm5leHQgPSBwX2ZpcnN0OwogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdD1wX2xhc3Q7CiAgICAgICAgIH0gLyogZW5kIG9mIGlmICggcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3QgPT1OVUxMKSAgKi8KQEAgLTExMzUsMjEgKzExNTYsMTggQEAKIAkJY2FzZSAtRUJVU1k6IC8qIEJVU1kgaXMgYSB0cmFuc2llbnQgc3RhdGUgbm8gYWN0aW9uIG5lZWRlZCAqLwogCQkJYnJlYWs7CiAJCWNhc2UgLUVOT0RFVjoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogTWlzc2luZyBkZXZpY2UgY2FsbGVkICIKLQkJCQkiZm9yIElPIEVOT0RFVlxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVJTzoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogU3RhdHVzIHBlbmRpbmcuLi4gRUlPIFxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCQlkZXZfZXJyKCZjZGV2LT5kZXYsICJUaGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciBpcyBub3QiCisJCQkJIiBhdmFpbGFibGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVJTlZBTDoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogSW52YWxpZCBEZXYgU3RhdGUgRUlOVkFMIFxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCQlkZXZfZXJyKCZjZGV2LT5kZXYsCisJCQkJIlRoZSBzdGF0dXMgb2YgdGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIiCisJCQkJIiBpcyBub3QgdmFsaWRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFVua25vd24gZXJyb3IgaW4gIgotCQkJCSAiRG9fSU8gJWRcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpLAotCQkJICAgICAgIHJldHVybl9jb2RlKTsKKwkJCWRldl9lcnIoJmNkZXYtPmRldiwgIlRoZSBjb21tb24gZGV2aWNlIGxheWVyIgorCQkJCSIgcmV0dXJuZWQgZXJyb3IgY29kZSAlZFxuIiwKKwkJCQkgIHJldHVybl9jb2RlKTsKIAkJfQogCX0KIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2N3cmV0Iik7CkBAIC0xMTYzLDQyICsxMTgxLDM3IEBACiBjY3dfY2hlY2tfdW5pdF9jaGVjayhzdHJ1Y3QgY2hiayAqIHBfY2gsIHVuc2lnbmVkIGNoYXIgc2Vuc2UgKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcF9jaC0+bmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcF9jaC0+Y2Rldi0+ZGV2OwogCiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInVuaXRjaGVrIik7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IENoZWNrIHdpdGggc2Vuc2UgYnl0ZToweCUwNHhcbiIsCi0JICAgICAgIG5kZXYtPm5hbWUsIHNlbnNlKTsKKwlkZXZfd2FybihkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIGRpc2Nvbm5lY3RlZFxuIiwKKwkJbmRldi0+bmFtZSk7CiAKLSAgICAgICAgaWYgKHNlbnNlICYgMHg0MCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnRlcmZhY2UgZGlzY29ubmVjdCBvciAiCi0JCQkJIlNlbGVjdGl2ZSByZXNldCAiCi0JCQkJIm9jY3VycmVkIChyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTeXN0ZW0gcmVzZXQgb2NjdXJlZCIKLQkJCQkiIChyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZW5zZSAmIDB4MjApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogRGF0YS1zdHJlYW1pbmcgIgotCQkJCSJ0aW1lb3V0KVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEYXRhLXRyYW5zZmVyIHBhcml0eSIKLQkJCQkiIGVycm9yXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2Vuc2UgJiAweDEwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbnNlICYgMHgyMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEhhcmR3YXJlIG1hbGZ1bmN0aW9uICIKLQkJCQkiKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlYWQtZGF0YSBwYXJpdHkgZXJyb3IgIgotCQkJCSIocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoc2Vuc2UgJiAweDQwKSB7CisJCWlmIChzZW5zZSAmIDB4MDEpIHsKKwkJCWRldl93YXJuKGRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGZvciIKKwkJCQkiICVzIGhhcyBiZWVuIHJlc2V0XG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIDB4MjApIHsKKwkJaWYgKHNlbnNlICYgMHgwNCkgeworCQkJZGV2X3dhcm4oZGV2LCAiQSBkYXRhIHN0cmVhbWluZyB0aW1lb3V0IG9jY3VycmVkIgorCQkJCSIgZm9yICVzXG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9IGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgeworCQkJZGV2X3dhcm4oZGV2LCAiVGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIgZm9yICVzIgorCQkJCSIgaXMgZmF1bHR5XG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oZGV2LCAiQSBkYXRhIHRyYW5zZmVyIHBhcml0eSBlcnJvciBvY2N1cnJlZCIKKwkJCQkiIGZvciAlc1xuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAoc2Vuc2UgJiAweDEwKSB7CisJCWRldl93YXJuKGRldiwgIkEgcmVhZCBkYXRhIHBhcml0eSBlcnJvciBvY2N1cnJlZCIKKwkJCSIgZm9yICVzXG4iLAorCQkJbmRldi0+bmFtZSk7CisJfQogCiB9ICAgLyogICAgZW5kIG9mIGNjd19jaGVja191bml0X2NoZWNrICAgICovCiAKQEAgLTEyMzUsNyArMTI0OCw3IEBACiAJCQlicmVhazsKIAl9CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfSAgICAvKiAgICBlbmQgb2YgZmluZF9saW5rICAgICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKQEAgLTEzNDcsNyArMTM2MCwxMCBAQAogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfd3JpdGVfZnJlZV9jaGFpbj1wX3RoaXNfY2N3LT5uZXh0OwogICAgICAgICAgICAgICAgIHBfdGhpc19jY3ctPm5leHQ9TlVMTDsKICAgICAgICAgICAgICAgICAtLXByaXZwdHItPndyaXRlX2ZyZWVfY291bnQ7IC8qIC0xICovCi0gICAgICAgICAgICAgICAgYnl0ZXNJblRoaXNCdWZmZXI9bGVuX29mX2RhdGE7CisJCWlmIChsZW5fb2ZfZGF0YSA+PSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkKKwkJCWJ5dGVzSW5UaGlzQnVmZmVyID0gcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CisJCWVsc2UKKwkJCWJ5dGVzSW5UaGlzQnVmZmVyID0gbGVuX29mX2RhdGE7CiAgICAgICAgICAgICAgICAgbWVtY3B5KCBwX3RoaXNfY2N3LT5wX2J1ZmZlcixwRGF0YUFkZHJlc3MsIGJ5dGVzSW5UaGlzQnVmZmVyKTsKICAgICAgICAgICAgICAgICBsZW5fb2ZfZGF0YS09Ynl0ZXNJblRoaXNCdWZmZXI7CiAgICAgICAgICAgICAgICAgcERhdGFBZGRyZXNzKz0odW5zaWduZWQgbG9uZylieXRlc0luVGhpc0J1ZmZlcjsKQEAgLTEzNzUsNyArMTM5MSw3IEBACiAgICAgICAgICovCiAKICAgICAgICAgaWYgKHBfZmlyc3RfY2N3IT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgLyogICAgICBzZXR1cCBlbmRpbmcgY2N3IHNlcXVlbmNlIGZvciB0aGlzIHNlZ21lbnQgICAgICAgICAgICAgICovCisJCS8qICAgICAgc2V0dXAgZW5kaW5nIGNjdyBzZXF1ZW5jZSBmb3IgdGhpcyBzZWdtZW50ICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHBFbmQ9cHJpdnB0ci0+cF9lbmRfY2N3OwogICAgICAgICAgICAgICAgIGlmIChwRW5kLT53cml0ZTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBFbmQtPndyaXRlMT0weDAwOyAgIC8qIHNlY29uZCBlbmQgY2N3IGlzIG5vdyBhY3RpdmUgKi8KQEAgLTE2OTcsMTAgKzE3MTMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT4gd19USUNfMS5mbGFncyAgICAgID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT4gd19USUNfMS5jb3VudCAgICAgID0gMDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpID49CisJCQlpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZiArCisJCQkJCSAgICBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgPj0KIAkJCSAgICgodW5zaWduZWQgbG9uZykocF9idWZmKzIqCi0JCQkJKHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSAtMSkgJiBQQUdFX01BU0spKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmY9IHBfYnVmZitwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJCSAgICAocHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpIC0gMSkgJiBQQUdFX01BU0spKSB7CisJCQkJcF9idWZmID0gcF9idWZmK3ByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQpAQCAtMTg0MCwxNSArMTg1NywxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPmhlYWRlci5vcGNvZGU9MHhmZjsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT5oZWFkZXIuZmxhZz1DTEFXX1BFTkRJTkc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmK3ByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpID49Ci0JCQkJKCh1bnNpZ25lZCBsb25nKShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgLTEpCi0JCQkJICYgUEFHRV9NQVNLKSApIHsKKwkJCWlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmK3ByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpID49CisJCQkgICgodW5zaWduZWQgbG9uZykocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpCisJCQkJIC0xKQorCQkJICAgJiBQQUdFX01BU0spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZj0gcF9idWZmK3ByaXZwdHItPnBfZW52LT5yZWFkX3NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmPQogCQkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKQotCQkJCQkocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpIC0xKQorCQkJCQkocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpLTEpCiAJCQkJCSAmIFBBR0VfTUFTSykgOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gICAvKiBmb3IgcmVhZF9idWZmZXJzICAgKi8KQEAgLTE4NTYsMjQgKzE4NzQsMjggQEAKICAgICAgICAgICBlbHNlIHsgIC8qIHJlYWQgU2l6ZSA+PSBQQUdFX1NJWkUgICovCiAgICAgICAgICAgICAgICAgZm9yIChpPTAgOyBpPCBwcml2cHRyLT5wX2Vudi0+cmVhZF9idWZmZXJzIDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoX19HRlBfRE1BLAotCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSApOworCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAorCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfYnVmZj09TlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCi0JCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9jY3dfbnVtKSk7CisJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPgorCQkJCQlwX2J1ZmZfY2N3X251bSkpOwogCQkJCS8qIGZyZWUgdGhlIHdyaXRlIHBhZ2VzICAqLwogCSAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXByaXZwdHItPnBfYnVmZl93cml0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCi0JCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKLQkJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZSApKTsKKwkJCQkJZnJlZV9wYWdlcygKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKKwkJCQkJICAgIChpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAorCQkJCQkgICAgcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cF9idWYtPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJCQkvKiBmcmVlIGFueSByZWFkIHBhZ2VzIGFscmVhZHkgYWxsb2MgICovCiAJICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cHJpdnB0ci0+cF9idWZmX3JlYWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAotCQkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCi0JCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCApKTsKKwkJCQkJZnJlZV9wYWdlcygKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKKwkJCQkJICAgIChpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAorCQkJCQkgICAgIHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cF9idWYtPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX2Njdz1OVUxMOwpAQCAtMjAwMyw3ICsyMDI1LDcgQEAKIAl0ZGV2ID0gJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2OwogCW1lbWNweSggJnRlbXBfaG9zdF9uYW1lLCBwX2Vudi0+aG9zdF9uYW1lLCA4KTsKICAgICAgICAgbWVtY3B5KCAmdGVtcF93c19uYW1lLCBwX2Vudi0+YWRhcHRlcl9uYW1lICwgOCk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiAiCisJZGV2X2luZm8odGRldiwgIiVzOiBDTEFXIGRldmljZSAlLjhzOiAiCiAJCSJSZWNlaXZlZCBDb250cm9sIFBhY2tldFxuIiwKIAkJZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOwogICAgICAgICBpZiAocHJpdnB0ci0+cmVsZWFzZV9wZW5kPT0xKSB7CkBAIC0yMDIyLDMyICsyMDQ0LDMwIEBACiAJCWlmIChwX2N0bGJrLT52ZXJzaW9uICE9IENMQVdfVkVSU0lPTl9JRCkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19XUk9OR19WRVJTSU9OKTsKLQkJCXByaW50aygiJXM6ICVkIGlzIHdyb25nIHZlcnNpb24gaWQuICIKLQkJCSAgICAgICAiRXhwZWN0ZWQgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAotCQkJICAgICAgIENMQVdfVkVSU0lPTl9JRCk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyIKKwkJCQkiIHVzZXMgYW4gaW5jb3JyZWN0IEFQSSB2ZXJzaW9uICVkXG4iLAorCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbik7CiAJCX0KIAkJcF9zeXN2YWwgPSAoc3RydWN0IHN5c3ZhbCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50aygiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlcXVlc3Q6ICIKLQkJICAgICAgICJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZCxXUyBuYW1lPSUuIgotCQkgICAgICAgIjhzLEhvc3QgbmFtZT0lLjhzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAotCQkgICAgICAgcF9jdGxiay0+bGlua2lkLAotCQkgICAgICAgcF9jdGxiay0+Y29ycmVsYXRvciwKLQkJICAgICAgIHBfc3lzdmFsLT5XU19uYW1lLAotCQkgICAgICAgcF9zeXN2YWwtPmhvc3RfbmFtZSk7CisJCWRldl9pbmZvKHRkZXYsICIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVxdWVzdDogIgorCQkJIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkLFdTIG5hbWU9JS44cywiCisJCQkiSG9zdCBuYW1lPSUuOHNcbiIsCisJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCisJCQlwX2N0bGJrLT5saW5raWQsCisJCQlwX2N0bGJrLT5jb3JyZWxhdG9yLAorCQkJcF9zeXN2YWwtPldTX25hbWUsCisJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKIAkJaWYgKG1lbWNtcCh0ZW1wX2hvc3RfbmFtZSwgcF9zeXN2YWwtPmhvc3RfbmFtZSwgOCkpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfTkFNRV9NSVNNQVRDSCk7CiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiSFNUQkFEIik7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9zeXN2YWwtPmhvc3RfbmFtZSk7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgdGVtcF9ob3N0X25hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBIb3N0IG5hbWUgbWlzbWF0Y2hcbiIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKLQkJCQkiZXhwZWN0ZWQgOiVzOiBcbiIsCi0JCQkJZGV2LT5uYW1lLAorCQkJZGV2X3dhcm4odGRldiwKKwkJCQkiSG9zdCBuYW1lICVzIGZvciAlcyBkb2VzIG5vdCBtYXRjaCB0aGUiCisJCQkJIiByZW1vdGUgYWRhcHRlciBuYW1lICVzXG4iLAogCQkJCXBfc3lzdmFsLT5ob3N0X25hbWUsCisJCQkJZGV2LT5uYW1lLAogCQkJCXRlbXBfaG9zdF9uYW1lKTsKIAkJfQogCQlpZiAobWVtY21wKHRlbXBfd3NfbmFtZSwgcF9zeXN2YWwtPldTX25hbWUsIDgpKSB7CkBAIC0yMDU2LDM1ICsyMDc2LDM4IEBACiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiV1NOQkFEIik7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9zeXN2YWwtPldTX25hbWUpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHRlbXBfd3NfbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogV1MgbmFtZSBtaXNtYXRjaFxuIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIDolczogIgotCQkJICAgICAgICJleHBlY3RlZCA6JXM6IFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkgICAgICAgcF9zeXN2YWwtPldTX25hbWUsCi0JCQkgICAgICAgdGVtcF93c19uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsICJBZGFwdGVyIG5hbWUgJXMgZm9yICVzIGRvZXMgbm90IG1hdGNoIgorCQkJCSIgdGhlIHJlbW90ZSBob3N0IG5hbWUgJXNcbiIsCisJCQkJcF9zeXN2YWwtPldTX25hbWUsCisJCQkJZGV2LT5uYW1lLAorCQkJCXRlbXBfd3NfbmFtZSk7CiAJCX0KIAkJaWYgKChwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSA8IHBfZW52LT53cml0ZV9zaXplKSAmJgogCQkgICAgKHBfZW52LT5wYWNraW5nID09IDApKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCB3cml0ZSBzaXplIGlzIHRvbyAiCi0JCQkJInNtYWxsXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4odGRldiwKKwkJCQkiVGhlIGxvY2FsIHdyaXRlIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gdGhlIgorCQkJCSIgcmVtb3RlIHJlYWQgYnVmZmVyXG4iKTsKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJ3cnRzemJhZCIpOwogCQl9CiAJCWlmICgocF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSA8IHBfZW52LT5yZWFkX3NpemUpICYmCiAJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gMCkpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IHJlYWQgc2l6ZSBpcyB0b28gIgotCQkJCSJzbWFsbFxuIiwgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsCisJCQkJIlRoZSBsb2NhbCByZWFkIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gdGhlIgorCQkJCSIgcmVtb3RlIHdyaXRlIGJ1ZmZlclxuIik7CiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAicmRzaXpiYWQiKTsKIAkJfQogCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywgMCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgotCQkJImNvbXBsZXRlZC5cbiIsIGRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKLQkJcHJpbnRrKCIlczogc3lzIFZhbGlkYXRlIFJzaXplOiVkIFdzaXplOiVkXG4iLCBkZXYtPm5hbWUsCi0JCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplLCBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSk7CisJCWRldl9pbmZvKHRkZXYsCisJCQkiQ0xBVyBkZXZpY2UgJS44czogU3lzdGVtIHZhbGlkYXRlIgorCQkJIiBjb21wbGV0ZWQuXG4iLCB0ZW1wX3dzX25hbWUpOworCQlkZXZfaW5mbyh0ZGV2LAorCQkJIiVzOiBzeXMgVmFsaWRhdGUgUnNpemU6JWQgV3NpemU6JWRcbiIsCisJCQlkZXYtPm5hbWUsIHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUsCisJCQlwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSk7CiAJCXByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID0gMTsKIAkJaWYgKHN0cm5jbXAocF9lbnYtPmFwaV90eXBlLCBXU19BUFBMX05BTUVfUEFDS0VELCA2KSA9PSAwKQogCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLSU5HX0FTSzsKQEAgLTIwOTIsOCArMjExNSwxMCBAQAogCQlicmVhazsKIAljYXNlIFNZU1RFTV9WQUxJREFURV9SRVNQT05TRToKIAkJcF9zeXN2YWwgPSAoc3RydWN0IHN5c3ZhbCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50aygiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlc3A6IFZlcnM9JWQsQ29ycj0lZCxSQz0lZCwiCi0JCQkiV1MgbmFtZT0lLjhzLEhvc3QgbmFtZT0lLjhzXG4iLAorCQlkZXZfaW5mbyh0ZGV2LAorCQkJIlNldHRpbmdzIGZvciAlcyB2YWxpZGF0ZWQgKHZlcnNpb249JWQsICIKKwkJCSJyZW1vdGUgZGV2aWNlPSVkLCByYz0lZCwgYWRhcHRlciBuYW1lPSUuOHMsICIKKwkJCSJob3N0IG5hbWU9JS44cylcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLAogCQkJcF9jdGxiay0+Y29ycmVsYXRvciwKQEAgLTIxMDIsNDEgKzIxMjcsMzkgQEAKIAkJCXBfc3lzdmFsLT5ob3N0X25hbWUpOwogCQlzd2l0Y2ggKHBfY3RsYmstPnJjKSB7CiAJCWNhc2UgMDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAiCi0JCQkJIiUuOHM6IFN5c3RlbSB2YWxpZGF0ZSAiCi0JCQkJImNvbXBsZXRlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOworCQkJZGV2X2luZm8odGRldiwgIiVzOiBDTEFXIGRldmljZSAiCisJCQkJIiUuOHM6IFN5c3RlbSB2YWxpZGF0ZSBjb21wbGV0ZWQuXG4iLAorCQkJCWRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKIAkJCWlmIChwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9PSAwKQogCQkJCWNsYXdfc3RydF9jb25uX3JlcShkZXYpOwogCQkJcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0xBV19SQ19OQU1FX01JU01BVENIOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJIlJlc3AgOiBIb3N0LCBXUyBuYW1lIGlzICIKLQkJCQkibWlzbWF0Y2hcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsICJWYWxpZGF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIgorCQkJCSIgYSBob3N0IG9yIGFkYXB0ZXIgbmFtZSBtaXNtYXRjaFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0xBV19SQ19XUk9OR19WRVJTSU9OOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJIlJlc3AgOiBXcm9uZyB2ZXJzaW9uXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIlZhbGlkYXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YgYSIKKwkJCQkiIHZlcnNpb24gY29uZmxpY3RcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIENMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJIlJlc3AgOiBiYWQgZnJhbWUgc2l6ZVxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJWYWxpZGF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIGEiCisJCQkJIiBmcmFtZSBzaXplIGNvbmZsaWN0XG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJlcnJvciBjb2RlPSVkIFxuIiwKLQkJCQkgZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyByZWplY3RlZCIKKwkJCQkiIHRoZSBjb25uZWN0aW9uXG4iLAorCQkJCSBkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIENPTk5FQ1RJT05fUkVRVUVTVDoKIAkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY3YgQ29ubiBSZXE6IFZlcnM9JWQsbGlua19pZD0lZCwiCisJCWRldl9pbmZvKHRkZXYsICIlczogUmVjdiBDb25uIFJlcTogVmVycz0lZCxsaW5rX2lkPSVkLCIKIAkJCSJDb3JyPSVkLEhPU1QgYXBwbD0lLjhzLFdTIGFwcGw9JS44c1xuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCkBAIC0yMTQ2LDIxICsyMTY5LDIxIEBACiAJCQlwX2Nvbm5lY3QtPldTX25hbWUpOwogCQlpZiAocHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgIT0gMCkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVxIGVycm9yIDogIgotCQkJCSJhbHJlYWR5IGxvZ2ljYWwgbGluayBpcyBhY3RpdmUgXG4iLAorCQkJZGV2X2luZm8odGRldiwgIiVzIHJlamVjdGVkIGEgY29ubmVjdGlvbiByZXF1ZXN0IgorCQkJCSIgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGFjdGl2ZVxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCWlmIChwX2N0bGJrLT5saW5raWQgIT0gMSkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVxIGVycm9yIDogIgotCQkJCSJyZXEgbG9naWNhbCBsaW5rIGlkIGlzIG5vdCAxXG4iLAorCQkJZGV2X2luZm8odGRldiwgIiVzIHJlamVjdGVkIGEgcmVxdWVzdCB0byBvcGVuIG11bHRpcGxlIgorCQkJCSIgY29ubmVjdGlvbnNcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQlyYyA9IGZpbmRfbGluayhkZXYsIHBfY29ubmVjdC0+aG9zdF9uYW1lLCBwX2Nvbm5lY3QtPldTX25hbWUpOwogCQlpZiAocmMgIT0gMCkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogIgotCQkJCSJyZXEgYXBwbCBuYW1lIGRvZXMgbm90IG1hdGNoXG4iLAorCQkJZGV2X2luZm8odGRldiwgIiVzIHJlamVjdGVkIGEgY29ubmVjdGlvbiByZXF1ZXN0IgorCQkJCSIgYmVjYXVzZSBvZiBhIHR5cGUgbWlzbWF0Y2hcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQljbGF3X3NlbmRfY29udHJvbChkZXYsCkBAIC0yMTcyLDcgKzIxOTUsNyBAQAogCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLX1NFTkQ7CiAJCQljbGF3X3NuZF9jb25uX3JlcShkZXYsIDApOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiBDb25uZWN0aW9uICIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBDTEFXIGRldmljZSAlLjhzOiBDb25uZWN0aW9uICIKIAkJCSJjb21wbGV0ZWQgbGlua19pZD0lZC5cbiIsCiAJCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSwKIAkJCXBfY3RsYmstPmxpbmtpZCk7CkBAIC0yMTgyLDcgKzIyMDUsNyBAQAogCQlicmVhazsKIAljYXNlIENPTk5FQ1RJT05fUkVTUE9OU0U6CiAJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXZjIENvbm4gUmVzcDogVmVycz0lZCxsaW5rX2lkPSVkLCIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBSZWN2IENvbm4gUmVzcDogVmVycz0lZCxsaW5rX2lkPSVkLCIKIAkJCSJDb3JyPSVkLFJDPSVkLEhvc3QgYXBwbD0lLjhzLCBXUyBhcHBsPSUuOHNcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLApAQCAtMjE5MywxNiArMjIxNiwxOCBAQAogCQkJcF9jb25uZWN0LT5XU19uYW1lKTsKIAogCQlpZiAocF9jdGxiay0+cmMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogcmM9JWQgXG4iLAotCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+cmMpOworCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgcmVqZWN0ZWQiCisJCQkJIiBhIGNvbm5lY3Rpb24gcmVxdWVzdFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJcmMgPSBmaW5kX2xpbmsoZGV2LAogCQkJcF9jb25uZWN0LT5ob3N0X25hbWUsIHBfY29ubmVjdC0+V1NfbmFtZSk7CiAJCWlmIChyYyAhPSAwKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiAiCi0JCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyIKKwkJCQkiIHJlamVjdGVkIGEgY29ubmVjdGlvbiAiCisJCQkJInJlcXVlc3QgYmVjYXVzZSBvZiBhIHR5cGUgbWlzbWF0Y2hcbiIsCiAJCQkJIGRldi0+bmFtZSk7CiAJCX0KIAkJLyogc2hvdWxkIGJlIHVudGlsIENPTk5FQ1RJT05fQ09ORklSTSAqLwpAQCAtMjIxMCw3ICsyMjM1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBDT05ORUNUSU9OX0NPTkZJUk06CiAJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2IENvbm4gQ29uZmlybTpWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQlkZXZfaW5mbyh0ZGV2LAorCQkJIiVzOiBSZWN2IENvbm4gQ29uZmlybTpWZXJzPSVkLGxpbmtfaWQ9JWQsIgogCQkJIkNvcnI9JWQsSG9zdCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKQEAgLTIyMjEsMjEgKzIyNDcsMjEgQEAKIAkJaWYgKHBfY3RsYmstPmxpbmtpZCA9PSAtKHByaXZwdHItPmFjdGl2ZV9saW5rX0lEKSkgewogCQkJcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSBwX2N0bGJrLT5saW5raWQ7CiAJCQlpZiAocF9lbnYtPnBhY2tpbmcgPiBQQUNLSU5HX0FTSykgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25maXJtZWQgTm93IHBhY2tpbmdcbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCQkJZGV2X2luZm8odGRldiwKKwkJCQkiJXM6IENvbmZpcm1lZCBOb3cgcGFja2luZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCQlwX2Vudi0+cGFja2luZyA9IERPX1BBQ0tFRDsKIAkJCX0KIAkJCXBfY2ggPSAmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJCQl3YWtlX3VwKCZwX2NoLT53YWl0KTsKIAkJfSBlbHNlIHsKLQkJICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIGNvbmZpcm06ICIKLQkJCQkidW5leHBlY3RlZCBsaW5raWQ9JWQgXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIkFjdGl2YXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YiCisJCQkJIiBhbiBpbmNvcnJlY3QgbGluayBJRD0lZFxuIiwKIAkJCQlkZXYtPm5hbWUsIHBfY3RsYmstPmxpbmtpZCk7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBESVNDT05ORUNUOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogRGlzY29ubmVjdDogIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IERpc2Nvbm5lY3Q6ICIKIAkJCSJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZFxuIiwKIAkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKIAkJCXBfY3RsYmstPmxpbmtpZCwgcF9jdGxiay0+Y29ycmVsYXRvcik7CkBAIC0yMjQ3LDEyICsyMjczLDEzIEBACiAJCQlwcml2cHRyLT5hY3RpdmVfbGlua19JRCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQ0xBV19FUlJPUjoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgRVJST1IgZGV0ZWN0ZWRcbiIsCisJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIGZhaWxlZFxuIiwKIAkJCWRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAgVW5leHBlY3RlZCBjb21tYW5kIGNvZGU9JWQgXG4iLAotCQkJZGV2LT5uYW1lLCAgcF9jdGxiay0+Y29tbWFuZCk7CisJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIHNlbnQiCisJCQkiIGFuIHVua25vd24gY29tbWFuZCBjb2RlXG4iLAorCQkJZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjI5NCwxMiArMjMyMSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZwX3N5c3ZhbC0+aG9zdF9uYW1lLCBsb2NhbF9uYW1lLCA4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcF9zeXN2YWwtPldTX25hbWUsIHJlbW90ZV9uYW1lLCA4KTsKIAkJCWlmIChwcml2cHRyLT5wX2Vudi0+cGFja2luZyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplPURFRl9QQUNLX0JVRlNJWkU7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemU9REVGX1BBQ0tfQlVGU0laRTsKKwkJCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplID0gREVGX1BBQ0tfQlVGU0laRTsKKwkJCQlwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSA9IERFRl9QQUNLX0JVRlNJWkU7CiAJCQl9IGVsc2UgewogCQkJCS8qIGhvdyBiaWcgaXMgdGhlIGJpZ2dlc3QgZ3JvdXAgb2YgcGFja2V0cyAqLwotCQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemU9cHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKLQkgICAgICAgICAgICAgICAgICAgICAgICBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZT1wcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJCSAgIHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPQorCQkJCXByaXZwdHItPnBfZW52LT5yZWFkX3NpemU7CisJCQkgICBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSA9CisJCQkJcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CiAJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnBfc3lzdmFsLT5yZXNlcnZlZCwgMHgwMCwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0ODUsNyArMjUxNCw2IEBACiAJcF9kZXYgPSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXY7CiAJcF9lbnYgPSBwcml2cHRyLT5wX2VudjsKICAgICAgICAgcF90aGlzX2Njdz1wcml2cHRyLT5wX3JlYWRfYWN0aXZlX2ZpcnN0OwotICAgICAgICBpPTA7CiAJd2hpbGUgKHBfdGhpc19jY3chPU5VTEwgJiYgcF90aGlzX2Njdy0+aGVhZGVyLmZsYWchPUNMQVdfUEVORElORykgewogCQlwYWNrX29mZiA9IDA7CiAJCXAgPSAwOwpAQCAtMjUxMSw4ICsyNTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtdGNfdGhpc19mcm09MTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX3RoaXNfY2N3LT5oZWFkZXIubGVuZ3RoIT0KIAkJCQlwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIgJXM6IEludmFsaWQgZnJhbWUgZGV0ZWN0ZWQgIgotCQkJCQkibGVuZ3RoIGlzICUwMnhcbiIgLAorCQkJCWRldl93YXJuKHBfZGV2LAorCQkJCQkiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyIKKwkJCQkJIiBzZW50IGEgZmF1bHR5IgorCQkJCQkiIGZyYW1lIG9mIGxlbmd0aCAlMDJ4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF90aGlzX2Njdy0+aGVhZGVyLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU0NCw3ICsyNTc0LDcgQEAKIAkJCQlnb3RvIE5leHRGcmFtZTsKIAkJCXBfcGFja2QgPSBwX3RoaXNfY2N3LT5wX2J1ZmZlcitwYWNrX29mZjsKIAkJCXBfcGFja2ggPSAoc3RydWN0IGNsYXdwaCAqKSBwX3BhY2tkOwotCQkJaWYgKChwX3BhY2toLT5sZW4gPT0gMCkgfHwgLyogYWxsIGRvbmUgd2l0aCB0aGlzIGZyYW1lPyAqLworCQkJaWYgKChwX3BhY2toLT5sZW4gPT0gMCkgfHwgLyogZG9uZSB3aXRoIHRoaXMgZnJhbWU/ICovCiAJCQkgICAgKHBfcGFja2gtPmZsYWcgIT0gMCkpCiAJCQkJZ290byBOZXh0RnJhbWU7CiAJCQlieXRlc190b19tb3YgPSBwX3BhY2toLT5sZW47CkBAIC0yNTk0LDkgKzI2MjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9yeChza2IpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJCQkJZGV2X2luZm8ocF9kZXYsICJBbGxvY2F0aW5nIGEgYnVmZmVyIGZvciIKKwkJCQkJIiBpbmNvbWluZyBkYXRhIGZhaWxlZFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzKCkgbG93IG9uIG1lbW9yeVxuIiwKLQkJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+bXRjX29mZnNldD0wOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+bXRjX2xvZ2ljYWxfbGluaz0tMTsKQEAgLTI3MjAsOCArMjc1MCw4IEBACiAgICAgICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSkgPT0gMCkgewogICAgICAgICAgICAgICAgIHBhcm0gPSAodW5zaWduZWQgbG9uZykgcF9jaDsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgIlN0V3J0SU8iKTsKLSAgICAgICAgICAgICAgICByYyA9IGNjd19kZXZpY2Vfc3RhcnQgKHBfY2gtPmNkZXYsJnBfZmlyc3RfY2N3LT53cml0ZSwgcGFybSwKLQkJCQkgICAgICAgMHhmZiwgMCk7CisJCXJjID0gY2N3X2RldmljZV9zdGFydChwX2NoLT5jZGV2LCAmcF9maXJzdF9jY3ctPndyaXRlLCBwYXJtLAorCQkJCSAgICAgIDB4ZmYsIDApOwogICAgICAgICAgICAgICAgIGlmIChyYyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjY3dfY2hlY2tfcmV0dXJuX2NvZGUocF9jaC0+Y2RldiwgcmMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MTYsMjIgKzI4NDYsMjYgQEAKICAqIEluaXRpYWxpemUgZXZlcnl0aGluZyBvZiB0aGUgbmV0IGRldmljZSBleGNlcHQgdGhlIG5hbWUgYW5kIHRoZQogICogY2hhbm5lbCBzdHJ1Y3RzLgogICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNsYXdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY2xhd19vcGVuLAorCS5uZG9fc3RvcAkJPSBjbGF3X3JlbGVhc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gY2xhd19zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gY2xhd190eCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gY2xhd19jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQKIGNsYXdfaW5pdF9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfZGV2Iik7CiAJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIGRldi0+bmFtZSk7CiAJZGV2LT5tdHUgPSBDTEFXX0RFRkFVTFRfTVRVX1NJWkU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGF3X3R4OwotCWRldi0+b3BlbiA9IGNsYXdfb3BlbjsKLQlkZXYtPnN0b3AgPSBjbGF3X3JlbGVhc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBjbGF3X3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSA9IGNsYXdfY2hhbmdlX210dTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAJZGV2LT5hZGRyX2xlbiA9IDA7CiAJZGV2LT50eXBlID0gQVJQSFJEX1NMSVA7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMzAwOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5uZXRkZXZfb3BzID0gJmNsYXdfbmV0ZGV2X29wczsKIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdG9rIik7CiAJcmV0dXJuOwogfQpAQCAtMjg4MCw4ICsyOTE0LDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IGFkZCBmb3IgJXNcbiIsCi0JICAgICAgIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltSRUFEXS0+ZGV2KSk7CisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICJhZGQgZm9yICVzXG4iLAorCQkgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1JFQURdLT5kZXYpKTsKIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAibmV3X2RldiIpOwogCXByaXZwdHIgPSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWNnZGV2LT5jZGV2W1JFQURdLT5kZXYuZHJpdmVyX2RhdGEgPSBwcml2cHRyOwpAQCAtMjg5NywyOSArMjkzMSwyOCBAQAogCWlmIChyZXQgPT0gMCkKIAkJcmV0ID0gYWRkX2NoYW5uZWwoY2dkZXYtPmNkZXZbMV0sMSxwcml2cHRyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImFkZCBjaGFubmVsIGZhaWxlZCB3aXRoIHJldCA9ICVkXG4iLCByZXQpOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwgIkNyZWF0aW5nIGEgQ0xBVyBncm91cCBkZXZpY2UiCisJCQkiIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbUkVBRF0pOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFJFQUQgZmFpbGVkICIKLQkJICAgICAgICJ3aXRoIHJldCA9ICVkXG4iLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbUkVBRF0tPmRldiksCi0JCSAgICAgICByZXQpOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwKKwkJCSJTZXR0aW5nIHRoZSByZWFkIHN1YmNoYW5uZWwgb25saW5lIgorCQkJIiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2W1dSSVRFXSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjbGF3OiBjY3dfZGV2aWNlX3NldF9vbmxpbmUgJXMgV1JJVEUgZmFpbGVkICIKLQkJICAgICAgICJ3aXRoIHJldCA9ICVkXG4iLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbV1JJVEVdLT5kZXYpLAotCQkgICAgICAgcmV0KTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsCisJCQkiU2V0dGluZyB0aGUgd3JpdGUgc3ViY2hhbm5lbCBvbmxpbmUgIgorCQkJImZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlkZXYgPSBhbGxvY19uZXRkZXYoMCwiY2xhdyVkIixjbGF3X2luaXRfbmV0ZGV2aWNlKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczphbGxvY19uZXRkZXYgZmFpbGVkXG4iLF9fZnVuY19fKTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsCisJCQkiQWN0aXZhdGluZyB0aGUgQ0xBVyBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCWRldi0+bWxfcHJpdiA9IHByaXZwdHI7CkBAIC0yOTQ3LDEzICsyOTgwLDEzIEBACiAJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0ubmRldiA9IGRldjsKIAlwcml2cHRyLT5wX2Vudi0+bmRldiA9IGRldjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOnJlYWRzaXplPSVkICB3cml0ZXNpemU9JWQgIgorCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiJXM6cmVhZHNpemU9JWQgIHdyaXRlc2l6ZT0lZCAiCiAJCSJyZWFkYnVmZmVyPSVkIHdyaXRlYnVmZmVyPSVkIHJlYWQ9MHglMDR4IHdyaXRlPTB4JTA0eFxuIiwKICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfZW52LT5yZWFkX3NpemUsCiAJCXBfZW52LT53cml0ZV9zaXplLCBwX2Vudi0+cmVhZF9idWZmZXJzLAogICAgICAgICAgICAgICAgIHBfZW52LT53cml0ZV9idWZmZXJzLCBwX2Vudi0+ZGV2bm9bUkVBRF0sCiAJCXBfZW52LT5kZXZub1tXUklURV0pOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczpob3N0X25hbWU6JS44cywgYWRhcHRlcl9uYW1lICIKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiVzOmhvc3RfbmFtZTolLjhzLCBhZGFwdGVyX25hbWUgIgogCQkiOiUuOHMgYXBpX3R5cGU6ICUuOHNcbiIsCiAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX2Vudi0+aG9zdF9uYW1lLAogCQlwX2Vudi0+YWRhcHRlcl9uYW1lICwgcF9lbnYtPmFwaV90eXBlKTsKQEAgLTI5OTcsOCArMzAzMCw4IEBACiAJbmRldiA9IHByaXYtPmNoYW5uZWxbUkVBRF0ubmRldjsKIAlpZiAobmRldikgewogCQkvKiBDbG9zZSB0aGUgZGV2aWNlICovCi0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogc2h1dGluZyBkb3duIFxuIixuZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIlczogc2h1dHRpbmcgZG93biBcbiIsCisJCQluZGV2LT5uYW1lKTsKIAkJaWYgKG5kZXYtPmZsYWdzICYgSUZGX1JVTk5JTkcpCiAJCQlyZXQgPSBjbGF3X3JlbGVhc2UobmRldik7CiAJCW5kZXYtPmZsYWdzICY9fklGRl9SVU5OSU5HOwpAQCAtMzAyMyw4ICszMDU2LDcgQEAKIAlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgZGV2X25hbWUoJmNnZGV2LT5kZXYpKTsKIAlwcml2ID0gY2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlCVUdfT04oIXByaXYpOwotCXByaW50ayhLRVJOX0lORk8gImNsYXc6ICVzKCkgY2FsbGVkICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIsCi0JCQlfX2Z1bmNfXywgZGV2X25hbWUoJmNnZGV2LT5jZGV2WzBdLT5kZXYpKTsKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiB3aWxsIGJlIHJlbW92ZWQuXG4iKTsKIAlpZiAoY2dkZXYtPnN0YXRlID09IENDV0dST1VQX09OTElORSkKIAkJY2xhd19zaHV0ZG93bl9kZXZpY2UoY2dkZXYpOwogCWNsYXdfcmVtb3ZlX2ZpbGVzKCZjZ2Rldi0+ZGV2KTsKQEAgLTMwNjMsNyArMzA5NSw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzEwMCw3ICszMTMzLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMxMzgsNyArMzE3Miw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMxODUsNyArMzIyMCw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMjI2LDcgKzMyNjIsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICpwX2VudjsKQEAgLTMyODksNyArMzMyNiw3IEBACiB7CiAJdW5yZWdpc3Rlcl9jdTMwODhfZGlzY2lwbGluZSgmY2xhd19ncm91cF9kcml2ZXIpOwogCWNsYXdfdW5yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IERyaXZlciB1bmxvYWRlZFxuIik7CisJcHJfaW5mbygiRHJpdmVyIHVubG9hZGVkXG4iKTsKIAogfQogCkBAIC0zMzAzLDEyICszMzQwLDEyIEBACiBjbGF3X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiBzdGFydGluZyBkcml2ZXJcbiIpOwogCisJcHJfaW5mbygiTG9hZGluZyAlc1xuIiwgdmVyc2lvbik7CiAJcmV0ID0gY2xhd19yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogJXMoKSBkZWJ1Z19yZWdpc3RlciBmYWlsZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXyxyZXQpOworCQlwcl9lcnIoIlJlZ2lzdGVyaW5nIHdpdGggdGhlIFMvMzkwIGRlYnVnIGZlYXR1cmUiCisJCQkiIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0X21vZCIpOwpAQCAtMzMxNiw4ICszMzUzLDggQEAKIAlpZiAocmV0KSB7CiAJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0X2JhZCIpOwogCQljbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzsgJXMoKSBjdTMwODggcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkJX19mdW5jX18scmV0KTsKKwkJcHJfZXJyKCJSZWdpc3RlcmluZyB3aXRoIHRoZSBjdTMwODggZGV2aWNlIGRyaXZlciBmYWlsZWQgIgorCQkJICAgIndpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCmluZGV4IGYyOWM3MDguLjRkZWQ5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwpAQCAtNDEwLDkgKzQxMCw4IEBACiAJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQkJCWdvdG8gYWdhaW47CiAJfQotCWJsb2NrX2xlbiAtPSAyOwotCWlmIChibG9ja19sZW4gPiAwKSB7Ci0JCSooKF9fdTE2ICopc2tiLT5kYXRhKSA9IGJsb2NrX2xlbjsKKwlpZiAoYmxvY2tfbGVuID4gMikgeworCQkqKChfX3UxNiAqKXNrYi0+ZGF0YSkgPSBibG9ja19sZW4gLSAyOwogCQljdGNtX3VucGFja19za2IoY2gsIHNrYik7CiAJfQogIGFnYWluOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKaW5kZXggMjY3ODU3My4uNzdmNDAzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwpAQCAtMTA1LDcgKzEwNSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJcHNrYi0+cHJvdG9jb2wgPSBudG9ocyhoZWFkZXItPnR5cGUpOwotCQlpZiAoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgeworCQlpZiAoKGhlYWRlci0+bGVuZ3RoIDw9IExMX0hFQURFUl9MRU5HVEgpIHx8CisJCSAgICAobGVuIDw9IExMX0hFQURFUl9MRU5HVEgpKSB7CiAJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMU0laRSkpIHsKIAkJCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKIAkJCQkJIiVzKCVzKTogSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCglZCwlZCkiCkBAIC0xNjcsMTEgKzE2OCw5IEBACiAJCWlmIChsZW4gPiAwKSB7CiAJCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPmxlbmd0aCk7CiAJCQlpZiAoc2tiX3RhaWxyb29tKHBza2IpIDwgTExfSEVBREVSX0xFTkdUSCkgewotCQkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX09WRVJSVU4pKSB7Ci0JCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCi0JCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKLQkJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47Ci0JCQkJfQorCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCisJCQkJCSJPdmVycnVuIGluIGN0Y21fdW5wYWNrX3NrYiIpOworCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYl9wdXQocHNrYiwgTExfSEVBREVSX0xFTkdUSCk7CkBAIC05MDYsMTEgKzkwNSwxMSBAQAogCX0KIAogCWlmIChjdGNtX3Rlc3RfYW5kX3NldF9idXN5KGRldikpCi0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk5LDEyICsxMDk4LDI0IEBACiAKIHN0cnVjdCBtcGNfZ3JvdXAgKmN0Y21wY19pbml0X21wY19ncm91cChzdHJ1Y3QgY3RjbV9wcml2ICpwcml2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdGNtX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGN0Y21fb3BlbiwKKwkubmRvX3N0b3AJCT0gY3RjbV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjdGNtX3N0YXRzLAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBjdGNtX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGN0Y21fdHgsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN0Y21fbXBjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGN0Y21fb3BlbiwKKwkubmRvX3N0b3AJCT0gY3RjbV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjdGNtX3N0YXRzLAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBjdGNtX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGN0Y21wY190eCwKK307CisKIHZvaWQgc3RhdGljIGN0Y21fZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5vcGVuID0gY3RjbV9vcGVuOwotCWRldi0+c3RvcCA9IGN0Y21fY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBjdGNtX3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSA9IGN0Y21fY2hhbmdlX210dTsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOwpAQCAtMTE1NywxMiArMTE2OCwxMiBAQAogCQlkZXYtPm10dSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQgLQogCQkJCVRIX0hFQURFUl9MRU5HVEggLSBQRFVfSEVBREVSX0xFTkdUSDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21wY190eDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmN0Y21fbXBjX25ldGRldl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOwogCQlwcml2LT5idWZmZXJfc2l6ZSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQ7CiAJfSBlbHNlIHsKIAkJZGV2LT5tdHUgPSBDVENNX0JVRlNJWkVfREVGQVVMVCAtIExMX0hFQURFUl9MRU5HVEggLSAyOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21fdHg7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZjdGNtX25ldGRldl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gTExfSEVBREVSX0xFTkdUSCArIDI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggM2RiNWY4NC4uNzgxZTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiB0aGVyZSBhcmUgcHJvYmxlbXMuLi5iYWlsIG91dAkgICAgKi8KIAkJCS8qIHRoZXJlIG1heSBiZSBhIHN0YXRlIG1pc21hdGNoIHNvIHJlc3RhcnQgKi8KLQkJCWdycC0+cG9ydF9wZXJzaXN0ID0gMTsKIAkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCQkJZ3JwLT5hbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllcyA9IDA7CiAJCX0KQEAgLTY5OSwxMSArNjk4LDkgQEAKIAlyZXR1cm47CiAKIGRvbmU6Ci0JaWYgKHJjICE9IDApIHsKLQkJZ3JwLT5pbl9zd2VlcCA9IDA7Ci0JCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOwotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKLQl9CisJZ3JwLT5pbl9zd2VlcCA9IDA7CisJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CisJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMTE4LDcgKzExMTUsNiBAQAogCiAJCWlmICh1bmxpa2VseShmc21fZ2V0c3RhdGUoZ3JwLT5mc20pICE9IE1QQ0dfU1RBVEVfUkVBRFkpKQogCQkJCQlnb3RvIGRvbmU7Ci0JCXBkdV9sYXN0X3NlZW4gPSAwOwogCQl3aGlsZSAoKHBza2ItPmxlbiA+IDApICYmICFwZHVfbGFzdF9zZWVuKSB7CiAJCQljdXJyX3BkdSA9IChzdHJ1Y3QgcGR1ICopcHNrYi0+ZGF0YTsKIApAQCAtMTM5Niw4ICsxMzkyLDcgQEAKIAkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJaWYgKChncnAtPnNhdmVkX3N0YXRlICE9IE1QQ0dfU1RBVEVfUkVTRVQpIHx8CiAJCS8qIGRlYWxsb2NfY2hhbm5lbCBoYXMgYmVlbiBjYWxsZWQgKi8KLQkJCSgoZ3JwLT5zYXZlZF9zdGF0ZSA9PSBNUENHX1NUQVRFX1JFU0VUKSAmJgotCQkJCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKKwkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKQogCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOwogCiAJd2NoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CkBAIC0xOTE3LDEwICsxOTEyLDggQEAKIAogCWlmIChwcml2KQogCQlncnAgPSBwcml2LT5tcGNnOwotCWlmIChncnAgPT0gTlVMTCkgewotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwlpZiAoZ3JwID09IE5VTEwpCiAJCXJldHVybjsKLQl9CiAKIAlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspCXsKIAkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggNDljM2JmYS4uYTQ1YmMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC0xMjU5LDcgKzEyNjAsNiBAQAogCXN0cnVjdCBpbl9kZXZpY2UgKmluNF9kZXY7CiAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkYXRhOwotCWRhZW1vbml6ZSgicmVnaXBtIik7CiAKIAlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChjYXJkLT5zdGF0ZSAhPSBERVZfU1RBVEVfVVApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJY2FyZC0+dHhfYnVmZmVyID0gbGNzX2dldF9idWZmZXIoJmNhcmQtPndyaXRlKTsKIAkJaWYgKGNhcmQtPnR4X2J1ZmZlciA9PSBOVUxMKSB7CiAJCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyYyA9IC1FQlVTWTsKKwkJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljYXJkLT50eF9idWZmZXItPmNhbGxiYWNrID0gbGNzX3R4YnVmZmVyX2NiOwpAQCAtMTc1MywxMSArMTc1MywxMCBAQAogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGNzX2NhcmQsIGtlcm5lbF90aHJlYWRfc3RhcnRlcik7CiAJTENTX0RCRl9URVhUKDUsIHRyYWNlLCAia3JudGhyZCIpOwogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19yZWNvdmVyeSwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWt0aHJlYWRfcnVuKGxjc19yZWNvdmVyeSwgY2FyZCwgImxjc19yZWNvdmVyIik7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLAotCQkJCSh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCQlrdGhyZWFkX3J1bihsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLCBjYXJkLCAicmVnaXBtIik7CiAjZW5kaWYKIH0KIApAQCAtMjEwMSw2ICsyMTAwLDIwIEBACiAvKioKICAqIGxjc19uZXdfZGV2aWNlIHdpbGwgYmUgY2FsbGVkIGJ5IHNldHRpbmcgdGhlIGdyb3VwIGRldmljZSBvbmxpbmUuCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGNzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxjc19vcGVuX2RldmljZSwKKwkubmRvX3N0b3AJCT0gbGNzX3N0b3BfZGV2aWNlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGxjc19nZXRzdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGNzX3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxjc19tY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsY3Nfb3Blbl9kZXZpY2UsCisJLm5kb19zdG9wCQk9IGxjc19zdG9wX2RldmljZSwKKwkubmRvX2dldF9zdGF0cwkJPSBsY3NfZ2V0c3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGxjc19zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGNzX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CiAKIHN0YXRpYyBpbnQKIGxjc19uZXdfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYpCkBAIC0yMTY4LDE0ICsyMTgxLDExIEBACiAJCWdvdG8gb3V0OwogCWNhcmQtPmRldiA9IGRldjsKIAljYXJkLT5kZXYtPm1sX3ByaXYgPSBjYXJkOwotCWNhcmQtPmRldi0+b3BlbiA9IGxjc19vcGVuX2RldmljZTsKLQljYXJkLT5kZXYtPnN0b3AgPSBsY3Nfc3RvcF9kZXZpY2U7Ci0JY2FyZC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsY3Nfc3RhcnRfeG1pdDsKLQljYXJkLT5kZXYtPmdldF9zdGF0cyA9IGxjc19nZXRzdGF0czsKKwljYXJkLT5kZXYtPm5ldGRldl9vcHMgPSAmbGNzX25ldGRldl9vcHM7CiAJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNhcmQtPm1hYywgTENTX01BQ19MRU5HVEgpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAoIWxjc19jaGVja19tdWx0aWNhc3Rfc3VwcG9ydChjYXJkKSkKLQkJY2FyZC0+ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsY3Nfc2V0X211bHRpY2FzdF9saXN0OworCQljYXJkLT5kZXYtPm5ldGRldl9vcHMgPSAmbGNzX21jX25ldGRldl9vcHM7CiAjZW5kaWYKIG5ldGRldl9vdXQ6CiAJbGNzX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwweGZmZmZmZmZmKTsKQEAgLTIyNTgsNyArMjI2OCw2IEBACiAgICAgICAgIGludCByYzsKIAogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIHB0cjsKLQlkYWVtb25pemUoImxjc19yZWNvdmVyIik7CiAKIAlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJyZWNvdmVyMSIpOwogCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1JFQ09WRVJZX1RIUkVBRCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDkzMGUyZmMuLmJlNzE2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC0xMzEyLDcgKzEzMTIsNyBAQAogCiAJaWYgKG5ldGl1Y3ZfdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkgewogCQlJVUNWX0RCRl9URVhUKGRhdGEsIDIsICJFQlVTWSBmcm9tIG5ldGl1Y3ZfdHhcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJjID0gbmV0aXVjdl90cmFuc21pdF9za2IocHJpdnB0ci0+Y29ubiwgc2tiKSAhPSAwOwpAQCAtMTg3NiwyMCArMTg3NiwyNCBAQAogLyoqCiAgKiBJbml0aWFsaXplIGEgbmV0IGRldmljZS4gKENhbGxlZCBmcm9tIGtlcm5lbCBpbiBhbGxvY19uZXRkZXYoKSkKICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRpdWN2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5ldGl1Y3Zfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0aXVjdl9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXRpdWN2X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRpdWN2X3R4LAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBuZXRpdWN2X2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCBuZXRpdWN2X3NldHVwX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bXR1CSAgICAgICAgID0gTkVUSVVDVl9NVFVfREVGQVVMVDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICAgPSBuZXRpdWN2X3R4OwotCWRldi0+b3BlbgkgICAgICAgICA9IG5ldGl1Y3Zfb3BlbjsKLQlkZXYtPnN0b3AJICAgICAgICAgPSBuZXRpdWN2X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzCSAgICAgICAgID0gbmV0aXVjdl9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgICAgICAgICAgPSBuZXRpdWN2X2NoYW5nZV9tdHU7CiAJZGV2LT5kZXN0cnVjdG9yICAgICAgICAgID0gbmV0aXVjdl9mcmVlX25ldGRldmljZTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiAgICAgPSBORVRJVUNWX0hEUkxFTjsKIAlkZXYtPmFkZHJfbGVuICAgICAgICAgICAgPSAwOwogCWRldi0+dHlwZSAgICAgICAgICAgICAgICA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuICAgICAgICA9IE5FVElVQ1ZfUVVFVUVMRU5fREVGQVVMVDsKIAlkZXYtPmZsYWdzCSAgICAgICAgID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworCWRldi0+bmV0ZGV2X29wcwkJID0gJm5ldGl1Y3ZfbmV0ZGV2X29wczsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCBlMGM0NTU3Li40NDdlMWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogCXVuc2lnbmVkIGludCBzZ19za2JzX3J4OwogCXVuc2lnbmVkIGludCBzZ19mcmFnc19yeDsKIAl1bnNpZ25lZCBpbnQgc2dfYWxsb2NfcGFnZV9yeDsKKwl1bnNpZ25lZCBpbnQgdHhfY3N1bTsKIH07CiAKIC8qIFJvdXRpbmcgc3R1ZmYgKi8KQEAgLTQwMyw3ICs0MDQsNiBAQAogLyogcG9zc2libGUgdHlwZXMgb2YgcWV0aCBsYXJnZV9zZW5kIHN1cHBvcnQgKi8KIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHsKIAlRRVRIX0xBUkdFX1NFTkRfTk8sCi0JUUVUSF9MQVJHRV9TRU5EX0VERFAsCiAJUUVUSF9MQVJHRV9TRU5EX1RTTywKIH07CiAKQEAgLTgzOCwxMSArODM4LDkgQEAKIGludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICosIGludCwgaW50KTsKIGludCBxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICosIHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50LAotCQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCwgaW50KTsKKwkJCXN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQsIGludCwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkgICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCSAgICBpbnQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKKwkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQpOwogaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCXN0cnVjdCBldGh0b29sX3N0YXRzICosIHU2NCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCBkMWI1YmViLi5jODI3ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC0yNiw3ICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJxZXRoX2NvcmUuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgogCiBzdHJ1Y3QgcWV0aF9kYmZfaW5mbyBxZXRoX2RiZltRRVRIX0RCRl9JTkZPU10gPSB7CiAJLyogZGVmaW5lIGRiZiAtIE5hbWUsIFBhZ2VzLCBBcmVhcywgTWF4bGVuLCBMZXZlbCwgVmlldywgSGFuZGxlICovCkBAIC0yODUsMTcgKzI4Myw2IEBACiAJCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKIAljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwogCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKLQkJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJTkVUSUZfRl9IV19DU1VNOwotCQl9IGVsc2UgewotCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCQlORVRJRl9GX0hXX0NTVU0pOwotCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJfQotCQlicmVhazsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CiAJCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfVFNPKSkgewogCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfApAQCAtOTU2LDcgKzk0Myw2IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKIAl9Ci0JcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKGJ1Zik7CiAJZm9yIChpID0gMDsgaSA8IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCk7ICsraSkgewogCQlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciAmJiBidWYtPmlzX2hlYWRlcltpXSkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLApAQCAtMTY5MCw3ICsxNjc2LDcgQEAKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHkgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGV2ZW50X3RpbWVvdXQ7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInNlbmRjdGwiKTsKQEAgLTE3MTUsOSArMTcwMSwxMCBAQAogCXFldGhfcHJlcGFyZV9jb250cm9sX2RhdGEoY2FyZCwgbGVuLCBpb2IpOwogCiAJaWYgKElTX0lQQShpb2ItPmRhdGEpKQotCQl0aW1lb3V0ID0gamlmZmllcyArIFFFVEhfSVBBX1RJTUVPVVQ7CisJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX0lQQV9USU1FT1VUOwogCWVsc2UKLQkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX1RJTUVPVVQ7CisJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX1RJTUVPVVQ7CisJdGltZW91dCA9IGppZmZpZXMgKyBldmVudF90aW1lb3V0OwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5vaXJxcG5kIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKQEAgLTE3NDUsNyArMTczMiw3IEBACiAJaWYgKChjbWQtPmhkci5jb21tYW5kID09IElQQV9DTURfU0VUSVApICYmCiAJICAgIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjQpKSB7CiAJCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHJlcGx5LT53YWl0X3EsCi0JCSAgICBhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSwgdGltZW91dCkpCisJCSAgICBhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSwgZXZlbnRfdGltZW91dCkpCiAJCQlnb3RvIHRpbWVfZXJyOwogCX0gZWxzZSB7CiAJCXdoaWxlICghYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCkpIHsKQEAgLTI2OTMsNDAgKzI2ODAsMjEgQEAKIAkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGludCBxZGlvX2VycikKIHsKIAlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmY7Ci0JaW50IGNjID0gcWRpb19lcnIgJiAzOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImhkc25kZXJyIik7CiAJcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwgcWRpb19lcnIsICJxb3V0ZXJyIik7Ci0Jc3dpdGNoIChjYykgewotCWNhc2UgMDoKLQkJaWYgKHFkaW9fZXJyKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOwotCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0eCAlMDJ4IiwKLQkJCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOwotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JCX0KKworCWlmICghcWRpb19lcnIpCiAJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTk9ORTsKLQljYXNlIDI6Ci0JCWlmIChxZGlvX2VyciAmIFFESU9fRVJST1JfU0lHQV9CVVNZKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMkIiKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7Ci0JCX0KLQkJaWYgKChzYmFsZjE1ID49IDE1KSAmJiAoc2JhbGYxNSA8PSAzMSkpCi0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX1JFVFJZOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKLQkJLyogbG9vayBhdCBxZGlvX2Vycm9yIGFuZCBzYmFsZiAxNSAqLwotCWNhc2UgMToKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzEiKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JY2FzZSAzOgotCWRlZmF1bHQ6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MzIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfS0lDS19JVDsKLQl9CisKKwlpZiAoKHNiYWxmMTUgPj0gMTUpICYmIChzYmFsZjE1IDw9IDMxKSkKKwkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9SRVRSWTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJsbmtmYWlsIik7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiUwNHggJTAyeCIsCisJCSAgICAgICAodTE2KXFkaW9fZXJyLCAodTgpc2JhbGYxNSk7CisJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7CiB9CiAKIC8qCkBAIC0yODYyLDEwICsyODMwLDE0IEBACiAJCQlxZXRoX2dldF9taWNyb3MoKSAtCiAJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CiAJaWYgKHJjKSB7CisJCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisJCS8qIGlnbm9yZSB0ZW1wb3JhcnkgU0lHQSBlcnJvcnMgd2l0aG91dCBidXN5IGNvbmRpdGlvbiAqLworCQlpZiAocmMgPT0gUURJT19FUlJPUl9TSUdBX1RBUkdFVCkKKwkJCXJldHVybjsKIAkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZsdXNoYnVmIik7CiAJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiIGVyciVkIiwgcmMpOwogCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiVzIiwgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7Ci0JCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisKIAkJLyogdGhpcyBtdXN0IG5vdCBoYXBwZW4gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIGlmIGl0CiAJCSAqIGhhcHBlbnMgc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZyAtPiByZWNvdmVyICovCiAJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkocXVldWUtPmNhcmQpOwpAQCAtMjk0MCwxMyArMjkxMiw3IEBACiAJfQogCWZvciAoaSA9IGZpcnN0X2VsZW1lbnQ7IGkgPCAoZmlyc3RfZWxlbWVudCArIGNvdW50KTsgKytpKSB7CiAJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JCS8qd2Ugb25seSBoYW5kbGUgdGhlIEtJQ0tfSVQgZXJyb3IgYnkgZG9pbmcgYSByZWNvdmVyeSAqLwotCQlpZiAocWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpCi0JCQkJPT0gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQpewotCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwotCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKLQkJCXJldHVybjsKLQkJfQorCQlxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKGNhcmQsIGJ1ZmZlciwgcWRpb19lcnJvcik7CiAJCXFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihxdWV1ZSwgYnVmZmVyKTsKIAl9CiAJYXRvbWljX3N1Yihjb3VudCwgJnF1ZXVlLT51c2VkX2J1ZmZlcnMpOwpAQCAtMzE4NywxMSArMzE1Myw5IEBACiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlzdHJ1Y3QgcWV0aF9oZHIgKmhkciwgaW50IGVsZW1lbnRzX25lZWRlZCwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIGludCBvZmZzZXQsIGludCBoZF9sZW4pCisJCWludCBvZmZzZXQsIGludCBoZF9sZW4pCiB7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7Ci0JaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKLQlpbnQgZmx1c2hfY250ID0gMDsKIAlpbnQgaW5kZXg7CiAKIAkvKiBzcGluIHVudGlsIHdlIGdldCB0aGUgcXVldWUgLi4uICovCkBAIC0zMjA2LDI3ICszMTcwLDExIEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKQogCQlnb3RvIG91dDsKLQlpZiAoY3R4ID09IE5VTEwpCi0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQorCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQogCQkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JZWxzZSB7Ci0JCWJ1ZmZlcnNfbmVlZGVkID0gcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQocXVldWUsCi0JCQkJCQkJCQljdHgpOwotCQlpZiAoYnVmZmVyc19uZWVkZWQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIGJ1ZmZlcnNfbmVlZGVkKSAlCi0JCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCWlmIChjdHggPT0gTlVMTCkgewotCQlxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCBvZmZzZXQsIGhkX2xlbik7Ci0JCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOwotCX0gZWxzZSB7Ci0JCWZsdXNoX2NudCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LCBpbmRleCk7Ci0JCVdBUk5fT04oYnVmZmVyc19uZWVkZWQgIT0gZmx1c2hfY250KTsKLQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBpbmRleCwgZmx1c2hfY250KTsKLQl9CisJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgb2Zmc2V0LCBoZF9sZW4pOworCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOwogCXJldHVybiAwOwogb3V0OgogCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CkBAIC0zMjM2LDcgKzMxODQsNyBAQAogCiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpoZHIsCi0JCWludCBlbGVtZW50c19uZWVkZWQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQorCQlpbnQgZWxlbWVudHNfbmVlZGVkKQogewogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwogCWludCBzdGFydF9pbmRleDsKQEAgLTMyNjIsNTMgKzMyMTAsMzIgQEAKIAlxZXRoX3N3aXRjaF90b19wYWNraW5nX2lmX25lZWRlZChxdWV1ZSk7CiAJaWYgKHF1ZXVlLT5kb19wYWNrKSB7CiAJCWRvX3BhY2sgPSAxOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KLQkJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KLQkJCSAgICBidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsKSA8IGVsZW1lbnRzX25lZWRlZCkgewotCQkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCi0JCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwKLQkJCQkJUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJCWZsdXNoX2NvdW50Kys7Ci0JCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQotCQkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCi0JCQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKLQkJCQkvKiB3ZSBkaWQgYSBzdGVwIGZvcndhcmQsIHNvIGNoZWNrIGJ1ZmZlciBzdGF0ZQotCQkJCSAqIGFnYWluICovCi0JCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQotCQkJCQkJUUVUSF9RRElPX0JVRl9FTVBUWSl7Ci0JCQkJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgc3RhcnRfaW5kZXgsCisJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KKwkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkgLQorCQkgICAgYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkgPCBlbGVtZW50c19uZWVkZWQpIHsKKwkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCisJCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7CisJCQlmbHVzaF9jb3VudCsrOworCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQorCQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKKwkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkJCS8qIHdlIGRpZCBhIHN0ZXAgZm9yd2FyZCwgc28gY2hlY2sgYnVmZmVyIHN0YXRlCisJCQkgKiBhZ2FpbiAqLworCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQorCQkJICAgIFFFVEhfUURJT19CVUZfRU1QVFkpIHsKKwkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIHN0YXJ0X2luZGV4LAogCQkJCQkJCSAgIGZsdXNoX2NvdW50KTsKLQkJCQkJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLAorCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwKIAkJCQkJCVFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIGVsZW1lbnRzIChpbmNsdWRpbmcgZm9sbG93aW5nCi0JCQkgKiBmcmVlIGJ1ZmZlcnMpIHRvIGhhbmRsZSBlZGRwIGNvbnRleHQgKi8KLQkJCWlmIChxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChxdWV1ZSwgY3R4KQotCQkJCTwgMCkgewotCQkJCXJjID0gLUVCVVNZOwotCQkJCWdvdG8gb3V0OworCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0KIAl9Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCAtMSwgMCk7Ci0JZWxzZSB7Ci0JCXRtcCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LAotCQkJCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwpOwotCQlpZiAodG1wIDwgMCkgewotCQkJcmMgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KKwl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCAtMSwgMCk7CiAJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyB0bXApICUKIAkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJZmx1c2hfY291bnQgKz0gdG1wOwotb3V0OgogCWlmIChmbHVzaF9jb3VudCkKIAkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOwogCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQpAQCAtNDMyNyw2ICs0MjU0LDcgQEAKIC8qIDMwICoveyJ0eCBjb3VudCJ9LAogCXsidHggZG9fUURJTyB0aW1lIn0sCiAJeyJ0eCBkb19RRElPIGNvdW50In0sCisJeyJ0eCBjc3VtIn0sCiB9OwogCiBpbnQgcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDM3OCw2ICs0MzA2LDcgQEAKIAlkYXRhWzMwXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfY250OwogCWRhdGFbMzFdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWU7CiAJZGF0YVszMl0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250OworCWRhdGFbMzNdID0gY2FyZC0+cGVyZl9zdGF0cy50eF9jc3VtOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCmluZGV4IDQwODAxMjYuLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKQEAgLTEsNjk5ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3Ci0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCi0gKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KLQotI2luY2x1ZGUgInFldGhfY29yZS5oIgotI2luY2x1ZGUgInFldGhfY29yZV9tcGMuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgotCi1pbnQgcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWludCBpbmRleCA9IHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsOwotCWludCBlbGVtZW50c19uZWVkZWQgPSBjdHgtPm51bV9lbGVtZW50czsKLQlpbnQgZWxlbWVudHNfaW5fYnVmZmVyOwotCWludCBza2JzX2luX2J1ZmZlcjsKLQlpbnQgYnVmZmVyc19uZWVkZWQgPSAwOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjYmZjIik7Ci0Jd2hpbGUgKGVsZW1lbnRzX25lZWRlZCA+IDApIHsKLQkJYnVmZmVyc19uZWVkZWQrKzsKLQkJaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+YnVmc1tpbmRleF0uc3RhdGUpICE9Ci0JCQkJUUVUSF9RRElPX0JVRl9FTVBUWSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJZWxlbWVudHNfaW5fYnVmZmVyID0gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCi0JCQkJICAgICBxdWV1ZS0+YnVmc1tpbmRleF0ubmV4dF9lbGVtZW50X3RvX2ZpbGw7Ci0JCXNrYnNfaW5fYnVmZmVyID0gZWxlbWVudHNfaW5fYnVmZmVyIC8gY3R4LT5lbGVtZW50c19wZXJfc2tiOwotCQllbGVtZW50c19uZWVkZWQgLT0gc2tic19pbl9idWZmZXIgKiBjdHgtPmVsZW1lbnRzX3Blcl9za2I7Ci0JCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KLQlyZXR1cm4gYnVmZmVyc19uZWVkZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9mcmVlX2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZjdHgiKTsKLQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fcGFnZXM7ICsraSkKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+cGFnZXNbaV0pOwotCWtmcmVlKGN0eC0+cGFnZXMpOwotCWtmcmVlKGN0eC0+ZWxlbWVudHMpOwotCWtmcmVlKGN0eCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2dldF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWF0b21pY19pbmMoJmN0eC0+cmVmY250KTsKLX0KLQotdm9pZCBxZXRoX2VkZHBfcHV0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjdHgtPnJlZmNudCkgPT0gMCkKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9lZGRwX3B1dF9jb250ZXh0KTsKLQotdm9pZCBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImVkZHByY3R4Iik7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZidWYtPmN0eF9saXN0KSkgewotCQlyZWYgPSBsaXN0X2VudHJ5KGJ1Zi0+Y3R4X2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSwgbGlzdCk7Ci0JCXFldGhfZWRkcF9wdXRfY29udGV4dChyZWYtPmN0eCk7Ci0JCWxpc3RfZGVsKCZyZWYtPmxpc3QpOwotCQlrZnJlZShyZWYpOwotCX0KLX0KLQotc3RhdGljIGludCBxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlICpyZWY7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZWRkcHJmY3giKTsKLQlyZWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlZiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlxZXRoX2VkZHBfZ2V0X2NvbnRleHQoY3R4KTsKLQlyZWYtPmN0eCA9IGN0eDsKLQlsaXN0X2FkZF90YWlsKCZyZWYtPmxpc3QsICZidWYtPmN0eF9saXN0KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHFldGhfZWRkcF9maWxsX2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXI7Ci0JaW50IGVsZW1lbnRzID0gY3R4LT5udW1fZWxlbWVudHM7Ci0JaW50IGVsZW1lbnQgPSAwOwotCWludCBmbHVzaF9jbnQgPSAwOwotCWludCBtdXN0X3JlZmNudCA9IDE7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZpYnUiKTsKLQl3aGlsZSAoZWxlbWVudHMgPiAwKSB7Ci0JCWJ1ZiA9ICZxdWV1ZS0+YnVmc1tpbmRleF07Ci0JCWlmIChhdG9taWNfcmVhZCgmYnVmLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgewotCQkJLyogbm9ybWFsbHkgdGhpcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSB3ZSBjaGVja2VkIGZvcgotCQkJICogYXZhaWxhYmxlIGVsZW1lbnRzIGluIHFldGhfY2hlY2tfZWxlbWVudHNfZm9yX2NvbnRleHQKLQkJCSAqLwotCQkJaWYgKGVsZW1lbnQgPT0gMCkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJZWxzZSB7Ci0JCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGQgb25seSBwYXJ0aWFsbHkgZmlsbCIKLQkJCQkJImVkZHAgYnVmZmVyIVxuIik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQkJLyogY2hlY2sgaWYgdGhlIHdob2xlIG5leHQgc2tiIGZpdHMgaW50byBjdXJyZW50IGJ1ZmZlciAqLwotCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQotCQkJCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKQotCQkJCTwgY3R4LT5lbGVtZW50c19wZXJfc2tiKXsKLQkJCS8qIG5vIC0+IGdvIHRvIG5leHQgYnVmZmVyICovCi0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlpbmRleCA9IChpbmRleCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJCWZsdXNoX2NudCsrOwotCQkJLyogbmV3IGJ1ZmZlciwgc28gd2UgaGF2ZSB0byBhZGQgY3R4IHRvIGJ1ZmZlcidjdHhfbGlzdAotCQkJICogYW5kIGluY3JlbWVudCBjdHgncyByZWZjbnQgKi8KLQkJCW11c3RfcmVmY250ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChtdXN0X3JlZmNudCkgewotCQkJbXVzdF9yZWZjbnQgPSAwOwotCQkJaWYgKHFldGhfZWRkcF9idWZfcmVmX2NvbnRleHQoYnVmLCBjdHgpKSB7Ci0JCQkJZ290byBvdXRfY2hlY2s7Ci0JCQl9Ci0JCX0KLQkJYnVmZmVyID0gYnVmLT5idWZmZXI7Ci0JCS8qIGZpbGwgb25lIHNrYiBpbnRvIGJ1ZmZlciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5lbGVtZW50c19wZXJfc2tiOyArK2kpIHsKLQkJCWlmIChjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aCAhPSAwKSB7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWFkZHIgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmFkZHI7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWxlbmd0aCA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0ubGVuZ3RoOwotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlmbGFncyA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0uZmxhZ3M7Ci0JCQkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwotCQkJfQotCQkJZWxlbWVudCsrOwotCQkJZWxlbWVudHMtLTsKLQkJfQotCX0KLW91dF9jaGVjazoKLQlpZiAoIXF1ZXVlLT5kb19wYWNrKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZucCIpOwotCQkvKiBzZXQgc3RhdGUgdG8gUFJJTUVEIC0+IHdpbGwgYmUgZmx1c2hlZCAqLwotCQlpZiAoYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+IDApIHsKLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWZsdXNoX2NudCsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImZpbGxiZnBhIik7Ci0JCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID49Ci0JCQkJUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSkgewotCQkJLyoKLQkJCSAqIHBhY2tlZCBidWZmZXIgaWYgZnVsbCAtPiBzZXQgc3RhdGUgUFJJTUVECi0JCQkgKiAtPiB3aWxsIGJlIGZsdXNoZWQKLQkJCSAqLwotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJZmx1c2hfY250Kys7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIGZsdXNoX2NudDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwgaW50IGRhdGFfbGVuKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0JaW50IHBrdF9sZW47Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjcnNoIik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXBrdF9sZW4gPSBlZGRwLT5uaGwgKyBlZGRwLT50aGwgKyBkYXRhX2xlbjsKLQkvKiBGSVhNRTogbGF5ZXIyIGFuZCBWTEFOICEhISAqLwotCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpCi0JCXBrdF9sZW4gKz0gRVRIX0hMRU47Ci0JaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQlwa3RfbGVuICs9IFZMQU5fSExFTjsKLQkvKiBkb2VzIGNvbXBsZXRlIHBhY2tldCBmaXQgaW4gY3VycmVudCBwYWdlID8gKi8KLQlwYWdlX3JlbWFpbmRlciA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwotCWlmIChwYWdlX3JlbWFpbmRlciA8IChzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHBrdF9sZW4pKSB7Ci0JCS8qIG5vIC0+IGdvIHRvIHN0YXJ0IG9mIG5leHQgcGFnZSAqLwotCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JCXBhZ2Vfb2Zmc2V0ID0gMDsKLQl9Ci0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPnFoLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQllbGVtZW50LT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQljdHgtPm9mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQlwYWdlX29mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQkvKiBhZGQgbWFjIGhlYWRlciAoPykgKi8KLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5tYWMsIEVUSF9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IEVUSF9ITEVOOwotCQljdHgtPm9mZnNldCArPSBFVEhfSExFTjsKLQkJcGFnZV9vZmZzZXQgKz0gRVRIX0hMRU47Ci0JfQotCS8qIGFkZCBWTEFOIHRhZyAqLwotCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgewotCQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+dmxhbiwgVkxBTl9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IFZMQU5fSExFTjsKLQkJY3R4LT5vZmZzZXQgKz0gVkxBTl9ITEVOOwotCQlwYWdlX29mZnNldCArPSBWTEFOX0hMRU47Ci0JfQotCS8qIGFkZCBuZXR3b3JrIGhlYWRlciAqLwotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICh1OCAqKSZlZGRwLT5uaCwgZWRkcC0+bmhsKTsKLQllbGVtZW50LT5sZW5ndGggKz0gZWRkcC0+bmhsOwotCWVkZHAtPm5oX2luX2N0eCA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQljdHgtPm9mZnNldCArPSBlZGRwLT5uaGw7Ci0JcGFnZV9vZmZzZXQgKz0gZWRkcC0+bmhsOwotCS8qIGFkZCB0cmFuc3BvcnQgaGVhZGVyICovCi0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgKHU4ICopJmVkZHAtPnRoLCBlZGRwLT50aGwpOwotCWVsZW1lbnQtPmxlbmd0aCArPSBlZGRwLT50aGw7Ci0JZWRkcC0+dGhfaW5fY3R4ID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCWN0eC0+b2Zmc2V0ICs9IGVkZHAtPnRobDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AoY2hhciAqZHN0LCBzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsCi0JCWludCBsZW4sIF9fd3N1bSAqaGNzdW0pCi17Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKLQlpbnQgbGVmdF9pbl9mcmFnOwotCWludCBjb3B5X2xlbjsKLQl1OCAqc3JjOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjZHRjIik7Ci0JaWYgKHNrYl9zaGluZm8oZWRkcC0+c2tiKS0+bnJfZnJhZ3MgPT0gMCkgewotCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChlZGRwLT5za2IsIGVkZHAtPnNrYl9vZmZzZXQsCi0JCQkJCQkgZHN0LCBsZW4pOwotCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldCwgbGVuLAotCQkJCSAgICAgICpoY3N1bSk7Ci0JCWVkZHAtPnNrYl9vZmZzZXQgKz0gbGVuOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChsZW4gPiAwKSB7Ci0JCQlpZiAoZWRkcC0+ZnJhZyA8IDApIHsKLQkJCQkvKiB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KLQkJCQlsZWZ0X2luX2ZyYWcgPSAoZWRkcC0+c2tiLT5sZW4gLQotCQkJCQkJZWRkcC0+c2tiLT5kYXRhX2xlbikKLQkJCQkJCS0gZWRkcC0+c2tiX29mZnNldDsKLQkJCQlzcmMgPSBlZGRwLT5za2ItPmRhdGEgKyBlZGRwLT5za2Jfb2Zmc2V0OwotCQkJfSBlbHNlIHsKLQkJCQlmcmFnID0gJnNrYl9zaGluZm8oZWRkcC0+c2tiKS0+ZnJhZ3NbCi0JCQkJCWVkZHAtPmZyYWddOwotCQkJCWxlZnRfaW5fZnJhZyA9IGZyYWctPnNpemUgLSBlZGRwLT5mcmFnX29mZnNldDsKLQkJCQlzcmMgPSAodTggKikoKHBhZ2VfdG9fcGZuKGZyYWctPnBhZ2UpIDw8Ci0JCQkJCVBBR0VfU0hJRlQpICsgZnJhZy0+cGFnZV9vZmZzZXQgKwotCQkJCQllZGRwLT5mcmFnX29mZnNldCk7Ci0JCQl9Ci0JCQlpZiAobGVmdF9pbl9mcmFnIDw9IDApIHsKLQkJCQllZGRwLT5mcmFnKys7Ci0JCQkJZWRkcC0+ZnJhZ19vZmZzZXQgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY29weV9sZW4gPSBtaW4obGVmdF9pbl9mcmFnLCBsZW4pOwotCQkJbWVtY3B5KGRzdCwgc3JjLCBjb3B5X2xlbik7Ci0JCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBjb3B5X2xlbiwgKmhjc3VtKTsKLQkJCWRzdCArPSBjb3B5X2xlbjsKLQkJCWVkZHAtPmZyYWdfb2Zmc2V0ICs9IGNvcHlfbGVuOwotCQkJZWRkcC0+c2tiX29mZnNldCArPSBjb3B5X2xlbjsKLQkJCWxlbiAtPSBjb3B5X2xlbjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2RhdGFfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbiwgX193c3VtIGhjc3VtKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCWludCBmaXJzdF9sYXAgPSAxOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjc2R0Iik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXdoaWxlIChkYXRhX2xlbikgewotCQlwYWdlX3JlbWFpbmRlciA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwotCQlpZiAocGFnZV9yZW1haW5kZXIgPCBkYXRhX2xlbikgewotCQkJcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AocGFnZSArIHBhZ2Vfb2Zmc2V0LCBlZGRwLAotCQkJCQkJcGFnZV9yZW1haW5kZXIsICZoY3N1bSk7Ci0JCQllbGVtZW50LT5sZW5ndGggKz0gcGFnZV9yZW1haW5kZXI7Ci0JCQlpZiAoZmlyc3RfbGFwKQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19GSVJTVF9GUkFHOwotCQkJZWxzZQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19NSURETEVfRlJBRzsKLQkJCWN0eC0+bnVtX2VsZW1lbnRzKys7Ci0JCQllbGVtZW50Kys7Ci0JCQlkYXRhX2xlbiAtPSBwYWdlX3JlbWFpbmRlcjsKLQkJCWN0eC0+b2Zmc2V0ICs9IHBhZ2VfcmVtYWluZGVyOwotCQkJcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JCQlwYWdlX29mZnNldCA9IDA7Ci0JCQllbGVtZW50LT5hZGRyID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCQl9IGVsc2UgewotCQkJcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AocGFnZSArIHBhZ2Vfb2Zmc2V0LCBlZGRwLAotCQkJCQkJZGF0YV9sZW4sICZoY3N1bSk7Ci0JCQllbGVtZW50LT5sZW5ndGggKz0gZGF0YV9sZW47Ci0JCQlpZiAoIWZpcnN0X2xhcCkKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9GUkFHOwotCQkJY3R4LT5udW1fZWxlbWVudHMrKzsKLQkJCWN0eC0+b2Zmc2V0ICs9IGRhdGFfbGVuOwotCQkJZGF0YV9sZW4gPSAwOwotCQl9Ci0JCWZpcnN0X2xhcCA9IDA7Ci0JfQotCSgoc3RydWN0IHRjcGhkciAqKWVkZHAtPnRoX2luX2N0eCktPmNoZWNrID0gY3N1bV9mb2xkKGhjc3VtKTsKLX0KLQotc3RhdGljIF9fd3N1bSBxZXRoX2VkZHBfY2hlY2tfdGNwNF9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgZGF0YV9sZW4pCi17Ci0JX193c3VtIHBoY3N1bTsgLyogcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBja3Q0Iik7Ci0JZWRkcC0+dGgudGNwLmguY2hlY2sgPSAwOwotCS8qIGNvbXB1dGUgcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCXBoY3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChlZGRwLT5uaC5pcDQuaC5zYWRkciwgZWRkcC0+bmguaXA0LmguZGFkZHIsCi0JCQkJICAgIGVkZHAtPnRobCArIGRhdGFfbGVuLCBJUFBST1RPX1RDUCwgMCk7Ci0JLyogY29tcHV0ZSBjaGVja3N1bSBvZiB0Y3AgaGVhZGVyICovCi0JcmV0dXJuIGNzdW1fcGFydGlhbCgmZWRkcC0+dGgsIGVkZHAtPnRobCwgcGhjc3VtKTsKLX0KLQotc3RhdGljIF9fd3N1bSBxZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgZGF0YV9sZW4pCi17Ci0JX19iZTMyIHByb3RvOwotCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2t0NiIpOwotCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKLQkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJmVkZHAtPm5oLmlwNi5oLnNhZGRyLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIDApOwotCXBoY3N1bSA9IGNzdW1fcGFydGlhbCgmZWRkcC0+bmguaXA2LmguZGFkZHIsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgcGhjc3VtKTsKLQlwcm90byA9IGh0b25sKElQUFJPVE9fVENQKTsKLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJnByb3RvLCBzaXplb2YodTMyKSwgcGhjc3VtKTsKLQlyZXR1cm4gcGhjc3VtOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9kYXRhICpxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShzdHJ1Y3QgcWV0aF9oZHIgKnFoLAotCQl1OCAqbmgsIHU4IG5obCwgdTggKnRoLCB1OCB0aGwpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjcmRhIik7Ci0JZWRkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSksIEdGUF9BVE9NSUMpOwotCWlmIChlZGRwKSB7Ci0JCWVkZHAtPm5obCA9IG5obDsKLQkJZWRkcC0+dGhsID0gdGhsOwotCQltZW1jcHkoJmVkZHAtPnFoLCBxaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCQltZW1jcHkoJmVkZHAtPm5oLCBuaCwgbmhsKTsKLQkJbWVtY3B5KCZlZGRwLT50aCwgdGgsIHRobCk7Ci0JCWVkZHAtPmZyYWcgPSAtMTsgLyogaW5pdGlhbGx5IHdlJ3JlIGluIHNrYi0+ZGF0YSAqLwotCX0KLQlyZXR1cm4gZWRkcDsKLX0KLQotc3RhdGljIHZvaWQgX19xZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwKQotewotCXN0cnVjdCB0Y3BoZHIgKnRjcGg7Ci0JaW50IGRhdGFfbGVuOwotCV9fd3N1bSBoY3N1bTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwZnRjcCIpOwotCWVkZHAtPnNrYl9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIGVkZHAtPm5obCArIGVkZHAtPnRobDsKLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCWVkZHAtPnNrYl9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpOwotCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCQllZGRwLT5za2Jfb2Zmc2V0ICs9IFZMQU5fSExFTjsKLQl9Ci0JdGNwaCA9IHRjcF9oZHIoZWRkcC0+c2tiKTsKLQl3aGlsZSAoZWRkcC0+c2tiX29mZnNldCA8IGVkZHAtPnNrYi0+bGVuKSB7Ci0JCWRhdGFfbGVuID0gbWluKChpbnQpc2tiX3NoaW5mbyhlZGRwLT5za2IpLT5nc29fc2l6ZSwKLQkJCSAgICAgICAoaW50KShlZGRwLT5za2ItPmxlbiAtIGVkZHAtPnNrYl9vZmZzZXQpKTsKLQkJLyogcHJlcGFyZSBxZGlvIGhkciAqLwotCQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCQllZGRwLT5xaC5oZHIubDIucGt0X2xlbmd0aCA9IGRhdGFfbGVuICsgRVRIX0hMRU4gKwotCQkJCQkJICAgICBlZGRwLT5uaGwgKyBlZGRwLT50aGw7Ci0JCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggKz0gVkxBTl9ITEVOOwotCQl9IGVsc2UKLQkJCWVkZHAtPnFoLmhkci5sMy5sZW5ndGggPSBkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsOwotCQkvKiBwcmVwYXJlIGlwIGhkciAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJCWVkZHAtPm5oLmlwNC5oLnRvdF9sZW4gPSBodG9ucyhkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsKTsKLQkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0gMDsKLQkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0KLQkJCQlpcF9mYXN0X2NzdW0oKHU4ICopJmVkZHAtPm5oLmlwNC5oLAotCQkJCQkJZWRkcC0+bmguaXA0LmguaWhsKTsKLQkJfSBlbHNlCi0JCQllZGRwLT5uaC5pcDYuaC5wYXlsb2FkX2xlbiA9IGh0b25zKGRhdGFfbGVuICsKLQkJCQkJCQkJZWRkcC0+dGhsKTsKLQkJLyogcHJlcGFyZSB0Y3AgaGRyICovCi0JCWlmIChkYXRhX2xlbiA9PSAoZWRkcC0+c2tiLT5sZW4gLSBlZGRwLT5za2Jfb2Zmc2V0KSkgewotCQkJLyogbGFzdCBzZWdtZW50IC0+IHNldCBGSU4gYW5kIFBTSCBmbGFncyAqLwotCQkJZWRkcC0+dGgudGNwLmguZmluID0gdGNwaC0+ZmluOwotCQkJZWRkcC0+dGgudGNwLmgucHNoID0gdGNwaC0+cHNoOwotCQl9Ci0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDRfaGRyKGVkZHAsIGRhdGFfbGVuKTsKLQkJZWxzZQotCQkJaGNzdW0gPSBxZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoZWRkcCwgZGF0YV9sZW4pOwotCQkvKiBmaWxsIHRoZSBuZXh0IHNlZ21lbnQgaW50byB0aGUgY29udGV4dCAqLwotCQlxZXRoX2VkZHBfY3JlYXRlX3NlZ21lbnRfaGRycyhjdHgsIGVkZHAsIGRhdGFfbGVuKTsKLQkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2RhdGFfdGNwKGN0eCwgZWRkcCwgZGF0YV9sZW4sIGhjc3VtKTsKLQkJaWYgKGVkZHAtPnNrYl9vZmZzZXQgPj0gZWRkcC0+c2tiLT5sZW4pCi0JCQlicmVhazsKLQkJLyogcHJlcGFyZSBoZWFkZXJzIGZvciBuZXh0IHJvdW5kICovCi0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJCWVkZHAtPm5oLmlwNC5oLmlkID0gaHRvbnMobnRvaHMoZWRkcC0+bmguaXA0LmguaWQpICsgMSk7Ci0JCWVkZHAtPnRoLnRjcC5oLnNlcSA9IGh0b25sKG50b2hsKGVkZHAtPnRoLnRjcC5oLnNlcSkgKwotCQkJZGF0YV9sZW4pOwotCX0KLX0KLQotc3RhdGljIGludCBxZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCA9IE5VTEw7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZpY3giKTsKLQkvKiBjcmVhdGUgb3VyIHNlZ21lbnRhdGlvbiBoZWFkZXJzIGFuZCBjb3B5IG9yaWdpbmFsIGhlYWRlcnMgKi8KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCWVkZHAgPSBxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShxaGRyLAotCQkJCQkJICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwKLQkJCQkJCSAgaXBfaGRybGVuKHNrYiksCi0JCQkJCQkgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHRjcF9oZHJsZW4oc2tiKSk7Ci0JZWxzZQotCQllZGRwID0gcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEocWhkciwKLQkJCQkJCSAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCi0JCQkJCQkgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHRjcF9oZHJsZW4oc2tiKSk7Ci0KLQlpZiAoZWRkcCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJlZGRwZmNubSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKHFoZHItPmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JCW1lbWNweSgmZWRkcC0+bWFjLCBldGhfaGRyKHNrYiksIEVUSF9ITEVOKTsKLQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCQllZGRwLT52bGFuWzBdID0gc2tiLT5wcm90b2NvbDsKLQkJCWVkZHAtPnZsYW5bMV0gPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCX0KLQl9Ci0JLyogdGhlIG5leHQgZmxhZ3Mgd2lsbCBvbmx5IGJlIHNldCBvbiB0aGUgbGFzdCBzZWdtZW50ICovCi0JZWRkcC0+dGgudGNwLmguZmluID0gMDsKLQllZGRwLT50aC50Y3AuaC5wc2ggPSAwOwotCWVkZHAtPnNrYiA9IHNrYjsKLQkvKiBiZWdpbiBzZWdtZW50YXRpb24gYW5kIGZpbGwgY29udGV4dCAqLwotCV9fcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3AoY3R4LCBlZGRwKTsKLQlrZnJlZShlZGRwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbikKLXsKLQlpbnQgc2tic19wZXJfcGFnZTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2FucCIpOwotCS8qIGNhbiB3ZSBwdXQgbXVsdGlwbGUgc2ticyBpbiBvbmUgcGFnZT8gKi8KLQlza2JzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuKTsKLQlpZiAoc2tic19wZXJfcGFnZSA+IDEpIHsKLQkJY3R4LT5udW1fcGFnZXMgPSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpIC8KLQkJCQkgc2tic19wZXJfcGFnZSArIDE7Ci0JCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IDE7Ci0JfSBlbHNlIHsKLQkJLyogbm8gLT4gaG93IG1hbnkgZWxlbWVudHMgcGVyIHNrYj8gKi8KLQkJY3R4LT5lbGVtZW50c19wZXJfc2tiID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuICsKLQkJCQkgICAgIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKLQkJY3R4LT5udW1fcGFnZXMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgotCQkJCSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpOwotCX0KLQljdHgtPm51bV9lbGVtZW50cyA9IGN0eC0+ZWxlbWVudHNfcGVyX3NrYiAqCi0JCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoCi0JCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQl1OCAqYWRkcjsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjZyIpOwotCS8qIGNyZWF0ZSB0aGUgY29udGV4dCBhbmQgYWxsb2NhdGUgcGFnZXMgKi8KLQljdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24xIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQlxZXRoX2VkZHBfY2FsY19udW1fcGFnZXMoY3R4LCBza2IsIGhkcl9sZW4pOwotCWlmIChjdHgtPmVsZW1lbnRzX3Blcl9za2IgPiBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY2lzIik7Ci0JCWtmcmVlKGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnBhZ2VzID0ga2NhbGxvYyhjdHgtPm51bV9wYWdlcywgc2l6ZW9mKHU4ICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4LT5wYWdlcyA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMiIpOwotCQlrZnJlZShjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpIHsKLQkJYWRkciA9ICh1OCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKGFkZHIgPT0gTlVMTCkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24zIik7Ci0JCQljdHgtPm51bV9wYWdlcyA9IGk7Ci0JCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQljdHgtPnBhZ2VzW2ldID0gYWRkcjsKLQl9Ci0JY3R4LT5lbGVtZW50cyA9IGtjYWxsb2MoY3R4LT5udW1fZWxlbWVudHMsCi0JCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCksIEdGUF9BVE9NSUMpOwotCWlmIChjdHgtPmVsZW1lbnRzID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY240Iik7Ci0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCS8qIHJlc2V0IG51bV9lbGVtZW50czsgd2lsbCBiZSBpbmNyZW1lbnRlZCBhZ2FpbiBpbiBmaWxsX2J1ZmZlciB0bwotCSAqIHJlZmxlY3QgbnVtYmVyIG9mIGFjdHVhbGx5IHVzZWQgZWxlbWVudHMgKi8KLQljdHgtPm51bV9lbGVtZW50cyA9IDA7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcCgKLQkJc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjdCIpOwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLAotCQkJCQkJKHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsKLQkJCQkJCWlwX2hkcmxlbihza2IpICsKLQkJCQkJCXRjcF9oZHJsZW4oc2tiKSkpOwotCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKLQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArCi0JCQl0Y3BfaGRybGVuKHNrYikpOwotCWVsc2UKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNldGNwaW52Iik7Ci0KLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNyZWRkcG5sIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAocWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3AoY3R4LCBza2IsIHFoZHIpKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcHRmZSIpOwotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlhdG9taWNfc2V0KCZjdHgtPnJlZmNudCwgMSk7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyLAotCQl1bnNpZ25lZCBjaGFyIHNrX3Byb3RvY29sKQotewotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjIik7Ci0Jc3dpdGNoIChza19wcm90b2NvbCkgewotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCXJldHVybiBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfdGNwKGNhcmQsIHNrYiwgcWhkcik7Ci0JZGVmYXVsdDoKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImVkZHBpbnZwIik7Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KTsKLQotdm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIsCi0JCXN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKilxaGRyOwotCXN0cnVjdCB0Y3BoZHIgKnRjcGggPSB0Y3BfaGRyKHNrYik7Ci0Jc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAidHNvZmhkciIpOwotCi0JLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KLQloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKLQkvKnNldCB2YWx1ZXMgd2hpY2ggYXJlIGZpeCBmb3IgdGhlIGZpcnN0IGFwcHJvYWNoIC4uLiovCi0JaGRyLT5leHQuaGRyX3RvdF9sZW4gPSAoX191MTYpIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfZXh0X3Rzbyk7Ci0JaGRyLT5leHQuaW1iX2hkcl9ubyAgPSAxOwotCWhkci0+ZXh0Lmhkcl90eXBlICAgID0gMTsKLQloZHItPmV4dC5oZHJfdmVyc2lvbiA9IDE7Ci0JaGRyLT5leHQuaGRyX2xlbiAgICAgPSAyODsKLQkvKmluc2VydCBub24tZml4IHZhbHVlcyAqLwotCWhkci0+ZXh0Lm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7Ci0JaGRyLT5leHQuZGdfaGRyX2xlbiA9IChfX3UxNikoaXBoLT5paGwqNCArIHRjcGgtPmRvZmYqNCk7Ci0JaGRyLT5leHQucGF5bG9hZF9sZW4gPSAoX191MTYpKHNrYi0+bGVuIC0gaGRyLT5leHQuZGdfaGRyX2xlbiAtCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7Ci0JdGNwaC0+Y2hlY2sgPSAwOwotCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKLQkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOwotCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCi0JCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JfSBlbHNlIHsKLQkJLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCi0JCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCi0JCQkJCSAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JCWlwaC0+dG90X2xlbiA9IDA7Ci0JCWlwaC0+Y2hlY2sgPSAwOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfdHNvX2ZpbGxfaGVhZGVyKTsKLQotdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgdGxlbjsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJdGxlbiA9IG50b2hzKGlwX2hkcihza2IpLT50b3RfbGVuKSAtIChpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwotCQlzd2l0Y2ggKGlwX2hkcihza2IpLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7Ci0JCXN3aXRjaCAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcikgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF90eF9jc3VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAppbmRleCA4NmJmN2RmLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3Ci0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCi0gKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgotICovCi0KLSNpZm5kZWYgX19RRVRIX0NPUkVfT0ZGTF9IX18KLSNkZWZpbmUgX19RRVRIX0NPUkVfT0ZGTF9IX18KLQotc3RydWN0IHFldGhfZWRkcF9lbGVtZW50IHsKLQl1MzIgZmxhZ3M7Ci0JdTMyIGxlbmd0aDsKLQl2b2lkICphZGRyOwotfTsKLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0IHsKLQlhdG9taWNfdCByZWZjbnQ7Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgdHlwZTsKLQlpbnQgbnVtX3BhZ2VzOwkJCSAgICAvKiAjIG9mIGFsbG9jYXRlZCBwYWdlcyAqLwotCXU4ICoqcGFnZXM7CQkJICAgIC8qIHBvaW50ZXJzIHRvIHBhZ2VzICovCi0JaW50IG9mZnNldDsJCQkgICAgLyogb2Zmc2V0IGluIGN0eCBkdXJpbmcgY3JlYXRpb24gKi8KLQlpbnQgbnVtX2VsZW1lbnRzOwkJICAgIC8qICMgb2YgcmVxdWlyZWQgJ1NCQUxFcycgKi8KLQlzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgKmVsZW1lbnRzOyAvKiBhcnJheSBvZiAnU0JBTEVzJyAqLwotCWludCBlbGVtZW50c19wZXJfc2tiOwkJICAgIC8qICMgb2YgJ1NCQUxFcycgcGVyIHNrYiAqKi8KLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eDsKLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfZGF0YSB7Ci0Jc3RydWN0IHFldGhfaGRyIHFoOwotCXN0cnVjdCBldGhoZHIgbWFjOwotCV9fYmUxNiB2bGFuWzJdOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpcGhkciBoOwotCQkJdTggb3B0aW9uc1s0MF07Ci0JCX0gaXA0OwotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGlwdjZoZHIgaDsKLQkJfSBpcDY7Ci0JfSBuaDsKLQl1OCBuaGw7Ci0Jdm9pZCAqbmhfaW5fY3R4OwkvKiBhZGRyZXNzIG9mIG5oIHdpdGhpbiB0aGUgY3R4ICovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IHRjcGhkciBoOwotCQkJdTggb3B0aW9uc1s0MF07Ci0JCX0gdGNwOwotCX0gdGg7Ci0JdTggdGhsOwotCXZvaWQgKnRoX2luX2N0eDsJLyogYWRkcmVzcyBvZiB0aCB3aXRoaW4gdGhlIGN0eCAqLwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHNrYl9vZmZzZXQ7Ci0JaW50IGZyYWc7Ci0JaW50IGZyYWdfb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWV4dGVybiBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICosCi0JCSBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgdW5zaWduZWQgY2hhcik7Ci1leHRlcm4gdm9pZCBxZXRoX2VkZHBfcHV0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOwotZXh0ZXJuIGludCBxZXRoX2VkZHBfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKiwgaW50KTsKLWV4dGVybiB2b2lkIHFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKik7Ci1leHRlcm4gaW50IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOwotCi12b2lkIHFldGhfdHNvX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCXN0cnVjdCBza19idWZmICopOwotdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLSNlbmRpZiAvKiBfX1FFVEhfQ09SRV9FRERQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwppbmRleCBjMjZlODQyLi41Njg0NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwpAQCAtNDI3LDggKzQyNyw2IEBACiAJc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9OTzoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJubyIpOwotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiRUREUCIpOwogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX1RTTzoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJUU08iKTsKIAlkZWZhdWx0OgpAQCAtNDQ5LDggKzQ0Nyw2IEBACiAJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKIAlpZiAoIXN0cmNtcCh0bXAsICJubyIpKSB7CiAJCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIkVERFAiKSkgewotCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CiAJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIlRTTyIpKSB7CiAJCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfVFNPOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAwN2FiOGE1Li4xNzIwMzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogCiAjaW5jbHVkZSAicWV0aF9jb3JlLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKIAogc3RhdGljIGludCBxZXRoX2wyX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTMyOCw2ICszMjcsMTAgQEAKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQ7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImFpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYWlkUkVDIik7CisJCXJldHVybjsKKwl9CiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwogCWlmIChpZCkgewogCQlpZC0+dmlkID0gdmlkOwpAQCAtMzQ0LDYgKzM0NywxMCBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImtpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmNhcmQtPnZpZF9saXN0LCBsaXN0KSB7CiAJCWlmIChpZC0+dmlkID09IHZpZCkgewpAQCAtMzc5LDcgKzM4Niw4IEBACiAJCQlkZXZfY2xvc2UoY2FyZC0+ZGV2KTsKIAkJCXJ0bmxfdW5sb2NrKCk7CiAJCX0KLQkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wKSB7CisJCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCB8fAorCQkJcmVjb3ZlcnlfbW9kZSkgewogCQkJX191OCAqbWFjID0gJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF07CiAJCQlyYyA9IHFldGhfbDJfc2VuZF9kZWxtYWMoY2FyZCwgbWFjKTsKIAkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiTGVyciVkIiwgcmMpOwpAQCAtMzg4LDcgKzM5Niw4IEBACiAJfQogCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1NPRlRTRVRVUCkgewogCQlxZXRoX2wyX3Byb2Nlc3NfdmxhbnMoY2FyZCwgMSk7Ci0JCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCkKKwkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wIHx8CisJCQlyZWNvdmVyeV9tb2RlKQogCQkJcWV0aF9sMl9kZWxfYWxsX21jKGNhcmQpOwogCQlxZXRoX2NsZWFyX2lwYWNtZF9saXN0KGNhcmQpOwogCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOwpAQCAtNTkzLDYgKzYwMiwxMCBAQAogCX0KIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMywgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwogCVFFVEhfREJGX0hFWChUUkFDRSwgMywgYWRkci0+c2FfZGF0YSwgT1NBX0FERFJfTEVOKTsKKwlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtY1JFQyIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KIAlyYyA9IHFldGhfbDJfc2VuZF9kZWxtYWMoY2FyZCwgJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF0pOwogCWlmICghcmMpCiAJCXJjID0gcWV0aF9sMl9zZW5kX3NldG1hYyhjYXJkLCBhZGRyLT5zYV9kYXRhKTsKQEAgLTYwOCw2ICs2MjEsOSBAQAogCQlyZXR1cm4gOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG11bHRpIik7CisJaWYgKHFldGhfdGhyZWFkc19ydW5uaW5nKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSkKKwkJcmV0dXJuOwogCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKIAlzcGluX2xvY2tfYmgoJmNhcmQtPm1jbG9jayk7CiAJZm9yIChkbSA9IGRldi0+bWNfbGlzdDsgZG07IGRtID0gZG0tPm5leHQpCkBAIC02MzQsOCArNjUwLDYgQEAKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCiAJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CiAJaW50IGRhdGFfb2Zmc2V0ID0gLTE7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CiAJaW50IGhkX2xlbiA9IDA7CkBAIC02NTUsMTQgKzY2OSwxMCBAQAogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlpZiAoc2tiX2lzX2dzbyhza2IpKQotCQlsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0KIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKXNrYi0+ZGF0YTsKIAllbHNlIHsKLQkJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCi0JCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkgeworCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQkJbmV3X3NrYiA9IHNrYjsKIAkJCWRhdGFfb2Zmc2V0ID0gRVRIX0hMRU47CiAJCQloZF9sZW4gPSBFVEhfSExFTjsKQEAgLTY4OSw1OSArNjk5LDI2IEBACiAJCX0KIAl9CiAKLQlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfRUREUCkgewotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoY2FyZCwgbmV3X3NrYiwgaGRyLAotCQkJCQkJc2tiLT5zay0+c2tfcHJvdG9jb2wpOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCVFFVEhfREJGX01FU1NBR0UoMiwgImNvdWxkIG5vdCBjcmVhdGUgZWRkcCBjb250ZXh0XG4iKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQotCX0gZWxzZSB7Ci0JCWVsZW1lbnRzID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCisJZWxlbWVudHMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKIAkJCQkJCWVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbWVudHMpIHsKLQkJCWlmIChkYXRhX29mZnNldCA+PSAwKQotCQkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9CisJaWYgKCFlbGVtZW50cykgeworCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKKwkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOworCQlnb3RvIHR4X2Ryb3A7CiAJfQogCi0JaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQotCQlxZXRoX3R4X2NzdW0obmV3X3NrYik7Ci0KIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSBlbGVtZW50cywgY3R4KTsKKwkJCQkJIGVsZW1lbnRzKTsKIAllbHNlCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCWVsZW1lbnRzLCBjdHgsIGRhdGFfb2Zmc2V0LCBoZF9sZW4pOworCQkJCQllbGVtZW50cywgZGF0YV9vZmZzZXQsIGhkX2xlbik7CiAJaWYgKCFyYykgewogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOwogCQlpZiAobmV3X3NrYiAhPSBza2IpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewotCQkJaWYgKGxhcmdlX3NlbmQgIT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwotCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKLQkJCX0KLQkJCWlmIChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyA+IDApIHsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCsrOwotCQkJCS8qIG5yX2ZyYWdzICsgc2tiLT5kYXRhICovCi0JCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9Ci0JCQkJCXNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMTsKLQkJCX0KLQkJfQotCi0JCWlmIChjdHggIT0gTlVMTCkgewotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChjdHggIT0gTlVMTCkKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CiAKQEAgLTg3OCwzMCArODU1LDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sMl9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7Ci0JCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCX0KLQl9IGVsc2UgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBxZXRoX2wyX2V0aHRvb2xfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBxZXRoX2NvcmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3RhdHNfY291bnQgPSBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggM2QwNDkyMC4uMGJhMzgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0xOSwxNSArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAicWV0aF9sMy5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCiAKIHN0YXRpYyBpbnQgcWV0aF9sM19zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOwogc3RhdGljIGludCBxZXRoX2wzX3JlY292ZXIodm9pZCAqKTsKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJcmMgPSBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKIAlpZiAocmMpIHsKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgY291bGRuJ3Qgc2V0IGFkYXB0ZXIgcGFyYW1ldGVyczogIgotCQkJIjB4JXhcbiIsIGNhcmQtPmdkZXYtPmRldi5idXNfaWQsIHJjKTsKKwkJCSIweCV4XG4iLCBkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUykpIHsKQEAgLTE4MzgsNiArMTgzOCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImtpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CiAJLyogdW5yZWdpc3RlciBJUCBhZGRyZXNzZXMgb2YgdmxhbiBkZXZpY2UgKi8KIAlxZXRoX2wzX2ZyZWVfdmxhbl9hZGRyZXNzZXMoY2FyZCwgdmlkKTsKQEAgLTIxMDEsNiArMjEwNSw5IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCisJCXJldHVybjsKIAlxZXRoX2wzX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CiAJcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgpAQCAtMjU3NywxMiArMjU4NCw2MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfaGRyICpxaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBxZXRoX2hkcl90c28gKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopcWhkcjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KKwloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKKwkvKnNldCB2YWx1ZXMgd2hpY2ggYXJlIGZpeCBmb3IgdGhlIGZpcnN0IGFwcHJvYWNoIC4uLiovCisJaGRyLT5leHQuaGRyX3RvdF9sZW4gPSAoX191MTYpIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfZXh0X3Rzbyk7CisJaGRyLT5leHQuaW1iX2hkcl9ubyAgPSAxOworCWhkci0+ZXh0Lmhkcl90eXBlICAgID0gMTsKKwloZHItPmV4dC5oZHJfdmVyc2lvbiA9IDE7CisJaGRyLT5leHQuaGRyX2xlbiAgICAgPSAyODsKKwkvKmluc2VydCBub24tZml4IHZhbHVlcyAqLworCWhkci0+ZXh0Lm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaGRyLT5leHQuZGdfaGRyX2xlbiA9IChfX3UxNikoaXBoLT5paGwqNCArIHRjcGgtPmRvZmYqNCk7CisJaGRyLT5leHQucGF5bG9hZF9sZW4gPSAoX191MTYpKHNrYi0+bGVuIC0gaGRyLT5leHQuZGdfaGRyX2xlbiAtCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CisJdGNwaC0+Y2hlY2sgPSAwOworCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKKwkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7CisJfSBlbHNlIHsKKwkJLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCisJCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCSAwLCBJUFBST1RPX1RDUCwgMCk7CisJCWlwaC0+dG90X2xlbiA9IDA7CisJCWlwaC0+Y2hlY2sgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCit7CisJX193c3VtIGNzdW07CisJaW50IG9mZnNldDsKKworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpKTsKKwlvZmZzZXQgPSBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKKwlCVUdfT04ob2Zmc2V0ID49IHNrYl9oZWFkbGVuKHNrYikpOworCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKTsKKworCW9mZnNldCArPSBza2ItPmNzdW1fb2Zmc2V0OworCUJVR19PTihvZmZzZXQgKyBzaXplb2YoX19zdW0xNikgPiBza2JfaGVhZGxlbihza2IpKTsKKwkqKF9fc3VtMTYgKikoc2tiLT5kYXRhICsgb2Zmc2V0KSA9IGNzdW1fZm9sZChjc3VtKTsKK30KKwogc3RhdGljIGludCBxZXRoX2wzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCByYzsKIAl1MTYgKnRhZzsKIAlzdHJ1Y3QgcWV0aF9oZHIgKmhkciA9IE5VTEw7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CisJaW50IGVsZW1zOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBOVUxMOwogCWludCBpcHYgPSBxZXRoX2dldF9pcF92ZXJzaW9uKHNrYik7CkBAIC0yNTkxLDggKzI2NDksOCBAQAogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwogCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCBkYXRhX29mZnNldCA9IC0xOworCWludCBucl9mcmFnczsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYKIAkgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpICYmCkBAIC0yNjE1LDYgKzI2NzMsMTIgQEAKIAogCWlmIChza2JfaXNfZ3NvKHNrYikpCiAJCWxhcmdlX3NlbmQgPSBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQ7CisJZWxzZQorCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkJcWV0aF90eF9jc3VtKHNrYik7CisJCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCQljYXJkLT5wZXJmX3N0YXRzLnR4X2NzdW0rKzsKKwkJfQogCiAJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCiAJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApKSB7CkBAIC0yNjYxLDEyICsyNzI1LDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJLyogZml4IGhhcmR3YXJlIGxpbWl0YXRpb246IGFzIGxvbmcgYXMgd2UgZG8gbm90IGhhdmUgc2JhbAotCSAqIGNoYWluaW5nIHdlIGNhbiBub3Qgc2VuZCBsb25nIGZyYWcgbGlzdHMgc28gd2UgdGVtcG9yYXJ5Ci0JICogc3dpdGNoIHRvIEVERFAKKwkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzCiAJICovCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCi0JCSgoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAyKSA+IDE2KSkKLQkJbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCSAgICAoKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMikgPiAxNikpIHsKKwkJaWYgKHNrYl9saW5lYXJpemUobmV3X3NrYikpCisJCQlnb3RvIHR4X2Ryb3A7CisJfQogCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCiAJICAgIChjYXN0X3R5cGUgPT0gUlROX1VOU1BFQykpIHsKQEAgLTI2ODksMzcgKzI3NTQsMjIgQEAKIAkJfQogCX0KIAotCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9FRERQKSB7Ci0JCS8qIG5ld19za2IgaXMgbm90IG93bmVkIGJ5IGEgc29ja2V0IHNvIHdlIHVzZSBza2IgdG8gZ2V0Ci0JCSAqIHRoZSBwcm90b2NvbAotCQkgKi8KLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkciwKLQkJCQkJCXNrYi0+c2stPnNrX3Byb3RvY29sKTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJjb3VsZCBub3QgY3JlYXRlIGVkZHAgY29udGV4dFxuIik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKKwllbGVtcyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAogCQkJCQkJIGVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbXMpIHsKLQkJCWlmIChkYXRhX29mZnNldCA+PSAwKQotCQkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9Ci0JCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKKwlpZiAoIWVsZW1zKSB7CisJCWlmIChkYXRhX29mZnNldCA+PSAwKQorCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CisJCWdvdG8gdHhfZHJvcDsKIAl9Ci0KLQlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSAmJgotCSAgICAobmV3X3NrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQotCQlxZXRoX3R4X2NzdW0obmV3X3NrYik7CisJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3M7CiAKIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSBlbGVtZW50c19uZWVkZWQsIGN0eCk7CisJCQkJCSBlbGVtZW50c19uZWVkZWQpOwogCWVsc2UKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJZWxlbWVudHNfbmVlZGVkLCBjdHgsIGRhdGFfb2Zmc2V0LCAwKTsKKwkJCQkJZWxlbWVudHNfbmVlZGVkLCBkYXRhX29mZnNldCwgMCk7CiAKIAlpZiAoIXJjKSB7CiAJCWNhcmQtPnN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTI3MzEsMjIgKzI3ODEsMTMgQEAKIAkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwogCQkJfQotCQkJaWYgKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzID4gMCkgeworCQkJaWYgKG5yX2ZyYWdzKSB7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKIAkJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQotCQkJCQlza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDE7CisJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9IG5yX2ZyYWdzICsgMTsKIAkJCX0KIAkJfQotCi0JCWlmIChjdHggIT0gTlVMTCkgewotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChjdHggIT0gTlVMTCkKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CiAKQEAgLTI4NDEsNyArMjg4Miw3IEBACiAJaWYgKGRhdGEpIHsKIAkJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pIHsKIAkJCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKQotCQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCQkJCXJldHVybiAtRVBFUk07CiAJCQllbHNlCiAJCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaCBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzlmOGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKLSAqICAgUy8zOTAgZGF0YSBkZWZpbml0aW9ucyBmb3IgbWFjaGluZSBjaGVjayBwcm9jZXNzaW5nCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgKGFkbHVuZ0BkZS5pYm0uY29tKQotICovCi0KLSNpZm5kZWYgX19zMzkwbWFjaF9oCi0jZGVmaW5lIF9fczM5MG1hY2hfaAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBtY2kgewotCV9fdTMyICAgc2QgICAgICAgICAgICAgIDogIDE7IC8qIDAwIHN5c3RlbSBkYW1hZ2UgKi8KLQlfX3UzMiAgIHBkICAgICAgICAgICAgICA6ICAxOyAvKiAwMSBpbnN0cnVjdGlvbi1wcm9jZXNzaW5nIGRhbWFnZSAqLwotCV9fdTMyICAgc3IgICAgICAgICAgICAgIDogIDE7IC8qIDAyIHN5c3RlbSByZWNvdmVyeSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8xIDogIDE7IC8qIDAzICovCi0JX191MzIgICBjZCAgICAgICAgICAgICAgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLwotCV9fdTMyICAgZWQgICAgICAgICAgICAgIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8yIDogIDE7IC8qIDA2ICovCi0JX191MzIgICBkZyAgICAgICAgICAgICAgOiAgMTsgLyogMDcgZGVncmFkYXRpb24gKi8KLQlfX3UzMiAgIHcgICAgICAgICAgICAgICA6ICAxOyAvKiAwOCB3YXJuaW5nIHBlbmRpbmcgKi8KLQlfX3UzMiAgIGNwICAgICAgICAgICAgICA6ICAxOyAvKiAwOSBjaGFubmVsLXJlcG9ydCBwZW5kaW5nICovCi0JX191MzIgICBzcCAgICAgICAgICAgICAgOiAgMTsgLyogMTAgc2VydmljZS1wcm9jZXNzb3IgZGFtYWdlICovCi0JX191MzIgICBjayAgICAgICAgICAgICAgOiAgMTsgLyogMTEgY2hhbm5lbC1zdWJzeXN0ZW0gZGFtYWdlICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzMgOiAgMjsgLyogMTItMTMgKi8KLQlfX3UzMiAgIGIgICAgICAgICAgICAgICA6ICAxOyAvKiAxNCBiYWNrZWQgdXAgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNCA6ICAxOyAvKiAxNSAqLwotCV9fdTMyICAgc2UgICAgICAgICAgICAgIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIHNjICAgICAgICAgICAgICA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLwotCV9fdTMyICAga2UgICAgICAgICAgICAgIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCi0JX191MzIgICBkcyAgICAgICAgICAgICAgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLwotCV9fdTMyICAgd3AgICAgICAgICAgICAgIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIG1zICAgICAgICAgICAgICA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCi0JX191MzIgICBwbSAgICAgICAgICAgICAgOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGlhICAgICAgICAgICAgICA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLwotCV9fdTMyICAgZmEgICAgICAgICAgICAgIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzUgOiAgMTsgLyogMjUgKi8KLQlfX3UzMiAgIGVjICAgICAgICAgICAgICA6ICAxOyAvKiAyNiBleHRlcm5hbCBkYW1hZ2UgY29kZSB2YWxpZGl0eSAqLwotCV9fdTMyICAgZnAgICAgICAgICAgICAgIDogIDE7IC8qIDI3IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBnciAgICAgICAgICAgICAgOiAgMTsgLyogMjggZ2VuZXJhbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgY3IgICAgICAgICAgICAgIDogIDE7IC8qIDI5IGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNiA6ICAxOyAvKiAzMCAqLwotCV9fdTMyICAgc3QgICAgICAgICAgICAgIDogIDE7IC8qIDMxIHN0b3JhZ2UgbG9naWNhbCB2YWxpZGl0eSAqLwotCV9fdTMyICAgaWUgICAgICAgICAgICAgIDogIDE7IC8qIDMyIGluZGlyZWN0IHN0b3JhZ2UgZXJyb3IgKi8KLQlfX3UzMiAgIGFyICAgICAgICAgICAgICA6ICAxOyAvKiAzMyBhY2Nlc3MgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGRhICAgICAgICAgICAgICA6ICAxOyAvKiAzNCBkZWxheWVkIGFjY2VzcyBleGNlcHRpb24gKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNyA6ICA3OyAvKiAzNS00MSAqLwotCV9fdTMyICAgcHIgICAgICAgICAgICAgIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZjICAgICAgICAgICAgICA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBhcCAgICAgICAgICAgICAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF84IDogIDE7IC8qIDQ1ICovCi0JX191MzIgICBjdCAgICAgICAgICAgICAgOiAgMTsgLyogNDYgY3B1IHRpbWVyIHZhbGlkaXR5ICovCi0JX191MzIgICBjYyAgICAgICAgICAgICAgOiAgMTsgLyogNDcgY2xvY2sgY29tcGFyYXRvciB2YWxpZGl0eSAqLwotCV9fdTMyCXRvX2JlX2RlZmluZWRfOSA6IDE2OyAvKiA0Ny02MyAqLwotfTsKLQotLyoKLSAqIENoYW5uZWwgUmVwb3J0IFdvcmQKLSAqLwotc3RydWN0IGNydyB7Ci0JX191MzIgcmVzMSAgICA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KLQlfX3UzMiBzbGN0ICAgIDogIDE7ICAgLyogc29saWNpdGVkICovCi0JX191MzIgb2ZsdyAgICA6ICAxOyAgIC8qIG92ZXJmbG93ICovCi0JX191MzIgY2huICAgICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KLQlfX3UzMiByc2MgICAgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCi0JX191MzIgYW5jICAgICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KLQlfX3UzMiByZXMyICAgIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLwotCV9fdTMyIGVyYyAgICAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCi0JX191MzIgcnNpZCAgICA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi10eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKLQotZXh0ZXJuIGludCBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7Ci1leHRlcm4gdm9pZCBzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYyk7Ci0KLSNkZWZpbmUgTlJfUlNDUyAxNgotCi0jZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCi0jZGVmaW5lIENSV19SU0NfU0NIICAgICAgMHgzICAvKiBzdWJjaGFubmVsICovCi0jZGVmaW5lIENSV19SU0NfQ1BBVEggICAgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KLSNkZWZpbmUgQ1JXX1JTQ19DT05GSUcgICAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KLSNkZWZpbmUgQ1JXX1JTQ19DU1MgICAgICAweEIgIC8qIGNoYW5uZWwgc3Vic3lzdGVtICovCi0KLSNkZWZpbmUgQ1JXX0VSQ19FVkVOVCAgICAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KLSNkZWZpbmUgQ1JXX0VSQ19BVkFJTCAgICAweDAxIC8qIGF2YWlsYWJsZSAqLwotI2RlZmluZSBDUldfRVJDX0lOSVQgICAgIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJST1IgICAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLwotI2RlZmluZSBDUldfRVJDX0lQQVJNICAgIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJNICAgICAweDA1IC8qIHRlcm1pbmFsICovCi0jZGVmaW5lIENSV19FUkNfUEVSUk4gICAgMHgwNiAvKiBwZXJtLiBlcnJvciwgZmFjLiBub3QgaW5pdCAqLwotI2RlZmluZSBDUldfRVJDX1BFUlJJICAgIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QTU9EICAgICAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncgKQotewotCWludCBjY29kZTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkic3RjcncgMCglMilcblx0IgotCQkiaXBtICUwXG5cdCIKLQkJInNybCAlMCwyOFxuXHQiCi0JCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKLQkJOiAiYSIgKHBjcncpCi0JCTogImNjIiApOwotCXJldHVybiBjY29kZTsKLX0KLQotI2RlZmluZSBFRF9FVFJfU1lOQwkxMgkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN5bmMgY2hlY2sgKi8KLSNkZWZpbmUgRURfRVRSX1NXSVRDSAkxMwkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN3aXRjaCB0byBsb2NhbCAqLwotCi0jZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCi0jZGVmaW5lIEVEX1NUUF9JU0xBTkQJNgkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIGlzbGFuZCBjaGVjayAqLwotCi1zdHJ1Y3QgcHRfcmVnczsKLQotdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwotdm9pZCBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmIC8qIF9fczM5MG1hY2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDhhZjdkZmIuLjYxNmM2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBNb2R1bGUgaW50ZXJmYWNlIGFuZCBoYW5kbGluZyBvZiB6ZmNwIGRhdGEgc3RydWN0dXJlcy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKIC8qCkBAIC0yNDksOCArMjQ5LDggQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpCi0JCWlmICgocG9ydC0+d3dwbiA9PSB3d3BuKSAmJiAhKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYKLQkJICAgICAgKFpGQ1BfU1RBVFVTX1BPUlRfTk9fV1dQTiB8IFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUpKSkKKwkJaWYgKChwb3J0LT53d3BuID09IHd3cG4pICYmCisJCSAgICAhKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSkpCiAJCQlyZXR1cm4gcG9ydDsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQyMSw3ICs0MjEsOCBAQAogCXdoaWxlIChhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdF9taXNzKSA+IDApCiAJCWlmICh6ZmNwX2ZzZl9zdGF0dXNfcmVhZChhZGFwdGVyKSkgewogCQkJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0X21pc3MpID49IDE2KSB7Ci0JCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgMTAzLCBOVUxMKTsKKwkJCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiYXhzcmVmMSIsCisJCQkJCQkJTlVMTCk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlicmVhazsKQEAgLTUwMSw2ICs1MDIsNyBAQAogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5zY3NpX2RiZl9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVjX2RiZl9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKIAogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5lcnBfbG9jayk7CiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFib3J0X2xvY2spOwpAQCAtNTIyLDcgKzUyNCw2IEBACiAJCWdvdG8gc3lzZnNfZmFpbGVkOwogCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0JemZjcF9mY19uYW1lc2VydmVyX2luaXQoYWRhcHRlcik7CiAKIAlpZiAoIXpmY3BfYWRhcHRlcl9zY3NpX3JlZ2lzdGVyKGFkYXB0ZXIpKQogCQlyZXR1cm4gMDsKQEAgLTU1Miw2ICs1NTMsNyBAQAogCiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zdGF0X3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWRhcHRlci0+bnNwLndvcmspOwogCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYua29iaiwKIAkJCSAgICZ6ZmNwX3N5c2ZzX2FkYXB0ZXJfYXR0cnMpOwpAQCAtNjAzLDEwICs2MDUsMTMgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5yZW1vdmVfd3EpOwogCUlOSVRfTElTVF9IRUFEKCZwb3J0LT51bml0X2xpc3RfaGVhZCk7CiAJSU5JVF9XT1JLKCZwb3J0LT5naWRfcG5fd29yaywgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX2xvb2t1cCk7CisJSU5JVF9XT1JLKCZwb3J0LT50ZXN0X2xpbmtfd29yaywgemZjcF9mY19saW5rX3Rlc3Rfd29yayk7CisJSU5JVF9XT1JLKCZwb3J0LT5ycG9ydF93b3JrLCB6ZmNwX3Njc2lfcnBvcnRfd29yayk7CiAKIAlwb3J0LT5hZGFwdGVyID0gYWRhcHRlcjsKIAlwb3J0LT5kX2lkID0gZF9pZDsKIAlwb3J0LT53d3BuID0gd3dwbjsKKwlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfTk9ORTsKIAogCS8qIG1hcmsgcG9ydCB1bnVzYWJsZSBhcyBsb25nIGFzIHN5c2ZzIHJlZ2lzdHJhdGlvbiBpcyBub3QgY29tcGxldGUgKi8KIAlhdG9taWNfc2V0X21hc2soc3RhdHVzIHwgWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSwgJnBvcnQtPnN0YXR1cyk7CkBAIC02MjAsMTEgKzYyNSwxMCBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmcG9ydC0+c3lzZnNfZGV2aWNlLCBwb3J0KTsKIAogCXJlYWRfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0JaWYgKCEoc3RhdHVzICYgWkZDUF9TVEFUVVNfUE9SVF9OT19XV1BOKSkKLQkJaWYgKHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCB3d3BuKSkgewotCQkJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JCX0KKwlpZiAoemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHd3cG4pKSB7CisJCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQogCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAogCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCAyODU4ODFmLi4xZmUxZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogUmVnaXN0cmF0aW9uIGFuZCBjYWxsYmFjayBmb3IgdGhlIHMzOTAgY29tbW9uIEkvTyBsYXllci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC03Miw4ICs3Miw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJnBvcnRfcmVtb3ZlX2xoLCBsaXN0KSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bml0LCB1LCAmdW5pdF9yZW1vdmVfbGgsIGxpc3QpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmdW5pdC0+c3RhdHVzKSAmCi0JCQkgICAgWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVEKQorCQkJaWYgKHVuaXQtPmRldmljZSkKIAkJCQlzY3NpX3JlbW92ZV9kZXZpY2UodW5pdC0+ZGV2aWNlKTsKIAkJCXpmY3BfdW5pdF9kZXF1ZXVlKHVuaXQpOwogCQl9CkBAIC0xMDksMTEgKzEwOCwxMiBAQAogCS8qIGluaXRpYWxpemUgcmVxdWVzdCBjb3VudGVyICovCiAJQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShhZGFwdGVyKSk7CiAJYWRhcHRlci0+cmVxX25vID0gMDsKKwl6ZmNwX2ZjX25hbWVzZXJ2ZXJfaW5pdChhZGFwdGVyKTsKIAotCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAxMCwgTlVMTCwKKwl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImNjc29ubDEiLCBOVUxMLAogCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywgWkZDUF9TRVQpOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCA4NSwKLQkJCQlOVUxMKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkiY2Nzb25sMiIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CiAJZmx1c2hfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCiAJZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwotCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgODYsIE5VTEwpOworCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc29mZjEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXpmY3BfZXJwX3RocmVhZF9raWxsKGFkYXB0ZXIpOwogCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwpAQCAtMTYwLDIxICsxNjAsMjEgQEAKIAljYXNlIENJT19HT05FOgogCQlkZXZfd2FybigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJICJUaGUgRkNQIGRldmljZSBoYXMgYmVlbiBkZXRhY2hlZFxuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgODcsIE5VTEwpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY25vdGkxIiwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgQ0lPX05PX1BBVEg6CiAJCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkgIlRoZSBDSFBJRCBmb3IgdGhlIEZDUCBkZXZpY2UgaXMgb2ZmbGluZVxuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgODgsIE5VTEwpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY25vdGkyIiwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgQ0lPX09QRVI6CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkgIlRoZSBGQ1AgZGV2aWNlIGlzIG9wZXJhdGlvbmFsIGFnYWluXG4iKTsKLQkJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIDExLCBOVUxMLAorCQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImNjbm90aTMiLCBOVUxMLAogCQkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsCiAJCQkJCSAgICAgICBaRkNQX1NFVCk7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQk4OSwgTlVMTCk7CisJCQkJCSJjY25vdGk0IiwgTlVMTCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwotCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgOTAsIE5VTEwpOworCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc2h1dDEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKaW5kZXggY2I2ZGY2MC4uMGExYTVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC00OTAsMTcyICs0OTAsMTcgQEAKIAlbWkZDUF9SRUNfREJGX0lEX0FDVElPTl0gPSAiYWN0aW9uIiwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICp6ZmNwX3JlY19kYmZfaWRzW10gPSB7Ci0JWzFdCT0gIm5ldyIsCi0JWzJdCT0gInJlYWR5IiwKLQlbM10JPSAia2lsbCIsCi0JWzRdCT0gImRvd24gc2xlZXAiLAotCVs1XQk9ICJkb3duIHdha2V1cCIsCi0JWzZdCT0gImRvd24gc2xlZXAgZWNkIiwKLQlbN10JPSAiZG93biB3YWtldXAgZWNkIiwKLQlbOF0JPSAiZG93biBzbGVlcCBlcGQiLAotCVs5XQk9ICJkb3duIHdha2V1cCBlcGQiLAotCVsxMF0JPSAib25saW5lIiwKLQlbMTFdCT0gIm9wZXJhdGlvbmFsIiwKLQlbMTJdCT0gInNjc2kgc2xhdmUgZGVzdHJveSIsCi0JWzEzXQk9ICJwcm9wYWdhdGUgZmFpbGVkIGFkYXB0ZXIiLAotCVsxNF0JPSAicHJvcGFnYXRlIGZhaWxlZCBwb3J0IiwKLQlbMTVdCT0gImJsb2NrIGFkYXB0ZXIiLAotCVsxNl0JPSAidW5ibG9jayBhZGFwdGVyIiwKLQlbMTddCT0gImJsb2NrIHBvcnQiLAotCVsxOF0JPSAidW5ibG9jayBwb3J0IiwKLQlbMTldCT0gImJsb2NrIHVuaXQiLAotCVsyMF0JPSAidW5ibG9jayB1bml0IiwKLQlbMjFdCT0gInVuaXQgcmVjb3ZlcnkgZmFpbGVkIiwKLQlbMjJdCT0gInBvcnQgcmVjb3ZlcnkgZmFpbGVkIiwKLQlbMjNdCT0gImFkYXB0ZXIgcmVjb3ZlcnkgZmFpbGVkIiwKLQlbMjRdCT0gInFkaW8gcXVldWVzIGRvd24iLAotCVsyNV0JPSAicDJwIGZhaWxlZCIsCi0JWzI2XQk9ICJuYW1lc2VydmVyIGxvb2t1cCBmYWlsZWQiLAotCVsyN10JPSAibmFtZXNlcnZlciBwb3J0IGZhaWxlZCIsCi0JWzI4XQk9ICJsaW5rIHVwIiwKLQlbMjldCT0gImxpbmsgZG93biIsCi0JWzMwXQk9ICJsaW5rIHVwIHN0YXR1cyByZWFkIiwKLQlbMzFdCT0gIm9wZW4gcG9ydCBmYWlsZWQiLAotCVszMl0JPSAiIiwKLQlbMzNdCT0gImNsb3NlIHBvcnQiLAotCVszNF0JPSAib3BlbiB1bml0IGZhaWxlZCIsCi0JWzM1XQk9ICJleGNsdXNpdmUgb3BlbiB1bml0IGZhaWxlZCIsCi0JWzM2XQk9ICJzaGFyZWQgb3BlbiB1bml0IGZhaWxlZCIsCi0JWzM3XQk9ICJsaW5rIGRvd24iLAotCVszOF0JPSAibGluayBkb3duIHN0YXR1cyByZWFkIG5vIGxpbmsiLAotCVszOV0JPSAibGluayBkb3duIHN0YXR1cyByZWFkIGZkaXNjIGxvZ2luIiwKLQlbNDBdCT0gImxpbmsgZG93biBzdGF0dXMgcmVhZCBmaXJtd2FyZSB1cGRhdGUiLAotCVs0MV0JPSAibGluayBkb3duIHN0YXR1cyByZWFkIHVua25vd24gcmVhc29uIiwKLQlbNDJdCT0gImxpbmsgZG93biBlY2QgaW5jb21wbGV0ZSIsCi0JWzQzXQk9ICJsaW5rIGRvd24gZXBkIGluY29tcGxldGUiLAotCVs0NF0JPSAic3lzZnMgYWRhcHRlciByZWNvdmVyeSIsCi0JWzQ1XQk9ICJzeXNmcyBwb3J0IHJlY292ZXJ5IiwKLQlbNDZdCT0gInN5c2ZzIHVuaXQgcmVjb3ZlcnkiLAotCVs0N10JPSAicG9ydCBib3hlZCBhYm9ydCIsCi0JWzQ4XQk9ICJ1bml0IGJveGVkIGFib3J0IiwKLQlbNDldCT0gInBvcnQgYm94ZWQgY3QiLAotCVs1MF0JPSAicG9ydCBib3hlZCBjbG9zZSBwaHlzaWNhbCIsCi0JWzUxXQk9ICJwb3J0IGJveGVkIG9wZW4gdW5pdCIsCi0JWzUyXQk9ICJwb3J0IGJveGVkIGNsb3NlIHVuaXQiLAotCVs1M10JPSAicG9ydCBib3hlZCBmY3AiLAotCVs1NF0JPSAidW5pdCBib3hlZCBmY3AiLAotCVs1NV0JPSAicG9ydCBhY2Nlc3MgZGVuaWVkIiwKLQlbNTZdCT0gIiIsCi0JWzU3XQk9ICIiLAotCVs1OF0JPSAiIiwKLQlbNTldCT0gInVuaXQgYWNjZXNzIGRlbmllZCIsCi0JWzYwXQk9ICJzaGFyZWQgdW5pdCBhY2Nlc3MgZGVuaWVkIG9wZW4gdW5pdCIsCi0JWzYxXQk9ICIiLAotCVs2Ml0JPSAicmVxdWVzdCB0aW1lb3V0IiwKLQlbNjNdCT0gImFkaXNjIGxpbmsgdGVzdCByZWplY3Qgb3IgdGltZW91dCIsCi0JWzY0XQk9ICJhZGlzYyBsaW5rIHRlc3QgZF9pZCBjaGFuZ2VkIiwKLQlbNjVdCT0gImFkaXNjIGxpbmsgdGVzdCBmYWlsZWQiLAotCVs2Nl0JPSAicmVjb3Zlcnkgb3V0IG9mIG1lbW9yeSIsCi0JWzY3XQk9ICJhZGFwdGVyIHJlY292ZXJ5IHJlcGVhdGVkIGFmdGVyIHN0YXRlIGNoYW5nZSIsCi0JWzY4XQk9ICJwb3J0IHJlY292ZXJ5IHJlcGVhdGVkIGFmdGVyIHN0YXRlIGNoYW5nZSIsCi0JWzY5XQk9ICJ1bml0IHJlY292ZXJ5IHJlcGVhdGVkIGFmdGVyIHN0YXRlIGNoYW5nZSIsCi0JWzcwXQk9ICJwb3J0IHJlY292ZXJ5IGZvbGxvdy11cCBhZnRlciBzdWNjZXNzZnVsIGFkYXB0ZXIgcmVjb3ZlcnkiLAotCVs3MV0JPSAiYWRhcHRlciByZWNvdmVyeSBlc2NhbGF0aW9uIGFmdGVyIGZhaWxlZCBhZGFwdGVyIHJlY292ZXJ5IiwKLQlbNzJdCT0gInBvcnQgcmVjb3ZlcnkgZm9sbG93LXVwIGFmdGVyIHN1Y2Nlc3NmdWwgcGh5c2ljYWwgcG9ydCAiCi0JCSAgInJlY292ZXJ5IiwKLQlbNzNdCT0gImFkYXB0ZXIgcmVjb3ZlcnkgZXNjYWxhdGlvbiBhZnRlciBmYWlsZWQgcGh5c2ljYWwgcG9ydCAiCi0JCSAgInJlY292ZXJ5IiwKLQlbNzRdCT0gInVuaXQgcmVjb3ZlcnkgZm9sbG93LXVwIGFmdGVyIHN1Y2Nlc3NmdWwgcG9ydCByZWNvdmVyeSIsCi0JWzc1XQk9ICJwaHlzaWNhbCBwb3J0IHJlY292ZXJ5IGVzY2FsYXRpb24gYWZ0ZXIgZmFpbGVkIHBvcnQgIgotCQkgICJyZWNvdmVyeSIsCi0JWzc2XQk9ICJwb3J0IHJlY292ZXJ5IGVzY2FsYXRpb24gYWZ0ZXIgZmFpbGVkIHVuaXQgcmVjb3ZlcnkiLAotCVs3N10JPSAiIiwKLQlbNzhdCT0gImR1cGxpY2F0ZSByZXF1ZXN0IGlkIiwKLQlbNzldCT0gImxpbmsgZG93biIsCi0JWzgwXQk9ICJleGNsdXNpdmUgcmVhZC1vbmx5IHVuaXQgYWNjZXNzIHVuc3VwcG9ydGVkIiwKLQlbODFdCT0gInNoYXJlZCByZWFkLXdyaXRlIHVuaXQgYWNjZXNzIHVuc3VwcG9ydGVkIiwKLQlbODJdCT0gImluY29taW5nIHJzY24iLAotCVs4M10JPSAiaW5jb21pbmcgd3dwbiIsCi0JWzg0XQk9ICJ3a2EgcG9ydCBoYW5kbGUgbm90IHZhbGlkIGNsb3NlIHBvcnQiLAotCVs4NV0JPSAib25saW5lIiwKLQlbODZdCT0gIm9mZmxpbmUiLAotCVs4N10JPSAiY2N3IGRldmljZSBnb25lIiwKLQlbODhdCT0gImNjdyBkZXZpY2Ugbm8gcGF0aCIsCi0JWzg5XQk9ICJjY3cgZGV2aWNlIG9wZXJhdGlvbmFsIiwKLQlbOTBdCT0gImNjdyBkZXZpY2Ugc2h1dGRvd24iLAotCVs5MV0JPSAic3lzZnMgcG9ydCBhZGRpdGlvbiIsCi0JWzkyXQk9ICJzeXNmcyBwb3J0IHJlbW92YWwiLAotCVs5M10JPSAic3lzZnMgYWRhcHRlciByZWNvdmVyeSIsCi0JWzk0XQk9ICJzeXNmcyB1bml0IGFkZGl0aW9uIiwKLQlbOTVdCT0gInN5c2ZzIHVuaXQgcmVtb3ZhbCIsCi0JWzk2XQk9ICJzeXNmcyBwb3J0IHJlY292ZXJ5IiwKLQlbOTddCT0gInN5c2ZzIHVuaXQgcmVjb3ZlcnkiLAotCVs5OF0JPSAic2VxdWVuY2UgbnVtYmVyIG1pc21hdGNoIiwKLQlbOTldCT0gImxpbmsgdXAiLAotCVsxMDBdCT0gImVycm9yIHN0YXRlIiwKLQlbMTAxXQk9ICJzdGF0dXMgcmVhZCBwaHlzaWNhbCBwb3J0IGNsb3NlZCIsCi0JWzEwMl0JPSAibGluayB1cCBzdGF0dXMgcmVhZCIsCi0JWzEwM10JPSAidG9vIG1hbnkgZmFpbGVkIHN0YXR1cyByZWFkIGJ1ZmZlcnMiLAotCVsxMDRdCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBhYm9ydCIsCi0JWzEwNV0JPSAibHVuIGhhbmRsZSBub3QgdmFsaWQgYWJvcnQiLAotCVsxMDZdCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBjdCIsCi0JWzEwN10JPSAicG9ydCBoYW5kbGUgbm90IHZhbGlkIGNsb3NlIHBvcnQiLAotCVsxMDhdCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBjbG9zZSBwaHlzaWNhbCBwb3J0IiwKLQlbMTA5XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgb3BlbiB1bml0IiwKLQlbMTEwXQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgY2xvc2UgdW5pdCIsCi0JWzExMV0JPSAibHVuIGhhbmRsZSBub3QgdmFsaWQgY2xvc2UgdW5pdCIsCi0JWzExMl0JPSAicG9ydCBoYW5kbGUgbm90IHZhbGlkIGZjcCIsCi0JWzExM10JPSAibHVuIGhhbmRsZSBub3QgdmFsaWQgZmNwIiwKLQlbMTE0XQk9ICJoYW5kbGUgbWlzbWF0Y2ggZmNwIiwKLQlbMTE1XQk9ICJsdW4gbm90IHZhbGlkIGZjcCIsCi0JWzExNl0JPSAicWRpbyBzZW5kIGZhaWxlZCIsCi0JWzExN10JPSAidmVyc2lvbiBtaXNtYXRjaCIsCi0JWzExOF0JPSAiaW5jb21wYXRpYmxlIHF0Y2IgdHlwZSIsCi0JWzExOV0JPSAidW5rbm93biBwcm90b2NvbCBzdGF0dXMiLAotCVsxMjBdCT0gInVua25vd24gZnNmIGNvbW1hbmQiLAotCVsxMjFdCT0gIm5vIHJlY29tbWVuZGF0aW9uIGZvciBzdGF0dXMgcXVhbGlmaWVyIiwKLQlbMTIyXQk9ICJzdGF0dXMgcmVhZCBwaHlzaWNhbCBwb3J0IGNsb3NlZCBpbiBlcnJvciIsCi0JWzEyM10JPSAiZmMgc2VydmljZSBjbGFzcyBub3Qgc3VwcG9ydGVkIiwKLQlbMTI0XQk9ICIiLAotCVsxMjVdCT0gIm5lZWQgbmV3ZXIgemZjcCIsCi0JWzEyNl0JPSAibmVlZCBuZXdlciBtaWNyb2NvZGUiLAotCVsxMjddCT0gImFyYml0cmF0ZWQgbG9vcCBub3Qgc3VwcG9ydGVkIiwKLQlbMTI4XQk9ICIiLAotCVsxMjldCT0gInF0Y2Igc2l6ZSBtaXNtYXRjaCIsCi0JWzEzMF0JPSAidW5rbm93biBmc2Ygc3RhdHVzIGVjZCIsCi0JWzEzMV0JPSAiZmNwIHJlcXVlc3QgdG9vIGJpZyIsCi0JWzEzMl0JPSAiIiwKLQlbMTMzXQk9ICJkYXRhIGRpcmVjdGlvbiBub3QgdmFsaWQgZmNwIiwKLQlbMTM0XQk9ICJjb21tYW5kIGxlbmd0aCBub3QgdmFsaWQgZmNwIiwKLQlbMTM1XQk9ICJzdGF0dXMgcmVhZCBhY3QgdXBkYXRlIiwKLQlbMTM2XQk9ICJzdGF0dXMgcmVhZCBjZmRjIHVwZGF0ZSIsCi0JWzEzN10JPSAiaGJhYXBpIHBvcnQgb3BlbiIsCi0JWzEzOF0JPSAiaGJhYXBpIHVuaXQgb3BlbiIsCi0JWzEzOV0JPSAiaGJhYXBpIHVuaXQgc2h1dGRvd24iLAotCVsxNDBdCT0gInFkaW8gZXJyb3Igb3V0Ym91bmQiLAotCVsxNDFdCT0gInNjc2kgaG9zdCByZXNldCIsCi0JWzE0Ml0JPSAiZGlzbWlzc2luZyBmc2YgcmVxdWVzdCBmb3IgcmVjb3ZlcnkgYWN0aW9uIiwKLQlbMTQzXQk9ICJyZWNvdmVyeSBhY3Rpb24gdGltZWQgb3V0IiwKLQlbMTQ0XQk9ICJyZWNvdmVyeSBhY3Rpb24gZ29uZSIsCi0JWzE0NV0JPSAicmVjb3ZlcnkgYWN0aW9uIGJlaW5nIHByb2Nlc3NlZCIsCi0JWzE0Nl0JPSAicmVjb3ZlcnkgYWN0aW9uIHJlYWR5IGZvciBuZXh0IHN0ZXAiLAotCVsxNDddCT0gInFkaW8gZXJyb3IgaW5ib3VuZCIsCi0JWzE0OF0gICA9ICJuYW1lc2VydmVyIG5lZWRlZCBmb3IgcG9ydCBzY2FuIiwKLQlbMTQ5XSAgID0gInBvcnQgc2NhbiIsCi0JWzE1MF0JPSAicHRwIGF0dGFjaCIsCi0JWzE1MV0gICA9ICJwb3J0IHZhbGlkYXRpb24gZmFpbGVkIiwKLX07Ci0KIHN0YXRpYyBpbnQgemZjcF9yZWNfZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAogCQkJCSAgICBjaGFyICpidWYsIGNvbnN0IGNoYXIgKl9yZWMpCiB7CiAJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAoc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKilfcmVjOwogCWNoYXIgKnAgPSBidWY7CisJY2hhciBoaW50W1pGQ1BfREJGX0lEX1NJWkUgKyAxXTsKIAorCW1lbWNweShoaW50LCByLT5pZDIsIFpGQ1BfREJGX0lEX1NJWkUpOworCWhpbnRbWkZDUF9EQkZfSURfU0laRV0gPSAwOwogCXpmY3BfZGJmX291dHMoJnAsICJ0YWciLCB6ZmNwX3JlY19kYmZfdGFnc1tyLT5pZF0pOwotCXpmY3BfZGJmX291dHMoJnAsICJoaW50IiwgemZjcF9yZWNfZGJmX2lkc1tyLT5pZDJdKTsKLQl6ZmNwX2RiZl9vdXQoJnAsICJpZCIsICIlZCIsIHItPmlkMik7CisJemZjcF9kYmZfb3V0cygmcCwgImhpbnQiLCBoaW50KTsKIAlzd2l0Y2ggKHItPmlkKSB7CiAJY2FzZSBaRkNQX1JFQ19EQkZfSURfVEhSRUFEOgogCQl6ZmNwX2RiZl9vdXQoJnAsICJ0b3RhbCIsICIlZCIsIHItPnUudGhyZWFkLnRvdGFsKTsKQEAgLTcwNyw3ICs1NTIsNyBAQAogICogQGFkYXB0ZXI6IGFkYXB0ZXIKICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaXMgaG9sZGluZyBlcnBfbG9jay4KICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKHU4IGlkMiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZChjaGFyICppZDIsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+cmVjX2RiZl9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CkBAIC03MjMsNyArNTY4LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX1RIUkVBRDsKLQlyLT5pZDIgPSBpZDI7CisJbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKIAlyLT51LnRocmVhZC50b3RhbCA9IHRvdGFsOwogCXItPnUudGhyZWFkLnJlYWR5ID0gcmVhZHk7CiAJci0+dS50aHJlYWQucnVubmluZyA9IHJ1bm5pbmc7CkBAIC03MzcsNyArNTgyLDcgQEAKICAqIEBhZGFwdGVyOiBhZGFwdGVyCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgZXJwX2xvY2suCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKHU4IGlkMiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC03NDYsNyArNTkxLDcgQEAKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGFyZ2V0KHU4IGlkMiwgdm9pZCAqcmVmLAorc3RhdGljIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChjaGFyICppZDIsIHZvaWQgKnJlZiwKIAkJCQkgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgICAgIGF0b21pY190ICpzdGF0dXMsIGF0b21pY190ICplcnBfY291bnQsCiAJCQkJICAgICAgdTY0IHd3cG4sIHUzMiBkX2lkLCB1NjQgZmNwX2x1bikKQEAgLTc1Nyw3ICs2MDIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CiAJci0+aWQgPSBaRkNQX1JFQ19EQkZfSURfVEFSR0VUOwotCXItPmlkMiA9IGlkMjsKKwltZW1jcHkoci0+aWQyLCBpZDIsIFpGQ1BfREJGX0lEX1NJWkUpOwogCXItPnUudGFyZ2V0LnJlZiA9ICh1bnNpZ25lZCBsb25nKXJlZjsKIAlyLT51LnRhcmdldC5zdGF0dXMgPSBhdG9taWNfcmVhZChzdGF0dXMpOwogCXItPnUudGFyZ2V0Lnd3cG4gPSB3d3BuOwpAQCAtNzc0LDcgKzYxOSw4IEBACiAgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQogICogQGFkYXB0ZXI6IGFkYXB0ZXIKICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcih1OCBpZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQordm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcihjaGFyICppZCwgdm9pZCAqcmVmLAorCQkJCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChpZCwgcmVmLCBhZGFwdGVyLCAmYWRhcHRlci0+c3RhdHVzLAogCQkJCSAgJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwLCAwLCAwKTsKQEAgLTc4Niw3ICs2MzIsNyBAQAogICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKICAqIEBwb3J0OiBwb3J0CiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQodTggaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKIApAQCAtODAxLDcgKzY0Nyw3IEBACiAgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQogICogQHVuaXQ6IHVuaXQKICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdCh1OCBpZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQordm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdChjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSB1bml0LT5wb3J0OwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwpAQCAtODIyLDcgKzY2OCw3IEBACiAgKiBAcG9ydDogcG9ydAogICogQHVuaXQ6IHVuaXQKICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdHJpZ2dlcih1OCBpZDIsIHZvaWQgKnJlZiwgdTggd2FudCwgdTggbmVlZCwKK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIoY2hhciAqaWQyLCB2b2lkICpyZWYsIHU4IHdhbnQsIHU4IG5lZWQsCiAJCQkJdm9pZCAqYWN0aW9uLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAogCQkJCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7CkBAIC04MzIsNyArNjc4LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX1RSSUdHRVI7Ci0Jci0+aWQyID0gaWQyOworCW1lbWNweShyLT5pZDIsIGlkMiwgWkZDUF9EQkZfSURfU0laRSk7CiAJci0+dS50cmlnZ2VyLnJlZiA9ICh1bnNpZ25lZCBsb25nKXJlZjsKIAlyLT51LnRyaWdnZXIud2FudCA9IHdhbnQ7CiAJci0+dS50cmlnZ2VyLm5lZWQgPSBuZWVkOwpAQCAtODU1LDcgKzcwMSw3IEBACiAgKiBAaWQyOiBpZGVudGlmaWVyCiAgKiBAZXJwX2FjdGlvbjogZXJyb3IgcmVjb3ZlcnkgYWN0aW9uIHN0cnVjdCBwb2ludGVyCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbih1OCBpZDIsIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnJlY19kYmZfYnVmOwpAQCAtODY0LDcgKzcxMCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9BQ1RJT047Ci0Jci0+aWQyID0gaWQyOworCW1lbWNweShyLT5pZDIsIGlkMiwgWkZDUF9EQkZfSURfU0laRSk7CiAJci0+dS5hY3Rpb24uYWN0aW9uID0gKHVuc2lnbmVkIGxvbmcpZXJwX2FjdGlvbjsKIAlyLT51LmFjdGlvbi5zdGF0dXMgPSBlcnBfYWN0aW9uLT5zdGF0dXM7CiAJci0+dS5hY3Rpb24uc3RlcCA9IGVycF9hY3Rpb24tPnN0ZXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAppbmRleCA3NDk5OGZmLi5hNTczZjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJ6ZmNwX2ZzZi5oIgogCiAjZGVmaW5lIFpGQ1BfREJGX1RBR19TSVpFICAgICAgNAorI2RlZmluZSBaRkNQX0RCRl9JRF9TSVpFICAgICAgIDcKIAogc3RydWN0IHpmY3BfZGJmX2R1bXAgewogCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CkBAIC03MCw3ICs3MSw3IEBACiAKIHN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkIHsKIAl1OCBpZDsKLQl1OCBpZDI7CisJY2hhciBpZDJbN107CiAJdW5pb24gewogCQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF9hY3Rpb24gYWN0aW9uOwogCQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF90aHJlYWQgdGhyZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggNTEwNjYyNy4uYTAzMTg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIHpmY3AgZGV2aWNlIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNpZm5kZWYgWkZDUF9ERUZfSApAQCAtMjQzLDkgKzI0Myw2IEBACiAKIC8qIHJlbW90ZSBwb3J0IHN0YXR1cyAqLwogI2RlZmluZSBaRkNQX1NUQVRVU19QT1JUX1BIWVNfT1BFTgkJMHgwMDAwMDAwMQotI2RlZmluZSBaRkNQX1NUQVRVU19QT1JUX1BIWVNfQ0xPU0lORwkJMHgwMDAwMDAwNAotI2RlZmluZSBaRkNQX1NUQVRVU19QT1JUX05PX1dXUE4JCTB4MDAwMDAwMDgKLSNkZWZpbmUgWkZDUF9TVEFUVVNfUE9SVF9JTlZBTElEX1dXUE4JCTB4MDAwMDAwMjAKIAogLyogd2VsbCBrbm93biBhZGRyZXNzIChXS0EpIHBvcnQgc3RhdHVzKi8KIGVudW0gemZjcF93a2Ffc3RhdHVzIHsKQEAgLTI1OCw3ICsyNTUsNiBAQAogLyogbG9naWNhbCB1bml0IHN0YXR1cyAqLwogI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1NIQVJFRAkJCTB4MDAwMDAwMDQKICNkZWZpbmUgWkZDUF9TVEFUVVNfVU5JVF9SRUFET05MWQkJMHgwMDAwMDAwOAotI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1JFR0lTVEVSRUQJCTB4MDAwMDAwMTAKICNkZWZpbmUgWkZDUF9TVEFUVVNfVU5JVF9TQ1NJX1dPUktfUEVORElORwkweDAwMDAwMDIwCiAKIC8qIEZTRiByZXF1ZXN0IHN0YXR1cyAodGhpcyBkb2VzIG5vdCBoYXZlIGEgY29tbW9uIHBhcnQpICovCkBAIC00NDcsOCArNDQzLDkgQEAKIAlzcGlubG9ja190CQlyZXFfbGlzdF9sb2NrOwkgICAvKiByZXF1ZXN0IGxpc3QgbG9jayAqLwogCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7CQkgICAvKiByZXF1ZXN0IHF1ZXVlICovCiAJc3BpbmxvY2tfdAkJcmVxX3FfbG9jazsJICAgLyogZm9yIG9wZXJhdGlvbnMgb24gcXVldWUgKi8KLQlpbnQJCQlyZXFfcV9wY2lfYmF0Y2g7ICAgLyogU0JBTHMgc2luY2UgUENJIGluZGljYXRpb24KLQkJCQkJCSAgICAgIHdhcyBsYXN0IHNldCAqLworCWt0aW1lX3QJCQlyZXFfcV90aW1lOyAvKiB0aW1lIG9mIGxhc3QgZmlsbCBsZXZlbCBjaGFuZ2UgKi8KKwl1NjQJCQlyZXFfcV91dGlsOyAvKiBmb3IgYWNjb3VudGluZyAqLworCXNwaW5sb2NrX3QJCXFkaW9fc3RhdF9sb2NrOwogCXUzMgkJCWZzZl9yZXFfc2VxX25vOwkgICAvKiBGU0YgY21uZCBzZXEgbnVtYmVyICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmVxdWVzdF93cTsJICAgLyogY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IKIAkJCQkJCSAgICAgIG1vcmUgYXZhbGlhYmxlIFNCQUxzICovCkBAIC01MTQsNiArNTExLDkgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgIG1heGZyYW1lX3NpemU7CiAJdTMyICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRfY2xhc3NlczsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgIGdpZF9wbl93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgdGVzdF9saW5rX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgICBycG9ydF93b3JrOworCWVudW0geyBSUE9SVF9OT05FLCBSUE9SVF9BREQsIFJQT1JUX0RFTCB9ICBycG9ydF90YXNrOwogfTsKIAogc3RydWN0IHpmY3BfdW5pdCB7CkBAIC01ODcsOSArNTg3LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKiogWkZDUCBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUAkweDAwMDAwMDAyCi0jZGVmaW5lIFpGQ1BfUkVRX05PX1FUQ0IJMHgwMDAwMDAwOAotCiAjZGVmaW5lIFpGQ1BfU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKICNkZWZpbmUgWkZDUF9DTEVBUiAgICAgICAgICAgICAgMHgwMDAwMDIwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCAzODdhM2FmLi42MzFiZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRXJyb3IgUmVjb3ZlcnkgUHJvY2VkdXJlcyAoRVJQKS4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgaW50IG1hc2spCiB7Ci0JemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIDE1LCBOVUxMLAorCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAiZXJhYmxrMSIsIE5VTEwsCiAJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQgfCBtYXNrLAogCQkJCSAgICAgICBaRkNQX0NMRUFSKTsKIH0KQEAgLTc1LDkgKzc1LDkgQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOwogCiAJbGlzdF9tb3ZlKCZhY3QtPmxpc3QsICZhY3QtPmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKDE0NiwgYWN0KTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcmFyZHkxIiwgYWN0KTsKIAl1cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCgyLCBhZGFwdGVyKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKCJlcmFyZHkyIiwgYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiBzdGF0aWMgaW50IHpmY3BfZXJwX2FjdGlvbl9lbnF1ZXVlKGludCB3YW50LCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCi0JCQkJICAgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggaWQsIHZvaWQgKnJlZikKKwkJCQkgICBzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCWludCByZXR2YWwgPSAxLCBuZWVkOwogCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCA9IE5VTEw7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAkrK2FkYXB0ZXItPmVycF90b3RhbF9jb3VudDsKIAlsaXN0X2FkZF90YWlsKCZhY3QtPmxpc3QsICZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7CiAJdXAoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoMSwgYWRhcHRlcik7CisJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCgiZXJhY3RlMSIsIGFkYXB0ZXIpOwogCXJldHZhbCA9IDA7CiAgb3V0OgogCXpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKGlkLCByZWYsIHdhbnQsIG5lZWQsIGFjdCwKQEAgLTIzNywxMyArMjM3LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgIGludCBjbGVhcl9tYXNrLCB1OCBpZCwgdm9pZCAqcmVmKQorCQkJCSAgICBpbnQgY2xlYXJfbWFzaywgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl6ZmNwX2VycF9hZGFwdGVyX2Jsb2NrKGFkYXB0ZXIsIGNsZWFyX21hc2spOworCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydHNfYmxvY2soYWRhcHRlcik7CiAKIAkvKiBlbnN1cmUgcHJvcGFnYXRpb24gb2YgZmFpbGVkIHN0YXR1cyB0byBuZXcgZGV2aWNlcyAqLwogCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSB7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKGFkYXB0ZXIsIDEzLCBOVUxMKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlciwgImVyYXJlbzEiLCBOVUxMKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiB6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0FEQVBURVIsCkBAIC0yNTgsNyArMjU5LDcgQEAKICAqIEByZWY6IFJlZmVyZW5jZSBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKi8KIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgaW50IGNsZWFyLAotCQkJICAgICB1OCBpZCwgdm9pZCAqcmVmKQorCQkJICAgICBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI3Nyw3ICsyNzgsNyBAQAogICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwogdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhciwKLQkJCSAgICAgICB1OCBpZCwgdm9pZCAqcmVmKQorCQkJICAgICAgIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJaW50IGZsYWdzID0gWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcgfCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRDsKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBjbGVhciB8IGZsYWdzLCBpZCwgcmVmKTsKQEAgLTI5MCw3ICsyOTEsOCBAQAogICogQGlkOiBJZCBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgogICovCi12b2lkIHpmY3BfZXJwX3BvcnRfc2h1dGRvd24oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgY2hhciAqaWQsCisJCQkgICAgdm9pZCAqcmVmKQogewogCWludCBmbGFncyA9IFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HIHwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQ7CiAJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgY2xlYXIgfCBmbGFncywgaWQsIHJlZik7CkBAIC0zMDMsNyArMzA1LDggQEAKICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgogICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwotdm9pZCB6ZmNwX2VycF91bml0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhciwgdTggaWQsIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfdW5pdF9zaHV0ZG93bihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBpbnQgY2xlYXIsIGNoYXIgKmlkLAorCQkJICAgIHZvaWQgKnJlZikKIHsKIAlpbnQgZmxhZ3MgPSBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORyB8IFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEOwogCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIGNsZWFyIHwgZmxhZ3MsIGlkLCByZWYpOwpAQCAtMzExLDE1ICszMTQsMTYgQEAKIAogc3RhdGljIHZvaWQgemZjcF9lcnBfcG9ydF9ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIpCiB7Ci0JemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHBvcnQsIDE3LCBOVUxMLAorCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCAiZXJwYmxrMSIsIE5VTEwsCiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQgfCBjbGVhciwKIAkJCQkgICAgWkZDUF9DTEVBUik7CiB9CiAKIHN0YXRpYyB2b2lkIF96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwKLQkJCQkJIGludCBjbGVhciwgdTggaWQsIHZvaWQgKnJlZikKKwkJCQkJIGludCBjbGVhciwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl6ZmNwX2VycF9wb3J0X2Jsb2NrKHBvcnQsIGNsZWFyKTsKKwl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfYmxvY2socG9ydCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkKIAkJcmV0dXJuOwpAQCAtMzM0LDcgKzMzOCw3IEBACiAgKiBAaWQ6IElkIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqIEByZWY6IFJlZmVyZW5jZSBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKi8KLXZvaWQgemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgdTggaWQsCit2b2lkIHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIGNoYXIgKmlkLAogCQkJCSB2b2lkICpyZWYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM0NywxNCArMzUxLDE1IEBACiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgdTggaWQsCitzdGF0aWMgaW50IF96ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIGNoYXIgKmlkLAogCQkJCSB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfcG9ydF9ibG9jayhwb3J0LCBjbGVhcik7CisJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHBvcnQpOwogCiAJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpIHsKIAkJLyogZW5zdXJlIHByb3BhZ2F0aW9uIG9mIGZhaWxlZCBzdGF0dXMgdG8gbmV3IGRldmljZXMgKi8KLQkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgMTQsIE5VTEwpOworCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0LCAiZXJwcmVvMSIsIE5VTEwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTM2OSw3ICszNzQsNyBAQAogICoKICAqIFJldHVybnMgMCBpZiByZWNvdmVyeSBoYXMgYmVlbiB0cmlnZ2VyZWQsIDwgMCBpZiBub3QuCiAgKi8KLWludCB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIHU4IGlkLCB2b2lkICpyZWYpCitpbnQgemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbDsKQEAgLTM4NiwxMiArMzkxLDEyIEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3VuaXRfYmxvY2soc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyX21hc2spCiB7Ci0JemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIDE5LCBOVUxMLAorCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCAiZXJ1YmxrMSIsIE5VTEwsCiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQgfCBjbGVhcl9tYXNrLAogCQkJCSAgICBaRkNQX0NMRUFSKTsKIH0KIAotc3RhdGljIHZvaWQgX3pmY3BfZXJwX3VuaXRfcmVvcGVuKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhciwgdTggaWQsCitzdGF0aWMgdm9pZCBfemZjcF9lcnBfdW5pdF9yZW9wZW4oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyLCBjaGFyICppZCwKIAkJCQkgIHZvaWQgKnJlZikKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKQEAgLTQxMSw3ICs0MTYsOCBAQAogICogQGNsZWFyX21hc2s6IHNwZWNpZmllcyBmbGFncyBpbiB1bml0IHN0YXR1cyB0byBiZSBjbGVhcmVkCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgPCAwIG9uIGVycm9yCiAgKi8KLXZvaWQgemZjcF9lcnBfdW5pdF9yZW9wZW4oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyLCB1OCBpZCwgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF91bml0X3Jlb3BlbihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBpbnQgY2xlYXIsIGNoYXIgKmlkLAorCQkJICB2b2lkICpyZWYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gdW5pdC0+cG9ydDsKQEAgLTQzNywyOCArNDQzLDI4IEBACiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3VuYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoc3RhdHVzX2NoYW5nZV9zZXQoWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJmFkYXB0ZXItPnN0YXR1cykpCi0JCXpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKDE2LCBOVUxMLCBhZGFwdGVyKTsKKwkJemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoImVyYXVibDEiLCBOVUxMLCBhZGFwdGVyKTsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJmFkYXB0ZXItPnN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfdW5ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewogCWlmIChzdGF0dXNfY2hhbmdlX3NldChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmcG9ydC0+c3RhdHVzKSkKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoMTgsIE5VTEwsIHBvcnQpOworCQl6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydCgiZXJwdWJsMSIsIE5VTEwsIHBvcnQpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmcG9ydC0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfdW5pdF91bmJsb2NrKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7CiAJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZ1bml0LT5zdGF0dXMpKQotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdCgyMCwgTlVMTCwgdW5pdCk7CisJCXpmY3BfcmVjX2RiZl9ldmVudF91bml0KCJlcnV1YmwxIiwgTlVMTCwgdW5pdCk7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZ1bml0LT5zdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fdG9fcnVubmluZyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCWxpc3RfbW92ZSgmZXJwX2FjdGlvbi0+bGlzdCwgJmVycF9hY3Rpb24tPmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpOwotCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oMTQ1LCBlcnBfYWN0aW9uKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcmF0b3IxIiwgZXJwX2FjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2ZzZnJlcShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCkBAIC00NzQsMTEgKzQ4MCwxMSBAQAogCQlpZiAoYWN0LT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCB8CiAJCQkJICAgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKSkgewogCQkJYWN0LT5mc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKLQkJCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oMTQyLCBhY3QpOworCQkJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJzY2ZfMSIsIGFjdCk7CiAJCQlhY3QtPmZzZl9yZXEtPmVycF9hY3Rpb24gPSBOVUxMOwogCQl9CiAJCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKLQkJCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oMTQzLCBhY3QpOworCQkJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJzY2ZfMiIsIGFjdCk7CiAJCWlmIChhY3QtPmZzZl9yZXEtPnN0YXR1cyAmIChaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEIHwKIAkJCQkJICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpKQogCQkJYWN0LT5mc2ZfcmVxID0gTlVMTDsKQEAgLTUzMCw3ICs1MzYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgaW50IGNsZWFyLCB1OCBpZCwgdm9pZCAqcmVmKQorCQkJCSAgICAgIGludCBjbGVhciwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCkBAIC01MzgsOCArNTQ0LDggQEAKIAkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIGNsZWFyLCBpZCwgcmVmKTsKIH0KIAotc3RhdGljIHZvaWQgX3pmY3BfZXJwX3VuaXRfcmVvcGVuX2FsbChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIHU4IGlkLAotCQkJCSAgICAgIHZvaWQgKnJlZikKK3N0YXRpYyB2b2lkIF96ZmNwX2VycF91bml0X3Jlb3Blbl9hbGwoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLAorCQkJCSAgICAgIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIApAQCAtNTU5LDI4ICs1NjUsMjggQEAKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgogCQlpZiAoc3RhdHVzID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGwoYWRhcHRlciwgMCwgNzAsIE5VTEwpOworCQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuX2FsbChhZGFwdGVyLCAwLCAiZXJzZmFfMSIsIE5VTEwpOwogCQllbHNlCi0JCQlfemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgNzEsIE5VTEwpOworCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJlcnNmYV8yIiwgTlVMTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlRfRk9SQ0VEOgogCQlpZiAoc3RhdHVzID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCA3MiwgTlVMTCk7CisJCQlfemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgImVyc2ZhXzMiLCBOVUxMKTsKIAkJZWxzZQotCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDczLCBOVUxMKTsKKwkJCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZXJzZmFfNCIsIE5VTEwpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOgogCQlpZiAoc3RhdHVzID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJCV96ZmNwX2VycF91bml0X3Jlb3Blbl9hbGwocG9ydCwgMCwgNzQsIE5VTEwpOworCQkJX3pmY3BfZXJwX3VuaXRfcmVvcGVuX2FsbChwb3J0LCAwLCAiZXJzZmFfNSIsIE5VTEwpOwogCQllbHNlCi0JCQlfemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsIDc1LCBOVUxMKTsKKwkJCV96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImVyc2ZhXzYiLCBOVUxMKTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKIAkJaWYgKHN0YXR1cyAhPSBaRkNQX0VSUF9TVUNDRUVERUQpCi0JCQlfemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgNzYsIE5VTEwpOworCQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsICJlcnNmYV83IiwgTlVMTCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTYxNyw3ICs2MjMsNyBAQAogCQkJCSBhZGFwdGVyLT5wZWVyX2RfaWQpOwogCWlmIChJU19FUlIocG9ydCkpIC8qIGVycm9yIG9yIHBvcnQgYWxyZWFkeSBhdHRhY2hlZCAqLwogCQlyZXR1cm47Ci0JX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsIDE1MCwgTlVMTCk7CisJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJlcmVwdHAxIiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdF9mc2ZfeGNvbmYoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKQEAgLTY0MCw5ICs2NDYsOSBAQAogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJfQogCi0JCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayg2LCBhZGFwdGVyKTsKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcmFzZngxIiwgYWRhcHRlcik7CiAJCWRvd24oJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soNywgYWRhcHRlcik7CisJCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc2Z4MiIsIGFkYXB0ZXIpOwogCQlpZiAoZXJwX2FjdGlvbi0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKQogCQkJYnJlYWs7CiAKQEAgLTY4MSw5ICs2ODcsOSBAQAogCWlmIChyZXQpCiAJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAKLQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soOCwgYWRhcHRlcik7CisJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcmFzb3gxIiwgYWRhcHRlcik7CiAJZG93bigmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKDksIGFkYXB0ZXIpOworCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc294MiIsIGFkYXB0ZXIpOwogCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIApAQCAtNzA1LDYwICs3MTEsNTkgQEAKIAlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwogfQogCi1zdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfZ2VuZXJpYyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QsCi0JCQkJCSAgICAgaW50IGNsb3NlKQorc3RhdGljIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCiB7Ci0JaW50IHJldHZhbCA9IFpGQ1BfRVJQX1NVQ0NFRURFRDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOwogCi0JaWYgKGNsb3NlKQotCQlnb3RvIGNsb3NlX29ubHk7Ci0KLQlyZXR2YWwgPSB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fcWRpbyhhY3QpOwotCWlmIChyZXR2YWwgIT0gWkZDUF9FUlBfU1VDQ0VFREVEKQotCQlnb3RvIGZhaWxlZF9xZGlvOwotCi0JcmV0dmFsID0gemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihhY3QpOwotCWlmIChyZXR2YWwgIT0gWkZDUF9FUlBfU1VDQ0VFREVEKQotCQlnb3RvIGZhaWxlZF9vcGVuZmNwOwotCi0JYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLCAmYWN0LT5hZGFwdGVyLT5zdGF0dXMpOwotCi0JcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKLQotIGNsb3NlX29ubHk6Ci0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4sCi0JCQkgICZhY3QtPmFkYXB0ZXItPnN0YXR1cyk7Ci0KLSBmYWlsZWRfb3BlbmZjcDoKIAkvKiBjbG9zZSBxdWV1ZXMgdG8gZW5zdXJlIHRoYXQgYnVmZmVycyBhcmUgbm90IGFjY2Vzc2VkIGJ5IGFkYXB0ZXIgKi8KIAl6ZmNwX3FkaW9fY2xvc2UoYWRhcHRlcik7CiAJemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKGFkYXB0ZXIpOwogCWFkYXB0ZXItPmZzZl9yZXFfc2VxX25vID0gMDsKIAkvKiBhbGwgcG9ydHMgYW5kIHVuaXRzIGFyZSBjbG9zZWQgKi8KLQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMjQsIE5VTEwsCisJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsICJlcmFzY2wxIiwgTlVMTCwKIAkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4sIFpGQ1BfQ0xFQVIpOwotIGZhaWxlZF9xZGlvOgorCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LIHwKLQkJCSAgWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKLQkJCSAgJmFjdC0+YWRhcHRlci0+c3RhdHVzKTsKLQlyZXR1cm4gcmV0dmFsOworCQkJICBaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELCAmYWRhcHRlci0+c3RhdHVzKTsKK30KKworc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW4oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQoreworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CisKKwlpZiAoemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX3FkaW8oYWN0KSkgeworCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1hDT05GSUdfT0sgfAorCQkJCSAgWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKKwkJCQkgICZhZGFwdGVyLT5zdGF0dXMpOworCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOworCX0KKworCWlmICh6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmKGFjdCkpIHsKKwkJemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZShhY3QpOworCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOworCX0KKworCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fT1BFTiwgJmFkYXB0ZXItPnN0YXR1cyk7CisKKwlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3koc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewotCWludCByZXR2YWw7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKIAotCXpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfZ2VuZXJpYyhhY3QsIDEpOyAvKiBjbG9zZSAqLwotCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9DTE9TRV9PTkxZKQotCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKKwlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikgeworCQl6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X2Nsb3NlKGFjdCk7CisJCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9DTE9TRV9PTkxZKQorCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CisJfQogCi0JcmV0dmFsID0gemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9nZW5lcmljKGFjdCwgMCk7IC8qIG9wZW4gKi8KLQotCWlmIChyZXR2YWwgPT0gWkZDUF9FUlBfRkFJTEVEKQorCWlmICh6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW4oYWN0KSkgewogCQlzc2xlZXAoOCk7CisJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CisJfQogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3N0cmF0ZWd5X2Nsb3NlKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKQEAgLTc3NywxMCArNzgyLDcgQEAKIAogc3RhdGljIHZvaWQgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQgfAotCQkJICBaRkNQX1NUQVRVU19QT1JUX1BIWVNfQ0xPU0lORyB8Ci0JCQkgIFpGQ1BfU1RBVFVTX1BPUlRfSU5WQUxJRF9XV1BOLAotCQkJICAmcG9ydC0+c3RhdHVzKTsKKwlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0RFTklFRCwgJnBvcnQtPnN0YXR1cyk7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9mb3JjZWRfc3RyYXRlZ3koc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKQEAgLTgzNiw3ICs4MzgsNyBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBhY3QtPnBvcnQ7CiAKIAlpZiAocG9ydC0+d3dwbiAhPSBhZGFwdGVyLT5wZWVyX3d3cG4pIHsKLQkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgMjUsIE5VTEwpOworCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0LCAiZXJvcHRwMSIsIE5VTEwpOwogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCX0KIAlwb3J0LT5kX2lkID0gYWRhcHRlci0+cGVlcl9kX2lkOwpAQCAtODU1LDcgKzg1Nyw3IEBACiAJcG9ydC0+ZXJwX2FjdGlvbi5zdGVwID0gWkZDUF9FUlBfU1RFUF9OQU1FU0VSVkVSX0xPT0tVUDsKIAlpZiAocmV0dmFsKQogCQl6ZmNwX2VycF9ub3RpZnkoJnBvcnQtPmVycF9hY3Rpb24sIFpGQ1BfRVJQX0ZBSUxFRCk7Ci0KKwl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9jb21tb24oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQpAQCAtODcxLDE3ICs4NzMsMTUgQEAKIAkJaWYgKGZjX2hvc3RfcG9ydF90eXBlKGFkYXB0ZXItPnNjc2lfaG9zdCkgPT0gRkNfUE9SVFRZUEVfUFRQKQogCQkJcmV0dXJuIHpmY3BfZXJwX29wZW5fcHRwX3BvcnQoYWN0KTsKIAkJaWYgKCFwb3J0LT5kX2lkKSB7Ci0JCQlxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcG9ydC0+Z2lkX3BuX3dvcmspOworCQkJemZjcF9wb3J0X2dldChwb3J0KTsKKwkJCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwKKwkJCQkJJnBvcnQtPmdpZF9wbl93b3JrKSkKKwkJCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0NPTlRJTlVFUzsKIAkJfQogCWNhc2UgWkZDUF9FUlBfU1RFUF9OQU1FU0VSVkVSX0xPT0tVUDoKLQkJaWYgKCFwb3J0LT5kX2lkKSB7Ci0JCQlpZiAocF9zdGF0dXMgJiAoWkZDUF9TVEFUVVNfUE9SVF9JTlZBTElEX1dXUE4pKSB7Ci0JCQkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgMjYsIE5VTEwpOwotCQkJCXJldHVybiBaRkNQX0VSUF9FWElUOwotCQkJfQorCQlpZiAoIXBvcnQtPmRfaWQpCiAJCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwotCQl9CiAJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChhY3QpOwogCiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfT1BFTklORzoKQEAgLTk5NSw3ICs5OTUsNyBAQAogCQkJCSJwb3J0IDB4JTAxNkx4XG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+ZmNwX2x1biwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwotCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMjEsIE5VTEwpOworCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgImVydXNjazEiLCBOVUxMKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCQkJZGV2X2VycigmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJCSJFUlAgZmFpbGVkIGZvciByZW1vdGUgcG9ydCAweCUwMTZMeFxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBvcnQtPnd3cG4pOwotCQkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgMjIsIE5VTEwpOworCQkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgImVycHNjazEiLCBOVUxMKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCQkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJCSJFUlAgY2Fubm90IHJlY292ZXIgYW4gZXJyb3IgIgogCQkJCSJvbiB0aGUgRkNQIGRldmljZVxuIik7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChhZGFwdGVyLCAyMywgTlVMTCk7CisJCQl6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChhZGFwdGVyLCAiZXJhc2NrMSIsIE5VTEwpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTExMTcsNyArMTExNyw3IEBACiAJCWlmICh6ZmNwX2VycF9zdHJhdF9jaGFuZ2VfZGV0KCZhZGFwdGVyLT5zdGF0dXMsIGVycF9zdGF0dXMpKSB7CiAJCQlfemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwKIAkJCQkJCSBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJCSA2NywgTlVMTCk7CisJCQkJCQkgImVyc3NjZzEiLCBOVUxMKTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCWJyZWFrOwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAKIAkJaWYgKHpmY3BfZXJwX3N0cmF0X2NoYW5nZV9kZXQoJnBvcnQtPnN0YXR1cywgZXJwX3N0YXR1cykpIHsKIAkJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LAogCQkJCQkgICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJICAgICAgNjgsIE5VTEwpOworCQkJCQkgICAgICAiZXJzc2NnMiIsIE5VTEwpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCQlpZiAoemZjcF9lcnBfc3RyYXRfY2hhbmdlX2RldCgmdW5pdC0+c3RhdHVzLCBlcnBfc3RhdHVzKSkgewogCQkJX3pmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsCiAJCQkJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQkgICAgICA2OSwgTlVMTCk7CisJCQkJCSAgICAgICJlcnNzY2czIiwgTlVMTCk7CiAJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJfQogCQlicmVhazsKQEAgLTExNTUsNyArMTE1NSw3IEBACiAJfQogCiAJbGlzdF9kZWwoJmVycF9hY3Rpb24tPmxpc3QpOwotCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oMTQ0LCBlcnBfYWN0aW9uKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcmFjdGQxIiwgZXJwX2FjdGlvbik7CiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPmFjdGlvbikgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgpAQCAtMTIxNCwzOCArMTIxNCw4IEBACiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfU0NTSV9XT1JLX1BFTkRJTkcsICZ1bml0LT5zdGF0dXMpOwogCUlOSVRfV09SSygmcC0+d29yaywgemZjcF9lcnBfc2NzaV9zY2FuKTsKIAlwLT51bml0ID0gdW5pdDsKLQlxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcC0+d29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHpmY3BfZXJwX3Jwb3J0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKLQlpZHMubm9kZV9uYW1lID0gcG9ydC0+d3dubjsKLQlpZHMucG9ydF9uYW1lID0gcG9ydC0+d3dwbjsKLQlpZHMucG9ydF9pZCA9IHBvcnQtPmRfaWQ7Ci0JaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUOwotCXBvcnQtPnJwb3J0ID0gZmNfcmVtb3RlX3BvcnRfYWRkKHBvcnQtPmFkYXB0ZXItPnNjc2lfaG9zdCwgMCwgJmlkcyk7Ci0JaWYgKCFwb3J0LT5ycG9ydCkgewotCQlkZXZfZXJyKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCi0JCQkiUmVnaXN0ZXJpbmcgcG9ydCAweCUwMTZMeCBmYWlsZWRcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXBvcnQtPnd3cG4pOwotCQlyZXR1cm47Ci0JfQotCi0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcG9ydC0+cnBvcnQtPmRldik7Ci0JcG9ydC0+cnBvcnQtPm1heGZyYW1lX3NpemUgPSBwb3J0LT5tYXhmcmFtZV9zaXplOwotCXBvcnQtPnJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IHBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzOwotfQotCi1zdGF0aWMgdm9pZCB6ZmNwX2VycF9ycG9ydHNfZGVsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkgewotCQlpZiAoIXBvcnQtPnJwb3J0KQotCQkJY29udGludWU7Ci0JCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShwb3J0LT5ycG9ydCk7Ci0JCXBvcnQtPnJwb3J0ID0gTlVMTDsKLQl9CisJaWYgKCFxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcC0+d29yaykpCisJCXpmY3BfdW5pdF9wdXQodW5pdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9jbGVhbnVwKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCwgaW50IHJlc3VsdCkKQEAgLTEyNTYsMTAgKzEyMjYsOCBAQAogCiAJc3dpdGNoIChhY3QtPmFjdGlvbikgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgotCQlpZiAoKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpICYmCi0JCSAgICAhdW5pdC0+ZGV2aWNlICYmIHBvcnQtPnJwb3J0KSB7Ci0JCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVELAotCQkJCQkmdW5pdC0+c3RhdHVzKTsKKwkJZmx1c2hfd29yaygmcG9ydC0+cnBvcnRfd29yayk7CisJCWlmICgocmVzdWx0ID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkgJiYgIXVuaXQtPmRldmljZSkgewogCQkJaWYgKCEoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgogCQkJICAgICAgWkZDUF9TVEFUVVNfVU5JVF9TQ1NJX1dPUktfUEVORElORykpCiAJCQkJemZjcF9lcnBfc2NoZWR1bGVfd29yayh1bml0KTsKQEAgLTEyNjksMjcgKzEyMzcsMTcgQEAKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfUE9SVF9OT19XV1BOKSB7Ci0JCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICgocmVzdWx0ID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkgJiYgIXBvcnQtPnJwb3J0KQotCQkJemZjcF9lcnBfcnBvcnRfcmVnaXN0ZXIocG9ydCk7Ci0JCWlmICgocmVzdWx0ICE9IFpGQ1BfRVJQX1NVQ0NFRURFRCkgJiYgcG9ydC0+cnBvcnQpIHsKLQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShwb3J0LT5ycG9ydCk7Ci0JCQlwb3J0LT5ycG9ydCA9IE5VTEw7Ci0JCX0KKwkJaWYgKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpCisJCQl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIocG9ydCk7CiAJCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0FEQVBURVI6Ci0JCWlmIChyZXN1bHQgIT0gWkZDUF9FUlBfU1VDQ0VFREVEKSB7Ci0JCQl1bnJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJmFkYXB0ZXItPnNlcnZpY2VfbGV2ZWwpOwotCQkJemZjcF9lcnBfcnBvcnRzX2RlbChhZGFwdGVyKTsKLQkJfSBlbHNlIHsKKwkJaWYgKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpIHsKIAkJCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJmFkYXB0ZXItPnNlcnZpY2VfbGV2ZWwpOwogCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKLQkJfQorCQl9IGVsc2UKKwkJCXVucmVnaXN0ZXJfc2VydmljZV9sZXZlbCgmYWRhcHRlci0+c2VydmljZV9sZXZlbCk7CiAJCXpmY3BfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiAJCWJyZWFrOwogCX0KQEAgLTEzNDYsNyArMTMwNCw3IEBACiAJCQllcnBfYWN0aW9uLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRVJQX0xPV01FTTsKIAkJfQogCQlpZiAoYWRhcHRlci0+ZXJwX3RvdGFsX2NvdW50ID09IGFkYXB0ZXItPmVycF9sb3dfbWVtX2NvdW50KQotCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDY2LCBOVUxMKTsKKwkJCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZXJzdGd5MSIsIE5VTEwpOwogCQllbHNlIHsKIAkJCXpmY3BfZXJwX3N0cmF0ZWd5X21lbXdhaXQoZXJwX2FjdGlvbik7CiAJCQlyZXR2YWwgPSBaRkNQX0VSUF9DT05USU5VRVM7CkBAIC0xNDA2LDkgKzEzNjQsOSBAQAogCQkJCXpmY3BfZXJwX3dha2V1cChhZGFwdGVyKTsKIAkJfQogCi0JCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayg0LCBhZGFwdGVyKTsKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcnRocmQxIiwgYWRhcHRlcik7CiAJCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZSgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayg1LCBhZGFwdGVyKTsKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcnRocmQyIiwgYWRhcHRlcik7CiAJfQogCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX1VQLCAmYWRhcHRlci0+c3RhdHVzKTsKQEAgLTE0NTMsNyArMTQxMSw3IEBACiB7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMLCAmYWRhcHRlci0+c3RhdHVzKTsKIAl1cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKDMsIGFkYXB0ZXIpOworCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJ0aHJrMSIsIGFkYXB0ZXIpOwogCiAJd2FpdF9ldmVudChhZGFwdGVyLT5lcnBfdGhyZWFkX3dxaCwKIAkJICAgIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCkBAIC0xNDY5LDcgKzE0MjcsNyBAQAogICogQGlkOiBFdmVudCBpZCBmb3IgZGVidWcgdHJhY2UuCiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlLgogICovCi12b2lkIHpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIGlkLCByZWYsCiAJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBaRkNQX1NFVCk7CkBAIC0xNDgxLDcgKzE0MzksNyBAQAogICogQGlkOiBFdmVudCBpZCBmb3IgZGVidWcgdHJhY2UuCiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlLgogICovCi12b2lkIHpmY3BfZXJwX3BvcnRfZmFpbGVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3BvcnRfZmFpbGVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHBvcnQsIGlkLCByZWYsCiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBaRkNQX1NFVCk7CkBAIC0xNDkzLDcgKzE0NTEsNyBAQAogICogQGlkOiBFdmVudCBpZCBmb3IgZGVidWcgdHJhY2UuCiAgKiBAcmVmOiBSZWZlcmVuY2UgZm9yIGRlYnVnIHRyYWNlLgogICovCi12b2lkIHpmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIGlkLCByZWYsCiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBaRkNQX1NFVCk7CkBAIC0xNTIwLDcgKzE0NzgsNyBAQAogICoKICAqIENoYW5nZXMgaW4gY29tbW9uIHN0YXR1cyBiaXRzIGFyZSBwcm9wYWdhdGVkIHRvIGF0dGFjaGVkIHBvcnRzIGFuZCB1bml0cy4KICAqLwotdm9pZCB6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdTggaWQsCit2b2lkIHpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBjaGFyICppZCwKIAkJCQkgICAgdm9pZCAqcmVmLCB1MzIgbWFzaywgaW50IHNldF9vcl9jbGVhcikKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwpAQCAtMTU1NCw3ICsxNTEyLDcgQEAKICAqCiAgKiBDaGFuZ2VzIGluIGNvbW1vbiBzdGF0dXMgYml0cyBhcmUgcHJvcGFnYXRlZCB0byBhdHRhY2hlZCB1bml0cy4KICAqLwotdm9pZCB6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgdTggaWQsIHZvaWQgKnJlZiwKK3ZvaWQgemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGNoYXIgKmlkLCB2b2lkICpyZWYsCiAJCQkJIHUzMiBtYXNrLCBpbnQgc2V0X29yX2NsZWFyKQogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CkBAIC0xNTg2LDcgKzE1NDQsNyBAQAogICogQG1hc2s6IHN0YXR1cyBiaXRzIHRvIGNoYW5nZQogICogQHNldF9vcl9jbGVhcjogWkZDUF9TRVQgb3IgWkZDUF9DTEVBUgogICovCi12b2lkIHpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyhzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCBpZCwgdm9pZCAqcmVmLAordm9pZCB6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgY2hhciAqaWQsIHZvaWQgKnJlZiwKIAkJCQkgdTMyIG1hc2ssIGludCBzZXRfb3JfY2xlYXIpCiB7CiAJaWYgKHNldF9vcl9jbGVhciA9PSBaRkNQX1NFVCkgewpAQCAtMTYwOSw3ICsxNTY3LDcgQEAKICAqIEBpZDogVGhlIGRlYnVnIHRyYWNlIGlkLgogICogQGlkOiBSZWZlcmVuY2UgZm9yIHRoZSBkZWJ1ZyB0cmFjZS4KICAqLwotdm9pZCB6ZmNwX2VycF9wb3J0X2JveGVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3BvcnRfYm94ZWQoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgY2hhciAqaWQsIHZvaWQgKnJlZikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNjI2LDcgKzE1ODQsNyBAQAogICogQGlkOiBUaGUgZGVidWcgdHJhY2UgaWQuCiAgKiBAaWQ6IFJlZmVyZW5jZSBmb3IgdGhlIGRlYnVnIHRyYWNlLgogICovCi12b2lkIHpmY3BfZXJwX3VuaXRfYm94ZWQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggaWQsIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfdW5pdF9ib3hlZChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCBpZCwgcmVmLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVELCBaRkNQX1NFVCk7CkBAIC0xNjQyLDcgKzE2MDAsNyBAQAogICogU2luY2UgdGhlIGFkYXB0ZXIgaGFzIGRlbmllZCBhY2Nlc3MsIHN0b3AgdXNpbmcgdGhlIHBvcnQgYW5kIHRoZQogICogYXR0YWNoZWQgdW5pdHMuCiAgKi8KLXZvaWQgemZjcF9lcnBfcG9ydF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHU4IGlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBjaGFyICppZCwgdm9pZCAqcmVmKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE2NjEsMTQgKzE2MTksMTQgQEAKICAqCiAgKiBTaW5jZSB0aGUgYWRhcHRlciBoYXMgZGVuaWVkIGFjY2Vzcywgc3RvcCB1c2luZyB0aGUgdW5pdC4KICAqLwotdm9pZCB6ZmNwX2VycF91bml0X2FjY2Vzc19kZW5pZWQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggaWQsIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGNoYXIgKmlkLCB2b2lkICpyZWYpCiB7CiAJemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIGlkLCByZWYsCiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEIHwKIAkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQsIFpGQ1BfU0VUKTsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCBpZCwKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgY2hhciAqaWQsCiAJCQkJCSB2b2lkICpyZWYpCiB7CiAJaW50IHN0YXR1cyA9IGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpOwpAQCAtMTY3OSw3ICsxNjM3LDcgQEAKIAl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgaWQsIHJlZik7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgdTggaWQsCitzdGF0aWMgdm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGNoYXIgKmlkLAogCQkJCQkgdm9pZCAqcmVmKQogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CkBAIC0xNzAxLDcgKzE2NTksNyBAQAogICogQGlkOiBJZCBmb3IgZGVidWcgdHJhY2UKICAqIEByZWY6IFJlZmVyZW5jZSBmb3IgZGVidWcgdHJhY2UKICAqLwotdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGlkLAordm9pZCB6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmlkLAogCQkJCSAgICAgdm9pZCAqcmVmKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCBiNWFkZWRhLi5mNjM5OWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogRXh0ZXJuYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CiAgKi8KIAogI2lmbmRlZiBaRkNQX0VYVF9ICkBAIC0zNSwxNSArMzUsMTUgQEAKIC8qIHpmY3BfZGJmLmMgKi8KIGV4dGVybiBpbnQgemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCh1OCwgc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayh1OCwgc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKHU4LCB2b2lkICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydCh1OCwgdm9pZCAqLCBzdHJ1Y3QgemZjcF9wb3J0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQodTgsIHZvaWQgKiwgc3RydWN0IHpmY3BfdW5pdCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKHU4LCB2b2lkICosIHU4LCB1OCwgdm9pZCAqLAorZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZChjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soY2hhciAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoY2hhciAqLCB2b2lkICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydChjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfcG9ydCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF91bml0KGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF91bml0ICopOworZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIoY2hhciAqLCB2b2lkICosIHU4LCB1OCwgdm9pZCAqLAogCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCiAJCQkJICAgICAgIHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IHpmY3BfdW5pdCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24odTgsIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CitleHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKGNoYXIgKiwgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIGV4dGVybiB2b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woY29uc3QgY2hhciAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCiAJCQkJCSBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKTsKQEAgLTY2LDMxICs2NiwzNCBAQAogCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqKTsKIAogLyogemZjcF9lcnAuYyAqLwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTgsIHZvaWQgKiwKLQkJCQkJICAgdTMyLCBpbnQpOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQsIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTgsIHZvaWQgKiwgdTMyLAorZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgY2hhciAqLAorCQkJCQkgICB2b2lkICosIHUzMiwgaW50KTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCBjaGFyICosCisJCQkJICAgICAgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHN0cnVjdCB6ZmNwX3BvcnQgKiwgY2hhciAqLCB2b2lkICosIHUzMiwKIAkJCQkJaW50KTsKLWV4dGVybiBpbnQgIHpmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfc2h1dGRvd24oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfZmFpbGVkKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqLCB1OCwgdm9pZCAqLCB1MzIsCitleHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9zaHV0ZG93bihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCBjaGFyICosCisJCQkJCXZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2ZhaWxlZChzdHJ1Y3QgemZjcF9wb3J0ICosIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyhzdHJ1Y3QgemZjcF91bml0ICosIGNoYXIgKiwgdm9pZCAqLCB1MzIsCiAJCQkJCWludCk7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X3Jlb3BlbihzdHJ1Y3QgemZjcF91bml0ICosIGludCwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3VuaXQgKiwgaW50LCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X3Jlb3BlbihzdHJ1Y3QgemZjcF91bml0ICosIGludCwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9zaHV0ZG93bihzdHJ1Y3QgemZjcF91bml0ICosIGludCwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9mYWlsZWQoc3RydWN0IHpmY3BfdW5pdCAqLCBjaGFyICosIHZvaWQgKik7CiBleHRlcm4gaW50ICB6ZmNwX2VycF90aHJlYWRfc2V0dXAoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX3RocmVhZF9raWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF93YWl0KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF9ub3RpZnkoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfYm94ZWQoc3RydWN0IHpmY3BfcG9ydCAqLCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYm94ZWQoc3RydWN0IHpmY3BfdW5pdCAqLCB1OCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICosIHU4LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTgsIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2JveGVkKHN0cnVjdCB6ZmNwX3BvcnQgKiwgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9ib3hlZChzdHJ1Y3QgemZjcF91bml0ICosIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICosIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF91bml0ICosIGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfYWRhcHRlciAqLCBjaGFyICosCisJCQkJCSAgICB2b2lkICopOwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiAKQEAgLTEwMSw2ICsxMDQsNyBAQAogZXh0ZXJuIGludCB6ZmNwX2ZjX25zX2dpZF9wbihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wbG9naV9ldmFsdWF0ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCBmc2ZfcGxvZ2kgKik7CiBleHRlcm4gdm9pZCB6ZmNwX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOworZXh0ZXJuIHZvaWQgemZjcF9mY19saW5rX3Rlc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX25hbWVzZXJ2ZXJfaW5pdChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogCiAvKiB6ZmNwX2ZzZi5jICovCkBAIC0xMjUsMTYgKzEyOSwxMyBAQAogZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2N0KHN0cnVjdCB6ZmNwX3NlbmRfY3QgKiwgbWVtcG9vbF90ICosCiAJCQkgICAgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIGV4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9lbHMoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKik7Ci1leHRlcm4gaW50IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayhzdHJ1Y3QgemZjcF9hZGFwdGVyICosCi0JCQkJCSAgc3RydWN0IHpmY3BfdW5pdCAqLAotCQkJCQkgIHN0cnVjdCBzY3NpX2NtbmQgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2soc3RydWN0IHpmY3BfdW5pdCAqLAorCQkJCQkgIHN0cnVjdCBzY3NpX2NtbmQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZzZl9yZXFfY29tcGxldGUoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZnNmX3JlcV9mcmVlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2Zfc2VuZF9mY3BfY3RtKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkJCSAgc3RydWN0IHpmY3BfdW5pdCAqLCB1OCwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9zZW5kX2ZjcF9jdG0oc3RydWN0IHpmY3BfdW5pdCAqLCB1OCk7CiBleHRlcm4gc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2ZfYWJvcnRfZmNwX2NvbW1hbmQodW5zaWduZWQgbG9uZywKLQkJCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCi0JCQkJCQkgICAgICAgc3RydWN0IHpmY3BfdW5pdCAqLCBpbnQpOworCQkJCQkJICAgICAgIHN0cnVjdCB6ZmNwX3VuaXQgKik7CiAKIC8qIHpmY3BfcWRpby5jICovCiBleHRlcm4gaW50IHpmY3BfcWRpb19hbGxvY2F0ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwpAQCAtMTUzLDYgKzE1NCwxMCBAQAogZXh0ZXJuIHZvaWQgemZjcF9hZGFwdGVyX3Njc2lfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIGNoYXIgKnpmY3BfZ2V0X2ZjcF9zbnNfaW5mb19wdHIoc3RydWN0IGZjcF9yc3BfaXUgKik7CiBleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHpmY3BfdHJhbnNwb3J0X2Z1bmN0aW9uczsKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9ycG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICopOworZXh0ZXJuIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKik7CitleHRlcm4gdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRzX2Jsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiAKIC8qIHpmY3Bfc3lzZnMuYyAqLwogZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgemZjcF9zeXNmc191bml0X2F0dHJzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IGVhYmRmZTIuLmFhYjgxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRmlicmUgQ2hhbm5lbCByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgdGhlIHpmY3AgZGV2aWNlIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAwOQogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC05OCw4ICs5OCwxMiBAQAogCXN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCA9CiAJCQljb250YWluZXJfb2YoZHcsIHN0cnVjdCB6ZmNwX3drYV9wb3J0LCB3b3JrKTsKIAotCXdhaXRfZXZlbnQod2thX3BvcnQtPmNvbXBsZXRpb25fd3EsCi0JCQlhdG9taWNfcmVhZCgmd2thX3BvcnQtPnJlZmNvdW50KSA9PSAwKTsKKwkvKiBEb24ndCB3YWl0IGZvcnZldmVyLiBJZiB0aGUgd2thX3BvcnQgaXMgdG9vIGJ1c3kgdGFrZSBpdCBvZmZsaW5lCisJICAgdGhyb3VnaCBhIG5ldyBjYWxsIGxhdGVyICovCisJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQod2thX3BvcnQtPmNvbXBsZXRpb25fd3EsCisJCQkJYXRvbWljX3JlYWQoJndrYV9wb3J0LT5yZWZjb3VudCkgPT0gMCwKKwkJCQlIWiA+PiAxKSkKKwkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmd2thX3BvcnQtPm11dGV4KTsKIAlpZiAoKGF0b21pY19yZWFkKCZ3a2FfcG9ydC0+cmVmY291bnQpICE9IDApIHx8CkBAIC0xNDUsMTYgKzE0OSwxMCBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmZnNmX3JlcS0+YWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpIHsKLQkJaWYgKCEoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19QT1JUX1BIWVNfT1BFTikpCi0JCQkvKiBUcnkgdG8gY29ubmVjdCB0byB1bnVzZWQgcG9ydHMgYW55d2F5LiAqLwotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwKLQkJCQkJICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJICAgICA4MiwgZnNmX3JlcSk7Ci0JCWVsc2UgaWYgKChwb3J0LT5kX2lkICYgcmFuZ2UpID09IChlbGVtLT5ucG9ydF9kaWQgJiByYW5nZSkpCi0JCQkvKiBDaGVjayBjb25uZWN0aW9uIHN0YXR1cyBmb3IgY29ubmVjdGVkIHBvcnRzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmZnNmX3JlcS0+YWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpCisJCWlmICgocG9ydC0+ZF9pZCAmIHJhbmdlKSA9PSAoZWxlbS0+bnBvcnRfZGlkICYgcmFuZ2UpKQogCQkJemZjcF90ZXN0X2xpbmsocG9ydCk7Ci0JfQorCiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTE5Niw3ICsxOTQsNyBAQAogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHBvcnQgJiYgKHBvcnQtPnd3cG4gPT0gd3dwbikpCi0JCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCA4MywgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsICJmY2l3d3AxIiwgcmVxKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mY19pbmNvbWluZ19wbG9naShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCkBAIC0yNTksMTAgKzI1Nyw5IEBACiAKIAlpZiAoY3QtPnN0YXR1cykKIAkJcmV0dXJuOwotCWlmIChjdF9pdV9yZXNwLT5oZWFkZXIuY21kX3JzcF9jb2RlICE9IFpGQ1BfQ1RfQUNDRVBUKSB7Ci0JCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19QT1JUX0lOVkFMSURfV1dQTiwgJnBvcnQtPnN0YXR1cyk7CisJaWYgKGN0X2l1X3Jlc3AtPmhlYWRlci5jbWRfcnNwX2NvZGUgIT0gWkZDUF9DVF9BQ0NFUFQpCiAJCXJldHVybjsKLQl9CisKIAkvKiBwYXJhbm9pYSAqLwogCWlmIChjdF9pdV9yZXEtPnd3cG4gIT0gcG9ydC0+d3dwbikKIAkJcmV0dXJuOwpAQCAtMzc1LDE2ICszNzIsMjIgQEAKIAogCWlmIChhZGlzYy0+ZWxzLnN0YXR1cykgewogCQkvKiByZXF1ZXN0IHJlamVjdGVkIG9yIHRpbWVkIG91dCAqLwotCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgNjMsIE5VTEwpOworCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImZjYWRoXzEiLCBOVUxMKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFwb3J0LT53d25uKQogCQlwb3J0LT53d25uID0gbHNfYWRpc2MtPnd3bm47CiAKLQlpZiAocG9ydC0+d3dwbiAhPSBsc19hZGlzYy0+d3dwbikKLQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgNjQsIE5VTEwpOworCWlmICgocG9ydC0+d3dwbiAhPSBsc19hZGlzYy0+d3dwbikgfHwKKwkgICAgIShhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkgeworCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkgICAgICJmY2FkaF8yIiwgTlVMTCk7CisJCWdvdG8gb3V0OworCX0KIAorCS8qIHBvcnQgaXMgZ29vZCwgdW5ibG9jayBycG9ydCB3aXRob3V0IGdvaW5nIHRocm91Z2ggZXJwICovCisJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwogIG91dDoKIAl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogCWtmcmVlKGFkaXNjKTsKQEAgLTQyMiw2ICs0MjUsMzEgQEAKIAlyZXR1cm4gemZjcF9mc2Zfc2VuZF9lbHMoJmFkaXNjLT5lbHMpOwogfQogCit2b2lkIHpmY3BfZmNfbGlua190ZXN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfcG9ydCwgdGVzdF9saW5rX3dvcmspOworCWludCByZXR2YWw7CisKKwlpZiAoIShhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSB7CisJCXpmY3BfcG9ydF9wdXQocG9ydCk7CisJCXJldHVybjsgLyogcG9ydCBlcnAgaXMgcnVubmluZyBhbmQgd2lsbCB1cGRhdGUgcnBvcnQgc3RhdHVzICovCisJfQorCisJemZjcF9wb3J0X2dldChwb3J0KTsKKwlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfREVMOworCXpmY3Bfc2NzaV9ycG9ydF93b3JrKCZwb3J0LT5ycG9ydF93b3JrKTsKKworCXJldHZhbCA9IHpmY3BfZmNfYWRpc2MocG9ydCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBzZW5kIG9mIEFESVNDIHdhcyBub3QgcG9zc2libGUgKi8KKwl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImZjbHR3azEiLCBOVUxMKTsKKworCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKIC8qKgogICogemZjcF90ZXN0X2xpbmsgLSBsaWdodHdlaWdodCBsaW5rIHRlc3QgcHJvY2VkdXJlCiAgKiBAcG9ydDogcG9ydCB0byBiZSB0ZXN0ZWQKQEAgLTQzMiwxNyArNDYwLDkgQEAKICAqLwogdm9pZCB6ZmNwX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWludCByZXR2YWw7Ci0KIAl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwotCXJldHZhbCA9IHpmY3BfZmNfYWRpc2MocG9ydCk7Ci0JaWYgKHJldHZhbCA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBzZW5kIG9mIEFESVNDIHdhcyBub3QgcG9zc2libGUgKi8KLQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwotCWlmIChyZXR2YWwgIT0gLUVCVVNZKQotCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgNjUsIE5VTEwpOworCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnBvcnQtPnRlc3RfbGlua193b3JrKSkKKwkJemZjcF9wb3J0X3B1dChwb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mcmVlX3NnX2VudihzdHJ1Y3QgemZjcF9ncG5fZnQgKmdwbl9mdCwgaW50IGJ1Zl9udW0pCkBAIC01MjksNyArNTQ5LDcgQEAKIAkJemZjcF9wb3J0X3B1dChwb3J0KTsKIAkJcmV0dXJuOwogCX0KLQl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsIDE1MSwgTlVMTCk7CisJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAiZmNwdmFsMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIAl6ZmNwX3BvcnRfZGVxdWV1ZShwb3J0KTsKQEAgLTU5Miw3ICs2MTIsNyBAQAogCQlpZiAoSVNfRVJSKHBvcnQpKQogCQkJcmV0ID0gUFRSX0VSUihwb3J0KTsKIAkJZWxzZQotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgMTQ5LCBOVUxMKTsKKwkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJmY2VncGYxIiwgTlVMTCk7CiAJfQogCiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IGU2NDE2ZjguLmIyOWYzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBGU0YgY29tbWFuZHMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTIsMTEgKzEyLDE0IEBACiAjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKIAorI2RlZmluZSBaRkNQX1JFUV9BVVRPX0NMRUFOVVAJMHgwMDAwMDAwMgorI2RlZmluZSBaRkNQX1JFUV9OT19RVENCCTB4MDAwMDAwMDgKKwogc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBkYXRhOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCA2MiwKLQkJCQlOVUxMKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkiZnNydGhfMSIsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zdGFydF90aW1lcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLApAQCAtNzUsNyArNzgsNyBAQAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT53d3BuKTsKIAl6ZmNwX2FjdF9ldmFsX2VycihyZXEtPmFkYXB0ZXIsIGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLmhhbGZ3b3JkWzBdKTsKIAl6ZmNwX2FjdF9ldmFsX2VycihyZXEtPmFkYXB0ZXIsIGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLmhhbGZ3b3JkWzFdKTsKLQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQocG9ydCwgNTUsIHJlcSk7CisJemZjcF9lcnBfcG9ydF9hY2Nlc3NfZGVuaWVkKHBvcnQsICJmc3BhZF8xIiwgcmVxKTsKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiB9CiAKQEAgLTg5LDcgKzkyLDcgQEAKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+cG9ydC0+d3dwbik7CiAJemZjcF9hY3RfZXZhbF9lcnIocmVxLT5hZGFwdGVyLCBoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC5oYWxmd29yZFswXSk7CiAJemZjcF9hY3RfZXZhbF9lcnIocmVxLT5hZGFwdGVyLCBoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC5oYWxmd29yZFsxXSk7Ci0JemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHVuaXQsIDU5LCByZXEpOworCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0LCAiZnN1YWRfMSIsIHJlcSk7CiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogfQogCkBAIC05Nyw3ICsxMDAsNyBAQAogewogCWRldl9lcnIoJnJlcS0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCAiRkNQIGRldmljZSBub3QgIgogCQkib3BlcmF0aW9uYWwgYmVjYXVzZSBvZiBhbiB1bnN1cHBvcnRlZCBGQyBjbGFzc1xuIik7Ci0JemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihyZXEtPmFkYXB0ZXIsIDAsIDEyMywgcmVxKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgImZzY25zXzEiLCByZXEpOwogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIH0KIApAQCAtMTU5LDIwICsxNjIsMTMgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKIAkJaWYgKHBvcnQtPmRfaWQgPT0gZF9pZCkgewogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7Ci0JCQlzd2l0Y2ggKHNyX2J1Zi0+c3RhdHVzX3N1YnR5cGUpIHsKLQkJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9DTE9TRV9QSFlTX1BPUlQ6Ci0JCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgMTAxLCByZXEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0VSUk9SX1BPUlQ6Ci0JCQkJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAxMjIsIHJlcSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZnNzcnBjMSIsIHJlcSk7CiAJCQlyZXR1cm47CiAJCX0KIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsIHU4IGlkLAorc3RhdGljIHZvaWQgemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsIGNoYXIgKmlkLAogCQkJCQkgc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqbGlua19kb3duKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSByZXEtPmFkYXB0ZXI7CkBAIC0xODEsNiArMTc3LDcgQEAKIAkJcmV0dXJuOwogCiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQsICZhZGFwdGVyLT5zdGF0dXMpOworCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydHNfYmxvY2soYWRhcHRlcik7CiAKIAlpZiAoIWxpbmtfZG93bikKIAkJZ290byBvdXQ7CkBAIC0yNjEsMTMgKzI1OCwxMyBAQAogCiAJc3dpdGNoIChzcl9idWYtPnN0YXR1c19zdWJ0eXBlKSB7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX05PX1BIWVNJQ0FMX0xJTks6Ci0JCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAzOCwgbGRpKTsKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsICJmc3NybGQxIiwgbGRpKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZESVNDX0ZBSUxFRDoKLQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsIDM5LCBsZGkpOworCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgImZzc3JsZDIiLCBsZGkpOwogCQlicmVhazsKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfRklSTVdBUkVfVVBEQVRFOgotCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgNDAsIE5VTEwpOworCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgImZzc3JsZDMiLCBOVUxMKTsKIAl9OwogfQogCkBAIC0zMDcsMjIgKzMwNCwyMyBAQAogCQlkZXZfaW5mbygmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJICJUaGUgbG9jYWwgbGluayBoYXMgYmVlbiByZXN0b3JlZFxuIik7CiAJCS8qIEFsbCBwb3J0cyBzaG91bGQgYmUgbWFya2VkIGFzIHJlYWR5IHRvIHJ1biBhZ2FpbiAqLwotCQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMzAsIE5VTEwsCisJCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAiZnNzcmhfMSIsIE5VTEwsCiAJCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywKIAkJCQkJICAgICAgIFpGQ1BfU0VUKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwKIAkJCQkJWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCB8CiAJCQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQkxMDIsIHJlcSk7CisJCQkJCSJmc3NyaF8yIiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTk9USUZJQ0FUSU9OX0xPU1Q6CiAJCWlmIChzcl9idWYtPnN0YXR1c19zdWJ0eXBlICYgRlNGX1NUQVRVU19SRUFEX1NVQl9BQ1RfVVBEQVRFRCkKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoYWRhcHRlciwgMTM1LCByZXEpOworCQkJemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChhZGFwdGVyLCAiZnNzcmhfMyIsCisJCQkJCQkJcmVxKTsKIAkJaWYgKHNyX2J1Zi0+c3RhdHVzX3N1YnR5cGUgJiBGU0ZfU1RBVFVTX1JFQURfU1VCX0lOQ09NSU5HX0VMUykKIAkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0NGRENfVVBEQVRFRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChhZGFwdGVyLCAxMzYsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoYWRhcHRlciwgImZzc3JoXzQiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9GRUFUVVJFX1VQREFURV9BTEVSVDoKIAkJYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyA9IHNyX2J1Zi0+cGF5bG9hZC53b3JkWzBdOwpAQCAtMzUxLDcgKzM0OSw3IEBACiAJCWRldl9lcnIoJnJlcS0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIlRoZSBGQ1AgYWRhcHRlciByZXBvcnRlZCBhIHByb2JsZW0gIgogCQkJInRoYXQgY2Fubm90IGJlIHJlY292ZXJlZFxuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAxMjEsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAiZnNmc3FlMSIsIHJlcSk7CiAJCWJyZWFrOwogCX0KIAkvKiBhbGwgbm9uLXJldHVybiBzdGF0cyBzZXQgRlNGUkVRX0VSUk9SKi8KQEAgLTM2OCw3ICszNjYsNyBAQAogCQlkZXZfZXJyKCZyZXEtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgZG9lcyBub3QgcmVjb2duaXplIHRoZSBjb21tYW5kIDB4JXhcbiIsCiAJCQlyZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAxMjAsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAiZnNmc2VfMSIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgpAQCAtNDAwLDE3ICszOTgsMTcgQEAKIAkJCSJRVENCIHZlcnNpb24gMHgleCBub3Qgc3VwcG9ydGVkIGJ5IEZDUCBhZGFwdGVyICIKIAkJCSIoMHgleCB0byAweCV4KVxuIiwgRlNGX1FUQ0JfQ1VSUkVOVF9WRVJTSU9OLAogCQkJcHNxLT53b3JkWzBdLCBwc3EtPndvcmRbMV0pOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDExNywgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNwc2VfMSIsIHJlcSk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BST1RfRVJST1JfU1RBVEU6CiAJY2FzZSBGU0ZfUFJPVF9TRVFfTlVNQl9FUlJPUjoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgOTgsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3BzZV8yIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX1VOU1VQUF9RVENCX1RZUEU6CiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgUVRDQiB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEZDUCBhZGFwdGVyXG4iKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMTgsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzMiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX0hPU1RfQ09OTkVDVElPTl9JTklUSUFMSVpJTkc6CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0hPU1RfQ09OX0lOSVQsCkBAIC00MjAsMjcgKzQxOCwyOSBAQAogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiMHglTHggaXMgYW4gYW1iaWd1b3VzIHJlcXVlc3QgaWRlbnRpZmllclxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcXRjYi0+Ym90dG9tLnN1cHBvcnQucmVxX2hhbmRsZSk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgNzgsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzQiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX0xJTktfRE9XTjoKLQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsIDM3LCAmcHNxLT5saW5rX2Rvd25faW5mbyk7CisJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAiZnNwc2VfNSIsCisJCQkJCSAgICAgJnBzcS0+bGlua19kb3duX2luZm8pOwogCQkvKiBGSVhNRTogcmVvcGVuaW5nIGFkYXB0ZXIgbm93PyBiZXR0ZXIgd2FpdCBmb3IgbGluayB1cCAqLwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCA3OSwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcHNlXzYiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX1JFRVNUX1FVRVVFOgogCQkvKiBBbGwgcG9ydHMgc2hvdWxkIGJlIG1hcmtlZCBhcyByZWFkeSB0byBydW4gYWdhaW4gKi8KLQkJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIDI4LCBOVUxMLAorCQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImZzcHNlXzciLCBOVUxMLAogCQkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsCiAJCQkJCSAgICAgICBaRkNQX1NFVCk7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAotCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgOTksIHJlcSk7CisJCQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAorCQkJCQkiZnNwc2VfOCIsIHJlcSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSIweCV4IGlzIG5vdCBhIHZhbGlkIHRyYW5zZmVyIHByb3RvY29sIHN0YXR1c1xuIiwKIAkJCXF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTE5LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc3BzZV85IiwgcmVxKTsKIAl9CiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogfQpAQCAtNTI2LDcgKzUyNiw3IEBACiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGFyYml0cmF0ZWQgbG9vcCAiCiAJCQkiZmlicmUgY2hhbm5lbCB0b3BvbG9neSBkZXRlY3RlZFxuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI3LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZV8xIiwgcmVxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC01NjAsNyArNTYwLDcgQEAKIAkJCQkiRkNQIGFkYXB0ZXIgbWF4aW11bSBRVENCIHNpemUgKCVkIGJ5dGVzKSAiCiAJCQkJImlzIHRvbyBzbWFsbFxuIiwKIAkJCQlib3R0b20tPm1heF9xdGNiX3NpemUpOwotCQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMjksIHJlcSk7CisJCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGgxIiwgcmVxKTsKIAkJCXJldHVybjsKIAkJfQogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LLApAQCAtNTc3LDExICs1NzcsMTEgQEAKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWENPTkZJR19PSywKIAkJCQkmYWRhcHRlci0+c3RhdHVzKTsKIAotCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgNDIsCisJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAiZnNlY2RoMiIsCiAJCQkmcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC5saW5rX2Rvd25faW5mbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTMwLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGgzIiwgcmVxKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTk3LDE0ICs1OTcsMTQgQEAKIAkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIlRoZSBGQ1AgYWRhcHRlciBvbmx5IHN1cHBvcnRzIG5ld2VyICIKIAkJCSJjb250cm9sIGJsb2NrIHZlcnNpb25zXG4iKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMjUsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzZWNkaDQiLCByZXEpOwogCQlyZXR1cm47CiAJfQogCWlmIChGU0ZfUVRDQl9DVVJSRU5UX1ZFUlNJT04gPiBib3R0b20tPmhpZ2hfcXRjYl92ZXJzaW9uKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgb25seSBzdXBwb3J0cyBvbGRlciAiCiAJCQkiY29udHJvbCBibG9jayB2ZXJzaW9uc1xuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI2LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGg1IiwgcmVxKTsKIAl9CiB9CiAKQEAgLTYxNyw5ICs2MTcsMTAgQEAKIAlpZiAocmVxLT5kYXRhKQogCQltZW1jcHkocmVxLT5kYXRhLCBib3R0b20sIHNpemVvZigqYm90dG9tKSk7CiAKLQlpZiAoYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERSkKKwlpZiAoYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERSkgewogCQlmY19ob3N0X3Blcm1hbmVudF9wb3J0X25hbWUoc2hvc3QpID0gYm90dG9tLT53d3BuOwotCWVsc2UKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTlBJVjsKKwl9IGVsc2UKIAkJZmNfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lKHNob3N0KSA9IGZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KTsKIAlmY19ob3N0X21heGZyYW1lX3NpemUoc2hvc3QpID0gYm90dG9tLT5tYXhpbXVtX2ZyYW1lX3NpemU7CiAJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IGJvdHRvbS0+c3VwcG9ydGVkX3NwZWVkOwpAQCAtNjM4LDIwICs2MzksMTIgQEAKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfRVhDSEFOR0VfQ09ORklHX0RBVEFfSU5DT01QTEVURToKIAkJemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9ldmFsdWF0ZShyZXEpOwotCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgNDMsCisJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAiZnNlcGRoMSIsCiAJCQkmcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC5saW5rX2Rvd25faW5mbyk7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCB6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVxX3EuY291bnQpID4gMCkKLQkJcmV0dXJuIDE7Ci0JYXRvbWljX2luYygmYWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHpmY3BfZnNmX3JlcV9zYmFsX2dldChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogCV9fcmVsZWFzZXMoJmFkYXB0ZXItPnJlcV9xX2xvY2spCiAJX19hY3F1aXJlcygmYWRhcHRlci0+cmVxX3FfbG9jaykKQEAgLTczNSw3ICs3MjgsNyBAQAogCiAJcmVxLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlyZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKLQlyZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubysrOworCXJlcS0+cmVxX2lkID0gYWRhcHRlci0+cmVxX25vOwogCXJlcS0+c2JhbF9udW1iZXIgPSAxOwogCXJlcS0+c2JhbF9maXJzdCA9IHJlcV9xLT5maXJzdDsKIAlyZXEtPnNiYWxfbGFzdCA9IHJlcV9xLT5maXJzdDsKQEAgLTc5MSwxMyArNzg0LDE0IEBACiAJCWlmICh6ZmNwX3JlcWxpc3RfZmluZF9zYWZlKGFkYXB0ZXIsIHJlcSkpCiAJCQl6ZmNwX3JlcWxpc3RfcmVtb3ZlKGFkYXB0ZXIsIHJlcSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgMTE2LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNyc19fMSIsIHJlcSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIERvbid0IGluY3JlYXNlIGZvciB1bnNvbGljaXRlZCBzdGF0dXMgKi8KIAlpZiAocmVxLT5xdGNiKQogCQlhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubysrOworCWFkYXB0ZXItPnJlcV9ubysrOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NzAsMTQgKzg2NCwxNCBAQAogCXN3aXRjaCAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKIAkJaWYgKGZzcS0+d29yZFswXSA9PSBmc3EtPndvcmRbMV0pIHsKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDEwNCwKLQkJCQkJCXJlcSk7CisJCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLAorCQkJCQkJImZzYWZjaDEiLCByZXEpOwogCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRlNGX0xVTl9IQU5ETEVfTk9UX1ZBTElEOgogCQlpZiAoZnNxLT53b3JkWzBdID09IGZzcS0+d29yZFsxXSkgewotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgMTA1LCByZXEpOworCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgImZzYWZjaDIiLCByZXEpOwogCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQl9CiAJCWJyZWFrOwpAQCAtODg1LDEyICs4NzksMTIgQEAKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUTk9UTkVFREVEOwogCQlicmVhazsKIAljYXNlIEZTRl9QT1JUX0JPWEVEOgotCQl6ZmNwX2VycF9wb3J0X2JveGVkKHVuaXQtPnBvcnQsIDQ3LCByZXEpOworCQl6ZmNwX2VycF9wb3J0X2JveGVkKHVuaXQtPnBvcnQsICJmc2FmY2gzIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SIHwKIAkJCSAgICAgICBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0xVTl9CT1hFRDoKLQkJemZjcF9lcnBfdW5pdF9ib3hlZCh1bml0LCA0OCwgcmVxKTsKKwkJemZjcF9lcnBfdW5pdF9ib3hlZCh1bml0LCAiZnNhZmNoNCIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CiAJCQkgICAgICAgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTEyLDI3ICs5MDYsMjIgQEAKIC8qKgogICogemZjcF9mc2ZfYWJvcnRfZmNwX2NvbW1hbmQgLSBhYm9ydCBydW5uaW5nIFNDU0kgY29tbWFuZAogICogQG9sZF9yZXFfaWQ6IHVuc2lnbmVkIGxvbmcKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKICAqIEB1bml0OiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3VuaXQKLSAqIEByZXFfZmxhZ3M6IGludGVnZXIgc3BlY2lmeWluZyB0aGUgcmVxdWVzdCBmbGFncwogICogUmV0dXJuczogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9mc2ZfcmVxCi0gKgotICogRklYTUUoZGVzaWduKTogc2hvdWxkIGJlIHdhdGNoZWQgYnkgYSB0aW1lb3V0ICEhIQogICovCiAKIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kKHVuc2lnbmVkIGxvbmcgb2xkX3JlcV9pZCwKLQkJCQkJCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCQlzdHJ1Y3QgemZjcF91bml0ICp1bml0LAotCQkJCQkJaW50IHJlcV9mbGFncykKKwkJCQkJCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IE5VTEw7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICghemZjcF9mc2Zfc2JhbF9hdmFpbGFibGUoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQogCQlnb3RvIG91dDsKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5ELAotCQkJCSAgcmVxX2ZsYWdzLCBhZGFwdGVyLT5wb29sLmZzZl9yZXFfYWJvcnQpOworCQkJCSAgMCwgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2Fib3J0KTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmVxID0gTlVMTDsKIAkJZ290byBvdXQ7CkBAIC05NjAsNyArOTQ5LDcgQEAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCXJlcSA9IE5VTEw7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmVxOwogfQogCkBAIC05OTgsNyArOTg3LDcgQEAKIAkJCSAgICAgICBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgMTA2LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNzY3RoMSIsIHJlcSk7CiAJY2FzZSBGU0ZfR0VORVJJQ19DT01NQU5EX1JFSkVDVEVEOgogCWNhc2UgRlNGX1BBWUxPQURfU0laRV9NSVNNQVRDSDoKIAljYXNlIEZTRl9SRVFVRVNUX1NJWkVfVE9PX0xBUkdFOgpAQCAtMTE3NCwxMiArMTE2Myw4IEBACiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9zdXBwb3J0ICpib3R0b207CiAJaW50IHJldCA9IC1FSU87CiAKLQlpZiAodW5saWtlbHkoIShhdG9taWNfcmVhZCgmZWxzLT5wb3J0LT5zdGF0dXMpICYKLQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKCF6ZmNwX2ZzZl9zYmFsX2F2YWlsYWJsZShhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCiAJCWdvdG8gb3V0OwogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfU0VORF9FTFMsCiAJCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsIE5VTEwpOwpAQCAtMTIxMiw3ICsxMTk3LDcgQEAKIGZhaWxlZF9zZW5kOgogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjI0LDcgKzEyMDksNyBAQAogCWludCByZXR2YWwgPSAtRUlPOwogCiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoIXpmY3BfZnNmX3NiYWxfYXZhaWxhYmxlKGFkYXB0ZXIpKQorCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCiAJCWdvdG8gb3V0OwogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwKIAkJCQkgIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLApAQCAtMTMyMCw3ICsxMzA1LDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoIXpmY3BfZnNmX3NiYWxfYXZhaWxhYmxlKGFkYXB0ZXIpKQorCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCiAJCWdvdG8gb3V0OwogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAogCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLApAQCAtMTM2Niw3ICsxMzUxLDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoIXpmY3BfZnNmX3NiYWxfYXZhaWxhYmxlKGFkYXB0ZXIpKQorCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEEsIDAsCkBAIC0xNDE2LDcgKzE0MDEsNyBAQAogCQkJICJOb3QgZW5vdWdoIEZDUCBhZGFwdGVyIHJlc291cmNlcyB0byBvcGVuICIKIAkJCSAicmVtb3RlIHBvcnQgMHglMDE2THhcbiIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT53d3BuKTsKLQkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgMzEsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsICJmc29waF8xIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CkBAIC0xNTIyLDEzICsxNTA3LDEzIEBACiAKIAlzd2l0Y2ggKHJlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHBvcnQtPmFkYXB0ZXIsIDAsIDEwNywgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocG9ydC0+YWRhcHRlciwgMCwgImZzY3BoXzEiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0FEQVBURVJfU1RBVFVTX0FWQUlMQUJMRToKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfR09PRDoKLQkJemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHBvcnQsIDMzLCByZXEsCisJCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCAiZnNjcGhfMiIsIHJlcSwKIAkJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLAogCQkJCQkgICAgWkZDUF9DTEVBUik7CiAJCWJyZWFrOwpAQCAtMTY1Nyw3ICsxNjQyLDcgQEAKIAogCWlmIChyZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzID09IEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQpIHsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih3a2FfcG9ydC0+YWRhcHRlciwgMCwgODQsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHdrYV9wb3J0LT5hZGFwdGVyLCAwLCAiZnNjd3BoMSIsIHJlcSk7CiAJfQogCiAJd2thX3BvcnQtPnN0YXR1cyA9IFpGQ1BfV0tBX1BPUlRfT0ZGTElORTsKQEAgLTE3MTIsMTggKzE2OTcsMTggQEAKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCiAJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQotCQlnb3RvIHNraXBfZnNmc3RhdHVzOworCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocG9ydC0+YWRhcHRlciwgMCwgMTA4LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAiZnNjcHBoMSIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfQUNDRVNTX0RFTklFRDoKIAkJemZjcF9mc2ZfYWNjZXNzX2RlbmllZF9wb3J0KHJlcSwgcG9ydCk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfQk9YRUQ6Ci0JCXpmY3BfZXJwX3BvcnRfYm94ZWQocG9ydCwgNTAsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfYm94ZWQocG9ydCwgImZzY3BwaDIiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJICAgICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJLyogY2FuJ3QgdXNlIGdlbmVyaWMgemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzIGJlY2F1c2UKQEAgLTE3NTIsOCArMTczNyw2IEBACiAJCQkJCSAgJnVuaXQtPnN0YXR1cyk7CiAJCWJyZWFrOwogCX0KLXNraXBfZnNmc3RhdHVzOgotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfUEhZU19DTE9TSU5HLCAmcG9ydC0+c3RhdHVzKTsKIH0KIAogLyoqCkBAIC0xNzg5LDggKzE3NzIsNiBAQAogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY2xvc2VfcGh5c2ljYWxfcG9ydF9oYW5kbGVyOwogCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7Ci0JYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfUEhZU19DTE9TSU5HLAotCQkJJmVycF9hY3Rpb24tPnBvcnQtPnN0YXR1cyk7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwpAQCAtMTgyNSw3ICsxODA2LDcgQEAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAxMDksIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc291aF8xIiwgcmVxKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBGU0ZfTFVOX0FMUkVBRFlfT1BFTjoKIAkJYnJlYWs7CkBAIC0xODM1LDcgKzE4MTYsNyBAQAogCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFQURPTkxZLCAmdW5pdC0+c3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUE9SVF9CT1hFRDoKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA1MSwgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCAiZnNvdWhfMiIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CiAJCQkgICAgICAgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTE4NTEsNyArMTgzMiw3IEBACiAJCWVsc2UKIAkJCXpmY3BfYWN0X2V2YWxfZXJyKGFkYXB0ZXIsCiAJCQkJCSAgaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFsyXSk7Ci0JCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0LCA2MCwgcmVxKTsKKwkJemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHVuaXQsICJmc291aF8zIiwgcmVxKTsKIAkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfVU5JVF9TSEFSRUQsICZ1bml0LT5zdGF0dXMpOwogCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFQURPTkxZLCAmdW5pdC0+c3RhdHVzKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpAQCAtMTg2Miw3ICsxODQzLDcgQEAKIAkJCSAiMHglMDE2THggb24gcG9ydCAweCUwMTZMeFxuIiwKIAkJCSAodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl1bml0LT5wb3J0LT53d3BuKTsKLQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMzQsIHJlcSk7CisJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsICJmc291aF80IiwgcmVxKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBGU0ZfSU5WQUxJRF9DT01NQU5EX09QVElPTjoKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpAQCAtMTkxMSw5ICsxODkyLDkgQEAKIAkJCQkJInBvcnQgMHglMDE2THgpXG4iLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPmZjcF9sdW4sCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+cG9ydC0+d3dwbik7Ci0JCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMzUsIHJlcSk7CisJCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgImZzb3VoXzUiLCByZXEpOwogCQkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKLQkJCQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsIDgwLCByZXEpOworCQkJCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCwgImZzb3VoXzYiLCByZXEpOwogICAgICAgICAJCX0gZWxzZSBpZiAoIWV4Y2x1c2l2ZSAmJiByZWFkd3JpdGUpIHsKIAkJCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkJCSJTaGFyZWQgcmVhZC13cml0ZSBhY2Nlc3Mgbm90ICIKQEAgLTE5MjEsOSArMTkwMiw5IEBACiAJCQkJCSIweCUwMTZMeClcbiIsCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+ZmNwX2x1biwKIAkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl1bml0LT5wb3J0LT53d3BuKTsKLQkJCQl6ZmNwX2VycF91bml0X2ZhaWxlZCh1bml0LCAzNiwgcmVxKTsKKwkJCQl6ZmNwX2VycF91bml0X2ZhaWxlZCh1bml0LCAiZnNvdWhfNyIsIHJlcSk7CiAJCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwotCQkJCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCwgODEsIHJlcSk7CisJCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAiZnNvdWhfOCIsIHJlcSk7CiAgICAgICAgIAkJfQogCQl9CiAJCWJyZWFrOwpAQCAtMTk4OCwxNSArMTk2OSwxNSBAQAogCiAJc3dpdGNoIChyZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKSB7CiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAxMTAsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc2N1aF8xIiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9MVU5fSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgMTExLCByZXEpOworCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwLCAiZnNjdWhfMiIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUE9SVF9CT1hFRDoKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA1MiwgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCAiZnNjdWhfMyIsIHJlcSk7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CiAJCQkgICAgICAgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTIwNzMsNyArMjA1NCw2IEBACiAJc3RydWN0IGZzZl9xdWFsX2xhdGVuY3lfaW5mbyAqbGF0X2luZjsKIAlzdHJ1Y3QgbGF0ZW5jeV9jb250ICpsYXQ7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IHJlcS0+dW5pdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbGF0X2luZiA9ICZyZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLmxhdGVuY3lfaW5mbzsKIApAQCAtMjA5MSwxMSArMjA3MSwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVuaXQtPmxhdGVuY2llcy5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZ1bml0LT5sYXRlbmNpZXMubG9jayk7CiAJemZjcF9mc2ZfdXBkYXRlX2xhdCgmbGF0LT5jaGFubmVsLCBsYXRfaW5mLT5jaGFubmVsX2xhdCk7CiAJemZjcF9mc2ZfdXBkYXRlX2xhdCgmbGF0LT5mYWJyaWMsIGxhdF9pbmYtPmZhYnJpY19sYXQpOwogCWxhdC0+Y291bnRlcisrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVuaXQtPmxhdGVuY2llcy5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnVuaXQtPmxhdGVuY2llcy5sb2NrKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFCkBAIC0yMTQ3LDcgKzIxMjcsNiBAQAogCiAJaWYgKHVubGlrZWx5KHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JURUQpKSB7CiAJCXNldF9ob3N0X2J5dGUoc2NwbnQsIERJRF9TT0ZUX0VSUk9SKTsKLQkJc2V0X2RyaXZlcl9ieXRlKHNjcG50LCBTVUdHRVNUX1JFVFJZKTsKIAkJZ290byBza2lwX2ZzZnN0YXR1czsKIAl9CiAKQEAgLTIyMzcsMTIgKzIyMTYsMTIgQEAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX0hBTkRMRV9NSVNNQVRDSDoKIAljYXNlIEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDExMiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgImZzc2ZjaDEiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0ZDUExVTl9OT1RfVkFMSUQ6CiAJY2FzZSBGU0ZfTFVOX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsIDExMywgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgImZzc2ZjaDIiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NFUlZJQ0VfQ0xBU1NfTk9UX1NVUFBPUlRFRDoKQEAgLTIyNTgsNyArMjIzNyw4IEBACiAJCQlyZXEtPnF0Y2ItPmJvdHRvbS5pby5kYXRhX2RpcmVjdGlvbiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+ZmNwX2x1biwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+cG9ydC0+d3dwbik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTMzLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc3NmY2gzIiwKKwkJCQkJICByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0NNTkRfTEVOR1RIX05PVF9WQUxJRDoKQEAgLTIyNjgsMTYgKzIyNDgsMTcgQEAKIAkJCXJlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9jbW5kX2xlbmd0aCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+ZmNwX2x1biwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+cG9ydC0+d3dwbik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTM0LCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc3NmY2g0IiwKKwkJCQkJICByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfQk9YRUQ6Ci0JCXpmY3BfZXJwX3BvcnRfYm94ZWQodW5pdC0+cG9ydCwgNTMsIHJlcSk7CisJCXpmY3BfZXJwX3BvcnRfYm94ZWQodW5pdC0+cG9ydCwgImZzc2ZjaDUiLCByZXEpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJICAgICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9SRVRSWTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfTFVOX0JPWEVEOgotCQl6ZmNwX2VycF91bml0X2JveGVkKHVuaXQsIDU0LCByZXEpOworCQl6ZmNwX2VycF91bml0X2JveGVkKHVuaXQsICJmc3NmY2g2IiwgcmVxKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SIHwKIAkJCSAgICAgICBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWJyZWFrOwpAQCAtMjMxNCwzMCArMjI5NSwyOSBAQAogCiAvKioKICAqIHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayAtIGluaXRpYXRlIGFuIEZDUCBjb21tYW5kIChmb3IgYSBTQ1NJIGNvbW1hbmQpCi0gKiBAYWRhcHRlcjogYWRhcHRlciB3aGVyZSBzY3NpIGNvbW1hbmQgaXMgaXNzdWVkCiAgKiBAdW5pdDogdW5pdCB3aGVyZSBjb21tYW5kIGlzIHNlbnQgdG8KICAqIEBzY3NpX2NtbmQ6IHNjc2kgY29tbWFuZCB0byBiZSBzZW50Ci0gKiBAdGltZXI6IHRpbWVyIHRvIGJlIHN0YXJ0ZWQgd2hlbiByZXF1ZXN0IGlzIGluaXRpYXRlZAotICogQHJlcV9mbGFnczogZmxhZ3MgZm9yIGZzZl9yZXF1ZXN0CiAgKi8KLWludCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICBzdHJ1Y3QgemZjcF91bml0ICp1bml0LAotCQkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCQkgICBpbnQgdXNlX3RpbWVyLCBpbnQgcmVxX2ZsYWdzKQoraW50IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayhzdHJ1Y3QgemZjcF91bml0ICp1bml0LAorCQkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCkKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJc3RydWN0IGZjcF9jbW5kX2l1ICpmY3BfY21uZF9pdTsKIAl1bnNpZ25lZCBpbnQgc2J0eXBlOwogCWludCByZWFsX2J5dGVzLCByZXR2YWwgPSAtRUlPOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCiAJaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgogCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCkpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoIXpmY3BfZnNmX3NiYWxfYXZhaWxhYmxlKGFkYXB0ZXIpKQorCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVxX3EuY291bnQpIDw9IDApIHsKKwkJYXRvbWljX2luYygmYWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpOwogCQlnb3RvIG91dDsKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0ZDUF9DTU5ELCByZXFfZmxhZ3MsCisJfQorCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRkNQX0NNTkQsCisJCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCiAJCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKQEAgLTI0MTEsNyArMjM5MSw3IEBACiAJCQkJIm9uIHBvcnQgMHglMDE2THggY2xvc2VkXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdW5pdC0+ZmNwX2x1biwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXVuaXQtPnBvcnQtPnd3cG4pOwotCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAxMzEsIHJlcSk7CisJCQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsICJmc3NmY3QxIiwgcmVxKTsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCX0KIAkJZ290byBmYWlsZWRfc2NzaV9jbW5kOwpAQCAtMjQxOSw5ICsyMzk5LDYgQEAKIAogCXpmY3Bfc2V0X2ZjcF9kbChmY3BfY21uZF9pdSwgcmVhbF9ieXRlcyk7CiAKLQlpZiAodXNlX3RpbWVyKQotCQl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIFpGQ1BfRlNGX1JFUVVFU1RfVElNRU9VVCk7Ci0KIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlnb3RvIGZhaWxlZF9zY3NpX2NtbmQ7CkBAIC0yNDM5LDI4ICsyNDE2LDI1IEBACiAKIC8qKgogICogemZjcF9mc2Zfc2VuZF9mY3BfY3RtIC0gc2VuZCBTQ1NJIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kCi0gKiBAYWRhcHRlcjogcG9pbnRlciB0byBzdHJ1Y3QgemZjcC1hZGFwdGVyCiAgKiBAdW5pdDogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF91bml0CiAgKiBAdG1fZmxhZ3M6IHVuc2lnbmVkIGJ5dGUgZm9yIHRhc2sgbWFuYWdlbWVudCBmbGFncwotICogQHJlcV9mbGFnczogaW50IHJlcXVlc3QgZmxhZ3MKICAqIFJldHVybnM6IG9uIHN1Y2Nlc3MgcG9pbnRlciB0byBzdHJ1Y3QgZnNmX3JlcSwgTlVMTCBvdGhlcndpc2UKICAqLwotc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2Zfc2VuZF9mY3BfY3RtKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCSAgIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsCi0JCQkJCSAgIHU4IHRtX2ZsYWdzLCBpbnQgcmVxX2ZsYWdzKQorc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2Zfc2VuZF9mY3BfY3RtKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IHRtX2ZsYWdzKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOwogCXN0cnVjdCBmY3BfY21uZF9pdSAqZmNwX2NtbmRfaXU7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CiAKIAlpZiAodW5saWtlbHkoIShhdG9taWNfcmVhZCgmdW5pdC0+c3RhdHVzKSAmCiAJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkpCiAJCXJldHVybiBOVUxMOwogCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoIXpmY3BfZnNmX3NiYWxfYXZhaWxhYmxlKGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9GQ1BfQ01ORCwgcmVxX2ZsYWdzLAorCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRkNQX0NNTkQsIDAsCiAJCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJlcSA9IE5VTEw7CkBAIC0yNDkyLDcgKzI0NjYsNyBAQAogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJcmVxID0gTlVMTDsKIG91dDoKLQlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwogCXJldHVybiByZXE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCmluZGV4IDhiYjIwMDIuLmRmN2YyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaApAQCAtMTI3LDEwICsxMjcsNiBAQAogI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfQ0ZEQ19VUERBVEVECQkweDAwMDAwMDBBCiAjZGVmaW5lIEZTRl9TVEFUVVNfUkVBRF9GRUFUVVJFX1VQREFURV9BTEVSVAkweDAwMDAwMDBDCiAKLS8qIHN0YXR1cyBzdWJ0eXBlcyBpbiBzdGF0dXMgcmVhZCBidWZmZXIgKi8KLSNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9DTE9TRV9QSFlTX1BPUlQJMHgwMDAwMDAwMQotI2RlZmluZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0VSUk9SX1BPUlQJCTB4MDAwMDAwMDIKLQogLyogc3RhdHVzIHN1YnR5cGVzIGZvciBsaW5rIGRvd24gKi8KICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9OT19QSFlTSUNBTF9MSU5LCTB4MDAwMDAwMDAKICNkZWZpbmUgRlNGX1NUQVRVU19SRUFEX1NVQl9GRElTQ19GQUlMRUQJMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAzM2UwYTIwLi5lMGEyMTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMTEsOSArMTEsNiBAQAogCiAjaW5jbHVkZSAiemZjcF9leHQuaCIKIAotLyogRklYTUUodHVuZSk6IGZyZWUgc3BhY2Ugc2hvdWxkIGJlIG9uZSBtYXguIFNCQUwgY2hhaW4gcGx1cyB3aGF0PyAqLwotI2RlZmluZSBaRkNQX1FESU9fUENJX0lOVEVSVkFMCShRRElPX01BWF9CVUZGRVJTX1BFUl9RIFwKLQkJCQktIChGU0ZfTUFYX1NCQUxTX1BFUl9SRVEgKyA0KSkKICNkZWZpbmUgUUJVRkZfUEVSX1BBR0UJCShQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHFkaW9fYnVmZmVyKSkKIAogc3RhdGljIGludCB6ZmNwX3FkaW9fYnVmZmVyc19lbnF1ZXVlKHN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWwpCkBAIC01OCw3ICs1NSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1OCBpZCkKK3N0YXRpYyB2b2lkIHpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmlkKQogewogCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsICJBIFFESU8gcHJvYmxlbSBvY2N1cnJlZFxuIik7CiAKQEAgLTc3LDYgKzc0LDIzIEBACiAJfQogfQogCisvKiB0aGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBwcmlvciB0byB1cGRhdGluZyB0aGUgcXVldWUgZmlsbCBsZXZlbCAqLworc3RhdGljIHZvaWQgemZjcF9xZGlvX2FjY291bnQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlrdGltZV90IG5vdzsKKwlzNjQgc3BhbjsKKwlpbnQgZnJlZSwgdXNlZDsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+cWRpb19zdGF0X2xvY2spOworCW5vdyA9IGt0aW1lX2dldCgpOworCXNwYW4gPSBrdGltZV91c19kZWx0YShub3csIGFkYXB0ZXItPnJlcV9xX3RpbWUpOworCWZyZWUgPSBtYXgoMCwgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcV9xLmNvdW50KSk7CisJdXNlZCA9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgLSBmcmVlOworCWFkYXB0ZXItPnJlcV9xX3V0aWwgKz0gdXNlZCAqIHNwYW47CisJYWRhcHRlci0+cmVxX3FfdGltZSA9IG5vdzsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+cWRpb19zdGF0X2xvY2spOworfQorCiBzdGF0aWMgdm9pZCB6ZmNwX3FkaW9faW50X3JlcShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IHFkaW9fZXJyLAogCQkJICAgICAgaW50IHF1ZXVlX25vLCBpbnQgZmlyc3QsIGludCBjb3VudCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSkKQEAgLTg2LDEzICsxMDAsMTQgQEAKIAogCWlmICh1bmxpa2VseShxZGlvX2VycikpIHsKIAkJemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oYWRhcHRlciwgcWRpb19lcnIsIGZpcnN0LCBjb3VudCk7Ci0JCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKGFkYXB0ZXIsIDE0MCk7CisJCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKGFkYXB0ZXIsICJxZGlyZXExIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBjbGVhbnVwIGFsbCBTQkFMcyBiZWluZyBwcm9ncmFtLW93bmVkIG5vdyAqLwogCXpmY3BfcWRpb196ZXJvX3NiYWxzKHF1ZXVlLT5zYmFsLCBmaXJzdCwgY291bnQpOwogCisJemZjcF9xZGlvX2FjY291bnQoYWRhcHRlcik7CiAJYXRvbWljX2FkZChjb3VudCwgJnF1ZXVlLT5jb3VudCk7CiAJd2FrZV91cCgmYWRhcHRlci0+cmVxdWVzdF93cSk7CiB9CkBAIC0xNTQsNyArMTY5LDcgQEAKIAogCWlmICh1bmxpa2VseShxZGlvX2VycikpIHsKIAkJemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oYWRhcHRlciwgcWRpb19lcnIsIGZpcnN0LCBjb3VudCk7Ci0JCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKGFkYXB0ZXIsIDE0Nyk7CisJCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKGFkYXB0ZXIsICJxZGlyZXMxIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM0NiwyMSArMzYxLDEyIEBACiAJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3EgPSAmYWRhcHRlci0+cmVxX3E7CiAJaW50IGZpcnN0ID0gZnNmX3JlcS0+c2JhbF9maXJzdDsKIAlpbnQgY291bnQgPSBmc2ZfcmVxLT5zYmFsX251bWJlcjsKLQlpbnQgcmV0dmFsLCBwY2ksIHBjaV9iYXRjaDsKLQlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBpbnQgcWRpb19mbGFncyA9IFFESU9fRkxBR19TWU5DX09VVFBVVDsKIAotCS8qIGFja25vd2xlZGdlbWVudHMgZm9yIHRyYW5zZmVycmVkIGJ1ZmZlcnMgKi8KLQlwY2lfYmF0Y2ggPSBhZGFwdGVyLT5yZXFfcV9wY2lfYmF0Y2ggKyBjb3VudDsKLQlpZiAodW5saWtlbHkocGNpX2JhdGNoID49IFpGQ1BfUURJT19QQ0lfSU5URVJWQUwpKSB7Ci0JCXBjaV9iYXRjaCAlPSBaRkNQX1FESU9fUENJX0lOVEVSVkFMOwotCQlwY2kgPSBmaXJzdCArIGNvdW50IC0gKHBjaV9iYXRjaCArIDEpOwotCQlwY2kgJT0gUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGUocmVxX3EsIHBjaSwgMCk7Ci0JCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTMF9QQ0k7Ci0JfQorCXpmY3BfcWRpb19hY2NvdW50KGFkYXB0ZXIpOwogCi0JcmV0dmFsID0gZG9fUURJTyhhZGFwdGVyLT5jY3dfZGV2aWNlLCBRRElPX0ZMQUdfU1lOQ19PVVRQVVQsIDAsIGZpcnN0LAotCQkJIGNvdW50KTsKKwlyZXR2YWwgPSBkb19RRElPKGFkYXB0ZXItPmNjd19kZXZpY2UsIHFkaW9fZmxhZ3MsIDAsIGZpcnN0LCBjb3VudCk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKIAkJemZjcF9xZGlvX3plcm9fc2JhbHMocmVxX3EtPnNiYWwsIGZpcnN0LCBjb3VudCk7CiAJCXJldHVybiByZXR2YWw7CkBAIC0zNzAsNyArMzc2LDYgQEAKIAlhdG9taWNfc3ViKGNvdW50LCAmcmVxX3EtPmNvdW50KTsKIAlyZXFfcS0+Zmlyc3QgKz0gY291bnQ7CiAJcmVxX3EtPmZpcnN0ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JYWRhcHRlci0+cmVxX3FfcGNpX2JhdGNoID0gcGNpX2JhdGNoOwogCXJldHVybiAwOwogfQogCkBAIC00NDEsNyArNDQ2LDYgQEAKIAl9CiAJcmVxX3EtPmZpcnN0ID0gMDsKIAlhdG9taWNfc2V0KCZyZXFfcS0+Y291bnQsIDApOwotCWFkYXB0ZXItPnJlcV9xX3BjaV9iYXRjaCA9IDA7CiAJYWRhcHRlci0+cmVzcF9xLmZpcnN0ID0gMDsKIAlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZXNwX3EuY291bnQsIDApOwogfQpAQCAtNDc5LDcgKzQ4Myw2IEBACiAJLyogc2V0IGluZGV4IG9mIGZpcnN0IGF2YWxhYmxlIFNCQUxTIC8gbnVtYmVyIG9mIGF2YWlsYWJsZSBTQkFMUyAqLwogCWFkYXB0ZXItPnJlcV9xLmZpcnN0ID0gMDsKIAlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZXFfcS5jb3VudCwgUURJT19NQVhfQlVGRkVSU19QRVJfUSk7Ci0JYWRhcHRlci0+cmVxX3FfcGNpX2JhdGNoID0gMDsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCmluZGV4IDlkYzQyYTYuLjU4MjAxZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEludGVyZmFjZSB0byBMaW51eCBTQ1NJIG1pZGxheWVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTI3LDkgKzI3LDcgQEAKIHN0YXRpYyB2b2lkIHpmY3Bfc2NzaV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RwbnQpCiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIHNkcG50LT5ob3N0ZGF0YTsKLQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFR0lTVEVSRUQsICZ1bml0LT5zdGF0dXMpOwogCXVuaXQtPmRldmljZSA9IE5VTEw7Ci0JemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMTIsIE5VTEwpOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiB9CiAKQEAgLTU4LDggKzU2LDggQEAKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0JaW50ICAgIHN0YXR1czsKLQlpbnQgICAgcmV0OworCWludCAgICBzdGF0dXMsIHNjc2lfcmVzdWx0LCByZXQ7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2NwbnQtPmRldmljZSkpOwogCiAJLyogcmVzZXQgdGhlIHN0YXR1cyBmb3IgdGhpcyByZXF1ZXN0ICovCiAJc2NwbnQtPnJlc3VsdCA9IDA7CkBAIC04MSw2ICs3OSwxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlzY3NpX3Jlc3VsdCA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKKwlpZiAodW5saWtlbHkoc2NzaV9yZXN1bHQpKSB7CisJCXNjcG50LT5yZXN1bHQgPSBzY3NpX3Jlc3VsdDsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoImZhaWwiLCA0LCBhZGFwdGVyLCBzY3BudCwgTlVMTCk7CisJCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlzdGF0dXMgPSBhdG9taWNfcmVhZCgmdW5pdC0+c3RhdHVzKTsKIAlpZiAodW5saWtlbHkoKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSB8fAogCQkgICAgICEoc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpKSkgewpAQCAtODgsOCArOTQsNyBAQAogCQlyZXR1cm4gMDs7CiAJfQogCi0JcmV0ID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrKGFkYXB0ZXIsIHVuaXQsIHNjcG50LCAwLAotCQkJCQkgICAgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCk7CisJcmV0ID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrKHVuaXQsIHNjcG50KTsKIAlpZiAodW5saWtlbHkocmV0ID09IC1FQlVTWSkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7CiAJZWxzZSBpZiAodW5saWtlbHkocmV0IDwgMCkpCkBAIC0xMzMsOCArMTM4LDcgQEAKIAogCXJlYWRfbG9ja19pcnFzYXZlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAl1bml0ID0gemZjcF91bml0X2xvb2t1cChhZGFwdGVyLCBzZHAtPmNoYW5uZWwsIHNkcC0+aWQsIHNkcC0+bHVuKTsKLQlpZiAodW5pdCAmJgotCSAgICAoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19VTklUX1JFR0lTVEVSRUQpKSB7CisJaWYgKHVuaXQpIHsKIAkJc2RwLT5ob3N0ZGF0YSA9IHVuaXQ7CiAJCXVuaXQtPmRldmljZSA9IHNkcDsKIAkJemZjcF91bml0X2dldCh1bml0KTsKQEAgLTE0Nyw3OSArMTUxLDkxIEBACiAKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCiB7Ci0gCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdDsKLSAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0ID0gc2NwbnQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0KKwkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqb2xkX3JlcSwgKmFicnRfcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBvbGRfcmVxX2lkID0gKHVuc2lnbmVkIGxvbmcpIHNjcG50LT5ob3N0X3NjcmliYmxlOwogCWludCByZXR2YWwgPSBTVUNDRVNTOwotCi0Jc2NzaV9ob3N0ID0gc2NwbnQtPmRldmljZS0+aG9zdDsKLQlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXTsKLQl1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CisJaW50IHJldHJ5ID0gMzsKIAogCS8qIGF2b2lkIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbGF0ZSBub3JtYWwgY29tcGxldGlvbiBhbmQgYWJvcnQgKi8KIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAotCS8qIENoZWNrIHdoZXRoZXIgY29ycmVzcG9uZGluZyBmc2ZfcmVxIGlzIHN0aWxsIHBlbmRpbmcgKi8KIAlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLCBvbGRfcmVxX2lkKTsKKwlvbGRfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgb2xkX3JlcV9pZCk7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCWlmICghZnNmX3JlcSkgeworCWlmICghb2xkX3JlcSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJsdGUxIiwgYWRhcHRlciwgc2NwbnQsIE5VTEwsIDApOwotCQlyZXR1cm4gcmV0dmFsOworCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJsdGUxIiwgYWRhcHRlciwgc2NwbnQsIE5VTEwsCisJCQkJCSAgb2xkX3JlcV9pZCk7CisJCXJldHVybiBTVUNDRVNTOwogCX0KLQlmc2ZfcmVxLT5kYXRhID0gTlVMTDsKKwlvbGRfcmVxLT5kYXRhID0gTlVMTDsKIAogCS8qIGRvbid0IGFjY2VzcyBvbGQgZnNmX3JlcSBhZnRlciByZWxlYXNpbmcgdGhlIGFib3J0X2xvY2sgKi8KIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwogCi0JZnNmX3JlcSA9IHpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kKG9sZF9yZXFfaWQsIGFkYXB0ZXIsIHVuaXQsIDApOwotCWlmICghZnNmX3JlcSkgewotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJucmVzIiwgYWRhcHRlciwgc2NwbnQsIE5VTEwsCi0JCQkJCSAgb2xkX3JlcV9pZCk7Ci0JCXJldHZhbCA9IEZBSUxFRDsKLQkJcmV0dXJuIHJldHZhbDsKKwl3aGlsZSAocmV0cnktLSkgeworCQlhYnJ0X3JlcSA9IHpmY3BfZnNmX2Fib3J0X2ZjcF9jb21tYW5kKG9sZF9yZXFfaWQsIHVuaXQpOworCQlpZiAoYWJydF9yZXEpCisJCQlicmVhazsKKworCQl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOworCQlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCisJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkgeworCQkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibnJlcyIsIGFkYXB0ZXIsIHNjcG50LCBOVUxMLAorCQkJCQkJICBvbGRfcmVxX2lkKTsKKwkJCXJldHVybiBTVUNDRVNTOworCQl9CiAJfQorCWlmICghYWJydF9yZXEpCisJCXJldHVybiBGQUlMRUQ7CiAKLQlfX3dhaXRfZXZlbnQoZnNmX3JlcS0+Y29tcGxldGlvbl93cSwKLQkJICAgICBmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKKwl3YWl0X2V2ZW50KGFicnRfcmVxLT5jb21wbGV0aW9uX3dxLAorCQkgICBhYnJ0X3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CiAKLQlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUU1VDQ0VFREVEKSB7Ci0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoIm9rYXkiLCBhZGFwdGVyLCBzY3BudCwgZnNmX3JlcSwgMCk7Ci0JfSBlbHNlIGlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlROT1RORUVERUQpIHsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibHRlMiIsIGFkYXB0ZXIsIHNjcG50LCBmc2ZfcmVxLCAwKTsKLQl9IGVsc2UgewotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJmYWlsIiwgYWRhcHRlciwgc2NwbnQsIGZzZl9yZXEsIDApOworCWlmIChhYnJ0X3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUU1VDQ0VFREVEKQorCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJva2F5IiwgYWRhcHRlciwgc2NwbnQsIGFicnRfcmVxLCAwKTsKKwllbHNlIGlmIChhYnJ0X3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUTk9UTkVFREVEKQorCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJsdGUyIiwgYWRhcHRlciwgc2NwbnQsIGFicnRfcmVxLCAwKTsKKwllbHNlIHsKKwkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgiZmFpbCIsIGFkYXB0ZXIsIHNjcG50LCBhYnJ0X3JlcSwgMCk7CiAJCXJldHZhbCA9IEZBSUxFRDsKIAl9Ci0JemZjcF9mc2ZfcmVxX2ZyZWUoZnNmX3JlcSk7Ci0KKwl6ZmNwX2ZzZl9yZXFfZnJlZShhYnJ0X3JlcSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCB6ZmNwX3Rhc2tfbWdtdF9mdW5jdGlvbihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCB0bV9mbGFncywKLQkJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQorc3RhdGljIGludCB6ZmNwX3Rhc2tfbWdtdF9mdW5jdGlvbihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCwgdTggdG1fZmxhZ3MpCiB7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CiAJaW50IHJldHZhbCA9IFNVQ0NFU1M7CisJaW50IHJldHJ5ID0gMzsKIAotCS8qIGlzc3VlIHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbiAqLwotCWZzZl9yZXEgPSB6ZmNwX2ZzZl9zZW5kX2ZjcF9jdG0oYWRhcHRlciwgdW5pdCwgdG1fZmxhZ3MsIDApOwotCWlmICghZnNmX3JlcSkgewotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJucmVzIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKLQkJcmV0dXJuIEZBSUxFRDsKKwl3aGlsZSAocmV0cnktLSkgeworCQlmc2ZfcmVxID0gemZjcF9mc2Zfc2VuZF9mY3BfY3RtKHVuaXQsIHRtX2ZsYWdzKTsKKwkJaWYgKGZzZl9yZXEpCisJCQlicmVhazsKKworCQl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOworCQlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCisJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkgeworCQkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgibnJlcyIsIHRtX2ZsYWdzLCB1bml0LAorCQkJCQkJICAgICBzY3BudCk7CisJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJfQogCX0KKwlpZiAoIWZzZl9yZXEpCisJCXJldHVybiBGQUlMRUQ7CiAKLQlfX3dhaXRfZXZlbnQoZnNmX3JlcS0+Y29tcGxldGlvbl93cSwKLQkJICAgICBmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKKwl3YWl0X2V2ZW50KGZzZl9yZXEtPmNvbXBsZXRpb25fd3EsCisJCSAgIGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOwogCi0JLyoKLQkgKiBjaGVjayBjb21wbGV0aW9uIHN0YXR1cyBvZiB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb24KLQkgKi8KIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RNRlVOQ0ZBSUxFRCkgewogCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJmYWlsIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAkJcmV0dmFsID0gRkFJTEVEOwpAQCAtMjMwLDQwICsyNDYsMjUgQEAKIAkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgib2theSIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CiAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQogewotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKLQotCWlmICghdW5pdCkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gU1VDQ0VTUzsKLQl9Ci0JcmV0dXJuIHpmY3BfdGFza19tZ210X2Z1bmN0aW9uKHVuaXQsIEZDUF9MT0dJQ0FMX1VOSVRfUkVTRVQsIHNjcG50KTsKKwlyZXR1cm4gemZjcF90YXNrX21nbXRfZnVuY3Rpb24oc2NwbnQsIEZDUF9MT0dJQ0FMX1VOSVRfUkVTRVQpOwogfQogCiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7Ci0KLQlpZiAoIXVuaXQpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCXJldHVybiB6ZmNwX3Rhc2tfbWdtdF9mdW5jdGlvbih1bml0LCBGQ1BfVEFSR0VUX1JFU0VULCBzY3BudCk7CisJcmV0dXJuIHpmY3BfdGFza19tZ210X2Z1bmN0aW9uKHNjcG50LCBGQ1BfVEFSR0VUX1JFU0VUKTsKIH0KIAogc3RhdGljIGludCB6ZmNwX3Njc2lfZWhfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQogewotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CiAKLQl1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7Ci0JYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7Ci0JemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgMTQxLCBzY3BudCk7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgInNjaHJoXzEiLCBzY3BudCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAogCXJldHVybiBTVUNDRVNTOwpAQCAtNDc5LDYgKzQ4MCwxMDkgQEAKIAlycG9ydC0+ZGV2X2xvc3NfdG1vID0gdGltZW91dDsKIH0KIAorLyoqCisgKiB6ZmNwX3Njc2lfZGV2X2xvc3NfdG1vX2NhbGxiayAtIEZyZWUgYW55IHJlZmVyZW5jZSB0byBycG9ydAorICogQHJwb3J0OiBUaGUgcnBvcnQgdGhhdCBpcyBhYm91dCB0byBiZSBkZWxldGVkLgorICovCitzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfZGV2X2xvc3NfdG1vX2NhbGxiayhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBycG9ydC0+ZGRfZGF0YTsKKworCXdyaXRlX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCXBvcnQtPnJwb3J0ID0gTlVMTDsKKwl3cml0ZV91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworfQorCisvKioKKyAqIHpmY3Bfc2NzaV90ZXJtaW5hdGVfcnBvcnRfaW8gLSBUZXJtaW5hdGUgYWxsIEkvTyBvbiBhIHJwb3J0CisgKiBAcnBvcnQ6IFRoZSBGQyBycG9ydCB3aGVyZSB0byB0ZW1pbmF0ZSBJL08KKyAqCisgKiBBYm9ydCBhbGwgcGVuZGluZyBTQ1NJIGNvbW1hbmRzIGZvciBhIHBvcnQgYnkgY2xvc2luZyB0aGUKKyAqIHBvcnQuIFVzaW5nIGEgcmVvcGVuIGZvciBhdm9pZHMgYSBjb25mbGljdCB3aXRoIGEgc2h1dGRvd24KKyAqIG92ZXJ3cml0aW5nIGEgcmVvcGVuLgorICovCitzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfdGVybWluYXRlX3Jwb3J0X2lvKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCit7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IHJwb3J0LT5kZF9kYXRhOworCisJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgInNjdHJwaTEiLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgemZjcF9zY3NpX3Jwb3J0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCisJaWRzLm5vZGVfbmFtZSA9IHBvcnQtPnd3bm47CisJaWRzLnBvcnRfbmFtZSA9IHBvcnQtPnd3cG47CisJaWRzLnBvcnRfaWQgPSBwb3J0LT5kX2lkOworCWlkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKKworCXJwb3J0ID0gZmNfcmVtb3RlX3BvcnRfYWRkKHBvcnQtPmFkYXB0ZXItPnNjc2lfaG9zdCwgMCwgJmlkcyk7CisJaWYgKCFycG9ydCkgeworCQlkZXZfZXJyKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCisJCQkiUmVnaXN0ZXJpbmcgcG9ydCAweCUwMTZMeCBmYWlsZWRcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBvcnQtPnd3cG4pOworCQlyZXR1cm47CisJfQorCisJcnBvcnQtPmRkX2RhdGEgPSBwb3J0OworCXJwb3J0LT5tYXhmcmFtZV9zaXplID0gcG9ydC0+bWF4ZnJhbWVfc2l6ZTsKKwlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlczsKKwlwb3J0LT5ycG9ydCA9IHJwb3J0OworfQorCitzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfcnBvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+cnBvcnQpCisJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShwb3J0LT5ycG9ydCk7Cit9CisKK3ZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJemZjcF9wb3J0X2dldChwb3J0KTsKKwlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfQUREOworCisJaWYgKCFxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcG9ydC0+cnBvcnRfd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKK3ZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJemZjcF9wb3J0X2dldChwb3J0KTsKKwlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfREVMOworCisJaWYgKCFxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcG9ydC0+cnBvcnRfd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKK3ZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKKwkJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHBvcnQpOworfQorCit2b2lkIHpmY3Bfc2NzaV9ycG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsCisJCQkJCSAgICAgIHJwb3J0X3dvcmspOworCisJd2hpbGUgKHBvcnQtPnJwb3J0X3Rhc2spIHsKKwkJaWYgKHBvcnQtPnJwb3J0X3Rhc2sgPT0gUlBPUlRfQUREKSB7CisJCQlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfTk9ORTsKKwkJCXpmY3Bfc2NzaV9ycG9ydF9yZWdpc3Rlcihwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9OT05FOworCQkJemZjcF9zY3NpX3Jwb3J0X2Jsb2NrKHBvcnQpOworCQl9CisJfQorCisJemZjcF9wb3J0X3B1dChwb3J0KTsKK30KKworCiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgemZjcF90cmFuc3BvcnRfZnVuY3Rpb25zID0gewogCS5zaG93X3N0YXJnZXRfcG9ydF9pZCA9IDEsCiAJLnNob3dfc3RhcmdldF9wb3J0X25hbWUgPSAxLApAQCAtNDk3LDYgKzYwMSw4IEBACiAJLnJlc2V0X2ZjX2hvc3Rfc3RhdHMgPSB6ZmNwX3Jlc2V0X2ZjX2hvc3Rfc3RhdHMsCiAJLnNldF9ycG9ydF9kZXZfbG9zc190bW8gPSB6ZmNwX3NldF9ycG9ydF9kZXZfbG9zc190bW8sCiAJLmdldF9ob3N0X3BvcnRfc3RhdGUgPSB6ZmNwX2dldF9ob3N0X3BvcnRfc3RhdGUsCisJLmRldl9sb3NzX3Rtb19jYWxsYmsgPSB6ZmNwX3Njc2lfZGV2X2xvc3NfdG1vX2NhbGxiaywKKwkudGVybWluYXRlX3Jwb3J0X2lvID0gemZjcF9zY3NpX3Rlcm1pbmF0ZV9ycG9ydF9pbywKIAkuc2hvd19ob3N0X3BvcnRfc3RhdGUgPSAxLAogCS8qIG5vIGZ1bmN0aW9ucyByZWdpc3RlcmVkIGZvciBmb2xsb3dpbmcgZHluYW1pYyBhdHRyaWJ1dGVzIGJ1dAogCSAgIGRpcmVjdGx5IHNldCBieSBMTEREICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggODk5YWYyYi4uOWEzYjhlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtMTEyLDkgKzExMiw5IEBACiAJCSAgICAgemZjcF9zeXNmc18jI19mZWF0IyNfZmFpbGVkX3Nob3csCQkJICAgICAgIFwKIAkJICAgICB6ZmNwX3N5c2ZzXyMjX2ZlYXQjI19mYWlsZWRfc3RvcmUpOwogCi1aRkNQX1NZU0ZTX0ZBSUxFRCh6ZmNwX2FkYXB0ZXIsIGFkYXB0ZXIsIGFkYXB0ZXIsIDQ0LCA5Myk7Ci1aRkNQX1NZU0ZTX0ZBSUxFRCh6ZmNwX3BvcnQsIHBvcnQsIHBvcnQtPmFkYXB0ZXIsIDQ1LCA5Nik7Ci1aRkNQX1NZU0ZTX0ZBSUxFRCh6ZmNwX3VuaXQsIHVuaXQsIHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDQ2LCA5Nyk7CitaRkNQX1NZU0ZTX0ZBSUxFRCh6ZmNwX2FkYXB0ZXIsIGFkYXB0ZXIsIGFkYXB0ZXIsICJzeWFmYWkxIiwgInN5YWZhaTIiKTsKK1pGQ1BfU1lTRlNfRkFJTEVEKHpmY3BfcG9ydCwgcG9ydCwgcG9ydC0+YWRhcHRlciwgInN5cGZhaTEiLCAic3lwZmFpMiIpOworWkZDUF9TWVNGU19GQUlMRUQoemZjcF91bml0LCB1bml0LCB1bml0LT5wb3J0LT5hZGFwdGVyLCAic3l1ZmFpMSIsICJzeXVmYWkyIik7CiAKIHN0YXRpYyBzc2l6ZV90IHpmY3Bfc3lzZnNfcG9ydF9yZXNjYW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCA5MiwgTlVMTCk7CisJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAic3lwcnNfMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIAl6ZmNwX3BvcnRfZGVxdWV1ZShwb3J0KTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAJcmV0dmFsID0gMDsKIAotCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsIDk0LCBOVUxMKTsKKwl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCAwLCAic3l1YXNfMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIG91dDoKQEAgLTI2OCw3ICsyNjgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsIDk1LCBOVUxMKTsKKwl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsICJzeXVyc18xIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCXpmY3BfdW5pdF9kZXF1ZXVlKHVuaXQpOwpAQCAtMzE4LDEwICszMTgsOSBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBzZGV2LT5ob3N0ZGF0YTsJCQlcCiAJc3RydWN0IHpmY3BfbGF0ZW5jaWVzICpsYXQgPSAmdW5pdC0+bGF0ZW5jaWVzOwkJCVwKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGxvbmcgZnN1bSwgZm1pbiwgZm1heCwgY3N1bSwgY21pbiwgY21heCwgY2M7CVwKIAkJCQkJCQkJCVwKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbGF0LT5sb2NrLCBmbGFncyk7CQkJCVwKKwlzcGluX2xvY2tfYmgoJmxhdC0+bG9jayk7CQkJCQlcCiAJZnN1bSA9IGxhdC0+X25hbWUuZmFicmljLnN1bSAqIGFkYXB0ZXItPnRpbWVyX3RpY2tzOwkJXAogCWZtaW4gPSBsYXQtPl9uYW1lLmZhYnJpYy5taW4gKiBhZGFwdGVyLT50aW1lcl90aWNrczsJCVwKIAlmbWF4ID0gbGF0LT5fbmFtZS5mYWJyaWMubWF4ICogYWRhcHRlci0+dGltZXJfdGlja3M7CQlcCkBAIC0zMjksNyArMzI4LDcgQEAKIAljbWluID0gbGF0LT5fbmFtZS5jaGFubmVsLm1pbiAqIGFkYXB0ZXItPnRpbWVyX3RpY2tzOwkJXAogCWNtYXggPSBsYXQtPl9uYW1lLmNoYW5uZWwubWF4ICogYWRhcHRlci0+dGltZXJfdGlja3M7CQlcCiAJY2MgID0gbGF0LT5fbmFtZS5jb3VudGVyOwkJCQkJXAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxhdC0+bG9jaywgZmxhZ3MpOwkJCVwKKwlzcGluX3VubG9ja19iaCgmbGF0LT5sb2NrKTsJCQkJCVwKIAkJCQkJCQkJCVwKIAlkb19kaXYoZnN1bSwgMTAwMCk7CQkJCQkJXAogCWRvX2RpdihmbWluLCAxMDAwKTsJCQkJCQlcCkBAIC00ODcsNyArNDg2LDggQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0KIAkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBhdG9taWNfcmVhZCgmYWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZCAlbGx1XG4iLCBhdG9taWNfcmVhZCgmYWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGFwdGVyLT5yZXFfcV91dGlsKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihxdWV1ZV9mdWxsLCBTX0lSVUdPLCB6ZmNwX3N5c2ZzX2FkYXB0ZXJfcV9mdWxsX3Nob3csIE5VTEwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMgYi9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMKaW5kZXggZjA4ZTE2OS4uN2UzMGU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJYnAtPndhaXRpbmcgPSAxOwogCWFkZF93YWl0X3F1ZXVlKCZicC0+d3EsICZ3YWl0KTsKIAl3aGlsZSAobGltaXQtLSA+IDApIHsKLQkJdW5zaWduZWQgbG9uZyB2YWw7CisJCWxvbmcgdmFsOwogCiAJCXZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAogCQkJCWJwLT53cSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYwppbmRleCBhOWE5ODkzLi5lNmQxZmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCkBAIC0zOCw5ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLQotI2RlZmluZSBNQUpPUl9OUglKU0ZEX01BSk9SCi0KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCAyOWRjNzM1Li4xMjRmNjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTUxLDYgKzUxLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiT1BFTlBST00gQ29uZmlndXJhdGlvbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFNVTl9PUEVOUFJPTV9NSU5PUik7CiAKIC8qIFByaXZhdGUgZGF0YSBrZXB0IGJ5IHRoZSBkcml2ZXIgZm9yIGVhY2ggZGVzY3JpcHRvci4gKi8KIHR5cGVkZWYgc3RydWN0IG9wZW5wcm9tX3ByaXZhdGVfZGF0YQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKaW5kZXggNTMxMTMxNy4uYTEyNzgzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LTl4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCkBAIC00LDcgKzQsNyBAQAogICAgV3JpdHRlbiBCeTogQWRhbSBSYWRmb3JkIDxsaW51eHJhaWRAYW1jYy5jb20+CiAgICBNb2RpZmljYXRpb25zIEJ5OiBUb20gQ291Y2ggPGxpbnV4cmFpZEBhbWNjLmNvbT4KIAotICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzUsNiArNzUsNyBAQAogICAgICAgICAgICAgICAgICBBZGQgTVNJIHN1cHBvcnQgYW5kICJ1c2VfbXNpIiBtb2R1bGUgcGFyYW1ldGVyLgogICAgICAgICAgICAgICAgICBGaXggYnVnIGluIHR3YV9nZXRfcGFyYW0oKSBvbiA0R0IrLgogICAgICAgICAgICAgICAgICBVc2UgcGNpX3Jlc291cmNlX2xlbigpIGZvciBpb3JlbWFwKCkuCisgICAyLjI2LjAyLjAxMiAtIEFkZCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC05OSw3ICsxMDAsNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMTEiCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAxMiIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtMjE4Miw2ICsyMTgzLDk4IEBACiAJdHdhX2RldmljZV9leHRlbnNpb25fY291bnQtLTsKIH0gLyogRW5kIHR3YV9yZW1vdmUoKSAqLwogCisjaWZkZWYgQ09ORklHX1BNCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBQQ0kgc3VzcGVuZCAqLworc3RhdGljIGludCB0d2Ffc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2ID0gKFRXX0RldmljZV9FeHRlbnNpb24gKilob3N0LT5ob3N0ZGF0YTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IFN1c3BlbmRpbmcgaG9zdCAlZC5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CisKKwlUV19ESVNBQkxFX0lOVEVSUlVQVFModHdfZGV2KTsKKwlmcmVlX2lycSh0d19kZXYtPnR3X3BjaV9kZXYtPmlycSwgdHdfZGV2KTsKKworCWlmICh0ZXN0X2JpdChUV19VU0lOR19NU0ksICZ0d19kZXYtPmZsYWdzKSkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworCisJLyogVGVsbCB0aGUgY2FyZCB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLworCWlmICh0d2FfaW5pdGNvbm5lY3Rpb24odHdfZGV2LCAxLCAwLCAwLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSkgeworCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MzgsICJDb25uZWN0aW9uIHNodXRkb3duIGZhaWxlZCBkdXJpbmcgc3VzcGVuZCIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IFN1c3BlbmQgY29tcGxldGUuXG4iKTsKKwl9CisJVFdfQ0xFQVJfQUxMX0lOVEVSUlVQVFModHdfZGV2KTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfSAvKiBFbmQgdHdhX3N1c3BlbmQoKSAqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBQQ0kgcmVzdW1lICovCitzdGF0aWMgaW50IHR3YV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYgPSAoVFdfRGV2aWNlX0V4dGVuc2lvbiAqKWhvc3QtPmhvc3RkYXRhOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiM3ctOXh4eDogUmVzdW1pbmcgaG9zdCAlZC5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkgeworCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MzksICJFbmFibGUgZGV2aWNlIGZhaWxlZCBkdXJpbmcgcmVzdW1lIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3RyeV9zZXRfbXdpKHBkZXYpOworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spCisJICAgIHx8IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKQorCQkgICAgfHwgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQkJVFdfUFJJTlRLKGhvc3QsIFRXX0RSSVZFUiwgMHg0MCwgIkZhaWxlZCB0byBzZXQgZG1hIG1hc2sgZHVyaW5nIHJlc3VtZSIpOworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCQl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBjYXJkICovCisJaWYgKHR3YV9yZXNldF9zZXF1ZW5jZSh0d19kZXYsIDApKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCX0KKworCS8qIE5vdyBzZXR1cCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHR3YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiM3ctOXh4eCIsIHR3X2Rldik7CisJaWYgKHJldHZhbCkgeworCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4NDIsICJFcnJvciByZXF1ZXN0aW5nIElSUSBkdXJpbmcgcmVzdW1lIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCX0KKworCS8qIE5vdyBlbmFibGUgTVNJIGlmIGVuYWJsZWQgKi8KKwlpZiAodGVzdF9iaXQoVFdfVVNJTkdfTVNJLCAmdHdfZGV2LT5mbGFncykpCisJCXBjaV9lbmFibGVfbXNpKHBkZXYpOworCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgb24gdGhlIGNhcmQgKi8KKwlUV19FTkFCTEVfQU5EX0NMRUFSX0lOVEVSUlVQVFModHdfZGV2KTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LTl4eHg6IFJlc3VtZSBjb21wbGV0ZS5cbiIpOworCXJldHVybiAwOworCitvdXRfZGlzYWJsZV9kZXZpY2U6CisJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworfSAvKiBFbmQgdHdhX3Jlc3VtZSgpICovCisjZW5kaWYKKwogLyogUENJIERldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF8zV0FSRSwgUENJX0RFVklDRV9JRF8zV0FSRV85MDAwLApAQCAtMjIwMiw2ICsyMjk1LDEwIEBACiAJLmlkX3RhYmxlCT0gdHdhX3BjaV90YmwsCiAJLnByb2JlCQk9IHR3YV9wcm9iZSwKIAkucmVtb3ZlCQk9IHR3YV9yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSB0d2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IHR3YV9yZXN1bWUsCisjZW5kaWYKIAkuc2h1dGRvd24JPSB0d2Ffc2h1dGRvd24KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmggYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCmluZGV4IDE3MjlhODcuLjI4OTNlZWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKQEAgLTQsNyArNCw3IEBACiAgICBXcml0dGVuIEJ5OiBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBhbWNjLmNvbT4KICAgIE1vZGlmaWNhdGlvbnMgQnk6IFRvbSBDb3VjaCA8bGludXhyYWlkQGFtY2MuY29tPgogCi0gICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDI1NmM3YmUuLmUyZjQ0ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0yMjQsMTQgKzIyNCwxNSBAQAogCSAgY2FuIGVuYWJsZSBsb2dnaW5nIGJ5IHNheWluZyBZIHRvICIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0IiBhbmQKIAkgICJTeXNjdGwgc3VwcG9ydCIgYmVsb3cgYW5kIGV4ZWN1dGluZyB0aGUgY29tbWFuZAogCi0JICBlY2hvICJzY3NpIGxvZyB0b2tlbiBbbGV2ZWxdIiA+IC9wcm9jL3Njc2kvc2NzaQorCSAgZWNobyA8Yml0bWFzaz4gPiAvcHJvYy9zeXMvZGV2L3Njc2kvbG9nZ2luZ19sZXZlbAogCi0JICBhdCBib290IHRpbWUgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuCisJICB3aGVyZSA8Yml0bWFzaz4gaXMgYSBmb3VyIGJ5dGUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBsb2dnaW5nIHR5cGUKKwkgIGFuZCBsb2dnaW5nIGxldmVsIGZvciBlYWNoIHR5cGUgb2YgbG9nZ2luZyBzZWxlY3RlZC4KIAotCSAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHRoaW5ncyB0aGF0IGNhbiBiZSB1c2VkIGZvciAndG9rZW4nICh5b3UgY2FuCi0JICBmaW5kIHRoZW0gaW4gdGhlIHNvdXJjZTogPGZpbGU6ZHJpdmVycy9zY3NpL3Njc2kuYz4pLCBhbmQgdGhpcwotCSAgYWxsb3dzIHlvdSB0byBzZWxlY3QgdGhlIHR5cGVzIG9mIGluZm9ybWF0aW9uIHlvdSB3YW50LCBhbmQgdGhlCi0JICBsZXZlbCBhbGxvd3MgeW91IHRvIHNlbGVjdCB0aGUgbGV2ZWwgb2YgdmVyYm9zaXR5LgorCSAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGxvZ2dpbmcgdHlwZXMgYW5kIHlvdSBjYW4gZmluZCB0aGVtIGluIHRoZQorCSAgc291cmNlIGF0IDxmaWxlOmRyaXZlcnMvc2NzaS9zY3NpX2xvZ2dpbmcuaD4uIFRoZSBsb2dnaW5nIGxldmVscworCSAgYXJlIGFsc28gZGVzY3JpYmVkIGluIHRoYXQgZmlsZSBhbmQgdGhleSBkZXRlcm1pbmUgdGhlIHZlcmJvc2l0eSBvZgorCSAgdGhlIGxvZ2dpbmcgZm9yIGVhY2ggbG9nZ2luZyB0eXBlLgogCiAJICBJZiB5b3Ugc2F5IE4gaGVyZSwgaXQgbWF5IGJlIGhhcmRlciB0byB0cmFjayBkb3duIHNvbWUgdHlwZXMgb2YgU0NTSQogCSAgcHJvYmxlbXMuIElmIHlvdSBzYXkgWSBoZXJlIHlvdXIga2VybmVsIHdpbGwgYmUgc29tZXdoYXQgbGFyZ2VyLCBidXQKQEAgLTU3MCw2ICs1NzEsNyBAQAogCSAgVG8gZW5hYmxlIHRoaXMgZnVuY3Rpb24sIGNob29zZSBZIGhlcmUuCiAKIHNvdXJjZSAiZHJpdmVycy9zY3NpL21lZ2FyYWlkL0tjb25maWcubWVnYXJhaWQiCitzb3VyY2UgImRyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWciCiAKIGNvbmZpZyBTQ1NJX0hQVElPUAogCXRyaXN0YXRlICJIaWdoUG9pbnQgUm9ja2V0UkFJRCAzeHh4LzR4eHggQ29udHJvbGxlciBzdXBwb3J0IgpAQCAtNjA4LDYgKzYxMCw3IEBACiBjb25maWcgTElCRkMKIAl0cmlzdGF0ZSAiTGliRkMgbW9kdWxlIgogCXNlbGVjdCBTQ1NJX0ZDX0FUVFJTCisJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCSAgRmlicmUgQ2hhbm5lbCBsaWJyYXJ5IG1vZHVsZQogCkBAIC0xNTM1LDYgKzE1MzgsNyBAQAogY29uZmlnIFNDU0lfREVCVUcKIAl0cmlzdGF0ZSAiU0NTSSBkZWJ1Z2dpbmcgaG9zdCBzaW11bGF0b3IiCiAJZGVwZW5kcyBvbiBTQ1NJCisJc2VsZWN0IENSQ19UMTBESUYKIAloZWxwCiAJICBUaGlzIGlzIGEgaG9zdCBhZGFwdGVyIHNpbXVsYXRvciB0aGF0IGNhbiBzaW11bGF0ZSBtdWx0aXBsZSBob3N0cwogCSAgZWFjaCB3aXRoIG11bHRpcGxlIGR1bW15IFNDU0kgZGV2aWNlcyAoZGlza3MpLiBJdCBkZWZhdWx0cyB0byBvbmUKQEAgLTE4MDMsNCArMTgwNyw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zY3NpL29zZC9LY29uZmlnIgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggNzQ2MWViMC4uY2Y3OTI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtOTksNiArOTksNyBAQAogb2JqLSQoQ09ORklHX01FR0FSQUlEX0xFR0FDWSkJKz0gbWVnYXJhaWQubwogb2JqLSQoQ09ORklHX01FR0FSQUlEX05FV0dFTikJKz0gbWVnYXJhaWQvCiBvYmotJChDT05GSUdfTUVHQVJBSURfU0FTKQkrPSBtZWdhcmFpZC8KK29iai0kKENPTkZJR19TQ1NJX01QVDJTQVMpCSs9IG1wdDJzYXMvCiBvYmotJChDT05GSUdfU0NTSV9BQ0FSRCkJKz0gYXRwODcwdS5vCiBvYmotJChDT05GSUdfU0NTSV9TVU5FU1ApCSs9IGVzcF9zY3NpLm8Jc3VuX2VzcC5vCiBvYmotJChDT05GSUdfU0NTSV9HRFRIKQkJKz0gZ2R0aC5vCkBAIC0xMzcsNiArMTM4LDggQEAKIG9iai0kKENPTkZJR19DSFJfREVWX1NDSCkJKz0gY2gubwogb2JqLSQoQ09ORklHX1NDU0lfRU5DTE9TVVJFKQkrPSBzZXMubwogCitvYmotJChDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SKSArPSBvc2QvCisKICMgVGhpcyBnb2VzIGxhc3QsIHNvIHRoYXQgInJlYWwiIHNjc2kgZGV2aWNlcyBwcm9iZSBlYXJsaWVyCiBvYmotJChDT05GSUdfU0NTSV9ERUJVRykJKz0gc2NzaV9kZWJ1Zy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hNDAwMHQuYyBiL2RyaXZlcnMvc2NzaS9hNDAwMHQuYwppbmRleCBkNGJkYTIwLi42MWFmM2Q5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2E0MDAwdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hNDAwMHQuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIEE0MDAwVF9TQ1NJX0FERFIgMHhkZDAwNDAKIAotc3RhdGljIGludCBfX2RldmluaXQgYTQwMDB0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGE0MDAwdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjEsNyArNjEsOCBAQAogCWhvc3RkYXRhLT5kY250bF9leHRyYSA9IEVBXzcxMDsKIAogCS8qIGFuZCByZWdpc3RlciB0aGUgY2hpcCAqLwotCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYTQwMDB0X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmE0MDAwdF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImE0MDAwdC1zY3NpOiBObyBob3N0IGRldGVjdGVkOyAiCiAJCQkJImJvYXJkIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT9cbiIpOwpAQCAtNzgsNyArNzksNyBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC05Myw5ICs5NCw5IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwpAQCAtMTA4LDI1ICsxMDksMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhNDAwMHQtc2NzaSIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBhNDAwMHRfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGE0MDAwdF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgICAgICAgICAgPSAiYTQwMDB0LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IGE0MDAwdF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChhNDAwMHRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhNDAwMHRfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWE0MDAwdF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImE0MDAwdC1zY3NpIiwKIAkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGE0MDAwdF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIoYTQwMDB0X3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTEzNiw3ICsxMzksNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGE0MDAwdF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhNDAwMHRfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhNDAwMHRfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDkzYjYxZjEuLjA0NzFmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IF9faW5pdCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKIHsKIAlpbnQgaTsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCAyMWZlMDdmLi5hZDdhMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogI2VuZGlmCiAKIAotaW50IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCitpbnQgX19pbml0IGF0YXJpX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCiB7CiAJc3RhdGljIGludCBjYWxsZWQgPSAwOwogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKaW5kZXggZDg1OGYzZC4uNTc5OWNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYnZtZTYwMDBfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1idm1lNjAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitidm1lNjAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNTgsNyArNTgsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZidm1lNjAwMF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ2bWU2MDAwLXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC03Myw3ICs3NCw3IEBACiAJCWdvdG8gb3V0X3B1dF9ob3N0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTg3LDkgKzg4LDkgQEAKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQKLWJ2bWU2MDAwX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorYnZtZTYwMDBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKQEAgLTEwMCwyNSArMTAxLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBidm1lNjAwMF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJidm1lNjAwMC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IGJ2bWU2MDAwX3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJ2bWU2MDAwX3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJidm1lNjAwMC1zY3NpIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGJ2bWU2MDAwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYnZtZTYwMDBfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWJ2bWU2MDAwX3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYnZtZTYwMDAtc2NzaSIsCiAJCQkJCQkJICAgICAgIC0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogCQlyZXR1cm4gUFRSX0VSUihidm1lNjAwMF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xMjgsNyArMTMxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBidm1lNjAwMF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihidm1lNjAwMF9zY3NpX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidm1lNjAwMF9zY3NpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NoLmMgYi9kcml2ZXJzL3Njc2kvY2guYwppbmRleCBhZjk3MjU0Li43YjE2MzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY2guYworKysgYi9kcml2ZXJzL3Njc2kvY2guYwpAQCAtNDEsNiArNDEsNyBAQAogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9DSEFOR0VSX01BSk9SKTsKK01PRFVMRV9BTElBU19TQ1NJX0RFVklDRShUWVBFX01FRElVTV9DSEFOR0VSKTsKIAogc3RhdGljIGludCBpbml0ID0gMTsKIG1vZHVsZV9wYXJhbShpbml0LCBpbnQsIDA0NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDQwMDNkZWUuLmU3OWUxODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTEzNzMsMjEgKzEzNzMsMTQgQEAKICJEUklWRVJfSU5WQUxJRCIsICJEUklWRVJfVElNRU9VVCIsICJEUklWRVJfSEFSRCIsICJEUklWRVJfU0VOU0UifTsKICNkZWZpbmUgTlVNX0RSSVZFUkJZVEVfU1RSUyBBUlJBWV9TSVpFKGRyaXZlcmJ5dGVfdGFibGUpCiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHJpdmVyc3VnZ2VzdF90YWJsZVtdPXsiU1VHR0VTVF9PSyIsCi0iU1VHR0VTVF9SRVRSWSIsICJTVUdHRVNUX0FCT1JUIiwgIlNVR0dFU1RfUkVNQVAiLCAiU1VHR0VTVF9ESUUiLAotIlNVR0dFU1RfNSIsICJTVUdHRVNUXzYiLCAiU1VHR0VTVF83IiwgIlNVR0dFU1RfU0VOU0UifTsKLSNkZWZpbmUgTlVNX1NVR0dFU1RfU1RSUyBBUlJBWV9TSVpFKGRyaXZlcnN1Z2dlc3RfdGFibGUpCi0KIHZvaWQgc2NzaV9zaG93X3Jlc3VsdChpbnQgcmVzdWx0KQogewogCWludCBoYiA9IGhvc3RfYnl0ZShyZXN1bHQpOwotCWludCBkYiA9IChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX01BU0spOwotCWludCBzdSA9ICgoZHJpdmVyX2J5dGUocmVzdWx0KSAmIFNVR0dFU1RfTUFTSykgPj4gNCk7CisJaW50IGRiID0gZHJpdmVyX2J5dGUocmVzdWx0KTsKIAotCXByaW50aygiUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzLCVzXG4iLAorCXByaW50aygiUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzXG4iLAogCSAgICAgICAoaGIgPCBOVU1fSE9TVEJZVEVfU1RSUyA/IGhvc3RieXRlX3RhYmxlW2hiXSAgICAgOiAiaW52YWxpZCIpLAotCSAgICAgICAoZGIgPCBOVU1fRFJJVkVSQllURV9TVFJTID8gZHJpdmVyYnl0ZV90YWJsZVtkYl0gOiAiaW52YWxpZCIpLAotCSAgICAgICAoc3UgPCBOVU1fU1VHR0VTVF9TVFJTID8gZHJpdmVyc3VnZ2VzdF90YWJsZVtzdV0gOiAiaW52YWxpZCIpKTsKKwkgICAgICAgKGRiIDwgTlVNX0RSSVZFUkJZVEVfU1RSUyA/IGRyaXZlcmJ5dGVfdGFibGVbZGJdIDogImludmFsaWQiKSk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCmluZGV4IGE4M2QzNmUuLjRlYjZmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2RkcC5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfZGRwX2ZpbmRfcGFnZV9pbmRleCAtIHJldHVybiBkZHAgcGFnZSBpbmRleCBmb3IgYSBnaXZlbiBwYWdlIHNpemUuCisgKiBjeGdiM2lfZGRwX2ZpbmRfcGFnZV9pbmRleCAtIHJldHVybiBkZHAgcGFnZSBpbmRleCBmb3IgYSBnaXZlbiBwYWdlIHNpemUKICAqIEBwZ3N6OiBwYWdlIHNpemUKICAqIHJldHVybiB0aGUgZGRwIHBhZ2UgaW5kZXgsIGlmIG5vIG1hdGNoIGlzIGZvdW5kIHJldHVybiBERFBfUEdJRFhfTUFYLgogICovCkBAIC0zNTUsOCArMzU1LDcgQEAKICAqIEB0ZGV2OiB0M2NkZXYgYWRhcHRlcgogICogQHRpZDogY29ubmVjdGlvbiBpZAogICogQHRmb3JtYXQ6IHRhZyBmb3JtYXQKLSAqIEB0YWdwOiB0aGUgcy93IHRhZywgaWYgZGRwIHNldHVwIGlzIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoCi0gKgkgIGRkcC9odyB0YWcKKyAqIEB0YWdwOiBjb250YWlucyBzL3cgdGFnIGluaXRpYWxseSwgd2lsbCBiZSB1cGRhdGVkIHdpdGggZGRwL2h3IHRhZwogICogQGdsOiB0aGUgcGFnZSBtb21vcnkgbGlzdAogICogQGdmcDogYWxsb2NhdGlvbiBtb2RlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfZGRwLmggYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuaAppbmRleCAzZmFhZTc4Li43NWE2M2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuaAorKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9kZHAuaApAQCAtMTg1LDEyICsxODUsMTEgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfc3dfdGFnX3VzYWJsZSAtIGNoZWNrIGlmIGEgZ2l2ZW4gcy93IHRhZyBoYXMgZW5vdWdoIGJpdHMgbGVmdCBmb3IKLSAqCQkJICB0aGUgcmVzZXJ2ZWQvaHcgYml0cworICogY3hnYjNpX3N3X3RhZ191c2FibGUgLSBjaGVjayBpZiBzL3cgdGFnIGhhcyBlbm91Z2ggYml0cyBsZWZ0IGZvciBodyBiaXRzCiAgKiBAdGZvcm1hdDogdGFnIGZvcm1hdCBpbmZvcm1hdGlvbgogICogQHN3X3RhZzogcy93IHRhZyB0byBiZSBjaGVja2VkCiAgKgotICogcmV0dXJuIHRydWUgaWYgdGhlIHRhZyBpcyBhIGRkcCB0YWcsIGZhbHNlIG90aGVyd2lzZS4KKyAqIHJldHVybiB0cnVlIGlmIHRoZSB0YWcgY2FuIGJlIHVzZWQgZm9yIGh3IGRkcCB0YWcsIGZhbHNlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgY3hnYjNpX3N3X3RhZ191c2FibGUoc3RydWN0IGN4Z2IzaV90YWdfZm9ybWF0ICp0Zm9ybWF0LAogCQkJCQl1MzIgc3dfdGFnKQpAQCAtMjIyLDggKzIyMSw3IEBACiB9CiAKIC8qKgotICogY3hnYjNpX2RkcF90YWdfYmFzZSAtIHNoaWZ0IHRoZSBzL3cgdGFnIGJpdHMgc28gdGhhdCByZXNlcnZlZCBiaXRzIGFyZSBub3QKLSAqCQkJIHVzZWQuCisgKiBjeGdiM2lfZGRwX3RhZ19iYXNlIC0gc2hpZnQgcy93IHRhZyBiaXRzIHNvIHRoYXQgcmVzZXJ2ZWQgYml0cyBhcmUgbm90IHVzZWQKICAqIEB0Zm9ybWF0OiB0YWcgZm9ybWF0IGluZm9ybWF0aW9uCiAgKiBAc3dfdGFnOiBzL3cgdGFnIHRvIGJlIGNoZWNrZWQKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKaW5kZXggZmEyYTQ0Zi4uZTE4NWRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCkBAIC0xMDEsOCArMTAxLDcgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfYWRhcHRlcl9yZW1vdmUgLSByZWxlYXNlIGFsbCB0aGUgcmVzb3VyY2VzIGhlbGQgYW5kIGNsZWFudXAgYW55Ci0gKgloL3cgc2V0dGluZ3MKKyAqIGN4Z2IzaV9hZGFwdGVyX3JlbW92ZSAtIHJlbGVhc2UgdGhlIHJlc291cmNlcyBoZWxkIGFuZCBjbGVhbnVwIGgvdyBzZXR0aW5ncwogICogQHQzZGV2OiB0M2NkZXYgYWRhcHRlcgogICovCiB2b2lkIGN4Z2IzaV9hZGFwdGVyX3JlbW92ZShzdHJ1Y3QgdDNjZGV2ICp0M2RldikKQEAgLTEzNSw4ICsxMzQsNyBAQAogfQogCiAvKioKLSAqIGN4Z2IzaV9oYmFfZmluZF9ieV9uZXRkZXYgLSBmaW5kIHRoZSBjeGdiM2lfaGJhIHN0cnVjdHVyZSB3aXRoIGEgZ2l2ZW4KLSAqCW5ldF9kZXZpY2UKKyAqIGN4Z2IzaV9oYmFfZmluZF9ieV9uZXRkZXYgLSBmaW5kIHRoZSBjeGdiM2lfaGJhIHN0cnVjdHVyZSB2aWEgbmV0X2RldmljZQogICogQHQzZGV2OiB0M2NkZXYgYWRhcHRlcgogICovCiBzdHJ1Y3QgY3hnYjNpX2hiYSAqY3hnYjNpX2hiYV9maW5kX2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTE3MCw4ICsxNjgsNyBAQAogCWludCBlcnI7CiAKIAlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmN4Z2IzaV9ob3N0X3RlbXBsYXRlLAotCQkJCSBzaXplb2Yoc3RydWN0IGN4Z2IzaV9oYmEpLAotCQkJCSBDWEdCM0lfU0NTSV9RREVQVEhfREZMVCk7CisJCQkJIHNpemVvZihzdHJ1Y3QgY3hnYjNpX2hiYSksIDEpOwogCWlmICghc2hvc3QpIHsKIAkJY3hnYjNpX2xvZ19pbmZvKCJpc2NzaV9ob3N0X2FsbG9jIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTMzNSwxMyArMzMyLDEyIEBACiAgKiBAY21kc19tYXg6CQltYXggIyBvZiBjb21tYW5kcwogICogQHFkZXB0aDoJCXNjc2kgcXVldWUgZGVwdGgKICAqIEBpbml0aWFsX2NtZHNuOglpbml0aWFsIGlzY3NpIENNRFNOIGZvciB0aGlzIHNlc3Npb24KLSAqIEBob3N0X25vOgkJcG9pbnRlciB0byByZXR1cm4gaG9zdCBubwogICoKICAqIENyZWF0ZXMgYSBuZXcgaVNDU0kgc2Vzc2lvbgogICovCiBzdGF0aWMgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKIGN4Z2IzaV9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCB1MTYgY21kc19tYXgsIHUxNiBxZGVwdGgsCi0JCSAgICAgIHUzMiBpbml0aWFsX2NtZHNuLCB1MzIgKmhvc3Rfbm8pCisJCSAgICAgIHUzMiBpbml0aWFsX2NtZHNuKQogewogCXN0cnVjdCBjeGdiM2lfZW5kcG9pbnQgKmNlcDsKIAlzdHJ1Y3QgY3hnYjNpX2hiYSAqaGJhOwpAQCAtMzYwLDggKzM1Niw2IEBACiAJY3hnYjNpX2FwaV9kZWJ1ZygiZXAgMHglcCwgY2VwIDB4JXAsIGhiYSAweCVwLlxuIiwgZXAsIGNlcCwgaGJhKTsKIAlCVUdfT04oaGJhICE9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCkpOwogCi0JKmhvc3Rfbm8gPSBzaG9zdC0+aG9zdF9ubzsKLQogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmY3hnYjNpX2lzY3NpX3RyYW5zcG9ydCwgc2hvc3QsCiAJCQkJCSAgY21kc19tYXgsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV90Y3BfdGFzaykgKwpAQCAtMzk0LDkgKzM4OCw5IEBACiB9CiAKIC8qKgotICogY3hnYjNpX2Nvbm5fbWF4X3htaXRfZGxlbmd0aCAtLSBjaGVjayB0aGUgbWF4LiB4bWl0IHBkdSBzZWdtZW50IHNpemUsCi0gKiByZWR1Y2UgaXQgdG8gYmUgd2l0aGluIHRoZSBoYXJkd2FyZSBsaW1pdCBpZiBuZWVkZWQKKyAqIGN4Z2IzaV9jb25uX21heF94bWl0X2RsZW5ndGggLS0gY2FsYyB0aGUgbWF4LiB4bWl0IHBkdSBzZWdtZW50IHNpemUKICAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCisgKiBjaGVjayB0aGUgbWF4LiB4bWl0IHBkdSBwYXlsb2FkLCByZWR1Y2UgaXQgaWYgbmVlZGVkCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGN4Z2IzaV9jb25uX21heF94bWl0X2RsZW5ndGgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCiAKQEAgLTQxNyw4ICs0MTEsNyBAQAogfQogCiAvKioKLSAqIGN4Z2IzaV9jb25uX21heF9yZWN2X2RsZW5ndGggLS0gY2hlY2sgdGhlIG1heC4gcmVjdiBwZHUgc2VnbWVudCBzaXplIGFnYWluc3QKLSAqIHRoZSBoYXJkd2FyZSBsaW1pdAorICogY3hnYjNpX2Nvbm5fbWF4X3JlY3ZfZGxlbmd0aCAtLSBjaGVjayB0aGUgbWF4LiByZWN2IHBkdSBzZWdtZW50IHNpemUKICAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCiAgKiByZXR1cm4gMCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQsIDwgMCBvdGhlcndpc2UuCiAgKi8KQEAgLTc1OSw5ICs3NTIsOSBAQAogCiAvKioKICAqIGN4Z2IzaV9yZXNlcnZlX2l0dCAtIGdlbmVyYXRlIHRhZyBmb3IgYSBnaXZlIHRhc2sKLSAqIFRyeSB0byBzZXQgdXAgZGRwIGZvciBhIHNjc2kgcmVhZCB0YXNrLgogICogQHRhc2s6IGlzY3NpIHRhc2sKICAqIEBoZHJfaXR0OiB0YWcsIGZpbGxlZCBpbiBieSB0aGlzIGZ1bmN0aW9uCisgKiBTZXQgdXAgZGRwIGZvciBzY3NpIHJlYWQgdGFza3MgaWYgcG9zc2libGUuCiAgKi8KIGludCBjeGdiM2lfcmVzZXJ2ZV9pdHQoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIGl0dF90ICpoZHJfaXR0KQogewpAQCAtODA5LDkgKzgwMiw5IEBACiAKIC8qKgogICogY3hnYjNpX3JlbGVhc2VfaXR0IC0gcmVsZWFzZSB0aGUgdGFnIGZvciBhIGdpdmVuIHRhc2sKLSAqIGlmIHRoZSB0YWcgaXMgYSBkZHAgdGFnLCByZWxlYXNlIHRoZSBkZHAgc2V0dXAKICAqIEB0YXNrOglpc2NzaSB0YXNrCiAgKiBAaGRyX2l0dDoJdGFnCisgKiBJZiB0aGUgdGFnIGlzIGEgZGRwIHRhZywgcmVsZWFzZSB0aGUgZGRwIHNldHVwCiAgKi8KIHZvaWQgY3hnYjNpX3JlbGVhc2VfaXR0KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBpdHRfdCBoZHJfaXR0KQogewpAQCAtODQzLDcgKzgzNiw3IEBACiAJLmNhbl9xdWV1ZQkJPSBDWEdCM0lfU0NTSV9RREVQVEhfREZMVCAtIDEsCiAJLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKLQkuY21kX3Blcl9sdW4JCT0gSVNDU0lfREVGX0NNRF9QRVJfTFVOLAorCS5jbWRfcGVyX2x1bgkJPSBDWEdCM0lfU0NTSV9RREVQVEhfREZMVCwKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKaW5kZXggZGUzYjNiNi4uYzJlNDM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwpAQCAtMTQxNyw4ICsxNDE3LDcgQEAKIH0KIAogLyoqCi0gKiBjeGdiM2lfYzNjbl9yZWxlYXNlIC0gY2xvc2UgYW5kIHJlbGVhc2UgYW4gaXNjc2kgdGNwIGNvbm5lY3Rpb24gYW5kIGFueQotICogCXJlc291cmNlIGhlbGQKKyAqIGN4Z2IzaV9jM2NuX3JlbGVhc2UgLSBjbG9zZSBhbmQgcmVsZWFzZSBhbiBpc2NzaSB0Y3AgY29ubmVjdGlvbgogICogQGMzY246IHRoZSBpc2NzaSB0Y3AgY29ubmVjdGlvbgogICovCiB2b2lkIGN4Z2IzaV9jM2NuX3JlbGVhc2Uoc3RydWN0IHMzX2Nvbm4gKmMzY24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmggYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmgKaW5kZXggNjM0NGI5ZS4uMjc1ZjIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuaApAQCAtMTM5LDYgKzEzOSw3IEBACiAKIC8qKgogICogY3hnYjNpX3NkZXZfZGF0YSAtIFBlciBhZGFwdGVyIGRhdGEuCisgKgogICogTGlua2VkIG9mZiBvZiBlYWNoIEV0aGVybmV0IGRldmljZSBwb3J0IG9uIHRoZSBhZGFwdGVyLgogICogQWxzbyBhdmFpbGFibGUgdmlhIHRoZSB0M2NkZXYgc3RydWN0dXJlIHNpbmNlIHdlIGhhdmUgcG9pbnRlcnMgdG8gb3VyIHBvcnQKICAqIG5ldF9kZXZpY2UncyB0aGVyZSAuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKaW5kZXggMTcxMTVjMi4uN2VlYmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogCWN4Z2IzaV90eF9kZWJ1ZygiY24gMHglcC5cbiIsIGMzY24pOwogCWlmIChjb25uKSB7CiAJCWN4Z2IzaV90eF9kZWJ1ZygiY24gMHglcCwgY2lkICVkLlxuIiwgYzNjbiwgY29ubi0+aWQpOwotCQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IGUzNTZiNDM3Li5kYmExNTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC0yNDcsOCArMjQ3LDggQEAKIAkvKiBQcmVwYXJlIHRoZSBkYXRhIGJ1ZmZlciAqLwogCW1lbXNldChoLT5idWZmLCAwLCBzdHBnX2xlbik7CiAJaC0+YnVmZls0XSA9IFRQR1NfU1RBVEVfT1BUSU1JWkVEICYgMHgwZjsKLQloLT5idWZmWzZdID0gKGgtPmdyb3VwX2lkID4+IDgpICYgMHgwZjsKLQloLT5idWZmWzddID0gaC0+Z3JvdXBfaWQgJiAweDBmOworCWgtPmJ1ZmZbNl0gPSAoaC0+Z3JvdXBfaWQgPj4gOCkgJiAweGZmOworCWgtPmJ1ZmZbN10gPSBoLT5ncm91cF9pZCAmIDB4ZmY7CiAKIAlycSA9IGdldF9hbHVhX3JlcShzZGV2LCBoLT5idWZmLCBzdHBnX2xlbiwgV1JJVEUpOwogCWlmICghcnEpCkBAIC00NjEsNiArNDYxLDE1IEBACiAJCQkgKi8KIAkJCXJldHVybiBBRERfVE9fTUxRVUVVRTsKIAkJfQorCQlpZiAoc2Vuc2VfaGRyLT5hc2MgPT0gMHgzZiAmJiBzZW5zZV9oZHItPmFzY3EgPT0gMHgwZSkgeworCQkJLyoKKwkJCSAqIFJFUE9SVEVEX0xVTlNfREFUQV9IQVNfQ0hBTkdFRCBpcyByZXBvcnRlZAorCQkJICogd2hlbiBzd2l0Y2hpbmcgY29udHJvbGxlcnMgb24gdGFyZ2V0cyBsaWtlCisJCQkgKiBJbnRlbCBNdWx0aS1GbGV4LiBXZSBjYW4ganVzdCByZXRyeS4KKwkJCSAqLworCQkJcmV0dXJuIEFERF9UT19NTFFVRVVFOworCQl9CisKIAkJYnJlYWs7CiAJfQogCkBAIC02OTEsNiArNzAwLDcgQEAKIAl7IklCTSIsICIyMTA3OTAwIiB9LAogCXsiSUJNIiwgIjIxNDUiIH0sCiAJeyJQaWxsYXIiLCAiQXhpb20iIH0sCisJeyJJbnRlbCIsICJNdWx0aS1GbGV4In0sCiAJe05VTEwsIE5VTEx9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggNTM2NjQ3Ni4uNDNiOGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtNDQ5LDI4ICs0NDksNDAgQEAKIAkJCQkgICAgdW5zaWduZWQgY2hhciAqc2Vuc2VidWYpCiB7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNlbnNlX2hkcjsKLQlpbnQgc2Vuc2UsIGVyciA9IFNDU0lfREhfSU8sIHJldDsKKwlpbnQgZXJyID0gU0NTSV9ESF9JTywgcmV0OwogCiAJcmV0ID0gc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2Vuc2VidWYsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgJnNlbnNlX2hkcik7CiAJaWYgKCFyZXQpCiAJCWdvdG8gZG9uZTsKIAogCWVyciA9IFNDU0lfREhfT0s7Ci0Jc2Vuc2UgPSAoc2Vuc2VfaGRyLnNlbnNlX2tleSA8PCAxNikgfCAoc2Vuc2VfaGRyLmFzYyA8PCA4KSB8Ci0JCQlzZW5zZV9oZHIuYXNjcTsKLQkvKiBJZiBpdCBpcyByZXRyeWFibGUgZmFpbHVyZSwgc3VibWl0IHRoZSBjOSBpbnF1aXJ5IGFnYWluICovCi0JaWYgKHNlbnNlID09IDB4NTkxMzYgfHwgc2Vuc2UgPT0gMHg2OGIwMiB8fCBzZW5zZSA9PSAweGI4YjAyIHx8Ci0JCQkgICAgc2Vuc2UgPT0gMHg2MjkwMCkgewotCQkvKiAweDU5MTM2ICAgIC0gQ29tbWFuZCBsb2NrIGNvbnRlbnRpb24KLQkJICogMHhbNmJdOGIwMiAtIFF1aWVzZW5zZSBpbiBwcm9ncmVzcyBvciBhY2hpZXZlZAotCQkgKiAweDYyOTAwICAgIC0gUG93ZXIgT24sIFJlc2V0LCBvciBCdXMgRGV2aWNlIFJlc2V0Ci0JCSAqLworCisJc3dpdGNoIChzZW5zZV9oZHIuc2Vuc2Vfa2V5KSB7CisJY2FzZSBOT19TRU5TRToKKwljYXNlIEFCT1JURURfQ09NTUFORDoKKwljYXNlIFVOSVRfQVRURU5USU9OOgogCQllcnIgPSBTQ1NJX0RIX1JFVFJZOworCQlicmVhazsKKwljYXNlIE5PVF9SRUFEWToKKwkJaWYgKHNlbnNlX2hkci5hc2MgPT0gMHgwNCAmJiBzZW5zZV9oZHIuYXNjcSA9PSAweDAxKQorCQkJLyogTFVOIE5vdCBSZWFkeSBhbmQgaXMgaW4gdGhlIFByb2Nlc3Mgb2YgQmVjb21pbmcKKwkJCSAqIFJlYWR5CisJCQkgKi8KKwkJCWVyciA9IFNDU0lfREhfUkVUUlk7CisJCWJyZWFrOworCWNhc2UgSUxMRUdBTF9SRVFVRVNUOgorCQlpZiAoc2Vuc2VfaGRyLmFzYyA9PSAweDkxICYmIHNlbnNlX2hkci5hc2NxID09IDB4MzYpCisJCQkvKgorCQkJICogQ29tbWFuZCBMb2NrIGNvbnRlbnRpb24KKwkJCSAqLworCQkJZXJyID0gU0NTSV9ESF9SRVRSWTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJICAgICJNT0RFX1NFTEVDVCBmYWlsZWQgd2l0aCBzZW5zZSAlMDJ4LyUwMngvJTAyeC5cbiIsCisJCQkgICAgc2Vuc2VfaGRyLnNlbnNlX2tleSwgc2Vuc2VfaGRyLmFzYywgc2Vuc2VfaGRyLmFzY3EpOwogCX0KIAotCWlmIChzZW5zZSkKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAotCQkJIk1PREVfU0VMRUNUIGZhaWxlZCB3aXRoIHNlbnNlIDB4JXguXG4iLCBzZW5zZSk7CiBkb25lOgogCXJldHVybiBlcnI7CiB9CkBAIC01NjIsNiArNTc0LDEyIEBACiAJCQkgKiBKdXN0IHJldHJ5IGFuZCB3YWl0LgogCQkJICovCiAJCQlyZXR1cm4gQUREX1RPX01MUVVFVUU7CisJCWlmIChzZW5zZV9oZHItPmFzYyA9PSAweEExICAmJiBzZW5zZV9oZHItPmFzY3EgPT0gMHgwMikKKwkJCS8qIExVTiBOb3QgUmVhZHkgLSBRdWllc2NlbnNlIGluIHByb2dyZXNzCisJCQkgKiBvciBoYXMgYmVlbiBhY2hpZXZlZAorCQkJICogSnVzdCByZXRyeS4KKwkJCSAqLworCQkJcmV0dXJuIEFERF9UT19NTFFVRVVFOwogCQlicmVhazsKIAljYXNlIElMTEVHQUxfUkVRVUVTVDoKIAkJaWYgKHNlbnNlX2hkci0+YXNjID09IDB4OTQgJiYgc2Vuc2VfaGRyLT5hc2NxID09IDB4MDEpIHsKQEAgLTU3OSw2ICs1OTcsMTEgQEAKIAkJCSAqIFBvd2VyIE9uLCBSZXNldCwgb3IgQnVzIERldmljZSBSZXNldCwganVzdCByZXRyeS4KIAkJCSAqLwogCQkJcmV0dXJuIEFERF9UT19NTFFVRVVFOworCQlpZiAoc2Vuc2VfaGRyLT5hc2MgPT0gMHg4YiAmJiBzZW5zZV9oZHItPmFzY3EgPT0gMHgwMikKKwkJCS8qCisJCQkgKiBRdWllc2NlbmNlIGluIHByb2dyZXNzICwganVzdCByZXRyeS4KKwkJCSAqLworCQkJcmV0dXJuIEFERF9UT19NTFFVRVVFOwogCQlicmVhazsKIAl9CiAJLyogc3VjY2VzcyBqdXN0IG1lYW5zIHdlIGRvIG5vdCBjYXJlIHdoYXQgc2NzaS1tbCBkb2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY190cmFuc3BvcnRfZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNfdHJhbnNwb3J0X2Zjb2UuYwppbmRleCBiZjdmZTZmLi44ODYyNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY190cmFuc3BvcnRfZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2ZjX3RyYW5zcG9ydF9mY29lLmMKQEAgLTMzLDE5ICszMywxOSBAQAogc3RhdGljIERFRklORV9NVVRFWChmY29lX3RyYW5zcG9ydHNfbG9jayk7CiAKIC8qKgotICogZmNvZV90cmFuc3BvcnRfZGVmYXVsdCAtIHJldHVybnMgcHRyIHRvIHRoZSBkZWZhdWx0IHRyYW5zcG9ydCBmY29lX3N3Ci0gKiovCisgKiBmY29lX3RyYW5zcG9ydF9kZWZhdWx0KCkgLSBSZXR1cm5zIHB0ciB0byB0aGUgZGVmYXVsdCB0cmFuc3BvcnQgZmNvZV9zdworICovCiBzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKmZjb2VfdHJhbnNwb3J0X2RlZmF1bHQodm9pZCkKIHsKIAlyZXR1cm4gJmZjb2Vfc3dfdHJhbnNwb3J0OwogfQogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X3RvX3BjaWRldiAtIGdldCB0aGUgcGNpIGRldiBmcm9tIGEgbmV0ZGV2CisgKiBmY29lX3RyYW5zcG9ydF90b19wY2lkZXYoKSAtIGdldCB0aGUgcGNpIGRldiBmcm9tIGEgbmV0ZGV2CiAgKiBAbmV0ZGV2OiB0aGUgbmV0ZGV2IHRoYXQgcGNpIGRldiB3aWxsIGJlIHJldHJpdmVkIGZyb20KICAqCiAgKiBSZXR1cm5zOiBOVUxMIG9yIHRoZSBjb3Jyc3BvbmRpbmcgcGNpX2RldgotICoqLworICovCiBzdHJ1Y3QgcGNpX2RldiAqZmNvZV90cmFuc3BvcnRfcGNpZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJaWYgKCFuZXRkZXYtPmRldi5wYXJlbnQpCkBAIC01NCwxOCArNTQsMTcgQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9kZXZpY2VfbG9va3VwIC0gZmluZCBvdXQgbmV0ZGV2IGlzIG1hbmFnZWQgYnkgdGhlCi0gKiB0cmFuc3BvcnQKLSAqIGFzc2lnbiBhIHRyYW5zcG9ydCB0byBhIGRldmljZQorICogZmNvZV90cmFuc3BvcnRfZGV2aWNlX2xvb2t1cCgpIC0gTG9va3VwIGEgdHJhbnNwb3J0CiAgKiBAbmV0ZGV2OiB0aGUgbmV0ZGV2IHRoZSB0cmFuc3BvcnQgdG8gYmUgYXR0YWNoZWQgdG8KICAqCiAgKiBUaGlzIHdpbGwgbG9vayBmb3IgZXhpc3Rpbmcgb2ZmbG9hZCBkcml2ZXIsIGlmIG5vdCBmb3VuZCwgaXQgZmFsbHMgYmFjayB0bwogICogdGhlIGRlZmF1bHQgc3cgaGJhIChmY29lX3N3KSBhcyBpdHMgZmNvZSB0cmFuc3BvcnQuCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLwotc3RhdGljIHN0cnVjdCBmY29lX3RyYW5zcG9ydF9pbnRlcm5hbCAqZmNvZV90cmFuc3BvcnRfZGV2aWNlX2xvb2t1cCgKLQlzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNvZV90cmFuc3BvcnRfaW50ZXJuYWwgKgorZmNvZV90cmFuc3BvcnRfZGV2aWNlX2xvb2t1cChzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQsCisJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0X2ludGVybmFsICp0aTsKIApAQCAtODEsMTQgKzgwLDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2RldmljZV9hZGQgLSBhc3NpZ24gYSB0cmFuc3BvcnQgdG8gYSBkZXZpY2UKKyAqIGZjb2VfdHJhbnNwb3J0X2RldmljZV9hZGQoKSAtIEFzc2lnbiBhIHRyYW5zcG9ydCB0byBhIGRldmljZQogICogQG5ldGRldjogdGhlIG5ldGRldiB0aGUgdHJhbnNwb3J0IHRvIGJlIGF0dGFjaGVkIHRvCiAgKgogICogVGhpcyB3aWxsIGxvb2sgZm9yIGV4aXN0aW5nIG9mZmxvYWQgZHJpdmVyLCBpZiBub3QgZm91bmQsIGl0IGZhbGxzIGJhY2sgdG8KICAqIHRoZSBkZWZhdWx0IHN3IGhiYSAoZmNvZV9zdykgYXMgaXRzIGZjb2UgdHJhbnNwb3J0LgogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX3RyYW5zcG9ydF9kZXZpY2VfYWRkKHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdCwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC0xMjMsMTQgKzEyMiwxNCBAQAogfQogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2RldmljZV9yZW1vdmUgLSByZW1vdmUgYSBkZXZpY2UgZnJvbSBpdHMgdHJhbnNwb3J0CisgKiBmY29lX3RyYW5zcG9ydF9kZXZpY2VfcmVtb3ZlKCkgLSBSZW1vdmUgYSBkZXZpY2UgZnJvbSBpdHMgdHJhbnNwb3J0CiAgKiBAbmV0ZGV2OiB0aGUgbmV0ZGV2IHRoZSB0cmFuc3BvcnQgdG8gYmUgYXR0YWNoZWQgdG8KICAqCi0gKiB0aGlzIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSB0cmFuc3BvcnQgc28gdGhlIGdpdmVuIHRyYW5zcG9ydCB3aWxsCisgKiBUaGlzIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSB0cmFuc3BvcnQgc28gdGhlIGdpdmVuIHRyYW5zcG9ydCB3aWxsCiAgKiBub3QgbWFuYWdlIHRoaXMgZGV2aWNlIGFueSBtb3JlCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBzdGF0aWMgaW50IGZjb2VfdHJhbnNwb3J0X2RldmljZV9yZW1vdmUoc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0LAogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewpAQCAtMTU1LDEzICsxNTQsMTMgQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9kZXZpY2VfcmVtb3ZlX2FsbCAtIHJlbW92ZSBhbGwgZnJvbSB0cmFuc3BvcnQgZGV2bGlzdAorICogZmNvZV90cmFuc3BvcnRfZGV2aWNlX3JlbW92ZV9hbGwoKSAtIFJlbW92ZSBhbGwgZnJvbSB0cmFuc3BvcnQgZGV2bGlzdAogICoKLSAqIHRoaXMgcmVtb3ZlcyB0aGUgZGV2aWNlIGZyb20gdGhlIHRyYW5zcG9ydCBzbyB0aGUgZ2l2ZW4gdHJhbnNwb3J0IHdpbGwKKyAqIFRoaXMgcmVtb3ZlcyB0aGUgZGV2aWNlIGZyb20gdGhlIHRyYW5zcG9ydCBzbyB0aGUgZ2l2ZW4gdHJhbnNwb3J0IHdpbGwKICAqIG5vdCBtYW5hZ2UgdGhpcyBkZXZpY2UgYW55IG1vcmUKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyB2b2lkIGZjb2VfdHJhbnNwb3J0X2RldmljZV9yZW1vdmVfYWxsKHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdCkKIHsKIAlzdHJ1Y3QgZmNvZV90cmFuc3BvcnRfaW50ZXJuYWwgKnRpLCAqdG1wOwpAQCAtMTc1LDE4ICsxNzQsMTggQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9tYXRjaCAtIHVzZSB0aGUgYnVzIGRldmljZSBtYXRjaCBmdW5jdGlvbiB0byBtYXRjaCB0aGUgaHcKLSAqIEB0OiB0aGUgZmNvZSB0cmFuc3BvcnQKLSAqIEBuZXRkZXY6CisgKiBmY29lX3RyYW5zcG9ydF9tYXRjaCgpIC0gVXNlIHRoZSBidXMgZGV2aWNlIG1hdGNoIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSBodworICogQHQ6IFRoZSBmY29lIHRyYW5zcG9ydCB0byBjaGVjaworICogQG5ldGRldjogVGhlIG5ldGRldiB0byBtYXRjaCBhZ2FpbnN0CiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnaXZuZSB0cmFuc3BvcnQgd2FudHMgdG8gbWFuYWdlIHRoZQorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnaXZlbiB0cmFuc3BvcnQgd2FudHMgdG8gbWFuYWdlIHRoZQogICogaW5wdXQgbmV0ZGV2LiBpZiB0aGUgdHJhbnNwb3J0cyBpbXBsZW1lbnRzIHRoZSBtYXRjaCBmdW5jdGlvbiwgaXQgd2lsbCBiZQogICogY2FsbGVkLCBvLncuIHdlIGp1c3QgY29tcGFyZSB0aGUgcGNpIHZlbmRvciBhbmQgZGV2aWNlIGlkLgogICoKICAqIFJldHVybnM6IHRydWUgZm9yIG1hdGNoIHVwCi0gKiovCisgKi8KIHN0YXRpYyBib29sIGZjb2VfdHJhbnNwb3J0X21hdGNoKHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdCwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCS8qIG1hdGNoIHRyYW5zcG9ydCBieSB2ZW5kb3IgYW5kIGRldmljZSBpZCAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2k7CkBAIC0yMTAsMTcgKzIwOSwxNyBAQAogfQogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2xvb2t1cCAtIGNoZWNrIGlmIHRoZSB0cmFuc3BvcnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkCisgKiBmY29lX3RyYW5zcG9ydF9sb29rdXAoKSAtIENoZWNrIGlmIHRoZSB0cmFuc3BvcnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkCiAgKiBAdDogdGhlIHRyYW5zcG9ydCB0byBiZSBsb29rZWQgdXAKICAqCiAgKiBUaGlzIGNvbXBhcmVzIHRoZSBwYXJlbnQgZGV2aWNlIChwY2kpIHZlbmRvciBhbmQgZGV2aWNlIGlkCiAgKgogICogUmV0dXJuczogTlVMTCBpZiBub3QgZm91bmQKICAqCi0gKiBUT0RPIC0gcmV0dXJuIGRlZmF1bHQgc3cgdHJhbnNwb3J0IGlmIG5vIG90aGVyIHRyYW5zcG9ydCBpcyBmb3VuZAotICoqLwotc3RhdGljIHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqZmNvZV90cmFuc3BvcnRfbG9va3VwKAotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCisgKiBUT0RPOiByZXR1cm4gZGVmYXVsdCBzdyB0cmFuc3BvcnQgaWYgbm8gb3RoZXIgdHJhbnNwb3J0IGlzIGZvdW5kCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKgorZmNvZV90cmFuc3BvcnRfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0OwogCkBAIC0yMzksMTEgKzIzOCwxMSBAQAogfQogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X3JlZ2lzdGVyIC0gYWRkcyBhIGZjb2UgdHJhbnNwb3J0IHRvIHRoZSBmY29lIHRyYW5zcG9ydHMgbGlzdAorICogZmNvZV90cmFuc3BvcnRfcmVnaXN0ZXIoKSAtIEFkZHMgYSBmY29lIHRyYW5zcG9ydCB0byB0aGUgZmNvZSB0cmFuc3BvcnRzIGxpc3QKICAqIEB0OiBwdHIgdG8gdGhlIGZjb2UgdHJhbnNwb3J0IHRvIGJlIGFkZGVkCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBpbnQgZmNvZV90cmFuc3BvcnRfcmVnaXN0ZXIoc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0KQogewogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdHQ7CkBAIC0yNTksOSArMjU4LDYgQEAKIAlsaXN0X2FkZF90YWlsKCZ0LT5saXN0LCAmZmNvZV90cmFuc3BvcnRzKTsKIAltdXRleF91bmxvY2soJmZjb2VfdHJhbnNwb3J0c19sb2NrKTsKIAotCW11dGV4X2luaXQoJnQtPmRldmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZ0LT5kZXZsaXN0KTsKLQogCXByaW50ayhLRVJOX0RFQlVHICJmY29lX3RyYW5zcG9ydF9yZWdpc3Rlcjolc1xuIiwgdC0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI2OSwxMSArMjY1LDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX3RyYW5zcG9ydF9yZWdpc3Rlcik7CiAKIC8qKgotICogZmNvZV90cmFuc3BvcnRfdW5yZWdpc3RlciAtIHJlbW92ZSB0aGUgdHJhbnBvcnQgZnJvIHRoZSBmY29lIHRyYW5zcG9ydHMgbGlzdAorICogZmNvZV90cmFuc3BvcnRfdW5yZWdpc3RlcigpIC0gUmVtb3ZlIHRoZSB0cmFucG9ydCBmcm8gdGhlIGZjb2UgdHJhbnNwb3J0cyBsaXN0CiAgKiBAdDogcHRyIHRvIHRoZSBmY29lIHRyYW5zcG9ydCB0byBiZSByZW1vdmVkCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBpbnQgZmNvZV90cmFuc3BvcnRfdW5yZWdpc3RlcihzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQpCiB7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0dCwgKnRtcDsKQEAgLTI5NCw4ICsyOTAsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV90cmFuc3BvcnRfdW5yZWdpc3Rlcik7CiAKLS8qCi0gKiBmY29lX2xvYWRfdHJhbnNwb3J0X2RyaXZlciAtIGxvYWQgYW4gb2ZmbG9hZCBkcml2ZXIgYnkgYWxpYXMgbmFtZQorLyoqCisgKiBmY29lX2xvYWRfdHJhbnNwb3J0X2RyaXZlcigpIC0gTG9hZCBhbiBvZmZsb2FkIGRyaXZlciBieSBhbGlhcyBuYW1lCiAgKiBAbmV0ZGV2OiB0aGUgdGFyZ2V0IG5ldCBkZXZpY2UKICAqCiAgKiBSZXF1ZXN0cyBmb3IgYW4gb2ZmbG9hZCBkcml2ZXIgbW9kdWxlIGFzIHRoZSBmY29lIHRyYW5zcG9ydCwgaWYgZmFpbHMsIGl0CkBAIC0zMDcsNyArMzAzLDcgQEAKICAqIAkzLiBwdXJlIGh3IGZjb2UgaGJhIG1heSBub3QgaGF2ZSBuZXRkZXYKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIGludCBmY29lX2xvYWRfdHJhbnNwb3J0X2RyaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2k7CkBAIC0zMzUsMTQgKzMzMSwxNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV9sb2FkX3RyYW5zcG9ydF9kcml2ZXIpOwogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2F0dGFjaCAtIGxvYWQgdHJhbnNwb3J0IHRvIGZjb2UKKyAqIGZjb2VfdHJhbnNwb3J0X2F0dGFjaCgpIC0gTG9hZCB0cmFuc3BvcnQgdG8gZmNvZQogICogQG5ldGRldjogdGhlIG5ldGRldiB0aGUgdHJhbnNwb3J0IHRvIGJlIGF0dGFjaGVkIHRvCiAgKgogICogVGhpcyB3aWxsIGxvb2sgZm9yIGV4aXN0aW5nIG9mZmxvYWQgZHJpdmVyLCBpZiBub3QgZm91bmQsIGl0IGZhbGxzIGJhY2sgdG8KICAqIHRoZSBkZWZhdWx0IHN3IGhiYSAoZmNvZV9zdykgYXMgaXRzIGZjb2UgdHJhbnNwb3J0LgogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogaW50IGZjb2VfdHJhbnNwb3J0X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqdDsKQEAgLTM3MywxMSArMzY5LDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX3RyYW5zcG9ydF9hdHRhY2gpOwogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X3JlbGVhc2UgLSB1bmxvYWQgdHJhbnNwb3J0IGZyb20gZmNvZQorICogZmNvZV90cmFuc3BvcnRfcmVsZWFzZSgpIC0gVW5sb2FkIHRyYW5zcG9ydCBmcm9tIGZjb2UKICAqIEBuZXRkZXY6IHRoZSBuZXQgZGV2aWNlIG9uIHdoaWNoIGZjb2UgaXMgdG8gYmUgcmVsZWFzZWQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIGludCBmY29lX3RyYW5zcG9ydF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICp0OwpAQCAtNDEwLDEyICs0MDYsMTIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfdHJhbnNwb3J0X3JlbGVhc2UpOwogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2luaXQgLSBpbml0aWFsaXplcyBmY29lIHRyYW5zcG9ydCBsYXllcgorICogZmNvZV90cmFuc3BvcnRfaW5pdCgpIC0gSW5pdGlhbGl6ZXMgZmNvZSB0cmFuc3BvcnQgbGF5ZXIKICAqCiAgKiBUaGlzIHByZXBhcmVzIGZvciB0aGUgZmNvZSB0cmFuc3BvcnQgbGF5ZXIKICAqCiAgKiBSZXR1cm5zOiBub25lCi0gKiovCisgKi8KIGludCBfX2luaXQgZmNvZV90cmFuc3BvcnRfaW5pdCh2b2lkKQogewogCUlOSVRfTElTVF9IRUFEKCZmY29lX3RyYW5zcG9ydHMpOwpAQCAtNDI0LDEyICs0MjAsMTMgQEAKIH0KIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9leGl0IC0gY2xlYW5zIHVwIHRoZSBmY29lIHRyYW5zcG9ydCBsYXllcgorICogZmNvZV90cmFuc3BvcnRfZXhpdCgpIC0gQ2xlYW5zIHVwIHRoZSBmY29lIHRyYW5zcG9ydCBsYXllcgorICoKICAqIFRoaXMgY2xlYW5zIHVwIHRoZSBmY29lIHRyYW5zcG9ydCBsYXllci4gcmVtb3ZpbmcgYW55IHRyYW5zcG9ydCBvbiB0aGUgbGlzdCwKICAqIG5vdGUgdGhhdCB0aGUgdHJhbnNwb3J0IGRlc3Ryb3kgZnVuYyBpcyBub3QgY2FsbGVkIGhlcmUuCiAgKgogICogUmV0dXJuczogbm9uZQotICoqLworICovCiBpbnQgX19leGl0IGZjb2VfdHJhbnNwb3J0X2V4aXQodm9pZCkKIHsKIAlzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKnQsICp0bXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3N3LmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3N3LmMKaW5kZXggZGM0Y2Q1ZS4uMmJiYmUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9zdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2Vfc3cuYwpAQCAtMTA0LDE5ICsxMDQsMTkgQEAKIAkubWF4X3NlY3RvcnMgPSAweGZmZmYsCiB9OwogCi0vKgotICogZmNvZV9zd19scG9ydF9jb25maWcgLSBzZXRzIHVwIHRoZSBmY19scG9ydAorLyoqCisgKiBmY29lX3N3X2xwb3J0X2NvbmZpZygpIC0gc2V0cyB1cCB0aGUgZmNfbHBvcnQKICAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydAogICogQHNob3N0OiBwdHIgdG8gdGhlIHBhcmVudCBzY3NpIGhvc3QKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKgogICovCiBzdGF0aWMgaW50IGZjb2Vfc3dfbHBvcnRfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHApCiB7CiAJaW50IGkgPSAwOwogCi0JbHAtPmxpbmtfc3RhdHVzID0gMDsKKwlscC0+bGlua191cCA9IDA7CisJbHAtPnFmdWxsID0gMDsKIAlscC0+bWF4X3JldHJ5X2NvdW50ID0gMzsKIAlscC0+ZV9kX3RvdiA9IDIgKiAxMDAwOwkvKiBGQy1GUyBkZWZhdWx0ICovCiAJbHAtPnJfYV90b3YgPSAyICogMiAqIDEwMDA7CkBAIC0xMzMsMTkgKzEzMywyNCBAQAogCS8qIGxwb3J0IGZjX2xwb3J0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiAqLwogCWZjX2xwb3J0X2NvbmZpZyhscCk7CiAKKwkvKiBvZmZsb2FkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiAqLworCWxwLT5jcmNfb2ZmbG9hZCA9IDA7CisJbHAtPnNlcV9vZmZsb2FkID0gMDsKKwlscC0+bHJvX2VuYWJsZWQgPSAwOworCWxwLT5scm9feGlkID0gMDsKKwlscC0+bHNvX21heCA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZjb2Vfc3dfbmV0ZGV2X2NvbmZpZyAtIHNldHMgdXAgZmNvZV9zb2Z0YyBmb3IgbHBvcnQgYW5kIG5ldHdvcmsKLSAqIHJlbGF0ZWQgcHJvcGVydGllcworLyoqCisgKiBmY29lX3N3X25ldGRldl9jb25maWcoKSAtIFNldCB1cCBuZXRkZXYgZm9yIFNXIEZDb0UKICAqIEBscCA6IHB0ciB0byB0aGUgZmNfbHBvcnQKICAqIEBuZXRkZXYgOiBwdHIgdG8gdGhlIGFzc29jaWF0ZWQgbmV0ZGV2aWNlIHN0cnVjdAogICoKICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGZjb2Vfc3dfbHBvcnRfY29uZmlnKCkgYXMgaXQgd2lsbCB1c2UgbHBvcnQgbXV0ZXgKICAqCiAgKiBSZXR1cm5zIDogMCBmb3Igc3VjY2VzcwotICoKICAqLwogc3RhdGljIGludCBmY29lX3N3X25ldGRldl9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTE4MSwxNiArMTg2LDM2IEBACiAJaWYgKGZjX3NldF9tZnMobHAsIG1mcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbHAtPmxpbmtfc3RhdHVzID0gfkZDX1BBVVNFICYgfkZDX0xJTktfVVA7CiAJaWYgKCFmY29lX2xpbmtfb2sobHApKQotCQlscC0+bGlua19zdGF0dXMgfD0gRkNfTElOS19VUDsKKwkJbHAtPmxpbmtfdXAgPSAxOwogCiAJLyogb2ZmbG9hZCBmZWF0dXJlcyBzdXBwb3J0ICovCiAJaWYgKGZjLT5yZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQogCQlscC0+c2dfc3VwcCA9IDE7CiAKLQorI2lmZGVmIE5FVElGX0ZfRkNPRV9DUkMKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9DUkMpIHsKKwkJbHAtPmNyY19vZmZsb2FkID0gMTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImZjb2U6JXMgc3VwcG9ydHMgRkNDUkMgb2ZmbG9hZFxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJfQorI2VuZGlmCisjaWZkZWYgTkVUSUZfRl9GU08KKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlNPKSB7CisJCWxwLT5zZXFfb2ZmbG9hZCA9IDE7CisJCWxwLT5sc29fbWF4ID0gbmV0ZGV2LT5nc29fbWF4X3NpemU7CisJCXByaW50ayhLRVJOX0RFQlVHICJmY29lOiVzIHN1cHBvcnRzIExTTyBmb3IgbWF4IGxlbiAweCV4XG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBscC0+bHNvX21heCk7CisJfQorI2VuZGlmCisJaWYgKG5ldGRldi0+ZmNvZV9kZHBfeGlkKSB7CisJCWxwLT5scm9fZW5hYmxlZCA9IDE7CisJCWxwLT5scm9feGlkID0gbmV0ZGV2LT5mY29lX2RkcF94aWQ7CisJCXByaW50ayhLRVJOX0RFQlVHICJmY29lOiVzIHN1cHBvcnRzIExSTyBmb3IgbWF4IHhpZCAweCV4XG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBscC0+bHJvX3hpZCk7CisJfQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUpOworCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMDsKIAogCS8qIHNldHVwIFNvdXJjZSBNYWMgQWRkcmVzcyAqLwogCW1lbWNweShmYy0+Y3RsX3NyY19hZGRyLCBmYy0+cmVhbF9kZXYtPmRldl9hZGRyLApAQCAtMjI0LDE2ICsyNDksMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZjb2Vfc3dfc2hvc3RfY29uZmlnIC0gc2V0cyB1cCBmY19scG9ydC0+aG9zdAorLyoqCisgKiBmY29lX3N3X3Nob3N0X2NvbmZpZygpIC0gU2V0cyB1cCBmY19scG9ydC0+aG9zdAogICogQGxwIDogcHRyIHRvIHRoZSBmY19scG9ydAogICogQHNob3N0IDogcHRyIHRvIHRoZSBhc3NvY2lhdGVkIHNjc2kgaG9zdAogICogQGRldiA6IGRldmljZSBhc3NvY2lhdGVkIHRvIHNjc2kgaG9zdAogICoKLSAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGZjb2Vfc3dfbHBvcnRfY29uZmlnKSBhbmQgZmNvZV9zd19uZXRkZXZfY29uZmlnKCkKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGZjb2Vfc3dfbHBvcnRfY29uZmlnKCkgYW5kIGZjb2Vfc3dfbmV0ZGV2X2NvbmZpZygpCiAgKgogICogUmV0dXJucyA6IDAgZm9yIHN1Y2Nlc3MKLSAqCiAgKi8KIHN0YXRpYyBpbnQgZmNvZV9zd19zaG9zdF9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCiAJCQkJc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMjYxLDggKzI4NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBmY29lX3N3X2VtX2NvbmZpZyAtIGFsbG9jYXRlcyBlbSBmb3IgdGhpcyBscG9ydAorLyoqCisgKiBmY29lX3N3X2VtX2NvbmZpZygpIC0gYWxsb2NhdGVzIGVtIGZvciB0aGlzIGxwb3J0CiAgKiBAbHA6IHRoZSBwb3J0IHRoYXQgZW0gaXMgdG8gYWxsb2NhdGVkIGZvcgogICoKICAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3MKQEAgLTI3OSw4ICszMDMsOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogZmNvZV9zd19kZXN0cm95IC0gRkNvRSBzb2Z0d2FyZSBIQkEgdGVhci1kb3duIGZ1bmN0aW9uCisvKioKKyAqIGZjb2Vfc3dfZGVzdHJveSgpIC0gRkNvRSBzb2Z0d2FyZSBIQkEgdGVhci1kb3duIGZ1bmN0aW9uCiAgKiBAbmV0ZGV2OiBwdHIgdG8gdGhlIGFzc29jaWF0ZWQgbmV0X2RldmljZQogICoKICAqIFJldHVybnM6IDAgaWYgbGluayBpcyBPSyBmb3IgdXNlIGJ5IEZDb0UuCkBAIC0zMDEsNyArMzI1LDcgQEAKIAlpZiAoIWxwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWZjID0gZmNvZV9zb2Z0YyhscCk7CisJZmMgPSBscG9ydF9wcml2KGxwKTsKIAogCS8qIExvZ291dCBvZiB0aGUgZmFicmljICovCiAJZmNfZmFicmljX2xvZ29mZihscCk7CkBAIC0zNDksMTIgKzM3Myw1MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGxpYmZjX2Z1bmN0aW9uX3RlbXBsYXRlIGZjb2Vfc3dfbGliZmNfZmNuX3RlbXBsID0gewotCS5mcmFtZV9zZW5kID0gZmNvZV94bWl0LAotfTsKKy8qCisgKiBmY29lX3N3X2RkcF9zZXR1cCAtIGNhbGxzIExMRCdzIGRkcF9zZXR1cCB0aHJvdWdoIG5ldF9kZXZpY2UKKyAqIEBscDoJdGhlIGNvcnJlc3BvbmRpbmcgZmNfbHBvcnQKKyAqIEB4aWQ6IHRoZSBleGNoYW5nZSBpZCBmb3IgdGhpcyBkZHAgdHJhbnNmZXIKKyAqIEBzZ2w6IHRoZSBzY2F0dGVybGlzdCBkZXNjcmliaW5nIHRoaXMgdHJhbnNmZXIKKyAqIEBzZ2M6IG51bWJlciBvZiBzZyBpdGVtcworICoKKyAqIFJldHVybnMgOiAwIG5vIGRkcAorICovCitzdGF0aWMgaW50IGZjb2Vfc3dfZGRwX3NldHVwKHN0cnVjdCBmY19scG9ydCAqbHAsIHUxNiB4aWQsCisJCQkgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2djKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuID0gZmNvZV9uZXRkZXYobHApOworCisJaWYgKG4tPm5ldGRldl9vcHMgJiYgbi0+bmV0ZGV2X29wcy0+bmRvX2Zjb2VfZGRwX3NldHVwKQorCQlyZXR1cm4gbi0+bmV0ZGV2X29wcy0+bmRvX2Zjb2VfZGRwX3NldHVwKG4sIHhpZCwgc2dsLCBzZ2MpOworCisJcmV0dXJuIDA7Cit9CiAKIC8qCi0gKiBmY29lX3N3X2NyZWF0ZSAtIHRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZmNvZSBpbnRlcmZhY2UKKyAqIGZjb2Vfc3dfZGRwX2RvbmUgLSBjYWxscyBMTEQncyBkZHBfZG9uZSB0aHJvdWdoIG5ldF9kZXZpY2UKKyAqIEBscDoJdGhlIGNvcnJlc3BvbmRpbmcgZmNfbHBvcnQKKyAqIEB4aWQ6IHRoZSBleGNoYW5nZSBpZCBmb3IgdGhpcyBkZHAgdHJhbnNmZXIKKyAqCisgKiBSZXR1cm5zIDogdGhlIGxlbmd0aCBvZiBkYXRhIHRoYXQgaGF2ZSBiZWVuIGNvbXBsZXRlZCBieSBkZHAKKyAqLworc3RhdGljIGludCBmY29lX3N3X2RkcF9kb25lKHN0cnVjdCBmY19scG9ydCAqbHAsIHUxNiB4aWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm4gPSBmY29lX25ldGRldihscCk7CisKKwlpZiAobi0+bmV0ZGV2X29wcyAmJiBuLT5uZXRkZXZfb3BzLT5uZG9fZmNvZV9kZHBfZG9uZSkKKwkJcmV0dXJuIG4tPm5ldGRldl9vcHMtPm5kb19mY29lX2RkcF9kb25lKG4sIHhpZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGliZmNfZnVuY3Rpb25fdGVtcGxhdGUgZmNvZV9zd19saWJmY19mY25fdGVtcGwgPSB7CisJLmZyYW1lX3NlbmQgPSBmY29lX3htaXQsCisJLmRkcF9zZXR1cCA9IGZjb2Vfc3dfZGRwX3NldHVwLAorCS5kZHBfZG9uZSA9IGZjb2Vfc3dfZGRwX2RvbmUsCit9OworCisvKioKKyAqIGZjb2Vfc3dfY3JlYXRlKCkgLSB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGZjb2UgaW50ZXJmYWNlCiAgKiBAbmV0ZGV2OiBwb2ludGVyIHRoZSBhc3NvY2lhdGVkIG5ldGRldmljZQogICoKICAqIENyZWF0ZXMgZmNfbHBvcnQgc3RydWN0IGFuZCBzY3NpX2hvc3QgZm9yIGxwb3J0LCBjb25maWd1cmVzIGxwb3J0CkBAIC00NDAsOCArNTAyLDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKiBmY29lX3N3X21hdGNoIC0gdGhlIGZjb2Ugc3cgdHJhbnNwb3J0IG1hdGNoIGZ1bmN0aW9uCisvKioKKyAqIGZjb2Vfc3dfbWF0Y2goKSAtIFRoZSBGQ29FIFNXIHRyYW5zcG9ydCBtYXRjaCBmdW5jdGlvbgogICoKICAqIFJldHVybnMgOiBmYWxzZSBhbHdheXMKICAqLwpAQCAtNDYxLDggKzUyMyw4IEBACiAJLmRldmljZSA9IDB4ZmZmZiwKIH07CiAKLS8qCi0gKiBmY29lX3N3X2luaXQgLSByZWdpc3RlcnMgZmNvZV9zd190cmFuc3BvcnQKKy8qKgorICogZmNvZV9zd19pbml0KCkgLSBSZWdpc3RlcnMgZmNvZV9zd190cmFuc3BvcnQKICAqCiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCiAgKi8KQEAgLTQ3MSwxNyArNTMzLDIyIEBACiAJLyogYXR0YWNoIHRvIHNjc2kgdHJhbnNwb3J0ICovCiAJc2NzaV90cmFuc3BvcnRfZmNvZV9zdyA9CiAJCWZjX2F0dGFjaF90cmFuc3BvcnQoJmZjb2Vfc3dfdHJhbnNwb3J0X2Z1bmN0aW9uKTsKKwogCWlmICghc2NzaV90cmFuc3BvcnRfZmNvZV9zdykgewogCQlwcmludGsoS0VSTl9FUlIgImZjb2Vfc3dfaW5pdDpmY19hdHRhY2hfdHJhbnNwb3J0KCkgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJbXV0ZXhfaW5pdCgmZmNvZV9zd190cmFuc3BvcnQuZGV2bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmZjb2Vfc3dfdHJhbnNwb3J0LmRldmxpc3QpOworCiAJLyogcmVnaXN0ZXIgc3cgdHJhbnNwb3J0ICovCiAJZmNvZV90cmFuc3BvcnRfcmVnaXN0ZXIoJmZjb2Vfc3dfdHJhbnNwb3J0KTsKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGZjb2Vfc3dfZXhpdCAtIHVucmVnaXN0ZXJzIGZjb2Vfc3dfdHJhbnNwb3J0CisvKioKKyAqIGZjb2Vfc3dfZXhpdCgpIC0gVW5yZWdpc3RlcnMgZmNvZV9zd190cmFuc3BvcnQKICAqCiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYwppbmRleCBlNDE5ZjQ4Li4wZDZmNWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCkBAIC00OSw2ICs0OSw3IEBACiBzdGF0aWMgaW50IGRlYnVnX2Zjb2U7CiAKICNkZWZpbmUgRkNPRV9NQVhfUVVFVUVfREVQVEggIDI1NgorI2RlZmluZSBGQ09FX0xPV19RVUVVRV9ERVBUSCAgMzIKIAogLyogZGVzdGluYXRpb24gYWRkcmVzcyBtb2RlICovCiAjZGVmaW5lIEZDT0VfR1dfQUREUl9NT0RFCSAgICAweDAwCkBAIC02OSw4ICs3MCw2IEBACiAKIC8qIEZ1bmN0aW9uIFByb3RvdHllcyAqLwogc3RhdGljIGludCBmY29lX2NoZWNrX3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICopOwotc3RhdGljIHZvaWQgZmNvZV9pbnNlcnRfd2FpdF9xdWV1ZV9oZWFkKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKLXN0YXRpYyB2b2lkIGZjb2VfaW5zZXJ0X3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIHZvaWQgZmNvZV9yZWN2X2Zsb2dpKHN0cnVjdCBmY29lX3NvZnRjICosIHN0cnVjdCBmY19mcmFtZSAqLCB1OCAqKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyBpbnQgZmNvZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVsb25nLCB2b2lkICopOwpAQCAtOTEsMTMgKzkwLDEzIEBACiB9OwogCiAvKioKLSAqIGZjb2VfY3JlYXRlX3BlcmNwdV9kYXRhIC0gY3JlYXRlcyB0aGUgYXNzb2NpYXRlZCBjcHUgZGF0YQorICogZmNvZV9jcmVhdGVfcGVyY3B1X2RhdGEoKSAtIGNyZWF0ZXMgdGhlIGFzc29jaWF0ZWQgY3B1IGRhdGEKICAqIEBjcHU6IGluZGV4IGZvciB0aGUgY3B1IHdoZXJlIGZjb2UgY3B1IGRhdGEgd2lsbCBiZSBjcmVhdGVkCiAgKgogICogY3JlYXRlIHBlcmNwdSBzdGF0cyBibG9jaywgZnJvbSBjcHUgYWRkIG5vdGlmaWVyCiAgKgogICogUmV0dXJuczogbm9uZQotICoqLworICovCiBzdGF0aWMgdm9pZCBmY29lX2NyZWF0ZV9wZXJjcHVfZGF0YShpbnQgY3B1KQogewogCXN0cnVjdCBmY19scG9ydCAqbHA7CkBAIC0xMTUsMTMgKzExNCwxMyBAQAogfQogCiAvKioKLSAqIGZjb2VfZGVzdHJveV9wZXJjcHVfZGF0YSAtIGRlc3Ryb3lzIHRoZSBhc3NvY2lhdGVkIGNwdSBkYXRhCisgKiBmY29lX2Rlc3Ryb3lfcGVyY3B1X2RhdGEoKSAtIGRlc3Ryb3lzIHRoZSBhc3NvY2lhdGVkIGNwdSBkYXRhCiAgKiBAY3B1OiBpbmRleCBmb3IgdGhlIGNwdSB3aGVyZSBmY29lIGNwdSBkYXRhIHdpbGwgZGVzdHJveWVkCiAgKgogICogZGVzdHJveSBwZXJjcHUgc3RhdHMgYmxvY2sgY2FsbGVkIGJ5IGNwdSBhZGQvcmVtb3ZlIG5vdGlmaWVyCiAgKgogICogUmV0dW5zOiBub25lCi0gKiovCisgKi8KIHN0YXRpYyB2b2lkIGZjb2VfZGVzdHJveV9wZXJjcHVfZGF0YShpbnQgY3B1KQogewogCXN0cnVjdCBmY19scG9ydCAqbHA7CkBAIC0xMzcsNyArMTM2LDcgQEAKIH0KIAogLyoqCi0gKiBmY29lX2NwdV9jYWxsYmFjayAtIGZjb2UgY3B1IGhvdHBsdWcgZXZlbnQgY2FsbGJhY2sKKyAqIGZjb2VfY3B1X2NhbGxiYWNrKCkgLSBmY29lIGNwdSBob3RwbHVnIGV2ZW50IGNhbGxiYWNrCiAgKiBAbmZiOiBjYWxsYmFjayBkYXRhIGJsb2NrCiAgKiBAYWN0aW9uOiBldmVudCB0cmlnZ2VyaW5nIHRoZSBjYWxsYmFjawogICogQGhjcHU6IGluZGV4IGZvciB0aGUgY3B1IG9mIHRoaXMgZXZlbnQKQEAgLTE0NSw3ICsxNDQsNyBAQAogICogdGhpcyBjcmVhdGVzIG9yIGRlc3Ryb3lzIHBlciBjcHUgZGF0YSBmb3IgZmNvZQogICoKICAqIFJldHVybnMgTk9USUZZX09LIGFsd2F5cy4KLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkgICAgIHZvaWQgKmhjcHUpCiB7CkBAIC0xNjYsNyArMTY1LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyoqCi0gKiBmY29lX3JjdiAtIHRoaXMgaXMgdGhlIGZjb2UgcmVjZWl2ZSBmdW5jdGlvbiBjYWxsZWQgYnkgTkVUX1JYX1NPRlRJUlEKKyAqIGZjb2VfcmN2KCkgLSB0aGlzIGlzIHRoZSBmY29lIHJlY2VpdmUgZnVuY3Rpb24gY2FsbGVkIGJ5IE5FVF9SWF9TT0ZUSVJRCiAgKiBAc2tiOiB0aGUgcmVjZWl2ZSBza2IKICAqIEBkZXY6IGFzc29jaWF0ZWQgbmV0IGRldmljZQogICogQHB0eXBlOiBjb250ZXh0CkBAIC0xNzUsNyArMTc0LDcgQEAKICAqIHRoaXMgZnVuY3Rpb24gd2lsbCByZWNlaXZlIHRoZSBwYWNrZXQgYW5kIGJ1aWxkIGZjIGZyYW1lIGFuZCBwYXNzIGl0IHVwCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBpbnQgZmNvZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvbGRkZXYpCiB7CkBAIC0yNjUsMTEgKzI2NCwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV9yY3YpOwogCiAvKioKLSAqIGZjb2Vfc3RhcnRfaW8gLSBwYXNzIHRvIG5ldGRldiB0byBzdGFydCB4bWl0IGZvciBmY29lCisgKiBmY29lX3N0YXJ0X2lvKCkgLSBwYXNzIHRvIG5ldGRldiB0byBzdGFydCB4bWl0IGZvciBmY29lCiAgKiBAc2tiOiB0aGUgc2tiIHRvIGJlIHhtaXR0ZWQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZjb2Vfc3RhcnRfaW8oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmM7CkBAIC0yODMsMTIgKzI4MiwxMiBAQAogfQogCiAvKioKLSAqIGZjb2VfZ2V0X3BhZ2VkX2NyY19lb2YgLSBpbiBjYXNlIHdlIG5lZWQgYWxsb2MgYSBwYWdlIGZvciBjcmNfZW9mCisgKiBmY29lX2dldF9wYWdlZF9jcmNfZW9mKCkgLSBpbiBjYXNlIHdlIG5lZWQgYWxsb2MgYSBwYWdlIGZvciBjcmNfZW9mCiAgKiBAc2tiOiB0aGUgc2tiIHRvIGJlIHhtaXR0ZWQKICAqIEB0bGVuOiB0b3RhbCBsZW4KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgZmNvZV9nZXRfcGFnZWRfY3JjX2VvZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbikKIHsKIAlzdHJ1Y3QgZmNvZV9wZXJjcHVfcyAqZnBzOwpAQCAtMzI2LDEzICszMjUsMTIgQEAKIH0KIAogLyoqCi0gKiBmY29lX2ZjX2NyYyAtIGNhbGN1bGF0ZXMgRkMgQ1JDIGluIHRoaXMgZmNvZSBza2IKKyAqIGZjb2VfZmNfY3JjKCkgLSBjYWxjdWxhdGVzIEZDIENSQyBpbiB0aGlzIGZjb2Ugc2tiCiAgKiBAZnA6IHRoZSBmY19mcmFtZSBjb250YWluZyBkYXRhIHRvIGJlIGNoZWNrc3VtbWVkCiAgKgogICogVGhpcyB1c2VzIGNyYzMyKCkgdG8gY2FsY3VsYXRlIHRoZSBjcmMgZm9yIGZjIGZyYW1lCiAgKiBSZXR1cm4gICA6IDMyIGJpdCBjcmMKLSAqCi0gKiovCisgKi8KIHUzMiBmY29lX2ZjX2NyYyhzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBmcF9za2IoZnApOwpAQCAtMzYzLDEzICszNjEsMTIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfZmNfY3JjKTsKIAogLyoqCi0gKiBmY29lX3htaXQgLSBGQ29FIGZyYW1lIHRyYW5zbWl0IGZ1bmN0aW9uCisgKiBmY29lX3htaXQoKSAtIEZDb0UgZnJhbWUgdHJhbnNtaXQgZnVuY3Rpb24KICAqIEBscDoJdGhlIGFzc29jaWF0ZWQgbG9jYWwgcG9ydAogICogQGZwOiB0aGUgZmNfZnJhbWUgdG8gYmUgdHJhbnNtaXR0ZWQKICAqCiAgKiBSZXR1cm4gICA6IDAgZm9yIHN1Y2Nlc3MKLSAqCi0gKiovCisgKi8KIGludCBmY29lX3htaXQoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKIAlpbnQgd2xlbiwgcmMgPSAwOwpAQCAtMzg5LDcgKzM4Niw3IEBACiAKIAlXQVJOX09OKChmcl9sZW4oZnApICUgc2l6ZW9mKHUzMikpICE9IDApOwogCi0JZmMgPSBmY29lX3NvZnRjKGxwKTsKKwlmYyA9IGxwb3J0X3ByaXYobHApOwogCS8qCiAJICogaWYgaXQgaXMgYSBmbG9naSB0aGVuIHdlIG5lZWQgdG8gbGVhcm4gZ3ctYWRkcgogCSAqIGFuZCBteSBvd24gZmNpZApAQCAtNDI2LDcgKzQyMyw3IEBACiAKIAkvKiBjcmMgb2ZmbG9hZCAqLwogCWlmIChsaWtlbHkobHAtPmNyY19vZmZsb2FkKSkgewotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CiAJCXNrYi0+Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpOwogCQlza2ItPmNzdW1fb2Zmc2V0ID0gc2tiLT5sZW47CiAJCWNyYyA9IDA7CkBAIC00MzksNyArNDM2LDcgQEAKIAlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7CiAJCXNrYl9mcmFnX3QgKmZyYWc7CiAJCWlmIChmY29lX2dldF9wYWdlZF9jcmNfZW9mKHNrYiwgdGxlbikpIHsKLQkJCWtmcmVlKHNrYik7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMV07CkBAIC00NjMsNyArNDYwLDcgQEAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCXNrYi0+bWFjX2xlbiA9IGVsZW47Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8zKTsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRkNPRSk7CiAJc2tiLT5kZXYgPSBmYy0+cmVhbF9kZXY7CiAKIAkvKiBmaWxsIHVwIG1hYyBhbmQgZmNvZSBoZWFkZXJzICovCkBAIC00ODYsNiArNDgzLDE2IEBACiAJCUZDX0ZDT0VfRU5DQVBTX1ZFUihocCwgRkNfRkNPRV9WRVIpOwogCWhwLT5mY29lX3NvZiA9IHNvZjsKIAorI2lmZGVmIE5FVElGX0ZfRlNPCisJLyogZmNvZSBsc28sIG1zcyBpcyBpbiBtYXhfcGF5bG9hZCB3aGljaCBpcyBub24temVybyBmb3IgRkNQIGRhdGEgKi8KKwlpZiAobHAtPnNlcV9vZmZsb2FkICYmIGZyX21heF9wYXlsb2FkKGZwKSkgeworCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19GQ09FOworCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gZnJfbWF4X3BheWxvYWQoZnApOworCX0gZWxzZSB7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSAwOworCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gMDsKKwl9CisjZW5kaWYKIAkvKiB1cGRhdGUgdHggc3RhdHM6IHJlZ2FyZGxlc3MgaWYgTExEIGZhaWxzICovCiAJc3RhdHMgPSBscC0+ZGV2X3N0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJaWYgKHN0YXRzKSB7CkBAIC01MDIsMjEgKzUwOSwyMiBAQAogCQlyYyA9IGZjb2Vfc3RhcnRfaW8oc2tiKTsKIAogCWlmIChyYykgewotCQlmY29lX2luc2VydF93YWl0X3F1ZXVlKGxwLCBza2IpOworCQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUsIHNrYik7CisJCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwogCQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuID4gRkNPRV9NQVhfUVVFVUVfREVQVEgpCi0JCQlmY19wYXVzZShscCk7CisJCQlscC0+cWZ1bGwgPSAxOwogCX0KIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV94bWl0KTsKIAotLyoKLSAqIGZjb2VfcGVyY3B1X3JlY2VpdmVfdGhyZWFkIC0gcmVjdiB0aHJlYWQgcGVyIGNwdQorLyoqCisgKiBmY29lX3BlcmNwdV9yZWNlaXZlX3RocmVhZCgpIC0gcmVjdiB0aHJlYWQgcGVyIGNwdQogICogQGFyZzogcHRyIHRvIHRoZSBmY29lIHBlciBjcHUgc3RydWN0CiAgKgogICogUmV0dXJuOiAwIGZvciBzdWNjZXNzCi0gKgogICovCiBpbnQgZmNvZV9wZXJjcHVfcmVjZWl2ZV90aHJlYWQodm9pZCAqYXJnKQogewpAQCAtNTMzLDcgKzU0MSw3IEBACiAJc3RydWN0IGZjb2Vfc29mdGMgKmZjOwogCXN0cnVjdCBmY29lX2hkciAqaHA7CiAKLQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDE5KTsKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCkBAIC02MjUsNyArNjMzLDcgQEAKIAkJICogaXQncyBzb2xpY2l0ZWQgZGF0YSwgaW4gd2hpY2ggY2FzZSwgdGhlIEZDUCBsYXllciB3b3VsZAogCQkgKiBjaGVjayBpdCBkdXJpbmcgdGhlIGNvcHkuCiAJCSAqLwotCQlpZiAobHAtPmNyY19vZmZsb2FkKQorCQlpZiAobHAtPmNyY19vZmZsb2FkICYmIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKQogCQkJZnJfZmxhZ3MoZnApICY9IH5GQ1BIRl9DUkNfVU5DSEVDS0VEOwogCQllbHNlCiAJCQlmcl9mbGFncyhmcCkgfD0gRkNQSEZfQ1JDX1VOQ0hFQ0tFRDsKQEAgLTY1OCw3ICs2NjYsNyBAQAogfQogCiAvKioKLSAqIGZjb2VfcmVjdl9mbG9naSAtIGZsb2dpIHJlY2VpdmUgZnVuY3Rpb24KKyAqIGZjb2VfcmVjdl9mbG9naSgpIC0gZmxvZ2kgcmVjZWl2ZSBmdW5jdGlvbgogICogQGZjOiBhc3NvY2lhdGVkIGZjb2Vfc29mdGMKICAqIEBmcDogdGhlIHJlY2lldmVkIGZyYW1lCiAgKiBAc2E6IHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGlzIGZsb2dpCkBAIC02NjcsNyArNjc1LDcgQEAKICAqIG1hYyBhZGRyZXNzIGZvciB0aGUgaW5pdGlhdG9yLCBlaXRlaHIgT1VJIGJhc2VkIG9yIEdXIGJhc2VkLgogICoKICAqIFJldHVybnM6IG5vbmUKLSAqKi8KKyAqLwogc3RhdGljIHZvaWQgZmNvZV9yZWN2X2Zsb2dpKHN0cnVjdCBmY29lX3NvZnRjICpmYywgc3RydWN0IGZjX2ZyYW1lICpmcCwgdTggKnNhKQogewogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwpAQCAtNzE1LDMyICs3MjMsMjMgQEAKIH0KIAogLyoqCi0gKiBmY29lX3dhdGNoZG9nIC0gZmNvZSB0aW1lciBjYWxsYmFjaworICogZmNvZV93YXRjaGRvZygpIC0gZmNvZSB0aW1lciBjYWxsYmFjawogICogQHZwOgogICoKLSAqIFRoaXMgY2hlY2tzIHRoZSBwZW5kaW5nIHF1ZXVlIGxlbmd0aCBmb3IgZmNvZSBhbmQgcHV0IGZjb2UgdG8gYmUgcGF1c2VkIHN0YXRlCisgKiBUaGlzIGNoZWNrcyB0aGUgcGVuZGluZyBxdWV1ZSBsZW5ndGggZm9yIGZjb2UgYW5kIHNldCBscG9ydCBxZnVsbAogICogaWYgdGhlIEZDT0VfTUFYX1FVRVVFX0RFUFRIIGlzIHJlYWNoZWQuIFRoaXMgaXMgZG9uZSBmb3IgYWxsIGZjX2xwb3J0IG9uIHRoZQogICogZmNvZV9ob3N0bGlzdC4KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHZvaWQgZmNvZV93YXRjaGRvZyh1bG9uZyB2cCkKIHsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwOwogCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKLQlpbnQgcGF1c2VkID0gMDsKIAogCXJlYWRfbG9jaygmZmNvZV9ob3N0bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjLCAmZmNvZV9ob3N0bGlzdCwgbGlzdCkgewotCQlscCA9IGZjLT5scDsKLQkJaWYgKGxwKSB7Ci0JCQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuID4gRkNPRV9NQVhfUVVFVUVfREVQVEgpCi0JCQkJcGF1c2VkID0gMTsKLQkJCWlmIChmY29lX2NoZWNrX3dhaXRfcXVldWUobHApIDwJIEZDT0VfTUFYX1FVRVVFX0RFUFRIKSB7Ci0JCQkJaWYgKHBhdXNlZCkKLQkJCQkJZmNfdW5wYXVzZShscCk7Ci0JCQl9Ci0JCX0KKwkJaWYgKGZjLT5scCkKKwkJCWZjb2VfY2hlY2tfd2FpdF9xdWV1ZShmYy0+bHApOwogCX0KIAlyZWFkX3VubG9jaygmZmNvZV9ob3N0bGlzdF9sb2NrKTsKIApAQCAtNzUwLDk2ICs3NDksNjQgQEAKIAogCiAvKioKLSAqIGZjb2VfY2hlY2tfd2FpdF9xdWV1ZSAtIHB1dCB0aGUgc2tiIGludG8gZmNvZSBwZW5kaW5nIHhtaXQgcXVldWUKKyAqIGZjb2VfY2hlY2tfd2FpdF9xdWV1ZSgpIC0gcHV0IHRoZSBza2IgaW50byBmY29lIHBlbmRpbmcgeG1pdCBxdWV1ZQogICogQGxwOiB0aGUgZmNfcG9ydCBmb3IgdGhpcyBza2IKICAqIEBza2I6IHRoZSBhc3NvY2lhdGVkIHNrYiB0byBiZSB4bWl0dGVkCiAgKgogICogVGhpcyBlbXB0aWVzIHRoZSB3YWl0X3F1ZXVlLCBkZXF1ZXVlIHRoZSBoZWFkIG9mIHRoZSB3YWl0X3F1ZXVlIHF1ZXVlCiAgKiBhbmQgY2FsbHMgZmNvZV9zdGFydF9pbygpIGZvciBlYWNoIHBhY2tldCwgaWYgYWxsIHNrYiBoYXZlIGJlZW4KLSAqIHRyYW5zbWl0dGVkLCByZXR1cm4gMCBpZiBhIGVycm9yIG9jY3VycywgdGhlbiByZXN0b3JlIHdhaXRfcXVldWUgYW5kCi0gKiB0cnkgYWdhaW4gbGF0ZXIuCisgKiB0cmFuc21pdHRlZCwgcmV0dXJuIHFsZW4gb3IgLTEgaWYgYSBlcnJvciBvY2N1cnMsIHRoZW4gcmVzdG9yZQorICogd2FpdF9xdWV1ZSBhbmQgIHRyeSBhZ2FpbiBsYXRlci4KICAqCiAgKiBUaGUgd2FpdF9xdWV1ZSBpcyB1c2VkIHdoZW4gdGhlIHNrYiB0cmFuc21pdCBmYWlscy4gc2tiIHdpbGwgZ28KICAqIGluIHRoZSB3YWl0X3F1ZXVlIHdoaWNoIHdpbGwgYmUgZW1wdGllZCBieSB0aGUgdGltZSBmdW5jdGlvbiBPUgogICogYnkgdGhlIG5leHQgc2tiIHRyYW5zbWl0LgogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX2NoZWNrX3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICpscCkKIHsKLQlpbnQgcmMsIHVucGF1c2UgPSAwOwotCWludCBwYXVzZWQgPSAwOworCXN0cnVjdCBmY29lX3NvZnRjICpmYyA9IGxwb3J0X3ByaXYobHApOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOworCWludCByYyA9IC0xOwogCi0JZmMgPSBmY29lX3NvZnRjKGxwKTsKIAlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlKQorCQlnb3RvIG91dDsKKwlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlX2FjdGl2ZSA9IDE7CiAKLQkvKgotCSAqIGlzIHRoaXMgaW50ZXJmYWNlIHBhdXNlZD8KLQkgKi8KLQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuID4gRkNPRV9NQVhfUVVFVUVfREVQVEgpCi0JCXBhdXNlZCA9IDE7Ci0JaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbikgewotCQl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLQkJCXJjID0gZmNvZV9zdGFydF9pbyhza2IpOwotCQkJaWYgKHJjKSB7Ci0JCQkJZmNvZV9pbnNlcnRfd2FpdF9xdWV1ZV9oZWFkKGxwLCBza2IpOwotCQkJCXJldHVybiByYzsKLQkJCX0KLQkJCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwl3aGlsZSAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKSB7CisJCS8qIGtlZXAgcWxlbiA+IDAgdW50aWwgZmNvZV9zdGFydF9pbyBzdWNjZWVkcyAqLworCQlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4rKzsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSk7CisKKwkJc3Bpbl91bmxvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJCXJjID0gZmNvZV9zdGFydF9pbyhza2IpOworCQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisKKwkJaWYgKHJjKSB7CisJCQlfX3NrYl9xdWV1ZV9oZWFkKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOworCQkJLyogdW5kbyB0ZW1wb3JhcnkgaW5jcmVtZW50IGFib3ZlICovCisJCQlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4tLTsKKwkJCWJyZWFrOwogCQl9Ci0JCWlmIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPCBGQ09FX01BWF9RVUVVRV9ERVBUSCkKLQkJCXVucGF1c2UgPSAxOworCQkvKiB1bmRvIHRlbXBvcmFyeSBpbmNyZW1lbnQgYWJvdmUgKi8KKwkJZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuLS07CiAJfQorCisJaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA8IEZDT0VfTE9XX1FVRVVFX0RFUFRIKQorCQlscC0+cWZ1bGwgPSAwOworCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMDsKKwlyYyA9IGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbjsKK291dDoKIAlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLQlpZiAoKHVucGF1c2UpICYmIChwYXVzZWQpKQotCQlmY191bnBhdXNlKGxwKTsKLQlyZXR1cm4gZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuOworCXJldHVybiByYzsKIH0KIAogLyoqCi0gKiBmY29lX2luc2VydF93YWl0X3F1ZXVlX2hlYWQgLSBwdXRzIHNrYiB0byBmY29lIHBlbmRpbmcgcXVldWUgaGVhZAotICogQGxwOiB0aGUgZmNfcG9ydCBmb3IgdGhpcyBza2IKLSAqIEBza2I6IHRoZSBhc3NvY2lhdGVkIHNrYiB0byBiZSB4bWl0dGVkCi0gKgotICogUmV0dXJuczogbm9uZQotICoqLwotc3RhdGljIHZvaWQgZmNvZV9pbnNlcnRfd2FpdF9xdWV1ZV9oZWFkKHN0cnVjdCBmY19scG9ydCAqbHAsCi0JCQkJCXN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOwotCi0JZmMgPSBmY29lX3NvZnRjKGxwKTsKLQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7Ci0JX19za2JfcXVldWVfaGVhZCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSwgc2tiKTsKLQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLX0KLQotLyoqCi0gKiBmY29lX2luc2VydF93YWl0X3F1ZXVlIC0gcHV0IHRoZSBza2IgaW50byBmY29lIHBlbmRpbmcgcXVldWUgdGFpbAotICogQGxwOiB0aGUgZmNfcG9ydCBmb3IgdGhpcyBza2IKLSAqIEBza2I6IHRoZSBhc3NvY2lhdGVkIHNrYiB0byBiZSB4bWl0dGVkCi0gKgotICogUmV0dXJuczogbm9uZQotICoqLwotc3RhdGljIHZvaWQgZmNvZV9pbnNlcnRfd2FpdF9xdWV1ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOwotCi0JZmMgPSBmY29lX3NvZnRjKGxwKTsKLQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7Ci0JX19za2JfcXVldWVfdGFpbCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSwgc2tiKTsKLQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLX0KLQotLyoqCi0gKiBmY29lX2Rldl9zZXR1cCAtIHNldHVwIGxpbmsgY2hhbmdlIG5vdGlmaWNhdGlvbiBpbnRlcmZhY2UKLSAqCi0gKiovCi1zdGF0aWMgdm9pZCBmY29lX2Rldl9zZXR1cCh2b2lkKQorICogZmNvZV9kZXZfc2V0dXAoKSAtIHNldHVwIGxpbmsgY2hhbmdlIG5vdGlmaWNhdGlvbiBpbnRlcmZhY2UKKyAqLworc3RhdGljIHZvaWQgZmNvZV9kZXZfc2V0dXAoKQogewogCS8qCiAJICogaGVyZSBzZXR1cCBhIGludGVyZmFjZSBzcGVjaWZpYyB3ZCB0aW1lIHRvCkBAIC04NDksMTUgKzgxNiwxNSBAQAogfQogCiAvKioKLSAqIGZjb2VfZGV2X3NldHVwIC0gY2xlYW51cCBsaW5rIGNoYW5nZSBub3RpZmljYXRpb24gaW50ZXJmYWNlCi0gKiovCisgKiBmY29lX2Rldl9zZXR1cCgpIC0gY2xlYW51cCBsaW5rIGNoYW5nZSBub3RpZmljYXRpb24gaW50ZXJmYWNlCisgKi8KIHN0YXRpYyB2b2lkIGZjb2VfZGV2X2NsZWFudXAodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmZmNvZV9ub3RpZmllcik7CiB9CiAKIC8qKgotICogZmNvZV9kZXZpY2Vfbm90aWZpY2F0aW9uIC0gbmV0ZGV2IGV2ZW50IG5vdGlmaWNhdGlvbiBjYWxsYmFjaworICogZmNvZV9kZXZpY2Vfbm90aWZpY2F0aW9uKCkgLSBuZXRkZXYgZXZlbnQgbm90aWZpY2F0aW9uIGNhbGxiYWNrCiAgKiBAbm90aWZpZXI6IGNvbnRleHQgb2YgdGhlIG5vdGlmaWNhdGlvbgogICogQGV2ZW50OiB0eXBlIG9mIGV2ZW50CiAgKiBAcHRyOiBmaXhlZCBhcnJheSBmb3Igb3V0cHV0IHBhcnNlZCBpZm5hbWUKQEAgLTg2NSw3ICs4MzIsNyBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGV0aGVybmV0IGRyaXZlciBpbiBjYXNlIG9mIGxpbmsgY2hhbmdlIGV2ZW50CiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBzdGF0aWMgaW50IGZjb2VfZGV2aWNlX25vdGlmaWNhdGlvbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLAogCQkJCSAgICB1bG9uZyBldmVudCwgdm9pZCAqcHRyKQogewpAQCAtODczLDcgKzg0MCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gcHRyOwogCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKIAlzdHJ1Y3QgZmNvZV9kZXZfc3RhdHMgKnN0YXRzOwotCXUxNiBuZXdfc3RhdHVzOworCXUzMiBuZXdfbGlua191cDsKIAl1MzIgbWZzOwogCWludCByYyA9IE5PVElGWV9PSzsKIApAQCAtODkwLDE3ICs4NTcsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbmV3X3N0YXR1cyA9IGxwLT5saW5rX3N0YXR1czsKKwluZXdfbGlua191cCA9IGxwLT5saW5rX3VwOwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX0dPSU5HX0RPV046Ci0JCW5ld19zdGF0dXMgJj0gfkZDX0xJTktfVVA7CisJCW5ld19saW5rX3VwID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfVVA6CiAJY2FzZSBORVRERVZfQ0hBTkdFOgotCQluZXdfc3RhdHVzICY9IH5GQ19MSU5LX1VQOwotCQlpZiAoIWZjb2VfbGlua19vayhscCkpCi0JCQluZXdfc3RhdHVzIHw9IEZDX0xJTktfVVA7CisJCW5ld19saW5rX3VwID0gIWZjb2VfbGlua19vayhscCk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKIAkJbWZzID0gZmMtPnJlYWxfZGV2LT5tdHUgLQpAQCAtOTA4LDE3ICs4NzMsMTUgQEAKIAkJCSBzaXplb2Yoc3RydWN0IGZjb2VfY3JjX2VvZikpOwogCQlpZiAobWZzID49IEZDX01JTl9NQVhfRlJBTUUpCiAJCQlmY19zZXRfbWZzKGxwLCBtZnMpOwotCQluZXdfc3RhdHVzICY9IH5GQ19MSU5LX1VQOwotCQlpZiAoIWZjb2VfbGlua19vayhscCkpCi0JCQluZXdfc3RhdHVzIHw9IEZDX0xJTktfVVA7CisJCW5ld19saW5rX3VwID0gIWZjb2VfbGlua19vayhscCk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlGQ19EQkcoInVua25vd24gZXZlbnQgJWxkIGNhbGwiLCBldmVudCk7CiAJfQotCWlmIChscC0+bGlua19zdGF0dXMgIT0gbmV3X3N0YXR1cykgewotCQlpZiAoKG5ld19zdGF0dXMgJiBGQ19MSU5LX1VQKSA9PSBGQ19MSU5LX1VQKQorCWlmIChscC0+bGlua191cCAhPSBuZXdfbGlua191cCkgeworCQlpZiAobmV3X2xpbmtfdXApCiAJCQlmY19saW5rdXAobHApOwogCQllbHNlIHsKIAkJCXN0YXRzID0gbHAtPmRldl9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtOTMzLDEyICs4OTYsMTIgQEAKIH0KIAogLyoqCi0gKiBmY29lX2lmX3RvX25ldGRldiAtIHBhcnNlIGEgbmFtZSBidWZmZXIgdG8gZ2V0IG5ldGRldgorICogZmNvZV9pZl90b19uZXRkZXYoKSAtIHBhcnNlIGEgbmFtZSBidWZmZXIgdG8gZ2V0IG5ldGRldgogICogQGlmbmFtZTogZml4ZWQgYXJyYXkgZm9yIG91dHB1dCBwYXJzZWQgaWZuYW1lCiAgKiBAYnVmZmVyOiBpbmNvbWluZyBidWZmZXIgdG8gYmUgY29waWVkCiAgKgogICogUmV0dXJuczogTlVMTCBvciBwdHIgdG8gbmV0ZGVpdmUKLSAqKi8KKyAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpmY29lX2lmX3RvX25ldGRldihjb25zdCBjaGFyICpidWZmZXIpCiB7CiAJY2hhciAqY3A7CkBAIC05NTUsMTMgKzkxOCwxMyBAQAogfQogCiAvKioKLSAqIGZjb2VfbmV0ZGV2X3RvX21vZHVsZV9vd25lciAtIGZpbmRzIG91dCB0aGUgbmljIGRyaXZlIG1vZGR1bGUgb2YgdGhlIG5ldGRldgorICogZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyKCkgLSBmaW5kcyBvdXQgdGhlIG5pYyBkcml2ZSBtb2RkdWxlIG9mIHRoZSBuZXRkZXYKICAqIEBuZXRkZXY6IHRoZSB0YXJnZXQgbmV0ZGV2CiAgKgogICogUmV0dXJuczogcHRyIHRvIHRoZSBzdHJ1Y3QgbW9kdWxlLCBOVUxMIGZvciBmYWlsdXJlCi0gKiovCi1zdGF0aWMgc3RydWN0IG1vZHVsZSAqZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyKAotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbW9kdWxlICoKK2Zjb2VfbmV0ZGV2X3RvX21vZHVsZV9vd25lcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIApAQCAtOTc5LDEyICs5NDIsMTQgQEAKIH0KIAogLyoqCi0gKiBmY29lX2V0aGRydl9nZXQgLSBob2xkcyB0aGUgbmljIGRyaXZlciBtb2R1bGUgYnkgIHRyeV9tb2R1bGVfZ2V0KCkgZm9yCi0gKiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYuCisgKiBmY29lX2V0aGRydl9nZXQoKSAtIEhvbGQgdGhlIEV0aGVybmV0IGRyaXZlcgogICogQG5ldGRldjogdGhlIHRhcmdldCBuZXRkZXYKICAqCisgKiBIb2xkcyB0aGUgRXRoZXJuZXQgZHJpdmVyIG1vZHVsZSBieSB0cnlfbW9kdWxlX2dldCgpIGZvcgorICogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2LgorICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nzc3MKLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX2V0aGRydl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKQEAgLTk5OSwxMiArOTY0LDE0IEBACiB9CiAKIC8qKgotICogZmNvZV9ldGhkcnZfZ2V0IC0gcmVsZWFzZXMgdGhlIG5pYyBkcml2ZXIgbW9kdWxlIGJ5IG1vZHVsZV9wdXQgZm9yCi0gKiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYuCisgKiBmY29lX2V0aGRydl9wdXQoKSAtIFJlbGVhc2UgdGhlIEV0aGVybmV0IGRyaXZlcgogICogQG5ldGRldjogdGhlIHRhcmdldCBuZXRkZXYKICAqCisgKiBSZWxlYXNlcyB0aGUgRXRoZXJuZXQgZHJpdmVyIG1vZHVsZSBieSBtb2R1bGVfcHV0IGZvcgorICogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2LgorICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nzc3MKLSAqKi8KKyAqLwogc3RhdGljIGludCBmY29lX2V0aGRydl9wdXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKQEAgLTEwMjAsMTIgKzk4NywxMiBAQAogfQogCiAvKioKLSAqIGZjb2VfZGVzdHJveS0gaGFuZGxlcyB0aGUgZGVzdHJveSBmcm9tIHN5c2ZzCisgKiBmY29lX2Rlc3Ryb3koKSAtIGhhbmRsZXMgdGhlIGRlc3Ryb3kgZnJvbSBzeXNmcwogICogQGJ1ZmZlcjogZXhwY3RlZCB0byBiZSBhIGV0aCBpZiBuYW1lCiAgKiBAa3A6IGFzc29jaWF0ZWQga2VybmVsIHBhcmFtCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICoqLworICovCiBzdGF0aWMgaW50IGZjb2VfZGVzdHJveShjb25zdCBjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWludCByYzsKQEAgLTEwNTgsMTIgKzEwMjUsMTIgQEAKIH0KIAogLyoqCi0gKiBmY29lX2NyZWF0ZSAtIGhhbmRsZXMgdGhlIGNyZWF0ZSBjYWxsIGZyb20gc3lzZnMKKyAqIGZjb2VfY3JlYXRlKCkgLSBIYW5kbGVzIHRoZSBjcmVhdGUgY2FsbCBmcm9tIHN5c2ZzCiAgKiBAYnVmZmVyOiBleHBjdGVkIHRvIGJlIGEgZXRoIGlmIG5hbWUKICAqIEBrcDogYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW0KICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgZmNvZV9jcmVhdGUoY29uc3QgY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAlpbnQgcmM7CkBAIC0xMTA0LDggKzEwNzEsOCBAQAogX19NT0RVTEVfUEFSTV9UWVBFKGRlc3Ryb3ksICJzdHJpbmciKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVzdHJveSwgIkRlc3Ryb3kgZmNvZSBwb3J0Iik7CiAKLS8qCi0gKiBmY29lX2xpbmtfb2sgLSBjaGVjayBpZiBsaW5rIGlzIG9rIGZvciB0aGUgZmNfbHBvcnQKKy8qKgorICogZmNvZV9saW5rX29rKCkgLSBDaGVjayBpZiBsaW5rIGlzIG9rIGZvciB0aGUgZmNfbHBvcnQKICAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydAogICoKICAqIEFueSBwZXJtYW5lbnRseS1kaXNxdWFsaWZ5aW5nIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2hlY2tlZC4KQEAgLTExMjAsNyArMTA4Nyw3IEBACiAgKi8KIGludCBmY29lX2xpbmtfb2soc3RydWN0IGZjX2xwb3J0ICpscCkKIHsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmMgPSBmY29lX3NvZnRjKGxwKTsKKwlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmMgPSBscG9ydF9wcml2KGxwKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmMtPnJlYWxfZGV2OwogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyBFVEhUT09MX0dTRVQgfTsKIAlpbnQgcmMgPSAwOwpAQCAtMTE0OSw5ICsxMTE2LDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfbGlua19vayk7CiAKLS8qCi0gKiBmY29lX3BlcmNwdV9jbGVhbiAtIGZyZWVzIHNrYiBvZiB0aGUgY29ycmVzcG9uZGluZyBscG9ydCBmcm9tIHRoZSBwZXIKLSAqIGNwdSBxdWV1ZS4KKy8qKgorICogZmNvZV9wZXJjcHVfY2xlYW4oKSAtIENsZWFyIHRoZSBwZW5kaW5nIHNrYnMgZm9yIGFuIGxwb3J0CiAgKiBAbHA6IHRoZSBmY19scG9ydAogICovCiB2b2lkIGZjb2VfcGVyY3B1X2NsZWFuKHN0cnVjdCBmY19scG9ydCAqbHApCkBAIC0xMTg1LDExICsxMTUxLDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX3BlcmNwdV9jbGVhbik7CiAKIC8qKgotICogZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlIC0gZGVxdWV1ZSBza2IgYW5kIGZyZWUgaXQKKyAqIGZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZSgpIC0gRGVxdWV1ZSBhIHNrYiBhbmQgZnJlZSBpdAogICogQGxwOiB0aGUgY29ycmVzcG9uZGluZyBmY19scG9ydAogICoKICAqIFJldHVybnM6IG5vbmUKLSAqKi8KKyAqLwogdm9pZCBmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUoc3RydWN0IGZjX2xwb3J0ICpscCkKIHsKIAlzdHJ1Y3QgZmNvZV9zb2Z0YyAgKmZjID0gbHBvcnRfcHJpdihscCk7CkBAIC0xMjA2LDIxICsxMTcyLDIxIEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUpOwogCiAvKioKLSAqIGxpYmZjX2hvc3RfYWxsb2MgLSBhbGxvY2F0ZSBhIFNjc2lfSG9zdCB3aXRoIHJvb20gZm9yIHRoZSBmY19scG9ydAorICogbGliZmNfaG9zdF9hbGxvYygpIC0gQWxsb2NhdGUgYSBTY3NpX0hvc3Qgd2l0aCByb29tIGZvciB0aGUgZmNfbHBvcnQKICAqIEBzaHQ6IHB0ciB0byB0aGUgc2NzaSBob3N0IHRlbXBsCiAgKiBAcHJpdl9zaXplOiBzaXplIG9mIHByaXZhdGUgZGF0YSBhZnRlciBmY19scG9ydAogICoKICAqIFJldHVybnM6IHB0ciB0byBTY3NpX0hvc3QKLSAqIFRPRE8gLSB0byBsaWJmYz8KKyAqIFRPRE86IHRvIGxpYmZjPwogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBTY3NpX0hvc3QgKmxpYmZjX2hvc3RfYWxsb2MoCi0Jc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LCBpbnQgcHJpdl9zaXplKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgU2NzaV9Ib3N0ICoKK2xpYmZjX2hvc3RfYWxsb2Moc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LCBpbnQgcHJpdl9zaXplKQogewogCXJldHVybiBzY3NpX2hvc3RfYWxsb2Moc2h0LCBzaXplb2Yoc3RydWN0IGZjX2xwb3J0KSArIHByaXZfc2l6ZSk7CiB9CiAKIC8qKgotICogZmNvZV9ob3N0X2FsbG9jIC0gYWxsb2NhdGUgYSBTY3NpX0hvc3Qgd2l0aCByb29tIGZvciB0aGUgZmNvZV9zb2Z0YworICogZmNvZV9ob3N0X2FsbG9jKCkgLSBBbGxvY2F0ZSBhIFNjc2lfSG9zdCB3aXRoIHJvb20gZm9yIHRoZSBmY29lX3NvZnRjCiAgKiBAc2h0OiBwdHIgdG8gdGhlIHNjc2kgaG9zdCB0ZW1wbAogICogQHByaXZfc2l6ZTogc2l6ZSBvZiBwcml2YXRlIGRhdGEgYWZ0ZXIgZmNfbHBvcnQKICAqCkBAIC0xMjMyLDggKzExOTgsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmNvZV9ob3N0X2FsbG9jKTsKIAotLyoKLSAqIGZjb2VfcmVzZXQgLSByZXNldHMgdGhlIGZjb2UKKy8qKgorICogZmNvZV9yZXNldCgpIC0gUmVzZXRzIHRoZSBmY29lCiAgKiBAc2hvc3Q6IHNob3N0IHRoZSByZXNldCBpcyBmcm9tCiAgKgogICogUmV0dXJuczogYWx3YXlzIDAKQEAgLTEyNDYsOCArMTIxMiw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX3Jlc2V0KTsKIAotLyoKLSAqIGZjb2Vfd3duX2Zyb21fbWFjIC0gY29udmVydHMgNDgtYml0IElFRUUgTUFDIGFkZHJlc3MgdG8gNjQtYml0IEZDIFdXTi4KKy8qKgorICogZmNvZV93d25fZnJvbV9tYWMoKSAtIENvbnZlcnRzIDQ4LWJpdCBJRUVFIE1BQyBhZGRyZXNzIHRvIDY0LWJpdCBGQyBXV04uCiAgKiBAbWFjOiBtYWMgYWRkcmVzcwogICogQHNjaGVtZTogY2hlY2sgcG9ydAogICogQHBvcnQ6IHBvcnQgaW5kaWNhdG9yIGZvciBjb252ZXJ0aW5nCkBAIC0xMjg2LDE0ICsxMjUyLDE1IEBACiAJcmV0dXJuIHd3bjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2Vfd3duX2Zyb21fbWFjKTsKLS8qCi0gKiBmY29lX2hvc3RsaXN0X2xvb2t1cF9zb2Z0YyAtIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgbHBvcnQgYnkgYSBnaXZlbiBkZXZpY2UKKworLyoqCisgKiBmY29lX2hvc3RsaXN0X2xvb2t1cF9zb2Z0YygpIC0gZmluZCB0aGUgY29ycmVzcG9uZGluZyBscG9ydCBieSBhIGdpdmVuIGRldmljZQogICogQGRldmljZTogdGhpcyBpcyBjdXJyZW50bHkgcHRyIHRvIG5ldF9kZXZpY2UKICAqCiAgKiBSZXR1cm5zOiBOVUxMIG9yIHRoZSBsb2NhdGVkIGZjb2Vfc29mdGMKICAqLwotc3RhdGljIHN0cnVjdCBmY29lX3NvZnRjICpmY29lX2hvc3RsaXN0X2xvb2t1cF9zb2Z0YygKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBmY29lX3NvZnRjICoKK2Zjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZjb2Vfc29mdGMgKmZjOwogCkBAIC0xMzA4LDggKzEyNzUsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKgotICogZmNvZV9ob3N0bGlzdF9sb29rdXAgLSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGxwb3J0IGJ5IG5ldGRldgorLyoqCisgKiBmY29lX2hvc3RsaXN0X2xvb2t1cCgpIC0gRmluZCB0aGUgY29ycmVzcG9uZGluZyBscG9ydCBieSBuZXRkZXYKICAqIEBuZXRkZXY6IHB0ciB0byBuZXRfZGV2aWNlCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwpAQCAtMTMyNCw4ICsxMjkxLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZjb2VfaG9zdGxpc3RfbG9va3VwKTsKIAotLyoKLSAqIGZjb2VfaG9zdGxpc3RfYWRkIC0gYWRkIGEgbHBvcnQgdG8gbHBvcnRzIGxpc3QKKy8qKgorICogZmNvZV9ob3N0bGlzdF9hZGQoKSAtIEFkZCBhIGxwb3J0IHRvIGxwb3J0cyBsaXN0CiAgKiBAbHA6IHB0ciB0byB0aGUgZmNfbHBvcnQgdG8gYmFkZGVkCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwpAQCAtMTMzNiw3ICsxMzAzLDcgQEAKIAogCWZjID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfc29mdGMoZmNvZV9uZXRkZXYobHApKTsKIAlpZiAoIWZjKSB7Ci0JCWZjID0gZmNvZV9zb2Z0YyhscCk7CisJCWZjID0gbHBvcnRfcHJpdihscCk7CiAJCXdyaXRlX2xvY2tfYmgoJmZjb2VfaG9zdGxpc3RfbG9jayk7CiAJCWxpc3RfYWRkX3RhaWwoJmZjLT5saXN0LCAmZmNvZV9ob3N0bGlzdCk7CiAJCXdyaXRlX3VubG9ja19iaCgmZmNvZV9ob3N0bGlzdF9sb2NrKTsKQEAgLTEzNDUsOCArMTMxMiw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX2hvc3RsaXN0X2FkZCk7CiAKLS8qCi0gKiBmY29lX2hvc3RsaXN0X3JlbW92ZSAtIHJlbW92ZSBhIGxwb3J0IGZyb20gbHBvcnRzIGxpc3QKKy8qKgorICogZmNvZV9ob3N0bGlzdF9yZW1vdmUoKSAtIHJlbW92ZSBhIGxwb3J0IGZyb20gbHBvcnRzIGxpc3QKICAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydCB0byBiYWRkZWQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCkBAIC0xMzY2LDEyICsxMzMzLDEyIEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX2hvc3RsaXN0X3JlbW92ZSk7CiAKIC8qKgotICogZmNvZV9saWJmY19jb25maWcgLSBzZXRzIHVwIGxpYmZjIHJlbGF0ZWQgcHJvcGVydGllcyBmb3IgbHBvcnQKKyAqIGZjb2VfbGliZmNfY29uZmlnKCkgLSBzZXRzIHVwIGxpYmZjIHJlbGF0ZWQgcHJvcGVydGllcyBmb3IgbHBvcnQKICAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydAogICogQHR0OiBsaWJmYyBmdW5jdGlvbiB0ZW1wbGF0ZQogICoKICAqIFJldHVybnMgOiAwIGZvciBzdWNjZXNzCi0gKiovCisgKi8KIGludCBmY29lX2xpYmZjX2NvbmZpZyhzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgbGliZmNfZnVuY3Rpb25fdGVtcGxhdGUgKnR0KQogewogCS8qIFNldCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgc2V0IGJ5IHRoZSBMTEREICovCkBAIC0xMzg5LDE0ICsxMzU2LDE0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChmY29lX2xpYmZjX2NvbmZpZyk7CiAKIC8qKgotICogZmNvZV9pbml0IC0gZmNvZSBtb2R1bGUgbG9hZGluZyBpbml0aWFsaXphdGlvbgorICogZmNvZV9pbml0KCkgLSBmY29lIG1vZHVsZSBsb2FkaW5nIGluaXRpYWxpemF0aW9uCiAgKgogICogSW5pdGlhbGl6YXRpb24gcm91dGluZQogICogMS4gV2lsbCBjcmVhdGUgZmMgdHJhbnNwb3J0IHNvZnR3YXJlIHN0cnVjdHVyZQogICogMi4gaW5pdGlhbGl6ZSB0aGUgbGluayBsaXN0IG9mIHBvcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKLSAqKi8KKyAqLwogc3RhdGljIGludCBfX2luaXQgZmNvZV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKQEAgLTE0MzMsNyArMTQwMCw2IEBACiAJCQl9IGVsc2UgewogCQkJCWZjb2VfcGVyY3B1W2NwdV0gPSBOVUxMOwogCQkJCWtmcmVlKHApOwotCiAJCQl9CiAJCX0KIAl9CkBAIC0xNDQzLDExICsxNDA5LDkgQEAKIAkgKi8KIAlmY29lX2Rldl9zZXR1cCgpOwogCi0JaW5pdF90aW1lcigmZmNvZV90aW1lcik7Ci0JZmNvZV90aW1lci5kYXRhID0gMDsKLQlmY29lX3RpbWVyLmZ1bmN0aW9uID0gZmNvZV93YXRjaGRvZzsKLQlmY29lX3RpbWVyLmV4cGlyZXMgPSAoamlmZmllcyArICgxMCAqIEhaKSk7Ci0JYWRkX3RpbWVyKCZmY29lX3RpbWVyKTsKKwlzZXR1cF90aW1lcigmZmNvZV90aW1lciwgZmNvZV93YXRjaGRvZywgMCk7CisKKwltb2RfdGltZXIoJmZjb2VfdGltZXIsIGppZmZpZXMgKyAoMTAgKiBIWikpOwogCiAJLyogaW5pdGlhdGxpemUgdGhlIGZjb2UgdHJhbnNwb3J0ICovCiAJZmNvZV90cmFuc3BvcnRfaW5pdCgpOwpAQCAtMTQ1OSwxMCArMTQyMywxMCBAQAogbW9kdWxlX2luaXQoZmNvZV9pbml0KTsKIAogLyoqCi0gKiBmY29lX2V4aXQgLSBmY29lIG1vZHVsZSB1bmxvYWRpbmcgY2xlYW51cAorICogZmNvZV9leGl0KCkgLSBmY29lIG1vZHVsZSB1bmxvYWRpbmcgY2xlYW51cAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCi0gKiovCisgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBmY29lX2V4aXQodm9pZCkKIHsKIAl1MzIgaWR4OwpAQCAtMTQ4Myw3ICsxNDQ3LDcgQEAKIAkgKi8KIAlkZWxfdGltZXJfc3luYygmZmNvZV90aW1lcik7CiAKLQkvKiByZWxlYXNlcyB0aGUgYXNzb2NhaXRlZCBmY29lIHRyYW5zcG9ydCBmb3IgZWFjaCBscG9ydCAqLworCS8qIHJlbGVhc2VzIHRoZSBhc3NvY2lhdGVkIGZjb2UgdHJhbnNwb3J0IGZvciBlYWNoIGxwb3J0ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjLCB0bXAsICZmY29lX2hvc3RsaXN0LCBsaXN0KQogCQlmY29lX3RyYW5zcG9ydF9yZWxlYXNlKGZjLT5yZWFsX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKaW5kZXggYWE2NzBhMS4uODlkNDFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hvc3RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKQEAgLTE3Niw3ICsxNzYsNiBAQAogCXRyYW5zcG9ydF91bnJlZ2lzdGVyX2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnNob3N0LT5zaG9zdF9kZXYpOwogCWRldmljZV9kZWwoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwotCXNjc2lfcHJvY19ob3N0ZGlyX3JtKHNob3N0LT5ob3N0dCk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcmVtb3ZlX2hvc3QpOwogCkBAIC0yNzAsNiArMjY5LDggQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChkZXYpOwogCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi0+cGFyZW50OwogCisJc2NzaV9wcm9jX2hvc3RkaXJfcm0oc2hvc3QtPmhvc3R0KTsKKwogCWlmIChzaG9zdC0+ZWhhbmRsZXIpCiAJCWt0aHJlYWRfc3RvcChzaG9zdC0+ZWhhbmRsZXIpOwogCWlmIChzaG9zdC0+d29ya19xKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IDM0YmU4OGQuLmFmMWYwYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTU4MCw4ICs1ODAsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXNjcC0+cmVzdWx0ID0gKChEUklWRVJfSU5WQUxJRHxTVUdHRVNUX0FCT1JUKTw8MjQpIHwKLQkJCQkJKERJRF9BQk9SVDw8MTYpOworCQlzY3AtPnJlc3VsdCA9IERSSVZFUl9JTlZBTElEIDw8IDI0IHwgRElEX0FCT1JUIDw8IDE2OwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwppbmRleCBlZDFlNzI4Li45M2QxZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCkBAIC0yNzY3LDYgKzI3NjcsNDAgQEAKIAkJaWJtdmZjX2luaXRfdGd0KHRndCwgam9iX3N0ZXApOwogfQogCisvKiBEZWZpbmVkIGluIEZDLUxTICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgY29kZTsKKwlpbnQgcmV0cnk7CisJaW50IGxvZ2dlZF9pbjsKK30gcHJsaV9yc3AgW10gPSB7CisJeyAwLCAxLCAwIH0sCisJeyAxLCAwLCAxIH0sCisJeyAyLCAxLCAwIH0sCisJeyAzLCAxLCAwIH0sCisJeyA0LCAwLCAwIH0sCisJeyA1LCAwLCAwIH0sCisJeyA2LCAwLCAxIH0sCisJeyA3LCAwLCAwIH0sCisJeyA4LCAxLCAwIH0sCit9OworCisvKioKKyAqIGlibXZmY19nZXRfcHJsaV9yc3AgLSBGaW5kIFBSTEkgcmVzcG9uc2UgaW5kZXgKKyAqIEBmbGFnczoJUFJMSSByZXNwb25zZSBmbGFncworICoKKyAqKi8KK3N0YXRpYyBpbnQgaWJtdmZjX2dldF9wcmxpX3JzcCh1MTYgZmxhZ3MpCit7CisJaW50IGk7CisJaW50IGNvZGUgPSAoZmxhZ3MgJiAweDBmMDApID4+IDg7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmxpX3JzcCk7IGkrKykKKwkJaWYgKHBybGlfcnNwW2ldLmNvZGUgPT0gY29kZSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogaWJtdmZjX3RndF9wcmxpX2RvbmUgLSBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIFByb2Nlc3MgTG9naW4KICAqIEBldnQ6CWlibXZmYyBldmVudCBzdHJ1Y3QKQEAgLTI3NzcsMTUgKzI4MTEsMzYgQEAKIAlzdHJ1Y3QgaWJtdmZjX3RhcmdldCAqdGd0ID0gZXZ0LT50Z3Q7CiAJc3RydWN0IGlibXZmY19ob3N0ICp2aG9zdCA9IGV2dC0+dmhvc3Q7CiAJc3RydWN0IGlibXZmY19wcm9jZXNzX2xvZ2luICpyc3AgPSAmZXZ0LT54ZmVyX2l1LT5wcmxpOworCXN0cnVjdCBpYm12ZmNfcHJsaV9zdmNfcGFybXMgKnBhcm1zID0gJnJzcC0+cGFybXM7CiAJdTMyIHN0YXR1cyA9IHJzcC0+Y29tbW9uLnN0YXR1czsKKwlpbnQgaW5kZXg7CiAKIAl2aG9zdC0+ZGlzY292ZXJ5X3RocmVhZHMtLTsKIAlpYm12ZmNfc2V0X3RndF9hY3Rpb24odGd0LCBJQk1WRkNfVEdUX0FDVElPTl9OT05FKTsKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgSUJNVkZDX01BRF9TVUNDRVNTOgotCQl0Z3RfZGJnKHRndCwgIlByb2Nlc3MgTG9naW4gc3VjY2VlZGVkXG4iKTsKLQkJdGd0LT5uZWVkX2xvZ2luID0gMDsKLQkJaWJtdmZjX3NldF90Z3RfYWN0aW9uKHRndCwgSUJNVkZDX1RHVF9BQ1RJT05fQUREX1JQT1JUKTsKKwkJdGd0X2RiZyh0Z3QsICJQcm9jZXNzIExvZ2luIHN1Y2NlZWRlZDogJVggJTAyWCAlMDRYXG4iLAorCQkJcGFybXMtPnR5cGUsIHBhcm1zLT5mbGFncywgcGFybXMtPnNlcnZpY2VfcGFybXMpOworCisJCWlmIChwYXJtcy0+dHlwZSA9PSBJQk1WRkNfU0NTSV9GQ1BfVFlQRSkgeworCQkJaW5kZXggPSBpYm12ZmNfZ2V0X3BybGlfcnNwKHBhcm1zLT5mbGFncyk7CisJCQlpZiAocHJsaV9yc3BbaW5kZXhdLmxvZ2dlZF9pbikgeworCQkJCWlmIChwYXJtcy0+ZmxhZ3MgJiBJQk1WRkNfUFJMSV9FU1RfSU1HX1BBSVIpIHsKKwkJCQkJdGd0LT5uZWVkX2xvZ2luID0gMDsKKwkJCQkJdGd0LT5pZHMucm9sZXMgPSAwOworCQkJCQlpZiAocGFybXMtPnNlcnZpY2VfcGFybXMgJiBJQk1WRkNfUFJMSV9UQVJHRVRfRlVOQykKKwkJCQkJCXRndC0+aWRzLnJvbGVzIHw9IEZDX1BPUlRfUk9MRV9GQ1BfVEFSR0VUOworCQkJCQlpZiAocGFybXMtPnNlcnZpY2VfcGFybXMgJiBJQk1WRkNfUFJMSV9JTklUSUFUT1JfRlVOQykKKwkJCQkJCXRndC0+aWRzLnJvbGVzIHw9IEZDX1BPUlRfUk9MRV9GQ1BfSU5JVElBVE9SOworCQkJCQlpYm12ZmNfc2V0X3RndF9hY3Rpb24odGd0LCBJQk1WRkNfVEdUX0FDVElPTl9BRERfUlBPUlQpOworCQkJCX0gZWxzZQorCQkJCQlpYm12ZmNfc2V0X3RndF9hY3Rpb24odGd0LCBJQk1WRkNfVEdUX0FDVElPTl9ERUxfUlBPUlQpOworCQkJfSBlbHNlIGlmIChwcmxpX3JzcFtpbmRleF0ucmV0cnkpCisJCQkJaWJtdmZjX3JldHJ5X3RndF9pbml0KHRndCwgaWJtdmZjX3RndF9zZW5kX3BybGkpOworCQkJZWxzZQorCQkJCWlibXZmY19zZXRfdGd0X2FjdGlvbih0Z3QsIElCTVZGQ19UR1RfQUNUSU9OX0RFTF9SUE9SVCk7CisJCX0gZWxzZQorCQkJaWJtdmZjX3NldF90Z3RfYWN0aW9uKHRndCwgSUJNVkZDX1RHVF9BQ1RJT05fREVMX1JQT1JUKTsKIAkJYnJlYWs7CiAJY2FzZSBJQk1WRkNfTUFEX0RSSVZFUl9GQUlMRUQ6CiAJCWJyZWFrOwpAQCAtMjg3NCw3ICsyOTI5LDYgQEAKIAkJdGd0LT5pZHMubm9kZV9uYW1lID0gd3duX3RvX3U2NChyc3AtPnNlcnZpY2VfcGFybXMubm9kZV9uYW1lKTsKIAkJdGd0LT5pZHMucG9ydF9uYW1lID0gd3duX3RvX3U2NChyc3AtPnNlcnZpY2VfcGFybXMucG9ydF9uYW1lKTsKIAkJdGd0LT5pZHMucG9ydF9pZCA9IHRndC0+c2NzaV9pZDsKLQkJdGd0LT5pZHMucm9sZXMgPSBGQ19QT1JUX1JPTEVfRkNQX1RBUkdFVDsKIAkJbWVtY3B5KCZ0Z3QtPnNlcnZpY2VfcGFybXMsICZyc3AtPnNlcnZpY2VfcGFybXMsCiAJCSAgICAgICBzaXplb2YodGd0LT5zZXJ2aWNlX3Bhcm1zKSk7CiAJCW1lbWNweSgmdGd0LT5zZXJ2aWNlX3Bhcm1zX2NoYW5nZSwgJnJzcC0+c2VydmljZV9wYXJtc19jaGFuZ2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggMDc4MjkwMC4uZGVmNDczZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtMTUyLDEzICsxNTIsMTMgQEAKIE1PRFVMRV9QQVJNX0RFU0MobG9nX2xldmVsLCAiU2V0IHRvIDAgLSA0IGZvciBpbmNyZWFzaW5nIHZlcmJvc2l0eSBvZiBkZXZpY2UgZHJpdmVyIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQodGVzdG1vZGUsIGlwcl90ZXN0bW9kZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGVzdG1vZGUsICJEQU5HRVJPVVMhISEgQWxsb3dzIHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZmFzdGZhaWwsIGlwcl9mYXN0ZmFpbCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbV9uYW1lZChmYXN0ZmFpbCwgaXByX2Zhc3RmYWlsLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZmFzdGZhaWwsICJSZWR1Y2UgdGltZW91dHMgYW5kIHJldHJpZXMiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0cmFuc29wX3RpbWVvdXQsIGlwcl90cmFuc29wX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRyYW5zb3BfdGltZW91dCwgIlRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGZvciBhZGFwdGVyIHRvIGNvbWUgb3BlcmF0aW9uYWwgKGRlZmF1bHQ6IDMwMCkiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChlbmFibGVfY2FjaGUsIGlwcl9lbmFibGVfY2FjaGUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9jYWNoZSwgIkVuYWJsZSBhZGFwdGVyJ3Mgbm9uLXZvbGF0aWxlIHdyaXRlIGNhY2hlIChkZWZhdWx0OiAxKSIpOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpcHJfZGVidWcsIGludCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGlwcl9kZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRldmljZSBkcml2ZXIgZGVidWdnaW5nIGxvZ2dpbmcuIFNldCB0byAxIHRvIGVuYWJsZS4gKGRlZmF1bHQ6IDApIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZHVhbF9pb2FfcmFpZCwgaXByX2R1YWxfaW9hX3JhaWQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR1YWxfaW9hX3JhaWQsICJFbmFibGUgZHVhbCBhZGFwdGVyIFJBSUQgc3VwcG9ydC4gU2V0IHRvIDEgdG8gZW5hYmxlLiAoZGVmYXVsdDogMSkiKTsKQEAgLTM1NCw2ICszNTQsOCBAQAogCSI5MDc2OiBDb25maWd1cmF0aW9uIGVycm9yLCBtaXNzaW5nIHJlbW90ZSBJT0EifSwKIAl7MHgwNjY3OTEwMCwgMCwgSVBSX0RFRkFVTFRfTE9HX0xFVkVMLAogCSI0MDUwOiBFbmNsb3N1cmUgZG9lcyBub3Qgc3VwcG9ydCBhIHJlcXVpcmVkIG11bHRpcGF0aCBmdW5jdGlvbiJ9LAorCXsweDA2NjkwMDAwLCAwLCBJUFJfREVGQVVMVF9MT0dfTEVWRUwsCisJIjQwNzA6IExvZ2ljYWxseSBiYWQgYmxvY2sgd3JpdHRlbiBvbiBkZXZpY2UifSwKIAl7MHgwNjY5MDIwMCwgMCwgSVBSX0RFRkFVTFRfTE9HX0xFVkVMLAogCSI5MDQxOiBBcnJheSBwcm90ZWN0aW9uIHRlbXBvcmFyaWx5IHN1c3BlbmRlZCJ9LAogCXsweDA2Njk4MjAwLCAwLCBJUFJfREVGQVVMVF9MT0dfTEVWRUwsCkBAIC03MTQ3LDYgKzcxNDksNyBAQAogCiAJRU5URVI7CiAJZnJlZV9pcnEocGRldi0+aXJxLCBpb2FfY2ZnKTsKKwlwY2lfZGlzYWJsZV9tc2kocGRldik7CiAJaW91bm1hcChpb2FfY2ZnLT5oZHdfZG1hX3JlZ3MpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJaXByX2ZyZWVfbWVtKGlvYV9jZmcpOwpAQCAtNzQzMiw2ICs3NDM1LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmICghKHJjID0gcGNpX2VuYWJsZV9tc2kocGRldikpKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTVNJIGVuYWJsZWRcbiIpOworCWVsc2UgaWYgKGlwcl9kZWJ1ZykKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgTVNJXG4iKTsKKwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJGb3VuZCBJT0Egd2l0aCBJUlE6ICVkXG4iLCBwZGV2LT5pcnEpOwogCiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmZHJpdmVyX3RlbXBsYXRlLCBzaXplb2YoKmlvYV9jZmcpKTsKQEAgLTc1NzQsNiArNzU4Miw3IEBACiBvdXRfc2NzaV9ob3N0X3B1dDoKIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwogb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlnb3RvIG91dDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuaCBiL2RyaXZlcnMvc2NzaS9pcHIuaAppbmRleCA4Zjg3MmY4Li43OWEzYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmgKKysrIGIvZHJpdmVycy9zY3NpL2lwci5oCkBAIC0zNyw4ICszNyw4IEBACiAvKgogICogTGl0ZXJhbHMKICAqLwotI2RlZmluZSBJUFJfRFJJVkVSX1ZFUlNJT04gIjIuNC4xIgotI2RlZmluZSBJUFJfRFJJVkVSX0RBVEUgIihBcHJpbCAyNCwgMjAwNykiCisjZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi40LjIiCisjZGVmaW5lIElQUl9EUklWRVJfREFURSAiKEphbnVhcnkgMjEsIDIwMDkpIgogCiAvKgogICogSVBSX01BWF9DTURfUEVSX0xVTjogVGhpcyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwcy5jIGIvZHJpdmVycy9zY3NpL2lwcy5jCmluZGV4IGVmNjgzZjAuLjQ1N2Q3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuYworKysgYi9kcml2ZXJzL3Njc2kvaXBzLmMKQEAgLTEwMDQsOCArMTAwNCw3IEBACiAJREVCVUdfVkFSKDEsICIoJXMlZCkgRmFpbGluZyBhY3RpdmUgY29tbWFuZHMiLCBpcHNfbmFtZSwgaGEtPmhvc3RfbnVtKTsKIAogCXdoaWxlICgoc2NiID0gaXBzX3JlbW92ZXFfc2NiX2hlYWQoJmhhLT5zY2JfYWN0aXZlbGlzdCkpKSB7Ci0JCXNjYi0+c2NzaV9jbWQtPnJlc3VsdCA9Ci0JCSAgICAoRElEX1JFU0VUIDw8IDE2KSB8IChTVUdHRVNUX1JFVFJZIDw8IDI0KTsKKwkJc2NiLT5zY3NpX2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwogCQlzY2ItPnNjc2lfY21kLT5zY3NpX2RvbmUoc2NiLT5zY3NpX2NtZCk7CiAJCWlwc19mcmVlc2NiKGhhLCBzY2IpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCAyMzgwOGRmLi5iM2U1ZTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC00OCwxMyArNDgsNiBAQAogCSAgICAgICJBbGV4IEFpem1hbiA8aXRuNzgwQHlhaG9vLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaVNDU0kvVENQIGRhdGEtcGF0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI3VuZGVmIERFQlVHX1RDUAotCi0jaWZkZWYgREVCVUdfVENQCi0jZGVmaW5lIGRlYnVnX3RjcChmbXQuLi4pIHByaW50ayhLRVJOX0lORk8gInRjcDogIiBmbXQpCi0jZWxzZQotI2RlZmluZSBkZWJ1Z190Y3AoZm10Li4uKQotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmlzY3NpX3N3X3RjcF9zY3NpX3RyYW5zcG9ydDsKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzY3NpX3N3X3RjcF9zaHQ7CkBAIC02Myw2ICs1NiwyMSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBpc2NzaV9tYXhfbHVuID0gNTEyOwogbW9kdWxlX3BhcmFtX25hbWVkKG1heF9sdW4sIGlzY3NpX21heF9sdW4sIHVpbnQsIFNfSVJVR08pOwogCitzdGF0aWMgaW50IGlzY3NpX3N3X3RjcF9kYmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfaXNjc2lfdGNwLCBpc2NzaV9zd190Y3BfZGJnLCBpbnQsCisJCSAgIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfaXNjc2lfdGNwLCAiVHVybiBvbiBkZWJ1Z2dpbmcgZm9yIGlzY3NpX3RjcCBtb2R1bGUgIgorCQkgIlNldCB0byAxIHRvIHR1cm4gb24sIGFuZCB6ZXJvIHRvIHR1cm4gb2ZmLiBEZWZhdWx0IGlzIG9mZi4iKTsKKworI2RlZmluZSBJU0NTSV9TV19UQ1BfREJHKF9jb25uLCBkYmdfZm10LCBhcmcuLi4pCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChpc2NzaV9zd190Y3BfZGJnKQkJCQlcCisJCQlpc2NzaV9jb25uX3ByaW50ayhLRVJOX0lORk8sIF9jb25uLAlcCisJCQkJCSAgICAgIiVzICIgZGJnX2ZtdCwJXAorCQkJCQkgICAgIF9fZnVuY19fLCAjI2FyZyk7CVwKKwl9IHdoaWxlICgwKTsKKworCiAvKioKICAqIGlzY3NpX3N3X3RjcF9yZWN2IC0gVENQIHJlY2VpdmUgaW4gc2VuZGZpbGUgZmFzaGlvbgogICogQHJkX2Rlc2M6IHJlYWQgZGVzY3JpcHRvcgpAQCAtNzcsNyArODUsNyBAQAogCXVuc2lnbmVkIGludCBjb25zdW1lZCwgdG90YWxfY29uc3VtZWQgPSAwOwogCWludCBzdGF0dXM7CiAKLQlkZWJ1Z190Y3AoImluICVkIGJ5dGVzXG4iLCBza2ItPmxlbiAtIG9mZnNldCk7CisJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiaW4gJWQgYnl0ZXNcbiIsIHNrYi0+bGVuIC0gb2Zmc2V0KTsKIAogCWRvIHsKIAkJc3RhdHVzID0gMDsKQEAgLTg2LDcgKzk0LDggQEAKIAkJdG90YWxfY29uc3VtZWQgKz0gY29uc3VtZWQ7CiAJfSB3aGlsZSAoY29uc3VtZWQgIT0gMCAmJiBzdGF0dXMgIT0gSVNDU0lfVENQX1NLQl9ET05FKTsKIAotCWRlYnVnX3RjcCgicmVhZCAlZCBieXRlcyBzdGF0dXMgJWRcbiIsIHNrYi0+bGVuIC0gb2Zmc2V0LCBzdGF0dXMpOworCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgInJlYWQgJWQgYnl0ZXMgc3RhdHVzICVkXG4iLAorCQkJIHNrYi0+bGVuIC0gb2Zmc2V0LCBzdGF0dXMpOwogCXJldHVybiB0b3RhbF9jb25zdW1lZDsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBACiAJaWYgKChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFX1dBSVQgfHwKIAkgICAgIHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpICYmCiAJICAgICFhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpKSB7Ci0JCWRlYnVnX3RjcCgiaXNjc2lfdGNwX3N0YXRlX2NoYW5nZTogVENQX0NMT1NFfFRDUF9DTE9TRV9XQUlUXG4iKTsKKwkJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiaXNjc2lfdGNwX3N0YXRlX2NoYW5nZTogIgorCQkJCSAiVENQX0NMT1NFfFRDUF9DTE9TRV9XQUlUXG4iKTsKIAkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJfQogCkBAIC0xNTUsOCArMTY1LDggQEAKIAlzdHJ1Y3QgaXNjc2lfc3dfdGNwX2Nvbm4gKnRjcF9zd19jb25uID0gdGNwX2Nvbm4tPmRkX2RhdGE7CiAKIAl0Y3Bfc3dfY29ubi0+b2xkX3dyaXRlX3NwYWNlKHNrKTsKLQlkZWJ1Z190Y3AoImlzY3NpX3dyaXRlX3NwYWNlOiBjaWQgJWRcbiIsIGNvbm4tPmlkKTsKLQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJpc2NzaV93cml0ZV9zcGFjZVxuIik7CisJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogfQogCiBzdGF0aWMgdm9pZCBpc2NzaV9zd190Y3BfY29ubl9zZXRfY2FsbGJhY2tzKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQpAQCAtMjgzLDcgKzI5Myw3IEBACiAJCX0KIAl9CiAKLQlkZWJ1Z190Y3AoInhtaXQgJWQgYnl0ZXNcbiIsIGNvbnN1bWVkKTsKKwlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJ4bWl0ICVkIGJ5dGVzXG4iLCBjb25zdW1lZCk7CiAKIAljb25uLT50eGRhdGFfb2N0ZXRzICs9IGNvbnN1bWVkOwogCXJldHVybiBjb25zdW1lZDsKQEAgLTI5MSw3ICszMDEsNyBAQAogZXJyb3I6CiAJLyogVHJhbnNtaXQgZXJyb3IuIFdlIGNvdWxkIGluaXRpYXRlIGVycm9yIHJlY292ZXJ5CiAJICogaGVyZS4gKi8KLQlkZWJ1Z190Y3AoIkVycm9yIHNlbmRpbmcgUERVLCBlcnJubz0lZFxuIiwgcmMpOworCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgIkVycm9yIHNlbmRpbmcgUERVLCBlcnJubz0lZFxuIiwgcmMpOwogCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCByYyk7CiAJcmV0dXJuIC1FSU87CiB9CkBAIC0zMzQsOSArMzQ0LDEwIEBACiAJc3RydWN0IGlzY3NpX3N3X3RjcF9jb25uICp0Y3Bfc3dfY29ubiA9IHRjcF9jb25uLT5kZF9kYXRhOwogCiAJdGNwX3N3X2Nvbm4tPm91dC5zZWdtZW50ID0gdGNwX3N3X2Nvbm4tPm91dC5kYXRhX3NlZ21lbnQ7Ci0JZGVidWdfdGNwKCJIZWFkZXIgZG9uZS4gTmV4dCBzZWdtZW50IHNpemUgJXUgdG90YWxfc2l6ZSAldVxuIiwKLQkJICB0Y3Bfc3dfY29ubi0+b3V0LnNlZ21lbnQuc2l6ZSwKLQkJICB0Y3Bfc3dfY29ubi0+b3V0LnNlZ21lbnQudG90YWxfc2l6ZSk7CisJSVNDU0lfU1dfVENQX0RCRyh0Y3BfY29ubi0+aXNjc2lfY29ubiwKKwkJCSAiSGVhZGVyIGRvbmUuIE5leHQgc2VnbWVudCBzaXplICV1IHRvdGFsX3NpemUgJXVcbiIsCisJCQkgdGNwX3N3X2Nvbm4tPm91dC5zZWdtZW50LnNpemUsCisJCQkgdGNwX3N3X2Nvbm4tPm91dC5zZWdtZW50LnRvdGFsX3NpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDYsOCArMzU3LDggQEAKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfc3dfdGNwX2Nvbm4gKnRjcF9zd19jb25uID0gdGNwX2Nvbm4tPmRkX2RhdGE7CiAKLQlkZWJ1Z190Y3AoIiVzKCVwJXMpXG4iLCBfX2Z1bmNfXywgdGNwX2Nvbm4sCi0JCQljb25uLT5oZHJkZ3N0X2VuPyAiLCBkaWdlc3QgZW5hYmxlZCIgOiAiIik7CisJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiJXNcbiIsIGNvbm4tPmhkcmRnc3RfZW4gPworCQkJICJkaWdlc3QgZW5hYmxlZCIgOiAiZGlnZXN0IGRpc2FibGVkIik7CiAKIAkvKiBDbGVhciB0aGUgZGF0YSBzZWdtZW50IC0gbmVlZHMgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZQogCSAqIGNhbGxlciB1c2luZyBpc2NzaV90Y3Bfc2VuZF9kYXRhX3ByZXAoKSAqLwpAQCAtMzg5LDkgKzQwMCw5IEBACiAJc3RydWN0IGhhc2hfZGVzYyAqdHhfaGFzaCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGhkcl9zcGVjX2xlbjsKIAotCWRlYnVnX3RjcCgiJXMoJXAsIG9mZnNldD0lZCwgZGF0YWxlbj0lZCVzKVxuIiwgX19mdW5jX18sCi0JCQl0Y3BfY29ubiwgb2Zmc2V0LCBsZW4sCi0JCQljb25uLT5kYXRhZGdzdF9lbj8gIiwgZGlnZXN0IGVuYWJsZWQiIDogIiIpOworCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgIm9mZnNldD0lZCwgZGF0YWxlbj0lZCAlc1xuIiwgb2Zmc2V0LCBsZW4sCisJCQkgY29ubi0+ZGF0YWRnc3RfZW4gPworCQkJICJkaWdlc3QgZW5hYmxlZCIgOiAiZGlnZXN0IGRpc2FibGVkIik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGRhdGFsZW4gbWF0Y2hlcyB3aGF0IHRoZSBjYWxsZXIKIAkgICBzYWlkIGhlIHdvdWxkIHNlbmQuICovCkBAIC00MTUsOCArNDI2LDggQEAKIAlzdHJ1Y3QgaGFzaF9kZXNjICp0eF9oYXNoID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaGRyX3NwZWNfbGVuOwogCi0JZGVidWdfdGNwKCIlcyglcCwgZGF0YWxlbj0lZCVzKVxuIiwgX19mdW5jX18sIHRjcF9jb25uLCBsZW4sCi0JCSAgY29ubi0+ZGF0YWRnc3RfZW4/ICIsIGRpZ2VzdCBlbmFibGVkIiA6ICIiKTsKKwlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJkYXRhbGVuPSV6ZCAlc1xuIiwgbGVuLCBjb25uLT5kYXRhZGdzdF9lbiA/CisJCQkgImRpZ2VzdCBlbmFibGVkIiA6ICJkaWdlc3QgZGlzYWJsZWQiKTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgZGF0YWxlbiBtYXRjaGVzIHdoYXQgdGhlIGNhbGxlcgogCSAgIHNhaWQgaGUgd291bGQgc2VuZC4gKi8KQEAgLTc1NCw4ICs3NjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKIGlzY3NpX3N3X3RjcF9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCB1aW50MTZfdCBjbWRzX21heCwKLQkJCSAgICB1aW50MTZfdCBxZGVwdGgsIHVpbnQzMl90IGluaXRpYWxfY21kc24sCi0JCQkgICAgdWludDMyX3QgKmhvc3RubykKKwkJCSAgICB1aW50MTZfdCBxZGVwdGgsIHVpbnQzMl90IGluaXRpYWxfY21kc24pCiB7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKQEAgLTc2NiwxMCArNzc2LDExIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNob3N0ID0gaXNjc2lfaG9zdF9hbGxvYygmaXNjc2lfc3dfdGNwX3NodCwgMCwgcWRlcHRoKTsKKwlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmlzY3NpX3N3X3RjcF9zaHQsIDAsIDEpOwogCWlmICghc2hvc3QpCiAJCXJldHVybiBOVUxMOwogCXNob3N0LT50cmFuc3BvcnR0ID0gaXNjc2lfc3dfdGNwX3Njc2lfdHJhbnNwb3J0OworCXNob3N0LT5jbWRfcGVyX2x1biA9IHFkZXB0aDsKIAlzaG9zdC0+bWF4X2x1biA9IGlzY3NpX21heF9sdW47CiAJc2hvc3QtPm1heF9pZCA9IDA7CiAJc2hvc3QtPm1heF9jaGFubmVsID0gMDsKQEAgLTc3Nyw3ICs3ODgsNiBAQAogCiAJaWYgKGlzY3NpX2hvc3RfYWRkKHNob3N0LCBOVUxMKSkKIAkJZ290byBmcmVlX2hvc3Q7Ci0JKmhvc3RubyA9IHNob3N0LT5ob3N0X25vOwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZpc2NzaV9zd190Y3BfdHJhbnNwb3J0LCBzaG9zdCwKIAkJCQkJICBjbWRzX21heCwKQEAgLTgxMyw2ICs4MjMsMTIgQEAKIAlpc2NzaV9ob3N0X2ZyZWUoc2hvc3QpOwogfQogCitzdGF0aWMgaW50IGlzY3NpX3N3X3RjcF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc2V0X2JpdChRVUVVRV9GTEFHX0JJREksICZzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaXNjc2lfc3dfdGNwX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CkBAIC04MzMsNiArODQ5LDcgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXI9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXI9IGlzY3NpX2VoX3RhcmdldF9yZXNldCwKIAkudXNlX2NsdXN0ZXJpbmcgICAgICAgICA9IERJU0FCTEVfQ0xVU1RFUklORywKKwkuc2xhdmVfYWxsb2MgICAgICAgICAgICA9IGlzY3NpX3N3X3RjcF9zbGF2ZV9hbGxvYywKIAkuc2xhdmVfY29uZmlndXJlICAgICAgICA9IGlzY3NpX3N3X3RjcF9zbGF2ZV9jb25maWd1cmUsCiAJLnByb2NfbmFtZQkJPSAiaXNjc2lfdGNwIiwKIAkudGhpc19pZAkJPSAtMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9sYXNpNzAwLmMgYi9kcml2ZXJzL3Njc2kvbGFzaTcwMC5jCmluZGV4IDRhNGU2OTUuLmYyM2M0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9sYXNpNzAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xhc2k3MDAuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIAlob3N0ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpob3N0ZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghaG9zdGRhdGEpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGhvc3QgZGF0YVxuIik7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBob3N0IGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jCmluZGV4IGRkMTU2NGMuLmU1NzU1NmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMKQEAgLTY0LDcgKzY0LDcgQEAKIHN0YXRpYyB2b2lkIGZjX2Rpc2NfcmVzdGFydChzdHJ1Y3QgZmNfZGlzYyAqKTsKIAogLyoqCi0gKiBmY19kaXNjX2xvb2t1cF9ycG9ydCAtIGxvb2t1cCBhIHJlbW90ZSBwb3J0IGJ5IHBvcnRfaWQKKyAqIGZjX2Rpc2NfbG9va3VwX3Jwb3J0KCkgLSBsb29rdXAgYSByZW1vdGUgcG9ydCBieSBwb3J0X2lkCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCiAgKiBAcG9ydF9pZDogcmVtb3RlIHBvcnQgcG9ydF9pZCB0byBtYXRjaAogICovCkBAIC05Miw3ICs5Miw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19zdG9wX3Jwb3J0cyAtIGRlbGV0ZSBhbGwgdGhlIHJlbW90ZSBwb3J0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGxwb3J0CisgKiBmY19kaXNjX3N0b3BfcnBvcnRzKCkgLSBkZWxldGUgYWxsIHRoZSByZW1vdGUgcG9ydHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBscG9ydAogICogQGRpc2M6IFRoZSBkaXNjb3Zlcnkgam9iIHRvIHN0b3AgcnBvcnRzIG9uCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCB0aGUgbHBvcnQgbXV0ZXggaXMgbG9ja2VkIGJlZm9yZQpAQCAtMTE3LDcgKzExNyw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19ycG9ydF9jYWxsYmFjayAtIEV2ZW50IGhhbmRsZXIgZm9yIHJwb3J0IGV2ZW50cworICogZmNfZGlzY19ycG9ydF9jYWxsYmFjaygpIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aGljaCBpcyByZWNlaXZpbmcgdGhlIGV2ZW50CiAgKiBAcnBvcnQ6IFRoZSBycG9ydCB3aGljaCB0aGUgZXZlbnQgaGFzIG9jY3VyZWQgb24KICAqIEBldmVudDogVGhlIGV2ZW50IHRoYXQgb2NjdXJlZApAQCAtMTUxLDcgKzE1MSw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19yZWN2X3JzY25fcmVxIC0gSGFuZGxlIFJlZ2lzdGVyZWQgU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAoUlNDTikKKyAqIGZjX2Rpc2NfcmVjdl9yc2NuX3JlcSgpIC0gSGFuZGxlIFJlZ2lzdGVyZWQgU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAoUlNDTikKICAqIEBzcDogQ3VycmVudCBzZXF1ZW5jZSBvZiB0aGUgUlNDTiBleGNoYW5nZQogICogQGZwOiBSU0NOIEZyYW1lCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJCWxpc3RfZGVsKCZkcC0+cGVlcnMpOwogCQkJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfbG9va3VwKGxwb3J0LCBkcC0+aWRzLnBvcnRfaWQpOwogCQkJaWYgKHJwb3J0KSB7Ci0JCQkJcmRhdGEgPSBSUE9SVF9UT19QUklWKHJwb3J0KTsKKwkJCQlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCQkJCWxpc3RfZGVsKCZyZGF0YS0+cGVlcnMpOwogCQkJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocnBvcnQpOwogCQkJfQpAQCAtMjY1LDcgKzI2NSw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19yZWN2X3JlcSAtIEhhbmRsZSBpbmNvbWluZyByZXF1ZXN0cworICogZmNfZGlzY19yZWN2X3JlcSgpIC0gSGFuZGxlIGluY29taW5nIHJlcXVlc3RzCiAgKiBAc3A6IEN1cnJlbnQgc2VxdWVuY2Ugb2YgdGhlIHJlcXVlc3QgZXhjaGFuZ2UKICAqIEBmcDogVGhlIGZyYW1lCiAgKiBAbHBvcnQ6IFRoZSBGQyBsb2NhbCBwb3J0CkBAIC0yOTQsNyArMjk0LDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX3Jlc3RhcnQgLSBSZXN0YXJ0IGRpc2NvdmVyeQorICogZmNfZGlzY19yZXN0YXJ0KCkgLSBSZXN0YXJ0IGRpc2NvdmVyeQogICogQGxwb3J0OiBGQyBkaXNjb3ZlcnkgY29udGV4dAogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgdGhlIGRpc2MgbXV0ZXgKQEAgLTMyMiw3ICszMjIsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2Nfc3RhcnQgLSBGaWJyZSBDaGFubmVsIFRhcmdldCBkaXNjb3ZlcnkKKyAqIGZjX2Rpc2Nfc3RhcnQoKSAtIEZpYnJlIENoYW5uZWwgVGFyZ2V0IGRpc2NvdmVyeQogICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0CiAgKgogICogUmV0dXJucyBub24temVybyBpZiBkaXNjb3ZlcnkgY2Fubm90IGJlIHN0YXJ0ZWQuCkBAIC0zODMsNyArMzgzLDcgQEAKIH07CiAKIC8qKgotICogZmNfZGlzY19uZXdfdGFyZ2V0IC0gSGFuZGxlIG5ldyB0YXJnZXQgZm91bmQgYnkgZGlzY292ZXJ5CisgKiBmY19kaXNjX25ld190YXJnZXQoKSAtIEhhbmRsZSBuZXcgdGFyZ2V0IGZvdW5kIGJ5IGRpc2NvdmVyeQogICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0CiAgKiBAcnBvcnQ6IFRoZSBwcmV2aW91cyBGQyByZW1vdGUgcG9ydCAoTlVMTCBpZiBuZXcgcmVtb3RlIHBvcnQpCiAgKiBAaWRzOiBJZGVudGlmaWVycyBmb3IgdGhlIG5ldyBGQyByZW1vdGUgcG9ydApAQCAtMzk2LDcgKzM5Niw3IEBACiAJCQkgICAgICBzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgKmlkcykKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJwOworCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YTsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHJwb3J0ICYmIGlkcy0+cG9ydF9uYW1lKSB7CkBAIC00MzAsMTUgKzQzMCwxNSBAQAogCQkJCWRwLmlkcy5wb3J0X25hbWUgPSBpZHMtPnBvcnRfbmFtZTsKIAkJCQlkcC5pZHMubm9kZV9uYW1lID0gaWRzLT5ub2RlX25hbWU7CiAJCQkJZHAuaWRzLnJvbGVzID0gaWRzLT5yb2xlczsKLQkJCQlycG9ydCA9IGZjX3Jwb3J0X3JvZ3VlX2NyZWF0ZSgmZHApOworCQkJCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSgmZHApOwogCQkJfQogCQkJaWYgKCFycG9ydCkKIAkJCQllcnJvciA9IC1FTk9NRU07CiAJCX0KIAkJaWYgKHJwb3J0KSB7Ci0JCQlycCA9IHJwb3J0LT5kZF9kYXRhOwotCQkJcnAtPm9wcyA9ICZmY19kaXNjX3Jwb3J0X29wczsKLQkJCXJwLT5ycF9zdGF0ZSA9IFJQT1JUX1NUX0lOSVQ7CisJCQlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOworCQkJcmRhdGEtPm9wcyA9ICZmY19kaXNjX3Jwb3J0X29wczsKKwkJCXJkYXRhLT5ycF9zdGF0ZSA9IFJQT1JUX1NUX0lOSVQ7CiAJCQlscG9ydC0+dHQucnBvcnRfbG9naW4ocnBvcnQpOwogCQl9CiAJfQpAQCAtNDQ2LDIwICs0NDYsMjAgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX2RlbF90YXJnZXQgLSBEZWxldGUgYSB0YXJnZXQKKyAqIGZjX2Rpc2NfZGVsX3RhcmdldCgpIC0gRGVsZXRlIGEgdGFyZ2V0CiAgKiBAZGlzYzogRkMgZGlzY292ZXJ5IGNvbnRleHQKICAqIEBycG9ydDogVGhlIHJlbW90ZSBwb3J0IHRvIGJlIHJlbW92ZWQKICAqLwogc3RhdGljIHZvaWQgZmNfZGlzY19kZWxfdGFyZ2V0KHN0cnVjdCBmY19kaXNjICpkaXNjLCBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQogewogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBkaXNjLT5scG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBSUE9SVF9UT19QUklWKHJwb3J0KTsKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKIAlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJwb3J0KTsKIH0KIAogLyoqCi0gKiBmY19kaXNjX2RvbmUgLSBEaXNjb3ZlcnkgaGFzIGJlZW4gY29tcGxldGVkCisgKiBmY19kaXNjX2RvbmUoKSAtIERpc2NvdmVyeSBoYXMgYmVlbiBjb21wbGV0ZWQKICAqIEBkaXNjOiBGQyBkaXNjb3ZlcnkgY29udGV4dAogICovCiBzdGF0aWMgdm9pZCBmY19kaXNjX2RvbmUoc3RydWN0IGZjX2Rpc2MgKmRpc2MpCkBAIC00NzksNyArNDc5LDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX2Vycm9yIC0gSGFuZGxlIGVycm9yIG9uIGROUyByZXF1ZXN0CisgKiBmY19kaXNjX2Vycm9yKCkgLSBIYW5kbGUgZXJyb3Igb24gZE5TIHJlcXVlc3QKICAqIEBkaXNjOiBGQyBkaXNjb3ZlcnkgY29udGV4dAogICogQGZwOiBUaGUgZnJhbWUgcG9pbnRlcgogICovCkBAIC01MTksNyArNTE5LDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX2dwbl9mdF9yZXEgLSBTZW5kIEdldCBQb3J0IE5hbWVzIGJ5IEZDLTQgdHlwZSAoR1BOX0ZUKSByZXF1ZXN0CisgKiBmY19kaXNjX2dwbl9mdF9yZXEoKSAtIFNlbmQgR2V0IFBvcnQgTmFtZXMgYnkgRkMtNCB0eXBlIChHUE5fRlQpIHJlcXVlc3QKICAqIEBscG9ydDogRkMgZGlzY292ZXJ5IGNvbnRleHQKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSBkaXNjX211dGV4IGlzIGxvY2tlZApAQCAtNTUzLDcgKzU1Myw3IEBACiB9CiAKIC8qKgotICogZmNfZGlzY19ncG5fZnRfcGFyc2UgLSBQYXJzZSB0aGUgbGlzdCBvZiBJRHMgYW5kIG5hbWVzIHJlc3VsdGluZyBmcm9tIGEgcmVxdWVzdAorICogZmNfZGlzY19ncG5fZnRfcGFyc2UoKSAtIFBhcnNlIHRoZSBsaXN0IG9mIElEcyBhbmQgbmFtZXMgcmVzdWx0aW5nIGZyb20gYSByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCiAgKiBAYnVmOiBHUE5fRlQgcmVzcG9uc2UgYnVmZmVyCiAgKiBAbGVuOiBzaXplIG9mIHJlc3BvbnNlIGJ1ZmZlcgpAQCAtNjE3LDcgKzYxNyw3IEBACiAKIAkJaWYgKChkcC5pZHMucG9ydF9pZCAhPSBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpKSAmJgogCQkgICAgKGRwLmlkcy5wb3J0X25hbWUgIT0gbHBvcnQtPnd3cG4pKSB7Ci0JCQlycG9ydCA9IGZjX3Jwb3J0X3JvZ3VlX2NyZWF0ZSgmZHApOworCQkJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKCZkcCk7CiAJCQlpZiAocnBvcnQpIHsKIAkJCQlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCQkJCXJkYXRhLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7CkBAIC02NTgsNyArNjU4LDEwIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0vKgorLyoqCisgKiBmY19kaXNjX3RpbWVvdXQoKSAtIFJldHJ5IGhhbmRsZXIgZm9yIHRoZSBkaXNjIGNvbXBvbmVudAorICogQHdvcms6IFN0cnVjdHVyZSBob2xkaW5nIGRpc2Mgb2JqIHRoYXQgbmVlZHMgcmV0cnkgZGlzY292ZXJ5CisgKgogICogSGFuZGxlIHJldHJ5IG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZvciByZW1vdGUgcG9ydHMuCiAgKi8KIHN0YXRpYyB2b2lkIGZjX2Rpc2NfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC02NzMsNyArNjc2LDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX2dwbl9mdF9yZXNwIC0gSGFuZGxlIGEgcmVzcG9uc2UgZnJhbWUgZnJvbSBHZXQgUG9ydCBOYW1lcyAoR1BOX0ZUKQorICogZmNfZGlzY19ncG5fZnRfcmVzcCgpIC0gSGFuZGxlIGEgcmVzcG9uc2UgZnJhbWUgZnJvbSBHZXQgUG9ydCBOYW1lcyAoR1BOX0ZUKQogICogQHNwOiBDdXJyZW50IHNlcXVlbmNlIG9mIEdQTl9GVCBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQGxwX2FyZzogRmlicmUgQ2hhbm5lbCBob3N0IHBvcnQgaW5zdGFuY2UKQEAgLTcxMiw5ICs3MTUsNyBAQAogCQkJICAgICAgIGZyX2xlbihmcCkpOwogCQl9IGVsc2UgaWYgKG50b2hzKGNwLT5jdF9jbWQpID09IEZDX0ZTX0FDQykgewogCi0JCQkvKgotCQkJICogQWNjZXB0ZWQuICBQYXJzZSByZXNwb25zZS4KLQkJCSAqLworCQkJLyogQWNjZXB0ZWQsIHBhcnNlIHRoZSByZXNwb25zZS4gKi8KIAkJCWJ1ZiA9IGNwICsgMTsKIAkJCWxlbiAtPSBzaXplb2YoKmNwKTsKIAkJfSBlbHNlIGlmIChudG9ocyhjcC0+Y3RfY21kKSA9PSBGQ19GU19SSlQpIHsKQEAgLTc0Niw3ICs3NDcsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2Nfc2luZ2xlIC0gRGlzY292ZXIgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgdGFyZ2V0CisgKiBmY19kaXNjX3NpbmdsZSgpIC0gRGlzY292ZXIgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgdGFyZ2V0CiAgKiBAbHBvcnQ6IEZDIGxvY2FsIHBvcnQKICAqIEBkcDogVGhlIHBvcnQgdG8gcmVkaXNjb3ZlcgogICoKQEAgLTc2OSw3ICs3NzAsNyBAQAogCWlmIChycG9ydCkKIAkJZmNfZGlzY19kZWxfdGFyZ2V0KGRpc2MsIHJwb3J0KTsKIAotCW5ld19ycG9ydCA9IGZjX3Jwb3J0X3JvZ3VlX2NyZWF0ZShkcCk7CisJbmV3X3Jwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShkcCk7CiAJaWYgKG5ld19ycG9ydCkgewogCQlyZGF0YSA9IG5ld19ycG9ydC0+ZGRfZGF0YTsKIAkJcmRhdGEtPm9wcyA9ICZmY19kaXNjX3Jwb3J0X29wczsKQEAgLTc4Miw3ICs3ODMsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2Nfc3RvcCAtIFN0b3AgZGlzY292ZXJ5IGZvciBhIGdpdmVuIGxwb3J0CisgKiBmY19kaXNjX3N0b3AoKSAtIFN0b3AgZGlzY292ZXJ5IGZvciBhIGdpdmVuIGxwb3J0CiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB0aGF0IGRpc2NvdmVyeSBzaG91bGQgc3RvcCBmb3IKICAqLwogdm9pZCBmY19kaXNjX3N0b3Aoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKQEAgLTc5Niw3ICs3OTcsNyBAQAogfQogCiAvKioKLSAqIGZjX2Rpc2Nfc3RvcF9maW5hbCAtIFN0b3AgZGlzY292ZXJ5IGZvciBhIGdpdmVuIGxwb3J0CisgKiBmY19kaXNjX3N0b3BfZmluYWwoKSAtIFN0b3AgZGlzY292ZXJ5IGZvciBhIGdpdmVuIGxwb3J0CiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB0aGF0IGRpc2NvdmVyeSBzaG91bGQgc3RvcCBmb3IKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgZGlzY292ZXJ5IGhhcyBiZWVuCkBAIC04MDksNyArODEwLDcgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX2luaXQgLSBJbml0aWFsaXplIHRoZSBkaXNjb3ZlcnkgYmxvY2sKKyAqIGZjX2Rpc2NfaW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgZGlzY292ZXJ5IGJsb2NrCiAgKiBAbHBvcnQ6IEZDIGxvY2FsIHBvcnQKICAqLwogaW50IGZjX2Rpc2NfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKaW5kZXggNjZkYjA4YS4uOTkyYWYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgogI2luY2x1ZGUgPHNjc2kvZmNfZW5jb2RlLmg+CiAKLSNkZWZpbmUJICBGQ19ERUZfUl9BX1RPViAgICAgICgxMCAqIDEwMDApIC8qIHJlc291cmNlIGFsbG9jYXRpb24gdGltZW91dCAqLwotCiAvKgogICogZmNfZXhjaF9kZWJ1ZyBjYW4gYmUgc2V0IGluIGRlYnVnZ2VyIG9yIGF0IGNvbXBpbGUgdGltZSB0byBnZXQgbW9yZSBsb2dzLgogICovCkBAIC0yODMsNyArMjgxLDcgQEAKIAkJCWVwLT5kZXN0cnVjdG9yKCZlcC0+c2VxLCBlcC0+YXJnKTsKIAkJaWYgKGVwLT5scC0+dHQuZXhjaF9wdXQpCiAJCQllcC0+bHAtPnR0LmV4Y2hfcHV0KGVwLT5scCwgbXAsIGVwLT54aWQpOwotCQlXQVJOX09OKCFlcC0+ZXNiX3N0YXQgJiBFU0JfU1RfQ09NUExFVEUpOworCQlXQVJOX09OKCEoZXAtPmVzYl9zdGF0ICYgRVNCX1NUX0NPTVBMRVRFKSk7CiAJCW1lbXBvb2xfZnJlZShlcCwgbXAtPmVwX3Bvb2wpOwogCX0KIH0KQEAgLTQ5MSw3ICs0ODksNyBAQAogCXN0cnVjdCBmY19leGNoICplcCA9IE5VTEw7CiAKIAlpZiAobXAtPm1heF9yZWFkKSB7Ci0JCWlmIChmY19mcmFtZV9pc19yZWFkKGZwKSkgeworCQlpZiAoZmNfZmNwX2lzX3JlYWQoZnJfZnNwKGZwKSkpIHsKIAkJCW1pbiA9IG1wLT5taW5feGlkOwogCQkJbWF4ID0gbXAtPm1heF9yZWFkOwogCQkJcGxhc3QgPSAmbXAtPmxhc3RfcmVhZDsKQEAgLTYyNyw3ICs2MjUsNiBAQAogewogCXN0cnVjdCBmY19leGNoICplcDsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKLQl1MTYgcnhpZDsKIAogCWVwID0gbXAtPmxwLT50dC5leGNoX2dldChtcC0+bHAsIGZwKTsKIAlpZiAoZXApIHsKQEAgLTY1NCwxOCArNjUxLDYgQEAKIAkJaWYgKChudG9oMjQoZmgtPmZoX2ZfY3RsKSAmIEZDX0ZDX1NFUV9JTklUKSA9PSAwKQogCQkJZXAtPmVzYl9zdGF0ICY9IH5FU0JfU1RfU0VRX0lOSVQ7CiAKLQkJLyoKLQkJICogU2V0IHRoZSByZXNwb25kZXIgSUQgaW4gdGhlIGZyYW1lIGhlYWRlci4KLQkJICogVGhlIG9sZCBvbmUgc2hvdWxkJ3ZlIGJlZW4gMHhmZmZmLgotCQkgKiBJZiBpdCBpc24ndCwgZG9uJ3QgYXNzaWduIG9uZS4KLQkJICogSW5jb21pbmcgYmFzaWMgbGluayBzZXJ2aWNlIGZyYW1lcyBtYXkgc3BlY2lmeQotCQkgKiBhIHJlZmVyZW5jZWQgUlhfSUQuCi0JCSAqLwotCQlpZiAoZmgtPmZoX3R5cGUgIT0gRkNfVFlQRV9CTFMpIHsKLQkJCXJ4aWQgPSBudG9ocyhmaC0+ZmhfcnhfaWQpOwotCQkJV0FSTl9PTihyeGlkICE9IEZDX1hJRF9VTktOT1dOKTsKLQkJCWZoLT5maF9yeF9pZCA9IGh0b25zKGVwLT5yeGlkKTsKLQkJfQogCQlmY19leGNoX2hvbGQoZXApOwkvKiBob2xkIGZvciBjYWxsZXIgKi8KIAkJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsJLyogbG9jayBmcm9tIGV4Y2hfZ2V0ICovCiAJfQpAQCAtNjc3LDggKzY2Miw4IEBACiAgKiBJZiBmY19wZl9yanRfcmVhc29uIGlzIEZDX1JKVF9OT05FIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgYSBob2xkCiAgKiBvbiB0aGUgZXAgdGhhdCBzaG91bGQgYmUgcmVsZWFzZWQgYnkgdGhlIGNhbGxlci4KICAqLwotc3RhdGljIGVudW0gZmNfcGZfcmp0X3JlYXNvbgotZmNfc2VxX2xvb2t1cF9yZWNpcChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQorc3RhdGljIGVudW0gZmNfcGZfcmp0X3JlYXNvbiBmY19zZXFfbG9va3VwX3JlY2lwKHN0cnVjdCBmY19leGNoX21nciAqbXAsCisJCQkJCQkgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCXN0cnVjdCBmY19leGNoICplcCA9IE5VTEw7CkBAIC05OTYsOSArOTgxLDkgQEAKICAqIFNlbmQgQkxTIFJlamVjdC4KICAqIFRoaXMgaXMgZm9yIHJlamVjdGluZyBCQV9BQlRTIG9ubHkuCiAgKi8KLXN0YXRpYyB2b2lkCi1mY19leGNoX3NlbmRfYmFfcmp0KHN0cnVjdCBmY19mcmFtZSAqcnhfZnAsIGVudW0gZmNfYmFfcmp0X3JlYXNvbiByZWFzb24sCi0JCSAgICBlbnVtIGZjX2JhX3JqdF9leHBsYW4gZXhwbGFuKQorc3RhdGljIHZvaWQgZmNfZXhjaF9zZW5kX2JhX3JqdChzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwLAorCQkJCWVudW0gZmNfYmFfcmp0X3JlYXNvbiByZWFzb24sCisJCQkJZW51bSBmY19iYV9yanRfZXhwbGFuIGV4cGxhbikKIHsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKnJ4X2ZoOwpAQCAtMTA5Niw3ICsxMDgxLDcgQEAKIAkJYXAtPmJhX2hpZ2hfc2VxX2NudCA9IGZoLT5maF9zZXFfY250OwogCQlhcC0+YmFfbG93X3NlcV9jbnQgPSBodG9ucyhzcC0+Y250KTsKIAl9Ci0Jc3AgPSBmY19zZXFfc3RhcnRfbmV4dChzcCk7CisJc3AgPSBmY19zZXFfc3RhcnRfbmV4dF9sb2NrZWQoc3ApOwogCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAJZmNfc2VxX3NlbmRfbGFzdChzcCwgZnAsIEZDX1JDVExfQkFfQUNDLCBGQ19UWVBFX0JMUyk7CiAJZmNfZnJhbWVfZnJlZShyeF9mcCk7CkBAIC0xNDgwLDEwICsxNDY1LDExIEBACiAgKiBJZiBzaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIHdlIHNvdXJjZSBmcm9tIHRoYXQgRklELgogICogSWYgZGlkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5IGV4Y2hhbmdlcyBkZXN0aW5lZCB0byB0aGF0IEZJRC4KICAqLwotdm9pZCBmY19leGNoX21ncl9yZXNldChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLCB1MzIgc2lkLCB1MzIgZGlkKQordm9pZCBmY19leGNoX21ncl9yZXNldChzdHJ1Y3QgZmNfbHBvcnQgKmxwLCB1MzIgc2lkLCB1MzIgZGlkKQogewogCXN0cnVjdCBmY19leGNoICplcDsKIAlzdHJ1Y3QgZmNfZXhjaCAqbmV4dDsKKwlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wID0gbHAtPmVtcDsKIAogCXNwaW5fbG9ja19iaCgmbXAtPmVtX2xvY2spOwogcmVzdGFydDoKQEAgLTE2MDcsNyArMTU5Myw3IEBACiAJaWYgKElTX0VSUihmcCkpIHsKIAkJaW50IGVyciA9IFBUUl9FUlIoZnApOwogCi0JCWlmIChlcnIgPT0gLUZDX0VYX0NMT1NFRCkKKwkJaWYgKGVyciA9PSAtRkNfRVhfQ0xPU0VEIHx8IGVyciA9PSAtRkNfRVhfVElNRU9VVCkKIAkJCWdvdG8gY2xlYW51cDsKIAkJRkNfREJHKCJDYW5ub3QgcHJvY2VzcyBSUlEsIGJlY2F1c2Ugb2YgZnJhbWUgZXJyb3IgJWRcbiIsIGVycik7CiAJCXJldHVybjsKQEAgLTE4NTUsNiArMTg0MSw4IEBACiAJZmNfZXhjaF9zZXR1cF9oZHIoZXAsIGZwLCBlcC0+Zl9jdGwpOwogCXNwLT5jbnQrKzsKIAorCWZjX2ZjcF9kZHBfc2V0dXAoZnJfZnNwKGZwKSwgZXAtPnhpZCk7CisKIAlpZiAodW5saWtlbHkobHAtPnR0LmZyYW1lX3NlbmQobHAsIGZwKSkpCiAJCWdvdG8gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggNDA0ZTYzZi4uYTU3MjVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiB9CiAKIC8qKgotICogZmNfZmNwX3BrdF9yZWxlYXNlIC0gcmVsZWFzZSBob2xkIG9uIHNjc2lfcGt0IHBhY2tldAorICogZmNfZmNwX3BrdF9yZWxlYXNlKCkgLSByZWxlYXNlIGhvbGQgb24gc2NzaV9wa3QgcGFja2V0CiAgKiBAZnNwOglmY3AgcGFja2V0IHN0cnVjdAogICoKICAqIFRoaXMgaXMgdXNlZCBieSB1cHBlciBsYXllciBzY3NpIGRyaXZlci4KQEAgLTE4Myw4ICsxODMsNyBAQAogfQogCiAvKioKLSAqIGZjX2ZjcF9wa3RfZGVzdG9yeSAtIHJlbGVhc2UgaG9sZCBvbiBzY3NpX3BrdCBwYWNrZXQKLSAqCisgKiBmY19mY3BfcGt0X2Rlc3RvcnkoKSAtIHJlbGVhc2UgaG9sZCBvbiBzY3NpX3BrdCBwYWNrZXQKICAqIEBzZXE6CQlleGNoYW5nZSBzZXF1ZW5jZQogICogQGZzcDoJZmNwIHBhY2tldCBzdHJ1Y3QKICAqCkBAIC0xOTksNyArMTk4LDcgQEAKIH0KIAogLyoqCi0gKiBmY19mY3BfbG9ja19wa3QgLSBsb2NrIGEgcGFja2V0IGFuZCBnZXQgYSByZWYgdG8gaXQuCisgKiBmY19mY3BfbG9ja19wa3QoKSAtIGxvY2sgYSBwYWNrZXQgYW5kIGdldCBhIHJlZiB0byBpdC4KICAqIEBmc3A6CWZjcCBwYWNrZXQKICAqCiAgKiBXZSBzaG91bGQgb25seSByZXR1cm4gZXJyb3IgaWYgd2UgcmV0dXJuIGEgY29tbWFuZCB0byBzY3NpLW1sIGJlZm9yZQpAQCAtMjYwLDEyICsyNTksNjIgQEAKIAl9CiAKIAlmc3AtPnN0YXRlICY9IH5GQ19TUkJfQUJPUlRfUEVORElORzsKLQlmc3AtPmlvX3N0YXR1cyA9IFNVR0dFU1RfUkVUUlkgPDwgMjQ7CisJZnNwLT5pb19zdGF0dXMgPSAwOwogCWZzcC0+c3RhdHVzX2NvZGUgPSBGQ19FUlJPUjsKIAlmY19mY3BfY29tcGxldGVfbG9ja2VkKGZzcCk7CiB9CiAKIC8qCisgKiBmY19mY3BfZGRwX3NldHVwIC0gY2FsbHMgdG8gTExEJ3MgZGRwX3NldHVwIHRvIHNldCB1cCBERFAKKyAqIHRyYW5zZmVyIGZvciBhIHJlYWQgSS9PIGluZGljYXRlZCBieSB0aGUgZmNfZmNwX3BrdC4KKyAqIEBmc3A6IHB0ciB0byB0aGUgZmNfZmNwX3BrdAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGluIGV4Y2hfc2VxX3NlbmQoKSB3aGVuIHdlIGhhdmUgYSBuZXdseSBhbGxvY2F0ZWQKKyAqIGV4Y2hhbmdlIHdpdGggYSB2YWxpZCBleGNoYW5nZSBpZCB0byBzZXR1cCBkZHAuCisgKgorICogcmV0dXJuczogbm9uZQorICovCit2b2lkIGZjX2ZjcF9kZHBfc2V0dXAoc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCwgdTE2IHhpZCkKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwOworCisJaWYgKCFmc3ApCisJCXJldHVybjsKKworCWxwID0gZnNwLT5scDsKKwlpZiAoKGZzcC0+cmVxX2ZsYWdzICYgRkNfU1JCX1JFQUQpICYmCisJICAgIChscC0+bHJvX2VuYWJsZWQpICYmIChscC0+dHQuZGRwX3NldHVwKSkgeworCQlpZiAobHAtPnR0LmRkcF9zZXR1cChscCwgeGlkLCBzY3NpX3NnbGlzdChmc3AtPmNtZCksCisJCQkJICAgICBzY3NpX3NnX2NvdW50KGZzcC0+Y21kKSkpCisJCQlmc3AtPnhmZXJfZGRwID0geGlkOworCX0KK30KK0VYUE9SVF9TWU1CT0woZmNfZmNwX2RkcF9zZXR1cCk7CisKKy8qCisgKiBmY19mY3BfZGRwX2RvbmUgLSBjYWxscyB0byBMTEQncyBkZHBfZG9uZSB0byByZWxlYXNlIGFueQorICogRERQIHJlbGF0ZWQgcmVzb3VyY2VzIGZvciB0aGlzIEkvTyBpZiBpdCBpcyBpbml0aWFsaXplZAorICogYXMgYSBkZHAgdHJhbnNmZXIKKyAqIEBmc3A6IHB0ciB0byB0aGUgZmNfZmNwX3BrdAorICoKKyAqIHJldHVybnM6IG5vbmUKKyAqLworc3RhdGljIHZvaWQgZmNfZmNwX2RkcF9kb25lKHN0cnVjdCBmY19mY3BfcGt0ICpmc3ApCit7CisJc3RydWN0IGZjX2xwb3J0ICpscDsKKworCWlmICghZnNwKQorCQlyZXR1cm47CisKKwlscCA9IGZzcC0+bHA7CisJaWYgKGZzcC0+eGZlcl9kZHAgJiYgbHAtPnR0LmRkcF9kb25lKSB7CisJCWZzcC0+eGZlcl9sZW4gPSBscC0+dHQuZGRwX2RvbmUobHAsIGZzcC0+eGZlcl9kZHApOworCQlmc3AtPnhmZXJfZGRwID0gMDsKKwl9Cit9CisKKworLyoKICAqIFJlY2VpdmUgU0NTSSBkYXRhIGZyb20gdGFyZ2V0LgogICogQ2FsbGVkIGFmdGVyIHJlY2VpdmluZyBzb2xpY2l0ZWQgZGF0YS4KICAqLwpAQCAtMjkwLDEwICszMzksMTEgQEAKIAlsZW4gPSBmcl9sZW4oZnApIC0gc2l6ZW9mKCpmaCk7CiAJYnVmID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIDApOwogCisJLyogaWYgdGhpcyBJL08gaXMgZGRwZWQsIHVwZGF0ZSB4ZmVyIGxlbiAqLworCWZjX2ZjcF9kZHBfZG9uZShmc3ApOworCiAJaWYgKG9mZnNldCArIGxlbiA+IGZzcC0+ZGF0YV9sZW4pIHsKLQkJLyoKLQkJICogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0JCSAqLworCQkvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJaWYgKChmcl9mbGFncyhmcCkgJiBGQ1BIRl9DUkNfVU5DSEVDS0VEKSAmJgogCQkgICAgZmNfZnJhbWVfY3JjX2NoZWNrKGZwKSkKIAkJCWdvdG8gY3JjX2VycjsKQEAgLTM4Nyw4ICs0MzcsOCBAQAogCQlmY19mY3BfY29tcGxldGVfbG9ja2VkKGZzcCk7CiB9CiAKLS8qCi0gKiBmY19mY3Bfc2VuZF9kYXRhIC0gIFNlbmQgU0NTSSBkYXRhIHRvIHRhcmdldC4KKy8qKgorICogZmNfZmNwX3NlbmRfZGF0YSgpIC0gIFNlbmQgU0NTSSBkYXRhIHRvIHRhcmdldC4KICAqIEBmc3A6IHB0ciB0byBmY19mY3BfcGt0CiAgKiBAc3A6IHB0ciB0byB0aGlzIHNlcXVlbmNlCiAgKiBAb2Zmc2V0OiBzdGFydGluZyBvZmZzZXQgZm9yIHRoaXMgZGF0YSByZXF1ZXN0CkBAIC00MzgsNyArNDg4LDEzIEBACiAJICogYnVyc3QgbGVuZ3RoICh0X2JsZW4pIHRvIHNlcV9ibGVuLCBvdGhlcndpc2Ugc2V0IHRfYmxlbgogCSAqIHRvIG1heCBGQyBmcmFtZSBwYXlsb2FkIHByZXZpb3VzbHkgc2V0IGluIGZzcC0+bWF4X3BheWxvYWQuCiAJICovCi0JdF9ibGVuID0gbHAtPnNlcV9vZmZsb2FkID8gc2VxX2JsZW4gOiBmc3AtPm1heF9wYXlsb2FkOworCXRfYmxlbiA9IGZzcC0+bWF4X3BheWxvYWQ7CisJaWYgKGxwLT5zZXFfb2ZmbG9hZCkgeworCQl0X2JsZW4gPSBtaW4oc2VxX2JsZW4sIChzaXplX3QpbHAtPmxzb19tYXgpOworCQlGQ19ERUJVR19GQ1AoImZzcD0lcDpsc286Ymxlbj0lenggbHNvX21heD0weCV4IHRfYmxlbj0lenhcbiIsCisJCQkgICBmc3AsIHNlcV9ibGVuLCBscC0+bHNvX21heCwgdF9ibGVuKTsKKwl9CisKIAlXQVJOX09OKHRfYmxlbiA8IEZDX01JTl9NQVhfUEFZTE9BRCk7CiAJaWYgKHRfYmxlbiA+IDUxMikKIAkJdF9ibGVuICY9IH4oNTEyIC0gMSk7CS8qIHJvdW5kIGRvd24gdG8gYmxvY2sgc2l6ZSAqLwpAQCAtNjEwLDggKzY2Niw4IEBACiAJfQogfQogCi0vKgotICogZmNfZmNwX3JlZHVjZV9jYW5fcXVldWUgLSBkcm9wIGNhbl9xdWV1ZQorLyoqCisgKiBmY19mY3BfcmVkdWNlX2Nhbl9xdWV1ZSgpIC0gZHJvcCBjYW5fcXVldWUKICAqIEBscDogbHBvcnQgdG8gZHJvcCBxdWV1ZWluZyBmb3IKICAqCiAgKiBJZiB3ZSBhcmUgZ2V0dGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgdGhlbiB3ZSBtYXkKQEAgLTY0Miw5ICs2OTgsMTEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAotLyoKLSAqIGV4Y2ggbWdyIGNhbGxzIHRoaXMgcm91dGluZSB0byBwcm9jZXNzIHNjc2kKLSAqIGV4Y2hhbmdlcy4KKy8qKgorICogZmNfZmNwX3JlY3YoKSAtIFJldmVpdmUgRkNQIGZyYW1lcworICogQHNlcTogVGhlIHNlcXVlbmNlIHRoZSBmcmFtZSBpcyBvbgorICogQGZwOiBUaGUgRkMgZnJhbWUKKyAqIEBhcmc6IFRoZSByZWxhdGVkIEZDUCBwYWNrZXQKICAqCiAgKiBSZXR1cm4gICA6IE5vbmUKICAqIENvbnRleHQgIDogY2FsbGVkIGZyb20gU29mdCBJUlEgY29udGV4dApAQCAtNzQ1LDYgKzgwMyw5IEBACiAJZnNwLT5zY3NpX2NvbXBfZmxhZ3MgPSBmbGFnczsKIAlleHBlY3RlZF9sZW4gPSBmc3AtPmRhdGFfbGVuOwogCisJLyogaWYgZGRwLCB1cGRhdGUgeGZlciBsZW4gKi8KKwlmY19mY3BfZGRwX2RvbmUoZnNwKTsKKwogCWlmICh1bmxpa2VseSgoZmxhZ3MgJiB+RkNQX0NPTkZfUkVRKSB8fCBmY19ycC0+ZnJfc3RhdHVzKSkgewogCQlycF9leCA9ICh2b2lkICopKGZjX3JwICsgMSk7CiAJCWlmIChmbGFncyAmIChGQ1BfUlNQX0xFTl9WQUwgfCBGQ1BfU05TX0xFTl9WQUwpKSB7CkBAIC04MzIsNyArODkzLDcgQEAKIH0KIAogLyoqCi0gKiBmY19mY3BfY29tcGxldGVfbG9ja2VkIC0gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBhIGZjcCBwYWNrZXQKKyAqIGZjX2ZjcF9jb21wbGV0ZV9sb2NrZWQoKSAtIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgYSBmY3AgcGFja2V0CiAgKiBAZnNwOglmY3AgcGFja2V0CiAgKgogICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgaWYgYSB0aW1lciBpcyBwZW5kaW5nLiBUaGUgcGFja2V0IGxvY2sgbXVzdCBiZQpAQCAtODYwLDcgKzkyMSw3IEBACiAJCSAgICAoIShmc3AtPnNjc2lfY29tcF9mbGFncyAmIEZDUF9SRVNJRF9VTkRFUikgfHwKIAkJICAgICBmc3AtPnhmZXJfbGVuIDwgZnNwLT5kYXRhX2xlbiAtIGZzcC0+c2NzaV9yZXNpZCkpIHsKIAkJCWZzcC0+c3RhdHVzX2NvZGUgPSBGQ19EQVRBX1VORFJVTjsKLQkJCWZzcC0+aW9fc3RhdHVzID0gU1VHR0VTVF9SRVRSWSA8PCAyNDsKKwkJCWZzcC0+aW9fc3RhdHVzID0gMDsKIAkJfQogCX0KIApAQCAtOTAwLDcgKzk2MSw3IEBACiB9CiAKIC8qKgotICogZmNfZmNwX2NsZWFudXBfZWFjaF9jbWQgLSBydW4gZm4gb24gZWFjaCBhY3RpdmUgY29tbWFuZAorICogZmNfZmNwX2NsZWFudXBfZWFjaF9jbWQoKSAtIENsZWFudXAgYWN0aXZlIGNvbW1hZHMKICAqIEBscDoJCWxvZ2ljYWwgcG9ydAogICogQGlkOgkJdGFyZ2V0IGlkCiAgKiBAbHVuOglsdW4KQEAgLTk1Miw3ICsxMDEzLDcgQEAKIH0KIAogLyoqCi0gKiBmY19mY3BfcGt0X3NlbmQgLSBzZW5kIGEgZmNwIHBhY2tldCB0byB0aGUgbG93ZXIgbGV2ZWwuCisgKiBmY19mY3BfcGt0X3NlbmQoKSAtIHNlbmQgYSBmY3AgcGFja2V0IHRvIHRoZSBsb3dlciBsZXZlbC4KICAqIEBscDoJCWZjIGxwb3J0CiAgKiBAZnNwOglmYyBwYWNrZXQuCiAgKgpAQCAtMTAwNyw3ICsxMDY4LDcgQEAKIAl9CiAKIAltZW1jcHkoZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIGxlbiksICZmc3AtPmNkYl9jbWQsIGxlbik7Ci0JZnJfY21kKGZwKSA9IGZzcC0+Y21kOworCWZyX2ZzcChmcCkgPSBmc3A7CiAJcnBvcnQgPSBmc3AtPnJwb3J0OwogCWZzcC0+bWF4X3BheWxvYWQgPSBycG9ydC0+bWF4ZnJhbWVfc2l6ZTsKIAlycCA9IHJwb3J0LT5kZF9kYXRhOwpAQCAtMTI2OCw3ICsxMzI5LDcgQEAKIAlycCA9IHJwb3J0LT5kZF9kYXRhOwogCWlmICghZnNwLT5zZXFfcHRyIHx8IHJwLT5ycF9zdGF0ZSAhPSBSUE9SVF9TVF9SRUFEWSkgewogCQlmc3AtPnN0YXR1c19jb2RlID0gRkNfSFJEX0VSUk9SOwotCQlmc3AtPmlvX3N0YXR1cyA9IFNVR0dFU1RfUkVUUlkgPDwgMjQ7CisJCWZzcC0+aW9fc3RhdHVzID0gMDsKIAkJZmNfZmNwX2NvbXBsZXRlX2xvY2tlZChmc3ApOwogCQlyZXR1cm47CiAJfQpAQCAtMTYyMSw3ICsxNjgyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGZjX2ZjcF9scG9ydF9xdWV1ZV9yZWFkeShzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewogCS8qIGxvY2sgPyAqLwotCXJldHVybiAobHAtPnN0YXRlID09IExQT1JUX1NUX1JFQURZKSAmJiAobHAtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCk7CisJcmV0dXJuIChscC0+c3RhdGUgPT0gTFBPUlRfU1RfUkVBRFkpICYmIGxwLT5saW5rX3VwICYmICFscC0+cWZ1bGw7CiB9CiAKIC8qKgpAQCAtMTcyNyw3ICsxNzg4LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfcXVldWVjb21tYW5kKTsKIAogLyoqCi0gKiBmY19pb19jb21wbCAtICBIYW5kbGUgcmVzcG9uc2VzIGZvciBjb21wbGV0ZWQgY29tbWFuZHMKKyAqIGZjX2lvX2NvbXBsKCkgLSAgSGFuZGxlIHJlc3BvbnNlcyBmb3IgY29tcGxldGVkIGNvbW1hbmRzCiAgKiBAZnNwOglzY3NpIHBhY2tldAogICoKICAqIFRyYW5zbGF0ZXMgYSBlcnJvciB0byBhIExpbnV4IFNDU0kgZXJyb3IuCkBAIC0xNzQxLDYgKzE4MDIsOSBAQAogCXN0cnVjdCBmY19scG9ydCAqbHA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIHJlbGVhc2Ugb3V0c3RhbmRpbmcgZGRwIGNvbnRleHQgKi8KKwlmY19mY3BfZGRwX2RvbmUoZnNwKTsKKwogCWZzcC0+c3RhdGUgfD0gRkNfU1JCX0NPTVBMOwogCWlmICghKGZzcC0+c3RhdGUgJiBGQ19TUkJfRkNQX1BST0NFU1NJTkdfVE1PKSkgewogCQlzcGluX3VubG9ja19iaCgmZnNwLT5zY3NpX3BrdF9sb2NrKTsKQEAgLTE4MTAsMTIgKzE4NzQsMTIgQEAKIAkJc2NfY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgRkNfREFUQV9VTkRSVU46Ci0JCWlmIChmc3AtPmNkYl9zdGF0dXMgPT0gMCkgeworCQlpZiAoKGZzcC0+Y2RiX3N0YXR1cyA9PSAwKSAmJiAhKGZzcC0+cmVxX2ZsYWdzICYgRkNfU1JCX1JFQUQpKSB7CiAJCQkvKgogCQkJICogc2NzaSBzdGF0dXMgaXMgZ29vZCBidXQgdHJhbnNwb3J0IGxldmVsCi0JCQkgKiB1bmRlcnJ1bi4gZm9yIHJlYWQgaXQgc2hvdWxkIGJlIGFuIGVycm9yPz8KKwkJCSAqIHVuZGVycnVuLgogCQkJICovCi0JCQlzY19jbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgZnNwLT5jZGJfc3RhdHVzOworCQkJc2NfY21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogc2NzaSBnb3QgdW5kZXJydW4sIHRoaXMgaXMgYW4gZXJyb3IKQEAgLTE4NTcsNyArMTkyMSw3IEBACiB9CiAKIC8qKgotICogZmNfZmNwX2NvbXBsZXRlIC0gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBhIGZjcCBwYWNrZXQKKyAqIGZjX2ZjcF9jb21wbGV0ZSgpIC0gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBhIGZjcCBwYWNrZXQKICAqIEBmc3A6CWZjcCBwYWNrZXQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCBpZiBhIGZzcCB0aW1lciBpcyBwZW5kaW5nLgpAQCAtMTg3NCw5ICsxOTM4LDEwIEBACiBFWFBPUlRfU1lNQk9MKGZjX2ZjcF9jb21wbGV0ZSk7CiAKIC8qKgotICogZmNfZWhfYWJvcnQgLSBBYm9ydCBhIGNvbW1hbmQuLi5mcm9tIHNjc2kgaG9zdCB0ZW1wbGF0ZQorICogZmNfZWhfYWJvcnQoKSAtIEFib3J0IGEgY29tbWFuZAogICogQHNjX2NtZDoJc2NzaSBjb21tYW5kIHRvIGFib3J0CiAgKgorICogRnJvbSBzY3NpIGhvc3QgdGVtcGxhdGUuCiAgKiBzZW5kIEFCVFMgdG8gdGhlIHRhcmdldCBkZXZpY2UgIGFuZCB3YWl0IGZvciB0aGUgcmVzcG9uc2UKICAqIHNjX2NtZCBpcyB0aGUgcG9pbnRlciB0byB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkLgogICovCkBAIC0xODkwLDcgKzE5NTUsNyBAQAogCWxwID0gc2hvc3RfcHJpdihzY19jbWQtPmRldmljZS0+aG9zdCk7CiAJaWYgKGxwLT5zdGF0ZSAhPSBMUE9SVF9TVF9SRUFEWSkKIAkJcmV0dXJuIHJjOwotCWVsc2UgaWYgKCEobHAtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCkpCisJZWxzZSBpZiAoIWxwLT5saW5rX3VwKQogCQlyZXR1cm4gcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShscC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0xOTIwLDcgKzE5ODUsNyBAQAogRVhQT1JUX1NZTUJPTChmY19laF9hYm9ydCk7CiAKIC8qKgotICogZmNfZWhfZGV2aWNlX3Jlc2V0OiBSZXNldCBhIHNpbmdsZSBMVU4KKyAqIGZjX2VoX2RldmljZV9yZXNldCgpIFJlc2V0IGEgc2luZ2xlIExVTgogICogQHNjX2NtZDoJc2NzaSBjb21tYW5kCiAgKgogICogU2V0IGZyb20gc2NzaSBob3N0IHRlbXBsYXRlIHRvIHNlbmQgdG0gY21kIHRvIHRoZSB0YXJnZXQgYW5kIHdhaXQgZm9yIHRoZQpAQCAtMTk3Myw3ICsyMDM4LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfZWhfZGV2aWNlX3Jlc2V0KTsKIAogLyoqCi0gKiBmY19laF9ob3N0X3Jlc2V0IC0gVGhlIHJlc2V0IGZ1bmN0aW9uIHdpbGwgcmVzZXQgdGhlIHBvcnRzIG9uIHRoZSBob3N0LgorICogZmNfZWhfaG9zdF9yZXNldCgpIC0gVGhlIHJlc2V0IGZ1bmN0aW9uIHdpbGwgcmVzZXQgdGhlIHBvcnRzIG9uIHRoZSBob3N0LgogICogQHNjX2NtZDoJc2NzaSBjb21tYW5kCiAgKi8KIGludCBmY19laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjX2NtZCkKQEAgLTE5OTksNyArMjA2NCw3IEBACiBFWFBPUlRfU1lNQk9MKGZjX2VoX2hvc3RfcmVzZXQpOwogCiAvKioKLSAqIGZjX3NsYXZlX2FsbG9jIC0gY29uZmlndXJlIHF1ZXVlIGRlcHRoCisgKiBmY19zbGF2ZV9hbGxvYygpIC0gY29uZmlndXJlIHF1ZXVlIGRlcHRoCiAgKiBAc2RldjoJc2NzaSBkZXZpY2UKICAqCiAgKiBDb25maWd1cmVzIHF1ZXVlIGRlcHRoIGJhc2VkIG9uIGhvc3QncyBjbWRfcGVyX2xlbi4gSWYgbm90IHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwppbmRleCAwYjliZGIxLi43ZWY0NDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcnBvcnRfY2FsbGJhY2sgLSBFdmVudCBoYW5kbGVyIGZvciBycG9ydCBldmVudHMKKyAqIGZjX2xwb3J0X3Jwb3J0X2NhbGxiYWNrKCkgLSBFdmVudCBoYW5kbGVyIGZvciBycG9ydCBldmVudHMKICAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIGlzIHJlY2VpdmluZyB0aGUgZXZlbnQKICAqIEBycG9ydDogVGhlIHJwb3J0IHdoaWNoIHRoZSBldmVudCBoYXMgb2NjdXJlZCBvbgogICogQGV2ZW50OiBUaGUgZXZlbnQgdGhhdCBvY2N1cmVkCkBAIC0xOTUsNyArMTk1LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9zdGF0ZSAtIFJldHVybiBhIHN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSBscG9ydCdzIHN0YXRlCisgKiBmY19scG9ydF9zdGF0ZSgpIC0gUmV0dXJuIGEgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxwb3J0J3Mgc3RhdGUKICAqIEBscG9ydDogVGhlIGxwb3J0IHdob3NlIHN0YXRlIGlzIHRvIGNvbnZlcnRlZCB0byBhIHN0cmluZwogICovCiBzdGF0aWMgY29uc3QgY2hhciAqZmNfbHBvcnRfc3RhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKQEAgLTIwOSw3ICsyMDksNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3B0cF9zZXR1cCAtIENyZWF0ZSBhbiBycG9ydCBmb3IgcG9pbnQtdG8tcG9pbnQgbW9kZQorICogZmNfbHBvcnRfcHRwX3NldHVwKCkgLSBDcmVhdGUgYW4gcnBvcnQgZm9yIHBvaW50LXRvLXBvaW50IG1vZGUKICAqIEBscG9ydDogVGhlIGxwb3J0IHRvIGF0dGFjaCB0aGUgcHRwIHJwb3J0IHRvCiAgKiBAZmlkOiBUaGUgRklEIG9mIHRoZSBwdHAgcnBvcnQKICAqIEByZW1vdGVfd3dwbjogVGhlIFdXUE4gb2YgdGhlIHB0cCBycG9ydApAQCAtMjMyLDcgKzIzMiw3IEBACiAJCWxwb3J0LT5wdHBfcnAgPSBOVUxMOwogCX0KIAotCWxwb3J0LT5wdHBfcnAgPSBmY19ycG9ydF9yb2d1ZV9jcmVhdGUoJmRwKTsKKwlscG9ydC0+cHRwX3JwID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSgmZHApOwogCiAJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKGxwb3J0LT5wdHBfcnApOwogCkBAIC0yNTAsNyArMjUwLDcgQEAKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwID0gc2hvc3RfcHJpdihzaG9zdCk7CiAKLQlpZiAoKGxwLT5saW5rX3N0YXR1cyAmIEZDX0xJTktfVVApID09IEZDX0xJTktfVVApCisJaWYgKGxwLT5saW5rX3VwKQogCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX09OTElORTsKIAllbHNlCiAJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfT0ZGTElORTsKQEAgLTM1MSw3ICszNTEsNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3JlY3Zfcmxpcl9yZXEgLSBIYW5kbGUgcmVjZWl2ZWQgUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlcG9ydC4KKyAqIGZjX2xwb3J0X3JlY3Zfcmxpcl9yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBSZWdpc3RlcmVkIExpbmsgSW5jaWRlbnQgUmVwb3J0LgogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBSTElSCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFJMSVIgZXhjaGFuZ2UKICAqIEBmcDogUkxJUiByZXF1ZXN0IGZyYW1lCkBAIC0zNzAsNyArMzcwLDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X2VjaG9fcmVxIC0gSGFuZGxlIHJlY2VpdmVkIEVDSE8gcmVxdWVzdAorICogZmNfbHBvcnRfcmVjdl9lY2hvX3JlcSgpIC0gSGFuZGxlIHJlY2VpdmVkIEVDSE8gcmVxdWVzdAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBFQ0hPCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIEVDSE8gZXhjaGFuZ2UKICAqIEBmcDogRUNITyByZXF1ZXN0IGZyYW1lCkBAIC00MTIsNyArNDEyLDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X2VjaG9fcmVxIC0gSGFuZGxlIHJlY2VpdmVkIFJlcXVlc3QgTm9kZSBJRCBkYXRhIHJlcXVlc3QKKyAqIGZjX2xwb3J0X3JlY3ZfZWNob19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBSZXF1ZXN0IE5vZGUgSUQgZGF0YSByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCByZWNpZXZpbmcgdGhlIFJOSUQKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUk5JRCBleGNoYW5nZQogICogQGZwOiBSTklEIHJlcXVlc3QgZnJhbWUKQEAgLTQ3OSw3ICs0NzksNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3JlY3ZfYWRpc2NfcmVxIC0gSGFuZGxlIHJlY2VpdmVkIEFkZHJlc3MgRGlzY292ZXJ5IFJlcXVlc3QKKyAqIGZjX2xwb3J0X3JlY3ZfYWRpc2NfcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgQWRkcmVzcyBEaXNjb3ZlcnkgUmVxdWVzdAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBBRElTQwogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBBRElTQyBleGNoYW5nZQogICogQGZwOiBBRElTQyByZXF1ZXN0IGZyYW1lCkBAIC01MjksNyArNTI5LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X2xvZ29fcmVxIC0gSGFuZGxlIHJlY2VpdmVkIGZhYnJpYyBMT0dPIHJlcXVlc3QKKyAqIGZjX2xwb3J0X3JlY3ZfbG9nb19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBmYWJyaWMgTE9HTyByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCByZWNpZXZpbmcgdGhlIExPR08KICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgTE9HTyBleGNoYW5nZQogICogQGZwOiBMT0dPIHJlcXVlc3QgZnJhbWUKQEAgLTU0Niw3ICs1NDYsNyBAQAogfQogCiAvKioKLSAqIGZjX2ZhYnJpY19sb2dpbiAtIFN0YXJ0IHRoZSBscG9ydCBzdGF0ZSBtYWNoaW5lCisgKiBmY19mYWJyaWNfbG9naW4oKSAtIFN0YXJ0IHRoZSBscG9ydCBzdGF0ZSBtYWNoaW5lCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB0aGF0IHNob3VsZCBsb2cgaW50byB0aGUgZmFicmljCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkCkBAIC01NjgsNyArNTY4LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfZmFicmljX2xvZ2luKTsKIAogLyoqCi0gKiBmY19saW5rdXAgLSBIYW5kbGVyIGZvciB0cmFuc3BvcnQgbGlua3VwIGV2ZW50cworICogZmNfbGlua3VwKCkgLSBIYW5kbGVyIGZvciB0cmFuc3BvcnQgbGlua3VwIGV2ZW50cwogICogQGxwb3J0OiBUaGUgbHBvcnQgd2hvc2UgbGluayBpcyB1cAogICovCiB2b2lkIGZjX2xpbmt1cChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQpAQCAtNTc3LDggKzU3Nyw4IEBACiAJCSAgICAgICBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpKTsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JaWYgKChscG9ydC0+bGlua19zdGF0dXMgJiBGQ19MSU5LX1VQKSAhPSBGQ19MSU5LX1VQKSB7Ci0JCWxwb3J0LT5saW5rX3N0YXR1cyB8PSBGQ19MSU5LX1VQOworCWlmICghbHBvcnQtPmxpbmtfdXApIHsKKwkJbHBvcnQtPmxpbmtfdXAgPSAxOwogCiAJCWlmIChscG9ydC0+c3RhdGUgPT0gTFBPUlRfU1RfUkVTRVQpCiAJCQlmY19scG9ydF9lbnRlcl9mbG9naShscG9ydCk7CkBAIC01ODgsNyArNTg4LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfbGlua3VwKTsKIAogLyoqCi0gKiBmY19saW5rZG93biAtIEhhbmRsZXIgZm9yIHRyYW5zcG9ydCBsaW5rZG93biBldmVudHMKKyAqIGZjX2xpbmtkb3duKCkgLSBIYW5kbGVyIGZvciB0cmFuc3BvcnQgbGlua2Rvd24gZXZlbnRzCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aG9zZSBsaW5rIGlzIGRvd24KICAqLwogdm9pZCBmY19saW5rZG93bihzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQpAQCAtNTk3LDggKzU5Nyw4IEBACiAJRkNfREVCVUdfTFBPUlQoIkxpbmsgaXMgZG93biBmb3IgcG9ydCAoJTZ4KVxuIiwKIAkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkpOwogCi0JaWYgKChscG9ydC0+bGlua19zdGF0dXMgJiBGQ19MSU5LX1VQKSA9PSBGQ19MSU5LX1VQKSB7Ci0JCWxwb3J0LT5saW5rX3N0YXR1cyAmPSB+KEZDX0xJTktfVVApOworCWlmIChscG9ydC0+bGlua191cCkgeworCQlscG9ydC0+bGlua191cCA9IDA7CiAJCWZjX2xwb3J0X2VudGVyX3Jlc2V0KGxwb3J0KTsKIAkJbHBvcnQtPnR0LmZjcF9jbGVhbnVwKGxwb3J0KTsKIAl9CkBAIC02MDcsNDggKzYwNywyNSBAQAogRVhQT1JUX1NZTUJPTChmY19saW5rZG93bik7CiAKIC8qKgotICogZmNfcGF1c2UgLSBQYXVzZSB0aGUgZmxvdyBvZiBmcmFtZXMKLSAqIEBscG9ydDogVGhlIGxwb3J0IHRvIGJlIHBhdXNlZAotICovCi12b2lkIGZjX3BhdXNlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCi17Ci0JbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQlscG9ydC0+bGlua19zdGF0dXMgfD0gRkNfUEFVU0U7Ci0JbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotfQotRVhQT1JUX1NZTUJPTChmY19wYXVzZSk7Ci0KLS8qKgotICogZmNfdW5wYXVzZSAtIFVucGF1c2UgdGhlIGZsb3cgb2YgZnJhbWVzCi0gKiBAbHBvcnQ6IFRoZSBscG9ydCB0byBiZSB1bnBhdXNlZAotICovCi12b2lkIGZjX3VucGF1c2Uoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKLXsKLQltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCWxwb3J0LT5saW5rX3N0YXR1cyAmPSB+KEZDX1BBVVNFKTsKLQltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGZjX3VucGF1c2UpOwotCi0vKioKLSAqIGZjX2ZhYnJpY19sb2dvZmYgLSBMb2dvdXQgb2YgdGhlIGZhYnJpYworICogZmNfZmFicmljX2xvZ29mZigpIC0gTG9nb3V0IG9mIHRoZSBmYWJyaWMKICAqIEBscG9ydDoJICAgICAgZmNfbHBvcnQgcG9pbnRlciB0byBsb2dvZmYgdGhlIGZhYnJpYwogICoKICAqIFJldHVybiB2YWx1ZToKICAqCTAgZm9yIHN1Y2Nlc3MsIC0xIGZvciBmYWlsdXJlCi0gKiovCisgKi8KIGludCBmY19mYWJyaWNfbG9nb2ZmKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CiAJbHBvcnQtPnR0LmRpc2Nfc3RvcF9maW5hbChscG9ydCk7CiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAlmY19scG9ydF9lbnRlcl9sb2dvKGxwb3J0KTsKIAltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZscG9ydC0+cmV0cnlfd29yayk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2ZhYnJpY19sb2dvZmYpOwogCiAvKioKLSAqIGZjX2xwb3J0X2Rlc3Ryb3kgLSB1bnJlZ2lzdGVyIGEgZmNfbHBvcnQKKyAqIGZjX2xwb3J0X2Rlc3Ryb3koKSAtIHVucmVnaXN0ZXIgYSBmY19scG9ydAogICogQGxwb3J0OgkgICAgICBmY19scG9ydCBwb2ludGVyIHRvIHVucmVnaXN0ZXIKICAqCiAgKiBSZXR1cm4gdmFsdWU6CkBAIC02NTgsMjYgKzYzNSwyNSBAQAogICogY2xlYW4tdXAgYWxsIHRoZSBhbGxvY2F0ZWQgbWVtb3J5CiAgKiBhbmQgZnJlZSB1cCBvdGhlciBzeXN0ZW0gcmVzb3VyY2VzLgogICoKLSAqKi8KKyAqLwogaW50IGZjX2xwb3J0X2Rlc3Ryb3koc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKIAlscG9ydC0+dHQuZnJhbWVfc2VuZCA9IGZjX2ZyYW1lX2Ryb3A7CiAJbHBvcnQtPnR0LmZjcF9hYm9ydF9pbyhscG9ydCk7Ci0JbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LT5lbXAsIDAsIDApOworCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2xwb3J0X2Rlc3Ryb3kpOwogCiAvKioKLSAqIGZjX3NldF9tZnMgLSBzZXRzIHVwIHRoZSBtZnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZjX2xwb3J0CisgKiBmY19zZXRfbWZzKCkgLSBzZXRzIHVwIHRoZSBtZnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZjX2xwb3J0CiAgKiBAbHBvcnQ6IGZjX2xwb3J0IHBvaW50ZXIgdG8gdW5yZWdpc3RlcgogICogQG1mczogdGhlIG5ldyBtZnMgZm9yIGZjX2xwb3J0CiAgKgogICogU2V0IG1mcyBmb3IgdGhlIGdpdmVuIGZjX2xwb3J0IHRvIHRoZSBuZXcgbWZzLgogICoKICAqIFJldHVybjogMCBmb3Igc3VjY2VzcwotICoKLSAqKi8KKyAqLwogaW50IGZjX3NldF9tZnMoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgdTMyIG1mcykKIHsKIAl1bnNpZ25lZCBpbnQgb2xkX21mczsKQEAgLTcwNiw3ICs2ODIsNyBAQAogRVhQT1JUX1NZTUJPTChmY19zZXRfbWZzKTsKIAogLyoqCi0gKiBmY19scG9ydF9kaXNjX2NhbGxiYWNrIC0gQ2FsbGJhY2sgZm9yIGRpc2NvdmVyeSBldmVudHMKKyAqIGZjX2xwb3J0X2Rpc2NfY2FsbGJhY2soKSAtIENhbGxiYWNrIGZvciBkaXNjb3ZlcnkgZXZlbnRzCiAgKiBAbHBvcnQ6IEZDIGxvY2FsIHBvcnQKICAqIEBldmVudDogVGhlIGRpc2NvdmVyeSBldmVudAogICovCkBAIC03MzEsNyArNzA3LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9yZWFkeSAtIEVudGVyIHRoZSByZWFkeSBzdGF0ZSBhbmQgc3RhcnQgZGlzY292ZXJ5CisgKiBmY19ycG9ydF9lbnRlcl9yZWFkeSgpIC0gRW50ZXIgdGhlIHJlYWR5IHN0YXRlIGFuZCBzdGFydCBkaXNjb3ZlcnkKICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHRoYXQgaXMgcmVhZHkKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTc0OCw3ICs3MjQsNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3JlY3ZfZmxvZ2lfcmVxIC0gUmVjZWl2ZSBhIEZMT0dJIHJlcXVlc3QKKyAqIGZjX2xwb3J0X3JlY3ZfZmxvZ2lfcmVxKCkgLSBSZWNlaXZlIGEgRkxPR0kgcmVxdWVzdAogICogQHNwX2luOiBUaGUgc2VxdWVuY2UgdGhlIEZMT0dJIGlzIG9uCiAgKiBAcnhfZnA6IFRoZSBmcmFtZSB0aGUgRkxPR0kgaXMgaW4KICAqIEBscG9ydDogVGhlIGxwb3J0IHRoYXQgcmVjaWV2ZWQgdGhlIHJlcXVlc3QKQEAgLTc4NiwxMCArNzYyLDExIEBACiAJcmVtb3RlX3d3cG4gPSBnZXRfdW5hbGlnbmVkX2JlNjQoJmZscC0+Zmxfd3dwbik7CiAJaWYgKHJlbW90ZV93d3BuID09IGxwb3J0LT53d3BuKSB7CiAJCUZDX0RCRygiRkxPR0kgZnJvbSBwb3J0IHdpdGggc2FtZSBXV1BOICVsbHggIgotCQkgICAgICAgInBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiIsIHJlbW90ZV93d3BuKTsKKwkJICAgICAgICJwb3NzaWJsZSBjb25maWd1cmF0aW9uIGVycm9yXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZW1vdGVfd3dwbik7CiAJCWdvdG8gb3V0OwogCX0KLQlGQ19EQkcoIkZMT0dJIGZyb20gcG9ydCBXV1BOICVsbHhcbiIsIHJlbW90ZV93d3BuKTsKKwlGQ19EQkcoIkZMT0dJIGZyb20gcG9ydCBXV1BOICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVtb3RlX3d3cG4pOwogCiAJLyoKIAkgKiBYWFggd2hhdCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gZm9yIEZJRHM/CkBAIC04MzgsNyArODE1LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZWN2X3JlcSAtIFRoZSBnZW5lcmljIGxwb3J0IHJlcXVlc3QgaGFuZGxlcgorICogZmNfbHBvcnRfcmVjdl9yZXEoKSAtIFRoZSBnZW5lcmljIGxwb3J0IHJlcXVlc3QgaGFuZGxlcgogICogQGxwb3J0OiBUaGUgbHBvcnQgdGhhdCByZWNlaXZlZCB0aGUgcmVxdWVzdAogICogQHNwOiBUaGUgc2VxdWVuY2UgdGhlIHJlcXVlc3QgaXMgb24KICAqIEBmcDogVGhlIGZyYW1lIHRoZSByZXF1ZXN0IGlzIGluCkBAIC05MzQsNyArOTExLDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9yZXNldCAtIFJlc2V0IGFuIGxwb3J0CisgKiBmY19scG9ydF9yZXNldCgpIC0gUmVzZXQgYW4gbHBvcnQKICAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIHNob3VsZCBiZSByZXNldAogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUKQEAgLTk0Miw2ICs5MTksNyBAQAogICovCiBpbnQgZmNfbHBvcnRfcmVzZXQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxwb3J0LT5yZXRyeV93b3JrKTsKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCWZjX2xwb3J0X2VudGVyX3Jlc2V0KGxwb3J0KTsKIAltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7CkBAIC05NTAsNyArOTI4LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNfbHBvcnRfcmVzZXQpOwogCiAvKioKLSAqIGZjX3Jwb3J0X2VudGVyX3Jlc2V0IC0gUmVzZXQgdGhlIGxvY2FsIHBvcnQKKyAqIGZjX3Jwb3J0X2VudGVyX3Jlc2V0KCkgLSBSZXNldCB0aGUgbG9jYWwgcG9ydAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgdG8gYmUgcmVzZXQKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTk3MywxNiArOTUxLDE2IEBACiAKIAlscG9ydC0+dHQuZGlzY19zdG9wKGxwb3J0KTsKIAotCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydC0+ZW1wLCAwLCAwKTsKKwlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIDApOwogCWZjX2hvc3RfZmFicmljX25hbWUobHBvcnQtPmhvc3QpID0gMDsKIAlmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpID0gMDsKIAotCWlmICgobHBvcnQtPmxpbmtfc3RhdHVzICYgRkNfTElOS19VUCkgPT0gRkNfTElOS19VUCkKKwlpZiAobHBvcnQtPmxpbmtfdXApCiAJCWZjX2xwb3J0X2VudGVyX2Zsb2dpKGxwb3J0KTsKIH0KIAogLyoqCi0gKiBmY19scG9ydF9lcnJvciAtIEhhbmRsZXIgZm9yIGFueSBlcnJvcnMKKyAqIGZjX2xwb3J0X2Vycm9yKCkgLSBIYW5kbGVyIGZvciBhbnkgZXJyb3JzCiAgKiBAbHBvcnQ6IFRoZSBmY19scG9ydCBvYmplY3QKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqCkBAIC0xMDI5LDggKzEwMDcsOCBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3JmdF9pZF9yZXNwIC0gSGFuZGxlIHJlc3BvbnNlIHRvIFJlZ2lzdGVyIEZpYnJlCi0gKgkJCSAgQ2hhbm5lbCBUeXBlcyBieSBJRCAoUlBOX0lEKSByZXF1ZXN0CisgKiBmY19scG9ydF9yZnRfaWRfcmVzcCgpIC0gSGFuZGxlIHJlc3BvbnNlIHRvIFJlZ2lzdGVyIEZpYnJlCisgKgkJCSAgICBDaGFubmVsIFR5cGVzIGJ5IElEIChSUE5fSUQpIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBSUE5fSUQgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCkBAIC0xMDUzLDE3ICsxMDMxLDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBSRlRfSUQgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9SRlRfSUQpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFJGVF9JRCByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAljdCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmN0KSk7CiAKQEAgLTEwODEsOCArMTA1OSw4IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcnBuX2lkX3Jlc3AgLSBIYW5kbGUgcmVzcG9uc2UgdG8gUmVnaXN0ZXIgUG9ydAotICoJCQkgIE5hbWUgYnkgSUQgKFJQTl9JRCkgcmVxdWVzdAorICogZmNfbHBvcnRfcnBuX2lkX3Jlc3AoKSAtIEhhbmRsZSByZXNwb25zZSB0byBSZWdpc3RlciBQb3J0CisgKgkJCSAgICBOYW1lIGJ5IElEIChSUE5fSUQpIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBSUE5fSUQgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCkBAIC0xMTA1LDE3ICsxMDgzLDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBSUE5fSUQgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9SUE5fSUQpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFJQTl9JRCByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAljdCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmN0KSk7CiAJaWYgKGZoICYmIGN0ICYmIGZoLT5maF90eXBlID09IEZDX1RZUEVfQ1QgJiYKQEAgLTExMzMsNyArMTExMSw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfc2NyX3Jlc3AgLSBIYW5kbGUgcmVzcG9uc2UgdG8gU3RhdGUgQ2hhbmdlIFJlZ2lzdGVyIChTQ1IpIHJlcXVlc3QKKyAqIGZjX2xwb3J0X3Njcl9yZXNwKCkgLSBIYW5kbGUgcmVzcG9uc2UgdG8gU3RhdGUgQ2hhbmdlIFJlZ2lzdGVyIChTQ1IpIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBTQ1IgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBscF9hcmc6IEZpYnJlIENoYW5uZWwgbHBvcnQgcG9ydCBpbnN0YW5jZSB0aGF0IHNlbnQgdGhlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0CkBAIC0xMTU1LDE3ICsxMTMzLDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBTQ1IgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9TQ1IpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFNDUiByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykKIAkJZmNfbHBvcnRfZW50ZXJfcmVhZHkobHBvcnQpOwpAQCAtMTE3OSw3ICsxMTU3LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9lbnRlcl9zY3IgLSBTZW5kIGEgU3RhdGUgQ2hhbmdlIFJlZ2lzdGVyIChTQ1IpIHJlcXVlc3QKKyAqIGZjX2xwb3J0X2VudGVyX3NjcigpIC0gU2VuZCBhIFN0YXRlIENoYW5nZSBSZWdpc3RlciAoU0NSKSByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byByZWdpc3RlciBmb3Igc3RhdGUgY2hhbmdlcwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtMTIwNiw3ICsxMTg0LDcgQEAKIH0KIAogLyoqCi0gKiBmY19scG9ydF9lbnRlcl9yZnRfaWQgLSBSZWdpc3RlciBGQzQtdHlwZXMgd2l0aCB0aGUgbmFtZSBzZXJ2ZXIKKyAqIGZjX2xwb3J0X2VudGVyX3JmdF9pZCgpIC0gUmVnaXN0ZXIgRkM0LXR5cGVzIHdpdGggdGhlIG5hbWUgc2VydmVyCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byByZWdpc3RlcgogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtMTI0OCw3ICsxMjI2LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9yZnRfaWQgLSBSZWdpc3RlciBwb3J0IG5hbWUgd2l0aCB0aGUgbmFtZSBzZXJ2ZXIKKyAqIGZjX3Jwb3J0X2VudGVyX3JmdF9pZCgpIC0gUmVnaXN0ZXIgcG9ydCBuYW1lIHdpdGggdGhlIG5hbWUgc2VydmVyCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byByZWdpc3RlcgogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtMTI4MSw3ICsxMjU5LDcgQEAKIH07CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfZG5zIC0gQ3JlYXRlIGEgcnBvcnQgdG8gdGhlIG5hbWUgc2VydmVyCisgKiBmY19ycG9ydF9lbnRlcl9kbnMoKSAtIENyZWF0ZSBhIHJwb3J0IHRvIHRoZSBuYW1lIHNlcnZlcgogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVxdWVzdGluZyBhIHJwb3J0IGZvciB0aGUgbmFtZSBzZXJ2ZXIKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTEzMDQsNyArMTI4Miw3IEBACiAKIAlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfRE5TKTsKIAotCXJwb3J0ID0gZmNfcnBvcnRfcm9ndWVfY3JlYXRlKCZkcCk7CisJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKCZkcCk7CiAJaWYgKCFycG9ydCkKIAkJZ290byBlcnI7CiAKQEAgLTEzMTgsNyArMTI5Niw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfdGltZW91dCAtIEhhbmRsZXIgZm9yIHRoZSByZXRyeV93b3JrIHRpbWVyLgorICogZmNfbHBvcnRfdGltZW91dCgpIC0gSGFuZGxlciBmb3IgdGhlIHJldHJ5X3dvcmsgdGltZXIuCiAgKiBAd29yazogVGhlIHdvcmsgc3RydWN0IG9mIHRoZSBmY19scG9ydAogICovCiBzdGF0aWMgdm9pZCBmY19scG9ydF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTEzNTksNyArMTMzNyw3IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfbG9nb19yZXNwIC0gSGFuZGxlIHJlc3BvbnNlIHRvIExPR08gcmVxdWVzdAorICogZmNfbHBvcnRfbG9nb19yZXNwKCkgLSBIYW5kbGUgcmVzcG9uc2UgdG8gTE9HTyByZXF1ZXN0CiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gTE9HTyBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQGxwX2FyZzogRmlicmUgQ2hhbm5lbCBscG9ydCBwb3J0IGluc3RhbmNlIHRoYXQgc2VudCB0aGUgTE9HTyByZXF1ZXN0CkBAIC0xMzgxLDE3ICsxMzU5LDE3IEBACiAKIAlGQ19ERUJVR19MUE9SVCgiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlXG4iKTsKIAorCWlmIChJU19FUlIoZnApKSB7CisJCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CisJCWdvdG8gZXJyOworCX0KKwogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfTE9HTykgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgTE9HTyByZXNwb25zZSwgYnV0IGluIHN0YXRlICVzXG4iLAogCQkgICAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykKIAkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOwpAQCAtMTQwNSw3ICsxMzgzLDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9sb2dvIC0gTG9nb3V0IG9mIHRoZSBmYWJyaWMKKyAqIGZjX3Jwb3J0X2VudGVyX2xvZ28oKSAtIExvZ291dCBvZiB0aGUgZmFicmljCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byBiZSBsb2dnZWQgb3V0CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC0xNDM3LDcgKzE0MTUsNyBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X2Zsb2dpX3Jlc3AgLSBIYW5kbGUgcmVzcG9uc2UgdG8gRkxPR0kgcmVxdWVzdAorICogZmNfbHBvcnRfZmxvZ2lfcmVzcCgpIC0gSGFuZGxlIHJlc3BvbnNlIHRvIEZMT0dJIHJlcXVlc3QKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiBGTE9HSSBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQGxwX2FyZzogRmlicmUgQ2hhbm5lbCBscG9ydCBwb3J0IGluc3RhbmNlIHRoYXQgc2VudCB0aGUgRkxPR0kgcmVxdWVzdApAQCAtMTQ2NSwxNyArMTQ0MywxNyBAQAogCiAJRkNfREVCVUdfTFBPUlQoIlJlY2VpdmVkIGEgRkxPR0kgcmVzcG9uc2VcbiIpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9GTE9HSSkgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgRkxPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7Ci0JCWdvdG8gZXJyOwotCX0KLQogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJZGlkID0gbnRvaDI0KGZoLT5maF9kX2lkKTsKIAlpZiAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkgPT0gRUxTX0xTX0FDQyAmJiBkaWQgIT0gMCkgewpAQCAtMTUzMiw3ICsxNTEwLDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9mbG9naSAtIFNlbmQgYSBGTE9HSSByZXF1ZXN0IHRvIHRoZSBmYWJyaWMgbWFuYWdlcgorICogZmNfcnBvcnRfZW50ZXJfZmxvZ2koKSAtIFNlbmQgYSBGTE9HSSByZXF1ZXN0IHRvIHRoZSBmYWJyaWMgbWFuYWdlcgogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgdG8gYmUgbG9nZ2VkIGluIHRvIHRoZSBmYWJyaWMKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKaW5kZXggZTc4MGQ4Yy4uMDQ3MmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKQEAgLTgxLDYgKzgxLDcgQEAKIAkJCQkgICBzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICopOwogc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3Ioc3RydWN0IGZjX3Jwb3J0ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHN0cnVjdCBmY19ycG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiBzdGF0aWMgdm9pZCBmY19ycG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmZjX3Jwb3J0X3N0YXRlX25hbWVzW10gPSB7CkBAIC0xNDUsNyArMTQ2LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9zdGF0ZSAtIHJldHVybiBhIHN0cmluZyBmb3IgdGhlIHN0YXRlIHRoZSBycG9ydCBpcyBpbgorICogZmNfcnBvcnRfc3RhdGUoKSAtIHJldHVybiBhIHN0cmluZyBmb3IgdGhlIHN0YXRlIHRoZSBycG9ydCBpcyBpbgogICogQHJwb3J0OiBUaGUgcnBvcnQgd2hvc2Ugc3RhdGUgd2Ugd2FudCB0byBnZXQgYSBzdHJpbmcgZm9yCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpmY19ycG9ydF9zdGF0ZShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQpAQCAtMTYwLDcgKzE2MSw3IEBACiB9CiAKIC8qKgotICogZmNfc2V0X3Jwb3J0X2xvc3NfdG1vIC0gU2V0IHRoZSByZW1vdGUgcG9ydCBsb3NzIHRpbWVvdXQgaW4gc2Vjb25kcy4KKyAqIGZjX3NldF9ycG9ydF9sb3NzX3RtbygpIC0gU2V0IHRoZSByZW1vdGUgcG9ydCBsb3NzIHRpbWVvdXQgaW4gc2Vjb25kcy4KICAqIEBycG9ydDogUG9pbnRlciB0byBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHN0cnVjdHVyZQogICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwogICovCkBAIC0xNzQsMTIgKzE3NSwxMiBAQAogRVhQT1JUX1NZTUJPTChmY19zZXRfcnBvcnRfbG9zc190bW8pOwogCiAvKioKLSAqIGZjX3Bsb2dpX2dldF9tYXhmcmFtZSAtIEdldCBtYXggcGF5bG9hZCBmcm9tIHRoZSBjb21tb24gc2VydmljZSBwYXJhbWV0ZXJzCisgKiBmY19wbG9naV9nZXRfbWF4ZnJhbWUoKSAtIEdldCBtYXggcGF5bG9hZCBmcm9tIHRoZSBjb21tb24gc2VydmljZSBwYXJhbWV0ZXJzCiAgKiBAZmxwOiBGTE9HSSBwYXlsb2FkIHN0cnVjdHVyZQogICogQG1heHZhbDogdXBwZXIgbGltaXQsIG1heSBiZSBsZXNzIHRoYW4gd2hhdCBpcyBpbiB0aGUgc2VydmljZSBwYXJhbWV0ZXJzCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWZjX3Bsb2dpX2dldF9tYXhmcmFtZShzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpmbHAsIHVuc2lnbmVkIGludCBtYXh2YWwpCitzdGF0aWMgdW5zaWduZWQgaW50IGZjX3Bsb2dpX2dldF9tYXhmcmFtZShzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpmbHAsCisJCQkJCSAgdW5zaWduZWQgaW50IG1heHZhbCkKIHsKIAl1bnNpZ25lZCBpbnQgbWZzOwogCkBAIC0xOTcsNyArMTk4LDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9zdGF0ZV9lbnRlciAtIENoYW5nZSB0aGUgcnBvcnQncyBzdGF0ZQorICogZmNfcnBvcnRfc3RhdGVfZW50ZXIoKSAtIENoYW5nZSB0aGUgcnBvcnQncyBzdGF0ZQogICogQHJwb3J0OiBUaGUgcnBvcnQgd2hvc2Ugc3RhdGUgc2hvdWxkIGNoYW5nZQogICogQG5ldzogVGhlIG5ldyBzdGF0ZSBvZiB0aGUgcnBvcnQKICAqCkBAIC0yMTQsNiArMjE1LDcgQEAKIAogc3RhdGljIHZvaWQgZmNfcnBvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CisJdTMyIHBvcnRfaWQ7CiAJc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2LCBldmVudF93b3JrKTsKIAllbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50OwpAQCAtMjc5LDE0ICsyODEsMTggQEAKIAkJCXJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2sobHBvcnQsIHJwb3J0LCBldmVudCk7CiAJCWlmICh0cmFuc19zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfUk9HVUUpCiAJCQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKLQkJZWxzZQorCQllbHNlIHsKKwkJCXBvcnRfaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7CisJCQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIHBvcnRfaWQpOworCQkJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCBwb3J0X2lkLCAwKTsKKwkJfQogCX0gZWxzZQogCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiB9CiAKIC8qKgotICogZmNfcnBvcnRfbG9naW4gLSBTdGFydCB0aGUgcmVtb3RlIHBvcnQgbG9naW4gc3RhdGUgbWFjaGluZQorICogZmNfcnBvcnRfbG9naW4oKSAtIFN0YXJ0IHRoZSByZW1vdGUgcG9ydCBsb2dpbiBzdGF0ZSBtYWNoaW5lCiAgKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKICAqCiAgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKQEAgLTMwOSw3ICszMTUsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X2xvZ29mZiAtIExvZ29mZiBhbmQgcmVtb3ZlIGFuIHJwb3J0CisgKiBmY19ycG9ydF9sb2dvZmYoKSAtIExvZ29mZiBhbmQgcmVtb3ZlIGFuIHJwb3J0CiAgKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gYmUgcmVtb3ZlZAogICoKICAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sgaGVsZC4gVGhpcwpAQCAtMzQ3LDcgKzM1Myw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcmVhZHkgLSBUaGUgcnBvcnQgaXMgcmVhZHkKKyAqIGZjX3Jwb3J0X2VudGVyX3JlYWR5KCkgLSBUaGUgcnBvcnQgaXMgcmVhZHkKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGlzIHJlYWR5CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC0zNjYsNyArMzcyLDcgQEAKIH0KIAogLyoqCi0gKiBmY19ycG9ydF90aW1lb3V0IC0gSGFuZGxlciBmb3IgdGhlIHJldHJ5X3dvcmsgdGltZXIuCisgKiBmY19ycG9ydF90aW1lb3V0KCkgLSBIYW5kbGVyIGZvciB0aGUgcmV0cnlfd29yayB0aW1lci4KICAqIEB3b3JrOiBUaGUgd29yayBzdHJ1Y3Qgb2YgdGhlIGZjX3Jwb3J0X2xpYmZjX3ByaXYKICAqCiAgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKQEAgLTQwNSw1OSArNDExLDc1IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZXJyb3IgLSBIYW5kbGVyIGZvciBhbnkgZXJyb3JzCisgKiBmY19ycG9ydF9lcnJvcigpIC0gRXJyb3IgaGFuZGxlciwgY2FsbGVkIG9uY2UgcmV0cmllcyBoYXZlIGJlZW4gZXhoYXVzdGVkCiAgKiBAcnBvcnQ6IFRoZSBmY19ycG9ydCBvYmplY3QKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqCi0gKiBJZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSBhIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZQotICogdGhlbiB3YWl0IGZvciBoYWxmIGEgc2Vjb25kIGFuZCByZXRyeSwgb3RoZXJ3aXNlIHJldHJ5Ci0gKiBpbW1lZGlhdGVseS4KLSAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlCiAgKiBjYWxsaW5nIHRoaXMgcm91dGluZQogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcihzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCiAJRkNfREVCVUdfUlBPUlQoIkVycm9yICVsZCBpbiBzdGF0ZSAlcywgcmV0cmllcyAlZFxuIiwKIAkJICAgICAgIFBUUl9FUlIoZnApLCBmY19ycG9ydF9zdGF0ZShycG9ydCksIHJkYXRhLT5yZXRyaWVzKTsKIAotCWlmICghZnAgfHwgUFRSX0VSUihmcCkgPT0gLUZDX0VYX1RJTUVPVVQpIHsKLQkJLyoKLQkJICogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwgb3IgdGhlIGV4Y2hhbmdlIHRpbWVkIG91dC4KLQkJICogIFJldHJ5IGFmdGVyIGRlbGF5Ci0JCSAqLwotCQlpZiAocmRhdGEtPnJldHJpZXMgPCByZGF0YS0+bG9jYWxfcG9ydC0+bWF4X3JldHJ5X2NvdW50KSB7Ci0JCQlyZGF0YS0+cmV0cmllcysrOwotCQkJaWYgKCFmcCkKLQkJCQlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQkJCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZGF0YS0+cmV0cnlfd29yaywgZGVsYXkpOwotCQl9IGVsc2UgewotCQkJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKLQkJCWNhc2UgUlBPUlRfU1RfUExPR0k6Ci0JCQljYXNlIFJQT1JUX1NUX1BSTEk6Ci0JCQljYXNlIFJQT1JUX1NUX0xPR086Ci0JCQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfRkFJTEVEOwotCQkJCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsCi0JCQkJCSAgICZyZGF0YS0+ZXZlbnRfd29yayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJQT1JUX1NUX1JUVjoKLQkJCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJQT1JUX1NUX05PTkU6Ci0JCQljYXNlIFJQT1JUX1NUX1JFQURZOgotCQkJY2FzZSBSUE9SVF9TVF9JTklUOgotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKKwljYXNlIFJQT1JUX1NUX1BMT0dJOgorCWNhc2UgUlBPUlRfU1RfUFJMSToKKwljYXNlIFJQT1JUX1NUX0xPR086CisJCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX0ZBSUxFRDsKKwkJcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwKKwkJCSAgICZyZGF0YS0+ZXZlbnRfd29yayk7CisJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfUlRWOgorCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7CisJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfTk9ORToKKwljYXNlIFJQT1JUX1NUX1JFQURZOgorCWNhc2UgUlBPUlRfU1RfSU5JVDoKKwkJYnJlYWs7CiAJfQogfQogCiAvKioKLSAqIGZjX3Jwb3J0X3Bsb2dpX3JlY3ZfcmVzcCAtIEhhbmRsZSBpbmNvbWluZyBFTFMgUExPR0kgcmVzcG9uc2UKKyAqIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KCkgLSBFcnJvciBoYW5kbGVyIHdoZW4gcmV0cmllcyBhcmUgZGVzaXJlZAorICogQHJwb3J0OiBUaGUgZmNfcnBvcnQgb2JqZWN0CisgKiBAZnA6IFRoZSBmcmFtZSBwb2ludGVyCisgKgorICogSWYgdGhlIGVycm9yIHdhcyBhbiBleGNoYW5nZSB0aW1lb3V0IHJldHJ5IGltbWVkaWF0ZWx5LAorICogb3RoZXJ3aXNlIHdhaXQgZm9yIEVfRF9UT1YuCisgKgorICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZQorICogY2FsbGluZyB0aGlzIHJvdXRpbmUKKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3JfcmV0cnkoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5ID0gRkNfREVGX0VfRF9UT1Y7CisKKwkvKiBtYWtlIHN1cmUgdGhpcyBpc24ndCBhbiBGQ19FWF9DTE9TRUQgZXJyb3IsIG5ldmVyIHJldHJ5IHRob3NlICovCisJaWYgKFBUUl9FUlIoZnApID09IC1GQ19FWF9DTE9TRUQpCisJCXJldHVybiBmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCisJaWYgKHJkYXRhLT5yZXRyaWVzIDwgcmRhdGEtPmxvY2FsX3BvcnQtPm1heF9yZXRyeV9jb3VudCkgeworCQlGQ19ERUJVR19SUE9SVCgiRXJyb3IgJWxkIGluIHN0YXRlICVzLCByZXRyeWluZ1xuIiwKKwkJCSAgICAgICBQVFJfRVJSKGZwKSwgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwkJcmRhdGEtPnJldHJpZXMrKzsKKwkJLyogbm8gYWRkaXRpb25hbCBkZWxheSBvbiBleGNoYW5nZSB0aW1lb3V0cyAqLworCQlpZiAoUFRSX0VSUihmcCkgPT0gLUZDX0VYX1RJTUVPVVQpCisJCQlkZWxheSA9IDA7CisJCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkYXRhLT5yZXRyeV93b3JrLCBkZWxheSk7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm4gZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKK30KKworLyoqCisgKiBmY19ycG9ydF9wbG9naV9yZWN2X3Jlc3AoKSAtIEhhbmRsZSBpbmNvbWluZyBFTFMgUExPR0kgcmVzcG9uc2UKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUExPR0kgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBycF9hcmc6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKQEAgLTQ4MywxNyArNTA1LDE3IEBACiAJRkNfREVCVUdfUlBPUlQoIlJlY2VpdmVkIGEgUExPR0kgcmVzcG9uc2UgZnJvbSBwb3J0ICglNngpXG4iLAogCQkgICAgICAgcnBvcnQtPnBvcnRfaWQpOwogCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCiAJaWYgKHJkYXRhLT5ycF9zdGF0ZSAhPSBSUE9SVF9TVF9QTE9HSSkgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgUExPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7Ci0JCWdvdG8gZXJyOwotCX0KLQogCW9wID0gZmNfZnJhbWVfcGF5bG9hZF9vcChmcCk7CiAJaWYgKG9wID09IEVMU19MU19BQ0MgJiYKIAkgICAgKHBscCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKnBscCkpKSAhPSBOVUxMKSB7CkBAIC01MjIsNyArNTQ0LDcgQEAKIAkJZWxzZQogCQkJZmNfcnBvcnRfZW50ZXJfcHJsaShycG9ydCk7CiAJfSBlbHNlCi0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAKIG91dDoKIAlmY19mcmFtZV9mcmVlKGZwKTsKQEAgLTUzMiw3ICs1NTQsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X2VudGVyX3Bsb2dpIC0gU2VuZCBQb3J0IExvZ2luIChQTE9HSSkgcmVxdWVzdCB0byBwZWVyCisgKiBmY19ycG9ydF9lbnRlcl9wbG9naSgpIC0gU2VuZCBQb3J0IExvZ2luIChQTE9HSSkgcmVxdWVzdCB0byBwZWVyCiAgKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gc2VuZCBQTE9HSSB0bwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtNTUyLDIwICs1NzQsMjAgQEAKIAlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IEZDX01JTl9NQVhfUEFZTE9BRDsKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2Vsc19mbG9naSkpOwogCWlmICghZnApIHsKLQkJZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKIAkJcmV0dXJuOwogCX0KIAlyZGF0YS0+ZV9kX3RvdiA9IGxwb3J0LT5lX2RfdG92OwogCiAJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUExPR0ksCiAJCQkJICBmY19ycG9ydF9wbG9naV9yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCWVsc2UKIAkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIC8qKgotICogZmNfcnBvcnRfcHJsaV9yZXNwIC0gUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVzcG9uc2UgaGFuZGxlcgorICogZmNfcnBvcnRfcHJsaV9yZXNwKCkgLSBQcm9jZXNzIExvZ2luIChQUkxJKSByZXNwb25zZSBoYW5kbGVyCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBSTEkgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKICAqIEBycF9hcmc6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKQEAgLTU5MiwxNyArNjE0LDE3IEBACiAJRkNfREVCVUdfUlBPUlQoIlJlY2VpdmVkIGEgUFJMSSByZXNwb25zZSBmcm9tIHBvcnQgKCU2eClcbiIsCiAJCSAgICAgICBycG9ydC0+cG9ydF9pZCk7CiAKKwlpZiAoSVNfRVJSKGZwKSkgeworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlnb3RvIGVycjsKKwl9CisKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1BSTEkpIHsKIAkJRkNfREJHKCJSZWNlaXZlZCBhIFBSTEkgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKIAkJICAgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7Ci0JCWdvdG8gZXJyOwotCX0KLQogCW9wID0gZmNfZnJhbWVfcGF5bG9hZF9vcChmcCk7CiAJaWYgKG9wID09IEVMU19MU19BQ0MpIHsKIAkJcHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpwcCkpOwpAQCAtNjM1LDcgKzY1Nyw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfbG9nb19yZXNwIC0gTG9nb3V0IChMT0dPKSByZXNwb25zZSBoYW5kbGVyCisgKiBmY19ycG9ydF9sb2dvX3Jlc3AoKSAtIExvZ291dCAoTE9HTykgcmVzcG9uc2UgaGFuZGxlcgogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBMT0dPIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCiAgKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CkBAIC02NTcsNyArNjc5LDcgQEAKIAkJICAgICAgIHJwb3J0LT5wb3J0X2lkKTsKIAogCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtNjg0LDcgKzcwNiw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcHJsaSAtIFNlbmQgUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVxdWVzdCB0byBwZWVyCisgKiBmY19ycG9ydF9lbnRlcl9wcmxpKCkgLSBTZW5kIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlcXVlc3QgdG8gcGVlcgogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUFJMSSB0bwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtNzA3LDE5ICs3MjksMTkgQEAKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqcHApKTsKIAlpZiAoIWZwKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19QUkxJLAogCQkJCSAgZmNfcnBvcnRfcHJsaV9yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCWVsc2UKIAkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIC8qKgotICogZmNfcnBvcnRfZWxzX3J0dl9yZXNwIC0gUmVxdWVzdCBUaW1lb3V0IFZhbHVlIHJlc3BvbnNlIGhhbmRsZXIKKyAqIGZjX3Jwb3J0X2Vsc19ydHZfcmVzcCgpIC0gUmVxdWVzdCBUaW1lb3V0IFZhbHVlIHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUlRWIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCiAgKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CkBAIC03NDIsMTcgKzc2NCwxNyBAQAogCUZDX0RFQlVHX1JQT1JUKCJSZWNlaXZlZCBhIFJUViByZXNwb25zZSBmcm9tIHBvcnQgKCU2eClcbiIsCiAJCSAgICAgICBycG9ydC0+cG9ydF9pZCk7CiAKKwlpZiAoSVNfRVJSKGZwKSkgeworCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlnb3RvIGVycjsKKwl9CisKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1JUVikgewogCQlGQ19EQkcoIlJlY2VpdmVkIGEgUlRWIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgJXNcbiIsCiAJCSAgICAgICBmY19ycG9ydF9zdGF0ZShycG9ydCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoSVNfRVJSKGZwKSkgewotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwogCWlmIChvcCA9PSBFTFNfTFNfQUNDKSB7CiAJCXN0cnVjdCBmY19lbHNfcnR2X2FjYyAqcnR2OwpAQCAtNzg1LDcgKzgwNyw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcnR2IC0gU2VuZCBSZXF1ZXN0IFRpbWVvdXQgVmFsdWUgKFJUVikgcmVxdWVzdCB0byBwZWVyCisgKiBmY19ycG9ydF9lbnRlcl9ydHYoKSAtIFNlbmQgUmVxdWVzdCBUaW1lb3V0IFZhbHVlIChSVFYpIHJlcXVlc3QgdG8gcGVlcgogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUlRWIHRvCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC04MDQsMTkgKzgyNiwxOSBAQAogCiAJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfcnR2KSk7CiAJaWYgKCFmcCkgewotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUlRWLAogCQkJCSAgICAgZmNfcnBvcnRfcnR2X3Jlc3AsIHJwb3J0LCBscG9ydC0+ZV9kX3RvdikpCi0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJZWxzZQogCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKIH0KIAogLyoqCi0gKiBmY19ycG9ydF9lbnRlcl9sb2dvIC0gU2VuZCBMb2dvdXQgKExPR08pIHJlcXVlc3QgdG8gcGVlcgorICogZmNfcnBvcnRfZW50ZXJfbG9nbygpIC0gU2VuZCBMb2dvdXQgKExPR08pIHJlcXVlc3QgdG8gcGVlcgogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgTE9HTyB0bwogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtODM1LDIwICs4NTcsMjAgQEAKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2xvZ28pKTsKIAlpZiAoIWZwKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19MT0dPLAogCQkJCSAgZmNfcnBvcnRfbG9nb19yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOwogCWVsc2UKIAkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIAogLyoqCi0gKiBmY19ycG9ydF9yZWN2X3JlcSAtIFJlY2VpdmUgYSByZXF1ZXN0IGZyb20gYSBycG9ydAorICogZmNfcnBvcnRfcmVjdl9yZXEoKSAtIFJlY2VpdmUgYSByZXF1ZXN0IGZyb20gYSBycG9ydAogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQogICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydApAQCAtOTA5LDcgKzkzMSw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEgLSBIYW5kbGUgaW5jb21pbmcgUG9ydCBMb2dpbiAoUExPR0kpIHJlcXVlc3QKKyAqIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKCkgLSBIYW5kbGUgaW5jb21pbmcgUG9ydCBMb2dpbiAoUExPR0kpIHJlcXVlc3QKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBQTE9HSQogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQogICogQGZwOiBQTE9HSSByZXF1ZXN0IGZyYW1lCkBAIC05NjYsNyArOTg4LDcgQEAKIAlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgewogCWNhc2UgUlBPUlRfU1RfSU5JVDoKIAkJRkNfREVCVUdfUlBPUlQoImluY29taW5nIFBMT0dJIGZyb20gJTZ4IHd3cG4gJWxseCBzdGF0ZSBJTklUICIKLQkJCSAgICAgICAiLSByZWplY3RcbiIsIHNpZCwgd3dwbik7CisJCQkgICAgICAgIi0gcmVqZWN0XG4iLCBzaWQsICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbik7CiAJCXJlamVjdCA9IEVMU19SSlRfVU5TVVA7CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUExPR0k6CkBAIC0xMDMxLDcgKzEwNTMsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEgLSBIYW5kbGUgaW5jb21pbmcgUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVxdWVzdAorICogZmNfcnBvcnRfcmVjdl9wcmxpX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlcXVlc3QKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBQUkxJCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBSTEkgZXhjaGFuZ2UKICAqIEBmcDogUFJMSSByZXF1ZXN0IGZyYW1lCkBAIC0xMTgyLDcgKzEyMDQsNyBAQAogfQogCiAvKioKLSAqIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEgLSBIYW5kbGUgaW5jb21pbmcgUHJvY2VzcyBMb2dvdXQgKFBSTE8pIHJlcXVlc3QKKyAqIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBQcm9jZXNzIExvZ291dCAoUFJMTykgcmVxdWVzdAogICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRoYXQgaW5pdGlhdGVkIFBSTE8KICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUFJMTyBleGNoYW5nZQogICogQGZwOiBQUkxPIHJlcXVlc3QgZnJhbWUKQEAgLTEyMTMsNyArMTIzNSw3IEBACiB9CiAKIC8qKgotICogZmNfcnBvcnRfcmVjdl9sb2dvX3JlcSAtIEhhbmRsZSBpbmNvbWluZyBMb2dvdXQgKExPR08pIHJlcXVlc3QKKyAqIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBMb2dvdXQgKExPR08pIHJlcXVlc3QKICAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBMT0dPCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIExPR08gZXhjaGFuZ2UKICAqIEBmcDogTE9HTyByZXF1ZXN0IGZyYW1lCkBAIC0xMjQ5LDYgKzEyNzEsOSBAQAogCiBpbnQgZmNfcnBvcnRfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogeworCWlmICghbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSkKKwkJbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSA9IGZjX3Jwb3J0X3JvZ3VlX2NyZWF0ZTsKKwogCWlmICghbHBvcnQtPnR0LnJwb3J0X2xvZ2luKQogCQlscG9ydC0+dHQucnBvcnRfbG9naW4gPSBmY19ycG9ydF9sb2dpbjsKIApAQCAtMTI4NSw3ICsxMzEwLDcgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAKLQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQtPmVtcCwgMCwgcnBvcnQtPnBvcnRfaWQpOwotCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydC0+ZW1wLCBycG9ydC0+cG9ydF9pZCwgMCk7CisJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCAwLCBycG9ydC0+cG9ydF9pZCk7CisJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCBycG9ydC0+cG9ydF9pZCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3Jwb3J0X3Rlcm1pbmF0ZV9pbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDgwOWQzMmQuLmRmYWE4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0zOCw2ICszOCwyOCBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaD4KICNpbmNsdWRlIDxzY3NpL2xpYmlzY3NpLmg+CiAKK3N0YXRpYyBpbnQgaXNjc2lfZGJnX2xpYjsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19saWJpc2NzaSwgaXNjc2lfZGJnX2xpYiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2xpYmlzY3NpLCAiVHVybiBvbiBkZWJ1Z2dpbmcgZm9yIGxpYmlzY3NpIG1vZHVsZS4gIgorCQkgIlNldCB0byAxIHRvIHR1cm4gb24sIGFuZCB6ZXJvIHRvIHR1cm4gb2ZmLiBEZWZhdWx0ICIKKwkJICJpcyBvZmYuIik7CisKKyNkZWZpbmUgSVNDU0lfREJHX0NPTk4oX2Nvbm4sIGRiZ19mbXQsIGFyZy4uLikJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChpc2NzaV9kYmdfbGliKQkJCQlcCisJCQlpc2NzaV9jb25uX3ByaW50ayhLRVJOX0lORk8sIF9jb25uLAlcCisJCQkJCSAgICAgIiVzICIgZGJnX2ZtdCwJXAorCQkJCQkgICAgIF9fZnVuY19fLCAjI2FyZyk7CVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBJU0NTSV9EQkdfU0VTU0lPTihfc2Vzc2lvbiwgZGJnX2ZtdCwgYXJnLi4uKQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChpc2NzaV9kYmdfbGliKQkJCQkJXAorCQkJaXNjc2lfc2Vzc2lvbl9wcmludGsoS0VSTl9JTkZPLCBfc2Vzc2lvbiwJXAorCQkJCQkgICAgICIlcyAiIGRiZ19mbXQsCQlcCisJCQkJCSAgICAgX19mdW5jX18sICMjYXJnKTsJCVwKKwl9IHdoaWxlICgwKTsKKwogLyogU2VyaWFsIE51bWJlciBBcml0aG1ldGljLCAzMiBiaXRzLCBsZXNzIHRoYW4sIFJGQzE5ODIgKi8KICNkZWZpbmUgU05BMzJfQ0hFQ0sgMjE0NzQ4MzY0OFVMCiAKQEAgLTU0LDYgKzc2LDE1IEBACiAJCQkgICAgKG4xID4gbjIgJiYgKG4yIC0gbjEgPCBTTkEzMl9DSEVDSykpKTsKIH0KIAoraW5saW5lIHZvaWQgaXNjc2lfY29ubl9xdWV1ZV93b3JrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY29ubi0+c2Vzc2lvbi0+aG9zdDsKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXF1ZXVlX3dvcmsoaWhvc3QtPndvcmtxLCAmY29ubi0+eG1pdHdvcmspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY29ubl9xdWV1ZV93b3JrKTsKKwogdm9pZAogaXNjc2lfdXBkYXRlX2NtZHNuKHN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3QgaXNjc2lfbm9waW4gKmhkcikKIHsKQEAgLTgxLDggKzExMiw3IEBACiAJCWlmICghbGlzdF9lbXB0eSgmc2Vzc2lvbi0+bGVhZGNvbm4tPnhtaXRxdWV1ZSkgfHwKIAkJICAgICFsaXN0X2VtcHR5KCZzZXNzaW9uLT5sZWFkY29ubi0+bWdtdHF1ZXVlKSkgewogCQkJaWYgKCEoc2Vzc2lvbi0+dHQtPmNhcHMgJiBDQVBfREFUQV9QQVRIX09GRkxPQUQpKQotCQkJCXNjc2lfcXVldWVfd29yayhzZXNzaW9uLT5ob3N0LAotCQkJCQkJJnNlc3Npb24tPmxlYWRjb25uLT54bWl0d29yayk7CisJCQkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKHNlc3Npb24tPmxlYWRjb25uKTsKIAkJfQogCX0KIH0KQEAgLTE3NiwxMCArMjA2LDExIEBACiAJZWNkYl9haGRyLT5yZXNlcnZlZCA9IDA7CiAJbWVtY3B5KGVjZGJfYWhkci0+ZWNkYiwgY21kLT5jbW5kICsgSVNDU0lfQ0RCX1NJWkUsIHJsZW4pOwogCi0JZGVidWdfc2NzaSgiaXNjc2lfcHJlcF9lY2RiX2FoczogdmFybGVuX2NkYl9sZW4gJWQgIgotCQkgICAicmxlbiAlZCBwYWRfbGVuICVkIGFoc19sZW5ndGggJWQgaXNjc2lfaGVhZGVyc19zaXplICV1XG4iLAotCQkgICBjbWQtPmNtZF9sZW4sIHJsZW4sIHBhZF9sZW4sIGFoc2xlbmd0aCwgdGFzay0+aGRyX2xlbik7Ci0KKwlJU0NTSV9EQkdfU0VTU0lPTih0YXNrLT5jb25uLT5zZXNzaW9uLAorCQkJICAiaXNjc2lfcHJlcF9lY2RiX2FoczogdmFybGVuX2NkYl9sZW4gJWQgIgorCQkgICAgICAgICAgInJsZW4gJWQgcGFkX2xlbiAlZCBhaHNfbGVuZ3RoICVkIGlzY3NpX2hlYWRlcnNfc2l6ZSAiCisJCSAgICAgICAgICAiJXVcbiIsIGNtZC0+Y21kX2xlbiwgcmxlbiwgcGFkX2xlbiwgYWhzbGVuZ3RoLAorCQkgICAgICAgICAgdGFzay0+aGRyX2xlbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMSwxMCArMjMyLDExIEBACiAJcmxlbl9haGRyLT5yZXNlcnZlZCA9IDA7CiAJcmxlbl9haGRyLT5yZWFkX2xlbmd0aCA9IGNwdV90b19iZTMyKHNjc2lfaW4oc2MpLT5sZW5ndGgpOwogCi0JZGVidWdfc2NzaSgiYmlkaS1pbiBybGVuX2FoZHItPnJlYWRfbGVuZ3RoKCVkKSAiCi0JCSAgICJybGVuX2FoZHItPmFoc2xlbmd0aCglZClcbiIsCi0JCSAgIGJlMzJfdG9fY3B1KHJsZW5fYWhkci0+cmVhZF9sZW5ndGgpLAotCQkgICBiZTE2X3RvX2NwdShybGVuX2FoZHItPmFoc2xlbmd0aCkpOworCUlTQ1NJX0RCR19TRVNTSU9OKHRhc2stPmNvbm4tPnNlc3Npb24sCisJCQkgICJiaWRpLWluIHJsZW5fYWhkci0+cmVhZF9sZW5ndGgoJWQpICIKKwkJICAgICAgICAgICJybGVuX2FoZHItPmFoc2xlbmd0aCglZClcbiIsCisJCSAgICAgICAgICBiZTMyX3RvX2NwdShybGVuX2FoZHItPnJlYWRfbGVuZ3RoKSwKKwkJICAgICAgICAgIGJlMTZfdG9fY3B1KHJsZW5fYWhkci0+YWhzbGVuZ3RoKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNSwxMyArMzY3LDE1IEBACiAJbGlzdF9tb3ZlX3RhaWwoJnRhc2stPnJ1bm5pbmcsICZjb25uLT5ydW5fbGlzdCk7CiAKIAljb25uLT5zY3NpY21kX3BkdXNfY250Kys7Ci0JZGVidWdfc2NzaSgiaXNjc2kgcHJlcCBbJXMgY2lkICVkIHNjICVwIGNkYiAweCV4IGl0dCAweCV4IGxlbiAlZCAiCi0JCSAgICJiaWRpX2xlbiAlZCBjbWRzbiAlZCB3aW4gJWRdXG4iLCBzY3NpX2JpZGlfY21uZChzYykgPwotCQkgICAiYmlkaXJlY3Rpb25hbCIgOiBzYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSA/Ci0JCSAgICJ3cml0ZSIgOiAicmVhZCIsIGNvbm4tPmlkLCBzYywgc2MtPmNtbmRbMF0sIHRhc2stPml0dCwKLQkJICAgc2NzaV9idWZmbGVuKHNjKSwKLQkJICAgc2NzaV9iaWRpX2NtbmQoc2MpID8gc2NzaV9pbihzYyktPmxlbmd0aCA6IDAsCi0JCSAgIHNlc3Npb24tPmNtZHNuLCBzZXNzaW9uLT5tYXhfY21kc24gLSBzZXNzaW9uLT5leHBfY21kc24gKyAxKTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiaXNjc2kgcHJlcCBbJXMgY2lkICVkIHNjICVwIGNkYiAweCV4ICIKKwkJCSAgIml0dCAweCV4IGxlbiAlZCBiaWRpX2xlbiAlZCBjbWRzbiAlZCB3aW4gJWRdXG4iLAorCQkJICBzY3NpX2JpZGlfY21uZChzYykgPyAiYmlkaXJlY3Rpb25hbCIgOgorCQkJICBzYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSA/CisJCQkgICJ3cml0ZSIgOiAicmVhZCIsIGNvbm4tPmlkLCBzYywgc2MtPmNtbmRbMF0sCisJCQkgIHRhc2stPml0dCwgc2NzaV9idWZmbGVuKHNjKSwKKwkJCSAgc2NzaV9iaWRpX2NtbmQoc2MpID8gc2NzaV9pbihzYyktPmxlbmd0aCA6IDAsCisJCQkgIHNlc3Npb24tPmNtZHNuLAorCQkJICBzZXNzaW9uLT5tYXhfY21kc24gLSBzZXNzaW9uLT5leHBfY21kc24gKyAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgzLDkgKzUxNyw5IEBACiAKIAl0YXNrLT5zdGF0ZSA9IElTQ1NJX1RBU0tfUlVOTklORzsKIAlsaXN0X21vdmVfdGFpbCgmdGFzay0+cnVubmluZywgJmNvbm4tPm1nbXRfcnVuX2xpc3QpOwotCWRlYnVnX3Njc2koIm1nbXRwZHUgW29wIDB4JXggaGRyLT5pdHQgMHgleCBkYXRhbGVuICVkXVxuIiwKLQkJICAgaGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSywgaGRyLT5pdHQsCi0JCSAgIHRhc2stPmRhdGFfY291bnQpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJtZ210cGR1IFtvcCAweCV4IGhkci0+aXR0IDB4JXggIgorCQkJICAiZGF0YWxlbiAlZF1cbiIsIGhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0ssCisJCQkgIGhkci0+aXR0LCB0YXNrLT5kYXRhX2NvdW50KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTYwLDcgKzU5NCw3IEBACiAJCQlnb3RvIGZyZWVfdGFzazsKIAogCX0gZWxzZQotCQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogCiAJcmV0dXJuIHRhc2s7CiAKQEAgLTYzNyw4ICs2NzEsOSBAQAogCiAJCW1lbWNweShzYy0+c2Vuc2VfYnVmZmVyLCBkYXRhICsgMiwKIAkJICAgICAgIG1pbl90KHVpbnQxNl90LCBzZW5zZWxlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7Ci0JCWRlYnVnX3Njc2koImNvcGllZCAlZCBieXRlcyBvZiBzZW5zZVxuIiwKLQkJCSAgIG1pbl90KHVpbnQxNl90LCBzZW5zZWxlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CisJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJjb3BpZWQgJWQgYnl0ZXMgb2Ygc2Vuc2VcbiIsCisJCQkJICBtaW5fdCh1aW50MTZfdCwgc2Vuc2VsZW4sCisJCQkJICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKIAl9CiAKIAlpZiAocmhkci0+ZmxhZ3MgJiAoSVNDU0lfRkxBR19DTURfQklESV9VTkRFUkZMT1cgfApAQCAtNjY2LDggKzcwMSw4IEBACiAJCQlzYy0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KSB8IHJoZHItPmNtZF9zdGF0dXM7CiAJfQogb3V0OgotCWRlYnVnX3Njc2koImRvbmUgW3NjICVseCByZXMgJWQgaXR0IDB4JXhdXG4iLAotCQkgICAobG9uZylzYywgc2MtPnJlc3VsdCwgdGFzay0+aXR0KTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiZG9uZSBbc2MgJXAgcmVzICVkIGl0dCAweCV4XVxuIiwKKwkJCSAgc2MsIHNjLT5yZXN1bHQsIHRhc2stPml0dCk7CiAJY29ubi0+c2NzaXJzcF9wZHVzX2NudCsrOwogCiAJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKQEAgLTgzNSw4ICs4NzAsOCBAQAogCWVsc2UKIAkJaXR0ID0gfjBVOwogCi0JZGVidWdfc2NzaSgiW29wIDB4JXggY2lkICVkIGl0dCAweCV4IGxlbiAlZF1cbiIsCi0JCSAgIG9wY29kZSwgY29ubi0+aWQsIGl0dCwgZGF0YWxlbik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgIltvcCAweCV4IGNpZCAlZCBpdHQgMHgleCBsZW4gJWRdXG4iLAorCQkJICBvcGNvZGUsIGNvbm4tPmlkLCBpdHQsIGRhdGFsZW4pOwogCiAJaWYgKGl0dCA9PSB+MFUpIHsKIAkJaXNjc2lfdXBkYXRlX2NtZHNuKHNlc3Npb24sIChzdHJ1Y3QgaXNjc2lfbm9waW4qKWhkcik7CkBAIC0xMDM0LDEwICsxMDY5LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2l0dF90b19jdGFzayk7CiAKLXZvaWQgaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCit2b2lkIGlzY3NpX3Nlc3Npb25fZmFpbHVyZShzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCSAgIGVudW0gaXNjc2lfZXJyIGVycikKIHsKLQlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA5NSwxMCArMTEyOSwxMCBAQAogCSAqIENoZWNrIGZvciBpU0NTSSB3aW5kb3cgYW5kIHRha2UgY2FyZSBvZiBDbWRTTiB3cmFwLWFyb3VuZAogCSAqLwogCWlmICghaXNjc2lfc25hX2x0ZShzZXNzaW9uLT5xdWV1ZWRfY21kc24sIHNlc3Npb24tPm1heF9jbWRzbikpIHsKLQkJZGVidWdfc2NzaSgiaVNDU0kgQ21kU04gY2xvc2VkLiBFeHBDbWRTbiAldSBNYXhDbWRTTiAldSAiCi0JCQkgICAiQ21kU04gJXUvJXVcbiIsIHNlc3Npb24tPmV4cF9jbWRzbiwKLQkJCSAgIHNlc3Npb24tPm1heF9jbWRzbiwgc2Vzc2lvbi0+Y21kc24sCi0JCQkgICBzZXNzaW9uLT5xdWV1ZWRfY21kc24pOworCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiaVNDU0kgQ21kU04gY2xvc2VkLiBFeHBDbWRTbiAiCisJCQkJICAiJXUgTWF4Q21kU04gJXUgQ21kU04gJXUvJXVcbiIsCisJCQkJICBzZXNzaW9uLT5leHBfY21kc24sIHNlc3Npb24tPm1heF9jbWRzbiwKKwkJCQkgIHNlc3Npb24tPmNtZHNuLCBzZXNzaW9uLT5xdWV1ZWRfY21kc24pOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTMzLDcgKzExNjcsNyBAQAogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKIAogCWxpc3RfbW92ZV90YWlsKCZ0YXNrLT5ydW5uaW5nLCAmY29ubi0+cmVxdWV1ZSk7Ci0Jc2NzaV9xdWV1ZV93b3JrKGNvbm4tPnNlc3Npb24tPmhvc3QsICZjb25uLT54bWl0d29yayk7CisJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcmVxdWV1ZV90YXNrKTsKIApAQCAtMTE1Miw3ICsxMTg2LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJaWYgKHVubGlrZWx5KGNvbm4tPnN1c3BlbmRfdHgpKSB7Ci0JCWRlYnVnX3Njc2koImNvbm4gJWQgVHggc3VzcGVuZGVkIVxuIiwgY29ubi0+aWQpOworCQlJU0NTSV9EQkdfU0VTU0lPTihjb25uLT5zZXNzaW9uLCAiVHggc3VzcGVuZGVkIVxuIik7CiAJCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KQEAgLTEzODYsNyArMTQyMCw3IEBACiAJCQlnb3RvIHByZXBkX3JlamVjdDsKIAkJfQogCX0gZWxzZQotCQlzY3NpX3F1ZXVlX3dvcmsoc2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogCiAJc2Vzc2lvbi0+cXVldWVkX2NtZHNuKys7CiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwpAQCAtMTM5OCw3ICsxNDMyLDggQEAKIAlpc2NzaV9jb21wbGV0ZV9jb21tYW5kKHRhc2spOwogcmVqZWN0OgogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKLQlkZWJ1Z19zY3NpKCJjbWQgMHgleCByZWplY3RlZCAoJWQpXG4iLCBzYy0+Y21uZFswXSwgcmVhc29uKTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiY21kIDB4JXggcmVqZWN0ZWQgKCVkKVxuIiwKKwkJCSAgc2MtPmNtbmRbMF0sIHJlYXNvbik7CiAJc3Bpbl9sb2NrKGhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKIApAQCAtMTQwNyw3ICsxNDQyLDggQEAKIAlpc2NzaV9jb21wbGV0ZV9jb21tYW5kKHRhc2spOwogZmF1bHQ6CiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwotCWRlYnVnX3Njc2koImlzY3NpOiBjbWQgMHgleCBpcyBub3QgcXVldWVkICglZClcbiIsIHNjLT5jbW5kWzBdLCByZWFzb24pOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJpc2NzaTogY21kIDB4JXggaXMgbm90IHF1ZXVlZCAoJWQpXG4iLAorCQkJICBzYy0+Y21uZFswXSwgcmVhc29uKTsKIAlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjKSkKIAkJc2NzaV9zZXRfcmVzaWQoc2MsIHNjc2lfYnVmZmxlbihzYykpOwogCWVsc2UgewpAQCAtMTQyMiw4ICsxNDU4LDYgQEAKIAogaW50IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKIHsKLQlpZiAoZGVwdGggPiBJU0NTSV9NQVhfQ01EX1BFUl9MVU4pCi0JCWRlcHRoID0gSVNDU0lfTUFYX0NNRF9QRVJfTFVOOwogCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7CiAJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogfQpAQCAtMTQ1Nyw4ICsxNDkxLDEwIEBACiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfVEVSTUlOQVRFKSB7CiBmYWlsZWQ6Ci0JCWRlYnVnX3Njc2koImZhaWxpbmcgdGFyZ2V0IHJlc2V0OiBzZXNzaW9uIHRlcm1pbmF0ZWQgIgotCQkJICAgIltDSUQgJWQgYWdlICVkXVxuIiwgY29ubi0+aWQsIHNlc3Npb24tPmFnZSk7CisJCWlzY3NpX3Nlc3Npb25fcHJpbnRrKEtFUk5fSU5GTywgc2Vzc2lvbiwKKwkJCQkgICAgICJmYWlsaW5nIHRhcmdldCByZXNldDogQ291bGQgbm90IGxvZyAiCisJCQkJICAgICAiYmFjayBpbnRvIHRhcmdldCBbYWdlICVkXVxuIiwKKwkJCQkgICAgIHNlc3Npb24tPmFnZSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CiAJCXJldHVybiBGQUlMRUQ7CkBAIC0xNDcyLDcgKzE1MDgsNyBAQAogCSAqLwogCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCi0JZGVidWdfc2NzaSgiaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0IHdhaXQgZm9yIHJlbG9naW5cbiIpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJ3YWl0IGZvciByZWxvZ2luXG4iKTsKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY29ubi0+ZWh3YWl0LAogCQkJCSBzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9URVJNSU5BVEUgfHwKIAkJCQkgc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfTE9HR0VEX0lOIHx8CkBAIC0xNTAxLDcgKzE1MzcsNyBAQAogCXNwaW5fbG9jaygmc2Vzc2lvbi0+bG9jayk7CiAJaWYgKGNvbm4tPnRtZl9zdGF0ZSA9PSBUTUZfUVVFVUVEKSB7CiAJCWNvbm4tPnRtZl9zdGF0ZSA9IFRNRl9USU1FRE9VVDsKLQkJZGVidWdfc2NzaSgidG1mIHRpbWVkb3V0XG4iKTsKKwkJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgInRtZiB0aW1lZG91dFxuIik7CiAJCS8qIHVuYmxvY2sgZWhfYWJvcnQoKSAqLwogCQl3YWtlX3VwKCZjb25uLT5laHdhaXQpOwogCX0KQEAgLTE1MjEsNyArMTU1Nyw3IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0JCWRlYnVnX3Njc2koInRtZiBleGVjIGZhaWx1cmVcbiIpOworCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAidG1mIGV4ZWMgZmFpbHVyZVxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCWNvbm4tPnRtZmNtZF9wZHVzX2NudCsrOwpAQCAtMTUyOSw3ICsxNTY1LDcgQEAKIAljb25uLT50bWZfdGltZXIuZnVuY3Rpb24gPSBpc2NzaV90bWZfdGltZWRvdXQ7CiAJY29ubi0+dG1mX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljb25uOwogCWFkZF90aW1lcigmY29ubi0+dG1mX3RpbWVyKTsKLQlkZWJ1Z19zY3NpKCJ0bWYgc2V0IHRpbWVvdXRcbiIpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJ0bWYgc2V0IHRpbWVvdXRcbiIpOwogCiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwpAQCAtMTU2NywyMiArMTYwMywyNyBAQAogewogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCAqdG1wOwogCi0JaWYgKGNvbm4tPnRhc2sgJiYgKGNvbm4tPnRhc2stPnNjLT5kZXZpY2UtPmx1biA9PSBsdW4gfHwgbHVuID09IC0xKSkKLQkJY29ubi0+dGFzayA9IE5VTEw7CisJaWYgKGNvbm4tPnRhc2spIHsKKwkJaWYgKGx1biA9PSAtMSB8fAorCQkgICAgKGNvbm4tPnRhc2stPnNjICYmIGNvbm4tPnRhc2stPnNjLT5kZXZpY2UtPmx1biA9PSBsdW4pKQorCQkJY29ubi0+dGFzayA9IE5VTEw7CisJfQogCiAJLyogZmx1c2ggcGVuZGluZyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCB0bXAsICZjb25uLT54bWl0cXVldWUsIHJ1bm5pbmcpIHsKIAkJaWYgKGx1biA9PSB0YXNrLT5zYy0+ZGV2aWNlLT5sdW4gfHwgbHVuID09IC0xKSB7Ci0JCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIHBlbmRpbmcgc2MgJXAgaXR0IDB4JXhcbiIsCi0JCQkJICAgdGFzay0+c2MsIHRhc2stPml0dCk7CisJCQlJU0NTSV9EQkdfU0VTU0lPTihjb25uLT5zZXNzaW9uLAorCQkJCQkgICJmYWlsaW5nIHBlbmRpbmcgc2MgJXAgaXR0IDB4JXhcbiIsCisJCQkJCSAgdGFzay0+c2MsIHRhc2stPml0dCk7CiAJCQlmYWlsX2NvbW1hbmQoY29ubiwgdGFzaywgZXJyb3IgPDwgMTYpOwogCQl9CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRhc2ssIHRtcCwgJmNvbm4tPnJlcXVldWUsIHJ1bm5pbmcpIHsKIAkJaWYgKGx1biA9PSB0YXNrLT5zYy0+ZGV2aWNlLT5sdW4gfHwgbHVuID09IC0xKSB7Ci0JCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIHJlcXVldWVkIHNjICVwIGl0dCAweCV4XG4iLAotCQkJCSAgIHRhc2stPnNjLCB0YXNrLT5pdHQpOworCQkJSVNDU0lfREJHX1NFU1NJT04oY29ubi0+c2Vzc2lvbiwKKwkJCQkJICAiZmFpbGluZyByZXF1ZXVlZCBzYyAlcCBpdHQgMHgleFxuIiwKKwkJCQkJICB0YXNrLT5zYywgdGFzay0+aXR0KTsKIAkJCWZhaWxfY29tbWFuZChjb25uLCB0YXNrLCBlcnJvciA8PCAxNik7CiAJCX0KIAl9CkBAIC0xNTkwLDggKzE2MzEsOSBAQAogCS8qIGZhaWwgYWxsIG90aGVyIHJ1bm5pbmcgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGFzaywgdG1wLCAmY29ubi0+cnVuX2xpc3QsIHJ1bm5pbmcpIHsKIAkJaWYgKGx1biA9PSB0YXNrLT5zYy0+ZGV2aWNlLT5sdW4gfHwgbHVuID09IC0xKSB7Ci0JCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIGluIHByb2dyZXNzIHNjICVwIGl0dCAweCV4XG4iLAotCQkJCSAgIHRhc2stPnNjLCB0YXNrLT5pdHQpOworCQkJSVNDU0lfREJHX1NFU1NJT04oY29ubi0+c2Vzc2lvbiwKKwkJCQkJICJmYWlsaW5nIGluIHByb2dyZXNzIHNjICVwIGl0dCAweCV4XG4iLAorCQkJCQkgdGFzay0+c2MsIHRhc2stPml0dCk7CiAJCQlmYWlsX2NvbW1hbmQoY29ubiwgdGFzaywgZXJyb3IgPDwgMTYpOwogCQl9CiAJfQpAQCAtMTU5OSw5ICsxNjQxLDEyIEBACiAKIHZvaWQgaXNjc2lfc3VzcGVuZF90eChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubikKIHsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNvbm4tPnNlc3Npb24tPmhvc3Q7CisJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3RfcHJpdihzaG9zdCk7CisKIAlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCk7CiAJaWYgKCEoY29ubi0+c2Vzc2lvbi0+dHQtPmNhcHMgJiBDQVBfREFUQV9QQVRIX09GRkxPQUQpKQotCQlzY3NpX2ZsdXNoX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCk7CisJCWZsdXNoX3dvcmtxdWV1ZShpaG9zdC0+d29ya3EpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc3VzcGVuZF90eCk7CiAKQEAgLTE2MDksNyArMTY1NCw3IEBACiB7CiAJY2xlYXJfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCk7CiAJaWYgKCEoY29ubi0+c2Vzc2lvbi0+dHQtPmNhcHMgJiBDQVBfREFUQV9QQVRIX09GRkxPQUQpKQotCQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKKwkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwogfQogCiBzdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIGlzY3NpX2VoX2NtZF90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKQEAgLTE2MjIsNyArMTY2Nyw3IEBACiAJY2xzX3Nlc3Npb24gPSBzdGFyZ2V0X3RvX3Nlc3Npb24oc2NzaV90YXJnZXQoc2NtZC0+ZGV2aWNlKSk7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwogCi0JZGVidWdfc2NzaSgic2NzaSBjbWQgJXAgdGltZWRvdXRcbiIsIHNjbWQpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJzY3NpIGNtZCAlcCB0aW1lZG91dFxuIiwgc2NtZCk7CiAKIAlzcGluX2xvY2soJnNlc3Npb24tPmxvY2spOwogCWlmIChzZXNzaW9uLT5zdGF0ZSAhPSBJU0NTSV9TVEFURV9MT0dHRURfSU4pIHsKQEAgLTE2NjIsOCArMTcwNyw4IEBACiAJCXJjID0gQkxLX0VIX1JFU0VUX1RJTUVSOwogZG9uZToKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7Ci0JZGVidWdfc2NzaSgicmV0dXJuICVzXG4iLCByYyA9PSBCTEtfRUhfUkVTRVRfVElNRVIgPwotCQkJCQkidGltZXIgcmVzZXQiIDogIm5oIik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgInJldHVybiAlc1xuIiwgcmMgPT0gQkxLX0VIX1JFU0VUX1RJTUVSID8KKwkJCSAgInRpbWVyIHJlc2V0IiA6ICJuaCIpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTY5NywxMyArMTc0MiwxMyBAQAogCiAJaWYgKHRpbWVfYmVmb3JlX2VxKGxhc3RfcmVjdiArIHJlY3ZfdGltZW91dCwgamlmZmllcykpIHsKIAkJLyogc2VuZCBhIHBpbmcgdG8gdHJ5IHRvIHByb3Zva2Ugc29tZSB0cmFmZmljICovCi0JCWRlYnVnX3Njc2koIlNlbmRpbmcgbm9wb3V0IGFzIHBpbmcgb24gY29ubiAlcFxuIiwgY29ubik7CisJCUlTQ1NJX0RCR19DT05OKGNvbm4sICJTZW5kaW5nIG5vcG91dCBhcyBwaW5nXG4iKTsKIAkJaXNjc2lfc2VuZF9ub3BvdXQoY29ubiwgTlVMTCk7CiAJCW5leHRfdGltZW91dCA9IGNvbm4tPmxhc3RfcGluZyArIChjb25uLT5waW5nX3RpbWVvdXQgKiBIWik7CiAJfSBlbHNlCiAJCW5leHRfdGltZW91dCA9IGxhc3RfcmVjdiArIHJlY3ZfdGltZW91dDsKIAotCWRlYnVnX3Njc2koIlNldHRpbmcgbmV4dCB0bW8gJWx1XG4iLCBuZXh0X3RpbWVvdXQpOworCUlTQ1NJX0RCR19DT05OKGNvbm4sICJTZXR0aW5nIG5leHQgdG1vICVsdVxuIiwgbmV4dF90aW1lb3V0KTsKIAltb2RfdGltZXIoJmNvbm4tPnRyYW5zcG9ydF90aW1lciwgbmV4dF90aW1lb3V0KTsKIGRvbmU6CiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwpAQCAtMTc0MCw3ICsxNzg1LDggQEAKIAkgKiBnb3QgdGhlIGNvbW1hbmQuCiAJICovCiAJaWYgKCFzYy0+U0NwLnB0cikgewotCQlkZWJ1Z19zY3NpKCJzYyBuZXZlciByZWFjaGVkIGlzY3NpIGxheWVyIG9yIGl0IGNvbXBsZXRlZC5cbiIpOworCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAic2MgbmV2ZXIgcmVhY2hlZCBpc2NzaSBsYXllciBvciAiCisJCQkJICAiaXQgY29tcGxldGVkLlxuIik7CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CiAJCXJldHVybiBTVUNDRVNTOwpAQCAtMTc2MiwxMSArMTgwOCwxMyBAQAogCWFnZSA9IHNlc3Npb24tPmFnZTsKIAogCXRhc2sgPSAoc3RydWN0IGlzY3NpX3Rhc2sgKilzYy0+U0NwLnB0cjsKLQlkZWJ1Z19zY3NpKCJhYm9ydGluZyBbc2MgJXAgaXR0IDB4JXhdXG4iLCBzYywgdGFzay0+aXR0KTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiYWJvcnRpbmcgW3NjICVwIGl0dCAweCV4XVxuIiwKKwkJCSAgc2MsIHRhc2stPml0dCk7CiAKIAkvKiB0YXNrIGNvbXBsZXRlZCBiZWZvcmUgdGltZSBvdXQgKi8KIAlpZiAoIXRhc2stPnNjKSB7Ci0JCWRlYnVnX3Njc2koInNjIGNvbXBsZXRlZCB3aGlsZSBhYm9ydCBpbiBwcm9ncmVzc1xuIik7CisJCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJzYyBjb21wbGV0ZWQgd2hpbGUgYWJvcnQgaW4gIgorCQkJCSAgInByb2dyZXNzXG4iKTsKIAkJZ290byBzdWNjZXNzOwogCX0KIApAQCAtMTgxNSw3ICsxODYzLDggQEAKIAkJaWYgKCFzYy0+U0NwLnB0cikgewogCQkJY29ubi0+dG1mX3N0YXRlID0gVE1GX0lOSVRJQUw7CiAJCQkvKiB0YXNrIGNvbXBsZXRlZCBiZWZvcmUgdG1mIGFib3J0IHJlc3BvbnNlICovCi0JCQlkZWJ1Z19zY3NpKCJzYyBjb21wbGV0ZWQgd2hpbGUgYWJvcnQgaW4gcHJvZ3Jlc3NcbiIpOworCQkJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgInNjIGNvbXBsZXRlZCB3aGlsZSBhYm9ydCAiCisJCQkJCSAgImluIHByb2dyZXNzXG4iKTsKIAkJCWdvdG8gc3VjY2VzczsKIAkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTE4MjcsMTUgKzE4NzYsMTYgQEAKIHN1Y2Nlc3M6CiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogc3VjY2Vzc191bmxvY2tlZDoKLQlkZWJ1Z19zY3NpKCJhYm9ydCBzdWNjZXNzIFtzYyAlbHggaXR0IDB4JXhdXG4iLCAobG9uZylzYywgdGFzay0+aXR0KTsKKwlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiYWJvcnQgc3VjY2VzcyBbc2MgJXAgaXR0IDB4JXhdXG4iLAorCQkJICBzYywgdGFzay0+aXR0KTsKIAltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKIAlyZXR1cm4gU1VDQ0VTUzsKIAogZmFpbGVkOgogCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIGZhaWxlZF91bmxvY2tlZDoKLQlkZWJ1Z19zY3NpKCJhYm9ydCBmYWlsZWQgW3NjICVwIGl0dCAweCV4XVxuIiwgc2MsCi0JCSAgICB0YXNrID8gdGFzay0+aXR0IDogMCk7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImFib3J0IGZhaWxlZCBbc2MgJXAgaXR0IDB4JXhdXG4iLCBzYywKKwkJCSAgdGFzayA/IHRhc2stPml0dCA6IDApOwogCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwogCXJldHVybiBGQUlMRUQ7CiB9CkBAIC0xODYyLDcgKzE5MTIsOCBAQAogCWNsc19zZXNzaW9uID0gc3RhcmdldF90b19zZXNzaW9uKHNjc2lfdGFyZ2V0KHNjLT5kZXZpY2UpKTsKIAlzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAKLQlkZWJ1Z19zY3NpKCJMVSBSZXNldCBbc2MgJXAgbHVuICV1XVxuIiwgc2MsIHNjLT5kZXZpY2UtPmx1bik7CisJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgIkxVIFJlc2V0IFtzYyAlcCBsdW4gJXVdXG4iLAorCQkJICBzYywgc2MtPmRldmljZS0+bHVuKTsKIAogCW11dGV4X2xvY2soJnNlc3Npb24tPmVoX211dGV4KTsKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwpAQCAtMTkxNiw4ICsxOTY3LDggQEAKIHVubG9jazoKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiBkb25lOgotCWRlYnVnX3Njc2koImlzY3NpX2VoX2RldmljZV9yZXNldCAlc1xuIiwKLQkJICByYyA9PSBTVUNDRVNTID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpOworCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJkZXYgcmVzZXQgcmVzdWx0ID0gJXNcbiIsCisJCQkgcmMgPT0gU1VDQ0VTUyA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKTsKIAltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xOTQ0LDcgKzE5OTUsNyBAQAogCQludW1fYXJyYXlzKys7CiAJcS0+cG9vbCA9IGt6YWxsb2MobnVtX2FycmF5cyAqIG1heCAqIHNpemVvZih2b2lkKiksIEdGUF9LRVJORUwpOwogCWlmIChxLT5wb29sID09IE5VTEwpCi0JCWdvdG8gZW5vbWVtOworCQlyZXR1cm4gLUVOT01FTTsKIAogCXEtPnF1ZXVlID0ga2ZpZm9faW5pdCgodm9pZCopcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQqKSwKIAkJCSAgICAgIEdGUF9LRVJORUwsIE5VTEwpOwpAQCAtMTk3OSw4ICsyMDMwLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBxLT5tYXg7IGkrKykKIAkJa2ZyZWUocS0+cG9vbFtpXSk7Ci0JaWYgKHEtPnBvb2wpCi0JCWtmcmVlKHEtPnBvb2wpOworCWtmcmVlKHEtPnBvb2wpOwogCWtmcmVlKHEtPnF1ZXVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Bvb2xfZnJlZSk7CkBAIC0xOTk4LDYgKzIwNDgsOSBAQAogCWlmICghc2hvc3QtPmNhbl9xdWV1ZSkKIAkJc2hvc3QtPmNhbl9xdWV1ZSA9IElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYOwogCisJaWYgKCFzaG9zdC0+Y21kX3Blcl9sdW4pCisJCXNob3N0LT5jbWRfcGVyX2x1biA9IElTQ1NJX0RFRl9DTURfUEVSX0xVTjsKKwogCWlmICghc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3RpbWVkX291dCkKIAkJc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3RpbWVkX291dCA9IGlzY3NpX2VoX2NtZF90aW1lZF9vdXQ7CiAJcmV0dXJuIHNjc2lfYWRkX2hvc3Qoc2hvc3QsIHBkZXYpOwpAQCAtMjAwOCwxMyArMjA2MSwxMyBAQAogICogaXNjc2lfaG9zdF9hbGxvYyAtIGFsbG9jYXRlIGEgaG9zdCBhbmQgZHJpdmVyIGRhdGEKICAqIEBzaHQ6IHNjc2kgaG9zdCB0ZW1wbGF0ZQogICogQGRkX2RhdGFfc2l6ZTogZHJpdmVyIGhvc3QgZGF0YSBzaXplCi0gKiBAcWRlcHRoOiBkZWZhdWx0IGRldmljZSBxdWV1ZSBkZXB0aAorICogQHhtaXRfY2FuX3NsZWVwOiBib29sIGluZGljYXRpbmcgaWYgTExEIHdpbGwgcXVldWUgSU8gZnJvbSBhIHdvcmsgcXVldWUKICAqCiAgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgcGFydGlhbCBvZmZsb2FkIGFuZCBzb2Z0d2FyZSBpc2NzaSBkcml2ZXJzLgogICogVG8gYWNjZXNzIHRoZSBkcml2ZXIgc3BlY2lmaWMgbWVtb3J5IHVzZSB0aGUgaXNjc2lfaG9zdF9wcml2KCkgbWFjcm8uCiAgKi8KIHN0cnVjdCBTY3NpX0hvc3QgKmlzY3NpX2hvc3RfYWxsb2Moc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LAotCQkJCSAgIGludCBkZF9kYXRhX3NpemUsIHVpbnQxNl90IHFkZXB0aCkKKwkJCQkgICBpbnQgZGRfZGF0YV9zaXplLCBib29sIHhtaXRfY2FuX3NsZWVwKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdDsKQEAgLTIwMjIsMjggKzIwNzUsMzEgQEAKIAlzaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaG9zdCkgKyBkZF9kYXRhX3NpemUpOwogCWlmICghc2hvc3QpCiAJCXJldHVybiBOVUxMOwotCi0JaWYgKHFkZXB0aCA+IElTQ1NJX01BWF9DTURfUEVSX0xVTiB8fCBxZGVwdGggPCAxKSB7Ci0JCWlmIChxZGVwdGggIT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiaXNjc2k6IGludmFsaWQgcXVldWUgZGVwdGggb2YgJWQuICIKLQkJCSAgICAgICAiUXVldWUgZGVwdGggbXVzdCBiZSBiZXR3ZWVuIDEgYW5kICVkLlxuIiwKLQkJCSAgICAgICBxZGVwdGgsIElTQ1NJX01BWF9DTURfUEVSX0xVTik7Ci0JCXFkZXB0aCA9IElTQ1NJX0RFRl9DTURfUEVSX0xVTjsKLQl9Ci0Jc2hvc3QtPmNtZF9wZXJfbHVuID0gcWRlcHRoOwotCiAJaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCWlmICh4bWl0X2Nhbl9zbGVlcCkgeworCQlzbnByaW50ZihpaG9zdC0+d29ya3FfbmFtZSwgc2l6ZW9mKGlob3N0LT53b3JrcV9uYW1lKSwKKwkJCSJpc2NzaV9xXyVkIiwgc2hvc3QtPmhvc3Rfbm8pOworCQlpaG9zdC0+d29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShpaG9zdC0+d29ya3FfbmFtZSk7CisJCWlmICghaWhvc3QtPndvcmtxKQorCQkJZ290byBmcmVlX2hvc3Q7CisJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmlob3N0LT5sb2NrKTsKIAlpaG9zdC0+c3RhdGUgPSBJU0NTSV9IT1NUX1NFVFVQOwogCWlob3N0LT5udW1fc2Vzc2lvbnMgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlob3N0LT5zZXNzaW9uX3JlbW92YWxfd3EpOwogCXJldHVybiBzaG9zdDsKKworZnJlZV9ob3N0OgorCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaG9zdF9hbGxvYyk7CiAKIHN0YXRpYyB2b2lkIGlzY3NpX25vdGlmeV9ob3N0X3JlbW92ZWQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbikKIHsKLQlpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoY2xzX3Nlc3Npb24sIElTQ1NJX0VSUl9JTlZBTElEX0hPU1QpOworCWlzY3NpX3Nlc3Npb25fZmFpbHVyZShjbHNfc2Vzc2lvbi0+ZGRfZGF0YSwgSVNDU0lfRVJSX0lOVkFMSURfSE9TVCk7CiB9CiAKIC8qKgpAQCAtMjA2OSw2ICsyMTI1LDggQEAKIAkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKIAogCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOworCWlmIChpaG9zdC0+d29ya3EpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKGlob3N0LT53b3JrcSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ob3N0X3JlbW92ZSk7CiAKQEAgLTI0NjcsMTQgKzI1MjUsMTYgQEAKIAogCS8qIGhhbmRsZSBwZW5kaW5nICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRhc2ssIHRtcCwgJmNvbm4tPm1nbXRxdWV1ZSwgcnVubmluZykgewotCQlkZWJ1Z19zY3NpKCJmbHVzaGluZyBwZW5kaW5nIG1nbXQgdGFzayBpdHQgMHgleFxuIiwgdGFzay0+aXR0KTsKKwkJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImZsdXNoaW5nIHBlbmRpbmcgbWdtdCB0YXNrICIKKwkJCQkgICJpdHQgMHgleFxuIiwgdGFzay0+aXR0KTsKIAkJLyogcmVsZWFzZSByZWYgZnJvbSBwcmVwIHRhc2sgKi8KIAkJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKIAl9CiAKIAkvKiBoYW5kbGUgcnVubmluZyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCB0bXAsICZjb25uLT5tZ210X3J1bl9saXN0LCBydW5uaW5nKSB7Ci0JCWRlYnVnX3Njc2koImZsdXNoaW5nIHJ1bm5pbmcgbWdtdCB0YXNrIGl0dCAweCV4XG4iLCB0YXNrLT5pdHQpOworCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiZmx1c2hpbmcgcnVubmluZyBtZ210IHRhc2sgIgorCQkJCSAgIml0dCAweCV4XG4iLCB0YXNrLT5pdHQpOwogCQkvKiByZWxlYXNlIHJlZiBmcm9tIHByZXAgdGFzayAqLwogCQlfX2lzY3NpX3B1dF90YXNrKHRhc2spOwogCX0KQEAgLTI1MjQsNyArMjU4NCw3IEBACiAJCWNvbm4tPmRhdGFkZ3N0X2VuID0gMDsKIAkJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX0lOX1JFQ09WRVJZICYmCiAJCSAgICBvbGRfc3RvcF9zdGFnZSAhPSBTVE9QX0NPTk5fUkVDT1ZFUikgewotCQkJZGVidWdfc2NzaSgiYmxvY2tpbmcgc2Vzc2lvblxuIik7CisJCQlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiYmxvY2tpbmcgc2Vzc2lvblxuIik7CiAJCQlpc2NzaV9ibG9ja19zZXNzaW9uKHNlc3Npb24tPmNsc19zZXNzaW9uKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYwppbmRleCBlNzcwNWQzLi45MWY4Y2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCkBAIC00OSwxMyArNDksMjEgQEAKIAkgICAgICAiQWxleCBBaXptYW4gPGl0bjc4MEB5YWhvby5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImlTQ1NJL1RDUCBkYXRhLXBhdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSN1bmRlZiBERUJVR19UQ1AKIAotI2lmZGVmIERFQlVHX1RDUAotI2RlZmluZSBkZWJ1Z190Y3AoZm10Li4uKSBwcmludGsoS0VSTl9JTkZPICJ0Y3A6ICIgZm10KQotI2Vsc2UKLSNkZWZpbmUgZGVidWdfdGNwKGZtdC4uLikKLSNlbmRpZgorc3RhdGljIGludCBpc2NzaV9kYmdfbGlidGNwOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2xpYmlzY3NpX3RjcCwgaXNjc2lfZGJnX2xpYnRjcCwgaW50LAorCQkgICBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2xpYmlzY3NpX3RjcCwgIlR1cm4gb24gZGVidWdnaW5nIGZvciBsaWJpc2NzaV90Y3AgIgorCQkgIm1vZHVsZS4gU2V0IHRvIDEgdG8gdHVybiBvbiwgYW5kIHplcm8gdG8gdHVybiBvZmYuIERlZmF1bHQgIgorCQkgImlzIG9mZi4iKTsKKworI2RlZmluZSBJU0NTSV9EQkdfVENQKF9jb25uLCBkYmdfZm10LCBhcmcuLi4pCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoaXNjc2lfZGJnX2xpYnRjcCkJCQkJXAorCQkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9JTkZPLCBfY29ubiwJXAorCQkJCQkgICAgICIlcyAiIGRiZ19mbXQsCVwKKwkJCQkJICAgICBfX2Z1bmNfXywgIyNhcmcpOwlcCisJfSB3aGlsZSAoMCk7CiAKIHN0YXRpYyBpbnQgaXNjc2lfdGNwX2hkcl9yZWN2X2RvbmUoc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubiwKIAkJCQkgICBzdHJ1Y3QgaXNjc2lfc2VnbWVudCAqc2VnbWVudCk7CkBAIC0xMjMsMTggKzEzMSwxMyBAQAogCWlmIChwYWdlX2NvdW50KHNnX3BhZ2Uoc2cpKSA+PSAxICYmICFyZWN2KQogCQlyZXR1cm47CiAKLQlkZWJ1Z190Y3AoImlzY3NpX3RjcF9zZWdtZW50X21hcCAlcyAlcFxuIiwgcmVjdiA/ICJyZWN2IiA6ICJ4bWl0IiwKLQkJICBzZWdtZW50KTsKIAlzZWdtZW50LT5zZ19tYXBwZWQgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fU09GVElSUTApOwogCXNlZ21lbnQtPmRhdGEgPSBzZWdtZW50LT5zZ19tYXBwZWQgKyBzZy0+b2Zmc2V0ICsgc2VnbWVudC0+c2dfb2Zmc2V0OwogfQogCiB2b2lkIGlzY3NpX3RjcF9zZWdtZW50X3VubWFwKHN0cnVjdCBpc2NzaV9zZWdtZW50ICpzZWdtZW50KQogewotCWRlYnVnX3RjcCgiaXNjc2lfdGNwX3NlZ21lbnRfdW5tYXAgJXBcbiIsIHNlZ21lbnQpOwotCiAJaWYgKHNlZ21lbnQtPnNnX21hcHBlZCkgewotCQlkZWJ1Z190Y3AoImlzY3NpX3RjcF9zZWdtZW50X3VubWFwIHZhbGlkXG4iKTsKIAkJa3VubWFwX2F0b21pYyhzZWdtZW50LT5zZ19tYXBwZWQsIEtNX1NPRlRJUlEwKTsKIAkJc2VnbWVudC0+c2dfbWFwcGVkID0gTlVMTDsKIAkJc2VnbWVudC0+ZGF0YSA9IE5VTEw7CkBAIC0xODAsOCArMTgzLDkgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAJdW5zaWduZWQgaW50IHBhZDsKIAotCWRlYnVnX3RjcCgiY29waWVkICV1ICV1IHNpemUgJXUgJXNcbiIsIHNlZ21lbnQtPmNvcGllZCwgY29waWVkLAotCQkgIHNlZ21lbnQtPnNpemUsIHJlY3YgPyAicmVjdiIgOiAieG1pdCIpOworCUlTQ1NJX0RCR19UQ1AodGNwX2Nvbm4tPmlzY3NpX2Nvbm4sICJjb3BpZWQgJXUgJXUgc2l6ZSAldSAlc1xuIiwKKwkJICAgICAgc2VnbWVudC0+Y29waWVkLCBjb3BpZWQsIHNlZ21lbnQtPnNpemUsCisJCSAgICAgIHJlY3YgPyAicmVjdiIgOiAieG1pdCIpOwogCWlmIChzZWdtZW50LT5oYXNoICYmIGNvcGllZCkgewogCQkvKgogCQkgKiBJZiBhIHNlZ21lbnQgaXMga21hcGQgd2UgbXVzdCB1bm1hcCBpdCBiZWZvcmUgc2VuZGluZwpAQCAtMjE0LDggKzIxOCw4IEBACiAJaXNjc2lfdGNwX3NlZ21lbnRfdW5tYXAoc2VnbWVudCk7CiAKIAkvKiBEbyB3ZSBoYXZlIG1vcmUgc2NhdHRlcmxpc3QgZW50cmllcz8gKi8KLQlkZWJ1Z190Y3AoInRvdGFsIGNvcGllZCAldSB0b3RhbCBzaXplICV1XG4iLCBzZWdtZW50LT50b3RhbF9jb3BpZWQsCi0JCSAgIHNlZ21lbnQtPnRvdGFsX3NpemUpOworCUlTQ1NJX0RCR19UQ1AodGNwX2Nvbm4tPmlzY3NpX2Nvbm4sICJ0b3RhbCBjb3BpZWQgJXUgdG90YWwgc2l6ZSAldVxuIiwKKwkJICAgICAgc2VnbWVudC0+dG90YWxfY29waWVkLCBzZWdtZW50LT50b3RhbF9zaXplKTsKIAlpZiAoc2VnbWVudC0+dG90YWxfY29waWVkIDwgc2VnbWVudC0+dG90YWxfc2l6ZSkgewogCQkvKiBQcm9jZWVkIHRvIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBzY2F0dGVybGlzdC4gKi8KIAkJaXNjc2lfdGNwX3NlZ21lbnRfaW5pdF9zZyhzZWdtZW50LCBzZ19uZXh0KHNlZ21lbnQtPnNnKSwKQEAgLTIyOSw3ICsyMzMsOCBAQAogCWlmICghKHRjcF9jb25uLT5pc2NzaV9jb25uLT5zZXNzaW9uLT50dC0+Y2FwcyAmIENBUF9QQURESU5HX09GRkxPQUQpKSB7CiAJCXBhZCA9IGlzY3NpX3BhZGRpbmcoc2VnbWVudC0+dG90YWxfY29waWVkKTsKIAkJaWYgKHBhZCAhPSAwKSB7Ci0JCQlkZWJ1Z190Y3AoImNvbnN1bWUgJWQgcGFkIGJ5dGVzXG4iLCBwYWQpOworCQkJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwKKwkJCQkgICAgICAiY29uc3VtZSAlZCBwYWQgYnl0ZXNcbiIsIHBhZCk7CiAJCQlzZWdtZW50LT50b3RhbF9zaXplICs9IHBhZDsKIAkJCXNlZ21lbnQtPnNpemUgPSBwYWQ7CiAJCQlzZWdtZW50LT5kYXRhID0gc2VnbWVudC0+cGFkYnVmOwpAQCAtMjc4LDEzICsyODMsMTMgQEAKIAogCXdoaWxlICghaXNjc2lfdGNwX3NlZ21lbnRfZG9uZSh0Y3BfY29ubiwgc2VnbWVudCwgMSwgY29weSkpIHsKIAkJaWYgKGNvcGllZCA9PSBsZW4pIHsKLQkJCWRlYnVnX3RjcCgiaXNjc2lfdGNwX3NlZ21lbnRfcmVjdiBjb3BpZWQgJWQgYnl0ZXNcbiIsCi0JCQkJICBsZW4pOworCQkJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwKKwkJCQkgICAgICAiY29waWVkICVkIGJ5dGVzXG4iLCBsZW4pOwogCQkJYnJlYWs7CiAJCX0KIAogCQljb3B5ID0gbWluKGxlbiAtIGNvcGllZCwgc2VnbWVudC0+c2l6ZSAtIHNlZ21lbnQtPmNvcGllZCk7Ci0JCWRlYnVnX3RjcCgiaXNjc2lfdGNwX3NlZ21lbnRfcmVjdiBjb3B5aW5nICVkXG4iLCBjb3B5KTsKKwkJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwgImNvcHlpbmcgJWRcbiIsIGNvcHkpOwogCQltZW1jcHkoc2VnbWVudC0+ZGF0YSArIHNlZ21lbnQtPmNvcGllZCwgcHRyICsgY29waWVkLCBjb3B5KTsKIAkJY29waWVkICs9IGNvcHk7CiAJfQpAQCAtMzExLDcgKzMxNiw3IEBACiAKIAlpZiAobWVtY21wKHNlZ21lbnQtPnJlY3ZfZGlnZXN0LCBzZWdtZW50LT5kaWdlc3QsCiAJCSAgIHNlZ21lbnQtPmRpZ2VzdF9sZW4pKSB7Ci0JCWRlYnVnX3Njc2koImRpZ2VzdCBtaXNtYXRjaFxuIik7CisJCUlTQ1NJX0RCR19UQ1AodGNwX2Nvbm4tPmlzY3NpX2Nvbm4sICJkaWdlc3QgbWlzbWF0Y2hcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM1NSwxMiArMzYwLDggQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBpOwogCi0JZGVidWdfc2NzaSgiaXNjc2lfc2VnbWVudF9zZWVrX3NnIG9mZnNldCAldSBzaXplICVsbHVcbiIsCi0JCSAgb2Zmc2V0LCBzaXplKTsKIAlfX2lzY3NpX3NlZ21lbnRfaW5pdChzZWdtZW50LCBzaXplLCBkb25lLCBoYXNoKTsKIAlmb3JfZWFjaF9zZyhzZ19saXN0LCBzZywgc2dfY291bnQsIGkpIHsKLQkJZGVidWdfc2NzaSgic2cgJWQsIGxlbiAldSBvZmZzZXQgJXVcbiIsIGksIHNnLT5sZW5ndGgsCi0JCQkgICBzZy0+b2Zmc2V0KTsKIAkJaWYgKG9mZnNldCA8IHNnLT5sZW5ndGgpIHsKIAkJCWlzY3NpX3RjcF9zZWdtZW50X2luaXRfc2coc2VnbWVudCwgc2csIG9mZnNldCk7CiAJCQlyZXR1cm4gMDsKQEAgLTM4Miw4ICszODMsOSBAQAogICovCiB2b2lkIGlzY3NpX3RjcF9oZHJfcmVjdl9wcmVwKHN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4pCiB7Ci0JZGVidWdfdGNwKCJpc2NzaV90Y3BfaGRyX3JlY3ZfcHJlcCglcCVzKVxuIiwgdGNwX2Nvbm4sCi0JCSAgdGNwX2Nvbm4tPmlzY3NpX2Nvbm4tPmhkcmRnc3RfZW4gPyAiLCBkaWdlc3QgZW5hYmxlZCIgOiAiIik7CisJSVNDU0lfREJHX1RDUCh0Y3BfY29ubi0+aXNjc2lfY29ubiwKKwkJICAgICAgIiglcylcbiIsIHRjcF9jb25uLT5pc2NzaV9jb25uLT5oZHJkZ3N0X2VuID8KKwkJICAgICAgImRpZ2VzdCBlbmFibGVkIiA6ICJkaWdlc3QgZGlzYWJsZWQiKTsKIAlpc2NzaV9zZWdtZW50X2luaXRfbGluZWFyKCZ0Y3BfY29ubi0+aW4uc2VnbWVudCwKIAkJCQl0Y3BfY29ubi0+aW4uaGRyX2J1Ziwgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpLAogCQkJCWlzY3NpX3RjcF9oZHJfcmVjdl9kb25lLCBOVUxMKTsKQEAgLTQ0Niw3ICs0NDgsNyBAQAogCXdoaWxlIChfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKSkgewogCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCiAJCQkgICAgc2l6ZW9mKHZvaWQqKSk7Ci0JCWRlYnVnX3Njc2koImlzY3NpX3RjcF9jbGVhbnVwX3Rhc2sgcGVuZGluZyByMnQgZHJvcHBlZFxuIik7CisJCUlTQ1NJX0RCR19UQ1AodGFzay0+Y29ubiwgInBlbmRpbmcgcjJ0IGRyb3BwZWRcbiIpOwogCX0KIAogCXIydCA9IHRjcF90YXNrLT5yMnQ7CkBAIC00NzYsOCArNDc4LDggQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAodGNwX3Rhc2stPmV4cF9kYXRhc24gIT0gZGF0YXNuKSB7Ci0JCWRlYnVnX3RjcCgiJXM6IHRhc2stPmV4cF9kYXRhc24oJWQpICE9IHJoZHItPmRhdGFzbiglZClcbiIsCi0JCSAgICAgICAgICBfX2Z1bmNfXywgdGNwX3Rhc2stPmV4cF9kYXRhc24sIGRhdGFzbik7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgInRhc2stPmV4cF9kYXRhc24oJWQpICE9IHJoZHItPmRhdGFzbiglZCkiCisJCQkgICAgICAiXG4iLCB0Y3BfdGFzay0+ZXhwX2RhdGFzbiwgZGF0YXNuKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBU047CiAJfQogCkBAIC00ODUsOSArNDg3LDkgQEAKIAogCXRjcF90YXNrLT5kYXRhX29mZnNldCA9IGJlMzJfdG9fY3B1KHJoZHItPm9mZnNldCk7CiAJaWYgKHRjcF90YXNrLT5kYXRhX29mZnNldCArIHRjcF9jb25uLT5pbi5kYXRhbGVuID4gdG90YWxfaW5fbGVuZ3RoKSB7Ci0JCWRlYnVnX3RjcCgiJXM6IGRhdGFfb2Zmc2V0KCVkKSArIGRhdGFfbGVuKCVkKSA+IHRvdGFsX2xlbmd0aF9pbiglZClcbiIsCi0JCSAgICAgICAgICBfX2Z1bmNfXywgdGNwX3Rhc2stPmRhdGFfb2Zmc2V0LAotCQkgICAgICAgICAgdGNwX2Nvbm4tPmluLmRhdGFsZW4sIHRvdGFsX2luX2xlbmd0aCk7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgImRhdGFfb2Zmc2V0KCVkKSArIGRhdGFfbGVuKCVkKSA+ICIKKwkJCSAgICAgICJ0b3RhbF9sZW5ndGhfaW4oJWQpXG4iLCB0Y3BfdGFzay0+ZGF0YV9vZmZzZXQsCisJCQkgICAgICB0Y3BfY29ubi0+aW4uZGF0YWxlbiwgdG90YWxfaW5fbGVuZ3RoKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBX09GRlNFVDsKIAl9CiAKQEAgLTUxOCw4ICs1MjAsOCBAQAogCX0KIAogCWlmICh0Y3BfdGFzay0+ZXhwX2RhdGFzbiAhPSByMnRzbil7Ci0JCWRlYnVnX3RjcCgiJXM6IHRhc2stPmV4cF9kYXRhc24oJWQpICE9IHJoZHItPnIydHNuKCVkKVxuIiwKLQkJICAgICAgICAgIF9fZnVuY19fLCB0Y3BfdGFzay0+ZXhwX2RhdGFzbiwgcjJ0c24pOworCQlJU0NTSV9EQkdfVENQKGNvbm4sICJ0YXNrLT5leHBfZGF0YXNuKCVkKSAhPSByaGRyLT5yMnRzbiglZClcbiIsCisJCQkgICAgICB0Y3BfdGFzay0+ZXhwX2RhdGFzbiwgcjJ0c24pOwogCQlyZXR1cm4gSVNDU0lfRVJSX1IyVFNOOwogCX0KIApAQCAtNTUyLDkgKzU1NCw5IEBACiAJfQogCiAJaWYgKHIydC0+ZGF0YV9sZW5ndGggPiBzZXNzaW9uLT5tYXhfYnVyc3QpCi0JCWRlYnVnX3Njc2koImludmFsaWQgUjJUIHdpdGggZGF0YSBsZW4gJXUgYW5kIG1heCBidXJzdCAldS4iCi0JCQkgICAiQXR0ZW1wdGluZyB0byBleGVjdXRlIHJlcXVlc3QuXG4iLAotCQkJICAgIHIydC0+ZGF0YV9sZW5ndGgsIHNlc3Npb24tPm1heF9idXJzdCk7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgImludmFsaWQgUjJUIHdpdGggZGF0YSBsZW4gJXUgYW5kIG1heCAiCisJCQkgICAgICAiYnVyc3QgJXUuIEF0dGVtcHRpbmcgdG8gZXhlY3V0ZSByZXF1ZXN0LlxuIiwKKwkJCSAgICAgIHIydC0+ZGF0YV9sZW5ndGgsIHNlc3Npb24tPm1heF9idXJzdCk7CiAKIAlyMnQtPmRhdGFfb2Zmc2V0ID0gYmUzMl90b19jcHUocmhkci0+ZGF0YV9vZmZzZXQpOwogCWlmIChyMnQtPmRhdGFfb2Zmc2V0ICsgcjJ0LT5kYXRhX2xlbmd0aCA+IHNjc2lfb3V0KHRhc2stPnNjKS0+bGVuZ3RoKSB7CkBAIC02NDEsOCArNjQzLDggQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWRlYnVnX3RjcCgib3Bjb2RlIDB4JXggYWhzbGVuICVkIGRhdGFsZW4gJWRcbiIsCi0JCSAgb3Bjb2RlLCBhaHNsZW4sIHRjcF9jb25uLT5pbi5kYXRhbGVuKTsKKwlJU0NTSV9EQkdfVENQKGNvbm4sICJvcGNvZGUgMHgleCBhaHNsZW4gJWQgZGF0YWxlbiAlZFxuIiwKKwkJICAgICAgb3Bjb2RlLCBhaHNsZW4sIHRjcF9jb25uLT5pbi5kYXRhbGVuKTsKIAogCXN3aXRjaChvcGNvZGUpIHsKIAljYXNlIElTQ1NJX09QX1NDU0lfREFUQV9JTjoKQEAgLTY3NCwxMCArNjc2LDEwIEBACiAJCQkgICAgIShjb25uLT5zZXNzaW9uLT50dC0+Y2FwcyAmIENBUF9ESUdFU1RfT0ZGTE9BRCkpCiAJCQkJcnhfaGFzaCA9IHRjcF9jb25uLT5yeF9oYXNoOwogCi0JCQlkZWJ1Z190Y3AoImlzY3NpX3RjcF9iZWdpbl9kYXRhX2luKCVwLCBvZmZzZXQ9JWQsICIKLQkJCQkgICJkYXRhbGVuPSVkKVxuIiwgdGNwX2Nvbm4sCi0JCQkJICB0Y3BfdGFzay0+ZGF0YV9vZmZzZXQsCi0JCQkJICB0Y3BfY29ubi0+aW4uZGF0YWxlbik7CisJCQlJU0NTSV9EQkdfVENQKGNvbm4sICJpc2NzaV90Y3BfYmVnaW5fZGF0YV9pbiggIgorCQkJCSAgICAgIm9mZnNldD0lZCwgZGF0YWxlbj0lZClcbiIsCisJCQkJICAgICAgdGNwX3Rhc2stPmRhdGFfb2Zmc2V0LAorCQkJCSAgICAgIHRjcF9jb25uLT5pbi5kYXRhbGVuKTsKIAkJCXJjID0gaXNjc2lfc2VnbWVudF9zZWVrX3NnKCZ0Y3BfY29ubi0+aW4uc2VnbWVudCwKIAkJCQkJCSAgIHNkYi0+dGFibGUuc2dsLAogCQkJCQkJICAgc2RiLT50YWJsZS5uZW50cywKQEAgLTg1NCwxMCArODU2LDEwIEBACiAJdW5zaWduZWQgaW50IGNvbnN1bWVkID0gMDsKIAlpbnQgcmMgPSAwOwogCi0JZGVidWdfdGNwKCJpbiAlZCBieXRlc1xuIiwgc2tiLT5sZW4gLSBvZmZzZXQpOworCUlTQ1NJX0RCR19UQ1AoY29ubiwgImluICVkIGJ5dGVzXG4iLCBza2ItPmxlbiAtIG9mZnNldCk7CiAKIAlpZiAodW5saWtlbHkoY29ubi0+c3VzcGVuZF9yeCkpIHsKLQkJZGVidWdfdGNwKCJjb25uICVkIFJ4IHN1c3BlbmRlZCFcbiIsIGNvbm4tPmlkKTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAiUnggc3VzcGVuZGVkIVxuIik7CiAJCSpzdGF0dXMgPSBJU0NTSV9UQ1BfU1VTUEVOREVEOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04NzQsMTUgKzg3NiwxNiBAQAogCiAJCWF2YWlsID0gc2tiX3NlcV9yZWFkKGNvbnN1bWVkLCAmcHRyLCAmc2VxKTsKIAkJaWYgKGF2YWlsID09IDApIHsKLQkJCWRlYnVnX3RjcCgibm8gbW9yZSBkYXRhIGF2YWlsLiBDb25zdW1lZCAlZFxuIiwKLQkJCQkgIGNvbnN1bWVkKTsKKwkJCUlTQ1NJX0RCR19UQ1AoY29ubiwgIm5vIG1vcmUgZGF0YSBhdmFpbC4gQ29uc3VtZWQgJWRcbiIsCisJCQkJICAgICAgY29uc3VtZWQpOwogCQkJKnN0YXR1cyA9IElTQ1NJX1RDUF9TS0JfRE9ORTsKIAkJCXNrYl9hYm9ydF9zZXFfcmVhZCgmc2VxKTsKIAkJCWdvdG8gc2tiX2RvbmU7CiAJCX0KIAkJQlVHX09OKHNlZ21lbnQtPmNvcGllZCA+PSBzZWdtZW50LT5zaXplKTsKIAotCQlkZWJ1Z190Y3AoInNrYiAlcCBwdHI9JXAgYXZhaWw9JXVcbiIsIHNrYiwgcHRyLCBhdmFpbCk7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgInNrYiAlcCBwdHI9JXAgYXZhaWw9JXVcbiIsIHNrYiwgcHRyLAorCQkJICAgICAgYXZhaWwpOwogCQlyYyA9IGlzY3NpX3RjcF9zZWdtZW50X3JlY3YodGNwX2Nvbm4sIHNlZ21lbnQsIHB0ciwgYXZhaWwpOwogCQlCVUdfT04ocmMgPT0gMCk7CiAJCWNvbnN1bWVkICs9IHJjOwpAQCAtODk1LDExICs4OTgsMTEgQEAKIAogc2VnbWVudF9kb25lOgogCSpzdGF0dXMgPSBJU0NTSV9UQ1BfU0VHTUVOVF9ET05FOwotCWRlYnVnX3RjcCgic2VnbWVudCBkb25lXG4iKTsKKwlJU0NTSV9EQkdfVENQKGNvbm4sICJzZWdtZW50IGRvbmVcbiIpOwogCXJjID0gc2VnbWVudC0+ZG9uZSh0Y3BfY29ubiwgc2VnbWVudCk7CiAJaWYgKHJjICE9IDApIHsKIAkJKnN0YXR1cyA9IElTQ1NJX1RDUF9DT05OX0VSUjsKLQkJZGVidWdfdGNwKCJFcnJvciByZWNlaXZpbmcgUERVLCBlcnJubz0lZFxuIiwgcmMpOworCQlJU0NTSV9EQkdfVENQKGNvbm4sICJFcnJvciByZWNlaXZpbmcgUERVLCBlcnJubz0lZFxuIiwgcmMpOwogCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgcmMpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC05MjksOCArOTMyLDcgQEAKIAkJICogbWdtdCB0YXNrcyBkbyBub3QgaGF2ZSBhIHNjYXR0ZXJsaXN0IHNpbmNlIHRoZXkgY29tZQogCQkgKiBpbiBmcm9tIHRoZSBpc2NzaSBpbnRlcmZhY2UuCiAJCSAqLwotCQlkZWJ1Z19zY3NpKCJtdGFzayBkZXEgW2NpZCAlZCBpdHQgMHgleF1cbiIsIGNvbm4tPmlkLAotCQkJICAgdGFzay0+aXR0KTsKKwkJSVNDU0lfREJHX1RDUChjb25uLCAibXRhc2sgZGVxIFtpdHQgMHgleF1cbiIsIHRhc2stPml0dCk7CiAKIAkJcmV0dXJuIGNvbm4tPnNlc3Npb24tPnR0LT5pbml0X3BkdSh0YXNrLCAwLCB0YXNrLT5kYXRhX2NvdW50KTsKIAl9CkBAIC05MzksOSArOTQxLDggQEAKIAl0Y3BfdGFzay0+ZXhwX2RhdGFzbiA9IDA7CiAKIAkvKiBQcmVwYXJlIFBEVSwgb3B0aW9uYWxseSB3LyBpbW1lZGlhdGUgZGF0YSAqLwotCWRlYnVnX3Njc2koInRhc2sgZGVxIFtjaWQgJWQgaXR0IDB4JXggaW1tICVkIHVuc29sICVkXVxuIiwKLQkJICAgIGNvbm4tPmlkLCB0YXNrLT5pdHQsIHRhc2stPmltbV9jb3VudCwKLQkJICAgIHRhc2stPnVuc29sX3IydC5kYXRhX2xlbmd0aCk7CisJSVNDU0lfREJHX1RDUChjb25uLCAidGFzayBkZXEgW2l0dCAweCV4IGltbSAlZCB1bnNvbCAlZF1cbiIsCisJCSAgICAgIHRhc2stPml0dCwgdGFzay0+aW1tX2NvdW50LCB0YXNrLT51bnNvbF9yMnQuZGF0YV9sZW5ndGgpOwogCiAJZXJyID0gY29ubi0+c2Vzc2lvbi0+dHQtPmluaXRfcGR1KHRhc2ssIDAsIHRhc2stPmltbV9jb3VudCk7CiAJaWYgKGVycikKQEAgLTk2NSw3ICs5NjYsOCBAQAogCQkJcjJ0ID0gdGNwX3Rhc2stPnIydDsKIAkJCS8qIENvbnRpbnVlIHdpdGggdGhpcyBSMlQ/ICovCiAJCQlpZiAocjJ0LT5kYXRhX2xlbmd0aCA8PSByMnQtPnNlbnQpIHsKLQkJCQlkZWJ1Z19zY3NpKCIgIGRvbmUgd2l0aCByMnQgJXBcbiIsIHIydCk7CisJCQkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLAorCQkJCQkgICAgICAiICBkb25lIHdpdGggcjJ0ICVwXG4iLCByMnQpOwogCQkJCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLAogCQkJCQkgICAgKHZvaWQgKikmdGNwX3Rhc2stPnIydCwKIAkJCQkJICAgIHNpemVvZih2b2lkICopKTsKQEAgLTEwMTksNyArMTAyMSw3IEBACiAJcjJ0ID0gaXNjc2lfdGNwX2dldF9jdXJyX3IydCh0YXNrKTsKIAlpZiAocjJ0ID09IE5VTEwpIHsKIAkJLyogV2FpdGluZyBmb3IgbW9yZSBSMlRzIHRvIGFycml2ZS4gKi8KLQkJZGVidWdfdGNwKCJubyBSMlRzIHlldFxuIik7CisJCUlTQ1NJX0RCR19UQ1AoY29ubiwgIm5vIFIyVHMgeWV0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDI4LDkgKzEwMzAsOSBAQAogCQlyZXR1cm4gcmM7CiAJaXNjc2lfcHJlcF9kYXRhX291dF9wZHUodGFzaywgcjJ0LCAoc3RydWN0IGlzY3NpX2RhdGEgKikgdGFzay0+aGRyKTsKIAotCWRlYnVnX3Njc2koInNvbCBkb3V0ICVwIFtkc24gJWQgaXR0IDB4JXggZG9mZiAlZCBkbGVuICVkXVxuIiwKLQkJICAgcjJ0LCByMnQtPmRhdGFzbiAtIDEsIHRhc2stPmhkci0+aXR0LAotCQkgICByMnQtPmRhdGFfb2Zmc2V0ICsgcjJ0LT5zZW50LCByMnQtPmRhdGFfY291bnQpOworCUlTQ1NJX0RCR19UQ1AoY29ubiwgInNvbCBkb3V0ICVwIFtkc24gJWQgaXR0IDB4JXggZG9mZiAlZCBkbGVuICVkXVxuIiwKKwkJICAgICAgcjJ0LCByMnQtPmRhdGFzbiAtIDEsIHRhc2stPmhkci0+aXR0LAorCQkgICAgICByMnQtPmRhdGFfb2Zmc2V0ICsgcjJ0LT5zZW50LCByMnQtPmRhdGFfY291bnQpOwogCiAJcmMgPSBjb25uLT5zZXNzaW9uLT50dC0+aW5pdF9wZHUodGFzaywgcjJ0LT5kYXRhX29mZnNldCArIHIydC0+c2VudCwKIAkJCQkJIHIydC0+ZGF0YV9jb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCmluZGV4IGI2MTVlZGEuLjgxY2RjZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCkBAIC0xMTMyLDcgKzExMzIsNyBAQAogfQogCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2Rpc2NfdHJjCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZGlzY190cmMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZGlzY190cmMgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2RlYnVnZnNfZGlzY190cmNfb3BlbiwKIAkubGxzZWVrID0gICAgICAgbHBmY19kZWJ1Z2ZzX2xzZWVrLApAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIH07CiAKICN1bmRlZiBscGZjX2RlYnVnZnNfb3Bfbm9kZWxpc3QKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9ub2RlbGlzdCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9ub2RlbGlzdCA9IHsKIAkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxwZmNfZGVidWdmc19ub2RlbGlzdF9vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCkBAIC0xMTUwLDcgKzExNTAsNyBAQAogfTsKIAogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9oYnFpbmZvCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfaGJxaW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9oYnFpbmZvID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgICAgICAgbHBmY19kZWJ1Z2ZzX2hicWluZm9fb3BlbiwKIAkubGxzZWVrID0gICAgICAgbHBmY19kZWJ1Z2ZzX2xzZWVrLApAQCAtMTE1OSw3ICsxMTU5LDcgQEAKIH07CiAKICN1bmRlZiBscGZjX2RlYnVnZnNfb3BfZHVtcEhCQVNsaW0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kdW1wSEJBU2xpbSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kdW1wSEJBU2xpbSA9IHsKIAkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxwZmNfZGVidWdmc19kdW1wSEJBU2xpbV9vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogfTsKIAogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9kdW1wSG9zdFNsaW0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kdW1wSG9zdFNsaW0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZHVtcEhvc3RTbGltID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgICAgICAgbHBmY19kZWJ1Z2ZzX2R1bXBIb3N0U2xpbV9vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCkBAIC0xMTc3LDcgKzExNzcsNyBAQAogfTsKIAogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9kdW1wRGF0YQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBEYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBEYXRhID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgICAgICAgbHBmY19kZWJ1Z2ZzX2R1bXBEYXRhX29wZW4sCiAJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKQEAgLTExODcsNyArMTE4Nyw3IEBACiB9OwogCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2R1bXBEaWYKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9kdW1wRGlmID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2R1bXBEaWYgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2RlYnVnZnNfZHVtcERpZl9vcGVuLAogCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCkBAIC0xMTk3LDcgKzExOTcsNyBAQAogfTsKIAogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9zbG93X3JpbmdfdHJjCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3Bfc2xvd19yaW5nX3RyYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfZGVidWdmc19vcF9zbG93X3JpbmdfdHJjID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgICAgICAgbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmNfb3BlbiwKIAkubGxzZWVrID0gICAgICAgbHBmY19kZWJ1Z2ZzX2xzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBiMTAzYjZlLi5iMWJkM2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAKIAogCQlzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcigxLCBjbWQtPnNlbnNlX2J1ZmZlciwgSUxMRUdBTF9SRVFVRVNULAogCQkJCTB4MTAsIDB4MSk7Ci0JCWNtZC0+cmVzdWx0ID0gKERSSVZFUl9TRU5TRXxTVUdHRVNUX0RJRSkgPDwgMjQKKwkJY21kLT5yZXN1bHQgPSBEUklWRVJfU0VOU0UgPDwgMjQKIAkJCXwgU2NzaVJlc3VsdChESURfQUJPUlQsIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTik7CiAJCXBoYmEtPmJnX2d1YXJkX2Vycl9jbnQrKzsKIAkJcHJpbnRrKEtFUk5fRVJSICJCTEtHUkQ6IGd1YXJkX3RhZyBlcnJvclxuIik7CkBAIC0xMzY4LDcgKzEzNjgsNyBAQAogCiAJCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDEsIGNtZC0+c2Vuc2VfYnVmZmVyLCBJTExFR0FMX1JFUVVFU1QsCiAJCQkJMHgxMCwgMHgzKTsKLQkJY21kLT5yZXN1bHQgPSAoRFJJVkVSX1NFTlNFfFNVR0dFU1RfRElFKSA8PCAyNAorCQljbWQtPnJlc3VsdCA9IERSSVZFUl9TRU5TRSA8PCAyNAogCQkJfCBTY3NpUmVzdWx0KERJRF9BQk9SVCwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKTsKIAogCQlwaGJhLT5iZ19yZWZ0YWdfZXJyX2NudCsrOwpAQCAtMTM4MCw3ICsxMzgwLDcgQEAKIAogCQlzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcigxLCBjbWQtPnNlbnNlX2J1ZmZlciwgSUxMRUdBTF9SRVFVRVNULAogCQkJCTB4MTAsIDB4Mik7Ci0JCWNtZC0+cmVzdWx0ID0gKERSSVZFUl9TRU5TRXxTVUdHRVNUX0RJRSkgPDwgMjQKKwkJY21kLT5yZXN1bHQgPSBEUklWRVJfU0VOU0UgPDwgMjQKIAkJCXwgU2NzaVJlc3VsdChESURfQUJPUlQsIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTik7CiAKIAkJcGhiYS0+YmdfYXBwdGFnX2Vycl9jbnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODY4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCkBAIC0wLDAgKzEsNjYgQEAKKyMKKyMgS2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE1QVDJTQVMKKyMKKyMgVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorIyAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBOTyBXQVJSQU5UWQorIyBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IKKyMgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyMgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyMgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcworIyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisjIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworIyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyMgdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyMgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyMgRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKyMgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisjIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAorIyBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyMgVVNBLgorCitjb25maWcgU0NTSV9NUFQyU0FTCisJdHJpc3RhdGUgIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfU0FTX0FUVFJTCisJLS0taGVscC0tLQorCVRoaXMgZHJpdmVyIHN1cHBvcnRzIFBDSS1FeHByZXNzIFNBUyA2R2IvcyBIb3N0IEFkYXB0ZXJzLgorCitjb25maWcgU0NTSV9NUFQyU0FTX01BWF9TR0UKKwlpbnQgIkxTSSBNUFQgRnVzaW9uIE1heCBudW1iZXIgb2YgU0cgRW50cmllcyAoMTYgLSAxMjgpIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kgJiYgU0NTSV9NUFQyU0FTCisJZGVmYXVsdCAiMTI4IgorCXJhbmdlIDE2IDEyOAorCS0tLWhlbHAtLS0KKwlUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXItCisJZ2F0aGVyIGVudHJpZXMgcGVyIEkvTy4gVGhlIGRyaXZlciBkZWZhdWx0IGlzIDEyOCwgd2hpY2ggbWF0Y2hlcworCVNBRkVfUEhZU19TRUdNRU5UUy4gIEhvd2V2ZXIsIGl0IG1heSBkZWNyZWFzZWQgZG93biB0byAxNi4KKwlEZWNyZWFzaW5nIHRoaXMgcGFyYW1ldGVyIHdpbGwgcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMKKwlvbiBhIHBlciBjb250cm9sbGVyIGluc3RhbmNlLgorCitjb25maWcgU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlib29sICJMU0kgTVBUIEZ1c2lvbiBsb2dnaW5nIGZhY2lsaXR5IgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kgJiYgU0NTSV9NUFQyU0FTCisJLS0taGVscC0tLQorCVRoaXMgdHVybnMgb24gYSBsb2dnaW5nIGZhY2lsaXR5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjhmMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjIG1wdDJzYXMgbWFrZWZpbGUKK29iai0kKENPTkZJR19TQ1NJX01QVDJTQVMpICs9IG1wdDJzYXMubworbXB0MnNhcy15ICs9ICBtcHQyc2FzX2Jhc2UubyAgICAgICAgXAorCQltcHQyc2FzX2NvbmZpZy5vICAgIFwKKwkJbXB0MnNhc19zY3NpaC5vICAgICBcCisJCW1wdDJzYXNfdHJhbnNwb3J0Lm8gXAorCQltcHQyc2FzX2N0bC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmIyZWNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApAQCAtMCwwICsxLDEwNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgorICoKKyAqCisgKiAgICAgICAgICAgTmFtZTogIG1waTIuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgTWVzc2FnZSBpbmRlcGVuZGVudCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICogICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgU3lzdGVtIEludGVyZmFjZSBSZWdpc3RlciBTZXQgYW5kCisgKiAgICAgICAgICAgICAgICAgIHNjYXR0ZXIvZ2F0aGVyIGZvcm1hdHMuCisgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjEsIDIwMDYKKyAqCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMQorICoKKyAqICBWZXJzaW9uIEhpc3RvcnkKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgorICogIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgUmVwbHlQb3N0SG9zdEluZGV4IHJlZ2lzdGVyIHRvIG9mZnNldCAweDZDIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TWVNURU1fSU5URVJGQUNFX1JFR1MgYW5kIG1vZGlmaWVkIHRoZSBkZWZpbmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9PRkZTRVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB1bmlvbiBvZiByZXF1ZXN0IGRlc2NyaXB0b3JzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdW5pb24gb2YgcmVwbHkgZGVzY3JpcHRvcnMuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvciBNUEkyX1ZFUlNJT05fMDJfMDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCB0aGUgc2l6ZSBvZiB0aGUgRnVuY3Rpb25EZXBlbmRlbnQ1IGZpZWxkIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9ERUZBVUxUX1JFUExZIHN0cnVjdHVyZS4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIHRoZSBNUEktZGVmaW5lZCBGYXVsdCBDb2RlcyBhbmQgZXh0ZW5kZWQgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0IHNwZWNpZmljIGNvZGVzIHVwIHRvIDB4RUZGRi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGEgc2l4dGgga2V5IHZhbHVlIGZvciB0aGUgV3JpdGVTZXF1ZW5jZSByZWdpc3RlcgorICogICAgICAgICAgICAgICAgICAgICAgYW5kIGNoYW5nZWQgdGhlIGZsdXNoIHZhbHVlIHRvIDB4MC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1lc3NhZ2UgZnVuY3Rpb24gY29kZXMgZm9yIERpYWdub3N0aWMgQnVmZmVyIFBvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBEaWFnbnNvdGljIFJlbGVhc2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBOZXcgSU9DU3RhdHVzIGRlZmluZTogTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRAorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTVBJMl9WRVJTSU9OX1VOSU9OIGZyb20gbXBpMl9pb2MuaC4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDMtMDMtMDggIDAyLjAwLjA3ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTIxLTA4ICAwMi4wMC4wOCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkICNkZWZpbmVzIGZvciBtYXJraW5nIGEgcmVwbHkgZGVzY3JpcHRvciBhcyB1bnVzZWQuCisgKiAgMDYtMjctMDggIDAyLjAwLjA5ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDEwLTAyLTA4ICAwMi4wMC4xMCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIGZyb20gbXBpMl9pbml0LmguCisgKiAgMDEtMTktMDkgIDAyLjAwLjExICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBNUEkyX0gKKyNkZWZpbmUgTVBJMl9ICisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBNUEkgVmVyc2lvbiBEZWZpbml0aW9ucworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01BSk9SICAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NSU5PUiAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUFKT1JfTUFTSyAgICAgICAgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUFKT1JfU0hJRlQgICAgICAgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01JTk9SX01BU0sgICAgICAgICAgICAgKDB4MDBGRikKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01JTk9SX1NISUZUICAgICAgICAgICAgKDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTiAoKE1QSTJfVkVSU0lPTl9NQUpPUiA8PCBNUEkyX1ZFUlNJT05fTUFKT1JfU0hJRlQpIHwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSTJfVkVSU0lPTl9NSU5PUikKKworI2RlZmluZSBNUEkyX1ZFUlNJT05fMDJfMDAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQorCisvKiB2ZXJzaW9uaW5nIGZvciB0aGlzIE1QSSBoZWFkZXIgc2V0ICovCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX0RFViAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX01BU0sgICAgICAgKDB4RkYwMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX1NISUZUICAgICAgKDgpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWX01BU0sgICAgICAgICgweDAwRkYpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWX1NISUZUICAgICAgICgwKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OICgoTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUIDw8IDgpIHwgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBJT0MgU3RhdGUgRGVmaW5pdGlvbnMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfSU9DX1NUQVRFX1JFU0VUICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfSU9DX1NUQVRFX1JFQURZICAgICAgICAgICAgICAgKDB4MTAwMDAwMDApCisjZGVmaW5lIE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMICAgICAgICAgKDB4MjAwMDAwMDApCisjZGVmaW5lIE1QSTJfSU9DX1NUQVRFX0ZBVUxUICAgICAgICAgICAgICAgKDB4NDAwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9JT0NfU1RBVEVfTUFTSyAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NfU1RBVEVfU0hJRlQgICAgICAgICAgICAgICAoMjgpCisKKy8qIEZhdWx0IHN0YXRlIHJhbmdlIGZvciBwcm9kY3V0IHNwZWNpZmljIGNvZGVzICovCisjZGVmaW5lIE1QSTJfRkFVTFRfUFJPRFVDVF9TUEVDSUZJQ19NSU4gICAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfRkFVTFRfUFJPRFVDVF9TUEVDSUZJQ19NQVggICAgICAgICAgICAgICAgICgweEVGRkYpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBTeXN0ZW0gSW50ZXJmYWNlIFJlZ2lzdGVyIERlZmluaXRpb25zCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgX01QSTJfU1lTVEVNX0lOVEVSRkFDRV9SRUdTCit7CisgICAgVTMyICAgICAgICAgRG9vcmJlbGw7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICBXcml0ZVNlcXVlbmNlOyAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgIEhvc3REaWFnbm9zdGljOyAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICBEaWFnUldEYXRhOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgIERpYWdSV0FkZHJlc3NMb3c7ICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgRGlhZ1JXQWRkcmVzc0hpZ2g7ICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDJbNV07ICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUzMiAgICAgICAgIEhvc3RJbnRlcnJ1cHRTdGF0dXM7ICAgICAgICAvKiAweDMwICovCisgICAgVTMyICAgICAgICAgSG9zdEludGVycnVwdE1hc2s7ICAgICAgICAgIC8qIDB4MzQgKi8KKyAgICBVMzIgICAgICAgICBEQ1JEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogMHgzOCAqLworICAgIFUzMiAgICAgICAgIERDUkFkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQzWzJdOyAgICAgICAgICAgICAgIC8qIDB4NDAgKi8KKyAgICBVMzIgICAgICAgICBSZXBseUZyZWVIb3N0SW5kZXg7ICAgICAgICAgLyogMHg0OCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkNFs4XTsgICAgICAgICAgICAgICAvKiAweDRDICovCisgICAgVTMyICAgICAgICAgUmVwbHlQb3N0SG9zdEluZGV4OyAgICAgICAgIC8qIDB4NkMgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHg3MCAqLworICAgIFUzMiAgICAgICAgIEhDQlNpemU7ICAgICAgICAgICAgICAgICAgICAvKiAweDc0ICovCisgICAgVTMyICAgICAgICAgSENCQWRkcmVzc0xvdzsgICAgICAgICAgICAgIC8qIDB4NzggKi8KKyAgICBVMzIgICAgICAgICBIQ0JBZGRyZXNzSGlnaDsgICAgICAgICAgICAgLyogMHg3QyAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkNlsxNl07ICAgICAgICAgICAgICAvKiAweDgwICovCisgICAgVTMyICAgICAgICAgUmVxdWVzdERlc2NyaXB0b3JQb3N0TG93OyAgIC8qIDB4QzAgKi8KKyAgICBVMzIgICAgICAgICBSZXF1ZXN0RGVzY3JpcHRvclBvc3RIaWdoOyAgLyogMHhDNCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkN1sxNF07ICAgICAgICAgICAgICAvKiAweEM4ICovCit9IE1QSTJfU1lTVEVNX0lOVEVSRkFDRV9SRUdTLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU1lTVEVNX0lOVEVSRkFDRV9SRUdTLAorICBNcGkyU3lzdGVtSW50ZXJmYWNlUmVnc190LCBNUEkyX1BPSU5URVIgcE1waTJTeXN0ZW1JbnRlcmZhY2VSZWdzX3Q7CisKKy8qCisgKiBEZWZpbmVzIGZvciB3b3JraW5nIHdpdGggdGhlIERvb3JiZWxsIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKworLyogSU9DIC0tPiBTeXN0ZW0gdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfVVNFRCAgICAgICAgICAgICAgICAgICAgICAoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9XSE9fSU5JVF9NQVNLICAgICAgICAgICAgICgweDA3MDAwMDAwKQorI2RlZmluZSBNUEkyX0RPT1JCRUxMX1dIT19JTklUX1NISUZUICAgICAgICAgICAgKDI0KQorI2RlZmluZSBNUEkyX0RPT1JCRUxMX0ZBVUxUX0NPREVfTUFTSyAgICAgICAgICAgKDB4MDAwMEZGRkYpCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfREFUQV9NQVNLICAgICAgICAgICAgICAgICAoMHgwMDAwRkZGRikKKworLyogU3lzdGVtIC0tPiBJT0MgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRE9PUkJFTExfRlVOQ1RJT05fTUFTSyAgICAgICAgICAgICAoMHhGRjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9GVU5DVElPTl9TSElGVCAgICAgICAgICAgICgyNCkKKyNkZWZpbmUgTVBJMl9ET09SQkVMTF9BRERfRFdPUkRTX01BU0sgICAgICAgICAgICgweDAwRkYwMDAwKQorI2RlZmluZSBNUEkyX0RPT1JCRUxMX0FERF9EV09SRFNfU0hJRlQgICAgICAgICAgKDE2KQorCisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgV3JpdGVTZXF1ZW5jZSByZWdpc3RlcgorICovCisjZGVmaW5lIE1QSTJfV1JJVEVfU0VRVUVOQ0VfT0ZGU0VUICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9XUlNFUV9LRVlfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICgweDAwMDAwMDBGKQorI2RlZmluZSBNUEkyX1dSU0VRX0ZMVVNIX0tFWV9WQUxVRSAgICAgICAgICAgICAgKDB4MCkKKyNkZWZpbmUgTVBJMl9XUlNFUV8xU1RfS0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweEYpCisjZGVmaW5lIE1QSTJfV1JTRVFfMk5EX0tFWV9WQUxVRSAgICAgICAgICAgICAgICAoMHg0KQorI2RlZmluZSBNUEkyX1dSU0VRXzNSRF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4QikKKyNkZWZpbmUgTVBJMl9XUlNFUV80VEhfS0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweDIpCisjZGVmaW5lIE1QSTJfV1JTRVFfNVRIX0tFWV9WQUxVRSAgICAgICAgICAgICAgICAoMHg3KQorI2RlZmluZSBNUEkyX1dSU0VRXzZUSF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4RCkKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSBIb3N0RGlhZ25vc3RpYyByZWdpc3RlcgorICovCisjZGVmaW5lIE1QSTJfSE9TVF9ESUFHTk9TVElDX09GRlNFVCAgICAgICAgICAgICAoMHgwMDAwMDAwOCkKKworI2RlZmluZSBNUEkyX0RJQUdfQk9PVF9ERVZJQ0VfU0VMRUNUX01BU0sgICAgICAgKDB4MDAwMDE4MDApCisjZGVmaW5lIE1QSTJfRElBR19CT09UX0RFVklDRV9TRUxFQ1RfREVGQVVMVCAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9ESUFHX0JPT1RfREVWSUNFX1NFTEVDVF9IQ0RXICAgICAgICgweDAwMDAwODAwKQorCisjZGVmaW5lIE1QSTJfRElBR19DTEVBUl9GTEFTSF9CQURfU0lHICAgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9ESUFHX0ZPUkNFX0hDQl9PTl9SRVNFVCAgICAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX0RJQUdfSENCX01PREUgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfRElBR19ESUFHX1dSSVRFX0VOQUJMRSAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9ESUFHX0ZMQVNIX0JBRF9TSUcgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX0RJQUdfUkVTRVRfSElTVE9SWSAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfRElBR19ESUFHX1JXX0VOQUJMRSAgICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9ESUFHX1JFU0VUX0FEQVBURVIgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX0RJQUdfSE9MRF9JT0NfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisKKy8qCisgKiBPZmZzZXRzIGZvciBEaWFnUldEYXRhIGFuZCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgTVBJMl9ESUFHX1JXX0RBVEFfT0ZGU0VUICAgICAgICAgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX0RJQUdfUldfQUREUkVTU19MT1dfT0ZGU0VUICAgICAgICAgKDB4MDAwMDAwMTQpCisjZGVmaW5lIE1QSTJfRElBR19SV19BRERSRVNTX0hJR0hfT0ZGU0VUICAgICAgICAoMHgwMDAwMDAxOCkKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSBIb3N0SW50ZXJydXB0U3RhdHVzIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTVBJMl9IT1NUX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUICAgICAgICgweDAwMDAwMDMwKQorI2RlZmluZSBNUEkyX0hJU19TWVMySU9DX0RCX1NUQVRVUyAgICAgICAgICAgICAgKDB4ODAwMDAwMDApCisjZGVmaW5lIE1QSTJfSElTX0lPUF9ET09SQkVMTF9TVEFUVVMgICAgICAgICAgICBNUEkyX0hJU19TWVMySU9DX0RCX1NUQVRVUworI2RlZmluZSBNUEkyX0hJU19SRVNFVF9JUlFfU1RBVFVTICAgICAgICAgICAgICAgKDB4NDAwMDAwMDApCisjZGVmaW5lIE1QSTJfSElTX1JFUExZX0RFU0NSSVBUT1JfSU5URVJSVVBUICAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBNUEkyX0hJU19ET09SQkVMTF9JTlRFUlJVUFQgICAgICAgICAgICAgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMKKworLyoKKyAqIERlZmluZXMgZm9yIHRoZSBIb3N0SW50ZXJydXB0TWFzayByZWdpc3RlcgorICovCisjZGVmaW5lIE1QSTJfSE9TVF9JTlRFUlJVUFRfTUFTS19PRkZTRVQgICAgICAgICAoMHgwMDAwMDAzNCkKKyNkZWZpbmUgTVBJMl9ISU1fUkVTRVRfSVJRX01BU0sgICAgICAgICAgICAgICAgICgweDQwMDAwMDAwKQorI2RlZmluZSBNUEkyX0hJTV9SRVBMWV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1QSTJfSElNX1JJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUEkyX0hJTV9SRVBMWV9JTlRfTUFTSworI2RlZmluZSBNUEkyX0hJTV9JT0MyU1lTX0RCX01BU0sgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1QSTJfSElNX0RJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUEkyX0hJTV9JT0MyU1lTX0RCX01BU0sKKworLyoKKyAqIE9mZnNldHMgZm9yIERDUkRhdGEgYW5kIGFkZHJlc3MKKyAqLworI2RlZmluZSBNUEkyX0RDUl9EQVRBX09GRlNFVCAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMzgpCisjZGVmaW5lIE1QSTJfRENSX0FERFJFU1NfT0ZGU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzQykKKworLyoKKyAqIE9mZnNldCBmb3IgdGhlIFJlcGx5IEZyZWUgUXVldWUKKyAqLworI2RlZmluZSBNUEkyX1JFUExZX0ZSRUVfSE9TVF9JTkRFWF9PRkZTRVQgICAgICAgKDB4MDAwMDAwNDgpCisKKy8qCisgKiBPZmZzZXQgZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUKKyAqLworI2RlZmluZSBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9PRkZTRVQgICAgICAgKDB4MDAwMDAwNkMpCisKKy8qCisgKiBEZWZpbmVzIGZvciB0aGUgSENCU2l6ZSBhbmQgYWRkcmVzcworICovCisjZGVmaW5lIE1QSTJfSENCX1NJWkVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA3NCkKKyNkZWZpbmUgTVBJMl9IQ0JfU0laRV9TSVpFX01BU0sgICAgICAgICAgICAgICAgICgweEZGRkZGMDAwKQorI2RlZmluZSBNUEkyX0hDQl9TSVpFX0hDQl9FTkFCTEUgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgTVBJMl9IQ0JfQUREUkVTU19MT1dfT0ZGU0VUICAgICAgICAgICAgICgweDAwMDAwMDc4KQorI2RlZmluZSBNUEkyX0hDQl9BRERSRVNTX0hJR0hfT0ZGU0VUICAgICAgICAgICAgKDB4MDAwMDAwN0MpCisKKy8qCisgKiBPZmZzZXRzIGZvciB0aGUgUmVxdWVzdCBRdWV1ZQorICovCisjZGVmaW5lIE1QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1BPU1RfTE9XX09GRlNFVCAgICAgKDB4MDAwMDAwQzApCisjZGVmaW5lIE1QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1BPU1RfSElHSF9PRkZTRVQgICAgKDB4MDAwMDAwQzQpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBNZXNzYWdlIERlc2NyaXB0b3JzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmVxdWVzdCBEZXNjcmlwdG9ycyAqLworCisvKiBEZWZhdWx0IFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQ7ICAgIC8qIDB4MDYgKi8KK30gTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SLAorICBNcGkyRGVmYXVsdFJlcXVlc3REZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRlZmF1bHRSZXF1ZXN0RGVzY3JpcHRvcl90OworCisvKiBkZWZpbmVzIGZvciB0aGUgUmVxdWVzdEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSyAgICAgICAgICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9UQVJHRVQgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFkgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZBVUxUX1RZUEUgICAgICAgICAgICAoMHgwOCkKKworI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19JT0NfRklGT19NQVJLRVIgKDB4MDEpCisKKworLyogSGlnaCBQcmlvcml0eSBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SCit7CisgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTXBpMkhpZ2hQcmlvcml0eVJlcXVlc3REZXNjcmlwdG9yX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkhpZ2hQcmlvcml0eVJlcXVlc3REZXNjcmlwdG9yX3Q7CisKKworLyogU0NTSSBJTyBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SCit7CisgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTXBpMlNDU0lJT1JlcXVlc3REZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lJT1JlcXVlc3REZXNjcmlwdG9yX3Q7CisKKworLyogU0NTSSBUYXJnZXQgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgSW9JbmRleDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1waTJTQ1NJVGFyZ2V0UmVxdWVzdERlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9yX3Q7CisKKy8qIHVuaW9uIG9mIFJlcXVlc3QgRGVzY3JpcHRvcnMgKi8KK3R5cGVkZWYgdW5pb24gX01QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OCit7CisgICAgTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgIEhpZ2hQcmlvcml0eTsKKyAgICBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgU0NTSUlPOworICAgIE1QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SICAgICBTQ1NJVGFyZ2V0OworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKK30gTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04sCisgIE1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdDsKKworCisvKiBSZXBseSBEZXNjcmlwdG9ycyAqLworCisvKiBEZWZhdWx0IFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDE7ICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDI7ICAgLyogMHgwNCAqLworfSBNUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTXBpMkRlZmF1bHRSZXBseURlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90OworCisvKiBkZWZpbmVzIGZvciB0aGUgUmVwbHlGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfU0NTSV9JT19TVUNDRVNTICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUyAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUX0NPTU1BTkRfQlVGRkVSICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCAgICAgICAgICAgICAgICAgICgweDBGKQorCisvKiB2YWx1ZXMgZm9yIG1hcmtpbmcgYSByZXBseSBkZXNjcmlwdG9yIGFzIHVudXNlZCAqLworI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9VTlVTRURfV09SRDBfTUFSSyAgICAgICAgICAgICAoMHhGRkZGRkZGRikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfVU5VU0VEX1dPUkQxX01BUksgICAgICAgICAgICAgKDB4RkZGRkZGRkYpCisKKy8qIEFkZHJlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SCit7CisgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgIFJlcGx5RnJhbWVBZGRyZXNzOyAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SLAorICBNcGkyQWRkcmVzc1JlcGx5RGVzY3JpcHRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJBZGRyZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKyNkZWZpbmUgTVBJMl9BRERSRVNTX1JFUExZX1NNSURfSU5WQUxJRCAgICAgICAgICAgICAgICAgKDB4MDApCisKKworLyogU0NTSSBJTyBTdWNjZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCit7CisgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTE2ICAgICAgICAgICAgIFRhc2tUYWc7ICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTXBpMlNDU0lJT1N1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSUlPU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90OworCisKKy8qIFRhcmdldEFzc2lzdCBTdWNjZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgU2VxdWVuY2VOdW1iZXI7ICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgSW9JbmRleDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTXBpMlRhcmdldEFzc2lzdFN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVGFyZ2V0QXNzaXN0U3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90OworCisKKy8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUgoreworICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICBJbml0aWF0b3JEZXZIYW5kbGU7ICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IsCisgIE1waTJUYXJnZXRDb21tYW5kQnVmZmVyUmVwbHlEZXNjcmlwdG9yX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlRhcmdldENvbW1hbmRCdWZmZXJSZXBseURlc2NyaXB0b3JfdDsKKworLyogZGVmaW5lcyBmb3IgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfVENCX0ZMQUdTX1BIWU5VTV9NQVNLICAgICAoMHgzRikKKworCisvKiB1bmlvbiBvZiBSZXBseSBEZXNjcmlwdG9ycyAqLwordHlwZWRlZiB1bmlvbiBfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTgoreworICAgIE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgRGVmYXVsdDsKKyAgICBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgIEFkZHJlc3NSZXBseTsKKyAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICAgICAgIFNDU0lJT1N1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICBUYXJnZXRBc3Npc3RTdWNjZXNzOworICAgIE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IgVGFyZ2V0Q29tbWFuZEJ1ZmZlcjsKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOworfSBNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sCisgIE1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3Q7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb25zCisqICAgICAgICAgICAgICAweDgwIC0+IDB4OEYgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgbWVzc2FnZSB1c2UgcGVyIHByb2R1Y3QKKyoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUICAgICAgICAgICAgICAgKDB4MDApIC8qIFNDU0kgSU8gKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVCAgICAgICAgICAgICAgICAoMHgwMSkgLyogU0NTSSBUYXNrIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT0NfSU5JVCAgICAgICAgICAgICAgICAgICAgICAoMHgwMikgLyogSU9DIEluaXQgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT0NfRkFDVFMgICAgICAgICAgICAgICAgICAgICAoMHgwMykgLyogSU9DIEZhY3RzICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDQpIC8qIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9QT1JUX0ZBQ1RTICAgICAgICAgICAgICAgICAgICAoMHgwNSkgLyogUG9ydCBGYWN0cyAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1BPUlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICgweDA2KSAvKiBQb3J0IEVuYWJsZSAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTiAgICAgICAgICAgICgweDA3KSAvKiBFdmVudCBOb3RpZmljYXRpb24gKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9FVkVOVF9BQ0sgICAgICAgICAgICAgICAgICAgICAoMHgwOCkgLyogRXZlbnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9GV19ET1dOTE9BRCAgICAgICAgICAgICAgICAgICAoMHgwOSkgLyogRlcgRG93bmxvYWQgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQVNTSVNUICAgICAgICAgICAgICAgICAoMHgwQikgLyogVGFyZ2V0IEFzc2lzdCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9TVEFUVVNfU0VORCAgICAgICAgICAgICgweDBDKSAvKiBUYXJnZXQgU3RhdHVzIFNlbmQgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfTU9ERV9BQk9SVCAgICAgICAgICAgICAoMHgwRCkgLyogVGFyZ2V0IE1vZGUgQWJvcnQgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9GV19VUExPQUQgICAgICAgICAgICAgICAgICAgICAoMHgxMikgLyogRlcgVXBsb2FkICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUkFJRF9BQ1RJT04gICAgICAgICAgICAgICAgICAgKDB4MTUpIC8qIFJBSUQgQWN0aW9uICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIICAgICAgKDB4MTYpIC8qIFNDU0kgSU8gUkFJRCBQYXNzdGhyb3VnaCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RPT0xCT1ggICAgICAgICAgICAgICAgICAgICAgICgweDE3KSAvKiBUb29sYm94ICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU0NTSV9FTkNMT1NVUkVfUFJPQ0VTU09SICAgICAgKDB4MTgpIC8qIFNDU0kgRW5jbG9zdXJlIFByb2Nlc3NvciAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSCAgICAgICAgICAgICAgICgweDFBKSAvKiBTTVAgUGFzc3Rocm91Z2ggKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MICAgICAgICAgICAoMHgxQikgLyogU0FTIElPIFVuaXQgQ29udHJvbCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1NBVEFfUEFTU1RIUk9VR0ggICAgICAgICAgICAgICgweDFDKSAvKiBTQVRBIFBhc3N0aHJvdWdoICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fRElBR19CVUZGRVJfUE9TVCAgICAgICAgICAgICAgKDB4MUQpIC8qIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0UgICAgICAgICAgICAgICAgICAoMHgxRSkgLyogRGlhZ25vc3RpYyBSZWxlYXNlICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfQkFTRV9QT1NUICAgICAgKDB4MjQpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IEJhc2UgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9MSVNUX1BPU1QgICAgICAoMHgyNSkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgTGlzdCAqLworCisKKworLyogRG9vcmJlbGwgZnVuY3Rpb25zICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVCAgICAgICAgKDB4NDApCisvKiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSU9fVU5JVF9SRVNFVCAgICAgICAgICAgICAgICAgKDB4NDEpICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSEFORFNIQUtFICAgICAgICAgICAgICAgICAgICAgKDB4NDIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBJT0MgU3RhdHVzIFZhbHVlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIG1hc2sgZm9yIElPQ1N0YXR1cyBzdGF0dXMgdmFsdWUgKi8KKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDdGRkYpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb21tb24gSU9DU3RhdHVzIHZhbHVlcyBmb3IgYWxsIHJlcGxpZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX0ZVTkNUSU9OICAgICAgICAgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9TR0wgICAgICAgICAgICAgICAgICAoMHgwMDAzKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfVlBJRCAgICAgICAgICAgICAgICAgKDB4MDAwNSkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyAgICAgICAoMHgwMDA2KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX0ZJRUxEICAgICAgICAgICAgICAgICgweDAwMDcpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfU1RBVEUgICAgICAgICAgICAgICAgKDB4MDAwOCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfT1BfU1RBVEVfTk9UX1NVUFBPUlRFRCAgICAgICAoMHgwMDA5KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29uZmlnIElPQ1N0YXR1cyB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfQUNUSU9OICAgICAgICAoMHgwMDIwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9UWVBFICAgICAgICAgICgweDAwMjEpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1BBR0UgICAgICAgICAgKDB4MDAyMikKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfREFUQSAgICAgICAgICAoMHgwMDIzKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfTk9fREVGQVVMVFMgICAgICAgICAgICgweDAwMjQpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19DQU5UX0NPTU1JVCAgICAgICAgICAgKDB4MDAyNSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNDU0kgSU8gUmVwbHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9SRUNPVkVSRURfRVJST1IgICAgICAgICAoMHgwMDQwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lOVkFMSURfREVWSEFORExFICAgICAgICgweDAwNDIpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfREVWSUNFX05PVF9USEVSRSAgICAgICAgKDB4MDA0MykKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX09WRVJSVU4gICAgICAgICAgICAoMHgwMDQ0KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfVU5ERVJSVU4gICAgICAgICAgICgweDAwNDUpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU9fREFUQV9FUlJPUiAgICAgICAgICAgKDB4MDA0NikKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9QUk9UT0NPTF9FUlJPUiAgICAgICAgICAoMHgwMDQ3KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1RBU0tfVEVSTUlOQVRFRCAgICAgICAgICgweDAwNDgpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfUkVTSURVQUxfTUlTTUFUQ0ggICAgICAgKDB4MDA0OSkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0NTSV9UQVNLX01HTVRfRkFJTEVEICAgICAgICAoMHgwMDRBKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0lPQ19URVJNSU5BVEVEICAgICAgICAgICgweDAwNEIpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NDU0lfRVhUX1RFUk1JTkFURUQgICAgICAgICAgKDB4MDA0QykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZvciB1c2UgYnkgU0NTSSBJbml0aWF0b3IgYW5kIFNDU0kgVGFyZ2V0IGVuZC10by1lbmQgZGF0YSBwcm90ZWN0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0VFRFBfR1VBUkRfRVJST1IgICAgICAgICAgICAgKDB4MDA0RCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRUVEUF9SRUZfVEFHX0VSUk9SICAgICAgICAgICAoMHgwMDRFKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19FRURQX0FQUF9UQUdfRVJST1IgICAgICAgICAgICgweDAwNEYpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTQ1NJIFRhcmdldCB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0lOVkFMSURfSU9fSU5ERVggICAgICAoMHgwMDYyKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfQUJPUlRFRCAgICAgICAgICAgICAgICgweDAwNjMpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9OT19DT05OX1JFVFJZQUJMRSAgICAgKDB4MDA2NCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX05PX0NPTk5FQ1RJT04gICAgICAgICAoMHgwMDY1KQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfWEZFUl9DT1VOVF9NSVNNQVRDSCAgICgweDAwNkEpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9EQVRBX09GRlNFVF9FUlJPUiAgICAgKDB4MDA2RCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX1RPT19NVUNIX1dSSVRFX0RBVEEgICAoMHgwMDZFKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfSVVfVE9PX1NIT1JUICAgICAgICAgICgweDAwNkYpCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9BQ0tfTkFLX1RJTUVPVVQgICAgICAgKDB4MDA3MCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX05BS19SRUNFSVZFRCAgICAgICAgICAoMHgwMDcxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU2VyaWFsIEF0dGFjaGVkIFNDU0kgdmFsdWVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1NBU19TTVBfUkVRVUVTVF9GQUlMRUQgICAgICAgKDB4MDA5MCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfU0FTX1NNUF9EQVRBX09WRVJSVU4gICAgICAgICAoMHgwMDkxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCAvIERpYWdub3N0aWMgUmVsZWFzZSB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRCAgICAgICAgICAoMHgwMEEwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJT0NTdGF0dXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGxvZyBpbmZvIGlzIGF2YWlsYWJsZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSAgKDB4ODAwMCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElPQ0xvZ0luZm8gVHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NMT0dJTkZPX1RZUEVfTUFTSyAgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX0lPQ0xPR0lORk9fVFlQRV9TSElGVCAgICAgICAgICAgICAgKDI4KQorI2RlZmluZSBNUEkyX0lPQ0xPR0lORk9fVFlQRV9OT05FICAgICAgICAgICAgICAgKDB4MCkKKyNkZWZpbmUgTVBJMl9JT0NMT0dJTkZPX1RZUEVfU0NTSSAgICAgICAgICAgICAgICgweDEpCisjZGVmaW5lIE1QSTJfSU9DTE9HSU5GT19UWVBFX0ZDICAgICAgICAgICAgICAgICAoMHgyKQorI2RlZmluZSBNUEkyX0lPQ0xPR0lORk9fVFlQRV9TQVMgICAgICAgICAgICAgICAgKDB4MykKKyNkZWZpbmUgTVBJMl9JT0NMT0dJTkZPX1RZUEVfSVNDU0kgICAgICAgICAgICAgICgweDQpCisjZGVmaW5lIE1QSTJfSU9DTE9HSU5GT19MT0dfREFUQV9NQVNLICAgICAgICAgICAoMHgwRkZGRkZGRikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIFN0YW5kYXJkIE1lc3NhZ2UgU3RydWN0dXJlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFJlcXVlc3QgTWVzc2FnZSBIZWFkZXIgZm9yIGFsbCByZXF1ZXN0IG1lc3NhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SRVFVRVNUX0hFQURFUgoreworICAgIFUxNiAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDE7ICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDI7ICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDM7ICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworfSBNUEkyX1JFUVVFU1RfSEVBREVSLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkVRVUVTVF9IRUFERVIsCisgIE1QSTJSZXF1ZXN0SGVhZGVyX3QsIE1QSTJfUE9JTlRFUiBwTVBJMlJlcXVlc3RIZWFkZXJfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRGVmYXVsdCBSZXBseQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfREVGQVVMVF9SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDE7ICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDI7ICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDM7ICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICBGdW5jdGlvbkRlcGVuZGVudDU7ICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX0RFRkFVTFRfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ERUZBVUxUX1JFUExZLAorICBNUEkyRGVmYXVsdFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTVBJMkRlZmF1bHRSZXBseV90OworCisKKy8qIGNvbW1vbiB2ZXJzaW9uIHN0cnVjdHVyZS91bmlvbiB1c2VkIGluIG1lc3NhZ2VzIGFuZCBjb25maWd1cmF0aW9uIHBhZ2VzICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1ZFUlNJT05fU1RSVUNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV2OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBVbml0OyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1pbm9yOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWFqb3I7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KK30gTVBJMl9WRVJTSU9OX1NUUlVDVDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9WRVJTSU9OX1VOSU9OCit7CisgICAgTVBJMl9WRVJTSU9OX1NUUlVDVCAgICAgU3RydWN0OworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFdvcmQ7Cit9IE1QSTJfVkVSU0lPTl9VTklPTjsKKworCisvKiBMVU4gZmllbGQgZGVmaW5lcywgY29tbW9uIHRvIG1hbnkgc3RydWN0dXJlcyAqLworI2RlZmluZSBNUEkyX0xVTl9GSVJTVF9MRVZFTF9BRERSRVNTSU5HICAgICAgICAgICAgICgweDAwMDBGRkZGKQorI2RlZmluZSBNUEkyX0xVTl9TRUNPTkRfTEVWRUxfQUREUkVTU0lORyAgICAgICAgICAgICgweEZGRkYwMDAwKQorI2RlZmluZSBNUEkyX0xVTl9USElSRF9MRVZFTF9BRERSRVNTSU5HICAgICAgICAgICAgICgweDAwMDBGRkZGKQorI2RlZmluZSBNUEkyX0xVTl9GT1VSVEhfTEVWRUxfQUREUkVTU0lORyAgICAgICAgICAgICgweEZGRkYwMDAwKQorI2RlZmluZSBNUEkyX0xVTl9MRVZFTF8xX1dPUkQgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfTFVOX0xFVkVMXzFfRFdPUkQgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMEZGMDApCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBGdXNpb24tTVBUIE1QSSBTY2F0dGVyIEdhdGhlciBFbGVtZW50cworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNUEkgU2ltcGxlIEVsZW1lbnQgc3RydWN0dXJlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1NJTVBMRTMyCit7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3NMZW5ndGg7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQWRkcmVzczsKK30gTVBJMl9TR0VfU0lNUExFMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfU0lNUExFMzIsCisgIE1waTJTR0VTaW1wbGUzMl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VTaW1wbGUzMl90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfU0lNUExFNjQKK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBGbGFnc0xlbmd0aDsKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworfSBNUEkyX1NHRV9TSU1QTEU2NCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9TSU1QTEU2NCwKKyAgTXBpMlNHRVNpbXBsZTY0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRVNpbXBsZTY0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9TSU1QTEVfVU5JT04KK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBGbGFnc0xlbmd0aDsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgVTMyICAgICAgICAgICAgICAgICBBZGRyZXNzMzI7CisgICAgICAgIFU2NCAgICAgICAgICAgICAgICAgQWRkcmVzczY0OworICAgIH0gdTsKK30gTVBJMl9TR0VfU0lNUExFX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX1NJTVBMRV9VTklPTiwKKyAgTXBpMlNHRVNpbXBsZVVuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRVNpbXBsZVVuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1QSSBDaGFpbiBFbGVtZW50IHN0cnVjdHVyZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9DSEFJTjMyCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE5leHRDaGFpbk9mZnNldDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworfSBNUEkyX1NHRV9DSEFJTjMyLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX0NIQUlOMzIsCisgIE1waTJTR0VDaGFpbjMyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRUNoYWluMzJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX0NIQUlONjQKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTmV4dENoYWluT2Zmc2V0OworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7Cit9IE1QSTJfU0dFX0NIQUlONjQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfQ0hBSU42NCwKKyAgTXBpMlNHRUNoYWluNjRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFQ2hhaW42NF90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfQ0hBSU5fVU5JT04KK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTmV4dENoYWluT2Zmc2V0OworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworICAgIHVuaW9uCisgICAgeworICAgICAgICBVMzIgICAgICAgICAgICAgICAgIEFkZHJlc3MzMjsKKyAgICAgICAgVTY0ICAgICAgICAgICAgICAgICBBZGRyZXNzNjQ7CisgICAgfSB1OworfSBNUEkyX1NHRV9DSEFJTl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9DSEFJTl9VTklPTiwKKyAgTXBpMlNHRUNoYWluVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFQ2hhaW5Vbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNUEkgVHJhbnNhY3Rpb24gQ29udGV4dCBFbGVtZW50IHN0cnVjdHVyZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9UUkFOU0FDVElPTjMyCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFNpemU7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV0YWlsc0xlbmd0aDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkNvbnRleHRbMV07CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25EZXRhaWxzWzFdOworfSBNUEkyX1NHRV9UUkFOU0FDVElPTjMyLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX1RSQU5TQUNUSU9OMzIsCisgIE1waTJTR0VUcmFuc2FjdGlvbjMyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNHRVRyYW5zYWN0aW9uMzJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0dFX1RSQU5TQUNUSU9ONjQKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U2l6ZTsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEZXRhaWxzTGVuZ3RoOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQ29udGV4dFsyXTsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbkRldGFpbHNbMV07Cit9IE1QSTJfU0dFX1RSQU5TQUNUSU9ONjQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfVFJBTlNBQ1RJT042NCwKKyAgTXBpMlNHRVRyYW5zYWN0aW9uNjRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFVHJhbnNhY3Rpb242NF90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfVFJBTlNBQ1RJT045NgoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTaXplOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldGFpbHNMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0WzNdOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uRGV0YWlsc1sxXTsKK30gTVBJMl9TR0VfVFJBTlNBQ1RJT045NiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9UUkFOU0FDVElPTjk2LAorICBNcGkyU0dFVHJhbnNhY3Rpb245Nl90LCBNUEkyX1BPSU5URVIgcE1waTJTR0VUcmFuc2FjdGlvbjk2X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9UUkFOU0FDVElPTjEyOAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTaXplOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldGFpbHNMZW5ndGg7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25Db250ZXh0WzRdOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uRGV0YWlsc1sxXTsKK30gTVBJMl9TR0VfVFJBTlNBQ1RJT04xMjgsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TR0VfVFJBTlNBQ1RJT04xMjgsCisgIE1waTJTR0VUcmFuc2FjdGlvbl90MTI4LCBNUEkyX1BPSU5URVIgcE1waTJTR0VUcmFuc2FjdGlvbl90MTI4OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TR0VfVFJBTlNBQ1RJT05fVU5JT04KK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U2l6ZTsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEZXRhaWxzTGVuZ3RoOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworICAgIHVuaW9uCisgICAgeworICAgICAgICBVMzIgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQ29udGV4dDMyWzFdOworICAgICAgICBVMzIgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQ29udGV4dDY0WzJdOworICAgICAgICBVMzIgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQ29udGV4dDk2WzNdOworICAgICAgICBVMzIgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uQ29udGV4dDEyOFs0XTsKKyAgICB9IHU7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25EZXRhaWxzWzFdOworfSBNUEkyX1NHRV9UUkFOU0FDVElPTl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9UUkFOU0FDVElPTl9VTklPTiwKKyAgTXBpMlNHRVRyYW5zYWN0aW9uVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFVHJhbnNhY3Rpb25Vbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNUEkgU0dFIHVuaW9uIGZvciBJTyBTR0wncworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfTVBJX1NHRV9JT19VTklPTgoreworICAgIHVuaW9uCisgICAgeworICAgICAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICBTaW1wbGU7CisgICAgICAgIE1QSTJfU0dFX0NIQUlOX1VOSU9OICAgIENoYWluOworICAgIH0gdTsKK30gTVBJMl9NUElfU0dFX0lPX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfTVBJX1NHRV9JT19VTklPTiwKKyAgTXBpMk1waVNHRUlPVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyTXBpU0dFSU9Vbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNUEkgU0dFIHVuaW9uIGZvciBTR0wncyB3aXRoIFNpbXBsZSBhbmQgVHJhbnNhY3Rpb24gZWxlbWVudHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NHRV9UUkFOU19TSU1QTEVfVU5JT04KK3sKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgICAgIFNpbXBsZTsKKyAgICAgICAgTVBJMl9TR0VfVFJBTlNBQ1RJT05fVU5JT04gIFRyYW5zYWN0aW9uOworICAgIH0gdTsKK30gTVBJMl9TR0VfVFJBTlNfU0lNUExFX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0dFX1RSQU5TX1NJTVBMRV9VTklPTiwKKyAgTXBpMlNHRVRyYW5zU2ltcGxlVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFVHJhbnNTaW1wbGVVbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBBbGwgTVBJIFNHRSB0eXBlcyB1bmlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfTVBJX1NHRV9VTklPTgoreworICAgIHVuaW9uCisgICAgeworICAgICAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICAgICAgU2ltcGxlOworICAgICAgICBNUEkyX1NHRV9DSEFJTl9VTklPTiAgICAgICAgQ2hhaW47CisgICAgICAgIE1QSTJfU0dFX1RSQU5TQUNUSU9OX1VOSU9OICBUcmFuc2FjdGlvbjsKKyAgICB9IHU7Cit9IE1QSTJfTVBJX1NHRV9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX01QSV9TR0VfVU5JT04sCisgIE1waTJNcGlTZ2VVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJNcGlTZ2VVbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNUEkgU0dFIGZpZWxkIGRlZmluaXRpb24gYW5kIG1hc2tzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGbGFncyBmaWVsZCBiaXQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQgICAgICAgICAgICAgKDB4ODApCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgICAgICAgICAgICAoMHg0MCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfRUxFTUVOVF9UWVBFX01BU0sgICAgICAgICgweDMwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19MT0NBTF9BRERSRVNTICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0RJUkVDVElPTiAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfQUREUkVTU19TSVpFICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCAgICAgICAgICAgICAgKDB4MDEpCisKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyNCkKKworI2RlZmluZSBNUEkyX1NHRV9MRU5HVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MDBGRkZGRkYpCisjZGVmaW5lIE1QSTJfU0dFX0NIQUlOX0xFTkdUSF9NQVNLICAgICAgICAgICAgICAoMHgwMDAwRkZGRikKKworLyogRWxlbWVudCBUeXBlICovCisKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfVFJBTlNBQ1RJT05fRUxFTUVOVCAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0NIQUlOX0VMRU1FTlQgICAgICAgICAgICAoMHgzMCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfRUxFTUVOVF9NQVNLICAgICAgICAgICAgICgweDMwKQorCisvKiBBZGRyZXNzIGxvY2F0aW9uICovCisKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgICAgICAgICAgICgweDAwKQorCisvKiBEaXJlY3Rpb24gKi8KKworI2RlZmluZSBNUEkyX1NHRV9GTEFHU19JT0NfVE9fSE9TVCAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DICAgICAgICAgICAgICAoMHgwNCkKKworLyogQWRkcmVzcyBTaXplICovCisKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfMzJfQklUX0FERFJFU1NJTkcgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU182NF9CSVRfQUREUkVTU0lORyAgICAgICAgKDB4MDIpCisKKy8qIENvbnRleHQgU2l6ZSAqLworCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTXzMyX0JJVF9DT05URVhUICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TR0VfRkxBR1NfNjRfQklUX0NPTlRFWFQgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU185Nl9CSVRfQ09OVEVYVCAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTXzEyOF9CSVRfQ09OVEVYVCAgICAgICAgICAoMHgwNikKKworI2RlZmluZSBNUEkyX1NHRV9DSEFJTl9PRkZTRVRfTUFTSyAgICAgICAgICAgICAgKDB4MDBGRjAwMDApCisjZGVmaW5lIE1QSTJfU0dFX0NIQUlOX09GRlNFVF9TSElGVCAgICAgICAgICAgICAoMTYpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNUEkgU0dFIG9wZXJhdGlvbiBNYWNyb3MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNJTVBMRSBGbGFnc0xlbmd0aCBtYW5pcHVsYXRpb25zLi4uICovCisjZGVmaW5lIE1QSTJfU0dFX1NFVF9GTEFHUyhmKSAgICAgICAgICAoKFUzMikoZikgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQpCisjZGVmaW5lIE1QSTJfU0dFX0dFVF9GTEFHUyhmKSAgICAgICAgICAoKChmKSAmIH5NUEkyX1NHRV9MRU5HVEhfTUFTSykgPj4gTVBJMl9TR0VfRkxBR1NfU0hJRlQpCisjZGVmaW5lIE1QSTJfU0dFX0xFTkdUSChmKSAgICAgICAgICAgICAoKGYpICYgTVBJMl9TR0VfTEVOR1RIX01BU0spCisjZGVmaW5lIE1QSTJfU0dFX0NIQUlOX0xFTkdUSChmKSAgICAgICAoKGYpICYgTVBJMl9TR0VfQ0hBSU5fTEVOR1RIX01BU0spCisKKyNkZWZpbmUgTVBJMl9TR0VfU0VUX0ZMQUdTX0xFTkdUSChmLGwpIChNUEkyX1NHRV9TRVRfRkxBR1MoZikgfCBNUEkyX1NHRV9MRU5HVEgobCkpCisKKyNkZWZpbmUgTVBJMl9wU0dFX0dFVF9GTEFHUyhwc2cpICAgICAgICAgICAgTVBJMl9TR0VfR0VUX0ZMQUdTKChwc2cpLT5GbGFnc0xlbmd0aCkKKyNkZWZpbmUgTVBJMl9wU0dFX0dFVF9MRU5HVEgocHNnKSAgICAgICAgICAgTVBJMl9TR0VfTEVOR1RIKChwc2cpLT5GbGFnc0xlbmd0aCkKKyNkZWZpbmUgTVBJMl9wU0dFX1NFVF9GTEFHU19MRU5HVEgocHNnLGYsbCkgKHBzZyktPkZsYWdzTGVuZ3RoID0gTVBJMl9TR0VfU0VUX0ZMQUdTX0xFTkdUSChmLGwpCisKKy8qIENBVVRJT04gLSBUaGUgZm9sbG93aW5nIGFyZSBSRUFELU1PRElGWS1XUklURSEgKi8KKyNkZWZpbmUgTVBJMl9wU0dFX1NFVF9GTEFHUyhwc2csZikgICAgICAocHNnKS0+RmxhZ3NMZW5ndGggfD0gTVBJMl9TR0VfU0VUX0ZMQUdTKGYpCisjZGVmaW5lIE1QSTJfcFNHRV9TRVRfTEVOR1RIKHBzZyxsKSAgICAgKHBzZyktPkZsYWdzTGVuZ3RoIHw9IE1QSTJfU0dFX0xFTkdUSChsKQorCisjZGVmaW5lIE1QSTJfR0VUX0NIQUlOX09GRlNFVCh4KSAgICAoKHggJiBNUEkyX1NHRV9DSEFJTl9PRkZTRVRfTUFTSykgPj4gTVBJMl9TR0VfQ0hBSU5fT0ZGU0VUX1NISUZUKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgRnVzaW9uLU1QVCBJRUVFIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnRzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElFRUUgU2ltcGxlIEVsZW1lbnQgc3RydWN0dXJlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSUVFRV9TR0VfU0lNUExFMzIKK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzTGVuZ3RoOworfSBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9TR0VfU0lNUExFMzIsCisgIE1waTJJZWVlU2dlU2ltcGxlMzJfdCwgTVBJMl9QT0lOVEVSIHBNcGkySWVlZVNnZVNpbXBsZTMyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0lFRUVfU0dFX1NJTVBMRTY0Cit7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzczsKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsKK30gTVBJMl9JRUVFX1NHRV9TSU1QTEU2NCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lFRUVfU0dFX1NJTVBMRTY0LAorICBNcGkySWVlZVNnZVNpbXBsZTY0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkllZWVTZ2VTaW1wbGU2NF90OworCit0eXBlZGVmIHVuaW9uIF9NUEkyX0lFRUVfU0dFX1NJTVBMRV9VTklPTgoreworICAgIE1QSTJfSUVFRV9TR0VfU0lNUExFMzIgIFNpbXBsZTMyOworICAgIE1QSTJfSUVFRV9TR0VfU0lNUExFNjQgIFNpbXBsZTY0OworfSBNUEkyX0lFRUVfU0dFX1NJTVBMRV9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lFRUVfU0dFX1NJTVBMRV9VTklPTiwKKyAgTXBpMkllZWVTZ2VTaW1wbGVVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJJZWVlU2dlU2ltcGxlVW5pb25fdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSUVFRSBDaGFpbiBFbGVtZW50IHN0cnVjdHVyZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgTVBJMl9JRUVFX1NHRV9TSU1QTEUzMiAgTVBJMl9JRUVFX1NHRV9DSEFJTjMyOworCit0eXBlZGVmIE1QSTJfSUVFRV9TR0VfU0lNUExFNjQgIE1QSTJfSUVFRV9TR0VfQ0hBSU42NDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9JRUVFX1NHRV9DSEFJTl9VTklPTgoreworICAgIE1QSTJfSUVFRV9TR0VfQ0hBSU4zMiAgIENoYWluMzI7CisgICAgTVBJMl9JRUVFX1NHRV9DSEFJTjY0ICAgQ2hhaW42NDsKK30gTVBJMl9JRUVFX1NHRV9DSEFJTl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OLAorICBNcGkySWVlZVNnZUNoYWluVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkySWVlZVNnZUNoYWluVW5pb25fdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQWxsIElFRUUgU0dFIHR5cGVzIHVuaW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JRUVFX1NHRV9VTklPTgoreworICAgIHVuaW9uCisgICAgeworICAgICAgICBNUEkyX0lFRUVfU0dFX1NJTVBMRV9VTklPTiAgU2ltcGxlOworICAgICAgICBNUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OICAgQ2hhaW47CisgICAgfSB1OworfSBNUEkyX0lFRUVfU0dFX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSUVFRV9TR0VfVU5JT04sCisgIE1waTJJZWVlU2dlVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkySWVlZVNnZVVuaW9uX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElFRUUgU0dFIGZpZWxkIGRlZmluaXRpb25zIGFuZCBtYXNrcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRmxhZ3MgZmllbGQgYml0IGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgTVBJMl9JRUVFX1NHRV9GTEFHU19FTEVNRU5UX1RZUEVfTUFTSyAgICgweDgwKQorCisjZGVmaW5lIE1QSTJfSUVFRTMyX1NHRV9GTEFHU19TSElGVCAgICAgICAgICAgICAoMjQpCisKKyNkZWZpbmUgTVBJMl9JRUVFMzJfU0dFX0xFTkdUSF9NQVNLICAgICAgICAgICAgICgweDAwRkZGRkZGKQorCisvKiBFbGVtZW50IFR5cGUgKi8KKworI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfSUVFRV9TR0VfRkxBR1NfQ0hBSU5fRUxFTUVOVCAgICAgICAoMHg4MCkKKworLyogRGF0YSBMb2NhdGlvbiBBZGRyZXNzIFNwYWNlICovCisKKyNkZWZpbmUgTVBJMl9JRUVFX1NHRV9GTEFHU19BRERSX01BU0sgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX1NZU1RFTV9BRERSICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfSUVFRV9TR0VfRkxBR1NfSU9DRERSX0FERFIgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9JRUVFX1NHRV9GTEFHU19JT0NQTEJfQUREUiAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERSICAgICAgKDB4MDMpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElFRUUgU0dFIG9wZXJhdGlvbiBNYWNyb3MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNJTVBMRSBGbGFnc0xlbmd0aCBtYW5pcHVsYXRpb25zLi4uICovCisjZGVmaW5lIE1QSTJfSUVFRTMyX1NHRV9TRVRfRkxBR1MoZikgICAgICgoVTMyKShmKSA8PCBNUEkyX0lFRUUzMl9TR0VfRkxBR1NfU0hJRlQpCisjZGVmaW5lIE1QSTJfSUVFRTMyX1NHRV9HRVRfRkxBR1MoZikgICAgICgoKGYpICYgfk1QSTJfSUVFRTMyX1NHRV9MRU5HVEhfTUFTSykgPj4gTVBJMl9JRUVFMzJfU0dFX0ZMQUdTX1NISUZUKQorI2RlZmluZSBNUEkyX0lFRUUzMl9TR0VfTEVOR1RIKGYpICAgICAgICAoKGYpICYgTVBJMl9JRUVFMzJfU0dFX0xFTkdUSF9NQVNLKQorCisjZGVmaW5lIE1QSTJfSUVFRTMyX1NHRV9TRVRfRkxBR1NfTEVOR1RIKGYsIGwpICAgICAgKE1QSTJfSUVFRTMyX1NHRV9TRVRfRkxBR1MoZikgfCBNUEkyX0lFRUUzMl9TR0VfTEVOR1RIKGwpKQorCisjZGVmaW5lIE1QSTJfSUVFRTMyX3BTR0VfR0VUX0ZMQUdTKHBzZykgICAgICAgICAgICAgTVBJMl9JRUVFMzJfU0dFX0dFVF9GTEFHUygocHNnKS0+RmxhZ3NMZW5ndGgpCisjZGVmaW5lIE1QSTJfSUVFRTMyX3BTR0VfR0VUX0xFTkdUSChwc2cpICAgICAgICAgICAgTVBJMl9JRUVFMzJfU0dFX0xFTkdUSCgocHNnKS0+RmxhZ3NMZW5ndGgpCisjZGVmaW5lIE1QSTJfSUVFRTMyX3BTR0VfU0VUX0ZMQUdTX0xFTkdUSChwc2csZixsKSAgKHBzZyktPkZsYWdzTGVuZ3RoID0gTVBJMl9JRUVFMzJfU0dFX1NFVF9GTEFHU19MRU5HVEgoZixsKQorCisvKiBDQVVUSU9OIC0gVGhlIGZvbGxvd2luZyBhcmUgUkVBRC1NT0RJRlktV1JJVEUhICovCisjZGVmaW5lIE1QSTJfSUVFRTMyX3BTR0VfU0VUX0ZMQUdTKHBzZyxmKSAgICAocHNnKS0+RmxhZ3NMZW5ndGggfD0gTVBJMl9JRUVFMzJfU0dFX1NFVF9GTEFHUyhmKQorI2RlZmluZSBNUEkyX0lFRUUzMl9wU0dFX1NFVF9MRU5HVEgocHNnLGwpICAgKHBzZyktPkZsYWdzTGVuZ3RoIHw9IE1QSTJfSUVFRTMyX1NHRV9MRU5HVEgobCkKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICBGdXNpb24tTVBUIE1QSS9JRUVFIFNjYXR0ZXIgR2F0aGVyIFVuaW9ucworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gX01QSTJfU0lNUExFX1NHRV9VTklPTgoreworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgICAgICBNcGlTaW1wbGU7CisgICAgTVBJMl9JRUVFX1NHRV9TSU1QTEVfVU5JT04gIEllZWVTaW1wbGU7Cit9IE1QSTJfU0lNUExFX1NHRV9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NJTVBMRV9TR0VfVU5JT04sCisgIE1waTJTaW1wbGVTZ2VVbnRpb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2ltcGxlU2dlVW50aW9uX3Q7CisKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9TR0VfSU9fVU5JT04KK3sKKyAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICAgICAgTXBpU2ltcGxlOworICAgIE1QSTJfU0dFX0NIQUlOX1VOSU9OICAgICAgICBNcGlDaGFpbjsKKyAgICBNUEkyX0lFRUVfU0dFX1NJTVBMRV9VTklPTiAgSWVlZVNpbXBsZTsKKyAgICBNUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OICAgSWVlZUNoYWluOworfSBNUEkyX1NHRV9JT19VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NHRV9JT19VTklPTiwKKyAgTXBpMlNHRUlPVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0dFSU9Vbmlvbl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBWYWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkLCB1c2VkIGluIG1hbnkgcmVxdWVzdCBtZXNzYWdlcyB3aXRoIGFuIFNHTAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdmFsdWVzIGZvciBNUEkgU0dMIERhdGEgTG9jYXRpb24gQWRkcmVzcyBTcGFjZSBzdWJmaWVsZCAqLworI2RlZmluZSBNUEkyX1NHTEZMQUdTX0FERFJFU1NfU1BBQ0VfTUFTSyAgICAgICAgICAgICgweDBDKQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX1NZU1RFTV9BRERSRVNTX1NQQUNFICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX0lPQ0REUl9BRERSRVNTX1NQQUNFICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX0lPQ1BMQl9BRERSRVNTX1NQQUNFICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX0lPQ1BMQk5UQV9BRERSRVNTX1NQQUNFICAgICAgICgweDBDKQorLyogdmFsdWVzIGZvciBTR0wgVHlwZSBzdWJmaWVsZCAqLworI2RlZmluZSBNUEkyX1NHTEZMQUdTX1NHTF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX1NHTF9UWVBFX01QSSAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX1NHTF9UWVBFX0lFRUUzMiAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NHTEZMQUdTX1NHTF9UWVBFX0lFRUU2NCAgICAgICAgICAgICAgICgweDAyKQorCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyN2NmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtMCwwICsxLDIxNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgorICoKKyAqCisgKiAgICAgICAgICAgTmFtZTogIG1waTJfY25mZy5oCisgKiAgICAgICAgICBUaXRsZTogIE1QSSBDb25maWd1cmF0aW9uIG1lc3NhZ2VzIGFuZCBwYWdlcworICogIENyZWF0aW9uIERhdGU6ICBOb3ZlbWJlciAxMCwgMjAwNgorICoKKyAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMAorICoKKyAqICBWZXJzaW9uIEhpc3RvcnkKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgorICogIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgQWRkZWQgZGVmaW5lcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAyIFBoeUZsYWdzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWFudWZhY3R1cmluZyBQYWdlIDExLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX0NPTk5FQ1RPUl9FTkRfREVWSUNFCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAyICBBZGRpbmcgZ2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHByb2R1Y3Qtc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgICAgIE1hbnVmYWN0dXJpbmcgcGFnZXM6IE1QSTJfQ09ORklHX1BBR0VfTUFOVUZBQ1RVUklOR19QUy4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJld29yayBvZiBCSU9TIFBhZ2UgMiBjb25maWd1cmF0aW9uIHBhZ2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBNUEkyX0JJT1NQQUdFMl9CT09UX0RFVklDRSB0byBiZSBhIHVuaW9uIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgZm9ybXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBjb25maWd1cmF0aW9uIHBhZ2VzIElPQyBQYWdlIDggYW5kIERyaXZlcgorICogICAgICAgICAgICAgICAgICAgICAgUGVyc2lzdGVudCBNYXBwaW5nIFBhZ2UgMC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIE1vZGlmaWVkIGNvbmZpZ3VyYXRpb24gcGFnZXMgZGVhbGluZyB3aXRoIEludGVncmF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgKE1hbnVmYWN0dXJpbmcgUGFnZSA0LCBSQUlEIFZvbHVtZSBQYWdlcyAwIGFuZCAxLAorICogICAgICAgICAgICAgICAgICAgICAgUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2VzIDAgYW5kIDEsIFJBSUQgQ29uZmlndXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyB2YWx1ZSBmb3IgQWNjZXNzU3RhdHVzIGZpZWxkIG9mIFNBUyBEZXZpY2UKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMCAoX1NBVEFfTkVFRFNfSU5JVElBTElaQVRJT04pLgorICogIDEwLTMxLTA3ICAwMi4wMC4wNCAgQWRkZWQgbWlzc2luZyBTRVBEZXZIYW5kbGUgZmllbGQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfU0FTX0VOQ0xPU1VSRV8wLgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgTW9kaWZpZWQgSU8gVW5pdCBQYWdlIDAgdG8gdXNlIDMyLWJpdCB2ZXJzaW9uIGZpZWxkcyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE5WREFUQS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIElPQyBQYWdlIDcgdG8gdXNlIG1hc2tzIGFuZCBhZGRlZCBmaWVsZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIFNBU0Jyb2FkY2FzdFByaW1pdGl2ZU1hc2tzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9CSU9TXzQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX0xPR18wLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBEZXZpY2UgSURzLgorICogICAgICAgICAgICAgICAgICAgICAgVXBkYXRlZCBJbnRlZ3JhdGVkIFJBSUQgY29uZmlndXJhdGlvbiBwYWdlcyBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIE1hbnVmYWN0dXJpbmcgUGFnZSA0LCBJT0MgUGFnZSA2LCBhbmQgUkFJRCBDb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDAuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA3ICBBZGRlZCBkZWZpbmUgTVBJMl9NQU5QQUdFNF9NSVhfU1NEX1NBU19TQVRBLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIE1QSTJfTUFOUEFHRTRfUEhZU0RJU0tfMTI4TUJfQ09FUkNJT04uCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19FTkNMT1NVUkVfU0xPVF9NQVBQSU5HLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbWlzc2luZyBNYXhOdW1Sb3V0ZWRTYXNBZGRyZXNzZXMgZmllbGQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQb3J0IFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIHN0cnVjdHVyZSBsYXlvdXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVBQSU5HXzAuCisgKiAgMDYtMjctMDggIDAyLjAwLjA4ICBDaGFuZ2VkIE1QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMSB0byB1c2UKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfUkFJRF9QSFlTX0RJU0sxX1BBVEhfTUFYIHRvIHNpemUgdGhlIGFycmF5LgorICogIDEwLTAyLTA4ICAwMi4wMC4wOSAgQ2hhbmdlZCBNUEkyX1JBSURfUEdBRF9DT05GSUdOVU1fTUFTSyBmcm9tIDB4MDAwMEZGRkYKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIDB4MDAwMDAwRkYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHZhbHVlcyBmb3IgdGhlIFBoeXNpY2FsIERpc2sgQ29lcmNpb24gU2l6ZQorICogICAgICAgICAgICAgICAgICAgICAgYml0cyBpbiB0aGUgRmxhZ3MgZmllbGQgb2YgTWFudWZhY3R1cmluZyBQYWdlIDQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBwcm9kdWN0LXNwZWNpZmljIE1hbnVmYWN0dXJpbmcgcGFnZXMgMTYgdG8gMzEuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBGbGFncyBiaXRzIGZvciBjb250cm9sbGluZyB3cml0ZSBjYWNoZSBvbiBTQVRBCisgKiAgICAgICAgICAgICAgICAgICAgICBkcml2ZXMgaW4gSU8gVW5pdCBQYWdlIDEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgYml0IHRvIEFkZGl0aW9uYWxDb250cm9sRmxhZ3Mgb2YgU0FTIElPIFVuaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMSB0byBjb250cm9sIEludmFsaWQgVG9wb2xvZ3kgQ29ycmVjdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgZGVmaW5lcyBmb3IgUkFJRCBWb2x1bWUgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIG1lYW5pbmcgb2YgUkFJRCBWb2x1bWUgUGFnZSAwIFZvbHVtZVNldHRpbmdzCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgZm9yIGF1dG8tY29uZmlndXJlIG9mIGhvdC1zd2FwIGRyaXZlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFN1cHBvcnRlZFBoeXNEaXNrcyBmaWVsZCB0byBSQUlEIFZvbHVtZSBQYWdlIDEgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICBhZGRlZCByZWxhdGVkIGRlZmluZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQaHlzRGlza0F0dHJpYnV0ZXMgZmllbGQgKGFuZCByZWxhdGVkIGRlZmluZXMpIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfUEhZSU5GT19QSFlfVkFDQU5UIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHRocmVlIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0cyBmb3IgU0FTIElPIFVuaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMCBhbmQgU0FTIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgbXVsdGlwbGV4aW5nIGluZm9ybWF0aW9uIGZyb20gU0FTIElPIFVuaXQgcGFnZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBCb290RGV2aWNlV2FpdFRpbWUgZmllbGQgdG8gU0FTIElPIFVuaXQgUGFnZSA0LgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBab25lIEFkZHJlc3MgUmVzb2x2ZWQgYml0IGZyb20gUGh5SW5mbyBhbmQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgUGFnZSAwIEZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBBY2Nlc3NTdGF0dXMgdmFsdWVzIHRvIFNBUyBEZXZpY2UgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5kaWNhdGluZyByb3V0aW5nIHByb2JsZW1zLiBBZGRlZCAzIHJlc2VydmVkIHdvcmRzCisgKiAgICAgICAgICAgICAgICAgICAgICB0byB0aGlzIHBhZ2UuCisgKiAgMDEtMTktMDkgIDAyLjAwLjEwICBGaXhlZCBkZWZpbmVzIGZvciBHUElPVmFsIGZpZWxkIG9mIElPIFVuaXQgUGFnZSAzLgorICogICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0ZWQgbWlzc2luZyByZXNlcnZlZCBmaWVsZCBpbnRvIHN0cnVjdHVyZSBmb3IgSU9DCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBtb3JlIHBlbmRpbmcgdGFzayBiaXRzIHRvIFJBSUQgVm9sdW1lIFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lU3RhdHVzRmxhZ3MgZGVmaW5lcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX05PVF9DRVJUSUZJRUQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYSBuZXcgRGlzY292ZXJ5U3RhdHVzIGJpdCBmb3IgU0FTIElPIFVuaXQgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgU0FTIEV4cGFuZGVyIFBhZ2UgMCB0byBmbGFnIGEgZG93bnN0cmVhbSBpbml0aWF0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gaW4gc2ltcGxpZmllZCByb3V0aW5nIG1vZGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIFNBVEEgSW5pdCBGYWlsdXJlIGRlZmluZXMgZm9yIERpc2NvdmVyeVN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgZmllbGRzIG9mIFNBUyBJTyBVbml0IFBhZ2UgMCBhbmQgU0FTIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19ERVZJQ0VfQkxPQ0tFRCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQb3J0R3JvdXBzLCBEbWFHcm91cCwgYW5kIENvbnRyb2xHcm91cCBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFNBUyBEZXZpY2UgUGFnZSAwLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBNUEkyX0NORkdfSAorI2RlZmluZSBNUEkyX0NORkdfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb25maWd1cmF0aW9uIFBhZ2UgSGVhZGVyIGFuZCBkZWZpbmVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29uZmlnIFBhZ2UgSGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9IRUFERVIKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgUGFnZVZlcnNpb247ICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgUGFnZUxlbmd0aDsgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgUGFnZU51bWJlcjsgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgUGFnZVR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9IRUFERVIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9IRUFERVIsCisgIE1waTJDb25maWdQYWdlSGVhZGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkNvbmZpZ1BhZ2VIZWFkZXJfdDsKKwordHlwZWRlZiB1bmlvbiBfTVBJMl9DT05GSUdfUEFHRV9IRUFERVJfVU5JT04KK3sKKyAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICBTdHJ1Y3Q7CisgICBVOCAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNbNF07CisgICBVMTYgICAgICAgICAgICAgICAgICAgICAgV29yZDE2WzJdOworICAgVTMyICAgICAgICAgICAgICAgICAgICAgIFdvcmQzMjsKK30gTVBJMl9DT05GSUdfUEFHRV9IRUFERVJfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9IRUFERVJfVU5JT04sCisgIE1waTJDb25maWdQYWdlSGVhZGVyVW5pb24sIE1QSTJfUE9JTlRFUiBwTXBpMkNvbmZpZ1BhZ2VIZWFkZXJVbmlvbjsKKworLyogRXh0ZW5kZWQgQ29uZmlnIFBhZ2UgSGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgIFBhZ2VWZXJzaW9uOyAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgUGFnZU51bWJlcjsgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgIFBhZ2VUeXBlOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICBFeHRQYWdlTGVuZ3RoOyAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgRXh0UGFnZVR5cGU7ICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCit9IE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSLAorICBNcGkyQ29uZmlnRXh0ZW5kZWRQYWdlSGVhZGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkNvbmZpZ0V4dGVuZGVkUGFnZUhlYWRlcl90OworCit0eXBlZGVmIHVuaW9uIF9NUEkyX0NPTkZJR19FWFRfUEFHRV9IRUFERVJfVU5JT04KK3sKKyAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgIFN0cnVjdDsKKyAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSIEV4dDsKKyAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVzWzhdOworICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZDE2WzRdOworICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZDMyWzJdOworfSBNUEkyX0NPTkZJR19FWFRfUEFHRV9IRUFERVJfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfRVhUX1BBR0VfSEVBREVSX1VOSU9OLAorICBNcGkyQ29uZmlnUGFnZUV4dGVuZGVkSGVhZGVyVW5pb24sIE1QSTJfUE9JTlRFUiBwTXBpMkNvbmZpZ1BhZ2VFeHRlbmRlZEhlYWRlclVuaW9uOworCisKKy8qIFBhZ2VUeXBlIGZpZWxkIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0NPTkZJR19QQUdFQVRUUl9SRUFEX09OTFkgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0NPTkZJR19QQUdFQVRUUl9DSEFOR0VBQkxFICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0NPTkZJR19QQUdFQVRUUl9QRVJTSVNURU5UICAgICAgICAgICAgICgweDIwKQorI2RlZmluZSBNUEkyX0NPTkZJR19QQUdFQVRUUl9NQVNLICAgICAgICAgICAgICAgICAgICgweEYwKQorCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPX1VOSVQgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPQyAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX0JJT1MgICAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfVk9MVU1FICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX01BTlVGQUNUVVJJTkcgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfUEhZU0RJU0sgICAgICAgICAgKDB4MEEpCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfQ09ORklHX1BBR0VUWVBFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MEYpCisKKyNkZWZpbmUgTVBJMl9DT05GSUdfVFlQRU5VTV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRkZGKQorCisKKy8qIEV4dFBhZ2VUeXBlIGZpZWxkIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfSU9fVU5JVCAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfRVhQQU5ERVIgICAgICAgICgweDExKQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfREVWSUNFICAgICAgICAgICgweDEyKQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfUEhZICAgICAgICAgICAgICgweDEzKQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9MT0cgICAgICAgICAgICAgICAgICgweDE0KQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9FTkNMT1NVUkUgICAgICAgICAgICgweDE1KQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9SQUlEX0NPTkZJRyAgICAgICAgICgweDE2KQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9EUklWRVJfTUFQUElORyAgICAgICgweDE3KQorI2RlZmluZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfUE9SVCAgICAgICAgICAgICgweDE4KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFBhZ2VBZGRyZXNzIGRlZmluZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSQUlEIFZvbHVtZSBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fTUFTSyAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fSEFORExFICAgICAgICAgICAoMHgxMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX1JBSURfVk9MVU1FX1BHQURfSEFORExFX01BU0sgICAgICAgICAgICgweDAwMDBGRkZGKQorCisKKy8qIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9QSFlTRElTS19QR0FEX0ZPUk1fTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMDApCisjZGVmaW5lIE1QSTJfUEhZU0RJU0tfUEdBRF9GT1JNX0dFVF9ORVhUX1BIWVNESVNLTlVNICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9QSFlTRElTS05VTSAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTS19QR0FEX0ZPUk1fREVWSEFORExFICAgICAgICAgICAgICAgKDB4MjAwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9QSFlTRElTS19QR0FEX1BIWVNESVNLTlVNX01BU0sgICAgICAgICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0tfUEdBRF9ERVZIQU5ETEVfTUFTSyAgICAgICAgICAgICAgICgweDAwMDBGRkZGKQorCisKKy8qIFNBUyBFeHBhbmRlciBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9HRVRfTkVYVF9ITkRMICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9ITkRMX1BIWV9OVU0gICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9ITkRMICAgICAgICAgICAgICAoMHgyMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9IQU5ETEVfTUFTSyAgICAgICAgICAgICgweDAwMDBGRkZGKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9QSFlOVU1fTUFTSyAgICAgICAgICAgICgweDAwRkYwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRfUEdBRF9QSFlOVU1fU0hJRlQgICAgICAgICAgICgxNikKKworCisvKiBTQVMgRGV2aWNlIFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSAgICAgICAgICAgICgweDIwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9QR0FEX0hBTkRMRV9NQVNLICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisKKworLyogU0FTIFBIWSBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfUEhZX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZX1BHQURfRk9STV9QSFlfTlVNQkVSICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZX1BHQURfRk9STV9QSFlfVEJMX0lOREVYICAgICAgICAoMHgxMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX1NBU19QSFlfUEdBRF9QSFlfTlVNQkVSX01BU0sgICAgICAgICAgICgweDAwMDAwMEZGKQorI2RlZmluZSBNUEkyX1NBU19QSFlfUEdBRF9QSFlfVEJMX0lOREVYX01BU0sgICAgICAgICgweDAwMDBGRkZGKQorCisKKy8qIFNBUyBQb3J0IFBhZ2VBZGRyZXNzIGZvcm1hdCAqLworI2RlZmluZSBNUEkyX1NBU1BPUlRfUEdBRF9GT1JNX01BU0sgICAgICAgICAgICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU1BPUlRfUEdBRF9GT1JNX0dFVF9ORVhUX1BPUlQgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU1BPUlRfUEdBRF9GT1JNX1BPUlRfTlVNICAgICAgICAgICAgICgweDEwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfU0FTUE9SVF9QR0FEX1BPUlROVU1CRVJfTUFTSyAgICAgICAgICAgKDB4MDAwMDBGRkYpCisKKworLyogU0FTIEVuY2xvc3VyZSBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfRU5DTE9TX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRU5DTE9TX1BHQURfRk9STV9HRVRfTkVYVF9IQU5ETEUgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRU5DTE9TX1BHQURfRk9STV9IQU5ETEUgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX1NBU19FTkNMT1NfUEdBRF9IQU5ETEVfTUFTSyAgICAgICAgICAgICgweDAwMDBGRkZGKQorCisKKy8qIFJBSUQgQ29uZmlndXJhdGlvbiBQYWdlQWRkcmVzcyBmb3JtYXQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX1BHQURfRk9STV9HRVRfTkVYVF9DT05GSUdOVU0gICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX1BHQURfRk9STV9DT05GSUdOVU0gICAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX1BHQURfRk9STV9BQ1RJVkVfQ09ORklHICAgICAgICAgICAoMHgyMDAwMDAwMCkKKworI2RlZmluZSBNUEkyX1JBSURfUEdBRF9DT05GSUdOVU1fTUFTSyAgICAgICAgICAgICAgICgweDAwMDAwMEZGKQorCisKKy8qIERyaXZlciBQZXJzaXN0ZW50IE1hcHBpbmcgUGFnZUFkZHJlc3MgZm9ybWF0ICovCisjZGVmaW5lIE1QSTJfRFBNX1BHQURfRk9STV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMDApCisjZGVmaW5lIE1QSTJfRFBNX1BHQURfRk9STV9FTlRSWV9SQU5HRSAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgTVBJMl9EUE1fUEdBRF9FTlRSWV9DT1VOVF9NQVNLICAgICAgICAgICAgICAoMHgwRkZGMDAwMCkKKyNkZWZpbmUgTVBJMl9EUE1fUEdBRF9FTlRSWV9DT1VOVF9TSElGVCAgICAgICAgICAgICAoMTYpCisjZGVmaW5lIE1QSTJfRFBNX1BHQURfU1RBUlRfRU5UUllfTUFTSyAgICAgICAgICAgICAgKDB4MDAwMEZGRkYpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb25maWd1cmF0aW9uIG1lc3NhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb25maWd1cmF0aW9uIFJlcXVlc3QgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1JFUVVFU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEV4dFBhZ2VMZW5ndGg7ICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRXh0UGFnZVR5cGU7ICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFBhZ2VBZGRyZXNzOyAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgTVBJMl9TR0VfSU9fVU5JT04gICAgICAgUGFnZUJ1ZmZlclNHRTsgICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9DT05GSUdfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19SRVFVRVNULAorICBNcGkyQ29uZmlnUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJDb25maWdSZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIEFjdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVIgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9ERUZBVUxUICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9OVlJBTSAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0RFRkFVTFQgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX05WUkFNICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9HRVRfQ0hBTkdFQUJMRSAgICAgICgweDA3KQorCisvKiB2YWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkIGFyZSBpbiB0aGUgU0dMIHNlY3Rpb24gb2YgbXBpMi5oICovCisKKworLyogQ29uZmlnIFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19SRVBMWQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRXh0UGFnZUxlbmd0aDsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBFeHRQYWdlVHlwZTsgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9DT05GSUdfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUkVQTFksCisgIE1waTJDb25maWdSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJDb25maWdSZXBseV90OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICAgICAgICAgQyBvIG4gZiBpIGcgdSByIGEgdCBpIG8gbiAgICBQIGEgZyBlIHMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIE1hbnVmYWN0dXJpbmcgQ29uZmlnIHBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0kgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKKworLyogU0FTICovCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMDA0ICAgICAgICAgICAgICAgICAgKDB4MDA3MCkKKyNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIwMDggICAgICAgICAgICAgICAgICAoMHgwMDcyKQorI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjEwOF8xICAgICAgICAgICAgICAgICgweDAwNzQpCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTA4XzIgICAgICAgICAgICAgICAgKDB4MDA3NikKKyNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMDhfMyAgICAgICAgICAgICAgICAoMHgwMDc3KQorI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjExNl8xICAgICAgICAgICAgICAgICgweDAwNjQpCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTE2XzIgICAgICAgICAgICAgICAgKDB4MDA2NSkKKworCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9NQU5fMAoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hpcE5hbWVbMTZdOyAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGlwUmV2aXNpb25bOF07ICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEJvYXJkTmFtZVsxNl07ICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQm9hcmRBc3NlbWJseVsxNl07ICAgICAgICAgIC8qIDB4MkMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBCb2FyZFRyYWNlck51bWJlclsxNl07ICAgICAgLyogMHgzQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl8wLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTUFOXzAsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKworCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9NQU5fMQoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBEWzI1Nl07ICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fMSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl8xLAorICBNcGkyTWFudWZhY3R1cmluZ1BhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlMV90OworCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ0hJUF9SRVZJU0lPTl9JRAoreworICAgIFUxNiBEZXZpY2VJRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggIFBDSVJldmlzaW9uSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX0NISVBfUkVWSVNJT05fSUQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DSElQX1JFVklTSU9OX0lELAorICBNcGkyQ2hpcFJldmlzaW9uSWRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQ2hpcFJldmlzaW9uSWRfdDsKKworCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgMiAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX01BTl9QQUdFXzJfSFdfU0VUVElOR1NfV09SRFMKKyNkZWZpbmUgTVBJMl9NQU5fUEFHRV8yX0hXX1NFVFRJTkdTX1dPUkRTICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzIKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIE1QSTJfQ0hJUF9SRVZJU0lPTl9JRCAgIENoaXBJZDsgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSHdTZXR0aW5nc1tNUEkyX01BTl9QQUdFXzJfSFdfU0VUVElOR1NfV09SRFNdOy8qIDB4MDggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fMiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl8yLAorICBNcGkyTWFudWZhY3R1cmluZ1BhZ2UyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlMl90OworCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzJfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICgweDAwKQorCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSAzICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfTUFOX1BBR0VfM19JTkZPX1dPUkRTCisjZGVmaW5lIE1QSTJfTUFOX1BBR0VfM19JTkZPX1dPUkRTICAgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl8zCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICAgICAgSGVhZGVyOyAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBNUEkyX0NISVBfUkVWSVNJT05fSUQgICAgICAgICAgICAgICBDaGlwSWQ7ICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9bTVBJMl9NQU5fUEFHRV8zX0lORk9fV09SRFNdOy8qIDB4MDggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fMywKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl8zLAorICBNcGkyTWFudWZhY3R1cmluZ1BhZ2UzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlM190OworCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzNfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICgweDAwKQorCisKKy8qIE1hbnVmYWN0dXJpbmcgUGFnZSA0ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX01BTlBBR0U0X1BXUl9TQVZFX1NFVFRJTkdTCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyU2F2ZUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbE9wZXJhdGlvbnNTbGVlcFRpbWU7ICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxPcGVyYXRpb25zUnVuVGltZTsgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RJZGxlVGltZTsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworfSBNUEkyX01BTlBBR0U0X1BXUl9TQVZFX1NFVFRJTkdTLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfTUFOUEFHRTRfUFdSX1NBVkVfU0VUVElOR1MsCisgIE1waTJNYW5QYWdlNFB3clNhdmVTZXR0aW5nc190LCBNUEkyX1BPSU5URVIgcE1waTJNYW5QYWdlNFB3clNhdmVTZXR0aW5nc190OworCisvKiBkZWZpbmVzIGZvciB0aGUgUG93ZXJTYXZlRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9NQVNLX1BPV0VSU0FWRV9NT0RFICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUE9XRVJTQVZFX01PREVfRElTQUJMRUQgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X0NVU1RPTV9QT1dFUlNBVkVfTU9ERSAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9GVUxMX1BPV0VSU0FWRV9NT0RFICAgICAgICAgICAgICAgKDB4MDIpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl80Cit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICAgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5xdWlyeVNpemU7ICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5xdWlyeURhdGFbNTZdOyAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBSUQwVm9sdW1lU2V0dGluZ3M7ICAgIC8qIDB4NDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQUlEMUVWb2x1bWVTZXR0aW5nczsgICAvKiAweDRDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFJRDFWb2x1bWVTZXR0aW5nczsgICAgLyogMHg1MCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBSUQxMFZvbHVtZVNldHRpbmdzOyAgIC8qIDB4NTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAvKiAweDU4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgLyogMHg1QyAqLworICAgIE1QSTJfTUFOUEFHRTRfUFdSX1NBVkVfU0VUVElOR1MgICAgIFBvd2VyU2F2ZVNldHRpbmdzOyAgICAgIC8qIDB4NjAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhPQ0VEaXNrczsgICAgICAgICAgICAvKiAweDY0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzeW5jUmF0ZTsgICAgICAgICAgICAgLyogMHg2NSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTY3J1YkR1cmF0aW9uOyAgICAgIC8qIDB4NjYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhIb3RTcGFyZXM7ICAgICAgICAgICAvKiAweDY4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UGh5c0Rpc2tzUGVyVm9sOyAgICAgLyogMHg2OSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFBoeXNEaXNrczsgICAgICAgICAgIC8qIDB4NkEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhWb2x1bWVzOyAgICAgICAgICAgICAvKiAweDZCICovCit9IE1QSTJfQ09ORklHX1BBR0VfTUFOXzQsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fNCwKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlNF90LCBNUEkyX1BPSU5URVIgcE1waTJNYW51ZmFjdHVyaW5nUGFnZTRfdDsKKworI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkc0X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAoMHgwQSkKKworLyogTWFudWZhY3R1cmluZyBQYWdlIDQgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9NRVRBREFUQV9TSVpFX01BU0sgICAgICAgICAgICAgICAgKDB4MDAwMzAwMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfTUVUQURBVEFfNTEyTUIgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfTUlYX1NTRF9TQVNfU0FUQSAgICAgICAgICAgICAgICAgICgweDAwMDA4MDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X01JWF9TU0RfQU5EX05PTl9TU0QgICAgICAgICAgICAgICAoMHgwMDAwNDAwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9ISURFX1BIWVNESVNLX05PTl9JUiAgICAgICAgICAgICAgKDB4MDAwMDIwMDApCisKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9NQVNLX1BIWVNESVNLX0NPRVJDSU9OICAgICAgICAgICAgKDB4MDAwMDFDMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUEhZU0RJU0tfQ09FUkNJT05fMUdCICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X1BIWVNESVNLXzEyOE1CX0NPRVJDSU9OICAgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9QSFlTRElTS19BREFQVElWRV9DT0VSQ0lPTiAgICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUEhZU0RJU0tfWkVST19DT0VSQ0lPTiAgICAgICAgICAgICgweDAwMDAwQzAwKQorCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfTUFTS19CQURfQkxPQ0tfTUFSS0lORyAgICAgICAgICAgICgweDAwMDAwMzAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X0RFRkFVTFRfQkFEX0JMT0NLX01BUktJTkcgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9UQUJMRV9CQURfQkxPQ0tfTUFSS0lORyAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfV1JJVEVfTE9OR19CQURfQkxPQ0tfTUFSS0lORyAgICAgICgweDAwMDAwMjAwKQorCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfRk9SQ0VfT0ZGTElORV9GQUlMT1ZFUiAgICAgICAgICAgICgweDAwMDAwMDgwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X1JBSUQxMF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9SQUlEMUVfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfUkFJRDFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X1JBSUQwX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFNF9JUl9NT0RFUEFHRThfRElTQUJMRSAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfTUFOUEFHRTRfSU1fUkVTWU5DX0NBQ0hFX0VOQUJMRSAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX01BTlBBR0U0X0lSX05PX01JWF9TQVNfU0FUQSAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgNSAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggb3IgTnVtUGh5cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfTUFOX1BBR0VfNV9QSFlfRU5UUklFUworI2RlZmluZSBNUEkyX01BTl9QQUdFXzVfUEhZX0VOVFJJRVMgICAgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9NQU5VRkFDVFVSSU5HNV9FTlRSWQoreworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdXSUQ7ICAgICAgICAgICAvKiAweDAwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlTmFtZTsgICAgIC8qIDB4MDggKi8KK30gTVBJMl9NQU5VRkFDVFVSSU5HNV9FTlRSWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX01BTlVGQUNUVVJJTkc1X0VOVFJZLAorICBNcGkyTWFudWZhY3R1cmluZzVFbnRyeV90LCBNUEkyX1BPSU5URVIgcE1waTJNYW51ZmFjdHVyaW5nNUVudHJ5X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl81Cit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgICAgICAgICAgICAgSGVhZGVyOyAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAvKiAweDA1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgIC8qIDB4MDYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAvKiAweDBDICovCisgICAgTVBJMl9NQU5VRkFDVFVSSU5HNV9FTlRSWSAgICAgICAgICAgUGh5W01QSTJfTUFOX1BBR0VfNV9QSFlfRU5UUklFU107LyogMHgwOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl81LAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTUFOXzUsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTVfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2U1X3Q7CisKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HNV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgKDB4MDMpCisKKworLyogTWFudWZhY3R1cmluZyBQYWdlIDYgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzYKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiAgICAgICAgIEhlYWRlcjsgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdFNwZWNpZmljSW5mbzsvKiAweDA0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfTUFOXzYsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fNiwKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlNl90LCBNUEkyX1BPSU5URVIgcE1waTJNYW51ZmFjdHVyaW5nUGFnZTZfdDsKKworI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkc2X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAoMHgwMCkKKworCisvKiBNYW51ZmFjdHVyaW5nIFBhZ2UgNyAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9NQU5QQUdFN19DT05ORUNUT1JfSU5GTworeworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBQaW5vdXQ7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3RvclsxNl07ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb247ICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Q7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMHgxOCAqLworfSBNUEkyX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk8sCisgIE1waTJNYW5QYWdlN0Nvbm5lY3RvckluZm9fdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFuUGFnZTdDb25uZWN0b3JJbmZvX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBQaW5vdXQgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0ODRfTDQgICAgICAgICAgICAgICAgKDB4MDAwODAwMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfUElOT1VUX1NGRl84NDg0X0wzICAgICAgICAgICAgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ4NF9MMiAgICAgICAgICAgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0ODRfTDEgICAgICAgICAgICAgICAgKDB4MDAwMTAwMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfUElOT1VUX1NGRl84NDcwX0w0ICAgICAgICAgICAgICAgICgweDAwMDAwODAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ3MF9MMyAgICAgICAgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0NzBfTDIgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfUElOT1VUX1NGRl84NDcwX0wxICAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ4MiAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19QSU5PVVRfQ09OTkVDVElPTl9VTktOT1dOICAgICAgICAgKDB4MDAwMDAwMDEpCisKKy8qIGRlZmluZXMgZm9yIHRoZSBMb2NhdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX01BTlBBR0U3X0xPQ0FUSU9OX1VOS05PV04gICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19MT0NBVElPTl9JTlRFUk5BTCAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfTE9DQVRJT05fRVhURVJOQUwgICAgICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX01BTlBBR0U3X0xPQ0FUSU9OX1NXSVRDSEFCTEUgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19MT0NBVElPTl9BVVRPICAgICAgICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfTUFOUEFHRTdfTE9DQVRJT05fTk9UX1BSRVNFTlQgICAgICAgICAgICAgICgweDIwKQorI2RlZmluZSBNUEkyX01BTlBBR0U3X0xPQ0FUSU9OX05PVF9DT05ORUNURUQgICAgICAgICAgICAoMHg4MCkKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIE51bVBoeXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPX01BWAorI2RlZmluZSBNUEkyX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPX01BWCAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzcKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiAgICAgICAgIEhlYWRlcjsgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlTmFtZVsxNl07ICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgyMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDIyICovCisgICAgTVBJMl9NQU5QQUdFN19DT05ORUNUT1JfSU5GTyAgICBDb25uZWN0b3JJbmZvW01QSTJfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk9fTUFYXTsgLyogMHgyNCAqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl83LAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfTUFOXzcsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTdfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2U3X3Q7CisKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HN19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIGRlZmluZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX01BTlBBR0U3X0ZMQUdfVVNFX1NMT1RfSU5GTyAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKgorICogR2VuZXJpYyBzdHJ1Y3R1cmUgdG8gdXNlIGZvciBwcm9kdWN0LXNwZWNpZmljIG1hbnVmYWN0dXJpbmcgcGFnZXMKKyAqIChjdXJyZW50bHkgTWFudWZhY3R1cmluZyBQYWdlIDggdGhyb3VnaCBNYW51ZmFjdHVyaW5nIFBhZ2UgMzEpLgorICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl9QUworeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgSGVhZGVyOyAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0U3BlY2lmaWNJbmZvOy8qIDB4MDQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fUFMsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fUFMsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZVBTX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlUFNfdDsKKworI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkc4X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HOV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzEwX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcxMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMTJfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzEzX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcxNF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMTVfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzE2X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcxN19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMThfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzE5X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMjFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzIyX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyM19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMjRfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzI1X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyNl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMjdfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzI4X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX01BTlVGQUNUVVJJTkcyOV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9NQU5VRkFDVFVSSU5HMzBfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzMxX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICgweDAwKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgSU8gVW5pdCBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElPIFVuaXQgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfMAoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgVW5pcXVlVmFsdWU7ICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBNUEkyX1ZFUlNJT05fVU5JT04gICAgICBOdmRhdGFWZXJzaW9uRGVmYXVsdDsgICAgICAgLyogMHgwOCAqLworICAgIE1QSTJfVkVSU0lPTl9VTklPTiAgICAgIE52ZGF0YVZlcnNpb25QZXJzaXN0ZW50OyAgICAvKiAweDBBICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8wLAorICBNcGkySU9Vbml0UGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9Vbml0UGFnZTBfdDsKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwMikKKworCisvKiBJTyBVbml0IFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzEKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8xLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF8xLAorICBNcGkySU9Vbml0UGFnZTFfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9Vbml0UGFnZTFfdDsKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKworLyogSU8gVW5pdCBQYWdlIDEgRmxhZ3MgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX01BU0tfU0FUQV9XUklURV9DQUNIRSAgICAgICAgICAoMHgwMDAwMDYwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfU0FUQV9XUklURV9DQUNIRSAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX1VOQ0hBTkdFRF9TQVRBX1dSSVRFX0NBQ0hFICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9OQVRJVkVfQ09NTUFORF9RX0RJU0FCTEUgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9JUiAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0RJU0FCTEVfVEFTS19TRVRfRlVMTF9IQU5ETElORyAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9JUl9VU0VfU1RBVElDX1ZPTFVNRV9JRCAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfTVVMVElfUEFUSElORyAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX1NJTkdMRV9QQVRISU5HICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKworCisvKiBJTyBVbml0IFBhZ2UgMyAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0lPX1VOSVRfUEFHRV8zX0dQSU9fVkFMX01BWAorI2RlZmluZSBNUEkyX0lPX1VOSVRfUEFHRV8zX0dQSU9fVkFMX01BWCAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzMKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgR1BJT0NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgR1BJT1ZhbFtNUEkyX0lPX1VOSVRfUEFHRV8zX0dQSU9fVkFMX01BWF07LyogMHgwOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfMywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfMywKKyAgTXBpMklPVW5pdFBhZ2UzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPVW5pdFBhZ2UzX3Q7CisKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisKKy8qIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSAzIEdQSU9WYWwgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19HUElPX0ZVTkNUSU9OX01BU0sgICAgICAgICAgICAgKDB4RkZGQykKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19HUElPX0ZVTkNUSU9OX1NISUZUICAgICAgICAgICAgKDIpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTNfR1BJT19TRVRUSU5HX09GRiAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTNfR1BJT19TRVRUSU5HX09OICAgICAgICAgICAgICAgICgweDAwMDEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBJT0MgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJT0MgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPQ18wCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVmVuZG9ySUQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDsgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJldmlzaW9uSUQ7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MTEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgxMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIENsYXNzQ29kZTsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU3Vic3lzdGVtVmVuZG9ySUQ7ICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTdWJzeXN0ZW1JRDsgICAgICAgICAgICAgICAgLyogMHgxQSAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPQ18wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9DXzAsCisgIE1waTJJT0NQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NQYWdlMF90OworCisjZGVmaW5lIE1QSTJfSU9DUEFHRTBfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICgweDAyKQorCisKKy8qIElPQyBQYWdlIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9DXzEKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQ29hbGVzY2luZ1RpbWVvdXQ7ICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb2FsZXNjaW5nRGVwdGg7ICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBDSVNsb3ROdW07ICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUENJQnVzTnVtOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQQ0lEb21haW5TZWdtZW50OyAgICAgICAgICAgLyogMHgwRiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT0NfMSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPQ18xLAorICBNcGkySU9DUGFnZTFfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DUGFnZTFfdDsKKworI2RlZmluZSBNUEkyX0lPQ1BBR0UxX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKworLyogZGVmaW5lcyBmb3IgSU9DIFBhZ2UgMSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPQ1BBR0UxX1JFUExZX0NPQUxFU0NJTkcgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworI2RlZmluZSBNUEkyX0lPQ1BBR0UxX1BDSVNMT1ROVU1fVU5LTk9XTiAgICAgICAgICAgICAgICAoMHhGRikKKyNkZWZpbmUgTVBJMl9JT0NQQUdFMV9QQ0lCVVNOVU1fVU5LTk9XTiAgICAgICAgICAgICAgICAgKDB4RkYpCisjZGVmaW5lIE1QSTJfSU9DUEFHRTFfUENJRE9NQUlOX1VOS05PV04gICAgICAgICAgICAgICAgICgweEZGKQorCisvKiBJT0MgUGFnZSA2ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPQ182Cit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQ2FwYWJpbGl0aWVzRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4RHJpdmVzUkFJRDA7ICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4RHJpdmVzUkFJRDE7ICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4RHJpdmVzUkFJRDFFOyAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4RHJpdmVzUkFJRDEwOyAgICAgICAgICAgICAgICAvKiAweDBCICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWluRHJpdmVzUkFJRDA7ICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWluRHJpdmVzUkFJRDE7ICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWluRHJpdmVzUkFJRDFFOyAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWluRHJpdmVzUkFJRDEwOyAgICAgICAgICAgICAgICAvKiAweDBGICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4R2xvYmFsSG90U3BhcmVzOyAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4UGh5c0Rpc2tzOyAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Vm9sdW1lczsgICAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Q29uZmlnczsgICAgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4T0NFRGlza3M7ICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkU3RyaXBlU2l6ZU1hcFJBSUQwOyAgICAvKiAweDFDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkU3RyaXBlU2l6ZU1hcFJBSUQxRTsgICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkU3RyaXBlU2l6ZU1hcFJBSUQxMDsgICAvKiAweDI0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDJDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdE1ldGFkYXRhU2l6ZTsgICAgICAgICAgICAvKiAweDMwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDMyICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4QmFkQmxvY2tUYWJsZUVudHJpZXM7ICAgICAgICAvKiAweDM0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDM2ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSVJOdnNyYW1WZXJzaW9uOyAgICAgICAgICAgICAgICAvKiAweDM4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9DXzYsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT0NfNiwKKyAgTXBpMklPQ1BhZ2U2X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ1BhZ2U2X3Q7CisKKyNkZWZpbmUgTVBJMl9JT0NQQUdFNl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDQpCisKKy8qIGRlZmluZXMgZm9yIElPQyBQYWdlIDYgQ2FwYWJpbGl0aWVzRmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9JT0NQQUdFNl9DQVBfRkxBR1NfUkFJRDEwX1NVUFBPUlQgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfSU9DUEFHRTZfQ0FQX0ZMQUdTX1JBSUQxX1NVUFBPUlQgICAgICAgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNUEkyX0lPQ1BBR0U2X0NBUF9GTEFHU19SQUlEMUVfU1VQUE9SVCAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9JT0NQQUdFNl9DQVBfRkxBR1NfUkFJRDBfU1VQUE9SVCAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfSU9DUEFHRTZfQ0FQX0ZMQUdTX0dMT0JBTF9IT1RfU1BBUkUgICAgICAgICgweDAwMDAwMDAxKQorCisKKy8qIElPQyBQYWdlIDcgKi8KKworI2RlZmluZSBNUEkyX0lPQ1BBR0U3X0VWRU5UTUFTS19XT1JEUyAgICAgICAoNCkKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9DXzcKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRXZlbnRNYXNrc1tNUEkyX0lPQ1BBR0U3X0VWRU5UTUFTS19XT1JEU107LyogMHgwOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFNBU0Jyb2FkY2FzdFByaW1pdGl2ZU1hc2tzOyAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MUEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPQ183LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9DXzcsCisgIE1waTJJT0NQYWdlN190LCBNUEkyX1BPSU5URVIgcE1waTJJT0NQYWdlN190OworCisjZGVmaW5lIE1QSTJfSU9DUEFHRTdfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICgweDAxKQorCisKKy8qIElPQyBQYWdlIDggKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9DXzgKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE51bURldnNQZXJFbmNsb3N1cmU7ICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heFBlcnNpc3RlbnRFbnRyaWVzOyAgICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4TnVtUGh5c2ljYWxNYXBwZWRJRHM7ICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSVJWb2x1bWVNYXBwaW5nRmxhZ3M7ICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgxMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9DXzgsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT0NfOCwKKyAgTXBpMklPQ1BhZ2U4X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ1BhZ2U4X3Q7CisKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIGRlZmluZXMgZm9yIElPQyBQYWdlIDggRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19EQV9TVEFSVF9TTE9UXzEgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfSU9DUEFHRThfRkxBR1NfUkVTRVJWRURfVEFSR0VUSURfMCAgICAgICAgICgweDAwMDAwMDEwKQorCisjZGVmaW5lIE1QSTJfSU9DUEFHRThfRkxBR1NfTUFTS19NQVBQSU5HX01PREUgICAgICAgICAgICgweDAwMDAwMDBFKQorI2RlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0RFVklDRV9QRVJTSVNURU5DRV9NQVBQSU5HICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19FTkNMT1NVUkVfU0xPVF9NQVBQSU5HICAgICAgKDB4MDAwMDAwMDIpCisKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19ESVNBQkxFX1BFUlNJU1RFTlRfTUFQUElORyAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1QSTJfSU9DUEFHRThfRkxBR1NfRU5BQkxFX1BFUlNJU1RFTlRfTUFQUElORyAgICgweDAwMDAwMDAwKQorCisvKiBkZWZpbmVzIGZvciBJT0MgUGFnZSA4IElSVm9sdW1lTWFwcGluZ0ZsYWdzICovCisjZGVmaW5lIE1QSTJfSU9DUEFHRThfSVJGTEFHU19NQVNLX1ZPTFVNRV9NQVBQSU5HX01PREUgICgweDAwMDAwMDAzKQorI2RlZmluZSBNUEkyX0lPQ1BBR0U4X0lSRkxBR1NfTE9XX1ZPTFVNRV9NQVBQSU5HICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX0hJR0hfVk9MVU1FX01BUFBJTkcgICAgICAgKDB4MDAwMDAwMDEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBCSU9TIENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQklPUyBQYWdlIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfQklPU18xCit7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBCaW9zT3B0aW9uczsgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ1NldHRpbmdzOyAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEZXZpY2VTZXR0aW5nczsgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mRGV2aWNlczsgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT1RpbWVvdXRCbG9ja0RldmljZXNOb25STTsgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPVGltZW91dFNlcXVlbnRpYWw7ICAgICAgICAvKiAweDFBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9UaW1lb3V0T3RoZXI7ICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT1RpbWVvdXRCbG9ja0RldmljZXNSTTsgICAgLyogMHgxRSAqLworfSBNUEkyX0NPTkZJR19QQUdFX0JJT1NfMSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0JJT1NfMSwKKyAgTXBpMkJpb3NQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJCaW9zUGFnZTFfdDsKKworI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKworLyogdmFsdWVzIGZvciBCSU9TIFBhZ2UgMSBCaW9zT3B0aW9ucyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9PUFRJT05TX0RJU0FCTEVfQklPUyAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworLyogdmFsdWVzIGZvciBCSU9TIFBhZ2UgMSBJT0NTZXR0aW5ncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfTUFTS19CT09UX1BSRUZFUkVOQ0UgICAgICAoMHgwMDAzMDAwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX0VOQ0xPU1VSRV9TTE9UX0JPT1QgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9TQVNfQUREUkVTU19CT09UICAgICAgICAgICgweDAwMDEwMDAwKQorCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9NQVNLX1JNX1NFVFRJTkcgICAgICAgICAgICgweDAwMDAwMEMwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfTk9ORV9STV9TRVRUSU5HICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX0JPT1RfUk1fU0VUVElORyAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9NRURJQV9STV9TRVRUSU5HICAgICAgICAgICgweDAwMDAwMDgwKQorCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9NQVNLX0FEQVBURVJfU1VQUE9SVCAgICAgICgweDAwMDAwMDMwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfTk9fU1VQUE9SVCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfSU9DU0VUX0JJT1NfU1VQUE9SVCAgICAgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0lPQ1NFVF9PU19TVVBQT1JUICAgICAgICAgICAgICAgICgweDAwMDAwMDIwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfQUxMX1NVUFBPUlQgICAgICAgICAgICAgICAoMHgwMDAwMDAzMCkKKworI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9JT0NTRVRfQUxURVJOQVRFX0NIUyAgICAgICAgICAgICAoMHgwMDAwMDAwOCkKKworLyogdmFsdWVzIGZvciBCSU9TIFBhZ2UgMSBEZXZpY2VTZXR0aW5ncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9ERVZTRVRfRElTQUJMRV9TTUFSVF9QT0xMSU5HICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfREVWU0VUX0RJU0FCTEVfU0VRX0xVTiAgICAgICAgICAgKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX0RFVlNFVF9ESVNBQkxFX1JNX0xVTiAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9ERVZTRVRfRElTQUJMRV9OT05fUk1fTFVOICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfREVWU0VUX0RJU0FCTEVfT1RIRVJfTFVOICAgICAgICAgKDB4MDAwMDAwMDEpCisKKworLyogQklPUyBQYWdlIDIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQk9PVF9ERVZJQ0VfQURBUFRFUl9PUkRFUgoreworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0JPT1RfREVWSUNFX0FEQVBURVJfT1JERVIsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9CT09UX0RFVklDRV9BREFQVEVSX09SREVSLAorICBNcGkyQm9vdERldmljZUFkYXB0ZXJPcmRlcl90LCBNUEkyX1BPSU5URVIgcE1waTJCb290RGV2aWNlQWRhcHRlck9yZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0JPT1RfREVWSUNFX1NBU19XV0lECit7CisgICAgVTY0ICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBMVU5bOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9CT09UX0RFVklDRV9TQVNfV1dJRCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0JPT1RfREVWSUNFX1NBU19XV0lELAorICBNcGkyQm9vdERldmljZVNhc1d3aWRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQm9vdERldmljZVNhc1d3aWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQk9PVF9ERVZJQ0VfRU5DTE9TVVJFX1NMT1QKK3sKKyAgICBVNjQgICAgICAgICBFbmNsb3N1cmVMb2dpY2FsSUQ7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICBTbG90TnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEyICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9CT09UX0RFVklDRV9FTkNMT1NVUkVfU0xPVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0JPT1RfREVWSUNFX0VOQ0xPU1VSRV9TTE9ULAorICBNcGkyQm9vdERldmljZUVuY2xvc3VyZVNsb3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQm9vdERldmljZUVuY2xvc3VyZVNsb3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQk9PVF9ERVZJQ0VfREVWSUNFX05BTUUKK3sKKyAgICBVNjQgICAgICAgICBEZXZpY2VOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0JPT1RfREVWSUNFX0RFVklDRV9OQU1FLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQk9PVF9ERVZJQ0VfREVWSUNFX05BTUUsCisgIE1waTJCb290RGV2aWNlRGV2aWNlTmFtZV90LCBNUEkyX1BPSU5URVIgcE1waTJCb290RGV2aWNlRGV2aWNlTmFtZV90OworCit0eXBlZGVmIHVuaW9uIF9NUEkyX01QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFCit7CisgICAgTVBJMl9CT09UX0RFVklDRV9BREFQVEVSX09SREVSICBBZGFwdGVyT3JkZXI7CisgICAgTVBJMl9CT09UX0RFVklDRV9TQVNfV1dJRCAgICAgICBTYXNXd2lkOworICAgIE1QSTJfQk9PVF9ERVZJQ0VfRU5DTE9TVVJFX1NMT1QgRW5jbG9zdXJlU2xvdDsKKyAgICBNUEkyX0JPT1RfREVWSUNFX0RFVklDRV9OQU1FICAgIERldmljZU5hbWU7Cit9IE1QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFLAorICBNcGkyQmlvc1BhZ2UyQm9vdERldmljZV90LCBNUEkyX1BPSU5URVIgcE1waTJCaW9zUGFnZTJCb290RGV2aWNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0JJT1NfMgoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlcUJvb3REZXZpY2VGb3JtOyAgICAgIC8qIDB4MUMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgLyogMHgxRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgICAgICAvKiAweDFFICovCisgICAgTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UgIFJlcXVlc3RlZEJvb3REZXZpY2U7ICAgIC8qIDB4MjAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxQWx0Qm9vdERldmljZUZvcm07ICAgLyogMHgzOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDk7ICAgICAgICAgICAgICAvKiAweDM5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTA7ICAgICAgICAgICAgIC8qIDB4M0EgKi8KKyAgICBNUEkyX0JJT1NQQUdFMl9CT09UX0RFVklDRSAgUmVxdWVzdGVkQWx0Qm9vdERldmljZTsgLyogMHgzQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50Qm9vdERldmljZUZvcm07ICAvKiAweDU4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTE7ICAgICAgICAgICAgIC8qIDB4NTkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMjsgICAgICAgICAgICAgLyogMHg1QSAqLworICAgIE1QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFICBDdXJyZW50Qm9vdERldmljZTsgICAgICAvKiAweDU4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfQklPU18yLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfQklPU18yLAorICBNcGkyQmlvc1BhZ2UyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJpb3NQYWdlMl90OworCisjZGVmaW5lIE1QSTJfQklPU1BBR0UyX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICgweDA0KQorCisvKiB2YWx1ZXMgZm9yIEJJT1MgUGFnZSAyIEJvb3REZXZpY2VGb3JtIGZpZWxkcyAqLworI2RlZmluZSBNUEkyX0JJT1NQQUdFMl9GT1JNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTJfRk9STV9OT19ERVZJQ0VfU1BFQ0lGSUVEICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UyX0ZPUk1fU0FTX1dXSUQgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMl9GT1JNX0VOQ0xPU1VSRV9TTE9UICAgICAgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTJfRk9STV9ERVZJQ0VfTkFNRSAgICAgICAgICAgICAgICAgKDB4MDcpCisKKworLyogQklPUyBQYWdlIDMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQURBUFRFUl9JTkZPCit7CisgICAgVTggICAgICBQY2lCdXNOdW1iZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgIFBjaURldmljZUFuZEZ1bmN0aW9uTnVtYmVyOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgQWRhcHRlckZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfQURBUFRFUl9JTkZPLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQURBUFRFUl9JTkZPLAorICBNcGkyQWRhcHRlckluZm9fdCwgTVBJMl9QT0lOVEVSIHBNcGkyQWRhcHRlckluZm9fdDsKKworI2RlZmluZSBNUEkyX0FEQVBURVJfSU5GT19GTEFHU19FTUJFRERFRCAgICAgICAgICAgICAgICAoMHgwMDAxKQorI2RlZmluZSBNUEkyX0FEQVBURVJfSU5GT19GTEFHU19JTklUX1NUQVRVUyAgICAgICAgICAgICAoMHgwMDAyKQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9CSU9TXzMKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEdsb2JhbEZsYWdzOyAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQmlvc1ZlcnNpb247ICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBNUEkyX0FEQVBURVJfSU5GTyAgICAgICBBZGFwdGVyT3JkZXJbNF07ICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDFDICovCit9IE1QSTJfQ09ORklHX1BBR0VfQklPU18zLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfQklPU18zLAorICBNcGkyQmlvc1BhZ2UzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkJpb3NQYWdlM190OworCisjZGVmaW5lIE1QSTJfQklPU1BBR0UzX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorCisvKiB2YWx1ZXMgZm9yIEJJT1MgUGFnZSAzIEdsb2JhbEZsYWdzICovCisjZGVmaW5lIE1QSTJfQklPU1BBR0UzX0ZMQUdTX1BBVVNFX09OX0VSUk9SICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFM19GTEFHU19WRVJCT1NFX0VOQUJMRSAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTNfRkxBR1NfSE9PS19JTlRfNDBfRElTQUJMRSAgICAgICAgKDB4MDAwMDAwMTApCisKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTNfRkxBR1NfREVWX0xJU1RfRElTUExBWV9NQVNLICAgICAgKDB4MDAwMDAwRTApCisjZGVmaW5lIE1QSTJfQklPU1BBR0UzX0ZMQUdTX0lOU1RBTExFRF9ERVZfRElTUExBWSAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFM19GTEFHU19BREFQVEVSX0RJU1BMQVkgICAgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTNfRkxBR1NfQURBUFRFUl9ERVZfRElTUExBWSAgICAgICAgKDB4MDAwMDAwNDApCisKKworLyogQklPUyBQYWdlIDQgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0JJT1NfUEFHRV80X1BIWV9FTlRSSUVTCisjZGVmaW5lIE1QSTJfQklPU19QQUdFXzRfUEhZX0VOVFJJRVMgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0JJT1M0X0VOVFJZCit7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmVhc3NpZ25tZW50V1dJRDsgICAgICAgLyogMHgwMCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJlYXNzaWdubWVudERldmljZU5hbWU7IC8qIDB4MDggKi8KK30gTVBJMl9CSU9TNF9FTlRSWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0JJT1M0X0VOVFJZLAorICBNcGkyTUJpb3M0RW50cnlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQmlvczRFbnRyeV90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9CSU9TXzQKK3sKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtUGh5czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgTVBJMl9CSU9TNF9FTlRSWSAgICAgICAgUGh5W01QSTJfQklPU19QQUdFXzRfUEhZX0VOVFJJRVNdOyAgLyogMHgwOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0JJT1NfNCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0JJT1NfNCwKKyAgTXBpMkJpb3NQYWdlNF90LCBNUEkyX1BPSU5URVIgcE1waTJCaW9zUGFnZTRfdDsKKworI2RlZmluZSBNUEkyX0JJT1NQQUdFNF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFJBSUQgVm9sdW1lIENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUkFJRCBWb2x1bWUgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURWT0wwX1BIWVNfRElTSworeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBSURTZXROdW07ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tNYXA7ICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza051bTsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCit9IE1QSTJfUkFJRFZPTDBfUEhZU19ESVNLLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRFZPTDBfUEhZU19ESVNLLAorICBNcGkyUmFpZFZvbDBQaHlzRGlza190LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkVm9sMFBoeXNEaXNrX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBQaHlzRGlza01hcCBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURWT0wwX1BIWVNESVNLX1BSSU1BUlkgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9QSFlTRElTS19TRUNPTkRBUlkgICAgICAgICAgICAgICAgKDB4MDIpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURWT0wwX1NFVFRJTkdTCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBIb3RTcGFyZVBvb2w7ICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfUkFJRFZPTDBfU0VUVElOR1MsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEVk9MMF9TRVRUSU5HUywKKyAgTXBpMlJhaWRWb2wwU2V0dGluZ3NfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFZvbDBTZXR0aW5nc190OworCisvKiBSQUlEIFZvbHVtZSBQYWdlIDAgSG90U3BhcmVQb29sIGRlZmluZXMsIGFsc28gdXNlZCBpbiBSQUlEIFBoeXNpY2FsIERpc2sgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXzAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJRF9IT1RfU1BBUkVfUE9PTF8xICAgICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JBSURfSE9UX1NQQVJFX1BPT0xfMiAgICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXzMgICAgICAgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfUkFJRF9IT1RfU1BBUkVfUE9PTF80ICAgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX1JBSURfSE9UX1NQQVJFX1BPT0xfNSAgICAgICAgICAgICAgICAgICAgICAoMHgyMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0hPVF9TUEFSRV9QT09MXzYgICAgICAgICAgICAgICAgICAgICAgKDB4NDApCisjZGVmaW5lIE1QSTJfUkFJRF9IT1RfU1BBUkVfUE9PTF83ICAgICAgICAgICAgICAgICAgICAgICgweDgwKQorCisvKiBSQUlEIFZvbHVtZSBQYWdlIDAgVm9sdW1lU2V0dGluZ3MgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1JBSURWT0wwX1NFVFRJTkdfVVNFX1BST0RVQ1RfSURfU1VGRklYICAgICAoMHgwMDA4KQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NFVFRJTkdfQVVUT19DT05GSUdfSFNXQVBfRElTQUJMRSAoMHgwMDA0KQorCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU0VUVElOR19NQVNLX1dSSVRFX0NBQ0hJTkcgICAgICAgICgweDAwMDMpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU0VUVElOR19VTkNIQU5HRUQgICAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU0VUVElOR19ESVNBQkxFX1dSSVRFX0NBQ0hJTkcgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU0VUVElOR19FTkFCTEVfV1JJVEVfQ0FDSElORyAgICAgICgweDAwMDIpCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfUkFJRF9WT0xfUEFHRV8wX1BIWVNESVNLX01BWAorI2RlZmluZSBNUEkyX1JBSURfVk9MX1BBR0VfMF9QSFlTRElTS19NQVggICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfUkFJRF9WT0xfMAoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0ZTsgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVR5cGU7ICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVm9sdW1lU3RhdHVzRmxhZ3M7ICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBNUEkyX1JBSURWT0wwX1NFVFRJTkdTICBWb2x1bWVTZXR0aW5nczsgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIE1heExCQTsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU3RyaXBlU2l6ZTsgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemU7ICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDFFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkUGh5c0Rpc2tzOyAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXN5bmNSYXRlOyAgICAgICAgICAgICAgICAgLyogMHgyMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERhdGFTY3J1YkR1cmF0aW9uOyAgICAgICAgICAvKiAweDIyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtUGh5c0Rpc2tzOyAgICAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgyNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDI2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW5hY3RpdmVTdGF0dXM7ICAgICAgICAgICAgIC8qIDB4MjcgKi8KKyAgICBNUEkyX1JBSURWT0wwX1BIWVNfRElTSyBQaHlzRGlza1tNUEkyX1JBSURfVk9MX1BBR0VfMF9QSFlTRElTS19NQVhdOyAvKiAweDI4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfUkFJRF9WT0xfMCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1JBSURfVk9MXzAsCisgIE1waTJSYWlkVm9sUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFZvbFBhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT04gICAgICAgICAgICgweDBBKQorCisvKiB2YWx1ZXMgZm9yIFJBSUQgVm9sdW1lU3RhdGUgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9TVEFURV9NSVNTSU5HICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX1NUQVRFX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfU1RBVEVfSU5JVElBTElaSU5HICAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9TVEFURV9PTkxJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX1NUQVRFX0RFR1JBREVEICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfU1RBVEVfT1BUSU1BTCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKworLyogdmFsdWVzIGZvciBSQUlEIFZvbHVtZVR5cGUgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDFFICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1JBSURfVk9MX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYpCisKKy8qIHZhbHVlcyBmb3IgUkFJRCBWb2x1bWUgUGFnZSAwIFZvbHVtZVN0YXR1c0ZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUEVORElOR19SRVNZTkMgICAgICAgICAgICAoMHgwMjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19CQUNLR19JTklUX1BFTkRJTkcgICAgICAgICgweDAxMDAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX01EQ19QRU5ESU5HICAgICAgICAgICAgICAgKDB4MDA4MDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfVVNFUl9DT05TSVNUX1BFTkRJTkcgICAgICAoMHgwMDQwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19NQUtFX0RBVEFfQ09OU0lTVEVOVCAgICAgICgweDAwMjAwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0RBVEFfU0NSVUIgICAgICAgICAgICAgICAgKDB4MDAxMDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfQ09OU0lTVEVOQ1lfQ0hFQ0sgICAgICAgICAoMHgwMDA4MDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19DQVBBQ0lUWV9FWFBBTlNJT04gICAgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0JBQ0tHUk9VTkRfSU5JVCAgICAgICAgICAgKDB4MDAwMjAwMDApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUkVTWU5DX0lOX1BST0dSRVNTICAgICAgICAoMHgwMDAxMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19PQ0VfQUxMT1dFRCAgICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0JHSV9DT01QTEVURSAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfMUVfT0ZGU0VUX01JUlJPUiAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR18xRV9BREpBQ0VOVF9NSVJST1IgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0JBRF9CTE9DS19UQUJMRV9GVUxMICAgICAgKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfVk9MVU1FX0lOQUNUSVZFICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19RVUlFU0NFRCAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKy8qIHZhbHVlcyBmb3IgUkFJRCBWb2x1bWUgUGFnZSAwIFN1cHBvcnRlZFBoeXNEaXNrcyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURWT0wwX1NVUFBPUlRfU09MSURfU1RBVEVfRElTS1MgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1VQUE9SVF9IQVJEX0RJU0tTICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVVBQT1JUX1NBU19QUk9UT0NPTCAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JBSURWT0wwX1NVUFBPUlRfU0FUQV9QUk9UT0NPTCAgICAgICAgICAgICAgICAgKDB4MDEpCisKKy8qIHZhbHVlcyBmb3IgUkFJRCBWb2x1bWUgUGFnZSAwIEluYWN0aXZlU3RhdHVzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRFZPTFBBR0UwX1VOS05PV05fSU5BQ1RJVkUgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MUEFHRTBfU1RBTEVfTUVUQURBVEFfSU5BQ1RJVkUgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURWT0xQQUdFMF9GT1JFSUdOX1ZPTFVNRV9JTkFDVElWRSAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUkFJRFZPTFBBR0UwX0lOU1VGRklDSUVOVF9SRVNPVVJDRV9JTkFDVElWRSAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9SQUlEVk9MUEFHRTBfQ0xPTkVfVk9MVU1FX0lOQUNUSVZFICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1JBSURWT0xQQUdFMF9JTlNVRkZJQ0lFTlRfTUVUQURBVEFfSU5BQ1RJVkUgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfUkFJRFZPTFBBR0UwX1BSRVZJT1VTTFlfREVMRVRFRCAgICAgICAgICAgICAgICAoMHgwNikKKworCisvKiBSQUlEIFZvbHVtZSBQYWdlIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfUkFJRF9WT0xfMQoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDA7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEdVSURbMjRdOyAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTmFtZVsxNl07ICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBXV0lEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDM4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9SQUlEX1ZPTF8xLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfUkFJRF9WT0xfMSwKKyAgTXBpMlJhaWRWb2xQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkVm9sUGFnZTFfdDsKKworI2RlZmluZSBNUEkyX1JBSURWT0xQQUdFMV9QQUdFVkVSU0lPTiAgICAgICAgICAgKDB4MDMpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBSQUlEIFBoeXNpY2FsIERpc2sgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURQSFlTRElTSzBfU0VUVElOR1MKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEhvdFNwYXJlUG9vbDsgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KK30gTVBJMl9SQUlEUEhZU0RJU0swX1NFVFRJTkdTLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRFBIWVNESVNLMF9TRVRUSU5HUywKKyAgTXBpMlJhaWRQaHlzRGlzazBTZXR0aW5nc190LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkUGh5c0Rpc2swU2V0dGluZ3NfdDsKKworLyogdXNlIE1QSTJfUkFJRF9IT1RfU1BBUkVfUE9PTF8gZGVmaW5lcyBmb3IgdGhlIEhvdFNwYXJlUG9vbCBmaWVsZCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEUEhZU0RJU0swX0lOUVVJUllfREFUQQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZlbmRvcklEWzhdOyAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdElEWzE2XTsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0UmV2TGV2ZWxbNF07ICAgICAgICAgLyogMHgxOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbE51bVszMl07ICAgICAgICAgICAgICAvKiAweDFDICovCit9IE1QSTJfUkFJRFBIWVNESVNLMF9JTlFVSVJZX0RBVEEsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEUEhZU0RJU0swX0lOUVVJUllfREFUQSwKKyAgTXBpMlJhaWRQaHlzRGlzazBJbnF1aXJ5RGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkUGh5c0Rpc2swSW5xdWlyeURhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMAoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tOdW07ICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBNUEkyX1JBSURQSFlTRElTSzBfU0VUVElOR1MgICAgIFBoeXNEaXNrU2V0dGluZ3M7ICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIE1QSTJfUkFJRFBIWVNESVNLMF9JTlFVSVJZX0RBVEEgSW5xdWlyeURhdGE7ICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDRDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza1N0YXRlOyAgICAgICAgICAgICAgLyogMHg1MCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2ZmbGluZVJlYXNvbjsgICAgICAgICAgICAgIC8qIDB4NTEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY29tcGF0aWJsZVJlYXNvbjsgICAgICAgICAvKiAweDUyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza0F0dHJpYnV0ZXM7ICAgICAgICAgLyogMHg1MyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tTdGF0dXNGbGFnczsgICAgICAgIC8qIDB4NTQgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZU1heExCQTsgICAgICAgICAgICAgICAvKiAweDU4ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0TWF4TEJBOyAgICAgICAgICAgICAgICAgLyogMHg2MCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29lcmNlZE1heExCQTsgICAgICAgICAgICAgIC8qIDB4NjggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDcwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHg3MiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4NzQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18wLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMCwKKyAgTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9SQUlEUEhZU0RJU0tQQUdFMF9QQUdFVkVSU0lPTiAgICAgICAgICAoMHgwNSkKKworLyogUGh5c0Rpc2tTdGF0ZSBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09ORklHVVJFRCAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfUERfU1RBVEVfTk9UX0NPTVBBVElCTEUgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX1BEX1NUQVRFX09GRkxJTkUgICAgICAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUkFJRF9QRF9TVEFURV9PTkxJTkUgICAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1JBSURfUERfU1RBVEVfSE9UX1NQQVJFICAgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9SQUlEX1BEX1NUQVRFX0RFR1JBREVEICAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfUkFJRF9QRF9TVEFURV9SRUJVSUxESU5HICAgICAgICAgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX1JBSURfUERfU1RBVEVfT1BUSU1BTCAgICAgICAgICAgICAgICAgICAgICAoMHgwNykKKworLyogT2ZmbGluZVJlYXNvbiBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX09OTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9PRkZMSU5FX01JU1NJTkcgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfT0ZGTElORV9GQUlMRUQgICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX09GRkxJTkVfSU5JVElBTElaSU5HICAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9PRkZMSU5FX1JFUVVFU1RFRCAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfT0ZGTElORV9GQUlMRURfUkVRVUVTVEVEICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX09GRkxJTkVfT1RIRVIgICAgICAgICAgICAgICAgICAgICgweEZGKQorCisvKiBJbmNvbXBhdGlibGVSZWFzb24gZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1BIWVNESVNLMF9DT01QQVRJQkxFICAgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX1BST1RPQ09MICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0lOQ09NUEFUSUJMRV9CTE9DS1NJWkUgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9JTkNPTVBBVElCTEVfTUFYX0xCQSAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX1NBVEFfRVhURU5ERURfQ01EICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0lOQ09NUEFUSUJMRV9SRU1PVkVBQkxFX01FRElBICAgICgweDA1KQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9JTkNPTVBBVElCTEVfVU5LTk9XTiAgICAgICAgICAgICAoMHhGRikKKworLyogUGh5c0Rpc2tBdHRyaWJ1dGVzIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfQVRUUklCX1NPTElEX1NUQVRFX0RSSVZFICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0FUVFJJQl9IQVJEX0RJU0tfRFJJVkUgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9BVFRSSUJfU0FTX1BST1RPQ09MICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfQVRUUklCX1NBVEFfUFJPVE9DT0wgICAgICAgICAgICAgKDB4MDEpCisKKy8qIFBoeXNEaXNrU3RhdHVzRmxhZ3MgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19OT1RfQ0VSVElGSUVEICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfT0NFX1RBUkdFVCAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX1dSSVRFX0NBQ0hFX0VOQUJMRUQgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19PUFRJTUFMX1BSRVZJT1VTICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfTk9UX09QVElNQUxfUFJFVklPVVMgKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX0lOQUNUSVZFX1ZPTFVNRSAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19RVUlFU0NFRCAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfT1VUX09GX1NZTkMgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKworLyogUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2UgMSAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggb3IgTnVtUGh5c0Rpc2tQYXRocyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfUkFJRF9QSFlTX0RJU0sxX1BBVEhfTUFYCisjZGVmaW5lIE1QSTJfUkFJRF9QSFlTX0RJU0sxX1BBVEhfTUFYICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRFBIWVNESVNLMV9QQVRICit7CisgICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVNjQgICAgICAgICAgICAgV1dJRDsgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTY0ICAgICAgICAgICAgIE93bmVyV1dJRDsgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICBPd25lcklkZW50aWZpZXI7ICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDE1ICovCisgICAgVTE2ICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgLyogMHgxNiAqLworfSBNUEkyX1JBSURQSFlTRElTSzFfUEFUSCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURQSFlTRElTSzFfUEFUSCwKKyAgTXBpMlJhaWRQaHlzRGlzazFQYXRoX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRQaHlzRGlzazFQYXRoX3Q7CisKKy8qIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlIDEgUGh5c2ljYWwgRGlzayBQYXRoIEZsYWdzIGZpZWxkIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1BIWVNESVNLMV9GTEFHX1BSSU1BUlkgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfUkFJRF9QSFlTRElTSzFfRkxBR19CUk9LRU4gICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1JBSURfUEhZU0RJU0sxX0ZMQUdfSU5WQUxJRCAgICAgICAgKDB4MDAwMSkKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMQoreworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXNEaXNrUGF0aHM7ICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza051bTsgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgTVBJMl9SQUlEUEhZU0RJU0sxX1BBVEggICAgICAgICBQaHlzaWNhbERpc2tQYXRoW01QSTJfUkFJRF9QSFlTX0RJU0sxX1BBVEhfTUFYXTsvKiAweDBDICovCit9IE1QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1JEX1BESVNLXzEsCisgIE1waTJSYWlkUGh5c0Rpc2tQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkUGh5c0Rpc2tQYWdlMV90OworCisjZGVmaW5lIE1QSTJfUkFJRFBIWVNESVNLUEFHRTFfUEFHRVZFUlNJT04gICAgICAgICAgKDB4MDIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICB2YWx1ZXMgZm9yIGZpZWxkcyB1c2VkIGJ5IHNldmVyYWwgdHlwZXMgb2YgU0FTIENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdmFsdWVzIGZvciBOZWdvdGlhdGVkTGlua1JhdGVzIGZpZWxkcyAqLworI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX01BU0tfTE9HSUNBTCAgICAgICAgICAgICAoMHhGMCkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9TSElGVF9MT0dJQ0FMICAgICAgICAgICAgKDQpCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTUFTS19QSFlTSUNBTCAgICAgICAgICAgICgweDBGKQorLyogbGluayByYXRlcyB1c2VkIGZvciBOZWdvdGlhdGVkIFBoeXNpY2FsIGFuZCBMb2dpY2FsIExpbmsgUmF0ZSAqLworI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1VOS05PV05fTElOS19SQVRFICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9QSFlfRElTQUJMRUQgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTkVHT1RJQVRJT05fRkFJTEVEICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1NBVEFfT09CX0NPTVBMRVRFICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9QT1JUX1NFTEVDVE9SICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfU01QX1JFU0VUX0lOX1BST0dSRVNTICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSAgICAgICAgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfNl8wICAgICAgICAgICAgICAgICAgICAgICgweDBBKQorCisKKy8qIHZhbHVlcyBmb3IgQXR0YWNoZWRQaHlJbmZvIGZpZWxkcyAqLworI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19JTlNJREVfWlBTRFNfUEVSU0lTVEVOVCAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVRVUVTVEVEX0lOU0lERV9aUFNEUyAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX0JSRUFLX1JFUExZX0NBUEFCTEUgICAgICAgICAgICgweDAwMDAwMDEwKQorCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9NQVNLICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDBGKQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRUFTT05fVU5LTk9XTiAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX1BPV0VSX09OICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9IQVJEX1JFU0VUICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRUFTT05fU01QX1BIWV9DT05UUk9MICAgICAgICAoMHgwMDAwMDAwMykKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX0xPU1NfT0ZfU1lOQyAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9NVUxUSVBMRVhJTkdfU0VRICAgICAgICgweDAwMDAwMDA1KQorI2RlZmluZSBNUEkyX1NBU19BUEhZSU5GT19SRUFTT05fSVRfTkVYVVNfTE9TU19USU1FUiAgICAoMHgwMDAwMDAwNikKKyNkZWZpbmUgTVBJMl9TQVNfQVBIWUlORk9fUkVBU09OX0JSRUFLX1RJTUVPVVQgICAgICAgICAgKDB4MDAwMDAwMDcpCisjZGVmaW5lIE1QSTJfU0FTX0FQSFlJTkZPX1JFQVNPTl9QSFlfVEVTVF9TVE9QUEVEICAgICAgICgweDAwMDAwMDA4KQorCisKKy8qIHZhbHVlcyBmb3IgUGh5SW5mbyBmaWVsZHMgKi8KKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19QSFlfVkFDQU5UICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fQ0hBTkdFRF9SRVFfSU5TSURFX1pQU0RTICAgICAgICgweDA0MDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX0lOU0lERV9aUFNEU19QRVJTSVNURU5UICAgICAgICAoMHgwMjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRVFfSU5TSURFX1pQU0RTICAgICAgICAgICAgICAgKDB4MDEwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fWk9ORV9HUk9VUF9QRVJTSVNURU5UICAgICAgICAgICgweDAwNDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX0lOU0lERV9aUFNEUyAgICAgICAgICAgICAgICAgICAoMHgwMDIwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19aT05JTkdfRU5BQkxFRCAgICAgICAgICAgICAgICAgKDB4MDAxMDAwMDApCisKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MDAwRjAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUkVBU09OX1VOS05PV04gICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9QT1dFUl9PTiAgICAgICAgICAgICAgICAoMHgwMDAxMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fSEFSRF9SRVNFVCAgICAgICAgICAgICAgKDB4MDAwMjAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUkVBU09OX1NNUF9QSFlfQ09OVFJPTCAgICAgICAgICgweDAwMDMwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9MT1NTX09GX1NZTkMgICAgICAgICAgICAoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fTVVMVElQTEVYSU5HX1NFUSAgICAgICAgKDB4MDAwNTAwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUkVBU09OX0lUX05FWFVTX0xPU1NfVElNRVIgICAgICgweDAwMDYwMDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1JFQVNPTl9CUkVBS19USU1FT1VUICAgICAgICAgICAoMHgwMDA3MDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19SRUFTT05fUEhZX1RFU1RfU1RPUFBFRCAgICAgICAgKDB4MDAwODAwMDApCisKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19NVUxUSVBMRVhJTkdfU1VQUE9SVEVEICAgICAgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fU0FUQV9QT1JUX0FDVElWRSAgICAgICAgICAgICAgICgweDAwMDA0MDAwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1NBVEFfUE9SVF9TRUxFQ1RPUl9QUkVTRU5UICAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19WSVJUVUFMX1BIWSAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDEwMDApCisKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19NQVNLX1BBUlRJQUxfUEFUSFdBWV9USU1FICAgICAgKDB4MDAwMDBGMDApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fU0hJRlRfUEFSVElBTF9QQVRIV0FZX1RJTUUgICAgICg4KQorCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fTUFTS19ST1VUSU5HX0FUVFJJQlVURSAgICAgICAgICgweDAwMDAwMEYwKQorI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX0RJUkVDVF9ST1VUSU5HICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19TVUJUUkFDVElWRV9ST1VUSU5HICAgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fVEFCTEVfUk9VVElORyAgICAgICAgICAgICAgICAgICgweDAwMDAwMDIwKQorCisKKy8qIHZhbHVlcyBmb3IgU0FTIFByb2dyYW1tZWRMaW5rUmF0ZSBmaWVsZHMgKi8KKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUFYX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RjApCisjZGVmaW5lIE1QSTJfU0FTX1BSQVRFX01BWF9SQVRFX05PVF9QUk9HUkFNTUFCTEUgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU19QUkFURV9NQVhfUkFURV8xXzUgICAgICAgICAgICAgICAgICAgICAoMHg4MCkKKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUFYX1JBVEVfM18wICAgICAgICAgICAgICAgICAgICAgKDB4OTApCisjZGVmaW5lIE1QSTJfU0FTX1BSQVRFX01BWF9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgICgweEEwKQorI2RlZmluZSBNUEkyX1NBU19QUkFURV9NSU5fUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfTk9UX1BST0dSQU1NQUJMRSAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFXzFfNSAgICAgICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU19QUkFURV9NSU5fUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfNl8wICAgICAgICAgICAgICAgICAgICAgKDB4MEEpCisKKworLyogdmFsdWVzIGZvciBTQVMgSHdMaW5rUmF0ZSBmaWVsZHMgKi8KKyNkZWZpbmUgTVBJMl9TQVNfSFdSQVRFX01BWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RjApCisjZGVmaW5lIE1QSTJfU0FTX0hXUkFURV9NQVhfUkFURV8xXzUgICAgICAgICAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBNUEkyX1NBU19IV1JBVEVfTUFYX1JBVEVfM18wICAgICAgICAgICAgICAgICAgICAoMHg5MCkKKyNkZWZpbmUgTVBJMl9TQVNfSFdSQVRFX01BWF9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgKDB4QTApCisjZGVmaW5lIE1QSTJfU0FTX0hXUkFURV9NSU5fUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1NBU19IV1JBVEVfTUlOX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQVNfSFdSQVRFX01JTl9SQVRFXzNfMCAgICAgICAgICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0FTX0hXUkFURV9NSU5fUkFURV82XzAgICAgICAgICAgICAgICAgICAgICgweDBBKQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBTQVMgSU8gVW5pdCBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNBUyBJTyBVbml0IFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNfSU9fVU5JVDBfUEhZX0RBVEEKK3sKKyAgICBVOCAgICAgICAgICBQb3J0OyAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgUG9ydEZsYWdzOyAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgIFBoeUZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICBOZWdvdGlhdGVkTGlua1JhdGU7ICAgICAvKiAweDAzICovCisgICAgVTMyICAgICAgICAgQ29udHJvbGxlclBoeURldmljZUluZm87LyogMHgwNCAqLworICAgIFUxNiAgICAgICAgIEF0dGFjaGVkRGV2SGFuZGxlOyAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICBDb250cm9sbGVyRGV2SGFuZGxlOyAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgRGlzY292ZXJ5U3RhdHVzOyAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9TQVNfSU9fVU5JVDBfUEhZX0RBVEEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNfSU9fVU5JVDBfUEhZX0RBVEEsCisgIE1waTJTYXNJT1VuaXQwUGh5RGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXQwUGh5RGF0YV90OworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfU0FTX0lPVU5JVDBfUEhZX01BWAorI2RlZmluZSBNUEkyX1NBU19JT1VOSVQwX1BIWV9NQVggICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF8wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBNUEkyX1NBU19JT19VTklUMF9QSFlfREFUQSAgICAgICAgICBQaHlEYXRhW01QSTJfU0FTX0lPVU5JVDBfUEhZX01BWF07ICAvKiAweDEwICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzAsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfMCwKKyAgTXBpMlNhc0lPVW5pdFBhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lPVW5pdFBhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICgweDA1KQorCisvKiB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMCBQb3J0RmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX1BPUlRGTEFHU19ESVNDT1ZFUllfSU5fUFJPR1JFU1MgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfUE9SVEZMQUdTX0FVVE9fUE9SVF9DT05GSUcgICAgICAgICAgKDB4MDEpCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAwIFBoeUZsYWdzICovCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9QSFlGTEFHU19aT05JTkdfRU5BQkxFRCAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX1BIWUZMQUdTX1BIWV9ESVNBQkxFRCAgICAgICAgICAgICAgICgweDA4KQorCisvKiB1c2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV8gZGVmaW5lcyBmb3IgdGhlIE5lZ290aWF0ZWRMaW5rUmF0ZSBmaWVsZCAqLworCisvKiBzZWUgbXBpMl9zYXMuaCBmb3IgdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDAgQ29udHJvbGxlclBoeURldmljZUluZm8gdmFsdWVzICovCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAwIERpc2NvdmVyeVN0YXR1cyAqLworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfTUFYX0VOQ0xPU1VSRVNfRVhDRUVEICAgICAgICAgICAgKDB4ODAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19NQVhfRVhQQU5ERVJTX0VYQ0VFRCAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX01BWF9ERVZJQ0VTX0VYQ0VFRCAgICAgICAgICAgICAgICgweDIwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfTUFYX1RPUE9fUEhZU19FWENFRUQgICAgICAgICAgICAgKDB4MTAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19ET1dOU1RSRUFNX0lOSVRJQVRPUiAgICAgICAgICAgICAoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX01VTFRJX1NVQlRSQUNUSVZFX1NVQlRSQUNUSVZFICAgICgweDAwMDA4MDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfRVhQX01VTFRJX1NVQlRSQUNUSVZFICAgICAgICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19NVUxUSV9QT1JUX0RPTUFJTiAgICAgICAgICAgICAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX1RBQkxFX1RPX1NVQlRSQUNUSVZFX0xJTksgICAgICAgICgweDAwMDAxMDAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfVU5TVVBQT1JURURfREVWSUNFICAgICAgICAgICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19UQUJMRV9MSU5LICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX1NVQlRSQUNUSVZFX0xJTksgICAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfU01QX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19TTVBfRlVOQ1RJT05fRkFJTEVEICAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX0lOREVYX05PVF9FWElTVCAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfT1VUX1JPVVRFX0VOVFJJRVMgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19TTVBfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQwX0RTX01VTFRJUExFX1BPUlRTICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDBfRFNfVU5BRERSRVNTQUJMRV9ERVZJQ0UgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMF9EU19MT09QX0RFVEVDVEVEICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKiBTQVMgSU8gVW5pdCBQYWdlIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTX0lPX1VOSVQxX1BIWV9EQVRBCit7CisgICAgVTggICAgICAgICAgUG9ydDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBQb3J0RmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgIFBoeUZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgTWF4TWluTGlua1JhdGU7ICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICBDb250cm9sbGVyUGh5RGV2aWNlSW5mbzsgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgIE1heFRhcmdldFBvcnRDb25uZWN0VGltZTsgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KK30gTVBJMl9TQVNfSU9fVU5JVDFfUEhZX0RBVEEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNfSU9fVU5JVDFfUEhZX0RBVEEsCisgIE1waTJTYXNJT1VuaXQxUGh5RGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXQxUGh5RGF0YV90OworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfU0FTX0lPVU5JVDFfUEhZX01BWAorI2RlZmluZSBNUEkyX1NBU19JT1VOSVQxX1BIWV9NQVggICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF8xCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVNOYXJyb3dNYXhRdWV1ZURlcHRoOyAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbENvbnRyb2xGbGFnczsgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBU1dpZGVNYXhRdWV1ZURlcHRoOyAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FUQU1heFFEZXB0aDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydERldmljZU1pc3NpbmdEZWxheTsgICAgICAgICAgIC8qIDB4MTIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0RldmljZU1pc3NpbmdEZWxheTsgICAgICAgICAgICAgICAvKiAweDEzICovCisgICAgTVBJMl9TQVNfSU9fVU5JVDFfUEhZX0RBVEEgICAgICAgICAgUGh5RGF0YVtNUEkyX1NBU19JT1VOSVQxX1BIWV9NQVhdOyAgLyogMHgxNCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF8xLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzEsCisgIE1waTJTYXNJT1VuaXRQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXRQYWdlMV90OworCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT04gICAgICgweDA5KQorCisvKiB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMSBDb250cm9sRmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfREVWSUNFX1NFTEZfVEVTVCAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfU0FUQV8zXzBfTUFYICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfU0FUQV8xXzVfTUFYICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfU0FUQV9TV19QUkVTRVJWRSAgICAgICAgICAgICAgICAgICAgKDB4MTAwMCkKKworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9NQVNLX0RFVl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAoMHgwNjAwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TSElGVF9ERVZfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAoOSkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfREVWX1NVUFBPUlRfQk9USCAgICAgICAgICAgICAgICAgICAgKDB4MCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfREVWX1NBU19TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgKDB4MSkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX0NPTlRST0xfREVWX1NBVEFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgKDB4MikKKworI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBXzQ4QklUX0xCQV9SRVFVSVJFRCAgICAgICAgICAgICAoMHgwMDgwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBX1NNQVJUX1JFUVVJUkVEICAgICAgICAgICAgICAgICAoMHgwMDQwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBX05DUV9SRVFVSVJFRCAgICAgICAgICAgICAgICAgICAoMHgwMDIwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TQVRBX0ZVQV9SRVFVSVJFRCAgICAgICAgICAgICAgICAgICAoMHgwMDEwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9UQUJMRV9TVUJUUkFDVElWRV9JTExFR0FMICAgICAgICAgICAoMHgwMDA4KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9TVUJUUkFDVElWRV9JTExFR0FMICAgICAgICAgICAgICAgICAoMHgwMDA0KQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9GSVJTVF9MVkxfRElTQ19PTkxZICAgICAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfQ09OVFJPTF9DTEVBUl9BRkZJTElBVElPTiAgICAgICAgICAgICAgICAgICAoMHgwMDAxKQorCisvKiB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMSBBZGRpdGlvbmFsQ29udHJvbEZsYWdzICovCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9NVUxUSV9QT1JUX0RPTUFJTl9JTExFR0FMICAgICAgICAgICgweDAwODApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9TQVRBX0FTWU5DSFJPVU5PVVNfTk9USUZJQ0FUSU9OICAgICgweDAwNDApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9JTlZBTElEX1RPUE9MT0dZX0NPUlJFQ1RJT04gICAgICAgICgweDAwMjApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9QT1JUX0VOQUJMRV9PTkxZX1NBVEFfTElOS19SRVNFVCAgICgweDAwMTApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9PVEhFUl9BRkZJTElBVElPTl9TQVRBX0xJTktfUkVTRVQgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9TRUxGX0FGRklMSUFUSU9OX1NBVEFfTElOS19SRVNFVCAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9OT19BRkZJTElBVElPTl9TQVRBX0xJTktfUkVTRVQgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9BQ09OVFJPTF9BTExPV19UQUJMRV9UT19UQUJMRSAgICAgICAgICAgICAgICgweDAwMDEpCisKKy8qIGRlZmluZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMSBSZXBvcnREZXZpY2VNaXNzaW5nRGVsYXkgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX1JFUE9SVF9NSVNTSU5HX1RJTUVPVVRfTUFTSyAgICAgICAgICAgICAgICAgKDB4N0YpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9SRVBPUlRfTUlTU0lOR19VTklUXzE2ICAgICAgICAgICAgICAgICAgICAgICgweDgwKQorCisvKiB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMSBQb3J0RmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX1BPUlRfRkxBR1NfQVVUT19QT1JUX0NPTkZJRyAgICAgICAgICAgICAgICAgKDB4MDEpCisKKy8qIHZhbHVlcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAyIFBoeUZsYWdzICovCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9QSFlGTEFHU19aT05JTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfUEhZRkxBR1NfUEhZX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAoMHgwOCkKKworLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDAgTWF4TWluTGlua1JhdGUgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX01BWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9NQVhfUkFURV8xXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfTUFYX1JBVEVfM18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg5MCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX01BWF9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QTApCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9NSU5fUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1NBU0lPVU5JVDFfTUlOX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQxX01JTl9SQVRFXzNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0FTSU9VTklUMV9NSU5fUkFURV82XzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBKQorCisvKiBzZWUgbXBpMl9zYXMuaCBmb3IgdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDEgQ29udHJvbGxlclBoeURldmljZUluZm8gdmFsdWVzICovCisKKworLyogU0FTIElPIFVuaXQgUGFnZSA0ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU19JT1VOSVQ0X1NQSU5VUF9HUk9VUAoreworICAgIFU4ICAgICAgICAgIE1heFRhcmdldFNwaW51cDsgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgU3BpbnVwRGVsYXk7ICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX1NBU19JT1VOSVQ0X1NQSU5VUF9HUk9VUCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBU19JT1VOSVQ0X1NQSU5VUF9HUk9VUCwKKyAgTXBpMlNhc0lPVW5pdDRTcGludXBHcm91cF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNJT1VuaXQ0U3BpbnVwR3JvdXBfdDsKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBmb3VyIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNfSU9VTklUNF9QSFlfTUFYCisjZGVmaW5lIE1QSTJfU0FTX0lPVU5JVDRfUEhZX01BWCAgICAgICAgKDQpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTSU9VTklUXzQKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBNUEkyX1NBU19JT1VOSVQ0X1NQSU5VUF9HUk9VUCAgICAgICBTcGludXBHcm91cFBhcmFtZXRlcnNbNF07ICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb290RGV2aWNlV2FpdFRpbWU7ICAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRUluaXRpYWxTcGludXBEZWxheTsgICAgICAgICAgIC8qIDB4MjkgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRVJlcGx5RGVsYXk7ICAgICAgICAgICAgICAgICAgIC8qIDB4MkEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MkIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQSFlbTVBJMl9TQVNfSU9VTklUNF9QSFlfTUFYXTsgIC8qIDB4MkMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNJT1VOSVRfNCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF80LAorICBNcGkyU2FzSU9Vbml0UGFnZTRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzSU9Vbml0UGFnZTRfdDsKKworI2RlZmluZSBNUEkyX1NBU0lPVU5JVFBBR0U0X1BBR0VWRVJTSU9OICAgICAoMHgwMikKKworLyogZGVmaW5lcyBmb3IgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQ0X0ZMQUdTX0FVVE9fUE9SVEVOQUJMRSAgICAgICAgICAgICAgICgweDAxKQorCisvKiBkZWZpbmVzIGZvciBQSFkgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNJT1VOSVQ0X1BIWV9TUElOVVBfR1JPVVBfTUFTSyAgICAgICAgICAgICAgICgweDAzKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgU0FTIEV4cGFuZGVyIENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0FTIEV4cGFuZGVyIFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydEdlbkxlbmd0aDsgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVyeVN0YXR1czsgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJlbnREZXZIYW5kbGU7ICAgICAgICAgICAgLyogMHgxQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyQ2hhbmdlQ291bnQ7ICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXJSb3V0ZUluZGV4ZXM7ICAgICAgIC8qIDB4MUUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBU0xldmVsOyAgICAgICAgICAgICAgICAgICAvKiAweDIxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjIgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFBCdXNJbmFjdGl2aXR5VGltZUxpbWl0OyAgLyogMHgyNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUE1heENvbm5lY3RUaW1lTGltaXQ7ICAgICAvKiAweDI2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RQX1NNUF9OZXh1c0xvc3NUaW1lOyAgICAgIC8qIDB4MjggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhOdW1Sb3V0ZWRTYXNBZGRyZXNzZXM7ICAgLyogMHgyQSAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZVpvbmVNYW5hZ2VyU0FTQWRkcmVzczsvKiAweDJDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWm9uZUxvY2tJbmFjdGl2aXR5TGltaXQ7ICAgIC8qIDB4MzQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgzNiAqLworfSBNUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLAorICBNcGkyRXhwYW5kZXJQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJFeHBhbmRlclBhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT04gICAgICAgKDB4MDUpCisKKy8qIHZhbHVlcyBmb3IgU0FTIEV4cGFuZGVyIFBhZ2UgMCBEaXNjb3ZlcnlTdGF0dXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX01BWF9FTkNMT1NVUkVTX0VYQ0VFRCAgICAgICAgICgweDgwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTUFYX0VYUEFOREVSU19FWENFRUQgICAgICAgICAgKDB4NDAwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NQVhfREVWSUNFU19FWENFRUQgICAgICAgICAgICAoMHgyMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX01BWF9UT1BPX1BIWVNfRVhDRUVEICAgICAgICAgICgweDEwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfRE9XTlNUUkVBTV9JTklUSUFUT1IgICAgICAgICAgKDB4MDgwMDAwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NVUxUSV9TVUJUUkFDVElWRV9TVUJUUkFDVElWRSAoMHgwMDAwODAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX0VYUF9NVUxUSV9TVUJUUkFDVElWRSAgICAgICAgICgweDAwMDA0MDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTVVMVElfUE9SVF9ET01BSU4gICAgICAgICAgICAgKDB4MDAwMDIwMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19UQUJMRV9UT19TVUJUUkFDVElWRV9MSU5LICAgICAoMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX1VOU1VQUE9SVEVEX0RFVklDRSAgICAgICAgICAgICgweDAwMDAwODAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfVEFCTEVfTElOSyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19TVUJUUkFDVElWRV9MSU5LICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX1NNUF9DUkNfRVJST1IgICAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfU01QX0ZVTkNUSU9OX0ZBSUxFRCAgICAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19JTkRFWF9OT1RfRVhJU1QgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX09VVF9ST1VURV9FTlRSSUVTICAgICAgICAgICAgICgweDAwMDAwMDIwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfU01QX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NVUxUSVBMRV9QT1JUUyAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX1VOQUREUkVTU0FCTEVfREVWSUNFICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTE9PUF9ERVRFQ1RFRCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKy8qIHZhbHVlcyBmb3IgU0FTIEV4cGFuZGVyIFBhZ2UgMCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfWk9ORV9MT0NLRUQgICAgICAgICAgICAgICAgKDB4MTAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1NVUFBPUlRFRF9QSFlTSUNBTF9QUkVTICAgICgweDA4MDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19BU1NFUlRFRF9QSFlTSUNBTF9QUkVTICAgICAoMHgwNDAwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfWk9OSU5HX1NVUFBPUlQgICAgICAgICAgICAgKDB4MDIwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX0VOQUJMRURfWk9OSU5HICAgICAgICAgICAgICgweDAxMDApCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19UQUJMRV9UT19UQUJMRV9TVVBQT1JUICAgICAoMHgwMDgwKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfQ09OTkVDVE9SX0VORF9ERVZJQ0UgICAgICAgKDB4MDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX09USEVSU19DT05GSUcgICAgICAgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19DT05GSUdfSU5fUFJPR1JFU1MgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfUk9VVEVfVEFCTEVfQ09ORklHICAgICAgICAgKDB4MDAwMSkKKworCisvKiBTQVMgRXhwYW5kZXIgUGFnZSAxICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzEKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1UYWJsZUVudHJpZXNQcm9ncmFtbWVkOyAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1tZWRMaW5rUmF0ZTsgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHdMaW5rUmF0ZTsgICAgICAgICAgICAgICAgIC8qIDB4MTEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hlZERldkhhbmRsZTsgICAgICAgICAgLyogMHgxMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeUluZm87ICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWREZXZpY2VJbmZvOyAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlckRldkhhbmRsZTsgICAgICAgICAgLyogMHgxQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUNvdW50OyAgICAgICAgICAgICAgICAvKiAweDFFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVnb3RpYXRlZExpbmtSYXRlOyAgICAgICAgIC8qIDB4MUYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlJZGVudGlmaWVyOyAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkUGh5SWRlbnRpZmllcjsgICAgICAvKiAweDIxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MjIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3ZlcnlJbmZvOyAgICAgICAgICAgICAgLyogMHgyMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkUGh5SW5mbzsgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWm9uZUdyb3VwOyAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxmQ29uZmlnU3RhdHVzOyAgICAgICAgICAgLyogMHgyOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDJBICovCit9IE1QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzEsCisgIE1waTJFeHBhbmRlclBhZ2UxX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV4cGFuZGVyUGFnZTFfdDsKKworI2RlZmluZSBNUEkyX1NBU0VYUEFOREVSMV9QQUdFVkVSU0lPTiAgICAgICAoMHgwMikKKworLyogdXNlIE1QSTJfU0FTX1BSQVRFXyBkZWZpbmVzIGZvciB0aGUgUHJvZ3JhbW1lZExpbmtSYXRlIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19IV1JBVEVfIGRlZmluZXMgZm9yIHRoZSBId0xpbmtSYXRlIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19QSFlJTkZPXyBmb3IgdGhlIFBoeUluZm8gZmllbGQgKi8KKworLyogc2VlIG1waTJfc2FzLmggZm9yIHRoZSBNUEkyX1NBU19ERVZJQ0VfSU5GT18gZGVmaW5lcyB1c2VkIGZvciB0aGUgQXR0YWNoZWREZXZpY2VJbmZvIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXyBkZWZpbmVzIGZvciB0aGUgTmVnb3RpYXRlZExpbmtSYXRlIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19BUEhZSU5GT18gZGVmaW5lcyBmb3IgQXR0YWNoZWRQaHlJbmZvIGZpZWxkICovCisKKy8qIHZhbHVlcyBmb3IgU0FTIEV4cGFuZGVyIFBhZ2UgMSBEaXNjb3ZlcnlJbmZvIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMV9ESVNDSU5GT19CQURfUEhZX0RJU0FCTEVEICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjFfRElTQ0lORk9fTElOS19TVEFUVVNfQ0hBTkdFICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIxX0RJU0NJTkZPX05PX1JPVVRJTkdfRU5UUklFUyAgKDB4MDEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBTQVMgRGV2aWNlIENvbmZpZyBQYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0FTIERldmljZSBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX0RFVl8wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Q7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmVIYW5kbGU7ICAgICAgICAvKiAweDBBICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmVudERldkhhbmRsZTsgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzU3RhdHVzOyAgICAgICAgICAgLyogMHgxNyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hlZFBoeUlkZW50aWZpZXI7ICAvKiAweDFBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWm9uZUdyb3VwOyAgICAgICAgICAgICAgLyogMHgxQiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUluZm87ICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAgICAgLyogMHgyMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFBvcnRDb25uZWN0aW9uczsgICAgIC8qIDB4MjMgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VOYW1lOyAgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydEdyb3VwczsgICAgICAgICAgICAgLyogMHgyQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUdyb3VwOyAgICAgICAgICAgICAgIC8qIDB4MkQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sR3JvdXA7ICAgICAgICAgICAvKiAweDJFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgLyogMHgyRiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgIC8qIDB4MzAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAvKiAweDM0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX0RFVl8wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX0RFVl8wLAorICBNcGkyU2FzRGV2aWNlUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzRGV2aWNlUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1NBU0RFVklDRTBfUEFHRVZFUlNJT04gICAgICAgICAoMHgwOCkKKworLyogdmFsdWVzIGZvciBTQVMgRGV2aWNlIFBhZ2UgMCBBY2Nlc3NTdGF0dXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX05PX0VSUk9SUyAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0FUQV9JTklUX0ZBSUxFRCAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TQVRBX0NBUEFCSUxJVFlfRkFJTEVEICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NBVEFfQUZGSUxJQVRJT05fQ09ORkxJQ1QgICgweDAzKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0FUQV9ORUVEU19JTklUSUFMSVpBVElPTiAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19ST1VURV9OT1RfQUREUkVTU0FCTEUgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NNUF9FUlJPUl9OT1RfQUREUkVTU0FCTEUgICgweDA2KQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfREVWSUNFX0JMT0NLRUQgICAgICAgICAgICAgKDB4MDcpCisvKiBzcGVjaWZpYyB2YWx1ZXMgZm9yIFNBVEEgSW5pdCBmYWlsdXJlcyAqLworI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX1VOS05PV04gICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfQUZGSUxJQVRJT05fQ09ORkxJQ1QgICAoMHgxMSkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9ESUFHICAgICAgICAgICAgICAgICAgICgweDEyKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX0lERU5USUZJQ0FUSU9OICAgICAgICAgKDB4MTMpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfQ0hFQ0tfUE9XRVIgICAgICAgICAgICAoMHgxNCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9QSU9fU04gICAgICAgICAgICAgICAgICgweDE1KQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX01ETUFfU04gICAgICAgICAgICAgICAgKDB4MTYpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfVURNQV9TTiAgICAgICAgICAgICAgICAoMHgxNykKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX1NJRl9aT05JTkdfVklPTEFUSU9OICAgICAgICgweDE4KQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfU0lGX05PVF9BRERSRVNTQUJMRSAgICAgICAgKDB4MTkpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TSUZfTUFYICAgICAgICAgICAgICAgICAgICAoMHgxRikKKworLyogc2VlIG1waTJfc2FzLmggZm9yIHZhbHVlcyBmb3IgU0FTIERldmljZSBQYWdlIDAgRGV2aWNlSW5mbyB2YWx1ZXMgKi8KKworLyogdmFsdWVzIGZvciBTQVMgRGV2aWNlIFBhZ2UgMCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfQVNZTkNIUk9OT1VTX05PVElGWSAgICAgKDB4MDQwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX1NXX1BSRVNFUlZFICAgICAgICAgICAgICgweDAyMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfVU5TVVBQT1JURURfREVWSUNFICAgICAgICAgICAoMHgwMTAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfNDhCSVRfTEJBX1NVUFBPUlRFRCAgICAgKDB4MDA4MCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX1NNQVJUX1NVUFBPUlRFRCAgICAgICAgICgweDAwNDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9OQ1FfU1VQUE9SVEVEICAgICAgICAgICAoMHgwMDIwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfRlVBX1NVUFBPUlRFRCAgICAgICAgICAgKDB4MDAxMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19QT1JUX1NFTEVDVE9SX0FUVEFDSCAgICAgICAgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfREVWSUNFX1BSRVNFTlQgICAgICAgICAgICAgICAoMHgwMDAxKQorCisKKy8qIFNBUyBEZXZpY2UgUGFnZSAxICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19ERVZfMQoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgLyogMHgxQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxSZWdEZXZpY2VGSVNbMjBdOy8qIDB4MUMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzEsCisgIE1waTJTYXNEZXZpY2VQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNEZXZpY2VQYWdlMV90OworCisjZGVmaW5lIE1QSTJfU0FTREVWSUNFMV9QQUdFVkVSU0lPTiAgICAgICAgICgweDAxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgU0FTIFBIWSBDb25maWcgUGFnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNBUyBQSFkgUGFnZSAwICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMAoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25lckRldkhhbmRsZTsgICAgICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkRGV2SGFuZGxlOyAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hlZFBoeUlkZW50aWZpZXI7ICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMHgwRiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkUGh5SW5mbzsgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtbWVkTGlua1JhdGU7ICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHdMaW5rUmF0ZTsgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUNvdW50OyAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5SW5mbzsgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lZ290aWF0ZWRMaW5rUmF0ZTsgICAgIC8qIDB4MUMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAvKiAweDFEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgLyogMHgxRSAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMCwKKyAgTXBpMlNhc1BoeVBhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFkwX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDMpCisKKy8qIHVzZSBNUEkyX1NBU19QUkFURV8gZGVmaW5lcyBmb3IgdGhlIFByb2dyYW1tZWRMaW5rUmF0ZSBmaWVsZCAqLworCisvKiB1c2UgTVBJMl9TQVNfSFdSQVRFXyBkZWZpbmVzIGZvciB0aGUgSHdMaW5rUmF0ZSBmaWVsZCAqLworCisvKiB2YWx1ZXMgZm9yIFNBUyBQSFkgUGFnZSAwIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX1BIWTBfRkxBR1NfU0dQSU9fRElSRUNUX0FUVEFDSF9FTkMgICAgICAgICAgICAgKDB4MDEpCisKKy8qIHVzZSBNUEkyX1NBU19BUEhZSU5GT18gZGVmaW5lcyBmb3IgQXR0YWNoZWRQaHlJbmZvIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXyBkZWZpbmVzIGZvciB0aGUgTmVnb3RpYXRlZExpbmtSYXRlIGZpZWxkICovCisKKy8qIHVzZSBNUEkyX1NBU19QSFlJTkZPXyBmb3IgdGhlIFBoeUluZm8gZmllbGQgKi8KKworCisvKiBTQVMgUEhZIFBhZ2UgMSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzEKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZER3b3JkQ291bnQ7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW5uaW5nRGlzcGFyaXR5RXJyb3JDb3VudDsgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvc3NEd29yZFN5bmNoQ291bnQ7ICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5UmVzZXRQcm9ibGVtQ291bnQ7ICAgICAgIC8qIDB4MTggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzEsCisgIE1waTJTYXNQaHlQYWdlMV90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHlQYWdlMV90OworCisjZGVmaW5lIE1QSTJfU0FTUEhZMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgU0FTIFBvcnQgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQVMgUG9ydCBQYWdlIDAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BPUlRfMAoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydE51bWJlcjsgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRXaWR0aDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0V2lkdGg7ICAgICAgICAgIC8qIDB4MEIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lR3JvdXA7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUluZm87ICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QT1JUXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfUE9SVF8wLAorICBNcGkyU2FzUG9ydFBhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BvcnRQYWdlMF90OworCisjZGVmaW5lIE1QSTJfU0FTUE9SVDBfUEFHRVZFUlNJT04gICAgICAgICAgICgweDAwKQorCisvKiBzZWUgbXBpMl9zYXMuaCBmb3IgdmFsdWVzIGZvciBTQVMgUG9ydCBQYWdlIDAgRGV2aWNlSW5mbyB2YWx1ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFNBUyBFbmNsb3N1cmUgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQVMgRW5jbG9zdXJlIFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlTG9naWNhbElEOyAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZUhhbmRsZTsgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtU2xvdHM7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydFNsb3Q7ICAgICAgICAgICAgICAgICAgLyogMHgxQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VQRGV2SGFuZGxlOyAgICAgICAgICAgICAgIC8qIDB4MUUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDI0ICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX0VOQ0xPU1VSRV8wLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX0VOQ0xPU1VSRV8wLAorICBNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX1NBU0VOQ0xPU1VSRTBfUEFHRVZFUlNJT04gICAgICAoMHgwMykKKworLyogdmFsdWVzIGZvciBTQVMgRW5jbG9zdXJlIFBhZ2UgMCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19FTkNMUzBfRkxBR1NfTU5HX01BU0sgICAgICAgICAgICAgICgweDAwMEYpCisjZGVmaW5lIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19NTkdfVU5LTk9XTiAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfRU5DTFMwX0ZMQUdTX01OR19JT0NfU0VTICAgICAgICAgICAoMHgwMDAxKQorI2RlZmluZSBNUEkyX1NBU19FTkNMUzBfRkxBR1NfTU5HX0lPQ19TR1BJTyAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19NTkdfRVhQX1NHUElPICAgICAgICAgKDB4MDAwMykKKyNkZWZpbmUgTVBJMl9TQVNfRU5DTFMwX0ZMQUdTX01OR19TRVNfRU5DTE9TVVJFICAgICAoMHgwMDA0KQorI2RlZmluZSBNUEkyX1NBU19FTkNMUzBfRkxBR1NfTU5HX0lPQ19HUElPICAgICAgICAgICgweDAwMDUpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBMb2cgQ29uZmlnIFBhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIExvZyBQYWdlIDAgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0xPR18wX05VTV9MT0dfRU5UUklFUworI2RlZmluZSBNUEkyX0xPR18wX05VTV9MT0dfRU5UUklFUyAgICAgICAgICAoMSkKKyNlbmRpZgorCisjZGVmaW5lIE1QSTJfTE9HXzBfTE9HX0RBVEFfTEVOR1RIICAgICAgICAgICgweDFDKQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9MT0dfMF9FTlRSWQoreworICAgIFU2NCAgICAgICAgIFRpbWVTdGFtcDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgTG9nU2VxdWVuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgIExvZ0VudHJ5UXVhbGlmaWVyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVOCAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMSAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTIgKi8KKyAgICBVOCAgICAgICAgICBMb2dEYXRhW01QSTJfTE9HXzBfTE9HX0RBVEFfTEVOR1RIXTsvKiAweDE0ICovCit9IE1QSTJfTE9HXzBfRU5UUlksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9MT0dfMF9FTlRSWSwKKyAgTXBpMkxvZzBFbnRyeV90LCBNUEkyX1BPSU5URVIgcE1waTJMb2cwRW50cnlfdDsKKworLyogdmFsdWVzIGZvciBMb2cgUGFnZSAwIExvZ0VudHJ5IExvZ0VudHJ5UXVhbGlmaWVyIGZpZWxkICovCisjZGVmaW5lIE1QSTJfTE9HXzBfRU5UUllfUVVBTF9FTlRSWV9VTlVTRUQgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9MT0dfMF9FTlRSWV9RVUFMX1BPV0VSX09OX1JFU0VUICAgICAgICAoMHgwMDAxKQorI2RlZmluZSBNUEkyX0xPR18wX0VOVFJZX1FVQUxfVElNRVNUQU1QX1VQREFURSAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfTE9HXzBfRU5UUllfUVVBTF9NSU5fSU1QTEVNRU5UX1NQRUMgICAgKDB4ODAwMCkKKyNkZWZpbmUgTVBJMl9MT0dfMF9FTlRSWV9RVUFMX01BWF9JTVBMRU1FTlRfU1BFQyAgICAoMHhGRkZGKQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9MT0dfMAoreworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bUxvZ0VudHJpZXM7ICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MTIgKi8KKyAgICBNUEkyX0xPR18wX0VOVFJZICAgICAgICAgICAgICAgICAgICBMb2dFbnRyeVtNUEkyX0xPR18wX05VTV9MT0dfRU5UUklFU107IC8qIDB4MTQgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9MT0dfMCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0xPR18wLAorICBNcGkyTG9nUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTG9nUGFnZTBfdDsKKworI2RlZmluZSBNUEkyX0xPR18wX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAoMHgwMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIFJBSUQgQ29uZmlnIFBhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJBSUQgUGFnZSAwICovCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9SQUlEQ09ORklHMF9NQVhfRUxFTUVOVFMKKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9NQVhfRUxFTUVOVFMgICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRENPTkZJRzBfQ09ORklHX0VMRU1FTlQKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFbGVtZW50RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZvbERldkhhbmRsZTsgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSG90U3BhcmVQb29sOyAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza051bTsgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfUkFJRENPTkZJRzBfQ09ORklHX0VMRU1FTlQsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEQ09ORklHMF9DT05GSUdfRUxFTUVOVCwKKyAgTXBpMlJhaWRDb25maWcwQ29uZmlnRWxlbWVudF90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQ29uZmlnMENvbmZpZ0VsZW1lbnRfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRWxlbWVudEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX01BU0tfRUxFTUVOVF9UWVBFICAgICAgICgweDAwMEYpCisjZGVmaW5lIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX1ZPTFVNRV9FTEVNRU5UICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX1ZPTF9QSFlTX0RJU0tfRUxFTUVOVCAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX0hPVF9TUEFSRV9FTEVNRU5UICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX09DRV9FTEVNRU5UICAgICAgICAgICAgICgweDAwMDMpCisKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfUkFJRF9DT05GSUdVUkFUSU9OXzAKK3sKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bUhvdFNwYXJlczsgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5c0Rpc2tzOyAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1Wb2x1bWVzOyAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ051bTsgICAgICAgICAgICAgICAgICAvKiAweDBCICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdHVUlEWzI0XTsgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtRWxlbWVudHM7ICAgICAgICAgICAgICAgIC8qIDB4MkMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgyRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDJFICovCisgICAgTVBJMl9SQUlEQ09ORklHMF9DT05GSUdfRUxFTUVOVCAgICAgQ29uZmlnRWxlbWVudFtNUEkyX1JBSURDT05GSUcwX01BWF9FTEVNRU5UU107IC8qIDB4MzAgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9SQUlEX0NPTkZJR1VSQVRJT05fMCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1JBSURfQ09ORklHVVJBVElPTl8wLAorICBNcGkyUmFpZENvbmZpZ3VyYXRpb25QYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQ29uZmlndXJhdGlvblBhZ2UwX3Q7CisKKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQorCisvKiB2YWx1ZXMgZm9yIFJBSUQgQ29uZmlndXJhdGlvbiBQYWdlIDAgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEQ09ORklHMF9GTEFHX0ZPUkVJR05fQ09ORklHICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIERyaXZlciBQZXJzaXN0ZW50IE1hcHBpbmcgQ29uZmlnIFBhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEcml2ZXIgUGVyc2lzdGVudCBNYXBwaW5nIFBhZ2UgMCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9EUklWRVJfTUFQMF9FTlRSWQoreworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsSWRlbnRpZmllcjsgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwcGluZ0luZm9ybWF0aW9uOyAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJbmRleDsgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsQml0c01hcHBpbmc7ICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9EUklWRVJfTUFQMF9FTlRSWSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVAwX0VOVFJZLAorICBNcGkyRHJpdmVyTWFwMEVudHJ5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRyaXZlck1hcDBFbnRyeV90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9EUklWRVJfTUFQUElOR18wCit7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBNUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVAwX0VOVFJZICBFbnRyeTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVBQSU5HXzAsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9EUklWRVJfTUFQUElOR18wLAorICBNcGkyRHJpdmVyTWFwcGluZ1BhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRyaXZlck1hcHBpbmdQYWdlMF90OworCisjZGVmaW5lIE1QSTJfRFJJVkVSTUFQUElORzBfUEFHRVZFUlNJT04gICAgICAgICAoMHgwMCkKKworLyogdmFsdWVzIGZvciBEcml2ZXIgUGVyc2lzdGVudCBNYXBwaW5nIFBhZ2UgMCBNYXBwaW5nSW5mb3JtYXRpb24gZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9EUlZNQVAwX01BUElORk9fU0xPVF9NQVNLICAgICAgICAgICAgICAoMHgwN0YwKQorI2RlZmluZSBNUEkyX0RSVk1BUDBfTUFQSU5GT19TTE9UX1NISUZUICAgICAgICAgICAgICg0KQorI2RlZmluZSBNUEkyX0RSVk1BUDBfTUFQSU5GT19NSVNTSU5HX01BU0sgICAgICAgICAgICgweDAwMEYpCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTExNWYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKgorICogICAgICAgICAgIE5hbWU6ICBtcGkyX2luaXQuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgU0NTSSBpbml0aWF0b3IgbW9kZSBtZXNzYWdlcyBhbmQgc3RydWN0dXJlcworICogIENyZWF0aW9uIERhdGU6ICBKdW5lIDIzLCAyMDA2CisgKgorICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA2CisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjAxICBGaXhlZCBuYW1lIGZvciBwTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDIgIE1vZGlmaWVkIFRhc2sgTWFuYWdlbWVudCBUYXJnZXQgUmVzZXQgTWV0aG9kIGRlZmluZXMuCisgKiAgMDItMjktMDggIDAyLjAwLjAzICBBZGRlZCBRdWVyeSBUYXNrIFNldCBhbmQgUXVlcnkgVW5pdCBBdHRlbnRpb24uCisgKiAgMDMtMDMtMDggIDAyLjAwLjA0ICBGaXhlZCBuYW1lIG9mIHN0cnVjdCBfTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogIDA1LTIxLTA4ICAwMi4wMC4wNSAgRml4ZWQgdHlwbyBpbiBuYW1lIG9mIE1waTJTZXBSZXF1ZXN0X3QuCisgKiAgMTAtMDItMDggIDAyLjAwLjA2ICBSZW1vdmVkIFVudGFnZ2VkIGFuZCBObyBEaXNjb25uZWN0IHZhbHVlcyBmcm9tIFNDU0kgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgZmllbGQgVGFzayBBdHRyaWJ1dGUgZmxhZ3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyB0byBtcGkyLmggYmVjYXN1ZSB0aGV5IGFyZQorICogICAgICAgICAgICAgICAgICAgICAgY29tbW9uIHRvIG1hbnkgc3RydWN0dXJlcy4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgTVBJMl9JTklUX0gKKyNkZWZpbmUgTVBJMl9JTklUX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICAgICAgICAgU0NTSSBJbml0aWF0b3IgTWVzc2FnZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0NTSSBJTyBtZXNzYWdlcyBhbmQgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENEQlsyMF07ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeVJlZmVyZW5jZVRhZzsgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5QXBwbGljYXRpb25UYWc7ICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2s7ICAvKiAweDFBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7ICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9TQ1NJX0lPX0NEQl9FRURQMzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX0NEQl9FRURQMzIsCisgIE1waTJTY3NpSW9DZGJFZWRwMzJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2NzaUlvQ2RiRWVkcDMyX3Q7CisKKy8qIFRCRDogSSBkb24ndCB0aGluayB0aGlzIGlzIG5lZWRlZCBmb3IgTVBJMi9HZW4yICovCisjaWYgMAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDREJbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeVJlZmVyZW5jZVRhZzsgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5QXBwbGljYXRpb25UYWc7ICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2s7ICAvKiAweDFBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7ICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9TQ1NJX0lPMzJfQ0RCX0VFRFAxNiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU8zMl9DREJfRUVEUDE2LAorICBNcGkyU2NzaUlvMzJDZGJFZWRwMTZfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2NzaUlvMzJDZGJFZWRwMTZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ0RCMzJbMzJdOworICAgIE1QSTJfU0NTSV9JT19DREJfRUVEUDMyIEVFRFAzMjsKKyAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICBTR0U7Cit9IE1QSTJfU0NTSV9JT19DREJfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX0NEQl9VTklPTiwKKyAgTXBpMlNjc2lJb0NkYl90LCBNUEkyX1BPSU5URVIgcE1waTJTY3NpSW9DZGJfdDsKKworLyogU0NTSSBJTyBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTG93QWRkcmVzczsgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTGVuZ3RoOyAgICAgICAgICAgICAgLyogMHgxMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDA7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDE7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNraXBDb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEJpZGlyZWN0aW9uYWxEYXRhTGVuZ3RoOyAgICAgICAgLyogMHgyMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElvRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEVFRFBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEVFRFBCbG9ja1NpemU7ICAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNlY29uZGFyeVJlZmVyZW5jZVRhZzsgICAgICAgICAgLyogMHgyQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFNlY29uZGFyeUFwcGxpY2F0aW9uVGFnOyAgICAgICAgLyogMHgzMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uVGFnVHJhbnNsYXRpb25NYXNrOyAgLyogMHgzMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzQyAqLworICAgIE1QSTJfU0NTSV9JT19DREJfVU5JT04gIENEQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg0MCAqLworICAgIE1QSTJfU0dFX0lPX1VOSU9OICAgICAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg2MCAqLworfSBNUEkyX1NDU0lfSU9fUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fUkVRVUVTVCwKKyAgTXBpMlNDU0lJT1JlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSUlPUmVxdWVzdF90OworCisvKiBTQ1NJIElPIE1zZ0ZsYWdzIGJpdHMgKi8KKworLyogTXNnRmxhZ3MgZm9yIFNlbnNlQnVmZmVyQWRkcmVzc1NwYWNlICovCisjZGVmaW5lIE1QSTJfU0NTSUlPX01TR0ZMQUdTX01BU0tfU0VOU0VfQUREUiAgICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX01TR0ZMQUdTX1NZU1RFTV9TRU5TRV9BRERSICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX01TR0ZMQUdTX0lPQ0REUl9TRU5TRV9BRERSICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0NTSUlPX01TR0ZMQUdTX0lPQ1BMQl9TRU5TRV9BRERSICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0NTSUlPX01TR0ZMQUdTX0lPQ1BMQk5UQV9TRU5TRV9BRERSICAgKDB4MEMpCisKKy8qIFNDU0kgSU8gU0dMRmxhZ3MgYml0cyAqLworCisvKiBiYXNlIHZhbHVlcyBmb3IgRGF0YSBMb2NhdGlvbiBBZGRyZXNzIFNwYWNlICovCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX0FERFJfTUFTSyAgICAgICAgICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1NZU1RFTV9BRERSICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX0lPQ0REUl9BRERSICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX0lPQ1BMQl9BRERSICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX0lPQ1BMQk5UQV9BRERSICAgICAgICAgKDB4MEMpCisKKy8qIGJhc2UgdmFsdWVzIGZvciBUeXBlICovCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1RZUEVfTUFTSyAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1RZUEVfTVBJICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1RZUEVfSUVFRTMyICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1RZUEVfSUVFRTY0ICAgICAgICAgICAgKDB4MDIpCisKKy8qIHNoaWZ0IHZhbHVlcyBmb3IgZWFjaCBzdWItZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU0dMM19TSElGVCAgICAgICAgICAgICAoMTIpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1NHTDJfU0hJRlQgICAgICAgICAgICAgKDgpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1NHTDFfU0hJRlQgICAgICAgICAgICAgKDQpCisjZGVmaW5lIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1NHTDBfU0hJRlQgICAgICAgICAgICAgKDApCisKKy8qIFNDU0kgSU8gSW9GbGFncyBiaXRzICovCisKKy8qIExhcmdlIENEQiBBZGRyZXNzIFNwYWNlICovCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NEQl9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NjAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ0RCX0FERFJfU1lTVEVNICAgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DREJfQUREUl9JT0NERFIgICAgICAgICAgICAgICAgICgweDIwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NEQl9BRERSX0lPQ1BMQiAgICAgICAgICAgICAgICAgKDB4NDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ0RCX0FERFJfSU9DUExCTlRBICAgICAgICAgICAgICAoMHg2MDAwKQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0lPRkxBR1NfTEFSR0VfQ0RCICAgICAgICAgICAgICAgKDB4MTAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fSU9GTEFHU19CSURJUkVDVElPTkFMICAgICAgICAgICAoMHgwODAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19JT0ZMQUdTX01VTFRJQ0FTVCAgICAgICAgICAgICAgICgweDA0MDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0lPRkxBR1NfQ01EX0RFVEVSTUlORVNfREFUQV9ESVIgKDB4MDIwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fSU9GTEFHU19DREJMRU5HVEhfTUFTSyAgICAgICAgICAoMHgwMUZGKQorCisvKiBTQ1NJIElPIEVFRFBGbGFncyBiaXRzICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfUkVGVEFHICAgICAgICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfSU5DX1NFQ19SRUZUQUcgICAgICAgICgweDQwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTkNfUFJJX0FQUFRBRyAgICAgICAgKDB4MjAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19TRUNfQVBQVEFHICAgICAgICAoMHgxMDAwKQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19SRUZUQUcgICAgICAgICAgKDB4MDQwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0FQUFRBRyAgICAgICAgICAoMHgwMjAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfR1VBUkQgICAgICAgICAgICgweDAxMDApCisKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX1BBU1NUSFJVX1JFRlRBRyAgICAgICAoMHgwMDA4KQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19NQVNLX09QICAgICAgICAgICAgICAgKDB4MDAwNykKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX05PT1BfT1AgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfT1AgICAgICAgICAgICAgICgweDAwMDEpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19TVFJJUF9PUCAgICAgICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFTU9WRV9PUCAgICAgICAoMHgwMDAzKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfSU5TRVJUX09QICAgICAgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19SRVBMQUNFX09QICAgICAgICAgICAgKDB4MDAwNikKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFR0VOX09QICAgICAgICAoMHgwMDA3KQorCisvKiBTQ1NJIElPIExVTiBmaWVsZHM6IHVzZSBNUEkyX0xVTl8gZnJvbSBtcGkyLmggKi8KKworLyogU0NTSSBJTyBDb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9BRERDREJMRU5fTUFTSyAgICAgICgweEZDMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX0FERENEQkxFTl9TSElGVCAgICAgKDI2KQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfREFUQURJUkVDVElPTl9NQVNLICAoMHgwMzAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9OT0RBVEFUUkFOU0ZFUiAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1dSSVRFICAgICAgICAgICAgICAgKDB4MDEwMDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfUkVBRCAgICAgICAgICAgICAgICAoMHgwMjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9CSURJUkVDVElPTkFMICAgICAgICgweDAzMDAwMDAwKQorCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfVEFTS1BSSV9NQVNLICAgICAgICAoMHgwMDAwNzgwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9UQVNLUFJJX1NISUZUICAgICAgICgxMSkKKworI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1RBU0tBVFRSSUJVVEVfTUFTSyAgKDB4MDAwMDA3MDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUSAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9IRUFET0ZRICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURRICAgICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfQUNBUSAgICAgICAgICAgICAgICAoMHgwMDAwMDQwMCkKKworI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9NQVNLICAgICAgICAgICAgKDB4MDAwMDAwQzApCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfTk9fVExSICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT04gICAgICAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PRkYgICAgICAgICAgICAgKDB4MDAwMDAwODApCisKKworLyogU0NTSSBJTyBFcnJvciBSZXBseSBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX0lPX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0NTSVN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0NTSVN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJDb3VudDsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2Vuc2VDb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VJbmZvOyAgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVGFza1RhZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDIyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQmlkaXJlY3Rpb25hbFRyYW5zZmVyQ291bnQ7ICAgICAvKiAweDI0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDJDICovCit9IE1QSTJfU0NTSV9JT19SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fUkVQTFksCisgIE1waTJTQ1NJSU9SZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJTQ1NJSU9SZXBseV90OworCisvKiBTQ1NJIElPIFJlcGx5IFNDU0lTdGF0dXMgdmFsdWVzIChTQU0tNCBzdGF0dXMgY29kZXMpICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19HT09EICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX0NIRUNLX0NPTkRJVElPTiAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfQ09ORElUSU9OX01FVCAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX0lOVEVSTUVESUFURSAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFX0NPTkRNRVQgICAoMHgxNCkKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVCAgICgweDE4KQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX0NPTU1BTkRfVEVSTUlOQVRFRCAgICAgKDB4MjIpIC8qIG9ic29sZXRlICovCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFUVVNfVEFTS19TRVRfRlVMTCAgICAgICAgICAoMHgyOCkKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRVU19BQ0FfQUNUSVZFICAgICAgICAgICAgICgweDMwKQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVFVTX1RBU0tfQUJPUlRFRCAgICAgICAgICAgKDB4NDApCisKKy8qIFNDU0kgSU8gUmVwbHkgU0NTSVN0YXRlIGZsYWdzICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX1JFU1BPTlNFX0lORk9fVkFMSUQgICAgICgweDEwKQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfVEVSTUlOQVRFRCAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0NTSV9TVEFURV9OT19TQ1NJX1NUQVRVUyAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9GQUlMRUQgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEICAgICAgICAgKDB4MDEpCisKKyNkZWZpbmUgTVBJMl9TQ1NJX1RBU0tUQUdfVU5LTk9XTiAgICAgICAgICAgICAgICgweEZGRkYpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNDU0kgVGFzayBNYW5hZ2VtZW50IG1lc3NhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQ1NJIFRhc2sgTWFuYWdlbWVudCBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRhc2tUeXBlOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNFs3XTsgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFRhc2tNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgzMiAqLworfSBNUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVRVUVTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVRVUVTVCwKKyAgTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90OworCisvKiBUYXNrVHlwZSB2YWx1ZXMgKi8KKworI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJSVF9UQVNLX1NFVCAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVCAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9MT0dJQ0FMX1VOSVRfUkVTRVQgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQ0xFQVJfVEFTS19TRVQgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FVRVJZX1RBU0sgICAgICAgICAgICgweDA3KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9DTFJfQUNBICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1RBU0tfU0VUICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9VTklUX0FUVEVOVElPTiAgICgweDBBKQorCisvKiBNc2dGbGFncyBiaXRzICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfTVNHRkxBR1NfTUFTS19UQVJHRVRfUkVTRVQgICAgKDB4MTgpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX01TR0ZMQUdTX0xJTktfUkVTRVQgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9NU0dGTEFHU19ORVhVU19SRVNFVF9TUlNUICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfTVNHRkxBR1NfU0FTX0hBUkRfTElOS19SRVNFVCAgKDB4MTApCisKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfTVNHRkxBR1NfRE9fTk9UX1NFTkRfVEFTS19JVSAgKDB4MDEpCisKKworCisvKiBTQ1NJIFRhc2sgTWFuYWdlbWVudCBSZXBseSBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VDb2RlOyAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVGFza1R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVGVybWluYXRpb25Db3VudDsgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFksCisgIE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJTQ1NJTWFuYWdlbWVudFJlcGx5X3Q7CisKKy8qIFJlc3BvbnNlQ29kZSB2YWx1ZXMgKi8KKworI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fQ09NUExFVEUgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lOVkFMSURfRlJBTUUgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9OT1RfU1VQUE9SVEVEICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fRkFJTEVEICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX1NVQ0NFRURFRCAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9JTlZBTElEX0xVTiAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQyAgICAgICAgICAoMHg4MCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0NTSSBFbmNsb3N1cmUgUHJvY2Vzc29yIG1lc3NhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTQ1NJIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVxdWVzdCBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TRVBfUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgLyogMHgwMyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNsb3RTdGF0dXM7ICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFNsb3Q7ICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZUhhbmRsZTsgICAgLyogMHgxRSAqLworfSBNUEkyX1NFUF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0VQX1JFUVVFU1QsCisgIE1waTJTZXBSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNlcFJlcXVlc3RfdDsKKworLyogQWN0aW9uIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9TRVBfUkVRX0FDVElPTl9XUklURV9TVEFUVVMgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9BQ1RJT05fUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICgweDAxKQorCisvKiBGbGFncyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9GTEFHU19ERVZIQU5ETEVfQUREUkVTUyAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfRkxBR1NfRU5DTE9TVVJFX1NMT1RfQUREUkVTUyAgICAgICAoMHgwMSkKKworLyogU2xvdFN0YXR1cyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX1JFUVVFU1RfUkVNT1ZFICAgICAgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19JREVOVElGWV9SRVFVRVNUICAgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfUkVCVUlMRF9TVE9QUEVEICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0hPVF9TUEFSRSAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19VTkNPTkZJR1VSRUQgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfUFJFRElDVEVEX0ZBVUxUICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0RFVl9SRUJVSUxESU5HICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19ERVZfRkFVTFRZICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfTk9fRVJST1IgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKworLyogU0NTSSBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NFUF9SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgLyogMHgwMyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNsb3RTdGF0dXM7ICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFNsb3Q7ICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZUhhbmRsZTsgICAgLyogMHgxRSAqLworfSBNUEkyX1NFUF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NFUF9SRVBMWSwKKyAgTXBpMlNlcFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNlcFJlcGx5X3Q7CisKKy8qIFNsb3RTdGF0dXMgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX1JFTU9WRV9SRUFEWSAgICAgICAgICAoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19JREVOVElGWV9SRVFVRVNUICAgICAgKDB4MDAwMjAwMDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfUkVCVUlMRF9TVE9QUEVEICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0hPVF9TUEFSRSAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19VTkNPTkZJR1VSRUQgICAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfUFJFRElDVEVEX0ZBVUxUICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0RFVl9SRUJVSUxESU5HICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19ERVZfRkFVTFRZICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfTk9fRVJST1IgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1ZDgxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCkBAIC0wLDAgKzEsMTI5NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCisgKgorICoKKyAqICAgICAgICAgICBOYW1lOiAgbXBpMl9pb2MuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgSU9DLCBQb3J0LCBFdmVudCwgRlcgRG93bmxvYWQsIGFuZCBGVyBVcGxvYWQgbWVzc2FnZXMKKyAqICBDcmVhdGlvbiBEYXRlOiAgT2N0b2JlciAxMSwgMjAwNgorICoKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMAorICoKKyAqICBWZXJzaW9uIEhpc3RvcnkKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgorICogIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgSW4gSU9DRmFjdHMgUmVwbHkgc3RydWN0dXJlLCByZW5hbWVkIE1heERldmljZXMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1heFRhcmdldHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBUb3RhbEltYWdlU2l6ZSBmaWVsZCB0byBGV0Rvd25sb2FkIFJlcXVlc3QuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCByZXNlcnZlZCB3b3JkcyB0byBGV1VwbG9hZCBSZXF1ZXN0LgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQWRkZWQgSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCBFdmVudC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIFJlbW92ZWQgU3lzdGVtUmVwbHlRdWV1ZURlcHRoIGZpZWxkIGZyb20gdGhlIElPQ0luaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgYW5kIHJlcGxhY2VkIGl0IHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoIGFuZCBSZXBseUZyZWVRdWV1ZURlcHRoLgorICogICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgdGhlIE1pblJlcGx5UXVldWVEZXB0aCBmaWVsZCBvZiB0aGUgSU9DRmFjdHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcGx5IHdpdGggTWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGguCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1JEUFFfREVQVEhfTUlOIGRlZmluZSB0byBzcGVjaWZ5IHRoZSBtaW5pbXVtCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXB0aCBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBU0FkZHJlc3MgZmllbGQgdG8gSW5pdGlhdG9yIERldmljZSBUYWJsZQorICogICAgICAgICAgICAgICAgICAgICAgT3ZlcmZsb3cgRXZlbnQgZGF0YS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEFkZGVkIFJlYXNvbkNvZGUgTVBJMl9FVkVOVF9TQVNfSU5JVF9SQ19OT1RfUkVTUE9ORElORworICogICAgICAgICAgICAgICAgICAgICAgZm9yIFNBUyBJbml0aWF0b3IgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIFJlYXNvbiBDb2RlIGRlZmluZXMgZm9yIFNBUyBUb3BvbG9neSBDaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIExpc3QgRXZlbnQgZGF0YSwgaW5jbHVkaW5nIGFkZGluZyBhIGJpdCBmb3IgUEhZIFZhY2FudAorICogICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBhbmQgYWRkaW5nIGEgbWFzayBmb3IgdGhlIFJlYXNvbiBDb2RlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19ERUxBWV9OT1RfUkVTUE9ORElORy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IgTVBJMl9FWFRfSU1BR0VfVFlQRV9NRUdBUkFJRC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIEFkZGVkIEJvb3QgU3RhdHVzIGRlZmluZXMgZm9yIHRoZSBJT0NFeGNlcHRpb25zIGZpZWxkIG9mCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgSU9DRmFjdHMgUmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FWFRFTkRFRF9CVUZGRVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTVBJMl9WRVJTSU9OX1VOSU9OIHRvIG1waTIuaC4KKyAqICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWQgTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVRVUVTVCB0byB1c2UgbWFza3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgZW5hYmxlcywgYW5kIGFkZGVkIFNBU0Jyb2FkY2FzdFByaW1pdGl2ZU1hc2tzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIExvZyBFbnRyeSBBZGRlZCBFdmVudCBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmUuCisgKiAgMDItMjktMDggIDAyLjAwLjA2ICBBZGRlZCBkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0lOVEVHUkFURURfUkFJRC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgZGVmaW5lIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfU01QX1RBUkdFVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1heFZvbHVtZXMgYW5kIE1heFBlcnNpc3RlbnRFbnRyaWVzIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgSU9DRmFjdHMgcmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQcm90b2NhbEZsYWdzIGFuZCBJT0NDYXBhYmlsaXRpZXMgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0ZXX0lNQUdFX0hFQURFUi4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9QT1JURU5BQkxFX0ZMQUdTX0VOQUJMRV9TSU5HTEVfUE9SVC4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDcgIEZpeGVkIE1QSTJfRldfSU1BR0VfSEVBREVSIGJ5IGNoYW5naW5nIFJlc2VydmVkMjYgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIGEgVTE2IChmcm9tIGEgVTMyKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgZXh0cmEgJ3MnIGZyb20gRXZlbnRNYXNrcyBuYW1lLgorICogIDA2LTI3LTA4ICAwMi4wMC4wOCAgRml4ZWQgYW4gb2Zmc2V0IGluIGEgY29tbWVudC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDkgIFJlbW92ZWQgU3lzdGVtUmVwbHlGcmFtZVNpemUgZnJvbSBNUEkyX0lPQ19JTklUX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIEN1clJlcGx5RnJhbWVTaXplIGZyb20gTVBJMl9JT0NfRkFDVFNfUkVQTFkgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkIE1pblJlcGx5RnJhbWVTaXplIHRvIFJlcGx5RnJhbWVTaXplLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19FWENFUFRfSVJfRk9SRUlHTl9DT05GSUdfTUFYLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBSQUlET3BlcmF0aW9uIHZhbHVlcyBmb3IgSW50ZWdyYXRlZCBSQUlECisgKiAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zIFN0YXR1cyBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZm91ciBuZXcgSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCBFdmVudCBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICBSZWFzb25Db2RlIHZhbHVlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgUmVhc29uQ29kZSBkZWZpbmVzIGZvciBTQVMgRGV2aWNlIFN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aHJlZSBuZXcgRGlzY292ZXJ5U3RhdHVzIGJpdHMgZm9yIHRoZSBTQVMKKyAqICAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVyeSBldmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTXVsdGlwbGV4aW5nIFN0YXR1cyBDaGFuZ2UgYml0IHRvIHRoZSBQaHlTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIHRoZSBTQVMgVG9wb2xvZ3kgQ2hhbmdlIExpc3QgZXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgZGVmaW5lIGZvciBNUEkyX0lOSVRfSU1BR0VfQk9PVEZMQUdTX1hNRU1DT1BZLgorICogICAgICAgICAgICAgICAgICAgICAgQm9vdEZsYWdzIGFyZSBub3cgcHJvZHVjdC1zcGVjaWZpYy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZXMgZm9yIHRoZSBpbmRpdmR1YWwgc2lnbmF0dXJlIGJ5dGVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgTVBJMl9JTklUX0lNQUdFX0ZPT1RFUi4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19ET1dOU1RSRUFNX0lOSVRJQVRPUgorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TQVRBX0lOSVRfRkFJTFVSRSBkZWZpbmUuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE1QSTJfSU9DX0gKKyNkZWZpbmUgTVBJMl9JT0NfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgICAgICAgICBJT0MgTWVzc2FnZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSU9DSW5pdCBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJT0NJbml0IFJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSU9DX0lOSVRfUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFdob0luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1zZ1ZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEhlYWRlclZlcnNpb247ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVJlcXVlc3RGcmFtZVNpemU7ICAgICAgICAgLyogMHgxQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoOyAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcGx5RnJlZVF1ZXVlRGVwdGg7ICAgICAgICAgICAgLyogMHgxRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyQWRkcmVzc0hpZ2g7ICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVJlcGx5QWRkcmVzc0hpZ2g7ICAgICAgICAgLyogMHgyNCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVJlcXVlc3RGcmFtZUJhc2VBZGRyZXNzOyAgLyogMHgyOCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZUFkZHJlc3M7LyogMHgzMCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJlcGx5RnJlZVF1ZXVlQWRkcmVzczsgICAgICAgICAgLyogMHgzOCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFRpbWVTdGFtcDsgICAgICAgICAgICAgICAgICAgICAgLyogMHg0MCAqLworfSBNUEkyX0lPQ19JTklUX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JT0NfSU5JVF9SRVFVRVNULAorICBNcGkySU9DSW5pdFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DSW5pdFJlcXVlc3RfdDsKKworLyogV2hvSW5pdCB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9XSE9JTklUX05PVF9JTklUSUFMSVpFRCAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1dIT0lOSVRfU1lTVEVNX0JJT1MgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfV0hPSU5JVF9ST01fQklPUyAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9XSE9JTklUX1BDSV9QRUVSICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1dIT0lOSVRfSE9TVF9EUklWRVIgICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfV0hPSU5JVF9NQU5VRkFDVFVSRVIgICAgICAgICAgICAgICAoMHgwNSkKKworLyogTXNnVmVyc2lvbiAqLworI2RlZmluZSBNUEkyX0lPQ0lOSVRfTVNHVkVSU0lPTl9NQUpPUl9NQVNLICAgICAgKDB4RkYwMCkKKyNkZWZpbmUgTVBJMl9JT0NJTklUX01TR1ZFUlNJT05fTUFKT1JfU0hJRlQgICAgICg4KQorI2RlZmluZSBNUEkyX0lPQ0lOSVRfTVNHVkVSU0lPTl9NSU5PUl9NQVNLICAgICAgKDB4MDBGRikKKyNkZWZpbmUgTVBJMl9JT0NJTklUX01TR1ZFUlNJT05fTUlOT1JfU0hJRlQgICAgICgwKQorCisvKiBIZWFkZXJWZXJzaW9uICovCisjZGVmaW5lIE1QSTJfSU9DSU5JVF9IRFJWRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0lPQ0lOSVRfSERSVkVSU0lPTl9VTklUX1NISUZUICAgICAgKDgpCisjZGVmaW5lIE1QSTJfSU9DSU5JVF9IRFJWRVJTSU9OX0RFVl9NQVNLICAgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX0lPQ0lOSVRfSERSVkVSU0lPTl9ERVZfU0hJRlQgICAgICAgKDApCisKKy8qIG1pbmltdW0gZGVwdGggZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUgKi8KKyNkZWZpbmUgTVBJMl9SRFBRX0RFUFRIX01JTiAgICAgICAgICAgICAgICAgICAgICgxNikKKworCisvKiBJT0NJbml0IFJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0lPQ19JTklUX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfSU9DX0lOSVRfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JT0NfSU5JVF9SRVBMWSwKKyAgTXBpMklPQ0luaXRSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NJbml0UmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSU9DRmFjdHMgbWVzc2FnZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSU9DRmFjdHMgUmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9JT0NfRkFDVFNfUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworfSBNUEkyX0lPQ19GQUNUU19SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSU9DX0ZBQ1RTX1JFUVVFU1QsCisgIE1waTJJT0NGYWN0c1JlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DRmFjdHNSZXF1ZXN0X3Q7CisKKworLyogSU9DRmFjdHMgUmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfSU9DX0ZBQ1RTX1JFUExZCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTXNnVmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyVmVyc2lvbjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSU9DTnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DRXhjZXB0aW9uczsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Q2hhaW5EZXB0aDsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQb3J0czsgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdENyZWRpdDsgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdElEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DQ2FwYWJpbGl0aWVzOyAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgTVBJMl9WRVJTSU9OX1VOSU9OICAgICAgRldWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DUmVxdWVzdEZyYW1lU2l6ZTsgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDI2ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4SW5pdGlhdG9yczsgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4VGFyZ2V0czsgICAgICAgICAgICAgICAgICAgICAvKiAweDJBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4U2FzRXhwYW5kZXJzOyAgICAgICAgICAgICAgICAvKiAweDJDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4RW5jbG9zdXJlczsgICAgICAgICAgICAgICAgICAvKiAweDJFICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xGbGFnczsgICAgICAgICAgICAgICAgICAvKiAweDMwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSGlnaFByaW9yaXR5Q3JlZGl0OyAgICAgICAgICAgICAvKiAweDMyICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7IC8qIDB4MzQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXBseUZyYW1lU2l6ZTsgICAgICAgICAgICAgICAgIC8qIDB4MzYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhWb2x1bWVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MzggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhQZXJzaXN0ZW50RW50cmllczsgICAgICAgICAgIC8qIDB4M0EgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KK30gTVBJMl9JT0NfRkFDVFNfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JT0NfRkFDVFNfUkVQTFksCisgIE1waTJJT0NGYWN0c1JlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ0ZhY3RzUmVwbHlfdDsKKworLyogTXNnVmVyc2lvbiAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX01TR1ZFUlNJT05fTUFKT1JfTUFTSyAgICAgICAgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX01TR1ZFUlNJT05fTUFKT1JfU0hJRlQgICAgICAgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19NU0dWRVJTSU9OX01JTk9SX01BU0sgICAgICAgICAgICAgKDB4MDBGRikKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19NU0dWRVJTSU9OX01JTk9SX1NISUZUICAgICAgICAgICAgKDApCisKKy8qIEhlYWRlclZlcnNpb24gKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19IRFJWRVJTSU9OX1VOSVRfTUFTSyAgICAgICAgICAgICAgKDB4RkYwMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19IRFJWRVJTSU9OX1VOSVRfU0hJRlQgICAgICAgICAgICAgKDgpCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfSERSVkVSU0lPTl9ERVZfTUFTSyAgICAgICAgICAgICAgICgweDAwRkYpCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfSERSVkVSU0lPTl9ERVZfU0hJRlQgICAgICAgICAgICAgICgwKQorCisvKiBJT0NFeGNlcHRpb25zICovCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfRVhDRVBUX0lSX0ZPUkVJR05fQ09ORklHX01BWCAgICAgICgweDAxMDApCisKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19FWENFUFRfQk9PVFNUQVRfTUFTSyAgICAgICAgICAgICAgKDB4MDBFMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19FWENFUFRfQk9PVFNUQVRfR09PRCAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19FWENFUFRfQk9PVFNUQVRfQkFDS1VQICAgICAgICAgICAgKDB4MDAyMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19FWENFUFRfQk9PVFNUQVRfUkVTVE9SRUQgICAgICAgICAgKDB4MDA0MCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19FWENFUFRfQk9PVFNUQVRfQ09SUlVQVF9CQUNLVVAgICAgKDB4MDA2MCkKKworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9NRVRBREFUQV9VTlNVUFBPUlRFRCAgICAgICAoMHgwMDEwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9NQU5VRkFDVF9DSEVDS1NVTV9GQUlMICAgICAoMHgwMDA4KQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9GV19DSEVDS1NVTV9GQUlMICAgICAgICAgICAoMHgwMDA0KQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9SQUlEX0NPTkZJR19JTlZBTElEICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9DT05GSUdfQ0hFQ0tTVU1fRkFJTCAgICAgICAoMHgwMDAxKQorCisvKiBkZWZpbmVzIGZvciBXaG9Jbml0IGZpZWxkIGFyZSBhZnRlciB0aGUgSU9DSW5pdCBSZXF1ZXN0ICovCisKKy8qIFByb2R1Y3RJRCBmaWVsZCB1c2VzIE1QSTJfRldfSEVBREVSX1BJRF8gKi8KKworLyogSU9DQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkgICAgICAgICAgICgweDAwMDAyMDAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEICAgICAgICAoMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NVUxUSUNBU1QgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfQklESVJFQ1RJT05BTF9UQVJHRVQgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VFRFAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9TTkFQU0hPVF9CVUZGRVIgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRElBR19UUkFDRV9CVUZGRVIgICAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RBU0tfU0VUX0ZVTExfSEFORExJTkcgKDB4MDAwMDAwMDQpCisKKy8qIFByb3RvY29sRmxhZ3MgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TQ1NJX1RBUkdFVCAgICAgICAgICAgICAgKDB4MDAwMSkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TQ1NJX0lOSVRJQVRPUiAgICAgICAgICAgKDB4MDAwMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUG9ydEZhY3RzIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBvcnRGYWN0cyBSZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1BPUlRfRkFDVFNfUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnROdW1iZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworfSBNUEkyX1BPUlRfRkFDVFNfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1BPUlRfRkFDVFNfUkVRVUVTVCwKKyAgTXBpMlBvcnRGYWN0c1JlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUG9ydEZhY3RzUmVxdWVzdF90OworCisvKiBQb3J0RmFjdHMgUmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUE9SVF9GQUNUU19SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnROdW1iZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnRUeXBlOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heFBvc3RlZENtZEJ1ZmZlcnM7ICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxQSAqLworfSBNUEkyX1BPUlRfRkFDVFNfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9QT1JUX0ZBQ1RTX1JFUExZLAorICBNcGkyUG9ydEZhY3RzUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUG9ydEZhY3RzUmVwbHlfdDsKKworLyogUG9ydFR5cGUgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfUE9SVEZBQ1RTX1BPUlRUWVBFX0lOQUNUSVZFICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUE9SVEZBQ1RTX1BPUlRUWVBFX0ZDICAgICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfUE9SVEZBQ1RTX1BPUlRUWVBFX0lTQ1NJICAgICAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIE1QSTJfUE9SVEZBQ1RTX1BPUlRUWVBFX1NBU19QSFlTSUNBTCAgICAgICAgKDB4MzApCisjZGVmaW5lIE1QSTJfUE9SVEZBQ1RTX1BPUlRUWVBFX1NBU19WSVJUVUFMICAgICAgICAgKDB4MzEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFBvcnRFbmFibGUgbWVzc2FnZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUG9ydEVuYWJsZSBSZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1BPUlRfRU5BQkxFX1JFUVVFU1QKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQb3J0RmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KK30gTVBJMl9QT1JUX0VOQUJMRV9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUE9SVF9FTkFCTEVfUkVRVUVTVCwKKyAgTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3Q7CisKKworLyogUG9ydEVuYWJsZSBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9QT1JUX0VOQUJMRV9SRVBMWQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnRGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX1BPUlRfRU5BQkxFX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUE9SVF9FTkFCTEVfUkVQTFksCisgIE1waTJQb3J0RW5hYmxlUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUG9ydEVuYWJsZVJlcGx5X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEV2ZW50Tm90aWZpY2F0aW9uIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEV2ZW50Tm90aWZpY2F0aW9uIFJlcXVlc3QgbWVzc2FnZSAqLworI2RlZmluZSBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFMgICAgICAgICAgICg0KQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVRVUVTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEV2ZW50TWFza3NbTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTXTsvKiAweDE0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3M7ICAgICAvKiAweDI0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDI2ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCit9IE1QSTJfRVZFTlRfTk9USUZJQ0FUSU9OX1JFUVVFU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVRVUVTVCwKKyAgTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudE5vdGlmaWNhdGlvblJlcXVlc3RfdDsKKworCisvKiBFdmVudE5vdGlmaWNhdGlvbiBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVQTFkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFdmVudERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBY2tSZXF1aXJlZDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBFdmVudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBFdmVudENvbnRleHQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBFdmVudERhdGFbMV07ICAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KK30gTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVQTFksCisgIE1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdDsKKworLyogQWNrUmVxdWlyZWQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fQUNLX05PVF9SRVFVSVJFRCAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fQUNLX1JFUVVJUkVEICAgICAgICAoMHgwMSkKKworLyogRXZlbnQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9MT0dfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NUQVRFX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfSEFSRF9SRVNFVF9SRUNFSVZFRCAgICAgICAgICAgICAgKDB4MDAwNSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9FVkVOVF9DSEFOR0UgICAgICAgICAgICAgICAgICAgICAoMHgwMDBBKQorI2RlZmluZSBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEwgICAgICAgICAgICAgICAgICAgICgweDAwMEUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFICAgICAgICAgKDB4MDAwRikKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTICAgICAgICAgICAgICAoMHgwMDE0KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ESVNDT1ZFUlkgICAgICAgICAgICAgICAgICAgICgweDAwMTYpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkUgICAgICAgICAgKDB4MDAxNykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfSU5JVF9ERVZJQ0VfU1RBVFVTX0NIQU5HRSAgICAoMHgwMDE4KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19JTklUX1RBQkxFX09WRVJGTE9XICAgICAgICAgICgweDAwMTkpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUICAgICAgICAgKDB4MDAxQykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRU5DTF9ERVZJQ0VfU1RBVFVTX0NIQU5HRSAgICAoMHgwMDFEKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMUUpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSyAgICAgICAgICAgICAgICAgKDB4MDAxRikKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DT05GSUdVUkFUSU9OX0NIQU5HRV9MSVNUICAgICAoMHgwMDIwKQorI2RlZmluZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCAgICAgICAgICAgICAgICAgICgweDAwMjEpCisKKworLyogTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGRhdGEgKi8KKworLyogdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgbWF0Y2hlcyBNUEkyX0xPR18wX0VOVFJZIGluIG1waTJfY25mZy5oICovCisjZGVmaW5lIE1QSTJfRVZFTlRfREFUQV9MT0dfREFUQV9MRU5HVEggICAgICAgICAgICAgKDB4MUMpCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfTE9HX0VOVFJZX0FEREVECit7CisgICAgVTY0ICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICBMb2dTZXF1ZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgTG9nRW50cnlRdWFsaWZpZXI7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDExICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMiAqLworICAgIFU4ICAgICAgICAgIExvZ0RhdGFbTVBJMl9FVkVOVF9EQVRBX0xPR19EQVRBX0xFTkdUSF07LyogMHgxNCAqLworfSBNUEkyX0VWRU5UX0RBVEFfTE9HX0VOVFJZX0FEREVELAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9MT0dfRU5UUllfQURERUQsCisgIE1waTJFdmVudERhdGFMb2dFbnRyeUFkZGVkX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YUxvZ0VudHJ5QWRkZWRfdDsKKworLyogSGFyZCBSZXNldCBSZWNlaXZlZCBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfSEFSRF9SRVNFVF9SRUNFSVZFRAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX0VWRU5UX0RBVEFfSEFSRF9SRVNFVF9SRUNFSVZFRCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfSEFSRF9SRVNFVF9SRUNFSVZFRCwKKyAgTXBpMkV2ZW50RGF0YUhhcmRSZXNldFJlY2VpdmVkX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YUhhcmRSZXNldFJlY2VpdmVkX3Q7CisKKy8qIFRhc2sgU2V0IEZ1bGwgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1RBU0tfU0VUX0ZVTEwKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBDdXJyZW50RGVwdGg7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1RBU0tfU0VUX0ZVTEwsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1RBU0tfU0VUX0ZVTEwsCisgIE1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90OworCisKKy8qIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVGFza1RhZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZTsgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQVNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQVNDUTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTFVOWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0UsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRSwKKyAgTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90LAorICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdDsKKworLyogU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgUmVhc29uQ29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQSAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19VTlNVUFBPUlRFRCAgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0lOVEVSTkFMX0RFVklDRV9SRVNFVCAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVEFTS19BQk9SVF9JTlRFUk5BTCAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BQk9SVF9UQVNLX1NFVF9JTlRFUk5BTCAgKDB4MEEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NMRUFSX1RBU0tfU0VUX0lOVEVSTkFMICAoMHgwQikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfUVVFUllfVEFTS19JTlRFUk5BTCAgICAgICgweDBDKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BU1lOQ19OT1RJRklDQVRJT04gICAgICAgKDB4MEQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9JTlRFUk5BTF9ERVZfUkVTRVQgICAoMHgwRSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX1RBU0tfQUJPUlRfSU5URVJOQUwgICgweDBGKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRSAgICAgICAgKDB4MTApCisKKworLyogSW50ZWdyYXRlZCBSQUlEIE9wZXJhdGlvbiBTdGF0dXMgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX0lSX09QRVJBVElPTl9TVEFUVVMKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBWb2xEZXZIYW5kbGU7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFJRE9wZXJhdGlvbjsgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQZXJjZW50Q29tcGxldGU7ICAgICAgICAgICAgLyogMHgwNSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJldmVkMzsgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9EQVRBX0lSX09QRVJBVElPTl9TVEFUVVMsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0lSX09QRVJBVElPTl9TVEFUVVMsCisgIE1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190LAorICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190OworCisvKiBJbnRlZ3JhdGVkIFJBSUQgT3BlcmF0aW9uIFN0YXR1cyBFdmVudCBkYXRhIFJBSURPcGVyYXRpb24gdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUkFJRE9QX1JFU1lOQyAgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX1JBSURPUF9PTkxJTkVfQ0FQX0VYUEFOU0lPTiAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9SQUlET1BfQ09OU0lTVEVOQ1lfQ0hFQ0sgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUkFJRE9QX0JBQ0tHUk9VTkRfSU5JVCAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX1JBSURPUF9NQUtFX0RBVEFfQ09OU0lTVEVOVCAgICAgICAoMHgwNCkKKworCisvKiBJbnRlZ3JhdGVkIFJBSUQgVm9sdW1lIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9JUl9WT0xVTUUKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBWb2xEZXZIYW5kbGU7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBOZXdWYWx1ZTsgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzVmFsdWU7ICAgICAgICAgICAgICAvKiAweDA4ICovCit9IE1QSTJfRVZFTlRfREFUQV9JUl9WT0xVTUUsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0lSX1ZPTFVNRSwKKyAgTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3Q7CisKKy8qIEludGVncmF0ZWQgUkFJRCBWb2x1bWUgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRV9SQ19TRVRUSU5HU19DSEFOR0VEICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RBVFVTX0ZMQUdTX0NIQU5HRUQgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfVk9MVU1FX1JDX1NUQVRFX0NIQU5HRUQgICAgICAgICAgICgweDAzKQorCisKKy8qIEludGVncmF0ZWQgUkFJRCBQaHlzaWNhbCBEaXNrIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9JUl9QSFlTSUNBTF9ESVNLCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZWFzb25Db2RlOyAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOyAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFNsb3Q7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBOZXdWYWx1ZTsgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzVmFsdWU7ICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfRVZFTlRfREFUQV9JUl9QSFlTSUNBTF9ESVNLLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9JUl9QSFlTSUNBTF9ESVNLLAorICBNcGkyRXZlbnREYXRhSXJQaHlzaWNhbERpc2tfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhSXJQaHlzaWNhbERpc2tfdDsKKworLyogSW50ZWdyYXRlZCBSQUlEIFBoeXNpY2FsIERpc2sgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX0lSX1BIWVNESVNLX1JDX1NFVFRJTkdTX0NIQU5HRUQgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9QSFlTRElTS19SQ19TVEFUVVNfRkxBR1NfQ0hBTkdFRCAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUEhZU0RJU0tfUkNfU1RBVEVfQ0hBTkdFRCAgICAgICAgICgweDAzKQorCisKKy8qIEludGVncmF0ZWQgUkFJRCBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIE51bUVsZW1lbnRzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9FVkVOVF9JUl9DT05GSUdfRUxFTUVOVF9DT1VOVAorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NPTkZJR19FTEVNRU5UX0NPVU5UICAgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0lSX0NPTkZJR19FTEVNRU5UCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRWxlbWVudEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBWb2xEZXZIYW5kbGU7ICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c0Rpc2tOdW07ICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQaHlzRGlza0RldkhhbmRsZTsgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX0VWRU5UX0lSX0NPTkZJR19FTEVNRU5ULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfSVJfQ09ORklHX0VMRU1FTlQsCisgIE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90OworCisvKiBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEgRWxlbWVudEZsYWdzIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfRUxFTUVOVF9UWVBFX01BU0sgICAoMHgwMDBGKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfVk9MVU1FX0VMRU1FTlQgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfVk9MUEhZU0RJU0tfRUxFTUVOVCAoMHgwMDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfSE9UU1BBUkVfRUxFTUVOVCAgICAoMHgwMDAyKQorCisvKiBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEgUmVhc29uQ29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfQURERUQgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1JFTU9WRUQgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19OT19DSEFOR0UgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfSElERSAgICAgICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1VOSElERSAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19WT0xVTUVfQ1JFQVRFRCAgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVk9MVU1FX0RFTEVURUQgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0NSRUFURUQgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19QRF9ERUxFVEVEICAgICAgICAgICAgICAoMHgwOSkKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9JUl9DT05GSUdfQ0hBTkdFX0xJU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bUVsZW1lbnRzOyAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ051bTsgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgTVBJMl9FVkVOVF9JUl9DT05GSUdfRUxFTUVOVCAgICBDb25maWdFbGVtZW50W01QSTJfRVZFTlRfSVJfQ09ORklHX0VMRU1FTlRfQ09VTlRdOyAgICAvKiAweDA4ICovCit9IE1QSTJfRVZFTlRfREFUQV9JUl9DT05GSUdfQ0hBTkdFX0xJU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0lSX0NPTkZJR19DSEFOR0VfTElTVCwKKyAgTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90LAorICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFJckNvbmZpZ0NoYW5nZUxpc3RfdDsKKworLyogSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCBFdmVudCBkYXRhIEZsYWdzIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9GTEFHU19GT1JFSUdOX0NPTkZJRyAgICgweDAwMDAwMDAxKQorCisKKy8qIFNBUyBEaXNjb3ZlcnkgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19ESVNDT1ZFUlkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVyeVN0YXR1czsgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfRElTQ09WRVJZLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9TQVNfRElTQ09WRVJZLAorICBNcGkyRXZlbnREYXRhU2FzRGlzY292ZXJ5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc0Rpc2NvdmVyeV90OworCisvKiBTQVMgRGlzY292ZXJ5IEV2ZW50IGRhdGEgRmxhZ3MgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfREVWSUNFX0NIQU5HRSAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19JTl9QUk9HUkVTUyAgICAgICAgICAgICAgICAgICAgICgweDAxKQorCisvKiBTQVMgRGlzY292ZXJ5IEV2ZW50IGRhdGEgUmVhc29uQ29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRElTQ19SQ19TVEFSVEVEICAgICAgICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ESVNDX1JDX0NPTVBMRVRFRCAgICAgICAgICAgICAgICAgICAgKDB4MDIpCisKKy8qIFNBUyBEaXNjb3ZlcnkgRXZlbnQgZGF0YSBEaXNjb3ZlcnlTdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTUFYX0VOQ0xPU1VSRVNfRVhDRUVEICAgICAgICAgICAgKDB4ODAwMDAwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTUFYX0VYUEFOREVSU19FWENFRUQgICAgICAgICAgICAgKDB4NDAwMDAwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTUFYX0RFVklDRVNfRVhDRUVEICAgICAgICAgICAgICAgKDB4MjAwMDAwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTUFYX1RPUE9fUEhZU19FWENFRUQgICAgICAgICAgICAgKDB4MTAwMDAwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfRE9XTlNUUkVBTV9JTklUSUFUT1IgICAgICAgICAgICAgKDB4MDgwMDAwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTVVMVElfU1VCVFJBQ1RJVkVfU1VCVFJBQ1RJVkUgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfRVhQX01VTFRJX1NVQlRSQUNUSVZFICAgICAgICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTVVMVElfUE9SVF9ET01BSU4gICAgICAgICAgICAgICAgKDB4MDAwMDIwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfVEFCTEVfVE9fU1VCVFJBQ1RJVkVfTElOSyAgICAgICAgKDB4MDAwMDEwMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfVU5TVVBQT1JURURfREVWSUNFICAgICAgICAgICAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfVEFCTEVfTElOSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU1VCVFJBQ1RJVkVfTElOSyAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU01QX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU01QX0ZVTkNUSU9OX0ZBSUxFRCAgICAgICAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfSU5ERVhfTk9UX0VYSVNUICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfT1VUX1JPVVRFX0VOVFJJRVMgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU01QX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTVVMVElQTEVfUE9SVFMgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfVU5BRERSRVNTQUJMRV9ERVZJQ0UgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfTE9PUF9ERVRFQ1RFRCAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKworLyogU0FTIEJyb2FkY2FzdCBQcmltaXRpdmUgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5TnVtOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQb3J0OyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnRXaWR0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUHJpbWl0aXZlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9TQVNfQlJPQURDQVNUX1BSSU1JVElWRSwKKyAgTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90LAorICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNCcm9hZGNhc3RQcmltaXRpdmVfdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFByaW1pdGl2ZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX1BSSU1JVElWRV9DSEFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfUFJJTUlUSVZFX1NFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9QUklNSVRJVkVfRVhQQU5ERVIgICAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0VWRU5UX1BSSU1JVElWRV9BU1lOQ0hST05PVVNfRVZFTlQgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfRVZFTlRfUFJJTUlUSVZFX1JFU0VSVkVEMyAgICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9QUklNSVRJVkVfUkVTRVJWRUQ0ICAgICAgICAgICAgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0VWRU5UX1BSSU1JVElWRV9DSEFOR0UwX1JFU0VSVkVEICAgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRVZFTlRfUFJJTUlUSVZFX0NIQU5HRTFfUkVTRVJWRUQgICAgICAgICAgICAgICAoMHgwOCkKKworCisvKiBTQVMgSW5pdGlhdG9yIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9TQVNfSU5JVF9ERVZfU1RBVFVTX0NIQU5HRQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFNBU0FkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfSU5JVF9ERVZfU1RBVFVTX0NIQU5HRSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX0lOSVRfREVWX1NUQVRVU19DSEFOR0UsCisgIE1waTJFdmVudERhdGFTYXNJbml0RGV2U3RhdHVzQ2hhbmdlX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc0luaXREZXZTdGF0dXNDaGFuZ2VfdDsKKworLyogU0FTIEluaXRpYXRvciBEZXZpY2UgU3RhdHVzIENoYW5nZSBldmVudCBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19JTklUX1JDX0FEREVEICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19JTklUX1JDX05PVF9SRVNQT05ESU5HICAgICAgICgweDAyKQorCisKKy8qIFNBUyBJbml0aWF0b3IgRGV2aWNlIFRhYmxlIE92ZXJmbG93IEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVworeworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heEluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgQ3VycmVudEluaXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBTQVNBZGRyZXNzOyAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworfSBNUEkyX0VWRU5UX0RBVEFfU0FTX0lOSVRfVEFCTEVfT1ZFUkZMT1csCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1NBU19JTklUX1RBQkxFX09WRVJGTE9XLAorICBNcGkyRXZlbnREYXRhU2FzSW5pdFRhYmxlT3ZlcmZsb3dfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzSW5pdFRhYmxlT3ZlcmZsb3dfdDsKKworCisvKiBTQVMgVG9wb2xvZ3kgQ2hhbmdlIExpc3QgRXZlbnQgZGF0YSAqLworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgTnVtRW50cmllcyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZX0NPVU5UCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZX0NPVU5UICAgICAgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfRU5UUlkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBBdHRhY2hlZERldkhhbmRsZTsgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIExpbmtSYXRlOyAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5U3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KK30gTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfRU5UUlksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlfRU5UUlksCisgIE1waTJFdmVudFNhc1RvcG9QaHlFbnRyeV90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudFNhc1RvcG9QaHlFbnRyeV90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVAoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1FbnRyaWVzOyAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRQaHlOdW07ICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cFN0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwQiAqLworICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZX0VOVFJZICAgUEhZW01QSTJfRVZFTlRfU0FTX1RPUE9fUEhZX0NPVU5UXTsgLyogMHgwQyovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfVE9QT0xPR1lfQ0hBTkdFX0xJU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVCwKKyAgTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90LAorICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRXhwU3RhdHVzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfQURERUQgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORyAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX1JFU1BPTkRJTkcgICAgICAgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfREVMQVlfTk9UX1JFU1BPTkRJTkcgICAgICAgICAoMHgwNCkKKworLyogZGVmaW5lcyBmb3IgdGhlIExpbmtSYXRlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfQ1VSUkVOVF9NQVNLICAgICAgICAgICAgICAgICAoMHhGMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9DVVJSRU5UX1NISUZUICAgICAgICAgICAgICAgICg0KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1BSRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUFJFVl9TSElGVCAgICAgICAgICAgICAgICAgICAoMCkKKworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1VOS05PV05fTElOS19SQVRFICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUEhZX0RJU0FCTEVEICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9ORUdPVElBVElPTl9GQUlMRUQgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1NBVEFfT09CX0NPTVBMRVRFICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUE9SVF9TRUxFQ1RPUiAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9TTVBfUkVTRVRfSU5fUFJPR1JFU1MgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgICgweDBBKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBQaHlTdGF0dXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlTVEFUVVNfVkFDQU5UICAgICAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX1BTX01VTFRJUExFWF9DSEFOR0UgICAgICAgICAgICAgKDB4MTApCisvKiB2YWx1ZXMgZm9yIHRoZSBQaHlTdGF0dXMgUmVhc29uQ29kZSBzdWItZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfQURERUQgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19OT1RfUkVTUE9ORElORyAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19QSFlfQ0hBTkdFRCAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX05PX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfREVMQVlfTk9UX1JFU1BPTkRJTkcgICAgICAgICAoMHgwNSkKKworCisvKiBTQVMgRW5jbG9zdXJlIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9TQVNfRU5DTF9ERVZfU1RBVFVTX0NIQU5HRQoreworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZUhhbmRsZTsgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZUxvZ2ljYWxJRDsgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTnVtU2xvdHM7ICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTdGFydFNsb3Q7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFBoeUJpdHM7ICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfRU5DTF9ERVZfU1RBVFVTX0NIQU5HRSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX0VOQ0xfREVWX1NUQVRVU19DSEFOR0UsCisgIE1waTJFdmVudERhdGFTYXNFbmNsRGV2U3RhdHVzQ2hhbmdlX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc0VuY2xEZXZTdGF0dXNDaGFuZ2VfdDsKKworLyogU0FTIEVuY2xvc3VyZSBEZXZpY2UgU3RhdHVzIENoYW5nZSBldmVudCBSZWFzb25Db2RlIHZhbHVlcyAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19FTkNMX1JDX0FEREVEICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19FTkNMX1JDX05PVF9SRVNQT05ESU5HICAgICAgICgweDAyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBFdmVudEFjayBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFdmVudEFjayBSZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0FDS19SRVFVRVNUCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRXZlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRXZlbnRDb250ZXh0OyAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfRVZFTlRfQUNLX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9BQ0tfUkVRVUVTVCwKKyAgTXBpMkV2ZW50QWNrUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudEFja1JlcXVlc3RfdDsKKworCisvKiBFdmVudEFjayBSZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9BQ0tfUkVQTFkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9FVkVOVF9BQ0tfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9BQ0tfUkVQTFksCisgIE1waTJFdmVudEFja1JlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50QWNrUmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRldEb3dubG9hZCBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGV0Rvd25sb2FkIFJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfRE9XTkxPQURfUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEltYWdlVHlwZTsgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVG90YWxJbWFnZVNpemU7ICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIE1QSTJfTVBJX1NHRV9VTklPTiAgICAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfRldfRE9XTkxPQURfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZXX0RPV05MT0FEX1JFUVVFU1QsCisgIE1waTJGV0Rvd25sb2FkUmVxdWVzdCwgTVBJMl9QT0lOVEVSIHBNcGkyRldEb3dubG9hZFJlcXVlc3Q7CisKKyNkZWZpbmUgTVBJMl9GV19ET1dOTE9BRF9NU0dGTEdTX0xBU1RfU0VHTUVOVCAgICgweDAxKQorCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfRlcgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfQklPUyAgICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfTUFOVUZBQ1RVUklORyAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfQ09ORklHXzEgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfQ09ORklHXzIgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfTUVHQVJBSUQgICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfQ09NTU9OX0JPT1RfQkxPQ0sgICAgKDB4MEIpCisKKy8qIEZXRG93bmxvYWQgVHJhbnNhY3Rpb25Db250ZXh0IEVsZW1lbnQgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0ZXX0RPV05MT0FEX1RDU0dFCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U2l6ZTsgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldGFpbHNMZW5ndGg7ICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEltYWdlT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KK30gTVBJMl9GV19ET1dOTE9BRF9UQ1NHRSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZXX0RPV05MT0FEX1RDU0dFLAorICBNcGkyRldEb3dubG9hZFRDU0dFX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZXRG93bmxvYWRUQ1NHRV90OworCisvKiBGV0Rvd25sb2FkIFJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0ZXX0RPV05MT0FEX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VUeXBlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9GV19ET1dOTE9BRF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZXX0RPV05MT0FEX1JFUExZLAorICBNcGkyRldEb3dubG9hZFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZXRG93bmxvYWRSZXBseV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGV1VwbG9hZCBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGV1VwbG9hZCBSZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0ZXX1VQTE9BRF9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VUeXBlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgTVBJMl9NUElfU0dFX1VOSU9OICAgICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9GV19VUExPQURfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZXX1VQTE9BRF9SRVFVRVNULAorICBNcGkyRldVcGxvYWRSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZXVXBsb2FkUmVxdWVzdF90OworCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0ZXX0NVUlJFTlQgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfRldfRkxBU0ggICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX0ZXX1VQTE9BRF9JVFlQRV9CSU9TX0ZMQVNIICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0ZXX0JBQ0tVUCAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfTUFOVUZBQ1RVUklORyAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX0ZXX1VQTE9BRF9JVFlQRV9DT05GSUdfMSAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0NPTkZJR18yICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9GV19VUExPQURfSVRZUEVfTUVHQVJBSUQgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX0ZXX1VQTE9BRF9JVFlQRV9DT01QTEVURSAgICAgICAgICAgKDB4MEEpCisjZGVmaW5lIE1QSTJfRldfVVBMT0FEX0lUWVBFX0NPTU1PTl9CT09UX0JMT0NLICAoMHgwQikKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfVVBMT0FEX1RDU0dFCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U2l6ZTsgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldGFpbHNMZW5ndGg7ICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEltYWdlT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KK30gTVBJMl9GV19VUExPQURfVENTR0UsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9GV19VUExPQURfVENTR0UsCisgIE1waTJGV1VwbG9hZFRDU0dFX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZXVXBsb2FkVENTR0VfdDsKKworLyogRldVcGxvYWQgUmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfVVBMT0FEX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VUeXBlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBBY3R1YWxJbWFnZVNpemU7ICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0ZXX1VQTE9BRF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZXX1VQTE9BRF9SRVBMWSwKKyAgTXBpMkZXVXBsb2FkUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNUGkyRldVcGxvYWRSZXBseV90OworCisKKy8qIEZXIEltYWdlIEhlYWRlciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRldfSU1BR0VfSEVBREVSCit7CisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUwOyAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTE7ICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlMjsgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBNUEkyX1ZFUlNJT05fVU5JT04gICAgICBNUElWZXJzaW9uOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIE1QSTJfVkVSU0lPTl9VTklPTiAgICAgIEZXVmVyc2lvbjsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgTVBJMl9WRVJTSU9OX1VOSU9OICAgICAgTlZEQVRBVmVyc2lvbjsgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBNUEkyX1ZFUlNJT05fVU5JT04gICAgICBQYWNrYWdlVmVyc2lvbjsgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZlbmRvcklEOyAgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdElEOyAgICAgICAgICAgICAgICAgIC8qIDB4MjIgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbEZsYWdzOyAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjY7ICAgICAgICAgICAgICAgICAvKiAweDI2ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DQ2FwYWJpbGl0aWVzOyAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgyQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIE5leHRJbWFnZUhlYWRlck9mZnNldDsgICAgICAvKiAweDMwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW07ICAgICAgICAgICAgICAgICAgIC8qIDB4MzQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM4OyAgICAgICAgICAgICAgICAgLyogMHgzOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkM0M7ICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0MDsgICAgICAgICAgICAgICAgIC8qIDB4NDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ0OyAgICAgICAgICAgICAgICAgLyogMHg0NCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDg7ICAgICAgICAgICAgICAgICAvKiAweDQ4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0QzsgICAgICAgICAgICAgICAgIC8qIDB4NEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDUwOyAgICAgICAgICAgICAgICAgLyogMHg1MCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTQ7ICAgICAgICAgICAgICAgICAvKiAweDU0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1ODsgICAgICAgICAgICAgICAgIC8qIDB4NTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDVDOyAgICAgICAgICAgICAgICAgLyogMHg1QyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjA7ICAgICAgICAgICAgICAgICAvKiAweDYwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVWZXJzaW9uTmFtZVdoYXQ7ICAgIC8qIDB4NjQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZVZlcnNpb25OYW1lWzMyXTsgICAgLyogMHg2OCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFZlbmRvck5hbWVXaGF0OyAgICAgICAgICAgICAvKiAweDg4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVmVuZG9yTmFtZVszMl07ICAgICAgICAgICAgIC8qIDB4OEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTmFtZVdoYXQ7ICAgICAgICAgICAgLyogMHg4OCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VOYW1lWzMyXTsgICAgICAgICAgICAvKiAweDhDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWREMDsgICAgICAgICAgICAgICAgIC8qIDB4RDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEQ0OyAgICAgICAgICAgICAgICAgLyogMHhENCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRDg7ICAgICAgICAgICAgICAgICAvKiAweEQ4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWREQzsgICAgICAgICAgICAgICAgIC8qIDB4REMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEUwOyAgICAgICAgICAgICAgICAgLyogMHhFMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRTQ7ICAgICAgICAgICAgICAgICAvKiAweEU0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRFODsgICAgICAgICAgICAgICAgIC8qIDB4RTggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEVDOyAgICAgICAgICAgICAgICAgLyogMHhFQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRjA7ICAgICAgICAgICAgICAgICAvKiAweEYwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRGNDsgICAgICAgICAgICAgICAgIC8qIDB4RjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEY4OyAgICAgICAgICAgICAgICAgLyogMHhGOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkRkM7ICAgICAgICAgICAgICAgICAvKiAweEZDICovCit9IE1QSTJfRldfSU1BR0VfSEVBREVSLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRldfSU1BR0VfSEVBREVSLAorICBNcGkyRldJbWFnZUhlYWRlcl90LCBNUEkyX1BPSU5URVIgcE1waTJGV0ltYWdlSGVhZGVyX3Q7CisKKy8qIFNpZ25hdHVyZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9TSUdOQVRVUkVfT0ZGU0VUICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1NJR05BVFVSRV9NQVNLICAgICAgICAgICAoMHhGRjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFICAgICAgICAgICAgICAgICgweEVBMDAwMDAwKQorCisvKiBTaWduYXR1cmUwIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1NJR05BVFVSRTBfT0ZGU0VUICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFMCAgICAgICAgICAgICAgICgweDVBRkFBNTVBKQorCisvKiBTaWduYXR1cmUxIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1NJR05BVFVSRTFfT0ZGU0VUICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFMSAgICAgICAgICAgICAgICgweEE1NUFGQUE1KQorCisvKiBTaWduYXR1cmUyIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1NJR05BVFVSRTJfT0ZGU0VUICAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfU0lHTkFUVVJFMiAgICAgICAgICAgICAgICgweDVBQTU1QUZBKQorCisKKy8qIGRlZmluZXMgZm9yIHVzaW5nIHRoZSBQcm9kdWN0SUQgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1RZUEVfTUFTSyAgICAgICAgICAgICgweEYwMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9UWVBFX1NBUyAgICAgICAgICAgICAoMHgyMDAwKQorCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAoMHgwRjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9BICAgICAgICAgICAgICAgKDB4MDAwMCkKKworI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZX01BU0sgICAgICAgICAgKDB4MDBGRikKKy8qIFNBUyAqLworI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIxMDhfU0FTICAgICAgKDB4MDAxMCkKKworLyogdXNlIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfIGRlZmluZXMgZm9yIFByb3RvY29sRmxhZ3MgZmllbGQgKi8KKworLyogdXNlIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV8gZGVmaW5lcyBmb3IgSU9DQ2FwYWJpbGl0aWVzIGZpZWxkICovCisKKworI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9JTUFHRVNJWkVfT0ZGU0VUICAgICAgICAgKDB4MkMpCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX05FWFRJTUFHRV9PRkZTRVQgICAgICAgICAoMHgzMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfVkVSTk1IV0FUX09GRlNFVCAgICAgICAgICgweDY0KQorCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1dIQVRfU0lHTkFUVVJFICAgICAgICAgICAoMHgyOTIzMjg0MCkKKworI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgKDB4MTAwKQorCisKKy8qIEV4dGVuZGVkIEltYWdlIEhlYWRlciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVhUX0lNQUdFX0hFQURFUgorCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VUeXBlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW07ICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIE5leHRJbWFnZUhlYWRlck9mZnNldDsgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb247ICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmeVN0cmluZ1szMl07ICAgICAgICAgLyogMHgyMCAqLworfSBNUEkyX0VYVF9JTUFHRV9IRUFERVIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FWFRfSU1BR0VfSEVBREVSLAorICBNcGkyRXh0SW1hZ2VIZWFkZXJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXh0SW1hZ2VIZWFkZXJfdDsKKworLyogdXNlZnVsIG9mZnNldHMgKi8KKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfSU1BR0VUWVBFX09GRlNFVCAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9JTUFHRVNJWkVfT0ZGU0VUICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX05FWFRJTUFHRV9PRkZTRVQgICAgICAgICAoMHgwQykKKworI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9IRUFERVJfU0laRSAgICAgICAgICAgICAgKDB4NDApCisKKy8qIGRlZmluZXMgZm9yIHRoZSBJbWFnZVR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfVFlQRV9VTlNQRUNJRklFRCAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX0ZXICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX1RZUEVfTlZEQVRBICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfVFlQRV9CT09UTE9BREVSICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX0lOSVRJQUxJWkFUSU9OICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRVhUX0lNQUdFX1RZUEVfRkxBU0hfTEFZT1VUICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfVFlQRV9TVVBQT1JURURfREVWSUNFUyAgICgweDA3KQorI2RlZmluZSBNUEkyX0VYVF9JTUFHRV9UWVBFX01FR0FSQUlEICAgICAgICAgICAgKDB4MDgpCisKKyNkZWZpbmUgTVBJMl9FWFRfSU1BR0VfVFlQRV9NQVggICAgICAgICAgICAgICAgIChNUEkyX0VYVF9JTUFHRV9UWVBFX01FR0FSQUlEKQorCisKKworLyogRkxBU0ggTGF5b3V0IEV4dGVuZGVkIEltYWdlIERhdGEgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIFJlZ2lvbnNQZXJMYXlvdXQgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0ZMQVNIX05VTUJFUl9PRl9SRUdJT05TCisjZGVmaW5lIE1QSTJfRkxBU0hfTlVNQkVSX09GX1JFR0lPTlMgICAgICAgICgxKQorI2VuZGlmCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBOdW1iZXJPZkxheW91dHMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0ZMQVNIX05VTUJFUl9PRl9MQVlPVVRTCisjZGVmaW5lIE1QSTJfRkxBU0hfTlVNQkVSX09GX0xBWU9VVFMgICAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0ZMQVNIX1JFR0lPTgoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lvblR5cGU7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlZ2lvbk9mZnNldDsgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVnaW9uU2l6ZTsgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworfSBNUEkyX0ZMQVNIX1JFR0lPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0ZMQVNIX1JFR0lPTiwKKyAgTXBpMkZsYXNoUmVnaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkZsYXNoUmVnaW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0ZMQVNIX0xBWU9VVAoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYXNoU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgTVBJMl9GTEFTSF9SRUdJT04gICAgICAgUmVnaW9uW01QSTJfRkxBU0hfTlVNQkVSX09GX1JFR0lPTlNdOy8qIDB4MTAgKi8KK30gTVBJMl9GTEFTSF9MQVlPVVQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9GTEFTSF9MQVlPVVQsCisgIE1waTJGbGFzaExheW91dF90LCBNUEkyX1BPSU5URVIgcE1waTJGbGFzaExheW91dF90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9GTEFTSF9MQVlPVVRfREFUQQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEltYWdlUmV2aXNpb247ICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTaXplT2ZSZWdpb247ICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZMYXlvdXRzOyAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZWdpb25zUGVyTGF5b3V0OyAgICAgICAgICAgLyogMHgwNiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1pbmltdW1TZWN0b3JBbGlnbm1lbnQ7ICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIE1QSTJfRkxBU0hfTEFZT1VUICAgICAgIExheW91dFtNUEkyX0ZMQVNIX05VTUJFUl9PRl9MQVlPVVRTXTsvKiAweDEwICovCit9IE1QSTJfRkxBU0hfTEFZT1VUX0RBVEEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9GTEFTSF9MQVlPVVRfREFUQSwKKyAgTXBpMkZsYXNoTGF5b3V0RGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJGbGFzaExheW91dERhdGFfdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFJlZ2lvblR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fVU5VU0VEICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9GSVJNV0FSRSAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfRkxBU0hfUkVHSU9OX0JJT1MgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fTlZEQVRBICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9GSVJNV0FSRV9CQUNLVVAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRkxBU0hfUkVHSU9OX01GR19JTkZPUk1BVElPTiAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fQ09ORklHXzEgICAgICAgICAgICAgICgweDA3KQorI2RlZmluZSBNUEkyX0ZMQVNIX1JFR0lPTl9DT05GSUdfMiAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRkxBU0hfUkVHSU9OX01FR0FSQUlEICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9GTEFTSF9SRUdJT05fSU5JVCAgICAgICAgICAgICAgICAgICgweDBBKQorCisvKiBJbWFnZVJldmlzaW9uICovCisjZGVmaW5lIE1QSTJfRkxBU0hfTEFZT1VUX0lNQUdFX1JFVklTSU9OICAgICAgICAoMHgwMCkKKworCisKKy8qIFN1cHBvcnRlZCBEZXZpY2VzIEV4dGVuZGVkIEltYWdlIERhdGEgKi8KKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIE51bWJlck9mRGV2aWNlcyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfU1VQUE9SVEVEX0RFVklDRVNfSU1BR0VfTlVNX0RFVklDRVMKKyNkZWZpbmUgTVBJMl9TVVBQT1JURURfREVWSUNFU19JTUFHRV9OVU1fREVWSUNFUyAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TVVBQT1JURURfREVWSUNFCit7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBWZW5kb3JJRDsgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldmljZUlETWFzazsgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBMb3dQQ0lSZXY7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEhpZ2hQQ0lSZXY7ICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworfSBNUEkyX1NVUFBPUlRFRF9ERVZJQ0UsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TVVBQT1JURURfREVWSUNFLAorICBNcGkyU3VwcG9ydGVkRGV2aWNlX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlN1cHBvcnRlZERldmljZV90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TVVBQT1JURURfREVWSUNFU19EQVRBCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSW1hZ2VSZXZpc2lvbjsgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mRGV2aWNlczsgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIE1QSTJfU1VQUE9SVEVEX0RFVklDRSAgIFN1cHBvcnRlZERldmljZVtNUEkyX1NVUFBPUlRFRF9ERVZJQ0VTX0lNQUdFX05VTV9ERVZJQ0VTXTsgLyogMHgwOCAqLworfSBNUEkyX1NVUFBPUlRFRF9ERVZJQ0VTX0RBVEEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TVVBQT1JURURfREVWSUNFU19EQVRBLAorICBNcGkyU3VwcG9ydGVkRGV2aWNlc0RhdGFfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU3VwcG9ydGVkRGV2aWNlc0RhdGFfdDsKKworLyogSW1hZ2VSZXZpc2lvbiAqLworI2RlZmluZSBNUEkyX1NVUFBPUlRFRF9ERVZJQ0VTX0lNQUdFX1JFVklTSU9OICAgKDB4MDApCisKKworLyogSW5pdCBFeHRlbmRlZCBJbWFnZSBEYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0lOSVRfSU1BR0VfRk9PVEVSCisKK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBCb290RmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlMDsgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUxOyAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTI7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXRWZWN0b3I7ICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9JTklUX0lNQUdFX0ZPT1RFUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lOSVRfSU1BR0VfRk9PVEVSLAorICBNcGkySW5pdEltYWdlRm9vdGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkluaXRJbWFnZUZvb3Rlcl90OworCisvKiBkZWZpbmVzIGZvciB0aGUgQm9vdEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9CT09URkxBR1NfT0ZGU0VUICAgICAgICAoMHgwMCkKKworLyogZGVmaW5lcyBmb3IgdGhlIEltYWdlU2l6ZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfSU1BR0VTSVpFX09GRlNFVCAgICAgICAgKDB4MDQpCisKKy8qIGRlZmluZXMgZm9yIHRoZSBTaWduYXR1cmUwIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkUwX09GRlNFVCAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRTAgICAgICAgICAgICAgICgweDVBQTU1QUVBKQorCisvKiBkZWZpbmVzIGZvciB0aGUgU2lnbmF0dXJlMSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFMV9PRkZTRVQgICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkUxICAgICAgICAgICAgICAoMHhBNTVBRUFBNSkKKworLyogZGVmaW5lcyBmb3IgdGhlIFNpZ25hdHVyZTIgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRTJfT0ZGU0VUICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFMiAgICAgICAgICAgICAgKDB4NUFFQUE1NUEpCisKKy8qIFNpZ25hdHVyZSBmaWVsZHMgYXMgaW5kaXZpZHVhbCBieXRlcyAqLworI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfMCAgICAgICAgKDB4RUEpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV8xICAgICAgICAoMHg1QSkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzIgICAgICAgICgweEE1KQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfMyAgICAgICAgKDB4NUEpCisKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzQgICAgICAgICgweEE1KQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfNSAgICAgICAgKDB4RUEpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV82ICAgICAgICAoMHg1QSkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzcgICAgICAgICgweEE1KQorCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV84ICAgICAgICAoMHg1QSkKKyNkZWZpbmUgTVBJMl9JTklUX0lNQUdFX1NJR05BVFVSRV9CWVRFXzkgICAgICAgICgweEE1KQorI2RlZmluZSBNUEkyX0lOSVRfSU1BR0VfU0lHTkFUVVJFX0JZVEVfQSAgICAgICAgKDB4RUEpCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9TSUdOQVRVUkVfQllURV9CICAgICAgICAoMHg1QSkKKworLyogZGVmaW5lcyBmb3IgdGhlIFJlc2V0VmVjdG9yIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU5JVF9JTUFHRV9SRVNFVFZFQ1RPUl9PRkZTRVQgICAgICAoMHgxNCkKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfcmFpZC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfcmFpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzQ4MTZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfcmFpZC5oCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKgorICogICAgICAgICAgIE5hbWU6ICBtcGkyX3JhaWQuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgSW50ZWdyYXRlZCBSQUlEIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCisgKiAgQ3JlYXRpb24gRGF0ZTogIEFwcmlsIDI2LCAyMDA3CisgKgorICogICAgbXBpMl9yYWlkLmggVmVyc2lvbjogIDAyLjAwLjAzCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAxICBNb2RpZmljYXRpb25zIHRvIFJBSUQgQWN0aW9uIHJlcXVlc3QgYW5kIHJlcGx5LAorICogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBBY3Rpb25zIGFuZCBBY3Rpb25EYXRhLgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgQWRkZWQgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9ESVNBQkxfRlVMTF9SRUJVSUxELgorICogIDA1LTIxLTA4ICAwMi4wMC4wMyAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTIHNvIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBQaHlzRGlzayBhcnJheSBpbiBNUEkyX1JBSURfVk9MVU1FX0NSRUFUSU9OX1NUUlVDVAorICogICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHNpemVkIGJ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgTVBJMl9SQUlEX0gKKyNkZWZpbmUgTVBJMl9SQUlEX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgICAgICAgICAgICAgSW50ZWdyYXRlZCBSQUlEIE1lc3NhZ2VzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFJBSUQgQWN0aW9uIG1lc3NhZ2VzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBY3Rpb25EYXRhV29yZCBkZWZpbmVzIGZvciB1c2Ugd2l0aCBNUEkyX1JBSURfQUNUSU9OX0RFTEVURV9WT0xVTUUgYWN0aW9uICovCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fQURBVEFfS0VFUF9MQkEwICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fQURBVEFfWkVST19MQkEwICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisKKy8qIHVzZSBNUEkyX1JBSURWT0wwX1NFVFRJTkdfIGRlZmluZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgTVBJMl9SQUlEX0FDVElPTl9DSEFOR0VfVk9MX1dSSVRFX0NBQ0hFIGFjdGlvbiAqLworCisvKiBBY3Rpb25EYXRhV29yZCBkZWZpbmVzIGZvciB1c2Ugd2l0aCBNUEkyX1JBSURfQUNUSU9OX0RJU0FCTEVfQUxMX1ZPTFVNRVMgYWN0aW9uICovCisjZGVmaW5lIE1QSTJfUkFJRF9BQ1RJT05fQURBVEFfRElTQUJMX0ZVTExfUkVCVUlMRCAgKDB4MDAwMDAwMDEpCisKKy8qIEFjdGlvbkRhdGFXb3JkIGZvciBNUEkyX1JBSURfQUNUSU9OX1NFVF9SQUlEX0ZVTkNUSU9OX1JBVEUgQWN0aW9uICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDVElPTl9SQVRFX0RBVEEKK3sKKyAgICBVOCAgICAgICAgICAgICAgUmF0ZVRvQ2hhbmdlOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgUmF0ZU9yTW9kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgRGF0YVNjcnViRHVyYXRpb247ICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9SQUlEX0FDVElPTl9SQVRFX0RBVEEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDVElPTl9SQVRFX0RBVEEsCisgIE1waTJSYWlkQWN0aW9uUmF0ZURhdGFfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZEFjdGlvblJhdGVEYXRhX3Q7CisKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TRVRfUkFURV9SRVNZTkMgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TRVRfUkFURV9EQVRBX1NDUlVCICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TRVRfUkFURV9QT1dFUlNBVkVfTU9ERSAgICAoMHgwMikKKworLyogQWN0aW9uRGF0YVdvcmQgZm9yIE1QSTJfUkFJRF9BQ1RJT05fU1RBUlRfUkFJRF9GVU5DVElPTiBBY3Rpb24gKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNUSU9OX1NUQVJUX1JBSURfRlVOQ1RJT04KK3sKKyAgICBVOCAgICAgICAgICAgICAgUkFJREZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9SQUlEX0FDVElPTl9TVEFSVF9SQUlEX0ZVTkNUSU9OLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ1RJT05fU1RBUlRfUkFJRF9GVU5DVElPTiwKKyAgTXBpMlJhaWRBY3Rpb25TdGFydFJhaWRGdW5jdGlvbl90LAorICBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uU3RhcnRSYWlkRnVuY3Rpb25fdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFJBSURGdW5jdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX0JBQ0tHUk9VTkRfSU5JVCAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX09OTElORV9DQVBfRVhQQU5TSU9OICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX0NPTlNJU1RFTkNZX0NIRUNLICAgICgweDAyKQorCisvKiBkZWZpbmVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TVEFSVF9ORVcgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TVEFSVF9SRVNVTUUgICAgICAgICAgICAgICAoMHgwMSkKKworLyogQWN0aW9uRGF0YVdvcmQgZm9yIE1QSTJfUkFJRF9BQ1RJT05fU1RPUF9SQUlEX0ZVTkNUSU9OIEFjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ1RJT05fU1RPUF9SQUlEX0ZVTkNUSU9OCit7CisgICAgVTggICAgICAgICAgICAgIFJBSURGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCit9IE1QSTJfUkFJRF9BQ1RJT05fU1RPUF9SQUlEX0ZVTkNUSU9OLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ1RJT05fU1RPUF9SQUlEX0ZVTkNUSU9OLAorICBNcGkyUmFpZEFjdGlvblN0b3BSYWlkRnVuY3Rpb25fdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZEFjdGlvblN0b3BSYWlkRnVuY3Rpb25fdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFJBSURGdW5jdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUT1BfQkFDS0dST1VORF9JTklUICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUT1BfT05MSU5FX0NBUF9FWFBBTlNJT04gICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX1NUT1BfQ09OU0lTVEVOQ1lfQ0hFQ0sgICAgICgweDAyKQorCisvKiBkZWZpbmVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TVE9QX0FCT1JUICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TVE9QX1BBVVNFICAgICAgICAgICAgICAgICAoMHgwMSkKKworLyogQWN0aW9uRGF0YVdvcmQgZm9yIE1QSTJfUkFJRF9BQ1RJT05fQ1JFQVRFX0hPVF9TUEFSRSBBY3Rpb24gKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNUSU9OX0hPVF9TUEFSRQoreworICAgIFU4ICAgICAgICAgICAgICBIb3RTcGFyZVBvb2w7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX1JBSURfQUNUSU9OX0hPVF9TUEFSRSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX0hPVF9TUEFSRSwKKyAgTXBpMlJhaWRBY3Rpb25Ib3RTcGFyZV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uSG90U3BhcmVfdDsKKworLyogQWN0aW9uRGF0YVdvcmQgZm9yIE1QSTJfUkFJRF9BQ1RJT05fREVWSUNFX0ZXX1VQREFURV9NT0RFIEFjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ1RJT05fRldfVVBEQVRFX01PREUKK3sKKyAgICBVOCAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBEZXZpY2VGaXJtd2FyZVVwZGF0ZU1vZGVUaW1lb3V0OyAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KK30gTVBJMl9SQUlEX0FDVElPTl9GV19VUERBVEVfTU9ERSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX0ZXX1VQREFURV9NT0RFLAorICBNcGkyUmFpZEFjdGlvbkZ3VXBkYXRlTW9kZV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uRndVcGRhdGVNb2RlX3Q7CisKKy8qIEFjdGlvbkRhdGFXb3JkIGRlZmluZXMgZm9yIHVzZSB3aXRoIE1QSTJfUkFJRF9BQ1RJT05fREVWSUNFX0ZXX1VQREFURV9NT0RFIGFjdGlvbiAqLworI2RlZmluZSBNUEkyX1JBSURfQUNUSU9OX0FEQVRBX0RJU0FCTEVfRldfVVBEQVRFICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9FTkFCTEVfRldfVVBEQVRFICAgICAgICAgKDB4MDEpCisKK3R5cGVkZWYgdW5pb24gX01QSTJfUkFJRF9BQ1RJT05fREFUQQoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkOworICAgIE1QSTJfUkFJRF9BQ1RJT05fUkFURV9EQVRBICAgICAgICAgICAgICBSYXRlczsKKyAgICBNUEkyX1JBSURfQUNUSU9OX1NUQVJUX1JBSURfRlVOQ1RJT04gICAgU3RhcnRSYWlkRnVuY3Rpb247CisgICAgTVBJMl9SQUlEX0FDVElPTl9TVE9QX1JBSURfRlVOQ1RJT04gICAgIFN0b3BSYWlkRnVuY3Rpb247CisgICAgTVBJMl9SQUlEX0FDVElPTl9IT1RfU1BBUkUgICAgICAgICAgICAgIEhvdFNwYXJlOworICAgIE1QSTJfUkFJRF9BQ1RJT05fRldfVVBEQVRFX01PREUgICAgICAgICBGd1VwZGF0ZU1vZGU7Cit9IE1QSTJfUkFJRF9BQ1RJT05fREFUQSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNUSU9OX0RBVEEsCisgIE1waTJSYWlkQWN0aW9uRGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uRGF0YV90OworCisKKy8qIFJBSUQgQWN0aW9uIFJlcXVlc3QgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ1RJT05fUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFZvbERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIE1QSTJfUkFJRF9BQ1RJT05fREFUQSAgIEFjdGlvbkRhdGFXb3JkOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIEFjdGlvbkRhdGFTR0U7ICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX1JBSURfQUNUSU9OX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDVElPTl9SRVFVRVNULAorICBNcGkyUmFpZEFjdGlvblJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZEFjdGlvblJlcXVlc3RfdDsKKworLyogUkFJRCBBY3Rpb24gcmVxdWVzdCBBY3Rpb24gdmFsdWVzICovCisKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9JTkRJQ0FUT1JfU1RSVUNUICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9DUkVBVEVfVk9MVU1FICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9ERUxFVEVfVk9MVU1FICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9ESVNBQkxFX0FMTF9WT0xVTUVTICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9FTkFCTEVfQUxMX1ZPTFVNRVMgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9QSFlTRElTS19PRkZMSU5FICAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9QSFlTRElTS19PTkxJTkUgICAgICAgICAgICAoMHgwQikKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9GQUlMX1BIWVNESVNLICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9BQ1RJVkFURV9WT0xVTUUgICAgICAgICAgICAoMHgxMSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9ERVZJQ0VfRldfVVBEQVRFX01PREUgICAgICAoMHgxNSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9DSEFOR0VfVk9MX1dSSVRFX0NBQ0hFICAgICAoMHgxNykKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TRVRfVk9MVU1FX05BTUUgICAgICAgICAgICAoMHgxOCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TRVRfUkFJRF9GVU5DVElPTl9SQVRFICAgICAoMHgxOSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9FTkFCTEVfRkFJTEVEX1ZPTFVNRSAgICAgICAoMHgxQykKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9DUkVBVEVfSE9UX1NQQVJFICAgICAgICAgICAoMHgxRCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9ERUxFVEVfSE9UX1NQQVJFICAgICAgICAgICAoMHgxRSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TWVNURU1fU0hVVERPV05fSU5JVElBVEVEICAoMHgyMCkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TVEFSVF9SQUlEX0ZVTkNUSU9OICAgICAgICAoMHgyMSkKKyNkZWZpbmUgTVBJMl9SQUlEX0FDVElPTl9TVE9QX1JBSURfRlVOQ1RJT04gICAgICAgICAoMHgyMikKKworCisvKiBSQUlEIFZvbHVtZSBDcmVhdGlvbiBTdHJ1Y3R1cmUgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lIGNhbiBiZSBjdXN0b21pemVkIGZvciB0aGUgdGFyZ2V0ZWQgcHJvZHVjdC4KKyAqLworI2lmbmRlZiBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1MKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTICAgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX1ZPTFVNRV9QSFlTRElTSworeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBSURTZXROdW07ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTWFwOyAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrRGV2SGFuZGxlOyAgICAgICAgICAgICAgLyogMHgwMiAqLworfSBNUEkyX1JBSURfVk9MVU1FX1BIWVNESVNLLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9WT0xVTUVfUEhZU0RJU0ssCisgIE1waTJSYWlkVm9sdW1lUGh5c0Rpc2tfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFZvbHVtZVBoeXNEaXNrX3Q7CisKKy8qIGRlZmluZXMgZm9yIHRoZSBQaHlzRGlza01hcCBmaWVsZCAqLworI2RlZmluZSBNUEkyX1JBSURBQ1RJT05fUEhZU0RJU0tfUFJJTUFSWSAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JBSURBQ1RJT05fUEhZU0RJU0tfU0VDT05EQVJZICAgICAgICAgICgweDAyKQorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX1ZPTFVNRV9DUkVBVElPTl9TVFJVQ1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5c0Rpc2tzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgVm9sdW1lVHlwZTsgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgVm9sdW1lQ3JlYXRpb25GbGFnczsgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgVm9sdW1lU2V0dGluZ3M7ICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzeW5jUmF0ZTsgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNjcnViRHVyYXRpb247ICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgVm9sdW1lTWF4TEJBOyAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaXBlU2l6ZTsgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZVsxNl07ICAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBNUEkyX1JBSURfVk9MVU1FX1BIWVNESVNLICAgUGh5c0Rpc2tbTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTXTsvKiAweDJDICovCit9IE1QSTJfUkFJRF9WT0xVTUVfQ1JFQVRJT05fU1RSVUNULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9WT0xVTUVfQ1JFQVRJT05fU1RSVUNULAorICBNcGkyUmFpZFZvbHVtZUNyZWF0aW9uU3RydWN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJhaWRWb2x1bWVDcmVhdGlvblN0cnVjdF90OworCisvKiB1c2UgTVBJMl9SQUlEX1ZPTF9UWVBFXyBkZWZpbmVzIGZyb20gbXBpMl9jbmZnLmggZm9yIFZvbHVtZVR5cGUgKi8KKworLyogZGVmaW5lcyBmb3IgdGhlIFZvbHVtZUNyZWF0aW9uRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9VU0VfREVGQVVMVF9TRVRUSU5HUyAoMHg4MCkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9CQUNLR1JPVU5EX0lOSVQgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9MT1dfTEVWRUxfSU5JVCAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9NSUdSQVRFX0RBVEEgICAgICAgICAoMHgwMSkKKworCisvKiBSQUlEIE9ubGluZSBDYXBhY2l0eSBFeHBhbnNpb24gU3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfT05MSU5FX0NBUEFDSVRZX0VYUEFOU0lPTgoreworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTA7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTE7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworfSBNUEkyX1JBSURfT05MSU5FX0NBUEFDSVRZX0VYUEFOU0lPTiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfT05MSU5FX0NBUEFDSVRZX0VYUEFOU0lPTiwKKyAgTXBpMlJhaWRPbmxpbmVDYXBhY2l0eUV4cGFuc2lvbl90LAorICBNUEkyX1BPSU5URVIgcE1waTJSYWlkT25saW5lQ2FwYWNpdHlFeHBhbnNpb25fdDsKKworCisvKiBSQUlEIFZvbHVtZSBJbmRpY2F0b3IgU3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfVk9MX0lORElDQVRPUgoreworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFRvdGFsQmxvY2tzOyAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIEJsb2Nrc1JlbWFpbmluZzsgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworfSBNUEkyX1JBSURfVk9MX0lORElDQVRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfVk9MX0lORElDQVRPUiwKKyAgTXBpMlJhaWRWb2xJbmRpY2F0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmFpZFZvbEluZGljYXRvcl90OworCisvKiBkZWZpbmVzIGZvciBSQUlEIFZvbHVtZSBJbmRpY2F0b3IgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9NQVNLICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwRikKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9CQUNLR1JPVU5EX0lOSVQgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9PTkxJTkVfQ0FQX0VYUEFOU0lPTiAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9DT05TSVNURU5DWV9DSEVDSyAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9SRVNZTkMgICAgICAgICAgICAgICAoMHgwMDAwMDAwMykKKworCisvKiBSQUlEIEFjdGlvbiBSZXBseSBBY3Rpb25EYXRhIHVuaW9uICovCit0eXBlZGVmIHVuaW9uIF9NUEkyX1JBSURfQUNUSU9OX1JFUExZX0RBVEEKK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBXb3JkWzVdOworICAgIE1QSTJfUkFJRF9WT0xfSU5ESUNBVE9SIFJhaWRWb2x1bWVJbmRpY2F0b3I7CisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVm9sRGV2SGFuZGxlOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXRlOworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOworfSBNUEkyX1JBSURfQUNUSU9OX1JFUExZX0RBVEEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDVElPTl9SRVBMWV9EQVRBLAorICBNcGkyUmFpZEFjdGlvblJlcGx5RGF0YV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uUmVwbHlEYXRhX3Q7CisKKy8qIHVzZSBNUEkyX1JBSURWT0wwX1NFVFRJTkdfIGRlZmluZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgTVBJMl9SQUlEX0FDVElPTl9DSEFOR0VfVk9MX1dSSVRFX0NBQ0hFIGFjdGlvbiAqLworCisKKy8qIFJBSUQgQWN0aW9uIFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNUSU9OX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFZvbERldkhhbmRsZTsgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNEaXNrTnVtOyAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgTVBJMl9SQUlEX0FDVElPTl9SRVBMWV9EQVRBIEFjdGlvbkRhdGE7ICAgICAgICAgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfUkFJRF9BQ1RJT05fUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDVElPTl9SRVBMWSwKKyAgTXBpMlJhaWRBY3Rpb25SZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJSYWlkQWN0aW9uUmVwbHlfdDsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQyYjEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcgTFNJIENvcnBvcmF0aW9uLgorICoKKyAqCisgKiAgICAgICAgICAgTmFtZTogIG1waTJfc2FzLmgKKyAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNlcmlhbCBBdHRhY2hlZCBTQ1NJIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCisgKiAgQ3JlYXRpb24gRGF0ZTogIEZlYnJ1YXJ5IDksIDIwMDcKKyAqCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4wMgorICoKKyAqICBWZXJzaW9uIEhpc3RvcnkKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgorICogIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTI2LTA3ICAwMi4wMC4wMSAgQWRkZWQgQ2xlYXIgQWxsIFBlcnNpc3RlbnQgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFJlcXVlc3QuCisgKiAgMTAtMDItMDggIDAyLjAwLjAyICBBZGRlZCBTZXQgSU9DIFBhcmFtZXRlciBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQgQ29udHJvbAorICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgTVBJMl9TQVNfSAorI2RlZmluZSBNUEkyX1NBU19ICisKKy8qCisgKiBWYWx1ZXMgZm9yIFNBU1N0YXR1cy4KKyAqLworI2RlZmluZSBNUEkyX1NBU1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfVU5LTk9XTl9FUlJPUiAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX0lOVkFMSURfRlJBTUUgICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19VVENfQkFEX0RFU1QgICAgICAgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfVVRDX0JSRUFLX1JFQ0VJVkVEICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1VUQ19DT05ORUNUX1JBVEVfTk9UX1NVUFBPUlRFRCAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19VVENfUE9SVF9MQVlFUl9SRVFVRVNUICAgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfVVRDX1BST1RPQ09MX05PVF9TVVBQT1JURUQgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1VUQ19TVFBfUkVTT1VSQ0VTX0JVU1kgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19VVENfV1JPTkdfREVTVElOQVRJT04gICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfU0hPUlRfSU5GT1JNQVRJT05fVU5JVCAgICAgICAgICAgKDB4MEEpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX0xPTkdfSU5GT1JNQVRJT05fVU5JVCAgICAgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19YRkVSX1JEWV9JTkNPUlJFQ1RfV1JJVEVfREFUQSAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfWEZFUl9SRFlfUkVRVUVTVF9PRkZTRVRfRVJST1IgICAgKDB4MEQpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX1hGRVJfUkRZX05PVF9FWFBFQ1RFRCAgICAgICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19EQVRBX0lOQ09SUkVDVF9EQVRBX0xFTkdUSCAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfREFUQV9UT09fTVVDSF9SRUFEX0RBVEEgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX0RBVEFfT0ZGU0VUX0VSUk9SICAgICAgICAgICAgICAgICgweDExKQorI2RlZmluZSBNUEkyX1NBU1NUQVRVU19TRFNGX05BS19SRUNFSVZFRCAgICAgICAgICAgICAgICAoMHgxMikKKyNkZWZpbmUgTVBJMl9TQVNTVEFUVVNfU0RTRl9DT05ORUNUSU9OX0ZBSUxFRCAgICAgICAgICAgKDB4MTMpCisjZGVmaW5lIE1QSTJfU0FTU1RBVFVTX0lOSVRJQVRPUl9SRVNQT05TRV9USU1FT1VUICAgICAgICgweDE0KQorCisKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSBTQVMgRGV2aWNlSW5mbyBmaWVsZCB1c2VkIGluIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudAorICogZGF0YSBhbmQgU0FTIENvbmZpZ3VyYXRpb24gcGFnZXMuCisgKi8KKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fU0VQICAgICAgICAgICAgICAgICgweDAwMDA0MDAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19BVEFQSV9ERVZJQ0UgICAgICAgKDB4MDAwMDIwMDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX0xTSV9ERVZJQ0UgICAgICAgICAoMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fRElSRUNUX0FUVEFDSCAgICAgICgweDAwMDAwODAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUICAgICAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NUUF9UQVJHRVQgICAgICAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fU01QX1RBUkdFVCAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19TQVRBX0RFVklDRSAgICAgICAgKDB4MDAwMDAwODApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9JTklUSUFUT1IgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fU1RQX0lOSVRJQVRPUiAgICAgICgweDAwMDAwMDIwKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19TTVBfSU5JVElBVE9SICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NBVEFfSE9TVCAgICAgICAgICAoMHgwMDAwMDAwOCkKKworI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19NQVNLX0RFVklDRV9UWVBFICAgKDB4MDAwMDAwMDcpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX05PX0RFVklDRSAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFX0lORk9fRU5EX0RFVklDRSAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19FREdFX0VYUEFOREVSICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTX0RFVklDRV9JTkZPX0ZBTk9VVF9FWFBBTkRFUiAgICAoMHgwMDAwMDAwMykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgIFNBUyBNZXNzYWdlcworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTTVAgUGFzc3Rocm91Z2ggbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNNUCBQYXNzdGhyb3VnaCBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NNUF9QQVNTVEhST1VHSF9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGFzc3Rocm91Z2hGbGFnczsgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdERhdGFMZW5ndGg7ICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDBDICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDFDICovCisgICAgTVBJMl9TSU1QTEVfU0dFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAvKiAweDIwICovCit9IE1QSTJfU01QX1BBU1NUSFJPVUdIX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TTVBfUEFTU1RIUk9VR0hfUkVRVUVTVCwKKyAgTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciBQYXNzdGhyb3VnaEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU01QX1BUX1JFUV9QVF9GTEFHU19JTU1FRElBVEUgICAgICAoMHg4MCkKKworLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworCisKKy8qIFNNUCBQYXNzdGhyb3VnaCBSZXBseSBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TTVBfUEFTU1RIUk9VR0hfUkVQTFkKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQYXNzdGhyb3VnaEZsYWdzOyAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZURhdGFMZW5ndGg7IC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTQVNTdGF0dXM7ICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZURhdGFbNF07ICAgIC8qIDB4MTggKi8KK30gTVBJMl9TTVBfUEFTU1RIUk9VR0hfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TTVBfUEFTU1RIUk9VR0hfUkVQTFksCisgIE1waTJTbXBQYXNzdGhyb3VnaFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNtcFBhc3N0aHJvdWdoUmVwbHlfdDsKKworLyogdmFsdWVzIGZvciBQYXNzdGhyb3VnaEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU01QX1BUX1JFUExZX1BUX0ZMQUdTX0lNTUVESUFURSAgICAoMHg4MCkKKworLyogdmFsdWVzIGZvciBTQVNTdGF0dXMgZmllbGQgYXJlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNBVEEgUGFzc3Rocm91Z2ggbWVzc2FnZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNBVEEgUGFzc3Rocm91Z2ggUmVxdWVzdCBNZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQYXNzdGhyb3VnaEZsYWdzOyAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoOyAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRklTWzIwXTsgICAgIC8qIDB4MUMgKi8KKyAgICBNUEkyX1NJTVBMRV9TR0VfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KK30gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QsCisgIE1waTJTYXRhUGFzc3Rocm91Z2hSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhdGFQYXNzdGhyb3VnaFJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciBQYXNzdGhyb3VnaEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FUQV9QVF9SRVFfUFRfRkxBR1NfRVhFQ1VURV9ESUFHICAgICAgKDB4MDEwMCkKKyNkZWZpbmUgTVBJMl9TQVRBX1BUX1JFUV9QVF9GTEFHU19ETUEgICAgICAgICAgICAgICAoMHgwMDIwKQorI2RlZmluZSBNUEkyX1NBVEFfUFRfUkVRX1BUX0ZMQUdTX1BJTyAgICAgICAgICAgICAgICgweDAwMTApCisjZGVmaW5lIE1QSTJfU0FUQV9QVF9SRVFfUFRfRkxBR1NfVU5TUEVDSUZJRURfVlUgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9TQVRBX1BUX1JFUV9QVF9GTEFHU19XUklURSAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1NBVEFfUFRfUkVRX1BUX0ZMQUdTX1JFQUQgICAgICAgICAgICAgICgweDAwMDEpCisKKy8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKworCisvKiBTQVRBIFBhc3N0aHJvdWdoIFJlcGx5IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVQTFkKK3sKKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQYXNzdGhyb3VnaEZsYWdzOyAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTQVNTdGF0dXM7ICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNGSVNbMjBdOyAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBTdGF0dXNDb250cm9sUmVnaXN0ZXJzOyAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJDb3VudDsgICAgICAvKiAweDJDICovCit9IE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVQTFksCisgIE1waTJTYXRhUGFzc3Rocm91Z2hSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJTYXRhUGFzc3Rocm91Z2hSZXBseV90OworCisvKiB2YWx1ZXMgZm9yIFNBU1N0YXR1cyBmaWVsZCBhcmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgU0FTIElPIFVuaXQgQ29udHJvbCBtZXNzYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0FTIElPIFVuaXQgQ29udHJvbCBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU19JT1VOSVRfQ09OVFJPTF9SRVFVRVNUCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSU9DUGFyYW1ldGVyOyAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5TnVtOyAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUHJpbUZsYWdzOyAgICAgICAgICAvKiAweDBGICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUHJpbWl0aXZlOyAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTG9va3VwTWV0aG9kOyAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAvKiAweDE1ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU2xvdE51bWJlcjsgICAgICAgICAvKiAweDE2ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgTG9va3VwQWRkcmVzczsgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DUGFyYW1ldGVyVmFsdWU7ICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAvKiAweDI0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAvKiAweDI4ICovCit9IE1QSTJfU0FTX0lPVU5JVF9DT05UUk9MX1JFUVVFU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNfSU9VTklUX0NPTlRST0xfUkVRVUVTVCwKKyAgTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIE9wZXJhdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19PUF9DTEVBUl9BTExfUEVSU0lTVEVOVCAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTX09QX1BIWV9MSU5LX1JFU0VUICAgICAgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgICAgICAgICAgICAgICgweDA3KQorI2RlZmluZSBNUEkyX1NBU19PUF9QSFlfQ0xFQVJfRVJST1JfTE9HICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfU0FTX09QX1NFTkRfUFJJTUlUSVZFICAgICAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9TQVNfT1BfRk9SQ0VfRlVMTF9ESVNDT1ZFUlkgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX1NBU19PUF9UUkFOU01JVF9QT1JUX1NFTEVDVF9TSUdOQUwgKDB4MEMpCisjZGVmaW5lIE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UgICAgICAgICAgICAgICAoMHgwRCkKKyNkZWZpbmUgTVBJMl9TQVNfT1BfTE9PS1VQX01BUFBJTkcgICAgICAgICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX1NBU19PUF9TRVRfSU9DX1BBUkFNRVRFUiAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfU0FTX09QX1BST0RVQ1RfU1BFQ0lGSUNfTUlOICAgICAgICAoMHg4MCkKKworLyogdmFsdWVzIGZvciB0aGUgUHJpbUZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX1BSSU1GTEFHU19TSU5HTEUgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9TQVNfUFJJTUZMQUdTX1RSSVBMRSAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU19QUklNRkxBR1NfUkVEVU5EQU5UICAgICAgICAgICAgKDB4MDEpCisKKy8qIHZhbHVlcyBmb3IgdGhlIExvb2t1cE1ldGhvZCBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19MT09LVVBfTUVUSE9EX1NBU19BRERSRVNTICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU19MT09LVVBfTUVUSE9EX1NBU19FTkNMT1NVUkVfU0xPVCAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU19MT09LVVBfTUVUSE9EX1NBU19ERVZJQ0VfTkFNRSAgICAgICgweDAzKQorCisKKy8qIFNBUyBJTyBVbml0IENvbnRyb2wgUmVwbHkgTWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTX0lPVU5JVF9DT05UUk9MX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSU9DUGFyYW1ldGVyOyAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAvKiAweDEwICovCit9IE1QSTJfU0FTX0lPVU5JVF9DT05UUk9MX1JFUExZLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTX0lPVU5JVF9DT05UUk9MX1JFUExZLAorICBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90OworCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmY0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKgorICogICAgICAgICAgIE5hbWU6ICBtcGkyX3Rvb2wuaAorICogICAgICAgICAgVGl0bGU6ICBNUEkgZGlhZ25vc3RpYyB0b29sIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCisgKiAgQ3JlYXRpb24gRGF0ZTogIE1hcmNoIDI2LCAyMDA3CisgKgorICogICAgbXBpMl90b29sLmggVmVyc2lvbjogIDAyLjAwLjAyCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMTItMTgtMDcgIDAyLjAwLjAxICBBZGRlZCBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IGFuZCBEaWFnbm9zdGljIFJlbGVhc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBNUEkyX1RPT0xfSAorI2RlZmluZSBNUEkyX1RPT0xfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgICAgICAgICBUb29sYm94IE1lc3NhZ2VzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogZGVmaW5lcyBmb3IgdGhlIFRvb2xzICovCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9DTEVBTl9UT09MICAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9NRU1PUllfTU9WRV9UT09MICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9CRUFDT05fVE9PTCAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IHJlcGx5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9UT09MQk9YX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9SRVBMWSwKKyAgTXBpMlRvb2xib3hSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94UmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBDbGVhbiBUb29sIHJlcXVlc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfQ0xFQU5fUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgIH0gTVBJMl9UT09MQk9YX0NMRUFOX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0NMRUFOX1JFUVVFU1QsCisgIE1waTJUb29sYm94Q2xlYW5SZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hDbGVhblJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX0JPT1RfU0VSVklDRVMgICAgICAgICAgICAoMHg4MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX1BFUlNJU1RfTUFOVUZBQ1RfUEFHRVMgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX09USEVSX1BFUlNJU1RfUEFHRVMgICAgICAoMHgyMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX0ZXX0NVUlJFTlQgICAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX0ZXX0JBQ0tVUCAgICAgICAgICAgICAgICAoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX01FR0FSQUlEICAgICAgICAgICAgICAgICAoMHgwMjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX0lOSVRJQUxJWkFUSU9OICAgICAgICAgICAoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX0ZMQVNIICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX1NFRVBST00gICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX05WU1JBTSAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBNZW1vcnkgTW92ZSByZXF1ZXN0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX01FTV9NT1ZFX1JFUVVFU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCit9IE1QSTJfVE9PTEJPWF9NRU1fTU9WRV9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9NRU1fTU9WRV9SRVFVRVNULAorICBNcGkyVG9vbGJveE1lbU1vdmVSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hNZW1Nb3ZlUmVxdWVzdF90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IEJlYWNvbiBUb29sIHJlcXVlc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfQkVBQ09OX1JFUVVFU1QKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBGICovCit9IE1QSTJfVE9PTEJPWF9CRUFDT05fUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfQkVBQ09OX1JFUVVFU1QsCisgIE1waTJUb29sYm94QmVhY29uUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94QmVhY29uUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1RPT0xCT1hfRkxBR1NfQkVBQ09OTU9ERV9PRkYgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9GTEFHU19CRUFDT05NT0RFX09OICAgICAgICAoMHgwMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgICAgRGlhZ25vc3RpYyBCdWZmZXIgTWVzc2FnZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IHJlcXVlc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0RJQUdfQlVGRkVSX1BPU1RfUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQnVmZmVyVHlwZTsgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgQnVmZmVyQWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBCdWZmZXJMZW5ndGg7ICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RTcGVjaWZpY1syM107ICAgICAgICAvKiAweDI0ICovCit9IE1QSTJfRElBR19CVUZGRVJfUE9TVF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRElBR19CVUZGRVJfUE9TVF9SRVFVRVNULAorICBNcGkyRGlhZ0J1ZmZlclBvc3RSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRpYWdCdWZmZXJQb3N0UmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBCdWZmZXJUeXBlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRElBR19CVUZfVFlQRV9UUkFDRSAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfRElBR19CVUZfVFlQRV9TTkFQU0hPVCAgICAgICAgICAgICAgICAgKDB4MDEpCisvKiBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJ1ZmZlciB0eXBlcyAqLworI2RlZmluZSBNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICgweDAyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IHJlcGx5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9ESUFHX0JVRkZFUl9QT1NUX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJUeXBlOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsgICAgICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX0RJQUdfQlVGRkVSX1BPU1RfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ESUFHX0JVRkZFUl9QT1NUX1JFUExZLAorICBNcGkyRGlhZ0J1ZmZlclBvc3RSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJEaWFnQnVmZmVyUG9zdFJlcGx5X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIERpYWdub3N0aWMgUmVsZWFzZSByZXF1ZXN0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9ESUFHX1JFTEVBU0VfUkVRVUVTVAoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQnVmZmVyVHlwZTsgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCit9IE1QSTJfRElBR19SRUxFQVNFX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ESUFHX1JFTEVBU0VfUkVRVUVTVCwKKyAgTXBpMkRpYWdSZWxlYXNlUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJEaWFnUmVsZWFzZVJlcXVlc3RfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCByZXBseQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRElBR19SRUxFQVNFX1JFUExZCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJUeXBlOyAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KK30gTVBJMl9ESUFHX1JFTEVBU0VfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ESUFHX1JFTEVBU0VfUkVQTFksCisgIE1waTJEaWFnUmVsZWFzZVJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRpYWdSZWxlYXNlUmVwbHlfdDsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdHlwZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZGUwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90eXBlLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNyBMU0kgQ29ycG9yYXRpb24uCisgKgorICoKKyAqICAgICAgICAgICBOYW1lOiAgbXBpMl90eXBlLmgKKyAqICAgICAgICAgIFRpdGxlOiAgTVBJIGJhc2ljIHR5cGUgZGVmaW5pdGlvbnMKKyAqICBDcmVhdGlvbiBEYXRlOiAgQXVndXN0IDE2LCAyMDA2CisgKgorICogICAgbXBpMl90eXBlLmggVmVyc2lvbjogIDAyLjAwLjAwCisgKgorICogIFZlcnNpb24gSGlzdG9yeQorICogIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIE1QSTJfVFlQRV9ICisjZGVmaW5lIE1QSTJfVFlQRV9ICisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluZSBNUEkyX1BPSU5URVIgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkZWZpbmVkLiBCeSBkZWZhdWx0CisgKiBNUEkyX1BPSU5URVIgaXMgZGVmaW5lZCB0byBiZSBhIG5lYXIgcG9pbnRlci4gTVBJMl9QT0lOVEVSIGNhbiBiZSBkZWZpbmVkIGFzCisgKiBhIGZhciBwb2ludGVyIGJ5IGRlZmluaW5nIE1QSTJfUE9JTlRFUiBhcyAiZmFyICoiIGJlZm9yZSB0aGlzIGhlYWRlciBmaWxlIGlzCisgKiBpbmNsdWRlZC4KKyAqLworI2lmbmRlZiBNUEkyX1BPSU5URVIKKyNkZWZpbmUgTVBJMl9QT0lOVEVSICAgICAqCisjZW5kaWYKKworLyogdGhlIGJhc2ljIHR5cGVzIG1heSBoYXZlIGFscmVhZHkgYmVlbiBpbmNsdWRlZCBieSBtcGlfdHlwZS5oICovCisjaWZuZGVmIE1QSV9UWVBFX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgICAgICAgIEJhc2ljIFR5cGVzCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1OCBVODsKK3R5cGVkZWYgX19sZTE2IFUxNjsKK3R5cGVkZWYgX19sZTMyIFUzMjsKK3R5cGVkZWYgX19sZTY0IFU2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgICAgICAgICAgICAgIFBvaW50ZXIgVHlwZXMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIFU4ICAgICAgKlBVODsKK3R5cGVkZWYgVTE2ICAgICAqUFUxNjsKK3R5cGVkZWYgVTMyICAgICAqUFUzMjsKK3R5cGVkZWYgVTY0ICAgICAqUFU2NDsKKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDI3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtMCwwICsxLDM0MzUgQEAKKy8qCisgKiBUaGlzIGlzIHRoZSBGdXNpb24gTVBUIGJhc2UgZHJpdmVyIHByb3ZpZGluZyBjb21tb24gQVBJIGxheWVyIGludGVyZmFjZQorICogZm9yIGFjY2VzcyB0byBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IKKyAqIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUCisgKiBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcworICogc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorICogZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCisgKiBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAqIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsCisgKiBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworICogRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKyAqIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAorICogSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUworCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJtcHQyc2FzX2Jhc2UuaCIKKworc3RhdGljIE1QVF9DQUxMQkFDSwltcHRfY2FsbGJhY2tzW01QVF9NQVhfQ0FMTEJBQ0tTXTsKKworI2RlZmluZSBGQVVMVF9QT0xMSU5HX0lOVEVSVkFMIDEwMDAgLyogaW4gbWlsbGlzZWNvbmRzICovCisjZGVmaW5lIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUgNTAwIC8qIG1heGltdW0gY29udHJvbGxlciBxdWV1ZSBkZXB0aCAqLworCitzdGF0aWMgaW50IG1heF9xdWV1ZV9kZXB0aCA9IC0xOworbW9kdWxlX3BhcmFtKG1heF9xdWV1ZV9kZXB0aCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X3F1ZXVlX2RlcHRoLCAiIG1heCBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICIpOworCitzdGF0aWMgaW50IG1heF9zZ2xfZW50cmllcyA9IC0xOworbW9kdWxlX3BhcmFtKG1heF9zZ2xfZW50cmllcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X3NnbF9lbnRyaWVzLCAiIG1heCBzZyBlbnRyaWVzICIpOworCitzdGF0aWMgaW50IG1zaXhfZGlzYWJsZSA9IC0xOworbW9kdWxlX3BhcmFtKG1zaXhfZGlzYWJsZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXNpeF9kaXNhYmxlLCAiIGRpc2FibGUgbXNpeCByb3V0ZWQgaW50ZXJydXB0cyAoZGVmYXVsdD0wKSIpOworCisvKioKKyAqIF9iYXNlX2ZhdWx0X3Jlc2V0X3dvcmsgLSB3b3JrcSBoYW5kbGluZyBpb2MgZmF1bHQgY29uZGl0aW9ucworICogQHdvcms6IGlucHV0IGFyZ3VtZW50LCB1c2VkIHRvIGRlcml2ZSBpb2MKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfZmF1bHRfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIsIGZhdWx0X3Jlc2V0X3dvcmsud29yayk7CisJdW5zaWduZWQgbG9uZwkgZmxhZ3M7CisJdTMyIGRvb3JiZWxsOworCWludCByYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKQorCQlnb3RvIHJlYXJtX3RpbWVyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCWRvb3JiZWxsID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDApOworCWlmICgoZG9vcmJlbGwgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSA9PSBNUEkyX0lPQ19TVEFURV9GQVVMVCkgeworCQlyYyA9IG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIiVzOiBoYXJkIHJlc2V0OiAlc1xuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIChyYyA9PSAwKSA/ICJzdWNjZXNzIiA6ICJmYWlsZWQiKTsKKwkJZG9vcmJlbGwgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMCk7CisJCWlmICgoZG9vcmJlbGwgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSA9PSBNUEkyX0lPQ19TVEFURV9GQVVMVCkKKwkJCW1wdDJzYXNfYmFzZV9mYXVsdF9pbmZvKGlvYywgZG9vcmJlbGwgJgorCQkJICAgIE1QSTJfRE9PUkJFTExfREFUQV9NQVNLKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworIHJlYXJtX3RpbWVyOgorCWlmIChpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xLAorCQkgICAgJmlvYy0+ZmF1bHRfcmVzZXRfd29yaywKKwkJICAgIG1zZWNzX3RvX2ppZmZpZXMoRkFVTFRfUE9MTElOR19JTlRFUlZBTCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworLyoqCisgKiBfYmFzZV9zYXNfaW9jX2luZm8gLSB2ZXJib3NlIHRyYW5zbGF0aW9uIG9mIHRoZSBpb2Mgc3RhdHVzCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQHJlcXVlc3RfaGRyOiByZXF1ZXN0IG1mCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9zYXNfaW9jX2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseSwKKyAgICAgTVBJMlJlcXVlc3RIZWFkZXJfdCAqcmVxdWVzdF9oZHIpCit7CisJdTE2IGlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWNoYXIgKmRlc2MgPSBOVUxMOworCXUxNiBmcmFtZV9zejsKKwljaGFyICpmdW5jX3N0ciA9IE5VTEw7CisKKwkvKiBTQ1NJX0lPLCBSQUlEX1BBU1MgYXJlIGhhbmRsZWQgZnJvbSBfc2NzaWhfc2NzaV9pb2NfaW5mbyAqLworCWlmIChyZXF1ZXN0X2hkci0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwKKwkgICAgcmVxdWVzdF9oZHItPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIIHx8CisJICAgIHJlcXVlc3RfaGRyLT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTikKKwkJcmV0dXJuOworCisJc3dpdGNoIChpb2Nfc3RhdHVzKSB7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb21tb24gSU9DU3RhdHVzIHZhbHVlcyBmb3IgYWxsIHJlcGxpZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfRlVOQ1RJT046CisJCWRlc2MgPSAiaW52YWxpZCBmdW5jdGlvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQlVTWToKKwkJZGVzYyA9ICJidXN5IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX1NHTDoKKwkJZGVzYyA9ICJpbnZhbGlkIHNnbCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5URVJOQUxfRVJST1I6CisJCWRlc2MgPSAiaW50ZXJuYWwgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfVlBJRDoKKwkJZGVzYyA9ICJpbnZhbGlkIHZwaWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CisJCWRlc2MgPSAiaW5zdWZmaWNpZW50IHJlc291cmNlcyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9GSUVMRDoKKwkJZGVzYyA9ICJpbnZhbGlkIGZpZWxkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX1NUQVRFOgorCQlkZXNjID0gImludmFsaWQgc3RhdGUiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX09QX1NUQVRFX05PVF9TVVBQT1JURUQ6CisJCWRlc2MgPSAib3Agc3RhdGUgbm90IHN1cHBvcnRlZCI7CisJCWJyZWFrOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29uZmlnIElPQ1N0YXR1cyB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX0FDVElPTjoKKwkJZGVzYyA9ICJjb25maWcgaW52YWxpZCBhY3Rpb24iOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1RZUEU6CisJCWRlc2MgPSAiY29uZmlnIGludmFsaWQgdHlwZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRToKKwkJZGVzYyA9ICJjb25maWcgaW52YWxpZCBwYWdlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9EQVRBOgorCQlkZXNjID0gImNvbmZpZyBpbnZhbGlkIGRhdGEiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19OT19ERUZBVUxUUzoKKwkJZGVzYyA9ICJjb25maWcgbm8gZGVmYXVsdHMiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0NPTkZJR19DQU5UX0NPTU1JVDoKKwkJZGVzYyA9ICJjb25maWcgY2FudCBjb21taXQiOworCQlicmVhazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNDU0kgSU8gUmVwbHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUkVDT1ZFUkVEX0VSUk9SOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JTlZBTElEX0RFVkhBTkRMRToKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfREVWSUNFX05PVF9USEVSRToKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfREFUQV9PVkVSUlVOOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX1VOREVSUlVOOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT19EQVRBX0VSUk9SOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9QUk9UT0NPTF9FUlJPUjoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19URVJNSU5BVEVEOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9SRVNJRFVBTF9NSVNNQVRDSDoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19NR01UX0ZBSUxFRDoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU9DX1RFUk1JTkFURUQ6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0VYVF9URVJNSU5BVEVEOgorCQlicmVhazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZvciB1c2UgYnkgU0NTSSBJbml0aWF0b3IgYW5kIFNDU0kgVGFyZ2V0IGVuZC10by1lbmQgZGF0YSBwcm90ZWN0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19FRURQX0dVQVJEX0VSUk9SOgorCQlkZXNjID0gImVlZHAgZ3VhcmQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0VFRFBfUkVGX1RBR19FUlJPUjoKKwkJZGVzYyA9ICJlZWRwIHJlZiB0YWcgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0VFRFBfQVBQX1RBR19FUlJPUjoKKwkJZGVzYyA9ICJlZWRwIGFwcCB0YWcgZXJyb3IiOworCQlicmVhazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFNDU0kgVGFyZ2V0IHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX0lOVkFMSURfSU9fSU5ERVg6CisJCWRlc2MgPSAidGFyZ2V0IGludmFsaWQgaW8gaW5kZXgiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9BQk9SVEVEOgorCQlkZXNjID0gInRhcmdldCBhYm9ydGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfTk9fQ09OTl9SRVRSWUFCTEU6CisJCWRlc2MgPSAidGFyZ2V0IG5vIGNvbm4gcmV0cnlhYmxlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfTk9fQ09OTkVDVElPTjoKKwkJZGVzYyA9ICJ0YXJnZXQgbm8gY29ubmVjdGlvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX1hGRVJfQ09VTlRfTUlTTUFUQ0g6CisJCWRlc2MgPSAidGFyZ2V0IHhmZXIgY291bnQgbWlzbWF0Y2giOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9EQVRBX09GRlNFVF9FUlJPUjoKKwkJZGVzYyA9ICJ0YXJnZXQgZGF0YSBvZmZzZXQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9UT09fTVVDSF9XUklURV9EQVRBOgorCQlkZXNjID0gInRhcmdldCB0b28gbXVjaCB3cml0ZSBkYXRhIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19UQVJHRVRfSVVfVE9PX1NIT1JUOgorCQlkZXNjID0gInRhcmdldCBpdSB0b28gc2hvcnQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1RBUkdFVF9BQ0tfTkFLX1RJTUVPVVQ6CisJCWRlc2MgPSAidGFyZ2V0IGFjayBuYWsgdGltZW91dCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfVEFSR0VUX05BS19SRUNFSVZFRDoKKwkJZGVzYyA9ICJ0YXJnZXQgbmFrIHJlY2VpdmVkIjsKKwkJYnJlYWs7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTZXJpYWwgQXR0YWNoZWQgU0NTSSB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NBU19TTVBfUkVRVUVTVF9GQUlMRUQ6CisJCWRlc2MgPSAic21wIHJlcXVlc3QgZmFpbGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQVNfU01QX0RBVEFfT1ZFUlJVTjoKKwkJZGVzYyA9ICJzbXAgZGF0YSBvdmVycnVuIjsKKwkJYnJlYWs7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IC8gRGlhZ25vc3RpYyBSZWxlYXNlIHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRDoKKwkJZGVzYyA9ICJkaWFnbm9zdGljIHJlbGVhc2VkIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKCFkZXNjKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHJlcXVlc3RfaGRyLT5GdW5jdGlvbikgeworCWNhc2UgTVBJMl9GVU5DVElPTl9DT05GSUc6CisJCWZyYW1lX3N6ID0gc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpICsgaW9jLT5zZ2Vfc2l6ZTsKKwkJZnVuY19zdHIgPSAiY29uZmlnX3BhZ2UiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQ6CisJCWZyYW1lX3N6ID0gc2l6ZW9mKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QpOworCQlmdW5jX3N0ciA9ICJ0YXNrX21nbXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDoKKwkJZnJhbWVfc3ogPSBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpOworCQlmdW5jX3N0ciA9ICJzYXNfaW91bml0X2N0bCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9TQ1NJX0VOQ0xPU1VSRV9QUk9DRVNTT1I6CisJCWZyYW1lX3N6ID0gc2l6ZW9mKE1waTJTZXBSZXF1ZXN0X3QpOworCQlmdW5jX3N0ciA9ICJlbmNsb3N1cmUiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fSU9DX0lOSVQ6CisJCWZyYW1lX3N6ID0gc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KTsKKwkJZnVuY19zdHIgPSAiaW9jX2luaXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFCTEU6CisJCWZyYW1lX3N6ID0gc2l6ZW9mKE1waTJQb3J0RW5hYmxlUmVxdWVzdF90KTsKKwkJZnVuY19zdHIgPSAicG9ydF9lbmFibGUiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOgorCQlmcmFtZV9zeiA9IHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpICsgaW9jLT5zZ2Vfc2l6ZTsKKwkJZnVuY19zdHIgPSAic21wX3Bhc3N0aHJ1IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnJhbWVfc3ogPSAzMjsKKwkJZnVuY19zdHIgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKworCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJpb2Nfc3RhdHVzOiAlcygweCUwNHgpLCByZXF1ZXN0KDB4JXApLCIKKwkgICAgIiAoJXMpXG4iLCBpb2MtPm5hbWUsIGRlc2MsIGlvY19zdGF0dXMsIHJlcXVlc3RfaGRyLCBmdW5jX3N0cik7CisKKwlfZGVidWdfZHVtcF9tZihyZXF1ZXN0X2hkciwgZnJhbWVfc3ovNCk7Cit9CisKKy8qKgorICogX2Jhc2VfZGlzcGxheV9ldmVudF9kYXRhIC0gdmVyYm9zZSB0cmFuc2xhdGlvbiBvZiBmaXJtd2FyZSBhc3luIGV2ZW50cworICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX2Rpc3BsYXlfZXZlbnRfZGF0YShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5KQoreworCWNoYXIgKmRlc2MgPSBOVUxMOworCXUxNiBldmVudDsKKworCWlmICghKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVFMpKQorCQlyZXR1cm47CisKKwlldmVudCA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVBJMl9FVkVOVF9MT0dfREFUQToKKwkJZGVzYyA9ICJMb2cgRGF0YSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TVEFURV9DSEFOR0U6CisJCWRlc2MgPSAiU3RhdHVzIENoYW5nZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9IQVJEX1JFU0VUX1JFQ0VJVkVEOgorCQlkZXNjID0gIkhhcmQgUmVzZXQgUmVjZWl2ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfRVZFTlRfQ0hBTkdFOgorCQlkZXNjID0gIkV2ZW50IENoYW5nZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMOgorCQlkZXNjID0gIlRhc2sgU2V0IEZ1bGwiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCQlkZXNjID0gIkRldmljZSBTdGF0dXMgQ2hhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6CisJCWRlc2MgPSAiSVIgT3BlcmF0aW9uIFN0YXR1cyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgorCQlkZXNjID0gICJEaXNjb3ZlcnkiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkU6CisJCWRlc2MgPSAiU0FTIEJyb2FkY2FzdCBQcmltaXRpdmUiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0lOSVRfREVWSUNFX1NUQVRVU19DSEFOR0U6CisJCWRlc2MgPSAiU0FTIEluaXQgRGV2aWNlIFN0YXR1cyBDaGFuZ2UiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0lOSVRfVEFCTEVfT1ZFUkZMT1c6CisJCWRlc2MgPSAiU0FTIEluaXQgVGFibGUgT3ZlcmZsb3ciOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUOgorCQlkZXNjID0gIlNBUyBUb3BvbG9neSBDaGFuZ2UgTGlzdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfRU5DTF9ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwkJZGVzYyA9ICJTQVMgRW5jbG9zdXJlIERldmljZSBTdGF0dXMgQ2hhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRToKKwkJZGVzYyA9ICJJUiBWb2x1bWUiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKKwkJZGVzYyA9ICJJUiBQaHlzaWNhbCBEaXNrIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6CisJCWRlc2MgPSAiSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQ6CisJCWRlc2MgPSAiTG9nIEVudHJ5IEFkZGVkIjsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFkZXNjKQorCQlyZXR1cm47CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwgZGVzYyk7Cit9CisjZW5kaWYKKworLyoqCisgKiBfYmFzZV9zYXNfbG9nX2luZm8gLSB2ZXJib3NlIHRyYW5zbGF0aW9uIG9mIGZpcm13YXJlIGxvZyBpbmZvCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBsb2dfaW5mbzogbG9nIGluZm8KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX3Nhc19sb2dfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgLCB1MzIgbG9nX2luZm8pCit7CisJdW5pb24gbG9naW5mb190eXBlIHsKKwkJdTMyCWxvZ2luZm87CisJCXN0cnVjdCB7CisJCQl1MzIJc3ViY29kZToxNjsKKwkJCXUzMgljb2RlOjg7CisJCQl1MzIJb3JpZ2luYXRvcjo0OworCQkJdTMyCWJ1c190eXBlOjQ7CisJCX0gZHc7CisJfTsKKwl1bmlvbiBsb2dpbmZvX3R5cGUgc2FzX2xvZ2luZm87CisJY2hhciAqb3JpZ2luYXRvcl9zdHIgPSBOVUxMOworCisJc2FzX2xvZ2luZm8ubG9naW5mbyA9IGxvZ19pbmZvOworCWlmIChzYXNfbG9naW5mby5kdy5idXNfdHlwZSAhPSAzIC8qU0FTKi8pCisJCXJldHVybjsKKworCS8qIGVhdCB0aGUgbG9naW5mb3MgYXNzb2NpYXRlZCB3aXRoIHRhc2sgYWJvcnRzICovCisJaWYgKGlvYy0+aWdub3JlX2xvZ2luZm9zICYmIChsb2dfaW5mbyA9PSAzMDA1MDAwMCB8fCBsb2dfaW5mbyA9PQorCSAgICAweDMxMTQwMDAwIHx8IGxvZ19pbmZvID09IDB4MzExMzAwMDApKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHNhc19sb2dpbmZvLmR3Lm9yaWdpbmF0b3IpIHsKKwljYXNlIDA6CisJCW9yaWdpbmF0b3Jfc3RyID0gIklPUCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJb3JpZ2luYXRvcl9zdHIgPSAiUEwiOworCQlicmVhazsKKwljYXNlIDI6CisJCW9yaWdpbmF0b3Jfc3RyID0gIklSIjsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgImxvZ19pbmZvKDB4JTA4eCk6IG9yaWdpbmF0b3IoJXMpLCAiCisJICAgICJjb2RlKDB4JTAyeCksIHN1Yl9jb2RlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgbG9nX2luZm8sCisJICAgICBvcmlnaW5hdG9yX3N0ciwgc2FzX2xvZ2luZm8uZHcuY29kZSwKKwkgICAgIHNhc19sb2dpbmZvLmR3LnN1YmNvZGUpOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9mYXVsdF9pbmZvIC0gdmVyYm9zZSB0cmFuc2xhdGlvbiBvZiBmaXJtd2FyZSBGQVVMVCBjb2RlCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBmYXVsdF9jb2RlOiBmYXVsdCBjb2RlCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9mYXVsdF9pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyAsIHUxNiBmYXVsdF9jb2RlKQoreworCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhdWx0X3N0YXRlKDB4JTA0eCkhXG4iLAorCSAgICBpb2MtPm5hbWUsIGZhdWx0X2NvZGUpOworfQorCisvKioKKyAqIF9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyAtCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELAorICAgIHUzMiByZXBseSkKK3sKKwlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKKwl1MTYgaW9jX3N0YXR1czsKKworCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyk7CisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJaWYgKChpb2Nfc3RhdHVzICYgTVBJMl9JT0NTVEFUVVNfTUFTSykgJiYKKwkgICAgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19SRVBMWSkpIHsKKwkJX2Jhc2Vfc2FzX2lvY19pbmZvKGlvYyAsIG1waV9yZXBseSwKKwkJICAgbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKSk7CisJfQorI2VuZGlmCisJaWYgKGlvY19zdGF0dXMgJiBNUEkyX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSkKKwkJX2Jhc2Vfc2FzX2xvZ19pbmZvKGlvYywgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2RvbmUgLSBiYXNlIGludGVybmFsIGNvbW1hbmQgY29tcGxldGlvbiByb3V0aW5lCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQoreworCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaWYgKG1waV9yZXBseSAmJiBtcGlfcmVwbHktPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fRVZFTlRfQUNLKQorCQlyZXR1cm47CisKKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQorCQlyZXR1cm47CisKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CisJaWYgKG1waV9yZXBseSkgeworCQlpb2MtPmJhc2VfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVQTFlfVkFMSUQ7CisJCW1lbWNweShpb2MtPmJhc2VfY21kcy5yZXBseSwgbXBpX3JlcGx5LCBtcGlfcmVwbHktPk1zZ0xlbmd0aCo0KTsKKwl9CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOworCWNvbXBsZXRlKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKK30KKworLyoqCisgKiBfYmFzZV9hc3luY19ldmVudCAtIG1haW4gY2FsbGJhY2sgaGFuZGxlciBmb3IgZmlybXdhcmUgYXN5biBldmVudHMKKyAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX2FzeW5jX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3sKKwlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CisJTXBpMkV2ZW50QWNrUmVxdWVzdF90ICphY2tfcmVxdWVzdDsKKwl1MTYgc21pZDsKKworCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCWlmICghbXBpX3JlcGx5KQorCQlyZXR1cm47CisJaWYgKG1waV9yZXBseS0+RnVuY3Rpb24gIT0gTVBJMl9GVU5DVElPTl9FVkVOVF9OT1RJRklDQVRJT04pCisJCXJldHVybjsKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlfYmFzZV9kaXNwbGF5X2V2ZW50X2RhdGEoaW9jLCBtcGlfcmVwbHkpOworI2VuZGlmCisJaWYgKCEobXBpX3JlcGx5LT5BY2tSZXF1aXJlZCAmIE1QSTJfRVZFTlRfTk9USUZJQ0FUSU9OX0FDS19SRVFVSVJFRCkpCisJCWdvdG8gb3V0OworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmJhc2VfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCWFja19yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwltZW1zZXQoYWNrX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyRXZlbnRBY2tSZXF1ZXN0X3QpKTsKKwlhY2tfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX0FDSzsKKwlhY2tfcmVxdWVzdC0+RXZlbnQgPSBtcGlfcmVwbHktPkV2ZW50OworCWFja19yZXF1ZXN0LT5FdmVudENvbnRleHQgPSBtcGlfcmVwbHktPkV2ZW50Q29udGV4dDsKKwlhY2tfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKworIG91dDoKKworCS8qIHNjc2loIGNhbGxiYWNrIGhhbmRsZXIgKi8KKwltcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKGlvYywgVkZfSUQsIHJlcGx5KTsKKworCS8qIGN0bCBjYWxsYmFjayBoYW5kbGVyICovCisJbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soaW9jLCBWRl9JRCwgcmVwbHkpOworfQorCisvKioKKyAqIF9iYXNlX21hc2tfaW50ZXJydXB0cyAtIGRpc2FibGUgaW50ZXJydXB0cworICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKgorICogRGlzYWJsaW5nIFJlc2V0SVJRLCBSZXBseSBhbmQgRG9vcmJlbGwgSW50ZXJydXB0cworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfbWFza19pbnRlcnJ1cHRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1MzIgaGltX3JlZ2lzdGVyOworCisJaW9jLT5tYXNrX2ludGVycnVwdHMgPSAxOworCWhpbV9yZWdpc3RlciA9IHJlYWRsKCZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKKwloaW1fcmVnaXN0ZXIgfD0gTVBJMl9ISU1fRElNICsgTVBJMl9ISU1fUklNICsgTVBJMl9ISU1fUkVTRVRfSVJRX01BU0s7CisJd3JpdGVsKGhpbV9yZWdpc3RlciwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOworCXJlYWRsKCZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKK30KKworLyoqCisgKiBfYmFzZV91bm1hc2tfaW50ZXJydXB0cyAtIGVuYWJsZSBpbnRlcnJ1cHRzCisgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqCisgKiBFbmFibGluZyBvbmx5IFJlcGx5IEludGVycnVwdHMKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX3VubWFza19pbnRlcnJ1cHRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1MzIgaGltX3JlZ2lzdGVyOworCisJd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCWhpbV9yZWdpc3RlciA9IHJlYWRsKCZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKKwloaW1fcmVnaXN0ZXIgJj0gfk1QSTJfSElNX1JJTTsKKwl3cml0ZWwoaGltX3JlZ2lzdGVyLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0TWFzayk7CisJaW9jLT5tYXNrX2ludGVycnVwdHMgPSAwOworfQorCisvKioKKyAqIF9iYXNlX2ludGVycnVwdCAtIE1QVCBhZGFwdGVyIChJT0MpIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLgorICogQGlycTogaXJxIG51bWJlciAobm90IHVzZWQpCisgKiBAYnVzX2lkOiBidXMgaWRlbnRpZmllciBjb29raWUgPT0gcG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKKyAqIEByOiBwdF9yZWdzIHBvaW50ZXIgKG5vdCB1c2VkKQorICoKKyAqIFJldHVybiBJUlFfSEFORExFIGlmIHByb2Nlc3NlZCwgZWxzZSBJUlFfTk9ORS4KKyAqLworc3RhdGljIGlycXJldHVybl90CitfYmFzZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYnVzX2lkKQoreworCXUzMiBwb3N0X2luZGV4LCBwb3N0X2luZGV4X25leHQsIGNvbXBsZXRlZF9jbWRzOworCXU4IHJlcXVlc3RfZGVzcmlwdF90eXBlOworCXUxNiBzbWlkOworCXU4IGNiX2lkeDsKKwl1MzIgcmVwbHk7CisJdTggVkZfSUQ7CisJaW50IGk7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gYnVzX2lkOworCisJaWYgKGlvYy0+bWFza19pbnRlcnJ1cHRzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlwb3N0X2luZGV4ID0gaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXg7CisJcmVxdWVzdF9kZXNyaXB0X3R5cGUgPSBpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KKwkgICAgRGVmYXVsdC5SZXBseUZsYWdzICYgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOworCWlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWNvbXBsZXRlZF9jbWRzID0gMDsKKwlkbyB7CisJCWlmIChpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS5Xb3JkcyA9PSB+MFVMTCkKKwkJCWdvdG8gb3V0OworCQlyZXBseSA9IDA7CisJCWNiX2lkeCA9IDB4RkY7CisJCXNtaWQgPSBsZTE2X3RvX2NwdShpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KKwkJICAgIERlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxKTsKKwkJVkZfSUQgPSBpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KKwkJICAgIERlZmF1bHQuVkZfSUQ7CisJCWlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PQorCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSkgeworCQkJcmVwbHkgPSBsZTMyX3RvX2NwdShpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KKwkJCSAgICBBZGRyZXNzUmVwbHkuUmVwbHlGcmFtZUFkZHJlc3MpOworCQl9IGVsc2UgaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09CisJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRfQ09NTUFORF9CVUZGRVIpCisJCQlnb3RvIG5leHQ7CisJCWVsc2UgaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09CisJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUykKKwkJCWdvdG8gbmV4dDsKKwkJaWYgKHNtaWQpCisJCQljYl9pZHggPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5jYl9pZHg7CisJCWlmIChzbWlkICYmIGNiX2lkeCAhPSAweEZGKSB7CisJCQltcHRfY2FsbGJhY2tzW2NiX2lkeF0oaW9jLCBzbWlkLCBWRl9JRCwgcmVwbHkpOworCQkJaWYgKHJlcGx5KQorCQkJCV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhpb2MsIHNtaWQsIFZGX0lELAorCQkJCSAgICByZXBseSk7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCX0KKwkJaWYgKCFzbWlkKQorCQkJX2Jhc2VfYXN5bmNfZXZlbnQoaW9jLCBWRl9JRCwgcmVwbHkpOworCisJCS8qIHJlcGx5IGZyZWUgcXVldWUgaGFuZGxpbmcgKi8KKwkJaWYgKHJlcGx5KSB7CisJCQlpb2MtPnJlcGx5X2ZyZWVfaG9zdF9pbmRleCA9CisJCQkgICAgKGlvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4ID09CisJCQkgICAgKGlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtIDEpKSA/CisJCQkgICAgMCA6IGlvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4ICsgMTsKKwkJCWlvYy0+cmVwbHlfZnJlZVtpb2MtPnJlcGx5X2ZyZWVfaG9zdF9pbmRleF0gPQorCQkJICAgIGNwdV90b19sZTMyKHJlcGx5KTsKKwkJCXdyaXRlbChpb2MtPnJlcGx5X2ZyZWVfaG9zdF9pbmRleCwKKwkJCSAgICAmaW9jLT5jaGlwLT5SZXBseUZyZWVIb3N0SW5kZXgpOworCQkJd21iKCk7CisJCX0KKworIG5leHQ6CisJCXBvc3RfaW5kZXhfbmV4dCA9IChwb3N0X2luZGV4ID09IChpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggLQorCQkgICAgMSkpID8gMCA6IHBvc3RfaW5kZXggKyAxOworCQlyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9CisJCSAgICBpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4X25leHRdLkRlZmF1bHQuUmVwbHlGbGFncworCQkgICAgJiBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0s7CisJCWNvbXBsZXRlZF9jbWRzKys7CisJCWlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQpCisJCQlnb3RvIG91dDsKKwkJcG9zdF9pbmRleCA9IHBvc3RfaW5kZXhfbmV4dDsKKwl9IHdoaWxlICgxKTsKKworIG91dDoKKworCWlmICghY29tcGxldGVkX2NtZHMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIHJlcGx5IHBvc3QgZGVzY3JpcHRvciBoYW5kbGluZyAqLworCXBvc3RfaW5kZXhfbmV4dCA9IGlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4OworCWZvciAoaSA9IDAgOyBpIDwgY29tcGxldGVkX2NtZHM7IGkrKykgeworCQlwb3N0X2luZGV4ID0gcG9zdF9pbmRleF9uZXh0OworCQkvKiBwb2lzb24gdGhlIHJlcGx5IHBvc3QgZGVzY3JpcHRvciAqLworCQlpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4X25leHRdLldvcmRzID0gfjBVTEw7CisJCXBvc3RfaW5kZXhfbmV4dCA9IChwb3N0X2luZGV4ID09CisJCSAgICAoaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoIC0gMSkpCisJCSAgICA/IDAgOiBwb3N0X2luZGV4ICsgMTsKKwl9CisJaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXggPSBwb3N0X2luZGV4X25leHQ7CisJd3JpdGVsKHBvc3RfaW5kZXhfbmV4dCwgJmlvYy0+Y2hpcC0+UmVwbHlQb3N0SG9zdEluZGV4KTsKKwl3bWIoKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlciAtIGNsZWFyIGludGVydXB0IGNhbGxiYWNrIGhhbmRsZXIKKyAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodTggY2JfaWR4KQoreworCW1wdF9jYWxsYmFja3NbY2JfaWR4XSA9IE5VTEw7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIgLSBvYnRhaW4gaW5kZXggZm9yIHRoZSBpbnRlcnJ1cHQgY2FsbGJhY2sgaGFuZGxlcgorICogQGNiX2Z1bmM6IGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBjYl9mdW5jLgorICovCit1OAorbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoTVBUX0NBTExCQUNLIGNiX2Z1bmMpCit7CisJdTggY2JfaWR4OworCisJZm9yIChjYl9pZHggPSBNUFRfTUFYX0NBTExCQUNLUy0xOyBjYl9pZHg7IGNiX2lkeC0tKQorCQlpZiAobXB0X2NhbGxiYWNrc1tjYl9pZHhdID09IE5VTEwpCisJCQlicmVhazsKKworCW1wdF9jYWxsYmFja3NbY2JfaWR4XSA9IGNiX2Z1bmM7CisJcmV0dXJuIGNiX2lkeDsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfaW5pdGlhbGl6ZV9jYWxsYmFja19oYW5kbGVyIC0gaW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IGNhbGxiYWNrIGhhbmRsZXIKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX2luaXRpYWxpemVfY2FsbGJhY2tfaGFuZGxlcih2b2lkKQoreworCXU4IGNiX2lkeDsKKworCWZvciAoY2JfaWR4ID0gMDsgY2JfaWR4IDwgTVBUX01BWF9DQUxMQkFDS1M7IGNiX2lkeCsrKQorCQltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGNiX2lkeCk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZSAtIGJ1aWxkIHplcm8gbGVuZ3RoIHNnIGVudHJ5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBwYWRkcjogdmlydHVhbCBhZGRyZXNzIGZvciBTR0UKKyAqCisgKiBDcmVhdGUgYSB6ZXJvIGxlbmd0aCBzY2F0dGVyIGdhdGhlciBlbnRyeSB0byBpbnN1cmUgdGhlIElPQ3MgaGFyZHdhcmUgaGFzCisgKiBzb21ldGhpbmcgdG8gdXNlIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGdvZXMgYnJhaW4gZGVhZCBhbmQgdHJpZXMKKyAqIHRvIHNlbmQgZGF0YSBldmVuIHdoZW4gbm9uZSBpcyBhc2tlZCBmb3IuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB2b2lkICpwYWRkcikKK3sKKwl1MzIgZmxhZ3NfbGVuZ3RoID0gKHUzMikoKE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UKSA8PAorCSAgICBNUEkyX1NHRV9GTEFHU19TSElGVCk7CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocGFkZHIsIGZsYWdzX2xlbmd0aCwgLTEpOworfQorCisvKioKKyAqIF9iYXNlX2FkZF9zZ19zaW5nbGVfMzIgLSBQbGFjZSBhIHNpbXBsZSAzMiBiaXQgU0dFIGF0IGFkZHJlc3MgcEFkZHIuCisgKiBAcGFkZHI6IHZpcnR1YWwgYWRkcmVzcyBmb3IgU0dFCisgKiBAZmxhZ3NfbGVuZ3RoOiBTR0UgZmxhZ3MgYW5kIGRhdGEgdHJhbnNmZXIgbGVuZ3RoCisgKiBAZG1hX2FkZHI6IFBoeXNpY2FsIGFkZHJlc3MKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX2FkZF9zZ19zaW5nbGVfMzIodm9pZCAqcGFkZHIsIHUzMiBmbGFnc19sZW5ndGgsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJTXBpMlNHRVNpbXBsZTMyX3QgKnNnZWwgPSBwYWRkcjsKKworCWZsYWdzX2xlbmd0aCB8PSAoTVBJMl9TR0VfRkxBR1NfMzJfQklUX0FERFJFU1NJTkcgfAorCSAgICBNUEkyX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUykgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJc2dlbC0+RmxhZ3NMZW5ndGggPSBjcHVfdG9fbGUzMihmbGFnc19sZW5ndGgpOworCXNnZWwtPkFkZHJlc3MgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7Cit9CisKKworLyoqCisgKiBfYmFzZV9hZGRfc2dfc2luZ2xlXzY0IC0gUGxhY2UgYSBzaW1wbGUgNjQgYml0IFNHRSBhdCBhZGRyZXNzIHBBZGRyLgorICogQHBhZGRyOiB2aXJ0dWFsIGFkZHJlc3MgZm9yIFNHRQorICogQGZsYWdzX2xlbmd0aDogU0dFIGZsYWdzIGFuZCBkYXRhIHRyYW5zZmVyIGxlbmd0aAorICogQGRtYV9hZGRyOiBQaHlzaWNhbCBhZGRyZXNzCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9hZGRfc2dfc2luZ2xlXzY0KHZvaWQgKnBhZGRyLCB1MzIgZmxhZ3NfbGVuZ3RoLCBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCU1waTJTR0VTaW1wbGU2NF90ICpzZ2VsID0gcGFkZHI7CisKKwlmbGFnc19sZW5ndGggfD0gKE1QSTJfU0dFX0ZMQUdTXzY0X0JJVF9BRERSRVNTSU5HIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MpIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCXNnZWwtPkZsYWdzTGVuZ3RoID0gY3B1X3RvX2xlMzIoZmxhZ3NfbGVuZ3RoKTsKKwlzZ2VsLT5BZGRyZXNzID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpOworfQorCisjZGVmaW5lIGNvbnZlcnRfdG9fa2IoeCkgKCh4KSA8PCAoUEFHRV9TSElGVCAtIDEwKSkKKworLyoqCisgKiBfYmFzZV9jb25maWdfZG1hX2FkZHJlc3NpbmcgLSBzZXQgZG1hIGFkZHJlc3NpbmcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHBkZXY6IFBDSSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2VfY29uZmlnX2RtYV9hZGRyZXNzaW5nKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHN5c2luZm8gczsKKwljaGFyICpkZXNjID0gTlVMTDsKKworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSB7CisJCWNvbnN0IHVpbnQ2NF90IHJlcXVpcmVkX21hc2sgPQorCQkgICAgZG1hX2dldF9yZXF1aXJlZF9tYXNrKCZwZGV2LT5kZXYpOworCQlpZiAoKHJlcXVpcmVkX21hc2sgPiBETUFfMzJCSVRfTUFTSykgJiYgIXBjaV9zZXRfZG1hX21hc2socGRldiwKKwkJICAgIERNQV82NEJJVF9NQVNLKSAmJiAhcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCisJCSAgICBETUFfNjRCSVRfTUFTSykpIHsKKwkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlID0gJl9iYXNlX2FkZF9zZ19zaW5nbGVfNjQ7CisJCQlpb2MtPnNnZV9zaXplID0gc2l6ZW9mKE1waTJTR0VTaW1wbGU2NF90KTsKKwkJCWRlc2MgPSAiNjQiOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spCisJICAgICYmICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlID0gJl9iYXNlX2FkZF9zZ19zaW5nbGVfMzI7CisJCWlvYy0+c2dlX3NpemUgPSBzaXplb2YoTXBpMlNHRVNpbXBsZTMyX3QpOworCQlkZXNjID0gIjMyIjsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7CisKKyBvdXQ6CisJc2lfbWVtaW5mbygmcyk7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzIEJJVCBQQ0kgQlVTIERNQSBBRERSRVNTSU5HIFNVUFBPUlRFRCwgIgorCSAgICAidG90YWwgbWVtICglbGQga0IpXG4iLCBpb2MtPm5hbWUsIGRlc2MsIGNvbnZlcnRfdG9fa2Iocy50b3RhbHJhbSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2Jhc2Vfc2F2ZV9tc2l4X3RhYmxlIC0gYmFja3VwIG1zaXggdmVjdG9yIHRhYmxlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBUaGlzIGFkZHJlc3MgYW4gZXJyYXRhIHdoZXJlIGRpYWcgcmVzZXQgY2xlYXJzIG91dCB0aGUgdGFibGUKKyAqLworc3RhdGljIHZvaWQKK19iYXNlX3NhdmVfbXNpeF90YWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJaW50IGk7CisKKwlpZiAoIWlvYy0+bXNpeF9lbmFibGUgfHwgaW9jLT5tc2l4X3RhYmxlX2JhY2t1cCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5tc2l4X3ZlY3Rvcl9jb3VudDsgaSsrKQorCQlpb2MtPm1zaXhfdGFibGVfYmFja3VwW2ldID0gaW9jLT5tc2l4X3RhYmxlW2ldOworfQorCisvKioKKyAqIF9iYXNlX3Jlc3RvcmVfbXNpeF90YWJsZSAtIHRoaXMgcmVzdG9yZXMgdGhlIG1zaXggdmVjdG9yIHRhYmxlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9yZXN0b3JlX21zaXhfdGFibGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCWludCBpOworCisJaWYgKCFpb2MtPm1zaXhfZW5hYmxlIHx8IGlvYy0+bXNpeF90YWJsZV9iYWNrdXAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGlvYy0+bXNpeF92ZWN0b3JfY291bnQ7IGkrKykKKwkJaW9jLT5tc2l4X3RhYmxlW2ldID0gaW9jLT5tc2l4X3RhYmxlX2JhY2t1cFtpXTsKK30KKworLyoqCisgKiBfYmFzZV9jaGVja19lbmFibGVfbXNpeCAtIGNoZWNrcyBNU0lYIGNhcGFiYWJsZS4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIENoZWNrIHRvIHNlZSBpZiBjYXJkIGlzIGNhcGFibGUgb2YgTVNJWCwgYW5kIHNldCBudW1iZXIKKyAqIG9mIGF2YWxpYWJsZSBtc2l4IHZlY3RvcnMKKyAqLworc3RhdGljIGludAorX2Jhc2VfY2hlY2tfZW5hYmxlX21zaXgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCWludCBiYXNlOworCXUxNiBtZXNzYWdlX2NvbnRyb2w7CisJdTMyIG1zaXhfdGFibGVfb2Zmc2V0OworCisJYmFzZSA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaW9jLT5wZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmICghYmFzZSkgeworCQlkZmFpbHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJtc2l4IG5vdCAiCisJCSAgICAic3VwcG9ydGVkXG4iLCBpb2MtPm5hbWUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZ2V0IG1zaXggdmVjdG9yIGNvdW50ICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoaW9jLT5wZGV2LCBiYXNlICsgMiwgJm1lc3NhZ2VfY29udHJvbCk7CisJaW9jLT5tc2l4X3ZlY3Rvcl9jb3VudCA9IChtZXNzYWdlX2NvbnRyb2wgJiAweDNGRikgKyAxOworCisJLyogZ2V0IG1zaXggdGFibGUgICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGlvYy0+cGRldiwgYmFzZSArIDQsICZtc2l4X3RhYmxlX29mZnNldCk7CisJbXNpeF90YWJsZV9vZmZzZXQgJj0gMHhGRkZGRkZGODsKKwlpb2MtPm1zaXhfdGFibGUgPSAodTMyICopKCh2b2lkICopaW9jLT5jaGlwICsgbXNpeF90YWJsZV9vZmZzZXQpOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAibXNpeCBpcyBzdXBwb3J0ZWQsICIKKwkgICAgInZlY3Rvcl9jb3VudCglZCksIHRhYmxlX29mZnNldCgweCUwOHgpLCB0YWJsZSglcClcbiIsIGlvYy0+bmFtZSwKKwkgICAgaW9jLT5tc2l4X3ZlY3Rvcl9jb3VudCwgbXNpeF90YWJsZV9vZmZzZXQsIGlvYy0+bXNpeF90YWJsZSkpOworCXJldHVybiAwOworfQorCisvKioKKyAqIF9iYXNlX2Rpc2FibGVfbXNpeCAtIGRpc2FibGVzIG1zaXgKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqLworc3RhdGljIHZvaWQKK19iYXNlX2Rpc2FibGVfbXNpeChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJaWYgKGlvYy0+bXNpeF9lbmFibGUpIHsKKwkJcGNpX2Rpc2FibGVfbXNpeChpb2MtPnBkZXYpOworCQlrZnJlZShpb2MtPm1zaXhfdGFibGVfYmFja3VwKTsKKwkJaW9jLT5tc2l4X3RhYmxlX2JhY2t1cCA9IE5VTEw7CisJCWlvYy0+bXNpeF9lbmFibGUgPSAwOworCX0KK30KKworLyoqCisgKiBfYmFzZV9lbmFibGVfbXNpeCAtIGVuYWJsZXMgbXNpeCwgZmFpbGJhY2sgdG8gaW9fYXBpYworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICovCitzdGF0aWMgaW50CitfYmFzZV9lbmFibGVfbXNpeChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IG1zaXhfZW50cnkgZW50cmllczsKKwlpbnQgcjsKKwl1OCB0cnlfbXNpeCA9IDA7CisKKwlpZiAobXNpeF9kaXNhYmxlID09IC0xIHx8IG1zaXhfZGlzYWJsZSA9PSAwKQorCQl0cnlfbXNpeCA9IDE7CisKKwlpZiAoIXRyeV9tc2l4KQorCQlnb3RvIHRyeV9pb2FwaWM7CisKKwlpZiAoX2Jhc2VfY2hlY2tfZW5hYmxlX21zaXgoaW9jKSAhPSAwKQorCQlnb3RvIHRyeV9pb2FwaWM7CisKKwlpb2MtPm1zaXhfdGFibGVfYmFja3VwID0ga2NhbGxvYyhpb2MtPm1zaXhfdmVjdG9yX2NvdW50LAorCSAgICBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPm1zaXhfdGFibGVfYmFja3VwKSB7CisJCWRmYWlscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImFsbG9jYXRpb24gZm9yICIKKwkJICAgICJtc2l4X3RhYmxlX2JhY2t1cCBmYWlsZWQhISFcbiIsIGlvYy0+bmFtZSkpOworCQlnb3RvIHRyeV9pb2FwaWM7CisJfQorCisJbWVtc2V0KCZlbnRyaWVzLCAwLCBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpKTsKKwlyID0gcGNpX2VuYWJsZV9tc2l4KGlvYy0+cGRldiwgJmVudHJpZXMsIDEpOworCWlmIChyKSB7CisJCWRmYWlscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBjaV9lbmFibGVfbXNpeCAiCisJCSAgICAiZmFpbGVkIChyPSVkKSAhISFcbiIsIGlvYy0+bmFtZSwgcikpOworCQlnb3RvIHRyeV9pb2FwaWM7CisJfQorCisJciA9IHJlcXVlc3RfaXJxKGVudHJpZXMudmVjdG9yLCBfYmFzZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCSAgICBpb2MtPm5hbWUsIGlvYyk7CisJaWYgKHIpIHsKKwkJZGZhaWxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAidW5hYmxlIHRvIGFsbG9jYXRlICIKKwkJICAgICJpbnRlcnJ1cHQgJWQgISEhXG4iLCBpb2MtPm5hbWUsIGVudHJpZXMudmVjdG9yKSk7CisJCXBjaV9kaXNhYmxlX21zaXgoaW9jLT5wZGV2KTsKKwkJZ290byB0cnlfaW9hcGljOworCX0KKworCWlvYy0+cGNpX2lycSA9IGVudHJpZXMudmVjdG9yOworCWlvYy0+bXNpeF9lbmFibGUgPSAxOworCXJldHVybiAwOworCisvKiBmYWlsYmFjayB0byBpb19hcGljIGludGVycnVwdCByb3V0aW5nICovCisgdHJ5X2lvYXBpYzoKKworCXIgPSByZXF1ZXN0X2lycShpb2MtPnBkZXYtPmlycSwgX2Jhc2VfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkgICAgaW9jLT5uYW1lLCBpb2MpOworCWlmIChyKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInVuYWJsZSB0byBhbGxvY2F0ZSBpbnRlcnJ1cHQgJWQhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBpb2MtPnBkZXYtPmlycSk7CisJCXIgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJaW9jLT5wY2lfaXJxID0gaW9jLT5wZGV2LT5pcnE7CisJcmV0dXJuIDA7CisKKyBvdXRfZmFpbDoKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfbWFwX3Jlc291cmNlcyAtIG1hcCBpbiBjb250cm9sbGVyIHJlc291cmNlcyAoaW8vaXJxL21lbWFwKQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2Jhc2VfbWFwX3Jlc291cmNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBpb2MtPnBkZXY7CisJdTMyIG1lbWFwX3N6OworCXUzMiBwaW9fc3o7CisJaW50IGksIHIgPSAwOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLAorCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisKKwlpb2MtPmJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pOworCWlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHsKKwkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgInBjaV9lbmFibGVfZGV2aWNlX21lbTogIgorCQkgICAgImZhaWxlZFxuIiwgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisKKwlpZiAocGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMsCisJICAgIE1QVDJTQVNfRFJJVkVSX05BTUUpKSB7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zOiAiCisJCSAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWlmIChfYmFzZV9jb25maWdfZG1hX2FkZHJlc3NpbmcoaW9jLCBwZGV2KSAhPSAwKSB7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJubyBzdWl0YWJsZSBETUEgbWFzayBmb3IgJXNcbiIsCisJCSAgICBpb2MtPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKKwkJciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJZm9yIChpID0gMCwgbWVtYXBfc3ogPSAwLCBwaW9fc3ogPSAwIDsgaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaSsrKSB7CisJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7CisJCQlpZiAocGlvX3N6KQorCQkJCWNvbnRpbnVlOworCQkJaW9jLT5waW9fY2hpcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCXBpb19zeiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSk7CisJCX0gZWxzZSB7CisJCQlpZiAobWVtYXBfc3opCisJCQkJY29udGludWU7CisJCQlpb2MtPmNoaXBfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCW1lbWFwX3N6ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKKwkJCWlvYy0+Y2hpcCA9IGlvcmVtYXAoaW9jLT5jaGlwX3BoeXMsIG1lbWFwX3N6KTsKKwkJCWlmIChpb2MtPmNoaXAgPT0gTlVMTCkgeworCQkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInVuYWJsZSB0byBtYXAgYWRhcHRlciAiCisJCQkJICAgICJtZW1vcnkhXG4iLCBpb2MtPm5hbWUpOworCQkJCXIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X2ZhaWw7CisJCQl9CisJCX0KKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaW9jLT5zaG9zdCk7CisJX2Jhc2VfbWFza19pbnRlcnJ1cHRzKGlvYyk7CisJciA9IF9iYXNlX2VuYWJsZV9tc2l4KGlvYyk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2ZhaWw7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IElSUSAlZFxuIiwKKwkgICAgaW9jLT5uYW1lLCAgKChpb2MtPm1zaXhfZW5hYmxlKSA/ICJQQ0ktTVNJLVggZW5hYmxlZCIgOgorCSAgICAiSU8tQVBJQyBlbmFibGVkIiksIGlvYy0+cGNpX2lycSk7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvbWVtKDB4JWx4KSwgbWFwcGVkKDB4JXApLCBzaXplKCVkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCBpb2MtPmNoaXBfcGh5cywgaW9jLT5jaGlwLCBtZW1hcF9zeik7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvcG9ydCgweCVseCksIHNpemUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsIGlvYy0+cGlvX2NoaXAsIHBpb19zeik7CisKKwlyZXR1cm4gMDsKKworIG91dF9mYWlsOgorCWlmIChpb2MtPmNoaXBfcGh5cykKKwkJaW91bm1hcChpb2MtPmNoaXApOworCWlvYy0+Y2hpcF9waHlzID0gMDsKKwlpb2MtPnBjaV9pcnEgPSAtMTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGlvYy0+cGRldiwgaW9jLT5iYXJzKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYSAtIG9idGFpbiByZXF1ZXN0IG1mIHBvaW50ZXIgcGh5cyBhZGRyCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4KHNtaWQgemVybyBpcyBpbnZhbGlkKQorICoKKyAqIFJldHVybnMgcGh5cyBwb2ludGVyIHRvIG1lc3NhZ2UgZnJhbWUuCisgKi8KK2RtYV9hZGRyX3QKK21wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCXJldHVybiBpb2MtPnJlcXVlc3RfZG1hICsgKHNtaWQgKiBpb2MtPnJlcXVlc3Rfc3opOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lIC0gb2J0YWluIHJlcXVlc3QgbWYgcG9pbnRlcgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleChzbWlkIHplcm8gaXMgaW52YWxpZCkKKyAqCisgKiBSZXR1cm5zIHZpcnQgcG9pbnRlciB0byBtZXNzYWdlIGZyYW1lLgorICovCit2b2lkICoKK21wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJcmV0dXJuICh2b2lkICopKGlvYy0+cmVxdWVzdCArIChzbWlkICogaW9jLT5yZXF1ZXN0X3N6KSk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIgLSBvYnRhaW4gYSBzZW5zZSBidWZmZXIgYXNzaWduZWQgdG8gYSBtZiByZXF1ZXN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJucyB2aXJ0IHBvaW50ZXIgdG8gc2Vuc2UgYnVmZmVyLgorICovCit2b2lkICoKK21wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJcmV0dXJuICh2b2lkICopKGlvYy0+c2Vuc2UgKyAoKHNtaWQgLSAxKSAqIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkpOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYSAtIG9idGFpbiBhIHNlbnNlIGJ1ZmZlciBhc3NpZ25lZCB0byBhIG1mIHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHBoeXMgcG9pbnRlciB0byBzZW5zZSBidWZmZXIuCisgKi8KK2RtYV9hZGRyX3QKK21wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCXJldHVybiBpb2MtPnNlbnNlX2RtYSArICgoc21pZCAtIDEpICogU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkciAtIG9idGFpbiByZXBseSBmcmFtZXMgdmlydCBhZGRyZXNzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBwaHlzX2FkZHI6IGxvd2VyIDMyIHBoeXNpY2FsIGFkZHIgb2YgdGhlIHJlcGx5CisgKgorICogQ29udmVydHMgMzJiaXQgbG93ZXIgcGh5c2ljYWwgYWRkciBpbnRvIGEgdmlydCBhZGRyZXNzLgorICovCit2b2lkICoKK21wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyIHBoeXNfYWRkcikKK3sKKwlpZiAoIXBoeXNfYWRkcikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGlvYy0+cmVwbHkgKyAocGh5c19hZGRyIC0gKHUzMilpb2MtPnJlcGx5X2RtYSk7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zbWlkIC0gb2J0YWluIGEgZnJlZSBzbWlkCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CisgKgorICogUmV0dXJucyBzbWlkICh6ZXJvIGlzIGludmFsaWQpCisgKi8KK3UxNgorbXB0MnNhc19iYXNlX2dldF9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJlcXVlc3RfdHJhY2tlciAqcmVxdWVzdDsKKwl1MTYgc21pZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5mcmVlX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogc21pZCBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+ZnJlZV9saXN0Lm5leHQsCisJICAgIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIsIHRyYWNrZXJfbGlzdCk7CisJcmVxdWVzdC0+Y2JfaWR4ID0gY2JfaWR4OworCXNtaWQgPSByZXF1ZXN0LT5zbWlkOworCWxpc3RfZGVsKCZyZXF1ZXN0LT50cmFja2VyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzbWlkOworfQorCisKKy8qKgorICogbXB0MnNhc19iYXNlX2ZyZWVfc21pZCAtIHB1dCBzbWlkIGJhY2sgb24gZnJlZV9saXN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9mcmVlX3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLmNiX2lkeCA9IDB4RkY7CisJbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0udHJhY2tlcl9saXN0LAorCSAgICAmaW9jLT5mcmVlX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTZWUgX3dhaXRfZm9yX2NvbW1hbmRzX3RvX2NvbXBsZXRlKCkgY2FsbCB3aXRoIHJlZ2FyZHMgdG8gdGhpcyBjb2RlLgorCSAqLworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5ICYmIGlvYy0+cGVuZGluZ19pb19jb3VudCkgeworCQlpZiAoaW9jLT5wZW5kaW5nX2lvX2NvdW50ID09IDEpCisJCQl3YWtlX3VwKCZpb2MtPnJlc2V0X3dxKTsKKwkJaW9jLT5wZW5kaW5nX2lvX2NvdW50LS07CisJfQorfQorCisvKioKKyAqIF9iYXNlX3dyaXRlcSAtIDY0IGJpdCB3cml0ZSB0byBNTUlPCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBiOiBkYXRhIHBheWxvYWQKKyAqIEBhZGRyOiBhZGRyZXNzIGluIE1NSU8gc3BhY2UKKyAqIEB3cml0ZXFfbG9jazogc3BpbiBsb2NrCisgKgorICogR2x1ZSBmb3IgaGFuZGxpbmcgYW4gYXRvbWljIDY0IGJpdCB3b3JkIHRvIE1NSU8uIFRoaXMgc3BlY2lhbCBoYW5kbGluZyB0YWtlcworICogY2FyZSBvZiAzMiBiaXQgZW52aXJvbm1lbnQgd2hlcmUgaXRzIG5vdCBxdWFyZW50ZWVkIHRvIHNlbmQgdGhlIGVudGlyZSB3b3JkCisgKiBpbiBvbmUgdHJhbnNmZXIuCisgKi8KKyNpZm5kZWYgd3JpdGVxCitzdGF0aWMgaW5saW5lIHZvaWQgX2Jhc2Vfd3JpdGVxKF9fdTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKyAgICBzcGlubG9ja190ICp3cml0ZXFfbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTY0IGRhdGFfb3V0ID0gY3B1X3RvX2xlNjQoYik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSh3cml0ZXFfbG9jaywgZmxhZ3MpOworCXdyaXRlbCgodTMyKShkYXRhX291dCksIGFkZHIpOworCXdyaXRlbCgodTMyKShkYXRhX291dCA+PiAzMiksIChhZGRyICsgNCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUod3JpdGVxX2xvY2ssIGZsYWdzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX2Jhc2Vfd3JpdGVxKF9fdTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKyAgICBzcGlubG9ja190ICp3cml0ZXFfbG9jaykKK3sKKwl3cml0ZXEoY3B1X3RvX2xlNjQoYiksIGFkZHIpOworfQorI2VuZGlmCisKKy8qKgorICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8gLSBzZW5kIFNDU0lfSU8gcmVxdWVzdCB0byBmaXJtd2FyZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkLAorICAgIHUxNiBoYW5kbGUpCit7CisJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOworCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKKworCisJZGVzY3JpcHRvci5TQ1NJSU8uUmVxdWVzdEZsYWdzID0gTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTzsKKwlkZXNjcmlwdG9yLlNDU0lJTy5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuU0NTSUlPLlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKKwlkZXNjcmlwdG9yLlNDU0lJTy5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOworCWRlc2NyaXB0b3IuU0NTSUlPLkxNSUQgPSAwOworCV9iYXNlX3dyaXRlcSgqcmVxdWVzdCwgJmlvYy0+Y2hpcC0+UmVxdWVzdERlc2NyaXB0b3JQb3N0TG93LAorCSAgICAmaW9jLT5zY3NpX2xvb2t1cF9sb2NrKTsKK30KKworCisvKioKKyAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eSAtIHNlbmQgVGFzayBNYW5hZ21lbnQgcmVxdWVzdCB0byBmaXJtd2FyZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAorICAgIHU4IHZmX2lkKQoreworCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKKwl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CisKKwlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5SZXF1ZXN0RmxhZ3MgPQorCSAgICBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZOworCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOworCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LkxNSUQgPSAwOworCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlJlc2VydmVkMSA9IDA7CisJX2Jhc2Vfd3JpdGVxKCpyZXF1ZXN0LCAmaW9jLT5jaGlwLT5SZXF1ZXN0RGVzY3JpcHRvclBvc3RMb3csCisJICAgICZpb2MtPnNjc2lfbG9va3VwX2xvY2spOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0IC0gRGVmYXVsdCwgcHJpbWFyaWx5IHVzZWQgZm9yIGNvbmZpZyBwYWdlcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkKQoreworCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKKwl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CisKKwlkZXNjcmlwdG9yLkRlZmF1bHQuUmVxdWVzdEZsYWdzID0gTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfREVGQVVMVF9UWVBFOworCWRlc2NyaXB0b3IuRGVmYXVsdC5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuRGVmYXVsdC5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CisJZGVzY3JpcHRvci5EZWZhdWx0LkxNSUQgPSAwOworCWRlc2NyaXB0b3IuRGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudCA9IDA7CisJX2Jhc2Vfd3JpdGVxKCpyZXF1ZXN0LCAmaW9jLT5jaGlwLT5SZXF1ZXN0RGVzY3JpcHRvclBvc3RMb3csCisJICAgICZpb2MtPnNjc2lfbG9va3VwX2xvY2spOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0IC0gc2VuZCBUYXJnZXQgQXNzaXN0L1N0YXR1cyB0byBmaXJtd2FyZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAaW9faW5kZXg6IHZhbHVlIHVzZWQgdG8gdHJhY2sgdGhlIElPCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggdmZfaWQsIHUxNiBpb19pbmRleCkKK3sKKwlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CisJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOworCisJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlJlcXVlc3RGbGFncyA9CisJICAgIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfVEFSR0VUOworCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CisJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LkxNSUQgPSAwOworCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5Jb0luZGV4ID0gY3B1X3RvX2xlMTYoaW9faW5kZXgpOworCV9iYXNlX3dyaXRlcSgqcmVxdWVzdCwgJmlvYy0+Y2hpcC0+UmVxdWVzdERlc2NyaXB0b3JQb3N0TG93LAorCSAgICAmaW9jLT5zY3NpX2xvb2t1cF9sb2NrKTsKK30KKworLyoqCisgKiBfYmFzZV9kaXNwbGF5X2lvY19jYXBhYmlsaXRpZXMgLSBEaXNwbHkgSU9DJ3MgY2FwYWJpbGl0aWVzLgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV9kaXNwbGF5X2lvY19jYXBhYmlsaXRpZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCWludCBpID0gMDsKKwljaGFyIGRlc2NbMTZdOworCXU4IHJldmlzaW9uOworCXUzMiBpb3VuaXRfcGcxX2ZsYWdzOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoaW9jLT5wZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbik7CisJc3RybmNweShkZXNjLCBpb2MtPm1hbnVfcGcwLkNoaXBOYW1lLCAxNik7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBGV1ZlcnNpb24oJTAyZC4lMDJkLiUwMmQuJTAyZCksICIKKwkgICAiQ2hpcFJldmlzaW9uKDB4JTAyeCksIEJpb3NWZXJzaW9uKCUwMmQuJTAyZC4lMDJkLiUwMmQpXG4iLAorCSAgICBpb2MtPm5hbWUsIGRlc2MsCisJICAgKGlvYy0+ZmFjdHMuRldWZXJzaW9uLldvcmQgJiAweEZGMDAwMDAwKSA+PiAyNCwKKwkgICAoaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4MDBGRjAwMDApID4+IDE2LAorCSAgIChpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkICYgMHgwMDAwRkYwMCkgPj4gOCwKKwkgICBpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkICYgMHgwMDAwMDBGRiwKKwkgICByZXZpc2lvbiwKKwkgICAoaW9jLT5iaW9zX3BnMy5CaW9zVmVyc2lvbiAmIDB4RkYwMDAwMDApID4+IDI0LAorCSAgIChpb2MtPmJpb3NfcGczLkJpb3NWZXJzaW9uICYgMHgwMEZGMDAwMCkgPj4gMTYsCisJICAgKGlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24gJiAweDAwMDBGRjAwKSA+PiA4LAorCSAgICBpb2MtPmJpb3NfcGczLkJpb3NWZXJzaW9uICYgMHgwMDAwMDBGRik7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiUHJvdG9jb2w9KCIsIGlvYy0+bmFtZSk7CisKKwlpZiAoaW9jLT5mYWN0cy5Qcm90b2NvbEZsYWdzICYgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TQ1NJX0lOSVRJQVRPUikgeworCQlwcmludGsoIkluaXRpYXRvciIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuUHJvdG9jb2xGbGFncyAmIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfU0NTSV9UQVJHRVQpIHsKKwkJcHJpbnRrKCIlc1RhcmdldCIsIGkgPyAiLCIgOiAiIik7CisJCWkrKzsKKwl9CisKKwlpID0gMDsKKwlwcmludGsoIiksICIpOworCXByaW50aygiQ2FwYWJpbGl0aWVzPSgiKTsKKworCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJICAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9JTlRFR1JBVEVEX1JBSUQpIHsKKwkJcHJpbnRrKCJSYWlkIik7CisJCWkrKzsKKwl9CisKKwlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJiBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSKSB7CisJCXByaW50aygiJXNUTFIiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01VTFRJQ0FTVCkgeworCQlwcmludGsoIiVzTXVsdGljYXN0IiwgaSA/ICIsIiA6ICIiKTsKKwkJaSsrOworCX0KKworCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJICAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9CSURJUkVDVElPTkFMX1RBUkdFVCkgeworCQlwcmludGsoIiVzQklESSBUYXJnZXQiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VFRFApIHsKKwkJcHJpbnRrKCIlc0VFRFAiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1NOQVBTSE9UX0JVRkZFUikgeworCQlwcmludGsoIiVzU25hcHNob3QgQnVmZmVyIiwgaSA/ICIsIiA6ICIiKTsKKwkJaSsrOworCX0KKworCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJICAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9ESUFHX1RSQUNFX0JVRkZFUikgeworCQlwcmludGsoIiVzRGlhZyBUcmFjZSBCdWZmZXIiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaWYgKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RBU0tfU0VUX0ZVTExfSEFORExJTkcpIHsKKwkJcHJpbnRrKCIlc1Rhc2sgU2V0IEZ1bGwiLCBpID8gIiwiIDogIiIpOworCQlpKys7CisJfQorCisJaW91bml0X3BnMV9mbGFncyA9IGxlMzJfdG9fY3B1KGlvYy0+aW91bml0X3BnMS5GbGFncyk7CisJaWYgKCEoaW91bml0X3BnMV9mbGFncyAmIE1QSTJfSU9VTklUUEFHRTFfTkFUSVZFX0NPTU1BTkRfUV9ESVNBQkxFKSkgeworCQlwcmludGsoIiVzTkNRIiwgaSA/ICIsIiA6ICIiKTsKKwkJaSsrOworCX0KKworCXByaW50aygiKVxuIik7Cit9CisKKy8qKgorICogX2Jhc2Vfc3RhdGljX2NvbmZpZ19wYWdlcyAtIHN0YXRpYyBzdGFydCBvZiBkYXkgY29uZmlnIHBhZ2VzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19iYXNlX3N0YXRpY19jb25maWdfcGFnZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MzIgaW91bml0X3BnMV9mbGFnczsKKworCW1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMChpb2MsICZtcGlfcmVwbHksICZpb2MtPm1hbnVfcGcwKTsKKwltcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzIoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5iaW9zX3BnMik7CisJbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGczKGlvYywgJm1waV9yZXBseSwgJmlvYy0+Ymlvc19wZzMpOworCW1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4KGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW9jX3BnOCk7CisJbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb3VuaXRfcGcwKTsKKwltcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksICZpb2MtPmlvdW5pdF9wZzEpOworCV9iYXNlX2Rpc3BsYXlfaW9jX2NhcGFiaWxpdGllcyhpb2MpOworCisJLyoKKwkgKiBFbmFibGUgdGFza19zZXRfZnVsbCBoYW5kbGluZyBpbiBpb3VuaXRfcGcxIHdoZW4gdGhlCisJICogZmFjdHMgY2FwYWJpbGl0aWVzIGluZGljYXRlIHRoYXQgaXRzIHN1cHBvcnRlZC4KKwkgKi8KKwlpb3VuaXRfcGcxX2ZsYWdzID0gbGUzMl90b19jcHUoaW9jLT5pb3VuaXRfcGcxLkZsYWdzKTsKKwlpZiAoKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RBU0tfU0VUX0ZVTExfSEFORExJTkcpKQorCQlpb3VuaXRfcGcxX2ZsYWdzICY9CisJCSAgICB+TVBJMl9JT1VOSVRQQUdFMV9ESVNBQkxFX1RBU0tfU0VUX0ZVTExfSEFORExJTkc7CisJZWxzZQorCQlpb3VuaXRfcGcxX2ZsYWdzIHw9CisJCSAgICBNUEkyX0lPVU5JVFBBR0UxX0RJU0FCTEVfVEFTS19TRVRfRlVMTF9IQU5ETElORzsKKwlpb2MtPmlvdW5pdF9wZzEuRmxhZ3MgPSBjcHVfdG9fbGUzMihpb3VuaXRfcGcxX2ZsYWdzKTsKKwltcHQyc2FzX2NvbmZpZ19zZXRfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksIGlvYy0+aW91bml0X3BnMSk7Cit9CisKKy8qKgorICogX2Jhc2VfcmVsZWFzZV9tZW1vcnlfcG9vbHMgLSByZWxlYXNlIG1lbW9yeQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZyb20gX2Jhc2VfYWxsb2NhdGVfbWVtb3J5X3Bvb2xzLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfcmVsZWFzZV9tZW1vcnlfcG9vbHMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJaWYgKGlvYy0+cmVxdWVzdCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgaW9jLT5yZXF1ZXN0X2RtYV9zeiwKKwkJICAgIGlvYy0+cmVxdWVzdCwgIGlvYy0+cmVxdWVzdF9kbWEpOworCQlkZXhpdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXF1ZXN0X3Bvb2woMHglcCkiCisJCSAgICAiOiBmcmVlXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdCkpOworCQlpb2MtPnJlcXVlc3QgPSBOVUxMOworCX0KKworCWlmIChpb2MtPnNlbnNlKSB7CisJCXBjaV9wb29sX2ZyZWUoaW9jLT5zZW5zZV9kbWFfcG9vbCwgaW9jLT5zZW5zZSwgaW9jLT5zZW5zZV9kbWEpOworCQlpZiAoaW9jLT5zZW5zZV9kbWFfcG9vbCkKKwkJCXBjaV9wb29sX2Rlc3Ryb3koaW9jLT5zZW5zZV9kbWFfcG9vbCk7CisJCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbnNlX3Bvb2woMHglcCkiCisJCSAgICAiOiBmcmVlXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2Vuc2UpKTsKKwkJaW9jLT5zZW5zZSA9IE5VTEw7CisJfQorCisJaWYgKGlvYy0+cmVwbHkpIHsKKwkJcGNpX3Bvb2xfZnJlZShpb2MtPnJlcGx5X2RtYV9wb29sLCBpb2MtPnJlcGx5LCBpb2MtPnJlcGx5X2RtYSk7CisJCWlmIChpb2MtPnJlcGx5X2RtYV9wb29sKQorCQkJcGNpX3Bvb2xfZGVzdHJveShpb2MtPnJlcGx5X2RtYV9wb29sKTsKKwkJZGV4aXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVwbHlfcG9vbCgweCVwKSIKKwkJICAgICAiOiBmcmVlXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVwbHkpKTsKKwkJaW9jLT5yZXBseSA9IE5VTEw7CisJfQorCisJaWYgKGlvYy0+cmVwbHlfZnJlZSkgeworCQlwY2lfcG9vbF9mcmVlKGlvYy0+cmVwbHlfZnJlZV9kbWFfcG9vbCwgaW9jLT5yZXBseV9mcmVlLAorCQkgICAgaW9jLT5yZXBseV9mcmVlX2RtYSk7CisJCWlmIChpb2MtPnJlcGx5X2ZyZWVfZG1hX3Bvb2wpCisJCQlwY2lfcG9vbF9kZXN0cm95KGlvYy0+cmVwbHlfZnJlZV9kbWFfcG9vbCk7CisJCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcGx5X2ZyZWVfcG9vbCIKKwkJICAgICIoMHglcCk6IGZyZWVcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXBseV9mcmVlKSk7CisJCWlvYy0+cmVwbHlfZnJlZSA9IE5VTEw7CisJfQorCisJaWYgKGlvYy0+cmVwbHlfcG9zdF9mcmVlKSB7CisJCXBjaV9wb29sX2ZyZWUoaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2wsCisJCSAgICBpb2MtPnJlcGx5X3Bvc3RfZnJlZSwgaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hKTsKKwkJaWYgKGlvYy0+cmVwbHlfcG9zdF9mcmVlX2RtYV9wb29sKQorCQkJcGNpX3Bvb2xfZGVzdHJveShpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbCk7CisJCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkJICAgICJyZXBseV9wb3N0X2ZyZWVfcG9vbCgweCVwKTogZnJlZVxuIiwgaW9jLT5uYW1lLAorCQkgICAgaW9jLT5yZXBseV9wb3N0X2ZyZWUpKTsKKwkJaW9jLT5yZXBseV9wb3N0X2ZyZWUgPSBOVUxMOworCX0KKworCWlmIChpb2MtPmNvbmZpZ19wYWdlKSB7CisJCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkJICAgICJjb25maWdfcGFnZSgweCVwKTogZnJlZVxuIiwgaW9jLT5uYW1lLAorCQkgICAgaW9jLT5jb25maWdfcGFnZSkpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgaW9jLT5jb25maWdfcGFnZV9zeiwKKwkJICAgIGlvYy0+Y29uZmlnX3BhZ2UsIGlvYy0+Y29uZmlnX3BhZ2VfZG1hKTsKKwl9CisKKwlrZnJlZShpb2MtPnNjc2lfbG9va3VwKTsKK30KKworCisvKioKKyAqIF9iYXNlX2FsbG9jYXRlX21lbW9yeV9wb29scyAtIGFsbG9jYXRlIHN0YXJ0IG9mIGRheSBtZW1vcnkgcG9vbHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIGVycm9yCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX2FsbG9jYXRlX21lbW9yeV9wb29scyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsICBpbnQgc2xlZXBfZmxhZykKK3sKKwlNcGkySU9DRmFjdHNSZXBseV90ICpmYWN0czsKKwl1MzIgcXVldWVfc2l6ZSwgcXVldWVfZGlmZjsKKwl1MTYgbWF4X3NnZV9lbGVtZW50czsKKwl1MTYgbnVtX29mX3JlcGx5X2ZyYW1lczsKKwl1MTYgY2hhaW5zX25lZWRlZF9wZXJfaW87CisJdTMyIHN6LCB0b3RhbF9zejsKKwl1MTYgaTsKKwl1MzIgcmV0cnlfc3o7CisJdTE2IG1heF9yZXF1ZXN0X2NyZWRpdDsKKworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJcmV0cnlfc3ogPSAwOworCWZhY3RzID0gJmlvYy0+ZmFjdHM7CisKKwkvKiBjb21tYW5kIGxpbmUgdHVuYWJsZXMgIGZvciBtYXggc2dsIGVudHJpZXMgKi8KKwlpZiAobWF4X3NnbF9lbnRyaWVzICE9IC0xKSB7CisJCWlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSA9IChtYXhfc2dsX2VudHJpZXMgPAorCQkgICAgTVBUMlNBU19TR19ERVBUSCkgPyBtYXhfc2dsX2VudHJpZXMgOgorCQkgICAgTVBUMlNBU19TR19ERVBUSDsKKwl9IGVsc2UgeworCQlpb2MtPnNob3N0LT5zZ190YWJsZXNpemUgPSBNUFQyU0FTX1NHX0RFUFRIOworCX0KKworCS8qIGNvbW1hbmQgbGluZSB0dW5hYmxlcyAgZm9yIG1heCBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICovCisJaWYgKG1heF9xdWV1ZV9kZXB0aCAhPSAtMSkgeworCQltYXhfcmVxdWVzdF9jcmVkaXQgPSAobWF4X3F1ZXVlX2RlcHRoIDwgZmFjdHMtPlJlcXVlc3RDcmVkaXQpCisJCSAgICA/IG1heF9xdWV1ZV9kZXB0aCA6IGZhY3RzLT5SZXF1ZXN0Q3JlZGl0OworCX0gZWxzZSB7CisJCW1heF9yZXF1ZXN0X2NyZWRpdCA9IChmYWN0cy0+UmVxdWVzdENyZWRpdCA+CisJCSAgICBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFKSA/IE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUgOgorCQkgICAgZmFjdHMtPlJlcXVlc3RDcmVkaXQ7CisJfQorCWlvYy0+cmVxdWVzdF9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdDsKKworCS8qIHJlcXVlc3QgZnJhbWUgc2l6ZSAqLworCWlvYy0+cmVxdWVzdF9zeiA9IGZhY3RzLT5JT0NSZXF1ZXN0RnJhbWVTaXplICogNDsKKworCS8qIHJlcGx5IGZyYW1lIHNpemUgKi8KKwlpb2MtPnJlcGx5X3N6ID0gZmFjdHMtPlJlcGx5RnJhbWVTaXplICogNDsKKworIHJldHJ5X2FsbG9jYXRpb246CisJdG90YWxfc3ogPSAwOworCS8qIGNhbGN1bGF0ZSBudW1iZXIgb2Ygc2cgZWxlbWVudHMgbGVmdCBvdmVyIGluIHRoZSAxc3QgZnJhbWUgKi8KKwltYXhfc2dlX2VsZW1lbnRzID0gaW9jLT5yZXF1ZXN0X3N6IC0gKChzaXplb2YoTXBpMlNDU0lJT1JlcXVlc3RfdCkgLQorCSAgICBzaXplb2YoTXBpMlNHRUlPVW5pb25fdCkpICsgaW9jLT5zZ2Vfc2l6ZSk7CisJaW9jLT5tYXhfc2dlc19pbl9tYWluX21lc3NhZ2UgPSBtYXhfc2dlX2VsZW1lbnRzL2lvYy0+c2dlX3NpemU7CisKKwkvKiBub3cgZG8gdGhlIHNhbWUgZm9yIGEgY2hhaW4gYnVmZmVyICovCisJbWF4X3NnZV9lbGVtZW50cyA9IGlvYy0+cmVxdWVzdF9zeiAtIGlvYy0+c2dlX3NpemU7CisJaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlID0gbWF4X3NnZV9lbGVtZW50cy9pb2MtPnNnZV9zaXplOworCisJaW9jLT5jaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZSA9CisJICAgICgoc2l6ZW9mKE1waTJTQ1NJSU9SZXF1ZXN0X3QpIC0gc2l6ZW9mKE1waTJTR0VJT1VuaW9uX3QpKSArCisJICAgICAoaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlICogaW9jLT5zZ2Vfc2l6ZSkpIC8gNDsKKworCS8qCisJICogIE1QVDJTQVNfU0dfREVQVEggPSBDT05GSUdfRlVTSU9OX01BWF9TR0UKKwkgKi8KKwljaGFpbnNfbmVlZGVkX3Blcl9pbyA9ICgoaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplIC0KKwkgICBpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZSkvaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlKQorCSAgICArIDE7CisJaWYgKGNoYWluc19uZWVkZWRfcGVyX2lvID4gZmFjdHMtPk1heENoYWluRGVwdGgpIHsKKwkJY2hhaW5zX25lZWRlZF9wZXJfaW8gPSBmYWN0cy0+TWF4Q2hhaW5EZXB0aDsKKwkJaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplID0gbWluX3QodTE2LAorCQlpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZSArIChpb2MtPm1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2UKKwkJKiBjaGFpbnNfbmVlZGVkX3Blcl9pbyksIGlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSk7CisJfQorCWlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gPSBjaGFpbnNfbmVlZGVkX3Blcl9pbzsKKworCS8qIHJlcGx5IGZyZWUgcXVldWUgc2l6aW5nIC0gdGFraW5nIGludG8gYWNjb3VudCBmb3IgZXZlbnRzICovCisJbnVtX29mX3JlcGx5X2ZyYW1lcyA9IGlvYy0+cmVxdWVzdF9kZXB0aCArIDMyOworCisJLyogbnVtYmVyIG9mIHJlcGxpZXMgZnJhbWVzIGNhbid0IGJlIGEgbXVsdGlwbGUgb2YgMTYgKi8KKwkvKiBkZWNyZWFzZSBudW1iZXIgb2YgcmVwbHkgZnJhbWVzIGJ5IDEgKi8KKwlpZiAoIShudW1fb2ZfcmVwbHlfZnJhbWVzICUgMTYpKQorCQludW1fb2ZfcmVwbHlfZnJhbWVzLS07CisKKwkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIHJlcGx5IGZyZWUgcXVldWUgZW50cmllcworCSAqICAobXVzdCBiZSBtdWx0aXBsZSBvZiAxNikKKwkgKi8KKworCS8qICh3ZSBrbm93IHJlcGx5X2ZyZWVfcXVldWVfZGVwdGggaXMgbm90IGEgbXVsdGlwbGUgb2YgMTYpICovCisJcXVldWVfc2l6ZSA9IG51bV9vZl9yZXBseV9mcmFtZXM7CisJcXVldWVfc2l6ZSArPSAxNiAtIChxdWV1ZV9zaXplICUgMTYpOworCWlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCA9IHF1ZXVlX3NpemU7CisKKwkvKiByZXBseSBkZXNjcmlwdG9yIHBvc3QgcXVldWUgc2l6aW5nICovCisJLyogdGhpcyBzaXplIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHJlcXVlc3QgZnJhbWVzICsgbnVtYmVyIG9mIHJlcGx5CisJICogZnJhbWVzCisJICovCisKKwlxdWV1ZV9zaXplID0gaW9jLT5yZXF1ZXN0X2RlcHRoICsgbnVtX29mX3JlcGx5X2ZyYW1lcyArIDE7CisJLyogcm91bmQgdXAgdG8gMTYgYnl0ZSBib3VuZGFyeSAqLworCWlmIChxdWV1ZV9zaXplICUgMTYpCisJCXF1ZXVlX3NpemUgKz0gMTYgLSAocXVldWVfc2l6ZSAlIDE2KTsKKworCS8qIGNoZWNrIGFnYWluc3QgSU9DIG1heGltdW0gcmVwbHkgcG9zdCBxdWV1ZSBkZXB0aCAqLworCWlmIChxdWV1ZV9zaXplID4gZmFjdHMtPk1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoKSB7CisJCXF1ZXVlX2RpZmYgPSBxdWV1ZV9zaXplIC0KKwkJICAgIGZhY3RzLT5NYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aDsKKworCQkvKiByb3VuZCBxdWV1ZV9kaWZmIHVwIHRvIG11bHRpcGxlIG9mIDE2ICovCisJCWlmIChxdWV1ZV9kaWZmICUgMTYpCisJCQlxdWV1ZV9kaWZmICs9IDE2IC0gKHF1ZXVlX2RpZmYgJSAxNik7CisKKwkJLyogYWRqdXN0IHJlcXVlc3RfZGVwdGgsIHJlcGx5X2ZyZWVfcXVldWVfZGVwdGgsCisJCSAqIGFuZCBxdWV1ZV9zaXplCisJCSAqLworCQlpb2MtPnJlcXVlc3RfZGVwdGggLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7CisJCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKKwl9CisJaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoID0gcXVldWVfc2l6ZTsKKworCS8qIG1heCBzY3NpIGhvc3QgcXVldWUgZGVwdGggKi8KKwlpb2MtPnNob3N0LT5jYW5fcXVldWUgPSBpb2MtPnJlcXVlc3RfZGVwdGggLSBJTlRFUk5BTF9DTURTX0NPVU5UOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2kgaG9zdCBxdWV1ZTogZGVwdGgiCisJICAgICIoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2hvc3QtPmNhbl9xdWV1ZSkpOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NhdHRlciBnYXRoZXI6ICIKKwkgICAgInNnZV9pbl9tYWluX21zZyglZCksIHNnZV9wZXJfY2hhaW4oJWQpLCBzZ2VfcGVyX2lvKCVkKSwgIgorCSAgICAiY2hhaW5zX3Blcl9pbyglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5tYXhfc2dlc19pbl9tYWluX21lc3NhZ2UsCisJICAgIGlvYy0+bWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZSwgaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplLAorCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvKSk7CisKKwkvKiBjb250aWd1b3VzIHBvb2wgZm9yIHJlcXVlc3QgYW5kIGNoYWlucywgMTYgYnl0ZSBhbGlnbiwgb25lIGV4dHJhICIKKwkgKiAiZnJhbWUgZm9yIHNtaWQ9MAorCSAqLworCWlvYy0+Y2hhaW5fZGVwdGggPSBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvICogaW9jLT5yZXF1ZXN0X2RlcHRoOworCXN6ID0gKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxICsgaW9jLT5jaGFpbl9kZXB0aCkgKiBpb2MtPnJlcXVlc3Rfc3opOworCisJaW9jLT5yZXF1ZXN0X2RtYV9zeiA9IHN6OworCWlvYy0+cmVxdWVzdCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgc3osICZpb2MtPnJlcXVlc3RfZG1hKTsKKwlpZiAoIWlvYy0+cmVxdWVzdCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXF1ZXN0IHBvb2w6IHBjaV9hbGxvY19jb25zaXN0ZW50ICIKKwkJICAgICJmYWlsZWQ6IHJlcV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKKwkJICAgICJ0b3RhbCglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCQkgICAgaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbywgaW9jLT5yZXF1ZXN0X3N6LCBzei8xMDI0KTsKKwkJaWYgKGlvYy0+cmVxdWVzdF9kZXB0aCA8IE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIKQorCQkJZ290byBvdXQ7CisJCXJldHJ5X3N6ICs9IDY0OworCQlpb2MtPnJlcXVlc3RfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQgLSByZXRyeV9zejsKKwkJZ290byByZXRyeV9hbGxvY2F0aW9uOworCX0KKworCWlmIChyZXRyeV9zeikKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVxdWVzdCBwb29sOiBwY2lfYWxsb2NfY29uc2lzdGVudCAiCisJCSAgICAic3VjY2VlZDogcmVxX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgorCQkgICAgInRvdGFsKCVkIGtiKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvLCBpb2MtPnJlcXVlc3Rfc3osIHN6LzEwMjQpOworCisJaW9jLT5jaGFpbiA9IGlvYy0+cmVxdWVzdCArICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCWlvYy0+Y2hhaW5fZG1hID0gaW9jLT5yZXF1ZXN0X2RtYSArICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcXVlc3QgcG9vbCgweCVwKTogIgorCSAgICAiZGVwdGgoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLAorCSAgICBpb2MtPnJlcXVlc3QsIGlvYy0+cmVxdWVzdF9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LAorCSAgICAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEpICogaW9jLT5yZXF1ZXN0X3N6KS8xMDI0KSk7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY2hhaW4gcG9vbCgweCVwKTogZGVwdGgiCisJICAgICIoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmNoYWluLAorCSAgICBpb2MtPmNoYWluX2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osICgoaW9jLT5jaGFpbl9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeikpLzEwMjQpKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXF1ZXN0IHBvb2w6IGRtYSgweCVsbHgpXG4iLAorCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIGlvYy0+cmVxdWVzdF9kbWEpKTsKKwl0b3RhbF9zeiArPSBzejsKKworCWlvYy0+c2NzaV9sb29rdXAgPSBrY2FsbG9jKGlvYy0+cmVxdWVzdF9kZXB0aCwKKwkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+c2NzaV9sb29rdXApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAic2NzaV9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJIC8qIGluaXRpYWxpemUgc29tZSBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKQorCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNtaWQgPSBpICsgMTsKKworCS8qIHNlbnNlIGJ1ZmZlcnMsIDQgYnl0ZSBhbGlnbiAqLworCXN6ID0gaW9jLT5yZXF1ZXN0X2RlcHRoICogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCWlvYy0+c2Vuc2VfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInNlbnNlIHBvb2wiLCBpb2MtPnBkZXYsIHN6LCA0LAorCSAgICAwKTsKKwlpZiAoIWlvYy0+c2Vuc2VfZG1hX3Bvb2wpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAic2Vuc2UgcG9vbDogcGNpX3Bvb2xfY3JlYXRlIGZhaWxlZFxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPnNlbnNlID0gcGNpX3Bvb2xfYWxsb2MoaW9jLT5zZW5zZV9kbWFfcG9vbCAsIEdGUF9LRVJORUwsCisJICAgICZpb2MtPnNlbnNlX2RtYSk7CisJaWYgKCFpb2MtPnNlbnNlKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInNlbnNlIHBvb2w6IHBjaV9wb29sX2FsbG9jIGZhaWxlZFxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCisJICAgICJzZW5zZSBwb29sKDB4JXApOiBkZXB0aCglZCksIGVsZW1lbnRfc2l6ZSglZCksIHBvb2xfc2l6ZSIKKwkgICAgIiglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5zZW5zZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCSAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIHN6LzEwMjQpKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzZW5zZV9kbWEoMHglbGx4KVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+c2Vuc2VfZG1hKSk7CisJdG90YWxfc3ogKz0gc3o7CisKKwkvKiByZXBseSBwb29sLCA0IGJ5dGUgYWxpZ24gKi8KKwlzeiA9IGlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAqIGlvYy0+cmVwbHlfc3o7CisJaW9jLT5yZXBseV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgicmVwbHkgcG9vbCIsIGlvYy0+cGRldiwgc3osIDQsCisJICAgIDApOworCWlmICghaW9jLT5yZXBseV9kbWFfcG9vbCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXBseSBwb29sOiBwY2lfcG9vbF9jcmVhdGUgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+cmVwbHkgPSBwY2lfcG9vbF9hbGxvYyhpb2MtPnJlcGx5X2RtYV9wb29sICwgR0ZQX0tFUk5FTCwKKwkgICAgJmlvYy0+cmVwbHlfZG1hKTsKKwlpZiAoIWlvYy0+cmVwbHkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVwbHkgcG9vbDogcGNpX3Bvb2xfYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcGx5IHBvb2woMHglcCk6IGRlcHRoIgorCSAgICAiKCVkKSwgZnJhbWVfc2l6ZSglZCksIHBvb2xfc2l6ZSglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXBseSwKKwkgICAgaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoLCBpb2MtPnJlcGx5X3N6LCBzei8xMDI0KSk7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVwbHlfZG1hKDB4JWxseClcbiIsCisJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb2MtPnJlcGx5X2RtYSkpOworCXRvdGFsX3N6ICs9IHN6OworCisJLyogcmVwbHkgZnJlZSBxdWV1ZSwgMTYgYnl0ZSBhbGlnbiAqLworCXN6ID0gaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoICogNDsKKwlpb2MtPnJlcGx5X2ZyZWVfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInJlcGx5X2ZyZWUgcG9vbCIsCisJICAgIGlvYy0+cGRldiwgc3osIDE2LCAwKTsKKwlpZiAoIWlvYy0+cmVwbHlfZnJlZV9kbWFfcG9vbCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXBseV9mcmVlIHBvb2w6IHBjaV9wb29sX2NyZWF0ZSAiCisJCSAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5yZXBseV9mcmVlID0gcGNpX3Bvb2xfYWxsb2MoaW9jLT5yZXBseV9mcmVlX2RtYV9wb29sICwgR0ZQX0tFUk5FTCwKKwkgICAgJmlvYy0+cmVwbHlfZnJlZV9kbWEpOworCWlmICghaW9jLT5yZXBseV9mcmVlKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcGx5X2ZyZWUgcG9vbDogcGNpX3Bvb2xfYWxsb2MgIgorCQkgICAgImZhaWxlZFxuIiwgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldChpb2MtPnJlcGx5X2ZyZWUsIDAsIHN6KTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXBseV9mcmVlIHBvb2woMHglcCk6ICIKKwkgICAgImRlcHRoKCVkKSwgZWxlbWVudF9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLAorCSAgICBpb2MtPnJlcGx5X2ZyZWUsIGlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwgNCwgc3ovMTAyNCkpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcGx5X2ZyZWVfZG1hIgorCSAgICAiKDB4JWxseClcbiIsIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb2MtPnJlcGx5X2ZyZWVfZG1hKSk7CisJdG90YWxfc3ogKz0gc3o7CisKKwkvKiByZXBseSBwb3N0IHF1ZXVlLCAxNiBieXRlIGFsaWduICovCisJc3ogPSBpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggKiBzaXplb2YoTXBpMkRlZmF1bHRSZXBseURlc2NyaXB0b3JfdCk7CisJaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInJlcGx5X3Bvc3RfZnJlZSBwb29sIiwKKwkgICAgaW9jLT5wZGV2LCBzeiwgMTYsIDApOworCWlmICghaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2wpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVwbHlfcG9zdF9mcmVlIHBvb2w6IHBjaV9wb29sX2NyZWF0ZSAiCisJCSAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5yZXBseV9wb3N0X2ZyZWUgPSBwY2lfcG9vbF9hbGxvYyhpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbCAsCisJICAgIEdGUF9LRVJORUwsICZpb2MtPnJlcGx5X3Bvc3RfZnJlZV9kbWEpOworCWlmICghaW9jLT5yZXBseV9wb3N0X2ZyZWUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVwbHlfcG9zdF9mcmVlIHBvb2w6IHBjaV9wb29sX2FsbG9jICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwltZW1zZXQoaW9jLT5yZXBseV9wb3N0X2ZyZWUsIDAsIHN6KTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXBseSBwb3N0IGZyZWUgcG9vbCIKKwkgICAgIigweCVwKTogZGVwdGgoJWQpLCBlbGVtZW50X3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLAorCSAgICBpb2MtPm5hbWUsIGlvYy0+cmVwbHlfcG9zdF9mcmVlLCBpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGgsIDgsCisJICAgIHN6LzEwMjQpKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXBseV9wb3N0X2ZyZWVfZG1hID0gIgorCSAgICAiKDB4JWxseClcbiIsIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkgICAgaW9jLT5yZXBseV9wb3N0X2ZyZWVfZG1hKSk7CisJdG90YWxfc3ogKz0gc3o7CisKKwlpb2MtPmNvbmZpZ19wYWdlX3N6ID0gNTEyOworCWlvYy0+Y29uZmlnX3BhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBkZXYsCisJICAgIGlvYy0+Y29uZmlnX3BhZ2Vfc3osICZpb2MtPmNvbmZpZ19wYWdlX2RtYSk7CisJaWYgKCFpb2MtPmNvbmZpZ19wYWdlKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImNvbmZpZyBwYWdlOiBwY2lfcG9vbF9hbGxvYyAiCisJCSAgICAiZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY29uZmlnIHBhZ2UoMHglcCk6IHNpemUiCisJICAgICIoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+Y29uZmlnX3BhZ2UsIGlvYy0+Y29uZmlnX3BhZ2Vfc3opKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjb25maWdfcGFnZV9kbWEiCisJICAgICIoMHglbGx4KVxuIiwgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+Y29uZmlnX3BhZ2VfZG1hKSk7CisJdG90YWxfc3ogKz0gaW9jLT5jb25maWdfcGFnZV9zejsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJBbGxvY2F0ZWQgcGh5c2ljYWwgbWVtb3J5OiBzaXplKCVkIGtCKVxuIiwKKwkgICAgaW9jLT5uYW1lLCB0b3RhbF9zei8xMDI0KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiQ3VycmVudCBDb250cm9sbGVyIFF1ZXVlIERlcHRoKCVkKSwgIgorCSAgICAiTWF4IENvbnRyb2xsZXIgUXVldWUgRGVwdGgoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsIGlvYy0+c2hvc3QtPmNhbl9xdWV1ZSwgZmFjdHMtPlJlcXVlc3RDcmVkaXQpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJTY2F0dGVyIEdhdGhlciBFbGVtZW50cyBwZXIgSU8oJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsIGlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSk7CisJcmV0dXJuIDA7CisKKyBvdXQ6CisJX2Jhc2VfcmVsZWFzZV9tZW1vcnlfcG9vbHMoaW9jKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUgLSBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBNUFQgYWRhcHRlci4KKyAqIEBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCisgKiBAY29va2VkOiBSZXF1ZXN0IHJhdyBvciBjb29rZWQgSU9DIHN0YXRlCisgKgorICogUmV0dXJucyBhbGwgSU9DIERvb3JiZWxsIHJlZ2lzdGVyIGJpdHMgaWYgY29va2VkPT0wLCBlbHNlIGp1c3QgdGhlCisgKiBEb29yYmVsbCBiaXRzIGluIE1QSV9JT0NfU1RBVEVfTUFTSy4KKyAqLwordTMyCittcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IGNvb2tlZCkKK3sKKwl1MzIgcywgc2M7CisKKwlzID0gcmVhZGwoJmlvYy0+Y2hpcC0+RG9vcmJlbGwpOworCXNjID0gcyAmIE1QSTJfSU9DX1NUQVRFX01BU0s7CisJcmV0dXJuIGNvb2tlZCA/IHNjIDogczsKK30KKworLyoqCisgKiBfYmFzZV93YWl0X29uX2lvY3N0YXRlIC0gd2FpdGluZyBvbiBhIHBhcnRpY3VsYXIgaW9jIHN0YXRlCisgKiBAaW9jX3N0YXRlOiBjb250cm9sbGVyIHN0YXRlIHsgUkVBRFksIE9QRVJBVElPTkFMLCBvciBSRVNFVCB9CisgKiBAdGltZW91dDogdGltZW91dCBpbiBzZWNvbmQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV93YWl0X29uX2lvY3N0YXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyIGlvY19zdGF0ZSwgaW50IHRpbWVvdXQsCisgICAgaW50IHNsZWVwX2ZsYWcpCit7CisJdTMyIGNvdW50LCBjbnRkbjsKKwl1MzIgY3VycmVudF9zdGF0ZTsKKworCWNvdW50ID0gMDsKKwljbnRkbiA9IChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkgPyAxMDAwKnRpbWVvdXQgOiAyMDAwKnRpbWVvdXQ7CisJZG8geworCQljdXJyZW50X3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCQlpZiAoY3VycmVudF9zdGF0ZSA9PSBpb2Nfc3RhdGUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGNvdW50ICYmIGN1cnJlbnRfc3RhdGUgPT0gTVBJMl9JT0NfU1RBVEVfRkFVTFQpCisJCQlicmVhazsKKwkJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEpOworCQllbHNlCisJCQl1ZGVsYXkoNTAwKTsKKwkJY291bnQrKzsKKwl9IHdoaWxlICgtLWNudGRuKTsKKworCXJldHVybiBjdXJyZW50X3N0YXRlOworfQorCisvKioKKyAqIF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludCAtIHdhaXRpbmcgZm9yIGNvbnRyb2xsZXIgaW50ZXJydXB0KGdlbmVyYXRlZCBieQorICogYSB3cml0ZSB0byB0aGUgZG9vcmJlbGwpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKgorICogTm90ZXM6IE1QSTJfSElTX0lPQzJTWVNfREJfU1RBVFVTIC0gc2V0IHRvIG9uZSB3aGVuIElPQyB3cml0ZXMgdG8gZG9vcmJlbGwuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCB0aW1lb3V0LAorICAgIGludCBzbGVlcF9mbGFnKQoreworCXUzMiBjbnRkbiwgY291bnQ7CisJdTMyIGludF9zdGF0dXM7CisKKwljb3VudCA9IDA7CisJY250ZG4gPSAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApID8gMTAwMCp0aW1lb3V0IDogMjAwMCp0aW1lb3V0OworCWRvIHsKKwkJaW50X3N0YXR1cyA9IHJlYWRsKCZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCQlpZiAoaW50X3N0YXR1cyAmIE1QSTJfSElTX0lPQzJTWVNfREJfU1RBVFVTKSB7CisJCQlkaHNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICBfX2Z1bmNfXywgY291bnQsIHRpbWVvdXQpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKKwkJCW1zbGVlcCgxKTsKKwkJZWxzZQorCQkJdWRlbGF5KDUwMCk7CisJCWNvdW50Kys7CisJfSB3aGlsZSAoLS1jbnRkbik7CisKKwlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGR1ZSB0byB0aW1lb3V0IGNvdW50KCVkKSwgIgorCSAgICAiaW50X3N0YXR1cygleCkhXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBjb3VudCwgaW50X3N0YXR1cyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qKgorICogX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfYWNrIC0gd2FpdGluZyBmb3IgY29udHJvbGxlciB0byByZWFkIHRoZSBkb29yYmVsbC4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqCisgKiBOb3RlczogTVBJMl9ISVNfU1lTMklPQ19EQl9TVEFUVVMgLSBzZXQgdG8gb25lIHdoZW4gaG9zdCB3cml0ZXMgdG8KKyAqIGRvb3JiZWxsLgorICovCitzdGF0aWMgaW50CitfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9hY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgdGltZW91dCwKKyAgICBpbnQgc2xlZXBfZmxhZykKK3sKKwl1MzIgY250ZG4sIGNvdW50OworCXUzMiBpbnRfc3RhdHVzOworCXUzMiBkb29yYmVsbDsKKworCWNvdW50ID0gMDsKKwljbnRkbiA9IChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkgPyAxMDAwKnRpbWVvdXQgOiAyMDAwKnRpbWVvdXQ7CisJZG8geworCQlpbnRfc3RhdHVzID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisJCWlmICghKGludF9zdGF0dXMgJiBNUEkyX0hJU19TWVMySU9DX0RCX1NUQVRVUykpIHsKKwkJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJCSAgICAic3VjY2Vzc2Z1bGwgY291bnQoJWQpLCB0aW1lb3V0KCVkKVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIF9fZnVuY19fLCBjb3VudCwgdGltZW91dCkpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoaW50X3N0YXR1cyAmIE1QSTJfSElTX0lPQzJTWVNfREJfU1RBVFVTKSB7CisJCQlkb29yYmVsbCA9IHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKKwkJCWlmICgoZG9vcmJlbGwgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSA9PQorCQkJICAgIE1QSTJfSU9DX1NUQVRFX0ZBVUxUKSB7CisJCQkJbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8oaW9jICwgZG9vcmJlbGwpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgaWYgKGludF9zdGF0dXMgPT0gMHhGRkZGRkZGRikKKwkJCWdvdG8gb3V0OworCisJCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKKwkJCW1zbGVlcCgxKTsKKwkJZWxzZQorCQkJdWRlbGF5KDUwMCk7CisJCWNvdW50Kys7CisJfSB3aGlsZSAoLS1jbnRkbik7CisKKyBvdXQ6CisJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBkdWUgdG8gdGltZW91dCBjb3VudCglZCksICIKKwkgICAgImludF9zdGF0dXMoJXgpIVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgY291bnQsIGludF9zdGF0dXMpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKioKKyAqIF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX25vdF91c2VkIC0gd2FpdGluZyBmb3IgZG9vcmJlbGwgdG8gbm90IGJlIGluIHVzZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAdGltZW91dDogdGltZW91dCBpbiBzZWNvbmQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludAorX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfbm90X3VzZWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgdGltZW91dCwKKyAgICBpbnQgc2xlZXBfZmxhZykKK3sKKwl1MzIgY250ZG4sIGNvdW50OworCXUzMiBkb29yYmVsbF9yZWc7CisKKwljb3VudCA9IDA7CisJY250ZG4gPSAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApID8gMTAwMCp0aW1lb3V0IDogMjAwMCp0aW1lb3V0OworCWRvIHsKKwkJZG9vcmJlbGxfcmVnID0gcmVhZGwoJmlvYy0+Y2hpcC0+RG9vcmJlbGwpOworCQlpZiAoIShkb29yYmVsbF9yZWcgJiBNUEkyX0RPT1JCRUxMX1VTRUQpKSB7CisJCQlkaHNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICBfX2Z1bmNfXywgY291bnQsIHRpbWVvdXQpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKKwkJCW1zbGVlcCgxKTsKKwkJZWxzZQorCQkJdWRlbGF5KDUwMCk7CisJCWNvdW50Kys7CisJfSB3aGlsZSAoLS1jbnRkbik7CisKKwlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGR1ZSB0byB0aW1lb3V0IGNvdW50KCVkKSwgIgorCSAgICAiZG9vcmJlbGxfcmVnKCV4KSFcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGNvdW50LCBkb29yYmVsbF9yZWcpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKioKKyAqIF9iYXNlX3NlbmRfaW9jX3Jlc2V0IC0gc2VuZCBkb29yYmVsbCByZXNldAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcmVzZXRfdHlwZTogY3VycmVudGx5IG9ubHkgc3VwcG9ydHM6IE1QSTJfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVAorICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2Vfc2VuZF9pb2NfcmVzZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCByZXNldF90eXBlLCBpbnQgdGltZW91dCwKKyAgICBpbnQgc2xlZXBfZmxhZykKK3sKKwl1MzIgaW9jX3N0YXRlOworCWludCByID0gMDsKKworCWlmIChyZXNldF90eXBlICE9IE1QSTJfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdW5rbm93biByZXNldF90eXBlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKKwkgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2VuZGluZyBtZXNzYWdlIHVuaXQgcmVzZXQgISFcbiIsIGlvYy0+bmFtZSk7CisKKwl3cml0ZWwocmVzZXRfdHlwZSA8PCBNUEkyX0RPT1JCRUxMX0ZVTkNUSU9OX1NISUZULAorCSAgICAmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CisJaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9hY2soaW9jLCAxNSwgc2xlZXBfZmxhZykpKSB7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJaW9jX3N0YXRlID0gX2Jhc2Vfd2FpdF9vbl9pb2NzdGF0ZShpb2MsIE1QSTJfSU9DX1NUQVRFX1JFQURZLAorCSAgICB0aW1lb3V0LCBzbGVlcF9mbGFnKTsKKwlpZiAoaW9jX3N0YXRlKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZ29pbmcgdG8gcmVhZHkgc3RhdGUgIgorCQkgICAgIiAoaW9jX3N0YXRlPTB4JXgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBpb2Nfc3RhdGUpOworCQlyID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorIG91dDoKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAibWVzc2FnZSB1bml0IHJlc2V0OiAlc1xuIiwKKwkgICAgaW9jLT5uYW1lLCAoKHIgPT0gMCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIikpOworCXJldHVybiByOworfQorCisvKioKKyAqIF9iYXNlX2hhbmRzaGFrZV9yZXFfcmVwbHlfd2FpdCAtIHNlbmQgcmVxdWVzdCB0aHJ1IGRvb3JiZWxsIGludGVyZmFjZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcmVxdWVzdF9ieXRlczogcmVxdWVzdCBsZW5ndGgKKyAqIEByZXF1ZXN0OiBwb2ludGVyIGhhdmluZyByZXF1ZXN0IHBheWxvYWQKKyAqIEByZXBseV9ieXRlczogcmVwbHkgbGVuZ3RoCisgKiBAcmVwbHk6IHBvaW50ZXIgdG8gcmVwbHkgcGF5bG9hZAorICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2VfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlcXVlc3RfYnl0ZXMsCisgICAgdTMyICpyZXF1ZXN0LCBpbnQgcmVwbHlfYnl0ZXMsIHUxNiAqcmVwbHksIGludCB0aW1lb3V0LCBpbnQgc2xlZXBfZmxhZykKK3sKKwlNUEkyRGVmYXVsdFJlcGx5X3QgKmRlZmF1bHRfcmVwbHkgPSAoTVBJMkRlZmF1bHRSZXBseV90ICopcmVwbHk7CisJaW50IGk7CisJdTggZmFpbGVkOworCXUxNiBkdW1teTsKKwl1MzIgKm1mcDsKKworCS8qIG1ha2Ugc3VyZSBkb29yYmVsbCBpcyBub3QgaW4gdXNlICovCisJaWYgKChyZWFkbCgmaW9jLT5jaGlwLT5Eb29yYmVsbCkgJiBNUEkyX0RPT1JCRUxMX1VTRUQpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRvb3JiZWxsIGlzIGluIHVzZSAiCisJCSAgICAiIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIGNsZWFyIHBlbmRpbmcgZG9vcmJlbGwgaW50ZXJydXB0cyBmcm9tIHByZXZpb3VzIHN0YXRlIGNoYW5nZXMgKi8KKwlpZiAocmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cykgJgorCSAgICBNUEkyX0hJU19JT0MyU1lTX0RCX1NUQVRVUykKKwkJd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCisJLyogc2VuZCBtZXNzYWdlIHRvIGlvYyAqLworCXdyaXRlbCgoKE1QSTJfRlVOQ1RJT05fSEFORFNIQUtFPDxNUEkyX0RPT1JCRUxMX0ZVTkNUSU9OX1NISUZUKSB8CisJICAgICgocmVxdWVzdF9ieXRlcy80KTw8TVBJMl9ET09SQkVMTF9BRERfRFdPUkRTX1NISUZUKSksCisJICAgICZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKKworCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KGlvYywgNSwgc2xlZXBfZmxhZykpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRvb3JiZWxsIGhhbmRzaGFrZSAiCisJCSAgICJpbnQgZmFpbGVkIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisKKwlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2Fjayhpb2MsIDUsIHNsZWVwX2ZsYWcpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJkb29yYmVsbCBoYW5kc2hha2UgIgorCQkgICAgImFjayBmYWlsZWQgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogc2VuZCBtZXNzYWdlIDMyLWJpdHMgYXQgYSB0aW1lICovCisJZm9yIChpID0gMCwgZmFpbGVkID0gMDsgaSA8IHJlcXVlc3RfYnl0ZXMvNCAmJiAhZmFpbGVkOyBpKyspIHsKKwkJd3JpdGVsKGNwdV90b19sZTMyKHJlcXVlc3RbaV0pLCAmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CisJCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfYWNrKGlvYywgNSwgc2xlZXBfZmxhZykpKQorCQkJZmFpbGVkID0gMTsKKwl9CisKKwlpZiAoZmFpbGVkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRvb3JiZWxsIGhhbmRzaGFrZSAiCisJCSAgICAic2VuZGluZyByZXF1ZXN0IGZhaWxlZCAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwgX19MSU5FX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBub3cgd2FpdCBmb3IgdGhlIHJlcGx5ICovCisJaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCB0aW1lb3V0LCBzbGVlcF9mbGFnKSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaGFuZHNoYWtlICIKKwkJICAgImludCBmYWlsZWQgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogcmVhZCB0aGUgZmlyc3QgdHdvIDE2LWJpdHMsIGl0IGdpdmVzIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHJlcGx5ICovCisJcmVwbHlbMF0gPSBsZTE2X3RvX2NwdShyZWFkbCgmaW9jLT5jaGlwLT5Eb29yYmVsbCkKKwkgICAgJiBNUEkyX0RPT1JCRUxMX0RBVEFfTUFTSyk7CisJd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KGlvYywgNSwgc2xlZXBfZmxhZykpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRvb3JiZWxsIGhhbmRzaGFrZSAiCisJCSAgICJpbnQgZmFpbGVkIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXBseVsxXSA9IGxlMTZfdG9fY3B1KHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKQorCSAgICAmIE1QSTJfRE9PUkJFTExfREFUQV9NQVNLKTsKKwl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CisKKwlmb3IgKGkgPSAyOyBpIDwgZGVmYXVsdF9yZXBseS0+TXNnTGVuZ3RoICogMjsgaSsrKSAgeworCQlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIDUsIHNsZWVwX2ZsYWcpKSkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgIgorCQkJICAgICJoYW5kc2hha2UgaW50IGZhaWxlZCAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICBfX0xJTkVfXyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoaSA+PSAgcmVwbHlfYnl0ZXMvMikgLyogb3ZlcmZsb3cgY2FzZSAqLworCQkJZHVtbXkgPSByZWFkbCgmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CisJCWVsc2UKKwkJCXJlcGx5W2ldID0gbGUxNl90b19jcHUocmVhZGwoJmlvYy0+Y2hpcC0+RG9vcmJlbGwpCisJCQkgICAgJiBNUEkyX0RPT1JCRUxMX0RBVEFfTUFTSyk7CisJCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKKwl9CisKKwlfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCA1LCBzbGVlcF9mbGFnKTsKKwlpZiAoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfbm90X3VzZWQoaW9jLCA1LCBzbGVlcF9mbGFnKSAhPSAwKSB7CisJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkb29yYmVsbCBpcyBpbiB1c2UgIgorCQkgICAgIiAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwgX19MSU5FX18pKTsKKwl9CisJd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOworCisJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19JTklUKSB7CisJCW1mcCA9ICh1MzIgKilyZXBseTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0b2Zmc2V0OmRhdGFcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgcmVwbHlfYnl0ZXMvNDsgaSsrKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIlx0WzB4JTAyeF06JTA4eFxuIiwgaSo0LAorCQkJICAgIGxlMzJfdG9fY3B1KG1mcFtpXSkpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2Vfc2FzX2lvdW5pdF9jb250cm9sIC0gc2VuZCBzYXMgaW91bml0IGNvbnRyb2wgdG8gRlcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogdGhlIHJlcGx5IHBheWxvYWQgZnJvbSBGVworICogQG1waV9yZXF1ZXN0OiB0aGUgcmVxdWVzdCBwYXlsb2FkIHNlbnQgdG8gRlcKKyAqCisgKiBUaGUgU0FTIElPIFVuaXQgQ29udHJvbCBSZXF1ZXN0IG1lc3NhZ2UgYWxsb3dzIHRoZSBob3N0IHRvIHBlcmZvcm0gbG93LWxldmVsCisgKiBvcGVyYXRpb25zLCBzdWNoIGFzIHJlc2V0cyBvbiB0aGUgUEhZcyBvZiB0aGUgSU8gVW5pdCwgYWxzbyBhbGxvd3MgdGhlIGhvc3QKKyAqIHRvIG9idGFpbiB0aGUgSU9DIGFzc2lnbmVkIGRldmljZSBoYW5kbGVzIGZvciBhIGRldmljZSBpZiBpdCBoYXMgb3RoZXIKKyAqIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UsIGluIGFkZGl0aW9uIGFsbG93cyB0aGUgaG9zdCB0bworICogcmVtb3ZlIElPQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2Jhc2Vfc2FzX2lvdW5pdF9jb250cm9sKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QgKm1waV9yZXBseSwKKyAgICBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCAqbXBpX3JlcXVlc3QpCit7CisJdTE2IHNtaWQ7CisJdTMyIGlvY19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXU4IGlzc3VlX3Jlc2V0OworCWludCByYzsKKwl2b2lkICpyZXF1ZXN0OworCXUxNiB3YWl0X3N0YXRlX2NvdW50OworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwltdXRleF9sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CisKKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBiYXNlX2NtZCBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwl3YWl0X3N0YXRlX2NvdW50ID0gMDsKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJd2hpbGUgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgeworCQlpZiAod2FpdF9zdGF0ZV9jb3VudCsrID09IDEwKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlyYyA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzc2xlZXAoMSk7CisJCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB3YWl0aW5nIGZvciAiCisJCSAgICAib3BlcmF0aW9uYWwgc3RhdGUoY291bnQ9JWQpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgd2FpdF9zdGF0ZV9jb3VudCk7CisJfQorCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+YmFzZV9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IDA7CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwlyZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKKwltZW1jcHkocmVxdWVzdCwgbXBpX3JlcXVlc3QsIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkpOworCWlmIChtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUIHx8CisJICAgIG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQpCisJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKKwkgICAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOworCWlmICgobXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVCB8fAorCSAgICBtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9MSU5LX1JFU0VUKSAmJgorCSAgICBpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzKQorCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzID0gMDsKKwlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpLzQpOworCQlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlpc3N1ZV9yZXNldCA9IDE7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKQorCQltZW1jcHkobXBpX3JlcGx5LCBpb2MtPmJhc2VfY21kcy5yZXBseSwKKwkJICAgIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QpKTsKKwllbHNlCisJCW1lbXNldChtcGlfcmVwbHksIDAsIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QpKTsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlnb3RvIG91dDsKKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJcmMgPSAtRUZBVUxUOworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKworLyoqCisgKiBtcHQyc2FzX2Jhc2Vfc2NzaV9lbmNsb3N1cmVfcHJvY2Vzc29yIC0gc2VuZGluZyByZXF1ZXN0IHRvIHNlcCBkZXZpY2UKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogdGhlIHJlcGx5IHBheWxvYWQgZnJvbSBGVworICogQG1waV9yZXF1ZXN0OiB0aGUgcmVxdWVzdCBwYXlsb2FkIHNlbnQgdG8gRlcKKyAqCisgKiBUaGUgU0NTSSBFbmNsb3N1cmUgUHJvY2Vzc29yIHJlcXVlc3QgbWVzc2FnZSBjYXVzZXMgdGhlIElPQyB0bworICogY29tbXVuaWNhdGUgd2l0aCBTRVMgZGV2aWNlcyB0byBjb250cm9sIExFRCBzdGF0dXMgc2lnbmFscy4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfYmFzZV9zY3NpX2VuY2xvc3VyZV9wcm9jZXNzb3Ioc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJTZXBSZXBseV90ICptcGlfcmVwbHksIE1waTJTZXBSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0KQoreworCXUxNiBzbWlkOworCXUzMiBpb2Nfc3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwl1OCBpc3N1ZV9yZXNldDsKKwlpbnQgcmM7CisJdm9pZCAqcmVxdWVzdDsKKwl1MTYgd2FpdF9zdGF0ZV9jb3VudDsKKworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJbXV0ZXhfbG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOworCisJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYmFzZV9jbWQgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJd2FpdF9zdGF0ZV9jb3VudCA9IDA7CisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCXdoaWxlIChpb2Nfc3RhdGUgIT0gTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJaWYgKHdhaXRfc3RhdGVfY291bnQrKyA9PSAxMCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICIlczogZmFpbGVkIGR1ZSB0byBpb2Mgbm90IG9wZXJhdGlvbmFsXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3NsZWVwKDEpOworCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogd2FpdGluZyBmb3IgIgorCQkgICAgIm9wZXJhdGlvbmFsIHN0YXRlKGNvdW50PSVkKVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIHdhaXRfc3RhdGVfY291bnQpOworCX0KKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmJhc2VfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOworCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CisJbWVtY3B5KHJlcXVlc3QsIG1waV9yZXF1ZXN0LCBzaXplb2YoTXBpMlNlcFJlcGx5X3QpKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsCisJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKKwlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMlNlcFJlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpCisJCW1lbWNweShtcGlfcmVwbHksIGlvYy0+YmFzZV9jbWRzLnJlcGx5LAorCQkgICAgc2l6ZW9mKE1waTJTZXBSZXBseV90KSk7CisJZWxzZQorCQltZW1zZXQobXBpX3JlcGx5LCAwLCBzaXplb2YoTXBpMlNlcFJlcGx5X3QpKTsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlnb3RvIG91dDsKKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJcmMgPSAtRUZBVUxUOworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2Jhc2VfZ2V0X3BvcnRfZmFjdHMgLSBvYnRhaW4gcG9ydCBmYWN0cyByZXBseSBhbmQgc2F2ZSBpbiBpb2MKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX2dldF9wb3J0X2ZhY3RzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHBvcnQsIGludCBzbGVlcF9mbGFnKQoreworCU1waTJQb3J0RmFjdHNSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJTXBpMlBvcnRGYWN0c1JlcGx5X3QgbXBpX3JlcGx5LCAqcGZhY3RzOworCWludCBtcGlfcmVwbHlfc3osIG1waV9yZXF1ZXN0X3N6LCByOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwltcGlfcmVwbHlfc3ogPSBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpOworCW1waV9yZXF1ZXN0X3N6ID0gc2l6ZW9mKE1waTJQb3J0RmFjdHNSZXF1ZXN0X3QpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIG1waV9yZXF1ZXN0X3N6KTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUE9SVF9GQUNUUzsKKwltcGlfcmVxdWVzdC5Qb3J0TnVtYmVyID0gcG9ydDsKKwlyID0gX2Jhc2VfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywgbXBpX3JlcXVlc3Rfc3osCisJICAgICh1MzIgKikmbXBpX3JlcXVlc3QsIG1waV9yZXBseV9zeiwgKHUxNiAqKSZtcGlfcmVwbHksIDUsIENBTl9TTEVFUCk7CisKKwlpZiAociAhPSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBoYW5kc2hha2UgZmFpbGVkIChyPSVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlwZmFjdHMgPSAmaW9jLT5wZmFjdHNbcG9ydF07CisJbWVtc2V0KHBmYWN0cywgMCwgc2l6ZW9mKE1waTJQb3J0RmFjdHNSZXBseV90KSk7CisJcGZhY3RzLT5Qb3J0TnVtYmVyID0gbXBpX3JlcGx5LlBvcnROdW1iZXI7CisJcGZhY3RzLT5WUF9JRCA9IG1waV9yZXBseS5WUF9JRDsKKwlwZmFjdHMtPlZGX0lEID0gbXBpX3JlcGx5LlZGX0lEOworCXBmYWN0cy0+TWF4UG9zdGVkQ21kQnVmZmVycyA9CisJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5NYXhQb3N0ZWRDbWRCdWZmZXJzKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9iYXNlX2dldF9pb2NfZmFjdHMgLSBvYnRhaW4gaW9jIGZhY3RzIHJlcGx5IGFuZCBzYXZlIGluIGlvYworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2VfZ2V0X2lvY19mYWN0cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQoreworCU1waTJJT0NGYWN0c1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlNcGkySU9DRmFjdHNSZXBseV90IG1waV9yZXBseSwgKmZhY3RzOworCWludCBtcGlfcmVwbHlfc3osIG1waV9yZXF1ZXN0X3N6LCByOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwltcGlfcmVwbHlfc3ogPSBzaXplb2YoTXBpMklPQ0ZhY3RzUmVwbHlfdCk7CisJbXBpX3JlcXVlc3Rfc3ogPSBzaXplb2YoTXBpMklPQ0ZhY3RzUmVxdWVzdF90KTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBtcGlfcmVxdWVzdF9zeik7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0lPQ19GQUNUUzsKKwlyID0gX2Jhc2VfaGFuZHNoYWtlX3JlcV9yZXBseV93YWl0KGlvYywgbXBpX3JlcXVlc3Rfc3osCisJICAgICh1MzIgKikmbXBpX3JlcXVlc3QsIG1waV9yZXBseV9zeiwgKHUxNiAqKSZtcGlfcmVwbHksIDUsIENBTl9TTEVFUCk7CisKKwlpZiAociAhPSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBoYW5kc2hha2UgZmFpbGVkIChyPSVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlmYWN0cyA9ICZpb2MtPmZhY3RzOworCW1lbXNldChmYWN0cywgMCwgc2l6ZW9mKE1waTJJT0NGYWN0c1JlcGx5X3QpKTsKKwlmYWN0cy0+TXNnVmVyc2lvbiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5Nc2dWZXJzaW9uKTsKKwlmYWN0cy0+SGVhZGVyVmVyc2lvbiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5IZWFkZXJWZXJzaW9uKTsKKwlmYWN0cy0+VlBfSUQgPSBtcGlfcmVwbHkuVlBfSUQ7CisJZmFjdHMtPlZGX0lEID0gbXBpX3JlcGx5LlZGX0lEOworCWZhY3RzLT5JT0NFeGNlcHRpb25zID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ0V4Y2VwdGlvbnMpOworCWZhY3RzLT5NYXhDaGFpbkRlcHRoID0gbXBpX3JlcGx5Lk1heENoYWluRGVwdGg7CisJZmFjdHMtPldob0luaXQgPSBtcGlfcmVwbHkuV2hvSW5pdDsKKwlmYWN0cy0+TnVtYmVyT2ZQb3J0cyA9IG1waV9yZXBseS5OdW1iZXJPZlBvcnRzOworCWZhY3RzLT5SZXF1ZXN0Q3JlZGl0ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LlJlcXVlc3RDcmVkaXQpOworCWZhY3RzLT5NYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aCA9CisJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5NYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aCk7CisJZmFjdHMtPlByb2R1Y3RJRCA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5Qcm9kdWN0SUQpOworCWZhY3RzLT5JT0NDYXBhYmlsaXRpZXMgPSBsZTMyX3RvX2NwdShtcGlfcmVwbHkuSU9DQ2FwYWJpbGl0aWVzKTsKKwlpZiAoKGZhY3RzLT5JT0NDYXBhYmlsaXRpZXMgJiBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEKSkKKwkJaW9jLT5pcl9maXJtd2FyZSA9IDE7CisJZmFjdHMtPkZXVmVyc2lvbi5Xb3JkID0gbGUzMl90b19jcHUobXBpX3JlcGx5LkZXVmVyc2lvbi5Xb3JkKTsKKwlmYWN0cy0+SU9DUmVxdWVzdEZyYW1lU2l6ZSA9CisJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NSZXF1ZXN0RnJhbWVTaXplKTsKKwlmYWN0cy0+TWF4SW5pdGlhdG9ycyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5NYXhJbml0aWF0b3JzKTsKKwlmYWN0cy0+TWF4VGFyZ2V0cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5NYXhUYXJnZXRzKTsKKwlpb2MtPnNob3N0LT5tYXhfaWQgPSAtMTsKKwlmYWN0cy0+TWF4U2FzRXhwYW5kZXJzID0gbGUxNl90b19jcHUobXBpX3JlcGx5Lk1heFNhc0V4cGFuZGVycyk7CisJZmFjdHMtPk1heEVuY2xvc3VyZXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuTWF4RW5jbG9zdXJlcyk7CisJZmFjdHMtPlByb3RvY29sRmxhZ3MgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuUHJvdG9jb2xGbGFncyk7CisJZmFjdHMtPkhpZ2hQcmlvcml0eUNyZWRpdCA9CisJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5IaWdoUHJpb3JpdHlDcmVkaXQpOworCWZhY3RzLT5SZXBseUZyYW1lU2l6ZSA9IG1waV9yZXBseS5SZXBseUZyYW1lU2l6ZTsKKwlmYWN0cy0+TWF4RGV2SGFuZGxlID0gbGUxNl90b19jcHUobXBpX3JlcGx5Lk1heERldkhhbmRsZSk7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJoYmEgcXVldWUgZGVwdGgoJWQpLCAiCisJICAgICJtYXggY2hhaW5zIHBlciBpbyglZClcbiIsIGlvYy0+bmFtZSwgZmFjdHMtPlJlcXVlc3RDcmVkaXQsCisJICAgIGZhY3RzLT5NYXhDaGFpbkRlcHRoKSk7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVxdWVzdCBmcmFtZSBzaXplKCVkKSwgIgorCSAgICAicmVwbHkgZnJhbWUgc2l6ZSglZClcbiIsIGlvYy0+bmFtZSwKKwkgICAgZmFjdHMtPklPQ1JlcXVlc3RGcmFtZVNpemUgKiA0LCBmYWN0cy0+UmVwbHlGcmFtZVNpemUgKiA0KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2Jhc2Vfc2VuZF9pb2NfaW5pdCAtIHNlbmQgaW9jX2luaXQgdG8gZmlybXdhcmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2Vfc2VuZF9pb2NfaW5pdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK3sKKwlNcGkySU9DSW5pdFJlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlNcGkySU9DSW5pdFJlcGx5X3QgbXBpX3JlcGx5OworCWludCByOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fSU9DX0lOSVQ7CisJbXBpX3JlcXVlc3QuV2hvSW5pdCA9IE1QSTJfV0hPSU5JVF9IT1NUX0RSSVZFUjsKKwltcGlfcmVxdWVzdC5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0Lk1zZ1ZlcnNpb24gPSBjcHVfdG9fbGUxNihNUEkyX1ZFUlNJT04pOworCW1waV9yZXF1ZXN0LkhlYWRlclZlcnNpb24gPSBjcHVfdG9fbGUxNihNUEkyX0hFQURFUl9WRVJTSU9OKTsKKworCS8qIEluIE1QSSBSZXZpc2lvbiBJICgweEEpLCB0aGUgU3lzdGVtUmVwbHlGcmFtZVNpemUob2Zmc2V0IDB4MTgpIHdhcworCSAqIHJlbW92ZWQgYW5kIG1hZGUgcmVzZXJ2ZWQuICBGb3IgdGhvc2Ugd2l0aCBvbGRlciBmaXJtd2FyZSB3aWxsIG5lZWQKKwkgKiB0aGlzIGZpeC4gSXQgd2FzIGRlY2lkZWQgdGhhdCB0aGUgUmVwbHkgYW5kIFJlcXVlc3QgZnJhbWUgc2l6ZXMgYXJlCisJICogdGhlIHNhbWUuCisJICovCisJaWYgKChpb2MtPmZhY3RzLkhlYWRlclZlcnNpb24gPj4gOCkgPCAweEEpIHsKKwkJbXBpX3JlcXVlc3QuUmVzZXJ2ZWQ3ID0gY3B1X3RvX2xlMTYoaW9jLT5yZXBseV9zeik7CisvKgkJbXBpX3JlcXVlc3QuU3lzdGVtUmVwbHlGcmFtZVNpemUgPQorICoJCSBjcHVfdG9fbGUxNihpb2MtPnJlcGx5X3N6KTsKKyAqLworCX0KKworCW1waV9yZXF1ZXN0LlN5c3RlbVJlcXVlc3RGcmFtZVNpemUgPSBjcHVfdG9fbGUxNihpb2MtPnJlcXVlc3Rfc3ovNCk7CisJbXBpX3JlcXVlc3QuUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggPQorCSAgICBjcHVfdG9fbGUxNihpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGgpOworCW1waV9yZXF1ZXN0LlJlcGx5RnJlZVF1ZXVlRGVwdGggPQorCSAgICBjcHVfdG9fbGUxNihpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGgpOworCisjaWYgQklUU19QRVJfTE9ORyA+IDMyCisJbXBpX3JlcXVlc3QuU2Vuc2VCdWZmZXJBZGRyZXNzSGlnaCA9CisJICAgIGNwdV90b19sZTMyKGlvYy0+c2Vuc2VfZG1hID4+IDMyKTsKKwltcGlfcmVxdWVzdC5TeXN0ZW1SZXBseUFkZHJlc3NIaWdoID0KKwkgICAgY3B1X3RvX2xlMzIoaW9jLT5yZXBseV9kbWEgPj4gMzIpOworCW1waV9yZXF1ZXN0LlN5c3RlbVJlcXVlc3RGcmFtZUJhc2VBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlNjQoaW9jLT5yZXF1ZXN0X2RtYSk7CisJbXBpX3JlcXVlc3QuUmVwbHlGcmVlUXVldWVBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlNjQoaW9jLT5yZXBseV9mcmVlX2RtYSk7CisJbXBpX3JlcXVlc3QuUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlQWRkcmVzcyA9CisJICAgIGNwdV90b19sZTY0KGlvYy0+cmVwbHlfcG9zdF9mcmVlX2RtYSk7CisjZWxzZQorCW1waV9yZXF1ZXN0LlN5c3RlbVJlcXVlc3RGcmFtZUJhc2VBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlMzIoaW9jLT5yZXF1ZXN0X2RtYSk7CisJbXBpX3JlcXVlc3QuUmVwbHlGcmVlUXVldWVBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlMzIoaW9jLT5yZXBseV9mcmVlX2RtYSk7CisJbXBpX3JlcXVlc3QuUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlQWRkcmVzcyA9CisJICAgIGNwdV90b19sZTMyKGlvYy0+cmVwbHlfcG9zdF9mcmVlX2RtYSk7CisjZW5kaWYKKworCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfSU5JVCkgeworCQl1MzIgKm1mcDsKKwkJaW50IGk7CisKKwkJbWZwID0gKHUzMiAqKSZtcGlfcmVxdWVzdDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0b2Zmc2V0OmRhdGFcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KS80OyBpKyspCisJCQlwcmludGsoS0VSTl9ERUJVRyAiXHRbMHglMDJ4XTolMDh4XG4iLCBpKjQsCisJCQkgICAgbGUzMl90b19jcHUobWZwW2ldKSk7CisJfQorCisJciA9IF9iYXNlX2hhbmRzaGFrZV9yZXFfcmVwbHlfd2FpdChpb2MsCisJICAgIHNpemVvZihNcGkySU9DSW5pdFJlcXVlc3RfdCksICh1MzIgKikmbXBpX3JlcXVlc3QsCisJICAgIHNpemVvZihNcGkySU9DSW5pdFJlcGx5X3QpLCAodTE2ICopJm1waV9yZXBseSwgMTAsCisJICAgIHNsZWVwX2ZsYWcpOworCisJaWYgKHIgIT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaGFuZHNoYWtlIGZhaWxlZCAocj0lZClcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKG1waV9yZXBseS5JT0NTdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUyB8fAorCSAgICBtcGlfcmVwbHkuSU9DTG9nSW5mbykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJciA9IC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZSAtIHNlbmQgcG9ydF9lbmFibGUoZGlzY292ZXJ5IHN0dWZmKSB0byBmaXJtd2FyZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQoreworCU1waTJQb3J0RW5hYmxlUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJaW50IHIgPSAwOworCXUxNiBzbWlkOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbmRpbmcgcG9ydCBlbmFibGUgISFcbiIsIGlvYy0+bmFtZSk7CisKKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaW50ZXJuYWwgY29tbWFuZCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5iYXNlX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFCTEU7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7CisKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKKwkgICAgMzAwKkhaKTsKKwlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QpLzQpOworCQlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpCisJCQlyID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJciA9IC1FVElNRTsKKwkJZ290byBvdXQ7CisJfSBlbHNlCisJCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogY29tcGxldGVcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisKKwlpb2Nfc3RhdGUgPSBfYmFzZV93YWl0X29uX2lvY3N0YXRlKGlvYywgTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwsCisJICAgIDYwLCBzbGVlcF9mbGFnKTsKKwlpZiAoaW9jX3N0YXRlKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZ29pbmcgdG8gb3BlcmF0aW9uYWwgc3RhdGUgIgorCQkgICAgIiAoaW9jX3N0YXRlPTB4JXgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBpb2Nfc3RhdGUpOworCQlyID0gLUVGQVVMVDsKKwl9Cisgb3V0OgorCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwb3J0IGVuYWJsZTogJXNcbiIsCisJICAgIGlvYy0+bmFtZSwgKChyID09IDApID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpKTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBfYmFzZV91bm1hc2tfZXZlbnRzIC0gdHVybiBvbiBub3RpZmljYXRpb24gZm9yIHRoaXMgZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50OiBmaXJtd2FyZSBldmVudAorICoKKyAqIFRoZSBtYXNrIGlzIHN0b3JlZCBpbiBpb2MtPmV2ZW50X21hc2tzLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfdW5tYXNrX2V2ZW50cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBldmVudCkKK3sKKwl1MzIgZGVzaXJlZF9ldmVudDsKKworCWlmIChldmVudCA+PSAxMjgpCisJCXJldHVybjsKKworCWRlc2lyZWRfZXZlbnQgPSAoMSA8PCAoZXZlbnQgJSAzMikpOworCisJaWYgKGV2ZW50IDwgMzIpCisJCWlvYy0+ZXZlbnRfbWFza3NbMF0gJj0gfmRlc2lyZWRfZXZlbnQ7CisJZWxzZSBpZiAoZXZlbnQgPCA2NCkKKwkJaW9jLT5ldmVudF9tYXNrc1sxXSAmPSB+ZGVzaXJlZF9ldmVudDsKKwllbHNlIGlmIChldmVudCA8IDk2KQorCQlpb2MtPmV2ZW50X21hc2tzWzJdICY9IH5kZXNpcmVkX2V2ZW50OworCWVsc2UgaWYgKGV2ZW50IDwgMTI4KQorCQlpb2MtPmV2ZW50X21hc2tzWzNdICY9IH5kZXNpcmVkX2V2ZW50OworfQorCisvKioKKyAqIF9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbiAtIHNlbmQgZXZlbnQgbm90aWZpY2F0aW9uCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK3sKKwlNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdTE2IHNtaWQ7CisJaW50IHIgPSAwOworCWludCBpOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaW50ZXJuYWwgY29tbWFuZCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5iYXNlX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9FVkVOVF9OT1RJRklDQVRJT047CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7CisJZm9yIChpID0gMDsgaSA8IE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUzsgaSsrKQorCQltcGlfcmVxdWVzdC0+RXZlbnRNYXNrc1tpXSA9CisJCSAgICBsZTMyX3RvX2NwdShpb2MtPmV2ZW50X21hc2tzW2ldKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwgMzAqSFopOworCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QpLzQpOworCQlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpCisJCQlyID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJciA9IC1FVElNRTsKKwl9IGVsc2UKKwkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBjb21wbGV0ZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfdmFsaWRhdGVfZXZlbnRfdHlwZSAtIHZhbGlkYXRpbmcgZXZlbnQgdHlwZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50OiBmaXJtd2FyZSBldmVudAorICoKKyAqIFRoaXMgd2lsbCB0dXJuIG9uIGZpcm13YXJlIGV2ZW50IG5vdGlmaWNhdGlvbiB3aGVuIGFwcGxpY2F0aW9uCisgKiBhc2sgZm9yIHRoYXQgZXZlbnQuIFdlIGRvbid0IG1hc2sgZXZlbnRzIHRoYXQgYXJlIGFscmVhZHkgZW5hYmxlZC4KKyAqLwordm9pZAorbXB0MnNhc19iYXNlX3ZhbGlkYXRlX2V2ZW50X3R5cGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgKmV2ZW50X3R5cGUpCit7CisJaW50IGksIGo7CisJdTMyIGV2ZW50X21hc2ssIGRlc2lyZWRfZXZlbnQ7CisJdTggc2VuZF91cGRhdGVfdG9fZnc7CisKKwlmb3IgKGkgPSAwLCBzZW5kX3VwZGF0ZV90b19mdyA9IDA7IGkgPAorCSAgICBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7IGkrKykgeworCQlldmVudF9tYXNrID0gfmV2ZW50X3R5cGVbaV07CisJCWRlc2lyZWRfZXZlbnQgPSAxOworCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgeworCQkJaWYgKCEoZXZlbnRfbWFzayAmIGRlc2lyZWRfZXZlbnQpICYmCisJCQkgICAgKGlvYy0+ZXZlbnRfbWFza3NbaV0gJiBkZXNpcmVkX2V2ZW50KSkgeworCQkJCWlvYy0+ZXZlbnRfbWFza3NbaV0gJj0gfmRlc2lyZWRfZXZlbnQ7CisJCQkJc2VuZF91cGRhdGVfdG9fZncgPSAxOworCQkJfQorCQkJZGVzaXJlZF9ldmVudCA9IChkZXNpcmVkX2V2ZW50IDw8IDEpOworCQl9CisJfQorCisJaWYgKCFzZW5kX3VwZGF0ZV90b19mdykKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOworCV9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIDAsIENBTl9TTEVFUCk7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7Cit9CisKKy8qKgorICogX2Jhc2VfZGlhZ19yZXNldCAtIHRoZSAiYmlnIGhhbW1lciIgc3RhcnQgb2YgZGF5IHJlc2V0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9kaWFnX3Jlc2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCit7CisJdTMyIGhvc3RfZGlhZ25vc3RpYzsKKwl1MzIgaW9jX3N0YXRlOworCXUzMiBjb3VudDsKKwl1MzIgaGNiX3NpemU7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2VuZGluZyBkaWFnIHJlc2V0ICEhXG4iLCBpb2MtPm5hbWUpOworCisJX2Jhc2Vfc2F2ZV9tc2l4X3RhYmxlKGlvYyk7CisKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImNsZWFyIGludGVycnVwdHNcbiIsCisJICAgIGlvYy0+bmFtZSkpOworCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKKworCWNvdW50ID0gMDsKKwlkbyB7CisJCS8qIFdyaXRlIG1hZ2ljIHNlcXVlbmNlIHRvIFdyaXRlU2VxdWVuY2UgcmVnaXN0ZXIKKwkJICogTG9vcCB1bnRpbCBpbiBkaWFnbm9zdGljIG1vZGUKKwkJICovCisJCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAid3JpdGUgbWFnaWMgIgorCQkgICAgInNlcXVlbmNlXG4iLCBpb2MtPm5hbWUpKTsKKwkJd3JpdGVsKE1QSTJfV1JTRVFfRkxVU0hfS0VZX1ZBTFVFLCAmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlKTsKKwkJd3JpdGVsKE1QSTJfV1JTRVFfMVNUX0tFWV9WQUxVRSwgJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSk7CisJCXdyaXRlbChNUEkyX1dSU0VRXzJORF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOworCQl3cml0ZWwoTVBJMl9XUlNFUV8zUkRfS0VZX1ZBTFVFLCAmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlKTsKKwkJd3JpdGVsKE1QSTJfV1JTRVFfNFRIX0tFWV9WQUxVRSwgJmlvYy0+Y2hpcC0+V3JpdGVTZXF1ZW5jZSk7CisJCXdyaXRlbChNUEkyX1dSU0VRXzVUSF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOworCQl3cml0ZWwoTVBJMl9XUlNFUV82VEhfS0VZX1ZBTFVFLCAmaW9jLT5jaGlwLT5Xcml0ZVNlcXVlbmNlKTsKKworCQkvKiB3YWl0IDEwMCBtc2VjICovCisJCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKKwkJCW1zbGVlcCgxMDApOworCQllbHNlCisJCQltZGVsYXkoMTAwKTsKKworCQlpZiAoY291bnQrKyA+IDIwKQorCQkJZ290byBvdXQ7CisKKwkJaG9zdF9kaWFnbm9zdGljID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdERpYWdub3N0aWMpOworCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIndyb3RlIG1hZ2ljICIKKwkJICAgICJzZXF1ZW5jZTogY291bnQoJWQpLCBob3N0X2RpYWdub3N0aWMoMHglMDh4KVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgY291bnQsIGhvc3RfZGlhZ25vc3RpYykpOworCisJfSB3aGlsZSAoKGhvc3RfZGlhZ25vc3RpYyAmIE1QSTJfRElBR19ESUFHX1dSSVRFX0VOQUJMRSkgPT0gMCk7CisKKwloY2Jfc2l6ZSA9IHJlYWRsKCZpb2MtPmNoaXAtPkhDQlNpemUpOworCisJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJkaWFnIHJlc2V0OiBpc3N1ZWRcbiIsCisJICAgIGlvYy0+bmFtZSkpOworCXdyaXRlbChob3N0X2RpYWdub3N0aWMgfCBNUEkyX0RJQUdfUkVTRVRfQURBUFRFUiwKKwkgICAgICZpb2MtPmNoaXAtPkhvc3REaWFnbm9zdGljKTsKKworCS8qIGRvbid0IGFjY2VzcyBhbnkgcmVnaXN0ZXJzIGZvciA1MCBtaWxsaXNlY29uZHMgKi8KKwltc2xlZXAoNTApOworCisJLyogMzAwIHNlY29uZCBtYXggd2FpdCAqLworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDMwMDAwMDAgOyBjb3VudCsrKSB7CisKKwkJaG9zdF9kaWFnbm9zdGljID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdERpYWdub3N0aWMpOworCisJCWlmIChob3N0X2RpYWdub3N0aWMgPT0gMHhGRkZGRkZGRikKKwkJCWdvdG8gb3V0OworCQlpZiAoIShob3N0X2RpYWdub3N0aWMgJiBNUEkyX0RJQUdfUkVTRVRfQURBUFRFUikpCisJCQlicmVhazsKKworCQkvKiB3YWl0IDEwMCBtc2VjICovCisJCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKKwkJCW1zbGVlcCgxKTsKKwkJZWxzZQorCQkJbWRlbGF5KDEpOworCX0KKworCWlmIChob3N0X2RpYWdub3N0aWMgJiBNUEkyX0RJQUdfSENCX01PREUpIHsKKworCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlc3RhcnQgdGhlIGFkYXB0ZXIgIgorCQkgICAgImFzc3VtaW5nIHRoZSBIQ0IgQWRkcmVzcyBwb2ludHMgdG8gZ29vZCBGL1dcbiIsCisJCSAgICBpb2MtPm5hbWUpKTsKKwkJaG9zdF9kaWFnbm9zdGljICY9IH5NUEkyX0RJQUdfQk9PVF9ERVZJQ0VfU0VMRUNUX01BU0s7CisJCWhvc3RfZGlhZ25vc3RpYyB8PSBNUEkyX0RJQUdfQk9PVF9ERVZJQ0VfU0VMRUNUX0hDRFc7CisJCXdyaXRlbChob3N0X2RpYWdub3N0aWMsICZpb2MtPmNoaXAtPkhvc3REaWFnbm9zdGljKTsKKworCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJICAgICJyZS1lbmFibGUgdGhlIEhDRFdcbiIsIGlvYy0+bmFtZSkpOworCQl3cml0ZWwoaGNiX3NpemUgfCBNUEkyX0hDQl9TSVpFX0hDQl9FTkFCTEUsCisJCSAgICAmaW9jLT5jaGlwLT5IQ0JTaXplKTsKKwl9CisKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlc3RhcnQgdGhlIGFkYXB0ZXJcbiIsCisJICAgIGlvYy0+bmFtZSkpOworCXdyaXRlbChob3N0X2RpYWdub3N0aWMgJiB+TVBJMl9ESUFHX0hPTERfSU9DX1JFU0VULAorCSAgICAmaW9jLT5jaGlwLT5Ib3N0RGlhZ25vc3RpYyk7CisKKwlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpc2FibGUgd3JpdGVzIHRvIHRoZSAiCisJICAgICJkaWFnbm9zdGljIHJlZ2lzdGVyXG4iLCBpb2MtPm5hbWUpKTsKKwl3cml0ZWwoTVBJMl9XUlNFUV9GTFVTSF9LRVlfVkFMVUUsICZpb2MtPmNoaXAtPldyaXRlU2VxdWVuY2UpOworCisJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJXYWl0IGZvciBGVyB0byBnbyB0byB0aGUgIgorCSAgICAiUkVBRFkgc3RhdGVcbiIsIGlvYy0+bmFtZSkpOworCWlvY19zdGF0ZSA9IF9iYXNlX3dhaXRfb25faW9jc3RhdGUoaW9jLCBNUEkyX0lPQ19TVEFURV9SRUFEWSwgMjAsCisJICAgIHNsZWVwX2ZsYWcpOworCWlmIChpb2Nfc3RhdGUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBnb2luZyB0byByZWFkeSBzdGF0ZSAiCisJCSAgICAiIChpb2Nfc3RhdGU9MHgleClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGlvY19zdGF0ZSk7CisJCWdvdG8gb3V0OworCX0KKworCV9iYXNlX3Jlc3RvcmVfbXNpeF90YWJsZShpb2MpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkaWFnIHJlc2V0OiBTVUNDRVNTXG4iLCBpb2MtPm5hbWUpOworCXJldHVybiAwOworCisgb3V0OgorCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRpYWcgcmVzZXQ6IEZBSUxFRFxuIiwgaW9jLT5uYW1lKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworLyoqCisgKiBfYmFzZV9tYWtlX2lvY19yZWFkeSAtIHB1dCBjb250cm9sbGVyIGluIFJFQURZIHN0YXRlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqIEB0eXBlOiBGT1JDRV9CSUdfSEFNTUVSIG9yIFNPRlRfUkVTRVQKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfYmFzZV9tYWtlX2lvY19yZWFkeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnLAorICAgIGVudW0gcmVzZXRfdHlwZSB0eXBlKQoreworCXUzMiBpb2Nfc3RhdGU7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAwKTsKKwlkaHNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBpb2Nfc3RhdGUoMHglMDh4KVxuIiwKKwkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgaW9jX3N0YXRlKSk7CisKKwlpZiAoKGlvY19zdGF0ZSAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09IE1QSTJfSU9DX1NUQVRFX1JFQURZKQorCQlyZXR1cm4gMDsKKworCWlmIChpb2Nfc3RhdGUgJiBNUEkyX0RPT1JCRUxMX1VTRUQpIHsKKwkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJ1bmV4cGVjdGVkIGRvb3JiZWxsICIKKwkJICAgICJhY3RpdmUhXG4iLCBpb2MtPm5hbWUpKTsKKwkJZ290byBpc3N1ZV9kaWFnX3Jlc2V0OworCX0KKworCWlmICgoaW9jX3N0YXRlICYgTVBJMl9JT0NfU1RBVEVfTUFTSykgPT0gTVBJMl9JT0NfU1RBVEVfRkFVTFQpIHsKKwkJbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8oaW9jLCBpb2Nfc3RhdGUgJgorCQkgICAgTVBJMl9ET09SQkVMTF9EQVRBX01BU0spOworCQlnb3RvIGlzc3VlX2RpYWdfcmVzZXQ7CisJfQorCisJaWYgKHR5cGUgPT0gRk9SQ0VfQklHX0hBTU1FUikKKwkJZ290byBpc3N1ZV9kaWFnX3Jlc2V0OworCisJaWYgKChpb2Nfc3RhdGUgJiBNUEkyX0lPQ19TVEFURV9NQVNLKSA9PSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkKKwkJaWYgKCEoX2Jhc2Vfc2VuZF9pb2NfcmVzZXQoaW9jLAorCQkgICAgTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VULCAxNSwgQ0FOX1NMRUVQKSkpCisJCQlyZXR1cm4gMDsKKworIGlzc3VlX2RpYWdfcmVzZXQ6CisJcmV0dXJuIF9iYXNlX2RpYWdfcmVzZXQoaW9jLCBDQU5fU0xFRVApOworfQorCisvKioKKyAqIF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsIC0gcHV0IGNvbnRyb2xsZXIgaW4gT1BFUkFUSU9OQUwgc3RhdGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKKyAgICBpbnQgc2xlZXBfZmxhZykKK3sKKwlpbnQgciwgaTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUzMiByZXBseV9hZGRyZXNzOworCisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzY3NpIGxvb2t1cCBmcmVlIGxpc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZnJlZV9saXN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwkJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJICAgICZpb2MtPmZyZWVfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCisJLyogaW5pdGlhbGl6ZSBSZXBseSBGcmVlIFF1ZXVlICovCisJZm9yIChpID0gMCwgcmVwbHlfYWRkcmVzcyA9ICh1MzIpaW9jLT5yZXBseV9kbWEgOworCSAgICBpIDwgaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIDsgaSsrLCByZXBseV9hZGRyZXNzICs9CisJICAgIGlvYy0+cmVwbHlfc3opCisJCWlvYy0+cmVwbHlfZnJlZVtpXSA9IGNwdV90b19sZTMyKHJlcGx5X2FkZHJlc3MpOworCisJLyogaW5pdGlhbGl6ZSBSZXBseSBQb3N0IEZyZWUgUXVldWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoOyBpKyspCisJCWlvYy0+cmVwbHlfcG9zdF9mcmVlW2ldLldvcmRzID0gfjBVTEw7CisKKwlyID0gX2Jhc2Vfc2VuZF9pb2NfaW5pdChpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKiBpbml0aWFsaXplIHRoZSBpbmRleCdzICovCisJaW9jLT5yZXBseV9mcmVlX2hvc3RfaW5kZXggPSBpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGggLSAxOworCWlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4ID0gMDsKKwl3cml0ZWwoaW9jLT5yZXBseV9mcmVlX2hvc3RfaW5kZXgsICZpb2MtPmNoaXAtPlJlcGx5RnJlZUhvc3RJbmRleCk7CisJd3JpdGVsKDAsICZpb2MtPmNoaXAtPlJlcGx5UG9zdEhvc3RJbmRleCk7CisKKwlfYmFzZV91bm1hc2tfaW50ZXJydXB0cyhpb2MpOworCXIgPSBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBWRl9JRCwgc2xlZXBfZmxhZyk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQorCQlfYmFzZV9zdGF0aWNfY29uZmlnX3BhZ2VzKGlvYyk7CisKKwlyID0gX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZnJlZV9yZXNvdXJjZXMgLSBmcmVlIHJlc291cmNlcyBjb250cm9sbGVyIHJlc291cmNlcyAoaW8vaXJxL21lbWFwKQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBpb2MtPnBkZXY7CisKKwlkZXhpdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCV9iYXNlX21hc2tfaW50ZXJydXB0cyhpb2MpOworCV9iYXNlX21ha2VfaW9jX3JlYWR5KGlvYywgQ0FOX1NMRUVQLCBTT0ZUX1JFU0VUKTsKKwlpZiAoaW9jLT5wY2lfaXJxKSB7CisJCXN5bmNocm9uaXplX2lycShwZGV2LT5pcnEpOworCQlmcmVlX2lycShpb2MtPnBjaV9pcnEsIGlvYyk7CisJfQorCV9iYXNlX2Rpc2FibGVfbXNpeChpb2MpOworCWlmIChpb2MtPmNoaXBfcGh5cykKKwkJaW91bm1hcChpb2MtPmNoaXApOworCWlvYy0+cGNpX2lycSA9IC0xOworCWlvYy0+Y2hpcF9waHlzID0gMDsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGlvYy0+cGRldiwgaW9jLT5iYXJzKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybjsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfYXR0YWNoIC0gYXR0YWNoIGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19iYXNlX2F0dGFjaChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJaW50IHIsIGk7CisJdW5zaWduZWQgbG9uZwkgZmxhZ3M7CisKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCXIgPSBtcHQyc2FzX2Jhc2VfbWFwX3Jlc291cmNlcyhpb2MpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBfYmFzZV9tYWtlX2lvY19yZWFkeShpb2MsIENBTl9TTEVFUCwgU09GVF9SRVNFVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCisJciA9IF9iYXNlX2dldF9pb2NfZmFjdHMoaW9jLCBDQU5fU0xFRVApOworCWlmIChyKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCXIgPSBfYmFzZV9hbGxvY2F0ZV9tZW1vcnlfcG9vbHMoaW9jLCBDQU5fU0xFRVApOworCWlmIChyKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvYy0+cmVzZXRfd3EpOworCisJLyogYmFzZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KKwltdXRleF9pbml0KCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKKwlpb2MtPmJhc2VfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisKKwkvKiB0cmFuc3BvcnQgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCisJaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwltdXRleF9pbml0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7CisKKwkvKiB0YXNrIG1hbmFnZW1lbnQgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCisJaW9jLT50bV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKKwlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfaW5pdCgmaW9jLT50bV9jbWRzLm11dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+dG1fY21kcy5kb25lKTsKKworCS8qIGNvbmZpZyBwYWdlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLworCWlvYy0+Y29uZmlnX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOworCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfaW5pdCgmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOworCisJLyogY3RsIG1vZHVsZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KKwlpb2MtPmN0bF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X2luaXQoJmlvYy0+Y3RsX2NtZHMubXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKKworCWZvciAoaSA9IDA7IGkgPCBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7IGkrKykKKwkJaW9jLT5ldmVudF9tYXNrc1tpXSA9IC0xOworCisJLyogaGVyZSB3ZSBlbmFibGUgdGhlIGV2ZW50cyB3ZSBjYXJlIGFib3V0ICovCisJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfU0FTX0RJU0NPVkVSWSk7CisJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkUpOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVCk7CisJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9TQVNfRU5DTF9ERVZJQ0VfU1RBVFVTX0NIQU5HRSk7CisJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVCk7CisJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfVk9MVU1FKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQpOworCisJaW9jLT5wZmFjdHMgPSBrY2FsbG9jKGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0cywKKwkgICAgc2l6ZW9mKE1waTJQb3J0RmFjdHNSZXBseV90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPnBmYWN0cykKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaSsrKSB7CisJCXIgPSBfYmFzZV9nZXRfcG9ydF9mYWN0cyhpb2MsIGksIENBTl9TTEVFUCk7CisJCWlmIChyKQorCQkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisJfQorCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIDAsIENBTl9TTEVFUCk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCisJLyogaW5pdGlhbGl6ZSBmYXVsdCBwb2xsaW5nICovCisJSU5JVF9ERUxBWUVEX1dPUksoJmlvYy0+ZmF1bHRfcmVzZXRfd29yaywgX2Jhc2VfZmF1bHRfcmVzZXRfd29yayk7CisJc25wcmludGYoaW9jLT5mYXVsdF9yZXNldF93b3JrX3FfbmFtZSwKKwkgICAgc2l6ZW9mKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xX25hbWUpLCAicG9sbF8lZF9zdGF0dXMiLCBpb2MtPmlkKTsKKwlpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSA9CisJCWNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xX25hbWUpOworCWlmICghaW9jLT5mYXVsdF9yZXNldF93b3JrX3EpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCAobGluZT0lZClcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5mYXVsdF9yZXNldF93b3JrX3EpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSwKKwkJICAgICZpb2MtPmZhdWx0X3Jlc2V0X3dvcmssCisJCSAgICBtc2Vjc190b19qaWZmaWVzKEZBVUxUX1BPTExJTkdfSU5URVJWQUwpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV9yZXNvdXJjZXM6CisKKwlpb2MtPnJlbW92ZV9ob3N0ID0gMTsKKwltcHQyc2FzX2Jhc2VfZnJlZV9yZXNvdXJjZXMoaW9jKTsKKwlfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyhpb2MpOworCWtmcmVlKGlvYy0+dG1fY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT5jb25maWdfY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT5iYXNlX2NtZHMucmVwbHkpOworCWtmcmVlKGlvYy0+Y3RsX2NtZHMucmVwbHkpOworCWtmcmVlKGlvYy0+cGZhY3RzKTsKKwlpb2MtPmN0bF9jbWRzLnJlcGx5ID0gTlVMTDsKKwlpb2MtPmJhc2VfY21kcy5yZXBseSA9IE5VTEw7CisJaW9jLT50bV9jbWRzLnJlcGx5ID0gTlVMTDsKKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5ID0gTlVMTDsKKwlpb2MtPmNvbmZpZ19jbWRzLnJlcGx5ID0gTlVMTDsKKwlpb2MtPnBmYWN0cyA9IE5VTEw7CisJcmV0dXJuIHI7Cit9CisKKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZGV0YWNoIC0gcmVtb3ZlIGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX2Jhc2VfZGV0YWNoKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1bnNpZ25lZCBsb25nCSBmbGFnczsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwlkZXhpdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJd3EgPSBpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcTsKKwlpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmaW9jLT5mYXVsdF9yZXNldF93b3JrKSkKKwkJZmx1c2hfd29ya3F1ZXVlKHdxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZSh3cSk7CisKKwltcHQyc2FzX2Jhc2VfZnJlZV9yZXNvdXJjZXMoaW9jKTsKKwlfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyhpb2MpOworCWtmcmVlKGlvYy0+cGZhY3RzKTsKKwlrZnJlZShpb2MtPmN0bF9jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPmJhc2VfY21kcy5yZXBseSk7CisJa2ZyZWUoaW9jLT50bV9jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5KTsKKwlrZnJlZShpb2MtPmNvbmZpZ19jbWRzLnJlcGx5KTsKK30KKworLyoqCisgKiBfYmFzZV9yZXNldF9oYW5kbGVyIC0gcmVzZXQgY2FsbGJhY2sgaGFuZGxlciAoZm9yIGJhc2UpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByZXNldF9waGFzZTogcGhhc2UKKyAqCisgKiBUaGUgaGFuZGxlciBmb3IgZG9pbmcgYW55IHJlcXVpcmVkIGNsZWFudXAgb3IgaW5pdGlhbGl6YXRpb24uCisgKgorICogVGhlIHJlc2V0IHBoYXNlIGNhbiBiZSBNUFQyX0lPQ19QUkVfUkVTRVQsIE1QVDJfSU9DX0FGVEVSX1JFU0VULAorICogTVBUMl9JT0NfRE9ORV9SRVNFVAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX2Jhc2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKK3sKKwlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CisJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19QUkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyX0lPQ19BRlRFUl9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX0FGVEVSX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKKwkJCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+dHJhbnNwb3J0X2NtZHMuc21pZCk7CisJCQljb21wbGV0ZSgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKKwkJfQorCQlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQkJaW9jLT5iYXNlX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+YmFzZV9jbWRzLnNtaWQpOworCQkJY29tcGxldGUoJmlvYy0+YmFzZV9jbWRzLmRvbmUpOworCQl9CisJCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKKwkJCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+Y29uZmlnX2NtZHMuc21pZCk7CisJCQljb21wbGV0ZSgmaW9jLT5jb25maWdfY21kcy5kb25lKTsKKwkJfQorCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX0RPTkVfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCWJyZWFrOworCX0KKwltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CisJbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKK30KKworLyoqCisgKiBfd2FpdF9mb3JfY29tbWFuZHNfdG9fY29tcGxldGUgLSByZXNldCBjb250cm9sbGVyCisgKiBAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQorICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FpdGluZygzcykgZm9yIGFsbCBwZW5kaW5nIGNvbW1hbmRzIHRvIGNvbXBsZXRlCisgKiBwcmlvciB0byBwdXR0aW5nIGNvbnRyb2xsZXIgaW4gcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkCitfd2FpdF9mb3JfY29tbWFuZHNfdG9fY29tcGxldGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKK3sKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGk7CisKKwlpb2MtPnBlbmRpbmdfaW9fY291bnQgPSAwOworCWlmIChzbGVlcF9mbGFnICE9IENBTl9TTEVFUCkKKwkJcmV0dXJuOworCisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDApOworCWlmICgoaW9jX3N0YXRlICYgTVBJMl9JT0NfU1RBVEVfTUFTSykgIT0gTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpCisJCXJldHVybjsKKworCS8qIHBlbmRpbmcgY29tbWFuZCBjb3VudCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspCisJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCAhPSAweEZGKQorCQkJaW9jLT5wZW5kaW5nX2lvX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWlvYy0+cGVuZGluZ19pb19jb3VudCkKKwkJcmV0dXJuOworCisJLyogd2FpdCBmb3IgcGVuZGluZyBjb21tYW5kcyB0byBjb21wbGV0ZSAqLworCXdhaXRfZXZlbnRfdGltZW91dChpb2MtPnJlc2V0X3dxLCBpb2MtPnBlbmRpbmdfaW9fY291bnQgPT0gMCwgMyAqIEhaKTsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgY29udHJvbGxlcgorICogQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKKyAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKKyAqIEB0eXBlOiBGT1JDRV9CSUdfSEFNTUVSIG9yIFNPRlRfUkVTRVQKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZywKKyAgICBlbnVtIHJlc2V0X3R5cGUgdHlwZSkKK3sKKwlpbnQgciwgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGJ1c3lcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOworCWlvYy0+c2hvc3RfcmVjb3ZlcnkgPSAxOworCWlmIChpb2MtPnNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SVU5OSU5HKSB7CisJCS8qIHNldCBiYWNrIHRvIFNIT1NUX1JVTk5JTkcgaW4gbXB0MnNhc19zY3NpaC5jICovCisJCXNjc2lfaG9zdF9zZXRfc3RhdGUoaW9jLT5zaG9zdCwgU0hPU1RfUkVDT1ZFUlkpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicHV0dGluZyBjb250cm9sbGVyIGludG8gIgorCQkgICAgIlNIT1NUX1JFQ09WRVJZXG4iLCBpb2MtPm5hbWUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisKKwlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfUFJFX1JFU0VUKTsKKwlfd2FpdF9mb3JfY29tbWFuZHNfdG9fY29tcGxldGUoaW9jLCBzbGVlcF9mbGFnKTsKKwlfYmFzZV9tYXNrX2ludGVycnVwdHMoaW9jKTsKKwlyID0gX2Jhc2VfbWFrZV9pb2NfcmVhZHkoaW9jLCBzbGVlcF9mbGFnLCB0eXBlKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0FGVEVSX1JFU0VUKTsKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaSsrKQorCQlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCBpb2MtPnBmYWN0c1tpXS5WRl9JRCwKKwkJICAgIHNsZWVwX2ZsYWcpOworCWlmICghcikKKwkJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0RPTkVfUkVTRVQpOworIG91dDoKKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAlc1xuIiwKKwkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgKChyID09IDApID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NDVmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaApAQCAtMCwwICsxLDc3OSBAQAorLyoKKyAqIFRoaXMgaXMgdGhlIEZ1c2lvbiBNUFQgYmFzZSBkcml2ZXIgcHJvdmlkaW5nIGNvbW1vbiBBUEkgbGF5ZXIgaW50ZXJmYWNlCisgKiBmb3IgYWNjZXNzIHRvIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuaAorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICogQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAqIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgKiBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgKiBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKKyAqIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAqIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisgKiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICogTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgKiBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqIFVTQS4KKyAqLworCisjaWZuZGVmIE1QVDJTQVNfQkFTRV9IX0lOQ0xVREVECisjZGVmaW5lIE1QVDJTQVNfQkFTRV9IX0lOQ0xVREVECisKKyNpbmNsdWRlICJtcGkvbXBpMl90eXBlLmgiCisjaW5jbHVkZSAibXBpL21waTIuaCIKKyNpbmNsdWRlICJtcGkvbXBpMl9pb2MuaCIKKyNpbmNsdWRlICJtcGkvbXBpMl9jbmZnLmgiCisjaW5jbHVkZSAibXBpL21waTJfaW5pdC5oIgorI2luY2x1ZGUgIm1waS9tcGkyX3JhaWQuaCIKKyNpbmNsdWRlICJtcGkvbXBpMl90b29sLmgiCisjaW5jbHVkZSAibXBpL21waTJfc2FzLmgiCisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KKworI2luY2x1ZGUgIm1wdDJzYXNfZGVidWcuaCIKKworLyogZHJpdmVyIHZlcnNpb25pbmcgaW5mbyAqLworI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKKyNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCisjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAwLjEwMC4xMS4xNiIKKyNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMAorI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAorI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTExCisjZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkxNgorCisvKgorICogU2V0IE1QVDJTQVNfU0dfREVQVEggdmFsdWUgYmFzZWQgb24gdXNlciBpbnB1dC4KKyAqLworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRQorI2lmICAgICBDT05GSUdfU0NTSV9NUFQyU0FTX01BWF9TR0UgIDwgMTYKKyNkZWZpbmUgTVBUMlNBU19TR19ERVBUSCAgICAgICAxNgorI2VsaWYgQ09ORklHX1NDU0lfTVBUMlNBU19NQVhfU0dFICA+IDEyOAorI2RlZmluZSBNUFQyU0FTX1NHX0RFUFRIICAgICAgIDEyOAorI2Vsc2UKKyNkZWZpbmUgTVBUMlNBU19TR19ERVBUSCAgICAgICBDT05GSUdfU0NTSV9NUFQyU0FTX01BWF9TR0UKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgTVBUMlNBU19TR19ERVBUSCAgICAgICAxMjggLyogTUFYX0hXX1NFR01FTlRTICovCisjZW5kaWYKKworCisvKgorICogR2VuZXJpYyBEZWZpbmVzCisgKi8KKyNkZWZpbmUgTVBUMlNBU19TQVRBX1FVRVVFX0RFUFRICTMyCisjZGVmaW5lIE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRICQkyNTQKKyNkZWZpbmUgTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRICTEyOAorCisjZGVmaW5lIE1QVF9OQU1FX0xFTkdUSAkJCTMyCS8qIGdlbmVyaWMgbGVuZ3RoIG9mIHN0cmluZ3MgKi8KKyNkZWZpbmUgTVBUX1NUUklOR19MRU5HVEgJCTY0CisKKyNkZWZpbmUJTVBUX01BWF9DQUxMQkFDS1MJCTE2CisKKyNkZWZpbmUJIENBTl9TTEVFUAkJCTEKKyNkZWZpbmUgIE5PX1NMRUVQCQkJMAorCisjZGVmaW5lIElOVEVSTkFMX0NNRFNfQ09VTlQJCTEwCS8qIHJlc2VydmVkIGNtZHMgKi8KKworI2RlZmluZSBNUEkyX0hJTV9NQVNLCQkJMHhGRkZGRkZGRiAvKiBtYXNrIGV2ZXJ5IGJpdCovCisKKyNkZWZpbmUgTVBUMlNBU19JTlZBTElEX0RFVklDRV9IQU5ETEUJMHhGRkZGCisKKworLyoKKyAqIHJlc2V0IHBoYXNlcworICovCisjZGVmaW5lIE1QVDJfSU9DX1BSRV9SRVNFVAkJMSAvKiBwcmlvciB0byBob3N0IHJlc2V0ICovCisjZGVmaW5lIE1QVDJfSU9DX0FGVEVSX1JFU0VUCQkyIC8qIGp1c3QgYWZ0ZXIgaG9zdCByZXNldCAqLworI2RlZmluZSBNUFQyX0lPQ19ET05FX1JFU0VUCQkzIC8qIGxpbmtzIHJlLWluaXRpYWxpemVkICovCisKKy8qCisgKiBsb2dnaW5nIGZvcm1hdAorICovCisjZGVmaW5lIE1QVDJTQVNfRk1UCQkJIiVzOiAiCisjZGVmaW5lIE1QVDJTQVNfREVCVUdfRk1UCQlLRVJOX0RFQlVHIE1QVDJTQVNfRk1UCisjZGVmaW5lIE1QVDJTQVNfSU5GT19GTVQJCUtFUk5fSU5GTyBNUFQyU0FTX0ZNVAorI2RlZmluZSBNUFQyU0FTX05PVEVfRk1UCQlLRVJOX05PVElDRSBNUFQyU0FTX0ZNVAorI2RlZmluZSBNUFQyU0FTX1dBUk5fRk1UCQlLRVJOX1dBUk5JTkcgTVBUMlNBU19GTVQKKyNkZWZpbmUgTVBUMlNBU19FUlJfRk1UCQkJS0VSTl9FUlIgTVBUMlNBU19GTVQKKworLyoKKyAqIHBlciB0YXJnZXQgcHJpdmF0ZSBkYXRhCisgKi8KKyNkZWZpbmUgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVAkweDAxCisjZGVmaW5lIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FCQkweDAyCisjZGVmaW5lIE1QVF9UQVJHRVRfRkxBR1NfREVMRVRFRAkweDA0CisKKy8qKgorICogc3RydWN0IE1QVDJTQVNfVEFSR0VUIC0gc3RhcmdldCBwcml2YXRlIGhvc3RkYXRhCisgKiBAc3RhcmdldDogc3RhcmdldCBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogdGFyZ2V0IHNhcyBhZGRyZXNzCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBAbnVtX2x1bnM6IG51bWJlciBsdW5zCisgKiBAZmxhZ3M6IE1QVF9UQVJHRVRfRkxBR1NfWFhYIGZsYWdzCisgKiBAZGVsZXRlZDogdGFyZ2V0IGZsYWdlZCBmb3IgZGVsZXRpb24KKyAqIEB0bV9idXN5OiB0YXJnZXQgaXMgYnVzeSB3aXRoIFRNIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBNUFQyU0FTX1RBUkdFVCB7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXU2NAlzYXNfYWRkcmVzczsKKwl1MTYJaGFuZGxlOworCWludAludW1fbHVuczsKKwl1MzIJZmxhZ3M7CisJdTgJZGVsZXRlZDsKKwl1OAl0bV9idXN5OworfTsKKworLyoKKyAqIHBlciBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKi8KKyNkZWZpbmUgTVBUX0RFVklDRV9GTEFHU19JTklUCQkweDAxCisjZGVmaW5lIE1QVF9ERVZJQ0VfVExSX09OCQkweDAyCisKKy8qKgorICogc3RydWN0IE1QVDJTQVNfREVWSUNFIC0gc2RldiBwcml2YXRlIGhvc3RkYXRhCisgKiBAc2FzX3RhcmdldDogc3RhcmdldCBwcml2YXRlIGhvc3RkYXRhCisgKiBAbHVuOiBsdW4gbnVtYmVyCisgKiBAZmxhZ3M6IE1QVF9ERVZJQ0VfWFhYIGZsYWdzCisgKiBAY29uZmlndXJlZF9sdW46IGx1biBpcyBjb25maWd1cmVkCisgKiBAYmxvY2s6IGRldmljZSBpcyBpbiBTREVWX0JMT0NLIHN0YXRlCisgKiBAdGxyX3Nub29wX2NoZWNrOiBmbGFnIHVzZWQgaW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0byBkaXNhYmxlIFRMUgorICovCitzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgeworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldDsKKwl1bnNpZ25lZCBpbnQJbHVuOworCXUzMglmbGFnczsKKwl1OAljb25maWd1cmVkX2x1bjsKKwl1OAlibG9jazsKKwl1OAl0bHJfc25vb3BfY2hlY2s7Cit9OworCisjZGVmaW5lIE1QVDJfQ01EX05PVF9VU0VECTB4ODAwMAkvKiBmcmVlICovCisjZGVmaW5lIE1QVDJfQ01EX0NPTVBMRVRFCTB4MDAwMQkvKiBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgTVBUMl9DTURfUEVORElORwkweDAwMDIJLyogcGVuZGluZyAqLworI2RlZmluZSBNUFQyX0NNRF9SRVBMWV9WQUxJRAkweDAwMDQJLyogcmVwbHkgaXMgdmFsaWQgKi8KKyNkZWZpbmUgTVBUMl9DTURfUkVTRVQJCTB4MDAwOAkvKiBob3N0IHJlc2V0IGRyb3BwZWQgdGhlIGNvbW1hbmQgKi8KKworLyoqCisgKiBzdHJ1Y3QgX2ludGVybmFsX2NtZCAtIGludGVybmFsIGNvbW1hbmRzIHN0cnVjdAorICogQG11dGV4OiBtdXRleAorICogQGRvbmU6IGNvbXBsZXRpb24KKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBwb2ludGVyCisgKiBAc3RhdHVzOiBNUFQyX0NNRF9YWFggc3RhdHVzCisgKiBAc21pZDogc3lzdGVtIG1lc3NhZ2UgaWQKKyAqLworc3RydWN0IF9pbnRlcm5hbF9jbWQgeworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCXZvaWQgCSpyZXBseTsKKwl1MTYJc3RhdHVzOworCXUxNglzbWlkOworfTsKKworLyoKKyAqIFNBUyBUb3BvbG9neSBTdHJ1Y3R1cmVzCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgX3Nhc19kZXZpY2UgLSBhdHRhY2hlZCBkZXZpY2UgaW5mb3JtYXRpb24KKyAqIEBsaXN0OiBzYXMgZGV2aWNlIGxpc3QKKyAqIEBzdGFyZ2V0OiBzdGFyZ2V0IG9iamVjdAorICogQHNhc19hZGRyZXNzOiBkZXZpY2Ugc2FzIGFkZHJlc3MKKyAqIEBkZXZpY2VfbmFtZTogcmV0cmlldmVkIGZyb20gdGhlIFNBUyBJREVOVElGWSBmcmFtZS4KKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBwYXJlbnRfaGFuZGxlOiBoYW5kbGUgdG8gcGFyZW50IGRldmljZQorICogQGVuY2xvc3VyZV9oYW5kbGU6IGVuY2xvc3VyZSBoYW5kbGUKKyAqIEBlbmNsb3N1cmVfbG9naWNhbF9pZDogZW5jbG9zdXJlIGxvZ2ljYWwgaWRlbnRpZmllcgorICogQHZvbHVtZV9oYW5kbGU6IHZvbHVtZSBoYW5kbGUgKHZhbGlkIHdoZW4gaGlkZGVuIHJhaWQgbWVtYmVyKQorICogQHZvbHVtZV93d2lkOiB2b2x1bWUgdW5pcXVlIGlkZW50aWZpZXIKKyAqIEBkZXZpY2VfaW5mbzogYml0ZmllbGQgcHJvdmlkZXMgZGV0YWlsZWQgaW5mbyBhYm91dCB0aGUgZGV2aWNlCisgKiBAaWQ6IHRhcmdldCBpZAorICogQGNoYW5uZWw6IHRhcmdldCBjaGFubmVsCisgKiBAc2xvdDogbnVtYmVyIG51bWJlcgorICogQGhpZGRlbl9yYWlkX2NvbXBvbmVudDogc2V0IHRvIDEgd2hlbiB0aGlzIGlzIGEgcmFpZCBtZW1iZXIKKyAqIEByZXNwb25kaW5nOiB1c2VkIGluIF9zY3NpaF9zYXNfZGV2aWNlX21hcmtfcmVzcG9uZGluZworICovCitzdHJ1Y3QgX3Nhc19kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJdTY0CXNhc19hZGRyZXNzOworCXU2NAlkZXZpY2VfbmFtZTsKKwl1MTYJaGFuZGxlOworCXUxNglwYXJlbnRfaGFuZGxlOworCXUxNgllbmNsb3N1cmVfaGFuZGxlOworCXU2NAllbmNsb3N1cmVfbG9naWNhbF9pZDsKKwl1MTYJdm9sdW1lX2hhbmRsZTsKKwl1NjQJdm9sdW1lX3d3aWQ7CisJdTMyCWRldmljZV9pbmZvOworCWludAlpZDsKKwlpbnQJY2hhbm5lbDsKKwl1MTYJc2xvdDsKKwl1OAloaWRkZW5fcmFpZF9jb21wb25lbnQ7CisJdTgJcmVzcG9uZGluZzsKK307CisKKy8qKgorICogc3RydWN0IF9yYWlkX2RldmljZSAtIHJhaWQgdm9sdW1lIGxpbmsgbGlzdAorICogQGxpc3Q6IHNhcyBkZXZpY2UgbGlzdAorICogQHN0YXJnZXQ6IHN0YXJnZXQgb2JqZWN0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0ICh2b2x1bWVzIGFyZSBzaW5nbGUgbHVuKQorICogQHd3aWQ6IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdm9sdW1lCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBAaWQ6IHRhcmdldCBpZAorICogQGNoYW5uZWw6IHRhcmdldCBjaGFubmVsCisgKiBAdm9sdW1lX3R5cGU6IHRoZSByYWlkIGxldmVsCisgKiBAZGV2aWNlX2luZm86IGJpdGZpZWxkIHByb3ZpZGVzIGRldGFpbGVkIGluZm8gYWJvdXQgdGhlIGhpZGRlbiBjb21wb25lbnRzCisgKiBAbnVtX3BkczogbnVtYmVyIG9mIGhpZGRlbiByYWlkIGNvbXBvbmVudHMKKyAqIEByZXNwb25kaW5nOiB1c2VkIGluIF9zY3NpaF9yYWlkX2RldmljZV9tYXJrX3Jlc3BvbmRpbmcKKyAqLworc3RydWN0IF9yYWlkX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJdTY0CXd3aWQ7CisJdTE2CWhhbmRsZTsKKwlpbnQJaWQ7CisJaW50CWNoYW5uZWw7CisJdTgJdm9sdW1lX3R5cGU7CisJdTMyCWRldmljZV9pbmZvOworCXU4CW51bV9wZHM7CisJdTgJcmVzcG9uZGluZzsKK307CisKKy8qKgorICogc3RydWN0IF9ib290X2RldmljZSAtIGJvb3QgZGV2aWNlIGluZm8KKyAqIEBpc19yYWlkOiBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhpcyBpcyB2b2x1bWUKKyAqIEBkZXZpY2U6IGhvbGRzIHBvaW50ZXIgZm9yIGVpdGhlciBzdHJ1Y3QgX3Nhc19kZXZpY2Ugb3IKKyAqICAgICBzdHJ1Y3QgX3JhaWRfZGV2aWNlCisgKi8KK3N0cnVjdCBfYm9vdF9kZXZpY2UgeworCXU4IGlzX3JhaWQ7CisJdm9pZCAqZGV2aWNlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgX3Nhc19wb3J0IC0gd2lkZS9uYXJyb3cgc2FzIHBvcnQgaW5mb3JtYXRpb24KKyAqIEBwb3J0X2xpc3Q6IGxpc3Qgb2YgcG9ydHMgYmVsb25naW5nIHRvIGV4cGFuZGVyCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlIGZvciB0aGlzIHBvcnQKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3Mgb2YgdGhpcyBwb3J0CisgKiBAbnVtX3BoeXM6IG51bWJlciBvZiBwaHlzIGJlbG9uZ2luZyB0byB0aGlzIHBvcnQKKyAqIEByZW1vdGVfaWRlbnRpZnk6IGF0dGFjaGVkIGRldmljZSBpZGVudGlmaWNhdGlvbgorICogQHJwaHk6IHNhcyB0cmFuc3BvcnQgcnBoeSBvYmplY3QKKyAqIEBwb3J0OiBzYXMgdHJhbnNwb3J0IHdpZGUvbmFycm93IHBvcnQgb2JqZWN0CisgKiBAcGh5X2xpc3Q6IF9zYXNfcGh5IGxpc3Qgb2JqZWN0cyBiZWxvbmdpbmcgdG8gdGhpcyBwb3J0CisgKi8KK3N0cnVjdCBfc2FzX3BvcnQgeworCXN0cnVjdCBsaXN0X2hlYWQgcG9ydF9saXN0OworCXUxNgloYW5kbGU7CisJdTY0CXNhc19hZGRyZXNzOworCXU4CW51bV9waHlzOworCXN0cnVjdCBzYXNfaWRlbnRpZnkgcmVtb3RlX2lkZW50aWZ5OworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKwlzdHJ1Y3Qgc2FzX3BvcnQgKnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCBwaHlfbGlzdDsKK307CisKKy8qKgorICogc3RydWN0IF9zYXNfcGh5IC0gcGh5IGluZm9ybWF0aW9uCisgKiBAcG9ydF9zaWJsaW5nczogbGlzdCBvZiBwaHlzIGJlbG9uZ2luZyB0byBhIHBvcnQKKyAqIEBpZGVudGlmeTogcGh5IGlkZW50aWZpY2F0aW9uCisgKiBAcmVtb3RlX2lkZW50aWZ5OiBhdHRhY2hlZCBkZXZpY2UgaWRlbnRpZmljYXRpb24KKyAqIEBwaHk6IHNhcyB0cmFuc3BvcnQgcGh5IG9iamVjdAorICogQHBoeV9pZDogdW5pcXVlIHBoeSBpZAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZSBmb3IgdGhpcyBwaHkKKyAqIEBhdHRhY2hlZF9oYW5kbGU6IGRldmljZSBoYW5kbGUgZm9yIGF0dGFjaGVkIGRldmljZQorICovCitzdHJ1Y3QgX3Nhc19waHkgeworCXN0cnVjdCBsaXN0X2hlYWQgcG9ydF9zaWJsaW5nczsKKwlzdHJ1Y3Qgc2FzX2lkZW50aWZ5IGlkZW50aWZ5OworCXN0cnVjdCBzYXNfaWRlbnRpZnkgcmVtb3RlX2lkZW50aWZ5OworCXN0cnVjdCBzYXNfcGh5ICpwaHk7CisJdTgJcGh5X2lkOworCXUxNgloYW5kbGU7CisJdTE2CWF0dGFjaGVkX2hhbmRsZTsKK307CisKKy8qKgorICogc3RydWN0IF9zYXNfbm9kZSAtIHNhc19ob3N0L2V4cGFuZGVyIGluZm9ybWF0aW9uCisgKiBAbGlzdDogbGlzdCBvZiBleHBhbmRlcnMKKyAqIEBwYXJlbnRfZGV2OiBwYXJlbnQgZGV2aWNlIGNsYXNzCisgKiBAbnVtX3BoeXM6IG51bWJlciBwaHlzIGJlbG9uZ2luZyB0byB0aGlzIHNhc19ob3N0L2V4cGFuZGVyCisgKiBAc2FzX2FkZHJlc3M6IHNhcyBhZGRyZXNzIG9mIHRoaXMgc2FzX2hvc3QvZXhwYW5kZXIKKyAqIEBoYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyBzYXNfaG9zdC9leHBhbmRlcgorICogQHBhcmVudF9oYW5kbGU6IHBhcmVudCBoYW5kbGUKKyAqIEBlbmNsb3N1cmVfaGFuZGxlOiBoYW5kbGUgZm9yIHRoaXMgYSBtZW1iZXIgb2YgYW4gZW5jbG9zdXJlCisgKiBAZGV2aWNlX2luZm86IGJpdHdpc2UgZGVmaW5pbmcgY2FwYWJpbGl0aWVzIG9mIHRoaXMgc2FzX2hvc3QvZXhwYW5kZXIKKyAqIEByZXNwb25kaW5nOiB1c2VkIGluIF9zY3NpaF9leHBhbmRlcl9kZXZpY2VfbWFya19yZXNwb25kaW5nCisgKiBAcGh5OiBhIGxpc3Qgb2YgcGh5cyB0aGF0IG1ha2UgdXAgdGhpcyBzYXNfaG9zdC9leHBhbmRlcgorICogQHNhc19wb3J0X2xpc3Q6IGxpc3Qgb2YgcG9ydHMgYXR0YWNoZWQgdG8gdGhpcyBzYXNfaG9zdC9leHBhbmRlcgorICovCitzdHJ1Y3QgX3Nhc19ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRldmljZSAqcGFyZW50X2RldjsKKwl1OAludW1fcGh5czsKKwl1NjQJc2FzX2FkZHJlc3M7CisJdTE2CWhhbmRsZTsKKwl1MTYJcGFyZW50X2hhbmRsZTsKKwl1MTYJZW5jbG9zdXJlX2hhbmRsZTsKKwl1NjQJZW5jbG9zdXJlX2xvZ2ljYWxfaWQ7CisJdTgJcmVzcG9uZGluZzsKKwlzdHJ1Y3QJX3Nhc19waHkgKnBoeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNhc19wb3J0X2xpc3Q7Cit9OworCisvKioKKyAqIGVudW0gcmVzZXRfdHlwZSAtIHJlc2V0IHN0YXRlCisgKiBARk9SQ0VfQklHX0hBTU1FUjogaXNzdWUgZGlhZ25vc3RpYyByZXNldAorICogQFNPRlRfUkVTRVQ6IGlzc3VlIG1lc3NhZ2VfdW5pdF9yZXNldCwgaWYgZmFpbHMgdG8gdG8gYmlnIGhhbW1lcgorICovCitlbnVtIHJlc2V0X3R5cGUgeworCUZPUkNFX0JJR19IQU1NRVIsCisJU09GVF9SRVNFVCwKK307CisKKy8qKgorICogc3RydWN0IHJlcXVlc3RfdHJhY2tlciAtIGZpcm13YXJlIHJlcXVlc3QgdHJhY2tlcgorICogQHNtaWQ6IHN5c3RlbSBtZXNzYWdlIGlkCisgKiBAc2NtZDogc2NzaSByZXF1ZXN0IHBvaW50ZXIKKyAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CisgKiBAY2hhaW5fbGlzdDogbGlzdCBvZiBjaGFpbnMgYXNzb2NpYXRlZCB0byB0aGlzIElPCisgKiBAdHJhY2tlcl9saXN0OiBsaXN0IG9mIGZyZWUgcmVxdWVzdCAoaW9jLT5mcmVlX2xpc3QpCisgKi8KK3N0cnVjdCByZXF1ZXN0X3RyYWNrZXIgeworCXUxNglzbWlkOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisJdTgJY2JfaWR4OworCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2tlcl9saXN0OworfTsKKwordHlwZWRlZiB2b2lkICgqTVBUX0FERF9TR0UpKHZvaWQgKnBhZGRyLCB1MzIgZmxhZ3NfbGVuZ3RoLCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKworLyoqCisgKiBzdHJ1Y3QgTVBUMlNBU19BREFQVEVSIC0gcGVyIGFkYXB0ZXIgc3RydWN0CisgKiBAbGlzdDogaW9jX2xpc3QKKyAqIEBzaG9zdDogc2hvc3Qgb2JqZWN0CisgKiBAaWQ6IHVuaXF1ZSBhZGFwdGVyIGlkCisgKiBAcGNpX2lycTogaXJxIG51bWJlcgorICogQG5hbWU6IGdlbmVyaWMgaW9jIHN0cmluZworICogQHRtcF9zdHJpbmc6IHRtcCBzdHJpbmcgdXNlZCBmb3IgbG9nZ2luZworICogQHBkZXY6IHBjaSBwZGV2IG9iamVjdAorICogQGNoaXA6IG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXIgc3BhY2UKKyAqIEBjaGlwX3BoeXM6IHBoeXNpY2FsIGFkZHJzcyBwcmlvciB0byBtYXBwaW5nCisgKiBAcGlvX2NoaXA6IEkvTyBtYXBwZWQgcmVnaXN0ZXIgc3BhY2UKKyAqIEBsb2dnaW5nX2xldmVsOiBzZWUgbXB0MnNhc19kZWJ1Zy5oCisgKiBAaXJfZmlybXdhcmU6IElSIGZpcm13YXJlIHByZXNlbnQKKyAqIEBiYXJzOiBiaXRtYXNrIG9mIEJBUidzIHRoYXQgbXVzdCBiZSBjb25maWd1cmVkCisgKiBAbWFza19pbnRlcnJ1cHRzOiBpZ25vcmUgaW50ZXJydXB0CisgKiBAZmF1bHRfcmVzZXRfd29ya19xX25hbWU6IGZ3IGZhdWx0IHdvcmsgcXVldWUKKyAqIEBmYXVsdF9yZXNldF93b3JrX3E6ICIiCisgKiBAZmF1bHRfcmVzZXRfd29yazogIiIKKyAqIEBmaXJtd2FyZV9ldmVudF9uYW1lOiBmdyBldmVudCB3b3JrIHF1ZXVlCisgKiBAZmlybXdhcmVfZXZlbnRfdGhyZWFkOiAiIgorICogQGZ3X2V2ZW50c19vZmY6IGZsYWcgdG8gdHVybiBvZmYgZncgZXZlbnQgaGFuZGxpbmcKKyAqIEBmd19ldmVudF9sb2NrOgorICogQGZ3X2V2ZW50X2xpc3Q6IGxpc3Qgb2YgZncgZXZlbnRzCisgKiBAYWVuX2V2ZW50X3JlYWRfZmxhZzogZXZlbnQgbG9nIHdhcyByZWFkCisgKiBAYnJvYWRjYXN0X2Flbl9idXN5OiBicm9hZGNhc3QgYWVuIHdhaXRpbmcgdG8gYmUgc2VydmljZWQKKyAqIEBpb2NfcmVzZXRfaW5fcHJvZ3Jlc3M6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MKKyAqIEBpb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jazoKKyAqIEBpb2NfbGlua19yZXNldF9pbl9wcm9ncmVzczogcGh5L2hhcmQgcmVzZXQgaW4gcHJvZ3Jlc3MKKyAqIEBpZ25vcmVfbG9naW5mb3M6IGlnbm9yZSBsb2dpbmZvcyBkdXJpbmcgdGFzayBtYW5hZ21lbnQKKyAqIEByZW1vdmVfaG9zdDogZmxhZyBmb3Igd2hlbiBkcml2ZXIgdW5sb2FkcywgdG8gYXZvaWQgc2VuZGluZyBkZXYgcmVzZXRzCisgKiBAd2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGU6CisgKiBAbXNpeF9lbmFibGU6IGZsYWcgaW5kaWNhdGluZyBtc2l4IGlzIGVuYWJsZWQKKyAqIEBtc2l4X3ZlY3Rvcl9jb3VudDogbnVtYmVyIG1zaXggdmVjdG9ycworICogQG1zaXhfdGFibGU6IHZpcnQgYWRkcmVzcyB0byB0aGUgbXNpeCB0YWJsZQorICogQG1zaXhfdGFibGVfYmFja3VwOiBiYWNrdXAgbXNpeCB0YWJsZQorICogQHNjc2lfaW9fY2JfaWR4OiBzaG9zdCBnZW5lcmF0ZWQgY29tbWFuZHMKKyAqIEB0bV9jYl9pZHg6IHRhc2sgbWFuYWdlbWVudCBjb21tYW5kcworICogQHRyYW5zcG9ydF9jYl9pZHg6IHRyYW5zcG9ydCBpbnRlcm5hbCBjb21tYW5kcworICogQGN0bF9jYl9pZHg6IGNsdCBpbnRlcm5hbCBjb21tYW5kcworICogQGJhc2VfY2JfaWR4OiBiYXNlIGludGVybmFsIGNvbW1hbmRzCisgKiBAY29uZmlnX2NiX2lkeDogYmFzZSBpbnRlcm5hbCBjb21tYW5kcworICogQGJhc2VfY21kczoKKyAqIEB0cmFuc3BvcnRfY21kczoKKyAqIEB0bV9jbWRzOgorICogQGN0bF9jbWRzOgorICogQGNvbmZpZ19jbWRzOgorICogQGJhc2VfYWRkX3NnX3NpbmdsZTogaGFuZGxlciBmb3IgZWl0aGVyIDMyLzY0IGJpdCBzZ2wncworICogQGV2ZW50X3R5cGU6IGJpdHMgaW5kaWNhdGluZyB3aGljaCBldmVudHMgdG8gbG9nCisgKiBAZXZlbnRfY29udGV4dDogdW5pcXVlIGlkIGZvciBlYWNoIGxvZ2dlZCBldmVudAorICogQGV2ZW50X2xvZzogZXZlbnQgbG9nIHBvaW50ZXIKKyAqIEBldmVudF9tYXNrczogZXZlbnRzIHRoYXQgYXJlIG1hc2tlZAorICogQGZhY3RzOiBzdGF0aWMgZmFjdHMgZGF0YQorICogQHBmYWN0czogc3RhdGljIHBvcnQgZmFjdHMgZGF0YQorICogQG1hbnVfcGcwOiBzdGF0aWMgbWFudWZhY3R1cmluZyBwYWdlIDAKKyAqIEBiaW9zX3BnMjogc3RhdGljIGJpb3MgcGFnZSAyCisgKiBAYmlvc19wZzM6IHN0YXRpYyBiaW9zIHBhZ2UgMworICogQGlvY19wZzg6IHN0YXRpYyBpb2MgcGFnZSA4CisgKiBAaW91bml0X3BnMDogc3RhdGljIGlvdW5pdCBwYWdlIDAKKyAqIEBpb3VuaXRfcGcxOiBzdGF0aWMgaW91bml0IHBhZ2UgMQorICogQHNhc19oYmE6IHNhcyBob3N0IG9iamVjdAorICogQHNhc19leHBhbmRlcl9saXN0OiBleHBhbmRlciBvYmplY3QgbGlzdAorICogQHNhc19ub2RlX2xvY2s6CisgKiBAc2FzX2RldmljZV9saXN0OiBzYXMgZGV2aWNlIG9iamVjdCBsaXN0CisgKiBAc2FzX2RldmljZV9pbml0X2xpc3Q6IHNhcyBkZXZpY2Ugb2JqZWN0IGxpc3QgKHVzZWQgb25seSBhdCBpbml0IHRpbWUpCisgKiBAc2FzX2RldmljZV9sb2NrOgorICogQGlvX21pc3NpbmdfZGVsYXk6IHRpbWUgZm9yIElPIGNvbXBsZXRlZCBieSBmdyB3aGVuIFBEUiBlbmFibGVkCisgKiBAZGV2aWNlX21pc3NpbmdfZGVsYXk6IHRpbWUgZm9yIGRldmljZSBtaXNzaW5nIGJ5IGZ3IHdoZW4gUERSIGVuYWJsZWQKKyAqIEBjb25maWdfcGFnZV9zejogY29uZmlnIHBhZ2Ugc2l6ZQorICogQGNvbmZpZ19wYWdlOiByZXNlcnZlIG1lbW9yeSBmb3IgY29uZmlnIHBhZ2UgcGF5bG9hZAorICogQGNvbmZpZ19wYWdlX2RtYToKKyAqIEBzZ2Vfc2l6ZTogc2cgZWxlbWVudCBzaXplIGZvciBlaXRoZXIgMzIvNjQgYml0CisgKiBAcmVxdWVzdF9kZXB0aDogaGJhIHJlcXVlc3QgcXVldWUgZGVwdGgKKyAqIEByZXF1ZXN0X3N6OiBwZXIgcmVxdWVzdCBmcmFtZSBzaXplCisgKiBAcmVxdWVzdDogcG9vbCBvZiByZXF1ZXN0IGZyYW1lcworICogQHJlcXVlc3RfZG1hOgorICogQHJlcXVlc3RfZG1hX3N6OgorICogQHNjc2lfbG9va3VwOiBmaXJtd2FyZSByZXF1ZXN0IHRyYWNrZXIgbGlzdAorICogQHNjc2lfbG9va3VwX2xvY2s6CisgKiBAZnJlZV9saXN0OiBmcmVlIGxpc3Qgb2YgcmVxdWVzdAorICogQGNoYWluOiBwb29sIG9mIGNoYWlucworICogQHBlbmRpbmdfaW9fY291bnQ6CisgKiBAcmVzZXRfd3E6CisgKiBAY2hhaW5fZG1hOgorICogQG1heF9zZ2VzX2luX21haW5fbWVzc2FnZTogbnVtYmVyIHNnIGVsZW1lbnRzIGluIG1haW4gbWVzc2FnZQorICogQG1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2U6IG51bWJlciBzZyBlbGVtZW50cyBwZXIgY2hhaW4KKyAqIEBjaGFpbnNfbmVlZGVkX3Blcl9pbzogbWF4IGNoYWlucyBwZXIgaW8KKyAqIEBjaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZTogbG9jYXRpb24gMXN0IHNnIGluIG1haW4KKyAqIEBjaGFpbl9kZXB0aDogdG90YWwgY2hhaW5zIGFsbG9jYXRlZAorICogQHNlbnNlOiBwb29sIG9mIHNlbnNlCisgKiBAc2Vuc2VfZG1hOgorICogQHNlbnNlX2RtYV9wb29sOgorICogQHJlcGx5X2RlcHRoOiBoYmEgcmVwbHkgcXVldWUgZGVwdGg6CisgKiBAcmVwbHlfc3o6IHBlciByZXBseSBmcmFtZSBzaXplOgorICogQHJlcGx5OiBwb29sIG9mIHJlcGx5czoKKyAqIEByZXBseV9kbWE6CisgKiBAcmVwbHlfZG1hX3Bvb2w6CisgKiBAcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aDogcmVwbHkgZnJlZSBkZXB0aAorICogQHJlcGx5X2ZyZWU6IHBvb2wgZm9yIHJlcGx5IGZyZWUgcXVldWUgKDMyIGJpdCBhZGRyKQorICogQHJlcGx5X2ZyZWVfZG1hOgorICogQHJlcGx5X2ZyZWVfZG1hX3Bvb2w6CisgKiBAcmVwbHlfZnJlZV9ob3N0X2luZGV4OiB0YWlsIGluZGV4IGluIHBvb2wgdG8gaW5zZXJ0IGZyZWUgcmVwbHlzCisgKiBAcmVwbHlfcG9zdF9xdWV1ZV9kZXB0aDogcmVwbHkgcG9zdCBxdWV1ZSBkZXB0aAorICogQHJlcGx5X3Bvc3RfZnJlZTogcG9vbCBmb3IgcmVwbHkgcG9zdCAoNjRiaXQgZGVzY3JpcHRvcikKKyAqIEByZXBseV9wb3N0X2ZyZWVfZG1hOgorICogQHJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbDoKKyAqIEByZXBseV9wb3N0X2hvc3RfaW5kZXg6IGhlYWQgaW5kZXggaW4gdGhlIHBvb2wgd2hlcmUgRlcgY29tcGxldGVzIElPCisgKi8KK3N0cnVjdCBNUFQyU0FTX0FEQVBURVIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwl1OAkJaWQ7CisJdTMyCQlwY2lfaXJxOworCWNoYXIJCW5hbWVbTVBUX05BTUVfTEVOR1RIXTsKKwljaGFyCQl0bXBfc3RyaW5nW01QVF9TVFJJTkdfTEVOR1RIXTsKKwlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKKwlNcGkyU3lzdGVtSW50ZXJmYWNlUmVnc190IF9faW9tZW0gKmNoaXA7CisJdW5zaWduZWQgbG9uZwljaGlwX3BoeXM7CisJdW5zaWduZWQgbG9uZwlwaW9fY2hpcDsKKwlpbnQJCWxvZ2dpbmdfbGV2ZWw7CisJdTgJCWlyX2Zpcm13YXJlOworCWludAkJYmFyczsKKwl1OAkJbWFza19pbnRlcnJ1cHRzOworCisJLyogZncgZmF1bHQgaGFuZGxlciAqLworCWNoYXIJCWZhdWx0X3Jlc2V0X3dvcmtfcV9uYW1lWzIwXTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmF1bHRfcmVzZXRfd29ya19xOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZmF1bHRfcmVzZXRfd29yazsKKworCS8qIGZ3IGV2ZW50IGhhbmRsZXIgKi8KKwljaGFyCQlmaXJtd2FyZV9ldmVudF9uYW1lWzIwXTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqZmlybXdhcmVfZXZlbnRfdGhyZWFkOworCXU4CQlmd19ldmVudHNfb2ZmOworCXNwaW5sb2NrX3QJZndfZXZlbnRfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZ3X2V2ZW50X2xpc3Q7CisKKwkgLyogbWlzYyBmbGFncyAqLworCWludAkJYWVuX2V2ZW50X3JlYWRfZmxhZzsKKwl1OAkJYnJvYWRjYXN0X2Flbl9idXN5OworCXU4CQlpb2NfcmVzZXRfaW5fcHJvZ3Jlc3M7CisJdTgJCXNob3N0X3JlY292ZXJ5OworCXNwaW5sb2NrX3QgCWlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrOworCXU4CQlpb2NfbGlua19yZXNldF9pbl9wcm9ncmVzczsKKwl1OAkJaWdub3JlX2xvZ2luZm9zOworCXU4CQlyZW1vdmVfaG9zdDsKKwl1OAkJd2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGU7CisKKwl1OAkJbXNpeF9lbmFibGU7CisJdTE2CQltc2l4X3ZlY3Rvcl9jb3VudDsKKwl1MzIJCSptc2l4X3RhYmxlOworCXUzMgkJKm1zaXhfdGFibGVfYmFja3VwOworCisJLyogaW50ZXJuYWwgY29tbWFuZHMsIGNhbGxiYWNrIGluZGV4ICovCisJdTgJCXNjc2lfaW9fY2JfaWR4OworCXU4CQl0bV9jYl9pZHg7CisJdTgJCXRyYW5zcG9ydF9jYl9pZHg7CisJdTgJCWN0bF9jYl9pZHg7CisJdTgJCWJhc2VfY2JfaWR4OworCXU4CQljb25maWdfY2JfaWR4OworCXN0cnVjdCBfaW50ZXJuYWxfY21kIGJhc2VfY21kczsKKwlzdHJ1Y3QgX2ludGVybmFsX2NtZCB0cmFuc3BvcnRfY21kczsKKwlzdHJ1Y3QgX2ludGVybmFsX2NtZCB0bV9jbWRzOworCXN0cnVjdCBfaW50ZXJuYWxfY21kIGN0bF9jbWRzOworCXN0cnVjdCBfaW50ZXJuYWxfY21kIGNvbmZpZ19jbWRzOworCisJTVBUX0FERF9TR0UJYmFzZV9hZGRfc2dfc2luZ2xlOworCisJLyogZXZlbnQgbG9nICovCisJdTMyCQlldmVudF90eXBlW01QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEU107CisJdTMyCQlldmVudF9jb250ZXh0OworCXZvaWQJCSpldmVudF9sb2c7CisJdTMyCQlldmVudF9tYXNrc1tNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFNdOworCisJLyogc3RhdGljIGNvbmZpZyBwYWdlcyAqLworCU1waTJJT0NGYWN0c1JlcGx5X3QgZmFjdHM7CisJTXBpMlBvcnRGYWN0c1JlcGx5X3QgKnBmYWN0czsKKwlNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3QgbWFudV9wZzA7CisJTXBpMkJpb3NQYWdlMl90CWJpb3NfcGcyOworCU1waTJCaW9zUGFnZTNfdAliaW9zX3BnMzsKKwlNcGkySU9DUGFnZThfdCBpb2NfcGc4OworCU1waTJJT1VuaXRQYWdlMF90IGlvdW5pdF9wZzA7CisJTXBpMklPVW5pdFBhZ2UxX3QgaW91bml0X3BnMTsKKworCXN0cnVjdCBfYm9vdF9kZXZpY2UgcmVxX2Jvb3RfZGV2aWNlOworCXN0cnVjdCBfYm9vdF9kZXZpY2UgcmVxX2FsdF9ib290X2RldmljZTsKKwlzdHJ1Y3QgX2Jvb3RfZGV2aWNlIGN1cnJlbnRfYm9vdF9kZXZpY2U7CisKKwkvKiBzYXMgaGJhLCBleHBhbmRlciwgYW5kIGRldmljZSBsaXN0ICovCisJc3RydWN0IF9zYXNfbm9kZSBzYXNfaGJhOworCXN0cnVjdCBsaXN0X2hlYWQgc2FzX2V4cGFuZGVyX2xpc3Q7CisJc3BpbmxvY2tfdAlzYXNfbm9kZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgc2FzX2RldmljZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgc2FzX2RldmljZV9pbml0X2xpc3Q7CisJc3BpbmxvY2tfdAlzYXNfZGV2aWNlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCByYWlkX2RldmljZV9saXN0OworCXNwaW5sb2NrX3QJcmFpZF9kZXZpY2VfbG9jazsKKwl1OAkJaW9fbWlzc2luZ19kZWxheTsKKwl1MTYJCWRldmljZV9taXNzaW5nX2RlbGF5OworCWludAkJc2FzX2lkOworCisJLyogY29uZmlnIHBhZ2UgKi8KKwl1MTYJCWNvbmZpZ19wYWdlX3N6OworCXZvaWQgCQkqY29uZmlnX3BhZ2U7CisJZG1hX2FkZHJfdAljb25maWdfcGFnZV9kbWE7CisKKwkvKiByZXF1ZXN0ICovCisJdTE2CQlzZ2Vfc2l6ZTsKKwl1MTYgCQlyZXF1ZXN0X2RlcHRoOworCXUxNgkJcmVxdWVzdF9zejsKKwl1OAkJKnJlcXVlc3Q7CisJZG1hX2FkZHJfdAlyZXF1ZXN0X2RtYTsKKwl1MzIJCXJlcXVlc3RfZG1hX3N6OworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKnNjc2lfbG9va3VwOworCXNwaW5sb2NrX3Qgc2NzaV9sb29rdXBfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlpbnQJCXBlbmRpbmdfaW9fY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd3E7CisKKwkvKiBjaGFpbiAqLworCXU4CQkqY2hhaW47CisJZG1hX2FkZHJfdAljaGFpbl9kbWE7CisJdTE2IAkJbWF4X3NnZXNfaW5fbWFpbl9tZXNzYWdlOworCXUxNgkJbWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZTsKKwl1MTYJCWNoYWluc19uZWVkZWRfcGVyX2lvOworCXUxNgkJY2hhaW5fb2Zmc2V0X3ZhbHVlX2Zvcl9tYWluX21lc3NhZ2U7CisJdTE2CQljaGFpbl9kZXB0aDsKKworCS8qIHNlbnNlICovCisJdTgJCSpzZW5zZTsKKwlkbWFfYWRkcl90CXNlbnNlX2RtYTsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnNlbnNlX2RtYV9wb29sOworCisJLyogcmVwbHkgKi8KKwl1MTYJCXJlcGx5X3N6OworCXU4CQkqcmVwbHk7CisJZG1hX2FkZHJfdAlyZXBseV9kbWE7CisJc3RydWN0IGRtYV9wb29sICpyZXBseV9kbWFfcG9vbDsKKworCS8qIHJlcGx5IGZyZWUgcXVldWUgKi8KKwl1MTYgCQlyZXBseV9mcmVlX3F1ZXVlX2RlcHRoOworCXUzMgkJKnJlcGx5X2ZyZWU7CisJZG1hX2FkZHJfdAlyZXBseV9mcmVlX2RtYTsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X2ZyZWVfZG1hX3Bvb2w7CisJdTMyCQlyZXBseV9mcmVlX2hvc3RfaW5kZXg7CisKKwkvKiByZXBseSBwb3N0IHF1ZXVlICovCisJdTE2IAkJcmVwbHlfcG9zdF9xdWV1ZV9kZXB0aDsKKwlNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QgKnJlcGx5X3Bvc3RfZnJlZTsKKwlkbWFfYWRkcl90CXJlcGx5X3Bvc3RfZnJlZV9kbWE7CisJc3RydWN0IGRtYV9wb29sICpyZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2w7CisJdTMyCQlyZXBseV9wb3N0X2hvc3RfaW5kZXg7CisKKwkvKiBkaWFnIGJ1ZmZlciBzdXBwb3J0ICovCisJdTgJCSpkaWFnX2J1ZmZlcltNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCXUzMgkJZGlhZ19idWZmZXJfc3pbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKKwlkbWFfYWRkcl90CWRpYWdfYnVmZmVyX2RtYVtNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCXU4CQlkaWFnX2J1ZmZlcl9zdGF0dXNbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKKwl1MzIJCXVuaXF1ZV9pZFtNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCXUzMgkJcHJvZHVjdF9zcGVjaWZpY1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdWzIzXTsKKwl1MzIJCWRpYWdub3N0aWNfZmxhZ3NbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKK307CisKK3R5cGVkZWYgdm9pZCAoKk1QVF9DQUxMQkFDSykoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCisgICAgdTMyIHJlcGx5KTsKKworCisvKiBiYXNlIHNoYXJlZCBBUEkgKi8KK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIG1wdDJzYXNfaW9jX2xpc3Q7CisKK2ludCBtcHQyc2FzX2Jhc2VfYXR0YWNoKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyk7Cit2b2lkIG1wdDJzYXNfYmFzZV9kZXRhY2goc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKTsKK2ludCBtcHQyc2FzX2Jhc2VfbWFwX3Jlc291cmNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpOwordm9pZCBtcHQyc2FzX2Jhc2VfZnJlZV9yZXNvdXJjZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKTsKK2ludCBtcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcsCisgICAgZW51bSByZXNldF90eXBlIHR5cGUpOworCit2b2lkICptcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKK3ZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwordm9pZCBtcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdm9pZCAqcGFkZHIpOworZG1hX2FkZHJfdCBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZV9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CitkbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKKwordTE2IG1wdDJzYXNfYmFzZV9nZXRfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkLAorICAgIHUxNiBoYW5kbGUpOwordm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpOwordm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfdGFyZ2V0X2Fzc2lzdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAorICAgIHU4IHZmX2lkLCB1MTYgaW9faW5kZXgpOwordm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9pbml0aWFsaXplX2NhbGxiYWNrX2hhbmRsZXIodm9pZCk7Cit1OCBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihNUFRfQ0FMTEJBQ0sgY2JfZnVuYyk7Cit2b2lkIG1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodTggY2JfaWR4KTsKKwordm9pZCBtcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3ZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyIHBoeXNfYWRkcik7CisKK3UzMiBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IGNvb2tlZCk7CisKK3ZvaWQgbXB0MnNhc19iYXNlX2ZhdWx0X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jICwgdTE2IGZhdWx0X2NvZGUpOworaW50IG1wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2woc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdAorICAgICptcGlfcmVxdWVzdCk7CitpbnQgbXB0MnNhc19iYXNlX3Njc2lfZW5jbG9zdXJlX3Byb2Nlc3NvcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMlNlcFJlcGx5X3QgKm1waV9yZXBseSwgTXBpMlNlcFJlcXVlc3RfdCAqbXBpX3JlcXVlc3QpOwordm9pZCBtcHQyc2FzX2Jhc2VfdmFsaWRhdGVfZXZlbnRfdHlwZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUzMiAqZXZlbnRfdHlwZSk7CisKKy8qIHNjc2loIHNoYXJlZCBBUEkgKi8KK3ZvaWQgbXB0MnNhc19zY3NpaF9pc3N1ZV90bShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsIHVpbnQgbHVuLAorICAgIHU4IHR5cGUsIHUxNiBzbWlkX3Rhc2ssIHVsb25nIHRpbWVvdXQpOwordm9pZCBtcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSk7Cit2b2lkIG1wdDJzYXNfc2NzaWhfY2xlYXJfdG1fZmxhZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpOworc3RydWN0IF9zYXNfbm9kZSAqbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTE2IGhhbmRsZSk7CitzdHJ1Y3QgX3Nhc19ub2RlICptcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3Moc3RydWN0IE1QVDJTQVNfQURBUFRFUgorICAgICppb2MsIHU2NCBzYXNfYWRkcmVzcyk7CitzdHJ1Y3QgX3Nhc19kZXZpY2UgKm1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKAorICAgIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzKTsKKwordm9pZCBtcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSk7Cit2b2lkIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSk7CisKKy8qIGNvbmZpZyBzaGFyZWQgQVBJICovCit2b2lkIG1wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4ICpudW1fcGh5cyk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3QgKmNvbmZpZ19wYWdlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJCaW9zUGFnZTJfdCAqY29uZmlnX3BhZ2UpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMkJpb3NQYWdlM190ICpjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMF90ICpjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzRGV2aWNlUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNEZXZpY2VQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UpOworaW50IG1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCBjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeik7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJJT0NQYWdlOF90ICpjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMkV4cGFuZGVyUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyRXhwYW5kZXJQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIHBoeV9udW1iZXIsIHUxNiBoYW5kbGUpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9lbmNsb3N1cmVfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc1BoeVBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgcGh5X251bWJlcik7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3BoeV9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNQaHlQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIHBoeV9udW1iZXIpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJSYWlkVm9sUGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX3BkcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsIHU4ICpudW1fcGRzKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyUmFpZFZvbFBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwgdTMyIGhhbmRsZSwgdTE2IHN6KTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfcGh5c19kaXNrX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwKKyAgICB1MzIgZm9ybV9zcGVjaWZpYyk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgcGRfaGFuZGxlLAorICAgIHUxNiAqdm9sdW1lX2hhbmRsZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHZvbHVtZV9oYW5kbGUsCisgICAgdTY0ICp3d2lkKTsKKworLyogY3RsIHNoYXJlZCBBUEkgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19ob3N0X2F0dHJzW107CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1wdDJzYXNfZGV2X2F0dHJzW107Cit2b2lkIG1wdDJzYXNfY3RsX2luaXQodm9pZCk7Cit2b2lkIG1wdDJzYXNfY3RsX2V4aXQodm9pZCk7Cit2b2lkIG1wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit2b2lkIG1wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpOwordm9pZCBtcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordm9pZCBtcHQyc2FzX2N0bF9hZGRfdG9fZXZlbnRfbG9nKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHkpOworCisvKiB0cmFuc3BvcnQgc2hhcmVkIEFQSSAqLwordm9pZCBtcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOworc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHUxNiBoYW5kbGUsIHUxNiBwYXJlbnRfaGFuZGxlKTsKK3ZvaWQgbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MsCisgICAgdTE2IHBhcmVudF9oYW5kbGUpOworaW50IG1wdDJzYXNfdHJhbnNwb3J0X2FkZF9ob3N0X3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBfc2FzX3BoeQorICAgICptcHQyc2FzX3BoeSwgTXBpMlNhc1BoeVBhZ2UwX3QgcGh5X3BnMCwgc3RydWN0IGRldmljZSAqcGFyZW50X2Rldik7CitpbnQgbXB0MnNhc190cmFuc3BvcnRfYWRkX2V4cGFuZGVyX3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBfc2FzX3BoeQorICAgICptcHQyc2FzX3BoeSwgTXBpMkV4cGFuZGVyUGFnZTFfdCBleHBhbmRlcl9wZzEsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYpOwordm9pZCBtcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwKKyAgIHUxNiBhdHRhY2hlZF9oYW5kbGUsIHU4IHBoeV9udW1iZXIsIHU4IGxpbmtfcmF0ZSk7CitleHRlcm4gc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSBtcHQyc2FzX3RyYW5zcG9ydF9mdW5jdGlvbnM7CitleHRlcm4gc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICptcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZTsKKworI2VuZGlmIC8qIE1QVDJTQVNfQkFTRV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNmYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwpAQCAtMCwwICsxLDE4NzMgQEAKKy8qCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjb21tb24gQVBJIGZvciBhY2Nlc3NpbmcgZmlybXdhcmUgY29uZmlndXJhdGlvbiBwYWdlcworICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuYworICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICogQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAqIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgKiBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgKiBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKKyAqIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAqIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisgKiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICogTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgKiBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgIm1wdDJzYXNfYmFzZS5oIgorCisvKiBsb2NhbCBkZWZpbml0aW9ucyAqLworCisvKiBUaW1lb3V0IGZvciBjb25maWcgcGFnZSByZXF1ZXN0IChpbiBzZWNvbmRzKSAqLworI2RlZmluZSBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCAxNQorCisvKiBDb21tb24gc2dsIGZsYWdzIGZvciBSRUFESU5HIGEgY29uZmlnIHBhZ2UuICovCisjZGVmaW5lIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyAoKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwgXAorICAgIE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgXAorICAgIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0xJU1QpIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUKQorCisvKiBDb21tb24gc2dsIGZsYWdzIGZvciBXUklUSU5HIGEgY29uZmlnIHBhZ2UuICovCisjZGVmaW5lIE1QVDJfQ09ORklHX0NPTU1PTl9XUklURV9TR0xGTEFHUyAoKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwgXAorICAgIE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgXAorICAgIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0xJU1QgfCBNUEkyX1NHRV9GTEFHU19IT1NUX1RPX0lPQykgXAorICAgIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUKQorCisvKioKKyAqIHN0cnVjdCBjb25maWdfcmVxdWVzdCAtIG9idGFpbiBkbWEgbWVtb3J5IHZpYSByb3V0aW5lCisgKiBAY29uZmlnX3BhZ2Vfc3o6IHNpemUKKyAqIEBjb25maWdfcGFnZTogdmlydCBwb2ludGVyCisgKiBAY29uZmlnX3BhZ2VfZG1hOiBwaHlzIHBvaW50ZXIKKyAqCisgKi8KK3N0cnVjdCBjb25maWdfcmVxdWVzdHsKKwl1MTYJCQljb25maWdfcGFnZV9zejsKKwl2b2lkCQkJKmNvbmZpZ19wYWdlOworCWRtYV9hZGRyX3QJCWNvbmZpZ19wYWdlX2RtYTsKK307CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcgLSBkZWJ1ZyByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAY2FsbGluZ19mdW5jdGlvbl9uYW1lOiBzdHJpbmcgcGFzcyBmcm9tIGNhbGxpbmcgZnVuY3Rpb24KKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUKKyAqIENvbnRleHQ6IG5vbmUuCisgKgorICogRnVuY3Rpb24gZm9yIGRpc3BsYXlpbmcgZGVidWcgaW5mbyBoZWxwZnVsbCB3aGVuIGRlYnVnZ2luZyBpc3N1ZXMKKyAqIGluIHRoaXMgbW9kdWxlLgorICovCitzdGF0aWMgdm9pZAorX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKKyAgICBjaGFyICpjYWxsaW5nX2Z1bmN0aW9uX25hbWUsIE1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCWNoYXIgKmRlc2MgPSBOVUxMOworCisJaWYgKCEoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0NPTkZJRykpCisJCXJldHVybjsKKworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlzd2l0Y2ggKG1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZVR5cGUgJiBNUEkyX0NPTkZJR19QQUdFVFlQRV9NQVNLKSB7CisJY2FzZSBNUEkyX0NPTkZJR19QQUdFVFlQRV9JT19VTklUOgorCQlkZXNjID0gImlvX3VuaXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPQzoKKwkJZGVzYyA9ICJpb2MiOworCQlicmVhazsKKwljYXNlIE1QSTJfQ09ORklHX1BBR0VUWVBFX0JJT1M6CisJCWRlc2MgPSAiYmlvcyI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xVTUU6CisJCWRlc2MgPSAicmFpZF92b2x1bWUiOworCQlicmVhazsKKwljYXNlIE1QSTJfQ09ORklHX1BBR0VUWVBFX01BTlVGQUNUVVJJTkc6CisJCWRlc2MgPSAibWFudWZhdWN0dXJpbmciOworCQlicmVhazsKKwljYXNlIE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfUEhZU0RJU0s6CisJCWRlc2MgPSAicGh5c2Rpc2siOworCQlicmVhazsKKwljYXNlIE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOgorCQlzd2l0Y2ggKG1waV9yZXF1ZXN0LT5FeHRQYWdlVHlwZSkgeworCQljYXNlIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOgorCQkJZGVzYyA9ICJzYXNfaW9fdW5pdCI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfRVhQQU5ERVI6CisJCQlkZXNjID0gInNhc19leHBhbmRlciI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfREVWSUNFOgorCQkJZGVzYyA9ICJzYXNfZGV2aWNlIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19QSFk6CisJCQlkZXNjID0gInNhc19waHkiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfTE9HOgorCQkJZGVzYyA9ICJsb2ciOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfRU5DTE9TVVJFOgorCQkJZGVzYyA9ICJlbmNsb3N1cmUiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfUkFJRF9DT05GSUc6CisJCQlkZXNjID0gInJhaWRfY29uZmlnIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX0RSSVZFUl9NQVBQSU5HOgorCQkJZGVzYyA9ICJkcml2ZXJfbWFwcHBpbmciOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKCFkZXNjKQorCQlyZXR1cm47CisKKwlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAlcyglZCksIGFjdGlvbiglZCksIGZvcm0oMHglMDh4KSwgIgorCSAgICAic21pZCglZClcbiIsIGlvYy0+bmFtZSwgY2FsbGluZ19mdW5jdGlvbl9uYW1lLCBkZXNjLAorCSAgICBtcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VOdW1iZXIsIG1waV9yZXF1ZXN0LT5BY3Rpb24sCisJICAgIGxlMzJfdG9fY3B1KG1waV9yZXF1ZXN0LT5QYWdlQWRkcmVzcyksIHNtaWQpOworCisJaWYgKCFtcGlfcmVwbHkpCisJCXJldHVybjsKKworCWlmIChtcGlfcmVwbHktPklPQ1N0YXR1cyB8fCBtcGlfcmVwbHktPklPQ0xvZ0luZm8pCisJCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkgICAgIlx0aW9jc3RhdHVzKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSk7Cit9CisjZW5kaWYKKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19kb25lIC0gY29uZmlnIHBhZ2UgY29tcGxldGlvbiByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogbm9uZS4KKyAqCisgKiBUaGUgY2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIF9jb25maWdfcmVxdWVzdC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQoreworCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCisJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQorCQlyZXR1cm47CisJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc21pZCAhPSBzbWlkKQorCQlyZXR1cm47CisJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CisJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCWlmIChtcGlfcmVwbHkpIHsKKwkJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVQTFlfVkFMSUQ7CisJCW1lbWNweShpb2MtPmNvbmZpZ19jbWRzLnJlcGx5LCBtcGlfcmVwbHksCisJCSAgICBtcGlfcmVwbHktPk1zZ0xlbmd0aCo0KTsKKwl9CisJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY29uZmlnX2RvbmUiLCBtcGlfcmVwbHkpOworI2VuZGlmCisJY29tcGxldGUoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7Cit9CisKKy8qKgorICogX2NvbmZpZ19yZXF1ZXN0IC0gbWFpbiByb3V0aW5lIGZvciBzZW5kaW5nIGNvbmZpZyBwYWdlIHJlcXVlc3RzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVxdWVzdDogcmVxdWVzdCBtZXNzYWdlIGZyYW1lCisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKKyAqIENvbnRleHQ6IHNsZWVwLCB0aGUgY2FsbGluZyBmdW5jdGlvbiBuZWVkcyB0byBhY3F1aXJlIHRoZSBjb25maWdfY21kcy5tdXRleAorICoKKyAqIEEgZ2VuZXJpYyBBUEkgZm9yIGNvbmZpZyBwYWdlIHJlcXVlc3RzIHRvIGZpcm13YXJlLgorICoKKyAqIFRoZSBpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyBmbGFnIHNob3VsZCBiZSBNUFQyX0NNRF9OT1RfVVNFRCBiZWZvcmUgY2FsbGluZworICogdGhpcyBBUEkuCisgKgorICogVGhlIGNhbGxiYWNrIGluZGV4IGlzIHNldCBpbnNpZGUgYGlvYy0+Y29uZmlnX2NiX2lkeC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfY29uZmlnX3JlcXVlc3Qoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVxdWVzdF90CisgICAgKm1waV9yZXF1ZXN0LCBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBpbnQgdGltZW91dCkKK3sKKwl1MTYgc21pZDsKKwl1MzIgaW9jX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCAqY29uZmlnX3JlcXVlc3Q7CisJaW50IHI7CisJdTggcmV0cnlfY291bnQ7CisJdTggaXNzdWVfcmVzZXQ7CisJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisKKwlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGNvbmZpZ19jbWQgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlyZXRyeV9jb3VudCA9IDA7CisKKyByZXRyeV9jb25maWc6CisJd2FpdF9zdGF0ZV9jb3VudCA9IDA7CisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCXdoaWxlIChpb2Nfc3RhdGUgIT0gTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJaWYgKHdhaXRfc3RhdGVfY291bnQrKyA9PSBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICIlczogZmFpbGVkIGR1ZSB0byBpb2Mgbm90IG9wZXJhdGlvbmFsXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXNzbGVlcCgxKTsKKwkJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHdhaXRpbmcgZm9yICIKKwkJICAgICJvcGVyYXRpb25hbCBzdGF0ZShjb3VudD0lZClcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fLCB3YWl0X3N0YXRlX2NvdW50KTsKKwl9CisJaWYgKHdhaXRfc3RhdGVfY291bnQpCisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaW9jIGlzIG9wZXJhdGlvbmFsXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5jb25maWdfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXIgPSAwOworCW1lbXNldChtcGlfcmVwbHksIDAsIHNpemVvZihNcGkyQ29uZmlnUmVwbHlfdCkpOworCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwljb25maWdfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT5jb25maWdfY21kcy5zbWlkID0gc21pZDsKKwltZW1jcHkoY29uZmlnX3JlcXVlc3QsIG1waV9yZXF1ZXN0LCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCV9jb25maWdfZGlzcGxheV9zb21lX2RlYnVnKGlvYywgc21pZCwgImNvbmZpZ19yZXF1ZXN0IiwgTlVMTCk7CisjZW5kaWYKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIGNvbmZpZ19yZXF1ZXN0LT5WRl9JRCk7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSwKKwkgICAgdGltZW91dCpIWik7CisJaWYgKCEoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQorCQkJaXNzdWVfcmVzZXQgPSAxOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKQorCQltZW1jcHkobXBpX3JlcGx5LCBpb2MtPmNvbmZpZ19jbWRzLnJlcGx5LAorCQkgICAgc2l6ZW9mKE1waTJDb25maWdSZXBseV90KSk7CisJaWYgKHJldHJ5X2NvdW50KQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHJldHJ5IGNvbXBsZXRlZCEhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlyZXR1cm4gcjsKKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwlpZiAoIXJldHJ5X2NvdW50KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogYXR0ZW1wdGluZyByZXRyeVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXRyeV9jb3VudCsrOworCQlnb3RvIHJldHJ5X2NvbmZpZzsKKwl9CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qKgorICogX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeSAtIG9idGFpbiBwaHlzaWNhbCBtZW1vcnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1lbTogc3RydWN0IGNvbmZpZ19yZXF1ZXN0CisgKgorICogQSB3cmFwcGVyIGZvciBvYnRhaW5pbmcgZG1hLWFibGUgbWVtb3J5IGZvciBjb25maWcgcGFnZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBjb25maWdfcmVxdWVzdCAqbWVtKQoreworCWludCByID0gMDsKKworCW1lbS0+Y29uZmlnX3BhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBkZXYsIG1lbS0+Y29uZmlnX3BhZ2Vfc3osCisJICAgICZtZW0tPmNvbmZpZ19wYWdlX2RtYSk7CisJaWYgKCFtZW0tPmNvbmZpZ19wYWdlKQorCQlyID0gLUVOT01FTTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkgLSB3cmFwcGVyIHRvIGZyZWUgdGhlIG1lbW9yeQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbWVtOiBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QKKyAqCisgKiBBIHdyYXBwZXIgdG8gZnJlZSBkbWEtYWJsZSBtZW1vcnkgd2hlbiB1c2luZyBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5LgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBjb25maWdfcmVxdWVzdCAqbWVtKQoreworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBtZW0tPmNvbmZpZ19wYWdlX3N6LCBtZW0tPmNvbmZpZ19wYWdlLAorCSAgICBtZW0tPmNvbmZpZ19wYWdlX2RtYSk7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwIC0gb2J0YWluIG1hbnVmYWN0dXJpbmcgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3QgKmNvbmZpZ19wYWdlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfTUFOVUZBQ1RVUklORzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9NQU5VRkFDVFVSSU5HMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMiAtIG9idGFpbiBiaW9zIHBhZ2UgMgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMkJpb3NQYWdlMl90ICpjb25maWdfcGFnZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyQmlvc1BhZ2UyX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0JJT1M7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfQklPU1BBR0UyX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMkJpb3NQYWdlMl90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGczIC0gb2J0YWluIGJpb3MgcGFnZSAzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGczKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyQmlvc1BhZ2UzX3QgKmNvbmZpZ19wYWdlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJCaW9zUGFnZTNfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfQklPUzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDM7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9CSU9TUEFHRTNfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyQmlvc1BhZ2UzX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMCAtIG9idGFpbiBpb3VuaXQgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMF90ICpjb25maWdfcGFnZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkySU9Vbml0UGFnZTBfdCkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfSU9fVU5JVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9JT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJJT1VuaXRQYWdlMF90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzEgLSBvYnRhaW4gaW91bml0IHBhZ2UgMQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMklPVW5pdFBhZ2UxX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0lPX1VOSVQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkySU9Vbml0UGFnZTFfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxIC0gc2V0IGlvdW5pdCBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19zZXRfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UxX3QgY29uZmlnX3BhZ2UpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisKKwltZW1zZXQobWVtLmNvbmZpZ19wYWdlLCAwLCBtZW0uY29uZmlnX3BhZ2Vfc3opOworCW1lbWNweShtZW0uY29uZmlnX3BhZ2UsICZjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKE1waTJJT1VuaXRQYWdlMV90KSk7CisKKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1dSSVRFX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4IC0gb2J0YWluIGlvYyBwYWdlIDgKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfaW9jX3BnOChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMklPQ1BhZ2U4X3QgKmNvbmZpZ19wYWdlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJJT0NQYWdlOF90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9JT0M7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSA4OworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfSU9DUEFHRThfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkySU9DUGFnZThfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMCAtIG9idGFpbiBzYXMgZGV2aWNlIHBhZ2UgMAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAZm9ybTogR0VUX05FWFRfSEFORExFIG9yIEhBTkRMRQorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNEZXZpY2VQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UwX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0RFVklDRTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0RFVklDRTBfUEFHRVZFUlNJT047CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAwOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UwX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzEgLSBvYnRhaW4gc2FzIGRldmljZSBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQGZvcm06IEdFVF9ORVhUX0hBTkRMRSBvciBIQU5ETEUKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzRGV2aWNlUGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLCB1MzIgaGFuZGxlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJTYXNEZXZpY2VQYWdlMV90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19ERVZJQ0U7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNERVZJQ0UxX1BBR0VWRVJTSU9OOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJTYXNEZXZpY2VQYWdlMV90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyAtIG9idGFpbiBudW1iZXIgb2YgcGh5cyBvbiB0aGUgaG9zdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbnVtX3BoeXM6IHBvaW50ZXIgcmV0dXJuZWQgd2l0aCB0aGUgbnVtYmVyIG9mIHBoeXMKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4ICpudW1fcGh5cykKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisJdTE2IGlvY19zdGF0dXM7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCU1waTJTYXNJT1VuaXRQYWdlMF90IGNvbmZpZ19wYWdlOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpIHsKKwkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCW1lbWNweSgmY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdFBhZ2UwX3QpKSk7CisJCQkqbnVtX3BoeXMgPSBjb25maWdfcGFnZS5OdW1QaHlzOworCQl9CisJfQorCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcwIC0gb2J0YWluIHNhcyBpb3VuaXQgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBzejogc2l6ZSBvZiBidWZmZXIgcGFzc2VkIGluIGNvbmZpZ19wYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBjYWxsIGNvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzIHByaW9yIHRvCisgKiB0aGlzIGZ1bmN0aW9uLCBzbyBlbm91Z2ggbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgY29uZmlnX3BhZ2UuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMF90ICpjb25maWdfcGFnZSwgdTE2IHN6KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc3opOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfSU9fVU5JVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIHN6LCBtZW0uY29uZmlnX3BhZ2Vfc3opKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMSAtIG9idGFpbiBzYXMgaW91bml0IHBhZ2UgMAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAc3o6IHNpemUgb2YgYnVmZmVyIHBhc3NlZCBpbiBjb25maWdfcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgY2FsbCBjb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyBwcmlvciB0bworICogdGhpcyBmdW5jdGlvbiwgc28gZW5vdWdoIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIGNvbmZpZ19wYWdlLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeikKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHN6KTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBzeiwgbWVtLmNvbmZpZ19wYWdlX3N6KSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwIC0gb2J0YWluIGV4cGFuZGVyIHBhZ2UgMAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAZm9ybTogR0VUX05FWFRfSEFORExFIG9yIEhBTkRMRQorICogQGhhbmRsZTogZXhwYW5kZXIgaGFuZGxlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJFeHBhbmRlclBhZ2UwX3QgKmNvbmZpZ19wYWdlLCB1MzIgZm9ybSwgdTMyIGhhbmRsZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMF90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19FWFBBTkRFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBoYW5kbGUpOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMF90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMSAtIG9idGFpbiBleHBhbmRlciBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQHBoeV9udW1iZXI6IHBoeSBudW1iZXIKKyAqIEBoYW5kbGU6IGV4cGFuZGVyIGhhbmRsZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyRXhwYW5kZXJQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIHBoeV9udW1iZXIsCisgICAgdTE2IGhhbmRsZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMV90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19FWFBBTkRFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNFWFBBTkRFUjFfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CisJICAgIGNwdV90b19sZTMyKE1QSTJfU0FTX0VYUEFORF9QR0FEX0ZPUk1fSE5ETF9QSFlfTlVNIHwKKwkgICAgKHBoeV9udW1iZXIgPDwgTVBJMl9TQVNfRVhQQU5EX1BHQURfUEhZTlVNX1NISUZUKSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJFeHBhbmRlclBhZ2UxX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfZW5jbG9zdXJlX3BnMCAtIG9idGFpbiBlbmNsb3N1cmUgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBmb3JtOiBHRVRfTkVYVF9IQU5ETEUgb3IgSEFORExFCisgKiBAaGFuZGxlOiBleHBhbmRlciBoYW5kbGUKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2VuY2xvc3VyZV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNFbmNsb3N1cmVQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sIHUzMiBoYW5kbGUpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfRU5DTE9TVVJFOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0VOQ0xPU1VSRTBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBoYW5kbGUpOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmICghcikKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCisJCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKKwkJICAgIHNpemVvZihNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCkpKTsKKworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKworIG91dDoKKwltdXRleF91bmxvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCXJldHVybiByOworfQorCisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9waHlfcGcwIC0gb2J0YWluIHBoeSBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQHBoeV9udW1iZXI6IHBoeSBudW1iZXIKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3BoeV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNQaHlQYWdlMF90ICpjb25maWdfcGFnZSwgdTMyIHBoeV9udW1iZXIpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKwlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCisJbXV0ZXhfbG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc1BoeVBhZ2UwX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX1BIWTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNQSFkwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihNUEkyX1NBU19QSFlfUEdBRF9GT1JNX1BIWV9OVU1CRVIgfCBwaHlfbnVtYmVyKTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMlNhc1BoeVBhZ2UwX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMSAtIG9idGFpbiBwaHkgcGFnZSAxCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBwaHlfbnVtYmVyOiBwaHkgbnVtYmVyCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9waHlfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzUGh5UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUzMiBwaHlfbnVtYmVyKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJTYXNQaHlQYWdlMV90KSk7CisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19QSFk7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTUEhZMV9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlMzIoTVBJMl9TQVNfUEhZX1BHQURfRk9STV9QSFlfTlVNQkVSIHwgcGh5X251bWJlcik7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKKwl9CisJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCisJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKKwkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKCFyKQorCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKKwkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCQkgICAgc2l6ZW9mKE1waTJTYXNQaHlQYWdlMV90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMSAtIG9idGFpbiByYWlkIHZvbHVtZSBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQGZvcm06IEdFVF9ORVhUX0hBTkRMRSBvciBIQU5ETEUKKyAqIEBoYW5kbGU6IHZvbHVtZSBoYW5kbGUKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMlJhaWRWb2xQYWdlMV90ICpjb25maWdfcGFnZSwgdTMyIGZvcm0sCisgICAgdTMyIGhhbmRsZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyUmFpZFZvbFBhZ2UxX3QpKTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfVk9MVU1FOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURWT0xQQUdFMV9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMV90KSkpOworCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9wZHMgLSBvYnRhaW4gbnVtYmVyIG9mIHBoeXMgZGlzayBhc3NpZ25lZCB0byB2b2x1bWUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogdm9sdW1lIGhhbmRsZQorICogQG51bV9wZHM6IHJldHVybnMgcGRzIGNvdW50CisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9udW1iZXJfcGRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwKKyAgICB1OCAqbnVtX3BkcykKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCU1waTJSYWlkVm9sUGFnZTBfdCAqY29uZmlnX3BhZ2U7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisJdTE2IGlvY19zdGF0dXM7CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCSpudW1fcGRzID0gMDsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUgfCBoYW5kbGUpOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpIHsKKwkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCWNvbmZpZ19wYWdlID0gbWVtLmNvbmZpZ19wYWdlOworCQkJKm51bV9wZHMgPSBjb25maWdfcGFnZS0+TnVtUGh5c0Rpc2tzOworCQl9CisJfQorCisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMCAtIG9idGFpbiByYWlkIHZvbHVtZSBwYWdlIDAKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQGZvcm06IEdFVF9ORVhUX0hBTkRMRSBvciBIQU5ETEUKKyAqIEBoYW5kbGU6IHZvbHVtZSBoYW5kbGUKKyAqIEBzejogc2l6ZSBvZiBidWZmZXIgcGFzc2VkIGluIGNvbmZpZ19wYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJSYWlkVm9sUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLAorICAgIHUzMiBoYW5kbGUsIHUxNiBzeikKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CisKKwltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1lbXNldChjb25maWdfcGFnZSwgMCwgc3opOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfVk9MVU1FOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBzeiwgbWVtLmNvbmZpZ19wYWdlX3N6KSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfcGh5c19kaXNrX3BnMCAtIG9idGFpbiBwaHlzIGRpc2sgcGFnZSAwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBmb3JtOiBHRVRfTkVYVF9QSFlTRElTS05VTSwgUEhZU0RJU0tOVU0sIERFVkhBTkRMRQorICogQGZvcm1fc3BlY2lmaWM6IHNwZWNpZmljIHRvIHRoZSBmb3JtCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9waHlzX2Rpc2tfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCAqY29uZmlnX3BhZ2UsIHUzMiBmb3JtLAorICAgIHUzMiBmb3JtX3NwZWNpZmljKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9SQUlEX1BIWVNESVNLOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURQSFlTRElTS1BBR0UwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgZm9ybV9zcGVjaWZpYyk7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OworCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOworCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCX0KKwlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKKwkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAorCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAoIXIpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAorCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJCSAgICBzaXplb2YoTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3QpKSk7CisKKwlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZSAtIHJldHVybnMgdm9sdW1lIGhhbmRsZSBmb3IgZ2l2ZSBoaWRkZW4gcmFpZCBjb21wb25lbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBwZF9oYW5kbGU6IHBoeXMgZGlzayBoYW5kbGUKKyAqIEB2b2x1bWVfaGFuZGxlOiB2b2x1bWUgaGFuZGxlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfaGFuZGxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHBkX2hhbmRsZSwKKyAgICB1MTYgKnZvbHVtZV9oYW5kbGUpCit7CisJTXBpMlJhaWRDb25maWd1cmF0aW9uUGFnZTBfdCAqY29uZmlnX3BhZ2U7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJaW50IHIsIGk7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKwl1MTYgaW9jX3N0YXR1czsKKworCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOworCSp2b2x1bWVfaGFuZGxlID0gMDsKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfUkFJRF9DT05GSUc7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9SQUlEQ09ORklHMF9QQUdFVkVSU0lPTjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihNUEkyX1JBSURfUEdBRF9GT1JNX0FDVElWRV9DT05GSUcpOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VWZXJzaW9uOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlTnVtYmVyOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVR5cGU7CisJbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LkV4dFBhZ2VUeXBlOworCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKKwkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJfQorCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAorCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCisJICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlyID0gLTE7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIGRvbmU7CisJY29uZmlnX3BhZ2UgPSBtZW0uY29uZmlnX3BhZ2U7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZ19wYWdlLT5OdW1FbGVtZW50czsgaSsrKSB7CisJCWlmICgoY29uZmlnX3BhZ2UtPkNvbmZpZ0VsZW1lbnRbaV0uRWxlbWVudEZsYWdzICYKKwkJICAgIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX01BU0tfRUxFTUVOVF9UWVBFKSAhPQorCQkgICAgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfVk9MX1BIWVNfRElTS19FTEVNRU5UKQorCQkJY29udGludWU7CisJCWlmIChjb25maWdfcGFnZS0+Q29uZmlnRWxlbWVudFtpXS5QaHlzRGlza0RldkhhbmRsZSA9PQorCQkgICAgcGRfaGFuZGxlKSB7CisJCQkqdm9sdW1lX2hhbmRsZSA9IGxlMTZfdG9fY3B1KGNvbmZpZ19wYWdlLT4KKwkJCSAgICBDb25maWdFbGVtZW50W2ldLlZvbERldkhhbmRsZSk7CisJCQlyID0gMDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworIGRvbmU6CisJaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkIC0gcmV0dXJucyB3d2lkIGdpdmVuIHRoZSB2b2x1bWUgaGFuZGxlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEB2b2x1bWVfaGFuZGxlOiB2b2x1bWUgaGFuZGxlCisgKiBAd3dpZDogdm9sdW1lIHd3aWQKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHZvbHVtZV9oYW5kbGUsCisgICAgdTY0ICp3d2lkKQoreworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlNcGkyUmFpZFZvbFBhZ2UxX3QgcmFpZF92b2xfcGcxOworCisJKnd3aWQgPSAwOworCWlmICghKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmcmFpZF92b2xfcGcxLCBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsCisJICAgIHZvbHVtZV9oYW5kbGUpKSkgeworCQkqd3dpZCA9IGxlNjRfdG9fY3B1KHJhaWRfdm9sX3BnMS5XV0lEKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNGY4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC0wLDAgKzEsMjUxNiBAQAorLyoKKyAqIE1hbmFnZW1lbnQgTW9kdWxlIFN1cHBvcnQgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkCisgKiBjb250cm9sbGVycworICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2N0bC5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAibXB0MnNhc19iYXNlLmgiCisjaW5jbHVkZSAibXB0MnNhc19jdGwuaCIKKworc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICphc3luY19xdWV1ZTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChjdGxfcG9sbF93YWl0KTsKKworLyoqCisgKiBlbnVtIGJsb2NrX3N0YXRlIC0gYmxvY2tpbmcgc3RhdGUKKyAqIEBOT05fQkxPQ0tJTkc6IG5vbiBibG9ja2luZworICogQEJMT0NLSU5HOiBibG9ja2luZworICoKKyAqIFRoZXNlIHN0YXRlcyBhcmUgZm9yIGlvY3RscyB0aGF0IG5lZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZQorICogZnJvbSBmaXJtd2FyZSwgc28gdGhleSBwcm9iYWJseSByZXF1aXJlIHNsZWVwLgorICovCitlbnVtIGJsb2NrX3N0YXRlIHsKKwlOT05fQkxPQ0tJTkcsCisJQkxPQ0tJTkcsCit9OworCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9jdGxfZGlzcGxheV9zb21lX2RlYnVnIC0gZGVidWcgcm91dGluZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQGNhbGxpbmdfZnVuY3Rpb25fbmFtZTogc3RyaW5nIHBhc3MgZnJvbSBjYWxsaW5nIGZ1bmN0aW9uCisgKiBAbXBpX3JlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lCisgKiBDb250ZXh0OiBub25lLgorICoKKyAqIEZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGRlYnVnIGluZm8gaGVscGZ1bGwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCisgKiBpbiB0aGlzIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQKK19jdGxfZGlzcGxheV9zb21lX2RlYnVnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgY2hhciAqY2FsbGluZ19mdW5jdGlvbl9uYW1lLCBNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwljaGFyICpkZXNjID0gTlVMTDsKKworCWlmICghKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19JT0NUTCkpCisJCXJldHVybjsKKworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlzd2l0Y2ggKG1waV9yZXF1ZXN0LT5GdW5jdGlvbikgeworCWNhc2UgTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q6CisJeworCQlNcGkyU0NTSUlPUmVxdWVzdF90ICpzY3NpX3JlcXVlc3QgPQorCQkgICAgKE1waTJTQ1NJSU9SZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKworCQlzbnByaW50Zihpb2MtPnRtcF9zdHJpbmcsIE1QVF9TVFJJTkdfTEVOR1RILAorCQkgICAgInNjc2lfaW8sIGNtZCgweCUwMngpLCBjZGJfbGVuKCVkKSIsCisJCSAgICBzY3NpX3JlcXVlc3QtPkNEQi5DREIzMlswXSwKKwkJICAgIGxlMTZfdG9fY3B1KHNjc2lfcmVxdWVzdC0+SW9GbGFncykgJiAweEYpOworCQlkZXNjID0gaW9jLT50bXBfc3RyaW5nOworCQlicmVhazsKKwl9CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOgorCQlkZXNjID0gInRhc2tfbWdtdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9JT0NfSU5JVDoKKwkJZGVzYyA9ICJpb2NfaW5pdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9JT0NfRkFDVFM6CisJCWRlc2MgPSAiaW9jX2ZhY3RzIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzoKKwl7CisJCU1waTJDb25maWdSZXF1ZXN0X3QgKmNvbmZpZ19yZXF1ZXN0ID0KKwkJICAgIChNcGkyQ29uZmlnUmVxdWVzdF90ICopbXBpX3JlcXVlc3Q7CisKKwkJc25wcmludGYoaW9jLT50bXBfc3RyaW5nLCBNUFRfU1RSSU5HX0xFTkdUSCwKKwkJICAgICJjb25maWcsIHR5cGUoMHglMDJ4KSwgZXh0X3R5cGUoMHglMDJ4KSwgbnVtYmVyKCVkKSIsCisJCSAgICAoY29uZmlnX3JlcXVlc3QtPkhlYWRlci5QYWdlVHlwZSAmCisJCSAgICAgTVBJMl9DT05GSUdfUEFHRVRZUEVfTUFTSyksIGNvbmZpZ19yZXF1ZXN0LT5FeHRQYWdlVHlwZSwKKwkJICAgIGNvbmZpZ19yZXF1ZXN0LT5IZWFkZXIuUGFnZU51bWJlcik7CisJCWRlc2MgPSBpb2MtPnRtcF9zdHJpbmc7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSTJfRlVOQ1RJT05fUE9SVF9GQUNUUzoKKwkJZGVzYyA9ICJwb3J0X2ZhY3RzIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1BPUlRfRU5BQkxFOgorCQlkZXNjID0gInBvcnRfZW5hYmxlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTjoKKwkJZGVzYyA9ICJldmVudF9ub3RpZmljYXRpb24iOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fRldfRE9XTkxPQUQ6CisJCWRlc2MgPSAiZndfZG93bmxvYWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fRldfVVBMT0FEOgorCQlkZXNjID0gImZ3X3VwbG9hZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9SQUlEX0FDVElPTjoKKwkJZGVzYyA9ICJyYWlkX2FjdGlvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0g6CisJeworCQlNcGkyU0NTSUlPUmVxdWVzdF90ICpzY3NpX3JlcXVlc3QgPQorCQkgICAgKE1waTJTQ1NJSU9SZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKworCQlzbnByaW50Zihpb2MtPnRtcF9zdHJpbmcsIE1QVF9TVFJJTkdfTEVOR1RILAorCQkgICAgInJhaWRfcGFzcywgY21kKDB4JTAyeCksIGNkYl9sZW4oJWQpIiwKKwkJICAgIHNjc2lfcmVxdWVzdC0+Q0RCLkNEQjMyWzBdLAorCQkgICAgbGUxNl90b19jcHUoc2NzaV9yZXF1ZXN0LT5Jb0ZsYWdzKSAmIDB4Rik7CisJCWRlc2MgPSBpb2MtPnRtcF9zdHJpbmc7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDoKKwkJZGVzYyA9ICJzYXNfaW91bml0X2NudGwiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fU0FUQV9QQVNTVEhST1VHSDoKKwkJZGVzYyA9ICJzYXRhX3Bhc3MiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fRElBR19CVUZGRVJfUE9TVDoKKwkJZGVzYyA9ICJkaWFnX2J1ZmZlcl9wb3N0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0ZVTkNUSU9OX0RJQUdfUkVMRUFTRToKKwkJZGVzYyA9ICJkaWFnX3JlbGVhc2UiOworCQlicmVhazsKKwljYXNlIE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOgorCQlkZXNjID0gInNtcF9wYXNzdGhyb3VnaCI7CisJCWJyZWFrOworCX0KKworCWlmICghZGVzYykKKwkJcmV0dXJuOworCisJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogJXMsIHNtaWQoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsIGNhbGxpbmdfZnVuY3Rpb25fbmFtZSwgZGVzYywgc21pZCk7CisKKwlpZiAoIW1waV9yZXBseSkKKwkJcmV0dXJuOworCisJaWYgKG1waV9yZXBseS0+SU9DU3RhdHVzIHx8IG1waV9yZXBseS0+SU9DTG9nSW5mbykKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCSAgICAiXHRpb2NzdGF0dXMoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLAorCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKKworCWlmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwKKwkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09CisJICAgIE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSB7CisJCU1waTJTQ1NJSU9SZXBseV90ICpzY3NpX3JlcGx5ID0KKwkJICAgIChNcGkyU0NTSUlPUmVwbHlfdCAqKW1waV9yZXBseTsKKwkJaWYgKHNjc2lfcmVwbHktPlNDU0lTdGF0ZSB8fCBzY3NpX3JlcGx5LT5TQ1NJU3RhdHVzKQorCQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCQkgICAgIlx0c2NzaV9zdGF0ZSgweCUwMngpLCBzY3NpX3N0YXR1cyIKKwkJCSAgICAiKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICBzY3NpX3JlcGx5LT5TQ1NJU3RhdGUsCisJCQkgICAgc2NzaV9yZXBseS0+U0NTSVN0YXR1cyk7CisJfQorfQorI2VuZGlmCisKKy8qKgorICogbXB0MnNhc19jdGxfZG9uZSAtIGN0bCBtb2R1bGUgY29tcGxldGlvbiByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogbm9uZS4KKyAqCisgKiBUaGUgY2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIGlvYy0+Y3RsX2NiX2lkeC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQoreworCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCisJaWYgKGlvYy0+Y3RsX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQorCQlyZXR1cm47CisJaWYgKGlvYy0+Y3RsX2NtZHMuc21pZCAhPSBzbWlkKQorCQlyZXR1cm47CisJaW9jLT5jdGxfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaWYgKG1waV9yZXBseSkgeworCQltZW1jcHkoaW9jLT5jdGxfY21kcy5yZXBseSwgbXBpX3JlcGx5LCBtcGlfcmVwbHktPk1zZ0xlbmd0aCo0KTsKKwkJaW9jLT5jdGxfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVQTFlfVkFMSUQ7CisJfQorI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCV9jdGxfZGlzcGxheV9zb21lX2RlYnVnKGlvYywgc21pZCwgImN0bF9kb25lIiwgbXBpX3JlcGx5KTsKKyNlbmRpZgorCWlvYy0+Y3RsX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOworCWNvbXBsZXRlKCZpb2MtPmN0bF9jbWRzLmRvbmUpOworfQorCisvKioKKyAqIF9jdGxfY2hlY2tfZXZlbnRfdHlwZSAtIGRldGVybWluZXMgd2hlbiBhbiBldmVudCBuZWVkcyBsb2dnaW5nCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudDogZmlybXdhcmUgZXZlbnQKKyAqCisgKiBUaGUgYml0bWFzayBpbiBpb2MtPmV2ZW50X3R5cGVbXSBpbmRpY2F0ZXMgd2hpY2ggZXZlbnRzIHNob3VsZCBiZQorICogYmUgc2F2ZWQgaW4gdGhlIGRyaXZlciBldmVudF9sb2cuICBUaGlzIGJpdG1hc2sgaXMgc2V0IGJ5IGFwcGxpY2F0aW9uLgorICoKKyAqIFJldHVybnMgMSB3aGVuIGV2ZW50IHNob3VsZCBiZSBjYXB0dXJlZCwgb3IgemVybyBtZWFucyBubyBtYXRjaC4KKyAqLworc3RhdGljIGludAorX2N0bF9jaGVja19ldmVudF90eXBlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGV2ZW50KQoreworCXUxNiBpOworCXUzMiBkZXNpcmVkX2V2ZW50OworCisJaWYgKGV2ZW50ID49IDEyOCB8fCAhZXZlbnQgfHwgIWlvYy0+ZXZlbnRfbG9nKQorCQlyZXR1cm4gMDsKKworCWRlc2lyZWRfZXZlbnQgPSAoMSA8PCAoZXZlbnQgJSAzMikpOworCWlmICghZGVzaXJlZF9ldmVudCkKKwkJZGVzaXJlZF9ldmVudCA9IDE7CisJaSA9IGV2ZW50IC8gMzI7CisJcmV0dXJuIGRlc2lyZWRfZXZlbnQgJiBpb2MtPmV2ZW50X3R5cGVbaV07Cit9CisKKy8qKgorICogbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyAtIGFkZCBldmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfY3RsX2FkZF90b19ldmVudF9sb2coc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseSkKK3sKKwlzdHJ1Y3QgTVBUMl9JT0NUTF9FVkVOVFMgKmV2ZW50X2xvZzsKKwl1MTYgZXZlbnQ7CisJaW50IGk7CisJdTMyIHN6LCBldmVudF9kYXRhX3N6OworCXU4IHNlbmRfYWVuID0gMDsKKworCWlmICghaW9jLT5ldmVudF9sb2cpCisJCXJldHVybjsKKworCWV2ZW50ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FdmVudCk7CisKKwlpZiAoX2N0bF9jaGVja19ldmVudF90eXBlKGlvYywgZXZlbnQpKSB7CisKKwkJLyogaW5zZXJ0IGVudHJ5IGludG8gY2lyY3VsYXIgZXZlbnRfbG9nICovCisJCWkgPSBpb2MtPmV2ZW50X2NvbnRleHQgJSBNUFQyU0FTX0NUTF9FVkVOVF9MT0dfU0laRTsKKwkJZXZlbnRfbG9nID0gaW9jLT5ldmVudF9sb2c7CisJCWV2ZW50X2xvZ1tpXS5ldmVudCA9IGV2ZW50OworCQlldmVudF9sb2dbaV0uY29udGV4dCA9IGlvYy0+ZXZlbnRfY29udGV4dCsrOworCisJCWV2ZW50X2RhdGFfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV2ZW50RGF0YUxlbmd0aCkqNDsKKwkJc3ogPSBtaW5fdCh1MzIsIGV2ZW50X2RhdGFfc3osIE1QVDJfRVZFTlRfREFUQV9TSVpFKTsKKwkJbWVtc2V0KGV2ZW50X2xvZ1tpXS5kYXRhLCAwLCBNUFQyX0VWRU5UX0RBVEFfU0laRSk7CisJCW1lbWNweShldmVudF9sb2dbaV0uZGF0YSwgbXBpX3JlcGx5LT5FdmVudERhdGEsIHN6KTsKKwkJc2VuZF9hZW4gPSAxOworCX0KKworCS8qIFRoaXMgYWVuX2V2ZW50X3JlYWRfZmxhZyBmbGFnIGlzIHNldCB1bnRpbCB0aGUKKwkgKiBhcHBsaWNhdGlvbiBoYXMgcmVhZCB0aGUgZXZlbnQgbG9nLgorCSAqIEZvciBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCwgd2UgYWx3YXlzIG5vdGlmeS4KKwkgKi8KKwlpZiAoZXZlbnQgPT0gTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQgfHwKKwkgICAgKHNlbmRfYWVuICYmICFpb2MtPmFlbl9ldmVudF9yZWFkX2ZsYWcpKSB7CisJCWlvYy0+YWVuX2V2ZW50X3JlYWRfZmxhZyA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RsX3BvbGxfd2FpdCk7CisJCWlmIChhc3luY19xdWV1ZSkKKwkJCWtpbGxfZmFzeW5jKCZhc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCX0KK30KKworLyoqCisgKiBtcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayAtIGZpcm13YXJlIGV2ZW50IGhhbmRsZXIgKGNhbGxlZCBhdCBJU1IgdGltZSkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IGludGVycnVwdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgorICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3sKKwlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CisKKwltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwltcHQyc2FzX2N0bF9hZGRfdG9fZXZlbnRfbG9nKGlvYywgbXBpX3JlcGx5KTsKK30KKworLyoqCisgKiBfY3RsX3ZlcmlmeV9hZGFwdGVyIC0gdmFsaWRhdGVzIGlvY19udW1iZXIgcGFzc2VkIGZyb20gYXBwbGljYXRpb24KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGlvY3BwOiBUaGUgaW9jIHBvaW50ZXIgaXMgcmV0dXJuZWQgaW4gdGhpcy4KKyAqCisgKiBSZXR1cm4gKC0xKSBtZWFucyBlcnJvciwgZWxzZSBpb2NfbnVtYmVyLgorICovCitzdGF0aWMgaW50CitfY3RsX3ZlcmlmeV9hZGFwdGVyKGludCBpb2NfbnVtYmVyLCBzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICoqaW9jcHApCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZtcHQyc2FzX2lvY19saXN0LCBsaXN0KSB7CisJCWlmIChpb2MtPmlkICE9IGlvY19udW1iZXIpCisJCQljb250aW51ZTsKKwkJKmlvY3BwID0gaW9jOworCQlyZXR1cm4gaW9jX251bWJlcjsKKwl9CisJKmlvY3BwID0gTlVMTDsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGNhbGxiYWNrIGhhbmRsZXIgKGZvciBjdGwpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByZXNldF9waGFzZTogcGhhc2UKKyAqCisgKiBUaGUgaGFuZGxlciBmb3IgZG9pbmcgYW55IHJlcXVpcmVkIGNsZWFudXAgb3IgaW5pdGlhbGl6YXRpb24uCisgKgorICogVGhlIHJlc2V0IHBoYXNlIGNhbiBiZSBNUFQyX0lPQ19QUkVfUkVTRVQsIE1QVDJfSU9DX0FGVEVSX1JFU0VULAorICogTVBUMl9JT0NfRE9ORV9SRVNFVAorICovCit2b2lkCittcHQyc2FzX2N0bF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKQoreworCXN3aXRjaCAocmVzZXRfcGhhc2UpIHsKKwljYXNlIE1QVDJfSU9DX1BSRV9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX1BSRV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX0FGVEVSX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfQUZURVJfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJaWYgKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQkJaW9jLT5jdGxfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT5jdGxfY21kcy5zbWlkKTsKKwkJCWNvbXBsZXRlKCZpb2MtPmN0bF9jbWRzLmRvbmUpOworCQl9CisJCWJyZWFrOworCWNhc2UgTVBUMl9JT0NfRE9ORV9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX0RPTkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIF9jdGxfZmFzeW5jIC0KKyAqIEBmZCAtCisgKiBAZmlsZXAgLQorICogQG1vZGUgLQorICoKKyAqIENhbGxlZCB3aGVuIGFwcGxpY2F0aW9uIHJlcXVlc3QgZmFzeW4gY2FsbGJhY2sgaGFuZGxlci4KKyAqLworc3RhdGljIGludAorX2N0bF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlKQoreworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlcCwgbW9kZSwgJmFzeW5jX3F1ZXVlKTsKK30KKworLyoqCisgKiBfY3RsX3JlbGVhc2UgLQorICogQGlub2RlIC0KKyAqIEBmaWxlcCAtCisgKgorICogQ2FsbGVkIHdoZW4gYXBwbGljYXRpb24gcmVsZWFzZXMgdGhlIGZhc3luIGNhbGxiYWNrIGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQKK19jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoLTEsIGZpbGVwLCAwLCAmYXN5bmNfcXVldWUpOworfQorCisvKioKKyAqIF9jdGxfcG9sbCAtCisgKiBAZmlsZSAtCisgKiBAd2FpdCAtCisgKgorICovCitzdGF0aWMgdW5zaWduZWQgaW50CitfY3RsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGVwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKworCXBvbGxfd2FpdChmaWxlcCwgJmN0bF9wb2xsX3dhaXQsIHdhaXQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZtcHQyc2FzX2lvY19saXN0LCBsaXN0KSB7CisJCWlmIChpb2MtPmFlbl9ldmVudF9yZWFkX2ZsYWcpCisJCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2N0bF9kb190YXNrX2Fib3J0IC0gYXNzaWduIGFuIGFjdGl2ZSBzbWlkIHRvIHRoZSBhYm9ydF90YXNrCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBrYXJnIC0gKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQpCisgKiBAdG1fcmVxdWVzdCAtIHBvaW50ZXIgdG8gbWYgZnJvbSB1c2VyIHNwYWNlCisgKgorICogUmV0dXJucyAwIHdoZW4gYW4gc21pZCBpZiBmb3VuZCwgZWxzZSBmYWlsLgorICogZHVyaW5nIGZhaWx1cmUsIHRoZSByZXBseSBmcmFtZSBpcyBmaWxsZWQuCisgKi8KK3N0YXRpYyBpbnQKK19jdGxfZG9fdGFza19hYm9ydChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQgKmthcmcsCisgICAgTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqdG1fcmVxdWVzdCkKK3sKKwl1OCBmb3VuZCA9IDA7CisJdTE2IGk7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqcHJpdl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKnRtX3JlcGx5OworCXUzMiBzejsKKwl1MzIgbHVuOworCisJbHVuID0gc2NzaWx1bl90b19pbnQoKHN0cnVjdCBzY3NpX2x1biAqKXRtX3JlcXVlc3QtPkxVTik7CisKKwloYW5kbGUgPSBsZTE2X3RvX2NwdSh0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSBpb2MtPnJlcXVlc3RfZGVwdGg7IGkgJiYgIWZvdW5kOyBpLS0pIHsKKwkJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbaSAtIDFdLnNjbWQ7CisJCWlmIChzY21kID09IE5VTEwgfHwgc2NtZC0+ZGV2aWNlID09IE5VTEwgfHwKKwkJICAgIHNjbWQtPmRldmljZS0+aG9zdGRhdGEgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAobHVuICE9IHNjbWQtPmRldmljZS0+bHVuKQorCQkJY29udGludWU7CisJCXByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJCWlmIChwcml2X2RhdGEtPnNhc190YXJnZXQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUgIT0gaGFuZGxlKQorCQkJY29udGludWU7CisJCXRtX3JlcXVlc3QtPlRhc2tNSUQgPSBjcHVfdG9fbGUxNihpb2MtPnNjc2lfbG9va3VwW2kgLSAxXS5zbWlkKTsKKwkJZm91bmQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKworCWlmICghZm91bmQpIHsKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiQUJPUlRfVEFTSzogIgorCQkgICAgIkRldkhhbmRsZSgweCUwNHgpLCBsdW4oJWQpLCBubyBhY3RpdmUgbWlkISFcbiIsIGlvYy0+bmFtZSwKKwkJICAgIHRtX3JlcXVlc3QtPkRldkhhbmRsZSwgbHVuKSk7CisJCXRtX3JlcGx5ID0gaW9jLT5jdGxfY21kcy5yZXBseTsKKwkJdG1fcmVwbHktPkRldkhhbmRsZSA9IHRtX3JlcXVlc3QtPkRldkhhbmRsZTsKKwkJdG1fcmVwbHktPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVDsKKwkJdG1fcmVwbHktPlRhc2tUeXBlID0gTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSzsKKwkJdG1fcmVwbHktPk1zZ0xlbmd0aCA9IHNpemVvZihNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCkvNDsKKwkJdG1fcmVwbHktPlZQX0lEID0gdG1fcmVxdWVzdC0+VlBfSUQ7CisJCXRtX3JlcGx5LT5WRl9JRCA9IHRtX3JlcXVlc3QtPlZGX0lEOworCQlzeiA9IG1pbl90KHUzMiwga2FyZy0+bWF4X3JlcGx5X2J5dGVzLCBpb2MtPnJlcGx5X3N6KTsKKwkJaWYgKGNvcHlfdG9fdXNlcihrYXJnLT5yZXBseV9mcmFtZV9idWZfcHRyLCBpb2MtPmN0bF9jbWRzLnJlcGx5LAorCQkgICAgc3opKQorCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywKKwkJCSAgICBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gMTsKKwl9CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJBQk9SVF9UQVNLOiAiCisJICAgICJEZXZIYW5kbGUoMHglMDR4KSwgbHVuKCVkKSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwKKwkgICAgdG1fcmVxdWVzdC0+RGV2SGFuZGxlLCBsdW4sIHRtX3JlcXVlc3QtPlRhc2tNSUQpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2RvX21wdF9jb21tYW5kIC0gbWFpbiBoYW5kbGVyIGZvciBNUFQyQ09NTUFORCBvcGNvZGUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGthcmcgLSAoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCkKKyAqIEBtZiAtIHBvaW50ZXIgdG8gbWYgaW4gdXNlciBzcGFjZQorICogQHN0YXRlIC0gTk9OX0JMT0NLSU5HIG9yIEJMT0NLSU5HCisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2RvX21wdF9jb21tYW5kKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kIGthcmcsIHZvaWQgX191c2VyICptZiwgZW51bSBibG9ja19zdGF0ZSBzdGF0ZSkKK3sKKwlNUEkyUmVxdWVzdEhlYWRlcl90ICptcGlfcmVxdWVzdDsKKwlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKKwl1MzIgaW9jX3N0YXRlOworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBzbWlkOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCwgdGltZWxlZnQ7CisJdTggaXNzdWVfcmVzZXQ7CisJdTMyIHN6OworCXZvaWQgKnBzZ2U7CisJdm9pZCAqcHJpdl9zZW5zZSA9IE5VTEw7CisJdm9pZCAqZGF0YV9vdXQgPSBOVUxMOworCWRtYV9hZGRyX3QgZGF0YV9vdXRfZG1hOworCXNpemVfdCBkYXRhX291dF9zeiA9IDA7CisJdm9pZCAqZGF0YV9pbiA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX2luX2RtYTsKKwlzaXplX3QgZGF0YV9pbl9zeiA9IDA7CisJdTMyIHNnbF9mbGFnczsKKwlsb25nIHJldDsKKwl1MTYgd2FpdF9zdGF0ZV9jb3VudDsKKworCWlzc3VlX3Jlc2V0ID0gMDsKKworCWlmIChzdGF0ZSA9PSBOT05fQkxPQ0tJTkcgJiYgIW11dGV4X3RyeWxvY2soJmlvYy0+Y3RsX2NtZHMubXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlIGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlvYy0+Y3RsX2NtZHMubXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBjdGxfY21kIGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwl3YWl0X3N0YXRlX2NvdW50ID0gMDsKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJd2hpbGUgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgeworCQlpZiAod2FpdF9zdGF0ZV9jb3VudCsrID09IDEwKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3NsZWVwKDEpOworCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogd2FpdGluZyBmb3IgIgorCQkgICAgIm9wZXJhdGlvbmFsIHN0YXRlKGNvdW50PSVkKVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIHdhaXRfc3RhdGVfY291bnQpOworCX0KKwlpZiAod2FpdF9zdGF0ZV9jb3VudCkKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmN0bF9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gMDsKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJbWVtc2V0KGlvYy0+Y3RsX2NtZHMucmVwbHksIDAsIGlvYy0+cmVwbHlfc3opOworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmN0bF9jbWRzLnNtaWQgPSBzbWlkOworCWRhdGFfb3V0X3N6ID0ga2FyZy5kYXRhX291dF9zaXplOworCWRhdGFfaW5fc3ogPSBrYXJnLmRhdGFfaW5fc2l6ZTsKKworCS8qIGNvcHkgaW4gcmVxdWVzdCBtZXNzYWdlIGZyYW1lIGZyb20gdXNlciAqLworCWlmIChjb3B5X2Zyb21fdXNlcihtcGlfcmVxdWVzdCwgbWYsIGthcmcuZGF0YV9zZ2Vfb2Zmc2V0KjQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgX19mdW5jX18pOworCQlyZXQgPSAtRUZBVUxUOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwKKwkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSB7CisJCWlmICghbXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSB8fAorCQkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSA+CisJCSAgICBjcHVfdG9fbGUxNihpb2MtPmZhY3RzLk1heERldkhhbmRsZSkpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIG9idGFpbiBkbWEtYWJsZSBtZW1vcnkgZm9yIGRhdGEgdHJhbnNmZXIgKi8KKwlpZiAoZGF0YV9vdXRfc3opIC8qIFdSSVRFICovIHsKKwkJZGF0YV9vdXQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBkZXYsIGRhdGFfb3V0X3N6LAorCQkgICAgJmRhdGFfb3V0X2RtYSk7CisJCWlmICghZGF0YV9vdXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sCisJCQkgICAgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YV9vdXQsIGthcmcuZGF0YV9vdXRfYnVmX3B0ciwKKwkJCWRhdGFfb3V0X3N6KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywKKwkJCSAgICBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0ID0gIC1FRkFVTFQ7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChkYXRhX2luX3N6KSAvKiBSRUFEICovIHsKKwkJZGF0YV9pbiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgZGF0YV9pbl9zeiwKKwkJICAgICZkYXRhX2luX2RtYSk7CisJCWlmICghZGF0YV9pbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywKKwkJCSAgICBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogYWRkIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzICovCisJcHNnZSA9ICh2b2lkICopbXBpX3JlcXVlc3QgKyAoa2FyZy5kYXRhX3NnZV9vZmZzZXQqNCk7CisKKwlpZiAoIWRhdGFfb3V0X3N6ICYmICFkYXRhX2luX3N6KSB7CisJCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCBwc2dlKTsKKwl9IGVsc2UgaWYgKGRhdGFfb3V0X3N6ICYmIGRhdGFfaW5fc3opIHsKKwkJLyogV1JJVEUgc2dlbCBmaXJzdCAqLworCQlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCQkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8IE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DKTsKKwkJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShwc2dlLCBzZ2xfZmxhZ3MgfAorCQkgICAgZGF0YV9vdXRfc3osIGRhdGFfb3V0X2RtYSk7CisKKwkJLyogaW5jciBzZ2VsICovCisJCXBzZ2UgKz0gaW9jLT5zZ2Vfc2l6ZTsKKworCQkvKiBSRUFEIHNnZWwgbGFzdCAqLworCQlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCQkgICAgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8CisJCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCk7CisJCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwKKwkJICAgIGRhdGFfaW5fc3osIGRhdGFfaW5fZG1hKTsKKwl9IGVsc2UgaWYgKGRhdGFfb3V0X3N6KSAvKiBXUklURSAqLyB7CisJCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCSAgICBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSIHwKKwkJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9MSVNUIHwgTVBJMl9TR0VfRkxBR1NfSE9TVF9UT19JT0MpOworCQlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHBzZ2UsIHNnbF9mbGFncyB8CisJCSAgICBkYXRhX291dF9zeiwgZGF0YV9vdXRfZG1hKTsKKwl9IGVsc2UgaWYgKGRhdGFfaW5fc3opIC8qIFJFQUQgKi8geworCQlzZ2xfZmxhZ3MgPSAoTVBJMl9TR0VfRkxBR1NfU0lNUExFX0VMRU1FTlQgfAorCQkgICAgTVBJMl9TR0VfRkxBR1NfTEFTVF9FTEVNRU5UIHwgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8CisJCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCk7CisJCXNnbF9mbGFncyA9IHNnbF9mbGFncyA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUocHNnZSwgc2dsX2ZsYWdzIHwKKwkJICAgIGRhdGFfaW5fc3osIGRhdGFfaW5fZG1hKTsKKwl9CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gZmlybXdhcmUgKi8KKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlfY3RsX2Rpc3BsYXlfc29tZV9kZWJ1Zyhpb2MsIHNtaWQsICJjdGxfcmVxdWVzdCIsIE5VTEwpOworI2VuZGlmCisKKwlzd2l0Y2ggKG1waV9yZXF1ZXN0LT5GdW5jdGlvbikgeworCWNhc2UgTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q6CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSDoKKwl7CisJCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKnNjc2lpb19yZXF1ZXN0ID0KKwkJICAgIChNcGkyU0NTSUlPUmVxdWVzdF90ICopbXBpX3JlcXVlc3Q7CisJCXNjc2lpb19yZXF1ZXN0LT5TZW5zZUJ1ZmZlckxvd0FkZHJlc3MgPQorCQkgICAgKHUzMiltcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoaW9jLCBzbWlkKTsKKwkJcHJpdl9zZW5zZSA9IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyKGlvYywgc21pZCk7CisJCW1lbXNldChwcml2X3NlbnNlLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsIDAsCisJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVxdWVzdC0+RnVuY3Rpb25EZXBlbmRlbnQxKSk7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQ6CisJeworCQlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICp0bV9yZXF1ZXN0ID0KKwkJICAgIChNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICopbXBpX3JlcXVlc3Q7CisKKwkJaWYgKHRtX3JlcXVlc3QtPlRhc2tUeXBlID09CisJCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLKSB7CisJCQlpZiAoX2N0bF9kb190YXNrX2Fib3J0KGlvYywgJmthcmcsIHRtX3JlcXVlc3QpKQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKwkJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGxlMTZfdG9fY3B1KAorCQkgICAgdG1fcmVxdWVzdC0+RGV2SGFuZGxlKSk7CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsCisJCSAgICBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQlicmVhazsKKwl9CisJY2FzZSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDoKKwl7CisJCU1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCAqc21wX3JlcXVlc3QgPQorCQkgICAgKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCAqKW1waV9yZXF1ZXN0OworCQl1OCAqZGF0YTsKKworCQkvKiBpb2MgZGV0ZXJtaW5lcyB3aGljaCBwb3J0IHRvIHVzZSAqLworCQlzbXBfcmVxdWVzdC0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwkJaWYgKHNtcF9yZXF1ZXN0LT5QYXNzdGhyb3VnaEZsYWdzICYKKwkJICAgIE1QSTJfU01QX1BUX1JFUV9QVF9GTEFHU19JTU1FRElBVEUpCisJCQlkYXRhID0gKHU4ICopJnNtcF9yZXF1ZXN0LT5TR0w7CisJCWVsc2UKKwkJCWRhdGEgPSBkYXRhX291dDsKKworCQlpZiAoZGF0YVsxXSA9PSAweDkxICYmIChkYXRhWzEwXSA9PSAxIHx8IGRhdGFbMTBdID09IDIpKSB7CisJCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzID0gMTsKKwkJCWlvYy0+aWdub3JlX2xvZ2luZm9zID0gMTsKKwkJfQorCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDoKKwl7CisJCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90ICpzYXNpb3VuaXRfcmVxdWVzdCA9CisJCSAgICAoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgKiltcGlfcmVxdWVzdDsKKworCQlpZiAoc2FzaW91bml0X3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVAorCQkgICAgfHwgc2FzaW91bml0X3JlcXVlc3QtPk9wZXJhdGlvbiA9PQorCQkgICAgTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQpIHsKKwkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOworCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOworCQl9CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGthcmcudGltZW91dCA8IE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUKQorCQl0aW1lb3V0ID0gTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQ7CisJZWxzZQorCQl0aW1lb3V0ID0ga2FyZy50aW1lb3V0OworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCisJICAgIHRpbWVvdXQqSFopOworCWlmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVCkgeworCQlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICp0bV9yZXF1ZXN0ID0KKwkJICAgIChNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90ICopbXBpX3JlcXVlc3Q7CisJCW11dGV4X3VubG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKwkJbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKGlvYywgbGUxNl90b19jcHUoCisJCSAgICB0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpKTsKKwl9IGVsc2UgaWYgKChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0ggfHwKKwkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTCkgJiYKKwkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcykgeworCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzID0gMDsKKwkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAwOworCX0KKwlpZiAoIShpb2MtPmN0bF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwga2FyZy5kYXRhX3NnZV9vZmZzZXQpOworCQlpZiAoIShpb2MtPmN0bF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCW1waV9yZXBseSA9IGlvYy0+Y3RsX2NtZHMucmVwbHk7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmIE1QSTJfSU9DU1RBVFVTX01BU0s7CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAobXBpX3JlcGx5LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UICYmCisJICAgIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVE0pKSB7CisJCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90ICp0bV9yZXBseSA9CisJCSAgICAoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKiltcGlfcmVwbHk7CisKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJUQVNLX01HTVQ6ICIKKwkJICAgICJJT0NTdGF0dXMoMHglMDR4KSwgSU9DTG9nSW5mbygweCUwOHgpLCAiCisJCSAgICAiVGVybWluYXRpb25Db3VudCgweCUwOHgpXG4iLCBpb2MtPm5hbWUsCisJCSAgICB0bV9yZXBseS0+SU9DU3RhdHVzLCB0bV9yZXBseS0+SU9DTG9nSW5mbywKKwkJICAgIHRtX3JlcGx5LT5UZXJtaW5hdGlvbkNvdW50KTsKKwl9CisjZW5kaWYKKwkvKiBjb3B5IG91dCB4ZGF0YSB0byB1c2VyICovCisJaWYgKGRhdGFfaW5fc3opIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihrYXJnLmRhdGFfaW5fYnVmX3B0ciwgZGF0YV9pbiwKKwkJICAgIGRhdGFfaW5fc3opKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRU5PREFUQTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogY29weSBvdXQgcmVwbHkgbWVzc2FnZSBmcmFtZSB0byB1c2VyICovCisJaWYgKGthcmcubWF4X3JlcGx5X2J5dGVzKSB7CisJCXN6ID0gbWluX3QodTMyLCBrYXJnLm1heF9yZXBseV9ieXRlcywgaW9jLT5yZXBseV9zeik7CisJCWlmIChjb3B5X3RvX3VzZXIoa2FyZy5yZXBseV9mcmFtZV9idWZfcHRyLCBpb2MtPmN0bF9jbWRzLnJlcGx5LAorCQkgICAgc3opKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRU5PREFUQTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogY29weSBvdXQgc2Vuc2UgdG8gdXNlciAqLworCWlmIChrYXJnLm1heF9zZW5zZV9ieXRlcyAmJiAobXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09CisJICAgIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUIHx8IG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PQorCSAgICBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSCkpIHsKKwkJc3ogPSBtaW5fdCh1MzIsIGthcmcubWF4X3NlbnNlX2J5dGVzLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQlpZiAoY29weV90b191c2VyKGthcmcuc2Vuc2VfZGF0YV9wdHIsIHByaXZfc2Vuc2UsIHN6KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywKKwkJCSAgICBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0ID0gLUVOT0RBVEE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KSB7CisJCWlmICgobXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUIHx8CisJCSAgICBtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0KKwkJICAgIE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSkgeworCQkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlzc3VlIHRhcmdldCByZXNldDogaGFuZGxlICIKKwkJCSAgICAiPSAoMHglMDR4KVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIG1waV9yZXF1ZXN0LT5GdW5jdGlvbkRlcGVuZGVudDEpOworCQkJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKwkJCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLAorCQkJICAgIG1waV9yZXF1ZXN0LT5GdW5jdGlvbkRlcGVuZGVudDEsIDAsCisJCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VULCAwLCAxMCk7CisJCQlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJCQltdXRleF91bmxvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CisJCX0gZWxzZQorCQkJbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKKwkJCSAgICBGT1JDRV9CSUdfSEFNTUVSKTsKKwl9CisKKyBvdXQ6CisKKwkvKiBmcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggc2cgYnVmZmVycyAqLworCWlmIChkYXRhX2luKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgZGF0YV9pbl9zeiwgZGF0YV9pbiwKKwkJICAgIGRhdGFfaW5fZG1hKTsKKworCWlmIChkYXRhX291dCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBkZXYsIGRhdGFfb3V0X3N6LCBkYXRhX291dCwKKwkJICAgIGRhdGFfb3V0X2RtYSk7CisKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X3VubG9jaygmaW9jLT5jdGxfY21kcy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBfY3RsX2dldGlvY2luZm8gLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJJT0NJTkZPIG9wY29kZQorICogQGFyZyAtIHVzZXIgc3BhY2UgYnVmZmVyIGNvbnRhaW5pbmcgaW9jdGwgY29udGVudAorICovCitzdGF0aWMgbG9uZworX2N0bF9nZXRpb2NpbmZvKHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfaW9jdGxfaW9jaW5mbyBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwl1OCByZXZpc2lvbjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCW1lbXNldCgma2FyZywgMCAsIHNpemVvZihrYXJnKSk7CisJa2FyZy5hZGFwdGVyX3R5cGUgPSBNUFQyX0lPQ1RMX0lOVEVSRkFDRV9TQVMyOworCWlmIChpb2MtPnBmYWN0cykKKwkJa2FyZy5wb3J0X251bWJlciA9IGlvYy0+cGZhY3RzWzBdLlBvcnROdW1iZXI7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoaW9jLT5wZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbik7CisJa2FyZy5od19yZXYgPSByZXZpc2lvbjsKKwlrYXJnLnBjaV9pZCA9IGlvYy0+cGRldi0+ZGV2aWNlOworCWthcmcuc3Vic3lzdGVtX2RldmljZSA9IGlvYy0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwlrYXJnLnN1YnN5c3RlbV92ZW5kb3IgPSBpb2MtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJa2FyZy5wY2lfaW5mb3JtYXRpb24udS5iaXRzLmJ1cyA9IGlvYy0+cGRldi0+YnVzLT5udW1iZXI7CisJa2FyZy5wY2lfaW5mb3JtYXRpb24udS5iaXRzLmRldmljZSA9IFBDSV9TTE9UKGlvYy0+cGRldi0+ZGV2Zm4pOworCWthcmcucGNpX2luZm9ybWF0aW9uLnUuYml0cy5mdW5jdGlvbiA9IFBDSV9GVU5DKGlvYy0+cGRldi0+ZGV2Zm4pOworCWthcmcucGNpX2luZm9ybWF0aW9uLnNlZ21lbnRfaWQgPSBwY2lfZG9tYWluX25yKGlvYy0+cGRldi0+YnVzKTsKKwlrYXJnLmZpcm13YXJlX3ZlcnNpb24gPSBpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkOworCXN0cm5jcHkoa2FyZy5kcml2ZXJfdmVyc2lvbiwgTVBUMlNBU19EUklWRVJfVkVSU0lPTiwKKwkgICAgTVBUMl9JT0NUTF9WRVJTSU9OX0xFTkdUSCk7CisJa2FyZy5kcml2ZXJfdmVyc2lvbltNUFQyX0lPQ1RMX1ZFUlNJT05fTEVOR1RIIC0gMV0gPSAnXDAnOworCWthcmcuYmlvc192ZXJzaW9uID0gbGUzMl90b19jcHUoaW9jLT5iaW9zX3BnMy5CaW9zVmVyc2lvbik7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmthcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2V2ZW50cXVlcnkgLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJFVkVOVFFVRVJZIG9wY29kZQorICogQGFyZyAtIHVzZXIgc3BhY2UgYnVmZmVyIGNvbnRhaW5pbmcgaW9jdGwgY29udGVudAorICovCitzdGF0aWMgbG9uZworX2N0bF9ldmVudHF1ZXJ5KHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfaW9jdGxfZXZlbnRxdWVyeSBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCWthcmcuZXZlbnRfZW50cmllcyA9IE1QVDJTQVNfQ1RMX0VWRU5UX0xPR19TSVpFOworCW1lbWNweShrYXJnLmV2ZW50X3R5cGVzLCBpb2MtPmV2ZW50X3R5cGUsCisJICAgIE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUyAqIHNpemVvZih1MzIpKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAma2FyZywgc2l6ZW9mKGthcmcpKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZXZlbnRlbmFibGUgLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJFVkVOVEVOQUJMRSBvcGNvZGUKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqLworc3RhdGljIGxvbmcKK19jdGxfZXZlbnRlbmFibGUodm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudGVuYWJsZSBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCWlmIChpb2MtPmV2ZW50X2xvZykKKwkJcmV0dXJuIDA7CisJbWVtY3B5KGlvYy0+ZXZlbnRfdHlwZSwga2FyZy5ldmVudF90eXBlcywKKwkgICAgTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTICogc2l6ZW9mKHUzMikpOworCW1wdDJzYXNfYmFzZV92YWxpZGF0ZV9ldmVudF90eXBlKGlvYywgaW9jLT5ldmVudF90eXBlKTsKKworCS8qIGluaXRpYWxpemUgZXZlbnRfbG9nICovCisJaW9jLT5ldmVudF9jb250ZXh0ID0gMDsKKwlpb2MtPmFlbl9ldmVudF9yZWFkX2ZsYWcgPSAwOworCWlvYy0+ZXZlbnRfbG9nID0ga2NhbGxvYyhNUFQyU0FTX0NUTF9FVkVOVF9MT0dfU0laRSwKKwkgICAgc2l6ZW9mKHN0cnVjdCBNUFQyX0lPQ1RMX0VWRU5UUyksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5ldmVudF9sb2cpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2V2ZW50cmVwb3J0IC0gbWFpbiBoYW5kbGVyIGZvciBNUFQyRVZFTlRSRVBPUlQgb3Bjb2RlCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2V2ZW50cmVwb3J0KHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfaW9jdGxfZXZlbnRyZXBvcnQga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJdTMyIG51bWJlcl9ieXRlcywgbWF4X2V2ZW50cywgbWF4OworCXN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cmVwb3J0IF9fdXNlciAqdWFyZyA9IGFyZzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCW51bWJlcl9ieXRlcyA9IGthcmcuaGRyLm1heF9kYXRhX3NpemUgLQorCSAgICBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyKTsKKwltYXhfZXZlbnRzID0gbnVtYmVyX2J5dGVzL3NpemVvZihzdHJ1Y3QgTVBUMl9JT0NUTF9FVkVOVFMpOworCW1heCA9IG1pbl90KHUzMiwgTVBUMlNBU19DVExfRVZFTlRfTE9HX1NJWkUsIG1heF9ldmVudHMpOworCisJLyogSWYgZmV3ZXIgdGhhbiAxIGV2ZW50IGlzIHJlcXVlc3RlZCwgdGhlcmUgbXVzdCBoYXZlCisJICogYmVlbiBzb21lIHR5cGUgb2YgZXJyb3IuCisJICovCisJaWYgKCFtYXggfHwgIWlvYy0+ZXZlbnRfbG9nKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwludW1iZXJfYnl0ZXMgPSBtYXggKiBzaXplb2Yoc3RydWN0IE1QVDJfSU9DVExfRVZFTlRTKTsKKwlpZiAoY29weV90b191c2VyKHVhcmctPmV2ZW50X2RhdGEsIGlvYy0+ZXZlbnRfbG9nLCBudW1iZXJfYnl0ZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiByZXNldCBmbGFnIHNvIFNJR0lPIGNhbiByZXN0YXJ0ICovCisJaW9jLT5hZW5fZXZlbnRfcmVhZF9mbGFnID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2RvX3Jlc2V0IC0gbWFpbiBoYW5kbGVyIGZvciBNUFQySEFSRFJFU0VUIG9wY29kZQorICogQGFyZyAtIHVzZXIgc3BhY2UgYnVmZmVyIGNvbnRhaW5pbmcgaW9jdGwgY29udGVudAorICovCitzdGF0aWMgbG9uZworX2N0bF9kb19yZXNldCh2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBtcHQyX2lvY3RsX2RpYWdfcmVzZXQga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJaW50IHJldHZhbDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKKwkgICAgX19mdW5jX18pKTsKKworCXJldHZhbCA9IG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCisJICAgIEZPUkNFX0JJR19IQU1NRVIpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJob3N0IHJlc2V0OiAlc1xuIiwKKwkgICAgaW9jLT5uYW1lLCAoKCFyZXR2YWwpID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2J0ZGhfc2VhcmNoX3Nhc19kZXZpY2UgLSBzZWFyY2hpbmcgZm9yIHNhcyBkZXZpY2UKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGJ0ZGg6IGJ0ZGggaW9jdGwgcGF5bG9hZAorICovCitzdGF0aWMgaW50CitfY3RsX2J0ZGhfc2VhcmNoX3Nhc19kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2J0ZGhfbWFwcGluZyAqYnRkaCkKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJaWYgKGxpc3RfZW1wdHkoJmlvYy0+c2FzX2RldmljZV9saXN0KSkKKwkJcmV0dXJuIHJjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZGV2aWNlLCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ0ZGgtPmJ1cyA9PSAweEZGRkZGRkZGICYmIGJ0ZGgtPmlkID09IDB4RkZGRkZGRkYgJiYKKwkJICAgIGJ0ZGgtPmhhbmRsZSA9PSBzYXNfZGV2aWNlLT5oYW5kbGUpIHsKKwkJCWJ0ZGgtPmJ1cyA9IHNhc19kZXZpY2UtPmNoYW5uZWw7CisJCQlidGRoLT5pZCA9IHNhc19kZXZpY2UtPmlkOworCQkJcmMgPSAxOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoYnRkaC0+YnVzID09IHNhc19kZXZpY2UtPmNoYW5uZWwgJiYgYnRkaC0+aWQgPT0KKwkJICAgIHNhc19kZXZpY2UtPmlkICYmIGJ0ZGgtPmhhbmRsZSA9PSAweEZGRkYpIHsKKwkJCWJ0ZGgtPmhhbmRsZSA9IHNhc19kZXZpY2UtPmhhbmRsZTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfY3RsX2J0ZGhfc2VhcmNoX3JhaWRfZGV2aWNlIC0gc2VhcmNoaW5nIGZvciByYWlkIGRldmljZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAYnRkaDogYnRkaCBpb2N0bCBwYXlsb2FkCisgKi8KK3N0YXRpYyBpbnQKK19jdGxfYnRkaF9zZWFyY2hfcmFpZF9kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2J0ZGhfbWFwcGluZyAqYnRkaCkKK3sKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5yYWlkX2RldmljZV9saXN0KSkKKwkJcmV0dXJuIHJjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmFpZF9kZXZpY2UsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ0ZGgtPmJ1cyA9PSAweEZGRkZGRkZGICYmIGJ0ZGgtPmlkID09IDB4RkZGRkZGRkYgJiYKKwkJICAgIGJ0ZGgtPmhhbmRsZSA9PSByYWlkX2RldmljZS0+aGFuZGxlKSB7CisJCQlidGRoLT5idXMgPSByYWlkX2RldmljZS0+Y2hhbm5lbDsKKwkJCWJ0ZGgtPmlkID0gcmFpZF9kZXZpY2UtPmlkOworCQkJcmMgPSAxOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoYnRkaC0+YnVzID09IHJhaWRfZGV2aWNlLT5jaGFubmVsICYmIGJ0ZGgtPmlkID09CisJCSAgICByYWlkX2RldmljZS0+aWQgJiYgYnRkaC0+aGFuZGxlID09IDB4RkZGRikgeworCQkJYnRkaC0+aGFuZGxlID0gcmFpZF9kZXZpY2UtPmhhbmRsZTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2N0bF9idGRoX21hcHBpbmcgLSBtYWluIGhhbmRsZXIgZm9yIE1QVDJCVERITUFQUElORyBvcGNvZGUKKyAqIEBhcmcgLSB1c2VyIHNwYWNlIGJ1ZmZlciBjb250YWluaW5nIGlvY3RsIGNvbnRlbnQKKyAqLworc3RhdGljIGxvbmcKK19jdGxfYnRkaF9tYXBwaW5nKHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfaW9jdGxfYnRkaF9tYXBwaW5nIGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCWludCByYzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJcmMgPSBfY3RsX2J0ZGhfc2VhcmNoX3Nhc19kZXZpY2UoaW9jLCAma2FyZyk7CisJaWYgKCFyYykKKwkJX2N0bF9idGRoX3NlYXJjaF9yYWlkX2RldmljZShpb2MsICZrYXJnKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAma2FyZywgc2l6ZW9mKGthcmcpKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9jdGxfZGlhZ19jYXBhYmlsaXR5IC0gcmV0dXJuIGRpYWcgYnVmZmVyIGNhcGFiaWxpdHkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGJ1ZmZlcl90eXBlOiBzcGVjaWZpZXMgZWl0aGVyIFRSQUNFIG9yIFNOQVBTSE9UCisgKgorICogcmV0dXJucyAxIHdoZW4gZGlhZyBidWZmZXIgc3VwcG9ydCBpcyBlbmFibGVkIGluIGZpcm13YXJlCisgKi8KK3N0YXRpYyB1OAorX2N0bF9kaWFnX2NhcGFiaWxpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBidWZmZXJfdHlwZSkKK3sKKwl1OCByYyA9IDA7CisKKwlzd2l0Y2ggKGJ1ZmZlcl90eXBlKSB7CisJY2FzZSBNUEkyX0RJQUdfQlVGX1RZUEVfVFJBQ0U6CisJCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRElBR19UUkFDRV9CVUZGRVIpCisJCQlyYyA9IDE7CisJCWJyZWFrOworCWNhc2UgTVBJMl9ESUFHX0JVRl9UWVBFX1NOQVBTSE9UOgorCQlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgorCQkgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1NOQVBTSE9UX0JVRkZFUikKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9jdGxfZGlhZ19yZWdpc3RlciAtIGFwcGxpY2F0aW9uIHJlZ2lzdGVyIHdpdGggZHJpdmVyCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKiBAc3RhdGUgLSBOT05fQkxPQ0tJTkcgb3IgQkxPQ0tJTkcKKyAqCisgKiBUaGlzIHdpbGwgYWxsb3cgdGhlIGRyaXZlciB0byBzZXR1cCBhbnkgcmVxdWlyZWQgYnVmZmVycyB0aGF0IHdpbGwgYmUKKyAqIG5lZWRlZCBieSBmaXJtd2FyZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2RpYWdfcmVnaXN0ZXIodm9pZCBfX3VzZXIgKmFyZywgZW51bSBibG9ja19zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXB0Ml9kaWFnX3JlZ2lzdGVyIGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCWludCByYywgaTsKKwl2b2lkICpyZXF1ZXN0X2RhdGEgPSBOVUxMOworCWRtYV9hZGRyX3QgcmVxdWVzdF9kYXRhX2RtYTsKKwl1MzIgcmVxdWVzdF9kYXRhX3N6ID0gMDsKKwlNcGkyRGlhZ0J1ZmZlclBvc3RSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCU1waTJEaWFnQnVmZmVyUG9zdFJlcGx5X3QgKm1waV9yZXBseTsKKwl1OCBidWZmZXJfdHlwZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXUxNiBzbWlkOworCXUxNiBpb2Nfc3RhdHVzOworCXU4IGlzc3VlX3Jlc2V0ID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJYnVmZmVyX3R5cGUgPSBrYXJnLmJ1ZmZlcl90eXBlOworCWlmICghX2N0bF9kaWFnX2NhcGFiaWxpdHkoaW9jLCBidWZmZXJfdHlwZSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGRvZXNuJ3QgaGF2ZSBjYXBhYmlsaXR5IGZvciAiCisJCSAgICAiYnVmZmVyX3R5cGUoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gJgorCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFR0lTVEVSRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGFscmVhZHkgaGFzIGEgcmVnaXN0ZXJlZCAiCisJCSAgICAiYnVmZmVyIGZvciBidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkgICAgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2FyZy5yZXF1ZXN0ZWRfYnVmZmVyX3NpemUgJSA0KSAgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGhlIHJlcXVlc3RlZF9idWZmZXJfc2l6ZSAiCisJCSAgICAiaXMgbm90IDQgYnl0ZSBhbGlnbmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0YXRlID09IE5PTl9CTE9DS0lORyAmJiAhbXV0ZXhfdHJ5bG9jaygmaW9jLT5jdGxfY21kcy5tdXRleCkpCisJCXJldHVybiAtRUFHQUlOOworCWVsc2UgaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW9jLT5jdGxfY21kcy5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGN0bF9jbWQgaW4gdXNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+Y3RsX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJbWVtc2V0KGlvYy0+Y3RsX2NtZHMucmVwbHksIDAsIGlvYy0+cmVwbHlfc3opOworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKwlpb2MtPmN0bF9jbWRzLnNtaWQgPSBzbWlkOworCisJcmVxdWVzdF9kYXRhID0gaW9jLT5kaWFnX2J1ZmZlcltidWZmZXJfdHlwZV07CisJcmVxdWVzdF9kYXRhX3N6ID0ga2FyZy5yZXF1ZXN0ZWRfYnVmZmVyX3NpemU7CisJaW9jLT51bmlxdWVfaWRbYnVmZmVyX3R5cGVdID0ga2FyZy51bmlxdWVfaWQ7CisJaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdID0gMDsKKwltZW1jcHkoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXSwga2FyZy5wcm9kdWN0X3NwZWNpZmljLAorCSAgICBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTKTsKKwlpb2MtPmRpYWdub3N0aWNfZmxhZ3NbYnVmZmVyX3R5cGVdID0ga2FyZy5kaWFnbm9zdGljX2ZsYWdzOworCisJaWYgKHJlcXVlc3RfZGF0YSkgeworCQlyZXF1ZXN0X2RhdGFfZG1hID0gaW9jLT5kaWFnX2J1ZmZlcl9kbWFbYnVmZmVyX3R5cGVdOworCQlpZiAocmVxdWVzdF9kYXRhX3N6ICE9IGlvYy0+ZGlhZ19idWZmZXJfc3pbYnVmZmVyX3R5cGVdKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwKKwkJCSAgICBpb2MtPmRpYWdfYnVmZmVyX3N6W2J1ZmZlcl90eXBlXSwKKwkJCSAgICByZXF1ZXN0X2RhdGEsIHJlcXVlc3RfZGF0YV9kbWEpOworCQkJcmVxdWVzdF9kYXRhID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChyZXF1ZXN0X2RhdGEgPT0gTlVMTCkgeworCQlpb2MtPmRpYWdfYnVmZmVyX3N6W2J1ZmZlcl90eXBlXSA9IDA7CisJCWlvYy0+ZGlhZ19idWZmZXJfZG1hW2J1ZmZlcl90eXBlXSA9IDA7CisJCXJlcXVlc3RfZGF0YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KAorCQkJaW9jLT5wZGV2LCByZXF1ZXN0X2RhdGFfc3osICZyZXF1ZXN0X2RhdGFfZG1hKTsKKwkJaWYgKHJlcXVlc3RfZGF0YSA9PSBOVUxMKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGFsbG9jYXRpbmcgbWVtb3J5IgorCQkJICAgICIgZm9yIGRpYWcgYnVmZmVycywgcmVxdWVzdGVkIHNpemUoJWQpXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHJlcXVlc3RfZGF0YV9zeik7CisJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpb2MtPmRpYWdfYnVmZmVyW2J1ZmZlcl90eXBlXSA9IHJlcXVlc3RfZGF0YTsKKwkJaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV0gPSByZXF1ZXN0X2RhdGFfc3o7CisJCWlvYy0+ZGlhZ19idWZmZXJfZG1hW2J1ZmZlcl90eXBlXSA9IHJlcXVlc3RfZGF0YV9kbWE7CisJfQorCisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9ESUFHX0JVRkZFUl9QT1NUOworCW1waV9yZXF1ZXN0LT5CdWZmZXJUeXBlID0ga2FyZy5idWZmZXJfdHlwZTsKKwltcGlfcmVxdWVzdC0+RmxhZ3MgPSBjcHVfdG9fbGUzMihrYXJnLmRpYWdub3N0aWNfZmxhZ3MpOworCW1waV9yZXF1ZXN0LT5CdWZmZXJBZGRyZXNzID0gY3B1X3RvX2xlNjQocmVxdWVzdF9kYXRhX2RtYSk7CisJbXBpX3JlcXVlc3QtPkJ1ZmZlckxlbmd0aCA9IGNwdV90b19sZTMyKHJlcXVlc3RfZGF0YV9zeik7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZGlhZ19idWZmZXIoMHglcCksICIKKwkgICAgImRtYSgweCVsbHgpLCBzeiglZClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIHJlcXVlc3RfZGF0YSwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXF1ZXN0X2RhdGFfZG1hLCBtcGlfcmVxdWVzdC0+QnVmZmVyTGVuZ3RoKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVBUMl9QUk9EVUNUX1NQRUNJRklDX0RXT1JEUzsgaSsrKQorCQltcGlfcmVxdWVzdC0+UHJvZHVjdFNwZWNpZmljW2ldID0KKwkJCWNwdV90b19sZTMyKGlvYy0+cHJvZHVjdF9zcGVjaWZpY1tidWZmZXJfdHlwZV1baV0pOworCisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCisJICAgIE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUKkhaKTsKKworCWlmICghKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXyk7CisJCV9kZWJ1Z19kdW1wX21mKG1waV9yZXF1ZXN0LAorCQkgICAgc2l6ZW9mKE1waTJEaWFnQnVmZmVyUG9zdFJlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQorCQkJaXNzdWVfcmVzZXQgPSAxOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCisJLyogcHJvY2VzcyB0aGUgY29tcGxldGVkIFJlcGx5IE1lc3NhZ2UgRnJhbWUgKi8KKwlpZiAoKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpID09IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IG5vIHJlcGx5IG1lc3NhZ2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwltcGlfcmVwbHkgPSBpb2MtPmN0bF9jbWRzLnJlcGx5OworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cykgJiBNUEkyX0lPQ1NUQVRVU19NQVNLOworCisJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gfD0KKwkJCU1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRDsKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IHN1Y2Nlc3NcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaW9jX3N0YXR1cygweCUwNHgpICIKKwkJICAgICJsb2dfaW5mbygweCUwOHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkgICAgaW9jX3N0YXR1cywgbXBpX3JlcGx5LT5JT0NMb2dJbmZvKTsKKwkJcmMgPSAtRUZBVUxUOworCX0KKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisKKyBvdXQ6CisKKwlpZiAocmMgJiYgcmVxdWVzdF9kYXRhKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgcmVxdWVzdF9kYXRhX3N6LAorCQkgICAgcmVxdWVzdF9kYXRhLCByZXF1ZXN0X2RhdGFfZG1hKTsKKworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2N0bF9kaWFnX3VucmVnaXN0ZXIgLSBhcHBsaWNhdGlvbiB1bnJlZ2lzdGVyIHdpdGggZHJpdmVyCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKgorICogVGhpcyB3aWxsIGFsbG93IHRoZSBkcml2ZXIgdG8gY2xlYW51cCBhbnkgbWVtb3J5IGFsbG9jYXRlZCBmb3IgZGlhZworICogbWVzc2FnZXMgYW5kIHRvIGZyZWUgdXAgYW55IHJlc291cmNlcy4KKyAqLworc3RhdGljIGxvbmcKK19jdGxfZGlhZ191bnJlZ2lzdGVyKHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IG1wdDJfZGlhZ191bnJlZ2lzdGVyIGthcmc7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCXZvaWQgKnJlcXVlc3RfZGF0YTsKKwlkbWFfYWRkcl90IHJlcXVlc3RfZGF0YV9kbWE7CisJdTMyIHJlcXVlc3RfZGF0YV9zejsKKwl1OCBidWZmZXJfdHlwZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJYnVmZmVyX3R5cGUgPSBrYXJnLnVuaXF1ZV9pZCAmIDB4MDAwMDAwZmY7CisJaWYgKCFfY3RsX2RpYWdfY2FwYWJpbGl0eShpb2MsIGJ1ZmZlcl90eXBlKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG9lc24ndCBoYXZlIGNhcGFiaWxpdHkgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gJgorCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFR0lTVEVSRUQpID09IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGJ1ZmZlcl90eXBlKDB4JTAyeCkgaXMgbm90ICIKKwkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVMRUFTRUQpID09IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGJ1ZmZlcl90eXBlKDB4JTAyeCkgaGFzIG5vdCBiZWVuICIKKwkJICAgICJyZWxlYXNlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2FyZy51bmlxdWVfaWQgIT0gaW9jLT51bmlxdWVfaWRbYnVmZmVyX3R5cGVdKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB1bmlxdWVfaWQoMHglMDh4KSBpcyBub3QgIgorCQkgICAgInJlZ2lzdGVyZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGthcmcudW5pcXVlX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVxdWVzdF9kYXRhID0gaW9jLT5kaWFnX2J1ZmZlcltidWZmZXJfdHlwZV07CisJaWYgKCFyZXF1ZXN0X2RhdGEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGRvZXNuJ3QgaGF2ZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAiCisJCSAgICAiYnVmZmVyX3R5cGUoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXF1ZXN0X2RhdGFfc3ogPSBpb2MtPmRpYWdfYnVmZmVyX3N6W2J1ZmZlcl90eXBlXTsKKwlyZXF1ZXN0X2RhdGFfZG1hID0gaW9jLT5kaWFnX2J1ZmZlcl9kbWFbYnVmZmVyX3R5cGVdOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCByZXF1ZXN0X2RhdGFfc3osCisJICAgIHJlcXVlc3RfZGF0YSwgcmVxdWVzdF9kYXRhX2RtYSk7CisJaW9jLT5kaWFnX2J1ZmZlcltidWZmZXJfdHlwZV0gPSBOVUxMOworCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2N0bF9kaWFnX3F1ZXJ5IC0gcXVlcnkgcmVsZXZhbnQgaW5mbyBhc3NvY2lhdGVkIHdpdGggZGlhZyBidWZmZXJzCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKgorICogVGhlIGFwcGxpY2F0aW9uIHdpbGwgc2VuZCBvbmx5IGJ1ZmZlcl90eXBlIGFuZCB1bmlxdWVfaWQuICBEcml2ZXIgd2lsbAorICogaW5zcGVjdCB1bmlxdWVfaWQgZmlyc3QsIGlmIHZhbGlkLCBmaWxsIGluIGFsbCB0aGUgaW5mby4gIElmIHVuaXF1ZV9pZCBpcworICogMHgwMCwgdGhlIGRyaXZlciB3aWxsIHJldHVybiBpbmZvIHNwZWNpZmllZCBieSBCdWZmZXIgVHlwZS4KKyAqLworc3RhdGljIGxvbmcKK19jdGxfZGlhZ19xdWVyeSh2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBtcHQyX2RpYWdfcXVlcnkga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJdm9pZCAqcmVxdWVzdF9kYXRhOworCWludCBpOworCXU4IGJ1ZmZlcl90eXBlOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCisJICAgIF9fZnVuY19fKSk7CisKKwlrYXJnLmFwcGxpY2F0aW9uX2ZsYWdzID0gMDsKKwlidWZmZXJfdHlwZSA9IGthcmcuYnVmZmVyX3R5cGU7CisKKwlpZiAoIV9jdGxfZGlhZ19jYXBhYmlsaXR5KGlvYywgYnVmZmVyX3R5cGUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgY2FwYWJpbGl0eSBmb3IgIgorCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAoKGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSAmCisJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVmZmVyX3R5cGUoMHglMDJ4KSBpcyBub3QgIgorCQkgICAgInJlZ2lzdGVyZWRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGthcmcudW5pcXVlX2lkICYgMHhmZmZmZmYwMCkgeworCQlpZiAoa2FyZy51bmlxdWVfaWQgIT0gaW9jLT51bmlxdWVfaWRbYnVmZmVyX3R5cGVdKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdW5pcXVlX2lkKDB4JTA4eCkgaXMgbm90ICIKKwkJCSAgICAicmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkJCSAgICBrYXJnLnVuaXF1ZV9pZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJlcXVlc3RfZGF0YSA9IGlvYy0+ZGlhZ19idWZmZXJbYnVmZmVyX3R5cGVdOworCWlmICghcmVxdWVzdF9kYXRhKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgYnVmZmVyIGZvciAiCisJCSAgICAiYnVmZmVyX3R5cGUoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdICYgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRCkKKwkJa2FyZy5hcHBsaWNhdGlvbl9mbGFncyA9IChNUFQyX0FQUF9GTEFHU19BUFBfT1dORUQgfAorCQkgICAgTVBUMl9BUFBfRkxBR1NfQlVGRkVSX1ZBTElEKTsKKwllbHNlCisJCWthcmcuYXBwbGljYXRpb25fZmxhZ3MgPSAoTVBUMl9BUFBfRkxBR1NfQVBQX09XTkVEIHwKKwkJICAgIE1QVDJfQVBQX0ZMQUdTX0JVRkZFUl9WQUxJRCB8CisJCSAgICBNUFQyX0FQUF9GTEFHU19GV19CVUZGRVJfQUNDRVNTKTsKKworCWZvciAoaSA9IDA7IGkgPCBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTOyBpKyspCisJCWthcmcucHJvZHVjdF9zcGVjaWZpY1tpXSA9CisJCSAgICBpb2MtPnByb2R1Y3Rfc3BlY2lmaWNbYnVmZmVyX3R5cGVdW2ldOworCisJa2FyZy50b3RhbF9idWZmZXJfc2l6ZSA9IGlvYy0+ZGlhZ19idWZmZXJfc3pbYnVmZmVyX3R5cGVdOworCWthcmcuZHJpdmVyX2FkZGVkX2J1ZmZlcl9zaXplID0gMDsKKwlrYXJnLnVuaXF1ZV9pZCA9IGlvYy0+dW5pcXVlX2lkW2J1ZmZlcl90eXBlXTsKKwlrYXJnLmRpYWdub3N0aWNfZmxhZ3MgPSBpb2MtPmRpYWdub3N0aWNfZmxhZ3NbYnVmZmVyX3R5cGVdOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZrYXJnLCBzaXplb2Yoc3RydWN0IG1wdDJfZGlhZ19xdWVyeSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB1bmFibGUgdG8gd3JpdGUgbXB0Ml9kaWFnX3F1ZXJ5ICIKKwkJICAgICJkYXRhIEAgJXBcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGFyZyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfY3RsX2RpYWdfcmVsZWFzZSAtIHJlcXVlc3QgdG8gc2VuZCBEaWFnIFJlbGVhc2UgTWVzc2FnZSB0byBmaXJtd2FyZQorICogQGFyZyAtIHVzZXIgc3BhY2UgYnVmZmVyIGNvbnRhaW5pbmcgaW9jdGwgY29udGVudAorICogQHN0YXRlIC0gTk9OX0JMT0NLSU5HIG9yIEJMT0NLSU5HCisgKgorICogVGhpcyBhbGxvd3Mgb3duZXJzaGlwIG9mIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHRvIHJldHVybmVkIHRvIHRoZSBkcml2ZXIsCisgKiBhbGxvd2luZyBhbiBhcHBsaWNhdGlvbiB0byByZWFkIHRoZSBidWZmZXIgd2l0aG91dCBmZWFyIHRoYXQgZmlybXdhcmUgaXMKKyAqIG92ZXJ3cml0dGluZyBpbmZvcm1hdGlvbiBpbiB0aGUgYnVmZmVyLgorICovCitzdGF0aWMgbG9uZworX2N0bF9kaWFnX3JlbGVhc2Uodm9pZCBfX3VzZXIgKmFyZywgZW51bSBibG9ja19zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXB0Ml9kaWFnX3JlbGVhc2Uga2FyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJdm9pZCAqcmVxdWVzdF9kYXRhOworCWludCByYzsKKwlNcGkyRGlhZ1JlbGVhc2VSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCU1waTJEaWFnUmVsZWFzZVJlcGx5X3QgKm1waV9yZXBseTsKKwl1OCBidWZmZXJfdHlwZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXUxNiBzbWlkOworCXUxNiBpb2Nfc3RhdHVzOworCXU4IGlzc3VlX3Jlc2V0ID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJYnVmZmVyX3R5cGUgPSBrYXJnLnVuaXF1ZV9pZCAmIDB4MDAwMDAwZmY7CisJaWYgKCFfY3RsX2RpYWdfY2FwYWJpbGl0eShpb2MsIGJ1ZmZlcl90eXBlKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG9lc24ndCBoYXZlIGNhcGFiaWxpdHkgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKChpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gJgorCSAgICBNUFQyX0RJQUdfQlVGRkVSX0lTX1JFR0lTVEVSRUQpID09IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGJ1ZmZlcl90eXBlKDB4JTAyeCkgaXMgbm90ICIKKwkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChrYXJnLnVuaXF1ZV9pZCAhPSBpb2MtPnVuaXF1ZV9pZFtidWZmZXJfdHlwZV0pIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHVuaXF1ZV9pZCgweCUwOHgpIGlzIG5vdCAiCisJCSAgICAicmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywga2FyZy51bmlxdWVfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdICYKKwkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVmZmVyX3R5cGUoMHglMDJ4KSAiCisJCSAgICAiaXMgYWxyZWFkeSByZWxlYXNlZFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkJICAgIGJ1ZmZlcl90eXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxdWVzdF9kYXRhID0gaW9jLT5kaWFnX2J1ZmZlcltidWZmZXJfdHlwZV07CisKKwlpZiAoIXJlcXVlc3RfZGF0YSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG9lc24ndCBoYXZlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChzdGF0ZSA9PSBOT05fQkxPQ0tJTkcgJiYgIW11dGV4X3RyeWxvY2soJmlvYy0+Y3RsX2NtZHMubXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlIGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlvYy0+Y3RsX2NtZHMubXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBjdGxfY21kIGluIHVzZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPmN0bF9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IDA7CisJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCW1lbXNldChpb2MtPmN0bF9jbWRzLnJlcGx5LCAwLCBpb2MtPnJlcGx5X3N6KTsKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT5jdGxfY21kcy5zbWlkID0gc21pZDsKKworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRElBR19SRUxFQVNFOworCW1waV9yZXF1ZXN0LT5CdWZmZXJUeXBlID0gYnVmZmVyX3R5cGU7CisKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKKwkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOworCisJaWYgKCEoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMkRpYWdSZWxlYXNlUmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlpc3N1ZV9yZXNldCA9IDE7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisKKwkvKiBwcm9jZXNzIHRoZSBjb21wbGV0ZWQgUmVwbHkgTWVzc2FnZSBGcmFtZSAqLworCWlmICgoaW9jLT5jdGxfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgPT0gMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogbm8gcmVwbHkgbWVzc2FnZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCW1waV9yZXBseSA9IGlvYy0+Y3RsX2NtZHMucmVwbHk7CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmIE1QSTJfSU9DU1RBVFVTX01BU0s7CisKKwlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2J1ZmZlcl90eXBlXSB8PQorCQkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRDsKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IHN1Y2Nlc3NcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaW9jX3N0YXR1cygweCUwNHgpICIKKwkJICAgICJsb2dfaW5mbygweCUwOHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkgICAgaW9jX3N0YXR1cywgbXBpX3JlcGx5LT5JT0NMb2dJbmZvKTsKKwkJcmMgPSAtRUZBVUxUOworCX0KKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisKKyBvdXQ6CisKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X3VubG9jaygmaW9jLT5jdGxfY21kcy5tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9jdGxfZGlhZ19yZWFkX2J1ZmZlciAtIHJlcXVlc3QgZm9yIGNvcHkgb2YgdGhlIGRpYWcgYnVmZmVyCisgKiBAYXJnIC0gdXNlciBzcGFjZSBidWZmZXIgY29udGFpbmluZyBpb2N0bCBjb250ZW50CisgKiBAc3RhdGUgLSBOT05fQkxPQ0tJTkcgb3IgQkxPQ0tJTkcKKyAqLworc3RhdGljIGxvbmcKK19jdGxfZGlhZ19yZWFkX2J1ZmZlcih2b2lkIF9fdXNlciAqYXJnLCBlbnVtIGJsb2NrX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBtcHQyX2RpYWdfcmVhZF9idWZmZXIga2FyZzsKKwlzdHJ1Y3QgbXB0Ml9kaWFnX3JlYWRfYnVmZmVyIF9fdXNlciAqdWFyZyA9IGFyZzsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJdm9pZCAqcmVxdWVzdF9kYXRhLCAqZGlhZ19kYXRhOworCU1waTJEaWFnQnVmZmVyUG9zdFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJTXBpMkRpYWdCdWZmZXJQb3N0UmVwbHlfdCAqbXBpX3JlcGx5OworCWludCByYywgaTsKKwl1OCBidWZmZXJfdHlwZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXUxNiBzbWlkOworCXUxNiBpb2Nfc3RhdHVzOworCXU4IGlzc3VlX3Jlc2V0ID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZywgYXJnLCBzaXplb2Yoa2FyZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJYnVmZmVyX3R5cGUgPSBrYXJnLnVuaXF1ZV9pZCAmIDB4MDAwMDAwZmY7CisJaWYgKCFfY3RsX2RpYWdfY2FwYWJpbGl0eShpb2MsIGJ1ZmZlcl90eXBlKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG9lc24ndCBoYXZlIGNhcGFiaWxpdHkgZm9yICIKKwkJICAgICJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKGthcmcudW5pcXVlX2lkICE9IGlvYy0+dW5pcXVlX2lkW2J1ZmZlcl90eXBlXSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdW5pcXVlX2lkKDB4JTA4eCkgaXMgbm90ICIKKwkJICAgICJyZWdpc3RlcmVkXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBrYXJnLnVuaXF1ZV9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlcXVlc3RfZGF0YSA9IGlvYy0+ZGlhZ19idWZmZXJbYnVmZmVyX3R5cGVdOworCWlmICghcmVxdWVzdF9kYXRhKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBkb2Vzbid0IGhhdmUgYnVmZmVyIGZvciAiCisJCSAgICAiYnVmZmVyX3R5cGUoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgYnVmZmVyX3R5cGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoKGthcmcuc3RhcnRpbmdfb2Zmc2V0ICUgNCkgfHwgKGthcmcuYnl0ZXNfdG9fcmVhZCAlIDQpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBlaXRoZXIgdGhlIHN0YXJ0aW5nX29mZnNldCAiCisJCSAgICAib3IgYnl0ZXNfdG9fcmVhZCBhcmUgbm90IDQgYnl0ZSBhbGlnbmVkXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRpYWdfZGF0YSA9ICh2b2lkICopKHJlcXVlc3RfZGF0YSArIGthcmcuc3RhcnRpbmdfb2Zmc2V0KTsKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZGlhZ19idWZmZXIoJXApLCAiCisJICAgICJvZmZzZXQoJWQpLCBzeiglZClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJICAgIGRpYWdfZGF0YSwga2FyZy5zdGFydGluZ19vZmZzZXQsIGthcmcuYnl0ZXNfdG9fcmVhZCkpOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKil1YXJnLT5kaWFnbm9zdGljX2RhdGEsCisJICAgIGRpYWdfZGF0YSwga2FyZy5ieXRlc190b19yZWFkKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogVW5hYmxlIHRvIHdyaXRlICIKKwkJICAgICJtcHRfZGlhZ19yZWFkX2J1ZmZlcl90IGRhdGEgQCAlcFxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIGRpYWdfZGF0YSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICgoa2FyZy5mbGFncyAmIE1QVDJfRkxBR1NfUkVSRUdJU1RFUikgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogUmVyZWdpc3RlciAiCisJCSJidWZmZXJfdHlwZSgweCUwMngpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBidWZmZXJfdHlwZSkpOworCWlmICgoaW9jLT5kaWFnX2J1ZmZlcl9zdGF0dXNbYnVmZmVyX3R5cGVdICYKKwkgICAgTVBUMl9ESUFHX0JVRkZFUl9JU19SRUxFQVNFRCkgPT0gMCkgeworCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgImJ1ZmZlcl90eXBlKDB4JTAyeCkgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuIiwgaW9jLT5uYW1lLAorCQkgICAgIF9fZnVuY19fLCBidWZmZXJfdHlwZSkpOworCQlyZXR1cm4gMDsKKwl9CisJLyogR2V0IGEgZnJlZSByZXF1ZXN0IGZyYW1lIGFuZCBzYXZlIHRoZSBtZXNzYWdlIGNvbnRleHQuCisJKi8KKwlpZiAoc3RhdGUgPT0gTk9OX0JMT0NLSU5HICYmICFtdXRleF90cnlsb2NrKCZpb2MtPmN0bF9jbWRzLm11dGV4KSkKKwkJcmV0dXJuIC1FQUdBSU47CisJZWxzZSBpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpb2MtPmN0bF9jbWRzLm11dGV4KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChpb2MtPmN0bF9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogY3RsX2NtZCBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5jdGxfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOworCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfUEVORElORzsKKwltZW1zZXQoaW9jLT5jdGxfY21kcy5yZXBseSwgMCwgaW9jLT5yZXBseV9zeik7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+Y3RsX2NtZHMuc21pZCA9IHNtaWQ7CisKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0RJQUdfQlVGRkVSX1BPU1Q7CisJbXBpX3JlcXVlc3QtPkJ1ZmZlclR5cGUgPSBidWZmZXJfdHlwZTsKKwltcGlfcmVxdWVzdC0+QnVmZmVyTGVuZ3RoID0KKwkgICAgY3B1X3RvX2xlMzIoaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV0pOworCW1waV9yZXF1ZXN0LT5CdWZmZXJBZGRyZXNzID0KKwkgICAgY3B1X3RvX2xlNjQoaW9jLT5kaWFnX2J1ZmZlcl9kbWFbYnVmZmVyX3R5cGVdKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVBUMl9QUk9EVUNUX1NQRUNJRklDX0RXT1JEUzsgaSsrKQorCQltcGlfcmVxdWVzdC0+UHJvZHVjdFNwZWNpZmljW2ldID0KKwkJCWNwdV90b19sZTMyKGlvYy0+cHJvZHVjdF9zcGVjaWZpY1tidWZmZXJfdHlwZV1baV0pOworCisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCisJICAgIE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUKkhaKTsKKworCWlmICghKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXyk7CisJCV9kZWJ1Z19kdW1wX21mKG1waV9yZXF1ZXN0LAorCQkgICAgc2l6ZW9mKE1waTJEaWFnQnVmZmVyUG9zdFJlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQorCQkJaXNzdWVfcmVzZXQgPSAxOworCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCisJLyogcHJvY2VzcyB0aGUgY29tcGxldGVkIFJlcGx5IE1lc3NhZ2UgRnJhbWUgKi8KKwlpZiAoKGlvYy0+Y3RsX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpID09IDApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IG5vIHJlcGx5IG1lc3NhZ2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwltcGlfcmVwbHkgPSBpb2MtPmN0bF9jbWRzLnJlcGx5OworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cykgJiBNUEkyX0lPQ1NUQVRVU19NQVNLOworCisJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlpb2MtPmRpYWdfYnVmZmVyX3N0YXR1c1tidWZmZXJfdHlwZV0gfD0KKwkJICAgIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRDsKKwkJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IHN1Y2Nlc3NcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaW9jX3N0YXR1cygweCUwNHgpICIKKwkJICAgICJsb2dfaW5mbygweCUwOHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAorCQkgICAgaW9jX3N0YXR1cywgbXBpX3JlcGx5LT5JT0NMb2dJbmZvKTsKKwkJcmMgPSAtRUZBVUxUOworCX0KKworIGlzc3VlX2hvc3RfcmVzZXQ6CisJaWYgKGlzc3VlX3Jlc2V0KQorCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisKKyBvdXQ6CisKKwlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X3VubG9jaygmaW9jLT5jdGxfY21kcy5tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9jdGxfaW9jdGxfbWFpbiAtIG1haW4gaW9jdGwgZW50cnkgcG9pbnQKKyAqIEBmaWxlIC0gKHN0cnVjdCBmaWxlKQorICogQGNtZCAtIGlvY3RsIG9wY29kZQorICogQGFyZyAtCisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2lvY3RsX21haW4oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJZW51bSBibG9ja19zdGF0ZSBzdGF0ZTsKKwlsb25nIHJldCA9IC1FSU5WQUw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0YXRlID0gKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IE5PTl9CTE9DS0lORyA6CisJICAgIEJMT0NLSU5HOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1QVDJJT0NJTkZPOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2lvY2luZm8pKQorCQkJcmV0ID0gX2N0bF9nZXRpb2NpbmZvKGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkNPTU1BTkQ6CisJeworCQlzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kIGthcmc7CisJCXN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQgX191c2VyICp1YXJnOworCQlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwKKwkJICAgICFpb2MpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywKKwkJCSAgICBmbGFncyk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kKSkgeworCQkJdWFyZyA9IGFyZzsKKwkJCXJldCA9IF9jdGxfZG9fbXB0X2NvbW1hbmQoaW9jLCBrYXJnLCAmdWFyZy0+bWYsIHN0YXRlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBNUFQyRVZFTlRRVUVSWToKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHF1ZXJ5KSkKKwkJCXJldCA9IF9jdGxfZXZlbnRxdWVyeShhcmcpOworCQlicmVhazsKKwljYXNlIE1QVDJFVkVOVEVOQUJMRToKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudGVuYWJsZSkpCisJCQlyZXQgPSBfY3RsX2V2ZW50ZW5hYmxlKGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkVWRU5UUkVQT1JUOgorCQlyZXQgPSBfY3RsX2V2ZW50cmVwb3J0KGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkhBUkRSRVNFVDoKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9kaWFnX3Jlc2V0KSkKKwkJCXJldCA9IF9jdGxfZG9fcmVzZXQoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyQlRESE1BUFBJTkc6CisJCWlmIChfSU9DX1NJWkUoY21kKSA9PSBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfYnRkaF9tYXBwaW5nKSkKKwkJCXJldCA9IF9jdGxfYnRkaF9tYXBwaW5nKGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkRJQUdSRUdJU1RFUjoKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9kaWFnX3JlZ2lzdGVyKSkKKwkJCXJldCA9IF9jdGxfZGlhZ19yZWdpc3RlcihhcmcsIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyRElBR1VOUkVHSVNURVI6CisJCWlmIChfSU9DX1NJWkUoY21kKSA9PSBzaXplb2Yoc3RydWN0IG1wdDJfZGlhZ191bnJlZ2lzdGVyKSkKKwkJCXJldCA9IF9jdGxfZGlhZ191bnJlZ2lzdGVyKGFyZyk7CisJCWJyZWFrOworCWNhc2UgTVBUMkRJQUdRVUVSWToKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9kaWFnX3F1ZXJ5KSkKKwkJCXJldCA9IF9jdGxfZGlhZ19xdWVyeShhcmcpOworCQlicmVhazsKKwljYXNlIE1QVDJESUFHUkVMRUFTRToKKwkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9kaWFnX3JlbGVhc2UpKQorCQkJcmV0ID0gX2N0bF9kaWFnX3JlbGVhc2UoYXJnLCBzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgTVBUMkRJQUdSRUFEQlVGRkVSOgorCQlpZiAoX0lPQ19TSVpFKGNtZCkgPT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2RpYWdfcmVhZF9idWZmZXIpKQorCQkJcmV0ID0gX2N0bF9kaWFnX3JlYWRfYnVmZmVyKGFyZywgc3RhdGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCXsKKwkJc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCBrYXJnOworCQlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZrYXJnLCBhcmcsIHNpemVvZihrYXJnKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZy5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwKKwkJICAgICFpb2MpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCSAgICAidW5zdXBwb3J0ZWQgaW9jdGwgb3Bjb2RlKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgY21kKSk7CisJCWJyZWFrOworCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBfY3RsX2lvY3RsIC0gbWFpbiBpb2N0bCBlbnRyeSBwb2ludCAodW5sb2NrZWQpCisgKiBAZmlsZSAtIChzdHJ1Y3QgZmlsZSkKKyAqIEBjbWQgLSBpb2N0bCBvcGNvZGUKKyAqIEBhcmcgLQorICovCitzdGF0aWMgbG9uZworX2N0bF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbG9uZyByZXQ7CisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBfY3RsX2lvY3RsX21haW4oZmlsZSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorLyoqCisgKiBfY3RsX2NvbXBhdF9tcHRfY29tbWFuZCAtIGNvbnZlcnQgMzJiaXQgcG9pbnRlcnMgdG8gNjRiaXQuCisgKiBAZmlsZSAtIChzdHJ1Y3QgZmlsZSkKKyAqIEBjbWQgLSBpb2N0bCBvcGNvZGUKKyAqIEBhcmcgLSAoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZDMyKQorICoKKyAqIE1QVDJDT01NQU5EMzIgLSBIYW5kbGUgMzJiaXQgYXBwbGljYXRpb25zIHJ1bm5pbmcgb24gNjRiaXQgb3MuCisgKi8KK3N0YXRpYyBsb25nCitfY3RsX2NvbXBhdF9tcHRfY29tbWFuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kMzIga2FyZzMyOworCXN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQzMiBfX3VzZXIgKnVhcmc7CisJc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCBrYXJnOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwllbnVtIGJsb2NrX3N0YXRlIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoX0lPQ19TSVpFKGNtZCkgIT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQzMikpCisJCXJldHVybiAtRUlOVkFMOworCisJdWFyZyA9IChzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kMzIgX191c2VyICopIGFyZzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZzMyLCAoY2hhciBfX3VzZXIgKilhcmcsIHNpemVvZihrYXJnMzIpKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChfY3RsX3ZlcmlmeV9hZGFwdGVyKGthcmczMi5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssCisJCSAgICBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisKKwltZW1zZXQoJmthcmcsIDAsIHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kKSk7CisJa2FyZy5oZHIuaW9jX251bWJlciA9IGthcmczMi5oZHIuaW9jX251bWJlcjsKKwlrYXJnLmhkci5wb3J0X251bWJlciA9IGthcmczMi5oZHIucG9ydF9udW1iZXI7CisJa2FyZy5oZHIubWF4X2RhdGFfc2l6ZSA9IGthcmczMi5oZHIubWF4X2RhdGFfc2l6ZTsKKwlrYXJnLnRpbWVvdXQgPSBrYXJnMzIudGltZW91dDsKKwlrYXJnLm1heF9yZXBseV9ieXRlcyA9IGthcmczMi5tYXhfcmVwbHlfYnl0ZXM7CisJa2FyZy5kYXRhX2luX3NpemUgPSBrYXJnMzIuZGF0YV9pbl9zaXplOworCWthcmcuZGF0YV9vdXRfc2l6ZSA9IGthcmczMi5kYXRhX291dF9zaXplOworCWthcmcubWF4X3NlbnNlX2J5dGVzID0ga2FyZzMyLm1heF9zZW5zZV9ieXRlczsKKwlrYXJnLmRhdGFfc2dlX29mZnNldCA9IGthcmczMi5kYXRhX3NnZV9vZmZzZXQ7CisJbWVtY3B5KCZrYXJnLnJlcGx5X2ZyYW1lX2J1Zl9wdHIsICZrYXJnMzIucmVwbHlfZnJhbWVfYnVmX3B0ciwKKwkgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisJbWVtY3B5KCZrYXJnLmRhdGFfaW5fYnVmX3B0ciwgJmthcmczMi5kYXRhX2luX2J1Zl9wdHIsCisJICAgIHNpemVvZih1aW50MzJfdCkpOworCW1lbWNweSgma2FyZy5kYXRhX291dF9idWZfcHRyLCAma2FyZzMyLmRhdGFfb3V0X2J1Zl9wdHIsCisJICAgIHNpemVvZih1aW50MzJfdCkpOworCW1lbWNweSgma2FyZy5zZW5zZV9kYXRhX3B0ciwgJmthcmczMi5zZW5zZV9kYXRhX3B0ciwKKwkgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisJc3RhdGUgPSAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gTk9OX0JMT0NLSU5HIDogQkxPQ0tJTkc7CisJcmV0dXJuIF9jdGxfZG9fbXB0X2NvbW1hbmQoaW9jLCBrYXJnLCAmdWFyZy0+bWYsIHN0YXRlKTsKK30KKworLyoqCisgKiBfY3RsX2lvY3RsX2NvbXBhdCAtIG1haW4gaW9jdGwgZW50cnkgcG9pbnQgKGNvbXBhdCkKKyAqIEBmaWxlIC0KKyAqIEBjbWQgLQorICogQGFyZyAtCisgKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgMzIgYml0IGFwcGxpY2F0aW9ucyBpbiA2NGJpdCBvcy4KKyAqLworc3RhdGljIGxvbmcKK19jdGxfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWxvbmcgcmV0OworCWxvY2tfa2VybmVsKCk7CisJaWYgKGNtZCA9PSBNUFQyQ09NTUFORDMyKQorCQlyZXQgPSBfY3RsX2NvbXBhdF9tcHRfY29tbWFuZChmaWxlLCBjbWQsIGFyZyk7CisJZWxzZQorCQlyZXQgPSBfY3RsX2lvY3RsX21haW4oZmlsZSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qIHNjc2kgaG9zdCBhdHRyaWJ1dGVzICovCisKKy8qKgorICogX2N0bF92ZXJzaW9uX2Z3X3Nob3cgLSBmaXJtd2FyZSB2ZXJzaW9uCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF92ZXJzaW9uX2Z3X3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJkLiUwMmQuJTAyZC4lMDJkXG4iLAorCSAgICAoaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4RkYwMDAwMDApID4+IDI0LAorCSAgICAoaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4MDBGRjAwMDApID4+IDE2LAorCSAgICAoaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4MDAwMEZGMDApID4+IDgsCisJICAgIGlvYy0+ZmFjdHMuRldWZXJzaW9uLldvcmQgJiAweDAwMDAwMEZGKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uX2Z3LCBTX0lSVUdPLCBfY3RsX3ZlcnNpb25fZndfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF92ZXJzaW9uX2Jpb3Nfc2hvdyAtIGJpb3MgdmVyc2lvbgorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfdmVyc2lvbl9iaW9zX3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwl1MzIgdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24pOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyZC4lMDJkLiUwMmQuJTAyZFxuIiwKKwkgICAgKHZlcnNpb24gJiAweEZGMDAwMDAwKSA+PiAyNCwKKwkgICAgKHZlcnNpb24gJiAweDAwRkYwMDAwKSA+PiAxNiwKKwkgICAgKHZlcnNpb24gJiAweDAwMDBGRjAwKSA+PiA4LAorCSAgICB2ZXJzaW9uICYgMHgwMDAwMDBGRik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbl9iaW9zLCBTX0lSVUdPLCBfY3RsX3ZlcnNpb25fYmlvc19zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX3ZlcnNpb25fbXBpX3Nob3cgLSBNUEkgKG1lc3NhZ2UgcGFzc2luZyBpbnRlcmZhY2UpIHZlcnNpb24KKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX3ZlcnNpb25fbXBpX3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDN4LiUwMnhcbiIsCisJICAgIGlvYy0+ZmFjdHMuTXNnVmVyc2lvbiwgaW9jLT5mYWN0cy5IZWFkZXJWZXJzaW9uID4+IDgpOworfQorc3RhdGljIERFVklDRV9BVFRSKHZlcnNpb25fbXBpLCBTX0lSVUdPLCBfY3RsX3ZlcnNpb25fbXBpX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfdmVyc2lvbl9wcm9kdWN0X3Nob3cgLSBwcm9kdWN0IG5hbWUKKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX3ZlcnNpb25fcHJvZHVjdF9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTYsICIlc1xuIiwgaW9jLT5tYW51X3BnMC5DaGlwTmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbl9wcm9kdWN0LCBTX0lSVUdPLAorICAgX2N0bF92ZXJzaW9uX3Byb2R1Y3Rfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF92ZXJzaW9uX252ZGF0YV9wZXJzaXN0ZW50X3Nob3cgLSBuZHZhdGEgcGVyc2lzdGVudCB2ZXJzaW9uCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF92ZXJzaW9uX252ZGF0YV9wZXJzaXN0ZW50X3Nob3coc3RydWN0IGRldmljZSAqY2RldiwKKyAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJ4aFxuIiwKKwkgICAgbGUxNl90b19jcHUoaW9jLT5pb3VuaXRfcGcwLk52ZGF0YVZlcnNpb25QZXJzaXN0ZW50LldvcmQpKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uX252ZGF0YV9wZXJzaXN0ZW50LCBTX0lSVUdPLAorICAgIF9jdGxfdmVyc2lvbl9udmRhdGFfcGVyc2lzdGVudF9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX3ZlcnNpb25fbnZkYXRhX2RlZmF1bHRfc2hvdyAtIG52ZGF0YSBkZWZhdWx0IHZlcnNpb24KKyAqIEBjZGV2IC0gcG9pbnRlciB0byBlbWJlZGRlZCBjbGFzcyBkZXZpY2UKKyAqIEBidWYgLSB0aGUgYnVmZmVyIHJldHVybmVkCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX3ZlcnNpb25fbnZkYXRhX2RlZmF1bHRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMnhoXG4iLAorCSAgICBsZTE2X3RvX2NwdShpb2MtPmlvdW5pdF9wZzAuTnZkYXRhVmVyc2lvbkRlZmF1bHQuV29yZCkpOworfQorc3RhdGljIERFVklDRV9BVFRSKHZlcnNpb25fbnZkYXRhX2RlZmF1bHQsIFNfSVJVR08sCisgICAgX2N0bF92ZXJzaW9uX252ZGF0YV9kZWZhdWx0X3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfYm9hcmRfbmFtZV9zaG93IC0gYm9hcmQgbmFtZQorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfYm9hcmRfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTYsICIlc1xuIiwgaW9jLT5tYW51X3BnMC5Cb2FyZE5hbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX25hbWUsIFNfSVJVR08sIF9jdGxfYm9hcmRfbmFtZV9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX2JvYXJkX2Fzc2VtYmx5X3Nob3cgLSBib2FyZCBhc3NlbWJseSBuYW1lCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF9ib2FyZF9hc3NlbWJseV9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTYsICIlc1xuIiwgaW9jLT5tYW51X3BnMC5Cb2FyZEFzc2VtYmx5KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihib2FyZF9hc3NlbWJseSwgU19JUlVHTywKKyAgICBfY3RsX2JvYXJkX2Fzc2VtYmx5X3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfYm9hcmRfdHJhY2VyX3Nob3cgLSBib2FyZCB0cmFjZXIgbnVtYmVyCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIEEgc3lzZnMgJ3JlYWQtb25seScgc2hvc3QgYXR0cmlidXRlLgorICovCitzdGF0aWMgc3NpemVfdAorX2N0bF9ib2FyZF90cmFjZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIDE2LCAiJXNcbiIsIGlvYy0+bWFudV9wZzAuQm9hcmRUcmFjZXJOdW1iZXIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX3RyYWNlciwgU19JUlVHTywKKyAgICBfY3RsX2JvYXJkX3RyYWNlcl9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX2lvX2RlbGF5X3Nob3cgLSBpbyBtaXNzaW5nIGRlbGF5CisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIFRoaXMgaXMgZm9yIGZpcm13YXJlIGltcGxlbWVudGlvbiBmb3IgZGVib3VjaW5nIGRldmljZQorICogcmVtb3ZhbCBldmVudHMuCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2lvX2RlbGF5X3Nob3coc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJkXG4iLCBpb2MtPmlvX21pc3NpbmdfZGVsYXkpOworfQorc3RhdGljIERFVklDRV9BVFRSKGlvX2RlbGF5LCBTX0lSVUdPLAorICAgIF9jdGxfaW9fZGVsYXlfc2hvdywgTlVMTCk7CisKKy8qKgorICogX2N0bF9kZXZpY2VfZGVsYXlfc2hvdyAtIGRldmljZSBtaXNzaW5nIGRlbGF5CisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIFRoaXMgaXMgZm9yIGZpcm13YXJlIGltcGxlbWVudGlvbiBmb3IgZGVib3VjaW5nIGRldmljZQorICogcmVtb3ZhbCBldmVudHMuCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2RldmljZV9kZWxheV9zaG93KHN0cnVjdCBkZXZpY2UgKmNkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyZFxuIiwgaW9jLT5kZXZpY2VfbWlzc2luZ19kZWxheSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGV2aWNlX2RlbGF5LCBTX0lSVUdPLAorICAgIF9jdGxfZGV2aWNlX2RlbGF5X3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfZndfcXVldWVfZGVwdGhfc2hvdyAtIGdsb2JhbCBjcmVkaXRzCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIFRoaXMgaXMgZmlybXdhcmUgcXVldWUgZGVwdGggbGltaXQKKyAqCisgKiBBIHN5c2ZzICdyZWFkLW9ubHknIHNob3N0IGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHNzaXplX3QKK19jdGxfZndfcXVldWVfZGVwdGhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMmRcbiIsIGlvYy0+ZmFjdHMuUmVxdWVzdENyZWRpdCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZndfcXVldWVfZGVwdGgsIFNfSVJVR08sCisgICAgX2N0bF9md19xdWV1ZV9kZXB0aF9zaG93LCBOVUxMKTsKKworLyoqCisgKiBfY3RsX3Nhc19hZGRyZXNzX3Nob3cgLSBzYXMgYWRkcmVzcworICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBUaGlzIGlzIHRoZSBjb250cm9sbGVyIHNhcyBhZGRyZXNzCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2hvc3Rfc2FzX2FkZHJlc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTAxNmxseFxuIiwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MpOworfQorc3RhdGljIERFVklDRV9BVFRSKGhvc3Rfc2FzX2FkZHJlc3MsIFNfSVJVR08sCisgICAgX2N0bF9ob3N0X3Nhc19hZGRyZXNzX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfbG9nZ2luZ19sZXZlbF9zaG93IC0gbG9nZ2luZyBsZXZlbAorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBBIHN5c2ZzICdyZWFkL3dyaXRlJyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2xvZ2dpbmdfbGV2ZWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwOHhoXG4iLCBpb2MtPmxvZ2dpbmdfbGV2ZWwpOworfQorc3RhdGljIHNzaXplX3QKK19jdGxfbG9nZ2luZ19sZXZlbF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCWludCB2YWwgPSAwOworCisJaWYgKHNzY2FuZihidWYsICIleCIsICZ2YWwpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaW9jLT5sb2dnaW5nX2xldmVsID0gdmFsOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJsb2dnaW5nX2xldmVsPSUwOHhoXG4iLCBpb2MtPm5hbWUsCisJICAgIGlvYy0+bG9nZ2luZ19sZXZlbCk7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorc3RhdGljIERFVklDRV9BVFRSKGxvZ2dpbmdfbGV2ZWwsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgIF9jdGxfbG9nZ2luZ19sZXZlbF9zaG93LCBfY3RsX2xvZ2dpbmdfbGV2ZWxfc3RvcmUpOworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19ob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3ZlcnNpb25fZncsCisJJmRldl9hdHRyX3ZlcnNpb25fYmlvcywKKwkmZGV2X2F0dHJfdmVyc2lvbl9tcGksCisJJmRldl9hdHRyX3ZlcnNpb25fcHJvZHVjdCwKKwkmZGV2X2F0dHJfdmVyc2lvbl9udmRhdGFfcGVyc2lzdGVudCwKKwkmZGV2X2F0dHJfdmVyc2lvbl9udmRhdGFfZGVmYXVsdCwKKwkmZGV2X2F0dHJfYm9hcmRfbmFtZSwKKwkmZGV2X2F0dHJfYm9hcmRfYXNzZW1ibHksCisJJmRldl9hdHRyX2JvYXJkX3RyYWNlciwKKwkmZGV2X2F0dHJfaW9fZGVsYXksCisJJmRldl9hdHRyX2RldmljZV9kZWxheSwKKwkmZGV2X2F0dHJfbG9nZ2luZ19sZXZlbCwKKwkmZGV2X2F0dHJfZndfcXVldWVfZGVwdGgsCisJJmRldl9hdHRyX2hvc3Rfc2FzX2FkZHJlc3MsCisJTlVMTCwKK307CisKKy8qIGRldmljZSBhdHRyaWJ1dGVzICovCisKKy8qKgorICogX2N0bF9kZXZpY2Vfc2FzX2FkZHJlc3Nfc2hvdyAtIHNhcyBhZGRyZXNzCisgKiBAY2RldiAtIHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKiBAYnVmIC0gdGhlIGJ1ZmZlciByZXR1cm5lZAorICoKKyAqIFRoaXMgaXMgdGhlIHNhcyBhZGRyZXNzIGZvciB0aGUgdGFyZ2V0CisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2RldmljZV9zYXNfYWRkcmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDE2bGx4XG4iLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc2FzX2FkZHJlc3MsIFNfSVJVR08sIF9jdGxfZGV2aWNlX3Nhc19hZGRyZXNzX3Nob3csIE5VTEwpOworCisvKioKKyAqIF9jdGxfZGV2aWNlX2hhbmRsZV9zaG93IC0gZGV2aWNlIGhhbmRsZQorICogQGNkZXYgLSBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQorICogQGJ1ZiAtIHRoZSBidWZmZXIgcmV0dXJuZWQKKyAqCisgKiBUaGlzIGlzIHRoZSBmaXJtd2FyZSBhc3NpZ25lZCBkZXZpY2UgaGFuZGxlCisgKgorICogQSBzeXNmcyAncmVhZC1vbmx5JyBzaG9zdCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitfY3RsX2RldmljZV9oYW5kbGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA0eFxuIiwKKwkgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc2FzX2RldmljZV9oYW5kbGUsIFNfSVJVR08sIF9jdGxfZGV2aWNlX2hhbmRsZV9zaG93LCBOVUxMKTsKKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1wdDJzYXNfZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3Nhc19hZGRyZXNzLAorCSZkZXZfYXR0cl9zYXNfZGV2aWNlX2hhbmRsZSwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3RsX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnVubG9ja2VkX2lvY3RsID0gX2N0bF9pb2N0bCwKKwkucmVsZWFzZSA9IF9jdGxfcmVsZWFzZSwKKwkucG9sbCA9IF9jdGxfcG9sbCwKKwkuZmFzeW5jID0gX2N0bF9mYXN5bmMsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBfY3RsX2lvY3RsX2NvbXBhdCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGN0bF9kZXYgPSB7CisJLm1pbm9yICA9IE1QVDJTQVNfTUlOT1IsCisJLm5hbWUgICA9IE1QVDJTQVNfREVWX05BTUUsCisJLmZvcHMgICA9ICZjdGxfZm9wcywKK307CisKKy8qKgorICogbXB0MnNhc19jdGxfaW5pdCAtIG1haW4gZW50cnkgcG9pbnQgZm9yIGN0bC4KKyAqCisgKi8KK3ZvaWQKK21wdDJzYXNfY3RsX2luaXQodm9pZCkKK3sKKwlhc3luY19xdWV1ZSA9IE5VTEw7CisJaWYgKG1pc2NfcmVnaXN0ZXIoJmN0bF9kZXYpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyBjYW4ndCByZWdpc3RlciBtaXNjIGRldmljZSBbbWlub3I9JWRdXG4iLAorCQkgICAgTVBUMlNBU19EUklWRVJfTkFNRSwgTVBUMlNBU19NSU5PUik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdGxfcG9sbF93YWl0KTsKK30KKworLyoqCisgKiBtcHQyc2FzX2N0bF9leGl0IC0gZXhpdCBwb2ludCBmb3IgY3RsCisgKgorICovCit2b2lkCittcHQyc2FzX2N0bF9leGl0KHZvaWQpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCWludCBpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZtcHQyc2FzX2lvY19saXN0LCBsaXN0KSB7CisKKwkJLyogZnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB0byBkaWFnIGJ1ZmZlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IE1QSTJfRElBR19CVUZfVFlQRV9DT1VOVDsgaSsrKSB7CisJCQlpZiAoIWlvYy0+ZGlhZ19idWZmZXJbaV0pCisJCQkJY29udGludWU7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgaW9jLT5kaWFnX2J1ZmZlcl9zeltpXSwKKwkJCSAgICBpb2MtPmRpYWdfYnVmZmVyW2ldLCBpb2MtPmRpYWdfYnVmZmVyX2RtYVtpXSk7CisJCQlpb2MtPmRpYWdfYnVmZmVyW2ldID0gTlVMTDsKKwkJCWlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzW2ldID0gMDsKKwkJfQorCisJCWtmcmVlKGlvYy0+ZXZlbnRfbG9nKTsKKwl9CisJbWlzY19kZXJlZ2lzdGVyKCZjdGxfZGV2KTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNmMwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiBNYW5hZ2VtZW50IE1vZHVsZSBTdXBwb3J0IGZvciBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBiYXNlZAorICogY29udHJvbGxlcnMKKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9jdGwuaAorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICogQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAqIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgKiBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgKiBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKKyAqIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAqIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisgKiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICogTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgKiBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqIFVTQS4KKyAqLworCisjaWZuZGVmIE1QVDJTQVNfQ1RMX0hfSU5DTFVERUQKKyNkZWZpbmUgTVBUMlNBU19DVExfSF9JTkNMVURFRAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNlbmRpZgorCisjZGVmaW5lIE1QVDJTQVNfREVWX05BTUUJIm1wdDJjdGwiCisjZGVmaW5lIE1QVDJfTUFHSUNfTlVNQkVSCSdtJworI2RlZmluZSBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCAoMTApIC8qIGluIHNlY29uZHMgKi8KKworLyoqCisgKiBJT0NUTCBvcGNvZGVzCisgKi8KKyNkZWZpbmUgTVBUMklPQ0lORk8JX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDE3LCBcCisgICAgc3RydWN0IG1wdDJfaW9jdGxfaW9jaW5mbykKKyNkZWZpbmUgTVBUMkNPTU1BTkQJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDIwLCBcCisgICAgc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCkKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lIE1QVDJDT01NQU5EMzIJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDIwLCBcCisgICAgc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZDMyKQorI2VuZGlmCisjZGVmaW5lIE1QVDJFVkVOVFFVRVJZCV9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAyMSwgXAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cXVlcnkpCisjZGVmaW5lIE1QVDJFVkVOVEVOQUJMRQlfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMjIsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudGVuYWJsZSkKKyNkZWZpbmUgTVBUMkVWRU5UUkVQT1JUCV9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAyMywgXAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2V2ZW50cmVwb3J0KQorI2RlZmluZSBNUFQySEFSRFJFU0VUCV9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAyNCwgXAorICAgIHN0cnVjdCBtcHQyX2lvY3RsX2RpYWdfcmVzZXQpCisjZGVmaW5lIE1QVDJCVERITUFQUElORwlfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMzEsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9pb2N0bF9idGRoX21hcHBpbmcpCisKKy8qIGRpYWcgYnVmZmVyIHN1cHBvcnQgKi8KKyNkZWZpbmUgTVBUMkRJQUdSRUdJU1RFUiBfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMjYsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9kaWFnX3JlZ2lzdGVyKQorI2RlZmluZSBNUFQyRElBR1JFTEVBU0UJX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDI3LCBcCisgICAgc3RydWN0IG1wdDJfZGlhZ19yZWxlYXNlKQorI2RlZmluZSBNUFQyRElBR1VOUkVHSVNURVIgX0lPV1IoTVBUMl9NQUdJQ19OVU1CRVIsIDI4LCBcCisgICAgc3RydWN0IG1wdDJfZGlhZ191bnJlZ2lzdGVyKQorI2RlZmluZSBNUFQyRElBR1FVRVJZCV9JT1dSKE1QVDJfTUFHSUNfTlVNQkVSLCAyOSwgXAorICAgIHN0cnVjdCBtcHQyX2RpYWdfcXVlcnkpCisjZGVmaW5lIE1QVDJESUFHUkVBREJVRkZFUiBfSU9XUihNUFQyX01BR0lDX05VTUJFUiwgMzAsIFwKKyAgICBzdHJ1Y3QgbXB0Ml9kaWFnX3JlYWRfYnVmZmVyKQorCisvKioKKyAqIHN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciAtIG1haW4gaGVhZGVyIHN0cnVjdHVyZQorICogQGlvY19udW1iZXIgLSAgSU9DIHVuaXQgbnVtYmVyCisgKiBAcG9ydF9udW1iZXIgLSBJT0MgcG9ydCBudW1iZXIKKyAqIEBtYXhfZGF0YV9zaXplIC0gbWF4aW11bSBudW1iZXIgYnl0ZXMgdG8gdHJhbnNmZXIgb24gcmVhZAorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgeworCXVpbnQzMl90IGlvY19udW1iZXI7CisJdWludDMyX3QgcG9ydF9udW1iZXI7CisJdWludDMyX3QgbWF4X2RhdGFfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IG1wdDJfaW9jdGxfZGlhZ19yZXNldCAtIGRpYWdub3N0aWMgcmVzZXQKKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9kaWFnX3Jlc2V0IHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworfTsKKworCisvKioKKyAqIHN0cnVjdCBtcHQyX2lvY3RsX3BjaV9pbmZvIC0gcGNpIGRldmljZSBpbmZvCisgKiBAZGV2aWNlIC0gcGNpIGRldmljZSBpZAorICogQGZ1bmN0aW9uIC0gcGNpIGZ1bmN0aW9uIGlkCisgKiBAYnVzIC0gcGNpIGJ1cyBpZAorICogQHNlZ21lbnRfaWQgLSBwY2kgc2VnbWVudCBpZAorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9wY2lfaW5mbyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgZGV2aWNlOjU7CisJCQl1aW50MzJfdCBmdW5jdGlvbjozOworCQkJdWludDMyX3QgYnVzOjI0OworCQl9IGJpdHM7CisJCXVpbnQzMl90ICB3b3JkOworCX0gdTsKKwl1aW50MzJfdCBzZWdtZW50X2lkOworfTsKKworCisjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX1NDU0kJKDB4MDApCisjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX0ZDCQkoMHgwMSkKKyNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfRkNfSVAJKDB4MDIpCisjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUwkoMHgwMykKKyNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfU0FTMgkoMHgwNCkKKyNkZWZpbmUgTVBUMl9JT0NUTF9WRVJTSU9OX0xFTkdUSAkoMzIpCisKKy8qKgorICogc3RydWN0IG1wdDJfaW9jdGxfaW9jaW5mbyAtIGdlbmVyaWMgY29udHJvbGxlciBpbmZvCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEBhZGFwdGVyX3R5cGUgLSB0eXBlIG9mIGFkYXB0ZXIgKHNwaSwgZmMsIHNhcykKKyAqIEBwb3J0X251bWJlciAtIHBvcnQgbnVtYmVyCisgKiBAcGNpX2lkIC0gUENJIElkCisgKiBAaHdfcmV2IC0gaGFyZHdhcmUgcmV2aXNpb24KKyAqIEBzdWJfc3lzdGVtX2RldmljZSAtIFBDSSBzdWJzeXN0ZW0gRGV2aWNlIElECisgKiBAc3ViX3N5c3RlbV92ZW5kb3IgLSBQQ0kgc3Vic3lzdGVtIFZlbmRvciBJRAorICogQHJzdmQwIC0gcmVzZXJ2ZWQKKyAqIEBmaXJtd2FyZV92ZXJzaW9uIC0gZmlybXdhcmUgdmVyc2lvbgorICogQGJpb3NfdmVyc2lvbiAtIEJJT1MgdmVyc2lvbgorICogQGRyaXZlcl92ZXJzaW9uIC0gZHJpdmVyIHZlcnNpb24gLSAzMiBBU0NJSSBjaGFyYWN0ZXJzCisgKiBAcnN2ZDEgLSByZXNlcnZlZAorICogQHNjc2lfaWQgLSBzY3NpIGlkIG9mIGFkYXB0ZXIgMAorICogQHJzdmQyIC0gcmVzZXJ2ZWQKKyAqIEBwY2lfaW5mb3JtYXRpb24gLSBwY2kgaW5mbyAoMm5kIHJldmlzaW9uKQorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9pb2NpbmZvIHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQzMl90IGFkYXB0ZXJfdHlwZTsKKwl1aW50MzJfdCBwb3J0X251bWJlcjsKKwl1aW50MzJfdCBwY2lfaWQ7CisJdWludDMyX3QgaHdfcmV2OworCXVpbnQzMl90IHN1YnN5c3RlbV9kZXZpY2U7CisJdWludDMyX3Qgc3Vic3lzdGVtX3ZlbmRvcjsKKwl1aW50MzJfdCByc3ZkMDsKKwl1aW50MzJfdCBmaXJtd2FyZV92ZXJzaW9uOworCXVpbnQzMl90IGJpb3NfdmVyc2lvbjsKKwl1aW50OF90IGRyaXZlcl92ZXJzaW9uW01QVDJfSU9DVExfVkVSU0lPTl9MRU5HVEhdOworCXVpbnQ4X3QgcnN2ZDE7CisJdWludDhfdCBzY3NpX2lkOworCXVpbnQxNl90IHJzdmQyOworCXN0cnVjdCBtcHQyX2lvY3RsX3BjaV9pbmZvIHBjaV9pbmZvcm1hdGlvbjsKK307CisKKworLyogbnVtYmVyIG9mIGV2ZW50IGxvZyBlbnRyaWVzICovCisjZGVmaW5lIE1QVDJTQVNfQ1RMX0VWRU5UX0xPR19TSVpFICg1MCkKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHF1ZXJ5IC0gcXVlcnkgZXZlbnQgY291bnQgYW5kIHR5cGUKKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQGV2ZW50X2VudHJpZXMgLSBudW1iZXIgb2YgZXZlbnRzIHJldHVybmVkIGJ5IGdldF9ldmVudF9yZXBvcnQKKyAqIEByc3ZkIC0gcmVzZXJ2ZWQKKyAqIEBldmVudF90eXBlcyAtIHR5cGUgb2YgZXZlbnRzIGN1cnJlbnRseSBiZWluZyBjYXB0dXJlZAorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHF1ZXJ5IHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQxNl90IGV2ZW50X2VudHJpZXM7CisJdWludDE2X3QgcnN2ZDsKKwl1aW50MzJfdCBldmVudF90eXBlc1tNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFNdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudGVuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIGV2ZW50IGNhcHR1cmluZworICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAZXZlbnRfdHlwZXMgLSB0b2dnbGUgb2ZmL29uIHR5cGUgb2YgZXZlbnRzIHRvIGJlIGNhcHR1cmVkCisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2V2ZW50ZW5hYmxlIHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQzMl90IGV2ZW50X3R5cGVzWzRdOworfTsKKworI2RlZmluZSBNUFQyX0VWRU5UX0RBVEFfU0laRSAoMTkyKQorLyoqCisgKiBzdHJ1Y3QgTVBUMl9JT0NUTF9FVkVOVFMgLQorICogQGV2ZW50IC0gdGhlIGV2ZW50IHRoYXQgd2FzIHJlcG9ydGVkCisgKiBAY29udGV4dCAtIHVuaXF1ZSB2YWx1ZSBmb3IgZWFjaCBldmVudCBhc3NpZ25lZCBieSBkcml2ZXIKKyAqIEBkYXRhIC0gZXZlbnQgZGF0YSByZXR1cm5lZCBpbiBmdyByZXBseSBtZXNzYWdlCisgKi8KK3N0cnVjdCBNUFQyX0lPQ1RMX0VWRU5UUyB7CisJdWludDMyX3QgZXZlbnQ7CisJdWludDMyX3QgY29udGV4dDsKKwl1aW50OF90IGRhdGFbTVBUMl9FVkVOVF9EQVRBX1NJWkVdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHJlcG9ydCAtIHJldHVyaW5nIGV2ZW50IGxvZworICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAZXZlbnRfZGF0YSAtIChzZWUgc3RydWN0IE1QVDJfSU9DVExfRVZFTlRTKQorICovCitzdHJ1Y3QgbXB0Ml9pb2N0bF9ldmVudHJlcG9ydCB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwlzdHJ1Y3QgTVBUMl9JT0NUTF9FVkVOVFMgZXZlbnRfZGF0YVsxXTsKK307CisKKy8qKgorICogc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCAtIGdlbmVyaWMgbXB0IGZpcm13YXJlIHBhc3N0aHJ1IGlvY2x0CisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEB0aW1lb3V0IC0gY29tbWFuZCB0aW1lb3V0IGluIHNlY29uZHMuIChpZiB6ZXJvIHRoZW4gdXNlIGRyaXZlciBkZWZhdWx0CisgKiAgdmFsdWUpLgorICogQHJlcGx5X2ZyYW1lX2J1Zl9wdHIgLSByZXBseSBsb2NhdGlvbgorICogQGRhdGFfaW5fYnVmX3B0ciAtIGRlc3RpbmF0aW9uIGZvciByZWFkCisgKiBAZGF0YV9vdXRfYnVmX3B0ciAtIGRhdGEgc291cmNlIGZvciB3cml0ZQorICogQHNlbnNlX2RhdGFfcHRyIC0gc2Vuc2UgZGF0YSBsb2NhdGlvbgorICogQG1heF9yZXBseV9ieXRlcyAtIG1heGltdW0gbnVtYmVyIG9mIHJlcGx5IGJ5dGVzIHRvIGJlIHNlbnQgdG8gYXBwLgorICogQGRhdGFfaW5fc2l6ZSAtIG51bWJlciBieXRlcyBmb3IgZGF0YSB0cmFuc2ZlciBpbiAocmVhZCkKKyAqIEBkYXRhX291dF9zaXplIC0gbnVtYmVyIGJ5dGVzIGZvciBkYXRhIHRyYW5zZmVyIG91dCAod3JpdGUpCisgKiBAbWF4X3NlbnNlX2J5dGVzIC0gbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgZm9yIGF1dG8gc2Vuc2UgYnVmZmVycworICogQGRhdGFfc2dlX29mZnNldCAtIG9mZnNldCBpbiB3b3JkcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCBtZXNzYWdlIHRvCisgKiB0aGUgZmlyc3QgU0dMCisgKiBAbWZbMV07CisgKi8KK3N0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDMyX3QgdGltZW91dDsKKwl2b2lkIF9fdXNlciAqcmVwbHlfZnJhbWVfYnVmX3B0cjsKKwl2b2lkIF9fdXNlciAqZGF0YV9pbl9idWZfcHRyOworCXZvaWQgX191c2VyICpkYXRhX291dF9idWZfcHRyOworCXZvaWQgX191c2VyICpzZW5zZV9kYXRhX3B0cjsKKwl1aW50MzJfdCBtYXhfcmVwbHlfYnl0ZXM7CisJdWludDMyX3QgZGF0YV9pbl9zaXplOworCXVpbnQzMl90IGRhdGFfb3V0X3NpemU7CisJdWludDMyX3QgbWF4X3NlbnNlX2J5dGVzOworCXVpbnQzMl90IGRhdGFfc2dlX29mZnNldDsKKwl1aW50OF90IG1mWzFdOworfTsKKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQzMiB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwl1aW50MzJfdCB0aW1lb3V0OworCXVpbnQzMl90IHJlcGx5X2ZyYW1lX2J1Zl9wdHI7CisJdWludDMyX3QgZGF0YV9pbl9idWZfcHRyOworCXVpbnQzMl90IGRhdGFfb3V0X2J1Zl9wdHI7CisJdWludDMyX3Qgc2Vuc2VfZGF0YV9wdHI7CisJdWludDMyX3QgbWF4X3JlcGx5X2J5dGVzOworCXVpbnQzMl90IGRhdGFfaW5fc2l6ZTsKKwl1aW50MzJfdCBkYXRhX291dF9zaXplOworCXVpbnQzMl90IG1heF9zZW5zZV9ieXRlczsKKwl1aW50MzJfdCBkYXRhX3NnZV9vZmZzZXQ7CisJdWludDhfdCBtZlsxXTsKK307CisjZW5kaWYKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9pb2N0bF9idGRoX21hcHBpbmcgLSBtYXBwaW5nIGluZm8KKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQGlkIC0gdGFyZ2V0IGRldmljZSBpZGVudGlmaWNhdGlvbiBudW1iZXIKKyAqIEBidXMgLSBTQ1NJIGJ1cyBudW1iZXIgdGhhdCB0aGUgdGFyZ2V0IGRldmljZSBleGlzdHMgb24KKyAqIEBoYW5kbGUgLSBkZXZpY2UgaGFuZGxlIGZvciB0aGUgdGFyZ2V0IGRldmljZQorICogQHJzdmQgLSByZXNlcnZlZAorICoKKyAqIFRvIG9idGFpbiBhIGJ1cy9pZCB0aGUgYXBwbGljYXRpb24gc2V0cworICogaGFuZGxlIHRvIHZhbGlkIGhhbmRsZSwgYW5kIGJ1cy9pZCB0byAweEZGRkYuCisgKgorICogVG8gb2J0YWluIHRoZSBkZXZpY2UgaGFuZGxlIHRoZSBhcHBsaWNhdGlvbiBzZXRzCisgKiBidXMvaWQgdmFsaWQgdmFsdWUsIGFuZCB0aGUgaGFuZGxlIHRvIDB4RkZGRi4KKyAqLworc3RydWN0IG1wdDJfaW9jdGxfYnRkaF9tYXBwaW5nIHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQzMl90IGlkOworCXVpbnQzMl90IGJ1czsKKwl1aW50MTZfdCBoYW5kbGU7CisJdWludDE2X3QgcnN2ZDsKK307CisKKworLyogc3RhdHVzIGJpdHMgZm9yIGlvYy0+ZGlhZ19idWZmZXJfc3RhdHVzICovCisjZGVmaW5lIE1QVDJfRElBR19CVUZGRVJfSVNfUkVHSVNURVJFRCAJKDB4MDEpCisjZGVmaW5lIE1QVDJfRElBR19CVUZGRVJfSVNfUkVMRUFTRUQgCSgweDAyKQorCisvKiBhcHBsaWNhdGlvbiBmbGFncyBmb3IgbXB0Ml9kaWFnX3JlZ2lzdGVyLCBtcHQyX2RpYWdfcXVlcnkgKi8KKyNkZWZpbmUgTVBUMl9BUFBfRkxBR1NfQVBQX09XTkVECSgweDAwMDEpCisjZGVmaW5lIE1QVDJfQVBQX0ZMQUdTX0JVRkZFUl9WQUxJRAkoMHgwMDAyKQorI2RlZmluZSBNUFQyX0FQUF9GTEFHU19GV19CVUZGRVJfQUNDRVNTCSgweDAwMDQpCisKKy8qIGZsYWdzIGZvciBtcHQyX2RpYWdfcmVhZF9idWZmZXIgKi8KKyNkZWZpbmUgTVBUMl9GTEFHU19SRVJFR0lTVEVSCQkoMHgwMDAxKQorCisjZGVmaW5lIE1QVDJfUFJPRFVDVF9TUEVDSUZJQ19EV09SRFMgCQkyMworCisvKioKKyAqIHN0cnVjdCBtcHQyX2RpYWdfcmVnaXN0ZXIgLSBhcHBsaWNhdGlvbiByZWdpc3RlciB3aXRoIGRyaXZlcgorICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAcmVzZXJ2ZWQgLQorICogQGJ1ZmZlcl90eXBlIC0gc3BlY2lmaWVzIGVpdGhlciBUUkFDRSBvciBTTkFQU0hPVAorICogQGFwcGxpY2F0aW9uX2ZsYWdzIC0gbWlzYyBmbGFncworICogQGRpYWdub3N0aWNfZmxhZ3MgLSBzcGVjaWZpZXMgZmxhZ3MgYWZmZWN0aW5nIGNvbW1hbmQgcHJvY2Vzc2luZworICogQHByb2R1Y3Rfc3BlY2lmaWMgLSBwcm9kdWN0IHNwZWNpZmljIGluZm9ybWF0aW9uCisgKiBAcmVxdWVzdGVkX2J1ZmZlcl9zaXplIC0gYnVmZmVycyBzaXplIGluIGJ5dGVzCisgKiBAdW5pcXVlX2lkIC0gdGFnIHNwZWNpZmllZCBieSBhcHBsaWNhdGlvbiB0aGF0IGlzIHVzZWQgdG8gc2lnbmFsIG93bmVyc2hpcAorICogIG9mIHRoZSBidWZmZXIuCisgKgorICogVGhpcyB3aWxsIGFsbG93IHRoZSBkcml2ZXIgdG8gc2V0dXAgYW55IHJlcXVpcmVkIGJ1ZmZlcnMgdGhhdCB3aWxsIGJlCisgKiBuZWVkZWQgYnkgZmlybXdhcmUgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZHJpdmVyLgorICovCitzdHJ1Y3QgbXB0Ml9kaWFnX3JlZ2lzdGVyIHsKKwlzdHJ1Y3QgbXB0Ml9pb2N0bF9oZWFkZXIgaGRyOworCXVpbnQ4X3QgcmVzZXJ2ZWQ7CisJdWludDhfdCBidWZmZXJfdHlwZTsKKwl1aW50MTZfdCBhcHBsaWNhdGlvbl9mbGFnczsKKwl1aW50MzJfdCBkaWFnbm9zdGljX2ZsYWdzOworCXVpbnQzMl90IHByb2R1Y3Rfc3BlY2lmaWNbTVBUMl9QUk9EVUNUX1NQRUNJRklDX0RXT1JEU107CisJdWludDMyX3QgcmVxdWVzdGVkX2J1ZmZlcl9zaXplOworCXVpbnQzMl90IHVuaXF1ZV9pZDsKK307CisKKy8qKgorICogc3RydWN0IG1wdDJfZGlhZ191bnJlZ2lzdGVyIC0gYXBwbGljYXRpb24gdW5yZWdpc3RlciB3aXRoIGRyaXZlcgorICogQGhkciAtIGdlbmVyaWMgaGVhZGVyCisgKiBAdW5pcXVlX2lkIC0gdGFnIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGJ1ZmZlciB0byBiZSB1bnJlZ2lzdGVyZWQKKyAqCisgKiBUaGlzIHdpbGwgYWxsb3cgdGhlIGRyaXZlciB0byBjbGVhbnVwIGFueSBtZW1vcnkgYWxsb2NhdGVkIGZvciBkaWFnCisgKiBtZXNzYWdlcyBhbmQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzLgorICovCitzdHJ1Y3QgbXB0Ml9kaWFnX3VucmVnaXN0ZXIgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDMyX3QgdW5pcXVlX2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9kaWFnX3F1ZXJ5IC0gcXVlcnkgcmVsZXZhbnQgaW5mbyBhc3NvY2lhdGVkIHdpdGggZGlhZyBidWZmZXJzCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEByZXNlcnZlZCAtCisgKiBAYnVmZmVyX3R5cGUgLSBzcGVjaWZpZXMgZWl0aGVyIFRSQUNFIG9yIFNOQVBTSE9UCisgKiBAYXBwbGljYXRpb25fZmxhZ3MgLSBtaXNjIGZsYWdzCisgKiBAZGlhZ25vc3RpY19mbGFncyAtIHNwZWNpZmllcyBmbGFncyBhZmZlY3RpbmcgY29tbWFuZCBwcm9jZXNzaW5nCisgKiBAcHJvZHVjdF9zcGVjaWZpYyAtIHByb2R1Y3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqIEB0b3RhbF9idWZmZXJfc2l6ZSAtIGRpYWcgYnVmZmVyIHNpemUgaW4gYnl0ZXMKKyAqIEBkcml2ZXJfYWRkZWRfYnVmZmVyX3NpemUgLSBzaXplIG9mIGV4dHJhIHNwYWNlIGFwcGVuZGVkIHRvIGVuZCBvZiBidWZmZXIKKyAqIEB1bmlxdWVfaWQgLSB1bmlxdWUgaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnVmZmVyLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiB3aWxsIHNlbmQgb25seSBidWZmZXJfdHlwZSBhbmQgdW5pcXVlX2lkLiAgRHJpdmVyIHdpbGwKKyAqIGluc3BlY3QgdW5pcXVlX2lkIGZpcnN0LCBpZiB2YWxpZCwgZmlsbCBpbiBhbGwgdGhlIGluZm8uICBJZiB1bmlxdWVfaWQgaXMKKyAqIDB4MDAsIHRoZSBkcml2ZXIgd2lsbCByZXR1cm4gaW5mbyBzcGVjaWZpZWQgYnkgQnVmZmVyIFR5cGUuCisgKi8KK3N0cnVjdCBtcHQyX2RpYWdfcXVlcnkgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDhfdCByZXNlcnZlZDsKKwl1aW50OF90IGJ1ZmZlcl90eXBlOworCXVpbnQxNl90IGFwcGxpY2F0aW9uX2ZsYWdzOworCXVpbnQzMl90IGRpYWdub3N0aWNfZmxhZ3M7CisJdWludDMyX3QgcHJvZHVjdF9zcGVjaWZpY1tNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTXTsKKwl1aW50MzJfdCB0b3RhbF9idWZmZXJfc2l6ZTsKKwl1aW50MzJfdCBkcml2ZXJfYWRkZWRfYnVmZmVyX3NpemU7CisJdWludDMyX3QgdW5pcXVlX2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9kaWFnX3JlbGVhc2UgLSAgcmVxdWVzdCB0byBzZW5kIERpYWcgUmVsZWFzZSBNZXNzYWdlIHRvIGZpcm13YXJlCisgKiBAaGRyIC0gZ2VuZXJpYyBoZWFkZXIKKyAqIEB1bmlxdWVfaWQgLSB0YWcgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgYnVmZmVyIHRvIGJlIHJlbGVhc2VkCisgKgorICogVGhpcyBhbGxvd3Mgb3duZXJzaGlwIG9mIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHRvIHJldHVybmVkIHRvIHRoZSBkcml2ZXIsCisgKiBhbGxvd2luZyBhbiBhcHBsaWNhdGlvbiB0byByZWFkIHRoZSBidWZmZXIgd2l0aG91dCBmZWFyIHRoYXQgZmlybXdhcmUgaXMKKyAqIG92ZXJ3cml0dGluZyBpbmZvcm1hdGlvbiBpbiB0aGUgYnVmZmVyLgorICovCitzdHJ1Y3QgbXB0Ml9kaWFnX3JlbGVhc2UgeworCXN0cnVjdCBtcHQyX2lvY3RsX2hlYWRlciBoZHI7CisJdWludDMyX3QgdW5pcXVlX2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXB0Ml9kaWFnX3JlYWRfYnVmZmVyIC0gcmVxdWVzdCBmb3IgY29weSBvZiB0aGUgZGlhZyBidWZmZXIKKyAqIEBoZHIgLSBnZW5lcmljIGhlYWRlcgorICogQHN0YXR1cyAtCisgKiBAcmVzZXJ2ZWQgLQorICogQGZsYWdzIC0gbWlzYyBmbGFncworICogQHN0YXJ0aW5nX29mZnNldCAtIHN0YXJ0aW5nIG9mZnNldCB3aXRoaW4gZHJpdmVycyBidWZmZXIgd2hlcmUgdG8gc3RhcnQKKyAqICByZWFkaW5nIGRhdGEgYXQgaW50byB0aGUgc3BlY2lmaWVkIGFwcGxpY2F0aW9uIGJ1ZmZlcgorICogQGJ5dGVzX3RvX3JlYWQgLSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoZSBkcml2ZXJzIGJ1ZmZlciBpbnRvIHRoZQorICogIGFwcGxpY2F0aW9uIGJ1ZmZlciBzdGFydGluZyBhdCBzdGFydGluZ19vZmZzZXQuCisgKiBAdW5pcXVlX2lkIC0gdW5pcXVlIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlci4KKyAqIEBkaWFnbm9zdGljX2RhdGEgLSBkYXRhIHBheWxvYWQKKyAqLworc3RydWN0IG1wdDJfZGlhZ19yZWFkX2J1ZmZlciB7CisJc3RydWN0IG1wdDJfaW9jdGxfaGVhZGVyIGhkcjsKKwl1aW50OF90IHN0YXR1czsKKwl1aW50OF90IHJlc2VydmVkOworCXVpbnQxNl90IGZsYWdzOworCXVpbnQzMl90IHN0YXJ0aW5nX29mZnNldDsKKwl1aW50MzJfdCBieXRlc190b19yZWFkOworCXVpbnQzMl90IHVuaXF1ZV9pZDsKKwl1aW50MzJfdCBkaWFnbm9zdGljX2RhdGFbMV07Cit9OworCisjZW5kaWYgLyogTVBUMlNBU19DVExfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzI1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBMb2dnaW5nIFN1cHBvcnQgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkIGNvbnRyb2xsZXJzCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfZGVidWcuYworICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICogQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAqIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgKiBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgKiBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKKyAqIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAqIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisgKiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICogTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgKiBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqIFVTQS4KKyAqLworCisjaWZuZGVmIE1QVDJTQVNfREVCVUdfSF9JTkNMVURFRAorI2RlZmluZSBNUFQyU0FTX0RFQlVHX0hfSU5DTFVERUQKKworI2RlZmluZSBNUFRfREVCVUcJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1QVF9ERUJVR19NU0dfRlJBTUUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTVBUX0RFQlVHX1NHCQkJMHgwMDAwMDAwNAorI2RlZmluZSBNUFRfREVCVUdfRVZFTlRTCQkweDAwMDAwMDA4CisjZGVmaW5lIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0sJMHgwMDAwMDAxMAorI2RlZmluZSBNUFRfREVCVUdfSU5JVAkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTVBUX0RFQlVHX0VYSVQJCQkweDAwMDAwMDQwCisjZGVmaW5lIE1QVF9ERUJVR19GQUlMCQkJMHgwMDAwMDA4MAorI2RlZmluZSBNUFRfREVCVUdfVE0JCQkweDAwMDAwMTAwCisjZGVmaW5lIE1QVF9ERUJVR19SRVBMWQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgTVBUX0RFQlVHX0hBTkRTSEFLRQkJMHgwMDAwMDQwMAorI2RlZmluZSBNUFRfREVCVUdfQ09ORklHCQkweDAwMDAwODAwCisjZGVmaW5lIE1QVF9ERUJVR19ETAkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgTVBUX0RFQlVHX1JFU0VUCQkJMHgwMDAwMjAwMAorI2RlZmluZSBNUFRfREVCVUdfU0NTSQkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTVBUX0RFQlVHX0lPQ1RMCQkJMHgwMDAwODAwMAorI2RlZmluZSBNUFRfREVCVUdfQ1NNSVNBUwkJMHgwMDAxMDAwMAorI2RlZmluZSBNUFRfREVCVUdfU0FTCQkJMHgwMDAyMDAwMAorI2RlZmluZSBNUFRfREVCVUdfVFJBTlNQT1JUCQkweDAwMDQwMDAwCisjZGVmaW5lIE1QVF9ERUJVR19UQVNLX1NFVF9GVUxMCQkweDAwMDgwMDAwCisKKyNkZWZpbmUgTVBUX0RFQlVHX1RBUkdFVF9NT0RFCQkweDAwMTAwMDAwCisKKworLyoKKyAqIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORyAtIGVuYWJsZWQgaW4gS2NvbmZpZworICovCisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKyNkZWZpbmUgTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIEJJVFMpCQkJXAorewkJCQkJCQkJXAorCWlmIChJT0MtPmxvZ2dpbmdfbGV2ZWwgJiBCSVRTKQkJCQlcCisJCUNNRDsJCQkJCQlcCit9CisjZWxzZQorI2RlZmluZSBNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgQklUUykKKyNlbmRpZiAvKiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgKi8KKworCisvKgorICogZGVidWcgbWFjcm9zCisgKi8KKworI2RlZmluZSBkcHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHKQorCisjZGVmaW5lIGRzZ3ByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19TRykKKworI2RlZmluZSBkZXZ0cHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0VWRU5UUykKKworI2RlZmluZSBkZXd0cHJpbnRrKElPQywgQ01EKQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQorCisjZGVmaW5lIGRpbml0cHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0lOSVQpCisKKyNkZWZpbmUgZGV4aXRwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfRVhJVCkKKworI2RlZmluZSBkZmFpbHByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19GQUlMKQorCisjZGVmaW5lIGR0bXByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19UTSkKKworI2RlZmluZSBkcmVwbHlwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfUkVQTFkpCisKKyNkZWZpbmUgZGhzcHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0hBTkRTSEFLRSkKKworI2RlZmluZSBkY3ByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19DT05GSUcpCisKKyNkZWZpbmUgZGRscHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX0RMKQorCisjZGVmaW5lIGRyc3ByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19SRVNFVCkKKworI2RlZmluZSBkc3ByaW50ayhJT0MsIENNRCkJCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19TQ1NJKQorCisjZGVmaW5lIGRjdGxwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfSU9DVEwpCisKKyNkZWZpbmUgZGNzbWlzYXNwcmludGsoSU9DLCBDTUQpCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19DU01JU0FTKQorCisjZGVmaW5lIGRzYXNwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfU0FTKQorCisjZGVmaW5lIGRzYXN0cmFuc3BvcnQoSU9DLCBDTUQpCQlcCisJTVBUX0NIRUNLX0xPR0dJTkcoSU9DLCBDTUQsIE1QVF9ERUJVR19TQVNfV0lERSkKKworI2RlZmluZSBkbWZwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfTVNHX0ZSQU1FKQorCisjZGVmaW5lIGR0c2ZwcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfVEFTS19TRVRfRlVMTCkKKworI2RlZmluZSBkdHJhbnNwb3J0cHJpbnRrKElPQywgQ01EKQkJCVwKKwlNUFRfQ0hFQ0tfTE9HR0lORyhJT0MsIENNRCwgTVBUX0RFQlVHX1RSQU5TUE9SVCkKKworI2RlZmluZSBkVE1wcmludGsoSU9DLCBDTUQpCQkJXAorCU1QVF9DSEVDS19MT0dHSU5HKElPQywgQ01ELCBNUFRfREVCVUdfVEFSR0VUX01PREUpCisKKy8qIGlubGluZSBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgZGVidWcgZGF0YSovCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9kZWJ1Z19kdW1wX21mIC0gcHJpbnQgbWVzc2FnZSBmcmFtZSBjb250ZW50cworICogQG1waV9yZXF1ZXN0OiBwb2ludGVyIHRvIG1lc3NhZ2UgZnJhbWUKKyAqIEBzejogbnVtYmVyIG9mIGR3b3JkcworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19kZWJ1Z19kdW1wX21mKHZvaWQgKm1waV9yZXF1ZXN0LCBpbnQgc3opCit7CisJaW50IGk7CisJdTMyICptZnAgPSAodTMyICopbXBpX3JlcXVlc3Q7CisKKwlwcmludGsoS0VSTl9JTkZPICJtZjpcblx0Iik7CisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJaWYgKGkgJiYgKChpICUgOCkgPT0gMCkpCisJCQlwcmludGsoIlxuXHQiKTsKKwkJcHJpbnRrKCIlMDh4ICIsIGxlMzJfdG9fY3B1KG1mcFtpXSkpOworCX0KKwlwcmludGsoIlxuIik7Cit9CisjZWxzZQorI2RlZmluZSBfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwgc3opCisjZW5kaWYgLyogQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HICovCisKKyNlbmRpZiAvKiBNUFQyU0FTX0RFQlVHX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQ2M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCkBAIC0wLDAgKzEsNTY4NyBAQAorLyoKKyAqIFNjc2kgSG9zdCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9zY3NpaC5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SCisgKiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVAorICogTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMKKyAqIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKKyAqIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworICogZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgKiB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorICogcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAqIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisgKiBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKKyAqIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMKKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSAibXB0MnNhc19iYXNlLmgiCisKK01PRFVMRV9BVVRIT1IoTVBUMlNBU19BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKE1QVDJTQVNfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oTVBUMlNBU19EUklWRVJfVkVSU0lPTik7CisKKyNkZWZpbmUgUkFJRF9DSEFOTkVMIDEKKworLyogZm9yd2FyZCBwcm90bydzICovCitzdGF0aWMgdm9pZCBfc2NzaWhfZXhwYW5kZXJfbm9kZV9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcik7CitzdGF0aWMgdm9pZCBfZmlybXdhcmVfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKiBnbG9iYWwgcGFyYW1ldGVycyAqLworTElTVF9IRUFEKG1wdDJzYXNfaW9jX2xpc3QpOworCisvKiBsb2NhbCBwYXJhbWV0ZXJzICovCitzdGF0aWMgdTggc2NzaV9pb19jYl9pZHggPSAtMTsKK3N0YXRpYyB1OCB0bV9jYl9pZHggPSAtMTsKK3N0YXRpYyB1OCBjdGxfY2JfaWR4ID0gLTE7CitzdGF0aWMgdTggYmFzZV9jYl9pZHggPSAtMTsKK3N0YXRpYyB1OCB0cmFuc3BvcnRfY2JfaWR4ID0gLTE7CitzdGF0aWMgdTggY29uZmlnX2NiX2lkeCA9IC0xOworc3RhdGljIGludCBtcHRfaWRzOworCisvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworc3RhdGljIHUzMiBsb2dnaW5nX2xldmVsOworTU9EVUxFX1BBUk1fREVTQyhsb2dnaW5nX2xldmVsLCAiIGJpdHMgZm9yIGVuYWJsaW5nIGFkZGl0aW9uYWwgbG9nZ2luZyBpbmZvICIKKyAgICAiKGRlZmF1bHQ9MCkiKTsKKworLyogc2NzaS1taWQgbGF5ZXIgZ2xvYmFsIHBhcm1ldGVyIGlzIG1heF9yZXBvcnRfbHVucywgd2hpY2ggaXMgNTExICovCisjZGVmaW5lIE1QVDJTQVNfTUFYX0xVTiAoMTY4OTUpCitzdGF0aWMgaW50IG1heF9sdW4gPSBNUFQyU0FTX01BWF9MVU47Cittb2R1bGVfcGFyYW0obWF4X2x1biwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X2x1biwgIiBtYXggbHVuLCBkZWZhdWx0PTE2ODk1ICIpOworCisvKioKKyAqIHN0cnVjdCBzZW5zZV9pbmZvIC0gY29tbW9uIHN0cnVjdHVyZSBmb3Igb2J0YWluaW5nIHNlbnNlIGtleXMKKyAqIEBza2V5OiBzZW5zZSBrZXkKKyAqIEBhc2M6IGFkZGl0aW9uYWwgc2Vuc2UgY29kZQorICogQGFzY3E6IGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKKyAqLworc3RydWN0IHNlbnNlX2luZm8geworCXU4IHNrZXk7CisJdTggYXNjOworCXU4IGFzY3E7Cit9OworCisKKyNkZWZpbmUgTVBUMlNBU19SRVNDQU5fQUZURVJfSE9TVF9SRVNFVCAoMHhGRkZGKQorLyoqCisgKiBzdHJ1Y3QgZndfZXZlbnRfd29yayAtIGZpcm13YXJlIGV2ZW50IHN0cnVjdAorICogQGxpc3Q6IGxpbmsgbGlzdCBmcmFtZXdvcmsKKyAqIEB3b3JrOiB3b3JrIG9iamVjdCAoaW9jLT5mYXVsdF9yZXNldF93b3JrX3EpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQGhvc3RfcmVzZXRfaGFuZGxpbmc6IGhhbmRsaW5nIGV2ZW50cyBkdXJpbmcgaG9zdCByZXNldAorICogQGlnbm9yZTogZmxhZyBtZWFuaW5nIHRoaXMgZXZlbnQgaGFzIGJlZW4gbWFya2VkIHRvIGlnbm9yZQorICogQGV2ZW50OiBmaXJtd2FyZSBldmVudCBNUEkyX0VWRU5UX1hYWCBkZWZpbmVkIGluIG1wdDJfaW9jLmgKKyAqIEBldmVudF9kYXRhOiByZXBseSBldmVudCBkYXRhIHBheWxvYWQgZm9sbG93cworICoKKyAqIFRoaXMgb2JqZWN0IHN0b3JlZCBvbiBpb2MtPmZ3X2V2ZW50X2xpc3QuCisgKi8KK3N0cnVjdCBmd19ldmVudF93b3JrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlsaXN0OworCXN0cnVjdCBkZWxheWVkX3dvcmsJd29yazsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CisJdTgJCQlWRl9JRDsKKwl1OAkJCWhvc3RfcmVzZXRfaGFuZGxpbmc7CisJdTgJCQlpZ25vcmU7CisJdTE2CQkJZXZlbnQ7CisJdm9pZAkJCSpldmVudF9kYXRhOworfTsKKworLyoqCisgKiBzdHJ1Y3QgX3Njc2lfaW9fdHJhbnNmZXIgLSBzY3NpIGlvIHRyYW5zZmVyCisgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCisgKiBAaXNfcmFpZDogZmxhZyBzZXQgZm9yIGhpZGRlbiByYWlkIGNvbXBvbmVudHMKKyAqIEBkaXI6IERNQV9UT19ERVZJQ0UsIERNQV9GUk9NX0RFVklDRSwKKyAqIEBkYXRhX2xlbmd0aDogZGF0YSB0cmFuc2ZlciBsZW5ndGgKKyAqIEBkYXRhX2RtYTogZG1hIHBvaW50ZXIgdG8gZGF0YQorICogQHNlbnNlOiBzZW5zZSBkYXRhCisgKiBAbHVuOiBsdW4gbnVtYmVyCisgKiBAY2RiX2xlbmd0aDogY2RiIGxlbmd0aAorICogQGNkYjogY2RiIGNvbnRlbnRzCisgKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCisgKiBAdGltZW91dDogdGltZW91dCBmb3IgdGhpcyBjb21tYW5kCisgKiBAc2Vuc2VfbGVuZ3RoOiBzZW5zZSBsZW5ndGgKKyAqIEBpb2Nfc3RhdHVzOiBpb2Mgc3RhdHVzCisgKiBAc2NzaV9zdGF0ZTogc2NzaSBzdGF0ZQorICogQHNjc2lfc3RhdHVzOiBzY3NpIHN0YXVzCisgKiBAbG9nX2luZm86IGxvZyBpbmZvcm1hdGlvbgorICogQHRyYW5zZmVyX2xlbmd0aDogZGF0YSBsZW5ndGggdHJhbnNmZXIgd2hlbiB0aGVyZSBpcyBhIHJlcGx5IG1lc3NhZ2UKKyAqCisgKiBVc2VkIGZvciBzZW5kaW5nIGludGVybmFsIHNjc2kgY29tbWFuZHMgdG8gZGV2aWNlcyB3aXRoaW4gdGhpcyBtb2R1bGUuCisgKiBSZWZlciB0byBfc2NzaV9zZW5kX3Njc2lfaW8oKS4KKyAqLworc3RydWN0IF9zY3NpX2lvX3RyYW5zZmVyIHsKKwl1MTYJaGFuZGxlOworCXU4CWlzX3JhaWQ7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOworCXUzMglkYXRhX2xlbmd0aDsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworCXU4IAlzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworCXUzMglsdW47CisJdTgJY2RiX2xlbmd0aDsKKwl1OAljZGJbMzJdOworCXU4CXRpbWVvdXQ7CisJdTgJdmFsaWRfcmVwbHk7CisgIC8qIHRoZSBmb2xsb3dpbmcgYml0cyBhcmUgb25seSB2YWxpZCB3aGVuICd2YWxpZF9yZXBseSA9IDEnICovCisJdTMyCXNlbnNlX2xlbmd0aDsKKwl1MTYJaW9jX3N0YXR1czsKKwl1OAlzY3NpX3N0YXRlOworCXU4CXNjc2lfc3RhdHVzOworCXUzMglsb2dfaW5mbzsKKwl1MzIJdHJhbnNmZXJfbGVuZ3RoOworfTsKKworLyoKKyAqIFRoZSBwY2kgZGV2aWNlIGlkcyBhcmUgZGVmaW5lZCBpbiBtcGkvbXBpMl9jbmZnLmguCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzY3NpaF9wY2lfdGFibGVbXSA9IHsKKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMDA0LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJLyogRmFsY29uIH4gMjAwOCovCisJeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU0FTMjAwOCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCS8qIExpYmVyYXRvciB+IDIxMDggKi8KKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTA4XzEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTA4XzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTA4XzMsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTE2XzEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTE2XzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7MH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2NzaWhfcGNpX3RhYmxlKTsKKworLyoqCisgKiBzY3NpaF9zZXRfZGVidWdfbGV2ZWwgLSBnbG9iYWwgc2V0dGluZyBvZiBpb2MtPmxvZ2dpbmdfbGV2ZWwuCisgKgorICogTm90ZTogVGhlIGxvZ2dpbmcgbGV2ZWxzIGFyZSBkZWZpbmVkIGluIG1wdDJzYXNfZGVidWcuaC4KKyAqLworc3RhdGljIGludAorc2NzaWhfc2V0X2RlYnVnX2xldmVsKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJldCA9IHBhcmFtX3NldF9pbnQodmFsLCBrcCk7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gInNldHRpbmcgbG9nZ2luZ19sZXZlbCgweCUwOHgpXG4iLCBsb2dnaW5nX2xldmVsKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvYywgJm1wdDJzYXNfaW9jX2xpc3QsIGxpc3QpCisJCWlvYy0+bG9nZ2luZ19sZXZlbCA9IGxvZ2dpbmdfbGV2ZWw7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfcGFyYW1fY2FsbChsb2dnaW5nX2xldmVsLCBzY3NpaF9zZXRfZGVidWdfbGV2ZWwsIHBhcmFtX2dldF9pbnQsCisgICAgJmxvZ2dpbmdfbGV2ZWwsIDA2NDQpOworCisvKioKKyAqIF9zY3NpaF9zcmNoX2Jvb3Rfc2FzX2FkZHJlc3MgLSBzZWFyY2ggYmFzZWQgb24gc2FzX2FkZHJlc3MKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3MKKyAqIEBib290X2RldmljZTogYm9vdCBkZXZpY2Ugb2JqZWN0IGZyb20gYmlvcyBwYWdlIDIKKyAqCisgKiBSZXR1cm5zIDEgd2hlbiB0aGVyZSdzIGEgbWF0Y2gsIDAgbWVhbnMgbm8gbWF0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citfc2NzaWhfc3JjaF9ib290X3Nhc19hZGRyZXNzKHU2NCBzYXNfYWRkcmVzcywKKyAgICBNcGkyQm9vdERldmljZVNhc1d3aWRfdCAqYm9vdF9kZXZpY2UpCit7CisJcmV0dXJuIChzYXNfYWRkcmVzcyA9PSBsZTY0X3RvX2NwdShib290X2RldmljZS0+U0FTQWRkcmVzcykpID8gIDEgOiAwOworfQorCisvKioKKyAqIF9zY3NpaF9zcmNoX2Jvb3RfZGV2aWNlX25hbWUgLSBzZWFyY2ggYmFzZWQgb24gZGV2aWNlIG5hbWUKKyAqIEBkZXZpY2VfbmFtZTogZGV2aWNlIG5hbWUgc3BlY2lmaWVkIGluIElOREVOVElGWSBmcmFtCisgKiBAYm9vdF9kZXZpY2U6IGJvb3QgZGV2aWNlIG9iamVjdCBmcm9tIGJpb3MgcGFnZSAyCisgKgorICogUmV0dXJucyAxIHdoZW4gdGhlcmUncyBhIG1hdGNoLCAwIG1lYW5zIG5vIG1hdGNoLgorICovCitzdGF0aWMgaW5saW5lIGludAorX3Njc2loX3NyY2hfYm9vdF9kZXZpY2VfbmFtZSh1NjQgZGV2aWNlX25hbWUsCisgICAgTXBpMkJvb3REZXZpY2VEZXZpY2VOYW1lX3QgKmJvb3RfZGV2aWNlKQoreworCXJldHVybiAoZGV2aWNlX25hbWUgPT0gbGU2NF90b19jcHUoYm9vdF9kZXZpY2UtPkRldmljZU5hbWUpKSA/IDEgOiAwOworfQorCisvKioKKyAqIF9zY3NpaF9zcmNoX2Jvb3RfZW5jbF9zbG90IC0gc2VhcmNoIGJhc2VkIG9uIGVuY2xvc3VyZV9sb2dpY2FsX2lkL3Nsb3QKKyAqIEBlbmNsb3N1cmVfbG9naWNhbF9pZDogZW5jbG9zdXJlIGxvZ2ljYWwgaWQKKyAqIEBzbG90X251bWJlcjogc2xvdCBudW1iZXIKKyAqIEBib290X2RldmljZTogYm9vdCBkZXZpY2Ugb2JqZWN0IGZyb20gYmlvcyBwYWdlIDIKKyAqCisgKiBSZXR1cm5zIDEgd2hlbiB0aGVyZSdzIGEgbWF0Y2gsIDAgbWVhbnMgbm8gbWF0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citfc2NzaWhfc3JjaF9ib290X2VuY2xfc2xvdCh1NjQgZW5jbG9zdXJlX2xvZ2ljYWxfaWQsIHUxNiBzbG90X251bWJlciwKKyAgICBNcGkyQm9vdERldmljZUVuY2xvc3VyZVNsb3RfdCAqYm9vdF9kZXZpY2UpCit7CisJcmV0dXJuIChlbmNsb3N1cmVfbG9naWNhbF9pZCA9PSBsZTY0X3RvX2NwdShib290X2RldmljZS0+CisJICAgIEVuY2xvc3VyZUxvZ2ljYWxJRCkgJiYgc2xvdF9udW1iZXIgPT0gbGUxNl90b19jcHUoYm9vdF9kZXZpY2UtPgorCSAgICBTbG90TnVtYmVyKSkgPyAxIDogMDsKK30KKworLyoqCisgKiBfc2NzaWhfaXNfYm9vdF9kZXZpY2UgLSBzZWFyY2ggZm9yIG1hdGNoaW5nIGJvb3QgZGV2aWNlLgorICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcworICogQGRldmljZV9uYW1lOiBkZXZpY2UgbmFtZSBzcGVjaWZpZWQgaW4gSU5ERU5USUZZIGZyYW0KKyAqIEBlbmNsb3N1cmVfbG9naWNhbF9pZDogZW5jbG9zdXJlIGxvZ2ljYWwgaWQKKyAqIEBzbG90X251bWJlcjogc2xvdCBudW1iZXIKKyAqIEBmb3JtOiBzcGVjaWZpZXMgYm9vdCBkZXZpY2UgZm9ybQorICogQGJvb3RfZGV2aWNlOiBib290IGRldmljZSBvYmplY3QgZnJvbSBiaW9zIHBhZ2UgMgorICoKKyAqIFJldHVybnMgMSB3aGVuIHRoZXJlJ3MgYSBtYXRjaCwgMCBtZWFucyBubyBtYXRjaC4KKyAqLworc3RhdGljIGludAorX3Njc2loX2lzX2Jvb3RfZGV2aWNlKHU2NCBzYXNfYWRkcmVzcywgdTY0IGRldmljZV9uYW1lLAorICAgIHU2NCBlbmNsb3N1cmVfbG9naWNhbF9pZCwgdTE2IHNsb3QsIHU4IGZvcm0sCisgICAgTXBpMkJpb3NQYWdlMkJvb3REZXZpY2VfdCAqYm9vdF9kZXZpY2UpCit7CisJaW50IHJjID0gMDsKKworCXN3aXRjaCAoZm9ybSkgeworCWNhc2UgTVBJMl9CSU9TUEFHRTJfRk9STV9TQVNfV1dJRDoKKwkJaWYgKCFzYXNfYWRkcmVzcykKKwkJCWJyZWFrOworCQlyYyA9IF9zY3NpaF9zcmNoX2Jvb3Rfc2FzX2FkZHJlc3MoCisJCSAgICBzYXNfYWRkcmVzcywgJmJvb3RfZGV2aWNlLT5TYXNXd2lkKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0JJT1NQQUdFMl9GT1JNX0VOQ0xPU1VSRV9TTE9UOgorCQlpZiAoIWVuY2xvc3VyZV9sb2dpY2FsX2lkKQorCQkJYnJlYWs7CisJCXJjID0gX3Njc2loX3NyY2hfYm9vdF9lbmNsX3Nsb3QoCisJCSAgICBlbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJICAgIHNsb3QsICZib290X2RldmljZS0+RW5jbG9zdXJlU2xvdCk7CisJCWJyZWFrOworCWNhc2UgTVBJMl9CSU9TUEFHRTJfRk9STV9ERVZJQ0VfTkFNRToKKwkJaWYgKCFkZXZpY2VfbmFtZSkKKwkJCWJyZWFrOworCQlyYyA9IF9zY3NpaF9zcmNoX2Jvb3RfZGV2aWNlX25hbWUoCisJCSAgICBkZXZpY2VfbmFtZSwgJmJvb3RfZGV2aWNlLT5EZXZpY2VOYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0JJT1NQQUdFMl9GT1JNX05PX0RFVklDRV9TUEVDSUZJRUQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfc2NzaWhfZGV0ZXJtaW5lX2Jvb3RfZGV2aWNlIC0gZGV0ZXJtaW5lIGJvb3QgZGV2aWNlLgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZGV2aWNlOiBlaXRoZXIgc2FzX2RldmljZSBvciByYWlkX2RldmljZSBvYmplY3QKKyAqIEBpc19yYWlkOiBbZmxhZ10gMSA9IHJhaWQgb2JqZWN0LCAwID0gc2FzIG9iamVjdAorICoKKyAqIERldGVybWluZXMgd2hldGhlciB0aGlzIGRldmljZSBzaG91bGQgYmUgZmlyc3QgcmVwb3J0ZWQgZGV2aWNlIHRvCisgKiB0byBzY3NpLW1sIG9yIHNhcyB0cmFuc3BvcnQsIHRoaXMgcHVycG9zZSBpcyBmb3IgcGVyc2lzdGFudCBib290IGRldmljZS4KKyAqIFRoZXJlIGFyZSBwcmltYXJ5LCBhbHRlcm5hdGUsIGFuZCBjdXJyZW50IGVudHJpZXMgaW4gYmlvcyBwYWdlIDIuIFRoZSBvcmRlcgorICogcHJpb3JpdHkgaXMgcHJpbWFyeSwgYWx0ZXJuYXRlLCB0aGVuIGN1cnJlbnQuICBUaGlzIHJvdXRpbmUgc2F2ZXMKKyAqIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBvYmplY3QgYW5kIGlzX3JhaWQgZmxhZyBpbiB0aGUgaW9jIG9iamVjdC4KKyAqIFRoZSBzYXZlZCBkYXRhIHRvIGJlIHVzZWQgbGF0ZXIgaW4gX3Njc2loX3Byb2JlX2Jvb3RfZGV2aWNlcygpLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2RldGVybWluZV9ib290X2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdm9pZCAqZGV2aWNlLCB1OCBpc19yYWlkKQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1NjQgc2FzX2FkZHJlc3M7CisJdTY0IGRldmljZV9uYW1lOworCXU2NCBlbmNsb3N1cmVfbG9naWNhbF9pZDsKKwl1MTYgc2xvdDsKKworCSAvKiBvbmx5IHByb2Nlc3MgdGhpcyBmdW5jdGlvbiB3aGVuIGRyaXZlciBsb2FkcyAqLworCWlmICghaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSkKKwkJcmV0dXJuOworCisJaWYgKCFpc19yYWlkKSB7CisJCXNhc19kZXZpY2UgPSBkZXZpY2U7CisJCXNhc19hZGRyZXNzID0gc2FzX2RldmljZS0+c2FzX2FkZHJlc3M7CisJCWRldmljZV9uYW1lID0gc2FzX2RldmljZS0+ZGV2aWNlX25hbWU7CisJCWVuY2xvc3VyZV9sb2dpY2FsX2lkID0gc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQ7CisJCXNsb3QgPSBzYXNfZGV2aWNlLT5zbG90OworCX0gZWxzZSB7CisJCXJhaWRfZGV2aWNlID0gZGV2aWNlOworCQlzYXNfYWRkcmVzcyA9IHJhaWRfZGV2aWNlLT53d2lkOworCQlkZXZpY2VfbmFtZSA9IDA7CisJCWVuY2xvc3VyZV9sb2dpY2FsX2lkID0gMDsKKwkJc2xvdCA9IDA7CisJfQorCisJaWYgKCFpb2MtPnJlcV9ib290X2RldmljZS5kZXZpY2UpIHsKKwkJaWYgKF9zY3NpaF9pc19ib290X2RldmljZShzYXNfYWRkcmVzcywgZGV2aWNlX25hbWUsCisJCSAgICBlbmNsb3N1cmVfbG9naWNhbF9pZCwgc2xvdCwKKwkJICAgIChpb2MtPmJpb3NfcGcyLlJlcUJvb3REZXZpY2VGb3JtICYKKwkJICAgIE1QSTJfQklPU1BBR0UyX0ZPUk1fTUFTSyksCisJCSAgICAmaW9jLT5iaW9zX3BnMi5SZXF1ZXN0ZWRCb290RGV2aWNlKSkgeworCQkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJCSAgICIlczogcmVxX2Jvb3RfZGV2aWNlKDB4JTAxNmxseClcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CisJCQlpb2MtPnJlcV9ib290X2RldmljZS5kZXZpY2UgPSBkZXZpY2U7CisJCQlpb2MtPnJlcV9ib290X2RldmljZS5pc19yYWlkID0gaXNfcmFpZDsKKwkJfQorCX0KKworCWlmICghaW9jLT5yZXFfYWx0X2Jvb3RfZGV2aWNlLmRldmljZSkgeworCQlpZiAoX3Njc2loX2lzX2Jvb3RfZGV2aWNlKHNhc19hZGRyZXNzLCBkZXZpY2VfbmFtZSwKKwkJICAgIGVuY2xvc3VyZV9sb2dpY2FsX2lkLCBzbG90LAorCQkgICAgKGlvYy0+Ymlvc19wZzIuUmVxQWx0Qm9vdERldmljZUZvcm0gJgorCQkgICAgTVBJMl9CSU9TUEFHRTJfRk9STV9NQVNLKSwKKwkJICAgICZpb2MtPmJpb3NfcGcyLlJlcXVlc3RlZEFsdEJvb3REZXZpY2UpKSB7CisJCQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJICAgIiVzOiByZXFfYWx0X2Jvb3RfZGV2aWNlKDB4JTAxNmxseClcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CisJCQlpb2MtPnJlcV9hbHRfYm9vdF9kZXZpY2UuZGV2aWNlID0gZGV2aWNlOworCQkJaW9jLT5yZXFfYWx0X2Jvb3RfZGV2aWNlLmlzX3JhaWQgPSBpc19yYWlkOworCQl9CisJfQorCisJaWYgKCFpb2MtPmN1cnJlbnRfYm9vdF9kZXZpY2UuZGV2aWNlKSB7CisJCWlmIChfc2NzaWhfaXNfYm9vdF9kZXZpY2Uoc2FzX2FkZHJlc3MsIGRldmljZV9uYW1lLAorCQkgICAgZW5jbG9zdXJlX2xvZ2ljYWxfaWQsIHNsb3QsCisJCSAgICAoaW9jLT5iaW9zX3BnMi5DdXJyZW50Qm9vdERldmljZUZvcm0gJgorCQkgICAgTVBJMl9CSU9TUEFHRTJfRk9STV9NQVNLKSwKKwkJICAgICZpb2MtPmJpb3NfcGcyLkN1cnJlbnRCb290RGV2aWNlKSkgeworCQkJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJCSAgICIlczogY3VycmVudF9ib290X2RldmljZSgweCUwMTZsbHgpXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfYWRkcmVzcykpOworCQkJaW9jLT5jdXJyZW50X2Jvb3RfZGV2aWNlLmRldmljZSA9IGRldmljZTsKKwkJCWlvYy0+Y3VycmVudF9ib290X2RldmljZS5pc19yYWlkID0gaXNfcmFpZDsKKwkJfQorCX0KK30KKworLyoqCisgKiBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyAtIHNhcyBkZXZpY2Ugc2VhcmNoCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3MKKyAqIENvbnRleHQ6IENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGFjcXVpcmUgaW9jLT5zYXNfZGV2aWNlX2xvY2sKKyAqCisgKiBUaGlzIHNlYXJjaGVzIGZvciBzYXNfZGV2aWNlIGJhc2VkIG9uIHNhc19hZGRyZXNzLCB0aGVuIHJldHVybiBzYXNfZGV2aWNlCisgKiBvYmplY3QuCisgKi8KK3N0cnVjdCBfc2FzX2RldmljZSAqCittcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTY0IHNhc19hZGRyZXNzKQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZSwgKnI7CisKKwlyID0gTlVMTDsKKwkvKiBjaGVjayB0aGUgc2FzX2RldmljZV9pbml0X2xpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhc19kZXZpY2UsICZpb2MtPnNhc19kZXZpY2VfaW5pdF9saXN0LAorCSAgICBsaXN0KSB7CisJCWlmIChzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyAhPSBzYXNfYWRkcmVzcykKKwkJCWNvbnRpbnVlOworCQlyID0gc2FzX2RldmljZTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdGhlbiBjaGVjayB0aGUgc2FzX2RldmljZV9saXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZGV2aWNlLCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNhc19kZXZpY2UtPnNhc19hZGRyZXNzICE9IHNhc19hZGRyZXNzKQorCQkJY29udGludWU7CisJCXIgPSBzYXNfZGV2aWNlOworCQlnb3RvIG91dDsKKwl9Cisgb3V0OgorCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlIC0gc2FzIGRldmljZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogc2FzIGRldmljZSBoYW5kbGUgKGFzc2lnbmVkIGJ5IGZpcm13YXJlKQorICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnNhc19kZXZpY2VfbG9jaworICoKKyAqIFRoaXMgc2VhcmNoZXMgZm9yIHNhc19kZXZpY2UgYmFzZWQgb24gc2FzX2FkZHJlc3MsIHRoZW4gcmV0dXJuIHNhc19kZXZpY2UKKyAqIG9iamVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBfc2FzX2RldmljZSAqCitfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqcjsKKworCXIgPSBOVUxMOworCWlmIChpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2RldmljZSwgJmlvYy0+c2FzX2RldmljZV9pbml0X2xpc3QsCisJCSAgICBsaXN0KSB7CisJCQlpZiAoc2FzX2RldmljZS0+aGFuZGxlICE9IGhhbmRsZSkKKwkJCQljb250aW51ZTsKKwkJCXIgPSBzYXNfZGV2aWNlOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhc19kZXZpY2UsICZpb2MtPnNhc19kZXZpY2VfbGlzdCwgbGlzdCkgeworCQkJaWYgKHNhc19kZXZpY2UtPmhhbmRsZSAhPSBoYW5kbGUpCisJCQkJY29udGludWU7CisJCQlyID0gc2FzX2RldmljZTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgb3V0OgorCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZSAtIHJlbW92ZSBzYXNfZGV2aWNlIGZyb20gbGlzdC4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19kZXZpY2U6IHRoZSBzYXNfZGV2aWNlIG9iamVjdAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zYXNfZGV2aWNlX2xvY2suCisgKgorICogUmVtb3Zpbmcgb2JqZWN0IGFuZCBmcmVlaW5nIGFzc29jaWF0ZWQgbWVtb3J5IGZyb20gdGhlIGlvYy0+c2FzX2RldmljZV9saXN0LgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZzYXNfZGV2aWNlLT5saXN0KTsKKwltZW1zZXQoc2FzX2RldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBfc2FzX2RldmljZSkpOworCWtmcmVlKHNhc19kZXZpY2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19kZXZpY2VfYWRkIC0gaW5zZXJ0IHNhc19kZXZpY2UgdG8gdGhlIGxpc3QuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZGV2aWNlOiB0aGUgc2FzX2RldmljZSBvYmplY3QKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2FzX2RldmljZV9sb2NrLgorICoKKyAqIEFkZGluZyBuZXcgb2JqZWN0IHRvIHRoZSBpb2MtPnNhc19kZXZpY2VfbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfZGV2aWNlX2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZSwgcGFyZW50X2hhbmRsZTsKKwl1NjQgc2FzX2FkZHJlc3M7CisKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaGFuZGxlIgorCSAgICAiKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJICAgIHNhc19kZXZpY2UtPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmc2FzX2RldmljZS0+bGlzdCwgJmlvYy0+c2FzX2RldmljZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaGFuZGxlID0gc2FzX2RldmljZS0+aGFuZGxlOworCXBhcmVudF9oYW5kbGUgPSBzYXNfZGV2aWNlLT5wYXJlbnRfaGFuZGxlOworCXNhc19hZGRyZXNzID0gc2FzX2RldmljZS0+c2FzX2FkZHJlc3M7CisJaWYgKCFtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChpb2MsIGhhbmRsZSwgcGFyZW50X2hhbmRsZSkpIHsKKwkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CisJfSBlbHNlIGlmICghc2FzX2RldmljZS0+c3RhcmdldCkgeworCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19hZGRyZXNzLCBwYXJlbnRfaGFuZGxlKTsKKwkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9zYXNfZGV2aWNlX2luaXRfYWRkIC0gaW5zZXJ0IHNhc19kZXZpY2UgdG8gdGhlIGxpc3QuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZGV2aWNlOiB0aGUgc2FzX2RldmljZSBvYmplY3QKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2FzX2RldmljZV9sb2NrLgorICoKKyAqIEFkZGluZyBuZXcgb2JqZWN0IGF0IGRyaXZlciBsb2FkIHRpbWUgdG8gdGhlIGlvYy0+c2FzX2RldmljZV9pbml0X2xpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2RldmljZV9pbml0X2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaGFuZGxlIgorCSAgICAiKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCisJICAgIHNhc19kZXZpY2UtPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmc2FzX2RldmljZS0+bGlzdCwgJmlvYy0+c2FzX2RldmljZV9pbml0X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJX3Njc2loX2RldGVybWluZV9ib290X2RldmljZShpb2MsIHNhc19kZXZpY2UsIDApOworfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUgLSBleHBhbmRlciBkZXZpY2Ugc2VhcmNoCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGV4cGFuZGVyIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+c2FzX2RldmljZV9sb2NrCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3IgZXhwYW5kZXIgZGV2aWNlIGJhc2VkIG9uIGhhbmRsZSwgdGhlbiByZXR1cm5zIHRoZQorICogc2FzX25vZGUgb2JqZWN0LgorICovCitzdHJ1Y3QgX3Nhc19ub2RlICoKK21wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlciwgKnI7CisKKwlyID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhc19leHBhbmRlciwgJmlvYy0+c2FzX2V4cGFuZGVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNhc19leHBhbmRlci0+aGFuZGxlICE9IGhhbmRsZSkKKwkJCWNvbnRpbnVlOworCQlyID0gc2FzX2V4cGFuZGVyOworCQlnb3RvIG91dDsKKwl9Cisgb3V0OgorCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkIC0gcmFpZCBkZXZpY2Ugc2VhcmNoCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBpZDogc2FzIGRldmljZSB0YXJnZXQgaWQKKyAqIEBjaGFubmVsOiBzYXMgZGV2aWNlIGNoYW5uZWwKKyAqIENvbnRleHQ6IENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGFjcXVpcmUgaW9jLT5yYWlkX2RldmljZV9sb2NrCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3IgcmFpZF9kZXZpY2UgYmFzZWQgb24gdGFyZ2V0IGlkLCB0aGVuIHJldHVybiByYWlkX2RldmljZQorICogb2JqZWN0LgorICovCitzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqCitfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBpZCwgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UsICpyOworCisJciA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyYWlkX2RldmljZSwgJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAocmFpZF9kZXZpY2UtPmlkID09IGlkICYmIHJhaWRfZGV2aWNlLT5jaGFubmVsID09IGNoYW5uZWwpIHsKKwkJCXIgPSByYWlkX2RldmljZTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgb3V0OgorCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2hhbmRsZSAtIHJhaWQgZGV2aWNlIHNlYXJjaAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCisgKiBDb250ZXh0OiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBhY3F1aXJlIGlvYy0+cmFpZF9kZXZpY2VfbG9jaworICoKKyAqIFRoaXMgc2VhcmNoZXMgZm9yIHJhaWRfZGV2aWNlIGJhc2VkIG9uIGhhbmRsZSwgdGhlbiByZXR1cm4gcmFpZF9kZXZpY2UKKyAqIG9iamVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKgorX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSwgKnI7CisKKwlyID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhaWRfZGV2aWNlLCAmaW9jLT5yYWlkX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChyYWlkX2RldmljZS0+aGFuZGxlICE9IGhhbmRsZSkKKwkJCWNvbnRpbnVlOworCQlyID0gcmFpZF9kZXZpY2U7CisJCWdvdG8gb3V0OworCX0KKworIG91dDoKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV93d2lkIC0gcmFpZCBkZXZpY2Ugc2VhcmNoCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlIChhc3NpZ25lZCBieSBmaXJtd2FyZSkKKyAqIENvbnRleHQ6IENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGFjcXVpcmUgaW9jLT5yYWlkX2RldmljZV9sb2NrCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3IgcmFpZF9kZXZpY2UgYmFzZWQgb24gd3dpZCwgdGhlbiByZXR1cm4gcmFpZF9kZXZpY2UKKyAqIG9iamVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKgorX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfd3dpZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCB3d2lkKQoreworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqcjsKKworCXIgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmFpZF9kZXZpY2UsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJhaWRfZGV2aWNlLT53d2lkICE9IHd3aWQpCisJCQljb250aW51ZTsKKwkJciA9IHJhaWRfZGV2aWNlOworCQlnb3RvIG91dDsKKwl9CisKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX3Njc2loX3JhaWRfZGV2aWNlX2FkZCAtIGFkZCByYWlkX2RldmljZSBvYmplY3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJhaWRfZGV2aWNlOiByYWlkX2RldmljZSBvYmplY3QKKyAqCisgKiBUaGlzIGlzIGFkZGVkIHRvIHRoZSByYWlkX2RldmljZV9saXN0IGxpbmsgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9yYWlkX2RldmljZV9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogaGFuZGxlIgorCSAgICAiKDB4JTA0eCksIHd3aWQoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywKKwkgICAgcmFpZF9kZXZpY2UtPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJhaWRfZGV2aWNlLT5saXN0LCAmaW9jLT5yYWlkX2RldmljZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlIC0gZGVsZXRlIHJhaWRfZGV2aWNlIG9iamVjdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAcmFpZF9kZXZpY2U6IHJhaWRfZGV2aWNlIG9iamVjdAorICoKKyAqIFRoaXMgaXMgcmVtb3ZlZCBmcm9tIHRoZSByYWlkX2RldmljZV9saXN0IGxpbmsgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnJhaWRfZGV2aWNlLT5saXN0KTsKKwltZW1zZXQocmFpZF9kZXZpY2UsIDAsIHNpemVvZihzdHJ1Y3QgX3JhaWRfZGV2aWNlKSk7CisJa2ZyZWUocmFpZF9kZXZpY2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcyAtIGV4cGFuZGVyIGRldmljZSBzZWFyY2gKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcworICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnNhc19ub2RlX2xvY2suCisgKgorICogVGhpcyBzZWFyY2hlcyBmb3IgZXhwYW5kZXIgZGV2aWNlIGJhc2VkIG9uIHNhc19hZGRyZXNzLCB0aGVuIHJldHVybnMgdGhlCisgKiBzYXNfbm9kZSBvYmplY3QuCisgKi8KK3N0cnVjdCBfc2FzX25vZGUgKgorbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1NjQgc2FzX2FkZHJlc3MpCit7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyLCAqcjsKKworCXIgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2V4cGFuZGVyLCAmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyAhPSBzYXNfYWRkcmVzcykKKwkJCWNvbnRpbnVlOworCQlyID0gc2FzX2V4cGFuZGVyOworCQlnb3RvIG91dDsKKwl9Cisgb3V0OgorCXJldHVybiByOworfQorCisvKioKKyAqIF9zY3NpaF9leHBhbmRlcl9ub2RlX2FkZCAtIGluc2VydCBleHBhbmRlciBkZXZpY2UgdG8gdGhlIGxpc3QuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZXhwYW5kZXI6IHRoZSBzYXNfZGV2aWNlIG9iamVjdAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zYXNfbm9kZV9sb2NrLgorICoKKyAqIEFkZGluZyBuZXcgb2JqZWN0IHRvIHRoZSBpb2MtPnNhc19leHBhbmRlcl9saXN0LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2V4cGFuZGVyX25vZGVfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZzYXNfZXhwYW5kZXItPmxpc3QsICZpb2MtPnNhc19leHBhbmRlcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfaXNfZW5kX2RldmljZSAtIGRldGVybWluZXMgaWYgZGV2aWNlIGlzIGFuIGVuZCBkZXZpY2UKKyAqIEBkZXZpY2VfaW5mbzogYml0ZmllbGQgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UuCisgKiBDb250ZXh0OiBub25lCisgKgorICogUmV0dXJucyAxIGlmIGVuZCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK19zY3NpaF9pc19lbmRfZGV2aWNlKHUzMiBkZXZpY2VfaW5mbykKK3sKKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFICYmCisJCSgoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKSB8CisJCShkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NUUF9UQVJHRVQpIHwKKwkJKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0IC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCisgKgorICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLgorICovCitzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqCitfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzY21kOworfQorCisvKioKKyAqIG1wdHNjc2loX2dldGNsZWFyX3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCisgKgorICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLCBhcyB3ZWxsIGFzIGNsZWFyaW5nIHRoZSBzY21kIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKK19zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZDsKKwlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc2NtZDsKK30KKworLyoqCisgKiBfc2NzaWhfc2NzaV9sb29rdXBfc2V0IC0gdXBkYXRlcyBzY21kIGVudHJ5IGluIGxvb2t1cAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgorICoKKyAqIFRoaXMgd2lsbCBzYXZlIHNjbWQgcG9pbnRlciBpbiB0aGUgc2NzaV9sb29rdXAgYXJyYXkuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2NzaV9sb29rdXBfc2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBzY21kOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9maW5kX2J5X3NjbWQgLSBzY21kIGxvb2t1cAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgorICoKKyAqIFRoaXMgd2lsbCBzZWFyY2ggZm9yIGEgc2NtZCBwb2ludGVyIGluIHRoZSBzY3NpX2xvb2t1cCBhcnJheSwKKyAqIHJldHVybmluZyB0aGUgcmV2ZWxlbnQgc21pZC4gIEEgcmV0dXJuZWQgdmFsdWUgb2YgemVybyBtZWFucyBpbnZhbGlkLgorICovCitzdGF0aWMgdTE2Citfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV9zY21kKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNjc2lfY21uZAorICAgICpzY21kKQoreworCXUxNiBzbWlkOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJc21pZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPT0gc2NtZCkgeworCQkJc21pZCA9IGkgKyAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzbWlkOworfQorCisvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9maW5kX2J5X3RhcmdldCAtIHNlYXJjaCBmb3IgbWF0Y2hpbmcgY2hhbm5lbDppZAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaWQ6IHRhcmdldCBpZAorICogQGNoYW5uZWw6IGNoYW5uZWwKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2NzaV9sb29rdXBfbG9jay4KKyAqCisgKiBUaGlzIHdpbGwgc2VhcmNoIGZvciBhIG1hdGNoaW5nIGNoYW5uZWw6aWQgaW4gdGhlIHNjc2lfbG9va3VwIGFycmF5LAorICogcmV0dXJuaW5nIDEgaWYgZm91bmQuCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3Njc2lfbG9va3VwX2ZpbmRfYnlfdGFyZ2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IGlkLAorICAgIGludCBjaGFubmVsKQoreworCXU4IGZvdW5kOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJZm91bmQgPSAwOworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCAmJgorCQkgICAgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5pZCA9PSBpZCAmJgorCQkgICAgaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gY2hhbm5lbCkpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogX3Njc2loX2dldF9jaGFpbl9idWZmZXJfZG1hIC0gb2J0YWluIGJsb2NrIG9mIGNoYWlucyAoZG1hIGFkZHJlc3MpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJucyBwaHlzIHBvaW50ZXIgdG8gY2hhaW4gYnVmZmVyLgorICovCitzdGF0aWMgZG1hX2FkZHJfdAorX3Njc2loX2dldF9jaGFpbl9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJcmV0dXJuIGlvYy0+Y2hhaW5fZG1hICsgKChzbWlkIC0gMSkgKiAoaW9jLT5yZXF1ZXN0X3N6ICoKKwkgICAgaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbykpOworfQorCisvKioKKyAqIF9zY3NpaF9nZXRfY2hhaW5fYnVmZmVyIC0gb2J0YWluIGJsb2NrIG9mIGNoYWlucyBhc3NpZ25lZCB0byBhIG1mIHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHZpcnQgcG9pbnRlciB0byBjaGFpbiBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkICoKK19zY3NpaF9nZXRfY2hhaW5fYnVmZmVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJcmV0dXJuICh2b2lkICopKGlvYy0+Y2hhaW4gKyAoKHNtaWQgLSAxKSAqIChpb2MtPnJlcXVlc3Rfc3ogKgorCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvKSkpOworfQorCisvKioKKyAqIF9zY3NpaF9idWlsZF9zY2F0dGVyX2dhdGhlciAtIG1haW4gc2cgY3JlYXRpb24gcm91dGluZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2NtZDogc2NzaSBjb21tYW5kCisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQ29udGV4dDogbm9uZS4KKyAqCisgKiBUaGUgbWFpbiByb3V0aW5lIHRoYXQgYnVpbGRzIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlIGZyb20gYSBnaXZlbgorICogc2NzaSByZXF1ZXN0IHNlbnQgdmlhIHRoZSAucXVldWVjb21tYW5kIG1haW4gaGFuZGxlci4KKyAqCisgKiBSZXR1cm5zIDAgc3VjY2VzcywgYW55dGhpbmcgZWxzZSBlcnJvcgorICovCitzdGF0aWMgaW50Citfc2NzaWhfYnVpbGRfc2NhdHRlcl9nYXRoZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHUxNiBzbWlkKQoreworCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCWRtYV9hZGRyX3QgY2hhaW5fZG1hOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc2NtZDsKKwl2b2lkICpzZ19sb2NhbCwgKmNoYWluOworCXUzMiBjaGFpbl9vZmZzZXQ7CisJdTMyIGNoYWluX2xlbmd0aDsKKwl1MzIgY2hhaW5fZmxhZ3M7CisJdTMyIHNnZXNfbGVmdDsKKwl1MzIgc2dlc19pbl9zZWdtZW50OworCXUzMiBzZ2xfZmxhZ3M7CisJdTMyIHNnbF9mbGFnc19sYXN0X2VsZW1lbnQ7CisJdTMyIHNnbF9mbGFnc19lbmRfYnVmZmVyOworCisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCisJLyogaW5pdCBzY2F0dGVyIGdhdGhlciBmbGFncyAqLworCXNnbF9mbGFncyA9IE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UOworCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQlzZ2xfZmxhZ3MgfD0gTVBJMl9TR0VfRkxBR1NfSE9TVF9UT19JT0M7CisJc2dsX2ZsYWdzX2xhc3RfZWxlbWVudCA9IChzZ2xfZmxhZ3MgfCBNUEkyX1NHRV9GTEFHU19MQVNUX0VMRU1FTlQpCisJICAgIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCXNnbF9mbGFnc19lbmRfYnVmZmVyID0gKHNnbF9mbGFncyB8IE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgfCBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCkKKwkgICAgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCisJc2dfc2NtZCA9IHNjc2lfc2dsaXN0KHNjbWQpOworCXNnZXNfbGVmdCA9IHNjc2lfZG1hX21hcChzY21kKTsKKwlpZiAoIXNnZXNfbGVmdCkgeworCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NtZC0+ZGV2aWNlLCAicGNpX21hcF9zZyIKKwkJIiBmYWlsZWQ6IHJlcXVlc3QgZm9yICVkIGJ5dGVzIVxuIiwgc2NzaV9idWZmbGVuKHNjbWQpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2dfbG9jYWwgPSAmbXBpX3JlcXVlc3QtPlNHTDsKKwlzZ2VzX2luX3NlZ21lbnQgPSBpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZTsKKwlpZiAoc2dlc19sZWZ0IDw9IHNnZXNfaW5fc2VnbWVudCkKKwkJZ290byBmaWxsX2luX2xhc3Rfc2VnbWVudDsKKworCW1waV9yZXF1ZXN0LT5DaGFpbk9mZnNldCA9IChvZmZzZXRvZihNcGkyU0NTSUlPUmVxdWVzdF90LCBTR0wpICsKKwkgICAgKHNnZXNfaW5fc2VnbWVudCAqIGlvYy0+c2dlX3NpemUpKS80OworCisJLyogZmlsbCBpbiBtYWluIG1lc3NhZ2Ugc2VnbWVudCB3aGVuIHRoZXJlIGlzIGEgY2hhaW4gZm9sbG93aW5nICovCisJd2hpbGUgKHNnZXNfaW5fc2VnbWVudCkgeworCQlpZiAoc2dlc19pbl9zZWdtZW50ID09IDEpCisJCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZShzZ19sb2NhbCwKKwkJCSAgICBzZ2xfZmxhZ3NfbGFzdF9lbGVtZW50IHwgc2dfZG1hX2xlbihzZ19zY21kKSwKKwkJCSAgICBzZ19kbWFfYWRkcmVzcyhzZ19zY21kKSk7CisJCWVsc2UKKwkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHNnX2xvY2FsLCBzZ2xfZmxhZ3MgfAorCQkJICAgIHNnX2RtYV9sZW4oc2dfc2NtZCksIHNnX2RtYV9hZGRyZXNzKHNnX3NjbWQpKTsKKwkJc2dfc2NtZCA9IHNnX25leHQoc2dfc2NtZCk7CisJCXNnX2xvY2FsICs9IGlvYy0+c2dlX3NpemU7CisJCXNnZXNfbGVmdC0tOworCQlzZ2VzX2luX3NlZ21lbnQtLTsKKwl9CisKKwkvKiBpbml0aWFsaXppbmcgdGhlIGNoYWluIGZsYWdzIGFuZCBwb2ludGVycyAqLworCWNoYWluX2ZsYWdzID0gTVBJMl9TR0VfRkxBR1NfQ0hBSU5fRUxFTUVOVCA8PCBNUEkyX1NHRV9GTEFHU19TSElGVDsKKwljaGFpbiA9IF9zY3NpaF9nZXRfY2hhaW5fYnVmZmVyKGlvYywgc21pZCk7CisJY2hhaW5fZG1hID0gX3Njc2loX2dldF9jaGFpbl9idWZmZXJfZG1hKGlvYywgc21pZCk7CisJZG8geworCQlzZ2VzX2luX3NlZ21lbnQgPSAoc2dlc19sZWZ0IDw9CisJCSAgICBpb2MtPm1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2UpID8gc2dlc19sZWZ0IDoKKwkJICAgIGlvYy0+bWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZTsKKwkJY2hhaW5fb2Zmc2V0ID0gKHNnZXNfbGVmdCA9PSBzZ2VzX2luX3NlZ21lbnQpID8KKwkJICAgIDAgOiAoc2dlc19pbl9zZWdtZW50ICogaW9jLT5zZ2Vfc2l6ZSkvNDsKKwkJY2hhaW5fbGVuZ3RoID0gc2dlc19pbl9zZWdtZW50ICogaW9jLT5zZ2Vfc2l6ZTsKKwkJaWYgKGNoYWluX29mZnNldCkgeworCQkJY2hhaW5fb2Zmc2V0ID0gY2hhaW5fb2Zmc2V0IDw8CisJCQkgICAgTVBJMl9TR0VfQ0hBSU5fT0ZGU0VUX1NISUZUOworCQkJY2hhaW5fbGVuZ3RoICs9IGlvYy0+c2dlX3NpemU7CisJCX0KKwkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoc2dfbG9jYWwsIGNoYWluX2ZsYWdzIHwgY2hhaW5fb2Zmc2V0IHwKKwkJICAgIGNoYWluX2xlbmd0aCwgY2hhaW5fZG1hKTsKKwkJc2dfbG9jYWwgPSBjaGFpbjsKKwkJaWYgKCFjaGFpbl9vZmZzZXQpCisJCQlnb3RvIGZpbGxfaW5fbGFzdF9zZWdtZW50OworCisJCS8qIGZpbGwgaW4gY2hhaW4gc2VnbWVudHMgKi8KKwkJd2hpbGUgKHNnZXNfaW5fc2VnbWVudCkgeworCQkJaWYgKHNnZXNfaW5fc2VnbWVudCA9PSAxKQorCQkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHNnX2xvY2FsLAorCQkJCSAgICBzZ2xfZmxhZ3NfbGFzdF9lbGVtZW50IHwKKwkJCQkgICAgc2dfZG1hX2xlbihzZ19zY21kKSwKKwkJCQkgICAgc2dfZG1hX2FkZHJlc3Moc2dfc2NtZCkpOworCQkJZWxzZQorCQkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHNnX2xvY2FsLCBzZ2xfZmxhZ3MgfAorCQkJCSAgICBzZ19kbWFfbGVuKHNnX3NjbWQpLAorCQkJCSAgICBzZ19kbWFfYWRkcmVzcyhzZ19zY21kKSk7CisJCQlzZ19zY21kID0gc2dfbmV4dChzZ19zY21kKTsKKwkJCXNnX2xvY2FsICs9IGlvYy0+c2dlX3NpemU7CisJCQlzZ2VzX2xlZnQtLTsKKwkJCXNnZXNfaW5fc2VnbWVudC0tOworCQl9CisKKwkJY2hhaW5fZG1hICs9IGlvYy0+cmVxdWVzdF9zejsKKwkJY2hhaW4gKz0gaW9jLT5yZXF1ZXN0X3N6OworCX0gd2hpbGUgKDEpOworCisKKyBmaWxsX2luX2xhc3Rfc2VnbWVudDoKKworCS8qIGZpbGwgdGhlIGxhc3Qgc2VnbWVudCAqLworCXdoaWxlIChzZ2VzX2xlZnQpIHsKKwkJaWYgKHNnZXNfbGVmdCA9PSAxKQorCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoc2dfbG9jYWwsIHNnbF9mbGFnc19lbmRfYnVmZmVyIHwKKwkJCSAgICBzZ19kbWFfbGVuKHNnX3NjbWQpLCBzZ19kbWFfYWRkcmVzcyhzZ19zY21kKSk7CisJCWVsc2UKKwkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHNnX2xvY2FsLCBzZ2xfZmxhZ3MgfAorCQkJICAgIHNnX2RtYV9sZW4oc2dfc2NtZCksIHNnX2RtYV9hZGRyZXNzKHNnX3NjbWQpKTsKKwkJc2dfc2NtZCA9IHNnX25leHQoc2dfc2NtZCk7CisJCXNnX2xvY2FsICs9IGlvYy0+c2dlX3NpemU7CisJCXNnZXNfbGVmdC0tOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIHNldHRpbmcgZGV2aWNlIHF1ZXVlIGRlcHRoCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKiBAcWRlcHRoOiByZXF1ZXN0ZWQgcXVldWUgZGVwdGgKKyAqCisgKiBSZXR1cm5zIHF1ZXVlIGRlcHRoLgorICovCitzdGF0aWMgaW50CitzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKwlpbnQgbWF4X2RlcHRoOworCWludCB0YWdfdHlwZTsKKworCW1heF9kZXB0aCA9IHNob3N0LT5jYW5fcXVldWU7CisJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQltYXhfZGVwdGggPSAxOworCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCisJCXFkZXB0aCA9IG1heF9kZXB0aDsKKwl0YWdfdHlwZSA9IChxZGVwdGggPT0gMSkgPyAwIDogTVNHX1NJTVBMRV9UQUc7CisJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgdGFnX3R5cGUsIHFkZXB0aCk7CisKKwlpZiAoc2Rldi0+aW5xdWlyeV9sZW4gPiA3KQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCAiCisJCSJzaW1wbGUoJWQpLCBvcmRlcmVkKCVkKSwgc2NzaV9sZXZlbCglZCksIGNtZF9xdWUoJWQpXG4iLAorCQlzZGV2LT5xdWV1ZV9kZXB0aCwgc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCwgc2Rldi0+c2ltcGxlX3RhZ3MsCisJCXNkZXYtPm9yZGVyZWRfdGFncywgc2Rldi0+c2NzaV9sZXZlbCwKKwkJKHNkZXYtPmlucXVpcnlbN10gJiAyKSA+PiAxKTsKKworCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKK30KKworLyoqCisgKiBzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBjaGFuZ2luZyBkZXZpY2UgcXVldWUgdGFnIHR5cGUKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqIEB0YWdfdHlwZTogcmVxdWVzdGVkIHRhZyB0eXBlCisgKgorICogUmV0dXJucyBxdWV1ZSB0YWcgdHlwZS4KKyAqLworc3RhdGljIGludAorc2NzaWhfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCit7CisJaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKKwkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOworCQlpZiAodGFnX3R5cGUpCisJCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7CisJCWVsc2UKKwkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOworCX0gZWxzZQorCQl0YWdfdHlwZSA9IDA7CisKKwlyZXR1cm4gdGFnX3R5cGU7Cit9CisKKy8qKgorICogc2NzaWhfdGFyZ2V0X2FsbG9jIC0gdGFyZ2V0IGFkZCByb3V0aW5lCisgKiBAc3RhcmdldDogc2NzaSB0YXJnZXQgc3RydWN0CisgKgorICogUmV0dXJucyAwIGlmIG9rLiBBbnkgb3RoZXIgcmV0dXJuIGlzIGFzc3VtZWQgdG8gYmUgYW4gZXJyb3IgYW5kCisgKiB0aGUgZGV2aWNlIGlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQKK3Njc2loX3RhcmdldF9hbGxvYyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoJnN0YXJnZXQtPmRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHk7CisKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3NpX3RhcmdldCksIEdGUF9LRVJORUwpOworCWlmICghc2FzX3RhcmdldF9wcml2X2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhcmdldC0+aG9zdGRhdGEgPSBzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+c3RhcmdldCA9IHN0YXJnZXQ7CisJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IE1QVDJTQVNfSU5WQUxJRF9ERVZJQ0VfSEFORExFOworCisJLyogUkFJRCB2b2x1bWVzICovCisJaWYgKHN0YXJnZXQtPmNoYW5uZWwgPT0gUkFJRF9DSEFOTkVMKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9pZChpb2MsIHN0YXJnZXQtPmlkLAorCQkgICAgc3RhcmdldC0+Y2hhbm5lbCk7CisJCWlmIChyYWlkX2RldmljZSkgeworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IHJhaWRfZGV2aWNlLT5oYW5kbGU7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+c2FzX2FkZHJlc3MgPSByYWlkX2RldmljZS0+d3dpZDsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5mbGFncyB8PSBNUFRfVEFSR0VUX0ZMQUdTX1ZPTFVNRTsKKwkJCXJhaWRfZGV2aWNlLT5zdGFyZ2V0ID0gc3RhcmdldDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogc2FzL3NhdGEgZGV2aWNlcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJwaHkgPSBkZXZfdG9fcnBoeShzdGFyZ2V0LT5kZXYucGFyZW50KTsKKwlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCSAgIHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKTsKKworCWlmIChzYXNfZGV2aWNlKSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPSBzYXNfZGV2aWNlLT5oYW5kbGU7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5zYXNfYWRkcmVzcyA9IHNhc19kZXZpY2UtPnNhc19hZGRyZXNzOworCQlzYXNfZGV2aWNlLT5zdGFyZ2V0ID0gc3RhcmdldDsKKwkJc2FzX2RldmljZS0+aWQgPSBzdGFyZ2V0LT5pZDsKKwkJc2FzX2RldmljZS0+Y2hhbm5lbCA9IHN0YXJnZXQtPmNoYW5uZWw7CisJCWlmIChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpCisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgfD0KKwkJCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2NzaWhfdGFyZ2V0X2Rlc3Ryb3kgLSB0YXJnZXQgZGVzdHJveSByb3V0aW5lCisgKiBAc3RhcmdldDogc2NzaSB0YXJnZXQgc3RydWN0CisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorc2NzaWhfdGFyZ2V0X2Rlc3Ryb3koc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KCZzdGFyZ2V0LT5kZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNhc19ycGh5ICpycGh5OworCisJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwlpZiAoIXNhc190YXJnZXRfcHJpdl9kYXRhKQorCQlyZXR1cm47CisKKwlpZiAoc3RhcmdldC0+Y2hhbm5lbCA9PSBSQUlEX0NIQU5ORUwpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKGlvYywgc3RhcmdldC0+aWQsCisJCSAgICBzdGFyZ2V0LT5jaGFubmVsKTsKKwkJaWYgKHJhaWRfZGV2aWNlKSB7CisJCQlyYWlkX2RldmljZS0+c3RhcmdldCA9IE5VTEw7CisJCQlyYWlkX2RldmljZS0+c2RldiA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJwaHkgPSBkZXZfdG9fcnBoeShzdGFyZ2V0LT5kZXYucGFyZW50KTsKKwlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCSAgIHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwlpZiAoc2FzX2RldmljZSkKKwkJc2FzX2RldmljZS0+c3RhcmdldCA9IE5VTEw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisgb3V0OgorCWtmcmVlKHNhc190YXJnZXRfcHJpdl9kYXRhKTsKKwlzdGFyZ2V0LT5ob3N0ZGF0YSA9IE5VTEw7Cit9CisKKy8qKgorICogc2NzaWhfc2xhdmVfYWxsb2MgLSBkZXZpY2UgYWRkIHJvdXRpbmUKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgaWYgb2suIEFueSBvdGhlciByZXR1cm4gaXMgYXNzdW1lZCB0byBiZSBhbiBlcnJvciBhbmQKKyAqIHRoZSBkZXZpY2UgaXMgaWdub3JlZC4KKyAqLworc3RhdGljIGludAorc2NzaWhfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2FzX2RldmljZV9wcml2X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NzaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW4gPSBzZGV2LT5sdW47CisJc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzID0gTVBUX0RFVklDRV9GTEFHU19JTklUOworCisJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOworCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CisJc2FzX3RhcmdldF9wcml2X2RhdGEtPm51bV9sdW5zKys7CisJc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQgPSBzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzZGV2LT5ob3N0ZGF0YSA9IHNhc19kZXZpY2VfcHJpdl9kYXRhOworCWlmICgoc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVCkpCisJCXNkZXYtPm5vX3VsZF9hdHRhY2ggPSAxOworCisJc2hvc3QgPSBkZXZfdG9fc2hvc3QoJnN0YXJnZXQtPmRldik7CisJaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJaWYgKHN0YXJnZXQtPmNoYW5uZWwgPT0gUkFJRF9DSEFOTkVMKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9pZChpb2MsCisJCSAgICBzdGFyZ2V0LT5pZCwgc3RhcmdldC0+Y2hhbm5lbCk7CisJCWlmIChyYWlkX2RldmljZSkKKwkJCXJhaWRfZGV2aWNlLT5zZGV2ID0gc2RldjsgLyogcmFpZCBpcyBzaW5nbGUgbHVuICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIHNldCBUTFIgYml0IGZvciBTU1AgZGV2aWNlcyAqLworCQlpZiAoIShpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJCSAgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUikpCisJCQlnb3RvIG91dDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXNhc19kZXZpY2UgPSBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJCSAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCWlmIChzYXNfZGV2aWNlICYmIHNhc19kZXZpY2UtPmRldmljZV9pbmZvICYKKwkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpCisJCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgfD0gTVBUX0RFVklDRV9UTFJfT047CisJfQorCisgb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqIHNjc2loX3NsYXZlX2Rlc3Ryb3kgLSBkZXZpY2UgZGVzdHJveSByb3V0aW5lCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorc2NzaWhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisKKwlpZiAoIXNkZXYtPmhvc3RkYXRhKQorCQlyZXR1cm47CisKKwlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+bnVtX2x1bnMtLTsKKwlrZnJlZShzZGV2LT5ob3N0ZGF0YSk7CisJc2Rldi0+aG9zdGRhdGEgPSBOVUxMOworfQorCisvKioKKyAqIHNjc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMgLSBzYXRhIGNhcGFiaWxpdGllcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2RldmljZTogdGhlIHNhc19kZXZpY2Ugb2JqZWN0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKi8KK3N0YXRpYyB2b2lkCitzY3NpaF9kaXNwbGF5X3NhdGFfY2FwYWJpbGl0aWVzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc0RldmljZVBhZ2UwX3Qgc2FzX2RldmljZV9wZzA7CisJdTMyIGlvY19zdGF0dXM7CisJdTE2IGZsYWdzOworCXUzMiBkZXZpY2VfaW5mbzsKKworCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwKGlvYywgJm1waV9yZXBseSwgJnNhc19kZXZpY2VfcGcwLAorCSAgICBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSwgc2FzX2RldmljZS0+aGFuZGxlKSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlmbGFncyA9IGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkZsYWdzKTsKKwlkZXZpY2VfaW5mbyA9IGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldmljZUluZm8pOworCisJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCSAgICAiYXRhcGkoJXMpLCBuY3EoJXMpLCBhc3luX25vdGlmeSglcyksIHNtYXJ0KCVzKSwgZnVhKCVzKSwgIgorCSAgICAic3dfcHJlc2VydmUoJXMpXG4iLAorCSAgICAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19BVEFQSV9ERVZJQ0UpID8gInkiIDogIm4iLAorCSAgICAoZmxhZ3MgJiBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1NBVEFfTkNRX1NVUFBPUlRFRCkgPyAieSIgOiAibiIsCisJICAgIChmbGFncyAmIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9BU1lOQ0hST05PVVNfTk9USUZZKSA/ICJ5IiA6CisJICAgICJuIiwKKwkgICAgKGZsYWdzICYgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX1NNQVJUX1NVUFBPUlRFRCkgPyAieSIgOiAibiIsCisJICAgIChmbGFncyAmIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9GVUFfU1VQUE9SVEVEKSA/ICJ5IiA6ICJuIiwKKwkgICAgKGZsYWdzICYgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX1NXX1BSRVNFUlZFKSA/ICJ5IiA6ICJuIik7Cit9CisKKy8qKgorICogX3Njc2loX2dldF92b2x1bWVfY2FwYWJpbGl0aWVzIC0gdm9sdW1lIGNhcGFiaWxpdGllcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2RldmljZTogdGhlIHJhaWRfZGV2aWNlIG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2dldF92b2x1bWVfY2FwYWJpbGl0aWVzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSkKK3sKKwlNcGkyUmFpZFZvbFBhZ2UwX3QgKnZvbF9wZzA7CisJTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3QgcGRfcGcwOworCU1waTJTYXNEZXZpY2VQYWdlMF90IHNhc19kZXZpY2VfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MTYgc3o7CisJdTggbnVtX3BkczsKKworCWlmICgobXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9wZHMoaW9jLCByYWlkX2RldmljZS0+aGFuZGxlLAorCSAgICAmbnVtX3BkcykpIHx8ICFudW1fcGRzKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcmFpZF9kZXZpY2UtPm51bV9wZHMgPSBudW1fcGRzOworCXN6ID0gb2Zmc2V0b2YoTXBpMlJhaWRWb2xQYWdlMF90LCBQaHlzRGlzaykgKyAobnVtX3BkcyAqCisJICAgIHNpemVvZihNcGkyUmFpZFZvbDBQaHlzRGlza190KSk7CisJdm9sX3BnMCA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghdm9sX3BnMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMChpb2MsICZtcGlfcmVwbHksIHZvbF9wZzAsCisJICAgICBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsIHN6KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWtmcmVlKHZvbF9wZzApOworCQlyZXR1cm47CisJfQorCisJcmFpZF9kZXZpY2UtPnZvbHVtZV90eXBlID0gdm9sX3BnMC0+Vm9sdW1lVHlwZTsKKworCS8qIGZpZ3VyZSBvdXQgd2hhdCB0aGUgdW5kZXJseWluZyBkZXZpY2VzIGFyZSBieQorCSAqIG9idGFpbmluZyB0aGUgZGV2aWNlX2luZm8gYml0cyBmb3IgdGhlIDFzdCBkZXZpY2UKKwkgKi8KKwlpZiAoIShtcHQyc2FzX2NvbmZpZ19nZXRfcGh5c19kaXNrX3BnMChpb2MsICZtcGlfcmVwbHksCisJICAgICZwZF9wZzAsIE1QSTJfUEhZU0RJU0tfUEdBRF9GT1JNX1BIWVNESVNLTlVNLAorCSAgICB2b2xfcGcwLT5QaHlzRGlza1swXS5QaHlzRGlza051bSkpKSB7CisJCWlmICghKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChpb2MsICZtcGlfcmVwbHksCisJCSAgICAmc2FzX2RldmljZV9wZzAsIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLAorCQkgICAgbGUxNl90b19jcHUocGRfcGcwLkRldkhhbmRsZSkpKSkgeworCQkJcmFpZF9kZXZpY2UtPmRldmljZV9pbmZvID0KKwkJCSAgICBsZTMyX3RvX2NwdShzYXNfZGV2aWNlX3BnMC5EZXZpY2VJbmZvKTsKKwkJfQorCX0KKworCWtmcmVlKHZvbF9wZzApOworfQorCisvKioKKyAqIHNjc2loX3NsYXZlX2NvbmZpZ3VyZSAtIGRldmljZSBjb25maWd1cmUgcm91dGluZS4KKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgaWYgb2suIEFueSBvdGhlciByZXR1cm4gaXMgYXNzdW1lZCB0byBiZSBhbiBlcnJvciBhbmQKKyAqIHRoZSBkZXZpY2UgaXMgaWdub3JlZC4KKyAqLworc3RhdGljIGludAorc2NzaWhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBxZGVwdGg7CisJdTggc3NwX3RhcmdldCA9IDA7CisJY2hhciAqZHMgPSAiIjsKKwljaGFyICpyX2xldmVsID0gIiI7CisKKwlxZGVwdGggPSAxOworCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2Rldi0+aG9zdGRhdGE7CisJc2FzX2RldmljZV9wcml2X2RhdGEtPmNvbmZpZ3VyZWRfbHVuID0gMTsKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJj0gfk1QVF9ERVZJQ0VfRkxBR1NfSU5JVDsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0OworCisJLyogcmFpZCB2b2x1bWUgaGFuZGxpbmcgKi8KKwlpZiAoc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WT0xVTUUpIHsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywKKwkJICAgICBzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCWlmICghcmFpZF9kZXZpY2UpIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJX3Njc2loX2dldF92b2x1bWVfY2FwYWJpbGl0aWVzKGlvYywgcmFpZF9kZXZpY2UpOworCisJCS8qIFJBSUQgUXVldWUgRGVwdGggU3VwcG9ydAorCQkgKiBJUyB2b2x1bWUgPSB1bmRlcmx5aW5nIHFkZXB0aCBvZiBkcml2ZSB0eXBlLCBlaXRoZXIKKwkJICogICAgTVBUMlNBU19TQVNfUVVFVUVfREVQVEggb3IgTVBUMlNBU19TQVRBX1FVRVVFX0RFUFRICisJCSAqIElNL0lNRS9SMTAgPSAxMjggKE1QVDJTQVNfUkFJRF9RVUVVRV9ERVBUSCkKKwkJICovCisJCWlmIChyYWlkX2RldmljZS0+ZGV2aWNlX2luZm8gJgorCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkgeworCQkJcWRlcHRoID0gTVBUMlNBU19TQVNfUVVFVUVfREVQVEg7CisJCQlkcyA9ICJTU1AiOworCQl9IGVsc2UgeworCQkJcWRlcHRoID0gTVBUMlNBU19TQVRBX1FVRVVFX0RFUFRIOworCQkJIGlmIChyYWlkX2RldmljZS0+ZGV2aWNlX2luZm8gJgorCQkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFKQorCQkJCWRzID0gIlNBVEEiOworCQkJZWxzZQorCQkJCWRzID0gIlNUUCI7CisJCX0KKworCQlzd2l0Y2ggKHJhaWRfZGV2aWNlLT52b2x1bWVfdHlwZSkgeworCQljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMDoKKwkJCXJfbGV2ZWwgPSAiUkFJRDAiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxRToKKwkJCXFkZXB0aCA9IE1QVDJTQVNfUkFJRF9RVUVVRV9ERVBUSDsKKwkJCXJfbGV2ZWwgPSAiUkFJRDFFIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMToKKwkJCXFkZXB0aCA9IE1QVDJTQVNfUkFJRF9RVUVVRV9ERVBUSDsKKwkJCXJfbGV2ZWwgPSAiUkFJRDEiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxMDoKKwkJCXFkZXB0aCA9IE1QVDJTQVNfUkFJRF9RVUVVRV9ERVBUSDsKKwkJCXJfbGV2ZWwgPSAiUkFJRDEwIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9VTktOT1dOOgorCQlkZWZhdWx0OgorCQkJcWRlcHRoID0gTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIOworCQkJcl9sZXZlbCA9ICJSQUlEWCI7CisJCQlicmVhazsKKwkJfQorCisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIiVzOiAiCisJCSAgICAiaGFuZGxlKDB4JTA0eCksIHd3aWQoMHglMDE2bGx4KSwgcGRfY291bnQoJWQpLCB0eXBlKCVzKVxuIiwKKwkJICAgIHJfbGV2ZWwsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJhaWRfZGV2aWNlLT53d2lkLAorCQkgICAgcmFpZF9kZXZpY2UtPm51bV9wZHMsIGRzKTsKKwkJc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CisJCXJldHVybiAwOworCX0KKworCS8qIG5vbi1yYWlkIGhhbmRsaW5nICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+c2FzX2FkZHJlc3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJaWYgKHNhc19kZXZpY2UpIHsKKwkJaWYgKHNhc190YXJnZXRfcHJpdl9kYXRhLT5mbGFncyAmCisJCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKSB7CisJCQltcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZShpb2MsCisJCQkgICAgc2FzX2RldmljZS0+aGFuZGxlLCAmc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSk7CisJCQltcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQoaW9jLAorCQkJICAgIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUsCisJCQkgICAgJnNhc19kZXZpY2UtPnZvbHVtZV93d2lkKTsKKwkJfQorCQlpZiAoc2FzX2RldmljZS0+ZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKSB7CisJCQlxZGVwdGggPSBNUFQyU0FTX1NBU19RVUVVRV9ERVBUSDsKKwkJCXNzcF90YXJnZXQgPSAxOworCQkJZHMgPSAiU1NQIjsKKwkJfSBlbHNlIHsKKwkJCXFkZXB0aCA9IE1QVDJTQVNfU0FUQV9RVUVVRV9ERVBUSDsKKwkJCWlmIChzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyAmCisJCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fU1RQX1RBUkdFVCkKKwkJCQlkcyA9ICJTVFAiOworCQkJZWxzZSBpZiAoc2FzX2RldmljZS0+ZGV2aWNlX2luZm8gJgorCQkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFKQorCQkJCWRzID0gIlNBVEEiOworCQl9CisKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAic2FzX2FkZHIoMHglMDE2bGx4KSwgZGV2aWNlX25hbWUoMHglMDE2bGx4KVxuIiwKKwkJICAgIGRzLCBzYXNfZGV2aWNlLT5oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT5kZXZpY2VfbmFtZSk7CisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIiVzOiAiCisJCSAgICAiZW5jbG9zdXJlX2xvZ2ljYWxfaWQoMHglMDE2bGx4KSwgc2xvdCglZClcbiIsIGRzLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQsCisJCSAgICBzYXNfZGV2aWNlLT5zbG90KTsKKworCQlpZiAoIXNzcF90YXJnZXQpCisJCQlzY3NpaF9kaXNwbGF5X3NhdGFfY2FwYWJpbGl0aWVzKGlvYywgc2FzX2RldmljZSwgc2Rldik7CisJfQorCisJc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CisKKwlpZiAoc3NwX3RhcmdldCkKKwkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2NzaWhfYmlvc19wYXJhbSAtIGZldGNoIGhlYWQsIHNlY3RvciwgY3lsaW5kZXIgaW5mbyBmb3IgYSBkaXNrCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKiBAYmRldjogcG9pbnRlciB0byBibG9jayBkZXZpY2UgY29udGV4dAorICogQGNhcGFjaXR5OiBkZXZpY2Ugc2l6ZSAoaW4gNTEyIGJ5dGUgc2VjdG9ycykKKyAqIEBwYXJhbXM6IHRocmVlIGVsZW1lbnQgYXJyYXkgdG8gcGxhY2Ugb3V0cHV0OgorICogICAgICAgICAgICAgIHBhcmFtc1swXSBudW1iZXIgb2YgaGVhZHMgKG1heCAyNTUpCisgKiAgICAgICAgICAgICAgcGFyYW1zWzFdIG51bWJlciBvZiBzZWN0b3JzIChtYXggNjMpCisgKiAgICAgICAgICAgICAgcGFyYW1zWzJdIG51bWJlciBvZiBjeWxpbmRlcnMKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIGludAorc2NzaWhfYmlvc19wYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisgICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCBwYXJhbXNbXSkKK3sKKwlpbnQJCWhlYWRzOworCWludAkJc2VjdG9yczsKKwlzZWN0b3JfdAljeWxpbmRlcnM7CisJdWxvbmcgCQlkdW1teTsKKworCWhlYWRzID0gNjQ7CisJc2VjdG9ycyA9IDMyOworCisJZHVtbXkgPSBoZWFkcyAqIHNlY3RvcnM7CisJY3lsaW5kZXJzID0gY2FwYWNpdHk7CisJc2VjdG9yX2RpdihjeWxpbmRlcnMsIGR1bW15KTsKKworCS8qCisJICogSGFuZGxlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIHNpemUgZm9yIGxvZ2ljYWwgZHJpdmVzCisJICogPiAxR2IKKwkgKi8KKwlpZiAoKHVsb25nKWNhcGFjaXR5ID49IDB4MjAwMDAwKSB7CisJCWhlYWRzID0gMjU1OworCQlzZWN0b3JzID0gNjM7CisJCWR1bW15ID0gaGVhZHMgKiBzZWN0b3JzOworCQljeWxpbmRlcnMgPSBjYXBhY2l0eTsKKwkJc2VjdG9yX2RpdihjeWxpbmRlcnMsIGR1bW15KTsKKwl9CisKKwkvKiByZXR1cm4gcmVzdWx0ICovCisJcGFyYW1zWzBdID0gaGVhZHM7CisJcGFyYW1zWzFdID0gc2VjdG9yczsKKwlwYXJhbXNbMl0gPSBjeWxpbmRlcnM7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfc2NzaWhfcmVzcG9uc2VfY29kZSAtIHRyYW5zbGF0aW9uIG9mIGRldmljZSByZXNwb25zZSBjb2RlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByZXNwb25zZV9jb2RlOiByZXNwb25zZSBjb2RlIHJldHVybmVkIGJ5IHRoZSBkZXZpY2UKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9yZXNwb25zZV9jb2RlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggcmVzcG9uc2VfY29kZSkKK3sKKwljaGFyICpkZXNjOworCisJc3dpdGNoIChyZXNwb25zZV9jb2RlKSB7CisJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fQ09NUExFVEU6CisJCWRlc2MgPSAidGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgY29tcGxldGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRToKKwkJZGVzYyA9ICJpbnZhbGlkIGZyYW1lIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fTk9UX1NVUFBPUlRFRDoKKwkJZGVzYyA9ICJ0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBub3Qgc3VwcG9ydGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fRkFJTEVEOgorCQlkZXNjID0gInRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IGZhaWxlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX1NVQ0NFRURFRDoKKwkJZGVzYyA9ICJ0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBzdWNjZWVkZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9JTlZBTElEX0xVTjoKKwkJZGVzYyA9ICJpbnZhbGlkIGx1biI7CisJCWJyZWFrOworCWNhc2UgMHhBOgorCQlkZXNjID0gIm92ZXJsYXBwZWQgdGFnIGF0dGVtcHRlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0M6CisJCWRlc2MgPSAidGFzayBxdWV1ZWQsIGhvd2V2ZXIgbm90IHNlbnQgdG8gdGFyZ2V0IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGVzYyA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJyZXNwb25zZV9jb2RlKDB4JTAxeCk6ICVzXG4iLAorCQlpb2MtPm5hbWUsIHJlc3BvbnNlX2NvZGUsIGRlc2MpOworfQorCisvKioKKyAqIHNjc2loX3RtX2RvbmUgLSB0bSBjb21wbGV0aW9uIHJvdXRpbmUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBub25lLgorICoKKyAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgc2NzaWhfaXNzdWVfdG0uCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitzY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit7CisJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CisKKwlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKKwkJcmV0dXJuOworCWlmIChpb2MtPnRtX2NtZHMuc21pZCAhPSBzbWlkKQorCQlyZXR1cm47CisJaW9jLT50bV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKKwltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJaWYgKG1waV9yZXBseSkgeworCQltZW1jcHkoaW9jLT50bV9jbWRzLnJlcGx5LCBtcGlfcmVwbHksIG1waV9yZXBseS0+TXNnTGVuZ3RoKjQpOworCQlpb2MtPnRtX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFUExZX1ZBTElEOworCX0KKwlpb2MtPnRtX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOworCWNvbXBsZXRlKCZpb2MtPnRtX2NtZHMuZG9uZSk7Cit9CisKKy8qKgorICogbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyAtIHNldCBwZXIgdGFyZ2V0IHRtX2J1c3kKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICoKKyAqIER1cmluZyB0YXNrbWFuZ2VtZW50IHJlcXVlc3QsIHdlIG5lZWQgdG8gZnJlZXplIHRoZSBkZXZpY2UgcXVldWUuCisgKi8KK3ZvaWQKK21wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXU4IHNraXAgPSAwOworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGlvYy0+c2hvc3QpIHsKKwkJaWYgKHNraXApCisJCQljb250aW51ZTsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKwkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT50bV9idXN5ID0gMTsKKwkJCXNraXAgPSAxOworCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOworCQl9CisJfQorfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfY2xlYXJfdG1fZmxhZyAtIGNsZWFyIHBlciB0YXJnZXQgdG1fYnVzeQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKgorICogRHVyaW5nIHRhc2ttYW5nZW1lbnQgcmVxdWVzdCwgd2UgbmVlZCB0byBmcmVlemUgdGhlIGRldmljZSBxdWV1ZS4KKyAqLwordm9pZAorbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwl1OCBza2lwID0gMDsKKworCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBpb2MtPnNob3N0KSB7CisJCWlmIChza2lwKQorCQkJY29udGludWU7CisJCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2Rldi0+aG9zdGRhdGE7CisJCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEpCisJCQljb250aW51ZTsKKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUgPT0gaGFuZGxlKSB7CisJCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+dG1fYnVzeSA9IDA7CisJCQlza2lwID0gMTsKKwkJCWlvYy0+aWdub3JlX2xvZ2luZm9zID0gMDsKKwkJfQorCX0KK30KKworLyoqCisgKiBtcHQyc2FzX3Njc2loX2lzc3VlX3RtIC0gbWFpbiByb3V0aW5lIGZvciBzZW5kaW5nIHRtIHJlcXVlc3RzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBzdHJ1Y3QKKyAqIEBkZXZpY2VfaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBAbHVuOiBsdW4gbnVtYmVyCisgKiBAdHlwZTogTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfX1hYWCAoZGVmaW5lZCBpbiBtcGkyX2luaXQuaCkKKyAqIEBzbWlkX3Rhc2s6IHNtaWQgYXNzaWduZWQgdG8gdGhlIHRhc2sKKyAqIEB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKKyAqIENvbnRleHQ6IFRoZSBjYWxsaW5nIGZ1bmN0aW9uIG5lZWRzIHRvIGFjcXVpcmUgdGhlIHRtX2NtZHMubXV0ZXgKKyAqCisgKiBBIGdlbmVyaWMgQVBJIGZvciBzZW5kaW5nIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0cyB0byBmaXJtd2FyZS4KKyAqCisgKiBUaGUgaW9jLT50bV9jbWRzLnN0YXR1cyBmbGFnIHNob3VsZCBiZSBNUFQyX0NNRF9OT1RfVVNFRCBiZWZvcmUgY2FsbGluZworICogdGhpcyBBUEkuCisgKgorICogVGhlIGNhbGxiYWNrIGluZGV4IGlzIHNldCBpbnNpZGUgYGlvYy0+dG1fY2JfaWR4YC4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc19zY3NpaF9pc3N1ZV90bShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsIHVpbnQgbHVuLAorICAgIHU4IHR5cGUsIHUxNiBzbWlkX3Rhc2ssIHVsb25nIHRpbWVvdXQpCit7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseTsKKwl1MTYgc21pZCA9IDA7CisJdTMyIGlvY19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXU4IFZGX0lEID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCB8fAorCSAgICBpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAwKTsKKwlpZiAoaW9jX3N0YXRlICYgTVBJMl9ET09SQkVMTF9VU0VEKSB7CisJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAidW5leHBlY3RlZCBkb29yYmVsbCAiCisJCSAgICAiYWN0aXZlIVxuIiwgaW9jLT5uYW1lKSk7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisKKwlpZiAoKGlvY19zdGF0ZSAmIE1QSTJfSU9DX1NUQVRFX01BU0spID09IE1QSTJfSU9DX1NUQVRFX0ZBVUxUKSB7CisJCW1wdDJzYXNfYmFzZV9mYXVsdF9pbmZvKGlvYywgaW9jX3N0YXRlICYKKwkJICAgIE1QSTJfRE9PUkJFTExfREFUQV9NQVNLKTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnRtX2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbmRpbmcgdG06IGhhbmRsZSgweCUwNHgpLCIKKwkgICAgIiB0YXNrX3R5cGUoMHglMDJ4KSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlLCB0eXBlLCBzbWlkKSk7CisJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+dG1fY21kcy5zbWlkID0gc21pZDsKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVDsKKwltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKKwltcGlfcmVxdWVzdC0+VGFza1R5cGUgPSB0eXBlOworCW1waV9yZXF1ZXN0LT5UYXNrTUlEID0gY3B1X3RvX2xlMTYoc21pZF90YXNrKTsKKwlpbnRfdG9fc2NzaWx1bihsdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKiltcGlfcmVxdWVzdC0+TFVOKTsKKwltcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKGlvYywgaGFuZGxlKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkLCBWRl9JRCk7CisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+dG1fY21kcy5kb25lLCB0aW1lb3V0KkhaKTsKKwltcHQyc2FzX3Njc2loX2NsZWFyX3RtX2ZsYWcoaW9jLCBoYW5kbGUpOworCWlmICghKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCkvNCk7CisJCWlmICghKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CisJfQorCisJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgeworCQltcGlfcmVwbHkgPSBpb2MtPnRtX2NtZHMucmVwbHk7CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjb21wbGV0ZSB0bTogIgorCQkgICAgImlvY19zdGF0dXMoMHglMDR4KSwgbG9naW5mbygweCUwOHgpLCB0ZXJtX2NvdW50KDB4JTA4eClcbiIsCisJCSAgICBpb2MtPm5hbWUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpKSk7CisJCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVE0pCisJCQlfc2NzaWhfcmVzcG9uc2VfY29kZShpb2MsIG1waV9yZXBseS0+UmVzcG9uc2VDb2RlKTsKKwl9CisJcmV0dXJuOworIGlzc3VlX2hvc3RfcmVzZXQ6CisJbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwgRk9SQ0VfQklHX0hBTU1FUik7Cit9CisKKy8qKgorICogc2NzaWhfYWJvcnQgLSBlaCB0aHJlYWRzIG1haW4gYWJvcnQgcm91dGluZQorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqLworc3RhdGljIGludAorc2NzaWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwl1MTYgc21pZDsKKwl1MTYgaGFuZGxlOworCWludCByOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWRfbG9va3VwOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImF0dGVtcHRpbmcgdGFzayBhYm9ydCEgc2NtZCglcClcbiIsCisJICAgIGlvYy0+bmFtZSwgc2NtZCk7CisJc2NzaV9wcmludF9jb21tYW5kKHNjbWQpOworCisJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkZXZpY2UgYmVlbiBkZWxldGVkISBzY21kKCVwKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgc2NtZCk7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CisJCXIgPSBTVUNDRVNTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBzZWFyY2ggZm9yIHRoZSBjb21tYW5kICovCisJc21pZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9maW5kX2J5X3NjbWQoaW9jLCBzY21kKTsKKwlpZiAoIXNtaWQpIHsKKwkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQlyID0gU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogZm9yIGhpZGRlbiByYWlkIGNvbXBvbmVudHMgYW5kIHZvbHVtZXMgdGhpcyBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5mbGFncyAmCisJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQgfHwKKwkgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WT0xVTUUpIHsKKwkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQlyID0gRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCWhhbmRsZSA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGU7CisJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgc2FzX2RldmljZV9wcml2X2RhdGEtPmx1biwKKwkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSywgc21pZCwgMzApOworCisJLyogc2FuaXR5IGNoZWNrIC0gc2VlIHdoZXRoZXIgY29tbWFuZCBhY3R1YWxseSBjb21wbGV0ZWQgKi8KKwlzY21kX2xvb2t1cCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKKwlpZiAoc2NtZF9sb29rdXAgJiYgKHNjbWRfbG9va3VwLT5zZXJpYWxfbnVtYmVyID09IHNjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlyID0gRkFJTEVEOworCWVsc2UKKwkJciA9IFNVQ0NFU1M7CisJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X3VubG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKworIG91dDoKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAidGFzayBhYm9ydDogJXMgc2NtZCglcClcbiIsCisJICAgIGlvYy0+bmFtZSwgKChyID09IFNVQ0NFU1MpID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpLCBzY21kKTsKKwlyZXR1cm4gcjsKK30KKworCisvKioKKyAqIHNjc2loX2Rldl9yZXNldCAtIGVoIHRocmVhZHMgbWFpbiBkZXZpY2UgcmVzZXQgcm91dGluZQorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqLworc3RhdGljIGludAorc2NzaWhfZGV2X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzY21kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2CWhhbmRsZTsKKwlpbnQgcjsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJhdHRlbXB0aW5nIHRhcmdldCByZXNldCEgc2NtZCglcClcbiIsCisJICAgIGlvYy0+bmFtZSwgc2NtZCk7CisJc2NzaV9wcmludF9jb21tYW5kKHNjbWQpOworCisJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkZXZpY2UgYmVlbiBkZWxldGVkISBzY21kKCVwKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgc2NtZCk7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CisJCXIgPSBTVUNDRVNTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBmb3IgaGlkZGVuIHJhaWQgY29tcG9uZW50cyBvYnRhaW4gdGhlIHZvbHVtZV9oYW5kbGUgKi8KKwloYW5kbGUgPSAwOworCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+ZmxhZ3MgJgorCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLAorCQkgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKKwkJaWYgKHNhc19kZXZpY2UpCisJCQloYW5kbGUgPSBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQloYW5kbGUgPSBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlOworCisJaWYgKCFoYW5kbGUpIHsKKwkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQlyID0gRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIDAsCisJICAgIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVCwgMCwgMzApOworCisJLyoKKwkgKiAgc2FuaXR5IGNoZWNrIHNlZSB3aGV0aGVyIGFsbCBjb21tYW5kcyB0byB0aGlzIHRhcmdldCBiZWVuCisJICogIGNvbXBsZXRlZAorCSAqLworCWlmIChfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV90YXJnZXQoaW9jLCBzY21kLT5kZXZpY2UtPmlkLAorCSAgICBzY21kLT5kZXZpY2UtPmNoYW5uZWwpKQorCQlyID0gRkFJTEVEOworCWVsc2UKKwkJciA9IFNVQ0NFU1M7CisJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCW11dGV4X3VubG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKworIG91dDoKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAidGFyZ2V0IHJlc2V0OiAlcyBzY21kKCVwKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAoKHIgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHNjbWQpOworCXJldHVybiByOworfQorCisvKioKKyAqIHNjc2loX2Fib3J0IC0gZWggdGhyZWFkcyBtYWluIGhvc3QgcmVzZXQgcm91dGluZQorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqLworc3RhdGljIGludAorc2NzaWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2NtZC0+ZGV2aWNlLT5ob3N0KTsKKwlpbnQgciwgcmV0dmFsOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImF0dGVtcHRpbmcgaG9zdCByZXNldCEgc2NtZCglcClcbiIsCisJICAgIGlvYy0+bmFtZSwgc2NtZCk7CisJc2NzaV9wcmludF9jb21tYW5kKHNjbWQpOworCisJcmV0dmFsID0gbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKKwkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisJciA9IChyZXR2YWwgPCAwKSA/IEZBSUxFRCA6IFNVQ0NFU1M7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImhvc3QgcmVzZXQ6ICVzIHNjbWQoJXApXG4iLAorCSAgICBpb2MtPm5hbWUsICgociA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgc2NtZCk7CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBfc2NzaWhfZndfZXZlbnRfYWRkIC0gaW5zZXJ0IGFuZCBxdWV1ZSB1cCBmd19ldmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZndfZXZlbnQ6IG9iamVjdCBkZXNjcmliaW5nIHRoZSBldmVudAorICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5md19ldmVudF9sb2NrLgorICoKKyAqIFRoaXMgYWRkcyB0aGUgZmlybXdhcmUgZXZlbnQgb2JqZWN0IGludG8gbGluayBsaXN0LCB0aGVuIHF1ZXVlcyBpdCB1cCB0bworICogYmUgcHJvY2Vzc2VkIGZyb20gdXNlciBjb250ZXh0LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2Z3X2V2ZW50X2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZmd19ldmVudC0+bGlzdCwgJmlvYy0+ZndfZXZlbnRfbGlzdCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmZ3X2V2ZW50LT53b3JrLCBfZmlybXdhcmVfZXZlbnRfd29yayk7CisJcXVldWVfZGVsYXllZF93b3JrKGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLCAmZndfZXZlbnQtPndvcmssIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9md19ldmVudF9mcmVlIC0gZGVsZXRlIGZ3X2V2ZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBmd19ldmVudDogb2JqZWN0IGRlc2NyaWJpbmcgdGhlIGV2ZW50CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPmZ3X2V2ZW50X2xvY2suCisgKgorICogVGhpcyByZW1vdmVzIGZpcm13YXJlIGV2ZW50IG9iamVjdCBmcm9tIGxpbmsgbGlzdCwgZnJlZXMgYXNzb2NpYXRlZCBtZW1vcnkuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZndfZXZlbnRfZnJlZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrCisgICAgKmZ3X2V2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmZ3X2V2ZW50LT5saXN0KTsKKwlrZnJlZShmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJa2ZyZWUoZndfZXZlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9md19ldmVudF9hZGQgLSByZXF1ZXVlIGFuIGV2ZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBmd19ldmVudDogb2JqZWN0IGRlc2NyaWJpbmcgdGhlIGV2ZW50CisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPmZ3X2V2ZW50X2xvY2suCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZndfZXZlbnRfcmVxdWV1ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrCisgICAgKmZ3X2V2ZW50LCB1bnNpZ25lZCBsb25nIGRlbGF5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQsICZmd19ldmVudC0+d29yaywgZGVsYXkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF9md19ldmVudF9vZmYgLSB0dXJuIGZsYWcgb2ZmIHByZXZlbnRpbmcgZXZlbnQgaGFuZGxpbmcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFVzZWQgdG8gcHJldmVudCBoYW5kbGluZyBvZiBmaXJtd2FyZSBldmVudHMgZHVyaW5nIGFkYXB0ZXIgcmVzZXQKKyAqIGRyaXZlciB1bmxvYWQuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZndfZXZlbnRfb2ZmKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCWlvYy0+ZndfZXZlbnRzX29mZiA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisKK30KKworLyoqCisgKiBfc2NzaWhfZndfZXZlbnRfb24gLSB0dXJuIGZsYWcgb24gYWxsb3dpbmcgZmlybXdhcmUgZXZlbnQgaGFuZGxpbmcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9md19ldmVudF9vbihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlpb2MtPmZ3X2V2ZW50c19vZmYgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIF9zY3NpaF91YmxvY2tfaW9fZGV2aWNlIC0gc2V0IHRoZSBkZXZpY2Ugc3RhdGUgdG8gU0RFVl9SVU5OSU5HCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqCisgKiBEdXJpbmcgZGV2aWNlIHB1bGwgd2UgbmVlZCB0byBhcHByb3BpYXRlbHkgc2V0IHRoZSBzZGV2IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3VibG9ja19pb19kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGlvYy0+c2hvc3QpIHsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKwkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5ibG9jaykKKwkJCWNvbnRpbnVlOworCQlpZiAoc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJCWRld3RwcmludGsoaW9jLCBzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkgICAgTVBUMlNBU19JTkZPX0ZNVCAiU0RFVl9SVU5OSU5HOiAiCisJCQkgICAgImhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmJsb2NrID0gMDsKKwkJCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX1JVTk5JTkcpOworCQl9CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9ibG9ja19pb19kZXZpY2UgLSBzZXQgdGhlIGRldmljZSBzdGF0ZSB0byBTREVWX0JMT0NLCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqCisgKiBEdXJpbmcgZGV2aWNlIHB1bGwgd2UgbmVlZCB0byBhcHByb3BpYXRlbHkgc2V0IHRoZSBzZGV2IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2Jsb2NrX2lvX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaW9jLT5zaG9zdCkgeworCQlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCQlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhKQorCQkJY29udGludWU7CisJCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+YmxvY2spCisJCQljb250aW51ZTsKKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUgPT0gaGFuZGxlKSB7CisJCQlkZXd0cHJpbnRrKGlvYywgc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJICAgIE1QVDJTQVNfSU5GT19GTVQgIlNERVZfQkxPQ0s6ICIKKwkJCSAgICAiaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CisJCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+YmxvY2sgPSAxOworCQkJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQkxPQ0spOworCQl9CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9ibG9ja19pb190b19jaGlsZHJlbl9hdHRhY2hlZF90b19leAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2V4cGFuZGVyOiB0aGUgc2FzX2RldmljZSBvYmplY3QKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0IHNkZXYgc3RhdGUgdG8gU0RFVl9CTE9DSyBmb3IgYWxsIGRldmljZXMKKyAqIGF0dGFjaGVkIHRvIHRoaXMgZXhwYW5kZXIuIFRoaXMgZnVuY3Rpb24gY2FsbGVkIHdoZW4gZXhwYW5kZXIgaXMKKyAqIHB1bGxlZC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9ibG9ja19pb190b19jaGlsZHJlbl9hdHRhY2hlZF90b19leChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyKQoreworCXN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJc3RydWN0IF9zYXNfbm9kZSAqZXhwYW5kZXJfc2libGluZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFzYXNfZXhwYW5kZXIpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobXB0MnNhc19wb3J0LAorCSAgICZzYXNfZXhwYW5kZXItPnNhc19wb3J0X2xpc3QsIHBvcnRfbGlzdCkgeworCQlpZiAobXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0KKwkJICAgIFNBU19FTkRfREVWSUNFKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJCXNhc19kZXZpY2UgPQorCQkJICAgIG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkJCSAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCQlpZiAoIXNhc19kZXZpY2UpCisJCQkJY29udGludWU7CisJCQlfc2NzaWhfYmxvY2tfaW9fZGV2aWNlKGlvYywgc2FzX2RldmljZS0+aGFuZGxlKTsKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkobXB0MnNhc19wb3J0LAorCSAgICZzYXNfZXhwYW5kZXItPnNhc19wb3J0X2xpc3QsIHBvcnRfbGlzdCkgeworCisJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRURHRV9FWFBBTkRFUiB8fAorCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0KKwkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX0ZBTk9VVF9FWFBBTkRFUikgeworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCQlleHBhbmRlcl9zaWJsaW5nID0KKwkJCSAgICBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoCisJCQkgICAgaW9jLCBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwkJCV9zY3NpaF9ibG9ja19pb190b19jaGlsZHJlbl9hdHRhY2hlZF90b19leChpb2MsCisJCQkgICAgZXhwYW5kZXJfc2libGluZyk7CisJCX0KKwl9Cit9CisKKy8qKgorICogX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX2RpcmVjdGx5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiB0b3BvbG9neSBjaGFuZ2UgZXZlbnQgZGF0YQorICoKKyAqIFRoaXMgcm91dGluZSBzZXQgc2RldiBzdGF0ZSB0byBTREVWX0JMT0NLIGZvciBhbGwgZGV2aWNlcworICogZGlyZWN0IGF0dGFjaGVkIGR1cmluZyBkZXZpY2UgcHVsbC4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9ibG9ja19pb190b19jaGlsZHJlbl9hdHRhY2hlZF9kaXJlY3RseShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICpldmVudF9kYXRhKQoreworCWludCBpOworCXUxNiBoYW5kbGU7CisJdTE2IHJlYXNvbl9jb2RlOworCXU4IHBoeV9udW1iZXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7CisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBIWVtpXS5BdHRhY2hlZERldkhhbmRsZSk7CisJCWlmICghaGFuZGxlKQorCQkJY29udGludWU7CisJCXBoeV9udW1iZXIgPSBldmVudF9kYXRhLT5TdGFydFBoeU51bSArIGk7CisJCXJlYXNvbl9jb2RlID0gZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CisJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX0RFTEFZX05PVF9SRVNQT05ESU5HKQorCQkJX3Njc2loX2Jsb2NrX2lvX2RldmljZShpb2MsIGhhbmRsZSk7CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9jaGVja190b3BvX2RlbGV0ZV9ldmVudHMgLSBzYW5pdHkgY2hlY2sgb24gdG9wbyBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IHRoZSBldmVudCBkYXRhIHBheWxvYWQKKyAqCisgKiBUaGlzIHJvdXRpbmUgYWRkZWQgdG8gYmV0dGVyIGhhbmRsZSBjYWJsZSBicmVha2VyLgorICoKKyAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBkcml2ZXIgcmVjaWV2ZXMgbXVsdGlwbGUgZXhwYW5kZXIKKyAqIGFkZCBhbmQgZGVsZXRlIGV2ZW50cyBpbiBhIHNpbmdsZSBzaG90LiAgV2hlbiB0aGVyZSBpcyBhIGRlbGV0ZSBldmVudAorICogdGhlIHJvdXRpbmUgd2lsbCB2b2lkIGFueSBwZW5kaW5nIGFkZCBldmVudHMgd2FpdGluZyBpbiB0aGUgZXZlbnQgcXVldWUuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfY2hlY2tfdG9wb19kZWxldGVfZXZlbnRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCit7CisJc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50OworCU1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdCAqbG9jYWxfZXZlbnRfZGF0YTsKKwl1MTYgZXhwYW5kZXJfaGFuZGxlOworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZXhwYW5kZXJfaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RXhwYW5kZXJEZXZIYW5kbGUpOworCWlmIChleHBhbmRlcl9oYW5kbGUgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMpIHsKKwkJX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX2RpcmVjdGx5KGlvYywgZXZlbnRfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXZlbnRfZGF0YS0+RXhwU3RhdHVzID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfREVMQVlfTk9UX1JFU1BPTkRJTkcKKwkgfHwgZXZlbnRfZGF0YS0+RXhwU3RhdHVzID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9UX1JFU1BPTkRJTkcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCQlzYXNfZXhwYW5kZXIgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfaGFuZGxlKGlvYywKKwkJICAgIGV4cGFuZGVyX2hhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCQlfc2NzaWhfYmxvY2tfaW9fdG9fY2hpbGRyZW5fYXR0YWNoZWRfdG9fZXgoaW9jLCBzYXNfZXhwYW5kZXIpOworCX0gZWxzZSBpZiAoZXZlbnRfZGF0YS0+RXhwU3RhdHVzID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfUkVTUE9ORElORykKKwkJX3Njc2loX2Jsb2NrX2lvX3RvX2NoaWxkcmVuX2F0dGFjaGVkX2RpcmVjdGx5KGlvYywgZXZlbnRfZGF0YSk7CisKKwlpZiAoZXZlbnRfZGF0YS0+RXhwU3RhdHVzICE9IE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9UX1JFU1BPTkRJTkcpCisJCXJldHVybjsKKworCS8qIG1hcmsgaWdub3JlIGZsYWcgZm9yIHBlbmRpbmcgZXZlbnRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZndfZXZlbnQsICZpb2MtPmZ3X2V2ZW50X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGZ3X2V2ZW50LT5ldmVudCAhPSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVCB8fAorCQkgICAgZndfZXZlbnQtPmlnbm9yZSkKKwkJCWNvbnRpbnVlOworCQlsb2NhbF9ldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisJCWlmIChsb2NhbF9ldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0KKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfQURERUQgfHwKKwkJICAgIGxvY2FsX2V2ZW50X2RhdGEtPkV4cFN0YXR1cyA9PQorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19SRVNQT05ESU5HKSB7CisJCQlpZiAobGUxNl90b19jcHUobG9jYWxfZXZlbnRfZGF0YS0+RXhwYW5kZXJEZXZIYW5kbGUpID09CisJCQkgICAgZXhwYW5kZXJfaGFuZGxlKSB7CisJCQkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkJCSAgICAic2V0dGluZyBpZ25vcmluZyBmbGFnXG4iLCBpb2MtPm5hbWUpKTsKKwkJCQlmd19ldmVudC0+aWdub3JlID0gMTsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfcXVldWVfcmVzY2FuIC0gcXVldWUgYSB0b3BvbG9neSByZXNjYW4gZnJvbSB1c2VyIGNvbnRleHQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3F1ZXVlX3Jlc2NhbihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50OworCisJaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUpCisJCXJldHVybjsKKwlmd19ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmd19ldmVudF93b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFmd19ldmVudCkKKwkJcmV0dXJuOworCWZ3X2V2ZW50LT5ldmVudCA9IE1QVDJTQVNfUkVTQ0FOX0FGVEVSX0hPU1RfUkVTRVQ7CisJZndfZXZlbnQtPmlvYyA9IGlvYzsKKwlfc2NzaWhfZndfZXZlbnRfYWRkKGlvYywgZndfZXZlbnQpOworfQorCisvKioKKyAqIF9zY3NpaF9mbHVzaF9ydW5uaW5nX2NtZHMgLSBjb21wbGV0aW5nIG91dHN0YW5kaW5nIGNvbW1hbmRzLgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogVGhlIGZsdXNoaW5nIG91dCBvZiBhbGwgcGVuZGluZyBzY21kIGNvbW1hbmRzIGZvbGxvd2luZyBob3N0IHJlc2V0LAorICogd2hlcmUgYWxsIElPIGlzIGRyb3BwZWQgdG8gdGhlIGZsb29yLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwl1MTYgc21pZDsKKwl1MTYgY291bnQgPSAwOworCisJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnJlcXVlc3RfZGVwdGg7IHNtaWQrKykgeworCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKGlvYywgc21pZCk7CisJCWlmICghc2NtZCkKKwkJCWNvbnRpbnVlOworCQljb3VudCsrOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCXNjc2lfZG1hX3VubWFwKHNjbWQpOworCQlzY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CisJCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKKwl9CisJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImNvbXBsZXRpbmcgJWQgY21kc1xuIiwKKwkgICAgaW9jLT5uYW1lLCBjb3VudCkpOworfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGNhbGxiYWNrIGhhbmRsZXIgKGZvciBzY3NpaCkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJlc2V0X3BoYXNlOiBwaGFzZQorICoKKyAqIFRoZSBoYW5kbGVyIGZvciBkb2luZyBhbnkgcmVxdWlyZWQgY2xlYW51cCBvciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBUaGUgcmVzZXQgcGhhc2UgY2FuIGJlIE1QVDJfSU9DX1BSRV9SRVNFVCwgTVBUMl9JT0NfQUZURVJfUkVTRVQsCisgKiBNUFQyX0lPQ19ET05FX1JFU0VUCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKK3sKKwlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CisJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19QUkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJX3Njc2loX2Z3X2V2ZW50X29mZihpb2MpOworCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX0FGVEVSX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfQUZURVJfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CisJCQlpb2MtPnRtX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+dG1fY21kcy5zbWlkKTsKKwkJCWNvbXBsZXRlKCZpb2MtPnRtX2NtZHMuZG9uZSk7CisJCX0KKwkJX3Njc2loX2Z3X2V2ZW50X29uKGlvYyk7CisJCV9zY3NpaF9mbHVzaF9ydW5uaW5nX2NtZHMoaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyX0lPQ19ET05FX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlfc2NzaWhfcXVldWVfcmVzY2FuKGlvYyk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBzY3NpaF9xY21kIC0gbWFpbiBzY3NpIHJlcXVlc3QgZW50cnkgcG9pbnQKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEBkb25lOiBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIGludm9rZWQgb24gY29tcGxldGlvbgorICoKKyAqIFRoZSBjYWxsYmFjayBpbmRleCBpcyBzZXQgaW5zaWRlIGBpb2MtPnNjc2lfaW9fY2JfaWR4YC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gIElmIHRoZXJlJ3MgYSBmYWlsdXJlLCByZXR1cm4gZWl0aGVyOgorICogU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIGlmIHRoZSBkZXZpY2UgcXVldWUgaXMgZnVsbCwgb3IKKyAqIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kgaWYgdGhlIGVudGlyZSBob3N0IHF1ZXVlIGlzIGZ1bGwKKyAqLworc3RhdGljIGludAorc2NzaWhfcWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCXUzMiBtcGlfY29udHJvbDsKKwl1MTYgc21pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2NtZC0+c2NzaV9kb25lID0gZG9uZTsKKwlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSkgeworCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0OworCWlmICghc2FzX3RhcmdldF9wcml2X2RhdGEgfHwgc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9PQorCSAgICBNUFQyU0FTX0lOVkFMSURfREVWSUNFX0hBTkRMRSB8fCBzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCkgeworCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzZWUgaWYgd2UgYXJlIGJ1c3kgd2l0aCB0YXNrIG1hbmFnbWVudCBzdHVmZiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKHNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5IHx8CisJICAgIGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisKKwlpZiAoc2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQorCQltcGlfY29udHJvbCA9IE1QSTJfU0NTSUlPX0NPTlRST0xfUkVBRDsKKwllbHNlIGlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQltcGlfY29udHJvbCA9IE1QSTJfU0NTSUlPX0NPTlRST0xfV1JJVEU7CisJZWxzZQorCQltcGlfY29udHJvbCA9IE1QSTJfU0NTSUlPX0NPTlRST0xfTk9EQVRBVFJBTlNGRVI7CisKKwkvKiBzZXQgdGFncyAqLworCWlmICghKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfRkxBR1NfSU5JVCkpIHsKKwkJaWYgKHNjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgeworCQkJaWYgKHNjbWQtPmRldmljZS0+b3JkZXJlZF90YWdzKQorCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfT1JERVJFRFE7CisJCQllbHNlCisJCQkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9TSU1QTEVROworCQl9IGVsc2UKKy8qIE1QSSBSZXZpc2lvbiBJIChVTklUID0gMHhBKSAtIHJlbW92ZWQgTVBJMl9TQ1NJSU9fQ09OVFJPTF9VTlRBR0dFRCAqLworLyoJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1VOVEFHR0VEOworICovCisJCQltcGlfY29udHJvbCB8PSAoMHg1MDApOworCisJfSBlbHNlCisJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKworCWlmICgoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9UTFJfT04pKQorCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTjsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNDU0lJT1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUOworCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+ZmxhZ3MgJgorCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKQorCQltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSDsKKwllbHNlCisJCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUOworCW1waV9yZXF1ZXN0LT5EZXZIYW5kbGUgPQorCSAgICBjcHVfdG9fbGUxNihzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKKwltcGlfcmVxdWVzdC0+RGF0YUxlbmd0aCA9IGNwdV90b19sZTMyKHNjc2lfYnVmZmxlbihzY21kKSk7CisJbXBpX3JlcXVlc3QtPkNvbnRyb2wgPSBjcHVfdG9fbGUzMihtcGlfY29udHJvbCk7CisJbXBpX3JlcXVlc3QtPklvRmxhZ3MgPSBjcHVfdG9fbGUxNihzY21kLT5jbWRfbGVuKTsKKwltcGlfcmVxdWVzdC0+TXNnRmxhZ3MgPSBNUEkyX1NDU0lJT19NU0dGTEFHU19TWVNURU1fU0VOU0VfQUREUjsKKwltcGlfcmVxdWVzdC0+U2Vuc2VCdWZmZXJMZW5ndGggPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisJbXBpX3JlcXVlc3QtPlNlbnNlQnVmZmVyTG93QWRkcmVzcyA9CisJICAgICh1MzIpbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKGlvYywgc21pZCk7CisJbXBpX3JlcXVlc3QtPlNHTE9mZnNldDAgPSBvZmZzZXRvZihNcGkyU0NTSUlPUmVxdWVzdF90LCBTR0wpIC8gNDsKKwltcGlfcmVxdWVzdC0+U0dMRmxhZ3MgPSBjcHVfdG9fbGUxNihNUEkyX1NDU0lJT19TR0xGTEFHU19UWVBFX01QSSArCisJICAgIE1QSTJfU0NTSUlPX1NHTEZMQUdTX1NZU1RFTV9BRERSKTsKKworCWludF90b19zY3NpbHVuKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKikKKwkgICAgbXBpX3JlcXVlc3QtPkxVTik7CisJbWVtY3B5KG1waV9yZXF1ZXN0LT5DREIuQ0RCMzIsIHNjbWQtPmNtbmQsIHNjbWQtPmNtZF9sZW4pOworCisJaWYgKCFtcGlfcmVxdWVzdC0+RGF0YUxlbmd0aCkgeworCQltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LT5TR0wpOworCX0gZWxzZSB7CisJCWlmIChfc2NzaWhfYnVpbGRfc2NhdHRlcl9nYXRoZXIoaW9jLCBzY21kLCBzbWlkKSkgeworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlfc2NzaWhfc2NzaV9sb29rdXBfc2V0KGlvYywgc21pZCwgc2NtZCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLCAwLAorCSAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKKwlyZXR1cm4gMDsKKworIG91dDoKKwlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKK30KKworLyoqCisgKiBfc2NzaWhfbm9ybWFsaXplX3NlbnNlIC0gbm9ybWFsaXplIGRlc2NyaXB0b3IgYW5kIGZpeGVkIGZvcm1hdCBzZW5zZSBkYXRhCisgKiBAc2Vuc2VfYnVmZmVyOiBzZW5zZSBkYXRhIHJldHVybmVkIGJ5IHRhcmdldAorICogQGRhdGE6IG5vcm1hbGl6ZWQgc2tleS9hc2MvYXNjcQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX25vcm1hbGl6ZV9zZW5zZShjaGFyICpzZW5zZV9idWZmZXIsIHN0cnVjdCBzZW5zZV9pbmZvICpkYXRhKQoreworCWlmICgoc2Vuc2VfYnVmZmVyWzBdICYgMHg3RikgPj0gMHg3MikgeworCQkvKiBkZXNjcmlwdG9yIGZvcm1hdCAqLworCQlkYXRhLT5za2V5ID0gc2Vuc2VfYnVmZmVyWzFdICYgMHgwRjsKKwkJZGF0YS0+YXNjID0gc2Vuc2VfYnVmZmVyWzJdOworCQlkYXRhLT5hc2NxID0gc2Vuc2VfYnVmZmVyWzNdOworCX0gZWxzZSB7CisJCS8qIGZpeGVkIGZvcm1hdCAqLworCQlkYXRhLT5za2V5ID0gc2Vuc2VfYnVmZmVyWzJdICYgMHgwRjsKKwkJZGF0YS0+YXNjID0gc2Vuc2VfYnVmZmVyWzEyXTsKKwkJZGF0YS0+YXNjcSA9IHNlbnNlX2J1ZmZlclsxM107CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9zY3NpaF9zY3NpX2lvY19pbmZvIC0gdHJhbnNsYXRlZCBub24tc3VjY2VzZnVsbCBTQ1NJX0lPIHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKgorICogc2NzaV9zdGF0dXMgLSBTQ1NJIFN0YXR1cyBjb2RlIHJldHVybmVkIGZyb20gdGFyZ2V0IGRldmljZQorICogc2NzaV9zdGF0ZSAtIHN0YXRlIGluZm8gYXNzb2NpYXRlZCB3aXRoIFNDU0lfSU8gZGV0ZXJtaW5lZCBieSBpb2MKKyAqIGlvY19zdGF0dXMgLSBpb2Mgc3VwcGxpZWQgc3RhdHVzIGluZm8KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zY3NpX2lvY19pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKKyAgICBNcGkyU0NTSUlPUmVwbHlfdCAqbXBpX3JlcGx5LCB1MTYgc21pZCkKK3sKKwl1MzIgcmVzcG9uc2VfaW5mbzsKKwl1OCAqcmVzcG9uc2VfYnl0ZXM7CisJdTE2IGlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCXU4IHNjc2lfc3RhdGUgPSBtcGlfcmVwbHktPlNDU0lTdGF0ZTsKKwl1OCBzY3NpX3N0YXR1cyA9IG1waV9yZXBseS0+U0NTSVN0YXR1czsKKwljaGFyICpkZXNjX2lvY19zdGF0ZSA9IE5VTEw7CisJY2hhciAqZGVzY19zY3NpX3N0YXR1cyA9IE5VTEw7CisJY2hhciAqZGVzY19zY3NpX3N0YXRlID0gaW9jLT50bXBfc3RyaW5nOworCisJc3dpdGNoIChpb2Nfc3RhdHVzKSB7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzdWNjZXNzIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX0ZVTkNUSU9OOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJpbnZhbGlkIGZ1bmN0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1JFQ09WRVJFRF9FUlJPUjoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSByZWNvdmVyZWQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU5WQUxJRF9ERVZIQU5ETEU6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgaW52YWxpZCBkZXYgaGFuZGxlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RFVklDRV9OT1RfVEhFUkU6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgZGV2aWNlIG5vdCB0aGVyZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX09WRVJSVU46CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgZGF0YSBvdmVycnVuIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfVU5ERVJSVU46CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgZGF0YSB1bmRlcnJ1biI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT19EQVRBX0VSUk9SOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIGlvIGRhdGEgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUFJPVE9DT0xfRVJST1I6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgcHJvdG9jb2wgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19URVJNSU5BVEVEOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIHRhc2sgdGVybWluYXRlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9SRVNJRFVBTF9NSVNNQVRDSDoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSByZXNpZHVhbCBtaXNtYXRjaCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9UQVNLX01HTVRfRkFJTEVEOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIHRhc2sgbWdtdCBmYWlsZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU9DX1RFUk1JTkFURUQ6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgaW9jIHRlcm1pbmF0ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfRVhUX1RFUk1JTkFURUQ6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgZXh0IHRlcm1pbmF0ZWQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXNjX2lvY19zdGF0ZSA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzY3NpX3N0YXR1cykgeworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19HT09EOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImdvb2QiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImNoZWNrIGNvbmRpdGlvbiI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19DT05ESVRJT05fTUVUOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImNvbmRpdGlvbiBtZXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfQlVTWToKKwkJZGVzY19zY3NpX3N0YXR1cyA9ICJidXN5IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lfU1RBVFVTX0lOVEVSTUVESUFURToKKwkJZGVzY19zY3NpX3N0YXR1cyA9ICJpbnRlcm1lZGlhdGUiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFX0NPTkRNRVQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiaW50ZXJtZWRpYXRlIGNvbmRtZXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfUkVTRVJWQVRJT05fQ09ORkxJQ1Q6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAicmVzZXJ2YXRpb24gY29uZmxpY3QiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfQ09NTUFORF9URVJNSU5BVEVEOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImNvbW1hbmQgdGVybWluYXRlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19UQVNLX1NFVF9GVUxMOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gInRhc2sgc2V0IGZ1bGwiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfQUNBX0FDVElWRToKKwkJZGVzY19zY3NpX3N0YXR1cyA9ICJhY2EgYWN0aXZlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lfU1RBVFVTX1RBU0tfQUJPUlRFRDoKKwkJZGVzY19zY3NpX3N0YXR1cyA9ICJ0YXNrIGFib3J0ZWQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXNjX3Njc2lfc3RhdHVzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisKKwlkZXNjX3Njc2lfc3RhdGVbMF0gPSAnXDAnOworCWlmICghc2NzaV9zdGF0ZSkKKwkJZGVzY19zY3NpX3N0YXRlID0gIiAiOworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX1JFU1BPTlNFX0lORk9fVkFMSUQpCisJCXN0cmNhdChkZXNjX3Njc2lfc3RhdGUsICJyZXNwb25zZSBpbmZvICIpOworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX1RFUk1JTkFURUQpCisJCXN0cmNhdChkZXNjX3Njc2lfc3RhdGUsICJzdGF0ZSB0ZXJtaW5hdGVkICIpOworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX05PX1NDU0lfU1RBVFVTKQorCQlzdHJjYXQoZGVzY19zY3NpX3N0YXRlLCAibm8gc3RhdHVzICIpOworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9GQUlMRUQpCisJCXN0cmNhdChkZXNjX3Njc2lfc3RhdGUsICJhdXRvc2Vuc2UgZmFpbGVkICIpOworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkKKwkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgImF1dG9zZW5zZSB2YWxpZCAiKTsKKworCXNjc2lfcHJpbnRfY29tbWFuZChzY21kKTsKKwlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHRkZXYgaGFuZGxlKDB4JTA0eCksICIKKwkgICAgImlvY19zdGF0dXMoJXMpKDB4JTA0eCksIHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsCisJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKSwgZGVzY19pb2Nfc3RhdGUsCisJCWlvY19zdGF0dXMsIHNtaWQpOworCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdHJlcXVlc3RfbGVuKCVkKSwgdW5kZXJmbG93KCVkKSwgIgorCSAgICAicmVzaWQoJWQpXG4iLCBpb2MtPm5hbWUsIHNjc2lfYnVmZmxlbihzY21kKSwgc2NtZC0+dW5kZXJmbG93LAorCSAgICBzY3NpX2dldF9yZXNpZChzY21kKSk7CisJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIlx0dGFnKCVkKSwgdHJhbnNmZXJfY291bnQoJWQpLCAiCisJICAgICJzYy0+cmVzdWx0KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5UYXNrVGFnKSwKKwkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5UcmFuc2ZlckNvdW50KSwgc2NtZC0+cmVzdWx0KTsKKwlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHRzY3NpX3N0YXR1cyglcykoMHglMDJ4KSwgIgorCSAgICAic2NzaV9zdGF0ZSglcykoMHglMDJ4KVxuIiwgaW9jLT5uYW1lLCBkZXNjX3Njc2lfc3RhdHVzLAorCSAgICBzY3NpX3N0YXR1cywgZGVzY19zY3NpX3N0YXRlLCBzY3NpX3N0YXRlKTsKKworCWlmIChzY3NpX3N0YXRlICYgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkgeworCQlzdHJ1Y3Qgc2Vuc2VfaW5mbyBkYXRhOworCQlfc2NzaWhfbm9ybWFsaXplX3NlbnNlKHNjbWQtPnNlbnNlX2J1ZmZlciwgJmRhdGEpOworCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHRbc2Vuc2Vfa2V5LGFzYyxhc2NxXTogIgorCQkgICAgIlsweCUwMngsMHglMDJ4LDB4JTAyeF1cbiIsIGlvYy0+bmFtZSwgZGF0YS5za2V5LAorCQkgICAgZGF0YS5hc2MsIGRhdGEuYXNjcSk7CisJfQorCisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfUkVTUE9OU0VfSU5GT19WQUxJRCkgeworCQlyZXNwb25zZV9pbmZvID0gbGUzMl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZUluZm8pOworCQlyZXNwb25zZV9ieXRlcyA9ICh1OCAqKSZyZXNwb25zZV9pbmZvOworCQlfc2NzaWhfcmVzcG9uc2VfY29kZShpb2MsIHJlc3BvbnNlX2J5dGVzWzNdKTsKKwl9Cit9CisjZW5kaWYKKworLyoqCisgKiBfc2NzaWhfc21hcnRfcHJlZGljdGVkX2ZhdWx0IC0gaWxsdW1pbmF0ZSBGYXVsdCBMRUQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3NtYXJ0X3ByZWRpY3RlZF9mYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJTXBpMlNlcFJlcGx5X3QgbXBpX3JlcGx5OworCU1waTJTZXBSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqZXZlbnRfcmVwbHk7CisJTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzc2l6ZV90IHN6OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBvbmx5IGhhbmRsZSBub24tcmFpZCBkZXZpY2VzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlpZiAoIXNhc19kZXZpY2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzdGFyZ2V0ID0gc2FzX2RldmljZS0+c3RhcmdldDsKKwlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCisJaWYgKChzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKSB8fAorCSAgICgoc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WT0xVTUUpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXN0YXJnZXRfcHJpbnRrKEtFUk5fV0FSTklORywgc3RhcmdldCwgInByZWRpY3RlZCBmYXVsdFxuIik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChpb2MtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JQk0pIHsKKwkJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTZXBSZXF1ZXN0X3QpKTsKKwkJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NDU0lfRU5DTE9TVVJFX1BST0NFU1NPUjsKKwkJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9TRVBfUkVRX0FDVElPTl9XUklURV9TVEFUVVM7CisJCW1waV9yZXF1ZXN0LlNsb3RTdGF0dXMgPQorCQkgICAgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfUFJFRElDVEVEX0ZBVUxUOworCQltcGlfcmVxdWVzdC5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOworCQltcGlfcmVxdWVzdC5GbGFncyA9IE1QSTJfU0VQX1JFUV9GTEFHU19ERVZIQU5ETEVfQUREUkVTUzsKKwkJaWYgKChtcHQyc2FzX2Jhc2Vfc2NzaV9lbmNsb3N1cmVfcHJvY2Vzc29yKGlvYywgJm1waV9yZXBseSwKKwkJICAgICZtcGlfcmVxdWVzdCkpICE9IDApIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChtcGlfcmVwbHkuSU9DU3RhdHVzIHx8IG1waV9yZXBseS5JT0NMb2dJbmZvKSB7CisJCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkJCSAgICAiZW5jbG9zdXJlX3Byb2Nlc3NvcjogaW9jX3N0YXR1cyAoMHglMDR4KSwgIgorCQkJICAgICJsb2dpbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSwKKwkJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHkuSU9DTG9nSW5mbykpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGluc2VydCBpbnRvIGV2ZW50IGxvZyAqLworCXN6ID0gb2Zmc2V0b2YoTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCwgRXZlbnREYXRhKSArCisJICAgICBzaXplb2YoTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90KTsKKwlldmVudF9yZXBseSA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghZXZlbnRfcmVwbHkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlldmVudF9yZXBseS0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTjsKKwlldmVudF9yZXBseS0+RXZlbnQgPQorCSAgICBjcHVfdG9fbGUxNihNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRSk7CisJZXZlbnRfcmVwbHktPk1zZ0xlbmd0aCA9IHN6LzQ7CisJZXZlbnRfcmVwbHktPkV2ZW50RGF0YUxlbmd0aCA9CisJICAgIGNwdV90b19sZTE2KHNpemVvZihNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QpLzQpOworCWV2ZW50X2RhdGEgPSAoTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90ICopCisJICAgIGV2ZW50X3JlcGx5LT5FdmVudERhdGE7CisJZXZlbnRfZGF0YS0+UmVhc29uQ29kZSA9IE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEE7CisJZXZlbnRfZGF0YS0+QVNDID0gMHg1RDsKKwlldmVudF9kYXRhLT5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOworCWV2ZW50X2RhdGEtPlNBU0FkZHJlc3MgPSBjcHVfdG9fbGU2NChzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+c2FzX2FkZHJlc3MpOworCW1wdDJzYXNfY3RsX2FkZF90b19ldmVudF9sb2coaW9jLCBldmVudF9yZXBseSk7CisJa2ZyZWUoZXZlbnRfcmVwbHkpOworfQorCisvKioKKyAqIHNjc2loX2lvX2RvbmUgLSBzY3NpIHJlcXVlc3QgY2FsbGJhY2sKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKgorICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIHNjc2loX3FjbWQuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitzY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit7CisJTXBpMlNDU0lJT1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJTXBpMlNDU0lJT1JlcGx5X3QgKm1waV9yZXBseTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXUxNiBpb2Nfc3RhdHVzOworCXUzMiB4ZmVyX2NudDsKKwl1OCBzY3NpX3N0YXRlOworCXU4IHNjc2lfc3RhdHVzOworCXUzMiBsb2dfaW5mbzsKKwlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOworCXUzMiByZXNwb25zZV9jb2RlOworCisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihpb2MsIHNtaWQpOworCWlmIChzY21kID09IE5VTEwpCisJCXJldHVybjsKKworCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKKworCWlmIChtcGlfcmVwbHkgPT0gTlVMTCkgeworCQlzY21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CisJCWdvdG8gb3V0OworCX0KKworCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhIHx8ICFzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldCB8fAorCSAgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmRlbGV0ZWQpIHsKKwkJc2NtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHR1cm5pbmcgb2ZmIFRMUiAqLworCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEtPnRscl9zbm9vcF9jaGVjaykgeworCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKys7CisJCWlmIChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX1RMUl9PTikgeworCQkJcmVzcG9uc2VfY29kZSA9IChsZTMyX3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlSW5mbykKKwkJCSAgICA+PiAyNCk7CisJCQlpZiAocmVzcG9uc2VfY29kZSA9PQorCQkJICAgIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FKQorCQkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmPQorCQkJCSAgICB+TVBUX0RFVklDRV9UTFJfT047CisJCX0KKwl9CisKKwl4ZmVyX2NudCA9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VHJhbnNmZXJDb3VudCk7CisJc2NzaV9zZXRfcmVzaWQoc2NtZCwgc2NzaV9idWZmbGVuKHNjbWQpIC0geGZlcl9jbnQpOworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyk7CisJaWYgKGlvY19zdGF0dXMgJiBNUEkyX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSkKKwkJbG9nX2luZm8gPSAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKTsKKwllbHNlCisJCWxvZ19pbmZvID0gMDsKKwlpb2Nfc3RhdHVzICY9IE1QSTJfSU9DU1RBVFVTX01BU0s7CisJc2NzaV9zdGF0ZSA9IG1waV9yZXBseS0+U0NTSVN0YXRlOworCXNjc2lfc3RhdHVzID0gbXBpX3JlcGx5LT5TQ1NJU3RhdHVzOworCisJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX1VOREVSUlVOICYmIHhmZXJfY250ID09IDAgJiYKKwkgICAgKHNjc2lfc3RhdHVzID09IE1QSTJfU0NTSV9TVEFUVVNfQlVTWSB8fAorCSAgICAgc2NzaV9zdGF0dXMgPT0gTVBJMl9TQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVCB8fAorCSAgICAgc2NzaV9zdGF0dXMgPT0gTVBJMl9TQ1NJX1NUQVRVU19UQVNLX1NFVF9GVUxMKSkgeworCQlpb2Nfc3RhdHVzID0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUzsKKwl9CisKKwlpZiAoc2NzaV9zdGF0ZSAmIE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQpIHsKKwkJc3RydWN0IHNlbnNlX2luZm8gZGF0YTsKKwkJY29uc3Qgdm9pZCAqc2Vuc2VfZGF0YSA9IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyKGlvYywKKwkJICAgIHNtaWQpOworCQltZW1jcHkoc2NtZC0+c2Vuc2VfYnVmZmVyLCBzZW5zZV9kYXRhLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5TZW5zZUNvdW50KSk7CisJCV9zY3NpaF9ub3JtYWxpemVfc2Vuc2Uoc2NtZC0+c2Vuc2VfYnVmZmVyLCAmZGF0YSk7CisJCS8qIGZhaWx1cmUgcHJlZGljdGlvbiB0aHJlc2hvbGQgZXhjZWVkZWQgKi8KKwkJaWYgKGRhdGEuYXNjID09IDB4NUQpCisJCQlfc2NzaWhfc21hcnRfcHJlZGljdGVkX2ZhdWx0KGlvYywKKwkJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkRldkhhbmRsZSkpOworCX0KKworCXN3aXRjaCAoaW9jX3N0YXR1cykgeworCWNhc2UgTVBJMl9JT0NTVEFUVVNfQlVTWToKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CisJCXNjbWQtPnJlc3VsdCA9IFNBTV9TVEFUX0JVU1k7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RFVklDRV9OT1RfVEhFUkU6CisJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlicmVhazsKKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT0NfVEVSTUlOQVRFRDoKKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5ibG9jaykgeworCQkJc2NtZC0+cmVzdWx0ID0gKERJRF9CVVNfQlVTWSA8PCAxNik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1RBU0tfVEVSTUlOQVRFRDoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfRVhUX1RFUk1JTkFURUQ6CisJCXNjbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUkVTSURVQUxfTUlTTUFUQ0g6CisJCWlmICgoeGZlcl9jbnQgPT0gMCkgfHwgKHNjbWQtPnVuZGVyZmxvdyA+IHhmZXJfY250KSkKKwkJCXNjbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQllbHNlCisJCQlzY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHNjc2lfc3RhdHVzOworCQlicmVhazsKKworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX1VOREVSUlVOOgorCQlzY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHNjc2lfc3RhdHVzOworCisJCWlmICgoc2NzaV9zdGF0ZSAmIE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQpKQorCQkJYnJlYWs7CisKKwkJaWYgKHhmZXJfY250IDwgc2NtZC0+dW5kZXJmbG93KSB7CisJCQlpZiAoc2NzaV9zdGF0dXMgPT0gU0FNX1NUQVRfQlVTWSkKKwkJCQlzY21kLT5yZXN1bHQgPSBTQU1fU1RBVF9CVVNZOworCQkJZWxzZQorCQkJCXNjbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQl9IGVsc2UgaWYgKHNjc2lfc3RhdGUgJiAoTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9GQUlMRUQgfAorCQkgICAgIE1QSTJfU0NTSV9TVEFURV9OT19TQ1NJX1NUQVRVUykpCisJCQlzY21kLT5yZXN1bHQgPSBESURfU09GVF9FUlJPUiA8PCAxNjsKKwkJZWxzZSBpZiAoc2NzaV9zdGF0ZSAmIE1QSTJfU0NTSV9TVEFURV9URVJNSU5BVEVEKQorCQkJc2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQllbHNlIGlmICgheGZlcl9jbnQgJiYgc2NtZC0+Y21uZFswXSA9PSBSRVBPUlRfTFVOUykgeworCQkJbXBpX3JlcGx5LT5TQ1NJU3RhdGUgPSBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEOworCQkJbXBpX3JlcGx5LT5TQ1NJU3RhdHVzID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOworCQkJc2NtZC0+cmVzdWx0ID0gKERSSVZFUl9TRU5TRSA8PCAyNCkgfAorCQkJICAgIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJCXNjbWQtPnNlbnNlX2J1ZmZlclswXSA9IDB4NzA7CisJCQlzY21kLT5zZW5zZV9idWZmZXJbMl0gPSBJTExFR0FMX1JFUVVFU1Q7CisJCQlzY21kLT5zZW5zZV9idWZmZXJbMTJdID0gMHgyMDsKKwkJCXNjbWQtPnNlbnNlX2J1ZmZlclsxM10gPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfT1ZFUlJVTjoKKwkJc2NzaV9zZXRfcmVzaWQoc2NtZCwgMCk7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1JFQ09WRVJFRF9FUlJPUjoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1M6CisJCXNjbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgc2NzaV9zdGF0dXM7CisJCWlmIChzY3NpX3N0YXRlICYgKE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfRkFJTEVEIHwKKwkJICAgICBNUEkyX1NDU0lfU1RBVEVfTk9fU0NTSV9TVEFUVVMpKQorCQkJc2NtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCWVsc2UgaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfVEVSTUlOQVRFRCkKKwkJCXNjbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKKwkJYnJlYWs7CisKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUFJPVE9DT0xfRVJST1I6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX0ZVTkNUSU9OOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfSU5WQUxJRF9TR0w6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlRFUk5BTF9FUlJPUjoKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0lOVkFMSURfRklFTEQ6CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZBTElEX1NUQVRFOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9JT19EQVRBX0VSUk9SOgorCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9UQVNLX01HTVRfRkFJTEVEOgorCWRlZmF1bHQ6CisJCXNjbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQlicmVhazsKKworCX0KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCWlmIChzY21kLT5yZXN1bHQgJiYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19SRVBMWSkpCisJCV9zY3NpaF9zY3NpX2lvY19pbmZvKGlvYyAsIHNjbWQsIG1waV9yZXBseSwgc21pZCk7CisjZW5kaWYKKworIG91dDoKKwlzY3NpX2RtYV91bm1hcChzY21kKTsKKwlzY21kLT5zY3NpX2RvbmUoc2NtZCk7Cit9CisKKy8qKgorICogX3Njc2loX2xpbmtfY2hhbmdlIC0gcHJvY2VzcyBwaHkgbGluayBjaGFuZ2VzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IHBoeSBoYW5kbGUKKyAqIEBhdHRhY2hlZF9oYW5kbGU6IHZhbGlkIGZvciBkZXZpY2VzIGF0dGFjaGVkIHRvIGxpbmsKKyAqIEBwaHlfbnVtYmVyOiBwaHkgbnVtYmVyCisgKiBAbGlua19yYXRlOiBuZXcgbGluayByYXRlCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2xpbmtfY2hhbmdlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdTE2IGF0dGFjaGVkX2hhbmRsZSwKKyAgIHU4IHBoeV9udW1iZXIsIHU4IGxpbmtfcmF0ZSkKK3sKKwltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlKGlvYywgaGFuZGxlLCBhdHRhY2hlZF9oYW5kbGUsCisJICAgIHBoeV9udW1iZXIsIGxpbmtfcmF0ZSk7Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19ob3N0X3JlZnJlc2ggLSByZWZyZXNoaW5nIHNhcyBob3N0IG9iamVjdCBjb250ZW50cworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAdXBkYXRlOiB1cGRhdGUgbGluayBpbmZvcm1hdGlvbgorICogQ29udGV4dDogdXNlcgorICoKKyAqIER1cmluZyBwb3J0IGVuYWJsZSwgZncgd2lsbCBzZW5kIHRvcG9sb2d5IGV2ZW50cyBmb3IgZXZlcnkgZGV2aWNlLiBJdHMKKyAqIHBvc3NpYmxlIHRoYXQgdGhlIGhhbmRsZXMgbWF5IGNoYW5nZSBmcm9tIHRoZSBwcmV2aW91cyBzZXR0aW5nLCBzbyB0aGlzCisgKiBjb2RlIGtlZXBpbmcgaGFuZGxlcyB1cGRhdGluZyBpZiBjaGFuZ2VkLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19ob3N0X3JlZnJlc2goc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCB1cGRhdGUpCit7CisJdTE2IHN6OworCXUxNiBpb2Nfc3RhdHVzOworCWludCBpOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlNcGkyU2FzSU9Vbml0UGFnZTBfdCAqc2FzX2lvdW5pdF9wZzAgPSBOVUxMOworCisJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKKwkgICAgInVwZGF0aW5nIGhhbmRsZXMgZm9yIHNhc19ob3N0KDB4JTAxNmxseClcbiIsCisJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MpKTsKKworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UwX3QsIFBoeURhdGEpICsgKGlvYy0+c2FzX2hiYS5udW1fcGh5cworCSAgICAqIHNpemVvZihNcGkyU2FzSU9Vbml0MFBoeURhdGFfdCkpOworCXNhc19pb3VuaXRfcGcwID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfaW91bml0X3BnMCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIShtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzAoaW9jLCAmbXBpX3JlcGx5LAorCSAgICBzYXNfaW91bml0X3BnMCwgc3opKSkgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykKKwkJCWdvdG8gb3V0OworCQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzIDsgaSsrKSB7CisJCQlpb2MtPnNhc19oYmEucGh5W2ldLmhhbmRsZSA9CisJCQkgICAgbGUxNl90b19jcHUoc2FzX2lvdW5pdF9wZzAtPlBoeURhdGFbaV0uCisJCQkJQ29udHJvbGxlckRldkhhbmRsZSk7CisJCQlpZiAodXBkYXRlKQorCQkJCV9zY3NpaF9saW5rX2NoYW5nZShpb2MsCisJCQkJICAgIGlvYy0+c2FzX2hiYS5waHlbaV0uaGFuZGxlLAorCQkJCSAgICBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS4KKwkJCQkgICAgQXR0YWNoZWREZXZIYW5kbGUpLCBpLAorCQkJCSAgICBzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS4KKwkJCQkgICAgTmVnb3RpYXRlZExpbmtSYXRlID4+IDQpOworCQl9CisJfQorCisgb3V0OgorCWtmcmVlKHNhc19pb3VuaXRfcGcwKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX2hvc3RfYWRkIC0gY3JlYXRlIHNhcyBob3N0IG9iamVjdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogQ3JlYXRpbmcgaG9zdCBzaWRlIGRhdGEgb2JqZWN0LCBzdG9yZWQgaW4gaW9jLT5zYXNfaGJhCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2hvc3RfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlpbnQgaTsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc0lPVW5pdFBhZ2UwX3QgKnNhc19pb3VuaXRfcGcwID0gTlVMTDsKKwlNcGkyU2FzSU9Vbml0UGFnZTFfdCAqc2FzX2lvdW5pdF9wZzEgPSBOVUxMOworCU1waTJTYXNQaHlQYWdlMF90IHBoeV9wZzA7CisJTXBpMlNhc0RldmljZVBhZ2UwX3Qgc2FzX2RldmljZV9wZzA7CisJTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QgZW5jbG9zdXJlX3BnMDsKKwl1MTYgaW9jX3N0YXR1czsKKwl1MTYgc3o7CisJdTE2IGRldmljZV9taXNzaW5nX2RlbGF5OworCisJbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyhpb2MsICZpb2MtPnNhc19oYmEubnVtX3BoeXMpOworCWlmICghaW9jLT5zYXNfaGJhLm51bV9waHlzKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyogc2FzX2lvdW5pdCBwYWdlIDAgKi8KKwlzeiA9IG9mZnNldG9mKE1waTJTYXNJT1VuaXRQYWdlMF90LCBQaHlEYXRhKSArIChpb2MtPnNhc19oYmEubnVtX3BoeXMgKgorCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdDBQaHlEYXRhX3QpKTsKKwlzYXNfaW91bml0X3BnMCA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghc2FzX2lvdW5pdF9wZzApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzAoaW9jLCAmbXBpX3JlcGx5LAorCSAgICBzYXNfaW91bml0X3BnMCwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogc2FzX2lvdW5pdCBwYWdlIDEgKi8KKwlzeiA9IG9mZnNldG9mKE1waTJTYXNJT1VuaXRQYWdlMV90LCBQaHlEYXRhKSArIChpb2MtPnNhc19oYmEubnVtX3BoeXMgKgorCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3QpKTsKKwlzYXNfaW91bml0X3BnMSA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghc2FzX2lvdW5pdF9wZzEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcxLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisKKwlpb2MtPmlvX21pc3NpbmdfZGVsYXkgPQorCSAgICBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMS0+SU9EZXZpY2VNaXNzaW5nRGVsYXkpOworCWRldmljZV9taXNzaW5nX2RlbGF5ID0KKwkgICAgbGUxNl90b19jcHUoc2FzX2lvdW5pdF9wZzEtPlJlcG9ydERldmljZU1pc3NpbmdEZWxheSk7CisJaWYgKGRldmljZV9taXNzaW5nX2RlbGF5ICYgTVBJMl9TQVNJT1VOSVQxX1JFUE9SVF9NSVNTSU5HX1VOSVRfMTYpCisJCWlvYy0+ZGV2aWNlX21pc3NpbmdfZGVsYXkgPSAoZGV2aWNlX21pc3NpbmdfZGVsYXkgJgorCQkgICAgTVBJMl9TQVNJT1VOSVQxX1JFUE9SVF9NSVNTSU5HX1RJTUVPVVRfTUFTSykgKiAxNjsKKwllbHNlCisJCWlvYy0+ZGV2aWNlX21pc3NpbmdfZGVsYXkgPSBkZXZpY2VfbWlzc2luZ19kZWxheSAmCisJCSAgICBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVElNRU9VVF9NQVNLOworCisJaW9jLT5zYXNfaGJhLnBhcmVudF9kZXYgPSAmaW9jLT5zaG9zdC0+c2hvc3RfZ2VuZGV2OworCWlvYy0+c2FzX2hiYS5waHkgPSBrY2FsbG9jKGlvYy0+c2FzX2hiYS5udW1fcGh5cywKKwkgICAgc2l6ZW9mKHN0cnVjdCBfc2FzX3BoeSksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5zYXNfaGJhLnBoeSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgOyBpKyspIHsKKwkJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMChpb2MsICZtcGlfcmVwbHksICZwaHlfcGcwLAorCQkgICAgaSkpKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJZ290byBvdXQ7CisJCX0KKwkJaW9jLT5zYXNfaGJhLnBoeVtpXS5oYW5kbGUgPQorCQkgICAgbGUxNl90b19jcHUoc2FzX2lvdW5pdF9wZzAtPlBoeURhdGFbaV0uQ29udHJvbGxlckRldkhhbmRsZSk7CisJCWlvYy0+c2FzX2hiYS5waHlbaV0ucGh5X2lkID0gaTsKKwkJbXB0MnNhc190cmFuc3BvcnRfYWRkX2hvc3RfcGh5KGlvYywgJmlvYy0+c2FzX2hiYS5waHlbaV0sCisJCSAgICBwaHlfcGcwLCBpb2MtPnNhc19oYmEucGFyZW50X2Rldik7CisJfQorCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwKGlvYywgJm1waV9yZXBseSwgJnNhc19kZXZpY2VfcGcwLAorCSAgICBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSwgaW9jLT5zYXNfaGJhLnBoeVswXS5oYW5kbGUpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+c2FzX2hiYS5oYW5kbGUgPSBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5EZXZIYW5kbGUpOworCWlvYy0+c2FzX2hiYS5lbmNsb3N1cmVfaGFuZGxlID0KKwkgICAgbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuRW5jbG9zdXJlSGFuZGxlKTsKKwlpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5TQVNBZGRyZXNzKTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaG9zdF9hZGQ6IGhhbmRsZSgweCUwNHgpLCAiCisJICAgICJzYXNfYWRkcigweCUwMTZsbHgpLCBwaHlzKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNhc19oYmEuaGFuZGxlLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MsCisJICAgIGlvYy0+c2FzX2hiYS5udW1fcGh5cykgOworCisJaWYgKGlvYy0+c2FzX2hiYS5lbmNsb3N1cmVfaGFuZGxlKSB7CisJCWlmICghKG1wdDJzYXNfY29uZmlnX2dldF9lbmNsb3N1cmVfcGcwKGlvYywgJm1waV9yZXBseSwKKwkJICAgICZlbmNsb3N1cmVfcGcwLAorCQkgICBNUEkyX1NBU19FTkNMT1NfUEdBRF9GT1JNX0hBTkRMRSwKKwkJICAgaW9jLT5zYXNfaGJhLmVuY2xvc3VyZV9oYW5kbGUpKSkgeworCQkJaW9jLT5zYXNfaGJhLmVuY2xvc3VyZV9sb2dpY2FsX2lkID0KKwkJCSAgICBsZTY0X3RvX2NwdShlbmNsb3N1cmVfcGcwLkVuY2xvc3VyZUxvZ2ljYWxJRCk7CisJCX0KKwl9CisKKyBvdXQ6CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzEpOworCWtmcmVlKHNhc19pb3VuaXRfcGcwKTsKK30KKworLyoqCisgKiBfc2NzaWhfZXhwYW5kZXJfYWRkIC0gIGNyZWF0aW5nIGV4cGFuZGVyIG9iamVjdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBleHBhbmRlciBoYW5kbGUKKyAqCisgKiBDcmVhdGluZyBleHBhbmRlciBvYmplY3QsIHN0b3JlZCBpbiBpb2MtPnNhc19leHBhbmRlcl9saXN0LgorICoKKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBlbHNlIGVycm9yLgorICovCitzdGF0aWMgaW50Citfc2NzaWhfZXhwYW5kZXJfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCU1waTJFeHBhbmRlclBhZ2UwX3QgZXhwYW5kZXJfcGcwOworCU1waTJFeHBhbmRlclBhZ2UxX3QgZXhwYW5kZXJfcGcxOworCU1waTJTYXNFbmNsb3N1cmVQYWdlMF90IGVuY2xvc3VyZV9wZzA7CisJdTMyIGlvY19zdGF0dXM7CisJdTE2IHBhcmVudF9oYW5kbGU7CisJX19sZTY0IHNhc19hZGRyZXNzOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OworCWludCByYyA9IDA7CisKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC0xOworCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwKGlvYywgJm1waV9yZXBseSwgJmV4cGFuZGVyX3BnMCwKKwkgICAgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9ITkRMLCBoYW5kbGUpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGhhbmRsZSBvdXQgb2Ygb3JkZXIgdG9wb2xvZ3kgZXZlbnRzICovCisJcGFyZW50X2hhbmRsZSA9IGxlMTZfdG9fY3B1KGV4cGFuZGVyX3BnMC5QYXJlbnREZXZIYW5kbGUpOworCWlmIChwYXJlbnRfaGFuZGxlID49IGlvYy0+c2FzX2hiYS5udW1fcGh5cykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCXNhc19leHBhbmRlciA9IG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoaW9jLAorCQkgICAgcGFyZW50X2hhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCQlpZiAoIXNhc19leHBhbmRlcikgeworCQkJcmMgPSBfc2NzaWhfZXhwYW5kZXJfYWRkKGlvYywgcGFyZW50X2hhbmRsZSk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlzYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KGV4cGFuZGVyX3BnMC5TQVNBZGRyZXNzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZXhwYW5kZXIgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCSAgICBzYXNfYWRkcmVzcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2FzX2V4cGFuZGVyKQorCQlyZXR1cm4gMDsKKworCXNhc19leHBhbmRlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfc2FzX25vZGUpLAorCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19leHBhbmRlcikgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNhc19leHBhbmRlci0+aGFuZGxlID0gaGFuZGxlOworCXNhc19leHBhbmRlci0+bnVtX3BoeXMgPSBleHBhbmRlcl9wZzAuTnVtUGh5czsKKwlzYXNfZXhwYW5kZXItPnBhcmVudF9oYW5kbGUgPSBwYXJlbnRfaGFuZGxlOworCXNhc19leHBhbmRlci0+ZW5jbG9zdXJlX2hhbmRsZSA9CisJICAgIGxlMTZfdG9fY3B1KGV4cGFuZGVyX3BnMC5FbmNsb3N1cmVIYW5kbGUpOworCXNhc19leHBhbmRlci0+c2FzX2FkZHJlc3MgPSBzYXNfYWRkcmVzczsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJleHBhbmRlcl9hZGQ6IGhhbmRsZSgweCUwNHgpLCIKKwkgICAgIiBwYXJlbnQoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgcGh5cyglZClcbiIsIGlvYy0+bmFtZSwKKwkgICAgaGFuZGxlLCBzYXNfZXhwYW5kZXItPnBhcmVudF9oYW5kbGUsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJICAgIHNhc19leHBhbmRlci0+c2FzX2FkZHJlc3MsIHNhc19leHBhbmRlci0+bnVtX3BoeXMpOworCisJaWYgKCFzYXNfZXhwYW5kZXItPm51bV9waHlzKQorCQlnb3RvIG91dF9mYWlsOworCXNhc19leHBhbmRlci0+cGh5ID0ga2NhbGxvYyhzYXNfZXhwYW5kZXItPm51bV9waHlzLAorCSAgICBzaXplb2Yoc3RydWN0IF9zYXNfcGh5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfZXhwYW5kZXItPnBoeSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtMTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmc2FzX2V4cGFuZGVyLT5zYXNfcG9ydF9saXN0KTsKKwltcHQyc2FzX3BvcnQgPSBtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChpb2MsIGhhbmRsZSwKKwkgICAgc2FzX2V4cGFuZGVyLT5wYXJlbnRfaGFuZGxlKTsKKwlpZiAoIW1wdDJzYXNfcG9ydCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtMTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisJc2FzX2V4cGFuZGVyLT5wYXJlbnRfZGV2ID0gJm1wdDJzYXNfcG9ydC0+cnBoeS0+ZGV2OworCisJZm9yIChpID0gMCA7IGkgPCBzYXNfZXhwYW5kZXItPm51bV9waHlzIDsgaSsrKSB7CisJCWlmICgobXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMShpb2MsICZtcGlfcmVwbHksCisJCSAgICAmZXhwYW5kZXJfcGcxLCBpLCBoYW5kbGUpKSkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwkJc2FzX2V4cGFuZGVyLT5waHlbaV0uaGFuZGxlID0gaGFuZGxlOworCQlzYXNfZXhwYW5kZXItPnBoeVtpXS5waHlfaWQgPSBpOworCQltcHQyc2FzX3RyYW5zcG9ydF9hZGRfZXhwYW5kZXJfcGh5KGlvYywgJnNhc19leHBhbmRlci0+cGh5W2ldLAorCQkgICAgZXhwYW5kZXJfcGcxLCBzYXNfZXhwYW5kZXItPnBhcmVudF9kZXYpOworCX0KKworCWlmIChzYXNfZXhwYW5kZXItPmVuY2xvc3VyZV9oYW5kbGUpIHsKKwkJaWYgKCEobXB0MnNhc19jb25maWdfZ2V0X2VuY2xvc3VyZV9wZzAoaW9jLCAmbXBpX3JlcGx5LAorCQkgICAgJmVuY2xvc3VyZV9wZzAsIE1QSTJfU0FTX0VOQ0xPU19QR0FEX0ZPUk1fSEFORExFLAorCQkgICBzYXNfZXhwYW5kZXItPmVuY2xvc3VyZV9oYW5kbGUpKSkgeworCQkJc2FzX2V4cGFuZGVyLT5lbmNsb3N1cmVfbG9naWNhbF9pZCA9CisJCQkgICAgbGU2NF90b19jcHUoZW5jbG9zdXJlX3BnMC5FbmNsb3N1cmVMb2dpY2FsSUQpOworCQl9CisJfQorCisJX3Njc2loX2V4cGFuZGVyX25vZGVfYWRkKGlvYywgc2FzX2V4cGFuZGVyKTsKKwkgcmV0dXJuIDA7CisKKyBvdXRfZmFpbDoKKworCWlmIChzYXNfZXhwYW5kZXIpCisJCWtmcmVlKHNhc19leHBhbmRlci0+cGh5KTsKKwlrZnJlZShzYXNfZXhwYW5kZXIpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlIC0gcmVtb3ZpbmcgZXhwYW5kZXIgb2JqZWN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGV4cGFuZGVyIGhhbmRsZQorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2V4cGFuZGVyX3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJX3Njc2loX2V4cGFuZGVyX25vZGVfcmVtb3ZlKGlvYywgc2FzX2V4cGFuZGVyKTsKK30KKworLyoqCisgKiBfc2NzaWhfYWRkX2RldmljZSAtICBjcmVhdGluZyBzYXMgZGV2aWNlIG9iamVjdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZQorICogQHBoeV9udW06IHBoeSBudW1iZXIgZW5kIGRldmljZSBhdHRhY2hlZCB0bworICogQGlzX3BkOiBpcyB0aGlzIGhpZGRlbiByYWlkIGNvbXBvbmVudAorICoKKyAqIENyZWF0aW5nIGVuZCBkZXZpY2Ugb2JqZWN0LCBzdG9yZWQgaW4gaW9jLT5zYXNfZGV2aWNlX2xpc3QuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX3Njc2loX2FkZF9kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLCB1OCBwaHlfbnVtLCB1OCBpc19wZCkKK3sKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJTXBpMlNhc0RldmljZVBhZ2UwX3Qgc2FzX2RldmljZV9wZzA7CisJTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QgZW5jbG9zdXJlX3BnMDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdTMyIGlvY19zdGF0dXM7CisJX19sZTY0IHNhc19hZGRyZXNzOworCXUzMiBkZXZpY2VfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmc2FzX2RldmljZV9wZzAsCisJICAgIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLCBoYW5kbGUpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGNoZWNrIGlmIGRldmljZSBpcyBwcmVzZW50ICovCisJaWYgKCEobGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuRmxhZ3MpICYKKwkgICAgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19ERVZJQ0VfUFJFU0VOVCkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIkZsYWdzID0gMHglMDR4XG4iLAorCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5GbGFncykpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogY2hlY2sgaWYgdGhlcmUgd2VyZSBhbnkgaXNzdXMgd2l0aCBkaXNjb3ZlcnkgKi8KKwlpZiAoc2FzX2RldmljZV9wZzAuQWNjZXNzU3RhdHVzID09CisJICAgIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19TQVRBX0lOSVRfRkFJTEVEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJBY2Nlc3NTdGF0dXMgPSAweCUwMnhcbiIsCisJCSAgICBpb2MtPm5hbWUsIHNhc19kZXZpY2VfcGcwLkFjY2Vzc1N0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGVuZCBkZXZpY2UgKi8KKwlkZXZpY2VfaW5mbyA9IGxlMzJfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldmljZUluZm8pOworCWlmICghKF9zY3NpaF9pc19lbmRfZGV2aWNlKGRldmljZV9pbmZvKSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlNBU0FkZHJlc3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICAgc2FzX2FkZHJlc3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2FzX2RldmljZSkgeworCQlfc2NzaWhfdWJsb2NrX2lvX2RldmljZShpb2MsIGhhbmRsZSk7CisJCXJldHVybiAwOworCX0KKworCXNhc19kZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgX3Nhc19kZXZpY2UpLAorCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19kZXZpY2UpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzYXNfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7CisJc2FzX2RldmljZS0+cGFyZW50X2hhbmRsZSA9CisJICAgIGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlBhcmVudERldkhhbmRsZSk7CisJc2FzX2RldmljZS0+ZW5jbG9zdXJlX2hhbmRsZSA9CisJICAgIGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkVuY2xvc3VyZUhhbmRsZSk7CisJc2FzX2RldmljZS0+c2xvdCA9CisJICAgIGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlNsb3QpOworCXNhc19kZXZpY2UtPmRldmljZV9pbmZvID0gZGV2aWNlX2luZm87CisJc2FzX2RldmljZS0+c2FzX2FkZHJlc3MgPSBzYXNfYWRkcmVzczsKKwlzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgPSBpc19wZDsKKworCS8qIGdldCBlbmNsb3N1cmVfbG9naWNhbF9pZCAqLworCWlmICghKG1wdDJzYXNfY29uZmlnX2dldF9lbmNsb3N1cmVfcGcwKGlvYywgJm1waV9yZXBseSwgJmVuY2xvc3VyZV9wZzAsCisJICAgTVBJMl9TQVNfRU5DTE9TX1BHQURfRk9STV9IQU5ETEUsCisJICAgc2FzX2RldmljZS0+ZW5jbG9zdXJlX2hhbmRsZSkpKSB7CisJCXNhc19kZXZpY2UtPmVuY2xvc3VyZV9sb2dpY2FsX2lkID0KKwkJICAgIGxlNjRfdG9fY3B1KGVuY2xvc3VyZV9wZzAuRW5jbG9zdXJlTG9naWNhbElEKTsKKwl9CisKKwkvKiBnZXQgZGV2aWNlIG5hbWUgKi8KKwlzYXNfZGV2aWNlLT5kZXZpY2VfbmFtZSA9IGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldmljZU5hbWUpOworCisJaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUpCisJCV9zY3NpaF9zYXNfZGV2aWNlX2luaXRfYWRkKGlvYywgc2FzX2RldmljZSk7CisJZWxzZQorCQlfc2NzaWhfc2FzX2RldmljZV9hZGQoaW9jLCBzYXNfZGV2aWNlKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9zY3NpaF9yZW1vdmVfZGV2aWNlIC0gIHJlbW92aW5nIHNhcyBkZXZpY2Ugb2JqZWN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcmVtb3ZlX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QgbXBpX3JlcGx5OworCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCXUxNiBkZXZpY2VfaGFuZGxlOworCisJLyogbG9va3VwIHNhc19kZXZpY2UgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXI6IGhhbmRsZSIKKwkgICAgIigweCUwNHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCBoYW5kbGUpKTsKKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhKSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChpb2MtPnJlbW92ZV9ob3N0KQorCQlnb3RvIG91dDsKKworCS8qIFRhcmdldCBSZXNldCB0byBmbHVzaCBvdXQgYWxsIHRoZSBvdXRzdGFuZGluZyBJTyAqLworCWRldmljZV9oYW5kbGUgPSAoc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50KSA/CisJICAgIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUgOiBoYW5kbGU7CisJaWYgKGRldmljZV9oYW5kbGUpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpc3N1ZSB0YXJnZXQgcmVzZXQ6ICIKKwkJICAgICJoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBkZXZpY2VfaGFuZGxlKSk7CisJCW11dGV4X2xvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CisJCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBkZXZpY2VfaGFuZGxlLCAwLAorCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VULCAwLCAxMCk7CisJCWlvYy0+dG1fY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwkJbXV0ZXhfdW5sb2NrKCZpb2MtPnRtX2NtZHMubXV0ZXgpOworCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlzc3VlIHRhcmdldCByZXNldCAiCisJCSAgICAiZG9uZTogaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgZGV2aWNlX2hhbmRsZSkpOworCX0KKworCS8qIFNBU19JT19VTklUX0NOVFIgLSBzZW5kIFJFTU9WRV9ERVZJQ0UgKi8KKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNhc19pb3VuaXQ6IGhhbmRsZSIKKwkgICAgIigweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOworCW1waV9yZXF1ZXN0Lk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CisJbXBpX3JlcXVlc3QuRGV2SGFuZGxlID0gaGFuZGxlOworCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsKKwlpZiAoKG1wdDJzYXNfYmFzZV9zYXNfaW91bml0X2NvbnRyb2woaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmbXBpX3JlcXVlc3QpKSAhPSAwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCX0KKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2FzX2lvdW5pdDogaW9jX3N0YXR1cyIKKwkgICAgIigweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsIGlvYy0+bmFtZSwKKwkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cyksCisJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS5JT0NMb2dJbmZvKSkpOworCisgb3V0OgorCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJICAgIHNhc19kZXZpY2UtPnBhcmVudF9oYW5kbGUpOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlbW92aW5nIGhhbmRsZSgweCUwNHgpLCBzYXNfYWRkciIKKwkgICAgIigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsIHNhc19kZXZpY2UtPmhhbmRsZSwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MpOworCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOworCisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZXhpdDogaGFuZGxlIgorCSAgICAiKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGhhbmRsZSkpOworfQorCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisvKioKKyAqIF9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50X2RlYnVnIC0gZGVidWcgZm9yIHRvcG9sb2d5IGV2ZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudF9kZWJ1ZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICpldmVudF9kYXRhKQoreworCWludCBpOworCXUxNiBoYW5kbGU7CisJdTE2IHJlYXNvbl9jb2RlOworCXU4IHBoeV9udW1iZXI7CisJY2hhciAqc3RhdHVzX3N0ciA9IE5VTEw7CisJY2hhciBsaW5rX3JhdGVbMjVdOworCisJc3dpdGNoIChldmVudF9kYXRhLT5FeHBTdGF0dXMpIHsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfQURERUQ6CisJCXN0YXR1c19zdHIgPSAiYWRkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PVF9SRVNQT05ESU5HOgorCQlzdGF0dXNfc3RyID0gInJlbW92ZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19SRVNQT05ESU5HOgorCQlzdGF0dXNfc3RyID0gICJyZXNwb25kaW5nIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX0RFTEFZX05PVF9SRVNQT05ESU5HOgorCQlzdGF0dXNfc3RyID0gInJlbW92ZSBkZWxheSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1c19zdHIgPSAidW5rbm93biBzdGF0dXMiOworCQlicmVhazsKKwl9CisJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJzYXMgdG9wb2xvZ3kgY2hhbmdlOiAoJXMpXG4iLAorCSAgICBpb2MtPm5hbWUsIHN0YXR1c19zdHIpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGhhbmRsZSgweCUwNHgpLCBlbmNsb3N1cmVfaGFuZGxlKDB4JTA0eCkgIgorCSAgICAic3RhcnRfcGh5KCUwMmQpLCBjb3VudCglZClcbiIsCisJICAgIGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkV4cGFuZGVyRGV2SGFuZGxlKSwKKwkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RW5jbG9zdXJlSGFuZGxlKSwKKwkgICAgZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0sIGV2ZW50X2RhdGEtPk51bUVudHJpZXMpOworCWZvciAoaSA9IDA7IGkgPCBldmVudF9kYXRhLT5OdW1FbnRyaWVzOyBpKyspIHsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKCFoYW5kbGUpCisJCQljb250aW51ZTsKKwkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJc3dpdGNoIChyZWFzb25fY29kZSkgeworCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19BRERFRDoKKwkJCXNucHJpbnRmKGxpbmtfcmF0ZSwgMjUsICI6IGFkZCwgbGluaygweCUwMngpIiwKKwkJCSAgICAoZXZlbnRfZGF0YS0+UEhZW2ldLkxpbmtSYXRlID4+IDQpKTsKKwkJCXN0YXR1c19zdHIgPSBsaW5rX3JhdGU7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfTk9UX1JFU1BPTkRJTkc6CisJCQlzdGF0dXNfc3RyID0gIjogcmVtb3ZlIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfREVMQVlfTk9UX1JFU1BPTkRJTkc6CisJCQlzdGF0dXNfc3RyID0gIjogcmVtb3ZlX2RlbGF5IjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfUEhZX0NIQU5HRUQ6CisJCQlzbnByaW50ZihsaW5rX3JhdGUsIDI1LCAiOiBsaW5rKDB4JTAyeCkiLAorCQkJICAgIChldmVudF9kYXRhLT5QSFlbaV0uTGlua1JhdGUgPj4gNCkpOworCQkJc3RhdHVzX3N0ciA9IGxpbmtfcmF0ZTsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTk9fQ0hBTkdFOgorCQkJc3RhdHVzX3N0ciA9ICI6IHJlc3BvbmRpbmciOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdGF0dXNfc3RyID0gIjogdW5rbm93biI7CisJCQlicmVhazsKKwkJfQorCQlwcmludGsoS0VSTl9ERUJVRyAiXHRwaHkoJTAyZCksIGF0dGFjaGVkX2hhbmRsZSgweCUwNHgpJXNcbiIsCisJCSAgICBwaHlfbnVtYmVyLCBoYW5kbGUsIHN0YXR1c19zdHIpOworCX0KK30KKyNlbmRpZgorCisvKioKKyAqIF9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIHRvcG9sb2d5IGNoYW5nZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQFZGX0lEOgorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogZndfZXZlbnQ6CisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICAgTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICpldmVudF9kYXRhLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKK3sKKwlpbnQgaTsKKwl1MTYgcGFyZW50X2hhbmRsZSwgaGFuZGxlOworCXUxNiByZWFzb25fY29kZTsKKwl1OCBwaHlfbnVtYmVyOworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGxpbmtfcmF0ZV87CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwkJX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLCBldmVudF9kYXRhKTsKKyNlbmRpZgorCisJaWYgKCFpb2MtPnNhc19oYmEubnVtX3BoeXMpCisJCV9zY3NpaF9zYXNfaG9zdF9hZGQoaW9jKTsKKwllbHNlCisJCV9zY3NpaF9zYXNfaG9zdF9yZWZyZXNoKGlvYywgMCk7CisKKwlpZiAoZndfZXZlbnQtPmlnbm9yZSkgeworCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJpZ25vcmluZyBleHBhbmRlciAiCisJCSAgICAiZXZlbnRcbiIsIGlvYy0+bmFtZSkpOworCQlyZXR1cm47CisJfQorCisJcGFyZW50X2hhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkV4cGFuZGVyRGV2SGFuZGxlKTsKKworCS8qIGhhbmRsZSBleHBhbmRlciBhZGQgKi8KKwlpZiAoZXZlbnRfZGF0YS0+RXhwU3RhdHVzID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfQURERUQpCisJCWlmIChfc2NzaWhfZXhwYW5kZXJfYWRkKGlvYywgcGFyZW50X2hhbmRsZSkgIT0gMCkKKwkJCXJldHVybjsKKworCS8qIGhhbmRsZSBzaWJsaW5ncyBldmVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7CisJCWlmIChmd19ldmVudC0+aWdub3JlKSB7CisJCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJpZ25vcmluZyAiCisJCQkgICAgImV4cGFuZGVyIGV2ZW50XG4iLCBpb2MtPm5hbWUpKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCisJCQljb250aW51ZTsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKCFoYW5kbGUpCisJCQljb250aW51ZTsKKwkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJbGlua19yYXRlXyA9IGV2ZW50X2RhdGEtPlBIWVtpXS5MaW5rUmF0ZSA+PiA0OworCQlzd2l0Y2ggKHJlYXNvbl9jb2RlKSB7CisJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19QSFlfQ0hBTkdFRDoKKwkJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfQURERUQ6CisJCQlpZiAoIXBhcmVudF9oYW5kbGUpIHsKKwkJCQlpZiAocGh5X251bWJlciA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cykKKwkJCQkJX3Njc2loX2xpbmtfY2hhbmdlKGlvYywKKwkJCQkJICAgaW9jLT5zYXNfaGJhLnBoeVtwaHlfbnVtYmVyXS5oYW5kbGUsCisJCQkJCSAgIGhhbmRsZSwgcGh5X251bWJlciwgbGlua19yYXRlXyk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwkJCQlzYXNfZXhwYW5kZXIgPQorCQkJCSAgICBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfaGFuZGxlKGlvYywKKwkJCQkJcGFyZW50X2hhbmRsZSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLAorCQkJCSAgICBmbGFncyk7CisJCQkJaWYgKHNhc19leHBhbmRlcikgeworCQkJCQlpZiAocGh5X251bWJlciA8IHNhc19leHBhbmRlci0+bnVtX3BoeXMpCisJCQkJCQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAorCQkJCQkJICAgc2FzX2V4cGFuZGVyLT4KKwkJCQkJCSAgIHBoeVtwaHlfbnVtYmVyXS5oYW5kbGUsCisJCQkJCQkgICBoYW5kbGUsIHBoeV9udW1iZXIsCisJCQkJCQkgICBsaW5rX3JhdGVfKTsKKwkJCQl9CisJCQl9CisJCQlpZiAocmVhc29uX2NvZGUgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19QSFlfQ0hBTkdFRCkgeworCQkJCWlmIChsaW5rX3JhdGVfID49IE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KQorCQkJCQlfc2NzaWhfdWJsb2NrX2lvX2RldmljZShpb2MsIGhhbmRsZSk7CisJCQl9CisJCQlpZiAocmVhc29uX2NvZGUgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX0FEREVEKSB7CisJCQkJaWYgKGxpbmtfcmF0ZV8gPCBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSkKKwkJCQkJYnJlYWs7CisJCQkJX3Njc2loX2FkZF9kZXZpY2UoaW9jLCBoYW5kbGUsIHBoeV9udW1iZXIsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX05PVF9SRVNQT05ESU5HOgorCQkJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBoYW5kbGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBoYW5kbGUgZXhwYW5kZXIgcmVtb3ZhbCAqLworCWlmIChldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORykKKwkJX3Njc2loX2V4cGFuZGVyX3JlbW92ZShpb2MsIHBhcmVudF9oYW5kbGUpOworCit9CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1ZyAtIGRlYnVnIGZvciBkZXZpY2UgZXZlbnQKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGEpCit7CisJY2hhciAqcmVhc29uX3N0ciA9IE5VTEw7CisKKwlzd2l0Y2ggKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUpIHsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEE6CisJCXJlYXNvbl9zdHIgPSAic21hcnQgZGF0YSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVU5TVVBQT1JURUQ6CisJCXJlYXNvbl9zdHIgPSAidW5zdXBwb3J0ZWQgZGV2aWNlIGRpc2NvdmVyZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0lOVEVSTkFMX0RFVklDRV9SRVNFVDoKKwkJcmVhc29uX3N0ciA9ICJpbnRlcm5hbCBkZXZpY2UgcmVzZXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1RBU0tfQUJPUlRfSU5URVJOQUw6CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgdGFzayBhYm9ydCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQUJPUlRfVEFTS19TRVRfSU5URVJOQUw6CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgdGFzayBhYm9ydCBzZXQiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NMRUFSX1RBU0tfU0VUX0lOVEVSTkFMOgorCQlyZWFzb25fc3RyID0gImludGVybmFsIGNsZWFyIHRhc2sgc2V0IjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19RVUVSWV9UQVNLX0lOVEVSTkFMOgorCQlyZWFzb25fc3RyID0gImludGVybmFsIHF1ZXJ5IHRhc2siOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFOgorCQlyZWFzb25fc3RyID0gInNhdGEgaW5pdCBmYWlsdXJlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfSU5URVJOQUxfREVWX1JFU0VUOgorCQlyZWFzb25fc3RyID0gImludGVybmFsIGRldmljZSByZXNldCBjb21wbGV0ZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX1RBU0tfQUJPUlRfSU5URVJOQUw6CisJCXJlYXNvbl9zdHIgPSAiaW50ZXJuYWwgdGFzayBhYm9ydCBjb21wbGV0ZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQVNZTkNfTk9USUZJQ0FUSU9OOgorCQlyZWFzb25fc3RyID0gImludGVybmFsIGFzeW5jIG5vdGlmaWNhdGlvbiI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlYXNvbl9zdHIgPSAidW5rbm93biByZWFzb24iOworCQlicmVhazsKKwl9CisJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJkZXZpY2Ugc3RhdHVzIGNoYW5nZTogKCVzKVxuIgorCSAgICAiXHRoYW5kbGUoMHglMDR4KSwgc2FzIGFkZHJlc3MoMHglMDE2bGx4KSIsIGlvYy0+bmFtZSwKKwkgICAgcmVhc29uX3N0ciwgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RGV2SGFuZGxlKSwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShldmVudF9kYXRhLT5TQVNBZGRyZXNzKSk7CisJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgPT0gTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQSkKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIsIEFTQygweCV4KSwgQVNDUSgweCV4KVxuIiwgaW9jLT5uYW1lLAorCQkgICAgZXZlbnRfZGF0YS0+QVNDLCBldmVudF9kYXRhLT5BU0NRKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbiIpOworfQorI2VuZGlmCisKKy8qKgorICogX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBkZXZpY2Ugc3RhdHVzIGNoYW5nZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgIE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdCAqZXZlbnRfZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKy8qKgorICogX3Njc2loX3Nhc19lbmNsb3N1cmVfZGV2X3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcgLSBkZWJ1ZyBmb3IgZW5jbG9zdXJlIGV2ZW50CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1ZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50RGF0YVNhc0VuY2xEZXZTdGF0dXNDaGFuZ2VfdCAqZXZlbnRfZGF0YSkKK3sKKwljaGFyICpyZWFzb25fc3RyID0gTlVMTDsKKworCXN3aXRjaCAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSkgeworCWNhc2UgTVBJMl9FVkVOVF9TQVNfRU5DTF9SQ19BRERFRDoKKwkJcmVhc29uX3N0ciA9ICJlbmNsb3N1cmUgYWRkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX1JDX05PVF9SRVNQT05ESU5HOgorCQlyZWFzb25fc3RyID0gImVuY2xvc3VyZSByZW1vdmUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWFzb25fc3RyID0gInVua25vd24gcmVhc29uIjsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJlbmNsb3N1cmUgc3RhdHVzIGNoYW5nZTogKCVzKVxuIgorCSAgICAiXHRoYW5kbGUoMHglMDR4KSwgZW5jbG9zdXJlIGxvZ2ljYWwgaWQoMHglMDE2bGx4KSIKKwkgICAgIiBudW1iZXIgc2xvdHMoJWQpXG4iLCBpb2MtPm5hbWUsIHJlYXNvbl9zdHIsCisJICAgIGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkVuY2xvc3VyZUhhbmRsZSksCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZXZlbnRfZGF0YS0+RW5jbG9zdXJlTG9naWNhbElEKSwKKwkgICAgbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+U3RhcnRTbG90KSk7Cit9CisjZW5kaWYKKworLyoqCisgKiBfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBlbmNsb3N1cmUgZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDoKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTggVkZfSUQsIE1waTJFdmVudERhdGFTYXNFbmNsRGV2U3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGEpCit7CisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCisJCV9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywKKwkJICAgICBldmVudF9kYXRhKTsKKyNlbmRpZgorfQorCisvKioKKyAqIF9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudCAtIGhhbmRsZSBicm9hZGNhc3QgZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKKyAgICBNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwl1MTYgc21pZCwgaGFuZGxlOworCXUzMiBsdW47CisJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKKwl1MzIgdGVybWluYXRpb25fY291bnQ7CisJdTMyIHF1ZXJ5X2NvdW50OworCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90ICptcGlfcmVwbHk7CisKKwlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJicm9hZGNhc3QgcHJpbWF0aXZlOiAiCisJICAgICJwaHkgbnVtYmVyKCVkKSwgd2lkdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGV2ZW50X2RhdGEtPlBoeU51bSwKKwkgICAgZXZlbnRfZGF0YS0+UG9ydFdpZHRoKSk7CisKKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAorCSAgICBfX2Z1bmNfXykpOworCisJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKKwl0ZXJtaW5hdGlvbl9jb3VudCA9IDA7CisJcXVlcnlfY291bnQgPSAwOworCW1waV9yZXBseSA9IGlvYy0+dG1fY21kcy5yZXBseTsKKwlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+cmVxdWVzdF9kZXB0aDsgc21pZCsrKSB7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CisJCWlmICghc2NtZCkKKwkJCWNvbnRpbnVlOworCQlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0KQorCQkJY29udGludWU7CisJCSAvKiBza2lwIGhpZGRlbiByYWlkIGNvbXBvbmVudHMgKi8KKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5mbGFncyAmCisJCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKQorCQkJY29udGludWU7CisJCSAvKiBza2lwIHZvbHVtZXMgKi8KKwkJaWYgKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5mbGFncyAmCisJCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1ZPTFVNRSkKKwkJCWNvbnRpbnVlOworCisJCWhhbmRsZSA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGU7CisJCWx1biA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW47CisJCXF1ZXJ5X2NvdW50Kys7CisKKwkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgbHVuLAorCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSywgc21pZCwgMzApOworCQl0ZXJtaW5hdGlvbl9jb3VudCArPSBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpOworCisJCWlmICgobXBpX3JlcGx5LT5JT0NTdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgJiYKKwkJICAgIChtcGlfcmVwbHktPlJlc3BvbnNlQ29kZSA9PQorCQkgICAgIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9TVUNDRUVERUQgfHwKKwkJICAgICBtcGlfcmVwbHktPlJlc3BvbnNlQ29kZSA9PQorCQkgICAgIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JT19RVUVVRURfT05fSU9DKSkKKwkJCWNvbnRpbnVlOworCisJCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIGx1biwKKwkJICAgIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCUlRfVEFTS19TRVQsIHNtaWQsIDMwKTsKKwkJdGVybWluYXRpb25fY291bnQgKz0gbGUzMl90b19jcHUobXBpX3JlcGx5LT5UZXJtaW5hdGlvbkNvdW50KTsKKwl9CisJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMDsKKwltdXRleF91bmxvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CisKKwlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkgICAgIiVzIC0gZXhpdCwgcXVlcnlfY291bnQgPSAlZCB0ZXJtaW5hdGlvbl9jb3VudCA9ICVkXG4iLAorCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBxdWVyeV9jb3VudCwgdGVybWluYXRpb25fY291bnQpKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudCAtIGhhbmRsZSBkaXNjb3ZlcnkgZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgIE1waTJFdmVudERhdGFTYXNEaXNjb3ZlcnlfdCAqZXZlbnRfZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykgeworCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpc2NvdmVyeSBldmVudDogKCVzKSIsIGlvYy0+bmFtZSwKKwkJICAgIChldmVudF9kYXRhLT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfU0FTX0RJU0NfUkNfU1RBUlRFRCkgPworCQkgICAgInN0YXJ0IiA6ICJzdG9wIik7CisJaWYgKGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykKKwkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIsIGRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCisJCSAgICBpb2MtPm5hbWUsIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykpOworCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfU0FTX0RJU0NfUkNfU1RBUlRFRCAmJgorCSAgICAhaW9jLT5zYXNfaGJhLm51bV9waHlzKQorCQlfc2NzaWhfc2FzX2hvc3RfYWRkKGlvYyk7Cit9CisKKy8qKgorICogX3Njc2loX3JlcHJvYmVfbHVuIC0gcmVwcm9iaW5nIGx1bgorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQG5vX3VsZF9hdHRhY2g6IHNkZXYtPm5vX3VsZF9hdHRhY2ggZmxhZyBzZXR0aW5nCisgKgorICoqLworc3RhdGljIHZvaWQKK19zY3NpaF9yZXByb2JlX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHZvaWQgKm5vX3VsZF9hdHRhY2gpCit7CisJaW50IHJjOworCisJc2Rldi0+bm9fdWxkX2F0dGFjaCA9IG5vX3VsZF9hdHRhY2ggPyAxIDogMDsKKwlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICIlcyByYWlkIGNvbXBvbmVudFxuIiwKKwkgICAgc2Rldi0+bm9fdWxkX2F0dGFjaCA/ICJoaWRkaW5nIiA6ICJleHBvc2luZyIpOworCXJjID0gc2NzaV9kZXZpY2VfcmVwcm9iZShzZGV2KTsKK30KKworLyoqCisgKiBfc2NzaWhfcmVwcm9iZV90YXJnZXQgLSByZXByb2JpbmcgdGFyZ2V0CisgKiBAc3RhcmdldDogc2NzaSB0YXJnZXQgc3RydWN0CisgKiBAbm9fdWxkX2F0dGFjaDogc2Rldi0+bm9fdWxkX2F0dGFjaCBmbGFnIHNldHRpbmcKKyAqCisgKiBOb3RlOiBub191bGRfYXR0YWNoIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkaXNrIGRldmljZSBpcyBhdHRhY2hlZAorICogdG8gYmxvY2sgbGF5ZXIuIEEgdmFsdWUgb2YgYDFgIG1lYW5zIHRvIG5vdCBhdHRhY2guCisgKiovCitzdGF0aWMgdm9pZAorX3Njc2loX3JlcHJvYmVfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCwgaW50IG5vX3VsZF9hdHRhY2gpCit7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCisJaWYgKG5vX3VsZF9hdHRhY2gpCisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5mbGFncyB8PSBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UOworCWVsc2UKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzICY9IH5NUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UOworCisJc3RhcmdldF9mb3JfZWFjaF9kZXZpY2Uoc3RhcmdldCwgbm9fdWxkX2F0dGFjaCA/ICh2b2lkICopMSA6IE5VTEwsCisJICAgIF9zY3NpaF9yZXByb2JlX2x1bik7Cit9CisvKioKKyAqIF9zY3NpaF9zYXNfdm9sdW1lX2FkZCAtIGFkZCBuZXcgdm9sdW1lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBlbGVtZW50OiBJUiBjb25maWcgZWxlbWVudCBkYXRhCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc192b2x1bWVfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCB3d2lkOworCXUxNiBoYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpOworCWludCByYzsKKworI2lmIDAgLyogUkFJRF9IQUNLUyAqLworCWlmIChsZTMyX3RvX2NwdShldmVudF9kYXRhLT5GbGFncykgJgorCSAgICBNUEkyX0VWRU5UX0lSX0NIQU5HRV9GTEFHU19GT1JFSUdOX0NPTkZJRykKKwkJcmV0dXJuOworI2VuZGlmCisKKwltcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQoaW9jLCBoYW5kbGUsICZ3d2lkKTsKKwlpZiAoIXd3aWQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkgICAgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIGlvYy0+bmFtZSwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfd3dpZChpb2MsIHd3aWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKHJhaWRfZGV2aWNlKQorCQlyZXR1cm47CisKKwlyYWlkX2RldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfcmFpZF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhaWRfZGV2aWNlKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQKKwkJICAgICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXJhaWRfZGV2aWNlLT5pZCA9IGlvYy0+c2FzX2lkKys7CisJcmFpZF9kZXZpY2UtPmNoYW5uZWwgPSBSQUlEX0NIQU5ORUw7CisJcmFpZF9kZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKKwlyYWlkX2RldmljZS0+d3dpZCA9IHd3aWQ7CisJX3Njc2loX3JhaWRfZGV2aWNlX2FkZChpb2MsIHJhaWRfZGV2aWNlKTsKKwlpZiAoIWlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUpIHsKKwkJcmMgPSBzY3NpX2FkZF9kZXZpY2UoaW9jLT5zaG9zdCwgUkFJRF9DSEFOTkVMLAorCQkgICAgcmFpZF9kZXZpY2UtPmlkLCAwKTsKKwkJaWYgKHJjKQorCQkJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKKwl9IGVsc2UKKwkJX3Njc2loX2RldGVybWluZV9ib290X2RldmljZShpb2MsIHJhaWRfZGV2aWNlLCAxKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX3ZvbHVtZV9kZWxldGUgLSBkZWxldGUgdm9sdW1lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBlbGVtZW50OiBJUiBjb25maWcgZWxlbWVudCBkYXRhCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc192b2x1bWVfZGVsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1MTYgaGFuZGxlID0gbGUxNl90b19jcHUoZWxlbWVudC0+Vm9sRGV2SGFuZGxlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisKKyNpZiAwIC8qIFJBSURfSEFDS1MgKi8KKwlpZiAobGUzMl90b19jcHUoZXZlbnRfZGF0YS0+RmxhZ3MpICYKKwkgICAgTVBJMl9FVkVOVF9JUl9DSEFOR0VfRkxBR1NfRk9SRUlHTl9DT05GSUcpCisJCXJldHVybjsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXJhaWRfZGV2aWNlKQorCQlyZXR1cm47CisJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CisJCXNjc2lfcmVtb3ZlX3RhcmdldCgmcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmRldik7CisJfQorCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19wZF9leHBvc2UgLSBleHBvc2UgcGQgY29tcG9uZW50IHRvIC9kZXYvc2RYCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBlbGVtZW50OiBJUiBjb25maWcgZWxlbWVudCBkYXRhCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19wZF9leHBvc2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50KQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5QaHlzRGlza0RldkhhbmRsZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJaWYgKCFzYXNfZGV2aWNlKQorCQlyZXR1cm47CisKKwkvKiBleHBvc2luZyByYWlkIGNvbXBvbmVudCAqLworCXNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUgPSAwOworCXNhc19kZXZpY2UtPnZvbHVtZV93d2lkID0gMDsKKwlzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgPSAwOworCV9zY3NpaF9yZXByb2JlX3RhcmdldChzYXNfZGV2aWNlLT5zdGFyZ2V0LCAwKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX3BkX2hpZGUgLSBoaWRlIHBkIGNvbXBvbmVudCBmcm9tIC9kZXYvc2RYCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBlbGVtZW50OiBJUiBjb25maWcgZWxlbWVudCBkYXRhCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19wZF9oaWRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlID0gbGUxNl90b19jcHUoZWxlbWVudC0+UGh5c0Rpc2tEZXZIYW5kbGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCWlmICghc2FzX2RldmljZSkKKwkJcmV0dXJuOworCisJLyogaGlkaW5nIHJhaWQgY29tcG9uZW50ICovCisJbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV9oYW5kbGUoaW9jLCBoYW5kbGUsCisJICAgICZzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKTsKKwltcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQoaW9jLCBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlLAorCSAgICAmc2FzX2RldmljZS0+dm9sdW1lX3d3aWQpOworCXNhc19kZXZpY2UtPmhpZGRlbl9yYWlkX2NvbXBvbmVudCA9IDE7CisJX3Njc2loX3JlcHJvYmVfdGFyZ2V0KHNhc19kZXZpY2UtPnN0YXJnZXQsIDEpOworfQorCisvKioKKyAqIF9zY3NpaF9zYXNfcGRfZGVsZXRlIC0gZGVsZXRlIHBkIGNvbXBvbmVudAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZWxlbWVudDogSVIgY29uZmlnIGVsZW1lbnQgZGF0YQorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfcGRfZGVsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlID0gbGUxNl90b19jcHUoZWxlbWVudC0+UGh5c0Rpc2tEZXZIYW5kbGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCWlmICghc2FzX2RldmljZSkKKwkJcmV0dXJuOworCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgaGFuZGxlKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2FzX3BkX2FkZCAtIHJlbW92ZSBwZCBjb21wb25lbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGVsZW1lbnQ6IElSIGNvbmZpZyBlbGVtZW50IGRhdGEKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX3BkX2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKmVsZW1lbnQpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZSA9IGxlMTZfdG9fY3B1KGVsZW1lbnQtPlBoeXNEaXNrRGV2SGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2FzX2RldmljZSkKKwkJc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50ID0gMTsKKwllbHNlCisJCV9zY3NpaF9hZGRfZGV2aWNlKGlvYywgaGFuZGxlLCAwLCAxKTsKK30KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworLyoqCisgKiBfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnRfZGVidWcgLSBkZWJ1ZyBmb3IgSVIgQ29uZmlnIENoYW5nZSBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudF9kZWJ1ZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICpldmVudF9kYXRhKQoreworCU1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50OworCXU4IGVsZW1lbnRfdHlwZTsKKwlpbnQgaTsKKwljaGFyICpyZWFzb25fc3RyID0gTlVMTCwgKmVsZW1lbnRfc3RyID0gTlVMTDsKKworCWVsZW1lbnQgPSAoTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKikmZXZlbnRfZGF0YS0+Q29uZmlnRWxlbWVudFswXTsKKworCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAicmFpZCBjb25maWcgY2hhbmdlOiAoJXMpLCBlbGVtZW50cyglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgKGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkZsYWdzKSAmCisJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0ZMQUdTX0ZPUkVJR05fQ09ORklHKSA/CisJICAgICJmb3JlaWduIiA6ICJuYXRpdmUiLCBldmVudF9kYXRhLT5OdW1FbGVtZW50cyk7CisJZm9yIChpID0gMDsgaSA8IGV2ZW50X2RhdGEtPk51bUVsZW1lbnRzOyBpKyssIGVsZW1lbnQrKykgeworCQlzd2l0Y2ggKGVsZW1lbnQtPlJlYXNvbkNvZGUpIHsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19BRERFRDoKKwkJCXJlYXNvbl9zdHIgPSAiYWRkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1JFTU9WRUQ6CisJCQlyZWFzb25fc3RyID0gInJlbW92ZSI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19OT19DSEFOR0U6CisJCQlyZWFzb25fc3RyID0gIm5vIGNoYW5nZSI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19ISURFOgorCQkJcmVhc29uX3N0ciA9ICJoaWRlIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1VOSElERToKKwkJCXJlYXNvbl9zdHIgPSAidW5oaWRlIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1ZPTFVNRV9DUkVBVEVEOgorCQkJcmVhc29uX3N0ciA9ICJ2b2x1bWVfY3JlYXRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19WT0xVTUVfREVMRVRFRDoKKwkJCXJlYXNvbl9zdHIgPSAidm9sdW1lX2RlbGV0ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUERfQ1JFQVRFRDoKKwkJCXJlYXNvbl9zdHIgPSAicGRfY3JlYXRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19QRF9ERUxFVEVEOgorCQkJcmVhc29uX3N0ciA9ICJwZF9kZWxldGVkIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmVhc29uX3N0ciA9ICJ1bmtub3duIHJlYXNvbiI7CisJCQlicmVhazsKKwkJfQorCQllbGVtZW50X3R5cGUgPSBsZTE2X3RvX2NwdShlbGVtZW50LT5FbGVtZW50RmxhZ3MpICYKKwkJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX0VGTEFHU19FTEVNRU5UX1RZUEVfTUFTSzsKKwkJc3dpdGNoIChlbGVtZW50X3R5cGUpIHsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9FRkxBR1NfVk9MVU1FX0VMRU1FTlQ6CisJCQllbGVtZW50X3N0ciA9ICJ2b2x1bWUiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfRUZMQUdTX1ZPTFBIWVNESVNLX0VMRU1FTlQ6CisJCQllbGVtZW50X3N0ciA9ICJwaHlzIGRpc2siOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfRUZMQUdTX0hPVFNQQVJFX0VMRU1FTlQ6CisJCQllbGVtZW50X3N0ciA9ICJob3Qgc3BhcmUiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbGVtZW50X3N0ciA9ICJ1bmtub3duIGVsZW1lbnQiOworCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0KCVzOiVzKSwgdm9sIGhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAicGQgaGFuZGxlKDB4JTA0eCksIHBkIG51bSgweCUwMngpXG4iLCBlbGVtZW50X3N0ciwKKwkJICAgIHJlYXNvbl9zdHIsIGxlMTZfdG9fY3B1KGVsZW1lbnQtPlZvbERldkhhbmRsZSksCisJCSAgICBsZTE2X3RvX2NwdShlbGVtZW50LT5QaHlzRGlza0RldkhhbmRsZSksCisJCSAgICBlbGVtZW50LT5QaHlzRGlza051bSk7CisJfQorfQorI2VuZGlmCisKKy8qKgorICogX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGlyIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAVkZfSUQ6CisgKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBDb250ZXh0OiB1c2VyLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICAgTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICpldmVudF9kYXRhKQoreworCU1waTJFdmVudElyQ29uZmlnRWxlbWVudF90ICplbGVtZW50OworCWludCBpOworCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCisJCV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworCisjZW5kaWYKKworCWVsZW1lbnQgPSAoTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKikmZXZlbnRfZGF0YS0+Q29uZmlnRWxlbWVudFswXTsKKwlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRWxlbWVudHM7IGkrKywgZWxlbWVudCsrKSB7CisKKwkJc3dpdGNoIChlbGVtZW50LT5SZWFzb25Db2RlKSB7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVk9MVU1FX0NSRUFURUQ6CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfQURERUQ6CisJCQlfc2NzaWhfc2FzX3ZvbHVtZV9hZGQoaW9jLCBlbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1ZPTFVNRV9ERUxFVEVEOgorCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1JFTU9WRUQ6CisJCQlfc2NzaWhfc2FzX3ZvbHVtZV9kZWxldGUoaW9jLCBlbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0NSRUFURUQ6CisJCQlfc2NzaWhfc2FzX3BkX2hpZGUoaW9jLCBlbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0RFTEVURUQ6CisJCQlfc2NzaWhfc2FzX3BkX2V4cG9zZShpb2MsIGVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfSElERToKKwkJCV9zY3NpaF9zYXNfcGRfYWRkKGlvYywgZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19VTkhJREU6CisJCQlfc2NzaWhfc2FzX3BkX2RlbGV0ZShpb2MsIGVsZW1lbnQpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQgLSBJUiB2b2x1bWUgZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCisgICAgTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKmV2ZW50X2RhdGEpCit7CisJdTY0IHd3aWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1MTYgaGFuZGxlOworCXUzMiBzdGF0ZTsKKwlpbnQgcmM7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKworCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJfVk9MVU1FX1JDX1NUQVRFX0NIQU5HRUQpCisJCXJldHVybjsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlZvbERldkhhbmRsZSk7CisJc3RhdGUgPSBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5OZXdWYWx1ZSk7CisJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCisJICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCisJICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfTUlTU0lORzoKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfRkFJTEVEOgorCQlpZiAoIXJhaWRfZGV2aWNlKQorCQkJYnJlYWs7CisJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgeworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSByYWlkX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CisJCQlzY3NpX3JlbW92ZV90YXJnZXQoJnJhaWRfZGV2aWNlLT5zdGFyZ2V0LT5kZXYpOworCQl9CisJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09OTElORToKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfREVHUkFERUQ6CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09QVElNQUw6CisJCWlmIChyYWlkX2RldmljZSkKKwkJCWJyZWFrOworCisJCW1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfd3dpZChpb2MsIGhhbmRsZSwgJnd3aWQpOworCQlpZiAoIXd3aWQpIHsKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQKKwkJCSAgICAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgaW9jLT5uYW1lLAorCQkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJYnJlYWs7CisJCX0KKworCQlyYWlkX2RldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfcmFpZF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyYWlkX2RldmljZSkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlicmVhazsKKwkJfQorCisJCXJhaWRfZGV2aWNlLT5pZCA9IGlvYy0+c2FzX2lkKys7CisJCXJhaWRfZGV2aWNlLT5jaGFubmVsID0gUkFJRF9DSEFOTkVMOworCQlyYWlkX2RldmljZS0+aGFuZGxlID0gaGFuZGxlOworCQlyYWlkX2RldmljZS0+d3dpZCA9IHd3aWQ7CisJCV9zY3NpaF9yYWlkX2RldmljZV9hZGQoaW9jLCByYWlkX2RldmljZSk7CisJCXJjID0gc2NzaV9hZGRfZGV2aWNlKGlvYy0+c2hvc3QsIFJBSURfQ0hBTk5FTCwKKwkJICAgIHJhaWRfZGV2aWNlLT5pZCwgMCk7CisJCWlmIChyYykKKwkJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX0lOSVRJQUxJWklORzoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50IC0gUEQgZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgTXBpMkV2ZW50RGF0YUlyUGh5c2ljYWxEaXNrX3QgKmV2ZW50X2RhdGEpCit7CisJdTE2IGhhbmRsZTsKKwl1MzIgc3RhdGU7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPSBNUEkyX0VWRU5UX0lSX1BIWVNESVNLX1JDX1NUQVRFX0NIQU5HRUQpCisJCXJldHVybjsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBoeXNEaXNrRGV2SGFuZGxlKTsKKwlzdGF0ZSA9IGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPk5ld1ZhbHVlKTsKKworCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBoYW5kbGUoMHglMDR4KSwgIgorCSAgICAib2xkKDB4JTA4eCksIG5ldygweCUwOHgpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCAgaGFuZGxlLAorCSAgICBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5QcmV2aW91c1ZhbHVlKSwgc3RhdGUpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKyNpZiAwCisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT0ZGTElORToKKwkJaWYgKHNhc19kZXZpY2UpCisJCQlfc2NzaWhfcmVtb3ZlX2RldmljZShpb2MsIGhhbmRsZSk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT05MSU5FOgorCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRFX0RFR1JBREVEOgorCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRFX1JFQlVJTERJTkc6CisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT1BUSU1BTDoKKwkJaWYgKHNhc19kZXZpY2UpCisJCQlzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgPSAxOworCQllbHNlCisJCQlfc2NzaWhfYWRkX2RldmljZShpb2MsIGhhbmRsZSwgMCwgMSk7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfTk9UX0NPTkZJR1VSRUQ6CisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfTk9UX0NPTVBBVElCTEU6CisJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfSE9UX1NQQVJFOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworLyoqCisgKiBfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcgLSBkZWJ1ZyBmb3IgSVIgb3AgZXZlbnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1ZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkV2ZW50RGF0YUlyT3BlcmF0aW9uU3RhdHVzX3QgKmV2ZW50X2RhdGEpCit7CisJY2hhciAqcmVhc29uX3N0ciA9IE5VTEw7CisKKwlzd2l0Y2ggKGV2ZW50X2RhdGEtPlJBSURPcGVyYXRpb24pIHsKKwljYXNlIE1QSTJfRVZFTlRfSVJfUkFJRE9QX1JFU1lOQzoKKwkJcmVhc29uX3N0ciA9ICJyZXN5bmMiOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfUkFJRE9QX09OTElORV9DQVBfRVhQQU5TSU9OOgorCQlyZWFzb25fc3RyID0gIm9ubGluZSBjYXBhY2l0eSBleHBhbnNpb24iOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfSVJfUkFJRE9QX0NPTlNJU1RFTkNZX0NIRUNLOgorCQlyZWFzb25fc3RyID0gImNvbnNpc3RlbmN5IGNoZWNrIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVhc29uX3N0ciA9ICJ1bmtub3duIHJlYXNvbiI7CisJCWJyZWFrOworCX0KKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyYWlkIG9wZXJhdGlvbmFsIHN0YXR1czogKCVzKSIKKwkgICAgIlx0aGFuZGxlKDB4JTA0eCksIHBlcmNlbnQgY29tcGxldGUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsIHJlYXNvbl9zdHIsCisJICAgIGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlZvbERldkhhbmRsZSksCisJICAgIGV2ZW50X2RhdGEtPlBlcmNlbnRDb21wbGV0ZSk7Cit9CisjZW5kaWYKKworLyoqCisgKiBfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQgLSBoYW5kbGUgUkFJRCBvcGVyYXRpb24gZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDoKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKKyAgICBNcGkyRXZlbnREYXRhSXJPcGVyYXRpb25TdGF0dXNfdCAqZXZlbnRfZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKKwlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisjZW5kaWYKK30KKworLyoqCisgKiBfc2NzaWhfdGFza19zZXRfZnVsbCAtIGhhbmRsZSB0YXNrIHNldCBmdWxsCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIENvbnRleHQ6IHVzZXIuCisgKgorICogVGhyb3R0bGUgYmFjayBxZGVwdGguCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdGFza19zZXRfZnVsbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAorICAgIE1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJaW50IGRlcHRoOworCXUxNiBjdXJyZW50X2RlcHRoOworCXUxNiBoYW5kbGU7CisJaW50IGlkLCBjaGFubmVsOworCXU2NCBzYXNfYWRkcmVzczsKKworCWN1cnJlbnRfZGVwdGggPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5DdXJyZW50RGVwdGgpOworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkRldkhhbmRsZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlpZiAoIXNhc19kZXZpY2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCWlkID0gc2FzX2RldmljZS0+aWQ7CisJY2hhbm5lbCA9IHNhc19kZXZpY2UtPmNoYW5uZWw7CisJc2FzX2FkZHJlc3MgPSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzczsKKworCS8qIGlmIGhpZGRlbiByYWlkIGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdG8gdm9sdW1lIGNoYXJhY3RlcmlzdGljcyAqLworCWlmIChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQgJiYgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKAorCQkgICAgaW9jLCBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCWlmIChyYWlkX2RldmljZSkgeworCQkJaWQgPSByYWlkX2RldmljZS0+aWQ7CisJCQljaGFubmVsID0gcmFpZF9kZXZpY2UtPmNoYW5uZWw7CisJCQloYW5kbGUgPSByYWlkX2RldmljZS0+aGFuZGxlOworCQkJc2FzX2FkZHJlc3MgPSByYWlkX2RldmljZS0+d3dpZDsKKwkJfQorCX0KKworCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVEFTS19TRVRfRlVMTCkKKwkJc3RhcmdldF9wcmludGsoS0VSTl9ERUJVRywgc2FzX2RldmljZS0+c3RhcmdldCwgInRhc2sgc2V0ICIKKwkJICAgICJmdWxsOiBoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZGVwdGgoJWQpXG4iLAorCQkgICAgaGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzLCBjdXJyZW50X2RlcHRoKTsKKworCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBpb2MtPnNob3N0KSB7CisJCWlmIChzZGV2LT5pZCA9PSBpZCAmJiBzZGV2LT5jaGFubmVsID09IGNoYW5uZWwpIHsKKwkJCWlmIChjdXJyZW50X2RlcHRoID4gc2Rldi0+cXVldWVfZGVwdGgpIHsKKwkJCQlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYKKwkJCQkgICAgTVBUX0RFQlVHX1RBU0tfU0VUX0ZVTEwpCisJCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgInN0cmFuZ2UgIgorCQkJCQkgICAgIm9ic2VydmF0aW9uLCB0aGUgcXVldWUgZGVwdGggaXMiCisJCQkJCSAgICAiICglZCkgbWVhbndoaWxlIGZ3IHF1ZXVlIGRlcHRoICIKKwkJCQkJICAgICJpcyAoJWQpXG4iLCBzZGV2LT5xdWV1ZV9kZXB0aCwKKwkJCQkJICAgIGN1cnJlbnRfZGVwdGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGVwdGggPSBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwKKwkJCSAgICBjdXJyZW50X2RlcHRoIC0gMSk7CisJCQlpZiAoZGVwdGggPiAwKQorCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIlF1ZXVlIGRlcHRoICIKKwkJCQkgICAgInJlZHVjZWQgdG8gKCVkKVxuIiwgZGVwdGgpOworCQkJZWxzZSBpZiAoZGVwdGggPCAwKQorCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIlRhZ2dlZCBDb21tYW5kICIKKwkJCQkgICAgIlF1ZXVlaW5nIGlzIGJlaW5nIGRpc2FibGVkXG4iKTsKKwkJCWVsc2UgaWYgKGRlcHRoID09IDApCisJCQkJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmCisJCQkJICAgICBNUFRfREVCVUdfVEFTS19TRVRfRlVMTCkKKwkJCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCQkgICAgICJRdWV1ZSBkZXB0aCBub3QgY2hhbmdlZCB5ZXRcbiIpOworCQl9CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfc2FzX2RldmljZSAtIG1hcmsgYSBzYXNfZGV2aWNlcyBhcyByZXNwb25kaW5nCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3MKKyAqIEBzbG90OiBlbmNsb3N1cmUgc2xvdCBpZAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICoKKyAqIEFmdGVyIGhvc3QgcmVzZXQsIGZpbmQgb3V0IHdoZXRoZXIgZGV2aWNlcyBhcmUgc3RpbGwgcmVzcG9uZGluZy4KKyAqIFVzZWQgaW4gX3Njc2lfcmVtb3ZlX3VucmVzcG9uc2l2ZV9zYXNfZGV2aWNlcy4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfc2FzX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcywKKyAgICB1MTYgc2xvdCwgdTE2IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2RldmljZSwgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcyAmJgorCQkgICAgc2FzX2RldmljZS0+c2xvdCA9PSBzbG90ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQpIHsKKwkJCXNhc19kZXZpY2UtPnJlc3BvbmRpbmcgPSAxOworCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkJICAgICJoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZW5jbG9zdXJlICIKKwkJCSAgICAibG9naWNhbCBpZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgaGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJCSAgICBzYXNfZGV2aWNlLT5zbG90KTsKKwkJCWlmIChzYXNfZGV2aWNlLT5oYW5kbGUgPT0gaGFuZGxlKQorCQkJCWdvdG8gb3V0OworCQkJcHJpbnRrKEtFUk5fSU5GTyAiXHRoYW5kbGUgY2hhbmdlZCBmcm9tKDB4JTA0eCkhISFcbiIsCisJCQkgICAgc2FzX2RldmljZS0+aGFuZGxlKTsKKwkJCXNhc19kZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKKwkJCXN0YXJnZXQgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0OworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPSBoYW5kbGU7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfc2FzX2RldmljZXMgLQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKgorICogQWZ0ZXIgaG9zdCByZXNldCwgZmluZCBvdXQgd2hldGhlciBkZXZpY2VzIGFyZSBzdGlsbCByZXNwb25kaW5nLgorICogSWYgbm90IHJlbW92ZS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19zYXNfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJTXBpMlNhc0RldmljZVBhZ2UwX3Qgc2FzX2RldmljZV9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCV9fbGU2NCBzYXNfYWRkcmVzczsKKwl1MTYgaGFuZGxlOworCXUzMiBkZXZpY2VfaW5mbzsKKwl1MTYgc2xvdDsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5zYXNfZGV2aWNlX2xpc3QpKQorCQlyZXR1cm47CisKKwloYW5kbGUgPSAweEZGRkY7CisJd2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwKGlvYywgJm1waV9yZXBseSwKKwkgICAgJnNhc19kZXZpY2VfcGcwLCBNUEkyX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSwKKwkgICAgaGFuZGxlKSkpIHsKKwkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1BBR0UpCisJCQlicmVhazsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuRGV2SGFuZGxlKTsKKwkJZGV2aWNlX2luZm8gPSBsZTMyX3RvX2NwdShzYXNfZGV2aWNlX3BnMC5EZXZpY2VJbmZvKTsKKwkJaWYgKCEoX3Njc2loX2lzX2VuZF9kZXZpY2UoZGV2aWNlX2luZm8pKSkKKwkJCWNvbnRpbnVlOworCQlzYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlNBU0FkZHJlc3MpOworCQlzbG90ID0gbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuU2xvdCk7CisJCV9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfc2FzX2RldmljZShpb2MsIHNhc19hZGRyZXNzLCBzbG90LAorCQkgICAgaGFuZGxlKTsKKwl9Cit9CisKKy8qKgorICogX3Njc2loX21hcmtfcmVzcG9uZGluZ19yYWlkX2RldmljZSAtIG1hcmsgYSByYWlkX2RldmljZSBhcyByZXNwb25kaW5nCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEB3d2lkOiB3b3JsZCB3aWRlIGlkZW50aWZpZXIgZm9yIHJhaWQgdm9sdW1lCisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKgorICogQWZ0ZXIgaG9zdCByZXNldCwgZmluZCBvdXQgd2hldGhlciBkZXZpY2VzIGFyZSBzdGlsbCByZXNwb25kaW5nLgorICogVXNlZCBpbiBfc2NzaV9yZW1vdmVfdW5yZXNwb25zaXZlX3JhaWRfZGV2aWNlcy4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgd3dpZCwKKyAgICB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyYWlkX2RldmljZSwgJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAocmFpZF9kZXZpY2UtPnd3aWQgPT0gd3dpZCAmJiByYWlkX2RldmljZS0+c3RhcmdldCkgeworCQkJcmFpZF9kZXZpY2UtPnJlc3BvbmRpbmcgPSAxOworCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCByYWlkX2RldmljZS0+c3RhcmdldCwKKwkJCSAgICAiaGFuZGxlKDB4JTA0eCksIHd3aWQoMHglMDE2bGx4KVxuIiwgaGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQpOworCQkJaWYgKHJhaWRfZGV2aWNlLT5oYW5kbGUgPT0gaGFuZGxlKQorCQkJCWdvdG8gb3V0OworCQkJcHJpbnRrKEtFUk5fSU5GTyAiXHRoYW5kbGUgY2hhbmdlZCBmcm9tKDB4JTA0eCkhISFcbiIsCisJCQkgICAgcmFpZF9kZXZpY2UtPmhhbmRsZSk7CisJCQlyYWlkX2RldmljZS0+aGFuZGxlID0gaGFuZGxlOworCQkJc3RhcmdldCA9IHJhaWRfZGV2aWNlLT5zdGFyZ2V0OworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPSBoYW5kbGU7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3JhaWRfZGV2aWNlcyAtCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBBZnRlciBob3N0IHJlc2V0LCBmaW5kIG91dCB3aGV0aGVyIGRldmljZXMgYXJlIHN0aWxsIHJlc3BvbmRpbmcuCisgKiBJZiBub3QgcmVtb3ZlLgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3JhaWRfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJTXBpMlJhaWRWb2xQYWdlMV90IHZvbHVtZV9wZzE7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBoYW5kbGU7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pOworCisJaWYgKGxpc3RfZW1wdHkoJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCkpCisJCXJldHVybjsKKworCWhhbmRsZSA9IDB4RkZGRjsKKwl3aGlsZSAoIShtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcxKGlvYywgJm1waV9yZXBseSwKKwkgICAgJnZvbHVtZV9wZzEsIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSwgaGFuZGxlKSkpIHsKKwkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1BBR0UpCisJCQlicmVhazsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUodm9sdW1lX3BnMS5EZXZIYW5kbGUpOworCQlfc2NzaWhfbWFya19yZXNwb25kaW5nX3JhaWRfZGV2aWNlKGlvYywKKwkJICAgIGxlNjRfdG9fY3B1KHZvbHVtZV9wZzEuV1dJRCksIGhhbmRsZSk7CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdfZXhwYW5kZXIgLSBtYXJrIGEgZXhwYW5kZXIgYXMgcmVzcG9uZGluZworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2FkZHJlc3M6IHNhcyBhZGRyZXNzCisgKiBAaGFuZGxlOgorICoKKyAqIEFmdGVyIGhvc3QgcmVzZXQsIGZpbmQgb3V0IHdoZXRoZXIgZGV2aWNlcyBhcmUgc3RpbGwgcmVzcG9uZGluZy4KKyAqIFVzZWQgaW4gX3Njc2lfcmVtb3ZlX3VucmVzcG9uc2l2ZV9leHBhbmRlcnMuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfbWFya19yZXNwb25kaW5nX2V4cGFuZGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzLAorICAgICB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2V4cGFuZGVyLCAmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcykgeworCQkJc2FzX2V4cGFuZGVyLT5yZXNwb25kaW5nID0gMTsKKwkJCWlmIChzYXNfZXhwYW5kZXItPmhhbmRsZSAhPSBoYW5kbGUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJvbGQgaGFuZGxlKDB4JTA0eClcbiIsCisJCQkJICAgIHNhc19leHBhbmRlci0+aGFuZGxlKTsKKwkJCQlzYXNfZXhwYW5kZXItPmhhbmRsZSA9IGhhbmRsZTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJfQorIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfZXhwYW5kZXJzIC0KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIEFmdGVyIGhvc3QgcmVzZXQsIGZpbmQgb3V0IHdoZXRoZXIgZGV2aWNlcyBhcmUgc3RpbGwgcmVzcG9uZGluZy4KKyAqIElmIG5vdCByZW1vdmUuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfZXhwYW5kZXJzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlNcGkyRXhwYW5kZXJQYWdlMF90IGV4cGFuZGVyX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGlvY19zdGF0dXM7CisJX19sZTY0IHNhc19hZGRyZXNzOworCXUxNiBoYW5kbGU7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pOworCisJaWYgKGxpc3RfZW1wdHkoJmlvYy0+c2FzX2V4cGFuZGVyX2xpc3QpKQorCQlyZXR1cm47CisKKwloYW5kbGUgPSAweEZGRkY7CisJd2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMChpb2MsICZtcGlfcmVwbHksICZleHBhbmRlcl9wZzAsCisJICAgIE1QSTJfU0FTX0VYUEFORF9QR0FEX0ZPUk1fR0VUX05FWFRfSE5ETCwgaGFuZGxlKSkpIHsKKworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKKwkJCWJyZWFrOworCisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV4cGFuZGVyX3BnMC5EZXZIYW5kbGUpOworCQlzYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KGV4cGFuZGVyX3BnMC5TQVNBZGRyZXNzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiXHRleHBhbmRlciBwcmVzZW50OiBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgInNhc19hZGRyKDB4JTAxNmxseClcbiIsIGhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpOworCQlfc2NzaWhfbWFya19yZXNwb25kaW5nX2V4cGFuZGVyKGlvYywgc2FzX2FkZHJlc3MsIGhhbmRsZSk7CisJfQorCit9CisKKy8qKgorICogX3Njc2loX3JlbW92ZV91bnJlc3BvbmRpbmdfZGV2aWNlcyAtIHJlbW92aW5nIHVucmVzcG9uZGluZyBkZXZpY2VzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9yZW1vdmVfdW5yZXNwb25kaW5nX2RldmljZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZSwgKnNhc19kZXZpY2VfbmV4dDsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXIsICpzYXNfZXhwYW5kZXJfbmV4dDsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSwgKnJhaWRfZGV2aWNlX25leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19zYXNfZGV2aWNlcyhpb2MpOworCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19yYWlkX2RldmljZXMoaW9jKTsKKwlfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfZXhwYW5kZXJzKGlvYyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlvYy0+c2hvc3RfcmVjb3ZlcnkgPSAwOworCWlmIChpb2MtPnNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicHV0dGluZyBjb250cm9sbGVyIGludG8gIgorCQkgICAgIlNIT1NUX1JVTk5JTkdcbiIsIGlvYy0+bmFtZSk7CisJCXNjc2lfaG9zdF9zZXRfc3RhdGUoaW9jLT5zaG9zdCwgU0hPU1RfUlVOTklORyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYXNfZGV2aWNlLCBzYXNfZGV2aWNlX25leHQsCisJICAgICZpb2MtPnNhc19kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoc2FzX2RldmljZS0+cmVzcG9uZGluZykgeworCQkJc2FzX2RldmljZS0+cmVzcG9uZGluZyA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJCSAgICAicmVtb3Zpbmc6IGhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLCAiCisJCQkgICAgImVuY2xvc3VyZSBsb2dpY2FsIGlkKDB4JTAxNmxseCksIHNsb3QoJWQpXG4iLAorCQkJICAgIHNhc19kZXZpY2UtPmhhbmRsZSwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQsCisJCQkgICAgc2FzX2RldmljZS0+c2xvdCk7CisJCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgc2FzX2RldmljZS0+aGFuZGxlKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIHJhaWRfZGV2aWNlX25leHQsCisJICAgICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJhaWRfZGV2aWNlLT5yZXNwb25kaW5nKSB7CisJCQlyYWlkX2RldmljZS0+cmVzcG9uZGluZyA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmFpZF9kZXZpY2UtPnN0YXJnZXQpIHsKKwkJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgcmFpZF9kZXZpY2UtPnN0YXJnZXQsCisJCQkgICAgInJlbW92aW5nOiBoYW5kbGUoMHglMDR4KSwgd3dpZCgweCUwMTZsbHgpXG4iLAorCQkJICAgICAgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJhaWRfZGV2aWNlLT53d2lkKTsKKwkJCXNjc2lfcmVtb3ZlX3RhcmdldCgmcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmRldik7CisJCX0KKwkJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2FzX2V4cGFuZGVyLCBzYXNfZXhwYW5kZXJfbmV4dCwKKwkgICAgJmlvYy0+c2FzX2V4cGFuZGVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNhc19leHBhbmRlci0+cmVzcG9uZGluZykgeworCQkJc2FzX2V4cGFuZGVyLT5yZXNwb25kaW5nID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByaW50aygiXHRyZW1vdmluZyBleHBhbmRlcjogaGFuZGxlKDB4JTA0eCksICIKKwkJICAgICIgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgc2FzX2V4cGFuZGVyLT5oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19leHBhbmRlci0+c2FzX2FkZHJlc3MpOworCQlfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKGlvYywgc2FzX2V4cGFuZGVyLT5oYW5kbGUpOworCX0KK30KKworLyoqCisgKiBfZmlybXdhcmVfZXZlbnRfd29yayAtIGRlbGF5ZWQgdGFzayBmb3IgcHJvY2Vzc2luZyBmaXJtd2FyZSBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHdvcms6IGVxdWFsIHRvIHRoZSBmd19ldmVudF93b3JrIG9iamVjdAorICogQ29udGV4dDogdXNlci4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19maXJtd2FyZV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQgPSBjb250YWluZXJfb2Yod29yaywKKwkgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmssIHdvcmsud29yayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBmd19ldmVudC0+aW9jOworCisJLyogVGhpcyBpcyBpbnZva2VkIGJ5IGNhbGxpbmcgX3Njc2loX3F1ZXVlX3Jlc2NhbigpLiAqLworCWlmIChmd19ldmVudC0+ZXZlbnQgPT0gTVBUMlNBU19SRVNDQU5fQUZURVJfSE9TVF9SRVNFVCkgeworCQlfc2NzaWhfZndfZXZlbnRfZnJlZShpb2MsIGZ3X2V2ZW50KTsKKwkJX3Njc2loX3Nhc19ob3N0X3JlZnJlc2goaW9jLCAxKTsKKwkJX3Njc2loX3JlbW92ZV91bnJlc3BvbmRpbmdfZGV2aWNlcyhpb2MpOworCQlyZXR1cm47CisJfQorCisJLyogdGhlIHF1ZXVlIGlzIGJlaW5nIGZsdXNoZWQgc28gaWdub3JlIHRoaXMgZXZlbnQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+ZndfZXZlbnRzX29mZiB8fCBpb2MtPnJlbW92ZV9ob3N0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOworCQlfc2NzaWhfZndfZXZlbnRfZnJlZShpb2MsIGZ3X2V2ZW50KTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCQlfc2NzaWhfZndfZXZlbnRfcmVxdWV1ZShpb2MsIGZ3X2V2ZW50LCAxMDAwKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKGZ3X2V2ZW50LT5ldmVudCkgeworCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT0xPR1lfQ0hBTkdFX0xJU1Q6CisJCV9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAorCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEsIGZ3X2V2ZW50KTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19ESVNDT1ZFUlk6CisJCV9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAorCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkU6CisJCV9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgorCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCisJCSAgICBmd19ldmVudC0+VkZfSUQsIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6CisJCV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRToKKwkJX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCisJCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLOgorCQlfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCisJCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTOgorCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCisJCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMOgorCQlfc2NzaWhfdGFza19zZXRfZnVsbChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKKwkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJYnJlYWs7CisJfQorCV9zY3NpaF9md19ldmVudF9mcmVlKGlvYywgZndfZXZlbnQpOworfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtZXJlbHkgYWRkcyBhIG5ldyB3b3JrIHRhc2sgaW50byBpb2MtPmZpcm13YXJlX2V2ZW50X3RocmVhZC4KKyAqIFRoZSB0YXNrcyBhcmUgd29ya2VkIGZyb20gX2Zpcm13YXJlX2V2ZW50X3dvcmsgaW4gdXNlciBjb250ZXh0LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3sKKwlzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQ7CisJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGV2ZW50OworCisJLyogZXZlbnRzIHR1cm5lZCBvZmYgZHVlIHRvIGhvc3QgcmVzZXQgb3IgZHJpdmVyIHVubG9hZGluZyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5md19ldmVudHNfb2ZmIHx8IGlvYy0+cmVtb3ZlX2hvc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CisKKwltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJZXZlbnQgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwkvKiBoYW5kbGUgdGhlc2UgKi8KKwljYXNlIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkU6CisJeworCQlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmJhZW5fZGF0YSA9CisJCSAgICAoTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICopCisJCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YTsKKworCQlpZiAoYmFlbl9kYXRhLT5QcmltaXRpdmUgIT0KKwkJICAgIE1QSTJfRVZFTlRfUFJJTUlUSVZFX0FTWU5DSFJPTk9VU19FVkVOVCB8fAorCQkgICAgaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kpCisJCQlyZXR1cm47CisJCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVDoKKwkJX3Njc2loX2NoZWNrX3RvcG9fZGVsZXRlX2V2ZW50cyhpb2MsCisJCSAgICAoTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICopCisJCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YSk7CisJCWJyZWFrOworCisJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKKwljYXNlIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUzoKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0RJU0NPVkVSWToKKwljYXNlIE1QSTJfRVZFTlRfU0FTX0VOQ0xfREVWSUNFX1NUQVRVU19DSEFOR0U6CisJY2FzZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRToKKwljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKKwljYXNlIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVDoKKwljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OiAvKiBpZ25vcmUgdGhlIHJlc3QgKi8KKwkJcmV0dXJuOworCX0KKworCWZ3X2V2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ3X2V2ZW50X3dvcmspLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWZ3X2V2ZW50KSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWZ3X2V2ZW50LT5ldmVudF9kYXRhID0KKwkgICAga3phbGxvYyhtcGlfcmVwbHktPkV2ZW50RGF0YUxlbmd0aCo0LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWZ3X2V2ZW50LT5ldmVudF9kYXRhKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlrZnJlZShmd19ldmVudCk7CisJCXJldHVybjsKKwl9CisKKwltZW1jcHkoZndfZXZlbnQtPmV2ZW50X2RhdGEsIG1waV9yZXBseS0+RXZlbnREYXRhLAorCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YUxlbmd0aCo0KTsKKwlmd19ldmVudC0+aW9jID0gaW9jOworCWZ3X2V2ZW50LT5WRl9JRCA9IFZGX0lEOworCWZ3X2V2ZW50LT5ldmVudCA9IGV2ZW50OworCV9zY3NpaF9md19ldmVudF9hZGQoaW9jLCBmd19ldmVudCk7Cit9CisKKy8qIHNob3N0IHRlbXBsYXRlICovCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzY3NpaF9kcml2ZXJfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJCT0gIkZ1c2lvbiBNUFQgU0FTIEhvc3QiLAorCS5wcm9jX25hbWUJCQk9IE1QVDJTQVNfRFJJVkVSX05BTUUsCisJLnF1ZXVlY29tbWFuZAkJCT0gc2NzaWhfcWNtZCwKKwkudGFyZ2V0X2FsbG9jCQkJPSBzY3NpaF90YXJnZXRfYWxsb2MsCisJLnNsYXZlX2FsbG9jCQkJPSBzY3NpaF9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlCQk9IHNjc2loX3NsYXZlX2NvbmZpZ3VyZSwKKwkudGFyZ2V0X2Rlc3Ryb3kJCQk9IHNjc2loX3RhcmdldF9kZXN0cm95LAorCS5zbGF2ZV9kZXN0cm95CQkJPSBzY3NpaF9zbGF2ZV9kZXN0cm95LAorCS5jaGFuZ2VfcXVldWVfZGVwdGggCQk9IHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gc2NzaWhfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmVoX2Fib3J0X2hhbmRsZXIJCT0gc2NzaWhfYWJvcnQsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gc2NzaWhfZGV2X3Jlc2V0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gc2NzaWhfaG9zdF9yZXNldCwKKwkuYmlvc19wYXJhbQkJCT0gc2NzaWhfYmlvc19wYXJhbSwKKwkuY2FuX3F1ZXVlCQkJPSAxLAorCS50aGlzX2lkCQkJPSAtMSwKKwkuc2dfdGFibGVzaXplCQkJPSBNUFQyU0FTX1NHX0RFUFRILAorCS5tYXhfc2VjdG9ycwkJCT0gODE5MiwKKwkuY21kX3Blcl9sdW4JCQk9IDcsCisJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuc2hvc3RfYXR0cnMJCQk9IG1wdDJzYXNfaG9zdF9hdHRycywKKwkuc2Rldl9hdHRycwkJCT0gbXB0MnNhc19kZXZfYXR0cnMsCit9OworCisvKioKKyAqIF9zY3NpaF9leHBhbmRlcl9ub2RlX3JlbW92ZSAtIHJlbW92aW5nIGV4cGFuZGVyIGRldmljZSBmcm9tIGxpc3QuCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfZXhwYW5kZXI6IHRoZSBzYXNfZGV2aWNlIG9iamVjdAorICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnNhc19ub2RlX2xvY2suCisgKgorICogUmVtb3Zpbmcgb2JqZWN0IGFuZCBmcmVlaW5nIGFzc29jaWF0ZWQgbWVtb3J5IGZyb20gdGhlCisgKiBpb2MtPnNhc19leHBhbmRlcl9saXN0LgorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2V4cGFuZGVyX25vZGVfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXIpCit7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9zaWJsaW5nOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXNhc19leHBhbmRlcikKKwkJcmV0dXJuOworCisJLyogcmVtb3ZlIHNpYmxpbmcgcG9ydHMgYXR0YWNoZWQgdG8gdGhpcyBleHBhbmRlciAqLworIHJldHJ5X2RldmljZV9zZWFyY2g6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCisJICAgJnNhc19leHBhbmRlci0+c2FzX3BvcnRfbGlzdCwgcG9ydF9saXN0KSB7CisJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCQkgICAgU0FTX0VORF9ERVZJQ0UpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQkJc2FzX2RldmljZSA9CisJCQkgICAgbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCQkJICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghc2FzX2RldmljZSkKKwkJCQljb250aW51ZTsKKwkJCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgc2FzX2RldmljZS0+aGFuZGxlKTsKKwkJCWdvdG8gcmV0cnlfZGV2aWNlX3NlYXJjaDsKKwkJfQorCX0KKworIHJldHJ5X2V4cGFuZGVyX3NlYXJjaDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wdDJzYXNfcG9ydCwKKwkgICAmc2FzX2V4cGFuZGVyLT5zYXNfcG9ydF9saXN0LCBwb3J0X2xpc3QpIHsKKworCQlpZiAobXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0KKwkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX0VER0VfRVhQQU5ERVIgfHwKKwkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19GQU5PVVRfRVhQQU5ERVIpIHsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCQkJZXhwYW5kZXJfc2libGluZyA9CisJCQkgICAgbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKAorCQkJICAgIGlvYywgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCQlpZiAoIWV4cGFuZGVyX3NpYmxpbmcpCisJCQkJY29udGludWU7CisJCQlfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKGlvYywgZXhwYW5kZXJfc2libGluZy0+aGFuZGxlKTsKKwkJCWdvdG8gcmV0cnlfZXhwYW5kZXJfc2VhcmNoOworCQl9CisJfQorCisJbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoaW9jLCBzYXNfZXhwYW5kZXItPnNhc19hZGRyZXNzLAorCSAgICBzYXNfZXhwYW5kZXItPnBhcmVudF9oYW5kbGUpOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImV4cGFuZGVyX3JlbW92ZTogaGFuZGxlIgorCSAgICIoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAorCSAgICBzYXNfZXhwYW5kZXItPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkgICAgc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyk7CisKKwlsaXN0X2RlbCgmc2FzX2V4cGFuZGVyLT5saXN0KTsKKwlrZnJlZShzYXNfZXhwYW5kZXItPnBoeSk7CisJa2ZyZWUoc2FzX2V4cGFuZGVyKTsKK30KKworLyoqCisgKiBzY3NpaF9yZW1vdmUgLSBkZXRhY2ggYW5kIHJlbW92ZSBhZGQgaG9zdAorICogQHBkZXY6IFBDSSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAorc2NzaWhfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCXN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJc3RydWN0IF9zYXNfbm9kZSAqZXhwYW5kZXJfc2libGluZzsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd3E7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlvYy0+cmVtb3ZlX2hvc3QgPSAxOworCV9zY3NpaF9md19ldmVudF9vZmYoaW9jKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwl3cSA9IGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkOworCWlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAod3EpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHdxKTsKKworCS8qIGZyZWUgcG9ydHMgYXR0YWNoZWQgdG8gdGhlIHNhc19ob3N0ICovCisgcmV0cnlfYWdhaW46CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCisJICAgJmlvYy0+c2FzX2hiYS5zYXNfcG9ydF9saXN0LCBwb3J0X2xpc3QpIHsKKwkJaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJCSAgICBTQVNfRU5EX0RFVklDRSkgeworCQkJc2FzX2RldmljZSA9CisJCQkgICAgbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCQkJICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCQkJaWYgKHNhc19kZXZpY2UpIHsKKwkJCQlfc2NzaWhfcmVtb3ZlX2RldmljZShpb2MsIHNhc19kZXZpY2UtPmhhbmRsZSk7CisJCQkJZ290byByZXRyeV9hZ2FpbjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWV4cGFuZGVyX3NpYmxpbmcgPQorCQkJICAgIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCQkJaWYgKGV4cGFuZGVyX3NpYmxpbmcpIHsKKwkJCQlfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKGlvYywKKwkJCQkgICAgZXhwYW5kZXJfc2libGluZy0+aGFuZGxlKTsKKwkJCQlnb3RvIHJldHJ5X2FnYWluOworCQkJfQorCQl9CisJfQorCisJLyogZnJlZSBwaHlzIGF0dGFjaGVkIHRvIHRoZSBzYXNfaG9zdCAqLworCWlmIChpb2MtPnNhc19oYmEubnVtX3BoeXMpIHsKKwkJa2ZyZWUoaW9jLT5zYXNfaGJhLnBoeSk7CisJCWlvYy0+c2FzX2hiYS5waHkgPSBOVUxMOworCQlpb2MtPnNhc19oYmEubnVtX3BoeXMgPSAwOworCX0KKworCXNhc19yZW1vdmVfaG9zdChzaG9zdCk7CisJbXB0MnNhc19iYXNlX2RldGFjaChpb2MpOworCWxpc3RfZGVsKCZpb2MtPmxpc3QpOworCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOworCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworfQorCisvKioKKyAqIF9zY3NpaF9wcm9iZV9ib290X2RldmljZXMgLSByZXBvcnRzIDFzdCBkZXZpY2UKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIElmIHNwZWNpZmllZCBpbiBiaW9zIHBhZ2UgMiwgdGhpcyByb3V0aW5lIHJlcG9ydHMgdGhlIDFzdAorICogZGV2aWNlIHNjc2ktbWwgb3Igc2FzIHRyYW5zcG9ydCBmb3IgcGVyc2lzdGVudCBib290IGRldmljZQorICogcHVycG9zZXMuICBQbGVhc2UgcmVmZXIgdG8gZnVuY3Rpb24gX3Njc2loX2RldGVybWluZV9ib290X2RldmljZSgpCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcHJvYmVfYm9vdF9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwl1OCBpc19yYWlkOworCXZvaWQgKmRldmljZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdTE2IGhhbmRsZSwgcGFyZW50X2hhbmRsZTsKKwl1NjQgc2FzX2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmM7CisKKwlkZXZpY2UgPSBOVUxMOworCWlmIChpb2MtPnJlcV9ib290X2RldmljZS5kZXZpY2UpIHsKKwkJZGV2aWNlID0gIGlvYy0+cmVxX2Jvb3RfZGV2aWNlLmRldmljZTsKKwkJaXNfcmFpZCA9IGlvYy0+cmVxX2Jvb3RfZGV2aWNlLmlzX3JhaWQ7CisJfSBlbHNlIGlmIChpb2MtPnJlcV9hbHRfYm9vdF9kZXZpY2UuZGV2aWNlKSB7CisJCWRldmljZSA9ICBpb2MtPnJlcV9hbHRfYm9vdF9kZXZpY2UuZGV2aWNlOworCQlpc19yYWlkID0gaW9jLT5yZXFfYWx0X2Jvb3RfZGV2aWNlLmlzX3JhaWQ7CisJfSBlbHNlIGlmIChpb2MtPmN1cnJlbnRfYm9vdF9kZXZpY2UuZGV2aWNlKSB7CisJCWRldmljZSA9ICBpb2MtPmN1cnJlbnRfYm9vdF9kZXZpY2UuZGV2aWNlOworCQlpc19yYWlkID0gaW9jLT5jdXJyZW50X2Jvb3RfZGV2aWNlLmlzX3JhaWQ7CisJfQorCisJaWYgKCFkZXZpY2UpCisJCXJldHVybjsKKworCWlmIChpc19yYWlkKSB7CisJCXJhaWRfZGV2aWNlID0gZGV2aWNlOworCQlyYyA9IHNjc2lfYWRkX2RldmljZShpb2MtPnNob3N0LCBSQUlEX0NIQU5ORUwsCisJCSAgICByYWlkX2RldmljZS0+aWQsIDApOworCQlpZiAocmMpCisJCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOworCX0gZWxzZSB7CisJCXNhc19kZXZpY2UgPSBkZXZpY2U7CisJCWhhbmRsZSA9IHNhc19kZXZpY2UtPmhhbmRsZTsKKwkJcGFyZW50X2hhbmRsZSA9IHNhc19kZXZpY2UtPnBhcmVudF9oYW5kbGU7CisJCXNhc19hZGRyZXNzID0gc2FzX2RldmljZS0+c2FzX2FkZHJlc3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlsaXN0X21vdmVfdGFpbCgmc2FzX2RldmljZS0+bGlzdCwgJmlvYy0+c2FzX2RldmljZV9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChpb2MsIHNhc19kZXZpY2UtPmhhbmRsZSwKKwkJICAgIHNhc19kZXZpY2UtPnBhcmVudF9oYW5kbGUpKSB7CisJCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwkJfSBlbHNlIGlmICghc2FzX2RldmljZS0+c3RhcmdldCkgeworCQkJbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoaW9jLCBzYXNfYWRkcmVzcywKKwkJCSAgICBwYXJlbnRfaGFuZGxlKTsKKwkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOworCQl9CisJfQorfQorCisvKioKKyAqIF9zY3NpaF9wcm9iZV9yYWlkIC0gcmVwb3J0aW5nIHJhaWQgdm9sdW1lcyB0byBzY3NpLW1sCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBDYWxsZWQgZHVyaW5nIGluaXRpYWwgbG9hZGluZyBvZiB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Byb2JlX3JhaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqcmFpZF9uZXh0OworCWludCByYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyYWlkX2RldmljZSwgcmFpZF9uZXh0LAorCSAgICAmaW9jLT5yYWlkX2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkKKwkJCWNvbnRpbnVlOworCQlyYyA9IHNjc2lfYWRkX2RldmljZShpb2MtPnNob3N0LCBSQUlEX0NIQU5ORUwsCisJCSAgICByYWlkX2RldmljZS0+aWQsIDApOworCQlpZiAocmMpCisJCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOworCX0KK30KKworLyoqCisgKiBfc2NzaWhfcHJvYmVfc2FzIC0gcmVwb3J0aW5nIHJhaWQgdm9sdW1lcyB0byBzYXMgdHJhbnNwb3J0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBDYWxsZWQgZHVyaW5nIGluaXRpYWwgbG9hZGluZyBvZiB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3Byb2JlX3NhcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGUsIHBhcmVudF9oYW5kbGU7CisJdTY0IHNhc19hZGRyZXNzOworCisJLyogU0FTIERldmljZSBMaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNhc19kZXZpY2UsIG5leHQsICZpb2MtPnNhc19kZXZpY2VfaW5pdF9saXN0LAorCSAgICBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlsaXN0X21vdmVfdGFpbCgmc2FzX2RldmljZS0+bGlzdCwgJmlvYy0+c2FzX2RldmljZV9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCQloYW5kbGUgPSBzYXNfZGV2aWNlLT5oYW5kbGU7CisJCXBhcmVudF9oYW5kbGUgPSBzYXNfZGV2aWNlLT5wYXJlbnRfaGFuZGxlOworCQlzYXNfYWRkcmVzcyA9IHNhc19kZXZpY2UtPnNhc19hZGRyZXNzOworCQlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgaGFuZGxlLCBwYXJlbnRfaGFuZGxlKSkgeworCQkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CisJCX0gZWxzZSBpZiAoIXNhc19kZXZpY2UtPnN0YXJnZXQpIHsKKwkJCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywgc2FzX2FkZHJlc3MsCisJCQkgICAgcGFyZW50X2hhbmRsZSk7CisJCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBfc2NzaWhfcHJvYmVfZGV2aWNlcyAtIHByb2JpbmcgZm9yIGRldmljZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIENhbGxlZCBkdXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfcHJvYmVfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJdTE2IHZvbHVtZV9tYXBwaW5nX2ZsYWdzID0KKwkgICAgbGUxNl90b19jcHUoaW9jLT5pb2NfcGc4LklSVm9sdW1lTWFwcGluZ0ZsYWdzKSAmCisJICAgIE1QSTJfSU9DUEFHRThfSVJGTEFHU19NQVNLX1ZPTFVNRV9NQVBQSU5HX01PREU7CisKKwlpZiAoIShpb2MtPmZhY3RzLlByb3RvY29sRmxhZ3MgJiBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NDU0lfSU5JVElBVE9SKSkKKwkJcmV0dXJuOyAgLyogcmV0dXJuIHdoZW4gSU9DIGRvZXNuJ3Qgc3VwcG9ydCBpbml0aWF0b3IgbW9kZSAqLworCisJX3Njc2loX3Byb2JlX2Jvb3RfZGV2aWNlcyhpb2MpOworCisJaWYgKGlvYy0+aXJfZmlybXdhcmUpIHsKKwkJaWYgKCh2b2x1bWVfbWFwcGluZ19mbGFncyAmCisJCSAgICAgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX0hJR0hfVk9MVU1FX01BUFBJTkcpKSB7CisJCQlfc2NzaWhfcHJvYmVfc2FzKGlvYyk7CisJCQlfc2NzaWhfcHJvYmVfcmFpZChpb2MpOworCQl9IGVsc2UgeworCQkJX3Njc2loX3Byb2JlX3JhaWQoaW9jKTsKKwkJCV9zY3NpaF9wcm9iZV9zYXMoaW9jKTsKKwkJfQorCX0gZWxzZQorCQlfc2NzaWhfcHJvYmVfc2FzKGlvYyk7Cit9CisKKy8qKgorICogc2NzaWhfcHJvYmUgLSBhdHRhY2ggYW5kIGFkZCBzY3NpIGhvc3QKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHN0cnVjdAorICogQGlkOiBwY2kgZGV2aWNlIGlkCisgKgorICogUmV0dXJucyAwIHN1Y2Nlc3MsIGFueXRoaW5nIGVsc2UgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3Njc2loX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCisJc2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnNjc2loX2RyaXZlcl90ZW1wbGF0ZSwKKwkgICAgc2l6ZW9mKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIpKTsKKwlpZiAoIXNob3N0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluaXQgbG9jYWwgcGFyYW1zICovCisJaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJbWVtc2V0KGlvYywgMCwgc2l6ZW9mKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIpKTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZpb2MtPmxpc3QsICZtcHQyc2FzX2lvY19saXN0KTsKKwlpb2MtPnNob3N0ID0gc2hvc3Q7CisJaW9jLT5pZCA9IG1wdF9pZHMrKzsKKwlzcHJpbnRmKGlvYy0+bmFtZSwgIiVzJWQiLCBNUFQyU0FTX0RSSVZFUl9OQU1FLCBpb2MtPmlkKTsKKwlpb2MtPnBkZXYgPSBwZGV2OworCWlvYy0+c2NzaV9pb19jYl9pZHggPSBzY3NpX2lvX2NiX2lkeDsKKwlpb2MtPnRtX2NiX2lkeCA9IHRtX2NiX2lkeDsKKwlpb2MtPmN0bF9jYl9pZHggPSBjdGxfY2JfaWR4OworCWlvYy0+YmFzZV9jYl9pZHggPSBiYXNlX2NiX2lkeDsKKwlpb2MtPnRyYW5zcG9ydF9jYl9pZHggPSB0cmFuc3BvcnRfY2JfaWR4OworCWlvYy0+Y29uZmlnX2NiX2lkeCA9IGNvbmZpZ19jYl9pZHg7CisJaW9jLT5sb2dnaW5nX2xldmVsID0gbG9nZ2luZ19sZXZlbDsKKwkvKiBtaXNjIHNlbWFwaG9yZXMgYW5kIHNwaW4gbG9ja3MgKi8KKwlzcGluX2xvY2tfaW5pdCgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlvYy0+c2NzaV9sb29rdXBfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlvYy0+c2FzX2RldmljZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaW9jLT5zYXNfbm9kZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaW9jLT5md19ldmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaW9jLT5yYWlkX2RldmljZV9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZpb2MtPnNhc19kZXZpY2VfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2RldmljZV9pbml0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPnNhc19leHBhbmRlcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5md19ldmVudF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5yYWlkX2RldmljZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5zYXNfaGJhLnNhc19wb3J0X2xpc3QpOworCisJLyogaW5pdCBzaG9zdCBwYXJhbWV0ZXJzICovCisJc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CisJc2hvc3QtPm1heF9sdW4gPSBtYXhfbHVuOworCXNob3N0LT50cmFuc3BvcnR0ID0gbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGU7CisJc2hvc3QtPnVuaXF1ZV9pZCA9IGlvYy0+aWQ7CisKKwlpZiAoKHNjc2lfYWRkX2hvc3Qoc2hvc3QsICZwZGV2LT5kZXYpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJbGlzdF9kZWwoJmlvYy0+bGlzdCk7CisJCWdvdG8gb3V0X2FkZF9zaG9zdF9mYWlsOworCX0KKworCS8qIGV2ZW50IHRocmVhZCAqLworCXNucHJpbnRmKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSwgc2l6ZW9mKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSksCisJICAgICJmd19ldmVudCVkIiwgaW9jLT5pZCk7CisJaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkgICAgaW9jLT5maXJtd2FyZV9ldmVudF9uYW1lKTsKKwlpZiAoIWlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dF90aHJlYWRfZmFpbDsKKwl9CisKKwlpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlID0gMTsKKwlpZiAoKG1wdDJzYXNfYmFzZV9hdHRhY2goaW9jKSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2F0dGFjaF9mYWlsOworCX0KKworCWlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUgPSAwOworCV9zY3NpaF9wcm9iZV9kZXZpY2VzKGlvYyk7CisJcmV0dXJuIDA7CisKKyBvdXRfYXR0YWNoX2ZhaWw6CisJZGVzdHJveV93b3JrcXVldWUoaW9jLT5maXJtd2FyZV9ldmVudF90aHJlYWQpOworIG91dF90aHJlYWRfZmFpbDoKKwlsaXN0X2RlbCgmaW9jLT5saXN0KTsKKwlzY3NpX3JlbW92ZV9ob3N0KHNob3N0KTsKKyBvdXRfYWRkX3Nob3N0X2ZhaWw6CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKy8qKgorICogc2NzaWhfc3VzcGVuZCAtIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCBtYWluIGVudHJ5IHBvaW50CisgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3QKKyAqIEBzdGF0ZTogUE0gc3RhdGUgY2hhbmdlIHRvICh1c3VhbGx5IFBDSV9EMykKKyAqCisgKiBSZXR1cm5zIDAgc3VjY2VzcywgYW55dGhpbmcgZWxzZSBlcnJvci4KKyAqLworc3RhdGljIGludAorc2NzaWhfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2hvc3QpOworCXUzMiBkZXZpY2Vfc3RhdGU7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCWRldmljZV9zdGF0ZSA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwZGV2PTB4JXAsIHNsb3Q9JXMsIGVudGVyaW5nICIKKwkgICAgIm9wZXJhdGluZyBzdGF0ZSBbRCVkXVxuIiwgaW9jLT5uYW1lLCBwZGV2LAorCSAgICBwY2lfbmFtZShwZGV2KSwgZGV2aWNlX3N0YXRlKTsKKworCW1wdDJzYXNfYmFzZV9mcmVlX3Jlc291cmNlcyhpb2MpOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIGRldmljZV9zdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2NzaWhfcmVzdW1lIC0gcG93ZXIgbWFuYWdlbWVudCByZXN1bWUgbWFpbiBlbnRyeSBwb2ludAorICogQHBkZXY6IFBDSSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJucyAwIHN1Y2Nlc3MsIGFueXRoaW5nIGVsc2UgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3Njc2loX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKKwl1MzIgZGV2aWNlX3N0YXRlID0gcGRldi0+Y3VycmVudF9zdGF0ZTsKKwlpbnQgcjsKKworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwZGV2PTB4JXAsIHNsb3Q9JXMsIHByZXZpb3VzICIKKwkgICAgIm9wZXJhdGluZyBzdGF0ZSBbRCVkXVxuIiwgaW9jLT5uYW1lLCBwZGV2LAorCSAgICBwY2lfbmFtZShwZGV2KSwgZGV2aWNlX3N0YXRlKTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlpb2MtPnBkZXYgPSBwZGV2OworCXIgPSBtcHQyc2FzX2Jhc2VfbWFwX3Jlc291cmNlcyhpb2MpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCW1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsIFNPRlRfUkVTRVQpOworCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhzaG9zdCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNjc2loX2RyaXZlciA9IHsKKwkubmFtZQkJPSBNUFQyU0FTX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZQk9IHNjc2loX3BjaV90YWJsZSwKKwkucHJvYmUJCT0gc2NzaWhfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzY3NpaF9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gc2NzaWhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNjc2loX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworCisvKioKKyAqIHNjc2loX2luaXQgLSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIGRyaXZlci4KKyAqCisgKiBSZXR1cm5zIDAgc3VjY2VzcywgYW55dGhpbmcgZWxzZSBlcnJvci4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3Njc2loX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwltcHRfaWRzID0gMDsKKwlwcmludGsoS0VSTl9JTkZPICIlcyB2ZXJzaW9uICVzIGxvYWRlZFxuIiwgTVBUMlNBU19EUklWRVJfTkFNRSwKKwkgICAgTVBUMlNBU19EUklWRVJfVkVSU0lPTik7CisKKwltcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSA9CisJICAgIHNhc19hdHRhY2hfdHJhbnNwb3J0KCZtcHQyc2FzX3RyYW5zcG9ydF9mdW5jdGlvbnMpOworCWlmICghbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpCisJCXJldHVybiAtRU5PREVWOworCisJbXB0MnNhc19iYXNlX2luaXRpYWxpemVfY2FsbGJhY2tfaGFuZGxlcigpOworCisJIC8qIHF1ZXVlY29tbWFuZCBjYWxsYmFjayBoYW5kZXIgKi8KKwlzY3NpX2lvX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKHNjc2loX2lvX2RvbmUpOworCisJLyogdGFzayBtYW5hZ21lbnQgY2FsbGJhY2sgaGFuZGxlciAqLworCXRtX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKHNjc2loX3RtX2RvbmUpOworCisJLyogYmFzZSBpbnRlcm5hbCBjb21tYW5kcyBjYWxsYmFjayBoYW5kbGVyICovCisJYmFzZV9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihtcHQyc2FzX2Jhc2VfZG9uZSk7CisKKwkvKiB0cmFuc3BvcnQgaW50ZXJuYWwgY29tbWFuZHMgY2FsbGJhY2sgaGFuZGxlciAqLworCXRyYW5zcG9ydF9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgbXB0MnNhc190cmFuc3BvcnRfZG9uZSk7CisKKwkvKiBjb25maWd1cmF0aW9uIHBhZ2UgQVBJIGludGVybmFsIGNvbW1hbmRzIGNhbGxiYWNrIGhhbmRsZXIgKi8KKwljb25maWdfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoCisJICAgIG1wdDJzYXNfY29uZmlnX2RvbmUpOworCisJLyogY3RsIG1vZHVsZSBjYWxsYmFjayBoYW5kbGVyICovCisJY3RsX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKG1wdDJzYXNfY3RsX2RvbmUpOworCisJbXB0MnNhc19jdGxfaW5pdCgpOworCisJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOworCWlmIChlcnJvcikKKwkJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBzY3NpaF9leGl0IC0gZXhpdCBwb2ludCBmb3IgdGhpcyBkcml2ZXIgKHdoZW4gaXQgaXMgYSBtb2R1bGUpLgorICoKKyAqIFJldHVybnMgMCBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIGVycm9yLgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQKK3Njc2loX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJtcHQyc2FzIHZlcnNpb24gJXMgdW5sb2FkaW5nXG4iLAorCSAgICBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OKTsKKworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NzaWhfZHJpdmVyKTsKKworCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihzY3NpX2lvX2NiX2lkeCk7CisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV9jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoYmFzZV9jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodHJhbnNwb3J0X2NiX2lkeCk7CisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihjb25maWdfY2JfaWR4KTsKKwltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGN0bF9jYl9pZHgpOworCisJbXB0MnNhc19jdGxfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChzY3NpaF9pbml0KTsKK21vZHVsZV9leGl0KHNjc2loX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzZGMwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxMjExIEBACisvKgorICogU0FTIFRyYW5zcG9ydCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml90cmFuc3BvcnQuYworICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgorICogQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQKKyAqIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCisgKiBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCisgKiBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKKyAqIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKKyAqIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisgKiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorICogTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgKiBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KKworI2luY2x1ZGUgIm1wdDJzYXNfYmFzZS5oIgorLyoqCisgKiBfdHJhbnNwb3J0X3Nhc19ub2RlX2ZpbmRfYnlfaGFuZGxlIC0gc2FzIG5vZGUgc2VhcmNoCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGV4cGFuZGVyIG9yIGhiYSBoYW5kbGUgKGFzc2lnbmVkIGJ5IGZpcm13YXJlKQorICogQ29udGV4dDogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgYWNxdWlyZSBpb2MtPnNhc19ub2RlX2xvY2suCisgKgorICogU2VhcmNoIGZvciBlaXRoZXIgaGJhIHBoeXMgb3IgZXhwYW5kZXIgZGV2aWNlIGJhc2VkIG9uIGhhbmRsZSwgdGhlbiByZXR1cm5zCisgKiB0aGUgc2FzX25vZGUgb2JqZWN0LgorICovCitzdGF0aWMgc3RydWN0IF9zYXNfbm9kZSAqCitfdHJhbnNwb3J0X3Nhc19ub2RlX2ZpbmRfYnlfaGFuZGxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXM7IGkrKykKKwkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0uaGFuZGxlID09IGhhbmRsZSkKKwkJCXJldHVybiAmaW9jLT5zYXNfaGJhOworCisJcmV0dXJuIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworfQorCisvKioKKyAqIF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlIC0KKyAqIEBsaW5rX3JhdGU6IGxpbmsgcmF0ZSByZXR1cm5lZCBmcm9tIG1wdCBmaXJtd2FyZQorICoKKyAqIENvbnZlcnQgbGlua19yYXRlIGZyb20gbXBpIGZ1c2lvbiBpbnRvIHNhc190cmFuc3BvcnQgZm9ybS4KKyAqLworc3RhdGljIGVudW0gc2FzX2xpbmtyYXRlCitfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSh1OCBsaW5rX3JhdGUpCit7CisJZW51bSBzYXNfbGlua3JhdGUgcmM7CisKKwlzd2l0Y2ggKGxpbmtfcmF0ZSkgeworCWNhc2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzU6CisJCXJjID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzNfMDoKKwkJcmMgPSBTQVNfTElOS19SQVRFXzNfMF9HQlBTOworCQlicmVhazsKKwljYXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfNl8wOgorCQlyYyA9IFNBU19MSU5LX1JBVEVfNl8wX0dCUFM7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9QSFlfRElTQUJMRUQ6CisJCXJjID0gU0FTX1BIWV9ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX05FR09USUFUSU9OX0ZBSUxFRDoKKwkJcmMgPSBTQVNfTElOS19SQVRFX0ZBSUxFRDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1BPUlRfU0VMRUNUT1I6CisJCXJjID0gU0FTX1NBVEFfUE9SVF9TRUxFQ1RPUjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1NNUF9SRVNFVF9JTl9QUk9HUkVTUzoKKwkJcmMgPSBTQVNfUEhZX1JFU0VUX0lOX1BST0dSRVNTOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9TQVRBX09PQl9DT01QTEVURToKKwljYXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfVU5LTk9XTl9MSU5LX1JBVEU6CisJCXJjID0gU0FTX0xJTktfUkFURV9VTktOT1dOOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF90cmFuc3BvcnRfc2V0X2lkZW50aWZ5IC0gc2V0IGlkZW50aWZ5IGZvciBwaHlzIGFuZCBlbmQgZGV2aWNlcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBAaWRlbnRpZnk6IHNhcyBpZGVudGlmeSBpbmZvCisgKgorICogUG9wdWxhdGVzIHNhcyBpZGVudGlmeSBpbmZvLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK190cmFuc3BvcnRfc2V0X2lkZW50aWZ5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwKKyAgICBzdHJ1Y3Qgc2FzX2lkZW50aWZ5ICppZGVudGlmeSkKK3sKKwlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTMyIGRldmljZV9pbmZvOworCXUzMiBpb2Nfc3RhdHVzOworCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmc2FzX2RldmljZV9wZzAsCisJICAgIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLCBoYW5kbGUpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJoYW5kbGUoMHglMDR4KSwgaW9jX3N0YXR1cygweCUwNHgpIgorCQkgICAgIlxuZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsIGlvY19zdGF0dXMsCisJCSAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1zZXQoaWRlbnRpZnksIDAsIHNpemVvZihpZGVudGlmeSkpOworCWRldmljZV9pbmZvID0gbGUzMl90b19jcHUoc2FzX2RldmljZV9wZzAuRGV2aWNlSW5mbyk7CisKKwkvKiBzYXNfYWRkcmVzcyAqLworCWlkZW50aWZ5LT5zYXNfYWRkcmVzcyA9IGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlNBU0FkZHJlc3MpOworCisJLyogZGV2aWNlX3R5cGUgKi8KKwlzd2l0Y2ggKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fTUFTS19ERVZJQ0VfVFlQRSkgeworCWNhc2UgTVBJMl9TQVNfREVWSUNFX0lORk9fTk9fREVWSUNFOgorCQlpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPSBTQVNfUEhZX1VOVVNFRDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFOgorCQlpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPSBTQVNfRU5EX0RFVklDRTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NBU19ERVZJQ0VfSU5GT19FREdFX0VYUEFOREVSOgorCQlpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQVNfREVWSUNFX0lORk9fRkFOT1VUX0VYUEFOREVSOgorCQlpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRTsKKwkJYnJlYWs7CisJfQorCisJLyogaW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzICovCisJaWYgKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU1NQX0lOSVRJQVRPUikKKwkJaWRlbnRpZnktPmluaXRpYXRvcl9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU1NQOworCWlmIChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NUUF9JTklUSUFUT1IpCisJCWlkZW50aWZ5LT5pbml0aWF0b3JfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NUUDsKKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TTVBfSU5JVElBVE9SKQorCQlpZGVudGlmeS0+aW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TTVA7CisJaWYgKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU0FUQV9IT1NUKQorCQlpZGVudGlmeS0+aW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TQVRBOworCisJLyogdGFyZ2V0X3BvcnRfcHJvdG9jb2xzICovCisJaWYgKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkKKwkJaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyB8PSBTQVNfUFJPVE9DT0xfU1NQOworCWlmIChkZXZpY2VfaW5mbyAmIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NUUF9UQVJHRVQpCisJCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NUUDsKKwlpZiAoZGV2aWNlX2luZm8gJiBNUEkyX1NBU19ERVZJQ0VfSU5GT19TTVBfVEFSR0VUKQorCQlpZGVudGlmeS0+dGFyZ2V0X3BvcnRfcHJvdG9jb2xzIHw9IFNBU19QUk9UT0NPTF9TTVA7CisJaWYgKGRldmljZV9pbmZvICYgTVBJMl9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpCisJCWlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgfD0gU0FTX1BST1RPQ09MX1NBVEE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtcHQyc2FzX3RyYW5zcG9ydF9kb25lIC0gIGludGVybmFsIHRyYW5zcG9ydCBsYXllciBjYWxsYmFjayBoYW5kbGVyLgorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqCisgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gc2VuZGluZyBpbnRlcm5hbCBnZW5lcmF0ZWQgdHJhbnNwb3J0IGNtZHMuCisgKiBUaGUgY2FsbGJhY2sgaW5kZXggcGFzc2VkIGlzIGBpb2MtPnRyYW5zcG9ydF9jYl9pZHhgCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCisgICAgdTMyIHJlcGx5KQoreworCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OworCisJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKKwkJcmV0dXJuOworCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnNtaWQgIT0gc21pZCkKKwkJcmV0dXJuOworCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOworCWlmIChtcGlfcmVwbHkpIHsKKwkJbWVtY3B5KGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHksIG1waV9yZXBseSwKKwkJICAgIG1waV9yZXBseS0+TXNnTGVuZ3RoKjQpOworCQlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVBMWV9WQUxJRDsKKwl9CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CisJY29tcGxldGUoJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7Cit9CisKKy8qIHJlcG9ydCBtYW51ZmFjdHVyZSByZXF1ZXN0IHN0cnVjdHVyZSAqLworc3RydWN0IHJlcF9tYW51X3JlcXVlc3R7CisJdTggc21wX2ZyYW1lX3R5cGU7CisJdTggZnVuY3Rpb247CisJdTggcmVzZXJ2ZWQ7CisJdTggcmVxdWVzdF9sZW5ndGg7Cit9OworCisvKiByZXBvcnQgbWFudWZhY3R1cmUgcmVwbHkgc3RydWN0dXJlICovCitzdHJ1Y3QgcmVwX21hbnVfcmVwbHl7CisJdTggc21wX2ZyYW1lX3R5cGU7IC8qIDB4NDEgKi8KKwl1OCBmdW5jdGlvbjsgLyogMHgwMSAqLworCXU4IGZ1bmN0aW9uX3Jlc3VsdDsKKwl1OCByZXNwb25zZV9sZW5ndGg7CisJdTE2IGV4cGFuZGVyX2NoYW5nZV9jb3VudDsKKwl1OCByZXNlcnZlZDBbMl07CisJdTggc2FzX2Zvcm1hdDoxOworCXU4IHJlc2VydmVkMTo3OworCXU4IHJlc2VydmVkMlszXTsKKwl1OCB2ZW5kb3JfaWRbU0FTX0VYUEFOREVSX1ZFTkRPUl9JRF9MRU5dOworCXU4IHByb2R1Y3RfaWRbU0FTX0VYUEFOREVSX1BST0RVQ1RfSURfTEVOXTsKKwl1OCBwcm9kdWN0X3JldltTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOXTsKKwl1OCBjb21wb25lbnRfdmVuZG9yX2lkW1NBU19FWFBBTkRFUl9DT01QT05FTlRfVkVORE9SX0lEX0xFTl07CisJdTE2IGNvbXBvbmVudF9pZDsKKwl1OCBjb21wb25lbnRfcmV2aXNpb25faWQ7CisJdTggcmVzZXJ2ZWQzOworCXU4IHZlbmRvcl9zcGVjaWZpY1s4XTsKK307CisKKy8qKgorICogdHJhbnNwb3J0X2V4cGFuZGVyX3JlcG9ydF9tYW51ZmFjdHVyZSAtIG9idGFpbiBTTVAgcmVwb3J0X21hbnVmYWN0dXJlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogZXhwYW5kZXIgc2FzIGFkZHJlc3MKKyAqIEBlZGV2OiB0aGUgc2FzX2V4cGFuZGVyX2RldmljZSBvYmplY3QKKyAqCisgKiBGaWxscyBpbiB0aGUgc2FzX2V4cGFuZGVyX2RldmljZSBvYmplY3Qgd2hlbiBTTVAgcG9ydCBpcyBjcmVhdGVkLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK3RyYW5zcG9ydF9leHBhbmRlcl9yZXBvcnRfbWFudWZhY3R1cmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHU2NCBzYXNfYWRkcmVzcywgc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKmVkZXYpCit7CisJTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlNcGkyU21wUGFzc3Rocm91Z2hSZXBseV90ICptcGlfcmVwbHk7CisJc3RydWN0IHJlcF9tYW51X3JlcGx5ICptYW51ZmFjdHVyZV9yZXBseTsKKwlzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCAqbWFudWZhY3R1cmVfcmVxdWVzdDsKKwlpbnQgcmM7CisJdTE2IHNtaWQ7CisJdTMyIGlvY19zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXZvaWQgKnBzZ2U7CisJdTMyIHNnbF9mbGFnczsKKwl1OCBpc3N1ZV9yZXNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpkYXRhX291dCA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX291dF9kbWE7CisJdTMyIHN6OworCXU2NCAqc2FzX2FkZHJlc3NfbGU7CisJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCW11dGV4X2xvY2soJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOworCisJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0cmFuc3BvcnRfY21kcyBpbiB1c2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCisJd2FpdF9zdGF0ZV9jb3VudCA9IDA7CisJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDEpOworCXdoaWxlIChpb2Nfc3RhdGUgIT0gTVBJMl9JT0NfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJaWYgKHdhaXRfc3RhdGVfY291bnQrKyA9PSAxMCkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVAorCQkJICAgICIlczogZmFpbGVkIGR1ZSB0byBpb2Mgbm90IG9wZXJhdGlvbmFsXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3NsZWVwKDEpOworCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogd2FpdGluZyBmb3IgIgorCQkgICAgIm9wZXJhdGlvbmFsIHN0YXRlKGNvdW50PSVkKVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18sIHdhaXRfc3RhdGVfY291bnQpOworCX0KKwlpZiAod2FpdF9zdGF0ZV9jb3VudCkKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBpb2MgaXMgb3BlcmF0aW9uYWxcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnRyYW5zcG9ydF9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IDA7CisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCWlvYy0+dHJhbnNwb3J0X2NtZHMuc21pZCA9IHNtaWQ7CisKKwlzeiA9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcGx5KTsKKwlkYXRhX291dCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgc3osICZkYXRhX291dF9kbWEpOworCisJaWYgKCFkYXRhX291dCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLAorCQkgICAgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5PTUVNOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCWdvdG8gb3V0OworCX0KKworCW1hbnVmYWN0dXJlX3JlcXVlc3QgPSBkYXRhX291dDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5zbXBfZnJhbWVfdHlwZSA9IDB4NDA7CisJbWFudWZhY3R1cmVfcmVxdWVzdC0+ZnVuY3Rpb24gPSAxOworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnJlc2VydmVkID0gMDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5yZXF1ZXN0X2xlbmd0aCA9IDA7CisKKwltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDsKKwltcGlfcmVxdWVzdC0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwlzYXNfYWRkcmVzc19sZSA9ICh1NjQgKikmbXBpX3JlcXVlc3QtPlNBU0FkZHJlc3M7CisJKnNhc19hZGRyZXNzX2xlID0gY3B1X3RvX2xlNjQoc2FzX2FkZHJlc3MpOworCW1waV9yZXF1ZXN0LT5SZXF1ZXN0RGF0YUxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisJcHNnZSA9ICZtcGlfcmVxdWVzdC0+U0dMOworCisJLyogV1JJVEUgc2dlbCBmaXJzdCAqLworCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgfCBNUEkyX1NHRV9GTEFHU19IT1NUX1RPX0lPQyk7CisJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHBzZ2UsIHNnbF9mbGFncyB8CisJICAgIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCksIGRhdGFfb3V0X2RtYSk7CisKKwkvKiBpbmNyIHNnZWwgKi8KKwlwc2dlICs9IGlvYy0+c2dlX3NpemU7CisKKwkvKiBSRUFEIHNnZWwgbGFzdCAqLworCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgfAorCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCk7CisJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHBzZ2UsIHNnbF9mbGFncyB8CisJICAgIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpLCBkYXRhX291dF9kbWEgKworCSAgICBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpKTsKKworCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKKwkgICAgInNlbmQgdG8gc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAorCSAgICAxMCpIWik7CisKKwlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKKwkJICAgIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpLzQpOworCQlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OworCX0KKworCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKKwkgICAgImNvbXBsZXRlXG4iLCBpb2MtPm5hbWUpKTsKKworCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKSB7CisJCXU4ICp0bXA7CisKKwkJbXBpX3JlcGx5ID0gaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseTsKKworCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCSAgICAicmVwb3J0X21hbnVmYWN0dXJlIC0gcmVwbHkgZGF0YSB0cmFuc2ZlciBzaXplKCVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgbGUxNl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGgpKSk7CisKKwkJaWYgKGxlMTZfdG9fY3B1KG1waV9yZXBseS0+UmVzcG9uc2VEYXRhTGVuZ3RoKSAhPQorCQkgICAgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXBseSkpCisJCQlnb3RvIG91dDsKKworCQltYW51ZmFjdHVyZV9yZXBseSA9IGRhdGFfb3V0ICsgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKKwkJc3RybmNweShlZGV2LT52ZW5kb3JfaWQsIG1hbnVmYWN0dXJlX3JlcGx5LT52ZW5kb3JfaWQsCisJCSAgICAgU0FTX0VYUEFOREVSX1ZFTkRPUl9JRF9MRU4pOworCQlzdHJuY3B5KGVkZXYtPnByb2R1Y3RfaWQsIG1hbnVmYWN0dXJlX3JlcGx5LT5wcm9kdWN0X2lkLAorCQkgICAgIFNBU19FWFBBTkRFUl9QUk9EVUNUX0lEX0xFTik7CisJCXN0cm5jcHkoZWRldi0+cHJvZHVjdF9yZXYsIG1hbnVmYWN0dXJlX3JlcGx5LT5wcm9kdWN0X3JldiwKKwkJICAgICBTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOKTsKKwkJZWRldi0+bGV2ZWwgPSBtYW51ZmFjdHVyZV9yZXBseS0+c2FzX2Zvcm1hdDsKKwkJaWYgKG1hbnVmYWN0dXJlX3JlcGx5LT5zYXNfZm9ybWF0KSB7CisJCQlzdHJuY3B5KGVkZXYtPmNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQkgICAgbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQkgICAgIFNBU19FWFBBTkRFUl9DT01QT05FTlRfVkVORE9SX0lEX0xFTik7CisJCQl0bXAgPSAodTggKikmbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF9pZDsKKwkJCWVkZXYtPmNvbXBvbmVudF9pZCA9IHRtcFswXSA8PCA4IHwgdG1wWzFdOworCQkJZWRldi0+Y29tcG9uZW50X3JldmlzaW9uX2lkID0KKwkJCSAgICBtYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X3JldmlzaW9uX2lkOworCQl9CisJfSBlbHNlCisJCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQKKwkJICAgICJyZXBvcnRfbWFudWZhY3R1cmUgLSBubyByZXBseVxuIiwgaW9jLT5uYW1lKSk7CisKKyBpc3N1ZV9ob3N0X3Jlc2V0OgorCWlmIChpc3N1ZV9yZXNldCkKKwkJbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKKwkJICAgIEZPUkNFX0JJR19IQU1NRVIpOworIG91dDoKKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOworCWlmIChkYXRhX291dCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBkZXYsIHN6LCBkYXRhX291dCwgZGF0YV9vdXRfZG1hKTsKKworCW11dGV4X3VubG9jaygmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkIC0gaW5zZXJ0IHBvcnQgdG8gdGhlIGxpc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogaGFuZGxlIG9mIGF0dGFjaGVkIGRldmljZQorICogQHBhcmVudF9oYW5kbGU6IHBhcmVudCBoYW5kbGUoZWl0aGVyIGhiYSBvciBleHBhbmRlcikKKyAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2FzX25vZGVfbG9jay4KKyAqCisgKiBBZGRpbmcgbmV3IHBvcnQgb2JqZWN0IHRvIHRoZSBzYXNfbm9kZS0+c2FzX3BvcnRfbGlzdC4KKyAqCisgKiBSZXR1cm5zIG1wdDJzYXNfcG9ydC4KKyAqLworc3RydWN0IF9zYXNfcG9ydCAqCittcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsCisgICAgdTE2IHBhcmVudF9oYW5kbGUpCit7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeSwgKm5leHQ7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX25vZGU7CisJc3RydWN0IHNhc19ycGh5ICpycGh5OworCWludCBpOworCXN0cnVjdCBzYXNfcG9ydCAqcG9ydDsKKworCWlmICghcGFyZW50X2hhbmRsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwltcHQyc2FzX3BvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgX3Nhc19wb3J0KSwKKwkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcHQyc2FzX3BvcnQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZtcHQyc2FzX3BvcnQtPnBvcnRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1wdDJzYXNfcG9ydC0+cGh5X2xpc3QpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlzYXNfbm9kZSA9IF90cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9oYW5kbGUoaW9jLCBwYXJlbnRfaGFuZGxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKworCWlmICghc2FzX25vZGUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IENvdWxkIG5vdCBmaW5kIHBhcmVudCgweCUwNHgpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHBhcmVudF9oYW5kbGUpOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCW1wdDJzYXNfcG9ydC0+aGFuZGxlID0gcGFyZW50X2hhbmRsZTsKKwltcHQyc2FzX3BvcnQtPnNhc19hZGRyZXNzID0gc2FzX25vZGUtPnNhc19hZGRyZXNzOworCWlmICgoX3RyYW5zcG9ydF9zZXRfaWRlbnRpZnkoaW9jLCBoYW5kbGUsCisJICAgICZtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PSBTQVNfUEhZX1VOVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2FzX25vZGUtPm51bV9waHlzOyBpKyspIHsKKwkJaWYgKHNhc19ub2RlLT5waHlbaV0ucmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzICE9CisJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcykKKwkJCWNvbnRpbnVlOworCQlsaXN0X2FkZF90YWlsKCZzYXNfbm9kZS0+cGh5W2ldLnBvcnRfc2libGluZ3MsCisJCSAgICAmbXB0MnNhc19wb3J0LT5waHlfbGlzdCk7CisJCW1wdDJzYXNfcG9ydC0+bnVtX3BoeXMrKzsKKwl9CisKKwlpZiAoIW1wdDJzYXNfcG9ydC0+bnVtX3BoeXMpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJcG9ydCA9IHNhc19wb3J0X2FsbG9jX251bShzYXNfbm9kZS0+cGFyZW50X2Rldik7CisJaWYgKChzYXNfcG9ydF9hZGQocG9ydCkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkobXB0MnNhc19waHksICZtcHQyc2FzX3BvcnQtPnBoeV9saXN0LAorCSAgICBwb3J0X3NpYmxpbmdzKSB7CisJCWlmICgoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1RSQU5TUE9SVCkpCisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBvcnQtPmRldiwgImFkZDogaGFuZGxlKDB4JTA0eCkiCisJCQkgICAgIiwgc2FzX2FkZHIoMHglMDE2bGx4KSwgcGh5KCVkKVxuIiwgaGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCQkgICAgbXB0MnNhc19waHktPnBoeV9pZCk7CisJCXNhc19wb3J0X2FkZF9waHkocG9ydCwgbXB0MnNhc19waHktPnBoeSk7CisJfQorCisJbXB0MnNhc19wb3J0LT5wb3J0ID0gcG9ydDsKKwlpZiAobXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UpCisJCXJwaHkgPSBzYXNfZW5kX2RldmljZV9hbGxvYyhwb3J0KTsKKwllbHNlCisJCXJwaHkgPSBzYXNfZXhwYW5kZXJfYWxsb2MocG9ydCwKKwkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlKTsKKworCXJwaHktPmlkZW50aWZ5ID0gbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnk7CisJaWYgKChzYXNfcnBoeV9hZGQocnBoeSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCX0KKwlpZiAoKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UUkFOU1BPUlQpKQorCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnJwaHktPmRldiwgImFkZDogaGFuZGxlKDB4JTA0eCksICIKKwkJICAgICJzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBoYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCW1wdDJzYXNfcG9ydC0+cnBoeSA9IHJwaHk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm1wdDJzYXNfcG9ydC0+cG9ydF9saXN0LCAmc2FzX25vZGUtPnNhc19wb3J0X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCisJLyogZmlsbCBpbiByZXBvcnQgbWFudWZhY3R1cmUgKi8KKwlpZiAobXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0KKwkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRURHRV9FWFBBTkRFUiB8fAorCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19GQU5PVVRfRVhQQU5ERVIpCisJCXRyYW5zcG9ydF9leHBhbmRlcl9yZXBvcnRfbWFudWZhY3R1cmUoaW9jLAorCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCSAgICBycGh5X3RvX2V4cGFuZGVyX2RldmljZShycGh5KSk7CisKKwlyZXR1cm4gbXB0MnNhc19wb3J0OworCisgb3V0X2ZhaWw6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wdDJzYXNfcGh5LCBuZXh0LCAmbXB0MnNhc19wb3J0LT5waHlfbGlzdCwKKwkgICAgcG9ydF9zaWJsaW5ncykKKwkJbGlzdF9kZWwoJm1wdDJzYXNfcGh5LT5wb3J0X3NpYmxpbmdzKTsKKwlrZnJlZShtcHQyc2FzX3BvcnQpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIG1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlIC0gcmVtb3ZlIHBvcnQgZnJvbSB0aGUgbGlzdAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX2FkZHJlc3M6IHNhcyBhZGRyZXNzIG9mIGF0dGFjaGVkIGRldmljZQorICogQHBhcmVudF9oYW5kbGU6IGhhbmRsZSB0byB0aGUgdXBzdHJlYW0gcGFyZW50KGVpdGhlciBoYmEgb3IgZXhwYW5kZXIpCisgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNhc19ub2RlX2xvY2suCisgKgorICogUmVtb3Zpbmcgb2JqZWN0IGFuZCBmcmVlaW5nIGFzc29jaWF0ZWQgbWVtb3J5IGZyb20gdGhlCisgKiBpb2MtPnNhc19wb3J0X2xpc3QuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzLAorICAgIHUxNiBwYXJlbnRfaGFuZGxlKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0LCAqbmV4dDsKKwlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfbm9kZTsKKwl1OCBmb3VuZCA9IDA7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeSwgKm5leHRfcGh5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCXNhc19ub2RlID0gX3RyYW5zcG9ydF9zYXNfbm9kZV9maW5kX2J5X2hhbmRsZShpb2MsIHBhcmVudF9oYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCWlmICghc2FzX25vZGUpCisJCXJldHVybjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXB0MnNhc19wb3J0LCBuZXh0LCAmc2FzX25vZGUtPnNhc19wb3J0X2xpc3QsCisJICAgIHBvcnRfbGlzdCkgeworCQlpZiAobXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MgIT0gc2FzX2FkZHJlc3MpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSAxOworCQlsaXN0X2RlbCgmbXB0MnNhc19wb3J0LT5wb3J0X2xpc3QpOworCQlnb3RvIG91dDsKKwl9Cisgb3V0OgorCWlmICghZm91bmQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzYXNfbm9kZS0+bnVtX3BoeXM7IGkrKykgeworCQlpZiAoc2FzX25vZGUtPnBoeVtpXS5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MgPT0gc2FzX2FkZHJlc3MpCisJCQltZW1zZXQoJnNhc19ub2RlLT5waHlbaV0ucmVtb3RlX2lkZW50aWZ5LCAwICwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNhc19pZGVudGlmeSkpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcHQyc2FzX3BoeSwgbmV4dF9waHksCisJICAgICZtcHQyc2FzX3BvcnQtPnBoeV9saXN0LCBwb3J0X3NpYmxpbmdzKSB7CisJCWlmICgoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1RSQU5TUE9SVCkpCisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJm1wdDJzYXNfcG9ydC0+cG9ydC0+ZGV2LAorCQkJICAgICJyZW1vdmU6IHBhcmVudF9oYW5kbGUoMHglMDR4KSwgIgorCQkJICAgICJzYXNfYWRkcigweCUwMTZsbHgpLCBwaHkoJWQpXG4iLCBwYXJlbnRfaGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCQkgICAgbXB0MnNhc19waHktPnBoeV9pZCk7CisJCXNhc19wb3J0X2RlbGV0ZV9waHkobXB0MnNhc19wb3J0LT5wb3J0LCBtcHQyc2FzX3BoeS0+cGh5KTsKKwkJbGlzdF9kZWwoJm1wdDJzYXNfcGh5LT5wb3J0X3NpYmxpbmdzKTsKKwl9CisJc2FzX3BvcnRfZGVsZXRlKG1wdDJzYXNfcG9ydC0+cG9ydCk7CisJa2ZyZWUobXB0MnNhc19wb3J0KTsKK30KKworLyoqCisgKiBtcHQyc2FzX3RyYW5zcG9ydF9hZGRfaG9zdF9waHkgLSByZXBvcnQgc2FzX2hvc3QgcGh5IHRvIHRyYW5zcG9ydAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXB0MnNhc19waHk6IG1wdDJzYXMgcGVyIHBoeSBvYmplY3QKKyAqIEBwaHlfcGcwOiBzYXMgcGh5IHBhZ2UgMAorICogQHBhcmVudF9kZXY6IHBhcmVudCBkZXZpY2UgY2xhc3Mgb2JqZWN0CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX3RyYW5zcG9ydF9hZGRfaG9zdF9waHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgX3Nhc19waHkKKyAgICAqbXB0MnNhc19waHksIE1waTJTYXNQaHlQYWdlMF90IHBoeV9wZzAsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYpCit7CisJc3RydWN0IHNhc19waHkgKnBoeTsKKwlpbnQgcGh5X2luZGV4ID0gbXB0MnNhc19waHktPnBoeV9pZDsKKworCisJSU5JVF9MSVNUX0hFQUQoJm1wdDJzYXNfcGh5LT5wb3J0X3NpYmxpbmdzKTsKKwlwaHkgPSBzYXNfcGh5X2FsbG9jKHBhcmVudF9kZXYsIHBoeV9pbmRleCk7CisJaWYgKCFwaHkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKChfdHJhbnNwb3J0X3NldF9pZGVudGlmeShpb2MsIG1wdDJzYXNfcGh5LT5oYW5kbGUsCisJICAgICZtcHQyc2FzX3BoeS0+aWRlbnRpZnkpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwaHktPmlkZW50aWZ5ID0gbXB0MnNhc19waHktPmlkZW50aWZ5OworCW1wdDJzYXNfcGh5LT5hdHRhY2hlZF9oYW5kbGUgPSBsZTE2X3RvX2NwdShwaHlfcGcwLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwlpZiAobXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSkKKwkJX3RyYW5zcG9ydF9zZXRfaWRlbnRpZnkoaW9jLCBtcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlLAorCQkgICAgJm1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnkpOworCXBoeS0+aWRlbnRpZnkucGh5X2lkZW50aWZpZXIgPSBtcHQyc2FzX3BoeS0+cGh5X2lkOworCXBoeS0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBwaHlfcGcwLk5lZ290aWF0ZWRMaW5rUmF0ZSAmIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTUFTS19QSFlTSUNBTCk7CisJcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3ID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIHBoeV9wZzAuSHdMaW5rUmF0ZSAmIE1QSTJfU0FTX0hXUkFURV9NSU5fUkFURV9NQVNLKTsKKwlwaHktPm1heGltdW1fbGlua3JhdGVfaHcgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkgICAgcGh5X3BnMC5Id0xpbmtSYXRlID4+IDQpOworCXBoeS0+bWluaW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBwaHlfcGcwLlByb2dyYW1tZWRMaW5rUmF0ZSAmIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFX01BU0spOworCXBoeS0+bWF4aW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBwaHlfcGcwLlByb2dyYW1tZWRMaW5rUmF0ZSA+PiA0KTsKKworCWlmICgoc2FzX3BoeV9hZGQocGh5KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXNhc19waHlfZnJlZShwaHkpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICgoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX1RSQU5TUE9SVCkpCisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGh5LT5kZXYsCisJCSAgICAiYWRkOiBoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIgorCQkgICAgIlx0YXR0YWNoZWRfaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseClcbiIsCisJCSAgICBtcHQyc2FzX3BoeS0+aGFuZGxlLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICAgbXB0MnNhc19waHktPmlkZW50aWZ5LnNhc19hZGRyZXNzLAorCQkgICAgbXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgICBtcHQyc2FzX3BoeS0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwltcHQyc2FzX3BoeS0+cGh5ID0gcGh5OworCXJldHVybiAwOworfQorCisKKy8qKgorICogbXB0MnNhc190cmFuc3BvcnRfYWRkX2V4cGFuZGVyX3BoeSAtIHJlcG9ydCBleHBhbmRlciBwaHkgdG8gdHJhbnNwb3J0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcHQyc2FzX3BoeTogbXB0MnNhcyBwZXIgcGh5IG9iamVjdAorICogQGV4cGFuZGVyX3BnMTogZXhwYW5kZXIgcGFnZSAxCisgKiBAcGFyZW50X2RldjogcGFyZW50IGRldmljZSBjbGFzcyBvYmplY3QKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfdHJhbnNwb3J0X2FkZF9leHBhbmRlcl9waHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgX3Nhc19waHkKKyAgICAqbXB0MnNhc19waHksIE1waTJFeHBhbmRlclBhZ2UxX3QgZXhwYW5kZXJfcGcxLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2KQoreworCXN0cnVjdCBzYXNfcGh5ICpwaHk7CisJaW50IHBoeV9pbmRleCA9IG1wdDJzYXNfcGh5LT5waHlfaWQ7CisKKwlJTklUX0xJU1RfSEVBRCgmbXB0MnNhc19waHktPnBvcnRfc2libGluZ3MpOworCXBoeSA9IHNhc19waHlfYWxsb2MocGFyZW50X2RldiwgcGh5X2luZGV4KTsKKwlpZiAoIXBoeSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoKF90cmFuc3BvcnRfc2V0X2lkZW50aWZ5KGlvYywgbXB0MnNhc19waHktPmhhbmRsZSwKKwkgICAgJm1wdDJzYXNfcGh5LT5pZGVudGlmeSkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCXBoeS0+aWRlbnRpZnkgPSBtcHQyc2FzX3BoeS0+aWRlbnRpZnk7CisJbXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSA9CisJICAgIGxlMTZfdG9fY3B1KGV4cGFuZGVyX3BnMS5BdHRhY2hlZERldkhhbmRsZSk7CisJaWYgKG1wdDJzYXNfcGh5LT5hdHRhY2hlZF9oYW5kbGUpCisJCV90cmFuc3BvcnRfc2V0X2lkZW50aWZ5KGlvYywgbXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSwKKwkJICAgICZtcHQyc2FzX3BoeS0+cmVtb3RlX2lkZW50aWZ5KTsKKwlwaHktPmlkZW50aWZ5LnBoeV9pZGVudGlmaWVyID0gbXB0MnNhc19waHktPnBoeV9pZDsKKwlwaHktPm5lZ290aWF0ZWRfbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkgICAgZXhwYW5kZXJfcGcxLk5lZ290aWF0ZWRMaW5rUmF0ZSAmCisJICAgIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTUFTS19QSFlTSUNBTCk7CisJcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3ID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJICAgIGV4cGFuZGVyX3BnMS5Id0xpbmtSYXRlICYgTVBJMl9TQVNfSFdSQVRFX01JTl9SQVRFX01BU0spOworCXBoeS0+bWF4aW11bV9saW5rcmF0ZV9odyA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBleHBhbmRlcl9wZzEuSHdMaW5rUmF0ZSA+PiA0KTsKKwlwaHktPm1pbmltdW1fbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkgICAgZXhwYW5kZXJfcGcxLlByb2dyYW1tZWRMaW5rUmF0ZSAmIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFX01BU0spOworCXBoeS0+bWF4aW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCSAgICBleHBhbmRlcl9wZzEuUHJvZ3JhbW1lZExpbmtSYXRlID4+IDQpOworCisJaWYgKChzYXNfcGh5X2FkZChwaHkpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJc2FzX3BoeV9mcmVlKHBoeSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfVFJBTlNQT1JUKSkKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwaHktPmRldiwKKwkJICAgICJhZGQ6IGhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpXG4iCisJCSAgICAiXHRhdHRhY2hlZF9oYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwKKwkJICAgIG1wdDJzYXNfcGh5LT5oYW5kbGUsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgICBtcHQyc2FzX3BoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCSAgICBtcHQyc2FzX3BoeS0+YXR0YWNoZWRfaGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgIG1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCW1wdDJzYXNfcGh5LT5waHkgPSBwaHk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX3BoeV9saW5rX2NoYW5nZSAtIHJlZnJlc2hpbmcgcGh5IGxpbmsgY2hhbmdlcyBhbmQgYXR0YWNoZWQgZGV2aWNlcworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAaGFuZGxlOiBoYW5kbGUgdG8gc2FzX2hvc3Qgb3IgZXhwYW5kZXIKKyAqIEBhdHRhY2hlZF9oYW5kbGU6IGF0dGFjaGVkIGRldmljZSBoYW5kbGUKKyAqIEBwaHlfbnVtYmVydjogcGh5IG51bWJlcgorICogQGxpbmtfcmF0ZTogbmV3IGxpbmsgcmF0ZQorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwordm9pZAorbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX3BoeV9saW5rX2NoYW5nZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTE2IGhhbmRsZSwgdTE2IGF0dGFjaGVkX2hhbmRsZSwgdTggcGh5X251bWJlciwgdTggbGlua19yYXRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX25vZGU7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKwlzYXNfbm9kZSA9IF90cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCWlmICghc2FzX25vZGUpCisJCXJldHVybjsKKworCW1wdDJzYXNfcGh5ID0gJnNhc19ub2RlLT5waHlbcGh5X251bWJlcl07CisJbXB0MnNhc19waHktPmF0dGFjaGVkX2hhbmRsZSA9IGF0dGFjaGVkX2hhbmRsZTsKKwlpZiAoYXR0YWNoZWRfaGFuZGxlICYmIChsaW5rX3JhdGUgPj0gTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzUpKQorCQlfdHJhbnNwb3J0X3NldF9pZGVudGlmeShpb2MsIG1wdDJzYXNfcGh5LT5hdHRhY2hlZF9oYW5kbGUsCisJCSAgICAmbXB0MnNhc19waHktPnJlbW90ZV9pZGVudGlmeSk7CisJZWxzZQorCQltZW1zZXQoJm1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnksIDAgLCBzaXplb2Yoc3RydWN0CisJCSAgICBzYXNfaWRlbnRpZnkpKTsKKworCWlmIChtcHQyc2FzX3BoeS0+cGh5KQorCQltcHQyc2FzX3BoeS0+cGh5LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0KKwkJICAgIF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKGxpbmtfcmF0ZSk7CisKKwlpZiAoKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UUkFOU1BPUlQpKQorCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJm1wdDJzYXNfcGh5LT5waHktPmRldiwKKwkJICAgICJyZWZyZXNoOiBoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSxcbiIKKwkJICAgICJcdGxpbmtfcmF0ZSgweCUwMngpLCBwaHkoJWQpXG4iCisJCSAgICAiXHRhdHRhY2hlZF9oYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwKKwkJICAgIGhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgIG1wdDJzYXNfcGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcywgbGlua19yYXRlLAorCQkgICAgcGh5X251bWJlciwgYXR0YWNoZWRfaGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgIG1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcGh5X3RvX2lvYyhzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBoeS0+ZGV2LnBhcmVudCk7CisJcmV0dXJuIHNob3N0X3ByaXYoc2hvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcnBoeV90b19pb2Moc3RydWN0IHNhc19ycGh5ICpycGh5KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHJwaHktPmRldi5wYXJlbnQtPnBhcmVudCk7CisJcmV0dXJuIHNob3N0X3ByaXYoc2hvc3QpOworfQorCisvKioKKyAqIHRyYW5zcG9ydF9nZXRfbGlua2Vycm9ycyAtCisgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKKyAqCisgKiBPbmx5IHN1cHBvcnQgc2FzX2hvc3QgZGlyZWN0IGF0dGFjaGVkIHBoeXMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludAordHJhbnNwb3J0X2dldF9saW5rZXJyb3JzKHN0cnVjdCBzYXNfcGh5ICpwaHkpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcGh5X3RvX2lvYyhwaHkpOworCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCU1waTJTYXNQaHlQYWdlMV90IHBoeV9wZzE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCBtcHQyc2FzX3BoeSA9IE5VTEw7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgJiYKKwkgICAgIW1wdDJzYXNfcGh5OyBpKyspIHsKKwkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ICE9IHBoeSkKKwkJCWNvbnRpbnVlOworCQltcHQyc2FzX3BoeSA9ICZpb2MtPnNhc19oYmEucGh5W2ldOworCX0KKworCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3BoeV9wZzEoaW9jLCAmbXBpX3JlcGx5LCAmcGh5X3BnMSwKKwkJICAgIG1wdDJzYXNfcGh5LT5waHlfaWQpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAobXBpX3JlcGx5LklPQ1N0YXR1cyB8fCBtcGlfcmVwbHkuSU9DTG9nSW5mbykKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBoeSglZCksIGlvY19zdGF0dXMiCisJCSAgICAiKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwgaW9jLT5uYW1lLAorCQkgICAgbXB0MnNhc19waHktPnBoeV9pZCwKKwkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LklPQ0xvZ0luZm8pKTsKKworCXBoeS0+aW52YWxpZF9kd29yZF9jb3VudCA9IGxlMzJfdG9fY3B1KHBoeV9wZzEuSW52YWxpZER3b3JkQ291bnQpOworCXBoeS0+cnVubmluZ19kaXNwYXJpdHlfZXJyb3JfY291bnQgPQorCSAgICBsZTMyX3RvX2NwdShwaHlfcGcxLlJ1bm5pbmdEaXNwYXJpdHlFcnJvckNvdW50KTsKKwlwaHktPmxvc3Nfb2ZfZHdvcmRfc3luY19jb3VudCA9CisJICAgIGxlMzJfdG9fY3B1KHBoeV9wZzEuTG9zc0R3b3JkU3luY2hDb3VudCk7CisJcGh5LT5waHlfcmVzZXRfcHJvYmxlbV9jb3VudCA9CisJICAgIGxlMzJfdG9fY3B1KHBoeV9wZzEuUGh5UmVzZXRQcm9ibGVtQ291bnQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRyYW5zcG9ydF9nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIgLQorICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKgorICogT2J0YWluIHRoZSBlbmNsb3N1cmUgbG9naWNhbCBpZCBmb3IgYW4gZXhwYW5kZXIuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50Cit0cmFuc3BvcnRfZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyKHN0cnVjdCBzYXNfcnBoeSAqcnBoeSwgdTY0ICppZGVudGlmaWVyKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHJwaHlfdG9faW9jKHJwaHkpOworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCXNhc19leHBhbmRlciA9IG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCisJICAgIHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKKworCWlmICghc2FzX2V4cGFuZGVyKQorCQlyZXR1cm4gLUVOWElPOworCisJKmlkZW50aWZpZXIgPSBzYXNfZXhwYW5kZXItPmVuY2xvc3VyZV9sb2dpY2FsX2lkOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRyYW5zcG9ydF9nZXRfYmF5X2lkZW50aWZpZXIgLQorICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKgorICogUmV0dXJucyB0aGUgc2xvdCBpZCBmb3IgYSBkZXZpY2UgdGhhdCByZXNpZGVzIGluc2lkZSBhbiBlbmNsb3N1cmUuCisgKi8KK3N0YXRpYyBpbnQKK3RyYW5zcG9ydF9nZXRfYmF5X2lkZW50aWZpZXIoc3RydWN0IHNhc19ycGh5ICpycGh5KQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHJwaHlfdG9faW9jKHJwaHkpOworCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICAgcnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIXNhc19kZXZpY2UpCisJCXJldHVybiAtRU5YSU87CisKKwlyZXR1cm4gc2FzX2RldmljZS0+c2xvdDsKK30KKworLyoqCisgKiB0cmFuc3BvcnRfcGh5X3Jlc2V0IC0KKyAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAorICogQGhhcmRfcmVzZXQ6CisgKgorICogT25seSBzdXBwb3J0IHNhc19ob3N0IGRpcmVjdCBhdHRhY2hlZCBwaHlzLgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAordHJhbnNwb3J0X3BoeV9yZXNldChzdHJ1Y3Qgc2FzX3BoeSAqcGh5LCBpbnQgaGFyZF9yZXNldCkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QgbXBpX3JlcGx5OworCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCBpOworCisJZm9yIChpID0gMCwgbXB0MnNhc19waHkgPSBOVUxMOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzICYmCisJICAgICFtcHQyc2FzX3BoeTsgaSsrKSB7CisJCWlmIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeSAhPSBwaHkpCisJCQljb250aW51ZTsKKwkJbXB0MnNhc19waHkgPSAmaW9jLT5zYXNfaGJhLnBoeVtpXTsKKwl9CisKKwlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CisJbXBpX3JlcXVlc3QuT3BlcmF0aW9uID0gaGFyZF9yZXNldCA/CisJICAgIE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUIDogTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQ7CisJbXBpX3JlcXVlc3QuUGh5TnVtID0gbXB0MnNhc19waHktPnBoeV9pZDsKKworCWlmICgobXB0MnNhc19iYXNlX3Nhc19pb3VuaXRfY29udHJvbChpb2MsICZtcGlfcmVwbHksICZtcGlfcmVxdWVzdCkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChtcGlfcmVwbHkuSU9DU3RhdHVzIHx8IG1waV9yZXBseS5JT0NMb2dJbmZvKQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicGh5KCVkKSwgaW9jX3N0YXR1cyIKKwkJICAgICIoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkLAorCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHkuSU9DTG9nSW5mbykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdHJhbnNwb3J0X3NtcF9oYW5kbGVyIC0gdHJhbnNwb3J0IHBvcnRhbCBmb3Igc21wIHBhc3N0aHJ1CisgKiBAc2hvc3Q6IHNob3N0IG9iamVjdAorICogQHJwaHk6IHNhcyB0cmFuc3BvcnQgcnBoeSBvYmplY3QKKyAqIEByZXE6CisgKgorICogVGhpcyB1c2VkIHByaW1hcmlseSBmb3Igc21wX3V0aWxzLgorICogRXhhbXBsZToKKyAqICAgICAgICAgICBzbXBfcmVwX2dlbmVyYWwgL3N5cy9jbGFzcy9ic2cvZXhwYW5kZXItNTowCisgKi8KK3N0YXRpYyBpbnQKK3RyYW5zcG9ydF9zbXBfaGFuZGxlcihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHNhc19ycGh5ICpycGh5LAorICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7CisJTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwlNcGkyU21wUGFzc3Rocm91Z2hSZXBseV90ICptcGlfcmVwbHk7CisJaW50IHJjOworCXUxNiBzbWlkOworCXUzMiBpb2Nfc3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwl2b2lkICpwc2dlOworCXUzMiBzZ2xfZmxhZ3M7CisJdTggaXNzdWVfcmVzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcl9pbiA9IDA7CisJZG1hX2FkZHJfdCBkbWFfYWRkcl9vdXQgPSAwOworCXUxNiB3YWl0X3N0YXRlX2NvdW50OworCXN0cnVjdCByZXF1ZXN0ICpyc3AgPSByZXEtPm5leHRfcnE7CisKKwlpZiAoIXJzcCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGhlIHNtcCByZXNwb25zZSBzcGFjZSBpcyAiCisJCSAgICAibWlzc2luZ1xuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBzZWdtZW50cz8gKi8KKwlpZiAocmVxLT5iaW8tPmJpX3ZjbnQgPiAxIHx8IHJzcC0+YmlvLT5iaV92Y250ID4gMSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogbXVsdGlwbGUgc2VnbWVudHMgcmVxICV1ICV1LCAiCisJCSAgICAicnNwICV1ICV1XG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLCByZXEtPmJpby0+YmlfdmNudCwKKwkJICAgIHJlcS0+ZGF0YV9sZW4sIHJzcC0+YmlvLT5iaV92Y250LCByc3AtPmRhdGFfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisKKwlyYyA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRyYW5zcG9ydF9jbWRzIGluIHVzZVxuIiwgaW9jLT5uYW1lLAorCQkgICAgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CisKKwl3YWl0X3N0YXRlX2NvdW50ID0gMDsKKwlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CisJd2hpbGUgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCkgeworCQlpZiAod2FpdF9zdGF0ZV9jb3VudCsrID09IDEwKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCisJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlyYyA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzc2xlZXAoMSk7CisJCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB3YWl0aW5nIGZvciAiCisJCSAgICAib3BlcmF0aW9uYWwgc3RhdGUoY291bnQ9JWQpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBfX2Z1bmNfXywgd2FpdF9zdGF0ZV9jb3VudCk7CisJfQorCWlmICh3YWl0X3N0YXRlX2NvdW50KQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGlvYyBpcyBvcGVyYXRpb25hbFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dHJhbnNwb3J0X2NiX2lkeCk7CisJaWYgKCFzbWlkKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkID0gc21pZDsKKworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOworCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCSooKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzcykgPSAocnBoeSkgPworCSAgICBjcHVfdG9fbGU2NChycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgOgorCSAgICBjcHVfdG9fbGU2NChpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MpOworCW1waV9yZXF1ZXN0LT5SZXF1ZXN0RGF0YUxlbmd0aCA9IGNwdV90b19sZTE2KHJlcS0+ZGF0YV9sZW4gLSA0KTsKKwlwc2dlID0gJm1waV9yZXF1ZXN0LT5TR0w7CisKKwkvKiBXUklURSBzZ2VsIGZpcnN0ICovCisJc2dsX2ZsYWdzID0gKE1QSTJfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkgICAgTVBJMl9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUiB8IE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DKTsKKwlzZ2xfZmxhZ3MgPSBzZ2xfZmxhZ3MgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7CisJZG1hX2FkZHJfb3V0ID0gcGNpX21hcF9zaW5nbGUoaW9jLT5wZGV2LCBiaW9fZGF0YShyZXEtPmJpbyksCisJICAgICAgcmVxLT5kYXRhX2xlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAoIWRtYV9hZGRyX291dCkgeworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgbGUxNl90b19jcHUoc21pZCkpOworCQlnb3RvIHVubWFwOworCX0KKworCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHBzZ2UsIHNnbF9mbGFncyB8IChyZXEtPmRhdGFfbGVuIC0gNCksCisJICAgIGRtYV9hZGRyX291dCk7CisKKwkvKiBpbmNyIHNnZWwgKi8KKwlwc2dlICs9IGlvYy0+c2dlX3NpemU7CisKKwkvKiBSRUFEIHNnZWwgbGFzdCAqLworCXNnbF9mbGFncyA9IChNUEkyX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJICAgIE1QSTJfU0dFX0ZMQUdTX0xBU1RfRUxFTUVOVCB8IE1QSTJfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVIgfAorCSAgICBNUEkyX1NHRV9GTEFHU19FTkRfT0ZfTElTVCk7CisJc2dsX2ZsYWdzID0gc2dsX2ZsYWdzIDw8IE1QSTJfU0dFX0ZMQUdTX1NISUZUOworCWRtYV9hZGRyX2luID0gIHBjaV9tYXBfc2luZ2xlKGlvYy0+cGRldiwgYmlvX2RhdGEocnNwLT5iaW8pLAorCSAgICAgIHJzcC0+ZGF0YV9sZW4sIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKCFkbWFfYWRkcl9pbikgeworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgbGUxNl90b19jcHUoc21pZCkpOworCQlnb3RvIHVubWFwOworCX0KKworCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKHBzZ2UsIHNnbF9mbGFncyB8IChyc3AtPmRhdGFfbGVuICsgNCksCisJICAgIGRtYV9hZGRyX2luKTsKKworCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzIC0gIgorCSAgICAic2VuZGluZyBzbXAgcmVxdWVzdFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAorCSAgICAxMCpIWik7CisKKwlpZiAoIShpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlcyA6IHRpbWVvdXRcbiIsCisJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCisJCSAgICBzaXplb2YoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90KS80KTsKKwkJaWYgKCEoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCQlpc3N1ZV9yZXNldCA9IDE7CisJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKKwl9CisKKwlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlcyAtICIKKwkgICAgImNvbXBsZXRlXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisKKwlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkgeworCisJCW1waV9yZXBseSA9IGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHk7CisKKwkJZHRyYW5zcG9ydHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVAorCQkgICAgIiVzIC0gcmVwbHkgZGF0YSB0cmFuc2ZlciBzaXplKCVkKVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sCisJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlRGF0YUxlbmd0aCkpKTsKKworCQltZW1jcHkocmVxLT5zZW5zZSwgbXBpX3JlcGx5LCBzaXplb2YoKm1waV9yZXBseSkpOworCQlyZXEtPnNlbnNlX2xlbiA9IHNpemVvZigqbXBpX3JlcGx5KTsKKwkJcmVxLT5kYXRhX2xlbiA9IDA7CisJCXJzcC0+ZGF0YV9sZW4gLT0gbXBpX3JlcGx5LT5SZXNwb25zZURhdGFMZW5ndGg7CisKKwl9IGVsc2UgeworCQlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UCisJCSAgICAiJXMgLSBubyByZXBseVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlyYyA9IC1FTlhJTzsKKwl9CisKKyBpc3N1ZV9ob3N0X3Jlc2V0OgorCWlmIChpc3N1ZV9yZXNldCkgeworCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAorCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CisJCXJjID0gLUVUSU1FRE9VVDsKKwl9CisKKyB1bm1hcDoKKwlpZiAoZG1hX2FkZHJfb3V0KQorCQlwY2lfdW5tYXBfc2luZ2xlKGlvYy0+cGRldiwgZG1hX2FkZHJfb3V0LCByZXEtPmRhdGFfbGVuLAorCQkgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAoZG1hX2FkZHJfaW4pCisJCXBjaV91bm1hcF9zaW5nbGUoaW9jLT5wZGV2LCBkbWFfYWRkcl9pbiwgcnNwLT5kYXRhX2xlbiwKKwkJICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKyBvdXQ6CisJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwltdXRleF91bmxvY2soJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOworCXJldHVybiByYzsKK30KKworc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSBtcHQyc2FzX3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CisJLmdldF9saW5rZXJyb3JzCQk9IHRyYW5zcG9ydF9nZXRfbGlua2Vycm9ycywKKwkuZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyID0gdHJhbnNwb3J0X2dldF9lbmNsb3N1cmVfaWRlbnRpZmllciwKKwkuZ2V0X2JheV9pZGVudGlmaWVyCT0gdHJhbnNwb3J0X2dldF9iYXlfaWRlbnRpZmllciwKKwkucGh5X3Jlc2V0CQk9IHRyYW5zcG9ydF9waHlfcmVzZXQsCisJLnNtcF9oYW5kbGVyCQk9IHRyYW5zcG9ydF9zbXBfaGFuZGxlciwKK307CisKK3N0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKaW5kZXggYjI2NGI0OS4uYjVmYmZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYwpAQCAtMzQsNyArMzQsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12bWUxNnhfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1tdm1lMTZ4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK212bWUxNnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKiBob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjQsNyArNjQsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZtdm1lMTZ4X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJm12bWUxNnhfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLAorCQkJICAgICAgJmRldi0+ZGV2KTsKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtdm1lMTZ4LXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC04OCw3ICs4OSw3IEBACiAJCW91dF9iZTMyKDB4ZmZmNDIwMmMsIHYpOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMiw5ICsxMDMsOSBAQAogfQogCiBzdGF0aWMgX19kZXZleGl0IGludAotbXZtZTE2eF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK212bWUxNnhfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJLyogRGlzYWJsZSBzY3NpIGNoaXAgaW50cyAqLwpAQCAtMTIzLDI1ICsxMjQsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12bWUxNnhfc2NzaV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAibXZtZTE2eC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IG12bWUxNnhfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG12bWUxNnhfZGV2aWNlX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm1lMTZ4X3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJtdm1lMTZ4LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IG12bWUxNnhfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AobXZtZTE2eF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG12bWUxNnhfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJbXZtZTE2eF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm12bWUxNngtc2NzaSIsCiAJCQkJCQkJICAgICAgLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIobXZtZTE2eF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKG12bWUxNnhfc2NzaV9kZXZpY2UpOwogCX0KIApAQCAtMTUxLDcgKzE1NCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbXZtZTE2eF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihtdm1lMTZ4X3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtdm1lMTZ4X3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL0tidWlsZCBiL2RyaXZlcnMvc2NzaS9vc2QvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjA3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvb3NkL0tidWlsZApAQCAtMCwwICsxLDQ1IEBACisjCisjIEtidWlsZCBmb3IgdGhlIE9TRCBtb2R1bGVzCisjCisjIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIEF1dGhvcnM6CisjICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyMgICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisjCisKK2lmbmVxICgkKE9TRF9JTkMpLCkKKyMgd2UgYXJlIGJ1aWx0IG91dC1vZi10cmVlIEtjb25maWd1cmUgZXZlcnl0aGluZyBhcyBvbgorCitDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SPW0KK2NjZmxhZ3MteSArPSAtRENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgLURDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SX01PRFVMRQorCitDT05GSUdfU0NTSV9PU0RfVUxEPW0KK2NjZmxhZ3MteSArPSAtRENPTkZJR19TQ1NJX09TRF9VTEQgLURDT05GSUdfU0NTSV9PU0RfVUxEX01PRFVMRQorCisjIENPTkZJR19TQ1NJX09TRF9EUFJJTlRfU0VOU0UgPQorIwkwIC0gbm8gcHJpbnQgb2YgZXJyb3JzCisjCTEgLSBwcmludCBlcnJvcnMKKyMJMiAtIGVycm9ycyArIHdhcnJuaW5ncworY2NmbGFncy15ICs9IC1EQ09ORklHX1NDU0lfT1NEX0RQUklOVF9TRU5TRT0xCisKKyMgVW5jb21tZW50IHRvIHR1cm4gZGVidWcgb24KKyMgY2NmbGFncy15ICs9IC1EQ09ORklHX1NDU0lfT1NEX0RFQlVHCisKKyMgaWYgd2UgYXJlIGJ1aWx0IG91dC1vZi10cmVlIGFuZCB0aGUgaG9zdGluZyBrZXJuZWwgaGFzIE9TRCBoZWFkZXJzCisjIHRoZW4gImNjZmxhZ3MteSArPSIgd2lsbCBub3QgcGljayB0aGUgb3V0LW9mZi10cmVlIGhlYWRlcnMuIE9ubHkgYnkgZG9pbmcKKyMgdGhpcyBpdCB3aWxsIHdvcmsuIFRoaXMgbWlnaHQgYnJlYWsgaW4gZnV0dXJlIGtlcm5lbHMKK0xJTlVYSU5DTFVERSA6PSAtSSQoT1NEX0lOQykgJChMSU5VWElOQ0xVREUpCisKK2VuZGlmCisKKyMgbGlib3NkLmtvIC0gb3NkLWluaXRpYXRvciBsaWJyYXJ5CitsaWJvc2QteSA6PSBvc2RfaW5pdGlhdG9yLm8KK29iai0kKENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IpICs9IGxpYm9zZC5vCisKKyMgb3NkLmtvIC0gU0NTSSBVTEQgYW5kIGNoYXItZGV2aWNlCitvc2QteSA6PSBvc2RfdWxkLm8KK29iai0kKENPTkZJR19TQ1NJX09TRF9VTEQpICs9IG9zZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvb3NkL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxYjVjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9vc2QvS2NvbmZpZwpAQCAtMCwwICsxLDUzIEBACisjCisjIEtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBPU0Qgc2NzaSBwcm90b2NvbAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBBdXRob3JzOgorIyAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisjICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyB2ZXJzaW9uIDIgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIworIyBGSVhNRTogU0NTSV9PU0RfSU5JVElBVE9SIHNob3VsZCBzZWxlY3QgQ09ORklHIChITUFDKSBTSEExIHNvbWVob3cuCisjICAgICAgICBIb3cgaXMgaXQgZG9uZSBwcm9wZXJseT8KKyMKKworY29uZmlnIFNDU0lfT1NEX0lOSVRJQVRPUgorCXRyaXN0YXRlICJPU0QtSW5pdGlhdG9yIGxpYnJhcnkiCisJZGVwZW5kcyBvbiBTQ1NJCisJaGVscAorCQlFbmFibGUgdGhlIE9TRC1Jbml0aWF0b3IgbGlicmFyeSAobGlib3NkLmtvKS4KKwkJTk9URTogWW91IG11c3QgYWxzbyBzZWxlY3QgQ1JZUFRPX1NIQTEgKyBDUllQVE9fSE1BQyBhbmQgdGhlaXIKKwkJZGVwZW5kZW5jaWVzCisKK2NvbmZpZyBTQ1NJX09TRF9VTEQKKwl0cmlzdGF0ZSAiT1NEIFVwcGVyIExldmVsIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNDU0lfT1NEX0lOSVRJQVRPUgorCWhlbHAKKwkJQnVpbGQgYSBTQ1NJIHVwcGVyIGxheWVyIGRyaXZlciB0aGF0IGV4cG9ydHMgL2Rldi9vc2RYIGRldmljZXMKKwkJdG8gdXNlci1tb2RlIGZvciB0ZXN0aW5nIGFuZCBjb250cm9sbGluZyBPU0QgZGV2aWNlcy4gSXQgaXMgYWxzbworCQluZWVkZWQgYnkgZXhvZnMsIGZvciBtb3VudGluZyBhbiBPU0QgYmFzZWQgZmlsZSBzeXN0ZW0uCisKK2NvbmZpZyBTQ1NJX09TRF9EUFJJTlRfU0VOU0UKKyAgICBpbnQgIigwLTIpIFdoZW4gc2Vuc2UgaXMgcmV0dXJuZWQsIERFQlVHIHByaW50IGFsbCBzZW5zZSBkZXNjcmlwdG9ycyIKKyAgICBkZWZhdWx0IDEKKyAgICBkZXBlbmRzIG9uIFNDU0lfT1NEX0lOSVRJQVRPUgorICAgIGhlbHAKKyAgICAgICAgV2hlbiBhIENIRUNLX0NPTkRJVElPTiBzdGF0dXMgaXMgcmV0dXJuZWQgZnJvbSBhIHRhcmdldCwgYW5kIGEKKyAgICAgICAgc2Vuc2UtYnVmZmVyIGlzIHJldHJpZXZlZCwgdHVybmluZyB0aGlzIG9uIHdpbGwgZHVtcCBhIGZ1bGwKKyAgICAgICAgc2Vuc2UtZGVjb2RpbmcgbWVzc2FnZS4gU2V0dGluZyB0byAyIHdpbGwgYWxzbyBwcmludCByZWNvdmVyYWJsZQorICAgICAgICBlcnJvcnMgdGhhdCBtaWdodCBiZSByZWd1bGFybHkgcmV0dXJuZWQgZm9yIHNvbWUgZmlsZXN5c3RlbQorICAgICAgICBvcGVyYXRpb25zLgorCitjb25maWcgU0NTSV9PU0RfREVCVUcKKwlib29sICJDb21waWxlIEFsbCBPU0QgbW9kdWxlcyB3aXRoIGxvdHMgb2YgREVCVUcgcHJpbnRzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU0NTSV9PU0RfSU5JVElBVE9SCisJaGVscAorCQlPU0QgQ29kZSBpcyBwb3B1bGF0ZWQgd2l0aCBsb3RzIG9mIE9TRF9ERUJVRyguLikgcHJpbnRvdXRzIHRvCisJCWRtZXNnLiBFbmFibGUgdGhpcyBpZiB5b3UgZm91bmQgYSBidWcgYW5kIHlvdSB3YW50IHRvIGhlbHAgdXMKKwkJdHJhY2sgdGhlIHByb2JsZW0gKHNlZSBhbHNvIE1BSU5UQUlORVJTKS4gU2V0dGluZyB0aGlzIHdpbGwgYWxzbworCQlmb3JjZSBTQ1NJX09TRF9EUFJJTlRfU0VOU0U9Mi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc2QvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvb3NkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5MDUzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvb3NkL01ha2VmaWxlCkBAIC0wLDAgKzEsMzcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBPU0QgbW9kdWxlcyAob3V0IG9mIHRyZWUpCisjCisjIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIEF1dGhvcnM6CisjICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyMgICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIFRoaXMgTWFrZWZpbGUgaXMgdXNlZCB0byBjYWxsIHRoZSBrZXJuZWwgTWFrZWZpbGUgaW4gY2FzZSBvZiBhbiBvdXQtb2YtdHJlZQorIyBidWlsZC4KKyMgJEtTUkMgc2hvdWxkIHBvaW50IHRvIGEgS2VybmVsIHNvdXJjZSB0cmVlIG90aGVyd2lzZSBob3N0J3MgZGVmYXVsdCBpcworIyB1c2VkLiAoZWcuIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkKQorCisjIGluY2x1ZGUgcGF0aCBmb3Igb3V0LW9mLXRyZWUgSGVhZGVycworT1NEX0lOQyA/PSBgcHdkYC8uLi8uLi8uLi9pbmNsdWRlCisKKyMgYWxsb3cgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UKKyMgZS5nLiB0byBjb21waWxlIGZvciBhIGtlcm5lbCB0aGF0IHlvdSBhcmVuJ3QgY3VycmVudGx5IHJ1bm5pbmcKK0tTUkMgPz0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCitLQlVJTERfT1VUUFVUID89CitBUkNIID89CitWID89IDAKKworIyB0aGlzIGlzIHRoZSBiYXNpYyBLYnVpbGQgb3V0LW9mLXRyZWUgaW52b2NhdGlvbiwgd2l0aCB0aGUgTT0gb3B0aW9uCitLQlVJTERfQkFTRSA9ICskKE1BS0UpIC1DICQoS1NSQykgTT1gcHdkYCBLQlVJTERfT1VUUFVUPSQoS0JVSUxEX09VVFBVVCkgQVJDSD0kKEFSQ0gpIFY9JChWKQorCithbGw6IGxpYm9zZAorCitsaWJvc2Q6IDsKKwkkKEtCVUlMRF9CQVNFKSBPU0RfSU5DPSQoT1NEX0lOQykgbW9kdWxlcworCitjbGVhbjoKKwkkKEtCVUlMRF9CQVNFKSBjbGVhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zZC9vc2RfZGVidWcuaCBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5ZTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2RlYnVnLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIG9zZF9kZWJ1Zy5oIC0gU29tZSBrcHJpbnRmIG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICoKKyAqLworI2lmbmRlZiBfX09TRF9ERUJVR19IX18KKyNkZWZpbmUgX19PU0RfREVCVUdfSF9fCisKKyNkZWZpbmUgT1NEX0VSUihmbXQsIGEuLi4pIHByaW50ayhLRVJOX0VSUiAib3NkOiAiIGZtdCwgIyNhKQorI2RlZmluZSBPU0RfSU5GTyhmbXQsIGEuLi4pIHByaW50ayhLRVJOX05PVElDRSAib3NkOiAiIGZtdCwgIyNhKQorCisjaWZkZWYgQ09ORklHX1NDU0lfT1NEX0RFQlVHCisjZGVmaW5lIE9TRF9ERUJVRyhmbXQsIGEuLi4pIFwKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm9zZCBAJXM6JWQ6ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjYSkKKyNlbHNlCisjZGVmaW5lIE9TRF9ERUJVRyhmbXQsIGEuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIHU2NCBoYXMgcHJvYmxlbXMgd2l0aCBwcmludGsgdGhpcyB3aWxsIGNhc3QgaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nICovCisjZGVmaW5lIF9MTFUoeCkgKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkKKworI2VuZGlmIC8qIG5kZWYgX19PU0RfREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL29zZF9pbml0aWF0b3IuYyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2luaXRpYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmY1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvb3NkL29zZF9pbml0aWF0b3IuYwpAQCAtMCwwICsxLDE2NTcgQEAKKy8qCisgKiBvc2RfaW5pdGlhdG9yIC0gTWFpbiBib2R5IG9mIHRoZSBvc2QgaW5pdGlhdG9yIGxpYnJhcnkuCisgKgorICogTm90ZTogVGhlIGZpbGUgZG9lcyBub3QgY29udGFpbiB0aGUgYWR2YW5jZWQgc2VjdXJpdHkgZnVuY3Rpb25hbGl0eSB3aGljaAorICogaXMgb25seSBuZWVkZWQgYnkgdGhlIHNlY3VyaXR5X21hbmFnZXIncyBpbml0aWF0b3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFBhbmFzYXMgY29tcGFueSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzY3NpL29zZF9pbml0aWF0b3IuaD4KKyNpbmNsdWRlIDxzY3NpL29zZF9zZWMuaD4KKyNpbmNsdWRlIDxzY3NpL29zZF9hdHRyaWJ1dGVzLmg+CisjaW5jbHVkZSA8c2NzaS9vc2Rfc2Vuc2UuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm9zZF9kZWJ1Zy5oIgorCisjaWZuZGVmIF9fdW51c2VkCisjICAgIGRlZmluZSBfX3VudXNlZAkJCV9fYXR0cmlidXRlX18oKHVudXNlZCkpCisjZW5kaWYKKworZW51bSB7IE9TRF9SRVFfUkVUUklFUyA9IDEgfTsKKworTU9EVUxFX0FVVEhPUigiQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigib3Blbi1vc2QgaW5pdGlhdG9yIGxpYnJhcnkgbGlib3NkLmtvIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWlsZF90ZXN0KHZvaWQpCit7CisJLyogc3RydWN0dXJlcyB3ZXJlIG5vdCBwYWNrZWQgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBvc2RfY2FwYWJpbGl0eSkgIT0gT1NEX0NBUF9MRU4pOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG9zZHYyX2NkYikgIT0gT1NEX1RPVEFMX0NEQl9MRU4pOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG9zZHYxX2NkYikgIT0gT1NEdjFfVE9UQUxfQ0RCX0xFTik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpfb3NkX3Zlcl9kZXNjKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJcmV0dXJuIG9zZF9yZXFfaXNfdmVyMShvcikgPyAiT1NEMSIgOiAiT1NEMiI7Cit9CisKKyNkZWZpbmUgQVRUUl9ERUZfUkkoaWQsIGxlbikgQVRUUl9ERUYoT1NEX0FQQUdFX1JPT1RfSU5GT1JNQVRJT04sIGlkLCBsZW4pCisKK3N0YXRpYyBpbnQgX29zZF9wcmludF9zeXN0ZW1faW5mbyhzdHJ1Y3Qgb3NkX2RldiAqb2QsIHZvaWQgKmNhcHMpCit7CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX2F0dHIgZ2V0X2F0dHJzW10gPSB7CisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX1ZFTkRPUl9JREVOVElGSUNBVElPTiwgOCksCisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX1BST0RVQ1RfSURFTlRJRklDQVRJT04sIDE2KSwKKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfUFJPRFVDVF9NT0RFTCwgMzIpLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9QUk9EVUNUX1JFVklTSU9OX0xFVkVMLCA0KSwKKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfUFJPRFVDVF9TRVJJQUxfTlVNQkVSLCA2NCAvKnZhcmlhYmxlKi8pLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9PU0RfTkFNRSwgNjQgLyp2YXJpYWJsZSovKSwKKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfVE9UQUxfQ0FQQUNJVFksIDgpLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9VU0VEX0NBUEFDSVRZLCA4KSwKKwkJQVRUUl9ERUZfUkkoT1NEX0FUVFJfUklfTlVNQkVSX09GX1BBUlRJVElPTlMsIDgpLAorCQlBVFRSX0RFRl9SSShPU0RfQVRUUl9SSV9DTE9DSywgNiksCisJCS8qIElCTS1PU0QtU0lNIEhhcyBhIGJ1ZyB3aXRoIHRoaXMgb25lIHB1dCBpdCBsYXN0ICovCisJCUFUVFJfREVGX1JJKE9TRF9BVFRSX1JJX09TRF9TWVNURU1fSUQsIDIwKSwKKwl9OworCXZvaWQgKml0ZXIgPSBOVUxMLCAqcEZpcnN0OworCWludCBuZWxlbSA9IEFSUkFZX1NJWkUoZ2V0X2F0dHJzKSwgYSA9IDA7CisJaW50IHJldDsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qob2QsIEdGUF9LRVJORUwpOworCWlmICghb3IpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZ2V0IGF0dHJzICovCisJb3NkX3JlcV9nZXRfYXR0cmlidXRlcyhvciwgJm9zZF9yb290X29iamVjdCk7CisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgZ2V0X2F0dHJzLCBBUlJBWV9TSVpFKGdldF9hdHRycykpOworCisJcmV0ID0gb3NkX2ZpbmFsaXplX3JlcXVlc3Qob3IsIDAsIGNhcHMsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gb3NkX2V4ZWN1dGVfcmVxdWVzdChvcik7CisJaWYgKHJldCkgeworCQlPU0RfRVJSKCJGYWlsZWQgdG8gZGV0ZWN0ICVzID0+ICVkXG4iLCBfb3NkX3Zlcl9kZXNjKG9yKSwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJb3NkX3JlcV9kZWNvZGVfZ2V0X2F0dHJfbGlzdChvciwgZ2V0X2F0dHJzLCAmbmVsZW0sICZpdGVyKTsKKworCU9TRF9JTkZPKCJEZXRlY3RlZCAlcyBkZXZpY2VcbiIsCisJCV9vc2RfdmVyX2Rlc2Mob3IpKTsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX1ZFTkRPUl9JREVOVElGSUNBVElPTiBbJXNdXG4iLAorCQkoY2hhciAqKXBGaXJzdCk7CisKKwlwRmlyc3QgPSBnZXRfYXR0cnNbYSsrXS52YWxfcHRyOworCU9TRF9JTkZPKCJPU0RfQVRUUl9SSV9QUk9EVUNUX0lERU5USUZJQ0FUSU9OIFslc11cbiIsCisJCShjaGFyICopcEZpcnN0KTsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX1BST0RVQ1RfTU9ERUwgWyVzXVxuIiwKKwkJKGNoYXIgKilwRmlyc3QpOworCisJcEZpcnN0ID0gZ2V0X2F0dHJzW2ErK10udmFsX3B0cjsKKwlPU0RfSU5GTygiT1NEX0FUVFJfUklfUFJPRFVDVF9SRVZJU0lPTl9MRVZFTCBbJXVdXG4iLAorCQlwRmlyc3QgPyBnZXRfdW5hbGlnbmVkX2JlMzIocEZpcnN0KSA6IH4wVSk7CisKKwlwRmlyc3QgPSBnZXRfYXR0cnNbYSsrXS52YWxfcHRyOworCU9TRF9JTkZPKCJPU0RfQVRUUl9SSV9QUk9EVUNUX1NFUklBTF9OVU1CRVIgWyVzXVxuIiwKKwkJKGNoYXIgKilwRmlyc3QpOworCisJcEZpcnN0ID0gZ2V0X2F0dHJzW2FdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX09TRF9OQU1FIFslc11cbiIsIChjaGFyICopcEZpcnN0KTsKKwlhKys7CisKKwlwRmlyc3QgPSBnZXRfYXR0cnNbYSsrXS52YWxfcHRyOworCU9TRF9JTkZPKCJPU0RfQVRUUl9SSV9UT1RBTF9DQVBBQ0lUWSBbMHglbGx4XVxuIiwKKwkJcEZpcnN0ID8gX0xMVShnZXRfdW5hbGlnbmVkX2JlNjQocEZpcnN0KSkgOiB+MFVMTCk7CisKKwlwRmlyc3QgPSBnZXRfYXR0cnNbYSsrXS52YWxfcHRyOworCU9TRF9JTkZPKCJPU0RfQVRUUl9SSV9VU0VEX0NBUEFDSVRZIFsweCVsbHhdXG4iLAorCQlwRmlyc3QgPyBfTExVKGdldF91bmFsaWduZWRfYmU2NChwRmlyc3QpKSA6IH4wVUxMKTsKKworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX05VTUJFUl9PRl9QQVJUSVRJT05TIFslbGx1XVxuIiwKKwkJcEZpcnN0ID8gX0xMVShnZXRfdW5hbGlnbmVkX2JlNjQocEZpcnN0KSkgOiB+MFVMTCk7CisKKwlpZiAoYSA+PSBuZWxlbSkKKwkJZ290byBvdXQ7CisKKwkvKiBGSVhNRTogV2hlcmUgYXJlIHRoZSB0aW1lIHV0aWxpdGllcyAqLworCXBGaXJzdCA9IGdldF9hdHRyc1thKytdLnZhbF9wdHI7CisJT1NEX0lORk8oIk9TRF9BVFRSX1JJX0NMT0NLIFsweCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeF1cbiIsCisJCSgoY2hhciAqKXBGaXJzdClbMF0sICgoY2hhciAqKXBGaXJzdClbMV0sCisJCSgoY2hhciAqKXBGaXJzdClbMl0sICgoY2hhciAqKXBGaXJzdClbM10sCisJCSgoY2hhciAqKXBGaXJzdClbNF0sICgoY2hhciAqKXBGaXJzdClbNV0pOworCisJaWYgKGEgPCBuZWxlbSkgeyAvKiBJQk0tT1NELVNJTSBidWcsIE1pZ2h0IG5vdCBoYXZlIGl0ICovCisJCXVuc2lnbmVkIGxlbiA9IGdldF9hdHRyc1thXS5sZW47CisJCWNoYXIgc2lkX2R1bXBbMzIqNCArIDJdOyAvKiAybmliYmxlcytzcGFjZStBU0NJSSAqLworCisJCWhleF9kdW1wX3RvX2J1ZmZlcihnZXRfYXR0cnNbYV0udmFsX3B0ciwgbGVuLCAzMiwgMSwKKwkJCQkgICBzaWRfZHVtcCwgc2l6ZW9mKHNpZF9kdW1wKSwgdHJ1ZSk7CisJCU9TRF9JTkZPKCJPU0RfQVRUUl9SSV9PU0RfU1lTVEVNX0lEKCVkKSBbJXNdXG4iLCBsZW4sIHNpZF9kdW1wKTsKKwkJYSsrOworCX0KK291dDoKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBvc2RfYXV0b19kZXRlY3RfdmVyKHN0cnVjdCBvc2RfZGV2ICpvZCwgdm9pZCAqY2FwcykKK3sKKwlpbnQgcmV0OworCisJLyogQXV0by1kZXRlY3QgdGhlIG9zZCB2ZXJzaW9uICovCisJcmV0ID0gX29zZF9wcmludF9zeXN0ZW1faW5mbyhvZCwgY2Fwcyk7CisJaWYgKHJldCkgeworCQlvc2RfZGV2X3NldF92ZXIob2QsIE9TRF9WRVIxKTsKKwkJT1NEX0RFQlVHKCJjb252ZXJ0aW5nIHRvIE9TRDFcbiIpOworCQlyZXQgPSBfb3NkX3ByaW50X3N5c3RlbV9pbmZvKG9kLCBjYXBzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChvc2RfYXV0b19kZXRlY3RfdmVyKTsKKworc3RhdGljIHVuc2lnbmVkIF9vc2RfcmVxX2NkYl9sZW4oc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlyZXR1cm4gb3NkX3JlcV9pc192ZXIxKG9yKSA/IE9TRHYxX1RPVEFMX0NEQl9MRU4gOiBPU0RfVE9UQUxfQ0RCX0xFTjsKK30KKworc3RhdGljIHVuc2lnbmVkIF9vc2RfcmVxX2FsaXN0X2VsZW1fc2l6ZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB1bnNpZ25lZCBsZW4pCit7CisJcmV0dXJuIG9zZF9yZXFfaXNfdmVyMShvcikgPworCQlvc2R2MV9hdHRyX2xpc3RfZWxlbV9zaXplKGxlbikgOgorCQlvc2R2Ml9hdHRyX2xpc3RfZWxlbV9zaXplKGxlbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBfb3NkX3JlcV9hbGlzdF9zaXplKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHZvaWQgKmxpc3RfaGVhZCkKK3sKKwlyZXR1cm4gb3NkX3JlcV9pc192ZXIxKG9yKSA/CisJCW9zZHYxX2xpc3Rfc2l6ZShsaXN0X2hlYWQpIDoKKwkJb3NkdjJfbGlzdF9zaXplKGxpc3RfaGVhZCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBfb3NkX3JlcV9zaXplb2ZfYWxpc3RfaGVhZGVyKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJcmV0dXJuIG9zZF9yZXFfaXNfdmVyMShvcikgPworCQlzaXplb2Yoc3RydWN0IG9zZHYxX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIpIDoKKwkJc2l6ZW9mKHN0cnVjdCBvc2R2Ml9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyKTsKK30KKworc3RhdGljIHZvaWQgX29zZF9yZXFfc2V0X2FsaXN0X3R5cGUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl2b2lkICpsaXN0LCBpbnQgbGlzdF90eXBlKQoreworCWlmIChvc2RfcmVxX2lzX3ZlcjEob3IpKSB7CisJCXN0cnVjdCBvc2R2MV9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyICphdHRyX2xpc3QgPSBsaXN0OworCisJCW1lbXNldChhdHRyX2xpc3QsIDAsIHNpemVvZigqYXR0cl9saXN0KSk7CisJCWF0dHJfbGlzdC0+dHlwZSA9IGxpc3RfdHlwZTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb3NkdjJfYXR0cmlidXRlc19saXN0X2hlYWRlciAqYXR0cl9saXN0ID0gbGlzdDsKKworCQltZW1zZXQoYXR0cl9saXN0LCAwLCBzaXplb2YoKmF0dHJfbGlzdCkpOworCQlhdHRyX2xpc3QtPnR5cGUgPSBsaXN0X3R5cGU7CisJfQorfQorCitzdGF0aWMgYm9vbCBfb3NkX3JlcV9pc19hbGlzdF90eXBlKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJdm9pZCAqbGlzdCwgaW50IGxpc3RfdHlwZSkKK3sKKwlpZiAoIWxpc3QpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChvc2RfcmVxX2lzX3ZlcjEob3IpKSB7CisJCXN0cnVjdCBvc2R2MV9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyICphdHRyX2xpc3QgPSBsaXN0OworCisJCXJldHVybiBhdHRyX2xpc3QtPnR5cGUgPT0gbGlzdF90eXBlOworCX0gZWxzZSB7CisJCXN0cnVjdCBvc2R2Ml9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyICphdHRyX2xpc3QgPSBsaXN0OworCisJCXJldHVybiBhdHRyX2xpc3QtPnR5cGUgPT0gbGlzdF90eXBlOworCX0KK30KKworLyogVGhpcyBpcyBmb3IgTGlzdC1vYmplY3RzIG5vdCBBdHRyaWJ1dGVzLUxpc3RzICovCitzdGF0aWMgdm9pZCBfb3NkX3JlcV9lbmNvZGVfb2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBvc2RfY2RiX2hlYWQgKmNkYmggPSBvc2RfY2RiX2hlYWQoJm9yLT5jZGIpOworCisJaWYgKG9zZF9yZXFfaXNfdmVyMShvcikpIHsKKwkJY2RiaC0+djEubGlzdF9pZGVudGlmaWVyID0gbGlzdC0+bGlzdF9pZGVudGlmaWVyOworCQljZGJoLT52MS5zdGFydF9hZGRyZXNzID0gbGlzdC0+Y29udGludWF0aW9uX2lkOworCX0gZWxzZSB7CisJCWNkYmgtPnYyLmxpc3RfaWRlbnRpZmllciA9IGxpc3QtPmxpc3RfaWRlbnRpZmllcjsKKwkJY2RiaC0+djIuc3RhcnRfYWRkcmVzcyA9IGxpc3QtPmNvbnRpbnVhdGlvbl9pZDsKKwl9Cit9CisKK3N0YXRpYyBvc2RfY2RiX29mZnNldCBvc2RfcmVxX2VuY29kZV9vZmZzZXQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl1NjQgb2Zmc2V0LCB1bnNpZ25lZCAqcGFkZGluZykKK3sKKwlyZXR1cm4gX19vc2RfZW5jb2RlX29mZnNldChvZmZzZXQsIHBhZGRpbmcsCisJCQlvc2RfcmVxX2lzX3ZlcjEob3IpID8KKwkJCQlPU0R2MV9PRkZTRVRfTUlOX1NISUZUIDogT1NEX09GRlNFVF9NSU5fU0hJRlQsCisJCQlPU0RfT0ZGU0VUX01BWF9TSElGVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3NkX3NlY3VyaXR5X3BhcmFtZXRlcnMgKgorX29zZF9yZXFfc2VjX3BhcmFtcyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXN0cnVjdCBvc2RfY2RiICpvY2RiID0gJm9yLT5jZGI7CisKKwlpZiAob3NkX3JlcV9pc192ZXIxKG9yKSkKKwkJcmV0dXJuICZvY2RiLT52MS5zZWNfcGFyYW1zOworCWVsc2UKKwkJcmV0dXJuICZvY2RiLT52Mi5zZWNfcGFyYW1zOworfQorCit2b2lkIG9zZF9kZXZfaW5pdChzdHJ1Y3Qgb3NkX2RldiAqb3NkZCwgc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSkKK3sKKwltZW1zZXQob3NkZCwgMCwgc2l6ZW9mKCpvc2RkKSk7CisJb3NkZC0+c2NzaV9kZXZpY2UgPSBzY3NpX2RldmljZTsKKwlvc2RkLT5kZWZfdGltZW91dCA9IEJMS19ERUZBVUxUX1NHX1RJTUVPVVQ7CisjaWZkZWYgT1NEX1ZFUjFfU1VQUE9SVAorCW9zZGQtPnZlcnNpb24gPSBPU0RfVkVSMjsKKyNlbmRpZgorCS8qIFRPRE86IEFsbG9jYXRlIHBvb2xzIGZvciBvc2RfcmVxdWVzdCBhdHRyaWJ1dGVzIC4uLiAqLworfQorRVhQT1JUX1NZTUJPTChvc2RfZGV2X2luaXQpOworCit2b2lkIG9zZF9kZXZfZmluaShzdHJ1Y3Qgb3NkX2RldiAqb3NkZCkKK3sKKwkvKiBUT0RPOiBEZS1hbGxvY2F0ZSBwb29scyAqLworCisJb3NkZC0+c2NzaV9kZXZpY2UgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTChvc2RfZGV2X2ZpbmkpOworCitzdGF0aWMgc3RydWN0IG9zZF9yZXF1ZXN0ICpfb3NkX3JlcXVlc3RfYWxsb2MoZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisKKwkvKiBUT0RPOiBVc2UgbWVtcG9vbCB3aXRoIG9uZSBzYXZlZCByZXF1ZXN0ICovCisJb3IgPSBremFsbG9jKHNpemVvZigqb3IpLCBnZnApOworCXJldHVybiBvcjsKK30KKworc3RhdGljIHZvaWQgX29zZF9yZXF1ZXN0X2ZyZWUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlrZnJlZShvcik7Cit9CisKK3N0cnVjdCBvc2RfcmVxdWVzdCAqb3NkX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IG9zZF9kZXYgKmRldiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisKKwlvciA9IF9vc2RfcmVxdWVzdF9hbGxvYyhnZnApOworCWlmICghb3IpCisJCXJldHVybiBOVUxMOworCisJb3ItPm9zZF9kZXYgPSBkZXY7CisJb3ItPmFsbG9jX2ZsYWdzID0gZ2ZwOworCW9yLT50aW1lb3V0ID0gZGV2LT5kZWZfdGltZW91dDsKKwlvci0+cmV0cmllcyA9IE9TRF9SRVFfUkVUUklFUzsKKworCXJldHVybiBvcjsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3N0YXJ0X3JlcXVlc3QpOworCisvKgorICogSWYgb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVxdWVzdCB3YXMgbm90IGV4ZWN1dGVkIHRocm91Z2gKKyAqIHRoZSBibG9jayBsYXllciwgdGhlbiB3ZSBtdXN0IHJlbGVhc2UgQklPcy4KKyAqLworc3RhdGljIHZvaWQgX2Fib3J0X3VuZXhlY3V0ZWRfYmlvcyhzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IGJpbyAqYmlvOworCisJd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKSB7CisJCXJxLT5iaW8gPSBiaW8tPmJpX25leHQ7CisJCWJpb19lbmRpbyhiaW8sIDApOworCX0KK30KKworc3RhdGljIHZvaWQgX29zZF9mcmVlX3NlZyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yIF9fdW51c2VkLAorCXN0cnVjdCBfb3NkX3JlcV9kYXRhX3NlZ21lbnQgKnNlZykKK3sKKwlpZiAoIXNlZy0+YnVmZiB8fCAhc2VnLT5hbGxvY19zaXplKQorCQlyZXR1cm47CisKKwlrZnJlZShzZWctPmJ1ZmYpOworCXNlZy0+YnVmZiA9IE5VTEw7CisJc2VnLT5hbGxvY19zaXplID0gMDsKK30KKwordm9pZCBvc2RfZW5kX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBvci0+cmVxdWVzdDsKKworCV9vc2RfZnJlZV9zZWcob3IsICZvci0+c2V0X2F0dHIpOworCV9vc2RfZnJlZV9zZWcob3IsICZvci0+ZW5jX2dldF9hdHRyKTsKKwlfb3NkX2ZyZWVfc2VnKG9yLCAmb3ItPmdldF9hdHRyKTsKKworCWlmIChycSkgeworCQlpZiAocnEtPm5leHRfcnEpIHsKKwkJCV9hYm9ydF91bmV4ZWN1dGVkX2Jpb3MocnEtPm5leHRfcnEpOworCQkJYmxrX3B1dF9yZXF1ZXN0KHJxLT5uZXh0X3JxKTsKKwkJfQorCisJCV9hYm9ydF91bmV4ZWN1dGVkX2Jpb3MocnEpOworCQlibGtfcHV0X3JlcXVlc3QocnEpOworCX0KKwlfb3NkX3JlcXVlc3RfZnJlZShvcik7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9lbmRfcmVxdWVzdCk7CisKK2ludCBvc2RfZXhlY3V0ZV9yZXF1ZXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJcmV0dXJuIGJsa19leGVjdXRlX3JxKG9yLT5yZXF1ZXN0LT5xLCBOVUxMLCBvci0+cmVxdWVzdCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9leGVjdXRlX3JlcXVlc3QpOworCitzdGF0aWMgdm9pZCBvc2RfcmVxdWVzdF9hc3luY19kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gcmVxLT5lbmRfaW9fZGF0YTsKKworCW9yLT5hc3luY19lcnJvciA9IGVycm9yOworCisJaWYgKGVycm9yKQorCQlPU0RfREVCVUcoIm9zZF9yZXF1ZXN0X2FzeW5jX2RvbmUgZXJyb3IgcmVjaWV2ZWQgJWRcbiIsIGVycm9yKTsKKworCWlmIChvci0+YXN5bmNfZG9uZSkKKwkJb3ItPmFzeW5jX2RvbmUob3IsIG9yLT5hc3luY19wcml2YXRlKTsKKwllbHNlCisJCW9zZF9lbmRfcmVxdWVzdChvcik7Cit9CisKK2ludCBvc2RfZXhlY3V0ZV9yZXF1ZXN0X2FzeW5jKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX3JlcV9kb25lX2ZuICpkb25lLCB2b2lkICpwcml2YXRlKQoreworCW9yLT5yZXF1ZXN0LT5lbmRfaW9fZGF0YSA9IG9yOworCW9yLT5hc3luY19wcml2YXRlID0gcHJpdmF0ZTsKKwlvci0+YXN5bmNfZG9uZSA9IGRvbmU7CisKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQob3ItPnJlcXVlc3QtPnEsIE5VTEwsIG9yLT5yZXF1ZXN0LCAwLAorCQkJICAgICAgb3NkX3JlcXVlc3RfYXN5bmNfZG9uZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9leGVjdXRlX3JlcXVlc3RfYXN5bmMpOworCit1OCBzZ19vdXRfcGFkX2J1ZmZlclsxIDw8IE9TRHYxX09GRlNFVF9NSU5fU0hJRlRdOwordTggc2dfaW5fcGFkX2J1ZmZlclsxIDw8IE9TRHYxX09GRlNFVF9NSU5fU0hJRlRdOworCitzdGF0aWMgaW50IF9vc2RfcmVhbGxvY19zZWcoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50ICpzZWcsIHVuc2lnbmVkIG1heF9ieXRlcykKK3sKKwl2b2lkICpidWZmOworCisJaWYgKHNlZy0+YWxsb2Nfc2l6ZSA+PSBtYXhfYnl0ZXMpCisJCXJldHVybiAwOworCisJYnVmZiA9IGtyZWFsbG9jKHNlZy0+YnVmZiwgbWF4X2J5dGVzLCBvci0+YWxsb2NfZmxhZ3MpOworCWlmICghYnVmZikgeworCQlPU0RfRVJSKCJGYWlsZWQgdG8gUmVhbGxvYyAlZC1ieXRlcyB3YXMtJWRcbiIsIG1heF9ieXRlcywKKwkJCXNlZy0+YWxsb2Nfc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChidWZmICsgc2VnLT5hbGxvY19zaXplLCAwLCBtYXhfYnl0ZXMgLSBzZWctPmFsbG9jX3NpemUpOworCXNlZy0+YnVmZiA9IGJ1ZmY7CisJc2VnLT5hbGxvY19zaXplID0gbWF4X2J5dGVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9hbGxvY19zZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9hdHRyICpvYSwgdW5zaWduZWQgbmVsZW0sIHVuc2lnbmVkIGFkZF9ieXRlcykKK3sKKwl1bnNpZ25lZCB0b3RhbF9ieXRlcyA9IGFkZF9ieXRlczsKKworCWZvciAoOyBuZWxlbTsgLS1uZWxlbSwgKytvYSkKKwkJdG90YWxfYnl0ZXMgKz0gX29zZF9yZXFfYWxpc3RfZWxlbV9zaXplKG9yLCBvYS0+bGVuKTsKKworCU9TRF9ERUJVRygidG90YWxfYnl0ZXM9JWRcbiIsIHRvdGFsX2J5dGVzKTsKKwlyZXR1cm4gX29zZF9yZWFsbG9jX3NlZyhvciwgJm9yLT5zZXRfYXR0ciwgdG90YWxfYnl0ZXMpOworfQorCitzdGF0aWMgaW50IF9hbGxvY19nZXRfYXR0cl9kZXNjKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHVuc2lnbmVkIG1heF9ieXRlcykKK3sKKwlPU0RfREVCVUcoInRvdGFsX2J5dGVzPSVkXG4iLCBtYXhfYnl0ZXMpOworCXJldHVybiBfb3NkX3JlYWxsb2Nfc2VnKG9yLCAmb3ItPmVuY19nZXRfYXR0ciwgbWF4X2J5dGVzKTsKK30KKworc3RhdGljIGludCBfYWxsb2NfZ2V0X2F0dHJfbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCU9TRF9ERUJVRygidG90YWxfYnl0ZXM9JWRcbiIsIG9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcyk7CisJcmV0dXJuIF9vc2RfcmVhbGxvY19zZWcob3IsICZvci0+Z2V0X2F0dHIsIG9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcyk7Cit9CisKKy8qCisgKiBDb21tb24gdG8gYWxsIE9TRCBjb21tYW5kcworICovCisKK3N0YXRpYyB2b2lkIF9vc2R2MV9yZXFfZW5jb2RlX2NvbW1vbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCV9fYmUxNiBhY3QsIGNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHU2NCBsZW4pCit7CisJc3RydWN0IG9zZHYxX2NkYiAqb2NkYiA9ICZvci0+Y2RiLnYxOworCisJLyoKKwkgKiBGb3Igc3BlZWQsIHRoZSBjb21tYW5kcworCSAqCU9TRF9BQ1RfUEVSRk9STV9TQ1NJX0NPTU1BTkQJLCBWMSAweDhGN0UsIFYyIDB4OEY3QworCSAqCU9TRF9BQ1RfU0NTSV9UQVNLX01BTkFHRU1FTlQJLCBWMSAweDhGN0YsIFYyIDB4OEY3RAorCSAqIGFyZSBub3Qgc3VwcG9ydGVkIGhlcmUuIFNob3VsZCBwYXNzIHplcm8gYW5kIHNldCBhZnRlciB0aGUgY2FsbAorCSAqLworCWFjdCAmPSBjcHVfdG9fYmUxNih+MHgwMDgwKTsgLyogVjEgYWN0aW9uIGNvZGUgKi8KKworCU9TRF9ERUJVRygiT1NEdjEgZXhlY3V0ZSBvcGNvZGUgMHgleFxuIiwgYmUxNl90b19jcHUoYWN0KSk7CisKKwlvY2RiLT5oLnZhcmxlbl9jZGIub3Bjb2RlID0gVkFSSUFCTEVfTEVOR1RIX0NNRDsKKwlvY2RiLT5oLnZhcmxlbl9jZGIuYWRkaXRpb25hbF9jZGJfbGVuZ3RoID0gT1NEX0FERElUSU9OQUxfQ0RCX0xFTkdUSDsKKwlvY2RiLT5oLnZhcmxlbl9jZGIuc2VydmljZV9hY3Rpb24gPSBhY3Q7CisKKwlvY2RiLT5oLnBhcnRpdGlvbiA9IGNwdV90b19iZTY0KG9iai0+cGFydGl0aW9uKTsKKwlvY2RiLT5oLm9iamVjdCA9IGNwdV90b19iZTY0KG9iai0+aWQpOworCW9jZGItPmgudjEubGVuZ3RoID0gY3B1X3RvX2JlNjQobGVuKTsKKwlvY2RiLT5oLnYxLnN0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmU2NChvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBfb3NkdjJfcmVxX2VuY29kZV9jb21tb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwkgX19iZTE2IGFjdCwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdTY0IGxlbikKK3sKKwlzdHJ1Y3Qgb3NkdjJfY2RiICpvY2RiID0gJm9yLT5jZGIudjI7CisKKwlPU0RfREVCVUcoIk9TRHYyIGV4ZWN1dGUgb3Bjb2RlIDB4JXhcbiIsIGJlMTZfdG9fY3B1KGFjdCkpOworCisJb2NkYi0+aC52YXJsZW5fY2RiLm9wY29kZSA9IFZBUklBQkxFX0xFTkdUSF9DTUQ7CisJb2NkYi0+aC52YXJsZW5fY2RiLmFkZGl0aW9uYWxfY2RiX2xlbmd0aCA9IE9TRF9BRERJVElPTkFMX0NEQl9MRU5HVEg7CisJb2NkYi0+aC52YXJsZW5fY2RiLnNlcnZpY2VfYWN0aW9uID0gYWN0OworCisJb2NkYi0+aC5wYXJ0aXRpb24gPSBjcHVfdG9fYmU2NChvYmotPnBhcnRpdGlvbik7CisJb2NkYi0+aC5vYmplY3QgPSBjcHVfdG9fYmU2NChvYmotPmlkKTsKKwlvY2RiLT5oLnYyLmxlbmd0aCA9IGNwdV90b19iZTY0KGxlbik7CisJb2NkYi0+aC52Mi5zdGFydF9hZGRyZXNzID0gY3B1X3RvX2JlNjQob2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgX29zZF9yZXFfZW5jb2RlX2NvbW1vbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCV9fYmUxNiBhY3QsIGNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHU2NCBsZW4pCit7CisJaWYgKG9zZF9yZXFfaXNfdmVyMShvcikpCisJCV9vc2R2MV9yZXFfZW5jb2RlX2NvbW1vbihvciwgYWN0LCBvYmosIG9mZnNldCwgbGVuKTsKKwllbHNlCisJCV9vc2R2Ml9yZXFfZW5jb2RlX2NvbW1vbihvciwgYWN0LCBvYmosIG9mZnNldCwgbGVuKTsKK30KKworLyoKKyAqIERldmljZSBjb21tYW5kcworICovCisvKlRPRE86IHZvaWQgb3NkX3JlcV9zZXRfbWFzdGVyX3NlZWRfeGNoZyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwgLi4uKTsgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX3NldF9tYXN0ZXJfa2V5KHN0cnVjdCBvc2RfcmVxdWVzdCAqLCAuLi4pOyAqLworCit2b2lkIG9zZF9yZXFfZm9ybWF0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHU2NCB0b3RfY2FwYWNpdHkpCit7CisJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9GT1JNQVRfT1NELCAmb3NkX3Jvb3Rfb2JqZWN0LCAwLAorCQkJCXRvdF9jYXBhY2l0eSk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfZm9ybWF0KTsKKworaW50IG9zZF9yZXFfbGlzdF9kZXZfcGFydGl0aW9ucyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBpbml0aWFsX2lkLCBzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0LCB1bnNpZ25lZCBuZWxlbSkKK3sKKwlyZXR1cm4gb3NkX3JlcV9saXN0X3BhcnRpdGlvbl9vYmplY3RzKG9yLCAwLCBpbml0aWFsX2lkLCBsaXN0LCBuZWxlbSk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfbGlzdF9kZXZfcGFydGl0aW9ucyk7CisKK3N0YXRpYyB2b2lkIF9vc2RfcmVxX2VuY29kZV9mbHVzaChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWVudW0gb3NkX29wdGlvbnNfZmx1c2hfc2NvcGVfdmFsdWVzIG9wKQoreworCXN0cnVjdCBvc2RfY2RiX2hlYWQgKm9jZGIgPSBvc2RfY2RiX2hlYWQoJm9yLT5jZGIpOworCisJb2NkYi0+Y29tbWFuZF9zcGVjaWZpY19vcHRpb25zID0gb3A7Cit9CisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9vYnNkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJZW51bSBvc2Rfb3B0aW9uc19mbHVzaF9zY29wZV92YWx1ZXMgb3ApCit7CisJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9GTFVTSF9PU0QsICZvc2Rfcm9vdF9vYmplY3QsIDAsIDApOworCV9vc2RfcmVxX2VuY29kZV9mbHVzaChvciwgb3ApOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2ZsdXNoX29ic2QpOworCisvKlRPRE86IHZvaWQgb3NkX3JlcV9wZXJmb3JtX3Njc2lfY29tbWFuZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwKKwljb25zdCB1OCAqY2RiLCAuLi4pOyAqLworLypUT0RPOiB2b2lkIG9zZF9yZXFfdGFza19tYW5hZ2VtZW50KHN0cnVjdCBvc2RfcmVxdWVzdCAqLCAuLi4pOyAqLworCisvKgorICogUGFydGl0aW9uIGNvbW1hbmRzCisgKi8KK3N0YXRpYyB2b2lkIF9vc2RfcmVxX2VuY29kZV9wYXJ0aXRpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlfX2JlMTYgYWN0LCBvc2RfaWQgcGFydGl0aW9uKQoreworCXN0cnVjdCBvc2Rfb2JqX2lkIHBhciA9IHsKKwkJLnBhcnRpdGlvbiA9IHBhcnRpdGlvbiwKKwkJLmlkID0gMCwKKwl9OworCisJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgYWN0LCAmcGFyLCAwLCAwKTsKK30KKwordm9pZCBvc2RfcmVxX2NyZWF0ZV9wYXJ0aXRpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgb3NkX2lkIHBhcnRpdGlvbikKK3sKKwlfb3NkX3JlcV9lbmNvZGVfcGFydGl0aW9uKG9yLCBPU0RfQUNUX0NSRUFURV9QQVJUSVRJT04sIHBhcnRpdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfY3JlYXRlX3BhcnRpdGlvbik7CisKK3ZvaWQgb3NkX3JlcV9yZW1vdmVfcGFydGl0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIG9zZF9pZCBwYXJ0aXRpb24pCit7CisJX29zZF9yZXFfZW5jb2RlX3BhcnRpdGlvbihvciwgT1NEX0FDVF9SRU1PVkVfUEFSVElUSU9OLCBwYXJ0aXRpb24pOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX3JlbW92ZV9wYXJ0aXRpb24pOworCisvKlRPRE86IHZvaWQgb3NkX3JlcV9zZXRfcGFydGl0aW9uX2tleShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwKKwlvc2RfaWQgcGFydGl0aW9uLCB1OCBuZXdfa2V5X2lkW09TRF9DUllQVE9fS0VZSURfU0laRV0sCisJdTggc2VlZFtPU0RfQ1JZUFRPX1NFRURfU0laRV0pOyAqLworCitzdGF0aWMgaW50IF9vc2RfcmVxX2xpc3Rfb2JqZWN0cyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCV9fYmUxNiBhY3Rpb24sIGNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIG9zZF9pZCBpbml0aWFsX2lkLAorCXN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsIHVuc2lnbmVkIG5lbGVtKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gb3ItPm9zZF9kZXYtPnNjc2lfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOworCXU2NCBsZW4gPSBuZWxlbSAqIHNpemVvZihvc2RfaWQpICsgc2l6ZW9mKCpsaXN0KTsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBhY3Rpb24sIG9iaiwgKHU2NClpbml0aWFsX2lkLCBsZW4pOworCisJaWYgKGxpc3QtPmxpc3RfaWRlbnRpZmllcikKKwkJX29zZF9yZXFfZW5jb2RlX29saXN0KG9yLCBsaXN0KTsKKworCVdBUk5fT04ob3ItPmluLmJpbyk7CisJYmlvID0gYmlvX21hcF9rZXJuKHEsIGxpc3QsIGxlbiwgb3ItPmFsbG9jX2ZsYWdzKTsKKwlpZiAoIWJpbykgeworCQlPU0RfRVJSKCIhISEgRmFpbGVkIHRvIGFsbG9jYXRlIGxpc3Rfb2JqZWN0cyBCSU9cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwliaW8tPmJpX3J3ICY9IH4oMSA8PCBCSU9fUlcpOworCW9yLT5pbi5iaW8gPSBiaW87CisJb3ItPmluLnRvdGFsX2J5dGVzID0gYmlvLT5iaV9zaXplOworCXJldHVybiAwOworfQorCitpbnQgb3NkX3JlcV9saXN0X3BhcnRpdGlvbl9jb2xsZWN0aW9ucyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBwYXJ0aXRpb24sIG9zZF9pZCBpbml0aWFsX2lkLCBzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0LAorCXVuc2lnbmVkIG5lbGVtKQoreworCXN0cnVjdCBvc2Rfb2JqX2lkIHBhciA9IHsKKwkJLnBhcnRpdGlvbiA9IHBhcnRpdGlvbiwKKwkJLmlkID0gMCwKKwl9OworCisJcmV0dXJuIG9zZF9yZXFfbGlzdF9jb2xsZWN0aW9uX29iamVjdHMob3IsICZwYXIsIGluaXRpYWxfaWQsIGxpc3QsCisJCQkJCSAgICAgICBuZWxlbSk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfbGlzdF9wYXJ0aXRpb25fY29sbGVjdGlvbnMpOworCitpbnQgb3NkX3JlcV9saXN0X3BhcnRpdGlvbl9vYmplY3RzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX2lkIHBhcnRpdGlvbiwgb3NkX2lkIGluaXRpYWxfaWQsIHN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsCisJdW5zaWduZWQgbmVsZW0pCit7CisJc3RydWN0IG9zZF9vYmpfaWQgcGFyID0geworCQkucGFydGl0aW9uID0gcGFydGl0aW9uLAorCQkuaWQgPSAwLAorCX07CisKKwlyZXR1cm4gX29zZF9yZXFfbGlzdF9vYmplY3RzKG9yLCBPU0RfQUNUX0xJU1QsICZwYXIsIGluaXRpYWxfaWQsIGxpc3QsCisJCQkJICAgICBuZWxlbSk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfbGlzdF9wYXJ0aXRpb25fb2JqZWN0cyk7CisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9wYXJ0aXRpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgcGFydGl0aW9uLCBlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyBvcCkKK3sKKwlfb3NkX3JlcV9lbmNvZGVfcGFydGl0aW9uKG9yLCBPU0RfQUNUX0ZMVVNIX1BBUlRJVElPTiwgcGFydGl0aW9uKTsKKwlfb3NkX3JlcV9lbmNvZGVfZmx1c2gob3IsIG9wKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9mbHVzaF9wYXJ0aXRpb24pOworCisvKgorICogQ29sbGVjdGlvbiBjb21tYW5kcworICovCisvKlRPRE86IHZvaWQgb3NkX3JlcV9jcmVhdGVfY29sbGVjdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqKTsgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX3JlbW92ZV9jb2xsZWN0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICopOyAqLworCitpbnQgb3NkX3JlcV9saXN0X2NvbGxlY3Rpb25fb2JqZWN0cyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIG9zZF9pZCBpbml0aWFsX2lkLAorCXN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsIHVuc2lnbmVkIG5lbGVtKQoreworCXJldHVybiBfb3NkX3JlcV9saXN0X29iamVjdHMob3IsIE9TRF9BQ1RfTElTVF9DT0xMRUNUSU9OLCBvYmosCisJCQkJICAgICBpbml0aWFsX2lkLCBsaXN0LCBuZWxlbSk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfbGlzdF9jb2xsZWN0aW9uX29iamVjdHMpOworCisvKlRPRE86IHZvaWQgcXVlcnkoc3RydWN0IG9zZF9yZXF1ZXN0ICosIC4uLik7IFYyICovCisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9jb2xsZWN0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgZW51bSBvc2Rfb3B0aW9uc19mbHVzaF9zY29wZV92YWx1ZXMgb3ApCit7CisJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9GTFVTSF9QQVJUSVRJT04sIG9iaiwgMCwgMCk7CisJX29zZF9yZXFfZW5jb2RlX2ZsdXNoKG9yLCBvcCk7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfZmx1c2hfY29sbGVjdGlvbik7CisKKy8qVE9ETzogdm9pZCBnZXRfbWVtYmVyX2F0dHJzKHN0cnVjdCBvc2RfcmVxdWVzdCAqLCAuLi4pOyBWMiAqLworLypUT0RPOiB2b2lkIHNldF9tZW1iZXJfYXR0cnMoc3RydWN0IG9zZF9yZXF1ZXN0ICosIC4uLik7IFYyICovCisKKy8qCisgKiBPYmplY3QgY29tbWFuZHMKKyAqLwordm9pZCBvc2RfcmVxX2NyZWF0ZV9vYmplY3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IG9zZF9vYmpfaWQgKm9iaikKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX0NSRUFURSwgb2JqLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9jcmVhdGVfb2JqZWN0KTsKKwordm9pZCBvc2RfcmVxX3JlbW92ZV9vYmplY3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IG9zZF9vYmpfaWQgKm9iaikKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX1JFTU9WRSwgb2JqLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9yZW1vdmVfb2JqZWN0KTsKKworCisvKlRPRE86IHZvaWQgb3NkX3JlcV9jcmVhdGVfbXVsdGkoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlzdHJ1Y3Qgb3NkX29ial9pZCAqZmlyc3QsIHN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsIHVuc2lnbmVkIG5lbGVtKTsKKyovCisKK3ZvaWQgb3NkX3JlcV93cml0ZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHN0cnVjdCBiaW8gKmJpbywgdTY0IG9mZnNldCkKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX1dSSVRFLCBvYmosIG9mZnNldCwgYmlvLT5iaV9zaXplKTsKKwlXQVJOX09OKG9yLT5vdXQuYmlvIHx8IG9yLT5vdXQudG90YWxfYnl0ZXMpOworCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXKTsKKwlvci0+b3V0LmJpbyA9IGJpbzsKKwlvci0+b3V0LnRvdGFsX2J5dGVzID0gYmlvLT5iaV9zaXplOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX3dyaXRlKTsKKworLypUT0RPOiB2b2lkIG9zZF9yZXFfYXBwZW5kKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHN0cnVjdCBiaW8gKmRhdGFfb3V0KTsgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX2NyZWF0ZV93cml0ZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCBzdHJ1Y3QgYmlvICpkYXRhX291dCwgdTY0IG9mZnNldCk7ICovCisvKlRPRE86IHZvaWQgb3NkX3JlcV9jbGVhcihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKiwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCB1NjQgb2Zmc2V0LCB1NjQgbGVuKTsgKi8KKy8qVE9ETzogdm9pZCBvc2RfcmVxX3B1bmNoKHN0cnVjdCBvc2RfcmVxdWVzdCAqLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHU2NCBvZmZzZXQsIHU2NCBsZW4pOyBWMiAqLworCit2b2lkIG9zZF9yZXFfZmx1c2hfb2JqZWN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgZW51bSBvc2Rfb3B0aW9uc19mbHVzaF9zY29wZV92YWx1ZXMgb3AsCisJLypWMiovIHU2NCBvZmZzZXQsIC8qVjIqLyB1NjQgbGVuKQoreworCWlmICh1bmxpa2VseShvc2RfcmVxX2lzX3ZlcjEob3IpICYmIChvZmZzZXQgfHwgbGVuKSkpIHsKKwkJT1NEX0RFQlVHKCJPU0QgVmVyMSBmbHVzaCBvbiBzcGVjaWZpYyByYW5nZSBpZ25vcmVkXG4iKTsKKwkJb2Zmc2V0ID0gMDsKKwkJbGVuID0gMDsKKwl9CisKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX0ZMVVNILCBvYmosIG9mZnNldCwgbGVuKTsKKwlfb3NkX3JlcV9lbmNvZGVfZmx1c2gob3IsIG9wKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9mbHVzaF9vYmplY3QpOworCit2b2lkIG9zZF9yZXFfcmVhZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHN0cnVjdCBiaW8gKmJpbywgdTY0IG9mZnNldCkKK3sKKwlfb3NkX3JlcV9lbmNvZGVfY29tbW9uKG9yLCBPU0RfQUNUX1JFQUQsIG9iaiwgb2Zmc2V0LCBiaW8tPmJpX3NpemUpOworCVdBUk5fT04ob3ItPmluLmJpbyB8fCBvci0+aW4udG90YWxfYnl0ZXMpOworCWJpby0+YmlfcncgJj0gfigxIDw8IEJJT19SVyk7CisJb3ItPmluLmJpbyA9IGJpbzsKKwlvci0+aW4udG90YWxfYnl0ZXMgPSBiaW8tPmJpX3NpemU7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfcmVhZCk7CisKK3ZvaWQgb3NkX3JlcV9nZXRfYXR0cmlidXRlcyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmopCit7CisJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9HRVRfQVRUUklCVVRFUywgb2JqLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9nZXRfYXR0cmlidXRlcyk7CisKK3ZvaWQgb3NkX3JlcV9zZXRfYXR0cmlidXRlcyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmopCit7CisJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9TRVRfQVRUUklCVVRFUywgb2JqLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9zZXRfYXR0cmlidXRlcyk7CisKKy8qCisgKiBBdHRyaWJ1dGVzIExpc3QtbW9kZQorICovCisKK2ludCBvc2RfcmVxX2FkZF9zZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9hdHRyICpvYSwgdW5zaWduZWQgbmVsZW0pCit7CisJdW5zaWduZWQgdG90YWxfYnl0ZXMgPSBvci0+c2V0X2F0dHIudG90YWxfYnl0ZXM7CisJdm9pZCAqYXR0cl9sYXN0OworCWludCByZXQ7CisKKwlpZiAob3ItPmF0dHJpYnV0ZXNfbW9kZSAmJgorCSAgICBvci0+YXR0cmlidXRlc19tb2RlICE9IE9TRF9DREJfR0VUX1NFVF9BVFRSX0xJU1RTKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvci0+YXR0cmlidXRlc19tb2RlID0gT1NEX0NEQl9HRVRfU0VUX0FUVFJfTElTVFM7CisKKwlpZiAoIXRvdGFsX2J5dGVzKSB7IC8qIGZpcnN0LXRpbWU6IGFsbG9jYXRlIGFuZCBwdXQgbGlzdCBoZWFkZXIgKi8KKwkJdG90YWxfYnl0ZXMgPSBfb3NkX3JlcV9zaXplb2ZfYWxpc3RfaGVhZGVyKG9yKTsKKwkJcmV0ID0gX2FsbG9jX3NldF9hdHRyX2xpc3Qob3IsIG9hLCBuZWxlbSwgdG90YWxfYnl0ZXMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJX29zZF9yZXFfc2V0X2FsaXN0X3R5cGUob3IsIG9yLT5zZXRfYXR0ci5idWZmLAorCQkJCQlPU0RfQVRUUl9MSVNUX1NFVF9SRVRSSUVWRSk7CisJfQorCWF0dHJfbGFzdCA9IG9yLT5zZXRfYXR0ci5idWZmICsgdG90YWxfYnl0ZXM7CisKKwlmb3IgKDsgbmVsZW07IC0tbmVsZW0pIHsKKwkJc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCAqYXR0cjsKKwkJdW5zaWduZWQgZWxlbV9zaXplID0gX29zZF9yZXFfYWxpc3RfZWxlbV9zaXplKG9yLCBvYS0+bGVuKTsKKworCQl0b3RhbF9ieXRlcyArPSBlbGVtX3NpemU7CisJCWlmICh1bmxpa2VseShvci0+c2V0X2F0dHIuYWxsb2Nfc2l6ZSA8IHRvdGFsX2J5dGVzKSkgeworCQkJb3ItPnNldF9hdHRyLnRvdGFsX2J5dGVzID0gdG90YWxfYnl0ZXMgLSBlbGVtX3NpemU7CisJCQlyZXQgPSBfYWxsb2Nfc2V0X2F0dHJfbGlzdChvciwgb2EsIG5lbGVtLCB0b3RhbF9ieXRlcyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlhdHRyX2xhc3QgPQorCQkJCW9yLT5zZXRfYXR0ci5idWZmICsgb3ItPnNldF9hdHRyLnRvdGFsX2J5dGVzOworCQl9CisKKwkJYXR0ciA9IGF0dHJfbGFzdDsKKwkJYXR0ci0+YXR0cl9wYWdlID0gY3B1X3RvX2JlMzIob2EtPmF0dHJfcGFnZSk7CisJCWF0dHItPmF0dHJfaWQgPSBjcHVfdG9fYmUzMihvYS0+YXR0cl9pZCk7CisJCWF0dHItPmF0dHJfYnl0ZXMgPSBjcHVfdG9fYmUxNihvYS0+bGVuKTsKKwkJbWVtY3B5KGF0dHItPmF0dHJfdmFsLCBvYS0+dmFsX3B0ciwgb2EtPmxlbik7CisKKwkJYXR0cl9sYXN0ICs9IGVsZW1fc2l6ZTsKKwkJKytvYTsKKwl9CisKKwlvci0+c2V0X2F0dHIudG90YWxfYnl0ZXMgPSB0b3RhbF9ieXRlczsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdCk7CisKK3N0YXRpYyBpbnQgX2FwcGVuZF9tYXBfa2VybihzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCXZvaWQgKmJ1ZmYsIHVuc2lnbmVkIGxlbiwgZ2ZwX3QgZmxhZ3MpCit7CisJc3RydWN0IGJpbyAqYmlvOworCWludCByZXQ7CisKKwliaW8gPSBiaW9fbWFwX2tlcm4ocmVxLT5xLCBidWZmLCBsZW4sIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGJpbykpIHsKKwkJT1NEX0VSUigiRmFpbGVkIGJpb19tYXBfa2VybiglcCwgJWQpID0+ICVsZFxuIiwgYnVmZiwgbGVuLAorCQkJUFRSX0VSUihiaW8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmlvKTsKKwl9CisJcmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocmVxLT5xLCByZXEsIGJpbyk7CisJaWYgKHJldCkgeworCQlPU0RfRVJSKCJGYWlsZWQgYmxrX3JxX2FwcGVuZF9iaW8oJXApID0+ICVkXG4iLCBiaW8sIHJldCk7CisJCWJpb19wdXQoYmlvKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfcmVxX2FwcGVuZF9zZWdtZW50KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJdW5zaWduZWQgcGFkZGluZywgc3RydWN0IF9vc2RfcmVxX2RhdGFfc2VnbWVudCAqc2VnLAorCXN0cnVjdCBfb3NkX3JlcV9kYXRhX3NlZ21lbnQgKmxhc3Rfc2VnLCBzdHJ1Y3QgX29zZF9pb19pbmZvICppbykKK3sKKwl2b2lkICpwYWRfYnVmZjsKKwlpbnQgcmV0OworCisJaWYgKHBhZGRpbmcpIHsKKwkJLyogY2hlY2sgaWYgd2UgY2FuIGp1c3QgYWRkIGl0IHRvIGxhc3QgYnVmZmVyICovCisJCWlmIChsYXN0X3NlZyAmJgorCQkgICAgKHBhZGRpbmcgPD0gbGFzdF9zZWctPmFsbG9jX3NpemUgLSBsYXN0X3NlZy0+dG90YWxfYnl0ZXMpKQorCQkJcGFkX2J1ZmYgPSBsYXN0X3NlZy0+YnVmZiArIGxhc3Rfc2VnLT50b3RhbF9ieXRlczsKKwkJZWxzZQorCQkJcGFkX2J1ZmYgPSBpby0+cGFkX2J1ZmY7CisKKwkJcmV0ID0gX2FwcGVuZF9tYXBfa2Vybihpby0+cmVxLCBwYWRfYnVmZiwgcGFkZGluZywKKwkJCQkgICAgICAgb3ItPmFsbG9jX2ZsYWdzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlvLT50b3RhbF9ieXRlcyArPSBwYWRkaW5nOworCX0KKworCXJldCA9IF9hcHBlbmRfbWFwX2tlcm4oaW8tPnJlcSwgc2VnLT5idWZmLCBzZWctPnRvdGFsX2J5dGVzLAorCQkJICAgICAgIG9yLT5hbGxvY19mbGFncyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlvLT50b3RhbF9ieXRlcyArPSBzZWctPnRvdGFsX2J5dGVzOworCU9TRF9ERUJVRygicGFkZGluZz0lZCBidWZmPSVwIHRvdGFsX2J5dGVzPSVkXG4iLCBwYWRkaW5nLCBzZWctPmJ1ZmYsCisJCSAgc2VnLT50b3RhbF9ieXRlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX29zZF9yZXFfZmluYWxpemVfc2V0X2F0dHJfbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXN0cnVjdCBvc2RfY2RiX2hlYWQgKmNkYmggPSBvc2RfY2RiX2hlYWQoJm9yLT5jZGIpOworCXVuc2lnbmVkIHBhZGRpbmc7CisJaW50IHJldDsKKworCWlmICghb3ItPnNldF9hdHRyLnRvdGFsX2J5dGVzKSB7CisJCWNkYmgtPmF0dHJzX2xpc3Quc2V0X2F0dHJfb2Zmc2V0ID0gT1NEX09GRlNFVF9VTlVTRUQ7CisJCXJldHVybiAwOworCX0KKworCWNkYmgtPmF0dHJzX2xpc3Quc2V0X2F0dHJfYnl0ZXMgPSBjcHVfdG9fYmUzMihvci0+c2V0X2F0dHIudG90YWxfYnl0ZXMpOworCWNkYmgtPmF0dHJzX2xpc3Quc2V0X2F0dHJfb2Zmc2V0ID0KKwkJb3NkX3JlcV9lbmNvZGVfb2Zmc2V0KG9yLCBvci0+b3V0LnRvdGFsX2J5dGVzLCAmcGFkZGluZyk7CisKKwlyZXQgPSBfcmVxX2FwcGVuZF9zZWdtZW50KG9yLCBwYWRkaW5nLCAmb3ItPnNldF9hdHRyLAorCQkJCSAgb3ItPm91dC5sYXN0X3NlZywgJm9yLT5vdXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlvci0+b3V0Lmxhc3Rfc2VnID0gJm9yLT5zZXRfYXR0cjsKKwlyZXR1cm4gMDsKK30KKworaW50IG9zZF9yZXFfYWRkX2dldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgKm9hLCB1bnNpZ25lZCBuZWxlbSkKK3sKKwl1bnNpZ25lZCB0b3RhbF9ieXRlcyA9IG9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXM7CisJdm9pZCAqYXR0cl9sYXN0OworCWludCByZXQ7CisKKwlpZiAob3ItPmF0dHJpYnV0ZXNfbW9kZSAmJgorCSAgICBvci0+YXR0cmlidXRlc19tb2RlICE9IE9TRF9DREJfR0VUX1NFVF9BVFRSX0xJU1RTKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvci0+YXR0cmlidXRlc19tb2RlID0gT1NEX0NEQl9HRVRfU0VUX0FUVFJfTElTVFM7CisKKwkvKiBmaXJzdCB0aW1lIGNhbGMgZGF0YS1pbiBsaXN0IGhlYWRlciBzaXplICovCisJaWYgKCFvci0+Z2V0X2F0dHIudG90YWxfYnl0ZXMpCisJCW9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcyA9IF9vc2RfcmVxX3NpemVvZl9hbGlzdF9oZWFkZXIob3IpOworCisJLyogY2FsYyBkYXRhLW91dCBpbmZvICovCisJaWYgKCF0b3RhbF9ieXRlcykgeyAvKiBmaXJzdC10aW1lOiBhbGxvY2F0ZSBhbmQgcHV0IGxpc3QgaGVhZGVyICovCisJCXVuc2lnbmVkIG1heF9ieXRlczsKKworCQl0b3RhbF9ieXRlcyA9IF9vc2RfcmVxX3NpemVvZl9hbGlzdF9oZWFkZXIob3IpOworCQltYXhfYnl0ZXMgPSB0b3RhbF9ieXRlcyArCisJCQluZWxlbSAqIHNpemVvZihzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9hdHRyaWQpOworCQlyZXQgPSBfYWxsb2NfZ2V0X2F0dHJfZGVzYyhvciwgbWF4X2J5dGVzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJX29zZF9yZXFfc2V0X2FsaXN0X3R5cGUob3IsIG9yLT5lbmNfZ2V0X2F0dHIuYnVmZiwKKwkJCQkJT1NEX0FUVFJfTElTVF9HRVQpOworCX0KKwlhdHRyX2xhc3QgPSBvci0+ZW5jX2dldF9hdHRyLmJ1ZmYgKyB0b3RhbF9ieXRlczsKKworCWZvciAoOyBuZWxlbTsgLS1uZWxlbSkgeworCQlzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9hdHRyaWQgKmF0dHJpZDsKKwkJY29uc3QgdW5zaWduZWQgY3VyX3NpemUgPSBzaXplb2YoKmF0dHJpZCk7CisKKwkJdG90YWxfYnl0ZXMgKz0gY3VyX3NpemU7CisJCWlmICh1bmxpa2VseShvci0+ZW5jX2dldF9hdHRyLmFsbG9jX3NpemUgPCB0b3RhbF9ieXRlcykpIHsKKwkJCW9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXMgPSB0b3RhbF9ieXRlcyAtIGN1cl9zaXplOworCQkJcmV0ID0gX2FsbG9jX2dldF9hdHRyX2Rlc2Mob3IsCisJCQkJCXRvdGFsX2J5dGVzICsgbmVsZW0gKiBzaXplb2YoKmF0dHJpZCkpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJYXR0cl9sYXN0ID0gb3ItPmVuY19nZXRfYXR0ci5idWZmICsKKwkJCQlvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzOworCQl9CisKKwkJYXR0cmlkID0gYXR0cl9sYXN0OworCQlhdHRyaWQtPmF0dHJfcGFnZSA9IGNwdV90b19iZTMyKG9hLT5hdHRyX3BhZ2UpOworCQlhdHRyaWQtPmF0dHJfaWQgPSBjcHVfdG9fYmUzMihvYS0+YXR0cl9pZCk7CisKKwkJYXR0cl9sYXN0ICs9IGN1cl9zaXplOworCisJCS8qIGNhbGMgZGF0YS1pbiBzaXplICovCisJCW9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcyArPQorCQkJX29zZF9yZXFfYWxpc3RfZWxlbV9zaXplKG9yLCBvYS0+bGVuKTsKKwkJKytvYTsKKwl9CisKKwlvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzID0gdG90YWxfYnl0ZXM7CisKKwlPU0RfREVCVUcoCisJICAgICAgICJnZXRfYXR0ci50b3RhbF9ieXRlcz0ldSgldSkgZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzPSV1KCVadSlcbiIsCisJICAgICAgIG9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcywKKwkgICAgICAgb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzIC0gX29zZF9yZXFfc2l6ZW9mX2FsaXN0X2hlYWRlcihvciksCisJICAgICAgIG9yLT5lbmNfZ2V0X2F0dHIudG90YWxfYnl0ZXMsCisJICAgICAgIChvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzIC0gX29zZF9yZXFfc2l6ZW9mX2FsaXN0X2hlYWRlcihvcikpCisJCQkvIHNpemVvZihzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9hdHRyaWQpKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KTsKKworc3RhdGljIGludCBfb3NkX3JlcV9maW5hbGl6ZV9nZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJc3RydWN0IG9zZF9jZGJfaGVhZCAqY2RiaCA9IG9zZF9jZGJfaGVhZCgmb3ItPmNkYik7CisJdW5zaWduZWQgb3V0X3BhZGRpbmc7CisJdW5zaWduZWQgaW5fcGFkZGluZzsKKwlpbnQgcmV0OworCisJaWYgKCFvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzKSB7CisJCWNkYmgtPmF0dHJzX2xpc3QuZ2V0X2F0dHJfZGVzY19vZmZzZXQgPSBPU0RfT0ZGU0VUX1VOVVNFRDsKKwkJY2RiaC0+YXR0cnNfbGlzdC5nZXRfYXR0cl9vZmZzZXQgPSBPU0RfT0ZGU0VUX1VOVVNFRDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gX2FsbG9jX2dldF9hdHRyX2xpc3Qob3IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBUaGUgb3V0LWdvaW5nIGJ1ZmZlciBpbmZvIHVwZGF0ZSAqLworCU9TRF9ERUJVRygib3V0LWdvaW5nXG4iKTsKKwljZGJoLT5hdHRyc19saXN0LmdldF9hdHRyX2Rlc2NfYnl0ZXMgPQorCQljcHVfdG9fYmUzMihvci0+ZW5jX2dldF9hdHRyLnRvdGFsX2J5dGVzKTsKKworCWNkYmgtPmF0dHJzX2xpc3QuZ2V0X2F0dHJfZGVzY19vZmZzZXQgPQorCQlvc2RfcmVxX2VuY29kZV9vZmZzZXQob3IsIG9yLT5vdXQudG90YWxfYnl0ZXMsICZvdXRfcGFkZGluZyk7CisKKwlyZXQgPSBfcmVxX2FwcGVuZF9zZWdtZW50KG9yLCBvdXRfcGFkZGluZywgJm9yLT5lbmNfZ2V0X2F0dHIsCisJCQkJICBvci0+b3V0Lmxhc3Rfc2VnLCAmb3ItPm91dCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlvci0+b3V0Lmxhc3Rfc2VnID0gJm9yLT5lbmNfZ2V0X2F0dHI7CisKKwkvKiBUaGUgaW5jb21pbmcgYnVmZmVyIGluZm8gdXBkYXRlICovCisJT1NEX0RFQlVHKCJpbi1jb21pbmdcbiIpOworCWNkYmgtPmF0dHJzX2xpc3QuZ2V0X2F0dHJfYWxsb2NfbGVuZ3RoID0KKwkJY3B1X3RvX2JlMzIob3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzKTsKKworCWNkYmgtPmF0dHJzX2xpc3QuZ2V0X2F0dHJfb2Zmc2V0ID0KKwkJb3NkX3JlcV9lbmNvZGVfb2Zmc2V0KG9yLCBvci0+aW4udG90YWxfYnl0ZXMsICZpbl9wYWRkaW5nKTsKKworCXJldCA9IF9yZXFfYXBwZW5kX3NlZ21lbnQob3IsIGluX3BhZGRpbmcsICZvci0+Z2V0X2F0dHIsIE5VTEwsCisJCQkJICAmb3ItPmluKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCW9yLT5pbi5sYXN0X3NlZyA9ICZvci0+Z2V0X2F0dHI7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG9zZF9yZXFfZGVjb2RlX2dldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlzdHJ1Y3Qgb3NkX2F0dHIgKm9hLCBpbnQgKm5lbGVtLCB2b2lkICoqaXRlcmF0b3IpCit7CisJdW5zaWduZWQgY3VyX2J5dGVzLCByZXR1cm5lZF9ieXRlczsKKwlpbnQgbjsKKwljb25zdCB1bnNpZ25lZCBzaXplb2ZfYXR0cl9saXN0ID0gX29zZF9yZXFfc2l6ZW9mX2FsaXN0X2hlYWRlcihvcik7CisJdm9pZCAqY3VyX3A7CisKKwlpZiAoIV9vc2RfcmVxX2lzX2FsaXN0X3R5cGUob3IsIG9yLT5nZXRfYXR0ci5idWZmLAorCQkJCSAgICBPU0RfQVRUUl9MSVNUX1NFVF9SRVRSSUVWRSkpIHsKKwkJb2EtPmF0dHJfcGFnZSA9IDA7CisJCW9hLT5hdHRyX2lkID0gMDsKKwkJb2EtPnZhbF9wdHIgPSBOVUxMOworCQlvYS0+bGVuID0gMDsKKwkJKml0ZXJhdG9yID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCppdGVyYXRvcikgeworCQlCVUdfT04oKCppdGVyYXRvciA8IG9yLT5nZXRfYXR0ci5idWZmKSB8fAorCQkgICAgIChvci0+Z2V0X2F0dHIuYnVmZiArIG9yLT5nZXRfYXR0ci5hbGxvY19zaXplIDwgKml0ZXJhdG9yKSk7CisJCWN1cl9wID0gKml0ZXJhdG9yOworCQljdXJfYnl0ZXMgPSAoKml0ZXJhdG9yIC0gb3ItPmdldF9hdHRyLmJ1ZmYpIC0gc2l6ZW9mX2F0dHJfbGlzdDsKKwkJcmV0dXJuZWRfYnl0ZXMgPSBvci0+Z2V0X2F0dHIudG90YWxfYnl0ZXM7CisJfSBlbHNlIHsgLyogZmlyc3QgdGltZSBkZWNvZGUgdGhlIGxpc3QgaGVhZGVyICovCisJCWN1cl9ieXRlcyA9IHNpemVvZl9hdHRyX2xpc3Q7CisJCXJldHVybmVkX2J5dGVzID0gX29zZF9yZXFfYWxpc3Rfc2l6ZShvciwgb3ItPmdldF9hdHRyLmJ1ZmYpICsKKwkJCQkJc2l6ZW9mX2F0dHJfbGlzdDsKKworCQljdXJfcCA9IG9yLT5nZXRfYXR0ci5idWZmICsgc2l6ZW9mX2F0dHJfbGlzdDsKKworCQlpZiAocmV0dXJuZWRfYnl0ZXMgPiBvci0+Z2V0X2F0dHIuYWxsb2Nfc2l6ZSkgeworCQkJT1NEX0RFQlVHKCJ0YXJnZXQgcmVwb3J0OiBzcGFjZSB3YXMgbm90IGJpZyBlbm91Z2ghICIKKwkJCQkgICJBbGxvY2F0ZT0ldSBOZWVkZWQ9JXVcbiIsCisJCQkJICBvci0+Z2V0X2F0dHIuYWxsb2Nfc2l6ZSwKKwkJCQkgIHJldHVybmVkX2J5dGVzICsgc2l6ZW9mX2F0dHJfbGlzdCk7CisKKwkJCXJldHVybmVkX2J5dGVzID0KKwkJCQlvci0+Z2V0X2F0dHIuYWxsb2Nfc2l6ZSAtIHNpemVvZl9hdHRyX2xpc3Q7CisJCX0KKwkJb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzID0gcmV0dXJuZWRfYnl0ZXM7CisJfQorCisJZm9yIChuID0gMDsgKG4gPCAqbmVsZW0pICYmIChjdXJfYnl0ZXMgPCByZXR1cm5lZF9ieXRlcyk7ICsrbikgeworCQlzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9lbGVtZW50ICphdHRyID0gY3VyX3A7CisJCXVuc2lnbmVkIGluYzsKKworCQlvYS0+bGVuID0gYmUxNl90b19jcHUoYXR0ci0+YXR0cl9ieXRlcyk7CisJCWluYyA9IF9vc2RfcmVxX2FsaXN0X2VsZW1fc2l6ZShvciwgb2EtPmxlbik7CisJCU9TRF9ERUJVRygib2EtPmxlbj0lZCBpbmM9JWQgY3VyX2J5dGVzPSVkXG4iLAorCQkJICBvYS0+bGVuLCBpbmMsIGN1cl9ieXRlcyk7CisJCWN1cl9ieXRlcyArPSBpbmM7CisJCWlmIChjdXJfYnl0ZXMgPiByZXR1cm5lZF9ieXRlcykgeworCQkJT1NEX0VSUigiQkFEIEZPT0QgZnJvbSB0YXJnZXQuIGxpc3Qgbm90IHZhbGlkISIKKwkJCQkiYz0lZCByPSVkIG49JWRcbiIsCisJCQkJY3VyX2J5dGVzLCByZXR1cm5lZF9ieXRlcywgbik7CisJCQlvYS0+dmFsX3B0ciA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCisJCW9hLT5hdHRyX3BhZ2UgPSBiZTMyX3RvX2NwdShhdHRyLT5hdHRyX3BhZ2UpOworCQlvYS0+YXR0cl9pZCA9IGJlMzJfdG9fY3B1KGF0dHItPmF0dHJfaWQpOworCQlvYS0+dmFsX3B0ciA9IGF0dHItPmF0dHJfdmFsOworCisJCWN1cl9wICs9IGluYzsKKwkJKytvYTsKKwl9CisKKwkqaXRlcmF0b3IgPSAocmV0dXJuZWRfYnl0ZXMgLSBjdXJfYnl0ZXMpID8gY3VyX3AgOiBOVUxMOworCSpuZWxlbSA9IG47CisJcmV0dXJuIHJldHVybmVkX2J5dGVzIC0gY3VyX2J5dGVzOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2RlY29kZV9nZXRfYXR0cl9saXN0KTsKKworLyoKKyAqIEF0dHJpYnV0ZXMgUGFnZS1tb2RlCisgKi8KKworaW50IG9zZF9yZXFfYWRkX2dldF9hdHRyX3BhZ2Uoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwl1MzIgcGFnZV9pZCwgdm9pZCAqYXR0YXJfcGFnZSwgdW5zaWduZWQgbWF4X3BhZ2VfbGVuLAorCWNvbnN0IHN0cnVjdCBvc2RfYXR0ciAqc2V0X29uZV9hdHRyKQoreworCXN0cnVjdCBvc2RfY2RiX2hlYWQgKmNkYmggPSBvc2RfY2RiX2hlYWQoJm9yLT5jZGIpOworCisJaWYgKG9yLT5hdHRyaWJ1dGVzX21vZGUgJiYKKwkgICAgb3ItPmF0dHJpYnV0ZXNfbW9kZSAhPSBPU0RfQ0RCX0dFVF9BVFRSX1BBR0VfU0VUX09ORSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb3ItPmF0dHJpYnV0ZXNfbW9kZSA9IE9TRF9DREJfR0VUX0FUVFJfUEFHRV9TRVRfT05FOworCisJb3ItPmdldF9hdHRyLmJ1ZmYgPSBhdHRhcl9wYWdlOworCW9yLT5nZXRfYXR0ci50b3RhbF9ieXRlcyA9IG1heF9wYWdlX2xlbjsKKworCW9yLT5zZXRfYXR0ci5idWZmID0gc2V0X29uZV9hdHRyLT52YWxfcHRyOworCW9yLT5zZXRfYXR0ci50b3RhbF9ieXRlcyA9IHNldF9vbmVfYXR0ci0+bGVuOworCisJY2RiaC0+YXR0cnNfcGFnZS5nZXRfYXR0cl9wYWdlID0gY3B1X3RvX2JlMzIocGFnZV9pZCk7CisJY2RiaC0+YXR0cnNfcGFnZS5nZXRfYXR0cl9hbGxvY19sZW5ndGggPSBjcHVfdG9fYmUzMihtYXhfcGFnZV9sZW4pOworCS8qIG9jZGItPmF0dHJzX3BhZ2UuZ2V0X2F0dHJfb2Zmc2V0OyAqLworCisJY2RiaC0+YXR0cnNfcGFnZS5zZXRfYXR0cl9wYWdlID0gY3B1X3RvX2JlMzIoc2V0X29uZV9hdHRyLT5hdHRyX3BhZ2UpOworCWNkYmgtPmF0dHJzX3BhZ2Uuc2V0X2F0dHJfaWQgPSBjcHVfdG9fYmUzMihzZXRfb25lX2F0dHItPmF0dHJfaWQpOworCWNkYmgtPmF0dHJzX3BhZ2Uuc2V0X2F0dHJfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc2V0X29uZV9hdHRyLT5sZW4pOworCS8qIG9jZGItPmF0dHJzX3BhZ2Uuc2V0X2F0dHJfb2Zmc2V0OyAqLworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvc2RfcmVxX2FkZF9nZXRfYXR0cl9wYWdlKTsKKworc3RhdGljIGludCBfb3NkX3JlcV9maW5hbGl6ZV9hdHRyX3BhZ2Uoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKK3sKKwlzdHJ1Y3Qgb3NkX2NkYl9oZWFkICpjZGJoID0gb3NkX2NkYl9oZWFkKCZvci0+Y2RiKTsKKwl1bnNpZ25lZCBpbl9wYWRkaW5nLCBvdXRfcGFkZGluZzsKKwlpbnQgcmV0OworCisJLyogcmV0dXJuZWQgcGFnZSAqLworCWNkYmgtPmF0dHJzX3BhZ2UuZ2V0X2F0dHJfb2Zmc2V0ID0KKwkJb3NkX3JlcV9lbmNvZGVfb2Zmc2V0KG9yLCBvci0+aW4udG90YWxfYnl0ZXMsICZpbl9wYWRkaW5nKTsKKworCXJldCA9IF9yZXFfYXBwZW5kX3NlZ21lbnQob3IsIGluX3BhZGRpbmcsICZvci0+Z2V0X2F0dHIsIE5VTEwsCisJCQkJICAmb3ItPmluKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IG9uZSB2YWx1ZSAqLworCWNkYmgtPmF0dHJzX3BhZ2Uuc2V0X2F0dHJfb2Zmc2V0ID0KKwkJb3NkX3JlcV9lbmNvZGVfb2Zmc2V0KG9yLCBvci0+b3V0LnRvdGFsX2J5dGVzLCAmb3V0X3BhZGRpbmcpOworCisJcmV0ID0gX3JlcV9hcHBlbmRfc2VnbWVudChvciwgb3V0X3BhZGRpbmcsICZvci0+ZW5jX2dldF9hdHRyLCBOVUxMLAorCQkJCSAgJm9yLT5vdXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX29zZF9yZXFfZmluYWxpemVfZGF0YV9pbnRlZ3JpdHkoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlib29sIGhhc19pbiwgYm9vbCBoYXNfb3V0LCBjb25zdCB1OCAqY2FwX2tleSkKK3sKKwlzdHJ1Y3Qgb3NkX3NlY3VyaXR5X3BhcmFtZXRlcnMgKnNlY19wYXJtcyA9IF9vc2RfcmVxX3NlY19wYXJhbXMob3IpOworCWludCByZXQ7CisKKwlpZiAoIW9zZF9pc19zZWNfYWxsZGF0YShzZWNfcGFybXMpKQorCQlyZXR1cm4gMDsKKworCWlmIChoYXNfb3V0KSB7CisJCXN0cnVjdCBfb3NkX3JlcV9kYXRhX3NlZ21lbnQgc2VnID0geworCQkJLmJ1ZmYgPSAmb3ItPm91dF9kYXRhX2ludGVnLAorCQkJLnRvdGFsX2J5dGVzID0gc2l6ZW9mKG9yLT5vdXRfZGF0YV9pbnRlZyksCisJCX07CisJCXVuc2lnbmVkIHBhZDsKKworCQlvci0+b3V0X2RhdGFfaW50ZWcuZGF0YV9ieXRlcyA9IGNwdV90b19iZTY0KAorCQkJb3ItPm91dC5iaW8gPyBvci0+b3V0LmJpby0+Ymlfc2l6ZSA6IDApOworCQlvci0+b3V0X2RhdGFfaW50ZWcuc2V0X2F0dHJpYnV0ZXNfYnl0ZXMgPSBjcHVfdG9fYmU2NCgKKwkJCW9yLT5zZXRfYXR0ci50b3RhbF9ieXRlcyk7CisJCW9yLT5vdXRfZGF0YV9pbnRlZy5nZXRfYXR0cmlidXRlc19ieXRlcyA9IGNwdV90b19iZTY0KAorCQkJb3ItPmVuY19nZXRfYXR0ci50b3RhbF9ieXRlcyk7CisKKwkJc2VjX3Bhcm1zLT5kYXRhX291dF9pbnRlZ3JpdHlfY2hlY2tfb2Zmc2V0ID0KKwkJCW9zZF9yZXFfZW5jb2RlX29mZnNldChvciwgb3ItPm91dC50b3RhbF9ieXRlcywgJnBhZCk7CisKKwkJcmV0ID0gX3JlcV9hcHBlbmRfc2VnbWVudChvciwgcGFkLCAmc2VnLCBvci0+b3V0Lmxhc3Rfc2VnLAorCQkJCQkgICZvci0+b3V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCW9yLT5vdXQubGFzdF9zZWcgPSBOVUxMOworCisJCS8qIHRoZXkgYXJlIG5vdyBhbGwgY2hhaW5lZCB0byByZXF1ZXN0IHNpZ24gdGhlbSBhbGwgdG9nZXRoZXIgKi8KKwkJb3NkX3NlY19zaWduX2RhdGEoJm9yLT5vdXRfZGF0YV9pbnRlZywgb3ItPm91dC5yZXEtPmJpbywKKwkJCQkgIGNhcF9rZXkpOworCX0KKworCWlmIChoYXNfaW4pIHsKKwkJc3RydWN0IF9vc2RfcmVxX2RhdGFfc2VnbWVudCBzZWcgPSB7CisJCQkuYnVmZiA9ICZvci0+aW5fZGF0YV9pbnRlZywKKwkJCS50b3RhbF9ieXRlcyA9IHNpemVvZihvci0+aW5fZGF0YV9pbnRlZyksCisJCX07CisJCXVuc2lnbmVkIHBhZDsKKworCQlzZWNfcGFybXMtPmRhdGFfaW5faW50ZWdyaXR5X2NoZWNrX29mZnNldCA9CisJCQlvc2RfcmVxX2VuY29kZV9vZmZzZXQob3IsIG9yLT5pbi50b3RhbF9ieXRlcywgJnBhZCk7CisKKwkJcmV0ID0gX3JlcV9hcHBlbmRfc2VnbWVudChvciwgcGFkLCAmc2VnLCBvci0+aW4ubGFzdF9zZWcsCisJCQkJCSAgJm9yLT5pbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCW9yLT5pbi5sYXN0X3NlZyA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBvc2RfZmluYWxpemVfcmVxdWVzdCBhbmQgaGVscGVycworICovCisKK3N0YXRpYyBpbnQgX2luaXRfYmxrX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlib29sIGhhc19pbiwgYm9vbCBoYXNfb3V0KQoreworCWdmcF90IGZsYWdzID0gb3ItPmFsbG9jX2ZsYWdzOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXZpY2UgPSBvci0+b3NkX2Rldi0+c2NzaV9kZXZpY2U7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzY3NpX2RldmljZS0+cmVxdWVzdF9xdWV1ZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCWludCByZXQgPSAtRU5PTUVNOworCisJcmVxID0gYmxrX2dldF9yZXF1ZXN0KHEsIGhhc19vdXQsIGZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJZ290byBvdXQ7CisKKwlvci0+cmVxdWVzdCA9IHJlcTsKKwlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CisJcmVxLT50aW1lb3V0ID0gb3ItPnRpbWVvdXQ7CisJcmVxLT5yZXRyaWVzID0gb3ItPnJldHJpZXM7CisJcmVxLT5zZW5zZSA9IG9yLT5zZW5zZTsKKwlyZXEtPnNlbnNlX2xlbiA9IDA7CisKKwlpZiAoaGFzX291dCkgeworCQlvci0+b3V0LnJlcSA9IHJlcTsKKwkJaWYgKGhhc19pbikgeworCQkJLyogYWxsb2NhdGUgYmlkaSByZXF1ZXN0ICovCisJCQlyZXEgPSBibGtfZ2V0X3JlcXVlc3QocSwgUkVBRCwgZmxhZ3MpOworCQkJaWYgKCFyZXEpIHsKKwkJCQlPU0RfREVCVUcoImJsa19nZXRfcmVxdWVzdCBmb3IgYmlkaSBmYWlsZWRcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOworCQkJb3ItPmluLnJlcSA9IG9yLT5yZXF1ZXN0LT5uZXh0X3JxID0gcmVxOworCQl9CisJfSBlbHNlIGlmIChoYXNfaW4pCisJCW9yLT5pbi5yZXEgPSByZXE7CisKKwlyZXQgPSAwOworb3V0OgorCU9TRF9ERUJVRygib3I9JXAgaGFzX2luPSVkIGhhc19vdXQ9JWQgPT4gJWQsICVwXG4iLAorCQkJb3IsIGhhc19pbiwgaGFzX291dCwgcmV0LCBvci0+cmVxdWVzdCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IG9zZF9maW5hbGl6ZV9yZXF1ZXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJdTggb3B0aW9ucywgY29uc3Qgdm9pZCAqY2FwLCBjb25zdCB1OCAqY2FwX2tleSkKK3sKKwlzdHJ1Y3Qgb3NkX2NkYl9oZWFkICpjZGJoID0gb3NkX2NkYl9oZWFkKCZvci0+Y2RiKTsKKwlib29sIGhhc19pbiwgaGFzX291dDsKKwlpbnQgcmV0OworCisJaWYgKG9wdGlvbnMgJiBPU0RfUkVRX0ZVQSkKKwkJY2RiaC0+b3B0aW9ucyB8PSBPU0RfQ0RCX0ZVQTsKKworCWlmIChvcHRpb25zICYgT1NEX1JFUV9EUE8pCisJCWNkYmgtPm9wdGlvbnMgfD0gT1NEX0NEQl9EUE87CisKKwlpZiAob3B0aW9ucyAmIE9TRF9SRVFfQllQQVNTX1RJTUVTVEFNUFMpCisJCWNkYmgtPnRpbWVzdGFtcF9jb250cm9sID0gT1NEX0NEQl9CWVBBU1NfVElNRVNUQU1QUzsKKworCW9zZF9zZXRfY2Fwcygmb3ItPmNkYiwgY2FwKTsKKworCWhhc19pbiA9IG9yLT5pbi5iaW8gfHwgb3ItPmdldF9hdHRyLnRvdGFsX2J5dGVzOworCWhhc19vdXQgPSBvci0+b3V0LmJpbyB8fCBvci0+c2V0X2F0dHIudG90YWxfYnl0ZXMgfHwKKwkJb3ItPmVuY19nZXRfYXR0ci50b3RhbF9ieXRlczsKKworCXJldCA9IF9pbml0X2Jsa19yZXF1ZXN0KG9yLCBoYXNfaW4sIGhhc19vdXQpOworCWlmIChyZXQpIHsKKwkJT1NEX0RFQlVHKCJfaW5pdF9ibGtfcmVxdWVzdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvci0+b3V0LmJpbykgeworCQlyZXQgPSBibGtfcnFfYXBwZW5kX2Jpbyhvci0+cmVxdWVzdC0+cSwgb3ItPm91dC5yZXEsCisJCQkJCW9yLT5vdXQuYmlvKTsKKwkJaWYgKHJldCkgeworCQkJT1NEX0RFQlVHKCJibGtfcnFfYXBwZW5kX2JpbyBvdXQgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJT1NEX0RFQlVHKCJvdXQgYnl0ZXM9JWxsdSAoYnl0ZXNfcmVxPSV1KVxuIiwKKwkJCV9MTFUob3ItPm91dC50b3RhbF9ieXRlcyksIG9yLT5vdXQucmVxLT5kYXRhX2xlbik7CisJfQorCWlmIChvci0+aW4uYmlvKSB7CisJCXJldCA9IGJsa19ycV9hcHBlbmRfYmlvKG9yLT5yZXF1ZXN0LT5xLCBvci0+aW4ucmVxLCBvci0+aW4uYmlvKTsKKwkJaWYgKHJldCkgeworCQkJT1NEX0RFQlVHKCJibGtfcnFfYXBwZW5kX2JpbyBpbiBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlPU0RfREVCVUcoImluIGJ5dGVzPSVsbHUgKGJ5dGVzX3JlcT0ldSlcbiIsCisJCQlfTExVKG9yLT5pbi50b3RhbF9ieXRlcyksIG9yLT5pbi5yZXEtPmRhdGFfbGVuKTsKKwl9CisKKwlvci0+b3V0LnBhZF9idWZmID0gc2dfb3V0X3BhZF9idWZmZXI7CisJb3ItPmluLnBhZF9idWZmID0gc2dfaW5fcGFkX2J1ZmZlcjsKKworCWlmICghb3ItPmF0dHJpYnV0ZXNfbW9kZSkKKwkJb3ItPmF0dHJpYnV0ZXNfbW9kZSA9IE9TRF9DREJfR0VUX1NFVF9BVFRSX0xJU1RTOworCWNkYmgtPmNvbW1hbmRfc3BlY2lmaWNfb3B0aW9ucyB8PSBvci0+YXR0cmlidXRlc19tb2RlOworCWlmIChvci0+YXR0cmlidXRlc19tb2RlID09IE9TRF9DREJfR0VUX0FUVFJfUEFHRV9TRVRfT05FKSB7CisJCXJldCA9IF9vc2RfcmVxX2ZpbmFsaXplX2F0dHJfcGFnZShvcik7CisJfSBlbHNlIHsKKwkJLyogVE9ETzogSSB0aGluayB0aGF0IGZvciB0aGUgR0VUX0FUVFIgY29tbWFuZCB0aGVzZSAyIHNob3VsZAorCQkgKiBiZSByZXZlcnNlZCB0byBrZWVwIHRoZW0gaW4gZXhlY3V0aW9uIG9yZGVyIChmb3IgZW1iZWRlZAorCQkgKiB0YXJnZXRzIHdpdGggbG93IG1lbW9yeSBmb290cHJpbnQpCisJCSAqLworCQlyZXQgPSBfb3NkX3JlcV9maW5hbGl6ZV9zZXRfYXR0cl9saXN0KG9yKTsKKwkJaWYgKHJldCkgeworCQkJT1NEX0RFQlVHKCJfb3NkX3JlcV9maW5hbGl6ZV9zZXRfYXR0cl9saXN0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gX29zZF9yZXFfZmluYWxpemVfZ2V0X2F0dHJfbGlzdChvcik7CisJCWlmIChyZXQpIHsKKwkJCU9TRF9ERUJVRygiX29zZF9yZXFfZmluYWxpemVfZ2V0X2F0dHJfbGlzdCBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IF9vc2RfcmVxX2ZpbmFsaXplX2RhdGFfaW50ZWdyaXR5KG9yLCBoYXNfaW4sIGhhc19vdXQsIGNhcF9rZXkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlvc2Rfc2VjX3NpZ25fY2RiKCZvci0+Y2RiLCBjYXBfa2V5KTsKKworCW9yLT5yZXF1ZXN0LT5jbWQgPSBvci0+Y2RiLmJ1ZmY7CisJb3ItPnJlcXVlc3QtPmNtZF9sZW4gPSBfb3NkX3JlcV9jZGJfbGVuKG9yKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvc2RfZmluYWxpemVfcmVxdWVzdCk7CisKKyNkZWZpbmUgT1NEX1NFTlNFX1BSSU5UMShmbXQsIGEuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKF9fY3VyX3NlbnNlX25lZWRfb3V0cHV0KSBcCisJCQlPU0RfRVJSKGZtdCwgIyNhKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgT1NEX1NFTlNFX1BSSU5UMihmbXQsIGEuLi4pIE9TRF9TRU5TRV9QUklOVDEoIiAgICAiIGZtdCwgIyNhKQorCitpbnQgb3NkX3JlcV9kZWNvZGVfc2Vuc2VfZnVsbChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2Rfc2Vuc2VfaW5mbyAqb3NpLCBib29sIHNpbGVudCwKKwlzdHJ1Y3Qgb3NkX29ial9pZCAqYmFkX29ial9saXN0IF9fdW51c2VkLCBpbnQgbWF4X29iaiBfX3VudXNlZCwKKwlzdHJ1Y3Qgb3NkX2F0dHIgKmJhZF9hdHRyX2xpc3QsIGludCBtYXhfYXR0cikKK3sKKwlpbnQgc2Vuc2VfbGVuLCBvcmlnaW5hbF9zZW5zZV9sZW47CisJc3RydWN0IG9zZF9zZW5zZV9pbmZvIGxvY2FsX29zaTsKKwlzdHJ1Y3Qgc2NzaV9zZW5zZV9kZXNjcmlwdG9yX2Jhc2VkICpzc2RiOworCXZvaWQgKmN1cl9kZXNjcmlwdG9yOworI2lmIChDT05GSUdfU0NTSV9PU0RfRFBSSU5UX1NFTlNFID09IDApCisJY29uc3QgYm9vbCBfX2N1cl9zZW5zZV9uZWVkX291dHB1dCA9IGZhbHNlOworI2Vsc2UKKwlib29sIF9fY3VyX3NlbnNlX25lZWRfb3V0cHV0ID0gIXNpbGVudDsKKyNlbmRpZgorCisJaWYgKCFvci0+cmVxdWVzdC0+ZXJyb3JzKQorCQlyZXR1cm4gMDsKKworCXNzZGIgPSBvci0+cmVxdWVzdC0+c2Vuc2U7CisJc2Vuc2VfbGVuID0gb3ItPnJlcXVlc3QtPnNlbnNlX2xlbjsKKwlpZiAoKHNlbnNlX2xlbiA8IChpbnQpc2l6ZW9mKCpzc2RiKSB8fCAhc3NkYi0+c2Vuc2Vfa2V5KSkgeworCQlPU0RfRVJSKCJCbG9jay1sYXllciByZXR1cm5lZCBlcnJvcigweCV4KSBidXQgIgorCQkJInNlbnNlX2xlbigldSkgfHwga2V5KCVkKSBpcyBlbXB0eVxuIiwKKwkJCW9yLT5yZXF1ZXN0LT5lcnJvcnMsIHNlbnNlX2xlbiwgc3NkYi0+c2Vuc2Vfa2V5KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKChzc2RiLT5yZXNwb25zZV9jb2RlICE9IDB4NzIpICYmIChzc2RiLT5yZXNwb25zZV9jb2RlICE9IDB4NzMpKSB7CisJCU9TRF9FUlIoIlVucmVjb2duaXplZCBzY3NpIHNlbnNlOiByY29kZT0leCBsZW5ndGg9JWRcbiIsCisJCQlzc2RiLT5yZXNwb25zZV9jb2RlLCBzZW5zZV9sZW4pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlvc2kgPSBvc2kgPyA6ICZsb2NhbF9vc2k7CisJbWVtc2V0KG9zaSwgMCwgc2l6ZW9mKCpvc2kpKTsKKwlvc2ktPmtleSA9IHNzZGItPnNlbnNlX2tleTsKKwlvc2ktPmFkZGl0aW9uYWxfY29kZSA9IGJlMTZfdG9fY3B1KHNzZGItPmFkZGl0aW9uYWxfc2Vuc2VfY29kZSk7CisJb3JpZ2luYWxfc2Vuc2VfbGVuID0gc3NkYi0+YWRkaXRpb25hbF9zZW5zZV9sZW5ndGggKyA4OworCisjaWYgKENPTkZJR19TQ1NJX09TRF9EUFJJTlRfU0VOU0UgPT0gMSkKKwlpZiAoX19jdXJfc2Vuc2VfbmVlZF9vdXRwdXQpCisJCV9fY3VyX3NlbnNlX25lZWRfb3V0cHV0ID0gKG9zaS0+a2V5ID4gc2NzaV9za19yZWNvdmVyZWRfZXJyb3IpOworI2VuZGlmCisJT1NEX1NFTlNFX1BSSU5UMSgiTWFpbiBTZW5zZSBpbmZvcm1hdGlvbiBrZXk9MHgleCBsZW5ndGgoJWQsICVkKSAiCisJCQkiYWRkaXRpb25hbF9jb2RlPTB4JXhcbiIsCisJCQlvc2ktPmtleSwgb3JpZ2luYWxfc2Vuc2VfbGVuLCBzZW5zZV9sZW4sCisJCQlvc2ktPmFkZGl0aW9uYWxfY29kZSk7CisKKwlpZiAob3JpZ2luYWxfc2Vuc2VfbGVuIDwgc2Vuc2VfbGVuKQorCQlzZW5zZV9sZW4gPSBvcmlnaW5hbF9zZW5zZV9sZW47CisKKwljdXJfZGVzY3JpcHRvciA9IHNzZGItPnNzZDsKKwlzZW5zZV9sZW4gLT0gc2l6ZW9mKCpzc2RiKTsKKwl3aGlsZSAoc2Vuc2VfbGVuID4gMCkgeworCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9kZXNjcmlwdG9yICpzc2QgPSBjdXJfZGVzY3JpcHRvcjsKKwkJaW50IGN1cl9sZW4gPSBzc2QtPmFkZGl0aW9uYWxfbGVuZ3RoICsgMjsKKworCQlzZW5zZV9sZW4gLT0gY3VyX2xlbjsKKworCQlpZiAoc2Vuc2VfbGVuIDwgMCkKKwkJCWJyZWFrOyAvKiBzZW5zZSB3YXMgdHJ1bmNhdGVkICovCisKKwkJc3dpdGNoIChzc2QtPmRlc2NyaXB0b3JfdHlwZSkgeworCQljYXNlIHNjc2lfc2Vuc2VfaW5mb3JtYXRpb246CisJCWNhc2Ugc2NzaV9zZW5zZV9jb21tYW5kX3NwZWNpZmljX2luZm9ybWF0aW9uOgorCQl7CisJCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9jb21tYW5kX3NwZWNpZmljX2RhdGFfZGVzY3JpcHRvcgorCQkJCSpzc2NkID0gY3VyX2Rlc2NyaXB0b3I7CisKKwkJCW9zaS0+Y29tbWFuZF9pbmZvID0KKwkJCQlnZXRfdW5hbGlnbmVkX2JlNjQoJnNzY2QtPmluZm9ybWF0aW9uKSA7CisJCQlPU0RfU0VOU0VfUFJJTlQyKAorCQkJCSJjb21tYW5kX3NwZWNpZmljX2luZm9ybWF0aW9uIDB4JWxseCBcbiIsCisJCQkJX0xMVShvc2ktPmNvbW1hbmRfaW5mbykpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBzY3NpX3NlbnNlX2tleV9zcGVjaWZpYzoKKwkJeworCQkJc3RydWN0IHNjc2lfc2Vuc2Vfa2V5X3NwZWNpZmljX2RhdGFfZGVzY3JpcHRvcgorCQkJCSpzc2tzID0gY3VyX2Rlc2NyaXB0b3I7CisKKwkJCW9zaS0+c2Vuc2VfaW5mbyA9IGdldF91bmFsaWduZWRfYmUxNigmc3Nrcy0+dmFsdWUpOworCQkJT1NEX1NFTlNFX1BSSU5UMigKKwkJCQkic2Vuc2Vfa2V5X3NwZWNpZmljX2luZm9ybWF0aW9uICV1IgorCQkJCSJza3N2X2NkX2Jwdl9icCAoMHgleClcbiIsCisJCQkJb3NpLT5zZW5zZV9pbmZvLCBzc2tzLT5za3N2X2NkX2Jwdl9icCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIG9zZF9zZW5zZV9vYmplY3RfaWRlbnRpZmljYXRpb246CisJCXsgLypGSVhNRTogS2VlcCBmaXJzdCBub3QgbGFzdCwgU3RvcmUgaW4gYXJyYXkqLworCQkJc3RydWN0IG9zZF9zZW5zZV9pZGVudGlmaWNhdGlvbl9kYXRhX2Rlc2NyaXB0b3IKKwkJCQkqb3NpZGQgPSBjdXJfZGVzY3JpcHRvcjsKKworCQkJb3NpLT5ub3RfaW5pdGlhdGVkX2NvbW1hbmRfZnVuY3Rpb25zID0KKwkJCQlsZTMyX3RvX2NwdShvc2lkZC0+bm90X2luaXRpYXRlZF9mdW5jdGlvbnMpOworCQkJb3NpLT5jb21wbGV0ZWRfY29tbWFuZF9mdW5jdGlvbnMgPQorCQkJCWxlMzJfdG9fY3B1KG9zaWRkLT5jb21wbGV0ZWRfZnVuY3Rpb25zKTsKKwkJCW9zaS0+b2JqLnBhcnRpdGlvbiA9IGJlNjRfdG9fY3B1KG9zaWRkLT5wYXJ0aXRpb25faWQpOworCQkJb3NpLT5vYmouaWQgPSBiZTY0X3RvX2NwdShvc2lkZC0+b2JqZWN0X2lkKTsKKwkJCU9TRF9TRU5TRV9QUklOVDIoCisJCQkJIm9iamVjdF9pZGVudGlmaWNhdGlvbiBwaWQ9MHglbGx4IG9pZD0weCVsbHhcbiIsCisJCQkJX0xMVShvc2ktPm9iai5wYXJ0aXRpb24pLCBfTExVKG9zaS0+b2JqLmlkKSk7CisJCQlPU0RfU0VOU0VfUFJJTlQyKAorCQkJCSJub3RfaW5pdGlhdGVkX2JpdHMoJXgpICIKKwkJCQkiY29tcGxldGVkX2NvbW1hbmRfYml0cygleClcbiIsCisJCQkJb3NpLT5ub3RfaW5pdGlhdGVkX2NvbW1hbmRfZnVuY3Rpb25zLAorCQkJCW9zaS0+Y29tcGxldGVkX2NvbW1hbmRfZnVuY3Rpb25zKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2Ugb3NkX3NlbnNlX3Jlc3BvbnNlX2ludGVncml0eV9jaGVjazoKKwkJeworCQkJc3RydWN0IG9zZF9zZW5zZV9yZXNwb25zZV9pbnRlZ3JpdHlfY2hlY2tfZGVzY3JpcHRvcgorCQkJCSpvc3JpY2QgPSBjdXJfZGVzY3JpcHRvcjsKKwkJCWNvbnN0IHVuc2lnbmVkIGxlbiA9CisJCQkJCSAgc2l6ZW9mKG9zcmljZC0+aW50ZWdyaXR5X2NoZWNrX3ZhbHVlKTsKKwkJCWNoYXIga2V5X2R1bXBbbGVuKjQgKyAyXTsgLyogMm5pYmJsZXMrc3BhY2UrQVNDSUkgKi8KKworCQkJaGV4X2R1bXBfdG9fYnVmZmVyKG9zcmljZC0+aW50ZWdyaXR5X2NoZWNrX3ZhbHVlLCBsZW4sCisJCQkJICAgICAgIDMyLCAxLCBrZXlfZHVtcCwgc2l6ZW9mKGtleV9kdW1wKSwgdHJ1ZSk7CisJCQlPU0RfU0VOU0VfUFJJTlQyKCJyZXNwb25zZV9pbnRlZ3JpdHkgWyVzXVxuIiwga2V5X2R1bXApOworCQl9CisJCWNhc2Ugb3NkX3NlbnNlX2F0dHJpYnV0ZV9pZGVudGlmaWNhdGlvbjoKKwkJeworCQkJc3RydWN0IG9zZF9zZW5zZV9hdHRyaWJ1dGVzX2RhdGFfZGVzY3JpcHRvcgorCQkJCSpvc2FkZCA9IGN1cl9kZXNjcmlwdG9yOworCQkJaW50IGxlbiA9IG1pbihjdXJfbGVuLCBzZW5zZV9sZW4pOworCQkJaW50IGkgPSAwOworCQkJc3RydWN0IG9zZF9zZW5zZV9hdHRyICpwYXR0ciA9IG9zYWRkLT5zZW5zZV9hdHRyczsKKworCQkJd2hpbGUgKGxlbiA8IDApIHsKKwkJCQl1MzIgYXR0cl9wYWdlID0gYmUzMl90b19jcHUocGF0dHItPmF0dHJfcGFnZSk7CisJCQkJdTMyIGF0dHJfaWQgPSBiZTMyX3RvX2NwdShwYXR0ci0+YXR0cl9pZCk7CisKKwkJCQlpZiAoaSsrID09IDApIHsKKwkJCQkJb3NpLT5hdHRyLmF0dHJfcGFnZSA9IGF0dHJfcGFnZTsKKwkJCQkJb3NpLT5hdHRyLmF0dHJfaWQgPSBhdHRyX2lkOworCQkJCX0KKworCQkJCWlmIChiYWRfYXR0cl9saXN0ICYmIG1heF9hdHRyKSB7CisJCQkJCWJhZF9hdHRyX2xpc3QtPmF0dHJfcGFnZSA9IGF0dHJfcGFnZTsKKwkJCQkJYmFkX2F0dHJfbGlzdC0+YXR0cl9pZCA9IGF0dHJfaWQ7CisJCQkJCWJhZF9hdHRyX2xpc3QrKzsKKwkJCQkJbWF4X2F0dHItLTsKKwkJCQl9CisJCQkJT1NEX1NFTlNFX1BSSU5UMigKKwkJCQkJIm9zZF9zZW5zZV9hdHRyaWJ1dGVfaWRlbnRpZmljYXRpb24iCisJCQkJCSJhdHRyX3BhZ2U9MHgleCBhdHRyX2lkPTB4JXhcbiIsCisJCQkJCWF0dHJfcGFnZSwgYXR0cl9pZCk7CisJCQl9CisJCX0KKwkJLypUaGVzZSBhcmUgbm90IGxlZ2FsIGZvciBPU0QqLworCQljYXNlIHNjc2lfc2Vuc2VfZmllbGRfcmVwbGFjZWFibGVfdW5pdDoKKwkJCU9TRF9TRU5TRV9QUklOVDIoInNjc2lfc2Vuc2VfZmllbGRfcmVwbGFjZWFibGVfdW5pdFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBzY3NpX3NlbnNlX3N0cmVhbV9jb21tYW5kczoKKwkJCU9TRF9TRU5TRV9QUklOVDIoInNjc2lfc2Vuc2Vfc3RyZWFtX2NvbW1hbmRzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIHNjc2lfc2Vuc2VfYmxvY2tfY29tbWFuZHM6CisJCQlPU0RfU0VOU0VfUFJJTlQyKCJzY3NpX3NlbnNlX2Jsb2NrX2NvbW1hbmRzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIHNjc2lfc2Vuc2VfYXRhX3JldHVybjoKKwkJCU9TRF9TRU5TRV9QUklOVDIoInNjc2lfc2Vuc2VfYXRhX3JldHVyblxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChzc2QtPmRlc2NyaXB0b3JfdHlwZSA8PSBzY3NpX3NlbnNlX1Jlc2VydmVkX2xhc3QpCisJCQkJT1NEX1NFTlNFX1BSSU5UMigKKwkJCQkJInNjc2lfc2Vuc2UgUmVzZXJ2ZWQgZGVzY3JpcHRvciAoMHgleCkiLAorCQkJCQlzc2QtPmRlc2NyaXB0b3JfdHlwZSk7CisJCQllbHNlCisJCQkJT1NEX1NFTlNFX1BSSU5UMigKKwkJCQkJInNjc2lfc2Vuc2UgVmVuZG9yIGRlc2NyaXB0b3IgKDB4JXgpIiwKKwkJCQkJc3NkLT5kZXNjcmlwdG9yX3R5cGUpOworCQl9CisKKwkJY3VyX2Rlc2NyaXB0b3IgKz0gY3VyX2xlbjsKKwl9CisKKwlyZXR1cm4gKG9zaS0+a2V5ID4gc2NzaV9za19yZWNvdmVyZWRfZXJyb3IpID8gLUVJTyA6IDA7Cit9CitFWFBPUlRfU1lNQk9MKG9zZF9yZXFfZGVjb2RlX3NlbnNlX2Z1bGwpOworCisvKgorICogSW1wbGVtZW50YXRpb24gb2Ygb3NkX3NlYy5oIEFQSQorICogVE9ETzogTW92ZSB0byBhIHNlcGFyYXRlIG9zZF9zZWMuYyBmaWxlIGF0IGEgbGF0ZXIgc3RhZ2UuCisgKi8KKworZW51bSB7IE9TRF9TRUNfQ0FQX1YxX0FMTF9DQVBTID0KKwlPU0RfU0VDX0NBUF9BUFBFTkQgfCBPU0RfU0VDX0NBUF9PQkpfTUdNVCB8IE9TRF9TRUNfQ0FQX1JFTU9WRSAgIHwKKwlPU0RfU0VDX0NBUF9DUkVBVEUgfCBPU0RfU0VDX0NBUF9TRVRfQVRUUiB8IE9TRF9TRUNfQ0FQX0dFVF9BVFRSIHwKKwlPU0RfU0VDX0NBUF9XUklURSAgfCBPU0RfU0VDX0NBUF9SRUFEICAgICB8IE9TRF9TRUNfQ0FQX1BPTF9TRUMgIHwKKwlPU0RfU0VDX0NBUF9HTE9CQUwgfCBPU0RfU0VDX0NBUF9ERVZfTUdNVAorfTsKKworZW51bSB7IE9TRF9TRUNfQ0FQX1YyX0FMTF9DQVBTID0KKwlPU0RfU0VDX0NBUF9WMV9BTExfQ0FQUyB8IE9TRF9TRUNfQ0FQX1FVRVJZIHwgT1NEX1NFQ19DQVBfTV9PQkpFQ1QKK307CisKK3ZvaWQgb3NkX3NlY19pbml0X25vc2VjX2RvYWxsX2NhcHModm9pZCAqY2FwcywKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCBib29sIGlzX2NvbGxlY3Rpb24sIGNvbnN0IGJvb2wgaXNfdjEpCit7CisJc3RydWN0IG9zZF9jYXBhYmlsaXR5ICpjYXAgPSBjYXBzOworCXU4IHR5cGU7CisJdTggZGVzY3JpcHRvcl90eXBlOworCisJaWYgKGxpa2VseShvYmotPmlkKSkgeworCQlpZiAodW5saWtlbHkoaXNfY29sbGVjdGlvbikpIHsKKwkJCXR5cGUgPSBPU0RfU0VDX09CSl9DT0xMRUNUSU9OOworCQkJZGVzY3JpcHRvcl90eXBlID0gaXNfdjEgPyBPU0RfU0VDX09CSl9ERVNDX09CSiA6CisJCQkJCQkgIE9TRF9TRUNfT0JKX0RFU0NfQ09MOworCQl9IGVsc2UgeworCQkJdHlwZSA9IE9TRF9TRUNfT0JKX1VTRVI7CisJCQlkZXNjcmlwdG9yX3R5cGUgPSBPU0RfU0VDX09CSl9ERVNDX09CSjsKKwkJfQorCQlXQVJOX09OKCFvYmotPnBhcnRpdGlvbik7CisJfSBlbHNlIHsKKwkJdHlwZSA9IG9iai0+cGFydGl0aW9uID8gT1NEX1NFQ19PQkpfUEFSVElUSU9OIDoKKwkJCQkJT1NEX1NFQ19PQkpfUk9PVDsKKwkJZGVzY3JpcHRvcl90eXBlID0gT1NEX1NFQ19PQkpfREVTQ19QQVI7CisJfQorCisJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKKworCWNhcC0+aC5mb3JtYXQgPSBPU0RfU0VDX0NBUF9GT1JNQVRfVkVSMTsKKwljYXAtPmguaW50ZWdyaXR5X2FsZ29yaXRobV9fa2V5X3ZlcnNpb24gPSAwOyAvKiBNQUtFX0JZVEUoMCwgMCk7ICovCisJY2FwLT5oLnNlY3VyaXR5X21ldGhvZCA9IE9TRF9TRUNfTk9TRUM7CisvKgljYXAtPmV4cGlyYXRpb25fdGltZTsKKwljYXAtPkFVRElUWzMwLTEwXTsKKwljYXAtPmRpc2NyaW1pbmF0b3JbNDItMzBdOworCWNhcC0+b2JqZWN0X2NyZWF0ZWRfdGltZTsgKi8KKwljYXAtPmgub2JqZWN0X3R5cGUgPSB0eXBlOworCW9zZF9zZWNfc2V0X2NhcHMoJmNhcC0+aCwgT1NEX1NFQ19DQVBfVjFfQUxMX0NBUFMpOworCWNhcC0+aC5vYmplY3RfZGVzY3JpcHRvcl90eXBlID0gZGVzY3JpcHRvcl90eXBlOworCWNhcC0+b2Qub2JqX2Rlc2MucG9saWN5X2FjY2Vzc190YWcgPSAwOworCWNhcC0+b2Qub2JqX2Rlc2MuYWxsb3dlZF9wYXJ0aXRpb25faWQgPSBjcHVfdG9fYmU2NChvYmotPnBhcnRpdGlvbik7CisJY2FwLT5vZC5vYmpfZGVzYy5hbGxvd2VkX29iamVjdF9pZCA9IGNwdV90b19iZTY0KG9iai0+aWQpOworfQorRVhQT1JUX1NZTUJPTChvc2Rfc2VjX2luaXRfbm9zZWNfZG9hbGxfY2Fwcyk7CisKKy8qIEZJWE1FOiBFeHRyYWN0IHZlcnNpb24gZnJvbSBjYXBzIHBvaW50ZXIuCisgKiAgICAgICAgQWxzbyBQZXRlJ3MgdGFyZ2V0IG9ubHkgc3VwcG9ydHMgY2FwcyBmcm9tIE9TRHYxIGZvciBub3cKKyAqLwordm9pZCBvc2Rfc2V0X2NhcHMoc3RydWN0IG9zZF9jZGIgKmNkYiwgY29uc3Qgdm9pZCAqY2FwcykKK3sKKwlib29sIGlzX3ZlcjEgPSB0cnVlOworCS8qIE5PVEU6IFRoZXkgc3RhcnQgYXQgc2FtZSBhZGRyZXNzICovCisJbWVtY3B5KCZjZGItPnYxLmNhcHMsIGNhcHMsIGlzX3ZlcjEgPyBPU0R2MV9DQVBfTEVOIDogT1NEX0NBUF9MRU4pOworfQorCitib29sIG9zZF9pc19zZWNfYWxsZGF0YShzdHJ1Y3Qgb3NkX3NlY3VyaXR5X3BhcmFtZXRlcnMgKnNlY19wYXJtcyBfX3VudXNlZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgb3NkX3NlY19zaWduX2NkYihzdHJ1Y3Qgb3NkX2NkYiAqb2NkYiBfX3VudXNlZCwgY29uc3QgdTggKmNhcF9rZXkgX191bnVzZWQpCit7Cit9CisKK3ZvaWQgb3NkX3NlY19zaWduX2RhdGEodm9pZCAqZGF0YV9pbnRlZyBfX3VudXNlZCwKKwkJICAgICAgIHN0cnVjdCBiaW8gKmJpbyBfX3VudXNlZCwgY29uc3QgdTggKmNhcF9rZXkgX191bnVzZWQpCit7Cit9CisKKy8qCisgKiBEZWNsYXJlZCBpbiBvc2RfcHJvdG9jb2wuaAorICogNC4xMi41IERhdGEtSW4gYW5kIERhdGEtT3V0IGJ1ZmZlciBvZmZzZXRzCisgKiBieXRlIG9mZnNldCA9IG1hbnRpc3NhICogKDJeKGV4cG9uZW50KzgpKQorICogUmV0dXJucyB0aGUgc21hbGxlc3QgYWxsb3dlZCBlbmNvZGVkIG9mZnNldCB0aGF0IGNvbnRhaW5zIGdpdmVuIEBvZmZzZXQKKyAqIFRoZSBhY3R1YWwgZW5jb2RlZCBvZmZzZXQgcmV0dXJuZWQgaXMgQG9mZnNldCArICpAcGFkZGluZy4KKyAqLworb3NkX2NkYl9vZmZzZXQgX19vc2RfZW5jb2RlX29mZnNldCgKKwl1NjQgb2Zmc2V0LCB1bnNpZ25lZCAqcGFkZGluZywgaW50IG1pbl9zaGlmdCwgaW50IG1heF9zaGlmdCkKK3sKKwl1NjQgdHJ5X29mZnNldCA9IC0xLCBtb2QsIGFsaWduOworCW9zZF9jZGJfb2Zmc2V0IGJlMzJfb2Zmc2V0OworCWludCBzaGlmdDsKKworCSpwYWRkaW5nID0gMDsKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHNoaWZ0ID0gbWluX3NoaWZ0OyBzaGlmdCA8IG1heF9zaGlmdDsgKytzaGlmdCkgeworCQl0cnlfb2Zmc2V0ID0gb2Zmc2V0ID4+IHNoaWZ0OworCQlpZiAodHJ5X29mZnNldCA8ICgxIDw8IE9TRF9PRkZTRVRfTUFYX0JJVFMpKQorCQkJYnJlYWs7CisJfQorCisJQlVHX09OKHNoaWZ0ID09IG1heF9zaGlmdCk7CisKKwlhbGlnbiA9IDEgPDwgc2hpZnQ7CisJbW9kID0gb2Zmc2V0ICYgKGFsaWduIC0gMSk7CisJaWYgKG1vZCkgeworCQkqcGFkZGluZyA9IGFsaWduIC0gbW9kOworCQl0cnlfb2Zmc2V0ICs9IDE7CisJfQorCisJdHJ5X29mZnNldCB8PSAoKHNoaWZ0IC0gOCkgJiAweGYpIDw8IDI4OworCWJlMzJfb2Zmc2V0ID0gY3B1X3RvX2JlMzIoKHUzMil0cnlfb2Zmc2V0KTsKKworCU9TRF9ERUJVRygib2Zmc2V0PSVsbHUgbWFudGlzc2E9JWxsdSBleHA9JWQgZW5jb2RlZD0leCBwYWQ9JWRcbiIsCisJCSBfTExVKG9mZnNldCksIF9MTFUodHJ5X29mZnNldCAmIDB4MEZGRkZGRkYpLCBzaGlmdCwKKwkJIGJlMzJfb2Zmc2V0LCAqcGFkZGluZyk7CisJcmV0dXJuIGJlMzJfb2Zmc2V0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zZC9vc2RfdWxkLmMgYi9kcml2ZXJzL3Njc2kvb3NkL29zZF91bGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGIxYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfdWxkLmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBvc2RfdWxkLmMgLSBPU0QgVXBwZXIgTGF5ZXIgRHJpdmVyCisgKgorICogQSBMaW51eCBkcml2ZXIgbW9kdWxlIHRoYXQgcmVnaXN0ZXJzIGFzIGEgU0NTSSBVTEQgYW5kIHByb2JlcworICogZm9yIE9TRCB0eXBlIFNDU0kgZGV2aWNlcy4KKyAqIEl0J3MgbWFpbiBmdW5jdGlvbiBpcyB0byBleHBvcnQgb3NkIGRldmljZXMgdG8gaW4ta2VybmVsIHVzZXJzIGxpa2UKKyAqIG9zZGZzIGFuZCBwTkZTLW9iamVjdHMtTEQuIEl0IGFsc28gcHJvdmlkZXMgb25lIGlvY3RsIGZvciBydW5uaW5nCisgKiBpbiBLZXJuZWwgdGVzdHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3JzOgorICogICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICogICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUGFuYXNhcyBjb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+CisKKyNpbmNsdWRlIDxzY3NpL29zZF9pbml0aWF0b3IuaD4KKyNpbmNsdWRlIDxzY3NpL29zZF9zZWMuaD4KKworI2luY2x1ZGUgIm9zZF9kZWJ1Zy5oIgorCisjaWZuZGVmIFRZUEVfT1NECisjICBkZWZpbmUgVFlQRV9PU0QgMHgxMQorI2VuZGlmCisKKyNpZm5kZWYgU0NTSV9PU0RfTUFKT1IKKyMgIGRlZmluZSBTQ1NJX09TRF9NQUpPUiAyNjAKKyNlbmRpZgorI2RlZmluZSBTQ1NJX09TRF9NQVhfTUlOT1IgNjQKKworc3RhdGljIGNvbnN0IGNoYXIgb3NkX25hbWVbXSA9ICJvc2QiOworc3RhdGljIGNvbnN0IGNoYXIgKm9zZF92ZXJzaW9uX3N0cmluZyA9ICJvcGVuLW9zZCAwLjEuMCI7Citjb25zdCBjaGFyIG9zZF9zeW1saW5rW10gPSAic2NzaV9vc2QiOworCitNT0RVTEVfQVVUSE9SKCJCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvcGVuLW9zZCBVcHBlci1MYXllci1Ecml2ZXIgb3NkLmtvIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX09TRF9NQUpPUik7CitNT0RVTEVfQUxJQVNfU0NTSV9ERVZJQ0UoVFlQRV9PU0QpOworCitzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgeworCWludCBtaW5vcjsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCBjZGV2IGNkZXY7CisJc3RydWN0IG9zZF9kZXYgb2Q7CisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CisJc3RydWN0IGRldmljZSAqY2xhc3NfbWVtYmVyOworfTsKKworc3RhdGljIHZvaWQgX191bGRfZ2V0KHN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkKTsKK3N0YXRpYyB2b2lkIF9fdWxkX3B1dChzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZCk7CisKKy8qCisgKiBDaGFyIERldmljZSBvcGVyYXRpb25zCisgKi8KKworc3RhdGljIGludCBvc2RfdWxkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKKwkJCQkJc3RydWN0IG9zZF91bGRfZGV2aWNlLCBjZGV2KTsKKworCV9fdWxkX2dldChvdWQpOworCS8qIGNhY2hlIG9zZF91bGRfZGV2aWNlIG9uIGZpbGUgaGFuZGxlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gb3VkOworCU9TRF9ERUJVRygib3NkX3VsZF9vcGVuICVwXG4iLCBvdWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9zZF91bGRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCU9TRF9ERUJVRygib3NkX3VsZF9yZWxlYXNlICVwXG4iLCBmaWxlLT5wcml2YXRlX2RhdGEpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJX191bGRfcHV0KG91ZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiBPbmx5IG9uZSB2ZWN0b3IgZm9yIG5vdyAqLwordW5zaWduZWQgZ190ZXN0X2lvY3RsOworZG9fdGVzdF9mbiAqZ19kb190ZXN0OworCitpbnQgb3NkdWxkX3JlZ2lzdGVyX3Rlc3QodW5zaWduZWQgaW9jdGwsIGRvX3Rlc3RfZm4gKmRvX3Rlc3QpCit7CisJaWYgKGdfdGVzdF9pb2N0bCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlnX3Rlc3RfaW9jdGwgPSBpb2N0bDsKKwlnX2RvX3Rlc3QgPSBkb190ZXN0OworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvc2R1bGRfcmVnaXN0ZXJfdGVzdCk7CisKK3ZvaWQgb3NkdWxkX3VucmVnaXN0ZXJfdGVzdCh1bnNpZ25lZCBpb2N0bCkKK3sKKwlpZiAoaW9jdGwgPT0gZ190ZXN0X2lvY3RsKSB7CisJCWdfdGVzdF9pb2N0bCA9IDA7CisJCWdfZG9fdGVzdCA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTChvc2R1bGRfdW5yZWdpc3Rlcl90ZXN0KTsKKworc3RhdGljIGRvX3Rlc3RfZm4gKl9maW5kX2lvY3RsKHVuc2lnbmVkIGNtZCkKK3sKKwlpZiAoZ190ZXN0X2lvY3RsID09IGNtZCkKKwkJcmV0dXJuIGdfZG9fdGVzdDsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgbG9uZyBvc2RfdWxkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisJZG9fdGVzdF9mbiAqZG9fdGVzdDsKKworCWRvX3Rlc3QgPSBfZmluZF9pb2N0bChjbWQpOworCWlmIChkb190ZXN0KQorCQlyZXQgPSBkb190ZXN0KCZvdWQtPm9kLCBjbWQsIGFyZyk7CisJZWxzZSB7CisJCU9TRF9FUlIoIlVua25vd24gaW9jdGwgJWQ6IG9zZF91bGRfZGV2aWNlPSVwXG4iLCBjbWQsIG91ZCk7CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb3NkX2ZvcHMgPSB7CisJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gb3NkX3VsZF9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IG9zZF91bGRfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBvc2RfdWxkX2lvY3RsLAorfTsKKworc3RydWN0IG9zZF9kZXYgKm9zZHVsZF9wYXRoX2xvb2t1cChjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgY2RldiAqY2RldjsKKwlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKnVuaW5pdGlhbGl6ZWRfdmFyKG91ZCk7CisJaW50IGVycm9yOworCisJaWYgKCFwYXRoIHx8ICEqcGF0aCkgeworCQlPU0RfRVJSKCJNb3VudCB3aXRoICFwYXRoIHx8ICEqcGF0aFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWVycm9yID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX0ZPTExPVywgJm5kKTsKKwlpZiAoZXJyb3IpIHsKKwkJT1NEX0VSUigicGF0aF9sb29rdXAgb2YgJXMgZmFpbGQ9PiVkXG4iLCBwYXRoLCBlcnJvcik7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwl9CisKKwlpbm9kZSA9IG5kLnBhdGguZGVudHJ5LT5kX2lub2RlOworCWVycm9yID0gLUVJTlZBTDsgLyogTm90IHRoZSByaWdodCBkZXZpY2UgZS5nIG9zZF91bGRfZGV2aWNlICovCisJaWYgKCFTX0lTQ0hSKGlub2RlLT5pX21vZGUpKSB7CisJCU9TRF9ERUJVRygiIVNfSVNDSFIoKVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWNkZXYgPSBpbm9kZS0+aV9jZGV2OworCWlmICghY2RldikgeworCQlPU0RfRVJSKCJCZWZvcmUgbW91bnRpbmcgYW4gT1NEIEJhc2VkIGZpbGVzeXN0ZW1cbiIpOworCQlPU0RfRVJSKCIgIHVzZXItbW9kZSBtdXN0IG9wZW4rY2xvc2UgdGhlICVzIGRldmljZVxuIiwgcGF0aCk7CisJCU9TRF9FUlIoIiAgRXhhbXBsZTogYmFzaDogZWNobyA8ICVzXG4iLCBwYXRoKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhlIE1hZ2ljIHdhbmQuIElzIGl0IG91ciBjaGFyLWRldiAqLworCS8qIFRPRE86IFN1cHBvcnQgc2cgZGV2aWNlcyAqLworCWlmIChjZGV2LT5vd25lciAhPSBUSElTX01PRFVMRSkgeworCQlPU0RfRVJSKCJFcnJvciBtb3VudGluZyAlcyAtIGlzIG5vdCBhbiBPU0QgZGV2aWNlXG4iLCBwYXRoKTsKKwkJZ290byBvdXQ7CisJfQorCisJb3VkID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBvc2RfdWxkX2RldmljZSwgY2Rldik7CisKKwlfX3VsZF9nZXQob3VkKTsKKwllcnJvciA9IDA7CisKK291dDoKKwlwYXRoX3B1dCgmbmQucGF0aCk7CisJcmV0dXJuIGVycm9yID8gRVJSX1BUUihlcnJvcikgOiAmb3VkLT5vZDsKK30KK0VYUE9SVF9TWU1CT0wob3NkdWxkX3BhdGhfbG9va3VwKTsKKwordm9pZCBvc2R1bGRfcHV0X2RldmljZShzdHJ1Y3Qgb3NkX2RldiAqb2QpCit7CisJaWYgKG9kKSB7CisJCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkID0gY29udGFpbmVyX29mKG9kLAorCQkJCQkJc3RydWN0IG9zZF91bGRfZGV2aWNlLCBvZCk7CisKKwkJX191bGRfcHV0KG91ZCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChvc2R1bGRfcHV0X2RldmljZSk7CisKKy8qCisgKiBTY3NpIERldmljZSBvcGVyYXRpb25zCisgKi8KKworc3RhdGljIGludCBfX2RldGVjdF9vc2Qoc3RydWN0IG9zZF91bGRfZGV2aWNlICpvdWQpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSA9IG91ZC0+b2Quc2NzaV9kZXZpY2U7CisJY2hhciBjYXBzW09TRF9DQVBfTEVOXTsKKwlpbnQgZXJyb3I7CisKKwkvKiBzZW5kaW5nIGEgdGVzdF91bml0X3JlYWR5IGFzIGZpcnN0IGNvbW1hbmQgc2VlbXMgdG8gYmUgbmVlZGVkCisJICogYnkgc29tZSB0YXJnZXRzCisJICovCisJT1NEX0RFQlVHKCJzdGFydCBzY3NpX3Rlc3RfdW5pdF9yZWFkeSAlcCAlcCAlcFxuIiwKKwkJCW91ZCwgc2NzaV9kZXZpY2UsIHNjc2lfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlKTsKKwllcnJvciA9IHNjc2lfdGVzdF91bml0X3JlYWR5KHNjc2lfZGV2aWNlLCAxMCpIWiwgNSwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlPU0RfRVJSKCJ3YXJuaW5nOiBzY3NpX3Rlc3RfdW5pdF9yZWFkeSBmYWlsZWRcbiIpOworCisJb3NkX3NlY19pbml0X25vc2VjX2RvYWxsX2NhcHMoY2FwcywgJm9zZF9yb290X29iamVjdCwgZmFsc2UsIHRydWUpOworCWlmIChvc2RfYXV0b19kZXRlY3RfdmVyKCZvdWQtPm9kLCBjYXBzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyAqb3NkX3N5c2ZzX2NsYXNzOworc3RhdGljIERFRklORV9JREEob3NkX21pbm9yX2lkYSk7CisKK3N0YXRpYyBpbnQgb3NkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZDsKKwlpbnQgbWlub3I7CisJaW50IGVycm9yOworCisJaWYgKHNjc2lfZGV2aWNlLT50eXBlICE9IFRZUEVfT1NEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvIHsKKwkJaWYgKCFpZGFfcHJlX2dldCgmb3NkX21pbm9yX2lkYSwgR0ZQX0tFUk5FTCkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQllcnJvciA9IGlkYV9nZXRfbmV3KCZvc2RfbWlub3JfaWRhLCAmbWlub3IpOworCX0gd2hpbGUgKGVycm9yID09IC1FQUdBSU4pOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKG1pbm9yID49IFNDU0lfT1NEX01BWF9NSU5PUikgeworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmV0cmFjdF9taW5vcjsKKwl9CisKKwllcnJvciA9IC1FTk9NRU07CisJb3VkID0ga3phbGxvYyhzaXplb2YoKm91ZCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IG91ZCkKKwkJZ290byBlcnJfcmV0cmFjdF9taW5vcjsKKworCWtyZWZfaW5pdCgmb3VkLT5rcmVmKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBvdWQpOworCW91ZC0+bWlub3IgPSBtaW5vcjsKKworCS8qIGFsbG9jYXRlIGEgZGlzayBhbmQgc2V0IGl0IHVwICovCisJLyogRklYTUU6IGRvIHdlIG5lZWQgdGhpcyBzaW5jZSBzZyBoYXMgYWxyZWFkeSBkb25lIHRoYXQgKi8KKwlkaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIWRpc2spIHsKKwkJT1NEX0VSUigiYWxsb2NfZGlzayBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlX29zZDsKKwl9CisJZGlzay0+bWFqb3IgPSBTQ1NJX09TRF9NQUpPUjsKKwlkaXNrLT5maXJzdF9taW5vciA9IG91ZC0+bWlub3I7CisJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJvc2QlZCIsIG91ZC0+bWlub3IpOworCW91ZC0+ZGlzayA9IGRpc2s7CisKKwkvKiBob2xkIG9uZSBtb3JlIHJlZmVyZW5jZSB0byB0aGUgc2NzaV9kZXZpY2UgdGhhdCB3aWxsIGdldCByZWxlYXNlZAorCSAqIGluIF9fcmVsZWFzZSwgaW4gY2FzZSBhIGxvZ291dCBpcyBoYXBwZW5pbmcgd2hpbGUgZnMgaXMgbW91bnRlZAorCSAqLworCXNjc2lfZGV2aWNlX2dldChzY3NpX2RldmljZSk7CisJb3NkX2Rldl9pbml0KCZvdWQtPm9kLCBzY3NpX2RldmljZSk7CisKKwkvKiBEZXRlY3QgdGhlIE9TRCBWZXJzaW9uICovCisJZXJyb3IgPSBfX2RldGVjdF9vc2Qob3VkKTsKKwlpZiAoZXJyb3IpIHsKKwkJT1NEX0VSUigib3NkIGRldGVjdGlvbiBmYWlsZWQsIG5vbi1jb21wYXRpYmxlIE9TRCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9wdXRfZGlzazsKKwl9CisKKwkvKiBpbml0IHRoZSBjaGFyLWRldmljZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXItbW9kZSAqLworCWNkZXZfaW5pdCgmb3VkLT5jZGV2LCAmb3NkX2ZvcHMpOworCW91ZC0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCWVycm9yID0gY2Rldl9hZGQoJm91ZC0+Y2RldiwKKwkJCSBNS0RFVihTQ1NJX09TRF9NQUpPUiwgb3VkLT5taW5vciksIDEpOworCWlmIChlcnJvcikgeworCQlPU0RfRVJSKCJjZGV2X2FkZCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9wdXRfZGlzazsKKwl9CisJa29iamVjdF9nZXQoJm91ZC0+Y2Rldi5rb2JqKTsgLyogMm5kIHJlZiBzZWUgb3NkX3JlbW92ZSgpICovCisKKwkvKiBjbGFzc19tZW1iZXIgKi8KKwlvdWQtPmNsYXNzX21lbWJlciA9IGRldmljZV9jcmVhdGUob3NkX3N5c2ZzX2NsYXNzLCBkZXYsCisJCU1LREVWKFNDU0lfT1NEX01BSk9SLCBvdWQtPm1pbm9yKSwgIiVzIiwgZGlzay0+ZGlza19uYW1lKTsKKwlpZiAoSVNfRVJSKG91ZC0+Y2xhc3NfbWVtYmVyKSkgeworCQlPU0RfRVJSKCJjbGFzc19kZXZpY2VfY3JlYXRlIGZhaWxlZFxuIik7CisJCWVycm9yID0gUFRSX0VSUihvdWQtPmNsYXNzX21lbWJlcik7CisJCWdvdG8gZXJyX3B1dF9jZGV2OworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShvdWQtPmNsYXNzX21lbWJlciwgb3VkKTsKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZzY3NpX2RldmljZS0+c2Rldl9nZW5kZXYua29iaiwKKwkJCQkgICZvdWQtPmNsYXNzX21lbWJlci0+a29iaiwgb3NkX3N5bWxpbmspOworCWlmIChlcnJvcikKKwkJT1NEX0VSUigid2FybmluZzogdW5hYmxlIHRvIG1ha2Ugc3ltbGlua1xuIik7CisKKwlPU0RfSU5GTygib3NkX3Byb2JlICVzXG4iLCBkaXNrLT5kaXNrX25hbWUpOworCXJldHVybiAwOworCitlcnJfcHV0X2NkZXY6CisJY2Rldl9kZWwoJm91ZC0+Y2Rldik7CitlcnJfcHV0X2Rpc2s6CisJc2NzaV9kZXZpY2VfcHV0KHNjc2lfZGV2aWNlKTsKKwlwdXRfZGlzayhkaXNrKTsKK2Vycl9mcmVlX29zZDoKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShvdWQpOworZXJyX3JldHJhY3RfbWlub3I6CisJaWRhX3JlbW92ZSgmb3NkX21pbm9yX2lkYSwgbWlub3IpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBvc2RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFvdWQgfHwgKG91ZC0+b2Quc2NzaV9kZXZpY2UgIT0gc2NzaV9kZXZpY2UpKSB7CisJCU9TRF9FUlIoIkhhbGYgY29va2VkIG9zZC1kZXZpY2UgJXAsJXAgfHwgJXAhPSVwIiwKKwkJCWRldiwgb3VkLCBvdWQgPyBvdWQtPm9kLnNjc2lfZGV2aWNlIDogTlVMTCwKKwkJCXNjc2lfZGV2aWNlKTsKKwl9CisKKwlzeXNmc19yZW1vdmVfbGluaygmb3VkLT5vZC5zY3NpX2RldmljZS0+c2Rldl9nZW5kZXYua29iaiwgb3NkX3N5bWxpbmspOworCisJaWYgKG91ZC0+Y2xhc3NfbWVtYmVyKQorCQlkZXZpY2VfZGVzdHJveShvc2Rfc3lzZnNfY2xhc3MsCisJCQkgICAgICAgTUtERVYoU0NTSV9PU0RfTUFKT1IsIG91ZC0+bWlub3IpKTsKKworCS8qIFdlIGhhdmUgMiByZWZlcmVuY2VzIHRvIHRoZSBjZGV2LiBPbmUgaXMgcmVsZWFzZWQgaGVyZQorCSAqIGFuZCBhbHNvIHRha2VzIGRvd24gdGhlIC9kZXYvb3NkWCBtYXBwaW5nLiBUaGUgc2Vjb25kCisJICogV2lsbCBiZSByZWxlYXNlZCBpbiBfX3JlbW92ZSgpIGFmdGVyIGFsbCB1c2VycyBoYXZlIHJlbGVhc2VkCisJICogdGhlIG9zZF91bGRfZGV2aWNlLgorCSAqLworCWlmIChvdWQtPmNkZXYub3duZXIpCisJCWNkZXZfZGVsKCZvdWQtPmNkZXYpOworCisJX191bGRfcHV0KG91ZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fcmVtb3ZlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkID0gY29udGFpbmVyX29mKGtyZWYsCisJCQkJCXN0cnVjdCBvc2RfdWxkX2RldmljZSwga3JlZik7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSA9IG91ZC0+b2Quc2NzaV9kZXZpY2U7CisKKwkvKiBub3cgbGV0IGRlbGV0ZSB0aGUgY2hhcl9kZXYgKi8KKwlrb2JqZWN0X3B1dCgmb3VkLT5jZGV2LmtvYmopOworCisJb3NkX2Rldl9maW5pKCZvdWQtPm9kKTsKKwlzY3NpX2RldmljZV9wdXQoc2NzaV9kZXZpY2UpOworCisJT1NEX0lORk8oIm9zZF9yZW1vdmUgJXNcbiIsCisJCSBvdWQtPmRpc2sgPyBvdWQtPmRpc2stPmRpc2tfbmFtZSA6IE5VTEwpOworCisJaWYgKG91ZC0+ZGlzaykKKwkJcHV0X2Rpc2sob3VkLT5kaXNrKTsKKworCWlkYV9yZW1vdmUoJm9zZF9taW5vcl9pZGEsIG91ZC0+bWlub3IpOworCWtmcmVlKG91ZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fdWxkX2dldChzdHJ1Y3Qgb3NkX3VsZF9kZXZpY2UgKm91ZCkKK3sKKwlrcmVmX2dldCgmb3VkLT5rcmVmKTsKK30KKworc3RhdGljIHZvaWQgX191bGRfcHV0KHN0cnVjdCBvc2RfdWxkX2RldmljZSAqb3VkKQoreworCWtyZWZfcHV0KCZvdWQtPmtyZWYsIF9fcmVtb3ZlKTsKK30KKworLyoKKyAqIEdsb2JhbCBkcml2ZXIgYW5kIHNjc2kgcmVnaXN0cmF0aW9uCisgKi8KKworc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBvc2RfZHJpdmVyID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmdlbmRydiA9IHsKKwkJLm5hbWUJCT0gb3NkX25hbWUsCisJCS5wcm9iZQkJPSBvc2RfcHJvYmUsCisJCS5yZW1vdmUJCT0gb3NkX3JlbW92ZSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBvc2RfdWxkX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJb3NkX3N5c2ZzX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBvc2Rfc3ltbGluayk7CisJaWYgKElTX0VSUihvc2Rfc3lzZnNfY2xhc3MpKSB7CisJCU9TRF9FUlIoIlVuYWJsZSB0byByZWdpc3RlciBzeXNmcyBjbGFzcyA9PiAlbGRcbiIsCisJCQlQVFJfRVJSKG9zZF9zeXNmc19jbGFzcykpOworCQlyZXR1cm4gUFRSX0VSUihvc2Rfc3lzZnNfY2xhc3MpOworCX0KKworCWVyciA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU0NTSV9PU0RfTUFKT1IsIDApLAorCQkJCSAgICAgU0NTSV9PU0RfTUFYX01JTk9SLCBvc2RfbmFtZSk7CisJaWYgKGVycikgeworCQlPU0RfRVJSKCJVbmFibGUgdG8gcmVnaXN0ZXIgbWFqb3IgJWQgZm9yIG9zZCBVTEQgPT4gJWRcbiIsCisJCQlTQ1NJX09TRF9NQUpPUiwgZXJyKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWVyciA9IHNjc2lfcmVnaXN0ZXJfZHJpdmVyKCZvc2RfZHJpdmVyLmdlbmRydik7CisJaWYgKGVycikgeworCQlPU0RfRVJSKCJzY3NpX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQgPT4gJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX291dF9jaHJkZXY7CisJfQorCisJT1NEX0lORk8oIkxPQURFRCAlc1xuIiwgb3NkX3ZlcnNpb25fc3RyaW5nKTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFNDU0lfT1NEX01BSk9SLCAwKSwgU0NTSV9PU0RfTUFYX01JTk9SKTsKK2Vycl9vdXQ6CisJY2xhc3NfZGVzdHJveShvc2Rfc3lzZnNfY2xhc3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvc2RfdWxkX2V4aXQodm9pZCkKK3sKKwlzY3NpX3VucmVnaXN0ZXJfZHJpdmVyKCZvc2RfZHJpdmVyLmdlbmRydik7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFNDU0lfT1NEX01BSk9SLCAwKSwgU0NTSV9PU0RfTUFYX01JTk9SKTsKKwljbGFzc19kZXN0cm95KG9zZF9zeXNmc19jbGFzcyk7CisJT1NEX0lORk8oIlVOTE9BREVEICVzXG4iLCBvc2RfdmVyc2lvbl9zdHJpbmcpOworfQorCittb2R1bGVfaW5pdChvc2RfdWxkX2luaXQpOworbW9kdWxlX2V4aXQob3NkX3VsZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IDBlYTc4ZDkuLmFjYjgzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMjgwLDggKzI4MCw4IEBACiAJCQlzdGF0aWMJaW50CW5vdHlldHByaW50ZWQgPSAxOwogCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICIlczpXOiBXYXJuaW5nICV4IChzdWdnLiBidCAweCV4LCBkcml2ZXIgYnQgMHgleCwgaG9zdCBidCAweCV4KS5cbiIsCi0JCQkgICAgIG5hbWUsIHJlc3VsdCwgc3VnZ2VzdGlvbihyZXN1bHQpLCBkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX01BU0ssCisJCQkgICAgICIlczpXOiBXYXJuaW5nICV4IChkcml2ZXIgYnQgMHgleCwgaG9zdCBidCAweCV4KS5cbiIsCisJCQkgICAgIG5hbWUsIHJlc3VsdCwgZHJpdmVyX2J5dGUocmVzdWx0KSwKIAkJCSAgICAgaG9zdF9ieXRlKHJlc3VsdCkpOwogCQkJaWYgKG5vdHlldHByaW50ZWQpIHsKIAkJCQlub3R5ZXRwcmludGVkID0gMDsKQEAgLTMxNywxOCArMzE3LDI1IEBACiAKIAogLyogV2FrZXVwIGZyb20gaW50ZXJydXB0ICovCi1zdGF0aWMgdm9pZCBvc3N0X3NsZWVwX2RvbmUodm9pZCAqZGF0YSwgY2hhciAqc2Vuc2UsIGludCByZXN1bHQsIGludCByZXNpZCkKK3N0YXRpYyB2b2lkIG9zc3RfZW5kX2FzeW5jKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCB1cGRhdGUpCiB7Ci0Jc3RydWN0IG9zc3RfcmVxdWVzdCAqU1JwbnQgPSBkYXRhOworCXN0cnVjdCBvc3N0X3JlcXVlc3QgKlNScG50ID0gcmVxLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3Qgb3NzdF90YXBlICpTVHAgPSBTUnBudC0+c3RwOworCXN0cnVjdCBycV9tYXBfZGF0YSAqbWRhdGEgPSAmU1JwbnQtPnN0cC0+YnVmZmVyLT5tYXBfZGF0YTsKIAotCW1lbWNweShTUnBudC0+c2Vuc2UsIHNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCVNUcC0+YnVmZmVyLT5jbWRzdGF0Lm1pZGxldmVsX3Jlc3VsdCA9IFNScG50LT5yZXN1bHQgPSByZXN1bHQ7CisJU1RwLT5idWZmZXItPmNtZHN0YXQubWlkbGV2ZWxfcmVzdWx0ID0gU1JwbnQtPnJlc3VsdCA9IHJlcS0+ZXJyb3JzOwogI2lmIERFQlVHCiAJU1RwLT53cml0ZV9wZW5kaW5nID0gMDsKICNlbmRpZgogCWlmIChTUnBudC0+d2FpdGluZykKIAkJY29tcGxldGUoU1JwbnQtPndhaXRpbmcpOworCisJaWYgKFNScG50LT5iaW8pIHsKKwkJa2ZyZWUobWRhdGEtPnBhZ2VzKTsKKwkJYmxrX3JxX3VubWFwX3VzZXIoU1JwbnQtPmJpbyk7CisJfQorCisJX19ibGtfcHV0X3JlcXVlc3QocmVxLT5xLCByZXEpOwogfQogCiAvKiBvc3N0X3JlcXVlc3QgbWVtb3J5IG1hbmFnZW1lbnQgKi8KQEAgLTM0Miw2ICszNDksNzQgQEAKIAlrZnJlZShzdHJlcSk7CiB9CiAKK3N0YXRpYyBpbnQgb3NzdF9leGVjdXRlKHN0cnVjdCBvc3N0X3JlcXVlc3QgKlNScG50LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjbWQsCisJCQlpbnQgY21kX2xlbiwgaW50IGRhdGFfZGlyZWN0aW9uLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sCisJCQlpbnQgdXNlX3NnLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMpCit7CisJc3RydWN0IHJlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKKwlzdHJ1Y3QgcnFfbWFwX2RhdGEgKm1kYXRhID0gJlNScG50LT5zdHAtPmJ1ZmZlci0+bWFwX2RhdGE7CisKKwlpbnQgZXJyID0gMDsKKwlpbnQgd3JpdGUgPSAoZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSk7CisKKwlyZXEgPSBibGtfZ2V0X3JlcXVlc3QoU1JwbnQtPnN0cC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCB3cml0ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEpCisJCXJldHVybiBEUklWRVJfRVJST1IgPDwgMjQ7CisKKwlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOworCisJU1JwbnQtPmJpbyA9IE5VTEw7CisKKwlpZiAodXNlX3NnKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csICpzZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopYnVmZmVyOworCQlpbnQgaTsKKworCQlwYWdlcyA9IGt6YWxsb2ModXNlX3NnICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYWdlcykKKwkJCWdvdG8gZnJlZV9yZXE7CisKKwkJZm9yX2VhY2hfc2coc2dsLCBzZywgdXNlX3NnLCBpKQorCQkJcGFnZXNbaV0gPSBzZ19wYWdlKHNnKTsKKworCQltZGF0YS0+bnVsbF9tYXBwZWQgPSAxOworCisJCW1kYXRhLT5wYWdlX29yZGVyID0gZ2V0X29yZGVyKHNnbFswXS5sZW5ndGgpOworCQltZGF0YS0+bnJfZW50cmllcyA9CisJCQlESVZfUk9VTkRfVVAoYnVmZmxlbiwgUEFHRV9TSVpFIDw8IG1kYXRhLT5wYWdlX29yZGVyKTsKKwkJbWRhdGEtPm9mZnNldCA9IDA7CisKKwkJZXJyID0gYmxrX3JxX21hcF91c2VyKHJlcS0+cSwgcmVxLCBtZGF0YSwgTlVMTCwgYnVmZmxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKHBhZ2VzKTsKKwkJCWdvdG8gZnJlZV9yZXE7CisJCX0KKwkJU1JwbnQtPmJpbyA9IHJlcS0+YmlvOworCQltZGF0YS0+cGFnZXMgPSBwYWdlczsKKworCX0gZWxzZSBpZiAoYnVmZmxlbikgeworCQllcnIgPSBibGtfcnFfbWFwX2tlcm4ocmVxLT5xLCByZXEsIGJ1ZmZlciwgYnVmZmxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfcmVxOworCX0KKworCXJlcS0+Y21kX2xlbiA9IGNtZF9sZW47CisJbWVtc2V0KHJlcS0+Y21kLCAwLCBCTEtfTUFYX0NEQik7IC8qIEFUQVBJIGhhdGVzIGdhcmJhZ2UgYWZ0ZXIgQ0RCICovCisJbWVtY3B5KHJlcS0+Y21kLCBjbWQsIHJlcS0+Y21kX2xlbik7CisJcmVxLT5zZW5zZSA9IFNScG50LT5zZW5zZTsKKwlyZXEtPnNlbnNlX2xlbiA9IDA7CisJcmVxLT50aW1lb3V0ID0gdGltZW91dDsKKwlyZXEtPnJldHJpZXMgPSByZXRyaWVzOworCXJlcS0+ZW5kX2lvX2RhdGEgPSBTUnBudDsKKworCWJsa19leGVjdXRlX3JxX25vd2FpdChyZXEtPnEsIE5VTEwsIHJlcSwgMSwgb3NzdF9lbmRfYXN5bmMpOworCXJldHVybiAwOworZnJlZV9yZXE6CisJYmxrX3B1dF9yZXF1ZXN0KHJlcSk7CisJcmV0dXJuIERSSVZFUl9FUlJPUiA8PCAyNDsKK30KKwogLyogRG8gdGhlIHNjc2kgY29tbWFuZC4gV2FpdHMgdW50aWwgY29tbWFuZCBwZXJmb3JtZWQgaWYgZG9fd2FpdCBpcyB0cnVlLgogICAgT3RoZXJ3aXNlIG9zc3Rfd3JpdGVfYmVoaW5kX2NoZWNrKCkgaXMgdXNlZCB0byBjaGVjayB0aGF0IHRoZSBjb21tYW5kCiAgICBoYXMgZmluaXNoZWQuICovCkBAIC00MDMsOCArNDc4LDggQEAKIAlTVHAtPmJ1ZmZlci0+Y21kc3RhdC5oYXZlX3NlbnNlID0gMDsKIAlTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQgPSAwOwogCi0JaWYgKHNjc2lfZXhlY3V0ZV9hc3luYyhTVHAtPmRldmljZSwgY21kLCBDT01NQU5EX1NJWkUoY21kWzBdKSwgZGlyZWN0aW9uLCBicCwgYnl0ZXMsCi0JCQl1c2Vfc2csIHRpbWVvdXQsIHJldHJpZXMsIFNScG50LCBvc3N0X3NsZWVwX2RvbmUsIEdGUF9LRVJORUwpKQorCWlmIChvc3N0X2V4ZWN1dGUoU1JwbnQsIGNtZCwgQ09NTUFORF9TSVpFKGNtZFswXSksIGRpcmVjdGlvbiwgYnAsIGJ5dGVzLAorCQkJIHVzZV9zZywgdGltZW91dCwgcmV0cmllcykpCiAJCS8qIGNvdWxkIG5vdCBhbGxvY2F0ZSB0aGUgYnVmZmVyIG9yIHJlcXVlc3Qgd2FzIHRvbyBsYXJnZSAqLwogCQkoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdCA9ICgtRUJVU1kpOwogCWVsc2UgaWYgKGRvX3dhaXQpIHsKQEAgLTUyODYsMTEgKzUzNjEsNiBAQAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKHByaW9yaXR5LCAoT1NfRlJBTUVfU0laRSAtIGdvdCA8PSBQQUdFX1NJWkUpID8gMCA6IG9yZGVyKTsKIAkJU1RidWZmZXItPnNnW3NlZ3NdLm9mZnNldCA9IDA7CiAJCWlmIChwYWdlID09IE5VTEwpIHsKLQkJCWlmIChPU19GUkFNRV9TSVpFIC0gZ290IDw9IChtYXhfc2VncyAtIHNlZ3MpICogYl9zaXplIC8gMiAmJiBvcmRlcikgewotCQkJCWJfc2l6ZSAvPSAyOyAgLyogTGFyZ2UgZW5vdWdoIGZvciB0aGUgcmVzdCBvZiB0aGUgYnVmZmVycyAqLwotCQkJCW9yZGVyLS07Ci0JCQkJY29udGludWU7Ci0JCQl9CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJvc3N0IDpXOiBGYWlsZWQgdG8gZW5sYXJnZSBidWZmZXIgdG8gJWQgYnl0ZXMuXG4iLAogCQkJCQkJT1NfRlJBTUVfU0laRSk7CiAjaWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmggYi9kcml2ZXJzL3Njc2kvb3NzdC5oCmluZGV4IDVhYTIyNzQuLjExZDI2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmgKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuaApAQCAtNTIwLDYgKzUyMCw3IEBACiAgIGludCBzeXNjYWxsX3Jlc3VsdDsKICAgc3RydWN0IG9zc3RfcmVxdWVzdCAqbGFzdF9TUnBudDsKICAgc3RydWN0IHN0X2NtZHN0YXR1cyBjbWRzdGF0OworICBzdHJ1Y3QgcnFfbWFwX2RhdGEgbWFwX2RhdGE7CiAgIHVuc2lnbmVkIGNoYXIgKmJfZGF0YTsKICAgb3NfYXV4X3QgKmF1eDsgICAgICAgICAgICAgICAvKiBvbnN0cmVhbSBBVVggc3RydWN0dXJlIGF0IGVuZCBvZiBlYWNoIGJsb2NrICAgICAqLwogICB1bnNpZ25lZCBzaG9ydCB1c2Vfc2c7ICAgICAgIC8qIHplcm8gb3IgbnVtYmVyIG9mIHMvZyBzZWdtZW50cyBmb3IgdGhpcyBhZGFwdGVyICovCkBAIC02MzQsNiArNjM1LDcgQEAKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBvc3N0X3RhcGUgKnN0cDsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKKwlzdHJ1Y3QgYmlvICpiaW87CiB9OwogCiAvKiBWYWx1ZXMgb2Ygd3JpdGVfdHlwZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggZjRjNTcyMi4uZWU5ZDQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0yNDQsMTIgKzI0NCw2IEBACiAJCWlmIChoYS0+b3B0cm9tX3N0YXRlICE9IFFMQV9TV0FJVElORykKIAkJCWJyZWFrOwogCi0JCWlmIChzdGFydCAmIDB4ZmZmKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIkludmFsaWQgc3RhcnQgcmVnaW9uIDB4JXgvMHgleC5cbiIsIHN0YXJ0LCBzaXplKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KIAkJaGEtPm9wdHJvbV9yZWdpb25fc3RhcnQgPSBzdGFydDsKIAkJaGEtPm9wdHJvbV9yZWdpb25fc2l6ZSA9IHN0YXJ0ICsgc2l6ZSA+IGhhLT5vcHRyb21fc2l6ZSA/CiAJCSAgICBoYS0+b3B0cm9tX3NpemUgLSBzdGFydCA6IHNpemU7CkBAIC0zMDMsOCArMjk3LDcgQEAKIAkJZWxzZSBpZiAoc3RhcnQgPT0gKGhhLT5mbHRfcmVnaW9uX2Jvb3QgKiA0KSB8fAogCQkgICAgc3RhcnQgPT0gKGhhLT5mbHRfcmVnaW9uX2Z3ICogNCkpCiAJCQl2YWxpZCA9IDE7Ci0JCWVsc2UgaWYgKChJU19RTEEyNVhYKGhhKSB8fCBJU19RTEE4MVhYKGhhKSkgJiYKLQkJICAgIHN0YXJ0ID09IChoYS0+Zmx0X3JlZ2lvbl92cGRfbnZyYW0gKiA0KSkKKwkJZWxzZSBpZiAoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpCiAJCSAgICB2YWxpZCA9IDE7CiAJCWlmICghdmFsaWQpIHsKIAkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IDk4NjUwMTcuLjg3ZjlhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMTMwOCw4ICsxMzA4LDEyIEBACiAKIAlERUJVRyhwcmludGsoInNjc2koJWxkKTogSXNzdWUgaW5pdCBmaXJtd2FyZS5cbiIsIHZoYS0+aG9zdF9ubykpOwogCi0JaWYgKGhhLT5mbGFncy5ucGl2X3N1cHBvcnRlZCkKKwlpZiAoaGEtPmZsYWdzLm5waXZfc3VwcG9ydGVkKSB7CisJCWlmIChoYS0+b3BlcmF0aW5nX21vZGUgPT0gTE9PUCkKKwkJCWhhLT5tYXhfbnBpdl92cG9ydHMgPSBNSU5fTVVMVElfSURfRkFCUklDIC0gMTsKIAkJbWlkX2luaXRfY2ItPmNvdW50ID0gY3B1X3RvX2xlMTYoaGEtPm1heF9ucGl2X3Zwb3J0cyk7CisJfQorCiAKIAltaWRfaW5pdF9jYi0+b3B0aW9ucyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQklUXzEpOwogCkBAIC0yNjEwLDYgKzI2MTQsNyBAQAogCXBvcnRfaWRfdAl3cmFwLCBueHRfZF9pZDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdnAsICpiYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnR2cDsKIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIApAQCAtMjcwOSw3ICsyNzE0LDcgQEAKIAkJLyogQnlwYXNzIHZpcnR1YWwgcG9ydHMgb2YgdGhlIHNhbWUgaG9zdC4gKi8KIAkJZm91bmQgPSAwOwogCQlpZiAoaGEtPm51bV92aG9zdHMpIHsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkodnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZwLCB0dnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgewogCQkJCWlmIChuZXdfZmNwb3J0LT5kX2lkLmIyNCA9PSB2cC0+ZF9pZC5iMjQpIHsKIAkJCQkJZm91bmQgPSAxOwogCQkJCQlicmVhazsKQEAgLTI4MzIsNiArMjgzNyw3IEBACiAJdWludDE2X3QgZmlyc3RfbG9vcF9pZDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdnA7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnR2cDsKIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIApAQCAtMjg1Niw3ICsyODYyLDcgQEAKIAkJLyogQ2hlY2sgZm9yIGxvb3AgSUQgYmVpbmcgYWxyZWFkeSBpbiB1c2UuICovCiAJCWZvdW5kID0gMDsKIAkJZmNwb3J0ID0gTlVMTDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cCwgJmhhLT52cF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdnAtPnZwX2ZjcG9ydHMsIGxpc3QpIHsKIAkJCQlpZiAoZmNwb3J0LT5sb29wX2lkID09IGRldi0+bG9vcF9pZCAmJgogCQkJCQkJCQlmY3BvcnQgIT0gZGV2KSB7CkBAIC0zMjkxLDYgKzMyOTcsNyBAQAogCXVpbnQ4X3QgICAgICAgIHN0YXR1cyA9IDA7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZwOworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp0dnA7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CiAKIAlpZiAodmhhLT5mbGFncy5vbmxpbmUpIHsKQEAgLTMzMDYsNyArMzMxMyw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKIAkJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZoYSwgMCk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodnAsIHR2cCwgJmhhLT52cF9saXN0LCBsaXN0KQogCQkJICAgICAgIHFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZwLCAwKTsKIAkJfSBlbHNlIHsKIAkJCWlmICghYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSkKQEAgLTM0MDMsNyArMzQxMCw3IEBACiAJCURFQlVHKHByaW50ayhLRVJOX0lORk8KIAkJCQkicWxhMngwMF9hYm9ydF9pc3AoJWxkKTogc3VjY2VlZGVkLlxuIiwKIAkJCQl2aGEtPmhvc3Rfbm8pKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cCwgJmhhLT52cF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJCWlmICh2cC0+dnBfaWR4KQogCQkJCXFsYTJ4MDBfdnBfYWJvcnRfaXNwKHZwKTsKIAkJfQpAQCAtMzQyOCw3ICszNDM1LDcgQEAKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfcmVzdGFydF9pc3Aoc2NzaV9xbGFfaG9zdF90ICp2aGEpCiB7Ci0JdWludDhfdAkJc3RhdHVzID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKIAl1aW50MzJfdCB3YWl0X3RpbWU7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggNGM3NTA0Yy4uNGFhYjdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMjY4NSw2ICsyNjg1LDcgQEAKIAl1aW50MTZfdCBzdGF0ID0gbGUxNl90b19jcHUocnB0aWRfZW50cnktPnZwX2lkeCk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc2NzaV9xbGFfaG9zdF90ICp2cDsKKwlzY3NpX3FsYV9ob3N0X3QgKnR2cDsKIAogCWlmIChycHRpZF9lbnRyeS0+ZW50cnlfc3RhdHVzICE9IDApCiAJCXJldHVybjsKQEAgLTI3MTAsNyArMjcxMSw3IEBACiAJCWlmIChNU0Ioc3RhdCkgPT0gMSkKIAkJCXJldHVybjsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpCiAJCQlpZiAodnBfaWR4ID09IHZwLT52cF9pZHgpCiAJCQkJYnJlYWs7CiAJCWlmICghdnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKaW5kZXggM2YyMzkzMi4uNzg1YzYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwpAQCAtNjksOSArNjksMTAgQEAKIHFsYTI0eHhfZmluZF92aG9zdF9ieV9uYW1lKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEsIHVpbnQ4X3QgKnBvcnRfbmFtZSkKIHsKIAlzY3NpX3FsYV9ob3N0X3QgKnZoYTsKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdHZoYTsKIAogCS8qIExvY2F0ZSBtYXRjaGluZyBkZXZpY2UgaW4gZGF0YWJhc2UuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2aGEsICZoYS0+dnBfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2aGEsIHR2aGEsICZoYS0+dnBfbGlzdCwgbGlzdCkgewogCQlpZiAoIW1lbWNtcChwb3J0X25hbWUsIHZoYS0+cG9ydF9uYW1lLCBXV05fU0laRSkpCiAJCQlyZXR1cm4gdmhhOwogCX0KQEAgLTE5NCwxMSArMTk1LDExIEBACiB2b2lkCiBxbGEyeDAwX2FsZXJ0X2FsbF92cHMoc3RydWN0IHJzcF9xdWUgKnJzcCwgdWludDE2X3QgKm1iKQogewotCXNjc2lfcWxhX2hvc3RfdCAqdmhhOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhLCAqdHZoYTsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gcnNwLT5odzsKIAlpbnQgaSA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZoYSwgJmhhLT52cF9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZoYSwgdHZoYSwgJmhhLT52cF9saXN0LCBsaXN0KSB7CiAJCWlmICh2aGEtPnZwX2lkeCkgewogCQkJc3dpdGNoIChtYlswXSkgewogCQkJY2FzZSBNQkFfTElQX09DQ1VSUkVEOgpAQCAtMzAwLDYgKzMwMSw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzY3NpX3FsYV9ob3N0X3QgKnZwOworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp0dnA7CiAKIAlpZiAodmhhLT52cF9pZHgpCiAJCXJldHVybjsKQEAgLTMwOCw3ICszMTAsNyBAQAogCiAJY2xlYXJfYml0KFZQX0RQQ19ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodnAsIHR2cCwgJmhhLT52cF9saXN0LCBsaXN0KSB7CiAJCWlmICh2cC0+dnBfaWR4KQogCQkJcmV0ID0gcWxhMngwMF9kb19kcGNfdnAodnApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggMmY1ZjcyNS4uM2RkZmE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTIyMjIsMTAgKzIyMjIsNiBAQAogewogCWNoYXIJbmFtZVsxNl07CiAKLQloYS0+aW5pdF9jYl9zaXplID0gc2l6ZW9mKGluaXRfY2JfdCk7Ci0JaWYgKElTX1FMQTJYWFhfTUlEVFlQRShoYSkpCi0JCWhhLT5pbml0X2NiX3NpemUgPSBzaXplb2Yoc3RydWN0IG1pZF9pbml0X2NiXzI0eHgpOwotCiAJaGEtPmluaXRfY2IgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIGhhLT5pbml0X2NiX3NpemUsCiAJCSZoYS0+aW5pdF9jYl9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghaGEtPmluaXRfY2IpCkBAIC0yNTY4LDcgKzI1NjQsNyBAQAogdm9pZCBxbGEyeDAwX3JlbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSkKIHsKIAlmY19wb3J0X3QgICAgICAgKmZjcG9ydDsKLQl1aW50OF90ICAgICAgICAgc3RhdHVzOworCWludCBzdGF0dXM7CiAJdWludDE2X3QgICAgICAgIG5leHRfbG9vcGlkID0gMDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKaW5kZXggNzlmNzA1My4uYTc3MmVhYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaApAQCAtNyw3ICs3LDcgQEAKIC8qCiAgKiBEcml2ZXIgdmVyc2lvbgogICovCi0jZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjAwLWszIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMC1rNCIKIAogI2RlZmluZSBRTEFfRFJJVkVSX01BSk9SX1ZFUgk4CiAjZGVmaW5lIFFMQV9EUklWRVJfTUlOT1JfVkVSCTMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGNiY2QzZjYuLmEyZWYwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtOTY3LDYgKzk2NywxMTAgQEAKIEVYUE9SVF9TWU1CT0woc2NzaV90cmFja19xdWV1ZV9mdWxsKTsKIAogLyoqCisgKiBzY3NpX3ZwZF9pbnF1aXJ5IC0gUmVxdWVzdCBhIGRldmljZSBwcm92aWRlIHVzIHdpdGggYSBWUEQgcGFnZQorICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCisgKiBAYnVmZmVyOiBXaGVyZSB0byBwdXQgdGhlIHJlc3VsdAorICogQHBhZ2U6IFdoaWNoIFZpdGFsIFByb2R1Y3QgRGF0YSB0byByZXR1cm4KKyAqIEBsZW46IFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiAgWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlCisgKiBzY3NpX2dldF92cGRfcGFnZSBpbnN0ZWFkLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICovCitzdGF0aWMgaW50IHNjc2lfdnBkX2lucXVpcnkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCQkJdTggcGFnZSwgdW5zaWduZWQgbGVuKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciBjbWRbMTZdOworCisJY21kWzBdID0gSU5RVUlSWTsKKwljbWRbMV0gPSAxOwkJLyogRVZQRCAqLworCWNtZFsyXSA9IHBhZ2U7CisJY21kWzNdID0gbGVuID4+IDg7CisJY21kWzRdID0gbGVuICYgMHhmZjsKKwljbWRbNV0gPSAwOwkJLyogQ29udHJvbCBieXRlICovCisKKwkvKgorCSAqIEknbSBub3QgY29udmluY2VkIHdlIG5lZWQgdG8gdHJ5IHF1aXRlIHRoaXMgaGFyZCB0byBnZXQgVlBELCBidXQKKwkgKiBhbGwgdGhlIGV4aXN0aW5nIHVzZXJzIHRyaWVkIHRoaXMgaGFyZC4KKwkgKi8KKwlyZXN1bHQgPSBzY3NpX2V4ZWN1dGVfcmVxKHNkZXYsIGNtZCwgRE1BX0ZST01fREVWSUNFLCBidWZmZXIsCisJCQkJICBsZW4gKyA0LCBOVUxMLCAzMCAqIEhaLCAzLCBOVUxMKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogU2FuaXR5IGNoZWNrIHRoYXQgd2UgZ290IHRoZSBwYWdlIGJhY2sgdGhhdCB3ZSBhc2tlZCBmb3IgKi8KKwlpZiAoYnVmZmVyWzFdICE9IHBhZ2UpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2NzaV9nZXRfdnBkX3BhZ2UgLSBHZXQgVml0YWwgUHJvZHVjdCBEYXRhIGZyb20gYSBTQ1NJIGRldmljZQorICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCisgKiBAcGFnZTogV2hpY2ggVml0YWwgUHJvZHVjdCBEYXRhIHRvIHJldHVybgorICoKKyAqIFNDU0kgZGV2aWNlcyBtYXkgb3B0aW9uYWxseSBzdXBwbHkgVml0YWwgUHJvZHVjdCBEYXRhLiAgRWFjaCAncGFnZScKKyAqIG9mIFZQRCBpcyBkZWZpbmVkIGluIHRoZSBhcHByb3ByaWF0ZSBTQ1NJIGRvY3VtZW50IChlZyBTUEMsIFNCQykuCisgKiBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoaXMgVlBEIHBhZ2UsIHRoaXMgcm91dGluZSByZXR1cm5zIGEgcG9pbnRlcgorICogdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSBmcm9tIHRoYXQgcGFnZS4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGtmcmVlKCkgb24gdGhpcyBwb2ludGVyIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgKiBuZWVkZWQuICBJZiB3ZSBjYW5ub3QgcmV0cmlldmUgdGhlIFZQRCBwYWdlIHRoaXMgcm91dGluZSByZXR1cm5zICVOVUxMLgorICovCit1bnNpZ25lZCBjaGFyICpzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHU4IHBhZ2UpCit7CisJaW50IGksIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoMjU5LCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFzayBmb3IgYWxsIHRoZSBwYWdlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8KKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgMjU1KTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWw7CisKKwkvKiBJZiB0aGUgdXNlciBhY3R1YWxseSB3YW50ZWQgdGhpcyBwYWdlLCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLworCWlmIChwYWdlID09IDApCisJCXJldHVybiBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmWzNdOyBpKyspCisJCWlmIChidWZbaSArIDRdID09IHBhZ2UpCisJCQlnb3RvIGZvdW5kOworCS8qIFRoZSBkZXZpY2UgY2xhaW1zIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHBhZ2UgKi8KKwlnb3RvIGZhaWw7CisKKyBmb3VuZDoKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgMjU1KTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWw7CisKKwkvKgorCSAqIFNvbWUgcGFnZXMgYXJlIGxvbmdlciB0aGFuIDI1NSBieXRlcy4gIFRoZSBhY3R1YWwgbGVuZ3RoIG9mCisJICogdGhlIHBhZ2UgaXMgcmV0dXJuZWQgaW4gdGhlIGhlYWRlci4KKwkgKi8KKwlsZW4gPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOworCWlmIChsZW4gPD0gMjU1KQorCQlyZXR1cm4gYnVmOworCisJa2ZyZWUoYnVmKTsKKwlidWYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9LRVJORUwpOworCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCBsZW4pOworCWlmIChyZXN1bHQpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiBidWY7CisKKyBmYWlsOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2dldF92cGRfcGFnZSk7CisKKy8qKgogICogc2NzaV9kZXZpY2VfZ2V0ICAtICBnZXQgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gYSBzY3NpX2RldmljZQogICogQHNkZXY6CWRldmljZSB0byBnZXQgYSByZWZlcmVuY2UgdG8KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCA2ZWViZDBiLi4yMTMxMjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTQwLDYgKzQwLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjLXQxMGRpZi5oPgorCisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgpAQCAtNDgsOCArNTEsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogCi0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotCisjaW5jbHVkZSAic2QuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKIAogI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODEiCkBAIC05NSw2ICs5NywxMCBAQAogI2RlZmluZSBERUZfRkFLRV9SVwkwCiAjZGVmaW5lIERFRl9WUERfVVNFX0hPU1ROTyAxCiAjZGVmaW5lIERFRl9TRUNUT1JfU0laRSA1MTIKKyNkZWZpbmUgREVGX0RJWCAwCisjZGVmaW5lIERFRl9ESUYgMAorI2RlZmluZSBERUZfR1VBUkQgMAorI2RlZmluZSBERUZfQVRPIDEKIAogLyogYml0IG1hc2sgdmFsdWVzIGZvciBzY3NpX2RlYnVnX29wdHMgKi8KICNkZWZpbmUgU0NTSV9ERUJVR19PUFRfTk9JU0UgICAxCkBAIC0xMDIsNiArMTA4LDggQEAKICNkZWZpbmUgU0NTSV9ERUJVR19PUFRfVElNRU9VVCAgIDQKICNkZWZpbmUgU0NTSV9ERUJVR19PUFRfUkVDT1ZFUkVEX0VSUiAgIDgKICNkZWZpbmUgU0NTSV9ERUJVR19PUFRfVFJBTlNQT1JUX0VSUiAgIDE2CisjZGVmaW5lIFNDU0lfREVCVUdfT1BUX0RJRl9FUlIgICAzMgorI2RlZmluZSBTQ1NJX0RFQlVHX09QVF9ESVhfRVJSICAgNjQKIC8qIFdoZW4gImV2ZXJ5X250aCIgPiAwIHRoZW4gbW9kdWxvICJldmVyeV9udGgiIGNvbW1hbmRzOgogICogICAtIGEgbm8gcmVzcG9uc2UgaXMgc2ltdWxhdGVkIGlmIFNDU0lfREVCVUdfT1BUX1RJTUVPVVQgaXMgc2V0CiAgKiAgIC0gYSBSRUNPVkVSRURfRVJST1IgaXMgc2ltdWxhdGVkIG9uIHN1Y2Nlc3NmdWwgcmVhZCBhbmQgd3JpdGUKQEAgLTE0NCw2ICsxNTIsMTAgQEAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19mYWtlX3J3ID0gREVGX0ZBS0VfUlc7CiBzdGF0aWMgaW50IHNjc2lfZGVidWdfdnBkX3VzZV9ob3N0bm8gPSBERUZfVlBEX1VTRV9IT1NUTk87CiBzdGF0aWMgaW50IHNjc2lfZGVidWdfc2VjdG9yX3NpemUgPSBERUZfU0VDVE9SX1NJWkU7CitzdGF0aWMgaW50IHNjc2lfZGVidWdfZGl4ID0gREVGX0RJWDsKK3N0YXRpYyBpbnQgc2NzaV9kZWJ1Z19kaWYgPSBERUZfRElGOworc3RhdGljIGludCBzY3NpX2RlYnVnX2d1YXJkID0gREVGX0dVQVJEOworc3RhdGljIGludCBzY3NpX2RlYnVnX2F0byA9IERFRl9BVE87CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19jbW5kX2NvdW50ID0gMDsKIApAQCAtMjA0LDExICsyMTYsMTUgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2RlYnVnX3F1ZXVlZF9jbWQgcXVldWVkX2FycltTQ1NJX0RFQlVHX0NBTlFVRVVFXTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgKiBmYWtlX3N0b3JlcDsJLyogcmFtZGlzayBzdG9yYWdlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZGlmX3N0b3JlcDsJLyogcHJvdGVjdGlvbiBpbmZvICovCiAKIHN0YXRpYyBpbnQgbnVtX2Fib3J0cyA9IDA7CiBzdGF0aWMgaW50IG51bV9kZXZfcmVzZXRzID0gMDsKIHN0YXRpYyBpbnQgbnVtX2J1c19yZXNldHMgPSAwOwogc3RhdGljIGludCBudW1faG9zdF9yZXNldHMgPSAwOworc3RhdGljIGludCBkaXhfd3JpdGVzOworc3RhdGljIGludCBkaXhfcmVhZHM7CitzdGF0aWMgaW50IGRpZl9lcnJvcnM7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socXVldWVkX2Fycl9sb2NrKTsKIHN0YXRpYyBERUZJTkVfUldMT0NLKGF0b21pY19ydyk7CkBAIC0yMTcsNiArMjMzLDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgcHNldWRvX2xsZF9idXM7CiAKK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgZGlmX29mZnNldChzZWN0b3JfdCBzZWN0b3IpCit7CisJcmV0dXJuIHNlY3RvciA8PCAzOworfQorCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2RlYnVnX2RyaXZlcmZzX2RyaXZlciA9IHsKIAkubmFtZSAJCT0gc2RlYnVnX3Byb2NfbmFtZSwKIAkuYnVzCQk9ICZwc2V1ZG9fbGxkX2J1cywKQEAgLTIyNSw2ICsyNDYsOSBAQAogc3RhdGljIGNvbnN0IGludCBjaGVja19jb25kaXRpb25fcmVzdWx0ID0KIAkJKERSSVZFUl9TRU5TRSA8PCAyNCkgfCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAKK3N0YXRpYyBjb25zdCBpbnQgaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0ID0KKwkoRFJJVkVSX1NFTlNFIDw8IDI0KSB8IChESURfQUJPUlQgPDwgMTYpIHwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOworCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjdHJsX21fcGdbXSA9IHsweGEsIDEwLCAyLCAwLCAwLCAwLCAwLCAwLAogCQkJCSAgICAwLCAwLCAweDIsIDB4NGJ9Owogc3RhdGljIHVuc2lnbmVkIGNoYXIgaWVjX21fcGdbXSA9IHsweDFjLCAweGEsIDB4MDgsIDAsIDAsIDAsIDAsIDAsCkBAIC03MjYsNyArNzUwLDEyIEBACiAJCX0gZWxzZSBpZiAoMHg4NiA9PSBjbWRbMl0pIHsgLyogZXh0ZW5kZWQgaW5xdWlyeSAqLwogCQkJYXJyWzFdID0gY21kWzJdOwkvKnNhbml0eSAqLwogCQkJYXJyWzNdID0gMHgzYzsJLyogbnVtYmVyIG9mIGZvbGxvd2luZyBlbnRyaWVzICovCi0JCQlhcnJbNF0gPSAweDA7ICAgLyogbm8gcHJvdGVjdGlvbiBzdHVmZiAqLworCQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKQorCQkJCWFycls0XSA9IDB4NDsJLyogU1BUOiBHUkRfQ0hLOjEgKi8KKwkJCWVsc2UgaWYgKHNjc2lfZGVidWdfZGlmKQorCQkJCWFycls0XSA9IDB4NTsgICAvKiBTUFQ6IEdSRF9DSEs6MSwgUkVGX0NISzoxICovCisJCQllbHNlCisJCQkJYXJyWzRdID0gMHgwOyAgIC8qIG5vIHByb3RlY3Rpb24gc3R1ZmYgKi8KIAkJCWFycls1XSA9IDB4NzsgICAvKiBoZWFkIG9mIHEsIG9yZGVyZWQgKyBzaW1wbGUgcSdzICovCiAJCX0gZWxzZSBpZiAoMHg4NyA9PSBjbWRbMl0pIHsgLyogbW9kZSBwYWdlIHBvbGljeSAqLwogCQkJYXJyWzFdID0gY21kWzJdOwkvKnNhbml0eSAqLwpAQCAtNzY3LDYgKzc5Niw3IEBACiAJYXJyWzJdID0gc2NzaV9kZWJ1Z19zY3NpX2xldmVsOwogCWFyclszXSA9IDI7ICAgIC8qIHJlc3BvbnNlX2RhdGFfZm9ybWF0PT0yICovCiAJYXJyWzRdID0gU0RFQlVHX0xPTkdfSU5RX1NaIC0gNTsKKwlhcnJbNV0gPSBzY3NpX2RlYnVnX2RpZiA/IDEgOiAwOyAvKiBQUk9URUNUIGJpdCAqLwogCWlmICgwID09IHNjc2lfZGVidWdfdnBkX3VzZV9ob3N0bm8pCiAJCWFycls1XSA9IDB4MTA7IC8qIGNsYWltOiBpbXBsaWNpdCBUR1BTICovCiAJYXJyWzZdID0gMHgxMDsgLyogY2xhaW06IE11bHRpUCAqLwpAQCAtOTE1LDYgKzk0NSwxMiBAQAogCWFycls5XSA9IChzY3NpX2RlYnVnX3NlY3Rvcl9zaXplID4+IDE2KSAmIDB4ZmY7CiAJYXJyWzEwXSA9IChzY3NpX2RlYnVnX3NlY3Rvcl9zaXplID4+IDgpICYgMHhmZjsKIAlhcnJbMTFdID0gc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSAmIDB4ZmY7CisKKwlpZiAoc2NzaV9kZWJ1Z19kaWYpIHsKKwkJYXJyWzEyXSA9IChzY3NpX2RlYnVnX2RpZiAtIDEpIDw8IDE7IC8qIFBfVFlQRSAqLworCQlhcnJbMTJdIHw9IDE7IC8qIFBST1RfRU4gKi8KKwl9CisKIAlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsCiAJCQkJICAgIG1pbihhbGxvY19sZW4sIFNERUJVR19SRUFEQ0FQMTZfQVJSX1NaKSk7CiB9CkBAIC0xMDY2LDYgKzExMDIsMTAgQEAKIAkJY3RybF9tX3BnWzJdIHw9IDB4NDsKIAllbHNlCiAJCWN0cmxfbV9wZ1syXSAmPSB+MHg0OworCisJaWYgKHNjc2lfZGVidWdfYXRvKQorCQljdHJsX21fcGdbNV0gfD0gMHg4MDsgLyogQVRPPTEgKi8KKwogCW1lbWNweShwLCBjdHJsX21fcGcsIHNpemVvZihjdHJsX21fcGcpKTsKIAlpZiAoMSA9PSBwY29udHJvbCkKIAkJbWVtY3B5KHAgKyAyLCBjaF9jdHJsX21fcGcsIHNpemVvZihjaF9jdHJsX21fcGcpKTsKQEAgLTE1MzYsNiArMTU3Niw4NyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcHJvdF92ZXJpZnlfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgc2VjdG9yX3Qgc3RhcnRfc2VjLAorCQkJICAgIHVuc2lnbmVkIGludCBzZWN0b3JzKQoreworCXVuc2lnbmVkIGludCBpLCByZXNpZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZ2w7CisJc3RydWN0IHNkX2RpZl90dXBsZSAqc2R0OworCXNlY3Rvcl90IHNlY3RvcjsKKwlzZWN0b3JfdCB0bXBfc2VjID0gc3RhcnRfc2VjOworCXZvaWQgKnBhZGRyOworCisJc3RhcnRfc2VjID0gZG9fZGl2KHRtcF9zZWMsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKKworCXNkdCA9IChzdHJ1Y3Qgc2RfZGlmX3R1cGxlICopKGRpZl9zdG9yZXAgKyBkaWZfb2Zmc2V0KHN0YXJ0X3NlYykpOworCisJZm9yIChpID0gMCA7IGkgPCBzZWN0b3JzIDsgaSsrKSB7CisJCXUxNiBjc3VtOworCisJCWlmIChzZHRbaV0uYXBwX3RhZyA9PSAweGZmZmYpCisJCQljb250aW51ZTsKKworCQlzZWN0b3IgPSBzdGFydF9zZWMgKyBpOworCisJCXN3aXRjaCAoc2NzaV9kZWJ1Z19ndWFyZCkgeworCQljYXNlIDE6CisJCQljc3VtID0gaXBfY29tcHV0ZV9jc3VtKGZha2Vfc3RvcmVwICsKKwkJCQkJICAgICAgIHNlY3RvciAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsCisJCQkJCSAgICAgICBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQljc3VtID0gY3JjX3QxMGRpZihmYWtlX3N0b3JlcCArCisJCQkJCSAgc2VjdG9yICogc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSwKKwkJCQkJICBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKTsKKwkJCWNzdW0gPSBjcHVfdG9fYmUxNihjc3VtKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlpZiAoc2R0W2ldLmd1YXJkX3RhZyAhPSBjc3VtKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBHVUFSRCBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdSIgXAorCQkJICAgICAgICIgcmN2ZCAweCUwNHgsIGRhdGEgMHglMDR4XG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZylzZWN0b3IsCisJCQkgICAgICAgYmUxNl90b19jcHUoc2R0W2ldLmd1YXJkX3RhZyksCisJCQkgICAgICAgYmUxNl90b19jcHUoY3N1bSkpOworCQkJZGlmX2Vycm9ycysrOworCQkJcmV0dXJuIDB4MDE7CisJCX0KKworCQlpZiAoc2NzaV9kZWJ1Z19kaWYgIT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04gJiYKKwkJICAgIGJlMzJfdG9fY3B1KHNkdFtpXS5yZWZfdGFnKSAhPSAoc2VjdG9yICYgMHhmZmZmZmZmZikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yKTsKKwkJCWRpZl9lcnJvcnMrKzsKKwkJCXJldHVybiAweDAzOworCQl9CisJfQorCisJcmVzaWQgPSBzZWN0b3JzICogODsgLyogQnl0ZXMgb2YgcHJvdGVjdGlvbiBkYXRhIHRvIGNvcHkgaW50byBzZ2wgKi8KKwlzZWN0b3IgPSBzdGFydF9zZWM7CisKKwlzY3NpX2Zvcl9lYWNoX3Byb3Rfc2coU0NwbnQsIHBzZ2wsIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCksIGkpIHsKKwkJaW50IGxlbiA9IG1pbihwc2dsLT5sZW5ndGgsIHJlc2lkKTsKKworCQlwYWRkciA9IGttYXBfYXRvbWljKHNnX3BhZ2UocHNnbCksIEtNX0lSUTApICsgcHNnbC0+b2Zmc2V0OworCQltZW1jcHkocGFkZHIsIGRpZl9zdG9yZXAgKyBkaWZfb2Zmc2V0KHNlY3RvciksIGxlbik7CisKKwkJc2VjdG9yICs9IGxlbiA+PiAzOworCQlpZiAoc2VjdG9yID49IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCQkvKiBGb3JjZSB3cmFwICovCisJCQl0bXBfc2VjID0gc2VjdG9yOworCQkJc2VjdG9yID0gZG9fZGl2KHRtcF9zZWMsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKKwkJfQorCQlyZXNpZCAtPSBsZW47CisJCWt1bm1hcF9hdG9taWMocGFkZHIsIEtNX0lSUTApOworCX0KKworCWRpeF9yZWFkcysrOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAogCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewpAQCAtMTU2MywxMiArMTY4NCwxNjIgQEAKIAkJfQogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAl9CisKKwkvKiBESVggKyBUMTAgRElGICovCisJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpIHsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChTQ3BudCwgbGJhLCBudW0pOworCisJCWlmIChwcm90X3JldCkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIHByb3RfcmV0KTsKKwkJCXJldHVybiBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwl9CisKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGRldmlwLCBsYmEsIG51bSwgMCk7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgZHVtcF9zZWN0b3IodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpLCBqOworCisJcHJpbnRrKEtFUk5fRVJSICI+Pj4gU2VjdG9yIER1bXAgPDw8XG4iKTsKKworCWZvciAoaSA9IDAgOyBpIDwgbGVuIDsgaSArPSAxNikgeworCQlwcmludGsoS0VSTl9FUlIgIiUwNGQ6ICIsIGkpOworCisJCWZvciAoaiA9IDAgOyBqIDwgMTYgOyBqKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9IGJ1ZltpK2pdOworCQkJaWYgKGMgPj0gMHgyMCAmJiBjIDwgMHg3ZSkKKwkJCQlwcmludGsoIiAlYyAiLCBidWZbaStqXSk7CisJCQllbHNlCisJCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpK2pdKTsKKwkJfQorCisJCXByaW50aygiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvdF92ZXJpZnlfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHNlY3Rvcl90IHN0YXJ0X3NlYywKKwkJCSAgICAgdW5zaWduZWQgaW50IHNlY3RvcnMpCit7CisJaW50IGksIGosIHJldDsKKwlzdHJ1Y3Qgc2RfZGlmX3R1cGxlICpzZHQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc2dsID0gc2NzaV9zZ2xpc3QoU0NwbnQpOworCXN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbCA9IHNjc2lfcHJvdF9zZ2xpc3QoU0NwbnQpOworCXZvaWQgKmRhZGRyLCAqcGFkZHI7CisJc2VjdG9yX3QgdG1wX3NlYyA9IHN0YXJ0X3NlYzsKKwlzZWN0b3JfdCBzZWN0b3I7CisJaW50IHBwYWdlX29mZnNldDsKKwl1bnNpZ25lZCBzaG9ydCBjc3VtOworCisJc2VjdG9yID0gZG9fZGl2KHRtcF9zZWMsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKKworCWlmICgoKFNDcG50LT5jbW5kWzFdID4+IDUpICYgNykgIT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2RlYnVnOiBXUlBST1RFQ1QgIT0gMVxuIik7CisJCXJldHVybiAwOworCX0KKworCUJVR19PTihzY3NpX3NnX2NvdW50KFNDcG50KSA9PSAwKTsKKwlCVUdfT04oc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSA9PSAwKTsKKworCXBhZGRyID0ga21hcF9hdG9taWMoc2dfcGFnZShwc2dsKSwgS01fSVJRMSkgKyBwc2dsLT5vZmZzZXQ7CisJcHBhZ2Vfb2Zmc2V0ID0gMDsKKworCS8qIEZvciBlYWNoIGRhdGEgcGFnZSAqLworCXNjc2lfZm9yX2VhY2hfc2coU0NwbnQsIGRzZ2wsIHNjc2lfc2dfY291bnQoU0NwbnQpLCBpKSB7CisJCWRhZGRyID0ga21hcF9hdG9taWMoc2dfcGFnZShkc2dsKSwgS01fSVJRMCkgKyBkc2dsLT5vZmZzZXQ7CisKKwkJLyogRm9yIGVhY2ggc2VjdG9yLXNpemVkIGNodW5rIGluIGRhdGEgcGFnZSAqLworCQlmb3IgKGogPSAwIDsgaiA8IGRzZ2wtPmxlbmd0aCA7IGogKz0gc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSkgeworCisJCQkvKiBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CisJCQkgKiBwcm90ZWN0aW9uIHBhZ2UgYWR2YW5jZSB0byB0aGUgbmV4dCBvbmUKKwkJCSAqLworCQkJaWYgKHBwYWdlX29mZnNldCA+PSBwc2dsLT5sZW5ndGgpIHsKKwkJCQlrdW5tYXBfYXRvbWljKHBhZGRyLCBLTV9JUlExKTsKKwkJCQlwc2dsID0gc2dfbmV4dChwc2dsKTsKKwkJCQlCVUdfT04ocHNnbCA9PSBOVUxMKTsKKwkJCQlwYWRkciA9IGttYXBfYXRvbWljKHNnX3BhZ2UocHNnbCksIEtNX0lSUTEpCisJCQkJCSsgcHNnbC0+b2Zmc2V0OworCQkJCXBwYWdlX29mZnNldCA9IDA7CisJCQl9CisKKwkJCXNkdCA9IHBhZGRyICsgcHBhZ2Vfb2Zmc2V0OworCisJCQlzd2l0Y2ggKHNjc2lfZGVidWdfZ3VhcmQpIHsKKwkJCWNhc2UgMToKKwkJCQljc3VtID0gaXBfY29tcHV0ZV9jc3VtKGRhZGRyLAorCQkJCQkJICAgICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQkJCWJyZWFrOworCQkJY2FzZSAwOgorCQkJCWNzdW0gPSBjcHVfdG9fYmUxNihjcmNfdDEwZGlmKGRhZGRyLAorCQkJCQkJICAgICAgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSkpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlCVUcoKTsKKwkJCQlyZXQgPSAwOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpZiAoc2R0LT5ndWFyZF90YWcgIT0gY3N1bSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IEdVQVJEIGNoZWNrIGZhaWxlZCBvbiBzZWN0b3IgJWx1ICIgXAorCQkJCSAgICAgICAicmN2ZCAweCUwNHgsIGNhbGN1bGF0ZWQgMHglMDR4XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yLAorCQkJCSAgICAgICBiZTE2X3RvX2NwdShzZHQtPmd1YXJkX3RhZyksCisJCQkJICAgICAgIGJlMTZfdG9fY3B1KGNzdW0pKTsKKwkJCQlyZXQgPSAweDAxOworCQkJCWR1bXBfc2VjdG9yKGRhZGRyLCBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCQkgICAgYmUzMl90b19jcHUoc2R0LT5yZWZfdGFnKQorCQkJICAgICE9IChzdGFydF9zZWMgJiAweGZmZmZmZmZmKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXNlY3Rvcik7CisJCQkJcmV0ID0gMHgwMzsKKwkJCQlkdW1wX3NlY3RvcihkYWRkciwgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCS8qIFdvdWxkIGJlIGdyZWF0IHRvIGNvcHkgdGhpcyBpbiBiaWdnZXIKKwkJCSAqIGNodW5rcy4gIEhvd2V2ZXIsIGZvciB0aGUgc2FrZSBvZgorCQkJICogY29ycmVjdG5lc3Mgd2UgbmVlZCB0byB2ZXJpZnkgZWFjaCBzZWN0b3IKKwkJCSAqIGJlZm9yZSB3cml0aW5nIGl0IHRvICJzdGFibGUiIHN0b3JhZ2UKKwkJCSAqLworCQkJbWVtY3B5KGRpZl9zdG9yZXAgKyBkaWZfb2Zmc2V0KHNlY3RvciksIHNkdCwgOCk7CisKKwkJCXNlY3RvcisrOworCisJCQlpZiAoc2VjdG9yID09IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKQorCQkJCXNlY3RvciA9IDA7CS8qIEZvcmNlIHdyYXAgKi8KKworCQkJc3RhcnRfc2VjKys7CisJCQlkYWRkciArPSBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplOworCQkJcHBhZ2Vfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2RfZGlmX3R1cGxlKTsKKwkJfQorCisJCWt1bm1hcF9hdG9taWMoZGFkZHIsIEtNX0lSUTApOworCX0KKworCWt1bm1hcF9hdG9taWMocGFkZHIsIEtNX0lSUTEpOworCisJZGl4X3dyaXRlcysrOworCisJcmV0dXJuIDA7CisKK291dDoKKwlkaWZfZXJyb3JzKys7CisJa3VubWFwX2F0b21pYyhkYWRkciwgS01fSVJRMCk7CisJa3VubWFwX2F0b21pYyhwYWRkciwgS01fSVJRMSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAogCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKQEAgLTE1NzksNiArMTg1MCwxNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKiBESVggKyBUMTAgRElGICovCisJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpIHsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfd3JpdGUoU0NwbnQsIGxiYSwgbnVtKTsKKworCQlpZiAocHJvdF9yZXQpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCAweDEwLCBwcm90X3JldCk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9CisJfQorCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhdG9taWNfcncsIGlmbGFncyk7CiAJcmV0ID0gZG9fZGV2aWNlX2FjY2VzcyhTQ3BudCwgZGV2aXAsIGxiYSwgbnVtLCAxKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwpAQCAtMjA5NSw2ICsyMzc2LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQodnBkX3VzZV9ob3N0bm8sIHNjc2lfZGVidWdfdnBkX3VzZV9ob3N0bm8sIGludCwKIAkJICAgU19JUlVHTyB8IFNfSVdVU1IpOwogbW9kdWxlX3BhcmFtX25hbWVkKHNlY3Rvcl9zaXplLCBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplLCBpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX25hbWVkKGRpeCwgc2NzaV9kZWJ1Z19kaXgsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGlmLCBzY3NpX2RlYnVnX2RpZiwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9uYW1lZChndWFyZCwgc2NzaV9kZWJ1Z19ndWFyZCwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9uYW1lZChhdG8sIHNjc2lfZGVidWdfYXRvLCBpbnQsIFNfSVJVR08pOwogCiBNT0RVTEVfQVVUSE9SKCJFcmljIFlvdW5nZGFsZSArIERvdWdsYXMgR2lsYmVydCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIGRlYnVnIGFkYXB0ZXIgZHJpdmVyIik7CkBAIC0yMTE3LDcgKzI0MDIsMTAgQEAKIE1PRFVMRV9QQVJNX0RFU0ModmlydHVhbF9nYiwgInZpcnR1YWwgZ2lnYWJ5dGUgc2l6ZSAoZGVmPTAgLT4gdXNlIGRldl9zaXplX21iKSIpOwogTU9EVUxFX1BBUk1fREVTQyh2cGRfdXNlX2hvc3RubywgIjAgLT4gZGV2IGlkcyBpZ25vcmUgaG9zdG5vIChkZWY9MSAtPiB1bmlxdWUgZGV2IGlkcykiKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2VjdG9yX3NpemUsICJoYXJkd2FyZSBzZWN0b3Igc2l6ZSBpbiBieXRlcyAoZGVmPTUxMikiKTsKLQorTU9EVUxFX1BBUk1fREVTQyhkaXgsICJkYXRhIGludGVncml0eSBleHRlbnNpb25zIG1hc2sgKGRlZj0wKSIpOworTU9EVUxFX1BBUk1fREVTQyhkaWYsICJkYXRhIGludGVncml0eSBmaWVsZCB0eXBlOiAwLTMgKGRlZj0wKSIpOworTU9EVUxFX1BBUk1fREVTQyhndWFyZCwgInByb3RlY3Rpb24gY2hlY2tzdW06IDA9Y3JjLCAxPWlwIChkZWY9MCkiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXRvLCAiYXBwbGljYXRpb24gdGFnIG93bmVyc2hpcDogMD1kaXNrIDE9aG9zdCAoZGVmPTEpIik7CiAKIHN0YXRpYyBjaGFyIHNkZWJ1Z19pbmZvWzI1Nl07CiAKQEAgLTIxNjQsMTQgKzI0NTIsMTQgQEAKIAkgICAgImRlbGF5PSVkLCBtYXhfbHVucz0lZCwgc2NzaV9sZXZlbD0lZFxuIgogCSAgICAic2VjdG9yX3NpemU9JWQgYnl0ZXMsIGN5bGluZGVycz0lZCwgaGVhZHM9JWQsIHNlY3RvcnM9JWRcbiIKIAkgICAgIm51bWJlciBvZiBhYm9ydHM9JWQsIGRldmljZV9yZXNldD0lZCwgYnVzX3Jlc2V0cz0lZCwgIgotCSAgICAiaG9zdF9yZXNldHM9JWRcbiIsCisJICAgICJob3N0X3Jlc2V0cz0lZFxuZGl4X3JlYWRzPSVkIGRpeF93cml0ZXM9JWQgZGlmX2Vycm9ycz0lZFxuIiwKIAkgICAgU0NTSV9ERUJVR19WRVJTSU9OLCBzY3NpX2RlYnVnX3ZlcnNpb25fZGF0ZSwgc2NzaV9kZWJ1Z19udW1fdGd0cywKIAkgICAgc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiwgc2NzaV9kZWJ1Z19vcHRzLCBzY3NpX2RlYnVnX2V2ZXJ5X250aCwKIAkgICAgc2NzaV9kZWJ1Z19jbW5kX2NvdW50LCBzY3NpX2RlYnVnX2RlbGF5LAogCSAgICBzY3NpX2RlYnVnX21heF9sdW5zLCBzY3NpX2RlYnVnX3Njc2lfbGV2ZWwsCiAJICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIHNkZWJ1Z19jeWxpbmRlcnNfcGVyLCBzZGVidWdfaGVhZHMsCiAJICAgIHNkZWJ1Z19zZWN0b3JzX3BlciwgbnVtX2Fib3J0cywgbnVtX2Rldl9yZXNldHMsIG51bV9idXNfcmVzZXRzLAotCSAgICBudW1faG9zdF9yZXNldHMpOworCSAgICBudW1faG9zdF9yZXNldHMsIGRpeF9yZWFkcywgZGl4X3dyaXRlcywgZGlmX2Vycm9ycyk7CiAJaWYgKHBvcyA8IG9mZnNldCkgewogCQlsZW4gPSAwOwogCQliZWdpbiA9IHBvczsKQEAgLTI0NTIsNiArMjc0MCwzMSBAQAogfQogRFJJVkVSX0FUVFIoc2VjdG9yX3NpemUsIFNfSVJVR08sIHNkZWJ1Z19zZWN0b3Jfc2l6ZV9zaG93LCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3Qgc2RlYnVnX2RpeF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNjc2lfZGVidWdfZGl4KTsKK30KK0RSSVZFUl9BVFRSKGRpeCwgU19JUlVHTywgc2RlYnVnX2RpeF9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2RlYnVnX2RpZl9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNjc2lfZGVidWdfZGlmKTsKK30KK0RSSVZFUl9BVFRSKGRpZiwgU19JUlVHTywgc2RlYnVnX2RpZl9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2RlYnVnX2d1YXJkX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRkcCwgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgc2NzaV9kZWJ1Z19ndWFyZCk7Cit9CitEUklWRVJfQVRUUihndWFyZCwgU19JUlVHTywgc2RlYnVnX2d1YXJkX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzZGVidWdfYXRvX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRkcCwgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgc2NzaV9kZWJ1Z19hdG8pOworfQorRFJJVkVSX0FUVFIoYXRvLCBTX0lSVUdPLCBzZGVidWdfYXRvX3Nob3csIE5VTEwpOworCisKIC8qIE5vdGU6IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY3JlYXRlcyBhdHRyaWJ1dGUgZmlsZXMgaW4gdGhlCiAgICAvc3lzL2J1cy9wc2V1ZG8vZHJpdmVycy9zY3NpX2RlYnVnIGRpcmVjdG9yeS4gVGhlIGFkdmFudGFnZSBvZiB0aGVzZQogICAgZmlsZXMgKG92ZXIgdGhvc2UgZm91bmQgaW4gdGhlIC9zeXMvbW9kdWxlL3Njc2lfZGVidWcvcGFyYW1ldGVycwpAQCAtMjQ3OCwxMSArMjc5MSwxOSBAQAogCXJldCB8PSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl92aXJ0dWFsX2diKTsKIAlyZXQgfD0gZHJpdmVyX2NyZWF0ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfdnBkX3VzZV9ob3N0bm8pOwogCXJldCB8PSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9zZWN0b3Jfc2l6ZSk7CisJcmV0IHw9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX2RpeCk7CisJcmV0IHw9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX2RpZik7CisJcmV0IHw9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX2d1YXJkKTsKKwlyZXQgfD0gZHJpdmVyX2NyZWF0ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfYXRvKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBkb19yZW1vdmVfZHJpdmVyZnNfZmlsZXModm9pZCkKIHsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9hdG8pOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX2d1YXJkKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl9kaWYpOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX2RpeCk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfc2VjdG9yX3NpemUpOwogCWRyaXZlcl9yZW1vdmVfZmlsZSgmc2RlYnVnX2RyaXZlcmZzX2RyaXZlciwgJmRyaXZlcl9hdHRyX3ZwZF91c2VfaG9zdG5vKTsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnNkZWJ1Z19kcml2ZXJmc19kcml2ZXIsICZkcml2ZXJfYXR0cl92aXJ0dWFsX2diKTsKQEAgLTI1MjYsMTEgKzI4NDcsMzMgQEAKIAljYXNlIDQwOTY6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBpbnZhbGlkIHNlY3Rvcl9zaXplICV1XG4iLAorCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogaW52YWxpZCBzZWN0b3Jfc2l6ZSAlZFxuIiwKIAkJICAgICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzd2l0Y2ggKHNjc2lfZGVidWdfZGlmKSB7CisKKwljYXNlIFNEX0RJRl9UWVBFMF9QUk9URUNUSU9OOgorCWNhc2UgU0RfRElGX1RZUEUxX1BST1RFQ1RJT046CisJY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZGlmIG11c3QgYmUgMCwgMSBvciAzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNjc2lfZGVidWdfZ3VhcmQgPiAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBndWFyZCBtdXN0IGJlIDAgb3IgMVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzY3NpX2RlYnVnX2F0byA+IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGF0byBtdXN0IGJlIDAgb3IgMVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChzY3NpX2RlYnVnX2Rldl9zaXplX21iIDwgMSkKIAkJc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiA9IDE7ICAvKiBmb3JjZSBtaW5pbXVtIDEgTUIgcmFtZGlzayAqLwogCXN6ID0gKHVuc2lnbmVkIGxvbmcpc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiAqIDEwNDg1NzY7CkBAIC0yNTYzLDYgKzI5MDYsMjQgQEAKIAlpZiAoc2NzaV9kZWJ1Z19udW1fcGFydHMgPiAwKQogCQlzZGVidWdfYnVpbGRfcGFydHMoZmFrZV9zdG9yZXAsIHN6KTsKIAorCWlmIChzY3NpX2RlYnVnX2RpZikgeworCQlpbnQgZGlmX3NpemU7CisKKwkJZGlmX3NpemUgPSBzZGVidWdfc3RvcmVfc2VjdG9ycyAqIHNpemVvZihzdHJ1Y3Qgc2RfZGlmX3R1cGxlKTsKKwkJZGlmX3N0b3JlcCA9IHZtYWxsb2MoZGlmX3NpemUpOworCisJCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBkaWZfc3RvcmVwICV1IGJ5dGVzIEAgJXBcbiIsCisJCSAgICAgICBkaWZfc2l6ZSwgZGlmX3N0b3JlcCk7CisKKwkJaWYgKGRpZl9zdG9yZXAgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IG91dCBvZiBtZW0uIChESVgpXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfdm07CisJCX0KKworCQltZW1zZXQoZGlmX3N0b3JlcCwgMHhmZiwgZGlmX3NpemUpOworCX0KKwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmcHNldWRvX3ByaW1hcnkpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2lfZGVidWc6IGRldmljZV9yZWdpc3RlciBlcnJvcjogJWRcbiIsCkBAIC0yNjE1LDYgKzI5NzYsOCBAQAogZGV2X3VucmVnOgogCWRldmljZV91bnJlZ2lzdGVyKCZwc2V1ZG9fcHJpbWFyeSk7CiBmcmVlX3ZtOgorCWlmIChkaWZfc3RvcmVwKQorCQl2ZnJlZShkaWZfc3RvcmVwKTsKIAl2ZnJlZShmYWtlX3N0b3JlcCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjYzMiw2ICsyOTk1LDkgQEAKIAlidXNfdW5yZWdpc3RlcigmcHNldWRvX2xsZF9idXMpOwogCWRldmljZV91bnJlZ2lzdGVyKCZwc2V1ZG9fcHJpbWFyeSk7CiAKKwlpZiAoZGlmX3N0b3JlcCkKKwkJdmZyZWUoZGlmX3N0b3JlcCk7CisKIAl2ZnJlZShmYWtlX3N0b3JlcCk7CiB9CiAKQEAgLTI3MzIsNiArMzA5OCw4IEBACiAJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAgPSBOVUxMOwogCWludCBpbmpfcmVjb3ZlcmVkID0gMDsKIAlpbnQgaW5qX3RyYW5zcG9ydCA9IDA7CisJaW50IGlual9kaWYgPSAwOworCWludCBpbmpfZGl4ID0gMDsKIAlpbnQgZGVsYXlfb3ZlcnJpZGUgPSAwOwogCiAJc2NzaV9zZXRfcmVzaWQoU0NwbnQsIDApOwpAQCAtMjc2OSw2ICszMTM3LDEwIEBACiAJCQlpbmpfcmVjb3ZlcmVkID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwogCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQogCQkJaW5qX3RyYW5zcG9ydCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KKwkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIHNjc2lfZGVidWdfb3B0cykKKwkJCWlual9kaWYgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCisJCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCisJCQlpbmpfZGl4ID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwogCX0KIAogCWlmIChkZXZpcC0+d2x1bikgewpAQCAtMjg3MCw2ICszMjQyLDEyIEBACiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIEFCT1JURURfQ09NTUFORCwKIAkJCQkJVFJBTlNQT1JUX1BST0JMRU0sIEFDS19OQUtfVE8pOwogCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChpbmpfZGlmICYmICgwID09IGVycnN0cykpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCAxKTsKKwkJCWVycnN0cyA9IGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChpbmpfZGl4ICYmICgwID09IGVycnN0cykpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCAweDEwLCAxKTsKKwkJCWVycnN0cyA9IGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCQlicmVhazsKIAljYXNlIFJFUE9SVF9MVU5TOgkvKiBtYW5kYXRvcnksIGlnbm9yZSB1bml0IGF0dGVudGlvbiAqLwpAQCAtMjg5NCw2ICszMjcyLDEyIEBACiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFJFQ09WRVJFRF9FUlJPUiwKIAkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKIAkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoaW5qX2RpZiAmJiAoMCA9PSBlcnJzdHMpKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7CisJCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoaW5qX2RpeCAmJiAoMCA9PSBlcnJzdHMpKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7CisJCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBNT0RFX1NFTlNFOgpAQCAtMjk4Miw2ICszMzY2LDcgQEAKICAgICAgICAgaW50IGVycm9yID0gMDsKICAgICAgICAgc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkYmdfaG9zdDsKICAgICAgICAgc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKKwlpbnQgaG9zdF9wcm90OwogCiAJc2RiZ19ob3N0ID0gdG9fc2RlYnVnX2hvc3QoZGV2KTsKIApAQCAtMzAwMCw2ICszMzg1LDUwIEBACiAJCWhwbnQtPm1heF9pZCA9IHNjc2lfZGVidWdfbnVtX3RndHM7CiAJaHBudC0+bWF4X2x1biA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUzsJLyogPSBzY3NpX2RlYnVnX21heF9sdW5zOyAqLwogCisJaG9zdF9wcm90ID0gMDsKKworCXN3aXRjaCAoc2NzaV9kZWJ1Z19kaWYpIHsKKworCWNhc2UgU0RfRElGX1RZUEUxX1BST1RFQ1RJT046CisJCWhvc3RfcHJvdCA9IFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OOworCQlpZiAoc2NzaV9kZWJ1Z19kaXgpCisJCQlob3N0X3Byb3QgfD0gU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT047CisJCWJyZWFrOworCisJY2FzZSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTjoKKwkJaG9zdF9wcm90ID0gU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT047CisJCWlmIChzY3NpX2RlYnVnX2RpeCkKKwkJCWhvc3RfcHJvdCB8PSBTSE9TVF9ESVhfVFlQRTJfUFJPVEVDVElPTjsKKwkJYnJlYWs7CisKKwljYXNlIFNEX0RJRl9UWVBFM19QUk9URUNUSU9OOgorCQlob3N0X3Byb3QgPSBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTjsKKwkJaWYgKHNjc2lfZGVidWdfZGl4KQorCQkJaG9zdF9wcm90IHw9IFNIT1NUX0RJWF9UWVBFM19QUk9URUNUSU9OOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlmIChzY3NpX2RlYnVnX2RpeCkKKwkJCWhvc3RfcHJvdCB8PSBTSE9TVF9ESVhfVFlQRTBfUFJPVEVDVElPTjsKKwkJYnJlYWs7CisJfQorCisJc2NzaV9ob3N0X3NldF9wcm90KGhwbnQsIGhvc3RfcHJvdCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBob3N0IHByb3RlY3Rpb24lcyVzJXMlcyVzJXMlc1xuIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OKSA/ICIgRElGMSIgOiAiIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OKSA/ICIgRElGMiIgOiAiIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OKSA/ICIgRElGMyIgOiAiIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OKSA/ICIgRElYMCIgOiAiIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OKSA/ICIgRElYMSIgOiAiIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OKSA/ICIgRElYMiIgOiAiIiwKKwkgICAgICAgKGhvc3RfcHJvdCAmIFNIT1NUX0RJWF9UWVBFM19QUk9URUNUSU9OKSA/ICIgRElYMyIgOiAiIik7CisKKwlpZiAoc2NzaV9kZWJ1Z19ndWFyZCA9PSAxKQorCQlzY3NpX2hvc3Rfc2V0X2d1YXJkKGhwbnQsIFNIT1NUX0RJWF9HVUFSRF9JUCk7CisJZWxzZQorCQlzY3NpX2hvc3Rfc2V0X2d1YXJkKGhwbnQsIFNIT1NUX0RJWF9HVUFSRF9DUkMpOworCiAgICAgICAgIGVycm9yID0gc2NzaV9hZGRfaG9zdChocG50LCAmc2RiZ19ob3N0LT5kZXYpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBzY3NpX2FkZF9ob3N0IGZhaWxlZFxuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggYWQ2YTEzNy4uMGMyYzczYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xNDQxLDYgKzE0NDEsMTEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGVoX2xvY2tfZG9vcl9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCB1cHRvZGF0ZSkKK3sKKwlfX2Jsa19wdXRfcmVxdWVzdChyZXEtPnEsIHJlcSk7Cit9CisKIC8qKgogICogc2NzaV9laF9sb2NrX2Rvb3IgLSBQcmV2ZW50IG1lZGl1bSByZW1vdmFsIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZQogICogQHNkZXY6CVNDU0kgZGV2aWNlIHRvIHByZXZlbnQgbWVkaXVtIHJlbW92YWwKQEAgLTE0NjMsMjAgKzE0NjgsMjkgQEAKICAqLwogc3RhdGljIHZvaWQgc2NzaV9laF9sb2NrX2Rvb3Ioc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXVuc2lnbmVkIGNoYXIgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCi0JY21uZFswXSA9IEFMTE9XX01FRElVTV9SRU1PVkFMOwotCWNtbmRbMV0gPSAwOwotCWNtbmRbMl0gPSAwOwotCWNtbmRbM10gPSAwOwotCWNtbmRbNF0gPSBTQ1NJX1JFTU9WQUxfUFJFVkVOVDsKLQljbW5kWzVdID0gMDsKKwlyZXEgPSBibGtfZ2V0X3JlcXVlc3Qoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgUkVBRCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEpCisJCXJldHVybjsKIAotCXNjc2lfZXhlY3V0ZV9hc3luYyhzZGV2LCBjbW5kLCA2LCBETUFfTk9ORSwgTlVMTCwgMCwgMCwgMTAgKiBIWiwKLQkJCSAgIDUsIE5VTEwsIE5VTEwsIEdGUF9LRVJORUwpOworCXJlcS0+Y21kWzBdID0gQUxMT1dfTUVESVVNX1JFTU9WQUw7CisJcmVxLT5jbWRbMV0gPSAwOworCXJlcS0+Y21kWzJdID0gMDsKKwlyZXEtPmNtZFszXSA9IDA7CisJcmVxLT5jbWRbNF0gPSBTQ1NJX1JFTU9WQUxfUFJFVkVOVDsKKwlyZXEtPmNtZFs1XSA9IDA7CisKKwlyZXEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUocmVxLT5jbWRbMF0pOworCisJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOworCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9RVUlFVDsKKwlyZXEtPnRpbWVvdXQgPSAxMCAqIEhaOworCXJlcS0+cmV0cmllcyA9IDU7CisKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocmVxLT5xLCBOVUxMLCByZXEsIDEsIGVoX2xvY2tfZG9vcl9kb25lKTsKIH0KIAotCiAvKioKICAqIHNjc2lfcmVzdGFydF9vcGVyYXRpb25zIC0gcmVzdGFydCBpbyBvcGVyYXRpb25zIHRvIHRoZSBzcGVjaWZpZWQgaG9zdC4KICAqIEBzaG9zdDoJSG9zdCB3ZSBhcmUgcmVzdGFydGluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggYjgyZmZkOS4uNGIxM2UzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTI3NywxOTYgKzI3Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfZXhlY3V0ZV9yZXEpOwogCi1zdHJ1Y3Qgc2NzaV9pb19jb250ZXh0IHsKLQl2b2lkICpkYXRhOwotCXZvaWQgKCpkb25lKSh2b2lkICpkYXRhLCBjaGFyICpzZW5zZSwgaW50IHJlc3VsdCwgaW50IHJlc2lkKTsKLQljaGFyIHNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07Ci19OwotCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNjc2lfaW9fY29udGV4dF9jYWNoZTsKLQotc3RhdGljIHZvaWQgc2NzaV9lbmRfYXN5bmMoc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IHVwdG9kYXRlKQotewotCXN0cnVjdCBzY3NpX2lvX2NvbnRleHQgKnNpb2MgPSByZXEtPmVuZF9pb19kYXRhOwotCi0JaWYgKHNpb2MtPmRvbmUpCi0JCXNpb2MtPmRvbmUoc2lvYy0+ZGF0YSwgc2lvYy0+c2Vuc2UsIHJlcS0+ZXJyb3JzLCByZXEtPmRhdGFfbGVuKTsKLQotCWttZW1fY2FjaGVfZnJlZShzY3NpX2lvX2NvbnRleHRfY2FjaGUsIHNpb2MpOwotCV9fYmxrX3B1dF9yZXF1ZXN0KHJlcS0+cSwgcmVxKTsKLX0KLQotc3RhdGljIGludCBzY3NpX21lcmdlX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOwotCi0JYmlvLT5iaV9mbGFncyAmPSB+KDEgPDwgQklPX1NFR19WQUxJRCk7Ci0JaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSkKLQkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUlcpOwotCWJsa19xdWV1ZV9ib3VuY2UocSwgJmJpbyk7Ci0KLQlyZXR1cm4gYmxrX3JxX2FwcGVuZF9iaW8ocSwgcnEsIGJpbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfYmlfZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCi17Ci0JYmlvX3B1dChiaW8pOwotfQotCi0vKioKLSAqIHNjc2lfcmVxX21hcF9zZyAtIG1hcCBhIHNjYXR0ZXJsaXN0IGludG8gYSByZXF1ZXN0Ci0gKiBAcnE6CQlyZXF1ZXN0IHRvIGZpbGwKLSAqIEBzZ2w6CXNjYXR0ZXJsaXN0Ci0gKiBAbnNlZ3M6CW51bWJlciBvZiBlbGVtZW50cwotICogQGJ1ZmZsZW46CWxlbiBvZiBidWZmZXIKLSAqIEBnZnA6CW1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCi0gKgotICogc2NzaV9yZXFfbWFwX3NnIG1hcHMgYSBzY2F0dGVybGlzdCBpbnRvIGEgcmVxdWVzdCBzbyB0aGF0IHRoZQotICogcmVxdWVzdCBjYW4gYmUgc2VudCB0byB0aGUgYmxvY2sgbGF5ZXIuIFdlIGRvIG5vdCB0cnVzdCB0aGUgc2NhdHRlcmxpc3QKLSAqIHNlbnQgdG8gdXNlLCBhcyBzb21lIFVMRHMgdXNlIHRoYXQgc3RydWN0IHRvIG9ubHkgb3JnYW5pemUgdGhlIHBhZ2VzLgotICovCi1zdGF0aWMgaW50IHNjc2lfcmVxX21hcF9zZyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkJICAgaW50IG5zZWdzLCB1bnNpZ25lZCBidWZmbGVuLCBnZnBfdCBnZnApCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKLQlpbnQgbnJfcGFnZXMgPSAoYnVmZmxlbiArIHNnbFswXS5vZmZzZXQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IGJ1ZmZsZW4sIGxlbiwgYnl0ZXMsIG9mZjsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7Ci0JaW50IGksIGVyciwgbnJfdmVjcyA9IDA7Ci0KLQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuc2VncywgaSkgewotCQlwYWdlID0gc2dfcGFnZShzZyk7Ci0JCW9mZiA9IHNnLT5vZmZzZXQ7Ci0JCWxlbiA9IHNnLT5sZW5ndGg7Ci0KLQkJd2hpbGUgKGxlbiA+IDAgJiYgZGF0YV9sZW4gPiAwKSB7Ci0JCQkvKgotCQkJICogc2cgc2VuZHMgYSBzY2F0dGVybGlzdCB0aGF0IGlzIGxhcmdlciB0aGFuCi0JCQkgKiB0aGUgZGF0YV9sZW4gaXQgd2FudHMgdHJhbnNmZXJyZWQgZm9yIGNlcnRhaW4KLQkJCSAqIElPIHNpemVzCi0JCQkgKi8KLQkJCWJ5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7Ci0JCQlieXRlcyA9IG1pbihieXRlcywgZGF0YV9sZW4pOwotCi0JCQlpZiAoIWJpbykgewotCQkJCW5yX3ZlY3MgPSBtaW5fdChpbnQsIEJJT19NQVhfUEFHRVMsIG5yX3BhZ2VzKTsKLQkJCQlucl9wYWdlcyAtPSBucl92ZWNzOwotCi0JCQkJYmlvID0gYmlvX2FsbG9jKGdmcCwgbnJfdmVjcyk7Ci0JCQkJaWYgKCFiaW8pIHsKLQkJCQkJZXJyID0gLUVOT01FTTsKLQkJCQkJZ290byBmcmVlX2Jpb3M7Ci0JCQkJfQotCQkJCWJpby0+YmlfZW5kX2lvID0gc2NzaV9iaV9lbmRpbzsKLQkJCX0KLQotCQkJaWYgKGJpb19hZGRfcGNfcGFnZShxLCBiaW8sIHBhZ2UsIGJ5dGVzLCBvZmYpICE9Ci0JCQkgICAgYnl0ZXMpIHsKLQkJCQliaW9fcHV0KGJpbyk7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGZyZWVfYmlvczsKLQkJCX0KLQotCQkJaWYgKGJpby0+YmlfdmNudCA+PSBucl92ZWNzKSB7Ci0JCQkJZXJyID0gc2NzaV9tZXJnZV9iaW8ocnEsIGJpbyk7Ci0JCQkJaWYgKGVycikgewotCQkJCQliaW9fZW5kaW8oYmlvLCAwKTsKLQkJCQkJZ290byBmcmVlX2Jpb3M7Ci0JCQkJfQotCQkJCWJpbyA9IE5VTEw7Ci0JCQl9Ci0KLQkJCXBhZ2UrKzsKLQkJCWxlbiAtPSBieXRlczsKLQkJCWRhdGFfbGVuIC09Ynl0ZXM7Ci0JCQlvZmYgPSAwOwotCQl9Ci0JfQotCi0JcnEtPmJ1ZmZlciA9IHJxLT5kYXRhID0gTlVMTDsKLQlycS0+ZGF0YV9sZW4gPSBidWZmbGVuOwotCXJldHVybiAwOwotCi1mcmVlX2Jpb3M6Ci0Jd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKSB7Ci0JCXJxLT5iaW8gPSBiaW8tPmJpX25leHQ7Ci0JCS8qCi0JCSAqIGNhbGwgZW5kaW8gaW5zdGVhZCBvZiBiaW9fcHV0IGluY2FzZSBpdCB3YXMgYm91bmNlZAotCQkgKi8KLQkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqCi0gKiBzY3NpX2V4ZWN1dGVfYXN5bmMgLSBpbnNlcnQgcmVxdWVzdAotICogQHNkZXY6CXNjc2kgZGV2aWNlCi0gKiBAY21kOglzY3NpIGNvbW1hbmQKLSAqIEBjbWRfbGVuOglsZW5ndGggb2Ygc2NzaSBjZGIKLSAqIEBkYXRhX2RpcmVjdGlvbjogRE1BX1RPX0RFVklDRSwgRE1BX0ZST01fREVWSUNFLCBvciBETUFfTk9ORQotICogQGJ1ZmZlcjoJZGF0YSBidWZmZXIgKHRoaXMgY2FuIGJlIGEga2VybmVsIGJ1ZmZlciBvciBzY2F0dGVybGlzdCkKLSAqIEBidWZmbGVuOglsZW4gb2YgYnVmZmVyCi0gKiBAdXNlX3NnOglpZiBidWZmZXIgaXMgYSBzY2F0dGVybGlzdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKLSAqIEB0aW1lb3V0OglyZXF1ZXN0IHRpbWVvdXQgaW4gc2Vjb25kcwotICogQHJldHJpZXM6CW51bWJlciBvZiB0aW1lcyB0byByZXRyeSByZXF1ZXN0Ci0gKiBAcHJpdmRhdGE6CWRhdGEgcGFzc2VkIHRvIGRvbmUoKQotICogQGRvbmU6CWNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gZG9uZQotICogQGdmcDoJbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKLSAqLwotaW50IHNjc2lfZXhlY3V0ZV9hc3luYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtZCwKLQkJICAgICAgIGludCBjbWRfbGVuLCBpbnQgZGF0YV9kaXJlY3Rpb24sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKLQkJICAgICAgIGludCB1c2Vfc2csIGludCB0aW1lb3V0LCBpbnQgcmV0cmllcywgdm9pZCAqcHJpdmRhdGEsCi0JCSAgICAgICB2b2lkICgqZG9uZSkodm9pZCAqLCBjaGFyICosIGludCwgaW50KSwgZ2ZwX3QgZ2ZwKQotewotCXN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0Jc3RydWN0IHNjc2lfaW9fY29udGV4dCAqc2lvYzsKLQlpbnQgZXJyID0gMDsKLQlpbnQgd3JpdGUgPSAoZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSk7Ci0KLQlzaW9jID0ga21lbV9jYWNoZV96YWxsb2Moc2NzaV9pb19jb250ZXh0X2NhY2hlLCBnZnApOwotCWlmICghc2lvYykKLQkJcmV0dXJuIERSSVZFUl9FUlJPUiA8PCAyNDsKLQotCXJlcSA9IGJsa19nZXRfcmVxdWVzdChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB3cml0ZSwgZ2ZwKTsKLQlpZiAoIXJlcSkKLQkJZ290byBmcmVlX3NlbnNlOwotCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7Ci0KLQlpZiAodXNlX3NnKQotCQllcnIgPSBzY3NpX3JlcV9tYXBfc2cocmVxLCBidWZmZXIsIHVzZV9zZywgYnVmZmxlbiwgZ2ZwKTsKLQllbHNlIGlmIChidWZmbGVuKQotCQllcnIgPSBibGtfcnFfbWFwX2tlcm4ocmVxLT5xLCByZXEsIGJ1ZmZlciwgYnVmZmxlbiwgZ2ZwKTsKLQotCWlmIChlcnIpCi0JCWdvdG8gZnJlZV9yZXE7Ci0KLQlyZXEtPmNtZF9sZW4gPSBjbWRfbGVuOwotCW1lbXNldChyZXEtPmNtZCwgMCwgQkxLX01BWF9DREIpOyAvKiBBVEFQSSBoYXRlcyBnYXJiYWdlIGFmdGVyIENEQiAqLwotCW1lbWNweShyZXEtPmNtZCwgY21kLCByZXEtPmNtZF9sZW4pOwotCXJlcS0+c2Vuc2UgPSBzaW9jLT5zZW5zZTsKLQlyZXEtPnNlbnNlX2xlbiA9IDA7Ci0JcmVxLT50aW1lb3V0ID0gdGltZW91dDsKLQlyZXEtPnJldHJpZXMgPSByZXRyaWVzOwotCXJlcS0+ZW5kX2lvX2RhdGEgPSBzaW9jOwotCi0Jc2lvYy0+ZGF0YSA9IHByaXZkYXRhOwotCXNpb2MtPmRvbmUgPSBkb25lOwotCi0JYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHJlcS0+cSwgTlVMTCwgcmVxLCAxLCBzY3NpX2VuZF9hc3luYyk7Ci0JcmV0dXJuIDA7Ci0KLWZyZWVfcmVxOgotCWJsa19wdXRfcmVxdWVzdChyZXEpOwotZnJlZV9zZW5zZToKLQlrbWVtX2NhY2hlX2ZyZWUoc2NzaV9pb19jb250ZXh0X2NhY2hlLCBzaW9jKTsKLQlyZXR1cm4gRFJJVkVSX0VSUk9SIDw8IDI0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9leGVjdXRlX2FzeW5jKTsKLQogLyoKICAqIEZ1bmN0aW9uOiAgICBzY3NpX2luaXRfY21kX2VycmgoKQogICoKQEAgLTE5MjAsMjAgKzE3MzAsMTIgQEAKIHsKIAlpbnQgaTsKIAotCXNjc2lfaW9fY29udGV4dF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJzY3NpX2lvX2NvbnRleHQiLAotCQkJCQlzaXplb2Yoc3RydWN0IHNjc2lfaW9fY29udGV4dCksCi0JCQkJCTAsIDAsIE5VTEwpOwotCWlmICghc2NzaV9pb19jb250ZXh0X2NhY2hlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0NTSTogY2FuJ3QgaW5pdCBzY3NpIGlvIGNvbnRleHQgY2FjaGVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAlzY3NpX3NkYl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJzY3NpX2RhdGFfYnVmZmVyIiwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyKSwKIAkJCQkJICAgMCwgMCwgTlVMTCk7CiAJaWYgKCFzY3NpX3NkYl9jYWNoZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNDU0k6IGNhbid0IGluaXQgc2NzaSBzZGIgY2FjaGVcbiIpOwotCQlnb3RvIGNsZWFudXBfaW9fY29udGV4dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IFNHX01FTVBPT0xfTlI7IGkrKykgewpAQCAtMTk2OCw4ICsxNzcwLDYgQEAKIAkJCWttZW1fY2FjaGVfZGVzdHJveShzZ3AtPnNsYWIpOwogCX0KIAlrbWVtX2NhY2hlX2Rlc3Ryb3koc2NzaV9zZGJfY2FjaGUpOwotY2xlYW51cF9pb19jb250ZXh0OgotCWttZW1fY2FjaGVfZGVzdHJveShzY3NpX2lvX2NvbnRleHRfY2FjaGUpOwogCiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0xOTc4LDcgKzE3NzgsNiBAQAogewogCWludCBpOwogCi0Ja21lbV9jYWNoZV9kZXN0cm95KHNjc2lfaW9fY29udGV4dF9jYWNoZSk7CiAJa21lbV9jYWNoZV9kZXN0cm95KHNjc2lfc2RiX2NhY2hlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBTR19NRU1QT09MX05SOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCA4ZjRkZTIwLi5hMTRkMjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC03OTcsNiArNzk3LDcgQEAKIAljYXNlIFRZUEVfRU5DTE9TVVJFOgogCWNhc2UgVFlQRV9DT01NOgogCWNhc2UgVFlQRV9SQUlEOgorCWNhc2UgVFlQRV9PU0Q6CiAJCXNkZXYtPndyaXRlYWJsZSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgVFlQRV9ST006CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBkYTYzODAyLi5mYTQ3MTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTEwNDMsNyArMTA0Myw2IEBACiAvKioKICAqIHNjc2lfc3lzZnNfYWRkX2hvc3QgLSBhZGQgc2NzaSBob3N0IHRvIHN1YnN5c3RlbQogICogQHNob3N0OiAgICAgc2NzaSBob3N0IHN0cnVjdCB0byBhZGQgdG8gc3Vic3lzdGVtCi0gKiBAZGV2OiAgICAgICBwYXJlbnQgc3RydWN0IGRldmljZSBwb2ludGVyCiAgKiovCiBpbnQgc2NzaV9zeXNmc19hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggNWY3NzQxNy4uYTE1MmY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAl7IEZDX1BPUlRUWVBFX05QT1JULAkiTlBvcnQgKGZhYnJpYyB2aWEgcG9pbnQtdG8tcG9pbnQpIiB9LAogCXsgRkNfUE9SVFRZUEVfTkxQT1JULAkiTkxQb3J0IChmYWJyaWMgdmlhIGxvb3ApIiB9LAogCXsgRkNfUE9SVFRZUEVfTFBPUlQsCSJMUG9ydCAocHJpdmF0ZSBsb29wKSIgfSwKLQl7IEZDX1BPUlRUWVBFX1BUUCwJIlBvaW50LVRvLVBvaW50IChkaXJlY3QgbnBvcnQgY29ubmVjdGlvbiIgfSwKKwl7IEZDX1BPUlRUWVBFX1BUUCwJIlBvaW50LVRvLVBvaW50IChkaXJlY3QgbnBvcnQgY29ubmVjdGlvbikiIH0sCiAJeyBGQ19QT1JUVFlQRV9OUElWLAkJIk5QSVYgVlBPUlQiIH0sCiB9OwogZmNfZW51bV9uYW1lX3NlYXJjaChwb3J0X3R5cGUsIGZjX3BvcnRfdHlwZSwgZmNfcG9ydF90eXBlX25hbWVzKQpAQCAtNTMzLDEyICs1MzMsOCBAQAogCWV2ZW50LT5ldmVudF9jb2RlID0gZXZlbnRfY29kZTsKIAlldmVudC0+ZXZlbnRfZGF0YSA9IGV2ZW50X2RhdGE7CiAKLQllcnIgPSBubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmIChlcnIgJiYgKGVyciAhPSAtRVNSQ0gpKQkvKiBmaWx0ZXIgbm8gcmVjaXBpZW50IGVycm9ycyAqLwotCQkvKiBubG1zZ19tdWx0aWNhc3QgYWxyZWFkeSBrZnJlZV9za2InZCAqLwotCQlnb3RvIHNlbmRfZmFpbDsKLQorCW5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAorCQkJR0ZQX0tFUk5FTCk7CiAJcmV0dXJuOwogCiBzZW5kX2ZhaWxfc2tiOgpAQCAtNjA3LDEyICs2MDMsOCBAQAogCWV2ZW50LT5ldmVudF9jb2RlID0gRkNIX0VWVF9WRU5ET1JfVU5JUVVFOwogCW1lbWNweSgmZXZlbnQtPmV2ZW50X2RhdGEsIGRhdGFfYnVmLCBkYXRhX2xlbik7CiAKLQllcnIgPSBubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmIChlcnIgJiYgKGVyciAhPSAtRVNSQ0gpKQkvKiBmaWx0ZXIgbm8gcmVjaXBpZW50IGVycm9ycyAqLwotCQkvKiBubG1zZ19tdWx0aWNhc3QgYWxyZWFkeSBrZnJlZV9za2InZCAqLwotCQlnb3RvIHNlbmRfdmVuZG9yX2ZhaWw7Ci0KKwlubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKKwkJCUdGUF9LRVJORUwpOwogCXJldHVybjsKIAogc2VuZF92ZW5kb3JfZmFpbF9za2I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCmluZGV4IDc1YzkyOTcuLjA5NDc5NTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwpAQCAtMjQ2LDMwICsyNDYsMTMgQEAKIAltZW1zZXQoaWhvc3QsIDAsIHNpemVvZigqaWhvc3QpKTsKIAlhdG9taWNfc2V0KCZpaG9zdC0+bnJfc2NhbnMsIDApOwogCW11dGV4X2luaXQoJmlob3N0LT5tdXRleCk7Ci0KLQlzbnByaW50ZihpaG9zdC0+c2Nhbl93b3JrcV9uYW1lLCBzaXplb2YoaWhvc3QtPnNjYW5fd29ya3FfbmFtZSksCi0JCSAiaXNjc2lfc2Nhbl8lZCIsIHNob3N0LT5ob3N0X25vKTsKLQlpaG9zdC0+c2Nhbl93b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQkJaWhvc3QtPnNjYW5fd29ya3FfbmFtZSk7Ci0JaWYgKCFpaG9zdC0+c2Nhbl93b3JrcSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXNjc2lfcmVtb3ZlX2hvc3Qoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2UgKmNkZXYpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoZGV2KTsKLQlzdHJ1Y3QgaXNjc2lfY2xzX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7Ci0KLQlkZXN0cm95X3dvcmtxdWV1ZShpaG9zdC0+c2Nhbl93b3JrcSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBERUNMQVJFX1RSQU5TUE9SVF9DTEFTUyhpc2NzaV9ob3N0X2NsYXNzLAogCQkJICAgICAgICJpc2NzaV9ob3N0IiwKIAkJCSAgICAgICBpc2NzaV9zZXR1cF9ob3N0LAotCQkJICAgICAgIGlzY3NpX3JlbW92ZV9ob3N0LAorCQkJICAgICAgIE5VTEwsCiAJCQkgICAgICAgTlVMTCk7CiAKIHN0YXRpYyBERUNMQVJFX1RSQU5TUE9SVF9DTEFTUyhpc2NzaV9zZXNzaW9uX2NsYXNzLApAQCAtNTY4LDcgKzU1MSw3IEBACiAJICogc2Nhbm5pbmcgZnJvbSB1c2Vyc3BhY2UpLgogCSAqLwogCWlmIChzaG9zdC0+aG9zdHQtPnNjYW5fZmluaXNoZWQpIHsKLQkJaWYgKHF1ZXVlX3dvcmsoaWhvc3QtPnNjYW5fd29ya3EsICZzZXNzaW9uLT5zY2FuX3dvcmspKQorCQlpZiAoc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmc2Vzc2lvbi0+c2Nhbl93b3JrKSkKIAkJCWF0b21pY19pbmMoJmlob3N0LT5ucl9zY2Fucyk7CiAJfQogfQpAQCAtNjM2LDE0ICs2MTksNiBAQAogCWlzY3NpX3Nlc3Npb25fZXZlbnQoc2Vzc2lvbiwgSVNDU0lfS0VWRU5UX1VOQklORF9TRVNTSU9OKTsKIH0KIAotc3RhdGljIGludCBpc2NzaV91bmJpbmRfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24pOwotCXN0cnVjdCBpc2NzaV9jbHNfaG9zdCAqaWhvc3QgPSBzaG9zdC0+c2hvc3RfZGF0YTsKLQotCXJldHVybiBxdWV1ZV93b3JrKGlob3N0LT5zY2FuX3dvcmtxLCAmc2Vzc2lvbi0+dW5iaW5kX3dvcmspOwotfQotCiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgogaXNjc2lfYWxsb2Nfc2Vzc2lvbihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LAogCQkgICAgaW50IGRkX3NpemUpCkBAIC03OTYsNyArNzcxLDYgQEAKIHZvaWQgaXNjc2lfcmVtb3ZlX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKLQlzdHJ1Y3QgaXNjc2lfY2xzX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCkBAIC04MjEsNyArNzk1LDcgQEAKIAogCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnNlc3Npb24tPmRldik7CiAJLyogZmx1c2ggcnVubmluZyBzY2FucyB0aGVuIGRlbGV0ZSBkZXZpY2VzICovCi0JZmx1c2hfd29ya3F1ZXVlKGlob3N0LT5zY2FuX3dvcmtxKTsKKwlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOwogCV9faXNjc2lfdW5iaW5kX3Nlc3Npb24oJnNlc3Npb24tPnVuYmluZF93b3JrKTsKIAogCS8qIGh3IGlzY3NpIG1heSBub3QgaGF2ZSByZW1vdmVkIGFsbCBjb25uZWN0aW9ucyBmcm9tIHNlc3Npb24gKi8KQEAgLTk2NiwxNSArOTQwLDcgQEAKIHN0YXRpYyBpbnQKIGlzY3NpX2Jyb2FkY2FzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKQogewotCWludCByYzsKLQotCXJjID0gbmV0bGlua19icm9hZGNhc3QobmxzLCBza2IsIDAsIDEsIGdmcCk7Ci0JaWYgKHJjIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImlzY3NpOiBjYW4gbm90IGJyb2FkY2FzdCBza2IgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCAxLCBnZnApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjA3LDcgKzExNzMsNyBAQAogCSAqIHRoZSB1c2VyIGFuZCB3aGVuIHRoZSBkYWVtb24gaXMgcmVzdGFydGVkIGl0IHdpbGwgaGFuZGxlIGl0CiAJICovCiAJcmMgPSBpc2NzaV9icm9hZGNhc3Rfc2tiKHNrYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJjIDwgMCkKKwlpZiAocmMgPT0gLUVTUkNIKQogCQlpc2NzaV9jbHNfc2Vzc2lvbl9wcmludGsoS0VSTl9FUlIsIHNlc3Npb24sCiAJCQkJCSAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2Ygc2Vzc2lvbiAiCiAJCQkJCSAiZXZlbnQgJXUuIENoZWNrIGlzY3NpIGRhZW1vblxuIiwKQEAgLTEyMjMsMTQgKzExODksMTUgQEAKIHsKIAlzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSBwcml2LT5pc2NzaV90cmFuc3BvcnQ7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uOwotCXVpbnQzMl90IGhvc3Rfbm87CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAKIAlzZXNzaW9uID0gdHJhbnNwb3J0LT5jcmVhdGVfc2Vzc2lvbihlcCwgY21kc19tYXgsIHF1ZXVlX2RlcHRoLAotCQkJCQkgICAgaW5pdGlhbF9jbWRzbiwgJmhvc3Rfbm8pOworCQkJCQkgICAgaW5pdGlhbF9jbWRzbik7CiAJaWYgKCFzZXNzaW9uKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWV2LT5yLmNfc2Vzc2lvbl9yZXQuaG9zdF9ubyA9IGhvc3Rfbm87CisJc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24pOworCWV2LT5yLmNfc2Vzc2lvbl9yZXQuaG9zdF9ubyA9IHNob3N0LT5ob3N0X25vOwogCWV2LT5yLmNfc2Vzc2lvbl9yZXQuc2lkID0gc2Vzc2lvbi0+c2lkOwogCXJldHVybiAwOwogfQpAQCAtMTQ0Nyw3ICsxNDE0LDggQEAKIAljYXNlIElTQ1NJX1VFVkVOVF9VTkJJTkRfU0VTU0lPTjoKIAkJc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fbG9va3VwKGV2LT51LmRfc2Vzc2lvbi5zaWQpOwogCQlpZiAoc2Vzc2lvbikKLQkJCWlzY3NpX3VuYmluZF9zZXNzaW9uKHNlc3Npb24pOworCQkJc2NzaV9xdWV1ZV93b3JrKGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbiksCisJCQkJCSZzZXNzaW9uLT51bmJpbmRfd29yayk7CiAJCWVsc2UKIAkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMTgwOSw4ICsxNzc3LDcgQEAKIAlwcml2LT5kYWVtb25fcGlkID0gLTE7CiAJcHJpdi0+aXNjc2lfdHJhbnNwb3J0ID0gdHQ7CiAJcHJpdi0+dC51c2VyX3NjYW4gPSBpc2NzaV91c2VyX3NjYW47Ci0JaWYgKCEodHQtPmNhcHMgJiBDQVBfREFUQV9QQVRIX09GRkxPQUQpKQotCQlwcml2LT50LmNyZWF0ZV93b3JrX3F1ZXVlID0gMTsKKwlwcml2LT50LmNyZWF0ZV93b3JrX3F1ZXVlID0gMTsKIAogCXByaXYtPmRldi5jbGFzcyA9ICZpc2NzaV90cmFuc3BvcnRfY2xhc3M7CiAJZGV2X3NldF9uYW1lKCZwcml2LT5kZXYsICIlcyIsIHR0LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggNTUzMTBkYi4uYWVhYjVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExNjcsMjMgKzExNjcsMTkgQEAKIAkJLyoKIAkJICogVGhlIGRldmljZSBkb2VzIG5vdCB3YW50IHRoZSBhdXRvbWF0aWMgc3RhcnQgdG8gYmUgaXNzdWVkLgogCQkgKi8KLQkJaWYgKHNka3AtPmRldmljZS0+bm9fc3RhcnRfb25fYWRkKSB7CisJCWlmIChzZGtwLT5kZXZpY2UtPm5vX3N0YXJ0X29uX2FkZCkKIAkJCWJyZWFrOwotCQl9CiAKLQkJLyoKLQkJICogSWYgbWFudWFsIGludGVydmVudGlvbiBpcyByZXF1aXJlZCwgb3IgdGhpcyBpcyBhbgotCQkgKiBhYnNlbnQgVVNCIHN0b3JhZ2UgZGV2aWNlLCBhIHNwaW51cCBpcyBtZWFuaW5nbGVzcy4KLQkJICovCi0JCWlmIChzZW5zZV92YWxpZCAmJgotCQkgICAgc3NoZHIuc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSAmJgotCQkgICAgc3NoZHIuYXNjID09IDQgJiYgc3NoZHIuYXNjcSA9PSAzKSB7Ci0JCQlicmVhazsJCS8qIG1hbnVhbCBpbnRlcnZlbnRpb24gcmVxdWlyZWQgKi8KLQotCQkvKgotCQkgKiBJc3N1ZSBjb21tYW5kIHRvIHNwaW4gdXAgZHJpdmUgd2hlbiBub3QgcmVhZHkKLQkJICovCi0JCX0gZWxzZSBpZiAoc2Vuc2VfdmFsaWQgJiYgc3NoZHIuc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkgeworCQlpZiAoc2Vuc2VfdmFsaWQgJiYgc3NoZHIuc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkgeworCQkJaWYgKHNzaGRyLmFzYyA9PSA0ICYmIHNzaGRyLmFzY3EgPT0gMykKKwkJCQlicmVhazsJLyogbWFudWFsIGludGVydmVudGlvbiByZXF1aXJlZCAqLworCQkJaWYgKHNzaGRyLmFzYyA9PSA0ICYmIHNzaGRyLmFzY3EgPT0gMHhiKQorCQkJCWJyZWFrOwkvKiBzdGFuZGJ5ICovCisJCQlpZiAoc3NoZHIuYXNjID09IDQgJiYgc3NoZHIuYXNjcSA9PSAweGMpCisJCQkJYnJlYWs7CS8qIHVuYXZhaWxhYmxlICovCisJCQkvKgorCQkJICogSXNzdWUgY29tbWFuZCB0byBzcGluIHVwIGRyaXZlIHdoZW4gbm90IHJlYWR5CisJCQkgKi8KIAkJCWlmICghc3BpbnRpbWUpIHsKIAkJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJTcGlubmluZyB1cCBkaXNrLi4uIik7CiAJCQkJY21kWzBdID0gU1RBUlRfU1RPUDsKQEAgLTEyNzcsNDIgKzEyNzMsMTI2IEBACiAJc2RrcC0+Y2FwYWNpdHkgPSAwOwogfQogCi0vKgotICogcmVhZCBkaXNrIGNhcGFjaXR5Ci0gKi8KLXN0YXRpYyB2b2lkCi1zZF9yZWFkX2NhcGFjaXR5KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIHJlYWRfY2FwYWNpdHlfZXJyb3Ioc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgc3RydWN0IHNjc2lfZGV2aWNlICpzZHAsCisJCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyLCBpbnQgc2Vuc2VfdmFsaWQsCisJCQlpbnQgdGhlX3Jlc3VsdCkKK3sKKwlzZF9wcmludF9yZXN1bHQoc2RrcCwgdGhlX3Jlc3VsdCk7CisJaWYgKGRyaXZlcl9ieXRlKHRoZV9yZXN1bHQpICYgRFJJVkVSX1NFTlNFKQorCQlzZF9wcmludF9zZW5zZV9oZHIoc2RrcCwgc3NoZHIpOworCWVsc2UKKwkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiU2Vuc2Ugbm90IGF2YWlsYWJsZS5cbiIpOworCisJLyoKKwkgKiBTZXQgZGlydHkgYml0IGZvciByZW1vdmFibGUgZGV2aWNlcyBpZiBub3QgcmVhZHkgLQorCSAqIHNvbWV0aW1lcyBkcml2ZXMgd2lsbCBub3QgcmVwb3J0IHRoaXMgcHJvcGVybHkuCisJICovCisJaWYgKHNkcC0+cmVtb3ZhYmxlICYmCisJICAgIHNlbnNlX3ZhbGlkICYmIHNzaGRyLT5zZW5zZV9rZXkgPT0gTk9UX1JFQURZKQorCQlzZHAtPmNoYW5nZWQgPSAxOworCisJLyoKKwkgKiBXZSB1c2VkIHRvIHNldCBtZWRpYV9wcmVzZW50IHRvIDAgaGVyZSB0byBpbmRpY2F0ZSBubyBtZWRpYQorCSAqIGluIHRoZSBkcml2ZSwgYnV0IHNvbWUgZHJpdmVzIGZhaWwgcmVhZCBjYXBhY2l0eSBldmVuIHdpdGgKKwkgKiBtZWRpYSBwcmVzZW50LCBzbyB3ZSBjYW4ndCBkbyB0aGF0LgorCSAqLworCXNka3AtPmNhcGFjaXR5ID0gMDsgLyogdW5rbm93biBtYXBwZWQgdG8gemVybyAtIGFzIHVzdWFsICovCit9CisKKyNkZWZpbmUgUkMxNl9MRU4gMzIKKyNpZiBSQzE2X0xFTiA+IFNEX0JVRl9TSVpFCisjZXJyb3IgUkMxNl9MRU4gbXVzdCBub3QgYmUgbW9yZSB0aGFuIFNEX0JVRl9TSVpFCisjZW5kaWYKKworc3RhdGljIGludCByZWFkX2NhcGFjaXR5XzE2KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLAorCQkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyKQogewogCXVuc2lnbmVkIGNoYXIgY21kWzE2XTsKLQlpbnQgdGhlX3Jlc3VsdCwgcmV0cmllczsKLQlpbnQgc2VjdG9yX3NpemUgPSAwOwotCS8qIEZvcmNlIFJFQUQgQ0FQQUNJVFkoMTYpIHdoZW4gUFJPVEVDVD0xICovCi0JaW50IGxvbmdyYyA9IHNjc2lfZGV2aWNlX3Byb3RlY3Rpb24oc2RrcC0+ZGV2aWNlKSA/IDEgOiAwOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKIAlpbnQgc2Vuc2VfdmFsaWQgPSAwOwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOworCWludCB0aGVfcmVzdWx0OworCWludCByZXRyaWVzID0gMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGJhOworCXVuc2lnbmVkIHNlY3Rvcl9zaXplOwogCi1yZXBlYXQ6Ci0JcmV0cmllcyA9IDM7CiAJZG8gewotCQlpZiAobG9uZ3JjKSB7Ci0JCQltZW1zZXQoKHZvaWQgKikgY21kLCAwLCAxNik7Ci0JCQljbWRbMF0gPSBTRVJWSUNFX0FDVElPTl9JTjsKLQkJCWNtZFsxXSA9IFNBSV9SRUFEX0NBUEFDSVRZXzE2OwotCQkJY21kWzEzXSA9IDEzOwotCQkJbWVtc2V0KCh2b2lkICopIGJ1ZmZlciwgMCwgMTMpOwotCQl9IGVsc2UgewotCQkJY21kWzBdID0gUkVBRF9DQVBBQ0lUWTsKLQkJCW1lbXNldCgodm9pZCAqKSAmY21kWzFdLCAwLCA5KTsKLQkJCW1lbXNldCgodm9pZCAqKSBidWZmZXIsIDAsIDgpOwotCQl9Ci0JCQorCQltZW1zZXQoY21kLCAwLCAxNik7CisJCWNtZFswXSA9IFNFUlZJQ0VfQUNUSU9OX0lOOworCQljbWRbMV0gPSBTQUlfUkVBRF9DQVBBQ0lUWV8xNjsKKwkJY21kWzEzXSA9IFJDMTZfTEVOOworCQltZW1zZXQoYnVmZmVyLCAwLCBSQzE2X0xFTik7CisKIAkJdGhlX3Jlc3VsdCA9IHNjc2lfZXhlY3V0ZV9yZXEoc2RwLCBjbWQsIERNQV9GUk9NX0RFVklDRSwKLQkJCQkJICAgICAgYnVmZmVyLCBsb25ncmMgPyAxMyA6IDgsICZzc2hkciwKLQkJCQkJICAgICAgU0RfVElNRU9VVCwgU0RfTUFYX1JFVFJJRVMsIE5VTEwpOworCQkJCQlidWZmZXIsIFJDMTZfTEVOLCAmc3NoZHIsCisJCQkJCVNEX1RJTUVPVVQsIFNEX01BWF9SRVRSSUVTLCBOVUxMKTsKIAogCQlpZiAobWVkaWFfbm90X3ByZXNlbnQoc2RrcCwgJnNzaGRyKSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAtRU5PREVWOworCisJCWlmICh0aGVfcmVzdWx0KSB7CisJCQlzZW5zZV92YWxpZCA9IHNjc2lfc2Vuc2VfdmFsaWQoJnNzaGRyKTsKKwkJCWlmIChzZW5zZV92YWxpZCAmJgorCQkJICAgIHNzaGRyLnNlbnNlX2tleSA9PSBJTExFR0FMX1JFUVVFU1QgJiYKKwkJCSAgICAoc3NoZHIuYXNjID09IDB4MjAgfHwgc3NoZHIuYXNjID09IDB4MjQpICYmCisJCQkgICAgc3NoZHIuYXNjcSA9PSAweDAwKQorCQkJCS8qIEludmFsaWQgQ29tbWFuZCBPcGVyYXRpb24gQ29kZSBvcgorCQkJCSAqIEludmFsaWQgRmllbGQgaW4gQ0RCLCBqdXN0IHJldHJ5CisJCQkJICogc2lsZW50bHkgd2l0aCBSQzEwICovCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0cmllcy0tOworCisJfSB3aGlsZSAodGhlX3Jlc3VsdCAmJiByZXRyaWVzKTsKKworCWlmICh0aGVfcmVzdWx0KSB7CisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlJFQUQgQ0FQQUNJVFkoMTYpIGZhaWxlZFxuIik7CisJCXJlYWRfY2FwYWNpdHlfZXJyb3Ioc2RrcCwgc2RwLCAmc3NoZHIsIHNlbnNlX3ZhbGlkLCB0aGVfcmVzdWx0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2VjdG9yX3NpemUgPQkoYnVmZmVyWzhdIDw8IDI0KSB8IChidWZmZXJbOV0gPDwgMTYpIHwKKwkJCShidWZmZXJbMTBdIDw8IDgpIHwgYnVmZmVyWzExXTsKKwlsYmEgPSAgKCgodTY0KWJ1ZmZlclswXSA8PCA1NikgfCAoKHU2NClidWZmZXJbMV0gPDwgNDgpIHwKKwkJKCh1NjQpYnVmZmVyWzJdIDw8IDQwKSB8ICgodTY0KWJ1ZmZlclszXSA8PCAzMikgfAorCQkoKHU2NClidWZmZXJbNF0gPDwgMjQpIHwgKCh1NjQpYnVmZmVyWzVdIDw8IDE2KSB8CisJCSgodTY0KWJ1ZmZlcls2XSA8PCA4KSB8ICh1NjQpYnVmZmVyWzddKTsKKworCXNkX3JlYWRfcHJvdGVjdGlvbl90eXBlKHNka3AsIGJ1ZmZlcik7CisKKwlpZiAoKHNpemVvZihzZGtwLT5jYXBhY2l0eSkgPT0gNCkgJiYgKGxiYSA+PSAweGZmZmZmZmZmVUxMKSkgeworCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJUb28gYmlnIGZvciB0aGlzIGtlcm5lbC4gVXNlIGEgIgorCQkJImtlcm5lbCBjb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIGxhcmdlIGJsb2NrICIKKwkJCSJkZXZpY2VzLlxuIik7CisJCXNka3AtPmNhcGFjaXR5ID0gMDsKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJfQorCisJc2RrcC0+Y2FwYWNpdHkgPSBsYmEgKyAxOworCXJldHVybiBzZWN0b3Jfc2l6ZTsKK30KKworc3RhdGljIGludCByZWFkX2NhcGFjaXR5XzEwKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLAorCQkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXVuc2lnbmVkIGNoYXIgY21kWzE2XTsKKwlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CisJaW50IHNlbnNlX3ZhbGlkID0gMDsKKwlpbnQgdGhlX3Jlc3VsdDsKKwlpbnQgcmV0cmllcyA9IDM7CisJc2VjdG9yX3QgbGJhOworCXVuc2lnbmVkIHNlY3Rvcl9zaXplOworCisJZG8geworCQljbWRbMF0gPSBSRUFEX0NBUEFDSVRZOworCQltZW1zZXQoJmNtZFsxXSwgMCwgOSk7CisJCW1lbXNldChidWZmZXIsIDAsIDgpOworCisJCXRoZV9yZXN1bHQgPSBzY3NpX2V4ZWN1dGVfcmVxKHNkcCwgY21kLCBETUFfRlJPTV9ERVZJQ0UsCisJCQkJCWJ1ZmZlciwgOCwgJnNzaGRyLAorCQkJCQlTRF9USU1FT1VULCBTRF9NQVhfUkVUUklFUywgTlVMTCk7CisKKwkJaWYgKG1lZGlhX25vdF9wcmVzZW50KHNka3AsICZzc2hkcikpCisJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQlpZiAodGhlX3Jlc3VsdCkKIAkJCXNlbnNlX3ZhbGlkID0gc2NzaV9zZW5zZV92YWxpZCgmc3NoZHIpOwpAQCAtMTMyMCw4NSArMTQwMCw5NiBAQAogCiAJfSB3aGlsZSAodGhlX3Jlc3VsdCAmJiByZXRyaWVzKTsKIAotCWlmICh0aGVfcmVzdWx0ICYmICFsb25ncmMpIHsKKwlpZiAodGhlX3Jlc3VsdCkgewogCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJSRUFEIENBUEFDSVRZIGZhaWxlZFxuIik7Ci0JCXNkX3ByaW50X3Jlc3VsdChzZGtwLCB0aGVfcmVzdWx0KTsKLQkJaWYgKGRyaXZlcl9ieXRlKHRoZV9yZXN1bHQpICYgRFJJVkVSX1NFTlNFKQotCQkJc2RfcHJpbnRfc2Vuc2VfaGRyKHNka3AsICZzc2hkcik7Ci0JCWVsc2UKLQkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlNlbnNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJcmVhZF9jYXBhY2l0eV9lcnJvcihzZGtwLCBzZHAsICZzc2hkciwgc2Vuc2VfdmFsaWQsIHRoZV9yZXN1bHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQkJLyogU2V0IGRpcnR5IGJpdCBmb3IgcmVtb3ZhYmxlIGRldmljZXMgaWYgbm90IHJlYWR5IC0KLQkJICogc29tZXRpbWVzIGRyaXZlcyB3aWxsIG5vdCByZXBvcnQgdGhpcyBwcm9wZXJseS4gKi8KLQkJaWYgKHNkcC0+cmVtb3ZhYmxlICYmCi0JCSAgICBzZW5zZV92YWxpZCAmJiBzc2hkci5zZW5zZV9rZXkgPT0gTk9UX1JFQURZKQotCQkJc2RwLT5jaGFuZ2VkID0gMTsKKwlzZWN0b3Jfc2l6ZSA9CShidWZmZXJbNF0gPDwgMjQpIHwgKGJ1ZmZlcls1XSA8PCAxNikgfAorCQkJKGJ1ZmZlcls2XSA8PCA4KSB8IGJ1ZmZlcls3XTsKKwlsYmEgPQkoYnVmZmVyWzBdIDw8IDI0KSB8IChidWZmZXJbMV0gPDwgMTYpIHwKKwkJKGJ1ZmZlclsyXSA8PCA4KSB8IGJ1ZmZlclszXTsKIAotCQkvKiBFaXRoZXIgbm8gbWVkaWEgYXJlIHByZXNlbnQgYnV0IHRoZSBkcml2ZSBkaWRuJ3QgdGVsbCB1cywKLQkJICAgb3IgdGhleSBhcmUgcHJlc2VudCBidXQgdGhlIHJlYWQgY2FwYWNpdHkgY29tbWFuZCBmYWlscyAqLwotCQkvKiBzZGtwLT5tZWRpYV9wcmVzZW50ID0gMDsgLS0gbm90IGFsd2F5cyBjb3JyZWN0ICovCi0JCXNka3AtPmNhcGFjaXR5ID0gMDsgLyogdW5rbm93biBtYXBwZWQgdG8gemVybyAtIGFzIHVzdWFsICovCisJaWYgKChzaXplb2Yoc2RrcC0+Y2FwYWNpdHkpID09IDQpICYmIChsYmEgPT0gMHhmZmZmZmZmZikpIHsKKwkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiVG9vIGJpZyBmb3IgdGhpcyBrZXJuZWwuIFVzZSBhICIKKwkJCSJrZXJuZWwgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBsYXJnZSBibG9jayAiCisJCQkiZGV2aWNlcy5cbiIpOworCQlzZGtwLT5jYXBhY2l0eSA9IDA7CisJCXJldHVybiAtRU9WRVJGTE9XOworCX0KIAotCQlyZXR1cm47Ci0JfSBlbHNlIGlmICh0aGVfcmVzdWx0ICYmIGxvbmdyYykgewotCQkvKiBSRUFEIENBUEFDSVRZKDE2KSBoYXMgYmVlbiBmYWlsZWQgKi8KLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiUkVBRCBDQVBBQ0lUWSgxNikgZmFpbGVkXG4iKTsKLQkJc2RfcHJpbnRfcmVzdWx0KHNka3AsIHRoZV9yZXN1bHQpOwotCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJVc2UgMHhmZmZmZmZmZiBhcyBkZXZpY2Ugc2l6ZVxuIik7CisJc2RrcC0+Y2FwYWNpdHkgPSBsYmEgKyAxOworCXJldHVybiBzZWN0b3Jfc2l6ZTsKK30KIAotCQlzZGtwLT5jYXBhY2l0eSA9IDEgKyAoc2VjdG9yX3QpIDB4ZmZmZmZmZmY7CQkKLQkJZ290byBnb3RfZGF0YTsKLQl9CQotCQotCWlmICghbG9uZ3JjKSB7Ci0JCXNlY3Rvcl9zaXplID0gKGJ1ZmZlcls0XSA8PCAyNCkgfAotCQkJKGJ1ZmZlcls1XSA8PCAxNikgfCAoYnVmZmVyWzZdIDw8IDgpIHwgYnVmZmVyWzddOwotCQlpZiAoYnVmZmVyWzBdID09IDB4ZmYgJiYgYnVmZmVyWzFdID09IDB4ZmYgJiYKLQkJICAgIGJ1ZmZlclsyXSA9PSAweGZmICYmIGJ1ZmZlclszXSA9PSAweGZmKSB7Ci0JCQlpZihzaXplb2Yoc2RrcC0+Y2FwYWNpdHkpID4gNCkgewotCQkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlZlcnkgYmlnIGRldmljZS4gIgotCQkJCQkgICJUcnlpbmcgdG8gdXNlIFJFQUQgQ0FQQUNJVFkoMTYpLlxuIik7Ci0JCQkJbG9uZ3JjID0gMTsKLQkJCQlnb3RvIHJlcGVhdDsKLQkJCX0KLQkJCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgIlRvbyBiaWcgZm9yIHRoaXMga2VybmVsLiBVc2UgIgotCQkJCSAgImEga2VybmVsIGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgbGFyZ2UgIgotCQkJCSAgImJsb2NrIGRldmljZXMuXG4iKTsKLQkJCXNka3AtPmNhcGFjaXR5ID0gMDsKK3N0YXRpYyBpbnQgc2RfdHJ5X3JjMTZfZmlyc3Qoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCit7CisJaWYgKHNkcC0+c2NzaV9sZXZlbCA+IFNDU0lfU1BDXzIpCisJCXJldHVybiAxOworCWlmIChzY3NpX2RldmljZV9wcm90ZWN0aW9uKHNkcCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCBkaXNrIGNhcGFjaXR5CisgKi8KK3N0YXRpYyB2b2lkCitzZF9yZWFkX2NhcGFjaXR5KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlpbnQgc2VjdG9yX3NpemU7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBzZGtwLT5kZXZpY2U7CisJc2VjdG9yX3Qgb2xkX2NhcGFjaXR5ID0gc2RrcC0+Y2FwYWNpdHk7CisKKwlpZiAoc2RfdHJ5X3JjMTZfZmlyc3Qoc2RwKSkgeworCQlzZWN0b3Jfc2l6ZSA9IHJlYWRfY2FwYWNpdHlfMTYoc2RrcCwgc2RwLCBidWZmZXIpOworCQlpZiAoc2VjdG9yX3NpemUgPT0gLUVPVkVSRkxPVykKIAkJCWdvdG8gZ290X2RhdGE7CisJCWlmIChzZWN0b3Jfc2l6ZSA9PSAtRU5PREVWKQorCQkJcmV0dXJuOworCQlpZiAoc2VjdG9yX3NpemUgPCAwKQorCQkJc2VjdG9yX3NpemUgPSByZWFkX2NhcGFjaXR5XzEwKHNka3AsIHNkcCwgYnVmZmVyKTsKKwkJaWYgKHNlY3Rvcl9zaXplIDwgMCkKKwkJCXJldHVybjsKKwl9IGVsc2UgeworCQlzZWN0b3Jfc2l6ZSA9IHJlYWRfY2FwYWNpdHlfMTAoc2RrcCwgc2RwLCBidWZmZXIpOworCQlpZiAoc2VjdG9yX3NpemUgPT0gLUVPVkVSRkxPVykKKwkJCWdvdG8gZ290X2RhdGE7CisJCWlmIChzZWN0b3Jfc2l6ZSA8IDApCisJCQlyZXR1cm47CisJCWlmICgoc2l6ZW9mKHNka3AtPmNhcGFjaXR5KSA+IDQpICYmCisJCSAgICAoc2RrcC0+Y2FwYWNpdHkgPiAweGZmZmZmZmZmVUxMKSkgeworCQkJaW50IG9sZF9zZWN0b3Jfc2l6ZSA9IHNlY3Rvcl9zaXplOworCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiVmVyeSBiaWcgZGV2aWNlLiAiCisJCQkJCSJUcnlpbmcgdG8gdXNlIFJFQUQgQ0FQQUNJVFkoMTYpLlxuIik7CisJCQlzZWN0b3Jfc2l6ZSA9IHJlYWRfY2FwYWNpdHlfMTYoc2RrcCwgc2RwLCBidWZmZXIpOworCQkJaWYgKHNlY3Rvcl9zaXplIDwgMCkgeworCQkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkJIlVzaW5nIDB4ZmZmZmZmZmYgYXMgZGV2aWNlIHNpemVcbiIpOworCQkJCXNka3AtPmNhcGFjaXR5ID0gMSArIChzZWN0b3JfdCkgMHhmZmZmZmZmZjsKKwkJCQlzZWN0b3Jfc2l6ZSA9IG9sZF9zZWN0b3Jfc2l6ZTsKKwkJCQlnb3RvIGdvdF9kYXRhOworCQkJfQogCQl9Ci0JCXNka3AtPmNhcGFjaXR5ID0gMSArICgoKHNlY3Rvcl90KWJ1ZmZlclswXSA8PCAyNCkgfAotCQkJKGJ1ZmZlclsxXSA8PCAxNikgfAotCQkJKGJ1ZmZlclsyXSA8PCA4KSB8Ci0JCQlidWZmZXJbM10pOwkJCQotCX0gZWxzZSB7Ci0JCXNka3AtPmNhcGFjaXR5ID0gMSArICgoKHU2NClidWZmZXJbMF0gPDwgNTYpIHwKLQkJCSgodTY0KWJ1ZmZlclsxXSA8PCA0OCkgfAotCQkJKCh1NjQpYnVmZmVyWzJdIDw8IDQwKSB8Ci0JCQkoKHU2NClidWZmZXJbM10gPDwgMzIpIHwKLQkJCSgoc2VjdG9yX3QpYnVmZmVyWzRdIDw8IDI0KSB8Ci0JCQkoKHNlY3Rvcl90KWJ1ZmZlcls1XSA8PCAxNikgfAotCQkJKChzZWN0b3JfdClidWZmZXJbNl0gPDwgOCkgIHwKLQkJCShzZWN0b3JfdClidWZmZXJbN10pOwotCQkJCi0JCXNlY3Rvcl9zaXplID0gKGJ1ZmZlcls4XSA8PCAyNCkgfAotCQkJKGJ1ZmZlcls5XSA8PCAxNikgfCAoYnVmZmVyWzEwXSA8PCA4KSB8IGJ1ZmZlclsxMV07CisJfQogCi0JCXNkX3JlYWRfcHJvdGVjdGlvbl90eXBlKHNka3AsIGJ1ZmZlcik7Ci0JfQkKLQotCS8qIFNvbWUgZGV2aWNlcyByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzLCBub3QgdGhlCi0JICogaGlnaGVzdCBzZWN0b3IgbnVtYmVyLiAgTWFrZSB0aGUgbmVjZXNzYXJ5IGFkanVzdG1lbnQuICovCi0JaWYgKHNkcC0+Zml4X2NhcGFjaXR5KSB7CisJLyogU29tZSBkZXZpY2VzIGFyZSBrbm93biB0byByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBibG9ja3MsCisJICogbm90IHRoZSBoaWdoZXN0IGJsb2NrIG51bWJlci4gIFNvbWUgZGV2aWNlcyBoYXZlIHZlcnNpb25zCisJICogd2hpY2ggZG8gdGhpcyBhbmQgb3RoZXJzIHdoaWNoIGRvIG5vdC4gIFNvbWUgZGV2aWNlcyB3ZSBtaWdodAorCSAqIHN1c3BlY3Qgb2YgZG9pbmcgdGhpcyBidXQgd2UgZG9uJ3Qga25vdyBmb3IgY2VydGFpbi4KKwkgKgorCSAqIElmIHdlIGtub3cgdGhlIHJlcG9ydGVkIGNhcGFjaXR5IGlzIHdyb25nLCBkZWNyZW1lbnQgaXQuICBJZgorCSAqIHdlIGNhbiBvbmx5IGd1ZXNzLCB0aGVuIGFzc3VtZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyBpcyBldmVuCisJICogKHVzdWFsbHkgdHJ1ZSBidXQgbm90IGFsd2F5cykgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBsb3dlcmluZworCSAqIHRoZSBjYXBhY2l0eS4KKwkgKi8KKwlpZiAoc2RwLT5maXhfY2FwYWNpdHkgfHwKKwkgICAgKHNkcC0+Z3Vlc3NfY2FwYWNpdHkgJiYgKHNka3AtPmNhcGFjaXR5ICYgMHgwMSkpKSB7CisJCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICJBZGp1c3RpbmcgdGhlIHNlY3RvciBjb3VudCAiCisJCQkJImZyb20gaXRzIHJlcG9ydGVkIHZhbHVlOiAlbGx1XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHNka3AtPmNhcGFjaXR5KTsKIAkJLS1zZGtwLT5jYXBhY2l0eTsKLQotCS8qIFNvbWUgZGV2aWNlcyBoYXZlIHZlcnNpb24gd2hpY2ggcmVwb3J0IHRoZSBjb3JyZWN0IHNpemVzCi0JICogYW5kIG90aGVycyB3aGljaCBkbyBub3QuIFdlIGd1ZXNzIHNpemUgYWNjb3JkaW5nIHRvIGEgaGV1cmlzdGljCi0JICogYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBsb3dlcmluZyB0aGUgY2FwYWNpdHkuICovCi0JfSBlbHNlIHsKLQkJaWYgKHNkcC0+Z3Vlc3NfY2FwYWNpdHkpCi0JCQlpZiAoc2RrcC0+Y2FwYWNpdHkgJiAweDAxKSAvKiBvZGQgc2l6ZXMgYXJlIG9kZCAqLwotCQkJCS0tc2RrcC0+Y2FwYWNpdHk7CiAJfQogCiBnb3RfZGF0YToKQEAgLTE0NDEsMTAgKzE1MzIsMTEgQEAKIAkJc3RyaW5nX2dldF9zaXplKHN6LCBTVFJJTkdfVU5JVFNfMTAsIGNhcF9zdHJfMTAsCiAJCQkJc2l6ZW9mKGNhcF9zdHJfMTApKTsKIAotCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCQkgICIlbGx1ICVkLWJ5dGUgaGFyZHdhcmUgc2VjdG9yczogKCVzLyVzKVxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZGtwLT5jYXBhY2l0eSwKLQkJCSAgc2VjdG9yX3NpemUsIGNhcF9zdHJfMTAsIGNhcF9zdHJfMik7CisJCWlmIChzZGtwLT5maXJzdF9zY2FuIHx8IG9sZF9jYXBhY2l0eSAhPSBzZGtwLT5jYXBhY2l0eSkKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICIlbGx1ICVkLWJ5dGUgaGFyZHdhcmUgc2VjdG9yczogKCVzLyVzKVxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpc2RrcC0+Y2FwYWNpdHksCisJCQkJICBzZWN0b3Jfc2l6ZSwgY2FwX3N0cl8xMCwgY2FwX3N0cl8yKTsKIAl9CiAKIAkvKiBSZXNjYWxlIGNhcGFjaXR5IHRvIDUxMi1ieXRlIHVuaXRzICovCkBAIC0xNDgxLDYgKzE1NzMsNyBAQAogCWludCByZXM7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBzZGtwLT5kZXZpY2U7CiAJc3RydWN0IHNjc2lfbW9kZV9kYXRhIGRhdGE7CisJaW50IG9sZF93cCA9IHNka3AtPndyaXRlX3Byb3Q7CiAKIAlzZXRfZGlza19ybyhzZGtwLT5kaXNrLCAwKTsKIAlpZiAoc2RwLT5za2lwX21zX3BhZ2VfM2YpIHsKQEAgLTE1MjEsMTEgKzE2MTQsMTMgQEAKIAl9IGVsc2UgewogCQlzZGtwLT53cml0ZV9wcm90ID0gKChkYXRhLmRldmljZV9zcGVjaWZpYyAmIDB4ODApICE9IDApOwogCQlzZXRfZGlza19ybyhzZGtwLT5kaXNrLCBzZGtwLT53cml0ZV9wcm90KTsKLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiV3JpdGUgUHJvdGVjdCBpcyAlc1xuIiwKLQkJCSAgc2RrcC0+d3JpdGVfcHJvdCA/ICJvbiIgOiAib2ZmIik7Ci0JCXNkX3ByaW50ayhLRVJOX0RFQlVHLCBzZGtwLAotCQkJICAiTW9kZSBTZW5zZTogJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCSAgYnVmZmVyWzBdLCBidWZmZXJbMV0sIGJ1ZmZlclsyXSwgYnVmZmVyWzNdKTsKKwkJaWYgKHNka3AtPmZpcnN0X3NjYW4gfHwgb2xkX3dwICE9IHNka3AtPndyaXRlX3Byb3QpIHsKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIldyaXRlIFByb3RlY3QgaXMgJXNcbiIsCisJCQkJICBzZGtwLT53cml0ZV9wcm90ID8gIm9uIiA6ICJvZmYiKTsKKwkJCXNkX3ByaW50ayhLRVJOX0RFQlVHLCBzZGtwLAorCQkJCSAgIk1vZGUgU2Vuc2U6ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkJICBidWZmZXJbMF0sIGJ1ZmZlclsxXSwgYnVmZmVyWzJdLCBidWZmZXJbM10pOworCQl9CiAJfQogfQogCkBAIC0xNTQzLDYgKzE2MzgsOSBAQAogCWludCBtb2RlcGFnZTsKIAlzdHJ1Y3Qgc2NzaV9tb2RlX2RhdGEgZGF0YTsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CisJaW50IG9sZF93Y2UgPSBzZGtwLT5XQ0U7CisJaW50IG9sZF9yY2QgPSBzZGtwLT5SQ0Q7CisJaW50IG9sZF9kcG9mdWEgPSBzZGtwLT5EUE9GVUE7CiAKIAlpZiAoc2RwLT5za2lwX21zX3BhZ2VfOCkKIAkJZ290byBkZWZhdWx0czsKQEAgLTE2MTQsMTIgKzE3MTIsMTQgQEAKIAkJCXNka3AtPkRQT0ZVQSA9IDA7CiAJCX0KIAotCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCSAgICAgICAiV3JpdGUgY2FjaGU6ICVzLCByZWFkIGNhY2hlOiAlcywgJXNcbiIsCi0JCSAgICAgICBzZGtwLT5XQ0UgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotCQkgICAgICAgc2RrcC0+UkNEID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKLQkJICAgICAgIHNka3AtPkRQT0ZVQSA/ICJzdXBwb3J0cyBEUE8gYW5kIEZVQSIKLQkJICAgICAgIDogImRvZXNuJ3Qgc3VwcG9ydCBEUE8gb3IgRlVBIik7CisJCWlmIChzZGtwLT5maXJzdF9zY2FuIHx8IG9sZF93Y2UgIT0gc2RrcC0+V0NFIHx8CisJCSAgICBvbGRfcmNkICE9IHNka3AtPlJDRCB8fCBvbGRfZHBvZnVhICE9IHNka3AtPkRQT0ZVQSkKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICJXcml0ZSBjYWNoZTogJXMsIHJlYWQgY2FjaGU6ICVzLCAlc1xuIiwKKwkJCQkgIHNka3AtPldDRSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCQkJICBzZGtwLT5SQ0QgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiLAorCQkJCSAgc2RrcC0+RFBPRlVBID8gInN1cHBvcnRzIERQTyBhbmQgRlVBIgorCQkJCSAgOiAiZG9lc24ndCBzdXBwb3J0IERQTyBvciBGVUEiKTsKIAogCQlyZXR1cm47CiAJfQpAQCAtMTcxNSwxNSArMTgxNSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGRlZmF1bHRzLCB1bnRpbCB0aGUgZGV2aWNlIHRlbGxzIHVzIG90aGVyd2lzZSAqLwotCXNkcC0+c2VjdG9yX3NpemUgPSA1MTI7Ci0Jc2RrcC0+Y2FwYWNpdHkgPSAwOwotCXNka3AtPm1lZGlhX3ByZXNlbnQgPSAxOwotCXNka3AtPndyaXRlX3Byb3QgPSAwOwotCXNka3AtPldDRSA9IDA7Ci0Jc2RrcC0+UkNEID0gMDsKLQlzZGtwLT5BVE8gPSAwOwotCiAJc2Rfc3BpbnVwX2Rpc2soc2RrcCk7CiAKIAkvKgpAQCAtMTczNyw2ICsxODI4LDggQEAKIAkJc2RfcmVhZF9hcHBfdGFnX293bihzZGtwLCBidWZmZXIpOwogCX0KIAorCXNka3AtPmZpcnN0X3NjYW4gPSAwOworCiAJLyoKIAkgKiBXZSBub3cgaGF2ZSBhbGwgY2FjaGUgcmVsYXRlZCBpbmZvLCBkZXRlcm1pbmUgaG93IHdlIGRlYWwKIAkgKiB3aXRoIG9yZGVyZWQgcmVxdWVzdHMuICBOb3RlIHRoYXQgYXMgdGhlIGN1cnJlbnQgU0NTSQpAQCAtMTg0Nyw2ICsxOTQwLDE2IEBACiAJZ2QtPnByaXZhdGVfZGF0YSA9ICZzZGtwLT5kcml2ZXI7CiAJZ2QtPnF1ZXVlID0gc2RrcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOwogCisJLyogZGVmYXVsdHMsIHVudGlsIHRoZSBkZXZpY2UgdGVsbHMgdXMgb3RoZXJ3aXNlICovCisJc2RwLT5zZWN0b3Jfc2l6ZSA9IDUxMjsKKwlzZGtwLT5jYXBhY2l0eSA9IDA7CisJc2RrcC0+bWVkaWFfcHJlc2VudCA9IDE7CisJc2RrcC0+d3JpdGVfcHJvdCA9IDA7CisJc2RrcC0+V0NFID0gMDsKKwlzZGtwLT5SQ0QgPSAwOworCXNka3AtPkFUTyA9IDA7CisJc2RrcC0+Zmlyc3Rfc2NhbiA9IDE7CisKIAlzZF9yZXZhbGlkYXRlX2Rpc2soZ2QpOwogCiAJYmxrX3F1ZXVlX3ByZXBfcnEoc2RwLT5yZXF1ZXN0X3F1ZXVlLCBzZF9wcmVwX2ZuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5oIGIvZHJpdmVycy9zY3NpL3NkLmgKaW5kZXggNzU2MzhlNy4uNzA4Nzc4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmgKKysrIGIvZHJpdmVycy9zY3NpL3NkLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAl1bnNpZ25lZAlXQ0UgOiAxOwkvKiBzdGF0ZSBvZiBkaXNrIFdDRSBiaXQgKi8KIAl1bnNpZ25lZAlSQ0QgOiAxOwkvKiBzdGF0ZSBvZiBkaXNrIFJDRCBiaXQsIHVudXNlZCAqLwogCXVuc2lnbmVkCURQT0ZVQSA6IDE7CS8qIHN0YXRlIG9mIGRpc2sgRFBPRlVBIGJpdCAqLworCXVuc2lnbmVkCWZpcnN0X3NjYW4gOiAxOwogfTsKICNkZWZpbmUgdG9fc2NzaV9kaXNrKG9iaikgY29udGFpbmVyX29mKG9iaixzdHJ1Y3Qgc2NzaV9kaXNrLGRldikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Nlcy5jIGIvZHJpdmVycy9zY3NpL3Nlcy5jCmluZGV4IGU5NDZlMDUuLmM5MTQ2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2VzLmMKQEAgLTM0NSw0NCArMzQ1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgVlBEX0lOUVVJUllfU0laRSAzNgotCiBzdGF0aWMgdm9pZCBzZXNfbWF0Y2hfdG9fZW5jbG9zdXJlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LAogCQkJCSAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQl1bnNpZ25lZCBjaGFyICpidWYgPSBrbWFsbG9jKFZQRF9JTlFVSVJZX1NJWkUsIEdGUF9LRVJORUwpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBjaGFyICpkZXNjOwotCXUxNiB2cGRfbGVuOworCXVuc2lnbmVkIGludCB2cGRfbGVuOwogCXN0cnVjdCBlZmQgZWZkID0gewogCQkuYWRkciA9IDAsCiAJfTsKLQl1bnNpZ25lZCBjaGFyIGNtZFtdID0gewotCQlJTlFVSVJZLAotCQkxLAotCQkweDgzLAotCQlWUERfSU5RVUlSWV9TSVpFID4+IDgsCi0JCVZQRF9JTlFVSVJZX1NJWkUgJiAweGZmLAotCQkwCi0JfTsKIAorCWJ1ZiA9IHNjc2lfZ2V0X3ZwZF9wYWdlKHNkZXYsIDB4ODMpOwogCWlmICghYnVmKQogCQlyZXR1cm47CiAKLQlpZiAoc2NzaV9leGVjdXRlX3JlcShzZGV2LCBjbWQsIERNQV9GUk9NX0RFVklDRSwgYnVmLAotCQkJICAgICBWUERfSU5RVUlSWV9TSVpFLCBOVUxMLCBTRVNfVElNRU9VVCwgU0VTX1JFVFJJRVMsCi0JCQkgICAgIE5VTEwpKQotCQlnb3RvIGZyZWU7Ci0KLQl2cGRfbGVuID0gKGJ1ZlsyXSA8PCA4KSArIGJ1ZlszXTsKLQlrZnJlZShidWYpOwotCWJ1ZiA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKLQljbWRbM10gPSB2cGRfbGVuID4+IDg7Ci0JY21kWzRdID0gdnBkX2xlbiAmIDB4ZmY7Ci0JaWYgKHNjc2lfZXhlY3V0ZV9yZXEoc2RldiwgY21kLCBETUFfRlJPTV9ERVZJQ0UsIGJ1ZiwKLQkJCSAgICAgdnBkX2xlbiwgTlVMTCwgU0VTX1RJTUVPVVQsIFNFU19SRVRSSUVTLCBOVUxMKSkKLQkJZ290byBmcmVlOworCXZwZF9sZW4gPSAoKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgKyA0OwogCiAJZGVzYyA9IGJ1ZiArIDQ7CiAJd2hpbGUgKGRlc2MgPCBidWYgKyB2cGRfbGVuKSB7CkBAIC0zOTMsNyArMzcwLDcgQEAKIAkJdTggdHlwZSA9IGRlc2NbMV0gJiAweDBmOwogCQl1OCBsZW4gPSBkZXNjWzNdOwogCi0JCWlmIChwaXYgJiYgY29kZV9zZXQgPT0gMSAmJiBhc3NvYyA9PSAxICYmIGNvZGVfc2V0ID09IDEKKwkJaWYgKHBpdiAmJiBjb2RlX3NldCA9PSAxICYmIGFzc29jID09IDEKIAkJICAgICYmIHByb3RvID09IFNDU0lfUFJPVE9DT0xfU0FTICYmIHR5cGUgPT0gMyAmJiBsZW4gPT0gOCkKIAkJCWVmZC5hZGRyID0gKHU2NClkZXNjWzRdIDw8IDU2IHwKIAkJCQkodTY0KWRlc2NbNV0gPDwgNDggfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA1MTY5MjVkLi5mZmM4Nzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtOTgsNyArOTgsNiBAQAogc3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7CiAKICNkZWZpbmUgU0dfU0VDVE9SX1NaIDUxMgotI2RlZmluZSBTR19TRUNUT1JfTVNLIChTR19TRUNUT1JfU1ogLSAxKQogCiBzdGF0aWMgaW50IHNnX2FkZChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CiBzdGF0aWMgdm9pZCBzZ19yZW1vdmUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICopOwpAQCAtMTM3LDEwICsxMzYsMTEgQEAKIAl2b2xhdGlsZSBjaGFyIGRvbmU7CS8qIDAtPmJlZm9yZSBiaCwgMS0+YmVmb3JlIHJlYWQsIDItPnJlYWQgKi8KIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBleGVjdXRlX3dvcmsgZXc7CiB9IFNnX3JlcXVlc3Q7CiAKIHR5cGVkZWYgc3RydWN0IHNnX2ZkIHsJCS8qIGhvbGRzIHRoZSBzdGF0ZSBvZiBhIGZpbGUgZGVzY3JpcHRvciAqLwotCXN0cnVjdCBzZ19mZCAqbmV4dGZwOwkvKiBOVUxMIHdoZW4gbGFzdCBvcGVuZWQgZmQgb24gdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNmZF9zaWJsaW5nczsKIAlzdHJ1Y3Qgc2dfZGV2aWNlICpwYXJlbnRkcDsJLyogb3duaW5nIGRldmljZSAqLwogCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsJLyogcXVldWUgcmVhZCB1bnRpbCBjb21tYW5kIGRvbmUgKi8KIAlyd2xvY2tfdCBycV9saXN0X2xvY2s7CS8qIHByb3RlY3QgYWNjZXNzIHRvIGxpc3QgaW4gcmVxX2FyciAqLwpAQCAtMTU4LDYgKzE1OCw4IEBACiAJY2hhciBuZXh0X2NtZF9sZW47CS8qIDAgLT4gYXV0b21hdGljIChkZWYpLCA+MCAtPiB1c2Ugb24gbmV4dCB3cml0ZSgpICovCiAJY2hhciBrZWVwX29ycGhhbjsJLyogMCAtPiBkcm9wIG9ycGhhbiAoZGVmKSwgMSAtPiBrZWVwIGZvciByZWFkKCkgKi8KIAljaGFyIG1tYXBfY2FsbGVkOwkvKiAwIC0+IG1tYXAoKSBuZXZlciBjYWxsZWQgb24gdGhpcyBmZCAqLworCXN0cnVjdCBrcmVmIGZfcmVmOworCXN0cnVjdCBleGVjdXRlX3dvcmsgZXc7CiB9IFNnX2ZkOwogCiB0eXBlZGVmIHN0cnVjdCBzZ19kZXZpY2UgeyAvKiBob2xkcyB0aGUgc3RhdGUgb2YgZWFjaCBzY3NpIGdlbmVyaWMgZGV2aWNlICovCkBAIC0xNjUsMjcgKzE2NywyNSBAQAogCXdhaXRfcXVldWVfaGVhZF90IG9fZXhjbF93YWl0OwkvKiBxdWV1ZSBvcGVuKCkgd2hlbiBPX0VYQ0wgaW4gdXNlICovCiAJaW50IHNnX3RhYmxlc2l6ZTsJLyogYWRhcHRlcidzIG1heCBzY2F0dGVyLWdhdGhlciB0YWJsZSBzaXplICovCiAJdTMyIGluZGV4OwkJLyogZGV2aWNlIGluZGV4IG51bWJlciAqLwotCVNnX2ZkICpoZWFkZnA7CQkvKiBmaXJzdCBvcGVuIGZkIGJlbG9uZ2luZyB0byB0aGlzIGRldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc2ZkczsKIAl2b2xhdGlsZSBjaGFyIGRldGFjaGVkOwkvKiAwLT5hdHRhY2hlZCwgMS0+ZGV0YWNoZWQgcGVuZGluZyByZW1vdmFsICovCiAJdm9sYXRpbGUgY2hhciBleGNsdWRlOwkvKiBvcGVuZWQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgKi8KIAljaGFyIHNnZGVidWc7CQkvKiAwLT5vZmYsIDEtPnNlbnNlLCA5LT5kdW1wIGRldiwgMTAtPiBhbGwgZGV2cyAqLwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwogCXN0cnVjdCBjZGV2ICogY2RldjsJLyogY2hhcl9kZXYgW3N5c2ZzOiAvc3lzL2NkZXYvbWFqb3Ivc2c8bj5dICovCisJc3RydWN0IGtyZWYgZF9yZWY7CiB9IFNnX2RldmljZTsKIAotc3RhdGljIGludCBzZ19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG1vZGUpOwogLyogdGFza2xldCBvciBzb2Z0IGlycSBjYWxsYmFjayAqLwogc3RhdGljIHZvaWQgc2dfcnFfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHVwdG9kYXRlKTsKIHN0YXRpYyBpbnQgc2dfc3RhcnRfcmVxKFNnX3JlcXVlc3QgKnNycCwgdW5zaWduZWQgY2hhciAqY21kKTsKIHN0YXRpYyB2b2lkIHNnX2ZpbmlzaF9yZW1fcmVxKFNnX3JlcXVlc3QgKiBzcnApOwogc3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7Ci1zdGF0aWMgaW50IHNnX2J1aWxkX3NnYXQoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgY29uc3QgU2dfZmQgKiBzZnAsCi0JCQkgaW50IHRhYmxlc2l6ZSk7CiBzdGF0aWMgc3NpemVfdCBzZ19uZXdfcmVhZChTZ19mZCAqIHNmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJICAgU2dfcmVxdWVzdCAqIHNycCk7CiBzdGF0aWMgc3NpemVfdCBzZ19uZXdfd3JpdGUoU2dfZmQgKnNmcCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGludCBibG9ja2luZywKLQkJCWludCByZWFkX29ubHksIFNnX3JlcXVlc3QgKipvX3NycCk7CisJCQlpbnQgcmVhZF9vbmx5LCBpbnQgc2dfaW9fb3duZWQsIFNnX3JlcXVlc3QgKipvX3NycCk7CiBzdGF0aWMgaW50IHNnX2NvbW1vbl93cml0ZShTZ19mZCAqIHNmcCwgU2dfcmVxdWVzdCAqIHNycCwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmNtbmQsIGludCB0aW1lb3V0LCBpbnQgYmxvY2tpbmcpOwogc3RhdGljIGludCBzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcik7CkBAIC0xOTQsMTYgKzE5NCwxMyBAQAogc3RhdGljIHZvaWQgc2dfbGlua19yZXNlcnZlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLCBpbnQgc2l6ZSk7CiBzdGF0aWMgdm9pZCBzZ191bmxpbmtfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgU2dfcmVxdWVzdCAqIHNycCk7CiBzdGF0aWMgU2dfZmQgKnNnX2FkZF9zZnAoU2dfZGV2aWNlICogc2RwLCBpbnQgZGV2KTsKLXN0YXRpYyBpbnQgc2dfcmVtb3ZlX3NmcChTZ19kZXZpY2UgKiBzZHAsIFNnX2ZkICogc2ZwKTsKLXN0YXRpYyB2b2lkIF9fc2dfcmVtb3ZlX3NmcChTZ19kZXZpY2UgKiBzZHAsIFNnX2ZkICogc2ZwKTsKK3N0YXRpYyB2b2lkIHNnX3JlbW92ZV9zZnAoc3RydWN0IGtyZWYgKik7CiBzdGF0aWMgU2dfcmVxdWVzdCAqc2dfZ2V0X3JxX21hcmsoU2dfZmQgKiBzZnAsIGludCBwYWNrX2lkKTsKIHN0YXRpYyBTZ19yZXF1ZXN0ICpzZ19hZGRfcmVxdWVzdChTZ19mZCAqIHNmcCk7CiBzdGF0aWMgaW50IHNnX3JlbW92ZV9yZXF1ZXN0KFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwKTsKIHN0YXRpYyBpbnQgc2dfcmVzX2luX3VzZShTZ19mZCAqIHNmcCk7CiBzdGF0aWMgU2dfZGV2aWNlICpzZ19nZXRfZGV2KGludCBkZXYpOwotI2lmZGVmIENPTkZJR19TQ1NJX1BST0NfRlMKLXN0YXRpYyBpbnQgc2dfbGFzdF9kZXYodm9pZCk7Ci0jZW5kaWYKK3N0YXRpYyB2b2lkIHNnX3B1dF9kZXYoU2dfZGV2aWNlICpzZHApOwogCiAjZGVmaW5lIFNaX1NHX0hFQURFUiBzaXplb2Yoc3RydWN0IHNnX2hlYWRlcikKICNkZWZpbmUgU1pfU0dfSU9fSERSIHNpemVvZihzZ19pb19oZHJfdCkKQEAgLTIzNywyMiArMjM0LDE3IEBACiAJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CiAJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX29wZW46IGRldj0lZCwgZmxhZ3M9MHgleFxuIiwgZGV2LCBmbGFncykpOwogCXNkcCA9IHNnX2dldF9kZXYoZGV2KTsKLQlpZiAoKCFzZHApIHx8ICghc2RwLT5kZXZpY2UpKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0JaWYgKHNkcC0+ZGV0YWNoZWQpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoSVNfRVJSKHNkcCkpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihzZHApOworCQlzZHAgPSBOVUxMOworCQlnb3RvIHNnX3B1dDsKIAl9CiAKIAkvKiBUaGlzIGRyaXZlcidzIG1vZHVsZSBjb3VudCBidW1wZWQgYnkgZm9wc19nZXQgaW4gPGxpbnV4L2ZzLmg+ICovCiAJLyogUHJldmVudCB0aGUgZGV2aWNlIGRyaXZlciBmcm9tIHZhbmlzaGluZyB3aGlsZSB3ZSBzbGVlcCAqLwogCXJldHZhbCA9IHNjc2lfZGV2aWNlX2dldChzZHAtPmRldmljZSk7Ci0JaWYgKHJldHZhbCkgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQorCWlmIChyZXR2YWwpCisJCWdvdG8gc2dfcHV0OwogCiAJaWYgKCEoKGZsYWdzICYgT19OT05CTE9DSykgfHwKIAkgICAgICBzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RwLT5kZXZpY2UpKSkgewpAQCAtMjY2LDEzICsyNTgsMTMgQEAKIAkJCXJldHZhbCA9IC1FUEVSTTsgLyogQ2FuJ3QgbG9jayBpdCB3aXRoIHJlYWQgb25seSBhY2Nlc3MgKi8KIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9Ci0JCWlmIChzZHAtPmhlYWRmcCAmJiAoZmxhZ3MgJiBPX05PTkJMT0NLKSkgeworCQlpZiAoIWxpc3RfZW1wdHkoJnNkcC0+c2ZkcykgJiYgKGZsYWdzICYgT19OT05CTE9DSykpIHsKIAkJCXJldHZhbCA9IC1FQlVTWTsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAJCXJlcyA9IDA7CiAJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNkcC0+b19leGNsX3dhaXQsCi0JCQkoKHNkcC0+aGVhZGZwIHx8IHNkcC0+ZXhjbHVkZSkgPyAwIDogKHNkcC0+ZXhjbHVkZSA9IDEpKSwgcmVzKTsKKwkJCQkJICAgKCghbGlzdF9lbXB0eSgmc2RwLT5zZmRzKSB8fCBzZHAtPmV4Y2x1ZGUpID8gMCA6IChzZHAtPmV4Y2x1ZGUgPSAxKSksIHJlcyk7CiAJCWlmIChyZXMpIHsKIAkJCXJldHZhbCA9IHJlczsJLyogLUVSRVNUQVJUU1lTIGJlY2F1c2Ugc2lnbmFsIGhpdCBwcm9jZXNzICovCiAJCQlnb3RvIGVycm9yX291dDsKQEAgLTI5NCw3ICsyODYsNyBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yX291dDsKIAl9Ci0JaWYgKCFzZHAtPmhlYWRmcCkgewkvKiBubyBleGlzdGluZyBvcGVucyBvbiB0aGlzIGRldmljZSAqLworCWlmIChsaXN0X2VtcHR5KCZzZHAtPnNmZHMpKSB7CS8qIG5vIGV4aXN0aW5nIG9wZW5zIG9uIHRoaXMgZGV2aWNlICovCiAJCXNkcC0+c2dkZWJ1ZyA9IDA7CiAJCXEgPSBzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsKIAkJc2RwLT5zZ190YWJsZXNpemUgPSBtaW4ocS0+bWF4X2h3X3NlZ21lbnRzLApAQCAtMzAzLDE2ICsyOTUsMjAgQEAKIAlpZiAoKHNmcCA9IHNnX2FkZF9zZnAoc2RwLCBkZXYpKSkKIAkJZmlscC0+cHJpdmF0ZV9kYXRhID0gc2ZwOwogCWVsc2UgewotCQlpZiAoZmxhZ3MgJiBPX0VYQ0wpCisJCWlmIChmbGFncyAmIE9fRVhDTCkgewogCQkJc2RwLT5leGNsdWRlID0gMDsJLyogdW5kbyBpZiBlcnJvciAqLworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZHAtPm9fZXhjbF93YWl0KTsKKwkJfQogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX291dDsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotCi0gICAgICBlcnJvcl9vdXQ6Ci0Jc2NzaV9kZXZpY2VfcHV0KHNkcC0+ZGV2aWNlKTsKKwlyZXR2YWwgPSAwOworZXJyb3Jfb3V0OgorCWlmIChyZXR2YWwpCisJCXNjc2lfZGV2aWNlX3B1dChzZHAtPmRldmljZSk7CitzZ19wdXQ6CisJaWYgKHNkcCkKKwkJc2dfcHV0X2RldihzZHApOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMzI3LDEzICszMjMsMTMgQEAKIAlpZiAoKCEoc2ZwID0gKFNnX2ZkICopIGZpbHAtPnByaXZhdGVfZGF0YSkpIHx8ICghKHNkcCA9IHNmcC0+cGFyZW50ZHApKSkKIAkJcmV0dXJuIC1FTlhJTzsKIAlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfcmVsZWFzZTogJXNcbiIsIHNkcC0+ZGlzay0+ZGlza19uYW1lKSk7Ci0JaWYgKDAgPT0gc2dfcmVtb3ZlX3NmcChzZHAsIHNmcCkpIHsJLyogUmV0dXJucyAxIHdoZW4gc2RwIGdvbmUgKi8KLQkJaWYgKCFzZHAtPmRldGFjaGVkKSB7Ci0JCQlzY3NpX2RldmljZV9wdXQoc2RwLT5kZXZpY2UpOwotCQl9Ci0JCXNkcC0+ZXhjbHVkZSA9IDA7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2RwLT5vX2V4Y2xfd2FpdCk7Ci0JfQorCisJc2ZwLT5jbG9zZWQgPSAxOworCisJc2RwLT5leGNsdWRlID0gMDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNkcC0+b19leGNsX3dhaXQpOworCisJa3JlZl9wdXQoJnNmcC0+Zl9yZWYsIHNnX3JlbW92ZV9zZnApOwogCXJldHVybiAwOwogfQogCkBAIC01NTcsNyArNTUzLDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJYmxvY2tpbmcgPSAhKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIAlpZiAob2xkX2hkci5yZXBseV9sZW4gPCAwKQotCQlyZXR1cm4gc2dfbmV3X3dyaXRlKHNmcCwgZmlscCwgYnVmLCBjb3VudCwgYmxvY2tpbmcsIDAsIE5VTEwpOworCQlyZXR1cm4gc2dfbmV3X3dyaXRlKHNmcCwgZmlscCwgYnVmLCBjb3VudCwKKwkJCQkgICAgYmxvY2tpbmcsIDAsIDAsIE5VTEwpOwogCWlmIChjb3VudCA8IChTWl9TR19IRUFERVIgKyA2KSkKIAkJcmV0dXJuIC1FSU87CS8qIFRoZSBtaW5pbXVtIHNjc2kgY29tbWFuZCBsZW5ndGggaXMgNiBieXRlcy4gKi8KIApAQCAtNjM4LDcgKzYzNSw3IEBACiAKIHN0YXRpYyBzc2l6ZV90CiBzZ19uZXdfd3JpdGUoU2dfZmQgKnNmcCwgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCSBzaXplX3QgY291bnQsIGludCBibG9ja2luZywgaW50IHJlYWRfb25seSwKKwkJIHNpemVfdCBjb3VudCwgaW50IGJsb2NraW5nLCBpbnQgcmVhZF9vbmx5LCBpbnQgc2dfaW9fb3duZWQsCiAJCSBTZ19yZXF1ZXN0ICoqb19zcnApCiB7CiAJaW50IGs7CkBAIC02NTgsNiArNjU1LDcgQEAKIAkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX25ld193cml0ZTogcXVldWUgZnVsbFxuIikpOwogCQlyZXR1cm4gLUVET007CiAJfQorCXNycC0+c2dfaW9fb3duZWQgPSBzZ19pb19vd25lZDsKIAlocCA9ICZzcnAtPmhlYWRlcjsKIAlpZiAoX19jb3B5X2Zyb21fdXNlcihocCwgYnVmLCBTWl9TR19JT19IRFIpKSB7CiAJCXNnX3JlbW92ZV9yZXF1ZXN0KHNmcCwgc3JwKTsKQEAgLTc1NSwyNCArNzUzLDEzIEBACiAJaHAtPmR1cmF0aW9uID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKIAogCXNycC0+cnEtPnRpbWVvdXQgPSB0aW1lb3V0OworCWtyZWZfZ2V0KCZzZnAtPmZfcmVmKTsgLyogc2dfcnFfZW5kX2lvKCkgZG9lcyBrcmVmX3B1dCgpLiAqLwogCWJsa19leGVjdXRlX3JxX25vd2FpdChzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSwgc2RwLT5kaXNrLAogCQkJICAgICAgc3JwLT5ycSwgMSwgc2dfcnFfZW5kX2lvKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotc2dfc3JwX2RvbmUoU2dfcmVxdWVzdCAqc3JwLCBTZ19mZCAqc2ZwKQotewotCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCWludCBkb25lOwotCi0JcmVhZF9sb2NrX2lycXNhdmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOwotCWRvbmUgPSBzcnAtPmRvbmU7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc2ZwLT5ycV9saXN0X2xvY2ssIGlmbGFncyk7Ci0JcmV0dXJuIGRvbmU7Ci19Ci0KLXN0YXRpYyBpbnQKIHNnX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCSB1bnNpZ25lZCBpbnQgY21kX2luLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTgwNCwyNyArNzkxLDI2IEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXN1bHQgPQogCQkJICAgIHNnX25ld193cml0ZShzZnAsIGZpbHAsIHAsIFNaX1NHX0lPX0hEUiwKLQkJCQkJIGJsb2NraW5nLCByZWFkX29ubHksICZzcnApOworCQkJCQkgYmxvY2tpbmcsIHJlYWRfb25seSwgMSwgJnNycCk7CiAJCQlpZiAocmVzdWx0IDwgMCkKIAkJCQlyZXR1cm4gcmVzdWx0OwotCQkJc3JwLT5zZ19pb19vd25lZCA9IDE7CiAJCQl3aGlsZSAoMSkgewogCQkJCXJlc3VsdCA9IDA7CS8qIGZvbGxvd2luZyBtYWNybyB0byBiZWF0IHJhY2UgY29uZGl0aW9uICovCiAJCQkJX193YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2ZwLT5yZWFkX3dhaXQsCi0JCQkJCShzZHAtPmRldGFjaGVkIHx8IHNmcC0+Y2xvc2VkIHx8IHNnX3NycF9kb25lKHNycCwgc2ZwKSksCi0JCQkJCQkJICAgcmVzdWx0KTsKKwkJCQkJKHNycC0+ZG9uZSB8fCBzZHAtPmRldGFjaGVkKSwKKwkJCQkJcmVzdWx0KTsKIAkJCQlpZiAoc2RwLT5kZXRhY2hlZCkKIAkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQkJaWYgKHNmcC0+Y2xvc2VkKQotCQkJCQlyZXR1cm4gMDsJLyogcmVxdWVzdCBwYWNrZXQgZHJvcHBlZCBhbHJlYWR5ICovCi0JCQkJaWYgKDAgPT0gcmVzdWx0KQorCQkJCXdyaXRlX2xvY2tfaXJxKCZzZnAtPnJxX2xpc3RfbG9jayk7CisJCQkJaWYgKHNycC0+ZG9uZSkgeworCQkJCQlzcnAtPmRvbmUgPSAyOworCQkJCQl3cml0ZV91bmxvY2tfaXJxKCZzZnAtPnJxX2xpc3RfbG9jayk7CiAJCQkJCWJyZWFrOworCQkJCX0KIAkJCQlzcnAtPm9ycGhhbiA9IDE7CisJCQkJd3JpdGVfdW5sb2NrX2lycSgmc2ZwLT5ycV9saXN0X2xvY2spOwogCQkJCXJldHVybiByZXN1bHQ7CS8qIC1FUkVTVEFSVFNZUyBiZWNhdXNlIHNpZ25hbCBoaXQgcHJvY2VzcyAqLwogCQkJfQotCQkJd3JpdGVfbG9ja19pcnFzYXZlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQkJCXNycC0+ZG9uZSA9IDI7Ci0JCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2ZwLT5ycV9saXN0X2xvY2ssIGlmbGFncyk7CiAJCQlyZXN1bHQgPSBzZ19uZXdfcmVhZChzZnAsIHAsIFNaX1NHX0lPX0hEUiwgc3JwKTsKIAkJCXJldHVybiAocmVzdWx0IDwgMCkgPyByZXN1bHQgOiAwOwogCQl9CkBAIC0xMTU0LDcgKzExNDAsNiBAQAogc3RhdGljIGludAogc2dfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBtb2RlKQogewotCWludCByZXR2YWw7CiAJU2dfZGV2aWNlICpzZHA7CiAJU2dfZmQgKnNmcDsKIApAQCAtMTE2Myw4ICsxMTQ4LDcgQEAKIAlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfZmFzeW5jOiAlcywgbW9kZT0lZFxuIiwKIAkJCQkgICBzZHAtPmRpc2stPmRpc2tfbmFtZSwgbW9kZSkpOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgbW9kZSwgJnNmcC0+YXN5bmNfcXApOwotCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBtb2RlLCAmc2ZwLT5hc3luY19xcCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyNDAsNiArMTIyNCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZ19ycV9lbmRfaW9fdXNlcmNvbnRleHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZ19yZXF1ZXN0ICpzcnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNnX3JlcXVlc3QsIGV3LndvcmspOworCXN0cnVjdCBzZ19mZCAqc2ZwID0gc3JwLT5wYXJlbnRmcDsKKworCXNnX2ZpbmlzaF9yZW1fcmVxKHNycCk7CisJa3JlZl9wdXQoJnNmcC0+Zl9yZWYsIHNnX3JlbW92ZV9zZnApOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBhICJib3R0b20gaGFsZiIgaGFuZGxlciB0aGF0IGlzIGNhbGxlZCBieSB0aGUgbWlkCiAgKiBsZXZlbCB3aGVuIGEgY29tbWFuZCBpcyBjb21wbGV0ZWQgKG9yIGhhcyBmYWlsZWQpLgpAQCAtMTI0NywyNCArMTI0MCwyMyBAQAogc3RhdGljIHZvaWQgc2dfcnFfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHVwdG9kYXRlKQogewogCXN0cnVjdCBzZ19yZXF1ZXN0ICpzcnAgPSBycS0+ZW5kX2lvX2RhdGE7Ci0JU2dfZGV2aWNlICpzZHAgPSBOVUxMOworCVNnX2RldmljZSAqc2RwOwogCVNnX2ZkICpzZnA7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdW5zaWduZWQgaW50IG1zOwogCWNoYXIgKnNlbnNlOwotCWludCByZXN1bHQsIHJlc2lkOworCWludCByZXN1bHQsIHJlc2lkLCBkb25lID0gMTsKIAotCWlmIChOVUxMID09IHNycCkgewotCQlwcmludGsoS0VSTl9FUlIgInNnX2NtZF9kb25lOiBOVUxMIHJlcXVlc3RcbiIpOworCWlmIChXQVJOX09OKHNycC0+ZG9uZSAhPSAwKSkKIAkJcmV0dXJuOwotCX0KKwogCXNmcCA9IHNycC0+cGFyZW50ZnA7Ci0JaWYgKHNmcCkKLQkJc2RwID0gc2ZwLT5wYXJlbnRkcDsKLQlpZiAoKE5VTEwgPT0gc2RwKSB8fCBzZHAtPmRldGFjaGVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInNnX2NtZF9kb25lOiBkZXZpY2UgZGV0YWNoZWRcbiIpOworCWlmIChXQVJOX09OKHNmcCA9PSBOVUxMKSkKIAkJcmV0dXJuOwotCX0KKworCXNkcCA9IHNmcC0+cGFyZW50ZHA7CisJaWYgKHVubGlrZWx5KHNkcC0+ZGV0YWNoZWQpKQorCQlwcmludGsoS0VSTl9JTkZPICJzZ19ycV9lbmRfaW86IGRldmljZSBkZXRhY2hlZFxuIik7CiAKIAlzZW5zZSA9IHJxLT5zZW5zZTsKIAlyZXN1bHQgPSBycS0+ZXJyb3JzOwpAQCAtMTMwMywzMyArMTI5NSwyNSBAQAogCX0KIAkvKiBSZWx5IG9uIHdyaXRlIHBoYXNlIHRvIGNsZWFuIG91dCBzcnAgc3RhdHVzIHZhbHVlcywgc28gbm8gImVsc2UiICovCiAKLQlpZiAoc2ZwLT5jbG9zZWQpIHsJLyogd2hvb3BzIHRoaXMgZmQgYWxyZWFkeSByZWxlYXNlZCwgY2xlYW51cCAqLwotCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfY21kX2RvbmU6IGFscmVhZHkgY2xvc2VkLCBmcmVlaW5nIC4uLlxuIikpOwotCQlzZ19maW5pc2hfcmVtX3JlcShzcnApOwotCQlzcnAgPSBOVUxMOwotCQlpZiAoTlVMTCA9PSBzZnAtPmhlYWRycCkgewotCQkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX2NtZF9kb25lOiBhbHJlYWR5IGNsb3NlZCwgZmluYWwgY2xlYW51cFxuIikpOwotCQkJaWYgKDAgPT0gc2dfcmVtb3ZlX3NmcChzZHAsIHNmcCkpIHsJLyogZGV2aWNlIHN0aWxsIHByZXNlbnQgKi8KLQkJCQlzY3NpX2RldmljZV9wdXQoc2RwLT5kZXZpY2UpOwotCQkJfQotCQkJc2ZwID0gTlVMTDsKLQkJfQotCX0gZWxzZSBpZiAoc3JwICYmIHNycC0+b3JwaGFuKSB7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKKwlpZiAodW5saWtlbHkoc3JwLT5vcnBoYW4pKSB7CiAJCWlmIChzZnAtPmtlZXBfb3JwaGFuKQogCQkJc3JwLT5zZ19pb19vd25lZCA9IDA7Ci0JCWVsc2UgewotCQkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKLQkJCXNycCA9IE5VTEw7Ci0JCX0KKwkJZWxzZQorCQkJZG9uZSA9IDA7CiAJfQotCWlmIChzZnAgJiYgc3JwKSB7Ci0JCS8qIE5vdyB3YWtlIHVwIGFueSBzZ19yZWFkKCkgdGhhdCBpcyB3YWl0aW5nIGZvciB0aGlzIHBhY2tldC4gKi8KLQkJa2lsbF9mYXN5bmMoJnNmcC0+YXN5bmNfcXAsIFNJR1BPTEwsIFBPTExfSU4pOwotCQl3cml0ZV9sb2NrX2lycXNhdmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOwotCQlzcnAtPmRvbmUgPSAxOworCXNycC0+ZG9uZSA9IGRvbmU7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOworCisJaWYgKGxpa2VseShkb25lKSkgeworCQkvKiBOb3cgd2FrZSB1cCBhbnkgc2dfcmVhZCgpIHRoYXQgaXMgd2FpdGluZyBmb3IgdGhpcworCQkgKiBwYWNrZXQuCisJCSAqLwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNmcC0+cmVhZF93YWl0KTsKLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOwotCX0KKwkJa2lsbF9mYXN5bmMoJnNmcC0+YXN5bmNfcXAsIFNJR1BPTEwsIFBPTExfSU4pOworCQlrcmVmX3B1dCgmc2ZwLT5mX3JlZiwgc2dfcmVtb3ZlX3NmcCk7CisJfSBlbHNlCisJCWV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0KHNnX3JxX2VuZF9pb191c2VyY29udGV4dCwgJnNycC0+ZXcpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0gewpAQCAtMTM2NCwxNyArMTM0OCwxOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJrbWFsbG9jIFNnX2RldmljZSBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQotCWVycm9yID0gLUVOT01FTTsKKwogCWlmICghaWRyX3ByZV9nZXQoJnNnX2luZGV4X2lkciwgR0ZQX0tFUk5FTCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRyIGV4cGFuc2lvbiBTZ19kZXZpY2UgZmFpbHVyZVxuIik7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCWVycm9yID0gaWRyX2dldF9uZXcoJnNnX2luZGV4X2lkciwgc2RwLCAmayk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAKKwllcnJvciA9IGlkcl9nZXRfbmV3KCZzZ19pbmRleF9pZHIsIHNkcCwgJmspOwogCWlmIChlcnJvcikgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRyIGFsbG9jYXRpb24gU2dfZGV2aWNlIGZhaWx1cmU6ICVkXG4iLAogCQkgICAgICAgZXJyb3IpOwogCQlnb3RvIG91dDsKQEAgLTEzODgsOSArMTM3MywxMyBAQAogCWRpc2stPmZpcnN0X21pbm9yID0gazsKIAlzZHAtPmRpc2sgPSBkaXNrOwogCXNkcC0+ZGV2aWNlID0gc2NzaWRwOworCUlOSVRfTElTVF9IRUFEKCZzZHAtPnNmZHMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+b19leGNsX3dhaXQpOwogCXNkcC0+c2dfdGFibGVzaXplID0gbWluKHEtPm1heF9od19zZWdtZW50cywgcS0+bWF4X3BoeXNfc2VnbWVudHMpOwogCXNkcC0+aW5kZXggPSBrOworCWtyZWZfaW5pdCgmc2RwLT5kX3JlZik7CisKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKIAogCWVycm9yID0gMDsKICBvdXQ6CkBAIC0xNDAxLDYgKzEzOTAsOCBAQAogCXJldHVybiBzZHA7CiAKICBvdmVyZmxvdzoKKwlpZHJfcmVtb3ZlKCZzZ19pbmRleF9pZHIsIGspOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwogCXNkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgc2NzaWRwLAogCQkgICAgIlVuYWJsZSB0byBhdHRhY2ggc2cgZGV2aWNlIHR5cGU9JWQsIG1pbm9yICIKIAkJICAgICJudW1iZXIgZXhjZWVkcyAlZFxuIiwgc2NzaWRwLT50eXBlLCBTR19NQVhfREVWUyAtIDEpOwpAQCAtMTQ4OCw0OSArMTQ3OSw0NiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQKLXNnX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYsIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmNsX2ludGYpCitzdGF0aWMgdm9pZCBzZ19kZXZpY2VfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3Qgc2dfZGV2aWNlICpzZHAgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNnX2RldmljZSwgZF9yZWYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBDQVVUSU9OISAgTm90ZSB0aGF0IHRoZSBkZXZpY2UgY2FuIHN0aWxsIGJlIGZvdW5kIHZpYSBpZHJfZmluZCgpCisJICogZXZlbiB0aG91Z2ggdGhlIHJlZmNvdW50IGlzIDAuICBUaGVyZWZvcmUsIGRvIGlkcl9yZW1vdmUoKSBCRUZPUkUKKwkgKiBhbnkgb3RoZXIgY2xlYW51cC4KKwkgKi8KKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgZmxhZ3MpOworCWlkcl9yZW1vdmUoJnNnX2luZGV4X2lkciwgc2RwLT5pbmRleCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGZsYWdzKTsKKworCVNDU0lfTE9HX1RJTUVPVVQoMywKKwkJcHJpbnRrKCJzZ19kZXZpY2VfZGVzdHJveTogJXNcbiIsCisJCQlzZHAtPmRpc2stPmRpc2tfbmFtZSkpOworCisJcHV0X2Rpc2soc2RwLT5kaXNrKTsKKwlrZnJlZShzZHApOworfQorCitzdGF0aWMgdm9pZCBzZ19yZW1vdmUoc3RydWN0IGRldmljZSAqY2xfZGV2LCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbF9pbnRmKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRwID0gdG9fc2NzaV9kZXZpY2UoY2xfZGV2LT5wYXJlbnQpOwogCVNnX2RldmljZSAqc2RwID0gZGV2X2dldF9kcnZkYXRhKGNsX2Rldik7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJU2dfZmQgKnNmcDsKLQlTZ19mZCAqdHNmcDsKLQlTZ19yZXF1ZXN0ICpzcnA7Ci0JU2dfcmVxdWVzdCAqdHNycDsKLQlpbnQgZGVsYXk7CiAKLQlpZiAoIXNkcCkKKwlpZiAoIXNkcCB8fCBzZHAtPmRldGFjaGVkKQogCQlyZXR1cm47CiAKLQlkZWxheSA9IDA7CisJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX3JlbW92ZTogJXNcbiIsIHNkcC0+ZGlzay0+ZGlza19uYW1lKSk7CisKKwkvKiBOZWVkIGEgd3JpdGUgbG9jayB0byBzZXQgc2RwLT5kZXRhY2hlZC4gKi8KIAl3cml0ZV9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7Ci0JaWYgKHNkcC0+aGVhZGZwKSB7Ci0JCXNkcC0+ZGV0YWNoZWQgPSAxOwotCQlmb3IgKHNmcCA9IHNkcC0+aGVhZGZwOyBzZnA7IHNmcCA9IHRzZnApIHsKLQkJCXRzZnAgPSBzZnAtPm5leHRmcDsKLQkJCWZvciAoc3JwID0gc2ZwLT5oZWFkcnA7IHNycDsgc3JwID0gdHNycCkgewotCQkJCXRzcnAgPSBzcnAtPm5leHRycDsKLQkJCQlpZiAoc2ZwLT5jbG9zZWQgfHwgKDAgPT0gc2dfc3JwX2RvbmUoc3JwLCBzZnApKSkKLQkJCQkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKLQkJCX0KLQkJCWlmIChzZnAtPmNsb3NlZCkgewotCQkJCXNjc2lfZGV2aWNlX3B1dChzZHAtPmRldmljZSk7Ci0JCQkJX19zZ19yZW1vdmVfc2ZwKHNkcCwgc2ZwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGVsYXkgPSAxOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2ZwLT5yZWFkX3dhaXQpOwotCQkJCWtpbGxfZmFzeW5jKCZzZnAtPmFzeW5jX3FwLCBTSUdQT0xMLAotCQkJCQkgICAgUE9MTF9IVVApOwotCQkJfQotCQl9Ci0JCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19yZW1vdmU6IGRldj0lZCwgZGlydHlcbiIsIHNkcC0+aW5kZXgpKTsKLQkJaWYgKE5VTEwgPT0gc2RwLT5oZWFkZnApIHsKLQkJCWlkcl9yZW1vdmUoJnNnX2luZGV4X2lkciwgc2RwLT5pbmRleCk7Ci0JCX0KLQl9IGVsc2UgewkvKiBub3RoaW5nIGFjdGl2ZSwgc2ltcGxlIGNhc2UgKi8KLQkJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX3JlbW92ZTogZGV2PSVkXG4iLCBzZHAtPmluZGV4KSk7Ci0JCWlkcl9yZW1vdmUoJnNnX2luZGV4X2lkciwgc2RwLT5pbmRleCk7CisJc2RwLT5kZXRhY2hlZCA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZnAsICZzZHAtPnNmZHMsIHNmZF9zaWJsaW5ncykgeworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNmcC0+cmVhZF93YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnNmcC0+YXN5bmNfcXAsIFNJR1BPTEwsIFBPTExfSFVQKTsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAKQEAgLTE1MzgsMTMgKzE1MjYsOCBAQAogCWRldmljZV9kZXN0cm95KHNnX3N5c2ZzX2NsYXNzLCBNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIHNkcC0+aW5kZXgpKTsKIAljZGV2X2RlbChzZHAtPmNkZXYpOwogCXNkcC0+Y2RldiA9IE5VTEw7Ci0JcHV0X2Rpc2soc2RwLT5kaXNrKTsKLQlzZHAtPmRpc2sgPSBOVUxMOwotCWlmIChOVUxMID09IHNkcC0+aGVhZGZwKQotCQlrZnJlZShzZHApOwogCi0JaWYgKGRlbGF5KQotCQltc2xlZXAoMTApOwkvKiBkaXJ0eSBkZXRhY2ggc28gZGVsYXkgZGV2aWNlIGRlc3RydWN0aW9uICovCisJc2dfcHV0X2RldihzZHApOwogfQogCiBtb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwpAQCAtMTczOCw4ICsxNzIxLDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKDAgPT0gYmxrX3NpemUpCiAJCSsrYmxrX3NpemU7CS8qIGRvbid0IGtub3cgd2h5ICovCi0vKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqLwotCWJsa19zaXplID0gKGJsa19zaXplICsgU0dfU0VDVE9SX01TSykgJiAoflNHX1NFQ1RPUl9NU0spOworCS8qIHJvdW5kIHJlcXVlc3QgdXAgdG8gbmV4dCBoaWdoZXN0IFNHX1NFQ1RPUl9TWiBieXRlIGJvdW5kYXJ5ICovCisJYmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTsKIAlTQ1NJX0xPR19USU1FT1VUKDQsIHByaW50aygic2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcbiIsCiAJCQkJICAgYnVmZl9zaXplLCBibGtfc2l6ZSkpOwogCkBAIC0xOTQxLDIyICsxOTI0LDYgQEAKIAlyZXR1cm4gcmVzcDsKIH0KIAotI2lmZGVmIENPTkZJR19TQ1NJX1BST0NfRlMKLXN0YXRpYyBTZ19yZXF1ZXN0ICoKLXNnX2dldF9udGhfcmVxdWVzdChTZ19mZCAqIHNmcCwgaW50IG50aCkKLXsKLQlTZ19yZXF1ZXN0ICpyZXNwOwotCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCWludCBrOwotCi0JcmVhZF9sb2NrX2lycXNhdmUoJnNmcC0+cnFfbGlzdF9sb2NrLCBpZmxhZ3MpOwotCWZvciAoayA9IDAsIHJlc3AgPSBzZnAtPmhlYWRycDsgcmVzcCAmJiAoayA8IG50aCk7Ci0JICAgICArK2ssIHJlc3AgPSByZXNwLT5uZXh0cnApIDsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQlyZXR1cm4gcmVzcDsKLX0KLSNlbmRpZgotCiAvKiBhbHdheXMgYWRkcyB0byBlbmQgb2YgbGlzdCAqLwogc3RhdGljIFNnX3JlcXVlc3QgKgogc2dfYWRkX3JlcXVlc3QoU2dfZmQgKiBzZnApCkBAIC0yMDMyLDIyICsxOTk5LDYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi0jaWZkZWYgQ09ORklHX1NDU0lfUFJPQ19GUwotc3RhdGljIFNnX2ZkICoKLXNnX2dldF9udGhfc2ZwKFNnX2RldmljZSAqIHNkcCwgaW50IG50aCkKLXsKLQlTZ19mZCAqcmVzcDsKLQl1bnNpZ25lZCBsb25nIGlmbGFnczsKLQlpbnQgazsKLQotCXJlYWRfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCWZvciAoayA9IDAsIHJlc3AgPSBzZHAtPmhlYWRmcDsgcmVzcCAmJiAoayA8IG50aCk7Ci0JICAgICArK2ssIHJlc3AgPSByZXNwLT5uZXh0ZnApIDsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCXJldHVybiByZXNwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBTZ19mZCAqCiBzZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcCwgaW50IGRldikKIHsKQEAgLTIwNjIsNiArMjAxMyw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2ZwLT5yZWFkX3dhaXQpOwogCXJ3bG9ja19pbml0KCZzZnAtPnJxX2xpc3RfbG9jayk7CiAKKwlrcmVmX2luaXQoJnNmcC0+Zl9yZWYpOwogCXNmcC0+dGltZW91dCA9IFNHX0RFRkFVTFRfVElNRU9VVDsKIAlzZnAtPnRpbWVvdXRfdXNlciA9IFNHX0RFRkFVTFRfVElNRU9VVF9VU0VSOwogCXNmcC0+Zm9yY2VfcGFja2lkID0gU0dfREVGX0ZPUkNFX1BBQ0tfSUQ7CkBAIC0yMDcxLDE0ICsyMDIzLDcgQEAKIAlzZnAtPmtlZXBfb3JwaGFuID0gU0dfREVGX0tFRVBfT1JQSEFOOwogCXNmcC0+cGFyZW50ZHAgPSBzZHA7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOwotCWlmICghc2RwLT5oZWFkZnApCi0JCXNkcC0+aGVhZGZwID0gc2ZwOwotCWVsc2UgewkJCS8qIGFkZCB0byB0YWlsIG9mIGV4aXN0aW5nIGxpc3QgKi8KLQkJU2dfZmQgKnBmcCA9IHNkcC0+aGVhZGZwOwotCQl3aGlsZSAocGZwLT5uZXh0ZnApCi0JCQlwZnAgPSBwZnAtPm5leHRmcDsKLQkJcGZwLT5uZXh0ZnAgPSBzZnA7Ci0JfQorCWxpc3RfYWRkX3RhaWwoJnNmcC0+c2ZkX3NpYmxpbmdzLCAmc2RwLT5zZmRzKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKIAlTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfYWRkX3NmcDogc2ZwPTB4JXBcbiIsIHNmcCkpOwogCWlmICh1bmxpa2VseShzZ19iaWdfYnVmZiAhPSBkZWZfcmVzZXJ2ZWRfc2l6ZSkpCkBAIC0yMDg5LDc1ICsyMDM0LDUyIEBACiAJc2dfYnVpbGRfcmVzZXJ2ZShzZnAsIGJ1ZmZsZW4pOwogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19hZGRfc2ZwOiAgIGJ1ZmZsZW49JWQsIGtfdXNlX3NnPSVkXG4iLAogCQkJICAgc2ZwLT5yZXNlcnZlLmJ1ZmZsZW4sIHNmcC0+cmVzZXJ2ZS5rX3VzZV9zZykpOworCisJa3JlZl9nZXQoJnNkcC0+ZF9yZWYpOworCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJcmV0dXJuIHNmcDsKIH0KIAotc3RhdGljIHZvaWQKLV9fc2dfcmVtb3ZlX3NmcChTZ19kZXZpY2UgKiBzZHAsIFNnX2ZkICogc2ZwKQorc3RhdGljIHZvaWQgc2dfcmVtb3ZlX3NmcF91c2VyY29udGV4dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JU2dfZmQgKmZwOwotCVNnX2ZkICpwcmV2X2ZwOworCXN0cnVjdCBzZ19mZCAqc2ZwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZ19mZCwgZXcud29yayk7CisJc3RydWN0IHNnX2RldmljZSAqc2RwID0gc2ZwLT5wYXJlbnRkcDsKIAotCXByZXZfZnAgPSBzZHAtPmhlYWRmcDsKLQlpZiAoc2ZwID09IHByZXZfZnApCi0JCXNkcC0+aGVhZGZwID0gcHJldl9mcC0+bmV4dGZwOwotCWVsc2UgewotCQl3aGlsZSAoKGZwID0gcHJldl9mcC0+bmV4dGZwKSkgewotCQkJaWYgKHNmcCA9PSBmcCkgewotCQkJCXByZXZfZnAtPm5leHRmcCA9IGZwLT5uZXh0ZnA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlwcmV2X2ZwID0gZnA7Ci0JCX0KLQl9CisJLyogQ2xlYW51cCBhbnkgcmVzcG9uc2VzIHdoaWNoIHdlcmUgbmV2ZXIgcmVhZCgpLiAqLworCXdoaWxlIChzZnAtPmhlYWRycCkKKwkJc2dfZmluaXNoX3JlbV9yZXEoc2ZwLT5oZWFkcnApOworCiAJaWYgKHNmcC0+cmVzZXJ2ZS5idWZmbGVuID4gMCkgewotCQlTQ1NJX0xPR19USU1FT1VUKDYsIAotCQkJcHJpbnRrKCJfX3NnX3JlbW92ZV9zZnA6ICAgIGJ1ZmZsZW49JWQsIGtfdXNlX3NnPSVkXG4iLAotCQkJKGludCkgc2ZwLT5yZXNlcnZlLmJ1ZmZsZW4sIChpbnQpIHNmcC0+cmVzZXJ2ZS5rX3VzZV9zZykpOworCQlTQ1NJX0xPR19USU1FT1VUKDYsCisJCQlwcmludGsoInNnX3JlbW92ZV9zZnA6ICAgIGJ1ZmZsZW49JWQsIGtfdXNlX3NnPSVkXG4iLAorCQkJCShpbnQpIHNmcC0+cmVzZXJ2ZS5idWZmbGVuLAorCQkJCShpbnQpIHNmcC0+cmVzZXJ2ZS5rX3VzZV9zZykpOwogCQlzZ19yZW1vdmVfc2NhdCgmc2ZwLT5yZXNlcnZlKTsKIAl9Ci0Jc2ZwLT5wYXJlbnRkcCA9IE5VTEw7Ci0JU0NTSV9MT0dfVElNRU9VVCg2LCBwcmludGsoIl9fc2dfcmVtb3ZlX3NmcDogICAgc2ZwPTB4JXBcbiIsIHNmcCkpOworCisJU0NTSV9MT0dfVElNRU9VVCg2LAorCQlwcmludGsoInNnX3JlbW92ZV9zZnA6ICVzLCBzZnA9MHglcFxuIiwKKwkJCXNkcC0+ZGlzay0+ZGlza19uYW1lLAorCQkJc2ZwKSk7CiAJa2ZyZWUoc2ZwKTsKKworCXNjc2lfZGV2aWNlX3B1dChzZHAtPmRldmljZSk7CisJc2dfcHV0X2RldihzZHApOworCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCi0vKiBSZXR1cm5zIDAgaW4gbm9ybWFsIGNhc2UsIDEgd2hlbiBkZXRhY2hlZCBhbmQgc2RwIG9iamVjdCByZW1vdmVkICovCi1zdGF0aWMgaW50Ci1zZ19yZW1vdmVfc2ZwKFNnX2RldmljZSAqIHNkcCwgU2dfZmQgKiBzZnApCitzdGF0aWMgdm9pZCBzZ19yZW1vdmVfc2ZwKHN0cnVjdCBrcmVmICprcmVmKQogewotCVNnX3JlcXVlc3QgKnNycDsKLQlTZ19yZXF1ZXN0ICp0c3JwOwotCWludCBkaXJ0eSA9IDA7Ci0JaW50IHJlcyA9IDA7CisJc3RydWN0IHNnX2ZkICpzZnAgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNnX2ZkLCBmX3JlZik7CisJc3RydWN0IHNnX2RldmljZSAqc2RwID0gc2ZwLT5wYXJlbnRkcDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAotCWZvciAoc3JwID0gc2ZwLT5oZWFkcnA7IHNycDsgc3JwID0gdHNycCkgewotCQl0c3JwID0gc3JwLT5uZXh0cnA7Ci0JCWlmIChzZ19zcnBfZG9uZShzcnAsIHNmcCkpCi0JCQlzZ19maW5pc2hfcmVtX3JlcShzcnApOwotCQllbHNlCi0JCQkrK2RpcnR5OwotCX0KLQlpZiAoMCA9PSBkaXJ0eSkgewotCQl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CisJbGlzdF9kZWwoJnNmcC0+c2ZkX3NpYmxpbmdzKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNkcC0+b19leGNsX3dhaXQpOwogCi0JCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKLQkJX19zZ19yZW1vdmVfc2ZwKHNkcCwgc2ZwKTsKLQkJaWYgKHNkcC0+ZGV0YWNoZWQgJiYgKE5VTEwgPT0gc2RwLT5oZWFkZnApKSB7Ci0JCQlpZHJfcmVtb3ZlKCZzZ19pbmRleF9pZHIsIHNkcC0+aW5kZXgpOwotCQkJa2ZyZWUoc2RwKTsKLQkJCXJlcyA9IDE7Ci0JCX0KLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7Ci0JfSBlbHNlIHsKLQkJLyogTU9EX0lOQydzIHRvIGluaGliaXQgdW5sb2FkaW5nIHNnIGFuZCBhc3NvY2lhdGVkIGFkYXB0ZXIgZHJpdmVyICovCi0JCS8qIG9ubHkgYnVtcCB0aGUgYWNjZXNzX2NvdW50IGlmIHdlIGFjdHVhbGx5IHN1Y2NlZWRlZCBpbgotCQkgKiB0aHJvd2luZyBhbm90aGVyIGNvdW50ZXIgb24gdGhlIGhvc3QgbW9kdWxlICovCi0JCXNjc2lfZGV2aWNlX2dldChzZHAtPmRldmljZSk7CS8qIFhYWDogcmV0dmFsIGlnbm9yZWQ/ICovCQotCQlzZnAtPmNsb3NlZCA9IDE7CS8qIGZsYWcgZGlydHkgc3RhdGUgb24gdGhpcyBmZCAqLwotCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfcmVtb3ZlX3NmcDogd29ycmlzb21lLCAlZCB3cml0ZXMgcGVuZGluZ1xuIiwKLQkJCQkgIGRpcnR5KSk7Ci0JfQotCXJldHVybiByZXM7CisJZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQoc2dfcmVtb3ZlX3NmcF91c2VyY29udGV4dCwgJnNmcC0+ZXcpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMTk5LDE5ICsyMTIxLDM4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIFNnX2RldmljZSAqCi1zZ19nZXRfZGV2KGludCBkZXYpCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNnX2luZGV4X2xvY2sgaGVsZCAqLworc3RhdGljIFNnX2RldmljZSAqc2dfbG9va3VwX2RldihpbnQgZGV2KQogewotCVNnX2RldmljZSAqc2RwOwotCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCXJldHVybiBpZHJfZmluZCgmc2dfaW5kZXhfaWRyLCBkZXYpOworfQogCi0JcmVhZF9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7Ci0Jc2RwID0gaWRyX2ZpbmQoJnNnX2luZGV4X2lkciwgZGV2KTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOworc3RhdGljIFNnX2RldmljZSAqc2dfZ2V0X2RldihpbnQgZGV2KQoreworCXN0cnVjdCBzZ19kZXZpY2UgKnNkcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGZsYWdzKTsKKwlzZHAgPSBzZ19sb29rdXBfZGV2KGRldik7CisJaWYgKCFzZHApCisJCXNkcCA9IEVSUl9QVFIoLUVOWElPKTsKKwllbHNlIGlmIChzZHAtPmRldGFjaGVkKSB7CisJCS8qIElmIHNkcC0+ZGV0YWNoZWQsIHRoZW4gdGhlIHJlZmNvdW50IG1heSBhbHJlYWR5IGJlIDAsIGluCisJCSAqIHdoaWNoIGNhc2UgaXQgd291bGQgYmUgYSBidWcgdG8gZG8ga3JlZl9nZXQoKS4KKwkJICovCisJCXNkcCA9IEVSUl9QVFIoLUVOT0RFVik7CisJfSBlbHNlCisJCWtyZWZfZ2V0KCZzZHAtPmRfcmVmKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZzZ19pbmRleF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gc2RwOwogfQogCitzdGF0aWMgdm9pZCBzZ19wdXRfZGV2KHN0cnVjdCBzZ19kZXZpY2UgKnNkcCkKK3sKKwlrcmVmX3B1dCgmc2RwLT5kX3JlZiwgc2dfZGV2aWNlX2Rlc3Ryb3kpOworfQorCiAjaWZkZWYgQ09ORklHX1NDU0lfUFJPQ19GUwogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzZ19wcm9jX3NncCA9IE5VTEw7CkBAIC0yNDY4LDggKzI0MDksMTAgQEAKIAlzdHJ1Y3Qgc2dfcHJvY19kZXZpdGVyICogaXQgPSAoc3RydWN0IHNnX3Byb2NfZGV2aXRlciAqKSB2OwogCVNnX2RldmljZSAqc2RwOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRwOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0Jc2RwID0gaXQgPyBzZ19nZXRfZGV2KGl0LT5pbmRleCkgOiBOVUxMOworCXJlYWRfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOworCXNkcCA9IGl0ID8gc2dfbG9va3VwX2RldihpdC0+aW5kZXgpIDogTlVMTDsKIAlpZiAoc2RwICYmIChzY3NpZHAgPSBzZHAtPmRldmljZSkgJiYgKCFzZHAtPmRldGFjaGVkKSkKIAkJc2VxX3ByaW50ZihzLCAiJWRcdCVkXHQlZFx0JWRcdCVkXHQlZFx0JWRcdCVkXHQlZFxuIiwKIAkJCSAgICAgIHNjc2lkcC0+aG9zdC0+aG9zdF9ubywgc2NzaWRwLT5jaGFubmVsLApAQCAtMjQ4MCw2ICsyNDIzLDcgQEAKIAkJCSAgICAgIChpbnQpIHNjc2lfZGV2aWNlX29ubGluZShzY3NpZHApKTsKIAllbHNlCiAJCXNlcV9wcmludGYocywgIi0xXHQtMVx0LTFcdC0xXHQtMVx0LTFcdC0xXHQtMVx0LTFcbiIpOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0OTMsMTYgKzI0MzcsMjAgQEAKIAlzdHJ1Y3Qgc2dfcHJvY19kZXZpdGVyICogaXQgPSAoc3RydWN0IHNnX3Byb2NfZGV2aXRlciAqKSB2OwogCVNnX2RldmljZSAqc2RwOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRwOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0Jc2RwID0gaXQgPyBzZ19nZXRfZGV2KGl0LT5pbmRleCkgOiBOVUxMOworCXJlYWRfbG9ja19pcnFzYXZlKCZzZ19pbmRleF9sb2NrLCBpZmxhZ3MpOworCXNkcCA9IGl0ID8gc2dfbG9va3VwX2RldihpdC0+aW5kZXgpIDogTlVMTDsKIAlpZiAoc2RwICYmIChzY3NpZHAgPSBzZHAtPmRldmljZSkgJiYgKCFzZHAtPmRldGFjaGVkKSkKIAkJc2VxX3ByaW50ZihzLCAiJTguOHNcdCUxNi4xNnNcdCU0LjRzXG4iLAogCQkJICAgc2NzaWRwLT52ZW5kb3IsIHNjc2lkcC0+bW9kZWwsIHNjc2lkcC0+cmV2KTsKIAllbHNlCiAJCXNlcV9wcmludGYocywgIjxubyBhY3RpdmUgZGV2aWNlPlxuIik7CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAorLyogbXVzdCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBzZ19pbmRleF9sb2NrICovCiBzdGF0aWMgdm9pZCBzZ19wcm9jX2RlYnVnX2hlbHBlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIFNnX2RldmljZSAqIHNkcCkKIHsKIAlpbnQgaywgbSwgbmV3X2ludGVyZmFjZSwgYmxlbiwgdXNnOwpAQCAtMjUxMiw5ICsyNDYwLDEyIEBACiAJY29uc3QgY2hhciAqIGNwOwogCXVuc2lnbmVkIGludCBtczsKIAotCWZvciAoayA9IDA7IChmcCA9IHNnX2dldF9udGhfc2ZwKHNkcCwgaykpOyArK2spIHsKKwlrID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZwLCAmc2RwLT5zZmRzLCBzZmRfc2libGluZ3MpIHsKKwkJaysrOworCQlyZWFkX2xvY2soJmZwLT5ycV9saXN0X2xvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAkJc2VxX3ByaW50ZihzLCAiICAgRkQoJWQpOiB0aW1lb3V0PSVkbXMgYnVmZmxlbj0lZCAiCi0JCQkgICAiKHJlcylzZ2F0PSVkIGxvd19kbWE9JWRcbiIsIGsgKyAxLAorCQkJICAgIihyZXMpc2dhdD0lZCBsb3dfZG1hPSVkXG4iLCBrLAogCQkJICAgamlmZmllc190b19tc2VjcyhmcC0+dGltZW91dCksCiAJCQkgICBmcC0+cmVzZXJ2ZS5idWZmbGVuLAogCQkJICAgKGludCkgZnAtPnJlc2VydmUua191c2Vfc2csCkBAIC0yNTIyLDcgKzI0NzMsOSBAQAogCQlzZXFfcHJpbnRmKHMsICIgICBjbWRfcT0lZCBmX3BhY2tpZD0lZCBrX29ycGhhbj0lZCBjbG9zZWQ9JWRcbiIsCiAJCQkgICAoaW50KSBmcC0+Y21kX3EsIChpbnQpIGZwLT5mb3JjZV9wYWNraWQsCiAJCQkgICAoaW50KSBmcC0+a2VlcF9vcnBoYW4sIChpbnQpIGZwLT5jbG9zZWQpOwotCQlmb3IgKG0gPSAwOyAoc3JwID0gc2dfZ2V0X250aF9yZXF1ZXN0KGZwLCBtKSk7ICsrbSkgeworCQlmb3IgKG0gPSAwLCBzcnAgPSBmcC0+aGVhZHJwOworCQkJCXNycCAhPSBOVUxMOworCQkJCSsrbSwgc3JwID0gc3JwLT5uZXh0cnApIHsKIAkJCWhwID0gJnNycC0+aGVhZGVyOwogCQkJbmV3X2ludGVyZmFjZSA9IChocC0+aW50ZXJmYWNlX2lkID09ICdcMCcpID8gMCA6IDE7CiAJCQlpZiAoc3JwLT5yZXNfdXNlZCkgewpAQCAtMjU1OSw2ICsyNTEyLDcgQEAKIAkJfQogCQlpZiAoMCA9PSBtKQogCQkJc2VxX3ByaW50ZihzLCAiICAgICBObyByZXF1ZXN0cyBhY3RpdmVcbiIpOworCQlyZWFkX3VubG9jaygmZnAtPnJxX2xpc3RfbG9jayk7CiAJfQogfQogCkBAIC0yNTcxLDM5ICsyNTI1LDM0IEBACiB7CiAJc3RydWN0IHNnX3Byb2NfZGV2aXRlciAqIGl0ID0gKHN0cnVjdCBzZ19wcm9jX2Rldml0ZXIgKikgdjsKIAlTZ19kZXZpY2UgKnNkcDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAogCWlmIChpdCAmJiAoMCA9PSBpdC0+aW5kZXgpKSB7CiAJCXNlcV9wcmludGYocywgIm1heF9hY3RpdmVfZGV2aWNlPSVkKG9yaWdpbiAxKVxuIiwKIAkJCSAgIChpbnQpaXQtPm1heCk7CiAJCXNlcV9wcmludGYocywgIiBkZWZfcmVzZXJ2ZWRfc2l6ZT0lZFxuIiwgc2dfYmlnX2J1ZmYpOwogCX0KLQlzZHAgPSBpdCA/IHNnX2dldF9kZXYoaXQtPmluZGV4KSA6IE5VTEw7Ci0JaWYgKHNkcCkgeworCisJcmVhZF9sb2NrX2lycXNhdmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CisJc2RwID0gaXQgPyBzZ19sb29rdXBfZGV2KGl0LT5pbmRleCkgOiBOVUxMOworCWlmIChzZHAgJiYgIWxpc3RfZW1wdHkoJnNkcC0+c2ZkcykpIHsKIAkJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpZHAgPSBzZHAtPmRldmljZTsKIAotCQlpZiAoTlVMTCA9PSBzY3NpZHApIHsKLQkJCXNlcV9wcmludGYocywgImRldmljZSAlZCBkZXRhY2hlZCA/P1xuIiwgCi0JCQkJICAgKGludClpdC0+aW5kZXgpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAoc2dfZ2V0X250aF9zZnAoc2RwLCAwKSkgewotCQkJc2VxX3ByaW50ZihzLCAiID4+PiBkZXZpY2U9JXMgIiwKLQkJCQlzZHAtPmRpc2stPmRpc2tfbmFtZSk7Ci0JCQlpZiAoc2RwLT5kZXRhY2hlZCkKLQkJCQlzZXFfcHJpbnRmKHMsICJkZXRhY2hlZCBwZW5kaW5nIGNsb3NlICIpOwotCQkJZWxzZQotCQkJCXNlcV9wcmludGYKLQkJCQkgICAgKHMsICJzY3NpJWQgY2hhbj0lZCBpZD0lZCBsdW49JWQgICBlbT0lZCIsCi0JCQkJICAgICBzY3NpZHAtPmhvc3QtPmhvc3Rfbm8sCi0JCQkJICAgICBzY3NpZHAtPmNoYW5uZWwsIHNjc2lkcC0+aWQsCi0JCQkJICAgICBzY3NpZHAtPmx1biwKLQkJCQkgICAgIHNjc2lkcC0+aG9zdC0+aG9zdHQtPmVtdWxhdGVkKTsKLQkJCXNlcV9wcmludGYocywgIiBzZ190YWJsZXNpemU9JWQgZXhjbD0lZFxuIiwKLQkJCQkgICBzZHAtPnNnX3RhYmxlc2l6ZSwgc2RwLT5leGNsdWRlKTsKLQkJfQorCQlzZXFfcHJpbnRmKHMsICIgPj4+IGRldmljZT0lcyAiLCBzZHAtPmRpc2stPmRpc2tfbmFtZSk7CisJCWlmIChzZHAtPmRldGFjaGVkKQorCQkJc2VxX3ByaW50ZihzLCAiZGV0YWNoZWQgcGVuZGluZyBjbG9zZSAiKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZgorCQkJICAgIChzLCAic2NzaSVkIGNoYW49JWQgaWQ9JWQgbHVuPSVkICAgZW09JWQiLAorCQkJICAgICBzY3NpZHAtPmhvc3QtPmhvc3Rfbm8sCisJCQkgICAgIHNjc2lkcC0+Y2hhbm5lbCwgc2NzaWRwLT5pZCwKKwkJCSAgICAgc2NzaWRwLT5sdW4sCisJCQkgICAgIHNjc2lkcC0+aG9zdC0+aG9zdHQtPmVtdWxhdGVkKTsKKwkJc2VxX3ByaW50ZihzLCAiIHNnX3RhYmxlc2l6ZT0lZCBleGNsPSVkXG4iLAorCQkJICAgc2RwLT5zZ190YWJsZXNpemUsIHNkcC0+ZXhjbHVkZSk7CiAJCXNnX3Byb2NfZGVidWdfaGVscGVyKHMsIHNkcCk7CiAJfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnNnX2luZGV4X2xvY2ssIGlmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggYzZmMTllZS4uZWIyNGVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTM3NCw5ICszNzQsOSBAQAogCWlmICghZGVidWdnaW5nKSB7IC8qIEFibm9ybWFsIGNvbmRpdGlvbnMgZm9yIHRhcGUgKi8KIAkJaWYgKCFjbWRzdGF0cC0+aGF2ZV9zZW5zZSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IEVycm9yICV4IChzdWdnLiBidCAweCV4LCBkcml2ZXIgYnQgMHgleCwgaG9zdCBidCAweCV4KS5cbiIsCi0JCQkgICAgICAgbmFtZSwgcmVzdWx0LCBzdWdnZXN0aW9uKHJlc3VsdCksCi0JCQkgICAgICAgZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9NQVNLLCBob3N0X2J5dGUocmVzdWx0KSk7CisJCQkgICAgICAgIiVzOiBFcnJvciAleCAoZHJpdmVyIGJ0IDB4JXgsIGhvc3QgYnQgMHgleCkuXG4iLAorCQkJICAgICAgIG5hbWUsIHJlc3VsdCwgZHJpdmVyX2J5dGUocmVzdWx0KSwKKwkJCSAgICAgICBob3N0X2J5dGUocmVzdWx0KSk7CiAJCWVsc2UgaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlICYmCiAJCQkgc2NvZGUgIT0gTk9fU0VOU0UgJiYKIAkJCSBzY29kZSAhPSBSRUNPVkVSRURfRVJST1IgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdGV4LmMgYi9kcml2ZXJzL3Njc2kvc3RleC5jCmluZGV4IGEzYTE4YWQuLjQ3YjYxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdGV4LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0ZXguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTdXBlclRyYWsgRVggU2VyaWVzIFN0b3JhZ2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExpbnV4CiAgKgotICoJQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IFByb21pc2UgVGVjaG5vbG9neSBJbmMuCisgKglDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBQcm9taXNlIFRlY2hub2xvZ3kgSW5jLgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInN0ZXgiCi0jZGVmaW5lIFNUX0RSSVZFUl9WRVJTSU9OICIzLjYuMDAwMC4xIgotI2RlZmluZSBTVF9WRVJfTUFKT1IgCQkzCisjZGVmaW5lIFNUX0RSSVZFUl9WRVJTSU9OICI0LjYuMDAwMC4xIgorI2RlZmluZSBTVF9WRVJfTUFKT1IgCQk0CiAjZGVmaW5lIFNUX1ZFUl9NSU5PUiAJCTYKICNkZWZpbmUgU1RfT0VNIAkJCTAKICNkZWZpbmUgU1RfQlVJTERfVkVSIAkJMQpAQCAtMTAzLDcgKzEwMyw3IEBACiAJTVVfUkVRX0NPVU5UCQkJCT0gKE1VX01BWF9SRVFVRVNUICsgMSksCiAJTVVfU1RBVFVTX0NPVU5UCQkJCT0gKE1VX01BWF9SRVFVRVNUICsgMSksCiAKLQlTVEVYX0NEQl9MRU5HVEgJCQkJPSBNQVhfQ09NTUFORF9TSVpFLAorCVNURVhfQ0RCX0xFTkdUSAkJCQk9IDE2LAogCVJFUV9WQVJJQUJMRV9MRU4JCQk9IDEwMjQsCiAJU1RBVFVTX1ZBUl9MRU4JCQkJPSAxMjgsCiAJU1RfQ0FOX1FVRVVFCQkJCT0gTVVfTUFYX1JFUVVFU1QsCkBAIC0xMTQsMTUgKzExNCwxOSBAQAogCVNHX0NGX0VPVAkJCQk9IDB4ODAsCS8qIGVuZCBvZiB0YWJsZSAqLwogCVNHX0NGXzY0QgkJCQk9IDB4NDAsCS8qIDY0IGJpdCBpdGVtICovCiAJU0dfQ0ZfSE9TVAkJCQk9IDB4MjAsCS8qIHNnIGluIGhvc3QgbWVtb3J5ICovCisJTVNHX0RBVEFfRElSX05ECQkJCT0gMCwKKwlNU0dfREFUQV9ESVJfSU4JCQkJPSAxLAorCU1TR19EQVRBX0RJUl9PVVQJCQk9IDIsCiAKIAlzdF9zaGFzdGEJCQkJPSAwLAogCXN0X3ZzYwkJCQkJPSAxLAogCXN0X3ZzYzEJCQkJCT0gMiwKIAlzdF95b3NlbWl0ZQkJCQk9IDMsCisJc3Rfc2VxCQkJCQk9IDQsCiAKIAlQQVNTVEhSVV9SRVFfVFlQRQkJCT0gMHgwMDAwMDAwMSwKIAlQQVNTVEhSVV9SRVFfTk9fV0FLRVVQCQkJPSAweDAwMDAwMTAwLAotCVNUX0lOVEVSTkFMX1RJTUVPVVQJCQk9IDMwLAorCVNUX0lOVEVSTkFMX1RJTUVPVVQJCQk9IDE4MCwKIAogCVNUX1RPX0NNRAkJCQk9IDAsCiAJU1RfRlJPTV9DTUQJCQkJPSAxLApAQCAtMTUyLDM1ICsxNTYsNiBAQAogCVNUX0FERElUSU9OQUxfTUVNCQkJPSAweDIwMDAwMCwKIH07CiAKLS8qIFNDU0kgaW5xdWlyeSBkYXRhICovCi10eXBlZGVmIHN0cnVjdCBzdF9pbnEgewotCXU4IERldmljZVR5cGUJCQk6NTsKLQl1OCBEZXZpY2VUeXBlUXVhbGlmaWVyCQk6MzsKLQl1OCBEZXZpY2VUeXBlTW9kaWZpZXIJCTo3OwotCXU4IFJlbW92YWJsZU1lZGlhCQk6MTsKLQl1OCBWZXJzaW9uczsKLQl1OCBSZXNwb25zZURhdGFGb3JtYXQJCTo0OwotCXU4IEhpU3VwcG9ydAkJCToxOwotCXU4IE5vcm1BQ0EJCQk6MTsKLQl1OCBSZXNlcnZlZEJpdAkJCToxOwotCXU4IEFFUkMJCQkJOjE7Ci0JdTggQWRkaXRpb25hbExlbmd0aDsKLQl1OCBSZXNlcnZlZFsyXTsKLQl1OCBTb2Z0UmVzZXQJCQk6MTsKLQl1OCBDb21tYW5kUXVldWUJCQk6MTsKLQl1OCBSZXNlcnZlZDIJCQk6MTsKLQl1OCBMaW5rZWRDb21tYW5kcwkJOjE7Ci0JdTggU3luY2hyb25vdXMJCQk6MTsKLQl1OCBXaWRlMTZCaXQJCQk6MTsKLQl1OCBXaWRlMzJCaXQJCQk6MTsKLQl1OCBSZWxhdGl2ZUFkZHJlc3NpbmcJCToxOwotCXU4IFZlbmRvcklkWzhdOwotCXU4IFByb2R1Y3RJZFsxNl07Ci0JdTggUHJvZHVjdFJldmlzaW9uTGV2ZWxbNF07Ci0JdTggVmVuZG9yU3BlY2lmaWNbMjBdOwotCXU4IFJlc2VydmVkM1s0MF07Ci19IFNUX0lOUTsKLQogc3RydWN0IHN0X3NnaXRlbSB7CiAJdTggY3RybDsJLyogU0dfQ0ZfeHh4ICovCiAJdTggcmVzZXJ2ZWRbM107CkBAIC0yMjIsNyArMTk3LDcgQEAKIAl1OCB0YXJnZXQ7CiAJdTggdGFza19hdHRyOwogCXU4IHRhc2tfbWFuYWdlOwotCXU4IHByZF9lbnRyeTsKKwl1OCBkYXRhX2RpcjsKIAl1OCBwYXlsb2FkX3N6OwkJLyogcGF5bG9hZCBzaXplIGluIDQtYnl0ZSwgbm90IHVzZWQgKi8KIAl1OCBjZGJbU1RFWF9DREJfTEVOR1RIXTsKIAl1OCB2YXJpYWJsZVtSRVFfVkFSSUFCTEVfTEVOXTsKQEAgLTI4NCw3ICsyNTksNyBAQAogI2RlZmluZSBNVV9SRVFfQlVGRkVSX1NJWkUJKE1VX1JFUV9DT1VOVCAqIHNpemVvZihzdHJ1Y3QgcmVxX21zZykpCiAjZGVmaW5lIE1VX1NUQVRVU19CVUZGRVJfU0laRQkoTVVfU1RBVFVTX0NPVU5UICogc2l6ZW9mKHN0cnVjdCBzdGF0dXNfbXNnKSkKICNkZWZpbmUgTVVfQlVGRkVSX1NJWkUJCShNVV9SRVFfQlVGRkVSX1NJWkUgKyBNVV9TVEFUVVNfQlVGRkVSX1NJWkUpCi0jZGVmaW5lIFNURVhfRVhUUkFfU0laRQkJbWF4KHNpemVvZihzdHJ1Y3Qgc3RfZnJhbWUpLCBzaXplb2YoU1RfSU5RKSkKKyNkZWZpbmUgU1RFWF9FWFRSQV9TSVpFCQlzaXplb2Yoc3RydWN0IHN0X2ZyYW1lKQogI2RlZmluZSBTVEVYX0JVRkZFUl9TSVpFCShNVV9CVUZGRVJfU0laRSArIFNURVhfRVhUUkFfU0laRSkKIAogc3RydWN0IHN0X2NjYiB7CkBAIC0zNDYsOCArMzIxLDggQEAKIHN0YXRpYyB2b2lkIHN0ZXhfZ2V0dGltZShfX2xlMzIgKnRpbWUpCiB7CiAJc3RydWN0IHRpbWV2YWwgdHY7Ci0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7CiAKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKIAkqdGltZSA9IGNwdV90b19sZTMyKHR2LnR2X3NlYyAmIDB4ZmZmZmZmZmYpOwogCSoodGltZSArIDEpID0gY3B1X3RvX2xlMzIoKHR2LnR2X3NlYyA+PiAxNikgPj4gMTYpOwogfQpAQCAtMzY4LDcgKzM0Myw3IEBACiB7CiAJY21kLT5yZXN1bHQgPSAoRFJJVkVSX1NFTlNFIDw8IDI0KSB8IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAotCS8qICJJbnZhbGlkIGZpZWxkIGluIGNiZCIgKi8KKwkvKiAiSW52YWxpZCBmaWVsZCBpbiBjZGIiICovCiAJc2NzaV9idWlsZF9zZW5zZV9idWZmZXIoMCwgY21kLT5zZW5zZV9idWZmZXIsIElMTEVHQUxfUkVRVUVTVCwgMHgyNCwKIAkJCQkweDApOwogCWRvbmUoY21kKTsKQEAgLTQ5Nyw2ICs0NzIsNyBAQAogCXVuc2lnbmVkIGludCBpZCxsdW47CiAJc3RydWN0IHJlcV9tc2cgKnJlcTsKIAl1MTYgdGFnOworCiAJaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCWlkID0gY21kLT5kZXZpY2UtPmlkOwogCWx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CkBAIC01MDgsNiArNDg0LDcgQEAKIAkJc3RhdGljIGNoYXIgbXMxMF9jYWNoaW5nX3BhZ2VbMTJdID0KIAkJCXsgMCwgMHgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMHg4LCAweGEsIDB4NCwgMCB9OwogCQl1bnNpZ25lZCBjaGFyIHBhZ2U7CisKIAkJcGFnZSA9IGNtZC0+Y21uZFsyXSAmIDB4M2Y7CiAJCWlmIChwYWdlID09IDB4OCB8fCBwYWdlID09IDB4M2YpIHsKIAkJCXNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihjbWQsIG1zMTBfY2FjaGluZ19wYWdlLApAQCAtNTUxLDYgKzUyOCw3IEBACiAJCWlmIChjbWQtPmNtbmRbMV0gPT0gUEFTU1RIUlVfR0VUX0RSVlZFUikgewogCQkJc3RydWN0IHN0X2RydnZlciB2ZXI7CiAJCQlzaXplX3QgY3BfbGVuID0gc2l6ZW9mKHZlcik7CisKIAkJCXZlci5tYWpvciA9IFNUX1ZFUl9NQUpPUjsKIAkJCXZlci5taW5vciA9IFNUX1ZFUl9NSU5PUjsKIAkJCXZlci5vZW0gPSBTVF9PRU07CkBAIC01ODQsNiArNTYyLDEzIEBACiAJLyogY2RiICovCiAJbWVtY3B5KHJlcS0+Y2RiLCBjbWQtPmNtbmQsIFNURVhfQ0RCX0xFTkdUSCk7CiAKKwlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCXJlcS0+ZGF0YV9kaXIgPSBNU0dfREFUQV9ESVJfSU47CisJZWxzZSBpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQlyZXEtPmRhdGFfZGlyID0gTVNHX0RBVEFfRElSX09VVDsKKwllbHNlCisJCXJlcS0+ZGF0YV9kaXIgPSBNU0dfREFUQV9ESVJfTkQ7CisKIAloYmEtPmNjYlt0YWddLmNtZCA9IGNtZDsKIAloYmEtPmNjYlt0YWddLnNlbnNlX2J1ZmZsZW4gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CiAJaGJhLT5jY2JbdGFnXS5zZW5zZV9idWZmZXIgPSBjbWQtPnNlbnNlX2J1ZmZlcjsKQEAgLTY0Miw2ICs2MjcsNyBAQAogCXN0cnVjdCBzdGF0dXNfbXNnICpyZXNwLCB1bnNpZ25lZCBpbnQgdmFyaWFibGUpCiB7CiAJc2l6ZV90IGNvdW50ID0gdmFyaWFibGU7CisKIAlpZiAocmVzcC0+c2NzaV9zdGF0dXMgIT0gU0FNX1NUQVRfR09PRCkgewogCQlpZiAoY2NiLT5zZW5zZV9idWZmZXIgIT0gTlVMTCkKIAkJCW1lbWNweShjY2ItPnNlbnNlX2J1ZmZlciwgcmVzcC0+dmFyaWFibGUsCkBAIC02NjEsMjQgKzY0Nyw2IEBACiAJCXJlc3AtPnNjc2lfc3RhdHVzICE9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgewogCQlzY3NpX3NldF9yZXNpZChjY2ItPmNtZCwgc2NzaV9idWZmbGVuKGNjYi0+Y21kKSAtCiAJCQlsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZyZXNwLT52YXJpYWJsZVswXSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHJlc3AtPnNyYl9zdGF0dXMgIT0gMCkKLQkJcmV0dXJuOwotCi0JLyogZGV0ZXJtaW5lIGlucXVpcnkgY29tbWFuZCBzdGF0dXMgYnkgRGV2aWNlVHlwZVF1YWxpZmllciAqLwotCWlmIChjY2ItPmNtZC0+Y21uZFswXSA9PSBJTlFVSVJZICYmCi0JCXJlc3AtPnNjc2lfc3RhdHVzID09IFNBTV9TVEFUX0dPT0QpIHsKLQkJU1RfSU5RICppbnFfZGF0YTsKLQotCQlzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKGNjYi0+Y21kLCBoYmEtPmNvcHlfYnVmZmVyLAotCQkJCSAgICAgICBTVEVYX0VYVFJBX1NJWkUpOwotCQlpbnFfZGF0YSA9IChTVF9JTlEgKiloYmEtPmNvcHlfYnVmZmVyOwotCQlpZiAoaW5xX2RhdGEtPkRldmljZVR5cGVRdWFsaWZpZXIgIT0gMCkKLQkJCWNjYi0+c3JiX3N0YXR1cyA9IFNSQl9TVEFUVVNfU0VMRUNUSU9OX1RJTUVPVVQ7Ci0JCWVsc2UKLQkJCWNjYi0+c3JiX3N0YXR1cyA9IFNSQl9TVEFUVVNfU1VDQ0VTUzsKIAl9CiB9CiAKQEAgLTc0Niw2ICs3MTQsNyBAQAogCQkJCXN0ZXhfY29weV9kYXRhKGNjYiwgcmVzcCwgc2l6ZSk7CiAJCX0KIAorCQljY2ItPnJlcSA9IE5VTEw7CiAJCWNjYi0+c3JiX3N0YXR1cyA9IHJlc3AtPnNyYl9zdGF0dXM7CiAJCWNjYi0+c2NzaV9zdGF0dXMgPSByZXNwLT5zY3NpX3N0YXR1czsKIApAQCAtOTgzLDYgKzk1Miw3IEBACiAJc3RydWN0IHN0X2hiYSAqaGJhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBiZWZvcmU7CisKIAloYmEgPSAoc3RydWN0IHN0X2hiYSAqKSAmY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQpAQCAtMTA2Nyw2ICsxMDM3LDcgQEAKIHN0YXRpYyBpbnQgc3RleF9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKiBwZGV2KQogewogCWludCByZXQ7CisKIAlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spCiAJCSYmICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQogCQlyZXR1cm4gMDsKQEAgLTExMjQsOSArMTA5NSw5IEBACiAJfQogCiAJaGJhLT5jYXJkdHlwZSA9ICh1bnNpZ25lZCBpbnQpIGlkLT5kcml2ZXJfZGF0YTsKLQlpZiAoaGJhLT5jYXJkdHlwZSA9PSBzdF92c2MgJiYgKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAweGYpID09IDB4MSkKKwlpZiAoaGJhLT5jYXJkdHlwZSA9PSBzdF92c2MgJiYgKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAxKSkKIAkJaGJhLT5jYXJkdHlwZSA9IHN0X3ZzYzE7Ci0JaGJhLT5kbWFfc2l6ZSA9IChoYmEtPmNhcmR0eXBlID09IHN0X3ZzYzEpID8KKwloYmEtPmRtYV9zaXplID0gKGhiYS0+Y2FyZHR5cGUgPT0gc3RfdnNjMSB8fCBoYmEtPmNhcmR0eXBlID09IHN0X3NlcSkgPwogCQkoU1RFWF9CVUZGRVJfU0laRSArIFNUX0FERElUSU9OQUxfTUVNKSA6IChTVEVYX0JVRkZFUl9TSVpFKTsKIAloYmEtPmRtYV9tZW0gPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKIAkJaGJhLT5kbWFfc2l6ZSwgJmhiYS0+ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTQ2LDEwICsxMTE3LDEwIEBACiAJCWhvc3QtPm1heF9sdW4gPSA4OwogCQlob3N0LT5tYXhfaWQgPSAxNiArIDE7CiAJfSBlbHNlIGlmIChoYmEtPmNhcmR0eXBlID09IHN0X3lvc2VtaXRlKSB7Ci0JCWhvc3QtPm1heF9sdW4gPSAxMjg7CisJCWhvc3QtPm1heF9sdW4gPSAyNTY7CiAJCWhvc3QtPm1heF9pZCA9IDEgKyAxOwogCX0gZWxzZSB7Ci0JCS8qIHN0X3ZzYyBhbmQgc3RfdnNjMSAqLworCQkvKiBzdF92c2MgLCBzdF92c2MxIGFuZCBzdF9zZXEgKi8KIAkJaG9zdC0+bWF4X2x1biA9IDE7CiAJCWhvc3QtPm1heF9pZCA9IDEyOCArIDE7CiAJfQpAQCAtMTI5OSwxOCArMTI3MCwxMCBAQAogCXsgMHgxMDVhLCAweDcyNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHN0X3ZzYyB9LAogCiAJLyogc3RfeW9zZW1pdGUgKi8KLQl7IDB4MTA1YSwgMHg4NjUwLCBQQ0lfQU5ZX0lELCAweDQ2MDAsIDAsIDAsCi0JCXN0X3lvc2VtaXRlIH0sIC8qIFN1cGVyVHJhayBFWDQ2NTAgKi8KLQl7IDB4MTA1YSwgMHg4NjUwLCBQQ0lfQU5ZX0lELCAweDQ2MTAsIDAsIDAsCi0JCXN0X3lvc2VtaXRlIH0sIC8qIFN1cGVyVHJhayBFWDQ2NTBvICovCi0JeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgMHg4NjAwLCAwLCAwLAotCQlzdF95b3NlbWl0ZSB9LCAvKiBTdXBlclRyYWsgRVg4NjUwRUwgKi8KLQl7IDB4MTA1YSwgMHg4NjUwLCBQQ0lfQU5ZX0lELCAweDg2MDEsIDAsIDAsCi0JCXN0X3lvc2VtaXRlIH0sIC8qIFN1cGVyVHJhayBFWDg2NTAgKi8KLQl7IDB4MTA1YSwgMHg4NjUwLCBQQ0lfQU5ZX0lELCAweDg2MDIsIDAsIDAsCi0JCXN0X3lvc2VtaXRlIH0sIC8qIFN1cGVyVHJhayBFWDg2NTQgKi8KLQl7IDB4MTA1YSwgMHg4NjUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAotCQlzdF95b3NlbWl0ZSB9LCAvKiBnZW5lcmljIHN0X3lvc2VtaXRlICovCisJeyAweDEwNWEsIDB4ODY1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc3RfeW9zZW1pdGUgfSwKKworCS8qIHN0X3NlcSAqLworCXsgMHgxMDVhLCAweDMzNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHN0X3NlcSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdGV4X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwppbmRleCBmNGU2Y2RlLi4yM2U3ODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwpAQCAtNzkyLDkgKzc5Miw5IEBACiAKIAkvKgogCSAqICBTZWxlY3QgcXVldWUgZGVwdGggZnJvbSBkcml2ZXIgc2V0dXAuCi0JICogIERvbm5vdCB1c2UgbW9yZSB0aGFuIGNvbmZpZ3VyZWQgYnkgdXNlci4KLQkgKiAgVXNlIGF0IGxlYXN0IDIuCi0JICogIERvbm5vdCB1c2UgbW9yZSB0aGFuIG91ciBtYXhpbXVtLgorCSAqICBEbyBub3QgdXNlIG1vcmUgdGhhbiBjb25maWd1cmVkIGJ5IHVzZXIuCisJICogIFVzZSBhdCBsZWFzdCAxLgorCSAqICBEbyBub3QgdXNlIG1vcmUgdGhhbiBvdXIgbWF4aW11bS4KIAkgKi8KIAlyZXF0YWdzID0gc3ltX2RyaXZlcl9zZXR1cC5tYXhfdGFnOwogCWlmIChyZXF0YWdzID4gdHAtPnVzcnRhZ3MpCkBAIC04MDMsNyArODAzLDcgQEAKIAkJcmVxdGFncyA9IDA7CiAJaWYgKHJlcXRhZ3MgPiBTWU1fQ09ORl9NQVhfVEFHKQogCQlyZXF0YWdzID0gU1lNX0NPTkZfTUFYX1RBRzsKLQlkZXB0aF90b191c2UgPSByZXF0YWdzID8gcmVxdGFncyA6IDI7CisJZGVwdGhfdG9fdXNlID0gcmVxdGFncyA/IHJlcXRhZ3MgOiAxOwogCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCiAJCQkJc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA/IE1TR19TSU1QTEVfVEFHIDogMCwKIAkJCQlkZXB0aF90b191c2UpOwpAQCAtMTIzNiwxNCArMTIzNiwyOSBAQAogI2VuZGlmIC8qIFNZTV9MSU5VWF9QUk9DX0lORk9fU1VQUE9SVCAqLwogCiAvKgorICogRnJlZSByZXNvdXJjZXMgY2xhaW1lZCBieSBzeW1faW9tYXBfZGV2aWNlKCkuICBOb3RlIHRoYXQKKyAqIHN5bV9mcmVlX3Jlc291cmNlcygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbiBhZnRlciBjYWxsaW5nCisgKiBzeW1fYXR0YWNoKCkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAorc3ltX2lvdW5tYXBfZGV2aWNlKHN0cnVjdCBzeW1fZGV2aWNlICpkZXZpY2UpCit7CisJaWYgKGRldmljZS0+cy5pb2FkZHIpCisJCXBjaV9pb3VubWFwKGRldmljZS0+cGRldiwgZGV2aWNlLT5zLmlvYWRkcik7CisJaWYgKGRldmljZS0+cy5yYW1hZGRyKQorCQlwY2lfaW91bm1hcChkZXZpY2UtPnBkZXYsIGRldmljZS0+cy5yYW1hZGRyKTsKK30KKworLyoKICAqCUZyZWUgY29udHJvbGxlciByZXNvdXJjZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHN5bV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgc3ltX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWludCBkb19mcmVlX2lycSkKIHsKIAkvKgogCSAqICBGcmVlIE8vUyBzcGVjaWZpYyByZXNvdXJjZXMuCiAJICovCi0JaWYgKHBkZXYtPmlycSkKKwlpZiAoZG9fZnJlZV9pcnEpCiAJCWZyZWVfaXJxKHBkZXYtPmlycSwgbnAtPnMuaG9zdCk7CiAJaWYgKG5wLT5zLmlvYWRkcikKIAkJcGNpX2lvdW5tYXAocGRldiwgbnAtPnMuaW9hZGRyKTsKQEAgLTEyNzEsMTAgKzEyODYsMTEgQEAKIHsKIAlzdHJ1Y3Qgc3ltX2RhdGEgKnN5bV9kYXRhOwogCXN0cnVjdCBzeW1faGNiICpucCA9IE5VTEw7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBOVUxMOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHN5bV9mdyAqZnc7CisJaW50IGRvX2ZyZWVfaXJxID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gInN5bSVkOiA8JXM+IHJldiAweCV4IGF0IHBjaSAlcyBpcnEgJXVcbiIsCiAJCXVuaXQsIGRldi0+Y2hpcC5uYW1lLCBwZGV2LT5yZXZpc2lvbiwgcGNpX25hbWUocGRldiksCkBAIC0xMjg1LDExICsxMzAxLDExIEBACiAJICovCiAJZncgPSBzeW1fZmluZF9maXJtd2FyZSgmZGV2LT5jaGlwKTsKIAlpZiAoIWZ3KQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBhdHRhY2hfZmFpbGVkOwogCiAJc2hvc3QgPSBzY3NpX2hvc3RfYWxsb2ModHBudCwgc2l6ZW9mKCpzeW1fZGF0YSkpOwogCWlmICghc2hvc3QpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CiAJc3ltX2RhdGEgPSBzaG9zdF9wcml2KHNob3N0KTsKIAogCS8qCkBAIC0xMzE5LDYgKzEzMzUsMTAgQEAKIAlucC0+bWF4b2Zmcwk9IGRldi0+Y2hpcC5vZmZzZXRfbWF4OwogCW5wLT5tYXhidXJzdAk9IGRldi0+Y2hpcC5idXJzdF9tYXg7CiAJbnAtPm15YWRkcgk9IGRldi0+aG9zdF9pZDsKKwlucC0+bW1pb19iYQk9ICh1MzIpZGV2LT5tbWlvX2Jhc2U7CisJbnAtPnJhbV9iYQk9ICh1MzIpZGV2LT5yYW1fYmFzZTsKKwlucC0+cy5pb2FkZHIJPSBkZXYtPnMuaW9hZGRyOworCW5wLT5zLnJhbWFkZHIJPSBkZXYtPnMucmFtYWRkcjsKIAogCS8qCiAJICogIEVkaXQgaXRzIG5hbWUuCkBAIC0xMzM0LDIyICsxMzU0LDYgQEAKIAkJZ290byBhdHRhY2hfZmFpbGVkOwogCX0KIAotCS8qCi0JICogIFRyeSB0byBtYXAgdGhlIGNvbnRyb2xsZXIgY2hpcCB0bwotCSAqICB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBtZW1vcnkuCi0JICovCi0JbnAtPm1taW9fYmEgPSAodTMyKWRldi0+bW1pb19iYXNlOwotCW5wLT5zLmlvYWRkcgk9IGRldi0+cy5pb2FkZHI7Ci0JbnAtPnMucmFtYWRkcgk9IGRldi0+cy5yYW1hZGRyOwotCi0JLyoKLQkgKiAgTWFwIG9uLWNoaXAgUkFNIGlmIHByZXNlbnQgYW5kIHN1cHBvcnRlZC4KLQkgKi8KLQlpZiAoIShucC0+ZmVhdHVyZXMgJiBGRV9SQU0pKQotCQlkZXYtPnJhbV9iYXNlID0gMDsKLQlpZiAoZGV2LT5yYW1fYmFzZSkKLQkJbnAtPnJhbV9iYSA9ICh1MzIpZGV2LT5yYW1fYmFzZTsKLQogCWlmIChzeW1faGNiX2F0dGFjaChzaG9zdCwgZncsIGRldi0+bnZyYW0pKQogCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CiAKQEAgLTEzNjQsNiArMTM2OCw3IEBACiAJCQlzeW1fbmFtZShucCksIHBkZXYtPmlycSk7CiAJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKIAl9CisJZG9fZnJlZV9pcnEgPSAxOwogCiAJLyoKIAkgKiAgQWZ0ZXIgU0NTSSBkZXZpY2VzIGhhdmUgYmVlbiBvcGVuZWQsIHdlIGNhbm5vdApAQCAtMTQxNiwxMiArMTQyMSwxMyBAQAogCQkgICAiVEVSTUlOQVRJT04sIERFVklDRSBQT1dFUiBldGMuIVxuIiwgc3ltX25hbWUobnApKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKICBhdHRhY2hfZmFpbGVkOgotCWlmICghc2hvc3QpCi0JCXJldHVybiBOVUxMOwotCXByaW50Zl9pbmZvKCIlczogZ2l2aW5nIHVwIC4uLlxuIiwgc3ltX25hbWUobnApKTsKKwlwcmludGZfaW5mbygic3ltJWQ6IGdpdmluZyB1cCAuLi5cbiIsIHVuaXQpOwogCWlmIChucCkKLQkJc3ltX2ZyZWVfcmVzb3VyY2VzKG5wLCBwZGV2KTsKLQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKKwkJc3ltX2ZyZWVfcmVzb3VyY2VzKG5wLCBwZGV2LCBkb19mcmVlX2lycSk7CisJZWxzZQorCQlzeW1faW91bm1hcF9kZXZpY2UoZGV2KTsKKwlpZiAoc2hvc3QpCisJCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwogCiAJcmV0dXJuIE5VTEw7CiAgfQpAQCAtMTU1MCwzMCArMTU1NiwyOCBAQAogfQogCiAvKgotICogIFJlYWQgYW5kIGNoZWNrIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBmb3IgYW55IGRldGVjdGVkIE5DUiAKLSAqICBib2FyZHMgYW5kIHNhdmUgZGF0YSBmb3IgYXR0YWNoaW5nIGFmdGVyIGFsbCBib2FyZHMgaGF2ZSAKLSAqICBiZWVuIGRldGVjdGVkLgorICogTWFwIEhCQSByZWdpc3RlcnMgYW5kIG9uLWNoaXAgU1JBTSAoaWYgcHJlc2VudCkuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdAotc3ltX2luaXRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc3ltX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQKK3N5bV9pb21hcF9kZXZpY2Uoc3RydWN0IHN5bV9kZXZpY2UgKmRldmljZSkKIHsKLQlpbnQgaSA9IDI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZpY2UtPnBkZXY7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIGJ1c19hZGRyOwotCi0JZGV2aWNlLT5ob3N0X2lkID0gU1lNX1NFVFVQX0hPU1RfSUQ7Ci0JZGV2aWNlLT5wZGV2ID0gcGRldjsKKwlpbnQgaSA9IDI7CiAKIAlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYnVzX2FkZHIsICZwZGV2LT5yZXNvdXJjZVsxXSk7CiAJZGV2aWNlLT5tbWlvX2Jhc2UgPSBidXNfYWRkci5zdGFydDsKIAotCS8qCi0JICogSWYgdGhlIEJBUiBpcyA2NC1iaXQsIHJlc291cmNlIDIgd2lsbCBiZSBvY2N1cGllZCBieSB0aGUKLQkgKiB1cHBlciAzMiBiaXRzCi0JICovCi0JaWYgKCFwZGV2LT5yZXNvdXJjZVtpXS5mbGFncykKLQkJaSsrOwotCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHBkZXYsICZidXNfYWRkciwgJnBkZXYtPnJlc291cmNlW2ldKTsKLQlkZXZpY2UtPnJhbV9iYXNlID0gYnVzX2FkZHIuc3RhcnQ7CisJaWYgKGRldmljZS0+Y2hpcC5mZWF0dXJlcyAmIEZFX1JBTSkgeworCQkvKgorCQkgKiBJZiB0aGUgQkFSIGlzIDY0LWJpdCwgcmVzb3VyY2UgMiB3aWxsIGJlIG9jY3VwaWVkIGJ5IHRoZQorCQkgKiB1cHBlciAzMiBiaXRzCisJCSAqLworCQlpZiAoIXBkZXYtPnJlc291cmNlW2ldLmZsYWdzKQorCQkJaSsrOworCQlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYnVzX2FkZHIsICZwZGV2LT5yZXNvdXJjZVtpXSk7CisJCWRldmljZS0+cmFtX2Jhc2UgPSBidXNfYWRkci5zdGFydDsKKwl9CiAKICNpZmRlZiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTwogCWlmIChkZXZpY2UtPm1taW9fYmFzZSkKQEAgLTE1ODMsOSArMTU4NywyMSBAQAogCWlmICghZGV2aWNlLT5zLmlvYWRkcikKIAkJZGV2aWNlLT5zLmlvYWRkciA9IHBjaV9pb21hcChwZGV2LCAwLAogCQkJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JaWYgKGRldmljZS0+cmFtX2Jhc2UpCisJaWYgKCFkZXZpY2UtPnMuaW9hZGRyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBtYXAgcmVnaXN0ZXJzOyBnaXZpbmcgdXAuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChkZXZpY2UtPnJhbV9iYXNlKSB7CiAJCWRldmljZS0+cy5yYW1hZGRyID0gcGNpX2lvbWFwKHBkZXYsIGksCiAJCQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpKTsKKwkJaWYgKCFkZXZpY2UtPnMucmFtYWRkcikgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkiY291bGQgbm90IG1hcCBTUkFNOyBjb250aW51aW5nIGFueXdheS5cbiIpOworCQkJZGV2aWNlLT5yYW1fYmFzZSA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE2NTksNyArMTY3NSw4IEBACiAJdWRlbGF5KDEwKTsKIAlPVVRCKG5wLCBuY19pc3RhdCwgMCk7CiAKLQlzeW1fZnJlZV9yZXNvdXJjZXMobnAsIHBkZXYpOworCXN5bV9mcmVlX3Jlc291cmNlcyhucCwgcGRldiwgMSk7CisJc2NzaV9ob3N0X3B1dChzaG9zdCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE2OTYsOSArMTcxMywxMyBAQAogCXN0cnVjdCBzeW1fZGV2aWNlIHN5bV9kZXY7CiAJc3RydWN0IHN5bV9udnJhbSBudnJhbTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlpbnQgZG9faW91bm1hcCA9IDA7CisJaW50IGRvX2Rpc2FibGVfZGV2aWNlID0gMTsKIAogCW1lbXNldCgmc3ltX2RldiwgMCwgc2l6ZW9mKHN5bV9kZXYpKTsKIAltZW1zZXQoJm52cmFtLCAwLCBzaXplb2YobnZyYW0pKTsKKwlzeW1fZGV2LnBkZXYgPSBwZGV2OworCXN5bV9kZXYuaG9zdF9pZCA9IFNZTV9TRVRVUF9IT1NUX0lEOwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQogCQlnb3RvIGxlYXZlOwpAQCAtMTcwOCwxMiArMTcyOSwxNyBAQAogCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIE5BTUU1M0M4WFgpKQogCQlnb3RvIGRpc2FibGU7CiAKLQlzeW1faW5pdF9kZXZpY2UocGRldiwgJnN5bV9kZXYpOwogCWlmIChzeW1fY2hlY2tfc3VwcG9ydGVkKCZzeW1fZGV2KSkKIAkJZ290byBmcmVlOwogCi0JaWYgKHN5bV9jaGVja19yYWlkKCZzeW1fZGV2KSkKLQkJZ290byBsZWF2ZTsJLyogRG9uJ3QgZGlzYWJsZSB0aGUgZGV2aWNlICovCisJaWYgKHN5bV9pb21hcF9kZXZpY2UoJnN5bV9kZXYpKQorCQlnb3RvIGZyZWU7CisJZG9faW91bm1hcCA9IDE7CisKKwlpZiAoc3ltX2NoZWNrX3JhaWQoJnN5bV9kZXYpKSB7CisJCWRvX2Rpc2FibGVfZGV2aWNlID0gMDsJLyogRG9uJ3QgZGlzYWJsZSB0aGUgZGV2aWNlICovCisJCWdvdG8gZnJlZTsKKwl9CiAKIAlpZiAoc3ltX3NldF93b3JrYXJvdW5kcygmc3ltX2RldikpCiAJCWdvdG8gZnJlZTsKQEAgLTE3MjIsNiArMTc0OCw3IEBACiAKIAlzeW1fZ2V0X252cmFtKCZzeW1fZGV2LCAmbnZyYW0pOwogCisJZG9faW91bm1hcCA9IDA7IC8qIERvbid0IHN5bV9pb3VubWFwX2RldmljZSgpIGFmdGVyIHN5bV9hdHRhY2goKS4gKi8KIAlzaG9zdCA9IHN5bV9hdHRhY2goJnN5bTJfdGVtcGxhdGUsIGF0dGFjaF9jb3VudCwgJnN5bV9kZXYpOwogCWlmICghc2hvc3QpCiAJCWdvdG8gZnJlZTsKQEAgLTE3MzcsOSArMTc2NCwxMiBAQAogIGRldGFjaDoKIAlzeW1fZGV0YWNoKHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSwgcGRldik7CiAgZnJlZToKKwlpZiAoZG9faW91bm1hcCkKKwkJc3ltX2lvdW5tYXBfZGV2aWNlKCZzeW1fZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogIGRpc2FibGU6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWlmIChkb19kaXNhYmxlX2RldmljZSkKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogIGxlYXZlOgogCXJldHVybiAtRU5PREVWOwogfQpAQCAtMTc0OSw3ICsxNzc5LDYgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOwotCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwogCXN5bV9kZXRhY2goc2hvc3QsIHBkZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYwppbmRleCA5OGRmMTY1Li5jY2VhN2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYwpAQCAtMTQzMywxMyArMTQzMywxMiBAQAogCSAqIE1hbnkgZGV2aWNlcyBpbXBsZW1lbnQgUFBSIGluIGEgYnVnZ3kgd2F5LCBzbyBvbmx5IHVzZSBpdCBpZiB3ZQogCSAqIHJlYWxseSB3YW50IHRvLgogCSAqLwotCWlmIChnb2FsLT5vZmZzZXQgJiYKLQkgICAgKGdvYWwtPml1IHx8IGdvYWwtPmR0IHx8IGdvYWwtPnFhcyB8fCAoZ29hbC0+cGVyaW9kIDwgMHhhKSkpIHsKKwlpZiAoZ29hbC0+cmVuZWdvID09IE5TX1BQUiB8fCAoZ29hbC0+b2Zmc2V0ICYmCisJICAgIChnb2FsLT5pdSB8fCBnb2FsLT5kdCB8fCBnb2FsLT5xYXMgfHwgKGdvYWwtPnBlcmlvZCA8IDB4YSkpKSkgewogCQluZWdvID0gTlNfUFBSOwotCX0gZWxzZSBpZiAoc3BpX3dpZHRoKHN0YXJnZXQpICE9IGdvYWwtPndpZHRoKSB7CisJfSBlbHNlIGlmIChnb2FsLT5yZW5lZ28gPT0gTlNfV0lERSB8fCBnb2FsLT53aWR0aCkgewogCQluZWdvID0gTlNfV0lERTsKLQl9IGVsc2UgaWYgKHNwaV9wZXJpb2Qoc3RhcmdldCkgIT0gZ29hbC0+cGVyaW9kIHx8Ci0JCSAgIHNwaV9vZmZzZXQoc3RhcmdldCkgIT0gZ29hbC0+b2Zmc2V0KSB7CisJfSBlbHNlIGlmIChnb2FsLT5yZW5lZ28gPT0gTlNfU1lOQyB8fCBnb2FsLT5vZmZzZXQpIHsKIAkJbmVnbyA9IE5TX1NZTkM7CiAJfSBlbHNlIHsKIAkJZ29hbC0+Y2hlY2tfbmVnbyA9IDA7CkBAIC0yMDQwLDYgKzIwMzksMjkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHN5bV9hbm5vdW5jZV90cmFuc2Zlcl9yYXRlKHN0cnVjdCBzeW1fdGNiICp0cCkKK3sKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cC0+c3RhcmdldDsKKworCWlmICh0cC0+dHByaW50LnBlcmlvZCAhPSBzcGlfcGVyaW9kKHN0YXJnZXQpIHx8CisJICAgIHRwLT50cHJpbnQub2Zmc2V0ICE9IHNwaV9vZmZzZXQoc3RhcmdldCkgfHwKKwkgICAgdHAtPnRwcmludC53aWR0aCAhPSBzcGlfd2lkdGgoc3RhcmdldCkgfHwKKwkgICAgdHAtPnRwcmludC5pdSAhPSBzcGlfaXUoc3RhcmdldCkgfHwKKwkgICAgdHAtPnRwcmludC5kdCAhPSBzcGlfZHQoc3RhcmdldCkgfHwKKwkgICAgdHAtPnRwcmludC5xYXMgIT0gc3BpX3FhcyhzdGFyZ2V0KSB8fAorCSAgICAhdHAtPnRwcmludC5jaGVja19uZWdvKSB7CisJCXRwLT50cHJpbnQucGVyaW9kID0gc3BpX3BlcmlvZChzdGFyZ2V0KTsKKwkJdHAtPnRwcmludC5vZmZzZXQgPSBzcGlfb2Zmc2V0KHN0YXJnZXQpOworCQl0cC0+dHByaW50LndpZHRoID0gc3BpX3dpZHRoKHN0YXJnZXQpOworCQl0cC0+dHByaW50Lml1ID0gc3BpX2l1KHN0YXJnZXQpOworCQl0cC0+dHByaW50LmR0ID0gc3BpX2R0KHN0YXJnZXQpOworCQl0cC0+dHByaW50LnFhcyA9IHNwaV9xYXMoc3RhcmdldCk7CisJCXRwLT50cHJpbnQuY2hlY2tfbmVnbyA9IDE7CisKKwkJc3BpX2Rpc3BsYXlfeGZlcl9hZ3JlZW1lbnQoc3RhcmdldCk7CisJfQorfQorCiAvKgogICogIFdlIHJlY2VpdmVkIGEgV0RUUi4KICAqICBMZXQgZXZlcnl0aGluZyBiZSBhd2FyZSBvZiB0aGUgY2hhbmdlcy4KQEAgLTIwNDksMTEgKzIwNzEsMTMgQEAKIAlzdHJ1Y3Qgc3ltX3RjYiAqdHAgPSAmbnAtPnRhcmdldFt0YXJnZXRdOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRwLT5zdGFyZ2V0OwogCi0JaWYgKHNwaV93aWR0aChzdGFyZ2V0KSA9PSB3aWRlKQotCQlyZXR1cm47Ci0KIAlzeW1fc2V0dHJhbnMobnAsIHRhcmdldCwgMCwgMCwgMCwgd2lkZSwgMCwgMCk7CiAKKwlpZiAod2lkZSkKKwkJdHAtPnRnb2FsLnJlbmVnbyA9IE5TX1dJREU7CisJZWxzZQorCQl0cC0+dGdvYWwucmVuZWdvID0gMDsKKwl0cC0+dGdvYWwuY2hlY2tfbmVnbyA9IDA7CiAJdHAtPnRnb2FsLndpZHRoID0gd2lkZTsKIAlzcGlfb2Zmc2V0KHN0YXJnZXQpID0gMDsKIAlzcGlfcGVyaW9kKHN0YXJnZXQpID0gMDsKQEAgLTIwNjMsNyArMjA4Nyw3IEBACiAJc3BpX3FhcyhzdGFyZ2V0KSA9IDA7CiAKIAlpZiAoc3ltX3ZlcmJvc2UgPj0gMykKLQkJc3BpX2Rpc3BsYXlfeGZlcl9hZ3JlZW1lbnQoc3RhcmdldCk7CisJCXN5bV9hbm5vdW5jZV90cmFuc2Zlcl9yYXRlKHRwKTsKIH0KIAogLyoKQEAgLTIwODAsNiArMjEwNCwxMiBAQAogCiAJc3ltX3NldHRyYW5zKG5wLCB0YXJnZXQsIDAsIG9mcywgcGVyLCB3aWRlLCBkaXYsIGZhayk7CiAKKwlpZiAod2lkZSkKKwkJdHAtPnRnb2FsLnJlbmVnbyA9IE5TX1dJREU7CisJZWxzZSBpZiAob2ZzKQorCQl0cC0+dGdvYWwucmVuZWdvID0gTlNfU1lOQzsKKwllbHNlCisJCXRwLT50Z29hbC5yZW5lZ28gPSAwOwogCXNwaV9wZXJpb2Qoc3RhcmdldCkgPSBwZXI7CiAJc3BpX29mZnNldChzdGFyZ2V0KSA9IG9mczsKIAlzcGlfaXUoc3RhcmdldCkgPSBzcGlfZHQoc3RhcmdldCkgPSBzcGlfcWFzKHN0YXJnZXQpID0gMDsKQEAgLTIwOTAsNyArMjEyMCw3IEBACiAJCXRwLT50Z29hbC5jaGVja19uZWdvID0gMDsKIAl9CiAKLQlzcGlfZGlzcGxheV94ZmVyX2FncmVlbWVudChzdGFyZ2V0KTsKKwlzeW1fYW5ub3VuY2VfdHJhbnNmZXJfcmF0ZSh0cCk7CiB9CiAKIC8qCkBAIC0yMTA2LDYgKzIxMzYsMTAgQEAKIAogCXN5bV9zZXR0cmFucyhucCwgdGFyZ2V0LCBvcHRzLCBvZnMsIHBlciwgd2lkZSwgZGl2LCBmYWspOwogCisJaWYgKHdpZGUgfHwgb2ZzKQorCQl0cC0+dGdvYWwucmVuZWdvID0gTlNfUFBSOworCWVsc2UKKwkJdHAtPnRnb2FsLnJlbmVnbyA9IDA7CiAJc3BpX3dpZHRoKHN0YXJnZXQpID0gdHAtPnRnb2FsLndpZHRoID0gd2lkZTsKIAlzcGlfcGVyaW9kKHN0YXJnZXQpID0gdHAtPnRnb2FsLnBlcmlvZCA9IHBlcjsKIAlzcGlfb2Zmc2V0KHN0YXJnZXQpID0gdHAtPnRnb2FsLm9mZnNldCA9IG9mczsKQEAgLTIxMTQsNyArMjE0OCw3IEBACiAJc3BpX3FhcyhzdGFyZ2V0KSA9IHRwLT50Z29hbC5xYXMgPSAhIShvcHRzICYgUFBSX09QVF9RQVMpOwogCXRwLT50Z29hbC5jaGVja19uZWdvID0gMDsKIAotCXNwaV9kaXNwbGF5X3hmZXJfYWdyZWVtZW50KHN0YXJnZXQpOworCXN5bV9hbm5vdW5jZV90cmFuc2Zlcl9yYXRlKHRwKTsKIH0KIAogLyoKQEAgLTM1MTYsNiArMzU1MCw3IEBACiAJCQlzcGlfZHQoc3RhcmdldCkgPSAwOwogCQkJc3BpX3FhcyhzdGFyZ2V0KSA9IDA7CiAJCQl0cC0+dGdvYWwuY2hlY2tfbmVnbyA9IDE7CisJCQl0cC0+dGdvYWwucmVuZWdvID0gMDsKIAkJfQogCiAJCS8qCkBAIC01MTM1LDkgKzUxNzAsMTQgQEAKIAkvKgogCSAqICBCdWlsZCBhIG5lZ290aWF0aW9uIG1lc3NhZ2UgaWYgbmVlZGVkLgogCSAqICAobmVnb19zdGF0dXMgaXMgZmlsbGVkIGJ5IHN5bV9wcmVwYXJlX25lZ28oKSkKKwkgKgorCSAqICBBbHdheXMgbmVnb3RpYXRlIG9uIElOUVVJUlkgYW5kIFJFUVVFU1QgU0VOU0UuCisJICoKIAkgKi8KIAljcC0+bmVnb19zdGF0dXMgPSAwOwotCWlmICh0cC0+dGdvYWwuY2hlY2tfbmVnbyAmJiAhdHAtPm5lZ29fY3AgJiYgbHApIHsKKwlpZiAoKHRwLT50Z29hbC5jaGVja19uZWdvIHx8CisJICAgICBjbWQtPmNtbmRbMF0gPT0gSU5RVUlSWSB8fCBjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgJiYKKwkgICAgIXRwLT5uZWdvX2NwICYmIGxwKSB7CiAJCW1zZ2xlbiArPSBzeW1fcHJlcGFyZV9uZWdvKG5wLCBjcCwgbXNncHRyICsgbXNnbGVuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmgKaW5kZXggYWQwNzg4MC4uNjFkMjhmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmgKQEAgLTM1NCw2ICszNTQsNyBAQAogCXVuc2lnbmVkIGludCBkdDoxOwogCXVuc2lnbmVkIGludCBxYXM6MTsKIAl1bnNpZ25lZCBpbnQgY2hlY2tfbmVnbzoxOworCXVuc2lnbmVkIGludCByZW5lZ286MjsKIH07CiAKIC8qCkBAIC00MTksNiArNDIwLDkgQEAKIAkvKiBUcmFuc2ZlciBnb2FsICovCiAJc3RydWN0IHN5bV90cmFucyB0Z29hbDsKIAorCS8qIExhc3QgcHJpbnRlZCB0cmFuc2ZlciBzcGVlZCAqLworCXN0cnVjdCBzeW1fdHJhbnMgdHByaW50OworCiAJLyoKIAkgKiBLZWVwIHRyYWNrIG9mIHRoZSBDQ0IgdXNlZCBmb3IgdGhlIG5lZ290aWF0aW9uIGluIG9yZGVyCiAJICogdG8gZW5zdXJlIHRoYXQgb25seSAxIG5lZ290aWF0aW9uIGlzIHF1ZXVlZCBhdCBhIHRpbWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvemFsb24uYyBiL2RyaXZlcnMvc2NzaS96YWxvbi5jCmluZGV4IGE4ZDYxYTYuLjk3ZjMxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS96YWxvbi5jCisrKyBiL2RyaXZlcnMvc2NzaS96YWxvbi5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJZ290byBmYWlsOwogCiAJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBuY3I1M2M4eHhfaW50ciwgSVJRRl9TSEFSRUQsICJ6YWxvbiIsIGhvc3QpKSB7Ci0JICBkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJpcnEgcHJvYmxlbSB3aXRoICVkLCBkZXRhY2hpbmdcbiAiLAorCSAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LCAiaXJxIHByb2JsZW0gd2l0aCAlZCwgZGV0YWNoaW5nXG4gIiwKIAkJICAgICBkZXYtPmlycSk7CiAJCWdvdG8gZmFpbDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDU1N2I1NGEuLmRiZjUzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAl9IHdoaWxlICghKHN0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpKTsKIAogCXNjaV9pbihwb3J0LCBTQ3hTUik7ICAgICAgICAgICAgLyogRHVtbXkgcmVhZCAqLwotCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkpOworCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkgJiB+U0N4U1JfVEVORChwb3J0KSk7CiAJc2NpX291dChwb3J0LCBTQ3hURFIsIGMpOwogfQogI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgfHwgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwpAQCAtMjYzLDYgKzI2Myw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CkBAIC0yODQsNyArMjg1LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmKTsKQEAgLTEwOTUsNiArMTA5Nyw3IEBACiAJCQkJIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2VyaWFsX2NvbnNvbGVfcG9ydC0+cG9ydDsKKwl1bnNpZ25lZCBzaG9ydCBiaXRzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTExMDMsNiArMTEwNiwxMSBAQAogCiAJCXNjaV9wb2xsX3B1dF9jaGFyKHBvcnQsICpzKyspOwogCX0KKworCS8qIHdhaXQgdW50aWwgZmlmbyBpcyBlbXB0eSBhbmQgbGFzdCBiaXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgKi8KKwliaXRzID0gU0N4U1JfVER4RShwb3J0KSB8IFNDeFNSX1RFTkQocG9ydCk7CisJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNlcmlhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggMDIyZTg5Zi4uZDBhYTgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQogI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgpAQCAtMTI2LDcgKzEyNiw4IEBACiAjIGRlZmluZSBTQ1NQVFIxCTB4ZmZlMTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDSUZfT1JFUgkweDAwMDEJCS8qIE92ZXJydW4gZXJyb3IgYml0ICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpCTB4M2EJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjIGRlZmluZSBTQ1NQVFIwCTB4ZmZlYTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjEJMHhmZmViMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTUFRSMgkweGZmZWMwMDI0CS8qIDE2IGJpdCBTQ0lGICovCkBAIC0xODIsNiArMTgzLDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSAgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKICNkZWZpbmUgU0NJX0NUUkxfRkxBR1NfUkVJRSAweDA4IC8qIDc3NTAgU0NJRiAqLwogI2Vsc2UKQEAgLTQxMyw3ICs0MTUsOCBAQAogU0NJRl9GTlMoU0NGQ1IsICAgICAgICAgICAgICAgICAgICAgIDB4MGMsICA4LCAweDE4LCAxNikKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogU0NJRl9GTlMoU0NGRFIsCQkJICAgICAweDBlLCAxNiwgMHgxQywgMTYpCiBTQ0lGX0ZOUyhTQ1RGRFIsCQkgICAgIDB4MGUsIDE2LCAweDFDLCAxNikKIFNDSUZfRk5TKFNDUkZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MjAsIDE2KQpAQCAtNjQ0LDcgKzY0Nyw4IEBACiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWEwMDAwKQpAQCAtNzQ2LDcgKzc1MCw4IEBACiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKGNsaysxNipicHMpLygxNipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggNDVhMjk5Zi4uZTA5ZDNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xNDM4LDEyICsxNDM4LDEyIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtleWJvYXJkIGF0IE1NSU8gMHglbGx4IChpcnEgPSAlZCkgIgogCQkgICAgICAgImlzIGEgJXNcbiIsCi0JCSAgICAgICBvcC0+ZGV2LmJ1c19pZCwKKwkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzBdLnBvcnQubWFwYmFzZSwKIAkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFswXS5wb3J0KSk7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb3VzZSBhdCBNTUlPIDB4JWxseCAoaXJxID0gJWQpICIKIAkJICAgICAgICJpcyBhICVzXG4iLAotCQkgICAgICAgb3AtPmRldi5idXNfaWQsCisJCSAgICAgICBkZXZfbmFtZSgmb3AtPmRldiksCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB1cFsxXS5wb3J0Lm1hcGJhc2UsCiAJCSAgICAgICBvcC0+aXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMV0ucG9ydCkpOwogCQlrYm1faW5zdCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCA1OGQyNGM1Li4yMjY5ZmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtNTY4LDYgKzU2OCwxMCBAQAogCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQogCQlwcmltYXJ5ID0gMTsKIAorCWlmICghZGF0YVswXSAmJiAhZGF0YVsxXSkKKwkJcHJfd2FybmluZygiaW50YzogbWlzc2luZyB1bmlxdWUgaXJxIG1hc2sgZm9yICIKKwkJCSAgICJpcnEgJWQgKHZlY3QgMHglMDR4KVxuIiwgaXJxLCBpcnEyZXZ0KGlycSkpOworCiAJZGF0YVswXSA9IGRhdGFbMF0gPyBkYXRhWzBdIDogaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAJZGF0YVsxXSA9IGRhdGFbMV0gPyBkYXRhWzFdIDogaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAKQEAgLTY0MSw2ICs2NDUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmludGNfZXZ0MmlycV90YWJsZTsKKwordW5zaWduZWQgaW50IGludGNfZXZ0MmlycSh1bnNpZ25lZCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBpcnEgPSBldnQyaXJxKHZlY3Rvcik7CisKKwlpZiAoaW50Y19ldnQyaXJxX3RhYmxlICYmIGludGNfZXZ0MmlycV90YWJsZVtpcnFdKQorCQlpcnEgPSBpbnRjX2V2dDJpcnFfdGFibGVbaXJxXTsKKworCXJldHVybiBpcnE7Cit9CiAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewpAQCAtNzA1LDggKzcyMCw0MCBAQAogCiAJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLwogCisJLyoga2VlcCB0aGUgZmlyc3QgdmVjdG9yIG9ubHkgaWYgc2FtZSBlbnVtIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CiAJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKwkJaW50IGZpcnN0X2lycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CisKKwkJaWYgKCF2ZWN0LT5lbnVtX2lkKQorCQkJY29udGludWU7CisKKwkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKKwkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisKKwkJCWlmICh2ZWN0LT5lbnVtX2lkICE9IHZlY3QyLT5lbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKQorCQkJCWludGNfZXZ0MmlycV90YWJsZSA9IGFsbG9jX2Jvb3RtZW0oTlJfSVJRUyk7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKSB7CisJCQkJcHJfd2FybmluZygiaW50YzogY2Fubm90IGFsbG9jYXRlIGV2dDJpcnEhXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaW50Y19ldnQyaXJxX3RhYmxlW2V2dDJpcnEodmVjdDItPnZlY3QpXSA9IGZpcnN0X2lycTsKKwkJfQorCX0KKworCS8qIHJlZ2lzdGVyIHRoZSB2ZWN0b3JzIG9uZSBieSBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKworCQlpZiAoIXZlY3QtPmVudW1faWQpCisJCQljb250aW51ZTsKIAogCQlpbnRjX3JlZ2lzdGVyX2lycShkZXNjLCBkLCB2ZWN0LT5lbnVtX2lkLCBldnQyaXJxKHZlY3QtPnZlY3QpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKaW5kZXggNjNmMGRlMi4uY2FiMWFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCisrKyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKICAqIENvcmUgbWFwbGUgYnVzIGZ1bmN0aW9uYWxpdHkKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFkcmlhbiBNY01lbmFtaW4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEFkcmlhbiBNY01lbmFtaW4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA4IFBhdWwgTXVuZHQKLSAqCi0gKiBCYXNlZCBvbiAyLjQgY29kZSBieToKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgWUFFR0FTSEkgVGFrZXNoaQorICogIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDEgWUFFR0FTSEkgVGFrZXNoaQogICogIENvcHlyaWdodCAoQykgMjAwMSBNLiBSLiBCcm93bgotICogIENvcHlyaWdodCAoQykgMjAwMSBQYXVsIE11bmR0Ci0gKgotICogYW5kIG90aGVycy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMzIsNyArMjYsNyBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNhc2ljLmg+CiAKLU1PRFVMRV9BVVRIT1IoIllhZWdhc2hpIFRha2VzaGksIFBhdWwgTXVuZHQsIE0uIFIuIEJyb3duLCBBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hcGxlIGJ1cyBkcml2ZXIgZm9yIERyZWFtY2FzdCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7U0VHQSwgRHJlYW1jYXN0L01hcGxlfX0iKTsKQEAgLTQ5LDcgKzQzLDcgQEAKIC8qIG11dGV4IHRvIHByb3RlY3QgcXVldWUgb2Ygd2FpdGluZyBwYWNrZXRzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1hcGxlX3dsaXN0X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiBzdGF0aWMgc3RydWN0IGRldmljZSBtYXBsZV9idXM7CiBzdGF0aWMgaW50IHN1YmRldmljZV9tYXBbTUFQTEVfUE9SVFNdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKm1hcGxlX3NlbmRidWYsICptYXBsZV9zZW5kcHRyLCAqbWFwbGVfbGFzdHB0cjsKQEAgLTYyLDggKzU2LDkgQEAKIAlpbnQgdW5pdDsKIH07CiAKLXN0YXRpYyBib29sIGNoZWNrZWRbNF07Ci1zdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzWzRdOworc3RhdGljIGJvb2wgY2hlY2tlZFtNQVBMRV9QT1JUU107CitzdGF0aWMgYm9vbCBlbXB0eVtNQVBMRV9QT1JUU107CitzdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzW01BUExFX1BPUlRTXTsKIAogLyoqCiAgKiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIG1hcGxlIGRyaXZlcgpAQCAtOTcsMTIgKzkyLDIwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9kcml2ZXJfdW5yZWdpc3Rlcik7CiAKIC8qIHNldCBoYXJkd2FyZSByZWdpc3RlcnMgdG8gZW5hYmxlIG5leHQgcm91bmQgb2YgZG1hICovCi1zdGF0aWMgdm9pZCBtYXBsZWJ1c19kbWFfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG1hcGxlX2RtYV9yZXNldCh2b2lkKQogewogCWN0cmxfb3V0bChNQVBMRV9NQUdJQywgTUFQTEVfUkVTRVQpOwogCS8qIHNldCB0cmlnIHR5cGUgdG8gMCBmb3Igc29mdHdhcmUgdHJpZ2dlciwgMSBmb3IgaGFyZHdhcmUgKFZCTEFOSykgKi8KIAljdHJsX291dGwoMSwgTUFQTEVfVFJJR1RZUEUpOwotCWN0cmxfb3V0bChNQVBMRV8yTUJQUyB8IE1BUExFX1RJTUVPVVQoNTAwMDApLCBNQVBMRV9TUEVFRCk7CisJLyoKKwkqIE1hcGxlIHN5c3RlbSByZWdpc3RlcgorCSogYml0cyAzMSAtIDE2CXRpbWVvdXQgaW4gdW5pdHMgb2YgMjBuc2VjCisJKiBiaXQgMTIJaGFyZCB0cmlnZ2VyIC0gc2V0IDAgdG8ga2VlcCByZXNwb25kaW5nIHRvIFZCTEFOSworCSogYml0cyA5IC0gOAlzZXQgMDAgZm9yIDIgTWJwcywgMDEgZm9yIDEgTWJwcworCSogYml0cyAzIC0gMAlkZWxheSAoaW4gMS4zbXMpIGJldHdlZW4gVkJMQU5LIGFuZCBzdGFydCBvZiBETUEKKwkqIG1heCBkZWxheSBpcyAxMQorCSovCisJY3RybF9vdXRsKE1BUExFXzJNQlBTIHwgTUFQTEVfVElNRU9VVCgweEZGRkYpLCBNQVBMRV9TUEVFRCk7CiAJY3RybF9vdXRsKFBIWVNBRERSKG1hcGxlX3NlbmRidWYpLCBNQVBMRV9ETUFBRERSKTsKIAljdHJsX291dGwoMSwgTUFQTEVfRU5BQkxFKTsKIH0KQEAgLTEzNCwyMSArMTM3LDE2IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKLQlpZiAoIWRldikKLQkJcmV0dXJuOworCiAJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOwogCW1xID0gbWRldi0+bXE7Ci0JaWYgKG1xKSB7Ci0JCWlmIChtcS0+cmVjdmJ1ZmRjc3ApCi0JCQlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmZGNzcCk7Ci0JCWtmcmVlKG1xKTsKLQkJbXEgPSBOVUxMOwotCX0KKwlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmKTsKKwlrZnJlZShtcSk7CiAJa2ZyZWUobWRldik7CiB9CiAKIC8qKgotICogbWFwbGVfYWRkX3BhY2tldCAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKKyAqIG1hcGxlX2FkZF9wYWNrZXQgLSBhZGQgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIG1hcGxlIGJ1cyBxdWV1ZQogICogQG1kZXY6IG1hcGxlIGRldmljZQogICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBvbiBkZXZpY2UgYmVpbmcgcXVlcmllZAogICogQGNvbW1hbmQ6IG1hcGxlIGNvbW1hbmQgdG8gYWRkCkBAIC0xNTgsMjMgKzE1NiwxMiBAQAogaW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLCB1MzIgY29tbWFuZCwKIAlzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCWludCBsb2NraW5nLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCXZvaWQgKnNlbmRidWYgPSBOVUxMOwogCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JLyogYm91bmNlIGlmIGRldmljZSBhbHJlYWR5IGxvY2tlZCAqLwotCWxvY2tpbmcgPSBtdXRleF9pc19sb2NrZWQoJm1kZXYtPm1xLT5tdXRleCk7Ci0JaWYgKGxvY2tpbmcpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCiAJaWYgKGxlbmd0aCkgewotCQlzZW5kYnVmID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwkJc2VuZGJ1ZiA9IGt6YWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xODcsODQgKzE3NCwzNiBAQAogCQltZW1jcHkoc2VuZGJ1ZiArIDQsIGRhdGEsIChsZW5ndGggLSAxKSAqIDQpOwogCW1kZXYtPm1xLT5zZW5kYnVmID0gc2VuZGJ1ZjsKIAotCWxpc3RfYWRkKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKLW91dDoKKwltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKIAltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOworb3V0OgogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9hZGRfcGFja2V0KTsKIAotLyoqCi0gKiBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKLSAqIEBtZGV2OiBtYXBsZSBkZXZpY2UKLSAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gZGV2aWNlIGJlaW5nIHF1ZXJpZWQKLSAqIEBjb21tYW5kOiBtYXBsZSBjb21tYW5kIHRvIGFkZAotICogQGxlbmd0aDogbGVuZ3RoIG9mIGNvbW1hbmQgc3RyaW5nIChpbiAzMiBiaXQgd29yZHMpCi0gKiBAZGF0YTogcmVtYWluZGVyIG9mIGNvbW1hbmQgc3RyaW5nCi0gKgotICogU2FtZSBhcyBtYXBsZV9hZGRfcGFja2V0KCksIGJ1dCB3YWl0cyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lIGZyZWUuCi0gKi8KLWludCBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCi0JdTMyIGNvbW1hbmQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxvY2tpbmcsIHJldCA9IDA7Ci0Jdm9pZCAqc2VuZGJ1ZiA9IE5VTEw7Ci0KLQlsb2NraW5nID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtZGV2LT5tcS0+bXV0ZXgpOwotCWlmIChsb2NraW5nKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChsZW5ndGgpIHsKLQkJc2VuZGJ1ZiA9IGttYWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCSgoX19iZTMyICopc2VuZGJ1ZilbMF0gPSBjcHVfdG9fYmUzMihmdW5jdGlvbik7Ci0JfQotCi0JbWRldi0+bXEtPmNvbW1hbmQgPSBjb21tYW5kOwotCW1kZXYtPm1xLT5sZW5ndGggPSBsZW5ndGg7Ci0JaWYgKGxlbmd0aCA+IDEpCi0JCW1lbWNweShzZW5kYnVmICsgNCwgZGF0YSwgKGxlbmd0aCAtIDEpICogNCk7Ci0JbWRldi0+bXEtPnNlbmRidWYgPSBzZW5kYnVmOwotCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKTsKLQogc3RhdGljIHN0cnVjdCBtYXBsZXEgKm1hcGxlX2FsbG9jcShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewogCXN0cnVjdCBtYXBsZXEgKm1xOwogCi0JbXEgPSBrbWFsbG9jKHNpemVvZigqbXEpLCBHRlBfS0VSTkVMKTsKKwltcSA9IGt6YWxsb2Moc2l6ZW9mKCptcSksIEdGUF9LRVJORUwpOwogCWlmICghbXEpCiAJCWdvdG8gZmFpbGVkX25vbWVtOwogCisJSU5JVF9MSVNUX0hFQUQoJm1xLT5saXN0KTsKIAltcS0+ZGV2ID0gbWRldjsKLQltcS0+cmVjdmJ1ZmRjc3AgPSBrbWVtX2NhY2hlX3phbGxvYyhtYXBsZV9xdWV1ZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JbXEtPnJlY3ZidWYgPSAodm9pZCAqKSBQMlNFR0FERFIobXEtPnJlY3ZidWZkY3NwKTsKKwltcS0+cmVjdmJ1ZiA9IGttZW1fY2FjaGVfemFsbG9jKG1hcGxlX3F1ZXVlX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1xLT5yZWN2YnVmKQogCQlnb3RvIGZhaWxlZF9wMjsKLQkvKgotCSAqIG1vc3QgZGV2aWNlcyBkbyBub3QgbmVlZCB0aGUgbXV0ZXggLSBidXQKLQkgKiBhbnl0aGluZyB0aGF0IGluamVjdHMgYmxvY2sgcmVhZHMgb3Igd3JpdGVzCi0JICogd2lsbCByZWx5IG9uIGl0Ci0JICovCi0JbXV0ZXhfaW5pdCgmbXEtPm11dGV4KTsKKwltcS0+cmVjdmJ1Zi0+YnVmID0gJigobXEtPnJlY3ZidWYtPmJ1ZngpWzBdKTsKIAogCXJldHVybiBtcTsKIAogZmFpbGVkX3AyOgogCWtmcmVlKG1xKTsKIGZhaWxlZF9ub21lbToKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgKCVkLCAlZClcbiIsCisJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzIsMTIgKzIxMSwxNiBAQAogewogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CiAKKwkvKiB6ZXJvIHRoaXMgb3V0IHRvIGF2b2lkIGtvYmogc3Vic3lzdGVtCisJKiB0aGlua2luZyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgKi8KKwogCW1kZXYgPSBremFsbG9jKHNpemVvZigqbWRldiksIEdGUF9LRVJORUwpOwogCWlmICghbWRldikKIAkJcmV0dXJuIE5VTEw7CiAKIAltZGV2LT5wb3J0ID0gcG9ydDsKIAltZGV2LT51bml0ID0gdW5pdDsKKwogCW1kZXYtPm1xID0gbWFwbGVfYWxsb2NxKG1kZXYpOwogCiAJaWYgKCFtZGV2LT5tcSkgewpAQCAtMjg2LDE5ICsyMjksMTQgQEAKIAl9CiAJbWRldi0+ZGV2LmJ1cyA9ICZtYXBsZV9idXNfdHlwZTsKIAltZGV2LT5kZXYucGFyZW50ID0gJm1hcGxlX2J1czsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGV2LT5tYXBsZV93YWl0KTsKIAlyZXR1cm4gbWRldjsKIH0KIAogc3RhdGljIHZvaWQgbWFwbGVfZnJlZV9kZXYoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKLQlpZiAoIW1kZXYpCi0JCXJldHVybjsKLQlpZiAobWRldi0+bXEpIHsKLQkJaWYgKG1kZXYtPm1xLT5yZWN2YnVmZGNzcCkKLQkJCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwKLQkJCQltZGV2LT5tcS0+cmVjdmJ1ZmRjc3ApOwotCQlrZnJlZShtZGV2LT5tcSk7Ci0JfQorCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbWRldi0+bXEtPnJlY3ZidWYpOworCWtmcmVlKG1kZXYtPm1xKTsKIAlrZnJlZShtZGV2KTsKIH0KIApAQCAtMzIwLDcgKzI1OCw3IEBACiAJbWFwbGVfbGFzdHB0ciA9IG1hcGxlX3NlbmRwdHI7CiAKIAkqbWFwbGVfc2VuZHB0cisrID0gKHBvcnQgPDwgMTYpIHwgbGVuIHwgMHg4MDAwMDAwMDsKLQkqbWFwbGVfc2VuZHB0cisrID0gUEhZU0FERFIobXEtPnJlY3ZidWYpOworCSptYXBsZV9zZW5kcHRyKysgPSBQSFlTQUREUihtcS0+cmVjdmJ1Zi0+YnVmKTsKIAkqbWFwbGVfc2VuZHB0cisrID0KIAkgICAgbXEtPmNvbW1hbmQgfCAodG8gPDwgOCkgfCAoZnJvbSA8PCAxNikgfCAobGVuIDw8IDI0KTsKIAl3aGlsZSAobGVuLS0gPiAwKQpAQCAtMzMzLDIwICsyNzEsMjggQEAKIAlpbnQgaSwgbWFwbGVfcGFja2V0cyA9IDA7CiAJc3RydWN0IG1hcGxlcSAqbXEsICpubXE7CiAKKwlpZiAoIW1hcGxlX2RtYV9kb25lKCkpCisJCXJldHVybjsKKworCS8qIGRpc2FibGUgRE1BICovCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CisKIAlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKLQkJcmV0dXJuOworCQlnb3RvIGZpbmlzaDsKKwogCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpIHsKKwlpZiAobGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpKSB7CiAJCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBmaW5pc2g7CiAJfQotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CisKIAltYXBsZV9sYXN0cHRyID0gbWFwbGVfc2VuZGJ1ZjsKIAltYXBsZV9zZW5kcHRyID0gbWFwbGVfc2VuZGJ1ZjsKLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfd2FpdHEsIGxpc3QpIHsKIAkJbWFwbGVfYnVpbGRfYmxvY2sobXEpOwotCQlsaXN0X21vdmUoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOworCQlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOwogCQlpZiAobWFwbGVfcGFja2V0cysrID4gTUFQTEVfTUFYUEFDS0VUUykKIAkJCWJyZWFrOwogCX0KQEAgLTM1NiwxMCArMzAyLDEzIEBACiAJCQlkbWFfY2FjaGVfc3luYygwLCBtYXBsZV9zZW5kYnVmICsgaSAqIFBBR0VfU0laRSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CiAJfQorCitmaW5pc2g6CisJbWFwbGVfZG1hX3Jlc2V0KCk7CiB9CiAKIC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgZHJpdmVyIHJlZ2lzdGVyZWQgbGlrZWx5IHRvIG1hdGNoIHRoaXMgZGV2aWNlICovCi1zdGF0aWMgaW50IGNoZWNrX21hdGNoaW5nX21hcGxlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBtYXBsZV9jaGVja19tYXRjaGluZ19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKIAkJCQkJdm9pZCAqZGV2cHRyKQogewogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1hcGxlX2RydjsKQEAgLTM3NCwxMCArMzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFwbGVfZGV0YWNoX2RyaXZlcihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmICghbWRldikKLQkJcmV0dXJuOwogCWRldmljZV91bnJlZ2lzdGVyKCZtZGV2LT5kZXYpOwotCW1kZXYgPSBOVUxMOwogfQogCiAvKiBwcm9jZXNzIGluaXRpYWwgTUFQTEVfQ09NTUFORF9ERVZJTkZPIGZvciBlYWNoIGRldmljZSBvciBwb3J0ICovCkBAIC0zODUsOSArMzMxLDkgQEAKIHsKIAljaGFyICpwLCAqcmVjdmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZ1bmN0aW9uOwotCWludCBtYXRjaGVkLCByZXR2YWw7CisJaW50IG1hdGNoZWQsIGVycm9yOwogCi0JcmVjdmJ1ZiA9IG1kZXYtPm1xLT5yZWN2YnVmOworCXJlY3ZidWYgPSBtZGV2LT5tcS0+cmVjdmJ1Zi0+YnVmOwogCS8qIGNvcHkgdGhlIGRhdGEgYXMgaW5kaXZpZHVhbCBlbGVtZW50cyBpbgogCSogY2FzZSBvZiBtZW1vcnkgb3B0aW1pc2F0aW9uICovCiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uLCByZWN2YnVmICsgNCwgNCk7CkBAIC0zOTUsNyArMzQxLDYgQEAKIAltZW1jcHkoJm1kZXYtPmRldmluZm8uYXJlYV9jb2RlLCByZWN2YnVmICsgMjAsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5jb25uZWN0b3JfZGlyZWN0aW9uLCByZWN2YnVmICsgMjEsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X25hbWVbMF0sIHJlY3ZidWYgKyAyMiwgMzApOwotCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X2xpY2VuY2VbMF0sIHJlY3ZidWYgKyA1MiwgNjApOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5zdGFuZGJ5X3Bvd2VyLCByZWN2YnVmICsgMTEyLCAyKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8ubWF4X3Bvd2VyLCByZWN2YnVmICsgMTE0LCAyKTsKIAltZW1jcHkobWRldi0+cHJvZHVjdF9uYW1lLCBtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbmFtZSwgMzApOwpAQCAtNDE0LDQzICszNTksMzkgQEAKIAkJZWxzZQogCQkJYnJlYWs7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBkZXZpY2UgZGV0ZWN0ZWQ6ICVzXG4iLAotCQltZGV2LT5wcm9kdWN0X25hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZTogJXNcbiIsIG1kZXYtPnByb2R1Y3RfbGljZW5jZSk7Ci0KIAlmdW5jdGlvbiA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pOwogCisJZGV2X2luZm8oJm1kZXYtPmRldiwgImRldGVjdGVkICVzOiBmdW5jdGlvbiAweCVsWDogYXQgKCVkLCAlZClcbiIsCisJCW1kZXYtPnByb2R1Y3RfbmFtZSwgZnVuY3Rpb24sIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCiAJaWYgKGZ1bmN0aW9uID4gMHgyMDApIHsKIAkJLyogRG8gdGhpcyBzaWxlbnRseSAtIGFzIG5vdCBhIHJlYWwgZGV2aWNlICovCiAJCWZ1bmN0aW9uID0gMDsKLQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CisJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIk1hcGxlIGJ1cyBhdCAoJWQsICVkKTogRnVuY3Rpb24gMHglbFhcbiIsCi0JCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBmdW5jdGlvbik7Ci0KIAkJbWF0Y2hlZCA9CiAJCQlidXNfZm9yX2VhY2hfZHJ2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgbWRldiwKLQkJCQljaGVja19tYXRjaGluZ19tYXBsZV9kcml2ZXIpOworCQkJCW1hcGxlX2NoZWNrX21hdGNoaW5nX2RyaXZlcik7CiAKIAkJaWYgKG1hdGNoZWQgPT0gMCkgewogCQkJLyogRHJpdmVyIGRvZXMgbm90IGV4aXN0IHlldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJObyBtYXBsZSBkcml2ZXIgZm91bmQuXG4iKTsKLQkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV9kdW1teV9kcml2ZXI7CisJCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAibm8gZHJpdmVyIGZvdW5kXG4iKTsKKwkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiAJCX0KLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCi0JCQltZGV2LT51bml0LCBmdW5jdGlvbik7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCisJCQkgICAgIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKIAl9CisKIAltZGV2LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCW1kZXYtPmRldi5yZWxlYXNlID0gJm1hcGxlX3JlbGVhc2VfZGV2aWNlOwotCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJIk1hcGxlIGJ1czogQXR0ZW1wdCB0byByZWdpc3RlciBkZXZpY2UiCi0JCSIgKCV4LCAleCkgZmFpbGVkLlxuIiwKLQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisKKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwllcnJvciA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oJm1kZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBkZXZpY2UgYXQiCisJCQkiICglZCwgJWQpLCB3aXRoIGVycm9yIDB4JVhcbiIsIG1kZXYtPnVuaXQsCisJCQltZGV2LT5wb3J0LCBlcnJvcik7CiAJCW1hcGxlX2ZyZWVfZGV2KG1kZXYpOwogCQltZGV2ID0gTlVMTDsKIAkJcmV0dXJuOwpAQCAtNDYyLDcgKzQwMyw3IEBACiAgKiBwb3J0IGFuZCB1bml0IHRoZW4gcmV0dXJuIDEgLSBhbGxvd3MgaWRlbnRpZmljYXRpb24KICAqIG9mIHdoaWNoIGRldmljZXMgbmVlZCB0byBiZSBhdHRhY2hlZCBvciBkZXRhY2hlZAogICovCi1zdGF0aWMgaW50IGRldGFjaF9tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQorc3RhdGljIGludCBjaGVja19tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQogewogCXN0cnVjdCBtYXBsZV9kZXZpY2Vfc3BlY2lmeSAqZHM7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKQEAgLTQ3NywyMSArNDE4LDI1IEBACiBzdGF0aWMgaW50IHNldHVwX21hcGxlX2NvbW1hbmRzKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqaWdub3JlZCkKIHsKIAlpbnQgYWRkOwotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlX2RldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOwotCi0JaWYgKChtYXBsZV9kZXYtPmludGVydmFsID4gMCkKLQkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9kZXYtPndoZW4pKSB7Ci0JCS8qIGJvdW5jZSBpZiB3ZSBjYW5ub3QgbG9jayAqLwotCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1hcGxlX2RldiwKLQkJCWJlMzJfdG9fY3B1KG1hcGxlX2Rldi0+ZGV2aW5mby5mdW5jdGlvbiksCisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOworCWlmIChtZGV2LT5pbnRlcnZhbCA+IDAgJiYgYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAgJiYKKwkJdGltZV9hZnRlcihqaWZmaWVzLCBtZGV2LT53aGVuKSkgeworCQkvKiBib3VuY2UgaWYgd2UgY2Fubm90IGFkZCAqLworCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsCisJCQliZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKSwKIAkJCU1BUExFX0NPTU1BTkRfR0VUQ09ORCwgMSwgTlVMTCk7CiAJCWlmICghYWRkKQotCQkJbWFwbGVfZGV2LT53aGVuID0gamlmZmllcyArIG1hcGxlX2Rldi0+aW50ZXJ2YWw7CisJCQltZGV2LT53aGVuID0gamlmZmllcyArIG1kZXYtPmludGVydmFsOwogCX0gZWxzZSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKLQkJCS8qIFRoaXMgd2lsbCBhbHNvIGJvdW5jZSAqLwotCQkJbWFwbGVfYWRkX3BhY2tldChtYXBsZV9kZXYsIDAsCi0JCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCS8qIEVuc3VyZSB3ZSBkb24ndCBoYXZlIGJsb2NrIHJlYWRzIGFuZCBkZXZpbmZvCisJCQkqIGNhbGxzIGludGVyZmVyaW5nIHdpdGggb25lIGFub3RoZXIgLSBzbyBmbGFnIHRoZQorCQkJKiBkZXZpY2UgYXMgYnVzeSAqLworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwKSB7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLAorCQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSwyOSArNDQ0LDUwIEBACiAvKiBWQkxBTksgYm90dG9tIGhhbGYgLSBpbXBsZW1lbnRlZCB2aWEgd29ya3F1ZXVlICovCiBzdGF0aWMgdm9pZCBtYXBsZV92YmxhbmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpCisJaW50IHgsIGxvY2tpbmc7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKworCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKIAkJcmV0dXJuOwogCiAJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKKwkJZ290byBmaW5pc2g7CisKKwkvKgorCSogU2V0IHVwIGVzc2VudGlhbCBjb21tYW5kcyAtIHRvIGZldGNoIGRhdGEgYW5kCisJKiBjaGVjayBkZXZpY2VzIGFyZSBzdGlsbCBwcmVzZW50CisJKi8KIAlidXNfZm9yX2VhY2hfZGV2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgTlVMTCwKLQkJCSBzZXR1cF9tYXBsZV9jb21tYW5kcyk7CisJCXNldHVwX21hcGxlX2NvbW1hbmRzKTsKIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9wbnBfdGltZSkpIHsKKwkJLyoKKwkJKiBTY2FuIHRoZSBlbXB0eSBwb3J0cyAtIGJ1cyBpcyBmbGFrZXkgYW5kIG1heSBoYXZlCisJCSogbWlzLXJlcG9ydGVkIGVtcHR5bmVzcworCQkqLworCQlmb3IgKHggPSAwOyB4IDwgTUFQTEVfUE9SVFM7IHgrKykgeworCQkJaWYgKGNoZWNrZWRbeF0gJiYgZW1wdHlbeF0pIHsKKwkJCQltZGV2ID0gYmFzZXVuaXRzW3hdOworCQkJCWlmICghbWRldikKKwkJCQkJYnJlYWs7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbG9ja2luZyA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwKKwkJCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCQlpZiAoIWxvY2tpbmcpCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwogCQltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBNQVBMRV9QTlBfSU5URVJWQUw7Ci0KLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSAmJiBsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkJbWFwbGVfc2VuZCgpOwotCX0gZWxzZSB7Ci0JCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CiAJfQogCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7CitmaW5pc2g6CisJbWFwbGVfc2VuZCgpOwogfQogCi0vKiBoYW5kbGUgZGV2aWNlcyBhZGRlZCB2aWEgaG90cGx1Z3MgLSBwbGFjaW5nIHRoZW0gb24gcXVldWUgZm9yIERFVklORk8qLworLyogaGFuZGxlIGRldmljZXMgYWRkZWQgdmlhIGhvdHBsdWdzIC0gcGxhY2luZyB0aGVtIG9uIHF1ZXVlIGZvciBERVZJTkZPICovCiBzdGF0aWMgdm9pZCBtYXBsZV9tYXBfc3VidW5pdHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgaW50IHN1Ym1hc2spCiB7CiAJaW50IHJldHZhbCwgaywgZGV2Y2hlY2s7CkBAIC01MzMsNyArNDk5LDcgQEAKIAkJZHMudW5pdCA9IGsgKyAxOwogCQlyZXR2YWwgPQogCQkgICAgYnVzX2Zvcl9lYWNoX2RldigmbWFwbGVfYnVzX3R5cGUsIE5VTEwsICZkcywKLQkJCQkgICAgIGRldGFjaF9tYXBsZV9kZXZpY2UpOworCQkJCSAgICAgY2hlY2tfbWFwbGVfZGV2aWNlKTsKIAkJaWYgKHJldHZhbCkgewogCQkJc3VibWFzayA9IHN1Ym1hc2sgPj4gMTsKIAkJCWNvbnRpbnVlOwpAQCAtNTQzLDYgKzUwOSw3IEBACiAJCQltZGV2X2FkZCA9IG1hcGxlX2FsbG9jX2RldihtZGV2LT5wb3J0LCBrICsgMSk7CiAJCQlpZiAoIW1kZXZfYWRkKQogCQkJCXJldHVybjsKKwkJCWF0b21pY19zZXQoJm1kZXZfYWRkLT5idXN5LCAxKTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldl9hZGQsIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywKIAkJCQkwLCBOVUxMKTsKIAkJCS8qIG1hcmsgdGhhdCB3ZSBhcmUgY2hlY2tpbmcgc3ViIGRldmljZXMgKi8KQEAgLTU2NCwyNyArNTMxLDQ1IEBACiB9CiAKIC8qIGhhbmRsZSBlbXB0eSBwb3J0IG9yIGhvdHBsdWcgcmVtb3ZhbCAqLwotc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LAotCQkJCXN0cnVjdCBtYXBsZXEgKm1xKQorc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmIChtZGV2LT51bml0ICE9IDApIHsKLQkJbGlzdF9kZWwoJm1xLT5saXN0KTsKLQkJbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzIGRldmljZSBkZXRhY2hpbmcgYXQgKCVkLCAlZClcbiIsCi0JCSAgICAgICBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7CisKKwlpZiAobGlrZWx5KG1kZXYtPnVuaXQgIT0gMCkpIHsKKwkJLyoKKwkJKiBCbG9jayBkZXZpY2VzIHBsYXkgdXAKKwkJKiBhbmQgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGV5IGhhdmUKKwkJKiBiZWVuIHJlbW92ZWQgZXZlbiB3aGVuIHN0aWxsIGluIHBsYWNlIG9yCisJCSogdHJpcCB0aGUgbXRkIGxheWVyIHdoZW4gdGhleSBoYXZlCisJCSogcmVhbGx5IGdvbmUgLSB0aGlzIGNvZGUgdHJhcHMgdGhhdCBldmVudHVhbGl0eQorCQkqIGFuZCBlbnN1cmVzIHdlIGFyZW4ndCBvdmVybG9hZGVkIHdpdGggdXNlbGVzcworCQkqIGVycm9yIG1lc3NhZ2VzCisJCSovCisJCWlmIChtZGV2LT5jYW5fdW5sb2FkKSB7CisJCQlpZiAoIW1kZXYtPmNhbl91bmxvYWQobWRldikpIHsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAyKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAiZGV0YWNoaW5nIGRldmljZSBhdCAoJWQsICVkKVxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCQltYXBsZV9kZXRhY2hfZHJpdmVyKG1kZXYpOwogCQlyZXR1cm47Ci0JfQotCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKLQkJaWYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpIHsKLQkJCWNoZWNrZWRbbWRldi0+cG9ydF0gPSB0cnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbWFwbGUgZGV2aWNlcyBhdHRhY2hlZCIKLQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCX0gZWxzZSB7CisJCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKKwkJCWlmIChjaGVja2VkW21kZXYtPnBvcnRdID09IGZhbHNlKSB7CisJCQkJY2hlY2tlZFttZGV2LT5wb3J0XSA9IHRydWU7CisJCQkJZW1wdHlbbWRldi0+cG9ydF0gPSB0cnVlOworCQkJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJubyBkZXZpY2VzIgorCQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCQkJfQorCQkJcmV0dXJuOwogCQl9Ci0JCXJldHVybjsKIAl9Ci0JbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOworCS8qIFNvbWUgaGFyZHdhcmUgZGV2aWNlcyBnZW5lcmF0ZSBmYWxzZSBkZXRhY2ggbWVzc2FnZXMgb24gdW5pdCAwICovCisJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiB9CiAKIC8qIHByZXByb2Nlc3MgaG90cGx1Z3Mgb3Igc2NhbnMgKi8KQEAgLTU5OSw4ICs1ODQsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChtZGV2LT51bml0ICE9IDApCiAJCQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwkJCWlmIChtZGV2LT51bml0ID09IDApIHsKKwkJCQllbXB0eVttZGV2LT5wb3J0XSA9IGZhbHNlOworCQkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCQl9CiAJCX0KLQkJcmV0dXJuOwogCX0KIAlpZiAobWRldi0+dW5pdCA9PSAwKSB7CiAJCXN1Ym1hc2sgPSByZWN2YnVmWzJdICYgMHgxRjsKQEAgLTYxMSw2ICs1OTksMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1ZikKK3sKKwlpZiAobWRldi0+ZmlsZWVycl9oYW5kbGVyKSB7CisJCW1kZXYtPmZpbGVlcnJfaGFuZGxlcihtZGV2LCByZWN2YnVmKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiZGV2aWNlIGF0ICglZCwgJWQpIHJlcG9ydHMiCisJCQkiZmlsZSBlcnJvciAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LAorCQkJKChpbnQgKilyZWN2YnVmKVsxXSk7Cit9CisKIHN0YXRpYyB2b2lkIG1hcGxlX3BvcnRfcmVzY2FuKHZvaWQpCiB7CiAJaW50IGk7CkBAIC02MjEsMTIgKzYyMCw2IEBACiAJCWlmIChjaGVja2VkW2ldID09IGZhbHNlKSB7CiAJCQlmdWxsc2NhbiA9IDA7CiAJCQltZGV2ID0gYmFzZXVuaXRzW2ldOwotCQkJLyoKLQkJCSAqICB0ZXN0IGxvY2sgaW4gY2FzZSBzY2FuIGhhcyBmYWlsZWQKLQkJCSAqICBidXQgZGV2aWNlIGlzIHN0aWxsIGxvY2tlZAotCQkJICovCi0JCQlpZiAobXV0ZXhfaXNfbG9ja2VkKCZtZGV2LT5tcS0+bXV0ZXgpKQotCQkJCW11dGV4X3VubG9jaygmbWRldi0+bXEtPm11dGV4KTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLAogCQkJCTAsIE5VTEwpOwogCQl9CkBAIC02MzcsNyArNjMwLDcgQEAKIHN0YXRpYyB2b2lkIG1hcGxlX2RtYV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbWFwbGVxICptcSwgKm5tcTsKLQlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAljaGFyICpyZWN2YnVmOwogCWVudW0gbWFwbGVfY29kZSBjb2RlOwogCkBAIC02NDYsNDMgKzYzOSw1NiBAQAogCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOwogCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfc2VudHEsIGxpc3QpIHsKLQkJCXJlY3ZidWYgPSBtcS0+cmVjdmJ1ZjsKKwkJCW1kZXYgPSBtcS0+ZGV2OworCQkJcmVjdmJ1ZiA9IG1xLT5yZWN2YnVmLT5idWY7CisJCQlkbWFfY2FjaGVfc3luYygmbWRldi0+ZGV2LCByZWN2YnVmLCAweDQwMCwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJY29kZSA9IHJlY3ZidWZbMF07Ci0JCQlkZXYgPSBtcS0+ZGV2OwogCQkJa2ZyZWUobXEtPnNlbmRidWYpOwotCQkJbXV0ZXhfdW5sb2NrKCZtcS0+bXV0ZXgpOwogCQkJbGlzdF9kZWxfaW5pdCgmbXEtPmxpc3QpOwotCiAJCQlzd2l0Y2ggKGNvZGUpIHsKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfTk9ORToKLQkJCQltYXBsZV9yZXNwb25zZV9ub25lKGRldiwgbXEpOworCQkJCW1hcGxlX3Jlc3BvbnNlX25vbmUobWRldik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfREVWSU5GTzoKLQkJCQltYXBsZV9yZXNwb25zZV9kZXZpbmZvKGRldiwgcmVjdmJ1Zik7CisJCQkJbWFwbGVfcmVzcG9uc2VfZGV2aW5mbyhtZGV2LCByZWN2YnVmKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9EQVRBVFJGOgotCQkJCWlmIChkZXYtPmNhbGxiYWNrKQotCQkJCQlkZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlpZiAobWRldi0+Y2FsbGJhY2spCisJCQkJCW1kZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9GSUxFRVJSOgorCQkJCW1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIobWRldiwgcmVjdmJ1Zik7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUdBSU46CiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0JBRENNRDoKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQkFERlVOQzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgbm9uLWZhdGFsIGVycm9yIDB4JVhcbiIsCi0JCQkJICAgICAgIGNvZGUpOworCQkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJub24tZmF0YWwgZXJyb3IiCisJCQkJCSIgMHglWCBhdCAoJWQsICVkKVxuIiwgY29kZSwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUxMSU5GTzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgLSBleHRlbmRlZCBkZXZpY2UgaW5mb3JtYXRpb24iCi0JCQkJCSIgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiZXh0ZW5kZWQiCisJCQkJIiBkZXZpY2UgaW5mb3JtYXRpb24gcmVxdWVzdCBmb3IgKCVkLCAlZCkiCisJCQkJIiBidXQgY2FsbCBpcyBub3Qgc3VwcG9ydGVkXG4iLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX09LOgorCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNjk5LDIwICs3MDUsMTkgQEAKIAkJaWYgKCFmdWxsc2NhbikKIAkJCW1hcGxlX3BvcnRfcmVzY2FuKCk7CiAJCS8qIG1hcmsgdGhhdCB3ZSBoYXZlIGJlZW4gdGhyb3VnaCB0aGUgZmlyc3Qgc2NhbiAqLwotCQlpZiAoc3RhcnRlZCA9PSAwKQotCQkJc3RhcnRlZCA9IDE7CisJCXN0YXJ0ZWQgPSAxOwogCX0KLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKKwltYXBsZV9zZW5kKCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZWJ1c19kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZV9kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAkvKiBMb2FkIGV2ZXJ5dGhpbmcgaW50byB0aGUgYm90dG9tIGhhbGYgKi8KIAlzY2hlZHVsZV93b3JrKCZtYXBsZV9kbWFfcHJvY2Vzcyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVidXNfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc2NoZWR1bGVfd29yaygmbWFwbGVfdmJsYW5rX3Byb2Nlc3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTcyMCwxNCArNzI1LDE0IEBACiAKIHN0YXRpYyBpbnQgbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcih2b2lkKQogewotCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlYnVzX2RtYV9pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlX2RtYV9pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UpOwogfQogCiBzdGF0aWMgaW50IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIodm9pZCkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfVlNZTkMsIG1hcGxlYnVzX3ZibGFua19pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIFZCTEFOSyIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9WU1lOQywgbWFwbGVfdmJsYW5rX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgVkJMQU5LIiwgJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFwbGVfZ2V0X2RtYV9idWZmZXIodm9pZCkKQEAgLTc0MCw3ICs3NDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hdGNoX21hcGxlX2J1c19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2cHRyLAorc3RhdGljIGludCBtYXBsZV9tYXRjaF9idXNfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnZwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RyaXZlciAqbWFwbGVfZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRydnB0cik7CkBAIC03NjUsMjIgKzc3MCwyNCBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UgPSB7CiAJLmRydiA9IHsKLQkJLm5hbWUgPSAibWFwbGVfZHVtbXlfZHJpdmVyIiwKKwkJLm5hbWUgPSAibWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlIiwKIAkJLmJ1cyA9ICZtYXBsZV9idXNfdHlwZSwKIAl9LAogfTsKLQorLyoqCisgKiBtYXBsZV9idXNfdHlwZSAtIGNvcmUgbWFwbGUgYnVzIHN0cnVjdHVyZQorICovCiBzdHJ1Y3QgYnVzX3R5cGUgbWFwbGVfYnVzX3R5cGUgPSB7CiAJLm5hbWUgPSAibWFwbGUiLAotCS5tYXRjaCA9IG1hdGNoX21hcGxlX2J1c19kcml2ZXIsCisJLm1hdGNoID0gbWFwbGVfbWF0Y2hfYnVzX2RyaXZlciwKIAkudWV2ZW50ID0gbWFwbGVfYnVzX3VldmVudCwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9idXNfdHlwZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIG1hcGxlX2J1cyA9IHsKLQkuYnVzX2lkID0gIm1hcGxlIiwKKwkuaW5pdF9uYW1lID0gIm1hcGxlIiwKIAkucmVsZWFzZSA9IG1hcGxlX2J1c19yZWxlYXNlLAogfTsKIApAQCAtNzg4LDcgKzc5NSw4IEBACiB7CiAJaW50IHJldHZhbCwgaTsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2W01BUExFX1BPUlRTXTsKLQljdHJsX291dGwoMCwgTUFQTEVfU1RBVEUpOworCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJm1hcGxlX2J1cyk7CiAJaWYgKHJldHZhbCkKQEAgLTc5OCwzNiArODA2LDMzIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBjbGVhbnVwX2RldmljZTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbWFwbGVfZHVtbXlfZHJpdmVyLmRydik7CisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UuZHJ2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfYnVzOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBtYXBsZSBidXMgZG1hICovCiAJcmV0dmFsID0gbWFwbGVfZ2V0X2RtYV9idWZmZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJNYXBsZSBidXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBNYXBsZSBETUEgYnVmZmVyc1xuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgYnVmZmVyc1xuIik7CiAJCWdvdG8gY2xlYW51cF9iYXNpYzsKIAl9CiAKIAkvKiBzZXQgdXAgRE1BIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1czogRmFpbGVkIHRvIGdyYWIgbWFwbGUgRE1BIElSUVxuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImJ1cyBmYWlsZWQgdG8gZ3JhYiBtYXBsZSAiCisJCQkiRE1BIElSUVxuIik7CiAJCWdvdG8gY2xlYW51cF9kbWE7CiAJfQogCiAJLyogc2V0IHVwIFZCTEFOSyBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXJldHZhbCA9IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1czogRmFpbGVkIHRvIGdyYWIgVkJMQU5LIElSUVxuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImJ1cyBmYWlsZWQgdG8gZ3JhYiBWQkxBTksgSVJRXG4iKTsKIAkJZ290byBjbGVhbnVwX2lycTsKIAl9CiAKLQltYXBsZV9xdWV1ZV9jYWNoZSA9Ci0JICAgIGttZW1fY2FjaGVfY3JlYXRlKCJtYXBsZV9xdWV1ZV9jYWNoZSIsIDB4NDAwLCAwLAotCQkJICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwltYXBsZV9xdWV1ZV9jYWNoZSA9IEtNRU1fQ0FDSEUobWFwbGVfYnVmZmVyLCBTTEFCX0hXQ0FDSEVfQUxJR04pOwogCiAJaWYgKCFtYXBsZV9xdWV1ZV9jYWNoZSkKIAkJZ290byBjbGVhbnVwX2JvdGhpcnFzOwpAQCAtODM4LDIzICs4NDMsMjMgQEAKIAkvKiBzZXR1cCBtYXBsZSBwb3J0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVBMRV9QT1JUUzsgaSsrKSB7CiAJCWNoZWNrZWRbaV0gPSBmYWxzZTsKKwkJZW1wdHlbaV0gPSBmYWxzZTsKIAkJbWRldltpXSA9IG1hcGxlX2FsbG9jX2RldihpLCAwKTsKLQkJYmFzZXVuaXRzW2ldID0gbWRldltpXTsKIAkJaWYgKCFtZGV2W2ldKSB7CiAJCQl3aGlsZSAoaS0tID4gMCkKIAkJCQltYXBsZV9mcmVlX2RldihtZGV2W2ldKTsKIAkJCWdvdG8gY2xlYW51cF9jYWNoZTsKIAkJfQorCQliYXNldW5pdHNbaV0gPSBtZGV2W2ldOworCQlhdG9taWNfc2V0KCZtZGV2W2ldLT5idXN5LCAxKTsKIAkJbWFwbGVfYWRkX3BhY2tldChtZGV2W2ldLCAwLCBNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOwogCQlzdWJkZXZpY2VfbWFwW2ldID0gMDsKIAl9CiAKLQkvKiBzZXR1cCBtYXBsZWJ1cyBoYXJkd2FyZSAqLwotCW1hcGxlYnVzX2RtYV9yZXNldCgpOwotCS8qIGluaXRpYWwgZGV0ZWN0aW9uICovCisJbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzICsgSFo7CisJLyogcHJlcGFyZSBpbml0aWFsIHF1ZXVlICovCiAJbWFwbGVfc2VuZCgpOwotCW1hcGxlX3BucF90aW1lID0gamlmZmllczsKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXMgY29yZSBub3cgcmVnaXN0ZXJlZC5cbiIpOworCWRldl9pbmZvKCZtYXBsZV9idXMsICJidXMgY29yZSBub3cgcmVnaXN0ZXJlZFxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODcxLDcgKzg3Niw3IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbWFwbGVfc2VuZGJ1ZiwgTUFQTEVfRE1BX1BBR0VTKTsKIAogY2xlYW51cF9iYXNpYzoKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWFwbGVfZHVtbXlfZHJpdmVyLmRydik7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZS5kcnYpOwogCiBjbGVhbnVwX2J1czoKIAlidXNfdW5yZWdpc3RlcigmbWFwbGVfYnVzX3R5cGUpOwpAQCAtODgwLDcgKzg4NSw3IEBACiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1hcGxlX2J1cyk7CiAKIGNsZWFudXA6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCXByaW50ayhLRVJOX0VSUiAiTWFwbGUgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCXJldHVybiByZXR2YWw7CiB9CiAvKiBQdXNoIGluaXQgdG8gbGF0ZXIgdG8gZW5zdXJlIGhhcmR3YXJlIGdldHMgZGV0ZWN0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMgYi9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCmluZGV4IDRkMDI4MmIuLjJkOWU3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKKysrIGIvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYwpAQCAtMjIsNyArMjIsNyBAQAogc3RhdGljIGludCBzdXBlcmh5d2F5X2RldmljZXM7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHN1cGVyaHl3YXlfYnVzX2RldmljZSA9IHsKLQkuYnVzX2lkID0gInN1cGVyaHl3YXkiLAorCS5pbml0X25hbWUgPSAic3VwZXJoeXdheSIsCiB9OwogCiBzdGF0aWMgdm9pZCBzdXBlcmh5d2F5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTgzLDcgKzgzLDcgQEAKIAlkZXYtPmlkLmlkCQk9IGRldi0+dmNyLm1vZF9pZDsKIAogCXNwcmludGYoZGV2LT5uYW1lLCAiU3VwZXJIeXdheSBkZXZpY2UgJTA0eCIsIGRldi0+aWQuaWQpOwotCXNwcmludGYoZGV2LT5kZXYuYnVzX2lkLCAiJTAyeCIsIHN1cGVyaHl3YXlfZGV2aWNlcyk7CisJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwMngiLCBzdXBlcmh5d2F5X2RldmljZXMpOwogCiAJc3VwZXJoeXdheV9kZXZpY2VzKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKaW5kZXggNTZmZjNlNi4uMTJlNDQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXNwaSA9IG1zZy0+c3BpOwogCiAJZGV2X2RiZyhtYXN0ZXItPmRldi5wYXJlbnQsICJzdGFydCBtZXNzYWdlICVwIGZvciAlc1xuIiwKLQkJCW1zZywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJCW1zZywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAKIAkvKiBzZWxlY3QgY2hpcCBpZiBpdCdzIG5vdCBzdGlsbCBhY3RpdmUgKi8KIAlpZiAoYXMtPnN0YXkpIHsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQlpZiAoIWFzZCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXJldCA9IGdwaW9fcmVxdWVzdChucGNzX3Bpbiwgc3BpLT5kZXYuYnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5wY3NfcGluLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJaWYgKHJldCkgewogCQkJa2ZyZWUoYXNkKTsKIAkJCXJldHVybiByZXQ7CkBAIC02NjgsNyArNjY4LDcgQEAKIAlhcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJZGV2X2RiZyhjb250cm9sbGVyLCAibmV3IG1lc3NhZ2UgJXAgc3VibWl0dGVkIGZvciAlc1xuIiwKLQkJCW1zZywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJCW1zZywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAKIAlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmbXNnLT50cmFuc2ZlcnMpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDMsNyArODAzLDcgQEAKIAlhcy0+Y2xrID0gY2xrOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1lbF9zcGlfaW50ZXJydXB0LCAwLAotCQkJcGRldi0+ZGV2LmJ1c19pZCwgbWFzdGVyKTsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBtYXN0ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggM2I5NzgwMy4uNjhjNzdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtcHMtPnF1ZXVlKTsKIAogCW1wcy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCW1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKG1wcy0+d29ya3F1ZXVlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggNDU0YTI3MS4uMWM2NWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0xMDAzLDcgKzEwMDMsNyBAQAogCQlnb3RvIGVycjE7CiAJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSwKLQkJCXBkZXYtPmRldi5idXNfaWQpKSB7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGVycjE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCmluZGV4IGJhYjZmZjAuLjYwYjUzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAjaWZkZWYJVkVSQk9TRQogCQkJcHJfZGVidWcoIiVzOiB3cml0ZS0lZCA9JTA0eFxuIiwKLQkJCQkJc3BpLT5kZXYuYnVzX2lkLCBiaXRzLCB2YWwpOworCQkJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCBiaXRzLCB2YWwpOwogI2VuZGlmCiAJCQlpZiAod2FpdF91d2lyZV9jc3JfZmxhZyhDU1JCLCAwLCAwKSkKIAkJCQlnb3RvIGVpbzsKQEAgLTMwNSw3ICszMDUsNyBAQAogCQkJc3RhdHVzICs9IGJ5dGVzOwogI2lmZGVmCVZFUkJPU0UKIAkJCXByX2RlYnVnKCIlczogcmVhZC0lZCA9JTA0eFxuIiwKLQkJCQkJc3BpLT5kZXYuYnVzX2lkLCBiaXRzLCB2YWwpOworCQkJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCBiaXRzLCB2YWwpOwogI2VuZGlmCiAKIAkJfQpAQCAtMzMxLDcgKzMzMSw3IEBACiAJdXdpcmUgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAogCWlmIChzcGktPmNoaXBfc2VsZWN0ID4gMykgewotCQlwcl9kZWJ1ZygiJXM6IGNzJWQ/XG4iLCBzcGktPmRldi5idXNfaWQsIHNwaS0+Y2hpcF9zZWxlY3QpOworCQlwcl9kZWJ1ZygiJXM6IGNzJWQ/XG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpLCBzcGktPmNoaXBfc2VsZWN0KTsKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwogCX0KQEAgLTM0Myw3ICszNDMsNyBAQAogCQliaXRzID0gODsKIAogCWlmIChiaXRzID4gMTYpIHsKLQkJcHJfZGVidWcoIiVzOiB3b3Jkc2l6ZSAlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCwgYml0cyk7CisJCXByX2RlYnVnKCIlczogd29yZHNpemUgJWQ/XG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpLCBiaXRzKTsKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwogCX0KQEAgLTM3OCw3ICszNzgsNyBAQAogCQloeiA9IHQtPnNwZWVkX2h6OwogCiAJaWYgKCFoeikgewotCQlwcl9kZWJ1ZygiJXM6IHplcm8gc3BlZWQ/XG4iLCBzcGktPmRldi5idXNfaWQpOworCQlwcl9kZWJ1ZygiJXM6IHplcm8gc3BlZWQ/XG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTQwNiw3ICs0MDYsNyBAQAogCX0KIAlpZiAoZGl2MV9pZHggPT0gNCkgewogCQlwcl9kZWJ1ZygiJXM6IGxvd2VzdCBjbG9jayAlbGQsIG5lZWQgJWRcbiIsCi0JCQlzcGktPmRldi5idXNfaWQsIHJhdGUgLyAxMCAvIDgsIGh6KTsKKwkJCWRldl9uYW1lKCZzcGktPmRldiksIHJhdGUgLyAxMCAvIDgsIGh6KTsKIAkJc3RhdHVzID0gLUVET007CiAJCWdvdG8gZG9uZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCmluZGV4IDAxNGJlY2IuLmM4YjBiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCkBAIC00OTYsNyArNDk2LDcgQEAKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEsCi0JCQkJcGRldi0+ZGV2LmJ1c19pZCkpIHsKKwkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggZDBmYzRjYS4uZWMyNGYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKIAogCUlOSVRfV09SSygmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwogCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTQ2Miw3ICsxNDYyLDcgQEAKIAkJZHJ2X2RhdGEtPm1hc2tfc3IgPSBTU1NSX1RJTlQgfCBTU1NSX1JGUyB8IFNTU1JfVEZTIHwgU1NTUl9ST1I7CiAJfQogCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldi0+YnVzX2lkLCBkcnZfZGF0YSk7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IElSUSAlZFxuIiwgc3NwLT5pcnEpOwogCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwppbmRleCA3ZmVhM2NmLi4zNDEwYjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTExNjAsOCArMTE2MCw4IEBACiAKIAkvKiBpbml0IG1lc3NhZ2VzIHdvcmtxdWV1ZSAqLwogCUlOSVRfV09SSygmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwotCWRydl9kYXRhLT53b3JrcXVldWUgPQotCSAgICBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2dwaW8uYyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKaW5kZXggZjVlZDk3Mi4uZDI4NjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2dwaW8uYworKysgYi9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXNwaS0+Y29udHJvbGxlcl9zdGF0ZSkgewotCQlzdGF0dXMgPSBncGlvX3JlcXVlc3QoY3MsIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChjcywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOwogCQlzdGF0dXMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY3MsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCAyNjlhNTVlLi4wNDgwZDhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2lteC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtMTM4MSw3ICsxMzgxLDcgQEAKIAogCUlOSVRfV09SSygmZHJ2X2RhdGEtPndvcmssIHB1bXBfbWVzc2FnZXMpOwogCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTUyNSw3ICsxNTI1LDggQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBlcnJfbm9faXJxcmVzOwogCX0KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwaV9pbnQsIElSUUZfRElTQUJMRUQsIGRldi0+YnVzX2lkLCBkcnZfZGF0YSk7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEoaXJxLCBzcGlfaW50LCBJUlFGX0RJU0FCTEVELAorCQkJICAgICBkZXZfbmFtZShkZXYpLCBkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgZ2V0IElSUSAoJWQpXG4iLCBzdGF0dXMpOwogCQlnb3RvIGVycl9ub19pcnFyZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwppbmRleCBhYzBlM2U0Li40NGEyYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKQEAgLTYzNyw3ICs2MzcsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtcGM4M3h4X3NwaS0+cXVldWUpOwogCiAJbXBjODN4eF9zcGktPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQltYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJCWRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChtcGM4M3h4X3NwaS0+d29ya3F1ZXVlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfaXJxOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICIlczogTVBDODN4eCBTUEkgQ29udHJvbGxlciBkcml2ZXIgYXQgMHglcCAoaXJxID0gJWQpXG4iLAotCSAgICAgICBkZXYtPmRldi5idXNfaWQsIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKKwkgICAgICAgZGV2X25hbWUoJmRldi0+ZGV2KSwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOwogCiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKaW5kZXggMjI5NmYzNy4uMjljYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCkBAIC00MDQsNyArNDA0LDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXQ7CiAKLQljLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShtYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJYy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKCFjLT53b3JrcXVldWUpCiAJCWdvdG8gZXhpdF9idXN5OwogCWMtPmxhc3RfY2hpcHNlbGVjdCA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvS2NvbmZpZyBiL2RyaXZlcnMvc3NiL0tjb25maWcKaW5kZXggYjFiOTQ3ZS4uNTQwYTI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3NzYi9LY29uZmlnCkBAIC01MywxMSArNTMsMTEgQEAKIAogY29uZmlnIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFCiAJYm9vbAotCWRlcGVuZHMgb24gU1NCICYmIChQQ01DSUEgPSB5IHx8IFBDTUNJQSA9IFNTQikgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTU0IgJiYgKFBDTUNJQSA9IHkgfHwgUENNQ0lBID0gU1NCKQogCWRlZmF1bHQgeQogCiBjb25maWcgU1NCX1BDTUNJQUhPU1QKLQlib29sICJTdXBwb3J0IGZvciBTU0Igb24gUENNQ0lBLWJ1cyBob3N0IChFWFBFUklNRU5UQUwpIgorCWJvb2wgIlN1cHBvcnQgZm9yIFNTQiBvbiBQQ01DSUEtYnVzIGhvc3QiCiAJZGVwZW5kcyBvbiBTU0JfUENNQ0lBSE9TVF9QT1NTSUJMRQogCXNlbGVjdCBTU0JfU1BST00KIAloZWxwCkBAIC0xMDcsMTQgKzEwNywxNCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWQogCiBjb25maWcgU1NCX1BDSUNPUkVfSE9TVE1PREUKLQlib29sICJIb3N0bW9kZSBzdXBwb3J0IGZvciBTU0IgUENJIGNvcmUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTU0JfRFJJVkVSX1BDSUNPUkUgJiYgU1NCX0RSSVZFUl9NSVBTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIkhvc3Rtb2RlIHN1cHBvcnQgZm9yIFNTQiBQQ0kgY29yZSIKKwlkZXBlbmRzIG9uIFNTQl9EUklWRVJfUENJQ09SRSAmJiBTU0JfRFJJVkVSX01JUFMKIAloZWxwCiAJICBQQ0ljb3JlIGhvc3Rtb2RlIG9wZXJhdGlvbiAoZXh0ZXJuYWwgUENJIGJ1cykuCiAKIGNvbmZpZyBTU0JfRFJJVkVSX01JUFMKLQlib29sICJTU0IgQnJvYWRjb20gTUlQUyBjb3JlIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNTQiAmJiBNSVBTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlNTQiBCcm9hZGNvbSBNSVBTIGNvcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gU1NCICYmIE1JUFMKIAlzZWxlY3QgU1NCX1NFUklBTAogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBhdHRhY2hlZApAQCAtMTI5LDggKzEyOSw4IEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTU0JfRFJJVkVSX0VYVElGCi0JYm9vbCAiU1NCIEJyb2FkY29tIEVYVElGIGNvcmUgZHJpdmVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU1NCX0RSSVZFUl9NSVBTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlNTQiBCcm9hZGNvbSBFWFRJRiBjb3JlIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNTQl9EUklWRVJfTUlQUwogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBhdHRhY2hlZAogCSAgQnJvYWRjb20gRVhUSUYgY29yZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL01ha2VmaWxlIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKaW5kZXggNmYyNTVlOS4uY2ZiYjc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiAKICMgYnVpbHQtaW4gZHJpdmVycwogc3NiLXkJCQkJCSs9IGRyaXZlcl9jaGlwY29tbW9uLm8KK3NzYi15CQkJCQkrPSBkcml2ZXJfY2hpcGNvbW1vbl9wbXUubwogc3NiLSQoQ09ORklHX1NTQl9EUklWRVJfTUlQUykJCSs9IGRyaXZlcl9taXBzY29yZS5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9FWFRJRikJCSs9IGRyaXZlcl9leHRpZi5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFKQkrPSBkcml2ZXJfcGNpY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jIGIvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYwppbmRleCAyZDI3ZDZkLi5lZjljNmEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYworKysgYi9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jCkBAIC0xOCw5ICsxOCwxMSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYjQzX3BjaV9icmlkZ2VfdGJsW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwMSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzA2KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMDcpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxMSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzEyKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxOCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE5KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjApIH0sCkBAIC0yOSw2ICszMSw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyNSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI4KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjkpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyYikgfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGI0M19wY2lfYnJpZGdlX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYwppbmRleCA1NzFmNGZkLi45NjgxNTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKQEAgLTI2LDE5ICsyNiw2IEBACiB9OwogCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGNoaXBjb19yZWFkMzIoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKLQkJCQl1MTYgb2Zmc2V0KQotewotCXJldHVybiBzc2JfcmVhZDMyKGNjLT5kZXYsIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY29fd3JpdGUzMihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAotCQkJCSAgdTE2IG9mZnNldCwKLQkJCQkgIHUzMiB2YWx1ZSkKLXsKLQlzc2Jfd3JpdGUzMihjYy0+ZGV2LCBvZmZzZXQsIHZhbHVlKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgY2hpcGNvX3dyaXRlMzJfbWFza2VkKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUxNiBvZmZzZXQsCiAJCQkJCXUzMiBtYXNrLCB1MzIgdmFsdWUpCiB7CkBAIC0yNDYsNiArMjMzLDcgQEAKIHsKIAlpZiAoIWNjLT5kZXYpCiAJCXJldHVybjsgLyogV2UgZG9uJ3QgaGF2ZSBhIENoaXBDb21tb24gKi8KKwlzc2JfcG11X2luaXQoY2MpOwogCWNoaXBjb19wb3dlcmNvbnRyb2xfaW5pdChjYyk7CiAJc3NiX2NoaXBjb19zZXRfY2xvY2ttb2RlKGNjLCBTU0JfQ0xLTU9ERV9GQVNUKTsKIAljYWxjX2Zhc3RfcG93ZXJ1cF9kZWxheShjYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWRkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwpAQCAtMCwwICsxLDUwOCBAQAorLyoKKyAqIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorICogQnJvYWRjb20gQ2hpcENvbW1vbiBQb3dlciBNYW5hZ2VtZW50IFVuaXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDksIE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgKiBDb3B5cmlnaHQgMjAwNywgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX3JlZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInNzYl9wcml2YXRlLmgiCisKK3N0YXRpYyB1MzIgc3NiX2NoaXBjb19wbGxfcmVhZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgb2Zmc2V0KQoreworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9BRERSLCBvZmZzZXQpOworCXJldHVybiBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9EQVRBKTsKK30KKworc3RhdGljIHZvaWQgc3NiX2NoaXBjb19wbGxfd3JpdGUoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKKwkJCQkgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9BRERSLCBvZmZzZXQpOworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9EQVRBLCB2YWx1ZSk7Cit9CisKK3N0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSB7CisJdTE2IGZyZXE7CS8qIENyeXN0YWwgZnJlcXVlbmN5IGluIGtIei4qLworCXU4IHhmOwkJLyogQ3J5c3RhbCBmcmVxdWVuY3kgdmFsdWUgZm9yIFBNVSBjb250cm9sICovCisJdTggd2JfaW50OworCXUzMiB3Yl9mcmFjOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSBwbXUwX3BsbHRhYltdID0geworCXsgLmZyZXEgPSAxMjAwMCwgLnhmID0gIDEsIC53Yl9pbnQgPSA3MywgLndiX2ZyYWMgPSAzNDk1MjUsIH0sCisJeyAuZnJlcSA9IDEzMDAwLCAueGYgPSAgMiwgLndiX2ludCA9IDY3LCAud2JfZnJhYyA9IDcyNTkzNywgfSwKKwl7IC5mcmVxID0gMTQ0MDAsIC54ZiA9ICAzLCAud2JfaW50ID0gNjEsIC53Yl9mcmFjID0gMTE2NTA4LCB9LAorCXsgLmZyZXEgPSAxNTM2MCwgLnhmID0gIDQsIC53Yl9pbnQgPSA1NywgLndiX2ZyYWMgPSAzMDU4MzQsIH0sCisJeyAuZnJlcSA9IDE2MjAwLCAueGYgPSAgNSwgLndiX2ludCA9IDU0LCAud2JfZnJhYyA9IDMzNjU3OSwgfSwKKwl7IC5mcmVxID0gMTY4MDAsIC54ZiA9ICA2LCAud2JfaW50ID0gNTIsIC53Yl9mcmFjID0gMzk5NDU3LCB9LAorCXsgLmZyZXEgPSAxOTIwMCwgLnhmID0gIDcsIC53Yl9pbnQgPSA0NSwgLndiX2ZyYWMgPSA4NzM4MTMsIH0sCisJeyAuZnJlcSA9IDE5ODAwLCAueGYgPSAgOCwgLndiX2ludCA9IDQ0LCAud2JfZnJhYyA9IDQ2NjAzMywgfSwKKwl7IC5mcmVxID0gMjAwMDAsIC54ZiA9ICA5LCAud2JfaW50ID0gNDQsIC53Yl9mcmFjID0gMCwgICAgICB9LAorCXsgLmZyZXEgPSAyNTAwMCwgLnhmID0gMTAsIC53Yl9pbnQgPSA3MCwgLndiX2ZyYWMgPSA0MTk0MzAsIH0sCisJeyAuZnJlcSA9IDI2MDAwLCAueGYgPSAxMSwgLndiX2ludCA9IDY3LCAud2JfZnJhYyA9IDcyNTkzNywgfSwKKwl7IC5mcmVxID0gMzAwMDAsIC54ZiA9IDEyLCAud2JfaW50ID0gNTgsIC53Yl9mcmFjID0gNjk5MDUwLCB9LAorCXsgLmZyZXEgPSAzODQwMCwgLnhmID0gMTMsIC53Yl9pbnQgPSA0NSwgLndiX2ZyYWMgPSA4NzM4MTMsIH0sCisJeyAuZnJlcSA9IDQwMDAwLCAueGYgPSAxNCwgLndiX2ludCA9IDQ1LCAud2JfZnJhYyA9IDAsICAgICAgfSwKK307CisjZGVmaW5lIFNTQl9QTVUwX0RFRkFVTFRfWFRBTEZSRVEJMjAwMDAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSAqIHBtdTBfcGxsdGFiX2ZpbmRfZW50cnkodTMyIGNyeXN0YWxmcmVxKQoreworCWNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtdTBfcGxsdGFiKTsgaSsrKSB7CisJCWUgPSAmcG11MF9wbGx0YWJbaV07CisJCWlmIChlLT5mcmVxID09IGNyeXN0YWxmcmVxKQorCQkJcmV0dXJuIGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFR1bmUgdGhlIFBMTCB0byB0aGUgY3J5c3RhbCBzcGVlZC4gY3J5c3RhbGZyZXEgaXMgaW4ga0h6LiAqLworc3RhdGljIHZvaWQgc3NiX3BtdTBfcGxsaW5pdF9yMChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCXUzMiBjcnlzdGFsZnJlcSkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCWNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSAqZSA9IE5VTEw7CisJdTMyIHBtdWN0bCwgdG1wLCBwbGxjdGw7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoKGJ1cy0+Y2hpcF9pZCA9PSAweDUzNTQpICYmICFjcnlzdGFsZnJlcSkgeworCQkvKiBUaGUgNTM1NCBjcnlzdGFsIGZyZXEgaXMgMjVNSHogKi8KKwkJY3J5c3RhbGZyZXEgPSAyNTAwMDsKKwl9CisJaWYgKGNyeXN0YWxmcmVxKQorCQllID0gcG11MF9wbGx0YWJfZmluZF9lbnRyeShjcnlzdGFsZnJlcSk7CisJaWYgKCFlKQorCQllID0gcG11MF9wbGx0YWJfZmluZF9lbnRyeShTU0JfUE1VMF9ERUZBVUxUX1hUQUxGUkVRKTsKKwlCVUdfT04oIWUpOworCWNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKwljYy0+cG11LmNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKworCS8qIENoZWNrIGlmIHRoZSBQTEwgYWxyZWFkeSBpcyBwcm9ncmFtbWVkIHRvIHRoaXMgZnJlcXVlbmN5LiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJaWYgKCgocG11Y3RsICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRKSA+PiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpID09IGUtPnhmKSB7CisJCS8qIFdlJ3JlIGFscmVhZHkgdGhlcmUuLi4gKi8KKwkJcmV0dXJuOworCX0KKworCXNzYl9wcmludGsoS0VSTl9JTkZPIFBGWCAiUHJvZ3JhbW1pbmcgUExMIHRvICV1LiUwM3UgTUh6XG4iLAorCQkgICAoY3J5c3RhbGZyZXEgLyAxMDAwKSwgKGNyeXN0YWxmcmVxICUgMTAwMCkpOworCisJLyogRmlyc3QgdHVybiB0aGUgUExMIG9mZi4gKi8KKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzI4OgorCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfUFUpKTsKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywKKwkJCSAgICAgIH4oMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVKSk7CisJCWJyZWFrOworCWNhc2UgMHg1MzU0OgorCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfUFUpKTsKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywKKwkJCSAgICAgIH4oMSA8PCBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX1BVKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNTQl9XQVJOX09OKDEpOworCX0KKwlmb3IgKGkgPSAxNTAwOyBpOyBpLS0pIHsKKwkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DTEtDVExTVCk7CisJCWlmICghKHRtcCAmIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwlpZiAodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpCisJCXNzYl9wcmludGsoS0VSTl9FTUVSRyBQRlggIkZhaWxlZCB0byB0dXJuIHRoZSBQTEwgb2ZmIVxuIik7CisKKwkvKiBTZXQgUERJViBpbiBQTEwgY29udHJvbCAwLiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUwX1BMTENUTDApOworCWlmIChjcnlzdGFsZnJlcSA+PSBTU0JfUE1VMF9QTExDVEwwX1BESVZfRlJFUSkKKwkJcGxsY3RsIHw9IFNTQl9QTVUwX1BMTENUTDBfUERJVl9NU0s7CisJZWxzZQorCQlwbGxjdGwgJj0gflNTQl9QTVUwX1BMTENUTDBfUERJVl9NU0s7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUwX1BMTENUTDAsIHBsbGN0bCk7CisKKwkvKiBTZXQgV0lMRCBpbiBQTEwgY29udHJvbCAxLiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUwX1BMTENUTDEpOworCXBsbGN0bCAmPSB+U1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9EOworCXBsbGN0bCAmPSB+KFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLIHwgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0spOworCXBsbGN0bCB8PSAoKHUzMillLT53Yl9pbnQgPDwgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0tfU0hJRlQpICYgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0s7CisJcGxsY3RsIHw9ICgodTMyKWUtPndiX2ZyYWMgPDwgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0tfU0hJRlQpICYgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0s7CisJaWYgKGUtPndiX2ZyYWMgPT0gMCkKKwkJcGxsY3RsIHw9IFNTQl9QTVUwX1BMTENUTDFfU1RPUE1PRDsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTBfUExMQ1RMMSwgcGxsY3RsKTsKKworCS8qIFNldCBXSUxEIGluIFBMTCBjb250cm9sIDIuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTBfUExMQ1RMMik7CisJcGxsY3RsICY9IH5TU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJOworCXBsbGN0bCB8PSAoKCh1MzIpZS0+d2JfaW50ID4+IDQpIDw8IFNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSElfU0hJRlQpICYgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISTsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTBfUExMQ1RMMiwgcGxsY3RsKTsKKworCS8qIFNldCB0aGUgY3J5c3RhbGZyZXF1ZW5jeSBhbmQgdGhlIGRpdmlzb3IuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlwbXVjdGwgJj0gflNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWOworCXBtdWN0bCB8PSAoKChjcnlzdGFsZnJlcSArIDEyNykgLyAxMjggLSAxKSA8PCBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVl9TSElGVCkKKwkJCSYgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVY7CisJcG11Y3RsICY9IH5TU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVE7CisJcG11Y3RsIHw9ICgodTMyKWUtPnhmIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVE7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwgcG11Y3RsKTsKK30KKworc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5IHsKKwl1MTYgZnJlcTsJLyogQ3J5c3RhbCBmcmVxdWVuY3kgaW4ga0h6LiovCisJdTggeGY7CQkvKiBDcnlzdGFsIGZyZXF1ZW5jeSB2YWx1ZSBmb3IgUE1VIGNvbnRyb2wgKi8KKwl1OCBuZGl2X2ludDsKKwl1MzIgbmRpdl9mcmFjOworCXU4IHAxZGl2OworCXU4IHAyZGl2OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSBwbXUxX3BsbHRhYltdID0geworCXsgLmZyZXEgPSAxMjAwMCwgLnhmID0gIDEsIC5wMWRpdiA9IDMsIC5wMmRpdiA9IDIyLCAubmRpdl9pbnQgPSAgMHg5LCAubmRpdl9mcmFjID0gMHhGRkZGRUYsIH0sCisJeyAuZnJlcSA9IDEzMDAwLCAueGYgPSAgMiwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDYsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAweDQ4MzQ4MywgfSwKKwl7IC5mcmVxID0gMTQ0MDAsIC54ZiA9ICAzLCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMCwgLm5kaXZfaW50ID0gIDB4YSwgLm5kaXZfZnJhYyA9IDB4MUM3MUM3LCB9LAorCXsgLmZyZXEgPSAxNTM2MCwgLnhmID0gIDQsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICA1LCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMHg3NTU1NTUsIH0sCisJeyAuZnJlcSA9IDE2MjAwLCAueGYgPSAgNSwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTAsIC5uZGl2X2ludCA9ICAweDUsIC5uZGl2X2ZyYWMgPSAweDZFOUUwNiwgfSwKKwl7IC5mcmVxID0gMTY4MDAsIC54ZiA9ICA2LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMCwgLm5kaXZfaW50ID0gIDB4NSwgLm5kaXZfZnJhYyA9IDB4M0NGM0NGLCB9LAorCXsgLmZyZXEgPSAxOTIwMCwgLnhmID0gIDcsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICA5LCAubmRpdl9pbnQgPSAgMHg1LCAubmRpdl9mcmFjID0gMHgxN0I0MjUsIH0sCisJeyAuZnJlcSA9IDE5ODAwLCAueGYgPSAgOCwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTEsIC5uZGl2X2ludCA9ICAweDQsIC5uZGl2X2ZyYWMgPSAweEE1N0VCLCAgfSwKKwl7IC5mcmVxID0gMjAwMDAsIC54ZiA9ICA5LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMSwgLm5kaXZfaW50ID0gIDB4NCwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorCXsgLmZyZXEgPSAyNDAwMCwgLnhmID0gMTAsIC5wMWRpdiA9IDMsIC5wMmRpdiA9IDExLCAubmRpdl9pbnQgPSAgMHhhLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDI1MDAwLCAueGYgPSAxMSwgLnAxZGl2ID0gNSwgLnAyZGl2ID0gMTYsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMjYwMDAsIC54ZiA9IDEyLCAucDFkaXYgPSAxLCAucDJkaXYgPSAgMiwgLm5kaXZfaW50ID0gMHgxMCwgLm5kaXZfZnJhYyA9IDB4RUM0RUM0LCB9LAorCXsgLmZyZXEgPSAzMDAwMCwgLnhmID0gMTMsIC5wMWRpdiA9IDMsIC5wMmRpdiA9ICA4LCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDM4NDAwLCAueGYgPSAxNCwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDUsIC5uZGl2X2ludCA9ICAweDQsIC5uZGl2X2ZyYWMgPSAweDk1NTU1NSwgfSwKKwl7IC5mcmVxID0gNDAwMDAsIC54ZiA9IDE1LCAucDFkaXYgPSAxLCAucDJkaXYgPSAgMiwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorfTsKKworI2RlZmluZSBTU0JfUE1VMV9ERUZBVUxUX1hUQUxGUkVRCTE1MzYwCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgKiBwbXUxX3BsbHRhYl9maW5kX2VudHJ5KHUzMiBjcnlzdGFsZnJlcSkKK3sKKwljb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXUxX3BsbHRhYik7IGkrKykgeworCQllID0gJnBtdTFfcGxsdGFiW2ldOworCQlpZiAoZS0+ZnJlcSA9PSBjcnlzdGFsZnJlcSkKKwkJCXJldHVybiBlOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBUdW5lIHRoZSBQTEwgdG8gdGhlIGNyeXN0YWwgc3BlZWQuIGNyeXN0YWxmcmVxIGlzIGluIGtIei4gKi8KK3N0YXRpYyB2b2lkIHNzYl9wbXUxX3BsbGluaXRfcjAoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKKwkJCQl1MzIgY3J5c3RhbGZyZXEpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwljb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgKmUgPSBOVUxMOworCXUzMiBidWZmZXJfc3RyZW5ndGggPSAwOworCXUzMiB0bXAsIHBsbGN0bCwgcG11Y3RsOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGJ1cy0+Y2hpcF9pZCA9PSAweDQzMTIpIHsKKwkJLyogV2UgZG8gbm90IHRvdWNoIHRoZSBCQ000MzEyIFBMTCBhbmQgYXNzdW1lCisJCSAqIHRoZSBkZWZhdWx0IGNyeXN0YWwgc2V0dGluZ3Mgd29yayBvdXQtb2YtdGhlLWJveC4gKi8KKwkJY2MtPnBtdS5jcnlzdGFsZnJlcSA9IDIwMDAwOworCQlyZXR1cm47CisJfQorCisJaWYgKGNyeXN0YWxmcmVxKQorCQllID0gcG11MV9wbGx0YWJfZmluZF9lbnRyeShjcnlzdGFsZnJlcSk7CisJaWYgKCFlKQorCQllID0gcG11MV9wbGx0YWJfZmluZF9lbnRyeShTU0JfUE1VMV9ERUZBVUxUX1hUQUxGUkVRKTsKKwlCVUdfT04oIWUpOworCWNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKwljYy0+cG11LmNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKworCS8qIENoZWNrIGlmIHRoZSBQTEwgYWxyZWFkeSBpcyBwcm9ncmFtbWVkIHRvIHRoaXMgZnJlcXVlbmN5LiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJaWYgKCgocG11Y3RsICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRKSA+PiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpID09IGUtPnhmKSB7CisJCS8qIFdlJ3JlIGFscmVhZHkgdGhlcmUuLi4gKi8KKwkJcmV0dXJuOworCX0KKworCXNzYl9wcmludGsoS0VSTl9JTkZPIFBGWCAiUHJvZ3JhbW1pbmcgUExMIHRvICV1LiUwM3UgTUh6XG4iLAorCQkgICAoY3J5c3RhbGZyZXEgLyAxMDAwKSwgKGNyeXN0YWxmcmVxICUgMTAwMCkpOworCisJLyogRmlyc3QgdHVybiB0aGUgUExMIG9mZi4gKi8KKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzI1OgorCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLAorCQkJICAgICAgfigoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQkJQTExfUFdSU1dfUFUpIHwKKwkJCQkoMSA8PCBTU0JfUE1VUkVTXzQzMjVfSFRfQVZBSUwpKSk7CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01BWFJFU19NU0ssCisJCQkgICAgICB+KCgxIDw8IFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVSkgfAorCQkJCSgxIDw8IFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTCkpKTsKKwkJLyogQWRqdXN0IHRoZSBCQlBMTCB0byAyIG9uIGFsbCBjaGFubmVscyBsYXRlci4gKi8KKwkJYnVmZmVyX3N0cmVuZ3RoID0gMHgyMjIyMjI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNTQl9XQVJOX09OKDEpOworCX0KKwlmb3IgKGkgPSAxNTAwOyBpOyBpLS0pIHsKKwkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DTEtDVExTVCk7CisJCWlmICghKHRtcCAmIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwlpZiAodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpCisJCXNzYl9wcmludGsoS0VSTl9FTUVSRyBQRlggIkZhaWxlZCB0byB0dXJuIHRoZSBQTEwgb2ZmIVxuIik7CisKKwkvKiBTZXQgcDFkaXYgYW5kIHAyZGl2LiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDApOworCXBsbGN0bCAmPSB+KFNTQl9QTVUxX1BMTENUTDBfUDFESVYgfCBTU0JfUE1VMV9QTExDVEwwX1AyRElWKTsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+cDFkaXYgPDwgU1NCX1BNVTFfUExMQ1RMMF9QMURJVl9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwwX1AxRElWOworCXBsbGN0bCB8PSAoKHUzMillLT5wMmRpdiA8PCBTU0JfUE1VMV9QTExDVEwwX1AyRElWX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDBfUDJESVY7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDAsIHBsbGN0bCk7CisKKwkvKiBTZXQgbmRpdiBpbnQgYW5kIG5kaXYgbW9kZSAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDIpOworCXBsbGN0bCAmPSB+KFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVCB8IFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREUpOworCXBsbGN0bCB8PSAoKHUzMillLT5uZGl2X2ludCA8PCBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlRfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UOworCXBsbGN0bCB8PSAoMSA8PCBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREU7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDIsIHBsbGN0bCk7CisKKwkvKiBTZXQgbmRpdiBmcmFjICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMMyk7CisJcGxsY3RsICY9IH5TU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDOworCXBsbGN0bCB8PSAoKHUzMillLT5uZGl2X2ZyYWMgPDwgU1NCX1BNVTFfUExMQ1RMM19ORElWRlJBQ19TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMV9QTExDVEwzLCBwbGxjdGwpOworCisJLyogQ2hhbmdlIHRoZSBkcml2ZSBzdHJlbmd0aCwgaWYgcmVxdWlyZWQuICovCisJaWYgKGJ1ZmZlcl9zdHJlbmd0aCkgeworCQlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMV9QTExDVEw1KTsKKwkJcGxsY3RsICY9IH5TU0JfUE1VMV9QTExDVEw1X0NMS0RSVjsKKwkJcGxsY3RsIHw9IChidWZmZXJfc3RyZW5ndGggPDwgU1NCX1BNVTFfUExMQ1RMNV9DTEtEUlZfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMNV9DTEtEUlY7CisJCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMV9QTExDVEw1LCBwbGxjdGwpOworCX0KKworCS8qIFR1bmUgdGhlIGNyeXN0YWxmcmVxIGFuZCB0aGUgZGl2aXNvci4gKi8KKwlwbXVjdGwgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwpOworCXBtdWN0bCAmPSB+KFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWIHwgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRKTsKKwlwbXVjdGwgfD0gKCgoKHUzMillLT5mcmVxICsgMTI3KSAvIDEyOCAtIDEpIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUKQorCQkJJiBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVjsKKwlwbXVjdGwgfD0gKCh1MzIpZS0+eGYgPDwgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUKSAmIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUTsKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLCBwbXVjdGwpOworfQorCitzdGF0aWMgdm9pZCBzc2JfcG11X3BsbF9pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbGZyZXEgPSAwOyAvKiBpbiBrSHouIDAgPSBrZWVwIGRlZmF1bHQgZnJlcS4gKi8KKworCWlmIChidXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU1NCKSB7CisJCS8qIFRPRE86IFRoZSB1c2VyIG1heSBvdmVycmlkZSB0aGUgY3J5c3RhbCBmcmVxdWVuY3kuICovCisJfQorCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMxMjoKKwljYXNlIDB4NDMyNToKKwkJc3NiX3BtdTFfcGxsaW5pdF9yMChjYywgY3J5c3RhbGZyZXEpOworCQlicmVhazsKKwljYXNlIDB4NDMyODoKKwljYXNlIDB4NTM1NDoKKwkJc3NiX3BtdTBfcGxsaW5pdF9yMChjYywgY3J5c3RhbGZyZXEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgIkVSUk9SOiBQTEwgaW5pdCB1bmtub3duIGZvciBkZXZpY2UgJTA0WFxuIiwKKwkJCSAgIGJ1cy0+Y2hpcF9pZCk7CisJfQorfQorCitzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5IHsKKwl1OCByZXNvdXJjZTsJLyogVGhlIHJlc291cmNlIG51bWJlciAqLworCXUxNiB1cGRvd247CS8qIFRoZSB1cGRvd24gdmFsdWUgKi8KK307CisKK2VudW0gcG11X3Jlc19kZXBlbmRfdGFiX3Rhc2sgeworCVBNVV9SRVNfREVQX1NFVCA9IDEsCisJUE1VX1JFU19ERVBfQURELAorCVBNVV9SRVNfREVQX1JFTU9WRSwKK307CisKK3N0cnVjdCBwbXVfcmVzX2RlcGVuZF90YWJfZW50cnkgeworCXU4IHJlc291cmNlOwkvKiBUaGUgcmVzb3VyY2UgbnVtYmVyICovCisJdTggdGFzazsJLyogU0VUIHwgQUREIHwgUkVNT1ZFICovCisJdTMyIGRlcGVuZDsJLyogVGhlIGRlcGVuZCBtYXNrICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfdXBkb3duX3RhYl9lbnRyeSBwbXVfcmVzX3VwZG93bl90YWJfNDMyOGEwW10gPSB7CisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTSwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNLAkJLnVwZG93biA9IDB4MUYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9CVVJTVCwJLnVwZG93biA9IDB4MDEwRiwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9FWFRfU1dJVENIRVJfQlVSU1QsCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfSUxQX1JFUVVFU1QsCQkudXBkb3duID0gMHgwMjAyLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX1BXTSwJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SQURJT19TV0lUQ0hFUl9CVVJTVCwJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9ST01fU1dJVENILAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9QQV9SRUZfTERPLAkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SQURJT19MRE8sCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0FGRV9MRE8sCQkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9QTExfTERPLAkJCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkdfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfVFhfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUlhfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9QVSwJCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1hUQUxfRU4sCQkJLnVwZG93biA9IDB4QTAwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUkZfUExMX0ZJTFRCWVAsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVSwJCS51cGRvd24gPSAweDA3MDEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyOGEwW10gPSB7CisJeworCQkvKiBBZGp1c3QgSUxQIFJlcXVlc3QgdG8gYXZvaWQgZm9yY2luZyBFWFQvQkIgaW50byBidXJzdCBtb2RlLiAqLworCQkucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfSUxQX1JFUVVFU1QsCisJCS50YXNrID0gUE1VX1JFU19ERVBfU0VULAorCQkuZGVwZW5kID0gKCgxIDw8IFNTQl9QTVVSRVNfNDMyOF9FWFRfU1dJVENIRVJfUFdNKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNKSksCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5IHBtdV9yZXNfdXBkb3duX3RhYl80MzI1YTBbXSA9IHsKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyNV9YVEFMX1BVLAkJCS51cGRvd24gPSAweDE1MDEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyNWEwW10gPSB7CisJeworCQkvKiBBZGp1c3QgSFQtQXZhaWxhYmxlIGRlcGVuZGVuY2llcy4gKi8KKwkJLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMLAorCQkudGFzayA9IFBNVV9SRVNfREVQX0FERCwKKwkJLmRlcGVuZCA9ICgoMSA8PCBTU0JfUE1VUkVTXzQzMjVfUlhfUFdSU1dfUFUpIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9UWF9QV1JTV19QVSkgfAorCQkJICAgKDEgPDwgU1NCX1BNVVJFU180MzI1X0xPR0VOX1BXUlNXX1BVKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQUZFX1BXUlNXX1BVKSksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHNzYl9wbXVfcmVzb3VyY2VzX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCXUzMiBtaW5fbXNrID0gMCwgbWF4X21zayA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3Qgc3RydWN0IHBtdV9yZXNfdXBkb3duX3RhYl9lbnRyeSAqdXBkb3duX3RhYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHVwZG93bl90YWJfc2l6ZTsKKwljb25zdCBzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5ICpkZXBlbmRfdGFiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZGVwZW5kX3RhYl9zaXplOworCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMxMjoKKwkJLyogV2Uga2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5nczoKKwkJICogbWluX21zayA9IDB4Q0JCCisJCSAqIG1heF9tc2sgPSAweDdGRkZGCisJCSAqLworCQlicmVhazsKKwljYXNlIDB4NDMyNToKKwkJLyogUG93ZXIgT1RQIGRvd24gbGF0ZXIuICovCisJCW1pbl9tc2sgPSAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQ0JVQ0tfQlVSU1QpIHwKKwkJCSAgKDEgPDwgU1NCX1BNVVJFU180MzI1X0xOTERPMl9QVSk7CisJCWlmIChjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NISVBTVEFUKSAmCisJCSAgICBTU0JfQ0hJUENPX0NIU1RfNDMyNV9QTVVUT1BfMkIpCisJCQltaW5fbXNrIHw9ICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9DTERPX0NCVUNLX0JVUlNUKTsKKwkJLyogVGhlIFBMTCBtYXkgdHVybiBvbiwgaWYgaXQgZGVjaWRlcyBzby4gKi8KKwkJbWF4X21zayA9IDB4RkZGRkY7CisJCXVwZG93bl90YWIgPSBwbXVfcmVzX3VwZG93bl90YWJfNDMyNWEwOworCQl1cGRvd25fdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfdXBkb3duX3RhYl80MzI1YTApOworCQlkZXBlbmRfdGFiID0gcG11X3Jlc19kZXBlbmRfdGFiXzQzMjVhMDsKKwkJZGVwZW5kX3RhYl9zaXplID0gQVJSQVlfU0laRShwbXVfcmVzX2RlcGVuZF90YWJfNDMyNWEwKTsKKwkJYnJlYWs7CisJY2FzZSAweDQzMjg6CisJCW1pbl9tc2sgPSAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTSkgfAorCQkJICAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNKSB8CisJCQkgICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9YVEFMX0VOKTsKKwkJLyogVGhlIFBMTCBtYXkgdHVybiBvbiwgaWYgaXQgZGVjaWRlcyBzby4gKi8KKwkJbWF4X21zayA9IDB4RkZGRkY7CisJCXVwZG93bl90YWIgPSBwbXVfcmVzX3VwZG93bl90YWJfNDMyOGEwOworCQl1cGRvd25fdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfdXBkb3duX3RhYl80MzI4YTApOworCQlkZXBlbmRfdGFiID0gcG11X3Jlc19kZXBlbmRfdGFiXzQzMjhhMDsKKwkJZGVwZW5kX3RhYl9zaXplID0gQVJSQVlfU0laRShwbXVfcmVzX2RlcGVuZF90YWJfNDMyOGEwKTsKKwkJYnJlYWs7CisJY2FzZSAweDUzNTQ6CisJCS8qIFRoZSBQTEwgbWF5IHR1cm4gb24sIGlmIGl0IGRlY2lkZXMgc28uICovCisJCW1heF9tc2sgPSAweEZGRkZGOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgIkVSUk9SOiBQTVUgcmVzb3VyY2UgY29uZmlnIHVua25vd24gZm9yIGRldmljZSAlMDRYXG4iLAorCQkJICAgYnVzLT5jaGlwX2lkKTsKKwl9CisKKwlpZiAodXBkb3duX3RhYikgeworCQlmb3IgKGkgPSAwOyBpIDwgdXBkb3duX3RhYl9zaXplOyBpKyspIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMLAorCQkJCSAgICAgICB1cGRvd25fdGFiW2ldLnJlc291cmNlKTsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfVVBETlRNLAorCQkJCSAgICAgICB1cGRvd25fdGFiW2ldLnVwZG93bik7CisJCX0KKwl9CisJaWYgKGRlcGVuZF90YWIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlcGVuZF90YWJfc2l6ZTsgaSsrKSB7CisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX1RBQlNFTCwKKwkJCQkgICAgICAgZGVwZW5kX3RhYltpXS5yZXNvdXJjZSk7CisJCQlzd2l0Y2ggKGRlcGVuZF90YWJbaV0udGFzaykgeworCQkJY2FzZSBQTVVfUkVTX0RFUF9TRVQ6CisJCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0ssCisJCQkJCSAgICAgICBkZXBlbmRfdGFiW2ldLmRlcGVuZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBNVV9SRVNfREVQX0FERDoKKwkJCQljaGlwY29fc2V0MzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0ssCisJCQkJCSAgICAgZGVwZW5kX3RhYltpXS5kZXBlbmQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQTVVfUkVTX0RFUF9SRU1PVkU6CisJCQkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSywKKwkJCQkJICAgICAgfihkZXBlbmRfdGFiW2ldLmRlcGVuZCkpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlTU0JfV0FSTl9PTigxKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFNldCB0aGUgcmVzb3VyY2UgbWFza3MuICovCisJaWYgKG1pbl9tc2spCisJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLCBtaW5fbXNrKTsKKwlpZiAobWF4X21zaykKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX01BWFJFU19NU0ssIG1heF9tc2spOworfQorCit2b2lkIHNzYl9wbXVfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJdTMyIHBtdWNhcDsKKworCWlmICghKGNjLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QTVUpKQorCQlyZXR1cm47CisKKwlwbXVjYXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DQVApOworCWNjLT5wbXUucmV2ID0gKHBtdWNhcCAmIFNTQl9DSElQQ09fUE1VX0NBUF9SRVZJU0lPTik7CisKKwlzc2JfZHByaW50ayhLRVJOX0RFQlVHIFBGWCAiRm91bmQgcmV2ICV1IFBNVSAoY2FwYWJpbGl0aWVzIDB4JTA4WClcbiIsCisJCSAgICBjYy0+cG11LnJldiwgcG11Y2FwKTsKKworCWlmIChjYy0+cG11LnJldiA+PSAxKSB7CisJCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPCAyKSkgeworCQkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLAorCQkJCSAgICAgIH5TU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcpOworCQl9IGVsc2UgeworCQkJY2hpcGNvX3NldDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsCisJCQkJICAgICBTU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcpOworCQl9CisJfQorCXNzYl9wbXVfcGxsX2luaXQoY2MpOworCXNzYl9wbXVfcmVzb3VyY2VzX2luaXQoY2MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpLmMgYi9kcml2ZXJzL3NzYi9wY2kuYwppbmRleCBkNWNkZTA1Li40MGVhNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtNDY3LDYgKzQ2Nyw1MSBAQAogCS8qIFRPRE8gLSBnZXQgcmVtYWluaW5nIHJldiA0IHN0dWZmIG5lZWRlZCAqLwogfQogCitzdGF0aWMgdm9pZCBzcHJvbV9leHRyYWN0X3I4KHN0cnVjdCBzc2Jfc3Byb20gKm91dCwgY29uc3QgdTE2ICppbikKK3sKKwlpbnQgaTsKKwl1MTYgdjsKKworCS8qIGV4dHJhY3QgdGhlIE1BQyBhZGRyZXNzICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl2ID0gaW5bU1BPRkYoU1NCX1NQUk9NMV9JTDBNQUMpICsgaV07CisJCSooKChfX2JlMTYgKilvdXQtPmlsMG1hYykgKyBpKSA9IGNwdV90b19iZTE2KHYpOworCX0KKwlTUEVYKGNvdW50cnlfY29kZSwgU1NCX1NQUk9NOF9DQ09ERSwgMHhGRkZGLCAwKTsKKwlTUEVYKGJvYXJkZmxhZ3NfbG8sIFNTQl9TUFJPTThfQkZMTE8sIDB4RkZGRiwgMCk7CisJU1BFWChib2FyZGZsYWdzX2hpLCBTU0JfU1BST004X0JGTEhJLCAweEZGRkYsIDApOworCVNQRVgoYW50X2F2YWlsYWJsZV9hLCBTU0JfU1BST004X0FOVEFWQUlMLCBTU0JfU1BST004X0FOVEFWQUlMX0EsCisJICAgICBTU0JfU1BST004X0FOVEFWQUlMX0FfU0hJRlQpOworCVNQRVgoYW50X2F2YWlsYWJsZV9iZywgU1NCX1NQUk9NOF9BTlRBVkFJTCwgU1NCX1NQUk9NOF9BTlRBVkFJTF9CRywKKwkgICAgIFNTQl9TUFJPTThfQU5UQVZBSUxfQkdfU0hJRlQpOworCVNQRVgobWF4cHdyX2JnLCBTU0JfU1BST004X01BWFBfQkcsIFNTQl9TUFJPTThfTUFYUF9CR19NQVNLLCAwKTsKKwlTUEVYKGl0c3NpX2JnLCBTU0JfU1BST004X01BWFBfQkcsIFNTQl9TUFJPTThfSVRTU0lfQkcsCisJICAgICBTU0JfU1BST004X0lUU1NJX0JHX1NISUZUKTsKKwlTUEVYKG1heHB3cl9hLCBTU0JfU1BST004X01BWFBfQSwgU1NCX1NQUk9NOF9NQVhQX0FfTUFTSywgMCk7CisJU1BFWChpdHNzaV9hLCBTU0JfU1BST004X01BWFBfQSwgU1NCX1NQUk9NOF9JVFNTSV9BLAorCSAgICAgU1NCX1NQUk9NOF9JVFNTSV9BX1NISUZUKTsKKwlTUEVYKGdwaW8wLCBTU0JfU1BST004X0dQSU9BLCBTU0JfU1BST004X0dQSU9BX1AwLCAwKTsKKwlTUEVYKGdwaW8xLCBTU0JfU1BST004X0dQSU9BLCBTU0JfU1BST004X0dQSU9BX1AxLAorCSAgICAgU1NCX1NQUk9NOF9HUElPQV9QMV9TSElGVCk7CisJU1BFWChncGlvMiwgU1NCX1NQUk9NOF9HUElPQiwgU1NCX1NQUk9NOF9HUElPQl9QMiwgMCk7CisJU1BFWChncGlvMywgU1NCX1NQUk9NOF9HUElPQiwgU1NCX1NQUk9NOF9HUElPQl9QMywKKwkgICAgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQpOworCisJLyogRXh0cmFjdCB0aGUgYW50ZW5uYSBnYWluIHZhbHVlcy4gKi8KKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMCwgU1NCX1NQUk9NOF9BR0FJTjAxLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjAsIFNTQl9TUFJPTThfQUdBSU4wX1NISUZUKTsKKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMSwgU1NCX1NQUk9NOF9BR0FJTjAxLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjEsIFNTQl9TUFJPTThfQUdBSU4xX1NISUZUKTsKKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMiwgU1NCX1NQUk9NOF9BR0FJTjIzLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjIsIFNTQl9TUFJPTThfQUdBSU4yX1NISUZUKTsKKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMywgU1NCX1NQUk9NOF9BR0FJTjIzLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjMsIFNTQl9TUFJPTThfQUdBSU4zX1NISUZUKTsKKwltZW1jcHkoJm91dC0+YW50ZW5uYV9nYWluLmdoejUsICZvdXQtPmFudGVubmFfZ2Fpbi5naHoyNCwKKwkgICAgICAgc2l6ZW9mKG91dC0+YW50ZW5uYV9nYWluLmdoejUpKTsKKworCS8qIFRPRE8gLSBnZXQgcmVtYWluaW5nIHJldiA4IHN0dWZmIG5lZWRlZCAqLworfQorCiBzdGF0aWMgaW50IHNwcm9tX2V4dHJhY3Qoc3RydWN0IHNzYl9idXMgKmJ1cywgc3RydWN0IHNzYl9zcHJvbSAqb3V0LAogCQkJIGNvbnN0IHUxNiAqaW4sIHUxNiBzaXplKQogewpAQCAtNDg3LDE1ICs1MzIsMjUgQEAKIAkJb3V0LT5yZXZpc2lvbiA9IDQ7CiAJCXNwcm9tX2V4dHJhY3RfcjQ1KG91dCwgaW4pOwogCX0gZWxzZSB7Ci0JCWlmIChvdXQtPnJldmlzaW9uID09IDApCi0JCQlnb3RvIHVuc3VwcG9ydGVkOwotCQlpZiAob3V0LT5yZXZpc2lvbiA+PSAxICYmIG91dC0+cmV2aXNpb24gPD0gMykgeworCQlzd2l0Y2ggKG91dC0+cmV2aXNpb24pIHsKKwkJY2FzZSAxOgorCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCWNhc2UgNToKKwkJCXNwcm9tX2V4dHJhY3RfcjQ1KG91dCwgaW4pOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXNwcm9tX2V4dHJhY3Rfcjgob3V0LCBpbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5zdXBwb3J0ZWQgU1BST00iCisJCQkJICAgIiAgcmV2aXNpb24gJWQgZGV0ZWN0ZWQuIFdpbGwgZXh0cmFjdCIKKwkJCQkgICAiIHYxXG4iLCBvdXQtPnJldmlzaW9uKTsKIAkJCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKIAkJfQotCQlpZiAob3V0LT5yZXZpc2lvbiA9PSA0IHx8IG91dC0+cmV2aXNpb24gPT0gNSkKLQkJCXNwcm9tX2V4dHJhY3RfcjQ1KG91dCwgaW4pOwotCQlpZiAob3V0LT5yZXZpc2lvbiA+IDUpCi0JCQlnb3RvIHVuc3VwcG9ydGVkOwogCX0KIAogCWlmIChvdXQtPmJvYXJkZmxhZ3NfbG8gPT0gMHhGRkZGKQpAQCAtNTA0LDE2ICs1NTksMTIgQEAKIAkJb3V0LT5ib2FyZGZsYWdzX2hpID0gMDsgIC8qIHBlciBzcGVjcyAqLwogCiAJcmV0dXJuIDA7Ci11bnN1cHBvcnRlZDoKLQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVuc3VwcG9ydGVkIFNQUk9NIHJldmlzaW9uICVkICIKLQkJICAgImRldGVjdGVkLiBXaWxsIGV4dHJhY3QgdjFcbiIsIG91dC0+cmV2aXNpb24pOwotCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzc2JfcGNpX3Nwcm9tX2dldChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAogCQkJICAgICBzdHJ1Y3Qgc3NiX3Nwcm9tICpzcHJvbSkKIHsKKwljb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpmYWxsYmFjazsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl1MTYgKmJ1ZjsKIApAQCAtNTMzLDEyICs1ODQsMjMgQEAKIAkJYnVzLT5zcHJvbV9zaXplID0gU1NCX1NQUk9NU0laRV9XT1JEU19SNDsKIAkJc3Byb21fZG9fcmVhZChidXMsIGJ1Zik7CiAJCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhidWYsIGJ1cy0+c3Byb21fc2l6ZSk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIpIHsKKwkJCS8qIEFsbCBDUkMgYXR0ZW1wdHMgZmFpbGVkLgorCQkJICogTWF5YmUgdGhlcmUgaXMgbm8gU1BST00gb24gdGhlIGRldmljZT8KKwkJCSAqIElmIHdlIGhhdmUgYSBmYWxsYmFjaywgdXNlIHRoYXQuICovCisJCQlmYWxsYmFjayA9IHNzYl9nZXRfZmFsbGJhY2tfc3Byb20oKTsKKwkJCWlmIChmYWxsYmFjaykgeworCQkJCW1lbWNweShzcHJvbSwgZmFsbGJhY2ssIHNpemVvZigqc3Byb20pKTsKKwkJCQllcnIgPSAwOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CiAJCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldBUk5JTkc6IEludmFsaWQiCiAJCQkJICAgIiBTUFJPTSBDUkMgKGNvcnJ1cHQgU1BST00pXG4iKTsKKwkJfQogCX0KIAllcnIgPSBzcHJvbV9leHRyYWN0KGJ1cywgc3Byb20sIGJ1ZiwgYnVzLT5zcHJvbV9zaXplKTsKIAorb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3Byb20uYyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKaW5kZXggMzY2OGVkYi4uODk0MzAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3Byb20uYworKysgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCkBAIC0xNCw2ICsxNCw5IEBACiAjaW5jbHVkZSAic3NiX3ByaXZhdGUuaCIKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqZmFsbGJhY2tfc3Byb207CisKKwogc3RhdGljIGludCBzcHJvbTJoZXgoY29uc3QgdTE2ICpzcHJvbSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKIAkJICAgICBzaXplX3Qgc3Byb21fc2l6ZV93b3JkcykKIHsKQEAgLTEzMSwzICsxMzQsMzYgQEAKIAkJcmV0dXJuIHJlczsKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CisKKy8qKgorICogc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tIC0gU2V0IGEgZmFsbGJhY2sgU1BST00gZm9yIHVzZSBpZiBubyBTUFJPTSBpcyBmb3VuZC4KKyAqCisgKiBAc3Byb206IFRoZSBTUFJPTSBkYXRhIHN0cnVjdHVyZSB0byByZWdpc3Rlci4KKyAqCisgKiBXaXRoIHRoaXMgZnVuY3Rpb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmVnaXN0ZXIgYSBmYWxsYmFjaworICogU1BST00gZGF0YSBzdHJ1Y3R1cmUuIFRoZSBmYWxsYmFjayBpcyBvbmx5IHVzZWQgZm9yIFBDSSBiYXNlZCBTU0IgZGV2aWNlcywKKyAqIHdoZXJlIG5vIHZhbGlkIFNQUk9NIGNhbiBiZSBmb3VuZCBpbiB0aGUgc2hhZG93IHJlZ2lzdGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3Igd2VpcmQgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgYSBoYWxmLWFzc2VkIFNTQiBkZXZpY2UKKyAqIGhhcmR3aXJlZCB0byB0aGVpciBQQ0kgYnVzLgorICoKKyAqIE5vdGUgdGhhdCBpdCBkb2VzIG9ubHkgd29yayB3aXRoIFBDSSBhdHRhY2hlZCBTU0IgZGV2aWNlcy4gUENNQ0lBIGRldmljZXMgY3VycmVudGx5CisgKiBkb24ndCB1c2UgdGhpcyBmYWxsYmFjay4KKyAqIEFyY2hpdGVjdHVyZXMgbXVzdCBwcm92aWRlIHRoZSBTUFJPTSBmb3IgbmF0aXZlIFNTQiBkZXZpY2VzIGFueXdheSwKKyAqIHNvIHRoZSBmYWxsYmFjayBhbHNvIGlzbid0IHVzZWQgZm9yIG5hdGl2ZSBkZXZpY2VzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciBhcmNoaXRlY3R1cmUgY29kZSwgb25seS4gU28gaXQgaXMgbm90IGV4cG9ydGVkLgorICovCitpbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQoreworCWlmIChmYWxsYmFja19zcHJvbSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisJZmFsbGJhY2tfc3Byb20gPSBzcHJvbTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHZvaWQpCit7CisJcmV0dXJuIGZhbGxiYWNrX3Nwcm9tOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKaW5kZXggZWJjMzJkOC4uNTdmYTQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCkBAIC0xMzEsNiArMTMxLDcgQEAKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCiAJCQkgICAgIGludCAoKnNwcm9tX2NoZWNrX2NyYykoY29uc3QgdTE2ICpzcHJvbSwgc2l6ZV90IHNpemUpLAogCQkJICAgICBpbnQgKCpzcHJvbV93cml0ZSkoc3RydWN0IHNzYl9idXMgKmJ1cywgY29uc3QgdTE2ICpzcHJvbSkpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNzYl9nZXRfZmFsbGJhY2tfc3Byb20odm9pZCk7CiAKIAogLyogY29yZS5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IGNlNmJhZGQuLjIxMWFmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC03Myw4ICs3Myw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iZW5ldC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggOWRkY2MyYi4uNDdhNTZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMTksNyArMTksNiBAQAogb2JqLSQoQ09ORklHX09UVVMpCQkrPSBvdHVzLwogb2JqLSQoQ09ORklHX1JUMjg2MCkJCSs9IHJ0Mjg2MC8KIG9iai0kKENPTkZJR19SVDI4NzApCQkrPSBydDI4NzAvCi1vYmotJChDT05GSUdfQkVORVQpCQkrPSBiZW5ldC8KIG9iai0kKENPTkZJR19DT01FREkpCQkrPSBjb21lZGkvCiBvYmotJChDT05GSUdfQVNVU19PTEVEKQkJKz0gYXN1c19vbGVkLwogb2JqLSQoQ09ORklHX1BBTkVMKQkJKz0gcGFuZWwvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjgwNjA3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1jb25maWcgQkVORVQKLQl0cmlzdGF0ZSAiU2VydmVyRW5naW5lcyAxMEdiIE5JQyAtIEJsYWRlRW5naW5lIgotCWRlcGVuZHMgb24gUENJICYmIElORVQKLQlzZWxlY3QgSU5FVF9MUk8KLQloZWxwCi0JICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBOSUMgZnVuY3Rpb25hbGl0eSBmb3IgU2VydmVyRW5naW5lcwotCSAgMTBHYiBuZXR3b3JrIGFkYXB0ZXIgQmxhZGVFbmdpbmUgKEVDIDMyMTApLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L01BSU5UQUlORVJTIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L01BSU5UQUlORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWNlMzQwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9NQUlOVEFJTkVSUworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotU0VSVkVSIEVOR0lORVMgMTBHYmUgTklDIC0gQkxBREUtRU5HSU5FCi1QOglTdWJidSBTZWV0aGFyYW1hbgotTToJc3ViYnVzQHNlcnZlcmVuZ2luZXMuY29tCi1MOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCi1TOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYwYjkyMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBuZXR3b3JrIGRyaXZlciBmb3IgU2VydmVyRW5naW5lJ3MgQmxhZGVFbmdpbmUKLSMKLW9iai0kKENPTkZJR19CRU5FVCkgKz0gYmVuZXQubwotCi1iZW5ldC15IDo9ICBiZV9pbml0Lm8gXAotCQkJYmVfaW50Lm8gXAotCQkJYmVfbmV0aWYubyBcCi0JCQliZV9ldGh0b29sLm8gXAotCQkJZnVuY29iai5vIFwKLQkJCWNxLm8gXAotCQkJZXEubyBcCi0JCQltcHUubyBcCi0JCQlldGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUxZGZiNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotVE9ETzoKLQktIHJlbW92ZSB3cmFwcGVycyBhcm91bmQgY29tbW9uIGlvd3JpdGUgZnVuY3Rpb25zCi0JLSBmdWxsIG5ldGRldiBhdWRpdCBvZiBjb21tb24gcHJvYmxlbXMvaXNzdWVzCi0KLVBsZWFzZSBzZW5kIGFsbCBwYXRjaGVzIGFuZCBxdWVzdGlvbnMgdG8gU3ViYnUgU2VldGhhcmFtYW4KLTxzdWJidXNAc2VydmVyZW5naW5lcy5jb20+IGFuZCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2FzeW5jbWVzZy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2FzeW5jbWVzZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU3NzlhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9hc3luY21lc2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19hc3luY21lc2dfYW1hcF9oX18KLSNkZWZpbmUgX19hc3luY21lc2dfYW1hcF9oX18KLSNpbmNsdWRlICJmd2NtZF9jb21tb24uaCIKLQotLyogLS0tIEFTWU5DX0VWRU5UX0NPREVTIC0tLSAqLwotI2RlZmluZSBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUgICAgICgxKQotI2RlZmluZSBBU1lOQ19FVkVOVF9DT0RFX0lTQ1NJICAgICAgICAgICgyKQotCi0vKiAtLS0gQVNZTkNfTElOS19TVEFURVMgLS0tICovCi0jZGVmaW5lIEFTWU5DX0VWRU5UX0xJTktfRE9XTiAgICAgICAgICAgKDApCS8qIExpbmsgRG93biBvbiBhIHBvcnQgKi8KLSNkZWZpbmUgQVNZTkNfRVZFTlRfTElOS19VUCAgICAgICAgICAgICAoMSkJLyogTGluayBVcCBvbiBhIHBvcnQgKi8KLQotLyoKLSAqIFRoZSBsYXN0IDQgYnl0ZXMgb2YgdGhlIGFzeW5jIGV2ZW50cyBoYXZlIHRoaXMgY29tbW9uIGZvcm1hdC4gIEl0IGFsbG93cwotICogdGhlIGRyaXZlciB0byBkaXN0aW5ndWlzaCBbbGlua11NQ0NfQ1FfRU5UUllbL2xpbmtdIHN0cnVjdHMgZnJvbQotICogYXN5bmNocm9ub3VzIGV2ZW50cy4gIEJvdGggYXJyaXZlIG9uIHRoZSBzYW1lIGNvbXBsZXRpb24gcXVldWUuICBUaGlzCi0gKiBzdHJ1Y3R1cmUgYWxzbyBjb250YWlucyB0aGUgY29tbW9uIGZpZWxkcyB1c2VkIHRvIGRlY29kZSB0aGUgYXN5bmMgZXZlbnQuCi0gKi8KLXN0cnVjdCBCRV9BU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVAgewotCXU4IHJzdmQwWzhdOwkvKiBEV09SRCAwICovCi0JdTggZXZlbnRfY29kZVs4XTsJLyogRFdPUkQgMCAqLwotCXU4IGV2ZW50X3R5cGVbOF07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVs2XTsJLyogRFdPUkQgMCAqLwotCXU4IGFzeW5jX2V2ZW50OwkvKiBEV09SRCAwICovCi0JdTggdmFsaWQ7CQkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IEFTWU5DX0VWRU5UX1RSQUlMRVJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIEFwcGxpY2FibGUgaW4gSW5pdGlhdG9yLCBUYXJnZXQgYW5kIE5JQyBtb2Rlcy4KLSAqIEEgbGluayBzdGF0ZSBhc3luYyBldmVudCBpcyBzZWVuIGJ5IGFsbCBkZXZpY2UgZHJpdmVycyBhcyBzb29uIHRoZXkKLSAqIGNyZWF0ZSBhbiBNQ0MgcmluZy4gVGhlcmVhZnRlciwgYW55dGltZSB0aGUgbGluayBzdGF0dXMgY2hhbmdlcyB0aGUKLSAqIGRyaXZlcnMgd2lsbCByZWNlaXZlIGEgbGluayBzdGF0ZSBhc3luYyBldmVudC4gTm90aWZpY2F0aW9ucyBjb250aW51ZSB0bwotICogYmUgc2VudCB1bnRpbCBhIGRyaXZlciBkZXN0cm95cyBpdHMgTUNDIHJpbmcuIEEgbGluayBkb3duIGV2ZW50IGlzCi0gKiByZXBvcnRlZCB3aGVuIGVpdGhlciBwb3J0IGxvc2VzIGxpbmsuIEEgbGluayB1cCBldmVudCBpcyByZXBvcnRlZAotICogd2hlbiBlaXRoZXIgcG9ydCByZWdhaW5zIGxpbmsuIFdoZW4gQkUncyBmYWlsb3ZlciBtZWNoYW5pc20gaXMgZW5hYmxlZCwgYQotICogbGluayBkb3duIG9uIHRoZSBhY3RpdmUgcG9ydCBjYXVzZXMgdHJhZmZpYyB0byBiZSBkaXZlcnRlZCB0byB0aGUgc3RhbmRieQotICogcG9ydCBieSB0aGUgQkUncyBBUk0gZmlybXdhcmUgKGFzc3VtaW5nIHRoZSBzdGFuZGJ5IHBvcnQgaGFzIGxpbmspLiBJbgotICogdGhpcyBjYXNlLCB0aGUgc3RhbmR5IHBvcnQgYXNzdW1lcyB0aGUgYWN0aXZlIHN0YXR1cy4gTm90ZTogd2hlbiBsaW5rIGlzCi0gKiByZXN0b3JlZCBvbiB0aGUgZmFpbGVkIHBvcnQsIHRyYWZmaWMgY29udGludWVzIG9uIHRoZSBjdXJyZW50bHkgYWN0aXZlCi0gKiBwb3J0LiBUaGUgQVJNIGZpcm13YXJlIGRvZXMgbm90IGF0dGVtcHQgdG8gJ2ZhaWwgYmFjaycgdHJhZmZpYyB0bwotICogdGhlIHJlc3RvcmVkIHBvcnQuCi0gKi8KLXN0cnVjdCBCRV9BU1lOQ19FVkVOVF9MSU5LX1NUQVRFX0FNQVAgewotCXU4IHBvcnQwX2xpbmtfc3RhdHVzWzhdOwotCXU4IHBvcnQxX2xpbmtfc3RhdHVzWzhdOwotCXU4IGFjdGl2ZV9wb3J0WzhdOwotCXU4IHJzdmQwWzhdOwkvKiBEV09SRCAwICovCi0JdTggcG9ydDBfZHVwbGV4WzhdOwotCXU4IHBvcnQwX3NwZWVkWzhdOwotCXU4IHBvcnQxX2R1cGxleFs4XTsKLQl1OCBwb3J0MV9zcGVlZFs4XTsKLQl1OCBwb3J0MF9mYXVsdFs4XTsKLQl1OCBwb3J0MV9mYXVsdFs4XTsKLQl1OCByc3ZkMVsyXVs4XTsJLyogRFdPUkQgMiAqLwotCXN0cnVjdCBCRV9BU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVAgdHJhaWxlcjsKLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgQVNZTkNfRVZFTlRfTElOS19TVEFURV9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotI2VuZGlmIC8qIF9fYXN5bmNtZXNnX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfY20uaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9jbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ExZGZkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9jbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19iZV9jbV9hbWFwX2hfXwotI2RlZmluZSBfX2JlX2NtX2FtYXBfaF9fCi0jaW5jbHVkZSAiYmVfY29tbW9uLmgiCi0jaW5jbHVkZSAiZXR4X2NvbnRleHQuaCIKLSNpbmNsdWRlICJtcHVfY29udGV4dC5oIgotCi0vKgotICogLS0tIENFVl9XQVRFUk1BUktfRU5VTSAtLS0KLSAqIENRL0VRIFdhdGVybWFyayBFbmNvZGluZ3MuIEVuY29kZWQgYXMgbnVtYmVyIG9mIGZyZWUgZW50cmllcyBpbgotICogUXVldWUgd2hlbiBXYXRlcm1hcmsgaXMgcmVhY2hlZC4KLSAqLwotI2RlZmluZSBDRVZfV01BUktfMCAgICAgICAgKDApCS8qIFdhdGVybWFyayB3aGVuIFF1ZXVlIGZ1bGwgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzE2ICAgICAgICgxKQkvKiBXYXRlcm1hcmsgYXQgMTYgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18zMiAgICAgICAoMikJLyogV2F0ZXJtYXJrIGF0IDMyIGZyZWUgZW50cmllcyAqLwotI2RlZmluZSBDRVZfV01BUktfNDggICAgICAgKDMpCS8qIFdhdGVybWFyayBhdCA0OCBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzY0ICAgICAgICg0KQkvKiBXYXRlcm1hcmsgYXQgNjQgZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS184MCAgICAgICAoNSkJLyogV2F0ZXJtYXJrIGF0IDgwIGZyZWUgZW50cmllcyAqLwotI2RlZmluZSBDRVZfV01BUktfOTYgICAgICAgKDYpCS8qIFdhdGVybWFyayBhdCA5NiBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzExMiAgICAgICg3KQkvKiBXYXRlcm1hcmsgYXQgMTEyIGZyZWUgZW50cmllcyAqLwotI2RlZmluZSBDRVZfV01BUktfMTI4ICAgICAgKDgpCS8qIFdhdGVybWFyayBhdCAxMjggZnJlZSBlbnRyaWVzICovCi0jZGVmaW5lIENFVl9XTUFSS18xNDQgICAgICAoOSkJLyogV2F0ZXJtYXJrIGF0IDE0NCBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzE2MCAgICAgICgxMCkJLyogV2F0ZXJtYXJrIGF0IDE2MCBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzE3NiAgICAgICgxMSkJLyogV2F0ZXJtYXJrIGF0IDE3NiBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzE5MiAgICAgICgxMikJLyogV2F0ZXJtYXJrIGF0IDE5MiBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzIwOCAgICAgICgxMykJLyogV2F0ZXJtYXJrIGF0IDIwOCBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzIyNCAgICAgICgxNCkJLyogV2F0ZXJtYXJrIGF0IDIyNCBmcmVlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX1dNQVJLXzI0MCAgICAgICgxNSkJLyogV2F0ZXJtYXJrIGF0IDI0MCBmcmVlIGVudHJpZXMgKi8KLQotLyoKLSAqIC0tLSBDUV9DTlRfRU5VTSAtLS0KLSAqIENvbXBsZXRpb24gUXVldWUgQ291bnQgRW5jb2RpbmdzLgotICovCi0jZGVmaW5lIENFVl9DUV9DTlRfMjU2ICAgICAgICAgICAgICAgICAgKDApCS8qIENRIGhhcyAyNTYgZW50cmllcyAqLwotI2RlZmluZSBDRVZfQ1FfQ05UXzUxMiAgICAgICAgICAgICAgICAgICgxKQkvKiBDUSBoYXMgNTEyIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0VWX0NRX0NOVF8xMDI0ICAgICAgICAgICAgICAgICAoMikJLyogQ1EgaGFzIDEwMjQgZW50cmllcyAqLwotCi0vKgotICogLS0tIEVRX0NOVF9FTlVNIC0tLQotICogRXZlbnQgUXVldWUgQ291bnQgRW5jb2RpbmdzLgotICovCi0jZGVmaW5lIENFVl9FUV9DTlRfMjU2ICAgICAoMCkJLyogRVEgaGFzIDI1NiBlbnRyaWVzICgxNi1ieXRlIEVRRXMgb25seSkgKi8KLSNkZWZpbmUgQ0VWX0VRX0NOVF81MTIgICAgICgxKQkvKiBFUSBoYXMgNTEyIGVudHJpZXMgKDE2LWJ5dGUgRVFFcyBvbmx5KSAqLwotI2RlZmluZSBDRVZfRVFfQ05UXzEwMjQgICAgKDIpCS8qIEVRIGhhcyAxMDI0IGVudHJpZXMgKDQtYnl0ZSBvciAqLwotCQkJCS8qIDE2LWJ5dGUgRVFFcyBvbmx5KSAqLwotI2RlZmluZSBDRVZfRVFfQ05UXzIwNDggICAgKDMpCS8qIEVRIGhhcyAyMDQ4IGVudHJpZXMgKDQtYnl0ZSBvciAqLwotCQkJCS8qIDE2LWJ5dGUgRVFFcyBvbmx5KSAqLwotI2RlZmluZSBDRVZfRVFfQ05UXzQwOTYgICAgKDQpCS8qIEVRIGhhcyA0MDk2IGVudHJpZXMgKDQtYnl0ZSBFUUVzIG9ubHkpICovCi0KLS8qCi0gKiAtLS0gRVFfU0laRV9FTlVNIC0tLQotICogRXZlbnQgUXVldWUgRW50cnkgU2l6ZSBFbmNvZGluZy4KLSAqLwotI2RlZmluZSBDRVZfRVFfU0laRV80ICAgICAgICAgICAgICAgICAgICgwKQkvKiBFUUUgaXMgNCBieXRlcyAqLwotI2RlZmluZSBDRVZfRVFfU0laRV8xNiAgICAgICAgICAgICAgICAgICgxKQkvKiBFUUUgaXMgMTYgYnl0ZXMgKi8KLQotLyoKLSAqIENvbXBsZXRpb24gUXVldWUgQ29udGV4dCBUYWJsZSBFbnRyeS4gQ29udGFpbnMgdGhlIHN0YXRlIG9mIGEgQ1EuCi0gKiBMb2NhdGVkIGluIFJBTSB3aXRoaW4gdGhlIENFViBibG9jay4KLSAqLwotc3RydWN0IEJFX0NRX0NPTlRFWFRfQU1BUCB7Ci0JdTggQ2lkeFsxMV07CS8qIERXT1JEIDAgKi8KLQl1OCBXYXRlcm1hcmtbNF07CS8qIERXT1JEIDAgKi8KLQl1OCBOb0RlbGF5OwkJLyogRFdPUkQgMCAqLwotCXU4IEVQSWR4WzExXTsJLyogRFdPUkQgMCAqLwotCXU4IENvdW50WzJdOwkvKiBEV09SRCAwICovCi0JdTggdmFsaWQ7CQkvKiBEV09SRCAwICovCi0JdTggU29sRXZlbnQ7CS8qIERXT1JEIDAgKi8KLQl1OCBFdmVudGFibGU7CS8qIERXT1JEIDAgKi8KLQl1OCBQaWR4WzExXTsJLyogRFdPUkQgMSAqLwotCXU4IFBEWzEwXTsJCS8qIERXT1JEIDEgKi8KLQl1OCBFUUlEWzddOwkJLyogRFdPUkQgMSAqLwotCXU4IEZ1bmM7CQkvKiBEV09SRCAxICovCi0JdTggV01FOwkJLyogRFdPUkQgMSAqLwotCXU4IFN0YWxsZWQ7CQkvKiBEV09SRCAxICovCi0JdTggQXJtZWQ7CQkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IENRX0NPTlRFWFRfQU1BUCB7Ci0JdTMyIGR3WzJdOwotfTsKLQotLyoKLSAqIEV2ZW50IFF1ZXVlIENvbnRleHQgVGFibGUgRW50cnkuIENvbnRhaW5zIHRoZSBzdGF0ZSBvZiBhbiBFUS4KLSAqIExvY2F0ZWQgaW4gUkFNIGluIHRoZSBDRVYgYmxvY2suCi0gKi8KLXN0cnVjdCBCRV9FUV9DT05URVhUX0FNQVAgewotCXU4IENpZHhbMTNdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMl07CS8qIERXT1JEIDAgKi8KLQl1OCBGdW5jOwkJLyogRFdPUkQgMCAqLwotCXU4IEVQSWR4WzEzXTsJLyogRFdPUkQgMCAqLwotCXU4IHZhbGlkOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxOwkJLyogRFdPUkQgMCAqLwotCXU4IFNpemU7CQkvKiBEV09SRCAwICovCi0JdTggUGlkeFsxM107CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkMlszXTsJLyogRFdPUkQgMSAqLwotCXU4IFBEWzEwXTsJCS8qIERXT1JEIDEgKi8KLQl1OCBDb3VudFszXTsJLyogRFdPUkQgMSAqLwotCXU4IFNvbEV2ZW50OwkvKiBEV09SRCAxICovCi0JdTggU3RhbGxlZDsJCS8qIERXT1JEIDEgKi8KLQl1OCBBcm1lZDsJCS8qIERXT1JEIDEgKi8KLQl1OCBXYXRlcm1hcmtbNF07CS8qIERXT1JEIDIgKi8KLQl1OCBXTUU7CQkvKiBEV09SRCAyICovCi0JdTggcnN2ZDNbM107CS8qIERXT1JEIDIgKi8KLQl1OCBFdmVudFZlY3RbNl07CS8qIERXT1JEIDIgKi8KLQl1OCByc3ZkNFsyXTsJLyogRFdPUkQgMiAqLwotCXU4IERlbGF5WzhdOwkvKiBEV09SRCAyICovCi0JdTggcnN2ZDVbNl07CS8qIERXT1JEIDIgKi8KLQl1OCBUTVI7CQkvKiBEV09SRCAyICovCi0JdTggcnN2ZDY7CQkvKiBEV09SRCAyICovCi0JdTggcnN2ZDdbMzJdOwkvKiBEV09SRCAzICovCi19IF9fcGFja2VkOwotc3RydWN0IEVRX0NPTlRFWFRfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLQotI2VuZGlmIC8qIF9fYmVfY21fYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U2M2RjNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fYmVfY29tbW9uX2FtYXBfaF9fCi0jZGVmaW5lIF9fYmVfY29tbW9uX2FtYXBfaF9fCi0KLS8qIFBoeXNpY2FsIEFkZHJlc3MuICovCi1zdHJ1Y3QgQkVfUEhZU19BRERSX0FNQVAgewotCXU4IGxvWzMyXTsJCS8qIERXT1JEIDAgKi8KLQl1OCBoaVszMl07CQkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IFBIWVNfQUREUl9BTUFQIHsKLQl1MzIgZHdbMl07Ci19OwotCi0vKiBWaXJ0dWFsIEFkZHJlc3MuICovCi1zdHJ1Y3QgQkVfVklSVF9BRERSX0FNQVAgewotCXU4IGxvWzMyXTsJCS8qIERXT1JEIDAgKi8KLQl1OCBoaVszMl07CQkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IFZJUlRfQUREUl9BTUFQIHsKLQl1MzIgZHdbMl07Ci19OwotCi0vKiBTY2F0dGVyIGdhdGhlciBlbGVtZW50LiAqLwotc3RydWN0IEJFX1NHRV9BTUFQIHsKLQl1OCBhZGRyX2hpWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IGFkZHJfbG9bMzJdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAyICovCi0JdTggbGVuWzE2XTsJCS8qIERXT1JEIDMgKi8KLQl1OCByc3ZkMVsxNl07CS8qIERXT1JEIDMgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgU0dFX0FNQVAgewotCXUzMiBkd1s0XTsKLX07Ci0KLSNlbmRpZiAvKiBfX2JlX2NvbW1vbl9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9ldGh0b29sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyN2FmODUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2V0aHRvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDM0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogYmVfZXRodG9vbC5jCi0gKgotICogCVRoaXMgZmlsZSBjb250YWlucyB2YXJpb3VzIGZ1bmN0aW9ucyB0aGF0IGV0aHRvb2wgY2FuIHVzZQotICogCXRvIHRhbGsgdG8gdGhlIGRyaXZlciBhbmQgdGhlIEJFIEgvVy4KLSAqLwotCi0jaW5jbHVkZSAiYmVuZXQuaCIKLQotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIgYmVuZXRfZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0gewotLyogbmV0X2RldmljZV9zdGF0cyAqLwotCSJyeF9wYWNrZXRzIiwKLQkidHhfcGFja2V0cyIsCi0JInJ4X2J5dGVzIiwKLQkidHhfYnl0ZXMiLAotCSJyeF9lcnJvcnMiLAotCSJ0eF9lcnJvcnMiLAotCSJyeF9kcm9wcGVkIiwKLQkidHhfZHJvcHBlZCIsCi0JIm11bHRpY2FzdCIsCi0JImNvbGxpc2lvbnMiLAotCSJyeF9sZW5ndGhfZXJyb3JzIiwKLQkicnhfb3Zlcl9lcnJvcnMiLAotCSJyeF9jcmNfZXJyb3JzIiwKLQkicnhfZnJhbWVfZXJyb3JzIiwKLQkicnhfZmlmb19lcnJvcnMiLAotCSJyeF9taXNzZWRfZXJyb3JzIiwKLQkidHhfYWJvcnRlZF9lcnJvcnMiLAotCSJ0eF9jYXJyaWVyX2Vycm9ycyIsCi0JInR4X2ZpZm9fZXJyb3JzIiwKLQkidHhfaGVhcnRiZWF0X2Vycm9ycyIsCi0JInR4X3dpbmRvd19lcnJvcnMiLAotCSJyeF9jb21wcmVzc2VkIiwKLQkidGNfY29tcHJlc3NlZCIsCi0vKiBCRSBkcml2ZXIgU3RhdHMgKi8KLQkiYmVzX3R4X3JlcXMiLAotCSJiZXNfdHhfZmFpbHMiLAotCSJiZXNfZndkX3JlcXMiLAotCSJiZXNfdHhfd3JicyIsCi0JImJlc19pbnRlcnJ1cHRzIiwKLQkiYmVzX2V2ZW50cyIsCi0JImJlc190eF9ldmVudHMiLAotCSJiZXNfcnhfZXZlbnRzIiwKLQkiYmVzX3R4X2NvbXBsIiwKLQkiYmVzX3J4X2NvbXBsIiwKLQkiYmVzX2V0aHJ4X3Bvc3RfZmFpbCIsCi0JImJlc184MDJfM19kcm9wcGVkX2ZyYW1lcyIsCi0JImJlc184MDJfM19tYWxmb3JtZWRfZnJhbWVzIiwKLQkiYmVzX3J4X21pc2NfcGt0cyIsCi0JImJlc19ldGhfdHhfcmF0ZSIsCi0JImJlc19ldGhfcnhfcmF0ZSIsCi0JIk51bSBQYWNrZXRzIGNvbGxlY3RlZCIsCi0JIk51bSBUaW1lcyBGbHVzaGVkIiwKLX07Ci0KLSNkZWZpbmUgTkVUX0RFVl9TVEFUU19MRU4gXAotCShzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpL3NpemVvZih1bnNpZ25lZCBsb25nKSkKLQotI2RlZmluZSBCRU5FVF9TVEFUU19MRU4gIEFSUkFZX1NJWkUoYmVuZXRfZ3N0cmluZ3Nfc3RhdHMpCi0KLXN0YXRpYyB2b2lkCi1iZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0KLQlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgYmVfZHJpdmVyX25hbWUsIDMyKTsKLQlzdHJuY3B5KGRydmluZm8tPnZlcnNpb24sIGJlX2RydnJfdmVyLCAzMik7Ci0Jc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBiZV9md192ZXIsIDMyKTsKLQlzdHJjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpKTsKLQlkcnZpbmZvLT50ZXN0aW5mb19sZW4gPSAwOwotCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gMDsKLQlkcnZpbmZvLT5lZWR1bXBfbGVuID0gMDsKLX0KLQotc3RhdGljIGludAotYmVfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsZXNjZSkKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCi0JY29hbGVzY2UtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gYWRhcHRlci0+bWF4X3J4X2NvYWw7Ci0KLQljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3MgPSBhZGFwdGVyLT5jdXJfZXFkOwotCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoID0gYWRhcHRlci0+bWF4X2VxZDsKLQljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfbG93ID0gYWRhcHRlci0+bWluX2VxZDsKLQotCWNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPmN1cl9lcWQ7Ci0JY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2hpZ2ggPSBhZGFwdGVyLT5tYXhfZXFkOwotCWNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2Vjc19sb3cgPSBhZGFwdGVyLT5taW5fZXFkOwotCi0JY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IGFkYXB0ZXItPmVuYWJsZV9haWM7Ci0JY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9IGFkYXB0ZXItPmVuYWJsZV9haWM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNldCBpbnRlcnJ1cCBjb2FsZXNjaW5nIGRlbGF5ICphcyB3ZWxsIGFzKgotICogdGhlIG51bWJlciBvZiBwa3RzIHRvIGNvYWxlc2NlIGZvciBMUk8uCi0gKi8KLXN0YXRpYyBpbnQKLWJlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbGVzY2UpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlzdHJ1Y3QgYmVfZXFfb2JqZWN0ICplcV9vYmplY3RwOwotCXUzMiBtYXgsIG1pbiwgY3VyOwotCWludCBzdGF0dXM7Ci0KLQlhZGFwdGVyLT5tYXhfcnhfY29hbCA9IGNvYWxlc2NlLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKLQlpZiAoYWRhcHRlci0+bWF4X3J4X2NvYWwgPj0gQkVfTFJPX01BWF9QS1RTKQotCQlhZGFwdGVyLT5tYXhfcnhfY29hbCA9IEJFX0xST19NQVhfUEtUUzsKLQotCWlmIChhZGFwdGVyLT5lbmFibGVfYWljID09IDAgJiYKLQkJY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9PSAxKSB7Ci0JCS8qIGlmIEFJQyBpcyBiZWluZyB0dXJuZWQgb24gbm93LCBzdGFydCB3aXRoIGFuIEVRRCBvZiAwICovCi0JCWFkYXB0ZXItPmN1cl9lcWQgPSAwOwotCX0KLQlhZGFwdGVyLT5lbmFibGVfYWljID0gY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKLQotCS8qIHJvdW5kIG9mZiB0byBuZWFyZXN0IG11bHRpcGxlIG9mIDggKi8KLQltYXggPSAoKChjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaGlnaCArIDQpID4+IDMpIDw8IDMpOwotCW1pbiA9ICgoKGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19sb3cgKyA0KSA+PiAzKSA8PCAzKTsKLQljdXIgPSAoKChjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3MgKyA0KSA+PiAzKSA8PCAzKTsKLQotCWlmIChhZGFwdGVyLT5lbmFibGVfYWljKSB7Ci0JCS8qIGFjY2VwdCBsb3cgYW5kIGhpZ2ggaWYgQUlDIGlzIGVuYWJsZWQgKi8KLQkJaWYgKG1heCA+IE1BWF9FUUQpCi0JCQltYXggPSBNQVhfRVFEOwotCQlpZiAobWluID4gbWF4KQotCQkJbWluID0gbWF4OwotCQlhZGFwdGVyLT5tYXhfZXFkID0gbWF4OwotCQlhZGFwdGVyLT5taW5fZXFkID0gbWluOwotCQlpZiAoYWRhcHRlci0+Y3VyX2VxZCA+IG1heCkKLQkJCWFkYXB0ZXItPmN1cl9lcWQgPSBtYXg7Ci0JCWlmIChhZGFwdGVyLT5jdXJfZXFkIDwgbWluKQotCQkJYWRhcHRlci0+Y3VyX2VxZCA9IG1pbjsKLQl9IGVsc2UgewotCQkvKiBhY2NlcHQgc3BlY2lmaWVkIGNvYWxlc2NlX3VzZWNzIG9ubHkgaWYgQUlDIGlzIGRpc2FibGVkICovCi0JCWlmIChjdXIgPiBNQVhfRVFEKQotCQkJY3VyID0gTUFYX0VRRDsKLQkJZXFfb2JqZWN0cCA9ICZwbm9iLT5ldmVudF9xX29iajsKLQkJc3RhdHVzID0KLQkJICAgIGJlX2VxX21vZGlmeV9kZWxheSgmcG5vYi0+Zm5fb2JqLCAxLCAmZXFfb2JqZWN0cCwgJmN1ciwKLQkJCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCWlmIChzdGF0dXMgPT0gQkVfU1VDQ0VTUykKLQkJCWFkYXB0ZXItPmN1cl9lcWQgPSBjdXI7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGJlX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlyZXR1cm4gYWRhcHRlci0+cnhfY3N1bTsKLX0KLQotc3RhdGljIGludCBiZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBkYXRhKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0KLQlpZiAoZGF0YSkKLQkJYWRhcHRlci0+cnhfY3N1bSA9IDE7Ci0JZWxzZQotCQlhZGFwdGVyLT5yeF9jc3VtID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotYmVfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3Qgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKQotewotCXN3aXRjaCAoc3RyaW5nc2V0KSB7Ci0JY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCW1lbWNweShkYXRhLCAqYmVuZXRfZ3N0cmluZ3Nfc3RhdHMsCi0JCSAgICAgICBzaXplb2YoYmVuZXRfZ3N0cmluZ3Nfc3RhdHMpKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IGJlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXJldHVybiBCRU5FVF9TVEFUU19MRU47Ci19Ci0KLXN0YXRpYyB2b2lkCi1iZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdWludDY0X3QgKmRhdGEpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlpbnQgaTsKLQotCWJlbmV0X2dldF9zdGF0cyhuZXRkZXYpOwotCi0JZm9yIChpID0gMDsgaSA8PSBORVRfREVWX1NUQVRTX0xFTjsgaSsrKQotCQlkYXRhW2ldID0gKCh1bnNpZ25lZCBsb25nICopJmFkYXB0ZXItPmJlbmV0X3N0YXRzKVtpXTsKLQotCWRhdGFbaV0gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9yZXFzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X2ZhaWxzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX2Z3ZF9yZXFzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X3dyYnM7Ci0KLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19pbnRzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX2V2ZW50czsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc190eF9ldmVudHM7Ci0JZGF0YVtpKytdID0gYWRhcHRlci0+YmVfc3RhdC5iZXNfcnhfZXZlbnRzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X2NvbXBsOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2NvbXBsOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX2V0aHJ4X3Bvc3RfZmFpbDsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc184MDJfM19kcm9wcGVkX2ZyYW1lczsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc184MDJfM19tYWxmb3JtZWRfZnJhbWVzOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X21pc2NfcGt0czsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19ldGhfdHhfcmF0ZTsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19ldGhfcnhfcmF0ZTsKLQlkYXRhW2krK10gPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9jb2FsOwotCWRhdGFbaSsrXSA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2ZsdXNoOwotCi19Ci0KLXN0YXRpYyBpbnQgYmVfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKLXsKLQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOwotCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwotCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEdldCB0aGUgUmluZyBwYXJhbWV0ZXJzIGZyb20gdGhlIHBub2IgKi8KLXN0YXRpYyB2b2lkCi1iZV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQkvKiBQcmUgU2V0IE1heGltcyAqLwotCXJpbmctPnJ4X21heF9wZW5kaW5nID0gcG5vYi0+cnhfcV9sZW47Ci0JcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IHJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmc7Ci0JcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSByaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZzsKLQlyaW5nLT50eF9tYXhfcGVuZGluZyA9IHBub2ItPnR4X3FfbGVuOwotCi0JLyogQ3VycmVudCBoYXJkd2FyZSBTZXR0aW5ncyAgICAgICAgICAgICAgICAqLwotCXJpbmctPnJ4X3BlbmRpbmcgPSBhdG9taWNfcmVhZCgmcG5vYi0+cnhfcV9wb3N0ZWQpOwotCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IHJpbmctPnJ4X21pbmlfcGVuZGluZzsKLQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gcmluZy0+cnhfanVtYm9fcGVuZGluZzsKLQlyaW5nLT50eF9wZW5kaW5nID0gYXRvbWljX3JlYWQoJnBub2ItPnR4X3FfdXNlZCk7Ci0KLX0KLQotc3RhdGljIHZvaWQKLWJlX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVjbWQpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWJvb2wgcnhmYywgdHhmYzsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gYmVfZXRoX2dldF9mbG93X2NvbnRyb2woJnBub2ItPmZuX29iaiwgJnR4ZmMsICZyeGZjKTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBwYXVzZSBmcmFtZSBzZXR0aW5nc1xuIik7Ci0JCS8qIHJldHVybiBkZWZhdWx0cyAqLwotCQllY21kLT5yeF9wYXVzZSA9IDE7Ci0JCWVjbWQtPnR4X3BhdXNlID0gMDsKLQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHR4ZmMgPT0gdHJ1ZSkKLQkJZWNtZC0+dHhfcGF1c2UgPSAxOwotCWVsc2UKLQkJZWNtZC0+dHhfcGF1c2UgPSAwOwotCi0JaWYgKHJ4ZmMgPT0gdHJ1ZSkKLQkJZWNtZC0+cnhfcGF1c2UgPSAxOwotCWVsc2UKLQkJZWNtZC0+cnhfcGF1c2UgPSAwOwotCi0JZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotfQotCi1zdGF0aWMgaW50Ci1iZV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplY21kKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlib29sIHR4ZmMsIHJ4ZmM7Ci0JaW50IHN0YXR1czsKLQotCWlmIChlY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChlY21kLT50eF9wYXVzZSkKLQkJdHhmYyA9IHRydWU7Ci0JZWxzZQotCQl0eGZjID0gZmFsc2U7Ci0KLQlpZiAoZWNtZC0+cnhfcGF1c2UpCi0JCXJ4ZmMgPSB0cnVlOwotCWVsc2UKLQkJcnhmYyA9IGZhbHNlOwotCi0Jc3RhdHVzID0gYmVfZXRoX3NldF9mbG93X2NvbnRyb2woJnBub2ItPmZuX29iaiwgdHhmYywgcnhmYyk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIlVuYWJsZSB0byBzZXQgcGF1c2UgZnJhbWUgc2V0dGluZ3NcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9zZXR0aW5ncyA9IGJlX2dldF9zZXR0aW5ncywKLQkuZ2V0X2RydmluZm8gPSBiZV9nZXRfZHJ2aW5mbywKLQkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfY29hbGVzY2UgPSBiZV9nZXRfY29hbGVzY2UsCi0JLnNldF9jb2FsZXNjZSA9IGJlX3NldF9jb2FsZXNjZSwKLQkuZ2V0X3JpbmdwYXJhbSA9IGJlX2dldF9yaW5ncGFyYW0sCi0JLmdldF9wYXVzZXBhcmFtID0gYmVfZ2V0X3BhdXNlcGFyYW0sCi0JLnNldF9wYXVzZXBhcmFtID0gYmVfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtID0gYmVfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gYmVfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCi0JLmdldF9zdHJpbmdzID0gYmVfZ2V0X3N0cmluZ3MsCi0JLmdldF9zdGF0c19jb3VudCA9IGJlX2dldF9zdGF0c19jb3VudCwKLQkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBiZV9nZXRfZXRodG9vbF9zdGF0cywKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2luaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhMDI2Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVfaW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlICJiZW5ldC5oIgotCi0jZGVmaW5lICBEUlZSX1ZFUlNJT04gICIxLjAuNzI4IgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmVfZGV2aWNlX2lkX3RhYmxlW10gPSB7Ci0Je1BDSV9ERVZJQ0UoMHgxOWEyLCAweDAyMDEpfSwKLQl7MH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZV9kZXZpY2VfaWRfdGFibGUpOwotCi1NT0RVTEVfVkVSU0lPTihEUlZSX1ZFUlNJT04pOwotCi0jZGVmaW5lIERSVl9ERVNDUklQVElPTiAiU2VydmVyRW5naW5lcyBCbGFkZUVuZ2luZSBOZXR3b3JrIERyaXZlciBWZXJzaW9uICIKLQotTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTiBEUlZSX1ZFUlNJT04pOwotTU9EVUxFX0FVVEhPUigiU2VydmVyRW5naW5lcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IG1zaXggPSAxOwotbW9kdWxlX3BhcmFtKG1zaXgsIHVpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhtc2l4LCAiVXNlIE1TSS14IGludGVycnVwdHMiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCByeGJ1Zl9zaXplID0gMjA0ODsJLyogRGVmYXVsdCBSWCBmcmFnIHNpemUgKi8KLW1vZHVsZV9wYXJhbShyeGJ1Zl9zaXplLCB1aW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MocnhidWZfc2l6ZSwgIlNpemUgb2YgYnVmZmVycyB0byBob2xkIFJ4IGRhdGEiKTsKLQotY29uc3QgY2hhciBiZV9kcnZyX3ZlcltdID0gRFJWUl9WRVJTSU9OOwotY2hhciBiZV9md192ZXJbMzJdOwkJLyogRi9XIHZlcnNpb24gZmlsbGVkIGluIGJ5IGJlX3Byb2JlICovCi1jaGFyIGJlX2RyaXZlcl9uYW1lW10gPSAiYmVuZXQiOwotCi0vKgotICogTnVtYmVyIG9mIGVudHJpZXMgaW4gZWFjaCBxdWV1ZS4KLSAqLwotI2RlZmluZSBFVkVOVF9RX0xFTgkJMTAyNAotI2RlZmluZSBFVEhfVFhRX0xFTgkJMjA0OAotI2RlZmluZSBFVEhfVFhDUV9MRU4JCTEwMjQKLSNkZWZpbmUgRVRIX1JYUV9MRU4JCTEwMjQJLyogRG9lcyBub3Qgc3VwcG9ydCBhbnkgb3RoZXIgdmFsdWUgKi8KLSNkZWZpbmUgRVRIX1VDX1JYQ1FfTEVOCQkxMDI0Ci0jZGVmaW5lIEVUSF9CQ19SWENRX0xFTgkJMjU2Ci0jZGVmaW5lIE1DQ19RX0xFTiAgICAgICAgICAgICAgIDY0CS8qIHRvdGFsIHNpemUgbm90IHRvIGV4Y2VlZCA4IHBhZ2VzICovCi0jZGVmaW5lIE1DQ19DUV9MRU4gICAgICAgICAgICAgIDI1NgotCi0vKiBCaXQgbWFzayBkZXNjcmliaW5nIGV2ZW50cyBvZiBpbnRlcmVzdCB0byBiZSB0cmFjZWQgKi8KLXVuc2lnbmVkIGludCB0cmFjZV9sZXZlbDsKLQotc3RhdGljIGludAotaW5pdF9wY2lfYmVfZnVuY3Rpb24oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXU2NCBwYTsKLQotCS8qIENTUiAqLwotCXBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOwotCWFkYXB0ZXItPmNzcl92YSA9IGlvcmVtYXBfbm9jYWNoZShwYSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSk7Ci0JaWYgKGFkYXB0ZXItPmNzcl92YSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIERvb3IgQmVsbCAqLwotCXBhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOwotCWFkYXB0ZXItPmRiX3ZhID0gaW9yZW1hcF9ub2NhY2hlKHBhLCAoMTI4ICogMTAyNCkpOwotCWlmIChhZGFwdGVyLT5kYl92YSA9PSBOVUxMKSB7Ci0JCWlvdW5tYXAoYWRhcHRlci0+Y3NyX3ZhKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogUENJICovCi0JcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7Ci0JYWRhcHRlci0+cGNpX3ZhID0gaW9yZW1hcF9ub2NhY2hlKHBhLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsKLQlpZiAoYWRhcHRlci0+cGNpX3ZhID09IE5VTEwpIHsKLQkJaW91bm1hcChhZGFwdGVyLT5jc3JfdmEpOwotCQlpb3VubWFwKGFkYXB0ZXItPmRiX3ZhKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgY29ycmVzcG9uZGluZyB0byB0aGUgRXZlbnQKLSAgIHF1ZXVlIElEIGZvciB0aGUgZ2l2ZW4gTmV0T2JqZWN0Ci0qLwotdm9pZCBiZV9lbmFibGVfZXFfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgQ1FfREJfQU1BUCBjcWRiOwotCWNxZGIuZHdbMF0gPSAwOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBldmVudCwgJmNxZGIsIDEpOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCByZWFybSwgJmNxZGIsIDEpOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBudW1fcG9wcGVkLCAmY3FkYiwgMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHFpZCwgJmNxZGIsIHBub2ItPmV2ZW50X3FfaWQpOwotCVBEX1dSSVRFKCZwbm9iLT5mbl9vYmosIGNxX2RiLCBjcWRiLmR3WzBdKTsKLX0KLQotLyoKLSAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGludGVycnVwdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBFdmVudAotICAgcXVldWUgSUQgZm9yIHRoZSBnaXZlbiBOZXRPYmplY3QKLSovCi12b2lkIGJlX2Rpc2FibGVfZXFfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgQ1FfREJfQU1BUCBjcWRiOwotCWNxZGIuZHdbMF0gPSAwOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBldmVudCwgJmNxZGIsIDEpOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCByZWFybSwgJmNxZGIsIDApOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBudW1fcG9wcGVkLCAmY3FkYiwgMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHFpZCwgJmNxZGIsIHBub2ItPmV2ZW50X3FfaWQpOwotCVBEX1dSSVRFKCZwbm9iLT5mbl9vYmosIGNxX2RiLCBjcWRiLmR3WzBdKTsKLX0KLQotLyoKLSAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGludGVycnVwdCBmcm9tIHRoZSAgbmV0d29yayBmdW5jdGlvbgotICAgIG9mIHRoZSBCbGFkZUVuZ2luZS4gVXNlIHRoZSBmdW5jdGlvbiBiZV9kaXNhYmxlX2VxX2ludHIoKQotICAgIHRvIGVuYWJsZSB0aGUgaW50ZXJydXB0IGZyb20gdGhlIGV2ZW50IHF1ZXVlIG9mIG9ubHkgb25lIHNwZWNpZmljCi0gICAgTmV0T2JqZWN0Ci0qLwotdm9pZCBiZV9lbmFibGVfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSX0FNQVAgY3RybDsKLQl1MzIgaG9zdF9pbnRyOwotCi0JY3RybC5kd1swXSA9IFBDSUNGRzFfUkVBRCgmcG5vYi0+Zm5fb2JqLCBob3N0X3RpbWVyX2ludF9jdHJsKTsKLQlob3N0X2ludHIgPSBBTUFQX0dFVF9CSVRTX1BUUihQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1IsCi0JCQkJCQkJaG9zdGludHIsIGN0cmwuZHcpOwotCWlmICghaG9zdF9pbnRyKSB7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKFBDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUiwKLQkJCWhvc3RpbnRyLCBjdHJsLmR3LCAxKTsKLQkJUENJQ0ZHMV9XUklURSgmcG5vYi0+Zm5fb2JqLCBob3N0X3RpbWVyX2ludF9jdHJsLAotCQkJY3RybC5kd1swXSk7Ci0JfQotfQotCi0vKgotICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW50ZXJydXB0IGZyb20gdGhlIG5ldHdvcmsgZnVuY3Rpb24gb2YKLSAgIHRoZSBCbGFkZUVuZ2luZS4gIFVzZSB0aGUgZnVuY3Rpb24gYmVfZGlzYWJsZV9lcV9pbnRyKCkgdG8KLSAgIGRpc2FibGUgdGhlIGludGVycnVwdCBmcm9tIHRoZSBldmVudCBxdWV1ZSBvZiBvbmx5IG9uZSBzcGVjaWZpYyBOZXRPYmplY3QKLSovCi12b2lkIGJlX2Rpc2FibGVfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQotCXN0cnVjdCBQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1JfQU1BUCBjdHJsOwotCXUzMiBob3N0X2ludHI7Ci0JY3RybC5kd1swXSA9IFBDSUNGRzFfUkVBRCgmcG5vYi0+Zm5fb2JqLCBob3N0X3RpbWVyX2ludF9jdHJsKTsKLQlob3N0X2ludHIgPSBBTUFQX0dFVF9CSVRTX1BUUihQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1IsCi0JCQkJCQkJaG9zdGludHIsIGN0cmwuZHcpOwotCWlmIChob3N0X2ludHIpIHsKLQkJQU1BUF9TRVRfQklUU19QVFIoUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSLCBob3N0aW50ciwKLQkJCWN0cmwuZHcsIDApOwotCQlQQ0lDRkcxX1dSSVRFKCZwbm9iLT5mbl9vYmosIGhvc3RfdGltZXJfaW50X2N0cmwsCi0JCQljdHJsLmR3WzBdKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYmVfZW5hYmxlX21zaXgoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGksIHJldDsKLQotCWlmICghbXNpeCkKLQkJcmV0dXJuIC0xOwotCi0JZm9yIChpID0gMDsgaSA8IEJFX01BWF9SRVFfTVNJWF9WRUNUT1JTOyBpKyspCi0JCWFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7Ci0KLQlyZXQgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLAotCQlCRV9NQVhfUkVRX01TSVhfVkVDVE9SUyk7Ci0KLQlpZiAocmV0ID09IDApCi0JCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IDE7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBiZV9yZWdpc3Rlcl9pc3Ioc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwbm9iLT5uZXRkZXY7Ci0JaW50IGludHggPSAwLCByOwotCi0JbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7Ci0JciA9IGJlX2VuYWJsZV9tc2l4KGFkYXB0ZXIpOwotCi0JaWYgKHIgPT0gMCkgewotCQlyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciwKLQkJCQliZV9pbnQsIElSUUZfU0hBUkVELCBuZXRkZXYtPm5hbWUsIG5ldGRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIk1TSVggUmVxdWVzdCBJUlEgZmFpbGVkIC0gRXJybm8gJWRcbiIsIHIpOwotCQkJaW50eCA9IDE7Ci0JCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOwotCQkJYWRhcHRlci0+bXNpeF9lbmFibGVkID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWludHggPSAxOwotCX0KLQotCWlmIChpbnR4KSB7Ci0JCXIgPSByZXF1ZXN0X2lycShuZXRkZXYtPmlycSwgYmVfaW50LCBJUlFGX1NIQVJFRCwKLQkJCQluZXRkZXYtPm5hbWUsIG5ldGRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIklOVHggUmVxdWVzdCBJUlEgZmFpbGVkIC0gRXJybm8gJWRcbiIsIHIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCWFkYXB0ZXItPmlzcl9yZWdpc3RlcmVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYmVfdW5yZWdpc3Rlcl9pc3Ioc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldnA7Ci0JaWYgKGFkYXB0ZXItPmlzcl9yZWdpc3RlcmVkKSB7Ci0JCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKLQkJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3IsIG5ldGRldik7Ci0JCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOwotCQkJYWRhcHRlci0+bXNpeF9lbmFibGVkID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBuZXRkZXYpOwotCQl9Ci0JCWFkYXB0ZXItPmlzcl9yZWdpc3RlcmVkID0gMDsKLQl9Ci19Ci0KLS8qCi0gICAgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIEZsdXNoIENvbXBsZXRpb25zIHRoYXQgYXJlIGlzc3VlZCBieSB0aGUKLSAgICBBUk0gRi9XLCB3aGVuIGEgUmVjdiBSaW5nIGlzIGRlc3Ryb3llZC4gIEEgZmx1c2ggY29tcGxldGlvbiBpcwotICAgIGlkZW50aWZpZWQgd2hlbiBhIFJ4IENPbXBsIGRlc2NyaXB0b3IgaGFzIHRoZSB0Y3Bja3N1bSBhbmQgdWRwY2tzdW0KLSAgICBzZXQgYW5kIHRoZSBwa3RzaXplIGlzIDMyLiAgVGhlc2UgY29tcGxldGlvbnMgYXJlIHJlY2VpdmVkIG9uIHRoZQotICAgIFJ4IENvbXBsZXRpb24gUXVldWUuCi0qLwotc3RhdGljIHUzMiBiZV9wcm9jZXNzX3J4X2ZsdXNoX2NtcGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQICpyeGNwOwotCXVuc2lnbmVkIGludCBpID0gMDsKLQl3aGlsZSAoKHJ4Y3AgPSBiZV9nZXRfcnhfY21wbChwbm9iKSkgIT0gTlVMTCkgewotCQliZV9ub3RpZnlfY21wbChwbm9iLCAxLCBwbm9iLT5yeF9jcV9pZCwgMSk7Ci0JCWkrKzsKLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJlX3R4X3FfY2xlYW4oc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jd2hpbGUgKGF0b21pY19yZWFkKCZwbm9iLT50eF9xX3VzZWQpKQotCQlwcm9jZXNzX29uZV90eF9jb21wbChwbm9iLCB0eF9jb21wbF9sYXN0d3JiX2lkeF9nZXQocG5vYikpOwotfQotCi1zdGF0aWMgdm9pZCBiZV9yeF9xX2NsZWFuKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWlmIChwbm9iLT5yeF9jdHh0KSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpyeF9wYWdlX2luZm87Ci0JCWZvciAoaSA9IDA7IGkgPCBwbm9iLT5yeF9xX2xlbjsgaSsrKSB7Ci0JCQlyeF9wYWdlX2luZm8gPSAmKHBub2ItPnJ4X3BhZ2VfaW5mb1tpXSk7Ci0JCQlpZiAoIXBub2ItPnJ4X3BnX3NoYXJlZCB8fCByeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0KSB7Ci0JCQkJcGNpX3VubWFwX3BhZ2UocG5vYi0+YWRhcHRlci0+cGRldiwKLQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIocnhfcGFnZV9pbmZvLCBidXMpLAotCQkJCQkgICAgICAgcG5vYi0+cnhfYnVmX3NpemUsCi0JCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJfQotCQkJaWYgKHJ4X3BhZ2VfaW5mby0+cGFnZSkKLQkJCQlwdXRfcGFnZShyeF9wYWdlX2luZm8tPnBhZ2UpOwotCQkJbWVtc2V0KHJ4X3BhZ2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8pKTsKLQkJfQotCQlwbm9iLT5yeF9wZ19pbmZvX2hkID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJlX2Rlc3Ryb3lfbmV0b2JqKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWludCBzdGF0dXM7Ci0KLQlpZiAocG5vYi0+dHhfcV9jcmVhdGVkKSB7Ci0JCXN0YXR1cyA9IGJlX2V0aF9zcV9kZXN0cm95KCZwbm9iLT50eF9xX29iaik7Ci0JCXBub2ItPnR4X3FfY3JlYXRlZCA9IDA7Ci0JfQotCi0JaWYgKHBub2ItPnJ4X3FfY3JlYXRlZCkgewotCQlzdGF0dXMgPSBiZV9ldGhfcnFfZGVzdHJveSgmcG5vYi0+cnhfcV9vYmopOwotCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCXN0YXR1cyA9IGJlX2V0aF9ycV9kZXN0cm95X29wdGlvbnMoJnBub2ItPnJ4X3Ffb2JqLCAwLAotCQkJCQkJICAgICAgTlVMTCwgTlVMTCk7Ci0JCQlCVUdfT04oc3RhdHVzKTsKLQkJfQotCQlwbm9iLT5yeF9xX2NyZWF0ZWQgPSAwOwotCX0KLQotCWJlX3Byb2Nlc3NfcnhfZmx1c2hfY21wbChwbm9iKTsKLQotCWlmIChwbm9iLT50eF9jcV9jcmVhdGVkKSB7Ci0JCXN0YXR1cyA9IGJlX2NxX2Rlc3Ryb3koJnBub2ItPnR4X2NxX29iaik7Ci0JCXBub2ItPnR4X2NxX2NyZWF0ZWQgPSAwOwotCX0KLQotCWlmIChwbm9iLT5yeF9jcV9jcmVhdGVkKSB7Ci0JCXN0YXR1cyA9IGJlX2NxX2Rlc3Ryb3koJnBub2ItPnJ4X2NxX29iaik7Ci0JCXBub2ItPnJ4X2NxX2NyZWF0ZWQgPSAwOwotCX0KLQotCWlmIChwbm9iLT5tY2NfcV9jcmVhdGVkKSB7Ci0JCXN0YXR1cyA9IGJlX21jY19yaW5nX2Rlc3Ryb3koJnBub2ItPm1jY19xX29iaik7Ci0JCXBub2ItPm1jY19xX2NyZWF0ZWQgPSAwOwotCX0KLQlpZiAocG5vYi0+bWNjX2NxX2NyZWF0ZWQpIHsKLQkJc3RhdHVzID0gYmVfY3FfZGVzdHJveSgmcG5vYi0+bWNjX2NxX29iaik7Ci0JCXBub2ItPm1jY19jcV9jcmVhdGVkID0gMDsKLQl9Ci0KLQlpZiAocG5vYi0+ZXZlbnRfcV9jcmVhdGVkKSB7Ci0JCXN0YXR1cyA9IGJlX2VxX2Rlc3Ryb3koJnBub2ItPmV2ZW50X3Ffb2JqKTsKLQkJcG5vYi0+ZXZlbnRfcV9jcmVhdGVkID0gMDsKLQl9Ci0JYmVfZnVuY3Rpb25fY2xlYW51cCgmcG5vYi0+Zm5fb2JqKTsKLX0KLQotLyoKLSAqIGZyZWUgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBwbm9iCi0gKiBDYWxsZWQgYXQgdGhlIHRpbWUgb2YgbW9kdWxlIGNsZWFudXAgYXMgd2VsbCBhIGFueSBlcnJvciBkdXJpbmcKLSAqIG1vZHVsZSBpbml0LiAgU29tZSByZXNvdXJjZXMgbWF5IGJlIHBhcnRpYWxseSBhbGxvY2F0ZWQgaW4gYSBOZXRPYmouCi0gKi8KLXN0YXRpYyB2b2lkIG5ldG9iamVjdF9jbGVhbnVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldnA7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQkJYmVfd2FpdF9uaWNfdHhfY21wbHhfY21wbChwbm9iKTsKLQkJYmVfZGlzYWJsZV9lcV9pbnRyKHBub2IpOwotCX0KLQotCWJlX3VucmVnaXN0ZXJfaXNyKGFkYXB0ZXIpOwotCi0JaWYgKGFkYXB0ZXItPnRhc2tsZXRfc3RhcnRlZCkgewotCQl0YXNrbGV0X2tpbGwoJihhZGFwdGVyLT5zdHNfaGFuZGxlcikpOwotCQlhZGFwdGVyLT50YXNrbGV0X3N0YXJ0ZWQgPSAwOwotCX0KLQlpZiAocG5vYi0+Zm5fb2JqX2NyZWF0ZWQpCi0JCWJlX2Rpc2FibGVfaW50cihwbm9iKTsKLQotCWlmIChhZGFwdGVyLT5kZXZfc3RhdGUgIT0gQkVfREVWX1NUQVRFX05PTkUpCi0JCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0KLQlpZiAocG5vYi0+Zm5fb2JqX2NyZWF0ZWQpCi0JCWJlX2Rlc3Ryb3lfbmV0b2JqKHBub2IpOwotCi0JYWRhcHRlci0+bmV0X29iaiA9IE5VTEw7Ci0JYWRhcHRlci0+bmV0ZGV2cCA9IE5VTEw7Ci0KLQliZV9yeF9xX2NsZWFuKHBub2IpOwotCWlmIChwbm9iLT5yeF9jdHh0KSB7Ci0JCWtmcmVlKHBub2ItPnJ4X3BhZ2VfaW5mbyk7Ci0JCWtmcmVlKHBub2ItPnJ4X2N0eHQpOwotCX0KLQotCWJlX3R4X3FfY2xlYW4ocG5vYik7Ci0Ja2ZyZWUocG5vYi0+dHhfY3R4dCk7Ci0KLQlpZiAocG5vYi0+bWNjX3EpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+bWNjX3Ffc2l6ZSwKLQkJCXBub2ItPm1jY19xLCBwbm9iLT5tY2NfcV9idXMpOwotCi0JaWYgKHBub2ItPm1jY193cmJfY3R4dCkKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwbm9iLT5tY2Nfd3JiX2N0eHQsCi0JCQkgICBnZXRfb3JkZXIocG5vYi0+bWNjX3dyYl9jdHh0X3NpemUpKTsKLQotCWlmIChwbm9iLT5tY2NfY3EpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+bWNjX2NxX3NpemUsCi0JCQlwbm9iLT5tY2NfY3EsIHBub2ItPm1jY19jcV9idXMpOwotCi0JaWYgKHBub2ItPmV2ZW50X3EpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+ZXZlbnRfcV9zaXplLAotCQkJcG5vYi0+ZXZlbnRfcSwgcG5vYi0+ZXZlbnRfcV9idXMpOwotCi0JaWYgKHBub2ItPnR4X2NxKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnR4X2NxX3NpemUsCi0JCQlwbm9iLT50eF9jcSwgcG5vYi0+dHhfY3FfYnVzKTsKLQotCWlmIChwbm9iLT50eF9xKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnR4X3Ffc2l6ZSwKLQkJCXBub2ItPnR4X3EsIHBub2ItPnR4X3FfYnVzKTsKLQotCWlmIChwbm9iLT5yeF9xKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnJ4X3Ffc2l6ZSwKLQkJCXBub2ItPnJ4X3EsIHBub2ItPnJ4X3FfYnVzKTsKLQotCWlmIChwbm9iLT5yeF9jcSkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5yeF9jcV9zaXplLAotCQkJcG5vYi0+cnhfY3EsIHBub2ItPnJ4X2NxX2J1cyk7Ci0KLQotCWlmIChwbm9iLT5tYl9wdHIpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+bWJfc2l6ZSwgcG5vYi0+bWJfcHRyLAotCQkJcG5vYi0+bWJfYnVzKTsKLQotCWZyZWVfbmV0ZGV2KG5ldGRldik7Ci19Ci0KLQotc3RhdGljIGludCBiZV9ub2JfcmluZ19hbGxvYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQl1MzIgc2l6ZTsKLQotCS8qIE1haWwgYm94IHJkOyBtYWlsYm94IHBvaW50ZXIgbmVlZHMgdG8gYmUgMTYgYnl0ZSBhbGlnbmVkICovCi0JcG5vYi0+bWJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTUNDX01BSUxCT1hfQU1BUCkgKyAxNjsKLQlwbm9iLT5tYl9wdHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5tYl9zaXplLAotCQkJCSZwbm9iLT5tYl9idXMpOwotCWlmICghcG5vYi0+bWJfYnVzKQotCQlyZXR1cm4gLTE7Ci0JbWVtc2V0KHBub2ItPm1iX3B0ciwgMCwgcG5vYi0+bWJfc2l6ZSk7Ci0JcG5vYi0+bWJfcmQudmEgPSBQVFJfQUxJR04ocG5vYi0+bWJfcHRyLCAxNik7Ci0JcG5vYi0+bWJfcmQucGEgPSBQVFJfQUxJR04ocG5vYi0+bWJfYnVzLCAxNik7Ci0JcG5vYi0+bWJfcmQubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBNQ0NfTUFJTEJPWF9BTUFQKTsKLQkvKgotCSAqIEV2ZW50IHF1ZXVlCi0JICovCi0JcG5vYi0+ZXZlbnRfcV9sZW4gPSBFVkVOVF9RX0xFTjsKLQlwbm9iLT5ldmVudF9xX3NpemUgPSBwbm9iLT5ldmVudF9xX2xlbiAqIHNpemVvZihzdHJ1Y3QgRVFfRU5UUllfQU1BUCk7Ci0JcG5vYi0+ZXZlbnRfcSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPmV2ZW50X3Ffc2l6ZSwKLQkJCQkmcG5vYi0+ZXZlbnRfcV9idXMpOwotCWlmICghcG5vYi0+ZXZlbnRfcV9idXMpCi0JCXJldHVybiAtMTsKLQltZW1zZXQocG5vYi0+ZXZlbnRfcSwgMCwgcG5vYi0+ZXZlbnRfcV9zaXplKTsKLQkvKgotCSAqIEV0aCBUWCBxdWV1ZQotCSAqLwotCXBub2ItPnR4X3FfbGVuID0gRVRIX1RYUV9MRU47Ci0JcG5vYi0+dHhfcV9wb3J0ID0gMDsKLQlwbm9iLT50eF9xX3NpemUgPSAgcG5vYi0+dHhfcV9sZW4gKiBzaXplb2Yoc3RydWN0IEVUSF9XUkJfQU1BUCk7Ci0JcG5vYi0+dHhfcSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnR4X3Ffc2l6ZSwKLQkJCQkmcG5vYi0+dHhfcV9idXMpOwotCWlmICghcG5vYi0+dHhfcV9idXMpCi0JCXJldHVybiAtMTsKLQltZW1zZXQocG5vYi0+dHhfcSwgMCwgcG5vYi0+dHhfcV9zaXplKTsKLQkvKgotCSAqIEV0aCBUWCBDb21wbCBxdWV1ZQotCSAqLwotCXBub2ItPnR4Y3FfbGVuID0gRVRIX1RYQ1FfTEVOOwotCXBub2ItPnR4X2NxX3NpemUgPSBwbm9iLT50eGNxX2xlbiAqIHNpemVvZihzdHJ1Y3QgRVRIX1RYX0NPTVBMX0FNQVApOwotCXBub2ItPnR4X2NxID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+dHhfY3Ffc2l6ZSwKLQkJCQkmcG5vYi0+dHhfY3FfYnVzKTsKLQlpZiAoIXBub2ItPnR4X2NxX2J1cykKLQkJcmV0dXJuIC0xOwotCW1lbXNldChwbm9iLT50eF9jcSwgMCwgcG5vYi0+dHhfY3Ffc2l6ZSk7Ci0JLyoKLQkgKiBFdGggUlggcXVldWUKLQkgKi8KLQlwbm9iLT5yeF9xX2xlbiA9IEVUSF9SWFFfTEVOOwotCXBub2ItPnJ4X3Ffc2l6ZSA9ICBwbm9iLT5yeF9xX2xlbiAqIHNpemVvZihzdHJ1Y3QgRVRIX1JYX0RfQU1BUCk7Ci0JcG5vYi0+cnhfcSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPnJ4X3Ffc2l6ZSwKLQkJCQkmcG5vYi0+cnhfcV9idXMpOwotCWlmICghcG5vYi0+cnhfcV9idXMpCi0JCXJldHVybiAtMTsKLQltZW1zZXQocG5vYi0+cnhfcSwgMCwgcG5vYi0+cnhfcV9zaXplKTsKLQkvKgotCSAqIEV0aCBVbmljYXN0IFJYIENvbXBsIHF1ZXVlCi0JICovCi0JcG5vYi0+cnhfY3FfbGVuID0gRVRIX1VDX1JYQ1FfTEVOOwotCXBub2ItPnJ4X2NxX3NpemUgPSAgcG5vYi0+cnhfY3FfbGVuICoKLQkJCXNpemVvZihzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVApOwotCXBub2ItPnJ4X2NxID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcG5vYi0+cnhfY3Ffc2l6ZSwKLQkJCQkmcG5vYi0+cnhfY3FfYnVzKTsKLQlpZiAoIXBub2ItPnJ4X2NxX2J1cykKLQkJcmV0dXJuIC0xOwotCW1lbXNldChwbm9iLT5yeF9jcSwgMCwgcG5vYi0+cnhfY3Ffc2l6ZSk7Ci0KLQkvKiBUWCByZXNvdXJjZXMgKi8KLQlzaXplID0gcG5vYi0+dHhfcV9sZW4gKiBzaXplb2Yodm9pZCAqKik7Ci0JcG5vYi0+dHhfY3R4dCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBub2ItPnR4X2N0eHQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JLyogUlggcmVzb3VyY2VzICovCi0Jc2l6ZSA9IHBub2ItPnJ4X3FfbGVuICogc2l6ZW9mKHZvaWQgKik7Ci0JcG5vYi0+cnhfY3R4dCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBub2ItPnJ4X2N0eHQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0Jc2l6ZSA9IChwbm9iLT5yeF9xX2xlbiAqIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JcG5vYi0+cnhfcGFnZV9pbmZvID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAocG5vYi0+cnhfcGFnZV9pbmZvID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWFkYXB0ZXItPmV0aF9zdGF0c3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTKSwKLQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoYWRhcHRlci0+ZXRoX3N0YXRzcCA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0JcG5vYi0+cnhfYnVmX3NpemUgPSByeGJ1Zl9zaXplOwotCXJldHVybiAwOwotfQotCi0vKgotICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGJlX25ldF9vYmplY3QgZm9yIHN1YnNlcXVlbnQKLSAgICBuZXR3b3JrIG9wZXJhdGlvbnMuCi0KLSAgICBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgZHJpdmVyICBtdXN0IGhhdmUgYWxsb2NhdGVkCi0gICAgc3BhY2UgZm9yIHRoZSBOZXRPYmplY3Qgc3RydWN0dXJlLCBpbml0aWFsaXplZCB0aGUgc3RydWN0dXJlLAotICAgIGFsbG9jYXRlZCBETUFhYmxlIG1lbW9yeSBmb3IgYWxsIHRoZSBuZXR3b3JrIHF1ZXVlcyB0aGF0IGZvcm0KLSAgICBwYXJ0IG9mIHRoZSBOZXRPYmplY3QgYW5kIHBvcHVsYXRlZCB0aGUgc3RhcnQgYWRkcmVzcyAodmlydHVhbCkKLSAgICBhbmQgbnVtYmVyIG9mIGVudHJpZXMgYWxsb2NhdGVkIGZvciBlYWNoIHF1ZXVlIGluIHRoZSBOZXRPYmplY3Qgc3RydWN0dXJlLgotCi0gICAgVGhlIGRyaXZlciBtdXN0IGFsc28gaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGhvbGQgdGhlCi0gICAgbWFpbGJveCBzdHJ1Y3R1cmUgKE1DQ19NQUlMQk9YKSBhbmQgcG9zdCB0aGUgcGh5c2ljYWwgYWRkcmVzcywKLSAgICB2aXJ0dWFsIGFkZHJlc3NlcyBhbmQgdGhlIHNpemUgb2YgdGhlIG1haWxib3ggbWVtb3J5IGluIHRoZQotICAgIE5ldE9iai5tYl9yZC4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgQkVDTElCIGZvcgotICAgIGluaXRpYWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBlbWJlZGRlZCBNQ0MgcHJvY2Vzc29yLiBCRUNMSUIKLSAgICB1c2VzIHRoZSBtYWlsYm94IHVudGlsIE1DQyByaW5ncyBhcmUgY3JlYXRlZCBmb3IgIG1vcmUgIGVmZmljaWVudAotICAgIGNvbW11bmljYXRpb24gd2l0aCB0aGUgTUNDIHByb2Nlc3Nvci4KLQotICAgIElmIHRoZSBkcml2ZXIgd2FudHMgdG8gY3JlYXRlIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlIGZvciBtb3JlCi0gICAgdGhhbiBvbmUgcHJvdGVjdGlvbiBkb21haW4sIGl0IGNhbiBjYWxsIGJlX2NyZWF0ZV9uZXRvYmooKQotICAgIG11bHRpcGxlIHRpbWVzICBvbmNlIGZvciBlYWNoIHByb3RlY3Rpb24gZG9tYWluLiAgQSBNYXhpbXVtIG9mCi0gICAgMzIgcHJvdGVjdGlvbiBkb21haW5zIGFyZSBzdXBwb3J0ZWQuCi0KLSovCi1zdGF0aWMgaW50Ci1iZV9jcmVhdGVfbmV0b2JqKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCB1OCBfX2lvbWVtICpjc3JfdmEsCi0JdTggX19pb21lbSAqZGJfdmEsIHU4IF9faW9tZW0gKnBjaV92YSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlib29sICBldmVudGFibGUgPSBmYWxzZSwgdHhfbm9fZGVsYXkgPSBmYWxzZSwgcnhfbm9fZGVsYXkgPSBmYWxzZTsKLQlzdHJ1Y3QgYmVfZXFfb2JqZWN0ICplcV9vYmplY3RwID0gTlVMTDsKLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iID0gJnBub2ItPmZuX29iajsKLQlzdHJ1Y3QgcmluZ19kZXNjIHJkOwotCXUzMiBzZXRfcnhidWZfc2l6ZTsKLQl1MzIgdHhfY21wbF93bSA9IENFVl9XTUFSS185NjsJLyogMHhmZmZmZmZmZiB0byBkaXNhYmxlICovCi0JdTMyIHJ4X2NtcGxfd20gPSBDRVZfV01BUktfMTYwOwkvKiAweGZmZmZmZmZmIHRvIGRpc2FibGUgKi8KLQl1MzIgZXFfZGVsYXkgPSAwOyAvKiBkZWxheSBpbiA4dXNlYyB1bml0cy4gMHhmZmZmZmZmZiB0byBkaXNhYmxlICovCi0KLQltZW1zZXQoJnJkLCAwLCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykpOwotCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fb2JqZWN0X2NyZWF0ZShjc3JfdmEsIGRiX3ZhLCBwY2lfdmEsCi0JCQlCRV9GVU5DVElPTl9UWVBFX05FVFdPUkssICZwbm9iLT5tYl9yZCwgcGZvYik7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQlyZXR1cm4gc3RhdHVzOwotCXBub2ItPmZuX29ial9jcmVhdGVkID0gdHJ1ZTsKLQotCWlmICh0eF9jbXBsX3dtID09IDB4ZmZmZmZmZmYpCi0JCXR4X25vX2RlbGF5ID0gdHJ1ZTsKLQlpZiAocnhfY21wbF93bSA9PSAweGZmZmZmZmZmKQotCQlyeF9ub19kZWxheSA9IHRydWU7Ci0JLyoKLQkgKiBub3cgY3JlYXRlIHRoZSBuZWNlc3NhcnkgcmluZ3MKLQkgKiBFdmVudCBRdWV1ZSBmaXJzdC4KLQkgKi8KLQlpZiAocG5vYi0+ZXZlbnRfcV9sZW4pIHsKLQkJcmQudmEgPSBwbm9iLT5ldmVudF9xOwotCQlyZC5wYSA9IHBub2ItPmV2ZW50X3FfYnVzOwotCQlyZC5sZW5ndGggPSBwbm9iLT5ldmVudF9xX3NpemU7Ci0KLQkJc3RhdHVzID0gYmVfZXFfY3JlYXRlKHBmb2IsICZyZCwgNCwgcG5vYi0+ZXZlbnRfcV9sZW4sCi0JCQkJKHUzMikgLTEsCS8qIENFVl9XTUFSS18qIG9yIC0xICovCi0JCQkJZXFfZGVsYXksCS8qIGluIDh1cyB1bml0cywgb3IgLTEgKi8KLQkJCQkmcG5vYi0+ZXZlbnRfcV9vYmopOwotCQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpCi0JCQlnb3RvIGVycm9yX3JldDsKLQkJcG5vYi0+ZXZlbnRfcV9pZCA9IHBub2ItPmV2ZW50X3Ffb2JqLmVxX2lkOwotCQlwbm9iLT5ldmVudF9xX2NyZWF0ZWQgPSAxOwotCQlldmVudGFibGUgPSB0cnVlOwotCQllcV9vYmplY3RwID0gJnBub2ItPmV2ZW50X3Ffb2JqOwotCX0KLQkvKgotCSAqIE5vdyBFdGggVHggQ29tcGwuIHF1ZXVlLgotCSAqLwotCWlmIChwbm9iLT50eGNxX2xlbikgewotCQlyZC52YSA9IHBub2ItPnR4X2NxOwotCQlyZC5wYSA9IHBub2ItPnR4X2NxX2J1czsKLQkJcmQubGVuZ3RoID0gcG5vYi0+dHhfY3Ffc2l6ZTsKLQotCQlzdGF0dXMgPSBiZV9jcV9jcmVhdGUocGZvYiwgJnJkLAotCQkJcG5vYi0+dHhjcV9sZW4gKiBzaXplb2Yoc3RydWN0IEVUSF9UWF9DT01QTF9BTUFQKSwKLQkJCWZhbHNlLAkvKiBzb2xpY3RlZCBldmVudHMsICAqLwotCQkJdHhfbm9fZGVsYXksCS8qIG5vZGVsYXkgICovCi0JCQl0eF9jbXBsX3dtLAkvKiBXYXRlcm1hcmsgZW5jb2RpbmdzICovCi0JCQllcV9vYmplY3RwLCAmcG5vYi0+dHhfY3Ffb2JqKTsKLQkJaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQkJZ290byBlcnJvcl9yZXQ7Ci0KLQkJcG5vYi0+dHhfY3FfaWQgPSBwbm9iLT50eF9jcV9vYmouY3FfaWQ7Ci0JCXBub2ItPnR4X2NxX2NyZWF0ZWQgPSAxOwotCX0KLQkvKgotCSAqIEV0aCBUeCBxdWV1ZQotCSAqLwotCWlmIChwbm9iLT50eF9xX2xlbikgewotCQlzdHJ1Y3QgYmVfZXRoX3NxX3BhcmFtZXRlcnMgZXhfcGFyYW1zID0geyAwIH07Ci0JCXUzMiB0eXBlOwotCi0JCWlmIChwbm9iLT50eF9xX3BvcnQpIHsKLQkJCS8qIFRYUSB0byBiZSBib3VuZCB0byBhIHNwZWNpZmljIHBvcnQgKi8KLQkJCXR5cGUgPSBCRV9FVEhfVFhfUklOR19UWVBFX0JPVU5EOwotCQkJZXhfcGFyYW1zLnBvcnQgPSBwbm9iLT50eF9xX3BvcnQgLSAxOwotCQl9IGVsc2UKLQkJCXR5cGUgPSBCRV9FVEhfVFhfUklOR19UWVBFX1NUQU5EQVJEOwotCi0JCXJkLnZhID0gcG5vYi0+dHhfcTsKLQkJcmQucGEgPSBwbm9iLT50eF9xX2J1czsKLQkJcmQubGVuZ3RoID0gcG5vYi0+dHhfcV9zaXplOwotCi0JCXN0YXR1cyA9IGJlX2V0aF9zcV9jcmVhdGVfZXgocGZvYiwgJnJkLAotCQkJCXBub2ItPnR4X3FfbGVuICogc2l6ZW9mKHN0cnVjdCBFVEhfV1JCX0FNQVApLAotCQkJCXR5cGUsIDIsICZwbm9iLT50eF9jcV9vYmosCi0JCQkJJmV4X3BhcmFtcywgJnBub2ItPnR4X3Ffb2JqKTsKLQotCQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpCi0JCQlnb3RvIGVycm9yX3JldDsKLQotCQlwbm9iLT50eF9xX2lkID0gcG5vYi0+dHhfcV9vYmouYmlkOwotCQlwbm9iLT50eF9xX2NyZWF0ZWQgPSAxOwotCX0KLQkvKgotCSAqIE5vdyBFdGggUnggY29tcGwuIHF1ZXVlLiAgQWx3YXlzIG5lZWRlZC4KLQkgKi8KLQlyZC52YSA9IHBub2ItPnJ4X2NxOwotCXJkLnBhID0gcG5vYi0+cnhfY3FfYnVzOwotCXJkLmxlbmd0aCA9IHBub2ItPnJ4X2NxX3NpemU7Ci0KLQlzdGF0dXMgPSBiZV9jcV9jcmVhdGUocGZvYiwgJnJkLAotCQkJcG5vYi0+cnhfY3FfbGVuICogc2l6ZW9mKHN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCksCi0JCQlmYWxzZSwJLyogc29saWN0ZWQgZXZlbnRzLCAgKi8KLQkJCXJ4X25vX2RlbGF5LAkvKiBub2RlbGF5ICAqLwotCQkJcnhfY21wbF93bSwJLyogV2F0ZXJtYXJrIGVuY29kaW5ncyAqLwotCQkJZXFfb2JqZWN0cCwgJnBub2ItPnJ4X2NxX29iaik7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQlnb3RvIGVycm9yX3JldDsKLQotCXBub2ItPnJ4X2NxX2lkID0gcG5vYi0+cnhfY3Ffb2JqLmNxX2lkOwotCXBub2ItPnJ4X2NxX2NyZWF0ZWQgPSAxOwotCi0Jc3RhdHVzID0gYmVfZXRoX3JxX3NldF9mcmFnX3NpemUocGZvYiwgcG5vYi0+cnhfYnVmX3NpemUsCi0JCQkodTMyICopICZzZXRfcnhidWZfc2l6ZSk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCWJlX2V0aF9ycV9nZXRfZnJhZ19zaXplKHBmb2IsICh1MzIgKikgJnBub2ItPnJ4X2J1Zl9zaXplKTsKLQkJaWYgKChwbm9iLT5yeF9idWZfc2l6ZSAhPSAyMDQ4KSAmJiAocG5vYi0+cnhfYnVmX3NpemUgIT0gNDA5NikKLQkJICAgICYmIChwbm9iLT5yeF9idWZfc2l6ZSAhPSA4MTkyKSkKLQkJCWdvdG8gZXJyb3JfcmV0OwotCX0gZWxzZSB7Ci0JCWlmIChwbm9iLT5yeF9idWZfc2l6ZSAhPSBzZXRfcnhidWZfc2l6ZSkKLQkJCXBub2ItPnJ4X2J1Zl9zaXplID0gc2V0X3J4YnVmX3NpemU7Ci0JfQotCS8qCi0JICogRXRoIFJYIHF1ZXVlLiBiZV9ldGhfcnFfY3JlYXRlKCkgYWx3YXlzIGFzc3VtZXMgMiBwYWdlcyBzaXplCi0JICovCi0JcmQudmEgPSBwbm9iLT5yeF9xOwotCXJkLnBhID0gcG5vYi0+cnhfcV9idXM7Ci0JcmQubGVuZ3RoID0gcG5vYi0+cnhfcV9zaXplOwotCi0Jc3RhdHVzID0gYmVfZXRoX3JxX2NyZWF0ZShwZm9iLCAmcmQsICZwbm9iLT5yeF9jcV9vYmosCi0JCQkgICAgICZwbm9iLT5yeF9jcV9vYmosICZwbm9iLT5yeF9xX29iaik7Ci0KLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpCi0JCWdvdG8gZXJyb3JfcmV0OwotCi0JcG5vYi0+cnhfcV9pZCA9IHBub2ItPnJ4X3Ffb2JqLnJpZDsKLQlwbm9iLT5yeF9xX2NyZWF0ZWQgPSAxOwotCi0JcmV0dXJuIEJFX1NVQ0NFU1M7CS8qIEFsbCByZXF1aXJlZCBxdWV1ZXMgY3JlYXRlZC4gKi8KLQotZXJyb3JfcmV0OgotCWJlX2Rlc3Ryb3lfbmV0b2JqKHBub2IpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgYmVfbm9iX3JpbmdfaW5pdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbnQgc3RhdHVzOwotCi0JcG5vYi0+ZXZlbnRfcV90bCA9IDA7Ci0KLQlwbm9iLT50eF9xX2hkID0gMDsKLQlwbm9iLT50eF9xX3RsID0gMDsKLQotCXBub2ItPnR4X2NxX3RsID0gMDsKLQotCXBub2ItPnJ4X2NxX3RsID0gMDsKLQotCW1lbXNldChwbm9iLT5ldmVudF9xLCAwLCBwbm9iLT5ldmVudF9xX3NpemUpOwotCW1lbXNldChwbm9iLT50eF9jcSwgMCwgcG5vYi0+dHhfY3Ffc2l6ZSk7Ci0JbWVtc2V0KHBub2ItPnR4X2N0eHQsIDAsIHBub2ItPnR4X3FfbGVuICogc2l6ZW9mKHZvaWQgKiopKTsKLQltZW1zZXQocG5vYi0+cnhfY3R4dCwgMCwgcG5vYi0+cnhfcV9sZW4gKiBzaXplb2Yodm9pZCAqKSk7Ci0JcG5vYi0+cnhfcGdfaW5mb19oZCA9IDA7Ci0JcG5vYi0+cnhfcV9oZCA9IDA7Ci0JYXRvbWljX3NldCgmcG5vYi0+cnhfcV9wb3N0ZWQsIDApOwotCi0Jc3RhdHVzID0gYmVfY3JlYXRlX25ldG9iaihwbm9iLCBhZGFwdGVyLT5jc3JfdmEsIGFkYXB0ZXItPmRiX3ZhLAotCQkJCWFkYXB0ZXItPnBjaV92YSk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQlyZXR1cm4gLTE7Ci0KLQliZV9wb3N0X2V0aF9yeF9idWZmcyhwbm9iKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFzeW5jIGNhbGxiYWNrIGZvciBsaW5rIHN0YXR1cyAqLwotc3RhdGljIHZvaWQKLWJlX2xpbmtfc3RhdHVzX2FzeW5jX2NhbGxiYWNrKHZvaWQgKmNvbnRleHQsIHUzMiBldmVudF9jb2RlLCB2b2lkICpldmVudCkKLXsKLQlzdHJ1Y3QgQVNZTkNfRVZFTlRfTElOS19TVEFURV9BTUFQICpsaW5rX3N0YXR1cyA9IGV2ZW50OwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dDsKLQlib29sIGxpbmtfZW5hYmxlID0gZmFsc2U7Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2I7Ci0Jc3RydWN0IEFTWU5DX0VWRU5UX1RSQUlMRVJfQU1BUCAqYXN5bmNfdHJhaWxlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXUzMiBhc3luY19ldmVudF9jb2RlLCBhc3luY19ldmVudF90eXBlLCBhY3RpdmVfcG9ydDsKLQl1MzIgcG9ydDBfbGlua19zdGF0dXMsIHBvcnQxX2xpbmtfc3RhdHVzLCBwb3J0MF9kdXBsZXgsIHBvcnQxX2R1cGxleDsKLQl1MzIgcG9ydDBfc3BlZWQsIHBvcnQxX3NwZWVkOwotCi0JaWYgKGV2ZW50X2NvZGUgIT0gQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKSB7Ci0JCS8qIE5vdCBvdXIgZXZlbnQgdG8gaGFuZGxlICovCi0JCXJldHVybjsKLQl9Ci0JYXN5bmNfdHJhaWxlciA9IChzdHJ1Y3QgQVNZTkNfRVZFTlRfVFJBSUxFUl9BTUFQICopCi0JICAgICgodTggKikgZXZlbnQgKyBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKSAtCi0JICAgICBzaXplb2Yoc3RydWN0IEFTWU5DX0VWRU5UX1RSQUlMRVJfQU1BUCkpOwotCi0JYXN5bmNfZXZlbnRfY29kZSA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX1RSQUlMRVIsIGV2ZW50X2NvZGUsCi0JCQkJCSAgICAgYXN5bmNfdHJhaWxlcik7Ci0JQlVHX09OKGFzeW5jX2V2ZW50X2NvZGUgIT0gQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKTsKLQotCXBub2IgPSBhZGFwdGVyLT5uZXRfb2JqOwotCW5ldGRldiA9IHBub2ItPm5ldGRldjsKLQotCS8qIERldGVybWluZSBpZiB0aGlzIGV2ZW50IGlzIGEgc3dpdGNoIFZMRCBvciBhIHBoeXNpY2FsIGxpbmsgZXZlbnQgKi8KLQlhc3luY19ldmVudF90eXBlID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfVFJBSUxFUiwgZXZlbnRfdHlwZSwKLQkJCQkJICAgICBhc3luY190cmFpbGVyKTsKLQlhY3RpdmVfcG9ydCA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX0xJTktfU1RBVEUsCi0JCQkJCWFjdGl2ZV9wb3J0LCBsaW5rX3N0YXR1cyk7Ci0JcG9ydDBfbGlua19zdGF0dXMgPSBBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9MSU5LX1NUQVRFLAotCQkJCQkgICAgICBwb3J0MF9saW5rX3N0YXR1cywgbGlua19zdGF0dXMpOwotCXBvcnQxX2xpbmtfc3RhdHVzID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfTElOS19TVEFURSwKLQkJCQkJICAgICAgcG9ydDFfbGlua19zdGF0dXMsIGxpbmtfc3RhdHVzKTsKLQlwb3J0MF9kdXBsZXggPSBBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9MSU5LX1NUQVRFLAotCQkJCQkgcG9ydDBfZHVwbGV4LCBsaW5rX3N0YXR1cyk7Ci0JcG9ydDFfZHVwbGV4ID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfTElOS19TVEFURSwKLQkJCQkJIHBvcnQxX2R1cGxleCwgbGlua19zdGF0dXMpOwotCXBvcnQwX3NwZWVkID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfTElOS19TVEFURSwKLQkJCQkJcG9ydDBfc3BlZWQsIGxpbmtfc3RhdHVzKTsKLQlwb3J0MV9zcGVlZCA9IEFNQVBfR0VUX0JJVFNfUFRSKEFTWU5DX0VWRU5UX0xJTktfU1RBVEUsCi0JCQkJCXBvcnQxX3NwZWVkLCBsaW5rX3N0YXR1cyk7Ci0JaWYgKGFzeW5jX2V2ZW50X3R5cGUgPT0gTlRXS19MSU5LX1RZUEVfVklSVFVBTCkgewotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19saW5rX2NoYW5nZV92aXJ0dWFsKys7Ci0JCWlmIChhZGFwdGVyLT5iZV9saW5rX3N0cy0+YWN0aXZlX3BvcnQgIT0gYWN0aXZlX3BvcnQpIHsKLQkJCWRldl9ub3RpY2UoJm5ldGRldi0+ZGV2LAotCQkJICAgICAgICJBY3RpdmUgcG9ydCBjaGFuZ2VkIGR1ZSB0byBWTEQgb24gc3dpdGNoXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9ub3RpY2UoJm5ldGRldi0+ZGV2LCAiTGluayBzdGF0dXMgdXBkYXRlXG4iKTsKLQkJfQotCi0JfSBlbHNlIHsKLQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfbGlua19jaGFuZ2VfcGh5c2ljYWwrKzsKLQkJaWYgKGFkYXB0ZXItPmJlX2xpbmtfc3RzLT5hY3RpdmVfcG9ydCAhPSBhY3RpdmVfcG9ydCkgewotCQkJZGV2X25vdGljZSgmbmV0ZGV2LT5kZXYsCi0JCQkgICAgICAgIkFjdGl2ZSBwb3J0IGNoYW5nZWQgZHVlIHRvIHBvcnQgbGluayIKLQkJCSAgICAgICAiIHN0YXR1cyBjaGFuZ2VcbiIpOwotCQl9IGVsc2UgewotCQkJZGV2X25vdGljZSgmbmV0ZGV2LT5kZXYsICJMaW5rIHN0YXR1cyB1cGRhdGVcbiIpOwotCQl9Ci0JfQotCi0JbWVtc2V0KGFkYXB0ZXItPmJlX2xpbmtfc3RzLCAwLCBzaXplb2YoYWRhcHRlci0+YmVfbGlua19zdHMpKTsKLQotCWlmICgocG9ydDBfbGlua19zdGF0dXMgPT0gQVNZTkNfRVZFTlRfTElOS19VUCkgfHwKLQkgICAgKHBvcnQxX2xpbmtfc3RhdHVzID09IEFTWU5DX0VWRU5UX0xJTktfVVApKSB7Ci0JCWlmICgoYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPT0gQkVfUE9SVF9MSU5LX0RPV04pICYmCi0JCSAgICAoYWRhcHRlci0+cG9ydDFfbGlua19zdHMgPT0gQkVfUE9SVF9MSU5LX0RPV04pKSB7Ci0JCQkvKiBFYXJsaWVyIGJvdGggdGhlIHBvcnRzIGFyZSBkb3duIFNvIGxpbmsgaXMgdXAgKi8KLQkJCWxpbmtfZW5hYmxlID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChwb3J0MF9saW5rX3N0YXR1cyA9PSBBU1lOQ19FVkVOVF9MSU5LX1VQKSB7Ci0JCQlhZGFwdGVyLT5wb3J0MF9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19VUDsKLQkJCWFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMwX2R1cGxleCA9IHBvcnQwX2R1cGxleDsKLQkJCWFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMwX3NwZWVkID0gcG9ydDBfc3BlZWQ7Ci0JCQlpZiAoYWN0aXZlX3BvcnQgPT0gTlRXS19QT1JUX0EpCi0JCQkJYWRhcHRlci0+YmVfbGlua19zdHMtPmFjdGl2ZV9wb3J0ID0gMDsKLQkJfSBlbHNlCi0JCQlhZGFwdGVyLT5wb3J0MF9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19ET1dOOwotCi0JCWlmIChwb3J0MV9saW5rX3N0YXR1cyA9PSBBU1lOQ19FVkVOVF9MSU5LX1VQKSB7Ci0JCQlhZGFwdGVyLT5wb3J0MV9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19VUDsKLQkJCWFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMxX2R1cGxleCA9IHBvcnQxX2R1cGxleDsKLQkJCWFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMxX3NwZWVkID0gcG9ydDFfc3BlZWQ7Ci0JCQlpZiAoYWN0aXZlX3BvcnQgPT0gTlRXS19QT1JUX0IpCi0JCQkJYWRhcHRlci0+YmVfbGlua19zdHMtPmFjdGl2ZV9wb3J0ID0gMTsKLQkJfSBlbHNlCi0JCQlhZGFwdGVyLT5wb3J0MV9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19ET1dOOwotCi0JCXByaW50ayhLRVJOX0lORk8gIkxpbmsgUHJvcGVydGllcyBmb3IgJXM6XG4iLCBuZXRkZXYtPm5hbWUpOwotCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJMaW5rIFByb3BlcnRpZXM6XG4iKTsKLQkJYmVfcHJpbnRfbGlua19pbmZvKGFkYXB0ZXItPmJlX2xpbmtfc3RzKTsKLQotCQlpZiAoIWxpbmtfZW5hYmxlKQotCQkJcmV0dXJuOwotCQkvKgotCQkgKiBCb3RoIHBvcnRzIHdlcmUgZG93biBwcmV2aW91c2x5LCBidXQgYXRsZWFzdCBvbmUgb2YKLQkJICogdGhlbSBoYXMgY29tZSB1cCBpZiB0aGlzIG5ldGRldmljZSdzIGNhcnJpZXIgaXMgbm90IHVwLAotCQkgKiB0aGVuIGluZGljYXRlIHRvIHN0YWNrCi0JCSAqLwotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKLQkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JLyogTm93IGJvdGggdGhlIHBvcnRzIGFyZSBkb3duLiBUZWxsIHRoZSBzdGFjayBhYm91dCBpdCAqLwotCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIkJvdGggcG9ydHMgYXJlIGRvd25cbiIpOwotCWFkYXB0ZXItPnBvcnQwX2xpbmtfc3RzID0gQkVfUE9SVF9MSU5LX0RPV047Ci0JYWRhcHRlci0+cG9ydDFfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfRE9XTjsKLQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGJlX21jY19jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2I7Ci0KLQlwbm9iID0gYWRhcHRlci0+bmV0X29iajsKLQkvKgotCSAqIENyZWF0ZSB0aGUgTUNDIHJpbmcgc28gdGhhdCBhbGwgZnVydGhlciBjb21tdW5pY2F0aW9uIHdpdGgKLQkgKiBNQ0MgY2FuIGdvIHRocnUgdGhlIHJpbmcuIHdlIGRvIHRoaXMgYXQgdGhlIGVuZCBzaW5jZQotCSAqIHdlIGRvIG5vdCB3YW50IHRvIGJlIGRlYWxpbmcgd2l0aCBpbnRlcnJ1cHRzIHVudGlsIHRoZQotCSAqIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgotCSAqLwotCXBub2ItPm1jY19xX2xlbiA9IE1DQ19RX0xFTjsKLQlwbm9iLT5tY2NfcV9zaXplID0gcG5vYi0+bWNjX3FfbGVuICogc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApOwotCXBub2ItPm1jY19xID0gIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBub2ItPm1jY19xX3NpemUsCi0JCQkJJnBub2ItPm1jY19xX2J1cyk7Ci0JaWYgKCFwbm9iLT5tY2NfcV9idXMpCi0JCXJldHVybiAtMTsKLQkvKgotCSAqIHNwYWNlIGZvciBNQ0MgV1JCIGNvbnRleHQKLQkgKi8KLQlwbm9iLT5tY2Nfd3JiX2N0eHRMZW4gPSBNQ0NfUV9MRU47Ci0JcG5vYi0+bWNjX3dyYl9jdHh0X3NpemUgPSAgcG5vYi0+bWNjX3dyYl9jdHh0TGVuICoKLQkJc2l6ZW9mKHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQpOwotCXBub2ItPm1jY193cmJfY3R4dCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAotCQlnZXRfb3JkZXIocG5vYi0+bWNjX3dyYl9jdHh0X3NpemUpKTsKLQlpZiAocG5vYi0+bWNjX3dyYl9jdHh0ID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQkvKgotCSAqIFNwYWNlIGZvciBNQ0MgY29tcGwuIHJpbmcKLQkgKi8KLQlwbm9iLT5tY2NfY3FfbGVuID0gTUNDX0NRX0xFTjsKLQlwbm9iLT5tY2NfY3Ffc2l6ZSA9IHBub2ItPm1jY19jcV9sZW4gKiBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKTsKLQlwbm9iLT5tY2NfY3EgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwbm9iLT5tY2NfY3Ffc2l6ZSwKLQkJCQkmcG5vYi0+bWNjX2NxX2J1cyk7Ci0JaWYgKCFwbm9iLT5tY2NfY3FfYnVzKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBNQ0MgcmVxdWVzdCBhbmQgY29tcGxldGlvbiByaW5nIHJlcXVpcmVkCi0gICAgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQVJNIHByb2Nlc3Nvci4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlCi0gICAgYWxsb2NhdGVkIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBNQ0MgcmluZyBhbmQgTUNDCi0gICAgY29tcGxldGlvbiByaW5nIGFuZCBwb3N0ZWQgdGhlIHZpcnR1YWwgYWRkcmVzcyBhbmQgbnVtYmVyIG9mCi0gICAgZW50cmllcyBpbiB0aGUgY29ycmVzcG9uZGluZyBtZW1iZXJzIChtY2NfcSBhbmQgbWNjX2NxKSBpbiB0aGUKLSAgICBOZXRPYmplY3Qgc3RydXR1cmUuCi0KLSAgICBXaGVuIHRoaXMgY2FsbCBpcyBjb21wbGV0ZWQsIGFsbCBmdXJ0aGVyIGNvbW11bmljYXRpb24gd2l0aAotICAgIEFSTSB3aWxsIHN3aXRjaCBmcm9tIG1haWxib3ggdG8gdGhpcyByaW5nLgotCi0gICAgcG5vYgktIFBvaW50ZXIgdG8gdGhlIE5ldE9iamVjdCBzdHJ1Y3R1cmUuIFRoaXMgTmV0T2JqZWN0IHNob3VsZAotCQkgIGhhdmUgYmVlbiBjcmVhdGVkIHVzaW5nIGEgcHJldmlvdXMgY2FsbCB0byBiZV9jcmVhdGVfbmV0b2JqKCkKLSovCi1pbnQgYmVfY3JlYXRlX21jY19yaW5ncyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgcmluZ19kZXNjIHJkOwotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IgPSAmcG5vYi0+Zm5fb2JqOwotCi0JbWVtc2V0KCZyZCwgMCwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpKTsKLQlpZiAocG5vYi0+bWNjX2NxX2xlbikgewotCQlyZC52YSA9IHBub2ItPm1jY19jcTsKLQkJcmQucGEgPSBwbm9iLT5tY2NfY3FfYnVzOwotCQlyZC5sZW5ndGggPSBwbm9iLT5tY2NfY3Ffc2l6ZTsKLQotCQlzdGF0dXMgPSBiZV9jcV9jcmVhdGUocGZvYiwgJnJkLAotCQkJcG5vYi0+bWNjX2NxX2xlbiAqIHNpemVvZihzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVApLAotCQkJZmFsc2UsCS8qIHNvbGljdGVkIGV2ZW50cywgICovCi0JCQl0cnVlLAkvKiBub2RlbGF5ICAqLwotCQkJMCwJLyogMCBXYXRlcm1hcmsgc2luY2UgTm9kZWxheSBpcyB0cnVlICovCi0JCQkmcG5vYi0+ZXZlbnRfcV9vYmosCi0JCQkmcG5vYi0+bWNjX2NxX29iaik7Ci0KLQkJaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKQotCQkJcmV0dXJuIHN0YXR1czsKLQotCQlwbm9iLT5tY2NfY3FfaWQgPSBwbm9iLT5tY2NfY3Ffb2JqLmNxX2lkOwotCQlwbm9iLT5tY2NfY3FfY3JlYXRlZCA9IDE7Ci0JfQotCWlmIChwbm9iLT5tY2NfcV9sZW4pIHsKLQkJcmQudmEgPSBwbm9iLT5tY2NfcTsKLQkJcmQucGEgPSBwbm9iLT5tY2NfcV9idXM7Ci0JCXJkLmxlbmd0aCA9IHBub2ItPm1jY19xX3NpemU7Ci0KLQkJc3RhdHVzID0gYmVfbWNjX3JpbmdfY3JlYXRlKHBmb2IsICZyZCwKLQkJCQlwbm9iLT5tY2NfcV9sZW4gKiBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCksCi0JCQkJcG5vYi0+bWNjX3dyYl9jdHh0LCBwbm9iLT5tY2Nfd3JiX2N0eHRMZW4sCi0JCQkJJnBub2ItPm1jY19jcV9vYmosICZwbm9iLT5tY2NfcV9vYmopOwotCi0JCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykKLQkJCXJldHVybiBzdGF0dXM7Ci0KLQkJcG5vYi0+bWNjX3FfY3JlYXRlZCA9IDE7Ci0JfQotCXJldHVybiBCRV9TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IGJlX21jY19pbml0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCXUzMiByOwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iOwotCi0JcG5vYiA9IGFkYXB0ZXItPm5ldF9vYmo7Ci0JbWVtc2V0KHBub2ItPm1jY19xLCAwLCBwbm9iLT5tY2NfcV9zaXplKTsKLQlwbm9iLT5tY2NfcV9oZCA9IDA7Ci0KLQltZW1zZXQocG5vYi0+bWNjX3dyYl9jdHh0LCAwLCBwbm9iLT5tY2Nfd3JiX2N0eHRfc2l6ZSk7Ci0KLQltZW1zZXQocG5vYi0+bWNjX2NxLCAwLCBwbm9iLT5tY2NfY3Ffc2l6ZSk7Ci0JcG5vYi0+bWNjX2NxX3RsID0gMDsKLQotCXIgPSBiZV9jcmVhdGVfbWNjX3JpbmdzKGFkYXB0ZXItPm5ldF9vYmopOwotCWlmIChyICE9IEJFX1NVQ0NFU1MpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2I7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0KLQlhZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWlmICghYWRhcHRlcikKLQkJcmV0dXJuOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCXBub2IgPSAoc3RydWN0IGJlX25ldF9vYmplY3QgKilhZGFwdGVyLT5uZXRfb2JqOwotCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCWlmIChwbm9iKSB7Ci0JCS8qIFVucmVnaXN0ZXIgYXN5bmMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGxpbmsgc3RhdHVzIHVwZGF0ZXMgKi8KLQkJaWYgKHBub2ItPm1jY19xX2NyZWF0ZWQpCi0JCQliZV9tY2NfYWRkX2FzeW5jX2V2ZW50X2NhbGxiYWNrKCZwbm9iLT5tY2NfcV9vYmosCi0JCQkJCQkJCU5VTEwsIE5VTEwpOwotCQluZXRvYmplY3RfY2xlYW51cChhZGFwdGVyLCBwbm9iKTsKLQl9Ci0KLQlpZiAoYWRhcHRlci0+Y3NyX3ZhKQotCQlpb3VubWFwKGFkYXB0ZXItPmNzcl92YSk7Ci0JaWYgKGFkYXB0ZXItPmRiX3ZhKQotCQlpb3VubWFwKGFkYXB0ZXItPmRiX3ZhKTsKLQlpZiAoYWRhcHRlci0+cGNpX3ZhKQotCQlpb3VubWFwKGFkYXB0ZXItPnBjaV92YSk7Ci0KLQlwY2lfcmVsZWFzZV9yZWdpb25zKGFkYXB0ZXItPnBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShhZGFwdGVyLT5wZGV2KTsKLQotCWtmcmVlKGFkYXB0ZXItPmJlX2xpbmtfc3RzKTsKLQlrZnJlZShhZGFwdGVyLT5ldGhfc3RhdHNwKTsKLQotCWlmIChhZGFwdGVyLT50aW1lcl9jdHh0LmdldF9zdGF0c190aW1lci5mdW5jdGlvbikKLQkJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnRpbWVyX2N0eHQuZ2V0X3N0YXRzX3RpbWVyKTsKLQlrZnJlZShhZGFwdGVyKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgc3ViLXN5c3RlbSB3aGVuIGl0IGZpbmRzIGEgUENJCi0gKiBkZXZpY2Ugd2l0aCBkZXYvdmVuZG9yIElEcyB0aGF0IG1hdGNoIHdpdGggb25lIG9mIG91ciBkZXZpY2VzLgotICogQWxsIG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IGJlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGRldl9pZCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OX1JFU1BPTlNFX1BBWUxPQUQgZ2V0X2Z3djsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCi0Jc3RhdHVzID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXN0YXR1cyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgYmVfZHJpdmVyX25hbWUpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXJyb3JfcGNpX3JlcTsKLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCWFkYXB0ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmVfYWRhcHRlciksIEdGUF9LRVJORUwpOwotCWlmIChhZGFwdGVyID09IE5VTEwpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9hZGFwdGVyOwotCX0KLQlhZGFwdGVyLT5kZXZfc3RhdGUgPSBCRV9ERVZfU1RBVEVfTk9ORTsKLQlhZGFwdGVyLT5wZGV2ID0gcGRldjsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7Ci0KLQlhZGFwdGVyLT5lbmFibGVfYWljID0gMTsKLQlhZGFwdGVyLT5tYXhfZXFkID0gTUFYX0VRRDsKLQlhZGFwdGVyLT5taW5fZXFkID0gMDsKLQlhZGFwdGVyLT5jdXJfZXFkID0gMDsKLQotCXN0YXR1cyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOwotCWlmICghc3RhdHVzKSB7Ci0JCWFkYXB0ZXItPmRtYV82NGJpdF9jYXAgPSB0cnVlOwotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPmRtYV82NGJpdF9jYXAgPSBmYWxzZTsKLQkJc3RhdHVzID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3Qgc2V0IFBDSSBETUEgTWFza1xuIik7Ci0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQl9Ci0KLQlzdGF0dXMgPSBpbml0X3BjaV9iZV9mdW5jdGlvbihhZGFwdGVyLCBwZGV2KTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbWFwIFBDSSBCQVJTXG4iKTsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCWJlX3RyYWNlX3NldF9sZXZlbChETF9BTFdBWVMgfCBETF9FUlIpOwotCi0JYWRhcHRlci0+YmVfbGlua19zdHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgQkVfTElOS19TVEFUVVMpLAotCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoYWRhcHRlci0+YmVfbGlua19zdHMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGZvciBsaW5rIHN0YXR1cyAiCi0JCSAgICAgICAiYnVmZmVyIGZhaWxlZFxuIik7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4cV9sb2NrKTsKLQotCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYmVfbmV0X29iamVjdCkpOwotCWlmIChuZXRkZXYgPT0gTlVMTCkgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCXBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWFkYXB0ZXItPm5ldF9vYmogPSBwbm9iOwotCWFkYXB0ZXItPm5ldGRldnAgPSBuZXRkZXY7Ci0JcG5vYi0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JcG5vYi0+bmV0ZGV2ID0gbmV0ZGV2OwotCi0Jc3RhdHVzID0gYmVfbm9iX3JpbmdfYWxsb2MoYWRhcHRlciwgcG5vYik7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQlzdGF0dXMgPSBiZV9ub2JfcmluZ19pbml0KGFkYXB0ZXIsIHBub2IpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZ290byBjbGVhbnVwOwotCi0JYmVfcnhmX21hY19hZGRyZXNzX3JlYWRfd3JpdGUoJnBub2ItPmZuX29iaiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJZmFsc2UsIGZhbHNlLCBuZXRkZXYtPmRldl9hZGRyLCBOVUxMLCBOVUxMKTsKLQotCW5ldGRldi0+aW5pdCA9ICZiZW5ldF9pbml0OwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCi0JU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmKGFkYXB0ZXItPnBkZXYtPmRldikpOwotCi0JbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmcG5vYi0+bmFwaSwgYmVfcG9sbCwgNjQpOwotCi0JLyogaWYgdGhlIHJ4X2ZyYWcgc2l6ZSBpZiAySywgb25lIHBhZ2UgaXMgc2hhcmVkIGFzIHR3byBSWCBmcmFncyAqLwotCXBub2ItPnJ4X3BnX3NoYXJlZCA9Ci0JCShwbm9iLT5yeF9idWZfc2l6ZSA8PSBQQUdFX1NJWkUgLyAyKSA/IHRydWUgOiBmYWxzZTsKLQlpZiAocG5vYi0+cnhfYnVmX3NpemUgIT0gcnhidWZfc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiQ291bGQgbm90IHNldCBSeCBidWZmZXIgc2l6ZSB0byAlZC4gVXNpbmcgJWRcbiIsCi0JCQkJICAgICAgIHJ4YnVmX3NpemUsIHBub2ItPnJ4X2J1Zl9zaXplKTsKLQkJcnhidWZfc2l6ZSA9IHBub2ItPnJ4X2J1Zl9zaXplOwotCX0KLQotCXRhc2tsZXRfaW5pdCgmKGFkYXB0ZXItPnN0c19oYW5kbGVyKSwgYmVfcHJvY2Vzc19pbnRyLAotCQkgICAgICh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOwotCWFkYXB0ZXItPnRhc2tsZXRfc3RhcnRlZCA9IDE7Ci0Jc3Bpbl9sb2NrX2luaXQoJihhZGFwdGVyLT5pbnRfbG9jaykpOwotCi0Jc3RhdHVzID0gYmVfcmVnaXN0ZXJfaXNyKGFkYXB0ZXIsIHBub2IpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZ290byBjbGVhbnVwOwotCi0JYWRhcHRlci0+cnhfY3N1bSA9IDE7Ci0JYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBCRV9MUk9fTUFYX1BLVFM7Ci0KLQltZW1zZXQoJmdldF9md3YsIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OX1JFU1BPTlNFX1BBWUxPQUQpKTsKLQlwcmludGsoS0VSTl9JTkZPICJCbGFkZUVuZ2luZSBEcml2ZXIgdmVyc2lvbjolcy4gIgotCSAgICAgICAiQ29weXJpZ2h0IFNlcnZlckVuZ2luZXMsIENvcnBvcmF0aW9uIDIwMDUgLSAyMDA4XG4iLAotCQkJICAgICAgIGJlX2RydnJfdmVyKTsKLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9nZXRfZndfdmVyc2lvbigmcG5vYi0+Zm5fb2JqLCAmZ2V0X2Z3diwgTlVMTCwKLQkJCQkJICAgIE5VTEwpOwotCWlmIChzdGF0dXMgPT0gQkVfU1VDQ0VTUykgewotCQlzdHJuY3B5KGJlX2Z3X3ZlciwgZ2V0X2Z3di5maXJtd2FyZV92ZXJzaW9uX3N0cmluZywgMzIpOwotCQlwcmludGsoS0VSTl9JTkZPICJCbGFkZUVuZ2luZSBGaXJtd2FyZSBWZXJzaW9uOiVzXG4iLAotCQkgICAgICAgZ2V0X2Z3di5maXJtd2FyZV92ZXJzaW9uX3N0cmluZyk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGdldCBCRSBGaXJtd2FyZSBWZXJzaW9uXG4iKTsKLQl9Ci0KLQlzZW1hX2luaXQoJmFkYXB0ZXItPmdldF9ldGhfc3RhdF9zZW0sIDApOwotCWluaXRfdGltZXIoJmFkYXB0ZXItPnRpbWVyX2N0eHQuZ2V0X3N0YXRzX3RpbWVyKTsKLQlhdG9taWNfc2V0KCZhZGFwdGVyLT50aW1lcl9jdHh0LmdldF9zdGF0X2ZsYWcsIDApOwotCWFkYXB0ZXItPnRpbWVyX2N0eHQuZ2V0X3N0YXRzX3RpbWVyLmZ1bmN0aW9uID0KLQkgICAgJmJlX2dldF9zdGF0c190aW1lcl9oYW5kbGVyOwotCi0Jc3RhdHVzID0gYmVfbWNjX2NyZWF0ZShhZGFwdGVyKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCXN0YXR1cyA9IGJlX21jY19pbml0KGFkYXB0ZXIpOwotCWlmIChzdGF0dXMgPCAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQotCXN0YXR1cyA9IGJlX21jY19hZGRfYXN5bmNfZXZlbnRfY2FsbGJhY2soJmFkYXB0ZXItPm5ldF9vYmotPm1jY19xX29iaiwKLQkJCSBiZV9saW5rX3N0YXR1c19hc3luY19jYWxsYmFjaywgKHZvaWQgKilhZGFwdGVyKTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWRkX2FzeW5jX2V2ZW50X2NhbGxiYWNrIGZhaWxlZCIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTGluayBzdGF0dXMgY2hhbmdlcyBtYXkgbm90IGJlIHJlZmxlY3RlZFxuIik7Ci0JfQotCi0Jc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIGNsZWFudXA7Ci0JYmVfdXBkYXRlX2xpbmtfc3RhdHVzKGFkYXB0ZXIpOwotCWFkYXB0ZXItPmRldl9zdGF0ZSA9IEJFX0RFVl9TVEFURV9JTklUOwotCXJldHVybiAwOwotCi1jbGVhbnVwOgotCWJlX3JlbW92ZShwZGV2KTsKLQlyZXR1cm4gc3RhdHVzOwotZXJyb3JfYWRhcHRlcjoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotZXJyb3JfcGNpX3JlcToKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci1lcnJvcjoKLQlwcmludGsoS0VSTl9FUlIgIkJsYWRlRW5naW5lIGluaXRhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogR2V0IHRoZSBjdXJyZW50IGxpbmsgc3RhdHVzIGFuZCBwcmludCB0aGUgc3RhdHVzIG9uIGNvbnNvbGUKLSAqLwotdm9pZCBiZV91cGRhdGVfbGlua19zdGF0dXMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IGFkYXB0ZXItPm5ldF9vYmo7Ci0KLQlzdGF0dXMgPSBiZV9yeGZfbGlua19zdGF0dXMoJnBub2ItPmZuX29iaiwgYWRhcHRlci0+YmVfbGlua19zdHMsIE5VTEwsCi0JCQlOVUxMLCBOVUxMKTsKLQlpZiAoc3RhdHVzID09IEJFX1NVQ0NFU1MpIHsKLQkJaWYgKGFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMwX3NwZWVkICYmCi0JCSAgICBhZGFwdGVyLT5iZV9saW5rX3N0cy0+bWFjMF9kdXBsZXgpCi0JCQlhZGFwdGVyLT5wb3J0MF9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19VUDsKLQkJZWxzZQotCQkJYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPSBCRV9QT1JUX0xJTktfRE9XTjsKLQotCQlpZiAoYWRhcHRlci0+YmVfbGlua19zdHMtPm1hYzFfc3BlZWQgJiYKLQkJICAgIGFkYXB0ZXItPmJlX2xpbmtfc3RzLT5tYWMxX2R1cGxleCkKLQkJCWFkYXB0ZXItPnBvcnQxX2xpbmtfc3RzID0gQkVfUE9SVF9MSU5LX1VQOwotCQllbHNlCi0JCQlhZGFwdGVyLT5wb3J0MV9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19ET1dOOwotCi0JCWRldl9pbmZvKCZwbm9iLT5uZXRkZXYtPmRldiwgIkxpbmsgUHJvcGVydGllczpcbiIpOwotCQliZV9wcmludF9saW5rX2luZm8oYWRhcHRlci0+YmVfbGlua19zdHMpOwotCQlyZXR1cm47Ci0JfQotCWRldl9pbmZvKCZwbm9iLT5uZXRkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgbGluayBzdGF0dXNcbiIpOwotCXJldHVybjsKLX0KLQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdm9pZAotYmVfcG1fY2xlYW51cChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkgICAgICBzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQotCWJlX3dhaXRfbmljX3R4X2NtcGx4X2NtcGwocG5vYik7Ci0JYmVfZGlzYWJsZV9lcV9pbnRyKHBub2IpOwotCi0JaWYgKGFkYXB0ZXItPnRhc2tsZXRfc3RhcnRlZCkgewotCQl0YXNrbGV0X2tpbGwoJmFkYXB0ZXItPnN0c19oYW5kbGVyKTsKLQkJYWRhcHRlci0+dGFza2xldF9zdGFydGVkID0gMDsKLQl9Ci0KLQliZV91bnJlZ2lzdGVyX2lzcihhZGFwdGVyKTsKLQliZV9kaXNhYmxlX2ludHIocG5vYik7Ci0KLQliZV90eF9xX2NsZWFuKHBub2IpOwotCWJlX3J4X3FfY2xlYW4ocG5vYik7Ci0KLQliZV9kZXN0cm95X25ldG9iaihwbm9iKTsKLX0KLQotc3RhdGljIGludCBiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9ICBhZGFwdGVyLT5uZXRkZXZwOwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWFkYXB0ZXItPmRldl9wbV9zdGF0ZSA9IGFkYXB0ZXItPmRldl9zdGF0ZTsKLQlhZGFwdGVyLT5kZXZfc3RhdGUgPSBCRV9ERVZfU1RBVEVfU1VTUEVORDsKLQotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQliZV9wbV9jbGVhbnVwKGFkYXB0ZXIsIHBub2IsIG5ldGRldik7Ci0KLQlwY2lfZW5hYmxlX3dha2UocGRldiwgMywgMSk7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIDQsIDEpOwkvKiBEMyBDb2xkID0gNCAqLwotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYmVfdXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBhZGFwdGVyLT5uZXRfb2JqOwotCi0JaWYgKHBub2ItPm51bV92bGFucyAhPSAwKQotCQliZV9yeGZfdmxhbl9jb25maWcoJnBub2ItPmZuX29iaiwgZmFsc2UsIHBub2ItPm51bV92bGFucywKLQkJCXBub2ItPnZsYW5fdGFnLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotfQotCi1zdGF0aWMgaW50IGJlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gIGFkYXB0ZXItPm5ldGRldnA7Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwotCi0Jc3RhdHVzID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIDMsIDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCA0LCAwKTsJLyogNCBpcyBEMyBjb2xkICovCi0KLQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJYmVfcnhmX21hY19hZGRyZXNzX3JlYWRfd3JpdGUoJnBub2ItPmZuX29iaiwgZmFsc2UsIGZhbHNlLAotCQkJZmFsc2UsIHRydWUsIGZhbHNlLCBuZXRkZXYtPmRldl9hZGRyLCBOVUxMLCBOVUxMKTsKLQotCQlzdGF0dXMgPSBiZV9ub2JfcmluZ19pbml0KGFkYXB0ZXIsIHBub2IpOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCXJldHVybiBzdGF0dXM7Ci0KLQkJdGFza2xldF9pbml0KCYoYWRhcHRlci0+c3RzX2hhbmRsZXIpLCBiZV9wcm9jZXNzX2ludHIsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOwotCQlhZGFwdGVyLT50YXNrbGV0X3N0YXJ0ZWQgPSAxOwotCi0JCWlmIChiZV9yZWdpc3Rlcl9pc3IoYWRhcHRlciwgcG5vYikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJiZV9yZWdpc3Rlcl9pc3IgZmFpbGVkXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCi0JCXN0YXR1cyA9IGJlX21jY19pbml0KGFkYXB0ZXIpOwotCQlpZiAoc3RhdHVzIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJiZV9tY2NfaW5pdCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQliZV91cGRhdGVfbGlua19zdGF0dXMoYWRhcHRlcik7Ci0JCS8qCi0JCSAqIFJlZ2lzdGVyIGFzeW5jIGNhbGwgYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgbGluawotCQkgKiBzdGF0dXMgdXBkYXRlcwotCQkgKi8KLQkJc3RhdHVzID0gYmVfbWNjX2FkZF9hc3luY19ldmVudF9jYWxsYmFjaygKLQkJCQkmYWRhcHRlci0+bmV0X29iai0+bWNjX3Ffb2JqLAotCQkJCWJlX2xpbmtfc3RhdHVzX2FzeW5jX2NhbGxiYWNrLCAodm9pZCAqKWFkYXB0ZXIpOwotCQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFkZF9hc3luY19ldmVudF9jYWxsYmFjayBmYWlsZWQiKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiTGluayBzdGF0dXMgY2hhbmdlcyBtYXkgbm90IGJlIHJlZmxlY3RlZFxuIik7Ci0JCX0KLQkJYmVfZW5hYmxlX2ludHIocG5vYik7Ci0JCWJlX2VuYWJsZV9lcV9pbnRyKHBub2IpOwotCQliZV91cChhZGFwdGVyKTsKLQl9Ci0JbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwotCWFkYXB0ZXItPmRldl9zdGF0ZSA9IGFkYXB0ZXItPmRldl9wbV9zdGF0ZTsKLQlyZXR1cm4gMDsKLQotfQotCi0jZW5kaWYKLQotLyogV2FpdCB1bnRpbCBubyBtb3JlIHBlbmRpbmcgdHJhbnNtaXRzICAqLwotdm9pZCBiZV93YWl0X25pY190eF9jbXBseF9jbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWludCBpOwotCi0JLyogV2FpdCBmb3IgMjB1cyAqIDUwMDAwICg9IDFzKSBhbmQgbm8gbW9yZSAqLwotCWkgPSAwOwotCXdoaWxlICgocG5vYi0+dHhfcV90bCAhPSBwbm9iLT50eF9xX2hkKSAmJiAoaSA8IDUwMDAwKSkgewotCQkrK2k7Ci0JCXVkZWxheSgyMCk7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIG5vIG1vcmUgcGVuZGluZyB0cmFuc21pdHMgKi8KLQlpZiAoaSA+PSA1MDAwMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiRGlkIG5vdCByZWNlaXZlIGNvbXBsZXRpb25zIGZvciBhbGwgVFggcmVxdWVzdHNcbiIpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJlX2RyaXZlciA9IHsKLQkubmFtZSA9IGJlX2RyaXZlcl9uYW1lLAotCS5pZF90YWJsZSA9IGJlX2RldmljZV9pZF90YWJsZSwKLQkucHJvYmUgPSBiZV9wcm9iZSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9IGJlX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGJlX3Jlc3VtZSwKLSNlbmRpZgotCS5yZW1vdmUgPSBiZV9yZW1vdmUKLX07Ci0KLS8qCi0gKiBNb2R1bGUgaW5pdCBlbnRyeSBwb2ludC4gUmVnaXN0ZXJzIG91ciBvdXIgZGV2aWNlIGFuZCByZXR1cm4uCi0gKiBPdXIgcHJvYmUgd2lsbCBiZSBjYWxsZWQgaWYgdGhlIGRldmljZSBpcyBmb3VuZC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYmVfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKHJ4YnVmX3NpemUgIT0gODE5MiAmJiByeGJ1Zl9zaXplICE9IDQwOTYgJiYgcnhidWZfc2l6ZSAhPSAyMDQ4KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJVbnN1cHBvcnRlZCByZWNlaXZlIGJ1ZmZlciBzaXplICglZCkgcmVxdWVzdGVkXG4iLAotCQkgICAgICAgcnhidWZfc2l6ZSk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJNdXN0IGJlIDIwNDgsIDQwOTYgb3IgODE5Mi4gRGVmYXVsdGluZyB0byAyMDQ4XG4iKTsKLQkJcnhidWZfc2l6ZSA9IDIwNDg7Ci0JfQotCi0JcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVfZHJpdmVyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLW1vZHVsZV9pbml0KGJlX2luaXRfbW9kdWxlKTsKLQotLyoKLSAqIGJlX2V4aXRfbW9kdWxlIC0gRHJpdmVyIEV4aXQgQ2xlYW51cCBSb3V0aW5lCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBiZV9leGl0X21vZHVsZSh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmVfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2V4aXQoYmVfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2ludC5jIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX2ludC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmE5NWQwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9pbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+Ci0KLSNpbmNsdWRlICJiZW5ldC5oIgotCi0vKiBudW1iZXIgb2YgYnl0ZXMgb2YgUlggZnJhbWUgdGhhdCBhcmUgY29waWVkIHRvIHNrYi0+ZGF0YSAqLwotI2RlZmluZSBCRV9IRFJfTEVOIDY0Ci0KLSNkZWZpbmUgTkVUSUZfUlgoc2tiKSBuZXRpZl9yZWNlaXZlX3NrYihza2IpCi0jZGVmaW5lIFZMQU5fQUNDRUxfUlgoc2tiLCBwbm9iLCB2dCkgXAotCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBwbm9iLT52bGFuX2dycCwgdnQpCi0KLS8qCi0gICAgVGhpcyBmdW5jdGlvbiBub3RpZmllcyBCbGFkZUVuZ2luZSBvZiB0aGUgbnVtYmVyIG9mIGNvbXBsZXRpb24KLSAgICBlbnRyaWVzIHByb2Nlc3NlZCBmcm9tIHRoZSBzcGVjaWZpZWQgY29tcGxldGlvbiBxdWV1ZSBieSB3cml0aW5nCi0gICAgdGhlIG51bWJlciBvZiBwb3BwZWQgZW50cmllcyB0byB0aGUgZG9vciBiZWxsLgotCi0gICAgcG5vYgktIFBvaW50ZXIgdG8gdGhlIE5ldE9iamVjdCBzdHJ1Y3R1cmUKLSAgICBuCQktIE51bWJlciBvZiBjb21wbGV0aW9uIGVudHJpZXMgcHJvY2Vzc2VkCi0gICAgY3FfaWQJLSBRdWV1ZSBJRCBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBmb3Igd2hpY2ggbm90aWZpY2F0aW9uCi0JCQlpcyBiZWluZyBkb25lLgotICAgIHJlX2FybQktIDEgIC0gcmVhcm0gdGhlIGNvbXBsZXRpb24gcmluZyB0byBnZW5lcmF0ZSBhbiBldmVudC4KLQkJLSAwICAtIGRvbnQgcmVhcm0gdGhlIGNvbXBsZXRpb24gcmluZyB0byBnZW5lcmF0ZSBhbiBldmVudAotKi8KLXZvaWQgYmVfbm90aWZ5X2NtcGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIGludCBuLCBpbnQgY3FfaWQsIGludCByZV9hcm0pCi17Ci0Jc3RydWN0IENRX0RCX0FNQVAgY3FkYjsKLQotCWNxZGIuZHdbMF0gPSAwOwotCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCBxaWQsICZjcWRiLCBjcV9pZCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHJlYXJtLCAmY3FkYiwgcmVfYXJtKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgbnVtX3BvcHBlZCwgJmNxZGIsIG4pOwotCVBEX1dSSVRFKCZwbm9iLT5mbl9vYmosIGNxX2RiLCBjcWRiLmR3WzBdKTsKLX0KLQotLyoKLSAqIGFkZHMgYWRkaXRpb25hbCByZWNlaXZlIGZyYWdzIGluZGljYXRlZCBieSBCRSBzdGFydGluZyBmcm9tIGdpdmVuCi0gKiBmcmFnIGluZGV4IChmaSkgdG8gc3BlY2lmaWVkIHNrYidzIGZyYWcgbGlzdAotICovCi1zdGF0aWMgdm9pZAotYWRkX3NrYl9mcmFncyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgICAgICB1MzIgbnJlc2lkLCB1MzIgZmkpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXUzMiBza19mcmFnX2lkeCwgbjsKLQlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpyeF9wYWdlX2luZm87Ci0JdTMyIGZyYWdfc3ogPSBwbm9iLT5yeF9idWZfc2l6ZTsKLQotCXNrX2ZyYWdfaWR4ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQl3aGlsZSAobnJlc2lkKSB7Ci0JCWluZGV4X2luYygmZmksIHBub2ItPnJ4X3FfbGVuKTsKLQotCQlyeF9wYWdlX2luZm8gPSAoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqKXBub2ItPnJ4X2N0eHRbZmldOwotCQlwbm9iLT5yeF9jdHh0W2ZpXSA9IE5VTEw7Ci0JCWlmICgocnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCkgfHwKLQkJICAgIChwbm9iLT5yeF9wZ19zaGFyZWQgPT0gZmFsc2UpKSB7Ci0JCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihyeF9wYWdlX2luZm8sIGJ1cyksCi0JCQkJICAgICAgIGZyYWdfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCX0KLQotCQluID0gbWluKG5yZXNpZCwgZnJhZ19zeik7Ci0JCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbc2tfZnJhZ19pZHhdLnBhZ2UgPSByeF9wYWdlX2luZm8tPnBhZ2U7Ci0JCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbc2tfZnJhZ19pZHhdLnBhZ2Vfb2Zmc2V0Ci0JCSAgICA9IHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7Ci0JCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbc2tfZnJhZ19pZHhdLnNpemUgPSBuOwotCi0JCXNrX2ZyYWdfaWR4Kys7Ci0JCXNrYi0+bGVuICs9IG47Ci0JCXNrYi0+ZGF0YV9sZW4gKz0gbjsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCQlucmVzaWQgLT0gbjsKLQotCQltZW1zZXQocnhfcGFnZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbykpOwotCQlhdG9taWNfZGVjKCZwbm9iLT5yeF9xX3Bvc3RlZCk7Ci0JfQotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgaW5jb21pbmcgbmljIHBhY2tldHMgb3ZlciB2YXJpb3VzIFJ4IHF1ZXVlcy4KLSAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGFkYXB0ZXIsIHRoZSBjdXJyZW50IFJ4IHN0YXR1cyBkZXNjcmlwdG9yCi0gKiBlbnRyeSBhbmQgdGhlIFJ4IGNvbXBsZXRpb24gcXVldWUgSUQgYXMgYXJndW1lbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHByb2Nlc3NfbmljX3J4X2NvbXBsZXRpb24oc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsCi0JCQkJCSAgICBzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVAgKnJ4Y3ApCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHVkcGNrc20sIHRjcGNrc207Ci0JaW50IG47Ci0JdTMyIG5yZXNpZCwgZmk7Ci0JdTMyIGZyYWdfc3ogPSBwbm9iLT5yeF9idWZfc2l6ZTsKLQl1OCAqdmE7Ci0Jc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcnhfcGFnZV9pbmZvOwotCXUzMiBudW1mcmFncywgdnRwLCB2dG0sIHZsYW5fdGFnLCBwa3RzaXplOwotCi0JZmkgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIGZyYWduZHgsIHJ4Y3ApOwotCUJVR19PTihmaSA+PSAoaW50KXBub2ItPnJ4X3FfbGVuKTsKLQlCVUdfT04oZmkgPCAwKTsKLQotCXJ4X3BhZ2VfaW5mbyA9IChzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICopcG5vYi0+cnhfY3R4dFtmaV07Ci0JQlVHX09OKCFyeF9wYWdlX2luZm8tPnBhZ2UpOwotCXBub2ItPnJ4X2N0eHRbZmldID0gTlVMTDsKLQotCS8qCi0JICogSWYgb25lIHBhZ2UgaXMgdXNlZCBwZXIgZnJhZ21lbnQgb3IgaWYgdGhpcyBpcyB0aGUgc2Vjb25kIGhhbGYgb2YKLQkgKiAgb2YgdGhlIHBhZ2UsIHVubWFwIHRoZSBwYWdlIGhlcmUKLQkgKi8KLQlpZiAoKHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQpIHx8IChwbm9iLT5yeF9wZ19zaGFyZWQgPT0gZmFsc2UpKSB7Ci0JCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkgICAgICAgcGNpX3VubWFwX2FkZHIocnhfcGFnZV9pbmZvLCBidXMpLCBmcmFnX3N6LAotCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JfQotCi0JYXRvbWljX2RlYygmcG5vYi0+cnhfcV9wb3N0ZWQpOwotCXVkcGNrc20gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHVkcGNrc20sIHJ4Y3ApOwotCXRjcGNrc20gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHRjcGNrc20sIHJ4Y3ApOwotCXBrdHNpemUgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHBrdHNpemUsIHJ4Y3ApOwotCS8qCi0JICogZ2V0IHJpZCBvZiBSWCBmbHVzaCBjb21wbGV0aW9ucyBmaXJzdC4KLQkgKi8KLQlpZiAoKHRjcGNrc20pICYmICh1ZHBja3NtKSAmJiAocGt0c2l6ZSA9PSAzMikpIHsKLQkJcHV0X3BhZ2UocnhfcGFnZV9pbmZvLT5wYWdlKTsKLQkJbWVtc2V0KHJ4X3BhZ2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8pKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXNrYiA9IG5ldGRldl9hbGxvY19za2IocG5vYi0+bmV0ZGV2LCBCRV9IRFJfTEVOICsgTkVUX0lQX0FMSUdOKTsKLQlpZiAoc2tiID09IE5VTEwpIHsKLQkJZGV2X2luZm8oJnBub2ItPm5ldGRldi0+ZGV2LCAiYWxsb2Nfc2tiKCkgZmFpbGVkXG4iKTsKLQkJcHV0X3BhZ2UocnhfcGFnZV9pbmZvLT5wYWdlKTsKLQkJbWVtc2V0KHJ4X3BhZ2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8pKTsKLQkJZ290byBmcmVlX2ZyYWdzOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0KLQlza2ItPmRldiA9IHBub2ItPm5ldGRldjsKLQotCW4gPSBtaW4ocGt0c2l6ZSwgZnJhZ19zeik7Ci0KLQl2YSA9IHBhZ2VfYWRkcmVzcyhyeF9wYWdlX2luZm8tPnBhZ2UpICsgcnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKLQlwcmVmZXRjaCh2YSk7Ci0KLQlza2ItPmxlbiA9IG47Ci0Jc2tiLT5kYXRhX2xlbiA9IG47Ci0JaWYgKG4gPD0gQkVfSERSX0xFTikgewotCQltZW1jcHkoc2tiLT5kYXRhLCB2YSwgbik7Ci0JCXB1dF9wYWdlKHJ4X3BhZ2VfaW5mby0+cGFnZSk7Ci0JCXNrYi0+ZGF0YV9sZW4gLT0gbjsKLQkJc2tiLT50YWlsICs9IG47Ci0JfSBlbHNlIHsKLQotCQkvKiBTZXR1cCB0aGUgU0tCIHdpdGggcGFnZSBidWZmZXIgaW5mb3JtYXRpb24gKi8KLQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlID0gcnhfcGFnZV9pbmZvLT5wYWdlOwotCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7Ci0KLQkJLyogQ29weSB0aGUgaGVhZGVyIGludG8gdGhlIHNrYl9kYXRhICovCi0JCW1lbWNweShza2ItPmRhdGEsIHZhLCBCRV9IRFJfTEVOKTsKLQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCA9Ci0JCSAgICByeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0ICsgQkVfSERSX0xFTjsKLQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplID0gbiAtIEJFX0hEUl9MRU47Ci0JCXNrYi0+ZGF0YV9sZW4gLT0gQkVfSERSX0xFTjsKLQkJc2tiLT50YWlsICs9IEJFX0hEUl9MRU47Ci0JfQotCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JbnJlc2lkID0gcGt0c2l6ZSAtIG47Ci0KLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwbm9iLT5uZXRkZXYpOwotCi0JaWYgKCh0Y3Bja3NtIHx8IHVkcGNrc20pICYmIGFkYXB0ZXItPnJ4X2NzdW0pCi0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JZWxzZQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JLyoKLQkgKiBpZiB3ZSBoYXZlIG1vcmUgYnl0ZXMgbGVmdCwgdGhlIGZyYW1lIGhhcyBiZWVuCi0JICogZ2l2ZW4gdG8gdXMgaW4gbXVsdGlwbGUgZnJhZ21lbnRzLiAgVGhpcyBoYXBwZW5zCi0JICogd2l0aCBKdW1ibyBmcmFtZXMuIEFkZCB0aGUgcmVtYWluaW5nIGZyYWdtZW50cyB0bwotCSAqIHNrYi0+ZnJhZ3NbXSBhcnJheS4KLQkgKi8KLQlpZiAobnJlc2lkKQotCQlhZGRfc2tiX2ZyYWdzKHBub2IsIHNrYiwgbnJlc2lkLCBmaSk7Ci0KLQkvKiB1cGRhdGUgdGhlIHRoZSB0cnVlIHNpemUgb2YgdGhlIHNrYi4gKi8KLQlza2ItPnRydWVzaXplID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwotCi0JLyoKLQkgKiBJZiBhIDgwMi4zIGZyYW1lIG9yIDgwMi4yIExMQyBmcmFtZQotCSAqIChpLmUpIGNvbnRhaW5zIGxlbmd0aCBmaWVsZCBpbiBNQUMgSGRyCi0JICogYW5kIGZyYW1lIGxlbiBpcyBncmVhdGVyIHRoYW4gNjQgYnl0ZXMKLQkgKi8KLQlpZiAoKChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMl8yKSkgfHwKLQkgICAgIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMl8zKSkpCi0JICAgICYmIChwa3RzaXplID4gQkVfSERSX0xFTikpIHsKLQkJLyoKLQkJICogSWYgdGhlIGxlbmd0aCBnaXZlbiBpbiBNYWMgSGRyIGlzIGxlc3MgdGhhbiBmcmFtZSBzaXplCi0JCSAqIEVycmFuZW91cyBmcmFtZSwgRHJvcCBpdAotCQkgKi8KLQkJaWYgKChudG9ocygqKHUxNiAqKSAodmEgKyAxMikpICsgRVRIX0hMRU4pIDwgcGt0c2l6ZSkgewotCQkJLyogSW5jcmVtZW50IE5vbiBFdGhlciB0eXBlIElJIGZyYW1lcyBkcm9wcGVkICovCi0JCQlhZGFwdGVyLT5iZV9zdGF0LmJlc184MDJfM19kcm9wcGVkX2ZyYW1lcysrOwotCi0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCS8qCi0JCSAqIGVsc2UgaWYgdGhlIGxlbmd0aCBnaXZlbiBpbiBNYWMgSGRyIGlzIGdyZWF0ZXIgdGhhbgotCQkgKiBmcmFtZSBzaXplLCBzaG91bGQgbm90IGJlIHNlZWluZyB0aGlzIHNvcnQgb2YgZnJhbWVzCi0JCSAqIGR1bXAgdGhlIHBrdCBhbmQgcGFzcyB0byBzdGFjawotCQkgKi8KLQkJZWxzZSBpZiAoKG50b2hzKCoodTE2ICopICh2YSArIDEyKSkgKyBFVEhfSExFTikgPiBwa3RzaXplKSB7Ci0JCQkvKiBJbmNyZW1lbnQgTm9uIEV0aGVyIHR5cGUgSUkgZnJhbWVzIG1hbGZvcm1lZCAqLwotCQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfODAyXzNfbWFsZm9ybWVkX2ZyYW1lcysrOwotCQl9Ci0JfQotCi0JdnRwID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCB2dHAsIHJ4Y3ApOwotCXZ0bSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdnRtLCByeGNwKTsKLQlpZiAodnRwICYmIHZ0bSkgewotCQkvKiBWbGFuIHRhZyBwcmVzZW50IGluIHBrdCBhbmQgQkUgZm91bmQKLQkJICogdGhhdCB0aGUgdGFnIG1hdGNoZWQgYW4gZW50cnkgaW4gVkxBTiB0YWJsZQotCQkgKi8KLQkJaWYgKCFwbm9iLT52bGFuX2dycCB8fCBwbm9iLT5udW1fdmxhbnMgPT0gMCkgewotCQkJLyogQnV0IHdlIGhhdmUgbm8gVkxBTnMgY29uZmlndXJlZC4KLQkJCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIERyb3AgdGhlIHBhY2tldC4KLQkJCSAqLwotCQkJZGV2X2luZm8oJnBub2ItPm5ldGRldi0+ZGV2LAotCQkJICAgICAgICJCbGFkZUVuZ2luZTogVW5leHBlY3RlZCB2bGFuIHRhZ2dlZCBwYWNrZXRcbiIpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQkvKiBwYXNzIHRoZSBWTEFOIHBhY2tldCB0byBzdGFjayAqLwotCQl2bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdmxhbl90YWcsIHJ4Y3ApOwotCQlWTEFOX0FDQ0VMX1JYKHNrYiwgcG5vYiwgYmUxNl90b19jcHUodmxhbl90YWcpKTsKLQotCX0gZWxzZSB7Ci0JCU5FVElGX1JYKHNrYik7Ci0JfQotCXJldHVybiAwOwotCi1mcmVlX2ZyYWdzOgotCS8qIGZyZWUgYWxsIGZyYWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCByeGNwICovCi0JbnVtZnJhZ3MgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIG51bWZyYWdzLCByeGNwKTsKLQl3aGlsZSAobnVtZnJhZ3MtLSA+IDEpIHsKLQkJaW5kZXhfaW5jKCZmaSwgcG5vYi0+cnhfcV9sZW4pOwotCi0JCXJ4X3BhZ2VfaW5mbyA9IChzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICopCi0JCSAgICBwbm9iLT5yeF9jdHh0W2ZpXTsKLQkJcG5vYi0+cnhfY3R4dFtmaV0gPSAodm9pZCAqKU5VTEw7Ci0JCWlmIChyeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0IHx8ICFwbm9iLT5yeF9wZ19zaGFyZWQpIHsKLQkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKHJ4X3BhZ2VfaW5mbywgYnVzKSwKLQkJCQkgICAgICAgZnJhZ19zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJfQotCi0JCXB1dF9wYWdlKHJ4X3BhZ2VfaW5mby0+cGFnZSk7Ci0JCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JCWF0b21pY19kZWMoJnBub2ItPnJ4X3FfcG9zdGVkKTsKLQl9Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfbmljX3J4X2NvbXBsZXRpb25fbHJvKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLAotCQkJCQkgIHN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCAqcnhjcCkKLXsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCByeF9mcmFnc1tCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FXTsKLQl1bnNpZ25lZCBpbnQgdWRwY2tzbSwgdGNwY2tzbTsKLQl1MzIgbnVtZnJhZ3MsIHZsYW5mLCB2dG0sIHZsYW5fdGFnLCBucmVzaWQ7Ci0JdTE2IHZsYW50OwotCXVuc2lnbmVkIGludCBmaSwgaWR4LCBuOwotCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnJ4X3BhZ2VfaW5mbzsKLQl1MzIgZnJhZ19zeiA9IHBub2ItPnJ4X2J1Zl9zaXplLCBwa3RzaXplOwotCWJvb2wgcnhfY29hbCA9IChhZGFwdGVyLT5tYXhfcnhfY29hbCA8PSAxKSA/IDAgOiAxOwotCXU4IGVyciwgKnZhOwotCV9fd3N1bSBjc3VtID0gMDsKLQotCWlmIChBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIGlwc2VjLCByeGNwKSkgewotCQkvKiAgRHJvcCB0aGUgcGt0IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGNvbXBsZXRpb24uICAqLwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19yeF9taXNjX3BrdHMrKzsKLQkJcmV0dXJuOwotCX0KLQllcnIgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIGVyciwgcnhjcCk7Ci0JaWYgKGVyciB8fCAhcnhfY29hbCkgewotCQkvKiBXZSB3b24ndCBjb2FsZXNjZSBSeCBwa3RzIGlmIHRoZSBlcnIgYml0IHNldC4KLQkJICogdGFrZSB0aGUgcGF0aCBvZiBub3JtYWwgY29tcGxldGlvbiBwcm9jZXNzaW5nICovCi0JCXByb2Nlc3NfbmljX3J4X2NvbXBsZXRpb24ocG5vYiwgcnhjcCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmaSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgZnJhZ25keCwgcnhjcCk7Ci0JQlVHX09OKGZpID49IChpbnQpcG5vYi0+cnhfcV9sZW4pOwotCUJVR19PTihmaSA8IDApOwotCXJ4X3BhZ2VfaW5mbyA9IChzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICopcG5vYi0+cnhfY3R4dFtmaV07Ci0JQlVHX09OKCFyeF9wYWdlX2luZm8tPnBhZ2UpOwotCXBub2ItPnJ4X2N0eHRbZmldID0gKHZvaWQgKilOVUxMOwotCS8qICBJZiBvbmUgcGFnZSBpcyB1c2VkIHBlciBmcmFnbWVudCBvciBpZiB0aGlzIGlzIHRoZQotCSAqIHNlY29uZCBoYWxmIG9mIHRoZSBwYWdlLCB1bm1hcCB0aGUgcGFnZSBoZXJlCi0JICovCi0JaWYgKHJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQgfHwgIXBub2ItPnJ4X3BnX3NoYXJlZCkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKHJ4X3BhZ2VfaW5mbywgYnVzKSwKLQkJCSAgICAgICBmcmFnX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCX0KLQotCW51bWZyYWdzID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBudW1mcmFncywgcnhjcCk7Ci0JdWRwY2tzbSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdWRwY2tzbSwgcnhjcCk7Ci0JdGNwY2tzbSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdGNwY2tzbSwgcnhjcCk7Ci0Jdmxhbl90YWcgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHZsYW5fdGFnLCByeGNwKTsKLQl2bGFudCA9IGJlMTZfdG9fY3B1KHZsYW5fdGFnKTsKLQl2bGFuZiA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdnRwLCByeGNwKTsKLQl2dG0gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIHZ0bSwgcnhjcCk7Ci0JcGt0c2l6ZSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgcGt0c2l6ZSwgcnhjcCk7Ci0KLQlhdG9taWNfZGVjKCZwbm9iLT5yeF9xX3Bvc3RlZCk7Ci0KLQlpZiAodGNwY2tzbSAmJiB1ZHBja3NtICYmIHBrdHNpemUgPT0gMzIpIHsKLQkJLyogZmx1c2ggY29tcGxldGlvbiBlbnRyaWVzICovCi0JCXB1dF9wYWdlKHJ4X3BhZ2VfaW5mby0+cGFnZSk7Ci0JCW1lbXNldChyeF9wYWdlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvKSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogT25seSBvbmUgb2YgdWRwY2tzdW0gYW5kIHRjcGNrc3VtIGNhbiBiZSBzZXQgKi8KLQlCVUdfT04odWRwY2tzbSAmJiB0Y3Bja3NtKTsKLQotCS8qIGp1bWJvIGZyYW1lcyBjb3VsZCBjb21lIGluIG11bHRpcGxlIGZyYWdtZW50cyAqLwotCUJVR19PTihudW1mcmFncyAhPSAoKHBrdHNpemUgKyAoZnJhZ19zeiAtIDEpKSAvIGZyYWdfc3opKTsKLQluID0gbWluKHBrdHNpemUsIGZyYWdfc3opOwotCW5yZXNpZCA9IHBrdHNpemUgLSBuOwkvKiB3aWxsIGJlIHVzZWZ1bCBmb3IganVtYm8gcGt0cyAqLwotCWlkeCA9IDA7Ci0KLQl2YSA9IHBhZ2VfYWRkcmVzcyhyeF9wYWdlX2luZm8tPnBhZ2UpICsgcnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKLQlwcmVmZXRjaCh2YSk7Ci0JcnhfZnJhZ3NbaWR4XS5wYWdlID0gcnhfcGFnZV9pbmZvLT5wYWdlOwotCXJ4X2ZyYWdzW2lkeF0ucGFnZV9vZmZzZXQgPSAocnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCk7Ci0JcnhfZnJhZ3NbaWR4XS5zaXplID0gbjsKLQltZW1zZXQocnhfcGFnZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlX3J4X3BhZ2VfaW5mbykpOwotCi0JLyogSWYgd2UgZ290IG11bHRpcGxlIGZyYWdtZW50cywgd2UgaGF2ZSBtb3JlIGRhdGEuICovCi0Jd2hpbGUgKG5yZXNpZCkgewotCQlpZHgrKzsKLQkJaW5kZXhfaW5jKCZmaSwgcG5vYi0+cnhfcV9sZW4pOwotCi0JCXJ4X3BhZ2VfaW5mbyA9IChzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICopcG5vYi0+cnhfY3R4dFtmaV07Ci0JCXBub2ItPnJ4X2N0eHRbZmldID0gKHZvaWQgKilOVUxMOwotCQlpZiAocnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldCB8fCAhcG5vYi0+cnhfcGdfc2hhcmVkKSB7Ci0JCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihyeF9wYWdlX2luZm8sIGJ1cyksCi0JCQkJICAgICAgIGZyYWdfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCX0KLQotCQluID0gbWluKG5yZXNpZCwgZnJhZ19zeik7Ci0JCXJ4X2ZyYWdzW2lkeF0ucGFnZSA9IHJ4X3BhZ2VfaW5mby0+cGFnZTsKLQkJcnhfZnJhZ3NbaWR4XS5wYWdlX29mZnNldCA9IChyeF9wYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0KTsKLQkJcnhfZnJhZ3NbaWR4XS5zaXplID0gbjsKLQotCQlucmVzaWQgLT0gbjsKLQkJbWVtc2V0KHJ4X3BhZ2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZV9yeF9wYWdlX2luZm8pKTsKLQkJYXRvbWljX2RlYygmcG5vYi0+cnhfcV9wb3N0ZWQpOwotCX0KLQotCWlmIChsaWtlbHkoISh2bGFuZiAmJiB2dG0pKSkgewotCQlscm9fcmVjZWl2ZV9mcmFncygmcG5vYi0+bHJvX21nciwgcnhfZnJhZ3MsCi0JCQkJICBwa3RzaXplLCBwa3RzaXplLAotCQkJCSAgKHZvaWQgKikodW5zaWduZWQgbG9uZyljc3VtLCBjc3VtKTsKLQl9IGVsc2UgewotCQkvKiBWbGFuIHRhZyBwcmVzZW50IGluIHBrdCBhbmQgQkUgZm91bmQKLQkJICogdGhhdCB0aGUgdGFnIG1hdGNoZWQgYW4gZW50cnkgaW4gVkxBTiB0YWJsZQotCQkgKi8KLQkJaWYgKHVubGlrZWx5KCFwbm9iLT52bGFuX2dycCB8fCBwbm9iLT5udW1fdmxhbnMgPT0gMCkpIHsKLQkJCS8qIEJ1dCB3ZSBoYXZlIG5vIFZMQU5zIGNvbmZpZ3VyZWQuCi0JCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBEcm9wIHRoZSBwYWNrZXQuCi0JCQkgKi8KLQkJCWRldl9pbmZvKCZwbm9iLT5uZXRkZXYtPmRldiwKLQkJCSAgICAgICAiQmxhZGVFbmdpbmU6IFVuZXhwZWN0ZWQgdmxhbiB0YWdnZWQgcGFja2V0XG4iKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBwYXNzIHRoZSBWTEFOIHBhY2tldCB0byBzdGFjayAqLwotCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfZnJhZ3MoJnBub2ItPmxyb19tZ3IsCi0JCQkJCSAgICAgICByeF9mcmFncywgcGt0c2l6ZSwgcGt0c2l6ZSwKLQkJCQkJICAgICAgIHBub2ItPnZsYW5fZ3JwLCB2bGFudCwKLQkJCQkJICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3N1bSwKLQkJCQkJICAgICAgIGNzdW0pOwotCX0KLQotCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2NvYWwrKzsKLX0KLQotc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQICpiZV9nZXRfcnhfY21wbChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVAgKnJ4Y3AgPSAmcG5vYi0+cnhfY3FbcG5vYi0+cnhfY3FfdGxdOwotCXUzMiB2YWxpZCwgY3Q7Ci0KLQl2YWxpZCA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9SWF9DT01QTCwgdmFsaWQsIHJ4Y3ApOwotCWlmICh2YWxpZCA9PSAwKQotCQlyZXR1cm4gTlVMTDsKLQotCWN0ID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBjdCwgcnhjcCk7Ci0JaWYgKGN0ICE9IDApIHsKLQkJLyogSW52YWxpZCBjaHV0ZSAjLiB0cmVhdCBhcyBlcnJvciAqLwotCQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfUlhfQ09NUEwsIGVyciwgcnhjcCwgMSk7Ci0JfQotCi0JYmVfYWR2X3J4Y3FfdGwocG5vYik7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCB2YWxpZCwgcnhjcCwgMCk7Ci0JcmV0dXJuIHJ4Y3A7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9yeF9yYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCS8qIHVwZGF0ZSB0aGUgcmF0ZSBvbmNlIGluIHR3byBzZWNvbmRzICovCi0JaWYgKChqaWZmaWVzIC0gYWRhcHRlci0+ZXRoX3J4X2ppZmZpZXMpID4gMiAqIChIWikpIHsKLQkJdTMyIHI7Ci0JCXIgPSBhZGFwdGVyLT5ldGhfcnhfYnl0ZXMgLwotCQkgICAgKChqaWZmaWVzIC0gYWRhcHRlci0+ZXRoX3J4X2ppZmZpZXMpIC8gKEhaKSk7Ci0JCXIgPSAociAvIDEwMDAwMDApOwkvKiBNQi9TZWMgKi8KLQotCQkvKiBNZWdhIEJpdHMvU2VjICovCi0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX2V0aF9yeF9yYXRlID0gKHIgKiA4KTsKLQkJYWRhcHRlci0+ZXRoX3J4X2ppZmZpZXMgPSBqaWZmaWVzOwotCQlhZGFwdGVyLT5ldGhfcnhfYnl0ZXMgPSAwOwotCX0KLX0KLQotc3RhdGljIGludCBwcm9jZXNzX3J4X2NvbXBsZXRpb25zKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCBpbnQgbWF4X3dvcmspCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXN0cnVjdCBFVEhfUlhfQ09NUExfQU1BUCAqcnhjcDsKLQl1MzIgbmMgPSAwOwotCXVuc2lnbmVkIGludCBwa3RzaXplOwotCi0Jd2hpbGUgKG1heF93b3JrICYmIChyeGNwID0gYmVfZ2V0X3J4X2NtcGwocG5vYikpKSB7Ci0JCXByZWZldGNoKHJ4Y3ApOwotCQlwa3RzaXplID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1JYX0NPTVBMLCBwa3RzaXplLCByeGNwKTsKLQkJcHJvY2Vzc19uaWNfcnhfY29tcGxldGlvbl9scm8ocG5vYiwgcnhjcCk7Ci0JCWFkYXB0ZXItPmV0aF9yeF9ieXRlcyArPSBwa3RzaXplOwotCQl1cGRhdGVfcnhfcmF0ZShhZGFwdGVyKTsKLQkJbmMrKzsKLQkJbWF4X3dvcmstLTsKLQkJYWRhcHRlci0+YmVfc3RhdC5iZXNfcnhfY29tcGwrKzsKLQl9Ci0JaWYgKGxpa2VseShhZGFwdGVyLT5tYXhfcnhfY29hbCA+IDEpKSB7Ci0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2ZsdXNoKys7Ci0JCWxyb19mbHVzaF9hbGwoJnBub2ItPmxyb19tZ3IpOwotCX0KLQotCS8qIFJlZmlsbCB0aGUgcXVldWUgKi8KLQlpZiAoYXRvbWljX3JlYWQoJnBub2ItPnJ4X3FfcG9zdGVkKSA8IDkwMCkKLQkJYmVfcG9zdF9ldGhfcnhfYnVmZnMocG5vYik7Ci0KLQlyZXR1cm4gbmM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgRVRIX1RYX0NPTVBMX0FNQVAgKmJlX2dldF90eF9jbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBFVEhfVFhfQ09NUExfQU1BUCAqdHhjcCA9ICZwbm9iLT50eF9jcVtwbm9iLT50eF9jcV90bF07Ci0JdTMyIHZhbGlkOwotCi0JdmFsaWQgPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfVFhfQ09NUEwsIHZhbGlkLCB0eGNwKTsKLQlpZiAodmFsaWQgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfVFhfQ09NUEwsIHZhbGlkLCB0eGNwLCAwKTsKLQliZV9hZHZfdHhjcV90bChwbm9iKTsKLQlyZXR1cm4gdHhjcDsKLQotfQotCi12b2lkIHByb2Nlc3Nfb25lX3R4X2NvbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCB1MzIgZW5kX2lkeCkKLXsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0JaW50IGN1cl9pbmRleCwgdHhfd3Jic19jb21wbGV0ZWQgPSAwOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTY0IGJ1c2FkZHIsIHBhLCBwYV9sbywgcGFfaGk7Ci0Jc3RydWN0IEVUSF9XUkJfQU1BUCAqd3JiOwotCXUzMiBmcmFnX2xlbiwgbGFzdF9pbmRleCwgajsKLQotCWxhc3RfaW5kZXggPSB0eF9jb21wbF9sYXN0d3JiX2lkeF9nZXQocG5vYik7Ci0JQlVHX09OKGxhc3RfaW5kZXggIT0gZW5kX2lkeCk7Ci0JcG5vYi0+dHhfY3R4dFtwbm9iLT50eF9xX3RsXSA9IE5VTEw7Ci0JZG8gewotCQljdXJfaW5kZXggPSBwbm9iLT50eF9xX3RsOwotCQl3cmIgPSAmcG5vYi0+dHhfcVtjdXJfaW5kZXhdOwotCQlwYV9oaSA9IEFNQVBfR0VUX0JJVFNfUFRSKEVUSF9XUkIsIGZyYWdfcGFfaGksIHdyYik7Ci0JCXBhX2xvID0gQU1BUF9HRVRfQklUU19QVFIoRVRIX1dSQiwgZnJhZ19wYV9sbywgd3JiKTsKLQkJZnJhZ19sZW4gPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfV1JCLCBmcmFnX2xlbiwgd3JiKTsKLQkJYnVzYWRkciA9IChwYV9oaSA8PCAzMikgfCBwYV9sbzsKLQkJaWYgKGJ1c2FkZHIgIT0gMCkgewotCQkJcGEgPSBsZTY0X3RvX2NwdShidXNhZGRyKTsKLQkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgcGEsCi0JCQkJCSBmcmFnX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCX0KLQkJaWYgKGN1cl9pbmRleCA9PSBsYXN0X2luZGV4KSB7Ci0JCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilwbm9iLT50eF9jdHh0W2N1cl9pbmRleF07Ci0JCQlCVUdfT04oIXNrYik7Ci0JCQlmb3IgKGogPSAwOyBqIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaisrKSB7Ci0JCQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKLQkJCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal07Ci0JCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJICAgICAgICh1bG9uZykgZnJhZy0+cGFnZSwgZnJhZy0+c2l6ZSwKLQkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJfQotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlwbm9iLT50eF9jdHh0W2N1cl9pbmRleF0gPSBOVUxMOwotCQl9IGVsc2UgewotCQkJQlVHX09OKHBub2ItPnR4X2N0eHRbY3VyX2luZGV4XSk7Ci0JCX0KLQkJdHhfd3Jic19jb21wbGV0ZWQrKzsKLQkJYmVfYWR2X3R4cV90bChwbm9iKTsKLQl9IHdoaWxlIChjdXJfaW5kZXggIT0gbGFzdF9pbmRleCk7Ci0JYXRvbWljX3N1Yih0eF93cmJzX2NvbXBsZXRlZCwgJnBub2ItPnR4X3FfdXNlZCk7Ci19Ci0KLS8qIHRoZXJlIGlzIG5vIG5lZWQgdG8gdGFrZSBhbiBTTVAgbG9jayBoZXJlIHNpbmNlIGN1cnJlbnRseQotICogd2UgaGF2ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgdGFza2xldCB0aGF0IGRvZXMgY29tcGxldGlvbgotICogcHJvY2Vzc2luZy4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19uaWNfdHhfY29tcGxldGlvbnMoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXN0cnVjdCBFVEhfVFhfQ09NUExfQU1BUCAqdHhjcDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcG5vYi0+bmV0ZGV2OwotCXUzMiBlbmRfaWR4LCBudW1fcHJvY2Vzc2VkID0gMDsKLQotCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X2V2ZW50cysrOwotCi0Jd2hpbGUgKCh0eGNwID0gYmVfZ2V0X3R4X2NtcGwocG5vYikpKSB7Ci0JCWVuZF9pZHggPSBBTUFQX0dFVF9CSVRTX1BUUihFVEhfVFhfQ09NUEwsIHdyYl9pbmRleCwgdHhjcCk7Ci0JCXByb2Nlc3Nfb25lX3R4X2NvbXBsKHBub2IsIGVuZF9pZHgpOwotCQludW1fcHJvY2Vzc2VkKys7Ci0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X2NvbXBsKys7Ci0JfQotCWJlX25vdGlmeV9jbXBsKHBub2IsIG51bV9wcm9jZXNzZWQsIHBub2ItPnR4X2NxX2lkLCAxKTsKLQkvKgotCSAqIFdlIGdvdCBUeCBjb21wbGV0aW9ucyBhbmQgaGF2ZSB1c2FibGUgV1JCcy4KLQkgKiBJZiB0aGUgbmV0ZGV2J3MgcXVldWUgaGFzIGJlZW4gc3RvcHBlZAotCSAqIGJlY2F1c2Ugd2UgaGFkIHJ1biBvdXQgb2YgV1JCcywgd2FrZSBpdCBub3cuCi0JICovCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT50eHFfbG9jayk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KQotCSAgICAmJiBhdG9taWNfcmVhZCgmcG5vYi0+dHhfcV91c2VkKSA8IHBub2ItPnR4X3FfbGVuIC8gMikgewotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JfQotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eHFfbG9jayk7Ci19Ci0KLXN0YXRpYyB1MzIgcG9zdF9yeF9idWZmcyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgc3RydWN0IGxpc3RfaGVhZCAqcnhibCkKLXsKLQl1MzIgbnBvc3RlZCA9IDA7Ci0Jc3RydWN0IEVUSF9SWF9EX0FNQVAgKnJ4ZCA9IE5VTEw7Ci0Jc3RydWN0IGJlX3JlY3ZfYnVmZmVyICpyeGJwOwotCXZvaWQgKipyeF9jdHhwOwotCXN0cnVjdCBSUV9EQl9BTUFQIHJxZGI7Ci0KLQlyeF9jdHhwID0gcG5vYi0+cnhfY3R4dDsKLQotCXdoaWxlICghbGlzdF9lbXB0eShyeGJsKSAmJgotCSAgICAgICAocnhfY3R4cFtwbm9iLT5yeF9xX2hkXSA9PSBOVUxMKSAmJiBucG9zdGVkIDwgMjU1KSB7Ci0KLQkJcnhicCA9IGxpc3RfZmlyc3RfZW50cnkocnhibCwgc3RydWN0IGJlX3JlY3ZfYnVmZmVyLCByeGJfbGlzdCk7Ci0JCWxpc3RfZGVsKCZyeGJwLT5yeGJfbGlzdCk7Ci0JCXJ4ZCA9IHBub2ItPnJ4X3EgKyBwbm9iLT5yeF9xX2hkOwotCQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfUlhfRCwgZnJhZ3BhX2xvLCByeGQsIHJ4YnAtPnJ4Yl9wYV9sbyk7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9SWF9ELCBmcmFncGFfaGksIHJ4ZCwgcnhicC0+cnhiX3BhX2hpKTsKLQotCQlyeF9jdHhwW3Bub2ItPnJ4X3FfaGRdID0gcnhicC0+cnhiX2N0eHQ7Ci0JCWJlX2Fkdl9yeHFfaGQocG5vYik7Ci0JCW5wb3N0ZWQrKzsKLQl9Ci0KLQlpZiAobnBvc3RlZCkgewotCQkvKiBOb3cgcHJlc3MgdGhlIGRvb3IgYmVsbCB0byBub3RpZnkgQmxhZGVFbmdpbmUuICovCi0JCXJxZGIuZHdbMF0gPSAwOwotCQlBTUFQX1NFVF9CSVRTX1BUUihSUV9EQiwgbnVtUG9zdGVkLCAmcnFkYiwgbnBvc3RlZCk7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKFJRX0RCLCBycSwgJnJxZGIsIHBub2ItPnJ4X3FfaWQpOwotCQlQRF9XUklURSgmcG5vYi0+Zm5fb2JqLCBlcnhfcnFfZGIsIHJxZGIuZHdbMF0pOwotCX0KLQlhdG9taWNfYWRkKG5wb3N0ZWQsICZwbm9iLT5yeF9xX3Bvc3RlZCk7Ci0JcmV0dXJuIG5wb3N0ZWQ7Ci19Ci0KLXZvaWQgYmVfcG9zdF9ldGhfcnhfYnVmZnMoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXUzMiBudW1fYnVmcywgcjsKLQl1NjQgYnVzYWRkciA9IDAsIHRtcF9wYTsKLQl1MzIgbWF4X2J1ZnMsIHBnX2hkOwotCXUzMiBmcmFnX3NpemU7Ci0Jc3RydWN0IGJlX3JlY3ZfYnVmZmVyICpyeGJwOwotCXN0cnVjdCBsaXN0X2hlYWQgcnhibDsKLQlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpyeF9wYWdlX2luZm87Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCXUzMiBwYWdlX29yZGVyID0gMDsKLQlnZnBfdCBhbGxvY19mbGFncyA9IEdGUF9BVE9NSUM7Ci0KLQlCVUdfT04oIWFkYXB0ZXIpOwotCi0JbWF4X2J1ZnMgPSA2NDsJCS8qIHNob3VsZCBiZSBldmVuICMgPD0gMjU1LiAqLwotCi0JZnJhZ19zaXplID0gcG5vYi0+cnhfYnVmX3NpemU7Ci0JcGFnZV9vcmRlciA9IGdldF9vcmRlcihmcmFnX3NpemUpOwotCi0JaWYgKGZyYWdfc2l6ZSA9PSA4MTkyKQotCQlhbGxvY19mbGFncyB8PSAoZ2ZwX3QpIF9fR0ZQX0NPTVA7Ci0JLyoKLQkgKiBGb3JtIGEgbGlua2VkIGxpc3Qgb2YgUkVDVl9CVUZGRkVSIHN0cnVjdHVyZSB0byBiZSBiZSBwb3N0ZWQuCi0JICogV2Ugd2lsbCBwb3N0IGV2ZW4gbnVtYmVyIG9mIGJ1ZmZlciBzbyB0aGF0IHBhZ2VzIGNhbiBiZQotCSAqIHNoYXJlZC4KLQkgKi8KLQlJTklUX0xJU1RfSEVBRCgmcnhibCk7Ci0KLQlmb3IgKG51bV9idWZzID0gMDsgbnVtX2J1ZnMgPCBtYXhfYnVmcyAmJgotCQkhcG5vYi0+cnhfcGFnZV9pbmZvW3Bub2ItPnJ4X3BnX2luZm9faGRdLnBhZ2U7ICsrbnVtX2J1ZnMpIHsKLQotCQlyeGJwID0gJnBub2ItPmV0aF9yeF9idWZzW251bV9idWZzXTsKLQkJcGdfaGQgPSBwbm9iLT5yeF9wZ19pbmZvX2hkOwotCQlyeF9wYWdlX2luZm8gPSAmcG5vYi0+cnhfcGFnZV9pbmZvW3BnX2hkXTsKLQotCQlpZiAoIXBhZ2UpIHsKLQkJCXBhZ2UgPSBhbGxvY19wYWdlcyhhbGxvY19mbGFncywgcGFnZV9vcmRlcik7Ci0JCQlpZiAodW5saWtlbHkocGFnZSA9PSBOVUxMKSkgewotCQkJCWFkYXB0ZXItPmJlX3N0YXQuYmVzX2V0aHJ4X3Bvc3RfZmFpbCsrOwotCQkJCXBub2ItPnJ4YnVmX3Bvc3RfZmFpbCsrOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcG5vYi0+cnhidWZfcG9zdF9mYWlsID0gMDsKLQkJCWJ1c2FkZHIgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcGFnZSwgMCwKLQkJCQkJICAgICAgIGZyYWdfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQgPSAwOwotCQkJcnhfcGFnZV9pbmZvLT5wYWdlID0gcGFnZTsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUgc2hhcmluZyBhIHBhZ2UgYW1vbmcgdHdvIHNrYnMsCi0JCQkgKiBhbGxvYyBhIG5ldyBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uCi0JCQkgKi8KLQkJCWlmIChwbm9iLT5yeF9wZ19zaGFyZWQgPT0gZmFsc2UpCi0JCQkJcGFnZSA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlnZXRfcGFnZShwYWdlKTsKLQkJCXJ4X3BhZ2VfaW5mby0+cGFnZV9vZmZzZXQgKz0gZnJhZ19zaXplOwotCQkJcnhfcGFnZV9pbmZvLT5wYWdlID0gcGFnZTsKLQkJCS8qCi0JCQkgKiBXZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgYWxsb2NlZCBwYWdlLAotCQkJICogQWxsb2MgYSBuZXcgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgotCQkJICovCi0JCQlwYWdlID0gTlVMTDsKLQkJfQotCQlyeGJwLT5yeGJfY3R4dCA9ICh2b2lkICopcnhfcGFnZV9pbmZvOwotCQlpbmRleF9pbmMoJnBub2ItPnJ4X3BnX2luZm9faGQsIHBub2ItPnJ4X3FfbGVuKTsKLQotCQlwY2lfdW5tYXBfYWRkcl9zZXQocnhfcGFnZV9pbmZvLCBidXMsIGJ1c2FkZHIpOwotCQl0bXBfcGEgPSBidXNhZGRyICsgcnhfcGFnZV9pbmZvLT5wYWdlX29mZnNldDsKLQkJcnhicC0+cnhiX3BhX2xvID0gKHRtcF9wYSAmIDB4RkZGRkZGRkYpOwotCQlyeGJwLT5yeGJfcGFfaGkgPSAodG1wX3BhID4+IDMyKTsKLQkJcnhicC0+cnhiX2xlbiA9IGZyYWdfc2l6ZTsKLQkJbGlzdF9hZGRfdGFpbCgmcnhicC0+cnhiX2xpc3QsICZyeGJsKTsKLQl9CQkJLyogRW5kIG9mIGZvciAqLwotCi0JciA9IHBvc3RfcnhfYnVmZnMocG5vYiwgJnJ4YmwpOwotCUJVR19PTihyICE9IG51bV9idWZzKTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBJbnRlcnJ1cHQgc2VydmljZSBmb3IgbmV0d29yayBmdW5jdGlvbi4gIFdlIGp1c3Qgc2NoZWR1bGUgdGhlCi0gKiB0YXNrbGV0IHdoaWNoIGRvZXMgYWxsIGNvbXBsZXRpb24gcHJvY2Vzc2luZy4KLSAqLwotaXJxcmV0dXJuX3QgYmVfaW50KGludCBpcnEsIHZvaWQgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2OwotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBub2ItPmFkYXB0ZXI7Ci0JdTMyIGlzcjsKLQotCWlzciA9IENTUl9SRUFEKCZwbm9iLT5mbl9vYmosIGNldi5pc3IxKTsKLQlpZiAodW5saWtlbHkoIWlzcikpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXNwaW5fbG9jaygmYWRhcHRlci0+aW50X2xvY2spOwotCWFkYXB0ZXItPmlzciB8PSBpc3I7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPmludF9sb2NrKTsKLQotCWFkYXB0ZXItPmJlX3N0YXQuYmVzX2ludHMrKzsKLQotCXRhc2tsZXRfc2NoZWR1bGUoJmFkYXB0ZXItPnN0c19oYW5kbGVyKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qCi0gKiBQb2xsIGZ1bmN0aW9uIGNhbGxlZCBieSBOQVBJIHdpdGggYSB3b3JrIGJ1ZGdldC4KLSAqIFdlIHByb2Nlc3MgYXMgbWFueSBVQy4gQkMgYW5kIE1DIHJlY2VpdmUgY29tcGxldGlvbnMKLSAqIGFzIHRoZSBidWRnZXQgYWxsb3dzIGFuZCByZXR1cm4gdGhlIGFjdHVhbCBudW1iZXIgb2YKLSAqIFJYIHN0c3R1dHNlcyBwcm9jZXNzZWQuCi0gKi8KLWludCBiZV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9Ci0JCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJlX25ldF9vYmplY3QsIG5hcGkpOwotCXUzMiB3b3JrX2RvbmU7Ci0KLQlwbm9iLT5hZGFwdGVyLT5iZV9zdGF0LmJlc19wb2xscysrOwotCXdvcmtfZG9uZSA9IHByb2Nlc3NfcnhfY29tcGxldGlvbnMocG5vYiwgYnVkZ2V0KTsKLQlCVUdfT04od29ya19kb25lID4gYnVkZ2V0KTsKLQotCS8qIEFsbCBjb25zdW1lZCAqLwotCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCS8qIGVuYWJsZSBpbnRyICovCi0JCWJlX25vdGlmeV9jbXBsKHBub2IsIHdvcmtfZG9uZSwgcG5vYi0+cnhfY3FfaWQsIDEpOwotCX0gZWxzZSB7Ci0JCS8qIE1vcmUgdG8gYmUgY29uc3VtZWQ7IGNvbnRpbnVlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCQliZV9ub3RpZnlfY21wbChwbm9iLCB3b3JrX2RvbmUsIHBub2ItPnJ4X2NxX2lkLCAwKTsKLQl9Ci0JcmV0dXJuIHdvcmtfZG9uZTsKLX0KLQotc3RhdGljIHN0cnVjdCBFUV9FTlRSWV9BTUFQICpnZXRfZXZlbnQoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0Jc3RydWN0IEVRX0VOVFJZX0FNQVAgKmVxcCA9ICYocG5vYi0+ZXZlbnRfcVtwbm9iLT5ldmVudF9xX3RsXSk7Ci0JaWYgKCFBTUFQX0dFVF9CSVRTX1BUUihFUV9FTlRSWSwgVmFsaWQsIGVxcCkpCi0JCXJldHVybiBOVUxMOwotCWJlX2Fkdl9lcV90bChwbm9iKTsKLQlyZXR1cm4gZXFwOwotfQotCi0vKgotICogUHJvY2Vzc2VzIGFsbCB2YWxpZCBldmVudHMgaW4gdGhlIGV2ZW50IHJpbmcgYXNzb2NpYXRlZCB3aXRoIGdpdmVuCi0gKiBOZXRPYmplY3QuICBBbHNvLCBub3RpZmllcyBCRSB0aGUgbnVtYmVyIG9mIGV2ZW50cyBwcm9jZXNzZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHByb2Nlc3NfZXZlbnRzKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQlzdHJ1Y3QgRVFfRU5UUllfQU1BUCAqZXFwOwotCXUzMiByaWQsIG51bV9ldmVudHMgPSAwOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwbm9iLT5uZXRkZXY7Ci0KLQl3aGlsZSAoKGVxcCA9IGdldF9ldmVudChwbm9iKSkgIT0gTlVMTCkgewotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19ldmVudHMrKzsKLQkJcmlkID0gQU1BUF9HRVRfQklUU19QVFIoRVFfRU5UUlksIFJlc291cmNlSUQsIGVxcCk7Ci0JCWlmIChyaWQgPT0gcG5vYi0+cnhfY3FfaWQpIHsKLQkJCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3J4X2V2ZW50cysrOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBub2ItPm5hcGkpOwotCQl9IGVsc2UgaWYgKHJpZCA9PSBwbm9iLT50eF9jcV9pZCkgewotCQkJcHJvY2Vzc19uaWNfdHhfY29tcGxldGlvbnMocG5vYik7Ci0JCX0gZWxzZSBpZiAocmlkID09IHBub2ItPm1jY19jcV9pZCkgewotCQkJYmVfbWNjX3Byb2Nlc3NfY3EoJnBub2ItPm1jY19xX29iaiwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsCi0JCQkJCSJJbnZhbGlkIEVRIFJlc291cmNlSUQgJWRcbiIsIHJpZCk7Ci0JCX0KLQkJQU1BUF9TRVRfQklUU19QVFIoRVFfRU5UUlksIFZhbGlkLCBlcXAsIDApOwotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9FTlRSWSwgUmVzb3VyY2VJRCwgZXFwLCAwKTsKLQkJbnVtX2V2ZW50cysrOwotCX0KLQlyZXR1cm4gbnVtX2V2ZW50czsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2VxZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgYmVfZXFfb2JqZWN0ICplcV9vYmplY3RwOwotCi0JLyogdXBkYXRlIG9uY2UgYSBzZWNvbmQgKi8KLQlpZiAoKGppZmZpZXMgLSBhZGFwdGVyLT5pcHNfamlmZmllcykgPiAxICogKEhaKSkgewotCQkvKiBPbmUgc2Vjb25kIGVsYXBzZWQgc2luY2UgbGFzdCB1cGRhdGUgICovCi0JCXUzMiByLCBuZXdfZXFkID0gLTE7Ci0JCXIgPSBhZGFwdGVyLT5iZV9zdGF0LmJlc19pbnRzIC0gYWRhcHRlci0+YmVfc3RhdC5iZXNfcHJldl9pbnRzOwotCQlyID0gciAvICgoamlmZmllcyAtIGFkYXB0ZXItPmlwc19qaWZmaWVzKSAvIChIWikpOwotCQlhZGFwdGVyLT5iZV9zdGF0LmJlc19pcHMgPSByOwotCQlhZGFwdGVyLT5pcHNfamlmZmllcyA9IGppZmZpZXM7Ci0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3ByZXZfaW50cyA9IGFkYXB0ZXItPmJlX3N0YXQuYmVzX2ludHM7Ci0JCWlmIChyID4gSVBTX0hJX1dNICYmIGFkYXB0ZXItPmN1cl9lcWQgPCBhZGFwdGVyLT5tYXhfZXFkKQotCQkJbmV3X2VxZCA9IChhZGFwdGVyLT5jdXJfZXFkICsgOCk7Ci0JCWlmIChyIDwgSVBTX0xPX1dNICYmIGFkYXB0ZXItPmN1cl9lcWQgPiBhZGFwdGVyLT5taW5fZXFkKQotCQkJbmV3X2VxZCA9IChhZGFwdGVyLT5jdXJfZXFkIC0gOCk7Ci0JCWlmIChhZGFwdGVyLT5lbmFibGVfYWljICYmIG5ld19lcWQgIT0gLTEpIHsKLQkJCWVxX29iamVjdHAgPSAmcG5vYi0+ZXZlbnRfcV9vYmo7Ci0JCQlzdGF0dXMgPSBiZV9lcV9tb2RpZnlfZGVsYXkoJnBub2ItPmZuX29iaiwgMSwKLQkJCQkJCSAgICAmZXFfb2JqZWN0cCwgJm5ld19lcWQsIE5VTEwsCi0JCQkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JCQlpZiAoc3RhdHVzID09IEJFX1NVQ0NFU1MpCi0JCQkJYWRhcHRlci0+Y3VyX2VxZCA9IG5ld19lcWQ7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gICAgVGhpcyBmdW5jdGlvbiBub3RpZmllcyBCbGFkZUVuZ2luZSBvZiBob3cgbWFueSBldmVudHMgd2VyZSBwcm9jZXNzZWQKLSAgICBmcm9tIHRoZSBldmVudCBxdWV1ZSBieSByaW5naW5nIHRoZSBjb3JyZXNwb25kaW5nIGRvb3IgYmVsbCBhbmQKLSAgICBvcHRpb25hbGx5IHJlLWFybXMgdGhlIGV2ZW50IHF1ZXVlLgotICAgIG4JCS0gbnVtYmVyIG9mIGV2ZW50cyBwcm9jZXNzZWQKLSAgICByZV9hcm0JLSAxIC0gcmUtYXJtIHRoZSBFUSwgMCAtIGRvIG5vdCByZS1hcm0gdGhlIEVRCi0KLSovCi1zdGF0aWMgdm9pZCBiZV9ub3RpZnlfZXZlbnQoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIGludCBuLCBpbnQgcmVfYXJtKQotewotCXN0cnVjdCBDUV9EQl9BTUFQIGVxZGI7Ci0JZXFkYi5kd1swXSA9IDA7Ci0KLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcWlkLCAmZXFkYiwgcG5vYi0+ZXZlbnRfcV9pZCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHJlYXJtLCAmZXFkYiwgcmVfYXJtKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgZXZlbnQsICZlcWRiLCAxKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgbnVtX3BvcHBlZCwgJmVxZGIsIG4pOwotCS8qCi0JICogVW5kZXIgc29tZSBzaXR1YXRpb25zIHdlIHNlZSBhbiBpbnRlcnJ1cHQgYW5kIG5vIHZhbGlkCi0JICogRVEgZW50cnkuICBUbyBrZWVwIGdvaW5nLCB3ZSBuZWVkIHRvIHJpbmcgdGhlIERCIGV2ZW4gaWYKLQkgKiBudW1QT3N0ZWQgaXMgMC4KLQkgKi8KLQlQRF9XUklURSgmcG5vYi0+Zm5fb2JqLCBjcV9kYiwgZXFkYi5kd1swXSk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogQ2FsbGVkIGZyb20gdGhlIHRhc2tsZXQgc2NoZWR1bGVkIGJ5IElTUi4gIEFsbCByZWFsIGludGVycnVwdCBwcm9jZXNzaW5nCi0gKiBpcyBkb25lIGhlcmUuCi0gKi8KLXZvaWQgYmVfcHJvY2Vzc19pbnRyKHVuc2lnbmVkIGxvbmcgY29udGV4dCkKLXsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYmVfYWRhcHRlciAqKWNvbnRleHQ7Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBhZGFwdGVyLT5uZXRfb2JqOwotCXUzMiBpc3IsIG47Ci0JdWxvbmcgZmxhZ3MgPSAwOwotCi0JaXNyID0gYWRhcHRlci0+aXNyOwotCi0JLyoKLQkgKiB3ZSBjcmVhdGUgb25seSBvbmUgTklDIGV2ZW50IHF1ZXVlIGluIExpbnV4LiBFdmVudCBpcwotCSAqIGV4cGVjdGVkIG9ubHkgaW4gdGhlIGZpcnN0IGV2ZW50IHF1ZXVlCi0JICovCi0JQlVHX09OKGlzciAmIDB4ZmZmZmZmZmUpOwotCWlmICgoaXNyICYgMSkgPT0gMCkKLQkJcmV0dXJuOwkJLyogbm90IG91ciBpbnRlcnJ1cHQgKi8KLQluID0gcHJvY2Vzc19ldmVudHMocG5vYik7Ci0JLyoKLQkgKiBDbGVhciB0aGUgZXZlbnQgYml0LiBhZGFwdGVyLT5pc3IgaXMgIHNldCBieQotCSAqIGhhcmQgaW50ZXJydXB0LiAgUHJldmVudCByYWNlIHdpdGggbG9jay4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aW50X2xvY2ssIGZsYWdzKTsKLQlhZGFwdGVyLT5pc3IgJj0gfjE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+aW50X2xvY2ssIGZsYWdzKTsKLQliZV9ub3RpZnlfZXZlbnQocG5vYiwgbiwgMSk7Ci0JLyoKLQkgKiBJZiBwcmV2aW91cyBhbGxvY2F0aW9uIGF0dGVtcHRzIGhhZCBmYWlsZWQgYW5kCi0JICogQkUgaGFzIHVzZWQgdXAgYWxsIHBvc3RlZCBidWZmZXJzLCBwb3N0IFJYIGJ1ZmZlcnMgaGVyZQotCSAqLwotCWlmIChwbm9iLT5yeGJ1Zl9wb3N0X2ZhaWwgJiYgYXRvbWljX3JlYWQoJnBub2ItPnJ4X3FfcG9zdGVkKSA9PSAwKQotCQliZV9wb3N0X2V0aF9yeF9idWZmcyhwbm9iKTsKLQl1cGRhdGVfZXFkKGFkYXB0ZXIsIHBub2IpOwotCXJldHVybjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZV9uZXRpZi5jIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX25ldGlmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOGRhZjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlX25ldGlmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIGJlX25ldGlmLmMKLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyBlbnRyeSBwb2ludHMgb2YgZHJpdmVycyBzZWVuIGJ5IHRjcC9pcCBzdGFjay4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSAiYmVuZXQuaCIKLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+Ci0KLS8qIFN0cmluZ3MgdG8gcHJpbnQgTGluayBwcm9wZXJ0aWVzICovCi1zdGF0aWMgY29uc3QgY2hhciAqbGlua19zcGVlZFtdID0gewotCSJJbnZhbGlkIGxpbmsgU3BlZWQgVmFsdWUiLAotCSIxMCBNYnBzIiwKLQkiMTAwIE1icHMiLAotCSIxIEdicHMiLAotCSIxMCBHYnBzIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmxpbmtfZHVwbGV4W10gPSB7Ci0JIkludmFsaWQgRHVwbGV4IFZhbHVlIiwKLQkiSGFsZiBEdXBsZXgiLAotCSJGdWxsIER1cGxleCIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpsaW5rX3N0YXRlW10gPSB7Ci0JIiIsCi0JIihhY3RpdmUpIgotfTsKLQotdm9pZCBiZV9wcmludF9saW5rX2luZm8oc3RydWN0IEJFX0xJTktfU1RBVFVTICpsbmtfc3RhdHVzKQotewotCXUxNiBzaSwgZGksIGFpOwotCi0JLyogUG9ydCAwICovCi0JaWYgKGxua19zdGF0dXMtPm1hYzBfc3BlZWQgJiYgbG5rX3N0YXR1cy0+bWFjMF9kdXBsZXgpIHsKLQkJLyogUG9ydCBpcyB1cCBhbmQgcnVubmluZyAqLwotCQlzaSA9IChsbmtfc3RhdHVzLT5tYWMwX3NwZWVkIDwgNSkgPyBsbmtfc3RhdHVzLT5tYWMwX3NwZWVkIDogMDsKLQkJZGkgPSAobG5rX3N0YXR1cy0+bWFjMF9kdXBsZXggPCAzKSA/Ci0JCSAgICBsbmtfc3RhdHVzLT5tYWMwX2R1cGxleCA6IDA7Ci0JCWFpID0gKGxua19zdGF0dXMtPmFjdGl2ZV9wb3J0ID09IDApID8gMSA6IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBvcnROby4gMDogU3BlZWQgLSAlcyAlcyAlc1xuIiwKLQkJICAgICAgIGxpbmtfc3BlZWRbc2ldLCBsaW5rX2R1cGxleFtkaV0sIGxpbmtfc3RhdGVbYWldKTsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUG9ydE5vLiAwOiBEb3duXG4iKTsKLQotCS8qIFBvcnQgMSAqLwotCWlmIChsbmtfc3RhdHVzLT5tYWMxX3NwZWVkICYmIGxua19zdGF0dXMtPm1hYzFfZHVwbGV4KSB7Ci0JCS8qIFBvcnQgaXMgdXAgYW5kIHJ1bm5pbmcgKi8KLQkJc2kgPSAobG5rX3N0YXR1cy0+bWFjMV9zcGVlZCA8IDUpID8gbG5rX3N0YXR1cy0+bWFjMV9zcGVlZCA6IDA7Ci0JCWRpID0gKGxua19zdGF0dXMtPm1hYzFfZHVwbGV4IDwgMykgPwotCQkgICAgbG5rX3N0YXR1cy0+bWFjMV9kdXBsZXggOiAwOwotCQlhaSA9IChsbmtfc3RhdHVzLT5hY3RpdmVfcG9ydCA9PSAwKSA/IDEgOiAwOwotCQlwcmludGsoS0VSTl9JTkZPICJQb3J0Tm8uIDE6IFNwZWVkIC0gJXMgJXMgJXNcbiIsCi0JCSAgICAgICBsaW5rX3NwZWVkW3NpXSwgbGlua19kdXBsZXhbZGldLCBsaW5rX3N0YXRlW2FpXSk7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIlBvcnROby4gMTogRG93blxuIik7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQKLWJlX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqbWFjX2hkciwKLQkJICAgdm9pZCAqKmlwX2hkciwgdm9pZCAqKnRjcHVkcF9oZHIsCi0JCSAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBldGhoZHIgKmVoOwotCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCXU4ICp2YSA9IHBhZ2VfYWRkcmVzcyhmcmFnLT5wYWdlKSArIGZyYWctPnBhZ2Vfb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgbGxfaGxlbjsKLQotCS8qIGZpbmQgdGhlIG1hYyBoZWFkZXIsIGFib3J0IGlmIG5vdCBJUHY0ICovCi0KLQlwcmVmZXRjaCh2YSk7Ci0JZWggPSAoc3RydWN0IGV0aGhkciAqKXZhOwotCSptYWNfaGRyID0gZWg7Ci0JbGxfaGxlbiA9IEVUSF9ITEVOOwotCWlmIChlaC0+aF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJaWYgKGVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXZhOwotCQkJaWYgKHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpCi0JCQkJcmV0dXJuIC0xOwotCi0JCQlsbF9obGVuICs9IFZMQU5fSExFTjsKLQotCQl9IGVsc2UgewotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNDsKLQotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikodmEgKyBsbF9obGVuKTsKLQkqaXBfaGRyID0gaXBoOwotCWlmIChpcGgtPnByb3RvY29sICE9IElQUFJPVE9fVENQKQotCQlyZXR1cm4gLTE7Ci0JKmhkcl9mbGFncyB8PSBMUk9fVENQOwotCSp0Y3B1ZHBfaGRyID0gKHU4ICopICgqaXBfaGRyKSArIChpcGgtPmlobCA8PCAyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJlbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncjsKLQotCWlmIChhZGFwdGVyLT5kZXZfc3RhdGUgPCBCRV9ERVZfU1RBVEVfSU5JVCkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlscm9fbWdyID0gJnBub2ItPmxyb19tZ3I7Ci0JbHJvX21nci0+ZGV2ID0gbmV0ZGV2OwotCi0JbHJvX21nci0+ZmVhdHVyZXMgPSBMUk9fRl9OQVBJOwotCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JbHJvX21nci0+bWF4X2Rlc2MgPSBCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCWxyb19tZ3ItPmxyb19hcnIgPSBwbm9iLT5scm9fZGVzYzsKLQlscm9fbWdyLT5nZXRfZnJhZ19oZWFkZXIgPSBiZV9nZXRfZnJhZ19oZWFkZXI7Ci0JbHJvX21nci0+bWF4X2FnZ3IgPSBhZGFwdGVyLT5tYXhfcnhfY29hbDsKLQlscm9fbWdyLT5mcmFnX2FsaWduX3BhZCA9IDI7Ci0JaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKLQkJbHJvX21nci0+bWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOwotCi0JYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBCRV9MUk9fTUFYX1BLVFM7Ci0KLQliZV91cGRhdGVfbGlua19zdGF0dXMoYWRhcHRlcik7Ci0KLQkvKgotCSAqIFNldCBjYXJyaWVyIG9uIG9ubHkgaWYgUGh5c2ljYWwgTGluayB1cAotCSAqIEVpdGhlciBvZiB0aGUgcG9ydCBsaW5rIHN0YXR1cyB1cCBzaWduaWZpZXMgdGhpcwotCSAqLwotCWlmICgoYWRhcHRlci0+cG9ydDBfbGlua19zdHMgPT0gQkVfUE9SVF9MSU5LX1VQKSB8fAotCSAgICAoYWRhcHRlci0+cG9ydDFfbGlua19zdHMgPT0gQkVfUE9SVF9MSU5LX1VQKSkgewotCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JfQotCi0JYWRhcHRlci0+ZGV2X3N0YXRlID0gQkVfREVWX1NUQVRFX09QRU47Ci0JbmFwaV9lbmFibGUoJnBub2ItPm5hcGkpOwotCWJlX2VuYWJsZV9pbnRyKHBub2IpOwotCWJlX2VuYWJsZV9lcV9pbnRyKHBub2IpOwotCS8qCi0JICogUlggY29tcGxldGlvbiBxdWV1ZSBtYXkgYmUgaW4gZGlzLWFybWVkIHN0YXRlLiBBcm0gaXQuCi0JICovCi0JYmVfbm90aWZ5X2NtcGwocG5vYiwgMCwgcG5vYi0+cnhfY3FfaWQsIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmVuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCXN5bmNocm9uaXplX2lycShuZXRkZXYtPmlycSk7Ci0KLQliZV93YWl0X25pY190eF9jbXBseF9jbXBsKHBub2IpOwotCWFkYXB0ZXItPmRldl9zdGF0ZSA9IEJFX0RFVl9TVEFURV9JTklUOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0KLQlhZGFwdGVyLT5wb3J0MF9saW5rX3N0cyA9IEJFX1BPUlRfTElOS19ET1dOOwotCWFkYXB0ZXItPnBvcnQxX2xpbmtfc3RzID0gQkVfUE9SVF9MSU5LX0RPV047Ci0JYmVfZGlzYWJsZV9pbnRyKHBub2IpOwotCWJlX2Rpc2FibGVfZXFfaW50cihwbm9iKTsKLQluYXBpX2Rpc2FibGUoJnBub2ItPm5hcGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTZXR0aW5nIGEgTWFjIEFkZHJlc3MgZm9yIEJFCi0gKiBUYWtlcyBuZXRkZXYgYW5kIGEgdm9pZCBwb2ludGVyIGFzIGFyZ3VtZW50cy4KLSAqIFRoZSBwb2ludGVyIGhvbGRzIHRoZSBuZXcgYWRkcmVzIHRvIGJlIHVzZWQuCi0gKi8KLXN0YXRpYyBpbnQgYmVuZXRfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCi17Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7Ci0JYmVfcnhmX21hY19hZGRyZXNzX3JlYWRfd3JpdGUoJnBub2ItPmZuX29iaiwgMCwgMCwgZmFsc2UsIHRydWUsIGZhbHNlLAotCQkJCW5ldGRldi0+ZGV2X2FkZHIsIE5VTEwsIE5VTEwpOwotCS8qCi0JICogU2luY2Ugd2UgYXJlIGRvaW5nIEFjdGl2ZS1QYXNzaXZlIGZhaWxvdmVyLCBib3RoCi0JICogcG9ydHMgc2hvdWxkIGhhdmUgbWF0Y2hpbmcgTUFDIGFkZHJlc3NlcyBldmVyeXRpbWUuCi0JICovCi0JYmVfcnhmX21hY19hZGRyZXNzX3JlYWRfd3JpdGUoJnBub2ItPmZuX29iaiwgMSwgMCwgZmFsc2UsIHRydWUsIGZhbHNlLAotCQkJCSAgICAgIG5ldGRldi0+ZGV2X2FkZHIsIE5VTEwsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYmVfZ2V0X3N0YXRzX3RpbWVyX2hhbmRsZXIodW5zaWduZWQgbG9uZyBjb250ZXh0KQotewotCXN0cnVjdCBiZV90aW1lcl9jdHh0ICpjdHh0ID0gKHN0cnVjdCBiZV90aW1lcl9jdHh0ICopY29udGV4dDsKLQotCWlmIChhdG9taWNfcmVhZCgmY3R4dC0+Z2V0X3N0YXRfZmxhZykpIHsKLQkJYXRvbWljX2RlYygmY3R4dC0+Z2V0X3N0YXRfZmxhZyk7Ci0JCXVwKCh2b2lkICopY3R4dC0+Z2V0X3N0YXRfc2VtX2FkZHIpOwotCX0KLQlkZWxfdGltZXIoJmN0eHQtPmdldF9zdGF0c190aW1lcik7Ci0JcmV0dXJuOwotfQotCi12b2lkIGJlX2dldF9zdGF0X2NiKHZvaWQgKmNvbnRleHQsIGludCBzdGF0dXMsCi0JCSAgICBzdHJ1Y3QgTUNDX1dSQl9BTUFQICpvcHRpb25hbF93cmIpCi17Ci0Jc3RydWN0IGJlX3RpbWVyX2N0eHQgKmN0eHQgPSAoc3RydWN0IGJlX3RpbWVyX2N0eHQgKiljb250ZXh0OwotCS8qCi0JICoganVzdCB1cCB0aGUgc2VtYXBob3JlIGlmIHRoZSBnZXRfc3RhdF9mbGFnCi0JICogcmVhZHMgMS4gc28gdGhhdCB0aGUgd2FpdGVyIGNhbiBjb250aW51ZS4KLQkgKiBJZiBpdCBpcyAwLCB0aGVuIGl0IHdhcyBoYW5kbGVkIGJ5IHRoZSB0aW1lciBoYW5kbGVyLgotCSAqLwotCWRlbF90aW1lcigmY3R4dC0+Z2V0X3N0YXRzX3RpbWVyKTsKLQlpZiAoYXRvbWljX3JlYWQoJmN0eHQtPmdldF9zdGF0X2ZsYWcpKSB7Ci0JCWF0b21pY19kZWMoJmN0eHQtPmdldF9zdGF0X2ZsYWcpOwotCQl1cCgodm9pZCAqKWN0eHQtPmdldF9zdGF0X3NlbV9hZGRyKTsKLQl9Ci19Ci0KLXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiZW5ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbm9iLT5hZGFwdGVyOwotCXU2NCBwYTsKLQlzdHJ1Y3QgYmVfdGltZXJfY3R4dCAqY3R4dCA9ICZhZGFwdGVyLT50aW1lcl9jdHh0OwotCi0JaWYgKGFkYXB0ZXItPmRldl9zdGF0ZSAhPSBCRV9ERVZfU1RBVEVfT1BFTikgewotCQkvKiBSZXR1cm4gcHJldmlvdXNseSByZWFkIHN0YXRzICovCi0JCXJldHVybiAmKGFkYXB0ZXItPmJlbmV0X3N0YXRzKTsKLQl9Ci0JLyogR2V0IFBoeXNpY2FsIEFkZHIgKi8KLQlwYSA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPmV0aF9zdGF0c3AsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBGV0NNRF9FVEhfR0VUX1NUQVRJU1RJQ1MpLAotCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JY3R4dC0+Z2V0X3N0YXRfc2VtX2FkZHIgPSAodW5zaWduZWQgbG9uZykmYWRhcHRlci0+Z2V0X2V0aF9zdGF0X3NlbTsKLQlhdG9taWNfaW5jKCZjdHh0LT5nZXRfc3RhdF9mbGFnKTsKLQotCWJlX3J4Zl9xdWVyeV9ldGhfc3RhdGlzdGljcygmcG5vYi0+Zm5fb2JqLCBhZGFwdGVyLT5ldGhfc3RhdHNwLAotCQkJCSAgICBjcHVfdG9fbGU2NChwYSksIGJlX2dldF9zdGF0X2NiLCBjdHh0LAotCQkJCSAgICBOVUxMKTsKLQotCWN0eHQtPmdldF9zdGF0c190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY3R4dDsKLQltb2RfdGltZXIoJmN0eHQtPmdldF9zdGF0c190aW1lciwgKGppZmZpZXMgKyAoSFogKiAyKSkpOwotCWRvd24oKHZvaWQgKiljdHh0LT5nZXRfc3RhdF9zZW1fYWRkcik7CS8qIGNhbGxiYWNrIHdpbGwgdW5ibG9jayB1cyAqLwotCi0JLyogQWRkaW5nIHBvcnQwIGFuZCBwb3J0MSBzdGF0cy4gKi8KLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9wYWNrZXRzID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwcmVjdmR0b3RhbGZyYW1lcyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMXJlY3ZkdG90YWxmcmFtZXM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMudHhfcGFja2V0cyA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMHhtaXR1bmljYXN0ZnJhbWVzICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxeG1pdHVuaWNhc3RmcmFtZXM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMudHhfYnl0ZXMgPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDB4bWl0Ynl0ZXNsc2QgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDF4bWl0Ynl0ZXNsc2Q7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfZXJyb3JzID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwY3JjZXJyb3JzICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxY3JjZXJyb3JzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnJ4X2Vycm9ycyArPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDBhbGlnbm1lbnRzeW1lcnJzICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxYWxpZ25tZW50c3ltZXJyczsKLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9lcnJvcnMgKz0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwaW5yYW5nZWxlbmVycm9ycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWlucmFuZ2VsZW5lcnJvcnM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfYnl0ZXMgPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDByZWN2ZHRvdGFsYnl0ZXNMU0QgKwotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDFyZWN2ZHRvdGFsYnl0ZXNMU0Q7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfY3JjX2Vycm9ycyA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMGNyY2Vycm9ycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWNyY2Vycm9yczsKLQotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnR4X3BhY2tldHMgKz0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAweG1pdG11bHRpY2FzdGZyYW1lcyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMXhtaXRtdWx0aWNhc3RmcmFtZXM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMudHhfcGFja2V0cyArPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDB4bWl0YnJvYWRjYXN0ZnJhbWVzICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxeG1pdGJyb2FkY2FzdGZyYW1lczsKLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy50eF9lcnJvcnMgPSAwOwotCi0JYWRhcHRlci0+YmVuZXRfc3RhdHMubXVsdGljYXN0ID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAweG1pdG11bHRpY2FzdGZyYW1lcyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMXhtaXRtdWx0aWNhc3RmcmFtZXM7Ci0KLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9maWZvX2Vycm9ycyA9Ci0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMHJ4Zmlmb292ZXJmbG93ZHJvcHBlZCArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMXJ4Zmlmb292ZXJmbG93ZHJvcHBlZDsKLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDBhbGlnbm1lbnRzeW1lcnJzICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxYWxpZ25tZW50c3ltZXJyczsKLQlhZGFwdGVyLT5iZW5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwaW5yYW5nZWxlbmVycm9ycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMWlucmFuZ2VsZW5lcnJvcnM7Ci0JYWRhcHRlci0+YmVuZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPQotCSAgICBhZGFwdGVyLT5ldGhfc3RhdHNwLT5wYXJhbXMucmVzcG9uc2UucDBvdXRyYW5nZWVycm9ycyArCi0JICAgIGFkYXB0ZXItPmV0aF9zdGF0c3AtPnBhcmFtcy5yZXNwb25zZS5wMW91dHJhbmdlZXJyb3JzOwotCWFkYXB0ZXItPmJlbmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0KLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAwZnJhbWV0b29sb25nZXJyb3JzICsKLQkgICAgYWRhcHRlci0+ZXRoX3N0YXRzcC0+cGFyYW1zLnJlc3BvbnNlLnAxZnJhbWV0b29sb25nZXJyb3JzOwotCi0JcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCAodWxvbmcpIGFkYXB0ZXItPmV0aF9zdGF0c3AsCi0JCQkgc2l6ZW9mKHN0cnVjdCBGV0NNRF9FVEhfR0VUX1NUQVRJU1RJQ1MpLAotCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JcmV0dXJuICYoYWRhcHRlci0+YmVuZXRfc3RhdHMpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGJlX3N0YXJ0X3R4KHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iLCB1MzIgbnBvc3RlZCkKLXsKLSNkZWZpbmUgQ1NSX0VUSF9NQVhfU1FQT1NUUyAyNTUKLQlzdHJ1Y3QgU1FfREJfQU1BUCBzcWRiOwotCi0Jc3FkYi5kd1swXSA9IDA7Ci0KLQlBTUFQX1NFVF9CSVRTX1BUUihTUV9EQiwgY2lkLCAmc3FkYiwgcG5vYi0+dHhfcV9pZCk7Ci0Jd2hpbGUgKG5wb3N0ZWQpIHsKLQkJaWYgKG5wb3N0ZWQgPiBDU1JfRVRIX01BWF9TUVBPU1RTKSB7Ci0JCQlBTUFQX1NFVF9CSVRTX1BUUihTUV9EQiwgbnVtUG9zdGVkLCAmc3FkYiwKLQkJCQkJICBDU1JfRVRIX01BWF9TUVBPU1RTKTsKLQkJCW5wb3N0ZWQgLT0gQ1NSX0VUSF9NQVhfU1FQT1NUUzsKLQkJfSBlbHNlIHsKLQkJCUFNQVBfU0VUX0JJVFNfUFRSKFNRX0RCLCBudW1Qb3N0ZWQsICZzcWRiLCBucG9zdGVkKTsKLQkJCW5wb3N0ZWQgPSAwOwotCQl9Ci0JCVBEX1dSSVRFKCZwbm9iLT5mbl9vYmosIGV0eF9zcV9kYiwgc3FkYi5kd1swXSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfdHhfcmF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiB1cGRhdGUgdGhlIHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIGFkYXB0ZXItPmV0aF90eF9qaWZmaWVzKSA+IDIgKiAoSFopKSB7Ci0JCXUzMiByOwotCQlyID0gYWRhcHRlci0+ZXRoX3R4X2J5dGVzIC8KLQkJICAgICgoamlmZmllcyAtIGFkYXB0ZXItPmV0aF90eF9qaWZmaWVzKSAvIChIWikpOwotCQlyID0gKHIgLyAxMDAwMDAwKTsJLyogTSBieXRlcy9zICovCi0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX2V0aF90eF9yYXRlID0gKHIgKiA4KTsgLyogTSBiaXRzL3MgKi8KLQkJYWRhcHRlci0+ZXRoX3R4X2ppZmZpZXMgPSBqaWZmaWVzOwotCQlhZGFwdGVyLT5ldGhfdHhfYnl0ZXMgPSAwOwotCX0KLX0KLQotc3RhdGljIGludCB3cmJfY250X2luX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBjbnQgPSAwOwotCXdoaWxlIChza2IpIHsKLQkJaWYgKHNrYi0+bGVuID4gc2tiLT5kYXRhX2xlbikKLQkJCWNudCsrOwotCQljbnQgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJc2tiID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7Ci0JfQotCUJVR19PTihjbnQgPiBCRV9NQVhfVFhfRlJBR19DT1VOVCk7Ci0JcmV0dXJuIGNudDsKLX0KLQotc3RhdGljIHZvaWQgd3JiX2ZpbGwoc3RydWN0IEVUSF9XUkJfQU1BUCAqd3JiLCB1NjQgYWRkciwgaW50IGxlbikKLXsKLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBmcmFnX3BhX2hpLCB3cmIsIGFkZHIgPj4gMzIpOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIGZyYWdfcGFfbG8sIHdyYiwgYWRkciAmIDB4RkZGRkZGRkYpOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIGZyYWdfbGVuLCB3cmIsIGxlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyYl9maWxsX2V4dHJhKHN0cnVjdCBFVEhfV1JCX0FNQVAgKndyYiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXdyYi0+ZHdbMl0gPSAwOwotCXdyYi0+ZHdbM10gPSAwOwotCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIGNyYywgd3JiLCAxKTsKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA+IDEgJiYgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgewotCQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBsc28sIHdyYiwgMSk7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVUSF9XUkIsIGxzb19tc3MsIHdyYiwKLQkJCQkgIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOwotCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQl1OCBwcm90byA9ICgoc3RydWN0IGlwaGRyICopaXBfaGRyKHNrYikpLT5wcm90b2NvbDsKLQkJaWYgKHByb3RvID09IElQUFJPVE9fVENQKQotCQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgdGNwY3MsIHdyYiwgMSk7Ci0JCWVsc2UgaWYgKHByb3RvID09IElQUFJPVE9fVURQKQotCQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgdWRwY3MsIHdyYiwgMSk7Ci0JfQotCWlmIChwbm9iLT52bGFuX2dycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgdmxhbiwgd3JiLCAxKTsKLQkJQU1BUF9TRVRfQklUU19QVFIoRVRIX1dSQiwgdmxhbl90YWcsIHdyYiwgdmxhbl90eF90YWdfZ2V0KHNrYikpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyYl9jb3B5X2V4dHJhKHN0cnVjdCBFVEhfV1JCX0FNQVAgKnRvLAotCQkJCSAgc3RydWN0IEVUSF9XUkJfQU1BUCAqZnJvbSkKLXsKLQotCXRvLT5kd1syXSA9IGZyb20tPmR3WzJdOwotCXRvLT5kd1szXSA9IGZyb20tPmR3WzNdOwotfQotCi0vKiBSZXR1cm5zIHRoZSBhY3R1YWwgY291bnQgb2Ygd3JicyB1c2VkIGluY2x1ZGluZyBhIHBvc3NpYmxlIGR1bW15ICovCi1zdGF0aWMgaW50IGNvcHlfc2tiX3RvX3R4cShzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHUzMiB3cmJfY250LCB1MzIgKmNvcGllZCkKLXsKLQl1NjQgYnVzYWRkcjsKLQlzdHJ1Y3QgRVRIX1dSQl9BTUFQICp3cmIgPSBOVUxMLCAqZmlyc3QgPSBOVUxMOwotCXUzMiBpOwotCWJvb2wgZHVtbXkgPSB0cnVlOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcG5vYi0+YWRhcHRlci0+cGRldjsKLQotCWlmICh3cmJfY250ICYgMSkKLQkJd3JiX2NudCsrOwotCWVsc2UKLQkJZHVtbXkgPSBmYWxzZTsKLQotCWF0b21pY19hZGQod3JiX2NudCwgJnBub2ItPnR4X3FfdXNlZCk7Ci0KLQl3aGlsZSAoc2tiKSB7Ci0JCWlmIChza2ItPmxlbiA+IHNrYi0+ZGF0YV9sZW4pIHsKLQkJCWludCBsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47Ci0JCQlidXNhZGRyID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBsZW4sCi0JCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlidXNhZGRyID0gY3B1X3RvX2xlNjQoYnVzYWRkcik7Ci0JCQl3cmIgPSAmcG5vYi0+dHhfcVtwbm9iLT50eF9xX2hkXTsKLQkJCWlmIChmaXJzdCA9PSBOVUxMKSB7Ci0JCQkJd3JiX2ZpbGxfZXh0cmEod3JiLCBza2IsIHBub2IpOwotCQkJCWZpcnN0ID0gd3JiOwotCQkJfSBlbHNlIHsKLQkJCQl3cmJfY29weV9leHRyYSh3cmIsIGZpcnN0KTsKLQkJCX0KLQkJCXdyYl9maWxsKHdyYiwgYnVzYWRkciwgbGVuKTsKLQkJCWJlX2Fkdl90eHFfaGQocG5vYik7Ci0JCQkqY29waWVkICs9IGxlbjsKLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKLQkJCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWcgPQotCQkJICAgICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCQkJYnVzYWRkciA9IHBjaV9tYXBfcGFnZShwZGV2LCBmcmFnLT5wYWdlLAotCQkJCQkgICAgICAgZnJhZy0+cGFnZV9vZmZzZXQsIGZyYWctPnNpemUsCi0JCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWJ1c2FkZHIgPSBjcHVfdG9fbGU2NChidXNhZGRyKTsKLQkJCXdyYiA9ICZwbm9iLT50eF9xW3Bub2ItPnR4X3FfaGRdOwotCQkJaWYgKGZpcnN0ID09IE5VTEwpIHsKLQkJCQl3cmJfZmlsbF9leHRyYSh3cmIsIHNrYiwgcG5vYik7Ci0JCQkJZmlyc3QgPSB3cmI7Ci0JCQl9IGVsc2UgewotCQkJCXdyYl9jb3B5X2V4dHJhKHdyYiwgZmlyc3QpOwotCQkJfQotCQkJd3JiX2ZpbGwod3JiLCBidXNhZGRyLCBmcmFnLT5zaXplKTsKLQkJCWJlX2Fkdl90eHFfaGQocG5vYik7Ci0JCQkqY29waWVkICs9IGZyYWctPnNpemU7Ci0JCX0KLQkJc2tiID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7Ci0JfQotCi0JaWYgKGR1bW15KSB7Ci0JCXdyYiA9ICZwbm9iLT50eF9xW3Bub2ItPnR4X3FfaGRdOwotCQlCVUdfT04oZmlyc3QgPT0gTlVMTCk7Ci0JCXdyYl9jb3B5X2V4dHJhKHdyYiwgZmlyc3QpOwotCQl3cmJfZmlsbCh3cmIsIDAsIDApOwotCQliZV9hZHZfdHhxX2hkKHBub2IpOwotCX0KLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBjb21wbGV0ZSwgd3JiLCAxKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihFVEhfV1JCLCBsYXN0LCB3cmIsIDEpOwotCXJldHVybiB3cmJfY250OwotfQotCi0vKiBGb3IgZWFjaCBza2IgdHJhbnNtaXR0ZWQsIHR4X2N0eHQgc3RvcmVzIHRoZSBudW0gb2Ygd3JicyBpbiB0aGUKLSAqIHN0YXJ0IGluZGV4IGFuZCBza2IgcG9pbnRlciBpbiB0aGUgZW5kIGluZGV4Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV90eF93cmJfaW5mb19yZW1lbWJlcihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiwKLQkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHdyYl9jbnQsCi0JCQkJCSAgIHUzMiBzdGFydCkKLXsKLQkqKHUzMiAqKSAoJnBub2ItPnR4X2N0eHRbc3RhcnRdKSA9IHdyYl9jbnQ7Ci0JaW5kZXhfYWR2KCZzdGFydCwgd3JiX2NudCAtIDEsIHBub2ItPnR4X3FfbGVuKTsKLQlwbm9iLT50eF9jdHh0W3N0YXJ0XSA9IHNrYjsKLX0KLQotc3RhdGljIGludCBiZW5ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQl1MzIgd3JiX2NudCwgY29waWVkID0gMDsKLQl1MzIgc3RhcnQgPSBwbm9iLT50eF9xX2hkOwotCi0JYWRhcHRlci0+YmVfc3RhdC5iZXNfdHhfcmVxcysrOwotCi0Jd3JiX2NudCA9IHdyYl9jbnRfaW5fc2tiKHNrYik7Ci0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT50eHFfbG9jayk7Ci0JaWYgKChwbm9iLT50eF9xX2xlbiAtIDIgLSBhdG9taWNfcmVhZCgmcG5vYi0+dHhfcV91c2VkKSkgPD0gd3JiX2NudCkgewotCQluZXRpZl9zdG9wX3F1ZXVlKHBub2ItPm5ldGRldik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT50eHFfbG9jayk7Ci0JCWFkYXB0ZXItPmJlX3N0YXQuYmVzX3R4X2ZhaWxzKys7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnR4cV9sb2NrKTsKLQotCXdyYl9jbnQgPSBjb3B5X3NrYl90b190eHEocG5vYiwgc2tiLCB3cmJfY250LCAmY29waWVkKTsKLQliZV90eF93cmJfaW5mb19yZW1lbWJlcihwbm9iLCBza2IsIHdyYl9jbnQsIHN0YXJ0KTsKLQotCWJlX3N0YXJ0X3R4KHBub2IsIHdyYl9jbnQpOwotCi0JYWRhcHRlci0+ZXRoX3R4X2J5dGVzICs9IGNvcGllZDsKLQlhZGFwdGVyLT5iZV9zdGF0LmJlc190eF93cmJzICs9IHdyYl9jbnQ7Ci0JdXBkYXRlX3R4X3JhdGUoYWRhcHRlcik7Ci0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgZHJpdmVyIGVudHJ5IHBvaW50IHRvIGNoYW5nZSB0aGUgbXR1IG9mIHRoZSBkZXZpY2UKLSAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBhbmQgZXJybm8gZm9yIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbnQgYmVuZXRfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKLXsKLQkvKgotCSAqIEJFIHN1cHBvcnRzIGp1bWJvIGZyYW1lIHNpemUgdXB0byA5MDAwIGJ5dGVzIGluY2x1ZGluZyB0aGUgbGluayBsYXllcgotCSAqIGhlYWRlci4gQ29uc2lkZXJpbmcgdGhlIGRpZmZlcmVudCB2YXJpYW50cyBvZiBmcmFtZSBmb3JtYXRzIHBvc3NpYmxlCi0JICogbGlrZSBWTEFOLCBTTkFQL0xMQywgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgZm9yIE1UVSBpcyA4OTc0IGJ5dGVzCi0JICovCi0KLQlpZiAobmV3X210dSA8IChFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSB8fCAobmV3X210dSA+IEJFX01BWF9NVFUpKSB7Ci0JCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIkludmFsaWQgTVRVIHJlcXVlc3RlZC4gIgotCQkJICAgICAgICJNdXN0IGJlIGJldHdlZW4gJWQgYW5kICVkIGJ5dGVzXG4iLAotCQkJCSAgICAgICAoRVRIX1pMRU4gKyBFVEhfRkNTX0xFTiksIEJFX01BWF9NVFUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiTVRVIGNoYW5nZWQgZnJvbSAlZCB0byAlZFxuIiwKLQkJCQkJCW5ldGRldi0+bXR1LCBuZXdfbXR1KTsKLQluZXRkZXYtPm10dSA9IG5ld19tdHU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBkcml2ZXIgZW50cnkgcG9pbnQgdG8gcmVnaXN0ZXIgYSB2bGFuIHdpdGggdGhlIGRldmljZQotICovCi1zdGF0aWMgdm9pZCBiZW5ldF92bGFuX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKLXsKLQlzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQliZV9kaXNhYmxlX2VxX2ludHIocG5vYik7Ci0JcG5vYi0+dmxhbl9ncnAgPSBncnA7Ci0JcG5vYi0+bnVtX3ZsYW5zID0gMDsKLQliZV9lbmFibGVfZXFfaW50cihwbm9iKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGRyaXZlciBlbnRyeSBwb2ludCB0byBhZGQgYSB2bGFuIHZsYW5faWQKLSAqIHdpdGggdGhlIGRldmljZSBuZXRkZXYKLSAqLwotc3RhdGljIHZvaWQgYmVuZXRfdmxhbl9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2bGFuX2lkKQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChwbm9iLT5udW1fdmxhbnMgPT0gKEJFX05VTV9WTEFOX1NVUFBPUlRFRCAtIDEpKSB7Ci0JCS8qIG5vICB3YXkgdG8gcmV0dXJuIGFuIGVycm9yICovCi0JCWRldl9pbmZvKCZuZXRkZXYtPmRldiwKLQkJICAgICAgICJCbGFkZUVuZ2luZTogQ2Fubm90IGNvbmZpZ3VyZSBtb3JlIHRoYW4gJWQgVmxhbnNcbiIsCi0JCQkgICAgICAgQkVfTlVNX1ZMQU5fU1VQUE9SVEVEKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBUaGUgbmV3IHZsYW4gdGFnIHdpbGwgYmUgaW4gdGhlIHNsb3QgaW5kaWNhdGVkIGJ5IG51bV92bGFucy4gKi8KLQlwbm9iLT52bGFuX3RhZ1twbm9iLT5udW1fdmxhbnMrK10gPSB2bGFuX2lkOwotCWJlX3J4Zl92bGFuX2NvbmZpZygmcG5vYi0+Zm5fb2JqLCBmYWxzZSwgcG5vYi0+bnVtX3ZsYW5zLAotCQkJICAgcG5vYi0+dmxhbl90YWcsIE5VTEwsIE5VTEwsIE5VTEwpOwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgZHJpdmVyIGVudHJ5IHBvaW50IHRvIHJlbW92ZSBhIHZsYW4gdmxhbl9pZAotICogd2l0aCB0aGUgZGV2aWNlIG5ldGRldgotICovCi1zdGF0aWMgdm9pZCBiZW5ldF92bGFuX3JlbV92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZsYW5faWQpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JdTMyIGksIHZhbHVlOwotCi0JLyoKLQkgKiBJbiBCbGFkZSBFbmdpbmUsIHdlIHN1cHBvcnQgMzIgdmxhbiB0YWcgZmlsdGVycyBhY3Jvc3MgYm90aCBwb3J0cy4KLQkgKiBUbyBwcm9ncmFtIGEgdmxhbiB0YWcsIHRoZSBSWEZfUlRQUl9DU1IgcmVnaXN0ZXIgaXMgdXNlZC4KLQkgKiBFYWNoIDMyLWJpdCB2YWx1ZSBvZiBSWEZfUlREUl9DU1IgY2FuIGFkZHJlc3MgMiB2bGFuIHRhZyBlbnRyaWVzLgotCSAqIFRoZSBWbGFuIHRhYmxlIGlzIG9mIGRlcHRoIDE2LiB0aHVzIHdlIHN1cHBvcnQgMzIgdGFncy4KLQkgKi8KLQotCXZhbHVlID0gdmxhbl9pZCB8IFZMQU5fVkFMSURfQklUOwotCWZvciAoaSA9IDA7IGkgPCBCRV9OVU1fVkxBTl9TVVBQT1JURUQ7IGkrKykgewotCQlpZiAocG5vYi0+dmxhbl90YWdbaV0gPT0gdmxhbl9pZCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IEJFX05VTV9WTEFOX1NVUFBPUlRFRCkKLQkJcmV0dXJuOwotCS8qIE5vdyBjb21wYWN0IHRoZSB2bGFuIHRhZyBhcnJheSBieSByZW1vdmluZyBob2xlIGNyZWF0ZWQuICovCi0Jd2hpbGUgKChpICsgMSkgPCBCRV9OVU1fVkxBTl9TVVBQT1JURUQpIHsKLQkJcG5vYi0+dmxhbl90YWdbaV0gPSBwbm9iLT52bGFuX3RhZ1tpICsgMV07Ci0JCWkrKzsKLQl9Ci0JaWYgKChpICsgMSkgPT0gQkVfTlVNX1ZMQU5fU1VQUE9SVEVEKQotCQlwbm9iLT52bGFuX3RhZ1tpXSA9ICh1MTYpIDB4MDsKLQlwbm9iLT5udW1fdmxhbnMtLTsKLQliZV9yeGZfdmxhbl9jb25maWcoJnBub2ItPmZuX29iaiwgZmFsc2UsIHBub2ItPm51bV92bGFucywKLQkJCSAgIHBub2ItPnZsYW5fdGFnLCBOVUxMLCBOVUxMLCBOVUxMKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHByb2dyYW0gbXVsdGljYXN0Ci0gKiBhZGRyZXNzIGluIHRoZSBtdWx0aWNhc3QgZmlsdGVyIG9mIHRoZSBBU0lDLgotICovCi1zdGF0aWMgdm9pZCBiZV9zZXRfbXVsdGljYXN0X2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQl1OCBtYWNfYWRkclszMl1bRVRIX0FMRU5dOwotCWludCBpOwotCi0JaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJLyogc2V0IEJFIGluIE11bHRpY2FzdCBwcm9taXNjdW91cyAqLwotCQliZV9yeGZfbXVsdGljYXN0X2NvbmZpZygmcG5vYi0+Zm5fb2JqLCB0cnVlLCAwLCBOVUxMLCBOVUxMLAotCQkJCQlOVUxMLCBOVUxMKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0LCBpID0gMDsgbWNfcHRyOwotCSAgICAgbWNfcHRyID0gbWNfcHRyLT5uZXh0LCBpKyspIHsKLQkJbWVtY3B5KCZtYWNfYWRkcltpXVswXSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotCX0KLQotCS8qIHJlc2V0IHRoZSBwcm9taXNjdW91cyBtb2RlIGFsc28uICovCi0JYmVfcnhmX211bHRpY2FzdF9jb25maWcoJnBub2ItPmZuX29iaiwgZmFsc2UsIGksCi0JCQkJJm1hY19hZGRyWzBdWzBdLCBOVUxMLCBOVUxMLCBOVUxMKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGRyaXZlciBlbnRyeSBwb2ludCB0byBzZXQgbXVsdGljYXN0IGxpc3QKLSAqIHdpdGggdGhlIGRldmljZSBuZXRkZXYuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvCi0gKiBzZXQgcHJvbWlzY3VvdXMgbW9kZSBvciBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZQotICogb3IgbXVsdGljYXN0IG1vZGUuLi4uCi0gKi8KLXN0YXRpYyB2b2lkIGJlbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJYmVfcnhmX3Byb21pc2N1b3VzKCZwbm9iLT5mbl9vYmosIDEsIDEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWJlX3J4Zl9wcm9taXNjdW91cygmcG5vYi0+Zm5fb2JqLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJYmVfc2V0X211bHRpY2FzdF9maWx0ZXIobmV0ZGV2KTsKLQl9Ci19Ci0KLWludCBiZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcG5vYi0+YWRhcHRlcjsKLQotCWV0aGVyX3NldHVwKG5ldGRldik7Ci0KLQluZXRkZXYtPm9wZW4gPSAmYmVuZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmYmVuZXRfY2xvc2U7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYmVuZXRfeG1pdDsKLQotCW5ldGRldi0+Z2V0X3N0YXRzID0gJmJlbmV0X2dldF9zdGF0czsKLQotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmJlbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZiZW5ldF9jaGFuZ2VfbXR1OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gJmJlbmV0X3NldF9tYWNfYWRkcjsKLQotCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGJlbmV0X3ZsYW5fcmVnaXN0ZXI7Ci0JbmV0ZGV2LT52bGFuX3J4X2FkZF92aWQgPSBiZW5ldF92bGFuX2FkZF92aWQ7Ci0JbmV0ZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gYmVuZXRfdmxhbl9yZW1fdmlkOwotCi0JbmV0ZGV2LT5mZWF0dXJlcyA9Ci0JICAgIE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1RTTyB8Ci0JICAgIE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfCBORVRJRl9GX0lQX0NTVU07Ci0KLQluZXRkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7Ci0KLQkvKiBJZiBkZXZpY2UgaXMgREFDIENhcGFibGUsIHNldCB0aGUgSElHSERNQSBmbGFnIGZvciBuZXRkZXZpY2UuICovCi0JaWYgKGFkYXB0ZXItPmRtYV82NGJpdF9jYXApCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCi0JU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJmJlX2V0aHRvb2xfb3BzKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9iZW5ldC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlbmV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTFmMDguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2JlbmV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2lmbmRlZiBfQkVORVRfSF8KLSNkZWZpbmUgX0JFTkVUX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgotI2luY2x1ZGUgImh3bGliLmgiCi0KLSNkZWZpbmUgX1NBX01PRFVMRV9OQU1FICJuZXQtZHJpdmVyIgotCi0jZGVmaW5lIFZMQU5fVkFMSURfQklUCQkweDgwMDAKLSNkZWZpbmUgQkVfTlVNX1ZMQU5fU1VQUE9SVEVECTMyCi0jZGVmaW5lIEJFX1BPUlRfTElOS19ET1dOICAgICAgIDAwMDAKLSNkZWZpbmUgQkVfUE9SVF9MSU5LX1VQICAgICAgICAgMDAwMQotI2RlZmluZQlCRV9NQVhfVFhfRlJBR19DT1VOVAkJKDMwKQotCi0vKiBGbGFnIGJpdHMgZm9yIHNlbmQgb3BlcmF0aW9uICovCi0jZGVmaW5lIElQQ1MgICAgICAgICAgICAoMSA8PCAwKQkvKiBFbmFibGUgSVAgY2hlY2tzdW0gb2ZmbG9hZCAqLwotI2RlZmluZSBVRFBDUyAgICAgICAgICAgKDEgPDwgMSkJLyogRW5hYmxlIFVEUCBjaGVja3N1bSBvZmZsb2FkICovCi0jZGVmaW5lIFRDUENTICAgICAgICAgICAoMSA8PCAyKQkvKiBFbmFibGUgVENQIGNoZWNrc3VtIG9mZmxvYWQgKi8KLSNkZWZpbmUgTFNPICAgICAgICAgICAgICgxIDw8IDMpCS8qIEVuYWJsZSBMYXJnZSBTZWdtZW50ICBvZmZsb2FkICovCi0jZGVmaW5lIEVUSFZMQU4gICAgICAgICAoMSA8PCA0KQkvKiBFbmFibGUgVkxBTiBpbnNlcnQgKi8KLSNkZWZpbmUgRVRIRVZFTlQgICAgICAgICgxIDw8IDUpCS8qIEdlbmVyYXRlICBldmVudCBvbiBjb21wbGV0aW9uICovCi0jZGVmaW5lIEVUSENPTVBMRVRFICAgICAoMSA8PCA2KQkvKiBHZW5lcmF0ZSBjb21wbGV0aW9uIHdoZW4gZG9uZSAqLwotI2RlZmluZSBJUFNFQyAgICAgICAgICAgKDEgPDwgNykJLyogRW5hYmxlIElQU0VDICovCi0jZGVmaW5lIEZPUldBUkQgICAgICAgICAoMSA8PCA4KQkvKiBTZW5kIHRoZSBwYWNrZXQgaW4gZm9yd2FyZGluZyBwYXRoICovCi0jZGVmaW5lIEZJTiAgICAgICAgICAgICAoMSA8PCA5KQkvKiBJc3N1ZSBGSU4gc2VnbWVudCAqLwotCi0jZGVmaW5lIEJFX01BWF9NVFUJODk3NAotCi0jZGVmaW5lIEJFX01BWF9MUk9fREVTQ1JJUFRPUlMJCQk4Ci0jZGVmaW5lIEJFX0xST19NQVhfUEtUUwkJCQk2NAotI2RlZmluZSBCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FCQkJNgotCi1leHRlcm4gY29uc3QgY2hhciBiZV9kcnZyX3ZlcltdOwotZXh0ZXJuIGNoYXIgYmVfZndfdmVyW107Ci1leHRlcm4gY2hhciBiZV9kcml2ZXJfbmFtZVtdOwotCi1leHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwotCi0jZGVmaW5lIEJFX0RFVl9TVEFURV9OT05FIDAKLSNkZWZpbmUgQkVfREVWX1NUQVRFX0lOSVQgMQotI2RlZmluZSBCRV9ERVZfU1RBVEVfT1BFTiAyCi0jZGVmaW5lIEJFX0RFVl9TVEFURV9TVVNQRU5EIDMKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXNjcmliZSBwaHlzaWNhbCBmcmFnbWVudHMgdG8gdXNlCi0gKiBmb3IgRE1BaW5nIGRhdGEgZnJvbSBOSUMuCi0gKi8KLXN0cnVjdCBiZV9yZWN2X2J1ZmZlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCByeGJfbGlzdDsJLyogZm9yIG1haW50YWluaW5nIGEgbGlua2VkIGxpc3QgKi8KLQl2b2lkICpyeGJfdmE7CQkvKiBidWZmZXIgdmlydHVhbCBhZGRyZXNzICovCi0JdTMyIHJ4Yl9wYV9sbzsJCS8qIGxvdyBwYXJ0IG9mIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl1MzIgcnhiX3BhX2hpOwkJLyogaGlnaCBwYXJ0IG9mIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl1MzIgcnhiX2xlbjsJCS8qIGxlbmd0aCBvZiByZWN2IGJ1ZmZlciAqLwotCXZvaWQgKnJ4Yl9jdHh0OwkJLyogY29udGV4dCBmb3IgT1NNIGRyaXZlciB0byB1c2UgKi8KLX07Ci0KLS8qCi0gKiBmcmFnbWVudCBsaXN0IHRvIGRlc2NyaWJlIHNjYXR0ZXJlZCBkYXRhLgotICovCi1zdHJ1Y3QgYmVfdHhfZnJhZ19saXN0IHsKLQl1MzIgdHhiX2xlbjsJCS8qIFNpemUgb2YgdGhpcyBmcmFnbWVudCAqLwotCXUzMiB0eGJfcGFfbG87CQkvKiBMb3dlciAzMiBiaXRzIG9mIDY0IGJpdCBwaHlzaWNhbCBhZGRyICovCi0JdTMyIHR4Yl9wYV9oaTsJCS8qIEhpZ2hlciAzMiBiaXRzIG9mIDY0IGJpdCBwaHlzaWNhbCBhZGRyICovCi19OwotCi1zdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlkbWFfYWRkcl90IGJ1czsKLQl1MTYgcGFnZV9vZmZzZXQ7Ci19OwotCi0vKgotICogIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBtYWluIHRyYWNraW5nIHN0cnVjdHVyZSBmb3IgYSBOSUMgaW50ZXJmYWNlLgotICovCi1zdHJ1Y3QgYmVfbmV0X29iamVjdCB7Ci0JLyogTUNDIFJpbmcgLSB1c2VkIHRvIHNlbmQgZndjbWRzIHRvIGVtYmVkZGVkIEFSTSBwcm9jZXNzb3IgKi8KLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICptY2NfcTsJLyogVkEgb2YgdGhlIHN0YXJ0IG9mIHRoZSByaW5nICovCi0JdTMyIG1jY19xX2xlbjsJCQkvKiAjIG9mIFdSQiBlbnRyaWVzIGluIHRoaXMgcmluZyAqLwotCXUzMiBtY2NfcV9zaXplOwotCXUzMiBtY2NfcV9oZDsJCQkvKiBNQ0MgcmluZyBoZWFkICovCi0JdTggbWNjX3FfY3JlYXRlZDsJCS8qIGZsYWcgdG8gaGVscCBjbGVhbnVwICovCi0Jc3RydWN0IGJlX21jY19vYmplY3QgbWNjX3Ffb2JqOwkvKiBCRUNMSUIncyBNQ0MgcmluZyBPYmplY3QgKi8KLQlkbWFfYWRkcl90IG1jY19xX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQotCS8qIE1DQyBDb21wbGV0aW9uIFJpbmcgLSBGVyByZXNwb25zZXMgdG8gZndjbWRzIHNlbnQgZnJvbSBNQ0MgcmluZyAqLwotCXN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCAqbWNjX2NxOyAvKiBWQSBvZiB0aGUgc3RhcnQgb2YgdGhlIHJpbmcgKi8KLQl1MzIgbWNjX2NxX2xlbjsJCQkvKiAjIG9mIGNvbXBsLiBlbnRyaWVzIGluIHRoaXMgcmluZyAqLwotCXUzMiBtY2NfY3Ffc2l6ZTsKLQl1MzIgbWNjX2NxX3RsOwkJCS8qIGNvbXBsLiByaW5nIHRhaWwgKi8KLQl1OCBtY2NfY3FfY3JlYXRlZDsJCS8qIGZsYWcgdG8gaGVscCBjbGVhbnVwICovCi0Jc3RydWN0IGJlX2NxX29iamVjdCBtY2NfY3Ffb2JqOwkvKiBCRUNMSUIncyBNQ0MgY29tcGwuIHJpbmcgb2JqZWN0ICovCi0JdTMyIG1jY19jcV9pZDsJCQkvKiBNQ0MgcmluZyBJRCAqLwotCWRtYV9hZGRyX3QgbWNjX2NxX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQotCXN0cnVjdCByaW5nX2Rlc2MgbWJfcmQ7CQkvKiBSRCBmb3IgTUNDX01BSUxfQk9YICovCi0Jdm9pZCAqbWJfcHRyOwkJCS8qIG1haWxib3ggcHRyIHRvIGJlIGZyZWVkICAqLwotCWRtYV9hZGRyX3QgbWJfYnVzOwkJLyogRE1BJ2JsZSBidXMgYWRkcmVzcyAqLwotCXUzMiBtYl9zaXplOwotCi0JLyogQkVDbGliIHVzZXMgYW4gYXJyYXkgb2YgY29udGV4dCBvYmplY3RzIHRvIHRyYWNrIG91dHN0YW5kaW5nCi0JICogcmVxdWVzdHMgdG8gdGhlIE1DQy4gIFdlIG5lZWQgYWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mCi0JICogY29uZXh0IGVudHJpZXMgYXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBNQ0MgV1JCIHJpbmcKLQkgKi8KLQl1MzIgbWNjX3dyYl9jdHh0X3NpemU7Ci0Jdm9pZCAqbWNjX3dyYl9jdHh0OwkJLyogcG9pbnRlciB0byB0aGUgY29udGV4dCBhcmVhICovCi0JdTMyIG1jY193cmJfY3R4dExlbjsJCS8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjb250ZXh0ICovCi0JLyoKLQkgKiBOSUMgc2VuZCByZXF1ZXN0IHJpbmcgLSB1c2VkIGZvciB4bWl0dGluZyByYXcgZXRoZXIgZnJhbWVzLgotCSAqLwotCXN0cnVjdCBFVEhfV1JCX0FNQVAgKnR4X3E7CS8qIFZBIG9mIHRoZSBzdGFydCBvZiB0aGUgcmluZyAqLwotCXUzMiB0eF9xX2xlbjsJCQkvKiAjIGlmIGVudHJpZXMgaW4gdGhlIHNlbmQgcmluZyAqLwotCXUzMiB0eF9xX3NpemU7Ci0JdTMyIHR4X3FfaGQ7CQkJLyogSGVhZCBpbmRleC4gTmV4dCByZXEuIGdvZXMgaGVyZSAqLwotCXUzMiB0eF9xX3RsOwkJCS8qIFRhaWwgaW5keC4gb2xkZXN0IG91dHN0YW5kaW5nIHJlcS4gKi8KLQl1OCB0eF9xX2NyZWF0ZWQ7CQkvKiBmbGFnIHRvIGhlbHAgY2xlYW51cCAqLwotCXN0cnVjdCBiZV9ldGhzcV9vYmplY3QgdHhfcV9vYmo7LyogQkVDTElCJ3Mgc2VuZCBRIGhhbmRsZSAqLwotCWRtYV9hZGRyX3QgdHhfcV9idXM7CQkvKiBETUEnYmxlIGJ1cyBhZGRyZXNzICovCi0JdTMyIHR4X3FfaWQ7CQkJLyogc2VuZCBxdWV1ZSByaW5nIElEICovCi0JdTMyIHR4X3FfcG9ydDsJCQkvKiAwIG5vIGJpbmRpbmcsIDEgcG9ydCBBLCAgMiBwb3J0IEIgKi8KLQlhdG9taWNfdCB0eF9xX3VzZWQ7CQkvKiAjIG9mIFdSQnMgdXNlZCAqLwotCS8qIHB0ciB0byBhbiBhcnJheSBpbiB3aGljaCB3ZSBzdG9yZSBjb250ZXh0IGluZm8gZm9yIGVhY2ggc2VuZCByZXEuICovCi0Jdm9pZCAqKnR4X2N0eHQ7Ci0JLyoKLQkgKiBOSUMgU2VuZCBjb21wbC4gcmluZyAtIGNvbXBsZXRpb24gc3RhdHVzIGZvciBhbGwgTklDIGZyYW1lcyB4bWl0dGVkLgotCSAqLwotCXN0cnVjdCBFVEhfVFhfQ09NUExfQU1BUCAqdHhfY3E7LyogVkEgb2Ygc3RhcnQgb2YgdGhlIHJpbmcgKi8KLQl1MzIgdHhjcV9sZW47CQkJLyogIyBvZiBlbnRyaWVzIGluIHRoZSByaW5nICovCi0JdTMyIHR4X2NxX3NpemU7Ci0JLyoKLQkgKiBpbmRleCBpbnRvIGNvbXBsIHJpbmcgd2hlcmUgdGhlIGhvc3QgZXhwZWN0cyBuZXh0IGNvbXBsZXRpb24gZW50cnkKLQkgKi8KLQl1MzIgdHhfY3FfdGw7Ci0JdTMyIHR4X2NxX2lkOwkJCS8qIGNvbXBsZXRpb24gcXVldWUgaWQgKi8KLQl1OCB0eF9jcV9jcmVhdGVkOwkJLyogZmxhZyB0byBoZWxwIGNsZWFudXAgKi8KLQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0IHR4X2NxX29iajsKLQlkbWFfYWRkcl90IHR4X2NxX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQkvKgotCSAqIEV2ZW50IFF1ZXVlIC0gYWxsIGNvbXBsZXRpb24gZW50cmllcyBwb3N0IGV2ZW50cyBoZXJlLgotCSAqLwotCXN0cnVjdCBFUV9FTlRSWV9BTUFQICpldmVudF9xOwkvKiBWQSBvZiBzdGFydCBvZiBldmVudCBxdWV1ZSAqLwotCXUzMiBldmVudF9xX2xlbjsJCS8qICMgb2YgZW50cmllcyAqLwotCXUzMiBldmVudF9xX3NpemU7Ci0JdTMyIGV2ZW50X3FfdGw7CQkJLyogVGFpbCBvZiB0aGUgZXZlbnQgcXVldWUgKi8KLQl1MzIgZXZlbnRfcV9pZDsJCQkvKiBFdmVudCBxdWV1ZSBJRCAqLwotCXU4IGV2ZW50X3FfY3JlYXRlZDsJCS8qIGZsYWcgdG8gaGVscCBjbGVhbnVwICovCi0Jc3RydWN0IGJlX2VxX29iamVjdCBldmVudF9xX29iajsgLyogUXVldWUgaGFuZGxlICovCi0JZG1hX2FkZHJfdCBldmVudF9xX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQkvKgotCSAqIE5JQyByZWNlaXZlIHF1ZXVlIC0gRGF0YSBidWZmZXJzIHRvIGJlIHVzZWQgZm9yIHJlY2VpdmluZyB1bmljYXN0LAotCSAqIGJyb2FkY2FzdCBhbmQgbXVsdGktY2FzdCBmcmFtZXMgIGFyZSBwb3N0ZWQgaGVyZS4KLQkgKi8KLQlzdHJ1Y3QgRVRIX1JYX0RfQU1BUCAqcnhfcTsJLyogVkEgb2Ygc3RhcnQgb2YgdGhlIHF1ZXVlICovCi0JdTMyIHJ4X3FfbGVuOwkJCS8qICMgb2YgZW50cmllcyAqLwotCXUzMiByeF9xX3NpemU7Ci0JdTMyIHJ4X3FfaGQ7CQkJLyogSGVhZCBvZiB0aGUgcXVldWUgKi8KLQlhdG9taWNfdCByeF9xX3Bvc3RlZDsJCS8qIG51bWJlciBvZiBwb3N0ZWQgYnVmZmVycyAqLwotCXUzMiByeF9xX2lkOwkJCS8qIHF1ZXVlIElEICovCi0JdTggcnhfcV9jcmVhdGVkOwkJLyogZmxhZyB0byBoZWxwIGNsZWFudXAgKi8KLQlzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0IHJ4X3Ffb2JqOwkvKiBOSUMgUlggcXVldWUgaGFuZGxlICovCi0JZG1hX2FkZHJfdCByeF9xX2J1czsJCS8qIERNQSdibGUgYnVzIGFkZHJlc3MgKi8KLQkvKgotCSAqIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygb3BhcXVlIGNvbnRleHQgb2JqZWN0IGZvciB1c2UgYnkgT1NNIGRyaXZlcgotCSAqLwotCXZvaWQgKipyeF9jdHh0OwotCS8qCi0JICogTklDIHVuaWNhc3QgUlggY29tcGxldGlvbiBxdWV1ZSAtIGFsbCB1bmljYXN0IGV0aGVyIGZyYW1lIGNvbXBsZXRpb24KLQkgKiBzdGF0dXNlcyBmcm9tIEJFIGNvbWUgaGVyZS4KLQkgKi8KLQlzdHJ1Y3QgRVRIX1JYX0NPTVBMX0FNQVAgKnJ4X2NxOwkvKiBWQSBvZiBzdGFydCBvZiB0aGUgcXVldWUgKi8KLQl1MzIgcnhfY3FfbGVuOwkJLyogIyBvZiBlbnRyaWVzICovCi0JdTMyIHJ4X2NxX3NpemU7Ci0JdTMyIHJ4X2NxX3RsOwkJCS8qIFRhaWwgb2YgdGhlIHF1ZXVlICovCi0JdTMyIHJ4X2NxX2lkOwkJCS8qIHF1ZXVlIElEICovCi0JdTggcnhfY3FfY3JlYXRlZDsJCS8qIGZsYWcgdG8gaGVscCBjbGVhbnVwICovCi0Jc3RydWN0IGJlX2NxX29iamVjdCByeF9jcV9vYmo7CS8qIHF1ZXVlIGhhbmRsZSAqLwotCWRtYV9hZGRyX3QgcnhfY3FfYnVzOwkJLyogRE1BJ2JsZSBidXMgYWRkcmVzcyAqLwotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgZm5fb2JqOwkvKiBmdW5jdGlvbiBvYmplY3QgICAqLwotCWJvb2wJZm5fb2JqX2NyZWF0ZWQ7Ci0JdTMyIHJ4X2J1Zl9zaXplOwkJLyogU2l6ZSBvZiB0aGUgUlggYnVmZmVycyAqLwotCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQlzdHJ1Y3QgYmVfcmVjdl9idWZmZXIgZXRoX3J4X2J1ZnNbMjU2XTsJLyogdG8gcGFzcyBSeCBidWZmZXIKLQkJCQkJCQkgICBhZGRyZXNzZXMgKi8KLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcjsJLyogUG9pbnRlciB0byBPU00gYWRhcHRlciAqLwotCXUzMiBkZXZubzsJCS8qIE9TTSwgbmV0d29yayBkZXYgbm8uICovCi0JdTMyIHVzZV9wb3J0OwkJLyogQ3VycmVudCBhY3RpdmUgcG9ydCAqLwotCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnJ4X3BhZ2VfaW5mbzsJLyogQXJyYXkgb2YgUnggYnVmIHBhZ2VzICovCi0JdTMyIHJ4X3BnX2luZm9faGQ7CS8qIEhlYWQgb2YgcXVldWUgKi8KLQlpbnQgcnhidWZfcG9zdF9mYWlsOwkvKiBSeEJ1ZmYgcG9zdGluZyBmYWlsIGNvdW50ICovCi0JYm9vbCByeF9wZ19zaGFyZWQ7CS8qIElzIGFuIGFsbG9jc3RlZCBwYWdlIHNoYXJlZCBhcyB0d28gZnJhZ3MgPyAqLwotCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dycDsKLQl1MzIgbnVtX3ZsYW5zOwkJLyogTnVtYmVyIG9mIHZsYW5zIGluIEJFJ3MgZmlsdGVyICovCi0JdTE2IHZsYW5fdGFnW0JFX05VTV9WTEFOX1NVUFBPUlRFRF07IC8qIHZsYW5zIGN1cnJlbnRseSBjb25maWd1cmVkICovCi0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7Ci0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0Jc3RydWN0IG5ldF9scm9fZGVzYyBscm9fZGVzY1tCRV9NQVhfTFJPX0RFU0NSSVBUT1JTXTsKLX07Ci0KLSNkZWZpbmUgTkVUX0ZIKG5wKSAgICAgICAoJihucCktPmZuX29iaikKLQotLyoKLSAqIEJFIGRyaXZlciBzdGF0aXN0aWNzLgotICovCi1zdHJ1Y3QgYmVfZHJ2cl9zdGF0IHsKLQl1MzIgYmVzX3R4X3JlcXM7CS8qIG51bWJlciBvZiBUWCByZXF1ZXN0cyBpbml0aWF0ZWQgKi8KLQl1MzIgYmVzX3R4X2ZhaWxzOwkvKiBudW1iZXIgb2YgVFggcmVxdWVzdHMgdGhhdCBmYWlsZWQgKi8KLQl1MzIgYmVzX2Z3ZF9yZXFzOwkvKiBudW1iZXIgb2Ygc2VuZCByZXFzIHRocm91Z2ggZm9yd2FyZGluZyBpL2YgKi8KLQl1MzIgYmVzX3R4X3dyYnM7CS8qIG51bWJlciBvZiB0eCBXUkJzIHVzZWQgKi8KLQotCXUzMiBiZXNfaW50czsJCS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzICovCi0JdTMyIGJlc19wb2xsczsJCS8qIG51bWJlciBvZiB0aW1lcyBOQVBJIGNhbGxlZCBwb2xsIGZ1bmN0aW9uICovCi0JdTMyIGJlc19ldmVudHM7CQkvKiB0b3RhbCBldmV0IGVudHJpZXMgcHJvY2Vzc2VkICovCi0JdTMyIGJlc190eF9ldmVudHM7CS8qIG51bWJlciBvZiB0eCBjb21wbGV0aW9uIGV2ZW50cyAgKi8KLQl1MzIgYmVzX3J4X2V2ZW50czsJLyogbnVtYmVyIG9mIHVjYXN0IHJ4IGNvbXBsZXRpb24gZXZlbnRzICAqLwotCXUzMiBiZXNfdHhfY29tcGw7CS8qIG51bWJlciBvZiB0eCBjb21wbGV0aW9uIGVudHJpZXMgcHJvY2Vzc2VkICovCi0JdTMyIGJlc19yeF9jb21wbDsJLyogbnVtYmVyIG9mIHJ4IGNvbXBsZXRpb24gZW50cmllcwotCQkJCSAgIHByb2Nlc3NlZCAqLwotCXUzMiBiZXNfZXRocnhfcG9zdF9mYWlsOwkvKiBudW1iZXIgb2YgZXRocnggYnVmZmVyIGFsbG9jCi0JCQkJCSAgIGZhaWx1cmVzICovCi0JLyoKLQkgKiBudW1iZXIgb2Ygbm9uIGV0aGVyIHR5cGUgSUkgZnJhbWVzIGRyb3BwZWQgd2hlcmUKLQkgKiBmcmFtZSBsZW4gPiBsZW5ndGggZmllbGQgb2YgTWFjIEhkcgotCSAqLwotCXUzMiBiZXNfODAyXzNfZHJvcHBlZF9mcmFtZXM7Ci0JLyoKLQkgKiBudW1iZXIgb2Ygbm9uIGV0aGVyIHR5cGUgSUkgZnJhbWVzIG1hbGZvcm1lZCB3aGVyZQotCSAqIGluIGZyYW1lIGxlbiA8IGxlbmd0aCBmaWVsZCBvZiBNYWMgSGRyCi0JICovCi0JdTMyIGJlc184MDJfM19tYWxmb3JtZWRfZnJhbWVzOwotCXUzMiBiZXNfaXBzOwkJLyogIGludGVycnVwdHMgLyBzZWMgKi8KLQl1MzIgYmVzX3ByZXZfaW50czsJLyogYmVzX2ludHMgYXQgbGFzdCBJUFMgY2FsY3VsYXRpb24gICovCi0JdTE2IGJlc19ldGhfdHhfcmF0ZTsJLyogIEVUSCBUWCByYXRlIC0gTWIvc2VjICovCi0JdTE2IGJlc19ldGhfcnhfcmF0ZTsJLyogIEVUSCBSWCByYXRlIC0gTWIvc2VjICovCi0JdTMyIGJlc19yeF9jb2FsOwkvKiBOdW0gcGt0cyBjb2FsYXNjZWQgKi8KLQl1MzIgYmVzX3J4X2ZsdXNoOwkvKiBOdW0gdGltZXMgY29hbGFzY2VkICovCi0JdTMyIGJlc19saW5rX2NoYW5nZV9waHlzaWNhbDsJLypOdW0gb2YgdGltZXMgcGh5c2ljYWwgbGluayBjaGFuZ2VkICovCi0JdTMyIGJlc19saW5rX2NoYW5nZV92aXJ0dWFsOwkvKk51bSBvZiB0aW1lcyB2aXJ0dWFsIGxpbmsgY2hhbmdlZCAqLwotCXUzMiBiZXNfcnhfbWlzY19wa3RzOwkvKiBNaXNjIHBrdHMgcmVjZWl2ZWQgKi8KLX07Ci0KLS8qIE1heGltdW0gaW50ZXJydXB0IGRlbGF5IChpbiBtaWNyb3NlY29uZHMpIGFsbG93ZWQgKi8KLSNkZWZpbmUgTUFYX0VRRAkJCQkxMjAKLQotLyoKLSAqIHRpbWVyIHRvIHByZXZlbnQgc3lzdGVtIHNodXRkb3duIGhhbmcgZm9yIGV2ZXIgaWYgaC93IHN0b3BzIHJlc3BvbmRpbmcKLSAqLwotc3RydWN0IGJlX3RpbWVyX2N0eHQgewotCWF0b21pY190IGdldF9zdGF0X2ZsYWc7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgZ2V0X3N0YXRzX3RpbWVyOwotCXVuc2lnbmVkIGxvbmcgZ2V0X3N0YXRfc2VtX2FkZHI7Ci19IDsKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIG1haW4gQmxhZGVFbmdpbmUgZHJpdmVyIGNvbnRleHQuICAqLwotc3RydWN0IGJlX2FkYXB0ZXIgewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZwOwotCXN0cnVjdCBiZV9kcnZyX3N0YXQgYmVfc3RhdDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBiZW5ldF9zdGF0czsKLQotCS8qIFBDSSBCQVIgbWFwcGVkIGFkZHJlc3NlcyAqLwotCXU4IF9faW9tZW0gKmNzcl92YTsJLyogQ1NSICovCi0JdTggX19pb21lbSAqZGJfdmE7CS8qIERvb3IgIEJlbGwgICovCi0JdTggX19pb21lbSAqcGNpX3ZhOwkvKiBQQ0kgQ29uZmlnICovCi0KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgc3RzX2hhbmRsZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgY3FfdGltZXI7Ci0Jc3BpbmxvY2tfdCBpbnRfbG9jazsJLyogdG8gcHJvdGVjdCB0aGUgaXNyIGZpZWxkIGluIGFkYXB0ZXIgKi8KLQotCXN0cnVjdCBGV0NNRF9FVEhfR0VUX1NUQVRJU1RJQ1MgKmV0aF9zdGF0c3A7Ci0JLyoKLQkgKiBUaGlzIHdpbGwgZW5hYmxlIHRoZSB1c2Ugb2YgZXRodG9vbCB0byBlbmFibGUgb3IgZGlzYWJsZQotCSAqIENoZWNrc3VtIG9uIFJ4IHBrdHMgdG8gYmUgb2JleWVkIG9yIGRpc29iZXllZC4KLQkgKiBJZiB0aGlzIGlzIHRydWUgPSAxLCB0aGVuIHdoYXRldmVyIGlzIHRoZSBjaGVja3N1bSBvbiB0aGUKLQkgKiBSZWNlaXZlZCBwa3QgYXMgcGVyIEJFLCBpdCB3aWxsIGJlIGdpdmVuIHRvIHRoZSBzdGFjay4KLQkgKiBFbHNlIHRoZSBzdGFjayB3aWxsIHJlIGNhbGN1bGF0ZSBpdC4KLQkgKi8KLQlib29sIHJ4X2NzdW07Ci0JLyoKLQkgKiBUaGlzIHdpbGwgZW5hYmxlIHRoZSB1c2Ugb2YgZXRodG9vbCB0byBlbmFibGUgb3IgZGlzYWJsZQotCSAqIENvYWxlc2Ugb24gUnggcGt0cyB0byBiZSBvYmV5ZWQgb3IgZGlzb2JleWVkLgotCSAqIElmIHRoaXMgaXMgZ3JhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDE2IHRoZW4gY29hbGFzY2luZwotCSAqIGlzIGVuYWJsZWQgZWxzZSBpdCBpcyBkaXNhYmxlZAotCSAqLwotCXUzMiBtYXhfcnhfY29hbDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJLyogUG9pbnRlciB0byBPUydzIFBDSSBkdmljZSAqLwotCi0Jc3BpbmxvY2tfdCB0eHFfbG9jazsJLyogdG8gc3RvcC93YWtlIHF1ZXVlIGJhc2VkIG9uIHR4X3FfdXNlZCAqLwotCi0JdTMyIGlzcjsJCS8qIGNvcHkgb2YgSW50ciBzdGF0dXMgcmVnLiAqLwotCi0JdTMyIHBvcnQwX2xpbmtfc3RzOwkvKiBQb3J0IDAgbGluayBzdGF0dXMgKi8KLQl1MzIgcG9ydDFfbGlua19zdHM7CS8qIHBvcnQgMSBsaXN0IHN0YXR1cyAqLwotCXN0cnVjdCBCRV9MSU5LX1NUQVRVUyAqYmVfbGlua19zdHM7Ci0KLQkvKiBwb2ludGVyIHRvIHRoZSBmaXJzdCBuZXRvYmplY3Qgb2YgdGhpcyBhZGFwdGVyICovCi0Jc3RydWN0IGJlX25ldF9vYmplY3QgKm5ldF9vYmo7Ci0KLQkvKiAgRmxhZ3MgdG8gaW5kaWNhdGUgd2hhdCB0byBjbGVhbiB1cCAqLwotCWJvb2wgdGFza2xldF9zdGFydGVkOwotCWJvb2wgaXNyX3JlZ2lzdGVyZWQ7Ci0JLyoKLQkgKiBhZGFwdGl2ZSBpbnRlcnJ1cHQgY29hbGVzY2luZyAoQUlDKSByZWxhdGVkCi0JICovCi0JYm9vbCBlbmFibGVfYWljOwkvKiAxIGlmIEFJQyBpcyBlbmFibGVkICovCi0JdTE2IG1pbl9lcWQ7CQkvKiBtaW5pbXVtIEVRIGRlbGF5IGluIHVzZWMgKi8KLQl1MTYgbWF4X2VxZDsJCS8qIG1pbmltdW0gRVEgZGVsYXkgaW4gdXNlYyAqLwotCXUxNiBjdXJfZXFkOwkJLyogY3VycmVudCBFUSBkZWxheSBpbiB1c2VjICovCi0JLyoKLQkgKiBib29rIGtlZXBpbmcgZm9yIGludGVycnVwdCAvIHNlYyBhbmQgVFgvUlggcmF0ZSBjYWxjdWxhdGlvbgotCSAqLwotCXVsb25nIGlwc19qaWZmaWVzOwkvKiBqaWZmaWVzIGF0IGxhc3QgSVBTIGNhbGMgKi8KLQl1MzIgZXRoX3R4X2J5dGVzOwotCXVsb25nIGV0aF90eF9qaWZmaWVzOwotCXUzMiBldGhfcnhfYnl0ZXM7Ci0JdWxvbmcgZXRoX3J4X2ppZmZpZXM7Ci0KLQlzdHJ1Y3Qgc2VtYXBob3JlIGdldF9ldGhfc3RhdF9zZW07Ci0KLQkvKiB0aW1lciBjdHh0IHRvIHByZXZlbnQgc2h1dGRvd24gaGFuZ2luZyBkdWUgdG8gdW4tcmVzcG9uc2l2ZSBCRSAqLwotCXN0cnVjdCBiZV90aW1lcl9jdHh0IHRpbWVyX2N0eHQ7Ci0KLSNkZWZpbmUgQkVfTUFYX01TSVhfVkVDVE9SUyAgICAgICAgICAgICAzMgotI2RlZmluZSBCRV9NQVhfUkVRX01TSVhfVkVDVE9SUyAgICAgICAgIDEgLyogb25seSBvbmUgRVEgaW4gTGludXggZHJpdmVyICovCi0Jc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW0JFX01BWF9NU0lYX1ZFQ1RPUlNdOwotCWJvb2wgbXNpeF9lbmFibGVkOwotCWJvb2wgZG1hXzY0Yml0X2NhcDsJLyogdGhlIERldmljZSBEQUMgY2FwYWJsZSAgb3Igbm90ICovCi0JdTggZGV2X3N0YXRlOwkvKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlICovCi0JdTggZGV2X3BtX3N0YXRlOyAvKiBUaGUgU3RhdGUgb2YgZGV2aWNlIGJlZm9yZSBnb2luZyB0byBzdXNwZW5kICovCi19OwotCi0vKgotICogRXZlcnkgc2Vjb25kIHdlIGxvb2sgYXQgdGhlIGludHMvc2VjIGFuZCBhZGp1c3QgZXFfZGVsYXkKLSAqIGJldHdlZW4gYWRhcHRlci0+bWluX2VxZCBhbmQgYWRhcHRlci0+bWF4X2VxZCB0byBrZWVwIHRoZSBpbnRzL3NlYyBiZXR3ZWVuCi0gKiBJUFNfSElfV00gYW5kIElQU19MT19XTS4KLSAqLwotI2RlZmluZSBJUFNfSElfV00JMTgwMDAKLSNkZWZpbmUgSVBTX0xPX1dNCTgwMDAKLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5kZXhfYWR2KHUzMiAqaW5kZXgsIHUzMiB2YWwsICB1MzIgbGltaXQpCi17Ci0JQlVHX09OKGxpbWl0ICYgKGxpbWl0LTEpKTsKLQkqaW5kZXggPSAoKmluZGV4ICsgdmFsKSAmIChsaW1pdCAtIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5kZXhfaW5jKHUzMiAqaW5kZXgsIHUzMiBsaW1pdCkKLXsKLQlCVUdfT04obGltaXQgJiAobGltaXQtMSkpOwotCSppbmRleCA9ICgqaW5kZXggKyAxKSAmIChsaW1pdCAtIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfYWR2X2VxX3RsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWluZGV4X2luYygmcG5vYi0+ZXZlbnRfcV90bCwgcG5vYi0+ZXZlbnRfcV9sZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfYWR2X3R4cV9oZChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbmRleF9pbmMoJnBub2ItPnR4X3FfaGQsIHBub2ItPnR4X3FfbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX2Fkdl90eHFfdGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW5kZXhfaW5jKCZwbm9iLT50eF9xX3RsLCBwbm9iLT50eF9xX2xlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV9hZHZfdHhjcV90bChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqcG5vYikKLXsKLQlpbmRleF9pbmMoJnBub2ItPnR4X2NxX3RsLCBwbm9iLT50eGNxX2xlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV9hZHZfcnhxX2hkKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCWluZGV4X2luYygmcG5vYi0+cnhfcV9oZCwgcG5vYi0+cnhfcV9sZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfYWR2X3J4Y3FfdGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IpCi17Ci0JaW5kZXhfaW5jKCZwbm9iLT5yeF9jcV90bCwgcG5vYi0+cnhfY3FfbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgdHhfY29tcGxfbGFzdHdyYl9pZHhfZ2V0KHN0cnVjdCBiZV9uZXRfb2JqZWN0ICpwbm9iKQotewotCXJldHVybiAocG5vYi0+dHhfcV90bCArICoodTMyICopJnBub2ItPnR4X2N0eHRbcG5vYi0+dHhfcV90bF0gLSAxKQotCQkgICAgJiAocG5vYi0+dHhfcV9sZW4gLSAxKTsKLX0KLQotaW50IGJlbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1pbnQgYmVfZXRodG9vbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKik7Ci1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmVuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwotdm9pZCBiZV9wcm9jZXNzX2ludHIodW5zaWduZWQgbG9uZyBjb250ZXh0KTsKLWlycXJldHVybl90IGJlX2ludChpbnQgaXJxLCB2b2lkICpkZXYpOwotdm9pZCBiZV9wb3N0X2V0aF9yeF9idWZmcyhzdHJ1Y3QgYmVfbmV0X29iamVjdCAqKTsKLXZvaWQgYmVfZ2V0X3N0YXRfY2Iodm9pZCAqLCBpbnQsIHN0cnVjdCBNQ0NfV1JCX0FNQVAgKik7Ci12b2lkIGJlX2dldF9zdGF0c190aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBiZV93YWl0X25pY190eF9jbXBseF9jbXBsKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICopOwotdm9pZCBiZV9wcmludF9saW5rX2luZm8oc3RydWN0IEJFX0xJTktfU1RBVFVTICopOwotdm9pZCBiZV91cGRhdGVfbGlua19zdGF0dXMoc3RydWN0IGJlX2FkYXB0ZXIgKik7Ci12b2lkIGJlX2luaXRfcHJvY2ZzKHN0cnVjdCBiZV9hZGFwdGVyICopOwotdm9pZCBiZV9jbGVhbnVwX3Byb2NmcyhzdHJ1Y3QgYmVfYWRhcHRlciAqKTsKLWludCBiZV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwotc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQICpiZV9nZXRfcnhfY21wbChzdHJ1Y3QgYmVfbmV0X29iamVjdCAqKTsKLXZvaWQgYmVfbm90aWZ5X2NtcGwoc3RydWN0IGJlX25ldF9vYmplY3QgKiwgaW50LCBpbnQsIGludCk7Ci12b2lkIGJlX2VuYWJsZV9pbnRyKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICopOwotdm9pZCBiZV9lbmFibGVfZXFfaW50cihzdHJ1Y3QgYmVfbmV0X29iamVjdCAqKTsKLXZvaWQgYmVfZGlzYWJsZV9pbnRyKHN0cnVjdCBiZV9uZXRfb2JqZWN0ICopOwotdm9pZCBiZV9kaXNhYmxlX2VxX2ludHIoc3RydWN0IGJlX25ldF9vYmplY3QgKik7Ci1pbnQgYmVfc2V0X3VjX21hY19hZHIoc3RydWN0IGJlX25ldF9vYmplY3QgKiwgdTgsIHU4LCB1OCwKLQkJICAgIHU4ICosIG1jY193cmJfY3FlX2NhbGxiYWNrLCB2b2lkICopOwotaW50IGJlX2dldF9mbG93X2N0bChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwRm5PYmosIGJvb2wgKiwgYm9vbCAqKTsKLXZvaWQgcHJvY2Vzc19vbmVfdHhfY29tcGwoc3RydWN0IGJlX25ldF9vYmplY3QgKnBub2IsIHUzMiBlbmRfaWR4KTsKLQotI2VuZGlmIC8qIF9CRU5FVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Jlc3RhdHVzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvYmVzdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTljN2E0YjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Jlc3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2lmbmRlZiBfQkVTVEFUVVNfSF8KLSNkZWZpbmUgX0JFU1RBVFVTX0hfCi0KLSNkZWZpbmUgQkVfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMEwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9QRU5ESU5HCi0gKiAgVGhlIEJsYWRlRW5naW5lIERyaXZlciBjYWxsIHN1Y2NlZWRlZCwgYW5kIHBlbmRlZCBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgQkVfUEVORElORyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwNzAwMDFMKQotI2RlZmluZSBCRV9TVEFUVVNfUEVORElORyAgICAgICAgICAgICAgICAoQkVfUEVORElORykKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX05PVF9PSwotICogIEFuIGVycm9yIG9jY3VycmVkLgotICovCi0jZGVmaW5lIEJFX05PVF9PSyAgICAgICAgICAgICAgICAgICAgICAgICgweEUwMDcwMDAyTCkKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19TWVNURU1fUkVTT1VSQ0VTCi0gKiAgSW5zdWZmaWNpZW50IGhvc3Qgc3lzdGVtIHJlc291cmNlcyBleGlzdCB0byBjb21wbGV0ZSB0aGUgQVBJLgotICovCi0jZGVmaW5lIEJFX1NUQVRVU19TWVNURU1fUkVTT1VSQ0VTICAgICAgICgweEUwMDcwMDAzTCkKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19DSElQX1JFU09VUkNFUwotICogIEluc3VmZmljaWVudCBjaGlwIHJlc291cmNlcyBleGlzdCB0byBjb21wbGV0ZSB0aGUgQVBJLgotICovCi0jZGVmaW5lIEJFX1NUQVRVU19DSElQX1JFU09VUkNFUyAgICAgICAgICgweEUwMDcwMDA0TCkKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19OT19SRVNPVVJDRQotICogIEluc3VmZmljaWVudCByZXNvdXJjZXMgdG8gY29tcGxldGUgcmVxdWVzdC4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfTk9fUkVTT1VSQ0UgICAgICAgICAgICAoMHhFMDA3MDAwNUwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfQlVTWQotICogIFJlc291cmNlIGlzIGN1cnJlbnRseSBidXN5LgotICovCi0jZGVmaW5lIEJFX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgICgweEUwMDcwMDA2TCkKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUgotICogIEludmFsaWQgUGFyYW1ldGVyIGluIHJlcXVlc3QuCi0gKi8KLSNkZWZpbmUgQkVfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSICAgICAgKDB4RTAwMDAwMDdMKQotLyoKLSAqIE1lc3NhZ2VJZDogQkVfU1RBVFVTX05PVF9TVVBQT1JURUQKLSAqICBSZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gKi8KLSNkZWZpbmUgQkVfU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgICAgKDB4RTAwMDAwMERMKQotCi0vKgotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgIEUgVCBIIEUgUiBOIEUgVCAgIFMgVCBBIFQgVSBTCi0gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0vKgotICogTWVzc2FnZUlkOiBCRV9FVEhfVFhfRVJST1IKLSAqICBUaGUgRXRoZXJuZXQgZGV2aWNlIGRyaXZlciBmYWlsZWQgdG8gdHJhbnNtaXQgYSBwYWNrZXQuCi0gKi8KLSNkZWZpbmUgQkVfRVRIX1RYX0VSUk9SICAgICAgICAgICAgICAgICAgKDB4RTAwNzAxMDFMKQotCi0vKgotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgIFMgSCBBIFIgRSBEICAgUyBUIEEgVCBVIFMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi0KLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19WQkRfSU5WQUxJRF9WRVJTSU9OCi0gKiAgVGhlIGRldmljZSBkcml2ZXIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlIFZCRC4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfSU5WQUxJRF9WRVJTSU9OICAgICgweEUwMDcwNDAyTCkKLS8qCi0gKiBNZXNzYWdlSWQ6IEJFX1NUQVRVU19ET01BSU5fREVOSUVECi0gKiAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgZHVlIHRvIGluc3VmZmljaWVudCBhY2Nlc3MKLSAqICByaWdodHMgZm9yIHRoZSByZXF1ZXN0aW5nIGRvbWFpbi4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfRE9NQUlOX0RFTklFRCAgICAgICAgICAoMHhFMDA3MDQwM0wpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfVENQX05PVF9TVEFSVEVECi0gKiAgVGhlIGVtYmVkZGVkIFRDUC9JUCBzdGFjayBoYXMgbm90IGJlZW4gc3RhcnRlZC4KLSAqLwotI2RlZmluZSBCRV9TVEFUVVNfVENQX05PVF9TVEFSVEVEICAgICAgICAoMHhFMDA3MDQwOUwpCi0vKgotICogTWVzc2FnZUlkOiBCRV9TVEFUVVNfTk9fTUNDX1dSQgotICogIE5vIGZyZWUgTUNDIFdSQiBhcmUgYXZhaWxhYmxlIGZvciBwb3N0aW5nIHRoZSByZXF1ZXN0LgotICovCi0jZGVmaW5lIEJFX1NUQVRVU19OT19NQ0NfV1JCICAgICAgICAgICAgICAgICAoMHhFMDA3MDQxNEwpCi0KLSNlbmRpZiAvKiBfQkVTVEFUVVNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvY2V2LmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvY2V2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOTk2OTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Nldi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19jZXZfYW1hcF9oX18KLSNkZWZpbmUgX19jZXZfYW1hcF9oX18KLSNpbmNsdWRlICJlcC5oIgotCi0vKgotICogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDAuIFRoZSBmaXJzdCBvZiBmb3VyIGFwcGxpY2F0aW9uCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycy4gVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgaW50ZXJydXB0cwotICogZm9yIEV2ZW50IFF1ZXVlcyBFUTAgdGhyb3VnaCBFUTMxLgotICovCi1zdHJ1Y3QgQkVfQ0VWX0lTUjBfQ1NSX0FNQVAgewotCXU4IGludGVycnVwdDA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDM7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDY7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDk7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxMDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDExOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxMzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDE0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxNjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDE3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQxOTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDIwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MjE7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyMjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDIzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MjQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyNTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDI2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Mjc7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQyODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDI5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MzA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQzMTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBDRVZfSVNSMF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAxLiBUaGUgc2Vjb25kIG9mIGZvdXIgYXBwbGljYXRpb24KLSAqIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBpbnRlcnJ1cHRzCi0gKiBmb3IgRXZlbnQgUXVldWVzIEVRMzIgdGhyb3VnaCBFUTYzLgotICovCi1zdHJ1Y3QgQkVfQ0VWX0lTUjFfQ1NSX0FNQVAgewotCXU4IGludGVycnVwdDMyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MzM7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQzNDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDM1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MzY7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQzNzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDM4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Mzk7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0MDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDQxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0MzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDQ0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0NjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDQ3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NDg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ0OTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDUwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTE7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1MjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDUzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1NTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDU2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NTc7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ1ODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDU5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NjA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ2MTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDYyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NjM7CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgQ0VWX0lTUjFfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0vKgotICogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDIuIFRoZSB0aGlyZCBvZiBmb3VyIGFwcGxpY2F0aW9uCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycy4gVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgaW50ZXJydXB0cwotICogZm9yIEV2ZW50IFF1ZXVlcyBFUTY0IHRocm91Z2ggRVE5NS4KLSAqLwotc3RydWN0IEJFX0NFVl9JU1IyX0NTUl9BTUFQIHsKLQl1OCBpbnRlcnJ1cHQ2NDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDY1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NjY7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ2NzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDY4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Njk7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3MDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDcxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NzI7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3MzsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDc0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0NzU7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3NjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDc3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0Nzg7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ3OTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDgwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODE7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4MjsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDgzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODQ7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4NTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDg2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0ODc7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ4ODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDg5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0OTA7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5MTsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDkyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0OTM7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5NDsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDk1OwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IENFVl9JU1IyX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKgotICogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDMuIFRoZSBmb3VydGggb2YgZm91ciBhcHBsaWNhdGlvbgotICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGludGVycnVwdHMKLSAqIGZvciBFdmVudCBRdWV1ZXMgRVE5NiB0aHJvdWdoIEVRMTI3LgotICovCi1zdHJ1Y3QgQkVfQ0VWX0lTUjNfQ1NSX0FNQVAgewotCXU4IGludGVycnVwdDk2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0OTc7CS8qIERXT1JEIDAgKi8KLQl1OCBpbnRlcnJ1cHQ5ODsJLyogRFdPUkQgMCAqLwotCXU4IGludGVycnVwdDk5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTAwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTAxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTAyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTAzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTA5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTEwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTExOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTEyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTEzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTE0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTE1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTE2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTE3OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTE4OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTE5OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTIwOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTIxOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTIyOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTIzOwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTI0OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTI1OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTI2OwkvKiBEV09SRCAwICovCi0JdTggaW50ZXJydXB0MTI3OwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IENFVl9JU1IzX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiAgQ29tcGxldGlvbnMgYW5kIEV2ZW50cyBibG9jayBSZWdpc3RlcnMuICAqLwotc3RydWN0IEJFX0NFVl9DU1JNQVBfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMzJdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDJbMzJdOwkvKiBEV09SRCAyICovCi0JdTggcnN2ZDNbMzJdOwkvKiBEV09SRCAzICovCi0Jc3RydWN0IEJFX0NFVl9JU1IwX0NTUl9BTUFQIGlzcjA7Ci0Jc3RydWN0IEJFX0NFVl9JU1IxX0NTUl9BTUFQIGlzcjE7Ci0Jc3RydWN0IEJFX0NFVl9JU1IyX0NTUl9BTUFQIGlzcjI7Ci0Jc3RydWN0IEJFX0NFVl9JU1IzX0NTUl9BTUFQIGlzcjM7Ci0JdTggcnN2ZDRbMzJdOwkvKiBEV09SRCA4ICovCi0JdTggcnN2ZDVbMzJdOwkvKiBEV09SRCA5ICovCi0JdTggcnN2ZDZbMzJdOwkvKiBEV09SRCAxMCAqLwotCXU4IHJzdmQ3WzMyXTsJLyogRFdPUkQgMTEgKi8KLQl1OCByc3ZkOFszMl07CS8qIERXT1JEIDEyICovCi0JdTggcnN2ZDlbMzJdOwkvKiBEV09SRCAxMyAqLwotCXU4IHJzdmQxMFszMl07CS8qIERXT1JEIDE0ICovCi0JdTggcnN2ZDExWzMyXTsJLyogRFdPUkQgMTUgKi8KLQl1OCByc3ZkMTJbMzJdOwkvKiBEV09SRCAxNiAqLwotCXU4IHJzdmQxM1szMl07CS8qIERXT1JEIDE3ICovCi0JdTggcnN2ZDE0WzMyXTsJLyogRFdPUkQgMTggKi8KLQl1OCByc3ZkMTVbMzJdOwkvKiBEV09SRCAxOSAqLwotCXU4IHJzdmQxNlszMl07CS8qIERXT1JEIDIwICovCi0JdTggcnN2ZDE3WzMyXTsJLyogRFdPUkQgMjEgKi8KLQl1OCByc3ZkMThbMzJdOwkvKiBEV09SRCAyMiAqLwotCXU4IHJzdmQxOVszMl07CS8qIERXT1JEIDIzICovCi0JdTggcnN2ZDIwWzMyXTsJLyogRFdPUkQgMjQgKi8KLQl1OCByc3ZkMjFbMzJdOwkvKiBEV09SRCAyNSAqLwotCXU4IHJzdmQyMlszMl07CS8qIERXT1JEIDI2ICovCi0JdTggcnN2ZDIzWzMyXTsJLyogRFdPUkQgMjcgKi8KLQl1OCByc3ZkMjRbMzJdOwkvKiBEV09SRCAyOCAqLwotCXU4IHJzdmQyNVszMl07CS8qIERXT1JEIDI5ICovCi0JdTggcnN2ZDI2WzMyXTsJLyogRFdPUkQgMzAgKi8KLQl1OCByc3ZkMjdbMzJdOwkvKiBEV09SRCAzMSAqLwotCXU4IHJzdmQyOFszMl07CS8qIERXT1JEIDMyICovCi0JdTggcnN2ZDI5WzMyXTsJLyogRFdPUkQgMzMgKi8KLQl1OCByc3ZkMzBbMTkyXTsJLyogRFdPUkQgMzQgKi8KLQl1OCByc3ZkMzFbMTkyXTsJLyogRFdPUkQgNDAgKi8KLQl1OCByc3ZkMzJbMTYwXTsJLyogRFdPUkQgNDYgKi8KLQl1OCByc3ZkMzNbMTYwXTsJLyogRFdPUkQgNTEgKi8KLQl1OCByc3ZkMzRbMTYwXTsJLyogRFdPUkQgNTYgKi8KLQl1OCByc3ZkMzVbOTZdOwkvKiBEV09SRCA2MSAqLwotCXU4IHJzdmQzNlsxOTJdWzMyXTsJLyogRFdPUkQgNjQgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgQ0VWX0NTUk1BUF9BTUFQIHsKLQl1MzIgZHdbMjU2XTsKLX07Ci0KLSNlbmRpZiAvKiBfX2Nldl9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2NxLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvY3EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwNDU4Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvY3EuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaW5jbHVkZSAiaHdsaWIuaCIKLSNpbmNsdWRlICJiZXN0YXR1cy5oIgotCi0vKgotICogQ29tcGxldGlvbiBRdWV1ZSBPYmplY3RzCi0gKi8KLS8qCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICAgICAgICAgUCBVIEIgTCBJIEMgIFIgTyBVIFQgSSBOIEUgUwotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgY3JlYXRlcyBhIGNvbXBsZXRpb24gcXVldWUgYmFzZWQgb24gdGhlIGNsaWVudCBjb21wbGV0aW9uCi0gICAgcXVldWUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLQotCi0gICAgRnVuY3Rpb25PYmplY3QgICAgICAtIEhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotICAgIENxQmFzZVZhICAgICAgICAgICAgLSBCYXNlIFZBIGZvciBhIHRoZSBDUSByaW5nCi0gICAgTnVtRW50cmllcyAgICAgICAgICAtIENFVl9DUV9DTlRfKiB2YWx1ZXMKLSAgICBzb2xFdmVudEVuYWJsZSAgICAgIC0gMCA9IEFsbCBDUUVzIGNhbiBnZW5lcmF0ZSBFdmVudHMgaWYgQ1EgaXMgZXZlbnRhYmxlCi0JCQkxID0gb25seSBDUUVzIHdpdGggc29saWNpdGVkIGJpdCBzZXQgYXJlIGV2ZW50YWJsZQotICAgIGV2ZW50YWJsZSAgICAgICAgICAgLSBFdmVudGFibGUgQ1EsIGdlbmVyYXRlcyBpbnRlcnJ1cHRzLgotICAgIG5vZGVsYXkgICAgICAgICAgICAgLSAxID0gRm9yY2UgaW50ZXJydXB0LCByZWxldmVudCBpZiBDUSBldmVudGFibGUuCi0JCQlJbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgRVFFCi0JCQl3cml0ZSBpcyBjb25maXJtZWQsIHJlZ2FyZGxlc3Mgb2YgRVEgVGltZXIKLQkJCW9yIHdhdGVybWFyayBzZXR0aW5ncy4KLSAgICB3bWUgICAgICAgICAgICAgICAgIC0gRW5hYmxlIHdhdGVybWFyayBiYXNlZCBjb2FsZXNjaW5nCi0gICAgd21UaHJlc2ggICAgICAgICAgICAtIEhpZ2ggd2F0ZXJtYXJrKENRIGZ1bGxuZXNzIGF0IHdoaWNoIGV2ZW50Ci0JCQlvciBpbnRlcnJ1cHQgc2hvdWxkIGJlIGFzc2VydGVkKS4gIFRoZXNlIGFyZSB0aGUKLQkJCUNFVl9XQVRFUk1BUksgZW5jb2RlZCB2YWx1ZXMuCi0gICAgRXFPYmplY3QgICAgICAgICAgICAtIEVRIEhhbmRsZSB0byBhc3NpZ24gdG8gdGhpcyBDUQotICAgIHBwQ3FPYmplY3QgICAgICAgICAgLSBJbnRlcm5hbCBDUSBIYW5kbGUgcmV0dXJuZWQuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhIHVzZWZ1bCBlcnJvciBjb2RlIGlzCi0JcmV0dXJuZWQuCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLQotKi8KLWludCBiZV9jcV9jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQlzdHJ1Y3QgcmluZ19kZXNjICpyZCwgdTMyIGxlbmd0aCwgYm9vbCBzb2xpY2l0ZWRfZXZlbnRhYmxlLAotCWJvb2wgbm9fZGVsYXksIHUzMiB3bV90aHJlc2gsCi0Jc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0LCBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QpCi17Ci0JaW50IHN0YXR1cyA9IEJFX1NVQ0NFU1M7Ci0JdTMyIG51bV9lbnRyaWVzX2VuY29kaW5nOwotCXUzMiBudW1fZW50cmllcyA9IGxlbmd0aCAvIHNpemVvZihzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVApOwotCXN0cnVjdCBGV0NNRF9DT01NT05fQ1FfQ1JFQVRFICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQl1MzIgbjsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlBU1NFUlQocmQpOwotCUFTU0VSVChjcV9vYmplY3QpOwotCUFTU0VSVChsZW5ndGggJSBzaXplb2Yoc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQKSA9PSAwKTsKLQotCXN3aXRjaCAobnVtX2VudHJpZXMpIHsKLQljYXNlIDI1NjoKLQkJbnVtX2VudHJpZXNfZW5jb2RpbmcgPSBDRVZfQ1FfQ05UXzI1NjsKLQkJYnJlYWs7Ci0JY2FzZSA1MTI6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0NRX0NOVF81MTI7Ci0JCWJyZWFrOwotCWNhc2UgMTAyNDoKLQkJbnVtX2VudHJpZXNfZW5jb2RpbmcgPSBDRVZfQ1FfQ05UXzEwMjQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQkJcmV0dXJuIEJFX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKLQl9Ci0KLQkvKgotCSAqIEFsbCBjcSBlbnRyaWVzIGFsbCB0aGUgc2FtZSBzaXplLiAgVXNlIGlTQ1NJIHZlcnNpb24KLQkgKiBhcyBhIHRlc3QgZm9yIHRoZSBwcm9wZXIgcmQgbGVuZ3RoLgotCSAqLwotCW1lbXNldChjcV9vYmplY3QsIDAsIHNpemVvZigqY3Ffb2JqZWN0KSk7Ci0KLQlhdG9taWNfc2V0KCZjcV9vYmplY3QtPnJlZl9jb3VudCwgMCk7Ci0JY3Ffb2JqZWN0LT5wYXJlbnRfZnVuY3Rpb24gPSBwZm9iOwotCWNxX29iamVjdC0+ZXFfb2JqZWN0ID0gZXFfb2JqZWN0OwotCWNxX29iamVjdC0+bnVtX2VudHJpZXMgPSBudW1fZW50cmllczsKLQkvKiBzYXZlIGZvciBNQ0MgY3EgcHJvY2Vzc2luZyAqLwotCWNxX29iamVjdC0+dmEgPSByZC0+dmE7Ci0KLQkvKiBtYXAgaW50byBVVC4gKi8KLQlsZW5ndGggPSBudW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVApOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJQVNTRVJUKHdyYik7Ci0JCVRSQUNFKERMX0VSUiwgIk5vIGZyZWUgTUNDIFdSQnMgaW4gY3JlYXRlIEVRLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9DUV9DUkVBVEUpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9wYWdlcyA9IFBBR0VTX1NQQU5ORUQoT0ZGU0VUX0lOX1BBR0UocmQtPnZhKSwKLQkJCQkJCQkJCWxlbmd0aCk7Ci0KLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9DT05URVhULCB2YWxpZCwgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAxKTsKLQluID0gcGZvYi0+cGNpX2Z1bmN0aW9uX251bWJlcjsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9DT05URVhULCBGdW5jLCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCi0JbiA9IChlcV9vYmplY3QgIT0gTlVMTCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgRXZlbnRhYmxlLAotCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgQXJtZWQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgMSk7Ci0KLQluID0gZXFfb2JqZWN0ID8gZXFfb2JqZWN0LT5lcV9pZCA6IDA7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgRVFJRCwgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9DT05URVhULCBDb3VudCwKLQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbnVtX2VudHJpZXNfZW5jb2RpbmcpOwotCi0JbiA9IDA7IC8qIFByb3RlY3Rpb24gRG9tYWluIGlzIGFsd2F5cyAwIGluICBMaW51eCAgZHJpdmVyICovCi0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgUEQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0JQU1BUF9TRVRfQklUU19QVFIoQ1FfQ09OVEVYVCwgTm9EZWxheSwKLQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG5vX2RlbGF5KTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9DT05URVhULCBTb2xFdmVudCwKLQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgc29saWNpdGVkX2V2ZW50YWJsZSk7Ci0KLQluID0gKHdtX3RocmVzaCAhPSAweEZGRkZGRkZGKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9DT05URVhULCBXTUUsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0KLQluID0gKG4gPyB3bV90aHJlc2ggOiAwKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihDUV9DT05URVhULCBXYXRlcm1hcmssCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQkvKiBDcmVhdGUgYSBwYWdlIGxpc3QgZm9yIHRoZSBGV0NNRC4gKi8KLQliZV9yZF90b19wYV9saXN0KHJkLCBmd2NtZC0+cGFyYW1zLnJlcXVlc3QucGFnZXMsCi0JCQkgIEFSUkFZX1NJWkUoZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzKSk7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB0byBjcmVhdGUgQ1EgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQkvKiBSZW1lbWJlciB0aGUgQ1EgaWQuICovCi0JY3Ffb2JqZWN0LT5jcV9pZCA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuY3FfaWQ7Ci0KLQkvKiBpbnNlcnQgdGhpcyBjcSBpbnRvIGVxX29iamVjdCByZWZlcmVuY2UgKi8KLQlpZiAoZXFfb2JqZWN0KSB7Ci0JCWF0b21pY19pbmMoJmVxX29iamVjdC0+cmVmX2NvdW50KTsKLQkJbGlzdF9hZGRfdGFpbCgmY3Ffb2JqZWN0LT5jcWxpc3RfZm9yX2VxLAotCQkJCQkmZXFfb2JqZWN0LT5jcV9saXN0X2hlYWQpOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLQotICAgIERlZmVyZW5jZXMgdGhlIGdpdmVuIG9iamVjdC4gT25jZSB0aGUgb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvCi0gICAgemVybywgdGhlIG9iamVjdCBpcyBkZXN0cm95ZWQgYW5kIGFsbCByZXNvdXJjZXMgdGhhdCBhcmUgaGVsZCBieSB0aGlzIG9iamVjdAotICAgIGFyZSByZWxlYXNlZC4gIFRoZSBvbi1jaGlwIGNvbnRleHQgaXMgYWxzbyBkZXN0cm95ZWQgYWxvbmcgd2l0aCB0aGUgcXVldWUKLSAgICBJRCwgYW5kIGFueSBtYXBwaW5ncyBtYWRlIGludG8gdGhlIFVULgotCi0gICAgY3Ffb2JqZWN0ICAgICAgICAgICAgLSBDUSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBjcV9vYmplY3RfY3JlYXRlLgotCi0gICAgcmV0dXJucyB0aGUgY3VycmVudCByZWZlcmVuY2UgY291bnQgb24gdGhlIG9iamVjdAotCi0gICAgSVJRTDogSVJRTCA8IERJU1BBVENIX0xFVkVMCi0qLwotaW50IGJlX2NxX2Rlc3Ryb3koc3RydWN0IGJlX2NxX29iamVjdCAqY3Ffb2JqZWN0KQotewotCWludCBzdGF0dXMgPSAwOwotCi0JLyogTm90aGluZyBzaG91bGQgcmVmZXJlbmNlIHRoaXMgQ1EgYXQgdGhpcyBwb2ludC4gKi8KLQlBU1NFUlQoYXRvbWljX3JlYWQoJmNxX29iamVjdC0+cmVmX2NvdW50KSA9PSAwKTsKLQotCS8qIFNlbmQgZndjbWQgdG8gZGVzdHJveSB0aGUgQ1EuICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcmluZ19kZXN0cm95KGNxX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uLAotCQkgICAgIGNxX29iamVjdC0+Y3FfaWQsIEZXQ01EX1JJTkdfVFlQRV9DUSwKLQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JQVNTRVJUKHN0YXR1cyA9PSAwKTsKLQotCS8qIFJlbW92ZSByZWZlcmVuY2UgaWYgdGhpcyBpcyBhbiBldmVudGFibGUgQ1EuICovCi0JaWYgKGNxX29iamVjdC0+ZXFfb2JqZWN0KSB7Ci0JCWF0b21pY19kZWMoJmNxX29iamVjdC0+ZXFfb2JqZWN0LT5yZWZfY291bnQpOwotCQlsaXN0X2RlbCgmY3Ffb2JqZWN0LT5jcWxpc3RfZm9yX2VxKTsKLQl9Ci0JcmV0dXJuIEJFX1NVQ0NFU1M7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9kZXNjcmlwdG9ycy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Rlc2NyaXB0b3JzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYTQzOGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Rlc2NyaXB0b3JzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZGVzY3JpcHRvcnNfYW1hcF9oX18KLSNkZWZpbmUgX19kZXNjcmlwdG9yc19hbWFwX2hfXwotCi0vKgotICogLS0tIElQQ19OT0RFX0lEX0VOVU0gLS0tCi0gKiBJUEMgcHJvY2Vzc29yIGlkIHZhbHVlcwotICovCi0jZGVmaW5lIFRQT1NUX05PREVfSUQgICAgICAgICAgICAgICAgICAgKDApCS8qIFRQT1NUIElEICovCi0jZGVmaW5lIFRQUkVfTk9ERV9JRCAgICAgICAgICAgICAgICAgICAgKDEpCS8qIFRQUkUgSUQgKi8KLSNkZWZpbmUgVFhVTFAwX05PREVfSUQgICAgICAgICAgICAgICAgICAoMikJLyogVFhVTFAwIElEICovCi0jZGVmaW5lIFRYVUxQMV9OT0RFX0lEICAgICAgICAgICAgICAgICAgKDMpCS8qIFRYVUxQMSBJRCAqLwotI2RlZmluZSBUWFVMUDJfTk9ERV9JRCAgICAgICAgICAgICAgICAgICg0KQkvKiBUWFVMUDIgSUQgKi8KLSNkZWZpbmUgUlhVTFAwX05PREVfSUQgICAgICAgICAgICAgICAgICAoNSkJLyogUlhVTFAwIElEICovCi0jZGVmaW5lIFJYVUxQMV9OT0RFX0lEICAgICAgICAgICAgICAgICAgKDYpCS8qIFJYVUxQMSBJRCAqLwotI2RlZmluZSBSWFVMUDJfTk9ERV9JRCAgICAgICAgICAgICAgICAgICg3KQkvKiBSWFVMUDIgSUQgKi8KLSNkZWZpbmUgTVBVX05PREVfSUQgICAgICAgICAgICAgICAgICAgICAoMTUpCS8qIE1QVSBJRCAqLwotCi0vKgotICogLS0tIE1BQ19JRF9FTlVNIC0tLQotICogTWVhbmluZyBvZiB0aGUgbWFjX2lkIGZpZWxkIGluIHJ4cHBfZXRoX2QKLSAqLwotI2RlZmluZSBQT1JUMF9IT1NUX01BQzAgICAgKDApICAvKiBQRCAwLCBQb3J0IDAsIGhvc3QgbmV0d29ya2luZywgTUFDIDAuICovCi0jZGVmaW5lIFBPUlQwX0hPU1RfTUFDMSAgICAoMSkJLyogUEQgMCwgUG9ydCAwLCBob3N0IG5ldHdvcmtpbmcsIE1BQyAxLiAqLwotI2RlZmluZSBQT1JUMF9TVE9SQUdFX01BQzAgKDIpCS8qIFBEIDAsIFBvcnQgMCwgaG9zdCBzdG9yYWdlLCBNQUMgMC4gKi8KLSNkZWZpbmUgUE9SVDBfU1RPUkFHRV9NQUMxICgzKQkvKiBQRCAwLCBQb3J0IDAsIGhvc3Qgc3RvcmFnZSwgTUFDIDEuICovCi0jZGVmaW5lIFBPUlQxX0hPU1RfTUFDMCAgICAoNCkJLyogUEQgMCwgUG9ydCAxIGhvc3QgbmV0d29ya2luZywgTUFDIDAuICovCi0jZGVmaW5lIFBPUlQxX0hPU1RfTUFDMSAgICAoNSkJLyogUEQgMCwgUG9ydCAxIGhvc3QgbmV0d29ya2luZywgTUFDIDEuICovCi0jZGVmaW5lIFBPUlQxX1NUT1JBR0VfTUFDMCAoNikJLyogUEQgMCwgUG9ydCAxIGhvc3Qgc3RvcmFnZSwgTUFDIDAuICovCi0jZGVmaW5lIFBPUlQxX1NUT1JBR0VfTUFDMSAoNykJLyogUEQgMCwgUG9ydCAxIGhvc3Qgc3RvcmFnZSwgTUFDIDEuICovCi0jZGVmaW5lIEZJUlNUX1ZNX01BQyAgICAgICAoOCkJLyogUEQgMSBNQUMuIFByb3RlY3Rpb24gZG9tYWlucyBoYXZlIElEcyAqLwotCQkJCS8qIGZyb20gMHg4LTB4MjYsIG9uZSBwZXIgUEQuICovCi0jZGVmaW5lIExBU1RfVk1fTUFDICAgICAgICAoMzgpCS8qIFBEIDMxIE1BQy4gKi8KLSNkZWZpbmUgTUdNVF9NQUMgICAgICAgICAgICgzOSkJLyogTWFuYWdlbWVudCBwb3J0IE1BQy4gKi8KLSNkZWZpbmUgTUFSQkxFX01BQzAgICAgICAgICg1OSkJLyogVXNlZCBmb3IgZmx1c2hpbmcgZnVuY3Rpb24gMCByZWNlaXZlICovCi0JCQkJICAvKgotCQkJCSAgICogcXVldWVzIGJlZm9yZSByZS11c2luZyBhIHRvcm4tZG93bgotCQkJCSAgICogcmVjZWl2ZSByaW5nLiB0aGUgREEgPQotCQkJCSAgICogMDAtMDAtMDAtMDAtMDAtMDAsIGFuZCB0aGUgTVNCIG9mIHRoZQotCQkJCSAgICogU0EgPSAwMAotCQkJCSAgICovCi0jZGVmaW5lIE1BUkJMRV9NQUMxICAgICAgICAoNjApCS8qIFVzZWQgZm9yIGZsdXNoaW5nIGZ1bmN0aW9uIDEgcmVjZWl2ZSAqLwotCQkJCSAgLyoKLQkJCQkgICAqIHF1ZXVlcyBiZWZvcmUgcmUtdXNpbmcgYSB0b3JuLWRvd24KLQkJCQkgICAqIHJlY2VpdmUgcmluZy4gdGhlIERBID0KLQkJCQkgICAqIDAwLTAwLTAwLTAwLTAwLTAwLCBhbmQgdGhlIE1TQiBvZiB0aGUKLQkJCQkgICAqIFNBICE9IDAwCi0JCQkJICAgKi8KLSNkZWZpbmUgTlVMTF9NQUMgICAgICAgICAgICg2MSkJLyogUHJvbWlzY3VvdXMgbW9kZSwgaW5kaWNhdGVzIG5vIG1hdGNoICovCi0jZGVmaW5lIE1DQVNUX01BQyAgICAgICAgICAoNjIpCS8qIE11bHRpY2FzdCBtYXRjaC4gKi8KLSNkZWZpbmUgQkNBU1RfTUFUQ0ggICAgICAgICg2MykJLyogQnJvYWRjYXN0IG1hdGNoLiAqLwotCi0jZW5kaWYgLyogX19kZXNjcmlwdG9yc19hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Rvb3JiZWxscy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Rvb3JiZWxscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTBjYzRkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9kb29yYmVsbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZG9vcmJlbGxzX2FtYXBfaF9fCi0jZGVmaW5lIF9fZG9vcmJlbGxzX2FtYXBfaF9fCi0KLS8qIFRoZSBUWC9SRE1BIHNlbmQgcXVldWUgZG9vcmJlbGwuICovCi1zdHJ1Y3QgQkVfU1FfREJfQU1BUCB7Ci0JdTggY2lkWzExXTsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs1XTsJLyogRFdPUkQgMCAqLwotCXU4IG51bVBvc3RlZFsxNF07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBTUV9EQl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBUaGUgcmVjZWl2ZSBxdWV1ZSBkb29yYmVsbC4gKi8KLXN0cnVjdCBCRV9SUV9EQl9BTUFQIHsKLQl1OCBycVsxMF07CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMTNdOwkvKiBEV09SRCAwICovCi0JdTggSW52YWxpZGF0ZTsJLyogRFdPUkQgMCAqLwotCXU4IG51bVBvc3RlZFs4XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBSUV9EQl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKgotICogVGhlIENRL0VRIGRvb3JiZWxsLiBTb2Z0d2FyZSBNVVNUIHNldCByZXNlcnZlZCBmaWVsZHMgaW4gdGhpcwotICogZGVzY3JpcHRvciB0byB6ZXJvLCBvdGhlcndpc2UgKENFVikgaGFyZHdhcmUgd2lsbCBub3QgZXhlY3V0ZSB0aGUKLSAqIGRvb3JiZWxsIChmbGFnZ2luZyBhIGJhZF9kYl9xaWQgZXJyb3IgaW5zdGVhZCkuCi0gKi8KLXN0cnVjdCBCRV9DUV9EQl9BTUFQIHsKLQl1OCBxaWRbMTBdOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzRdOwkvKiBEV09SRCAwICovCi0JdTggcmVhcm07CQkvKiBEV09SRCAwICovCi0JdTggZXZlbnQ7CQkvKiBEV09SRCAwICovCi0JdTggbnVtX3BvcHBlZFsxM107CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVszXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBDUV9EQl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi1zdHJ1Y3QgQkVfVFBNX1JRX0RCX0FNQVAgewotCXU4IHFpZFsxMF07CQkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNl07CS8qIERXT1JEIDAgKi8KLQl1OCBudW1Qb3N0ZWRbMTFdOwkvKiBEV09SRCAwICovCi0JdTggbXNzX2NudFs1XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBUUE1fUlFfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIFBvc3QgV1JCIFF1ZXVlIERvb3JiZWxsIFJlZ2lzdGVyIHVzZWQgYnkgdGhlIGhvc3QgU3RvcmFnZSBzdGFjawotICogdG8gbm90aWZ5IHRoZSBjb250cm9sbGVyIG9mIGEgcG9zdGVkIFdvcmsgUmVxdWVzdCBCbG9jawotICovCi1zdHJ1Y3QgQkVfV1JCX1BPU1RfREJfQU1BUCB7Ci0JdTggd3JiX2NpZFsxMF07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs2XTsJLyogRFdPUkQgMCAqLwotCXU4IHdyYl9pbmRleFs4XTsJLyogRFdPUkQgMCAqLwotCXU4IG51bWJlclBvc3RlZFs4XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBXUkJfUE9TVF9EQl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKgotICogVXBkYXRlIERlZmF1bHQgUERVIFF1ZXVlIERvb3JiZWxsIFJlZ2lzdGVyIHVzZWQgdG8gY29tbXVuaWNhdGUKLSAqIHRvIHRoZSBjb250cm9sbGVyIHRoYXQgdGhlIGRyaXZlciBoYXMgc3RvcHBlZCBwcm9jZXNzaW5nIHRoZSBxdWV1ZQotICogYW5kIHdoZXJlIGluIHRoZSBxdWV1ZSBpdCBzdG9wcGVkLCB0aGlzIGlzCi0gKiBhIENRIEVudHJ5IFR5cGUuIFVzZWQgYnkgc3RvcmFnZSBkcml2ZXIuCi0gKi8KLXN0cnVjdCBCRV9ERUZBVUxUX1BEVV9EQl9BTUFQIHsKLQl1OCBxaWRbMTBdOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzRdOwkvKiBEV09SRCAwICovCi0JdTggcmVhcm07CQkvKiBEV09SRCAwICovCi0JdTggZXZlbnQ7CQkvKiBEV09SRCAwICovCi0JdTggY3Fwcm9jWzE0XTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IERFRkFVTFRfUERVX0RCX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIE1hbmFnZW1lbnQgQ29tbWFuZCBhbmQgQ29udHJvbGxlciBkZWZhdWx0IGZyYWdtZW50IHJpbmcgKi8KLXN0cnVjdCBCRV9NQ0NfREJfQU1BUCB7Ci0JdTggcmlkWzExXTsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs1XTsJLyogRFdPUkQgMCAqLwotCXU4IG51bVBvc3RlZFsxNF07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNQ0NfREJfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyoKLSAqIFVzZWQgZm9yIGJvb3RzdHJhcHBpbmcgdGhlIEhvc3QgaW50ZXJmYWNlLiBUaGlzIHJlZ2lzdGVyIGlzCi0gKiB1c2VkIGZvciBkcml2ZXIgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBNUFUgd2hlbiBubyBNQ0MgUmluZ3MgZXhpc3QuCi0gKiBUaGUgc29mdHdhcmUgbXVzdCB3cml0ZSB0aGlzIHJlZ2lzdGVyIHR3aWNlIHRvIHBvc3QgYW55IE1DQwotICogY29tbWFuZC4gRmlyc3QsIGl0IHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0xIGFuZCB0aGUgdXBwZXIgYml0cyBvZgotICogdGhlICBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgTUNDX01BSUxCT1ggc3RydWN0dXJlLiAgU29mdHdhcmUgbXVzdCBwb2xsCi0gKiB0aGUgcmVhZHkgYml0IHVudGlsIHRoaXMgaXMgYWNrbm93bGVkZ2VkLiAgVGhlbiwgc290d2FyZSB3cml0ZXMgdGhlCi0gKiByZWdpc3RlciB3aXRoIGhpPTAgd2l0aCB0aGUgbG93ZXIgYml0cyBpbiB0aGUgYWRkcmVzcy4gIEl0IG11c3QKLSAqIHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGUgTUNDIGNvbW1hbmQgaXMgY29tcGxldGUuICBVcG9uIGNvbXBsZXRpb24sCi0gKiB0aGUgTUNDX01BSUxCT1ggd2lsbCBjb250YWluIGEgdmFsaWQgY29tcGxldGlvbiBxdWV1ZSAgZW50cnkuCi0gKi8KLXN0cnVjdCBCRV9NUFVfTUFJTEJPWF9EQl9BTUFQIHsKLQl1OCByZWFkeTsJCS8qIERXT1JEIDAgKi8KLQl1OCBoaTsJCS8qIERXT1JEIDAgKi8KLQl1OCBhZGRyZXNzWzMwXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNUFVfTUFJTEJPWF9EQl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKgotICogIFRoaXMgaXMgdGhlIHByb3RlY3Rpb24gZG9tYWluIGRvb3JiZWxsIHJlZ2lzdGVyIG1hcC4gTm90ZSB0aGF0Ci0gKiAgd2hpbGUgdGhpcyBtYXAgc2hvd3MgZG9vcmJlbGxzIGZvciBhbGwgQmxhZGUgRW5naW5lIHN1cHBvcnRlZAotICogIHByb3RvY29scywgbm90IGFsbCBvZiB0aGVzZSBtYXkgYmUgdmFsaWQgaW4gYSBnaXZlbiBmdW5jdGlvbiBvcgotICogIHByb3RlY3Rpb24gZG9tYWluLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGFwcGxpY2F0aW9uCi0gKiAgYWNjZXNzaW5nIHRoZSBkb29yYmVsbHMgdG8ga25vdyB3aGljaCBhcmUgdmFsaWQuIEVhY2ggZG9vcmJlbGwKLSAqICBvY2N1cGllcyAzMiBieXRlcyBvZiBzcGFjZSwgYnV0IHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLAotICogIG9ubHkgdGhlIGZpcnN0IDQgYnl0ZXMgc2hvdWxkIGJlIHdyaXR0ZW4uICBUaGVyZSBhcmUgMzIgaW5zdGFuY2VzCi0gKiAgb2YgdGhlc2UgZG9vcmJlbGxzIGZvciB0aGUgaG9zdCBhbmQgMzEgdmlydHVhbCBtYWNoaW5lcyByZXNwZWN0aXZlbHkuCi0gKiAgVGhlIGhvc3QgYW5kIFZNcyB3aWxsIG9ubHkgbWFwIHRoZSBkb29yYmVsbCBwYWdlcyBiZWxvbmdpbmcgdG8gaXRzCi0gKiAgcHJvdGVjdGlvbiBkb21haW4uIEl0IHdpbGwgbm90IGJlIGFibGUgdG8gdG91Y2ggdGhlIGRvb3JiZWxscyBmb3IKLSAqICBhbm90aGVyIFZNLiBUaGUgZG9vcmJlbGxzIGFyZSB0aGUgb25seSByZWdpc3RlcnMgZGlyZWN0bHkgYWNjZXNzaWJsZQotICogIGJ5IGEgdmlydHVhbCBtYWNoaW5lLiBTaW1pbGFybHksIHRoZXJlIGFyZSA1MTEgYWRkaXRpb25hbAotICogIGRvb3JiZWxscyBmb3IgUkRNQSBwcm90ZWN0aW9uIGRvbWFpbnMuIFBEIDAgZm9yIFJETUEgc2hhcmVzCi0gKiAgdGhlIHNhbWUgcGh5c2ljYWwgcHJvdGVjdGlvbiBkb21haW4gZG9vcmJlbGwgcGFnZSBhcyBFVEgvaVNDU0kuCi0gKgotICovCi1zdHJ1Y3QgQkVfUFJPVEVDVElPTl9ET01BSU5fREJNQVBfQU1BUCB7Ci0JdTggcnN2ZDBbNTEyXTsJLyogRFdPUkQgMCAqLwotCXN0cnVjdCBCRV9TUV9EQl9BTUFQIHJkbWFfc3FfZGI7Ci0JdTggcnN2ZDFbN11bMzJdOwkvKiBEV09SRCAxNyAqLwotCXN0cnVjdCBCRV9XUkJfUE9TVF9EQl9BTUFQIGlzY3NpX3dyYl9wb3N0X2RiOwotCXU4IHJzdmQyWzddWzMyXTsJLyogRFdPUkQgMjUgKi8KLQlzdHJ1Y3QgQkVfU1FfREJfQU1BUCBldHhfc3FfZGI7Ci0JdTggcnN2ZDNbN11bMzJdOwkvKiBEV09SRCAzMyAqLwotCXN0cnVjdCBCRV9SUV9EQl9BTUFQIHJkbWFfcnFfZGI7Ci0JdTggcnN2ZDRbN11bMzJdOwkvKiBEV09SRCA0MSAqLwotCXN0cnVjdCBCRV9ERUZBVUxUX1BEVV9EQl9BTUFQIGlzY3NpX2RlZmF1bHRfcGR1X2RiOwotCXU4IHJzdmQ1WzddWzMyXTsJLyogRFdPUkQgNDkgKi8KLQlzdHJ1Y3QgQkVfVFBNX1JRX0RCX0FNQVAgdHBtX3JxX2RiOwotCXU4IHJzdmQ2WzddWzMyXTsJLyogRFdPUkQgNTcgKi8KLQlzdHJ1Y3QgQkVfUlFfREJfQU1BUCBlcnhfcnFfZGI7Ci0JdTggcnN2ZDdbN11bMzJdOwkvKiBEV09SRCA2NSAqLwotCXN0cnVjdCBCRV9DUV9EQl9BTUFQIGNxX2RiOwotCXU4IHJzdmQ4WzddWzMyXTsJLyogRFdPUkQgNzMgKi8KLQlzdHJ1Y3QgQkVfTUNDX0RCX0FNQVAgbXB1X21jY19kYjsKLQl1OCByc3ZkOVs3XVszMl07CS8qIERXT1JEIDgxICovCi0Jc3RydWN0IEJFX01QVV9NQUlMQk9YX0RCX0FNQVAgbWNjX2Jvb3RzdHJhcF9kYjsKLQl1OCByc3ZkMTBbOTM1XVszMl07CS8qIERXT1JEIDg5ICovCi19IF9fcGFja2VkOwotc3RydWN0IFBST1RFQ1RJT05fRE9NQUlOX0RCTUFQX0FNQVAgewotCXUzMiBkd1sxMDI0XTsKLX07Ci0KLSNlbmRpZiAvKiBfX2Rvb3JiZWxsc19hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2VwLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJmY2Y2NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19lcF9hbWFwX2hfXwotI2RlZmluZSBfX2VwX2FtYXBfaF9fCi0KLS8qIEdlbmVyYWwgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX0VQX0NPTlRST0xfQ1NSX0FNQVAgewotCXU4IG0wX1J4UGJ1ZjsJLyogRFdPUkQgMCAqLwotCXU4IG0xX1J4UGJ1ZjsJLyogRFdPUkQgMCAqLwotCXU4IG0yX1J4UGJ1ZjsJLyogRFdPUkQgMCAqLwotCXU4IGZmX2VuOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzI3XTsJLyogRFdPUkQgMCAqLwotCXU4IENQVV9yZXNldDsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFUF9DT05UUk9MX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBTZW1hcGhvcmUgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfRVBfU0VNQVBIT1JFX0NTUl9BTUFQIHsKLQl1OCB2YWx1ZVszMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVBfU0VNQVBIT1JFX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBFbWJlZGRlZCBQcm9jZXNzb3IgU3BlY2lmaWMgUmVnaXN0ZXJzLiAqLwotc3RydWN0IEJFX0VQX0NTUk1BUF9BTUFQIHsKLQlzdHJ1Y3QgQkVfRVBfQ09OVFJPTF9DU1JfQU1BUCBlcF9jb250cm9sOwotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQxWzMyXTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQyWzMyXTsJLyogRFdPUkQgMyAqLwotCXU4IHJzdmQzWzMyXTsJLyogRFdPUkQgNCAqLwotCXU4IHJzdmQ0WzMyXTsJLyogRFdPUkQgNSAqLwotCXU4IHJzdmQ1WzhdWzEyOF07CS8qIERXT1JEIDYgKi8KLQl1OCByc3ZkNlszMl07CS8qIERXT1JEIDM4ICovCi0JdTggcnN2ZDdbMzJdOwkvKiBEV09SRCAzOSAqLwotCXU4IHJzdmQ4WzMyXTsJLyogRFdPUkQgNDAgKi8KLQl1OCByc3ZkOVszMl07CS8qIERXT1JEIDQxICovCi0JdTggcnN2ZDEwWzMyXTsJLyogRFdPUkQgNDIgKi8KLQlzdHJ1Y3QgQkVfRVBfU0VNQVBIT1JFX0NTUl9BTUFQIGVwX3NlbWFwaG9yZTsKLQl1OCByc3ZkMTFbMzJdOwkvKiBEV09SRCA0NCAqLwotCXU4IHJzdmQxMlsxOV1bMzJdOwkvKiBEV09SRCA0NSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFUF9DU1JNQVBfQU1BUCB7Ci0JdTMyIGR3WzY0XTsKLX07Ci0KLSNlbmRpZiAvKiBfX2VwX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXEuYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9lcS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjkyY2NkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9lcS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLSNpbmNsdWRlICJod2xpYi5oIgotI2luY2x1ZGUgImJlc3RhdHVzLmgiCi0vKgotICAgIFRoaXMgcm91dGluZSBjcmVhdGVzIGFuIGV2ZW50IHF1ZXVlIGJhc2VkIG9uIHRoZSBjbGllbnQgY29tcGxldGlvbgotICAgIHF1ZXVlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0KLSAgICBGdW5jdGlvbk9iamVjdCAgICAgIC0gSGFuZGxlIHRvIGEgZnVuY3Rpb24gb2JqZWN0Ci0gICAgRXFCYXNlVmEgICAgICAgICAgICAtIEJhc2UgVkEgZm9yIGEgdGhlIEVRIHJpbmcKLSAgICBTaXplRW5jb2RpbmcgICAgICAgIC0gVGhlIGVuY29kZWQgc2l6ZSBmb3IgdGhlIEVRIGVudHJpZXMuIFRoaXMgdmFsdWUgaXMKLQkJCWVpdGhlciBDRVZfRVFfU0laRV80IG9yIENFVl9FUV9TSVpFXzE2Ci0gICAgTnVtRW50cmllcyAgICAgICAgICAtIENFVl9DUV9DTlRfKiB2YWx1ZXMuCi0gICAgV2F0ZXJtYXJrICAgICAgICAgICAtIEVuYWJsZXMgd2F0ZXJtYXJrIGJhc2VkIGNvYWxlc2NpbmcuICBUaGlzIHBhcmFtZXRlcgotCQkJbXVzdCBiZSBvZiB0aGUgdHlwZSBDRVZfV01BUktfKiBpZiB3YXRlcm1hcmtzCi0JCQlhcmUgZW5hYmxlZC4gIElmIHdhdGVybWFya3MgdG8gdG8gYmUgZGlzYWJsZWQKLQkJCXRoaXMgdmFsdWUgc2hvdWxkIGJlLTEuCi0gICAgVGltZXJEZWxheSAgICAgICAgICAtIElmIGEgdGltZXIgZGVsYXkgaXMgZW5hYmxlZCB0aGlzIHZhbHVlIHNob3VsZCBiZSB0aGUKLQkJCXRpbWUgb2YgdGhlIGRlbGF5IGluIDggbWljcm9zZWNvbmQgdW5pdHMuICBJZgotCQkJZGVsYXlzIGFyZSBub3QgdXNlZCB0aGlzIHBhcmFtZXRlciBzaG91bGQgYmUKLQkJCXNldCB0byAtMS4KLSAgICBwcEVxT2JqZWN0ICAgICAgICAgIC0gSW50ZXJuYWwgRVEgSGFuZGxlIHJldHVybmVkLgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGVycm9yIGNvZGUKLQlpcyByZXR1cm5lZC4KLQotICAgIElSUUwgPCBESVNQQVRDSF9MRVZFTAotKi8KLWludAotYmVfZXFfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCXN0cnVjdCByaW5nX2Rlc2MgKnJkLCB1MzIgZXFlX3NpemUsIHUzMiBudW1fZW50cmllcywKLQkJdTMyIHdhdGVybWFyaywJLyogQ0VWX1dNQVJLXyogb3IgLTEgKi8KLQkJdTMyIHRpbWVyX2RlbGF5LAkvKiBpbiA4dXMgdW5pdHMsIG9yIC0xICovCi0JCXN0cnVjdCBiZV9lcV9vYmplY3QgKmVxX29iamVjdCkKLXsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQl1MzIgbnVtX2VudHJpZXNfZW5jb2RpbmcsIGVxZV9zaXplX2VuY29kaW5nLCBsZW5ndGg7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9FUV9DUkVBVEUgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXUzMiBuOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCUFTU0VSVChyZCk7Ci0JQVNTRVJUKGVxX29iamVjdCk7Ci0KLQlzd2l0Y2ggKG51bV9lbnRyaWVzKSB7Ci0JY2FzZSAyNTY6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0VRX0NOVF8yNTY7Ci0JCWJyZWFrOwotCWNhc2UgNTEyOgotCQludW1fZW50cmllc19lbmNvZGluZyA9IENFVl9FUV9DTlRfNTEyOwotCQlicmVhazsKLQljYXNlIDEwMjQ6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0VRX0NOVF8xMDI0OwotCQlicmVhazsKLQljYXNlIDIwNDg6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0VRX0NOVF8yMDQ4OwotCQlicmVhazsKLQljYXNlIDQwOTY6Ci0JCW51bV9lbnRyaWVzX2VuY29kaW5nID0gQ0VWX0VRX0NOVF80MDk2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCXJldHVybiBCRV9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7Ci0JfQotCi0Jc3dpdGNoIChlcWVfc2l6ZSkgewotCWNhc2UgNDoKLQkJZXFlX3NpemVfZW5jb2RpbmcgPSBDRVZfRVFfU0laRV80OwotCQlicmVhazsKLQljYXNlIDE2OgotCQllcWVfc2l6ZV9lbmNvZGluZyA9IENFVl9FUV9TSVpFXzE2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCXJldHVybiBCRV9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7Ci0JfQotCi0JaWYgKChlcWVfc2l6ZSA9PSA0ICYmIG51bV9lbnRyaWVzIDwgMTAyNCkgfHwKLQkgICAgKGVxZV9zaXplID09IDE2ICYmIG51bV9lbnRyaWVzID09IDQwOTYpKSB7Ci0JCVRSQUNFKERMX0VSUiwgIkJhZCBFUSBzaXplLiBlcWVfc2l6ZTolZCBudW1fZW50cmllczolZCIsCi0JCSAgICAgIGVxZV9zaXplLCBudW1fZW50cmllcyk7Ci0JCUFTU0VSVCgwKTsKLQkJcmV0dXJuIEJFX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKLQl9Ci0KLQltZW1zZXQoZXFfb2JqZWN0LCAwLCBzaXplb2YoKmVxX29iamVjdCkpOwotCi0JYXRvbWljX3NldCgmZXFfb2JqZWN0LT5yZWZfY291bnQsIDApOwotCWVxX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uID0gcGZvYjsKLQllcV9vYmplY3QtPmVxX2lkID0gMHhGRkZGRkZGRjsKLQotCUlOSVRfTElTVF9IRUFEKCZlcV9vYmplY3QtPmNxX2xpc3RfaGVhZCk7Ci0KLQlsZW5ndGggPSBudW1fZW50cmllcyAqIGVxZV9zaXplOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJQVNTRVJUKHdyYik7Ci0JCVRSQUNFKERMX0VSUiwgIk5vIGZyZWUgTUNDIFdSQnMgaW4gY3JlYXRlIEVRLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9FUV9DUkVBVEUpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9wYWdlcyA9IFBBR0VTX1NQQU5ORUQoT0ZGU0VUX0lOX1BBR0UocmQtPnZhKSwKLQkJCQkJCQkJCWxlbmd0aCk7Ci0JbiA9IHBmb2ItPnBjaV9mdW5jdGlvbl9udW1iZXI7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgRnVuYywgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIHZhbGlkLCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIDEpOwotCi0JQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgU2l6ZSwKLQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgZXFlX3NpemVfZW5jb2RpbmcpOwotCi0JbiA9IDA7IC8qIFByb3RlY3Rpb24gRG9tYWluIGlzIGFsd2F5cyAwIGluICBMaW51eCAgZHJpdmVyICovCi0JQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgUEQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0KLQkvKiBMZXQgdGhlIGNhbGxlciBBUk0gdGhlIEVRIHdpdGggdGhlIGRvb3JiZWxsLiAqLwotCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIEFybWVkLCAmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIDApOwotCi0JQU1BUF9TRVRfQklUU19QVFIoRVFfQ09OVEVYVCwgQ291bnQsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwKLQkJCQkJbnVtX2VudHJpZXNfZW5jb2RpbmcpOwotCi0JbiA9IHBmb2ItPnBjaV9mdW5jdGlvbl9udW1iZXIgKiAzMjsKLQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBFdmVudFZlY3QsCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQlpZiAod2F0ZXJtYXJrICE9IC0xKSB7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIFdNRSwKLQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIDEpOwotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBXYXRlcm1hcmssCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCB3YXRlcm1hcmspOwotCQlBU1NFUlQod2F0ZXJtYXJrIDw9IENFVl9XTUFSS18yNDApOwotCX0gZWxzZQotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBXTUUsCi0JCQkJCSZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgMCk7Ci0JaWYgKHRpbWVyX2RlbGF5ICE9IC0xKSB7Ci0JCUFNQVBfU0VUX0JJVFNfUFRSKEVRX0NPTlRFWFQsIFRNUiwKLQkJCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAxKTsKLQotCQlBU1NFUlQodGltZXJfZGVsYXkgPD0gMjUwKTsJLyogbWF4IHZhbHVlIGFjY29yZGluZyB0byBFQVMgKi8KLQkJdGltZXJfZGVsYXkgPSBtaW4odGltZXJfZGVsYXksICh1MzIpMjUwKTsKLQotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBEZWxheSwKLQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIHRpbWVyX2RlbGF5KTsKLQl9IGVsc2UgewotCQlBTUFQX1NFVF9CSVRTX1BUUihFUV9DT05URVhULCBUTVIsCi0JCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAwKTsKLQl9Ci0JLyogQ3JlYXRlIGEgcGFnZSBsaXN0IGZvciB0aGUgRldDTUQuICovCi0JYmVfcmRfdG9fcGFfbGlzdChyZCwgZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzLAotCQkJICBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wYWdlcykpOwotCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJNQ0MgdG8gY3JlYXRlIEVRIGZhaWxlZC4iKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogR2V0IHRoZSBFUSBpZC4gIFRoZSBNUFUgYWxsb2NhdGVzIHRoZSBJRHMuICovCi0JZXFfb2JqZWN0LT5lcV9pZCA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuZXFfaWQ7Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgRGVmZXJlbmNlcyB0aGUgZ2l2ZW4gb2JqZWN0LiBPbmNlIHRoZSBvYmplY3QncyByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8KLSAgICB6ZXJvLCB0aGUgb2JqZWN0IGlzIGRlc3Ryb3llZCBhbmQgYWxsIHJlc291cmNlcyB0aGF0IGFyZSBoZWxkIGJ5IHRoaXMKLSAgICBvYmplY3QgYXJlIHJlbGVhc2VkLiAgVGhlIG9uLWNoaXAgY29udGV4dCBpcyBhbHNvIGRlc3Ryb3llZCBhbG9uZyB3aXRoCi0gICAgdGhlIHF1ZXVlIElELCBhbmQgYW55IG1hcHBpbmdzIG1hZGUgaW50byB0aGUgVVQuCi0KLSAgICBlcV9vYmplY3QgICAgICAgICAgICAtIEVRIGhhbmRsZSByZXR1cm5lZCBmcm9tIGVxX29iamVjdF9jcmVhdGUuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhIHVzZWZ1bCBlcnJvciBjb2RlCi0JaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMOiBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLSovCi1pbnQgYmVfZXFfZGVzdHJveShzdHJ1Y3QgYmVfZXFfb2JqZWN0ICplcV9vYmplY3QpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlBU1NFUlQoYXRvbWljX3JlYWQoJmVxX29iamVjdC0+cmVmX2NvdW50KSA9PSAwKTsKLQkvKiBubyBDUXMgc2hvdWxkIHJlZmVyZW5jZSB0aGlzIEVRIG5vdyAqLwotCUFTU0VSVChsaXN0X2VtcHR5KCZlcV9vYmplY3QtPmNxX2xpc3RfaGVhZCkpOwotCi0JLyogU2VuZCBmd2NtZCB0byBkZXN0cm95IHRoZSBFUS4gKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9yaW5nX2Rlc3Ryb3koZXFfb2JqZWN0LT5wYXJlbnRfZnVuY3Rpb24sCi0JCQkgICAgIGVxX29iamVjdC0+ZXFfaWQsIEZXQ01EX1JJTkdfVFlQRV9FUSwKLQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JQVNTRVJUKHN0YXR1cyA9PSAwKTsKLQotCXJldHVybiBCRV9TVUNDRVNTOwotfQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfZXFfbW9kaWZ5X2RlbGF5Ci0gKiAgIENoYW5nZXMgdGhlIEVRIGRlbGF5IGZvciBhIGdyb3VwIG9mIEVRcy4KLSAqIG51bV9lcSAgICAgICAgICAgICAtIFRoZSBudW1iZXIgb2YgRVFzIGluIHRoZSBlcV9hcnJheSB0byBhZGp1c3QuCi0gKiAJCQlUaGlzIGFsc28gaXMgdGhlIG51bWJlciBvZiBkZWxheSB2YWx1ZXMgaW4KLSAqIAkJCXRoZSBlcV9kZWxheV9hcnJheS4KLSAqIGVxX2FycmF5ICAgICAgICAgICAtIEFycmF5IG9mIHN0cnVjdCBiZV9lcV9vYmplY3QgcG9pbnRlcnMgdG8gYWRqdXN0LgotICogZXFfZGVsYXlfYXJyYXkgICAgIC0gQXJyYXkgb2YgIm51bV9lcSIgdGltZXIgZGVsYXlzIGluIHVuaXRzCi0gKiAJCQlvZiBtaWNyb3NlY29uZHMuIFRoZSBiZV9lcV9xdWVyeV9kZWxheV9yYW5nZQotICogCQkJZndjbWQgcmV0dXJucyB0aGUgcmVzb2x1dGlvbiBhbmQgcmFuZ2Ugb2YKLSAqICAgICAgICAgICAgICAgICAgICAgIGxlZ2FsIEVRIGRlbGF5cy4KLSAqIGNiICAgICAgICAgICAtCi0gKiBjYl9jb250ZXh0ICAgLQotICogcV9jdHh0ICAgICAgICAgICAgIC0gT3B0aW9uYWwuIFBvaW50ZXIgdG8gYSBwcmV2aW91c2x5IGFsbG9jYXRlZAotICogCQkJc3RydWN0LiBJZiB0aGUgTUNDIFdSQiByaW5nIGlzIGZ1bGwsIHRoaXMKLSAqIAkJCXN0cnVjdHVyZSBpcyB1c2VkIHRvIHF1ZXVlIHRoZSBvcGVyYXRpb24uIEl0Ci0gKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHBvc3RlZCB0byB0aGUgTUNDIHJpbmcgd2hlbiBzcGFjZQotICogICAgICAgICAgICAgICAgICAgICAgYmVjb21lcyBhdmFpbGFibGUuIEFsbCBxdWV1ZWQgY29tbWFuZHMgd2lsbAotICogICAgICAgICAgICAgICAgICAgICAgYmUgcG9zdGVkIHRvIHRoZSByaW5nIGluIHRoZSBvcmRlciB0aGV5IGFyZQotICogICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQuIEl0IGlzIGFsd2F5cyB2YWxpZCB0byBwYXNzIGEgcG9pbnRlciB0bwotICogICAgICAgICAgICAgICAgICAgICAgYSBnZW5lcmljIGJlX2dlbmVyaWNfcV9jbnR4dC4gSG93ZXZlciwKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBzcGVjaWZpYyBjb250ZXh0IHN0cnVjdHMKLSAqICAgICAgICAgICAgICAgICAgICAgIGFyZSBnZW5lcmFsbHkgc21hbGxlciB0aGFuIHRoZSBnZW5lcmljIHN0cnVjdC4KLSAqIHJldHVybiBwZW5kX3N0YXR1cyAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuCi0gKiAJCQlCRV9QRU5ESU5HIChwb3N0aXZlIHZhbHVlKSBpZiB0aGUgRldDTUQKLSAqICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gaXMgcGVuZGluZy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfZXFfbW9kaWZ5X2RlbGF5KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIHUzMiBudW1fZXEsIHN0cnVjdCBiZV9lcV9vYmplY3QgKiplcV9hcnJheSwKLQkJICAgdTMyICplcV9kZWxheV9hcnJheSwgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCSAgIHZvaWQgKmNiX2NvbnRleHQsIHN0cnVjdCBiZV9lcV9tb2RpZnlfZGVsYXlfcV9jdHh0ICpxX2N0eHQpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9NT0RJRllfRVFfREVMQVkgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqZ2VuX2N0eHQgPSBOVUxMOwotCXUzMiBpOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCWlmIChxX2N0eHQgJiYgY2IpIHsKLQkJCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCQlnZW5fY3R4dCA9IChzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKikgcV9jdHh0OwotCQkJZ2VuX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsIENPTU1PTl9NT0RJRllfRVFfREVMQVkpOwotCi0JQVNTRVJUKG51bV9lcSA+IDApOwotCUFTU0VSVChudW1fZXEgPD0gQVJSQVlfU0laRShmd2NtZC0+cGFyYW1zLnJlcXVlc3QuZGVsYXkpKTsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubnVtX2VxID0gbnVtX2VxOwotCWZvciAoaSA9IDA7IGkgPCBudW1fZXE7IGkrKykgewotCQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuZGVsYXlbaV0uZXFfaWQgPSBlcV9hcnJheVtpXS0+ZXFfaWQ7Ci0JCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5kZWxheVtpXS5kZWxheV9pbl9taWNyb3NlY29uZHMgPQotCQkgICAgZXFfZGVsYXlfYXJyYXlbaV07Ci0JfQotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBnZW5fY3R4dCwKLQkJCWNiLCBjYl9jb250ZXh0LCBOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ldGguYyBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ldGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0MWI2Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZXRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2luY2x1ZGUgImh3bGliLmgiCi0jaW5jbHVkZSAiYmVzdGF0dXMuaCIKLQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfZXRoX3NxX2NyZWF0ZV9leAotICogICBDcmVhdGVzIGFuIGV0aGVybmV0IHNlbmQgcmluZyAtIGV4dGVuZGVkIHZlcnNpb24gd2l0aAotICogICBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuCi0gKiBwZm9iIC0KLSAqIHJkICAgICAgICAgICAgIC0gcmluZyBhZGRyZXNzCi0gKiBsZW5ndGhfaW5fYnl0ZXMgLQotICogdHlwZSAgICAgICAgICAgIC0gVGhlIHR5cGUgb2YgcmluZyB0byBjcmVhdGUuCi0gKiB1bHAgICAgICAgICAgICAgLSBUaGUgcmVxdWVzdGVkIFVMUCBudW1iZXIgZm9yIHRoZSByaW5nLgotICogCQkgICAgIFRoaXMgc2hvdWxkIGJlIHplcm8gYmFzZWQsIGkuZS4gMCwxLDIuIFRoaXMgbXVzdAotICogCQkgICAgIGJlIHZhbGlkIE5JQyBVTFAgYmFzZWQgb24gdGhlIGZpcm13YXJlIGNvbmZpZy4KLSAqICAgICAgICAgICAgICAgICAgIEFsbCBkb29yYmVsbHMgZm9yIHRoaXMgcmluZyBtdXN0IGJlIHNlbnQgdG8KLSAqICAgICAgICAgICAgICAgICAgIHRoaXMgVUxQLiBUaGUgZmlyc3QgbmV0d29yayByaW5nIGFsbG9jYXRlZCBmb3IKLSAqICAgICAgICAgICAgICAgICAgIGVhY2ggVUxQIGFyZSBoaWdoZXIgcGVyZm9ybWFuY2UgdGhhbiBzdWJzZXF1ZW50IHJpbmdzLgotICogY3Ffb2JqZWN0ICAgICAgIC0gY3Egb2JqZWN0IGZvciBjb21wbGV0aW9ucwotICogZXhfcGFyYW1ldGVycyAgIC0gQWRkaXRpb25hbCBwYXJhbWV0ZXJzICh0aGF0IG1heSBpbmNyZWFzZSBpbgotICogCQkgICAgIGZ1dHVyZSByZXZpc2lvbnMpLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBvbmx5IHVzZWQKLSAqIAkJICAgICBmb3IgY2VydGFpbiByaW5nIHR5cGVzIC0tIHNlZQotICogICAgICAgICAgICAgICAgICAgc3RydWN0IGJlX2V0aF9zcV9wYXJhbWV0ZXJzIGZvciBkZXRhaWxzLgotICogZXRoX3NxICAgICAgICAgIC0KLSAqIHJldHVybiBzdGF0dXMgICAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfZXRoX3NxX2NyZWF0ZV9leChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLCBzdHJ1Y3QgcmluZ19kZXNjICpyZCwKLQkJdTMyIGxlbmd0aCwgdTMyIHR5cGUsIHUzMiB1bHAsIHN0cnVjdCBiZV9jcV9vYmplY3QgKmNxX29iamVjdCwKLQkJc3RydWN0IGJlX2V0aF9zcV9wYXJhbWV0ZXJzICpleF9wYXJhbWV0ZXJzLAotCQlzdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0ICpldGhfc3EpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9FVEhfVFhfQ1JFQVRFICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1MzIgbjsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlBU1NFUlQocmQpOwotCUFTU0VSVChldGhfc3EpOwotCUFTU0VSVChleF9wYXJhbWV0ZXJzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JbWVtc2V0KGV0aF9zcSwgMCwgc2l6ZW9mKCpldGhfc3EpKTsKLQotCWV0aF9zcS0+cGFyZW50X2Z1bmN0aW9uID0gcGZvYjsKLQlldGhfc3EtPmJpZCA9IDB4RkZGRkZGRkY7Ci0JZXRoX3NxLT5jcV9vYmplY3QgPSBjcV9vYmplY3Q7Ci0KLQkvKiBUcmFuc2xhdGUgaHdsaWIgaW50ZXJmYWNlIHRvIGFybSBpbnRlcmZhY2UuICovCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBCRV9FVEhfVFhfUklOR19UWVBFX0ZPUldBUkRJTkc6Ci0JCXR5cGUgPSBFVEhfVFhfUklOR19UWVBFX0ZPUldBUkRJTkc7Ci0JCWJyZWFrOwotCWNhc2UgQkVfRVRIX1RYX1JJTkdfVFlQRV9TVEFOREFSRDoKLQkJdHlwZSA9IEVUSF9UWF9SSU5HX1RZUEVfU1RBTkRBUkQ7Ci0JCWJyZWFrOwotCWNhc2UgQkVfRVRIX1RYX1JJTkdfVFlQRV9CT1VORDoKLQkJQVNTRVJUKGV4X3BhcmFtZXRlcnMtPnBvcnQgPCAyKTsKLQkJdHlwZSA9IEVUSF9UWF9SSU5HX1RZUEVfQk9VTkQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVRSQUNFKERMX0VSUiwgIkludmFsaWQgZXRoIHR4IHJpbmcgdHlwZTolZCIsIHR5cGUpOwotCQlyZXR1cm4gQkVfTk9UX09LOwotCQlicmVhazsKLQl9Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJQVNTRVJUKHdyYik7Ci0JCVRSQUNFKERMX0VSUiwgIk5vIGZyZWUgTUNDIFdSQnMgaW4gY3JlYXRlIEVRLiIpOwotCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogTklDIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGNvbmZpZy4gKi8KLQlBU1NFUlQocGZvYi0+ZndfY29uZmlnLm5pY191bHBfbWFzayk7Ci0KLQkvKgotCSAqIFRoZSB1bHAgcGFyYW1ldGVyIG11c3Qgc2VsZWN0IGEgdmFsaWQgTklDIFVMUAotCSAqIGZvciB0aGUgY3VycmVudCBjb25maWcuCi0JICovCi0JQVNTRVJUKCgxIDw8IHVscCkgJiBwZm9iLT5md19jb25maWcubmljX3VscF9tYXNrKTsKLQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fRVRIX1RYX0NSRUFURSk7Ci0JZndjbWQtPmhlYWRlci5yZXF1ZXN0LnBvcnRfbnVtYmVyID0gZXhfcGFyYW1ldGVycy0+cG9ydDsKLQotCUFNQVBfU0VUX0JJVFNfUFRSKEVUWF9DT05URVhULCBwZF9pZCwKLQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIDApOwotCi0JbiA9IGJlX3JpbmdfbGVuZ3RoX3RvX2VuY29kaW5nKGxlbmd0aCwgc2l6ZW9mKHN0cnVjdCBFVEhfV1JCX0FNQVApKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihFVFhfQ09OVEVYVCwgdHhfcmluZ19zaXplLAotCQkJCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIG4pOwotCi0JQU1BUF9TRVRfQklUU19QVFIoRVRYX0NPTlRFWFQsIGNxX2lkX3NlbmQsCi0JCQkmZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmNvbnRleHQsIGNxX29iamVjdC0+Y3FfaWQpOwotCi0JbiA9IHBmb2ItPnBjaV9mdW5jdGlvbl9udW1iZXI7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVRYX0NPTlRFWFQsIGZ1bmMsICZmd2NtZC0+cGFyYW1zLnJlcXVlc3QuY29udGV4dCwgbik7Ci0KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QudHlwZSA9IHR5cGU7Ci0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnVscF9udW0gID0gKDEgPDwgdWxwKTsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubnVtX3BhZ2VzID0gRElWX1JPVU5EX1VQKGxlbmd0aCwgUEFHRV9TSVpFKTsKLQlBU1NFUlQoUEFHRVNfU1BBTk5FRChyZC0+dmEsIHJkLT5sZW5ndGgpID49Ci0JCQkJZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9wYWdlcyk7Ci0KLQkvKiBDcmVhdGUgYSBwYWdlIGxpc3QgZm9yIHRoZSBGV0NNRC4gKi8KLQliZV9yZF90b19wYV9saXN0KHJkLCBmd2NtZC0+cGFyYW1zLnJlcXVlc3QucGFnZXMsCi0JCQkgIEFSUkFZX1NJWkUoZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzKSk7Ci0KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQlOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB0byBjcmVhdGUgZXR4IHF1ZXVlIGZhaWxlZC4iKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogc2F2ZSB0aGUgYnV0bGVyIElEICovCi0JZXRoX3NxLT5iaWQgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmNpZDsKLQotCS8qIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUgY29ycmVzcG9uZGluZyBDUSAqLwotCWF0b21pY19pbmMoJmNxX29iamVjdC0+cmVmX2NvdW50KTsKLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi0vKgotICAgIFRoaXMgcm91dGluZSBkZXN0cm95cyBhbiBldGhlcm5ldCBzZW5kIHF1ZXVlCi0KLSAgICBFdGhTcSAtIEV0aFNxIEhhbmRsZSByZXR1cm5lZCBmcm9tIEV0aFNxQ3JlYXRlCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gQkVfU1VDQ0VTUy4KLQotICAgIFRoaXMgZnVuY3Rpb24gZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBFdGhTcUNyZWF0ZSBmb3IgdGhlIEV0aFNxIE9iamVjdC4KLQotKi8KLWludCBiZV9ldGhfc3FfZGVzdHJveShzdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0ICpldGhfc3EpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkvKiBTZW5kIGZ3Y21kIHRvIGRlc3Ryb3kgdGhlIHF1ZXVlLiAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3JpbmdfZGVzdHJveShldGhfc3EtPnBhcmVudF9mdW5jdGlvbiwgZXRoX3NxLT5iaWQsCi0JCSAgICAgRldDTURfUklOR19UWVBFX0VUSF9UWCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JQVNTRVJUKHN0YXR1cyA9PSAwKTsKLQotCS8qIERlcmVmZW5jZSBhbnkgYXNzb2NpYXRlZCBDUXMuICovCi0JYXRvbWljX2RlYygmZXRoX3NxLT5jcV9vYmplY3QtPnJlZl9jb3VudCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIHNldCB0aGUgdHJhbnNtaXQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMuCi0KLSAgICBGdW5jdGlvbk9iamVjdCAgICAgIC0gSGFuZGxlIHRvIGEgZnVuY3Rpb24gb2JqZWN0Ci0KLSAgICB0eGZjX2VuYWJsZSAgICAgICAgIC0gdHJhbnNtaXQgZmxvdyBjb250cm9sIGVuYWJsZSAtIHRydWUgZm9yCi0JCQkgIGVuYWJsZSwgZmFsc2UgZm9yIGRpc2FibGUKLQotICAgIHJ4ZmNfZW5hYmxlICAgICAgICAgLSByZWNlaXZlIGZsb3cgY29udHJvbCBlbmFibGUgLSB0cnVlIGZvcgotCQkJCWVuYWJsZSwgZmFsc2UgZm9yIGRpc2FibGUKLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGludCBlcnJvcgotICAgIGNvZGUgaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMOiA8IERJU1BBVENIX0xFVkVMCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBmYWlscyBpbiBub24tcHJpdmlsZWdlZCBtYWNoaW5lIGNvbnRleHQuCi0qLwotaW50Ci1iZV9ldGhfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJYm9vbCB0eGZjX2VuYWJsZSwgYm9vbCByeGZjX2VuYWJsZSkKLXsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX1NFVF9GTE9XX0NPTlRST0wgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX1NFVF9GTE9XX0NPTlRST0wpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnJ4X2Zsb3dfY29udHJvbCA9IHJ4ZmNfZW5hYmxlOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC50eF9mbG93X2NvbnRyb2wgPSB0eGZjX2VuYWJsZTsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgInNldCBmbG93IGNvbnRyb2wgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gZ2V0IHRoZSB0cmFuc21pdCBmbG93IGNvbnRyb2wgcGFyYW1ldGVycy4KLQotICAgIHBmb2IgICAgICAtIEhhbmRsZSB0byBhIGZ1bmN0aW9uIG9iamVjdAotCi0gICAgdHhmY19lbmFibGUgICAgICAgICAtIHRyYW5zbWl0IGZsb3cgY29udHJvbCBlbmFibGUgLSB0cnVlIGZvcgotCQkJZW5hYmxlLCBmYWxzZSBmb3IgZGlzYWJsZQotCi0gICAgcnhmY19lbmFibGUgICAgICAgICAtIHJlY2VpdmUgZmxvdyBjb250cm9sIGVuYWJsZSAtIHRydWUgZm9yIGVuYWJsZSwKLQkJCWZhbHNlIGZvciBkaXNhYmxlCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhIHVzZWZ1bCBpbnQgZXJyb3IgY29kZQotCQkJaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMOiA8IERJU1BBVENIX0xFVkVMCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBmYWlscyBpbiBub24tcHJpdmlsZWdlZCBtYWNoaW5lIGNvbnRleHQuCi0qLwotaW50Ci1iZV9ldGhfZ2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJYm9vbCAqdHhmY19lbmFibGUsIGJvb2wgKnJ4ZmNfZW5hYmxlKQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX0ZMT1dfQ09OVFJPTCAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fR0VUX0ZMT1dfQ09OVFJPTCk7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCQlOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0KLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAiZ2V0IGZsb3cgY29udHJvbCBmd2NtZCBmYWlsZWQuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JKnR4ZmNfZW5hYmxlID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS50eF9mbG93X2NvbnRyb2w7Ci0JKnJ4ZmNfZW5hYmxlID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS5yeF9mbG93X2NvbnRyb2w7Ci0KLWVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2V0aF9zZXRfcW9zCi0gKiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXRoZXJuZXQgdHJhbnNtaXQgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpCi0gKiAgIGNoYXJhY3RlcmlzdGljcyBvZiBCbGFkZUVuZ2luZSBmb3IgdGhlIGRvbWFpbi4gQWxsIGV0aGVybmV0Ci0gKiAgIHRyYW5zbWl0IHJpbmdzIG9mIHRoZSBkb21haW4gd2lsbCBldmVubHkgc2hhcmUgdGhlIGJhbmR3aWR0aC4KLSAqICAgVGhlIGV4ZWNlcHRpb24gdG8gc2hhcmluZyBpcyB0aGUgaG9zdCBwcmltYXJ5IChzdXBlcikgZXRoZXJuZXQKLSAqICAgdHJhbnNtaXQgcmluZyBhcyB3ZWxsIGFzIHRoZSBob3N0IGV0aGVybmV0IGZvcndhcmRpbmcgcmluZwotICogICBmb3IgbWlzc2VkIG9mZmxvYWQgZGF0YS4KLSAqIHBmb2IgLQotICogbWF4X2JwcyAgICAgICAgIC0gdGhlIG1heGltdW0gYml0cyBwZXIgc2Vjb25kIGluIHVuaXRzIG9mCi0gKiAJCQkxMCBNYnBzICh2YWxpZCAwLTEwMCkKLSAqIG1heF9wcHMgICAgICAgICAtIHRoZSBtYXhpbXVtIHBhY2tldHMgcGVyIHNlY29uZCBpbiB1bml0cwotICogCQkJb2YgMSBLcHBzICgwIGluZGljYXRlcyBubyBsaW1pdCkKLSAqIHJldHVybiBzdGF0dXMgICAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfZXRoX3NldF9xb3Moc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgdTMyIG1heF9icHMsIHUzMiBtYXhfcHBzKQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fU0VUX1FPUyAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fU0VUX1FPUyk7Ci0KLQkvKiBTZXQgZmllbGRzIGluIGZ3Y21kICovCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm1heF9iaXRzX3Blcl9zZWNvbmRfTklDID0gbWF4X2JwczsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubWF4X3BhY2tldHNfcGVyX3NlY29uZF9OSUMgPSBtYXhfcHBzOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC52YWxpZF9mbGFncyA9IFFPU19CSVRTX05JQyB8IFFPU19QS1RTX05JQzsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKQotCQlUUkFDRShETF9FUlIsICJuZXR3b3JrIHNldCBxb3MgZndjbWQgZmFpbGVkLiIpOwotCi1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfZXRoX2dldF9xb3MKLSAqICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGV0aGVybmV0IHRyYW5zbWl0IFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKQotICogICBjaGFyYWN0ZXJpc3RpY3MgZm9yIHRoZSBkb21haW4uCi0gKiBtYXhfYnBzICAgICAgICAgLSB0aGUgbWF4aW11bSBiaXRzIHBlciBzZWNvbmQgaW4gdW5pdHMgb2YKLSAqIAkJCTEwIE1icHMgKHZhbGlkIDAtMTAwKQotICogbWF4X3BwcyAgICAgICAgIC0gdGhlIG1heGltdW0gcGFja2V0cyBwZXIgc2Vjb25kIGluIHVuaXRzIG9mCi0gKiAJCQkxIEtwcHMgKDAgaW5kaWNhdGVzIG5vIGxpbWl0KQotICogcmV0dXJuIHN0YXR1cyAgIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotaW50Ci1iZV9ldGhfZ2V0X3FvcyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLCB1MzIgKm1heF9icHMsIHUzMiAqbWF4X3BwcykKLXsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9RT1MgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX0dFVF9RT1MpOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQlOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0KLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAibmV0d29yayBnZXQgcW9zIGZ3Y21kIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkqbWF4X2JwcyA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UubWF4X2JpdHNfcGVyX3NlY29uZF9OSUM7Ci0JKm1heF9wcHMgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLm1heF9wYWNrZXRzX3Blcl9zZWNvbmRfTklDOwotCi1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfZXRoX3NldF9mcmFtZV9zaXplCi0gKiAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZXRoZXJuZXQgbWF4aW11bSBmcmFtZSBzaXplLiBUaGUgcHJldmlvdXMKLSAqICAgdmFsdWVzIGFyZSByZXR1cm5lZC4KLSAqIHBmb2IgLQotICogdHhfZnJhbWVfc2l6ZSAgIC0gbWF4aW11bSB0cmFuc21pdCBmcmFtZSBzaXplIGluIGJ5dGVzCi0gKiByeF9mcmFtZV9zaXplICAgLSBtYXhpbXVtIHJlY2VpdmUgZnJhbWUgc2l6ZSBpbiBieXRlcwotICogcmV0dXJuIHN0YXR1cyAgIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotaW50Ci1iZV9ldGhfc2V0X2ZyYW1lX3NpemUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgICAgdTMyICp0eF9mcmFtZV9zaXplLCB1MzIgKnJ4X2ZyYW1lX3NpemUpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9TRVRfRlJBTUVfU0laRSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fU0VUX0ZSQU1FX1NJWkUpOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYXhfdHhfZnJhbWVfc2l6ZSA9ICp0eF9mcmFtZV9zaXplOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYXhfcnhfZnJhbWVfc2l6ZSA9ICpyeF9mcmFtZV9zaXplOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgIm5ldHdvcmsgc2V0IGZyYW1lIHNpemUgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCSp0eF9mcmFtZV9zaXplID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS5jaGlwX21heF90eF9mcmFtZV9zaXplOwotCSpyeF9mcmFtZV9zaXplID0gZndjbWQtPnBhcmFtcy5yZXNwb25zZS5jaGlwX21heF9yeF9mcmFtZV9zaXplOwotCi1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi0vKgotICAgIFRoaXMgcm91dGluZSBjcmVhdGVzIGEgRXRoZXJuZXQgcmVjZWl2ZSByaW5nLgotCi0gICAgcGZvYiAgICAgIC0gaGFuZGxlIHRvIGEgZnVuY3Rpb24gb2JqZWN0Ci0gICAgcnFfYmFzZV92YSAgICAgICAgICAgIC0gYmFzZSBWQSBmb3IgdGhlIGRlZmF1bHQgcmVjZWl2ZSByaW5nLiB0aGlzIG11c3QgYmUKLQkJCWV4YWN0bHkgOEsgaW4gbGVuZ3RoIGFuZCBjb250aW5ndW91cyBwaHlzaWNhbCBtZW1vcnkuCi0gICAgY3Ffb2JqZWN0ICAgICAgICAgICAgLSBoYW5kbGUgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgQ1EgdG8gYmUgYXNzb2NpYXRlZAotCQkJd2l0aCB0aGUgUlEuCi0gICAgcHBfZXRoX3JxICAgICAgICAgICAgIC0gcG9pbnRlciB0byBhbiBvcHFhdWUgaGFuZGxlIHdoZXJlIGFuIGV0aAotCQkJcmVjZWl2ZSBvYmplY3QgaXMgcmV0dXJuZWQuCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCAsIG90aGVyd2lzZSBhIHVzZWZ1bAotICAgIGludCBlcnJvciBjb2RlIGlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotICAgIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgc3RydWN0IGJlX2V0aHJxX29iamVjdCAqb2JqZWN0LgotICAgIHRoZXJlIG11c3QgYmUgbm8gbW9yZSB0aGFuIDEgb2YgdGhlc2UgcGVyIGZ1bmN0aW9uIG9iamVjdCwgdW5sZXNzIHRoZQotICAgIGZ1bmN0aW9uIG9iamVjdCBzdXBwb3J0cyBSU1MgKGlzIG5ldHdvcmtpbmcgYW5kIG9uIHRoZSBob3N0KS4KLSAgICB0aGUgcnFfYmFzZV92YSBtdXN0IHBvaW50IHRvIGEgYnVmZmVyIG9mIGV4YWN0bHkgOEsuCi0gICAgdGhlIGVyeDo6aG9zdF9jcWlkIChvciBob3N0X3N0b3JfY3FpZCkgcmVnaXN0ZXIgYW5kIGVyeDo6cmluZ19wYWdlIHJlZ2lzdGVycwotICAgIHdpbGwgYmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZSBvbiByZXR1cm4KLSovCi1pbnQKLWJlX2V0aF9ycV9jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCXN0cnVjdCByaW5nX2Rlc2MgKnJkLCBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QsCi0JCQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpiY21jX2NxX29iamVjdCwKLQkJCXN0cnVjdCBiZV9ldGhycV9vYmplY3QgKmV0aF9ycSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXN0cnVjdCBGV0NNRF9DT01NT05fRVRIX1JYX0NSRUFURSAqZndjbWQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCS8qIE1QVSB3aWxsIHNldCB0aGUgICovCi0JQVNTRVJUKHJkKTsKLQlBU1NFUlQoZXRoX3JxKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JZXRoX3JxLT5wYXJlbnRfZnVuY3Rpb24gPSBwZm9iOwotCWV0aF9ycS0+Y3Ffb2JqZWN0ID0gY3Ffb2JqZWN0OwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIEVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX0VUSF9SWF9DUkVBVEUpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9wYWdlcyA9IDI7CS8qIHJlcXVpcmVkIGxlbmd0aCAqLwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jcV9pZCA9IGNxX29iamVjdC0+Y3FfaWQ7Ci0KLQlpZiAoYmNtY19jcV9vYmplY3QpCi0JCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5iY21jX2NxX2lkID0gYmNtY19jcV9vYmplY3QtPmNxX2lkOwotCWVsc2UKLQkJZndjbWQtPnBhcmFtcy5yZXF1ZXN0LmJjbWNfY3FfaWQgPSAweEZGRkY7Ci0KLQkvKiBDcmVhdGUgYSBwYWdlIGxpc3QgZm9yIHRoZSBGV0NNRC4gKi8KLQliZV9yZF90b19wYV9saXN0KHJkLCBmd2NtZC0+cGFyYW1zLnJlcXVlc3QucGFnZXMsCi0JCQkgIEFSUkFZX1NJWkUoZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnBhZ2VzKSk7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCQlOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCVRSQUNFKERMX0VSUiwgImZ3Y21kIHRvIG1hcCBldGggcnhxIGZyYWdzIGZhaWxlZC4iKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0JLyogU2F2ZSB0aGUgcmluZyBJRCBmb3IgY2xlYW51cC4gKi8KLQlldGhfcnEtPnJpZCA9IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuaWQ7Ci0KLQlhdG9taWNfaW5jKCZjcV9vYmplY3QtPnJlZl9jb3VudCk7Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGRlc3Ryb3lzIGFuIEV0aGVybmV0IHJlY2VpdmUgcXVldWUKLQotICAgIGV0aF9ycSAtIGV0aGVybmV0IHJlY2VpdmUgcXVldWUgaGFuZGxlIHJldHVybmVkIGZyb20gZXRoX3JxX2NyZWF0ZQotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlIGludCBvbiBmYWlsdXJlLgotCi0gICAgVGhpcyBmdW5jdGlvbiBmcmVlcyByZXNvdXJjcyBhbGxvY2F0ZWQgYnkgRXRoUnFDcmVhdGUuCi0gICAgVGhlIGVyeDo6aG9zdF9jcWlkIChvciBob3N0X3N0b3JfY3FpZCkgcmVnaXN0ZXIgYW5kIGVyeDo6cmluZ19wYWdlCi0gICAgcmVnaXN0ZXJzIHdpbGwgYmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZSBvbiByZXR1cm4KLSAgICBJUlFMOiA8IERJU1BBVENIX0xFVkVMCi0qLwotCi1zdGF0aWMgdm9pZCBiZV9ldGhfcnFfZGVzdHJveV9pbnRlcm5hbF9jYih2b2lkICpjb250ZXh0LCBpbnQgc3RhdHVzLAotCQkJCQkgc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiKQotewotCXN0cnVjdCBiZV9ldGhycV9vYmplY3QgKmV0aF9ycSA9IChzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0ICopIGNvbnRleHQ7Ci0KLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJVFJBQ0UoRExfRVJSLCAiRGVzdHJveSBldGggcnEgZmFpbGVkIGluIGludGVybmFsIGNhbGxiYWNrLlxuIik7Ci0JfSBlbHNlIHsKLQkJLyogRGVyZWZlcmVuY2UgYW55IENRcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS4gKi8KLQkJYXRvbWljX2RlYygmZXRoX3JxLT5jcV9vYmplY3QtPnJlZl9jb3VudCk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1pbnQgYmVfZXRoX3JxX2Rlc3Ryb3koc3RydWN0IGJlX2V0aHJxX29iamVjdCAqZXRoX3JxKQotewotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCi0JLyogU2VuZCBmd2NtZCB0byBkZXN0cm95IHRoZSBSUS4gKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9yaW5nX2Rlc3Ryb3koZXRoX3JxLT5wYXJlbnRfZnVuY3Rpb24sCi0JCQlldGhfcnEtPnJpZCwgRldDTURfUklOR19UWVBFX0VUSF9SWCwgTlVMTCwgTlVMTCwKLQkJCWJlX2V0aF9ycV9kZXN0cm95X2ludGVybmFsX2NiLCBldGhfcnEpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfZXRoX3JxX2Rlc3Ryb3lfb3B0aW9ucwotICogICBEZXN0cm95cyBhbiBldGhlcm5ldCByZWNlaXZlIHJpbmcgd2l0aCBmaW5lciBncmFudWxhcml0eSBvcHRpb25zCi0gKiAgIHRoYW4gdGhlIHN0YW5kYXJkIGJlX2V0aF9ycV9kZXN0cm95KCkgQVBJIGZ1bmN0aW9uLgotICogZXRoX3JxICAgICAgICAgICAtCi0gKiBmbHVzaCAgICAgICAgICAgIC0gU2V0IHRvIDEgdG8gZmx1c2ggdGhlIHJpbmcsIHNldCB0byAwIHRvIGJ5cGFzcyB0aGUgZmx1c2gKLSAqIGNiICAgICAgICAgICAgICAgLSBDYWxsYmFjayBmdW5jdGlvbiBvbiBjb21wbGV0aW9uCi0gKiBjYl9jb250ZXh0ICAgICAgIC0gQ2FsbGJhY2sgY29udGV4dAotICogcmV0dXJuIHN0YXR1cyAgICAtIEJFX1NVQ0NFU1MgKDApIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQKLWJlX2V0aF9ycV9kZXN0cm95X29wdGlvbnMoc3RydWN0IGJlX2V0aHJxX29iamVjdCAqZXRoX3JxLCBib29sIGZsdXNoLAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCkKLXsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX1JJTkdfREVTVFJPWSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IEJFX1NVQ0NFU1M7Ci0Jc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JcGZvYiA9IGV0aF9ycS0+cGFyZW50X2Z1bmN0aW9uOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlUUkFDRShETF9JTkZPLCAiRGVzdHJveSBldGhfcnEgcmluZyBpZDolZCwgZmx1c2g6JWQiLCBldGhfcnEtPnJpZCwKLQkgICAgICBmbHVzaCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJQVNTRVJUKHdyYik7Ci0JCVRSQUNFKERMX0VSUiwgIk5vIGZyZWUgTUNDIFdSQnMgaW4gZGVzdHJveSBldGhfcnEgcmluZy4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fUklOR19ERVNUUk9ZKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5pZCA9IGV0aF9ycS0+cmlkOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5yaW5nX3R5cGUgPSBGV0NNRF9SSU5HX1RZUEVfRVRIX1JYOwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5ieXBhc3NfZmx1c2ggPSAoKDAgPT0gZmx1c2gpID8gMSA6IDApOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBjYiwgY2JfY29udGV4dCwKLQkJCWJlX2V0aF9ycV9kZXN0cm95X2ludGVybmFsX2NiLCBldGhfcnEsIGZ3Y21kLCBOVUxMKTsKLQotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUyAmJiBzdGF0dXMgIT0gQkVfUEVORElORykgewotCQlUUkFDRShETF9FUlIsICJldGhfcnEgcmluZyBkZXN0cm95IGZhaWxlZC4gaWQ6JWQsIGZsdXNoOiVkIiwKLQkJICAgICAgZXRoX3JxLT5yaWQsIGZsdXNoKTsKLQkJZ290byBFcnJvcjsKLQl9Ci0KLUVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIHF1ZXJpZXMgdGhlIGZyYWcgc2l6ZSBmb3IgZXJ4LgotCi0gICAgcGZvYiAgICAgIC0gaGFuZGxlIHRvIGEgZnVuY3Rpb24gb2JqZWN0Ci0KLSAgICBmcmFnX3NpemVfYnl0ZXMgICAgICAgLSBlcnggZnJhZyBzaXplIGluIGJ5dGVzIHRoYXQgaXMvd2FzIHNldC4KLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGludCBlcnJvcgotICAgIGNvZGUgaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMOiA8IERJU1BBVENIX0xFVkVMCi0KLSovCi1pbnQKLWJlX2V0aF9ycV9nZXRfZnJhZ19zaXplKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsIHUzMiAqZnJhZ19zaXplX2J5dGVzKQotewotCXN0cnVjdCBGV0NNRF9FVEhfR0VUX1JYX0ZSQUdfU0laRSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JQVNTRVJUKGZyYWdfc2l6ZV9ieXRlcyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlUUkFDRShETF9FUlIsICJNQ0Mgd3JiIHBlZWsgZmFpbGVkLiIpOwotCQlyZXR1cm4gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBFVEhfR0VUX1JYX0ZSQUdfU0laRSk7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgImdldCBmcmFnIHNpemUgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCSpmcmFnX3NpemVfYnl0ZXMgPSAxIDw8IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuYWN0dWFsX2ZyYWdzaXplX2xvZzI7Ci0KLWVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIHNldCB0aGUgZnJhZyBzaXplIGZvciBlcnguICBJZiB0aGUgZnJhZyBzaXplIGlzCi0gICAgYWxyZWFkeSBzZXQsIHRoZSBhdHRlbXB0IGZhaWxzIGFuZCB0aGUgY3VycmVudCBmcmFnIHNpemUgaXMgcmV0dXJuZWQuCi0KLSAgICBwZm9iICAgICAgLSBIYW5kbGUgdG8gYSBmdW5jdGlvbiBvYmplY3QKLQotICAgIGZyYWdfc2l6ZSAgICAgICAtIEVyeCBmcmFnIHNpemUgaW4gYnl0ZXMgdGhhdCBpcy93YXMgc2V0LgotCi0gICAgY3VycmVudF9mcmFnX3NpemVfYnl0ZXMgICAgLSBQb2ludGVyIHRvIGxvY2F0aW9uIHdoZXJlIGN1cnJyZW50IGZyYWcKLQkJCQkgaXMgdG8gYmUgcnR1cm5lZAotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgaW50IGVycm9yCi0gICAgY29kZSBpcyByZXR1cm5lZC4KLQotICAgIElSUUw6IDwgRElTUEFUQ0hfTEVWRUwKLQotICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIGZhaWxzIGluIG5vbi1wcml2aWxlZ2VkIG1hY2hpbmUgY29udGV4dC4KLSovCi1pbnQKLWJlX2V0aF9ycV9zZXRfZnJhZ19zaXplKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQl1MzIgZnJhZ19zaXplLCB1MzIgKmZyYWdfc2l6ZV9ieXRlcykKLXsKLQlzdHJ1Y3QgRldDTURfRVRIX1NFVF9SWF9GUkFHX1NJWkUgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCUFTU0VSVChmcmFnX3NpemVfYnl0ZXMpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBFVEhfU0VUX1JYX0ZSQUdfU0laRSk7Ci0KLQlBU1NFUlQoZnJhZ19zaXplID49IDEyOCAmJiBmcmFnX3NpemUgPD0gMTYgKiAxMDI0KTsKLQotCS8qIFRoaXMgaXMgdGhlIGxvZzIgb2YgdGhlIGZyYWdzaXplLiAgVGhpcyBpcyBub3QgdGhlIGV4YWN0Ci0JICogRVJYIGVuY29kaW5nLiAqLwotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5uZXdfZnJhZ3NpemVfbG9nMiA9IF9faWxvZzJfdTMyKGZyYWdfc2l6ZSk7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgInNldCBmcmFnIHNpemUgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCSpmcmFnX3NpemVfYnl0ZXMgPSAxIDw8IGZ3Y21kLT5wYXJhbXMucmVzcG9uc2UuYWN0dWFsX2ZyYWdzaXplX2xvZzI7Ci1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0KLS8qCi0gICAgVGhpcyByb3V0aW5lIGdldHMgb3Igc2V0cyBhIG1hYyBhZGRyZXNzIGZvciBhIGRvbWFpbgotICAgIGdpdmVuIHRoZSBwb3J0IGFuZCBtYWMuCi0KLSAgICBGdW5jdGlvbk9iamVjdCAgLSBGdW5jdGlvbiBvYmplY3QgaGFuZGxlLgotICAgIHBvcnQxICAgICAgICAgICAtIFNldCB0byBUUlVFIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCBzZXQvZ2V0IHRoZSBQb3J0IDEKLQkJCWFkZHJlc3MuICBPbmx5IHRoZSBob3N0IG1heSBzZXQgdGhpcyB0byBUUlVFLgotICAgIG1hYzEgICAgICAgICAgICAtIFNldCB0byBUUlVFIGlmIHRoaXMgZnVuY3Rpb24gd2lsbCBzZXQvZ2V0IHRoZQotCQkJTUFDIDEgYWRkcmVzcy4gIE9ubHkgdGhlIGhvc3QgbWF5IHNldCB0aGlzIHRvIFRSVUUuCi0gICAgd3JpdGUgICAgICAgICAgIC0gU2V0IHRvIFRSVUUgaWYgdGhpcyBmdW5jdGlvbiBzaG91bGQgd3JpdGUgdGhlIG1hYyBhZGRyZXNzLgotICAgIG1hY19hZGRyZXNzICAgICAgLSBCdWZmZXIgb2YgdGhlIG1hYyBhZGRyZXNzIHRvIHJlYWQgb3Igd3JpdGUuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhIHVzZWZ1bCBpbnQgaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMOiA8IERJU1BBVENIX0xFVkVMCi0qLwotaW50IGJlX3J4Zl9tYWNfYWRkcmVzc19yZWFkX3dyaXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCWJvb2wgcG9ydDEsCS8qIFZNIG11c3QgYWx3YXlzIHNldCB0byBmYWxzZSAqLwotCQlib29sIG1hYzEsCS8qIFZNIG11c3QgYWx3YXlzIHNldCB0byBmYWxzZSAqLwotCQlib29sIG1nbXQsIGJvb2wgd3JpdGUsCi0JCWJvb2wgcGVybWFuZW50LCB1OCAqbWFjX2FkZHJlc3MsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAkvKiBvcHRpb25hbCAqLwotCQl2b2lkICpjYl9jb250ZXh0KQkvKiBvcHRpb25hbCAqLwotewotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCXVuaW9uIHsKLQkJc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01BQ19RVUVSWSAqcXVlcnk7Ci0JCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NQUNfU0VUICpzZXQ7Ci0JfSBmd2NtZCA9IHtOVUxMfTsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCXUzMiB0eXBlID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0Jc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSByYzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JQVNTRVJUKG1hY19hZGRyZXNzKTsKLQotCUFTU0VSVChwb3J0MSA9PSBmYWxzZSk7Ci0JQVNTRVJUKG1hYzEgPT0gZmFsc2UpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB3cmIgcGVlayBmYWlsZWQuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIEVycm9yOwotCX0KLQotCWlmIChtZ210KSB7Ci0JCXR5cGUgPSBNQUNfQUREUkVTU19UWVBFX01BTkFHRU1FTlQ7Ci0JfSBlbHNlIHsKLQkJaWYgKHBmb2ItPnR5cGUgPT0gQkVfRlVOQ1RJT05fVFlQRV9ORVRXT1JLKQotCQkJdHlwZSA9IE1BQ19BRERSRVNTX1RZUEVfTkVUV09SSzsKLQkJZWxzZQotCQkJdHlwZSA9IE1BQ19BRERSRVNTX1RZUEVfU1RPUkFHRTsKLQl9Ci0KLQlpZiAod3JpdGUpIHsKLQkJLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZwotCQkgKiByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLgotCQkgKi8KLQkJZndjbWQuc2V0ID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLAotCQkJCQkgICAgICAgd3JiLCBDT01NT05fTlRXS19NQUNfU0VUKTsKLQotCQlmd2NtZC5zZXQtPnBhcmFtcy5yZXF1ZXN0LmludmFsaWRhdGUgPSAwOwotCQlmd2NtZC5zZXQtPnBhcmFtcy5yZXF1ZXN0Lm1hYzEgPSAobWFjMSA/IDEgOiAwKTsKLQkJZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC5wb3J0ID0gKHBvcnQxID8gMSA6IDApOwotCQlmd2NtZC5zZXQtPnBhcmFtcy5yZXF1ZXN0LnR5cGUgPSB0eXBlOwotCi0JCS8qIENvcHkgdGhlIG1hYyBhZGRyZXNzIHRvIHNldC4gKi8KLQkJZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC5tYWMuU2l6ZU9mU3RydWN0dXJlID0KLQkJCSAgICBzaXplb2YoZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC5tYWMpOwotCQltZW1jcHkoZndjbWQuc2V0LT5wYXJhbXMucmVxdWVzdC5tYWMuTUFDQWRkcmVzcywKLQkJCW1hY19hZGRyZXNzLCBFVEhfQUxFTik7Ci0KLQkJLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQkJc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwKLQkJCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQuc2V0LCBOVUxMKTsKLQotCX0gZWxzZSB7Ci0KLQkJLyoKLQkJICogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZwotCQkgKiByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLgotCQkgKi8KLQkJZndjbWQucXVlcnkgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsCi0JCQkJCSAgICAgICB3cmIsIENPTU1PTl9OVFdLX01BQ19RVUVSWSk7Ci0KLQkJZndjbWQucXVlcnktPnBhcmFtcy5yZXF1ZXN0Lm1hYzEgPSAobWFjMSA/IDEgOiAwKTsKLQkJZndjbWQucXVlcnktPnBhcmFtcy5yZXF1ZXN0LnBvcnQgPSAocG9ydDEgPyAxIDogMCk7Ci0JCWZ3Y21kLnF1ZXJ5LT5wYXJhbXMucmVxdWVzdC50eXBlID0gdHlwZTsKLQkJZndjbWQucXVlcnktPnBhcmFtcy5yZXF1ZXN0LnBlcm1hbmVudCA9IHBlcm1hbmVudDsKLQotCQlyYy5sZW5ndGggPSBGSUVMRF9TSVpFT0Yoc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01BQ19RVUVSWSwKLQkJCQkJCXBhcmFtcy5yZXNwb25zZS5tYWMuTUFDQWRkcmVzcyk7Ci0JCXJjLmZ3Y21kX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NQUNfUVVFUlksCi0JCQkJCQlwYXJhbXMucmVzcG9uc2UubWFjLk1BQ0FkZHJlc3MpOwotCQlyYy52YSA9IG1hY19hZGRyZXNzOwotCQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAod2l0aCBhIGNvcHkgZm9yIHRoZSByZXNwb25zZSkgKi8KLQkJc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgY2IsCi0JCQkJY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQucXVlcnksICZyYyk7Ci0JfQotCi0JaWYgKHN0YXR1cyA8IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAibWFjIHNldC9xdWVyeSBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIGRhdGEgdG8gY29udGV4dCBtZW1vcnkuCi0KLSAgICBwZm9iICAtIEZ1bmN0aW9uIG9iamVjdCBoYW5kbGUuCi0gICAgbWFjX3RhYmxlICAgICAtIFNldCB0byB0aGUgMTI4LWJpdCBtdWx0aWNhc3QgYWRkcmVzcyBoYXNoIHRhYmxlLgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgaW50IGlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotKi8KLQotaW50IGJlX3J4Zl9tdWx0aWNhc3RfY29uZmlnKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCWJvb2wgcHJvbWlzY3VvdXMsIHUzMiBudW0sIHU4ICptYWNfdGFibGUsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAkvKiBvcHRpb25hbCAqLwotCQl2b2lkICpjYl9jb250ZXh0LAotCQlzdHJ1Y3QgYmVfbXVsdGljYXN0X3FfY3R4dCAqcV9jdHh0KQotewotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VUICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKmdlbmVyaWNfY3R4dCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JQVNTRVJUKG51bSA8PSBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYWMpKTsKLQotCWlmIChudW0gPiBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC5tYWMpKSB7Ci0JCVRSQUNFKERMX0VSUiwgIlRvbyBtYW55IG11bHRpY2FzdCBhZGRyZXNzZXMuIEJFIHN1cHBvcnRzICVkLiIsCi0JCSAgICAgIChpbnQpIEFSUkFZX1NJWkUoZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm1hYykpOwotCQlyZXR1cm4gQkVfTk9UX09LOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCWlmIChxX2N0eHQgJiYgY2IpIHsKLQkJCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCQlnZW5lcmljX2N0eHQgPSAoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICopIHFfY3R4dDsKLQkJCWdlbmVyaWNfY3R4dC0+Y29udGV4dC5ieXRlcyA9IHNpemVvZigqcV9jdHh0KTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQkJZ290byBFcnJvcjsKLQkJfQotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVCk7Ci0KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QucHJvbWlzY3VvdXMgPSBwcm9taXNjdW91czsKLQlpZiAoIXByb21pc2N1b3VzKSB7Ci0JCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5udW1fbWFjID0gbnVtOwotCQlpZiAobnVtID4gMCkgewotCQkJQVNTRVJUKG1hY190YWJsZSk7Ci0JCQltZW1jcHkoZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm1hYywKLQkJCQkJCW1hY190YWJsZSwgRVRIX0FMRU4gKiBudW0pOwotCQl9Ci0JfQotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBnZW5lcmljX2N0eHQsCi0JCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgIm11bHRpY2FzdCBmd2NtZCBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgYWRkcyBvciByZW1vdmVzIGEgdmxhbiB0YWcgZnJvbSB0aGUgcnhmIHRhYmxlLgotCi0gICAgRnVuY3Rpb25PYmplY3QgIC0gRnVuY3Rpb24gb2JqZWN0IGhhbmRsZS4KLSAgICBWTGFuVGFnICAgICAgICAgLSBWTGFuIHRhZyB0byBhZGQgb3IgcmVtb3ZlLgotICAgIEFkZCAgICAgICAgICAgICAtIFNldCB0byBUUlVFIGlmIHRoaXMgd2lsbCBhZGQgYSB2bGFuIHRhZwotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYSB1c2VmdWwgaW50IGlzIHJldHVybmVkLgotCi0gICAgSVJRTDogPCBESVNQQVRDSF9MRVZFTAotKi8KLWludCBiZV9yeGZfdmxhbl9jb25maWcoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJYm9vbCBwcm9taXNjdW91cywgdTMyIG51bSwgdTE2ICp2bGFuX3RhZ19hcnJheSwKLQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCS8qIG9wdGlvbmFsICovCi0JCXZvaWQgKmNiX2NvbnRleHQsCi0JCXN0cnVjdCBiZV92bGFuX3FfY3R4dCAqcV9jdHh0KQkvKiBvcHRpb25hbCAqLwotewotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19WTEFOX0NPTkZJRyAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0Jc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpnZW5lcmljX2N0eHQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCWlmIChudW0gPiBBUlJBWV9TSVpFKGZ3Y21kLT5wYXJhbXMucmVxdWVzdC52bGFuX3RhZykpIHsKLQkJVFJBQ0UoRExfRVJSLCAiVG9vIG1hbnkgVkxBTiB0YWdzLiIpOwotCQlyZXR1cm4gQkVfTk9UX09LOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0Jd3JiID0gYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHBmb2IpOwotCWlmICghd3JiKSB7Ci0JCWlmIChxX2N0eHQgJiYgY2IpIHsKLQkJCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCQlnZW5lcmljX2N0eHQgPSAoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICopIHFfY3R4dDsKLQkJCWdlbmVyaWNfY3R4dC0+Y29udGV4dC5ieXRlcyA9IHNpemVvZigqcV9jdHh0KTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQkJZ290byBFcnJvcjsKLQkJfQotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX05UV0tfVkxBTl9DT05GSUcpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnByb21pc2N1b3VzID0gcHJvbWlzY3VvdXM7Ci0JaWYgKCFwcm9taXNjdW91cykgewotCQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QubnVtX3ZsYW4gPSBudW07Ci0KLQkJaWYgKG51bSA+IDApIHsKLQkJCUFTU0VSVCh2bGFuX3RhZ19hcnJheSk7Ci0JCQltZW1jcHkoZndjbWQtPnBhcmFtcy5yZXF1ZXN0LnZsYW5fdGFnLCB2bGFuX3RhZ19hcnJheSwKLQkJCQkgIG51bSAqIHNpemVvZih2bGFuX3RhZ19hcnJheVswXSkpOwotCQl9Ci0JfQotCi0JLyogUG9zdCB0aGUgY29tbWFkbiAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIGdlbmVyaWNfY3R4dCwKLQkJCWNiLCBjYl9jb250ZXh0LCBOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAidmxhbiBmd2NtZCBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi1pbnQgYmVfcnhmX2xpbmtfc3RhdHVzKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCXN0cnVjdCBCRV9MSU5LX1NUQVRVUyAqbGlua19zdGF0dXMsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCQl2b2lkICpjYl9jb250ZXh0LAotCQlzdHJ1Y3QgYmVfbGlua19zdGF0dXNfcV9jdHh0ICpxX2N0eHQpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKmdlbmVyaWNfY3R4dCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCXN0cnVjdCBiZV9tY2Nfd3JiX3Jlc3BvbnNlX2NvcHkgcmM7Ci0KLQlBU1NFUlQobGlua19zdGF0dXMpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0KLQlpZiAoIXdyYikgewotCQlpZiAocV9jdHh0ICYmIGNiKSB7Ci0JCQl3cmIgPSAoc3RydWN0IE1DQ19XUkJfQU1BUCAqKSAmcV9jdHh0LT53cmJfaGVhZGVyOwotCQkJZ2VuZXJpY19jdHh0ID0gKHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqKSBxX2N0eHQ7Ci0JCQlnZW5lcmljX2N0eHQtPmNvbnRleHQuYnl0ZXMgPSBzaXplb2YoKnFfY3R4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBCRV9TVEFUVVNfTk9fTUNDX1dSQjsKLQkJCWdvdG8gRXJyb3I7Ci0JCX0KLQl9Ci0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCWZ3Y21kID0gQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChwZm9iLCB3cmIsCi0JCQkJCSAgICAgICBDT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSk7Ci0KLQlyYy5sZW5ndGggPSBGSUVMRF9TSVpFT0Yoc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZLAotCQkJCQlwYXJhbXMucmVzcG9uc2UpOwotCXJjLmZ3Y21kX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSwKLQkJCQkJcGFyYW1zLnJlc3BvbnNlKTsKLQlyYy52YSA9IGxpbmtfc3RhdHVzOwotCS8qIFBvc3Qgb3IgcXVldWUgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgZ2VuZXJpY19jdHh0LAotCQkJY2IsIGNiX2NvbnRleHQsIE5VTEwsIE5VTEwsIGZ3Y21kLCAmcmMpOwotCi0JaWYgKHN0YXR1cyA8IDApIHsKLQkJVFJBQ0UoRExfRVJSLCAibGluayBzdGF0dXMgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWludAotYmVfcnhmX3F1ZXJ5X2V0aF9zdGF0aXN0aWNzKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICBzdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTICp2YV9mb3JfZndjbWQsCi0JCSAgICB1NjQgcGFfZm9yX2Z3Y21kLCBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJICAgIHZvaWQgKmNiX2NvbnRleHQsCi0JCSAgICBzdHJ1Y3QgYmVfbm9uZW1iZWRkZWRfcV9jdHh0ICpxX2N0eHQpCi17Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKmdlbmVyaWNfY3R4dCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0JQVNTRVJUKHZhX2Zvcl9md2NtZCk7Ci0JQVNTRVJUKHBhX2Zvcl9md2NtZCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQotCWlmICghd3JiKSB7Ci0JCWlmIChxX2N0eHQgJiYgY2IpIHsKLQkJCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCQlnZW5lcmljX2N0eHQgPSAoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICopIHFfY3R4dDsKLQkJCWdlbmVyaWNfY3R4dC0+Y29udGV4dC5ieXRlcyA9IHNpemVvZigqcV9jdHh0KTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQkJZ290byBFcnJvcjsKLQkJfQotCX0KLQotCVRSQUNFKERMX0lORk8sICJRdWVyeSBldGggc3RhdHMuIGZ3Y21kIHZhOiVwIHBhOjB4JTA4eF8lMDh4IiwKLQkgICAgICB2YV9mb3JfZndjbWQsIHVwcGVyXzMyX2JpdHMocGFfZm9yX2Z3Y21kKSwgKHUzMilwYV9mb3JfZndjbWQpOwotCi0JLyogUHJlcGFyZXMgYW4gZW1iZWRkZWQgZndjbWQsIGluY2x1ZGluZyByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiAqLwotCXZhX2Zvcl9md2NtZCA9IEJFX1BSRVBBUkVfTk9ORU1CRURERURfRldDTUQocGZvYiwgd3JiLAotCQkJICB2YV9mb3JfZndjbWQsIHBhX2Zvcl9md2NtZCwgRVRIX0dFVF9TVEFUSVNUSUNTKTsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgZ2VuZXJpY19jdHh0LAotCQljYiwgY2JfY29udGV4dCwgTlVMTCwgTlVMTCwgdmFfZm9yX2Z3Y21kLCBOVUxMKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlUUkFDRShETF9FUlIsICJldGggc3RhdHMgZndjbWQgZmFpbGVkLiIpOwotCQlnb3RvIEVycm9yOwotCX0KLQotRXJyb3I6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAwOwotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHBmb2ItPm1jYyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWludAotYmVfcnhmX3Byb21pc2N1b3VzKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIGJvb2wgZW5hYmxlX3BvcnQwLCBib29sIGVuYWJsZV9wb3J0MSwKLQkJICAgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQsCi0JCSAgIHN0cnVjdCBiZV9wcm9taXNjdW91c19xX2N0eHQgKnFfY3R4dCkKLXsKLQlzdHJ1Y3QgRldDTURfRVRIX1BST01JU0NVT1VTICpmd2NtZCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQgKmdlbmVyaWNfY3R4dCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQotCWlmICghd3JiKSB7Ci0JCWlmIChxX2N0eHQgJiYgY2IpIHsKLQkJCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCQlnZW5lcmljX2N0eHQgPSAoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICopIHFfY3R4dDsKLQkJCWdlbmVyaWNfY3R4dC0+Y29udGV4dC5ieXRlcyA9IHNpemVvZigqcV9jdHh0KTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQkJZ290byBFcnJvcjsKLQkJfQotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgRVRIX1BST01JU0NVT1VTKTsKLQotCWZ3Y21kLT5wYXJhbXMucmVxdWVzdC5wb3J0MF9wcm9taXNjdW91cyA9IGVuYWJsZV9wb3J0MDsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QucG9ydDFfcHJvbWlzY3VvdXMgPSBlbmFibGVfcG9ydDE7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIGdlbmVyaWNfY3R4dCwKLQkJCWNiLCBjYl9jb250ZXh0LCBOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0KLQlpZiAoc3RhdHVzIDwgMCkgewotCQlUUkFDRShETF9FUlIsICJwcm9taXNjdW91cyBmd2NtZCBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbjogYmVfcnhmX2ZpbHRlcl9jb25maWcKLSAqICAgQ29uZmlndXJlcyBCbGFkZUVuZ2luZSBldGhlcm5ldCByZWNlaXZlIGZpbHRlciBzZXR0aW5ncy4KLSAqIHBmb2IgICAgLQotICogc2V0dGluZ3MgICAgICAgICAgIC0gUG9pbnRlciB0byB0aGUgcmVxdWVzdGVkIGZpbHRlciBzZXR0aW5ncy4KLSAqIAkJCVRoZSByZXNwb25zZSBmcm9tIEJsYWRlRW5naW5lIHdpbGwgYmUgcGxhY2VkIGJhY2sKLSAqIAkJCWluIHRoaXMgc3RydWN0dXJlLgotICogY2IgICAgICAgICAgICAgICAgIC0gb3B0aW9uYWwKLSAqIGNiX2NvbnRleHQgICAgICAgICAtIG9wdGlvbmFsCi0gKiBxX2N0eHQgICAgICAgICAgICAgLSBPcHRpb25hbC4gUG9pbnRlciB0byBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIHN0cnVjdC4KLSAqIAkJCUlmIHRoZSBNQ0MgV1JCIHJpbmcgaXMgZnVsbCwgdGhpcyBzdHJ1Y3R1cmUgaXMKLSAqIAkJCXVzZWQgdG8gcXVldWUgdGhlIG9wZXJhdGlvbi4gSXQgd2lsbCBiZSBwb3N0ZWQKLSAqIAkJCXRvIHRoZSBNQ0MgcmluZyB3aGVuIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlLiBBbGwKLSAqICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlZCBjb21tYW5kcyB3aWxsIGJlIHBvc3RlZCB0byB0aGUgcmluZyBpbgotICogICAgICAgICAgICAgICAgICAgICAgdGhlIG9yZGVyIHRoZXkgYXJlIHJlY2VpdmVkLiBJdCBpcyBhbHdheXMgdmFsaWQKLSAqICAgICAgICAgICAgICAgICAgICAgIHRvIHBhc3MgYSBwb2ludGVyIHRvIGEgZ2VuZXJpYwotICogICAgICAgICAgICAgICAgICAgICAgYmVfZ2VuZXJpY19xX2N0eHQuIEhvd2V2ZXIsIHRoZSBzcGVjaWZpYwotICogICAgICAgICAgICAgICAgICAgICAgY29udGV4dCBzdHJ1Y3RzIGFyZSBnZW5lcmFsbHkgc21hbGxlciB0aGFuCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2VuZXJpYyBzdHJ1Y3QuCi0gKiByZXR1cm4gcGVuZF9zdGF0dXMgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLgotICogCQkJQkVfUEVORElORyAocG9zdGl2ZSB2YWx1ZSkgaWYgdGhlIEZXQ01ECi0gKiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uIGlzIHBlbmRpbmcuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfcnhmX2ZpbHRlcl9jb25maWcoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgICBzdHJ1Y3QgTlRXS19SWF9GSUxURVJfU0VUVElOR1MgKnNldHRpbmdzLAotCQkgICAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0LAotCQkgICAgIHN0cnVjdCBiZV9yeGZfZmlsdGVyX3FfY3R4dCAqcV9jdHh0KQotewotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19SWF9GSUxURVIgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqZ2VuZXJpY19jdHh0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0Jc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSByYzsKLQotCUFTU0VSVChzZXR0aW5ncyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQotCWlmICghd3JiKSB7Ci0JCWlmIChxX2N0eHQgJiYgY2IpIHsKLQkJCXdyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICZxX2N0eHQtPndyYl9oZWFkZXI7Ci0JCQlnZW5lcmljX2N0eHQgPSAoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICopIHFfY3R4dDsKLQkJCWdlbmVyaWNfY3R4dC0+Y29udGV4dC5ieXRlcyA9IHNpemVvZigqcV9jdHh0KTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQkJZ290byBFcnJvcjsKLQkJfQotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX05UV0tfUlhfRklMVEVSKTsKLQltZW1jcHkoJmZ3Y21kLT5wYXJhbXMucmVxdWVzdCwgc2V0dGluZ3MsIHNpemVvZigqc2V0dGluZ3MpKTsKLQotCXJjLmxlbmd0aCA9IEZJRUxEX1NJWkVPRihzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfUlhfRklMVEVSLAotCQkJCQlwYXJhbXMucmVzcG9uc2UpOwotCXJjLmZ3Y21kX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19SWF9GSUxURVIsCi0JCQkJCXBhcmFtcy5yZXNwb25zZSk7Ci0JcmMudmEgPSBzZXR0aW5nczsKLQkvKiBQb3N0IG9yIHF1ZXVlIHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIGdlbmVyaWNfY3R4dCwKLQkJCWNiLCBjYl9jb250ZXh0LCBOVUxMLCBOVUxMLCBmd2NtZCwgJnJjKTsKLQotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgIlJYRi9FUlggZmlsdGVyIGNvbmZpZyBmd2NtZCBmYWlsZWQuIik7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ldHhfY29udGV4dC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2V0eF9jb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGZiZTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2V0eF9jb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZXR4X2NvbnRleHRfYW1hcF9oX18KLSNkZWZpbmUgX19ldHhfY29udGV4dF9hbWFwX2hfXwotCi0vKiBFVFggcmluZyAgY29udGV4dCBzdHJ1Y3R1cmUuICovCi1zdHJ1Y3QgQkVfRVRYX0NPTlRFWFRfQU1BUCB7Ci0JdTggdHhfY2lkeFsxMV07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs1XTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHR4X3BpZHhbMTFdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDI7CQkvKiBEV09SRCAxICovCi0JdTggdHhfcmluZ19zaXplWzRdOwkvKiBEV09SRCAxICovCi0JdTggcGRfaWRbNV07CS8qIERXT1JEIDEgKi8KLQl1OCBwZF9pZF9ub3RfdmFsaWQ7CS8qIERXT1JEIDEgKi8KLQl1OCBjcV9pZF9zZW5kWzEwXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQzWzMyXTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQ0WzMyXTsJLyogRFdPUkQgMyAqLwotCXU4IGN1cl9ieXRlc1szMl07CS8qIERXT1JEIDQgKi8KLQl1OCBtYXhfYnl0ZXNbMzJdOwkvKiBEV09SRCA1ICovCi0JdTggdGltZV9zdGFtcFszMl07CS8qIERXT1JEIDYgKi8KLQl1OCByc3ZkNVsxMV07CS8qIERXT1JEIDcgKi8KLQl1OCBmdW5jOwkJLyogRFdPUkQgNyAqLwotCXU4IHJzdmQ2WzIwXTsJLyogRFdPUkQgNyAqLwotCXU4IGN1cl90eGRfY291bnRbMzJdOwkvKiBEV09SRCA4ICovCi0JdTggbWF4X3R4ZF9jb3VudFszMl07CS8qIERXT1JEIDkgKi8KLQl1OCByc3ZkN1szMl07CS8qIERXT1JEIDEwICovCi0JdTggcnN2ZDhbMzJdOwkvKiBEV09SRCAxMSAqLwotCXU4IHJzdmQ5WzMyXTsJLyogRFdPUkQgMTIgKi8KLQl1OCByc3ZkMTBbMzJdOwkvKiBEV09SRCAxMyAqLwotCXU4IHJzdmQxMVszMl07CS8qIERXT1JEIDE0ICovCi0JdTggcnN2ZDEyWzMyXTsJLyogRFdPUkQgMTUgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVRYX0NPTlRFWFRfQU1BUCB7Ci0JdTMyIGR3WzE2XTsKLX07Ci0KLSNlbmRpZiAvKiBfX2V0eF9jb250ZXh0X2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZnVuY29iai5jIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z1bmNvYmouYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1N2ViNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZnVuY29iai5jCisrKyAvZGV2L251bGwKQEAgLTEsNTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLSNpbmNsdWRlICJod2xpYi5oIgotI2luY2x1ZGUgImJlc3RhdHVzLmgiCi0KLQotaW50Ci1iZV9mdW5jdGlvbl9pbnRlcm5hbF9xdWVyeV9maXJtd2FyZV9jb25maWcoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCQkgICBzdHJ1Y3QgQkVfRklSTVdBUkVfQ09ORklHICpjb25maWcpCi17Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcgKmZ3Y21kID0gTlVMTDsKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5IHJjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIFByZXBhcmVzIGFuIGVtYmVkZGVkIGZ3Y21kLCBpbmNsdWRpbmcgcmVxdWVzdC9yZXNwb25zZSBzaXplcy4gKi8KLQlmd2NtZCA9IEJFX1BSRVBBUkVfRU1CRURERURfRldDTUQocGZvYiwgd3JiLCBDT01NT05fRklSTVdBUkVfQ09ORklHKTsKLQotCXJjLmxlbmd0aCA9IEZJRUxEX1NJWkVPRihzdHJ1Y3QgRldDTURfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRywKLQkJCQkJcGFyYW1zLnJlc3BvbnNlKTsKLQlyYy5md2NtZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgRldDTURfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRywKLQkJCQkJcGFyYW1zLnJlc3BvbnNlKTsKLQlyYy52YSA9IGNvbmZpZzsKLQotCS8qIFBvc3QgdGhlIGYvdyBjb21tYW5kICovCi0Jc3RhdHVzID0gYmVfZnVuY3Rpb25fcG9zdF9tY2Nfd3JiKHBmb2IsIHdyYiwgTlVMTCwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgZndjbWQsICZyYyk7Ci1lcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAgICBUaGlzIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBmdW5jdGlvbiBvYmplY3QgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uCi0gICAgcHJvdmlkZWQgYnkgdXBwZXIgbGF5ZXIgZHJpdmVycy4KLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBvbiBzdWNjZXNzIGFuZCBhbiBhcHByb3ByaWF0ZSBpbnQgb24gZmFpbHVyZS4KLQotICAgIEEgZnVuY3Rpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBzaW5nbGUgQmxhZGVFbmdpbmUgKGxvZ2ljYWwpIFBDSSBmdW5jdGlvbi4KLSAgICBUaGF0IGlzIGEgZnVuY3Rpb24gb2JqZWN0IGVpdGhlciByZXByZXNlbnRzCi0gICAgdGhlIG5ldHdvcmtpbmcgc2lkZSBvZiBCbGFkZUVuZ2luZSBvciB0aGUgaVNDU0kgc2lkZSBvZiBCbGFkZUVuZ2luZS4KLQotICAgIFRoaXMgcm91dGluZSB3aWxsIGFsc28gZGV0ZWN0IGFuZCBjcmVhdGUgYW4gYXBwcm9wcmlhdGUgUEQgb2JqZWN0IGZvciB0aGUKLSAgICBQQ0kgZnVuY3Rpb24gYXMgbmVlZGVkLgotKi8KLWludAotYmVfZnVuY3Rpb25fb2JqZWN0X2NyZWF0ZSh1OCBfX2lvbWVtICpjc3JfdmEsIHU4IF9faW9tZW0gKmRiX3ZhLAotCQl1OCBfX2lvbWVtICpwY2lfdmEsIHUzMiBmdW5jdGlvbl90eXBlLAotCQlzdHJ1Y3QgcmluZ19kZXNjICptYWlsYm94LCBzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCWludCBzdGF0dXM7Ci0KLQlBU1NFUlQocGZvYik7CS8qIG5vdCBhIG1hZ2ljIGFzc2VydCAqLwotCUFTU0VSVChmdW5jdGlvbl90eXBlIDw9IDIpOwotCi0JVFJBQ0UoRExfSU5GTywgIkNyZWF0ZSBmdW5jdGlvbiBvYmplY3QuIHR5cGU6JXMgb2JqZWN0OjB4JXAiLAotCSAgICAgIChmdW5jdGlvbl90eXBlID09IEJFX0ZVTkNUSU9OX1RZUEVfSVNDU0kgPyAiaVNDU0kiIDoKLQkgICAgICAgKGZ1bmN0aW9uX3R5cGUgPT0gQkVfRlVOQ1RJT05fVFlQRV9ORVRXT1JLID8gIk5ldHdvcmsiIDoKLQkJIkFybSIpKSwgcGZvYik7Ci0KLQltZW1zZXQocGZvYiwgMCwgc2l6ZW9mKCpwZm9iKSk7Ci0KLQlwZm9iLT50eXBlID0gZnVuY3Rpb25fdHlwZTsKLQlwZm9iLT5jc3JfdmEgPSBjc3JfdmE7Ci0JcGZvYi0+ZGJfdmEgPSBkYl92YTsKLQlwZm9iLT5wY2lfdmEgPSBwY2lfdmE7Ci0KLQlzcGluX2xvY2tfaW5pdCgmcGZvYi0+Y3FfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBmb2ItPnBvc3RfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBmb2ItPm1jY19jb250ZXh0X2xvY2spOwotCi0KLQlwZm9iLT5wY2lfZnVuY3Rpb25fbnVtYmVyID0gMTsKLQotCi0JcGZvYi0+ZW11bGF0ZSA9IGZhbHNlOwotCVRSQUNFKERMX05PVEUsICJOb24tZW11bGF0aW9uIG1vZGUiKTsKLQlzdGF0dXMgPSBiZV9kcml2ZV9QT1NUKHBmb2IpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJCbGFkZUVuZ2luZSBQT1NUIGZhaWxlZC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBtYWlsYm94ICovCi0Jc3RhdHVzID0gYmVfbXB1X2luaXRfbWFpbGJveChwZm9iLCBtYWlsYm94KTsKLQlpZiAoc3RhdHVzICE9IEJFX1NVQ0NFU1MpIHsKLQkJVFJBQ0UoRExfRVJSLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgbWFpbGJveC4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JLyoKLQkgKiBDYWNoZSB0aGUgZmlybXdhcmUgY29uZmlnIGZvciBBU1NFUlRzIGluIGh3Y2xpYiBhbmQgbGF0ZXIKLQkgKiBkcml2ZXIgcXVlcmllcy4KLQkgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9pbnRlcm5hbF9xdWVyeV9maXJtd2FyZV9jb25maWcocGZvYiwKLQkJCQkJICAgICAgICZwZm9iLT5md19jb25maWcpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUykgewotCQlUUkFDRShETF9FUlIsICJGYWlsZWQgdG8gcXVlcnkgZmlybXdhcmUgY29uZmlnLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCS8qIE5vIGNsZWFudXAgbmVjZXNzYXJ5ICovCi0JCVRSQUNFKERMX0VSUiwgIkZhaWxlZCB0byBjcmVhdGUgZnVuY3Rpb24uIik7Ci0JCW1lbXNldChwZm9iLCAwLCBzaXplb2YoKnBmb2IpKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiBhIGdpdmVuIGZ1bmN0aW9uIG9iamVjdC4gT25jZQotICAgIHRoZSByZWZlcmVuY2UgY291bnQgZmFsbHMgdG8gemVybywgdGhlIGZ1bmN0aW9uIG9iamVjdCBpcyBkZXN0cm95ZWQgYW5kIGFsbAotICAgIHJlc291cmNlcyBoZWxkIGFyZSBmcmVlZC4KLQotICAgIEZ1bmN0aW9uT2JqZWN0ICAgICAgLSBUaGUgZnVuY3Rpb24gb2JqZWN0IHRvIGRyb3AgdGhlIHJlZmVyZW5jZSB0by4KLSovCi1pbnQgYmVfZnVuY3Rpb25fb2JqZWN0X2Rlc3Ryb3koc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlUUkFDRShETF9JTkZPLCAiRGVzdHJveSBwZm9iLiBPYmplY3Q6MHglcCIsCi0JICAgICAgcGZvYik7Ci0KLQotCUFTU0VSVChwZm9iLT5tY2MgPT0gTlVMTCk7Ci0KLQlyZXR1cm4gQkVfU1VDQ0VTUzsKLX0KLQotaW50IGJlX2Z1bmN0aW9uX2NsZWFudXAoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQl1MzIgaXNyOwotCXUzMiBob3N0X2ludHI7Ci0Jc3RydWN0IFBDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUl9BTUFQIGN0cmw7Ci0KLQotCWlmIChwZm9iLT50eXBlID09IEJFX0ZVTkNUSU9OX1RZUEVfTkVUV09SSykgewotCQlzdGF0dXMgPSBiZV9yeGZfbXVsdGljYXN0X2NvbmZpZyhwZm9iLCBmYWxzZSwgMCwKLQkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlBU1NFUlQoc3RhdHVzID09IEJFX1NVQ0NFU1MpOwotCX0KLQkvKiBWTEFOICovCi0Jc3RhdHVzID0gYmVfcnhmX3ZsYW5fY29uZmlnKHBmb2IsIGZhbHNlLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQlBU1NFUlQoc3RhdHVzID09IEJFX1NVQ0NFU1MpOwotCS8qCi0JICogTUNDIFF1ZXVlIC0tIFN3aXRjaGVzIHRvIG1haWxib3ggbW9kZS4gIE1heSB3YW50IHRvIGRlc3Ryb3kKLQkgKiBhbGwgYnV0IHRoZSBNQ0MgQ1EgYmVmb3JlIHRoaXMgY2FsbCBpZiBwb2xsaW5nIENRIGlzIG11Y2ggYmV0dGVyCi0JICogcGVyZm9ybWFuY2UgdGhhbiBwb2xsaW5nIG1haWxib3ggcmVnaXN0ZXIuCi0JICovCi0JaWYgKHBmb2ItPm1jYykKLQkJc3RhdHVzID0gYmVfbWNjX3JpbmdfZGVzdHJveShwZm9iLT5tY2MpOwotCS8qCi0JICogSWYgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGNsZWFyIGFueSBDRVYgaW50ZXJydXB0IGFzc2VydGlvbnMgdGhhdAotCSAqIGZpcmVkIGFmdGVyIHdlIHN0b3BwZWQgcHJvY2Vzc2luZyBFUXMuCi0JICovCi0JY3RybC5kd1swXSA9IFBDSUNGRzFfUkVBRChwZm9iLCBob3N0X3RpbWVyX2ludF9jdHJsKTsKLQlob3N0X2ludHIgPSBBTUFQX0dFVF9CSVRTX1BUUihQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1IsCi0JCQkJCQkJaG9zdGludHIsIGN0cmwuZHcpOwotCWlmICghaG9zdF9pbnRyKQotCQlpZiAocGZvYi0+dHlwZSA9PSBCRV9GVU5DVElPTl9UWVBFX05FVFdPUkspCi0JCQlpc3IgPSBDU1JfUkVBRChwZm9iLCBjZXYuaXNyMSk7Ci0JCWVsc2UKLQkJCWlzciA9IENTUl9SRUFEKHBmb2IsIGNldi5pc3IwKTsKLQllbHNlCi0JCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLwotCQlUUkFDRShETF9FUlIsICJmdW5jdGlvbl9jbGVhbnVwIGNhbGxlZCB3aXRoIGludGVycnVwdCBlbmFibGVkIik7Ci0JLyogRnVuY3Rpb24gb2JqZWN0IGRlc3Ryb3kgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9vYmplY3RfZGVzdHJveShwZm9iKTsKLQlBU1NFUlQoc3RhdHVzID09IEJFX1NVQ0NFU1MpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi12b2lkICoKLWJlX2Z1bmN0aW9uX3ByZXBhcmVfZW1iZWRkZWRfZndjbWQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsIHUzMiBwYXlsZF9sZW4sIHUzMiByZXF1ZXN0X2xlbmd0aCwKLQl1MzIgcmVzcG9uc2VfbGVuZ3RoLCB1MzIgb3Bjb2RlLCB1MzIgc3Vic3lzdGVtKQotewotCXN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiAqaGVhZGVyID0gTlVMTDsKLQl1MzIgbjsKLQotCUFTU0VSVCh3cmIpOwotCi0JbiA9IG9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfV1JCX0FNQVAsIHBheWxvYWQpLzg7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1dSQiwgZW1iZWRkZWQsIHdyYiwgMSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1dSQiwgcGF5bG9hZF9sZW5ndGgsIHdyYiwgbWluKHBheWxkX2xlbiwgbikpOwotCWhlYWRlciA9IChzdHJ1Y3QgRldDTURfUkVRVUVTVF9IRUFERVIgKikoKHU4ICopd3JiICsgbik7Ci0KLQloZWFkZXItPnRpbWVvdXQgPSAwOwotCWhlYWRlci0+ZG9tYWluID0gMDsKLQloZWFkZXItPnJlcXVlc3RfbGVuZ3RoID0gbWF4KHJlcXVlc3RfbGVuZ3RoLCByZXNwb25zZV9sZW5ndGgpOwotCWhlYWRlci0+b3Bjb2RlID0gb3Bjb2RlOwotCWhlYWRlci0+c3Vic3lzdGVtID0gc3Vic3lzdGVtOwotCi0JcmV0dXJuIGhlYWRlcjsKLX0KLQotdm9pZCAqCi1iZV9mdW5jdGlvbl9wcmVwYXJlX25vbmVtYmVkZGVkX2Z3Y21kKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLAotCXZvaWQgKmZ3Y21kX3ZhLCB1NjQgZndjbWRfcGEsCi0JdTMyIHBheWxkX2xlbiwKLQl1MzIgcmVxdWVzdF9sZW5ndGgsCi0JdTMyIHJlc3BvbnNlX2xlbmd0aCwKLQl1MzIgb3Bjb2RlLCB1MzIgc3Vic3lzdGVtKQotewotCXN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiAqaGVhZGVyID0gTlVMTDsKLQl1MzIgbjsKLQlzdHJ1Y3QgTUNDX1dSQl9QQVlMT0FEX0FNQVAgKnBscDsKLQotCUFTU0VSVCh3cmIpOwotCUFTU0VSVChmd2NtZF92YSk7Ci0KLQloZWFkZXIgPSAoc3RydWN0IEZXQ01EX1JFUVVFU1RfSEVBREVSICopIGZ3Y21kX3ZhOwotCi0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1dSQiwgZW1iZWRkZWQsIHdyYiwgMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1dSQiwgcGF5bG9hZF9sZW5ndGgsIHdyYiwgcGF5bGRfbGVuKTsKLQotCS8qCi0JICogQXNzdW1lIG9uZSBmcmFnbWVudC4gVGhlIGNhbGxlciBtYXkgb3ZlcnJpZGUgdGhlIFNHTCBieQotCSAqIHJld3JpdGluZyB0aGUgMHRoIGxlbmd0aCBhbmQgYWRkaW5nIG1vcmUgZW50cmllcy4gIFRoZXkKLQkgKiB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHNnZV9jb3VudC4KLQkgKi8KLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfV1JCLCBzZ2VfY291bnQsIHdyYiwgMSk7Ci0KLQluID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19XUkJfQU1BUCwgcGF5bG9hZCkvODsKLQlwbHAgPSAoc3RydWN0IE1DQ19XUkJfUEFZTE9BRF9BTUFQICopKCh1OCAqKXdyYiArIG4pOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkJfUEFZTE9BRCwgc2dsWzBdLmxlbmd0aCwgcGxwLCBwYXlsZF9sZW4pOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkJfUEFZTE9BRCwgc2dsWzBdLnBhX2xvLCBwbHAsICh1MzIpZndjbWRfcGEpOwotCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19XUkJfUEFZTE9BRCwgc2dsWzBdLnBhX2hpLCBwbHAsCi0JCQkJCXVwcGVyXzMyX2JpdHMoZndjbWRfcGEpKTsKLQotCWhlYWRlci0+dGltZW91dCA9IDA7Ci0JaGVhZGVyLT5kb21haW4gPSAwOwotCWhlYWRlci0+cmVxdWVzdF9sZW5ndGggPSBtYXgocmVxdWVzdF9sZW5ndGgsIHJlc3BvbnNlX2xlbmd0aCk7Ci0JaGVhZGVyLT5vcGNvZGUgPSBvcGNvZGU7Ci0JaGVhZGVyLT5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07Ci0KLQlyZXR1cm4gaGVhZGVyOwotfQotCi1zdHJ1Y3QgTUNDX1dSQl9BTUFQICoKLWJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JdTMyIG9mZnNldDsKLQotCWlmIChwZm9iLT5tY2MpCi0JCXdyYiA9IF9iZV9tcHVfcGVla19yaW5nX3dyYihwZm9iLT5tY2MsIGZhbHNlKTsKLQllbHNlIHsKLQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19NQUlMQk9YX0FNQVAsIHdyYikvODsKLQkJd3JiID0gKHN0cnVjdCBNQ0NfV1JCX0FNQVAgKikgKCh1OCAqKSBwZm9iLT5tYWlsYm94LnZhICsKLQkJCQlvZmZzZXQpOwotCX0KLQotCWlmICh3cmIpCi0JCW1lbXNldCh3cmIsIDAsIHNpemVvZihzdHJ1Y3QgTUNDX1dSQl9BTUFQKSk7Ci0KLQlyZXR1cm4gd3JiOwotfQotCi0jaWYgZGVmaW5lZChCRV9ERUJVRykKLXZvaWQgYmVfZnVuY3Rpb25fZGVidWdfcHJpbnRfd3JiKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwgdm9pZCAqb3B0aW9uYWxfZndjbWRfdmEsCi0JCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKndyYl9jb250ZXh0KQotewotCi0Jc3RydWN0IEZXQ01EX1JFUVVFU1RfSEVBREVSICpoZWFkZXIgPSBOVUxMOwotCXU4IGVtYmVkZGVkOwotCXUzMiBuOwotCi0JZW1iZWRkZWQgPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfV1JCLCBlbWJlZGRlZCwgd3JiKTsKLQotCWlmIChlbWJlZGRlZCkgewotCQluID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19XUkJfQU1BUCwgcGF5bG9hZCkvODsKLQkJaGVhZGVyID0gKHN0cnVjdCBGV0NNRF9SRVFVRVNUX0hFQURFUiAqKSgodTggKil3cmIgKyBuKTsKLQl9IGVsc2UgewotCQloZWFkZXIgPSAoc3RydWN0IEZXQ01EX1JFUVVFU1RfSEVBREVSICopIG9wdGlvbmFsX2Z3Y21kX3ZhOwotCX0KLQotCS8qIFNhdmUgdGhlIGNvbXBsZXRlZCBjb3VudCBiZWZvcmUgcG9zdGluZyBmb3IgYSBkZWJ1ZyBhc3NlcnQuICovCi0KLQlpZiAoaGVhZGVyKSB7Ci0JCXdyYl9jb250ZXh0LT5vcGNvZGUgPSBoZWFkZXItPm9wY29kZTsKLQkJd3JiX2NvbnRleHQtPnN1YnN5c3RlbSA9IGhlYWRlci0+c3Vic3lzdGVtOwotCi0JfSBlbHNlIHsKLQkJd3JiX2NvbnRleHQtPm9wY29kZSA9IDA7Ci0JCXdyYl9jb250ZXh0LT5zdWJzeXN0ZW0gPSAwOwotCX0KLX0KLSNlbHNlCi0jZGVmaW5lIGJlX2Z1bmN0aW9uX2RlYnVnX3ByaW50X3dyYihhXywgYl8sIGNfLCBkXykKLSNlbmRpZgotCi1pbnQKLWJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsCi0JCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqcV9jdHh0LAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCwKLQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgaW50ZXJuYWxfY2IsCi0JCXZvaWQgKmludGVybmFsX2NiX2NvbnRleHQsIHZvaWQgKm9wdGlvbmFsX2Z3Y21kX3ZhLAotCQlzdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5ICpyYykKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKndyYl9jb250ZXh0ID0gTlVMTDsKLQl1NjQgKnA7Ci0KLQlpZiAocV9jdHh0KSB7Ci0JCS8qIEluaXRpYWxpemUgY29udGV4dC4gICAgICAgICAqLwotCQlxX2N0eHQtPmNvbnRleHQuaW50ZXJuYWxfY2IgPSBpbnRlcm5hbF9jYjsKLQkJcV9jdHh0LT5jb250ZXh0LmludGVybmFsX2NiX2NvbnRleHQgPSBpbnRlcm5hbF9jYl9jb250ZXh0OwotCQlxX2N0eHQtPmNvbnRleHQuY2IgPSBjYjsKLQkJcV9jdHh0LT5jb250ZXh0LmNiX2NvbnRleHQgPSBjYl9jb250ZXh0OwotCQlpZiAocmMpIHsKLQkJCXFfY3R4dC0+Y29udGV4dC5jb3B5Lmxlbmd0aCA9IHJjLT5sZW5ndGg7Ci0JCQlxX2N0eHQtPmNvbnRleHQuY29weS5md2NtZF9vZmZzZXQgPSByYy0+ZndjbWRfb2Zmc2V0OwotCQkJcV9jdHh0LT5jb250ZXh0LmNvcHkudmEgPSByYy0+dmE7Ci0JCX0gZWxzZQotCQkJcV9jdHh0LT5jb250ZXh0LmNvcHkubGVuZ3RoID0gMDsKLQotCQlxX2N0eHQtPmNvbnRleHQub3B0aW9uYWxfZndjbWRfdmEgPSBvcHRpb25hbF9md2NtZF92YTsKLQotCQkvKiBRdWV1ZSB0aGlzIHJlcXVlc3QgKi8KLQkJc3RhdHVzID0gYmVfZnVuY3Rpb25fcXVldWVfbWNjX3dyYihwZm9iLCBxX2N0eHQpOwotCi0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qCi0JICogQWxsb2NhdGUgYSBXUkIgY29udGV4dCBzdHJ1Y3QgdG8gaG9sZCB0aGUgY2FsbGJhY2sgcG9pbnRlcnMsCi0JICogc3RhdHVzLCBldGMuICBUaGlzIGlzIHJlcXVpcmVkIGlmIGNvbW1hbmRzIGNvbXBsZXRlIG91dCBvZiBvcmRlci4KLQkgKi8KLQl3cmJfY29udGV4dCA9IF9iZV9tY2NfYWxsb2NhdGVfd3JiX2NvbnRleHQocGZvYik7Ci0JaWYgKCF3cmJfY29udGV4dCkgewotCQlUUkFDRShETF9XQVJOLCAiRmFpbGVkIHRvIGFsbG9jYXRlIE1DQyBXUkIgY29udGV4dC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX1NZU1RFTV9SRVNPVVJDRVM7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCS8qIEluaXRpYWxpemUgY29udGV4dC4gKi8KLQltZW1zZXQod3JiX2NvbnRleHQsIDAsIHNpemVvZigqd3JiX2NvbnRleHQpKTsKLQl3cmJfY29udGV4dC0+aW50ZXJuYWxfY2IgPSBpbnRlcm5hbF9jYjsKLQl3cmJfY29udGV4dC0+aW50ZXJuYWxfY2JfY29udGV4dCA9IGludGVybmFsX2NiX2NvbnRleHQ7Ci0Jd3JiX2NvbnRleHQtPmNiID0gY2I7Ci0Jd3JiX2NvbnRleHQtPmNiX2NvbnRleHQgPSBjYl9jb250ZXh0OwotCWlmIChyYykgewotCQl3cmJfY29udGV4dC0+Y29weS5sZW5ndGggPSByYy0+bGVuZ3RoOwotCQl3cmJfY29udGV4dC0+Y29weS5md2NtZF9vZmZzZXQgPSByYy0+ZndjbWRfb2Zmc2V0OwotCQl3cmJfY29udGV4dC0+Y29weS52YSA9IHJjLT52YTsKLQl9IGVsc2UKLQkJd3JiX2NvbnRleHQtPmNvcHkubGVuZ3RoID0gMDsKLQl3cmJfY29udGV4dC0+d3JiID0gd3JiOwotCi0JLyoKLQkgKiBDb3B5IHRoZSBjb250ZXh0IHBvaW50ZXIgaW50byB0aGUgV1JCIG9wYXF1ZSB0YWcgZmllbGQuCi0JICogVmVyaWZ5IGFzc3VtcHRpb24gb2YgNjQtYml0IHRhZyB3aXRoIGEgY29tcGlsZSB0aW1lIGFzc2VydC4KLQkgKi8KLQlwID0gKHU2NCAqKSAoKHU4ICopd3JiICsgb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19XUkJfQU1BUCwgdGFnKS84KTsKLQkqcCA9ICh1NjQpKHNpemVfdCl3cmJfY29udGV4dDsKLQotCS8qIFByaW50IGluZm8gYWJvdXQgdGhpcyBGV0NNRCBmb3IgZGVidWcgYnVpbGRzLiAqLwotCWJlX2Z1bmN0aW9uX2RlYnVnX3ByaW50X3dyYihwZm9iLCB3cmIsIG9wdGlvbmFsX2Z3Y21kX3ZhLCB3cmJfY29udGV4dCk7Ci0KLQkvKgotCSAqIGlzc3VlIHRoZSBXUkIgdG8gdGhlIE1QVSBhcyBhcHByb3ByaWF0ZQotCSAqLwotCWlmIChwZm9iLT5tY2MpIHsKLQkJLyoKLQkJICogd2UncmUgaW4gV1JCIG1vZGUsIHBhc3MgdG8gdGhlIG1jYyBsYXllcgotCQkgKi8KLQkJc3RhdHVzID0gX2JlX21wdV9wb3N0X3dyYl9yaW5nKHBmb2ItPm1jYywgd3JiLCB3cmJfY29udGV4dCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogd2UncmUgaW4gbWFpbGJveCBtb2RlCi0JCSAqLwotCQlzdGF0dXMgPSBfYmVfbXB1X3Bvc3Rfd3JiX21haWxib3gocGZvYiwgd3JiLCB3cmJfY29udGV4dCk7Ci0KLQkJLyogbWFpbGJveCBtb2RlIGFsd2F5cyBjb21wbGV0ZXMgc3luY2hyb25vdXNseSAqLwotCQlBU1NFUlQoc3RhdHVzICE9IEJFX1NUQVRVU19QRU5ESU5HKTsKLQl9Ci0KLUVycm9yOgotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotaW50Ci1iZV9mdW5jdGlvbl9yaW5nX2Rlc3Ryb3koc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJdTMyIGlkLCB1MzIgcmluZ190eXBlLCBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJdm9pZCAqY2JfY29udGV4dCwgbWNjX3dyYl9jcWVfY2FsbGJhY2sgaW50ZXJuYWxfY2IsCi0JCXZvaWQgKmludGVybmFsX2NiX2NvbnRleHQpCi17Ci0KLQlzdHJ1Y3QgRldDTURfQ09NTU9OX1JJTkdfREVTVFJPWSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpcnFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQlUUkFDRShETF9JTkZPLCAiRGVzdHJveSByaW5nIGlkOiVkIHR5cGU6JWQiLCBpZCwgcmluZ190eXBlKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlBU1NFUlQod3JiKTsKLQkJVFJBQ0UoRExfRVJSLCAiTm8gZnJlZSBNQ0MgV1JCcyBpbiBkZXN0cm95IHJpbmcuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIEVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX1JJTkdfREVTVFJPWSk7Ci0KLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QuaWQgPSBpZDsKLQlmd2NtZC0+cGFyYW1zLnJlcXVlc3QucmluZ190eXBlID0gcmluZ190eXBlOwotCi0JLyogUG9zdCB0aGUgZi93IGNvbW1hbmQgKi8KLQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLCBjYiwgY2JfY29udGV4dCwKLQkJCQlpbnRlcm5hbF9jYiwgaW50ZXJuYWxfY2JfY29udGV4dCwgZndjbWQsIE5VTEwpOwotCWlmIChzdGF0dXMgIT0gQkVfU1VDQ0VTUyAmJiBzdGF0dXMgIT0gQkVfUEVORElORykgewotCQlUUkFDRShETF9FUlIsICJSaW5nIGRlc3Ryb3kgZndjbWQgZmFpbGVkLiBpZDolZCByaW5nX3R5cGU6JWQiLAotCQkJaWQsIHJpbmdfdHlwZSk7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotdm9pZAotYmVfcmRfdG9fcGFfbGlzdChzdHJ1Y3QgcmluZ19kZXNjICpyZCwgc3RydWN0IFBIWVNfQUREUiAqcGFfbGlzdCwgdTMyIG1heF9udW0pCi17Ci0JdTMyIG51bV9wYWdlcyA9IFBBR0VTX1NQQU5ORUQocmQtPnZhLCByZC0+bGVuZ3RoKTsKLQl1MzIgaSA9IDA7Ci0JdTY0IHBhID0gcmQtPnBhOwotCV9fbGU2NCBsZXBhOwotCi0JQVNTRVJUKHBhX2xpc3QpOwotCUFTU0VSVChwYSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWluKG51bV9wYWdlcywgbWF4X251bSk7IGkrKykgewotCQlsZXBhID0gY3B1X3RvX2xlNjQocGEpOwotCQlwYV9saXN0W2ldLmxvID0gKHUzMilsZXBhOwotCQlwYV9saXN0W2ldLmhpID0gdXBwZXJfMzJfYml0cyhsZXBhKTsKLQkJcGEgKz0gUEFHRV9TSVpFOwotCX0KLX0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV9mdW5jdGlvbl9nZXRfZndfdmVyc2lvbgotICogICBSZXRyaWV2ZXMgdGhlIGZpcm13YXJlIHZlcnNpb24gb24gdGhlIGFkcGF0ZXIuIElmIHRoZSBjYWxsYmFjayBpcwotICogICBOVUxMIHRoaXMgY2FsbCBleGVjdXRlcyBzeW5jaHJvbm91c2x5LiBJZiB0aGUgY2FsbGJhY2sgaXMgbm90IE5VTEwsCi0gKiAgIHRoZSByZXR1cm5lZCBzdGF0dXMgd2lsbCBiZSBCRV9QRU5ESU5HIGlmIHRoZSBjb21tYW5kIHdhcyBpc3N1ZWQKLSAqICAgc3VjY2Vzc2Z1bGx5LgotICogcGZvYiAgICAtCi0gKiBmd3YgICAgICAgICAtIFBvaW50ZXIgdG8gcmVzcG9uc2UgYnVmZmVyIGlmIGNhbGxiYWNrIGlzIE5VTEwuCi0gKiBjYiAgICAgICAgICAgLSBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIEZXQ01EIGNvbXBsZXRlcy4KLSAqIGNiX2NvbnRleHQgICAtIFBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCi0gKiByZXR1cm4gcGVuZF9zdGF0dXMgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLgotICogCQkJQkVfUEVORElORyAocG9zdGl2ZSB2YWx1ZSkgaWYgdGhlIEZXQ01ECi0gKiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uIGlzIHBlbmRpbmcuIE5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludAotYmVfZnVuY3Rpb25fZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTl9SRVNQT05TRV9QQVlMT0FEICpmd3YsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0KQotewotCWludCBzdGF0dXMgPSBCRV9TVUNDRVNTOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTiAqZndjbWQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5IHJjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQl3cmIgPSBiZV9mdW5jdGlvbl9wZWVrX21jY193cmIocGZvYik7Ci0JaWYgKCF3cmIpIHsKLQkJVFJBQ0UoRExfRVJSLCAiTUNDIHdyYiBwZWVrIGZhaWxlZC4iKTsKLQkJc3RhdHVzID0gQkVfU1RBVFVTX05PX01DQ19XUkI7Ci0JCWdvdG8gRXJyb3I7Ci0JfQotCi0JaWYgKCFjYiAmJiAhZnd2KSB7Ci0JCVRSQUNFKERMX0VSUiwgImNhbGxiYWNrIGFuZCByZXNwb25zZSBidWZmZXIgTlVMTCEiKTsKLQkJc3RhdHVzID0gQkVfTk9UX09LOwotCQlnb3RvIEVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX0dFVF9GV19WRVJTSU9OKTsKLQotCXJjLmxlbmd0aCA9IEZJRUxEX1NJWkVPRihzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OLAotCQkJCQlwYXJhbXMucmVzcG9uc2UpOwotCXJjLmZ3Y21kX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBGV0NNRF9DT01NT05fR0VUX0ZXX1ZFUlNJT04sCi0JCQkJCXBhcmFtcy5yZXNwb25zZSk7Ci0JcmMudmEgPSBmd3Y7Ci0KLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIGNiLAotCQkJCWNiX2NvbnRleHQsIE5VTEwsIE5VTEwsIGZ3Y21kLCAmcmMpOwotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCWlmIChwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgJiYgcGZvYi0+bWNjKSB7Ci0JCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotaW50Ci1iZV9mdW5jdGlvbl9xdWV1ZV9tY2Nfd3JiKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQkgIHN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqcV9jdHh0KQotewotCWludCBzdGF0dXM7Ci0KLQlBU1NFUlQocV9jdHh0KTsKLQotCS8qCi0JICogaXNzdWUgdGhlIFdSQiB0byB0aGUgTVBVIGFzIGFwcHJvcHJpYXRlCi0JICovCi0JaWYgKHBmb2ItPm1jYykgewotCi0JCS8qIFdlJ3JlIGluIHJpbmcgbW9kZS4gIFF1ZXVlIHRoaXMgaXRlbS4gKi8KLQkJcGZvYi0+bWNjLT5iYWNrbG9nX2xlbmd0aCsrOwotCQlsaXN0X2FkZF90YWlsKCZxX2N0eHQtPmNvbnRleHQubGlzdCwgJnBmb2ItPm1jYy0+YmFja2xvZyk7Ci0JCXN0YXR1cyA9IEJFX1BFTkRJTkc7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gQkVfTk9UX09LOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNmUwZDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19md2NtZF9jb21tb25fYW1hcF9oX18KLSNkZWZpbmUgX19md2NtZF9jb21tb25fYW1hcF9oX18KLSNpbmNsdWRlICJob3N0X3N0cnVjdC5oIgotCi0vKiAtLS0gUEhZX0xJTktfRFVQTEVYX0VOVU0gLS0tICovCi0jZGVmaW5lIFBIWV9MSU5LX0RVUExFWF9OT05FICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBIWV9MSU5LX0RVUExFWF9IQUxGICAgICAgICAgICAgKDEpCi0jZGVmaW5lIFBIWV9MSU5LX0RVUExFWF9GVUxMICAgICAgICAgICAgKDIpCi0KLS8qIC0tLSBQSFlfTElOS19TUEVFRF9FTlVNIC0tLSAqLwotI2RlZmluZSBQSFlfTElOS19TUEVFRF9aRVJPICAgICAgICAgICAgICgwKQkvKiBObyBsaW5rLiAqLwotI2RlZmluZSBQSFlfTElOS19TUEVFRF8xME1CUFMgICAgICAgICAgICgxKQkvKiAxMCBNYnBzICovCi0jZGVmaW5lIFBIWV9MSU5LX1NQRUVEXzEwME1CUFMgICAgICAgICAgKDIpCS8qIDEwMCBNYnBzICovCi0jZGVmaW5lIFBIWV9MSU5LX1NQRUVEXzFHQlBTICAgICAgICAgICAgKDMpCS8qIDEgR2JwcyAqLwotI2RlZmluZSBQSFlfTElOS19TUEVFRF8xMEdCUFMgICAgICAgICAgICg0KQkvKiAxMCBHYnBzICovCi0KLS8qIC0tLSBQSFlfTElOS19GQVVMVF9FTlVNIC0tLSAqLwotI2RlZmluZSBQSFlfTElOS19GQVVMVF9OT05FICAgICAgICAgICAgICgwKQkvKiBObyBmYXVsdCBzdGF0dXMKLQkJCQkJCQlhdmFpbGFibGUgb3IgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgUEhZX0xJTktfRkFVTFRfTE9DQUwgICAgICAgICAgICAoMSkJLyogTG9jYWwgZmF1bHQgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgUEhZX0xJTktfRkFVTFRfUkVNT1RFICAgICAgICAgICAoMikJLyogUmVtb3RlIGZhdWx0IGRldGVjdGVkICovCi0KLS8qIC0tLSBCRV9VTFBfTUFTSyAtLS0gKi8KLSNkZWZpbmUgQkVfVUxQMF9NQVNLICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgQkVfVUxQMV9NQVNLICAgICAgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgQkVfVUxQMl9NQVNLICAgICAgICAgICAgICAgICAgICAoNCkKLQotLyogLS0tIE5UV0tfQUNUSVZFX1BPUlQgLS0tICovCi0jZGVmaW5lIE5UV0tfUE9SVF9BICAgICAgICAgICAgICAgICAgICAgKDApCS8qIFBvcnQgQSBpcyBjdXJyZW50bHkgYWN0aXZlICovCi0jZGVmaW5lIE5UV0tfUE9SVF9CICAgICAgICAgICAgICAgICAgICAgKDEpCS8qIFBvcnQgQiBpcyBjdXJyZW50bHkgYWN0aXZlICovCi0jZGVmaW5lIE5UV0tfTk9fQUNUSVZFX1BPUlQgICAgICAgICAgICAgKDE1KQkvKiBCb3RoIHBvcnRzIGhhdmUgbG9zdCBsaW5rICovCi0KLS8qIC0tLSBOVFdLX0xJTktfVFlQRSAtLS0gKi8KLSNkZWZpbmUgTlRXS19MSU5LX1RZUEVfUEhZU0lDQUwgICAgICAgICAoMCkJLyogbGluayB1cC9kb3duIGV2ZW50Ci0JCQkJCQkgICBhcHBsaWVzIHRvIEJsYWRlRW5naW5lJ3MKLQkJCQkJCSAgIFBoeXNpY2FsIFBvcnRzCi0JCQkJCQkgICAqLwotI2RlZmluZSBOVFdLX0xJTktfVFlQRV9WSVJUVUFMICAgICAgICAgICgxKQkvKiBWaXJ0dWFsIGxpbmsgdXAvZG93biBldmVudAotCQkJCQkJICAgcmVwb3J0ZWQgYnkgQmxhZGVFeGNoYW5nZS4KLQkJCQkJCSAgIFRoaXMgYXBwbGllcyBvbmx5IHdoZW4gdGhlCi0JCQkJCQkgICBWTEQgZmVhdHVyZSBpcyBlbmFibGVkCi0JCQkJCQkgICAqLwotCi0vKgotICogLS0tIEZXQ01EX01BQ19UWVBFX0VOVU0gLS0tCi0gKiBUaGlzIGVudW0gZGVmaW5lcyB0aGUgdHlwZXMgb2YgTUFDIGFkZHJlc3NlcyBpbiB0aGUgUlhGIE1BQyBBZGRyZXNzIFRhYmxlLgotICovCi0jZGVmaW5lIE1BQ19BRERSRVNTX1RZUEVfU1RPUkFHRSAgICAgICAgKDApCS8qIFN0b3JhZ2UgTUFDIEFkZHJlc3MgKi8KLSNkZWZpbmUgTUFDX0FERFJFU1NfVFlQRV9ORVRXT1JLICAgICAgICAoMSkJLyogTmV0d29yayBNQUMgQWRkcmVzcyAqLwotI2RlZmluZSBNQUNfQUREUkVTU19UWVBFX1BEICAgICAgICAgICAgICgyKQkvKiBQcm90ZWN0aW9uIERvbWFpbiBNQUMgQWRkciAqLwotI2RlZmluZSBNQUNfQUREUkVTU19UWVBFX01BTkFHRU1FTlQgICAgICgzKQkvKiBNYW5hZ21lbnQgTUFDIEFkZHJlc3MgKi8KLQotCi0vKiAtLS0gRldDTURfUklOR19UWVBFX0VOVU0gLS0tICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9FVEhfUlggICAgICAgICAgKDEpCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTl9FVEhfUlhfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfRVRIX1RYICAgICAgICAgICgyKQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fRVRIX1RYX0NSRUFURS4gKi8KLSNkZWZpbmUgRldDTURfUklOR19UWVBFX0lTQ1NJX1dSQlEgICAgICAoMykJLyogUmluZyBjcmVhdGVkIHdpdGggKi8KLQkJCQkJLyogRldDTURfQ09NTU9OX0lTQ1NJX1dSQlFfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfSVNDU0lfREVGUSAgICAgICg0KQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9UUE1fV1JCUSAgICAgICAgKDUpCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTl9UUE1fV1JCUV9DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9UUE1fREVGUSAgICAgICAgKDYpCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTlRQTV9UREVGUV9DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9UUE1fUlEgICAgICAgICAgKDcpCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTl9UUE1fUlFfQ1JFQVRFLiAqLwotI2RlZmluZSBGV0NNRF9SSU5HX1RZUEVfTUNDICAgICAgICAgICAgICg4KQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9DT01NT05fTUNDX0NSRUFURS4gKi8KLSNkZWZpbmUgRldDTURfUklOR19UWVBFX0NRICAgICAgICAgICAgICAoOSkJLyogUmluZyBjcmVhdGVkIHdpdGggKi8KLQkJCQkJLyogRldDTURfQ09NTU9OX0NRX0NSRUFURS4gKi8KLSNkZWZpbmUgRldDTURfUklOR19UWVBFX0VRICAgICAgICAgICAgICAoMTApCS8qIFJpbmcgY3JlYXRlZCB3aXRoICovCi0JCQkJCS8qIEZXQ01EX0NPTU1PTl9FUV9DUkVBVEUuICovCi0jZGVmaW5lIEZXQ01EX1JJTkdfVFlQRV9RUCAgICAgICAgICAgICAgKDExKQkvKiBSaW5nIGNyZWF0ZWQgd2l0aCAqLwotCQkJCQkvKiBGV0NNRF9SRE1BX1FQX0NSRUFURS4gKi8KLQotCi0vKiAtLS0gRVRIX1RYX1JJTkdfVFlQRV9FTlVNIC0tLSAqLwotI2RlZmluZSBFVEhfVFhfUklOR19UWVBFX0ZPUldBUkRJTkcgICAgICgxKQkvKiBFdGhlcm5ldCByaW5nIGZvcgotCQkJCQkJICAgZm9yd2FyZGluZyBwYWNrZXRzICovCi0jZGVmaW5lIEVUSF9UWF9SSU5HX1RZUEVfU1RBTkRBUkQgICAgICAgKDIpCS8qIEV0aGVybmV0IHJpbmcgZm9yIHNlbmRpbmcKLQkJCQkJCSAgIG5ldHdvcmsgcGFja2V0cy4gKi8KLSNkZWZpbmUgRVRIX1RYX1JJTkdfVFlQRV9CT1VORCAgICAgICAgICAoMykJLyogRXRoZXJuZXQgcmluZyBib3VuZCB0byB0aGUKLQkJCQkJCSAgIHBvcnQgc3BlY2lmaWVkIGluIHRoZSBjb21tYW5kCi0JCQkJCQkgICBoZWFkZXIucG9ydF9udW1iZXIgZmllbGQuCi0JCQkJCQkgICBSaW5ncyBvZiB0aGlzIHR5cGUgYXJlCi0JCQkJCQkgICBOT1Qgc3ViamVjdCB0byB0aGUKLQkJCQkJCSAgIGZhaWxvdmVyIGxvZ2ljIGltcGxlbWVudGVkCi0JCQkJCQkgICBpbiB0aGUgQmxhZGVFbmdpbmUuCi0JCQkJCQkgICAqLwotCi0vKiAtLS0gRldDTURfQ09NTU9OX1FPU19UWVBFX0VOVU0gLS0tICovCi0jZGVmaW5lIFFPU19CSVRTX05JQyAgICAgICAgICAgICAgICAgICAgKDEpCS8qIG1heF9iaXRzX3Blcl9zZWNvbmRfTklDICovCi0JCQkJCQkgIC8qIGZpZWxkIGlzIHZhbGlkLiAgKi8KLSNkZWZpbmUgUU9TX1BLVFNfTklDICAgICAgICAgICAgICAgICAgICAoMikJLyogbWF4X3BhY2tldHNfcGVyX3NlY29uZF9OSUMgKi8KLQkJCQkJCSAgLyogZmllbGQgaXMgdmFsaWQuICAqLwotI2RlZmluZSBRT1NfSU9QU19JU0NTSSAgICAgICAgICAgICAgICAgICg0KQkvKiBtYXhfaW9zX3Blcl9zZWNvbmRfaVNDU0kgKi8KLQkJCQkJCSAgLypmaWVsZCBpcyB2YWxpZC4gICovCi0jZGVmaW5lIFFPU19WTEFOX1RBRyAgICAgICAgICAgICAgICAgICAgKDgpCS8qIGRvbWFpbl9WTEFOX3RhZyBmaWVsZAotCQkJCQkJICAgaXMgdmFsaWQuICovCi0jZGVmaW5lIFFPU19GQUJSSUNfSUQgICAgICAgICAgICAgICAgICAgKDE2KQkvKiBmYWJyaWNfZG9tYWluX0lEIGZpZWxkCi0JCQkJCQkgICBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgUU9TX09FTV9QQVJBTVMgICAgICAgICAgICAgICAgICAoMzIpCS8qIHFvc19wYXJhbXNfb2VtIGZpZWxkCi0JCQkJCQkgICBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgUU9TX1RQVVRfSVNDU0kgICAgICAgICAgICAgICAgICAoNjQpCS8qIG1heF9ieXRlc19wZXJfc2Vjb25kX2lTQ1NJCi0JCQkJCQkgICBmaWVsZCAgaXMgdmFsaWQuICAqLwotCi0KLS8qCi0gKiAtLS0gRkFJTE9WRVJfQ09ORklHX0VOVU0gLS0tCi0gKiBGYWlsb3ZlciBjb25maWd1cmF0aW9uIHNldHRpbmcgdXNlZCBpbiBGV0NNRF9DT01NT05fRk9SQ0VfRkFJTE9WRVIKLSAqLwotI2RlZmluZSBGQUlMT1ZFUl9DT05GSUdfTk9fQ0hBTkdFICAgICAgICgwKQkvKiBObyBjaGFuZ2UgdG8gYXV0b21hdGljICovCi0JCQkJCQkgIC8qIHBvcnQgZmFpbG92ZXIgc2V0dGluZy4gKi8KLSNkZWZpbmUgRkFJTE9WRVJfQ09ORklHX09OICAgICAgICAgICAgICAoMSkJLyogQXV0b21hdGljIHBvcnQgZmFpbG92ZXIKLQkJCQkJCSAgIG9uIGxpbmsgZG93biAgaXMgZW5hYmxlZC4gKi8KLSNkZWZpbmUgRkFJTE9WRVJfQ09ORklHX09GRiAgICAgICAgICAgICAoMikJLyogQXV0b21hdGljIHBvcnQgZmFpbG92ZXIKLQkJCQkJCSAgIG9uIGxpbmsgZG93biBpcyBkaXNhYmxlZC4gKi8KLQotLyoKLSAqIC0tLSBGQUlMT1ZFUl9QT1JUX0VOVU0gLS0tCi0gKiBGYWlsb3ZlciBwb3J0IHNldHRpbmcgdXNlZCBpbiBGV0NNRF9DT01NT05fRk9SQ0VfRkFJTE9WRVIKLSAqLwotI2RlZmluZSBGQUlMT1ZFUl9QT1JUX0EgICAgICAgICAgICAgICAgICgwKQkvKiBTZWxlY3RzIHBvcnQgQS4gKi8KLSNkZWZpbmUgRkFJTE9WRVJfUE9SVF9CICAgICAgICAgICAgICAgICAoMSkJLyogU2VsZWN0cyBwb3J0IEIuICovCi0jZGVmaW5lIEZBSUxPVkVSX1BPUlRfTk9ORSAgICAgICAgICAgICAgKDE1KQkvKiBObyBwb3J0IGNoYW5nZSByZXF1ZXN0ZWQuICovCi0KLQotLyoKLSAqIC0tLSBNR01UX0ZMQVNIUk9NX09QQ09ERSAtLS0KLSAqIEZsYXNoIFJPTSBvcGVyYXRpb24gY29kZQotICovCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BDT0RFX0ZMQVNIICAgICAgKDEpCS8qIENvbW1pdCBkb3dubG9hZGVkIGRhdGEKLQkJCQkJCSAgIHRvIEZsYXNoIFJPTSAqLwotI2RlZmluZSBNR01UX0ZMQVNIUk9NX09QQ09ERV9TQVZFICAgICAgICgyKQkvKiBTYXZlIGRvd25sb2FkZWQgZGF0YSB0bwotCQkJCQkJICAgQVJNJ3MgRERSIC0gZG8gbm90IGZsYXNoICovCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BDT0RFX0NMRUFSICAgICAgKDMpCS8qIEVyYXNlIHNwZWNpZmllZCBjb21wb25lbnQKLQkJCQkJCSAgIGZyb20gRmxhc2hST00gKi8KLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUENPREVfUkVQT1JUICAgICAoNCkJLyogUmVhZCBzcGVjaWZpZWQgY29tcG9uZW50Ci0JCQkJCQkgICBmcm9tIEZsYXNoIFJPTSAqLwotI2RlZmluZSBNR01UX0ZMQVNIUk9NX09QQ09ERV9JTUFHRV9JTkZPICg1KQkvKiBSZXR1cm5zIHNpemUgb2YgYQotCQkJCQkJICAgY29tcG9uZW50ICovCi0KLS8qCi0gKiAtLS0gTUdNVF9GTEFTSFJPTV9PUFRZUEUgLS0tCi0gKiBGbGFzaCBST00gb3BlcmF0aW9uIHR5cGUKLSAqLwotI2RlZmluZSBNR01UX0ZMQVNIUk9NX09QVFlQRV9DT0RFX0ZJUk1XQVJFICgwKQkvKiBJbmNsdWRlcyBBUk0gZmlybXdhcmUsCi0JCQkJCQkgICBJUFNlYyAob3B0aW9uYWwpIGFuZCBFUAotCQkJCQkJICAgZmlybXdhcmUgICovCi0jZGVmaW5lIE1HTVRfRkxBU0hST01fT1BUWVBFX0NPREVfUkVEQk9PVCAoMSkKLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfQ09ERV9CSU9TICAoMikKLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfQ09ERV9QWEVfQklPUyAoMykKLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfQ09ERV9DVFJMUyAoNCkKLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfQ0ZHX0lQU0VDICAoNSkKLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfQ0ZHX0lOSSAgICAoNikKLSNkZWZpbmUgTUdNVF9GTEFTSFJPTV9PUFRZUEVfUk9NX09GRlNFVF9TUEVDSUZJRUQgKDcpCi0KLS8qCi0gKiAtLS0gRkxBU0hST01fVFlQRSAtLS0KLSAqIEZsYXNoIFJPTSBtYW51ZmFjdHVyZXJzIHN1cHBvcnRlZCBpbiB0aGUgZi93Ci0gKi8KLSNkZWZpbmUgSU5URUwgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgU1BBTlNJT04gICAgICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgTUlDUk9OICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKLQotLyogLS0tIEREUl9DQVNfVFlQRSAtLS0gKi8KLSNkZWZpbmUgQ0FTXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgQ0FTXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgQ0FTXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKLQotLyogLS0tIEREUl9TSVpFX1RZUEUgLS0tICovCi0jZGVmaW5lIFNJWkVfMjU2TUIgICAgICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFNJWkVfNTEyTUIgICAgICAgICAgICAgICAgICAgICAgKDEpCi0KLS8qIC0tLSBERFJfTU9ERV9UWVBFIC0tLSAqLwotI2RlZmluZSBERFJfTk9fRUNDICAgICAgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBERFJfRUNDICAgICAgICAgICAgICAgICAgICAgICAgICgxKQotCi0vKiAtLS0gSU5URVJGQUNFXzEwR0JfVFlQRSAtLS0gKi8KLSNkZWZpbmUgQ1g0X1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgWEZQX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAoMSkKLQotLyogLS0tIEJFX0NISVBfTUFYX01UVSAtLS0gKi8KLSNkZWZpbmUgQ0hJUF9NQVhfTVRVICAgICAgICAgICAgICAgICAgICAoOTAwMCkKLQotLyogLS0tIFhBVUlfU1RBVEVfRU5VTSAtLS0gKi8KLSNkZWZpbmUgWEFVSV9TVEFURV9FTkFCTEUgICAgICAgICAgICAgICAoMCkJLyogVGhpcyBNVVNUIGJlIHRoZSBkZWZhdWx0Ci0JCQkJCQkgICB2YWx1ZSBmb3IgYWxsIHJlcXVlc3RzCi0JCQkJCQkgICB3aGljaCBzZXQvY2hhbmdlCi0JCQkJCQkgICBlcXVhbGl6YXRpb24gcGFyYW1ldGVyLiAgKi8KLSNkZWZpbmUgWEFVSV9TVEFURV9ESVNBQkxFICAgICAgICAgICAgICAoMjU1KQkvKiBUaGUgWEFVSSBmb3IgYm90aCBwb3J0cwotCQkJCQkJICAgbWF5IGJlIGRpc2FibGVkIGZvciBFTUkKLQkJCQkJCSAgIHRlc3RzLiBUaGVyZSBpcyBubwotCQkJCQkJICAgcHJvdmlzaW9uIGZvciB0dXJuaW5nIG9mZgotCQkJCQkJICAgaW5kaXZpZHVhbCBwb3J0cy4KLQkJCQkJCSAgICovCi0vKiAtLS0gQkVfQVNJQ19SRVZJU0lPTiAtLS0gKi8KLSNkZWZpbmUgQkVfQVNJQ19SRVZfQTAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgQkVfQVNJQ19SRVZfQTEgICAgICAgICAgICAgICAgICAoMikKLQotI2VuZGlmIC8qIF9fZndjbWRfY29tbW9uX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfY29tbW9uX2JtYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9jb21tb25fYm1hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDA3Y2YyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9jb21tb25fYm1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19md2NtZF9jb21tb25fYm1hcF9oX18KLSNkZWZpbmUgX19md2NtZF9jb21tb25fYm1hcF9oX18KLSNpbmNsdWRlICJmd2NtZF90eXBlc19ibWFwLmgiCi0jaW5jbHVkZSAiZndjbWRfaGRyX2JtYXAuaCIKLQotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotICAgLyogUGh5c2ljYWwgQWRkcmVzcy4gKi8KLXN0cnVjdCBQSFlTX0FERFIgewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXUzMiBsbzsJLyogRFdPUkQgMCAqLwotCQkJdTMyIGhpOwkvKiBEV09SRCAxICovCi0JCX0gX19wYWNrZWQ7CS8qIHVubmFtZWQgc3RydWN0ICovCi0JCXUzMiBkd1syXTsJLyogZHdvcmQgdW5pb24gKi8KLQl9OwkJCS8qIHVubmFtZWQgdW5pb24gKi8KLX0gX19wYWNrZWQgOwotCi0KLSNlbHNlCi0gICAvKiBQaHlzaWNhbCBBZGRyZXNzLiAqLwotc3RydWN0IFBIWVNfQUREUiB7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTMyIGxvOwkvKiBEV09SRCAwICovCi0JCQl1MzIgaGk7CS8qIERXT1JEIDEgKi8KLQkJfSBfX3BhY2tlZDsJLyogdW5uYW1lZCBzdHJ1Y3QgKi8KLQkJdTMyIGR3WzJdOwkvKiBkd29yZCB1bmlvbiAqLwotCX07CQkJLyogdW5uYW1lZCB1bmlvbiAqLwotfSBfX3BhY2tlZCA7Ci0KLXN0cnVjdCBCRV9MSU5LX1NUQVRVUyB7Ci0JdTggbWFjMF9kdXBsZXg7Ci0JdTggbWFjMF9zcGVlZDsKLQl1OCBtYWMxX2R1cGxleDsKLQl1OCBtYWMxX3NwZWVkOwotCXU4IG1nbXRfbWFjX2R1cGxleDsKLQl1OCBtZ210X21hY19zcGVlZDsKLQl1OCBhY3RpdmVfcG9ydDsKLQl1OCByc3ZkMDsKLQl1OCBtYWMwX2ZhdWx0OwotCXU4IG1hYzFfZmF1bHQ7Ci0JdTE2IHJzdmQxOwotfSBfX3BhY2tlZDsKLSNlbmRpZgotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTcwX1JFUVVFU1QgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIExJTktfU1RBVFVTX1FVRVJZX1BBUkFNUyB7Ci0Jc3RydWN0IEJFX0xJTktfU1RBVFVTIHJlc3BvbnNlOwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xNzBfUkVRVUVTVCByZXF1ZXN0OwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBRdWVyaWVzIHRoZSB0aGUgbGluayBzdGF0dXMgZm9yIGFsbCBwb3J0cy4gIFRoZSB2YWxpZCB2YWx1ZXMgYmVsb3cKLSAqICBETyBOT1QgaW5kaWNhdGUgdGhhdCAgYSBwYXJ0aWN1bGFyIGR1cGxleCBvciBzcGVlZCBpcyBzdXBwb3J0ZWQgYnkKLSAqICBCbGFkZUVuZ2luZS4gVGhlc2UgZW51bWVyYXRpb25zIHNpbXBseSAgbGlzdCBhbGwgcG9zc2libGUgZHVwbGV4ZXMKLSAqICBhbmQgc3BlZWRzIGZvciBhbnkgcG9ydC4gQ29uc3VsdCBCbGFkZUVuZ2luZSBwcm9kdWN0ICBkb2N1bWVudGF0aW9uCi0gKiAgZm9yIHRoZSBzdXBwb3J0ZWQgcGFyYW1ldGVycy4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIExJTktfU1RBVFVTX1FVRVJZX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTcxX1JFUVVFU1QgewotCXU4IHR5cGU7Ci0JdTggcG9ydDsKLQl1OCBtYWMxOwotCXU4IHBlcm1hbmVudDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xNzJfUkVTUE9OU0UgewotCXN0cnVjdCBNQUNfQUREUkVTU19GT1JNQVQgbWFjOwotfSBfX3BhY2tlZDsKLQotdW5pb24gTlRXS19NQUNfUVVFUllfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTcxX1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTcyX1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogUXVlcmllcyBvbmUgTUFDIGFkZHJlc3MuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01BQ19RVUVSWSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBOVFdLX01BQ19RVUVSWV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IE1BQ19TRVRfUEFSQU1TX0lOIHsKLQl1OCB0eXBlOwotCXU4IHBvcnQ7Ci0JdTggbWFjMTsKLQl1OCBpbnZhbGlkYXRlOwotCXN0cnVjdCBNQUNfQUREUkVTU19GT1JNQVQgbWFjOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IE1BQ19TRVRfUEFSQU1TX09VVCB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gTUFDX1NFVF9QQVJBTVMgewotCXN0cnVjdCBNQUNfU0VUX1BBUkFNU19JTiByZXF1ZXN0OwotCXN0cnVjdCBNQUNfU0VUX1BBUkFNU19PVVQgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKiBTZXRzIGEgTUFDIGFkZHJlc3MuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01BQ19TRVQgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gTUFDX1NFVF9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotLyogTUFDIGFkZHJlc3MgbGlzdC4gKi8KLXN0cnVjdCBOVFdLX01VTFRJQ0FTVF9NQUNfTElTVCB7Ci0JdTggYnl0ZVs2XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VUX1JFUVVFU1RfUEFZTE9BRCB7Ci0JdTE2IG51bV9tYWM7Ci0JdTggcHJvbWlzY3VvdXM7Ci0JdTggcnN2ZDA7Ci0Jc3RydWN0IE5UV0tfTVVMVElDQVNUX01BQ19MSVNUIG1hY1szMl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTc0X1JFU1BPTlNFIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8xNzNfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVF9SRVFVRVNUX1BBWUxPQUQgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTc0X1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBTZXRzIG11bHRpY2FzdCBhZGRyZXNzIGhhc2guIFRoZSBNUFUgd2lsbCBtZXJnZSB0aGUgTUFDIGFkZHJlc3MgbGlzdHMKLSAqICBmcm9tIGFsbCBjbGllbnRzLCAgaW5jbHVkaW5nIHRoZSBuZXR3b3JraW5nIGFuZCBzdG9yYWdlIGZ1bmN0aW9ucy4KLSAqICBUaGlzIGNvbW1hbmQgbWF5IGZhaWwgaWYgdGhlIGZpbmFsIG1lcmdlZCAgbGlzdCBvZiBNQUMgYWRkcmVzc2VzIGV4Y2VlZHMKLSAqICAzMiBlbnRyaWVzLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVCB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8xNzNfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19WTEFOX0NPTkZJR19SRVFVRVNUX1BBWUxPQUQgewotCXUxNiBudW1fdmxhbjsKLQl1OCBwcm9taXNjdW91czsKLQl1OCByc3ZkMDsKLQl1MTYgdmxhbl90YWdbMzJdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE3Nl9SRVNQT05TRSB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTc1X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX1ZMQU5fQ09ORklHX1JFUVVFU1RfUEFZTE9BRCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xNzZfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFNldHMgVkxBTiB0YWcgZmlsdGVyLiBUaGUgTVBVIHdpbGwgbWVyZ2UgdGhlIFZMQU4gdGFnIGxpc3QgZnJvbSBhbGwKLSAqICBjbGllbnRzLCBpbmNsdWRpbmcgIHRoZSBuZXR3b3JraW5nIGFuZCBzdG9yYWdlIGZ1bmN0aW9ucy4gVGhpcyBjb21tYW5kCi0gKiAgbWF5IGZhaWwgaWYgdGhlIGZpbmFsIHZsYW5fdGFnIGFycmF5ICAoZnJvbSBhbGwgZnVuY3Rpb25zKSBpcyBsb25nZXIKLSAqICB0aGFuIDMyIGVudHJpZXMuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19WTEFOX0NPTkZJRyB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8xNzVfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBSSU5HX0RFU1RST1lfUkVRVUVTVCB7Ci0JdTE2IHJpbmdfdHlwZTsKLQl1MTYgaWQ7Ci0JdTggYnlwYXNzX2ZsdXNoOwotCXU4IHJzdmQwOwotCXUxNiByc3ZkMTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOTBfUkVTUE9OU0UgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzE4OV9QQVJBTVMgewotCXN0cnVjdCBSSU5HX0RFU1RST1lfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8xOTBfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotLyoKLSAqICBDb21tYW5kIGZvciBkZXN0cm95aW5nIGFueSByaW5nLiBUaGUgY29ubmVjdGlvbihzKSB1c2luZyB0aGUgcmluZyBzaG91bGQKLSAqICBiZSBxdWllc2NlZCAgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIHJpbmcuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fUklOR19ERVNUUk9ZIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzE4OV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5Ml9SRVFVRVNUIHsKLQl1MTYgbnVtX3BhZ2VzOwotCXUxNiByc3ZkMDsKLQlzdHJ1Y3QgQ1FfQ09OVEVYVF9BTUFQIGNvbnRleHQ7Ci0Jc3RydWN0IFBIWVNfQUREUiBwYWdlc1s0XTsKLX0gX19wYWNrZWQgOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTkzX1JFU1BPTlNFIHsKLQl1MTYgY3FfaWQ7Ci19IF9fcGFja2VkIDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTkxX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5Ml9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5M19SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQgOwotCi0vKgotICogIENvbW1hbmQgZm9yIGNyZWF0aW5nIGEgY29tcGxldGlvbiBxdWV1ZS4gQSBDb21wbGV0aW9uIFF1ZXVlIG11c3Qgc3BhbgotICogIGF0IGxlYXN0IDEgcGFnZSBhbmQgIGF0IG1vc3QgNCBwYWdlcy4gRWFjaCBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5Ci0gKiAgaXMgMTYgYnl0ZXMgcmVnYXJkbGVzcyBvZiBDUSBlbnRyeSBmb3JtYXQuICBUaHVzIHRoZSByaW5nIG11c3QgYmUKLSAqICBhdCBsZWFzdCAyNTYgZW50cmllcyBkZWVwIChjb3JyZXNwb25kaW5nIHRvIDEgcGFnZSkgYW5kIGNhbiBiZSBhdAotICogICBtb3N0IDEwMjQgZW50cmllcyBkZWVwIChjb3JyZXNwb25kaW5nIHRvIDQgcGFnZXMpLiBUaGUgbnVtYmVyIG9mCi0gKiAgcGFnZXMgcG9zdGVkIG11c3QgIGNvbnRhaW4gdGhlIENRIHJpbmcgc2l6ZSBhcyBlbmNvZGVkIGluIHRoZSBjb250ZXh0LgotICoKLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9DUV9DUkVBVEUgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTkxX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5OF9SRVFVRVNUIHsKLQl1MTYgbnVtX3BhZ2VzOwotCXUxNiByc3ZkMDsKLQlzdHJ1Y3QgRVFfQ09OVEVYVF9BTUFQIGNvbnRleHQ7Ci0Jc3RydWN0IFBIWVNfQUREUiBwYWdlc1s4XTsKLX0gX19wYWNrZWQgOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMTk5X1JFU1BPTlNFIHsKLQl1MTYgZXFfaWQ7Ci19IF9fcGFja2VkIDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMTk3X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5OF9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzE5OV9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQgOwotCi0vKgotICogIENvbW1hbmQgZm9yIGNyZWF0aW5nIGEgZXZlbnQgcXVldWUuIEFuIEV2ZW50IFF1ZXVlIG11c3Qgc3BhbiBhdCBsZWFzdAotICogIDEgcGFnZSBhbmQgYXQgbW9zdCAgOCBwYWdlcy4gVGhlIG51bWJlciBvZiBwYWdlcyBwb3N0ZWQgbXVzdCBjb250YWluCi0gKiAgdGhlIEVRIHJpbmcuIFRoZSByaW5nIGlzIGRlZmluZWQgYnkgIHRoZSBzaXplIG9mIHRoZSBFUSBlbnRyaWVzIChlbmNvZGVkCi0gKiAgaW4gdGhlIGNvbnRleHQpIGFuZCB0aGUgbnVtYmVyIG9mIEVRIGVudHJpZXMgKGFsc28gIGVuY29kZWQgaW4gdGhlCi0gKiAgY29udGV4dCkuCi0gKi8KLXN0cnVjdCBGV0NNRF9DT01NT05fRVFfQ1JFQVRFIHsKLQl1bmlvbiAgRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8xOTdfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQgOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjAxX1JFUVVFU1QgewotCXUxNiBjcV9pZDsKLQl1MTYgYmNtY19jcV9pZDsKLQl1MTYgbnVtX3BhZ2VzOwotCXUxNiByc3ZkMDsKLQlzdHJ1Y3QgUEhZU19BRERSIHBhZ2VzWzJdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwMl9SRVNQT05TRSB7Ci0JdTE2IGlkOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjAwX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwMV9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwMl9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgQ29tbWFuZCBmb3IgY3JlYXRpbmcgRXRoZXJuZXQgcmVjZWl2ZSByaW5nLiAgQW4gRVJYIHJpbmcgY29udGFpbnMgRVRIX1JYX0QKLSAqICBlbnRyaWVzICg4ICBieXRlcyBlYWNoKS4gQW4gRVJYIHJpbmcgbXVzdCBiZSAxMDI0IGVudHJpZXMgZGVlcAotICogIChjb3JyZXNwb25kaW5nIHRvIDIgcGFnZXMpLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0VUSF9SWF9DUkVBVEUgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjAwX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjA0X1JFUVVFU1QgewotCXUxNiBudW1fcGFnZXM7Ci0JdTggdWxwX251bTsKLQl1OCB0eXBlOwotCXN0cnVjdCBFVFhfQ09OVEVYVF9BTUFQIGNvbnRleHQ7Ci0Jc3RydWN0IFBIWVNfQUREUiBwYWdlc1s4XTsKLX0gX19wYWNrZWQgOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjA1X1JFU1BPTlNFIHsKLQl1MTYgY2lkOwotCXU4IHVscF9udW07Ci0JdTggcnN2ZDA7Ci19IF9fcGFja2VkIDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjAzX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwNF9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIwNV9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQgOwotCi0vKgotICogIENvbW1hbmQgZm9yIGNyZWF0aW5nIGFuIEV0aGVybmV0IHRyYW5zbWl0IHJpbmcuICBBbiBFVFggcmluZyBjb250YWlucwotICogIEVUSF9XUkIgZW50cmllcyAoMTYgIGJ5dGVzIGVhY2gpLiBBbiBFVFggcmluZyBtdXN0IGJlIGF0IGxlYXN0IDI1NgotICogIGVudHJpZXMgZGVlcCAoY29ycmVzcG9uZGluZyB0byAxIHBhZ2UpICBhbmQgYXQgbW9zdCAyayBlbnRyaWVzIGRlZXAKLSAqICAoY29ycmVzcG9uZGluZyB0byA4IHBhZ2VzKS4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9FVEhfVFhfQ1JFQVRFIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIwM19QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZCA7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMjJfUkVRVUVTVCB7Ci0JdTE2IG51bV9wYWdlczsKLQl1MTYgcnN2ZDA7Ci0Jc3RydWN0IE1DQ19SSU5HX0NPTlRFWFRfQU1BUCBjb250ZXh0OwotCXN0cnVjdCBQSFlTX0FERFIgcGFnZXNbOF07Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzIyM19SRVNQT05TRSB7Ci0JdTE2IGlkOwotfSBfX3BhY2tlZCA7Ci0KLXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIyMV9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMjJfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yMjNfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkIDsKLQotLyoKLSAqICBDb21tYW5kIGZvciBjcmVhdGluZyB0aGUgTUNDIHJpbmcuIEFuIE1DQyByaW5nIG11c3QgYmUgYXQgbGVhc3QgMTYKLSAqICBlbnRyaWVzIGRlZXAgIChjb3JyZXNwb25kaW5nIHRvIDEgcGFnZSkgYW5kIGF0IG1vc3QgMTI4IGVudHJpZXMgZGVlcAotICogIChjb3JyZXNwb25kaW5nIHRvIDggcGFnZXMpLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX01DQ19DUkVBVEUgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjIxX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkIDsKLQotc3RydWN0IEdFVF9RT1NfSU4gewotCXUzMiBxb3NfcGFyYW1zX3JzdmQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgR0VUX1FPU19PVVQgewotCXUzMiBtYXhfYml0c19wZXJfc2Vjb25kX05JQzsKLQl1MzIgbWF4X3BhY2tldHNfcGVyX3NlY29uZF9OSUM7Ci0JdTMyIG1heF9pb3NfcGVyX3NlY29uZF9pU0NTSTsKLQl1MzIgbWF4X2J5dGVzX3Blcl9zZWNvbmRfaVNDU0k7Ci0JdTE2IGRvbWFpbl9WTEFOX3RhZzsKLQl1MTYgZmFicmljX2RvbWFpbl9JRDsKLQl1MzIgcW9zX3BhcmFtc19vZW1bNF07Ci19IF9fcGFja2VkOwotCi11bmlvbiBHRVRfUU9TX1BBUkFNUyB7Ci0Jc3RydWN0IEdFVF9RT1NfSU4gcmVxdWVzdDsKLQlzdHJ1Y3QgR0VUX1FPU19PVVQgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKiBRT1MvQmFuZHdpZHRoIHNldHRpbmdzIHBlciBkb21haW4uIEFwcGxpY2FibGUgb25seSBpbiBWTXMuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfUU9TIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEdFVF9RT1NfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBTRVRfUU9TX0lOIHsKLQl1MzIgdmFsaWRfZmxhZ3M7Ci0JdTMyIG1heF9iaXRzX3Blcl9zZWNvbmRfTklDOwotCXUzMiBtYXhfcGFja2V0c19wZXJfc2Vjb25kX05JQzsKLQl1MzIgbWF4X2lvc19wZXJfc2Vjb25kX2lTQ1NJOwotCXUzMiBtYXhfYnl0ZXNfcGVyX3NlY29uZF9pU0NTSTsKLQl1MTYgZG9tYWluX1ZMQU5fdGFnOwotCXUxNiBmYWJyaWNfZG9tYWluX0lEOwotCXUzMiBxb3NfcGFyYW1zX29lbVs0XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBTRVRfUU9TX09VVCB7Ci0JdTMyIHFvc19wYXJhbXNfcnN2ZDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIFNFVF9RT1NfUEFSQU1TIHsKLQlzdHJ1Y3QgU0VUX1FPU19JTiByZXF1ZXN0OwotCXN0cnVjdCBTRVRfUU9TX09VVCByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFFPUy9CYW5kd2lkdGggc2V0dGluZ3MgcGVyIGRvbWFpbi4gQXBwbGljYWJsZSBvbmx5IGluIFZNcy4gICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX1NFVF9RT1MgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gU0VUX1FPU19QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IFNFVF9GUkFNRV9TSVpFX0lOIHsKLQl1MzIgbWF4X3R4X2ZyYW1lX3NpemU7Ci0JdTMyIG1heF9yeF9mcmFtZV9zaXplOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IFNFVF9GUkFNRV9TSVpFX09VVCB7Ci0JdTMyIGNoaXBfbWF4X3R4X2ZyYW1lX3NpemU7Ci0JdTMyIGNoaXBfbWF4X3J4X2ZyYW1lX3NpemU7Ci19IF9fcGFja2VkOwotCi11bmlvbiBTRVRfRlJBTUVfU0laRV9QQVJBTVMgewotCXN0cnVjdCBTRVRfRlJBTUVfU0laRV9JTiByZXF1ZXN0OwotCXN0cnVjdCBTRVRfRlJBTUVfU0laRV9PVVQgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKiBTZXQgZnJhbWUgc2l6ZSBjb21tYW5kLiBPbmx5IGhvc3QgZG9tYWluIG1heSBpc3N1ZSB0aGlzIGNvbW1hbmQuICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9TRVRfRlJBTUVfU0laRSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBTRVRfRlJBTUVfU0laRV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZPUkNFX0ZBSUxPVkVSX0lOIHsKLQl1MzIgbW92ZV90b19wb3J0OwotCXUzMiBmYWlsb3Zlcl9jb25maWc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjMxX1JFU1BPTlNFIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yMzBfUEFSQU1TIHsKLQlzdHJ1Y3QgRk9SQ0VfRkFJTE9WRVJfSU4gcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjMxX1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBVc2UgdGhpcyBjb21tYW5kIHRvIGNvbnRyb2wgZmFpbG92ZXIgaW4gQmxhZGVFbmdpbmUuIEl0IG1heSBiZSB1c2VkCi0gKiAgdG8gZmFpbGJhY2sgdG8gYSAgcmVzdG9yZWQgcG9ydCBvciB0byBmb3JjaWJseSBtb3ZlIHRyYWZmaWMgZnJvbQotICogIG9uZSBwb3J0IHRvIGFub3RoZXIuIEl0IG1heSBhbHNvIGJlIHVzZWQgIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZQotICogIGF1dG9tYXRpYyBmYWlsb3ZlciBmZWF0dXJlLiBUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgaXNzdWVkIGJ5ICBkb21haW4KLSAqICAwLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0ZPUkNFX0ZBSUxPVkVSIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzIzMF9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0MF9SRVFVRVNUIHsKLQl1NjQgY29udGV4dDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDFfUkVTUE9OU0UgewotCXU2NCBjb250ZXh0OwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjM5X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0MF9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0MV9SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgYXMgYSBuby1vcGVyYXRpb24gcmVxdWVzdC4gVHlwaWNhbAotICogIHVzZXMgZm9yIGRyaXZlcnMgIGFyZSBhcyBhIGhlYXJ0YmVhdCBtZWNoYW5pc20sIG9yIGRlZmVycmVkIHByb2Nlc3NpbmcKLSAqICBjYXRhbHlzdC4gVGhlIEFSTSB3aWxsIGFsd2F5cyAgY29tcGxldGUgdGhpcyBjb21tYW5kIHdpdGggYSBnb29kIGNvbXBsZXRpb24uCi0gKiAgVGhlIDY0LWJpdCBwYXJhbWV0ZXIgaXMgbm90IHRvdWNoZWQgYnkgdGhlICBBUk0gcHJvY2Vzc29yLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX05PUCB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yMzlfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBOVFdLX1JYX0ZJTFRFUl9TRVRUSU5HUyB7Ci0JdTggcHJvbWlzY3VvdXM7Ci0JdTggaXBfY2tzdW07Ci0JdTggdGNwX2Nrc3VtOwotCXU4IHVkcF9ja3N1bTsKLQl1OCBwYXNzX2VycjsKLQl1OCBwYXNzX2NrZXJyOwotCXU4IHN0cmlwX2NyYzsKLQl1OCBtY2FzdF9lbjsKLQl1OCBiY2FzdF9lbjsKLQl1OCBtY2FzdF9wcm9taXNjdW91c19lbjsKLQl1OCB1bmljYXN0X2VuOwotCXU4IHZsYW5fcHJvbWlzY3VvdXM7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNDJfUEFSQU1TIHsKLQlzdHJ1Y3QgTlRXS19SWF9GSUxURVJfU0VUVElOR1MgcmVxdWVzdDsKLQlzdHJ1Y3QgTlRXS19SWF9GSUxURVJfU0VUVElOR1MgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIG1vZGlmeSB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBmaWx0ZXIgY29uZmlndXJhdGlvbi4KLSAqICBPbmx5IGRvbWFpbiAwICBuZXR3b3JrIGZ1bmN0aW9uIGRyaXZlcnMgbWF5IGlzc3VlIHRoaXMgY29tbWFuZC4gVGhlCi0gKiAgYXBwbGllZCBjb25maWd1cmF0aW9uIGlzIHJldHVybmVkIGluICB0aGUgcmVzcG9uc2UgcGF5bG9hZC4gTm90ZToKLSAqICBTb21lIHJlY2VpdmUgcGFja2V0IGZpbHRlciBzZXR0aW5ncyBhcmUgZ2xvYmFsIG9uICBCbGFkZUVuZ2luZSBhbmQKLSAqICBjYW4gYWZmZWN0IGJvdGggdGhlIHN0b3JhZ2UgYW5kIG5ldHdvcmsgZnVuY3Rpb24gY2xpZW50cyB0aGF0IHRoZQotICogICBCbGFkZUVuZ2luZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgc2VydmUuIEFkZGl0aW9uYWx5LCBkZXBlbmRpbmcKLSAqICBvbiB0aGUgcmV2aXNpb24gb2YgIEJsYWRlRW5naW5lLCBzb21lIGV0aGVybmV0IHJlY2VpdmUgZmlsdGVyIHNldHRpbmdzCi0gKiAgYXJlIGRlcGVuZGVudCBvbiBvdGhlcnMuIElmIGEgIGRlcGVuZGVuY3kgZXhpc3RzIGJldHdlZW4gc2V0dGluZ3MKLSAqICBmb3IgdGhlIEJsYWRlRW5naW5lIHJldmlzaW9uLCBhbmQgdGhlIGNvbW1hbmQgcmVxdWVzdCAgc2V0dGluZ3MgZG8KLSAqICBub3QgbWVldCB0aGUgZGVwZW5kZW5jeSByZXF1aXJlbWVudCwgdGhlIGludmFsaWQgc2V0dGluZ3Mgd2lsbCBub3QKLSAqICBiZSAgYXBwbGllZCBkZXNwaXRlIHRoZSBjb21hbmQgc3VjY2VlZGluZy4gRm9yIGV4YW1wbGU6IGEgZHJpdmVyIG1heQotICogIHJlcXVlc3QgdG8gZW5hYmxlICBicm9hZGNhc3QgcGFja2V0cywgYnV0IG5vdCBlbmFibGUgbXVsdGljYXN0IHBhY2tldHMuCi0gKiAgT24gZWFybHkgcmV2aXNpb25zIG9mIEJsYWRlRW5naW5lLCAgdGhlcmUgbWF5IGJlIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4KLSAqICBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBmaWx0ZXJzLCBzbyBicm9hZGNhc3QgY291bGQgIG5vdCBiZSBlbmFibGVkCi0gKiAgd2l0aG91dCBlbmFibGluZyBtdWx0aWNhc3QuIEluIHRoaXMgc2NlbmFyaW8sIHRoZSBjb21hbmQgd291bGQgc3RpbGwKLSAqICAgc3VjY2VlZCwgYnV0IHRoZSByZXNwb25zZSBwYXlsb2FkIHdvdWxkIGluZGljYXRlIHRoZSBwcmV2aW91c2x5Ci0gKiAgY29uZmlndXJlZCBicm9hZGNhc3QgIGFuZCBtdWx0aWNhc3Qgc2V0dGluZy4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNDJfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0NF9SRVFVRVNUIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OX1JFU1BPTlNFX1BBWUxPQUQgewotCXU4IGZpcm13YXJlX3ZlcnNpb25fc3RyaW5nWzMyXTsKLQl1OCBmd19vbl9mbGFzaF92ZXJzaW9uX3N0cmluZ1szMl07Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNDNfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjQ0X1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GV19WRVJTSU9OX1JFU1BPTlNFX1BBWUxPQUQgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKiBUaGlzIGNvbWFuZCByZXRyaWV2ZXMgdGhlIGZpcm13YXJlIHZlcnNpb24uICAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfRldfVkVSU0lPTiB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNDNfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNDZfUkVRVUVTVCB7Ci0JdTE2IHR4X2Zsb3dfY29udHJvbDsKLQl1MTYgcnhfZmxvd19jb250cm9sOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0N19SRVNQT05TRSB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQ1X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0Nl9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0N19SRVNQT05TRSByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgVGhpcyBjb21hbmQgaXMgdXNlZCB0byBwcm9ncmFtIEJsYWRlRW5naW5lIGZsb3cgY29udHJvbCBiZWhhdmlvci4KLSAqICBPbmx5IHRoZSBob3N0ICBuZXR3b3JraW5nIGRyaXZlciBpcyBhbGxvd2VkIHRvIHVzZSB0aGlzIGNvbWFuZC4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9TRVRfRkxPV19DT05UUk9MIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0NPTU1PTl9BTk9OXzI0NV9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI0OV9SRVFVRVNUIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjUwX1JFU1BPTlNFIHsKLQl1MTYgdHhfZmxvd19jb250cm9sOwotCXUxNiByeF9mbG93X2NvbnRyb2w7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNDhfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjQ5X1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjUwX1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogVGhpcyBjb21hbmQgaXMgdXNlZCB0byByZWFkIEJsYWRlRW5naW5lIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjQ4X1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRVFfREVMQVlfUEFSQU1TIHsKLQl1MzIgZXFfaWQ7Ci0JdTMyIGRlbGF5X2luX21pY3Jvc2Vjb25kczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNTdfUkVRVUVTVCB7Ci0JdTMyIG51bV9lcTsKLQl1MzIgcnN2ZDA7Ci0Jc3RydWN0IEVRX0RFTEFZX1BBUkFNUyBkZWxheVsxNl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjU4X1JFU1BPTlNFIHsKLQl1MzIgZGVsYXlfcmVzb2x1dGlvbl9pbl9taWNyb3NlY29uZHM7Ci0JdTMyIGRlbGF5X21heF9pbl9taWNyb3NlY29uZHM7Ci19IF9fcGFja2VkOwotCi11bmlvbiBNT0RJRllfRVFfREVMQVlfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjU3X1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjU4X1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyogVGhpcyBjb21hbmQgY2hhbmdlcyB0aGUgRVEgZGVsYXkgZm9yIGEgZ2l2ZW4gc2V0IG9mIEVRcy4gICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX01PRElGWV9FUV9ERUxBWSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBNT0RJRllfRVFfREVMQVlfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNjBfUkVRVUVTVCB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEJFX0ZJUk1XQVJFX0NPTkZJRyB7Ci0JdTE2IGJlX2NvbmZpZ19udW1iZXI7Ci0JdTE2IGFzaWNfcmV2aXNpb247Ci0JdTMyIG5pY191bHBfbWFzazsKLQl1MzIgdHVscF9tYXNrOwotCXUzMiBpc2NzaV91bHBfbWFzazsKLQl1MzIgcmRtYV91bHBfbWFzazsKLQl1MzIgcnN2ZDBbNF07Ci0JdTMyIGV0aF90eF9pZF9zdGFydDsKLQl1MzIgZXRoX3R4X2lkX2NvdW50OwotCXUzMiBldGhfcnhfaWRfc3RhcnQ7Ci0JdTMyIGV0aF9yeF9pZF9jb3VudDsKLQl1MzIgdHBtX3dyYnFfaWRfc3RhcnQ7Ci0JdTMyIHRwbV93cmJxX2lkX2NvdW50OwotCXUzMiB0cG1fZGVmcV9pZF9zdGFydDsKLQl1MzIgdHBtX2RlZnFfaWRfY291bnQ7Ci0JdTMyIGlzY3NpX3dyYnFfaWRfc3RhcnQ7Ci0JdTMyIGlzY3NpX3dyYnFfaWRfY291bnQ7Ci0JdTMyIGlzY3NpX2RlZnFfaWRfc3RhcnQ7Ci0JdTMyIGlzY3NpX2RlZnFfaWRfY291bnQ7Ci0JdTMyIHJkbWFfcXBfaWRfc3RhcnQ7Ci0JdTMyIHJkbWFfcXBfaWRfY291bnQ7Ci0JdTMyIHJzdmQxWzhdOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjU5X1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI2MF9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEJFX0ZJUk1XQVJFX0NPTkZJRyByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgVGhpcyBjb21hbmQgcXVlcmllcyB0aGUgY3VycmVudCBmaXJtd2FyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0gKiAgIFRoZSBzdGF0aWMgIGNvbmZpZ3VyYXRpb24gdHlwZSBpcyBkZWZpbmVkIGJ5IGJlX2NvbmZpZ19udW1iZXIuIFRoaXMKLSAqICBkaWZmZXJlbnRpYXRlcyBkaWZmZXJlbnQgIEJsYWRlRW5naW5lIGJ1aWxkcywgc3VjaCBhcyBpU0NTSSBJbml0aWF0b3IKLSAqICB2ZXJzdXMgaVNDU0kgVGFyZ2V0LiAgRm9yIGEgZ2l2ZW4gc3RhdGljICBjb25maWd1cmF0aW9uLCB0aGUgVXBwZXIKLSAqICBMYXllciBQcm90b2NvbCAoVUxQKSBwcm9jZXNzb3JzIG1heSBiZSByZWNvbmZpZ3VyZWQgdG8gc3VwcG9ydCAgZGlmZmVyZW50Ci0gKiAgcHJvdG9jb2xzLiBFYWNoIFVMUCBwcm9jZXNzb3Igc3VwcG9ydHMgb25lIG9yIG1vcmUgcHJvdG9jb2xzLiBUaGUKLSAqICBtYXNrcyAgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29ycyBhcmUgY29uZmlndXJlZCBmb3IgZWFjaCBwcm90b2NvbC4KLSAqICAgRm9yIGEgZ2l2ZW4gc3RhdGljICBjb25maWd1cmF0aW9uLCB0aGUgbnVtYmVyIG9mIFRDUCBjb25uZWN0aW9ucwotICogIHN1cHBvcnRlZCBmb3IgZWFjaCBwcm90b2NvbCBtYXkgdmFyeS4gVGhlICAqX2lkX3N0YXJ0IGFuZCAqX2lkX2NvdW50Ci0gKiAgdmFyaWFibGVzIGRlZmluZSBhIGxpbmVhciByYW5nZSBvZiBJRHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciAgZWFjaAotICogIHN1cHBvcnRlZCBwcm90b2NvbC4gVGhlICpfaWRfY291bnQgbWF5IGJlIHVzZWQgYnkgdGhlIGRyaXZlciB0byBhbGxvY2F0ZQotICogIHRoZSAgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGNvbm5lY3Rpb24gcmVzb3VyY2VzLiBUaGUgKl9pZF9zdGFydCBtYXkKLSAqICBiZSB1c2VkIHRvIG1hcCB0aGUgIGFyYml0cmFyeSByYW5nZSBvZiBJRHMgdG8gYSB6ZXJvLWJhc2VkIHJhbmdlCi0gKiAgb2YgaW5kaWNlcy4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9GSVJNV0FSRV9DT05GSUcgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjU5X1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX1BPUlRfRVFVQUxJWkFUSU9OX1BBUkFNUyB7Ci0JdTMyIGVtcGhfbGV2X3NlbF9wb3J0MDsKLQl1MzIgZW1waF9sZXZfc2VsX3BvcnQxOwotCXU4IHhhdWlfdm9fc2VsOwotCXU4IHhhdWlfc3RhdGU7Ci0JdTE2IHJzdmQwOwotCXUzMiB4YXVpX2VxX3ZlY3RvcjsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNjJfUkVRVUVTVCB7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjYxX1BBUkFNUyB7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9BTk9OXzI2Ml9SRVFVRVNUIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9QT1JUX0VRVUFMSVpBVElPTl9QQVJBTVMgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFRoaXMgY29tYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgWEFVSSBlcXVhbGl6YXRpb24gcGFyYW1ldGVycy4gVGhlCi0gKiAgQVJNIGZpcm13YXJlIGFwcGxpZXMgIGRlZmF1bHQgZXF1YWxpemF0aW9uIHBhcmFtZXRlcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICogIFRoZXNlIHBhcmFtZXRlcnMgbWF5IGJlICBjdXN0b21lci1zcGVjaWZpYyB3aGVuIGRlcml2ZWQgZnJvbSB0aGUKLSAqICBTRUVQUk9NLiBTZWUgU0VFUFJPTV9EQVRBIGZvciBlcXVhbGl6YXRpb24gIHNwZWNpZmljIGZpZWxkcy4KLSAqLwotc3RydWN0IEZXQ01EX0NPTU1PTl9HRVRfUE9SVF9FUVVBTElaQVRJT04gewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfQ09NTU9OX0FOT05fMjYxX1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfQ09NTU9OX0FOT05fMjY0X1JFU1BPTlNFIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNjNfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfQ09NTU9OX1BPUlRfRVFVQUxJWkFUSU9OX1BBUkFNUyByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9DT01NT05fQU5PTl8yNjRfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFRoaXMgY29tYW5kIGNhbiBiZSB1c2VkIHRvIHNldCBYQVVJIGVxdWFsaXphdGlvbiBwYXJhbWV0ZXJzLiBUaGUgQVJNCi0gKiAgZmlybXdhcmUgYXBwbGllcyAgZGVmYXVsdCBlcXVhbGl6YXRpb24gcGFyYW1ldGVycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKiAgVGhlc2UgcGFyYW1ldGVycyBtYXkgYmUgIGN1c3RvbWVyLXNwZWNpZmljIHdoZW4gZGVyaXZlZCBmcm9tIHRoZQotICogIFNFRVBST00uIFNlZSBTRUVQUk9NX0RBVEEgZm9yIGVxdWFsaXphdGlvbiAgc3BlY2lmaWMgZmllbGRzLgotICovCi1zdHJ1Y3QgRldDTURfQ09NTU9OX1NFVF9QT1JUX0VRVUFMSVpBVElPTiB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9DT01NT05fQU5PTl8yNjNfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZiAvKiBfX2Z3Y21kX2NvbW1vbl9ibWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2V0aF9ibWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfZXRoX2JtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0YjE3OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfZXRoX2JtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fZndjbWRfZXRoX2JtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfZXRoX2JtYXBfaF9fCi0jaW5jbHVkZSAiZndjbWRfaGRyX2JtYXAuaCIKLSNpbmNsdWRlICJmd2NtZF90eXBlc19ibWFwLmgiCi0KLXN0cnVjdCBNSUJfRVRIX1NUQVRJU1RJQ1NfUEFSQU1TX0lOIHsKLQl1MzIgcnN2ZDA7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgQkVfUlhGX1NUQVRTIHsKLQl1MzIgcDByZWN2ZHRvdGFsYnl0ZXNMU0Q7CS8qIERXT1JEIDAgKi8KLQl1MzIgcDByZWN2ZHRvdGFsYnl0ZXNNU0Q7CS8qIERXT1JEIDEgKi8KLQl1MzIgcDByZWN2ZHRvdGFsZnJhbWVzOwkvKiBEV09SRCAyICovCi0JdTMyIHAwcmVjdmR1bmljYXN0ZnJhbWVzOwkvKiBEV09SRCAzICovCi0JdTMyIHAwcmVjdmRtdWx0aWNhc3RmcmFtZXM7CS8qIERXT1JEIDQgKi8KLQl1MzIgcDByZWN2ZGJyb2FkY2FzdGZyYW1lczsJLyogRFdPUkQgNSAqLwotCXUzMiBwMGNyY2Vycm9yczsJLyogRFdPUkQgNiAqLwotCXUzMiBwMGFsaWdubWVudHN5bWVycnM7CS8qIERXT1JEIDcgKi8KLQl1MzIgcDBwYXVzZWZyYW1lc3JlY3ZkOwkvKiBEV09SRCA4ICovCi0JdTMyIHAwY29udHJvbGZyYW1lc3JlY3ZkOwkvKiBEV09SRCA5ICovCi0JdTMyIHAwaW5yYW5nZWxlbmVycm9yczsJLyogRFdPUkQgMTAgKi8KLQl1MzIgcDBvdXRyYW5nZWVycm9yczsJLyogRFdPUkQgMTEgKi8KLQl1MzIgcDBmcmFtZXRvb2xvbmdlcnJvcnM7CS8qIERXT1JEIDEyICovCi0JdTMyIHAwZHJvcHBlZGFkZHJlc3NtYXRjaDsJLyogRFdPUkQgMTMgKi8KLQl1MzIgcDBkcm9wcGVkdmxhbm1pc21hdGNoOwkvKiBEV09SRCAxNCAqLwotCXUzMiBwMGlwZHJvcHBlZHRvb3NtYWxsOwkvKiBEV09SRCAxNSAqLwotCXUzMiBwMGlwZHJvcHBlZHRvb3Nob3J0OwkvKiBEV09SRCAxNiAqLwotCXUzMiBwMGlwZHJvcHBlZGhkcnRvb3NtYWxsOwkvKiBEV09SRCAxNyAqLwotCXUzMiBwMHRjcGRyb3BwZWRsZW47CS8qIERXT1JEIDE4ICovCi0JdTMyIHAwZHJvcHBlZHJ1bnQ7CS8qIERXT1JEIDE5ICovCi0JdTMyIHAwcmVjdmQ2NDsJCS8qIERXT1JEIDIwICovCi0JdTMyIHAwcmVjdmQ2NV8xMjc7CS8qIERXT1JEIDIxICovCi0JdTMyIHAwcmVjdmQxMjhfMjU2OwkvKiBEV09SRCAyMiAqLwotCXUzMiBwMHJlY3ZkMjU2XzUxMTsJLyogRFdPUkQgMjMgKi8KLQl1MzIgcDByZWN2ZDUxMl8xMDIzOwkvKiBEV09SRCAyNCAqLwotCXUzMiBwMHJlY3ZkMTUxOF8xNTIyOwkvKiBEV09SRCAyNSAqLwotCXUzMiBwMHJlY3ZkMTUyMl8yMDQ3OwkvKiBEV09SRCAyNiAqLwotCXUzMiBwMHJlY3ZkMjA0OF80MDk1OwkvKiBEV09SRCAyNyAqLwotCXUzMiBwMHJlY3ZkNDA5Nl84MTkxOwkvKiBEV09SRCAyOCAqLwotCXUzMiBwMHJlY3ZkODE5Ml85MjE2OwkvKiBEV09SRCAyOSAqLwotCXUzMiBwMHJjdmRpcGNrc21lcnJzOwkvKiBEV09SRCAzMCAqLwotCXUzMiBwMHJlY3ZkdGNwY2tzbWVycnM7CS8qIERXT1JEIDMxICovCi0JdTMyIHAwcmVjdmR1ZHBja3NtZXJyczsJLyogRFdPUkQgMzIgKi8KLQl1MzIgcDByZWN2ZG5vbnJzc3BhY2tldHM7CS8qIERXT1JEIDMzICovCi0JdTMyIHAwcmVjdmRpcHBhY2tldHM7CS8qIERXT1JEIDM0ICovCi0JdTMyIHAwcmVjdmRjaHV0ZTFwYWNrZXRzOwkvKiBEV09SRCAzNSAqLwotCXUzMiBwMHJlY3ZkY2h1dGUycGFja2V0czsJLyogRFdPUkQgMzYgKi8KLQl1MzIgcDByZWN2ZGNodXRlM3BhY2tldHM7CS8qIERXT1JEIDM3ICovCi0JdTMyIHAwcmVjdmRpcHNlY3BhY2tldHM7CS8qIERXT1JEIDM4ICovCi0JdTMyIHAwcmVjdmRtYW5hZ2VtZW50cGFja2V0czsJLyogRFdPUkQgMzkgKi8KLQl1MzIgcDB4bWl0Ynl0ZXNsc2Q7CS8qIERXT1JEIDQwICovCi0JdTMyIHAweG1pdGJ5dGVzbXNkOwkvKiBEV09SRCA0MSAqLwotCXUzMiBwMHhtaXR1bmljYXN0ZnJhbWVzOwkvKiBEV09SRCA0MiAqLwotCXUzMiBwMHhtaXRtdWx0aWNhc3RmcmFtZXM7CS8qIERXT1JEIDQzICovCi0JdTMyIHAweG1pdGJyb2FkY2FzdGZyYW1lczsJLyogRFdPUkQgNDQgKi8KLQl1MzIgcDB4bWl0cGF1c2VmcmFtZXM7CS8qIERXT1JEIDQ1ICovCi0JdTMyIHAweG1pdGNvbnRyb2xmcmFtZXM7CS8qIERXT1JEIDQ2ICovCi0JdTMyIHAweG1pdDY0OwkJLyogRFdPUkQgNDcgKi8KLQl1MzIgcDB4bWl0NjVfMTI3OwkvKiBEV09SRCA0OCAqLwotCXUzMiBwMHhtaXQxMjhfMjU2OwkvKiBEV09SRCA0OSAqLwotCXUzMiBwMHhtaXQyNTZfNTExOwkvKiBEV09SRCA1MCAqLwotCXUzMiBwMHhtaXQ1MTJfMTAyMzsJLyogRFdPUkQgNTEgKi8KLQl1MzIgcDB4bWl0MTUxOF8xNTIyOwkvKiBEV09SRCA1MiAqLwotCXUzMiBwMHhtaXQxNTIyXzIwNDc7CS8qIERXT1JEIDUzICovCi0JdTMyIHAweG1pdDIwNDhfNDA5NTsJLyogRFdPUkQgNTQgKi8KLQl1MzIgcDB4bWl0NDA5Nl84MTkxOwkvKiBEV09SRCA1NSAqLwotCXUzMiBwMHhtaXQ4MTkyXzkyMTY7CS8qIERXT1JEIDU2ICovCi0JdTMyIHAwcnhmaWZvb3ZlcmZsb3dkcm9wcGVkOwkvKiBEV09SRCA1NyAqLwotCXUzMiBwMGlwc2VjbG9va3VwZmFpbGVkZHJvcHBlZDsJLyogRFdPUkQgNTggKi8KLQl1MzIgcDFyZWN2ZHRvdGFsYnl0ZXNMU0Q7CS8qIERXT1JEIDU5ICovCi0JdTMyIHAxcmVjdmR0b3RhbGJ5dGVzTVNEOwkvKiBEV09SRCA2MCAqLwotCXUzMiBwMXJlY3ZkdG90YWxmcmFtZXM7CS8qIERXT1JEIDYxICovCi0JdTMyIHAxcmVjdmR1bmljYXN0ZnJhbWVzOwkvKiBEV09SRCA2MiAqLwotCXUzMiBwMXJlY3ZkbXVsdGljYXN0ZnJhbWVzOwkvKiBEV09SRCA2MyAqLwotCXUzMiBwMXJlY3ZkYnJvYWRjYXN0ZnJhbWVzOwkvKiBEV09SRCA2NCAqLwotCXUzMiBwMWNyY2Vycm9yczsJLyogRFdPUkQgNjUgKi8KLQl1MzIgcDFhbGlnbm1lbnRzeW1lcnJzOwkvKiBEV09SRCA2NiAqLwotCXUzMiBwMXBhdXNlZnJhbWVzcmVjdmQ7CS8qIERXT1JEIDY3ICovCi0JdTMyIHAxY29udHJvbGZyYW1lc3JlY3ZkOwkvKiBEV09SRCA2OCAqLwotCXUzMiBwMWlucmFuZ2VsZW5lcnJvcnM7CS8qIERXT1JEIDY5ICovCi0JdTMyIHAxb3V0cmFuZ2VlcnJvcnM7CS8qIERXT1JEIDcwICovCi0JdTMyIHAxZnJhbWV0b29sb25nZXJyb3JzOwkvKiBEV09SRCA3MSAqLwotCXUzMiBwMWRyb3BwZWRhZGRyZXNzbWF0Y2g7CS8qIERXT1JEIDcyICovCi0JdTMyIHAxZHJvcHBlZHZsYW5taXNtYXRjaDsJLyogRFdPUkQgNzMgKi8KLQl1MzIgcDFpcGRyb3BwZWR0b29zbWFsbDsJLyogRFdPUkQgNzQgKi8KLQl1MzIgcDFpcGRyb3BwZWR0b29zaG9ydDsJLyogRFdPUkQgNzUgKi8KLQl1MzIgcDFpcGRyb3BwZWRoZHJ0b29zbWFsbDsJLyogRFdPUkQgNzYgKi8KLQl1MzIgcDF0Y3Bkcm9wcGVkbGVuOwkvKiBEV09SRCA3NyAqLwotCXUzMiBwMWRyb3BwZWRydW50OwkvKiBEV09SRCA3OCAqLwotCXUzMiBwMXJlY3ZkNjQ7CQkvKiBEV09SRCA3OSAqLwotCXUzMiBwMXJlY3ZkNjVfMTI3OwkvKiBEV09SRCA4MCAqLwotCXUzMiBwMXJlY3ZkMTI4XzI1NjsJLyogRFdPUkQgODEgKi8KLQl1MzIgcDFyZWN2ZDI1Nl81MTE7CS8qIERXT1JEIDgyICovCi0JdTMyIHAxcmVjdmQ1MTJfMTAyMzsJLyogRFdPUkQgODMgKi8KLQl1MzIgcDFyZWN2ZDE1MThfMTUyMjsJLyogRFdPUkQgODQgKi8KLQl1MzIgcDFyZWN2ZDE1MjJfMjA0NzsJLyogRFdPUkQgODUgKi8KLQl1MzIgcDFyZWN2ZDIwNDhfNDA5NTsJLyogRFdPUkQgODYgKi8KLQl1MzIgcDFyZWN2ZDQwOTZfODE5MTsJLyogRFdPUkQgODcgKi8KLQl1MzIgcDFyZWN2ZDgxOTJfOTIxNjsJLyogRFdPUkQgODggKi8KLQl1MzIgcDFyY3ZkaXBja3NtZXJyczsJLyogRFdPUkQgODkgKi8KLQl1MzIgcDFyZWN2ZHRjcGNrc21lcnJzOwkvKiBEV09SRCA5MCAqLwotCXUzMiBwMXJlY3ZkdWRwY2tzbWVycnM7CS8qIERXT1JEIDkxICovCi0JdTMyIHAxcmVjdmRub25yc3NwYWNrZXRzOwkvKiBEV09SRCA5MiAqLwotCXUzMiBwMXJlY3ZkaXBwYWNrZXRzOwkvKiBEV09SRCA5MyAqLwotCXUzMiBwMXJlY3ZkY2h1dGUxcGFja2V0czsJLyogRFdPUkQgOTQgKi8KLQl1MzIgcDFyZWN2ZGNodXRlMnBhY2tldHM7CS8qIERXT1JEIDk1ICovCi0JdTMyIHAxcmVjdmRjaHV0ZTNwYWNrZXRzOwkvKiBEV09SRCA5NiAqLwotCXUzMiBwMXJlY3ZkaXBzZWNwYWNrZXRzOwkvKiBEV09SRCA5NyAqLwotCXUzMiBwMXJlY3ZkbWFuYWdlbWVudHBhY2tldHM7CS8qIERXT1JEIDk4ICovCi0JdTMyIHAxeG1pdGJ5dGVzbHNkOwkvKiBEV09SRCA5OSAqLwotCXUzMiBwMXhtaXRieXRlc21zZDsJLyogRFdPUkQgMTAwICovCi0JdTMyIHAxeG1pdHVuaWNhc3RmcmFtZXM7CS8qIERXT1JEIDEwMSAqLwotCXUzMiBwMXhtaXRtdWx0aWNhc3RmcmFtZXM7CS8qIERXT1JEIDEwMiAqLwotCXUzMiBwMXhtaXRicm9hZGNhc3RmcmFtZXM7CS8qIERXT1JEIDEwMyAqLwotCXUzMiBwMXhtaXRwYXVzZWZyYW1lczsJLyogRFdPUkQgMTA0ICovCi0JdTMyIHAxeG1pdGNvbnRyb2xmcmFtZXM7CS8qIERXT1JEIDEwNSAqLwotCXUzMiBwMXhtaXQ2NDsJCS8qIERXT1JEIDEwNiAqLwotCXUzMiBwMXhtaXQ2NV8xMjc7CS8qIERXT1JEIDEwNyAqLwotCXUzMiBwMXhtaXQxMjhfMjU2OwkvKiBEV09SRCAxMDggKi8KLQl1MzIgcDF4bWl0MjU2XzUxMTsJLyogRFdPUkQgMTA5ICovCi0JdTMyIHAxeG1pdDUxMl8xMDIzOwkvKiBEV09SRCAxMTAgKi8KLQl1MzIgcDF4bWl0MTUxOF8xNTIyOwkvKiBEV09SRCAxMTEgKi8KLQl1MzIgcDF4bWl0MTUyMl8yMDQ3OwkvKiBEV09SRCAxMTIgKi8KLQl1MzIgcDF4bWl0MjA0OF80MDk1OwkvKiBEV09SRCAxMTMgKi8KLQl1MzIgcDF4bWl0NDA5Nl84MTkxOwkvKiBEV09SRCAxMTQgKi8KLQl1MzIgcDF4bWl0ODE5Ml85MjE2OwkvKiBEV09SRCAxMTUgKi8KLQl1MzIgcDFyeGZpZm9vdmVyZmxvd2Ryb3BwZWQ7CS8qIERXT1JEIDExNiAqLwotCXUzMiBwMWlwc2VjbG9va3VwZmFpbGVkZHJvcHBlZDsJLyogRFdPUkQgMTE3ICovCi0JdTMyIHB4ZHJvcHBlZG5vcGJ1ZjsJLyogRFdPUkQgMTE4ICovCi0JdTMyIHB4ZHJvcHBlZG5vdHhwYjsJLyogRFdPUkQgMTE5ICovCi0JdTMyIHB4ZHJvcHBlZG5vaXBzZWNidWY7CS8qIERXT1JEIDEyMCAqLwotCXUzMiBweGRyb3BwZWRub2VyeGRlc2NyOwkvKiBEV09SRCAxMjEgKi8KLQl1MzIgcHhkcm9wcGVkbm90cHJlZGVzY3I7CS8qIERXT1JEIDEyMiAqLwotCXUzMiBweHJlY3ZkbWFuYWdlbWVudHBvcnRwYWNrZXRzOwkvKiBEV09SRCAxMjMgKi8KLQl1MzIgcHhyZWN2ZG1hbmFnZW1lbnRwb3J0Ynl0ZXM7CS8qIERXT1JEIDEyNCAqLwotCXUzMiBweHJlY3ZkbWFuYWdlbWVudHBvcnRwYXVzZWZyYW1lczsJLyogRFdPUkQgMTI1ICovCi0JdTMyIHB4cmVjdmRtYW5hZ2VtZW50cG9ydGVycm9yczsJLyogRFdPUkQgMTI2ICovCi0JdTMyIHB4eG1pdG1hbmFnZW1lbnRwb3J0cGFja2V0czsJLyogRFdPUkQgMTI3ICovCi0JdTMyIHB4eG1pdG1hbmFnZW1lbnRwb3J0Ynl0ZXM7CS8qIERXT1JEIDEyOCAqLwotCXUzMiBweHhtaXRtYW5hZ2VtZW50cG9ydHBhdXNlOwkvKiBEV09SRCAxMjkgKi8KLQl1MzIgcHh4bWl0bWFuYWdlbWVudHBvcnRyeGZpZm9vdmVyZmxvdzsJLyogRFdPUkQgMTMwICovCi0JdTMyIHB4cmVjdmRpcHNlY2lwY2tzbWVycnM7CS8qIERXT1JEIDEzMSAqLwotCXUzMiBweHJlY3ZkdGNwc2VjaXBja3NtZXJyczsJLyogRFdPUkQgMTMyICovCi0JdTMyIHB4cmVjdmR1ZHBzZWNpcGNrc21lcnJzOwkvKiBEV09SRCAxMzMgKi8KLQl1MzIgcHhpcHNlY3J1bnQ7CS8qIERXT1JEIDEzNCAqLwotCXUzMiBweGlwc2VjYWRkcmVzc21pc21hdGNoZHJvcHBlZDsJLyogRFdPUkQgMTM1ICovCi0JdTMyIHB4aXBzZWNyeGZpZm9vdmVyZmxvd2Ryb3BwZWQ7CS8qIERXT1JEIDEzNiAqLwotCXUzMiBweGlwc2VjZnJhbWVzdG9vbG9uZzsJLyogRFdPUkQgMTM3ICovCi0JdTMyIHB4aXBzZWN0b3RhbGlwZnJhbWVzOwkvKiBEV09SRCAxMzggKi8KLQl1MzIgcHhpcHNlY2lwdG9vc21hbGw7CS8qIERXT1JEIDEzOSAqLwotCXUzMiBweGlwc2VjaXB0b29zaG9ydDsJLyogRFdPUkQgMTQwICovCi0JdTMyIHB4aXBzZWNpcGhkcnRvb3NtYWxsOwkvKiBEV09SRCAxNDEgKi8KLQl1MzIgcHhpcHNlY3RjcGhkcmJhZDsJLyogRFdPUkQgMTQyICovCi0JdTMyIHB4cmVjdmRpcHNlY2NodXRlMTsJLyogRFdPUkQgMTQzICovCi0JdTMyIHB4cmVjdmRpcHNlY2NodXRlMjsJLyogRFdPUkQgMTQ0ICovCi0JdTMyIHB4cmVjdmRpcHNlY2NodXRlMzsJLyogRFdPUkQgMTQ1ICovCi0JdTMyIHB4ZHJvcHBlZDdmcmFnczsJLyogRFdPUkQgMTQ2ICovCi0JdTMyIHB4ZHJvcHBlZGZyYWdzOwkvKiBEV09SRCAxNDcgKi8KLQl1MzIgcHhkcm9wcGVkaW52YWxpZGZyYWdyaW5nOwkvKiBEV09SRCAxNDggKi8KLQl1MzIgcHhudW1mb3J3YXJkZWRwYWNrZXRzOwkvKiBEV09SRCAxNDkgKi8KLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIE1JQl9FVEhfU1RBVElTVElDU19QQVJBTVMgewotCXN0cnVjdCBNSUJfRVRIX1NUQVRJU1RJQ1NfUEFSQU1TX0lOIHJlcXVlc3Q7Ci0Jc3RydWN0IEJFX1JYRl9TVEFUUyByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiAgUXVlcnkgZXRoZXJuZXQgc3RhdGlzdGljcy4gQWxsIGRvbWFpbnMgbWF5IGlzc3VlIHRoaXMgY29tbWFuZC4gVGhlCi0gKiAgaG9zdCBkb21haW4gZHJpdmVycyAgbWF5IG9wdGlvbmFsbHkgcmVzZXQgaW50ZXJuYWwgc3RhdGlzdGljIGNvdW50ZXJzCi0gKiAgd2l0aCBhIHF1ZXJ5LgotICovCi1zdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIE1JQl9FVEhfU1RBVElTVElDU19QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc1X1JFUVVFU1QgewotCXU4IHBvcnQwX3Byb21pc2N1b3VzOwotCXU4IHBvcnQxX3Byb21pc2N1b3VzOwotCXUxNiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xNzZfUkVTUE9OU0UgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0VUSF9BTk9OXzE3NF9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xNzVfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xNzZfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKiBFbmFibGVzL0Rpc2FibGVzIHByb21pc2N1b3VzIGV0aGVybmV0IHJlY2VpdmUgbW9kZS4gICovCi1zdHJ1Y3QgRldDTURfRVRIX1BST01JU0NVT1VTIHsKLQl1bmlvbiBGV0NNRF9IRUFERVIgaGVhZGVyOwotCXVuaW9uIEZXQ01EX0VUSF9BTk9OXzE3NF9QQVJBTVMgcGFyYW1zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX0VUSF9BTk9OXzE3OF9SRVFVRVNUIHsKLQl1MzIgbmV3X2ZyYWdzaXplX2xvZzI7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc5X1JFU1BPTlNFIHsKLQl1MzIgYWN0dWFsX2ZyYWdzaXplX2xvZzI7Ci19IF9fcGFja2VkOwotCi11bmlvbiBGV0NNRF9FVEhfQU5PTl8xNzdfUEFSQU1TIHsKLQlzdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc4X1JFUVVFU1QgcmVxdWVzdDsKLQlzdHJ1Y3QgRldDTURfRVRIX0FOT05fMTc5X1JFU1BPTlNFIHJlc3BvbnNlOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBTZXRzIHRoZSBFdGhlcm5ldCBSWCBmcmFnbWVudCBzaXplLiBPbmx5IGhvc3QgKGRvbWFpbiAwKSBuZXR3b3JraW5nCi0gKiAgZHJpdmVycyBtYXkgaXNzdWUgIHRoaXMgY29tbWFuZC4gIFRoaXMgY2FsbCB3aWxsIGZhaWwgZm9yIG5vbi1ob3N0Ci0gKiAgcHJvdGVjdGlvbiBkb21haW5zLiBJbiB0aGlzIHNpdHVhdGlvbiB0aGUgIE1DQyBDUSBzdGF0dXMgd2lsbCBpbmRpY2F0ZQotICogIGEgZmFpbHVyZSBkdWUgdG8gaW5zdWZmaWNpZW50IHByaXZpbGVkZ2VzLiBUaGUgcmVzcG9uc2UgIHNob3VsZCBiZQotICogIGlnbm9yZWQsIGFuZCB0aGUgZHJpdmVyIHNob3VsZCB1c2UgdGhlIEZXQ01EX0VUSF9HRVRfRlJBR19TSVpFIHRvCi0gKiAgcXVlcnkgdGhlICBleGlzdGluZyBldGhlcm5ldCByZWNlaXZlIGZyYWdtZW50IHNpemUuIEl0IG11c3QgdXNlIHRoaXMKLSAqICBmcmFnbWVudCBzaXplIGZvciBhbGwgIGZyYWdtZW50cyBpbiB0aGUgZXRoZXJuZXQgcmVjZWl2ZSByaW5nLiAgSWYKLSAqICB0aGUgY29tbWFuZCBzdWNjZWVkcywgdGhlIGRyaXZlciBtdXN0IHVzZSB0aGUgIGZyYWcgc2l6ZSBpbmRpY2F0ZWQKLSAqICBpbiB0aGUgY29tbWFuZCByZXNwb25zZSBzaW5jZSB0aGUgcmVxdWVzdGVkIGZyYWcgc2l6ZSBtYXkgbm90IGJlICBhcHBsaWVkCi0gKiAgdW50aWwgdGhlIG5leHQgcmVib290LiBXaGVuIHRoZSByZXF1ZXN0ZWQgZnJhZ3NpemUgbWF0Y2hlcyB0aGUgcmVzcG9uc2UKLSAqICAgZnJhZ3NpemUsIHRoaXMgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IHdhcyBhcHBsaWVkIGltbWVkaWF0ZWx5LgotICovCi1zdHJ1Y3QgRldDTURfRVRIX1NFVF9SWF9GUkFHX1NJWkUgewotCXVuaW9uIEZXQ01EX0hFQURFUiBoZWFkZXI7Ci0JdW5pb24gRldDTURfRVRIX0FOT05fMTc3X1BBUkFNUyBwYXJhbXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgRldDTURfRVRIX0FOT05fMTgxX1JFUVVFU1QgewotCXUzMiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xODJfUkVTUE9OU0UgewotCXUzMiBhY3R1YWxfZnJhZ3NpemVfbG9nMjsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIEZXQ01EX0VUSF9BTk9OXzE4MF9QQVJBTVMgewotCXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xODFfUkVRVUVTVCByZXF1ZXN0OwotCXN0cnVjdCBGV0NNRF9FVEhfQU5PTl8xODJfUkVTUE9OU0UgcmVzcG9uc2U7Ci19IF9fcGFja2VkOwotCi0vKgotICogIFF1ZXJpZXMgdGhlIEV0aGVybmV0IFJYIGZyYWdtZW50IHNpemUuIEFsbCBkb21haW5zIG1heSBpc3N1ZSB0aGlzCi0gKiAgY29tbWFuZC4gIFRoZSBkcml2ZXIgIHNob3VsZCBjYWxsIHRoaXMgY29tbWFuZCB0byBkZXRlcm1pbmUgdGhlIG1pbmltdW0KLSAqICByZXF1aXJlZCBmcmFnbWVudCBzaXplIGZvciB0aGUgZXRoZXJuZXQgIFJYIHJpbmcgYnVmZmVycy4gRHJpdmVycwotICogIG1heSBjaG9vc2UgdG8gdXNlIGEgbGFyZ2VyIHNpemUgZm9yIGVhY2ggZnJhZ21lbnQgYnVmZmVyLCBidXQgIEJsYWRlRW5naW5lCi0gKiAgd2lsbCB1c2UgdXAgdG8gdGhlIGNvbmZpZ3VyZWQgbWluaW11bSByZXF1aXJlZCBmcmFnc2l6ZSBpbiBlYWNoIGV0aGVybmV0Ci0gKiAgIHJlY2VpdmUgZnJhZ21lbnQgYnVmZmVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGV0aGVybmV0IHJlY2VpdmUgZnJhZ21lbnQKLSAqICBzaXplIGlzICBjb25maWd1cmVkIHRvIDRrQiwgYW5kIGEgZHJpdmVyIHVzZXMgOGtCIGZyYWdtZW50cywgYSA2a0IKLSAqICBldGhlcm5ldCBwYWNrZXQgcmVjZWl2ZWQgYnkgIEJsYWRlRW5naW5lIHdpbGwgYmUgc3BsaXQgYWNjcm9zcyB0d28KLSAqICBvZiB0aGUgZHJpdmVyJ3MgcmVjZWl2ZSBmcmFtZ2VudHMgKDRrQiBpbiBvbmUgIGZyYWdtZW50IGJ1ZmZlciwgYW5kCi0gKiAgMmtCIGluIHRoZSBzdWJzZXF1ZW50IGZyYWdtZW50IGJ1ZmZlcikuCi0gKi8KLXN0cnVjdCBGV0NNRF9FVEhfR0VUX1JYX0ZSQUdfU0laRSB7Ci0JdW5pb24gRldDTURfSEVBREVSIGhlYWRlcjsKLQl1bmlvbiBGV0NNRF9FVEhfQU5PTl8xODBfUEFSQU1TIHBhcmFtczsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZiAvKiBfX2Z3Y21kX2V0aF9ibWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX2hkcl9ibWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfaGRyX2JtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhiNDUzMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfaGRyX2JtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19md2NtZF9oZHJfYm1hcF9oX18KLSNkZWZpbmUgX19md2NtZF9oZHJfYm1hcF9oX18KLQotc3RydWN0IEZXQ01EX1JFUVVFU1RfSEVBREVSIHsKLQl1OCBvcGNvZGU7Ci0JdTggc3Vic3lzdGVtOwotCXU4IHBvcnRfbnVtYmVyOwotCXU4IGRvbWFpbjsKLQl1MzIgdGltZW91dDsKLQl1MzIgcmVxdWVzdF9sZW5ndGg7Ci0JdTMyIHJzdmQwOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IEZXQ01EX1JFU1BPTlNFX0hFQURFUiB7Ci0JdTggb3Bjb2RlOwotCXU4IHN1YnN5c3RlbTsKLQl1OCByc3ZkMDsKLQl1OCBkb21haW47Ci0JdTggc3RhdHVzOwotCXU4IGFkZGl0aW9uYWxfc3RhdHVzOwotCXUxNiByc3ZkMTsKLQl1MzIgcmVzcG9uc2VfbGVuZ3RoOwotCXUzMiBhY3R1YWxfcmVzcG9uc2VfbGVuZ3RoOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqICBUaGUgZmlybXdhcmUvZHJpdmVyIG92ZXJ3cml0ZXMgdGhlIGlucHV0IEZXQ01EX1JFUVVFU1RfSEVBREVSIHdpdGgKLSAqICB0aGUgb3V0cHV0ICBGV0NNRF9SRVNQT05TRV9IRUFERVIuCi0gKi8KLXVuaW9uIEZXQ01EX0hFQURFUiB7Ci0Jc3RydWN0IEZXQ01EX1JFUVVFU1RfSEVBREVSIHJlcXVlc3Q7Ci0Jc3RydWN0IEZXQ01EX1JFU1BPTlNFX0hFQURFUiByZXNwb25zZTsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZiAvKiBfX2Z3Y21kX2hkcl9ibWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX21jYy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX21jYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWVjYTg3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9tY2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19md2NtZF9tY2NfYW1hcF9oX18KLSNkZWZpbmUgX19md2NtZF9tY2NfYW1hcF9oX18KLSNpbmNsdWRlICJmd2NtZF9vcGNvZGVzLmgiCi0vKgotICogV2hlcmUgYXBwbGljYWJsZSwgYSBXUkIsIG1heSBjb250YWluIGEgbGlzdCBvZiBTY2F0dGVyLWdhdGhlciBlbGVtZW50cy4KLSAqIEVhY2ggZWxlbWVudCBzdXBwb3J0cyBhIDY0IGJpdCBhZGRyZXNzIGFuZCBhIDMyYml0IGxlbmd0aCBmaWVsZC4KLSAqLwotc3RydWN0IEJFX01DQ19TR0VfQU1BUCB7Ci0JdTggcGFfbG9bMzJdOwkvKiBEV09SRCAwICovCi0JdTggcGFfaGlbMzJdOwkvKiBEV09SRCAxICovCi0JdTggbGVuZ3RoWzMyXTsJLyogRFdPUkQgMiAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNQ0NfU0dFX0FNQVAgewotCXUzMiBkd1szXTsKLX07Ci0vKgotICogVGhlIGRlc2lnbiBvZiBhbiBNQ0NfU0dFIGFsbG93cyB1cCB0byAxOSBlbGVtZW50cyB0byBiZSBlbWJlZGRlZAotICogaW4gYSBXUkIsIHN1cHBvcnRpbmcgNjRLQiBkYXRhIHRyYW5zZmVycyAoYXNzdW1pbmcgYSA0S0IgcGFnZSBzaXplKS4KLSAqLwotc3RydWN0IEJFX01DQ19XUkJfUEFZTE9BRF9BTUFQIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBCRV9NQ0NfU0dFX0FNQVAgc2dsWzE5XTsKLQkJdTggZW1iZWRkZWRbNTldWzMyXTsJLyogRFdPUkQgMCAqLwotCX07Ci19IF9fcGFja2VkOwotc3RydWN0IE1DQ19XUkJfUEFZTE9BRF9BTUFQIHsKLQl1MzIgZHdbNTldOwotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgTUNDIENvbW1hbmQgV1JCIGZvciBjb21tYW5kcwotICogc2VudCB0byB0aGUgTWFuYWdlbWVudCBQcm9jZXNzaW5nIFVuaXQgKE1QVSkuIFNlZSBzZWN0aW9uCi0gKiBmb3IgdXNhZ2UgaW4gZW1iZWRkZWQgYW5kIG5vbi1lbWJlZGRlZCBtb2Rlcy4KLSAqLwotc3RydWN0IEJFX01DQ19XUkJfQU1BUCB7Ci0JdTggZW1iZWRkZWQ7CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsyXTsJLyogRFdPUkQgMCAqLwotCXU4IHNnZV9jb3VudFs1XTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHNwZWNpYWxbOF07CS8qIERXT1JEIDAgKi8KLQl1OCBwYXlsb2FkX2xlbmd0aFszMl07CS8qIERXT1JEIDEgKi8KLQl1OCB0YWdbMl1bMzJdOwkvKiBEV09SRCAyICovCi0JdTggcnN2ZDJbMzJdOwkvKiBEV09SRCA0ICovCi0Jc3RydWN0IEJFX01DQ19XUkJfUEFZTE9BRF9BTUFQIHBheWxvYWQ7Ci19IF9fcGFja2VkOwotc3RydWN0IE1DQ19XUkJfQU1BUCB7Ci0JdTMyIGR3WzY0XTsKLX07Ci0KLS8qICBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE1DQyBDb21wbGV0aW9uIHF1ZXVlIGVudHJ5ICAqLwotc3RydWN0IEJFX01DQ19DUV9FTlRSWV9BTUFQIHsKLQl1OCBjb21wbGV0aW9uX3N0YXR1c1sxNl07CS8qIERXT1JEIDAgKi8KLQl1OCBleHRlbmRlZF9zdGF0dXNbMTZdOwkvKiBEV09SRCAwICovCi0JdTggbWNjX3RhZ1syXVszMl07CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkMFsyN107CS8qIERXT1JEIDMgKi8KLQl1OCBjb25zdW1lZDsJLyogRFdPUkQgMyAqLwotCXU4IGNvbXBsZXRlZDsJLyogRFdPUkQgMyAqLwotCXU4IGhwaV9idWZmZXJfY29tcGxldGlvbjsJLyogRFdPUkQgMyAqLwotCXU4IGFzeW5jX2V2ZW50OwkvKiBEV09SRCAzICovCi0JdTggdmFsaWQ7CQkvKiBEV09SRCAzICovCi19IF9fcGFja2VkOwotc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi0vKiBNYWlsYm94IHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgTVBVIGR1cmluZyBib290c3RyYXAgKi8KLXN0cnVjdCBCRV9NQ0NfTUFJTEJPWF9BTUFQIHsKLQlzdHJ1Y3QgQkVfTUNDX1dSQl9BTUFQIHdyYjsKLQlzdHJ1Y3QgQkVfTUNDX0NRX0VOVFJZX0FNQVAgY3E7Ci19IF9fcGFja2VkOwotc3RydWN0IE1DQ19NQUlMQk9YX0FNQVAgewotCXUzMiBkd1s2OF07Ci19OwotCi0jZW5kaWYgLyogX19md2NtZF9tY2NfYW1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9vcGNvZGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfb3Bjb2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Q1NjkzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9md2NtZF9vcGNvZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2Z3Y21kX29wY29kZXNfYW1hcF9oX18KLSNkZWZpbmUgX19md2NtZF9vcGNvZGVzX2FtYXBfaF9fCi0KLS8qCi0gKiAtLS0gRldDTURfU1VCU1lTVEVNUyAtLS0KLSAqIFRoZSBjb21tYW5kcyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc3Vic3lzdGVtcy4gVGhlIHN1YnN5c3RlbQotICogY29kZSBhbG9uZyB3aXRoIHRoZSBvcGNvZGUgdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGZ3Y21kLgotICovCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9SU1ZEICAoMCkJLyogVGhpcyBzdWJzeXN0ZW0gaXMgcmVzZXJ2ZWQuIEl0IGlzICovCi0JCQkJCQkgIC8qIG5ldmVyIHVzZWQuICovCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9DT01NT04gKDEpCS8qIENNRHMgaW4gdGhpcyBncm91cCBhcmUgY29tbW9uIHRvCi0JCQkJCSogYWxsIHN1YnN5c3RlbXMuIFNlZQotCQkJCQkqIENPTU1PTl9TVUJTWVNURU1fT1BDT0RFUyBmb3Igb3Bjb2RlcwotCQkJCQkqIGFuZCBDb21tb24gSG9zdCBDb25maWd1cmF0aW9uIENNRHMKLQkJCQkJKiBmb3IgdGhlIEZXQ01EIGRlc2NyaXB0aW9ucy4KLQkJCQkJKi8KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX0NPTU1PTl9JU0NTSSAgICAoMikgLyogQ01EcyBpbiB0aGlzIGdyb3VwIGFyZSAqLwotCQkJCQkvKgotCQkJCQkqIGNvbW1vbiB0byBJbml0aWF0b3IgYW5kIFRhcmdldC4gU2VlCi0JCQkJCSogQ09NTU9OX0lTQ1NJX1NVQlNZU1RFTV9PUENPREVTIGFuZAotCQkJCQkqIENvbW1vbiBpU0NTSSBJbml0aWF0b3IgYW5kIFRhcmdldAotCQkJCQkqIENNRHMgZm9yIHRoZSBjb21tYW5kIGRlc2NyaXB0aW9ucy4KLQkJCQkJKi8KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX0VUSCAgICAgICAgICAgICAoMykJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZCB0bwotCQkJCQkJZXhlY3V0ZSAgRXRoZXJuZXQgY29tbWFuZHMuICAqLwotCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9UUE0gICAgICAgICAgICAgKDQpCS8qIFRoaXMgc3Vic3lzdGVtIGlzIHVzZWQKLQkJCQkJCSB0byBleGVjdXRlIFRQTSAgY29tbWFuZHMuICAqLwotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fUFhFX1VOREkgICAgICAgICg1KQkvKiBUaGlzIHN1YnN5c3RlbSBpcyB1c2VkCi0JCQkJCQkqIHRvIGV4ZWN1dGUgUFhFCi0JCQkJCQkqIGFuZCBVTkRJIHNwZWNpZmljIGNvbW1hbmRzLgotCQkJCQkJKi8KLQotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fSVNDU0lfSU5JICAgICAgICg2KQkvKiBUaGlzIHN1YnN5c3RlbSBpcyB1c2VkIHRvCi0JCQkJCQlleGVjdXRlIElTQ1NJIEluaXRpYXRvcgotCQkJCQkJc3BlY2lmaWMgY29tbWFuZHMuCi0JCQkJCQkqLwotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fSVNDU0lfVEdUICAgICAgICg3KQkvKiBUaGlzIHN1YnN5c3RlbSBpcyB1c2VkCi0JCQkJCQl0byBleGVjdXRlIGlTQ1NJIFRhcmdldAotCQkJCQkJc3BlY2lmaWMgY29tbWFuZHMuYmV0d2VlbgotCQkJCQkJUFRMIGFuZCBBUk0gZmlybXdhcmUuCi0JCQkJCQkqLwotI2RlZmluZSBGV0NNRF9TVUJTWVNURU1fTUlMSV9QVEwgICAgICAgICg4KQkvKiBUaGlzIHN1YnN5c3RlbSBpcyB1c2VkIHRvCi0JCQkJCQlleGVjdXRlIGlTQ1NJIFRhcmdldCBzcGVjaWZpYwotCQkJCQkJY29tbWFuZHMuYmV0d2VlbiBNSUxJCi0JCQkJCQlhbmQgUFRMLiAgKi8KLSNkZWZpbmUgRldDTURfU1VCU1lTVEVNX01JTElfVE1EICAgICAgICAoOSkJLyogVGhpcyBzdWJzeXN0ZW0gaXMgdXNlZCB0bwotCQkJCQkJZXhlY3V0ZSBpU0NTSSBUYXJnZXQgc3BlY2lmaWMKLQkJCQkJCWNvbW1hbmRzIGJldHdlZW4gTUlMSQotCQkJCQkJYW5kIFRNRC4gICovCi0jZGVmaW5lIEZXQ01EX1NVQlNZU1RFTV9QUk9YWSAgICAgICAgICAgKDExKQkvKiBUaGlzIHN1YnN5c3RlbSBpcyB1c2VkCi0JCQkJCQl0byBleGVjdXRlIHByb3hpZWQgY29tbWFuZHMKLQkJCQkJCXdpdGhpbiB0aGUgaG9zdCBhdCB0aGUKLQkJCQkJCWV4cGxpY2l0IHJlcXVlc3Qgb2YgYQotCQkJCQkJbm9uIHByaXZpbGVkZ2VkIGRvbWFpbi4KLQkJCQkJCVRoaXMgJ3N1YnN5c3RlbScgaXMgZW50aXJlbHkKLQkJCQkJCXZpcnR1YWwgZnJvbSB0aGUgY29udHJvbGxlcgotCQkJCQkJYW5kIGZpcm13YXJlIHBlcnNwZWN0aXZlIGFzCi0JCQkJCQlpdCBpcyBpbXBsZW1lbnRlZCBpbiBob3N0Ci0JCQkJCQlkcml2ZXJzLgotCQkJCQkJKi8KLQotLyoKLSAqIC0tLSBDT01NT05fU1VCU1lTVEVNX09QQ09ERVMgLS0tCi0gKiBUaGVzZSBvcGNvZGVzIGFyZSBjb21tb24gdG8gYm90aCBuZXR3b3JraW5nIGFuZCBzdG9yYWdlIFBDSQotICogZnVuY3Rpb25zLiBUaGV5IGFyZSB1c2VkIHRvIHJlc2VydmUgcmVzb3VyY2VzIGFuZCBjb25maWd1cmUKLSAqIEJsYWRlRW5naW5lLiBUaGVzZSBvcGNvZGVzIGFsbCB1c2UgdGhlIEZXQ01EX1NVQlNZU1RFTV9DT01NT04KLSAqIHN1YnN5c3RlbSBjb2RlLgotICovCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19NQUNfUVVFUlkgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fTlRXS19NQUNfUVVFUlkgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fTlRXS19NQUNfU0VUICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VUICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9SRUFEX0ZMQVNIUk9NICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9XUklURV9GTEFTSFJPTSAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9RVUVSWV9NQVhfRldDTURfQlVGRkVSX1NJWkUgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fQUREX1BBR0VfVEFCTEVTICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1JFTU9WRV9QQUdFX1RBQkxFUyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9SSU5HX0RFU1RST1kgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9DUV9DUkVBVEUgICAgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9FUV9DUkVBVEUgICAgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9FVEhfUlhfQ1JFQVRFICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9FVEhfVFhfQ1JFQVRFICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9JU0NTSV9ERUZRX0NSRUFURSAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9JU0NTSV9XUkJRX0NSRUFURSAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9NQ0NfQ1JFQVRFICAgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9KRUxMX0NPTkZJRyAgICAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9GT1JDRV9GQUlMT1ZFUiAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9BRERfVEVNUExBVEVfSEVBREVSX0JVRkZFUlMgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fUkVNT1ZFX1RFTVBMQVRFX0hFQURFUl9CVUZGRVJTICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1BPU1RfWkVST19CVUZGRVIgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fR0VUX1FPUyAgICAgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fU0VUX1FPUyAgICAgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fVENQX0dFVF9TVEFUSVNUSUNTICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1NFRVBST01fUkVBRCAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1RDUF9TVEFURV9RVUVSWSAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9HRVRfQ05UTF9BVFRSSUJVVEVTICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05PUCAgICAgICAgICAgICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX05UV0tfUlhfRklMVEVSICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9GV19WRVJTSU9OICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1NFVF9GTE9XX0NPTlRST0wgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fR0VUX0ZMT1dfQ09OVFJPTCAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9TRVRfVENQX1BBUkFNRVRFUlMgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fU0VUX0ZSQU1FX1NJWkUgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fR0VUX0ZBVCAgICAgICAgKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fTU9ESUZZX0VRX0RFTEFZICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRyAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9FTkFCTEVfRElTQUJMRV9ET01BSU5TICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9ET01BSU5fQ09ORklHICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX1NFVF9WTERfQ09ORklHICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9WTERfQ09ORklHICgxKQotI2RlZmluZSBTVUJTWVNURU1fQ09NTU9OX0dFVF9QT1JUX0VRVUFMSVpBVElPTiAoMSkKLSNkZWZpbmUgU1VCU1lTVEVNX0NPTU1PTl9TRVRfUE9SVF9FUVVBTElaQVRJT04gKDEpCi0jZGVmaW5lIFNVQlNZU1RFTV9DT01NT05fUkVEX0NPTkZJRyAgICAgKDEpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19NQUNfU0VUICAgICAgKDIpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19NVUxUSUNBU1RfU0VUICgzKQotI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgICg0KQotI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlkgKDUpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fUkVBRF9GTEFTSFJPTSAgICAgKDYpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fV1JJVEVfRkxBU0hST00gICAgKDcpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fUVVFUllfTUFYX0ZXQ01EX0JVRkZFUl9TSVpFICg4KQotI2RlZmluZSBPUENPREVfQ09NTU9OX0FERF9QQUdFX1RBQkxFUyAgICg5KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1JFTU9WRV9QQUdFX1RBQkxFUyAoMTApCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fUklOR19ERVNUUk9ZICAgICAgKDExKQotI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0NSRUFURSAgICAgICAgICgxMikKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUgICAgICAgICAoMTMpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fRVRIX1JYX0NSRUFURSAgICAgKDE0KQotI2RlZmluZSBPUENPREVfQ09NTU9OX0VUSF9UWF9DUkVBVEUgICAgICgxNSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9ORVRfUkVTRVJWRUQwICAgICAoMTYpCS8qIFJlc2VydmVkICovCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTkVUX1JFU0VSVkVEMSAgICAgKDE3KQkvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBPUENPREVfQ09NTU9OX05FVF9SRVNFUlZFRDIgICAgICgxOCkJLyogUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9ERUZRX0NSRUFURSAoMTkpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9DUkVBVEUgKDIwKQotI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19DUkVBVEUgICAgICAgICgyMSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9KRUxMX0NPTkZJRyAgICAgICAoMjIpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fRk9SQ0VfRkFJTE9WRVIgICAgKDIzKQotI2RlZmluZSBPUENPREVfQ09NTU9OX0FERF9URU1QTEFURV9IRUFERVJfQlVGRkVSUyAoMjQpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fUkVNT1ZFX1RFTVBMQVRFX0hFQURFUl9CVUZGRVJTICgyNSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9QT1NUX1pFUk9fQlVGRkVSICAoMjYpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX1FPUyAgICAgICAgICAgKDI3KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9RT1MgICAgICAgICAgICgyOCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9UQ1BfR0VUX1NUQVRJU1RJQ1MgKDI5KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1NFRVBST01fUkVBRCAgICAgICgzMCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9UQ1BfU1RBVEVfUVVFUlkgICAoMzEpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0NOVExfQVRUUklCVVRFUyAoMzIpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTk9QICAgICAgICAgICAgICAgKDMzKQotI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfUlhfRklMVEVSICAgICgzNCkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRldfVkVSU0lPTiAgICAoMzUpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fU0VUX0ZMT1dfQ09OVFJPTCAgKDM2KQotI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GTE9XX0NPTlRST0wgICgzNykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRVRfVENQX1BBUkFNRVRFUlMgKDM4KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9GUkFNRV9TSVpFICAgICgzOSkKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRkFUICAgICAgICAgICAoNDApCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fTU9ESUZZX0VRX0RFTEFZICAgKDQxKQotI2RlZmluZSBPUENPREVfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRyAgICg0MikKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FTkFCTEVfRElTQUJMRV9ET01BSU5TICg0MykKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRE9NQUlOX0NPTkZJRyAoNDQpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fU0VUX1ZMRF9DT05GSUcgICAgKDQ1KQotI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9WTERfQ09ORklHICAgICg0NikKLSNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfUE9SVF9FUVVBTElaQVRJT04gKDQ3KQotI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9QT1JUX0VRVUFMSVpBVElPTiAoNDgpCi0jZGVmaW5lIE9QQ09ERV9DT01NT05fUkVEX0NPTkZJRyAgICAgICAgKDQ5KQotCi0KLQotLyoKLSAqIC0tLSBFVEhfU1VCU1lTVEVNX09QQ09ERVMgLS0tCi0gKiBUaGVzZSBvcGNvZGVzIGFyZSB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgRXRoZXJuZXQgaW50ZXJmYWNlcy4gVGhlc2UKLSAqIG9wY29kZXMgYWxsIHVzZSB0aGUgRldDTURfU1VCU1lTVEVNX0VUSCBzdWJzeXN0ZW0gY29kZS4KLSAqLwotI2RlZmluZSBPUENPREVfRVRIX1JTU19DT05GSUcgICAgICAgICAgICgxKQotI2RlZmluZSBPUENPREVfRVRIX0FDUElfQ09ORklHICAgICAgICAgICgyKQotI2RlZmluZSBTVUJTWVNURU1fRVRIX1JTU19DT05GSUcgICAgICAgICgzKQotI2RlZmluZSBTVUJTWVNURU1fRVRIX0FDUElfQ09ORklHICAgICAgICgzKQotI2RlZmluZSBPUENPREVfRVRIX1BST01JU0NVT1VTICAgICAgICAgICgzKQotI2RlZmluZSBTVUJTWVNURU1fRVRIX1BST01JU0NVT1VTICAgICAgICgzKQotI2RlZmluZSBTVUJTWVNURU1fRVRIX0dFVF9TVEFUSVNUSUNTICAgICgzKQotI2RlZmluZSBTVUJTWVNURU1fRVRIX0dFVF9SWF9GUkFHX1NJWkUgICgzKQotI2RlZmluZSBTVUJTWVNURU1fRVRIX1NFVF9SWF9GUkFHX1NJWkUgICgzKQotI2RlZmluZSBPUENPREVfRVRIX0dFVF9TVEFUSVNUSUNTICAgICAgICg0KQotI2RlZmluZSBPUENPREVfRVRIX0dFVF9SWF9GUkFHX1NJWkUgICAgICg1KQotI2RlZmluZSBPUENPREVfRVRIX1NFVF9SWF9GUkFHX1NJWkUgICAgICg2KQotCi0KLQotCi0KLS8qCi0gKiAtLS0gTUNDX1NUQVRVU19DT0RFIC0tLQotICogVGhlc2UgYXJlIHRoZSBnbG9iYWwgc3RhdHVzIGNvZGVzIHVzZWQgYnkgYWxsIHN1YnN5c3RlbXMKLSAqLwotI2RlZmluZSBNQ0NfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICgwKQkvKiBJbmRpY2F0ZXMgYSBzdWNjZXNzZnVsCi0JCQkJCQljb21wbGV0aW9uIG9mICB0aGUgY29tbWFuZCAqLwotI2RlZmluZSBNQ0NfU1RBVFVTX0lOU1VGRklDSUVOVF9QUklWSUxFR0VTICgxKQkvKiBUaGUgY2xpZW50IGRvZXMgbm90IGhhdmUKLQkJCQkJCXN1ZmZpY2llbnQgcHJpdmlsZWdlcyB0bwotCQkJCQkJZXhlY3V0ZSB0aGUgY29tbWFuZCAqLwotI2RlZmluZSBNQ0NfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSICAgICgyKQkvKiBBIHBhcmFtZXRlciBpbiB0aGUgY29tbWFuZAotCQkJCQkJd2FzIGludmFsaWQuIFRoZSBleHRlbmRlZAotCQkJCQkJc3RhdHVzIGNvbnRhaW5zIHRoZSBpbmRleAotCQkJCQkJb2YgdGhlIHBhcmFtZXRlciAqLwotI2RlZmluZSBNQ0NfU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMgKDMpCS8qIFRoZXJlIGFyZSBpbnN1ZmZpY2llbnQKLQkJCQkJCWNoaXAgcmVzb3VyY2VzIHRvIGV4ZWN1dGUKLQkJCQkJCXRoZSBjb21tYW5kICovCi0jZGVmaW5lIE1DQ19TVEFUVVNfUVVFVUVfRkxVU0hJTkcgICAgICAgKDQpCS8qIFRoZSBjb21tYW5kIGlzIGNvbXBsZXRpbmcKLQkJCQkJCWJlY2F1c2UgdGhlIHF1ZXVlIHdhcwotCQkJCQkJZ2V0dGluZyBmbHVzaGVkICovCi0jZGVmaW5lIE1DQ19TVEFUVVNfRE1BX0ZBSUxFRCAgICAgICAgICAgKDUpCS8qIFRoZSBjb21tYW5kIGlzIGNvbXBsZXRpbmcKLQkJCQkJCXdpdGggYSBETUEgZXJyb3IgKi8KLQotLyoKLSAqIC0tLSBNR01UX0VSUk9SX0NPREVTIC0tLQotICogRXJyb3IgQ29kZXMgcmV0dXJuZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgRldDTUQgcmVzcG9uc2UgaGVhZGVyCi0gKi8KLSNkZWZpbmUgTUdNVF9TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAoMCkJLyogVGhlIEZXQ01EIGNvbXBsZXRlZAotCQkJCQkJd2l0aG91dCBlcnJvcnMgKi8KLSNkZWZpbmUgTUdNVF9TVEFUVVNfRkFJTEVEICAgICAgICAgICAgICAoMSkJLyogRXJyb3Igc3RhdHVzIGluIHRoZSBTdGF0dXMKLQkJCQkJCWZpZWxkIG9mICB0aGUKLQkJCQkJCXN0cnVjdCBGV0NNRF9SRVNQT05TRV9IRUFERVIgKi8KLSNkZWZpbmUgTUdNVF9TVEFUVVNfSUxMRUdBTF9SRVFVRVNUICAgICAoMikJLyogSW52YWxpZCBGV0NNRCBvcGNvZGUgKi8KLSNkZWZpbmUgTUdNVF9TVEFUVVNfSUxMRUdBTF9GSUVMRCAgICAgICAoMykJLyogSW52YWxpZCBwYXJhbWV0ZXIgaW4KLQkJCQkJCXRoZSBGV0NNRCAgcGF5bG9hZCAqLwotCi0jZW5kaWYgLyogX19md2NtZF9vcGNvZGVzX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfdHlwZXNfYm1hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2Z3Y21kX3R5cGVzX2JtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyMTdhZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvZndjbWRfdHlwZXNfYm1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2Z3Y21kX3R5cGVzX2JtYXBfaF9fCi0jZGVmaW5lIF9fZndjbWRfdHlwZXNfYm1hcF9oX18KLQotLyogTUFDIGFkZHJlc3MgZm9ybWF0ICAqLwotc3RydWN0IE1BQ19BRERSRVNTX0ZPUk1BVCB7Ci0JdTE2IFNpemVPZlN0cnVjdHVyZTsKLQl1OCBNQUNBZGRyZXNzWzZdOwotfSBfX3BhY2tlZDsKLQotI2VuZGlmIC8qIF9fZndjbWRfdHlwZXNfYm1hcF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9ob3N0X3N0cnVjdC5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2hvc3Rfc3RydWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZTY3MjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2hvc3Rfc3RydWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX2hvc3Rfc3RydWN0X2FtYXBfaF9fCi0jZGVmaW5lIF9faG9zdF9zdHJ1Y3RfYW1hcF9oX18KLSNpbmNsdWRlICJiZV9jbS5oIgotI2luY2x1ZGUgImJlX2NvbW1vbi5oIgotI2luY2x1ZGUgImRlc2NyaXB0b3JzLmgiCi0KLS8qIC0tLSBFUV9DT01QTEVUSU9OX01BSk9SX0NPREVfRU5VTSAtLS0gKi8KLSNkZWZpbmUgRVFfTUFKT1JfQ09ERV9DT01QTEVUSU9OICAgICAgICAoMCkJLyogQ29tcGxldGlvbiBldmVudCBvbiBhICovCi0JCQkJCQkgIC8qIHFjb21wbGV0aW9uIHVldWUuICovCi0jZGVmaW5lIEVRX01BSk9SX0NPREVfRVRIICAgICAgICAgICAgICAgKDEpCS8qIEFmZmlsaWF0ZWQgRXRoZXJuZXQgRXZlbnQuICovCi0jZGVmaW5lIEVRX01BSk9SX0NPREVfUkVTRVJWRUQgICAgICAgICAgKDIpCS8qIFJlc2VydmVkICovCi0jZGVmaW5lIEVRX01BSk9SX0NPREVfUkRNQSAgICAgICAgICAgICAgKDMpCS8qIEFmZmlsaWF0ZWQgUkRNQSBFdmVudC4gKi8KLSNkZWZpbmUgRVFfTUFKT1JfQ09ERV9JU0NTSSAgICAgICAgICAgICAoNCkJLyogQWZmaWxpYXRlZCBJU0NTSSBFdmVudCAqLwotI2RlZmluZSBFUV9NQUpPUl9DT0RFX1VOQUZGSUxJQVRFRCAgICAgICg1KQkvKiBVbmFmZmlsaWF0ZWQgRXZlbnQgKi8KLQotLyogLS0tIEVRX0NPTVBMRVRJT05fTUlOT1JfQ09ERV9FTlVNIC0tLSAqLwotI2RlZmluZSBFUV9NSU5PUl9DT0RFX0NPTVBMRVRJT04gICAgICAgICgwKQkvKiBDb21wbGV0aW9uIGV2ZW50IG9uIGEgKi8KLQkJCQkJCSAgLyogY29tcGxldGlvbiBxdWV1ZS4gKi8KLSNkZWZpbmUgRVFfTUlOT1JfQ09ERV9PVEhFUiAgICAgICAgICAgICAoMSkJLyogT3RoZXIgRXZlbnQgKFRCRCkuICovCi0KLS8qIFF1ZXVlIEVudHJ5IERlZmluaXRpb24gZm9yIGFsbCA0IGJ5dGUgZXZlbnQgcXVldWUgdHlwZXMuICovCi1zdHJ1Y3QgQkVfRVFfRU5UUllfQU1BUCB7Ci0JdTggVmFsaWQ7CQkvKiBEV09SRCAwICovCi0JdTggTWFqb3JDb2RlWzNdOwkvKiBEV09SRCAwICovCi0JdTggTWlub3JDb2RlWzEyXTsJLyogRFdPUkQgMCAqLwotCXU4IFJlc291cmNlSURbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IEVRX0VOVFJZX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qCi0gKiAtLS0gRVRIX0VWRU5UX0NPREUgLS0tCi0gKiBUaGVzZSBjb2RlcyBhcmUgcmV0dXJuZWQgYnkgdGhlIE1QVSB3aGVuIG9uZSBvZiB0aGVzZSBldmVudHMgaGFzIG9jY3VycmVkLAotICogYW5kIHRoZSBldmVudCBpcyBjb25maWd1cmVkIHRvIHJlcG9ydCB0byBhbiBFdmVudCBRdWV1ZSB3aGVuIGFuIGV2ZW50Ci0gKiBpcyBkZXRlY3RlZC4KLSAqLwotI2RlZmluZSBFVEhfRVFfTElOS19TVEFUVVMgICAgICAgICAgICAgICgwKQkvKiBMaW5rIHN0YXR1cyBjaGFuZ2UgZXZlbnQgKi8KLQkJCQkJCSAgLyogZGV0ZWN0ZWQuICovCi0jZGVmaW5lIEVUSF9FUV9XQVRFUk1BUksgICAgICAgICAgICAgICAgKDEpCS8qIHdhdGVybWFyayBldmVudCBkZXRlY3RlZC4gKi8KLSNkZWZpbmUgRVRIX0VRX01BR0lDX1BLVCAgICAgICAgICAgICAgICAoMikJLyogbWFnaWMgcGt0IGV2ZW50IGRldGVjdGVkLiAqLwotI2RlZmluZSBFVEhfRVFfQUNQSV9QS1QwICAgICAgICAgICAgICAgICgzKQkvKiBBQ1BJIGludGVyZXN0aW5nIHBhY2tldCAqLwotCQkJCQkJICAvKiBkZXRlY3RlZC4gKi8KLSNkZWZpbmUgRVRIX0VRX0FDUElfUEtUMSAgICAgICAgICAgICAgICAoMykJLyogQUNQSSBpbnRlcmVzdGluZyBwYWNrZXQgKi8KLQkJCQkJCSAgLyogZGV0ZWN0ZWQuICovCi0jZGVmaW5lIEVUSF9FUV9BQ1BJX1BLVDIgICAgICAgICAgICAgICAgKDMpCS8qIEFDUEkgaW50ZXJlc3RpbmcgcGFja2V0ICovCi0JCQkJCQkgIC8qIGRldGVjdGVkLiAqLwotI2RlZmluZSBFVEhfRVFfQUNQSV9QS1QzICAgICAgICAgICAgICAgICgzKQkvKiBBQ1BJIGludGVyZXN0aW5nIHBhY2tldCAqLwotCQkJCQkJICAvKiBkZXRlY3RlZC4gKi8KLQotLyoKLSAqIC0tLSBFVEhfVFhfQ09NUExfU1RBVFVTX0VOVU0gLS0tCi0gKiBTdGF0dXMgY29kZXMgY29udGFpbmVkIGluIEV0aGVybmV0IFRYIGNvbXBsZXRpb24gZGVzY3JpcHRvcnMuCi0gKi8KLSNkZWZpbmUgRVRIX0NPTVBfVkFMSUQgICAgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgRVRIX0NPTVBfRVJST1IgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgRVRIX0NPTVBfSU5WQUxJRCAgICAgICAgICAgICAgICAoMTUpCi0KLS8qCi0gKiAtLS0gRVRIX1RYX0NPTVBMX1BPUlRfRU5VTSAtLS0KLSAqIFBvcnQgaW5kaWNhdG9yIGNvbnRhaW5lZCBpbiBFdGhlcm5ldCBUWCBjb21wbGV0aW9uIGRlc2NyaXB0b3JzLgotICovCi0jZGVmaW5lIEVUSF9DT01QX1BPUlQwICAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIEVUSF9DT01QX1BPUlQxICAgICAgICAgICAgICAgICAgKDEpCi0jZGVmaW5lIEVUSF9DT01QX01HTVQgICAgICAgICAgICAgICAgICAgKDIpCi0KLS8qCi0gKiAtLS0gRVRIX1RYX0NPTVBMX0NUX0VOVU0gLS0tCi0gKiBDb21wbGV0aW9uIHR5cGUgaW5kaWNhdG9yIGNvbnRhaW5lZCBpbiBFdGhlcm5ldCBUWCBjb21wbGV0aW9uIGRlc2NyaXB0b3JzLgotICovCi0jZGVmaW5lIEVUSF9DT01QX0VUSCAgICAgICAgICAgICAgICAgICAgKDApCi0KLS8qCi0gKiBXb3JrIHJlcXVlc3QgYmxvY2sgdGhhdCB0aGUgZHJpdmVyIGlzc3VlcyB0byB0aGUgY2hpcCBmb3IKLSAqIEV0aGVybmV0IHRyYW5zbWlzc2lvbnMuIEFsbCBjb250cm9sIGZpZWxkcyBtdXN0IGJlIHZhbGlkIGluIGVhY2ggV1JCIGZvcgotICogYSBtZXNzYWdlLiBUaGUgY29udHJvbGxlciwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmbGFncywgb3B0aW9uYWxseSB3cml0ZXMKLSAqIGFuIGVudHJ5IHRvIHRoZSBDb21wbGV0aW9uIFJpbmcgYW5kIGdlbmVyYXRlIGFuIGV2ZW50LgotICovCi1zdHJ1Y3QgQkVfRVRIX1dSQl9BTUFQIHsKLQl1OCBmcmFnX3BhX2hpWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IGZyYWdfcGFfbG9bMzJdOwkvKiBEV09SRCAxICovCi0JdTggY29tcGxldGU7CS8qIERXT1JEIDIgKi8KLQl1OCBldmVudDsJCS8qIERXT1JEIDIgKi8KLQl1OCBjcmM7CQkvKiBEV09SRCAyICovCi0JdTggZm9yd2FyZDsJCS8qIERXT1JEIDIgKi8KLQl1OCBpcHNlYzsJCS8qIERXT1JEIDIgKi8KLQl1OCBtZ210OwkJLyogRFdPUkQgMiAqLwotCXU4IGlwY3M7CQkvKiBEV09SRCAyICovCi0JdTggdWRwY3M7CQkvKiBEV09SRCAyICovCi0JdTggdGNwY3M7CQkvKiBEV09SRCAyICovCi0JdTggbHNvOwkJLyogRFdPUkQgMiAqLwotCXU4IGxhc3Q7CQkvKiBEV09SRCAyICovCi0JdTggdmxhbjsJCS8qIERXT1JEIDIgKi8KLQl1OCBkYmdbM107CQkvKiBEV09SRCAyICovCi0JdTggaGFzaF92YWxbM107CS8qIERXT1JEIDIgKi8KLQl1OCBsc29fbXNzWzE0XTsJLyogRFdPUkQgMiAqLwotCXU4IGZyYWdfbGVuWzE2XTsJLyogRFdPUkQgMyAqLwotCXU4IHZsYW5fdGFnWzE2XTsJLyogRFdPUkQgMyAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFVEhfV1JCX0FNQVAgewotCXUzMiBkd1s0XTsKLX07Ci0KLS8qIFRoaXMgaXMgYW4gRXRoZXJuZXQgdHJhbnNtaXQgY29tcGxldGlvbiBkZXNjcmlwdG9yICovCi1zdHJ1Y3QgQkVfRVRIX1RYX0NPTVBMX0FNQVAgewotCXU4IHVzZXJfYnl0ZXNbMTZdOwkvKiBEV09SRCAwICovCi0JdTggbndoX2J5dGVzWzhdOwkvKiBEV09SRCAwICovCi0JdTggbHNvOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzddOwkvKiBEV09SRCAwICovCi0JdTggd3JiX2luZGV4WzE2XTsJLyogRFdPUkQgMSAqLwotCXU4IGN0WzJdOwkJLyogRFdPUkQgMSAqLwotCXU4IHBvcnRbMl07CQkvKiBEV09SRCAxICovCi0JdTggcnN2ZDFbOF07CS8qIERXT1JEIDEgKi8KLQl1OCBzdGF0dXNbNF07CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkMlsxNl07CS8qIERXT1JEIDIgKi8KLQl1OCByaW5naWRbMTFdOwkvKiBEV09SRCAyICovCi0JdTggaGFzaF92YWxbNF07CS8qIERXT1JEIDIgKi8KLQl1OCB2YWxpZDsJCS8qIERXT1JEIDIgKi8KLQl1OCByc3ZkM1szMl07CS8qIERXT1JEIDMgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgRVRIX1RYX0NPTVBMX0FNQVAgewotCXUzMiBkd1s0XTsKLX07Ci0KLS8qIEV0aGVybmV0IFJlY2VpdmUgQnVmZmVyIGRlc2NyaXB0b3IgKi8KLXN0cnVjdCBCRV9FVEhfUlhfRF9BTUFQIHsKLQl1OCBmcmFncGFfaGlbMzJdOwkvKiBEV09SRCAwICovCi0JdTggZnJhZ3BhX2xvWzMyXTsJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBFVEhfUlhfRF9BTUFQIHsKLQl1MzIgZHdbMl07Ci19OwotCi0vKiBUaGlzIGlzIGFuIEV0aGVybmV0IFJlY2VpdmUgQ29tcGxldGlvbiBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgQkVfRVRIX1JYX0NPTVBMX0FNQVAgewotCXU4IHZsYW5fdGFnWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHBrdHNpemVbMTRdOwkvKiBEV09SRCAwICovCi0JdTggcG9ydDsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMDsJCS8qIERXT1JEIDAgKi8KLQl1OCBlcnI7CQkvKiBEV09SRCAxICovCi0JdTggcnNzaHA7CQkvKiBEV09SRCAxICovCi0JdTggaXBmOwkJLyogRFdPUkQgMSAqLwotCXU4IHRjcGY7CQkvKiBEV09SRCAxICovCi0JdTggdWRwZjsJCS8qIERXT1JEIDEgKi8KLQl1OCBpcGNrc207CQkvKiBEV09SRCAxICovCi0JdTggdGNwY2tzbTsJCS8qIERXT1JEIDEgKi8KLQl1OCB1ZHBja3NtOwkJLyogRFdPUkQgMSAqLwotCXU4IG1hY2RzdFs2XTsJLyogRFdPUkQgMSAqLwotCXU4IHZ0cDsJCS8qIERXT1JEIDEgKi8KLQl1OCB2dG07CQkvKiBEV09SRCAxICovCi0JdTggZnJhZ25keFsxMF07CS8qIERXT1JEIDEgKi8KLQl1OCBjdFsyXTsJCS8qIERXT1JEIDEgKi8KLQl1OCBpcHNlYzsJCS8qIERXT1JEIDEgKi8KLQl1OCBudW1mcmFnc1szXTsJLyogRFdPUkQgMSAqLwotCXU4IHJzdmQxWzMxXTsJLyogRFdPUkQgMiAqLwotCXU4IHZhbGlkOwkJLyogRFdPUkQgMiAqLwotCXU4IHJzc2hhc2hbMzJdOwkvKiBEV09SRCAzICovCi19IF9fcGFja2VkOwotc3RydWN0IEVUSF9SWF9DT01QTF9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi0jZW5kaWYgLyogX19ob3N0X3N0cnVjdF9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L2h3bGliLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvaHdsaWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlZGY0ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvaHdsaWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0jaWZuZGVmIF9faHdsaWJfaF9fCi0jZGVmaW5lIF9faHdsaWJfaF9fCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0jaW5jbHVkZSAicmVnbWFwLmgiCQkvKiBzcmNnZW4gYXJyYXkgbWFwIG91dHB1dCAqLwotCi0jaW5jbHVkZSAiYXN5bmNtZXNnLmgiCi0jaW5jbHVkZSAiZndjbWRfb3Bjb2Rlcy5oIgotI2luY2x1ZGUgInBvc3RfY29kZXMuaCIKLSNpbmNsdWRlICJmd2NtZF9tY2MuaCIKLQotI2luY2x1ZGUgImZ3Y21kX3R5cGVzX2JtYXAuaCIKLSNpbmNsdWRlICJmd2NtZF9jb21tb25fYm1hcC5oIgotI2luY2x1ZGUgImZ3Y21kX2V0aF9ibWFwLmgiCi0jaW5jbHVkZSAiYmVzdGF0dXMuaCIKLS8qCi0gKgotICogTWFjcm9zIGZvciByZWFkaW5nL3dyaXRpbmcgYSBwcm90ZWN0aW9uIGRvbWFpbiBvciBDU1IgcmVnaXN0ZXJzCi0gKiBpbiBCbGFkZUVuZ2luZS4KLSAqLwotI2RlZmluZSBQRF9SRUFEKGZvLCBmaWVsZCkJaW9yZWFkMzIoKGZvKS0+ZGJfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9QUk9URUNUSU9OX0RPTUFJTl9EQk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2RlZmluZSBQRF9XUklURShmbywgZmllbGQsIHZhbCkgaW93cml0ZTMyKHZhbCwgKGZvKS0+ZGJfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9QUk9URUNUSU9OX0RPTUFJTl9EQk1BUF9BTUFQLCBmaWVsZCkvOCkKLQotI2RlZmluZSBDU1JfUkVBRChmbywgZmllbGQpCWlvcmVhZDMyKChmbyktPmNzcl92YSArIFwKLQkJb2Zmc2V0b2Yoc3RydWN0IEJFX0JMQURFX0VOR0lORV9DU1JNQVBfQU1BUCwgZmllbGQpLzgpCi0KLSNkZWZpbmUgQ1NSX1dSSVRFKGZvLCBmaWVsZCwgdmFsKQlpb3dyaXRlMzIodmFsLCAoZm8pLT5jc3JfdmEgKyBcCi0JCW9mZnNldG9mKHN0cnVjdCBCRV9CTEFERV9FTkdJTkVfQ1NSTUFQX0FNQVAsIGZpZWxkKS84KQotCi0jZGVmaW5lIFBDSUNGRzBfUkVBRChmbywgZmllbGQpCWlvcmVhZDMyKChmbyktPnBjaV92YSArIFwKLQkJb2Zmc2V0b2Yoc3RydWN0IEJFX1BDSUNGRzBfQ1NSTUFQX0FNQVAsIGZpZWxkKS84KQotCi0jZGVmaW5lIFBDSUNGRzBfV1JJVEUoZm8sIGZpZWxkLCB2YWwpCWlvd3JpdGUzMih2YWwsIChmbyktPnBjaV92YSArIFwKLQkJb2Zmc2V0b2Yoc3RydWN0IEJFX1BDSUNGRzBfQ1NSTUFQX0FNQVAsIGZpZWxkKS84KQotCi0jZGVmaW5lIFBDSUNGRzFfUkVBRChmbywgZmllbGQpCWlvcmVhZDMyKChmbyktPnBjaV92YSArIFwKLQkJb2Zmc2V0b2Yoc3RydWN0IEJFX1BDSUNGRzFfQ1NSTUFQX0FNQVAsIGZpZWxkKS84KQotCi0jZGVmaW5lIFBDSUNGRzFfV1JJVEUoZm8sIGZpZWxkLCB2YWwpCWlvd3JpdGUzMih2YWwsIChmbyktPnBjaV92YSArIFwKLQkJb2Zmc2V0b2Yoc3RydWN0IEJFX1BDSUNGRzFfQ1NSTUFQX0FNQVAsIGZpZWxkKS84KQotCi0jaWZkZWYgQkVfREVCVUcKLSNkZWZpbmUgQVNTRVJUKGMpICAgICAgIEJVR19PTighKGMpKTsKLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChjKQotI2VuZGlmCi0KLS8qIGRlYnVnIGxldmVscyAqLwotZW51bSBCRV9ERUJVR19MRVZFTFMgewotCURMX0FMV0FZUyA9IDAsCQkvKiBjYW5ub3QgYmUgbWFza2VkICovCi0JRExfRVJSID0gMHgxLAkJLyogZXJyb3JzIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCURMX1dBUk4gPSAweDIsCQkvKiBzb21ldGhpbmcgcXVlc3Rpb25hYmxlLgotCQkJCSAgIHJlY292ZXJhYmxlIGVycm9ycyAqLwotCURMX05PVEUgPSAweDQsCQkvKiBpbmZyZXF1ZW50LCBpbXBvcnRhbnQgZGVidWcgaW5mbyAqLwotCURMX0lORk8gPSAweDgsCQkvKiBkZWJ1ZyBpbmZvcm1hdGlvbiAqLwotCURMX1ZFUkJPU0UgPSAweDEwLAkvKiBkZXRhaWxlZCBpbmZvLCBzdWNoIGFzIGJ1ZmZlciB0cmFjZXMgKi8KLQlCRV9ETF9NSU5fVkFMVUUgPSAweDEsCS8qIHRoaXMgaXMgdGhlIG1pbiB2YWx1ZSB1c2VkICovCi0JQkVfRExfTUFYX1ZBTFVFID0gMHg4MAkvKiB0aGlzIGlzIHRoZSBoaWdoZXNldCB2YWx1ZSB1c2VkICovCi19IDsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCB0cmFjZV9sZXZlbDsKLQotI2RlZmluZSBUUkFDRShsbSwgZm10LCBhcmdzLi4uKSAgewkJCQlcCi0JCWlmICh0cmFjZV9sZXZlbCAmIGxtKSB7CQkJCVwKLQkJCXByaW50ayhLRVJOX05PVElDRSAiQkU6ICVzOiVkIFxuIiBmbXQsCVwKLQkJCV9fRklMRV9fICwgX19MSU5FX18gLCAjIyBhcmdzKTsJCVwKLQkJfQkJCQkJCVwKLQl9Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJlX3RyYWNlX3NldF9sZXZlbCh1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0JdW5zaWduZWQgaW50IG9sZF9sZXZlbCA9IHRyYWNlX2xldmVsOwotCXRyYWNlX2xldmVsID0gbGV2ZWw7Ci0JcmV0dXJuIG9sZF9sZXZlbDsKLX0KLQotI2RlZmluZSBiZV90cmFjZV9nZXRfbGV2ZWwoKSAJdHJhY2VfbGV2ZWwKLS8qCi0gKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBzaXplIG9mIGRhdGEKLSAqIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgotICovCi0jZGVmaW5lIFBBR0VTX1NQQU5ORUQoX2FkZHJlc3MsIF9zaXplKSBcCi0gICAoKHUzMikoKCgoc2l6ZV90KShfYWRkcmVzcykgJiAoUEFHRV9TSVpFIC0gMSkpICsgXAotCQkoX3NpemUpICsgKFBBR0VfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUKSkKLS8qIEJ5dGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byBnaXZlbiBhZGRyZXNzICovCi0jZGVmaW5lIE9GRlNFVF9JTl9QQUdFKF9hZGRyXykgKChzaXplX3QpKF9hZGRyXykgJiAoUEFHRV9TSVpFLTEpKQotCi0vKgotICogY2lyY3VsYXIgc3VidHJhY3QuCi0gKiBSZXR1cm5zIGEgLSBiIGFzc3VtaW5nIGEgY2lyY3VsYXIgbnVtYmVyIHN5c3RlbSwgd2hlcmUgYSBhbmQgYiBhcmUKLSAqIGluIHJhbmdlICgwLCBtYXhWYWx1ZS0xKS4gSWYgYT09YiwgemVybyBpcyByZXR1cm5lZCBzbyB0aGUKLSAqIGhpZ2hlc3QgdmFsdWUgcG9zc2libGUgd2l0aCB0aGlzIHN1YnRyYWN0aW9uIGlzIG1heFZhbHVlLTEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGJlX3N1YmModTMyIGEsIHUzMiBiLCB1MzIgbWF4KQotewotCUFTU0VSVChhIDw9IG1heCAmJiBiIDw9IG1heCk7Ci0JQVNTRVJUKG1heCA+IDApOwotCXJldHVybiBhID49IGIgPyAoYSAtIGIpIDogKG1heCAtIGIgKyBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYmVfYWRkYyh1MzIgYSwgdTMyIGIsIHUzMiBtYXgpCi17Ci0JQVNTRVJUKGEgPCBtYXgpOwotCUFTU0VSVChtYXggPiAwKTsKLQlyZXR1cm4gKG1heCAtIGEgPiBiKSA/IChhICsgYikgOiAoYiArIGEgLSBtYXgpOwotfQotCi0vKiBkZXNjcmlwdG9yIGZvciBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgdXNlZCBmb3IgcmluZyAqLwotc3RydWN0IHJpbmdfZGVzYyB7Ci0JdTMyIGxlbmd0aDsJLyogbGVuZ3RoIGluIGJ5dGVzICovCi0Jdm9pZCAqdmE7IAkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQl1NjQgcGE7CQkvKiBidXMgYWRkcmVzcyAqLwotfSA7Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgYSByaW5nIHNoYXJlZCBiZXR3ZWVuIGhhcmR3YXJlCi0gKiBhbmQgc29mdHdhcmUuICBFYWNoIHJpbmcgaXMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgaW4gdGhlIHVuY2FjaGVkCi0gKiBleHRlbnNpb24gYW5kIG1hcHBlZCBpbnRvIEJsYWRlRW5naW5lJ3MgdW5pZmllZCB0YWJsZS4KLSAqLwotc3RydWN0IG1wX3JpbmcgewotCXUzMiBwYWdlczsJCS8qIHF1ZXVlIHNpemUgaW4gcGFnZXMgKi8KLQl1MzIgaWQ7CQkJLyogcXVldWUgaWQgYXNzaWduZWQgYnkgYmVrbGliICovCi0JdTMyIG51bTsJCS8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBxdWV1ZSAqLwotCXUzMiBjaWR4OwkJLyogY29uc3VtZXIgaW5kZXggKi8KLQl1MzIgcGlkeDsJCS8qIHByb2R1Y2VyIGluZGV4IC0tIG5vdCB1c2VkIGJ5IG1vc3QgcmluZ3MgKi8KLQl1MzIgaXRlbVNpemU7CQkvKiBzaXplIGluIGJ5dGVzIG9mIG9uZSBvYmplY3QgKi8KLQotCXZvaWQgKnZhOwkJLyogVGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgcmluZy4KLQkJCQkgICBUaGlzIHNob3VsZCBiZSBsYXN0IHRvIGFsbG93IDMyICYgNjQKLQkJCQkgICBiaXQgZGVidWdnZXIgZXh0ZW5zaW9ucyB0byB3b3JrLiAqLwotfSA7Ci0KLS8qLS0tLS0tLS0tLS0gIGFtYXAgYml0IGZpbGVkIGdldCAvIHNldCBtYWNyb3MgYW5kIGZ1bmN0aW9ucyAtLS0tLSovCi0vKgotICogU3RydWN0dXJlcyBkZWZpbmVkIGluIHRoZSBtYXAgaGVhZGVyIGZpbGVzICh1bmRlciBmdy9hbWFwLykgd2l0aCBuYW1lcwotICogaW4gdGhlIGZvcm1hdCBCRV88bmFtZT5fQU1BUCBhcmUgcHNldWRvIHN0cnVjdHVyZXMgd2l0aCBtZW1iZXJzCi0gKiBvZiB0eXBlIHU4LiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSB0ZW1wbGF0ZXMgdGhhdCBhcmUgdXNlZCBpbgotICogY29uanVudGlvbiB3aXRoIHRoZSBzdHJ1Y3R1cmVzIHdpdGggbmFtZXMgaW4gdGhlIGZvcm1hdAotICogPG5hbWU+X0FNQVAgdG8gY2FsY3VsYXRlIHRoZSBiaXQgbWFza3MgYW5kIGJpdCBvZmZzZXRzIHRvIGdldCBvciBzZXQKLSAqIGJpdCBmaWVsZHMgaW4gc3RydWN0dXJlcy4gVGhlIHN0cnVjdHVyZXMgPG5hbWU+X0FNQVAgYXJlIGFycmF5cwotICogb2YgMzIgYml0cyB3b3JkcyBhbmQgaGF2ZSB0aGUgY29ycmVjdCBzaXplLiAgVGhlIGZvbGxvd2luZyBtYWNyb3MKLSAqIHByb3ZpZGUgY29udmVuaWVudCB3YXlzIHRvIGdldCBhbmQgc2V0IHRoZSB2YXJpb3VzIG1lbWJlcnMKLSAqIGluIHRoZSBzdHJ1Y3R1cmVzIHdpdGhvdXQgdXNpbmcgc3RydWNjdHVyZXMgd2l0aCBiaXQgZmllbGRzLgotICogQWx3YXlzIHVzZSB0aGUgbWFjcm9zIEFNQVBfR0VUX0JJVFNfUFRSIGFuZCBBTUFQX1NFVF9CSVRTX1BUUgotICogbWFjcm9zIHRvIGV4dHJhY3QgYW5kIHNldCB2YXJpb3VzIG1lbWJlcnMuCi0gKi8KLQotLyoKLSAqIFJldHVybnMgdGhlIGEgYml0IG1hc2sgZm9yIHRoZSByZWdpc3RlciB0aGF0IGlzIE5PVCBzaGlmdGVkIGludG8gbG9jYXRpb24uCi0gKiBUaGF0IG1lYW5zIHJldHVybiB2YWx1ZXMgYWx3YXlzIGxvb2sgbGlrZTogMHgxLCAweEZGLCAweDdGRiwgZXRjLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGFtYXBfbWFzayh1MzIgYml0X3NpemUpCi17Ci0JcmV0dXJuIGJpdF9zaXplID09IDMyID8gMHhGRkZGRkZGRiA6ICgxIDw8IGJpdF9zaXplKSAtIDE7Ci19Ci0KLSNkZWZpbmUgQU1BUF9CSVRfTUFTSyhfc3RydWN0XywgZmllbGQpICAgICAgIFwKLQlhbWFwX21hc2soQU1BUF9CSVRfU0laRShfc3RydWN0XywgZmllbGQpKQotCi0vKgotICogbm9uLW9wdGltaXplZCBzZXQgYml0cyBmdW5jdGlvbi4gRmlyc3QgY2xlYXJzIHRoZSBiaXRzIGFuZCB0aGVuIGFzc2lnbnMgdGhlbS4KLSAqIFRoaXMgZG9lcyBub3QgcmVxdWlyZSBrbm93bGVkZ2Ugb2YgdGhlIHBhcnRpY3VsYXIgRFdPUkQgeW91IGFyZSBzZXR0aW5nLgotICogZS5nLiBBTUFQX1NFVF9CSVRTX1BUUiAoc3RydWN0LCBmaWVsZDEsICZjb250ZXh0TWVtb3J5LCAxMjMpOwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFtYXBfc2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkKLXsKLQl1MzIgKmR3ID0gKHUzMiAqKXB0cjsKLQkqKGR3ICsgZHdfb2Zmc2V0KSAmPSB+KG1hc2sgPDwgb2Zmc2V0KTsKLQkqKGR3ICsgZHdfb2Zmc2V0KSB8PSAobWFzayAmIHZhbHVlKSA8PCBvZmZzZXQ7Ci19Ci0KLSNkZWZpbmUgQU1BUF9TRVRfQklUU19QVFIoX3N0cnVjdF8sIGZpZWxkLCBfc3RydWN0UHRyXywgdmFsKQlcCi0JYW1hcF9zZXQoX3N0cnVjdFB0cl8sIEFNQVBfV09SRF9PRkZTRVQoX3N0cnVjdF8sIGZpZWxkKSxcCi0JCUFNQVBfQklUX01BU0soX3N0cnVjdF8sIGZpZWxkKSwJCQlcCi0JCUFNQVBfQklUX09GRlNFVChfc3RydWN0XywgZmllbGQpLCB2YWwpCi0vKgotICogTm9uLW9wdGltaXplZCByb3V0aW5lIHRoYXQgZ2V0cyB0aGUgYml0cyB3aXRob3V0IGtub3dpbmcgdGhlIGNvcnJlY3QgRFdPUkQuCi0gKiBlLmcuIGZpZWxkVmFsdWUgPSBBTUFQX0dFVF9CSVRTX1BUUiAoc3RydWN0LCBmaWVsZDEsICZjb250ZXh0TWVtb3J5KTsKLSAqLwotc3RhdGljIGlubGluZSB1MzIKLWFtYXBfZ2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQpCi17Ci0JdTMyICpkdyA9ICh1MzIgKilwdHI7Ci0JcmV0dXJuIG1hc2sgJiAoKihkdyArIGR3X29mZnNldCkgPj4gb2Zmc2V0KTsKLX0KLSNkZWZpbmUgQU1BUF9HRVRfQklUU19QVFIoX3N0cnVjdF8sIGZpZWxkLCBfc3RydWN0UHRyXykJCQlcCi0JYW1hcF9nZXQoX3N0cnVjdFB0cl8sIEFNQVBfV09SRF9PRkZTRVQoX3N0cnVjdF8sIGZpZWxkKSwJXAotCQlBTUFQX0JJVF9NQVNLKF9zdHJ1Y3RfLCBmaWVsZCksCQkJCVwKLQkJQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3RfLCBmaWVsZCkpCi0KLS8qIFJldHVybnMgMC0zMSByZXByZXNlbnRpbmcgYml0IG9mZnNldCB3aXRoaW4gYSBEV09SRCBvZiBhIGJpdGZpZWxkLiAqLwotI2RlZmluZSBBTUFQX0JJVF9PRkZTRVQoX3N0cnVjdF8sIGZpZWxkKSAgICAgICAgICAgICAgICAgIFwKLQkob2Zmc2V0b2Yoc3RydWN0IEJFXyAjIyBfc3RydWN0XyAjIyBfQU1BUCwgZmllbGQpICUgMzIpCi0KLS8qIFJldHVybnMgMC1uIHJlcHJlc2VudGluZyBEV09SRCBvZmZzZXQgb2YgYml0ZmllbGQgd2l0aGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEFNQVBfV09SRF9PRkZTRVQoX3N0cnVjdF8sIGZpZWxkKSAgXAotCQkgIChvZmZzZXRvZihzdHJ1Y3QgQkVfICMjIF9zdHJ1Y3RfICMjIF9BTUFQLCBmaWVsZCkvMzIpCi0KLS8qIFJldHVybnMgc2l6ZSBvZiBiaXRmaWVsZCBpbiBiaXRzLiAqLwotI2RlZmluZSBBTUFQX0JJVF9TSVpFKF9zdHJ1Y3RfLCBmaWVsZCkgXAotCQlzaXplb2YoKChzdHJ1Y3QgQkVfICMjIF9zdHJ1Y3RfICMjIF9BTUFQKikwKS0+ZmllbGQpCi0KLXN0cnVjdCBiZV9tY2Nfd3JiX3Jlc3BvbnNlX2NvcHkgewotCXUxNiBsZW5ndGg7CQkvKiBieXRlcyBpbiByZXNwb25zZSAqLwotCXUxNiBmd2NtZF9vZmZzZXQ7CS8qIG9mZnNldCB3aXRoaW4gdGhlIHdyYiBvZiB0aGUgcmVzcG9uc2UgKi8KLQl2b2lkICp2YTsJCS8qIHVzZXIncyB2YSB0byBjb3B5IHJlc3BvbnNlIGludG8gKi8KLQotfSA7Ci10eXBlZGVmIHZvaWQgKCptY2Nfd3JiX2NxZV9jYWxsYmFjaykgKHZvaWQgKmNvbnRleHQsIGludCBzdGF0dXMsCi0JCQkJc3RydWN0IE1DQ19XUkJfQU1BUCAqb3B0aW9uYWxfd3JiKTsKLXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgewotCi0JbWNjX3dyYl9jcWVfY2FsbGJhY2sgaW50ZXJuYWxfY2I7CS8qIEZ1bmN0aW9uIHRvIGNhbGwgb24KLQkJCQkJCWNvbXBsZXRpb24gKi8KLQl2b2lkICppbnRlcm5hbF9jYl9jb250ZXh0OwkvKiBQYXJhbWV0ZXIgdG8gcGFzcwotCQkJCQkJICAgdG8gY29tcGxldGlvbiBmdW5jdGlvbiAqLwotCi0JbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2I7CS8qIEZ1bmN0aW9uIHRvIGNhbGwgb24gY29tcGxldGlvbiAqLwotCXZvaWQgKmNiX2NvbnRleHQ7CS8qIFBhcmFtZXRlciB0byBwYXNzIHRvIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KLQotCWludCAqdXNlcnNfZmluYWxfc3RhdHVzOwkvKiBwb2ludGVyIHRvIGEgbG9jYWwKLQkJCQkJCXZhcmlhYmxlIGZvciBzeW5jaHJvbm91cwotCQkJCQkJY29tbWFuZHMgKi8KLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmI7CS8qIHBvaW50ZXIgdG8gb3JpZ2luYWwgd3JiIGZvciBlbWJlZGRlZAotCQkJCQkJY29tbWFuZHMgb25seSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsJLyogbGlua3MgY29udGV4dCBzdHJ1Y3RzIHRvZ2V0aGVyIGluCi0JCQkJICAgZnJlZSBsaXN0ICovCi0KLQlzdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5IGNvcHk7CS8qIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29weQotCQkJCQkgICBlbWJlZGRlZCByZXNwb25zZSB0byB1c2VyJ3MgdmEgKi8KLQotI2lmIGRlZmluZWQoQkVfREVCVUcpCi0JdTE2IHN1YnN5c3RlbSwgb3Bjb2RlOwkvKiBUcmFjayB0aGlzIEZXQ01EIGZvciBkZWJ1ZyBidWlsZHMuICovCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqcmluZ193cmI7Ci0JdTMyIGNvbnN1bWVkX2NvdW50OwotI2VuZGlmCi19IDsKLQotLyoKLSAgICBSZXByZXNlbnRzIGEgZnVuY3Rpb24gb2JqZWN0IGZvciBuZXR3b3JrIG9yIHN0b3JhZ2UuICBUaGlzCi0gICAgaXMgdXNlZCB0byBtYW5hZ2UgcGVyLWZ1bmN0aW9uIHJlc291cmNlcyBsaWtlIE1DQyBDUXMsIGV0Yy4KLSovCi1zdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0IHsKLQotCXUzMiBtYWdpYzsJCS8qITwgbWFnaWMgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbi4gKi8KLQotCS8qIFBDSSBCQVIgbWFwcGVkIGFkZHJlc3NlcyAqLwotCXU4IF9faW9tZW0gKmNzcl92YTsJLyogQ1NSICovCi0JdTggX19pb21lbSAqZGJfdmE7CS8qIERvb3IgQmVsbCAqLwotCXU4IF9faW9tZW0gKnBjaV92YTsJLyogUENJIGNvbmZpZyBzcGFjZSAqLwotCXUzMiBlbXVsYXRlOwkJLyogaWYgc2V0LCBNUFUgaXMgbm90IGF2YWlsYWJsZS4KLQkJCQkgIEVtdWxhdGUgZXZlcnl0aGluZy4gICAgICovCi0JdTMyIHBlbmRfcXVldWVfZHJpdmluZzsJLyogaWYgc2V0LCBkcml2ZSB0aGUgcXVldWVkIFdSQnMKLQkJCQkgICBhZnRlciByZWxlYXNpbmcgdGhlIFdSQiBsb2NrICovCi0KLQlzcGlubG9ja190IHBvc3RfbG9jazsJLyogbG9jayBmb3IgdmVyaWZ5aW5nIG9uZSB0aHJlYWQgcG9zdGluZyB3cmJzICovCi0Jc3BpbmxvY2tfdCBjcV9sb2NrOwkvKiBsb2NrIGZvciB2ZXJpZnlpbmcgb25lIHRocmVhZAotCQkJCSAgIHByb2Nlc3NpbmcgY3EgKi8KLQlzcGlubG9ja190IG1jY19jb250ZXh0X2xvY2s7CS8qIGxvY2sgZm9yIHByb3RlY3RpbmcgbWNjCi0JCQkJCSAgIGNvbnRleHQgZnJlZSBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBwb3N0X2lycTsKLQl1bnNpZ25lZCBsb25nIGNxX2lycTsKLQotCXUzMiB0eXBlOwotCXUzMiBwY2lfZnVuY3Rpb25fbnVtYmVyOwotCi0Jc3RydWN0IGJlX21jY19vYmplY3QgKm1jYzsJLyogbWNjIHJpbmdzLiAqLwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IE1DQ19NQUlMQk9YX0FNQVAgKnZhOwkvKiBWQSB0byB0aGUgbWFpbGJveCAqLwotCQl1NjQgcGE7CS8qIFBBIHRvIHRoZSBtYWlsYm94ICovCi0JCXUzMiBsZW5ndGg7CS8qIGJ5dGUgbGVuZ3RoIG9mIG1haWxib3ggKi8KLQotCQkvKiBPbmUgZGVmYXVsdCBjb250ZXh0IHN0cnVjdCB1c2VkIGZvciBwb3N0aW5nIGF0Ci0JCSAqIGxlYXN0IG9uZSBNQ0NfV1JCCi0JCSAqLwotCQlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0IGRlZmF1bHRfY29udGV4dDsKLQkJYm9vbCBkZWZhdWx0X2NvbnRleHRfYWxsb2NhdGVkOwotCX0gbWFpbGJveDsKLQotCXN0cnVjdCB7Ci0KLQkJLyogV2FrZSBvbiBsYW5zIGNvbmZpZ3VyZWQuICovCi0JCXUzMiB3b2xfYml0bWFzazsJLyogYml0cyAwLDEsMiwzIGFyZSBzZXQgaWYKLQkJCQkJICAgY29ycmVzcG9uZGluZyBpbmRleCBpcyBlbmFibGVkICovCi0JfSBjb25maWc7Ci0KLQotCXN0cnVjdCBCRV9GSVJNV0FSRV9DT05GSUcgZndfY29uZmlnOwotfSA7Ci0KLS8qCi0gICAgICBSZXByZXNlbnRzIGFuIEV2ZW50IFF1ZXVlCi0qLwotc3RydWN0IGJlX2VxX29iamVjdCB7Ci0JdTMyIG1hZ2ljOwotCWF0b21pY190IHJlZl9jb3VudDsKLQotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBhcmVudF9mdW5jdGlvbjsKLQotCXN0cnVjdCBsaXN0X2hlYWQgZXFfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNxX2xpc3RfaGVhZDsKLQotCXUzMiBlcV9pZDsKLQl2b2lkICpjYl9jb250ZXh0OwotCi19IDsKLQotLyoKLSAgICBNYW5hZ2VzIGEgY29tcGxldGlvbiBxdWV1ZQotKi8KLXN0cnVjdCBiZV9jcV9vYmplY3QgewotCXUzMiBtYWdpYzsKLQlhdG9taWNfdCByZWZfY291bnQ7Ci0KLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwYXJlbnRfZnVuY3Rpb247Ci0Jc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0OwotCi0Jc3RydWN0IGxpc3RfaGVhZCBjcV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgY3FsaXN0X2Zvcl9lcTsKLQotCXZvaWQgKnZhOwotCXUzMiBudW1fZW50cmllczsKLQotCXZvaWQgKmNiX2NvbnRleHQ7Ci0KLQl1MzIgY3FfaWQ7Ci0KLX0gOwotCi0vKgotICAgIE1hbmFnZXMgYW4gZXRoZXJuZXQgc2VuZCBxdWV1ZQotKi8KLXN0cnVjdCBiZV9ldGhzcV9vYmplY3QgewotCXUzMiBtYWdpYzsKLQotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBhcmVudF9mdW5jdGlvbjsKLQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3Q7Ci0JdTMyIGJpZDsKLQotfSA7Ci0KLS8qCi1AYnJpZWYKLSAgICBNYW5hZ2VzIGFuIGV0aGVybmV0IHJlY2VpdmUgcXVldWUKLSovCi1zdHJ1Y3QgYmVfZXRocnFfb2JqZWN0IHsKLQl1MzIgbWFnaWM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBhcmVudF9mdW5jdGlvbjsKLQl1MzIgcmlkOwotCXN0cnVjdCBiZV9jcV9vYmplY3QgKmNxX29iamVjdDsKLQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpyc3NfY3Ffb2JqZWN0WzRdOwotCi19IDsKLQotLyoKLSAgICBNYW5hZ2VzIGFuIE1DQwotKi8KLXR5cGVkZWYgdm9pZCAoKm1jY19hc3luY19ldmVudF9jYWxsYmFjaykgKHZvaWQgKmNvbnRleHQsIHUzMiBldmVudF9jb2RlLAotCQkJCXZvaWQgKmV2ZW50KTsKLXN0cnVjdCBiZV9tY2Nfb2JqZWN0IHsKLQl1MzIgbWFnaWM7Ci0KLQlzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwYXJlbnRfZnVuY3Rpb247Ci0Jc3RydWN0IGxpc3RfaGVhZCBtY2NfbGlzdDsKLQotCXN0cnVjdCBiZV9jcV9vYmplY3QgKmNxX29iamVjdDsKLQotCS8qIEFzeW5jIGV2ZW50IGNhbGxiYWNrIGZvciBNQ0MgQ1EuICovCi0JbWNjX2FzeW5jX2V2ZW50X2NhbGxiYWNrIGFzeW5jX2NiOwotCXZvaWQgKmFzeW5jX2NvbnRleHQ7Ci0KLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICpiYXNlOwotCQl1MzIgbnVtOwotCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKLQl9IHdyYl9jb250ZXh0OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHJpbmdfZGVzYyAqcmQ7Ci0JCXN0cnVjdCBtcF9yaW5nIHJpbmc7Ci0JfSBzcTsKLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCBtcF9yaW5nIHJpbmc7Ci0JfSBjcTsKLQotCXUzMiBwcm9jZXNzaW5nOwkJLyogZmxhZyBpbmRpY2F0aW5nIHRoYXQgb25lIHRocmVhZAotCQkJCSAgIGlzIHByb2Nlc3NpbmcgQ1EgKi8KLQl1MzIgcmVhcm07CQkvKiBkb29yYmVsbCByZWFybSBzZXR0aW5nIHRvIG1ha2UKLQkJCQkgICBzdXJlIHRoZSBhY3RpdmUgcHJvY2Vzc2luZyB0aHJlYWQgKi8KLQkvKiByZWFybXMgdGhlIENRIGlmIGFueSBvZiB0aGUgdGhyZWFkcyByZXF1ZXN0ZWQgaXQuICovCi0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGJhY2tsb2c7Ci0JdTMyIGJhY2tsb2dfbGVuZ3RoOwotCXUzMiBkcml2aW5nX2JhY2tsb2c7Ci0JdTMyIGNvbnN1bWVkX2luZGV4OwotCi19IDsKLQotCi0vKiBRdWV1ZSBjb250ZXh0IGhlYWRlciAtLSB0aGUgcmVxdWlyZWQgc29mdHdhcmUgaW5mb3JtYXRpb24gZm9yCi0gKiBxdWV1ZWluZyBhIFdSQi4KLSAqLwotc3RydWN0IGJlX3F1ZXVlX2RyaXZlcl9jb250ZXh0IHsKLQltY2Nfd3JiX2NxZV9jYWxsYmFjayBpbnRlcm5hbF9jYjsJLyogRnVuY3Rpb24gdG8gY2FsbCBvbgotCQkJCQkJICAgY29tcGxldGlvbiAqLwotCXZvaWQgKmludGVybmFsX2NiX2NvbnRleHQ7CS8qIFBhcmFtZXRlciB0byBwYXNzCi0JCQkJCQkgICB0byBjb21wbGV0aW9uIGZ1bmN0aW9uICovCi0KLQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYjsJLyogRnVuY3Rpb24gdG8gY2FsbCBvbiBjb21wbGV0aW9uICovCi0Jdm9pZCAqY2JfY29udGV4dDsJLyogUGFyYW1ldGVyIHRvIHBhc3MgdG8gY29tcGxldGlvbiBmdW5jdGlvbiAqLwotCi0Jc3RydWN0IGJlX21jY193cmJfcmVzcG9uc2VfY29weSBjb3B5OwkvKiBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvcHkKLQkJCQkJICAgZW1iZWRkZWQgcmVzcG9uc2UgdG8gdXNlcidzIHZhICovCi0Jdm9pZCAqb3B0aW9uYWxfZndjbWRfdmE7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXUzMiBieXRlczsKLX0gOwotCi0vKgotICogQ29tbW9uIE1DQyBXUkIgaGVhZGVyIHRoYXQgYWxsIGNvbW1hbmRzIHJlcXVpcmUuCi0gKi8KLXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB7Ci0JdTggcnN2ZFtvZmZzZXRvZihzdHJ1Y3QgQkVfTUNDX1dSQl9BTUFQLCBwYXlsb2FkKS84XTsKLX0gOwotCi0vKgotICogQWxsIG5vbiBlbWJlZGRlZCBjb21tYW5kcyBzdXBwb3J0ZWQgYnkgaHdsaWIgZnVuY3Rpb25zIG9ubHkgYWxsb3cKLSAqIDEgU0dFLiAgVGhpcyBxdWV1ZSBjb250ZXh0IGhhbmRsZXMgdGhlbSBhbGwuCi0gKi8KLXN0cnVjdCBiZV9ub25lbWJlZGRlZF9xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBNQ0NfU0dFX0FNQVAgc2dlWzFdOwotfSA7Ci0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIHNwZWNpZmljIHF1ZXVlIHN0cnVjdCBmb3IgZWFjaCBjb21tYW5kLgotICogIFRoZSB1c2VyIGNvdWxkIGFsd2F5cyBwcm92aWRlIGEgYmVfZ2VuZXJpY19xX2N0eHQgYnV0IHRoaXMgaXMgYQotICogIHJhdGhlciBsYXJnZSBzdHJ1Y3QuICBCeSB1c2luZyB0aGUgc3BlY2lmaWMgc3RydWN0LCBtZW1vcnkgY29uc3VtcHRpb24KLSAqICBjYW4gYmUgcmVkdWNlZC4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0cnVjdCBiZV9saW5rX3N0YXR1c19xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19MSU5LX1NUQVRVU19RVUVSWSBmd2NtZDsKLX0gOwotCi1zdHJ1Y3QgYmVfbXVsdGljYXN0X3FfY3R4dCB7Ci0Jc3RydWN0IGJlX3F1ZXVlX2RyaXZlcl9jb250ZXh0IGNvbnRleHQ7Ci0Jc3RydWN0IGJlX21jY193cmJfaGVhZGVyIHdyYl9oZWFkZXI7Ci0Jc3RydWN0IEZXQ01EX0NPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVQgZndjbWQ7Ci19IDsKLQotCi1zdHJ1Y3QgYmVfdmxhbl9xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19WTEFOX0NPTkZJRyBmd2NtZDsKLX0gOwotCi1zdHJ1Y3QgYmVfcHJvbWlzY3VvdXNfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgRldDTURfRVRIX1BST01JU0NVT1VTIGZ3Y21kOwotfSA7Ci0KLXN0cnVjdCBiZV9mb3JjZV9mYWlsb3Zlcl9xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBGV0NNRF9DT01NT05fRk9SQ0VfRkFJTE9WRVIgZndjbWQ7Ci19IDsKLQotCi1zdHJ1Y3QgYmVfcnhmX2ZpbHRlcl9xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTlRXS19SWF9GSUxURVIgZndjbWQ7Ci19IDsKLQotc3RydWN0IGJlX2VxX21vZGlmeV9kZWxheV9xX2N0eHQgewotCXN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCBjb250ZXh0OwotCXN0cnVjdCBiZV9tY2Nfd3JiX2hlYWRlciB3cmJfaGVhZGVyOwotCXN0cnVjdCBGV0NNRF9DT01NT05fTU9ESUZZX0VRX0RFTEFZIGZ3Y21kOwotfSA7Ci0KLS8qCi0gKiBUaGUgZ2VuZXJpYyBjb250ZXh0IGlzIHRoZSBsYXJnZXN0IHNpemUgdGhhdCB3b3VsZCBiZSByZXF1aXJlZC4KLSAqIEl0IGlzIHRoZSBzb2Z0d2FyZSBjb250ZXh0IHBsdXMgYW4gZW50aXJlIFdSQi4KLSAqLwotc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0IHsKLQlzdHJ1Y3QgYmVfcXVldWVfZHJpdmVyX2NvbnRleHQgY29udGV4dDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIgd3JiX2hlYWRlcjsKLQlzdHJ1Y3QgTUNDX1dSQl9QQVlMT0FEX0FNQVAgcGF5bG9hZDsKLX0gOwotCi0vKgotICogVHlwZXMgZm9yIHRoZSBCRV9RVUVVRV9DT05URVhUIG9iamVjdC4KLSAqLwotI2RlZmluZSBCRV9RVUVVRV9JTlZBTElECSgwKQotI2RlZmluZSBCRV9RVUVVRV9MSU5LX1NUQVRVUwkoMHhBMDA2KQotI2RlZmluZSBCRV9RVUVVRV9FVEhfU1RBVFMJKDB4QTAwNykKLSNkZWZpbmUgQkVfUVVFVUVfVFBNX1NUQVRTCSgweEEwMDgpCi0jZGVmaW5lIEJFX1FVRVVFX1RDUF9TVEFUUwkoMHhBMDA5KQotI2RlZmluZSBCRV9RVUVVRV9NVUxUSUNBU1QJKDB4QTAwQSkKLSNkZWZpbmUgQkVfUVVFVUVfVkxBTgkJKDB4QTAwQikKLSNkZWZpbmUgQkVfUVVFVUVfUlNTCQkoMHhBMDBDKQotI2RlZmluZSBCRV9RVUVVRV9GT1JDRV9GQUlMT1ZFUgkoMHhBMDBEKQotI2RlZmluZSBCRV9RVUVVRV9QUk9NSVNDVU9VUwkoMHhBMDBFKQotI2RlZmluZSBCRV9RVUVVRV9XQUtFX09OX0xBTgkoMHhBMDBGKQotI2RlZmluZSBCRV9RVUVVRV9OT1AJCSgweEEwMTApCi0KLS8qIC0tLSBCRV9GVU5DVElPTl9FTlVNIC0tLSAqLwotI2RlZmluZSBCRV9GVU5DVElPTl9UWVBFX0lTQ1NJICAgICAgICAgICgwKQotI2RlZmluZSBCRV9GVU5DVElPTl9UWVBFX05FVFdPUksgICAgICAgICgxKQotI2RlZmluZSBCRV9GVU5DVElPTl9UWVBFX0FSTSAgICAgICAgICAgICgyKQotCi0vKiAtLS0gQkVfRVRIX1RYX1JJTkdfVFlQRV9FTlVNIC0tLSAqLwotI2RlZmluZSBCRV9FVEhfVFhfUklOR19UWVBFX0ZPUldBUkRJTkcgICgxKSAJLyogRXRoZXIgcmluZyBmb3IgZm9yd2FyZGluZyAqLwotI2RlZmluZSBCRV9FVEhfVFhfUklOR19UWVBFX1NUQU5EQVJEICAgICgyKQkvKiBFdGhlciByaW5nIGZvciBzZW5kaW5nICovCi0JCQkJCQkvKiBuZXR3b3JrIHBhY2tldHMuICovCi0jZGVmaW5lIEJFX0VUSF9UWF9SSU5HX1RZUEVfQk9VTkQgICAgICAgKDMpCS8qIEV0aGVybmV0IHJpbmcgZm9yIHNlbmRpbmcgKi8KLQkJCQkJCS8qIG5ldHdvcmsgcGFja2V0cywgYm91bmQgKi8KLQkJCQkJCS8qIHRvIGEgcGh5c2ljYWwgcG9ydC4gKi8KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgIEFQSSBNQUNST1MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXykgICAgIHN0cnVjdCBGV0NNRF8jI19zaG9ydF9uYW1lXwotI2RlZmluZSBCRV9PUENPREVfTkFNRShfc2hvcnRfbmFtZV8pICAgIE9QQ09ERV8jI19zaG9ydF9uYW1lXwotI2RlZmluZSBCRV9TVUJTWVNURU1fTkFNRShfc2hvcnRfbmFtZV8pIFNVQlNZU1RFTV8jI19zaG9ydF9uYW1lXwotCi0KLSNkZWZpbmUgQkVfUFJFUEFSRV9FTUJFRERFRF9GV0NNRChfcGZvYl8sIF93cmJfLCBfc2hvcnRfbmFtZV8pCVwKLQkoKEJFX0ZXQ01EX05BTUUoX3Nob3J0X25hbWVfKSAqKQkJCQlcCi0JYmVfZnVuY3Rpb25fcHJlcGFyZV9lbWJlZGRlZF9md2NtZChfcGZvYl8sIF93cmJfLAlcCi0JCXNpemVvZihCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXykpLAkJXAotCQlGSUVMRF9TSVpFT0YoQkVfRldDTURfTkFNRShfc2hvcnRfbmFtZV8pLCBwYXJhbXMucmVxdWVzdCksIFwKLQkJRklFTERfU0laRU9GKEJFX0ZXQ01EX05BTUUoX3Nob3J0X25hbWVfKSwgcGFyYW1zLnJlc3BvbnNlKSwgXAotCQlCRV9PUENPREVfTkFNRShfc2hvcnRfbmFtZV8pLAkJCQlcCi0JCUJFX1NVQlNZU1RFTV9OQU1FKF9zaG9ydF9uYW1lXykpKTsKLQotI2RlZmluZSBCRV9QUkVQQVJFX05PTkVNQkVEREVEX0ZXQ01EKF9wZm9iXywgX3dyYl8sIF9pdmFfLCBfaXBhXywgX3Nob3J0X25hbWVfKVwKLQkoKEJFX0ZXQ01EX05BTUUoX3Nob3J0X25hbWVfKSAqKQkJCQlcCi0JYmVfZnVuY3Rpb25fcHJlcGFyZV9ub25lbWJlZGRlZF9md2NtZChfcGZvYl8sIF93cmJfLCAoX2l2YV8pLCAoX2lwYV8pLCBcCi0JCXNpemVvZihCRV9GV0NNRF9OQU1FKF9zaG9ydF9uYW1lXykpLAkJXAotCQlGSUVMRF9TSVpFT0YoQkVfRldDTURfTkFNRShfc2hvcnRfbmFtZV8pLCBwYXJhbXMucmVxdWVzdCksIFwKLQkJRklFTERfU0laRU9GKEJFX0ZXQ01EX05BTUUoX3Nob3J0X25hbWVfKSwgcGFyYW1zLnJlc3BvbnNlKSwgXAotCQlCRV9PUENPREVfTkFNRShfc2hvcnRfbmFtZV8pLAkJCQlcCi0JCUJFX1NVQlNZU1RFTV9OQU1FKF9zaG9ydF9uYW1lXykpKTsKLQotaW50IGJlX2Z1bmN0aW9uX29iamVjdF9jcmVhdGUodTggX19pb21lbSAqY3NyX3ZhLCB1OCBfX2lvbWVtICpkYl92YSwKLQl1OCBfX2lvbWVtICpwY2lfdmEsIHUzMiBmdW5jdGlvbl90eXBlLCBzdHJ1Y3QgcmluZ19kZXNjICptYWlsYm94X3JkLAotCSAgc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYik7Ci0KLWludCBiZV9mdW5jdGlvbl9vYmplY3RfZGVzdHJveShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKTsKLWludCBiZV9mdW5jdGlvbl9jbGVhbnVwKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpOwotCi0KLWludCBiZV9mdW5jdGlvbl9nZXRfZndfdmVyc2lvbihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCXN0cnVjdCBGV0NNRF9DT01NT05fR0VUX0ZXX1ZFUlNJT05fUkVTUE9OU0VfUEFZTE9BRCAqZndfdmVyc2lvbiwKLQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCk7Ci0KLQotaW50IGJlX2VxX21vZGlmeV9kZWxheShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkgICB1MzIgbnVtX2VxLCBzdHJ1Y3QgYmVfZXFfb2JqZWN0ICoqZXFfYXJyYXksCi0JCSAgIHUzMiAqZXFfZGVsYXlfYXJyYXksIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCQkgICB2b2lkICpjYl9jb250ZXh0LAotCQkgICBzdHJ1Y3QgYmVfZXFfbW9kaWZ5X2RlbGF5X3FfY3R4dCAqcV9jdHh0KTsKLQotCi0KLWludCBiZV9lcV9jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkgICAgIHN0cnVjdCByaW5nX2Rlc2MgKnJkLCB1MzIgZXFlX3NpemUsIHUzMiBudW1fZW50cmllcywKLQkgICAgIHUzMiB3YXRlcm1hcmssIHUzMiB0aW1lcl9kZWxheSwgc3RydWN0IGJlX2VxX29iamVjdCAqZXFfb2JqZWN0KTsKLQotaW50IGJlX2VxX2Rlc3Ryb3koc3RydWN0IGJlX2VxX29iamVjdCAqZXEpOwotCi1pbnQgYmVfY3FfY3JlYXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0Jc3RydWN0IHJpbmdfZGVzYyAqcmQsIHUzMiBsZW5ndGgsCi0JYm9vbCBzb2xpY2l0ZWRfZXZlbnRhYmxlLCBib29sIG5vX2RlbGF5LAotCXUzMiB3bV90aHJlc2gsIHN0cnVjdCBiZV9lcV9vYmplY3QgKmVxX29iamVjdCwKLQlzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QpOwotCi1pbnQgYmVfY3FfZGVzdHJveShzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcSk7Ci0KLWludCBiZV9tY2NfcmluZ19jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgc3RydWN0IHJpbmdfZGVzYyAqcmQsIHUzMiBsZW5ndGgsCi0JCSAgIHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKmNvbnRleHRfYXJyYXksCi0JCSAgIHUzMiBudW1fY29udGV4dF9lbnRyaWVzLAotCQkgICBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcSwgc3RydWN0IGJlX21jY19vYmplY3QgKm1jYyk7Ci1pbnQgYmVfbWNjX3JpbmdfZGVzdHJveShzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjX29iamVjdCk7Ci0KLWludCBiZV9tY2NfcHJvY2Vzc19jcShzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjX29iamVjdCwgYm9vbCByZWFybSk7Ci0KLWludCBiZV9tY2NfYWRkX2FzeW5jX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2Nfb2JqZWN0LAotCQltY2NfYXN5bmNfZXZlbnRfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQpOwotCi1pbnQgYmVfcGNpX3NvZnRfcmVzZXQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYik7Ci0KLQotaW50IGJlX2RyaXZlX1BPU1Qoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYik7Ci0KLQotaW50IGJlX2V0aF9zcV9jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJc3RydWN0IHJpbmdfZGVzYyAqcmQsIHUzMiBsZW5ndGhfaW5fYnl0ZXMsCi0JCXUzMiB0eXBlLCB1MzIgdWxwLCBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QsCi0JCXN0cnVjdCBiZV9ldGhzcV9vYmplY3QgKmV0aF9zcSk7Ci0KLXN0cnVjdCBiZV9ldGhfc3FfcGFyYW1ldGVycyB7Ci0JdTMyIHBvcnQ7Ci0JdTMyIHJzdmQwWzJdOwotfSA7Ci0KLWludCBiZV9ldGhfc3FfY3JlYXRlX2V4KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICBzdHJ1Y3QgcmluZ19kZXNjICpyZCwgdTMyIGxlbmd0aF9pbl9ieXRlcywKLQkJICAgIHUzMiB0eXBlLCB1MzIgdWxwLCBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QsCi0JCSAgICBzdHJ1Y3QgYmVfZXRoX3NxX3BhcmFtZXRlcnMgKmV4X3BhcmFtZXRlcnMsCi0JCSAgICBzdHJ1Y3QgYmVfZXRoc3Ffb2JqZWN0ICpldGhfc3EpOwotaW50IGJlX2V0aF9zcV9kZXN0cm95KHN0cnVjdCBiZV9ldGhzcV9vYmplY3QgKmV0aF9zcSk7Ci0KLWludCBiZV9ldGhfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJYm9vbCB0eGZjX2VuYWJsZSwgYm9vbCByeGZjX2VuYWJsZSk7Ci0KLWludCBiZV9ldGhfZ2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJYm9vbCAqdHhmY19lbmFibGUsIGJvb2wgKnJ4ZmNfZW5hYmxlKTsKLWludCBiZV9ldGhfc2V0X3FvcyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLCB1MzIgbWF4X2JwcywgdTMyIG1heF9wcHMpOwotCi1pbnQgYmVfZXRoX2dldF9xb3Moc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwgdTMyICptYXhfYnBzLCB1MzIgKm1heF9wcHMpOwotCi1pbnQgYmVfZXRoX3NldF9mcmFtZV9zaXplKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICAgIHUzMiAqdHhfZnJhbWVfc2l6ZSwgdTMyICpyeF9mcmFtZV9zaXplKTsKLQotaW50IGJlX2V0aF9ycV9jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJIHN0cnVjdCByaW5nX2Rlc2MgKnJkLCBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcV9vYmplY3QsCi0JCSBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpiY21jX2NxX29iamVjdCwKLQkJIHN0cnVjdCBiZV9ldGhycV9vYmplY3QgKmV0aF9ycSk7Ci0KLWludCBiZV9ldGhfcnFfZGVzdHJveShzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0ICpldGhfcnEpOwotCi1pbnQgYmVfZXRoX3JxX2Rlc3Ryb3lfb3B0aW9ucyhzdHJ1Y3QgYmVfZXRocnFfb2JqZWN0ICpldGhfcnEsIGJvb2wgZmx1c2gsCi0JCW1jY193cmJfY3FlX2NhbGxiYWNrIGNiLCB2b2lkICpjYl9jb250ZXh0KTsKLWludCBiZV9ldGhfcnFfc2V0X2ZyYWdfc2l6ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQl1MzIgbmV3X2ZyYWdfc2l6ZV9ieXRlcywgdTMyICphY3R1YWxfZnJhZ19zaXplX2J5dGVzKTsKLWludCBiZV9ldGhfcnFfZ2V0X2ZyYWdfc2l6ZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJCQkJdTMyICpmcmFnX3NpemVfYnl0ZXMpOwotCi12b2lkICpiZV9mdW5jdGlvbl9wcmVwYXJlX2VtYmVkZGVkX2Z3Y21kKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIHN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwKLQkJICAgdTMyIHBheWxvYWRfbGVuZ3RoLCB1MzIgcmVxdWVzdF9sZW5ndGgsCi0JCSAgIHUzMiByZXNwb25zZV9sZW5ndGgsIHUzMiBvcGNvZGUsIHUzMiBzdWJzeXN0ZW0pOwotdm9pZCAqYmVfZnVuY3Rpb25fcHJlcGFyZV9ub25lbWJlZGRlZF9md2NtZChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwgdm9pZCAqZndjbWRfaGVhZGVyX3ZhLCB1NjQgZndjbWRfaGVhZGVyX3BhLAotCXUzMiBwYXlsb2FkX2xlbmd0aCwgdTMyIHJlcXVlc3RfbGVuZ3RoLCB1MzIgcmVzcG9uc2VfbGVuZ3RoLAotCXUzMiBvcGNvZGUsIHUzMiBzdWJzeXN0ZW0pOwotCi0KLXN0cnVjdCBNQ0NfV1JCX0FNQVAgKgotYmVfZnVuY3Rpb25fcGVla19tY2Nfd3JiKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpOwotCi1pbnQgYmVfcnhmX21hY19hZGRyZXNzX3JlYWRfd3JpdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkgICAgICBib29sIHBvcnQxLCBib29sIG1hYzEsIGJvb2wgbWdtdCwKLQkgICAgICBib29sIHdyaXRlLCBib29sIHBlcm1hbmVudCwgdTggKm1hY19hZGRyZXNzLAotCSAgICAgIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCSAgICAgIHZvaWQgKmNiX2NvbnRleHQpOwotCi1pbnQgYmVfcnhmX211bHRpY2FzdF9jb25maWcoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCWJvb2wgcHJvbWlzY3VvdXMsIHUzMiBudW0sIHU4ICptYWNfdGFibGUsCi0JCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJCXZvaWQgKmNiX2NvbnRleHQsCi0JCQlzdHJ1Y3QgYmVfbXVsdGljYXN0X3FfY3R4dCAqcV9jdHh0KTsKLQotaW50IGJlX3J4Zl92bGFuX2NvbmZpZyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCSAgIGJvb2wgcHJvbWlzY3VvdXMsIHUzMiBudW0sIHUxNiAqdmxhbl90YWdfYXJyYXksCi0JICAgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQsCi0JICAgc3RydWN0IGJlX3ZsYW5fcV9jdHh0ICpxX2N0eHQpOwotCi0KLWludCBiZV9yeGZfbGlua19zdGF0dXMoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgc3RydWN0IEJFX0xJTktfU1RBVFVTICpsaW5rX3N0YXR1cywKLQkJICAgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCSAgIHZvaWQgKmNiX2NvbnRleHQsCi0JCSAgIHN0cnVjdCBiZV9saW5rX3N0YXR1c19xX2N0eHQgKnFfY3R4dCk7Ci0KLQotaW50IGJlX3J4Zl9xdWVyeV9ldGhfc3RhdGlzdGljcyhzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlzdHJ1Y3QgRldDTURfRVRIX0dFVF9TVEFUSVNUSUNTICp2YV9mb3JfZndjbWQsCi0JCXU2NCBwYV9mb3JfZndjbWQsIG1jY193cmJfY3FlX2NhbGxiYWNrIGNiLAotCQl2b2lkICpjYl9jb250ZXh0LAotCQlzdHJ1Y3QgYmVfbm9uZW1iZWRkZWRfcV9jdHh0ICpxX2N0eHQpOwotCi1pbnQgYmVfcnhmX3Byb21pc2N1b3VzKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgIGJvb2wgZW5hYmxlX3BvcnQwLCBib29sIGVuYWJsZV9wb3J0MSwKLQkJICAgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQsCi0JCSAgIHN0cnVjdCBiZV9wcm9taXNjdW91c19xX2N0eHQgKnFfY3R4dCk7Ci0KLQotaW50IGJlX3J4Zl9maWx0ZXJfY29uZmlnKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCSAgICAgc3RydWN0IE5UV0tfUlhfRklMVEVSX1NFVFRJTkdTICpzZXR0aW5ncywKLQkJICAgICBtY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwKLQkJICAgICB2b2lkICpjYl9jb250ZXh0LAotCQkgICAgIHN0cnVjdCBiZV9yeGZfZmlsdGVyX3FfY3R4dCAqcV9jdHh0KTsKLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIGludGVybmFsIGZ1bmN0aW9ucyB1c2VkIGJ5IGh3bGliCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0KLWludCBiZV9mdW5jdGlvbl9yaW5nX2Rlc3Ryb3koc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgICAgIHUzMiBpZCwgdTMyIHJpbmdfdHlwZSwgbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IsCi0JCSAgICAgICB2b2lkICpjYl9jb250ZXh0LAotCQkgICAgICAgbWNjX3dyYl9jcWVfY2FsbGJhY2sgaW50ZXJuYWxfY2IsCi0JCSAgICAgICB2b2lkICppbnRlcm5hbF9jYWxsYmFja19jb250ZXh0KTsKLQotaW50IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsCi0JCXN0cnVjdCBiZV9nZW5lcmljX3FfY3R4dCAqcV9jdHh0LAotCQltY2Nfd3JiX2NxZV9jYWxsYmFjayBjYiwgdm9pZCAqY2JfY29udGV4dCwKLQkJbWNjX3dyYl9jcWVfY2FsbGJhY2sgaW50ZXJuYWxfY2IsCi0JCXZvaWQgKmludGVybmFsX2NiX2NvbnRleHQsIHZvaWQgKm9wdGlvbmFsX2Z3Y21kX3ZhLAotCQlzdHJ1Y3QgYmVfbWNjX3dyYl9yZXNwb25zZV9jb3B5ICpyZXNwb25zZV9jb3B5KTsKLQotaW50IGJlX2Z1bmN0aW9uX3F1ZXVlX21jY193cmIoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJCSAgc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpxX2N0eHQpOwotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTUNDIFFVRVVFCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1pbnQgYmVfbXB1X2luaXRfbWFpbGJveChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLCBzdHJ1Y3QgcmluZ19kZXNjICpyZCk7Ci0KLQotc3RydWN0IE1DQ19XUkJfQU1BUCAqCi1fYmVfbXB1X3BlZWtfcmluZ193cmIoc3RydWN0IGJlX21jY19vYmplY3QgKm1jYywgYm9vbCBkcml2aW5nX3F1ZXVlKTsKLQotc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqCi1fYmVfbWNjX2FsbG9jYXRlX3dyYl9jb250ZXh0KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpOwotCi12b2lkIF9iZV9tY2NfZnJlZV93cmJfY29udGV4dChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJIHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKmNvbnRleHQpOwotCi1pbnQgX2JlX21wdV9wb3N0X3dyYl9tYWlsYm94KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JIHN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiwgc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqd3JiX2NvbnRleHQpOwotCi1pbnQgX2JlX21wdV9wb3N0X3dyYl9yaW5nKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MsCi0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLCBzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICp3cmJfY29udGV4dCk7Ci0KLXZvaWQgYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjKTsKLQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUmluZyBTaXplcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGJlX3JpbmdfZW5jb2RpbmdfdG9fbGVuZ3RoKHUzMiBlbmNvZGluZywgdTMyIG9iamVjdF9zaXplKQotewotCi0JQVNTRVJUKGVuY29kaW5nICE9IDEpOwkvKiAxIGlzIHJzdmQgKi8KLQlBU1NFUlQoZW5jb2RpbmcgPCAxNik7Ci0JQVNTRVJUKG9iamVjdF9zaXplID4gMCk7Ci0KLQlpZiAoZW5jb2RpbmcgPT0gMCkJLyogMzJrIGRlZXAgKi8KLQkJZW5jb2RpbmcgPSAxNjsKLQotCXJldHVybiAoMSA8PCAoZW5jb2RpbmcgLSAxKSkgKiBvYmplY3Rfc2l6ZTsKLX0KLQotc3RhdGljIGlubGluZQotdTMyIGJlX3JpbmdfbGVuZ3RoX3RvX2VuY29kaW5nKHUzMiBsZW5ndGhfaW5fYnl0ZXMsIHUzMiBvYmplY3Rfc2l6ZSkKLXsKLQotCXUzMiBjb3VudCwgZW5jb2Rpbmc7Ci0KLQlBU1NFUlQob2JqZWN0X3NpemUgPiAwKTsKLQlBU1NFUlQobGVuZ3RoX2luX2J5dGVzICUgb2JqZWN0X3NpemUgPT0gMCk7Ci0KLQljb3VudCA9IGxlbmd0aF9pbl9ieXRlcyAvIG9iamVjdF9zaXplOwotCi0JQVNTRVJUKGNvdW50ID4gMSk7Ci0JQVNTRVJUKGNvdW50IDw9IDMyICogMTAyNCk7Ci0JQVNTRVJUKGxlbmd0aF9pbl9ieXRlcyA8PSA4ICogUEFHRV9TSVpFKTsgLyogbWF4IHJpbmcgc2l6ZSBpbiBVVCAqLwotCi0JZW5jb2RpbmcgPSBfX2lsb2cyX3UzMihjb3VudCkgKyAxOwotCi0JaWYgKGVuY29kaW5nID09IDE2KQotCQllbmNvZGluZyA9IDA7CS8qIDMyayBkZWVwICovCi0KLQlyZXR1cm4gZW5jb2Rpbmc7Ci19Ci0KLXZvaWQgYmVfcmRfdG9fcGFfbGlzdChzdHJ1Y3QgcmluZ19kZXNjICpyZCwgc3RydWN0IFBIWVNfQUREUiAqcGFfbGlzdCwKLQkJCQkJCXUzMiBtYXhfbnVtKTsKLSNlbmRpZiAvKiBfX2h3bGliX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L21wdS5jIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L21wdS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjljYzExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHUuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiaHdsaWIuaCIKLSNpbmNsdWRlICJiZXN0YXR1cy5oIgotCi1zdGF0aWMKLWlubGluZSB2b2lkIG1wX3JpbmdfY3JlYXRlKHN0cnVjdCBtcF9yaW5nICpyaW5nLCB1MzIgbnVtLCB1MzIgc2l6ZSwgdm9pZCAqdmEpCi17Ci0JQVNTRVJUKHJpbmcpOwotCW1lbXNldChyaW5nLCAwLCBzaXplb2Yoc3RydWN0IG1wX3JpbmcpKTsKLQlyaW5nLT5udW0gPSBudW07Ci0JcmluZy0+cGFnZXMgPSBESVZfUk9VTkRfVVAobnVtICogc2l6ZSwgUEFHRV9TSVpFKTsKLQlyaW5nLT5pdGVtU2l6ZSA9IHNpemU7Ci0JcmluZy0+dmEgPSB2YTsKLX0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbnRlcmZhY2UgZm9yIDIgaW5kZXggcmluZ3MuIGkuZS4gY29uc3VtZXIvcHJvZHVjZXIgcmluZ3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyogUmV0dXJucyBudW1iZXIgaXRlbXMgcGVuZGluZyBvbiByaW5nLiAqLwotc3RhdGljIGlubGluZSB1MzIgbXBfcmluZ19udW1fcGVuZGluZyhzdHJ1Y3QgbXBfcmluZyAqcmluZykKLXsKLQlBU1NFUlQocmluZyk7Ci0JaWYgKHJpbmctPm51bSA9PSAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gYmVfc3ViYyhyaW5nLT5waWR4LCByaW5nLT5jaWR4LCByaW5nLT5udW0pOwotfQotCi0vKiBSZXR1cm5zIG51bWJlciBpdGVtcyBmcmVlIG9uIHJpbmcuICovCi1zdGF0aWMgaW5saW5lIHUzMiBtcF9yaW5nX251bV9lbXB0eShzdHJ1Y3QgbXBfcmluZyAqcmluZykKLXsKLQlBU1NFUlQocmluZyk7Ci0JcmV0dXJuIHJpbmctPm51bSAtIDEgLSBtcF9yaW5nX251bV9wZW5kaW5nKHJpbmcpOwotfQotCi0vKiBDb25zdW1lIDEgaXRlbSAqLwotc3RhdGljIGlubGluZSB2b2lkIG1wX3JpbmdfY29uc3VtZShzdHJ1Y3QgbXBfcmluZyAqcmluZykKLXsKLQlBU1NFUlQocmluZyk7Ci0JQVNTRVJUKHJpbmctPnBpZHggIT0gcmluZy0+Y2lkeCk7Ci0KLQlyaW5nLT5jaWR4ID0gYmVfYWRkYyhyaW5nLT5jaWR4LCAxLCByaW5nLT5udW0pOwotfQotCi0vKiBQcm9kdWNlIDEgaXRlbSAqLwotc3RhdGljIGlubGluZSB2b2lkIG1wX3JpbmdfcHJvZHVjZShzdHJ1Y3QgbXBfcmluZyAqcmluZykKLXsKLQlBU1NFUlQocmluZyk7Ci0JcmluZy0+cGlkeCA9IGJlX2FkZGMocmluZy0+cGlkeCwgMSwgcmluZy0+bnVtKTsKLX0KLQotLyogQ29uc3VtZSBjb3VudCBpdGVtcyAqLwotc3RhdGljIGlubGluZSB2b2lkIG1wX3JpbmdfY29uc3VtZV9tdWx0aXBsZShzdHJ1Y3QgbXBfcmluZyAqcmluZywgdTMyIGNvdW50KQotewotCUFTU0VSVChyaW5nKTsKLQlBU1NFUlQobXBfcmluZ19udW1fcGVuZGluZyhyaW5nKSA+PSBjb3VudCk7Ci0JcmluZy0+Y2lkeCA9IGJlX2FkZGMocmluZy0+Y2lkeCwgY291bnQsIHJpbmctPm51bSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqbXBfcmluZ19pdGVtKHN0cnVjdCBtcF9yaW5nICpyaW5nLCB1MzIgaW5kZXgpCi17Ci0JQVNTRVJUKHJpbmcpOwotCUFTU0VSVChpbmRleCA8IHJpbmctPm51bSk7Ci0JQVNTRVJUKHJpbmctPml0ZW1TaXplID4gMCk7Ci0JcmV0dXJuICh1OCAqKSByaW5nLT52YSArIGluZGV4ICogcmluZy0+aXRlbVNpemU7Ci19Ci0KLS8qIFB0ciB0byBwcm9kdWNlIGl0ZW0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqbXBfcmluZ19wcm9kdWNlcl9wdHIoc3RydWN0IG1wX3JpbmcgKnJpbmcpCi17Ci0JQVNTRVJUKHJpbmcpOwotCXJldHVybiBtcF9yaW5nX2l0ZW0ocmluZywgcmluZy0+cGlkeCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiB0aGUgcmluZy4KLSAqIFRoaXMgaXMgdXNlZCBmb3IgcmluZ3Mgd2l0aCAxIGluZGV4LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKm1wX3JpbmdfY3VycmVudChzdHJ1Y3QgbXBfcmluZyAqcmluZykKLXsKLQlBU1NFUlQocmluZyk7Ci0JQVNTRVJUKHJpbmctPnBpZHggPT0gMCk7CS8qIG5vdCB1c2VkICovCi0KLQlyZXR1cm4gbXBfcmluZ19pdGVtKHJpbmcsIHJpbmctPmNpZHgpOwotfQotCi0vKgotICogSW5jcmVtZW50IGluZGV4IGZvciByaW5ncyB3aXRoIG9ubHkgMSBpbmRleC4KLSAqIFRoaXMgaXMgdXNlZCBmb3IgcmluZ3Mgd2l0aCAxIGluZGV4LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKm1wX3JpbmdfbmV4dChzdHJ1Y3QgbXBfcmluZyAqcmluZykKLXsKLQlBU1NFUlQocmluZyk7Ci0JQVNTRVJUKHJpbmctPm51bSA+IDApOwotCUFTU0VSVChyaW5nLT5waWR4ID09IDApOwkvKiBub3QgdXNlZCAqLwotCi0JcmluZy0+Y2lkeCA9IGJlX2FkZGMocmluZy0+Y2lkeCwgMSwgcmluZy0+bnVtKTsKLQlyZXR1cm4gbXBfcmluZ19jdXJyZW50KHJpbmcpOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSB3YWl0cyBmb3IgYSBwcmV2aW91c2x5IHBvc3RlZCBtYWlsYm94IFdSQiB0byBiZSBjb21wbGV0ZWQuCi0gICAgU3BlY2lmaWNhbGx5IGl0IHdhaXRzIGZvciB0aGUgbWFpbGJveCB0byBzYXkgdGhhdCBpdCdzIHJlYWR5IHRvIGFjY2VwdAotICAgIG1vcmUgZGF0YSBieSBzZXR0aW5nIHRoZSBMU0Igb2YgdGhlIG1haWxib3ggcGQgcmVnaXN0ZXIgdG8gMS4KLQotICAgIHBjb250cm9sbGVyICAgICAgLSBUaGUgZnVuY3Rpb24gb2JqZWN0IHRvIHBvc3QgdGhpcyBkYXRhIHRvCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLSovCi1zdGF0aWMgdm9pZCBiZV9tY2NfbWFpbGJveF93YWl0KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0Jc3RydWN0IE1QVV9NQUlMQk9YX0RCX0FNQVAgbWFpbGJveF9kYjsKLQl1MzIgaSA9IDA7Ci0JdTMyIHJlYWR5OwotCi0JaWYgKHBmb2ItPmVtdWxhdGUpIHsKLQkJLyogTm8gd2FpdGluZyBmb3IgbWFpbGJveCBpbiBlbXVsYXRlZCBtb2RlLiAqLwotCQlyZXR1cm47Ci0JfQotCi0JbWFpbGJveF9kYi5kd1swXSA9IFBEX1JFQUQocGZvYiwgbWNjX2Jvb3RzdHJhcF9kYik7Ci0JcmVhZHkgPSBBTUFQX0dFVF9CSVRTX1BUUihNUFVfTUFJTEJPWF9EQiwgcmVhZHksICZtYWlsYm94X2RiKTsKLQotCXdoaWxlIChyZWFkeSA9PSBmYWxzZSkgewotCQlpZiAoKCsraSAmIDB4M0ZGRkYpID09IDApIHsKLQkJCVRSQUNFKERMX1dBUk4sICJXYWl0aW5nIGZvciBtYWlsYm94IHJlYWR5IC0gJWRrIHBvbGxzIiwKLQkJCQkJCQkJaSAvIDEwMDApOwotCQl9Ci0JCXVkZWxheSgxKTsKLQkJbWFpbGJveF9kYi5kd1swXSA9IFBEX1JFQUQocGZvYiwgbWNjX2Jvb3RzdHJhcF9kYik7Ci0JCXJlYWR5ID0gQU1BUF9HRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIHJlYWR5LCAmbWFpbGJveF9kYik7Ci0JfQotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSB0ZWxscyB0aGUgTUNDIG1haWxib3ggdGhhdCB0aGVyZSBpcyBkYXRhIHRvIHByb2Nlc3NlZAotICAgIGluIHRoZSBtYWlsYm94LiBJdCBkb2VzIHRoaXMgYnkgc2V0dGluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhlCi0gICAgbWFpbGJveCBsb2NhdGlvbiBhbmQgY2xlYXJpbmcgdGhlIExTQi4gIFRoaXMgcm91dGluZSByZXR1cm5zIGltbWVkaWF0ZWx5Ci0gICAgYW5kIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBXUkIgdG8gYmUgcHJvY2Vzc2VkLgotCi0gICAgcGNvbnRyb2xsZXIgICAgICAtIFRoZSBmdW5jdGlvbiBvYmplY3QgdG8gcG9zdCB0aGlzIGRhdGEgdG8KLQotICAgIElSUUwgPCBESVNQQVRDSF9MRVZFTAotCi0qLwotc3RhdGljIHZvaWQgYmVfbWNjX21haWxib3hfbm90aWZ5KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0Jc3RydWN0IE1QVV9NQUlMQk9YX0RCX0FNQVAgbWFpbGJveF9kYjsKLQl1MzIgcGE7Ci0KLQlBU1NFUlQocGZvYi0+bWFpbGJveC5wYSk7Ci0JQVNTRVJUKHBmb2ItPm1haWxib3gudmEpOwotCi0JLyogSWYgZW11bGF0ZWQsIGRvIG5vdCByaW5nIHRoZSBtYWlsYm94ICovCi0JaWYgKHBmb2ItPmVtdWxhdGUpIHsKLQkJVFJBQ0UoRExfV0FSTiwgIk1QVSBkaXNhYmxlZC4gU2tpcHBpbmcgbWFpbGJveCBub3RpZnkuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBmb3JtIHRoZSBoaWdoZXIgYml0cyBpbiB0aGUgYWRkcmVzcyAqLwotCW1haWxib3hfZGIuZHdbMF0gPSAwOwkvKiBpbml0ICovCi0JQU1BUF9TRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIGhpLCAmbWFpbGJveF9kYiwgMSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIHJlYWR5LCAmbWFpbGJveF9kYiwgMCk7Ci0KLQkvKiBiaXRzIDM0IHRvIDYzICovCi0JcGEgPSAodTMyKSAocGZvYi0+bWFpbGJveC5wYSA+PiAzNCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIGFkZHJlc3MsICZtYWlsYm94X2RiLCBwYSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgTVBVIHRvIGJlIHJlYWR5ICovCi0JYmVfbWNjX21haWxib3hfd2FpdChwZm9iKTsKLQotCS8qIFJpbmcgZG9vcmJlbGwgMXN0IHRpbWUgKi8KLQlQRF9XUklURShwZm9iLCBtY2NfYm9vdHN0cmFwX2RiLCBtYWlsYm94X2RiLmR3WzBdKTsKLQotCS8qIFdhaXQgZm9yIDFzdCB3cml0ZSB0byBiZSBhY2tub3dsZWRnZWQuICovCi0JYmVfbWNjX21haWxib3hfd2FpdChwZm9iKTsKLQotCS8qIGxvd2VyIGJpdHMgMzAgYml0cyBmcm9tIDR0aCBiaXQgKGJpdHMgNCB0byAzMykqLwotCXBhID0gKHUzMikgKHBmb2ItPm1haWxib3gucGEgPj4gNCkgJiAweDNGRkZGRkZGOwotCi0JQU1BUF9TRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIGhpLCAmbWFpbGJveF9kYiwgMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIHJlYWR5LCAmbWFpbGJveF9kYiwgMCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTVBVX01BSUxCT1hfREIsIGFkZHJlc3MsICZtYWlsYm94X2RiLCBwYSk7Ci0KLQkvKiBSaW5nIGRvb3JiZWxsIDJuZCB0aW1lICovCi0JUERfV1JJVEUocGZvYiwgbWNjX2Jvb3RzdHJhcF9kYiwgbWFpbGJveF9kYi5kd1swXSk7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIHRlbGxzIHRoZSBNQ0MgbWFpbGJveCB0aGF0IHRoZXJlIGlzIGRhdGEgdG8gcHJvY2Vzc2VkCi0gICAgaW4gdGhlIG1haWxib3guIEl0IGRvZXMgdGhpcyBieSBzZXR0aW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUKLSAgICBtYWlsYm94IGxvY2F0aW9uIGFuZCBjbGVhcmluZyB0aGUgTFNCLiAgVGhpcyByb3V0aW5lIHNwaW5zIHVudGlsIHRoZQotICAgIE1QVSB3cml0ZXMgYSAxIGludG8gdGhlIExTQiBpbmRpY2F0aW5nIHRoYXQgdGhlIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQKLSAgICBhbmQgaXMgcmVhZHkgdG8gYmUgcHJvY2Vzc2VkLgotCi0gICAgcGNvbnRyb2xsZXIgICAgICAtIFRoZSBmdW5jdGlvbiBvYmplY3QgdG8gcG9zdCB0aGlzIGRhdGEgdG8KLQotICAgIElSUUwgPCBESVNQQVRDSF9MRVZFTAotKi8KLXN0YXRpYyB2b2lkCi1iZV9tY2NfbWFpbGJveF9ub3RpZnlfYW5kX3dhaXQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQkvKgotCSAqIE5vdGlmeSBpdAotCSAqLwotCWJlX21jY19tYWlsYm94X25vdGlmeShwZm9iKTsKLQkvKgotCSAqIE5vdyB3YWl0IGZvciBjb21wbGV0aW9uIG9mIFdSQgotCSAqLwotCWJlX21jY19tYWlsYm94X3dhaXQocGZvYik7Ci19Ci0KLXZvaWQKLWJlX21jY19wcm9jZXNzX2NxZShzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLAotCQkJCXN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCAqY3FlKQotewotCXN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKndyYl9jb250ZXh0ID0gTlVMTDsKLQl1MzIgb2Zmc2V0LCBzdGF0dXM7Ci0JdTggKnA7Ci0KLQlBU1NFUlQoY3FlKTsKLQkvKgotCSAqIEEgY29tbWFuZCBjb21wbGV0ZWQuICBDb21tYW5kcyBjb21wbGV0ZSBvdXQtb2Ytb3JkZXIuCi0JICogRGV0ZXJtaW5lIHdoaWNoIGNvbW1hbmQgY29tcGxldGVkIGZyb20gdGhlIFRBRy4KLQkgKi8KLQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgQkVfTUNDX0NRX0VOVFJZX0FNQVAsIG1jY190YWcpLzg7Ci0JcCA9ICh1OCAqKSBjcWUgKyBvZmZzZXQ7Ci0Jd3JiX2NvbnRleHQgPSAoc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqKSh2b2lkICopKHNpemVfdCkoKih1NjQgKilwKTsKLQlBU1NFUlQod3JiX2NvbnRleHQpOwotCi0JLyoKLQkgKiBQZXJmb3JtIGEgcmVzcG9uc2UgY29weSBpZiByZXF1ZXN0ZWQuCi0JICogT25seSBjb3B5IGRhdGEgaWYgdGhlIEZXQ01EIGlzIHN1Y2Nlc3NmdWwuCi0JICovCi0Jc3RhdHVzID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX0NRX0VOVFJZLCBjb21wbGV0aW9uX3N0YXR1cywgY3FlKTsKLQlpZiAoc3RhdHVzID09IE1HTVRfU1RBVFVTX1NVQ0NFU1MgJiYgd3JiX2NvbnRleHQtPmNvcHkubGVuZ3RoID4gMCkgewotCQlBU1NFUlQod3JiX2NvbnRleHQtPndyYik7Ci0JCUFTU0VSVCh3cmJfY29udGV4dC0+Y29weS52YSk7Ci0JCXAgPSAodTggKil3cmJfY29udGV4dC0+d3JiICsKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgQkVfTUNDX1dSQl9BTUFQLCBwYXlsb2FkKS84OwotCQltZW1jcHkod3JiX2NvbnRleHQtPmNvcHkudmEsCi0JCQkgICh1OCAqKXAgKyB3cmJfY29udGV4dC0+Y29weS5md2NtZF9vZmZzZXQsCi0JCQkgIHdyYl9jb250ZXh0LT5jb3B5Lmxlbmd0aCk7Ci0JfQotCi0JaWYgKHN0YXR1cykKLQkJc3RhdHVzID0gQkVfTk9UX09LOwotCS8qIGludGVybmFsIGNhbGxiYWNrICovCi0JaWYgKHdyYl9jb250ZXh0LT5pbnRlcm5hbF9jYikgewotCQl3cmJfY29udGV4dC0+aW50ZXJuYWxfY2Iod3JiX2NvbnRleHQtPmludGVybmFsX2NiX2NvbnRleHQsCi0JCQkJCQlzdGF0dXMsIHdyYl9jb250ZXh0LT53cmIpOwotCX0KLQotCS8qIGNhbGxiYWNrICovCi0JaWYgKHdyYl9jb250ZXh0LT5jYikgewotCQl3cmJfY29udGV4dC0+Y2Iod3JiX2NvbnRleHQtPmNiX2NvbnRleHQsCi0JCQkJCSAgICAgIHN0YXR1cywgd3JiX2NvbnRleHQtPndyYik7Ci0JfQotCS8qIEZyZWUgdGhlIGNvbnRleHQgc3RydWN0dXJlICovCi0JX2JlX21jY19mcmVlX3dyYl9jb250ZXh0KHBmb2IsIHdyYl9jb250ZXh0KTsKLX0KLQotdm9pZCBiZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MpCi17Ci0Jc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IEJFX1BFTkRJTkc7Ci0Jc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0ICpxX2N0eHQ7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKnF1ZXVlX3dyYjsKLQl1MzIgbGVuZ3RoLCBwYXlsb2FkX2xlbmd0aCwgc2dlX2NvdW50LCBlbWJlZGRlZDsKLQl1bnNpZ25lZCBsb25nIGlycWw7Ci0KLQlCVUlMRF9CVUdfT04oKHNpemVvZihzdHJ1Y3QgYmVfZ2VuZXJpY19xX2N0eHQpIDwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBiZV9xdWV1ZV9kcml2ZXJfY29udGV4dCkgKwotCQkJCQlzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkpKTsKLQlwZm9iID0gbWNjLT5wYXJlbnRfZnVuY3Rpb247Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+cG9zdF9sb2NrLCBpcnFsKTsKLQotCWlmIChtY2MtPmRyaXZpbmdfYmFja2xvZykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJCWJlX2RyaXZlX21jY193cmJfcXVldWUocGZvYi0+bWNjKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCS8qIEFjcXVpcmUgdGhlIGZsYWcgdG8gbGltaXQgMSB0aHJlYWQgdG8gcmVkcml2ZSBwb3N0cy4gKi8KLQltY2MtPmRyaXZpbmdfYmFja2xvZyA9IDE7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm1jYy0+YmFja2xvZykpIHsKLQkJd3JiID0gX2JlX21wdV9wZWVrX3Jpbmdfd3JiKG1jYywgdHJ1ZSk7CS8qIERyaXZpbmcgdGhlIHF1ZXVlICovCi0JCWlmICghd3JiKQotCQkJYnJlYWs7CS8qIE5vIHNwYWNlIGluIHRoZSByaW5nIHlldC4gKi8KLQkJLyogR2V0IHRoZSBuZXh0IHF1ZXVlZCBlbnRyeSB0byBwcm9jZXNzLiAqLwotCQlxX2N0eHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtY2MtPmJhY2tsb2csCi0JCQkJc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0LCBjb250ZXh0Lmxpc3QpOwotCQlsaXN0X2RlbCgmcV9jdHh0LT5jb250ZXh0Lmxpc3QpOwotCQlwZm9iLT5tY2MtPmJhY2tsb2dfbGVuZ3RoLS07Ci0JCS8qCi0JCSAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIGxlbmd0aCBvZiB0aGUgV1JCLgotCQkgKiBTaW5jZSB0aGUgcXVldWUgZWxlbWVudCBtYXkgYmUgc21hbGxlciB0aGFuCi0JCSAqIHRoZSBjb21wbGV0ZSBXUkIsIGNvcHkgb25seSB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLgotCQkgKi8KLQkJcXVldWVfd3JiID0gKHN0cnVjdCBNQ0NfV1JCX0FNQVAgKikgJnFfY3R4dC0+d3JiX2hlYWRlcjsKLQkJZW1iZWRkZWQgPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfV1JCLCBlbWJlZGRlZCwgcXVldWVfd3JiKTsKLQkJaWYgKGVtYmVkZGVkKSB7Ci0JCQlwYXlsb2FkX2xlbmd0aCA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19XUkIsCi0JCQkJCQlwYXlsb2FkX2xlbmd0aCwgcXVldWVfd3JiKTsKLQkJCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIpICsKLQkJCQkJCQkJcGF5bG9hZF9sZW5ndGg7Ci0JCX0gZWxzZSB7Ci0JCQlzZ2VfY291bnQgPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfV1JCLCBzZ2VfY291bnQsCi0JCQkJCQkJCXF1ZXVlX3dyYik7Ci0JCQlBU1NFUlQoc2dlX2NvdW50ID09IDEpOyAvKiBvbmx5IDEgZnJhZy4gKi8KLQkJCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYmVfbWNjX3dyYl9oZWFkZXIpICsKLQkJCSAgICBzZ2VfY291bnQgKiBzaXplb2Yoc3RydWN0IE1DQ19TR0VfQU1BUCk7Ci0JCX0KLQotCQkvKgotCQkgKiBUcnVuY2F0ZSB0aGUgbGVuZ3RoIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZQotCQkgKiBxdWV1ZSBlbGVtZW50LiAgU29tZSBlbGVtZW50cyB0aGF0IGhhdmUgb3V0cHV0IHBhcmFtZXRlcnMKLQkJICogY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgcGF5bG9hZF9sZW5ndGggZmllbGQgd291bGQKLQkJICogaW5kaWNhdGUuICBXZSByZWFsbHkgb25seSBuZWVkIHRvIGNvcHkgdGhlIHJlcXVlc3QKLQkJICogcGFyYW1ldGVycywgbm90IHRoZSByZXNwb25zZS4KLQkJICovCi0JCWxlbmd0aCA9IG1pbihsZW5ndGgsICh1MzIpIChxX2N0eHQtPmNvbnRleHQuYnl0ZXMgLQotCQkJb2Zmc2V0b2Yoc3RydWN0IGJlX2dlbmVyaWNfcV9jdHh0LCB3cmJfaGVhZGVyKSkpOwotCi0JCS8qIENvcHkgdGhlIHF1ZXVlIGVsZW1lbnQgV1JCIGludG8gdGhlIHJpbmcuICovCi0JCW1lbWNweSh3cmIsICZxX2N0eHQtPndyYl9oZWFkZXIsIGxlbmd0aCk7Ci0KLQkJLyogUG9zdCB0aGUgd3JiLiAgVGhpcyBzaG91bGQgbm90IGZhaWwgYXNzdW1pbmcgd2UgaGF2ZQotCQkgKiBlbm91Z2ggY29udGV4dCBzdHJ1Y3RzLiAqLwotCQlzdGF0dXMgPSBiZV9mdW5jdGlvbl9wb3N0X21jY193cmIocGZvYiwgd3JiLCBOVUxMLAotCQkJICAgcV9jdHh0LT5jb250ZXh0LmNiLCBxX2N0eHQtPmNvbnRleHQuY2JfY29udGV4dCwKLQkJCSAgIHFfY3R4dC0+Y29udGV4dC5pbnRlcm5hbF9jYiwKLQkJCSAgIHFfY3R4dC0+Y29udGV4dC5pbnRlcm5hbF9jYl9jb250ZXh0LAotCQkJICAgcV9jdHh0LT5jb250ZXh0Lm9wdGlvbmFsX2Z3Y21kX3ZhLAotCQkJICAgJnFfY3R4dC0+Y29udGV4dC5jb3B5KTsKLQotCQlpZiAoc3RhdHVzID09IEJFX1NVQ0NFU1MpIHsKLQkJCS8qCi0JCQkgKiBTeW5jaHJvbm91cyBjb21wbGV0aW9uLiBTaW5jZSBpdCB3YXMgcXVldWVkLAotCQkJICogd2Ugd2lsbCBpbnZva2UgdGhlIGNhbGxiYWNrLgotCQkJICogVG8gdGhlIHVzZXIsIHRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QuCi0JCQkgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0JCQlpZiAocGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nICYmIHBmb2ItPm1jYykgewotCQkJCXBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyA9IDA7Ci0JCQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCQkJfQotCi0JCQlBU1NFUlQocV9jdHh0LT5jb250ZXh0LmNiKTsKLQotCQkJcV9jdHh0LT5jb250ZXh0LmNiKAotCQkJCXFfY3R4dC0+Y29udGV4dC5jYl9jb250ZXh0LAotCQkJCQkJQkVfU1VDQ0VTUywgTlVMTCk7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotCi0JCX0gZWxzZSBpZiAoc3RhdHVzICE9IEJFX1BFTkRJTkcpIHsKLQkJCS8qCi0JCQkgKiBBbm90aGVyIHJlc291cmNlIGZhaWxlZC4gIFNob3VsZCBuZXZlciBoYXBwZW4KLQkJCSAqIGlmIHdlIGhhdmUgc3VmZmljaWVudCBNQ0NfV1JCX0NPTlRFWFQgc3RydWN0cy4KLQkJCSAqIFJldHVybiB0byBoZWFkIG9mIHRoZSBxdWV1ZS4KLQkJCSAqLwotCQkJVFJBQ0UoRExfV0FSTiwgIkZhaWxlZCB0byBwb3N0IGEgcXVldWVkIFdSQi4gMHgleCIsCi0JCQkgICAgICBzdGF0dXMpOwotCQkJbGlzdF9hZGQoJnFfY3R4dC0+Y29udGV4dC5saXN0LCAmbWNjLT5iYWNrbG9nKTsKLQkJCXBmb2ItPm1jYy0+YmFja2xvZ19sZW5ndGgrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogRnJlZSB0aGUgZmxhZyB0byBsaW1pdCAxIHRocmVhZCB0byByZWRyaXZlIHBvc3RzLiAqLwotCW1jYy0+ZHJpdmluZ19iYWNrbG9nID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5wb3N0X2xvY2ssIGlycWwpOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCB0aGUgV1JCIHdhcyBjb25zdW1lZCBpbiBvcmRlci4gKi8KLSNpZmRlZiBCRV9ERUJVRwotdTMyIGJlX21jY193cmJfY29uc3VtZWRfaW5fb3JkZXIoc3RydWN0IGJlX21jY19vYmplY3QgKm1jYywKLQkJCQkJc3RydWN0IE1DQ19DUV9FTlRSWV9BTUFQICpjcWUpCi17Ci0Jc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqd3JiX2NvbnRleHQgPSBOVUxMOwotCXUzMiB3cmJfaW5kZXg7Ci0JdTMyIHdyYl9jb25zdW1lZF9pbl9vcmRlcjsKLQl1MzIgb2Zmc2V0OwotCXU4ICpwOwotCi0JQVNTRVJUKGNxZSk7Ci0JLyoKLQkgKiBBIGNvbW1hbmQgY29tcGxldGVkLiAgQ29tbWFuZHMgY29tcGxldGUgb3V0LW9mLW9yZGVyLgotCSAqIERldGVybWluZSB3aGljaCBjb21tYW5kIGNvbXBsZXRlZCBmcm9tIHRoZSBUQUcuCi0JICovCi0Jb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19DUV9FTlRSWV9BTUFQLCBtY2NfdGFnKS84OwotCXAgPSAodTggKikgY3FlICsgb2Zmc2V0OwotCXdyYl9jb250ZXh0ID0gKHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKikodm9pZCAqKShzaXplX3QpKCoodTY0ICopcCk7Ci0KLQlBU1NFUlQod3JiX2NvbnRleHQpOwotCi0Jd3JiX2luZGV4ID0gKHUzMikgKCgodTY0KShzaXplX3Qpd3JiX2NvbnRleHQtPnJpbmdfd3JiIC0KLQkJKHU2NCkoc2l6ZV90KW1jYy0+c3EucmluZy52YSkgLyBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkpOwotCi0JQVNTRVJUKHdyYl9pbmRleCA8IG1jYy0+c3EucmluZy5udW0pOwotCi0Jd3JiX2NvbnN1bWVkX2luX29yZGVyID0gKHUzMikgKHdyYl9pbmRleCA9PSBtY2MtPmNvbnN1bWVkX2luZGV4KTsKLQltY2MtPmNvbnN1bWVkX2luZGV4ID0gYmVfYWRkYyhtY2MtPmNvbnN1bWVkX2luZGV4LCAxLCBtY2MtPnNxLnJpbmcubnVtKTsKLQlyZXR1cm4gd3JiX2NvbnN1bWVkX2luX29yZGVyOwotfQotI2VuZGlmCi0KLWludCBiZV9tY2NfcHJvY2Vzc19jcShzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjLCBib29sIHJlYXJtKQotewotCXN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IgPSBOVUxMOwotCXN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCAqY3FlOwotCXN0cnVjdCBDUV9EQl9BTUFQIGRiOwotCXN0cnVjdCBtcF9yaW5nICpjcV9yaW5nID0gJm1jYy0+Y3EucmluZzsKLQlzdHJ1Y3QgbXBfcmluZyAqbXBfcmluZyA9ICZtY2MtPnNxLnJpbmc7Ci0JdTMyIG51bV9wcm9jZXNzZWQgPSAwOwotCXUzMiBjb25zdW1lZCA9IDAsIHZhbGlkLCBjb21wbGV0ZWQsIGNxZV9jb25zdW1lZCwgYXN5bmNfZXZlbnQ7Ci0KLQlwZm9iID0gbWNjLT5wYXJlbnRfZnVuY3Rpb247Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+Y3FfbG9jaywgcGZvYi0+Y3FfaXJxKTsKLQotCS8qCi0JICogVmVyaWZ5IHRoYXQgb25seSBvbmUgdGhyZWFkIGlzIHByb2Nlc3NpbmcgdGhlIENRIGF0IG9uY2UuCi0JICogV2UgY2Fubm90IGhvbGQgdGhlIGxvY2sgd2hpbGUgcHJvY2Vzc2luZyB0aGUgQ1EgZHVlIHRvCi0JICogdGhlIGNhbGxiYWNrcyBpbnRvIHRoZSBPUy4gIFRoZXJlZm9yZSwgdGhpcyBmbGFnIGlzIHVzZWQKLQkgKiB0byBjb250cm9sIGl0LiAgSWYgYW55IG9mIHRoZSB0aHJlYWRzIHdhbnQgdG8KLQkgKiByZWFybSB0aGUgQ1EsIHdlIG5lZWQgdG8gaG9ub3IgdGhhdC4KLQkgKi8KLQlpZiAobWNjLT5wcm9jZXNzaW5nICE9IDApIHsKLQkJbWNjLT5yZWFybSA9IG1jYy0+cmVhcm0gfHwgcmVhcm07Ci0JCWdvdG8gRXJyb3I7Ci0JfSBlbHNlIHsKLQkJbWNjLT5wcm9jZXNzaW5nID0gMTsJLyogbG9jayBwcm9jZXNzaW5nIGZvciB0aGlzIHRocmVhZC4gKi8KLQkJbWNjLT5yZWFybSA9IHJlYXJtOwkvKiBzZXQgb3VyIHJlYXJtIHNldHRpbmcgKi8KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5jcV9sb2NrLCBwZm9iLT5jcV9pcnEpOwotCi0JY3FlID0gbXBfcmluZ19jdXJyZW50KGNxX3JpbmcpOwotCXZhbGlkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX0NRX0VOVFJZLCB2YWxpZCwgY3FlKTsKLQl3aGlsZSAodmFsaWQpIHsKLQotCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSA4KSB7Ci0JCQkvKiBjb2FsZXNjZSBkb29yYmVsbHMsIGJ1dCBmcmVlIHNwYWNlIGluIGNxCi0JCQkgKiByaW5nIHdoaWxlIHByb2Nlc3NpbmcuICovCi0JCQlkYi5kd1swXSA9IDA7CS8qIGNsZWFyICovCi0JCQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcWlkLCAmZGIsIGNxX3JpbmctPmlkKTsKLQkJCUFNQVBfU0VUX0JJVFNfUFRSKENRX0RCLCByZWFybSwgJmRiLCBmYWxzZSk7Ci0JCQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgZXZlbnQsICZkYiwgZmFsc2UpOwotCQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIG51bV9wb3BwZWQsICZkYiwKLQkJCQkJCQludW1fcHJvY2Vzc2VkKTsKLQkJCW51bV9wcm9jZXNzZWQgPSAwOwotCi0JCQlQRF9XUklURShwZm9iLCBjcV9kYiwgZGIuZHdbMF0pOwotCQl9Ci0KLQkJYXN5bmNfZXZlbnQgPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfQ1FfRU5UUlksIGFzeW5jX2V2ZW50LCBjcWUpOwotCQlpZiAoYXN5bmNfZXZlbnQpIHsKLQkJCS8qIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGV2ZW50LiAqLwotCQkJc3RydWN0IEFTWU5DX0VWRU5UX1RSQUlMRVJfQU1BUCAqYXN5bmNfdHJhaWxlciA9Ci0JCQkgICAgKHN0cnVjdCBBU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVAgKikKLQkJCSAgICAoKHU4ICopIGNxZSArIHNpemVvZihzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVApIC0KLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBBU1lOQ19FVkVOVF9UUkFJTEVSX0FNQVApKTsKLQkJCXUzMiBldmVudF9jb2RlOwotCQkJYXN5bmNfZXZlbnQgPSBBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9UUkFJTEVSLAotCQkJCQkJYXN5bmNfZXZlbnQsIGFzeW5jX3RyYWlsZXIpOwotCQkJQVNTRVJUKGFzeW5jX2V2ZW50ID09IDEpOwotCi0KLQkJCXZhbGlkID0gQU1BUF9HRVRfQklUU19QVFIoQVNZTkNfRVZFTlRfVFJBSUxFUiwKLQkJCQkJCXZhbGlkLCBhc3luY190cmFpbGVyKTsKLQkJCUFTU0VSVCh2YWxpZCA9PSAxKTsKLQotCQkJLyogQ2FsbCB0aGUgYXN5bmMgZXZlbnQgaGFuZGxlciBpZiBpdCBpcyBpbnN0YWxsZWQuICovCi0JCQlpZiAobWNjLT5hc3luY19jYikgewotCQkJCWV2ZW50X2NvZGUgPQotCQkJCQlBTUFQX0dFVF9CSVRTX1BUUihBU1lOQ19FVkVOVF9UUkFJTEVSLAotCQkJCQkJZXZlbnRfY29kZSwgYXN5bmNfdHJhaWxlcik7Ci0JCQkJbWNjLT5hc3luY19jYihtY2MtPmFzeW5jX2NvbnRleHQsCi0JCQkJCSAgICAodTMyKSBldmVudF9jb2RlLCAodm9pZCAqKSBjcWUpOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQkvKiBUaGlzIGlzIGEgY29tcGxldGlvbiBlbnRyeS4gKi8KLQotCQkJLyogTm8gdm0gZm9yd2FyZGluZyBpbiB0aGlzIGRyaXZlci4gKi8KLQotCQkJY3FlX2NvbnN1bWVkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX0NRX0VOVFJZLAotCQkJCQkJY29uc3VtZWQsIGNxZSk7Ci0JCQlpZiAoY3FlX2NvbnN1bWVkKSB7Ci0JCQkJLyoKLQkJCQkgKiBBIGNvbW1hbmQgb24gdGhlIE1DQyByaW5nIHdhcyBjb25zdW1lZC4KLQkJCQkgKiBVcGRhdGUgdGhlIGNvbnN1bWVyIGluZGV4LgotCQkJCSAqIFRoZXNlIG9jY3VyIGluIG9yZGVyLgotCQkJCSAqLwotCQkJCUFTU0VSVChiZV9tY2Nfd3JiX2NvbnN1bWVkX2luX29yZGVyKG1jYywgY3FlKSk7Ci0JCQkJY29uc3VtZWQrKzsKLQkJCX0KLQotCQkJY29tcGxldGVkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX0NRX0VOVFJZLAotCQkJCQljb21wbGV0ZWQsIGNxZSk7Ci0JCQlpZiAoY29tcGxldGVkKSB7Ci0JCQkJLyogQSBjb21tYW5kIGNvbXBsZXRlZC4gIFVzZSB0YWcgdG8KLQkJCQkgKiBkZXRlcm1pbmUgd2hpY2ggY29tbWFuZC4gICovCi0JCQkJYmVfbWNjX3Byb2Nlc3NfY3FlKHBmb2IsIGNxZSk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBSZXNldCB0aGUgQ1FFICovCi0JCUFNQVBfU0VUX0JJVFNfUFRSKE1DQ19DUV9FTlRSWSwgdmFsaWQsIGNxZSwgZmFsc2UpOwotCQludW1fcHJvY2Vzc2VkKys7Ci0KLQkJLyogVXBkYXRlIG91ciB0cmFja2luZyBmb3IgdGhlIENRIHJpbmcuICovCi0JCWNxZSA9IG1wX3JpbmdfbmV4dChjcV9yaW5nKTsKLQkJdmFsaWQgPSBBTUFQX0dFVF9CSVRTX1BUUihNQ0NfQ1FfRU5UUlksIHZhbGlkLCBjcWUpOwotCX0KLQotCVRSQUNFKERMX0lORk8sICJudW1fcHJvY2Vzc2VkOjB4JXgsIGFuZCBjb25zdW1lZDoweCV4IiwKLQkgICAgICBudW1fcHJvY2Vzc2VkLCBjb25zdW1lZCk7Ci0JLyoKLQkgKiBHcmFiIHRoZSBDUSBsb2NrIHRvIHN5bmNocm9uaXplIHRoZSAicmVhcm0iIHNldHRpbmcgZm9yCi0JICogdGhlIGRvb3JiZWxsLCBhbmQgZm9yIGNsZWFyaW5nIHRoZSAicHJvY2Vzc2luZyIgZmxhZy4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+Y3FfbG9jaywgcGZvYi0+Y3FfaXJxKTsKLQotCS8qCi0JICogUmVhcm0gdGhlIGNxLiAgVGhpcyBpcyBkb25lIGJhc2VkIG9uIHRoZSBnbG9iYWwgbWNjLT5yZWFybQotCSAqIGZsYWcgd2hpY2ggY29tYmluZXMgdGhlIHJlYXJtIHBhcmFtZXRlciBmcm9tIHRoZSBjdXJyZW50Ci0JICogY2FsbCB0byBwcm9jZXNzX2NxIGFuZCBhbnkgb3RoZXIgdGhyZWFkcwotCSAqIHRoYXQgdHJpZWQgdG8gcHJvY2VzcyB0aGUgQ1Egd2hpbGUgdGhpcyBvbmUgd2FzIGFjdGl2ZS4KLQkgKiBUaGlzIGhhbmRsZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHN5bmMuIGZ3Y21kIHdhcyBwcm9jZXNzaW5nCi0JICogdGhlIENRIHdoaWxlIHRoZSBpbnRlcnJ1cHQvZHBjIHRyaWVzIHRvIHByb2Nlc3MgaXQuCi0JICogVGhlIHN5bmMgcHJvY2VzcyBnZXRzIHRvIGNvbnRpbnVlIC0tIGJ1dCBpdCBpcyBub3cKLQkgKiByZXNwb25zaWJsZSBmb3IgdGhlIHJlYXJtaW5nLgotCSAqLwotCWlmIChudW1fcHJvY2Vzc2VkID4gMCB8fCBtY2MtPnJlYXJtID09IHRydWUpIHsKLQkJZGIuZHdbMF0gPSAwOwkvKiBjbGVhciAqLwotCQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgcWlkLCAmZGIsIGNxX3JpbmctPmlkKTsKLQkJQU1BUF9TRVRfQklUU19QVFIoQ1FfREIsIHJlYXJtLCAmZGIsIG1jYy0+cmVhcm0pOwotCQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgZXZlbnQsICZkYiwgZmFsc2UpOwotCQlBTUFQX1NFVF9CSVRTX1BUUihDUV9EQiwgbnVtX3BvcHBlZCwgJmRiLCBudW1fcHJvY2Vzc2VkKTsKLQotCQlQRF9XUklURShwZm9iLCBjcV9kYiwgZGIuZHdbMF0pOwotCX0KLQkvKgotCSAqIFVwZGF0ZSB0aGUgY29uc3VtZXIgaW5kZXggYWZ0ZXIgcmluZ2luZyB0aGUgQ1EgZG9vcmJlbGwuCi0JICogV2UgZG9uJ3Qgd2FudCBhbm90aGVyIHRocmVhZCB0byBwb3N0IG1vcmUgV1JCcyBiZWZvcmUgd2UKLQkgKiBoYXZlIENRIHNwYWNlIGF2YWlsYWJsZS4KLQkgKi8KLQltcF9yaW5nX2NvbnN1bWVfbXVsdGlwbGUobXBfcmluZywgY29uc3VtZWQpOwotCi0JLyogQ2xlYXIgdGhlIHByb2Nlc3NpbmcgZmxhZy4gKi8KLQltY2MtPnByb2Nlc3NpbmcgPSAwOwotCi1FcnJvcjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm9iLT5jcV9sb2NrLCBwZm9iLT5jcV9pcnEpOwotCS8qCi0JICogVXNlIHRoZSBsb2NhbCB2YXJpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGN1cnJlbnQgdGhyZWFkCi0JICogaG9sZHMgdGhlIFdSQiBwb3N0IGxvY2suICBJZiByZWFybSBpcyBmYWxzZSwgdGhpcyBpcwotCSAqIGVpdGhlciBhIHN5bmNocm9ub3VzIGNvbW1hbmQsIG9yIHRoZSB1cHBlciBsYXllciBkcml2ZXIgaXMgcG9sbGluZwotCSAqIGZyb20gYSB0aHJlYWQuICBXZSBkbyBub3QgZHJpdmUgdGhlIHF1ZXVlIGZyb20gdGhhdAotCSAqIGNvbnRleHQgc2luY2UgdGhlIGRyaXZlciBtYXkgaG9sZCB0aGUKLQkgKiB3cmIgcG9zdCBsb2NrIGFscmVhZHkuCi0JICovCi0JaWYgKHJlYXJtKQotCQliZV9kcml2ZV9tY2Nfd3JiX3F1ZXVlKG1jYyk7Ci0JZWxzZQotCQlwZm9iLT5wZW5kX3F1ZXVlX2RyaXZpbmcgPSAxOwotCi0JcmV0dXJuIEJFX1NVQ0NFU1M7Ci19Ci0KLS8qCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICAgICAgICAgUCBVIEIgTCBJIEMgIFIgTyBVIFQgSSBOIEUgUwotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAgICBUaGlzIHJvdXRpbmUgY3JlYXRlcyBhbiBNQ0Mgb2JqZWN0LiAgVGhpcyBvYmplY3QgY29udGFpbnMgYW4gTUNDIHNlbmQgcXVldWUKLSAgICBhbmQgYSBDUSBwcml2YXRlIHRvIHRoZSBNQ0MuCi0KLSAgICBwY29udHJvbGxlciAgICAgIC0gSGFuZGxlIHRvIGEgZnVuY3Rpb24gb2JqZWN0Ci0KLSAgICBFcU9iamVjdCAgICAgICAgICAgIC0gRVEgb2JqZWN0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgTUNDCi0KLSAgICBwcE1jY09iamVjdCAgICAgICAgIC0gUG9pbnRlciB0byBhbiBpbnRlcm5hbCBNY2MgT2JqZWN0IHJldHVybmVkLgotCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCwgb3RoZXJ3aXNlIGEgdXNlZnVsIGVycm9yIGNvZGUKLQlpcyByZXR1cm5lZC4KLQotICAgIElSUUwgPCBESVNQQVRDSF9MRVZFTAotCi0qLwotaW50Ci1iZV9tY2NfcmluZ19jcmVhdGUoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkJICAgc3RydWN0IHJpbmdfZGVzYyAqcmQsIHUzMiBsZW5ndGgsCi0JCSAgIHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKmNvbnRleHRfYXJyYXksCi0JCSAgIHUzMiBudW1fY29udGV4dF9lbnRyaWVzLAotCQkgICBzdHJ1Y3QgYmVfY3Ffb2JqZWN0ICpjcSwgc3RydWN0IGJlX21jY19vYmplY3QgKm1jYykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQotCXN0cnVjdCBGV0NNRF9DT01NT05fTUNDX0NSRUFURSAqZndjbWQgPSBOVUxMOwotCXN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYiA9IE5VTEw7Ci0JdTMyIG51bV9lbnRyaWVzX2VuY29kZWQsIG4sIGk7Ci0Jdm9pZCAqdmEgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxbDsKLQotCWlmIChsZW5ndGggPCBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkgKiAyKSB7Ci0JCVRSQUNFKERMX0VSUiwgIkludmFsaWQgTUNDIHJpbmcgbGVuZ3RoOiVkIiwgbGVuZ3RoKTsKLQkJcmV0dXJuIEJFX05PVF9PSzsKLQl9Ci0JLyoKLQkgKiBSZWR1Y2UgdGhlIGFjdHVhbCByaW5nIHNpemUgdG8gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIKLQkgKiBvZiBjb250ZXh0IGVudHJpZXMuICBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBydW4gb3V0IG9mCi0JICogcmluZyBXUkJzIGZpcnN0IHNvIHRoZSBxdWV1aW5nIHdvcmtzIGNvcnJlY3RseS4gIFdlIG5ldmVyCi0JICogcXVldWUgYmFzZWQgb24gY29udGV4dCBzdHJ1Y3RzLgotCSAqLwotCWlmIChudW1fY29udGV4dF9lbnRyaWVzICsgMSA8Ci0JCQlsZW5ndGggLyBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkgLSAxKSB7Ci0KLQkJdTMyIG1heF9sZW5ndGggPQotCQkgICAgKG51bV9jb250ZXh0X2VudHJpZXMgKyAyKSAqIHNpemVvZihzdHJ1Y3QgTUNDX1dSQl9BTUFQKTsKLQotCQlpZiAoaXNfcG93ZXJfb2ZfMihtYXhfbGVuZ3RoKSkKLQkJCWxlbmd0aCA9IF9fcm91bmR1cF9wb3dfb2ZfdHdvKG1heF9sZW5ndGgrMSkgLyAyOwotCQllbHNlCi0JCQlsZW5ndGggPSBfX3JvdW5kdXBfcG93X29mX3R3byhtYXhfbGVuZ3RoKSAvIDI7Ci0KLQkJQVNTRVJUKGxlbmd0aCA8PSBtYXhfbGVuZ3RoKTsKLQotCQlUUkFDRShETF9XQVJOLAotCQkJIk1DQyByaW5nIGxlbmd0aCByZWR1Y2VkIGJhc2VkIG9uIGNvbnRleHQgZW50cmllcy4iCi0JCQkiIGxlbmd0aDolZCB3cmJzOiVkIGNvbnRleHRfZW50cmllczolZCIsIGxlbmd0aCwKLQkJCShpbnQpIChsZW5ndGggLyBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkpLAotCQkJbnVtX2NvbnRleHRfZW50cmllcyk7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0KLQludW1fZW50cmllc19lbmNvZGVkID0KLQkgICAgYmVfcmluZ19sZW5ndGhfdG9fZW5jb2RpbmcobGVuZ3RoLCBzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCkpOwotCi0JLyogSW5pdCBNQ0Mgb2JqZWN0LiAqLwotCW1lbXNldChtY2MsIDAsIHNpemVvZigqbWNjKSk7Ci0JbWNjLT5wYXJlbnRfZnVuY3Rpb24gPSBwZm9iOwotCW1jYy0+Y3Ffb2JqZWN0ID0gY3E7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbWNjLT5iYWNrbG9nKTsKLQotCXdyYiA9IGJlX2Z1bmN0aW9uX3BlZWtfbWNjX3dyYihwZm9iKTsKLQlpZiAoIXdyYikgewotCQlBU1NFUlQod3JiKTsKLQkJVFJBQ0UoRExfRVJSLCAiTm8gZnJlZSBNQ0MgV1JCcyBpbiBjcmVhdGUgRVEuIik7Ci0JCXN0YXR1cyA9IEJFX1NUQVRVU19OT19NQ0NfV1JCOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBQcmVwYXJlcyBhbiBlbWJlZGRlZCBmd2NtZCwgaW5jbHVkaW5nIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMuICovCi0JZndjbWQgPSBCRV9QUkVQQVJFX0VNQkVEREVEX0ZXQ01EKHBmb2IsIHdyYiwgQ09NTU9OX01DQ19DUkVBVEUpOwotCi0JZndjbWQtPnBhcmFtcy5yZXF1ZXN0Lm51bV9wYWdlcyA9IERJVl9ST1VORF9VUChsZW5ndGgsIFBBR0VfU0laRSk7Ci0JLyoKLQkgKiBQcm9ncmFtIE1DQyByaW5nIGNvbnRleHQKLQkgKi8KLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfUklOR19DT05URVhULCBwZGlkLAotCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCAwKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfUklOR19DT05URVhULCBpbnZhbGlkLAotCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBmYWxzZSk7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1JJTkdfQ09OVEVYVCwgcmluZ19zaXplLAotCQkJJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBudW1fZW50cmllc19lbmNvZGVkKTsKLQotCW4gPSBjcS0+Y3FfaWQ7Ci0JQU1BUF9TRVRfQklUU19QVFIoTUNDX1JJTkdfQ09OVEVYVCwKLQkJCQljcV9pZCwgJmZ3Y21kLT5wYXJhbXMucmVxdWVzdC5jb250ZXh0LCBuKTsKLQliZV9yZF90b19wYV9saXN0KHJkLCBmd2NtZC0+cGFyYW1zLnJlcXVlc3QucGFnZXMsCi0JCQkJQVJSQVlfU0laRShmd2NtZC0+cGFyYW1zLnJlcXVlc3QucGFnZXMpKTsKLQkvKiBQb3N0IHRoZSBmL3cgY29tbWFuZCAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3Bvc3RfbWNjX3dyYihwZm9iLCB3cmIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCQlOVUxMLCBOVUxMLCBmd2NtZCwgTlVMTCk7Ci0JaWYgKHN0YXR1cyAhPSBCRV9TVUNDRVNTKSB7Ci0JCVRSQUNFKERMX0VSUiwgIk1DQyB0byBjcmVhdGUgQ1EgZmFpbGVkLiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKgotCSAqIENyZWF0ZSBhIGxpbmtlZCBsaXN0IG9mIGNvbnRleHQgc3RydWN0dXJlcwotCSAqLwotCW1jYy0+d3JiX2NvbnRleHQuYmFzZSA9IGNvbnRleHRfYXJyYXk7Ci0JbWNjLT53cmJfY29udGV4dC5udW0gPSBudW1fY29udGV4dF9lbnRyaWVzOwotCUlOSVRfTElTVF9IRUFEKCZtY2MtPndyYl9jb250ZXh0Lmxpc3RfaGVhZCk7Ci0JbWVtc2V0KGNvbnRleHRfYXJyYXksIDAsCi0JCSAgICBzaXplb2Yoc3RydWN0IGJlX21jY193cmJfY29udGV4dCkgKiBudW1fY29udGV4dF9lbnRyaWVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWNjLT53cmJfY29udGV4dC5udW07IGkrKykgewotCQlsaXN0X2FkZF90YWlsKCZjb250ZXh0X2FycmF5W2ldLm5leHQsCi0JCQkJCSZtY2MtPndyYl9jb250ZXh0Lmxpc3RfaGVhZCk7Ci0JfQotCi0JLyoKLQkgKgotCSAqIENyZWF0ZSBhbiBtY2NfcmluZyBmb3IgdHJhY2tpbmcgV1JCIGh3IHJpbmcKLQkgKi8KLQl2YSA9IHJkLT52YTsKLQlBU1NFUlQodmEpOwotCW1wX3JpbmdfY3JlYXRlKCZtY2MtPnNxLnJpbmcsIGxlbmd0aCAvIHNpemVvZihzdHJ1Y3QgTUNDX1dSQl9BTUFQKSwKLQkJCQlzaXplb2Yoc3RydWN0IE1DQ19XUkJfQU1BUCksIHZhKTsKLQltY2MtPnNxLnJpbmcuaWQgPSBmd2NtZC0+cGFyYW1zLnJlc3BvbnNlLmlkOwotCS8qCi0JICogSW5pdCBhIG1jY19yaW5nIGZvciB0cmFja2luZyB0aGUgTUNDIENRLgotCSAqLwotCUFTU0VSVChjcS0+dmEpOwotCW1wX3JpbmdfY3JlYXRlKCZtY2MtPmNxLnJpbmcsIGNxLT5udW1fZW50cmllcywKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgTUNDX0NRX0VOVFJZX0FNQVApLCBjcS0+dmEpOwotCW1jYy0+Y3EucmluZy5pZCA9IGNxLT5jcV9pZDsKLQotCS8qIEZvcmNlIHplcm9pbmcgb2YgQ1EuICovCi0JbWVtc2V0KGNxLT52YSwgMCwgY3EtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCkpOwotCi0JLyogSW5pdGlhbGl6ZSBkZWJ1ZyBpbmRleC4gKi8KLQltY2MtPmNvbnN1bWVkX2luZGV4ID0gMDsKLQotCWF0b21pY19pbmMoJmNxLT5yZWZfY291bnQpOwotCXBmb2ItPm1jYyA9IG1jYzsKLQotCVRSQUNFKERMX0lORk8sICJNQ0MgcmluZyBjcmVhdGVkLiBpZDolZCBieXRlczolZCBjcV9pZDolZCBjcV9lbnRyaWVzOiVkIgotCSAgICAgICIgbnVtX2NvbnRleHQ6JWQiLCBtY2MtPnNxLnJpbmcuaWQsIGxlbmd0aCwKLQkgICAgICBjcS0+Y3FfaWQsIGNxLT5udW1fZW50cmllcywgbnVtX2NvbnRleHRfZW50cmllcyk7Ci0KLWVycm9yOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPnBvc3RfbG9jaywgaXJxbCk7Ci0JaWYgKHBmb2ItPnBlbmRfcXVldWVfZHJpdmluZyAmJiBwZm9iLT5tY2MpIHsKLQkJcGZvYi0+cGVuZF9xdWV1ZV9kcml2aW5nID0gMDsKLQkJYmVfZHJpdmVfbWNjX3dyYl9xdWV1ZShwZm9iLT5tY2MpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICAgIFRoaXMgcm91dGluZSBkZXN0cm95cyBhbiBNQ0Mgc2VuZCBxdWV1ZQotCi0gICAgTWNjT2JqZWN0ICAgICAgICAgLSBJbnRlcm5hbCBNY2MgT2JqZWN0IHRvIGJlIGRlc3Ryb3llZC4KLQotICAgIFJldHVybnMgQkVfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsbCwgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCi0KLSAgICBJUlFMIDwgRElTUEFUQ0hfTEVWRUwKLQotICAgIFRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIG11c3QgZW5zdXJlIHRoYXQgbm8gb3RoZXIgV1JCIG1heSBiZSBwb3N0ZWQKLSAgICB1bnRpbCB0aGlzIHJvdXRpbmUgcmV0dXJucy4KLQotKi8KLWludCBiZV9tY2NfcmluZ19kZXN0cm95KHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2MpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiA9IG1jYy0+cGFyZW50X2Z1bmN0aW9uOwotCi0KLQlBU1NFUlQobWNjLT5wcm9jZXNzaW5nID09IDApOwotCi0JLyoKLQkgKiBSZW1vdmUgdGhlIHJpbmcgZnJvbSB0aGUgZnVuY3Rpb24gb2JqZWN0LgotCSAqIFRoaXMgdHJhbnNpdGlvbnMgYmFjayB0byBtYWlsYm94IG1vZGUuCi0JICovCi0JcGZvYi0+bWNjID0gTlVMTDsKLQotCS8qIFNlbmQgZndjbWQgdG8gZGVzdHJveSB0aGUgcXVldWUuICAoVXNpbmcgdGhlIG1haWxib3guKSAqLwotCXN0YXR1cyA9IGJlX2Z1bmN0aW9uX3JpbmdfZGVzdHJveShtY2MtPnBhcmVudF9mdW5jdGlvbiwgbWNjLT5zcS5yaW5nLmlkLAotCQkJICAgICBGV0NNRF9SSU5HX1RZUEVfTUNDLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQlBU1NFUlQoc3RhdHVzID09IDApOwotCi0JLyogUmVsZWFzZSB0aGUgU1EgcmVmZXJlbmNlIHRvIHRoZSBDUSAqLwotCWF0b21pY19kZWMoJm1jYy0+Y3Ffb2JqZWN0LT5yZWZfY291bnQpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHZvaWQKLW1jY193cmJfc3luY19jYih2b2lkICpjb250ZXh0LCBpbnQgc3RhdXMsIHN0cnVjdCBNQ0NfV1JCX0FNQVAgKndyYikKLXsKLQlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICp3cmJfY29udGV4dCA9Ci0JCQkJKHN0cnVjdCBiZV9tY2Nfd3JiX2NvbnRleHQgKikgY29udGV4dDsKLQlBU1NFUlQod3JiX2NvbnRleHQpOwotCSp3cmJfY29udGV4dC0+dXNlcnNfZmluYWxfc3RhdHVzID0gc3RhdXM7Ci19Ci0KLS8qCi0gICAgVGhpcyByb3V0aW5lIHBvc3RzIGEgY29tbWFuZCB0byB0aGUgTUNDIHNlbmQgcXVldWUKLQotICAgIG1jYyAgICAgICAtIEludGVybmFsIE1jYyBPYmplY3QgdG8gYmUgZGVzdHJveWVkLgotCi0gICAgd3JiICAgICAgICAgICAgIC0gd3JiIHRvIHBvc3QuCi0KLSAgICBSZXR1cm5zIEJFX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGwsIG90aGVyd2lzZSBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLgotCi0gICAgSVJRTCA8IERJU1BBVENIX0xFVkVMIGlmIENvbXBsZXRpb25DYWxsYmFjayBpcyBub3QgTlVMTAotICAgIElSUUwgPD1ESVNQQVRDSF9MRVZFTCBpZiBDb21wbGV0aW9uQ2FsbGJhY2sgaXMgIE5VTEwKLQotICAgIElmIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2l0aCBDb21wbGV0aW9uQ2FsbGJhY2sgIT0gTlVMTCB0aGUKLSAgICBjYWxsIGlzIGNvbnNpZGVyZWQgdG8gYmUgYXN5bmNocm9ub3VzIGFuZCB3aWxsIHJldHVybiBhcyBzb29uCi0gICAgYXMgdGhlIFdSQiBpcyBwb3N0ZWQgdG8gdGhlIE1DQyB3aXRoIEJFX1BFTkRJTkcuCi0KLSAgICBJZiBDb21wbGV0aW9uQ2FsbGJhY2sgaXMgTlVMTCwgdGhlbiB0aGlzIHJvdXRpbmUgd2lsbCBub3QgcmV0dXJuIHVudGlsCi0gICAgYSBjb21wbGV0aW9uIGZvciB0aGlzIE1DQyBjb21tYW5kIGhhcyBiZWVuIHByb2Nlc3NlZC4KLSAgICBJZiBjYWxsZWQgYXQgRElTUEFUQ0hfTEVWRUwgdGhlIENvbXBsZXRpb25DYWxsYmFjayBtdXN0IGJlIE5VTEwuCi0KLSAgICBUaGlzIHJvdXRpbmUgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBNUFUgaGFzIGJlZW4gYm9vc3RyYXBlZCBwYXN0Ci0gICAgbWFpbGJveCBtb2RlLgotCi0KLSovCi1pbnQKLV9iZV9tcHVfcG9zdF93cmJfcmluZyhzdHJ1Y3QgYmVfbWNjX29iamVjdCAqbWNjLCBzdHJ1Y3QgTUNDX1dSQl9BTUFQICp3cmIsCi0JCQkJc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqd3JiX2NvbnRleHQpCi17Ci0KLQlzdHJ1Y3QgTUNDX1dSQl9BTUFQICpyaW5nX3dyYiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IEJFX1BFTkRJTkc7Ci0JaW50IGZpbmFsX3N0YXR1cyA9IEJFX1BFTkRJTkc7Ci0JbWNjX3dyYl9jcWVfY2FsbGJhY2sgY2IgPSBOVUxMOwotCXN0cnVjdCBNQ0NfREJfQU1BUCBtY2NfZGI7Ci0JdTMyIGVtYmVkZGVkOwotCi0JQVNTRVJUKG1wX3JpbmdfbnVtX2VtcHR5KCZtY2MtPnNxLnJpbmcpID4gMCk7Ci0JLyoKLQkgKiBJbnB1dCB3cmIgaXMgbW9zdCBsaWtlbHkgdGhlIG5leHQgd3JiIGluIHRoZSByaW5nLCBzaW5jZSB0aGUgY2xpZW50Ci0JICogY2FuIHBlZWsgYXQgdGhlIGFkZHJlc3MuCi0JICovCi0JcmluZ193cmIgPSBtcF9yaW5nX3Byb2R1Y2VyX3B0cigmbWNjLT5zcS5yaW5nKTsKLQlpZiAod3JiICE9IHJpbmdfd3JiKSB7Ci0JCS8qIElmIG5vdCBlcXVhbCwgY29weSBpdCBpbnRvIHRoZSByaW5nLiAqLwotCQltZW1jcHkocmluZ193cmIsIHdyYiwgc2l6ZW9mKHN0cnVjdCBNQ0NfV1JCX0FNQVApKTsKLQl9Ci0jaWZkZWYgQkVfREVCVUcKLQl3cmJfY29udGV4dC0+cmluZ193cmIgPSByaW5nX3dyYjsKLSNlbmRpZgotCWVtYmVkZGVkID0gQU1BUF9HRVRfQklUU19QVFIoTUNDX1dSQiwgZW1iZWRkZWQsIHJpbmdfd3JiKTsKLQlpZiAoZW1iZWRkZWQpIHsKLQkJLyogZW1iZWRkZWQgY29tbWFuZHMgd2lsbCBoYXZlIHRoZSByZXNwb25zZSB3aXRoaW4gdGhlIFdSQi4gKi8KLQkJd3JiX2NvbnRleHQtPndyYiA9IHJpbmdfd3JiOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIG5vbi1lbWJlZGRlZCBjb21tYW5kcyB3aWxsIG5vdCBoYXZlIHRoZSByZXNwb25zZQotCQkgKiB3aXRoaW4gdGhlIFdSQiwgYW5kIHRoZXkgbWF5IGNvbXBsZXRlIG91dC1vZi1vcmRlci4KLQkJICogVGhlIFdSQiB3aWxsIG5vdCBiZSB2YWxpZCB0byBpbnNwZWN0Ci0JCSAqIGR1cmluZyB0aGUgY29tcGxldGlvbi4KLQkJICovCi0JCXdyYl9jb250ZXh0LT53cmIgPSBOVUxMOwotCX0KLQljYiA9IHdyYl9jb250ZXh0LT5jYjsKLQotCWlmIChjYiA9PSBOVUxMKSB7Ci0JCS8qIEFzc2lnbiBvdXIgaW50ZXJuYWwgY2FsbGJhY2sgaWYgdGhpcyBpcyBhCi0JCSAqIHN5bmNocm9ub3VzIGNhbGwuICovCi0JCXdyYl9jb250ZXh0LT5jYiA9IG1jY193cmJfc3luY19jYjsKLQkJd3JiX2NvbnRleHQtPmNiX2NvbnRleHQgPSB3cmJfY29udGV4dDsKLQkJd3JiX2NvbnRleHQtPnVzZXJzX2ZpbmFsX3N0YXR1cyA9ICZmaW5hbF9zdGF0dXM7Ci0JfQotCS8qIEluY3JlbWVudCBwcm9kdWNlciBpbmRleCAqLwotCi0JbWNjX2RiLmR3WzBdID0gMDsJCS8qIGluaXRpYWxpemUgKi8KLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfREIsIHJpZCwgJm1jY19kYiwgbWNjLT5zcS5yaW5nLmlkKTsKLQlBTUFQX1NFVF9CSVRTX1BUUihNQ0NfREIsIG51bVBvc3RlZCwgJm1jY19kYiwgMSk7Ci0KLQltcF9yaW5nX3Byb2R1Y2UoJm1jYy0+c3EucmluZyk7Ci0JUERfV1JJVEUobWNjLT5wYXJlbnRfZnVuY3Rpb24sIG1wdV9tY2NfZGIsIG1jY19kYi5kd1swXSk7Ci0JVFJBQ0UoRExfSU5GTywgInBpZHg6ICV4IGFuZCBjaWR4OiAleC4iLCBtY2MtPnNxLnJpbmcucGlkeCwKLQkgICAgICBtY2MtPnNxLnJpbmcuY2lkeCk7Ci0KLQlpZiAoY2IgPT0gTlVMTCkgewotCQlpbnQgcG9sbHMgPSAwOwkvKiBBdCA+PSAxIHVzIHBlciBwb2xsICAgKi8KLQkJLyogV2FpdCB1bnRpbCB0aGlzIGNvbW1hbmQgY29tcGxldGVzLCBwb2xsaW5nIHRoZSBDUS4gKi8KLQkJZG8gewotCQkJVFJBQ0UoRExfSU5GTywgIkZXQ01EIHN1Ym1pdHRlZCBpbiB0aGUgcG9sbCBtb2RlLiIpOwotCQkJLyogRG8gbm90IHJlYXJtIENRIGluIHRoaXMgY29udGV4dC4gKi8KLQkJCWJlX21jY19wcm9jZXNzX2NxKG1jYywgZmFsc2UpOwotCi0JCQlpZiAoZmluYWxfc3RhdHVzID09IEJFX1BFTkRJTkcpIHsKLQkJCQlpZiAoKCsrcG9sbHMgJiAweDdGRkZGKSA9PSAwKSB7Ci0JCQkJCVRSQUNFKERMX1dBUk4sCi0JCQkJCSAgICAgICJXYXJuaW5nIDogcG9sbGluZyBNQ0MgQ1EgZm9yICVkIgotCQkJCQkgICAgICAibXMuIiwgcG9sbHMgLyAxMDAwKTsKLQkJCQl9Ci0KLQkJCQl1ZGVsYXkoMSk7Ci0JCQl9Ci0KLQkJCS8qIGZpbmFsX3N0YXR1cyBjaGFuZ2VkIHdoZW4gdGhlIGNvbW1hbmQgY29tcGxldGVzICovCi0JCX0gd2hpbGUgKGZpbmFsX3N0YXR1cyA9PSBCRV9QRU5ESU5HKTsKLQotCQlzdGF0dXMgPSBmaW5hbF9zdGF0dXM7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RydWN0IE1DQ19XUkJfQU1BUCAqCi1fYmVfbXB1X3BlZWtfcmluZ193cmIoc3RydWN0IGJlX21jY19vYmplY3QgKm1jYywgYm9vbCBkcml2aW5nX3F1ZXVlKQotewotCS8qIElmIHdlIGhhdmUgcXVldWVkIGl0ZW1zLCBkbyBub3QgYWxsb3cgYSBwb3N0IHRvIGJ5cGFzcyB0aGUgcXVldWUuICovCi0JaWYgKCFkcml2aW5nX3F1ZXVlICYmICFsaXN0X2VtcHR5KCZtY2MtPmJhY2tsb2cpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChtcF9yaW5nX251bV9lbXB0eSgmbWNjLT5zcS5yaW5nKSA8PSAwKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gKHN0cnVjdCBNQ0NfV1JCX0FNQVAgKikgbXBfcmluZ19wcm9kdWNlcl9wdHIoJm1jYy0+c3EucmluZyk7Ci19Ci0KLWludAotYmVfbXB1X2luaXRfbWFpbGJveChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iLCBzdHJ1Y3QgcmluZ19kZXNjICptYWlsYm94KQotewotCUFTU0VSVChtYWlsYm94KTsKLQlwZm9iLT5tYWlsYm94LnZhID0gbWFpbGJveC0+dmE7Ci0JcGZvYi0+bWFpbGJveC5wYSA9ICBjcHVfdG9fbGU2NChtYWlsYm94LT5wYSk7Ci0JcGZvYi0+bWFpbGJveC5sZW5ndGggPSBtYWlsYm94LT5sZW5ndGg7Ci0KLQlBU1NFUlQoKCh1MzIpKHNpemVfdClwZm9iLT5tYWlsYm94LnZhICYgMHhmKSA9PSAwKTsKLQlBU1NFUlQoKCh1MzIpKHNpemVfdClwZm9iLT5tYWlsYm94LnBhICYgMHhmKSA9PSAwKTsKLQkvKgotCSAqIElzc3VlIHRoZSBXUkIgdG8gc2V0IE1QVSBlbmRpYW5uZXNzCi0JICovCi0JewotCQl1NjQgKmVuZGlhbl9jaGVjayA9ICh1NjQgKikgKHBmb2ItPm1haWxib3gudmEgKwotCQkJCW9mZnNldG9mKHN0cnVjdCBCRV9NQ0NfTUFJTEJPWF9BTUFQLCB3cmIpLzgpOwotCQkqZW5kaWFuX2NoZWNrID0gMHhGRjEyMzRGRkZGNTY3OEZGVUxMOwotCX0KLQotCWJlX21jY19tYWlsYm94X25vdGlmeV9hbmRfd2FpdChwZm9iKTsKLQotCXJldHVybiBCRV9TVUNDRVNTOwotfQotCi0KLS8qCi0gICAgVGhpcyByb3V0aW5lIHBvc3RzIGEgY29tbWFuZCB0byB0aGUgTUNDIG1haWxib3guCi0KLSAgICBGdW5jT2JqICAgICAgICAgLSBGdW5jdGlvbiBPYmplY3QgdG8gcG9zdCB0aGUgV1JCIG9uIGJlaGFsZiBvZi4KLSAgICB3cmIgICAgICAgICAgICAgLSB3cmIgdG8gcG9zdC4KLSAgICBDb21wbGV0aW9uQ2FsbGJhY2sgIC0gQWRkcmVzcyBvZiBhIGNhbGxiYWNrIHJvdXRpbmUgdG8gaW52b2tlIG9uY2UgdGhlIFdSQgotCQkJCWlzIGNvbXBsZXRlZC4KLSAgICBDb21wbGV0aW9uQ2FsbGJhY2tDb250ZXh0IC0gT3BhcXVlIGNvbnRleHQgdG8gYmUgcGFzc2VkIGR1cmluZyB0aGUgY2FsbCB0bwotCQkJCXRoZSBDb21wbGV0aW9uQ2FsbGJhY2suCi0gICAgUmV0dXJucyBCRV9TVUNDRVNTIGlmIHN1Y2Nlc3NmdWxsLCBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KLQotICAgIElSUUwgPD1ESVNQQVRDSF9MRVZFTCBpZiBDb21wbGV0aW9uQ2FsbGJhY2sgaXMgIE5VTEwKLQotICAgIFRoaXMgcm91dGluZSB3aWxsIGJsb2NrIHVudGlsIGEgY29tcGxldGlvbiBmb3IgdGhpcyBNQ0MgY29tbWFuZCBoYXMgYmVlbgotICAgIHByb2Nlc3NlZC4gSWYgY2FsbGVkIGF0IERJU1BBVENIX0xFVkVMIHRoZSBDb21wbGV0aW9uQ2FsbGJhY2sgbXVzdCBiZSBOVUxMLgotCi0gICAgVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgTVBVIGhhcyBub3QgYmVlbiBib29zdHJhcGVkIHBhc3QKLSAgICBtYWlsYm94IG1vZGUuCi0qLwotaW50Ci1fYmVfbXB1X3Bvc3Rfd3JiX21haWxib3goc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYiwKLQkgc3RydWN0IE1DQ19XUkJfQU1BUCAqd3JiLCBzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICp3cmJfY29udGV4dCkKLXsKLQlzdHJ1Y3QgTUNDX01BSUxCT1hfQU1BUCAqbWFpbGJveCA9IE5VTEw7Ci0Jc3RydWN0IE1DQ19XUkJfQU1BUCAqbWJfd3JiOwotCXN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCAqbWJfY3E7Ci0JdTMyIG9mZnNldCwgc3RhdHVzOwotCi0JQVNTRVJUKHBmb2ItPm1jYyA9PSBOVUxMKTsKLQltYWlsYm94ID0gcGZvYi0+bWFpbGJveC52YTsKLQlBU1NFUlQobWFpbGJveCk7Ci0KLQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgQkVfTUNDX01BSUxCT1hfQU1BUCwgd3JiKS84OwotCW1iX3dyYiA9IChzdHJ1Y3QgTUNDX1dSQl9BTUFQICopICh1OCAqKW1haWxib3ggKyBvZmZzZXQ7Ci0JaWYgKG1iX3dyYiAhPSB3cmIpIHsKLQkJbWVtc2V0KG1haWxib3gsIDAsIHNpemVvZigqbWFpbGJveCkpOwotCQltZW1jcHkobWJfd3JiLCB3cmIsIHNpemVvZihzdHJ1Y3QgTUNDX1dSQl9BTUFQKSk7Ci0JfQotCS8qIFRoZSBjYWxsYmFjayBjYW4gaW5zcGVjdCB0aGUgZmluYWwgV1JCIHRvIGdldCBvdXRwdXQgcGFyYW1ldGVycy4gKi8KLQl3cmJfY29udGV4dC0+d3JiID0gbWJfd3JiOwotCi0JYmVfbWNjX21haWxib3hfbm90aWZ5X2FuZF93YWl0KHBmb2IpOwotCi0JLyogQSBjb21tYW5kIGNvbXBsZXRlZC4gIFVzZSB0YWcgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbW1hbmQuICovCi0Jb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IEJFX01DQ19NQUlMQk9YX0FNQVAsIGNxKS84OwotCW1iX2NxID0gKHN0cnVjdCBNQ0NfQ1FfRU5UUllfQU1BUCAqKSAoKHU4ICopbWFpbGJveCArIG9mZnNldCk7Ci0JYmVfbWNjX3Byb2Nlc3NfY3FlKHBmb2IsIG1iX2NxKTsKLQotCXN0YXR1cyA9IEFNQVBfR0VUX0JJVFNfUFRSKE1DQ19DUV9FTlRSWSwgY29tcGxldGlvbl9zdGF0dXMsIG1iX2NxKTsKLQlpZiAoc3RhdHVzKQotCQlzdGF0dXMgPSBCRV9OT1RfT0s7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqCi1fYmVfbWNjX2FsbG9jYXRlX3dyYl9jb250ZXh0KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0Jc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqY29udGV4dCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpcnE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGZvYi0+bWNjX2NvbnRleHRfbG9jaywgaXJxKTsKLQotCWlmICghcGZvYi0+bWFpbGJveC5kZWZhdWx0X2NvbnRleHRfYWxsb2NhdGVkKSB7Ci0JCS8qIFVzZSB0aGUgc2luZ2xlIGRlZmF1bHQgY29udGV4dCB0aGF0IHdlCi0JCSAqIGFsd2F5cyBoYXZlIGFsbG9jYXRlZC4gKi8KLQkJcGZvYi0+bWFpbGJveC5kZWZhdWx0X2NvbnRleHRfYWxsb2NhdGVkID0gdHJ1ZTsKLQkJY29udGV4dCA9ICZwZm9iLT5tYWlsYm94LmRlZmF1bHRfY29udGV4dDsKLQl9IGVsc2UgaWYgKHBmb2ItPm1jYykgewotCQkvKiBHZXQgYSBjb250ZXh0IGZyb20gdGhlIGZyZWUgbGlzdC4gSWYgYW55IGFyZSBhdmFpbGFibGUuICovCi0JCWlmICghbGlzdF9lbXB0eSgmcGZvYi0+bWNjLT53cmJfY29udGV4dC5saXN0X2hlYWQpKSB7Ci0JCQljb250ZXh0ID0gbGlzdF9maXJzdF9lbnRyeSgKLQkJCQkmcGZvYi0+bWNjLT53cmJfY29udGV4dC5saXN0X2hlYWQsCi0JCQkJCSBzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0LCBuZXh0KTsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmb2ItPm1jY19jb250ZXh0X2xvY2ssIGlycSk7Ci0KLQlyZXR1cm4gY29udGV4dDsKLX0KLQotdm9pZAotX2JlX21jY19mcmVlX3dyYl9jb250ZXh0KHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IsCi0JCQkgc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqY29udGV4dCkKLXsKLQl1bnNpZ25lZCBsb25nIGlycTsKLQotCUFTU0VSVChjb250ZXh0KTsKLQkvKgotCSAqIFplcm8gZHVyaW5nIGZyZWUgdG8gdHJ5IGFuZCBjYXRjaCBhbnkgYnVncyB3aGVyZSB0aGUgY29udGV4dAotCSAqIGlzIGFjY2Vzc2VkIGFmdGVyIGEgZnJlZS4KLQkgKi8KLQltZW1zZXQoY29udGV4dCwgMCwgc2l6ZW9mKGNvbnRleHQpKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZm9iLT5tY2NfY29udGV4dF9sb2NrLCBpcnEpOwotCi0JaWYgKGNvbnRleHQgPT0gJnBmb2ItPm1haWxib3guZGVmYXVsdF9jb250ZXh0KSB7Ci0JCS8qIEZyZWUgdGhlIGRlZmF1bHQgY29udGV4dC4gKi8KLQkJQVNTRVJUKHBmb2ItPm1haWxib3guZGVmYXVsdF9jb250ZXh0X2FsbG9jYXRlZCk7Ci0JCXBmb2ItPm1haWxib3guZGVmYXVsdF9jb250ZXh0X2FsbG9jYXRlZCA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCS8qIEFkZCB0byBmcmVlIGxpc3QuICovCi0JCUFTU0VSVChwZm9iLT5tY2MpOwotCQlsaXN0X2FkZF90YWlsKCZjb250ZXh0LT5uZXh0LAotCQkJCSZwZm9iLT5tY2MtPndyYl9jb250ZXh0Lmxpc3RfaGVhZCk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGZvYi0+bWNjX2NvbnRleHRfbG9jaywgaXJxKTsKLX0KLQotaW50Ci1iZV9tY2NfYWRkX2FzeW5jX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBiZV9tY2Nfb2JqZWN0ICptY2Nfb2JqZWN0LAotCQltY2NfYXN5bmNfZXZlbnRfY2FsbGJhY2sgY2IsIHZvaWQgKmNiX2NvbnRleHQpCi17Ci0JLyogTG9jayBhZ2FpbnN0IGFueW9uZSB0cnlpbmcgdG8gY2hhbmdlIHRoZSBjYWxsYmFjay9jb250ZXh0IHBvaW50ZXJzCi0JICogd2hpbGUgYmVpbmcgdXNlZC4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWNjX29iamVjdC0+cGFyZW50X2Z1bmN0aW9uLT5jcV9sb2NrLAotCQltY2Nfb2JqZWN0LT5wYXJlbnRfZnVuY3Rpb24tPmNxX2lycSk7Ci0KLQkvKiBBc3NpZ24gdGhlIGFzeW5jIGNhbGxiYWNrLiAqLwotCW1jY19vYmplY3QtPmFzeW5jX2NvbnRleHQgPSBjYl9jb250ZXh0OwotCW1jY19vYmplY3QtPmFzeW5jX2NiID0gY2I7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2Nfb2JqZWN0LT5wYXJlbnRfZnVuY3Rpb24tPmNxX2xvY2ssCi0JCQkJCW1jY19vYmplY3QtPnBhcmVudF9mdW5jdGlvbi0+Y3FfaXJxKTsKLQotCXJldHVybiBCRV9TVUNDRVNTOwotfQotCi0jZGVmaW5lIE1QVV9FUF9DT05UUk9MIDAKLSNkZWZpbmUgTVBVX0VQX1NFTUFQSE9SRSAweGFjCi0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV93YWl0X2Zvcl9QT1NUX2NvbXBsZXRlCi0gKiAgIFdhaXRzIHVudGlsIHRoZSBCbGFkZUVuZ2luZSBQT1NUIGNvbXBsZXRlcyAoZWl0aGVyIGluIGVycm9yIG9yIHN1Y2Nlc3MpLgotICogcGZvYiAtCi0gKiByZXR1cm4gc3RhdHVzICAgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIGludCBiZV93YWl0X2Zvcl9QT1NUX2NvbXBsZXRlKHN0cnVjdCBiZV9mdW5jdGlvbl9vYmplY3QgKnBmb2IpCi17Ci0Jc3RydWN0IE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVF9BTUFQIHN0YXR1czsKLQlpbnQgczsKLQl1MzIgcG9zdF9lcnJvciwgcG9zdF9zdGFnZTsKLQotCWNvbnN0IHUzMiB1c19wZXJfbG9vcCA9IDEwMDA7CS8qIDEwMDB1cyAqLwotCWNvbnN0IHUzMiBwcmludF9mcmVxdWVuY3lfbG9vcHMgPSAxMDAwMDAwIC8gdXNfcGVyX2xvb3A7Ci0JY29uc3QgdTMyIG1heF9sb29wcyA9IDYwICogcHJpbnRfZnJlcXVlbmN5X2xvb3BzOwotCXUzMiBsb29wcyA9IDA7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGFybSBmdyBpbmRpY2F0aW5nIGl0IGlzIGRvbmUgb3IgYSBmYXRhbCBlcnJvciBoYXBwZW5lZC4KLQkgKiBOb3RlOiBQT1NUIGNhbiB0YWtlIHNvbWUgdGltZSB0byBjb21wbGV0ZSBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbgotCSAqIHNldHRpbmdzIChjb25zaWRlciBBUk0gYXR0ZW1wdHMgdG8gYWNxdWlyZSBhbiBJUCBhZGRyZXNzCi0JICogb3ZlciBESENQISEhKS4KLQkgKgotCSAqLwotCWRvIHsKLQkJc3RhdHVzLmR3WzBdID0gaW9yZWFkMzIocGZvYi0+Y3NyX3ZhICsgTVBVX0VQX1NFTUFQSE9SRSk7Ci0JCXBvc3RfZXJyb3IgPSBBTUFQX0dFVF9CSVRTX1BUUihNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1QsCi0JCQkJCQllcnJvciwgJnN0YXR1cyk7Ci0JCXBvc3Rfc3RhZ2UgPSBBTUFQX0dFVF9CSVRTX1BUUihNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1QsCi0JCQkJCQlzdGFnZSwgJnN0YXR1cyk7Ci0JCWlmICgwID09IChsb29wcyAlIHByaW50X2ZyZXF1ZW5jeV9sb29wcykpIHsKLQkJCS8qIFByaW50IGN1cnJlbnQgc3RhdHVzICovCi0JCQlUUkFDRShETF9JTkZPLCAiUE9TVCBzdGF0dXMgPSAweCV4IChzdGFnZSA9IDB4JXgpIiwKLQkJCQlzdGF0dXMuZHdbMF0sIHBvc3Rfc3RhZ2UpOwotCQl9Ci0JCXVkZWxheSh1c19wZXJfbG9vcCk7Ci0JfSB3aGlsZSAoKHBvc3RfZXJyb3IgIT0gMSkgJiYKLQkJIChwb3N0X3N0YWdlICE9IFBPU1RfU1RBR0VfQVJNRldfUkVBRFkpICYmCi0JCSAoKytsb29wcyA8IG1heF9sb29wcykpOwotCi0JaWYgKHBvc3RfZXJyb3IgPT0gMSkgewotCQlUUkFDRShETF9FUlIsICJQT1NUIGVycm9yISBTdGF0dXMgPSAweCV4IChzdGFnZSA9IDB4JXgpIiwKLQkJICAgICAgc3RhdHVzLmR3WzBdLCBwb3N0X3N0YWdlKTsKLQkJcyA9IEJFX05PVF9PSzsKLQl9IGVsc2UgaWYgKHBvc3Rfc3RhZ2UgIT0gUE9TVF9TVEFHRV9BUk1GV19SRUFEWSkgewotCQlUUkFDRShETF9FUlIsICJQT1NUIHRpbWUtb3V0ISBTdGF0dXMgPSAweCV4IChzdGFnZSA9IDB4JXgpIiwKLQkJICAgICAgc3RhdHVzLmR3WzBdLCBwb3N0X3N0YWdlKTsKLQkJcyA9IEJFX05PVF9PSzsKLQl9IGVsc2UgewotCQlzID0gQkVfU1VDQ0VTUzsKLQl9Ci0JcmV0dXJuIHM7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV9raWNrb2ZmX2FuZF93YWl0X2Zvcl9QT1NUCi0gKiAgIEludGVyYWN0cyB3aXRoIHRoZSBCbGFkZUVuZ2luZSBtYW5hZ2VtZW50IHByb2Nlc3NvciB0byBpbml0aWF0ZSBQT1NULCBhbmQKLSAqICAgc3Vic2VxdWVudGx5IHdhaXRzIHVudGlsIFBPU1QgY29tcGxldGVzIChlaXRoZXIgaW4gZXJyb3Igb3Igc3VjY2VzcykuCi0gKiAgIFRoZSBjYWxsZXIgbXVzdCBhY3F1aXJlIHRoZSByZXNldCBzZW1hcGhvcmUgYmVmb3JlIGluaXRpYXRpbmcgUE9TVAotICogICB0byBwcmV2ZW50IG11bHRpcGxlIGRyaXZlcnMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbWFuYWdlbWVudCBwcm9jZXNzb3IuCi0gKiAgIE9uY2UgUE9TVCBpcyBjb21wbGV0ZSB0aGUgY2FsbGVyIG11c3QgcmVsZWFzZSB0aGUgcmVzZXQgc2VtYXBob3JlLgotICogICBDYWxsZXJzIHdobyBvbmx5IHdhbnQgdG8gd2FpdCBmb3IgUE9TVCBjb21wbGV0ZSBtYXkgY2FsbAotICogICBiZV93YWl0X2Zvcl9QT1NUX2NvbXBsZXRlLgotICogcGZvYiAtCi0gKiByZXR1cm4gc3RhdHVzICAgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIGludAotYmVfa2lja29mZl9hbmRfd2FpdF9mb3JfUE9TVChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBNR01UX0hCQV9QT1NUX1NUQVRVU19TVFJVQ1RfQU1BUCBzdGF0dXM7Ci0JaW50IHM7Ci0KLQljb25zdCB1MzIgdXNfcGVyX2xvb3AgPSAxMDAwOwkvKiAxMDAwdXMgKi8KLQljb25zdCB1MzIgcHJpbnRfZnJlcXVlbmN5X2xvb3BzID0gMTAwMDAwMCAvIHVzX3Blcl9sb29wOwotCWNvbnN0IHUzMiBtYXhfbG9vcHMgPSA1ICogcHJpbnRfZnJlcXVlbmN5X2xvb3BzOwotCXUzMiBsb29wcyA9IDA7Ci0JdTMyIHBvc3RfZXJyb3IsIHBvc3Rfc3RhZ2U7Ci0KLQkvKiBXYWl0IGZvciBhcm0gZncgYXdhaXRpbmcgaG9zdCByZWFkeSBvciBhIGZhdGFsIGVycm9yIGhhcHBlbmVkLiAqLwotCVRSQUNFKERMX0lORk8sICJXYWl0IGZvciBCbGFkZUVuZ2luZSByZWFkeSB0byBQT1NUIik7Ci0JZG8gewotCQlzdGF0dXMuZHdbMF0gPSBpb3JlYWQzMihwZm9iLT5jc3JfdmEgKyBNUFVfRVBfU0VNQVBIT1JFKTsKLQkJcG9zdF9lcnJvciA9IEFNQVBfR0VUX0JJVFNfUFRSKE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVCwKLQkJCQkJCWVycm9yLCAmc3RhdHVzKTsKLQkJcG9zdF9zdGFnZSA9IEFNQVBfR0VUX0JJVFNfUFRSKE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVCwKLQkJCQkJCXN0YWdlLCAmc3RhdHVzKTsKLQkJaWYgKDAgPT0gKGxvb3BzICUgcHJpbnRfZnJlcXVlbmN5X2xvb3BzKSkgewotCQkJLyogUHJpbnQgY3VycmVudCBzdGF0dXMgKi8KLQkJCVRSQUNFKERMX0lORk8sICJQT1NUIHN0YXR1cyA9IDB4JXggKHN0YWdlID0gMHgleCkiLAotCQkJICAgICAgc3RhdHVzLmR3WzBdLCBwb3N0X3N0YWdlKTsKLQkJfQotCQl1ZGVsYXkodXNfcGVyX2xvb3ApOwotCX0gd2hpbGUgKChwb3N0X2Vycm9yICE9IDEpICYmCi0JCSAocG9zdF9zdGFnZSA8IFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkpICYmCi0JCSAoKytsb29wcyA8IG1heF9sb29wcykpOwotCi0JaWYgKHBvc3RfZXJyb3IgPT0gMSkgewotCQlUUkFDRShETF9FUlIsICJQcmUtUE9TVCBlcnJvciEgU3RhdHVzID0gMHgleCAoc3RhZ2UgPSAweCV4KSIsCi0JCSAgICAgIHN0YXR1cy5kd1swXSwgcG9zdF9zdGFnZSk7Ci0JCXMgPSBCRV9OT1RfT0s7Ci0JfSBlbHNlIGlmIChwb3N0X3N0YWdlID09IFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkpIHsKLQkJaW93cml0ZTMyKFBPU1RfU1RBR0VfSE9TVF9SRFksIHBmb2ItPmNzcl92YSArIE1QVV9FUF9TRU1BUEhPUkUpOwotCi0JCS8qIFdhaXQgZm9yIFBPU1QgdG8gY29tcGxldGUgKi8KLQkJcyA9IGJlX3dhaXRfZm9yX1BPU1RfY29tcGxldGUocGZvYik7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogRWl0aGVyIGEgdGltZW91dCB3YWl0aW5nIGZvciBob3N0IHJlYWR5IHNpZ25hbCBvciBQT1NUIGhhcwotCQkgKiBtb3ZlZCBhaGVhZCB3aXRob3V0IHJlcXVpcmluZyBhIGhvc3QgcmVhZHkgc2lnbmFsLgotCQkgKiBNaWdodCBhcyB3ZWxsIGdpdmUgUE9TVCBhIGNoYW5jZSB0byBjb21wbGV0ZQotCQkgKiAob3IgdGltZW91dCBhZ2FpbikuCi0JCSAqLwotCQlzID0gYmVfd2FpdF9mb3JfUE9TVF9jb21wbGV0ZShwZm9iKTsKLQl9Ci0JcmV0dXJuIHM7Ci19Ci0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV9wY2lfc29mdF9yZXNldAotICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBpc3N1ZSBhIEJsYWRlRW5naW5lIHNvZnQgcmVzZXQuCi0gKiAgIENhbGxlcnMgc2hvdWxkIGFjcXVpcmUgdGhlIHNvZnQgcmVzZXQgc2VtYXBob3JlIGJlZm9yZSBjYWxsaW5nIHRoaXMKLSAqICAgZnVuY3Rpb24uIEFkZGl0aW9uYWx5LCBjYWxsZXJzIHNob3VsZCBlbnN1cmUgdGhleSBjYW5ub3QgYmUgcHJlLWVtcHRlZAotICogICB3aGlsZSB0aGUgcm91dGluZSBleGVjdXRlcy4gVXBvbiBjb21wbGV0aW9uIG9mIHRoaXMgcm91dGluZSwgY2FsbGVycwotICogICBzaG91bGQgcmVsZWFzZSB0aGUgcmVzZXQgc2VtYXBob3JlLiBUaGlzIHJvdXRpbmUgaW1wbGljaXRseSB3YWl0cwotICogICBmb3IgQmxhZGVFbmdpbmUgUE9TVCB0byBjb21wbGV0ZS4KLSAqIHBmb2IgLQotICogcmV0dXJuIHN0YXR1cyAgIC0gQkVfU1VDQ0VTUyAoMCkgb24gc3VjY2Vzcy4gTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludCBiZV9wY2lfc29mdF9yZXNldChzdHJ1Y3QgYmVfZnVuY3Rpb25fb2JqZWN0ICpwZm9iKQotewotCXN0cnVjdCBQQ0lDRkdfU09GVF9SRVNFVF9DU1JfQU1BUCBzb2Z0X3Jlc2V0OwotCXN0cnVjdCBQQ0lDRkdfT05MSU5FMF9DU1JfQU1BUCBwY2lPbmxpbmUwOwotCXN0cnVjdCBQQ0lDRkdfT05MSU5FMV9DU1JfQU1BUCBwY2lPbmxpbmUxOwotCXN0cnVjdCBFUF9DT05UUk9MX0NTUl9BTUFQIGVwQ29udHJvbENzcjsKLQlpbnQgc3RhdHVzID0gQkVfU1VDQ0VTUzsKLQl1MzIgaSwgc29mdF9yZXNldF9iaXQ7Ci0KLQlUUkFDRShETF9OT1RFLCAiUENJIHJlc2V0Li4uIik7Ci0KLQkvKiBJc3N1ZSBzb2Z0IHJlc2V0ICMxIHRvIGdldCBCbGFkZUVuZ2luZSBpbnRvIGEga25vd24gc3RhdGUuICovCi0Jc29mdF9yZXNldC5kd1swXSA9IFBDSUNGRzBfUkVBRChwZm9iLCBzb2Z0X3Jlc2V0KTsKLQlBTUFQX1NFVF9CSVRTX1BUUihQQ0lDRkdfU09GVF9SRVNFVF9DU1IsIHNvZnRyZXNldCwgc29mdF9yZXNldC5kdywgMSk7Ci0JUENJQ0ZHMF9XUklURShwZm9iLCBob3N0X3RpbWVyX2ludF9jdHJsLCBzb2Z0X3Jlc2V0LmR3WzBdKTsKLQkvKgotCSAqIHdhaXQgdGlsIHNvZnQgcmVzZXQgaXMgZGVhc3NlcnRlZCAtIGhhcmR3YXJlCi0JICogZGVhc3NlcnRzIGFmdGVyIHNvbWUgdGltZS4KLQkgKi8KLQlpID0gMDsKLQlkbyB7Ci0JCXVkZWxheSg1MCk7Ci0JCXNvZnRfcmVzZXQuZHdbMF0gPSBQQ0lDRkcwX1JFQUQocGZvYiwgc29mdF9yZXNldCk7Ci0JCXNvZnRfcmVzZXRfYml0ID0gQU1BUF9HRVRfQklUU19QVFIoUENJQ0ZHX1NPRlRfUkVTRVRfQ1NSLAotCQkJCQlzb2Z0cmVzZXQsIHNvZnRfcmVzZXQuZHcpOwotCX0gd2hpbGUgKHNvZnRfcmVzZXRfYml0ICAmJiAoaSsrIDwgMTAyNCkpOwotCWlmIChzb2Z0X3Jlc2V0X2JpdCAhPSAwKSB7Ci0JCVRSQUNFKERMX0VSUiwgIlNvZnQtcmVzZXQgIzEgZGlkIG5vdCBkZWFzc2VydCBhcyBleHBlY3RlZC4iKTsKLQkJc3RhdHVzID0gQkVfTk9UX09LOwotCQlnb3RvIEVycm9yX2xhYmVsOwotCX0KLQkvKiBNYXNrIGV2ZXJ5dGhpbmcgICovCi0JUENJQ0ZHMF9XUklURShwZm9iLCB1ZV9zdGF0dXNfbG93X21hc2ssIDB4RkZGRkZGRkYpOwotCVBDSUNGRzBfV1JJVEUocGZvYiwgdWVfc3RhdHVzX2hpX21hc2ssIDB4RkZGRkZGRkYpOwotCS8qCi0JICogU2V0IGV2ZXJ5dGhpbmcgb2ZmbGluZSBleGNlcHQgTVBVIElSQU0gKGl0IGlzIG9mZmxpbmUgd2l0aAotCSAqIHRoZSBzb2Z0LXJlc2V0LCBidXQgc29mdC1yZXNldCBkb2VzIG5vdCByZXNldCB0aGUgUENJQ0ZHIHJlZ2lzdGVycyEpCi0JICovCi0JcGNpT25saW5lMC5kd1swXSA9IDA7Ci0JcGNpT25saW5lMS5kd1swXSA9IDA7Ci0JQU1BUF9TRVRfQklUU19QVFIoUENJQ0ZHX09OTElORTFfQ1NSLCBtcHVfaXJhbV9vbmxpbmUsCi0JCQkJcGNpT25saW5lMS5kdywgMSk7Ci0JUENJQ0ZHMF9XUklURShwZm9iLCBvbmxpbmUwLCBwY2lPbmxpbmUwLmR3WzBdKTsKLQlQQ0lDRkcwX1dSSVRFKHBmb2IsIG9ubGluZTEsIHBjaU9ubGluZTEuZHdbMF0pOwotCi0JdWRlbGF5KDIwMDAwKTsKLQotCS8qIElzc3VlIHNvZnQgcmVzZXQgIzIuICovCi0JQU1BUF9TRVRfQklUU19QVFIoUENJQ0ZHX1NPRlRfUkVTRVRfQ1NSLCBzb2Z0cmVzZXQsIHNvZnRfcmVzZXQuZHcsIDEpOwotCVBDSUNGRzBfV1JJVEUocGZvYiwgaG9zdF90aW1lcl9pbnRfY3RybCwgc29mdF9yZXNldC5kd1swXSk7Ci0JLyoKLQkgKiB3YWl0IHRpbCBzb2Z0IHJlc2V0IGlzIGRlYXNzZXJ0ZWQgLSBoYXJkd2FyZQotCSAqIGRlYXNzZXJ0cyBhZnRlciBzb21lIHRpbWUuCi0JICovCi0JaSA9IDA7Ci0JZG8gewotCQl1ZGVsYXkoNTApOwotCQlzb2Z0X3Jlc2V0LmR3WzBdID0gUENJQ0ZHMF9SRUFEKHBmb2IsIHNvZnRfcmVzZXQpOwotCQlzb2Z0X3Jlc2V0X2JpdCA9IEFNQVBfR0VUX0JJVFNfUFRSKFBDSUNGR19TT0ZUX1JFU0VUX0NTUiwKLQkJCQkJc29mdHJlc2V0LCBzb2Z0X3Jlc2V0LmR3KTsKLQl9IHdoaWxlIChzb2Z0X3Jlc2V0X2JpdCAgJiYgKGkrKyA8IDEwMjQpKTsKLQlpZiAoc29mdF9yZXNldF9iaXQgIT0gMCkgewotCQlUUkFDRShETF9FUlIsICJTb2Z0LXJlc2V0ICMxIGRpZCBub3QgZGVhc3NlcnQgYXMgZXhwZWN0ZWQuIik7Ci0JCXN0YXR1cyA9IEJFX05PVF9PSzsKLQkJZ290byBFcnJvcl9sYWJlbDsKLQl9Ci0KLQotCXVkZWxheSgyMDAwMCk7Ci0KLQkvKiBUYWtlIE1QVSBvdXQgb2YgcmVzZXQuICovCi0KLQllcENvbnRyb2xDc3IuZHdbMF0gPSBpb3JlYWQzMihwZm9iLT5jc3JfdmEgKyBNUFVfRVBfQ09OVFJPTCk7Ci0JQU1BUF9TRVRfQklUU19QVFIoRVBfQ09OVFJPTF9DU1IsIENQVV9yZXNldCwgJmVwQ29udHJvbENzciwgMCk7Ci0JaW93cml0ZTMyKCh1MzIpZXBDb250cm9sQ3NyLmR3WzBdLCBwZm9iLT5jc3JfdmEgKyBNUFVfRVBfQ09OVFJPTCk7Ci0KLQkvKiBLaWNrb2ZmIEJFIFBPU1QgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLQlzdGF0dXMgPSBiZV9raWNrb2ZmX2FuZF93YWl0X2Zvcl9QT1NUKHBmb2IpOwotCi1FcnJvcl9sYWJlbDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0KLS8qCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9uOiBiZV9wY2lfcmVzZXRfcmVxdWlyZWQKLSAqICAgVGhpcyBwcml2YXRlIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlY3QgaWYgYSBob3N0IGVudGl0eSBpcwotICogICByZXF1aXJlZCB0byBpc3N1ZSBhIFBDSSBzb2Z0IHJlc2V0IGFuZCBzdWJzZXF1ZW50bHkgZHJpdmUKLSAqICAgQmxhZGVFbmdpbmUgUE9TVC4gU2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgcmVxdWlyZWQ6Ci0gKiAgIDEpIEJJT1MtbGVzcyBjb25maWd1cmF0aW9uCi0gKiAgIDIpIEhvdC1zd2FwL3BsdWcvcG93ZXItb24KLSAqIHBmb2IgLQotICogcmV0dXJuICAgdHJ1ZSBpZiBhIHJlc2V0IGlzIHJlcXVpcmVkLCBmYWxzZSBvdGhlcndpc2UKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgYm9vbCBiZV9wY2lfcmVzZXRfcmVxdWlyZWQoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlzdHJ1Y3QgTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNUX0FNQVAgc3RhdHVzOwotCWJvb2wgZG9fcmVzZXQgPSBmYWxzZTsKLQl1MzIgcG9zdF9lcnJvciwgcG9zdF9zdGFnZTsKLQotCS8qCi0JICogUmVhZCB0aGUgUE9TVCBzdGF0dXMgcmVnaXN0ZXIKLQkgKi8KLQlzdGF0dXMuZHdbMF0gPSBpb3JlYWQzMihwZm9iLT5jc3JfdmEgKyBNUFVfRVBfU0VNQVBIT1JFKTsKLQlwb3N0X2Vycm9yID0gQU1BUF9HRVRfQklUU19QVFIoTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNULCBlcnJvciwKLQkJCQkJCQkJJnN0YXR1cyk7Ci0JcG9zdF9zdGFnZSA9IEFNQVBfR0VUX0JJVFNfUFRSKE1HTVRfSEJBX1BPU1RfU1RBVFVTX1NUUlVDVCwgc3RhZ2UsCi0JCQkJCQkJCSZzdGF0dXMpOwotCWlmIChwb3N0X3N0YWdlIDw9IFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkpIHsKLQkJLyoKLQkJICogSWYgQmxhZGVFbmdpbmUgaXMgd2FpdGluZyBmb3IgaG9zdCByZWFkeSBpbmRpY2F0aW9uLAotCQkgKiB3ZSB3YW50IHRvIGRvIGEgUENJIHJlc2V0LgotCQkgKi8KLQkJZG9fcmVzZXQgPSB0cnVlOwotCX0KLQotCXJldHVybiBkb19yZXNldDsKLX0KLQotLyoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb246IGJlX2RyaXZlX1BPU1QKLSAqICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZHJpdmUgQmxhZGVFbmdpbmUgUE9TVC4gVGhlCi0gKiAgIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoZXkgY2Fubm90IGJlIHByZS1lbXB0ZWQgd2hpbGUgdGhpcyByb3V0aW5lIGV4ZWN1dGVzLgotICogcGZvYiAtCi0gKiByZXR1cm4gc3RhdHVzICAgLSBCRV9TVUNDRVNTICgwKSBvbiBzdWNjZXNzLiBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotaW50IGJlX2RyaXZlX1BPU1Qoc3RydWN0IGJlX2Z1bmN0aW9uX29iamVjdCAqcGZvYikKLXsKLQlpbnQgc3RhdHVzOwotCi0JaWYgKGZhbHNlICE9IGJlX3BjaV9yZXNldF9yZXF1aXJlZChwZm9iKSkgewotCQkvKiBQQ0kgcmVzZXQgaXMgbmVlZGVkIChpbXBsaWNpdGx5IHN0YXJ0cyBhbmQgd2FpdHMgZm9yIFBPU1QpICovCi0JCXN0YXR1cyA9IGJlX3BjaV9zb2Z0X3Jlc2V0KHBmb2IpOwotCX0gZWxzZSB7Ci0JCS8qIE5vIFBDSSByZXNldCBpcyBuZWVkZWQsIHN0YXJ0IFBPU1QgKi8KLQkJc3RhdHVzID0gYmVfa2lja29mZl9hbmRfd2FpdF9mb3JfUE9TVChwZm9iKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L21wdS5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L21wdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWYzZjg3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19tcHVfYW1hcF9oX18KLSNkZWZpbmUgX19tcHVfYW1hcF9oX18KLSNpbmNsdWRlICJlcC5oIgotCi0vKiBQcm92aWRlIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIE1hbmFnbWVudCBQcm9jZXNzb3IgVW5pdC4gKi8KLXN0cnVjdCBCRV9NUFVfQ1NSTUFQX0FNQVAgewotCXN0cnVjdCBCRV9FUF9DU1JNQVBfQU1BUCBlcDsKLQl1OCByc3ZkMFsxMjhdOwkvKiBEV09SRCA2NCAqLwotCXU4IHJzdmQxWzMyXTsJLyogRFdPUkQgNjggKi8KLQl1OCByc3ZkMlsxOTJdOwkvKiBEV09SRCA2OSAqLwotCXU4IHJzdmQzWzE5Ml07CS8qIERXT1JEIDc1ICovCi0JdTggcnN2ZDRbMzJdOwkvKiBEV09SRCA4MSAqLwotCXU4IHJzdmQ1WzMyXTsJLyogRFdPUkQgODIgKi8KLQl1OCByc3ZkNlszMl07CS8qIERXT1JEIDgzICovCi0JdTggcnN2ZDdbMzJdOwkvKiBEV09SRCA4NCAqLwotCXU4IHJzdmQ4WzMyXTsJLyogRFdPUkQgODUgKi8KLQl1OCByc3ZkOVszMl07CS8qIERXT1JEIDg2ICovCi0JdTggcnN2ZDEwWzMyXTsJLyogRFdPUkQgODcgKi8KLQl1OCByc3ZkMTFbMzJdOwkvKiBEV09SRCA4OCAqLwotCXU4IHJzdmQxMlszMl07CS8qIERXT1JEIDg5ICovCi0JdTggcnN2ZDEzWzMyXTsJLyogRFdPUkQgOTAgKi8KLQl1OCByc3ZkMTRbMzJdOwkvKiBEV09SRCA5MSAqLwotCXU4IHJzdmQxNVszMl07CS8qIERXT1JEIDkyICovCi0JdTggcnN2ZDE2WzMyXTsJLyogRFdPUkQgOTMgKi8KLQl1OCByc3ZkMTdbMzJdOwkvKiBEV09SRCA5NCAqLwotCXU4IHJzdmQxOFszMl07CS8qIERXT1JEIDk1ICovCi0JdTggcnN2ZDE5WzMyXTsJLyogRFdPUkQgOTYgKi8KLQl1OCByc3ZkMjBbMzJdOwkvKiBEV09SRCA5NyAqLwotCXU4IHJzdmQyMVszMl07CS8qIERXT1JEIDk4ICovCi0JdTggcnN2ZDIyWzMyXTsJLyogRFdPUkQgOTkgKi8KLQl1OCByc3ZkMjNbMzJdOwkvKiBEV09SRCAxMDAgKi8KLQl1OCByc3ZkMjRbMzJdOwkvKiBEV09SRCAxMDEgKi8KLQl1OCByc3ZkMjVbMzJdOwkvKiBEV09SRCAxMDIgKi8KLQl1OCByc3ZkMjZbMzJdOwkvKiBEV09SRCAxMDMgKi8KLQl1OCByc3ZkMjdbMzJdOwkvKiBEV09SRCAxMDQgKi8KLQl1OCByc3ZkMjhbOTZdOwkvKiBEV09SRCAxMDUgKi8KLQl1OCByc3ZkMjlbMzJdOwkvKiBEV09SRCAxMDggKi8KLQl1OCByc3ZkMzBbMzJdOwkvKiBEV09SRCAxMDkgKi8KLQl1OCByc3ZkMzFbMzJdOwkvKiBEV09SRCAxMTAgKi8KLQl1OCByc3ZkMzJbMzJdOwkvKiBEV09SRCAxMTEgKi8KLQl1OCByc3ZkMzNbMzJdOwkvKiBEV09SRCAxMTIgKi8KLQl1OCByc3ZkMzRbOTZdOwkvKiBEV09SRCAxMTMgKi8KLQl1OCByc3ZkMzVbMzJdOwkvKiBEV09SRCAxMTYgKi8KLQl1OCByc3ZkMzZbMzJdOwkvKiBEV09SRCAxMTcgKi8KLQl1OCByc3ZkMzdbMzJdOwkvKiBEV09SRCAxMTggKi8KLQl1OCByc3ZkMzhbMzJdOwkvKiBEV09SRCAxMTkgKi8KLQl1OCByc3ZkMzlbMzJdOwkvKiBEV09SRCAxMjAgKi8KLQl1OCByc3ZkNDBbMzJdOwkvKiBEV09SRCAxMjEgKi8KLQl1OCByc3ZkNDFbMTM0XVszMl07CS8qIERXT1JEIDEyMiAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBNUFVfQ1NSTUFQX0FNQVAgewotCXUzMiBkd1syNTZdOwotfTsKLQotI2VuZGlmIC8qIF9fbXB1X2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvbXB1X2NvbnRleHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHVfY29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2U5MGY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9tcHVfY29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX21wdV9jb250ZXh0X2FtYXBfaF9fCi0jZGVmaW5lIF9fbXB1X2NvbnRleHRfYW1hcF9oX18KLQotLyoKLSAqIE1hbmFnZW1lbnQgY29tbWFuZCBhbmQgY29udHJvbCByaW5nIGNvbnRleHQuIFRoZSBNUFVzIEJUTFJfQ1RSTDEgQ1NSCi0gKiBjb250cm9scyB0aGUgd3JpdGViYWNrIGJlaGF2aW9yIG9mIHRoZSBwcm9kdWNlciBhbmQgY29uc3VtZXIgaW5kZXggdmFsdWVzLgotICovCi1zdHJ1Y3QgQkVfTUNDX1JJTkdfQ09OVEVYVF9BTUFQIHsKLQl1OCBjb25faW5kZXhbMTZdOwkvKiBEV09SRCAwICovCi0JdTggcmluZ19zaXplWzRdOwkvKiBEV09SRCAwICovCi0JdTggY3FfaWRbMTFdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDA7CQkvKiBEV09SRCAwICovCi0JdTggcHJvZF9pbmRleFsxNl07CS8qIERXT1JEIDEgKi8KLQl1OCBwZGlkWzE1XTsJLyogRFdPUkQgMSAqLwotCXU4IGludmFsaWQ7CQkvKiBEV09SRCAxICovCi0JdTggY21kX3BlbmRpbmdfY3VycmVudFs3XTsJLyogRFdPUkQgMiAqLwotCXU4IHJzdmQxWzI1XTsJLyogRFdPUkQgMiAqLwotCXU4IGhwaV9wb3J0X2NxX2lkWzExXTsJLyogRFdPUkQgMyAqLwotCXU4IHJzdmQyWzVdOwkvKiBEV09SRCAzICovCi0JdTggY21kX3BlbmRpbmdfbWF4WzddOwkvKiBEV09SRCAzICovCi0JdTggcnN2ZDNbOV07CS8qIERXT1JEIDMgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgTUNDX1JJTkdfQ09OVEVYVF9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi0jZW5kaWYgLyogX19tcHVfY29udGV4dF9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3BjaWNmZy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3BjaWNmZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzE1Njg0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iZW5ldC9wY2ljZmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBTZXJ2ZXJFbmdpbmVzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KLSAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICovCi0vKgotICogQXV0b2dlbmVyYXRlZCBieSBzcmNnZW4gdmVyc2lvbjogMDEyNwotICovCi0jaWZuZGVmIF9fcGNpY2ZnX2FtYXBfaF9fCi0jZGVmaW5lIF9fcGNpY2ZnX2FtYXBfaF9fCi0KLS8qIFZlbmRvciBhbmQgRGV2aWNlIElEIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19JRF9DU1JfQU1BUCB7Ci0JdTggdmVuZG9yaWRbMTZdOwkvKiBEV09SRCAwICovCi0JdTggZGV2aWNlaWRbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19JRF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogSU8gQmFyIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19JT0JBUl9DU1JfQU1BUCB7Ci0JdTggaW9zcGFjZTsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs3XTsJLyogRFdPUkQgMCAqLwotCXU4IGlvYmFyWzI0XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfSU9CQVJfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIE1lbW9yeSBCQVIgMCBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMF9DU1JfQU1BUCB7Ci0JdTggbWVtc3BhY2U7CS8qIERXT1JEIDAgKi8KLQl1OCB0eXBlWzJdOwkJLyogRFdPUkQgMCAqLwotCXU4IHBmOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzEwXTsJLyogRFdPUkQgMCAqLwotCXU4IG1lbWJhcjBbMThdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NRU1CQVIwX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNZW1vcnkgQkFSIDEgLSBMb3cgQWRkcmVzcyBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMV9MT19DU1JfQU1BUCB7Ci0JdTggbWVtc3BhY2U7CS8qIERXT1JEIDAgKi8KLQl1OCB0eXBlWzJdOwkJLyogRFdPUkQgMCAqLwotCXU4IHBmOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzEzXTsJLyogRFdPUkQgMCAqLwotCXU4IG1lbWJhcjFsb1sxNV07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX01FTUJBUjFfTE9fQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIE1lbW9yeSBCQVIgMSAtIEhpZ2ggQWRkcmVzcyBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMV9ISV9DU1JfQU1BUCB7Ci0JdTggbWVtYmFyMWhpWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTUVNQkFSMV9ISV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogTWVtb3J5IEJBUiAyIC0gTG93IEFkZHJlc3MgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjJfTE9fQ1NSX0FNQVAgewotCXU4IG1lbXNwYWNlOwkvKiBEV09SRCAwICovCi0JdTggdHlwZVsyXTsJCS8qIERXT1JEIDAgKi8KLQl1OCBwZjsJCS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsxN107CS8qIERXT1JEIDAgKi8KLQl1OCBtZW1iYXIybG9bMTFdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NRU1CQVIyX0xPX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNZW1vcnkgQkFSIDIgLSBIaWdoIEFkZHJlc3MgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjJfSElfQ1NSX0FNQVAgewotCXU4IG1lbWJhcjJoaVszMl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX01FTUJBUjJfSElfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFN1YnN5c3RlbSBWZW5kb3IgYW5kIElEIChGdW5jdGlvbiAwKSBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfU1VCU1lTVEVNX0lEX0YwX0NTUl9BTUFQIHsKLQl1OCBzdWJzeXNfdmVuZG9yX2lkWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHN1YnN5c19pZFsxNl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1NVQlNZU1RFTV9JRF9GMF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogU3Vic3lzdGVtIFZlbmRvciBhbmQgSUQgKEZ1bmN0aW9uIDEpIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19TVUJTWVNURU1fSURfRjFfQ1NSX0FNQVAgewotCXU4IHN1YnN5c192ZW5kb3JfaWRbMTZdOwkvKiBEV09SRCAwICovCi0JdTggc3Vic3lzX2lkWzE2XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfU1VCU1lTVEVNX0lEX0YxX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBTZW1hcGhvcmUgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX1NFTUFQSE9SRV9DU1JfQU1BUCB7Ci0JdTggbG9ja2VkOwkJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzMxXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfU0VNQVBIT1JFX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBTb2Z0IFJlc2V0IFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19TT0ZUX1JFU0VUX0NTUl9BTUFQIHsKLQl1OCByc3ZkMFs3XTsJLyogRFdPUkQgMCAqLwotCXU4IHNvZnRyZXNldDsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IG5lY19sbF9yY3ZkZXRlY3RfaVs4XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfU09GVF9SRVNFVF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogVW5yZWNvdmVyYWJsZSBFcnJvciBTdGF0dXMgKExvdykgUmVnaXN0ZXIuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvCi0gKiBhbiBpbnRlcm5hbCBVbnJlY292ZXJhYmxlIEVycm9yLiAgVGhlc2UgYXJlIHNldCBieSBoYXJkd2FyZSBhbmQgbWF5IGJlCi0gKiBjbGVhcmVkIGJ5IHdyaXRpbmcgYSBvbmUgdG8gdGhlIHJlc3BlY3RpdmUgYml0KHMpIHRvIGJlIGNsZWFyZWQuICBBbnkKLSAqIGJpdCBiZWluZyBzZXQgdGhhdCBpcyBhbHNvIHVubWFza2VkIHdpbGwgcmVzdWx0IGluIFVucmVjb3ZlcmFibGUgRXJyb3IKLSAqIGludGVycnVwdCBub3RpZmljYXRpb24gdG8gdGhlIGhvc3QgQ1BVIGFuZC9vciBTZXJ2ZXIgTWFuYWdlbWVudCBjaGlwCi0gKiBhbmQgdGhlIHRyYW5zaXRpb25pbmcgb2YgQmxhZGVFbmdpbmUgdG8gYW4gT2ZmbGluZSBzdGF0ZS4KLSAqLwotc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfTE9XX0NTUl9BTUFQIHsKLQl1OCBjZXZfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggY3R4X3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGRidWZfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggZXJ4X3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3RfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbXB1X3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IG5kbWFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcHRjX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHJkbWFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcnhmX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHJ4aXBzX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHJ4dWxwMF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCByeHVscDFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcnh1bHAyX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHRpbV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0cG9zdF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0cHJlX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHR4aXBzX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHR4dWxwMF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHVscDFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggdWNfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggd2RtYV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHVscDJfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggaG9zdDFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcDBfb2JfbGlua191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBwMV9vYl9saW5rX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3RfZ3Bpb191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBtYm94X25ldHdfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbWJveF9zdG9yX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGF4Z21hYzBfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggYXhnbWFjMV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBtcHVfaW50cGVuZF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1VFX1NUQVRVU19MT1dfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFVucmVjb3ZlcmFibGUgRXJyb3IgU3RhdHVzIChIaWdoKSBSZWdpc3Rlci4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8KLSAqIGFuIGludGVybmFsIFVucmVjb3ZlcmFibGUgRXJyb3IuICBUaGVzZSBhcmUgc2V0IGJ5IGhhcmR3YXJlIGFuZCBtYXkgYmUKLSAqIGNsZWFyZWQgYnkgd3JpdGluZyBhIG9uZSB0byB0aGUgcmVzcGVjdGl2ZSBiaXQocykgdG8gYmUgY2xlYXJlZC4gIEFueQotICogYml0IGJlaW5nIHNldCB0aGF0IGlzIGFsc28gdW5tYXNrZWQgd2lsbCByZXN1bHQgaW4gVW5yZWNvdmVyYWJsZSBFcnJvcgotICogaW50ZXJydXB0IG5vdGlmaWNhdGlvbiB0byB0aGUgaG9zdCBDUFUgYW5kL29yIFNlcnZlciBNYW5hZ2VtZW50IGNoaXA7Ci0gKiBhbmQgdGhlIHRyYW5zaXRpb25pbmcgb2YgQmxhZGVFbmdpbmUgdG8gYW4gT2ZmbGluZSBzdGF0ZS4KLSAqLwotc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfSElfQ1NSX0FNQVAgewotCXU4IGp0YWdfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggbHBjbWVtaG9zdF91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBtZ210X21hY191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBtcHVfaXJhbV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBwY3Mwb25saW5lX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHBjczFvbmxpbmVfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcGN0bDBfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcGN0bDFfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggcG1lbV91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCBycl91ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCByeHBwX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHR4cGJfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggdHhwX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IHhhdWlfdWVfc3RhdHVzOwkvKiBEV09SRCAwICovCi0JdTggYXJtX3VlX3N0YXR1czsJLyogRFdPUkQgMCAqLwotCXU4IGlwY191ZV9zdGF0dXM7CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFsxNl07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1VFX1NUQVRVU19ISV9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogVW5yZWNvdmVyYWJsZSBFcnJvciBNYXNrIChMb3cpIFJlZ2lzdGVyLiBFYWNoIGJpdCwgd2hlbiBzZXQgdG8gb25lLAotICogd2lsbCBtYXNrIHRoZSBhc3NvY2lhdGVkIFVucmVjb3ZlcmFibGUgIEVycm9yIHN0YXR1cyBiaXQgZnJvbSBub3RpZmljYXRpb24KLSAqIG9mIFVucmVjb3ZlcmFibGUgRXJyb3IgdG8gdGhlIGhvc3QgQ1BVIGFuZC9vciBTZXJ2ZXIgTWFuYWdtZW50IGNoaXAgYW5kIHRoZQotICogdHJhbnNpdGlvbmluZyBvZiBhbGwgQmxhZGVFbmdpbmUgdW5pdHMgdG8gYW4gT2ZmbGluZSBzdGF0ZS4KLSAqLwotc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfTE9XX01BU0tfQ1NSX0FNQVAgewotCXU4IGNldl91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggY3R4X3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBkYnVmX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBlcnhfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3RfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IG1wdV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggbmRtYV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcHRjX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCByZG1hX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCByeGZfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHJ4aXBzX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCByeHVscDBfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHJ4dWxwMV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcnh1bHAyX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB0aW1fdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHRwb3N0X3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB0cHJlX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB0eGlwc191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAwX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHVscDFfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHVjX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB3ZG1hX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHVscDJfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3QxX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBwMF9vYl9saW5rX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBwMV9vYl9saW5rX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0X2dwaW9fdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IG1ib3hfbmV0d191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggbWJveF9zdG9yX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBheGdtYWMwX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBheGdtYWMxX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBtcHVfaW50cGVuZF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19VRV9TVEFUVVNfTE9XX01BU0tfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFVucmVjb3ZlcmFibGUgRXJyb3IgTWFzayAoSGlnaCkgUmVnaXN0ZXIuIEVhY2ggYml0LCB3aGVuIHNldCB0byBvbmUsCi0gKiB3aWxsIG1hc2sgdGhlIGFzc29jaWF0ZWQgVW5yZWNvdmVyYWJsZSBFcnJvciBzdGF0dXMgYml0IGZyb20gbm90aWZpY2F0aW9uCi0gKiBvZiBVbnJlY292ZXJhYmxlIEVycm9yIHRvIHRoZSBob3N0IENQVSBhbmQvb3IgU2VydmVyIE1hbmFnbWVudCBjaGlwIGFuZCB0aGUKLSAqIHRyYW5zaXRpb25pbmcgb2YgYWxsIEJsYWRlRW5naW5lIHVuaXRzIHRvIGFuIE9mZmxpbmUgc3RhdGUuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0hJX01BU0tfQ1NSX0FNQVAgewotCXU4IGp0YWdfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IGxwY21lbWhvc3RfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IG1nbXRfbWFjX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBtcHVfaXJhbV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcGNzMG9ubGluZV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcGNzMW9ubGluZV91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcGN0bDBfdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IHBjdGwxX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBwbWVtX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBycl91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcnhwcF91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHhwYl91ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggdHhwX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCB4YXVpX3VlX21hc2s7CS8qIERXT1JEIDAgKi8KLQl1OCBhcm1fdWVfbWFzazsJLyogRFdPUkQgMCAqLwotCXU4IGlwY191ZV9tYXNrOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19VRV9TVEFUVVNfSElfTUFTS19DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogT25saW5lIENvbnRyb2wgUmVnaXN0ZXIgMC4gVGhpcyByZWdpc3RlciBjb250cm9scyB2YXJpb3VzIHVuaXRzIHdpdGhpbgotICogQmxhZGVFbmdpbmUgYmVpbmcgaW4gYW4gT25saW5lIG9yIE9mZmxpbmUgc3RhdGUuCi0gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfT05MSU5FMF9DU1JfQU1BUCB7Ci0JdTggY2V2X29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IGN0eF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBkYnVmX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IGVyeF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0X29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IG1wdV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBuZG1hX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHB0Y19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCByZG1hX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHJ4Zl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCByeGlwc19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCByeHVscDBfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcnh1bHAxX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHJ4dWxwMl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB0aW1fb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHBvc3Rfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHByZV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB0eGlwc19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHVscDBfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAxX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHVjX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHdkbWFfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggdHh1bHAyX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IGhvc3QxX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHAwX29iX2xpbmtfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcDFfb2JfbGlua19vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBob3N0X2dwaW9fb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggbWJveF9uZXR3X29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IG1ib3hfc3Rvcl9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBheGdtYWMwX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IGF4Z21hYzFfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggbXB1X2ludHBlbmRfb25saW5lOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19PTkxJTkUwX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBPbmxpbmUgQ29udHJvbCBSZWdpc3RlciAxLiBUaGlzIHJlZ2lzdGVyIGNvbnRyb2xzIHZhcmlvdXMgdW5pdHMgd2l0aGluCi0gKiBCbGFkZUVuZ2luZSBiZWluZyBpbiBhbiBPbmxpbmUgb3IgT2ZmbGluZSBzdGF0ZS4KLSAqLwotc3RydWN0IEJFX1BDSUNGR19PTkxJTkUxX0NTUl9BTUFQIHsKLQl1OCBqdGFnX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IGxwY21lbWhvc3Rfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggbWdtdF9tYWNfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggbXB1X2lyYW1fb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcGNzMG9ubGluZV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBwY3Mxb25saW5lX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHBjdGwwX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHBjdGwxX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHBtZW1fb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcnJfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcnhwcF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB0eHBiX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IHR4cF9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCB4YXVpX29ubGluZTsJLyogRFdPUkQgMCAqLwotCXU4IGFybV9vbmxpbmU7CS8qIERXT1JEIDAgKi8KLQl1OCBpcGNfb25saW5lOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19PTkxJTkUxX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBIb3N0IFRpbWVyIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUl9BTUFQIHsKLQl1OCBob3N0dGltZXJbMjRdOwkvKiBEV09SRCAwICovCi0JdTggaG9zdGludHI7CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs3XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfSE9TVF9USU1FUl9JTlRfQ1RSTF9DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotLyogU2NyYXRjaHBhZCBSZWdpc3RlciAoZm9yIHNvZnR3YXJlIHVzZSkuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX1NDUkFUQ0hQQURfQ1NSX0FNQVAgewotCXU4IHNjcmF0Y2hwYWRbMzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19TQ1JBVENIUEFEX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfQ0FQX0NTUl9BTUFQIHsKLQl1OCBjYXBpZFs4XTsJLyogRFdPUkQgMCAqLwotCXU4IG5leHRjYXBbOF07CS8qIERXT1JEIDAgKi8KLQl1OCBjYXB2ZXJbNF07CS8qIERXT1JEIDAgKi8KLQl1OCBkZXZwb3J0WzRdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbNl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfUENJRV9DQVBfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFBDSSBFeHByZXNzIERldmljZSBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfREVWQ0FQX0NTUl9BTUFQIHsKLQl1OCBwYXlsb2FkWzNdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbM107CS8qIERXT1JEIDAgKi8KLQl1OCBsb19sYXRbM107CS8qIERXT1JEIDAgKi8KLQl1OCBsMV9sYXRbM107CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVszXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQyWzNdOwkvKiBEV09SRCAwICovCi0JdTggcHdyX3ZhbHVlWzhdOwkvKiBEV09SRCAwICovCi0JdTggcHdyX3NjYWxlWzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDNbNF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1BDSUVfREVWQ0FQX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBEZXZpY2UgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzLiAqLwotc3RydWN0IEJFX1BDSUNGR19QQ0lFX0NPTlRST0xfU1RBVFVTX0NTUl9BTUFQIHsKLQl1OCBDb3JyRXJyUmVwb3J0RW47CS8qIERXT1JEIDAgKi8KLQl1OCBOb25GYXRhbEVyclJlcG9ydEVuOwkvKiBEV09SRCAwICovCi0JdTggRmF0YWxFcnJSZXBvcnRFbjsJLyogRFdPUkQgMCAqLwotCXU4IFVuc3VwcFJlcVJlcG9ydEVuOwkvKiBEV09SRCAwICovCi0JdTggRW5hYmxlUmVsYXhPcmRlcjsJLyogRFdPUkQgMCAqLwotCXU4IE1heF9QYXlsb2FkX1NpemVbM107CS8qIERXT1JEIDAgKi8KLQl1OCBFeHRlbmRUYWdGaWVsZEVuYWJsZTsJLyogRFdPUkQgMCAqLwotCXU4IFBoYW50b21GbkVuYWJsZTsJLyogRFdPUkQgMCAqLwotCXU4IEF1eFB3clBNRW5hYmxlOwkvKiBEV09SRCAwICovCi0JdTggRW5hYmxlTm9Tbm9vcDsJLyogRFdPUkQgMCAqLwotCXU4IE1heF9SZWFkX1JlcV9TaXplWzNdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDA7CQkvKiBEV09SRCAwICovCi0JdTggQ29yckVyckRldGVjdDsJLyogRFdPUkQgMCAqLwotCXU4IE5vbkZhdGFsRXJyRGV0ZWN0OwkvKiBEV09SRCAwICovCi0JdTggRmF0YWxFcnJEZXRlY3Q7CS8qIERXT1JEIDAgKi8KLQl1OCBVbnN1cHBSZXFEZXRlY3Q7CS8qIERXT1JEIDAgKi8KLQl1OCBBdXhQd3JEZXRlY3Q7CS8qIERXT1JEIDAgKi8KLQl1OCBUcmFuc1BlbmRpbmc7CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsxMF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1BDSUVfQ09OVFJPTF9TVEFUVVNfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFBDSSBFeHByZXNzIExpbmsgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19QQ0lFX0xJTktfQ0FQX0NTUl9BTUFQIHsKLQl1OCBNYXhMaW5rU3BlZWRbNF07CS8qIERXT1JEIDAgKi8KLQl1OCBNYXhMaW5rV2lkdGhbNl07CS8qIERXT1JEIDAgKi8KLQl1OCBBU1BNU3VwcG9ydFsyXTsJLyogRFdPUkQgMCAqLwotCXU4IEwwc0V4aXRMYXRbM107CS8qIERXT1JEIDAgKi8KLQl1OCBMMUV4aXRMYXRbM107CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFs2XTsJLyogRFdPUkQgMCAqLwotCXU4IFBvcnROdW1bOF07CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1BDSUVfTElOS19DQVBfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFBDSSBFeHByZXNzIExpbmsgU3RhdHVzIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19QQ0lFX0xJTktfU1RBVFVTX0NTUl9BTUFQIHsKLQl1OCBBU1BNQ3RsWzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDA7CQkvKiBEV09SRCAwICovCi0JdTggUmVhZENtcGxCbmRyeTsJLyogRFdPUkQgMCAqLwotCXU4IExpbmtEaXNhYmxlOwkvKiBEV09SRCAwICovCi0JdTggUmV0cmFpbkxpbms7CS8qIERXT1JEIDAgKi8KLQl1OCBDb21tb25DbGtDb25maWc7CS8qIERXT1JEIDAgKi8KLQl1OCBFeHRlbmRTeW5jOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbOF07CS8qIERXT1JEIDAgKi8KLQl1OCBMaW5rU3BlZWRbNF07CS8qIERXT1JEIDAgKi8KLQl1OCBOZWdMaW5rV2lkdGhbNl07CS8qIERXT1JEIDAgKi8KLQl1OCBMaW5rVHJhaW5FcnI7CS8qIERXT1JEIDAgKi8KLQl1OCBMaW5rVHJhaW47CS8qIERXT1JEIDAgKi8KLQl1OCBTbG90Q2xrQ29uZmlnOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDJbM107CS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX1BDSUVfTElOS19TVEFUVVNfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFBDSSBFeHByZXNzIE1TSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19NU0lfQ1NSX0FNQVAgewotCXU4IGNhcGlkWzhdOwkvKiBEV09SRCAwICovCi0JdTggbmV4dHB0cls4XTsJLyogRFdPUkQgMCAqLwotCXU4IHRhYmxlc2l6ZVsxMV07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMFszXTsJLyogRFdPUkQgMCAqLwotCXU4IGZ1bmNtYXNrOwkvKiBEV09SRCAwICovCi0JdTggZW47CQkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NU0lfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIE1TSS1YIFRhYmxlIE9mZnNldCBSZWdpc3Rlci4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9UQUJMRV9DU1JfQU1BUCB7Ci0JdTggdGFibGViaXJbM107CS8qIERXT1JEIDAgKi8KLQl1OCBvZmZzZXRbMjldOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NU0lYX1RBQkxFX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBNU0ktWCBQQkEgT2Zmc2V0IFJlZ2lzdGVyLiAqLwotc3RydWN0IEJFX1BDSUNGR19NU0lYX1BCQV9DU1JfQU1BUCB7Ci0JdTggcGJhYmlyWzNdOwkvKiBEV09SRCAwICovCi0JdTggb2Zmc2V0WzI5XTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJWF9QQkFfQ1NSX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIFBDSSBFeHByZXNzIE1TSS1YIE1lc3NhZ2UgVmVjdG9yIENvbnRyb2wgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfVkVDVE9SX0NPTlRST0xfQ1NSX0FNQVAgewotCXU4IHZlY3Rvcl9jb250cm9sOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMzFdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NU0lYX1ZFQ1RPUl9DT05UUk9MX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBNU0ktWCBNZXNzYWdlIERhdGEgUmVnaXN0ZXIuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0RBVEFfQ1NSX0FNQVAgewotCXU4IGRhdGFbMTZdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDBbMTZdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NU0lYX01TR19EQVRBX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBNU0ktWCBNZXNzYWdlIEFkZHJlc3MgUmVnaXN0ZXIgLSBIaWdoIFBhcnQuICovCi1zdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0FERFJfSElfQ1NSX0FNQVAgewotCXU4IGFkZHJbMzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19NU0lYX01TR19BRERSX0hJX0NTUl9BTUFQIHsKLQl1MzIgZHdbMV07Ci19OwotCi0vKiBQQ0kgRXhwcmVzcyBNU0ktWCBNZXNzYWdlIEFkZHJlc3MgUmVnaXN0ZXIgLSBMb3cgUGFydC4gKi8KLXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9NU0dfQUREUl9MT19DU1JfQU1BUCB7Ci0JdTggcnN2ZDBbMl07CS8qIERXT1JEIDAgKi8KLQl1OCBhZGRyWzMwXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfTVNJWF9NU0dfQUREUl9MT19DU1JfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzE4X1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzE4X1JTVkRfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzE5X1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzE5X1JTVkRfQU1BUCB7Ci0JdTMyIGR3WzFdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzIwX1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMjVdWzMyXTsJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yMF9SU1ZEX0FNQVAgewotCXUzMiBkd1syNl07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjFfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVsxOTE5XVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjFfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMTkyMF07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjJfTUVTU0FHRV9BTUFQIHsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfVkVDVE9SX0NPTlRST0xfQ1NSX0FNQVAgdmVjX2N0cmw7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX01TR19EQVRBX0NTUl9BTUFQIG1zZ19kYXRhOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9NU0dfQUREUl9ISV9DU1JfQU1BUCBhZGRyX2hpOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9NU0dfQUREUl9MT19DU1JfQU1BUCBhZGRyX2xvdzsKLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjJfTUVTU0FHRV9BTUFQIHsKLQl1MzIgZHdbNF07Ci19OwotCi1zdHJ1Y3QgQkVfUENJQ0ZHX0FOT05fMjNfUlNWRF9BTUFQIHsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDAgKi8KLQl1OCByc3ZkMVs4OTVdWzMyXTsJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yM19SU1ZEX0FNQVAgewotCXUzMiBkd1s4OTZdOwotfTsKLQotLyogVGhlc2UgUENJIENvbmZpZ3VyYXRpb24gU3BhY2UgcmVnaXN0ZXJzIGFyZSBmb3IgdGhlIFN0b3JhZ2UgIEZ1bmN0aW9uIG9mCi0gKiBCbGFkZUVuZ2luZSAoRnVuY3Rpb24gMCkuIEluIHRoZSBtZW1vcnkgbWFwIG9mIHRoZSByZWdpc3RlcnMgYmVsb3cgdGhlaXIKLSAqIHRhYmxlLAotICovCi1zdHJ1Y3QgQkVfUENJQ0ZHMF9DU1JNQVBfQU1BUCB7Ci0Jc3RydWN0IEJFX1BDSUNGR19JRF9DU1JfQU1BUCBpZDsKLQl1OCByc3ZkMFszMl07CS8qIERXT1JEIDEgKi8KLQl1OCByc3ZkMVszMl07CS8qIERXT1JEIDIgKi8KLQl1OCByc3ZkMlszMl07CS8qIERXT1JEIDMgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX0lPQkFSX0NTUl9BTUFQIGlvYmFyOwotCXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMF9DU1JfQU1BUCBtZW1iYXIwOwotCXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMV9MT19DU1JfQU1BUCBtZW1iYXIxX2xvOwotCXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMV9ISV9DU1JfQU1BUCBtZW1iYXIxX2hpOwotCXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMl9MT19DU1JfQU1BUCBtZW1iYXIyX2xvOwotCXN0cnVjdCBCRV9QQ0lDRkdfTUVNQkFSMl9ISV9DU1JfQU1BUCBtZW1iYXIyX2hpOwotCXU4IHJzdmQzWzMyXTsJLyogRFdPUkQgMTAgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1NVQlNZU1RFTV9JRF9GMF9DU1JfQU1BUCBzdWJzeXN0ZW1faWQ7Ci0JdTggcnN2ZDRbMzJdOwkvKiBEV09SRCAxMiAqLwotCXU4IHJzdmQ1WzMyXTsJLyogRFdPUkQgMTMgKi8KLQl1OCByc3ZkNlszMl07CS8qIERXT1JEIDE0ICovCi0JdTggcnN2ZDdbMzJdOwkvKiBEV09SRCAxNSAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfU0VNQVBIT1JFX0NTUl9BTUFQIHNlbWFwaG9yZVs0XTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1NPRlRfUkVTRVRfQ1NSX0FNQVAgc29mdF9yZXNldDsKLQl1OCByc3ZkOFszMl07CS8qIERXT1JEIDIxICovCi0Jc3RydWN0IEJFX1BDSUNGR19TQ1JBVENIUEFEX0NTUl9BTUFQIHNjcmF0Y2hwYWQ7Ci0JdTggcnN2ZDlbMzJdOwkvKiBEV09SRCAyMyAqLwotCXU4IHJzdmQxMFszMl07CS8qIERXT1JEIDI0ICovCi0JdTggcnN2ZDExWzMyXTsJLyogRFdPUkQgMjUgKi8KLQl1OCByc3ZkMTJbMzJdOwkvKiBEV09SRCAyNiAqLwotCXU4IHJzdmQxM1szMl07CS8qIERXT1JEIDI3ICovCi0JdTggcnN2ZDE0WzJdWzMyXTsJLyogRFdPUkQgMjggKi8KLQl1OCByc3ZkMTVbMzJdOwkvKiBEV09SRCAzMCAqLwotCXU4IHJzdmQxNlszMl07CS8qIERXT1JEIDMxICovCi0JdTggcnN2ZDE3WzhdWzMyXTsJLyogRFdPUkQgMzIgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1VFX1NUQVRVU19MT1dfQ1NSX0FNQVAgdWVfc3RhdHVzX2xvdzsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1VFX1NUQVRVU19ISV9DU1JfQU1BUCB1ZV9zdGF0dXNfaGk7Ci0Jc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfTE9XX01BU0tfQ1NSX0FNQVAgdWVfc3RhdHVzX2xvd19tYXNrOwotCXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0hJX01BU0tfQ1NSX0FNQVAgdWVfc3RhdHVzX2hpX21hc2s7Ci0Jc3RydWN0IEJFX1BDSUNGR19PTkxJTkUwX0NTUl9BTUFQIG9ubGluZTA7Ci0Jc3RydWN0IEJFX1BDSUNGR19PTkxJTkUxX0NTUl9BTUFQIG9ubGluZTE7Ci0JdTggcnN2ZDE4WzMyXTsJLyogRFdPUkQgNDYgKi8KLQl1OCByc3ZkMTlbMzJdOwkvKiBEV09SRCA0NyAqLwotCXU4IHJzdmQyMFszMl07CS8qIERXT1JEIDQ4ICovCi0JdTggcnN2ZDIxWzMyXTsJLyogRFdPUkQgNDkgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX0hPU1RfVElNRVJfSU5UX0NUUkxfQ1NSX0FNQVAgaG9zdF90aW1lcl9pbnRfY3RybDsKLQl1OCByc3ZkMjJbMzJdOwkvKiBEV09SRCA1MSAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9DQVBfQ1NSX0FNQVAgcGNpZV9jYXA7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0RFVkNBUF9DU1JfQU1BUCBwY2llX2RldmNhcDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfQ09OVFJPTF9TVEFUVVNfQ1NSX0FNQVAgcGNpZV9jb250cm9sX3N0YXR1czsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfTElOS19DQVBfQ1NSX0FNQVAgcGNpZV9saW5rX2NhcDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfTElOS19TVEFUVVNfQ1NSX0FNQVAgcGNpZV9saW5rX3N0YXR1czsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSV9DU1JfQU1BUCBtc2k7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX1RBQkxFX0NTUl9BTUFQIG1zaXhfdGFibGVfb2Zmc2V0OwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9QQkFfQ1NSX0FNQVAgbXNpeF9wYmFfb2Zmc2V0OwotCXU4IHJzdmQyM1szMl07CS8qIERXT1JEIDYwICovCi0JdTggcnN2ZDI0WzMyXTsJLyogRFdPUkQgNjEgKi8KLQl1OCByc3ZkMjVbMzJdOwkvKiBEV09SRCA2MiAqLwotCXU4IHJzdmQyNlszMl07CS8qIERXT1JEIDYzICovCi0JdTggcnN2ZDI3WzMyXTsJLyogRFdPUkQgNjQgKi8KLQl1OCByc3ZkMjhbMzJdOwkvKiBEV09SRCA2NSAqLwotCXU4IHJzdmQyOVszMl07CS8qIERXT1JEIDY2ICovCi0JdTggcnN2ZDMwWzMyXTsJLyogRFdPUkQgNjcgKi8KLQl1OCByc3ZkMzFbMzJdOwkvKiBEV09SRCA2OCAqLwotCXU4IHJzdmQzMlszMl07CS8qIERXT1JEIDY5ICovCi0JdTggcnN2ZDMzWzMyXTsJLyogRFdPUkQgNzAgKi8KLQl1OCByc3ZkMzRbMzJdOwkvKiBEV09SRCA3MSAqLwotCXU4IHJzdmQzNVszMl07CS8qIERXT1JEIDcyICovCi0JdTggcnN2ZDM2WzMyXTsJLyogRFdPUkQgNzMgKi8KLQl1OCByc3ZkMzdbMzJdOwkvKiBEV09SRCA3NCAqLwotCXU4IHJzdmQzOFszMl07CS8qIERXT1JEIDc1ICovCi0JdTggcnN2ZDM5WzMyXTsJLyogRFdPUkQgNzYgKi8KLQl1OCByc3ZkNDBbMzJdOwkvKiBEV09SRCA3NyAqLwotCXU4IHJzdmQ0MVszMl07CS8qIERXT1JEIDc4ICovCi0JdTggcnN2ZDQyWzMyXTsJLyogRFdPUkQgNzkgKi8KLQl1OCByc3ZkNDNbMzJdOwkvKiBEV09SRCA4MCAqLwotCXU4IHJzdmQ0NFszMl07CS8qIERXT1JEIDgxICovCi0JdTggcnN2ZDQ1WzMyXTsJLyogRFdPUkQgODIgKi8KLQl1OCByc3ZkNDZbMzJdOwkvKiBEV09SRCA4MyAqLwotCXU4IHJzdmQ0N1szMl07CS8qIERXT1JEIDg0ICovCi0JdTggcnN2ZDQ4WzMyXTsJLyogRFdPUkQgODUgKi8KLQl1OCByc3ZkNDlbMzJdOwkvKiBEV09SRCA4NiAqLwotCXU4IHJzdmQ1MFszMl07CS8qIERXT1JEIDg3ICovCi0JdTggcnN2ZDUxWzMyXTsJLyogRFdPUkQgODggKi8KLQl1OCByc3ZkNTJbMzJdOwkvKiBEV09SRCA4OSAqLwotCXU4IHJzdmQ1M1szMl07CS8qIERXT1JEIDkwICovCi0JdTggcnN2ZDU0WzMyXTsJLyogRFdPUkQgOTEgKi8KLQl1OCByc3ZkNTVbMzJdOwkvKiBEV09SRCA5MiAqLwotCXU4IHJzdmQ1Nls4MzJdOwkvKiBEV09SRCA5MyAqLwotCXU4IHJzdmQ1N1szMl07CS8qIERXT1JEIDExOSAqLwotCXU4IHJzdmQ1OFszMl07CS8qIERXT1JEIDEyMCAqLwotCXU4IHJzdmQ1OVszMl07CS8qIERXT1JEIDEyMSAqLwotCXU4IHJzdmQ2MFszMl07CS8qIERXT1JEIDEyMiAqLwotCXU4IHJzdmQ2MVszMl07CS8qIERXT1JEIDEyMyAqLwotCXU4IHJzdmQ2MlszMl07CS8qIERXT1JEIDEyNCAqLwotCXU4IHJzdmQ2M1szMl07CS8qIERXT1JEIDEyNSAqLwotCXU4IHJzdmQ2NFszMl07CS8qIERXT1JEIDEyNiAqLwotCXU4IHJzdmQ2NVszMl07CS8qIERXT1JEIDEyNyAqLwotCXU4IHJzdmQ2Nls2MTQ0MF07CS8qIERXT1JEIDEyOCAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yMl9NRVNTQUdFX0FNQVAgbWVzc2FnZVszMl07Ci0JdTggcnN2ZDY3WzI4NjcyXTsJLyogRFdPUkQgMjE3NiAqLwotCXU4IHJzdmQ2OFszMl07CS8qIERXT1JEIDMwNzIgKi8KLQl1OCByc3ZkNjlbMTAyM11bMzJdOwkvKiBEV09SRCAzMDczICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGRzBfQ1NSTUFQX0FNQVAgewotCXUzMiBkd1s0MDk2XTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yNF9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yNF9SU1ZEX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yNV9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yNV9SU1ZEX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yNl9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yNl9SU1ZEX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yN19SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzMyXTsJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yN19SU1ZEX0FNQVAgewotCXUzMiBkd1syXTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yOF9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzNdWzMyXTsJLyogRFdPUkQgMSAqLwotfSBfX3BhY2tlZDsKLXN0cnVjdCBQQ0lDRkdfQU5PTl8yOF9SU1ZEX0FNQVAgewotCXUzMiBkd1s0XTsKLX07Ci0KLXN0cnVjdCBCRV9QQ0lDRkdfQU5PTl8yOV9SU1ZEX0FNQVAgewotCXU4IHJzdmQwWzMyXTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQxWzM2XVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMjlfUlNWRF9BTUFQIHsKLQl1MzIgZHdbMzddOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzMwX1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbMTkzMF1bMzJdOwkvKiBEV09SRCAxICovCi19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzMwX1JTVkRfQU1BUCB7Ci0JdTMyIGR3WzE5MzFdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzMxX01FU1NBR0VfQU1BUCB7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lYX1ZFQ1RPUl9DT05UUk9MX0NTUl9BTUFQIHZlY19jdHJsOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9NU0dfREFUQV9DU1JfQU1BUCBtc2dfZGF0YTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0FERFJfSElfQ1NSX0FNQVAgYWRkcl9oaTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfTVNHX0FERFJfTE9fQ1NSX0FNQVAgYWRkcl9sb3c7Ci19IF9fcGFja2VkOwotc3RydWN0IFBDSUNGR19BTk9OXzMxX01FU1NBR0VfQU1BUCB7Ci0JdTMyIGR3WzRdOwotfTsKLQotc3RydWN0IEJFX1BDSUNGR19BTk9OXzMyX1JTVkRfQU1BUCB7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAwICovCi0JdTggcnN2ZDFbODk1XVszMl07CS8qIERXT1JEIDEgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHX0FOT05fMzJfUlNWRF9BTUFQIHsKLQl1MzIgZHdbODk2XTsKLX07Ci0KLS8qIFRoaXMgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVnaXN0ZXIgbWFwIGlzIGZvciB0aGUgIE5ldHdvcmtpbmcgRnVuY3Rpb24gb2YKLSAqIEJsYWRlRW5naW5lIChGdW5jdGlvbiAxKS4KLSAqLwotc3RydWN0IEJFX1BDSUNGRzFfQ1NSTUFQX0FNQVAgewotCXN0cnVjdCBCRV9QQ0lDRkdfSURfQ1NSX0FNQVAgaWQ7Ci0JdTggcnN2ZDBbMzJdOwkvKiBEV09SRCAxICovCi0JdTggcnN2ZDFbMzJdOwkvKiBEV09SRCAyICovCi0JdTggcnN2ZDJbMzJdOwkvKiBEV09SRCAzICovCi0Jc3RydWN0IEJFX1BDSUNGR19JT0JBUl9DU1JfQU1BUCBpb2JhcjsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjBfQ1NSX0FNQVAgbWVtYmFyMDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjFfTE9fQ1NSX0FNQVAgbWVtYmFyMV9sbzsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjFfSElfQ1NSX0FNQVAgbWVtYmFyMV9oaTsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjJfTE9fQ1NSX0FNQVAgbWVtYmFyMl9sbzsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01FTUJBUjJfSElfQ1NSX0FNQVAgbWVtYmFyMl9oaTsKLQl1OCByc3ZkM1szMl07CS8qIERXT1JEIDEwICovCi0Jc3RydWN0IEJFX1BDSUNGR19TVUJTWVNURU1fSURfRjFfQ1NSX0FNQVAgc3Vic3lzdGVtX2lkOwotCXU4IHJzdmQ0WzMyXTsJLyogRFdPUkQgMTIgKi8KLQl1OCByc3ZkNVszMl07CS8qIERXT1JEIDEzICovCi0JdTggcnN2ZDZbMzJdOwkvKiBEV09SRCAxNCAqLwotCXU4IHJzdmQ3WzMyXTsJLyogRFdPUkQgMTUgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1NFTUFQSE9SRV9DU1JfQU1BUCBzZW1hcGhvcmVbNF07Ci0Jc3RydWN0IEJFX1BDSUNGR19TT0ZUX1JFU0VUX0NTUl9BTUFQIHNvZnRfcmVzZXQ7Ci0JdTggcnN2ZDhbMzJdOwkvKiBEV09SRCAyMSAqLwotCXN0cnVjdCBCRV9QQ0lDRkdfU0NSQVRDSFBBRF9DU1JfQU1BUCBzY3JhdGNocGFkOwotCXU4IHJzdmQ5WzMyXTsJLyogRFdPUkQgMjMgKi8KLQl1OCByc3ZkMTBbMzJdOwkvKiBEV09SRCAyNCAqLwotCXU4IHJzdmQxMVszMl07CS8qIERXT1JEIDI1ICovCi0JdTggcnN2ZDEyWzMyXTsJLyogRFdPUkQgMjYgKi8KLQl1OCByc3ZkMTNbMzJdOwkvKiBEV09SRCAyNyAqLwotCXU4IHJzdmQxNFsyXVszMl07CS8qIERXT1JEIDI4ICovCi0JdTggcnN2ZDE1WzMyXTsJLyogRFdPUkQgMzAgKi8KLQl1OCByc3ZkMTZbMzJdOwkvKiBEV09SRCAzMSAqLwotCXU4IHJzdmQxN1s4XVszMl07CS8qIERXT1JEIDMyICovCi0Jc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfTE9XX0NTUl9BTUFQIHVlX3N0YXR1c19sb3c7Ci0Jc3RydWN0IEJFX1BDSUNGR19VRV9TVEFUVVNfSElfQ1NSX0FNQVAgdWVfc3RhdHVzX2hpOwotCXN0cnVjdCBCRV9QQ0lDRkdfVUVfU1RBVFVTX0xPV19NQVNLX0NTUl9BTUFQIHVlX3N0YXR1c19sb3dfbWFzazsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX1VFX1NUQVRVU19ISV9NQVNLX0NTUl9BTUFQIHVlX3N0YXR1c19oaV9tYXNrOwotCXN0cnVjdCBCRV9QQ0lDRkdfT05MSU5FMF9DU1JfQU1BUCBvbmxpbmUwOwotCXN0cnVjdCBCRV9QQ0lDRkdfT05MSU5FMV9DU1JfQU1BUCBvbmxpbmUxOwotCXU4IHJzdmQxOFszMl07CS8qIERXT1JEIDQ2ICovCi0JdTggcnN2ZDE5WzMyXTsJLyogRFdPUkQgNDcgKi8KLQl1OCByc3ZkMjBbMzJdOwkvKiBEV09SRCA0OCAqLwotCXU4IHJzdmQyMVszMl07CS8qIERXT1JEIDQ5ICovCi0Jc3RydWN0IEJFX1BDSUNGR19IT1NUX1RJTUVSX0lOVF9DVFJMX0NTUl9BTUFQIGhvc3RfdGltZXJfaW50X2N0cmw7Ci0JdTggcnN2ZDIyWzMyXTsJLyogRFdPUkQgNTEgKi8KLQlzdHJ1Y3QgQkVfUENJQ0ZHX1BDSUVfQ0FQX0NTUl9BTUFQIHBjaWVfY2FwOwotCXN0cnVjdCBCRV9QQ0lDRkdfUENJRV9ERVZDQVBfQ1NSX0FNQVAgcGNpZV9kZXZjYXA7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0NPTlRST0xfU1RBVFVTX0NTUl9BTUFQIHBjaWVfY29udHJvbF9zdGF0dXM7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0xJTktfQ0FQX0NTUl9BTUFQIHBjaWVfbGlua19jYXA7Ci0Jc3RydWN0IEJFX1BDSUNGR19QQ0lFX0xJTktfU1RBVFVTX0NTUl9BTUFQIHBjaWVfbGlua19zdGF0dXM7Ci0Jc3RydWN0IEJFX1BDSUNGR19NU0lfQ1NSX0FNQVAgbXNpOwotCXN0cnVjdCBCRV9QQ0lDRkdfTVNJWF9UQUJMRV9DU1JfQU1BUCBtc2l4X3RhYmxlX29mZnNldDsKLQlzdHJ1Y3QgQkVfUENJQ0ZHX01TSVhfUEJBX0NTUl9BTUFQIG1zaXhfcGJhX29mZnNldDsKLQl1OCByc3ZkMjNbNjRdOwkvKiBEV09SRCA2MCAqLwotCXU4IHJzdmQyNFszMl07CS8qIERXT1JEIDYyICovCi0JdTggcnN2ZDI1WzMyXTsJLyogRFdPUkQgNjMgKi8KLQl1OCByc3ZkMjZbMzJdOwkvKiBEV09SRCA2NCAqLwotCXU4IHJzdmQyN1szMl07CS8qIERXT1JEIDY1ICovCi0JdTggcnN2ZDI4WzMyXTsJLyogRFdPUkQgNjYgKi8KLQl1OCByc3ZkMjlbMzJdOwkvKiBEV09SRCA2NyAqLwotCXU4IHJzdmQzMFszMl07CS8qIERXT1JEIDY4ICovCi0JdTggcnN2ZDMxWzMyXTsJLyogRFdPUkQgNjkgKi8KLQl1OCByc3ZkMzJbMzJdOwkvKiBEV09SRCA3MCAqLwotCXU4IHJzdmQzM1szMl07CS8qIERXT1JEIDcxICovCi0JdTggcnN2ZDM0WzMyXTsJLyogRFdPUkQgNzIgKi8KLQl1OCByc3ZkMzVbMzJdOwkvKiBEV09SRCA3MyAqLwotCXU4IHJzdmQzNlszMl07CS8qIERXT1JEIDc0ICovCi0JdTggcnN2ZDM3WzEyOF07CS8qIERXT1JEIDc1ICovCi0JdTggcnN2ZDM4WzMyXTsJLyogRFdPUkQgNzkgKi8KLQl1OCByc3ZkMzlbMTE4NF07CS8qIERXT1JEIDgwICovCi0JdTggcnN2ZDQwWzYxNzkyXTsJLyogRFdPUkQgMTE3ICovCi0Jc3RydWN0IEJFX1BDSUNGR19BTk9OXzMxX01FU1NBR0VfQU1BUCBtZXNzYWdlWzMyXTsKLQl1OCByc3ZkNDFbMjg2NzJdOwkvKiBEV09SRCAyMTc2ICovCi0JdTggcnN2ZDQyWzMyXTsJLyogRFdPUkQgMzA3MiAqLwotCXU4IHJzdmQ0M1sxMDIzXVszMl07CS8qIERXT1JEIDMwNzMgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgUENJQ0ZHMV9DU1JNQVBfQU1BUCB7Ci0JdTMyIGR3WzQwOTZdOwotfTsKLQotI2VuZGlmIC8qIF9fcGNpY2ZnX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvcG9zdF9jb2Rlcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3Bvc3RfY29kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQxNjIxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvcG9zdF9jb2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA4IFNlcnZlckVuZ2luZXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQotICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKi8KLS8qCi0gKiBBdXRvZ2VuZXJhdGVkIGJ5IHNyY2dlbiB2ZXJzaW9uOiAwMTI3Ci0gKi8KLSNpZm5kZWYgX19wb3N0X2NvZGVzX2FtYXBfaF9fCi0jZGVmaW5lIF9fcG9zdF9jb2Rlc19hbWFwX2hfXwotCi0vKiAtLS0gTUdNVF9IQkFfUE9TVF9TVEFHRV9FTlVNIC0tLSAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1BPV0VSX09OX1JFU0VUICAgKDApCS8qIFN0YXRlIGFmdGVyIGEgY29sZCBvciB3YXJtIGJvb3QuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkgKDEpCS8qIEFSTSBib290IGNvZGUgYXdhaXRpbmcgYQotCQkJCQkJZ28tYWhlZCBmcm9tICB0aGUgaG9zdC4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9IT1NUX1JEWSAoMikJLyogSG9zdCBoYXMgZ2l2ZW4gZ28tYWhlZCB0byBBUk0uICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfQkVfUkVTRVQgKDMpCS8qIEhvc3Qgd2FudHMgdG8gcmVzZXQgY2hpcCwgdGhpcyBpcyBhICBjaGlwCi0JCQkJCQl3b3JrYXJvdW5kICAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1NFRVBST01fQ1NfU1RBUlQgKDI1NikJLyogU0VFUFJPTSBjaGVja3N1bQotCQkJCQkJdGVzdCBzdGFydC4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9TRUVQUk9NX0NTX0RPTkUgICgyNTcpCS8qIFNFRVBST00gY2hlY2tzdW0gdGVzdAotCQkJCQkJCWRvbmUuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRERSX0NPTkZJR19TVEFSVCAoNTEyKQkvKiBERFIgY29uZmlndXJhdGlvbiBzdGFydC4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9ERFJfQ09ORklHX0RPTkUgICg1MTMpCS8qIEREUiBjb25maWd1cmF0aW9uIGRvbmUuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRERSX0NBTElCUkFURV9TVEFSVCAgKDc2OCkJLyogRERSIGNhbGlicmF0aW9uIHN0YXJ0LiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0REUl9DQUxJQlJBVEVfRE9ORSAgICg3NjkpCS8qIEREUiBjYWxpYnJhdGlvbiBkb25lLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0REUl9URVNUX1NUQVJUICAgKDEwMjQpCS8qIEREUiBtZW1vcnkgdGVzdCBzdGFydC4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9ERFJfVEVTVF9ET05FICAgICgxMDI1KQkvKiBERFIgbWVtb3J5IHRlc3QgZG9uZS4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9SRURCT09UX0lOSVRfU1RBUlQgICAoMTUzNikJLyogUmVkYm9vdCBzdGFydHMgZXhlY3V0aW9uLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1JFREJPT1RfSU5JVF9ET05FICgxNTM3KQkvKiBSZWRib290IGRvbmUgZXhlY3V0aW9uLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0ZXX0lNQUdFX0xPQURfU1RBUlQgKDE3OTIpCS8qIEZpcm13YXJlIGltYWdlIGxvYWQgdG8KLQkJCQkJCQlERFIgc3RhcnQuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRldfSU1BR0VfTE9BRF9ET05FICAgKDE3OTMpCS8qIEZpcm13YXJlIGltYWdlIGxvYWQKLQkJCQkJCQl0byBERFIgZG9uZS4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9BUk1GV19TVEFSVCAgICAgICAgICAoMjA0OCkJLyogQVJNZncgcnVudGltZSBjb2RlCi0JCQkJCQlzdGFydHMgZXhlY3V0aW9uLiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0RIQ1BfUVVFUllfU1RBUlQgICAgICgyMzA0KQkvKiBESENQIHNlcnZlciBxdWVyeSBzdGFydC4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9ESENQX1FVRVJZX0RPTkUgICAgICAoMjMwNSkJLyogREhDUCBzZXJ2ZXIgcXVlcnkgZG9uZS4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9CT09UX1RBUkdFVF9ESVNDT1ZFUllfU1RBUlQgKDI1NjApCS8qIEJvb3QgVGFyZ2V0Ci0JCQkJCQlEaXNjb3ZlcnkgU3RhcnQuICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfQk9PVF9UQVJHRVRfRElTQ09WRVJZX0RPTkUgKDI1NjEpCS8qIEJvb3QgVGFyZ2V0Ci0JCQkJCQlEaXNjb3ZlcnkgRG9uZS4gKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9SQ19PUFRJT05fU0VUICAgICAgICAoMjgxNikJLyogUmVtb3RlIGNvbmZpZ3VyYXRpb24KLQkJCQkJCW9wdGlvbiBpcyBzZXQgaW4gIFNFRVBST00gICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfU1dJVENIX0xJTksgICAgICAgICAgKDI4MTcpCS8qIFdhaXQgZm9yIGxpbmsgdXAgb24gc3dpdGNoICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfU0VORF9JQ0RTX01FU1NBR0UgICAgKDI4MTgpCS8qIFNlbmQgdGhlIElDRFMgbWVzc2FnZQotCQkJCQkJdG8gc3dpdGNoICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfUEVSRlJPTV9URlRQICAgICAgICAgKDI4MTkpCS8qIERvd25sb2FkIHhtbCB1c2luZyBURlRQICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfUEFSU0VfWE1MICAgICAgICAgICAgKDI4MjApCS8qIFBhcnNlIFhNTCBmaWxlICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRE9XTkxPQURfSU1BR0UgICAgICAgKDI4MjEpCS8qIERvd25sb2FkIElNQUdFIGZyb20KLQkJCQkJCVRGVFAgc2VydmVyICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfRkxBU0hfSU1BR0UgICAgICAgICAgKDI4MjIpCS8qIEZsYXNoIHRoZSBJTUFHRSAqLwotI2RlZmluZSBQT1NUX1NUQUdFX1JDX0RPTkUgICAgICAgICAgICAgICgyODIzKQkvKiBSZW1vdGUgY29uZmlndXJhdGlvbgotCQkJCQkJY29tcGxldGUgKi8KLSNkZWZpbmUgUE9TVF9TVEFHRV9SRUJPT1RfU1lTVEVNICAgICAgICAoMjgyNCkJLyogVXBncmFkZSBJTUFHRSBkb25lLAotCQkJCQkJcmVib290IHJlcXVpcmVkICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfTUFDX0FERFJFU1MgICAgICAgICAgKDMwNzIpCS8qIE1BQyBBZGRyZXNzIENoZWNrICovCi0jZGVmaW5lIFBPU1RfU1RBR0VfQVJNRldfUkVBRFkgICAgICAgICAgKDQ5MTUyKQkvKiBBUk1mdyBpcyBkb25lIHdpdGggUE9TVAotCQkJCQkJYW5kIHJlYWR5LiAqLwotI2RlZmluZSBQT1NUX1NUQUdFX0FSTUZXX1VFICAgICAgICAgICAgICg2MTQ0MCkJLyogQVJNZncgaGFzIGFzc2VydGVkIGFuCi0JCQkJCQl1bnJlY292ZXJhYmxlIGVycm9yLiBUaGUKLQkJCQkJCWxvd2VyIDMgaGV4IGRpZ2l0cyBvZiB0aGUKLQkJCQkJCXN0YWdlIGNvZGUgaWRlbnRpZnkgdGhlCi0JCQkJCQl1bmlxdWUgZXJyb3IgY29kZS4KLQkJCQkJCSovCi0KLS8qIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGZvcm1hdCBvZiB0aGUgTVBVIHNlbWFwaG9yZQotICogcmVnaXN0ZXIgd2hlbiB1c2VkIGZvciBQT1NULgotICovCi1zdHJ1Y3QgQkVfTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNUX0FNQVAgewotCXU4IHN0YWdlWzE2XTsJLyogRFdPUkQgMCAqLwotCXU4IHJzdmQwWzEwXTsJLyogRFdPUkQgMCAqLwotCXU4IGlzY3NpX2RyaXZlcl9sb2FkZWQ7CS8qIERXT1JEIDAgKi8KLQl1OCBvcHRpb25fcm9tX2luc3RhbGxlZDsJLyogRFdPUkQgMCAqLwotCXU4IGlzY3NpX2lwX2NvbmZsaWN0OwkvKiBEV09SRCAwICovCi0JdTggaXNjc2lfbm9faXA7CS8qIERXT1JEIDAgKi8KLQl1OCBiYWNrdXBfZnc7CS8qIERXT1JEIDAgKi8KLQl1OCBlcnJvcjsJCS8qIERXT1JEIDAgKi8KLX0gX19wYWNrZWQ7Ci1zdHJ1Y3QgTUdNVF9IQkFfUE9TVF9TVEFUVVNfU1RSVUNUX0FNQVAgewotCXUzMiBkd1sxXTsKLX07Ci0KLS8qIC0tLSBNR01UX0hCQV9QT1NUX0RVTU1ZX0JJVFNfRU5VTSAtLS0gKi8KLSNkZWZpbmUgUE9TVF9CSVRfSVNDU0lfTE9BREVEICAgICAgICAgICAoMjYpCi0jZGVmaW5lIFBPU1RfQklUX09QVFJPTV9JTlNUICAgICAgICAgICAgKDI3KQotI2RlZmluZSBQT1NUX0JJVF9CQURfSVBfQUREUiAgICAgICAgICAgICgyOCkKLSNkZWZpbmUgUE9TVF9CSVRfTk9fSVBfQUREUiAgICAgICAgICAgICAoMjkpCi0jZGVmaW5lIFBPU1RfQklUX0JBQ0tVUF9GVyAgICAgICAgICAgICAgKDMwKQotI2RlZmluZSBQT1NUX0JJVF9FUlJPUiAgICAgICAgICAgICAgICAgICgzMSkKLQotLyogLS0tIE1HTVRfSEJBX1BPU1RfRFVNTVlfVkFMVUVTX0VOVU0gLS0tICovCi0jZGVmaW5lIFBPU1RfSVNDU0lfRFJJVkVSX0xPQURFRCAgICAgICAgKDY3MTA4ODY0KQotI2RlZmluZSBQT1NUX09QVFJPTV9JTlNUQUxMRUQgICAgICAgICAgICgxMzQyMTc3MjgpCi0jZGVmaW5lIFBPU1RfSVNDU0lfSVBfQUREUkVTU19DT05GTElDVCAgKDI2ODQzNTQ1NikKLSNkZWZpbmUgUE9TVF9JU0NTSV9OT19JUF9BRERSRVNTICAgICAgICAoNTM2ODcwOTEyKQotI2RlZmluZSBQT1NUX0JBQ0tVUF9GV19MT0FERUQgICAgICAgICAgICgxMDczNzQxODI0KQotI2RlZmluZSBQT1NUX0ZBVEFMX0VSUk9SICAgICAgICAgICAgICAgICgyMTQ3NDgzNjQ4KQotCi0jZW5kaWYgLyogX19wb3N0X2NvZGVzX2FtYXBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvcmVnbWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvYmVuZXQvcmVnbWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MTZiYTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JlbmV0L3JlZ21hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDggU2VydmVyRW5naW5lcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCi0gKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqLwotLyoKLSAqIEF1dG9nZW5lcmF0ZWQgYnkgc3JjZ2VuIHZlcnNpb246IDAxMjcKLSAqLwotI2lmbmRlZiBfX3JlZ21hcF9hbWFwX2hfXwotI2RlZmluZSBfX3JlZ21hcF9hbWFwX2hfXwotI2luY2x1ZGUgInBjaWNmZy5oIgotI2luY2x1ZGUgImVwLmgiCi0jaW5jbHVkZSAiY2V2LmgiCi0jaW5jbHVkZSAibXB1LmgiCi0jaW5jbHVkZSAiZG9vcmJlbGxzLmgiCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgbWFwIGZvciBCbGFkZUVuZ2luZSwgc2hvd2luZwotICogdGhlIHJlbGF0aXZlIHNpemUgYW5kIG9mZnNldCBvZiBlYWNoIHN1Yi1tb2R1bGUuIFRoZSBDU1IgcmVnaXN0ZXJzCi0gKiBhcmUgaWRlbnRpY2FsIGZvciB0aGUgbmV0d29yayBhbmQgc3RvcmFnZSBQQ0kgZnVuY3Rpb25zLiBUaGUKLSAqIENTUiBtYXAgaXMgc2hvd24gYmVsb3csIGZvbGxvd2VkIGJ5IGRldGFpbHMgb2YgZWFjaCBibG9jaywKLSAqIGluIHN1Yi1zZWN0aW9ucy4gIFRoZSBzdWItc2VjdGlvbnMgYmVnaW4gd2l0aCBhIGRlc2NyaXB0aW9uCi0gKiBvZiBDU1JzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBpbiBtdWx0aXBsZSBibG9ja3MuCi0gKi8KLXN0cnVjdCBCRV9CTEFERV9FTkdJTkVfQ1NSTUFQX0FNQVAgewotCXN0cnVjdCBCRV9NUFVfQ1NSTUFQX0FNQVAgbXB1OwotCXU4IHJzdmQwWzgxOTJdOwkvKiBEV09SRCAyNTYgKi8KLQl1OCByc3ZkMVs4MTkyXTsJLyogRFdPUkQgNTEyICovCi0Jc3RydWN0IEJFX0NFVl9DU1JNQVBfQU1BUCBjZXY7Ci0JdTggcnN2ZDJbODE5Ml07CS8qIERXT1JEIDEwMjQgKi8KLQl1OCByc3ZkM1s4MTkyXTsJLyogRFdPUkQgMTI4MCAqLwotCXU4IHJzdmQ0WzgxOTJdOwkvKiBEV09SRCAxNTM2ICovCi0JdTggcnN2ZDVbODE5Ml07CS8qIERXT1JEIDE3OTIgKi8KLQl1OCByc3ZkNls4MTkyXTsJLyogRFdPUkQgMjA0OCAqLwotCXU4IHJzdmQ3WzgxOTJdOwkvKiBEV09SRCAyMzA0ICovCi0JdTggcnN2ZDhbODE5Ml07CS8qIERXT1JEIDI1NjAgKi8KLQl1OCByc3ZkOVs4MTkyXTsJLyogRFdPUkQgMjgxNiAqLwotCXU4IHJzdmQxMFs4MTkyXTsJLyogRFdPUkQgMzA3MiAqLwotCXU4IHJzdmQxMVs4MTkyXTsJLyogRFdPUkQgMzMyOCAqLwotCXU4IHJzdmQxMls4MTkyXTsJLyogRFdPUkQgMzU4NCAqLwotCXU4IHJzdmQxM1s4MTkyXTsJLyogRFdPUkQgMzg0MCAqLwotCXU4IHJzdmQxNFs4MTkyXTsJLyogRFdPUkQgNDA5NiAqLwotCXU4IHJzdmQxNVs4MTkyXTsJLyogRFdPUkQgNDM1MiAqLwotCXU4IHJzdmQxNls4MTkyXTsJLyogRFdPUkQgNDYwOCAqLwotCXU4IHJzdmQxN1s4MTkyXTsJLyogRFdPUkQgNDg2NCAqLwotCXU4IHJzdmQxOFs4MTkyXTsJLyogRFdPUkQgNTEyMCAqLwotCXU4IHJzdmQxOVs4MTkyXTsJLyogRFdPUkQgNTM3NiAqLwotCXU4IHJzdmQyMFs4MTkyXTsJLyogRFdPUkQgNTYzMiAqLwotCXU4IHJzdmQyMVs4MTkyXTsJLyogRFdPUkQgNTg4OCAqLwotCXU4IHJzdmQyMls4MTkyXTsJLyogRFdPUkQgNjE0NCAqLwotCXU4IHJzdmQyM1sxNzE1Ml1bMzJdOwkvKiBEV09SRCA2NDAwICovCi19IF9fcGFja2VkOwotc3RydWN0IEJMQURFX0VOR0lORV9DU1JNQVBfQU1BUCB7Ci0JdTMyIGR3WzIzNTUyXTsKLX07Ci0KLSNlbmRpZiAvKiBfX3JlZ21hcF9hbWFwX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwppbmRleCBhN2RlNDAxLi5jZDE5YmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwpAQCAtMjQ4LDEwICsyNDgsMTEgQEAKIAlzcGluX2xvY2tfaW5pdCgmZ29zbmQtPmxvY2spOwogCWdvc25kLT5od19wdHIgPSBnb3NuZC0+d19pZHggPSBnb3NuZC0+YXZhaWwgPSAwOwogCWdvc25kLT5jYXB0dXJpbmcgPSAwOwotCWdvc25kLT5jYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoZ29zbmQtPmNhcmQgPT0gTlVMTCkgeworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZnb3NuZC0+Y2FyZCk7CisJaWYgKHJldCA8IDApIHsKIAkJa2ZyZWUoZ29zbmQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gc25kX2RldmljZV9uZXcoZ29zbmQtPmNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgZ28sCiAJCQkmZ283MDA3X3NuZF9kZXZpY2Vfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGMvdGMuYyBiL2RyaXZlcnMvdGMvdGMuYwppbmRleCBmNzdmNjJhLi5lNWJkNDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RjL3RjLmMKKysrIGIvZHJpdmVycy90Yy90Yy5jCkBAIC04Niw3ICs4Niw3IEBACiAJCQkgICAgICAgc2xvdCk7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJc3ByaW50Zih0ZGV2LT5kZXYuYnVzX2lkLCAidGMleCIsIHNsb3QpOworCQlkZXZfc2V0X25hbWUoJnRkZXYtPmRldiwgInRjJXgiLCBzbG90KTsKIAkJdGRldi0+YnVzID0gdGJ1czsKIAkJdGRldi0+ZGV2LnBhcmVudCA9ICZ0YnVzLT5kZXY7CiAJCXRkZXYtPmRldi5idXMgPSAmdGNfYnVzX3R5cGU7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJdGRldi0+dmVuZG9yWzhdID0gMDsKIAkJdGRldi0+bmFtZVs4XSA9IDA7CiAKLQkJcHJfaW5mbygiJXM6ICVzICVzICVzXG4iLCB0ZGV2LT5kZXYuYnVzX2lkLCB0ZGV2LT52ZW5kb3IsCisJCXByX2luZm8oIiVzOiAlcyAlcyAlc1xuIiwgZGV2X25hbWUoJnRkZXYtPmRldiksIHRkZXYtPnZlbmRvciwKIAkJCXRkZXYtPm5hbWUsIHRkZXYtPmZpcm13YXJlKTsKIAogCQlkZXZzaXplID0gcmVhZGIobW9kdWxlICsgb2Zmc2V0ICsgVENfU0xPVF9TSVpFKTsKQEAgLTExOCw3ICsxMTgsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHByb3ZpZGUgc2xvdCBzcGFjZSAiCiAJCQkgICAgICAgIiglZE1pQiByZXF1aXJlZCwgdXAgdG8gJWRNaUIgc3VwcG9ydGVkKVxuIiwKLQkJCSAgICAgICB0ZGV2LT5kZXYuYnVzX2lkLCBkZXZzaXplID4+IDIwLAorCQkJICAgICAgIGRldl9uYW1lKCZ0ZGV2LT5kZXYpLCBkZXZzaXplID4+IDIwLAogCQkJICAgICAgIG1heChzbG90c2l6ZSwgZXh0c2xvdHNpemUpID4+IDIwKTsKIAkJCWtmcmVlKHRkZXYpOwogCQkJZ290byBvdXRfZXJyOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCXJldHVybiAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJnRjX2J1cy5kZXZpY2VzKTsKLQlzdHJjcHkodGNfYnVzLmRldi5idXNfaWQsICJ0YyIpOworCWRldl9zZXRfbmFtZSgmdGNfYnVzLmRldiwgInRjIik7CiAJZGV2aWNlX3JlZ2lzdGVyKCZ0Y19idXMuZGV2KTsKIAogCWlmICh0Y19idXMuaW5mby5zbG90X3NpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL0tjb25maWcgYi9kcml2ZXJzL3Vpby9LY29uZmlnCmluZGV4IDA0Yjk1NGMuLjdmODY1MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL0tjb25maWcKKysrIGIvZHJpdmVycy91aW8vS2NvbmZpZwpAQCAtNTgsNiArNTgsMjQgQEAKIAogCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX3NteC4KIAorY29uZmlnIFVJT19BRUMKKwl0cmlzdGF0ZSAiQUVDIHZpZGVvIHRpbWVzdGFtcCBkZXZpY2UiCisJZGVwZW5kcyBvbiBQQ0kKKwlkZWZhdWx0IG4KKwloZWxwCisKKwkgIFVJTyBkcml2ZXIgZm9yIHRoZSBBZHJpZW5uZSBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiBQQ0kgdGltZQorCSAgY29kZSBkZXZpY2UuCisKKwkgIFRoaXMgZGV2aWNlIGRpZmZlcnMgZnJvbSBvdGhlciBVSU8gZGV2aWNlcyBzaW5jZSBpdCB1c2VzIEkvTworCSAgcG9ydHMgaW5zdGVhZCBvZiBtZW1vcnkgbWFwcGVkIEkvTy4gSW4gb3JkZXIgdG8gbWFrZSBpdAorCSAgcG9zc2libGUgZm9yIFVJTyB0byB3b3JrIHdpdGggdGhpcyBkZXZpY2UgYSB1dGlsaXR5LCB1aW9wb3J0LAorCSAgY2FuIGJlIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgdGhlIHBvcnRzOgorCisJICAgIGdpdCBjbG9uZSBnaXQ6Ly9pZnVwLm9yZy9waGlsaXBzL3Vpb3BvcnQuZ2l0CisKKwkgIElmIHlvdSBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHVpb19hZWMuCisKIGNvbmZpZyBVSU9fU0VSQ09TMwogCXRyaXN0YXRlICJBdXRvbWF0YSBTZXJjb3MgSUlJIFBDSSBjYXJkIGRyaXZlciIKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL01ha2VmaWxlIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKaW5kZXggZTY5NTU4MS4uNWMyNTg2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKQEAgLTMsNCArMyw1IEBACiBvYmotJChDT05GSUdfVUlPX1BEUlYpCSs9IHVpb19wZHJ2Lm8KIG9iai0kKENPTkZJR19VSU9fUERSVl9HRU5JUlEpCSs9IHVpb19wZHJ2X2dlbmlycS5vCiBvYmotJChDT05GSUdfVUlPX1NNWCkJKz0gdWlvX3NteC5vCitvYmotJChDT05GSUdfVUlPX0FFQykJKz0gdWlvX2FlYy5vCiBvYmotJChDT05GSUdfVUlPX1NFUkNPUzMpCSs9IHVpb19zZXJjb3MzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpby5jIGIvZHJpdmVycy91aW8vdWlvLmMKaW5kZXggNGNhODVhMS4uMDNlZmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvLmMKKysrIGIvZHJpdmVycy91aW8vdWlvLmMKQEAgLTYxLDYgKzYxLDE0IEBACiB9OwogI2RlZmluZSB0b19tYXAobWFwKSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgdWlvX21hcCwga29iaikKIAorc3RhdGljIHNzaXplX3QgbWFwX25hbWVfc2hvdyhzdHJ1Y3QgdWlvX21lbSAqbWVtLCBjaGFyICpidWYpCit7CisJaWYgKHVubGlrZWx5KCFtZW0tPm5hbWUpKQorCQltZW0tPm5hbWUgPSAiIjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtZW0tPm5hbWUpOworfQorCiBzdGF0aWMgc3NpemVfdCBtYXBfYWRkcl9zaG93KHN0cnVjdCB1aW9fbWVtICptZW0sIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgbWVtLT5hZGRyKTsKQEAgLTgyLDYgKzkwLDggQEAKIAlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCB1aW9fbWVtICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWFwX3N5c2ZzX2VudHJ5IG5hbWVfYXR0cmlidXRlID0KKwlfX0FUVFIobmFtZSwgU19JUlVHTywgbWFwX25hbWVfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IG1hcF9zeXNmc19lbnRyeSBhZGRyX2F0dHJpYnV0ZSA9CiAJX19BVFRSKGFkZHIsIFNfSVJVR08sIG1hcF9hZGRyX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBtYXBfc3lzZnNfZW50cnkgc2l6ZV9hdHRyaWJ1dGUgPQpAQCAtOTAsNiArMTAwLDcgQEAKIAlfX0FUVFIob2Zmc2V0LCBTX0lSVUdPLCBtYXBfb2Zmc2V0X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbXSA9IHsKKwkmbmFtZV9hdHRyaWJ1dGUuYXR0ciwKIAkmYWRkcl9hdHRyaWJ1dGUuYXR0ciwKIAkmc2l6ZV9hdHRyaWJ1dGUuYXR0ciwKIAkmb2Zmc2V0X2F0dHJpYnV0ZS5hdHRyLApAQCAtMTMzLDYgKzE0NCwxNCBAQAogfTsKICNkZWZpbmUgdG9fcG9ydGlvKHBvcnRpbykgY29udGFpbmVyX29mKHBvcnRpbywgc3RydWN0IHVpb19wb3J0aW8sIGtvYmopCiAKK3N0YXRpYyBzc2l6ZV90IHBvcnRpb19uYW1lX3Nob3coc3RydWN0IHVpb19wb3J0ICpwb3J0LCBjaGFyICpidWYpCit7CisJaWYgKHVubGlrZWx5KCFwb3J0LT5uYW1lKSkKKwkJcG9ydC0+bmFtZSA9ICIiOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHBvcnQtPm5hbWUpOworfQorCiBzdGF0aWMgc3NpemVfdCBwb3J0aW9fc3RhcnRfc2hvdyhzdHJ1Y3QgdWlvX3BvcnQgKnBvcnQsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgcG9ydC0+c3RhcnQpOwpAQCAtMTU5LDYgKzE3OCw4IEBACiAJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgdWlvX3BvcnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAorc3RhdGljIHN0cnVjdCBwb3J0aW9fc3lzZnNfZW50cnkgcG9ydGlvX25hbWVfYXR0cmlidXRlID0KKwlfX0FUVFIobmFtZSwgU19JUlVHTywgcG9ydGlvX25hbWVfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IHBvcnRpb19zeXNmc19lbnRyeSBwb3J0aW9fc3RhcnRfYXR0cmlidXRlID0KIAlfX0FUVFIoc3RhcnQsIFNfSVJVR08sIHBvcnRpb19zdGFydF9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgcG9ydGlvX3N5c2ZzX2VudHJ5IHBvcnRpb19zaXplX2F0dHJpYnV0ZSA9CkBAIC0xNjcsNiArMTg4LDcgQEAKIAlfX0FUVFIocG9ydHR5cGUsIFNfSVJVR08sIHBvcnRpb19wb3J0dHlwZV9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRpb19hdHRyc1tdID0geworCSZwb3J0aW9fbmFtZV9hdHRyaWJ1dGUuYXR0ciwKIAkmcG9ydGlvX3N0YXJ0X2F0dHJpYnV0ZS5hdHRyLAogCSZwb3J0aW9fc2l6ZV9hdHRyaWJ1dGUuYXR0ciwKIAkmcG9ydGlvX3BvcnR0eXBlX2F0dHJpYnV0ZS5hdHRyLApAQCAtNjg2LDcgKzcwOCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmVxdWVzdGVkX3BhZ2VzID0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKLQlhY3R1YWxfcGFnZXMgPSAoaWRldi0+aW5mby0+bWVtW21pXS5zaXplICsgUEFHRV9TSVpFIC0xKSA+PiBQQUdFX1NISUZUOworCWFjdHVhbF9wYWdlcyA9ICgoaWRldi0+aW5mby0+bWVtW21pXS5hZGRyICYgflBBR0VfTUFTSykKKwkJCSsgaWRldi0+aW5mby0+bWVtW21pXS5zaXplICsgUEFHRV9TSVpFIC0xKSA+PiBQQUdFX1NISUZUOwogCWlmIChyZXF1ZXN0ZWRfcGFnZXMgPiBhY3R1YWxfcGFnZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fYWVjLmMgYi9kcml2ZXJzL3Vpby91aW9fYWVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4MzBlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19hZWMuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIHVpb19hZWMuYyAtLSBzaW1wbGUgZHJpdmVyIGZvciBBZHJpZW5uZSBFbGVjdHJvbmljcyBDb3JwIHRpbWUgY29kZSBQQ0kgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEJyYW5kb24gUGhpbGlwcyA8YnJhbmRvbkBpZnVwLm9yZz4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiAgIFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FFQyAweGFlY2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRUNfVklUQ0xUQyAweDYyNTAKKworI2RlZmluZSBJTlRfRU5BQkxFX0FERFIJCTB4RkMKKyNkZWZpbmUgSU5UX0VOQUJMRQkJMHgxMAorI2RlZmluZSBJTlRfRElTQUJMRQkJMHgwCisKKyNkZWZpbmUgSU5UX01BU0tfQUREUgkJMHgyRQorI2RlZmluZSBJTlRfTUFTS19BTEwJCTB4M0YKKworI2RlZmluZSBJTlRBX0RSVlJfQUREUgkJMHhGRQorI2RlZmluZSBJTlRBX0VOQUJMRURfRkxBRwkweDA4CisjZGVmaW5lIElOVEFfRkxBRwkJMHgwMQorCisjZGVmaW5lIE1BSUxCT1gJCQkweDBGCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BRUMsIFBDSV9ERVZJQ0VfSURfQUVDX1ZJVENMVEMpLCB9LAorCXsgMCwgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpZHMpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgYWVjdGNfaXJxKGludCBpcnEsIHN0cnVjdCB1aW9faW5mbyAqZGV2X2luZm8pCit7CisJdm9pZCBfX2lvbWVtICppbnRfZmxhZyA9IGRldl9pbmZvLT5wcml2ICsgSU5UQV9EUlZSX0FERFI7CisJdW5zaWduZWQgY2hhciBzdGF0dXMgPSBpb3JlYWQ4KGludF9mbGFnKTsKKworCisJaWYgKChzdGF0dXMgJiBJTlRBX0VOQUJMRURfRkxBRykgJiYgKHN0YXR1cyAmIElOVEFfRkxBRykpIHsKKwkJLyogYXBwbGljYXRpb24gd3JpdGVzIDB4MDAgdG8gMHgyRiB0byBnZXQgbmV4dCBpbnRlcnJ1cHQgKi8KKwkJc3RhdHVzID0gaW9yZWFkOChkZXZfaW5mby0+cHJpdiArIE1BSUxCT1gpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgdm9pZCBwcmludF9ib2FyZF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdWlvX2luZm8gKmkpCit7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlBDSS1UQyBib2FyZCB2ZW5kb3I6ICV4JXggbnVtYmVyOiAleCV4IgorCQkiIHJldmlzaW9uOiAlYyVjXG4iLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAxKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMCksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDMpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAyKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwNiksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDcpKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm87CisJaW50IHJldDsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWlvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImFlY3RjIikpCisJCWdvdG8gb3V0X2Rpc2FibGU7CisKKwlpbmZvLT5uYW1lID0gImFlY3RjIjsKKwlpbmZvLT5wb3J0WzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWlmICghaW5mby0+cG9ydFswXS5zdGFydCkKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlpbmZvLT5wcml2ID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghaW5mby0+cHJpdikKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlpbmZvLT5wb3J0WzBdLnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWluZm8tPnBvcnRbMF0ucG9ydHR5cGUgPSBVSU9fUE9SVF9HUElPOworCisJaW5mby0+dmVyc2lvbiA9ICIwLjAuMSI7CisJaW5mby0+aXJxID0gcGRldi0+aXJxOworCWluZm8tPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCWluZm8tPmhhbmRsZXIgPSBhZWN0Y19pcnE7CisKKwlwcmludF9ib2FyZF9kYXRhKHBkZXYsIGluZm8pOworCXJldCA9IHVpb19yZWdpc3Rlcl9kZXZpY2UoJnBkZXYtPmRldiwgaW5mbyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5tYXA7CisKKwlpb3dyaXRlMzIoSU5UX0VOQUJMRSwgaW5mby0+cHJpdiArIElOVF9FTkFCTEVfQUREUik7CisJaW93cml0ZTgoSU5UX01BU0tfQUxMLCBpbmZvLT5wcml2ICsgSU5UX01BU0tfQUREUik7CisJaWYgKCEoaW9yZWFkOChpbmZvLT5wcml2ICsgSU5UQV9EUlZSX0FERFIpCisJCQkmIElOVEFfRU5BQkxFRF9GTEFHKSkKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWVjdGM6IGludGVycnVwdHMgbm90IGVuYWJsZWRcbiIpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOworCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlwY2lfaW91bm1hcChwZGV2LCBpbmZvLT5wcml2KTsKK291dF9yZWxlYXNlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitvdXRfZnJlZToKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCB1aW9faW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGU4KElOVF9ESVNBQkxFLCBpbmZvLT5wcml2ICsgSU5UX01BU0tfQUREUik7CisJaW93cml0ZTMyKElOVF9ESVNBQkxFLCBpbmZvLT5wcml2ICsgSU5UX0VOQUJMRV9BRERSKTsKKwkvKiByZWFkIG1haWxib3ggdG8gZW5zdXJlIGJvYXJkIGRyb3BzIGlycSAqLworCWlvcmVhZDgoaW5mby0+cHJpdiArIE1BSUxCT1gpOworCisJdWlvX3VucmVnaXN0ZXJfZGV2aWNlKGluZm8pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGluZm8tPnByaXYpOworCisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2lfZHJpdmVyID0geworCS5uYW1lID0gImFlY3RjIiwKKwkuaWRfdGFibGUgPSBpZHMsCisJLnByb2JlID0gcHJvYmUsCisJLnJlbW92ZSA9IHJlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFlY3RjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZWN0Y19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChhZWN0Y19pbml0KTsKK21vZHVsZV9leGl0KGFlY3RjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggODNiYWJiMC4uYzZjODE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC00Nyw2ICs0Nyw3IEBACiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzcyMAogCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3MjEKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzYzCisJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc4NgogCSMgbW9yZToKIAlkZWZhdWx0IFBDSQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IGIyY2ViNGEuLjg5Mjk5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfVVNCX1UxMzJfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX0hXQV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX0lTUDE3NjBfSENEKQkrPSBob3N0LwogCiBvYmotJChDT05GSUdfVVNCX0M2N1gwMF9IQ0QpCSs9IGM2N3gwMC8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IDVlZDRhZTAuLjY3ODkwODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYworKysgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCQkJdXNiX2VycihpbnN0YW5jZS0+dXNiYXRtLCAicmVxdWVzdGVkIHRyYW5zZmVyIHNpemUgdG9vIGxhcmdlICglZCwgJWQpXG4iLAogCQkJCXdidWZsZW4sIHJidWZsZW4pOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gZXJyOwogCX0KIAogCW11dGV4X2xvY2soJmluc3RhbmNlLT5jbV9zZXJpYWxpemUpOwpAQCAtNTY1LDYgKzU2NSw3IEBACiAJZGJnKCJjbSAlI3giLCBjbSk7CiBmYWlsOgogCW11dGV4X3VubG9jaygmaW5zdGFuY2UtPmNtX3NlcmlhbGl6ZSk7CitlcnI6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggM2YzZWUxMy4uZDI3NDdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC04ODAsMTYgKzg4MCwxOSBAQAogCQlpZiAocmMgPD0gMCkKIAkJCWJyZWFrOwogCi0JCWlmICh1c2JscC0+ZmxhZ3MgJiBMUF9BQk9SVCkgewotCQkJaWYgKHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyg1MDAwKSkgPT0gMCkgeworCQlpZiAoc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDE1MDApKSA9PSAwKSB7CisJCQlpZiAodXNibHAtPmZsYWdzICYgTFBfQUJPUlQpIHsKIAkJCQllcnIgPSB1c2JscF9jaGVja19zdGF0dXModXNibHAsIGVycik7CiAJCQkJaWYgKGVyciA9PSAxKSB7CS8qIFBhcGVyIG91dCAqLwogCQkJCQlyYyA9IC1FTk9TUEM7CiAJCQkJCWJyZWFrOwogCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogUHJvZCB0aGUgcHJpbnRlciwgR2VudG9vIzI1MTIzNy4gKi8KKwkJCQltdXRleF9sb2NrKCZ1c2JscC0+bXV0KTsKKwkJCQl1c2JscF9yZWFkX3N0YXR1cyh1c2JscCwgdXNibHAtPnN0YXR1c2J1Zik7CisJCQkJbXV0ZXhfdW5sb2NrKCZ1c2JscC0+bXV0KTsKIAkJCX0KLQkJfSBlbHNlIHsKLQkJCXNjaGVkdWxlKCk7CiAJCX0KIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKaW5kZXggMGY1YzA1Zi4uYzQwYTliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKQEAgLTUwLDYgKzUwLDcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYnRtY19kZXZpY2VzW10gPSB7CiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0FQUF9TUEVDLCAzLCAwKSwgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQVBQX1NQRUMsIDMsIDEpLCB9LAogCXsgMCwgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2J0bWNfZGV2aWNlcyk7CkBAIC0xMDYsMTIgKzEwNywxMyBAQAogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7Ci0JaW50IHJldHZhbCA9IC1FTk9ERVY7CisJaW50IHJldHZhbCA9IDA7CiAKIAlpbnRmID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZ1c2J0bWNfZHJpdmVyLCBpbWlub3IoaW5vZGUpKTsKIAlpZiAoIWludGYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCiAJCSAgICAgICAiOiBjYW4gbm90IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsIGltaW5vcihpbm9kZSkpOworCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCmluZGV4IDZlYzM4MTcuLjczYzEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl9CiAKIAkvKiB0aGlzIGlzbid0IGNoZWNraW5nIGZvciBpbGxlZ2FsIHZhbHVlcyAqLwotCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQl0eXBlID0gIkN0cmwiOwogCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCA3NTEzYmIwLi5kZjNjNTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogI2RlZmluZQlNQVhfVVNCRlNfQlVGRkVSX1NJWkUJMTYzODQKIAotc3RhdGljIGlubGluZSBpbnQgY29ubmVjdGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIGludCBjb25uZWN0ZWQoc3RydWN0IGRldl9zdGF0ZSAqcHMpCiB7CiAJcmV0dXJuICghbGlzdF9lbXB0eSgmcHMtPmxpc3QpICYmCiAJCQlwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJa2ZyZWUoYXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQorc3RhdGljIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQogewogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQorc3RhdGljIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQogewogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFzeW5jICphcyA9IE5VTEw7CkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gYXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFzeW5jICphc3luY19nZXRwZW5kaW5nKHN0cnVjdCBkZXZfc3RhdGUgKnBzLAorc3RhdGljIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0cGVuZGluZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywKIAkJCQkJICAgICB2b2lkIF9fdXNlciAqdXNlcnVyYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHZvaWQgX191c2VyICp1c2VydXJiKQogewotCWludCBqOworCXVuc2lnbmVkIGo7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAJaWYgKCF1c2Jmc19zbm9vcCkKQEAgLTMxMSw5ICszMTEsOSBAQAogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGlyZWN0aW9uPSVzXG4iLAogCQkJdXNiX3VyYl9kaXJfaW4odXJiKSA/ICJJTiIgOiAiT1VUIik7CiAJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ1c2VydXJiPSVwXG4iLCB1c2VydXJiKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9JWRcbiIsCisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSV1XG4iLAogCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImFjdHVhbF9sZW5ndGg9JWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJhY3R1YWxfbGVuZ3RoPSV1XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGF0YTogIik7CiAJZm9yIChqID0gMDsgaiA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsgKytqKQogCQlwcmludGsoIiUwMnggIiwgZGF0YVtqXSk7CkBAIC0zNTksMTEgKzM1OSw2IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcy0+bG9jaywgZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwotCWFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKTsKLQl3aGlsZSAoYXMpIHsKLQkJZnJlZV9hc3luYyhhcyk7Ci0JCWFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfYXN5bmNfb25faW50ZXJmYWNlKHN0cnVjdCBkZXZfc3RhdGUgKnBzLApAQCAtMzgxLDcgKzM3Niw3IEBACiAJZGVzdHJveV9hc3luYyhwcywgJmhpdGxpc3QpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9hbGxfYXN5bmMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCitzdGF0aWMgdm9pZCBkZXN0cm95X2FsbF9hc3luYyhzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKIAlkZXN0cm95X2FzeW5jKHBzLCAmcHMtPmFzeW5jX3BlbmRpbmcpOwogfQpAQCAtNTMwLDcgKzUyNSw4IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0FERFJFU1MKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRAorCSAmJiBwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQUREUkVTUwogCSAmJiBwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiAJaWYgKFVTQl9UWVBFX1ZFTkRPUiA9PSAoVVNCX1RZUEVfTUFTSyAmIHJlcXVlc3R0eXBlKSkKQEAgLTY0Myw2ICs2MzksNyBAQAogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OwogCXVuc2lnbmVkIGludCBpZm51bTsKKwlzdHJ1Y3QgYXN5bmMgKmFzOwogCiAJdXNiX2xvY2tfZGV2aWNlKGRldik7CiAKQEAgLTY2MSw2ICs2NTgsMTIgQEAKIAl1c2JfdW5sb2NrX2RldmljZShkZXYpOwogCXVzYl9wdXRfZGV2KGRldik7CiAJcHV0X3BpZChwcy0+ZGlzY19waWQpOworCisJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCXdoaWxlIChhcykgeworCQlmcmVlX2FzeW5jKGFzKTsKKwkJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCX0KIAlrZnJlZShwcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggZTE3MTBmMi4uNDBkZWUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtNjYsNyArNjYsNyBAQAogCXN0cnVjdCBlcF9kZXZpY2UgKmVwID0gdG9fZXBfZGV2aWNlKGRldik7CiAJY2hhciAqdHlwZSA9ICJ1bmtub3duIjsKIAotCXN3aXRjaCAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShlcC0+ZGVzYykpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CiAJCXR5cGUgPSAiQ29udHJvbCI7CiAJCWJyZWFrOwpAQCAtOTQsNyArOTQsNyBAQAogCiAJaW4gPSAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKTsKIAotCXN3aXRjaCAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShlcC0+ZGVzYykpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CiAJCWlmIChlcC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KIAkJCWludGVydmFsID0gZXAtPmRlc2MtPmJJbnRlcnZhbDsKQEAgLTEzMSwxMCArMTMxLDkgQEAKIAlzdHJ1Y3QgZXBfZGV2aWNlICplcCA9IHRvX2VwX2RldmljZShkZXYpOwogCWNoYXIgKmRpcmVjdGlvbjsKIAotCWlmICgoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbChlcC0+ZGVzYykpCiAJCWRpcmVjdGlvbiA9ICJib3RoIjsKLQllbHNlIGlmIChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJZWxzZSBpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcC0+ZGVzYykpCiAJCWRpcmVjdGlvbiA9ICJpbiI7CiAJZWxzZQogCQlkaXJlY3Rpb24gPSAib3V0IjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDNjNzExZGI1Li44MWZhODUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTI3OSw5ICsyNzksOSBAQAogICogaGVscGVyIHJvdXRpbmUgZm9yIHJldHVybmluZyBzdHJpbmcgZGVzY3JpcHRvcnMgaW4gVVRGLTE2TEUKICAqIGlucHV0IGNhbiBhY3R1YWxseSBiZSBJU08tODg1OS0xOyBBU0NJSSBpcyBpdHMgNy1iaXQgc3Vic2V0CiAgKi8KLXN0YXRpYyBpbnQgYXNjaWkydXRmIChjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQorc3RhdGljIHVuc2lnbmVkIGFzY2lpMnV0ZihjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQogewotCWludCByZXR2YWw7CisJdW5zaWduZWQgcmV0dmFsOwogCiAJZm9yIChyZXR2YWwgPSAwOyAqcyAmJiB1dGZtYXggPiAxOyB1dGZtYXggLT0gMiwgcmV0dmFsICs9IDIpIHsKIAkJKnV0ZisrID0gKnMrKzsKQEAgLTMwNCwxOSArMzA0LDE1IEBACiAgKiBQcm9kdWNlcyBlaXRoZXIgYSBtYW51ZmFjdHVyZXIsIHByb2R1Y3Qgb3Igc2VyaWFsIG51bWJlciBzdHJpbmcgZm9yIHRoZQogICogdmlydHVhbCByb290IGh1YiBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbnQgcmhfc3RyaW5nICgKLQlpbnQJCWlkLAotCXN0cnVjdCB1c2JfaGNkCSpoY2QsCi0JdTgJCSpkYXRhLAotCWludAkJbGVuCi0pIHsKK3N0YXRpYyB1bnNpZ25lZCByaF9zdHJpbmcoaW50IGlkLCBzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1OCAqZGF0YSwgdW5zaWduZWQgbGVuKQorewogCWNoYXIgYnVmIFsxMDBdOwogCiAJLy8gbGFuZ3VhZ2UgaWRzCiAJaWYgKGlkID09IDApIHsKIAkJYnVmWzBdID0gNDsgICAgYnVmWzFdID0gMzsJLyogNCBieXRlcyBzdHJpbmcgZGF0YSAqLwogCQlidWZbMl0gPSAweDA5OyBidWZbM10gPSAweDA0OwkvKiBNU0ZULXNwZWFrIGZvciAiZW4tdXMiICovCi0JCWxlbiA9IG1pbiAobGVuLCA0KTsKKwkJbGVuID0gbWluX3QodW5zaWduZWQsIGxlbiwgNCk7CiAJCW1lbWNweSAoZGF0YSwgYnVmLCBsZW4pOwogCQlyZXR1cm4gbGVuOwogCkBAIC0zMzIsMTAgKzMyOCw3IEBACiAJfSBlbHNlIGlmIChpZCA9PSAzKSB7CiAJCXNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICIlcyAlcyAlcyIsIGluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLAogCQkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsIGhjZC0+ZHJpdmVyLT5kZXNjcmlwdGlvbik7Ci0KLQkvLyB1bnN1cHBvcnRlZCBJRHMgLS0+ICJwcm90b2NvbCBzdGFsbCIKLQl9IGVsc2UKLQkJcmV0dXJuIC1FUElQRTsKKwl9CiAKIAlzd2l0Y2ggKGxlbikgewkJLyogQWxsIGNhc2VzIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CkBAIC0zNjAsOSArMzUzLDggQEAKIAl1OAkJdGJ1ZiBbc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKV0KIAkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpOwogCWNvbnN0IHU4CSpidWZwID0gdGJ1ZjsKLQlpbnQJCWxlbiA9IDA7CisJdW5zaWduZWQJbGVuID0gMDsKIAlpbnQJCXN0YXR1czsKLQlpbnQJCW47CiAJdTgJCXBhdGNoX3dha2V1cCA9IDA7CiAJdTgJCXBhdGNoX3Byb3RvY29sID0gMDsKIApAQCAtNDU2LDEwICs0NDgsMTEgQEAKIAkJCQlwYXRjaF93YWtldXAgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0RUX1NUUklORyA8PCA4OgotCQkJbiA9IHJoX3N0cmluZyAod1ZhbHVlICYgMHhmZiwgaGNkLCB1YnVmLCB3TGVuZ3RoKTsKLQkJCWlmIChuIDwgMCkKKwkJCWlmICgod1ZhbHVlICYgMHhmZikgPCA0KQorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IHJoX3N0cmluZyh3VmFsdWUgJiAweGZmLAorCQkJCQkJaGNkLCB1YnVmLCB3TGVuZ3RoKTsKKwkJCWVsc2UgLyogdW5zdXBwb3J0ZWQgSURzIC0tPiAicHJvdG9jb2wgc3RhbGwiICovCiAJCQkJZ290byBlcnJvcjsKLQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG47CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CkBAIC02MjksNyArNjIyLDcgQEAKIHsKIAlpbnQJCXJldHZhbDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwotCWludAkJbGVuID0gMSArICh1cmItPmRldi0+bWF4Y2hpbGQgLyA4KTsKKwl1bnNpZ25lZAlsZW4gPSAxICsgKHVyYi0+ZGV2LT5tYXhjaGlsZCAvIDgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogCWlmIChoY2QtPnN0YXR1c191cmIgfHwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgbGVuKSB7CkBAIC05MDEsNyArODk0LDcgQEAKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAotCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJdXNiX2Rldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOwogCWlmIChyZXR2YWwgIT0gc2l6ZW9mIHVzYl9kZXYtPmRlc2NyaXB0b3IpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBjZDUwZDg2Li5iZTg2YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTM5Miw3ICszOTIsNyBAQAogewogCXN0cnVjdCB1c2JfaHViICpodWIgPSB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCWludCBpOworCXVuc2lnbmVkIGk7CiAJdW5zaWduZWQgbG9uZyBiaXRzOwogCiAJc3dpdGNoIChzdGF0dXMpIHsKQEAgLTEzMDUsNiArMTMwNSw3IEBACiAJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXRfZGV2aWNlX3N0YXRlKTsKIAogLyoKICAqIFdVU0IgZGV2aWNlcyBhcmUgc2ltcGxlOiB0aGV5IGhhdmUgbm8gaHVicyBiZWhpbmQsIHNvIHRoZSBtYXBwaW5nCkBAIC0yNDcxLDIwICsyNDcyLDIwIEBACiAJICovCiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgkvKiBmaXhlZCBhdCA1MTIgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMik7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNTEyKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIGZpeGVkIGF0IDY0ICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgkJLyogOCwgMTYsIDMyLCBvciA2NCAqLwogCQkvKiB0byBkZXRlcm1pbmUgdGhlIGVwMCBtYXhwYWNrZXQgc2l6ZSwgdHJ5IHRvIHJlYWQKIAkJICogdGhlIGRldmljZSBkZXNjcmlwdG9yIHRvIGdldCBiTWF4UGFja2V0U2l6ZTAgYW5kCiAJCSAqIHRoZW4gY29ycmVjdCBvdXIgaW5pdGlhbCBndWVzcy4KIAkJICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9MT1c6CQkvKiBmaXhlZCBhdCA4ICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig4KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBmYWlsOwpAQCAtMzM5MiwxMCArMzM5MywxMCBAQAogCQl1ZGV2LT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsJLyogZm9yIGRpc2Nvbm5lY3QoKSBjYWxscyAqLwogCQlnb3RvIHJlX2VudW1lcmF0ZTsKICAgCX0KLSAgCisKKwkvKiBSZXN0b3JlIHRoZSBkZXZpY2UncyBwcmV2aW91cyBjb25maWd1cmF0aW9uICovCiAJaWYgKCF1ZGV2LT5hY3Rjb25maWcpCiAJCWdvdG8gZG9uZTsKLQogCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLCAwLAogCQkJdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIDAsCkBAIC0zNDA4LDE2ICszNDA5LDI1IEBACiAgIAl9CiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOwogCisJLyogUHV0IGludGVyZmFjZXMgYmFjayBpbnRvIHRoZSBzYW1lIGFsdHNldHRpbmdzIGFzIGJlZm9yZS4KKwkgKiBEb24ndCBib3RoZXIgdG8gc2VuZCB0aGUgU2V0LUludGVyZmFjZSByZXF1ZXN0IGZvciBpbnRlcmZhY2VzCisJICogdGhhdCB3ZXJlIGFscmVhZHkgaW4gYWx0c2V0dGluZyAwOyBiZXNpZGVzIGJlaW5nIHVubmVjZXNzYXJ5LAorCSAqIG1hbnkgZGV2aWNlcyBjYW4ndCBoYW5kbGUgaXQuICBJbnN0ZWFkIGp1c3QgcmVzZXQgdGhlIGhvc3Qtc2lkZQorCSAqIGVuZHBvaW50IHN0YXRlLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOwogCi0JCS8qIHNldF9pbnRlcmZhY2UgcmVzZXRzIGhvc3Qgc2lkZSB0b2dnbGUgZXZlbgotCQkgKiBmb3IgYWx0c2V0dGluZyB6ZXJvLiAgdGhlIGludGVyZmFjZSBtYXkgaGF2ZSBubyBkcml2ZXIuCi0JCSAqLwogCQlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwotCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAotCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAoZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcgPT0gMCkgeworCQkJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKHVkZXYsIGludGYsIHRydWUpOworCQkJdXNiX2VuYWJsZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgdHJ1ZSk7CisJCQlyZXQgPSAwOworCQl9IGVsc2UgeworCQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgZGVzYy0+YkludGVyZmFjZU51bWJlciwKKwkJCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQl9CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzdG9yZSBpbnRlcmZhY2UgJWQgIgogCQkJCSJhbHRzZXR0aW5nICVkIChlcnJvcj0lZClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDQ5ZTdmNTYuLjMwYTA2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC01OSw3ICs1OSw3IEBACiAJCXJldHZhbCA9IChjdHguc3RhdHVzID09IC1FTk9FTlQgPyAtRVRJTUVET1VUIDogY3R4LnN0YXR1cyk7CiAKIAkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKLQkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZFxuIiwKKwkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0ldS8ldVxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sCiAJCQl1c2JfZW5kcG9pbnRfbnVtKCZ1cmItPmVwLT5kZXNjKSwKIAkJCXVzYl91cmJfZGlyX2luKHVyYikgPyAiaW4iIDogIm91dCIsCkBAIC04MDQsMTggKzgwNCwxNiBAQAogCQkJZGV2X2VycigmZGV2LT5kZXYsCiAJCQkJInN0cmluZyBkZXNjcmlwdG9yIDAgcmVhZCBlcnJvcjogJWRcbiIsCiAJCQkJZXJyKTsKLQkJCWdvdG8gZXJyb3V0OwogCQl9IGVsc2UgaWYgKGVyciA8IDQpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAic3RyaW5nIGRlc2NyaXB0b3IgMCB0b28gc2hvcnRcbiIpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3V0OwogCQl9IGVsc2UgewotCQkJZGV2LT5oYXZlX2xhbmdpZCA9IDE7CiAJCQlkZXYtPnN0cmluZ19sYW5naWQgPSB0YnVmWzJdIHwgKHRidWZbM10gPDwgOCk7CiAJCQkvKiBhbHdheXMgdXNlIHRoZSBmaXJzdCBsYW5naWQgbGlzdGVkICovCiAJCQlkZXZfZGJnKCZkZXYtPmRldiwgImRlZmF1bHQgbGFuZ3VhZ2UgMHglMDR4XG4iLAogCQkJCWRldi0+c3RyaW5nX2xhbmdpZCk7CiAJCX0KKworCQlkZXYtPmhhdmVfbGFuZ2lkID0gMTsKIAl9CiAKIAllcnIgPSB1c2Jfc3RyaW5nX3N1YihkZXYsIGRldi0+c3RyaW5nX2xhbmdpZCwgaW5kZXgsIHRidWYpOwpAQCAtMTcxOSw3ICsxNzE3LDggQEAKIAl9CiAJa2ZyZWUobmV3X2ludGVyZmFjZXMpOwogCi0JaWYgKGNwLT5zdHJpbmcgPT0gTlVMTCkKKwlpZiAoY3AtPnN0cmluZyA9PSBOVUxMICYmCisJCQkhKGRldi0+cXVpcmtzICYgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MpKQogCQljcC0+c3RyaW5nID0gdXNiX2NhY2hlX3N0cmluZyhkZXYsIGNwLT5kZXNjLmlDb25maWd1cmF0aW9uKTsKIAogCS8qIE5vdyB0aGF0IGFsbCB0aGUgaW50ZXJmYWNlcyBhcmUgc2V0IHVwLCByZWdpc3RlciB0aGVtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwppbmRleCBjMDcwYjM0Li5hYjkzOTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKQEAgLTU0LDYgKzU0LDEwIEBACiAJeyBVU0JfREVWSUNFKDB4MDYzOCwgMHgwYTEzKSwgLmRyaXZlcl9pbmZvID0KIAkgIFVTQl9RVUlSS19TVFJJTkdfRkVUQ0hfMjU1IH0sCiAKKwkvKiBTYWl0ZWsgQ3lib3JnIEdvbGQgSm95c3RpY2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNmEzLCAweDAwMDYpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIE0tU3lzdGVtcyBGbGFzaCBEaXNrIFBpb25lZXJzICovCiAJeyBVU0JfREVWSUNFKDB4MDhlYywgMHgxMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNGNjMjQ1Ni4uYzY2Nzg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KICNpbmNsdWRlICJ1c2IuaCIKIAogLyogQWN0aXZlIGNvbmZpZ3VyYXRpb24gZmllbGRzICovCkBAIC04MTMsNyArODE0LDggQEAKIAlpZiAoaW50Zi0+c3lzZnNfZmlsZXNfY3JlYXRlZCB8fCBpbnRmLT51bnJlZ2lzdGVyaW5nKQogCQlyZXR1cm4gMDsKIAotCWlmIChhbHQtPnN0cmluZyA9PSBOVUxMKQorCWlmIChhbHQtPnN0cmluZyA9PSBOVUxMICYmCisJCQkhKHVkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTKSkKIAkJYWx0LT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIGFsdC0+ZGVzYy5pSW50ZXJmYWNlKTsKIAlpZiAoYWx0LT5zdHJpbmcpCiAJCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IDU4YmM1ZTMuLjMzNzYwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJaWYgKCF1cmIgfHwgdXJiLT5oY3ByaXYgfHwgIXVyYi0+Y29tcGxldGUpCiAJCXJldHVybiAtRUlOVkFMOwogCWRldiA9IHVyYi0+ZGV2OwotCWlmICgoIWRldikgfHwgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfREVGQVVMVCkpCisJaWYgKCghZGV2KSB8fCAoZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEZvciBub3csIGdldCB0aGUgZW5kcG9pbnQgZnJvbSB0aGUgcGlwZS4gIEV2ZW50dWFsbHkgZHJpdmVycwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJfQogCiAJLyogdGhlIEkvTyBidWZmZXIgbXVzdCBiZSBtYXBwZWQvdW5tYXBwZWQsIGV4Y2VwdCB3aGVuIGxlbmd0aD0wICovCi0JaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IDApCisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IElOVF9NQVgpCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBlNTVmZWY1Li43NzBiM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjU0LDYgKzI1NCw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyN1gKIAlib29sZWFuICJQWEEgMjd4IgogCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgUFhBMjd4CisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKIAloZWxwCiAJICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwppbmRleCBhYmY4MTkyLi44MjZmM2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQlkbWFfZGVzYy0+c3RhdHVzID0gQU1EX0FEREJJVFMoZG1hX2Rlc2MtPnN0YXR1cywKIAkJCQkJCVVEQ19ETUFfU1RQX1NUU19CU19IT1NUX0JVU1ksCiAJCQkJCQlVRENfRE1BX1NUUF9TVFNfQlMpOwotCQlkbWFfZGVzYy0+YnVmcHRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihETUFfRE9OVF9VU0UpOworCQlkbWFfZGVzYy0+YnVmcHRyID0gY3B1X3RvX2xlMzIoRE1BX0RPTlRfVVNFKTsKIAkJcmVxLT50ZF9kYXRhID0gZG1hX2Rlc2M7CiAJCXJlcS0+dGRfZGF0YV9sYXN0ID0gTlVMTDsKIAkJcmVxLT5jaGFpbl9sZW4gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwppbmRleCA2NWIwM2UzLi5jMjJmYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0gMCwKIAkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKLQkud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KSwKKwkud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCksCiAJLyogRklYTUU6IEkgaGF2ZSBubyBpZGVhIHdoYXQgdG8gcHV0IGhlcmUgKi8KIAkuYkludGVydmFsID0gMSwKIH07CkBAIC0xMjA3LDIxICsxMjA3LDIxIEBACiAvKiBBdm9pZCBvdmVybHkgbG9uZyBleHByZXNzaW9ucyAqLwogc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVfaXNfZGV2X3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpCisJaWYgKGNycS0+d1ZhbHVlID09IGNwdV90b19sZTE2KFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVfaXNfZGV2X3Rlc3RfbW9kZShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcnEpCiB7Ci0JaWYgKGNycS0+d1ZhbHVlID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9URVNUX01PREUpKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfREVWSUNFX1RFU1RfTU9ERSkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVfaXNfZXBfaGFsdChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcnEpCiB7Ci0JaWYgKGNycS0+d1ZhbHVlID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0VORFBPSU5UX0hBTFQpKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfRU5EUE9JTlRfSEFMVCkpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEyMzksNyArMTIzOSw3IEBACiAJCQlzdGF0dXMgPSBjcHVfdG9fbGUxNih1ZGMtPmRldnN0YXR1cyk7CiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUKIAkJCQk9PSAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKSB7Ci0JCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApOworCQkJc3RhdHVzID0gY3B1X3RvX2xlMTYoMCk7CiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUKIAkJCQk9PSAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkpIHsKIAkJCXN0cnVjdCB1c2JhX2VwICp0YXJnZXQ7CkBAIC0xMjUwLDEyICsxMjUwLDEyIEBACiAKIAkJCXN0YXR1cyA9IDA7CiAJCQlpZiAoaXNfc3RhbGxlZCh1ZGMsIHRhcmdldCkpCi0JCQkJc3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CisJCQkJc3RhdHVzIHw9IGNwdV90b19sZTE2KDEpOwogCQl9IGVsc2UKIAkJCWdvdG8gZGVsZWdhdGU7CiAKIAkJLyogV3JpdGUgZGlyZWN0bHkgdG8gdGhlIEZJRk8uIE5vIHF1ZXVlaW5nIGlzIGRvbmUuICovCi0JCWlmIChjcnEtPndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihzaXplb2Yoc3RhdHVzKSkpCisJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0YXR1cykpKQogCQkJZ290byBzdGFsbDsKIAkJZXAtPnN0YXRlID0gREFUQV9TVEFHRV9JTjsKIAkJX19yYXdfd3JpdGV3KHN0YXR1cywgZXAtPmZpZm8pOwpAQCAtMTI3NCw3ICsxMjc0LDcgQEAKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKIAkJCXN0cnVjdCB1c2JhX2VwICp0YXJnZXQ7CiAKLQkJCWlmIChjcnEtPndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKQorCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKQogCQkJCQl8fCAhZmVhdHVyZV9pc19lcF9oYWx0KGNycSkpCiAJCQkJZ290byBzdGFsbDsKIAkJCXRhcmdldCA9IGdldF9lcF9ieV9hZGRyKHVkYywgbGUxNl90b19jcHUoY3JxLT53SW5kZXgpKTsKQEAgLTEzMDgsNyArMTMwOCw3IEBACiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwogCi0JCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkKKwkJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkKIAkJCQkJfHwgIWZlYXR1cmVfaXNfZXBfaGFsdChjcnEpKQogCQkJCWdvdG8gc3RhbGw7CiAKQEAgLTE1MTQsNyArMTUxNCw3IEBACiAJCQkgKi8KIAkJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfSU47CiAJCX0gZWxzZSB7Ci0JCQlpZiAoY3JxLmNycS53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpCisJCQlpZiAoY3JxLmNycS53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApKQogCQkJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfT1VUOwogCQkJZWxzZQogCQkJCWVwLT5zdGF0ZSA9IFNUQVRVU19TVEFHRV9JTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCmluZGV4IDU0OTViMTcuLjkyODEzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwpAQCAtNjYsNyArNjYsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCkBAIC03NCw4ICs3NCw4IEBACiAJLyogLmJNYXhQYWNrZXRTaXplMCA9IGYoaGFyZHdhcmUpICovCiAKIAkvKiBWZW5kb3IgYW5kIHByb2R1Y3QgaWQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMuICAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENEQ19WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0RDX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoQ0RDX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoQ0RDX1BST0RVQ1RfTlVNKSwKIAkvKiAuYmNkRGV2aWNlID0gZihoYXJkd2FyZSkgKi8KIAkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KIAkvKiAuaVByb2R1Y3QgPSBEWU5BTUlDICovCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJCQlnYWRnZXQtPm5hbWUsCiAJCQkJY2RjX2NvbmZpZ19kcml2ZXIubGFiZWwpOwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwppbmRleCBiZWJmOTExLi4yMmM2NTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNjI2LDcgKzI2MjUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKIAl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwogCi0Jc3RyY3B5KHVkYy0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKwlkZXZfc2V0X25hbWUoJnVkYy0+Z2FkZ2V0LmRldiwgImdhZGdldCIpOwogCXVkYy0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IGRldi0+ZG1hX21hc2s7CiAJdWRjLT5nYWRnZXQuZGV2LnBhcmVudCAgID0gZGV2OwogCXVkYy0+Z2FkZ2V0LmRldi5yZWxlYXNlICA9IHVkY19yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDVkMTFjMjkuLjU5ZTg1MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTE0OSwxNiArMTQ5LDE3IEBACiBpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCiB7CiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CiAJaW50CQkJCXN0YXR1cyA9IDA7CiAKLQlzcGluX2xvY2soJmNkZXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoY2Rldi0+ZGVhY3RpdmF0aW9ucyA9PSAwKQogCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKIAlpZiAoc3RhdHVzID09IDApCiAJCWNkZXYtPmRlYWN0aXZhdGlvbnMrKzsKIAotCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZGV2LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTAxMyw3ICsxMDE0LDcgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKIAlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKIAotCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgYW5kIGRldmljZSBsZXZlbAorCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgbGV2ZWwKIAkgKiBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3M/CiAJICovCiAJREJHKGNkZXYsICJzdXNwZW5kXG4iKTsKQEAgLTEwMjMsNiArMTAyNCw4IEBACiAJCQkJZi0+c3VzcGVuZChmKTsKIAkJfQogCX0KKwlpZiAoY29tcG9zaXRlLT5zdXNwZW5kKQorCQljb21wb3NpdGUtPnN1c3BlbmQoY2Rldik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDMxLDEwICsxMDM0LDEyIEBACiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CiAKLQkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGFuZCBkZXZpY2UgbGV2ZWwKKwkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGxldmVsCiAJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPwogCSAqLwogCURCRyhjZGV2LCAicmVzdW1lXG4iKTsKKwlpZiAoY29tcG9zaXRlLT5yZXN1bWUpCisJCWNvbXBvc2l0ZS0+cmVzdW1lKGNkZXYpOwogCWlmIChjZGV2LT5jb25maWcpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmY2Rldi0+Y29uZmlnLT5mdW5jdGlvbnMsIGxpc3QpIHsKIAkJCWlmIChmLT5yZXN1bWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggOTA2NDY5Ni4uYTU2YjI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAkJCQkJfQogCQkJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMSkKIAkJCQkJCWJ1ZiBbMV0gPSAwOwotCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW4gKDIsCisJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1pbl90KHUzMiwgMiwKIAkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAJCQkJCXZhbHVlID0gMDsKIAkJCQkJc3RhdHVzID0gMDsKQEAgLTE2MjYsNyArMTYyNiw3IEBACiAJCWh1Yl9kZXNjcmlwdG9yICgoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOwogCQlicmVhazsKIAljYXNlIEdldEh1YlN0YXR1czoKLQkJKihfX2xlMzIgKikgYnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSooX19sZTMyICopIGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRQb3J0U3RhdHVzOgogCQlpZiAod0luZGV4ICE9IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwppbmRleCBhMzZiMTE3Li5jZDA5MTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJLyogQk9USDogICJoaWdoIGJhbmR3aWR0aCIgd29ya3Mgb25seSBhdCBoaWdoIHNwZWVkICovCi0JCWlmICgoZGVzYy0+d01heFBhY2tldFNpemUgJiBfX2NvbnN0YW50X2NwdV90b19sZTE2KDM8PDExKSkpIHsKKwkJaWYgKChkZXNjLT53TWF4UGFja2V0U2l6ZSAmIGNwdV90b19sZTE2KDM8PDExKSkpIHsKIAkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCiAJCQkJcmV0dXJuIDA7CiAJCQkvKiBjb25maWd1cmUgeW91ciBoYXJkd2FyZSB3aXRoIGVub3VnaCBidWZmZXJpbmchISAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwppbmRleCAzNzI1MmQwLi5kMDA2ZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYgKDB4MDIwMCksCiAKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLApAQCAtMTY3LDggKzE2Nyw4IEBACiAJICogd2Ugc3VwcG9ydC4gIChBcyBkb2VzIGJOdW1Db25maWd1cmF0aW9ucy4pICBUaGVzZSB2YWx1ZXMgY2FuCiAJICogYWxzbyBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLgogCSAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChDRENfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChDRENfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNiAoQ0RDX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCiAJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWV0aF9jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKaW5kZXggYzFkMzRkZi4uNzk1Mzk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZihhY21faGVhZGVyX2Rlc2MpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvcgpAQCAtMTU5LDcgKzE1OSw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKIAkuYkludGVydmFsID0JCTEgPDwgR1NfTE9HMl9OT1RJRllfSU5URVJWQUwsCiB9OwogCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAogCS5iSW50ZXJ2YWwgPQkJR1NfTE9HMl9OT1RJRllfSU5URVJWQUwrNCwKIH07CiAKQEAgLTIwNSwxNCArMjA1LDE0IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGFjbV9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmFjbV9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCmluZGV4IDRhZTU3OTkuLmVjZjViZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKIAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIGVjbV91bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xNDgsOSArMTQ4LDkgQEAKIAogCS8qIHRoaXMgZGVzY3JpcHRvciBhY3R1YWxseSBhZGRzIHZhbHVlLCBzdXJwcmlzZSEgKi8KIAkvKiAuaU1BQ0FkZHJlc3MgPSBEWU5BTUlDICovCi0JLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JX19jb25zdGFudF9jcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLwotCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAotCS53TnVtYmVyTUNGaWx0ZXJzID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSwKKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQljcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQljcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CWNwdV90b19sZTE2KDApLAogCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKIH07CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKQEAgLTIzNiw3ICsyMzYsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNTQsNyArMjU0LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmVjbV9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwppbmRleCA4YWZmZTFkLi5lYjZkZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc2lua19kZXNjID0gewpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19sb29wYmFja19kZXNjc1tdID0gewpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKiBsb29wYmFja19hZGQgLSBhZGQgYSBsb29wYmFjayB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZpY2UKICAqIEBjZGV2OiB0aGUgZGV2aWNlIHRvIHN1cHBvcnQgdGhlIGxvb3BiYWNrIGNvbmZpZ3VyYXRpb24KICAqLwotaW50IF9faW5pdCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoraW50IF9faW5pdCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpCiB7CiAJaW50IGlkOwogCkBAIC0zNzIsNiArMzcyLDEwIEBACiAJbG9vcGJhY2tfaW50Zi5pSW50ZXJmYWNlID0gaWQ7CiAJbG9vcGJhY2tfZHJpdmVyLmlDb25maWd1cmF0aW9uID0gaWQ7CiAKKwkvKiBzdXBwb3J0IGF1dG9yZXN1bWUgZm9yIHJlbW90ZSB3YWtldXAgdGVzdGluZyAqLworCWlmIChhdXRvcmVzdW1lKQorCQlzb3VyY2VzaW5rX2RyaXZlci5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCiAJLyogc3VwcG9ydCBPVEcgc3lzdGVtcyAqLwogCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKIAkJbG9vcGJhY2tfZHJpdmVyLmRlc2NyaXB0b3JzID0gb3RnX2Rlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKaW5kZXggMzhhYTg5Ni4uNDZkNjI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX2hlYWRlcl9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEyMCksCisJLmJjZENEQwkJCT0gY3B1X3RvX2xlMTYoMHgwMTIwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIG9iZXhfY2RjX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2Rlc2MpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX09CRVhfVFlQRSwKLQkuYmNkVmVyc2lvbgkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCisJLmJjZFZlcnNpb24JCT0gY3B1X3RvX2xlMTYoMHgwMTAwKSwKIH07CiAKIC8qIEhpZ2gtU3BlZWQgU3VwcG9ydCAqLwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZQkJPSBjcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2hzX2VwX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZQkJPSBjcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKaW5kZXggYzA5MTZjNy4uYzFhYmViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgcG5faGVhZGVyX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjCkBAIC04Nyw3ICs4Nyw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIHBuX3Bob25ldF9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX1BIT05FVF9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDE1MDUpLCAvKiA/Pz8gKi8KKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MTUwNSksIC8qID8/PyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfcG5fZnVuY3Rpb25bXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCmluZGV4IDNhOGJiNTMuLjMyNzlhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgY2FsbF9tZ210X2Rlc2NyaXB0b3IgX19pbml0ZGF0YSA9IHsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCiB9OwogCkBAIC0yMzAsNyArMjMwLDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQyArIDQsCiB9Owogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yMzksNyArMjM5LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmV0aF9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CkBAIC00MzcsNyArNDM3LDcgQEAKIAkJREJHKGNkZXYsICJybmRpcyByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAogCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKIAkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKLQkJcmVxLT56ZXJvID0gMDsKKwkJcmVxLT56ZXJvID0gKHZhbHVlIDwgd19sZW5ndGgpOwogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwogCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHZhbHVlIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKaW5kZXggZmU1Njc0ZGIuLmRiMGFhOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCkBAIC04OSwxNCArODksMTQgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3Nlcl9oc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzZXJfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGRjODRkMjYuLmJmZmU5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU5LDcgKzU5LDYgQEAKIAogCXN0cnVjdCB1c2JfZXAJCSppbl9lcDsKIAlzdHJ1Y3QgdXNiX2VwCQkqb3V0X2VwOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlc3VtZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZfc291cmNlc2luayAqZnVuY190b19zcyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQpAQCAtNjcsMTAgKzY2LDYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX3NvdXJjZXNpbmssIGZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGF1dG9yZXN1bWU7Ci1tb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7Ci0KIHN0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuOwogbW9kdWxlX3BhcmFtKHBhdHRlcm4sIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwYXR0ZXJuLCAiMCA9IGFsbCB6ZXJvZXMsIDEgPSBtb2Q2MyAiKTsKQEAgLTExOCw3ICsxMTMsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3NpbmtfZGVzYyA9IHsKQEAgLTEyNiw3ICsxMjEsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfc291cmNlX3NpbmtfZGVzY3NbXSA9IHsKQEAgLTE1NSwyMSArMTUwLDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgc291cmNlc2lua19hdXRvcmVzdW1lKHVuc2lnbmVkIGxvbmcgX2MpCi17Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gKHZvaWQgKilfYzsKLQlzdHJ1Y3QgdXNiX2dhZGdldAkqZyA9IGNkZXYtPmdhZGdldDsKLQotCS8qIE5vcm1hbGx5IHRoZSBob3N0IHdvdWxkIGJlIHdva2VuIHVwIGZvciBzb21ldGhpbmcKLQkgKiBtb3JlIHNpZ25pZmljYW50IHRoYW4ganVzdCBhIHRpbWVyIGZpcmluZzsgbGlrZWx5Ci0JICogYmVjYXVzZSBvZiBzb21lIGRpcmVjdCB1c2VyIHJlcXVlc3QuCi0JICovCi0JaWYgKGctPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7Ci0JCWludCBzdGF0dXMgPSB1c2JfZ2FkZ2V0X3dha2V1cChnKTsKLQkJREJHKGNkZXYsICIlcyAtLT4gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwotCX0KLX0KLQogc3RhdGljIGludCBfX2luaXQKIHNvdXJjZXNpbmtfYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCiB7CkBAIC0xOTgsOSArMTc4LDYgQEAKIAkJZ290byBhdXRvY29uZl9mYWlsOwogCXNzLT5vdXRfZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KIAotCXNldHVwX3RpbWVyKCZzcy0+cmVzdW1lLCBzb3VyY2VzaW5rX2F1dG9yZXN1bWUsCi0JCQkodW5zaWduZWQgbG9uZykgYy0+Y2Rldik7Ci0KIAkvKiBzdXBwb3J0IGhpZ2ggc3BlZWQgaGFyZHdhcmUgKi8KIAlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CiAJCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQpAQCAtMzU5LDcgKzMzNiw2IEBACiAKIAljZGV2ID0gc3MtPmZ1bmN0aW9uLmNvbmZpZy0+Y2RldjsKIAlkaXNhYmxlX2VuZHBvaW50cyhjZGV2LCBzcy0+aW5fZXAsIHNzLT5vdXRfZXApOwotCWRlbF90aW1lcigmc3MtPnJlc3VtZSk7CiAJVkRCRyhjZGV2LCAiJXMgZGlzYWJsZWRcbiIsIHNzLT5mdW5jdGlvbi5uYW1lKTsKIH0KIApAQCAtNDI2LDMwICs0MDIsNiBAQAogCWRpc2FibGVfc291cmNlX3Npbmsoc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX3N1c3BlbmQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKLXsKLQlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OwotCi0JaWYgKGNkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCi0JCXJldHVybjsKLQotCWlmIChhdXRvcmVzdW1lKSB7Ci0JCW1vZF90aW1lcigmc3MtPnJlc3VtZSwgamlmZmllcyArIChIWiAqIGF1dG9yZXN1bWUpKTsKLQkJREJHKGNkZXYsICJzdXNwZW5kLCB3YWtldXAgaW4gJWQgc2Vjb25kc1xuIiwgYXV0b3Jlc3VtZSk7Ci0JfSBlbHNlCi0JCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgc291cmNlc2lua19yZXN1bWUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKLXsKLQlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzcyA9IGZ1bmNfdG9fc3MoZik7Ci0Jc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OwotCi0JREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCWRlbF90aW1lcigmc3MtPnJlc3VtZSk7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IHNvdXJjZXNpbmtfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQpAQCAtNDY3LDggKzQxOSw2IEBACiAJc3MtPmZ1bmN0aW9uLnVuYmluZCA9IHNvdXJjZXNpbmtfdW5iaW5kOwogCXNzLT5mdW5jdGlvbi5zZXRfYWx0ID0gc291cmNlc2lua19zZXRfYWx0OwogCXNzLT5mdW5jdGlvbi5kaXNhYmxlID0gc291cmNlc2lua19kaXNhYmxlOwotCXNzLT5mdW5jdGlvbi5zdXNwZW5kID0gc291cmNlc2lua19zdXNwZW5kOwotCXNzLT5mdW5jdGlvbi5yZXN1bWUgPSBzb3VyY2VzaW5rX3Jlc3VtZTsKIAogCXN0YXR1cyA9IHVzYl9hZGRfZnVuY3Rpb24oYywgJnNzLT5mdW5jdGlvbik7CiAJaWYgKHN0YXR1cykKQEAgLTU1OSw3ICs1MDksNyBAQAogICogc291cmNlc2lua19hZGQgLSBhZGQgYSBzb3VyY2Uvc2luayB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZpY2UKICAqIEBjZGV2OiB0aGUgZGV2aWNlIHRvIHN1cHBvcnQgdGhlIGNvbmZpZ3VyYXRpb24KICAqLwotaW50IF9faW5pdCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitpbnQgX19pbml0IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKQogewogCWludCBpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwppbmRleCBmZTE4MzI4Li5hOWM5OGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfbWRsbV9kZXNjIG1kbG1fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTE2LDcgKzExNiw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfTURMTV9UWVBFLAogCi0JLmJjZFZlcnNpb24gPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS5iY2RWZXJzaW9uID0JCWNwdV90b19sZTE2KDB4MDEwMCksCiAJLmJHVUlEID0gewogCQkweDVkLCAweDM0LCAweGNmLCAweDY2LCAweDExLCAweDE4LCAweDExLCAweGQ2LAogCQkweGEyLCAweDFhLCAweDAwLCAweDAxLCAweDAyLCAweGNhLCAweDlhLCAweDdmLApAQCAtMTQ0LDkgKzE0NCw5IEBACiAKIAkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCiAJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLwotCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KLQkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQljcHVfdG9fbGUxNigwKSwKIAkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCiB9OwogCkBAIC0xODYsNyArMTg2LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zdWJzZXRfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZXRoX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCAxYWI5ZGFjLi41YzAzMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC04NDcsMTMgKzg0NywxMyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCiAJLyogVGhlIG5leHQgdGhyZWUgdmFsdWVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKLQkuYmNkRGV2aWNlID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhmZmZmKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9JRCksCisJLmJjZERldmljZSA9CQljcHVfdG9fbGUxNigweGZmZmYpLAogCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKQEAgLTkyNiw3ICs5MjYsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoMiksCiAJLmJJbnRlcnZhbCA9CQkzMiwJLy8gZnJhbWVzIC0+IDMyIG1zCiB9OwogCkBAIC05NTQsNyArOTU0LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLApAQCAtOTY3LDcgKzk2Nyw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX291dF9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogCS5iSW50ZXJ2YWwgPQkJMSwJLy8gTkFLIGV2ZXJ5IDEgdWZyYW1lCiB9OwogCkBAIC05ODgsNyArOTg4LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfaW50cl9pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNigyKSwKIAkuYkludGVydmFsID0JCTksCS8vIDIqKig5LTEpID0gMjU2IHVmcmFtZXMgLT4gMzIgbXMKIH07CiAKQEAgLTE3MTEsNyArMTcxMSw5IEBACiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX1BST1RFQ1RFRDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXNwaW5fbG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyAmPSB+T19TWU5DOwkvLyBEZWZhdWx0IGlzIG5vdCB0byB3YWl0CisJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAogCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKIAkgKiBub3QgdG9vIGJpZyAqLwpAQCAtMTcyOCw4ICsxNzMwLDExIEBACiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChmc2ctPmNtbmRbMV0gJiAweDA4KQkvLyBGVUEKKwkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpIHsJLy8gRlVBCisJCQlzcGluX2xvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAkJCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyB8PSBPX1NZTkM7CisJCQlzcGluX3VubG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOworCQl9CiAJfQogCWlmIChsYmEgPj0gY3VybHVuLT5udW1fc2VjdG9ycykgewogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwpAQCAtMjY0Niw3ICsyNjUxLDcgQEAKIAkJc3RydWN0IGJ1bGtfY3Nfd3JhcAkqY3N3ID0gYmgtPmJ1ZjsKIAogCQkvKiBTdG9yZSBhbmQgc2VuZCB0aGUgQnVsay1vbmx5IENTVyAqLwotCQljc3ctPlNpZ25hdHVyZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVVNCX0JVTEtfQ1NfU0lHKTsKKwkJY3N3LT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOwogCQljc3ctPlRhZyA9IGZzZy0+dGFnOwogCQljc3ctPlJlc2lkdWUgPSBjcHVfdG9fbGUzMihmc2ctPnJlc2lkdWUpOwogCQljc3ctPlN0YXR1cyA9IHN0YXR1czsKQEAgLTMwODksNyArMzA5NCw3IEBACiAKIAkvKiBJcyB0aGUgQ0JXIHZhbGlkPyAqLwogCWlmIChyZXEtPmFjdHVhbCAhPSBVU0JfQlVMS19DQl9XUkFQX0xFTiB8fAotCQkJY2J3LT5TaWduYXR1cmUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCWNidy0+U2lnbmF0dXJlICE9IGNwdV90b19sZTMyKAogCQkJCVVTQl9CVUxLX0NCX1NJRykpIHsKIAkJREJHKGZzZywgImludmFsaWQgQ0JXOiBsZW4gJXUgc2lnIDB4JXhcbiIsCiAJCQkJcmVxLT5hY3R1YWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKaW5kZXggZDhkOWE1Mi4uOWQ3Yjk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwpAQCAtMTgwMiw3ICsxODAyLDggQEAKIAogb3V0OgogCWlmIChyZXR2YWwpCi0JCXByaW50aygiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAorCQkgICAgICAgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CkBAIC0xODQ3LDcgKzE4NDgsOCBAQAogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CiAJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CiAKLQlwcmludGsoInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCisJICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTI0NTUsNyArMjQ1Nyw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7Ci0JcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKIH0KIAogbW9kdWxlX2V4aXQodWRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCmluZGV4IGRkMmYxNmEuLmU4NGIzYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKQEAgLTE5LDcgKzE5LDcgQEAKIAkJc3RydWN0IHVzYl9lcCAqaW4sIHN0cnVjdCB1c2JfZXAgKm91dCk7CiAKIC8qIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgbGlua3VwICovCi1pbnQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKLWludCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKK2ludCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSk7CitpbnQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKTsKIAogI2VuZGlmIC8qIF9fR19aRVJPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggNjBkM2Y5ZS4uYjkzMTJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTE5OSwxMCArMTk5LDEwIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfREVWSUNFX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCkBAIC0yNDEsOCArMjQxLDggQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCi0JLmJjZEFEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSksCisJLmJjZEFEQyA9CQljcHVfdG9fbGUxNigweDAxMDApLAorCS53VG90YWxMZW5ndGggPQkJY3B1X3RvX2xlMTYoVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpKSwKIAkuYkluQ29sbGVjdGlvbiA9CTEsCiAJLmJhSW50ZXJmYWNlTnIgPSB7CiAJCVswXSA9CQlHTUlESV9NU19JTlRFUkZBQ0UsCkBAIC0yNjUsOCArMjY1LDggQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfTVNfSEVBREVSX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCi0JLmJjZE1TQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9EVF9NU19IRUFERVJfU0laRQorCS5iY2RNU0MgPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkud1RvdGFsTGVuZ3RoID0JCWNwdV90b19sZTE2KFVTQl9EVF9NU19IRUFERVJfU0laRQogCQkJCSsgMipVU0JfRFRfTUlESV9JTl9TSVpFCiAJCQkJKyAyKlVTQl9EVF9NSURJX09VVF9TSVpFKDEpKSwKIH07CkBAIC0xMDk5LDEwICsxMDk5LDkgQEAKIAkJLmRldl9mcmVlID0gZ21pZGlfc25kX2ZyZWUsCiAJfTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7Ci0JCUVSUk9SKGRldiwgInNuZF9jYXJkX25ldyBmYWlsZWRcbiIpOwotCQllcnIgPSAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJRVJST1IoZGV2LCAic25kX2NhcmRfY3JlYXRlIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAJZGV2LT5jYXJkID0gY2FyZDsKQEAgLTEyMjcsNyArMTIyNiw3IEBACiAJCSAqLwogCQlwcl93YXJuaW5nKCIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAogCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOwotCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4OTk5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKaW5kZXggNjM0MTljNC4uZGUwMTBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKQEAgLTE0NzIsNyArMTQ3Miw3IEBACiAJCQkJLyogYWN0aXZlIGVuZHBvaW50ICovCiAJCQkJaWYgKHRtcCA+IDMgfHwgKCFkZXYtPmVwW3RtcF0uZGVzYyAmJiB0bXAgIT0gMCkpCiAJCQkJCWdvdG8gc3RhbGw7Ci0JCQkJaWYgKGN0cmwud0luZGV4ICYgX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJCQlpZiAoY3RybC53SW5kZXggJiBjcHVfdG9fbGUxNigKIAkJCQkJCVVTQl9ESVJfSU4pKSB7CiAJCQkJCWlmICghZGV2LT5lcFt0bXBdLmlzX2luKQogCQkJCQkJZ290byBzdGFsbDsKQEAgLTE0ODAsNyArMTQ4MCw3IEBACiAJCQkJCWlmIChkZXYtPmVwW3RtcF0uaXNfaW4pCiAJCQkJCQlnb3RvIHN0YWxsOwogCQkJCX0KLQkJCQlpZiAoY3RybC53VmFsdWUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJCQlpZiAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoCiAJCQkJCQlVU0JfRU5EUE9JTlRfSEFMVCkpCiAJCQkJCWdvdG8gc3RhbGw7CiAJCQkJaWYgKHRtcCkKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiAJCQkJcmV0dXJuOwogCQkJY2FzZSBVU0JfUkVDSVBfREVWSUNFOgogCQkJCS8qIGRldmljZSByZW1vdGUgd2FrZXVwOiBhbHdheXMgY2xlYXIgKi8KLQkJCQlpZiAoY3RybC53VmFsdWUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKSkKKwkJCQlpZiAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoMSkpCiAJCQkJCWdvdG8gc3RhbGw7CiAJCQkJVkRCRyhkZXYsICJjbGVhciBkZXYgcmVtb3RlIHdha2V1cFxuIik7CiAJCQkJZ290byBzdWNjZWVkOwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAKIAlkZXYtPnJlcV9jb25maWcgPSAoY3RybC5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OCiAJCQkJJiYgY3RybC5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSk7CiAJaWYgKHVubGlrZWx5KGRldi0+cmVxX2NvbmZpZykpCi0JCWRldi0+Y29uZmlndXJlZCA9IChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApKTsKKwkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IGNwdV90b19sZTE2KDApKTsKIAogCS8qIGRlbGVnYXRlIGV2ZXJ5dGhpbmcgdG8gdGhlIGdhZGdldCBkcml2ZXIuCiAJICogaXQgbWF5IHJlc3BvbmQgYWZ0ZXIgdGhpcyBpcnEgaGFuZGxlciByZXR1cm5zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKaW5kZXggNzdjNWQwYS4uMTY4NjU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCWRyaXZlci91c2IvZ2FkZ2V0L2lteF91ZGMuYwogICoKLSAqCUNvcHlyaWdodCAoQykgMjAwNSBNaWtlIExlZShlZW1pa2VAZ21haWwuY29tKQorICoJQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgTGVlIDxlZW1pa2VAZ21haWwuY29tPgogICoJQ29weXJpZ2h0IChDKSAyMDA4IERhcml1cyBBdWd1bGlzIDxhdWd1bGlzLmRhcml1c0BnbWFpbC5jb20+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CkBAIC01MSw3ICs1Miw4IEBACiB2b2lkIGlteF91ZGNfZW5hYmxlKHN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYikKIHsKIAlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0ZFX0VOQSB8IENUUkxfQUZFX0VOQSwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfRkVfRU5BIHwgQ1RSTF9BRkVfRU5BLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKIH0KIApAQCAtMTI2LDcgKzEyOCw4IEBACiAJCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CiAJCQkJX19yYXdfd3JpdGViKGVwX2NvbmZbal0sCiAJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfRERBVCk7Ci0JCQkJZG8ge30gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfREFEUikKKwkJCQlkbyB7fSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZQorCQkJCQkJCQkrIFVTQl9EQURSKQogCQkJCQkmIERBRFJfQlNZKTsKIAkJCX0KIAkJfQpAQCAtMTgzLDcgKzE4Niw4IEBACiAJCXRlbXAgPSAoRVBfRElSKGlteF9lcCkgPDwgNykgfCAobWF4IDw8IDUpCiAJCQl8IChpbXhfZXAtPmJtQXR0cmlidXRlcyA8PCAzKTsKIAkJX19yYXdfd3JpdGVsKHRlbXAsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7Ci0JCV9fcmF3X3dyaXRlbCh0ZW1wIHwgRVBTVEFUX0ZMVVNILCBpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpOworCQlfX3Jhd193cml0ZWwodGVtcCB8IEVQU1RBVF9GTFVTSCwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7CiAJCURfSU5JKGlteF91c2ItPmRldiwgIjwlcz4gZXAlZF9zdGF0ICUwOHhcbiIsIF9fZnVuY19fLCBpLAogCQkJX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKSk7CiAJfQpAQCAtMjc4LDE1ICsyODIsMTggQEAKIAlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBpbXhfZXAtPmlteF91c2I7CiAJaW50IHRlbXAsIGk7CiAKLQlEX0VSUihpbXhfdXNiLT5kZXYsICI8JXM+IEZvcmNlZCBzdGFsbCBvbiAlc1xuIiwgX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CisJRF9FUlIoaW14X3VzYi0+ZGV2LAorCQkiPCVzPiBGb3JjZWQgc3RhbGwgb24gJXNcbiIsIF9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOwogCiAJaW14X2ZsdXNoKGlteF9lcCk7CiAKIAkvKiBTcGVjaWFsIGNhcmUgZm9yIGVwMCAqLwotCWlmIChFUF9OTyhpbXhfZXApKSB7CisJaWYgKCFFUF9OTyhpbXhfZXApKSB7CiAJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiB8IENUUkxfQ01ERVJST1IsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCWRvIHsgfSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKSAmIENUUkxfQ01ET1ZFUik7CisJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSIHwgQ1RSTF9DTURFUlJPUiwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CisJCWRvIHsgfSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKQorCQkJCQkJJiBDVFJMX0NNRE9WRVIpOwogCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAkJX19yYXdfd3JpdGVsKHRlbXAgJiB+Q1RSTF9DTURFUlJPUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAl9CkBAIC0yOTYsMTIgKzMwMywxMyBAQAogCQkJaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpICsrKSB7Ci0JCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKIAkJCWlmICghKHRlbXAgJiBFUFNUQVRfU1RBTEwpKQogCSAJCQlicmVhazsKIAkgCQl1ZGVsYXkoMjApOwogCSAJfQotCQlpZiAoaSA9PSA1MCkKKwkJaWYgKGkgPT0gMTAwKQogCQkJRF9FUlIoaW14X3VzYi0+ZGV2LCAiPCVzPiBOb24gZmluaXNoZWQgc3RhbGwgb24gJXNcbiIsCiAJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CiAJfQpAQCAtMzI1LDcgKzMzMyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXN0YXRpYyB2b2lkIGVwX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXBfYWRkX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJCQlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKIHsKIAlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybjsKQEAgLTMzNCw3ICszNDMsOCBAQAogCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZpbXhfZXAtPnF1ZXVlKTsKIH0KIAotc3RhdGljIHZvaWQgZXBfZGVsX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9kZWxfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQogewogCWlmICh1bmxpa2VseSghcmVxKSkKIAkJcmV0dXJuOwpAQCAtMzQzLDcgKzM1Myw4IEBACiAJcmVxLT5pbl91c2UgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQorc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKIHsKIAllcF9kZWxfcmVxdWVzdChpbXhfZXAsIHJlcSk7CiAKQEAgLTQ5NCw3ICs1MDUsOCBAQAogCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUsIHJlcSwKIAkJCQljb21wbGV0ZWQgPyAiY29tcGxldGVkIiA6ICJub3QgY29tcGxldGVkIik7CiAJCQlpZiAoIUVQX05PKGlteF9lcCkpCi0JCQkJZXAwX2NoZ19zdGF0KF9fZnVuY19fLCBpbXhfZXAtPmlteF91c2IsIEVQMF9JRExFKTsKKwkJCQllcDBfY2hnX3N0YXQoX19mdW5jX18sCisJCQkJCQlpbXhfZXAtPmlteF91c2IsIEVQMF9JRExFKTsKIAkJfQogCX0KIApAQCAtNTM5LDEwICs1NTEsOSBAQAogCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghbGlzdF9lbXB0eSgmaW14X2VwLT5xdWV1ZSkpCisJaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkgewogCQlyZXEgPSBsaXN0X2VudHJ5KGlteF9lcC0+cXVldWUubmV4dCwgc3RydWN0IGlteF9yZXF1ZXN0LCBxdWV1ZSk7CiAKLQlpZiAocmVxKSB7CiAJCXN3aXRjaCAoaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSkgewogCiAJCWNhc2UgRVAwX0lOX0RBVEFfUEhBU0U6CQkJLyogR0VUX0RFU0NSSVBUT1IgKi8KQEAgLTU2MSw2ICs1NzIsMTAgQEAKIAkJfQogCX0KIAorCWVsc2UKKwkJRF9FUlIoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IG5vIHJlcXVlc3Qgb24gJXNcbiIsCisJCQkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4Myw3ICs1OTgsOCBAQAogCQkJCSI8JXM+IG5vIHNldHVwIHBhY2tldCByZWNlaXZlZFxuIiwgX19mdW5jX18pOwogCQkJZ290byBzdGFsbDsKIAkJfQotCQl1LndvcmRbaV0gPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsJVVNCX0VQX0ZEQVQoRVBfTk8oaW14X2VwKSkpOworCQl1LndvcmRbaV0gPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9GREFUKEVQX05PKGlteF9lcCkpKTsKIAl9CiAKIAl0ZW1wID0gaW14X2VwX2VtcHR5KGlteF9lcCk7CkBAIC03NTksNyArNzc1LDcgQEAKIAkqLwogCWlmIChpbXhfdXNiLT5zZXRfY29uZmlnICYmICFFUF9OTyhpbXhfZXApKSB7CiAJCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlEX0VQWChpbXhfdXNiLT5kZXYsCisJCURfRVJSKGlteF91c2ItPmRldiwKIAkJCSI8JXM+IGdhZGdldCByZXBseSBzZXQgY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTc3OSwyOCArNzk1LDI5IEBACiAJCXJldHVybiAtRVNIVVRET1dOOwogCX0KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQogCS8qIERlYnVnICovCiAJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBlcCVkICVzIHJlcXVlc3QgZm9yIFslZF0gYnl0ZXNcbiIsCiAJCV9fZnVuY19fLCBFUF9OTyhpbXhfZXApLAotCQkoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUgPT0gRVAwX0lOX0RBVEFfUEhBU0UpCi0JCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkgPyAiSU4iIDogIk9VVCIsIHVzYl9yZXEtPmxlbmd0aCk7CisJCSgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZQorCQkJCQkJCT09IEVQMF9JTl9EQVRBX1BIQVNFKQorCQl8fCAoRVBfTk8oaW14X2VwKSAmJiBFUF9ESVIoaW14X2VwKSkpCisJCQkJCT8gIklOIiA6ICJPVVQiLCB1c2JfcmVxLT5sZW5ndGgpOwogCWR1bXBfcmVxKF9fZnVuY19fLCBpbXhfZXAsIHVzYl9yZXEpOwogCiAJaWYgKGlteF9lcC0+c3RvcHBlZCkgewogCQl1c2JfcmVxLT5zdGF0dXMgPSAtRVNIVVRET1dOOwotCQlyZXQgPSAtRVNIVVRET1dOOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCiAJaWYgKHJlcS0+aW5fdXNlKSB7CiAJCURfRVJSKGlteF91c2ItPmRldiwKIAkJCSI8JXM+IHJlZnVzaW5nIHRvIHF1ZXVlIHJlcSAlcCAoYWxyZWFkeSBxdWV1ZWQpXG4iLAogCQkJX19mdW5jX18sIHJlcSk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAl9CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKIAl1c2JfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJdXNiX3JlcS0+YWN0dWFsID0gMDsKIApAQCAtODEwLDcgKzgyNyw3IEBACiAJCXJldCA9IGhhbmRsZV9lcDAoaW14X2VwKTsKIAllbHNlCiAJCXJldCA9IGhhbmRsZV9lcChpbXhfZXApOwotb3V0OgorCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CkBAIC05OTcsNzEgKzEwMTQsMzIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldikKKy8qCisgKiBDYWxsZWQgd2hlbiB0aW1lciBleHBpcmVzLgorICogVGltZXIgaXMgc3RhcnRlZCB3aGVuIENGR19DSEcgaXMgcmVjZWl2ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9jb25maWcodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGRldjsKKwlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSAodm9pZCAqKWRhdGE7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCB1OwogCWludCB0ZW1wLCBjZmcsIGludGYsIGFsdDsKLQlpbnQgaW50ciA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CiAKLQlpZiAoaW50ciAmIChJTlRSX1dBS0VVUCB8IElOVFJfU1VTUEVORCB8IElOVFJfUkVTVU1FIHwgSU5UUl9SRVNFVF9TVEFSVAotCQkJfCBJTlRSX1JFU0VUX1NUT1AgfCBJTlRSX0NGR19DSEcpKSB7Ci0JCQkJZHVtcF9pbnRyKF9fZnVuY19fLCBpbnRyLCBpbXhfdXNiLT5kZXYpOwotCQkJCWR1bXBfdXNiX3N0YXQoX19mdW5jX18sIGlteF91c2IpOwotCX0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JaWYgKCFpbXhfdXNiLT5kcml2ZXIpIHsKLQkJLyppbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7Ki8KLQkJZ290byBlbmRfaXJxOwotCX0KKwl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9TVEFUKTsKKwljZmcgID0gKHRlbXAgJiBTVEFUX0NGRykgPj4gNTsKKwlpbnRmID0gKHRlbXAgJiBTVEFUX0lOVEYpID4+IDM7CisJYWx0ICA9ICB0ZW1wICYgU1RBVF9BTFRTRVQ7CiAKLQlpZiAoaW50ciAmIElOVFJfV0FLRVVQKSB7Ci0JCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KLQkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSkKLQkJCQlpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSgmaW14X3VzYi0+Z2FkZ2V0KTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwotCX0KKwlEX1JFUShpbXhfdXNiLT5kZXYsCisJCSI8JXM+IG9yaWcgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWQgLyAiCisJCSJyZXEgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWRcbiIsCisJCV9fZnVuY19fLCBpbXhfdXNiLT5jZmcsIGlteF91c2ItPmludGYsIGlteF91c2ItPmFsdCwKKwkJY2ZnLCBpbnRmLCBhbHQpOwogCi0JaWYgKGludHIgJiBJTlRSX1NVU1BFTkQpIHsKLQkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgotCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+c3VzcGVuZCkKLQkJCQlpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQoJmlteF91c2ItPmdhZGdldCk7Ci0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKLQl9CisJaWYgKGNmZyA9PSAxIHx8IGNmZyA9PSAyKSB7CiAKLQlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RBUlQpIHsKLQkJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7Ci0JCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGlteF91c2ItPmRyaXZlcik7Ci0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKLQl9Ci0KLQlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RPUCkKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Ci0KLQlpZiAoaW50ciAmIElOVFJfQ0ZHX0NIRykgewotCQlfX3Jhd193cml0ZWwoSU5UUl9DRkdfQ0hHLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwotCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9TVEFUKTsKLQkJY2ZnICA9ICh0ZW1wICYgU1RBVF9DRkcpID4+IDU7Ci0JCWludGYgPSAodGVtcCAmIFNUQVRfSU5URikgPj4gMzsKLQkJYWx0ICA9ICB0ZW1wICYgU1RBVF9BTFRTRVQ7Ci0KLQkJRF9SRVEoaW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gb3JpZyBjb25maWcgQz0lZCwgST0lZCwgQT0lZCAvICIKLQkJCSJyZXEgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWRcbiIsCi0JCQlfX2Z1bmNfXywgaW14X3VzYi0+Y2ZnLCBpbXhfdXNiLT5pbnRmLCBpbXhfdXNiLT5hbHQsCi0JCQljZmcsIGludGYsIGFsdCk7Ci0KLQkJaWYgKGNmZyAhPSAxICYmIGNmZyAhPSAyKQotCQkJZ290byBlbmRfaXJxOwotCi0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCi0JCS8qIENvbmZpZyBzZXR1cCAqLwogCQlpZiAoaW14X3VzYi0+Y2ZnICE9IGNmZykgewotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgY29uZmlnIHN0YXJ0XG4iLF9fZnVuY19fKTsKIAkJCXUuYlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOwogCQkJdS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVCB8CiAJCQkJCVVTQl9UWVBFX1NUQU5EQVJEIHwKQEAgLTEwNzAsMTQgKzEwNDgsMTAgQEAKIAkJCXUud0luZGV4ID0gMDsKIAkJCXUud0xlbmd0aCA9IDA7CiAJCQlpbXhfdXNiLT5jZmcgPSBjZmc7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKIAkJCWlteF91c2ItPmRyaXZlci0+c2V0dXAoJmlteF91c2ItPmdhZGdldCwgJnUpOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBjb25maWcgZG9uZVxuIixfX2Z1bmNfXyk7CiAKIAkJfQogCQlpZiAoaW14X3VzYi0+aW50ZiAhPSBpbnRmIHx8IGlteF91c2ItPmFsdCAhPSBhbHQpIHsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGludGVyZmFjZSBzdGFydFxuIixfX2Z1bmNfXyk7CiAJCQl1LmJSZXF1ZXN0ID0gVVNCX1JFUV9TRVRfSU5URVJGQUNFOwogCQkJdS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVCB8CiAJCQkJCSAgVVNCX1RZUEVfU1RBTkRBUkQgfApAQCAtMTA4NywyMCArMTA2MSw5MiBAQAogCQkJdS53TGVuZ3RoID0gMDsKIAkJCWlteF91c2ItPmludGYgPSBpbnRmOwogCQkJaW14X3VzYi0+YWx0ID0gYWx0OwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDE7CiAJCQlpbXhfdXNiLT5kcml2ZXItPnNldHVwKCZpbXhfdXNiLT5nYWRnZXQsICZ1KTsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgaW50ZXJmYWNlIGRvbmVcbiIsX19mdW5jX18pOwogCQl9CiAJfQogCisJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdWRjX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKKwlpbnQgdGVtcDsKKworCWlmIChpbnRyICYgKElOVFJfV0FLRVVQIHwgSU5UUl9TVVNQRU5EIHwgSU5UUl9SRVNVTUUgfCBJTlRSX1JFU0VUX1NUQVJUCisJCQl8IElOVFJfUkVTRVRfU1RPUCB8IElOVFJfQ0ZHX0NIRykpIHsKKwkJCQlkdW1wX2ludHIoX19mdW5jX18sIGludHIsIGlteF91c2ItPmRldik7CisJCQkJZHVtcF91c2Jfc3RhdChfX2Z1bmNfXywgaW14X3VzYik7CisJfQorCisJaWYgKCFpbXhfdXNiLT5kcml2ZXIpCisJCWdvdG8gZW5kX2lycTsKKwogCWlmIChpbnRyICYgSU5UUl9TT0YpIHsKKwkJLyogQ29weSBmcm9tIEZyZWVzY2FsZSBCU1AuCisJCSAgIFdlIG11c3QgZW5hYmxlIFNPRiBpbnRyIGFuZCBzZXQgQ01ET1ZFUi4KKwkJICAgRGF0YXNoZWV0IGRvbid0IHNwZWNpZml5IHRoaXMgYWN0aW9uLCBidXQgaXQKKwkJICAgaXMgZG9uZSBpbiBGcmVlc2NhbGUgQlNQLCBzbyBqdXN0IGNvcHkgaXQuCisJCSovCiAJCWlmIChpbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSURMRSkgewogCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwkJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKIAkJfQogCX0KIAorCWlmIChpbnRyICYgSU5UUl9DRkdfQ0hHKSB7CisJCS8qIEEgd29ya2Fyb3VuZCBvZiBzZXJpb3VzIElNWCBVREMgYnVnLgorCQkgICBIYW5kbGluZyBvZiBDRkdfQ0hHIHNob3VsZCBiZSBkZWxheWVkIGZvciBzb21lIHRpbWUsIGJlY2F1c2UKKwkJICAgSU1YIGRvZXMgbm90IE5BQ0sgdGhlIGhvc3Qgd2hlbiBDRkdfQ0hHIGludGVycnVwdCBpcyBwZW5kaW5nLgorCQkgICBUaGVyZSBpcyBubyB0aW1lIHRvIGhhbmRsZSBjdXJyZW50IENGR19DSEcKKwkJICAgaWYgbmV4dCBDRkdfQ0hHIG9yIFNFVFVQIHBhY2tlZCBpcyBzZW5kIGltbWVkaWF0ZWx5LgorCQkgICBXZSBoYXZlIHRvIGNsZWFyIENGR19DSEcsIHN0YXJ0IHRoZSB0aW1lciBhbmQKKwkJICAgTkFDSyB0aGUgaG9zdCBieSBzZXR0aW5nIENUUkxfQ01ET1ZFUgorCQkgICBpZiBpdCBzZW5kcyBhbnkgU0VUVVAgcGFja2V0LgorCQkgICBXaGVuIHRpbWVyIGV4cGlyZXMsIGhhbmRsZXIgaXMgY2FsbGVkIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uCisJCSAgIGNoYW5nZXMuIFdoaWxlIENGR19DSEcgaXMgbm90IGhhbmRsZWQgKHNldF9jb25maWc9MSksCisJCSAgIHdlIG11c3QgTkFDSyB0aGUgaG9zdCB0byBldmVyeSBTRVRVUCBwYWNrZWQuCisJCSAgIFRoaXMgZGVsYXkgcHJldmVudHMgZnJvbSBnb2luZyBvdXQgb2Ygc3luYyB3aXRoIGhvc3QuCisJCSAqLworCQlfX3Jhd193cml0ZWwoSU5UUl9DRkdfQ0hHLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKKwkJbW9kX3RpbWVyKCZpbXhfdXNiLT50aW1lciwgamlmZmllcyArIDUpOworCQlnb3RvIGVuZF9pcnE7CisJfQorCisJaWYgKGludHIgJiBJTlRSX1dBS0VVUCkgeworCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOCisJCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUpCisJCQkJaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUoJmlteF91c2ItPmdhZGdldCk7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJfQorCisJaWYgKGludHIgJiBJTlRSX1NVU1BFTkQpIHsKKwkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgorCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+c3VzcGVuZCkKKwkJCQlpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQoJmlteF91c2ItPmdhZGdldCk7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJfQorCisJaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUQVJUKSB7CisJCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCQl1ZGNfc3RvcF9hY3Rpdml0eShpbXhfdXNiLCBpbXhfdXNiLT5kcml2ZXIpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKwkJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCX0KKworCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVE9QKQorCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwogZW5kX2lycToKIAlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMTA5LDYgKzExNTUsNyBAQAogc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfY3RybF9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGRldjsKKwlzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwID0gJmlteF91c2ItPmlteF9lcFswXTsKIAlpbnQgaW50ciA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUigwKSk7CiAKIAlkdW1wX2VwX2ludHIoX19mdW5jX18sIDAsIGludHIsIGlteF91c2ItPmRldik7CkBAIC0xMTE4LDE2ICsxMTY1LDE1IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQkvKiBERVZSRVEgSVJRIGhhcyBoaWdoZXN0IHByaW9yaXR5ICovCisJLyogREVWUkVRIGhhcyBoaWdoZXN0IHByaW9yaXR5ICovCiAJaWYgKGludHIgJiAoRVBJTlRSX0RFVlJFUSB8IEVQSU5UUl9NREVWUkVRKSkKIAkJaGFuZGxlX2VwMF9kZXZyZXEoaW14X3VzYik7CiAJLyogU2VlbSBpLk1YIGlzIG1pc3NpbmcgRU9GIGludGVycnVwdCBzb21ldGltZXMuCi0JICogVGhlcmVmb3JlIHdlIG1vbml0b3IgYm90aCBFT0YgYW5kIEZJRk9fRU1QVFkgaW50ZXJydXBzCi0JICogd2hlbiB0cmFuc21pdGluZywgYW5kIGJvdGggRU9GIGFuZCBGSUZPX0ZVTEwgd2hlbgotCSAqIHJlY2VpdmluZyBkYXRhLgorCSAqIFRoZXJlZm9yZSB3ZSBkb24ndCBtb25pdG9yIEVPRi4KKwkgKiBXZSBjYWxsIGhhbmRsZV9lcDAoKSBvbmx5IGlmIGEgcmVxdWVzdCBpcyBxdWV1ZWQgZm9yIGVwMC4KIAkgKi8KLQllbHNlIGlmIChpbnRyICYgKEVQSU5UUl9FT0YgfCBFUElOVFJfRklGT19FTVBUWSB8IEVQSU5UUl9GSUZPX0ZVTEwpKQotCQloYW5kbGVfZXAwKCZpbXhfdXNiLT5pbXhfZXBbMF0pOworCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkKKwkJaGFuZGxlX2VwMChpbXhfZXApOwogCiAJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUigwKSk7CiAKQEAgLTExODYsOCArMTIzMiw4IEBACiAJCS5lcDAJCT0gJmNvbnRyb2xsZXIuaW14X2VwWzBdLmVwLAogCQkubmFtZQkJPSBkcml2ZXJfbmFtZSwKIAkJLmRldiA9IHsKLQkJCSAuYnVzX2lkCT0gImdhZGdldCIsCi0JCSB9LAorCQkJLmluaXRfbmFtZQk9ICJnYWRnZXQiLAorCQl9LAogCX0sCiAKIAkuaW14X2VwWzBdID0gewpAQCAtMTMxOCw2ICsxMzY0LDcgQEAKIAogCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGRyaXZlcik7CiAJaW14X3VkY19kaXNhYmxlKGlteF91c2IpOworCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOwogCiAJZHJpdmVyLT51bmJpbmQoJmlteF91c2ItPmdhZGdldCk7CiAJaW14X3VzYi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwpAQCAtMTQzNSw2ICsxNDgyLDEwIEBACiAJdXNiX2luaXRfZGF0YShpbXhfdXNiKTsKIAlpbXhfdWRjX2luaXQoaW14X3VzYik7CiAKKwlpbml0X3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJaW14X3VzYi0+dGltZXIuZnVuY3Rpb24gPSBoYW5kbGVfY29uZmlnOworCWlteF91c2ItPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbXhfdXNiOworCiAJcmV0dXJuIDA7CiAKIGZhaWwzOgpAQCAtMTQ1Nyw2ICsxNTA4LDcgQEAKIAlpbnQgaTsKIAogCWlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsKKwlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJTVhfVVNCX05CX0VQICsgMTsgaSsrKQogCQlmcmVlX2lycShpbXhfdXNiLT51c2JkX2ludFtpXSwgaW14X3VzYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaAppbmRleCA4NTAwNzY5Li5iNDhhZDU5NjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKQEAgLTIzLDcgKzIzLDggQEAKIC8qIEhlbHBlciBtYWNyb3MgKi8KICNkZWZpbmUgRVBfTk8oZXApCSgoZXAtPmJFbmRwb2ludEFkZHJlc3MpICYgflVTQl9ESVJfSU4pIC8qIElOOjEsIE9VVDowICovCiAjZGVmaW5lIEVQX0RJUihlcCkJKChlcC0+YkVuZHBvaW50QWRkcmVzcykgJiBVU0JfRElSX0lOID8gMSA6IDApCi0jZGVmaW5lIGlycV90b19lcChpcnEpCSgoKGlycSkgPj0gVVNCRF9JTlQwKSB8fCAoKGlycSkgPD0gVVNCRF9JTlQ2KSA/ICgoaXJxKSAtIFVTQkRfSU5UMCkgOiAoVVNCRF9JTlQ2KSkgLypzaG91bGQgbm90IGhhcHBlbiovCisjZGVmaW5lIGlycV90b19lcChpcnEpCSgoKGlycSkgPj0gVVNCRF9JTlQwKSB8fCAoKGlycSkgPD0gVVNCRF9JTlQ2KSBcCisJCT8gKChpcnEpIC0gVVNCRF9JTlQwKSA6IChVU0JEX0lOVDYpKSAvKnNob3VsZCBub3QgaGFwcGVuKi8KICNkZWZpbmUgZXBfdG9faXJxKGVwKQkoRVBfTk8oKGVwKSkgKyBVU0JEX0lOVDApCiAjZGVmaW5lIElNWF9VU0JfTkJfRVAJNgogCkBAIC01OCw2ICs1OSw3IEBACiAJc3RydWN0IGRldmljZQkJCQkqZGV2OwogCXN0cnVjdCBpbXhfZXBfc3RydWN0CQkJaW14X2VwW0lNWF9VU0JfTkJfRVBdOwogCXN0cnVjdCBjbGsJCQkJKmNsazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJCXRpbWVyOwogCWVudW0gZXAwX3N0YXRlCQkJCWVwMHN0YXRlOwogCXN0cnVjdCByZXNvdXJjZQkJCQkqcmVzOwogCXZvaWQgX19pb21lbQkJCQkqYmFzZTsKQEAgLTg4LDggKzkwLDggQEAKICNkZWZpbmUgIFVTQl9FUF9GREFUMyh4KQkoMHgzRiArICh4KjB4MzApKSAvKiBVU0IgRklGTyBkYXRhICovCiAjZGVmaW5lICBVU0JfRVBfRlNUQVQoeCkJKDB4NDAgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gc3RhdHVzICovCiAjZGVmaW5lICBVU0JfRVBfRkNUUkwoeCkJKDB4NDQgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gY29udHJvbCAqLwotI2RlZmluZSAgVVNCX0VQX0xSRlAoeCkJCSgweDQ4ICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHJlYWQgZnJhbWUgcG9pbnRlciAqLwotI2RlZmluZSAgVVNCX0VQX0xXRlAoeCkJCSgweDRDICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHdyaXRlIGZyYW1lIHBvaW50ZXIgKi8KKyNkZWZpbmUgIFVTQl9FUF9MUkZQKHgpCQkoMHg0OCArICh4KjB4MzApKSAvKiBVU0IgbGFzdCByZCBmLiBwb2ludGVyICovCisjZGVmaW5lICBVU0JfRVBfTFdGUCh4KQkJKDB4NEMgKyAoeCoweDMwKSkgLyogVVNCIGxhc3Qgd3IgZi4gcG9pbnRlciAqLwogI2RlZmluZSAgVVNCX0VQX0ZBTFJNKHgpCSgweDUwICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGFsYXJtICovCiAjZGVmaW5lICBVU0JfRVBfRlJEUCh4KQkJKDB4NTQgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gcmVhZCBwb2ludGVyICovCiAjZGVmaW5lICBVU0JfRVBfRldSUCh4KQkJKDB4NTggKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gd3JpdGUgcG9pbnRlciAqLwpAQCAtMTcwLDcgKzE3Miw3IEBACiAvKiAjZGVmaW5lIERFQlVHX0lSUSAqLwogLyogI2RlZmluZSBERUJVR19FUElSUSAqLwogLyogI2RlZmluZSBERUJVR19EVU1QICovCi0jZGVmaW5lIERFQlVHX0VSUgorLyogI2RlZmluZSBERUJVR19FUlIgKi8KIAogI2lmZGVmIERFQlVHX1JFUQogCSNkZWZpbmUgRF9SRVEoZGV2LCBhcmdzLi4uKQlkZXZfZGJnKGRldiwgIyMgYXJncykKQEAgLTIyOCw3ICsyMzAsOCBAQAogI2VuZGlmIC8qIERFQlVHX0lSUSAqLwogCiAjaWZkZWYgREVCVUdfRVBJUlEKLQlzdGF0aWMgdm9pZCBkdW1wX2VwX2ludHIoY29uc3QgY2hhciAqbGFiZWwsIGludCBuciwgaW50IGlycXJlZywgc3RydWN0IGRldmljZSAqZGV2KQorCXN0YXRpYyB2b2lkIGR1bXBfZXBfaW50cihjb25zdCBjaGFyICpsYWJlbCwgaW50IG5yLCBpbnQgaXJxcmVnLAorCQkJCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKIAl7CiAJCWRldl9kYmcoZGV2LCAiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBuciwKIAkJCShpcnFyZWcgJiBFUElOVFJfRklGT19GVUxMKSA/ICIgZnVsbCIgOiAiIiwKQEAgLTI0Niw3ICsyNDksOCBAQAogI2VuZGlmIC8qIERFQlVHX0lSUSAqLwogCiAjaWZkZWYgREVCVUdfRFVNUAotCXN0YXRpYyB2b2lkIGR1bXBfdXNiX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYikKKwlzdGF0aWMgdm9pZCBkdW1wX3VzYl9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCQkJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQogCXsKIAkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOwogCkBAIC0yNTksMTIgKzI2MywxNSBAQAogCQkJKHRlbXAgJiBTVEFUX0FMVFNFVCkpOwogCX0KIAotCXN0YXRpYyB2b2lkIGR1bXBfZXBfc3RhdChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCkKKwlzdGF0aWMgdm9pZCBkdW1wX2VwX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsCisJCQkJCQlzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwKQogCXsKLQkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUihFUF9OTyhpbXhfZXApKSk7CisJCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9JTlRSKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19GVUxMKSA/ICIgZnVsbCIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRU1QVFkpID8gIiBmZW1wdHkiIDogIiIsCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0VSUk9SKSA/ICIgZmVyciIgOiAiIiwKQEAgLTI3NSwxOCArMjgyLDIyIEBACiAJCQkodGVtcCAmIEVQSU5UUl9ERVZSRVEpID8gIiBkZXZyZXEiIDogIiIsCiAJCQkodGVtcCAmIEVQSU5UUl9FT1QpID8gIiBlb3QiIDogIiIpOwogCi0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX1NUQVQ9WyVzJXMgYmNvdW50PSVkXVxuIiwgbGFiZWwsIEVQX05PKGlteF9lcCksCisJCQkiPCVzPiBFUCVkX1NUQVQ9WyVzJXMgYmNvdW50PSVkXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBFUFNUQVRfU0lQKSA/ICIgc2lwIiA6ICIiLAogCQkJKHRlbXAgJiBFUFNUQVRfU1RBTEwpID8gIiBzdGFsbCIgOiAiIiwKIAkJCSh0ZW1wICYgRVBTVEFUX0JDT1VOVCkgPj4gMTYpOwogCi0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UgKyBVU0JfRVBfRlNUQVQoRVBfTk8oaW14X2VwKSkpOworCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9GU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfRlNUQVQ9WyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIEVQX05PKGlteF9lcCksCisJCQkiPCVzPiBFUCVkX0ZTVEFUPVslcyVzJXMlcyVzJXMlc11cbiIsCisJCQlsYWJlbCwgRVBfTk8oaW14X2VwKSwKIAkJCSh0ZW1wICYgRlNUQVRfRVJSKSA/ICIgZmVyciIgOiAiIiwKIAkJCSh0ZW1wICYgRlNUQVRfVUYpID8gIiBmdW5kZXIiIDogIiIsCiAJCQkodGVtcCAmIEZTVEFUX09GKSA/ICIgZm92ZXIiIDogIiIsCkBAIC0yOTYsMTkgKzMwNywyMyBAQAogCQkJKHRlbXAgJiBGU1RBVF9FTVBUWSkgPyAiIGZlbXB0eSIgOiAiIik7CiAJfQogCi0Jc3RhdGljIHZvaWQgZHVtcF9yZXEoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQorCXN0YXRpYyB2b2lkIGR1bXBfcmVxKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQogCXsKIAkJaW50IGk7CiAKIAkJaWYgKCFyZXEgfHwgIXJlcS0+YnVmKSB7Ci0JCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiByZXEgb3IgcmVxIGJ1ZiBpcyBmcmVlXG4iLCBsYWJlbCk7CisJCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAorCQkJCQkiPCVzPiByZXEgb3IgcmVxIGJ1ZiBpcyBmcmVlXG4iLCBsYWJlbCk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUgPT0gRVAwX0lOX0RBVEFfUEhBU0UpCisJCWlmICgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZQorCQkJPT0gRVAwX0lOX0RBVEFfUEhBU0UpCiAJCQl8fCAoRVBfTk8oaW14X2VwKSAmJiBFUF9ESVIoaW14X2VwKSkpIHsKIAotCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gcmVxdWVzdCBkdW1wIDwiLCBsYWJlbCk7CisJCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAorCQkJCQkJIjwlcz4gcmVxdWVzdCBkdW1wIDwiLCBsYWJlbCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5sZW5ndGg7IGkrKykKIAkJCQlwcmludGsoIiUwMngtIiwgKigodTggKilyZXEtPmJ1ZiArIGkpKTsKIAkJCXByaW50aygiPlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IDMxN2I0OGYuLmQyMDkzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0xMzM0LDcgKzEzMzQsNyBAQAogCiAJcXVhbC5iTGVuZ3RoID0gc2l6ZW9mIHF1YWw7CiAJcXVhbC5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjsKLQlxdWFsLmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisJcXVhbC5iY2RVU0IgPSBjcHVfdG9fbGUxNiAoMHgwMjAwKTsKIAogCWRlc2MgPSBkZXYtPmRldjsKIAlxdWFsLmJEZXZpY2VDbGFzcyA9IGRlc2MtPmJEZXZpY2VDbGFzczsKQEAgLTE5MDgsNyArMTkwOCw3IEBACiAJCQl8fCBkZXYtPmRldi0+Yk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCiAJCWdvdG8gZmFpbDsKIAlkZXYtPmRldi0+Yk51bUNvbmZpZ3VyYXRpb25zID0gMTsKLQlkZXYtPmRldi0+YmNkVVNCID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKTsKKwlkZXYtPmRldi0+YmNkVVNCID0gY3B1X3RvX2xlMTYgKDB4MDIwMCk7CiAKIAkvKiB0cmlnZ2VycyBnYWRnZXRmc19iaW5kKCk7IHRoZW4gd2UgY2FuIGVudW1lcmF0ZS4gKi8KIAlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwppbmRleCBkNTU0YjA4Li42Y2QzZDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwpAQCAtNDMyLDggKzQzMiw4IEBACiAJZGV2aWNlX2FkZCgmZGV2LT5nYWRnZXQuZGV2KTsKIAlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJmRldi0+Z2FkZ2V0KTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50aygiJXM6IGJpbmQgdG8gZHJpdmVyICVzIC0tPiBlcnJvciAlZFxuIiwgZGV2LT5nYWRnZXQubmFtZSwKLQkJICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsCisJCSAgICAgICBkZXYtPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOwogCQlkZXZpY2VfZGVsKCZkZXYtPmdhZGdldC5kZXYpOwogCiAJCWRldi0+ZHJpdmVyID0gMDsKQEAgLTQ0NSw4ICs0NDUsOCBAQAogCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCiAJICogTk9URTogIHRoaXMgc2hvdWxkbid0IHBvd2VyIHVwIHVudGlsIGxhdGVyLgogCSAqLwotCXByaW50aygiJXM6IHJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkZXYtPmdhZGdldC5uYW1lLAotCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCisJICAgICAgIGRldi0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJdWRjX2VuYWJsZShkZXYpOwogCkBAIC01ODEsNyArNTgxLDggQEAKIAkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCiAJCQkgKi8KIAkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKLQkJCQlwcmludGsoIiVzIG92ZXJmbG93ICVkXG4iLCBlcC0+ZXAubmFtZSwgY291bnQpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIG92ZXJmbG93ICVkXG4iLAorCQkJCSAgICAgICBlcC0+ZXAubmFtZSwgY291bnQpOwogCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKIAkJfSBlbHNlIHsKIAkJCSpidWYrKyA9IGJ5dGU7CkBAIC04MzEsNyArODMyLDggQEAKIAkJCQkJCSAgICAgICBxdWV1ZSk7CiAKIAkJCQlpZiAoIXJlcSkgewotCQkJCQlwcmludGsoIiVzOiBOVUxMIFJFUSAlZFxuIiwKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAgICAgIiVzOiBOVUxMIFJFUSAlZFxuIiwKIAkJCQkJICAgICAgIF9fZnVuY19fLCBlcF9pZHgpOwogCQkJCQlmbHVzaChlcCk7CiAJCQkJCWJyZWFrOwpAQCAtODQ0LDcgKzg0Niw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBUaHJvdyBwYWNrZXQgYXdheS4uICovCi0JCXByaW50aygiJXM6IE5vIGRlc2NyaXB0b3I/IT9cbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIGRlc2NyaXB0b3I/IT9cbiIsIF9fZnVuY19fKTsKIAkJZmx1c2goZXApOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDEyYzZkODMuLjk0OThiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMTQyLDggKzE0Miw4IEBACiAKICNpbmNsdWRlICJuZXQyMjgwLmgiCiAKLSNkZWZpbmUgdmFsaWRfYml0CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgVkFMSURfQklUKQotI2RlZmluZSBkbWFfZG9uZV9pZQlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpCisjZGVmaW5lIHZhbGlkX2JpdAljcHVfdG9fbGUzMiAoMSA8PCBWQUxJRF9CSVQpCisjZGVmaW5lIGRtYV9kb25lX2llCWNwdV90b19sZTMyICgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQyNSw3ICs0MjUsNyBAQAogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCi0JCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFhZGRyID0gY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOwogCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOwogCQlyZXEtPnRkID0gdGQ7CiAJfQpAQCAtNzc1LDcgKzc3NSw3IEBACiAJZmlsbF9kbWFfZGVzYyAoZXAsIHJlcSwgMSk7CiAKIAlpZiAoIXVzZV9kbWFfY2hhaW5pbmcpCi0JCXJlcS0+dGQtPmRtYWNvdW50IHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRU5EX09GX0NIQUlOKTsKKwkJcmVxLT50ZC0+ZG1hY291bnQgfD0gY3B1X3RvX2xlMzIgKDEgPDwgRU5EX09GX0NIQUlOKTsKIAogCXN0YXJ0X3F1ZXVlIChlcCwgdG1wLCByZXEtPnRkX2RtYSk7CiB9CkBAIC0yNDA3LDkgKzI0MDcsOSBAQAogCiAJCQlpZiAocmVhZGwgKCZlLT5yZWdzLT5lcF9yc3ApCiAJCQkJCSYgKDEgPDwgU0VUX0VORFBPSU5UX0hBTFQpKQotCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQkJCXN0YXR1cyA9IGNwdV90b19sZTMyICgxKTsKIAkJCWVsc2UKLQkJCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCQlzdGF0dXMgPSBjcHVfdG9fbGUzMiAoMCk7CiAKIAkJCS8qIGRvbid0IGJvdGhlciB3aXRoIGEgcmVxdWVzdCBvYmplY3QhICovCiAJCQl3cml0ZWwgKDAsICZkZXYtPmVwcmVncyBbMF0uZXBfaXJxZW5iKTsKQEAgLTI2NjcsNyArMjY2Nyw3IEBACiAJCQkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCiAJCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CiAJCQkJZG1hY291bnQgPSByZXEtPnRkLT5kbWFjb3VudDsKLQkJCQlkbWFjb3VudCAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJCQlkbWFjb3VudCAmPSBjcHVfdG9fbGUzMiAoCiAJCQkJCQkoMSA8PCBWQUxJRF9CSVQpCiAJCQkJCQl8IERNQV9CWVRFX0NPVU5UX01BU0spOwogCQkJCWlmIChkbWFjb3VudCAmJiAoZG1hY291bnQgJiB2YWxpZF9iaXQpID09IDApCkBAIC0yODgxLDcgKzI4ODEsNyBAQAogCQkJZ290byBkb25lOwogCQl9CiAJCXRkLT5kbWFjb3VudCA9IDA7CS8qIG5vdCBWQUxJRCAqLwotCQl0ZC0+ZG1hYWRkciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOworCQl0ZC0+ZG1hYWRkciA9IGNwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKIAkJdGQtPmRtYWRlc2MgPSB0ZC0+ZG1hYWRkcjsKIAkJZGV2LT5lcCBbaV0uZHVtbXkgPSB0ZDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCA1YTMwMzRmLi4yOTUwMDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTIyNSwxMiArMjI1LDEyIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCiAJLmJEZXZpY2VQcm90b2NvbCA9CTAsCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKSwKIAkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCiAJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULAogCS5pU2VyaWFsTnVtYmVyID0JU1RSSU5HX1NFUklBTE5VTSwKQEAgLTI5OSwyMCArMjk5LDIwIEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKQogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lcF9vdXRfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMikKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvciBkZXZfcXVhbGlmaWVyID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUFJJTlRFUiwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMQogfTsKQEAgLTE0MDYsMTYgKzE0MDYsMTYgQEAKIAkJCWdhZGdldC0+bmFtZSk7CiAJCS8qIHVucmVjb2duaXplZCwgYnV0IHNhZmUgdW5sZXNzIGJ1bGsgaXMgUkVBTExZIHF1aXJreSAqLwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweEZGRkYpOworCQkJY3B1X3RvX2xlMTYoMHhGRkZGKTsKIAl9CiAJc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSwgIiVzICVzIHdpdGggJXMiLAogCQlpbml0X3V0c25hbWUoKS0+c3lzbmFtZSwgaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCWdhZGdldC0+bmFtZSk7CiAKIAlkZXZpY2VfZGVzYy5pZFZlbmRvciA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKTsKKwkJY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKTsKIAlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pOworCQljcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKTsKIAogCS8qIHN1cHBvcnQgb3B0aW9uYWwgdmVuZG9yL2Rpc3RybyBjdXN0b21pemF0aW9uICovCiAJaWYgKGlkVmVuZG9yKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCA5OTBmNDBmLi44Y2M2NzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTI3OCw3ICsyNzksNyBAQAogCQlnb3RvIGVycl9xdWV1ZXM7CiAJZXBzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZXBzdGF0ZSIsIDA0MDAsIHJvb3QsIHVkYywKIAkJCSZlcHNfZGJnX2ZvcHMpOwotCWlmICghcXVldWVzKQorCWlmICghZXBzKQogCQlnb3RvIGVycl9lcHM7CiAKIAl1ZGMtPmRlYnVnZnNfcm9vdCA9IHJvb3Q7CkBAIC03NDcsMTMgKzc0OCwxMyBAQAogfQogCiAvKioKLSAqIGVwX2VuZF9vdXRfcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IGluIHJlcXVlc3QKKyAqIGVwX2VuZF9vdXRfcmVxIC0gRW5kcyBlbmRwb2ludCBPVVQgcmVxdWVzdAogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBlbmRwb2ludCBpbiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgorICogRW5kcyBlbmRwb2ludCBPVVQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KS4KICAqLwogc3RhdGljIHZvaWQgZXBfZW5kX291dF9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewpAQCAtNzYyLDEzICs3NjMsMTMgQEAKIH0KIAogLyoqCi0gKiBlcDBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgaW4gcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQorICogZXAwX2VuZF9vdXRfcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IE9VVCByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgaW4gcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKKyAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBPVVQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKICAqIGNvbnRyb2wgZW5kcG9pbnQgaW50byBpZGxlIHN0YXRlCiAgKi8KIHN0YXRpYyB2b2lkIGVwMF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCkBAIC03NzksMTMgKzc4MCwxMyBAQAogfQogCiAvKioKLSAqIGVwX2VuZF9pbl9yZXEgLSBFbmRzIGVuZHBvaW50IG91dCByZXF1ZXN0CisgKiBlcF9lbmRfaW5fcmVxIC0gRW5kcyBlbmRwb2ludCBJTiByZXF1ZXN0CiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGVuZHBvaW50IG91dCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgorICogRW5kcyBlbmRwb2ludCBJTiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgogICovCiBzdGF0aWMgdm9pZCBlcF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKQEAgLTc5NCwyMCArNzk1LDE4IEBACiB9CiAKIC8qKgotICogZXAwX2VuZF9pbl9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgb3V0IHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKKyAqIGVwMF9lbmRfaW5fcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IElOIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBvdXQgcmVxdWVzdCAoY29tcGxldGVzIHVzYiByZXF1ZXN0KSwgYW5kIHB1dHMKKyAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBJTiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cwogICogY29udHJvbCBlbmRwb2ludCBpbnRvIHN0YXR1cyBzdGF0ZQogICovCiBzdGF0aWMgdm9pZCBlcDBfZW5kX2luX3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IHB4YV91ZGMgKnVkYyA9IGVwLT5kZXY7Ci0KLQlzZXRfZXAwc3RhdGUodWRjLCBJTl9TVEFUVVNfU1RBR0UpOworCXNldF9lcDBzdGF0ZShlcC0+ZGV2LCBJTl9TVEFUVVNfU1RBR0UpOwogCWVwX2VuZF9pbl9yZXEoZXAsIHJlcSk7CiB9CiAKQEAgLTExNjcsNyArMTE2Niw3IEBACiAJCQkJZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKIAkJCX0gZWxzZSB7CiAJCQkJZXBfZXJyKGVwLCAiZ290IGEgcmVxdWVzdCBvZiAlZCBieXRlcyB3aGlsZSIKLQkJCQkJImluIHN0YXRlIFdBVElfQUNLX1NFVF9DT05GX0lOVEVSRlxuIiwKKwkJCQkJImluIHN0YXRlIFdBSVRfQUNLX1NFVF9DT05GX0lOVEVSRlxuIiwKIAkJCQkJbGVuZ3RoKTsKIAkJCQllcF9kZWxfcmVxdWVzdChlcCwgcmVxKTsKIAkJCQlyYyA9IC1FTDJITFQ7CkBAIC0xMjEzLDMwICsxMjEyLDI2IEBACiAJc3RydWN0IHVkY191c2JfZXAJKnVkY191c2JfZXA7CiAJc3RydWN0IHB4YTI3eF9yZXF1ZXN0CSpyZXE7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JaW50CQkJcmM7CisJaW50CQkJcmMgPSAtRUlOVkFMOwogCiAJaWYgKCFfZXApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmM7CiAJdWRjX3VzYl9lcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCB1ZGNfdXNiX2VwLCB1c2JfZXApOwogCWVwID0gdWRjX3VzYl9lcC0+cHhhX2VwOwogCWlmICghZXAgfHwgaXNfZXAwKGVwKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwogCiAJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKLQkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpIHsKKwkJCXJlcV9kb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwkJCXJjID0gMDsKIAkJCWJyZWFrOworCQl9CiAJfQogCi0JcmMgPSAtRUlOVkFMOwotCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkKLQkJZ290byBvdXQ7Ci0KLQlyYyA9IDA7Ci0JcmVxX2RvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOwotb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTQ3MSw2ICsxNDY2LDMyIEBACiAJLmZpZm9fZmx1c2gJPSBweGFfZXBfZmlmb19mbHVzaCwKIH07CiAKKy8qKgorICogZHBsdXNfcHVsbHVwIC0gQ29ubmVjdCBvciBkaXNjb25uZWN0IHB1bGx1cCByZXNpc3RvciB0byBEKyBwaW4KKyAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIEBvbjogMCBpZiBkaXNjb25uZWN0IHB1bGx1cCByZXNpc3RvciwgMSBvdGhlcndpc2UKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIEhhbmRsZSBEKyBwdWxsdXAgcmVzaXN0b3IsIG1ha2UgdGhlIGRldmljZSB2aXNpYmxlIHRvIHRoZSB1c2IgYnVzLCBhbmQKKyAqIGRlY2xhcmUgaXQgYXMgYSBmdWxsIHNwZWVkIHVzYiBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZHBsdXNfcHVsbHVwKHN0cnVjdCBweGFfdWRjICp1ZGMsIGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCkpCisJCQlncGlvX3NldF92YWx1ZSh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwLAorCQkJCSAgICAgICAhdWRjLT5tYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZCk7CisJCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQorCQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9DT05ORUNUKTsKKwl9IGVsc2UgeworCQlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXAsCisJCQkJICAgICAgIHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXBfaW52ZXJ0ZWQpOworCQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCk7CisJfQorCXVkYy0+cHVsbHVwX29uID0gb247Cit9CiAKIC8qKgogICogcHhhX3VkY19nZXRfZnJhbWUgLSBSZXR1cm5zIHVzYiBmcmFtZSBudW1iZXIKQEAgLTE1MDAsMjEgKzE1MjEsMTQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CitzdGF0aWMgdm9pZCB1ZGNfZGlzYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKKworLyoqCisgKiBzaG91bGRfZW5hYmxlX3VkYyAtIFRlbGxzIGlmIFVEQyBzaG91bGQgYmUgZW5hYmxlZAorICogQHVkYzogdWRjIGRldmljZQorICogQ29udGV4dDogYW55CisgKgorICogVGhlIFVEQyBzaG91bGQgYmUgZW5hYmxlZCBpZiA6CisKKyAqICAtIHRoZSBwdWxsdXAgcmVzaXN0b3IgaXMgY29ubmVjdGVkCisgKiAgLSBhbmQgYSBnYWRnZXQgZHJpdmVyIGlzIGJvdW5kCisgKiAgLSBhbmQgdmJ1cyBpcyBzZW5zZWQgKG9yIG5vIHZidXMgc2Vuc2UgaXMgYXZhaWxhYmxlKQorICoKKyAqIFJldHVybnMgMSBpZiBVREMgc2hvdWxkIGJlIGVuYWJsZWQsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgc2hvdWxkX2VuYWJsZV91ZGMoc3RydWN0IHB4YV91ZGMgKnVkYykKK3sKKwlpbnQgcHV0X29uOworCisJcHV0X29uID0gKCh1ZGMtPnB1bGx1cF9vbikgJiYgKHVkYy0+ZHJpdmVyKSk7CisJcHV0X29uICY9ICgodWRjLT52YnVzX3NlbnNlZCkgfHwgKCF1ZGMtPnRyYW5zY2VpdmVyKSk7CisJcmV0dXJuIHB1dF9vbjsKK30KKworLyoqCisgKiBzaG91bGRfZGlzYWJsZV91ZGMgLSBUZWxscyBpZiBVREMgc2hvdWxkIGJlIGRpc2FibGVkCisgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBUaGUgVURDIHNob3VsZCBiZSBkaXNhYmxlZCBpZiA6CisgKiAgLSB0aGUgcHVsbHVwIHJlc2lzdG9yIGlzIG5vdCBjb25uZWN0ZWQKKyAqICAtIG9yIG5vIGdhZGdldCBkcml2ZXIgaXMgYm91bmQKKyAqICAtIG9yIG5vIHZidXMgaXMgc2Vuc2VkICh3aGVuIHZidXMgc2VzaW5nIGlzIGF2YWlsYWJsZSkKKyAqCisgKiBSZXR1cm5zIDEgaWYgVURDIHNob3VsZCBiZSBkaXNhYmxlZAorICovCitzdGF0aWMgaW50IHNob3VsZF9kaXNhYmxlX3VkYyhzdHJ1Y3QgcHhhX3VkYyAqdWRjKQoreworCWludCBwdXRfb2ZmOworCisJcHV0X29mZiA9ICgoIXVkYy0+cHVsbHVwX29uKSB8fCAoIXVkYy0+ZHJpdmVyKSk7CisJcHV0X29mZiB8PSAoKCF1ZGMtPnZidXNfc2Vuc2VkKSAmJiAodWRjLT50cmFuc2NlaXZlcikpOworCXJldHVybiBwdXRfb2ZmOworfQorCisvKioKKyAqIHB4YV91ZGNfcHVsbHVwIC0gT2ZmZXIgbWFudWFsIEQrIHB1bGx1cCBjb250cm9sCisgKiBAX2dhZGdldDogdXNiIGdhZGdldCB1c2luZyB0aGUgY29udHJvbAorICogQGlzX2FjdGl2ZTogMCBpZiBkaXNjb25uZWN0LCBlbHNlIGNvbm5lY3QgRCsgcHVsbHVwIHJlc2lzdG9yCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXR1cm5zIDAgaWYgT0ssIC1FT1BOT1RTVVBQIGlmIHVkYyBkcml2ZXIgZG9lc24ndCBoYW5kbGUgRCsgcHVsbHVwCisgKi8KK3N0YXRpYyBpbnQgcHhhX3VkY19wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHRvX2dhZGdldF91ZGMoX2dhZGdldCk7CisKKwlpZiAoIWdwaW9faXNfdmFsaWQodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCkgJiYgIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWRwbHVzX3B1bGx1cCh1ZGMsIGlzX2FjdGl2ZSk7CisKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOworCWlmIChzaG91bGRfZGlzYWJsZV91ZGModWRjKSkKKwkJdWRjX2Rpc2FibGUodWRjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworCisvKioKKyAqIHB4YV91ZGNfdmJ1c19zZXNzaW9uIC0gQ2FsbGVkIGJ5IGV4dGVybmFsIHRyYW5zY2VpdmVyIHRvIGVuYWJsZS9kaXNhYmxlIHVkYworICogQF9nYWRnZXQ6IHVzYiBnYWRnZXQKKyAqIEBpc19hY3RpdmU6IDAgaWYgc2hvdWxkIGRpc2FibGUgdGhlIHVkYywgMSBpZiBzaG91bGQgZW5hYmxlCisgKgorICogRW5hYmxlcyB0aGUgdWRjLCBhbmQgb3B0aW9ubmFseSBhY3RpdmF0ZXMgRCsgcHVsbHVwIHJlc2lzdG9yLiBPciBkaXNhYmxlcyB0aGUKKyAqIHVkYywgYW5kIGRlYWN0aXZhdGVzIEQrIHB1bGx1cCByZXNpc3Rvci4KKyAqCisgKiBSZXR1cm5zIDAKKyAqLworc3RhdGljIGludCBweGFfdWRjX3ZidXNfc2Vzc2lvbihzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gdG9fZ2FkZ2V0X3VkYyhfZ2FkZ2V0KTsKKworCXVkYy0+dmJ1c19zZW5zZWQgPSBpc19hY3RpdmU7CisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKKwlpZiAoc2hvdWxkX2Rpc2FibGVfdWRjKHVkYykpCisJCXVkY19kaXNhYmxlKHVkYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBweGFfdWRjX3ZidXNfZHJhdyAtIENhbGxlZCBieSBnYWRnZXQgZHJpdmVyIGFmdGVyIFNFVF9DT05GSUdVUkFUSU9OIGNvbXBsZXRlZAorICogQF9nYWRnZXQ6IHVzYiBnYWRnZXQKKyAqIEBtQTogY3VycmVudCBkcmF3bgorICoKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIENhbGxlZCBhZnRlciBhIGNvbmZpZ3VyYXRpb24gd2FzIGNob3NlbiBieSBhIFVTQiBob3N0LCB0byBpbmZvcm0gaG93IG11Y2gKKyAqIGN1cnJlbnQgY2FuIGJlIGRyYXduIGJ5IHRoZSBkZXZpY2UgZnJvbSBWQnVzIGxpbmUuCisgKgorICogUmV0dXJucyAwIG9yIC1FT1BOT1RTVVBQIGlmIG5vIHRyYW5zY2VpdmVyIGlzIGhhbmRsaW5nIHRoZSB1ZGMKKyAqLworc3RhdGljIGludCBweGFfdWRjX3ZidXNfZHJhdyhzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgdW5zaWduZWQgbUEpCit7CisJc3RydWN0IHB4YV91ZGMgKnVkYzsKKworCXVkYyA9IHRvX2dhZGdldF91ZGMoX2dhZGdldCk7CisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCXJldHVybiBvdGdfc2V0X3Bvd2VyKHVkYy0+dHJhbnNjZWl2ZXIsIG1BKTsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcHhhX3VkY19vcHMgPSB7CiAJLmdldF9mcmFtZQk9IHB4YV91ZGNfZ2V0X2ZyYW1lLAogCS53YWtldXAJCT0gcHhhX3VkY193YWtldXAsCi0JLyogY3VycmVudCB2ZXJzaW9ucyBtdXN0IGFsd2F5cyBiZSBzZWxmLXBvd2VyZWQgKi8KKwkucHVsbHVwCQk9IHB4YV91ZGNfcHVsbHVwLAorCS52YnVzX3Nlc3Npb24JPSBweGFfdWRjX3ZidXNfc2Vzc2lvbiwKKwkudmJ1c19kcmF3CT0gcHhhX3VkY192YnVzX2RyYXcsCiB9OwogCiAvKioKICAqIHVkY19kaXNhYmxlIC0gZGlzYWJsZSB1ZGMgZGV2aWNlIGNvbnRyb2xsZXIKICAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIENvbnRleHQ6IGFueQogICoKICAqIERpc2FibGVzIHRoZSB1ZGMgZGV2aWNlIDogZGlzYWJsZXMgY2xvY2tzLCB1ZGMgaW50ZXJydXB0cywgY29udHJvbCBlbmRwb2ludAogICogaW50ZXJydXB0cy4KICAqLwogc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YV91ZGMgKnVkYykKIHsKKwlpZiAoIXVkYy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjAsIDApOwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IxLCAwKTsKIApAQCAtMTUyMyw4ICsxNjY4LDggQEAKIAogCWVwMF9pZGxlKHVkYyk7CiAJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKLQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKLQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUKTsKKworCXVkYy0+ZW5hYmxlZCA9IDA7CiB9CiAKIC8qKgpAQCAtMTU1NSwxMCArMTcwMCw5IEBACiAJfQogCiAJLyogVVNCIGVuZHBvaW50cyBpbml0ICovCi0JZm9yIChpID0gMDsgaSA8IE5SX1VTQl9FTkRQT0lOVFM7IGkrKykKLQkJaWYgKGkgIT0gMCkKLQkJCWxpc3RfYWRkX3RhaWwoJmRldi0+dWRjX3VzYl9lcFtpXS51c2JfZXAuZXBfbGlzdCwKLQkJCQkJJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWZvciAoaSA9IDE7IGkgPCBOUl9VU0JfRU5EUE9JTlRTOyBpKyspCisJCWxpc3RfYWRkX3RhaWwoJmRldi0+dWRjX3VzYl9lcFtpXS51c2JfZXAuZXBfbGlzdCwKKwkJCQkmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CiB9CiAKIC8qKgpAQCAtMTU3MCw2ICsxNzE0LDkgQEAKICAqLwogc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKQogeworCWlmICh1ZGMtPmVuYWJsZWQpCisJCXJldHVybjsKKwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IwLCAwKTsKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMSwgMCk7CiAJdWRjX2NsZWFyX21hc2tfVURDQ1IodWRjLCBVRENDUl9VREUpOwpAQCAtMTU5OCw5ICsxNzQ1LDcgQEAKIAkvKiBlbmFibGUgZXAwIGlycXMgKi8KIAlwaW9faXJxX2VuYWJsZSgmdWRjLT5weGFfZXBbMF0pOwogCi0JZGV2X2luZm8odWRjLT5kZXYsICJVREMgY29ubmVjdGluZ1xuIik7Ci0JaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCi0JCXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfQ09OTkVDVCk7CisJdWRjLT5lbmFibGVkID0gMTsKIH0KIAogLyoqCkBAIC0xNjEyLDYgKzE3NTcsOSBAQAogICogdXNiIHRyYWZmaWMgZm9sbG93cyB1bnRpbCBhIGRpc2Nvbm5lY3QgaXMgcmVwb3J0ZWQuICBUaGVuIGEgaG9zdCBtYXkgY29ubmVjdAogICogYWdhaW4sIG9yIHRoZSBkcml2ZXIgbWlnaHQgZ2V0IHVuYm91bmQuCiAgKgorICogTm90ZSB0aGF0IHRoZSB1ZGMgaXMgbm90IGF1dG9tYXRpY2FsbHkgZW5hYmxlZC4gQ2hlY2sgZnVuY3Rpb24KKyAqIHNob3VsZF9lbmFibGVfdWRjKCkuCisgKgogICogUmV0dXJucyAwIGlmIG5vIGVycm9yLCAtRUlOVkFMLCAtRU5PREVWLCAtRUJVU1kgb3RoZXJ3aXNlCiAgKi8KIGludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKQEAgLTE2MzAsNiArMTc3OCw3IEBACiAJLyogZmlyc3QgaG9vayB1cCB0aGUgZHJpdmVyIC4uLiAqLwogCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJZHBsdXNfcHVsbHVwKHVkYywgMSk7CiAKIAlyZXR2YWwgPSBkZXZpY2VfYWRkKCZ1ZGMtPmdhZGdldC5kZXYpOwogCWlmIChyZXR2YWwpIHsKQEAgLTE2NDUsOSArMTc5NCwyMSBAQAogCWRldl9kYmcodWRjLT5kZXYsICJyZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKIAkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKLQl1ZGNfZW5hYmxlKHVkYyk7CisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpIHsKKwkJcmV0dmFsID0gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsICZ1ZGMtPmdhZGdldCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIodWRjLT5kZXYsICJjYW4ndCBiaW5kIHRvIHRyYW5zY2VpdmVyXG4iKTsKKwkJCWdvdG8gdHJhbnNjZWl2ZXJfZmFpbDsKKwkJfQorCX0KKworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CiAJcmV0dXJuIDA7CiAKK3RyYW5zY2VpdmVyX2ZhaWw6CisJaWYgKGRyaXZlci0+dW5iaW5kKQorCQlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOwogYmluZF9mYWlsOgogCWRldmljZV9kZWwoJnVkYy0+Z2FkZ2V0LmRldik7CiBhZGRfZmFpbDoKQEAgLTE2OTksMTQgKzE4NjAsMTcgQEAKIAogCXN0b3BfYWN0aXZpdHkodWRjLCBkcml2ZXIpOwogCXVkY19kaXNhYmxlKHVkYyk7CisJZHBsdXNfcHVsbHVwKHVkYywgMCk7CiAKIAlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOwogCXVkYy0+ZHJpdmVyID0gTlVMTDsKIAogCWRldmljZV9kZWwoJnVkYy0+Z2FkZ2V0LmRldik7Ci0KIAlkZXZfaW5mbyh1ZGMtPmRldiwgInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsCiAJCSBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlyZXR1cm4gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsIE5VTEwpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE4MjMsMTQgKzE5ODcsMTQgQEAKIAlzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QJKnJlcSA9IE5VTEw7CiAJaW50CQkJY29tcGxldGVkID0gMDsKIAorCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0LCBxdWV1ZSk7CisKIAl1ZGNjc3IwID0gdWRjX2VwX3JlYWRsKGVwLCBVRENDU1IpOwogCWVwX2RiZyhlcCwgInN0YXRlPSVzLCByZXE9JXAsIHVkY2NzcjA9MHglMDN4LCB1ZGNiY3I9JWQsIGlycV9tc2s9JXhcbiIsCiAJCUVQMF9TVE5BTUUodWRjKSwgcmVxLCB1ZGNjc3IwLCB1ZGNfZXBfcmVhZGwoZXAsIFVEQ0JDUiksCiAJCShmaWZvX2lycSA8PCAxIHwgb3BjX2lycSkpOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQotCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QsIHF1ZXVlKTsKLQogCWlmICh1ZGNjc3IwICYgVURDQ1NSMF9TU1QpIHsKIAkJZXBfZGJnKGVwLCAiY2xlYXJpbmcgc3RhbGwgc3RhdHVzXG4iKTsKIAkJbnVrZShlcCwgLUVQSVBFKTsKQEAgLTIyMTIsNyArMjM3Niw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlICpyZWdzOwogCXN0cnVjdCBweGFfdWRjICp1ZGMgPSAmbWVtb3J5OwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDAsIGdwaW87CiAKIAlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlZ3MpCkBAIC0yMjIzLDYgKzIzODcsMjAgQEAKIAogCXVkYy0+ZGV2ID0gJnBkZXYtPmRldjsKIAl1ZGMtPm1hY2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1ZGMtPnRyYW5zY2VpdmVyID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCisJZ3BpbyA9IHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXA7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKKwkJcmV0dmFsID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJVU0IgRCsgcHVsbHVwIik7CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLAorCQkJCSAgICAgICB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkKTsKKwl9CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCByZXF1ZXN0IGdwaW8gJWQgOiAlZFxuIiwKKwkJCWdwaW8sIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJdWRjLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIodWRjLT5jbGspKSB7CkBAIC0yMjQwLDYgKzI0MTgsNyBAQAogCWRldmljZV9pbml0aWFsaXplKCZ1ZGMtPmdhZGdldC5kZXYpOwogCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCXVkYy0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IE5VTEw7CisJdWRjLT52YnVzX3NlbnNlZCA9IDA7CiAKIAl0aGVfY29udHJvbGxlciA9IHVkYzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB1ZGMpOwpAQCAtMjI3MywxNCArMjQ1MiwyMSBAQAogc3RhdGljIGludCBfX2V4aXQgcHhhX3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoX2Rldik7CisJaW50IGdwaW8gPSB1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwOwogCiAJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcih1ZGMtPmRyaXZlcik7CiAJZnJlZV9pcnEodWRjLT5pcnEsIHVkYyk7CiAJcHhhX2NsZWFudXBfZGVidWdmcyh1ZGMpOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW8pKQorCQlncGlvX2ZyZWUoZ3Bpbyk7CiAKKwlvdGdfcHV0X3RyYW5zY2VpdmVyKHVkYy0+dHJhbnNjZWl2ZXIpOworCisJdWRjLT50cmFuc2NlaXZlciA9IE5VTEw7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCWNsa19wdXQodWRjLT5jbGspOworCWlvdW5tYXAodWRjLT5yZWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMxOSw2ICsyNTA1LDggQEAKIAl9CiAKIAl1ZGNfZGlzYWJsZSh1ZGMpOworCXVkYy0+cHVsbHVwX3Jlc3VtZSA9IHVkYy0+cHVsbHVwX29uOworCWRwbHVzX3B1bGx1cCh1ZGMsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQ2LDcgKzI1MzQsOSBAQAogCQkJCWVwLT51ZGNjc3JfdmFsdWUsIGVwLT51ZGNjcl92YWx1ZSk7CiAJfQogCi0JdWRjX2VuYWJsZSh1ZGMpOworCWRwbHVzX3B1bGx1cCh1ZGMsIHVkYy0+cHVsbHVwX3Jlc3VtZSk7CisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKIAkvKgogCSAqIFdlIGRvIG5vdCBoYW5kbGUgT1RHIHlldC4KIAkgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKaW5kZXggMWQxYjc5MzYuLmRiNTgxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KIAogLyoKICAqIFJlZ2lzdGVyIGRlZmluaXRpb25zCkBAIC00MjEsMTAgKzQyMiwxNCBAQAogICogQGRyaXZlcjogYm91bmQgZ2FkZ2V0ICh6ZXJvLCBnX2V0aGVyLCBnX2ZpbGVfc3RvcmFnZSwgLi4uKQogICogQGRldjogZGV2aWNlCiAgKiBAbWFjaDogbWFjaGluZSBpbmZvLCB1c2VkIHRvIGFjdGl2YXRlIHNwZWNpZmljIEdQSU8KKyAqIEB0cmFuc2NlaXZlcjogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgdG8gaGFuZGxlIHZidXMgc2Vuc2UgYW5kIEQrIHB1bGx1cAogICogQGVwMHN0YXRlOiBjb250cm9sIGVuZHBvaW50IHN0YXRlIG1hY2hpbmUgc3RhdGUKICAqIEBzdGF0czogc3RhdGlzdGljcyBvbiB1ZGMgdXNhZ2UKICAqIEB1ZGNfdXNiX2VwOiBhcnJheSBvZiB1c2IgZW5kcG9pbnRzIG9mZmVyZWQgYnkgdGhlIGdhZGdldAogICogQHB4YV9lcDogYXJyYXkgb2YgcHhhIGF2YWlsYWJsZSBlbmRwb2ludHMKKyAqIEBlbmFibGVkOiBVREMgd2FzIGVuYWJsZWQgYnkgYSBwcmV2aW91cyB1ZGNfZW5hYmxlKCkKKyAqIEBwdWxsdXBfb246IGlmIHB1bGx1cCByZXNpc3RvciBjb25uZWN0ZWQgdG8gRCsgcGluCisgKiBAcHVsbHVwX3Jlc3VtZTogaWYgcHVsbHVwIHJlc2lzdG9yIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gRCsgcGluIG9uIHJlc3VtZQogICogQGNvbmZpZzogVURDIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAgKiBAbGFzdF9pbnRlcmZhY2U6IFVEQyBpbnRlcmZhY2Ugb2YgdGhlIGxhc3QgU0VUX0lOVEVSRkFDRSBob3N0IHJlcXVlc3QKICAqIEBsYXN0X2FsdGVybmF0ZTogVURDIGFsdHNldHRpbmcgb2YgdGhlIGxhc3QgU0VUX0lOVEVSRkFDRSBob3N0IHJlcXVlc3QKQEAgLTQ0Myw2ICs0NDgsNyBAQAogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkJKmRyaXZlcjsKIAlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CiAJc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvCQkqbWFjaDsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCQkJKnRyYW5zY2VpdmVyOwogCiAJZW51bSBlcDBfc3RhdGUJCQkJZXAwc3RhdGU7CiAJc3RydWN0IHVkY19zdGF0cwkJCXN0YXRzOwpAQCAtNDUwLDYgKzQ1NiwxMCBAQAogCXN0cnVjdCB1ZGNfdXNiX2VwCQkJdWRjX3VzYl9lcFtOUl9VU0JfRU5EUE9JTlRTXTsKIAlzdHJ1Y3QgcHhhX2VwCQkJCXB4YV9lcFtOUl9QWEFfRU5EUE9JTlRTXTsKIAorCXVuc2lnbmVkCQkJCWVuYWJsZWQ6MTsKKwl1bnNpZ25lZAkJCQlwdWxsdXBfb246MTsKKwl1bnNpZ25lZAkJCQlwdWxsdXBfcmVzdW1lOjE7CisJdW5zaWduZWQJCQkJdmJ1c19zZW5zZWQ6MTsKIAl1bnNpZ25lZAkJCQljb25maWc6MjsKIAl1bnNpZ25lZAkJCQlsYXN0X2ludGVyZmFjZTozOwogCXVuc2lnbmVkCQkJCWxhc3RfYWx0ZXJuYXRlOjM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCmluZGV4IDhjMjZmNWUuLjJiNDY2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgcm5kaXNfcGFyYW1zIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtSTkRJU19NQVhfQ09ORklHU107CiAKIC8qIERyaXZlciBWZXJzaW9uICovCi1zdGF0aWMgY29uc3QgX19sZTMyIHJuZGlzX2RyaXZlcl92ZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CitzdGF0aWMgY29uc3QgX19sZTMyIHJuZGlzX2RyaXZlcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIgKDEpOwogCiAvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCiBzdGF0aWMgcm5kaXNfcmVzcF90ICpybmRpc19hZGRfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTMyIGxlbmd0aCk7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAlpbnQJCQlpLCBjb3VudDsKIAlybmRpc19xdWVyeV9jbXBsdF90eXBlCSpyZXNwOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJKnN0YXRzOworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCSpzdGF0czsKIAogCWlmICghcikgcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKQEAgLTE5MCwxMyArMTkwLDEwIEBACiAKIAkvKiByZXNwb25zZSBnb2VzIGhlcmUsIHJpZ2h0IGFmdGVyIHRoZSBoZWFkZXIgKi8KIAlvdXRidWYgPSAoX19sZTMyICopICZyZXNwWzFdOwotCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDE2KTsKIAogCW5ldCA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zW2NvbmZpZ05yXS5kZXY7Ci0JaWYgKG5ldC0+Z2V0X3N0YXRzKQotCQlzdGF0cyA9IG5ldC0+Z2V0X3N0YXRzKG5ldCk7Ci0JZWxzZQotCQlzdGF0cyA9IE5VTEw7CisJc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKG5ldCk7CiAKIAlzd2l0Y2ggKE9JRCkgewogCkBAIC0yMjEsNyArMjE4LDcgQEAKIAkJICogcmVkZGl0ZSBlcmdvIHF1YWUgc3VudCBDYWVzYXJpcyBDYWVzYXJpCiAJCSAqIGV0IHF1YWUgc3VudCBEZWkgRGVvIQogCQkgKi8KLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMjU2LDcgKzI1Myw3IEBACiAJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTElOS19TUEVFRFxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQogCQkJCT09IE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVEKQotCQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJZWxzZQogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgKIAkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnNwZWVkKTsKQEAgLTMxNyw3ICszMTQsNyBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU6CiAJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUk5ESVNfTUFYX1RPVEFMX1NJWkUpOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoUk5ESVNfTUFYX1RPVEFMX1NJWkUpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMzMyLDcgKzMyOSw3IEBACiAKIAljYXNlIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTM0Miw3ICszMzksNyBAQAogCSAqLwogCWNhc2UgT0lEX0dFTl9NQUNfT1BUSU9OUzoJCS8qIGZyb20gV2luTUUgKi8KIAkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoCiAJCQkgIE5ESVNfTUFDX09QVElPTl9SRUNFSVZFX1NFUklBTElaRUQKIAkJCXwgTkRJU19NQUNfT1BUSU9OX0ZVTExfRFVQTEVYKTsKIAkJcmV0dmFsID0gMDsKQEAgLTQzMSw3ICs0MjgsNyBAQAogCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NVUxUSUNBU1RfTElTVFxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4RTAwMDAwMDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDB4RTAwMDAwMDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtNDM5LDcgKzQzNiw3IEBACiAJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC00NjEsMTQgKzQ1OCwxNCBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTjoKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUzoKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlNcbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtNTcyLDI0ICs1NjksMjQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19pbml0X2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyICgKIAkJCVJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICg1Mik7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICg1Mik7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KLQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JcmVzcC0+TWFqb3JWZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfTUFKT1JfVkVSU0lPTik7Ci0JcmVzcC0+TWlub3JWZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfTUlOT1JfVkVSU0lPTik7Ci0JcmVzcC0+RGV2aWNlRmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19ERl9DT05ORUNUSU9OTEVTUyk7Ci0JcmVzcC0+TWVkaXVtID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfTUVESVVNXzgwMl8zKTsKLQlyZXNwLT5NYXhQYWNrZXRzUGVyVHJhbnNmZXIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPk1ham9yVmVyc2lvbiA9IGNwdV90b19sZTMyIChSTkRJU19NQUpPUl9WRVJTSU9OKTsKKwlyZXNwLT5NaW5vclZlcnNpb24gPSBjcHVfdG9fbGUzMiAoUk5ESVNfTUlOT1JfVkVSU0lPTik7CisJcmVzcC0+RGV2aWNlRmxhZ3MgPSBjcHVfdG9fbGUzMiAoUk5ESVNfREZfQ09OTkVDVElPTkxFU1MpOworCXJlc3AtPk1lZGl1bSA9IGNwdV90b19sZTMyIChSTkRJU19NRURJVU1fODAyXzMpOworCXJlc3AtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IGNwdV90b19sZTMyICgxKTsKIAlyZXNwLT5NYXhUcmFuc2ZlclNpemUgPSBjcHVfdG9fbGUzMiAoCiAJCSAgcGFyYW1zLT5kZXYtPm10dQogCQkrIHNpemVvZiAoc3RydWN0IGV0aGhkcikKIAkJKyBzaXplb2YgKHN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUpCiAJCSsgMjIpOwotCXJlc3AtPlBhY2tldEFsaWdubWVudEZhY3RvciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCXJlc3AtPkFGTGlzdE9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCXJlc3AtPkFGTGlzdFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwlyZXNwLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSBjcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0T2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPkFGTGlzdFNpemUgPSBjcHVfdG9fbGUzMiAoMCk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTYxNyw3ICs2MTQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCiAKIAlpZiAoZ2VuX25kaXNfcXVlcnlfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksCkBAIC02MjYsMTMgKzYyMywxMyBAQAogCQkJbGUzMl90b19jcHUoYnVmLT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCksCiAJCQlyKSkgewogCQkvKiBPSUQgbm90IHN1cHBvcnRlZCAqLwotCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKAogCQkJCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKLQkJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKHNpemVvZiAqcmVzcCk7Ci0JCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7Ci0JCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoc2l6ZW9mICpyZXNwKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPSBjcHVfdG9fbGUzMiAoMCk7CisJCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDApOwogCX0gZWxzZQotCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTY2NSwxNCArNjYyLDE0IEBACiAJcHJfZGVidWcoIlxuIik7CiAjZW5kaWYKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfU0VUX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgxNik7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KIAlpZiAoZ2VuX25kaXNfc2V0X3Jlc3AgKGNvbmZpZ05yLCBsZTMyX3RvX2NwdSAoYnVmLT5PSUQpLAogCQkJKCh1OCAqKSBidWYpICsgOCArIEJ1Zk9mZnNldCwgQnVmTGVuZ3RoLCByKSkKLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOworCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOwogCWVsc2UKLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC02ODksMTEgKzY4NiwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX3Jlc2V0X2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKLQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAJLyogcmVzZW50IGluZm9ybWF0aW9uICovCi0JcmVzcC0+QWRkcmVzc2luZ1Jlc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJcmVzcC0+QWRkcmVzc2luZ1Jlc2V0ID0gY3B1X3RvX2xlMzIgKDEpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC03MTMsMTEgKzcxMCwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX2tlZXBhbGl2ZV9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoCiAJCQlSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgxNik7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KLQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNzQyLDEyICs3MzksMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyICgKIAkJCVJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgyMCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgyMCk7CiAJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKHN0YXR1cyk7Ci0JcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7Ci0JcmVzcC0+U3RhdHVzQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPlN0YXR1c0J1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgwKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtOTYzLDkgKzk2MCw5IEBACiAJCXJldHVybjsKIAloZWFkZXIgPSAodm9pZCAqKSBza2JfcHVzaCAoc2tiLCBzaXplb2YgKmhlYWRlcik7CiAJbWVtc2V0IChoZWFkZXIsIDAsIHNpemVvZiAqaGVhZGVyKTsKLQloZWFkZXItPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihSRU1PVEVfTkRJU19QQUNLRVRfTVNHKTsKKwloZWFkZXItPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRyk7CiAJaGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCWhlYWRlci0+RGF0YU9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDM2KTsKKwloZWFkZXItPkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMzYpOwogCWhlYWRlci0+RGF0YUxlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuIC0gc2l6ZW9mICpoZWFkZXIpOwogfQogCkBAIC0xMDI5LDcgKzEwMjYsNyBAQAogCV9fbGUzMgkJKnRtcCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAogCS8qIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGVuZ3RoICovCi0JaWYgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRykKKwlpZiAoY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRykKIAkJCSE9IGdldF91bmFsaWduZWQodG1wKyspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl0bXArKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwppbmRleCAzNzg3OWFmLi5mNDZhNjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCkBAIC04NywxMiArODcsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLyogLmJEZXZpY2VDbGFzcyA9IGYodXNlX2FjbSkgKi8KIAkuYkRldmljZVN1YkNsYXNzID0JMCwKIAkuYkRldmljZVByb3RvY29sID0JMCwKIAkvKiAuYk1heFBhY2tldFNpemUwID0gZihoYXJkd2FyZSkgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRU5ET1JfSUQpLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihHU19WRU5ET1JfSUQpLAogCS8qIC5pZFByb2R1Y3QgPQlmKHVzZV9hY20pICovCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJcHJfd2FybmluZygiZ3NfYmluZDogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAogCQkJZ2FkZ2V0LT5uYW1lKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU0gfCAweDAwOTkpOwogCX0KIAogCWlmIChnYWRnZXRfaXNfb3RnKGNkZXYtPmdhZGdldCkpIHsKQEAgLTI1NSwxOSArMjU1LDE5IEBACiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAyOwogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQ09NTTsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19QUk9EVUNUX0lEKTsKKwkJCQljcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIGlmICh1c2Vfb2JleCkgewogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgT0JFWCBjb25maWciOwogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMzsKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOworCQkJY3B1X3RvX2xlMTYoR1NfQ0RDX09CRVhfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIHsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiR2VuZXJpYyBTZXJpYWwgY29uZmlnIjsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDE7CiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOworCQkJCWNwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpOwogCX0KIAlzdHJpbmdzX2RldltTVFJJTkdfREVTQ1JJUFRJT05fSURYXS5zID0gc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKaW5kZXggNTNkNTkyOC4uMGE0ZDk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMKQEAgLTEwOTIsNyArMTA5Miw3IEBACiAJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKIAlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwOwogCi0JY29kaW5nLmR3RFRFUmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOTYwMCk7CisJY29kaW5nLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKDk2MDApOwogCWNvZGluZy5iQ2hhckZvcm1hdCA9IDg7CiAJY29kaW5nLmJQYXJpdHlUeXBlID0gVVNCX0NEQ19OT19QQVJJVFk7CiAJY29kaW5nLmJEYXRhQml0cyA9IFVTQl9DRENfMV9TVE9QX0JJVFM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCAzNjFkOTY1Li4yZDc3MjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTEwMiwyMiArMTAyLDMyIEBACiAjaWZuZGVmCUNPTkZJR19VU0JfWkVST19ITlBURVNUCiAjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MDUyNQkJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhhNGEwCQkvKiBMaW51eC1VU0IgIkdhZGdldCBaZXJvIiAqLworI2RlZmluZSBERUZBVUxUX0FVVE9SRVNVTUUJMAogI2Vsc2UKICNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgxYTBhCQkvKiBPVEcgdGVzdCBkZXZpY2UgSURzICovCiAjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGJhZGQKKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVTVU1FCTUKICNlbmRpZgogCisvKiBJZiB0aGUgb3B0aW9uYWwgImF1dG9yZXN1bWUiIG1vZGUgaXMgZW5hYmxlZCwgaXQgcHJvdmlkZXMgZ29vZAorICogZnVuY3Rpb25hbCBjb3ZlcmFnZSBmb3IgdGhlICJVU0JDViIgdGVzdCBoYXJuZXNzIGZyb20gVVNCLUlGLgorICogSXQncyBhbHdheXMgc2V0IGlmIE9URyBtb2RlIGlzIGVuYWJsZWQuCisgKi8KK3Vuc2lnbmVkIGF1dG9yZXN1bWUgPSBERUZBVUxUX0FVVE9SRVNVTUU7Cittb2R1bGVfcGFyYW0oYXV0b3Jlc3VtZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9yZXN1bWUsICJ6ZXJvLCBvciBzZWNvbmRzIGJlZm9yZSByZW1vdGUgd2FrZXVwIik7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19WRU5ET1JfU1BFQywKIAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMiwKIH07CiAKQEAgLTIxMiw2ICsyMjIsNDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0CWF1dG9yZXN1bWVfdGltZXI7CisKK3N0YXRpYyB2b2lkIHplcm9fYXV0b3Jlc3VtZSh1bnNpZ25lZCBsb25nIF9jKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9ICh2b2lkICopX2M7CisJc3RydWN0IHVzYl9nYWRnZXQJCSpnID0gY2Rldi0+Z2FkZ2V0OworCisJLyogdW5jb25maWd1cmVkIGRldmljZXMgY2FuJ3QgaXNzdWUgd2FrZXVwcyAqLworCWlmICghY2Rldi0+Y29uZmlnKQorCQlyZXR1cm47CisKKwkvKiBOb3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCisJICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmc7IGxpa2VseQorCSAqIGJlY2F1c2Ugb2Ygc29tZSBkaXJlY3QgdXNlciByZXF1ZXN0LgorCSAqLworCWlmIChnLT5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgeworCQlpbnQgc3RhdHVzID0gdXNiX2dhZGdldF93YWtldXAoZyk7CisJCUlORk8oY2RldiwgIiVzIC0tPiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB6ZXJvX3N1c3BlbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWlmIChjZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm47CisKKwlpZiAoYXV0b3Jlc3VtZSkgeworCQltb2RfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7CisJCURCRyhjZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOworCX0gZWxzZQorCQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIHplcm9fcmVzdW1lKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGVsX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIGludCBfX2luaXQgemVyb19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpbnQJCQlnY251bTsKQEAgLTIzOSwxNyArMjkwLDE5IEBACiAJc3RyaW5nc19kZXZbU1RSSU5HX1NFUklBTF9JRFhdLmlkID0gaWQ7CiAJZGV2aWNlX2Rlc2MuaVNlcmlhbE51bWJlciA9IGlkOwogCisJc2V0dXBfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIsIHplcm9fYXV0b3Jlc3VtZSwgKHVuc2lnbmVkIGxvbmcpIGNkZXYpOworCiAJLyogUmVnaXN0ZXIgcHJpbWFyeSwgdGhlbiBzZWNvbmRhcnkgY29uZmlndXJhdGlvbi4gIE5vdGUgdGhhdAogCSAqIFNIMyBvbmx5IGFsbG93cyBvbmUgY29uZmlnLi4uCiAJICovCiAJaWYgKGxvb3BkZWZhdWx0KSB7Ci0JCWxvb3BiYWNrX2FkZChjZGV2KTsKKwkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCi0JCQlzb3VyY2VzaW5rX2FkZChjZGV2KTsKKwkJCXNvdXJjZXNpbmtfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJfSBlbHNlIHsKLQkJc291cmNlc2lua19hZGQoY2Rldik7CisJCXNvdXJjZXNpbmtfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJCWlmICghZ2FkZ2V0X2lzX3NoKGdhZGdldCkpCi0JCQlsb29wYmFja19hZGQoY2Rldik7CisJCQlsb29wYmFja19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAl9CiAKIAlnY251bSA9IHVzYl9nYWRnZXRfY29udHJvbGxlcl9udW1iZXIoZ2FkZ2V0KTsKQEAgLTI2NSw3ICszMTgsNyBAQAogCQkgKi8KIAkJcHJfd2FybmluZygiJXM6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCWxvbmduYW1lLCBnYWRnZXQtPm5hbWUpOwotCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4OTk5OSk7CiAJfQogCiAKQEAgLTI3OCwxMSArMzMxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgemVyb191bmJpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZhdXRvcmVzdW1lX3RpbWVyKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciB6ZXJvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiemVybyIsCiAJLmRldgkJPSAmZGV2aWNlX2Rlc2MsCiAJLnN0cmluZ3MJPSBkZXZfc3RyaW5ncywKIAkuYmluZAkJPSB6ZXJvX2JpbmQsCisJLnVuYmluZAkJPSB6ZXJvX3VuYmluZCwKKwkuc3VzcGVuZAk9IHplcm9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHplcm9fcmVzdW1lLAogfTsKIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyYzYzYmZiLi44NDU0NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0yNCwxMCArMjQsNyBAQAogCSAgVGhlIEVuaGFuY2VkIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKEVIQ0kpIGlzIHN0YW5kYXJkIGZvciBVU0IgMi4wCiAJICAiaGlnaCBzcGVlZCIgKDQ4MCBNYml0L3NlYywgNjAgTWJ5dGUvc2VjKSBob3N0IGNvbnRyb2xsZXIgaGFyZHdhcmUuCiAJICBJZiB5b3VyIFVTQiBob3N0IGNvbnRyb2xsZXIgc3VwcG9ydHMgVVNCIDIuMCwgeW91IHdpbGwgbGlrZWx5IHdhbnQgdG8KLQkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIAotCSAgdGhlIHByaW1hcnkgaW1wbGVtZW50YXRpb24gb2YgRUhDSSBpcyBhIGNoaXAgZnJvbSBORUMsIHdpZGVseSBhdmFpbGFibGUKLQkgIGluIGFkZC1vbiBQQ0kgY2FyZHMsIGJ1dCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIHRoZSB3b3JrcyBmcm9tIG90aGVyIAotCSAgdmVuZG9ycyBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KKwkgIGNvbmZpZ3VyZSB0aGlzIEhvc3QgQ29udHJvbGxlciBEcml2ZXIuCiAKIAkgIEVIQ0kgY29udHJvbGxlcnMgYXJlIHBhY2thZ2VkIHdpdGggImNvbXBhbmlvbiIgaG9zdCBjb250cm9sbGVycyAoT0hDSQogCSAgb3IgVUhDSSkgdG8gaGFuZGxlIFVTQiAxLjEgZGV2aWNlcyBjb25uZWN0ZWQgdG8gcm9vdCBodWIgcG9ydHMuICBQb3J0cwpAQCAtMTIzLDcgKzEyMCw3IEBACiAKIGNvbmZpZyBVU0JfSVNQMTc2MF9IQ0QKIAl0cmlzdGF0ZSAiSVNQIDE3NjAgSENEIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMICYmIChQQ0kgfHwgUFBDX09GKQorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFRoZSBJU1AxNzYwIGNoaXAgaXMgYSBVU0IgMi4wIGhvc3QgY29udHJvbGxlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IGU1NTFiYjMuLmYyNjE4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTExMCw2ICsxMTAsNDIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQKK3RpbWVyX2FjdGlvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGVudW0gZWhjaV90aW1lcl9hY3Rpb24gYWN0aW9uKQoreworCS8qIERvbid0IG92ZXJyaWRlIHRpbWVvdXRzIHdoaWNoIHNocmluayBvciAobGF0ZXIpIGRpc2FibGUKKwkgKiB0aGUgYXN5bmMgcmluZzsganVzdCB0aGUgSS9PIHdhdGNoZG9nLiAgTm90ZSB0aGF0IGlmIGEKKwkgKiBTSFJJTksgd2VyZSBwZW5kaW5nLCBPRkYgd291bGQgbmV2ZXIgYmUgcmVxdWVzdGVkLgorCSAqLworCWlmICh0aW1lcl9wZW5kaW5nKCZlaGNpLT53YXRjaGRvZykKKwkJCSYmICgoQklUKFRJTUVSX0FTWU5DX1NIUklOSykgfCBCSVQoVElNRVJfQVNZTkNfT0ZGKSkKKwkJCQkmIGVoY2ktPmFjdGlvbnMpKQorCQlyZXR1cm47CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucykpIHsKKwkJdW5zaWduZWQgbG9uZyB0OworCisJCXN3aXRjaCAoYWN0aW9uKSB7CisJCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6CisJCQl0ID0gRUhDSV9JT19KSUZGSUVTOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgorCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKKwkJCWJyZWFrOworCQkvKiBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzogKi8KKwkJZGVmYXVsdDoKKwkJCS8qIGFkZCBhIGppZmZpZSBzaW5jZSB3ZSBzeW5jaCBhZ2FpbnN0IHRoZQorCQkJICogOCBLSHogdWZyYW1lIGNvdW50ZXIuCisJCQkgKi8KKwkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKKwkJCWJyZWFrOworCQl9CisJCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qCiAgKiBoYW5kc2hha2UgLSBzcGluIHJlYWRpbmcgaGMgdW50aWwgaGFuZHNoYWtlIGNvbXBsZXRlcyBvciBmYWlscwogICogQHB0cjogYWRkcmVzcyBvZiBoYyByZWdpc3RlciB0byBiZSByZWFkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwppbmRleCAzNzEyYjkyLi4xOTc2YjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKQEAgLTMzMywxMiArMzMzLDQwIEBACiAJCXRva2VuID0gaGMzMl90b19jcHUoZWhjaSwgcXRkLT5od190b2tlbik7CiAKIAkJLyogYWx3YXlzIGNsZWFuIHVwIHF0ZHMgdGhlIGhjIGRlLWFjdGl2YXRlZCAqLworIHJldHJ5X3hhY3RlcnI6CiAJCWlmICgodG9rZW4gJiBRVERfU1RTX0FDVElWRSkgPT0gMCkgewogCiAJCQkvKiBvbiBTVEFMTCwgZXJyb3IsIGFuZCBzaG9ydCByZWFkcyB0aGlzIHVyYiBtdXN0CiAJCQkgKiBjb21wbGV0ZSBhbmQgYWxsIGl0cyBxdGRzIG11c3QgYmUgcmVjeWNsZWQuCiAJCQkgKi8KIAkJCWlmICgodG9rZW4gJiBRVERfU1RTX0hBTFQpICE9IDApIHsKKworCQkJCS8qIHJldHJ5IHRyYW5zYWN0aW9uIGVycm9ycyB1bnRpbCB3ZQorCQkJCSAqIHJlYWNoIHRoZSBzb2Z0d2FyZSB4YWN0ZXJyIGxpbWl0CisJCQkJICovCisJCQkJaWYgKCh0b2tlbiAmIFFURF9TVFNfWEFDVCkgJiYKKwkJCQkJCVFURF9DRVJSKHRva2VuKSA9PSAwICYmCisJCQkJCQktLXFoLT54YWN0ZXJycyA+IDAgJiYKKwkJCQkJCSF1cmItPnVubGlua2VkKSB7CisJCQkJCWVoY2lfZGJnKGVoY2ksCisJImRldGVjdGVkIFhhY3RFcnIgbGVuICV6dS8lenUgcmV0cnkgJWRcbiIsCisJcXRkLT5sZW5ndGggLSBRVERfTEVOR1RIKHRva2VuKSwgcXRkLT5sZW5ndGgsCisJUUhfWEFDVEVSUl9NQVggLSBxaC0+eGFjdGVycnMpOworCisJCQkJCS8qIHJlc2V0IHRoZSB0b2tlbiBpbiB0aGUgcXRkIGFuZCB0aGUKKwkJCQkJICogcWggb3ZlcmxheSAod2hpY2ggc3RpbGwgY29udGFpbnMKKwkJCQkJICogdGhlIHF0ZCkgc28gdGhhdCB3ZSBwaWNrIHVwIGZyb20KKwkJCQkJICogd2hlcmUgd2UgbGVmdCBvZmYKKwkJCQkJICovCisJCQkJCXRva2VuICY9IH5RVERfU1RTX0hBTFQ7CisJCQkJCXRva2VuIHw9IFFURF9TVFNfQUNUSVZFIHwKKwkJCQkJCQkoRUhDSV9UVU5FX0NFUlIgPDwgMTApOworCQkJCQlxdGQtPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwKKwkJCQkJCQl0b2tlbik7CisJCQkJCXdtYigpOworCQkJCQlxaC0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLCB0b2tlbik7CisJCQkJCWdvdG8gcmV0cnlfeGFjdGVycjsKKwkJCQl9CiAJCQkJc3RvcHBlZCA9IDE7CiAKIAkJCS8qIG1hZ2ljIGR1bW15IGZvciBzb21lIHNob3J0IHJlYWRzOyBxaCB3b24ndCBhZHZhbmNlLgpAQCAtNDIxLDYgKzQ0OSw5IEBACiAJCS8qIHJlbW92ZSBxdGQ7IGl0J3MgcmVjeWNsZWQgYWZ0ZXIgcG9zc2libGUgdXJiIGNvbXBsZXRpb24gKi8KIAkJbGlzdF9kZWwgKCZxdGQtPnF0ZF9saXN0KTsKIAkJbGFzdCA9IHF0ZDsKKworCQkvKiByZWluaXQgdGhlIHhhY3RlcnIgY291bnRlciBmb3IgdGhlIG5leHQgcXRkICovCisJCXFoLT54YWN0ZXJycyA9IFFIX1hBQ1RFUlJfTUFYOwogCX0KIAogCS8qIGxhc3QgdXJiJ3MgY29tcGxldGlvbiBtaWdodCBzdGlsbCBuZWVkIGNhbGxpbmcgKi8KQEAgLTg2Miw2ICs4OTMsNyBAQAogCWhlYWQtPnFoX25leHQucWggPSBxaDsKIAloZWFkLT5od19uZXh0ID0gZG1hOwogCisJcWgtPnhhY3RlcnJzID0gUUhfWEFDVEVSUl9NQVg7CiAJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfTElOS0VEOwogCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KIH0KQEAgLTEwOTUsNyArMTEyNyw4IEBACiAJcHJldi0+cWhfbmV4dCA9IHFoLT5xaF9uZXh0OwogCXdtYiAoKTsKIAotCWlmICh1bmxpa2VseSAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKSB7CisJLyogSWYgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgcnVubmluZywgd2UgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCAqLworCWlmICh1bmxpa2VseSghSENfSVNfUlVOTklORyhlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKSkgewogCQkvKiBpZiAodW5saWtlbHkgKHFoLT5yZWNsYWltICE9IDApKQogCQkgKgl0aGlzIHdpbGwgcmVjdXJzZSwgcHJvYmFibHkgbm90IG11Y2gKIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IDA3YmNiOTMuLmFkYTVkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC01NjMsNyArNTYzLDcgQEAKIAkvLyAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKIAkvLyAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCiAJLy8gVEhFTgotCS8vICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2hjMzIoMSA8PCA3IC8qICJpZ25vcmUiICovKTsKKwkvLyAgIHFoLT5od19pbmZvMSB8PSBjcHVfdG9faGMzMigxIDw8IDcgLyogImlnbm9yZSIgKi8pOwogCiAJLyogaGlnaCBiYW5kd2lkdGgsIG9yIG90aGVyd2lzZSBwYXJ0IG9mIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KIAlpZiAoKHBlcmlvZCA9IHFoLT5wZXJpb2QpID09IDApCkBAIC0xNTM2LDcgKzE1MzYsNyBAQAogCQkJCQlzdHJ1Y3QgZWhjaV9pdGQsIGl0ZF9saXN0KTsKIAkJCWxpc3RfbW92ZV90YWlsICgmaXRkLT5pdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CiAJCQlpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOwotCQkJaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwkJCWl0ZC0+dXJiID0gdXJiOwogCQkJaXRkX2luaXQgKGVoY2ksIHN0cmVhbSwgaXRkKTsKIAkJfQogCkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCSh2b2lkKSBkaXNhYmxlX3BlcmlvZGljKGVoY2kpOwogCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKIAotCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CisJaWYgKHVubGlrZWx5KGxpc3RfaXNfc2luZ3VsYXIoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CiAJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKIAkJCQktPSBzdHJlYW0tPmJhbmR3aWR0aDsKIAkJZWhjaV92ZGJnIChlaGNpLApAQCAtMTY1Niw3ICsxNjU2LDYgQEAKIAlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKIAogZG9uZToKLQl1c2JfcHV0X3VyYih1cmIpOwogCWl0ZC0+dXJiID0gTlVMTDsKIAlpZiAoZWhjaS0+Y2xvY2tfZnJhbWUgIT0gaXRkLT5mcmFtZSB8fCBpdGQtPmluZGV4WzddICE9IC0xKSB7CiAJCS8qIE9LIHRvIHJlY3ljbGUgdGhpcyBJVEQgbm93LiAqLwpAQCAtMTk0OSw3ICsxOTQ4LDcgQEAKIAkJCQlzdHJ1Y3QgZWhjaV9zaXRkLCBzaXRkX2xpc3QpOwogCQlsaXN0X21vdmVfdGFpbCAoJnNpdGQtPnNpdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CiAJCXNpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOwotCQlzaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwkJc2l0ZC0+dXJiID0gdXJiOwogCiAJCXNpdGRfcGF0Y2goZWhjaSwgc3RyZWFtLCBzaXRkLCBzY2hlZCwgcGFja2V0KTsKIAkJc2l0ZF9saW5rIChlaGNpLCAobmV4dF91ZnJhbWUgPj4gMykgJSBlaGNpLT5wZXJpb2RpY19zaXplLApAQCAtMjAzNCw3ICsyMDMzLDcgQEAKIAkodm9pZCkgZGlzYWJsZV9wZXJpb2RpYyhlaGNpKTsKIAllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzLS07CiAKLQlpZiAobGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkpIHsKKwlpZiAobGlzdF9pc19zaW5ndWxhcigmc3RyZWFtLT50ZF9saXN0KSkgewogCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkCiAJCQkJLT0gc3RyZWFtLT5iYW5kd2lkdGg7CiAJCWVoY2lfdmRiZyAoZWhjaSwKQEAgLTIwNDUsNyArMjA0NCw2IEBACiAJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CiAJLyogT0sgdG8gcmVjeWNsZSB0aGlzIFNJVEQgbm93IHRoYXQgaXRzIGNvbXBsZXRpb24gY2FsbGJhY2sgcmFuLiAqLwogZG9uZToKLQl1c2JfcHV0X3VyYih1cmIpOwogCXNpdGQtPnVyYiA9IE5VTEw7CiAJc2l0ZC0+c3RyZWFtID0gTlVMTDsKIAlsaXN0X21vdmUoJnNpdGQtPnNpdGRfbGlzdCwgJnN0cmVhbS0+ZnJlZV9saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKaW5kZXggMjYyYjAwYy4uNmNmZjE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTE5MCw0MCArMTkwLDYgQEAKIAljbGVhcl9iaXQgKGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRpbWVyX2FjdGlvbiAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBlbnVtIGVoY2lfdGltZXJfYWN0aW9uIGFjdGlvbikKLXsKLQkvKiBEb24ndCBvdmVycmlkZSB0aW1lb3V0cyB3aGljaCBzaHJpbmsgb3IgKGxhdGVyKSBkaXNhYmxlCi0JICogdGhlIGFzeW5jIHJpbmc7IGp1c3QgdGhlIEkvTyB3YXRjaGRvZy4gIE5vdGUgdGhhdCBpZiBhCi0JICogU0hSSU5LIHdlcmUgcGVuZGluZywgT0ZGIHdvdWxkIG5ldmVyIGJlIHJlcXVlc3RlZC4KLQkgKi8KLQlpZiAodGltZXJfcGVuZGluZygmZWhjaS0+d2F0Y2hkb2cpCi0JCQkmJiAoKEJJVChUSU1FUl9BU1lOQ19TSFJJTkspIHwgQklUKFRJTUVSX0FTWU5DX09GRikpCi0JCQkJJiBlaGNpLT5hY3Rpb25zKSkKLQkJcmV0dXJuOwotCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgewotCQl1bnNpZ25lZCBsb25nIHQ7Ci0KLQkJc3dpdGNoIChhY3Rpb24pIHsKLQkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKLQkJCXQgPSBFSENJX0lPX0pJRkZJRVM7Ci0JCQlicmVhazsKLQkJY2FzZSBUSU1FUl9BU1lOQ19PRkY6Ci0JCQl0ID0gRUhDSV9BU1lOQ19KSUZGSUVTOwotCQkJYnJlYWs7Ci0JCS8vIGNhc2UgVElNRVJfQVNZTkNfU0hSSU5LOgotCQlkZWZhdWx0OgotCQkJLyogYWRkIGEgamlmZmllIHNpbmNlIHdlIHN5bmNoIGFnYWluc3QgdGhlCi0JCQkgKiA4IEtIeiB1ZnJhbWUgY291bnRlci4KLQkJCSAqLwotCQkJdCA9IERJVl9ST1VORF9VUChFSENJX1NIUklOS19GUkFNRVMgKiBIWiwgMTAwMCkgKyAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgdCArIGppZmZpZXMpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZnJlZV9jYWNoZWRfaXRkX2xpc3Qoc3RydWN0IGVoY2lfaGNkICplaGNpKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI4Nyw3ICsyNTMsNyBAQAogCiAvKgogICogTm93IHRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgbm90IGNvbnZlcnRlZCB1c2luZyB0aGUKLSAqIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKSBtYWNybyBhbnltb3JlLCBzaW5jZSB3ZSBoYXZlIHRvIHN1cHBvcnQKKyAqIGNwdV90b19sZTMyKCkgbWFjcm8gYW55bW9yZSwgc2luY2Ugd2UgaGF2ZSB0byBzdXBwb3J0CiAgKiAiZHluYW1pYyIgc3dpdGNoaW5nIGJldHdlZW4gYmUgYW5kIGxlIHN1cHBvcnQsIHNvIHRoYXQgdGhlIGRyaXZlcgogICogY2FuIGJlIHVzZWQgb24gb25lIHN5c3RlbSB3aXRoIFNvQyBFSENJIGNvbnRyb2xsZXIgdXNpbmcgYmlnLWVuZGlhbgogICogZGVzY3JpcHRvcnMgYXMgd2VsbCBhcyBhIG5vcm1hbCBsaXR0bGUtZW5kaWFuIFBDSSBFSENJIGNvbnRyb2xsZXIuCkBAIC0zNzYsNiArMzQyLDkgQEAKICNkZWZpbmUJUUhfU1RBVEVfVU5MSU5LX1dBSVQJNAkJLyogTElOS0VEIGFuZCBvbiByZWNsYWltIHEgKi8KICNkZWZpbmUJUUhfU1RBVEVfQ09NUExFVElORwk1CQkvKiBkb24ndCB0b3VjaCB0b2tlbi5IQUxUICovCiAKKwl1OAkJCXhhY3RlcnJzOwkvKiBYYWN0RXJyIHJldHJ5IGNvdW50ZXIgKi8KKyNkZWZpbmUJUUhfWEFDVEVSUl9NQVgJCTMyCQkvKiBYYWN0RXJyIHJldHJ5IGxpbWl0ICovCisKIAkvKiBwZXJpb2RpYyBzY2hlZHVsZSBpbmZvICovCiAJdTgJCQl1c2VjczsJCS8qIGludHIgYmFuZHdpZHRoICovCiAJdTgJCQlnYXBfdWY7CQkvKiB1ZnJhbWVzIHNwbGl0L2NzcGxpdCBnYXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYwppbmRleCAzNGUxNGVkLi5lYThhNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBmaGNpX3RvX2hjZChmaGNpKS0+c2VsZi5jb250cm9sbGVyOwogCi0JZmhjaS0+ZGZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2LT5idXNfaWQsIE5VTEwpOworCWZoY2ktPmRmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKGRldiksIE5VTEwpOwogCWlmICghZmhjaS0+ZGZzX3Jvb3QpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCmluZGV4IGJhNjIyY2MuLjA5NTE4MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKQEAgLTU4Myw3ICs1ODMsNyBAQAogCWlmIChzcHJvcCAmJiBzdHJjbXAoc3Byb3AsICJob3N0IikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmZoY2lfZHJpdmVyLCBkZXYsIGRldi0+YnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZmhjaV9kcml2ZXIsIGRldiwgZGV2X25hbWUoZGV2KSk7CiAJaWYgKCFoY2QpIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgY3JlYXRlIGhjZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJCQl9CiAJCX0KIAotCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgZGV2LT5idXNfaWQpOworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgZGV2X25hbWUoZGV2KSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyAlZCIsIGkpOwogCQkJZ290byBlcnJfZ3Bpb3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jIGIvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYwppbmRleCA4NTgyMjM2Li5jYmYzMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKQEAgLTQ2NCw4ICs0NjQsNyBAQAogCQkJcG9ydF9pZHggPDwgOCB8IGlmYWNlX25vLAogCQkJa2V5ZCwga2V5ZF9sZW4sIDEwMDAgLyogRklYTUU6IGFyYml0cmFyeSAqLyk7CiAKLQltZW1zZXQoa2V5ZCwgMCwgc2l6ZW9mKCprZXlkKSk7CS8qIGNsZWFyIGtleXMgZXRjLiAqLwotCWtmcmVlKGtleWQpOworCWt6ZnJlZShrZXlkKTsgLyogY2xlYXIga2V5cyBldGMuICovCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IDRkZGEzMWIuLmEyYjMwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlicmVhazsKIAljYXNlIFBJUEVfSU5URVJSVVBUOgogCQl1cmItPmludGVydmFsID0gZXAtPnBlcmlvZDsKLQkJZXAtPmxlbmd0aCA9IG1pbigoaW50KWVwLT5tYXhwYWNrZXQsCisJCWVwLT5sZW5ndGggPSBtaW5fdCh1MzIsIGVwLT5tYXhwYWNrZXQsCiAJCQkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAKIAkJLyogdXJiIHN1Ym1pdHRlZCBmb3IgYWxyZWFkeSBleGlzdGluZyBlbmRwb2ludCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAppbmRleCBhYTIxMWJhLi4xMmRiOTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaApAQCAtNTYzLDcgKzU2Myw3IEBACiAqLwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcHRkKHN0cnVjdCBwdGQgKnB0ZCkKIHsKLQlwcmludGsoInRkOiAleCAlZCVjJWQgJWQsJWQsJWQgICV4ICV4JXgleFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZDogJXggJWQlYyVkICVkLCVkLCVkICAleCAleCV4JXhcbiIsCiAJICAgICAgIFBURF9HRVRfQ0MocHRkKSwgUFREX0dFVF9GQShwdGQpLAogCSAgICAgICBQVERfRElSX1NUUihwdGQpLCBQVERfR0VUX0VQKHB0ZCksCiAJICAgICAgIFBURF9HRVRfQ09VTlQocHRkKSwgUFREX0dFVF9MRU4ocHRkKSwgUFREX0dFVF9NUFMocHRkKSwKQEAgLTU3Niw3ICs1NzYsNyBAQAogCWludCBrOwogCiAJaWYgKFBURF9HRVRfRElSKHB0ZCkgIT0gUFREX0RJUl9JTiAmJiBQVERfR0VUX0xFTihwdGQpKSB7Ci0JCXByaW50aygiLT4gIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIi0+ICIpOwogCQlmb3IgKGsgPSAwOyBrIDwgUFREX0dFVF9MRU4ocHRkKTsgKytrKQogCQkJcHJpbnRrKCIlMDJ4ICIsICgodTggKikgYnVmKVtrXSk7CiAJCXByaW50aygiXG4iKTsKQEAgLTU4OCwxMyArNTg4LDEzIEBACiAJaW50IGs7CiAKIAlpZiAoUFREX0dFVF9ESVIocHRkKSA9PSBQVERfRElSX0lOICYmIFBURF9HRVRfQ09VTlQocHRkKSkgewotCQlwcmludGsoIjwtICIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICI8LSAiKTsKIAkJZm9yIChrID0gMDsgayA8IFBURF9HRVRfQ09VTlQocHRkKTsgKytrKQogCQkJcHJpbnRrKCIlMDJ4ICIsICgodTggKikgYnVmKVtrXSk7CiAJCXByaW50aygiXG4iKTsKIAl9CiAJaWYgKFBURF9HRVRfTEFTVChwdGQpKQotCQlwcmludGsoIi1cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICItXG4iKTsKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwppbmRleCBiODk5ZjFhLi5jZDA3ZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCkBAIC02NDQsNyArNjQ0LDcgQEAKIAogCWlmICh1cmItPmRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpIHsKIAkJLyogc3BsaXQgKi8KLQkJcHRkLT5kdzUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MWMpOworCQlwdGQtPmR3NSA9IGNwdV90b19sZTMyKDB4MWMpOwogCiAJCWlmIChxaC0+cGVyaW9kID49IDMyKQogCQkJcGVyaW9kID0gcWgtPnBlcmlvZCAvIDI7CkBAIC04MTksNiArODE5LDEzIEBACiAJdTMyIGF0bF9yZWdzLCBwYXlsb2FkOwogCXUzMiBidWZmc3RhdHVzOwogCisJLyoKKwkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGVucXVldWUKKwkgKiBhIGZvbGxvdy11cCBwYWNrZXQsIHRoZSBTS0lQIHJlZ2lzdGVyIGdldHMgd3JpdHRlbiBhbmQgcmVhZCBiYWNrCisJICogYWxtb3N0IGltbWVkaWF0ZWx5LiBXaXRoIElTUDE3NjEsIHRoaXMgcmVnaXN0ZXIgcmVxdWlyZXMgYSBkZWxheSBvZgorCSAqIDE5NW5zIGJldHdlZW4gYSB3cml0ZSBhbmQgc3Vic2VxdWVudCByZWFkIChzZWUgc2VjdGlvbiAxNS4xLjEuMykuCisJICovCisJbmRlbGF5KDE5NSk7CiAJc2tpcF9tYXAgPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX0FUTF9QVERfU0tJUE1BUF9SRUcpOwogCiAJQlVHX09OKCFza2lwX21hcCk7CkBAIC04NTMsNiArODYwLDEzIEBACiAJdTMyIGludF9yZWdzLCBwYXlsb2FkOwogCXUzMiBidWZmc3RhdHVzOwogCisJLyoKKwkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGVucXVldWUKKwkgKiBhIGZvbGxvdy11cCBwYWNrZXQsIHRoZSBTS0lQIHJlZ2lzdGVyIGdldHMgd3JpdHRlbiBhbmQgcmVhZCBiYWNrCisJICogYWxtb3N0IGltbWVkaWF0ZWx5LiBXaXRoIElTUDE3NjEsIHRoaXMgcmVnaXN0ZXIgcmVxdWlyZXMgYSBkZWxheSBvZgorCSAqIDE5NW5zIGJldHdlZW4gYSB3cml0ZSBhbmQgc3Vic2VxdWVudCByZWFkIChzZWUgc2VjdGlvbiAxNS4xLjEuMykuCisJICovCisJbmRlbGF5KDE5NSk7CiAJc2tpcF9tYXAgPSBpc3AxNzYwX3JlYWRsKGhjZC0+cmVncyArIEhDX0lOVF9QVERfU0tJUE1BUF9SRUcpOwogCiAJQlVHX09OKCFza2lwX21hcCk7CkBAIC0xMDU0LDcgKzEwNjgsNyBAQAogCQkJcHJpdl93cml0ZV9jb3B5KHByaXYsICh1MzIgKikmcHRkLCB1c2JfaGNkLT5yZWdzICsKIAkJCQkJYXRsX3JlZ3MsIHNpemVvZihwdGQpKTsKIAotCQkJcHRkLmR3MCB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFBURF9WQUxJRCk7CisJCQlwdGQuZHcwIHw9IGNwdV90b19sZTMyKFBURF9WQUxJRCk7CiAJCQlwcml2X3dyaXRlX2NvcHkocHJpdiwgKHUzMiAqKSZwdGQsIHVzYl9oY2QtPnJlZ3MgKwogCQkJCQlhdGxfcmVncywgc2l6ZW9mKHB0ZCkpOwogCkBAIC0yMjM1LDkgKzIyNDksMTAgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocWhfY2FjaGVwKTsKIH0KIAotc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIodTY0IHJlc19zdGFydCwgdTY0IHJlc19sZW4sIGludCBpcnEsCi0JCXU2NCBpcnFmbGFncywgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAotCQl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpCitzdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3RlcihwaHlzX2FkZHJfdCByZXNfc3RhcnQsIHJlc291cmNlX3NpemVfdCByZXNfbGVuLAorCQkJCSBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCisJCQkJIHVuc2lnbmVkIGludCBkZXZmbGFncykKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaAppbmRleCBhOWRhZWE1Li40NjJmNDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCkBAIC0yLDkgKzIsMTAgQEAKICNkZWZpbmUgX0lTUDE3NjBfSENEX0hfCiAKIC8qIGV4cG9ydHMgZm9yIGlmICovCi1zdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3Rlcih1NjQgcmVzX3N0YXJ0LCB1NjQgcmVzX2xlbiwgaW50IGlycSwKLQkJdTY0IGlycWZsYWdzLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCi0JCXVuc2lnbmVkIGludCBkZXZmbGFncyk7CitzdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3RlcihwaHlzX2FkZHJfdCByZXNfc3RhcnQsIHJlc291cmNlX3NpemVfdCByZXNfbGVuLAorCQkJCSBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCisJCQkJIHVuc2lnbmVkIGludCBkZXZmbGFncyk7CiBpbnQgaW5pdF9rbWVtX29uY2Uodm9pZCk7CiB2b2lkIGRlaW5pdF9rbWVtX2NhY2hlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCmluZGV4IDRjZjdjYTQuLjNmYTNhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKICNpbmNsdWRlICJpc3AxNzYwLWhjZC5oIgpAQCAtMzAwLDM5ICszMDEsMTAxIEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlzcDE3NjBfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzOworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3JlczsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRDsKKworCW1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtX3JlcykgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBNZW1vcnkgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwltZW1fc2l6ZSA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplLCAiaXNwMTc2MCIpKSB7CisJCXByX3dhcm5pbmcoImlzcDE3NjA6IENhbm5vdCByZXNlcnZlIHRoZSBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxX3JlcykgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBJUlEgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpcnFmbGFncyB8PSBpcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCisJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUsIGlycV9yZXMtPnN0YXJ0LAorCQkJICAgICAgIGlycWZsYWdzLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgMCk7CisJaWYgKElTX0VSUihoY2QpKSB7CisJCXByX3dhcm5pbmcoImlzcDE3NjA6IEZhaWxlZCB0byByZWdpc3RlciB0aGUgSENEIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlwcl9pbmZvKCJJU1AxNzYwIFVTQiBkZXZpY2UgaW5pdGlhbGlzZWRcbiIpOworCXJldHVybiByZXQ7CisKK2NsZWFudXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaXNwMTc2MF9wbGF0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwltZW1fc2l6ZSA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNwMTc2MF9wbGF0X2RyaXZlciA9IHsKKwkucHJvYmUJPSBpc3AxNzYwX3BsYXRfcHJvYmUsCisJLnJlbW92ZQk9IGlzcDE3NjBfcGxhdF9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiaXNwMTc2MCIsCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGlzcDE3NjBfaW5pdCh2b2lkKQogewotCWludCByZXQ7CisJaW50IHJldCwgYW55X3JldCA9IC1FTk9ERVY7CiAKIAlpbml0X2ttZW1fb25jZSgpOwogCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc3AxNzYwX3BsYXRfZHJpdmVyKTsKKwlpZiAoIXJldCkKKwkJYW55X3JldCA9IDA7CiAjaWZkZWYgQ09ORklHX1BQQ19PRgogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXNwMTc2MF9vZl9kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJZGVpbml0X2ttZW1fY2FjaGUoKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSQogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlzcDE3NjFfcGNpX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJZ290byB1bnJlZ19vZjsKKwlpZiAoIXJldCkKKwkJYW55X3JldCA9IDA7CiAjZW5kaWYKLQlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX1BDSQotdW5yZWdfb2Y6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX09GCi0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlzcDE3NjBfb2ZfZHJpdmVyKTsKLSNlbmRpZgotCWRlaW5pdF9rbWVtX2NhY2hlKCk7Ci0JcmV0dXJuIHJldDsKKwlpZiAoYW55X3JldCkKKwkJZGVpbml0X2ttZW1fY2FjaGUoKTsKKwlyZXR1cm4gYW55X3JldDsKIH0KIG1vZHVsZV9pbml0KGlzcDE3NjBfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpc3AxNzYwX2V4aXQodm9pZCkKIHsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXNwMTc2MF9wbGF0X2RyaXZlcik7CiAjaWZkZWYgQ09ORklHX1BQQ19PRgogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpc3AxNzYwX29mX2RyaXZlcik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA1Y2Y1ZjFlLi4yNWRiNzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC05OTcsNyArOTk3LDcgQEAKICNkZWZpbmUgU0ExMTExX0RSSVZFUgkJb2hjaV9oY2Rfc2ExMTExX2RyaXZlcgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9TM0MyNDEwCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TM0MyNDEwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzY0WFgpCiAjaW5jbHVkZSAib2hjaS1zM2MyNDEwLmMiCiAjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIKICNlbmRpZgpAQCAtMTA0OSw3ICsxMDQ5LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjaW5jbHVkZSAib2hjaS1zaC5jIgogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCW9oY2lfaGNkX3NoX2RyaXZlcgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBmNDZhZjdhLi5hNjhhZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTIxLDkgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvdXNiLWNvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAKICNkZWZpbmUgdmFsaWRfcG9ydChpZHgpICgoaWR4KSA9PSAxIHx8IChpZHgpID09IDIpCiAKQEAgLTM3Miw3ICszNzAsNyBAQAogCiAJdXNiX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXNiLWJ1cy1ob3N0Iik7CiAJaWYgKElTX0VSUih1c2JfY2xrKSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWhvc3QgY2xvY2tcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWJ1cy1ob3N0IGNsb2NrXG4iKTsKIAkJcmV0dmFsID0gLUVOT0VOVDsKIAkJZ290byBlcnJfY2xrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCmluZGV4IDc1NTQ4ZjcuLjVhYzQ4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwpAQCAtODQ1LDE0ICs4NDUsMTQgQEAKIAkJaXNfb3V0ID0gIShxdGQtPmh3X3Rva2VuICYgY3B1X3RvX2xlMzIoMSA8PCA4KSk7CiAJCWVwbnVtID0gKGxlMzJfdG9fY3B1cCgmcWgtPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CiAJCWlmICh1bmxpa2VseSghdXNiX2dldHRvZ2dsZShxaC0+ZGV2LCBlcG51bSwgaXNfb3V0KSkpIHsKLQkJCXFoLT5od190b2tlbiAmPSB+X19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfVE9HR0xFKTsKKwkJCXFoLT5od190b2tlbiAmPSB+Y3B1X3RvX2xlMzIoUVREX1RPR0dMRSk7CiAJCQl1c2Jfc2V0dG9nZ2xlKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDEpOwogCQl9CiAJfQogCiAJLyogSEMgbXVzdCBzZWUgbGF0ZXN0IHF0ZCBhbmQgcWggZGF0YSBiZWZvcmUgd2UgY2xlYXIgQUNUSVZFK0hBTFQgKi8KIAl3bWIoKTsKLQlxaC0+aHdfdG9rZW4gJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfVE9HR0xFIHwgUVREX1NUU19QSU5HKTsKKwlxaC0+aHdfdG9rZW4gJj0gY3B1X3RvX2xlMzIoUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7CiB9CiAKIC8qIElmIGl0IHdlcmVuJ3QgZm9yIGEgY29tbW9uIHNpbGljb24gcXVpcmsgKHdyaXRpbmcgdGhlIGR1bW15IGludG8gdGhlIHFoCkBAIC05MzcsNyArOTM3LDcgQEAKIAkJc3RydWN0IGVoY2lfcWgJKnFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OwogCiAJCS8qIFMtbWFzayBpbiBhIFFIIG1lYW5zIGl0J3MgYW4gaW50ZXJydXB0IHVyYiAqLwotCQlpZiAoKHFoLT5od19pbmZvMiAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spKSAhPSAwKSB7CisJCWlmICgocWgtPmh3X2luZm8yICYgY3B1X3RvX2xlMzIoUUhfU01BU0spKSAhPSAwKSB7CiAKIAkJCS8qIC4uLiB1cGRhdGUgaGMtd2lkZSBwZXJpb2RpYyBzdGF0cyAoZm9yIHVzYmZzKSAqLwogCQkJb3h1X3RvX2hjZChveHUpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOwpAQCAtOTgxLDcgKzk4MSw3IEBACiBzdGF0aWMgdm9pZCBpbnRyX2Rlc2NoZWR1bGUoc3RydWN0IG94dV9oY2QgKm94dSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIHN0YXRpYyBpbnQgcWhfc2NoZWR1bGUoc3RydWN0IG94dV9oY2QgKm94dSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIAotI2RlZmluZSBIQUxUX0JJVCBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9TVFNfSEFMVCkKKyNkZWZpbmUgSEFMVF9CSVQgY3B1X3RvX2xlMzIoUVREX1NUU19IQUxUKQogCiAvKiBQcm9jZXNzIGFuZCBmcmVlIGNvbXBsZXRlZCBxdGRzIGZvciBhIHFoLCByZXR1cm5pbmcgVVJCcyB0byBkcml2ZXJzLgogICogQ2hhc2VzIHVwIHRvIHFoLT5od19jdXJyZW50LiAgUmV0dXJucyBudW1iZXIgb2YgY29tcGxldGlvbnMgY2FsbGVkLApAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAkJCS8qIHNob3VsZCBiZSByYXJlIGZvciBwZXJpb2RpYyB0cmFuc2ZlcnMsCiAJCQkgKiBleGNlcHQgbWF5YmUgaGlnaCBiYW5kd2lkdGggLi4uCiAJCQkgKi8KLQkJCWlmICgoX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSykKKwkJCWlmICgoY3B1X3RvX2xlMzIoUUhfU01BU0spCiAJCQkJCSYgcWgtPmh3X2luZm8yKSAhPSAwKSB7CiAJCQkJaW50cl9kZXNjaGVkdWxlKG94dSwgcWgpOwogCQkJCSh2b2lkKSBxaF9zY2hlZHVsZShveHUsIHFoKTsKQEAgLTEzNTAsNyArMTM1MCw3IEBACiAJfQogCiAJLyogYnkgZGVmYXVsdCwgZW5hYmxlIGludGVycnVwdCBvbiB1cmIgY29tcGxldGlvbiAqLwotCQlxdGQtPmh3X3Rva2VuIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX0lPQyk7CisJCXF0ZC0+aHdfdG9rZW4gfD0gY3B1X3RvX2xlMzIoUVREX0lPQyk7CiAJcmV0dXJuIGhlYWQ7CiAKIGNsZWFudXA6CkBAIC0xNTM5LDcgKzE1MzksNyBAQAogCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KIH0KIAotI2RlZmluZQlRSF9BRERSX01BU0sJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDdmKQorI2RlZmluZQlRSF9BRERSX01BU0sJY3B1X3RvX2xlMzIoMHg3ZikKIAogLyoKICAqIEZvciBjb250cm9sL2J1bGsvaW50ZXJydXB0LCByZXR1cm4gUUggd2l0aCB0aGVzZSBURHMgYXBwZW5kZWQuCkBAIC0yMDEyLDcgKzIwMTIsNyBAQAogCSAqICAgYW5kIHRoaXMgcWggaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHVmcmFtZQogCSAqICAgKGFuZCBvdmVybGF5IHRva2VuIFNwbGl0WHN0YXRlIGlzIGZhbHNlPykKIAkgKiBUSEVOCi0JICogICBxaC0+aHdfaW5mbzEgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMigxIDw8IDcgImlnbm9yZSIpOworCSAqICAgcWgtPmh3X2luZm8xIHw9IGNwdV90b19sZTMyKDEgPDwgNyAiaWdub3JlIik7CiAJICovCiAKIAkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLwpAQCAtMjA1Nyw3ICsyMDU3LDcgQEAKIAkgKiBhY3RpdmUgaGlnaCBzcGVlZCBxdWV1ZXMgbWF5IG5lZWQgYmlnZ2VyIGRlbGF5cy4uLgogCSAqLwogCWlmIChsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpCi0JCXx8IChfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX0NNQVNLKSAmIHFoLT5od19pbmZvMikgIT0gMCkKKwkJfHwgKGNwdV90b19sZTMyKFFIX0NNQVNLKSAmIHFoLT5od19pbmZvMikgIT0gMCkKIAkJd2FpdCA9IDI7CiAJZWxzZQogCQl3YWl0ID0gNTU7CS8qIHdvcnN0IGNhc2U6IDMgKiAxMDI0ICovCkBAIC0yMTgzLDEwICsyMTgzLDEwIEBACiAJCXFoLT5zdGFydCA9IGZyYW1lOwogCiAJCS8qIHJlc2V0IFMtZnJhbWUgYW5kIChtYXliZSkgQy1mcmFtZSBtYXNrcyAqLwotCQlxaC0+aHdfaW5mbzIgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMih+KFFIX0NNQVNLIHwgUUhfU01BU0spKTsKKwkJcWgtPmh3X2luZm8yICY9IGNwdV90b19sZTMyKH4oUUhfQ01BU0sgfCBRSF9TTUFTSykpOwogCQlxaC0+aHdfaW5mbzIgfD0gcWgtPnBlcmlvZAogCQkJPyBjcHVfdG9fbGUzMigxIDw8IHVmcmFtZSkKLQkJCTogX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSyk7CisJCQk6IGNwdV90b19sZTMyKFFIX1NNQVNLKTsKIAkJcWgtPmh3X2luZm8yIHw9IGNfbWFzazsKIAl9IGVsc2UKIAkJb3h1X2RiZyhveHUsICJyZXVzZWQgcWggJXAgc2NoZWR1bGVcbiIsIHFoKTsKQEAgLTI2ODQsNyArMjY4NCw3IEBACiAJb3h1LT51cmJfbGVuID0gMDsKIAogCS8qIEZJTVhFICovCi0JaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrID0gMFVMOworCWhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzayA9IE5VTEw7CiAKIAlpZiAob3h1LT5pc19vdGcpIHsKIAkJb3h1LT5jYXBzID0gaGNkLT5yZWdzICsgT1hVX09UR19DQVBfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oCmluZGV4IDg5MTBlMjcuLjFjMjE2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmgKQEAgLTIzNSwyMSArMjM1LDIxIEBACiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOwogCiAvKiBtYXNrIE5ha0NudCtUIGluIHFoLT5od19hbHRfbmV4dCAqLwotI2RlZmluZSBRVERfTUFTSyBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHgxZikKKyNkZWZpbmUgUVREX01BU0sgY3B1X3RvX2xlMzIgKH4weDFmKQogCiAjZGVmaW5lIElTX1NIT1JUX1JFQUQodG9rZW4pIChRVERfTEVOR1RIKHRva2VuKSAhPSAwICYmIFFURF9QSUQodG9rZW4pID09IDEpCiAKIC8qIFR5cGUgdGFnIGZyb20ge3FoLCBpdGQsIHNpdGQsIGZzdG59LT5od19uZXh0ICovCi0jZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKSkKKyNkZWZpbmUgUV9ORVhUX1RZUEUoZG1hKSAoKGRtYSkgJiBjcHVfdG9fbGUzMiAoMyA8PCAxKSkKIAogLyogdmFsdWVzIGZvciB0aGF0IHR5cGUgdGFnICovCi0jZGVmaW5lIFFfVFlQRV9RSAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9RSAljcHVfdG9fbGUzMiAoMSA8PCAxKQogCiAvKiBuZXh0IGFzeW5jIHF1ZXVlIGVudHJ5LCBvciBwb2ludGVyIHRvIGludGVycnVwdC9wZXJpb2RpYyBRSCAqLwogI2RlZmluZQlRSF9ORVhUKGRtYSkJKGNwdV90b19sZTMyKCgodTMyKWRtYSkmfjB4MDFmKXxRX1RZUEVfUUgpCiAKIC8qIGZvciBwZXJpb2RpYy9hc3luYyBzY2hlZHVsZXMgYW5kIHF0ZCBsaXN0cywgbWFyayBlbmQgb2YgbGlzdCAqLwotI2RlZmluZQlFSENJX0xJU1RfRU5ECV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KKyNkZWZpbmUJRUhDSV9MSVNUX0VORAljcHVfdG9fbGUzMigxKSAvKiAibnVsbCBwb2ludGVyIiB0byBodyAqLwogCiAvKgogICogRW50cmllcyBpbiBwZXJpb2RpYyBzaGFkb3cgdGFibGUgYXJlIHBvaW50ZXJzIHRvIG9uZSBvZiBmb3VyIGtpbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IDc1YjY5ODQuLjAzM2MyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkgKi8KIAloY2NfcGFyYW1zID0gcmVhZGwoYmFzZSArIEVIQ0lfSENDX1BBUkFNUyk7CiAJb2Zmc2V0ID0gKGhjY19wYXJhbXMgPj4gOCkgJiAweGZmOwotCXdoaWxlIChvZmZzZXQgJiYgY291bnQtLSkgeworCXdoaWxlIChvZmZzZXQgJiYgLS1jb3VudCkgewogCQl1MzIJCWNhcDsKIAkJaW50CQltc2VjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCAzMTkwNDEyLi5mMTYyNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTY2MCw5ICs2NjAsOSBAQAogCXUxNiBhcnJheVtSOEE2NjU5N19NQVhfTlVNX1BJUEVdLCBpID0gMCwgbWluOwogCiAJbWVtc2V0KGFycmF5LCAwLCBzaXplb2YoYXJyYXkpKTsKLQlzd2l0Y2ggKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXApKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgotCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJCWFycmF5W2krK10gPSA0OwogCQllbHNlIHsKIAkJCWFycmF5W2krK10gPSAzOwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6Ci0JCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgeworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpIHsKIAkJCWFycmF5W2krK10gPSA2OwogCQkJYXJyYXlbaSsrXSA9IDc7CiAJCQlhcnJheVtpKytdID0gODsKQEAgLTY3OCw3ICs2NzgsNyBAQAogCQkJYXJyYXlbaSsrXSA9IDk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKLQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCQlhcnJheVtpKytdID0gMjsKIAkJZWxzZQogCQkJYXJyYXlbaSsrXSA9IDE7CkBAIC05MjgsMTAgKzkyOCw5IEBACiAKIAlpbmZvLnBpcGVudW0gPSBnZXRfZW1wdHlfcGlwZW51bShyOGE2NjU5NywgZXApOwogCWluZm8uYWRkcmVzcyA9IGdldF91cmJfdG9fcjhhNjY1OTdfYWRkcihyOGE2NjU5NywgdXJiKTsKLQlpbmZvLmVwbnVtID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJaW5mby5lcG51bSA9IHVzYl9lbmRwb2ludF9udW0oZXApOwogCWluZm8ubWF4cGFja2V0ID0gbGUxNl90b19jcHUoZXAtPndNYXhQYWNrZXRTaXplKTsKLQlpbmZvLnR5cGUgPSBnZXRfcjhhNjY1OTdfdHlwZShlcC0+Ym1BdHRyaWJ1dGVzCi0JCQkJICAgICAgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJaW5mby50eXBlID0gZ2V0X3I4YTY2NTk3X3R5cGUodXNiX2VuZHBvaW50X3R5cGUoZXApKTsKIAlpbmZvLmJ1Zm51bSA9IGdldF9idWZudW0oaW5mby5waXBlbnVtKTsKIAlpbmZvLmJ1Zl9ic2l6ZSA9IGdldF9idWZfYnNpemUoaW5mby5waXBlbnVtKTsKIAlpZiAoaW5mby50eXBlID09IFI4QTY2NTk3X0JVTEspIHsKQEAgLTk0MSw3ICs5NDAsNyBAQAogCQlpbmZvLmludGVydmFsID0gZ2V0X2ludGVydmFsKHVyYiwgZXAtPmJJbnRlcnZhbCk7CiAJCWluZm8udGltZXJfaW50ZXJ2YWwgPSBnZXRfdGltZXJfaW50ZXJ2YWwodXJiLCBlcC0+YkludGVydmFsKTsKIAl9Ci0JaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJaW5mby5kaXJfaW4gPSAxOwogCWVsc2UKIAkJaW5mby5kaXJfaW4gPSAwOwpAQCAtMTAxNCw2ICsxMDEzLDkgQEAKIAogCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7CisKKwlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCisJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkICovCkBAIC0xMzk1LDcgKzEzOTcsNyBAQAogCQkJICAgKGludCl1cmItPmlzb19mcmFtZV9kZXNjW3RkLT5pc29fY250XS5sZW5ndGgpOwogCX0gZWxzZSB7CiAJCWJ1ZiA9ICh1MTYgKikodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQlzaXplID0gbWluKChpbnQpYnVmc2l6ZSwKKwkJc2l6ZSA9IG1pbl90KHUzMiwgYnVmc2l6ZSwKIAkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCkBAIC0xNjE1LDYgKzE2MTcsMTEgQEAKIAkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIERUQ0hFLCBJTlRFTkIyKTsKIAkJCXI4YTY2NTk3X3VzYl9kaXNjb25uZWN0KHI4YTY2NTk3LCAxKTsKIAkJfQorCQlpZiAobWFzazIgJiBCQ0hHKSB7CisJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkJDSEcsIElOVFNUUzIpOworCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgQkNIR0UsIElOVEVOQjIpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJCX0KIAl9CiAKIAlpZiAobWFzazEpIHsKQEAgLTE2MzAsNiArMTYzNywxMiBAQAogCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgRFRDSEUsIElOVEVOQjEpOwogCQkJcjhhNjY1OTdfdXNiX2Rpc2Nvbm5lY3QocjhhNjY1OTcsIDApOwogCQl9CisJCWlmIChtYXNrMSAmIEJDSEcpIHsKKwkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QkNIRywgSU5UU1RTMSk7CisJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBCQ0hHRSwgSU5URU5CMSk7CisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwkJfQorCiAJCWlmIChtYXNrMSAmIFNJR04pIHsKIAkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+U0lHTiwgSU5UU1RTMSk7CiAJCQlzdGF0dXMgPSBnZXRfdXJiX2Vycm9yKHI4YTY2NTk3LCAwKTsKQEAgLTIxNDEsNyArMjE1NCw3IEBACiAKIAkJc3dpdGNoICh3VmFsdWUpIHsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKLQkJCXJoLT5wb3J0ICY9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQkJcmgtPnBvcnQgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgogCQkJYnJlYWs7CkBAIC0yMjEzLDYgKzIyMjYsNjggQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUE0pCitzdGF0aWMgaW50IHI4YTY2NTk3X2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NyA9IGhjZF90b19yOGE2NjU5NyhoY2QpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBSOEE2NjU5N19NQVhfUk9PVF9IVUI7IHBvcnQrKykgeworCQlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKKwkJdW5zaWduZWQgbG9uZyBkdnN0Y3RyX3JlZyA9IGdldF9kdnN0Y3RyX3JlZyhwb3J0KTsKKworCQlpZiAoIShyaC0+cG9ydCAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFKSkpCisJCQljb250aW51ZTsKKworCQlkYmcoInN1c3BlbmQgcG9ydCA9ICVkIiwgcG9ydCk7CisJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIFVBQ1QsIGR2c3RjdHJfcmVnKTsJLyogc3VzcGVuZCAqLworCQlyaC0+cG9ydCB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORDsKKworCQlpZiAocmgtPmRldi0+dWRldi0+ZG9fcmVtb3RlX3dha2V1cCkgeworCQkJbXNsZWVwKDMpOwkvKiB3YWl0aW5nIGxhc3QgU09GICovCisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBSV1VQRSwgZHZzdGN0cl9yZWcpOworCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5CQ0hHLCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBCQ0hHRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCQl9CisJfQorCisJcjhhNjY1OTctPmJ1c19zdXNwZW5kZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjhhNjY1OTdfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcgPSBoY2RfdG9fcjhhNjY1OTcoaGNkKTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisJCXVuc2lnbmVkIGxvbmcgZHZzdGN0cl9yZWcgPSBnZXRfZHZzdGN0cl9yZWcocG9ydCk7CisKKwkJaWYgKCEocmgtPnBvcnQgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSkKKwkJCWNvbnRpbnVlOworCisJCWRiZygicmVzdW1lIHBvcnQgPSAlZCIsIHBvcnQpOworCQlyaC0+cG9ydCAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJcmgtPnBvcnQgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDsKKwkJcjhhNjY1OTdfbWRmeShyOGE2NjU5NywgUkVTVU1FLCBSRVNVTUUgfCBVQUNULCBkdnN0Y3RyX3JlZyk7CisJCW1zbGVlcCg1MCk7CisJCXI4YTY2NTk3X21kZnkocjhhNjY1OTcsIFVBQ1QsIFJFU1VNRSB8IFVBQ1QsIGR2c3RjdHJfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorI2Vsc2UKKyNkZWZpbmUJcjhhNjY1OTdfYnVzX3N1c3BlbmQJTlVMTAorI2RlZmluZQlyOGE2NjU5N19idXNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGhjX2RyaXZlciByOGE2NjU5N19oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAogCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCByOGE2NjU5NyksCkBAIC0yMjQzLDE2ICsyMzE4LDM5IEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CXI4YTY2NTk3X2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJcjhhNjY1OTdfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kID0JCXI4YTY2NTk3X2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCXI4YTY2NTk3X2J1c19yZXN1bWUsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pCiBzdGF0aWMgaW50IHI4YTY2NTk3X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCXN0cnVjdCByOGE2NjU5NwkJKnI4YTY2NTk3ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWRpc2FibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisKKwkJcmgtPnBvcnQgPSAweDAwMDAwMDAwOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHI4YTY2NTk3X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCByOGE2NjU5NwkJKnI4YTY2NTk3ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwllbmFibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwogCXJldHVybiAwOwogfQogI2Vsc2UJLyogaWYgZGVmaW5lZChDT05GSUdfUE0pICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmggYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmgKaW5kZXggZWNhY2RlNC4uZjQ5MjA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaApAQCAtNTA0LDYgKzUwNCw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGNoaWxkX2Nvbm5lY3RfbWFwWzRdOworCisJdW5zaWduZWQgYnVzX3N1c3BlbmRlZDoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcjhhNjY1OTcgKmhjZF90b19yOGE2NjU5NyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggZTEwNmU5ZC4uYTk0OTI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOwogCiAJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9IT1NUQ1RMUkVHLCBjb250cm9sKTsKLQllcC0+bGVuZ3RoID0gbWluKChpbnQpbGVuLAorCWVwLT5sZW5ndGggPSBtaW5fdCh1MzIsIGxlbiwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJUEFDS0VUKCJJTiVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAogCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApLCBlcCwgbGVuKTsKQEAgLTI1NSw3ICsyNTUsNyBAQAogCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXByZWZldGNoKGJ1Zik7CiAKLQlsZW4gPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCWxlbiA9IG1pbl90KHUzMiwgZXAtPm1heHBhY2tldCwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAlpZiAoIShjb250cm9sICYgU0wxMUhfSENUTE1BU0tfSVNPQ0gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCmluZGV4IDIwY2M1OGIuLmU1MmI5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCkBAIC0xMTgsNyArMTE4LDkgQEAKIAl9CiAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyVzIiwgcHR5cGUsICh1cmJwLT5mc2JyID8gIiBGU0JSIiA6ICIiKSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiIEFjdGxlbj0lZCIsIHVyYnAtPnVyYi0+YWN0dWFsX2xlbmd0aCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiIEFjdGxlbj0lZCVzIiwgdXJicC0+dXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJKHVyYnAtPnFoLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgPworCQkJCSItOCIgOiAiIikpOwogCiAJaWYgKHVyYnAtPnVyYi0+dW5saW5rZWQpCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIiBVbmxpbmtlZD0lZCIsIHVyYnAtPnVyYi0+dW5saW5rZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCmluZGV4IDdkMDFjNTYuLjI2YmQxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTczLDExICs3MywxMSBAQAogI2RlZmluZSAgIFVTQkxFR1NVUF9SV0MJCTB4OGYwMAkvKiB0aGUgUi9XQyBiaXRzICovCiAjZGVmaW5lICAgVVNCTEVHU1VQX1JPCQkweDUwNDAJLyogUi9PIGFuZCByZXNlcnZlZCBiaXRzICovCiAKLSNkZWZpbmUgVUhDSV9QVFJfQklUUwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMEYpCi0jZGVmaW5lIFVIQ0lfUFRSX1RFUk0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAxKQotI2RlZmluZSBVSENJX1BUUl9RSAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDIpCi0jZGVmaW5lIFVIQ0lfUFRSX0RFUFRICQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwNCkKLSNkZWZpbmUgVUhDSV9QVFJfQlJFQURUSAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMCkKKyNkZWZpbmUgVUhDSV9QVFJfQklUUwkJY3B1X3RvX2xlMzIoMHgwMDBGKQorI2RlZmluZSBVSENJX1BUUl9URVJNCQljcHVfdG9fbGUzMigweDAwMDEpCisjZGVmaW5lIFVIQ0lfUFRSX1FICQljcHVfdG9fbGUzMigweDAwMDIpCisjZGVmaW5lIFVIQ0lfUFRSX0RFUFRICQljcHVfdG9fbGUzMigweDAwMDQpCisjZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJY3B1X3RvX2xlMzIoMHgwMDAwKQogCiAjZGVmaW5lIFVIQ0lfTlVNRlJBTUVTCQkxMDI0CS8qIGluIHRoZSBmcmFtZSBsaXN0IFthcnJheV0gKi8KICNkZWZpbmUgVUhDSV9NQVhfU09GX05VTUJFUgkyMDQ3CS8qIGluIGFuIFNPRiBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCmluZGV4IDU2MzFkODkuLjNlNTgwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJCS8qIE90aGVyd2lzZSBhbGwgdGhlIHRvZ2dsZXMgaW4gdGhlIFVSQiBoYXZlIHRvIGJlIHN3aXRjaGVkICovCiAJCX0gZWxzZSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewotCQkJCXRkLT50b2tlbiBePSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJCXRkLT50b2tlbiBePSBjcHVfdG9fbGUzMigKIAkJCQkJCQlURF9UT0tFTl9UT0dHTEUpOwogCQkJCXRvZ2dsZSBePSAxOwogCQkJfQpAQCAtODgzLDcgKzg4Myw3IEBACiAKIAl1aGNpX2ZpbGxfdGQodGQsIDAsIFVTQl9QSURfT1VUIHwgdWhjaV9leHBsZW4oMCksIDApOwogCXdtYigpOwotCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOworCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKIAlxaC0+ZHVtbXlfdGQgPSB0ZDsKIAogCS8qIExvdy1zcGVlZCB0cmFuc2ZlcnMgZ2V0IGEgZGlmZmVyZW50IHF1ZXVlLCBhbmQgd29uJ3QgaG9nIHRoZSBidXMuCkBAIC04OTksOCArODk5LDYgQEAKIAl9CiAJaWYgKHFoLT5zdGF0ZSAhPSBRSF9TVEFURV9BQ1RJVkUpCiAJCXFoLT5za2VsID0gc2tlbDsKLQotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IC04OwkvKiBBY2NvdW50IGZvciB0aGUgU0VUVVAgcGFja2V0ICovCiAJcmV0dXJuIDA7CiAKIG5vbWVtOgpAQCAtMTAwMyw3ICsxMDAxLDcgQEAKIAkgKiBmYXN0IHNpZGUgYnV0IG5vdCBlbm91Z2ggdG8ganVzdGlmeSBkZWxheWluZyBhbiBpbnRlcnJ1cHQKIAkgKiBtb3JlIHRoYW4gMiBvciAzIFVSQnMsIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBVUkJfTk9fSU5URVJSVVBUCiAJICogZmxhZyBzZXR0aW5nLiAqLwotCXRkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiAKIAkvKgogCSAqIEJ1aWxkIHRoZSBuZXcgZHVtbXkgVEQgYW5kIGFjdGl2YXRlIHRoZSBvbGQgb25lCkBAIC0xMDE1LDcgKzEwMTMsNyBAQAogCiAJdWhjaV9maWxsX3RkKHRkLCAwLCBVU0JfUElEX09VVCB8IHVoY2lfZXhwbGVuKDApLCAwKTsKIAl3bWIoKTsKLQlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKKwlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CiAJcWgtPmR1bW15X3RkID0gdGQ7CiAKIAl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCkBAIC0xMzE3LDcgKzEzMTUsNyBAQAogCX0KIAogCS8qIFNldCB0aGUgaW50ZXJydXB0LW9uLWNvbXBsZXRpb24gZmxhZyBvbiB0aGUgbGFzdCBwYWNrZXQuICovCi0JdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwl0ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKIAogCS8qIEFkZCB0aGUgVERzIHRvIHRoZSBmcmFtZSBsaXN0ICovCiAJZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOwpAQCAtMTQ5NCwxMSArMTQ5MiwxMCBAQAogCiAJaWYgKHFoLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKIAotCQkvKiB1cmItPmFjdHVhbF9sZW5ndGggPCAwIG1lYW5zIHRoZSBzZXR1cCB0cmFuc2FjdGlvbiBkaWRuJ3QKLQkJICogY29tcGxldGUgc3VjY2Vzc2Z1bGx5LiAgRWl0aGVyIGl0IGZhaWxlZCBvciB0aGUgVVJCIHdhcwotCQkgKiB1bmxpbmtlZCBmaXJzdC4gIFJlZ2FyZGxlc3MsIGRvbid0IGNvbmZ1c2UgcGVvcGxlIHdpdGggYQotCQkgKiBuZWdhdGl2ZSBsZW5ndGguICovCi0JCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1heCh1cmItPmFjdHVhbF9sZW5ndGgsIDApOworCQkvKiBTdWJ0cmFjdCBvZmYgdGhlIGxlbmd0aCBvZiB0aGUgU0VUVVAgcGFja2V0IGZyb20KKwkJICogdXJiLT5hY3R1YWxfbGVuZ3RoLgorCQkgKi8KKwkJdXJiLT5hY3R1YWxfbGVuZ3RoIC09IG1pbl90KHUzMiwgOCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CiAKIAkvKiBXaGVuIGdpdmluZyBiYWNrIHRoZSBmaXJzdCBVUkIgaW4gYW4gSXNvY2hyb25vdXMgcXVldWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDg3OGM3N2MuLmVjYTM1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9CTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0JMHgwMSwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig4KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4MiwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAzLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDgpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDAzLAogCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDIsCi0JCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDY0KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMjE4LDcgKzIxOCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4NCwKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig2NCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTQ5OSw2ICs0OTksNyBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJm1kYzgwMF9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwppbmRleCBlNDYzZGI1Li5hNjhkOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC0xMzUsNDUgKzEzNSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeXRoZXJtLgogCi1jb25maWcgVVNCX1BISURHRVQKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRzIGRyaXZlcnMiCi0JZGVwZW5kcyBvbiBVU0IKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgdmFyaW91cyBkcml2ZXJzIGZvciBkZXZpY2VzIGZyb20KLQkgIFBoaWRnZXRzIGluYy4KLQotY29uZmlnIFVTQl9QSElER0VUS0lUCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFBoaWRnZXRJbnRlcmZhY2VLaXQgVVNCIGRldmljZQotCSAgZnJvbSBQaGlkZ2V0cyBJbmMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRraXQuCi0KLWNvbmZpZyBVU0JfUEhJREdFVE1PVE9SQ09OVFJPTAotCXRyaXN0YXRlICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0TW90b3JDb250cm9sIFVTQiBkZXZpY2UKLQkgIGZyb20gUGhpZGdldHMgSW5jLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0bW90b3Jjb250cm9sLgotCi1jb25maWcgVVNCX1BISURHRVRTRVJWTwotCXRyaXN0YXRlICJVU0IgUGhpZGdldFNlcnZvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhbiAxIG9yIDQgTW90b3IgUGhpZGdldFNlcnZvIAotCSAgc2Vydm8gY29udHJvbGxlciB2ZXJzaW9uIDIuMCBvciAzLjAuCi0KLQkgIFBoaWRnZXRzIEluYy4gaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cucGhpZGdldHMuY29tLz4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRzZXJ2by4KLQogY29uZmlnIFVTQl9JRE1PVVNFCiAJdHJpc3RhdGUgIlNpZW1lbnMgSUQgVVNCIE1vdXNlIEZpbmdlcnByaW50IHNlbnNvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQppbmRleCAxMzM0ZjdiLi4wODI2YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTE4LDEwICsxOCw2IEBACiBvYmotJChDT05GSUdfVVNCX0xEKQkJKz0gbGR1c2Iubwogb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSB1c2JsZWQubwogb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IGxlZ291c2J0b3dlci5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVQpCSs9IHBoaWRnZXQubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUS0lUKQkrPSBwaGlkZ2V0a2l0Lm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVE1PVE9SQ09OVFJPTCkJKz0gcGhpZGdldG1vdG9yY29udHJvbC5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVRTRVJWTykJKz0gcGhpZGdldHNlcnZvLm8KIG9iai0kKENPTkZJR19VU0JfUklPNTAwKQkrPSByaW81MDAubwogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCiBvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKQkrPSB0cmFuY2V2aWJyYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwppbmRleCA3YjY5MjJlLi4yMDM1MjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCWlmIChkZXYtPm9wZW5fY291bnQgPD0gMCkgewogCQlkYmcoMSwiICVzIDogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJYWR1X3JlbGVhc2VfaW50ZXJuYWwoZGV2KTsKQEAgLTM4NSw5ICszODUsOSBAQAogCQlpZiAoIWRldi0+b3Blbl9jb3VudCkJLyogLi4uIGFuZCB3ZSdyZSB0aGUgbGFzdCB1c2VyICovCiAJCQlhZHVfZGVsZXRlKGRldik7CiAJfQotCi1leGl0OgordW5sb2NrOgogCW11dGV4X3VubG9jaygmYWR1dHV4X211dGV4KTsKK2V4aXQ6CiAJZGJnKDIsIiAlcyA6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX2Z1bmNfXywgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggNzlhNzY2OC4uOWQwNjc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHg4MiB8IChlZCA8PCA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdfbGVuZ3RoID09IDApIHsKQEAgLTE3MDIsNyArMTcwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZHJlc3MgPDwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gbWluKDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gbWluX3QodTMyLCAxMDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKICAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwogICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzVlZDMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0cyBjbGFzcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KLXN0cnVjdCBjbGFzcyAqcGhpZGdldF9jbGFzczsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9waGlkZ2V0KHZvaWQpCi17Ci0JcGhpZGdldF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInBoaWRnZXQiKTsKLQotCWlmIChJU19FUlIocGhpZGdldF9jbGFzcykpCi0JCXJldHVybiBQVFJfRVJSKHBoaWRnZXRfY2xhc3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3BoaWRnZXQodm9pZCkKLXsKLQljbGFzc19kZXN0cm95KHBoaWRnZXRfY2xhc3MpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChwaGlkZ2V0X2NsYXNzKTsKLQotbW9kdWxlX2luaXQoaW5pdF9waGlkZ2V0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfcGhpZGdldCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbnRhaW5lciBtb2R1bGUgZm9yIHBoaWRnZXQgY2xhc3MiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmggYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMTE5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldHMgY2xhc3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi1leHRlcm4gc3RydWN0IGNsYXNzICpwaGlkZ2V0X2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4ZTBhOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgL2Rldi9udWxsCkBAIC0xLDc0MCArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgZHJpdmVyIDEuMAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IERhbmllbCBTYWFrZXMgPGRhbmllbEBzYWFrZXMubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IERyaXZlciIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAwNAkweDAwNDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMTYxNgkweDAwNDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgJMHgwMDQ1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDQ3CTB4MDA1MQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OAkweDAwNTMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg0CTB4ODIwMQotCi0jZGVmaW5lIE1BWF9JTlRFUkZBQ0VTCQkJMTYKLQotI2RlZmluZSBVUkJfSU5UX1NJWkUJCQk4Ci0KLXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHsKLQlpbnQgc2Vuc29yczsKLQlpbnQgaW5wdXRzOwotCWludCBvdXRwdXRzOwotCWludCBoYXNfbGNkOwotCWludCBhbW5lc2lhYzsKLX07Ci0KLSNkZWZpbmUgaWZraXQoX3NlbnNvcnMsIF9pbnB1dHMsIF9vdXRwdXRzLCBfbGNkLCBfYW1uZXNpYWMpCQlcCi17CQkJCQkJCQkJXAotCS5zZW5zb3JzCT0gX3NlbnNvcnMsCQkJCQlcCi0JLmlucHV0cwkJPSBfaW5wdXRzLAkJCQkJXAotCS5vdXRwdXRzCT0gX291dHB1dHMsCQkJCQlcCi0JLmhhc19sY2QJPSBfbGNkLAkJCQkJCVwKLQkuYW1uZXNpYWMJPSBfYW1uZXNpYWMJCQkJCVwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8wMDQgPSBpZmtpdCgwLCAwLCA0LCAwLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF84ODhuID0gaWZraXQoOCwgOCwgOCwgMCwgMSk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfODg4byA9IGlma2l0KDgsIDgsIDgsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzA0NyA9IGlma2l0KDAsIDQsIDcsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzg4NCA9IGlma2l0KDgsIDgsIDQsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzA4OCA9IGlma2l0KDAsIDgsIDgsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzAxNjE2ID0gaWZraXQoMCwgMTYsIDE2LCAwLCAwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgaW50ZXJmYWNla2l0IHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXVuc2lnbmVkIGxvbmcgb3V0cHV0czsKLQlpbnQgZGV2X25vOwotCXU4IGlucHV0c1tNQVhfSU5URVJGQUNFU107Ci0JdTE2IHNlbnNvcnNbTUFYX0lOVEVSRkFDRVNdOwotCXU4IGxjZF9maWxlc19vbjsKLQotCXN0cnVjdCB1cmIgKmlycTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX25vdGlmeTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX3Jlc3VibWl0OwotCXVuc2lnbmVkIGxvbmcgaW5wdXRfZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgc2Vuc29yX2V2ZW50czsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAwNH0sCi0Je1VTQl9ERVZJQ0VfVkVSKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgsIDAsIDB4ODE0KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODhvfSwKLQl7VVNCX0RFVklDRV9WRVIoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCwgMHgwODE1LCAweGZmZmYpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4OG59LAotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwNDcpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzA0N30sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDg4fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDE2MTYpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAxNjE2fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4NH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgaW50IHNldF9vdXRwdXRzKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCkKLXsKLQl1OCAqYnVmZmVyOwotCWludCByZXR2YWw7Ci0KLQlidWZmZXIgPSBremFsbG9jKDQsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlidWZmZXJbMF0gPSAodTgpa2l0LT5vdXRwdXRzOwotCWJ1ZmZlclsxXSA9ICh1OCkoa2l0LT5vdXRwdXRzID4+IDgpOwotCi0JZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJzZW5kaW5nIGRhdGE6IDB4JTA0eFxuIiwgKHUxNilraXQtPm91dHB1dHMpOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKLQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA0LCAyMDAwKTsKLQotCWlmIChyZXR2YWwgIT0gNCkKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIAotCQkJCXJldHZhbCk7Ci0Ja2ZyZWUoYnVmZmVyKTsKLQotCWlmIChraXQtPmlma2l0LT5hbW5lc2lhYykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZraXQtPmRvX3Jlc3VibWl0LCBIWiAvIDIpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi1zdGF0aWMgaW50IGNoYW5nZV9zdHJpbmcoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0LCBjb25zdCBjaGFyICpkaXNwbGF5LCB1bnNpZ25lZCBjaGFyIHJvdykKLXsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqZm9ybV9idWZmZXI7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JaW50IGksaiwgbGVuLCBidWZfcHRyOwotCQotCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JZm9ybV9idWZmZXIgPSBrbWFsbG9jKDMwLCBHRlBfS0VSTkVMKTsKLQlpZiAoKCFidWZmZXIpIHx8ICghZm9ybV9idWZmZXIpKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlsZW4gPSBzdHJsZW4oZGlzcGxheSk7Ci0JaWYgKGxlbiA+IDIwKQotCQlsZW4gPSAyMDsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBMQ0QgbGluZSAlZCB0byAlc1xuIiwgcm93LCBkaXNwbGF5KTsKLQotCWZvcm1fYnVmZmVyWzBdID0gcm93ICogMHg0MCArIDB4ODA7Ci0JZm9ybV9idWZmZXJbMV0gPSAweDAyOwotCWJ1Zl9wdHIgPSAyOwotCWZvciAoaSA9IDA7IGk8bGVuOyBpKyspCi0JCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSBkaXNwbGF5W2ldOwotCi0JZm9yIChpID0gMDsgaSA8ICgyMCAtIGxlbik7IGkrKykKLQkJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MjA7Ci0JZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MDE7Ci0JZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IHJvdyAqIDB4NDAgKyAweDgwICsgc3RybGVuKGRpc3BsYXkpOwotCi0JZm9yIChpID0gMDsgaSA8IGJ1Zl9wdHI7IGkgKz0gNykgewotCQlpZiAoKGJ1Zl9wdHIgLSBpKSA+IDcpCi0JCQlsZW4gPSA3OwotCQllbHNlCi0JCQlsZW4gPSAoYnVmX3B0ciAtIGkpOwotCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCi0JCQlidWZmZXJbal0gPSBmb3JtX2J1ZmZlcltpICsgal07Ci0JCWJ1ZmZlcls3XSA9IGxlbjsKLQotCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAotCQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IDA7Ci1leGl0OgotCWtmcmVlKGJ1ZmZlcik7Ci0Ja2ZyZWUoZm9ybV9idWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSBzZXRfbGNkX2xpbmUobnVtYmVyKQlcCi1zdGF0aWMgc3NpemVfdCBsY2RfbGluZV8jI251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQljaGFuZ2Vfc3RyaW5nKGtpdCwgYnVmLCBudW1iZXIgLSAxKTsJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQotCi0jZGVmaW5lIGxjZF9saW5lX2F0dHIobnVtYmVyKQkJCQkJCVwKLQlfX0FUVFIobGNkX2xpbmVfIyNudW1iZXIsIFNfSVdVR08sIE5VTEwsIGxjZF9saW5lXyMjbnVtYmVyKQotCi1zZXRfbGNkX2xpbmUoMSk7Ci1zZXRfbGNkX2xpbmUoMik7Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCWludCByZXR2YWwgPSAtRU5PTUVNOwotCQotCWJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlZCkgPCAxKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JaWYgKGVuYWJsZWQpCi0JCWJ1ZmZlclswXSA9IDB4MDE7Ci0JYnVmZmVyWzddID0gMHgxMTsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBiYWNrbGlnaHQgdG8gJXNcbiIsIGVuYWJsZWQgPyAib24iIDogIm9mZiIpOwotCQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCi0JCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZXhpdDsKLQotCXJldHZhbCA9IGNvdW50OwotZXhpdDoKLQlrZnJlZShidWZmZXIpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfbGNkX2xpbmVfYXR0cnNbXSA9IHsKLQlsY2RfbGluZV9hdHRyKDEpLAotCWxjZF9saW5lX2F0dHIoMiksCi0JX19BVFRSKGJhY2tsaWdodCwgU19JV1VHTywgTlVMTCwgc2V0X2JhY2tsaWdodCkKLX07Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9sY2RfZmlsZXMoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0KQotewotCWludCBpOwotCi0JaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiUmVtb3ZpbmcgbGNkIGZpbGVzXG4iKTsKLQotCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9sY2RfbGluZV9hdHRycyk7IGkrKykKLQkJCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9sY2RfbGluZV9hdHRyc1tpXSk7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdCBlbmFibGVfbGNkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBlbmFibGU7Ci0JaW50IGksIHJjOwotCQotCWlmIChraXQtPmlma2l0LT5oYXNfbGNkID09IDApCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmICgha2l0LT5sY2RfZmlsZXNfb24pIHsKLQkJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiQWRkaW5nIGxjZCBmaWxlc1xuIik7Ci0JCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9sY2RfbGluZV9hdHRycyk7IGkrKykgewotCQkJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LAotCQkJCQkmZGV2X2xjZF9saW5lX2F0dHJzW2ldKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJa2l0LT5sY2RfZmlsZXNfb24gPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCQlyZW1vdmVfbGNkX2ZpbGVzKGtpdCk7Ci0JCQlraXQtPmxjZF9maWxlc19vbiA9IDA7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIGNvdW50Owotb3V0OgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfbGNkX2xpbmVfYXR0cnNbaV0pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobGNkLCBTX0lXVUdPLCBOVUxMLCBlbmFibGVfbGNkX2ZpbGVzKTsKLQotc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2lycShzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGtpdC0+ZGF0YTsKLQlpbnQgaSwgbGV2ZWwsIHNlbnNvcjsKLQlpbnQgcmV0dmFsOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCi0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJcmV0dXJuOwotCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwotCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlnb3RvIHJlc3VibWl0OwotCX0KLQotCS8qIGRpZ2l0YWwgaW5wdXRzICovCi0JaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSAxNikgewotCQlmb3IgKGk9MDsgaSA8IDg7IGkrKykgewotCQkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1tpXSAhPSBsZXZlbCkgewotCQkJCWtpdC0+aW5wdXRzW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQkJbGV2ZWwgPSAoYnVmZmVyWzFdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1s4ICsgaV0gIT0gbGV2ZWwpIHsKLQkJCQlraXQtPmlucHV0c1s4ICsgaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KDggKyBpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UgaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSA4KSB7Ci0JCWZvciAoaT0wOyBpIDwgODsgaSsrKSB7Ci0JCQlsZXZlbCA9IChidWZmZXJbMV0gPj4gaSkgJiAxOwotCQkJaWYgKGtpdC0+aW5wdXRzW2ldICE9IGxldmVsKSB7Ci0JCQkJa2l0LT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KGksICZraXQtPmlucHV0X2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBhbmFsb2cgaW5wdXRzICovCi0JaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMpIHsKLQkJc2Vuc29yID0gKGJ1ZmZlclswXSAmIDEpID8gNCA6IDA7Ci0KLQkJbGV2ZWwgPSBidWZmZXJbMl0gKyAoYnVmZmVyWzNdICYgMHgwZikgKiAyNTY7Ci0JCWlmIChsZXZlbCAhPSBraXQtPnNlbnNvcnNbc2Vuc29yXSkgewotCQkJa2l0LT5zZW5zb3JzW3NlbnNvcl0gPSBsZXZlbDsKLQkJCXNldF9iaXQoc2Vuc29yLCAma2l0LT5zZW5zb3JfZXZlbnRzKTsKLQkJfQotCQlzZW5zb3IrKzsKLQkJbGV2ZWwgPSBidWZmZXJbNF0gKyAoYnVmZmVyWzNdICYgMHhmMCkgKiAxNjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls1XSArIChidWZmZXJbNl0gJiAweDBmKSAqIDI1NjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls3XSArIChidWZmZXJbNl0gJiAweGYwKSAqIDE2OwotCQlpZiAobGV2ZWwgIT0ga2l0LT5zZW5zb3JzW3NlbnNvcl0pIHsKLQkJCWtpdC0+c2Vuc29yc1tzZW5zb3JdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KHNlbnNvciwgJmtpdC0+c2Vuc29yX2V2ZW50cyk7Ci0JCX0KLQl9Ci0KLQlpZiAoa2l0LT5pbnB1dF9ldmVudHMgfHwga2l0LT5zZW5zb3JfZXZlbnRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fbm90aWZ5LCAwKTsKLQotcmVzdWJtaXQ6Ci0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0dmFsKQotCQllcnIoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2ludGVyZmFjZWtpdDAsIHJldHZhbCAlZCIsCi0JCQlraXQtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQlraXQtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX25vdGlmeShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlcmZhY2VraXQsIGRvX25vdGlmeS53b3JrKTsKLQlpbnQgaTsKLQljaGFyIHN5c2ZzX2ZpbGVbOF07Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5pbnB1dHM7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPmlucHV0X2V2ZW50cykpIHsKLQkJCXNwcmludGYoc3lzZnNfZmlsZSwgImlucHV0JWQiLCBpICsgMSk7Ci0JCQlzeXNmc19ub3RpZnkoJmtpdC0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKLQkJfQotCX0KLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPnNlbnNvcnM7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPnNlbnNvcl9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzZW5zb3IlZCIsIGkgKyAxKTsKLQkJCXN5c2ZzX25vdGlmeSgma2l0LT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19yZXN1Ym1pdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlcmZhY2VraXQsIGRvX3Jlc3VibWl0LndvcmspOwotCXNldF9vdXRwdXRzKGtpdCk7Ci19Ci0KLSNkZWZpbmUgc2hvd19zZXRfb3V0cHV0KHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X291dHB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JaW50IGVuYWJsZTsJCQkJCQkJXAotCWludCByZXR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZSkgPCAxKQkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoZW5hYmxlKQkJCQkJCQlcCi0JCXNldF9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKTsJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQljbGVhcl9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKTsgCQkJXAotCQkJCQkJCQkJXAotCXJldHZhbCA9IHNldF9vdXRwdXRzKGtpdCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhdGVzdF9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKSk7XAotfQotCi0jZGVmaW5lIG91dHB1dF9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIob3V0cHV0IyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAotCQlzaG93X291dHB1dCMjdmFsdWUsIHNldF9vdXRwdXQjI3ZhbHVlKQotCi1zaG93X3NldF9vdXRwdXQoMSk7Ci1zaG93X3NldF9vdXRwdXQoMik7Ci1zaG93X3NldF9vdXRwdXQoMyk7Ci1zaG93X3NldF9vdXRwdXQoNCk7Ci1zaG93X3NldF9vdXRwdXQoNSk7Ci1zaG93X3NldF9vdXRwdXQoNik7Ci1zaG93X3NldF9vdXRwdXQoNyk7Ci1zaG93X3NldF9vdXRwdXQoOCk7Ci1zaG93X3NldF9vdXRwdXQoOSk7Ci1zaG93X3NldF9vdXRwdXQoMTApOwotc2hvd19zZXRfb3V0cHV0KDExKTsKLXNob3dfc2V0X291dHB1dCgxMik7Ci1zaG93X3NldF9vdXRwdXQoMTMpOwotc2hvd19zZXRfb3V0cHV0KDE0KTsKLXNob3dfc2V0X291dHB1dCgxNSk7Ci1zaG93X3NldF9vdXRwdXQoMTYpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X291dHB1dF9hdHRyc1tdID0gewotCW91dHB1dF9hdHRyKDEpLCBvdXRwdXRfYXR0cigyKSwgb3V0cHV0X2F0dHIoMyksIG91dHB1dF9hdHRyKDQpLAotCW91dHB1dF9hdHRyKDUpLCBvdXRwdXRfYXR0cig2KSwgb3V0cHV0X2F0dHIoNyksIG91dHB1dF9hdHRyKDgpLAotCW91dHB1dF9hdHRyKDkpLCBvdXRwdXRfYXR0cigxMCksIG91dHB1dF9hdHRyKDExKSwgb3V0cHV0X2F0dHIoMTIpLAotCW91dHB1dF9hdHRyKDEzKSwgb3V0cHV0X2F0dHIoMTQpLCBvdXRwdXRfYXR0cigxNSksIG91dHB1dF9hdHRyKDE2KQotfTsKLQotI2RlZmluZSBzaG93X2lucHV0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2lucHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpa2l0LT5pbnB1dHNbdmFsdWUgLSAxXSk7CVwKLX0KLQotI2RlZmluZSBpbnB1dF9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19pbnB1dCgxKTsKLXNob3dfaW5wdXQoMik7Ci1zaG93X2lucHV0KDMpOwotc2hvd19pbnB1dCg0KTsKLXNob3dfaW5wdXQoNSk7Ci1zaG93X2lucHV0KDYpOwotc2hvd19pbnB1dCg3KTsKLXNob3dfaW5wdXQoOCk7Ci1zaG93X2lucHV0KDkpOwotc2hvd19pbnB1dCgxMCk7Ci1zaG93X2lucHV0KDExKTsKLXNob3dfaW5wdXQoMTIpOwotc2hvd19pbnB1dCgxMyk7Ci1zaG93X2lucHV0KDE0KTsKLXNob3dfaW5wdXQoMTUpOwotc2hvd19pbnB1dCgxNik7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfaW5wdXRfYXR0cnNbXSA9IHsKLQlpbnB1dF9hdHRyKDEpLCBpbnB1dF9hdHRyKDIpLCBpbnB1dF9hdHRyKDMpLCBpbnB1dF9hdHRyKDQpLAotCWlucHV0X2F0dHIoNSksIGlucHV0X2F0dHIoNiksIGlucHV0X2F0dHIoNyksIGlucHV0X2F0dHIoOCksCi0JaW5wdXRfYXR0cig5KSwgaW5wdXRfYXR0cigxMCksIGlucHV0X2F0dHIoMTEpLCBpbnB1dF9hdHRyKDEyKSwKLQlpbnB1dF9hdHRyKDEzKSwgaW5wdXRfYXR0cigxNCksIGlucHV0X2F0dHIoMTUpLCBpbnB1dF9hdHRyKDE2KQotfTsKLQotI2RlZmluZSBzaG93X3NlbnNvcih2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zZW5zb3IjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWtpdC0+c2Vuc29yc1t2YWx1ZSAtIDFdKTsJXAotfQotCi0jZGVmaW5lIHNlbnNvcl9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoc2Vuc29yIyN2YWx1ZSwgU19JUlVHTywgc2hvd19zZW5zb3IjI3ZhbHVlLCBOVUxMKQotCi1zaG93X3NlbnNvcigxKTsKLXNob3dfc2Vuc29yKDIpOwotc2hvd19zZW5zb3IoMyk7Ci1zaG93X3NlbnNvcig0KTsKLXNob3dfc2Vuc29yKDUpOwotc2hvd19zZW5zb3IoNik7Ci1zaG93X3NlbnNvcig3KTsKLXNob3dfc2Vuc29yKDgpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X3NlbnNvcl9hdHRyc1tdID0gewotCXNlbnNvcl9hdHRyKDEpLCBzZW5zb3JfYXR0cigyKSwgc2Vuc29yX2F0dHIoMyksIHNlbnNvcl9hdHRyKDQpLAotCXNlbnNvcl9hdHRyKDUpLCBzZW5zb3JfYXR0cig2KSwgc2Vuc29yX2F0dHIoNyksIHNlbnNvcl9hdHRyKDgpCi19OwotCi1zdGF0aWMgaW50IGludGVyZmFjZWtpdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdDsKLQlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7Ci0JaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKLQlpbnQgYml0LCB2YWx1ZSwgaTsKLQotCWlma2l0ID0gKHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICopaWQtPmRyaXZlcl9pbmZvOwotCWlmICghaWZraXQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOwotCWlmICghdXNiX2VuZHBvaW50X2Rpcl9pbihlbmRwb2ludCkpCi0JCXJldHVybiAtRU5PREVWOwotCS8qCi0JICogYm1BdHRyaWJ1dGVzCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCQotCWtpdCA9IGt6YWxsb2Moc2l6ZW9mKCpraXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtpdCkKLQkJZ290byBvdXQ7Ci0KLQlraXQtPmRldl9ubyA9IC0xOwotCWtpdC0+aWZraXQgPSBpZmtpdDsKLQlraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgVVJCX0lOVF9TSVpFLCBHRlBfQVRPTUlDLCAma2l0LT5kYXRhX2RtYSk7Ci0JaWYgKCFraXQtPmRhdGEpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICgha2l0LT5pcnEpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKLQlraXQtPmludGYgPSBpbnRmOwotCUlOSVRfREVMQVlFRF9XT1JLKCZraXQtPmRvX25vdGlmeSwgZG9fbm90aWZ5KTsKLQlJTklUX0RFTEFZRURfV09SSygma2l0LT5kb19yZXN1Ym1pdCwgZG9fcmVzdWJtaXQpOwotCXVzYl9maWxsX2ludF91cmIoa2l0LT5pcnEsIGtpdC0+dWRldiwgcGlwZSwga2l0LT5kYXRhLAotCQkJbWF4cCA+IFVSQl9JTlRfU0laRSA/IFVSQl9JTlRfU0laRSA6IG1heHAsCi0JCQlpbnRlcmZhY2VraXRfaXJxLCBraXQsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCWtpdC0+aXJxLT50cmFuc2Zlcl9kbWEgPSBraXQtPmRhdGFfZG1hOwotCWtpdC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2l0KTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0gICAgICAgIH0gd2hpbGUodmFsdWUpOwotICAgICAgICBraXQtPmRldl9ubyA9IGJpdDsKLQotCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAma2l0LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAotCQkJCSBraXQsICJpbnRlcmZhY2VraXQlZCIsIGtpdC0+ZGV2X25vKTsKLSAgICAgICAgaWYgKElTX0VSUihraXQtPmRldikpIHsKLSAgICAgICAgICAgICAgICByYyA9IFBUUl9FUlIoa2l0LT5kZXYpOwotICAgICAgICAgICAgICAgIGtpdC0+ZGV2ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0JaWYgKHVzYl9zdWJtaXRfdXJiKGtpdC0+aXJxLCBHRlBfS0VSTkVMKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5vdXRwdXRzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0MjsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxpZmtpdC0+aW5wdXRzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2lucHV0X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQzOwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5zZW5zb3JzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0NDsKLQl9Ci0KLQlpZiAoaWZraXQtPmhhc19sY2QpIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfYXR0cl9sY2QpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDQ7Ci0KLQl9Ci0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgYXR0YWNoZWRcbiIsCi0JCQlpZmtpdC0+c2Vuc29ycywgaWZraXQtPmlucHV0cywgaWZraXQtPm91dHB1dHMpOwotCi0JcmV0dXJuIDA7Ci0KLW91dDQ6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9zZW5zb3JfYXR0cnNbaV0pOwotCi0JaSA9IGlma2l0LT5pbnB1dHM7Ci1vdXQzOgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCi0JaSA9IGlma2l0LT5vdXRwdXRzOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci1vdXQ6Ci0JaWYgKGtpdCkgewotCQl1c2JfZnJlZV91cmIoa2l0LT5pcnEpOwotCQlpZiAoa2l0LT5kYXRhKQotCQkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOwotCQlpZiAoa2l0LT5kZXYpCi0JCQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7Ci0JCWlmIChraXQtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCQlrZnJlZShraXQpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQ7Ci0JaW50IGk7Ci0KLQlraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCWlmICgha2l0KQotCQlyZXR1cm47Ci0KLQl1c2Jfa2lsbF91cmIoa2l0LT5pcnEpOwotCXVzYl9mcmVlX3VyYihraXQtPmlycSk7Ci0JdXNiX2J1ZmZlcl9mcmVlKGtpdC0+dWRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygma2l0LT5kb19ub3RpZnkpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fcmVzdWJtaXQpOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+b3V0cHV0czsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfb3V0cHV0X2F0dHJzW2ldKTsKLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPmlucHV0czsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+c2Vuc29yczsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfc2Vuc29yX2F0dHJzW2ldKTsKLQotCWlmIChraXQtPmlma2l0LT5oYXNfbGNkKSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9hdHRyX2xjZCk7Ci0JCXJlbW92ZV9sY2RfZmlsZXMoa2l0KTsKLQl9Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7Ci0KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCAlZC8lZC8lZCBkZXRhY2hlZFxuIiwKLQkJa2l0LT5pZmtpdC0+c2Vuc29ycywga2l0LT5pZmtpdC0+aW5wdXRzLCBraXQtPmlma2l0LT5vdXRwdXRzKTsKLQotCXVzYl9wdXRfZGV2KGtpdC0+dWRldik7Ci0JY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCWtmcmVlKGtpdCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbnRlcmZhY2VraXRfZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRraXQiLAotCS5wcm9iZSA9IGludGVyZmFjZWtpdF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IGludGVyZmFjZWtpdF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlcmZhY2VraXRfaW5pdCh2b2lkKQotewotCWludCByZXR2YWwgPSAwOwotCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpbnRlcmZhY2VraXRfZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaW50ZXJmYWNla2l0X2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmaW50ZXJmYWNla2l0X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGludGVyZmFjZWtpdF9pbml0KTsKLW1vZHVsZV9leGl0KGludGVyZmFjZWtpdF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA4OGI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY1ICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldCBNb3RvckNvbnRyb2wgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAicGhpZGdldC5oIgotCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgotI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgRHJpdmVyIgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTU9UT1JDT05UUk9MCTB4MDA1OAotCi0jZGVmaW5lIFVSQl9JTlRfU0laRQkJCTgKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgbW90b3Jjb250cm9sIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldl9ubzsKLQl1OCBpbnB1dHNbNF07Ci0JczggZGVzaXJlZF9zcGVlZFsyXTsKLQlzOCBzcGVlZFsyXTsKLQlzMTYgX2N1cnJlbnRbMl07Ci0JczggYWNjZWxlcmF0aW9uWzJdOwotCXN0cnVjdCB1cmIgKmlycTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX25vdGlmeTsKLQl1bnNpZ25lZCBsb25nIGlucHV0X2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHNwZWVkX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIGV4Y2VlZF9ldmVudHM7Ci19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX01PVE9SQ09OVFJPTCkgfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgc2V0X21vdG9yKHN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jLCBpbnQgbW90b3IpCi17Ci0JdTggKmJ1ZmZlcjsKLQlpbnQgc3BlZWQsIHNwZWVkMiwgYWNjZWxlcmF0aW9uOwotCWludCByZXR2YWw7Ci0KLQlidWZmZXIgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JYWNjZWxlcmF0aW9uID0gbWMtPmFjY2VsZXJhdGlvblttb3Rvcl0gKiAxMDsKLQkvKiAtMTI3IDw9IHNwZWVkIDw9IDEyNyAqLwotCXNwZWVkID0gKG1jLT5kZXNpcmVkX3NwZWVkW21vdG9yXSAqIDEyNykgLyAxMDA7Ci0JLyogLTB4NzMwMCA8PSBzcGVlZDIgPD0gMHg3MzAwICovCi0Jc3BlZWQyID0gKG1jLT5kZXNpcmVkX3NwZWVkW21vdG9yXSAqIDIzMCAqIDEyOCkgLyAxMDA7Ci0KLQlidWZmZXJbMF0gPSBtb3RvcjsKLQlidWZmZXJbMV0gPSBzcGVlZDsKLQlidWZmZXJbMl0gPSBhY2NlbGVyYXRpb24gPj4gODsKLQlidWZmZXJbM10gPSBhY2NlbGVyYXRpb247Ci0JYnVmZmVyWzRdID0gc3BlZWQyID4+IDg7Ci0JYnVmZmVyWzVdID0gc3BlZWQyOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKG1jLT51ZGV2LAotCQkJIHVzYl9zbmRjdHJscGlwZShtYy0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0KLQlpZiAocmV0dmFsICE9IDgpCi0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCi0JCQkJcmV0dmFsKTsKLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBtb3RvcmNvbnRyb2xfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBtYy0+ZGF0YTsKLQlpbnQgaSwgbGV2ZWw7Ci0JaW50IHJldHZhbDsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7OwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQlyZXR1cm47Ci0JLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCi0JZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWdvdG8gcmVzdWJtaXQ7Ci0JfQotCi0JLyogZGlnaXRhbCBpbnB1dHMgKi8KLQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKLQkJaWYgKG1jLT5pbnB1dHNbaV0gIT0gbGV2ZWwpIHsKLQkJCW1jLT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCXNldF9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpOwotCQl9Ci0JfQotCi0JLyogbW90b3Igc3BlZWQgKi8KLQlpZiAoYnVmZmVyWzJdID09IDApIHsKLQkJZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWxldmVsID0gKChzOClidWZmZXJbNCtpXSkgKiAxMDAgLyAxMjc7Ci0JCQlpZiAobWMtPnNwZWVkW2ldICE9IGxldmVsKSB7Ci0JCQkJbWMtPnNwZWVkW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAmbWMtPnNwZWVkX2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgaW5kZXggPSBidWZmZXJbM10gJiAxOwotCi0JCWxldmVsID0gKChzOClidWZmZXJbNF0gPDwgOCkgfCBidWZmZXJbNV07Ci0JCWxldmVsID0gbGV2ZWwgKiAxMDAgLyAyOTQ0MDsKLQkJaWYgKG1jLT5zcGVlZFtpbmRleF0gIT0gbGV2ZWwpIHsKLQkJCW1jLT5zcGVlZFtpbmRleF0gPSBsZXZlbDsKLQkJCXNldF9iaXQoaW5kZXgsICZtYy0+c3BlZWRfZXZlbnRzKTsKLQkJfQotCi0JCWxldmVsID0gKChzOClidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107Ci0JCW1jLT5fY3VycmVudFtpbmRleF0gPSBsZXZlbCAqIDEwMCAvIDE1NzI7Ci0JfQotCi0JaWYgKGJ1ZmZlclsxXSAmIDEpCi0JCXNldF9iaXQoMCwgJm1jLT5leGNlZWRfZXZlbnRzKTsKLQotCWlmIChidWZmZXJbMV0gJiAyKQotCQlzZXRfYml0KDEsICZtYy0+ZXhjZWVkX2V2ZW50cyk7Ci0KLQlpZiAobWMtPmlucHV0X2V2ZW50cyB8fCBtYy0+ZXhjZWVkX2V2ZW50cyB8fCBtYy0+c3BlZWRfZXZlbnRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1jLT5kb19ub3RpZnksIDApOwotCi1yZXN1Ym1pdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpCi0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsCi0JCQkiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvbW90b3Jjb250cm9sMCwgcmV0dmFsICVkXG4iLAotCQkJbWMtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQltYy0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbW90b3Jjb250cm9sLCBkb19ub3RpZnkud29yayk7Ci0JaW50IGk7Ci0JY2hhciBzeXNmc19maWxlWzhdOwotCi0JZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJpbnB1dCVkIiwgaSk7Ci0JCQlzeXNmc19ub3RpZnkoJm1jLT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5zcGVlZF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzcGVlZCVkIiwgaSk7Ci0JCQlzeXNmc19ub3RpZnkoJm1jLT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5leGNlZWRfZXZlbnRzKSkKLQkJCWRldl93YXJuKCZtYy0+aW50Zi0+ZGV2LAotCQkJCSJtb3RvciAjJWQgZXhjZWVkcyAxLjUgQW1wIGN1cnJlbnQgbGltaXRcbiIsIGkpOwotCX0KLX0KLQotI2RlZmluZSBzaG93X3NldF9zcGVlZCh2YWx1ZSkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9zcGVlZCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IHNwZWVkOwkJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmc3BlZWQpIDwgMSkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNwZWVkIDwgLTEwMCB8fCBzcGVlZCA+IDEwMCkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbWMtPmRlc2lyZWRfc3BlZWRbdmFsdWVdID0gc3BlZWQ7CQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR2YWwgPSBzZXRfbW90b3IobWMsIHZhbHVlKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zcGVlZCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1jLT5zcGVlZFt2YWx1ZV0pOwkJCVwKLX0KLQotI2RlZmluZSBzcGVlZF9hdHRyKHZhbHVlKSAJCQkJCQlcCi0JX19BVFRSKHNwZWVkIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIAkJCVwKLQkJc2hvd19zcGVlZCMjdmFsdWUsIHNldF9zcGVlZCMjdmFsdWUpCi0KLXNob3dfc2V0X3NwZWVkKDApOwotc2hvd19zZXRfc3BlZWQoMSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfYWNjZWxlcmF0aW9uKHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X2FjY2VsZXJhdGlvbiMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCAJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IGFjY2VsZXJhdGlvbjsJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmYWNjZWxlcmF0aW9uKSA8IDEpCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKGFjY2VsZXJhdGlvbiA8IDAgfHwgYWNjZWxlcmF0aW9uID4gMTAwKQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCW1jLT5hY2NlbGVyYXRpb25bdmFsdWVdID0gYWNjZWxlcmF0aW9uOwkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dmFsID0gc2V0X21vdG9yKG1jLCB2YWx1ZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfYWNjZWxlcmF0aW9uIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCSAJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQkJCWNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbWMtPmFjY2VsZXJhdGlvblt2YWx1ZV0pOwkJXAotfQotCi0jZGVmaW5lIGFjY2VsZXJhdGlvbl9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGFjY2VsZXJhdGlvbiMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKLQkJc2hvd19hY2NlbGVyYXRpb24jI3ZhbHVlLCBzZXRfYWNjZWxlcmF0aW9uIyN2YWx1ZSkKLQotc2hvd19zZXRfYWNjZWxlcmF0aW9uKDApOwotc2hvd19zZXRfYWNjZWxlcmF0aW9uKDEpOwotCi0jZGVmaW5lIHNob3dfY3VycmVudCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19jdXJyZW50IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZG1BXG4iLCAoaW50KW1jLT5fY3VycmVudFt2YWx1ZV0pOwlcCi19Ci0KLSNkZWZpbmUgY3VycmVudF9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGN1cnJlbnQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2N1cnJlbnQjI3ZhbHVlLCBOVUxMKQotCi1zaG93X2N1cnJlbnQoMCk7Ci1zaG93X2N1cnJlbnQoMSk7Ci0KLSNkZWZpbmUgc2hvd19pbnB1dCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19pbnB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpbWMtPmlucHV0c1t2YWx1ZV0pOwkJXAotfQotCi0jZGVmaW5lIGlucHV0X2F0dHIodmFsdWUpCVwKLQlfX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19pbnB1dCgwKTsKLXNob3dfaW5wdXQoMSk7Ci1zaG93X2lucHV0KDIpOwotc2hvd19pbnB1dCgzKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyc1tdID0gewotCWlucHV0X2F0dHIoMCksCi0JaW5wdXRfYXR0cigxKSwKLQlpbnB1dF9hdHRyKDIpLAotCWlucHV0X2F0dHIoMyksCi0Jc3BlZWRfYXR0cigwKSwKLQlzcGVlZF9hdHRyKDEpLAotCWFjY2VsZXJhdGlvbl9hdHRyKDApLAotCWFjY2VsZXJhdGlvbl9hdHRyKDEpLAotCWN1cnJlbnRfYXR0cigwKSwKLQljdXJyZW50X2F0dHIoMSkKLX07Ci0KLXN0YXRpYyBpbnQgbW90b3Jjb250cm9sX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWM7Ci0JaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKLQlpbnQgYml0LCB2YWx1ZSwgaTsKLQotCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKLQlpZiAoIXVzYl9lbmRwb2ludF9kaXJfaW4oZW5kcG9pbnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JICogYm1BdHRyaWJ1dGVzCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCi0JbWMgPSBremFsbG9jKHNpemVvZigqbWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1jKQotCQlnb3RvIG91dDsKLQotCW1jLT5kZXZfbm8gPSAtMTsKLQltYy0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBVUkJfSU5UX1NJWkUsIEdGUF9BVE9NSUMsICZtYy0+ZGF0YV9kbWEpOwotCWlmICghbWMtPmRhdGEpCi0JCWdvdG8gb3V0OwotCi0JbWMtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYy0+aXJxKQotCQlnb3RvIG91dDsKLQotCW1jLT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKLQltYy0+aW50ZiA9IGludGY7Ci0JbWMtPmFjY2VsZXJhdGlvblswXSA9IG1jLT5hY2NlbGVyYXRpb25bMV0gPSAxMDsKLQlJTklUX0RFTEFZRURfV09SSygmbWMtPmRvX25vdGlmeSwgZG9fbm90aWZ5KTsKLQl1c2JfZmlsbF9pbnRfdXJiKG1jLT5pcnEsIG1jLT51ZGV2LCBwaXBlLCBtYy0+ZGF0YSwKLQkJCW1heHAgPiBVUkJfSU5UX1NJWkUgPyBVUkJfSU5UX1NJWkUgOiBtYXhwLAotCQkJbW90b3Jjb250cm9sX2lycSwgbWMsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCW1jLT5pcnEtPnRyYW5zZmVyX2RtYSA9IG1jLT5kYXRhX2RtYTsKLQltYy0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWMpOwotCi0JZG8gewotCQliaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLQkJdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0JfSB3aGlsZSh2YWx1ZSk7Ci0JbWMtPmRldl9ubyA9IGJpdDsKLQotCW1jLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwgbWMsCi0JCQkJIm1vdG9yY29udHJvbCVkIiwgbWMtPmRldl9ubyk7Ci0JaWYgKElTX0VSUihtYy0+ZGV2KSkgewotCQlyYyA9IFBUUl9FUlIobWMtPmRldik7Ci0JCW1jLT5kZXYgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodXNiX3N1Ym1pdF91cmIobWMtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9hdHRycyk7IGkrKykgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQyOwotCX0KLQotCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBhdHRhY2hlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLW91dDI6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAobWMpIHsKLQkJdXNiX2ZyZWVfdXJiKG1jLT5pcnEpOwotCQlpZiAobWMtPmRhdGEpCi0JCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBVUkJfSU5UX1NJWkUsIG1jLT5kYXRhLCBtYy0+ZGF0YV9kbWEpOwotCQlpZiAobWMtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKG1jLT5kZXYpOwotCQlpZiAobWMtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KG1jLT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKG1jKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vdG9yY29udHJvbF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWM7Ci0JaW50IGk7Ci0KLQltYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0JaWYgKCFtYykKLQkJcmV0dXJuOwotCi0JdXNiX2tpbGxfdXJiKG1jLT5pcnEpOwotCXVzYl9mcmVlX3VyYihtYy0+aXJxKTsKLQl1c2JfYnVmZmVyX2ZyZWUobWMtPnVkZXYsIFVSQl9JTlRfU0laRSwgbWMtPmRhdGEsIG1jLT5kYXRhX2RtYSk7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrKCZtYy0+ZG9fbm90aWZ5KTsKLQotCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2F0dHJzKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUobWMtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihtYy0+ZGV2KTsKLQotCXVzYl9wdXRfZGV2KG1jLT51ZGV2KTsKLQljbGVhcl9iaXQobWMtPmRldl9ubywgJmRldmljZV9ubyk7Ci0Ja2ZyZWUobWMpOwotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgZGV0YWNoZWRcbiIpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbW90b3Jjb250cm9sX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwaGlkZ2V0bW90b3Jjb250cm9sIiwKLQkucHJvYmUgPSBtb3RvcmNvbnRyb2xfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBtb3RvcmNvbnRyb2xfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSBpZF90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQgbW90b3Jjb250cm9sX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbW90b3Jjb250cm9sX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1vdG9yY29udHJvbF9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJm1vdG9yY29udHJvbF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChtb3RvcmNvbnRyb2xfaW5pdCk7Ci1tb2R1bGVfZXhpdChtb3RvcmNvbnRyb2xfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjZmZTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRTZXJ2byBkcml2ZXIgMS4wCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRTZXJ2byB2ZXJzaW9uIDIuMCBhbmQgMy4wIHNlcnZvIAotICogY29udHJvbGxlcnMgYXZhaWxhYmxlIGF0OiBodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8gCi0gKgotICogTm90ZSB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5wdXQgYXM6IGRlZ3JlZXMubWludXRlcwotICoKLSAqIENBVVRJT046IEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSAwIDwgZGVncmVlcyA8IDE4MCBhcyBhbnl0aGluZyBlbHNlCi0gKiBpcyBwcm9iYWJseSBiZXlvbmQgdGhlIHJhbmdlIG9mIHlvdXIgc2Vydm8gYW5kIG1heSBkYW1hZ2UgaXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0U2Vydm8gRHJpdmVyIgotCi0jZGVmaW5lIFZFTkRPUl9JRF9HTEFCCQkJCTB4MDZjMgotI2RlZmluZSBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRAkweDAwMzgKLSNkZWZpbmUgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSQkJMHgwMDM5Ci0KLSNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUAkJCTB4MDkyNQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19RVUFECTB4ODEwMQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19VTkkJMHg4MTA0Ci0KLSNkZWZpbmUgU0VSVk9fVkVSU0lPTl8zMAkJCTB4MDEKLSNkZWZpbmUgU0VSVk9fQ09VTlRfUVVBRAkJCTB4MDIKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0JewotCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9HTEFCLCBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRCksIAotCQkuZHJpdmVyX2luZm8gPSBTRVJWT19WRVJTSU9OXzMwIHwgU0VSVk9fQ09VTlRfUVVBRCAKLQl9LAotCXsKLQkJVVNCX0RFVklDRShWRU5ET1JfSURfR0xBQiwgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSSksCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX1ZFUlNJT05fMzAgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCi0JCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fUVVBRCksCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX0NPVU5UX1FVQUQgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCi0JCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fVU5JKSwKLQkJLmRyaXZlcl9pbmZvID0gMAotCX0sCi0Je30KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87Ci0KLXN0cnVjdCBwaGlkZ2V0X3NlcnZvIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldl9ubzsKLQl1bG9uZyB0eXBlOwotCWludCBwdWxzZVs0XTsKLQlpbnQgZGVncmVlc1s0XTsKLQlpbnQgbWludXRlc1s0XTsKLX07Ci0KLXN0YXRpYyBpbnQKLWNoYW5nZV9wb3NpdGlvbl92MzAoc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvLCBpbnQgc2Vydm9fbm8sIGludCBkZWdyZWVzLCAKLQkJCQkJCQkJaW50IG1pbnV0ZXMpCi17Ci0JaW50IHJldHZhbDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0KLQlpZiAoZGVncmVlcyA8IC0yMyB8fCBkZWdyZWVzID4gMzYyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1ZmZlciA9IGttYWxsb2MoNiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigmc2Vydm8tPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiBwdWxzZSA9IDAgLSA0MDk1Ci0JICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKLQkgKgotCSAqIHB1bHNlID0gYW5nbGUgKiAxMC42ICsgMjQzLjgJCi0JICovCi0Jc2Vydm8tPnB1bHNlW3NlcnZvX25vXSA9ICgoZGVncmVlcyo2MCArIG1pbnV0ZXMpKjEwNiArIDI0MzgqNjApLzYwMDsJCi0Jc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOwotCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gbWludXRlczsJCi0KLQkvKiAKLQkgKiBUaGUgUGhpZGdldFNlcnZvIHYzLjAgaXMgY29udHJvbGxlZCBieSBzZW5kaW5nIDYgYnl0ZXMsCi0JICogNCAqIDEyIGJpdHMgZm9yIGVhY2ggc2Vydm8uCi0JICoKLQkgKiBsb3cgPSBsb3dlciA4IGJpdHMgcHVsc2UKLQkgKiBoaWdoID0gaGlnaGVyIDQgYml0cyBwdWxzZQotCSAqCi0JICogb2Zmc2V0ICAgICBiaXRzCi0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IDAgfCAgICAgIGxvdyAwICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCAxIHwgaGlnaCAxIHwgaGlnaCAwIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgMiB8ICAgICAgbG93IDEgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IDMgfCAgICAgIGxvdyAyICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCA0IHwgaGlnaCAzIHwgaGlnaCAyIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgNSB8ICAgICAgbG93IDMgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKi8KLQotCWJ1ZmZlclswXSA9IHNlcnZvLT5wdWxzZVswXSAmIDB4ZmY7Ci0JYnVmZmVyWzFdID0gKHNlcnZvLT5wdWxzZVswXSA+PiA4ICYgMHgwZikKLQkgICAgfCAoc2Vydm8tPnB1bHNlWzFdID4+IDQgJiAweGYwKTsKLQlidWZmZXJbMl0gPSBzZXJ2by0+cHVsc2VbMV0gJiAweGZmOwotCWJ1ZmZlclszXSA9IHNlcnZvLT5wdWxzZVsyXSAmIDB4ZmY7Ci0JYnVmZmVyWzRdID0gKHNlcnZvLT5wdWxzZVsyXSA+PiA4ICYgMHgwZikKLQkgICAgfCAoc2Vydm8tPnB1bHNlWzNdID4+IDQgJiAweGYwKTsKLQlidWZmZXJbNV0gPSBzZXJ2by0+cHVsc2VbM10gJiAweGZmOwotCi0JZGV2X2RiZygmc2Vydm8tPnVkZXYtPmRldiwKLQkJImRhdGE6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQlidWZmZXJbMF0sIGJ1ZmZlclsxXSwgYnVmZmVyWzJdLAotCQlidWZmZXJbM10sIGJ1ZmZlcls0XSwgYnVmZmVyWzVdKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgNiwgMjAwMCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludAotY2hhbmdlX3Bvc2l0aW9uX3YyMChzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8sIGludCBzZXJ2b19ubywgaW50IGRlZ3JlZXMsCi0JCQkJCQkJCWludCBtaW51dGVzKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCi0JaWYgKGRlZ3JlZXMgPCAtMjMgfHwgZGVncmVlcyA+IDI3OCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJnNlcnZvLT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKLQkgKiBwdWxzZSA9IGFuZ2xlICsgMjMKLQkgKi8KLQlzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dPSBkZWdyZWVzICsgMjM7Ci0Jc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOwotCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gMDsKLQotCS8qCi0JICogVGhlIFBoaWRnZXRTZXJ2byB2Mi4wIGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyB0d28gYnl0ZXMuIFRoZQotCSAqIGZpcnN0IGJ5dGUgaXMgdGhlIHNlcnZvIG51bWJlciB4b3InZWQgd2l0aCAyOgotCSAqCi0JICogc2Vydm8gMCA9IDIKLQkgKiBzZXJ2byAxID0gMwotCSAqIHNlcnZvIDIgPSAwCi0JICogc2Vydm8gMyA9IDEKLQkgKgotCSAqIFRoZSBzZWNvbmQgYnl0ZSBpcyB0aGUgcG9zaXRpb24uCi0JICovCi0KLQlidWZmZXJbMF0gPSBzZXJ2b19ubyBeIDI7Ci0JYnVmZmVyWzFdID0gc2Vydm8tPnB1bHNlW3NlcnZvX25vXTsKLQotCWRldl9kYmcoJnNlcnZvLT51ZGV2LT5kZXYsICJkYXRhOiAlMDJ4ICUwMnhcbiIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgMiwgMjAwMCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSBzaG93X3NldCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2V0X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCWludCBkZWdyZWVzLCBtaW51dGVzLCByZXR2YWw7CQkJCQlcCi0Jc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JbWludXRlcyA9IDA7CQkJCQkJCVwKLQkvKiBtdXN0IGF0IGxlYXN0IGNvbnZlcnQgZGVncmVlcyAqLwkJCQlcCi0JaWYgKHNzY2FuZihidWYsICIlZC4lZCIsICZkZWdyZWVzLCAmbWludXRlcykgPCAxKSB7CQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzZXJ2by0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApCQkJCVwKLQkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YzMChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCi0JCQkJCQkJbWludXRlcyk7CVwKLQllbHNlIAkJCQkJCQkJXAotCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjIwKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKLQkJCQkJCQltaW51dGVzKTsJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogY291bnQ7CQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKSAJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwMmRcbiIsIHNlcnZvLT5kZWdyZWVzW3ZhbHVlXSwJCVwKLQkJCQlzZXJ2by0+bWludXRlc1t2YWx1ZV0pOwkJCVwKLX0KLQotI2RlZmluZSBzZXJ2b19hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoc2Vydm8jI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQkJXAotCQlzaG93X3NlcnZvIyN2YWx1ZSwgc2V0X3NlcnZvIyN2YWx1ZSkKLXNob3dfc2V0KDApOwotc2hvd19zZXQoMSk7Ci1zaG93X3NldCgyKTsKLXNob3dfc2V0KDMpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJzW10gPSB7Ci0Jc2Vydm9fYXR0cigwKSwgc2Vydm9fYXR0cigxKSwgc2Vydm9fYXR0cigyKSwgc2Vydm9fYXR0cigzKQotfTsKLQotc3RhdGljIGludAotc2Vydm9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7Ci0JaW50IGJpdCwgdmFsdWUsIHJjOwotCWludCBzZXJ2b19jb3VudCwgaTsKLQotCWRldiA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGhpZGdldF9zZXJ2byksIEdGUF9LRVJORUwpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwotCWRldi0+dHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKLQlkZXYtPmRldl9ubyA9IC0xOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBiaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlc3RfYW5kX3NldF9iaXQoYml0LCAmZGV2aWNlX25vKTsKLSAgICAgICAgfSB3aGlsZSAodmFsdWUpOwotCWRldi0+ZGV2X25vID0gYml0OwotCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZkZXYtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJIGRldiwgInNlcnZvJWQiLCBkZXYtPmRldl9ubyk7Ci0JaWYgKElTX0VSUihkZXYtPmRldikpIHsKLQkJcmMgPSBQVFJfRVJSKGRldi0+ZGV2KTsKLQkJZGV2LT5kZXYgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKLQotCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDI7Ci0JfQotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBhdHRhY2hlZFxuIiwKLQkJc2Vydm9fY291bnQsIGRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7Ci0KLQlpZiAoIShkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwKSkKLQkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAotCQkJICJXQVJOSU5HOiB2Mi4wIG5vdCB0ZXN0ZWQhIFBsZWFzZSByZXBvcnQgaWYgaXQgd29ya3MuXG4iKTsKLQotCXJldHVybiAwOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldi0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAoZGV2KSB7Ci0JCWlmIChkZXYtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKGRldi0+ZGV2KTsKLQkJaWYgKGRldi0+ZGV2X25vID49IDApCi0JCQljbGVhcl9iaXQoZGV2LT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKGRldik7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZAotc2Vydm9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7Ci0JaW50IHNlcnZvX2NvdW50LCBpOwotCi0JZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCWlmICghZGV2KQotCQlyZXR1cm47Ci0KLQlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKLQotCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYtPmRldik7Ci0JdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiAlZC1Nb3RvciBQaGlkZ2V0U2Vydm8gdiVkLjAgZGV0YWNoZWRcbiIsCi0JCXNlcnZvX2NvdW50LCBkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOwotCi0JY2xlYXJfYml0KGRldi0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQlrZnJlZShkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2Vydm9fZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRzZXJ2byIsCi0JLnByb2JlID0gc2Vydm9fcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBzZXJ2b19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdAotcGhpZGdldF9zZXJ2b19pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXBoaWRnZXRfc2Vydm9fZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChwaGlkZ2V0X3NlcnZvX2luaXQpOwotbW9kdWxlX2V4aXQocGhpZGdldF9zZXJ2b19leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwppbmRleCA2M2RmZjliLi5mMjZlYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKQEAgLTQwMSw2ICs0MDEsNyBAQAogCX0KIAogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKIAkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggNGNmMjdjNy4uZjhkOTA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0zNywxMCArMzcsMTMgQEAKICNkZWZpbmUgTU9OX0lPQ1hfR0VUICAgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2Jpbl9nZXQpCiAjZGVmaW5lIE1PTl9JT0NYX01GRVRDSCBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX2Jpbl9tZmV0Y2gpCiAjZGVmaW5lIE1PTl9JT0NIX01GTFVTSCBfSU8oTU9OX0lPQ19NQUdJQywgOCkKKy8qICM5IHdhcyBNT05fSU9DVF9TRVRBUEkgKi8KKyNkZWZpbmUgTU9OX0lPQ1hfR0VUWCAgIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fYmluX2dldCkKIAogI2lmZGVmIENPTkZJR19DT01QQVQKICNkZWZpbmUgTU9OX0lPQ1hfR0VUMzIgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikKICNkZWZpbmUgTU9OX0lPQ1hfTUZFVENIMzIgX0lPV1IoTU9OX0lPQ19NQUdJQywgNywgc3RydWN0IG1vbl9iaW5fbWZldGNoMzIpCisjZGVmaW5lIE1PTl9JT0NYX0dFVFgzMiAgIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fYmluX2dldDMyKQogI2VuZGlmCiAKIC8qCkBAIC05Miw3ICs5NSwyOSBAQAogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGxlbl91cmI7CS8qIExlbmd0aCBvZiBkYXRhIChzdWJtaXR0ZWQgb3IgYWN0dWFsKSAqLwogCXVuc2lnbmVkIGludCBsZW5fY2FwOwkvKiBEZWxpdmVyZWQgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCQlzdHJ1Y3QgaXNvX3JlYyB7CisJCQlpbnQgZXJyb3JfY291bnQ7CisJCQlpbnQgbnVtZGVzYzsKKwkJfSBpc287CisJfSBzOworCWludCBpbnRlcnZhbDsKKwlpbnQgc3RhcnRfZnJhbWU7CisJdW5zaWduZWQgaW50IHhmZXJfZmxhZ3M7CisJdW5zaWduZWQgaW50IG5kZXNjOwkvKiBBY3R1YWwgbnVtYmVyIG9mIElTTyBkZXNjcmlwdG9ycyAqLworfTsKKworLyoKKyAqIElTTyB2ZWN0b3IsIHBhY2tlZCBpbnRvIHRoZSBoZWFkIG9mIGRhdGEgc3RyZWFtLgorICogVGhpcyBoYXMgdG8gdGFrZSAxNiBieXRlcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW5kIG9mIGJ1ZmZlcgorICogd3JhcCBpcyBub3QgaGFwcGVuaW5nIGluIHRoZSBtaWRkbGUgb2YgYSBkZXNjcmlwdG9yLgorICovCitzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjIHsKKwlpbnQgICAgICAgICAgaXNvX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgaXNvX29mZjsKKwl1bnNpZ25lZCBpbnQgaXNvX2xlbjsKKwl1MzIgX3BhZDsKIH07CiAKIC8qIHBlciBmaWxlIHN0YXRpc3RpYyAqLwpAQCAtMTAyLDcgKzEyNyw3IEBACiB9OwogCiBzdHJ1Y3QgbW9uX2Jpbl9nZXQgewotCXN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkcjsJLyogT25seSA0OCBieXRlcywgbm90IDY0LiAqLworCXN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkcjsJLyogQ2FuIGJlIDQ4IGJ5dGVzIG9yIDY0LiAqLwogCXZvaWQgX191c2VyICpkYXRhOwogCXNpemVfdCBhbGxvYzsJCS8qIExlbmd0aCBvZiBkYXRhIChjYW4gYmUgemVybykgKi8KIH07CkBAIC0xMzEsNiArMTU2LDExIEBACiAjZGVmaW5lIFBLVF9BTElHTiAgIDY0CiAjZGVmaW5lIFBLVF9TSVpFICAgIDY0CiAKKyNkZWZpbmUgUEtUX1NaX0FQSTAgNDgJLyogQVBJIDAgKDIuNi4yMCkgc2l6ZSAqLworI2RlZmluZSBQS1RfU1pfQVBJMSA2NAkvKiBBUEkgMSBzaXplOiBleHRyYSBmaWVsZHMgKi8KKworI2RlZmluZSBJU09ERVNDX01BWCAgIDEyOAkvKiBTYW1lIG51bWJlciBhcyB1c2JmcyBhbGxvd3MsIDIwNDggYnl0ZXMuICovCisKIC8qIG1heCBudW1iZXIgb2YgVVNCIGJ1cyBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTU9OX0JJTl9NQVhfTUlOT1IgMTI4CiAKQEAgLTM2MCwxMiArMzkwLDggQEAKICAgICBjb25zdCBzdHJ1Y3QgdXJiICp1cmIsIGNoYXIgZXZfdHlwZSkKIHsKIAotCWlmICghdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmdXJiLT5lcC0+ZGVzYykgfHwgZXZfdHlwZSAhPSAnUycpCi0JCXJldHVybiAnLSc7Ci0KIAlpZiAodXJiLT5zZXR1cF9wYWNrZXQgPT0gTlVMTCkKIAkJcmV0dXJuICdaJzsKLQogCW1lbWNweShzZXR1cGIsIHVyYi0+c2V0dXBfcGFja2V0LCBTRVRVUF9MRU4pOwogCXJldHVybiAwOwogfQpAQCAtMzg3LDYgKzQxMywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtb25fYmluX2dldF9pc29kZXNjKGNvbnN0IHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCisgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IHVyYiAqdXJiLCBjaGFyIGV2X3R5cGUsIHVuc2lnbmVkIGludCBuZGVzYykKK3sKKwlzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjICpkcDsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZnA7CisKKwlmcCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2M7CisJd2hpbGUgKG5kZXNjLS0gIT0gMCkgeworCQlkcCA9IChzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjICopCisJCSAgICAocnAtPmJfdmVjW29mZnNldCAvIENIVU5LX1NJWkVdLnB0ciArIG9mZnNldCAlIENIVU5LX1NJWkUpOworCQlkcC0+aXNvX3N0YXR1cyA9IGZwLT5zdGF0dXM7CisJCWRwLT5pc29fb2ZmID0gZnAtPm9mZnNldDsKKwkJZHAtPmlzb19sZW4gPSAoZXZfdHlwZSA9PSAnUycpID8gZnAtPmxlbmd0aCA6IGZwLT5hY3R1YWxfbGVuZ3RoOworCQlkcC0+X3BhZCA9IDA7CisJCWlmICgob2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjKSkgPj0gcnAtPmJfc2l6ZSkKKwkJCW9mZnNldCA9IDA7CisJCWZwKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtb25fYmluX2V2ZW50KHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsIHN0cnVjdCB1cmIgKnVyYiwKICAgICBjaGFyIGV2X3R5cGUsIGludCBzdGF0dXMpCiB7CkBAIC0zOTYsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IG5kZXNjLCBsZW5kZXNjOwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CiAJY2hhciBkYXRhX3RhZyA9IDA7CkBAIC00MDcsNiArNDU0LDE5IEBACiAJLyoKIAkgKiBGaW5kIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGgsIHRoZW4gYWxsb2NhdGUgc3BhY2UuCiAJICovCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDApIHsKKwkJCW5kZXNjID0gMDsKKwkJfSBlbHNlIGlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID49IElTT0RFU0NfTUFYKSB7CisJCQluZGVzYyA9IElTT0RFU0NfTUFYOworCQl9IGVsc2UgeworCQkJbmRlc2MgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQl9CisJfSBlbHNlIHsKKwkJbmRlc2MgPSAwOworCX0KKwlsZW5kZXNjID0gbmRlc2Mqc2l6ZW9mKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MpOworCiAJdXJiX2xlbmd0aCA9IChldl90eXBlID09ICdTJykgPwogCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiB1cmItPmFjdHVhbF9sZW5ndGg7CiAJbGVuZ3RoID0gdXJiX2xlbmd0aDsKQEAgLTQyOSwxMCArNDg5LDEyIEBACiAJCWRpciA9IDA7CiAJfQogCi0JaWYgKHJwLT5tbWFwX2FjdGl2ZSkKLQkJb2Zmc2V0ID0gbW9uX2J1ZmZfYXJlYV9hbGxvY19jb250aWd1b3VzKHJwLCBsZW5ndGggKyBQS1RfU0laRSk7Ci0JZWxzZQotCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jKHJwLCBsZW5ndGggKyBQS1RfU0laRSk7CisJaWYgKHJwLT5tbWFwX2FjdGl2ZSkgeworCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jX2NvbnRpZ3VvdXMocnAsCisJCQkJCQkgbGVuZ3RoICsgUEtUX1NJWkUgKyBsZW5kZXNjKTsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jKHJwLCBsZW5ndGggKyBQS1RfU0laRSArIGxlbmRlc2MpOworCX0KIAlpZiAob2Zmc2V0ID09IH4wKSB7CiAJCXJwLT5jbnRfbG9zdCsrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycC0+Yl9sb2NrLCBmbGFncyk7CkBAIC00NTYsOSArNTE4LDMxIEBACiAJZXAtPnRzX3VzZWMgPSB0cy50dl91c2VjOwogCWVwLT5zdGF0dXMgPSBzdGF0dXM7CiAJZXAtPmxlbl91cmIgPSB1cmJfbGVuZ3RoOwotCWVwLT5sZW5fY2FwID0gbGVuZ3RoOworCWVwLT5sZW5fY2FwID0gbGVuZ3RoICsgbGVuZGVzYzsKKwllcC0+eGZlcl9mbGFncyA9IHVyYi0+dHJhbnNmZXJfZmxhZ3M7CiAKLQllcC0+ZmxhZ19zZXR1cCA9IG1vbl9iaW5fZ2V0X3NldHVwKGVwLT5zZXR1cCwgdXJiLCBldl90eXBlKTsKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkpIHsKKwkJZXAtPmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQllcC0+aW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCQllcC0+c3RhcnRfZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOworCQllcC0+cy5pc28uZXJyb3JfY291bnQgPSB1cmItPmVycm9yX2NvdW50OworCQllcC0+cy5pc28ubnVtZGVzYyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJfQorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXBkKSAmJiBldl90eXBlID09ICdTJykgeworCQllcC0+ZmxhZ19zZXR1cCA9IG1vbl9iaW5fZ2V0X3NldHVwKGVwLT5zLnNldHVwLCB1cmIsIGV2X3R5cGUpOworCX0gZWxzZSB7CisJCWVwLT5mbGFnX3NldHVwID0gJy0nOworCX0KKworCWlmIChuZGVzYyAhPSAwKSB7CisJCWVwLT5uZGVzYyA9IG5kZXNjOworCQltb25fYmluX2dldF9pc29kZXNjKHJwLCBvZmZzZXQsIHVyYiwgZXZfdHlwZSwgbmRlc2MpOworCQlpZiAoKG9mZnNldCArPSBsZW5kZXNjKSA+PSBycC0+Yl9zaXplKQorCQkJb2Zmc2V0IC09IHJwLT5iX3NpemU7CisJfQorCiAJaWYgKGxlbmd0aCAhPSAwKSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBtb25fYmluX2dldF9kYXRhKHJwLCBvZmZzZXQsIHVyYiwgbGVuZ3RoKTsKIAkJaWYgKGVwLT5mbGFnX2RhdGEgIT0gMCkgewkvKiBZZXMsIGl0J3MgMHgwMCwgbm90ICcwJyAqLwpAQCAtNTkyLDcgKzY3Niw4IEBACiAgKiBSZXR1cm5zIHplcm8gb3IgZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQgbW9uX2Jpbl9nZXRfZXZlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCi0gICAgc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyLCB2b2lkIF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKKyAgICBzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHIsIHVuc2lnbmVkIGludCBoZHJieXRlcywKKyAgICB2b2lkIF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CkBAIC02MDksNyArNjk0LDcgQEAKIAogCWVwID0gTU9OX09GRjJIRFIocnAsIHJwLT5iX291dCk7CiAKLQlpZiAoY29weV90b191c2VyKGhkciwgZXAsIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpKSkgeworCWlmIChjb3B5X3RvX3VzZXIoaGRyLCBlcCwgaGRyYnl0ZXMpKSB7CiAJCW11dGV4X3VubG9jaygmcnAtPmZldGNoX2xvY2spOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC02NTcsNiArNzQyLDcgQEAKICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaGRyYnl0ZXMgPSBQS1RfU1pfQVBJMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKQEAgLTY3NCw4ICs3NjAsOCBAQAogCiAJZXAgPSBNT05fT0ZGMkhEUihycCwgcnAtPmJfb3V0KTsKIAotCWlmIChycC0+Yl9yZWFkIDwgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpIHsKLQkJc3RlcF9sZW4gPSBtaW4obmJ5dGVzLCBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSAtIHJwLT5iX3JlYWQpOworCWlmIChycC0+Yl9yZWFkIDwgaGRyYnl0ZXMpIHsKKwkJc3RlcF9sZW4gPSBtaW4obmJ5dGVzLCAoc2l6ZV90KShoZHJieXRlcyAtIHJwLT5iX3JlYWQpKTsKIAkJcHRyID0gKChjaGFyICopZXApICsgcnAtPmJfcmVhZDsKIAkJaWYgKHN0ZXBfbGVuICYmIGNvcHlfdG9fdXNlcihidWYsIHB0ciwgc3RlcF9sZW4pKSB7CiAJCQltdXRleF91bmxvY2soJnJwLT5mZXRjaF9sb2NrKTsKQEAgLTY4NywxMyArNzczLDEzIEBACiAJCWRvbmUgKz0gc3RlcF9sZW47CiAJfQogCi0JaWYgKHJwLT5iX3JlYWQgPj0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpIHsKKwlpZiAocnAtPmJfcmVhZCA+PSBoZHJieXRlcykgewogCQlzdGVwX2xlbiA9IGVwLT5sZW5fY2FwOwotCQlzdGVwX2xlbiAtPSBycC0+Yl9yZWFkIC0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcik7CisJCXN0ZXBfbGVuIC09IHJwLT5iX3JlYWQgLSBoZHJieXRlczsKIAkJaWYgKHN0ZXBfbGVuID4gbmJ5dGVzKQogCQkJc3RlcF9sZW4gPSBuYnl0ZXM7CiAJCW9mZnNldCA9IHJwLT5iX291dCArIFBLVF9TSVpFOwotCQlvZmZzZXQgKz0gcnAtPmJfcmVhZCAtIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpOworCQlvZmZzZXQgKz0gcnAtPmJfcmVhZCAtIGhkcmJ5dGVzOwogCQlpZiAob2Zmc2V0ID49IHJwLT5iX3NpemUpCiAJCQlvZmZzZXQgLT0gcnAtPmJfc2l6ZTsKIAkJaWYgKGNvcHlfZnJvbV9idWYocnAsIG9mZnNldCwgYnVmLCBzdGVwX2xlbikpIHsKQEAgLTcwOSw3ICs3OTUsNyBAQAogCS8qCiAJICogQ2hlY2sgaWYgd2hvbGUgcGFja2V0IHdhcyByZWFkLCBhbmQgaWYgc28sIGp1bXAgdG8gdGhlIG5leHQgb25lLgogCSAqLwotCWlmIChycC0+Yl9yZWFkID49IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpICsgZXAtPmxlbl9jYXApIHsKKwlpZiAocnAtPmJfcmVhZCA+PSBoZHJieXRlcyArIGVwLT5sZW5fY2FwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZycC0+Yl9sb2NrLCBmbGFncyk7CiAJCW1vbl9idWZmX2FyZWFfZnJlZShycCwgUEtUX1NJWkUgKyBlcC0+bGVuX2NhcCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKQEAgLTkwOCw2ICs5OTQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTU9OX0lPQ1hfR0VUOgorCWNhc2UgTU9OX0lPQ1hfR0VUWDoKIAkJewogCQlzdHJ1Y3QgbW9uX2Jpbl9nZXQgZ2V0YjsKIApAQCAtOTE3LDggKzEwMDQsOSBAQAogCiAJCWlmIChnZXRiLmFsbG9jID4gMHgxMDAwMDAwMCkJLyogV2FudCB0byBjYXN0IHRvIHUzMiAqLwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLAotCQkJICBnZXRiLmhkciwgZ2V0Yi5kYXRhLCAodW5zaWduZWQgaW50KWdldGIuYWxsb2MpOworCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwgZ2V0Yi5oZHIsCisJCSAgICAoY21kID09IE1PTl9JT0NYX0dFVCk/IFBLVF9TWl9BUEkwOiBQS1RfU1pfQVBJMSwKKwkJICAgIGdldGIuZGF0YSwgKHVuc2lnbmVkIGludClnZXRiLmFsbG9jKTsKIAkJfQogCQlicmVhazsKIApAQCAtOTg0LDE2ICsxMDcyLDE4IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCi0JY2FzZSBNT05fSU9DWF9HRVQzMjogeworCWNhc2UgTU9OX0lPQ1hfR0VUMzI6CisJY2FzZSBNT05fSU9DWF9HRVRYMzI6CisJCXsKIAkJc3RydWN0IG1vbl9iaW5fZ2V0MzIgZ2V0YjsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmdldGIsICh2b2lkIF9fdXNlciAqKWFyZywKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsCi0JCSAgICBjb21wYXRfcHRyKGdldGIuaGRyMzIpLCBjb21wYXRfcHRyKGdldGIuZGF0YTMyKSwKLQkJICAgIGdldGIuYWxsb2MzMik7CisJCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLCBjb21wYXRfcHRyKGdldGIuaGRyMzIpLAorCQkgICAgKGNtZCA9PSBNT05fSU9DWF9HRVQzMik/IFBLVF9TWl9BUEkwOiBQS1RfU1pfQVBJMSwKKwkJICAgIGNvbXBhdF9wdHIoZ2V0Yi5kYXRhMzIpLCBnZXRiLmFsbG9jMzIpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA5OTg1ZGIwLi5iNjZlODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0yMCw4ICsyMCw4IEBACiAJICBpdCdzIGJlaW5nIHVzZWQgd2l0aCwgaW5jbHVkaW5nIHRoZSBVU0IgcGVyaXBoZXJhbCByb2xlLAogCSAgb3IgdGhlIFVTQiBob3N0IHJvbGUsIG9yIGJvdGguCiAKLQkgIFRleGFzIEluc3RydW1lbnRzIHBhcnRzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBEYVZpbmNpIDY0NHgsCi0JICBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KKwkgIFRleGFzIEluc3RydW1lbnRzIGZhbWlsaWllcyB1c2luZyB0aGlzIElQIGluY2x1ZGUgRGFWaW5jaQorCSAgKDM1eCwgNjQ0eCAuLi4pLCBPTUFQIDI0M3gsIE9NQVAgMywgYW5kIFRVU0IgNjAxMC4KIAogCSAgQW5hbG9nIERldmljZXMgcGFydHMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIEJsYWNrZmluIEJGNTR4LAogCSAgQkY1MjUgYW5kIEJGNTI3LgpAQCAtNDAsNyArNDAsNyBAQAogCWRlZmF1bHQgeSBpZiAoQkY1NHggJiYgIUJGNTQ0KQogCWRlZmF1bHQgeSBpZiAoQkY1MnggJiYgIUJGNTIyICYmICFCRjUyMykKIAotY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgorY29tbWVudCAiRGFWaW5jaSAzNXggYW5kIDY0NHggVVNCIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIEFSQ0hfREFWSU5DSQogCiBjb21tZW50ICJPTUFQIDI0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggMmRjNzYwNi4uMTBkMTFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTQ4LDYgKzQ4LDkgQEAKICNpbmNsdWRlICJjcHBpX2RtYS5oIgogCiAKKyNkZWZpbmUgVVNCX1BIWV9DVFJMCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikKKyNkZWZpbmUgRE0zNTVfREVFUFNMRUVQCUlPX0FERFJFU1MoRE0zNTVfREVFUFNMRUVQX1BBRERSKQorCiAvKiBSRVZJU0lUIChQTSkgd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2VlcCB0aGUgUEhZIGluIGxvdyBwb3dlciBtb2RlIG1vc3QKICAqIG9mIHRoZSB0aW1lICgyNCBNSFogb3NjaWxsYXRvciBhbmQgUExMIG9mZiwgZXRjKSBieSBzZXR0aW5nIFBPV0VSLkQwCiAgKiBhbmQsIHdoZW4gaW4gaG9zdCBtb2RlLCBhdXRvc3VzcGVuZGluZyBpZGxlIHJvb3QgcG9ydHMuLi4gUEhZUExMT04KQEAgLTU2LDIwICs1OSwyNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29uKHZvaWQpCiB7Ci0JLyogc3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OLAotCQkJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIElPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpOwotCXdoaWxlICgoX19yYXdfcmVhZGwoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSkKLQkJCSYgVVNCUEhZX1BIWUNMS0dEKSA9PSAwKQorCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkvKiBwb3dlciBldmVyeXRoaW5nIHVwOyBzdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwgKi8KKwlwaHlfY3RybCAmPSB+KFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX09UR1BEV04gfCBVU0JQSFlfUEhZUERXTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT047CisJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCisJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgYmVmb3JlIHByb2NlZWRpbmcgKi8KKwl3aGlsZSAoKF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCkgJiBVU0JQSFlfUEhZQ0xLR0QpID09IDApCiAJCWNwdV9yZWxheCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29mZih2b2lkKQogewotCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBvc2NpbGxhdG9yICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX1BIWVBEV04sICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSk7CisJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFksIGl0cyBQTEwsIGFuZCB0aGUgT1RHIGJsb2NrICovCisJcGh5X2N0cmwgJj0gfihVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfT1RHUERXTiB8IFVTQlBIWV9QSFlQRFdOOworCV9fcmF3X3dyaXRlbChwaHlfY3RybCwgVVNCX1BIWV9DVFJMKTsKIH0KIAogc3RhdGljIGludCBkbWFfb2ZmID0gMTsKQEAgLTEyNiwxMCArMTM1LDYgQEAKIH0KIAogCi0vKiBSRVZJU0lUIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgRGFWaW5jaSBjYW4gc3VwcG9ydCBmdWxsIE9URy4gICovCi0KLXN0YXRpYyBpbnQgdmJ1c19zdGF0ZSA9IC0xOwotCiAjaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECiAjZGVmaW5lCXBvcnRzdGF0ZShzdG10KQkJc3RtdAogI2Vsc2UKQEAgLTEzNywxMCArMTQyLDE5IEBACiAjZW5kaWYKIAogCi0vKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLworLyoKKyAqIFZCVVMgU1dJVENISU5HIElTIEJPQVJELVNQRUNJRklDIC4uLiBhdCBsZWFzdCBmb3IgdGhlIERNNjQ0NiBFVk0sCisgKiB3aGljaCBkb2Vzbid0IHdpcmUgRFJWVkJVUyB0byB0aGUgRkVUIHRoYXQgc3dpdGNoZXMgaXQuICBVbmNsZWFyCisgKiBpZiB0aGF0J3MgYSBwcm9ibGVtIHdpdGggdGhlIERNNjQ0NiBjaGlwIG9yIGp1c3Qgd2l0aCB0aGF0IGJvYXJkLgorICoKKyAqIEluIGVpdGhlciBjYXNlLCB0aGUgRE0zNTUgRVZNIGF1dG9tYXRlcyBEUlZWQlVTIHRoZSBub3JtYWwgd2F5LAorICogd2hlbiBKMTAgaXMgb3V0LCBhbmQgVEkgZG9jdW1lbnRzIGl0IGFzIGhhbmRsaW5nIE9URy4KKyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAorc3RhdGljIGludCB2YnVzX3N0YXRlID0gLTE7CisKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCiAgKiB0byBzYXRpc2Z5IHRoZSAxMDBtc2VjIEFfV0FJVF9WUklTRSB0aW1lb3V0Li4uCkBAIC0xNTAsMTIgKzE2NCwxMiBAQAogCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAogI2VuZGlmCS8qIEVWTSAqLwogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NvdXJjZV9wb3dlcihzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uLCBpbnQgaW1tZWRpYXRlKQogeworI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKGlzX29uKQogCQlpc19vbiA9IDE7CiAKQEAgLTE2MywxNiArMTc3LDE3IEBACiAJCXJldHVybjsKIAl2YnVzX3N0YXRlID0gIWlzX29uOwkJLyogMC8xIHZzICItMSA9PSB1bmtub3duL2luaXQiICovCiAKLSNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZXZtKCkpIHsKKwkJc3RhdGljIERFQ0xBUkVfV09SSyhldm1fdmJ1c193b3JrLCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyk7CisKIAkJaWYgKGltbWVkaWF0ZSkKIAkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7CiAJfQotI2VuZGlmCiAJaWYgKGltbWVkaWF0ZSkKIAkJdmJ1c19zdGF0ZSA9IGlzX29uOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbikKQEAgLTM5MSw2ICs0MDYsMTcgQEAKIAltdXNiLT5ib2FyZF9zZXRfdmJ1cyA9IGRhdmluY2lfc2V0X3ZidXM7CiAJZGF2aW5jaV9zb3VyY2VfcG93ZXIobXVzYiwgMCwgMSk7CiAKKwkvKiBkbTM1NSBFVk0gc3dhcHMgRCsvRC0gZm9yIHNpZ25hbCBpbnRlZ3JpdHksIGFuZAorCSAqIGlzIGNsb2NrZWQgZnJvbSB0aGUgbWFpbiAyNCBNSHogY3J5c3RhbC4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19kYXZpbmNpX2RtMzU1X2V2bSgpKSB7CisJCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkJcGh5X2N0cmwgJj0gfigzIDw8IDkpOworCQlwaHlfY3RybCB8PSBVU0JQSFlfREFUQVBPTDsKKwkJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCX0KKwogCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRywgMHgxKTsKIApAQCAtNDAxLDggKzQyNyw3IEBACiAKIAkvKiBOT1RFOiAgaXJxcyBhcmUgaW4gbWl4ZWQgbW9kZSwgbm90IGJ5cGFzcyB0byBwdXJlLW11c2IgKi8KIAlwcl9kZWJ1ZygiRGFWaW5jaSBPVEcgcmV2aXNpb24gJTA4eCBwaHkgJTAzeCBjb250cm9sICUwMnhcbiIsCi0JCXJldmlzaW9uLCBfX3Jhd19yZWFkbCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKSwKKwkJcmV2aXNpb24sIF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCksCiAJCW11c2JfcmVhZGIodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRykpOwogCiAJbXVzYi0+aXNyID0gZGF2aW5jaV9pbnRlcnJ1cHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuaCBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCmluZGV4IDdmYjYyMzguLjA0NmM4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCkBAIC0xNSwxNCArMTUsMjEgQEAKICAqLwogCiAvKiBJbnRlZ3JhdGVkIGhpZ2hzcGVlZC9vdGcgUEhZICovCi0jZGVmaW5lCVVTQlBIWV9DVExfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHgzNCkKLSNkZWZpbmUJVVNCUEhZX1BIWUNMS0dECQkoMSA8PCA4KQotI2RlZmluZQlVU0JQSFlfU0VTTkRFTgkJKDEgPDwgNykJLyogdihzZXNzX2VuZCkgY29tcGFyYXRvciAqLwotI2RlZmluZQlVU0JQSFlfVkJEVENURU4JCSgxIDw8IDYpCS8qIHYoYnVzKSBjb21wYXJhdG9yICovCi0jZGVmaW5lCVVTQlBIWV9QSFlQTExPTgkJKDEgPDwgNCkJLyogb3ZlcnJpZGUgcGxsIHN1c3BlbmQgKi8KLSNkZWZpbmUJVVNCUEhZX0NMS08xU0VMCQkoMSA8PCAzKQotI2RlZmluZQlVU0JQSFlfT1NDUERXTgkJKDEgPDwgMikKLSNkZWZpbmUJVVNCUEhZX1BIWVBEV04JCSgxIDw8IDApCisjZGVmaW5lIFVTQlBIWV9DVExfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHgzNCkKKyNkZWZpbmUgVVNCUEhZX0RBVEFQT0wJCUJJVCgxMSkJLyogKGRtMzU1KSBzd2l0Y2ggRCsvRC0gKi8KKyNkZWZpbmUgVVNCUEhZX1BIWUNMS0dECQlCSVQoOCkKKyNkZWZpbmUgVVNCUEhZX1NFU05ERU4JCUJJVCg3KQkvKiB2KHNlc3NfZW5kKSBjb21wYXJhdG9yICovCisjZGVmaW5lIFVTQlBIWV9WQkRUQ1RFTgkJQklUKDYpCS8qIHYoYnVzKSBjb21wYXJhdG9yICovCisjZGVmaW5lIFVTQlBIWV9WQlVTU0VOUwkJQklUKDUpCS8qIChkbTM1NSxybykgaXMgdmJ1cyA+IDAuNVYgKi8KKyNkZWZpbmUgVVNCUEhZX1BIWVBMTE9OCQlCSVQoNCkJLyogb3ZlcnJpZGUgcGxsIHN1c3BlbmQgKi8KKyNkZWZpbmUgVVNCUEhZX0NMS08xU0VMCQlCSVQoMykKKyNkZWZpbmUgVVNCUEhZX09TQ1BEV04JCUJJVCgyKQorI2RlZmluZSBVU0JQSFlfT1RHUERXTgkJQklUKDEpCisjZGVmaW5lIFVTQlBIWV9QSFlQRFdOCQlCSVQoMCkKKworI2RlZmluZSBETTM1NV9ERUVQU0xFRVBfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHg0OCkKKyNkZWZpbmUgRFJWVkJVU19GT1JDRQkJQklUKDIpCisjZGVmaW5lIERSVlZCVVNfT1ZFUlJJREUJQklUKDEpCiAKIC8qIEZvciBub3cgaW5jbHVkZSB1c2IgT1RHIG1vZHVsZSByZWdpc3RlcnMgaGVyZSAqLwogI2RlZmluZSBEQVZJTkNJX1VTQl9WRVJTSU9OX1JFRwkJMHgwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYWY3N2U0Ni4uMzM4Y2QxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC03NjksNyArNzY5LDcgQEAKIAkJY2FzZSBPVEdfU1RBVEVfQV9TVVNQRU5EOgogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIobXVzYl90b19oY2QobXVzYikpOwogCQkJbXVzYl9yb290X2Rpc2Nvbm5lY3QobXVzYik7Ci0JCQlpZiAobXVzYi0+YV93YWl0X2Jjb24gIT0gMCkKKwkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwICYmIGlzX290Z19lbmFibGVkKG11c2IpKQogCQkJCW11c2JfcGxhdGZvcm1fdHJ5X2lkbGUobXVzYiwgamlmZmllcwogCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMobXVzYi0+YV93YWl0X2Jjb24pKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggNjMwOTQ2YS4uZWZiMzliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC0zMzEsNyArMzMxLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNvbnRyb2w7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWluX2J1bGs7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW91dF9idWxrOwkvKiBvZiBtdXNiX3FoICovCi0Jc3RydWN0IG11c2JfcWgJCSpwZXJpb2RpY1szMl07CS8qIHRyZWUgb2YgaW50ZXJydXB0K2lzbyAqLwogI2VuZGlmCiAKIAkvKiBjYWxsZWQgd2l0aCBJUlFzIGJsb2NrZWQ7IE9OL25vbnplcm8gaW1wbGllcyBzdGFydGluZyBhIHNlc3Npb24sCkBAIC00NzksMTAgKzQ3OCwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgbXVzYl9yZWFkX2ZpZm9zaXplKHN0cnVjdCBtdXNiICptdXNiLAogCQlzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHU4IGVwbnVtKQogeworCXZvaWQgKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJdTggcmVnID0gMDsKIAogCS8qIHJlYWQgZnJvbSBjb3JlIHVzaW5nIGluZGV4ZWQgbW9kZWwgKi8KLQlyZWcgPSBtdXNiX3JlYWRiKGh3X2VwLT5yZWdzLCAweDEwICsgTVVTQl9GSUZPU0laRSk7CisJcmVnID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9FUF9PRkZTRVQoZXBudW0sIE1VU0JfRklGT1NJWkUpKTsKIAkvKiAwJ3MgcmV0dXJuZWQgd2hlbiBubyBtb3JlIGVuZHBvaW50cyAqLwogCWlmICghcmVnKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTUwOSw2ICs1MDksNyBAQAogewogCW11c2ItPmVuZHBvaW50c1swXS5tYXhfcGFja2V0X3N6X3R4ID0gTVVTQl9FUDBfRklGT1NJWkU7CiAJbXVzYi0+ZW5kcG9pbnRzWzBdLm1heF9wYWNrZXRfc3pfcnggPSBNVVNCX0VQMF9GSUZPU0laRTsKKwltdXNiLT5lbmRwb2ludHNbMF0uaXNfc2hhcmVkX2ZpZm8gPSB0cnVlOwogfQogI2VuZGlmIC8qIENPTkZJR19CTEFDS0ZJTiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCA2ZGJiZDA3Li40OTljNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTY0LDExICs2NCw4IEBACiAgKgogICogLSBETUEgKE1lbnRvci9PTUFQKSAuLi5oYXMgYXQgbGVhc3QgdG9nZ2xlIHVwZGF0ZSBwcm9ibGVtcwogICoKLSAqIC0gU3RpbGwgbm8gdHJhZmZpYyBzY2hlZHVsaW5nIGNvZGUgdG8gbWFrZSBOQUtpbmcgZm9yIGJ1bGsgb3IgY29udHJvbAotICogICB0cmFuc2ZlcnMgdW5hYmxlIHRvIHN0YXJ2ZSBvdGhlciByZXF1ZXN0czsgb3IgdG8gbWFrZSBlZmZpY2llbnQgdXNlCi0gKiAgIG9mIGhhcmR3YXJlIHdpdGggcGVyaW9kaWMgdHJhbnNmZXJzLiAgKE5vdGUgdGhhdCBuZXR3b3JrIGRyaXZlcnMKLSAqICAgY29tbW9ubHkgcG9zdCBidWxrIHJlYWRzIHRoYXQgc3RheSBwZW5kaW5nIGZvciBhIGxvbmcgdGltZTsgdGhlc2UKLSAqICAgd291bGQgbWFrZSB2ZXJ5IHZpc2libGUgdHJvdWJsZS4pCisgKiAtIFsyMy1mZWItMjAwOV0gbWluaW1hbCB0cmFmZmljIHNjaGVkdWxpbmcgdG8gYXZvaWQgYnVsayBSWCBwYWNrZXQKKyAqICAgc3RhcnZhdGlvbiAuLi4gbm90aGluZyB5ZXQgZm9yIFRYLCBpbnRlcnJ1cHQsIG9yIGJ1bGsuCiAgKgogICogLSBOb3QgdGVzdGVkIHdpdGggSE5QLCBidXQgc29tZSBTUlAgcGF0aHMgc2VlbSB0byBiZWhhdmUuCiAgKgpAQCAtODgsMTEgKzg1LDggQEAKICAqCiAgKiBDT05UUk9MIHRyYW5zZmVycyBhbGwgZ28gdGhyb3VnaCBlcDAuICBCVUxLIG9uZXMgZ28gdGhyb3VnaCBkZWRpY2F0ZWQgSU4KICAqIGFuZCBPVVQgZW5kcG9pbnRzIC4uLiBoYXJkd2FyZSBpcyBkZWRpY2F0ZWQgZm9yIHRob3NlICJhc3luYyIgcXVldWUocykuCi0gKgogICogKFllcywgYnVsayBfY291bGRfIHVzZSBtb3JlIG9mIHRoZSBlbmRwb2ludHMgdGhhbiB0aGF0LCBhbmQgd291bGQgZXZlbgotICogYmVuZWZpdCBmcm9tIGl0IC4uLiBvbmUgcmVtb3RlIGRldmljZSBtYXkgZWFzaWx5IGJlIE5BS2luZyB3aGlsZSBvdGhlcnMKLSAqIG5lZWQgdG8gcGVyZm9ybSB0cmFuc2ZlcnMgaW4gdGhhdCBzYW1lIGRpcmVjdGlvbi4gIFRoZSBzYW1lIHRoaW5nIGNvdWxkCi0gKiBiZSBkb25lIGluIHNvZnR3YXJlIHRob3VnaCwgYXNzdW1pbmcgZG1hIGNvb3BlcmF0ZXMuKQorICogYmVuZWZpdCBmcm9tIGl0LikKICAqCiAgKiBJTlRFUlVQUFQgYW5kIElTT0NIUk9OT1VTIHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkIHRvIHRoZSBvdGhlciBlbmRwb2ludHMuCiAgKiBTbyBmYXIgdGhhdCBzY2hlZHVsaW5nIGlzIGJvdGggZHVtYiBhbmQgb3B0aW1pc3RpYzogIHRoZSBlbmRwb2ludCB3aWxsIGJlCkBAIC0yMDEsOCArMTk1LDkgQEAKIAkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkvKiBidWxrLCBpbnRlcnJ1cHQgKi8KLQkJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJLyogYWN0dWFsX2xlbmd0aCBtYXkgYmUgbm9uemVybyBvbiByZXRyeSBwYXRocyAqLworCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCX0KIAogCURCRyg0LCAicWggJXAgdXJiICVwIGRldiVkIGVwJWQlcyVzLCBod19lcCAlZCwgJXAvJWRcbiIsCkBAIC0zOTUsNyArMzkwLDYgQEAKIAkJCSAqIGRlLWFsbG9jYXRlZCBpZiBpdCdzIHRyYWNrZWQgYW5kIGFsbG9jYXRlZDsKIAkJCSAqIGFuZCB3aGVyZSB3ZSdkIHVwZGF0ZSB0aGUgc2NoZWR1bGUgdHJlZS4uLgogCQkJICovCi0JCQltdXNiLT5wZXJpb2RpY1tlcC0+ZXBudW1dID0gTlVMTDsKIAkJCWtmcmVlKHFoKTsKIAkJCXFoID0gTlVMTDsKIAkJCWJyZWFrOwpAQCAtMTA0NSw3ICsxMDM5LDggQEAKIAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogY29udHJvbCB0cmFuc2ZlciwgaWYgYW5vdGhlciBvbmUgaXMgcXVldWVkLCBzbyB0aGF0Ci0JCSAqIGVwMCBpcyBtb3JlIGxpa2VseSB0byBzdGF5IGJ1c3kuCisJCSAqIGVwMCBpcyBtb3JlIGxpa2VseSB0byBzdGF5IGJ1c3kuICBUaGF0J3MgYWxyZWFkeSBkb25lCisJCSAqIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPmNvbnRyb2wpLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMTk3LDYgKzExOTIsNyBAQAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogdHJhbnNmZXIsIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciAobm9ucGVyaW9kaWMpIHR4IHVyYgogCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQorCQkgKiBUaGF0J3MgYWxyZWFkeSBkb25lIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKGJ1bGsgJiYgcWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+b3V0X2J1bGspLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMzU4LDYgKzEzNTQsNTAgQEAKIAogI2VuZGlmCiAKKy8qIFNjaGVkdWxlIG5leHQgUUggZnJvbSBtdXNiLT5pbl9idWxrIGFuZCBtb3ZlIHRoZSBjdXJyZW50IHFoIHRvCisgKiB0aGUgZW5kOyBhdm9pZHMgc3RhcnZhdGlvbiBmb3Igb3RoZXIgZW5kcG9pbnRzLgorICovCitzdGF0aWMgdm9pZCBtdXNiX2J1bGtfcnhfbmFrX3RpbWVvdXQoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCBtdXNiX2h3X2VwICplcCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwJKmRtYTsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXZvaWQgX19pb21lbQkJKm1iYXNlID0gbXVzYi0+bXJlZ3M7CisJdm9pZCBfX2lvbWVtCQkqZXBpbyA9IGVwLT5yZWdzOworCXN0cnVjdCBtdXNiX3FoCQkqY3VyX3FoLCAqbmV4dF9xaDsKKwl1MTYJCQlyeF9jc3I7CisKKwltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXAtPmVwbnVtKTsKKwlkbWEgPSBpc19kbWFfY2FwYWJsZSgpID8gZXAtPnJ4X2NoYW5uZWwgOiBOVUxMOworCisJLyogY2xlYXIgbmFrIHRpbWVvdXQgYml0ICovCisJcnhfY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKTsKKwlyeF9jc3IgfD0gTVVTQl9SWENTUl9IX1daQ19CSVRTOworCXJ4X2NzciAmPSB+TVVTQl9SWENTUl9EQVRBRVJST1I7CisJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgcnhfY3NyKTsKKworCWN1cl9xaCA9IGZpcnN0X3FoKCZtdXNiLT5pbl9idWxrKTsKKwlpZiAoY3VyX3FoKSB7CisJCXVyYiA9IG5leHRfdXJiKGN1cl9xaCk7CisJCWlmIChkbWFfY2hhbm5lbF9zdGF0dXMoZG1hKSA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgeworCQkJZG1hLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQ09SRV9BQk9SVDsKKwkJCW11c2ItPmRtYV9jb250cm9sbGVyLT5jaGFubmVsX2Fib3J0KGRtYSk7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gZG1hLT5hY3R1YWxfbGVuOworCQkJZG1hLT5hY3R1YWxfbGVuID0gMEw7CisJCX0KKwkJbXVzYl9zYXZlX3RvZ2dsZShlcCwgMSwgdXJiKTsKKworCQkvKiBtb3ZlIGN1cl9xaCB0byBlbmQgb2YgcXVldWUgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmN1cl9xaC0+cmluZywgJm11c2ItPmluX2J1bGspOworCisJCS8qIGdldCB0aGUgbmV4dCBxaCBmcm9tIG11c2ItPmluX2J1bGsgKi8KKwkJbmV4dF9xaCA9IGZpcnN0X3FoKCZtdXNiLT5pbl9idWxrKTsKKworCQkvKiBzZXQgcnhfcmVpbml0IGFuZCBzY2hlZHVsZSB0aGUgbmV4dCBxaCAqLworCQllcC0+cnhfcmVpbml0ID0gMTsKKwkJbXVzYl9zdGFydF91cmIobXVzYiwgMSwgbmV4dF9xaCk7CisJfQorfQorCiAvKgogICogU2VydmljZSBhbiBSWCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBJTiBlbmRwb2ludDsgZG9jcyBjb3ZlciBidWxrLCBpc28sCiAgKiBhbmQgaGlnaC1iYW5kd2lkdGggSU4gdHJhbnNmZXIgY2FzZXMuCkBAIC0xNDIxLDE4ICsxNDYxLDI2IEBACiAJfSBlbHNlIGlmIChyeF9jc3IgJiBNVVNCX1JYQ1NSX0RBVEFFUlJPUikgewogCiAJCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9JU09DICE9IHFoLT50eXBlKSB7Ci0JCQkvKiBOT1RFIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCi0JCQkgKiB0cmFuc2ZlciwgaWYgdGhlcmUncyBzb21lIG90aGVyIChub25wZXJpb2RpYykgcnggdXJiCi0JCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQotCQkJICoKLQkJCSAqIGlmIChidWxrICYmIHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPmluX2J1bGspLCB0aGVuCi0JCQkgKiB3ZSBoYXZlIGEgY2FuZGlkYXRlLi4uIE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvcgotCQkJICovCiAJCQlEQkcoNiwgIlJYIGVuZCAlZCBOQUsgdGltZW91dFxuIiwgZXBudW0pOworCisJCQkvKiBOT1RFOiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IsIHNvIHdlIHdhbnQgdG8KKwkJCSAqIGNvbnRpbnVlLiAgRXhjZXB0IC4uLiBpZiB0aGVyZSdzIGEgcmVxdWVzdCBmb3IKKwkJCSAqIGFub3RoZXIgUUgsIHVzZSB0aGF0IGluc3RlYWQgb2Ygc3RhcnZpbmcgaXQuCisJCQkgKgorCQkJICogRGV2aWNlcyBsaWtlIEV0aGVybmV0IGFuZCBzZXJpYWwgYWRhcHRlcnMga2VlcAorCQkJICogcmVhZHMgcG9zdGVkIGF0IGFsbCB0aW1lcywgd2hpY2ggd2lsbCBzdGFydmUKKwkJCSAqIG90aGVyIGRldmljZXMgd2l0aG91dCB0aGlzIGxvZ2ljLgorCQkJICovCisJCQlpZiAodXNiX3BpcGVidWxrKHVyYi0+cGlwZSkKKwkJCQkJJiYgcWgtPm11eCA9PSAxCisJCQkJCSYmICFsaXN0X2lzX3Npbmd1bGFyKCZtdXNiLT5pbl9idWxrKSkgeworCQkJCW11c2JfYnVsa19yeF9uYWtfdGltZW91dChtdXNiLCBod19lcCk7CisJCQkJcmV0dXJuOworCQkJfQogCQkJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwbnVtKTsKLQkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsCi0JCQkJCU1VU0JfUlhDU1JfSF9XWkNfQklUUwotCQkJCQl8IE1VU0JfUlhDU1JfSF9SRVFQS1QpOworCQkJcnhfY3NyIHw9IE1VU0JfUlhDU1JfSF9XWkNfQklUUzsKKwkJCXJ4X2NzciAmPSB+TVVTQl9SWENTUl9EQVRBRVJST1I7CisJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCByeF9jc3IpOwogCiAJCQlnb3RvIGZpbmlzaDsKIAkJfSBlbHNlIHsKQEAgLTE3MTEsMzEgKzE3NTksMjcgQEAKIAogCS8qIGVsc2UsIHBlcmlvZGljIHRyYW5zZmVycyBnZXQgbXV4ZWQgdG8gb3RoZXIgZW5kcG9pbnRzICovCiAKLQkvKiBGSVhNRSB0aGlzIGRvZXNuJ3QgY29uc2lkZXIgZGlyZWN0aW9uLCBzbyBpdCBjYW4gb25seQotCSAqIHdvcmsgZm9yIG9uZSBoYWxmIG9mIHRoZSBlbmRwb2ludCBoYXJkd2FyZSwgYW5kIGFzc3VtZXMKLQkgKiB0aGUgcHJldmlvdXMgY2FzZXMgaGFuZGxlZCBhbGwgbm9uLXNoYXJlZCBlbmRwb2ludHMuLi4KLQkgKi8KLQotCS8qIHdlIGtub3cgdGhpcyBxaCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsIHNvIGFsbCB3ZSBuZWVkIHRvIGRvCisJLyoKKwkgKiBXZSBrbm93IHRoaXMgcWggaGFzbid0IGJlZW4gc2NoZWR1bGVkLCBzbyBhbGwgd2UgbmVlZCB0byBkbwogCSAqIGlzIGNob29zZSB3aGljaCBoYXJkd2FyZSBlbmRwb2ludCB0byBwdXQgaXQgb24gLi4uCiAJICoKIAkgKiBSRVZJU0lUIHdoYXQgd2UgcmVhbGx5IHdhbnQgaGVyZSBpcyBhIHJlZ3VsYXIgc2NoZWR1bGUgdHJlZQotCSAqIGxpa2UgZS5nLiBPSENJIHVzZXMsIGJ1dCBmb3Igbm93IG11c2ItPnBlcmlvZGljIGlzIGp1c3QgYW4KLQkgKiBhcnJheSBvZiB0aGUgX3NpbmdsZV8gbG9naWNhbCBlbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggYQotCSAqIGdpdmVuIHBoeXNpY2FsIG9uZSAoaWRlbnRpdHkgbWFwcGluZyBsb2dpY2FsLT5waHlzaWNhbCkuCi0JICoKLQkgKiB0aGF0IHNpbXBsaXN0aWMgYXBwcm9hY2ggbWFrZXMgVFQgc2NoZWR1bGluZyBhIGxvdCBzaW1wbGVyOwotCSAqIHRoZXJlIGlzIG5vbmUsIGFuZCB0aHVzIG5vbmUgb2YgaXRzIGNvbXBsZXhpdHkuLi4KKwkgKiBsaWtlIGUuZy4gT0hDSSB1c2VzLgogCSAqLwogCWJlc3RfZGlmZiA9IDQwOTY7CiAJYmVzdF9lbmQgPSAtMTsKIAotCWZvciAoZXBudW0gPSAxOyBlcG51bSA8IG11c2ItPm5yX2VuZHBvaW50czsgZXBudW0rKykgeworCWZvciAoZXBudW0gPSAxLCBod19lcCA9IG11c2ItPmVuZHBvaW50cyArIDE7CisJCQllcG51bSA8IG11c2ItPm5yX2VuZHBvaW50czsKKwkJCWVwbnVtKyssIGh3X2VwKyspIHsKIAkJaW50CWRpZmY7CiAKLQkJaWYgKG11c2ItPnBlcmlvZGljW2VwbnVtXSkKKwkJaWYgKGlzX2luIHx8IGh3X2VwLT5pc19zaGFyZWRfZmlmbykgeworCQkJaWYgKGh3X2VwLT5pbl9xaCAgIT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlCWlmIChod19lcC0+b3V0X3FoICE9IE5VTEwpCiAJCQljb250aW51ZTsKLQkJaHdfZXAgPSAmbXVzYi0+ZW5kcG9pbnRzW2VwbnVtXTsKKwogCQlpZiAoaHdfZXAgPT0gbXVzYi0+YnVsa19lcCkKIAkJCWNvbnRpbnVlOwogCkBAIC0xNzU2LDYgKzE4MDAsMTcgQEAKIAkJCWhlYWQgPSAmbXVzYi0+aW5fYnVsazsKIAkJZWxzZQogCQkJaGVhZCA9ICZtdXNiLT5vdXRfYnVsazsKKworCQkvKiBFbmFibGUgYnVsayBSWCBOQUsgdGltZW91dCBzY2hlbWUgd2hlbiBidWxrIHJlcXVlc3RzIGFyZQorCQkgKiBtdWx0aXBsZXhlZC4gIFRoaXMgc2NoZW1lIGRvZW4ndCB3b3JrIGluIGhpZ2ggc3BlZWQgdG8gZnVsbAorCQkgKiBzcGVlZCBzY2VuYXJpbyBhcyBOQUsgaW50ZXJydXB0cyBhcmUgbm90IGNvbWluZyBmcm9tIGEKKwkJICogZnVsbCBzcGVlZCBkZXZpY2UgY29ubmVjdGVkIHRvIGEgaGlnaCBzcGVlZCBkZXZpY2UuCisJCSAqIE5BSyB0aW1lb3V0IGludGVydmFsIGlzIDggKDEyOCB1ZnJhbWUgb3IgMTZtcykgZm9yIEhTIGFuZAorCQkgKiA0ICg4IGZyYW1lIG9yIDhtcykgZm9yIEZTIGRldmljZS4KKwkJICovCisJCWlmIChpc19pbiAmJiBxaC0+ZGV2KQorCQkJcWgtPmludHZfcmVnID0KKwkJCQkoVVNCX1NQRUVEX0hJR0ggPT0gcWgtPmRldi0+c3BlZWQpID8gOCA6IDQ7CiAJCWdvdG8gc3VjY2VzczsKIAl9IGVsc2UgaWYgKGJlc3RfZW5kIDwgMCkgewogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTE3NjQsNyArMTgxOSw2IEBACiAJaWRsZSA9IDE7CiAJcWgtPm11eCA9IDA7CiAJaHdfZXAgPSBtdXNiLT5lbmRwb2ludHMgKyBiZXN0X2VuZDsKLQltdXNiLT5wZXJpb2RpY1tiZXN0X2VuZF0gPSBxaDsKIAlEQkcoNCwgInFoICVwIHBlcmlvZGljIHNsb3QgJWRcbiIsIHFoLCBiZXN0X2VuZCk7CiBzdWNjZXNzOgogCWlmIChoZWFkKSB7CkBAIC0xODg4LDEzICsxOTQyLDExIEBACiAJCSAqCiAJCSAqIFRoZSBkb3duc2lkZSBvZiBkaXNhYmxpbmcgdGhpcyBpcyB0aGF0IHRyYW5zZmVyIHNjaGVkdWxpbmcKIAkJICogZ2V0cyBWRVJZIHVuZmFpciBmb3Igbm9ucGVyaW9kaWMgdHJhbnNmZXJzOyBhIG1pc2JlaGF2aW5nCi0JCSAqIHBlcmlwaGVyYWwgY291bGQgbWFrZSB0aGF0IGh1cnQuICBPciBmb3IgcmVhZHMsIG9uZSB0aGF0J3MKLQkJICogcGVyZmVjdGx5IG5vcm1hbDogIG5ldHdvcmsgYW5kIG90aGVyIGRyaXZlcnMga2VlcCByZWFkcwotCQkgKiBwb3N0ZWQgYXQgYWxsIHRpbWVzLCBoYXZpbmcgb25lIHBlbmRpbmcgZm9yIGEgd2VlayBzaG91bGQKLQkJICogYmUgcGVyZmVjdGx5IHNhZmUuCisJCSAqIHBlcmlwaGVyYWwgY291bGQgbWFrZSB0aGF0IGh1cnQuICBUaGF0J3MgcGVyZmVjdGx5IG5vcm1hbAorCQkgKiBmb3IgcmVhZHMgZnJvbSBuZXR3b3JrIG9yIHNlcmlhbCBhZGFwdGVycyAuLi4gc28gd2UgaGF2ZQorCQkgKiBwYXJ0aWFsIE5BS2xpbWl0IHN1cHBvcnQgZm9yIGJ1bGsgUlguCiAJCSAqCi0JCSAqIFRoZSB1cHNpZGUgb2YgZGlzYWJsaW5nIGl0IGlzIGF2b2lkbmcgdHJhbnNmZXIgc2NoZWR1bGluZwotCQkgKiBjb2RlIHRvIHB1dCB0aGlzIGFzaWRlIGZvciB3aGlsZS4KKwkJICogVGhlIHVwc2lkZSBvZiBkaXNhYmxpbmcgaXQgaXMgc2ltcGxlciB0cmFuc2ZlciBzY2hlZHVsaW5nLgogCQkgKi8KIAkJaW50ZXJ2YWwgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCmluZGV4IGUwZTljZTUuLmJmNjc3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCWRlc2MtPmJEZXNjTGVuZ3RoID0gOTsKIAkJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKIAkJZGVzYy0+Yk5iclBvcnRzID0gMTsKLQkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNigKIAkJCQkgIDB4MDAwMQkvKiBwZXItcG9ydCBwb3dlciBzd2l0Y2hpbmcgKi8KIAkJCQl8IDB4MDAxMAkvKiBubyBvdmVyY3VycmVudCByZXBvcnRpbmcgKi8KIAkJCQkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcgYi9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZwppbmRleCBlZTU1YjQ0Li5hYTg4NGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZwpAQCAtNDMsNyArNDMsNyBAQAogCiBjb25maWcgVFdMNDAzMF9VU0IKIAl0cmlzdGF0ZSAiVFdMNDAzMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgotCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgUkVHVUxBVE9SX1RXTDQwMzAKIAlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFVTQiBPVEcgdHJhbnNjZWl2ZXIgb24gVFdMNDAzMApAQCAtNTEsNCArNTEsMTIgQEAKIAkgIFRoaXMgdHJhbnNjZWl2ZXIgc3VwcG9ydHMgaGlnaCBhbmQgZnVsbCBzcGVlZCBkZXZpY2VzIHBsdXMsCiAJICBpbiBob3N0IG1vZGUsIGxvdyBzcGVlZC4KIAorY29uZmlnIE5PUF9VU0JfWENFSVYKKwl0cmlzdGF0ZSAiTk9QIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKKwloZWxwCisJIHRoaXMgZHJpdmVyIGlzIHRvIGJlIHVzZWQgYnkgYWxsIHRoZSB1c2IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlcgorCSBidWlsdC1pbiB3aXRoIHVzYiBpcCBvciB3aGljaCBhcmUgYXV0b25vbW91cyBhbmQgZG9lc24ndCByZXF1aXJlIGFueQorCSBwaHkgcHJvZ3JhbW1pbmcgc3VjaCBhcyBJU1AxeDA0IGV0Yy4KKwogZW5kaWYgIyBVU0IgfHwgT1RHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKaW5kZXggZDczYzdjZi4uMjA4MTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19VU0JfR1BJT19WQlVTKQkrPSBncGlvX3ZidXMubwogb2JqLSQoQ09ORklHX0lTUDEzMDFfT01BUCkJKz0gaXNwMTMwMV9vbWFwLm8KIG9iai0kKENPTkZJR19UV0w0MDMwX1VTQikJKz0gdHdsNDAzMC11c2Iubworb2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpCSs9IG5vcC11c2IteGNlaXYubwogCiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9ERUJVRykJKz0gLURERUJVRwogY2NmbGFncy0kKENPTkZJR19VU0JfR0FER0VUX0RFQlVHKSArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMgYi9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKaW5kZXggNjNhNjAzNi4uMWMyNmM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCkBAIC0zNCw2ICszNSw3IEBACiAJc3RydWN0IHJlZ3VsYXRvciAgICAgICAqdmJ1c19kcmF3OwogCWludAkJCXZidXNfZHJhd19lbmFibGVkOwogCXVuc2lnbmVkCQltQTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKIApAQCAtNzYsMjQgKzc4LDI2IEBACiAJZ3Bpb192YnVzLT5tQSA9IG1BOwogfQogCi0vKiBWQlVTIGNoYW5nZSBJUlEgaGFuZGxlciAqLwotc3RhdGljIGlycXJldHVybl90IGdwaW9fdmJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaXNfdmJ1c19wb3dlcmVkKHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEgKmdwaW9fdmJ1cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBncGlvLCB2YnVzOworCWludCB2YnVzOwogCiAJdmJ1cyA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX3ZidXMpOwogCWlmIChwZGF0YS0+Z3Bpb192YnVzX2ludmVydGVkKQogCQl2YnVzID0gIXZidXM7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJWQlVTICVzIChnYWRnZXQ6ICVzKVxuIiwKLQkJdmJ1cyA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiLAotCQlncGlvX3ZidXMtPm90Zy5nYWRnZXQgPyBncGlvX3ZidXMtPm90Zy5nYWRnZXQtPm5hbWUgOiAibm9uZSIpOworCXJldHVybiB2YnVzOworfQorCitzdGF0aWMgdm9pZCBncGlvX3ZidXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGdwaW9fdmJ1c19kYXRhICpncGlvX3ZidXMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdwaW9fdmJ1c19kYXRhLCB3b3JrKTsKKwlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBncGlvX3ZidXMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgZ3BpbzsKIAogCWlmICghZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCXJldHVybjsKIAogCS8qIFBlcmlwaGVyYWwgY29udHJvbGxlcnMgd2hpY2ggbWFuYWdlIHRoZSBwdWxsdXAgdGhlbXNlbHZlcyB3b24ndCBoYXZlCiAJICogZ3Bpb19wdWxsdXAgY29uZmlndXJlZCBoZXJlLiAgSWYgaXQncyBjb25maWd1cmVkIGhlcmUsIHdlJ2xsIGRvIHdoYXQKQEAgLTEwMSw3ICsxMDUsNyBAQAogCSAqIHRoYXQgbWF5IGNvbXBsaWNhdGUgdXNiX2dhZGdldF97LGRpc31jb25uZWN0KCkgc3VwcG9ydC4KIAkgKi8KIAlncGlvID0gcGRhdGEtPmdwaW9fcHVsbHVwOwotCWlmICh2YnVzKSB7CisJaWYgKGlzX3ZidXNfcG93ZXJlZChwZGF0YSkpIHsKIAkJZ3Bpb192YnVzLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOwogCQl1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdChncGlvX3ZidXMtPm90Zy5nYWRnZXQpOwogCkBAIC0xMjEsNiArMTI1LDIxIEBACiAJCXVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0KGdwaW9fdmJ1cy0+b3RnLmdhZGdldCk7CiAJCWdwaW9fdmJ1cy0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKIAl9Cit9CisKKy8qIFZCVVMgY2hhbmdlIElSUSBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb192YnVzX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOworCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBncGlvX3ZidXNfZGF0YSAqZ3Bpb192YnVzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJWQlVTICVzIChnYWRnZXQ6ICVzKVxuIiwKKwkJaXNfdmJ1c19wb3dlcmVkKHBkYXRhKSA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiLAorCQlncGlvX3ZidXMtPm90Zy5nYWRnZXQgPyBncGlvX3ZidXMtPm90Zy5nYWRnZXQtPm5hbWUgOiAibm9uZSIpOworCisJaWYgKGdwaW9fdmJ1cy0+b3RnLmdhZGdldCkKKwkJc2NoZWR1bGVfd29yaygmZ3Bpb192YnVzLT53b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTI1Nyw2ICsyNzYsNyBAQAogCQkJaXJxLCBlcnIpOwogCQlnb3RvIGVycl9pcnE7CiAJfQorCUlOSVRfV09SSygmZ3Bpb192YnVzLT53b3JrLCBncGlvX3ZidXNfd29yayk7CiAKIAkvKiBvbmx5IGFjdGl2ZSB3aGVuIGEgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQgKi8KIAllcnIgPSBvdGdfc2V0X3RyYW5zY2VpdmVyKCZncGlvX3ZidXMtPm90Zyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkzM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKKyAqCisgKiBOT1AgVVNCIHRyYW5zY2VpdmVyIGZvciBhbGwgVVNCIHRyYW5zY2VpdmVyIHdoaWNoIGFyZSBlaXRoZXIgYnVpbHQtaW4KKyAqIGludG8gVVNCIElQIG9yIHdoaWNoIGFyZSBtb3N0bHkgYXV0b25vbW91cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IEFqYXkgS3VtYXIgR3VwdGEgPGFqYXkuZ3VwdGFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEN1cnJlbnQgc3RhdHVzOgorICogCXRoaXMgaXMgdG8gYWRkICJub3AiIHRyYW5zY2VpdmVyIGZvciBhbGwgdGhvc2UgcGh5IHdoaWNoIGlzCisgKiAJYXV0b25vbW91cyBzdWNoIGFzIGlzcDE1MDQgZXRjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKworc3RydWN0IG5vcF91c2JfeGNlaXYgeworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJb3RnOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cit9OworCitzdGF0aWMgdTY0IG5vcF94Y2Vpdl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcF94Y2Vpdl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm5vcF91c2JfeGNlaXYiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJm5vcF94Y2Vpdl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV8zMkJJVF9NQVNLLAorCQkucGxhdGZvcm1fZGF0YSAgICAgICAgICA9IE5VTEwsCisJfSwKK307CisKK3ZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKQoreworCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5vcF94Y2Vpdl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciB1c2Igbm9wIHRyYW5zY2VpdmVyXG4iKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCB1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmbm9wX3hjZWl2X2RldmljZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5vcF91c2JfeGNlaXYgKnhjZWl2X3RvX25vcChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4KQoreworCXJldHVybiBjb250YWluZXJfb2YoeCwgc3RydWN0IG5vcF91c2JfeGNlaXYsIG90Zyk7Cit9CisKK3N0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsIGludCBzdXNwZW5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vcF9zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LAorCQlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3A7CisKKwlpZiAoIXgpCisJCXJldHVybiAtRU5PREVWOworCisJbm9wID0geGNlaXZfdG9fbm9wKHgpOworCisJaWYgKCFnYWRnZXQpIHsKKwkJbm9wLT5vdGcuZ2FkZ2V0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbm9wLT5vdGcuZ2FkZ2V0ID0gZ2FkZ2V0OworCW5vcC0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3Bfc2V0X2hvc3Qoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwgc3RydWN0IHVzYl9idXMgKmhvc3QpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcDsKKworCWlmICgheCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlub3AgPSB4Y2Vpdl90b19ub3AoeCk7CisKKwlpZiAoIWhvc3QpIHsKKwkJbm9wLT5vdGcuaG9zdCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW5vcC0+b3RnLmhvc3QgPSBob3N0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBub3BfdXNiX3hjZWl2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYJKm5vcDsKKwlpbnQgZXJyOworCisJbm9wID0ga3phbGxvYyhzaXplb2YgKm5vcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFub3ApCisJCXJldHVybiAtRU5PTUVNOworCisJbm9wLT5kZXYJCT0gJnBkZXYtPmRldjsKKwlub3AtPm90Zy5kZXYJCT0gbm9wLT5kZXY7CisJbm9wLT5vdGcubGFiZWwJCT0gIm5vcC14Y2VpdiI7CisJbm9wLT5vdGcuc3RhdGUJCT0gT1RHX1NUQVRFX1VOREVGSU5FRDsKKwlub3AtPm90Zy5zZXRfaG9zdAk9IG5vcF9zZXRfaG9zdDsKKwlub3AtPm90Zy5zZXRfcGVyaXBoZXJhbAk9IG5vcF9zZXRfcGVyaXBoZXJhbDsKKwlub3AtPm90Zy5zZXRfc3VzcGVuZAk9IG5vcF9zZXRfc3VzcGVuZDsKKworCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJm5vcC0+b3RnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIHRyYW5zY2VpdmVyLCBlcnI6ICVkXG4iLAorCQkJZXJyKTsKKwkJZ290byBleGl0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJa2ZyZWUobm9wKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBub3BfdXNiX3hjZWl2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW90Z19zZXRfdHJhbnNjZWl2ZXIoTlVMTCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShub3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5vcF91c2JfeGNlaXZfZHJpdmVyID0geworCS5wcm9iZQkJPSBub3BfdXNiX3hjZWl2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aobm9wX3VzYl94Y2Vpdl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJub3BfdXNiX3hjZWl2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5vcF91c2JfeGNlaXZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5vcF91c2JfeGNlaXZfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChub3BfdXNiX3hjZWl2X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbm9wX3VzYl94Y2Vpdl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5vcF91c2JfeGNlaXZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG5vcF91c2JfeGNlaXZfZXhpdCk7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06bm9wX3VzYl94Y2VpdiIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMgSW5jIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5PUCBVU0IgVHJhbnNjZWl2ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYyBiL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCmluZGV4IDQxNmU0NDEuLmQ5NDc4ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogCiAvKiBSZWdpc3RlciBkZWZpbmVzICovCkBAIC0yNDYsNiArMjQ4LDExIEBACiAJc3RydWN0IG90Z190cmFuc2NlaXZlcglvdGc7CiAJc3RydWN0IGRldmljZQkJKmRldjsKIAorCS8qIFRXTDQwMzAgaW50ZXJuYWwgVVNCIHJlZ3VsYXRvciBzdXBwbGllcyAqLworCXN0cnVjdCByZWd1bGF0b3IJKnVzYjF2NTsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp1c2Ixdjg7CisJc3RydWN0IHJlZ3VsYXRvcgkqdXNiM3YxOworCiAJLyogZm9yIHZidXMgcmVwb3J0aW5nIHdpdGggaXJxcyBkaXNhYmxlZCAqLwogCXNwaW5sb2NrX3QJCWxvY2s7CiAKQEAgLTQzNCw2ICs0NDEsMTggQEAKIAogCXB3ciA9IHR3bDQwMzBfdXNiX3JlYWQodHdsLCBQSFlfUFdSX0NUUkwpOwogCWlmIChvbikgeworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiM3YxKTsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjF2OCk7CisJCS8qCisJCSAqIERpc2FibGluZyB1c2IzdjEgcmVndWxhdG9yICg9IHdyaXRpbmcgMCB0byBWVVNCM1YxX0RFVl9HUlAKKwkJICogaW4gdHdsNDAzMCkgcmVzZXRzIHRoZSBWVVNCX0RFRElDQVRFRDIgcmVnaXN0ZXIuIFRoaXMgcmVzZXQKKwkJICogZW5hYmxlcyBWVVNCM1YxX1NMRUVQIGJpdCB0aGF0IHJlbWFwcyB1c2IzdjEgQUNUSVZFIHN0YXRlIHRvCisJCSAqIFNMRUVQLiBXZSB3b3JrIGFyb3VuZCB0aGlzIGJ5IGNsZWFyaW5nIHRoZSBiaXQgYWZ0ZXIgdXN2M3YxCisJCSAqIGlzIHJlLWFjdGl2YXRlZC4gVGhpcyBlbnN1cmVzIHRoYXQgVlVTQjNWMSBpcyByZWFsbHkgYWN0aXZlLgorCQkgKi8KKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsCisJCQkJCQkJVlVTQl9ERURJQ0FURUQyKTsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjF2NSk7CiAJCXB3ciAmPSB+UEhZX1BXUl9QSFlQV0Q7CiAJCVdBUk5fT04odHdsNDAzMF91c2Jfd3JpdGVfdmVyaWZ5KHR3bCwgUEhZX1BXUl9DVFJMLCBwd3IpIDwgMCk7CiAJCXR3bDQwMzBfdXNiX3dyaXRlKHR3bCwgUEhZX0NMS19DVFJMLApAQCAtNDQzLDYgKzQ2Miw5IEBACiAJfSBlbHNlICB7CiAJCXB3ciB8PSBQSFlfUFdSX1BIWVBXRDsKIAkJV0FSTl9PTih0d2w0MDMwX3VzYl93cml0ZV92ZXJpZnkodHdsLCBQSFlfUFdSX0NUUkwsIHB3cikgPCAwKTsKKwkJcmVndWxhdG9yX2Rpc2FibGUodHdsLT51c2IxdjUpOworCQlyZWd1bGF0b3JfZGlzYWJsZSh0d2wtPnVzYjF2OCk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiM3YxKTsKIAl9CiB9CiAKQEAgLTQ2OCw3ICs0OTAsNyBAQAogCXR3bC0+YXNsZWVwID0gMDsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF91c2JfbGRvX2luaXQoc3RydWN0IHR3bDQwMzBfdXNiICp0d2wpCitzdGF0aWMgaW50IHR3bDQwMzBfdXNiX2xkb19pbml0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQogewogCS8qIEVuYWJsZSB3cml0aW5nIHRvIHBvd2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAweEMwLCBQUk9URUNUX0tFWSk7CkBAIC00ODAsMjAgKzUwMiw0NSBAQAogCS8qIGlucHV0IHRvIFZVU0IzVjEgTERPIGlzIGZyb20gVkJBVCwgbm90IFZCVVMgKi8KIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgxNCwgVlVTQl9ERURJQ0FURUQxKTsKIAotCS8qIHR1cm4gb24gMy4xViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjNWMV9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDMuMVYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IzVjFfREVWX0dSUCk7CisKKwl0d2wtPnVzYjN2MSA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IzdjEiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiM3YxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9UWVBFKTsKIAotCS8qIHR1cm4gb24gMS41ViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjFWNV9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDEuNVYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjVfREVWX0dSUCk7CisKKwl0d2wtPnVzYjF2NSA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IxdjUiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiMXY1KSkKKwkJZ290byBmYWlsMTsKKwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY1X1RZUEUpOwogCi0JLyogdHVybiBvbiAxLjhWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCMVY4X0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMS44ViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWOF9ERVZfR1JQKTsKKworCXR3bC0+dXNiMXY4ID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjF2OCIpOworCWlmIChJU19FUlIodHdsLT51c2IxdjgpKQorCQlnb3RvIGZhaWwyOworCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjhfVFlQRSk7CiAKIAkvKiBkaXNhYmxlIGFjY2VzcyB0byBwb3dlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUFJPVEVDVF9LRVkpOworCisJcmV0dXJuIDA7CisKK2ZhaWwyOgorCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjUpOworCXR3bC0+dXNiMXY1ID0gTlVMTDsKK2ZhaWwxOgorCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IzdjEpOworCXR3bC0+dXNiM3YxID0gTlVMTDsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHNzaXplX3QgdHdsNDAzMF91c2JfdmJ1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTU5OCw3ICs2NDUsNyBAQAogewogCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0d2w0MDMwX3VzYgkqdHdsOwotCWludAkJCXN0YXR1czsKKwlpbnQJCQlzdGF0dXMsIGVycjsKIAogCWlmICghcGRhdGEpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm1fZGF0YSBub3QgYXZhaWxhYmxlXG4iKTsKQEAgLTYyMiw3ICs2NjksMTIgQEAKIAkvKiBpbml0IHNwaW5sb2NrIGZvciB3b3JrcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmdHdsLT5sb2NrKTsKIAotCXR3bDQwMzBfdXNiX2xkb19pbml0KHR3bCk7CisJZXJyID0gdHdsNDAzMF91c2JfbGRvX2luaXQodHdsKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImxkbyBpbml0IGZhaWxlZFxuIik7CisJCWtmcmVlKHR3bCk7CisJCXJldHVybiBlcnI7CisJfQogCW90Z19zZXRfdHJhbnNjZWl2ZXIoJnR3bC0+b3RnKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHR3bCk7CkBAIC02ODgsNiArNzQwLDkgQEAKIAl0d2w0MDMwX3VzYl9jbGVhcl9iaXRzKHR3bCwgUE9XRVJfQ1RSTCwgUE9XRVJfQ1RSTF9PVEdfRU5BQik7CiAKIAl0d2w0MDMwX3BoeV9wb3dlcih0d2wsIDApOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjUpOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjgpOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IzdjEpOwogCiAJa2ZyZWUodHdsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCBiMzYxZjA1Li5hNjVmOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRpZ2lfYWNjZWxlcG9ydC4KIAotY29uZmlnIFVTQl9TRVJJQUxfQ1AyMTAxCi0JdHJpc3RhdGUgIlVTQiBDUDIxMDEgVUFSVCBCcmlkZ2UgQ29udHJvbGxlciIKK2NvbmZpZyBVU0JfU0VSSUFMX0NQMjEwWAorCXRyaXN0YXRlICJVU0IgQ1AyMTB4IGZhbWlseSBvZiBVQVJUIEJyaWRnZSBDb250cm9sbGVycyIKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIgYmFzZWQgVVNCIHRvIFJTMjMyCi0JICBjb252ZXJ0ZXIuCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIvQ1AyMTAzIGJhc2VkIFVTQgorCSAgdG8gUlMyMzIgY29udmVydGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3AyMTAxLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNwMjEweC4KIAogY29uZmlnIFVTQl9TRVJJQUxfQ1lQUkVTU19NOAogCXRyaXN0YXRlICJVU0IgQ3lwcmVzcyBNOCBVU0IgU2VyaWFsIERyaXZlciIKQEAgLTQ3Miw2ICs0NzIsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG90aTY4NTguCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1FVQUxDT01NCisJdHJpc3RhdGUgIlVTQiBRdWFsY29tbSBTZXJpYWwgbW9kZW0iCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFF1YWxjb21tIFVTQiBtb2RlbSBkZXZpY2UuICBUaGVzZSBhcmUKKwkgIHVzdWFsbHkgd2lyZWxlc3MgY2VsbHVsYXIgbW9kZW1zLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxY3NlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfU1BDUDhYNQogCXRyaXN0YXRlICJVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlciIKIAloZWxwCkBAIC01MTUsNiArNTI0LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaWVycmEuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1NZTUJPTAorCXRyaXN0YXRlICJVU0IgU3ltYm9sIEJhcmNvZGUgZHJpdmVyIChzZXJpYWwgbW9kZSkiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBTeW1ib2wgVVNCIEJhcmNvZGUgZGV2aWNlCisJICBpbiBzZXJpYWwgZW11bGF0aW9uIG1vZGUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN5bWJvbHNlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfVEkKIAl0cmlzdGF0ZSAiVVNCIFRJIDM0MTAvNTA1MiBTZXJpYWwgRHJpdmVyIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCBiNzViZTkxLi42NjYxOWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2KQkJKz0gYXJrMzExNi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NIMzQxKQkJCSs9IGNoMzQxLm8KLW9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYKQkJCSs9IGNwMjEweC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0spCQkrPSBjeWJlcmphY2subwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCkJCSs9IGN5cHJlc3NfbTgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfREVCVUcpCQkJKz0gdXNiX2RlYnVnLm8KQEAgLTQ1LDEwICs0NSwxMiBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OKQkJCSs9IG9wdGlvbi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4KQkJKz0gb3RpNjg1OC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMpCQkJKz0gcGwyMzAzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NKQkJKz0gcWNzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0FGRSkJCQkrPSBzYWZlX3NlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSkJCSs9IHNpZW1lbnNfbXBpLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTKQkJKz0gc2llcnJhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUpCQkrPSBzcGNwOHg1Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCkJCQkrPSBzeW1ib2xzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVEkpCQkJKz0gdGlfdXNiXzM0MTBfNTA1Mi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9WSVNPUikJCQkrPSB2aXNvci5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQpCQkrPSB3aGl0ZWhlYXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwppbmRleCBmNjFlM2NhLi5hYjRjYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNywgRnJhbmsgQSBLaW5nc3dvb2QgPGZyYW5rQGtpbmdzd29vZC1jb25zdWx0aW5nLmNvLnVrPgorICogQ29weXJpZ2h0IDIwMDcsIFdlcm5lciBDb3JuZWxpdXMgPHdlcm5lckBjb3JuZWxpdXMtY29uc3VsdC5kZT4KKyAqIENvcHlyaWdodCAyMDA5LCBCb3JpcyBIYWpkdWsgPGJvcmlzQGhhamR1ay5vcmc+CiAgKgogICogY2gzNDEuYyBpbXBsZW1lbnRzIGEgc2VyaWFsIHBvcnQgZHJpdmVyIGZvciB0aGUgV2luY2hpcGhlYWQgQ0gzNDEuCiAgKgpAQCAtMjEsOSArMjMsMzkgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKLSNkZWZpbmUgREVGQVVMVF9CQVVEX1JBVEUgMjQwMAorI2RlZmluZSBERUZBVUxUX0JBVURfUkFURSA5NjAwCiAjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgIDEwMDAKIAorLyogZmxhZ3MgZm9yIElPLUJpdHMgKi8KKyNkZWZpbmUgQ0gzNDFfQklUX1JUUyAoMSA8PCA2KQorI2RlZmluZSBDSDM0MV9CSVRfRFRSICgxIDw8IDUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpbnRlcnJ1cHQgcGlwZSBkZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFsd2F5cyA0IGludGVycnVwdCBieXRlcyAqLworLyogZmlyc3QgaXJxIGJ5dGUgbm9ybWFsbHkgMHgwOCAqLworLyogc2Vjb25kIGlycSBieXRlIGJhc2UgMHg3ZCArIGJlbG93ICovCisvKiB0aGlyZCBpcnEgYnl0ZSBiYXNlIDB4OTQgKyBiZWxvdyAqLworLyogZm91cnRoIGlycSBieXRlIG5vcm1hbGx5IDB4ZWUgKi8KKworLyogc2Vjb25kIGludGVycnVwdCBieXRlICovCisjZGVmaW5lIENIMzQxX01VTFRfU1RBVCAweDA0IC8qIG11bHRpcGxlIHN0YXR1cyBzaW5jZSBsYXN0IGludGVycnVwdCBldmVudCAqLworCisvKiBzdGF0dXMgcmV0dXJuZWQgaW4gdGhpcmQgaW50ZXJydXB0IGFuc3dlciBieXRlLCBpbnZlcnRlZCBpbiBkYXRhCisgICBmcm9tIGlycSAqLworI2RlZmluZSBDSDM0MV9CSVRfQ1RTIDB4MDEKKyNkZWZpbmUgQ0gzNDFfQklUX0RTUiAweDAyCisjZGVmaW5lIENIMzQxX0JJVF9SSSAgMHgwNAorI2RlZmluZSBDSDM0MV9CSVRfRENEIDB4MDgKKyNkZWZpbmUgQ0gzNDFfQklUU19NT0RFTV9TVEFUIDB4MGYgLyogYWxsIGJpdHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBmYWN0b3IgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9GQUNUT1IgMTUzMjYyMDgwMAorI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9ESVZNQVggMworCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC0zNCw5ICs2NiwxMiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RydWN0IGNoMzQxX3ByaXZhdGUgewotCXVuc2lnbmVkIGJhdWRfcmF0ZTsKLQl1OCBkdHI7Ci0JdTggcnRzOworCXNwaW5sb2NrX3QgbG9jazsgLyogYWNjZXNzIGxvY2sgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgLyogd2FpdCBxdWV1ZSBmb3IgbW9kZW0gc3RhdHVzICovCisJdW5zaWduZWQgYmF1ZF9yYXRlOyAvKiBzZXQgYmF1ZCByYXRlICovCisJdTggbGluZV9jb250cm9sOyAvKiBzZXQgbGluZSBjb250cm9sIHZhbHVlIFJUUy9EVFIgKi8KKwl1OCBsaW5lX3N0YXR1czsgLyogYWN0aXZlIHN0YXR1cyBvZiBtb2RlbSBjb250cm9sIGlucHV0cyAqLworCXU4IG11bHRpX3N0YXR1c19jaGFuZ2U7IC8qIHN0YXR1cyBjaGFuZ2VkIG11bHRpcGxlIHNpbmNlIGxhc3QgY2FsbCAqLwogfTsKIAogc3RhdGljIGludCBjaDM0MV9jb250cm9sX291dChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCByZXF1ZXN0LApAQCAtNzIsMzcgKzEwNywyOCBAQAogewogCXNob3J0IGEsIGI7CiAJaW50IHI7CisJdW5zaWduZWQgbG9uZyBmYWN0b3I7CisJc2hvcnQgZGl2aXNvcjsKIAogCWRiZygiY2gzNDFfc2V0X2JhdWRyYXRlKCVkKSIsIHByaXYtPmJhdWRfcmF0ZSk7Ci0Jc3dpdGNoIChwcml2LT5iYXVkX3JhdGUpIHsKLQljYXNlIDI0MDA6Ci0JCWEgPSAweGQ5MDE7Ci0JCWIgPSAweDAwMzg7Ci0JCWJyZWFrOwotCWNhc2UgNDgwMDoKLQkJYSA9IDB4NjQwMjsKLQkJYiA9IDB4MDAxZjsKLQkJYnJlYWs7Ci0JY2FzZSA5NjAwOgotCQlhID0gMHhiMjAyOwotCQliID0gMHgwMDEzOwotCQlicmVhazsKLQljYXNlIDE5MjAwOgotCQlhID0gMHhkOTAyOwotCQliID0gMHgwMDBkOwotCQlicmVhazsKLQljYXNlIDM4NDAwOgotCQlhID0gMHg2NDAzOwotCQliID0gMHgwMDBhOwotCQlicmVhazsKLQljYXNlIDExNTIwMDoKLQkJYSA9IDB4Y2MwMzsKLQkJYiA9IDB4MDAwODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKworCWlmICghcHJpdi0+YmF1ZF9yYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlmYWN0b3IgPSAoQ0gzNDFfQkFVREJBU0VfRkFDVE9SIC8gcHJpdi0+YmF1ZF9yYXRlKTsKKwlkaXZpc29yID0gQ0gzNDFfQkFVREJBU0VfRElWTUFYOworCisJd2hpbGUgKChmYWN0b3IgPiAweGZmZjApICYmIGRpdmlzb3IpIHsKKwkJZmFjdG9yID4+PSAzOworCQlkaXZpc29yLS07CiAJfQogCisJaWYgKGZhY3RvciA+IDB4ZmZmMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmYWN0b3IgPSAweDEwMDAwIC0gZmFjdG9yOworCWEgPSAoZmFjdG9yICYgMHhmZjAwKSB8IGRpdmlzb3I7CisJYiA9IGZhY3RvciAmIDB4ZmY7CisKIAlyID0gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweDlhLCAweDEzMTIsIGEpOwogCWlmICghcikKIAkJciA9IGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHg5YSwgMHgwZjJjLCBiKTsKQEAgLTExMCwxOSArMTM2LDE4IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgY2gzNDFfc2V0X2hhbmRzaGFrZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2KQorc3RhdGljIGludCBjaDM0MV9zZXRfaGFuZHNoYWtlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IGNvbnRyb2wpCiB7Ci0JZGJnKCJjaDM0MV9zZXRfaGFuZHNoYWtlKCVkLCVkKSIsIHByaXYtPmR0ciwgcHJpdi0+cnRzKTsKLQlyZXR1cm4gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweGE0LAotCQl+KChwcml2LT5kdHI/MTw8NTowKXwocHJpdi0+cnRzPzE8PDY6MCkpLCAwKTsKKwlkYmcoImNoMzQxX3NldF9oYW5kc2hha2UoMHglMDJ4KSIsIGNvbnRyb2wpOworCXJldHVybiBjaDM0MV9jb250cm9sX291dChkZXYsIDB4YTQsIH5jb250cm9sLCAwKTsKIH0KIAotc3RhdGljIGludCBjaDM0MV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNoMzQxX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYpCiB7CiAJY2hhciAqYnVmZmVyOwogCWludCByOwogCWNvbnN0IHVuc2lnbmVkIHNpemUgPSA4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoImNoMzQxX2dldF9zdGF0dXMoKSIpOwogCkBAIC0xMzQsMTAgKzE1OSwxNSBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQkvKiBOb3QgaGF2aW5nIHRoZSBkYXRhc2hlZXQgZm9yIHRoZSBDSDM0MSwgd2UgaWdub3JlIHRoZSBieXRlcyByZXR1cm5lZAotCSAqIGZyb20gdGhlIGRldmljZS4gUmV0dXJuIGVycm9yIGlmIHRoZSBkZXZpY2UgZGlkIG5vdCByZXNwb25kIGluIHRpbWUuCi0JICovCi0JciA9IDA7CisJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RhdHVzIGlmIGF2YWlsYWJsZSAqLworCWlmIChyID09IDIpIHsKKwkJciA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oKmJ1ZmZlcikpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOworCQlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlyID0gLUVQUk9UTzsKIAogb3V0OglrZnJlZShidWZmZXIpOwogCXJldHVybiByOwpAQCAtMTgwLDcgKzIxMCw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhwZWN0IDB4ZmYgMHhlZSAqLwotCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldik7CisJciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2LCBwcml2KTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xOTIsMTIgKzIyMiwxMiBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShkZXYsIHByaXYpOworCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKGRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogZXhwZWN0IDB4OWYgMHhlZSAqLwotCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldik7CisJciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2LCBwcml2KTsKIAogb3V0OglrZnJlZShidWZmZXIpOwogCXJldHVybiByOwpAQCAtMjE2LDkgKzI0NiwxMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOwotCXByaXYtPmR0ciA9IDE7Ci0JcHJpdi0+cnRzID0gMTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDSDM0MV9CSVRfUlRTIHwgQ0gzNDFfQklUX0RUUjsKIAogCXIgPSBjaDM0MV9jb25maWd1cmUoc2VyaWFsLT5kZXYsIHByaXYpOwogCWlmIChyIDwgMCkKQEAgLTIzMSw2ICsyNjIsMzUgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgY2gzNDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjX2NmbGFnOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fZnVuY19fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCWlmICh0dHkpIHsKKwkJY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgeworCQkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQljaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKTsKKwkJfQorCX0KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKK30KKworCiAvKiBvcGVuIHRoaXMgZGV2aWNlLCBzZXQgZGVmYXVsdCBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IGNoMzQxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTI0MiwxNCArMzAyLDEzIEBACiAJZGJnKCJjaDM0MV9vcGVuKCkiKTsKIAogCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOwotCXByaXYtPmR0ciA9IDE7Ci0JcHJpdi0+cnRzID0gMTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDSDM0MV9CSVRfUlRTIHwgQ0gzNDFfQklUX0RUUjsKIAogCXIgPSBjaDM0MV9jb25maWd1cmUoc2VyaWFsLT5kZXYsIHByaXYpOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAotCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKHNlcmlhbC0+ZGV2LCBwcml2KTsKKwlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShzZXJpYWwtPmRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKQEAgLTI1Nyw2ICszMTYsMTYgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKKwlkYmcoIiVzIC0gc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIgorCQkJIiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHIpOworCQljaDM0MV9jbG9zZSh0dHksIHBvcnQsIE5VTEwpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKIAlyID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0LCBmaWxwKTsKIAogb3V0OglyZXR1cm4gcjsKQEAgLTI3MCw0NiArMzM5LDIyNCBAQAogewogCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGJhdWRfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCJjaDM0MV9zZXRfdGVybWlvcygpIik7CiAKKwlpZiAoIXR0eSB8fCAhdHR5LT50ZXJtaW9zKQorCQlyZXR1cm47CisKIAliYXVkX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCi0Jc3dpdGNoIChiYXVkX3JhdGUpIHsKLQljYXNlIDI0MDA6Ci0JY2FzZSA0ODAwOgotCWNhc2UgOTYwMDoKLQljYXNlIDE5MjAwOgotCWNhc2UgMzg0MDA6Ci0JY2FzZSAxMTUyMDA6Ci0JCXByaXYtPmJhdWRfcmF0ZSA9IGJhdWRfcmF0ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGJnKCJSYXRlICVkIG5vdCBzdXBwb3J0ZWQsIHVzaW5nICVkIiwKLQkJCWJhdWRfcmF0ZSwgREVGQVVMVF9CQVVEX1JBVEUpOwotCQlwcml2LT5iYXVkX3JhdGUgPSBERUZBVUxUX0JBVURfUkFURTsKKwlwcml2LT5iYXVkX3JhdGUgPSBiYXVkX3JhdGU7CisKKwlpZiAoYmF1ZF9yYXRlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfY29udHJvbCB8PSAoQ0gzNDFfQklUX0RUUiB8IENIMzQxX0JJVF9SVFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWNoMzQxX3NldF9iYXVkcmF0ZShwb3J0LT5zZXJpYWwtPmRldiwgcHJpdik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH4oQ0gzNDFfQklUX0RUUiB8IENIMzQxX0JJVF9SVFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCi0JY2gzNDFfc2V0X2JhdWRyYXRlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2KTsKKwljaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCiAJLyogVW5pbXBsZW1lbnRlZDoKIAkgKiAoY2ZsYWcgJiBDU0laRSkgOiBkYXRhIGJpdHMgWzUsIDhdCiAJICogKGNmbGFnICYgUEFSRU5CKSA6IHBhcml0eSB7Tk9ORSwgRVZFTiwgT0REfQogCSAqIChjZmxhZyAmIENTVE9QQikgOiBzdG9wIGJpdHMgWzEsIDJdCiAJICovCit9CiAKLQkgLyogQ29weSBiYWNrIHRoZSBvbGQgaGFyZHdhcmUgc2V0dGluZ3MgKi8KLQkgdHR5X3Rlcm1pb3NfY29weV9odyh0dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKLQkgLyogQW5kIHJlLWVuY29kZSB3aXRoIHRoZSBuZXcgYmF1ZCAqLwotCSB0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWRfcmF0ZSwgYmF1ZF9yYXRlKTsKK3N0YXRpYyBpbnQgY2gzNDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGNvbnRyb2w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDSDM0MV9CSVRfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDSDM0MV9CSVRfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DSDM0MV9CSVRfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DSDM0MV9CSVRfRFRSOworCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIGNvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBjaDM0MV9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgKCVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAoYWN0dWFsX2xlbmd0aCA+PSA0KSB7CisJCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOworCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQorCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOworfQorCitzdGF0aWMgaW50IHdhaXRfbW9kZW1faW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgYXJnKQoreworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcHJldnN0YXR1czsKKwl1OCBzdGF0dXM7CisJdTggY2hhbmdlZDsKKwl1OCBtdWx0aV9jaGFuZ2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2c3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKCFtdWx0aV9jaGFuZ2UpIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJCW11bHRpX2NoYW5nZSA9IHByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQljaGFuZ2VkID0gcHJldnN0YXR1cyBeIHN0YXR1czsKKworCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX1JJKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9EU1IpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX0RDRCkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfQ1RTKSkpIHsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXZzdGF0dXMgPSBzdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qc3RhdGljIGludCBjaDM0MV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwqLworc3RhdGljIGludCBjaDM0MV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7CisKKwlkZWZhdWx0OgorCQlkYmcoIiVzIG5vdCBzdXBwb3J0ZWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgY21kKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBjaDM0MV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IG1jcjsKKwl1OCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCWRiZygiJXMgKCVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltY3IgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmVzdWx0ID0gKChtY3IgJiBDSDM0MV9CSVRfRFRSKQkJPyBUSU9DTV9EVFIgOiAwKQorCQkgIHwgKChtY3IgJiBDSDM0MV9CSVRfUlRTKQk/IFRJT0NNX1JUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9DVFMpCT8gVElPQ01fQ1RTIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0RTUikJPyBUSU9DTV9EU1IgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfUkkpCT8gVElPQ01fUkkgIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0RDRCkJPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSByZXN1bHQgPSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IGNoMzQxX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdjsKKworCXNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCisJLypyZWNvbmZpZ3VyZSBjaDM0MSBzZXJpYWwgcG9ydCBhZnRlciBidXMtcmVzZXQqLworCWNoMzQxX2NvbmZpZ3VyZShkZXYsIHByaXYpOworCisJdXNiX3NlcmlhbF9yZXN1bWUoaW50Zik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoMzQxX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiY2gzNDEiLAogCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZQk9IGNoMzQxX3Jlc2V0X3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBpZF90YWJsZSwKIAkubm9fZHluYW1pY19pZAk9IDEsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY2gzNDFfZGV2aWNlID0gewpAQCAtMzE3LDEyICs1NjQsMTcgQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gImNoMzQxLXVhcnQiLAogCX0sCi0JLmlkX3RhYmxlICAgICAgICAgPSBpZF90YWJsZSwKLQkudXNiX2RyaXZlciAgICAgICA9ICZjaDM0MV9kcml2ZXIsCi0JLm51bV9wb3J0cyAgICAgICAgPSAxLAotCS5vcGVuICAgICAgICAgICAgID0gY2gzNDFfb3BlbiwKLQkuc2V0X3Rlcm1pb3MgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAotCS5hdHRhY2ggICAgICAgICAgID0gY2gzNDFfYXR0YWNoLAorCS5pZF90YWJsZSAgICAgICAgICA9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyICAgICAgICA9ICZjaDM0MV9kcml2ZXIsCisJLm51bV9wb3J0cyAgICAgICAgID0gMSwKKwkub3BlbiAgICAgICAgICAgICAgPSBjaDM0MV9vcGVuLAorCS5jbG9zZSAgICAgICAgICAgICA9IGNoMzQxX2Nsb3NlLAorCS5pb2N0bCAgICAgICAgICAgICA9IGNoMzQxX2lvY3RsLAorCS5zZXRfdGVybWlvcyAgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCAgICAgICAgICA9IGNoMzQxX3Rpb2NtZ2V0LAorCS50aW9jbXNldCAgICAgICAgICA9IGNoMzQxX3Rpb2Ntc2V0LAorCS5yZWFkX2ludF9jYWxsYmFjayA9IGNoMzQxX3JlYWRfaW50X2NhbGxiYWNrLAorCS5hdHRhY2ggICAgICAgICAgICA9IGNoMzQxX2F0dGFjaCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNoMzQxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCAwMjdmNGI3Li5lOGQ1MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogdGhhbmtzIHRvIEthcmwgSGlyYW1vdG8ga2FybEBoaXJhbW90by5vcmcuIFJUU0NUUyBoYXJkd2FyZSBmbG93CiAgKiBjb250cm9sIHRoYW5rcyB0byBNdW5pciBOYXNzYXIgbmFzc2FybXVAcmVhbC10aW1lLmNvbQogICoKLSAqIE91dHN0YW5kaW5nIElzc3VlczoKLSAqICBCdWZmZXJzIGFyZSBub3QgZmx1c2hlZCB3aGVuIHRoZSBwb3J0IGlzIG9wZW5lZC4KLSAqICBNdWx0aXBsZSBjYWxscyB0byB3cml0ZSgpIG1heSBmYWlsIHdpdGggIlJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMSw3ICsyNyw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjA4IgogI2RlZmluZSBEUklWRVJfREVTQyAiU2lsaWNvbiBMYWJzIENQMjEwMS9DUDIxMDIgUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyIgogCiAvKgpAQCAtNDIsMTcgKzM4LDIxIEBACiBzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwogc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKIAkJCQkJCQlzdHJ1Y3QgZmlsZSopOwotc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICopOworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCAqY2ZsYWdwLCB1bnNpZ25lZCBpbnQgKmJhdWRwKTsKIHN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCiAJCQkJCQkJc3RydWN0IGt0ZXJtaW9zKik7CiBzdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0X3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiwKKwkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIAotCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC03OSw2ICs3OSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTRBKSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIFJJR2JsYXN0ZXIgUCZQICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTRCKSB9LCAvKiBXZXN0IE1vdW50YWluIFJhZGlvIFJJR3RhbGsgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNUUpIH0sIC8qIEhlbGljb21tIElQLUxpbmsgMTIyMC1EVk0gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxOUYpIH0sIC8qIE1KUyBVU0IgVG9zbGluayBTd2l0Y2hlciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFBNikgfSwgLyogVGhpbmtPcHRpY3MgV2F2SXQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQUMpIH0sIC8qIE1TRCBEYXNoIEhhd2sgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQzgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEJhYnktSlRBRyAqLwpAQCAtOTAsNiArOTEsNyBAQAogCXsgVVNCX0RFVklDRSgweDEwYzQsIDB4ODI5MykgfSwgLyogVGVsZWdlc3lzIEVUUlgyVVNCICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4M0E4KSB9LCAvKiBBbWJlciBXaXJlbGVzcyBBTUIyNTYwICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDZFKSB9LCAvKiBCRUkgVVNCIFNlbnNvciBJbnRlcmZhY2UgKFZDUCkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEYwMDEpIH0sIC8qIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIFVTQnNjb3BlNTAgKi8KQEAgLTIyNCw3ICsyMjYsNyBAQAogCWtmcmVlKGJ1Zik7CiAKIAlpZiAocmVzdWx0ICE9IHNpemUpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCBjb25maWcgcmVxdWVzdCwgIgorCQlkYmcoIiVzIC0gVW5hYmxlIHRvIHNlbmQgY29uZmlnIHJlcXVlc3QsICIKIAkJCQkicmVxdWVzdD0weCV4IHNpemU9JWQgcmVzdWx0PSVkXG4iLAogCQkJCV9fZnVuY19fLCByZXF1ZXN0LCBzaXplLCByZXN1bHQpOwogCQlyZXR1cm4gLUVQUk9UTzsKQEAgLTI3NSw3ICsyNzcsNyBAQAogCWtmcmVlKGJ1Zik7CiAKIAlpZiAoKHNpemUgPiAyICYmIHJlc3VsdCAhPSBzaXplKSB8fCByZXN1bHQgPCAwKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCwgIgorCQlkYmcoIiVzIC0gVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCwgIgogCQkJCSJyZXF1ZXN0PTB4JXggc2l6ZT0lZCByZXN1bHQ9JWRcbiIsCiAJCQkJX19mdW5jX18sIHJlcXVlc3QsIHNpemUsIHJlc3VsdCk7CiAJCXJldHVybiAtRVBST1RPOwpAQCAtMzAwLDYgKzMwMiw0NyBAQAogCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCByZXF1ZXN0LCAmZGF0YSwgMik7CiB9CiAKKy8qCisgKiBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUKKyAqIFF1YW50aXNlcyB0aGUgYmF1ZCByYXRlIGFzIHBlciBBTjIwNSBUYWJsZSAxCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlKHVuc2lnbmVkIGludCBiYXVkKSB7CisJaWYgICAgICAoYmF1ZCA8PSA1NikgICAgICAgYmF1ZCA9IDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAzMDApICAgICAgYmF1ZCA9IDMwMDsKKwllbHNlIGlmIChiYXVkIDw9IDYwMCkgICAgICBiYXVkID0gNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTIwMCkgICAgIGJhdWQgPSAxMjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTgwMCkgICAgIGJhdWQgPSAxODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjQwMCkgICAgIGJhdWQgPSAyNDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDAwMCkgICAgIGJhdWQgPSA0MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDgwMykgICAgIGJhdWQgPSA0ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gNzIwNykgICAgIGJhdWQgPSA3MjAwOworCWVsc2UgaWYgKGJhdWQgPD0gOTYxMikgICAgIGJhdWQgPSA5NjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTQ0MjgpICAgIGJhdWQgPSAxNDQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE2MDYyKSAgICBiYXVkID0gMTYwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxOTI1MCkgICAgYmF1ZCA9IDE5MjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjg5MTIpICAgIGJhdWQgPSAyODgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDM4NjAxKSAgICBiYXVkID0gMzg0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1MTU1OCkgICAgYmF1ZCA9IDUxMjAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTYyODApICAgIGJhdWQgPSA1NjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDU4MDUzKSAgICBiYXVkID0gNTc2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA2NDExMSkgICAgYmF1ZCA9IDY0MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNzc2MDgpICAgIGJhdWQgPSA3NjgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDExNzAyOCkgICBiYXVkID0gMTE1MjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTI5MzQ3KSAgIGJhdWQgPSAxMjgwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNTY4NjgpICAgYmF1ZCA9IDE1MzYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDIzNzgzMikgICBiYXVkID0gMjMwNDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjU0MjM0KSAgIGJhdWQgPSAyNTAwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNzMwNjYpICAgYmF1ZCA9IDI1NjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDQ5MTUyMCkgICBiYXVkID0gNDYwODAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTY3MTM4KSAgIGJhdWQgPSA1MDAwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA2NzAyNTQpICAgYmF1ZCA9IDU3NjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDEwNTMyNTcpICBiYXVkID0gOTIxNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTQ3NDU2MCkgIGJhdWQgPSAxMjI4ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjQ1NzYwMCkgIGJhdWQgPSAxODQzMjAwOworCWVsc2UgICAgICAgICAgICAgICAgICAgICAgIGJhdWQgPSAzNjg2NDAwOworCXJldHVybiBiYXVkOworfQorCiBzdGF0aWMgaW50IGNwMjEwMV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJc3RydWN0IGZpbGUgKmZpbHApCiB7CkBAIC0zMzAsMTAgKzM3MywxMiBAQAogCX0KIAogCS8qIENvbmZpZ3VyZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KLQljcDIxMDFfZ2V0X3Rlcm1pb3ModHR5KTsKKwljcDIxMDFfZ2V0X3Rlcm1pb3ModHR5LCBwb3J0KTsKIAogCS8qIFNldCB0aGUgRFRSIGFuZCBSVFMgcGlucyBsb3cgKi8KLQljcDIxMDFfdGlvY21zZXQodHR5LCBOVUxMLCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMsIDApOworCWNwMjEwMV90aW9jbXNldF9wb3J0KHR0eSA/IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGEKKwkJCTogcG9ydCwKKwkJTlVMTCwgVElPQ01fRFRSIHwgVElPQ01fUlRTLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzc1LDkgKzQyMCwzMSBAQAogICogZnJvbSB0aGUgZGV2aWNlLCBjb3JyZWN0cyBhbnkgdW5zdXBwb3J0ZWQgdmFsdWVzLCBhbmQgY29uZmlndXJlcyB0aGUKICAqIHRlcm1pb3Mgc3RydWN0dXJlIHRvIHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UKICAqLwotc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKKworCWlmICh0dHkpIHsKKwkJY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQodHR5LT5kcml2ZXJfZGF0YSwKKwkJCSZ0dHktPnRlcm1pb3MtPmNfY2ZsYWcsICZiYXVkKTsKKwkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKKwl9CisKKwllbHNlIHsKKwkJdW5zaWduZWQgaW50IGNmbGFnOworCQljZmxhZyA9IDA7CisJCWNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHBvcnQsICZjZmxhZywgJmJhdWQpOworCX0KK30KKworLyoKKyAqIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0CisgKiBUaGlzIGlzIHRoZSBoZWFydCBvZiBjcDIxMDFfZ2V0X3Rlcm1pb3Mgd2hpY2ggYWx3YXlzIHVzZXMgYSAmdXNiX3NlcmlhbF9wb3J0LgorICovCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCAqY2ZsYWdwLCB1bnNpZ25lZCBpbnQgKmJhdWRwKQorewogCXVuc2lnbmVkIGludCBjZmxhZywgbW9kZW1fY3RsWzRdOwogCXVuc2lnbmVkIGludCBiYXVkOwogCXVuc2lnbmVkIGludCBiaXRzOwpAQCAtMzg3LDEyICs0NTQsMTIgQEAKIAljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQkFVRFJBVEUsICZiYXVkLCAyKTsKIAkvKiBDb252ZXJ0IHRvIGJhdWRyYXRlICovCiAJaWYgKGJhdWQpCi0JCWJhdWQgPSBCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkOworCQliYXVkID0gY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlKChCQVVEX1JBVEVfR0VOX0ZSRVEgKyBiYXVkLzIpLyBiYXVkKTsKIAogCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fZnVuY19fLCBiYXVkKTsKKwkqYmF1ZHAgPSBiYXVkOwogCi0JdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKLQljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwljZmxhZyA9ICpjZmxhZ3A7CiAKIAljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwogCWNmbGFnICY9IH5DU0laRTsKQEAgLTQ5OCw3ICs1NjUsNyBAQAogCQljZmxhZyAmPSB+Q1JUU0NUUzsKIAl9CiAKLQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKKwkqY2ZsYWdwID0gY2ZsYWc7CiB9CiAKIHN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtNTE2LDQ2ICs1ODMsMTYgQEAKIAl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKIAljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAlvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwliYXVkID0gY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlKHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSkpOwogCiAJLyogSWYgdGhlIGJhdWQgcmF0ZSBpcyB0byBiZSB1cGRhdGVkKi8KLQlpZiAoYmF1ZCAhPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpKSB7Ci0JCXN3aXRjaCAoYmF1ZCkgewotCQljYXNlIDA6Ci0JCWNhc2UgNjAwOgotCQljYXNlIDEyMDA6Ci0JCWNhc2UgMTgwMDoKLQkJY2FzZSAyNDAwOgotCQljYXNlIDQ4MDA6Ci0JCWNhc2UgNzIwMDoKLQkJY2FzZSA5NjAwOgotCQljYXNlIDE0NDAwOgotCQljYXNlIDE5MjAwOgotCQljYXNlIDI4ODAwOgotCQljYXNlIDM4NDAwOgotCQljYXNlIDU1ODU0OgotCQljYXNlIDU3NjAwOgotCQljYXNlIDExNTIwMDoKLQkJY2FzZSAxMjcxMTc6Ci0JCWNhc2UgMjMwNDAwOgotCQljYXNlIDQ2MDgwMDoKLQkJY2FzZSA5MjE2MDA6Ci0JCWNhc2UgMzY4NjQwMDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYmF1ZCA9IDk2MDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChiYXVkKSB7Ci0JCQlkYmcoIiVzIC0gU2V0dGluZyBiYXVkIHJhdGUgdG8gJWQgYmF1ZCIsIF9fZnVuY19fLAotCQkJCQliYXVkKTsKLQkJCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAotCQkJCQkJKEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQpKSkgewotCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkJhdWQgcmF0ZSByZXF1ZXN0ZWQgbm90ICIKLQkJCQkJCSJzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKLQkJCQliYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKTsKLQkJCX0KKwlpZiAoYmF1ZCAhPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpICYmIGJhdWQgIT0gMCkgeworCQlkYmcoIiVzIC0gU2V0dGluZyBiYXVkIHJhdGUgdG8gJWQgYmF1ZCIsIF9fZnVuY19fLAorCQkJCWJhdWQpOworCQlpZiAoY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHBvcnQsIENQMjEwMV9CQVVEUkFURSwKKwkJCQkJKChCQVVEX1JBVEVfR0VOX0ZSRVEgKyBiYXVkLzIpIC8gYmF1ZCkpKSB7CisJCQlkYmcoIkJhdWQgcmF0ZSByZXF1ZXN0ZWQgbm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCQkJYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcyk7CiAJCX0KIAl9CiAJLyogUmVwb3J0IGJhY2sgdGhlIHJlc3VsdGluZyBiYXVkIHJhdGUgKi8KQEAgLTU4NywxNCArNjI0LDE0IEBACiAJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOyovCiAJCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKKwkJCWRiZygiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCiAJCQkJCSJzdXBwb3J0IHRoZSBudW1iZXIgb2YgYml0cyByZXF1ZXN0ZWQsIgogCQkJCQkiIHVzaW5nIDggYml0IG1vZGVcbiIpOwogCQkJCWJpdHMgfD0gQklUU19EQVRBXzg7CiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJOdW1iZXIgb2YgZGF0YSBiaXRzIHJlcXVlc3RlZCAiCisJCQlkYmcoIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKIAkJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKIAl9CiAKQEAgLTYxMSw3ICs2NDgsNyBAQAogCQkJfQogCQl9CiAJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpKQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiUGFyaXR5IG1vZGUgbm90IHN1cHBvcnRlZCAiCisJCQlkYmcoIlBhcml0eSBtb2RlIG5vdCBzdXBwb3J0ZWQgIgogCQkJCQkiYnkgZGV2aWNlXG4iKTsKIAl9CiAKQEAgLTYyNiw3ICs2NjMsNyBAQAogCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7CiAJCX0KIAkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJOdW1iZXIgb2Ygc3RvcCBiaXRzIHJlcXVlc3RlZCAiCisJCQlkYmcoIk51bWJlciBvZiBzdG9wIGJpdHMgcmVxdWVzdGVkICIKIAkJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKIAl9CiAKQEAgLTY2MCw2ICs2OTcsMTIgQEAKIAkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXJldHVybiBjcDIxMDFfdGlvY21zZXRfcG9ydChwb3J0LCBmaWxlLCBzZXQsIGNsZWFyKTsKK30KKworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQorewogCXVuc2lnbmVkIGludCBjb250cm9sID0gMDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC02ODQsNyArNzI3LDYgQEAKIAlkYmcoIiVzIC0gY29udHJvbCA9IDB4JS40eCIsIF9fZnVuY19fLCBjb250cm9sKTsKIAogCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQ09OVFJPTCwgJmNvbnRyb2wsIDIpOwotCiB9CiAKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggZjkyZjRkNy4uZGNjODdhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTY2Myw2ICs2NjMsMTEgQEAKIAl7IFVTQl9ERVZJQ0UoQUxUSTJfVklELCBBTFRJMl9OM19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBESUVCT0xEX0JDU19TRTkyM19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX05ESV9IVUNfUElEKSB9LAorCXsgVVNCX0RFVklDRShBVE1FTF9WSUQsIFNUSzU0MV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKERFX1ZJRCwgU1RCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoREVfVklELCBXSFRfUElEKSB9LAorCXsgVVNCX0RFVklDRShBRElfVklELCBBRElfR05JQ0VfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMTkzMywxOCArMTkzOCwxNiBAQAogCQkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudC8KIAkJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCiAJCSAgIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KLQkJaWYgKHByaXYgIT0gTlVMTCkgewotCQkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgotCQkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7Ci0JCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9Ci0JCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7Ci0JCQl9CisJCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCArIDBdICYKKwkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7CisJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCQlwcml2LT5kaWZmX3N0YXR1cyB8PQorCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBuZXdfc3RhdHVzOwogCQl9CiAKLQkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKKwkJbGVuZ3RoID0gbWluX3QodTMyLCBQS1RTWiwgdXJiLT5hY3R1YWxfbGVuZ3RoLXBhY2tldF9vZmZzZXQpLTI7CiAJCWlmIChsZW5ndGggPCAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBwYWNrZXQgbGVuZ3RoOiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgbGVuZ3RoKzIpOwpAQCAtMjI4OSwxMSArMjI5Miw4IEBACiAJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKIAkJCSAgIDAsIDAsCiAJCQkgICBidWYsIDEsIFdEUl9USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRiZygiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fZnVuY19fLAotCQkJICAgIHJldCk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlicmVhazsKIAljYXNlIEZUOFUyMzJBTToKIAljYXNlIEZUMjMyQk06CkBAIC0yMzA4LDE1ICsyMzA4LDExIEBACiAJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCiAJCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgIGJ1ZiwgMiwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCi0JCQkgICAgcmV0KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gIChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggZTMwMGM4NC4uZGFhZjYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTg5Myw2ICs4OTMsMjYgQEAKICNkZWZpbmUgRElFQk9MRF9CQ1NfU0U5MjNfUElECTB4ZmI5OQogCiAvKgorICogQXRtZWwgU1RLNTQxCisgKi8KKyNkZWZpbmUgQVRNRUxfVklECQkweDAzZWIgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFNUSzU0MV9QSUQJCTB4MjEwOSAvKiBaaWdiZWUgQ29udHJvbGxlciAqLworCisvKgorICogRHJlc2RlbiBFbGVrdHJvbmljIFNlbnNvciBUZXJtaW5hbCBCb2FyZAorICovCisjZGVmaW5lIERFX1ZJRAkJCTB4MWNmMSAvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU1RCX1BJRAkJCTB4MDAwMSAvKiBTZW5zb3IgVGVybWluYWwgQm9hcmQgKi8KKyNkZWZpbmUgV0hUX1BJRAkJCTB4MDAwNCAvKiBXaXJlbGVzcyBIYW5kaGVsZCBUZXJtaW5hbCAqLworCisvKgorICogQmxhY2tmaW4gZ25JQ0UgSlRBRworICogaHR0cDovL2RvY3MuYmxhY2tmaW4udWNsaW51eC5vcmcvZG9rdS5waHA/aWQ9aHc6anRhZzpnbmljZQorICovCisjZGVmaW5lIEFESV9WSUQgCQkweDA0NTYKKyNkZWZpbmUgQURJX0dOSUNFX1BJRCAJCTB4RjAwMAorCisvKgogICogICBCbVJlcXVlc3RUeXBlOiAgMTEwMCAwMDAwYgogICogICBiUmVxdWVzdDogICAgICAgRlRESV9FMl9SRUFECiAgKiAgIHdWYWx1ZTogICAgICAgICAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCA4MTQ5MDlmLi45ZDU3Y2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTE3NywxNCArMTc3LDYgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCBpLCBjID0gMCwgcjsKIAotI2lmZGVmIENPTkZJR19QTQotCS8qCi0JICogSWYgdGhpcyBpcyBhbiBhdXRvcmVzdW1lLCBkb24ndCBzdWJtaXQgVVJCcy4KLQkgKiBUaGV5IHdpbGwgYmUgc3VibWl0dGVkIGluIHRoZSBvcGVuIGZ1bmN0aW9uIGluc3RlYWQuCi0JICovCi0JaWYgKHNlcmlhbC0+ZGV2LT5hdXRvX3BtKQotCQlyZXR1cm4gMDsKLSNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHBvcnQtPnJlYWRfdXJiKSB7CkBAIC0xOTYsNiArMTg4LDcgQEAKIAogCXJldHVybiBjID8gLUVJTyA6IDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKTsKIAogdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggMTMyYmU3NC4uZWY5MjA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC03OCw2ICs3OCw3IEBACiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBzdGF0aWMgdm9pZCBpcGFxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBpcGFxX2NhbGNfbnVtX3BvcnRzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LApAQCAtNTcyLDE1ICs1NzMsMTAgQEAKIAkuZGVzY3JpcHRpb24gPQkJIlBvY2tldFBDIFBEQSIsCiAJLnVzYl9kcml2ZXIgPSAJCSZpcGFxX2RyaXZlciwKIAkuaWRfdGFibGUgPQkJaXBhcV9pZF90YWJsZSwKLQkvKgotCSAqIHNvbWUgZGV2aWNlcyBoYXZlIGFuIGV4dHJhIGVuZHBvaW50LCB3aGljaAotCSAqIG11c3QgYmUgaWdub3JlZCBhcyBpdCB3b3VsZCBtYWtlIHRoZSBjb3JlCi0JICogY3JlYXRlIGEgc2Vjb25kIHBvcnQgd2hpY2ggb29wc2VzIHdoZW4gdXNlZAotCSAqLwotCS5udW1fcG9ydHMgPQkJMSwKIAkub3BlbiA9CQkJaXBhcV9vcGVuLAogCS5jbG9zZSA9CQlpcGFxX2Nsb3NlLAogCS5hdHRhY2ggPQkJaXBhcV9zdGFydHVwLAorCS5jYWxjX251bV9wb3J0cyA9CWlwYXFfY2FsY19udW1fcG9ydHMsCiAJLnNodXRkb3duID0JCWlwYXFfc2h1dGRvd24sCiAJLndyaXRlID0JCWlwYXFfd3JpdGUsCiAJLndyaXRlX3Jvb20gPQkJaXBhcV93cml0ZV9yb29tLApAQCAtOTU2LDE0ICs5NTIsNDkgQEAKIH0KIAogCitzdGF0aWMgaW50IGlwYXFfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwkvKgorCSAqIHNvbWUgZGV2aWNlcyBoYXZlIDMgZW5kcG9pbnRzLCB0aGUgM3JkIG9mIHdoaWNoCisJICogbXVzdCBiZSBpZ25vcmVkIGFzIGl0IHdvdWxkIG1ha2UgdGhlIGNvcmUKKwkgKiBjcmVhdGUgYSBzZWNvbmQgcG9ydCB3aGljaCBvb3BzZXMgd2hlbiB1c2VkCisJICovCisJaW50IGlwYXFfbnVtX3BvcnRzID0gMTsKKworCWRiZygiJXMgLSBudW1iZXJvZmVuZHBvaW50czogJWQiLCBfX0ZVTkNUSU9OX18sCisJCShpbnQpc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMpOworCisJLyoKKwkgKiBhIGZldyBkZXZpY2VzIGhhdmUgNCBlbmRwb2ludHMsIHNlZW1pbmdseSBZYWt1bWEgZGV2aWNlcywKKwkgKiBhbmQgd2UgbmVlZCB0aGUgc2Vjb25kIHBhaXIsIHNvIGxldCB0aGVtIGhhdmUgMiBwb3J0cworCSAqCisJICogVE9ETzogY2FuIHdlIGRyb3AgcG9ydCAxID8KKwkgKi8KKwlpZiAoc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgPiAzKSB7CisJCWlwYXFfbnVtX3BvcnRzID0gMjsKKwl9CisKKwlyZXR1cm4gaXBhcV9udW1fcG9ydHM7Cit9CisKKwogc3RhdGljIGludCBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgeworCQkvKgorCQkgKiBGSVhNRTogSFAgaVBhcSByeDM3MTUsIHBvc3NpYmx5IG90aGVycywgaGF2ZSAxIGNvbmZpZyB0aGF0CisJCSAqIGlzIGxhYmVsZWQgYXMgMgorCQkgKi8KKwogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKworCWRiZygiJXMgLSBpUEFRIG1vZHVsZSBjb25maWd1cmVkIGZvciAlZCBwb3J0cyIsCisJCV9fRlVOQ1RJT05fXywgc2VyaWFsLT5udW1fcG9ydHMpOworCiAJcmV0dXJuIHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHNlcmlhbC0+ZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKaW5kZXggOTg3OGMwZi4uMDBkYWE4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCkBAIC0xNTA3LDcgKzE1MDcsNyBAQAogCX0gZWxzZSB7CiAJCWRldl93YXJuKCZzZXJpYWwtPmludGVyZmFjZS0+ZGV2LAogCQkJICJ1bnN1cHBvcnRlZCBlbmRwb2ludCB0eXBlICV4XG4iLAotCQkJIGVwX2Rlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKTsKKwkJCSB1c2JfZW5kcG9pbnRfdHlwZShlcF9kZXNjKSk7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCBjZWEzMjZmLi44Mzk1ODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogT3B0aWNvbiBVU0IgYmFyY29kZSB0byBzZXJpYWwgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm92ZWxsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAtIDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAtIDIwMDkgTm92ZWxsIEluYy4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgpAQCAtNDAsOCArNDEsMTIgQEAKIAlib29sIHRocm90dGxlZDsKIAlib29sIGFjdHVhbGx5X3Rocm90dGxlZDsKIAlib29sIHJ0czsKKwlpbnQgb3V0c3RhbmRpbmdfdXJiczsKIH07CiAKKy8qIG1heCBudW1iZXIgb2Ygd3JpdGUgdXJicyBpbiBmbGlnaHQgKi8KKyNkZWZpbmUgVVJCX1VQUEVSX0xJTUlUCTQKKwogc3RhdGljIHZvaWQgb3B0aWNvbl9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXJiLT5jb250ZXh0OwpAQCAtMTA2LDcgKzExMSw2IEBACiAJCQkJCXByaXYtPnJ0cyA9IGZhbHNlOwogCQkJCWVsc2UKIAkJCQkJcHJpdi0+cnRzID0gdHJ1ZTsKLQkJCQkvKiBGSVhNRSBjaGFuZ2UgdGhlIFJUUyBsZXZlbCAqLwogCQkJfSBlbHNlIHsKIAkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKIAkJCQkiVW5rbm93biBkYXRhIHBhY2tldCByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2U6IgpAQCAtMTg4LDYgKzE5MiwxMjAgQEAKIAl1c2Jfa2lsbF91cmIocHJpdi0+YnVsa19yZWFkX3VyYik7CiB9CiAKK3N0YXRpYyB2b2lkIG9wdGljb25fd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmIChzdGF0dXMpCisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLS1wcml2LT5vdXRzdGFuZGluZ191cmJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHByaXYtPnBvcnQpOworfQorCitzdGF0aWMgaW50IG9wdGljb25fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHVyYiAqdXJiOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaXYtPm91dHN0YW5kaW5nX3VyYnMrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlidWZmZXIgPSBrbWFsbG9jKGNvdW50LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJY291bnQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX25vX2J1ZmZlcjsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKKwkJY291bnQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX25vX3VyYjsKKwl9CisKKwltZW1jcHkoYnVmZmVyLCBidWYsIGNvdW50KTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LCBidWZmZXIpOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgIGJ1ZmZlciwgY291bnQsIG9wdGljb25fd3JpdGVfYnVsa19jYWxsYmFjaywgcHJpdik7CisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkgICAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJY291bnQgPSBzdGF0dXM7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgorCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCXVzYl9mcmVlX3VyYih1cmIpOworCisJcmV0dXJuIGNvdW50OworZXJyb3I6CisJdXNiX2ZyZWVfdXJiKHVyYik7CitlcnJvcl9ub191cmI6CisJa2ZyZWUoYnVmZmVyKTsKK2Vycm9yX25vX2J1ZmZlcjoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCS0tcHJpdi0+b3V0c3RhbmRpbmdfdXJiczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IG9wdGljb25fd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKgorCSAqIFdlIHJlYWxseSBjYW4gdGFrZSBhbG1vc3QgYW55dGhpbmcgdGhlIHVzZXIgdGhyb3dzIGF0IHVzCisJICogYnV0IGxldCdzIHBpY2sgYSBuaWNlIGJpZyBudW1iZXIgdG8gdGVsbCB0aGUgdHR5CisJICogbGF5ZXIgdGhhdCB3ZSBoYXZlIGxvdHMgb2YgZnJlZSBzcGFjZSwgdW5sZXNzIHdlIGRvbid0LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQgKiAyIC8gMykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAyMDQ4OworfQorCiBzdGF0aWMgdm9pZCBvcHRpY29uX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC0yMjMsNiArMzQxLDY3IEBACiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKK3N0YXRpYyBpbnQgb3B0aWNvbl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+cnRzKQorCQlyZXN1bHQgPSBUSU9DTV9SVFM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtICV4IiwgX19mdW5jX18sIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc2VyaWFsKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmdG1wLCAweDAwLCBzaXplb2YodG1wKSk7CisKKwkvKiBmYWtlIGVtdWxhdGUgYSAxNjU1MCB1YXJ0IHRvIG1ha2UgdXNlcnNwYWNlIGNvZGUgaGFwcHkgKi8KKwl0bXAudHlwZQkJPSBQT1JUXzE2NTUwQTsKKwl0bXAubGluZQkJPSBwcml2LT5zZXJpYWwtPm1pbm9yOworCXRtcC5wb3J0CQk9IDA7CisJdG1wLmlycQkJCT0gMDsKKwl0bXAuZmxhZ3MJCT0gQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlE7CisJdG1wLnhtaXRfZmlmb19zaXplCT0gMTAyNDsKKwl0bXAuYmF1ZF9iYXNlCQk9IDk2MDA7CisJdG1wLmNsb3NlX2RlbGF5CQk9IDUqSFo7CisJdG1wLmNsb3Npbmdfd2FpdAk9IDMwKkhaOworCisJaWYgKGNvcHlfdG9fdXNlcihzZXJpYWwsICZ0bXAsIHNpemVvZigqc2VyaWFsKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGljb25faW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCV4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DR1NFUklBTDoKKwkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhwcml2LAorCQkJCSAgICAgICAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopYXJnKTsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCiBzdGF0aWMgaW50IG9wdGljb25fc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXY7CkBAIC0zMDYsMTEgKzQ4NSwzNyBAQAogCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKIH0KIAorc3RhdGljIGludCBvcHRpY29uX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisKKwl1c2Jfa2lsbF91cmIocHJpdi0+YnVsa19yZWFkX3VyYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCWludCByZXN1bHQ7CisKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisJaWYgKHBvcnQtPnBvcnQuY291bnQpCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIsIEdGUF9OT0lPKTsKKwllbHNlCisJCXJlc3VsdCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG9wdGljb25fZHJpdmVyID0gewogCS5uYW1lID0JCSJvcHRpY29uIiwKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0Jb3B0aWNvbl9zdXNwZW5kLAorCS5yZXN1bWUgPQlvcHRpY29uX3Jlc3VtZSwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKQEAgLTMyNiw5ICs1MzEsMTMgQEAKIAkuYXR0YWNoID0JCW9wdGljb25fc3RhcnR1cCwKIAkub3BlbiA9CQkJb3B0aWNvbl9vcGVuLAogCS5jbG9zZSA9CQlvcHRpY29uX2Nsb3NlLAorCS53cml0ZSA9CQlvcHRpY29uX3dyaXRlLAorCS53cml0ZV9yb29tID0gCQlvcHRpY29uX3dyaXRlX3Jvb20sCiAJLnNodXRkb3duID0JCW9wdGljb25fc2h1dGRvd24sCiAJLnRocm90dGxlID0gCQlvcHRpY29uX3Rocm90dGxlLAogCS51bnRocm90dGxlID0JCW9wdGljb25fdW50aHJvdHRsZSwKKwkuaW9jdGwgPQkJb3B0aWNvbl9pb2N0bCwKKwkudGlvY21nZXQgPQkJb3B0aWNvbl90aW9jbWdldCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9wdGljb25faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IGI3YzEzMmIuLmQ1NjBjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTYyLDYgKzYyLDggQEAKIHN0YXRpYyBpbnQgIG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitzdGF0aWMgaW50ICBvcHRpb25fcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogCiAvKiBWZW5kb3IgYW5kIHByb2R1Y3QgSURzICovCiAjZGVmaW5lIE9QVElPTl9WRU5ET1JfSUQJCQkweDBBRjAKQEAgLTg5LDYgKzkxLDcgQEAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVAkJMHg3MDQxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fRVgJCTB4NzA2MQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9NT0RFTQkJMHg3MTAwCisjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0dUTTM4MF9NT0RFTQkJMHg3MjAxCiAKICNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkJCTB4MTJEMQogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FNjAwCQkJMHgxMDAxCkBAIC0xOTcsNiArMjAwLDcgQEAKIC8qIE9WQVRJT04gUFJPRFVDVFMgKi8KICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfTUM3MjcJCTB4NDEwMAogI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9NQzk1MEQJCTB4NDQwMAorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzI3CQkweDUwMTAKIAogLyogRlVUVVJFIE5PVkFURUwgUFJPRFVDVFMgKi8KICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVZET19GVUxMU1BFRUQJMFg2MDAwCkBAIC0yODgsMTUgKzI5MiwxMSBAQAogCiAvKiBaVEUgUFJPRFVDVFMgKi8KICNkZWZpbmUgWlRFX1ZFTkRPUl9JRAkJCQkweDE5ZDIKKyNkZWZpbmUgWlRFX1BST0RVQ1RfTUY2MjIJCQkweDAwMDEKICNkZWZpbmUgWlRFX1BST0RVQ1RfTUY2MjgJCQkweDAwMTUKICNkZWZpbmUgWlRFX1BST0RVQ1RfTUY2MjYJCQkweDAwMzEKICNkZWZpbmUgWlRFX1BST0RVQ1RfQ0RNQV9URUNICQkJMHhmZmZlCiAKLS8qIEVyaWNzc29uIHByb2R1Y3RzICovCi0jZGVmaW5lIEVSSUNTU09OX1ZFTkRPUl9JRAkJCTB4MGJkYgotI2RlZmluZSBFUklDU1NPTl9QUk9EVUNUX0YzNTA3R18xCQkweDE5MDAKLSNkZWZpbmUgRVJJQ1NTT05fUFJPRFVDVF9GMzUwN0dfMgkJMHgxOTAyCi0KICNkZWZpbmUgQkVOUV9WRU5ET1JfSUQJCQkJMHgwNGE1CiAjZGVmaW5lIEJFTlFfUFJPRFVDVF9IMTAJCQkweDQwNjgKIApAQCAtMzI1LDYgKzMyNSw3IEBACiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fR1QpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fRVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX01PREVNKSB9LAorCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVE0zODBfTU9ERU0pIH0sCiAJeyBVU0JfREVWSUNFKFFVQU5UQV9WRU5ET1JfSUQsIFFVQU5UQV9QUk9EVUNUX1ExMDEpIH0sCiAJeyBVU0JfREVWSUNFKFFVQU5UQV9WRU5ET1JfSUQsIFFVQU5UQV9QUk9EVUNUX1ExMTEpIH0sCiAJeyBVU0JfREVWSUNFKFFVQU5UQV9WRU5ET1JfSUQsIFFVQU5UQV9QUk9EVUNUX0dMWCkgfSwKQEAgLTQxNSw2ICs0MTYsNyBAQAogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FVTg3MEQpIH0sIC8qIE5vdmF0ZWwgRVU4NTBEL0VVODYwRC9FVTg3MEQgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfTUM5NTBEKSB9LCAvKiBOb3ZhdGVsIE1DOTMwRC9NQzk1MEQgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfTUM3MjcpIH0sIC8qIE5vdmF0ZWwgTUM3MjcvVTcyNy9VU0I3MjcgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTcyNykgfSwgLyogTm92YXRlbCBNQzcyNy9VNzI3L1VTQjcyNyAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FVkRPX0ZVTExTUEVFRCkgfSwgLyogTm92YXRlbCBFVkRPIHByb2R1Y3QgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfSFNQQV9GVUxMU1BFRUQpIH0sIC8qIE5vdmF0ZWwgSFNQQSBwcm9kdWN0ICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VWRE9fRU1CRURERURfRlVMTFNQRUVEKSB9LCAvKiBOb3ZhdGVsIEVWRE8gRW1iZWRkZWQgcHJvZHVjdCAqLwpAQCAtNDQyLDcgKzQ0NCw2IEBACiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTUyMF9NSU5JQ0FSRF9DSU5HVUxBUikgfSwJLyogRGVsbCBXaXJlbGVzcyBIU0RQQSA1NTIwID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NjBEICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTUyMF9NSU5JQ0FSRF9HRU5FUklDX0wpIH0sCS8qIERlbGwgV2lyZWxlc3MgSFNEUEEgNTUyMCAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgREVMTF9QUk9EVUNUXzU1MjBfTUlOSUNBUkRfR0VORVJJQ19JKSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MjAgVm9kYSBJIE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTRFBBKSBNaW5pY2FyZCAqLwotCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTQ3KSB9LAkJCQkJLyogRGVsbCBXaXJlbGVzcyA1NTMwIE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTUEEpIE1pbmktQ2FyZCAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgREVMTF9QUk9EVUNUXzU3MzBfTUlOSUNBUkRfU1BSSU5UKSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU3MzAgTW9iaWxlIEJyb2FkYmFuZCBFVkRPL0hTUEEgTWluaS1DYXJkICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCBERUxMX1BST0RVQ1RfNTczMF9NSU5JQ0FSRF9URUxVUykgfSwJLyogRGVsbCBXaXJlbGVzcyA1NzMwIE1vYmlsZSBCcm9hZGJhbmQgRVZETy9IU1BBIE1pbmktQ2FyZCAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgREVMTF9QUk9EVUNUXzU3MzBfTUlOSUNBUkRfVlpXKSB9LCAJLyogRGVsbCBXaXJlbGVzcyA1NzMwIE1vYmlsZSBCcm9hZGJhbmQgRVZETy9IU1BBIE1pbmktQ2FyZCAqLwpAQCAtNTEwLDExICs1MTEsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoUVVBTENPTU1fVkVORE9SX0lELCAweDY2MTMpfSwgLyogT25kYSBINjAwL1pURSBNRjMzMCAqLwogCXsgVVNCX0RFVklDRShNQVhPTl9WRU5ET1JfSUQsIDB4NjI4MCkgfSwgLyogQlAzLVVTQiAmIEJQMy1FWFQgSFNEUEEgKi8KIAl7IFVTQl9ERVZJQ0UoVEVMSVRfVkVORE9SX0lELCBURUxJVF9QUk9EVUNUX1VDODY0RSkgfSwKKwl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfTUY2MjIpIH0sCiAJeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX01GNjI2KSB9LAogCXsgVVNCX0RFVklDRShaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9NRjYyOCkgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQ0RNQV9URUNIKSB9LAotCXsgVVNCX0RFVklDRShFUklDU1NPTl9WRU5ET1JfSUQsIEVSSUNTU09OX1BST0RVQ1RfRjM1MDdHXzEpIH0sCi0JeyBVU0JfREVWSUNFKEVSSUNTU09OX1ZFTkRPUl9JRCwgRVJJQ1NTT05fUFJPRFVDVF9GMzUwN0dfMikgfSwKIAl7IFVTQl9ERVZJQ0UoQkVOUV9WRU5ET1JfSUQsIEJFTlFfUFJPRFVDVF9IMTApIH0sCiAJeyBVU0JfREVWSUNFKDB4MWRhNSwgMHg0NTE1KSB9LCAvKiBCZW5RIEgyMCAqLwogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpAQCAtNTI1LDYgKzUyNSw4IEBACiAJLm5hbWUgICAgICAgPSAib3B0aW9uIiwKIAkucHJvYmUgICAgICA9IHVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgICAgPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKIAkuaWRfdGFibGUgICA9IG9wdGlvbl9pZHMsCiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CkBAIC01NTMsNiArNTU1LDggQEAKIAkuYXR0YWNoICAgICAgICAgICAgPSBvcHRpb25fc3RhcnR1cCwKIAkuc2h1dGRvd24gICAgICAgICAgPSBvcHRpb25fc2h1dGRvd24sCiAJLnJlYWRfaW50X2NhbGxiYWNrID0gb3B0aW9uX2luc3RhdF9jYWxsYmFjaywKKwkuc3VzcGVuZCAgICAgICAgICAgPSBvcHRpb25fc3VzcGVuZCwKKwkucmVzdW1lICAgICAgICAgICAgPSBvcHRpb25fcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKQEAgLTgyMywxMCArODI3LDEwIEBACiAJCQkJcmVxX3BrdC0+YlJlcXVlc3RUeXBlLCByZXFfcGt0LT5iUmVxdWVzdCk7CiAJCX0KIAl9IGVsc2UKLQkJZGJnKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZXJyKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KLQlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKKwlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04gJiYgc3RhdHVzICE9IC1FTk9FTlQpIHsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKQEAgLTg0NSw3ICs4NDksNiBAQAogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQogCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7IGkrKykgewogCQl0aGlzX3VyYiA9IHBvcnRkYXRhLT5vdXRfdXJic1tpXTsKIAkJaWYgKHRoaXNfdXJiICYmICF0ZXN0X2JpdChpLCAmcG9ydGRhdGEtPm91dF9idXN5KSkKQEAgLTExMDcsMTQgKzExMTAsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgb3B0aW9uX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpLCBqOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKLQogCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwpAQCAtMTEyNCw2ICsxMTI1LDE3IEBACiAJCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7IGorKykKIAkJCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+b3V0X3VyYnNbal0pOwogCX0KK30KKworc3RhdGljIHZvaWQgb3B0aW9uX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGksIGo7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJc3RvcF9yZWFkX3dyaXRlX3VyYnMoc2VyaWFsKTsKIAogCS8qIE5vdyBmcmVlIHRoZW0gKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewpAQCAtMTE1NCw2ICsxMTY2LDY2IEBACiAJfQogfQogCitzdGF0aWMgaW50IG9wdGlvbl9zdXNwZW5kKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCWRiZygiJXMgZW50ZXJlZCIsIF9fZnVuY19fKTsKKwlzdG9wX3JlYWRfd3JpdGVfdXJicyhzZXJpYWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3Jlc3VtZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBlcnIsIGksIGo7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCisJZGJnKCIlcyBlbnRlcmVkIiwgX19mdW5jX18pOworCS8qIGdldCB0aGUgaW50ZXJydXB0IFVSQnMgcmVzdWJtaXR0ZWQgdW5jb25kaXRpb25hbGx5ICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CisJCQlkYmcoIiVzOiBObyBpbnRlcnJ1cHQgVVJCIGZvciBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX05PSU8pOworCQlkYmcoIlN1Ym1pdHRlZCBpbnRlcnJ1cHQgVVJCIGZvciBwb3J0ICVkIChyZXN1bHQgJWQpIiwgaSwgZXJyKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXM6IEVycm9yICVkIGZvciBpbnRlcnJ1cHQgVVJCIG9mIHBvcnQlZCIsCisJCQkJIF9fZnVuY19fLCBlcnIsIGkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCS8qIHdhbGsgYWxsIHBvcnRzICovCisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisKKwkJLyogc2tpcCBjbG9zZWQgcG9ydHMgKi8KKwkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7CisJCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKKwkJCXVyYiA9IHBvcnRkYXRhLT5pbl91cmJzW2pdOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfTk9JTyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQkJCWVycigiJXM6IEVycm9yICVkIGZvciBidWxrIFVSQiAlZCIsCisJCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCX0KKwlyZXR1cm4gMDsKK30KKwogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDZiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIFF1YWxjb21tIFNlcmlhbCBVU0IgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDA4IFFVQUxDT01NIEluY29ycG9yYXRlZC4KKyAqCUNvcHlyaWdodCAoYykgMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoJQ29weXJpZ2h0IChjKSAyMDA5IE5vdmVsbCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlF1YWxjb21tIEluYyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlF1YWxjb21tIFVTQiBTZXJpYWwgZHJpdmVyIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMSl9LAkvKiBBY2VyIEdvYmkgUURMIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjEyKX0sCS8qIEFjZXIgR29iaSBNb2RlbSBEZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZjAsIDB4MWYxZCl9LAkvKiBIUCB1bjI0MDAgR29iaSBNb2RlbSBEZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZjAsIDB4MjAxZCl9LAkvKiBIUCB1bjI0MDAgR29iaSBRREwgRGV2aWNlICovCisJeyB9CQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHFjZHJpdmVyID0geworCS5uYW1lCQkJPSAicWNzZXJpYWwiLAorCS5wcm9iZQkJCT0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdAkJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS5zdXNwZW5kCQk9IHVzYl9zZXJpYWxfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQJPSB0cnVlLAorfTsKKworc3RhdGljIGludCBxY3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwlfX3U4IG5pbnRmOworCV9fdTggaWZudW07CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJbmludGYgPSBzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOworCWRiZygiTnVtIEludGVyZmFjZXMgPSAlZCIsIG5pbnRmKTsKKwlpZm51bSA9IHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWRiZygiVGhpcyBJbnRlcmZhY2UgPSAlZCIsIGlmbnVtKTsKKworCXN3aXRjaCAobmludGYpIHsKKwljYXNlIDE6CisJCS8qIFFETCBtb2RlICovCisJCWlmIChzZXJpYWwtPmludGVyZmFjZS0+bnVtX2FsdHNldHRpbmcgPT0gMikgeworCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZjsKKworCQkJaW50ZiA9ICZzZXJpYWwtPmludGVyZmFjZS0+YWx0c2V0dGluZ1sxXTsKKwkJCWlmIChpbnRmLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gMikgeworCQkJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigmaW50Zi0+ZW5kcG9pbnRbMF0uZGVzYykgJiYKKwkJCQkgICAgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KCZpbnRmLT5lbmRwb2ludFsxXS5kZXNjKSkgeworCQkJCQlkYmcoIlFETCBwb3J0IGZvdW5kIik7CisJCQkJCXJldHZhbCA9IHVzYl9zZXRfaW50ZXJmYWNlKHNlcmlhbC0+ZGV2LCBpZm51bSwgMSk7CisJCQkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkJCSJDb3VsZCBub3Qgc2V0IGludGVyZmFjZSwgZXJyb3IgJWRcbiIsCisJCQkJCQkJcmV0dmFsKTsKKwkJCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHJldHZhbDsKKwkJCQl9CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCS8qIENvbXBvc2l0ZSBtb2RlICovCisJCWlmIChpZm51bSA9PSAyKSB7CisJCQlkYmcoIk1vZGVtIHBvcnQgZm91bmQiKTsKKwkJCXJldHZhbCA9IHVzYl9zZXRfaW50ZXJmYWNlKHNlcmlhbC0+ZGV2LCBpZm51bSwgMCk7CisJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCSJDb3VsZCBub3Qgc2V0IGludGVyZmFjZSwgZXJyb3IgJWRcbiIsCisJCQkJCXJldHZhbCk7CisJCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCX0KKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJInVua25vd24gbnVtYmVyIG9mIGludGVyZmFjZXM6ICVkXG4iLCBuaW50Zik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgcWNkZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyICAgICA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgICAgID0gInFjc2VyaWFsIiwKKwl9LAorCS5kZXNjcmlwdGlvbiAgICAgICAgID0gIlF1YWxjb21tIFVTQiBtb2RlbSIsCisJLmlkX3RhYmxlICAgICAgICAgICAgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciAgICAgICAgICA9ICZxY2RyaXZlciwKKwkubnVtX3BvcnRzICAgICAgICAgICA9IDEsCisJLnByb2JlICAgICAgICAgICAgICAgPSBxY3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcWNpbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnFjZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZxY2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnFjZGV2aWNlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFjZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZxY2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZxY2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHFjaW5pdCk7Cittb2R1bGVfZXhpdChxY2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjNjYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogU3ltYm9sIFVTQiBiYXJjb2RlIHRvIHNlcmlhbCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb3ZlbGwgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNWUwLCAweDA2MDApIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBzeW1ib2xfcHJpdmF0ZSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGNoYXIgKmludF9idWZmZXI7CisJc3RydWN0IHVyYiAqaW50X3VyYjsKKwlpbnQgYnVmZmVyX3NpemU7CisJdTggYkludGVydmFsOworCXU4IGludF9hZGRyZXNzOworCXNwaW5sb2NrX3QgbG9jazsJLyogcHJvdGVjdHMgdGhlIGZvbGxvd2luZyBmbGFncyAqLworCWJvb2wgdGhyb3R0bGVkOworCWJvb2wgYWN0dWFsbHlfdGhyb3R0bGVkOworCWJvb2wgcnRzOworfTsKKworc3RhdGljIHZvaWQgc3ltYm9sX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgcmVzdWx0OworCWludCBhdmFpbGFibGVfcm9vbSA9IDA7CisJaW50IGRhdGFfbGVuZ3RoOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJICAgICAgZGF0YSk7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMSkgeworCQlkYXRhX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIDE7CisKKwkJLyoKKwkJICogRGF0YSBmcm9tIHRoZSBkZXZpY2UgY29tZXMgd2l0aCBhIDEgYnl0ZSBoZWFkZXI6CisJCSAqCisJCSAqIDxzaXplIG9mIGRhdGE+ZGF0YS4uLgorCQkgKiAJVGhpcyBpcyByZWFsIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgdHR5IGxheWVyCisJCSAqIHdlIHByZXR0eSBtdWNoIGp1c3QgaWdub3JlIHRoZSBzaXplIGFuZCBzZW5kIGV2ZXJ5dGhpbmcKKwkJICogZWxzZSB0byB0aGUgdHR5IGxheWVyLgorCQkgKi8KKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWF2YWlsYWJsZV9yb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LAorCQkJCQkJCWRhdGFfbGVuZ3RoKTsKKwkJCWlmIChhdmFpbGFibGVfcm9vbSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCAmZGF0YVsxXSwKKwkJCQkJCSAgICAgICBhdmFpbGFibGVfcm9vbSk7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAorCQkJIkltcHJvcGVyIGFtbW91bnQgb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UsICIKKwkJCSIlZCBieXRlcyIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJfQorCitleGl0OgorCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgaWYgd2Ugc2hvdWxkICovCisJaWYgKCFwcml2LT50aHJvdHRsZWQpIHsKKwkJdXNiX2ZpbGxfaW50X3VyYihwcml2LT5pbnRfdXJiLCBwcml2LT51ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LAorCQkJCSAJCXByaXYtPmludF9hZGRyZXNzKSwKKwkJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJICAgICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCX0gZWxzZQorCQlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKK30KKworc3RhdGljIGludCBzeW1ib2xfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKKwlwcml2LT5wb3J0ID0gcG9ydDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIEZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YQorCSAqIHRocm91Z2gsIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZQorCSAqIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuCisJICovCisJaWYgKHR0eSkKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2ludF91cmIocHJpdi0+aW50X3VyYiwgcHJpdi0+dWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LCBwcml2LT5pbnRfYWRkcmVzcyksCisJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkgc3ltYm9sX2ludF9jYWxsYmFjaywgcHJpdiwgcHJpdi0+YkludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwl1c2Jfa2lsbF91cmIocHJpdi0+aW50X3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlwcml2LT5pbnRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qCisJICogUmlnaHQgbm93IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1hbmRzCisJICogbW9zdCB1c2Vyc3BhY2UgdG9vbHMgd2FudCB0byBzZWUgZm9yIHRoaXMgZHJpdmVyLAorCSAqIHNvIGp1c3QgbG9nIHRoZSB0aGluZ3MuCisJICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NTRVJHRVRMU1I6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DU0VSR0VUTFNSXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DR1NFUklBTDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NHU0VSSUFMXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTUlXQUlUOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ01JV0FJVFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DR0lDT1VOVFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfaW5mbyhkZXYsICIlczogdW5rbm93biAoJWQpXG4iLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBzeW1ib2xfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qIFRPRE8gKi8KKwkvKiBwcm9iYWJseSBqdXN0IG5lZWQgdG8gc2hhZG93IHdoYXRldmVyIHdhcyBzZW50IHRvIHVzIGhlcmUgKi8KKwlkZXZfaW5mbyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bWJvbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcG9ydC0+ZGV2OworCisJLyogVE9ETyAqLworCS8qIHByb2JhYmx5IGp1c3QgbmVlZCB0byBzaGFkb3cgd2hhdGV2ZXIgd2FzIHNlbnQgdG8gdXMgaGVyZSAqLworCWRldl9pbmZvKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlib29sIGludF9pbl9mb3VuZCA9IGZhbHNlOworCisJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5zZXJpYWwgPSBzZXJpYWw7CisJcHJpdi0+cG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlwcml2LT51ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkvKiBmaW5kIG91ciBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlpbnRmID0gc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGludGYtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisKKwkJZW5kcG9pbnQgPSAmaW50Zi0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKKwkJCWNvbnRpbnVlOworCisJCXByaXYtPmludF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPmludF91cmIpIHsKKwkJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXByaXYtPmJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSAqIDI7CisJCXByaXYtPmludF9idWZmZXIgPSBrbWFsbG9jKHByaXYtPmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5pbnRfYnVmZmVyKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwcml2LT5pbnRfYWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQlwcml2LT5iSW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOworCisJCS8qIHNldCB1cCBvdXIgaW50IHVyYiAqLworCQl1c2JfZmlsbF9pbnRfdXJiKHByaXYtPmludF91cmIsIHByaXYtPnVkZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKHByaXYtPnVkZXYsCisJCQkJIAkJZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSBwcml2LT5pbnRfYnVmZmVyLCBwcml2LT5idWZmZXJfc2l6ZSwKKwkJCQkgc3ltYm9sX2ludF9jYWxsYmFjaywgcHJpdiwgcHJpdi0+YkludGVydmFsKTsKKworCQlpbnRfaW5fZm91bmQgPSB0cnVlOworCQlicmVhazsKKwkJfQorCisJaWYgKCFpbnRfaW5fZm91bmQpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LAorCQkJIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgcHJpdik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXVzYl9mcmVlX3VyYihwcml2LT5pbnRfdXJiKTsKKwlrZnJlZShwcml2LT5pbnRfYnVmZmVyKTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJdXNiX2tpbGxfdXJiKHByaXYtPmludF91cmIpOworCXVzYl9mcmVlX3VyYihwcml2LT5pbnRfdXJiKTsKKwlrZnJlZShwcml2LT5pbnRfYnVmZmVyKTsKKwlrZnJlZShwcml2KTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzeW1ib2xfZHJpdmVyID0geworCS5uYW1lID0JCQkic3ltYm9sIiwKKwkucHJvYmUgPQkJdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHN5bWJvbF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJzeW1ib2wiLAorCX0sCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0gCQkmc3ltYm9sX2RyaXZlciwKKwkubnVtX3BvcnRzID0JCTEsCisJLmF0dGFjaCA9CQlzeW1ib2xfc3RhcnR1cCwKKwkub3BlbiA9CQkJc3ltYm9sX29wZW4sCisJLmNsb3NlID0JCXN5bWJvbF9jbG9zZSwKKwkuc2h1dGRvd24gPQkJc3ltYm9sX3NodXRkb3duLAorCS50aHJvdHRsZSA9IAkJc3ltYm9sX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXN5bWJvbF91bnRocm90dGxlLAorCS5pb2N0bCA9IAkJc3ltYm9sX2lvY3RsLAorCS50aW9jbWdldCA9IAkJc3ltYm9sX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9IAkJc3ltYm9sX3Rpb2Ntc2V0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3ltYm9sX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmc3ltYm9sX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnN5bWJvbF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3ltYm9sX2RldmljZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN5bWJvbF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnN5bWJvbF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3ltYm9sX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHN5bWJvbF9pbml0KTsKK21vZHVsZV9leGl0KHN5bWJvbF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IGNmY2ZkNWEuLjc0MmE1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMjA0LDYgKzIwNCwxMSBAQAogCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CiAJfQogCisJaWYgKHBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKKwl9CisKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwb3J0LT5tdXRleCkpIHsKIAkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CkBAIC0xMDY3LDYgKzEwNzIsOCBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIHIgPSAwOwogCisJc2VyaWFsLT5zdXNwZW5kaW5nID0gMTsKKwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCWlmIChwb3J0KQpAQCAtMTA4MywxMCArMTA5MCwxNSBAQAogaW50IHVzYl9zZXJpYWxfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBydjsKIAorCXNlcmlhbC0+c3VzcGVuZGluZyA9IDA7CiAJaWYgKHNlcmlhbC0+dHlwZS0+cmVzdW1lKQotCQlyZXR1cm4gc2VyaWFsLT50eXBlLT5yZXN1bWUoc2VyaWFsKTsKLQlyZXR1cm4gMDsKKwkJcnYgPSBzZXJpYWwtPnR5cGUtPnJlc3VtZShzZXJpYWwpOworCWVsc2UKKwkJcnYgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKHNlcmlhbCk7CisKKwlyZXR1cm4gcnY7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9zZXJpYWxfcmVzdW1lKTsKIApAQCAtMTIyMiw3ICsxMjM0LDYgQEAKIAlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgcmVhZF9idWxrX2NhbGxiYWNrKTsKIAlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgd3JpdGVfYnVsa19jYWxsYmFjayk7CiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHNodXRkb3duKTsKLQlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgcmVzdW1lKTsKIH0KIAogaW50IHVzYl9zZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkcml2ZXIpCkBAIC0xMjMwLDYgKzEyNDEsOSBAQAogCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KIAlpbnQgcmV0dmFsOwogCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWZpeHVwX2dlbmVyaWMoZHJpdmVyKTsKIAogCWlmICghZHJpdmVyLT5kZXNjcmlwdGlvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwppbmRleCA5ZGY2ODg3Li44YTM3MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCkBAIC0yLDggKzIsOCBAQAogIyBVU0IgU3RvcmFnZSBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCi1jb21tZW50ICJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyIKLWNvbW1lbnQgInNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uIgorY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSIKK2NvbW1lbnQgImFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvIgogCWRlcGVuZHMgb24gVVNCCiAKIGNvbmZpZyBVU0JfU1RPUkFHRQpAQCAtMzIsMjEgKzMyLDI1IEBACiAJICB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcy4KIAogY29uZmlnIFVTQl9TVE9SQUdFX0RBVEFGQUIKLQlib29sICJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnQiCisJdHJpc3RhdGUgIkRhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgY2VydGFpbiBEYXRhZmFiIENvbXBhY3RGbGFzaCByZWFkZXJzLgogCSAgRGF0YWZhYiBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5kYXRhZmFidXNhLmNvbS8+LgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtZGF0YWZhYi4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0ZSRUVDT00KLQlib29sICJGcmVlY29tIFVTQi9BVEFQSSBCcmlkZ2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBGcmVlY29tIFVTQiB0byBJREUvQVRBUEkgYWRhcHRvci4KIAkgIEZyZWVjb20gaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8+LgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtZnJlZWNvbS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMAotCWJvb2wgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBVU0IgTWFzcyBTdG9yZSBkZXZpY2VzIGJhc2VkCkBAIC02MSw4ICs2NSwxMCBAQAogCSAgLSBDeVEndmUgQ1E4MDYwQSBDRFJXIGRyaXZlCiAJICAtIFBsYW5leCBlWHRyZW1lIERyaXZlIFJYLTI1SFUgVVNCLUlERSBjYWJsZSAobm90IG1vZGVsIFJYLTI1VSkKIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWlzZDIwMC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX1VTQkFUCi0JYm9vbCAiVVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgc3RvcmFnZSBkZXZpY2VzCkBAIC04MiwzMCArODgsMzggQEAKIAkgIC0gUkNBIExZUkEgTVAzIHBvcnRhYmxlCiAJICAtIFNhbmRpc2sgSW1hZ2VNYXRlIFNERFItMDViCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy11c2JhdC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX1NERFIwOQotCWJvb2wgIlNhbkRpc2sgU0REUi0wOSAoYW5kIG90aGVyIFNtYXJ0TWVkaWEsIGluY2x1ZGluZyBEUENNKSBzdXBwb3J0IgorCXRyaXN0YXRlICJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBTYW5kaXNrIFNERFItMDkKIAkgIFNtYXJ0TWVkaWEgcmVhZGVyIGluIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4KIAkgIEFsc28gd29ya3MgZm9yIHRoZSBNaWNyb3RlY2ggWmlvISBDb21wYWN0Rmxhc2gvU21hcnRNZWRpYSByZWFkZXIuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1zZGRyMDkuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9TRERSNTUKLQlib29sICJTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSBzdXBwb3J0IgorCXRyaXN0YXRlICJTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFNhbmRpc2sgU0REUi01NQogCSAgU21hcnRNZWRpYSByZWFkZXIgaW4gdGhlIFVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtc2RkcjU1LgorCiBjb25maWcgVVNCX1NUT1JBR0VfSlVNUFNIT1QKLQlib29sICJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlciIKKwl0cmlzdGF0ZSAiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXIiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgTGV4YXIgSnVtcHNob3QKIAkgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREEKLQlib29sICJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnQiCisJdHJpc3RhdGUgIk9seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBPbHltcHVzIE1BVVNCLTEwCkBAIC0xMTQsOCArMTI4LDEwIEBACiAJICBUaGVzZSBkZXZpY2VzIGFyZSBiYXNlZCBvbiB0aGUgQWxhdWRhIGNoaXAgYW5kIHN1cHBvcnQgYm90aAogCSAgWEQgYW5kIFNtYXJ0TWVkaWEgY2FyZHMuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSAotCWJvb2wgIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlcyIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBPbmVUb3VjaCBCdXR0b24gb24gTWF4dG9yIEhhcmQgRHJpdmVzIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAlkZXBlbmRzIG9uIElOUFVUPXkgfHwgSU5QVVQ9VVNCX1NUT1JBR0UKIAloZWxwCkBAIC0xMjcsOCArMTQzLDEwIEBACiAJICB0aGlzIGlucHV0IGluIGFueSBrZXliaW5kaW5nIHNvZnR3YXJlLiAoZS5nLiBnbm9tZSdzIGtleWJvYXJkIHNob3J0LQogCSAgY3V0cykKIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLW9uZXRvdWNoLgorCiBjb25maWcgVVNCX1NUT1JBR0VfS0FSTUEKLQlib29sICJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyIgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFJpbyBLYXJtYQpAQCAtMTM5LDggKzE1NywxMCBAQAogCSAgb24gdGhlIHJlc3VsdGluZyBzY3NpIGRldmljZSBub2RlIHJldHVybnMgdGhlIEthcm1hIHRvIG5vcm1hbAogCSAgb3BlcmF0aW9uLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMta2FybWEuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0JYm9vbCAiU0FUIGVtdWxhdGlvbiBvbiBDeXByZXNzIFVTQi9BVEEgQnJpZGdlIHdpdGggQVRBQ0IiCisJdHJpc3RhdGUgIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKQEAgLTE1MCw2ICsxNzAsOCBAQAogCSAgSWYgeW91IHNheSBubyBoZXJlIHlvdXIgZGV2aWNlIHdpbGwgc3RpbGwgd29yayB3aXRoIHRoZSBzdGFuZGFyZCB1c2IKIAkgIG1hc3Mgc3RvcmFnZSBjbGFzcy4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWN5cHJlc3MuCisKIGNvbmZpZyBVU0JfTElCVVNVQUwKIAlib29sICJUaGUgc2hhcmVkIHRhYmxlIG9mIGNvbW1vbiAob3IgdXN1YWwpIHN0b3JhZ2UgZGV2aWNlcyIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKaW5kZXggYjMyMDY5My4uNWJlNTRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCkBAIC0xMCwyMSArMTAsMzYgQEAKIG9iai0kKENPTkZJR19VU0JfU1RPUkFHRSkJKz0gdXNiLXN0b3JhZ2UubwogCiB1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpCSs9IGRlYnVnLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkJKz0gc2h1dHRsZV91c2JhdC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KQkrPSBzZGRyMDkubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gc2RkcjU1Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKQkrPSBmcmVlY29tLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IGlzZDIwMC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gZGF0YWZhYi5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IGp1bXBzaG90Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpCSs9IGFsYXVkYS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpCSs9IG9uZXRvdWNoLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkJKz0ga2FybWEubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpICs9IGN5cHJlc3NfYXRhY2IubwogCiB1c2Itc3RvcmFnZS1vYmpzIDo9CXNjc2lnbHVlLm8gcHJvdG9jb2wubyB0cmFuc3BvcnQubyB1c2IubyBcCiAJCQlpbml0aWFsaXplcnMubyBzaWVycmFfbXMubyBvcHRpb25fbXMubyAkKHVzYi1zdG9yYWdlLW9iai15KQogCi1pZm5lcSAoJChDT05GSUdfVVNCX0xJQlVTVUFMKSwpCi0Jb2JqLSQoQ09ORklHX1VTQikJKz0gbGlidXN1YWwubworaWZlcSAoJChDT05GSUdfVVNCX0xJQlVTVUFMKSwpCisJdXNiLXN0b3JhZ2Utb2JqcwkrPSB1c3VhbC10YWJsZXMubworZWxzZQorCW9iai0kKENPTkZJR19VU0IpCSs9IGxpYnVzdWFsLm8gdXN1YWwtdGFibGVzLm8KIGVuZGlmCisKK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpCSs9IHVtcy1hbGF1ZGEubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpICs9IHVtcy1jeXByZXNzLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCKQkrPSB1bXMtZGF0YWZhYi5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkJKz0gdW1zLWZyZWVjb20ubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkJKz0gdW1zLWlzZDIwMC5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IHVtcy1qdW1wc2hvdC5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpCQkrPSB1bXMta2FybWEubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKQkrPSB1bXMtb25ldG91Y2gubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkJKz0gdW1zLXNkZHIwOS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KQkrPSB1bXMtc2RkcjU1Lm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkJCSs9IHVtcy11c2JhdC5vCisKK3Vtcy1hbGF1ZGEtb2JqcwkJOj0gYWxhdWRhLm8KK3Vtcy1jeXByZXNzLW9ianMJOj0gY3lwcmVzc19hdGFjYi5vCit1bXMtZGF0YWZhYi1vYmpzCTo9IGRhdGFmYWIubwordW1zLWZyZWVjb20tb2Jqcwk6PSBmcmVlY29tLm8KK3Vtcy1pc2QyMDAtb2JqcwkJOj0gaXNkMjAwLm8KK3Vtcy1qdW1wc2hvdC1vYmpzCTo9IGp1bXBzaG90Lm8KK3Vtcy1rYXJtYS1vYmpzCQk6PSBrYXJtYS5vCit1bXMtb25ldG91Y2gtb2Jqcwk6PSBvbmV0b3VjaC5vCit1bXMtc2RkcjA5LW9ianMJCTo9IHNkZHIwOS5vCit1bXMtc2RkcjU1LW9ianMJCTo9IHNkZHI1NS5vCit1bXMtdXNiYXQtb2JqcwkJOj0gc2h1dHRsZV91c2JhdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwppbmRleCA4ZDM3MTFhLi42N2VkYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKQEAgLTMxLDYgKzMxLDggQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMzksNyArNDEsNzkgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiYWxhdWRhLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogU3RhdHVzIGJ5dGVzCisgKi8KKyNkZWZpbmUgQUxBVURBX1NUQVRVU19FUlJPUgkJMHgwMQorI2RlZmluZSBBTEFVREFfU1RBVFVTX1JFQURZCQkweDQwCisKKy8qCisgKiBDb250cm9sIG9wY29kZXMgKGZvciByZXF1ZXN0IGZpZWxkKQorICovCisjZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU1RBVFVTCTB4MDgKKyNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TVEFUVVMJMHg5OAorI2RlZmluZSBBTEFVREFfQUNLX1hEX01FRElBX0NIQU5HRQkweDBhCisjZGVmaW5lIEFMQVVEQV9BQ0tfU01fTUVESUFfQ0hBTkdFCTB4OWEKKyNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TSUcJCTB4ODYKKyNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TSUcJCTB4OTYKKworLyoKKyAqIEJ1bGsgY29tbWFuZCBpZGVudGl0eSAoYnl0ZSAwKQorICovCisjZGVmaW5lIEFMQVVEQV9CVUxLX0NNRAkJCTB4NDAKKworLyoKKyAqIEJ1bGsgb3Bjb2RlcyAoYnl0ZSAxKQorICovCisjZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9SRURVX0RBVEEJMHg4NQorI2RlZmluZSBBTEFVREFfQlVMS19SRUFEX0JMT0NLCQkweDk0CisjZGVmaW5lIEFMQVVEQV9CVUxLX0VSQVNFX0JMT0NLCQkweGEzCisjZGVmaW5lIEFMQVVEQV9CVUxLX1dSSVRFX0JMT0NLCQkweGI0CisjZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9TVEFUVVMyCQkweGI3CisjZGVmaW5lIEFMQVVEQV9CVUxLX1JFU0VUX01FRElBCQkweGUwCisKKy8qCisgKiBQb3J0IHRvIG9wZXJhdGUgb24gKGJ5dGUgOCkKKyAqLworI2RlZmluZSBBTEFVREFfUE9SVF9YRAkJCTB4MDAKKyNkZWZpbmUgQUxBVURBX1BPUlRfU00JCQkweDAxCisKKy8qCisgKiBMQkEgYW5kIFBCQSBhcmUgdW5zaWduZWQgaW50cy4gU3BlY2lhbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgVU5ERUYgICAgMHhmZmZmCisjZGVmaW5lIFNQQVJFICAgIDB4ZmZmZQorI2RlZmluZSBVTlVTQUJMRSAweGZmZmQKKworc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwkJLyogdG90YWwgbWVkaWEgc2l6ZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBwYWdlc2l6ZTsJCS8qIHBhZ2Ugc2l6ZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBibG9ja3NpemU7CQkvKiBudW1iZXIgb2YgcGFnZXMgcGVyIGJsb2NrICovCisJdW5zaWduZWQgaW50IHV6b25lc2l6ZTsJCS8qIG51bWJlciBvZiB1c2FibGUgYmxvY2tzIHBlciB6b25lICovCisJdW5zaWduZWQgaW50IHpvbmVzaXplOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgem9uZSAqLworCXVuc2lnbmVkIGludCBibG9ja21hc2s7CQkvKiBtYXNrIHRvIGdldCBwYWdlIGZyb20gYWRkcmVzcyAqLworCisJdW5zaWduZWQgY2hhciBwYWdlc2hpZnQ7CisJdW5zaWduZWQgY2hhciBibG9ja3NoaWZ0OworCXVuc2lnbmVkIGNoYXIgem9uZXNoaWZ0OworCisJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCisJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCit9OworCitzdHJ1Y3QgYWxhdWRhX2luZm8geworCXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdOworCWludCB3cl9lcDsJCQkvKiBlbmRwb2ludCB0byB3cml0ZSBkYXRhIG91dCBvZiAqLworCisJdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCiAjZGVmaW5lIExTQl9vZihzKSAoKHMpJjB4RkYpCkBAIC01Miw2ICsxMjYsNDggQEAKICNkZWZpbmUgUEJBX0hJKHBiYSkgKHBiYSA+PiAzKQogI2RlZmluZSBQQkFfWk9ORShwYmEpIChwYmEgPj4gMTEpCiAKK3N0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBhbGF1ZGFfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWxhdWRhX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGFsYXVkYV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfYWxhdWRhLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogLyoKICAqIE1lZGlhIGhhbmRsaW5nCiAgKi8KQEAgLTMwNyw3ICs0MjMsOCBAQAogCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKIAltZWRpYV9pbmZvID0gYWxhdWRhX2NhcmRfZmluZF9pZChkYXRhWzFdKTsKIAlpZiAobWVkaWFfaW5mbyA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX2luaXRfbWVkaWE6IFVucmVjb2duaXNlZCBtZWRpYSBzaWduYXR1cmU6ICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAiCiAJCQkiJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKIAkJCWRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwpAQCAtNTE4LDcgKzYzNSw4IEBACiAKIAkJLyogY2hlY2sgZXZlbiBwYXJpdHkgKi8KIAkJaWYgKHBhcml0eVtkYXRhWzZdIF4gZGF0YVs3XV0pIHsKLQkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImFsYXVkYV9yZWFkX21hcDogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgogCQkJICAgICAgICIgKCUwMlggJTAyWClcbiIsIGksIGRhdGFbNl0sIGRhdGFbN10pOwogCQkJcGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwogCQkJY29udGludWU7CkBAIC01MzgsMTMgKzY1NiwxNiBAQAogCQkgKi8KIAogCQlpZiAobGJhX29mZnNldCA+PSB1em9uZXNpemUpIHsKLQkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImFsYXVkYV9yZWFkX21hcDogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAogCQkJICAgICAgIGxiYV9yZWFsLCBibG9ja251bSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChsYmFfdG9fcGJhW2xiYV9vZmZzZXRdICE9IFVOREVGKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImFsYXVkYV9yZWFkX21hcDogIgorCQkJICAgICAgICJMQkEgJWQgc2VlbiBmb3IgUEJBICVkIGFuZCAlZFxuIiwKIAkJCSAgICAgICBsYmFfcmVhbCwgbGJhX3RvX3BiYVtsYmFfb2Zmc2V0XSwgYmxvY2tudW0pOwogCQkJY29udGludWU7CiAJCX0KQEAgLTcxMiwxMyArODMzLDE1IEBACiAJaWYgKHBiYSA9PSAxKSB7CiAJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCiAJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLwotCQlwcmludGsoImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiYWxhdWRhX3dyaXRlX2xiYTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIAl9CiAKIAluZXdfcGJhID0gYWxhdWRhX2ZpbmRfdW51c2VkX3BiYSgmTUVESUFfSU5GTyh1cyksIHpvbmUpOwogCWlmICghbmV3X3BiYSkgewotCQlwcmludGsoImFsYXVkYV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImFsYXVkYV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTgxOCw3ICs5NDEsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUpICogKHBhZ2VzaXplICsgNjQpOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsYXVkYV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIApAQCAtOTExLDcgKzEwMzQsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUpICogcGFnZXNpemU7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTkyMSw3ICsxMDQ0LDcgQEAKIAkgKi8KIAlibG9ja2J1ZmZlciA9IGttYWxsb2MoKHBhZ2VzaXplICsgNjQpICogYmxvY2tzaXplLCBHRlBfTk9JTyk7CiAJaWYgKGJsb2NrYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJa2ZyZWUoYnVmZmVyKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CkBAIC05OTEsNyArMTExNCw3IEBACiAvKgogICogSW5pdGlhbGl6ZSBhbGF1ZGFfaW5mbyBzdHJ1Y3QgYW5kIGZpbmQgdGhlIGRhdGEtd3JpdGUgZW5kcG9pbnQKICAqLwotaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nID0gdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmc7CkBAIC0xMDEzLDcgKzExMzYsNyBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJjOwogCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtPmV4dHJhOwpAQCAtMTEyMSwzICsxMjQ0LDQ4IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgYWxhdWRhX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gYWxhdWRhX3VzYl9pZHMpICsgYWxhdWRhX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOworCXVzLT50cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMTsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1hbGF1ZGEiLAorCS5wcm9iZSA9CWFsYXVkYV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlhbGF1ZGFfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxhdWRhX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZhbGF1ZGFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsYXVkYV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFsYXVkYV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbGF1ZGFfaW5pdCk7Cittb2R1bGVfZXhpdChhbGF1ZGFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwMGY4Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgIChjKSAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Ci0gKgotICogU2VlIGFsYXVkYS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9BTEFVREFfSAotI2RlZmluZSBfVVNCX0FMQVVEQV9ICi0KLS8qCi0gKiBTdGF0dXMgYnl0ZXMKLSAqLwotI2RlZmluZSBBTEFVREFfU1RBVFVTX0VSUk9SCQkweDAxCi0jZGVmaW5lIEFMQVVEQV9TVEFUVVNfUkVBRFkJCTB4NDAKLQotLyoKLSAqIENvbnRyb2wgb3Bjb2RlcyAoZm9yIHJlcXVlc3QgZmllbGQpCi0gKi8KLSNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TVEFUVVMJMHgwOAotI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NUQVRVUwkweDk4Ci0jZGVmaW5lIEFMQVVEQV9BQ0tfWERfTUVESUFfQ0hBTkdFCTB4MGEKLSNkZWZpbmUgQUxBVURBX0FDS19TTV9NRURJQV9DSEFOR0UJMHg5YQotI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NJRwkJMHg4NgotI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NJRwkJMHg5NgotCi0vKgotICogQnVsayBjb21tYW5kIGlkZW50aXR5IChieXRlIDApCi0gKi8KLSNkZWZpbmUgQUxBVURBX0JVTEtfQ01ECQkJMHg0MAotCi0vKgotICogQnVsayBvcGNvZGVzIChieXRlIDEpCi0gKi8KLSNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1JFRFVfREFUQQkweDg1Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX1JFQURfQkxPQ0sJCTB4OTQKLSNkZWZpbmUgQUxBVURBX0JVTEtfRVJBU0VfQkxPQ0sJCTB4YTMKLSNkZWZpbmUgQUxBVURBX0JVTEtfV1JJVEVfQkxPQ0sJCTB4YjQKLSNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1NUQVRVUzIJCTB4YjcKLSNkZWZpbmUgQUxBVURBX0JVTEtfUkVTRVRfTUVESUEJCTB4ZTAKLQotLyoKLSAqIFBvcnQgdG8gb3BlcmF0ZSBvbiAoYnl0ZSA4KQotICovCi0jZGVmaW5lIEFMQVVEQV9QT1JUX1hECQkJMHgwMAotI2RlZmluZSBBTEFVREFfUE9SVF9TTQkJCTB4MDEKLQotLyoKLSAqIExCQSBhbmQgUEJBIGFyZSB1bnNpZ25lZCBpbnRzLiBTcGVjaWFsIHZhbHVlcy4KLSAqLwotI2RlZmluZSBVTkRFRiAgICAweGZmZmYKLSNkZWZpbmUgU1BBUkUgICAgMHhmZmZlCi0jZGVmaW5lIFVOVVNBQkxFIDB4ZmZmZAotCi1pbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTsKLWludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwkJLyogdG90YWwgbWVkaWEgc2l6ZSBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBwYWdlc2l6ZTsJCS8qIHBhZ2Ugc2l6ZSBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBibG9ja3NpemU7CQkvKiBudW1iZXIgb2YgcGFnZXMgcGVyIGJsb2NrICovCi0JdW5zaWduZWQgaW50IHV6b25lc2l6ZTsJCS8qIG51bWJlciBvZiB1c2FibGUgYmxvY2tzIHBlciB6b25lICovCi0JdW5zaWduZWQgaW50IHpvbmVzaXplOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgem9uZSAqLwotCXVuc2lnbmVkIGludCBibG9ja21hc2s7CQkvKiBtYXNrIHRvIGdldCBwYWdlIGZyb20gYWRkcmVzcyAqLwotCi0JdW5zaWduZWQgY2hhciBwYWdlc2hpZnQ7Ci0JdW5zaWduZWQgY2hhciBibG9ja3NoaWZ0OwotCXVuc2lnbmVkIGNoYXIgem9uZXNoaWZ0OwotCi0JdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCi0JdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCi19OwotCi1zdHJ1Y3QgYWxhdWRhX2luZm8gewotCXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdOwotCWludCB3cl9lcDsJCQkvKiBlbmRwb2ludCB0byB3cml0ZSBkYXRhIG91dCBvZiAqLwotCi0JdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwotfTsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMKaW5kZXggODk4ZTY3ZC4uYzg0NDcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgpAQCAtMjksNiArMzAsNDkgQEAKICNpbmNsdWRlICJzY3NpZ2x1ZS5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK01PRFVMRV9ERVNDUklQVElPTigiU0FUIHN1cHBvcnQgZm9yIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2VzIHdpdGggQVRBQ0IiKTsKK01PRFVMRV9BVVRIT1IoIk1hdHRoaWV1IENhc3RldCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGN5cHJlc3NfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGN5cHJlc3NfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgY3lwcmVzc191bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfY3lwcmVzcy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIC8qCiAgKiBBVEFDQiBpcyBhIHByb3RvY29sIHVzZWQgb24gY3lwcmVzcyB1c2I8LT5hdGEgYnJpZGdlIHRvCiAgKiBzZW5kIHJhdyBBVEEgY29tbWFuZCBvdmVyIG1hc3Mgc3RvcmFnZQpAQCAtMzYsNyArODAsNyBAQAogICogTW9yZSBpbmZvIHRoYXQgYmUgZm91bmQgb24gY3k3YzY4MzEwXzgucGRmIGFuZCBjeTdjNjgzMDBjXzgucGRmCiAgKiBkYXRhc2hlZXQgZnJvbSBjeXByZXNzLmNvbS4KICAqLwotdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKIApAQCAtMTMzLDE5ICsxNzcsMTggQEAKIAogCQkvKiBidWlsZCB0aGUgY29tbWFuZCBmb3IKIAkJICogcmVhZGluZyB0aGUgQVRBIHJlZ2lzdGVycyAqLwotCQlzY3NpX2VoX3ByZXBfY21uZChzcmIsICZzZXMsIE5VTEwsIDAsIDApOwotCQlzcmItPnNkYi5sZW5ndGggPSBzaXplb2YocmVncyk7Ci0JCXNnX2luaXRfb25lKCZzZXMuc2Vuc2Vfc2dsLCByZWdzLCBzcmItPnNkYi5sZW5ndGgpOwotCQlzcmItPnNkYi50YWJsZS5zZ2wgPSAmc2VzLnNlbnNlX3NnbDsKLQkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKLQkJc3JiLT5zZGIudGFibGUubmVudHMgPSAxOworCQlzY3NpX2VoX3ByZXBfY21uZChzcmIsICZzZXMsIE5VTEwsIDAsIHNpemVvZihyZWdzKSk7CisKIAkJLyogd2UgdXNlIHRoZSBzYW1lIGNvbW1hbmQgYXMgYmVmb3JlLCBidXQgd2Ugc2V0CiAJCSAqIHRoZSByZWFkIHRhc2tmaWxlIGJpdCwgZm9yIG5vdCBleGVjdXRpbmcgYXRhY2IgY29tbWFuZCwKIAkJICogYnV0IHJlYWRpbmcgcmVnaXN0ZXIgc2VsZWN0ZWQgaW4gc3JiLT5jbW5kWzRdCiAJCSAqLworCQlzcmItPmNtZF9sZW4gPSAxNjsKKwkJc3JiLT5jbW5kID0gc2VzLmNtbmQ7CiAJCXNyYi0+Y21uZFsyXSA9IDE7CiAKIAkJdXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kKHNyYiwgdXMpOworCQltZW1jcHkocmVncywgc3JiLT5zZW5zZV9idWZmZXIsIHNpemVvZihyZWdzKSk7CiAJCXRtcF9yZXN1bHQgPSBzcmItPnJlc3VsdDsKIAkJc2NzaV9laF9yZXN0b3JlX2NtbmQoc3JiLCAmc2VzKTsKIAkJLyogd2UgZmFpbCB0byBnZXQgcmVnaXN0ZXJzLCByZXBvcnQgaW52YWxpZCBjb21tYW5kICovCkBAIC0xNjIsOCArMjA1LDggQEAKIAogCQkvKiBYWFggd2Ugc2hvdWxkIGdlbmVyYXRlIHNrLCBhc2MsIGFzY3EgZnJvbSBzdGF0dXMgYW5kIGVycm9yCiAJCSAqIHJlZ3MKLQkJICogKHNlZSAxMS4xIEVycm9yIHRyYW5zbGF0aW9uIK0gQVRBIGRldmljZSBlcnJvciB0byBTQ1NJIGVycm9yIG1hcCkKLQkJICogYW5kIGF0YV90b19zZW5zZV9lcnJvciBmcm9tIGxpYmF0YS4KKwkJICogKHNlZSAxMS4xIEVycm9yIHRyYW5zbGF0aW9uIEFUQSBkZXZpY2UgZXJyb3IgdG8gU0NTSSBlcnJvcgorCQkgKiAgbWFwLCBhbmQgYXRhX3RvX3NlbnNlX2Vycm9yIGZyb20gbGliYXRhLikKIAkJICovCiAKIAkJLyogU2Vuc2UgZGF0YSBpcyBjdXJyZW50IGFuZCBmb3JtYXQgaXMgZGVzY3JpcHRvci4gKi8KQEAgLTE5OCwzICsyNDEsNDggQEAKIAlpZiAoc3JiLT5jbW5kWzBdID09IEFUQV8xMikKIAkJc3JiLT5jbWRfbGVuID0gMTI7CiB9CisKKworc3RhdGljIGludCBjeXByZXNzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gY3lwcmVzc191c2JfaWRzKSArIGN5cHJlc3NfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kgd2l0aCBDeXByZXNzIEFUQUNCIjsKKwl1cy0+cHJvdG9faGFuZGxlciA9IGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2g7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeXByZXNzX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWN5cHJlc3MiLAorCS5wcm9iZSA9CWN5cHJlc3NfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JY3lwcmVzc191c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjeXByZXNzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeXByZXNzX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjeXByZXNzX2luaXQpOworbW9kdWxlX2V4aXQoY3lwcmVzc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKaW5kZXggMTdmMWFlMi4uMmI2ZTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTU4LDEyICs1OSw2NSBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJkYXRhZmFiLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEYXRhZmFiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiSmltbWllIE1heWZpZWxkIDxtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0cnVjdCBkYXRhZmFiX2luZm8geworCXVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOwkvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KKwl1bnNpZ25lZCBsb25nICAgc3NpemU7CQkvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCXNpZ25lZCBjaGFyCWx1bjsJCS8qIHVzZWQgZm9yIGR1YWwtc2xvdCByZWFkZXJzICovCisKKwkvKiB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldCAqLworCXVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisJdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKIHN0YXRpYyBpbnQgZGF0YWZhYl9kZXRlcm1pbmVfbHVuKHN0cnVjdCB1c19kYXRhICp1cywKIAkJCQkgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbyk7CiAKIAorLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgZGF0YWZhYl91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGF0YWZhYi5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGF0YWZhYl91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBkYXRhZmFiX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogc3RhdGljIGlubGluZSBpbnQKIGRhdGFmYWJfYnVsa19yZWFkKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikgewogCWlmIChsZW4gPT0gMCkKQEAgLTUwMCw3ICs1NTQsNyBAQAogCiAvLyBUcmFuc3BvcnQgZm9yIHRoZSBEYXRhZmFiIE1EQ0ZFLUIKIC8vCi1pbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvOwogCWludCByYzsKQEAgLTY2NSwzICs3MTksNDkgQEAKIAlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KKworc3RhdGljIGludCBkYXRhZmFiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gZGF0YWZhYl91c2JfaWRzKSArIGRhdGFmYWJfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiRGF0YWZhYiBCdWxrLU9ubHkiOworCXVzLT50cmFuc3BvcnQgPSBkYXRhZmFiX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkYXRhZmFiX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWRhdGFmYWIiLAorCS5wcm9iZSA9CWRhdGFmYWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JZGF0YWZhYl91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYXRhZmFiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZkYXRhZmFiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYXRhZmFiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmZGF0YWZhYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkYXRhZmFiX2luaXQpOworbW9kdWxlX2V4aXQoZGF0YWZhYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTNmMjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIERhdGFmYWIgTURDRkUtQiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnKQotICoKLSAqIFNlZSBkYXRhZmFiLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfREFUQUZBQl9NRENGRV9CX0gKLSNkZWZpbmUgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAotCi1leHRlcm4gaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotc3RydWN0IGRhdGFmYWJfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7CS8vIHRvdGFsIHNlY3RvciBjb3VudAotCXVuc2lnbmVkIGxvbmcgICBzc2l6ZTsJCS8vIHNlY3RvciBzaXplIGluIGJ5dGVzCi0Jc2lnbmVkIGNoYXIJbHVuOwkJLy8gdXNlZCBmb3IgZHVhbC1zbG90IHJlYWRlcnMKLQkKLQkvLyB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldAotCXVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlCi0JdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7CS8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwppbmRleCA3M2FjNzI2Li41NGNjOTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwpAQCAtMjYsNiArMjYsNyBAQAogICogKGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8pCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKQEAgLTMzLDcgKzM0LDEwIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImZyZWVjb20uaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yIik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBCcm93biA8dXNiLXN0b3JhZ2VAZGF2aWRiLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRwogc3RhdGljIHZvaWQgcGR1bXAgKHZvaWQgKiwgaW50KTsKQEAgLTEwMyw2ICsxMDcsNDcgQEAKICNkZWZpbmUgRkNNX1BBQ0tFVF9MRU5HVEgJCTY0CiAjZGVmaW5lIEZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSAk0CiAKK3N0YXRpYyBpbnQgaW5pdF9mcmVlY29tKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgZnJlZWNvbV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZnJlZWNvbV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBmcmVlY29tX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9mcmVlY29tLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKIHN0YXRpYyBpbnQKIGZyZWVjb21fcmVhZGRhdGEgKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzLAogCQl1bnNpZ25lZCBpbnQgaXBpcGUsIHVuc2lnbmVkIGludCBvcGlwZSwgaW50IGNvdW50KQpAQCAtMTczLDcgKzIxOCw3IEBACiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvci4KICAqCiAgKi8KLWludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGZyZWVjb21fY2Jfd3JhcCAqZmNiOwogCXN0cnVjdCBmcmVlY29tX3N0YXR1cyAgKmZzdDsKQEAgLTM3Nyw4ICs0MjIsNyBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotaW50Ci1mcmVlY29tX2luaXQgKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaW5pdF9mcmVlY29tKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmVzdWx0OwogCWNoYXIgKmJ1ZmZlciA9IHVzLT5pb2J1ZjsKQEAgLTQxNyw3ICs0NjEsNyBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotaW50IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlwcmludGsgKEtFUk5fQ1JJVCAiZnJlZWNvbSByZXNldCBjYWxsZWRcbiIpOwogCkBAIC00NzksMyArNTIzLDQ4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBmcmVlY29tX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gZnJlZWNvbV91c2JfaWRzKSArIGZyZWVjb21fdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJGcmVlY29tIjsKKwl1cy0+dHJhbnNwb3J0ID0gZnJlZWNvbV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAwOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZnJlZWNvbV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1mcmVlY29tIiwKKwkucHJvYmUgPQlmcmVlY29tX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWZyZWVjb21fdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnJlZWNvbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZnJlZWNvbV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnJlZWNvbV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmZyZWVjb21fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZnJlZWNvbV9pbml0KTsKK21vZHVsZV9leGl0KGZyZWVjb21fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGQwZmU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyogRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgotICoKLSAqIEZyZWVjb20gdjAuMToKLSAqCi0gKiBGaXJzdCByZWxlYXNlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIERhdmlkIEJyb3duIDx1c2Itc3RvcmFnZUBkYXZpZGIub3JnPgotICoKLSAqIFNlZSBmcmVlY29tLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9GUkVFQ09NX1VTQl9ICi0jZGVmaW5lIF9GUkVFQ09NX1VTQl9ICi0KLWV4dGVybiBpbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGZyZWVjb21faW5pdCAoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCAzODNhYmYyLi44ODJjNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CkBAIC01Nyw3ICs1OCw1MyBAQAogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzY3NpZ2x1ZS5oIgotI2luY2x1ZGUgImlzZDIwMC5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQyIpOworTU9EVUxFX0FVVEhPUigiQmr2cm4gU3RlbmJlcmcgPGJqb3JuQGhheHguc2U+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgaXNkMjAwX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9pc2QyMDAuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlzZDIwMF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBpc2QyMDBfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIFVTVUFMX0RFVgogCiAKIC8qIFRpbWVvdXQgZGVmaW5lcyAoaW4gU2Vjb25kcykgKi8KQEAgLTE1MTgsNyArMTU2NSw3IEBACiAgKiBJbml0aWFsaXphdGlvbiBmb3IgdGhlIElTRDIwMCAKICAqLwogCi1pbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlVU19ERUJVR1AoIklTRDIwMCBJbml0aWFsaXphdGlvbi4uLlxuIik7CiAKQEAgLTE1NDksNyArMTU5Niw3IEBACiAgKgogICovCiAKLXZvaWQgaXNkMjAwX2F0YV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgaXNkMjAwX2F0YV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCBzZW5kVG9UcmFuc3BvcnQgPSAxLCBvcmlnX2J1ZmZsZW47CiAJdW5pb24gYXRhX2NkYiBhdGFDZGI7CkBAIC0xNTcwLDMgKzE2MTcsNDcgQEAKIAogCWlzZDIwMF9zcmJfc2V0X2J1ZmZsZW4oc3JiLCBvcmlnX2J1ZmZsZW4pOwogfQorCitzdGF0aWMgaW50IGlzZDIwMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGlzZDIwMF91c2JfaWRzKSArIGlzZDIwMF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnByb3RvY29sX25hbWUgPSAiSVNEMjAwIEFUQS9BVEFQSSI7CisJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpc2QyMDBfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtaXNkMjAwIiwKKwkucHJvYmUgPQlpc2QyMDBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JaXNkMjAwX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlzZDIwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmaXNkMjAwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpc2QyMDBfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZpc2QyMDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaXNkMjAwX2luaXQpOworbW9kdWxlX2V4aXQoaXNkMjAwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMzVmNGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIEhlYWRlciBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCi0gKgotICogRmlyc3QgcmVsZWFzZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIChzdXBwb3J0QGluLXN5c3RlbS5jb20pCi0gKgotICogU2VlIGlzZDIwMC5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9JU0QyMDBfSAotI2RlZmluZSBfVVNCX0lTRDIwMF9ICi0KLWV4dGVybiB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwppbmRleCBkZjY3ZjEzLi4xYzY5NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCkBAIC00Niw2ICs0Niw3IEBACiAgICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTUsOSArNTYsNjEgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAianVtcHNob3QuaCIKIAogCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgTGV4YXIgXCJKdW1wc2hvdFwiIENvbXBhY3QgRmxhc2ggcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJKaW1taWUgTWF5ZmllbGQgPG1heWZpZWxkK3VzYkBzYWNraGVhZHMub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBqdW1wc2hvdF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGp1bXBzaG90X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGp1bXBzaG90X3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9qdW1wc2hvdC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKK3N0cnVjdCBqdW1wc2hvdF9pbmZvIHsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisgICB1bnNpZ25lZCBsb25nICAgc3NpemU7ICAgICAgIC8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCisKKyAgIC8qIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0ICovCisgICB1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKKwogc3RhdGljIGlubGluZSBpbnQganVtcHNob3RfYnVsa19yZWFkKHN0cnVjdCB1c19kYXRhICp1cywKIAkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAogCQkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKQEAgLTQyOSw3ICs0ODIsNyBAQAogCiAvLyBUcmFuc3BvcnQgZm9yIHRoZSBMZXhhciAnSnVtcHNob3QnCiAvLwotaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QganVtcHNob3RfaW5mbyAqaW5mbzsKIAlpbnQgcmM7CkBAIC01OTIsMyArNjQ1LDQ5IEBACiAJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CisKK3N0YXRpYyBpbnQganVtcHNob3RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBqdW1wc2hvdF91c2JfaWRzKSArIGp1bXBzaG90X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkxleGFyIEp1bXBzaG90IENvbnRyb2wvQnVsayI7CisJdXMtPnRyYW5zcG9ydCA9IGp1bXBzaG90X3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBqdW1wc2hvdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1qdW1wc2hvdCIsCisJLnByb2JlID0JanVtcHNob3RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JanVtcHNob3RfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQganVtcHNob3RfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmp1bXBzaG90X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqdW1wc2hvdF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmp1bXBzaG90X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGp1bXBzaG90X2luaXQpOworbW9kdWxlX2V4aXQoanVtcHNob3RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YmFjOWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyogRHJpdmVyIGZvciBMZXhhciAiSnVtcHNob3QiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCt1c2JAc2Fja2hlYWRzLm9yZykKLSAqCi0gKiBTZWUganVtcHNob3QuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9KVU1QU0hPVF9ICi0jZGVmaW5lIF9VU0JfSlVNUFNIT1RfSAotCi1leHRlcm4gaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBqdW1wc2hvdF9pbmZvIHsKLSAgIHVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOyAgICAgLy8gdG90YWwgc2VjdG9yIGNvdW50Ci0gICB1bnNpZ25lZCBsb25nICAgc3NpemU7ICAgICAgIC8vIHNlY3RvciBzaXplIGluIGJ5dGVzCi0gCi0gICAvLyB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldAotICAgdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKLSAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7ICAgLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlCi0gICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jCmluZGV4IDBkNzlhZTUuLjc5NTNkOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKQEAgLTE4LDYgKzE4LDggQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMjUsNyArMjcsMTAgQEAKICNpbmNsdWRlICJ1c2IuaCIKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImthcm1hLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBSaW8gS2FybWEiKTsKK01PRFVMRV9BVVRIT1IoIkJvYiBDb3BlbGFuZCA8bWVAYm9iY29wZWxhbmQuY29tPiwgS2VpdGggQmVubmV0dCA8a2VpdGhAbWNzLnN0LWFuZC5hYy51az4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2RlZmluZSBSSU9fUFJFRklYICJSSU9QXHgwMCIKICNkZWZpbmUgUklPX1BSRUZJWF9MRU4gNQpAQCAtMzYsMTMgKzQxLDUzIEBACiAjZGVmaW5lIFJJT19MRUFWRV9TVE9SQUdFIDB4MgogI2RlZmluZSBSSU9fUkVTRVQgMHhDCiAKLWV4dGVybiBpbnQgdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSAqKTsKLQogc3RydWN0IGthcm1hX2RhdGEgewogCWludCBpbl9zdG9yYWdlOwogCWNoYXIgKnJlY3Y7CiB9OwogCitzdGF0aWMgaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQga2FybWFfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2thcm1hLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBrYXJtYV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBrYXJtYV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiAvKgogICogU2VuZCBjb21tYW5kcyB0byBSaW8gS2FybWEuCiAgKgpAQCAtMTA0LDcgKzE0OSw3IEBACiAgKiBUcmFwIFNUQVJUX1NUT1AgYW5kIFJFQURfMTAgdG8gbGVhdmUvcmUtZW50ZXIgc3RvcmFnZSBtb2RlLgogICogRXZlcnl0aGluZyBlbHNlIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIG5vcm1hbCBidWxrIGxheWVyLgogICovCi1pbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0gKHN0cnVjdCBrYXJtYV9kYXRhICopIHVzLT5leHRyYTsKQEAgLTEzMyw3ICsxNzgsNyBAQAogCWtmcmVlKGRhdGEtPnJlY3YpOwogfQogCi1pbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGthcm1hX2RhdGEgKmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga2FybWFfZGF0YSksIEdGUF9OT0lPKTsKQEAgLTE1MywzICsxOTgsNDggQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorCitzdGF0aWMgaW50IGthcm1hX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0ga2FybWFfdXNiX2lkcykgKyBrYXJtYV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlJpbyBLYXJtYS9CdWxrIjsKKwl1cy0+dHJhbnNwb3J0ID0gcmlvX2thcm1hX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGthcm1hX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWthcm1hIiwKKwkucHJvYmUgPQlrYXJtYV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlrYXJtYV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrYXJtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigma2FybWFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGthcm1hX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigma2FybWFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa2FybWFfaW5pdCk7Cittb2R1bGVfZXhpdChrYXJtYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE2MDk3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0tBUk1BX1VTQl9ICi0jZGVmaW5lIF9LQVJNQV9VU0JfSAotCi1leHRlcm4gaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYwppbmRleCBmOTcwYjI3Li5mZTNmZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCkBAIC0zOCwzNyArMzgsNiBAQAogc3RhdGljIGludCB1c3VfcHJvYmVfdGhyZWFkKHZvaWQgKmFyZyk7CiAKIC8qCi0gKiBUaGUgdGFibGUuCi0gKi8KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCi0JCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAotICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpIH0KLQotI2RlZmluZSBVU1VBTF9ERVYodXNlUHJvdG8sIHVzZVRyYW5zLCB1c2VUeXBlKSBcCi17IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCB1c2VQcm90bywgdXNlVHJhbnMpLCBcCi0gIC5kcml2ZXJfaW5mbyA9ICgodXNlVHlwZSk8PDI0KSB9Ci0KLXN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0JeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0jdW5kZWYgVVNVQUxfREVWCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdG9yYWdlX3VzYl9pZHMpOwotRVhQT1JUX1NZTUJPTF9HUEwoc3RvcmFnZV91c2JfaWRzKTsKLQotLyoKICAqIEB0eXBlOiB0aGUgbW9kdWxlIHR5cGUgYXMgYW4gaW50ZWdlcgogICovCiB2b2lkIHVzYl91c3VhbF9zZXRfcHJlc2VudChpbnQgdHlwZSkKQEAgLTE2Nyw3ICsxMzYsNyBAQAogCS5uYW1lID0JCSJsaWJ1c3VhbCIsCiAJLnByb2JlID0JdXN1X3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXN1X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0Jc3RvcmFnZV91c2JfaWRzLAorCS5pZF90YWJsZSA9CXVzYl9zdG9yYWdlX3VzYl9pZHMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IGM3YmY4OTUuLjM4MDIzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTM1LDkgKzM1LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAjaW5jbHVkZSAidXNiLmgiCi0jaW5jbHVkZSAib25ldG91Y2guaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCitNT0RVTEVfREVTQ1JJUFRJT04oIk1heHRvciBVU0IgT25lVG91Y2ggaGFyZCBkcml2ZSBidXR0b24gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIFNpbGxpayA8bi5zaWxsaWtAdGVtcGxlLmVkdT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBPTkVUT1VDSF9QS1RfTEVOICAgICAgICAweDAyCisjZGVmaW5lIE9ORVRPVUNIX0JVVFRPTiAgICAgICAgIEtFWV9QUk9HMQorCitzdGF0aWMgaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKTsKIHN0YXRpYyB2b2lkIG9uZXRvdWNoX3JlbGVhc2VfaW5wdXQodm9pZCAqb25ldG91Y2hfKTsKIAogc3RydWN0IHVzYl9vbmV0b3VjaCB7CkBAIC01Miw2ICs1OSw0NiBAQAogCXVuc2lnbmVkIGludCBpc19vcGVuOjE7CiB9OwogCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIG9uZXRvdWNoX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb25ldG91Y2hfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgb25ldG91Y2hfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX29uZXRvdWNoLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogc3RhdGljIHZvaWQgdXNiX29uZXRvdWNoX2lycShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9vbmV0b3VjaCAqb25ldG91Y2ggPSB1cmItPmNvbnRleHQ7CkBAIC0xMjcsNyArMTc0LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKQorc3RhdGljIGludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcykKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNzLT5wdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CkBAIC0yMzYsMyArMjgzLDQ2IEBACiAJCQkJb25ldG91Y2gtPmRhdGEsIG9uZXRvdWNoLT5kYXRhX2RtYSk7CiAJfQogfQorCitzdGF0aWMgaW50IG9uZXRvdWNoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gb25ldG91Y2hfdXNiX2lkcykgKyBvbmV0b3VjaF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogVXNlIGRlZmF1bHQgdHJhbnNwb3J0IGFuZCBwcm90b2NvbCAqLworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb25ldG91Y2hfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtb25ldG91Y2giLAorCS5wcm9iZSA9CW9uZXRvdWNoX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CW9uZXRvdWNoX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9uZXRvdWNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZvbmV0b3VjaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb25ldG91Y2hfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZvbmV0b3VjaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvbmV0b3VjaF9pbml0KTsKK21vZHVsZV9leGl0KG9uZXRvdWNoX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWM3YWE4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfT05FVE9VQ0hfSF8KLSNkZWZpbmUgX09ORVRPVUNIX0hfCi0KLSNkZWZpbmUgT05FVE9VQ0hfUEtUX0xFTiAgICAgICAgMHgwMgotI2RlZmluZSBPTkVUT1VDSF9CVVRUT04gICAgICAgICBLRVlfUFJPRzEKLQotaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKaW5kZXggYmU0NDFkOC4uZmMzMTBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwpAQCAtMTIxLDYgKzEyMSw3IEBACiAJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCiAJdXNiX3N0b3JfaW52b2tlX3RyYW5zcG9ydChzcmIsIHVzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU2NhdHRlci1nYXRoZXIgdHJhbnNmZXIgYnVmZmVyIGFjY2VzcyByb3V0aW5lcwpAQCAtMTk5LDYgKzIwMCw3IEBACiAJLyogUmV0dXJuIHRoZSBhbW91bnQgYWN0dWFsbHkgdHJhbnNmZXJyZWQgKi8KIAlyZXR1cm4gY250OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKTsKIAogLyogU3RvcmUgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBpbnRvIHNyYidzIHRyYW5zZmVyIGJ1ZmZlciBhbmQgc2V0IHRoZQogICogU0NTSSByZXNpZHVlLgpAQCAtMjE1LDMgKzIxNyw0IEBACiAJaWYgKGJ1ZmxlbiA8IHNjc2lfYnVmZmxlbihzcmIpKQogCQlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gYnVmbGVuKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3NldF94ZmVyX2J1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggNzI3YzUwNi4uNGNhM2I1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMTM1LDYgKzEzNSwxMiBAQAogCQlpZiAoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+bWF4X3NlY3RvcnMgPiBtYXhfc2VjdG9ycykKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCQkgICAgICBtYXhfc2VjdG9ycyk7CisJfSBlbHNlIGlmIChzZGV2LT50eXBlID09IFRZUEVfVEFQRSkgeworCQkvKiBUYXBlcyBuZWVkIG11Y2ggaGlnaGVyIG1heF9zZWN0b3IgbGltaXRzLCBzbyBqdXN0CisJCSAqIHJhaXNlIGl0IHRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlICg0IEdCIC8gNTEyKSBhbmQKKwkJICogbGV0IHRoZSBxdWV1ZSBzZWdtZW50IHNpemUgc29ydCBvdXQgdGhlIHJlYWwgbGltaXQuCisJCSAqLworCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMHg3RkZGRkYpOwogCX0KIAogCS8qIFNvbWUgVVNCIGhvc3QgY29udHJvbGxlcnMgY2FuJ3QgZG8gRE1BOyB0aGV5IGhhdmUgdG8gdXNlIFBJTy4KQEAgLTU2Myw0ICs1NjksNCBAQAogCVs3XQk9IDB4MGEsCQkJICAgIC8qIGFkZGl0aW9uYWwgbGVuZ3RoICovCiAJWzEyXQk9IDB4MjQJCQkgICAgLyogSW52YWxpZCBGaWVsZCBpbiBDREIgKi8KIH07Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKaW5kZXggNTMxYWU1Yy4uYWI1ZjlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCkBAIC00MSw2ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC01MSw3ICs1Miw1MyBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzZGRyMDkuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiQW5kcmllcyBCcm91d2VyIDxhZWJAY3dpLm5sPiwgUm9iZXJ0IEJhcnVjaCA8YXV0b3BoaWxlQHN0YXJiYW5kLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CitzdGF0aWMgaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHNkZHIwOV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzZGRyMDlfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgc2RkcjA5X3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyMDkuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKIAogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKTw8OCApICkKQEAgLTcyMyw3ICs3NzAsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUpICogaW5mby0+cGFnZXNpemU7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODM4LDcgKzg4NSw4IEBACiAJaWYgKHBiYSA9PSBVTkRFRikgewogCQlwYmEgPSBzZGRyMDlfZmluZF91bnVzZWRfcGJhKGluZm8sIGxiYSk7CiAJCWlmICghcGJhKSB7Ci0JCQlwcmludGsoInNkZHIwOV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5X3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcbiIpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAkJaW5mby0+cGJhX3RvX2xiYVtwYmFdID0gbGJhOwpAQCAtODQ5LDcgKzg5Nyw3IEBACiAJaWYgKHBiYSA9PSAxKSB7CiAJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCiAJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLwotCQlwcmludGsoInNkZHIwOTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTU0LDcgKzEwMDIsNyBAQAogCWJsb2NrbGVuID0gKHBhZ2VsZW4gPDwgaW5mby0+YmxvY2tzaGlmdCk7CiAJYmxvY2tidWZmZXIgPSBrbWFsbG9jKGJsb2NrbGVuLCBHRlBfTk9JTyk7CiAJaWYgKCFibG9ja2J1ZmZlcikgewotCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTk2NSw3ICsxMDEzLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCWtmcmVlKGJsb2NrYnVmZmVyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTExMiw3ICsxMTYwLDcgQEAKIAogCWlmIChyZXN1bHQpIHsKIAkJVVNfREVCVUdQKCJSZXN1bHQgb2YgcmVhZF9kZXZpY2VJRCBpcyAlZFxuIiwgcmVzdWx0KTsKLQkJcHJpbnRrKCJzZGRyMDk6IGNvdWxkIG5vdCByZWFkIGNhcmQgaW5mb1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOTogY291bGQgbm90IHJlYWQgY2FyZCBpbmZvXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMTUzLDcgKzEyMDEsNyBAQAogCQlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKIAkJCSIsIFdQIik7CiAKLQlwcmludGsoIiVzXG4iLCBibHVyYnR4dCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXNcbiIsIGJsdXJidHh0KTsKIAogCXJldHVybiBjYXJkaW5mbzsKIH0KQEAgLTExODQsNyArMTIzMiw3IEBACiAJYWxsb2NfbGVuID0gKGFsbG9jX2Jsb2NrcyA8PCBDT05UUk9MX1NISUZUKTsKIAlidWZmZXIgPSBrbWFsbG9jKGFsbG9jX2xlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTE5OCw3ICsxMjQ2LDcgQEAKIAlpbmZvLT5wYmFfdG9fbGJhID0ga21hbGxvYyhudW1ibG9ja3Mqc2l6ZW9mKGludCksIEdGUF9OT0lPKTsKIAogCWlmIChpbmZvLT5sYmFfdG9fcGJhID09IE5VTEwgfHwgaW5mby0+cGJhX3RvX2xiYSA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmVzdWx0ID0gLTE7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xMjM4LDcgKzEyODYsOCBAQAogCQkJaWYgKHB0cltqXSAhPSAwKQogCQkJCWdvdG8gbm9uejsKIAkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwotCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmdcbiIsIGkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nXG4iLAorCQkgICAgICAgaSk7CiAJCWNvbnRpbnVlOwogCiAJbm9uejoKQEAgLTEyNTEsNyArMTMwMCw4IEBACiAJbm9uZmY6CiAJCS8qIG5vcm1hbCBQQkFzIHN0YXJ0IHdpdGggc2l4IEZGcyAqLwogCQlpZiAoaiA8IDYpIHsKLQkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nOiAiCiAJCQkgICAgICAgInJlc2VydmVkIGFyZWEgPSAlMDJYJTAyWCUwMlglMDJYICIKIAkJCSAgICAgICAiZGF0YSBzdGF0dXMgJTAyWCBibG9jayBzdGF0dXMgJTAyWFxuIiwKIAkJCSAgICAgICBpLCBwdHJbMF0sIHB0clsxXSwgcHRyWzJdLCBwdHJbM10sCkBAIC0xMjYxLDcgKzEzMTEsOCBAQAogCQl9CiAKIAkJaWYgKChwdHJbNl0gPj4gNCkgIT0gMHgwMSkgewotCQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgaW52YWxpZCBhZGRyZXNzIGZpZWxkICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBQQkEgJWQgaGFzIGludmFsaWQgYWRkcmVzcyBmaWVsZCAiCiAJCQkgICAgICAgIiUwMlglMDJYLyUwMlglMDJYXG4iLAogCQkJICAgICAgIGksIHB0cls2XSwgcHRyWzddLCBwdHJbMTFdLCBwdHJbMTJdKTsKIAkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKQEAgLTEyNzAsNyArMTMyMSw4IEBACiAKIAkJLyogY2hlY2sgZXZlbiBwYXJpdHkgKi8KIAkJaWYgKHBhcml0eVtwdHJbNl0gXiBwdHJbN11dKSB7Ci0JCQlwcmludGsoInNkZHIwOTogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKIAkJCSAgICAgICAiICglMDJYICUwMlgpXG4iLCBpLCBwdHJbNl0sIHB0cls3XSk7CiAJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CiAJCQljb250aW51ZTsKQEAgLTEyODksNyArMTM0MSw4IEBACiAJCSAqLwogCiAJCWlmIChsYmEgPj0gMTAwMCkgewotCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCiAJCQkgICAgICAgbGJhLCBpKTsKIAkJCWdvdG8gcG9zc2libHlfZXJhc2U7CiAJCX0KQEAgLTEyOTcsNyArMTM1MCw4IEBACiAJCWxiYSArPSAxMDAwKihpLzB4NDAwKTsKIAogCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmFdICE9IFVOREVGKSB7Ci0JCQlwcmludGsoInNkZHIwOTogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCiAJCQkgICAgICAgbGJhLCBpbmZvLT5sYmFfdG9fcGJhW2xiYV0sIGkpOwogCQkJZ290byBwb3NzaWJseV9lcmFzZTsKIAkJfQpAQCAtMTM5OSw3ICsxNDUzLDcgQEAKICAqIHVudXN1YWwgZGV2aWNlcyBsaXN0IGJ1dCBjYWxsZWQgZnJvbSBoZXJlIHRoZW4gTFVOIDAgb2YgdGhlIGNvbWJvIHJlYWRlcgogICogaXMgbm90IHJlY29nbml6ZWQuIEJ1dCBJIGRvIG5vdCBrbm93IHdoYXQgcHJlY2lzZWx5IHRoZXNlIGNhbGxzIGRvLgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOwpAQCAtMTQ0OSw3ICsxNTAzLDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBNaWNyb3RlY2ggRFBDTS1VU0IKICAqLwotaW50IGRwY21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmV0OwogCkBAIC0xNDkxLDcgKzE1NDUsNyBAQAogLyoKICAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi0wOQogICovCi1pbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBzZW5zZWtleSA9IDAsIHNlbnNlY29kZSA9IDA7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaGF2ZWZha2VzZW5zZSA9IDA7CkBAIC0xNjkwLDcgKzE3NDQsNjAgQEAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgc2RkcjA5IHN1YmRyaXZlcgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHVzYl9zdG9yX3NkZHIwOV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykgewogCXJldHVybiBzZGRyMDlfY29tbW9uX2luaXQodXMpOwogfQorCitzdGF0aWMgaW50IHNkZHIwOV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHNkZHIwOV91c2JfaWRzKSArIHNkZHIwOV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9EUENNX1VTQikgeworCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMTsKKwl9IGVsc2UgeworCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOworCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDA7CisJfQorCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RkcjA5X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLXNkZHIwOSIsCisJLnByb2JlID0Jc2RkcjA5X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CXNkZHIwOV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZGRyMDlfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNkZHIwOV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RkcjA5X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RkcjA5X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNkZHIwOV9pbml0KTsKK21vZHVsZV9leGl0KHNkZHIwOV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzAxMTcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCi0gKiAgIChjKSAyMDAyIEFuZHJpZXMgQnJvdXdlciAoYWViQGN3aS5ubCkKLSAqCi0gKiBTZWUgc2RkcjA5LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfU0hVVFRMRV9FVVNCX1NERFIwOV9ICi0jZGVmaW5lIF9VU0JfU0hVVFRMRV9FVVNCX1NERFIwOV9ICi0KLS8qIFNhbmRpc2sgU0REUi0wOSBzdHVmZiAqLwotCi1leHRlcm4gaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0vKiBNaWNyb3RlY2ggRFBDTS1VU0Igc3R1ZmYgKi8KLQotZXh0ZXJuIGludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwppbmRleCAwZDhkZjc1Li40NGRmZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtMzMsNyArMzQsNDggQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic2RkcjU1LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNpbW9uIE11bnRvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBzZGRyNTVfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc2RkcjU1X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHNkZHI1NV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjU1LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCiAKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCkBAIC01MTMsNyArNTU1LDggQEAKIH0KIAogCi1pbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykgeworc3RhdGljIGludCBzZGRyNTVfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQorewogCXJldHVybiAwOwogfQogCkBAIC03MDMsNyArNzQ2LDkgQEAKIAkJCiAJCWlmIChpbmZvLT5sYmFfdG9fcGJhW2xiYSArIHpvbmUgKiAxMDAwXSAhPSBOT1RfQUxMT0NBVEVEICYmCiAJCSAgICAhaW5mby0+Zm9yY2VfcmVhZF9vbmx5KSB7Ci0JCQlwcmludGsoInNkZHI1NTogbWFwIGluY29uc2lzdGVuY3kgYXQgTEJBICUwNFhcbiIsIGxiYSArIHpvbmUgKiAxMDAwKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjU1OiBtYXAgaW5jb25zaXN0ZW5jeSBhdCBMQkEgJTA0WFxuIiwKKwkJCSAgICAgICBsYmEgKyB6b25lICogMTAwMCk7CiAJCQlpbmZvLT5mb3JjZV9yZWFkX29ubHkgPSAxOwogCQl9CiAKQEAgLTczMiw3ICs3NzcsNyBAQAogLyoKICAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi01NQogICovCi1pbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmVzdWx0OwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbOF0gPSB7CkBAIC05MjksMyArOTc0LDQ5IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7IC8vIEZJWE1FOiBzZW5zZSBidWZmZXI/CiB9CiAKKworc3RhdGljIGludCBzZGRyNTVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBzZGRyNTVfdXNiX2lkcykgKyBzZGRyNTVfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOworCXVzLT50cmFuc3BvcnQgPSBzZGRyNTVfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSBzZGRyNTVfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAwOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RkcjU1X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLXNkZHI1NSIsCisJLnByb2JlID0Jc2RkcjU1X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CXNkZHI1NV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZGRyNTVfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNkZHI1NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RkcjU1X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RkcjU1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNkZHI1NV9pbml0KTsKK21vZHVsZV9leGl0KHNkZHI1NV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKaW5kZXggYWU2ZDY0ODEuLmI2MmEyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC00Miw2ICs0Miw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiAKQEAgLTUyLDcgKzUzLDEwMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPiwgUm9iZXJ0IEJhcnVjaCA8YXV0b3BoaWxlQHN0YXJiYW5kLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKKyNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCisKKyNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKKyNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKKyNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCisjZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAorCisvKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0CisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNworCisvKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKKyNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKKyNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgorCisvKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQorI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAorCisvKiBRdWFsaWZpZXIgYml0cyAqLworI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLworI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLworCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKKworLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLworCisvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLworCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLworI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KKworLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLworI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KKworLyogVVNCQVQgRmVhdHVyZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4CisjZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAorI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKKworc3RydWN0IHVzYmF0X2luZm8geworCWludCBkZXZpY2V0eXBlOworCisJLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhMU0IsTVNCKSAoICgodTE2KShMU0IpKSB8ICggKCh1MTYpKE1TQikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNjMsNiArMTU3LDQ4IEBACiBzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CiAKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiYXRfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JhdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c2JhdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKwogLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBIHJlYWQvd3JpdGUgc2VjdG9ycyBjb21tYW5kCiAgKiBVc2UgY21kPTB4MjAgZm9yIHJlYWQsIGNtZD0weDMwIGZvciB3cml0ZQpAQCAtMTY4NCwzNyArMTgyMCw2MSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCi1pbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfSFA4MjAwKTsKIH0KIAotCi1pbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfRkxBU0gpOwogfQogCi1pbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHVzYmF0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gaW5pdF91c2JhdCh1cywgMCk7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHVzYmF0X3VzYl9pZHMpICsgdXNiYXRfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFRoZSBhY3R1YWwgdHJhbnNwb3J0IHdpbGwgYmUgZGV0ZXJtaW5lZCBsYXRlciBieSB0aGUKKwkgKiBpbml0aWFsaXphdGlvbiByb3V0aW5lOyB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4KKwkgKi8KKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU2h1dHRsZSBVU0JBVCI7CisJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogRGVmYXVsdCB0cmFuc3BvcnQgZnVuY3Rpb24uIEF0dGVtcHRzIHRvIGRldGVjdCB3aGljaCB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHNob3VsZCBiZSBjYWxsZWQsIG1ha2VzIGl0IHRoZSBuZXcgZGVmYXVsdCwgYW5kIGNhbGxzIGl0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gT3VyIHVzYmF0X2luaXQoKSBmdW5jdGlvbiBkZXRlY3RzIHRoZQotICogZGV2aWNlIHR5cGUgYW5kIGNoYW5nZXMgdGhlIHVzLT50cmFuc3BvcnQgcHRyIHRvIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHJlbGV2YW50IHRvIHRoZSBkZXZpY2UuCi0gKiBIb3dldmVyLCB3ZSdsbCBzdXBwb3J0IHRoaXMgaW1wb3NzaWJsZSg/KSBjYXNlIGFueXdheS4KLSAqLwotaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JhdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy11c2JhdCIsCisJLnByb2JlID0JdXNiYXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiYXRfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiYXRfaW5pdCh2b2lkKQogewotCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvKikgKHVzLT5leHRyYSk7Ci0KLQlpZiAodXNiYXRfc2V0X3RyYW5zcG9ydCh1cywgaW5mbywgMCkpCi0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0KLQlyZXR1cm4gdXMtPnRyYW5zcG9ydChzcmIsIHVzKTsJCisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKIH0KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmF0X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiYXRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JhdF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmZjNDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCi0gKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Ci0gKgotICogU2VlIHNodXR0bGVfdXNiYXQuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX1VTQkFUX0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX1VTQkFUX0gKLQotLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLwotI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKLSNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCi0KLSNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKLSNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKLSNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCi0jZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAotCi0vKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAotI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKLSNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0Ci0jZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNwotCi0vKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KLSNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKLSNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKLSNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgotCi0vKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQotI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAotCi0vKiBRdWFsaWZpZXIgYml0cyAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLwotCi0vKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKLQotLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKLQotLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLwotCi0vKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLwotCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCi0jZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCi0jZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLwotI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KLQotLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KLQotLyogVVNCQVQgRmVhdHVyZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4Ci0jZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAotI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCi0jZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKLQotZXh0ZXJuIGludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgdXNiYXRfaW5mbyB7Ci0JaW50IGRldmljZXR5cGU7Ci0KLQkvKiBVc2VkIGZvciBGbGFzaCByZWFkZXJzIG9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIHNlY3RvcnM7ICAgICAvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLwotCi0JdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCi0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBmYjY1ZDIyMS4uNDlhZWRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAkJc3RhdHVzID0gdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXJldHVybiBzdGF0dXM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jb250cm9sX21zZyk7CiAKIC8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHVzYl9jbGVhcl9oYWx0KCkgdGhhdCBhbGxvd3MgZWFybHkgdGVybWluYXRpb24gYW5kCiAgKiBkb2Vzbid0IHJlYWQgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgLS0gdGhpcyBpcyBiZWNhdXNlIHNvbWUgZGV2aWNlcwpAQCAtMjU0LDYgKzI1NSw3IEBACiAJVVNfREVCVUdQKCIlczogcmVzdWx0ID0gJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jbGVhcl9oYWx0KTsKIAogCiAvKgpAQCAtMzUyLDYgKzM1NCw3IEBACiAJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBzaXplLCByZXN1bHQsCiAJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfY3RybF90cmFuc2Zlcik7CiAKIC8qCiAgKiBSZWNlaXZlIG9uZSBpbnRlcnJ1cHQgYnVmZmVyLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKQEAgLTQwNyw2ICs0MTAsNyBAQAogCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsIAogCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKTsKIAogLyoKICAqIFRyYW5zZmVyIGEgc2NhdHRlci1nYXRoZXIgbGlzdCB2aWEgYnVsayB0cmFuc2ZlcgpAQCAtNDc0LDYgKzQ3OCw3IEBACiAJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIHBhcnRpYWwpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9idWxrX3NyYik7CiAKIC8qCiAgKiBUcmFuc2ZlciBhbiBlbnRpcmUgU0NTSSBjb21tYW5kJ3Mgd29ydGggb2YgZGF0YSBwYXlsb2FkIG92ZXIgdGhlIGJ1bGsKQEAgLTUwOSw2ICs1MTQsNyBAQAogCQkqcmVzaWR1YWwgPSBsZW5ndGhfbGVmdDsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVHJhbnNwb3J0IHJvdXRpbmVzCkBAIC03ODEsNyArNzg3LDcgQEAKIAkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KIAlpZiAoKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgfHwgc3JiLT5zZW5zZV9idWZmZXJbMl0gPT0gMCkgJiYKIAkJCXNjc2lfYnVmZmxlbihzcmIpIC0gc2NzaV9nZXRfcmVzaWQoc3JiKSA8IHNyYi0+dW5kZXJmbG93KQotCQlzcmItPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpIHwgKFNVR0dFU1RfUkVUUlkgPDwgMjQpOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKIAogCWxhc3Rfc2VjdG9yX2hhY2tzKHVzLCBzcmIpOwogCXJldHVybjsKQEAgLTk0MCw2ICs5NDYsNyBAQAogCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCBwaXBlKTsKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0NCX3RyYW5zcG9ydCk7CiAKIC8qCiAgKiBCdWxrIG9ubHkgdHJhbnNwb3J0CkBAIC0xMTU2LDYgKzExNjMsNyBAQAogCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvLCB3ZSdyZSBpbiB0cm91YmxlICovCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZXNldCByb3V0aW5lcwpAQCAtMTIzMCw2ICsxMjM4LDcgQEAKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIHVzLT5pb2J1ZiwgQ0JfUkVTRVRfQ01EX1NJWkUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQ0JfcmVzZXQpOwogCiAvKiBUaGlzIGlzc3VlcyBhIEJ1bGstb25seSBSZXNldCB0byB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uLCBpbmNsdWRpbmcKICAqIGNsZWFyaW5nIHRoZSBzdWJzZXF1ZW50IGVuZHBvaW50IGhhbHRzIHRoYXQgbWF5IG9jY3VyLgpAQCAtMTI0Miw2ICsxMjUxLDcgQEAKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIE5VTEwsIDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQnVsa19yZXNldCk7CiAKIC8qIElzc3VlIGEgVVNCIHBvcnQgcmVzZXQgdG8gdGhlIGRldmljZS4gIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZAogICogdXMtPmRldl9tdXRleC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApyZW5hbWUgdG8gZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCmluZGV4IGE4MTVhMDQuLjhjNDEyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCkBAIC0xLDEwICsxLDQgQEAKLS8qIERyaXZlciBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMiBTaW1vbiBNdW50b24KLSAqCi0gKiBTZWUgc2RkcjU1LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIxLDEyICsxNSwxNyBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSNTVfSAotI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSNTVfSAorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFfTU9EVUxFKQogCi0vKiBTYW5kaXNrIFNERFItNTUgc3R1ZmYgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTg0LCAweDAwMDgsIDB4MDEwMiwgMHgwMTAyLAorCQkiRnVqaWZpbG0iLAorCQkiRFBDLVIxIChBbGF1ZGEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCksCiAKLWV4dGVybiBpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCisJCSJPbHltcHVzIiwKKwkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCksCiAKLSNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGJlNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApAQCAtMCwwICsxLDM0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgZGV2aWNlcyBiYXNlZCBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZQorICoJd2l0aCBzdXBwb3J0IGZvciBBVEFDQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0JfTU9EVUxFKQorCisvKiBDWTdDNjgzMDAgOiBzdXBwb3J0IGF0YWNiICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMwLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBBVDJMUCIsCisJCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworLyogQ1k3QzY4MzEwIDogc3VwcG9ydCBhdGFjYiBhbmQgYXRhY2IyICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBJU0QtMzAwTFAiLAorCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kYXRhZmFiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCisJCSJEYXRhZmFiIiwKKwkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKgorICogVGhlIGZvbGxvd2luZyBEYXRhZmFiLWJhc2VkIGRldmljZXMgbWF5IG9yIG1heSBub3Qgd29yaworICogdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyLi4udGhlIDB4ZmZmZiBpcyBhcmJpdHJhcnkgc2luY2UgSQorICogZG9uJ3Qga25vdyB3aGF0IGRldmljZSB2ZXJzaW9ucyBleGlzdCBmb3IgdGhlc2UgZ3V5cy4KKyAqCisgKiBUaGUgMHhhMDAzIGFuZCAweGEwMDQgZGV2aWNlcyBpbiBwYXJ0aWN1bGFyIEknbSBjdXJpb3VzIGFib3V0LgorICogSSdtIHRvbGQgdGhleSBleGlzdCBidXQgc28gZmFyIG5vYm9keSBoYXMgY29tZSBmb3J3YXJkIHRvIHNheSB0aGF0CisgKiB0aGV5IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gIEdpdmVuIHRoZSBzdWNjZXNzIHdlJ3ZlIGhhZCBnZXR0aW5nCisgKiBvdGhlciBEYXRhZmFiLWJhc2VkIGNhcmRzIG9wZXJhdGlvbmFsIHdpdGggdGhpcyBkcml2ZXIsIEkndmUgZGVjaWRlZAorICogdG8gbGVhdmUgdGhlc2UgdHdvIGRldmljZXMgaW4gdGhlIGxpc3QuCisgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMSwgMHgwMDAwLCAweGZmZmYsCisJCSJTSUlHL0RhdGFmYWIiLAorCQkiU0lJRy9EYXRhZmFiIE1lbW9yeSBTdGljaytDRiBSZWFkZXIvV3JpdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDQsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCisJCSJQTlkvRGF0YWZhYiIsCisJCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAorCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEZlbGl4IE1vZWxsZXIgPGZlbGl4QGRlcmtsZWNrcy5kZT4KKyAqIGluIEdlcm1hbnkgdGhpcyBpcyBzb2xkIGJ5IEhhbWEgd2l0aCB0aGUgcHJvZHVjdG51bWJlciA0Njk1MgorICogYXMgIkR1YWxTbG90IENvbXBhY3RGbGFzaChUTSkgJiBNU3RpY2sgRHJpdmUgVVNCIgorICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTBiLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFGYWIgU3lzdGVtcyBJbmMuIiwKKwkJIlVTQiBDRitNUyIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiQWNvbWRhdGEiLAorCQkiQ0YiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggNmY1OWM4ZS4uMWMxZjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC01Myw2ICs1MywxMSBAQAogICogYXMgb3Bwb3NlZCB0byBkZXZpY2VzIHRoYXQgZG8gc29tZXRoaW5nIHN0cmFuZ2VseSBvciB3cm9uZ2x5LgogICovCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSAmJiBcCisJCSFkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorI2RlZmluZSBOT19TRERSMDkKKyNlbmRpZgorCiAvKiBwYXRjaCBzdWJtaXR0ZWQgYnkgVml2aWFuIEJyZWdpZXIgPFZpdmlhbi5CcmVnaWVyQGltYWcuZnI+CiAgKi8KIFVOVVNVQUxfREVWKCAgMHgwM2ViLCAweDIwMDIsIDB4MDEwMCwgMHgwMTAwLApAQCAtODAsMTggKzg1LDYgQEAKIAkJIkNELVdyaXRlcisiLAogCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAyMDcsIDB4MDAwMSwgMHgwMDAxLAotCQkiSFAiLAotCQkiQ0QtV3JpdGVyKyA4MjAwZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKLQotVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDMwNywgMHgwMDAxLCAweDAwMDEsCi0JCSJIUCIsCi0JCSJDRC1Xcml0ZXIrIENELTRlIiwKLQkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwNzBjLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhQIiwKQEAgLTIyNiw3ICsyMTksNyBAQAogCQlVU19GTF9NQVhfU0VDVE9SU182NCApLAogCiAvKiBSZXBvcnRlZCBieSBNYW51ZWwgT3Nkb2JhIDxtYW51ZWwub3Nkb2JhQHR1LWlsbWVuYXUuZGU+ICovCi1VTlVTVUFMX0RFViggMHgwNDIxLCAweDA0OTIsIDB4MDQ1MiwgMHgwNDUyLAorVU5VU1VBTF9ERVYoIDB4MDQyMSwgMHgwNDkyLCAweDA0NTIsIDB4OTk5OSwKIAkJIk5va2lhIiwKIAkJIk5va2lhIDYyMzMiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKQEAgLTI0NiwxMiArMjM5LDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMjg4LDEzICsyNzYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9UX0xPQ0tBQkxFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKLVVOVVNVQUxfREVWKCAgMHgwNDVhLCAweDUyMTAsIDB4MDEwMSwgMHgwMTAxLAotCQkiUmlvIiwKLQkJIlJpbyBLYXJtYSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgVGFtYXMgS2VyZWNzZW4gPGtlcmVjc2VuQGJpZ2Zvb3QuY29tPgogICogT2J2aW91c2x5IHRoZSBQUk9NIGhhcyBub3QgYmVlbiBjdXN0b21pemVkIGJ5IHRoZSBWQVI7CiAgKiB0aGUgVmVuZG9yIGFuZCBQcm9kdWN0IHN0cmluZyBkZXNjcmlwdG9ycyBhcmU6CkBAIC0zNzUsMjIgKzM1Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX01BWF9TRUNUT1JTX01JTiksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotLyogQ1k3QzY4MzAwIDogc3VwcG9ydCBhdGFjYiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMCwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgQVQyTFAiLAotCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJMCksCi0KLS8qIENZN0M2ODMxMCA6IHN1cHBvcnQgYXRhY2IgYW5kIGF0YWNiMiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMSwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgSVNELTMwMExQIiwKLQkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFNpbW9uIExldml0dCA8c2ltb25Ad2hhdHRmLmNvbT4KICAqIFRoaXMgZW50cnkgbmVlZHMgU3ViIGFuZCBQcm90byBmaWVsZHMgKi8KIFVOVVNVQUxfREVWKCAgMHgwNGI4LCAweDA2MDEsIDB4MDEwMCwgMHgwMTAwLApAQCAtNDY3LDIwICs0MzIsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsIAogCQlVU19GTF9TQ01fTVVMVF9UQVJHICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFIwOSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKLQkJMCksCi0KLS8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKLQkJIlNDTSBNaWNyb3N5c3RlbXMiLAotCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdCwKLQkJMCksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCiAJCSJTQ00gTWljcm9zeXN0ZW1zIiwKIAkJImVVU0IgQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLApAQCAtNTM1LDE0ICs0ODcsNiBAQAogCQkiQ0QtUlcgRGV2aWNlIiwKIAkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgxMDEwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNodXR0bGUvU0NNIiwKLQkJIlVTQkFULTAyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4pLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERtaXRyeSBLaGx5c3RvdiA8YWRtaW5pbXVzQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNGU4LCAweDUwN2MsIDB4MDIyMCwgMHgwMjIwLAogCQkiU2Ftc3VuZyIsCkBAIC02NDUsMTQgKzU4OSw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi1VTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKLQkJIlNvbnkiLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0jZW5kaWYKLQogLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nLCA8b2xoQHN1c2UuZGU+IFN1U0UgQnVnemlsbGEgIzQ5MDQ5ICovCiBVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJjLCAweDA1MDEsIDB4MjAwMCwKIAkJIlNvbnkiLApAQCAtNzQ5LDEzICs2ODUsNiBAQAogCQkiU2lsaWNvbiBNZWRpYSBSL1ciLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKLQkJIkZ1amlmaWxtIiwKLQkJIkRQQy1SMSAoQWxhdWRhKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwICksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgUlRFIDxyYXN6aWxraUB5YW5kZXgucnU+ICovCiBVTlVTVUFMX0RFViggIDB4MDU4ZiwgMHg2Mzg3LCAweDAxNDEsIDB4MDE0MSwKIAkJIkpldEZsYXNoIiwKQEAgLTc5OCwzMiArNzI3LDYgQEAKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwKIAkJVVNfRkxfTkVFRF9PVkVSUklERSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMzAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDM1MSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBTdmVuIEFuZGVyc29uIDxzdmVuLWxpbnV4QGFuZGVyc29uLmRlPgogICogVGhlcmUgYXJlIGF0IGxlYXN0IGZvdXIgUHJvZHVjdElEcyB1c2VkIGZvciBpUG9kcywgc28gSSBhZGRlZCAweDEyMDIgYW5kCiAgKiAweDEyMDQuIFRoZXkganVzdCBuZWVkIHRoZSBVU19GTF9GSVhfQ0FQQUNJVFkuIEFzIHRoZSBiY2REZXZpY2UgYXBwZWFycwpAQCAtODc3LDE0ICs3ODAsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb3B0aW9uX21zX2luaXQsCiAJCTApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi1VTlVTVUFMX0RFViggIDB4MDVkYywgMHgwMDAxLCAweDAwMDAsIDB4MDAwMSwKLQkJIkxleGFyIiwKLQkJIkp1bXBzaG90IFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9KVU1QU0hPVCwgTlVMTCwKLQkJVVNfRkxfTkVFRF9PVkVSUklERSApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJsYWtlIE1hdGhlbnkgPGJtYXRoZW55QHB1cmR1ZS5lZHU+ICovCiBVTlVTVUFMX0RFViggIDB4MDVkYywgMHhiMDAyLCAweDAwMDAsIDB4MDExMywKIAkJIkxleGFyIiwKQEAgLTkzNSwxNCArODMwLDYgQEAKIAkJIkZsb3BweSBEcml2ZSIsCiAJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsIDAgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiT2x5bXB1cyIsCi0JCSJDYW1lZGlhIE1BVVNCLTIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERhcnNlbiBMdSA8ZGFyc2VuQG1pY3JvLmVlLm50aHUuZWR1LnR3PiAqLwogVU5VU1VBTF9ERVYoIDB4MDY2ZiwgMHg4MDAwLCAweDAwMDEsIDB4MDAwMSwKIAkJIlNpZ21hVGVsIiwKQEAgLTk1MSw3ICs4MzgsOSBAQAogCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAogLyogUmVwb3J0ZWQgYnkgUmljaGFyZCAtPVtdPS0gPG1pY3JvX2ZseWVyQGhvdG1haWwuY29tPiAqLwotVU5VU1VBTF9ERVYoIDB4MDY3YiwgMHgyNTA3LCAweDAxMDAsIDB4MDEwMCwKKy8qIENoYW5nZSB0byBiY2REZXZpY2VNaW4gKDB4MDEwMCB0byAweDAwMDEpIHJlcG9ydGVkIGJ5CisgKiBUaG9tYXMgQmFydG9zaWsgPHRiYXJ0ZGV2QGdteC10b3BtYWlsLmRlPiAqLworVU5VU1VBTF9ERVYoIDB4MDY3YiwgMHgyNTA3LCAweDAwMDEsIDB4MDEwMCwKIAkJIlByb2xpZmljIFRlY2hub2xvZ3kgSW5jLiIsCiAJCSJNYXNzIFN0b3JhZ2UgRGV2aWNlIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCkBAIC0xMDQxLDM1ICs5MzAsMTIgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFItMDViIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLSNlbmRpZgotCiBVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKIAkJIlNhbmRpc2siLAogCQkiSW1hZ2VNYXRlIFNERFItMTIiLAogCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSLTA5IiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAotCQkwKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLVVOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjMDEsIDB4MDAwMCwgMHg5OTk5LAotCQkiRnJlZWNvbSIsCi0JCSJVU0ItSURFIiwKLQkJVVNfU0NfUUlDLCBVU19QUl9GUkVFQ09NLCBmcmVlY29tX2luaXQsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEVlcm8gVm9sb3RpbmVuIDxlZXJvQHBpbmctdmlpbmkub3JnPiAqLwogVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmNjZCwgMHgwMDAwLCAweDk5OTksCiAJCSJGcmVlY29tIFRlY2hub2xvZ2llcyIsCkBAIC0xMDg5LDEyICs5NTUsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMTEwMiwxMDggKzk2Myw2IEBACiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCi0JCSJPbHltcHVzIiwKLQkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDAgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAotCQkiRGF0YWZhYiIsCi0JCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIERhdGFmYWItYmFzZWQgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrCi0gKiB1c2luZyB0aGUgY3VycmVudCBkcml2ZXIuLi50aGUgMHhmZmZmIGlzIGFyYml0cmFyeSBzaW5jZSBJCi0gKiBkb24ndCBrbm93IHdoYXQgZGV2aWNlIHZlcnNpb25zIGV4aXN0IGZvciB0aGVzZSBndXlzLgotICoKLSAqIFRoZSAweGEwMDMgYW5kIDB4YTAwNCBkZXZpY2VzIGluIHBhcnRpY3VsYXIgSSdtIGN1cmlvdXMgYWJvdXQuCi0gKiBJJ20gdG9sZCB0aGV5IGV4aXN0IGJ1dCBzbyBmYXIgbm9ib2R5IGhhcyBjb21lIGZvcndhcmQgdG8gc2F5IHRoYXQKLSAqIHRoZXkgd29yayB3aXRoIHRoaXMgZHJpdmVyLiAgR2l2ZW4gdGhlIHN1Y2Nlc3Mgd2UndmUgaGFkIGdldHRpbmcKLSAqIG90aGVyIERhdGFmYWItYmFzZWQgY2FyZHMgb3BlcmF0aW9uYWwgd2l0aCB0aGlzIGRyaXZlciwgSSd2ZSBkZWNpZGVkCi0gKiB0byBsZWF2ZSB0aGVzZSB0d28gZGV2aWNlcyBpbiB0aGUgbGlzdC4KLSAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAxLCAweDAwMDAsIDB4ZmZmZiwKLQkJIlNJSUcvRGF0YWZhYiIsCi0JCSJTSUlHL0RhdGFmYWIgTWVtb3J5IFN0aWNrK0NGIFJlYWRlci9Xcml0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLS8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYi9Vbmtub3duIiwKLQkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNCwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCi0JCSJQTlkvRGF0YWZhYiIsCi0JCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCi0JCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKLQkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotI2VuZGlmCi0JCQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLS8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIkRhdGFmYWIiLAotCQkiTURTTS1CIHJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfRklYX0lOUVVJUlkgKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLS8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCi0JCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLS8qIFNNIHBhcnQgLSBhZWIgPEFuZHJpZXMuQnJvdXdlckBjd2kubmw+ICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCi0JCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotLyogUmVwb3J0ZWQgYnkgRmVsaXggTW9lbGxlciA8ZmVsaXhAZGVya2xlY2tzLmRlPgotICogaW4gR2VybWFueSB0aGlzIGlzIHNvbGQgYnkgSGFtYSB3aXRoIHRoZSBwcm9kdWN0bnVtYmVyIDQ2OTUyCi0gKiBhcyAiRHVhbFNsb3QgQ29tcGFjdEZsYXNoKFRNKSAmIE1TdGljayBEcml2ZSBVU0IiCi0gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMGIsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YUZhYiBTeXN0ZW1zIEluYy4iLAotCQkiVVNCIENGK01TIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi0jZW5kaWYKLQogLyogRGF0YWZhYiBLRUNGLVVTQiAvIFNhZ2F0ZWsgRENTLUNGIC8gU2ltcGxldGVjaCBGbGFzaGxpbmsgVUNGLTEwMAogICogT25seSByZXZpc2lvbiAxLjEzIHRlc3RlZCAoc2FtZSBmb3IgYWxsIG9mIHRoZSBhYm92ZSBkZXZpY2VzLAogICogYmFzZWQgb24gdGhlIERhdGFmYWIgREYtVUctMDcgY2hpcCkuICBOZWVkZWQgZm9yIFVTX0ZMX0ZJWF9JTlFVSVJZLgpAQCAtMTM5MCw2ICsxMTQ5LDE2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQkwICksCiAKKy8qIFJlcG9ydGVkIGJ5IEphbiBEdW1vbiA8ai5kdW1vbkBvcHRpb24uY29tPgorICogVGhpcyBkZXZpY2UgKHdyb25nbHkpIGhhcyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgZGVzY3JpcHRvci4KKyAqIFRoZSBlbnRyeSBpcyBuZWVkZWQgc28gdXNiLXN0b3JhZ2UgY2FuIGJpbmQgdG8gaXQncyBtYXNzLXN0b3JhZ2UKKyAqIGludGVyZmFjZSBhcyBhbiBpbnRlcmZhY2UgZHJpdmVyICovCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDc1MDEsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDA0MzEgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggMHgwYmMyLCAweDMwMTAsIDB4MDAwMCwgMHgwMDAwLAogCQkiU2VhZ2F0ZSIsCkBAIC0xMzk3LDI5ICsxMTY2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NBTkVfU0VOU0UgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiQVRJIiwKLQkJIlVTQiBDYWJsZSAyMDUiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIkNGIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIlNNIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQogVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzMxMCwgMHgwMDAwLCAweDk5OTksCiAJCSJNYXh0b3IiLAogCQkiVVNCIHRvIFNBVEEiLApAQCAtMTQzNiwyMyArMTE4Miw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLS8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Ci0gKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQotICoKLSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotCVVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMDAsIDB4MDAwMCwgMHg5OTk5LAotCQkJIk1heHRvciIsCi0JCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKLQkJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAotCQkJMCksCi0JVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAxMCwgMHgwMDAwLCAweDk5OTksCi0JCQkiTWF4dG9yIiwKLQkJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAotCQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCi0JCQkwKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgSm9yaXMgU3RydXl2ZSA8am9yaXNAc3RydXl2ZS5iZT4gKi8KIFVOVVNVQUxfREVWKCAweDBkOTYsIDB4NDEwYSwgMHgwMDAxLCAweGZmZmYsCiAJCSJNZWRpb24iLApAQCAtMjEwNSwxNCArMTgzNCw2IEBACiAJCSJNaWNybyBNaW5pIDFHQiIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLVVOVVNVQUxfREVWKCAgMHg1NWFhLCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LCAKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFI1NSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQW5kcmV3IFNpbW1vbnMgPGFuZHJldy5zaW1tb25zQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHhlZDA2LCAweDQ1MDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiRGF0YVN0b3IiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApjb3B5IHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKaW5kZXggZmJhZGE4OS4uMzc1ODY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2ZyZWVjb20uaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCisJCSJGcmVlY29tIiwKKwkJIlVTQi1JREUiLAorCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGluaXRfZnJlZWNvbSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk5ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDBfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKKwkJIlNvbnkiLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiQVRJIiwKKwkJIlVTQiBDYWJsZSAyMDUiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKY29weSB0byBkcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaAppbmRleCBmYmFkYTg5Li4yZTU0OWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBMZXhhciAiSnVtcHNob3QiIENvbXBhY3QgRmxhc2ggcmVhZGVyCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTMgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVF9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNWRjLCAweDAwMDEsIDB4MDAwMCwgMHgwMDAxLAorCQkiTGV4YXIiLAorCQkiSnVtcHNob3QgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0pVTVBTSE9ULCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCmluZGV4IGZiYWRhODkuLjEyYWUzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIFJpbyBLYXJtYQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKKwkJIlJpbyIsCisJCSJSaW8gS2FybWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkzMDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBNYXh0b3IgT25lVG91Y2ggVVNCIGhhcmQgZHJpdmUncyBidXR0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0hfTU9EVUxFKQorCisvKiBTdWJtaXR0ZWQgYnk6IE5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PgorICogTmVlZGVkIGZvciBPbmVUb3VjaCBleHRlbnNpb24gdG8gdXNiLXN0b3JhZ2UKKyAqLworVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAwMCwgMHgwMDAwLCAweDk5OTksCisJCSJNYXh0b3IiLAorCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDEwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApAQCAtMCwwICsxLDU2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUjA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworLyogVGhpcyBlbnRyeSBpcyBmcm9tIEFuZHJpZXMuQnJvdXdlckBjd2kubmwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAorCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCisJCSJlVVNCIFNtYXJ0TWVkaWEgLyBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA2NmIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCisJCSJPbHltcHVzIiwKKwkJIkNhbWVkaWEgTUFVU0ItMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4MWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTVfTU9EVUxFKQorCisvKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJEYXRhZmFiIiwKKwkJIk1EU00tQiByZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIlNNIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsCisJCSJIUCIsCisJCSJDRC1Xcml0ZXIrIDgyMDBlIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMzA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgQ0QtNGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2h1dHRsZS9TQ00iLAorCQkiVVNCQVQtMDIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCA0YmVjZjQ5Li44MDYwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CiAgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCi0gKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKiAgIChjKSAyMDAzLTIwMDkgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKICAqCiAgKiBJbml0aWFsIHdvcmsgYnk6CiAgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQpAQCAtNjYsMzkgKzY2LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0jaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotI2luY2x1ZGUgInNkZHIwOS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotI2luY2x1ZGUgInNkZHI1NS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLSNpbmNsdWRlICJmcmVlY29tLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0jaW5jbHVkZSAiaXNkMjAwLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotI2luY2x1ZGUgImRhdGFmYWIuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotI2luY2x1ZGUgImp1bXBzaG90LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gKLSNpbmNsdWRlICJvbmV0b3VjaC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotI2luY2x1ZGUgImFsYXVkYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0jaW5jbHVkZSAia2FybWEuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0jaW5jbHVkZSAiY3lwcmVzc19hdGFjYi5oIgotI2VuZGlmCiAjaW5jbHVkZSAic2llcnJhX21zLmgiCiAjaW5jbHVkZSAib3B0aW9uX21zLmgiCiAKQEAgLTExOCwzNiArODUsOCBAQAogCiAvKgogICogVGhlIGVudHJpZXMgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kLCBsaW5lIGZvciBsaW5lLAotICogd2l0aCB0aGUgZW50cmllcyBvZiB1c191bnVzdWFsX2Rldl9saXN0W10uCisgKiB3aXRoIHRoZSBlbnRyaWVzIGluIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSwgZGVmaW5lZCBpbiB1c3VhbC10YWJsZXMuYy4KICAqLwotI2lmbmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCi0KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVglVTlVTVUFMX0RFVgotCi0jZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKLXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKLSAgLmRyaXZlcl9pbmZvID0gKFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0KLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0jdW5kZWYgVVNVQUxfREVWCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCi0KLS8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGV2aWNlcyB3ZSByZWNvZ25pemUsIGFsb25nIHdpdGggdGhlaXIgZmxhZyBkYXRhICovCiAKIC8qIFRoZSB2ZW5kb3IgbmFtZSBzaG91bGQgYmUga2VwdCBhdCBlaWdodCBjaGFyYWN0ZXJzIG9yIGxlc3MsIGFuZAogICogdGhlIHByb2R1Y3QgbmFtZSBzaG91bGQgYmUga2VwdCBhdCAxNiBjaGFyYWN0ZXJzIG9yIGxlc3MuIElmIGEgZGV2aWNlCkBAIC0xNzksMTggKzExOCwxNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHVzX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKICMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiIAotIwl1bmRlZiBVTlVTVUFMX0RFVgotIwl1bmRlZiBDT01QTElBTlRfREVWCi0jCXVuZGVmIFVTVUFMX0RFVgotCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IE5VTEwgfQorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKwogCiAjaWZkZWYgQ09ORklHX1BNCS8qIE1pbmltYWwgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMDcsOCArMTQ1LDkgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc3VzcGVuZCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIyMSw4ICsxNjAsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXN1bWUpOwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMzUsNiArMTc1LDcgQEAKIAkgKiB0aGUgZGV2aWNlICovCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXNldF9yZXN1bWUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKQEAgLTI0Myw3ICsxODQsNyBAQAogICogYSBVU0IgcG9ydCByZXNldCwgd2hldGhlciBmcm9tIHRoaXMgZHJpdmVyIG9yIGEgZGlmZmVyZW50IG9uZS4KICAqLwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNTMsOCArMTk0LDkgQEAKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3ByZV9yZXNldCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjY5LDYgKzIxMSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Bvc3RfcmVzZXQpOwogCiAvKgogICogZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlIHRha2VzIGFuIHVuc2lnbmVkIGNoYXIgYXJyYXkgKHdoaWNoIG11c3QKQEAgLTMxMSw2ICsyNTQsNyBAQAogCiAJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbGxfaW5xdWlyeV9yZXNwb25zZSk7CiAKIHN0YXRpYyBpbnQgdXNiX3N0b3JfY29udHJvbF90aHJlYWQodm9pZCAqIF9fdXMpCiB7CkBAIC01NTEsMjAgKzQ5NSwxMyBAQAogCQkJdmlkLCBwaWQsIGYpOwogfQogCi0vKiBGaW5kIGFuIHVudXN1YWxfZGV2IGRlc2NyaXB0b3IgKGFsd2F5cyBzdWNjZWVkcyBpbiB0aGUgY3VycmVudCBjb2RlKSAqLwotc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiAqZmluZF91bnVzdWFsKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsKLQlyZXR1cm4gJnVzX3VudXN1YWxfZGV2X2xpc3RbaWRfaW5kZXhdOwotfQotCiAvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLAorCQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2MgPQogCQkmdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0Jc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldiA9IGZpbmRfdW51c3VhbChpZCk7CiAKIAkvKiBTdG9yZSB0aGUgZW50cmllcyAqLwogCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OwpAQCAtNjI5LDcgKzU2Niw3IEBACiB9CiAKIC8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+cHJvdG9jb2wpIHsKIAljYXNlIFVTX1BSX0NCOgpAQCAtNjUxLDEwMCArNTg4LDExIEBACiAJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydDsKIAkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0JY2FzZSBVU19QUl9VU0JBVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNodXR0bGUgVVNCQVQiOwotCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLQljYXNlIFVTX1BSX0VVU0JfU0REUjA5OgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0JY2FzZSBVU19QUl9TRERSNTU6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KLQljYXNlIFVTX1BSX0RQQ01fVVNCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCi0JY2FzZSBVU19QUl9GUkVFQ09NOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0JY2FzZSBVU19QUl9EQVRBRkFCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0JY2FzZSBVU19QUl9KVU1QU0hPVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotCWNhc2UgVVNfUFJfQUxBVURBOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQotCWNhc2UgVVNfUFJfS0FSTUE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSByaW9fa2FybWFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7Ci0KLQkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLwotCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKLQkJdXMtPm1heF9sdW4gPSAwOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfcHJvdG9jb2woc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN3aXRjaCAodXMtPnN1YmNsYXNzKSB7CiAJY2FzZSBVU19TQ19SQkM6CkBAIC03NzksMjYgKzYyNyw3IEBACiAJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CiAJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotCWNhc2UgVVNfU0NfSVNEMjAwOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWNhc2UgVVNfU0NfQ1lQX0FUQUNCOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7Ci0JCXVzLT5wcm90b19oYW5kbGVyID0gY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHBpcGUgc2V0dGluZ3MgKi8KQEAgLTg0NiwxMiArNjc1LDEyIEBACiAJdXMtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAl1cy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXMtPnB1c2JfZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAJaWYgKGVwX2ludCkgewogCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCi0JCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQkJdXNiX2VuZHBvaW50X251bShlcF9pbnQpKTsKIAkJdXMtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMTIsMTcgKzg0MSwxNSBAQAogfQogCiAKLS8qIFByb2JlIHRvIHNlZSBpZiB3ZSBjYW4gZHJpdmUgYSBuZXdseS1jb25uZWN0ZWQgVVNCIGRldmljZSAqLwotc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKy8qIEZpcnN0IHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXM7CiAJaW50IHJlc3VsdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwotCi0JaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSkKLQkJcmV0dXJuIC1FTlhJTzsKIAogCVVTX0RFQlVHUCgiVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZGV0ZWN0ZWRcbiIpOwogCkBAIC0xMDQxLDcgKzg2OCw3IEBACiAJICogQWxsb3cgMTYtYnl0ZSBDREJzIGFuZCB0aHVzID4gMlRCCiAJICovCiAJaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKLQl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJKnB1cyA9IHVzID0gaG9zdF90b191cyhob3N0KTsKIAltZW1zZXQodXMsIDAsIHNpemVvZihzdHJ1Y3QgdXNfZGF0YSkpOwogCW11dGV4X2luaXQoJih1cy0+ZGV2X211dGV4KSk7CiAJaW5pdF9jb21wbGV0aW9uKCZ1cy0+Y21uZF9yZWFkeSk7CkBAIC0xMDU0LDI0ICs4ODEsNDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKIAotCS8qCi0JICogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzCi0JICoKLQkgKiBpZF9pbmRleCBpcyBjYWxjdWxhdGVkIGluIHRoZSBkZWNsYXJhdGlvbiB0byBiZSB0aGUgaW5kZXggbnVtYmVyCi0JICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQotCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCi0JICovCi0JcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCk7CisJLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzICovCisJcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCwgdW51c3VhbF9kZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyogR2V0IHRoZSB0cmFuc3BvcnQsIHByb3RvY29sLCBhbmQgcGlwZSBzZXR0aW5ncyAqLwotCXJlc3VsdCA9IGdldF90cmFuc3BvcnQodXMpOwotCWlmIChyZXN1bHQpCisJLyogR2V0IHN0YW5kYXJkIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgc2V0dGluZ3MgKi8KKwlnZXRfdHJhbnNwb3J0KHVzKTsKKwlnZXRfcHJvdG9jb2wodXMpOworCisJLyogR2l2ZSB0aGUgY2FsbGVyIGEgY2hhbmNlIHRvIGZpbGwgaW4gc3BlY2lhbGl6ZWQgdHJhbnNwb3J0CisJICogb3IgcHJvdG9jb2wgc2V0dGluZ3MuCisJICovCisJcmV0dXJuIDA7CisKK0JhZERldmljZToKKwlVU19ERUJVR1AoInN0b3JhZ2VfcHJvYmUoKSBmYWlsZWRcbiIpOworCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMSk7CisKKy8qIFNlY29uZCBwYXJ0IG9mIGdlbmVyYWwgVVNCIG1hc3Mtc3RvcmFnZSBwcm9iaW5nICovCitpbnQgdXNiX3N0b3JfcHJvYmUyKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOworCWludCByZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgaGF2ZSBib3RoIGJlZW4gc2V0ICovCisJaWYgKCF1cy0+dHJhbnNwb3J0IHx8ICF1cy0+cHJvdG9faGFuZGxlcikgeworCQlyZXN1bHQgPSAtRU5YSU87CiAJCWdvdG8gQmFkRGV2aWNlOwotCXJlc3VsdCA9IGdldF9wcm90b2NvbCh1cyk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBCYWREZXZpY2U7CisJfQorCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKwlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCisJCXVzLT5tYXhfbHVuID0gMDsKKworCS8qIEZpbmQgdGhlIGVuZHBvaW50cyBhbmQgY2FsY3VsYXRlIHBpcGUgdmFsdWVzICovCiAJcmVzdWx0ID0gZ2V0X3BpcGVzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKQEAgLTEwODAsNyArOTI5LDcgQEAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KHVzX3RvX2hvc3QodXMpLCAmdXMtPnB1c2JfaW50Zi0+ZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKIAkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOwpAQCAtMTEwOCw5ICs5NTcsMTAgQEAKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9wcm9iZTIpOwogCi0vKiBIYW5kbGUgYSBkaXNjb25uZWN0IGV2ZW50IGZyb20gdGhlIFVTQiBjb3JlICovCi1zdGF0aWMgdm9pZCBzdG9yYWdlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCisvKiBIYW5kbGUgYSBVU0IgbWFzcy1zdG9yYWdlIGRpc2Nvbm5lY3QgKi8KK3ZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCkBAIC0xMTE4LDYgKzk2OCw0MiBAQAogCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfZGlzY29ubmVjdCk7CisKKy8qIFRoZSBtYWluIHByb2JlIHJvdXRpbmUgZm9yIHN0YW5kYXJkIGRldmljZXMgKi8KK3N0YXRpYyBpbnQgc3RvcmFnZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwkvKgorCSAqIElmIGxpYnVzdWFsIGlzIGNvbmZpZ3VyZWQsIGxldCBpdCBkZWNpZGUgd2hldGhlciBhIHN0YW5kYXJkCisJICogZGV2aWNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHVzYi1zdG9yYWdlIG9yIGJ5IHViLgorCSAqIElmIHRoZSBkZXZpY2UgaXNuJ3Qgc3RhbmRhcmQgKGlzIGhhbmRsZWQgYnkgYSBzdWJkcml2ZXIKKwkgKiBtb2R1bGUpIHRoZW4gZG9uJ3QgYWNjZXB0IGl0LgorCSAqLworCWlmICh1c2JfdXN1YWxfY2hlY2tfdHlwZShpZCwgVVNCX1VTX1RZUEVfU1RPUikgfHwKKwkJCXVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKGludGYpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyoKKwkgKiBDYWxsIHRoZSBnZW5lcmFsIHByb2JlIHByb2NlZHVyZXMuCisJICoKKwkgKiBUaGUgdW51c3VhbF9kZXZfbGlzdCBhcnJheSBpcyBwYXJhbGxlbCB0byB0aGUgdXNiX3N0b3JhZ2VfdXNiX2lkcworCSAqIHRhYmxlLCBzbyB3ZSB1c2UgdGhlIGluZGV4IG9mIHRoZSBpZCBlbnRyeSB0byBmaW5kIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgdW51c3VhbF9kZXZzIGVudHJ5LgorCSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gdXNiX3N0b3JhZ2VfdXNiX2lkcykgKyB1c191bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTm8gc3BlY2lhbCB0cmFuc3BvcnQgb3IgcHJvdG9jb2wgc2V0dGluZ3MgaW4gdGhlIG1haW4gbW9kdWxlICovCisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgpAQCAtMTEyNiwxNSArMTAxMiwxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAogCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPQlzdG9yYWdlX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXN0b3JhZ2VfcmVzdW1lLAotCS5yZXNldF9yZXN1bWUgPQlzdG9yYWdlX3Jlc2V0X3Jlc3VtZSwKLSNlbmRpZgotCS5wcmVfcmVzZXQgPQlzdG9yYWdlX3ByZV9yZXNldCwKLQkucG9zdF9yZXNldCA9CXN0b3JhZ2VfcG9zdF9yZXNldCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiX3N0b3JhZ2VfdXNiX2lkcywKIAkuc29mdF91bmJpbmQgPQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggNjVlNjc0ZS4uMjYwOWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC0xNzcsNCArMTc3LDI1IEBACiAjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAKKy8qIEdlbmVyYWwgcm91dGluZXMgcHJvdmlkZWQgYnkgdGhlIHVzYi1zdG9yYWdlIHN0YW5kYXJkIGNvcmUgKi8KKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworI2Vsc2UKKyNkZWZpbmUgdXNiX3N0b3Jfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc3VtZQkJTlVMTAorI2RlZmluZSB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICogVXN1YWwgVGFibGVzIEZpbGUgZm9yIHVzYi1zdG9yYWdlIGFuZCBsaWJ1c3VhbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfdXN1YWwuaD4KKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCisjZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9CisKKyNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAorICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3RvcmFnZV91c2JfaWRzKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBDT01QTElBTlRfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzIHRvIGlnbm9yZQorICovCitzdHJ1Y3QgaWdub3JlX2VudHJ5IHsKKwl1MTYJdmlkLCBwaWQsIGJjZG1pbiwgYmNkbWF4OworfTsKKworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAorewkJCQkJXAorCS52aWQJPSBpZF92ZW5kb3IsCQlcCisJLnBpZCAJPSBpZF9wcm9kdWN0LAkJXAorCS5iY2RtaW4JPSBiY2REZXZpY2VNaW4sCQlcCisJLmJjZG1heCA9IGJjZERldmljZU1heCwJCVwKK30KKworc3RhdGljIHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKworLyogUmV0dXJuIGFuIGVycm9yIGlmIGEgZGV2aWNlIGlzIGluIHRoZSBpZ25vcmVfaWRzIGxpc3QgKi8KK2ludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bnNpZ25lZCB2aWQsIHBpZCwgYmNkOworCXN0cnVjdCBpZ25vcmVfZW50cnkgKnA7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl2aWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJYmNkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJZm9yIChwID0gaWdub3JlX2lkczsgcC0+dmlkOyArK3ApIHsKKwkJaWYgKHAtPnZpZCA9PSB2aWQgJiYgcC0+cGlkID09IHBpZCAmJgorCQkJCXAtPmJjZG1pbiA8PSBiY2QgJiYgcC0+YmNkbWF4ID49IGJjZCkKKwkJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBiZTc2MDg0Li42MGJhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtNDEwLDcgKzQxMCw5IEBACiAJfQogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBTa2VsZXRvbiBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQlNrZWwtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCSAiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00NDEsNyArNDQzLDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOwogCi0JaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBTa2VsZXRvbiAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2tlbF9kcmF3X2Rvd24oc3RydWN0IHVzYl9za2VsICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKaW5kZXggMTMzNWNiZS4uMjVlYWU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpAQCAtNjM4LDggKzYzOCw3IEBACiAJdXNiX3B1dF9pbnRmKGlmYWNlKTsKIAlrZnJlZShjYmFmLT5idWZmZXIpOwogCS8qIHBhcmFub2lhOiBjbGVhbiB1cCBjcnlwdG8ga2V5cyAqLwotCW1lbXNldChjYmFmLCAwLCBzaXplb2YoKmNiYWYpKTsKLQlrZnJlZShjYmFmKTsKKwlremZyZWUoY2JhZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYmFmX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggOGUxODE0MS4uZjBhYWMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtODg5LDYgKzg4OSw4IEBACiAJaWYgKHVzYl9kZXYtPnd1c2IgPT0gMCB8fCB1c2JfZGV2LT5kZXZudW0gPT0gMSkKIAkJcmV0dXJuOwkJLyogc2tpcCBub24gd3VzYiBhbmQgd3VzYiBSSHMgKi8KIAorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpOworCiAJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOwogCWlmICh3dXNiaGMgPT0gTlVMTCkKIAkJZ290byBlcnJvcl9ub2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGY0YWEyOGUuLjgxMThkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgMCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYWRkcjA7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCiAJLyogU2V0IG5ldyAoYXV0aGVudGljYXRlZCkgYWRkcmVzcy4gKi8KQEAgLTMyNyw2ICszMjgsNyBAQAogCXJlc3VsdCA9IHd1c2Jfc2V0X2Rldl9hZGRyKHd1c2JoYywgd3VzYl9kZXYsIG5ld19hZGRyZXNzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyOworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKIAl1c2JfZXAwX3JlaW5pdCh1c2JfZGV2KTsKIAl1c2JfZGV2LT5hdXRoZW50aWNhdGVkID0gMTsKIGVycm9yX2FkZHI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMKaW5kZXggMjM4YTk2YS4uNjEzYTVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXhmZXIuYwpAQCAtOTIxLDggKzkyMSwxMCBAQAogCXJlc3VsdCA9IC1FTk9ERVY7CiAJLyogRklYTUU6IHNlZ21lbnRhdGlvbiBicm9rZW4gLS0ga2lsbHMgRFdBICovCiAJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CQkvKiBnZXQgYSBXVVNCIGRldiAqLwotCWlmICh1cmItPmRldiA9PSBOVUxMKQorCWlmICh1cmItPmRldiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmd3VzYmhjLT5tdXRleCk7CiAJCWdvdG8gZXJyb3JfZGV2X2dvbmU7CisJfQogCXd1c2JfZGV2ID0gX193dXNiX2Rldl9nZXRfYnlfdXNiX2Rldih3dXNiaGMsIHVyYi0+ZGV2KTsKIAlpZiAod3VzYl9kZXYgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJnd1c2JoYy0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCA4MTYwM2Y4Li5jNmQ3Y2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMjUwNyw2ICsyNTA3LDI1IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCiAKK3N0YXRpYyB2b2lkIHJhZGVvbmZiX3doYWNrX3Bvd2VyX3N0YXRlKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJdTE2IHB3cl9jbWQ7CisKKwlmb3IgKDs7KSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJpbmZvLT5wZGV2LAorCQkJCSAgICAgcmluZm8tPnBtX3JlZytQQ0lfUE1fQ1RSTCwKKwkJCQkgICAgICZwd3JfY21kKTsKKwkJaWYgKHB3cl9jbWQgJiAyKQorCQkJYnJlYWs7CisJCXB3cl9jbWQgPSAocHdyX2NtZCAmIH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKSB8IDI7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChyaW5mby0+cGRldiwKKwkJCQkgICAgICByaW5mby0+cG1fcmVnK1BDSV9QTV9DVFJMLAorCQkJCSAgICAgIHB3cl9jbWQpOworCQltc2xlZXAoNTAwKTsKKwl9CisJcmluZm8tPnBkZXYtPmN1cnJlbnRfc3RhdGUgPSBzdGF0ZTsKK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX3NldF9zdXNwZW5kKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IHN1c3BlbmQpCiB7CiAJdTMyIHRtcDsKQEAgLTI1NTgsNiArMjU3NywxMSBAQAogCQkvKiBTd2l0Y2ggUENJIHBvd2VyIG1hbmFnZW1lbnQgdG8gRDIuICovCiAJCXBjaV9kaXNhYmxlX2RldmljZShyaW5mby0+cGRldik7CiAJCXBjaV9zYXZlX3N0YXRlKHJpbmZvLT5wZGV2KTsKKwkJLyogVGhlIGNoaXAgc2VlbXMgdG8gbmVlZCB1cyB0byB3aGFjayB0aGUgUE0gcmVnaXN0ZXIKKwkJICogcmVwZWF0ZWRseSB1bnRpbCBpdCBzdGlja3MuIFdlIGRvIHRoYXQgLXByaW9yLSB0bworCQkgKiBjYWxsaW5nIHBjaV9zZXRfcG93ZXJfc3RhdGUoKQorCQkgKi8KKwkJcmFkZW9uZmJfd2hhY2tfcG93ZXJfc3RhdGUocmluZm8sIFBDSV9EMik7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUocmluZm8tPnBkZXYsIFBDSV9EMik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHN3aXRjaGluZyB0byBEMCBzdGF0ZS4uLlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCA2MmJkNDQ0Li4zNzhmMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC00NTcsNyArNDU3LDcgQEAKIAogLyogQVUxMTAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBfX2luaXQgYXUxMTAwZmJfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVnc19yZXM7CkBAIC00NzUsNyArNDc1LDcgQEAKIAogCWZiZGV2LT5wYW5lbCA9ICZrbm93bl9sY2RfcGFuZWxzW2Rydl9pbmZvLnBhbmVsX2lkeF07CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCAodm9pZCopZmJkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgKHZvaWQgKilmYmRldik7CiAKIAkvKiBBbGxvY2F0ZSByZWdpb24gZm9yIG91ciByZWdpc3RlcnMgYW5kIG1hcCB0aGVtICovCiAJaWYgKCEocmVnc19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKGRldiksCkBAIC01ODMsMTkgKzU4MywxOSBAQAogCQlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5pbmZvLmNtYXApOwogCX0KIAlrZnJlZShmYmRldik7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxMTAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBOVUxMOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZmJkZXYgPSAoc3RydWN0IGF1MTEwMGZiX2RldmljZSopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogI2lmICFkZWZpbmVkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19MT0dPKQogCWF1MTEwMGZiX2ZiX2JsYW5rKFZFU0FfUE9XRVJET1dOLCAmZmJkZXYtPmluZm8pOwpAQCAtNjIwLDkgKzYyMCw5IEBACiBzdGF0aWMgdTMyIHN5c19jbGtzcmM7CiBzdGF0aWMgc3RydWN0IGF1MTEwMGZiX3JlZ3MgZmJyZWdzOwogCi1pbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIWZiZGV2KQogCQlyZXR1cm4gMDsKQEAgLTY0MSw5ICs2NDEsOSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIWZiZGV2KQogCQlyZXR1cm4gMDsKQEAgLTY2MywxMCArNjYzLDExIEBACiAjZGVmaW5lIGF1MTEwMGZiX2Rydl9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTEwMC1sY2QiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImF1MTEwMC1sY2QiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBhdTExMDBmYl9kcnZfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUJCT0gYXUxMTAwZmJfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZAk9IGF1MTEwMGZiX2Rydl9zdXNwZW5kLApAQCAtNzUzLDEyICs3NTQsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiB9CiAKIHZvaWQgX19leGl0IGF1MTEwMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKIAogCWtmcmVlKGRydl9pbmZvLm9wdF9tb2RlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwppbmRleCAwM2U1N2VmLi4wZDk2ZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogCiAvKiBBVTEyMDAgTENEIGNvbnRyb2xsZXIgZGV2aWNlIGRyaXZlciAqLwogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTIwMGZiX2RldmljZSAqZmJkZXY7CiAJdW5zaWduZWQgbG9uZyBwYWdlOwpAQCAtMTY0NSw3ICsxNjQ1LDcgQEAKIAkJLyogQWxsb2NhdGUgdGhlIGZyYW1lYnVmZmVyIHRvIHRoZSBtYXhpbXVtIHNjcmVlbiBzaXplICovCiAJCWZiZGV2LT5mYl9sZW4gPSAod2luLT53W3BsYW5lXS54cmVzICogd2luLT53W3BsYW5lXS55cmVzICogYnBwKSAvIDg7CiAKLQkJZmJkZXYtPmZiX21lbSA9IGRtYV9hbGxvY19ub25jb2hlcmVudChkZXYsCisJCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAogCQkJCVBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCiAJCQkJJmZiZGV2LT5mYl9waHlzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFmYmRldi0+ZmJfbWVtKSB7CkBAIC0xNzE1LDcgKzE3MTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCWludCBwbGFuZTsKQEAgLTE3MzMsNyArMTczMyw4IEBACiAJCS8qIENsZWFuIHVwIGFsbCBwcm9iZSBkYXRhICovCiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiZGV2LT5mYl9pbmZvKTsKIAkJaWYgKGZiZGV2LT5mYl9tZW0pCi0JCQlkbWFfZnJlZV9ub25jb2hlcmVudChkZXYsIFBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCisJCQlkbWFfZnJlZV9ub25jb2hlcmVudCgmZGV2LT5kZXYsCisJCQkJCVBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCiAJCQkJCWZiZGV2LT5mYl9tZW0sIGZiZGV2LT5mYl9waHlzKTsKIAkJaWYgKGZiZGV2LT5mYl9pbmZvLmNtYXAubGVuICE9IDApCiAJCQlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5mYl9pbmZvLmNtYXApOwpAQCAtMTc0NywyMiArMTc0OCwyNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlKQogewogCS8qIFRPRE8gKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTEyMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTIwMC1sY2QiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMjAwZmJfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxMjAwZmJfZHJ2X3JlbW92ZSwKICNpZmRlZiBDT05GSUdfUE0KQEAgLTE5MDYsMTIgKzE5MDksMTIgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUG93ZXIgbWFuYWdlbWVudCBkZXZpY2UgZW50cnkgZm9yIHRoZSBhdTEyMDBmYiBsb2FkZWQuXG4iKTsKIAkjZW5kaWYKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1MTIwMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXUxMjAwZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19saW51eF9jbHV0MjI0LnBwbSBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX2xpbnV4X2NsdXQyMjQucHBtCmluZGV4IDNjMTRlNDMuLmRlOTNmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX2xpbnV4X2NsdXQyMjQucHBtCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvX2xpbnV4X2NsdXQyMjQucHBtCkBAIC0xLDE2MDQgKzEsMjgyOCBAQAogUDMKLSMgU3RhbmRhcmQgMjI0LWNvbG9yIExpbnV4IGxvZ28KLTgwIDgwCisxNDUgMTEzCiAyNTUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAgNiAgIDYgICA2ICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwCi0gMTAgIDEwICAxMCAgIDYgICA2ICAgNiAgIDYgICA2ICAgNiAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMTAgIDEwICAxMCAgMTQgIDE0ICAxNAotIDIyICAyMiAgMjIgIDI2ICAyNiAgMjYgIDMwICAzMCAgMzAgIDM0ICAzNCAgMzQKLSAzMCAgMzAgIDMwICAzMCAgMzAgIDMwICAyNiAgMjYgIDI2ICAxOCAgMTggIDE4Ci0gMTQgIDE0ICAxNCAgMTAgIDEwICAxMCAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICAyNiAgMjYgIDI2ICA0MiAgNDIgIDQyCi0gNTQgIDU0ICA1NCAgNjYgIDY2ICA2NiAgNzggIDc4ICA3OCAgNzggIDc4ICA3OAotIDc4ICA3OCAgNzggIDc0ICA3NCAgNzQgIDY2ICA2NiAgNjYgIDU0ICA1NCAgNTQKLSA0MiAgNDIgIDQyICAyNiAgMjYgIDI2ICAxOCAgMTggIDE4ICAxMCAgMTAgIDEwCi0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDIyICAyMiAgMjIgIDQyICA0MiAgNDIgIDY2ICA2NiAgNjYgIDg2ICA4NiAgODYKLSA2NiAgNjYgIDY2ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAyMiAgMjIgIDIyCi0gMjYgIDI2ICAyNiAgMzQgIDM0ICAzNCAgNTQgIDU0ICA1NCAgNjYgIDY2ICA2NgotIDg2ICA4NiAgODYgIDcwICA3MCAgNzAgIDQ2ICA0NiAgNDYgIDI2ICAyNiAgMjYKLSAxNCAgMTQgIDE0ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwICAyNiAgMjYgIDI2Ci0gNTAgIDUwICA1MCAgODIgIDgyICA4MiAgNTggIDU4ICA1OCAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDYgICA2ICAgNiAgNTQgIDU0ICA1NCAgODYgIDg2ICA4NiAgNjYgIDY2ICA2NgotIDM4ICAzOCAgMzggIDE4ICAxOCAgMTggICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDIyICAyMiAgMjIgIDUwICA1MCAgNTAKLSA3OCAgNzggIDc4ICAzNCAgMzQgIDM0ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICA3MCAgNzAgIDcwCi0gNzggIDc4ICA3OCAgNDYgIDQ2ICA0NiAgMjIgIDIyICAyMiAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDYgICA2ICAgNiAgMTggIDE4ICAxOCAgNDIgIDQyICA0MiAgODIgIDgyICA4MgotIDI2ICAyNiAgMjYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTQgIDE0ICAxNAotIDQ2ICA0NiAgNDYgIDM0ICAzNCAgMzQgICA2ICAgNiAgIDYgICAyICAgMiAgIDYKLSA0MiAgNDIgIDQyICA3OCAgNzggIDc4ICA0MiAgNDIgIDQyICAxOCAgMTggIDE4Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAxMCAgMTAgIDEwICAzMCAgMzAgIDMwICA2NiAgNjYgIDY2ICA1OCAgNTggIDU4Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAyNiAgMjYgIDI2Ci0gODYgIDg2ICA4NiAxMDEgMTAxIDEwMSAgNDYgIDQ2ICA0NiAgMTAgIDEwICAxMAotICAyICAgMiAgIDYgIDU4ICA1OCAgNTggIDcwICA3MCAgNzAgIDM0ICAzNCAgMzQKLSAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDE0ICAxNCAgMTQgIDQyICA0MiAgNDIgIDg2ICA4NiAgODYgIDEwICAxMCAgMTAKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDMwICAzMCAgMzAKLSA5NCAgOTQgIDk0ICA5NCAgOTQgIDk0ICA1OCAgNTggIDU4ICAyNiAgMjYgIDI2Ci0gIDIgICAyICAgNiAgIDYgICA2ICAgNiAgNzggIDc4ICA3OCAgNTQgIDU0ICA1NAotIDIyICAyMiAgMjIgICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMjIgIDIyICAyMiAgNjIgIDYyICA2MiAgNjIgIDYyICA2MiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMjYgIDI2ICAyNgotIDU0ICA1NCAgNTQgIDM4ICAzOCAgMzggIDE4ICAxOCAgMTggIDEwICAxMCAgMTAKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzNCAgMzQgIDM0ICA4MiAgODIgIDgyCi0gMzggIDM4ICAzOCAgMTQgIDE0ICAxNCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAzMCAgMzAgIDMwICA3OCAgNzggIDc4ICAzMCAgMzAgIDMwICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAxMCAgMTAgIDEwCi0gMTAgIDEwICAxMCAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDc4ICA3OCAgNzgKLSA1MCAgNTAgIDUwICAxOCAgMTggIDE4ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDEgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM4ICAzOCAgMzggIDg2ICA4NiAgODYgIDE0ICAxNCAgMTQgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgNTQgIDU0ICA1NAotIDY2ICA2NiAgNjYgIDI2ICAyNiAgMjYgICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDIgIDQyICA0MiAgODIgIDgyICA4MiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDEwICAxMCAgMTAgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDYgICA2ICAgNgotIDE0ICAxNCAgMTQgIDEwICAxMCAgMTAgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAxOCAgMTggIDE4Ci0gODIgIDgyICA4MiAgMzQgIDM0ICAzNCAgMTAgIDEwICAxMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSA0NiAgNDYgIDQ2ICA4NiAgODYgIDg2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDYgICA2ICAgNiAgIDYgICA2ICAgNiAgMjIgIDIyICAyMiAgMzQgIDM0ICAzNAotICA2ICAgNiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAxOCAgMTggIDE4ICAzNCAgMzQgIDM0Ci0gMTAgIDEwICAxMCAgNTAgIDUwICA1MCAgMjIgIDIyICAyMiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDEwICAxMCAgMTAKLSA4NiAgODYgIDg2ICA0MiAgNDIgIDQyICAxNCAgMTQgIDE0ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDQ2ICA0NiAgNDYgIDg2ICA4NiAgODYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAzOCAgMzggIDM4IDExNiAxMTYgMTE2ICA5NCAgOTQgIDk0ICAyMiAgMjIgIDIyCi0gMjIgIDIyICAyMiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDE0ICAxNCAgMTQgIDg2ICA4NiAgODYgMTM4IDEzOCAxMzggMTYyIDE2MiAxNjIKLTE1NCAxNTQgMTU0ICAzOCAgMzggIDM4ICAyNiAgMjYgIDI2ICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDg2ICA4NiAgODYgIDQ2ICA0NiAgNDYgIDE0ICAxNCAgMTQgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDYgIDQ2ICA0NiAgODYgIDg2ICA4NiAgIDIgICAyICAgNiAgMTQgIDE0ICAxNAotMTM0IDEzNCAxMzQgMTk4IDE5OCAxOTggMTk1IDE5NSAxOTUgMTE2IDExNiAxMTYKLSAxMCAgMTAgIDEwICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2Ci0xMDEgIDk4ICA4OSAxODcgMTg3IDE4NyAyMTAgMjEwIDIxMCAyMTggMjE4IDIxOAotMjE0IDIxNCAyMTQgMTM0IDEzNCAxMzQgIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gODYgIDg2ICA4NiAgNTAgIDUwICA1MCAgMTggIDE4ICAxOCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSA0NiAgNDYgIDQ2ICA4NiAgODYgIDg2ICAgMiAgIDIgICA2ICA1NCAgNTQgIDU0Ci0yMTggMjE4IDIxOCAxOTUgMTk1IDE5NSAyMjYgMjI2IDIyNiAyNDYgMjQ2IDI0NgotIDU4ICA1OCAgNTggICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDMwICAzMCAgMzAKLTIxMCAyMTAgMjEwIDI1MyAyNTMgMjUzIDE3NCAxNzQgMTc0IDEyMyAxMjMgMTIzCi0yMjEgMjIxIDIyMSAyMzQgMjM0IDIzNCAgNzQgIDc0ICA3NCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA3MCAgNzAgIDcwICA1OCAgNTggIDU4ICAyMiAgMjIgIDIyICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDQ2ICA0NiAgNDYgIDgyICA4MiAgODIgICAyICAgMiAgIDYgMTA2IDEwNiAxMDYKLTE3MCAxNzAgMTcwICAyNiAgMjYgIDI2ICA4NiAgODYgIDg2IDIyNiAyMjYgMjI2Ci0xMjMgMTIzIDEyMyAgMTAgIDEwICAxMCAgMTQgIDE0ICAxNCAgNDYgIDQ2ICA0NgotMjMxIDIzMSAyMzEgMTkwIDE5MCAxOTAgICA2ICAgNiAgIDYgIDcwICA3MCAgNzAKLSA5MCAgOTAgIDkwIDIzOCAyMzggMjM4IDE1OCAxNTggMTU4ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDcwICA3MCAgNzAgIDU4ICA1OCAgNTggIDIyICAyMiAgMjIgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gNDIgIDQyICA0MiAgODYgIDg2ICA4NiAgIDYgICA2ICAgNiAxMTYgMTE2IDExNgotMTA2IDEwNiAxMDYgICA2ICAgNiAgIDYgIDcwICA3MCAgNzAgMTQ5IDE0OSAxNDkKLTEyOCAxMjggMTI4ICAxOCAgMTggIDE4ICAzOCAgMzggIDM4ICA1NCAgNTQgIDU0Ci0yMjEgMjIxIDIyMSAxMDYgMTA2IDEwNiAgIDIgICAyICAgNiAgMTQgIDE0ICAxNAotIDQ2ICA0NiAgNDYgMTkwIDE5MCAxOTAgMTk4IDE5OCAxOTggICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNzQgIDc0ICA3NCAgNjIgIDYyICA2MiAgMjIgIDIyICAyMiAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSA0MiAgNDIgIDQyICA5NCAgOTQgIDk0ICAxNCAgMTQgIDE0IDEwMSAxMDEgMTAxCi0xMjggMTI4IDEyOCAgIDIgICAyICAgNiAgMTggIDE4ICAxOCAxMTYgMTE2IDExNgotMTE4ICA5OCAgNDYgMTIxICA5MiAgIDggMTIxICA5MiAgIDggIDk4ICA3OCAgMTAKLTE2MiAxNjIgMTYyIDEwNiAxMDYgMTA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAxOTUgMTk1IDE5NSAxOTUgMTk1IDE5NSAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA3NCAgNzQgIDc0ICA2MiAgNjIgIDYyICAyMiAgMjIgIDIyICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAwICAgMQotICAwICAgMCAgIDEgICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM4ICAzOCAgMzggIDkwICA5MCAgOTAgIDE0ICAxNCAgMTQgIDU4ICA1OCAgNTgKLTIxMCAyMTAgMjEwICAyNiAgMjYgIDI2ICA1NCAgMzggICA2IDE1NCAxMTQgIDEwCi0yMjYgMTcwICAxMSAyMzYgMTg2ICAxMSAyMjUgMTc1ICAxNSAxODQgMTQ0ICAxMgotMjE1IDE3NCAgMTUgMTc1IDE0NiAgNjEgIDM3ICAyNiAgIDkgICAyICAgMiAgIDYKLSA3MCAgNzAgIDcwIDI0NiAyNDYgMjQ2IDEzOCAxMzggMTM4ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDcwICA3MCAgNzAgIDY2ICA2NiAgNjYgIDI2ICAyNiAgMjYgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzggIDM4ICAzOCAgODYgIDg2ICA4NiAgMTQgIDE0ICAxNCAgMTAgIDEwICAxMAotMTk1IDE5NSAxOTUgMTg4IDE2NCAxMTUgMTkyIDEzMyAgIDkgMjI1IDE3NSAgMTUKLTIzOSAxODIgIDEzIDIzNCAxOTAgIDEwIDIzMiAxOTUgIDE2IDIzMiAyMDAgIDMwCi0yNDUgMjA3ICA0NSAyNDEgMjA4ICAxOSAyMzIgMTk1ICAxNiAxODQgMTQ0ICAxMgotMjE4IDE5NCAxMzQgMjExIDIwNiAxODYgIDQyICA0MiAgNDIgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNTAgIDUwICA1MCAgNzQgIDc0ICA3NCAgMzAgIDMwICAzMCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzNCAgMzQgIDM0ICA4NiAgODYgIDg2ICAxNCAgMTQgIDE0ICAgMiAgIDIgICA2Ci0xMjEgIDg3ICAyNSAxOTIgMTMzICAgOSAyMTkgMTYyICAxMCAyMzkgMTgyICAxMwotMjM2IDE4NiAgMTEgMjMyIDE5NSAgMTYgMjQxIDIwOCAgMTkgMjQ0IDIxNCAgNTQKLTI0NiAyMTggIDYwIDI0NiAyMTggIDM4IDI0NiAyMTUgIDIwIDI0MSAyMDggIDE5Ci0yNDEgMjA4ICAxOSAyMjYgMTg0ICAxMyAxMjEgIDg3ICAyNSAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA1MCAgNTAgIDUwICA4MiAgODIgIDgyICAzNCAgMzQgIDM0ICAxMCAgMTAgIDEwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM0ICAzNCAgMzQgIDgyICA4MiAgODIgIDMwICAzMCAgMzAgIDYxICA0MiAgIDYKLTE4MCAxMjMgICA3IDIwNiAxNDUgIDEwIDIzMCAxNzQgIDExIDIzOSAxODIgIDEzCi0yMzQgMTkwICAxMCAyMzggMjAyICAxNSAyNDEgMjA4ICAxOSAyNDYgMjE4ICA3NAotMjQ2IDIxOCAgMzggMjQ2IDIxNSAgMjAgMjQ2IDIxNSAgMjAgMjQ2IDIxNSAgMjAKLTIyNiAxODQgIDEzIDIxNSAxNzQgIDE1IDE4NCAxNDQgIDEyICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDI2ICAyNiAgMjYgIDk0ICA5NCAgOTQgIDQyICA0MiAgNDIgIDE0ICAxNCAgMTQKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzAgIDMwICAzMCAgNzggIDc4ICA3OCAgNTAgIDUwICA1MCAxMDQgIDY5ICAgNgotMTkyIDEzMyAgIDkgMjE2IDE1OCAgMTAgMjM2IDE3OCAgMTIgMjM2IDE4NiAgMTEKLTIzMiAxOTUgIDE2IDI0MSAyMDggIDE5IDI0NCAyMTQgIDU0IDI0NSAyMTUgIDQzCi0yNDYgMjE1ICAyMCAyNDYgMjE1ICAyMCAyNDEgMjA4ICAxOSAxOTggMTU1ICAxMAotMjAwIDE0NCAgMTEgMjE2IDE1OCAgMTAgMTU2IDExOCAgMTAgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDYgICA2ICAgNiAgOTAgIDkwICA5MCAgNTQgIDU0ICA1NCAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzMCAgMzAgIDMwICA3OCAgNzggIDc4ICA0NiAgNDYgIDQ2ICAyMiAgMjIgIDIyCi0xMzcgIDkyICAgNiAyMTAgMTYyICAxMCAyMzkgMTgyICAxMyAyMzggMTkwICAxMAotMjM4IDIwMiAgMTUgMjQxIDIwOCAgMTkgMjQ2IDIxNSAgMjAgMjQ2IDIxNSAgMjAKLTI0MSAyMDggIDE5IDIwMyAxNjYgIDE3IDE4NSAxMzMgIDExIDIxMCAxNTAgIDEwCi0yMTYgMTU4ICAxMCAyMTAgMTUwICAxMCAxMDIgIDc4ICAxMCAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgIDU0ICA1NCAgNTQgIDE0ICAxNCAgMTQgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA2MiAgNjIgIDYyICA3NCAgNzQgIDc0ICAzMCAgMzAgIDMwCi0gMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM0ICAzNCAgMzQgIDc4ICA3OCAgNzggIDUwICA1MCAgNTAgICA2ICAgNiAgIDYKLSA5NCAgNzAgIDMwIDEzOSAxMDIgIDE1IDE5MCAxNDYgIDEzIDIyNiAxODQgIDEzCi0yMzIgMjAwICAzMCAyMzIgMTk1ICAxNiAyMTUgMTc0ICAxNSAxOTAgMTQ2ICAxMwotMTY4IDEyMiAgMTAgMTkyIDEzMyAgIDkgMjEwIDE1MCAgMTAgMjEzIDE1NCAgMTEKLTIwMiAxNTAgIDM0IDE4MiAxNTcgMTA2IDEwMSAgOTggIDg5ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNzggIDc4ICA3OCAxMTYgMTE2IDExNiAgNTggIDU4ICA1OAotICAyICAgMiAgIDYgIDIyICAyMiAgMjIgIDkwICA5MCAgOTAgIDQ2ICA0NiAgNDYKLSAxOCAgMTggIDE4ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzggIDM4ICAzOCAgODYgIDg2ICA4NiAgNTAgIDUwICA1MCAgIDYgICA2ICAgNgotMTI4IDEyOCAxMjggMTc0IDE1NCAxMTQgMTU2IDEwNyAgMTEgMTY4IDEyMiAgMTAKLTE5OCAxNTUgIDEwIDE4NCAxNDQgIDEyIDE5NyAxMzggIDExIDIwMCAxNDQgIDExCi0yMDYgMTQ1ICAxMCAyMDYgMTQ1ICAxMCAxOTcgMTM4ICAxMSAxODggMTY0IDExNQotMTk1IDE5NSAxOTUgMTk4IDE5OCAxOTggMTc0IDE3NCAxNzQgIDE0ICAxNCAgMTQKLSAgMiAgIDIgICA2ICAyMiAgMjIgIDIyIDExNiAxMTYgMTE2IDExNiAxMTYgMTE2Ci0gMjIgIDIyICAyMiAgIDIgICAyICAgNiAgNzQgIDc0ICA3NCAgNzAgIDcwICA3MAotIDMwICAzMCAgMzAgIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDE4ICAxOCAgMTgKLSA1MCAgNTAgIDUwIDEwMSAxMDEgMTAxICAyNiAgMjYgIDI2ICAxMCAgMTAgIDEwCi0xMzggMTM4IDEzOCAxOTAgMTkwIDE5MCAxNzQgMTU0IDExNCAxNTYgMTA3ICAxMQotMTk3IDEzOCAgMTEgMjAwIDE0NCAgMTEgMTk3IDEzOCAgMTEgMTkyIDEzMyAgIDkKLTE4MCAxMjMgICA3IDE5MCAxNDIgIDM0IDE5MCAxNzggMTQ0IDE4NyAxODcgMTg3Ci0yMDIgMjAyIDIwMiAyMjEgMjIxIDIyMSAyMTQgMjE0IDIxNCAgNjYgIDY2ICA2NgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDUwICA1MCAgNTAgIDYyICA2MiAgNjIKLSAgNiAgIDYgICA2ICAgMiAgIDIgICA2ICAxMCAgMTAgIDEwICA5MCAgOTAgIDkwCi0gNTAgIDUwICA1MCAgMTggIDE4ICAxOCAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMCAgMzQgIDM0ICAzNAotIDc0ICA3NCAgNzQgIDc0ICA3NCAgNzQgICAyICAgMiAgIDYgICA2ICAgNiAgIDYKLTE0NCAxNDQgMTQ0IDE5OCAxOTggMTk4IDE5MCAxOTAgMTkwIDE3OCAxNjYgMTQ2Ci0xNTQgMTIxICA2MCAxNTYgMTA3ICAxMSAxNTYgMTA3ICAxMSAxNjggMTI0ICA0NAotMTc0IDE1NCAxMTQgMTg3IDE4NyAxODcgMTkwIDE5MCAxOTAgMjEwIDIxMCAyMTAKLTI0NiAyNDYgMjQ2IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDE4MiAxODIgMTgyCi0gIDYgICA2ICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDYyICA2MiAgNjIKLSA3NCAgNzQgIDc0ICAzNCAgMzQgIDM0ICAxNCAgMTQgIDE0ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAxMCAgMTAgIDEwICAyMiAgMjIgIDIyICA1NCAgNTQgIDU0Ci0gOTQgIDk0ICA5NCAgMTggIDE4ICAxOCAgIDIgICAyICAgNiAgNDYgIDQ2ICA0NgotMjM0IDIzNCAyMzQgMjIxIDIyMSAyMjEgMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAKLTE5MCAxOTAgMTkwIDE4NyAxODcgMTg3IDE4NyAxODcgMTg3IDE5MCAxOTAgMTkwCi0xOTAgMTkwIDE5MCAxOTUgMTk1IDE5NSAyMTQgMjE0IDIxNCAyNDIgMjQyIDI0MgotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLSA4MiAgODIgIDgyICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTQgIDE0ICAxNAotIDg2ICA4NiAgODYgIDU0ICA1NCAgNTQgIDIyICAyMiAgMjIgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICA2ICAgNiAgIDYgIDE4ICAxOCAgMTggIDQ2ICA0NiAgNDYgIDkwICA5MCAgOTAKLSA0NiAgNDYgIDQ2ICAxOCAgMTggIDE4ICAgNiAgIDYgICA2IDE4MiAxODIgMTgyCi0yNTMgMjUzIDI1MyAyNDYgMjQ2IDI0NiAyMDYgMjA2IDIwNiAxOTAgMTkwIDE5MAotMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTAKLTIwNiAyMDYgMjA2IDIzMSAyMzEgMjMxIDI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjAyIDIwMiAyMDIgIDE0ICAxNCAgMTQgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNDIgIDQyICA0MiAgODYgIDg2ICA4NiAgNDIgIDQyICA0MiAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMTQgIDE0ICAxNCAgMzggIDM4ICAzOCAgNzQgIDc0ICA3NCAgNjYgIDY2ICA2NgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDkwICA5MCAgOTAgMjUwIDI1MCAyNTAKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzOCAyMzggMjM4IDE5OCAxOTggMTk4Ci0xOTAgMTkwIDE5MCAxOTAgMTkwIDE5MCAxOTUgMTk1IDE5NSAyMjEgMjIxIDIyMQotMjQ2IDI0NiAyNDYgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAgODIgIDgyICA4MiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA3OCAgNzggIDc4ICA3MCAgNzAgIDcwICAzNCAgMzQgIDM0Ci0gMTQgIDE0ICAxNCAgIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSAzNCAgMzQgIDM0ICA2NiAgNjYgIDY2ICA3OCAgNzggIDc4ICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgMTggIDE4ICAxOCAyMTggMjE4IDIxOCAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjQ2IDI0NiAyNDYKLTIyNiAyMjYgMjI2IDIzMSAyMzEgMjMxIDI0NiAyNDYgMjQ2IDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDE3OCAxNzggMTc4ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDE4ICAxOCAgMTggIDkwICA5MCAgOTAgIDYyICA2MiAgNjIKLSAzMCAgMzAgIDMwICAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMCAgMjYgIDI2ICAyNgotIDU4ICA1OCAgNTggIDkwICA5MCAgOTAgIDE4ICAxOCAgMTggICAyICAgMiAgIDYKLSAgMiAgIDIgICA2IDExMCAxMTAgMTEwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUwIDI1MCAyNTAgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgIDE4ICAxOCAgMTggICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTggIDE4ICAxOCAgOTQgIDk0ICA5NAotIDU0ICA1NCAgNTQgIDI2ICAyNiAgMjYgIDEwICAxMCAgMTAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAyMiAgMjIgIDIyICA1MCAgNTAgIDUwCi0gOTAgIDkwICA5MCAgMjYgIDI2ICAyNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDE0ICAxNCAgMTQgMTk1IDE5NSAxOTUgMjUwIDI1MCAyNTAgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTAgMjUwIDI1MCAyNDIgMjQyIDI0MiAgNTQgIDU0ICA1NCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzOCAgMzggIDM4Ci0gODYgIDg2ICA4NiAgNTAgIDUwICA1MCAgMjIgIDIyICAyMiAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICA2ICAgNiAgIDYgIDE0ICAxNCAgMTQgIDM4ICAzOCAgMzggIDgyICA4MiAgODIKLSAzNCAgMzQgIDM0ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNDIgIDQyICA0MiAxOTUgMTk1IDE5NSAyNDYgMjQ2IDI0NiAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAKLTI0MiAyNDIgMjQyIDI0MiAyNDIgMjQyIDI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAgMjQ2IDI0NiAyNDYgMjM4IDIzOCAyMzgKLTIyNiAyMjYgMjI2IDIzMSAyMzEgMjMxIDEwMSAxMDEgMTAxICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAzOCAgMzggIDM4ICA4MiAgODIgIDgyICA0MiAgNDIgIDQyICAxNCAgMTQgIDE0Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gMTAgIDEwICAxMCAgMjYgIDI2ICAyNiAgNjIgIDYyICA2MiAgNjYgIDY2ICA2NgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICA2ICAgNiAgIDYKLSA3MCAgNzAgIDcwIDE3MCAxNzAgMTcwIDIwNiAyMDYgMjA2IDIzNCAyMzQgMjM0Ci0yNDYgMjQ2IDI0NiAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyMzggMjM4IDIzOAotMjI2IDIyNiAyMjYgMjMxIDIzMSAyMzEgMjM4IDIzOCAyMzggMjUwIDI1MCAyNTAKLTI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI0NiAyNDYgMjQ2IDIzMSAyMzEgMjMxCi0yMTQgMjE0IDIxNCAyMDYgMjA2IDIwNiAyMDIgMjAyIDIwMiAyMDIgMjAyIDIwMgotMTk4IDE5OCAxOTggMjAyIDIwMiAyMDIgMTgyIDE4MiAxODIgIDE4ICAxOCAgMTgKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDYyICA2MiAgNjIgIDY2ICA2NiAgNjYgIDMwICAzMCAgMzAKLSAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAxNCAgMTQgIDE0ICA0MiAgNDIgIDQyICA4MiAgODIgIDgyICAxOCAgMTggIDE4Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTAgIDEwICAxMAotIDk0ICA5NCAgOTQgMTgyIDE4MiAxODIgMjE4IDIxOCAyMTggMjQyIDI0MiAyNDIKLTI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwCi0yMzQgMjM0IDIzNCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjQ2IDI0NiAyNDYKLTIzOCAyMzggMjM4IDIyNiAyMjYgMjI2IDIxMCAyMTAgMjEwIDIwMiAyMDIgMjAyCi0xOTUgMTk1IDE5NSAxOTUgMTk1IDE5NSAyMTAgMjEwIDIxMCAxNTggMTU4IDE1OAotICA2ICAgNiAgIDYgIDE0ICAxNCAgMTQgIDUwICA1MCAgNTAgIDE0ICAxNCAgMTQKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDYgICA2ICAgNiAgODYgIDg2ICA4NiAgNDYgIDQ2ICA0NgotIDE4ICAxOCAgMTggICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDIyICAyMiAgMjIgIDU0ICA1NCAgNTQgIDcwICA3MCAgNzAgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAxMCAgMTAgIDEwICAgMiAgIDIgICA2ICAyMiAgMjIgIDIyCi0xNjYgMTY2IDE2NiAyMzEgMjMxIDIzMSAyNTAgMjUwIDI1MCAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAKLTI0MiAyNDIgMjQyIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjQ2IDI0NiAyNDYKLTIzMSAyMzEgMjMxIDIwNiAyMDYgMjA2IDE5OCAxOTggMTk4IDIyNiAyMjYgMjI2Ci0gOTQgIDk0ICA5NCAgIDIgICAyICAgNiAgIDYgICA2ICAgNiAgMzggIDM4ICAzOAotIDMwICAzMCAgMzAgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA2MiAgNjIgIDYyICA2NiAgNjYgIDY2Ci0gMjYgIDI2ICAyNiAgMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwCi0gMzAgIDMwICAzMCAgNzQgIDc0ICA3NCAgNTAgIDUwICA1MCAgIDIgICAyICAgNgotIDI2ICAyNiAgMjYgIDI2ICAyNiAgMjYgICAyICAgMiAgIDYgMTA2IDEwNiAxMDYKLTIzOCAyMzggMjM4IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjQ2IDI0NiAyNDYgMjE4IDIxOCAyMTggMjAyIDIwMiAyMDIKLTIxMCAyMTAgMjEwICAxNCAgMTQgIDE0ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gMzAgIDMwICAzMCAgMjIgIDIyICAyMiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDE4ICAxOCAgMTggIDg2ICA4NiAgODYKLSA0MiAgNDIgIDQyICAxNCAgMTQgIDE0ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDE0ICAxNCAgMTQKLSA0MiAgNDIgIDQyICA5MCAgOTAgIDkwICAyMiAgMjIgIDIyICAgMiAgIDIgICA2Ci0gNDIgIDQyICA0MiAgIDIgICAyICAgNiAgMTggIDE4ICAxOCAyMTggMjE4IDIxOAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTAgMjUwIDI1MCAyMjEgMjIxIDIyMQotMjE4IDIxOCAyMTggMTAxIDEwMSAxMDEgICAyICAgMiAgIDYgIDE0ICAxNCAgMTQKLSAxOCAgMTggIDE4ICAzOCAgMzggIDM4ICAxMCAgMTAgIDEwICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgNzggIDc4ICA3OAotIDU4ICA1OCAgNTggIDIyICAyMiAgMjIgICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMTggIDE4ICAxOAotIDU0ICA1NCAgNTQgIDgyICA4MiAgODIgICAyICAgMiAgIDYgIDI2ICAyNiAgMjYKLSAyMiAgMjIgIDIyICAgMiAgIDIgICA2IDEyMyAxMjMgMTIzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwCi0yMzggMjM4IDIzOCAxOTggMTk4IDE5OCAgIDYgICA2ICAgNiAgMzggIDM4ICAzOAotIDU4ICA1OCAgNTggIDI2ICAyNiAgMjYgIDM4ICAzOCAgMzggICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA0NiAgNDYgIDQ2Ci0gNzggIDc4ICA3OCAgMzAgIDMwICAzMCAgMTAgIDEwICAxMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxMCAgMTAgIDEwICAzMCAgMzAgIDMwCi0gNzQgIDc0ICA3NCAgNTggIDU4ICA1OCAgIDIgICAyICAgNiAgNDIgIDQyICA0MgotICAyICAgMiAgIDYgIDIyICAyMiAgMjIgMjMxIDIzMSAyMzEgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTAgMjUwIDI1MAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI0NiAyNDYgMjQ2ICA0NiAgNDYgIDQ2ICAzOCAgMzggIDM4Ci0gNDIgIDQyICA0MiAgMTQgIDE0ICAxNCAgMzggIDM4ICAzOCAgMTQgIDE0ICAxNAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICA2ICAgNiAgIDYKLSA4NiAgODYgIDg2ICA0NiAgNDYgIDQ2ICAxNCAgMTQgIDE0ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDE0ICAxNCAgMTQgIDQyICA0MiAgNDIKLSA5MCAgOTAgIDkwICAxOCAgMTggIDE4ICAxOCAgMTggIDE4ICAyNiAgMjYgIDI2Ci0gIDIgICAyICAgNiAxMTYgMTE2IDExNiAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwIDIzOCAyMzggMjM4Ci0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgIDk0ICA5NCAgOTQgICA2ICAgNiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAxMCAgMTAgIDEwICAzNCAgMzQgIDM0Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDc0ICA3NCAgNzQgIDU4ICA1OCAgNTggIDIyICAyMiAgMjIgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgMTAgIDEwICAxMCAgMjYgIDI2ICAyNiAgNjYgIDY2ICA2NgotIDgyICA4MiAgODIgICAyICAgMiAgIDYgIDM4ICAzOCAgMzggICA2ICAgNiAgIDYKLSAxNCAgMTQgIDE0IDIxMCAyMTAgMjEwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjQ2IDI0NiAyNDYgMjQyIDI0MiAyNDIKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAxNDQgMTQ0IDE0NCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDQ2ICA0NiAgNDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNDIgIDQyICA0MiAgNzQgIDc0ICA3NCAgMzAgIDMwICAzMCAgMTAgIDEwICAxMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICA0MiAgNDIgIDQyICA5MCAgOTAgIDkwCi0gMjYgIDI2ICAyNiAgIDYgICA2ICAgNiAgNDIgIDQyICA0MiAgIDIgICAyICAgNgotIDc0ICA3NCAgNzQgMjUwIDI1MCAyNTAgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNDIgMjQyIDI0MiAyNDIgMjQyIDI0MgotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDE4MiAxODIgMTgyICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgNDYgIDQ2ICA0NgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAxMCAgMTAgIDEwICA4NiAgODYgIDg2ICAzOCAgMzggIDM4ICAxMCAgMTAgIDEwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDEwICAxMCAgMTAgIDI2ICAyNiAgMjYgIDY2ICA2NiAgNjYgIDgyICA4MiAgODIKLSAgMiAgIDIgICA2ICAyMiAgMjIgIDIyICAxOCAgMTggIDE4ICAgMiAgIDIgICA2Ci0xNDkgMTQ5IDE0OSAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzNCAyMzQgMjM0IDI0MiAyNDIgMjQyCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjA2IDIwNiAyMDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzOCAgMzggIDM4Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgIDg2ICA4NiAgODYgIDQ2ICA0NiAgNDYgIDE0ICAxNCAgMTQKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMTggIDE4ICAxOCAgNDYgIDQ2ICA0NiAgODYgIDg2ICA4NiAgMTggIDE4ICAxOAotICAyICAgMiAgIDYgIDM0ICAzNCAgMzQgIDEwICAxMCAgMTAgICA2ICAgNiAgIDYKLTIxMCAyMTAgMjEwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjM0IDIzNCAyMzQgMjQyIDI0MiAyNDIKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMjEgMjIxIDIyMSAgIDYgICA2ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDMwICAzMCAgMzAKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgODIgIDgyICA4MiAgNTQgIDU0ICA1NCAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAyNiAgMjYgIDI2ICA2NiAgNjYgIDY2ICA2MiAgNjIgIDYyICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgMzggIDM4ICAzOCAgMTAgIDEwICAxMCAgMjYgIDI2ICAyNgotMjM4IDIzOCAyMzggMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAyMzggMjM4IDIzOAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxICAgNiAgIDYgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgMTAgIDEwICAxMCAgMzAgIDMwICAzMAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA2NiAgNjYgIDY2ICA1OCAgNTggIDU4ICAyMiAgMjIgIDIyCi0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDM4ICAzOCAgMzggIDc4ICA3OCAgNzggICA2ICAgNiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA0NiAgNDYgIDQ2ICAxNCAgMTQgIDE0ICA0MiAgNDIgIDQyCi0yNDYgMjQ2IDI0NiAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxIDI0MiAyNDIgMjQyCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjM0IDIzNCAyMzQgIDEwICAxMCAgMTAKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAyMiAgMjIgIDIyICAxNCAgMTQgIDE0Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDY2ICA2NiAgNjYgIDYyICA2MiAgNjIgIDIyICAyMiAgMjIKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxOCAgMTggIDE4Ci0gNTAgIDUwICA1MCAgNzQgIDc0ICA3NCAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDE0ICAxNCAgMTQgIDcwICA3MCAgNzAgIDM0ICAzNCAgMzQgIDYyICA2MiAgNjIKLTI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgMjQ2IDI0NiAyNDYKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzQgMjM0IDIzNCAgMTQgIDE0ICAxNAotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDMwICAzMCAgMzAgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgNjYgIDY2ICA2NiAgNjIgIDYyICA2MiAgMjIgIDIyICAyMgotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDE4ICAxOCAgMTgKLSA1NCAgNTQgIDU0ICA2MiAgNjIgIDYyICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgMzAgIDMwICAzMCAgNDYgIDQ2ICA0NiAgNzAgIDcwICA3MAotMjUwIDI1MCAyNTAgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAyNDYgMjQ2IDI0NgotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIyNiAyMjYgMjI2ICAxMCAgMTAgIDEwCi0gIDIgICAyICAgNiAgIDYgICA2ICAgNiAgMzAgIDMwICAzMCAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICA2NiAgNjYgIDY2ICA1OCAgNTggIDU4ICAyMiAgMjIgIDIyCi0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMjIgIDIyICAyMgotIDU4ICA1OCAgNTggIDYyICA2MiAgNjIgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzMCAgMzAgIDMwICA3OCAgNzggIDc4Ci0yNTAgMjUwIDI1MCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxIDI0NiAyNDYgMjQ2Ci0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjA2IDIwNiAyMDYgICAyICAgMiAgIDYKLSAyMiAgMjIgIDIyICAzNCAgMzQgIDM0ICAxOCAgMTQgICA2ICAyMiAgMjIgIDIyCi0gMjYgIDI2ICAyNiAgMTggIDE4ICAxOCAgIDYgICA2ICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgIDgyICA4MiAgODIgIDU0ICA1NCAgNTQgIDE4ICAxOCAgMTgKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAyNiAgMjYgIDI2Ci0gNjIgIDYyICA2MiAxMDYgMTA2IDEwNiAgNzQgIDU0ICAxNCAxODUgMTMzICAxMQotMjEwIDE2MiAgMTAgMTIxICA5MiAgIDggICA2ICAgNiAgIDYgIDYyICA2MiAgNjIKLTIzOCAyMzggMjM4IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjMxIDIzMSAyMzEgMjQ2IDI0NiAyNDYKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAxNTggMTU4IDE1OCAgMTggIDE4ICAxOAotIDE0ICAxNCAgMTQgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgNiAgIDYgICA2ICAxOCAgMTggIDE4ICA2NiAgNjYgIDY2ICAzOCAgMzggIDM4Ci0gIDYgICA2ICAgNiAgOTQgIDk0ICA5NCAgNTAgIDUwICA1MCAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDE4ICAxOCAgMTggIDM4ICAzOCAgMzgKLSA3OCAgNzggIDc4IDE0MiAxMzQgMTA2IDIxNiAxNTggIDEwIDI0MiAxODYgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAxNTYgMTE4ICAxMCAgMTAgIDEwICAxMAotIDkwICA5MCAgOTAgMjM4IDIzOCAyMzggMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAyNTAgMjUwIDI1MAotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjQ2IDIzMCAxOTAKLTIzOCAyMDQgIDkxIDIzOCAyMDQgIDkxIDE4MSAxNDIgIDQ0ICAzNyAgMjYgICA5Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDM4ICAzOCAgMzggIDQ2ICA0NiAgNDYKLSAyNiAgMjYgIDI2IDEwNiAxMDYgMTA2ICA1NCAgNTQgIDU0ICAxOCAgMTggIDE4Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICAyMiAgMjIgIDIyCi0gMzAgIDMwICAzMCAgMzggIDM4ICAzOCAgNTAgIDUwICA1MCAgNzAgIDcwICA3MAotMTA2IDEwNiAxMDYgMTkwIDE0MiAgMzQgMjI2IDE3MCAgMTEgMjQyIDE4NiAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDE1NCAxMTQgIDEwCi0gIDYgICA2ICAgNiAgNzQgIDc0ICA3NCAyMjYgMjI2IDIyNiAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIzMSAyMzEgMjMxIDI1MCAyNTAgMjUwCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyMjggMTg0ICA2MgotMjQxIDE5NiAgMTQgMjQxIDIwOCAgMTkgMjMyIDE5NSAgMTYgIDM4ICAzMCAgMTAKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDYgICA2ICAgNiAgMzAgIDMwICAzMCAgMjYgIDI2ICAyNgotMjAzIDE2NiAgMTcgMTU0IDE0MiAgOTAgIDY2ICA2NiAgNjYgIDI2ICAyNiAgMjYKLSAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICA2ICAgNiAgIDYgIDE4ICAxOCAgMTggIDM4ICAzOCAgMzggIDU4ICA1OCAgNTgKLSA3OCAgNzggIDc4ICA4NiAgODYgIDg2IDEwMSAxMDEgMTAxIDEyMyAxMjMgMTIzCi0xNzUgMTQ2ICA2MSAyMTAgMTUwICAxMCAyMzQgMTc0ICAxMyAyNDYgMTg2ICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjM4IDE5MCAgMTAKLTEwMiAgNzggIDEwICAgMiAgIDIgICA2ICA0NiAgNDYgIDQ2IDE5OCAxOTggMTk4Ci0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjM0IDIzNCAyMzQgMjQyIDI0MiAyNDIKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDIyNCAxNzggIDYyCi0yNDIgMTg2ICAxNCAyNDEgMTk2ICAxNCAyMTAgMTY2ICAxMCAgMjIgIDE4ICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgNiAgIDYgICA2IDEyMSAgOTIgICA4Ci0yMzggMjAyICAxNSAyMzIgMTk1ICAxNiAgODIgIDgyICA4MiAgMzQgIDM0ICAzNAotIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gMTQgIDE0ICAxNCAgMzggIDM4ICAzOCAgNzAgIDcwICA3MCAxNTQgMTIyICA0NgotMTkwIDE0MiAgMzQgMjAwIDE0NCAgMTEgMTk3IDEzOCAgMTEgMTk3IDEzOCAgMTEKLTIxMyAxNTQgIDExIDIyNiAxNzAgIDExIDI0MiAxODYgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjI1IDE3NSAgMTUgIDQ2ICAzMiAgIDYgICAyICAgMiAgIDYgIDIyICAyMiAgMjIKLTE1OCAxNTggMTU4IDI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUwIDI1MCAyNTAgMjQyIDI0MiAyNDIgMjI0IDE3OCAgNjIKLTIzOSAxODIgIDEzIDIzNiAxODYgIDExIDIxMyAxNTQgIDExICA0NiAgMzIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDYxICA0MiAgIDYgMjI1IDE3NSAgMTUKLTIzOCAxOTAgIDEwIDIzNiAxODYgIDExIDExMiAxMDAgIDc4ICA0MiAgNDIgIDQyCi0gMTQgIDE0ICAxNCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAyMiAgMjIgIDIyICA1NCAgNTQgIDU0IDE1NCAxMjIgIDQ2IDIxMyAxNTQgIDExCi0yMjYgMTcwICAxMSAyMzAgMTc0ICAxMSAyMjYgMTcwICAxMSAyMjYgMTcwICAxMQotMjM2IDE3OCAgMTIgMjQyIDE4NiAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDEgMTk2ICAxNCAxODQgMTQ0ICAxMiAgMTAgIDEwICAxMCAgIDIgICAyICAgNgotICA2ICAgNiAgIDYgMTE2IDExNiAxMTYgMjQyIDI0MiAyNDIgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyMzEgMjMxIDIzMSAxOTggMTk4IDE5OCAyMTQgMTcwICA1NAotMjM2IDE3OCAgMTIgMjM2IDE3OCAgMTIgMjEwIDE1MCAgMTAgMTM3ICA5MiAgIDYKLSAxOCAgMTQgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDYgICA2ICAgNiAgNzAgIDQ3ICAgNiAyMDAgMTQ0ICAxMSAyMzYgMTc4ICAxMgotMjM5IDE4MiAgMTMgMjM5IDE4MiAgMTMgMTI0IDExMiAgODggIDU4ICA1OCAgNTgKLSAyMiAgMjIgIDIyICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDMwICAzMCAgMzAgIDcwICA3MCAgNzAgMTgwIDEzMyAgMzYgMjI2IDE3MCAgMTEKLTIzOSAxODIgIDEzIDI0MiAxODYgIDE0IDI0MiAxODYgIDE0IDI0NiAxODYgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDIzMiAxOTUgIDE2ICA5OCAgNzAgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgNjYgIDY2ICA2NiAyMjEgMjIxIDIyMQotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDIwNiAyMDYgMjA2IDE5OCAxOTggMTk4IDIxNCAxNjYgIDU4Ci0yMzAgMTc0ICAxMSAyMzAgMTc0ICAxMSAyMTYgMTU4ICAxMCAxOTIgMTMzICAgOQotMTYzIDExMCAgIDggMTE2ICA4MSAgIDggMTAyICA3OCAgMTAgMTE2ICA4MSAgIDgKLTE2NyAxMTQgICA3IDE5NyAxMzggIDExIDIyNiAxNzAgIDExIDIzOSAxODIgIDEzCi0yNDIgMTg2ICAxNCAyNDIgMTg2ICAxNCAxNjIgMTQ2ICA5NCAgNzggIDc4ICA3OAotIDM0ICAzNCAgMzQgIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMzAgIDMwICAzMCAgNzggIDc4ICA3OCAxOTAgMTQyICAzNCAyMjYgMTcwICAxMQotMjM5IDE4MiAgMTMgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQxIDE5NiAgMTQgMjAzIDE2NiAgMTcgIDIyICAxOCAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAzOCAgMzggIDM4Ci0yMTggMjE4IDIxOCAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUwIDI1MCAyNTAgMjA2IDIwNiAyMDYgMTk4IDE5OCAxOTggMjAyIDE2MiAgNjkKLTIyNiAxNzAgIDExIDIzNiAxNzggIDEyIDIyNCAxNjYgIDEwIDIxMCAxNTAgIDEwCi0yMDAgMTQ0ICAxMSAxOTcgMTM4ICAxMSAxOTIgMTMzICAgOSAxOTcgMTM4ICAxMQotMjEwIDE1MCAgMTAgMjI2IDE3MCAgMTEgMjQyIDE4NiAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxODYgIDE0IDIyNSAxNzUgIDE1IDEyNCAxMTIgIDg4Ci0gNjIgIDYyICA2MiAgMzAgIDMwICAzMCAgMTQgIDE0ICAxNCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDEwICAxMCAgMTAKLSAzMCAgMzAgIDMwICA3OCAgNzggIDc4IDE3NCAxMzUgIDUwIDIyNCAxNjYgIDEwCi0yMzkgMTgyICAxMyAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDEgMTk2ICAxNCAxMzkgMTAyICAxNQotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSA3OCAgNzggIDc4IDI1MCAyNTAgMjUwIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTAgMjUwIDI1MCAyMTQgMjE0IDIxNCAxOTggMTk4IDE5OCAxOTAgMTUwICA0NgotMjE5IDE2MiAgMTAgMjM2IDE3OCAgMTIgMjM0IDE3NCAgMTMgMjI0IDE2NiAgMTAKLTIxNiAxNTggIDEwIDIxMyAxNTQgIDExIDIxMyAxNTQgIDExIDIxNiAxNTggIDEwCi0yMjYgMTcwICAxMSAyMzkgMTgyICAxMyAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQyIDE4NiAgMTQgMjA2IDE2MiAgNDIKLTEwMSAxMDEgMTAxICA1OCAgNTggIDU4ICAzMCAgMzAgIDMwICAxNCAgMTQgIDE0Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDMwICAzMCAgMzAgIDc0ICA3NCAgNzQgMTc0IDEzNSAgNTAgMjE2IDE1OCAgMTAKLTIzNiAxNzggIDEyIDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0MSAxOTYgIDE0IDIyNiAxODQgIDEzCi0gNjEgIDQyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDIyICAyMiAgMjIgMjM4IDIzOCAyMzggMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDIyNiAyMjYgMjI2IDE4NyAxODcgMTg3IDE4MCAxMzMgIDM2Ci0yMTYgMTU4ICAxMCAyMzYgMTc4ICAxMiAyMzkgMTgyICAxMyAyMzYgMTc4ICAxMgotMjMwIDE3NCAgMTEgMjI2IDE3MCAgMTEgMjI2IDE3MCAgMTEgMjMwIDE3NCAgMTEKLTIzNiAxNzggIDEyIDI0MiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTg2ICAxNCAyMzkgMTgyICAxMwotMjA2IDE2MiAgNDIgMTA2IDEwNiAxMDYgIDY2ICA2NiAgNjYgIDM0ICAzNCAgMzQKLSAxNCAgMTQgIDE0ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMjYgIDI2ICAyNiAgNzAgIDcwICA3MCAxNjMgMTMzICA2NyAyMTMgMTU0ICAxMQotMjM2IDE3OCAgMTIgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQxIDE5NiAgMTQKLTE5MCAxNDYgIDEzICAxOCAgMTQgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gNDYgIDQ2ICA0NiAyNDYgMjQ2IDI0NiAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjIxIDIyMSAyMjEgIDg2ICA4NiAgODYgMTU2IDEwNyAgMTEKLTIxNiAxNTggIDEwIDIzNiAxNzggIDEyIDI0MiAxODYgIDE0IDI0NiAxODYgIDE0Ci0yNDIgMTg2ICAxNCAyMzkgMTgyICAxMyAyMzkgMTgyICAxMyAyNDIgMTg2ICAxNAotMjQyIDE4NiAgMTQgMjQ2IDE4NiAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDIgMTg2ICAxNCAyMjUgMTc1ICAxNSAxNDIgMTIyICA3MiAgNjYgIDY2ICA2NgotIDMwICAzMCAgMzAgIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAyNiAgMjYgIDI2ICA3MCAgNzAgIDcwIDE2MyAxMzMgIDY3IDIxMCAxNTAgIDEwCi0yMzYgMTc4ICAxMiAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjMyIDE5NSAgMTYgMTIxICA5MiAgIDggIDM0ICAzNCAgMzQgMTA2IDEwNiAxMDYKLTIyMSAyMjEgMjIxIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNDIgMjQyIDI0MiAgODIgIDgyICA4MiAgMTggIDE0ICAgNiAxNjMgMTEwICAgOAotMjE2IDE1OCAgMTAgMjM2IDE3OCAgMTIgMjQyIDE4NiAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0MiAxODYgIDE0IDE2MyAxMzMgIDY3Ci0gNDYgIDQ2ICA0NiAgMTggIDE4ICAxOCAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTAgIDEwICAxMAotIDMwICAzMCAgMzAgIDc4ICA3OCAgNzggMTYzIDEzMyAgNjcgMjEwIDE1MCAgMTAKLTIzNiAxNzggIDEyIDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDEgMTk2ICAxNCAyMTUgMTc0ICAxNSAxOTAgMTc4IDE0NCAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjE4IDIxOCAyMTgKLSA1OCAgNTggIDU4ICAgMiAgIDIgICA2ICAyMiAgMTggICA2IDE2NyAxMTQgICA3Ci0yMTYgMTU4ICAxMCAyMzYgMTc4ICAxMiAyNDYgMTg2ICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE4NiAgMTQgMjQyIDE4NiAgMTQgMTkwIDE1MCAgNDYKLSA1NCAgNTQgIDU0ICAyMiAgMjIgIDIyICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAxNCAgMTQgIDE0Ci0gMzggIDM4ICAzOCAgODYgIDg2ICA4NiAxODAgMTMzICAzNiAyMTMgMTU0ICAxMQotMjM2IDE3OCAgMTIgMjQ2IDE4NiAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDIzMiAxOTUgIDE2IDE5MCAxNDYgIDEzIDIxNCAyMTQgMjE0Ci0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTAgMjUwIDI1MCAxNzAgMTcwIDE3MCAgMjYgIDI2ICAyNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgIDM3ICAyNiAgIDkgMTYzIDExMCAgIDgKLTIxOSAxNjIgIDEwIDIzOSAxODIgIDEzIDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTg2ICAxNCAyMzYgMTc4ICAxMiAyMjQgMTY2ICAxMCAxNDIgMTIyICA3MgotIDQ2ICA0NiAgNDYgIDE4ICAxOCAgMTggICA2ICAgNiAgIDYgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDE4ICAxOCAgMTgKLSA1MCAgNTAgIDUwIDEwOSAxMDYgIDk1IDE5MiAxMzMgICA5IDIyNCAxNjYgIDEwCi0yNDIgMTg2ICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQyIDE4NiAgMTQgMjI2IDE4NCAgMTMgMjEwIDE2MiAgMTAgMTQyIDExMCAgNDYKLTIyNiAyMjYgMjI2IDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzCi0yNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MwotMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMKLTE5OCAxOTggMTk4ICA2NiAgNjYgIDY2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgNTAgIDM0ICAgNiAxNTYgMTA3ICAxMQotMjE5IDE2MiAgMTAgMjM5IDE4MiAgMTMgMjQ2IDE4NiAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQyIDE4NiAgMTQKLTIzNCAxNzQgIDEzIDIxMyAxNTQgIDExIDE1NCAxMjIgIDQ2ICA2NiAgNjYgIDY2Ci0gMzAgIDMwICAzMCAgMTAgIDEwICAxMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNiAgMjIgIDIyICAyMgotIDU4ICA1OCAgNTggMTU0IDEyMSAgNjAgMjA2IDE0NSAgMTAgMjM0IDE3NCAgMTMKLTI0MiAxODYgIDE0IDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTg2ICAxNCAyMzYgMTc4ICAxMiAyMTAgMTYyICAxMCAxNjMgMTEwICAgOAotIDYxICA0MiAgIDYgMTM4IDEzOCAxMzggMjE4IDIxOCAyMTggMjUwIDI1MCAyNTAKLTI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MyAyNTMgMjUzIDI1MCAyNTAgMjUwCi0yNDIgMjQyIDI0MiAyMTAgMjEwIDIxMCAxNDQgMTQ0IDE0NCAgNjYgIDY2ICA2NgotICA2ICAgNiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICA2MSAgNDIgICA2IDE2MyAxMTAgICA4Ci0yMTYgMTU4ICAxMCAyMzYgMTc4ICAxMiAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyMzkgMTgyICAxMyAyMzAgMTc0ICAxMSAyMTYgMTU4ICAxMAotMTkwIDE0MiAgMzQgMTI0IDExMiAgODggIDcwICA3MCAgNzAgIDM4ICAzOCAgMzgKLSAxOCAgMTggIDE4ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAyMiAgMjIgIDIyCi0gNjIgIDYyICA2MiAxNjggMTI0ICA0NCAyMDYgMTQ1ICAxMCAyMjQgMTY2ICAxMAotMjM2IDE3OCAgMTIgMjM5IDE4MiAgMTMgMjQyIDE4NiAgMTQgMjQyIDE4NiAgMTQKLTI0NiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDIzNiAxNzggIDEyIDIxNiAxNTggIDEwIDE3NSAxMTggICA2Ci0gODAgIDU0ICAgNyAgIDIgICAyICAgNiAgIDYgICA2ICAgNiAgMzAgIDMwICAzMAotIDU0ICA1NCAgNTQgIDYyICA2MiAgNjIgIDUwICA1MCAgNTAgIDM4ICAzOCAgMzgKLSAxNCAgMTQgIDE0ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDgwICA1NCAgIDcgMTY3IDExNCAgIDcKLTIxMyAxNTQgIDExIDIzNiAxNzggIDEyIDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE5MCAgMTQgMjQyIDE4NiAgMTQgMjM5IDE4MiAgMTMgMjM5IDE4MiAgMTMKLTIzMCAxNzQgIDExIDIxMCAxNTAgIDEwIDE3NCAxMzUgIDUwIDEyNCAxMTIgIDg4Ci0gODIgIDgyICA4MiAgNTQgIDU0ICA1NCAgMzQgIDM0ICAzNCAgMTggIDE4ICAxOAotICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDE4ICAxOCAgMTgKLSA1MCAgNTAgIDUwIDE1OCAxMTggIDM2IDE5MiAxMzMgICA5IDIwMCAxNDQgIDExCi0yMTYgMTU4ICAxMCAyMTkgMTYyICAxMCAyMjQgMTY2ICAxMCAyMjYgMTcwICAxMQotMjMwIDE3NCAgMTEgMjM2IDE3OCAgMTIgMjM5IDE4MiAgMTMgMjM5IDE4MiAgMTMKLTI0MiAxODYgIDE0IDI0NiAxODYgIDE0IDI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0Ci0yNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNCAyNDYgMTkwICAxNAotMjQ2IDE4NiAgMTQgMjMwIDE3NCAgMTEgMjEwIDE1MCAgMTAgMTYzIDExMCAgIDgKLTEwNCAgNjkgICA2ICAxMCAgMTAgIDEwICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDYgICA2ICAgNiAgOTEgIDYwICAgNiAxNjcgMTE0ICAgNwotMjA2IDE0NSAgMTAgMjMwIDE3NCAgMTEgMjQyIDE4NiAgMTQgMjQ2IDE5MCAgMTQKLTI0NiAxOTAgIDE0IDI0NiAxOTAgIDE0IDI0NiAxODYgIDE0IDI0MiAxODYgIDE0Ci0yMzkgMTgyICAxMyAyMzAgMTc0ICAxMSAyMjQgMTY2ICAxMCAyMTMgMTU0ICAxMQotMTgwIDEzMyAgMzYgMTI0IDExMiAgODggIDg2ICA4NiAgODYgIDU4ICA1OCAgNTgKLSAzOCAgMzggIDM4ICAyMiAgMjIgIDIyICAxMCAgMTAgIDEwICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgMTQgIDE0ICAxNAotIDM0ICAzNCAgMzQgIDcwICA3MCAgNzAgMTM4IDExMCAgNTAgMTU4IDExOCAgMzYKLTE2NyAxMTQgICA3IDE4MCAxMjMgICA3IDE5MiAxMzMgICA5IDE5NyAxMzggIDExCi0yMDAgMTQ0ICAxMSAyMDYgMTQ1ICAxMCAyMTMgMTU0ICAxMSAyMTkgMTYyICAxMAotMjI0IDE2NiAgMTAgMjMwIDE3NCAgMTEgMjM5IDE4MiAgMTMgMjQyIDE4NiAgMTQKLTI0NiAxODYgIDE0IDI0NiAxODYgIDE0IDI0NiAxODYgIDE0IDI0NiAxODYgIDE0Ci0yMzkgMTgyICAxMyAyMTYgMTU4ICAxMCAxODUgMTMzICAxMSAxNTIgIDk5ICAgNgotMTA0ICA2OSAgIDYgIDE4ICAxNCAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2ICAgMiAgIDIgICA2Ci0gIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYgICAyICAgMiAgIDYKLSAgMiAgIDIgICA2ICAgNiAgIDYgICA2ICA4MCAgNTQgICA3IDE1MiAgOTkgICA2Ci0xOTIgMTMzICAgOSAyMTkgMTYyICAxMCAyMzYgMTc4ICAxMiAyMzkgMTgyICAxMwotMjQ2IDE4NiAgMTQgMjQyIDE4NiAgMTQgMjM5IDE4MiAgMTMgMjM2IDE3OCAgMTIKLTIyNCAxNjYgIDEwIDIwNiAxNDUgIDEwIDE5MiAxMzMgICA5IDE1NCAxMjEgIDYwCi0gOTQgIDk0ICA5NCAgNjIgIDYyICA2MiAgNDIgIDQyICA0MiAgMjIgIDIyICAyMgotIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgNiAgIDYgICA2Ci0gMTggIDE4ICAxOCAgMzQgIDM0ICAzNCAgNTggIDU4ICA1OCAgNzggIDc4ICA3OAotMTAxICA5OCAgODkgMTI0IDExMiAgODggMTQyIDExMCAgNDYgMTU2IDEwNyAgMTEKLTE2MyAxMTAgICA4IDE2NyAxMTQgICA3IDE3NSAxMTggICA2IDE4MCAxMjMgICA3Ci0xODUgMTMzICAxMSAxOTcgMTM4ICAxMSAyMTAgMTUwICAxMCAyMTkgMTYyICAxMAotMjI2IDE3MCAgMTEgMjM2IDE3OCAgMTIgMjM2IDE3OCAgMTIgMjM0IDE3NCAgMTMKLTIxOSAxNjIgIDEwIDE5NyAxMzggIDExIDE2MyAxMTAgICA4IDEzMCAgODMgICA2Ci0gOTEgIDYwICAgNiAgMTAgIDEwICAxMCAgIDIgICAyICAgNiAgIDIgICAyICAgNgotIDE4ICAxOCAgMTggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzgKLSAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMzggIDM4Ci0gMzggIDM4ICAzOCAgMzggIDM4ICAzOCAgMjYgIDI2ICAyNiAgIDIgICAyICAgNgotICAyICAgMiAgIDYgICA2ICAgNiAgIDYgIDcwICA0NyAgIDYgMTM3ICA5MiAgIDYKLTE3NSAxMTggICA2IDIwMCAxNDQgIDExIDIxOSAxNjIgIDEwIDIzMCAxNzQgIDExCi0yMzQgMTc0ICAxMyAyMzAgMTc0ICAxMSAyMTkgMTYyICAxMCAyMTAgMTUwICAxMAotMTkyIDEzMyAgIDkgMTYzIDExMCAgIDggMTI0IDExMiAgODggIDgyICA4MiAgODIKLSA1MCAgNTAgIDUwICAzMCAgMzAgIDMwICAxNCAgMTQgIDE0ICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICAyMiAgMjIgIDIyICAzNCAgMzQgIDM0Ci0gNDIgIDQyICA0MiAgNTggIDU4ICA1OCAgNzQgIDc0ICA3NCAgODYgIDg2ICA4NgotMTAxICA5OCAgODkgMTIyIDEwMiAgNzAgMTMwICA5OCAgNDYgMTIxICA4NyAgMjUKLTEzNyAgOTIgICA2IDE1MiAgOTkgICA2IDE2MyAxMTAgICA4IDE4MCAxMjMgICA3Ci0xODUgMTMzICAxMSAxOTcgMTM4ICAxMSAyMDYgMTQ1ICAxMCAyMDAgMTQ0ICAxMQotMTgwIDEyMyAgIDcgMTU2IDEwNyAgMTEgMTMwICA4MyAgIDYgMTA0ICA2OSAgIDYKLSA1MCAgMzQgICA2ICA1NCAgNTQgIDU0IDExMCAxMTAgMTEwIDEwMSAgOTggIDg5Ci0gODYgIDg2ICA4NiAgODIgIDgyICA4MiAgNzggIDc4ICA3OCAgNzggIDc4ICA3OAotIDc4ICA3OCAgNzggIDc4ICA3OCAgNzggIDc4ICA3OCAgNzggIDc4ICA3OCAgNzgKLSA3OCAgNzggIDc4ICA4MiAgODIgIDgyICA4NiAgODYgIDg2ICA5NCAgOTQgIDk0Ci0xMDYgMTA2IDEwNiAxMDEgMTAxIDEwMSAgODYgIDY2ICAzNCAxMjQgIDgwICAgNgotMTU2IDEwNyAgMTEgMTgwIDEyMyAgIDcgMTkyIDEzMyAgIDkgMjAwIDE0NCAgMTEKLTIwNiAxNDUgIDEwIDIwMCAxNDQgIDExIDE5MiAxMzMgICA5IDE3NSAxMTggICA2Ci0xMzkgMTAyICAxNSAxMDkgMTA2ICA5NSAgNzAgIDcwICA3MCAgNDIgIDQyICA0MgotIDIyICAyMiAgMjIgIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDEwICAxMCAgMTAKLSAxNCAgMTQgIDE0ICAyMiAgMjIgIDIyICAzMCAgMzAgIDMwICAzOCAgMzggIDM4Ci0gNTAgIDUwICA1MCAgNjIgIDYyICA2MiAgNzQgIDc0ICA3NCAgOTAgIDkwICA5MAotMTAxICA5OCAgODkgMTEyIDEwMCAgNzggMTIxICA4NyAgMjUgMTI0ICA4MCAgIDYKLTEzNyAgOTIgICA2IDE1MiAgOTkgICA2IDE1MiAgOTkgICA2IDE1MiAgOTkgICA2Ci0xMzggIDg2ICAgNiAxMjQgIDgwICAgNiAgOTggIDcwICAgNiAgODYgIDY2ICAzMAotMTAxICA5OCAgODkgIDgyICA4MiAgODIgIDU4ICA1OCAgNTggIDQ2ICA0NiAgNDYKLSAzOCAgMzggIDM4ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0Ci0gMzQgIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM0ICAzNAotIDM0ICAzNCAgMzQgIDM0ICAzNCAgMzQgIDM4ICAzOCAgMzggIDQyICA0MiAgNDIKLSA1NCAgNTQgIDU0ICA4MiAgODIgIDgyICA5NCAgODYgIDc2ICA5MSAgNjAgICA2Ci0xMzQgIDg2ICAgNiAxNTYgMTA3ICAxMSAxNjcgMTE0ICAgNyAxNzUgMTE4ICAgNgotMTc1IDExOCAgIDYgMTY3IDExNCAgIDcgMTUyICA5OSAgIDYgMTIxICA4NyAgMjUKLTEwMSAgOTggIDg5ICA2MiAgNjIgIDYyICAzNCAgMzQgIDM0ICAxOCAgMTggIDE4Ci0gIDYgICA2ICAgNiAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICA2ICAgNiAgIDYgICA2ICAgNiAgIDYgIDEwICAxMCAgMTAKLSAxOCAgMTggIDE4ICAyMiAgMjIgIDIyICAzMCAgMzAgIDMwICA0MiAgNDIgIDQyCi0gNTAgIDUwICA1MCAgNjYgIDY2ICA2NiAgODYgIDg2ICA4NiAxMDEgIDk4ICA4OQotMTA2ICA4NiAgNTggIDk4ICA3MCAgIDYgMTA0ICA2OSAgIDYgMTA0ICA2OSAgIDYKLTEwNCAgNjkgICA2ICA5MSAgNjAgICA2ICA4MiAgNjIgIDM0ICA5MCAgOTAgIDkwCi0gNjIgIDYyICA2MiAgMzggIDM4ICAzOCAgMjIgIDIyICAyMiAgMTQgIDE0ICAxNAotIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTAKLSAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAgNiAgIDYgICA2ICAxMCAgMTAgIDEwCi0gMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTAgIDEwICAxMCAgMTQgIDE0ICAxNAotIDIyICAyMiAgMjIgIDQyICA0MiAgNDIgIDcwICA3MCAgNzAgIDg5ICA4MSAgNjYKLSA4MCAgNTQgICA3IDEwNCAgNjkgICA2IDEyNCAgODAgICA2IDEzNyAgOTIgICA2Ci0xMzQgIDg2ICAgNiAxMTYgIDgxICAgOCAxMDAgIDgyICA1MiAgODYgIDg2ICA4NgotIDU4ICA1OCAgNTggIDMwICAzMCAgMzAgIDE0ICAxNCAgMTQgICA2ICAgNiAgIDYKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICA2ICAgNiAgIDYgIDEwICAxMCAgMTAgIDE0ICAxNCAgMTQKLSAxOCAgMTggIDE4ICAyNiAgMjYgIDI2ICAzOCAgMzggIDM4ICA1NCAgNTQgIDU0Ci0gNzAgIDcwICA3MCAgODYgIDg2ICA4NiAgOTQgIDg2ICA3NiAgODkgIDgxICA2NgotIDg5ICA4MSAgNjYgIDg2ICA4NiAgODYgIDc0ICA3NCAgNzQgIDUwICA1MCAgNTAKLSAzMCAgMzAgIDMwICAxNCAgMTQgIDE0ICAgNiAgIDYgICA2ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDYgICA2ICAgNiAgMTggIDE4ICAxOCAgMzQgIDM0ICAzNCAgNTggIDU4ICA1OAotIDgyICA4MiAgODIgIDg5ICA4MSAgNjYgIDg5ICA4MSAgNjYgIDg5ICA4MSAgNjYKLSA5NCAgODYgIDY2ICA5NCAgODYgIDc2ICA3NCAgNzQgIDc0ICA1MCAgNTAgIDUwCi0gMjYgIDI2ICAyNiAgMTQgIDE0ICAxNCAgIDYgICA2ICAgNiAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICA2ICAgNiAgIDYgICA2ICAgNiAgIDYgIDE0ICAxNCAgMTQgIDE4ICAxOCAgMTgKLSAzMCAgMzAgIDMwICAzOCAgMzggIDM4ICA0NiAgNDYgIDQ2ICA1NCAgNTQgIDU0Ci0gNTAgIDUwICA1MCAgNDIgIDQyICA0MiAgMzAgIDMwICAzMCAgMTggIDE4ICAxOAotIDEwICAxMCAgMTAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgNiAgIDYgICA2ICAxNCAgMTQgIDE0ICAyNiAgMjYgIDI2Ci0gMzggIDM4ICAzOCAgNTAgIDUwICA1MCAgNTggIDU4ICA1OCAgNTggIDU4ICA1OAotIDU0ICA1NCAgNTQgIDQyICA0MiAgNDIgIDMwICAzMCAgMzAgIDE4ICAxOCAgMTgKLSAxMCAgMTAgIDEwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDYgICA2ICAgNgotICA2ICAgNiAgIDYgIDEwICAxMCAgMTAgIDE0ICAxNCAgMTQgIDE4ICAxOCAgMTgKLSAxOCAgMTggIDE4ICAxNCAgMTQgIDE0ICAxMCAgMTAgIDEwICAgNiAgIDYgICA2Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICA2ICAgNiAgIDYKLSAxNCAgMTQgIDE0ICAxOCAgMTggIDE4ICAyMiAgMjIgIDIyICAyMiAgMjIgIDIyCi0gMTggIDE4ICAxOCAgMTQgIDE0ICAxNCAgMTAgIDEwICAxMCAgIDYgICA2ICAgNgotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDMgNCA0ICA2IDcgNworOCAxMCAxMCAgOCAxMCAxMCAgNiA4IDggIDYgNyA3ICAzIDQgNCAgMiAyIDIKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNCA1IDUgIDE3IDE4IDE3CisyNyAyOSAyOCAgMzUgMzcgMzYgIDQwIDQzIDQxICA0MyA0NSA0MyAgNDAgNDMgNDEgIDM3IDM5IDM3CiszMiAzNCAzMyAgMjcgMzAgMjkgIDIzIDI1IDI0ICAxNyAyMSAyMSAgMTUgMTggMTggIDEyIDE1IDE1CisxMSAxMyAxMyAgOCAxMCAxMCAgNiA3IDcgIDMgNCA0ICAxIDEgMSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMTMgMTMgMTMgIDMyIDM0IDMzICA0OSA1MSA0OCAgNjAgNjAgNTYgIDU4IDU5IDU1Cis1NSA1NyA1NCAgNTUgNTYgNTMgIDQ5IDUxIDQ4ICA0MyA0NSA0MyAgMzkgNDAgMzkgIDMzIDM3IDM1CisyOCAzMSAzMCAgMjMgMjcgMjYgIDIwIDIzIDIzICAxNyAyMCAyMCAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMSAxNCAxNCAgMTAgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA2IDcgNworMiAzIDMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA2IDcgNyAgMTIgMTUgMTUKKzEyIDE1IDE1ICA4IDkgOSAgMiAzIDMgIDAgMCAwICAxIDEgMSAgMjUgMjcgMjYKKzU1IDU2IDUzICA2OCA3MCA2NSAgNjUgNjYgNjEgIDY1IDY2IDYxICA2MyA2NCA2MCAgNjMgNjQgNjAKKzU4IDU5IDU1ICA1MSA1MiA1MCAgNDcgNDggNDYgIDQxIDQyIDQyICAzNSAzNyAzNiAgMzAgMzIgMzEKKzI2IDI4IDI3ICAyMCAyNCAyNCAgMTggMjIgMjIgIDE2IDE5IDE5ICAxNCAxNyAxNyAgMTMgMTYgMTYKKzEyIDE1IDE1ICAxMSAxNCAxNCAgMTAgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwCis4IDkgOSAgNiA4IDggIDMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNiA3IDcgIDIwIDI0IDI0ICAyMyAyNyAyNgorMjMgMjcgMjYgIDE4IDIyIDIyICAxMSAxMyAxMyAgMjMgMjQgMjQgIDYxIDYzIDU3ICA3MiA3MyA2NworNzIgNzMgNjcgIDY4IDcwIDY1ICA2OCA3MCA2NSAgNjggNzAgNjUgIDYzIDY0IDYwICA1OCA1OSA1NQorNTUgNTYgNTMgIDQ3IDQ4IDQ2ICA0MSA0MiA0MiAgMzUgMzcgMzYgIDMwIDMyIDMxICAyNiAyOCAyNworMjAgMjQgMjQgIDE4IDIyIDIyICAxNiAyMCAyMCAgMTUgMTkgMTkgIDE0IDE3IDE3ICAxMyAxNiAxNgorMTIgMTUgMTUgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTAgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExCis4IDEwIDEwICA4IDkgOSAgNyA5IDkgIDYgNyA3ICAxIDIgMiAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMSAxIDEgIDQgNSA1ICA1IDYgNSAgNCA1IDUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxNSAxOSAxOSAgNDAgNDEgMzkgIDUzIDU1IDQ3CiszMyAzNiAzNCAgMjcgMzAgMjkgIDUxIDUyIDUwICA3MiA3MyA2NyAgNzIgNzMgNjcgIDcyIDczIDY3Cis3MiA3MyA2NyAgNjggNzAgNjUgIDY4IDcwIDY1ICA2MyA2NCA2MCAgNTggNTkgNTUgIDUxIDUyIDUwCis0NyA0OCA0NiAgNDAgNDMgNDEgIDMzIDM3IDM1ICAzMCAzMiAzMSAgMjYgMjggMjcgIDIwIDI0IDI0CisxOCAyMiAyMiAgMTcgMjEgMjEgIDE2IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE3IDE3CisxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTAgMTMgMTMgIDEwIDEyIDEyCis5IDExIDExICA4IDEwIDEwICA4IDkgOSAgNyA5IDkgIDYgOCA4ICAzIDQgNAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMiAyIDIgIDYgOCA4ICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMgorNiA4IDggIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDIwIDIzIDIzICA3MSA3MSA1NyAgMTMxIDEyNyA5MworMTE1IDExMyA4MiAgNjMgNjQgNjAgIDcyIDczIDY3ICA3MiA3MyA2NyAgNzIgNzMgNjcgIDcyIDczIDY3Cis2OCA3MCA2NSAgNjUgNjYgNjEgIDYxIDYzIDU3ICA1NSA1NyA1NCAgNDkgNTEgNDggIDQzIDQ1IDQzCiszOSA0MCAzOSAgMzMgMzYgMzQgIDI4IDMxIDMwICAyMyAyNyAyNiAgMjAgMjQgMjQgIDIwIDIzIDIzCisxNyAyMSAyMSAgMTYgMjAgMjAgIDE1IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTggMTggIDE0IDE3IDE3CisxMyAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzCisxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgNyA5IDkgIDcgOSA5ICA2IDggOAorNCA1IDUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxICA2IDcgNworMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMgorMTAgMTIgMTIgIDMgNCA0ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE4IDIyIDIyICA3MSA3MSA1NyAgMTQ0IDEzOSA5OQorODQgODMgNzIgIDY4IDcwIDY1ICA3MiA3MyA2NyAgNzIgNzMgNjcgIDY4IDcwIDY1ICA2NSA2NiA2MQorNjMgNjQgNjAgIDU1IDU3IDU0ICA1MSA1MiA1MCAgNDcgNDggNDYgIDQwIDQzIDQxICAzNSAzNyAzNgorMzAgMzIgMzEgIDI3IDI5IDI4ICAyMyAyNyAyNiAgMjAgMjQgMjQgIDE4IDIyIDIyICAxNyAyMSAyMQorMTYgMjAgMjAgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxOCAxOAorMTQgMTcgMTcgIDEzIDE3IDE3ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMSAxNCAxNAorMTAgMTMgMTMgIDkgMTIgMTIgIDkgMTEgMTEgIDggMTAgMTAgIDcgOSA5ICA2IDggOAorNiA4IDggIDMgNCA0ICAwIDAgMCAgMiAyIDIgIDggMTAgMTAgIDEwIDEyIDEyCisxMCAxMiAxMiAgMTAgMTIgMTIgIDExIDEzIDEzICAzNiAzOCAzNSAgNjEgNjEgNTMgIDQ4IDQ5IDQ1CisxMCAxMiAxMiAgNyA5IDkgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTUgMTkgMTkgIDYxIDYxIDUzICA4NCA4MyA3MgorNjggNzAgNjUgIDcyIDczIDY3ICA2OCA3MCA2NSAgNjggNzAgNjUgIDYzIDY0IDYwICA1OCA1OSA1NQorNTEgNTIgNTAgIDQ3IDQ4IDQ2ICA0MSA0MiA0MiAgMzcgMzkgMzcgIDMyIDM1IDMzICAyOCAzMSAzMAorMjMgMjcgMjYgIDIwIDI0IDI0ICAyMCAyMyAyMyAgMTggMjIgMjIgIDE3IDIxIDIxICAxNyAyMSAyMQorMTcgMjEgMjEgIDE3IDIxIDIxICAxNyAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAxOSAxOQorMTUgMTggMTggIDE0IDE4IDE4ICAxMyAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNQorMTEgMTQgMTQgIDEwIDEzIDEzICA5IDEyIDEyICA5IDExIDExICA4IDEwIDEwICA3IDkgOQorNiA4IDggIDYgOCA4ICA1IDYgNSAgOSAxMSAxMSAgMTAgMTIgMTIgIDEwIDEyIDEyCisxOSAyMCAxOCAgODIgODEgNjIgIDE0OSAxNDUgMTAzICAxNjAgMTU0IDEwNiAgMTQyIDEzNyA5NCAgOTYgOTUgNjkKKzEwIDEyIDEyICAxMCAxMiAxMiAgMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxMCAxMiAxMiAgNDQgNDYgNDMgIDY4IDcwIDY1Cis3MiA3MyA2NyAgNjggNzAgNjUgIDY4IDcwIDY1ICA2MyA2NCA2MCAgNTUgNTcgNTQgIDQ5IDUxIDQ4Cis0MyA0NSA0MyAgMzkgNDAgMzkgIDMzIDM3IDM1ICAzMCAzMiAzMSAgMjYgMjggMjcgIDIzIDI3IDI2CisyMCAyNCAyNCAgMTggMjIgMjIgIDE4IDIyIDIyICAxOCAyMiAyMiAgMTggMjIgMjIgIDIwIDIzIDIzCisyMCAyNCAyNCAgMjMgMjUgMjQgIDIzIDI1IDI0ICAyMiAyNCAyMyAgMjAgMjMgMjMgIDE4IDIyIDIyCisxNyAyMCAyMCAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1CisxMSAxNCAxNCAgMTEgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA4IDkgOQorNyA5IDkgIDcgOSA5ICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICA3MSA3MSA1NworMTY0IDE1OSAxMTEgIDE4NiAxODIgMTI4ICAxODYgMTgyIDEyOCAgMTcxIDE2NSAxMTcgIDE1MSAxNDcgOTggIDk2IDk1IDY5CisxMCAxMiAxMiAgMTAgMTIgMTIgIDMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgOCAxMCAxMCAgNjMgNjQgNjAgIDY4IDcwIDY1Cis3MiA3MyA2NyAgNjggNzAgNjUgIDYzIDY0IDYwICA1NSA1NyA1NCAgNDcgNDggNDYgIDQwIDQzIDQxCiszMyAzNyAzNSAgMzAgMzIgMzEgIDI3IDI5IDI4ICAyMyAyNyAyNiAgMjAgMjQgMjQgIDIwIDIzIDIzCisxOCAyMiAyMiAgMTggMjIgMjIgIDIwIDIzIDIyICAyMSAyNSAyMyAgMjMgMjcgMjYgIDI3IDI5IDI4CisyOCAzMSAzMCAgMzEgMzMgMzEgIDMxIDMzIDMxICAzMSAzMyAzMSAgMjggMzEgMzAgIDI2IDI4IDI3CisyMyAyNSAyNCAgMjAgMjMgMjIgIDE2IDIwIDIwICAxNSAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMAorMTAgMTIgMTIgIDEwIDEzIDEzICAxMCAxMiAxMiAgMTIgMTQgMTQgIDk2IDk1IDY5ICAxNjUgMTYxIDEwOQorMTg2IDE4MiAxMjggIDE5MiAxODcgMTM0ICAxOTIgMTg3IDEzNCAgMTc2IDE3MSAxMjYgIDE2MCAxNTQgMTA2ICAxMDMgMTAxIDc3CisxMCAxMiAxMiAgMTAgMTIgMTIgIDUgNiA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMzUgMzcgMzYgIDY4IDcwIDY1ICA3MiA3MyA2NworNjggNzAgNjUgIDY1IDY2IDYxICA1OCA1OSA1NSAgNDkgNTEgNDggIDQwIDQzIDQxICAzMyAzNyAzNQorMjggMzEgMzAgIDIzIDI3IDI2ICAyMCAyNCAyNCAgMjAgMjMgMjMgIDE4IDIyIDIyICAxOCAyMiAyMgorMTggMjIgMjIgIDIwIDIzIDIzICAyMyAyNyAyNiAgMjcgMzAgMjkgIDMyIDM1IDMzICAzNyAzOSAzNworNDAgNDMgNDEgIDQ0IDQ2IDQzICA0NiA0NyA0MyAgNDQgNDYgNDMgIDQwIDQzIDQxICAzNiAzOCAzNQorMzEgMzMgMzEgIDI3IDI5IDI4ICAyMiAyNCAyMyAgMTcgMjEgMjEgIDE1IDE4IDE4ICAxNCAxNyAxNworMTMgMTYgMTYgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDEzIDEzICAxMyAxNiAxNgorMTMgMTYgMTYgIDExIDE0IDE0ICAxMCAxMiAxMiAgNzkgNzggNjIgIDE0MiAxMzcgOTQgIDE2NCAxNTkgMTExCisxNzggMTc0IDEyOCAgMTkyIDE4NyAxMzQgIDE5MiAxODcgMTM0ICAxNzYgMTcxIDEyNiAgMTYwIDE1NCAxMDYgIDk2IDk1IDY5CisxMCAxMiAxMiAgMTAgMTIgMTIgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNTUgNTcgNTQgIDY4IDcwIDY1ICA3MiA3MyA2NworNjggNzAgNjUgIDYzIDY0IDYwICA1NSA1NiA1MyAgNDMgNDUgNDMgIDM1IDM3IDM2ICAyOCAzMSAzMAorMjMgMjcgMjYgIDIwIDI0IDI0ICAxOCAyMiAyMiAgMTcgMjEgMjEgIDE3IDIxIDIxICAxNyAyMSAyMQorMjAgMjQgMjQgIDI1IDI3IDI2ICAzMSAzMyAzMSAgMzggMzkgMzcgIDQ2IDQ3IDQzICA1MyA1NSA0NworNjEgNjEgNTMgIDY2IDY1IDU1ICA2NiA2NSA1NSAgNjYgNjUgNTUgIDYxIDYxIDUzICA1MyA1NSA0NworNDYgNDcgNDMgIDM3IDM5IDM3ICAzMCAzMyAzMCAgMjQgMjYgMjQgIDE3IDIxIDIxICAxNSAxOCAxOAorMTMgMTcgMTcgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTMgMTYgMTYgIDE0IDE4IDE4ICAxNCAxOCAxOAorMTQgMTcgMTcgIDEyIDE1IDE1ICAzMCAzMSAyOCAgMTE4IDExNiA3NiAgMTM0IDEzMSA5NiAgMTYwIDE1NCAxMDYKKzE3NCAxNzAgMTIxICAxNzggMTc0IDEyOCAgMTc4IDE3NCAxMjggIDE3MSAxNjUgMTE3ICAxNTEgMTQ3IDk4ICA5NiA5NSA2OQorMTAgMTIgMTIgIDEwIDEyIDEyICA2IDggOCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDYzIDY0IDYwICA2OCA3MCA2NSAgNjggNzAgNjUKKzY1IDY2IDYxICA1OCA1OSA1NSAgNDkgNTEgNDggIDM5IDQwIDM5ICAzMCAzMiAzMSAgMjMgMjcgMjYKKzIwIDI0IDI0ICAxOCAyMiAyMiAgMTcgMjEgMjEgIDE2IDIwIDIwICAxNyAyMSAyMSAgMjAgMjMgMjMKKzI1IDI3IDI2ICAzMiAzNSAzMyAgNDMgNDQgNDEgIDUzIDU1IDQ3ICA2NiA2NSA1NSAgNzUgNzUgNjEKKzgyIDgxIDYyICA4NCA4MyA3MiAgODcgODYgNzIgIDg3IDg2IDcyICA4MiA4MSA2MiAgNzUgNzUgNjEKKzY2IDY1IDU1ICA1MyA1NSA0NyAgNDAgNDEgMzkgIDMxIDMzIDMxICAyMyAyNSAyNCAgMTcgMjAgMjAKKzE0IDE4IDE4ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNyAxNyAgMTQgMTggMTgKKzE0IDE4IDE4ICAxMyAxNiAxNiAgNDYgNDcgNDMgIDk2IDk1IDY5ICAxMjUgMTIyIDg3ICAxNDIgMTM3IDk0CisxNjAgMTU0IDEwNiAgMTY1IDE2MSAxMDkgIDE2NCAxNTkgMTExICAxNTUgMTQ5IDEwOSAgMTQyIDEzNyA5NCAgNzUgNzUgNjEKKzEwIDEyIDEyICAxMCAxMiAxMiAgNiA4IDggIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA2MCA2MCA1NiAgNjggNzAgNjUgIDY4IDcwIDY1Cis2MyA2NCA2MCAgNTUgNTcgNTQgIDQ2IDQ3IDQ1ICAzNSAzNyAzNiAgMjcgMzAgMjkgIDIzIDI1IDI0CisxOCAyMiAyMiAgMTcgMjEgMjEgIDE2IDIwIDIwICAxNyAyMSAyMSAgMTggMjIgMjIgIDIzIDI3IDI2CiszMSAzMyAzMSAgNDMgNDQgNDEgIDU1IDU2IDUzICA3MSA3MSA1NyAgODQgODMgNzIgIDkyIDkxIDcyCisxMDMgMTAxIDc3ICA5MiA5MSA3MiAgODIgODEgNjIgIDgyIDgxIDYyICA4NyA4NiA3MiAgOTIgOTEgNzIKKzg0IDgzIDcyICA3MSA3MSA1NyAgNTUgNTYgNTMgIDQzIDQ0IDQxICAzMCAzMyAzMCAgMjIgMjQgMjMKKzE2IDE5IDE5ICAxNCAxNyAxNyAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNiAxNiAgMTQgMTggMTgKKzE0IDE4IDE4ICAxNCAxNyAxNyAgNDMgNDQgNDEgIDgyIDgxIDYyICAxMTggMTE2IDc2ICAxMjUgMTIyIDg3CisxNDIgMTM3IDk0ICAxNDQgMTM5IDk5ICAxNDQgMTM5IDk5ICAxMzQgMTMxIDk2ICAxMTggMTE2IDc2ICA1MyA1NSA0NworMTAgMTIgMTIgIDEwIDEyIDEyICA2IDggOCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDQ3IDQ4IDQ2ICA2MyA2NCA2MCAgNjMgNjQgNjAKKzU1IDU3IDU0ICA0OSA1MSA0OCAgNDAgNDMgNDEgIDMyIDM0IDMzICAyNiAyOCAyNyAgMjAgMjQgMjQKKzE4IDIyIDIyICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE3IDIxIDIxICAyMCAyNCAyNCAgMjggMzEgMzAKKzQwIDQxIDM5ICA1MyA1NSA0NyAgNzUgNzUgNjEgIDkwIDg5IDczICA4NyA4NiA3MiAgNDggNDkgNDUKKzE0IDE0IDEzICAyIDIgMiAgMSAyIDIgIDEgMSAxICAxIDEgMSAgMiAyIDIKKzE5IDIwIDE4ICA0MyA0NCA0MSAgNjYgNjUgNTUgIDUzIDU1IDQ3ICAzOCAzOSAzNyAgMjYgMjggMjcKKzE4IDIyIDIyICAxNCAxOCAxOCAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTMgMTcgMTcKKzE0IDE4IDE4ICAxNCAxOCAxOCAgMzAgMzEgMjggIDY2IDY1IDU1ICA5NiA5NSA2OSAgMTAzIDEwMSA3NworMTE4IDExNiA3NiAgMTE4IDExNiA3NiAgMTE4IDExNiA3NiAgMTE4IDExNiA3NiAgMTAzIDEwMSA3NyAgMzYgMzggMzUKKzEwIDEyIDEyICAxMCAxMiAxMiAgNiA3IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAyOCAzMSAzMCAgNTUgNTcgNTQgIDUxIDUyIDUwCis0OSA1MSA0OCAgNDEgNDIgNDIgIDM1IDM3IDM2ICAyOCAzMSAzMCAgMjMgMjcgMjYgIDIwIDIzIDIzCisxNyAyMSAyMSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxOCAyMiAyMiAgMjMgMjcgMjYgIDMzIDM2IDM0Cis0OCA0OSA0NSAgNzEgNzEgNTcgIDgyIDgxIDYyICA0MyA0NCA0MSAgOCA5IDkgIDYgNyA3Cis2IDcgNyAgNiA3IDcgIDYgNyA3ICA1IDYgNSAgNCA1IDUgIDMgNCA0CisyIDMgMyAgMSAyIDIgIDQgNSA0ICAzNiAzOCAzNSAgNDggNDkgNDUgIDMyIDM1IDMzCisyMSAyNSAyMyAgMTYgMTkgMTkgIDEzIDE3IDE3ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE2IDE2CisxNCAxOCAxOCAgMTQgMTggMTggIDE2IDE4IDE2ICAzNiAzOCAzNSAgNjEgNjEgNTMgIDgyIDgxIDYyCis5NiA5NSA2OSAgOTYgOTUgNjkgIDk2IDk1IDY5ICA5NiA5NSA2OSAgNzkgNzggNjIgIDE5IDIwIDE4CisxMCAxMiAxMiAgMTAgMTIgMTIgIDQgNSA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTMgMTMgMTMgIDQ2IDQ3IDQ1ICA0MyA0NSA0MworNDAgNDMgNDEgIDM1IDM3IDM2ICAzMCAzMiAzMSAgMjMgMjcgMjYgIDIwIDI0IDI0ICAxOCAyMiAyMgorMTcgMjEgMjEgIDE2IDIwIDIwICAxNyAyMSAyMSAgMjAgMjMgMjMgIDI3IDMwIDI5ICA0MCA0MSAzOQorNjEgNjEgNTMgIDUzIDU1IDQ3ICAxNiAxNyAxNiAgOSAxMSAxMSAgMTAgMTIgMTIgIDEwIDEyIDEyCisxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA4IDkgOQorNiA4IDggIDUgNiA1ICA0IDUgNSAgMiAzIDMgIDE5IDIwIDE4ICAzOCAzOSAzNworMjYgMjggMjcgIDE3IDIxIDIxICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNQorMTMgMTcgMTcgIDE0IDE4IDE4ICAxMiAxNSAxNSAgMTMgMTIgNyAgMzAgMzEgMjggIDQ2IDQ3IDQzCis1MyA1NSA0NyAgNjYgNjUgNTUgIDY2IDY1IDU1ICA1MyA1NSA0NyAgMzYgMzggMzUgIDEwIDEyIDEyCisxMCAxMiAxMiAgMTAgMTIgMTIgIDIgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDEgIDMzIDM3IDM1ICAzNSAzNyAzNgorMzIgMzUgMzMgIDI4IDMxIDMwICAyMyAyNyAyNiAgMjAgMjQgMjQgIDE4IDIyIDIyICAxNyAyMSAyMQorMTYgMjAgMjAgIDE2IDIwIDIwICAxNyAyMSAyMSAgMjEgMjUgMjMgIDMxIDMzIDMxICA0NCA0NiA0MworMzEgMzMgMzEgIDExIDEzIDEzICAxMiAxNCAxNCAgMTIgMTUgMTUgIDEzIDE2IDE2ICAxNCAxNyAxNworMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNCAxNAorMTEgMTMgMTMgIDkgMTEgMTEgIDggMTAgMTAgIDYgOCA4ICA0IDUgNSAgMTcgMTggMTcKKzMwIDMzIDMwICAyMCAyMyAyMiAgMTUgMTggMTggIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTIgMTQgMTQKKzEzIDE2IDE2ICAxNCAxNyAxNyAgMTQgMTggMTggIDExIDEyIDExICA3IDcgNSAgMTYgMTcgMTIKKzIxIDIyIDIwICAzMCAzMSAyOCAgMjUgMjcgMjUgIDIxIDIyIDIwICAxNCAxNCAxMyAgMTAgMTIgMTIKKzEwIDEyIDEyICA5IDExIDExICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxOCAyMiAyMiAgMjcgMzAgMjkKKzI3IDI5IDI4ICA0MCA0MSAzOSAgNTMgNTUgNDcgIDUzIDU1IDQ3ICA1MyA1NSA0NyAgNDYgNDcgNDMKKzI1IDI3IDI1ICAxNiAyMCAyMCAgMTcgMjEgMjEgIDIzIDI1IDI0ICAzMSAzMyAzMSAgMjAgMjAgMjAKKzEyIDE1IDE1ICAxNCAxNyAxNyAgMTUgMTkgMTkgIDE2IDIwIDIwICAxNyAyMSAyMSAgMTggMjIgMjIKKzE4IDIyIDIyICAxOCAyMiAyMiAgMTggMjIgMjIgIDE3IDIxIDIxICAxNyAyMSAyMSAgMTYgMTkgMTkKKzE1IDE4IDE4ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEwIDEyIDEyICA4IDEwIDEwICA2IDggOAorMjEgMjIgMjEgIDIyIDI0IDIzICAxNSAxOSAxOSAgMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTIgMTUgMTUgIDEzIDE3IDE3ICAxNCAxOCAxOCAgMTQgMTggMTggIDEzIDE1IDE0ICAxMCA5IDYKKzcgNyA1ICA3IDcgNSAgNyA3IDUgIDkgMTEgMTEgIDEwIDEyIDEyICAxMCAxMiAxMgorMTAgMTIgMTIgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNiAxNyAxMiAgODIgODEgNjIKKzExOCAxMTYgNzYgIDExOCAxMTYgNzYgIDE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYKKzExOCAxMTYgNzYgIDk2IDk1IDY5ICA1MyA1NSA0NyAgMjIgMjQgMjMgIDE0IDE3IDE3ICAxMyAxNiAxNgorMTUgMTkgMTkgIDE3IDIxIDIxICAxOCAyMiAyMiAgMjAgMjQgMjQgIDIwIDI0IDI0ICAyMyAyNyAyNgorMjMgMjcgMjYgIDIzIDI3IDI2ICAyMyAyNyAyNiAgMjMgMjcgMjYgIDIzIDI3IDI2ICAyMCAyNCAyNAorMjAgMjMgMjMgIDE3IDIxIDIxICAxNiAxOSAxOSAgMTQgMTcgMTcgIDEyIDE1IDE1ICAxMCAxMiAxMgorOSAxMSAxMSAgMjAgMjMgMjIgIDE2IDE5IDE5ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1CisxMSAxNCAxNCAgMTMgMTYgMTYgIDE0IDE3IDE3ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEyIDE1IDE1CisxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyCis5IDExIDExICAxIDEgMSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNTMgNTUgNDcgIDE2MSAxNTYgOTYKKzE2MSAxNTYgOTYgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYgIDk2IDk1IDY5ICAyMSAyMiAyMCAgMTYgMTkgMTkKKzE4IDIyIDIyICAyMCAyNCAyNCAgMjMgMjcgMjYgIDIzIDI3IDI2ICAyNiAyOCAyNyAgMjcgMzAgMjkKKzI3IDMwIDI5ICAxOCAyMiAyMiAgMTIgMTQgMTQgIDggMTAgMTAgIDkgMTEgMTEgIDE3IDIxIDIxCisyMyAyNyAyNiAgMjMgMjcgMjYgIDIwIDI0IDI0ICAxOCAyMiAyMiAgMTYgMjAgMjAgIDE0IDE3IDE3CisxMiAxNCAxNCAgMTQgMTcgMTcgIDE2IDIwIDIwICAxNCAxNyAxNyAgMTMgMTcgMTcgIDEzIDE2IDE2CisxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE3IDE3ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMSAxMyAxMyAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyCis0IDUgNSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTMgMTIgNyAgMTE4IDExNiA3NiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NiAgMzAgMzEgMjgKKzIwIDI0IDI0ICAyMyAyNyAyNiAgMjcgMzAgMjkgIDI4IDMxIDMwICAzMCAzMiAzMSAgMjMgMjcgMjYKKzE2IDE5IDE5ICAxNyAyMSAyMSAgMTIgMTUgMTUgIDkgMTEgMTEgIDEwIDEyIDEyICA5IDExIDExCisyMCAyNCAyNCAgMjggMzEgMzAgIDI2IDI4IDI3ICAyMyAyNyAyNiAgMjAgMjQgMjQgIDE3IDIxIDIxCisxNSAxOSAxOSAgMTMgMTYgMTYgIDE2IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMiAxNSAxNSAgMTEgMTQgMTQgIDEzIDE2IDE2ICAxNCAxNyAxNyAgMTQgMTggMTggIDE0IDE3IDE3CisxMiAxNSAxNSAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDggOSA5CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODIgODEgNjIgIDE2MSAxNTYgOTYgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMyAyMzMgMTAwICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2CisyNyAyOSAyOCAgMjcgMzAgMjkgIDMwIDMyIDMxICAzMCAzMiAzMSAgMjMgMjcgMjYgIDIwIDI0IDI0CisyNiAyOCAyNyAgMTcgMjEgMjEgIDYgNyA3ICA3MiA3MyA2NyAgMTQ1IDE0MSAxMDUgIDE1IDE1IDE1CisxNCAxNyAxNyAgMzMgMzcgMzUgIDMwIDMyIDMxICAyOCAzMSAzMCAgMjYgMjggMjcgIDIzIDI3IDI2CisyMCAyMyAyMyAgMTYgMjAgMjAgIDE1IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2CisxMiAxNSAxNSAgMTEgMTQgMTQgIDEyIDE1IDE1ICAxMyAxNyAxNyAgMTQgMTggMTggIDE0IDE3IDE3CisxMyAxNiAxNiAgMTEgMTMgMTMgIDEwIDEyIDEyICAxMCAxMiAxMiAgOSAxMSAxMSAgMSAxIDEKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDE2IDE3IDEyICAxNjEgMTU2IDk2ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyNDMgMjQyIDEyMCAgMjM1IDIzNCAxMTcgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYKKzgyIDgxIDYyICAyOCAzMSAzMCAgMjggMzEgMzAgIDI3IDMwIDI5ICAyOCAzMSAzMCAgMzAgMzIgMzEKKzMzIDM3IDM1ICAxMyAxNiAxNiAgMyAzIDMgIDEwNSAxMDQgOTIgIDIxMCAyMDggMTU4ICAxMiAxNCAxNAorMTcgMjEgMjEgIDMzIDM3IDM1ICAzMyAzNyAzNSAgMzIgMzUgMzMgIDMwIDMyIDMxICAyNyAzMCAyOQorMjMgMjcgMjYgIDIwIDIzIDIzICAxNyAyMCAyMCAgMTUgMTggMTggIDE0IDE4IDE4ICAxMyAxNyAxNworMTMgMTYgMTYgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTMgMTYgMTYgIDE0IDE3IDE3ICAxNCAxOCAxOAorMTMgMTcgMTcgIDEyIDE1IDE1ICAxMCAxMiAxMiAgMTAgMTIgMTIgIDMgNCA0ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgOTYgOTUgNjkgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDI0NCAyNDQgMTMyCisyNDEgMjQxIDE0MyAgMjQzIDI0MiAxMjAgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzE2MSAxNTYgOTYgIDQ2IDQ3IDQzICAzMiAzNSAzMyAgMzMgMzcgMzUgIDMzIDM3IDM1ICAzMyAzNyAzNQorNDAgNDMgNDEgIDIzIDI3IDI2ICAxIDEgMSAgMiAyIDIgIDI0IDI2IDI0ICAxNCAxNyAxNworMjMgMjcgMjYgIDMzIDM3IDM1ICAzMyAzNyAzNSAgMzMgMzcgMzUgIDMzIDM3IDM1ICAzMCAzMiAzMQorMjcgMzAgMjkgIDIzIDI3IDI2ICAyMCAyMyAyMyAgMTUgMTggMTggIDE0IDE4IDE4ICAxNCAxNyAxNworMTMgMTYgMTYgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTIgMTUgMTUgIDEzIDE3IDE3ICAxNCAxNyAxNworMTQgMTcgMTcgIDEzIDE2IDE2ICAxMSAxMyAxMyAgNiA4IDggIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxNiAxNyAxMiAgMTYxIDE1NiA5NiAgMjMwIDIyOSA4MiAgMjM1IDIzNCAxMTcgIDIzOSAyMzkgMTcwCisyMzkgMjM5IDE3MCAgMjM2IDIzNiAxMDEgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDExOCAxMTYgNzYgIDMzIDM3IDM1ICAzMyAzNyAzNSAgMzcgMzkgMzcgIDM3IDM5IDM3Cis0MyA0NSA0MyAgNDkgNTEgNDggIDIwIDI0IDI0ICA4IDEwIDEwICAxNyAyMCAyMCAgMzUgMzcgMzYKKzMzIDM3IDM1ICA0MCA0MyA0MSAgMzcgMzkgMzcgIDM1IDM3IDM2ICAzMyAzNyAzNSAgMzMgMzcgMzUKKzMwIDMyIDMxICAyNyAzMCAyOSAgMjMgMjcgMjYgIDE1IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcKKzEzIDE3IDE3ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDExIDE0IDE0ICAxMyAxNiAxNiAgMTQgMTcgMTcKKzE0IDE3IDE3ICAxMyAxNyAxNyAgMTEgMTQgMTQgIDQgNSA1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgOTYgOTUgNjkgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NworMjQxIDI0MSAxNDMgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDM2IDM4IDM1ICAzMyAzNyAzNSAgMzMgMzcgMzUgIDMzIDM3IDM1CiszNyAzOSAzNyAgNDcgNDggNDYgIDU1IDU3IDU0ICA1NSA1NyA1NCAgNDkgNTEgNDggIDQzIDQ1IDQzCis0MyA0NSA0MyAgNDMgNDUgNDMgIDQwIDQzIDQxICA0MCA0MyA0MSAgMzcgMzkgMzcgIDMzIDM3IDM1CiszMyAzNyAzNSAgMjggMzEgMzAgIDI2IDI4IDI3ICAxNiAyMCAyMCAgMTUgMTggMTggIDE0IDE4IDE4CisxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTIgMTUgMTUgIDEzIDE3IDE3CisxNCAxNyAxNyAgMTQgMTcgMTcgIDggMTAgMTAgIDUgNyA3ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNiAxNyAxMiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjQzIDI0MiAxMjAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjQ2IDI0NiAxMjMgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDY2IDY1IDU1ICAzMCAzMiAzMSAgMzIgMzUgMzMgIDMzIDM3IDM1CiszMyAzNyAzNSAgMzcgMzkgMzcgIDQwIDQzIDQxICA0NyA0OCA0NiAgNDkgNTEgNDggIDUxIDUyIDUwCis1NSA1NyA1NCAgNTUgNTcgNTQgIDUxIDUyIDUwICA0NyA0OCA0NiAgNDMgNDUgNDMgIDM5IDQwIDM5CiszMyAzNyAzNSAgMzAgMzIgMzEgIDI2IDI4IDI3ICAxNyAyMSAyMSAgMTUgMTkgMTkgIDE0IDE4IDE4CisxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNCAxNCAgMTEgMTQgMTQgIDEzIDE2IDE2CisxNCAxNyAxNyAgMTIgMTUgMTUgIDcgOSA5ICA2IDggOCAgMSAxIDEgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorOTYgOTUgNjkgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDk2IDk1IDY5ICAyNyAzMCAyOSAgMjggMzEgMzAgIDMwIDMyIDMxCiszMyAzNyAzNSAgNDAgNDMgNDEgIDQ2IDQ3IDQ1ICA1NSA1NyA1NCAgNjMgNjQgNjAgIDcyIDczIDY3Cis3MiA3MyA2NyAgNzIgNzMgNjcgIDcyIDczIDY3ICA2NSA2NiA2MSAgNTUgNTcgNTQgIDQ3IDQ4IDQ2CiszOSA0MCAzOSAgMzIgMzUgMzMgIDI3IDMwIDI5ICAxNyAyMSAyMSAgMTUgMTkgMTkgIDE1IDE4IDE4CisxNCAxOCAxOCAgMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEyIDE0IDE0CisxMyAxNiAxNiAgOSAxMSAxMSAgNyA5IDkgIDkgMTEgMTEgIDY2IDY1IDU1ICAxMTUgMTEzIDgyCisyMSAyMiAyMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxMyAxMiA3CisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzYgMjM2IDEwMSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNDYgMjQ2IDEyMworMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTE4IDExNiA3NiAgMjMgMjcgMjYgIDI2IDI4IDI3ICAzMiAzNSAzMworNTEgNTIgNTAgIDkwIDg5IDczICAxMTAgMTA5IDk0ICAxNDUgMTQxIDEwNSAgMTY4IDE2MyAxMjAgIDE3NyAxNzIgMTM1CisxNzcgMTcyIDEzNSAgMTg4IDE4NCAxNDYgIDE4OCAxODQgMTQ2ICAxODEgMTc2IDEzNyAgMTk0IDE5MSAxNDggIDE4OCAxODQgMTQ2CisxODQgMTc5IDE0OSAgMTg4IDE4NCAxNDYgIDE4OCAxODQgMTQ2ICAxNTYgMTUxIDExMSAgMTc3IDE3MiAxMzUgIDE4MSAxNzYgMTM3CisxNzcgMTcyIDEzNSAgMTY4IDE2MyAxMjAgIDE2OCAxNjMgMTIwICAxNTggMTUzIDExMiAgMTU2IDE1MSAxMTEgIDE1OCAxNTMgMTEyCisxNTYgMTUxIDExMSAgMTU4IDE1MyAxMTIgIDE3NyAxNzIgMTM1ICAxODggMTg0IDE0NiAgMTg4IDE4NCAxNDYgIDE5NCAxODkgMTQ2CiszNiAzOCAzNSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4MiA4MSA2MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjQ0IDI0NCAxMzIgIDI1MSAyNTEgMTg3ICAyNDQgMjQ0IDEzMiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgODIgODEgNjIKKzk2IDk1IDY5ICAyMzAgMjI5IDgyICAxODEgMTc4IDEwMyAgMTEwIDEwOSA5NCAgMTU2IDE1MSAxMTEgIDE4OCAxODQgMTQ2CisxODggMTg0IDE0NiAgMTk3IDE5MyAxNTQgIDE4OCAxODQgMTQ2ICAxODQgMTgxIDEzNiAgMTg4IDE4NCAxNDYgIDE2OCAxNjMgMTIwCisxNjggMTYzIDEyMCAgMTc4IDE3NCAxMjggIDE1NiAxNTEgMTExICAxNTggMTUzIDExMiAgMTc0IDE3MCAxMjEgIDE1NiAxNTEgMTExCisxNTYgMTUxIDExMSAgMTU4IDE1MyAxMTIgIDE1NiAxNTEgMTExICAxNjggMTYzIDEyMCAgMTc4IDE3NCAxMjggIDE4MSAxNzYgMTM3CisxNzYgMTcxIDEyNiAgMTc4IDE3NCAxMjggIDE4NCAxODEgMTM2ICAxNzYgMTcxIDEyNiAgMTc4IDE3NCAxMjggIDE4NCAxODEgMTM2CisxNzYgMTcxIDEyNiAgMTc4IDE3NCAxMjggIDE4NCAxODEgMTM2ICAxNjQgMTU5IDExMSAgMTU1IDE0OSAxMDkgIDk2IDk1IDY5CisxIDEgMSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDIgMiAxICAxNjEgMTU2IDk2CisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyNDQgMjQ0IDEzMiAgMjQ0IDI0NCAxMzIgIDIzNiAyMzYgMTAxICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICA0NiA0NyA0MyAgODIgODEgNjIKKzE1OCAxNTMgMTEyICAxOTcgMTkzIDE1NCAgMTk0IDE4OSAxNDYgIDE4NCAxODEgMTM2ICAxODggMTg0IDE0NiAgMTY4IDE2MyAxMjAKKzE1NiAxNTEgMTExICAxMzcgMTMzIDEwMCAgMTMxIDEyNyA5MyAgMTM3IDEzMyAxMDAgIDEzNyAxMzMgMTAwICAxNTggMTUzIDExMgorMTIxIDExOSA4NyAgMTM3IDEzMyAxMDAgIDE1NiAxNTEgMTExICAxNDUgMTQxIDEwNSAgOTkgOTggODAgIDg0IDgzIDcyCis2MyA2NCA2MCAgNTIgNTMgNDkgIDQwIDQzIDQxICAzMyAzNiAzNCAgMzYgMzggMzUgIDM2IDM4IDM1CiszOCAzOSAzNyAgNDMgNDQgNDEgIDQzIDQ0IDQxICA0NiA0NyA0MyAgNDggNDkgNDUgIDQ4IDQ5IDQ1Cis0NiA0NyA0MyAgMzYgMzggMzUgIDMwIDMxIDI4ICAxOSAyMCAxOCAgNiA3IDcgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDM2IDM4IDM1ICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyNDYgMjQ2IDEyMyAgMjM2IDIzNiAxMDEgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDUzIDU1IDQ3ICAxMjEgMTE5IDg3CisxNzYgMTcxIDEyNiAgMTcxIDE2NSAxMTcgIDE2MSAxNTYgOTYgIDgyIDgxIDYyICA1MyA1NSA0NyAgMzMgMzcgMzUKKzM5IDQwIDM5ICA2MyA2NCA2MCAgOTkgOTggODAgIDEyMSAxMTkgODcgIDEzNyAxMzMgMTAwICAxNzcgMTcyIDEzNQorMTc2IDE3MSAxMjYgIDE4NCAxODEgMTM2ICAxMzEgMTI3IDkzICAxMzEgMTI3IDkzICAxMTAgMTA5IDk0ICA4NCA4MyA3MgorNTEgNTIgNTAgIDM5IDQwIDM5ICAyNyAyOSAyOCAgMTggMjIgMjIgIDE2IDE5IDE5ICAxNSAxOSAxOQorMTUgMTkgMTkgIDE0IDE4IDE4ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMSAxNCAxNAorMTAgMTMgMTMgIDkgMTIgMTIgIDkgMTEgMTEgIDggOSA5ICA3IDkgOSAgMSAxIDEKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTE4IDExNiA3NiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjM2IDIzNiAxMDEgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDk2IDk1IDY5ICA3MSA3MSA1NworMzYgMzggMzUgIDExOCAxMTYgNzYgIDExOCAxMTYgNzYgIDEyIDE1IDE1ICAxNSAxOCAxOCAgMjAgMjQgMjQKKzMzIDM3IDM1ICA1NSA1NiA1MyAgODQgODMgNzIgIDExMCAxMDkgOTQgIDE0NSAxNDEgMTA1ICAxMTAgMTA5IDk0CisxNjggMTYzIDEyMCAgMTIxIDExOSA4NyAgMTU2IDE1MSAxMTEgIDEzMSAxMjcgOTMgIDg3IDg2IDcyICA2MSA2MyA1NworNDcgNDggNDYgIDI4IDMxIDMwICAxOCAyMiAyMiAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNSAxOSAxOQorMTUgMTkgMTkgIDE0IDE4IDE4ICAxNCAxNyAxNyAgMTMgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTEgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA3IDkgOSAgMyAzIDMKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMCAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NgorMTYxIDE1NiA5NiAgMjMwIDIyOSA4MiAgMTE4IDExNiA3NiAgMTEgMTQgMTQgIDE0IDE3IDE3ICAxOCAyMiAyMgorMjcgMzAgMjkgIDQwIDQzIDQxICA2MCA2MCA1NiAgODQgODMgNzIgIDEwNSAxMDQgOTIgIDExMCAxMDkgOTQKKzExMCAxMDkgOTQgIDExMCAxMDkgOTQgIDk5IDk4IDgwICA5MCA4OSA3MyAgNjggNzAgNjUgIDQ3IDQ4IDQ2CiszMiAzNCAzMyAgMjMgMjUgMjQgIDIwIDIzIDIzICAxNyAyMSAyMSAgMTUgMTkgMTkgIDE0IDE3IDE3CisxNSAxOSAxOSAgMTUgMTggMTggIDE0IDE4IDE4ICAxMyAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1CisxMSAxNCAxNCAgMTAgMTIgMTIgIDkgMTEgMTEgIDggMTAgMTAgIDcgOSA5ICA0IDUgNQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE2IDE3IDEyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2ICAxMSAxMyAxMyAgMTMgMTYgMTYgIDE1IDE5IDE5CisyMCAyNCAyNCAgMzAgMzIgMzEgIDQwIDQzIDQxICA1MSA1MiA1MCAgNjMgNjQgNjAgIDcyIDczIDY3Cis2NSA2NiA2MSAgNjUgNjYgNjEgIDY1IDY2IDYxICA1NSA1NyA1NCAgNDYgNDcgNDUgIDMzIDM3IDM1CisyNyAyOSAyOCAgMjAgMjQgMjQgIDE3IDIxIDIxICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE1IDE5IDE5CisxNSAxOSAxOSAgMTUgMTkgMTkgIDE0IDE4IDE4ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1CisxMSAxNCAxNCAgMTAgMTMgMTMgIDkgMTIgMTIgIDggMTAgMTAgIDcgOSA5ICA2IDcgNworMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDUzIDU1IDQ3ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisxNjEgMTU2IDk2ICAxMTggMTE2IDc2ICA1MyA1NSA0NyAgMTAgMTMgMTMgIDEyIDE1IDE1ICAxNCAxNyAxNworMTcgMjAgMjAgIDIwIDI0IDI0ICAyNyAyOSAyOCAgMzIgMzQgMzMgIDM3IDM5IDM3ICA0MCA0MyA0MQorNDMgNDUgNDMgIDQxIDQyIDQyICAzNSAzNyAzNiAgMzAgMzIgMzEgIDI4IDMxIDMwICAyMyAyNyAyNgorMjAgMjMgMjMgIDE3IDIxIDIxICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAxOSAxOQorMTUgMTkgMTkgIDE1IDE5IDE5ICAxNCAxOCAxOCAgMTQgMTcgMTcgIDEzIDE2IDE2ICAxMiAxNSAxNQorMTEgMTQgMTQgIDEwIDEzIDEzICA5IDEyIDEyICA5IDExIDExICA4IDEwIDEwICAxMCAxMiAxMgorMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDgyIDgxIDYyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2CisxMTggMTE2IDc2ICA4MiA4MSA2MiAgMTMgMTQgMTIgIDEwIDEzIDEzICAxMiAxNSAxNSAgMTMgMTcgMTcKKzE1IDE5IDE5ICAxNiAyMCAyMCAgMjAgMjMgMjMgIDIwIDI0IDI0ICAyMyAyNyAyNiAgMjYgMjggMjcKKzI2IDI4IDI3ICAyNiAyOCAyNyAgMjMgMjcgMjYgIDE4IDIyIDIyICAyMCAyMyAyMyAgMTcgMjEgMjEKKzE3IDIxIDIxICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMTkgMTkKKzE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTggMTggIDE0IDE3IDE3ICAxMyAxNyAxNyAgMTMgMTYgMTYKKzEyIDE1IDE1ICAxMiAxNCAxNCAgMTIgMTQgMTQgIDEyIDE0IDE0ICAxMiAxNCAxNCAgMjMgMjQgMjQKKzYgOCA4ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxMTggMTE2IDc2ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2Cis3MSA3MSA1NyAgMTMgMTQgMTIgIDkgMTIgMTIgIDEwIDEzIDEzICAxMiAxNSAxNSAgMTMgMTcgMTcKKzE1IDE4IDE4ICAxNSAxOSAxOSAgMTYgMjAgMjAgIDE3IDIxIDIxICAxNyAyMSAyMSAgMTggMjIgMjIKKzE4IDIyIDIyICAxOCAyMiAyMiAgMTcgMjEgMjEgIDE2IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTggMTgKKzE2IDE5IDE5ICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTggMTggIDE0IDE4IDE4ICAxNiAyMCAyMCAgMjMgMjUgMjQKKzE3IDIxIDIxICAyNSAyNyAyNiAgNDcgNDggNDYgIDQ3IDQ4IDQ2ICA1MSA1MiA1MCAgNzIgNzMgNjcKKzMzIDM2IDM0ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxMTggMTE2IDc2ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAxMTggMTE2IDc2ICAxMTggMTE2IDc2ICA0NiA0NyA0MworOSAxMSAxMSAgOSAxMSAxMSAgMTAgMTIgMTIgIDExIDEzIDEzICAxMiAxNSAxNSAgMTQgMTcgMTcKKzE1IDE4IDE4ICAxNSAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE1IDE5IDE5ICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE1IDE5IDE5ICAxNiAyMCAyMCAgMjAgMjQgMjQgIDU1IDU2IDUzICAzMiAzNCAzMyAgODQgODMgNzIKKzkwIDg5IDczICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICAxMDUgMTA0IDkyICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0Cis3MiA3MyA2NyAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgOTYgOTUgNjkgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYgIDgyIDgxIDYyICAxNiAxNyAxMiAgOSAxMSAxMQorOSAxMSAxMSAgOSAxMiAxMiAgMTAgMTMgMTMgIDEyIDE0IDE0ICAxMyAxNiAxNiAgMTQgMTggMTgKKzE1IDE5IDE5ICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDE5IDE5ICAzMyAzNiAzNCAgOTkgOTggODAgIDE1NiAxNTEgMTExICAxNDUgMTQxIDEwNSAgMTg0IDE3OSAxNDkKKzE2OCAxNjMgMTIwICAxODQgMTc5IDE0OSAgMTc3IDE3MiAxMzUgIDE1NiAxNTEgMTExICAxNDUgMTQxIDEwNSAgMTEwIDEwOSA5NAorOTAgODkgNzMgIDIgMiAyICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDcxIDcxIDU3ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyCisyMzAgMjI5IDgyICAxNjEgMTU2IDk2ICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAyMzAgMjI5IDgyICAxNjEgMTU2IDk2CisxMTggMTE2IDc2ICA4MiA4MSA2MiAgMzAgMzEgMjggIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzEwIDEyIDEyICAxMCAxMyAxMyAgMTEgMTQgMTQgIDEzIDE2IDE2ICAxNCAxNyAxNyAgMTUgMTggMTgKKzE1IDE5IDE5ICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE4IDIyIDIyICA1OCA1OSA1NSAgMTM3IDEzMyAxMDAgIDE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjEwIDIwOCAxNTgKKzE5NyAxOTMgMTU0ICAxODQgMTc5IDE0OSAgMTg0IDE3OSAxNDkgIDEzNyAxMzMgMTAwICAxMTAgMTA5IDk0ICA5OSA5OCA4MAorODQgODMgNzIgIDEwIDEwIDkgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTYgMTcgMTIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIKKzIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDIzMCAyMjkgODIgIDE2MSAxNTYgOTYKKzE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDExOCAxMTYgNzYgIDcxIDcxIDU3CisyMSAyMiAyMCAgMTIgMTQgMTQgIDExIDEzIDEzICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEzIDEzCisxMSAxMyAxMyAgMTIgMTUgMTUgIDEzIDE2IDE2ICAxNCAxNyAxNyAgMTQgMTggMTggIDE1IDE5IDE5CisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE3IDIxIDIxCisyMyAyNyAyNiAgODQgODMgNzIgIDE4NCAxNzkgMTQ5ICAyNTEgMjUxIDE4NyAgMjEwIDIwOCAxNTggIDE4NCAxNzkgMTQ5CisxODQgMTc5IDE0OSAgMTU2IDE1MSAxMTEgIDExMCAxMDkgOTQgIDg0IDgzIDcyICA2MyA2NCA2MCAgNTEgNTIgNTAKKzE4IDIyIDIyICA2IDggOCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTE4IDExNiA3NiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTYxIDE1NiA5NgorMTYxIDE1NiA5NiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NiAgNTMgNTUgNDcgIDIwIDIzIDIyICAxNiAxOSAxOQorMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNAorMTIgMTUgMTUgIDEzIDE2IDE2ICAxNCAxNyAxNyAgMTUgMTkgMTkgIDE2IDIwIDIwICAxNyAyMSAyMQorMjMgMjcgMjYgIDE4IDIyIDIyICAyMCAyNCAyNCAgMjMgMjcgMjYgIDMwIDMyIDMxICAxNyAyMSAyMQorMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMjMgMjcgMjYgIDMzIDM3IDM1ICAxMzcgMTMzIDEwMCAgMTU2IDE1MSAxMTEgIDE1OCAxNTMgMTEyICAxMDUgMTA0IDkyCisxMDUgMTA0IDkyICA2OCA3MCA2NSAgMzkgNDAgMzkgIDE4IDIyIDIyICAxMiAxNCAxNCAgMTIgMTUgMTUKKzkgMTEgMTEgIDQgNSA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNiAxNyAxMiAgMjMwIDIyOSA4MgorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMTYxIDE1NiA5NiAgMTE4IDExNiA3NiAgMTE4IDExNiA3NgorMTE4IDExNiA3NiAgNjYgNjUgNTUgIDQzIDQ1IDQzICAzMiAzNCAzMyAgMjUgMjcgMjYgIDIwIDIzIDIyCisxNyAyMCAyMCAgMTUgMTggMTggIDE0IDE3IDE3ICAxNSAxOCAxOCAgMTMgMTYgMTYgIDE0IDE3IDE3CisxNCAxOCAxOCAgMTYgMjAgMjAgIDMyIDM0IDMzICA1NSA1NyA1NCAgNTggNTkgNTUgIDcyIDczIDY3CisxMDUgMTA0IDkyICA1NSA1NyA1NCAgNjUgNjYgNjEgIDYzIDY0IDYwICA0MCA0MyA0MSAgMzMgMzcgMzUKKzQxIDQyIDQyICAyMCAyNCAyNCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE3IDIxIDIxICAyNiAyOCAyNyAgMzAgMzIgMzEgIDM1IDM3IDM2ICA2OCA3MCA2NSAgMzkgNDAgMzkKKzIzIDI3IDI2ICAxNSAxOCAxOCAgMTMgMTYgMTYgIDExIDE0IDE0ICA5IDEyIDEyICA4IDEwIDEwCis3IDkgOSAgNiA3IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzNiAzOCAzNQorMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgMjMwIDIyOSA4MiAgOTYgOTUgNjkgIDMwIDMxIDI4ICA0OSA1MSA0OAorOTAgODkgNzMgIDY4IDcwIDY1ICA1NSA1NyA1NCAgNDcgNDggNDYgIDQ3IDQ4IDQ2ICA0MyA0NSA0MworMzIgMzQgMzMgIDQzIDQ1IDQzICA0MyA0NSA0MyAgMjMgMjcgMjYgIDI1IDI3IDI2ICA0MCA0MyA0MQorNDAgNDMgNDEgIDkwIDg5IDczICAxMTAgMTA5IDk0ICAxNDUgMTQxIDEwNSAgMTU2IDE1MSAxMTEgIDE1NiAxNTEgMTExCisxODQgMTc5IDE0OSAgMTg0IDE3OSAxNDkgIDE3NyAxNzIgMTM1ICAxODQgMTc5IDE0OSAgMTM3IDEzMyAxMDAgIDg0IDgzIDcyCisxMDUgMTA0IDkyICA2MyA2NCA2MCAgNDkgNTEgNDggIDQ3IDQ4IDQ2ICAyOCAzMSAzMCAgMTggMjIgMjIKKzE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAKKzE2IDIwIDIwICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxOCAyMiAyMiAgMTUgMTkgMTkKKzEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzICA5IDEyIDEyICA5IDExIDExCis4IDEwIDEwICA2IDggOCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiszMCAzMSAyOCAgMjMwIDIyOSA4MiAgNzEgNzEgNTcgIDIgMiAxICAwIDAgMCAgNTggNTkgNTUKKzEwNSAxMDQgOTIgIDg0IDgzIDcyICA2NSA2NiA2MSAgODQgODMgNzIgIDExMCAxMDkgOTQgIDExMCAxMDkgOTQKKzE0NSAxNDEgMTA1ICAxMDUgMTA0IDkyICAxMTAgMTA5IDk0ICAxMTAgMTA5IDk0ICA4NCA4MyA3MiAgMTEwIDEwOSA5NAorMTU4IDE1MyAxMTIgIDE5NyAxOTMgMTU0ICAxOTcgMTkzIDE1NCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NAorMTk3IDE5MyAxNTQgIDE4NCAxNzkgMTQ5ICAxNDUgMTQxIDEwNSAgMTM3IDEzMyAxMDAgIDEwNSAxMDQgOTIgIDQ3IDQ4IDQ2CisyMCAyMyAyMyAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTQgMTggMTggIDE0IDE3IDE3CisxMyAxNyAxNyAgMTMgMTYgMTYgIDEyIDE0IDE0ICAxMiAxNCAxNCAgMTMgMTMgMTMgIDEzIDEzIDEzCisxMyAxMyAxMyAgMTIgMTIgMTIgIDEwIDEwIDkgIDYgNyA3ICAyIDIgMiAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEgMSAwICAwIDAgMCAgMCAwIDAgIDY1IDY2IDYxCisxMDUgMTA0IDkyICA4NCA4MyA3MiAgODQgODMgNzIgIDExMCAxMDkgOTQgIDE4NCAxNzkgMTQ5ICAyMTAgMjA4IDE1OAorMjEwIDIwOCAxNTggIDIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OCAgMTk3IDE5MyAxNTQgIDIxNCAyMTIgMTU4ICAyMTAgMjA4IDE1OAorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDE4NCAxNzkgMTQ5ICA4NCA4MyA3MgorMjYgMjggMjcgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDIwIDIwICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxOCAxOAorMTMgMTcgMTcgIDEzIDE2IDE2ICAxNSAxNSAxNSAgMTQgMTQgMTMgIDE0IDE0IDEzICAxNCAxNCAxMworMTMgMTMgMTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIgIDEyIDEyIDEyICAzIDQgNAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNzIgNzMgNjcKKzEwNSAxMDQgOTIgIDk5IDk4IDgwICA4NCA4MyA3MiAgOTkgOTggODAgIDE3NyAxNzIgMTM1ICAxOTcgMTkzIDE1NAorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDE5NyAxOTMgMTU0ICA5OSA5OCA4MAorMjMgMjcgMjYgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMAorMTYgMjAgMjAgIDE2IDIwIDIwICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNCAxOCAxOAorMTQgMTcgMTcgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE1IDE1IDE1ICAxNCAxNCAxMworMTQgMTQgMTMgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyICAxMiAxMiAxMgorMyAzIDMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODQgODMgNzIKKzExMCAxMDkgOTQgIDk5IDk4IDgwICA3MiA3MyA2NyAgNjMgNjQgNjAgIDk5IDk4IDgwICAxNzcgMTcyIDEzNQorMTg0IDE3OSAxNDkgIDIxMCAyMDggMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxODQgMTc5IDE0OSAgMTc3IDE3MiAxMzUgIDExMCAxMDkgOTQgIDMzIDM3IDM1CisxNyAyMSAyMSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNiAyMCAyMCAgMTYgMjAgMjAgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE0IDE4IDE4CisxNSAxOCAxOCAgMTggMTkgMTggIDE4IDE5IDE4ICAxNyAxNyAxNyAgMTYgMTYgMTYgIDE1IDE1IDE1CisxNCAxNCAxMyAgMTMgMTMgMTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMCAxMCA5ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMiAyIDIgIDEwNSAxMDQgOTIKKzEwOCAxMDcgOTMgIDk5IDk4IDgwICA3MiA3MyA2NyAgNjMgNjQgNjAgIDUxIDUyIDUwICA4NyA4NiA3MgorMTA1IDEwNCA5MiAgMTEwIDEwOSA5NCAgMTA4IDEwNyA5MyAgMTU2IDE1MSAxMTEgIDE4NCAxNzkgMTQ5ICAxODQgMTc5IDE0OQorMTk3IDE5MyAxNTQgIDE5NyAxOTMgMTU0ICAxOTcgMTkzIDE1NCAgMTg0IDE3OSAxNDkgIDE4NCAxNzkgMTQ5ICAxNzcgMTcyIDEzNQorMTk3IDE5MyAxNTQgIDE1NiAxNTEgMTExICAxNzcgMTcyIDEzNSAgMTg0IDE3OSAxNDkgIDE2OCAxNjMgMTIwICAxMzcgMTMzIDEwMAorMTQ1IDE0MSAxMDUgIDExMCAxMDkgOTQgIDk5IDk4IDgwICA0NyA0OCA0NiAgNTUgNTcgNTQgIDE1IDE5IDE5CisxNiAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwICAxNiAyMCAyMCAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNyAyMCAyMCAgMTcgMjEgMjEgIDE2IDIwIDIwICAxNiAxOSAxOSAgMTUgMTkgMTkgIDE2IDE5IDE5CisyMCAyMCAyMCAgMjEgMjIgMjEgIDIwIDIwIDIwICAxOSAyMCAxOSAgMTggMTkgMTggIDE2IDE2IDE2CisxNSAxNSAxNSAgMTQgMTQgMTMgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgNCA1IDUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDU4IDU5IDU1ICAxMTAgMTA5IDk0CisxMDUgMTA0IDkyICA5MCA4OSA3MyAgNzIgNzMgNjcgIDU1IDU3IDU0ICA0MyA0NSA0MyAgMzkgNDAgMzkKKzQzIDQ1IDQzICA0NiA0NyA0NSAgNDMgNDUgNDMgIDY4IDcwIDY1ICA2NSA2NiA2MSAgNjMgNjQgNjAKKzEwOCAxMDcgOTMgIDcyIDczIDY3ICAxMDUgMTA0IDkyICA5MCA4OSA3MyAgNzIgNzMgNjcgIDQwIDQzIDQxCis3MiA3MyA2NyAgNjggNzAgNjUgIDY4IDcwIDY1ICA1OCA1OSA1NSAgNjMgNjQgNjAgIDQ5IDUxIDQ4Cis0MyA0NSA0MyAgMzMgMzYgMzQgIDI3IDMwIDI5ICAyMCAyNCAyNCAgMTYgMjAgMjAgIDE1IDE5IDE5CisxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNiAxOSAxOSAgMTYgMjAgMjAgIDE2IDIwIDIwCisxNyAyMSAyMSAgMjAgMjQgMjQgIDIwIDIzIDIyICAxNyAyMSAyMSAgMTcgMjAgMjAgIDIwIDIwIDIwCisyMSAyMiAyMSAgMjEgMjIgMjEgIDIxIDIyIDIxICAyMSAyMiAyMSAgMjAgMjAgMjAgIDE4IDE5IDE4CisxNiAxNiAxNiAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTAgMTAgOSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAyMSAyMiAyMSAgMTEwIDEwOSA5NCAgMTEwIDEwOSA5NAorMTA1IDEwNCA5MiAgODQgODMgNzIgIDY4IDcwIDY1ICA1MSA1MiA1MCAgNDEgNDIgNDIgIDMzIDM3IDM1CisyOCAzMSAzMCAgMjMgMjcgMjYgIDIwIDIzIDIzICAxOCAyMiAyMiAgMTcgMjAgMjAgIDI1IDI3IDI2CisyNiAyOCAyNyAgMjcgMzAgMjkgIDI1IDI3IDI2ICAyMCAyMyAyMyAgMjMgMjcgMjYgIDMwIDMyIDMxCisyMCAyNCAyNCAgMTcgMjEgMjEgIDE4IDIyIDIyICAxNSAxOSAxOSAgMjYgMjggMjcgIDIwIDIzIDIzCisxNCAxOCAxOCAgMTUgMTkgMTkgIDE1IDE4IDE4ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5CisxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE2IDE5IDE5CisxNiAyMCAyMCAgMjIgMjQgMjMgIDI0IDI2IDI0ICAyMiAyNCAyMyAgMjAgMjMgMjIgIDIyIDI0IDIzCisyNCAyNiAyNCAgMjQgMjYgMjQgIDIzIDI0IDI0ICAyMiAyNCAyMyAgMjEgMjIgMjEgIDE5IDIwIDE5CisxNyAxNyAxNyAgMTUgMTUgMTUgIDE0IDE0IDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDIgMiAyICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAyIDIgMiAgOTkgOTggODAgIDExMCAxMDkgOTQgIDEwOCAxMDcgOTMKKzEwNSAxMDQgOTIgIDg0IDgzIDcyICA2MyA2NCA2MCAgNDkgNTEgNDggIDM5IDQwIDM5ICAzMiAzNCAzMworMjcgMzAgMjkgIDIzIDI1IDI0ICAyMCAyMyAyMyAgMTcgMjAgMjAgIDE1IDE5IDE5ICAxNCAxOCAxOAorMTQgMTcgMTcgIDEzIDE3IDE3ICAxMyAxNyAxNyAgMTMgMTcgMTcgIDEzIDE3IDE3ICAxMyAxNyAxNworMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNworMTQgMTggMTggIDE0IDE4IDE4ICAxNCAxOCAxOCAgMTQgMTggMTggIDE1IDE4IDE4ICAxNSAxOSAxOQorMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOQorMTUgMTkgMTkgIDE3IDIxIDIxICAyNyAyOSAyOCAgMjYgMjggMjcgIDI1IDI3IDI2ICAyNSAyNyAyNgorMjcgMjkgMjggIDI3IDI5IDI4ICAyNiAyOCAyNyAgMjQgMjYgMjQgIDIxIDIyIDIxICAyMCAyMCAyMAorMTggMTkgMTggIDE2IDE2IDE2ICAxNCAxNCAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICA0IDUgNSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgNTEgNTIgNTAgIDExMCAxMDkgOTQgIDExMCAxMDkgOTQgIDEwNSAxMDQgOTIKKzkwIDg5IDczICA3MiA3MyA2NyAgNTUgNTcgNTQgIDQzIDQ1IDQzICAzNSAzNyAzNiAgMzAgMzIgMzEKKzI2IDI4IDI3ICAyMCAyNCAyNCAgMTcgMjEgMjEgIDE2IDE5IDE5ICAxNSAxOCAxOCAgMTQgMTcgMTcKKzEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYKKzEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE3IDE3ICAxMyAxNyAxNyAgMTQgMTcgMTcKKzE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE4IDE4ICAxNCAxOCAxOCAgMTQgMTggMTgKKzE1IDE4IDE4ICAxNSAxOCAxOCAgMTUgMTkgMTkgIDE1IDE5IDE5ICAxNSAxOSAxOSAgMTUgMTkgMTkKKzE1IDE5IDE5ICAxNSAxOSAxOSAgMjcgMjkgMjggIDMyIDM0IDMzICAyOCAzMSAzMCAgMjcgMjkgMjgKKzMwIDMyIDMxICAzMCAzMiAzMSAgMzAgMzEgMjggIDI2IDI4IDI3ICAyMyAyNCAyNCAgMjEgMjIgMjEKKzE5IDIwIDE5ICAxNiAxNiAxNiAgMTQgMTQgMTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgNiA3IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDMgMyAzICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMTAgMTAgOSAgMTA4IDEwNyA5MyAgMTEwIDEwOSA5NCAgMTA4IDEwNyA5MyAgOTkgOTggODAKKzg0IDgzIDcyICA2MyA2NCA2MCAgNDkgNTEgNDggIDQwIDQzIDQxICAzMyAzNiAzNCAgMjcgMzAgMjkKKzIzIDI3IDI2ICAxOCAyMiAyMiAgMTcgMjAgMjAgIDE1IDE4IDE4ICAxNCAxNyAxNyAgMTMgMTYgMTYKKzEzIDE2IDE2ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYKKzEzIDE3IDE3ICAxMyAxNyAxNyAgMTQgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTggMTgKKzE0IDE4IDE4ICAxNCAxOCAxOCAgMTUgMTggMTggIDE1IDE4IDE4ICAxNSAxOSAxOSAgMTUgMTkgMTkKKzE1IDE5IDE5ICAxNSAxOSAxOSAgMTcgMjEgMjEgIDMzIDM2IDM0ICAzMiAzNCAzMyAgMzEgMzMgMzEKKzMzIDM2IDM0ICAzMyAzNiAzNCAgMzEgMzMgMzEgIDI3IDI5IDI4ICAyNSAyNyAyNiAgMjEgMjIgMjEKKzE5IDIwIDE5ICAxNyAxNyAxNyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgOCA4IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgNjMgNjQgNjAgIDEzNyAxMzMgMTAwICA0MyA0NSA0MyAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgNjggNzAgNjUgIDExMCAxMDkgOTQgIDExMCAxMDkgOTQgIDEwNSAxMDQgOTIgIDg0IDgzIDcyCis2OCA3MCA2NSAgNTUgNTcgNTQgIDQzIDQ1IDQzICAzNSAzNyAzNiAgMzAgMzIgMzEgIDI2IDI4IDI3CisyMCAyNCAyNCAgMTcgMjEgMjEgIDE2IDE5IDE5ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1CisxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1CisxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE2IDE2CisxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNyAxNyAgMTMgMTcgMTcgIDE0IDE3IDE3CisxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE4IDE4ICAxNCAxOCAxOCAgMTQgMTggMTggIDE1IDE4IDE4CisxNSAxOSAxOSAgMTUgMTkgMTkgIDE1IDE5IDE5ICAyMCAyNCAyNCAgMzIgMzQgMzMgIDM1IDM3IDM2CiszNyAzOSAzNyAgMzUgMzcgMzYgIDMzIDM2IDM0ICAzMCAzMiAzMSAgMjYgMjggMjcgIDIyIDI0IDIzCisyMCAyMCAyMCAgMTcgMTcgMTcgIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDggOCA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxIDEgMSAgOTkgOTggODAgIDE4NCAxNzkgMTQ5ICAxODQgMTc5IDE0OSAgNjggNzAgNjUgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTUgMTUgMTUgIDExMCAxMDkgOTQgIDExMCAxMDkgOTQgIDEwOCAxMDcgOTMgIDk5IDk4IDgwICA3MiA3MyA2NworNjEgNjMgNTcgIDQ5IDUxIDQ4ICAzOSA0MCAzOSAgMzMgMzYgMzQgIDI3IDMwIDI5ICAyMyAyNSAyNAorMTggMjIgMjIgIDE2IDE5IDE5ICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE1IDE1ICAxMiAxNSAxNQorMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNAorMTEgMTQgMTQgIDExIDE0IDE0ICAxMiAxNCAxNCAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNQorMTIgMTUgMTUgIDEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNiAxNgorMTMgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTcgMTcgIDE0IDE4IDE4ICAxNCAxOCAxOAorMTQgMTggMTggIDE1IDE4IDE4ICAxNSAxOSAxOSAgMTUgMTkgMTkgIDMwIDMyIDMxICAzOCAzOSAzNworMzkgNDAgMzkgIDM5IDQwIDM5ICAzNSAzNyAzNiAgMzEgMzMgMzEgIDI3IDI5IDI4ICAyMiAyNCAyMworMjAgMjAgMjAgIDE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICA4IDggNyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAzIDMgMworMTEwIDEwOSA5NCAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAxODQgMTc5IDE0OSAgNjggNzAgNjUgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorNjggNzAgNjUgIDExMCAxMDkgOTQgIDExMCAxMDkgOTQgIDEwNSAxMDQgOTIgIDg0IDgzIDcyICA2NSA2NiA2MQorNTEgNTIgNTAgIDQzIDQ1IDQzICAzNSAzNyAzNiAgMzAgMzIgMzEgIDI1IDI3IDI2ICAyMCAyMyAyMworMTcgMjAgMjAgIDE1IDE4IDE4ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMSAxNCAxNAorMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxMyAxMyAgMTEgMTMgMTMgIDExIDEzIDEzICAxMSAxMyAxMworMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNAorMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE2IDE2ICAxMyAxNiAxNgorMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNyAxNyAgMTMgMTcgMTcgIDE0IDE3IDE3ICAxNCAxNyAxNworMTQgMTggMTggIDE0IDE4IDE4ICAxNCAxOCAxOCAgMTYgMTkgMTkgIDM3IDM5IDM3ICA0MSA0MiA0MgorNDEgNDIgNDIgIDQxIDQyIDQyICAzOCAzOSAzNyAgMzIgMzQgMzMgIDI3IDI5IDI4ICAyMyAyNCAyNAorMjEgMjIgMjEgIDE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICA4IDggNyAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDExIDExIDExICAxMzcgMTMzIDEwMAorMTk3IDE5MyAxNTQgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMTg0IDE3OSAxNDkgIDMxIDMzIDMxICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTIgMTIgMTIKKzExMCAxMDkgOTQgIDExMCAxMDkgOTQgIDEwNSAxMDQgOTIgIDkwIDg5IDczICA3MiA3MyA2NyAgNTggNTkgNTUKKzQ2IDQ3IDQ1ICAzNyAzOSAzNyAgMzEgMzMgMzEgIDI2IDI4IDI3ICAyMCAyNCAyNCAgMTcgMjEgMjEKKzE1IDE4IDE4ICAxMyAxNiAxNiAgMTIgMTUgMTUgIDEyIDE0IDE0ICAxMSAxMyAxMyAgMTEgMTMgMTMKKzEwIDEzIDEzICAxMCAxMyAxMyAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMCAxMyAxMyAgMTAgMTMgMTMKKzEwIDEzIDEzICAxMCAxMyAxMyAgMTEgMTMgMTMgIDExIDEzIDEzICAxMSAxNCAxNCAgMTEgMTQgMTQKKzExIDE0IDE0ICAxMSAxNCAxNCAgMTIgMTQgMTQgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUKKzEzIDE2IDE2ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2ICAxMyAxNyAxNyAgMTMgMTcgMTcKKzE0IDE3IDE3ICAxNCAxNyAxNyAgMTQgMTggMTggIDIzIDI3IDI2ICA0MSA0MiA0MiAgNDEgNDIgNDIKKzQzIDQ1IDQzICA0MSA0MiA0MiAgMzkgNDAgMzkgIDMzIDM2IDM0ICAyNyAyOSAyOCAgMjMgMjQgMjQKKzIxIDIyIDIxICAxNyAxNyAxNyAgMTUgMTUgMTUgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgNiA3IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDI3IDI5IDI4ICAxNjggMTYzIDEyMCAgMjEwIDIwOCAxNTgKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjEwIDIwOCAxNTggIDEzNyAxMzMgMTAwICAxIDEgMSAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDYwIDYwIDU2CisxMTAgMTA5IDk0ICAxMDUgMTA0IDkyICAxMDUgMTA0IDkyICA4NCA4MyA3MiAgNjUgNjYgNjEgIDUxIDUyIDUwCis0MCA0MyA0MSAgMzMgMzYgMzQgIDI3IDMwIDI5ICAyMyAyNSAyNCAgMTggMjIgMjIgIDE2IDE5IDE5CisxNCAxNyAxNyAgMTIgMTUgMTUgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTAgMTMgMTMgIDEwIDEzIDEzCisxMCAxMyAxMyAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyCisxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEzIDEzICAxMCAxMyAxMyAgMTAgMTMgMTMgIDExIDEzIDEzCisxMSAxMyAxMyAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTEgMTQgMTQgIDEyIDE1IDE1CisxMiAxNSAxNSAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMyAxNiAxNiAgMTMgMTYgMTYgIDEzIDE2IDE2CisxMyAxNyAxNyAgMTMgMTcgMTcgIDE0IDE3IDE3ICAzMiAzNCAzMyAgNDMgNDUgNDMgIDQzIDQ1IDQzCis0MyA0NSA0MyAgNDMgNDUgNDMgIDM5IDQwIDM5ICAzMyAzNiAzNCAgMjcgMjkgMjggIDIzIDI0IDI0CisyMSAyMiAyMSAgMTcgMTcgMTcgIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDYgNyA3ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMSAxIDEgIDY4IDcwIDY1ICAxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTggIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDE4NCAxNzkgMTQ5ICAzNyAzOSAzNyAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDYgNyA3ICAxMDUgMTA0IDkyCisxMDUgMTA0IDkyICAxMDUgMTA0IDkyICA5OSA5OCA4MCAgNzIgNzMgNjcgIDU4IDU5IDU1ICA0NiA0NyA0NQorMzUgMzcgMzYgIDMwIDMyIDMxICAyNSAyNyAyNiAgMjAgMjMgMjMgIDE2IDE5IDE5ICAxNCAxNyAxNworMTIgMTUgMTUgIDEyIDE0IDE0ICAxMSAxMyAxMyAgMTAgMTMgMTMgIDEwIDEyIDEyICAxMCAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICA5IDEyIDEyICA5IDEyIDEyICA5IDEyIDEyICA5IDEyIDEyCisxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEzIDEzCisxMCAxMyAxMyAgMTAgMTMgMTMgIDExIDEzIDEzICAxMSAxMyAxMyAgMTEgMTQgMTQgIDExIDE0IDE0CisxMSAxNCAxNCAgMTIgMTUgMTUgIDEyIDE1IDE1ICAxMiAxNSAxNSAgMTIgMTUgMTUgIDEzIDE2IDE2CisxMyAxNiAxNiAgMTMgMTYgMTYgIDE3IDIwIDIwICA0MSA0MiA0MiAgNDYgNDcgNDUgIDQ2IDQ3IDQ1Cis0NiA0NyA0NSAgNDMgNDUgNDMgIDQwIDQxIDM5ICAzMyAzNiAzNCAgMjcgMjkgMjggIDIzIDI0IDI0CisyMCAyMCAyMCAgMTcgMTcgMTcgIDE1IDE1IDE1ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDQgNSA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNSAxNSAxNSAgMTEwIDEwOSA5NCAgMTk3IDE5MyAxNTQgIDIxNCAyMTIgMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzIzOSAyMzkgMTcwICAxODQgMTc5IDE0OSAgODQgODMgNzIgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNDcgNDggNDYgIDEwNSAxMDQgOTIKKzEwNSAxMDQgOTIgIDk5IDk4IDgwICA4NCA4MyA3MiAgNjggNzAgNjUgIDUxIDUyIDUwICA0MCA0MyA0MQorMzIgMzQgMzMgIDI3IDI5IDI4ICAyMiAyNCAyMyAgMTcgMjEgMjEgIDE1IDE4IDE4ICAxMyAxNiAxNgorMTIgMTUgMTUgIDExIDEzIDEzICAxMCAxMyAxMyAgMTAgMTIgMTIgIDkgMTIgMTIgIDkgMTIgMTIKKzkgMTIgMTIgIDkgMTIgMTIgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTIgMTIgIDkgMTIgMTIgIDkgMTIgMTIgIDkgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMgorMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMyAgMTAgMTMgMTMgIDEwIDEzIDEzICAxMSAxMyAxMworMTEgMTQgMTQgIDExIDE0IDE0ICAxMSAxNCAxNCAgMTIgMTQgMTQgIDEyIDE1IDE1ICAxMiAxNSAxNQorMTIgMTUgMTUgIDEzIDE2IDE2ICAyOCAzMSAzMCAgNDMgNDUgNDMgIDQ3IDQ4IDQ2ICA0NyA0OCA0NgorNDcgNDggNDYgIDQzIDQ1IDQzICA0MCA0MSAzOSAgMzMgMzYgMzQgIDI3IDI5IDI4ICAyMiAyNCAyMworMjAgMjAgMjAgIDE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICAzIDQgNCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxICA2MCA2MCA1NgorMTc3IDE3MiAxMzUgIDE5NyAxOTMgMTU0ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMTg0IDE3OSAxNDkgIDExMCAxMDkgOTQgIDMgNCA0ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDEgIDk5IDk4IDgwICAxMDUgMTA0IDkyCis5OSA5OCA4MCAgODcgODYgNzIgIDg0IDgzIDcyICA2MyA2NCA2MCAgNDYgNDcgNDUgIDM1IDM3IDM2CiszMCAzMiAzMSAgMjUgMjcgMjYgIDE4IDIyIDIyICAxNiAxOSAxOSAgMTQgMTcgMTcgIDEyIDE1IDE1CisxMSAxNCAxNCAgMTAgMTMgMTMgIDkgMTIgMTIgIDkgMTIgMTIgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTIgMTIgIDkgMTIgMTIKKzkgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEzIDEzICAxMCAxMyAxMworMTAgMTMgMTMgIDExIDEzIDEzICAxMSAxNCAxNCAgMTEgMTQgMTQgIDExIDE0IDE0ICAxMiAxNSAxNQorMTIgMTUgMTUgIDE0IDE3IDE3ICA0MSA0MiA0MiAgNDcgNDggNDYgIDQ5IDUxIDQ4ICA1MSA1MiA1MAorNDcgNDggNDYgIDQzIDQ1IDQzICA0MCA0MSAzOSAgMzMgMzYgMzQgIDI3IDI5IDI4ICAyMiAyNCAyMworMTkgMjAgMTkgIDE2IDE2IDE2ICAxNCAxNCAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMgorMTIgMTIgMTIgIDEyIDEyIDEyICAyIDIgMiAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMjMgMjQgMjQgIDEzNyAxMzMgMTAwICAxODQgMTc5IDE0OQorMjEwIDIwOCAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OQorMTEwIDEwOSA5NCAgMTMgMTMgMTMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMzAgMzIgMzEgIDEwNSAxMDQgOTIgIDk5IDk4IDgwCis4NCA4MyA3MiAgODQgODMgNzIgIDcyIDczIDY3ICA1NSA1NyA1NCAgNDEgNDIgNDIgIDMyIDM0IDMzCisyNyAyOSAyOCAgMjAgMjQgMjQgIDE3IDIwIDIwICAxNCAxNyAxNyAgMTMgMTYgMTYgIDEyIDE0IDE0CisxMCAxMyAxMyAgMTAgMTIgMTIgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTIgMTIgIDkgMTIgMTIgIDEwIDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIKKzEwIDEzIDEzICAxMCAxMyAxMyAgMTAgMTMgMTMgIDExIDEzIDEzICAxMSAxNCAxNCAgMTEgMTQgMTQKKzExIDE0IDE0ICAyNyAyOSAyOCAgNTUgNTYgNTMgIDcyIDczIDY3ICA1MSA1MiA1MCAgNTEgNTIgNTAKKzQ5IDUxIDQ4ICA0MyA0NSA0MyAgMzkgNDAgMzkgIDMyIDM0IDMzICAyNiAyOCAyNyAgMjEgMjIgMjEKKzE5IDIwIDE5ICAxNiAxNiAxNiAgMTggMTkgMTcgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIKKzEyIDEyIDEyICAxMiAxMiAxMiAgMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4IDggNyAgODQgODMgNzIgIDE4NCAxNzkgMTQ5ICAxOTcgMTkzIDE1NCAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMTQ1IDE0MSAxMDUKKzE5IDIwIDE5ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMTQgMTQgMTMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA3MiA3MyA2NyAgMTA1IDEwNCA5MiAgODQgODMgNzIKKzcyIDczIDY3ICA4NCA4MyA3MiAgNjggNzAgNjUgIDQ5IDUxIDQ4ICAzOSA0MCAzOSAgMzAgMzIgMzEKKzI1IDI3IDI2ICAxOCAyMiAyMiAgMTUgMTggMTggIDEzIDE2IDE2ICAxMiAxNSAxNSAgMTEgMTMgMTMKKzEwIDEyIDEyICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDEyIDEyICA5IDEyIDEyICA5IDEyIDEyCisxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEyIDEyICAxMCAxMyAxMyAgMTAgMTMgMTMgIDExIDEzIDEzCisxMyAxNiAxNiAgNDEgNDIgNDIgIDk5IDk4IDgwICAxNTggMTUzIDExMiAgNjUgNjYgNjEgIDUxIDUyIDUwCis0OSA1MSA0OCAgNDMgNDUgNDMgIDM5IDQwIDM5ICAzMSAzMyAzMSAgMjUgMjcgMjYgIDIxIDIyIDIxCisyMSAyMiAyMSAgNjggNzAgNjUgIDU1IDU2IDUzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTEgMTEgMTEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDMgMyAzCis2MyA2NCA2MCAgMTU4IDE1MyAxMTIgIDE4NCAxNzkgMTQ5ICAyMTAgMjA4IDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMTM3IDEzMyAxMDAgIDI3IDI5IDI4CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMjEgMjIgMjEgIDExMCAxMDkgOTQgIDUgNiA1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEzIDEzIDEzICAxMDUgMTA0IDkyICA5MCA4OSA3MyAgNzIgNzMgNjcKKzY4IDcwIDY1ICA4NCA4MyA3MiAgNjMgNjQgNjAgIDQ2IDQ3IDQ1ICAzNSAzNyAzNiAgMjcgMjkgMjgKKzIyIDI0IDIzICAxNyAyMCAyMCAgMTQgMTcgMTcgIDEyIDE1IDE1ICAxMSAxNCAxNCAgMTAgMTIgMTIKKzEwIDEyIDEyICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDEyIDEyICA5IDEyIDEyICAxMCAxMiAxMiAgMTAgMTIgMTIgIDEwIDEzIDEzICAxMCAxMyAxMworMzAgMzIgMzEgIDQ3IDQ4IDQ2ICAxNzcgMTcyIDEzNSAgMjEwIDIwOCAxNTggIDEzNyAxMzMgMTAwICA1NSA1NiA1MworNDkgNTEgNDggIDQzIDQ1IDQzICAzOCAzOSAzNyAgMzEgMzMgMzEgIDI1IDI3IDI2ICAyMiAyNCAyMworMTEwIDEwOSA5NCAgMTg0IDE3OSAxNDkgIDYzIDY0IDYwICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgOCA5IDkgIDAgMCAwICAxIDEgMSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMjEgMjIgMjEgIDEwNSAxMDQgOTIKKzE4NCAxNzkgMTQ5ICAyMTAgMjA4IDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTg0IDE3OSAxNDkgIDE0NSAxNDEgMTA1ICAyMyAyNCAyNCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis2OCA3MCA2NSAgMTg0IDE3OSAxNDkgIDEwNSAxMDQgOTIgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgNTEgNTIgNTAgIDk5IDk4IDgwICA4NCA4MyA3MiAgNjMgNjQgNjAKKzY4IDcwIDY1ICA3MiA3MyA2NyAgNTUgNTcgNTQgIDQxIDQyIDQyICAzMiAzNCAzMyAgMjUgMjcgMjYKKzIwIDIzIDIzICAxNiAxOSAxOSAgMTMgMTYgMTYgIDEyIDE0IDE0ICAxMCAxMyAxMyAgMTAgMTIgMTIKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTIgMTIgIDkgMTIgMTIgIDEwIDEyIDEyICAxNyAyMCAyMAorNDYgNDcgNDUgIDcyIDczIDY3ICAyMTAgMjA4IDE1OCAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICA2MyA2NCA2MAorNDkgNTEgNDggIDQzIDQ1IDQzICAzNyAzOSAzNyAgMzAgMzIgMzEgIDI0IDI2IDI0ICAxMDUgMTA0IDkyCisyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQgIDQ3IDQ4IDQ2ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgNiA3IDcgIDMzIDM2IDM0ICA0OCA0OSA0NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDggOCA3ICAyMyAyNCAyNCAgNTUgNTYgNTMgIDExMCAxMDkgOTQKKzIxMCAyMDggMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMTEwIDEwOSA5NCAgMjAgMjAgMjAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzExMCAxMDkgOTQgIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgNDcgNDggNDYgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEgMSAxICA5MCA4OSA3MyAgOTAgODkgNzMgIDcyIDczIDY3ICA1NSA1NiA1MworNzIgNzMgNjcgIDY4IDcwIDY1ICA1MSA1MiA1MCAgMzcgMzkgMzcgIDI4IDMxIDMwICAyMyAyNSAyNAorMTcgMjEgMjEgIDE1IDE4IDE4ICAxMiAxNSAxNSAgMTEgMTQgMTQgIDEwIDEzIDEzICA5IDEyIDEyCis5IDExIDExICA5IDExIDExICA5IDExIDExICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDExIDExCis5IDExIDExICA5IDExIDExICA5IDExIDExICA5IDEyIDEyICAxMyAxNiAxNiAgNDEgNDIgNDIKKzQ5IDUxIDQ4ICAxMTAgMTA5IDk0ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxMDUgMTA0IDkyCis0OSA1MSA0OCAgNDMgNDUgNDMgIDM1IDM3IDM2ICAzMCAzMSAyOCAgNDcgNDggNDYgIDE5NyAxOTMgMTU0CisyNTEgMjUxIDE4NyAgMTk3IDE5MyAxNTQgIDMxIDMzIDMxICAxMiAxMiAxMiAgMTIgMTIgMTIgIDEyIDEyIDEyCisxMiAxMiAxMiAgNTEgNTIgNTAgIDE4NCAxNzkgMTQ5ICA3MiA3MyA2NyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDIgMiAyCisxMSAxMSAxMSAgMjEgMjIgMjEgIDMwIDMyIDMxICA0MCA0MSAzOSAgNjAgNjAgNTYgIDE0NSAxNDEgMTA1CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4CisxODQgMTc5IDE0OSAgMTEwIDEwOSA5NCAgMTMgMTMgMTMgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDQgNSA0ICA2MSA2MSA1MyAgNDggNDkgNDUgIDMgNCAzCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNTYgMTUxIDExMSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMTEgMTEgMTEgIDAgMCAwCiswIDAgMCAgMjYgMjggMjcgIDk5IDk4IDgwICA4NCA4MyA3MiAgNjAgNjAgNTYgIDQzIDQ1IDQzCis3MiA3MyA2NyAgNjUgNjYgNjEgIDQ5IDUxIDQ4ICAzNSAzNyAzNiAgMjcgMjkgMjggIDIwIDI0IDI0CisxNyAyMCAyMCAgMTQgMTcgMTcgIDEyIDE1IDE1ICAxMSAxMyAxMyAgMTAgMTIgMTIgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDkgMTEgMTEgIDkgMTEgMTEKKzkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEgIDExIDEzIDEzICAzNyAzOSAzNyAgNDcgNDggNDYKKzUxIDUyIDUwICAxODQgMTc5IDE0OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTQ1IDE0MSAxMDUKKzQ3IDQ4IDQ2ICA0MSA0MiA0MiAgMzUgMzcgMzYgIDI3IDI5IDI4ICAxMzcgMTMzIDEwMCAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAxOTcgMTkzIDE1NCAgMTkgMjAgMTkgIDEyIDEyIDEyICAxMiAxMiAxMiAgMTIgMTIgMTIKKzI3IDI5IDI4ICAxODQgMTc5IDE0OSAgMjE0IDIxMiAxNTggIDYzIDY0IDYwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMSAxIDEgIDYgNyA3ICAxNiAxNiAxNiAgMjQgMjYgMjQKKzMwIDMyIDMxICAzOCAzOSAzNyAgNDcgNDggNDYgIDU1IDU3IDU0ICA2OCA3MCA2NSAgMTEwIDEwOSA5NAorMTk3IDE5MyAxNTQgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxODQgMTc5IDE0OQorMTA1IDEwNCA5MiAgOCA4IDcgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNjUgNjYgNjEgIDE4NCAxNzkgMTQ5ICAxNTYgMTUxIDExMQorMzAgMzIgMzEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTY4IDE2MyAxMjAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDExMCAxMDkgOTQgIDAgMCAwCiswIDAgMCAgNjAgNjAgNTYgIDg0IDgzIDcyICA2OCA3MCA2NSAgNTEgNTIgNTAgIDM4IDM5IDM3Cis4NCA4MyA3MiAgNjMgNjQgNjAgIDQzIDQ1IDQzICAzMyAzNiAzNCAgMjUgMjcgMjYgIDIwIDIzIDIyCisxNSAxOCAxOCAgMTMgMTYgMTYgIDEyIDE0IDE0ICAxMCAxMyAxMyAgOSAxMiAxMiAgOSAxMSAxMQorOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOSAxMSAxMSAgOSAxMSAxMSAgMTAgMTIgMTIgIDMzIDM2IDM0ICA0NiA0NyA0NSAgNTEgNTIgNTAKKzcyIDczIDY3ICAyMTAgMjA4IDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTc3IDE3MiAxMzUKKzQ3IDQ4IDQ2ICA0MSA0MiA0MiAgMzUgMzcgMzYgIDM3IDM5IDM3ICAxODQgMTc5IDE0OSAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAxOTcgMTkzIDE1NCAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMiAgMTIgMTIgMTIKKzExMCAxMDkgOTQgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMzcgMzkgMzcgIDAgMCAwICAwIDAgMAorMCAwIDAgIDIxIDIyIDIwICAyIDIgMSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorNCA1IDUgIDEyIDEyIDEyICAyMSAyMiAyMSAgMjUgMjcgMjYgIDMwIDMyIDMxICAzOCAzOSAzNworNDYgNDcgNDUgIDU1IDU2IDUzICA2MCA2MCA1NiAgNjUgNjYgNjEgIDY4IDcwIDY1ICAxMDUgMTA0IDkyCisxMTAgMTA5IDk0ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0ICAxODQgMTc5IDE0OSAgODQgODMgNzIKKzIgMiAyICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAxMyAxMyAxMyAgMTg0IDE3OSAxNDkgIDI1MSAyNTEgMTg3CisxOTcgMTkzIDE1NCAgNDMgNDQgNDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNDUgMTQxIDEwNSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDQzIDQ1IDQzCisyIDIgMiAgODQgODMgNzIgIDcyIDczIDY3ICA1OCA1OSA1NSAgNDEgNDIgNDIgIDM4IDM5IDM3Cis3MiA3MyA2NyAgNTggNTkgNTUgIDQxIDQyIDQyICAzMSAzMyAzMSAgMjUgMjcgMjYgIDE4IDIyIDIyCisxNCAxNyAxNyAgMTIgMTUgMTUgIDEyIDE0IDE0ICAxMCAxMiAxMiAgOSAxMiAxMiAgOSAxMSAxMQorOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOSAxMiAxMiAgMzEgMzMgMzEgIDQzIDQ1IDQzICA0OSA1MSA0OCAgNTUgNTYgNTMKKzExMCAxMDkgOTQgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxNjggMTYzIDEyMAorNDcgNDggNDYgIDQxIDQyIDQyICAzMyAzNiAzNCAgNjMgNjQgNjAgIDE5NyAxOTMgMTU0ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDE4NCAxNzkgMTQ5ICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyICAxNiAxNiAxNgorMTk3IDE5MyAxNTQgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjAgMjAgMjAgIDAgMCAwICAyIDIgMQorMTA4IDEwNyA5MyAgMTEwIDEwOSA5NCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMSAxIDEgIDQgNSA1ICAxMSAxMSAxMSAgMTggMTkgMTgKKzIyIDI0IDIzICAyNiAyOCAyNyAgMzIgMzQgMzMgIDM5IDQwIDM5ICA0NiA0NyA0NSAgNTEgNTIgNTAKKzU1IDU3IDU0ICA2MCA2MCA1NiAgNjMgNjQgNjAgIDYzIDY0IDYwICA2MyA2NCA2MCAgNTggNTkgNTUKKzYzIDY0IDYwICA5OSA5OCA4MCAgMTQ1IDE0MSAxMDUgIDEzNyAxMzMgMTAwICA0MyA0NSA0MyAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAzIDQgMyAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTEwIDEwOSA5NCAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMjUgMjcgMjYgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzk5IDk4IDgwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTU2IDE1MSAxMTEKKzI1IDI3IDI2ICA4NCA4MyA3MiAgNjUgNjYgNjEgIDQ3IDQ4IDQ2ICAzMiAzNCAzMyAgMzkgNDAgMzkKKzcyIDczIDY3ICA1NSA1NyA1NCAgNDAgNDEgMzkgIDMwIDMyIDMxICAyMyAyNSAyNCAgMTggMjIgMjIKKzE0IDE3IDE3ICAxMiAxNSAxNSAgMTEgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA5IDExIDExCis5IDExIDExICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis5IDExIDExICAyOCAzMSAzMCAgNDEgNDIgNDIgIDQ3IDQ4IDQ2ICA1NSA1NiA1MyAgNTggNTkgNTUKKzEzNyAxMzMgMTAwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTAgMjA4IDE1OCAgMTM3IDEzMyAxMDAKKzQ3IDQ4IDQ2ICA0MCA0MSAzOSAgMzIgMzQgMzMgIDc1IDc1IDYxICAxODQgMTc5IDE0OSAgMjM5IDIzOSAxNzAKKzI1MSAyNTEgMTg3ICAxNzcgMTcyIDEzNSAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMiAgNDMgNDQgNDEKKzE5NyAxOTMgMTU0ICAyNTEgMjUxIDE4NyAgMjEwIDIwOCAxNTggIDEwIDEwIDkgIDAgMCAwICA4NCA4MyA3MgorMjUxIDI1MSAxODcgIDg0IDgzIDcyICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMQorNiA3IDcgIDExIDExIDExICAxNyAxNyAxNyAgMjAgMjAgMjAgIDIzIDI0IDI0ICAyNyAyOSAyOAorMzIgMzQgMzMgIDM4IDM5IDM3ICA0MyA0NSA0MyAgNDcgNDggNDYgIDUxIDUyIDUwICA1NSA1NiA1MworNTggNTkgNTUgIDU4IDU5IDU1ICA1NSA1NyA1NCAgNTUgNTYgNTMgIDQ3IDQ4IDQ2ICA0MSA0MiA0MgorMzUgMzcgMzYgIDMxIDMzIDMxICA0NyA0OCA0NiAgMTQgMTQgMTMgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDY2IDY1IDU1ICA5OSA5OCA4MCAgMjAgMjAgMjAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA0MyA0NSA0MyAgMjE0IDIxMiAxNTgKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMTQ1IDE0MSAxMDUgIDMgMyAzICAwIDAgMCAgMCAwIDAKKzQ4IDQ5IDQ1ICAxODQgMTc5IDE0OSAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMTc3IDE3MiAxMzUKKzg0IDgzIDcyICA3MiA3MyA2NyAgNTUgNTYgNTMgIDM5IDQwIDM5ICAyNiAyOCAyNyAgMzkgNDAgMzkKKzY4IDcwIDY1ICA1MSA1MiA1MCAgMzkgNDAgMzkgIDI4IDMxIDMwICAyMiAyNCAyMyAgMTcgMjAgMjAKKzE0IDE3IDE3ICAxMiAxNCAxNCAgMTAgMTMgMTMgIDkgMTEgMTEgIDkgMTEgMTEgIDkgMTEgMTEKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzI3IDI5IDI4ICA0MCA0MSAzOSAgNDYgNDcgNDUgIDUxIDUyIDUwICA1NSA1NyA1NCAgNjMgNjQgNjAKKzEzMSAxMjcgOTMgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQgIDE2OCAxNjMgMTIwICA5NiA5NSA2OQorNDcgNDggNDYgIDQwIDQxIDM5ICAzMiAzNCAzMyAgNzEgNzEgNTcgIDE0NSAxNDEgMTA1ICAxODQgMTc5IDE0OQorMTg0IDE3OSAxNDkgIDEzMSAxMjcgOTMgIDEzIDEzIDEzICAxMiAxMiAxMiAgMTIgMTIgMTIgIDQ4IDQ5IDQ1CisxNjggMTYzIDEyMCAgMTg0IDE3OSAxNDkgIDE1NiAxNTEgMTExICA2IDcgNyAgMTQgMTQgMTMgIDE3NyAxNzIgMTM1CisyMzkgMjM5IDE3MCAgNDAgNDEgMzkgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDMgMyAzICA2IDcgNyAgMTEgMTEgMTEgIDE2IDE2IDE2CisxOCAxOSAxOCAgMjEgMjIgMjEgIDIzIDI0IDI0ICAyNyAyOSAyOCAgMzIgMzQgMzMgIDM3IDM5IDM3Cis0MSA0MiA0MiAgNDMgNDUgNDMgIDQ3IDQ4IDQ2ICA1MSA1MiA1MCAgNTEgNTIgNTAgIDUxIDUyIDUwCis1MSA1MiA1MCAgNDkgNTEgNDggIDQ2IDQ3IDQ1ICA0MCA0MSAzOSAgMzIgMzQgMzMgIDI1IDI3IDI2CisyMCAyMCAyMCAgMTQgMTQgMTMgIDIgMiAyICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMzMgMzYgMzQgIDE5NyAxOTMgMTU0ICAxODQgMTc5IDE0OQorNDEgNDIgNDIgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDMgMyAzICAxODQgMTc5IDE0OQorMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgNDggNDkgNDUgIDAgMCAwICAwIDAgMAorMTYgMTcgMTIgIDEyMSAxMTkgODcgIDE3NyAxNzIgMTM1ICAxOTQgMTg5IDE0NiAgMTg4IDE4NCAxNDYgIDE0NSAxNDEgMTA1Cis4MiA4MSA2MiAgNjMgNjQgNjAgIDQ2IDQ3IDQ1ICAzMSAzMyAzMSAgMjEgMjIgMjEgIDM1IDM3IDM2Cis2OCA3MCA2NSAgNTEgNTIgNTAgIDM3IDM5IDM3ICAyNyAzMCAyOSAgMjIgMjQgMjMgIDE3IDIwIDIwCisxMyAxNiAxNiAgMTIgMTQgMTQgIDEwIDEzIDEzICA5IDExIDExICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICAyNSAyNyAyNgorMzggMzkgMzcgIDQzIDQ1IDQzICA1MSA1MiA1MCAgNTUgNTYgNTMgIDYwIDYwIDU2ICA2MyA2NCA2MAorOTIgOTEgNzIgIDE1OCAxNTMgMTEyICAxNzYgMTcxIDEyNiAgMTcxIDE2NSAxMTcgIDE0OSAxNDMgOTggIDgyIDgxIDYyCis0NCA0NiA0MyAgMzggMzkgMzcgIDMwIDMyIDMxICA3MSA3MSA1NyAgMTMxIDEyNyA5MyAgMTYwIDE1NCAxMDYKKzE0OSAxNDMgOTggIDgyIDgxIDYyICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEyIDEyIDEyICA0NiA0NyA0MworMTIxIDExOSA4NyAgMTM0IDEzMSA5NiAgOTYgOTUgNjkgIDcgNyA2ICAzOCAzOSAzNyAgMTMxIDEyNyA5MworMTQ1IDE0MSAxMDUgIDEyIDEzIDEyICAwIDAgMCAgMSAxIDEgIDMgMyAzICA2IDcgNworMTAgMTAgOSAgMTIgMTIgMTIgIDE0IDE0IDEzICAxNiAxNiAxNiAgMTggMTkgMTggIDIxIDIyIDIxCisyMiAyNCAyMyAgMjYgMjggMjcgIDMwIDMxIDI4ICAzMyAzNiAzNCAgMzcgMzkgMzcgIDQwIDQxIDM5Cis0MSA0MiA0MiAgNDMgNDUgNDMgIDQ2IDQ3IDQ1ICA0NiA0NyA0NSAgNDYgNDcgNDUgIDQzIDQ1IDQzCis0MSA0MiA0MiAgMzcgMzkgMzcgIDMxIDMzIDMxICAyNiAyOCAyNyAgMjEgMjIgMjEgIDE2IDE2IDE2Cis2IDcgNyAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3NyAxNzIgMTM1ICAyNTEgMjUxIDE4NworMTk3IDE5MyAxNTQgIDI3IDI5IDI4ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxMTAgMTA5IDk0CisyMzkgMjM5IDE3MCAgMjM5IDIzOSAxNzAgIDE4NCAxNzkgMTQ5ICA4NyA4NiA3MiAgMiAyIDEgIDAgMCAwCisxIDEgMSAgODIgODEgNjIgIDE0MiAxMzcgOTQgIDE2NSAxNjEgMTA5ICAxNjUgMTYxIDEwOSAgMTMxIDEyNyA5MworNzUgNzUgNjEgIDU1IDU2IDUzICAzNyAzOSAzNyAgMjUgMjcgMjYgIDE5IDIwIDE5ICAzMiAzNCAzMworNjUgNjYgNjEgIDQ5IDUxIDQ4ICAzNSAzNyAzNiAgMjcgMjkgMjggIDIwIDIzIDIzICAxNiAxOSAxOQorMTMgMTYgMTYgIDEzIDEzIDEzICAxMCAxMiAxMiAgOSAxMSAxMSAgOCAxMCAxMCAgOCAxMCAxMAorOCA5IDkgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDIyIDI0IDIzICAzNSAzNyAzNgorNDEgNDIgNDIgIDQ3IDQ4IDQ2ICA1NSA1NiA1MyAgNTggNTkgNTUgIDYzIDY0IDYwICA2NSA2NiA2MQorNzEgNzEgNTcgIDEzMSAxMjcgOTMgIDE2MCAxNTQgMTA2ICAxNjAgMTU0IDEwNiAgMTQyIDEzNyA5NCAgODIgODEgNjIKKzQ2IDQ3IDQzICA0MCA0MSAzOSAgMzMgMzYgMzQgIDY2IDY1IDU1ICAxMjUgMTIyIDg3ICAxNDkgMTQzIDk4CisxNDIgMTM3IDk0ICA4MiA4MSA2MiAgMTcgMTcgMTcgIDE4IDE5IDE3ICAxNCAxNCAxMyAgNDYgNDcgNDMKKzExOCAxMTYgNzYgIDEyNSAxMjIgODcgIDk2IDk1IDY5ICAxNiAxNyAxMiAgNzEgNzEgNTcgIDEwMyAxMDEgNzcKKzgyIDgxIDYyICAxMSAxMSAxMSAgMTEgMTEgMTEgIDEzIDEzIDEzICAxNCAxNCAxMyAgMTQgMTQgMTMKKzE1IDE1IDE1ICAxNiAxNiAxNiAgMTcgMTcgMTcgIDE5IDIwIDE5ICAyMSAyMiAyMSAgMjMgMjQgMjQKKzI2IDI4IDI3ICAyNyAyOSAyOCAgMzEgMzMgMzEgIDMzIDM2IDM0ICAzNSAzNyAzNiAgMzggMzkgMzcKKzM5IDQwIDM5ICAzOSA0MCAzOSAgMzggMzkgMzcgIDM3IDM5IDM3ICAzNSAzNyAzNiAgMzEgMzMgMzEKKzI3IDI5IDI4ICAyNCAyNiAyNCAgMjEgMjIgMjEgIDE3IDE3IDE3ICAxMiAxMiAxMiAgMiAyIDIKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNjggNzAgNjUgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMTU2IDE1MSAxMTEgIDIgMiAxICAwIDAgMCAgMCAwIDAgIDQzIDQ0IDQxCisxNzcgMTcyIDEzNSAgMTg0IDE3OSAxNDkgIDE1OCAxNTMgMTEyICAxMDMgMTAxIDc3ICAxOSAyMCAxOCAgMCAwIDAKKzAgMCAwICA0NiA0NyA0MyAgMTMxIDEyNyA5MyAgMTYwIDE1NCAxMDYgIDE2MCAxNTQgMTA2ICAxMzEgMTI3IDkzCis3MSA3MSA1NyAgNDMgNDUgNDMgIDMwIDMyIDMxICAyMSAyMiAyMSAgMTYgMTYgMTYgIDI2IDI4IDI3Cis2MyA2NCA2MCAgNDcgNDggNDYgIDM1IDM3IDM2ICAyNiAyOCAyNyAgMjAgMjMgMjMgIDE2IDE5IDE5CisxMyAxNiAxNiAgMTMgMTMgMTMgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA4IDEwIDEwCis3IDkgOSAgNyA5IDkgIDggOSA5ICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwCis4IDEwIDEwICA4IDEwIDEwICA4IDEwIDEwICAyMCAyMCAyMCAgMzMgMzYgMzQgIDQwIDQxIDM5Cis0NiA0NyA0NSAgNTEgNTIgNTAgIDU1IDU3IDU0ICA2MCA2MCA1NiAgNjMgNjQgNjAgIDY1IDY2IDYxCis2NiA2NSA1NSAgMTE4IDExNiA3NiAgMTUxIDE0NyA5OCAgMTY1IDE2MSAxMDkgIDE1MSAxNDcgOTggIDEyMSAxMTkgODcKKzk2IDk1IDY5ICA5NiA5NSA2OSAgOTYgOTUgNjkgIDEwMyAxMDEgNzcgIDE0MiAxMzcgOTQgIDE1MSAxNDcgOTgKKzE0MiAxMzcgOTQgIDEwMyAxMDEgNzcgIDgyIDgxIDYyICA4MiA4MSA2MiAgODIgODEgNjIgIDk2IDk1IDY5CisxMzEgMTI3IDkzICAxNDIgMTM3IDk0ICAxMDMgMTAxIDc3ICA0NiA0NyA0MyAgOTYgOTUgNjkgIDExOCAxMTYgNzYKKzcxIDcxIDU3ICAxNCAxNCAxMyAgMTQgMTQgMTMgIDE1IDE1IDE1ICAxNSAxNSAxNSAgMTYgMTYgMTYKKzE2IDE2IDE2ICAxNyAxNyAxNyAgMTggMTkgMTggIDIwIDIwIDIwICAyMSAyMiAyMSAgMjMgMjQgMjQKKzI1IDI3IDI2ICAyNyAyOSAyOCAgMzAgMzEgMjggIDMwIDMyIDMxICAzMSAzMyAzMSAgMzEgMzMgMzEKKzMxIDMzIDMxICAzMSAzMyAzMSAgMzAgMzEgMjggIDI3IDI5IDI4ICAyNSAyNyAyNiAgMjIgMjQgMjMKKzIwIDIwIDIwICAxNiAxNiAxNiAgMTMgMTMgMTMgIDYgNyA3ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCis1OCA1OSA1NSAgNjggNzAgNjUgIDggOCA3ICAwIDAgMCAgMTAgMTAgOSAgMjEwIDIwOCAxNTgKKzI1MSAyNTEgMTg3ICAxODQgMTc5IDE0OSAgMzggMzkgMzcgIDAgMCAwICAwIDAgMCAgOCA4IDcKKzEwMyAxMDEgNzcgIDE0OSAxNDMgOTggIDE0OSAxNDMgOTggIDExOCAxMTYgNzYgIDQwIDQxIDM5ICAyNSAyNyAyNQorNTMgNTUgNDcgIDgyIDgxIDYyICAxNDQgMTM5IDk5ICAxNjUgMTYxIDEwOSAgMTY1IDE2MSAxMDkgIDE0MiAxMzcgOTQKKzcxIDcxIDU3ICAzNSAzNyAzNiAgMjQgMjYgMjQgIDE4IDE5IDE4ICAxNSAxNSAxNSAgMjIgMjQgMjMKKzYzIDY0IDYwICA0NiA0NyA0NSAgMzMgMzYgMzQgIDI2IDI4IDI3ICAyMCAyMyAyMiAgMTcgMTggMTcKKzEyIDE1IDE1ICAxMSAxMyAxMyAgMTAgMTIgMTIgIDkgMTEgMTEgIDggMTAgMTAgIDggMTAgMTAKKzcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5ICA4IDkgOSAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgMTYgMTYgMTYgIDMwIDMxIDI4ICAzNSAzNyAzNiAgNDEgNDIgNDIKKzQ3IDQ4IDQ2ICA1NSA1NiA1MyAgNTggNTkgNTUgIDYzIDY0IDYwICA2NSA2NiA2MSAgNjUgNjYgNjEKKzYxIDYxIDUzICAxMDMgMTAxIDc3ICAxNTEgMTQ3IDk4ICAxNzEgMTY1IDExNyAgMTcxIDE2NSAxMTcgIDE2OCAxNjMgMTIwCisxNTggMTUzIDExMiAgMTU4IDE1MyAxMTIgIDE1NSAxNDkgMTA5ICAxNTEgMTQ3IDk4ICAxNTEgMTQ3IDk4ICAxNjAgMTU0IDEwNgorMTUxIDE0NyA5OCAgMTQ5IDE0MyA5OCAgMTQyIDEzNyA5NCAgMTQ5IDE0MyA5OCAgMTQ5IDE0MyA5OCAgMTQ5IDE0MyA5OAorMTU1IDE0OSAxMDkgIDE1MSAxNDcgOTggIDEzMSAxMjcgOTMgIDEwMyAxMDEgNzcgIDEyNSAxMjIgODcgIDExOCAxMTYgNzYKKzcxIDcxIDU3ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNyAxNyAxNyAgMTcgMTcgMTcKKzE3IDE3IDE3ICAxNyAxNyAxNyAgMTggMTkgMTggIDE5IDIwIDE5ICAyMCAyMCAyMCAgMjEgMjIgMjEKKzIzIDI0IDI0ICAyNCAyNiAyNCAgMjUgMjcgMjYgIDI2IDI4IDI3ICAyNiAyOCAyNyAgMjYgMjggMjcKKzI1IDI3IDI2ICAyNCAyNiAyNCAgMjIgMjQgMjMgIDIxIDIyIDIxICAxOSAyMCAxOSAgMTYgMTYgMTYKKzE0IDE0IDEzICA4IDggNyAgMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCisyMCAyMCAyMCAgMTg0IDE3OSAxNDkgIDE2OCAxNjMgMTIwICAyMSAyMiAyMSAgMCAwIDAgIDEwNSAxMDQgOTIKKzE3NyAxNzIgMTM1ICAxNDUgMTQxIDEwNSAgNzEgNzEgNTcgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzY2IDY1IDU1ICAxMzEgMTI3IDkzICAxNTEgMTQ3IDk4ICAxNDIgMTM3IDk0ICAxMTggMTE2IDc2ICAxMjEgMTE5IDg3CisxNDUgMTQxIDEwNSAgMTU4IDE1MyAxMTIgIDE3NiAxNzEgMTI2ICAxNzggMTc0IDEyOCAgMTc2IDE3MSAxMjYgIDE0OSAxNDUgMTAzCis5NiA5NSA2OSAgMzEgMzMgMzEgIDIxIDIyIDIxICAxNiAxNiAxNiAgMTQgMTQgMTMgIDE4IDE5IDE4Cis2MCA2MCA1NiAgNDYgNDcgNDUgIDMzIDM2IDM0ICAyNSAyNyAyNiAgMjEgMjIgMjEgIDE1IDE4IDE4CisxMiAxNSAxNSAgMTEgMTMgMTMgIDkgMTEgMTEgIDggMTAgMTAgIDggMTAgMTAgIDggOSA5Cis3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDggOSA5Cis4IDkgOSAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMCAgOCAxMCAxMAorOCAxMCAxMCAgMTAgMTIgMTIgIDI2IDI4IDI3ICAzMSAzMyAzMSAgMzggMzkgMzcgIDQzIDQ1IDQzCis1MSA1MiA1MCAgNTUgNTYgNTMgIDYwIDYwIDU2ICA2MyA2NCA2MCAgNjUgNjYgNjEgIDY4IDcwIDY1Cis2MyA2NCA2MCAgOTYgOTUgNjkgIDE1OCAxNTMgMTEyICAxNzggMTc0IDEyOCAgMTg4IDE4NCAxNDYgIDE5NCAxODkgMTQ2CisxOTQgMTg5IDE0NiAgMTg4IDE4NCAxNDYgIDE4NCAxODEgMTM2ICAxNzYgMTcxIDEyNiAgMTcxIDE2NSAxMTcgIDE3MyAxNjcgMTExCisxNzMgMTY3IDExMSAgMTY1IDE2MSAxMDkgIDE3MSAxNjUgMTE3ICAxNzQgMTcwIDEyMSAgMTc2IDE3MSAxMjYgIDE3OCAxNzQgMTI4CisxNzggMTc0IDEyOCAgMTc0IDE3MCAxMjEgIDE2MCAxNTQgMTA2ICAxNDkgMTQzIDk4ICAxNDkgMTQzIDk4ICAxMjUgMTIyIDg3Cis3MSA3MSA1NyAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNyAxNyAxNyAgMTcgMTcgMTcgIDE3IDE3IDE3CisxNyAxNyAxNyAgMTcgMTcgMTcgIDE3IDE3IDE3ICAxOCAxOSAxOCAgMTkgMjAgMTkgIDIwIDIwIDIwCisyMSAyMiAyMSAgMjEgMjIgMjEgIDIxIDIyIDIxICAyMiAyNCAyMyAgMjEgMjIgMjEgIDIxIDIyIDIxCisyMSAyMiAyMSAgMTkgMjAgMTkgIDE4IDE5IDE4ICAxNiAxNiAxNiAgMTQgMTQgMTMgIDExIDExIDExCiszIDMgMyAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDEwNSAxMDQgOTIgIDE5NyAxOTMgMTU0ICAxMTAgMTA5IDk0ICA5IDkgOCAgMzYgMzggMzUKKzEyMSAxMTkgODcgIDEzMSAxMjcgOTMgIDk2IDk1IDY5ICAxOCAxOSAxNyAgMzAgMzEgMjggIDY2IDY1IDU1Cis5NiA5NSA2OSAgMTQyIDEzNyA5NCAgMTYwIDE1NCAxMDYgIDE2MCAxNTQgMTA2ICAxNjAgMTU0IDEwNiAgMTY4IDE2MyAxMjAKKzE4NCAxODEgMTM2ICAxOTQgMTkxIDE0OCAgMTk3IDE5MyAxNTQgIDE5NyAxOTMgMTU0ICAxOTQgMTg5IDE0NiAgMTY4IDE2MyAxMjAKKzEyNSAxMjIgODcgIDQ2IDQ3IDQzICAxOCAxOSAxOCAgMTUgMTUgMTUgIDEzIDEzIDEzICAxNCAxNCAxMworNTUgNTcgNTQgIDQzIDQ1IDQzICAzMiAzNCAzMyAgMjUgMjcgMjYgIDE4IDIyIDIyICAxNyAxNyAxNworMTIgMTQgMTQgIDEwIDEyIDEyICA5IDExIDExICA4IDEwIDEwICA4IDkgOSAgNyA5IDkKKzYgOCA4ICA3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkKKzcgOSA5ICA4IDkgOSAgOCA5IDkgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDMyIDM0IDMzICA0MSA0MiA0MiAgMzUgMzcgMzYgIDM5IDQwIDM5ICAzNyAzOSAzNworMzUgMzcgMzYgIDU1IDU3IDU0ICA2MCA2MCA1NiAgNjMgNjQgNjAgIDY1IDY2IDYxICA2NSA2NiA2MQorNjEgNjMgNTcgIDExNSAxMTMgODIgIDE2OCAxNjMgMTIwICAxOTQgMTkxIDE0OCAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4CisyMTAgMjA4IDE1OCAgMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0ICAxOTQgMTg5IDE0NiAgMTg2IDE4MiAxMjggIDE3NiAxNzEgMTI2CisxNzQgMTcwIDEyMSAgMTc2IDE3MSAxMjYgIDE4NiAxODIgMTI4ICAxOTAgMTg2IDEzNiAgMTk0IDE5MSAxNDggIDE5NyAxOTMgMTU0CisxOTcgMTkzIDE1NCAgMTg4IDE4NCAxNDYgIDE4MSAxNzYgMTM3ICAxNzQgMTcwIDEyMSAgMTY1IDE2MSAxMDkgIDE0MiAxMzcgOTQKKzgyIDgxIDYyICAyNCAyNiAyNCAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYKKzE3IDE3IDE3ICAxNyAxNyAxNyAgMTcgMTcgMTcgIDE3IDE3IDE3ICAxOCAxOSAxOCAgMTkgMjAgMTkKKzE5IDIwIDE5ICAxOSAyMCAxOSAgMjAgMjAgMjAgIDE5IDIwIDE5ICAxOSAyMCAxOSAgMTggMTkgMTgKKzE3IDE3IDE3ICAxNSAxNSAxNSAgMTMgMTMgMTMgIDEyIDEyIDEyICA2IDcgNyAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMTcgMTggMTcgIDEzNyAxMzMgMTAwICAxMTUgMTEzIDgyICA1MyA1NSA0NyAgMTkgMjAgMTgKKzEwMyAxMDEgNzcgIDE0NCAxMzkgOTkgIDEzNyAxMzMgMTAwICAxMTUgMTEzIDgyICAxMzcgMTMzIDEwMCAgMTU2IDE1MSAxMTEKKzE1OCAxNTMgMTEyICAxNjQgMTU5IDExMSAgMTcxIDE2NSAxMTcgIDE3NCAxNzAgMTIxICAxNzggMTc0IDEyOCAgMTk0IDE4OSAxNDYKKzIwNCAyMDEgMTU1ICAyMTQgMjEyIDE1OCAgMjE0IDIxMiAxNTggIDIxNCAyMTIgMTU4ICAyMTAgMjA4IDE1OCAgMTg4IDE4NCAxNDYKKzE1OCAxNTMgMTEyICA4NyA4NiA3MiAgMTcgMTcgMTcgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTUgMTUgMTUKKzU1IDU2IDUzICA0MyA0NSA0MyAgMzIgMzQgMzMgIDI0IDI2IDI0ICAxNyAyMCAyMCAgMTYgMTYgMTYKKzEyIDE0IDE0ICAxMCAxMiAxMiAgOCAxMCAxMCAgOCAxMCAxMCAgNyA5IDkgIDYgOCA4Cis2IDggOCAgNiA4IDggIDYgOCA4ICA3IDkgOSAgNyA5IDkgIDcgOSA5Cis3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgOCA5IDkgIDggMTAgMTAKKzggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzggMTAgMTAgIDExMCAxMDkgOTQgIDg0IDgzIDcyICA0OSA1MSA0OCAgMjYgMjggMjcgIDggMTAgMTAKKzggOSA5ICA1MSA1MiA1MCAgNTggNTkgNTUgIDYzIDY0IDYwICA2MyA2NCA2MCAgNjMgNjQgNjAKKzY2IDY1IDU1ICAxMzQgMTMxIDk2ICAxODEgMTc2IDEzNyAgMjEwIDIwOCAxNTggIDIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MAorMjM5IDIzOSAxNzAgIDIyNCAyMjMgMTU5ICAyMTAgMjA4IDE1OCAgMjA0IDIwMSAxNTUgIDE5NCAxODkgMTQ2ICAxODYgMTgyIDEyOAorMTg2IDE4MiAxMjggIDE4NCAxODEgMTM2ICAxOTQgMTg5IDE0NiAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OAorMjEwIDIwOCAxNTggIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NCAgMTkwIDE4NiAxMzYgIDE3NiAxNzEgMTI2ICAxNTUgMTQ5IDEwOQorMTE4IDExNiA3NiAgMzYgMzggMzUgIDE1IDE1IDE1ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2CisxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE3IDE3IDE3CisxNyAxNyAxNyAgMTcgMTcgMTcgIDE3IDE3IDE3ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE1IDE1IDE1CisxMyAxMyAxMyAgMTIgMTIgMTIgIDggOCA3ICAyIDIgMiAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICA1MyA1NSA0NyAgMTAzIDEwMSA3NyAgOTYgOTUgNjkgIDUzIDU1IDQ3CisxMDMgMTAxIDc3ICAxNTggMTUzIDExMiAgMTc3IDE3MiAxMzUgIDE4NCAxNzkgMTQ5ICAxODggMTg0IDE0NiAgMTk3IDE5MyAxNTQKKzE5NCAxODkgMTQ2ICAxOTAgMTg2IDEzNiAgMTg0IDE4MSAxMzYgIDE4NCAxODEgMTM2ICAxOTQgMTg5IDE0NiAgMjEwIDIwOCAxNTgKKzIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMjQgMjIzIDE1OSAgMjA0IDIwMSAxNTUKKzE3NyAxNzIgMTM1ICAxMjEgMTE5IDg3ICAzMCAzMSAyOCAgMTMgMTMgMTMgIDEyIDEyIDEyICAzOSA0MCAzOQorNjAgNjAgNTYgIDQzIDQ1IDQzICAzMiAzNCAzMyAgMjMgMjUgMjQgIDE4IDE5IDE4ICAxMyAxNiAxNgorMTMgMTMgMTMgIDkgMTEgMTEgIDggMTAgMTAgIDggOSA5ICA2IDggOCAgNiA4IDgKKzYgOCA4ICA2IDggOCAgNiA4IDggIDYgOCA4ICA2IDggOCAgNyA5IDkKKzcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkKKzcgOSA5ICA4IDkgOSAgOCA5IDkgIDggMTAgMTAgIDggMTAgMTAgIDggMTAgMTAKKzE0IDE3IDE3ICAxOTcgMTkzIDE1NCAgMTU4IDE1MyAxMTIgIDU1IDU3IDU0ICA3IDkgOSAgNyA5IDkKKzggMTAgMTAgIDUxIDUyIDUwICA1OCA1OSA1NSAgNjAgNjAgNTYgIDYzIDY0IDYwICA2MyA2NCA2MAorNzEgNzEgNTcgIDE1NSAxNDkgMTA5ICAxOTQgMTkxIDE0OCAgMjE0IDIxMiAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE5NyAxOTMgMTU0ICAxOTAgMTg2IDEzNgorMTkwIDE4NiAxMzYgIDE5NCAxODkgMTQ2ICAyMDQgMjAxIDE1NSAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5ICAyMzkgMjM5IDE3MAorMjM5IDIzOSAxNzAgIDIyNCAyMjMgMTU5ICAyMTAgMjA4IDE1OCAgMjA0IDIwMSAxNTUgIDE5MCAxODYgMTM2ICAxNjQgMTU5IDExMQorMTI1IDEyMiA4NyAgNDAgNDEgMzkgIDE1IDE1IDE1ICAxNSAxNSAxNSAgMTUgMTUgMTUgIDE1IDE1IDE1CisxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2ICAxNiAxNiAxNiAgMTYgMTYgMTYgIDE2IDE2IDE2CisxNiAxNiAxNiAgMTYgMTYgMTYgIDE1IDE1IDE1ICAxNCAxNCAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyCis4IDkgOSAgMyAzIDMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAyMSAyMiAyMCAgOTYgOTUgNjkgIDEyNSAxMjIgODcgIDEyMSAxMTkgODcKKzE0NCAxMzkgOTkgIDE3NyAxNzIgMTM1ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIxNCAyMTIgMTU4ICAyMTQgMjEyIDE1OAorMjEwIDIwOCAxNTggIDIwNCAyMDEgMTU1ICAxOTQgMTkxIDE0OCAgMTk0IDE4OSAxNDYgIDIwNCAyMDEgMTU1ICAyMTQgMjEyIDE1OAorMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMTQgMjEyIDE1OAorMTg4IDE4NCAxNDYgIDE0NSAxNDEgMTA1ICA1MyA1NSA0NyAgMTIgMTIgMTIgIDE1IDE1IDE1ICA2MyA2NCA2MAorNjMgNjQgNjAgIDQxIDQyIDQyICAzMSAzMyAzMSAgMjMgMjQgMjQgIDE3IDE4IDE3ICAxMiAxNSAxNQorMTEgMTMgMTMgIDkgMTEgMTEgIDggOSA5ICA3IDkgOSAgNiA4IDggIDYgOCA4Cis2IDcgNyAgNiA3IDcgIDYgOCA4ICA2IDggOCAgNiA4IDggIDYgOCA4Cis2IDggOCAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDcgOSA5Cis3IDkgOSAgNyA5IDkgIDcgOSA5ICA3IDkgOSAgNyA5IDkgIDggOCA3Cis0MyA0NSA0MyAgMjUxIDI1MSAxODcgIDE1NiAxNTEgMTExICA4IDEwIDEwICA3IDkgOSAgNyA5IDkKKzIxIDIyIDIxICA1MSA1MiA1MCAgNTUgNTYgNTMgIDU1IDU3IDU0ICA1OCA1OSA1NSAgNTggNTkgNTUKKzc1IDc1IDYxICAxNTggMTUzIDExMiAgMTk3IDE5MyAxNTQgIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAyMDQgMjAxIDE1NSAgMTk0IDE4OSAxNDYKKzE5MCAxODYgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NCAgMTc2IDE3MSAxMjYKKzEyNSAxMjIgODcgIDM2IDM4IDM1ICAxNCAxNCAxMyAgMTQgMTQgMTMgIDE1IDE1IDE1ICAxNSAxNSAxNQorMTUgMTUgMTUgIDE1IDE1IDE1ICAxNSAxNSAxNSAgMTUgMTUgMTUgIDE1IDE1IDE1ICAxNSAxNSAxNQorMTUgMTUgMTUgIDE0IDE0IDEzICAxMyAxMyAxMyAgMTIgMTIgMTIgIDEwIDEwIDkgIDMgNCA0CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICA3IDcgNSAgNzEgNzEgNTcgIDEzMSAxMjcgOTMgIDE1OCAxNTMgMTEyCisxNzcgMTcyIDEzNSAgMTk3IDE5MyAxNTQgIDIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyMzggMjM3IDE2OCAgMjEwIDIwOCAxNTggIDIwNCAyMDEgMTU1ICAxOTcgMTkzIDE1NCAgMjA0IDIwMSAxNTUgIDIxNCAyMTIgMTU4CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4CisxOTcgMTkzIDE1NCAgMTU2IDE1MSAxMTEgIDY2IDY1IDU1ICAxMiAxMiAxMiAgMzcgMzkgMzcgIDU4IDU5IDU1Cis1OCA1OSA1NSAgNDEgNDIgNDIgIDMxIDMzIDMxICAyMiAyNCAyMyAgMTcgMTcgMTcgIDEyIDE0IDE0CisxMCAxMiAxMiAgOCAxMCAxMCAgNiA4IDggIDYgOCA4ICA2IDcgNyAgNiA3IDcKKzYgNyA3ICA1IDcgNyAgNiA3IDcgIDYgNyA3ICA2IDggOCAgNiA4IDgKKzYgOCA4ICA2IDggOCAgNiA4IDggIDcgOSA5ICA3IDkgOSAgNyA5IDkKKzcgOSA5ICA2IDggOCAgNiA4IDggIDYgOCA4ICA2IDggOCAgNiA4IDgKKzYxIDYzIDU3ICAxOTcgMTkzIDE1NCAgMTYgMTkgMTkgIDYgOCA4ICA2IDggOCAgOCA5IDkKKzQxIDQyIDQyICA0NyA0OCA0NiAgNTEgNTIgNTAgIDUxIDUyIDUwICA1NSA1NiA1MyAgNTUgNTYgNTMKKzcxIDcxIDU3ICAxNTggMTUzIDExMiAgMTk3IDE5MyAxNTQgIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxNCAyMTIgMTU4ICAyMDQgMjAxIDE1NSAgMTk0IDE4OSAxNDYKKzE5MCAxODYgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIyNCAyMjMgMTU5ICAyMDQgMjAxIDE1NSAgMTc3IDE3MiAxMzUKKzEyMSAxMTkgODcgIDMwIDMxIDI4ICAxMyAxMyAxMyAgMTQgMTQgMTMgIDE0IDE0IDEzICAxNCAxNCAxMworMTQgMTQgMTMgIDE0IDE0IDEzICAxNSAxNSAxNSAgMTUgMTUgMTUgIDE0IDE0IDEzICAxMyAxMyAxMworMTIgMTIgMTIgIDEyIDEyIDEyICAxMCAxMCA5ICA0IDUgNSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNDggNDkgNDUgIDEzMSAxMjcgOTMgIDE3NCAxNzAgMTIxCisxOTQgMTg5IDE0NiAgMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDIwNCAyMDEgMTU1ICAxOTcgMTkzIDE1NCAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4CisyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAgIDIxNCAyMTIgMTU4CisxOTQgMTkxIDE0OCAgMTU2IDE1MSAxMTEgIDcxIDcxIDU3ICAxOSAyMCAxOSAgNTEgNTIgNTAgIDUxIDUyIDUwCis1MSA1MiA1MCAgNDEgNDIgNDIgIDMwIDMyIDMxICAyMSAyMiAyMSAgMTcgMTcgMTcgIDEzIDEzIDEzCis5IDExIDExICA4IDkgOSAgNiA4IDggIDYgNyA3ICA2IDcgNyAgNSA3IDcKKzUgNiA1ICA1IDYgNSAgNSA3IDcgIDUgNyA3ICA2IDcgNyAgNiA3IDcKKzYgOCA4ICA2IDggOCAgNiA4IDggIDYgNyA3ICA2IDcgNyAgNiA3IDcKKzYgNyA3ICA2IDggOCAgNiA4IDggIDYgOCA4ICA2IDggOCAgNiA4IDgKKzU1IDU2IDUzICA0MyA0NSA0MyAgNiA4IDggIDYgOCA4ICA2IDggOCAgNDcgNDggNDYKKzYwIDYwIDU2ICA0NyA0OCA0NiAgNDYgNDcgNDUgIDQ3IDQ4IDQ2ICAzOCAzOSAzNyAgMTAgMTIgMTIKKzY2IDY1IDU1ICAxNDUgMTQxIDEwNSAgMTk3IDE5MyAxNTQgIDIxNCAyMTIgMTU4ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjI0IDIyMyAxNTkgIDIxMCAyMDggMTU4ICAxOTQgMTkxIDE0OCAgMTg0IDE4MSAxMzYKKzE4NCAxODEgMTM2ICAxOTQgMTg5IDE0NiAgMjA0IDIwMSAxNTUgIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwICAyMTAgMjA4IDE1OCAgMTgxIDE3NiAxMzcKKzExNSAxMTMgODIgIDIxIDIyIDIwICAxMyAxMyAxMyAgMTMgMTMgMTMgIDEzIDEzIDEzICAxMyAxMyAxMworMTQgMTQgMTMgIDEzIDEzIDEzICAxMyAxMyAxMyAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMSAxMSAxMQorMTAgMTAgOSAgNiA3IDcgIDEgMSAxICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAyIDIgMSAgNjYgNjUgNTUgIDE0NCAxMzkgOTkgIDE3OCAxNzQgMTI4CisyMDQgMjAxIDE1NSAgMjE0IDIxMiAxNTggIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDIwNCAyMDEgMTU1ICAxOTQgMTkxIDE0OCAgMTk3IDE5MyAxNTQgIDIwNCAyMDEgMTU1CisyMTQgMjEyIDE1OCAgMjM5IDIzOSAxNzAgIDIzOSAyMzkgMTcwICAyMzkgMjM5IDE3MCAgMjE0IDIxMiAxNTggIDIxMCAyMDggMTU4CisxODQgMTgxIDEzNiAgMTQ5IDE0NSAxMDMgIDY2IDY1IDU1ICA0MSA0MiA0MiAgNDcgNDggNDYgIDQ2IDQ3IDQ1Cis0MyA0NSA0MyAgMzkgNDAgMzkgIDI4IDMxIDMwICAyMSAyMiAyMSAgMTYgMTYgMTYgIDEwIDEyIDEyCis4IDEwIDEwICA2IDggOCAgNiA3IDcgIDYgNyA3ICA1IDYgNSAgNSA2IDUKKzUgNiA1ICA1IDYgNSAgNSA2IDUgIDUgNiA1ICA1IDcgNyAgNSA3IDcKKzYgNyA3ICA2IDcgNyAgNiA3IDcgIDUgNyA3ICA1IDcgNyAgNSA3IDcKKzUgNyA3ICA2IDcgNyAgNiA3IDcgIDYgNyA3ICA2IDcgNyAgNiA4IDgKKzYgOCA4ICA2IDggOCAgNiA3IDcgIDYgNyA3ICA0NiA0NyA0NSAgMTU2IDE1MSAxMTEKKzEwNSAxMDQgOTIgIDU4IDU5IDU1ICA0MyA0NSA0MyAgMzIgMzQgMzMgIDYgOCA4ICA2IDggOAorNDkgNTEgNDggIDEyNSAxMjIgODcgIDE4MSAxNzYgMTM3ICAyMDQgMjAxIDE1NSAgMjE0IDIxMiAxNTggIDIzOSAyMzkgMTcwCisyMzkgMjM5IDE3MCAgMjE0IDIxMiAxNTggIDIxMCAyMDggMTU4ICAxOTcgMTkzIDE1NCAgMTgxIDE3NiAxMzcgIDE3NiAxNzEgMTI2CisxNzYgMTcxIDEyNiAgMTg0IDE4MSAxMzYgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OCAgMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjEwIDIwOCAxNTggIDE3NyAxNzIgMTM1Cis5OSA5OCA4MCAgMTMgMTMgMTMgIDEyIDEyIDEyICAxMiAxMiAxMiAgMTMgMTMgMTMgIDEyIDEyIDEyCisxMiAxMiAxMiAgMTIgMTIgMTIgIDExIDExIDExICAxMSAxMSAxMSAgOCA5IDkgIDQgNSA1CisxIDEgMSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAxIDEgMCAgNjEgNjEgNTMgIDE0MiAxMzcgOTQgIDE4MSAxNzYgMTM3CisyMDQgMjAxIDE1NSAgMjI0IDIyMyAxNTkgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDE5NyAxOTMgMTU0ICAxOTAgMTg2IDEzNiAgMTg0IDE4MSAxMzYgIDE4OCAxODQgMTQ2CisxOTcgMTkzIDE1NCAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OCAgMjA0IDIwMSAxNTUgIDE5NCAxODkgMTQ2CisxNzYgMTcxIDEyNiAgMTM0IDEzMSA5NiAgNjYgNjUgNTUgIDQzIDQ1IDQzICA0MSA0MiA0MiAgMzkgNDAgMzkKKzM1IDM3IDM2ICAzMyAzNiAzNCAgMjcgMjkgMjggIDIwIDIwIDIwICAxNSAxNSAxNSAgOSAxMSAxMQorOCA5IDkgIDYgNyA3ICA1IDYgNSAgNSA2IDUgIDQgNSA1ICA0IDUgNQorNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDUgNiA1ICA0IDUgNQorNCA1IDUgIDUgNiA1ICA0IDUgNSAgNSA2IDUgIDUgNiA1ICA1IDYgNQorNSA3IDcgIDUgNyA3ICA1IDcgNyAgNSA3IDcgIDUgNyA3ICA1IDcgNworNiA3IDcgIDYgNyA3ICA2IDcgNyAgMjggMzEgMzAgIDE4NCAxNzkgMTQ5ICAxODQgMTc5IDE0OQorMTQ1IDE0MSAxMDUgIDg0IDgzIDcyICAyNyAyOSAyOCAgNSA3IDcgIDUgNiA1ICAxNiAxNiAxNgorNDMgNDQgNDEgIDk2IDk1IDY5ICAxNTggMTUzIDExMiAgMTg4IDE4NCAxNDYgIDIwNCAyMDEgMTU1ICAyMTAgMjA4IDE1OAorMjA0IDIwMSAxNTUgIDE5NyAxOTMgMTU0ICAxODQgMTc5IDE0OSAgMTc3IDE3MiAxMzUgIDE2OCAxNjMgMTIwICAxNjQgMTU5IDExMQorMTY0IDE1OSAxMTEgIDE3NCAxNzAgMTIxICAxODQgMTgxIDEzNiAgMTk3IDE5MyAxNTQgIDIxNCAyMTIgMTU4ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxNzcgMTcyIDEzNQorNzEgNzEgNTcgIDExIDExIDExICAxMiAxMiAxMiAgMTEgMTEgMTEgIDExIDExIDExICAxMSAxMSAxMQorMTAgMTAgOSAgMTAgMTAgOSAgOCA4IDcgIDMgNCA0ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAzMSAzMyAzMSAgMTIxIDExOSA4NyAgMTc2IDE3MSAxMjYKKzE5NyAxOTMgMTU0ICAyMTQgMjEyIDE1OCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzIzOSAyMzkgMTcwICAyMTAgMjA4IDE1OCAgMTk0IDE4OSAxNDYgIDE3OCAxNzQgMTI4ICAxNzQgMTcwIDEyMSAgMTc2IDE3MSAxMjYKKzE3NyAxNzIgMTM1ICAxODEgMTc2IDEzNyAgMTg0IDE3OSAxNDkgIDE4NCAxNzkgMTQ5ICAxODEgMTc2IDEzNyAgMTc4IDE3NCAxMjgKKzE1OCAxNTMgMTEyICAxMjEgMTE5IDg3ICA1MyA1NSA0NyAgMzcgMzkgMzcgIDMzIDM2IDM0ICAzMCAzMiAzMQorMjcgMjkgMjggIDI1IDI3IDI2ICAyNCAyNiAyNCAgMTkgMjAgMTkgIDEzIDEzIDEzICA4IDEwIDEwCis2IDggOCAgNiA3IDcgIDUgNiA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1Cis0IDUgNSAgNCA1IDUgIDQgNSA1ICAzIDQgNCAgMyA0IDQgIDQgNSA1Cis0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1Cis1IDYgNSAgNSA2IDUgIDUgNiA1ICA1IDYgNSAgNSA2IDUgIDUgNiA1Cis1IDYgNSAgNSA2IDUgIDEyIDE0IDE0ICAxNDUgMTQxIDEwNSAgMTg0IDE3OSAxNDkgIDE3NyAxNzIgMTM1Cis5MCA4OSA3MyAgMjEgMjIgMjEgIDUgNiA1ICA1IDYgNSAgNCA1IDUgIDM3IDM5IDM3CiszOCAzOSAzNyAgNjEgNjEgNTMgIDEzNCAxMzEgOTYgIDE2OCAxNjMgMTIwICAxODQgMTgxIDEzNiAgMTg4IDE4NCAxNDYKKzE4NCAxNzkgMTQ5ICAxNzcgMTcyIDEzNSAgMTY4IDE2MyAxMjAgIDE2NCAxNTkgMTExICAxNTUgMTQ5IDEwOSAgMTUxIDE0NyA5OAorMTUxIDE0NyA5OCAgMTY0IDE1OSAxMTEgIDE3NiAxNzEgMTI2ICAxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwCisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE1OCAxNTMgMTEyCis0NiA0NyA0MyAgMTAgMTAgOSAgMTAgMTAgOSAgMTAgMTAgOSAgOCA5IDkgIDggOSA5Cis2IDcgNyAgMyAzIDMgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMTMgMTIgNyAgODIgODEgNjIgIDE1OCAxNTMgMTEyCisxODggMTg0IDE0NiAgMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyMjQgMjIzIDE1OSAgMjA0IDIwMSAxNTUgIDE4NCAxODEgMTM2ICAxNzEgMTY1IDExNyAgMTY0IDE1OSAxMTEgIDE2MCAxNTQgMTA2CisxNTggMTUzIDExMiAgMTY0IDE1OSAxMTEgIDE2OCAxNjMgMTIwICAxNjggMTYzIDEyMCAgMTY4IDE2MyAxMjAgIDE2NCAxNTkgMTExCisxNDIgMTM3IDk0ICA5NiA5NSA2OSAgNDMgNDQgNDEgIDI3IDI5IDI4ICAyNiAyOCAyNyAgMjMgMjQgMjQKKzIxIDIyIDIxICAxOCAxOSAxOCAgMTcgMTcgMTcgIDE4IDE5IDE4ICAxMyAxMyAxMyAgOCA4IDcKKzYgNyA3ICA1IDYgNSAgNCA1IDUgIDMgNCA0ICAzIDQgNCAgMyA0IDQKKzMgNCA0ICAzIDQgNCAgMyAzIDMgIDMgMyAzICAzIDQgNCAgMyA0IDQKKzMgNCA0ICAzIDQgNCAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUKKzQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUKKzQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUKKzQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1ICAzMSAzMyAzMSAgNjUgNjYgNjEKKzM3IDM5IDM3ICAzOCAzOSAzNyAgOTYgOTUgNjkgIDE0NCAxMzkgOTkgIDE2OCAxNjMgMTIwICAxNzQgMTcwIDEyMQorMTY4IDE2MyAxMjAgIDE2NCAxNTkgMTExICAxNTUgMTQ5IDEwOSAgMTQ5IDE0NSAxMDMgIDE0OSAxNDMgOTggIDE0MiAxMzcgOTQKKzE0OSAxNDMgOTggIDE1MSAxNDcgOTggIDE2NCAxNTkgMTExICAxNzcgMTcyIDEzNSAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMTk3IDE5MyAxNTQgIDEzNyAxMzMgMTAwCisyNCAyNiAyNCAgOCA5IDkgIDggOSA5ICA4IDggNyAgNiA3IDcgIDIgMiAyCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDQ2IDQ3IDQzICAxMjUgMTIyIDg3CisxNzYgMTcxIDEyNiAgMTk3IDE5MyAxNTQgIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwCisyMTQgMjEyIDE1OCAgMTk3IDE5MyAxNTQgIDE4MSAxNzYgMTM3ICAxNjQgMTU5IDExMSAgMTUxIDE0NyA5OCAgMTQ5IDE0MyA5OAorMTQ5IDE0MyA5OCAgMTQ5IDE0MyA5OCAgMTQ5IDE0NSAxMDMgIDE1NSAxNDkgMTA5ICAxNjAgMTU0IDEwNiAgMTQ5IDE0MyA5OAorMTE4IDExNiA3NiAgODIgODEgNjIgIDMwIDMxIDI4ICAyMSAyMiAyMSAgMTkgMjAgMTkgIDE3IDE3IDE3CisxNCAxNCAxMyAgMTIgMTIgMTIgIDEwIDEwIDkgIDEyIDEyIDEyICAxMCAxMiAxMiAgNiA4IDgKKzQgNSA1ICAzIDQgNCAgMyA0IDQgIDMgNCA0ICAzIDMgMyAgMyAzIDMKKzMgMyAzICAzIDMgMyAgMyAzIDMgIDMgMyAzICAyIDMgMyAgMiAzIDMKKzMgNCA0ICAzIDQgNCAgMyA0IDQgIDMgNCA0ICAzIDQgNCAgNCA1IDUKKzQgNSA1ICAzIDQgNCAgMyA0IDQgIDMgNCA0ICAzIDQgNCAgMyA0IDQKKzQgNSA1ICA0IDUgNSAgNCA1IDUgIDQgNSA1ICA0IDUgNSAgNCA1IDUKKzQgNSA1ICAzIDQgNCAgMyA0IDQgIDIzIDI0IDI0ICAxMTAgMTA5IDk0ICA3MiA3MyA2NworMzkgNDAgMzkgIDIyIDI0IDIzICA0NiA0NyA0MyAgMTAzIDEwMSA3NyAgMTQyIDEzNyA5NCAgMTU1IDE0OSAxMDkKKzE2MCAxNTQgMTA2ICAxNTUgMTQ5IDEwOSAgMTQ5IDE0MyA5OCAgMTQyIDEzNyA5NCAgMTQyIDEzNyA5NCAgMTQyIDEzNyA5NAorMTQyIDEzNyA5NCAgMTQ5IDE0MyA5OCAgMTU1IDE0OSAxMDkgIDE3NiAxNzEgMTI2ICAxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTgKKzIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxNCAyMTIgMTU4ICAxODQgMTc5IDE0OSAgMTA1IDEwNCA5MgorMTAgMTAgOSAgNiA3IDcgIDMgNCA0ICAxIDEgMSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEyIDEyIDkgIDgyIDgxIDYyCisxNDkgMTQ1IDEwMyAgMTgxIDE3NiAxMzcgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OCAgMjE0IDIxMiAxNTggIDIxNCAyMTIgMTU4CisyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQgIDE3NyAxNzIgMTM1ICAxNTggMTUzIDExMiAgMTQ5IDE0MyA5OCAgMTQyIDEzNyA5NAorMTQyIDEzNyA5NCAgMTQyIDEzNyA5NCAgMTQ5IDE0MyA5OCAgMTUxIDE0NyA5OCAgMTUxIDE0NyA5OCAgMTMxIDEyNyA5MworMTAzIDEwMSA3NyAgNzEgNzEgNTcgIDIyIDI0IDIzICAxNSAxNSAxNSAgMTMgMTMgMTMgIDExIDExIDExCis4IDkgOSAgNiA3IDcgIDYgNyA3ICA0IDUgNSAgOCA5IDkgIDYgNyA3Cis0IDUgNSAgMyAzIDMgIDMgMyAzICAzIDMgMyAgMyAzIDMgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMyAzCisyIDMgMyAgMiAzIDMgIDIgMyAzICAzIDQgNCAgMyA0IDQgIDMgNCA0CiszIDQgNCAgMyA0IDQgIDMgMyAzICAzIDQgNCAgMyA0IDQgIDMgNCA0CiszIDQgNCAgMyA0IDQgIDMgNCA0ICAzIDQgNCAgMyA0IDQgIDMgNCA0CiszIDQgNCAgMyA0IDQgIDIxIDIyIDIxICAxNDUgMTQxIDEwNSAgMTQ1IDE0MSAxMDUgIDcyIDczIDY3CisxNyAxOCAxNyAgMyA0IDQgIDIxIDIyIDIwICA2NiA2NSA1NSAgMTE4IDExNiA3NiAgMTQyIDEzNyA5NAorMTQ5IDE0MyA5OCAgMTUxIDE0NyA5OCAgMTQ5IDE0MyA5OCAgMTQyIDEzNyA5NCAgMTQyIDEzNyA5NCAgMTQyIDEzNyA5NAorMTQyIDEzNyA5NCAgMTQ5IDE0MyA5OCAgMTU1IDE0OSAxMDkgIDE2OCAxNjMgMTIwICAxODQgMTc5IDE0OSAgMjEwIDIwOCAxNTgKKzIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxNzcgMTcyIDEzNSAgNzEgNzEgNTcKKzMgMyAzICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDM2IDM4IDM1CisxMTUgMTEzIDgyICAxNTggMTUzIDExMiAgMTgxIDE3NiAxMzcgIDE5NyAxOTMgMTU0ICAyMDQgMjAxIDE1NSAgMjEwIDIwOCAxNTgKKzIwNCAyMDEgMTU1ICAxODggMTg0IDE0NiAgMTc3IDE3MiAxMzUgIDE2NCAxNTkgMTExICAxNDkgMTQ1IDEwMyAgMTQyIDEzNyA5NAorMTQyIDEzNyA5NCAgMTQyIDEzNyA5NCAgMTQ5IDE0MyA5OCAgMTUxIDE0NyA5OCAgMTQ5IDE0MyA5OCAgMTI1IDEyMiA4NworOTYgOTUgNjkgIDYxIDYxIDUzICAxNiAxNyAxMiAgOCA5IDkgIDggOCA3ICA2IDcgNworNCA1IDUgIDMgNCA0ICAzIDMgMyAgMyAzIDMgIDMgMyAzICA1IDYgNQorMyA0IDQgIDIgMyAzICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMgorMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyICAxIDIgMgorMiAyIDIgIDIgMiAyICAyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMworMyAzIDMgIDMgMyAzICAzIDMgMyAgMyAzIDMgIDMgMyAzICAzIDMgMworMyAzIDMgIDIgMyAzICAyIDMgMyAgMyA0IDQgIDMgNCA0ICAzIDQgNAorMyA0IDQgIDMgNCA0ICAzIDQgNCAgOCA5IDkgIDggOCA3ICAzIDMgMworMyAzIDMgIDMgMyAzICA5IDkgOCAgMzYgMzggMzUgIDgyIDgxIDYyICAxMTggMTE2IDc2CisxNDIgMTM3IDk0ICAxNTEgMTQ3IDk4ICAxNTEgMTQ3IDk4ICAxNTEgMTQ3IDk4ICAxNDkgMTQzIDk4ICAxNDkgMTQzIDk4CisxNDkgMTQzIDk4ICAxNTEgMTQ3IDk4ICAxNjAgMTU0IDEwNiAgMTc2IDE3MSAxMjYgIDE4OCAxODQgMTQ2ICAyMTAgMjA4IDE1OAorMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE1NiAxNTEgMTExICAzMSAzMyAzMQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgNyA3IDUKKzY2IDY1IDU1ICAxMjUgMTIyIDg3ICAxNTggMTUzIDExMiAgMTgxIDE3NiAxMzcgIDE5NCAxODkgMTQ2ICAxOTcgMTkzIDE1NAorMTk3IDE5MyAxNTQgIDE4NCAxNzkgMTQ5ICAxNzcgMTcyIDEzNSAgMTY4IDE2MyAxMjAgIDE1NiAxNTEgMTExICAxNTEgMTQ3IDk4CisxNTEgMTQ3IDk4ICAxNTEgMTQ3IDk4ICAxNTEgMTQ3IDk4ICAxNjEgMTU2IDk2ICAxNDkgMTQzIDk4ICAxMTggMTE2IDc2Cis4MiA4MSA2MiAgNTMgNTUgNDcgIDEyIDEyIDkgIDQgNSA1ICAzIDQgNCAgMyAzIDMKKzMgMyAzICAzIDMgMyAgMiAyIDIgIDIgMiAyICAxIDEgMSAgMSAyIDIKKzMgMyAzICAyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDIgMiAgMSAyIDIKKzEgMiAyICAxIDIgMiAgMSAyIDIgIDIgMiAyICAyIDIgMiAgMiAzIDMKKzIgMyAzICAyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDIgMiAgMiAyIDIKKzIgMyAzICAyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAzIDMKKzIgMyAzICAyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMyAzIDMKKzMgMyAzICAzIDMgMyAgNzIgNzMgNjcgIDYxIDYxIDUzICA1MyA1NSA0NyAgOTYgOTUgNjkKKzEzMSAxMjcgOTMgIDE1MSAxNDcgOTggIDE2MSAxNTYgOTYgIDE2MSAxNTYgOTYgIDE1MSAxNDcgOTggIDE1MSAxNDcgOTgKKzE2MSAxNTYgOTYgIDE2MCAxNTQgMTA2ICAxNjQgMTU5IDExMSAgMTc3IDE3MiAxMzUgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OAorMjM5IDIzOSAxNzAgIDI1MSAyNTEgMTg3ICAyMjQgMjIzIDE1OSAgMTk3IDE5MyAxNTQgIDEzMSAxMjcgOTMgIDkgOSA4CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMjQgMjYgMjQgIDgyIDgxIDYyICAxMzEgMTI3IDkzICAxNjQgMTU5IDExMSAgMTc4IDE3NCAxMjggIDE4OCAxODQgMTQ2CisxODggMTg0IDE0NiAgMTg4IDE4NCAxNDYgIDE4MSAxNzYgMTM3ICAxNzYgMTcxIDEyNiAgMTY4IDE2MyAxMjAgIDE2NCAxNTkgMTExCisxNjAgMTU0IDEwNiAgMTYwIDE1NCAxMDYgIDE2MCAxNTQgMTA2ICAxNjAgMTU0IDEwNiAgMTUxIDE0NyA5OCAgMTI1IDEyMiA4NworODIgODEgNjIgIDYxIDYxIDUzICAxMiAxMiA5ICAzIDMgMyAgMyAzIDMgIDIgMiAyCisyIDIgMiAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMiAyIDIgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDEgMiAyCisxIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyCisyIDMgMyAgMiAzIDMgIDIgMyAzICAyIDMgMyAgMiAzIDMgIDIgMyAzCisyIDMgMyAgMzAgMzIgMzEgIDcyIDczIDY3ICAzMSAzMyAzMSAgMzYgMzggMzUgIDgyIDgxIDYyCisxMTggMTE2IDc2ICAxNDkgMTQzIDk4ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxNjEgMTU2IDk2ICAxNjAgMTU0IDEwNgorMTY1IDE2MSAxMDkgIDE2NSAxNjEgMTA5ICAxNzYgMTcxIDEyNiAgMTg4IDE4NCAxNDYgIDIwNCAyMDEgMTU1ICAyMTQgMjEyIDE1OAorMjM5IDIzOSAxNzAgIDIzOSAyMzkgMTcwICAyMTQgMjEyIDE1OCAgMTg0IDE3OSAxNDkgIDgyIDgxIDYyICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzIgMiAyICA0MyA0NCA0MSAgOTYgOTUgNjkgIDEzMSAxMjcgOTMgIDE2MCAxNTQgMTA2ICAxNzYgMTcxIDEyNgorMTg0IDE4MSAxMzYgIDE4NCAxODEgMTM2ICAxODQgMTgxIDEzNiAgMTgxIDE3NiAxMzcgIDE3OCAxNzQgMTI4ICAxNzQgMTcwIDEyMQorMTcxIDE2NSAxMTcgIDE3MyAxNjcgMTExICAxNzMgMTY3IDExMSAgMTczIDE2NyAxMTEgIDE2MCAxNTQgMTA2ICAxMzEgMTI3IDkzCis5NiA5NSA2OSAgNjYgNjUgNTUgIDE2IDE3IDEyICAyIDIgMiAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDIgMiAgMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAxMCA5IDYgIDMwIDMxIDI4ICA3MSA3MSA1NworMTE4IDExNiA3NiAgMTQ5IDE0MyA5OCAgMTY1IDE2MSAxMDkgIDE2NSAxNjEgMTA5ICAxNjUgMTYxIDEwOSAgMTczIDE2NyAxMTEKKzE3MyAxNjcgMTExICAxNzYgMTcxIDEyNiAgMTg0IDE4MSAxMzYgIDE5NyAxOTMgMTU0ICAyMTAgMjA4IDE1OCAgMjI0IDIyMyAxNTkKKzI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE2OCAxNjMgMTIwICA0MCA0MSAzOSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMTMgMTIgNyAgNjEgNjEgNTMgIDk2IDk1IDY5ICAxMzEgMTI3IDkzICAxNjAgMTU0IDEwNgorMTc2IDE3MSAxMjYgIDE4NCAxODEgMTM2ICAxODQgMTgxIDEzNiAgMTg4IDE4NCAxNDYgIDE4NCAxODEgMTM2ICAxODQgMTgxIDEzNgorMTg0IDE4MSAxMzYgIDE4NiAxODIgMTI4ICAxODYgMTgyIDEyOCAgMTc4IDE3NCAxMjggIDE3NCAxNzAgMTIxICAxNDkgMTQ1IDEwMworMTE4IDExNiA3NiAgODIgODEgNjIgIDIxIDIyIDIwICAxIDEgMSAgMSAxIDEgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMiAyCisxIDIgMiAgMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAyIDIgMiAgMiAyIDIgIDIgMiAyCisyIDIgMiAgMiAyIDIgIDIgMiAyICAzIDMgMyAgMzAgMzEgMjggIDY2IDY1IDU1CisxMTggMTE2IDc2ICAxNDkgMTQzIDk4ICAxNjUgMTYxIDEwOSAgMTczIDE2NyAxMTEgIDE3MyAxNjcgMTExICAxNzQgMTcwIDEyMQorMTg2IDE4MiAxMjggIDE5MCAxODYgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIzOSAyMzkgMTcwICAxOTcgMTkzIDE1NCAgMTM3IDEzMyAxMDAgIDEyIDEyIDkgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAzMCAzMSAyOCAgNzEgNzEgNTcgIDEwMyAxMDEgNzcgIDEzNCAxMzEgOTYKKzE2NCAxNTkgMTExICAxNzYgMTcxIDEyNiAgMTg0IDE4MSAxMzYgIDE4OCAxODQgMTQ2ICAxOTQgMTg5IDE0NiAgMTk3IDE5MyAxNTQKKzE5NyAxOTMgMTU0ICAxOTcgMTkzIDE1NCAgMTk0IDE5MSAxNDggIDE5NCAxODkgMTQ2ICAxOTAgMTg2IDEzNiAgMTc2IDE3MSAxMjYKKzE0NSAxNDEgMTA1ICAxMDMgMTAxIDc3ICA0MCA0MSAzOSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMQorMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMiAyICAxIDIgMgorMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDEgMiAyICAxIDIgMgorMSAyIDIgIDEgMiAyICAxIDIgMiAgMSAyIDIgIDMwIDMxIDI4ICA3MSA3MSA1NworMTE4IDExNiA3NiAgMTYwIDE1NCAxMDYgIDE3MyAxNjcgMTExICAxNzggMTc0IDEyOCAgMTg2IDE4MiAxMjggIDE5MCAxODYgMTM2CisxOTQgMTkxIDE0OCAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4ICAyMjQgMjIzIDE1OSAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjE0IDIxMiAxNTggIDE4NCAxNzkgMTQ5ICA4NCA4MyA3MiAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA1IDUgMyAgNDMgNDQgNDEgIDgyIDgxIDYyICAxMDMgMTAxIDc3CisxNDIgMTM3IDk0ICAxNjUgMTYxIDEwOSAgMTc4IDE3NCAxMjggIDE5MCAxODYgMTM2ICAxOTcgMTkzIDE1NCAgMjA0IDIwMSAxNTUKKzIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OCAgMjEwIDIwOCAxNTggIDIxMCAyMDggMTU4ICAyMTAgMjA4IDE1OCAgMTk3IDE5MyAxNTQKKzE3NyAxNzIgMTM1ICAxNDUgMTQxIDEwNSAgNzkgNzggNjIgIDUgNCAzICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAyIDIgIDEgMiAyICAzMCAzMSAyOCAgODIgODEgNjIKKzE0MiAxMzcgOTQgIDE2NSAxNjEgMTA5ICAxNzggMTc0IDEyOCAgMTkwIDE4NiAxMzYgIDE5NCAxOTEgMTQ4ICAyMDQgMjAxIDE1NQorMjEwIDIwOCAxNTggIDIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDIxMCAyMDggMTU4ICAxNjggMTYzIDEyMCAgMzYgMzggMzUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE2IDE3IDEyICA1MyA1NSA0NyAgODIgODEgNjIKKzExOCAxMTYgNzYgIDE1MSAxNDcgOTggIDE3MSAxNjUgMTE3ICAxODQgMTgxIDEzNiAgMTk0IDE5MSAxNDggIDIxMCAyMDggMTU4CisyMTQgMjEyIDE1OCAgMjI0IDIyMyAxNTkgIDIzOSAyMzkgMTcwICAyMzkgMjM5IDE3MCAgMjI0IDIyMyAxNTkgIDIxNCAyMTIgMTU4CisxOTcgMTkzIDE1NCAgMTc2IDE3MSAxMjYgIDExNSAxMTMgODIgIDI0IDI2IDI0ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICA0MCA0MSAzOSAgMTAzIDEwMSA3NworMTUxIDE0NyA5OCAgMTc2IDE3MSAxMjYgIDE5MCAxODYgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIxNCAyMTIgMTU4CisyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyMzkgMjM5IDE3MCAgMTk3IDE5MyAxNTQgIDExMCAxMDkgOTQgIDMgNCAzICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMzAgMzEgMjggIDY2IDY1IDU1Cis5NiA5NSA2OSAgMTI1IDEyMiA4NyAgMTYwIDE1NCAxMDYgIDE3OCAxNzQgMTI4ICAxOTQgMTg5IDE0NiAgMjA0IDIwMSAxNTUKKzIxNCAyMTIgMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjM5IDIzOSAxNzAKKzIxMCAyMDggMTU4ICAxODggMTg0IDE0NiAgMTQ5IDE0NSAxMDMgIDYxIDYxIDUzICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEKKzEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxICA2MSA2MSA1MyAgMTMxIDEyNyA5MworMTY0IDE1OSAxMTEgIDE4NCAxODEgMTM2ICAxOTcgMTkzIDE1NCAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjEwIDIwOCAxNTggIDE2OCAxNjMgMTIwICA0MyA0NCA0MSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA0IDMgMiAgMzYgMzggMzUKKzcxIDcxIDU3ICA5NiA5NSA2OSAgMTQyIDEzNyA5NCAgMTY1IDE2MSAxMDkgIDE4NCAxODEgMTM2ICAxOTcgMTkzIDE1NAorMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjE0IDIxMiAxNTggIDE5NyAxOTMgMTU0ICAxNjggMTYzIDEyMCAgMTAzIDEwMSA3NyAgNyA3IDUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCisxIDEgMSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODIgODEgNjIgIDE0MiAxMzcgOTQKKzE3NCAxNzAgMTIxICAxOTQgMTg5IDE0NiAgMjEwIDIwOCAxNTggIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjI0IDIyMyAxNTkKKzE4NCAxNzkgMTQ5ICA5OSA5OCA4MCAgMyAzIDMgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDcgNyA1Cis0MyA0NCA0MSAgODIgODEgNjIgIDExOCAxMTYgNzYgIDE0MiAxMzcgOTQgIDE3MSAxNjUgMTE3ICAxOTAgMTg2IDEzNgorMjA0IDIwMSAxNTUgIDIyNCAyMjMgMTU5ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NworMjE0IDIxMiAxNTggIDE5NyAxOTMgMTU0ICAxNzQgMTcwIDEyMSAgMTI1IDEyMiA4NyAgMzAgMzEgMjggIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDEgMSAxCisxIDEgMSAgMSAxIDEgIDEgMSAxICAxIDEgMSAgMSAxIDEgIDEgMSAxCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAzIDQgMyAgODIgODEgNjIgIDE0OSAxNDMgOTgKKzE3NiAxNzEgMTI2ICAxOTQgMTkxIDE0OCAgMjEwIDIwOCAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcKKzI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjA0IDIwMSAxNTUKKzE0NSAxNDEgMTA1ICAzMCAzMSAyOCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxMCA5IDYgIDQ2IDQ3IDQzICA4MiA4MSA2MiAgMTE4IDExNiA3NiAgMTQ5IDE0MyA5OCAgMTc0IDE3MCAxMjEKKzE5NCAxODkgMTQ2ICAyMTAgMjA4IDE1OCAgMjI0IDIyMyAxNTkgIDI1MSAyNTEgMTg3ICAyNTEgMjUxIDE4NyAgMjI0IDIyMyAxNTkKKzIxMCAyMDggMTU4ICAxOTQgMTkxIDE0OCAgMTc0IDE3MCAxMjEgIDEzNCAxMzEgOTYgIDUzIDU1IDQ3ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgNyA3IDUgIDk2IDk1IDY5ICAxNDkgMTQzIDk4CisxNzYgMTcxIDEyNiAgMTk0IDE5MSAxNDggIDIxMCAyMDggMTU4ICAyMzkgMjM5IDE3MCAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3CisyNTEgMjUxIDE4NyAgMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE3NyAxNzIgMTM1Cis3NSA3NSA2MSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEwIDkgNiAgNDYgNDcgNDMgIDgyIDgxIDYyICAxMTggMTE2IDc2ICAxNDkgMTQzIDk4CisxNzYgMTcxIDEyNiAgMTk0IDE5MSAxNDggIDIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OCAgMjE0IDIxMiAxNTggIDIxMCAyMDggMTU4CisxOTcgMTkzIDE1NCAgMTg0IDE4MSAxMzYgIDE2NCAxNTkgMTExICAxMzEgMTI3IDkzICA1MyA1NSA0NyAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDcgNyA1ICA5NiA5NSA2OSAgMTQ5IDE0MyA5OAorMTc0IDE3MCAxMjEgIDE5NCAxODkgMTQ2ICAyMDQgMjAxIDE1NSAgMjE0IDIxMiAxNTggIDIzOSAyMzkgMTcwICAyNTEgMjUxIDE4NworMjUxIDI1MSAxODcgIDI1MSAyNTEgMTg3ICAyMzkgMjM5IDE3MCAgMjEwIDIwOCAxNTggIDE4NCAxNzkgMTQ5ICAxMTAgMTA5IDk0CisxMiAxMiA5ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDEwIDkgNiAgNDMgNDQgNDEgIDgyIDgxIDYyICAxMTUgMTEzIDgyCisxNDQgMTM5IDk5ICAxNjggMTYzIDEyMCAgMTg4IDE4NCAxNDYgIDE5NyAxOTMgMTU0ICAxOTcgMTkzIDE1NCAgMTk0IDE4OSAxNDYKKzE4NCAxODEgMTM2ICAxNzQgMTcwIDEyMSAgMTUxIDE0NyA5OCAgMTE4IDExNiA3NiAgMzYgMzggMzUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA0IDMgMiAgODIgODEgNjIgIDE0MiAxMzcgOTQKKzE3MSAxNjUgMTE3ICAxODYgMTgyIDEyOCAgMTk0IDE5MSAxNDggIDIxMCAyMDggMTU4ICAyMTQgMjEyIDE1OCAgMjI0IDIyMyAxNTkKKzIzOSAyMzkgMTcwICAyMjQgMjIzIDE1OSAgMjEwIDIwOCAxNTggIDE4NCAxNzkgMTQ5ICAxMzcgMTMzIDEwMCAgMzYgMzggMzUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA3IDcgNSAgMzYgMzggMzUgIDcxIDcxIDU3CisxMDMgMTAxIDc3ICAxMzEgMTI3IDkzICAxNTUgMTQ5IDEwOSAgMTY4IDE2MyAxMjAgIDE2OCAxNjMgMTIwICAxNjggMTYzIDEyMAorMTY0IDE1OSAxMTEgIDE0OSAxNDMgOTggIDEyNSAxMjIgODcgIDgyIDgxIDYyICAxMyAxMiA3ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDYxIDYxIDUzICAxMjUgMTIyIDg3CisxNjAgMTU0IDEwNiAgMTc0IDE3MCAxMjEgIDE4NCAxODEgMTM2ICAxOTQgMTg5IDE0NiAgMjA0IDIwMSAxNTUgIDIxMCAyMDggMTU4CisyMTAgMjA4IDE1OCAgMjA0IDIwMSAxNTUgIDE4NCAxNzkgMTQ5ICAxNDUgMTQxIDEwNSAgNjEgNjEgNTMgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDMgMyAyICAzMCAzMSAyOAorNjEgNjEgNTMgIDgyIDgxIDYyICAxMDMgMTAxIDc3ICAxMjEgMTE5IDg3ICAxMjUgMTIyIDg3ICAxMjUgMTIyIDg3CisxMTggMTE2IDc2ICAxMDMgMTAxIDc3ICA3OSA3OCA2MiAgMjQgMjYgMjQgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDI1IDI3IDI1ICA5NiA5NSA2OQorMTQyIDEzNyA5NCAgMTYwIDE1NCAxMDYgIDE3MSAxNjUgMTE3ICAxNzggMTc0IDEyOCAgMTg0IDE4MSAxMzYgIDE4NCAxODEgMTM2CisxODEgMTc2IDEzNyAgMTc3IDE3MiAxMzUgIDE0NSAxNDEgMTA1ICA3NSA3NSA2MSAgNSA1IDMgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTYgMTcgMTIgIDQwIDQxIDM5ICA2MSA2MSA1MyAgNzEgNzEgNTcgIDcxIDcxIDU3ICA3MSA3MSA1NworNjYgNjUgNTUgIDQzIDQ0IDQxICAxMiAxMiA5ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMSAxIDEgIDQ2IDQ3IDQzCis5NiA5NSA2OSAgMTI1IDEyMiA4NyAgMTQyIDEzNyA5NCAgMTQ5IDE0NSAxMDMgIDE1NSAxNDkgMTA5ICAxNTUgMTQ5IDEwOQorMTQ1IDE0MSAxMDUgIDEyMSAxMTkgODcgIDY2IDY1IDU1ICA3IDcgNSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDEgMSAxICAxNiAxNyAxMiAgMjQgMjYgMjQgIDI1IDI3IDI1ICAxOSAyMCAxOAorNyA3IDUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyIDIgMQorMjUgMjcgMjUgIDYxIDYxIDUzICA4MiA4MSA2MiAgOTYgOTUgNjkgIDk2IDk1IDY5ICA4MiA4MSA2MgorNjEgNjEgNTMgIDI1IDI3IDI1ICAyIDIgMSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgNSA2IDUgIDEzIDEyIDcgIDEwIDkgNiAgMyA0IDMKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9sb2dvL2xvZ29fbGludXhfdmdhMTYucHBtIGIvZHJpdmVycy92aWRlby9sb2dvL2xvZ29fbGludXhfdmdhMTYucHBtCmluZGV4IDE4NTBjMTUuLjEyYWMzYTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nb19saW51eF92Z2ExNi5wcG0KKysrIGIvZHJpdmVycy92aWRlby9sb2dvL2xvZ29fbGludXhfdmdhMTYucHBtCkBAIC0xLDE2MDQgKzEsMjczOSBAQAogUDMKLSMgU3RhbmRhcmQgMTYtY29sb3IgTGludXggbG9nbwotODAgODAKKzE0MiAxMTQKIDI1NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwIDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAyNTUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgMTcwIDE3MAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTI1NSAyNTUgMjU1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTE3MCAxNzAgMTcwICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAxNzAgMTcwCi0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotMjU1IDI1NSAyNTUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMjU1IDI1NSAyNTUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1IDE3MCAxNzAgMTcwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDE3MCAxNzAgMTcwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwIDE3MCAxNzAKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0xNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0xNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLTE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAxNzAgMTcwCi0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0xNzAgMTcwIDE3MCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwIDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICA4NSAgODUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotIDg1ICA4NSAgODUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgODUgIDg1ICA4NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMTcwIDE3MCAxNzAgMTcwIDE3MCAxNzAgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSA4NSAgODUgIDg1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAxNzAgMTcwIDE3MCAgODUgIDg1ICA4NSAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTE3MCAxNzAgMTcwICA4NSAgODUgIDg1ICA4NSAgODUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAxNzAgMTcwIDE3MAotIDg1ICA4NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICA4NSAgODUgIDg1Ci0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMTcwIDE3MCAxNzAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1Ci0yNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMTcwIDE3MCAxNzAgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgMTcwIDE3MCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQotMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKLTI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE3MCAxNzAgMTcwICA4NSAgODUgIDg1Ci0gODUgIDg1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgODUgIDg1ICA4NSAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICA4NSAgODUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMAotMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1Ci0xNzAgIDg1ICAgMCAyNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NQotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAKLTI1NSAyNTUgIDg1IDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDI1NSAyNTUgIDg1IDE3MCAgODUgICAwCi0yNTUgMjU1ICA4NSAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgIDg1ICA4NSAgODUKLSA4NSAgODUgIDg1ICA4NSAgODUgIDg1ICA4NSAgODUgIDg1IDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAyNTUgMjU1ICA4NQotMTcwICA4NSAgIDAgMjU1IDI1NSAgODUgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwCi0xNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMCAxNzAgIDg1ICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAgMTcwICA4NSAgIDAKLTE3MCAgODUgICAwIDE3MCAgODUgICAwIDE3MCAgODUgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKLSAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwCi0gIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMAotICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAgICAwICAgMCAgIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgMjU1IDg1ICAxNzAgODUgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDI1NSA4NQorMjU1IDg1IDg1ICA4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAxNzAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDg1IDAgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwICAxNzAgODUgMCAgODUgMjU1IDg1CisxNzAgODUgMCAgMTcwIDg1IDAgIDAgMTcwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAxNzAgMCAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NQorODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDg1IDI1NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwCisxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1Cis4NSAyNTUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1CisxNzAgODUgMCAgMTcwIDg1IDAgIDAgMTcwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDg1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCA4NSAwICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgODUgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAxNzAgMAorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwCisxNzAgODUgMCAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSAyNTUgODUgIDI1NSA4NSA4NQorODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgODUgODUgODUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwCis4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAwIDE3MCAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NQorMjU1IDg1IDg1ICA4NSAyNTUgODUgIDg1IDg1IDg1ICAyNTUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgMjU1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzE3MCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMjU1IDI1NSA4NQorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAgIDAgMTcwIDAKKzAgMCAwICAxNzAgODUgMCAgMTcwIDg1IDAgIDAgMTcwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NQorODUgMjU1IDg1ICAxNzAgODUgMCAgMCAxNzAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMTcwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1Cis4NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwCis4NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgODUgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMAorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUKKzE3MCA4NSAwICAxNzAgODUgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAKKzAgMTcwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDg1IDI1NSA4NQorMjU1IDI1NSA4NSAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDg1IDAgIDg1IDI1NSA4NSAgMTcwIDg1IDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMjU1IDI1NSA4NSAgODUgMjU1IDg1CisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDg1ICA4NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzE3MCA4NSAwICAxNzAgODUgMCAgODUgMjU1IDg1ICAxNzAgODUgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUKKzE3MCA4NSAwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMTcwIDg1IDAKKzI1NSAyNTUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUKKzE3MCA4NSAwICAxNzAgODUgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDg1IDAgIDI1NSAyNTUgODUKKzI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDg1IDI1NSA4NQorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgODUgMAorMCAxNzAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDI1NSA4NSAgMjU1IDI1NSA4NQorMTcwIDg1IDAgIDI1NSAyNTUgODUgIDI1NSAyNTUgODUgIDE3MCA4NSAwICA4NSAyNTUgODUgIDE3MCA4NSAwCisyNTUgMjU1IDg1ICAxNzAgODUgMCAgMCAxNzAgMCAgMTcwIDg1IDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMjU1IDI1NSA4NQorMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCA4NSAwCiswIDE3MCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisyNTUgMjU1IDg1ICAyNTUgMjU1IDg1ICAxNzAgODUgMCAgMCAxNzAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisyNTUgMjU1IDI1NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgODUgMCAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDI1NSA4NQorMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgODUgMAorODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDg1IDAgIDg1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICA4NSAyNTUgODUgIDI1NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICA4NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgMjU1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSAyNTUgODUgIDI1NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSA4NSA4NQorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDI1NSA4NSAgMTcwIDg1IDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCAxNzAgMTcwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMAorODUgODUgODUgIDE3MCA4NSAwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSAyNTUgODUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgODUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgODUgODUKKzg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorODUgODUgODUgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1CisyNTUgODUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSA4NSA4NSAgODUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCiswIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NQorODUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUKKzg1IDg1IDg1ICAwIDAgMCAgODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CisxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgODUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDg1IDAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICA4NSAyNTUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCis4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NQorMTcwIDg1IDAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgODUgMAorODUgODUgODUgIDI1NSA4NSA4NSAgODUgMjU1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDg1IDg1IDg1ICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorODUgMjU1IDg1ICAyNTUgODUgODUgIDE3MCAxNzAgMTcwICA4NSAyNTUgODUgIDI1NSA4NSA4NSAgODUgMjU1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDg1IDg1IDg1Cis4NSA4NSA4NSAgODUgMjU1IDg1ICAyNTUgODUgODUgIDE3MCAxNzAgMTcwICA4NSAyNTUgODUgIDE3MCA4NSAwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1Cis4NSA4NSA4NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgODUgODUgODUKKzE3MCA4NSAwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDg1IDAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgODUgODUgODUKKzE3MCA4NSAwICA4NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDE3MCAwICA4NSA4NSA4NQorMTcwIDg1IDAgIDg1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NQorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1CisxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUKKzI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUKKzg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSAyNTUgODUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1CisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUKKzE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgODUgMAorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NQorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgODUgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDE3MCA4NSAwICA4NSA4NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSAyNTUgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDE3MCAxNzAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICAxNzAgODUgMCAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisxNzAgODUgMCAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwCisyNTUgMjU1IDI1NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICAxNzAgODUgMCAgODUgODUgODUgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAKKzI1NSAyNTUgODUgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgMjU1IDg1ICA4NSA4NSA4NSAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NSAgMTcwIDg1IDAKKzE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDI1NSAyNTUgMjU1ICAyNTUgMjU1IDI1NQorMjU1IDI1NSA4NSAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDI1NSAgMTcwIDE3MCAxNzAgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgMjU1IDI1NSA4NSAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgODUgODUgODUgIDg1IDg1IDg1CisyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MAorMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDg1IDg1IDg1CiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MAorMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgODUgODUgODUgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NQorMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1ICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwCisxNzAgMTcwIDE3MCAgMjU1IDI1NSAyNTUgIDE3MCAxNzAgMTcwICAxNzAgMTcwIDE3MCAgODUgODUgODUgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMTcwIDg1IDAgIDg1IDg1IDg1ICAxNzAgODUgMAorODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAxNzAgODUgMAorODUgODUgODUgIDE3MCA4NSAwICAxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCAxNzAgMTcwICAyNTUgMjU1IDg1CisxNzAgMTcwIDE3MCAgMTcwIDE3MCAxNzAgIDE3MCA4NSAwICA4NSA4NSA4NSAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NQorODUgODUgODUgIDg1IDg1IDg1ICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICA4NSA4NSA4NQorODUgODUgODUgIDg1IDI1NSA4NSAgMTcwIDg1IDAgIDE3MCAxNzAgMTcwICAxNzAgODUgMCAgMTcwIDE3MCAxNzAKKzg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgODUgODUgODUgIDg1IDg1IDg1ICA4NSA4NSA4NSAgODUgODUgODUgIDg1IDg1IDg1Cis4NSA4NSA4NSAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCiswIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMAorMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwICAwIDAgMCAgMCAwIDAKKzAgMCAwICAwIDAgMCAgMCAwIDAgIDAgMCAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jCmluZGV4IDNhM2Y4MGYuLjA1NzNlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHBtYWdiYWZiX3BhciksIGRldik7CiAJaWYgKCFpbmZvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIGNvbG9yIG1hcFxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvYzsKIAl9CkBAIC0xNzMsOCArMTczLDkgQEAKIAkvKiBSZXF1ZXN0IHRoZSBJL08gTUVNIHJlc291cmNlLiAgKi8KIAlzdGFydCA9IHRkZXYtPnJlc291cmNlLnN0YXJ0OwogCWxlbiA9IHRkZXYtPnJlc291cmNlLmVuZCAtIHN0YXJ0ICsgMTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXYtPmJ1c19pZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLCBkZXYtPmJ1c19pZCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLAorCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnJfY21hcDsKIAl9CkBAIC0xODMsNyArMTg0LDcgQEAKIAlpbmZvLT5maXgubW1pb19zdGFydCA9IHN0YXJ0OwogCXBhci0+bW1pbyA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAlpZiAoIXBhci0+bW1pbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAJfQpAQCAtMTk0LDcgKzE5NSw3IEBACiAJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsCiAJCQkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfbW1pb19tYXA7CiAJfQpAQCAtMjA1LDE0ICsyMDYsMTQgQEAKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZ290byBlcnJfc21lbV9tYXA7CiAJfQogCiAJZ2V0X2RldmljZShkZXYpOwogCiAJcHJfaW5mbygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSBhdCAlc1xuIiwKLQkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXYtPmJ1c19pZCk7CisJCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2X25hbWUoZGV2KSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYwppbmRleCA5YjgwNTk3Li45ODc0ODcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWFnYmJmYl9wYXIpLCBkZXYpOwogCWlmICghaW5mbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldl9uYW1lKGRldikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciBtYXBcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2M7CiAJfQpAQCAtMjgwLDggKzI4MCw5IEBACiAJLyogUmVxdWVzdCB0aGUgSS9PIE1FTSByZXNvdXJjZS4gICovCiAJc3RhcnQgPSB0ZGV2LT5yZXNvdXJjZS5zdGFydDsKIAlsZW4gPSB0ZGV2LT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2LT5idXNfaWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwgZGV2LT5idXNfaWQpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldl9uYW1lKGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2NtYXA7CiAJfQpAQCAtMjkwLDcgKzI5MSw3IEBACiAJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBzdGFydDsKIAlwYXItPm1taW8gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFwYXItPm1taW8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3Jlc291cmNlOwogCX0KQEAgLTMwMSw3ICszMDIsNyBAQAogCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gc3RhcnQgKyBQTUFHQl9CX0ZCTUVNOwogCXBhci0+c21lbSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKIAlpZiAoIXBhci0+c21lbSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9tbWlvX21hcDsKIAl9CkBAIC0zMTYsNyArMzE3LDcgQEAKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZ290byBlcnJfc21lbV9tYXA7CiAJfQogCkBAIC0zMjgsNyArMzI5LDcgQEAKIAkJIHBhci0+b3NjMSAvIDEwMDAsIHBhci0+b3NjMSAlIDEwMDApOwogCiAJcHJfaW5mbygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSBhdCAlc1xuIiwKLQkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXYtPmJ1c19pZCk7CisJCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2X25hbWUoZGV2KSk7CiAJcHJfaW5mbygiZmIlZDogT3NjMDogJXMsIE9zYzE6ICVzLCBPc2MldSBzZWxlY3RlZFxuIiwKIAkJaW5mby0+bm9kZSwgZnJlcTAsIHBhci0+b3NjMSA/IGZyZXExIDogImRpc2FibGVkIiwKIAkJcGFyLT5vc2MxICE9IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wczNmYi5jIGIvZHJpdmVycy92aWRlby9wczNmYi5jCmluZGV4IDg3ZjgyNmUuLmUwMGMxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAJZGV2LT5jb3JlLmRyaXZlcl9kYXRhID0gaW5mbzsKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgIiVzICVzLCB1c2luZyAldSBLaUIgb2YgdmlkZW8gbWVtb3J5XG4iLAotCQkgZGV2X2RyaXZlcl9zdHJpbmcoaW5mby0+ZGV2KSwgaW5mby0+ZGV2LT5idXNfaWQsCisJCSBkZXZfZHJpdmVyX3N0cmluZyhpbmZvLT5kZXYpLCBkZXZfbmFtZShpbmZvLT5kZXYpLAogCQkgaW5mby0+Zml4LnNtZW1fbGVuID4+IDEwKTsKIAogCXRhc2sgPSBrdGhyZWFkX3J1bihwczNmYmQsIGluZm8sIERFVklDRV9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCmluZGV4IDBhMGZkNDguLjUzZjhmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwpAQCAtNjEsNyArNjEsNyBAQAogI2luY2x1ZGUgPG1hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oPgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMTg4LDcgKzE4OCw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwdnIyZmJfbWFwOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgdW5zaWduZWQgaW50IHNoZG1hID0gUFZSMl9DQVNDQURFX0NIQU47CiBzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJkbWEgPSBPTkNISVBfTlJfRE1BX0NIQU5ORUxTOwogI2VuZGlmCkBAIC0yMDcsNyArMjA3LDcgQEAKIHN0YXRpYyBpbnQgcHZyMl9pbml0X2NhYmxlKHZvaWQpOwogc3RhdGljIGludCBwdnIyX2dldF9wYXJhbShjb25zdCBzdHJ1Y3QgcHZyMl9wYXJhbXMgKnAsIGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCwgaW50IHNpemUpOwotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKICNlbmRpZgpAQCAtMjE4LDcgKzIxOCw3IEBACiAJLmZiX2JsYW5rCT0gcHZyMmZiX2JsYW5rLAogCS5mYl9jaGVja192YXIJPSBwdnIyZmJfY2hlY2tfdmFyLAogCS5mYl9zZXRfcGFyCT0gcHZyMmZiX3NldF9wYXIsCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogCS5mYl93cml0ZQk9IHB2cjJmYl93cml0ZSwKICNlbmRpZgogCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKQEAgLTY3MSw3ICs2NzEsNyBAQAogCXJldHVybiBjYWJsZV90eXBlOwogfQogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHNzaXplX3QgcHZyMmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC03NDMsNyArNzQzLDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NIX0RNQSAqLworI2VuZGlmIC8qIENPTkZJR19QVlIyX0RNQSAqLwogCiAvKioKICAqIHB2cjJmYl9jb21tb25faW5pdApAQCAtODkzLDcgKzg5Myw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogCWlmIChyZXF1ZXN0X2RtYShwdnIyZG1hLCAicHZyMiIpICE9IDApIHsKIAkJZnJlZV9pcnEoSFdfRVZFTlRfVlNZTkMsIDApOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtOTE1LDcgKzkxNSw3IEBACiAJfQogCiAJZnJlZV9pcnEoSFdfRVZFTlRfVlNZTkMsIDApOwotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAlmcmVlX2RtYShwdnIyZG1hKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCAyYzVkMDY5Li45MmVhMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtMzMsNiArMzMsOCBAQAogCXN0cnVjdCBmYl9pbmZvIGluZm87CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyBkZWZpbzsKKwl1bnNpZ25lZCBsb25nIGZyYW1lX2VuZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZV9lbmRfd2FpdDsKIH07CiAKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2IHsKQEAgLTIyNiw3ICsyMjgsMTAgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzaF9tb2JpbGVfbGNkY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoOwogCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCBpc19zdWI7CisJaW50IGs7CiAKIAkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KIAl0bXAgPSBsY2RjX3JlYWQocHJpdiwgX0xESU5UUik7CkBAIC0yMzQsOCArMjM5LDI0IEBACiAJdG1wIHw9IDB4MDAwMDAwZmYgXiBMRElOVFJfRlM7IC8qIHN0YXR1cyBpbiBsb3cgOCAqLwogCWxjZGNfd3JpdGUocHJpdiwgX0xESU5UUiwgdG1wKTsKIAotCS8qIGRpc2FibGUgY2xvY2tzICovCi0Jc2hfbW9iaWxlX2xjZGNfY2xrX29mZihwcml2KTsKKwkvKiBmaWd1cmUgb3V0IGlmIHRoaXMgaW50ZXJydXB0IGlzIGZvciBtYWluIG9yIHN1YiBsY2QgKi8KKwlpc19zdWIgPSAobGNkY19yZWFkKHByaXYsIF9MRFNSKSAmICgxIDw8IDEwKSkgPyAxIDogMDsKKworCS8qIHdha2UgdXAgY2hhbm5lbCBhbmQgZGlzYWJsZSBjbG9ja3MqLworCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CisJCWNoID0gJnByaXYtPmNoW2tdOworCisJCWlmICghY2gtPmVuYWJsZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfc3ViID09IGxjZGNfY2hhbl9pc19zdWJsY2QoY2gpKSB7CisJCQljaC0+ZnJhbWVfZW5kID0gMTsKKwkJCXdha2VfdXAoJmNoLT5mcmFtZV9lbmRfd2FpdCk7CisKKwkJCXNoX21vYmlsZV9sY2RjX2Nsa19vZmYocHJpdik7CisJCX0KKwl9CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQ0OCwxOCArNDY5LDI3IEBACiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZwkqYm9hcmRfY2ZnOwogCWludCBrOwogCi0JLyogdGVsbCB0aGUgYm9hcmQgY29kZSB0byBkaXNhYmxlIHRoZSBwYW5lbCAqLworCS8qIGNsZWFuIHVwIGRlZmVycmVkIGlvIGFuZCBhc2sgYm9hcmQgY29kZSB0byBkaXNhYmxlIHBhbmVsICovCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hba107CisKKwkJLyogZGVmZXJyZWQgaW8gbW9kZToKKwkJICogZmx1c2ggZnJhbWUsIGFuZCB3YWl0IGZvciBmcmFtZSBlbmQgaW50ZXJydXB0CisJCSAqIGNsZWFuIHVwIGRlZmVycmVkIGlvIGFuZCBlbmFibGUgY2xvY2sKKwkJICovCisJCWlmIChjaC0+aW5mby5mYmRlZmlvKSB7CisJCQljaC0+ZnJhbWVfZW5kID0gMDsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2gtPmluZm8uZGVmZXJyZWRfd29yaywgMCk7CisJCQl3YWl0X2V2ZW50KGNoLT5mcmFtZV9lbmRfd2FpdCwgY2gtPmZyYW1lX2VuZCk7CisJCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCZjaC0+aW5mbyk7CisJCQljaC0+aW5mby5mYmRlZmlvID0gTlVMTDsKKwkJCXNoX21vYmlsZV9sY2RjX2Nsa19vbihwcml2KTsKKwkJfQorCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKIAkJaWYgKGJvYXJkX2NmZy0+ZGlzcGxheV9vZmYpCiAJCQlib2FyZF9jZmctPmRpc3BsYXlfb2ZmKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSk7CiAKLQkJLyogY2xlYW51cCBkZWZlcnJlZCBpbyBpZiBlbmFibGVkICovCi0JCWlmIChjaC0+aW5mby5mYmRlZmlvKSB7Ci0JCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCZjaC0+aW5mbyk7Ci0JCQljaC0+aW5mby5mYmRlZmlvID0gTlVMTDsKLQkJfQogCX0KIAogCS8qIHN0b3AgdGhlIGxjZGMgKi8KQEAgLTY1Miw2ICs2ODIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlzaF9tb2JpbGVfbGNkY19zdG9wKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzaF9tb2JpbGVfbGNkY19zdGFydChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9tb2JpbGVfbGNkY19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gc2hfbW9iaWxlX2xjZGNfc3VzcGVuZCwKKwkucmVzdW1lID0gc2hfbW9iaWxlX2xjZGNfcmVzdW1lLAorfTsKKwogc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX21vYmlsZV9sY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC02ODcsNyArNzM3LDcgQEAKIAl9CiAKIAllcnJvciA9IHJlcXVlc3RfaXJxKGksIHNoX21vYmlsZV9sY2RjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICBwZGV2LT5kZXYuYnVzX2lkLCBwcml2KTsKKwkJCSAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcHJpdik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IGlycVxuIik7CiAJCWdvdG8gZXJyMTsKQEAgLTcwNyw2ICs3NTcsNyBAQAogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGVcbiIpOwogCQkJZ290byBlcnIxOwogCQl9CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmNoW2ldLmZyYW1lX2VuZF93YWl0KTsKIAogCQlzd2l0Y2ggKHBkYXRhLT5jaFtpXS5jaGFuKSB7CiAJCWNhc2UgTENEQ19DSEFOX01BSU5MQ0Q6CkBAIC04NjAsNiArOTExLDcgQEAKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gInNoX21vYmlsZV9sY2RjX2ZiIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gJnNoX21vYmlsZV9sY2RjX2Rldl9wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc2hfbW9iaWxlX2xjZGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfbGNkY19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwppbmRleCA3YmFmMmRkLi5hMWViMDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTc1MSw3ICs3NTEsNyBAQAogCX0KIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgJnRtaW9mYl9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkJCWRldi0+ZGV2LmJ1c19pZCwgaW5mbyk7CisJCQkJCWRldl9uYW1lKCZkZXYtPmRldiksIGluZm8pOwogCiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfcmVxdWVzdF9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IDZjMmQzN2YuLjc0YWU3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC0yMDQsOCArMjA0LDExIEBACiAJCX0gZWxzZSB7CiAJCQl2ODZkX3N0YXJ0ZWQgPSAxOwogCQkJZXJyID0gY25fbmV0bGlua19zZW5kKG0sIDAsIGdmcF9hbnkoKSk7CisJCQlpZiAoZXJyID09IC1FTk9CVUZTKQorCQkJCWVyciA9IDA7CiAJCX0KLQl9CisJfSBlbHNlIGlmIChlcnIgPT0gLUVOT0JVRlMpCisJCWVyciA9IDA7CiAKIAlpZiAoIWVyciAmJiAhKHRhc2stPnQuZmxhZ3MgJiBURl9FWElUKSkKIAkJZXJyID0gIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCh0YXNrLT5kb25lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL3cxLWdwaW8uYyBiL2RyaXZlcnMvdzEvbWFzdGVycy93MS1ncGlvLmMKaW5kZXggOWUxMTM4YS4uYTQxMTcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL3cxLWdwaW8uYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvdzEtZ3Bpby5jCkBAIC0zOSw3ICszOSw3IEBACiB7CiAJc3RydWN0IHcxX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkYXRhOwogCi0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5waW4pOworCXJldHVybiBncGlvX2dldF92YWx1ZShwZGF0YS0+cGluKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB3MV9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggMzI1YzEwZi4uNTVmNjRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtOTQwLDIxICs5NDAsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2R0LgogCi1jb25maWcgV0RUXzUwMQotCWJvb2wgIldEVDUwMSBmZWF0dXJlcyIKLQlkZXBlbmRzIG9uIFdEVAotCWhlbHAKLQkgIFNheWluZyBZIGhlcmUgYW5kIGNyZWF0aW5nIGEgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSAvZGV2L3RlbXBlcmF0dXJlCi0JICB3aXRoIG1ham9yIG51bWJlciAxMCBhbmQgbWlub3IgbnVtYmVyIDEzMSAoIm1hbiBta25vZCIpIHdpbGwgZ2l2ZQotCSAgeW91IGEgdGhlcm1vbWV0ZXIgaW5zaWRlIHlvdXIgY29tcHV0ZXI6IHJlYWRpbmcgZnJvbQotCSAgL2Rldi90ZW1wZXJhdHVyZSB5aWVsZHMgb25lIGJ5dGUsIHRoZSB0ZW1wZXJhdHVyZSBpbiBkZWdyZWVzCi0JICBGYWhyZW5oZWl0LiBUaGlzIHdvcmtzIG9ubHkgaWYgeW91IGhhdmUgYSBXRFQ1MDFQIHdhdGNoZG9nIGJvYXJkCi0JICBpbnN0YWxsZWQuCi0KLQkgIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgRmFuIFRhY2hvbWV0ZXIgb24gdGhlIFdEVDUwMVAsIHRoZW4geW91Ci0JICBjYW4gZG8gdGhpcyB2aWEgdGhlIHRhY2hvbWV0ZXIgcGFyYW1ldGVyLiBPbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYQotCSAgZmFuIHRhY2hvbWV0ZXIgYWN0dWFsbHkgc2V0IHVwLgotCiAjCiAjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYwppbmRleCAzZTU3YWE0Li40ZDE4Yzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglBY3F1aXJlIFNpbmdsZSBCb2FyZCBDb21wdXRlciBXYXRjaGRvZyBUaW1lciBkcml2ZXIKICAqCi0gKiAgICAgIEJhc2VkIG9uIHdkdC5jLiBPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CisgKglCYXNlZCBvbiB3ZHQuYy4gT3JpZ2luYWwgY29weXJpZ2h0IG1lc3NhZ2VzOgogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKICAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQEAgLTE3LDkgKzE3LDkgQEAKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTUgICAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCi0gKiAgICAgIDE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KLSAqICAgICAgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0gKiAgICAgICAgICBDYW4ndCBhZGQgdGltZW91dCAtIGRyaXZlciBkb2Vzbid0IGFsbG93IGNoYW5naW5nIHZhbHVlCisgKgkxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CisgKgkgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKyAqCSAgICBDYW4ndCBhZGQgdGltZW91dCAtIGRyaXZlciBkb2Vzbid0IGFsbG93IGNoYW5naW5nIHZhbHVlCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCmluZGV4IGExZDc4NTYuLjgyNGQwNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKQEAgLTEzOCw3ICsxMzgsOSBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKLQkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX01BR0lDQ0xPU0UsCisJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8CisJCQkgICBXRElPRl9TRVRUSU1FT1VUIHwKKwkJCSAgIFdESU9GX01BR0lDQ0xPU0UsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKIAkJLmlkZW50aXR5ID0gV0FUQ0hET0dfTkFNRSwKIAl9OwpAQCAtMjU5LDcgKzI2MSw4IEBACiAJCWdvdG8gdW5yZWdfc3RvcDsKIAl9CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmIChhZHZ3ZHRfc2V0X2hlYXJ0YmVhdCh0aW1lb3V0KSkgewogCQlhZHZ3ZHRfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19USU1FT1VUKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCmluZGV4IDJhNzY5MGUuLjkzN2E4MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYwpAQCAtNjAsNyArNjAsNyBAQAogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsICZ2YWwpOwogCXZhbCAmPSB+MHgzRjsJLyogTWFzayBjb3VudCAqLwotCXZhbCB8PSAoMTw8MjUpIHwgYWxpX3RpbWVvdXRfYml0czsKKwl2YWwgfD0gKDEgPDwgMjUpIHwgYWxpX3RpbWVvdXRfYml0czsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsIHZhbCk7CiAKIAlzcGluX3VubG9jaygmYWxpX2xvY2spOwpAQCAtNzksOCArNzksOCBAQAogCXNwaW5fbG9jaygmYWxpX2xvY2spOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsICZ2YWwpOwotCXZhbCAmPSB+MHgzRjsJLyogTWFzayBjb3VudCB0byB6ZXJvIChkaXNhYmxlZCkgKi8KLQl2YWwgJj0gfigxPDwyNSk7LyogYW5kIGZvciBzYWZldHkgbWFzayB0aGUgcmVzZXQgZW5hYmxlICovCisJdmFsICY9IH4weDNGOwkJLyogTWFzayBjb3VudCB0byB6ZXJvIChkaXNhYmxlZCkgKi8KKwl2YWwgJj0gfigxIDw8IDI1KTsJLyogYW5kIGZvciBzYWZldHkgbWFzayB0aGUgcmVzZXQgZW5hYmxlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhbGlfcGNpLCAweENDLCB2YWwpOwogCiAJc3Bpbl91bmxvY2soJmFsaV9sb2NrKTsKQEAgLTg5LDcgKzg5LDcgQEAKIC8qCiAgKglhbGlfa2VlcGFsaXZlCS0Jc2VuZCBhIGtlZXBhbGl2ZSB0byB0aGUgd2F0Y2hkb2cKICAqCi0gKiAgICAgIFNlbmQgYSBrZWVwYWxpdmUgdG8gdGhlIHRpbWVyIChhY3R1YWxseSB3ZSByZXN0YXJ0IHRoZSB0aW1lcikuCisgKglTZW5kIGEga2VlcGFsaXZlIHRvIHRoZSB0aW1lciAoYWN0dWFsbHkgd2UgcmVzdGFydCB0aGUgdGltZXIpLgogICovCiAKIHN0YXRpYyB2b2lkIGFsaV9rZWVwYWxpdmUodm9pZCkKQEAgLTEwOSwxMSArMTA5LDExIEBACiAJaWYgKHQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIGlmICh0IDwgNjApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSB0fCgxPDw2KTsKKwkJYWxpX3RpbWVvdXRfYml0cyA9IHR8KDEgPDwgNik7CiAJZWxzZSBpZiAodCA8IDM2MDApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSAodC82MCl8KDE8PDcpOworCQlhbGlfdGltZW91dF9iaXRzID0gKHQgLyA2MCl8KDEgPDwgNyk7CiAJZWxzZSBpZiAodCA8IDE4MDAwKQotCQlhbGlfdGltZW91dF9iaXRzID0gKHQvMzAwKXwoMTw8Nil8KDE8PDcpOworCQlhbGlfdGltZW91dF9iaXRzID0gKHQgLyAzMDApfCgxIDw8IDYpfCgxIDw8IDcpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzOCw3ICsxMzgsNyBAQAogICovCiAKIHN0YXRpYyBzc2l6ZV90IGFsaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCi0JCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCisJCQkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLwogCWlmIChsZW4pIHsKQEAgLTM0OCw5ICszNDgsOSBAQAogCS8qIFRpbWVyIGJpdHMgKi8KIAl3ZG9nICY9IH4weDNGOwogCS8qIElzc3VlZCBldmVudHMgKi8KLQl3ZG9nICY9IH4oKDE8PDI3KXwoMTw8MjYpfCgxPDwyNSl8KDE8PDI0KSk7CisJd2RvZyAmPSB+KCgxIDw8IDI3KXwoMSA8PCAyNil8KDEgPDwgMjUpfCgxIDw8IDI0KSk7CiAJLyogTm8gbW9uaXRvciBiaXRzICovCi0Jd2RvZyAmPSB+KCgxPDwxNil8KDE8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KDE8PDEwKXwoMTw8OSkpOworCXdkb2cgJj0gfigoMSA8PCAxNil8KDEgPDwgMTMpfCgxIDw8IDEyKXwoMSA8PCAxMSl8KDEgPDwgMTApfCgxIDw8IDkpKTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhDQywgd2RvZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCmluZGV4IGEwNDVlZjguLjkwZjk4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYwpAQCAtMzU1LDcgKzM1NSw4IEBACiAJYWxpbTcxMDFfcG11ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NNzEwMSwKIAkJTlVMTCk7CiAJaWYgKCFhbGltNzEwMV9wbXUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFMaSBNNzEwMSBQTVUgbm90IHByZXNlbnQgLSBXRFQgbm90IHNldFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiQUxpIE03MTAxIFBNVSBub3QgcHJlc2VudCAtIFdEVCBub3Qgc2V0XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTM5OSw3ICs0MDAsOCBAQAogCiAJcmMgPSBtaXNjX3JlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQl3ZHRfbWlzY2Rldi5taW5vciwgcmMpOwogCQlnb3RvIGVycl9vdXRfcmVib290OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jCmluZGV4IGE1NmFjODQuLjQzNWIwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAgKiBQYXQgdGhlIHdhdGNoZG9nIHdoZW5ldmVyIGRldmljZSBpcyB3cml0dGVuIHRvLgogICovCiBzdGF0aWMgc3NpemVfdCBhdDkxX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwKLSAgICAgIGxvZmZfdCAqcHBvcykKKwkJCQkJCQkJbG9mZl90ICpwcG9zKQogewogCWlmICghbGVuKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvY3B3ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMKaW5kZXggMDg0ZGZlOS4uNDEwNzBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qIGNwd2QuYyAtIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgaGFyZHdhcmUgd2F0Y2hkb2cKICAqIHRpbWVycyBmb3VuZCBvbiBTdW4gTWljcm9zeXN0ZW1zIENQMTQwMCBhbmQgQ1AxNTAwIGJvYXJkcy4KICAqCi0gKiBUaGlzIGRldmljZSBzdXBwb3J0cyBib3RoIHRoZSBnZW5lcmljIExpbnV4IHdhdGNoZG9nIAorICogVGhpcyBkZXZpY2Ugc3VwcG9ydHMgYm90aCB0aGUgZ2VuZXJpYyBMaW51eCB3YXRjaGRvZwogICogaW50ZXJmYWNlIGFuZCBTb2xhcmlzLWNvbXBhdGlibGUgaW9jdGxzIGFzIGJlc3QgaXQgaXMKICAqIGFibGUuCiAgKgogICogTk9URTogCUNQMTQwMCBzeXN0ZW1zIGFwcGVhciB0byBoYXZlIGEgZGVmZWN0aXZlIGludHJfbWFzawogICogCQkJcmVnaXN0ZXIgb24gdGhlIFBMRCwgcHJldmVudGluZyB0aGUgZGlzYWJsaW5nIG9mCi0gKiAJCQl0aW1lciBpbnRlcnJ1cHRzLiAgV2UgdXNlIGEgdGltZXIgdG8gcGVyaW9kaWNhbGx5IAorICogCQkJdGltZXIgaW50ZXJydXB0cy4gIFdlIHVzZSBhIHRpbWVyIHRvIHBlcmlvZGljYWxseQogICogCQkJcmVzZXQgJ3N0b3BwZWQnIHdhdGNoZG9ncyBvbiBhZmZlY3RlZCBwbGF0Zm9ybXMuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAwIEVyaWMgQnJvd2VyIChlYnJvd2VyQHVzYS5uZXQpCkBAIC0yOCwxMCArMjgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQogI2luY2x1ZGUgPGFzbS93YXRjaGRvZy5oPgogCiAjZGVmaW5lIERSSVZFUl9OQU1FCSJjcHdkIgpAQCAtNDMsOCArNDIsOCBAQAogI2RlZmluZSBXRF9CTElNSVQJMHhGRkZGCiAKICNkZWZpbmUgV0QwX01JTk9SCTIxMgotI2RlZmluZSBXRDFfTUlOT1IJMjEzCQotI2RlZmluZSBXRDJfTUlOT1IJMjE0CQorI2RlZmluZSBXRDFfTUlOT1IJMjEzCisjZGVmaW5lIFdEMl9NSU5PUgkyMTQKIAogLyogSW50ZXJuYWwgZHJpdmVyIGRlZmluaXRpb25zLiAgKi8KICNkZWZpbmUgV0QwX0lECQkJMApAQCAtOTEsMTYgKzkwLDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3B3ZCAqY3B3ZF9kZXZpY2U7CiAKLS8qIFN1biB1c2VzIEFsdGVyYSBQTEQgRVBGODgyMEFUQzE0NC00IAorLyogU3VuIHVzZXMgQWx0ZXJhIFBMRCBFUEY4ODIwQVRDMTQ0LTQKICAqIHByb3ZpZGluZyB0aHJlZSBoYXJkd2FyZSB3YXRjaGRvZ3M6CiAgKgotICogCTEpIFJJQyAtIHNlbmRzIGFuIGludGVycnVwdCB3aGVuIHRyaWdnZXJlZAotICogCTIpIFhJUiAtIGFzc2VydHMgWElSX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUKLSAqIAkzKSBQT1IgLSBhc3NlcnRzIFBPUl9CX1JFU0VUIHdoZW4gdHJpZ2dlcmVkLCByZXNldHMgQ1BVLCBiYWNrcGxhbmUsIGJvYXJkCisgKiAxKSBSSUMgLSBzZW5kcyBhbiBpbnRlcnJ1cHQgd2hlbiB0cmlnZ2VyZWQKKyAqIDIpIFhJUiAtIGFzc2VydHMgWElSX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUKKyAqIDMpIFBPUiAtIGFzc2VydHMgUE9SX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUsIGJhY2twbGFuZSwgYm9hcmQKICAqCiAgKioqIFRpbWVyIHJlZ2lzdGVyIGJsb2NrIGRlZmluaXRpb24gKHN0cnVjdCB3ZF90aW1lcl9yZWdibGspCiAgKgotICogZGNudHIgYW5kIGxpbWl0IHJlZ2lzdGVycyAoaGFsZndvcmQgYWNjZXNzKTogICAgICAKKyAqIGRjbnRyIGFuZCBsaW1pdCByZWdpc3RlcnMgKGhhbGZ3b3JkIGFjY2Vzcyk6CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiB8IDE1IHwgLi4ufCAxIHwgMCB8CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDgsNyArMTA3LDggQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIGRjbnRyIC0gCUN1cnJlbnQgMTYtYml0IGRvd25jb3VudGVyIHZhbHVlLgogICogCQkJV2hlbiBkb3duY291bnRlciByZWFjaGVzICcwJyB3YXRjaGRvZyBleHBpcmVzLgotICogCQkJUmVhZGluZyB0aGlzIHJlZ2lzdGVyIHJlc2V0cyBkb3duY291bnRlciB3aXRoICdsaW1pdCcgdmFsdWUuCisgKiAJCQlSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgcmVzZXRzIGRvd25jb3VudGVyIHdpdGgKKyAqIAkJCSdsaW1pdCcgdmFsdWUuCiAgKiBsaW1pdCAtIAkxNi1iaXQgY291bnRkb3duIHZhbHVlIGluIDEvMTB0aCBzZWNvbmQgaW5jcmVtZW50cy4KICAqIAkJCVdyaXRpbmcgdGhpcyByZWdpc3RlciBiZWdpbnMgY291bnRkb3duIHdpdGggaW5wdXQgdmFsdWUuCiAgKiAJCQlSZWFkaW5nIGZyb20gdGhpcyByZWdpc3RlciBkb2VzIG5vdCBhZmZlY3QgY291bnRlci4KQEAgLTE1OCwxMSArMTU4LDExIEBACiBzdGF0aWMgaW50IHdkMV90aW1lb3V0ID0gMDsKIHN0YXRpYyBpbnQgd2QyX3RpbWVvdXQgPSAwOwogCi1tb2R1bGVfcGFyYW0JKHdkMF90aW1lb3V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHdkMF90aW1lb3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh3ZDBfdGltZW91dCwgIkRlZmF1bHQgd2F0Y2hkb2cwIHRpbWVvdXQgaW4gMS8xMHNlY3MiKTsKLW1vZHVsZV9wYXJhbSAJKHdkMV90aW1lb3V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHdkMV90aW1lb3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh3ZDFfdGltZW91dCwgIkRlZmF1bHQgd2F0Y2hkb2cxIHRpbWVvdXQgaW4gMS8xMHNlY3MiKTsKLW1vZHVsZV9wYXJhbSAJKHdkMl90aW1lb3V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHdkMl90aW1lb3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh3ZDJfdGltZW91dCwgIkRlZmF1bHQgd2F0Y2hkb2cyIHRpbWVvdXQgaW4gMS8xMHNlY3MiKTsKIAogTU9EVUxFX0FVVEhPUigiRXJpYyBCcm93ZXIgPGVicm93ZXJAdXNhLm5ldD4iKTsKQEAgLTIwMSw5ICsyMDEsOSBAQAogc3RhdGljIHZvaWQgY3B3ZF90b2dnbGVpbnRyKHN0cnVjdCBjcHdkICpwLCBpbnQgaW5kZXgsIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgY2hhciBjdXJyZWdzID0gY3B3ZF9yZWFkYihwLT5yZWdzICsgUExEX0lNQVNLKTsKLQl1bnNpZ25lZCBjaGFyIHNldHJlZ3MgPSAKLQkJKGluZGV4ID09IC0xKSA/IAotCQkoV0QwX0lOVFJfTUFTSyB8IFdEMV9JTlRSX01BU0sgfCBXRDJfSU5UUl9NQVNLKSA6IAorCXVuc2lnbmVkIGNoYXIgc2V0cmVncyA9CisJCShpbmRleCA9PSAtMSkgPworCQkoV0QwX0lOVFJfTUFTSyB8IFdEMV9JTlRSX01BU0sgfCBXRDJfSU5UUl9NQVNLKSA6CiAJCShwLT5kZXZzW2luZGV4XS5pbnRyX21hc2spOwogCiAJaWYgKGVuYWJsZSA9PSBXRF9JTlRSX09OKQpAQCAtMzAzLDI0ICszMDMsMjQgQEAKIAl1bnNpZ25lZCBjaGFyIHJldCAgPSBXRF9TVE9QUEVEOwogCiAJLyogZGV0ZXJtaW5lIFNUT1BQRUQgKi8KLQlpZiAoIXN0YXQpIAorCWlmICghc3RhdCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIGRldGVybWluZSBFWFBJUkVEIHZzIEZSRUVSVU4gdnMgUlVOTklORyAqLwogCWVsc2UgaWYgKFdEX1NfRVhQSVJFRCAmIHN0YXQpIHsKIAkJcmV0ID0gV0RfRVhQSVJFRDsKLQl9IGVsc2UgaWYoV0RfU19SVU5OSU5HICYgc3RhdCkgeworCX0gZWxzZSBpZiAoV0RfU19SVU5OSU5HICYgc3RhdCkgewogCQlpZiAoaW50ciAmIHAtPmRldnNbaW5kZXhdLmludHJfbWFzaykgewogCQkJcmV0ID0gV0RfRlJFRVJVTjsKIAkJfSBlbHNlIHsKIAkJCS8qIEZ1ZGdlIFdEX0VYUElSRUQgc3RhdHVzIGZvciBkZWZlY3RpdmUgQ1AxNDAwLS0KLQkJCSAqIElGIHRpbWVyIGlzIHJ1bm5pbmcgCi0JCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0IAorCQkJICogSUYgdGltZXIgaXMgcnVubmluZworCQkJICogCUFORCBicm9rZW5zdG9wIGlzIHNldAogCQkJICogCUFORCBhbiBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VydmljZWQKIAkJCSAqIHdlIGFyZSBXRF9FWFBJUkVELgogCQkJICoKLQkJCSAqIElGIHRpbWVyIGlzIHJ1bm5pbmcgCi0JCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0IAorCQkJICogSUYgdGltZXIgaXMgcnVubmluZworCQkJICogCUFORCBicm9rZW5zdG9wIGlzIHNldAogCQkJICogCUFORCBubyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VydmljZWQKIAkJCSAqIHdlIGFyZSBXRF9GUkVFUlVOLgogCQkJICovCkBAIC0zMjksNyArMzI5LDggQEAKIAkJCQlpZiAocC0+ZGV2c1tpbmRleF0ucnVuc3RhdHVzICYgV0RfU1RBVF9TVkNEKSB7CiAJCQkJCXJldCA9IFdEX0VYUElSRUQ7CiAJCQkJfSBlbHNlIHsKLQkJCQkJLyogd2UgY291bGQgYXMgd2VsbCBwcmV0ZW5kIHdlIGFyZSBleHBpcmVkICovCisJCQkJCS8qIHdlIGNvdWxkIGFzIHdlbGwgcHJldGVuZAorCQkJCQkgKiB3ZSBhcmUgZXhwaXJlZCAqLwogCQkJCQlyZXQgPSBXRF9GUkVFUlVOOwogCQkJCX0KIAkJCX0gZWxzZSB7CkBAIC0zNDIsNyArMzQzLDcgQEAKIAlpZiAocC0+ZGV2c1tpbmRleF0ucnVuc3RhdHVzICYgV0RfU1RBVF9TVkNEKQogCQlyZXQgfD0gV0RfU0VSVklDRUQ7CiAKLQlyZXR1cm4ocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgY3B3ZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMzY3LDIyICszNjgsMjIgQEAKIAlzdHJ1Y3QgY3B3ZCAqcCA9IGNwd2RfZGV2aWNlOwogCiAJbG9ja19rZXJuZWwoKTsKLQlzd2l0Y2goaW1pbm9yKGlub2RlKSkgewotCQljYXNlIFdEMF9NSU5PUjoKLQkJY2FzZSBXRDFfTUlOT1I6Ci0JCWNhc2UgV0QyX01JTk9SOgotCQkJYnJlYWs7CisJc3dpdGNoIChpbWlub3IoaW5vZGUpKSB7CisJY2FzZSBXRDBfTUlOT1I6CisJY2FzZSBXRDFfTUlOT1I6CisJY2FzZSBXRDJfTUlOT1I6CisJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwlkZWZhdWx0OgorCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIFJlZ2lzdGVyIElSUSBvbiBmaXJzdCBvcGVuIG9mIGRldmljZSAqLwogCWlmICghcC0+aW5pdGlhbGl6ZWQpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKHAtPmlycSwgJmNwd2RfaW50ZXJydXB0LCAKKwkJaWYgKHJlcXVlc3RfaXJxKHAtPmlycSwgJmNwd2RfaW50ZXJydXB0LAogCQkJCUlSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgcCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBJUlEgJWRcbiIsIAorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwKIAkJCQlwLT5pcnEpOwogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FQlVTWTsKQEAgLTQwMCw4ICs0MDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNwd2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIAotCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGNwd2RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpbmZvID0gewogCQkub3B0aW9ucwkJPSBXRElPRl9TRVRUSU1FT1VULApAQCAtNDA5LDYgKzQwOSw3IEBACiAJCS5pZGVudGl0eQkJPSBEUklWRVJfTkFNRSwKIAl9OwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBpbmRleCA9IGltaW5vcihpbm9kZSkgLSBXRDBfTUlOT1I7CiAJc3RydWN0IGNwd2QgKnAgPSBjcHdkX2RldmljZTsKIAlpbnQgc2V0b3B0ID0gMDsKQEAgLTQ0Miw3ICs0NDMsNyBAQAogCQkJY3B3ZF9zdGFydHRpbWVyKHAsIGluZGV4KTsKIAkJfSBlbHNlIHsKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CQorCQl9CiAJCWJyZWFrOwogCiAJLyogU29sYXJpcy1jb21wYXRpYmxlIElPQ1RMcyAqLwpAQCAtNDU4LDcgKzQ1OSw3IEBACiAKIAljYXNlIFdJT0NTVE9QOgogCQlpZiAocC0+ZW5hYmxlZCkKLQkJCXJldHVybigtRUlOVkFMKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNwd2Rfc3RvcHRpbWVyKHAsIGluZGV4KTsKIAkJYnJlYWs7CkBAIC00ODEsNyArNDgyLDcgQEAKIAljYXNlIFdJT0NTVE9QOgogCWNhc2UgV0lPQ0dTVEFUOgogCQlsb2NrX2tlcm5lbCgpOwotCQlydmFsID0gY3B3ZF9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJ2YWwgPSBjcHdkX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIApAQCAtNDkzLDcgKzQ5NCw3IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNwd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIAorc3RhdGljIHNzaXplX3QgY3B3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC01MDgsMjAgKzUwOSwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBjcHdkX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorc3RhdGljIHNzaXplX3QgY3B3ZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjcHdkX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmlvY3RsID0JY3B3ZF9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0JY3B3ZF9jb21wYXRfaW9jdGwsCi0JLm9wZW4gPQkJY3B3ZF9vcGVuLAotCS53cml0ZSA9CWNwd2Rfd3JpdGUsCi0JLnJlYWQgPQkJY3B3ZF9yZWFkLAotCS5yZWxlYXNlID0JY3B3ZF9yZWxlYXNlLAorCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkudW5sb2NrZWRfaW9jdGwgPQljcHdkX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPQkJY3B3ZF9jb21wYXRfaW9jdGwsCisJLm9wZW4gPQkJCWNwd2Rfb3BlbiwKKwkud3JpdGUgPQkJY3B3ZF93cml0ZSwKKwkucmVhZCA9CQkJY3B3ZF9yZWFkLAorCS5yZWxlYXNlID0JCWNwd2RfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNwd2RfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKaW5kZXggMmUxMzYwMi4uYzUxZDBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJEQVZJTkNJLVdEVDogIgogCkBAIC03NSw5ICs3NSw5IEBACiAJc3Bpbl9sb2NrKCZpb19sb2NrKTsKIAogCS8qIHB1dCB3YXRjaGRvZyBpbiBzZXJ2aWNlIHN0YXRlICovCi0JZGF2aW5jaV93cml0ZWwoV0RLRVlfU0VRMCwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTAsIHdkdF9iYXNlICsgV0RUQ1IpOwogCS8qIHB1dCB3YXRjaGRvZyBpbiBhY3RpdmUgc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVExLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMSwgd2R0X2Jhc2UgKyBXRFRDUik7CiAKIAlzcGluX3VubG9jaygmaW9fbG9jayk7CiB9CkBAIC05MCwyOSArOTAsMjkgQEAKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCiAJLyogZGlzYWJsZSwgaW50ZXJuYWwgY2xvY2sgc291cmNlICovCi0JZGF2aW5jaV93cml0ZWwoMCwgd2R0X2Jhc2UgKyBUQ1IpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRDUik7CiAJLyogcmVzZXQgdGltZXIsIHNldCBtb2RlIHRvIDY0LWJpdCB3YXRjaGRvZywgYW5kIHVucmVzZXQgKi8KLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRHQ1IpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRHQ1IpOwogCXRnY3IgPSBUSU1NT0RFXzY0QklUX1dET0cgfCBUSU0xMlJTX1VOUkVTRVQgfCBUSU0zNFJTX1VOUkVTRVQ7Ci0JZGF2aW5jaV93cml0ZWwodGdjciwgd2R0X2Jhc2UgKyBUR0NSKTsKKwlpb3dyaXRlMzIodGdjciwgd2R0X2Jhc2UgKyBUR0NSKTsKIAkvKiBjbGVhciBjb3VudGVyIHJlZ3MgKi8KLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRJTTEyKTsKLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRJTTM0KTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUSU0xMik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVElNMzQpOwogCS8qIHNldCB0aW1lb3V0IHBlcmlvZCAqLwogCXRpbWVyX21hcmdpbiA9ICgoKHU2NCloZWFydGJlYXQgKiBDTE9DS19USUNLX1JBVEUpICYgMHhmZmZmZmZmZik7Ci0JZGF2aW5jaV93cml0ZWwodGltZXJfbWFyZ2luLCB3ZHRfYmFzZSArIFBSRDEyKTsKKwlpb3dyaXRlMzIodGltZXJfbWFyZ2luLCB3ZHRfYmFzZSArIFBSRDEyKTsKIAl0aW1lcl9tYXJnaW4gPSAoKCh1NjQpaGVhcnRiZWF0ICogQ0xPQ0tfVElDS19SQVRFKSA+PiAzMik7Ci0JZGF2aW5jaV93cml0ZWwodGltZXJfbWFyZ2luLCB3ZHRfYmFzZSArIFBSRDM0KTsKKwlpb3dyaXRlMzIodGltZXJfbWFyZ2luLCB3ZHRfYmFzZSArIFBSRDM0KTsKIAkvKiBlbmFibGUgcnVuIGNvbnRpbnVvdXNseSAqLwotCWRhdmluY2lfd3JpdGVsKEVOQU1PREUxMl9QRVJJT0RJQywgd2R0X2Jhc2UgKyBUQ1IpOworCWlvd3JpdGUzMihFTkFNT0RFMTJfUEVSSU9ESUMsIHdkdF9iYXNlICsgVENSKTsKIAkvKiBPbmNlIHRoZSBXRFQgaXMgaW4gcHJlLWFjdGl2ZSBzdGF0ZSB3cml0ZSB0bwogCSAqIFRJTTEyLCBUSU0zNCwgUFJEMTIsIFBSRDM0LCBUQ1IsIFRHQ1IsIFdEVENSIGFyZQogCSAqIHdyaXRlIHByb3RlY3RlZCAoZXhjZXB0IGZvciB0aGUgV0RLRVkgZmllbGQpCiAJICovCiAJLyogcHV0IHdhdGNoZG9nIGluIHByZS1hY3RpdmUgc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVEwIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTAgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKIAkvKiBwdXQgd2F0Y2hkb2cgaW4gYWN0aXZlIHN0YXRlICovCi0JZGF2aW5jaV93cml0ZWwoV0RLRVlfU0VRMSB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVExIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CiAKIAlzcGluX3VubG9jaygmaW9fbG9jayk7CiB9CkBAIC0xOTcsMTcgKzE5NywxNiBAQAogewogCWludCByZXQgPSAwLCBzaXplOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAKIAlpZiAoaGVhcnRiZWF0IDwgMSB8fCBoZWFydGJlYXQgPiBNQVhfSEVBUlRCRUFUKQogCQloZWFydGJlYXQgPSBERUZBVUxUX0hFQVJUQkVBVDsKIAotCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUKLQkJIkRhVmluY2kgV2F0Y2hkb2cgVGltZXI6IGhlYXJ0YmVhdCAlZCBzZWNcbiIsIGhlYXJ0YmVhdCk7CisJZGV2X2luZm8oZGV2LCAiaGVhcnRiZWF0ICVkIHNlY1xuIiwgaGVhcnRiZWF0KTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUKLQkJCSJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb24gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtMjE1LDIwICsyMTQsMjYgQEAKIAl3ZHRfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb25cbiIpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQl3ZHRfYmFzZSA9ICh2b2lkIF9faW9tZW0gKikocmVzLT5zdGFydCk7CisKKwl3ZHRfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgc2l6ZSk7CisJaWYgKCF3ZHRfYmFzZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmRhdmluY2lfd2R0X21pc2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiY2Fubm90IHJlZ2lzdGVyIG1pc2MgZGV2aWNlXG4iKTsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOwogCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwogCQlrZnJlZSh3ZHRfbWVtKTsKIAl9IGVsc2UgewogCQlzZXRfYml0KFdEVF9ERVZJQ0VfSU5JVEVELCAmd2R0X3N0YXR1cyk7CiAJfQogCisJaW91bm1hcCh3ZHRfYmFzZSk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCmluZGV4IGExNzFmYzYuLjlhZGQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKQEAgLTgsMTkgKzgsMTkgQEAKICAqCUJhc2VkIG9uIHdkdC5jLgogICoJT3JpZ2luYWwgY29weXJpZ2h0IG1lc3NhZ2VzOgogICoKLSAqICAgICAgKGMpIENvcHlyaWdodCAxOTk2LTE5OTcgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCisgKgkoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKICAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICAgTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKLSAqICAgICAgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkCi0gKiAgICAgICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCU5laXRoZXIgQWxhbiBDb3ggbm9yIEN5bXJ1TmV0IEx0ZC4gYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlCisgKgl3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKKyAqCSJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCi0gKiAgICAgIChjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPioKKyAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPioKICAqLwogCiAvKiBDaGFuZ2Vsb2c6CkBAIC0zNyw3ICszNyw3IEBACiAgKglhZGQgZXhwZWN0X2Nsb3NlIHN1cHBvcnQKICAqCiAgKiAyMDAyLjA1LjMwIC0gSm9lbCBCZWNrZXIgPGpvZWwuYmVja2VyQG9yYWNsZS5jb20+Ci0gKiAJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgorICoJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgogICovCiAKIC8qCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlpZiAoaXJxID09IDApCiAJCXByaW50ayhLRVJOX0lORk8gIjogaW50ZXJydXB0IGRpc2FibGVkXG4iKTsKIAotCWV1cndkdF93cml0ZV9yZWcoV0RUX1RJTUVSX0NGRywgaXJxPDw0KTsKKwlldXJ3ZHRfd3JpdGVfcmVnKFdEVF9USU1FUl9DRkcsIGlycSA8PCA0KTsKIAogCWV1cndkdF93cml0ZV9yZWcoV0RUX1VOSVRfU0VMLCBXRFRfVU5JVF9TRUNTKTsJLyogd2UgdXNlIHNlY29uZHMgKi8KIAlldXJ3ZHRfc2V0X3RpbWVvdXQoMCk7CS8qIHRoZSBkZWZhdWx0IHRpbWVvdXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwppbmRleCA2Nzk5YTZkLi45YWNmMDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCkBAIC0zNCwxMSArMzQsMTUgQEAKIAogc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsKIG1vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzLiAxPD0gdGltZW91dCA8PTEzMSwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiLiIpOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LAorCSJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuIDE8PSB0aW1lb3V0IDw9MTMxLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfVElNRU9VVCkgIi4iKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsCisJIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2ZsYWdzOwpAQCAtMjY5LDcgKzI3Myw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsIC0xLCBOVUxMLCAwKTsKKwlnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSVl9OQU1FLAorCQkJCQkJCQktMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UpKSB7CiAJCXJldCA9IFBUUl9FUlIoZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlKTsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKaW5kZXggNzYzYzFlYS4uNmNmMTU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwpAQCAtNDcsNiArNDcsNyBAQAogI2RlZmluZSBQQ0lfQklPUzMyX1BBUkFHUkFQSF9MRU4JMTYKICNkZWZpbmUgUENJX1JPTV9CQVNFMQkJCTB4MDAwRjAwMDAKICNkZWZpbmUgUk9NX1NJWkUJCQkweDEwMDAwCisjZGVmaW5lIEhQV0RUX1ZFUlNJT04JCQkiMS4wMSIKIAogc3RydWN0IGJpb3MzMl9zZXJ2aWNlX2RpciB7CiAJdTMyIHNpZ25hdHVyZTsKQEAgLTEzMCwxNyArMTMxLDE0IEBACiBzdGF0aWMgc3RydWN0IGNtbl9yZWdpc3RlcnMgY21uX3JlZ3M7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHdkdF9kZXZpY2VzW10gPSB7Ci0JewotCSAudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9DT01QQVEsCi0JIC5kZXZpY2UgPSAweEIyMDMsCi0JIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAotCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKLQl9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NPTVBBUSwgMHhCMjAzKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0hQLCAweDMzMDYpIH0sCiAJezB9LAkJCS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwd2R0X2RldmljZXMpOwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGFzbWlubGluZV9jYWxsKHN0cnVjdCBjbW5fcmVnaXN0ZXJzICpwaTg2UmVncywgdW5zaWduZWQgbG9uZyAqcFJvbUVudHJ5KTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgYXNtaW5saW5lX2NhbGwoc3RydWN0IGNtbl9yZWdpc3RlcnMgKnBpODZSZWdzLAorCQkJCQkJdW5zaWduZWQgbG9uZyAqcFJvbUVudHJ5KTsKIAogI2lmbmRlZiBDT05GSUdfWDg2XzY0CiAvKiAtLTMyIEJpdCBCaW9zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC02MDUsNyArNjAzLDcgQEAKIC8qCiAgKglLZXJuZWwgaW50ZXJmYWNlcwogICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHdkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHB3ZHRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS53cml0ZSA9IGhwd2R0X3dyaXRlLApAQCAtNzA0LDEwICs3MDIsMTEgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPCi0JCSJocCBXYXRjaGRvZyBUaW1lciBEcml2ZXI6IDEuMDAiCisJCSJocCBXYXRjaGRvZyBUaW1lciBEcml2ZXI6ICVzIgogCQkiLCB0aW1lciBtYXJnaW46ICVkIHNlY29uZHMgKG5vd2F5b3V0PSVkKSIKIAkJIiwgYWxsb3cga2VybmVsIGR1bXA6ICVzIChkZWZhdWx0ID0gMC9PRkYpLlxuIiwKLQkJc29mdF9tYXJnaW4sIG5vd2F5b3V0LCAoYWxsb3dfa2R1bXAgPT0gMCkgPyAiT0ZGIiA6ICJPTiIpOworCQlIUFdEVF9WRVJTSU9OLCBzb2Z0X21hcmdpbiwgbm93YXlvdXQsCisJCShhbGxvd19rZHVtcCA9PSAwKSA/ICJPRkYiIDogIk9OIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtNzU3LDYgKzc1Niw3IEBACiBNT0RVTEVfQVVUSE9SKCJUb20gTWluZ2FyZWxsaSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJocCB3YXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhQV0RUX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwogCiBtb2R1bGVfcGFyYW0oc29mdF9tYXJnaW4sIGludCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKaW5kZXggNzRmOTUxYy4uMmRiZTgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwpAQCAtMTMsNyArMTMsNyBAQAogICoKICAqCVRoZSB0aW1lciBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZm9sbG93aW5nIEkvTyBjb250cm9sbGVyIGh1YnM6CiAgKgkoU2VlIHRoZSBpbnRlbCBkb2N1bWVudGF0aW9uIG9uIGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tLikKLSAqCTYzMDBFU0IgY2hpcCA6IGRvY3VtZW50IG51bWJlciAzMDA2NDEtMDAzCisgKgk2MzAwRVNCIGNoaXAgOiBkb2N1bWVudCBudW1iZXIgMzAwNjQxLTAwNAogICoKICAqICAyMDA0WVlaWiBSb3NzIEJpcm8KICAqCUluaXRpYWwgdmVyc2lvbiAwLjAxCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIEVTQl9WRVJTSU9OICIwLjAzIgorI2RlZmluZSBFU0JfVkVSU0lPTiAiMC4wNCIKICNkZWZpbmUgRVNCX01PRFVMRV9OQU1FICJpNjMwMEVTQiB0aW1lciIKICNkZWZpbmUgRVNCX0RSSVZFUl9OQU1FIEVTQl9NT0RVTEVfTkFNRSAiLCB2IiBFU0JfVkVSU0lPTgogI2RlZmluZSBQRlggRVNCX01PRFVMRV9OQU1FICI6ICIKQEAgLTgxLDYgKzgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZXNiX3BjaTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB0cmlnZ2VyZWQ7IC8qIFRoZSBzdGF0dXMgb2YgdGhlIHdhdGNoZG9nIHVwb24gYm9vdCAqLwogc3RhdGljIGNoYXIgZXNiX2V4cGVjdF9jbG9zZTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplc2JfcGxhdGZvcm1fZGV2aWNlOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogLyogMzAgc2VjIGRlZmF1bHQgaGVhcnRiZWF0ICgxIDwgaGVhcnRiZWF0IDwgMioxMDIzKSAqLwpAQCAtMTE0LDEzICsxMTUsMTggQEAKIAl3cml0ZWIoRVNCX1VOTE9DSzIsIEVTQl9SRUxPQURfUkVHKTsKIH0KIAotc3RhdGljIHZvaWQgZXNiX3RpbWVyX3N0YXJ0KHZvaWQpCitzdGF0aWMgaW50IGVzYl90aW1lcl9zdGFydCh2b2lkKQogewogCXU4IHZhbDsKIAorCXNwaW5fbG9jaygmZXNiX2xvY2spOworCWVzYl91bmxvY2tfcmVnaXN0ZXJzKCk7CisJd3JpdGV3KEVTQl9XRFRfUkVMT0FELCBFU0JfUkVMT0FEX1JFRyk7CiAJLyogRW5hYmxlIG9yIEVuYWJsZSArIExvY2s/ICovCiAJdmFsID0gMHgwMiB8IChub3dheW91dCA/IDB4MDEgOiAweDAwKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZXNiX3BjaSwgRVNCX0xPQ0tfUkVHLCB2YWwpOworCXNwaW5fdW5sb2NrKCZlc2JfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZXNiX3RpbWVyX3N0b3Aodm9pZCkKQEAgLTIwNyw3ICsyMTMsNiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogUmVsb2FkIGFuZCBhY3RpdmF0ZSB0aW1lciAqLwotCWVzYl90aW1lcl9rZWVwYWxpdmUoKTsKIAllc2JfdGltZXJfc3RhcnQoKTsKIAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKQEAgLTI0MCw3ICsyNDUsOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQllc2JfZXhwZWN0X2Nsb3NlID0gMDsKIAotCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUKKwkJCSAqIG1hZ2ljIGNoYXJhY3RlciAqLwogCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgewogCQkJCWNoYXIgYzsKIAkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQpAQCAtMjkyLDcgKzI5OCw2IEBACiAJCX0KIAogCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7Ci0JCQllc2JfdGltZXJfa2VlcGFsaXZlKCk7CiAJCQllc2JfdGltZXJfc3RhcnQoKTsKIAkJCXJldHZhbCA9IDA7CiAJCX0KQEAgLTMxOSwxOSArMzI0LDYgQEAKIH0KIAogLyoKLSAqICAgICAgTm90aWZ5IHN5c3RlbQotICovCi0KLXN0YXRpYyBpbnQgZXNiX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAotCQkJCQl1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKLXsKLQlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQotCQllc2JfdGltZXJfc3RvcCgpOwkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCi0KLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLS8qCiAgKiAgICAgIEtlcm5lbCBJbnRlcmZhY2VzCiAgKi8KIApAQCAtMzUwLDEwICszNDIsNiBAQAogCS5mb3BzID0gJmVzYl9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBlc2Jfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBlc2Jfbm90aWZ5X3N5cywKLX07Ci0KIC8qCiAgKiBEYXRhIGZvciBQQ0kgZHJpdmVyIGludGVyZmFjZQogICoKQEAgLTM3Miw3ICszNjAsNyBAQAogICogICAgICBJbml0ICYgZXhpdCByb3V0aW5lcwogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW5pdCBlc2JfZ2V0ZGV2aWNlKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2RldmluaXQgZXNiX2dldGRldmljZSh2b2lkKQogewogCXU4IHZhbDE7CiAJdW5zaWduZWQgc2hvcnQgdmFsMjsKQEAgLTQ0Myw3ICs0MzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlc2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTQ1OSwxOSArNDQ3LDEzIEBACiAJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMTxoZWFydGJlYXQ8MjA0NiwgdXNpbmcgJWRcbiIsCiAJCQkJCQkJCWhlYXJ0YmVhdCk7CiAJfQotCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJCQkJCVdBVENIRE9HX01JTk9SLCByZXQpOwotCQlnb3RvIGVycl9ub3RpZmllcjsKKwkJZ290byBlcnJfdW5tYXA7CiAJfQogCWVzYl90aW1lcl9zdG9wKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyBQRlgKQEAgLTQ3OSw4ICs0NjEsNiBAQAogCQkJCQkJQkFTRUFERFIsIGhlYXJ0YmVhdCwgbm93YXlvdXQpOwogCXJldHVybiAwOwogCi1lcnJfbm90aWZpZXI6Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVzYl9ub3RpZmllcik7CiBlcnJfdW5tYXA6CiAJaW91bm1hcChCQVNFQUREUik7CiAvKiBlcnJfcmVsZWFzZTogKi8KQEAgLTQ5Miw3ICs0NzIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB3YXRjaGRvZ19jbGVhbnVwKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBlc2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBTdG9wIHRoZSB0aW1lciBiZWZvcmUgd2UgbGVhdmUgKi8KIAlpZiAoIW5vd2F5b3V0KQpAQCAtNTAwLDExICs0ODAsNTggQEAKIAogCS8qIERlcmVnaXN0ZXIgKi8KIAltaXNjX2RlcmVnaXN0ZXIoJmVzYl9taXNjZGV2KTsKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKIAlpb3VubWFwKEJBU0VBRERSKTsKIAlwY2lfcmVsZWFzZV9yZWdpb24oZXNiX3BjaSwgMCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGVzYl9wY2kpOwogCXBjaV9kZXZfcHV0KGVzYl9wY2kpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlc2Jfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWVzYl90aW1lcl9zdG9wKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVzYl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlICAgICAgICAgID0gZXNiX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKGVzYl9yZW1vdmUpLAorCS5zaHV0ZG93biAgICAgICA9IGVzYl9zaHV0ZG93biwKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICA9IEVTQl9NT0RVTEVfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2F0Y2hkb2dfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW50ZWwgNjMwMEVTQiBXYXRjaERvZyBUaW1lciBEcml2ZXIgdiVzXG4iLAorCQlFU0JfVkVSU0lPTik7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVzYl9wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllc2JfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShFU0JfTU9EVUxFX05BTUUsCisJCQkJCQkJCS0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKGVzYl9wbGF0Zm9ybV9kZXZpY2UpKSB7CisJCWVyciA9IFBUUl9FUlIoZXNiX3BsYXRmb3JtX2RldmljZSk7CisJCWdvdG8gdW5yZWdfcGxhdGZvcm1fZHJpdmVyOworCX0KKworCXJldHVybiAwOworCit1bnJlZ19wbGF0Zm9ybV9kcml2ZXI6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzYl9wbGF0Zm9ybV9kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3YXRjaGRvZ19jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZXNiX3BsYXRmb3JtX2RldmljZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzYl9wbGF0Zm9ybV9kcml2ZXIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXRjaGRvZyBNb2R1bGUgVW5sb2FkZWQuXG4iKTsKIH0KIAogbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jCmluZGV4IGQ4MjY0YWQuLmQzYzBmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jCkBAIC00Nyw3ICs0Nyw4IEBACiAKIHN0YXRpYyBpbnQgdmVuZG9yc3VwcG9ydDsKIG1vZHVsZV9wYXJhbSh2ZW5kb3JzdXBwb3J0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JzdXBwb3J0LCAiaVRDTyB2ZW5kb3Igc3BlY2lmaWMgc3VwcG9ydCBtb2RlLCBkZWZhdWx0PTAgKG5vbmUpLCAxPVN1cGVyTWljcm8gUGVudDMsIDI9U3VwZXJNaWNybyBQZW50NCsiKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yc3VwcG9ydCwgImlUQ08gdmVuZG9yIHNwZWNpZmljIHN1cHBvcnQgbW9kZSwgZGVmYXVsdD0iCisJCQkiMCAobm9uZSksIDE9U3VwZXJNaWNybyBQZW50MywgMj1TdXBlck1pY3JvIFBlbnQ0KyIpOwogCiAvKgogICoJVmVuZG9yIFNwZWNpZmljIFN1cHBvcnQKQEAgLTMwNSw3ICszMDYsOCBAQAogbW9kdWxlX2luaXQoaVRDT192ZW5kb3JfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoaVRDT192ZW5kb3JfZXhpdF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiwgUi4gU2VyZXRueSA8bGtwYXRjaGVzQHBheXBjLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+LCAiCisJCSJSLiBTZXJldG55IDxsa3BhdGNoZXNAcGF5cGMuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBUQ08gVmVuZG9yIFNwZWNpZmljIFdhdGNoRG9nIFRpbWVyIERyaXZlciBTdXBwb3J0Iik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKaW5kZXggMzUyMzM0OS4uNjQ4MjUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwpAQCAtMjczLDcgKzI3Myw5IEBACiAjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAzMAkvKiAzMCBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOyAgLyogaW4gc2Vjb25kcyAqLwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgyPGhlYXJ0YmVhdDwzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMjxoZWFydGJlYXQ8MzkgKFRDTyB2MSkgb3IgNjEzIChUQ08gdjIpLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CkBAIC0zNDYsNyArMzQ4LDggQEAKIAkvKiBkaXNhYmxlIGNoaXBzZXQncyBOT19SRUJPT1QgYml0ICovCiAJaWYgKGlUQ09fd2R0X3Vuc2V0X05PX1JFQk9PVF9iaXQoKSkgewogCQlzcGluX3VubG9jaygmaVRDT193ZHRfcHJpdmF0ZS5pb19sb2NrKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCByZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsICIKKwkJCQkJInJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNjY5LDcgKzY3Miw4IEBACiAKIAkvKiBDaGVjayBjaGlwc2V0J3MgTk9fUkVCT09UIGJpdCAqLwogCWlmIChpVENPX3dkdF91bnNldF9OT19SRUJPT1RfYml0KCkgJiYgaVRDT192ZW5kb3JfY2hlY2tfbm9yZWJvb3Rfb24oKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsIHJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgIgorCQkJCQkicmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsJLyogQ2Fubm90IHJlc2V0IE5PX1JFQk9PVCBiaXQgKi8KIAkJZ290byBvdXQ7CiAJfQpAQCAtNzE2LDggKzcyMCw5IEBACiAJICAgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKGlUQ09fd2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQlpVENPX3dkdF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX0hFQVJUQkVBVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAyIDwgaGVhcnRiZWF0IDwgMzkgKFRDTyB2MSkgb3IgNjEzIChUQ08gdjIpLCB1c2luZyAlZFxuIiwKLQkJCQkJCQloZWFydGJlYXQpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDIgPCBoZWFydGJlYXQgPCAzOSAoVENPIHYxKSAiCisJCQkJIm9yIDYxMyAoVENPIHYyKSwgdXNpbmcgJWRcbiIsIGhlYXJ0YmVhdCk7CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmaVRDT193ZHRfbWlzY2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKaW5kZXggYWZiOGFmMy4uY2MxMzNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYwpAQCAtMTg4LDggKzE4OCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50IHZhbCwgaW50IHJlZykKIHsKLSAgICAgICBvdXRiKHJlZywgUkVHKTsKLSAgICAgICBvdXRiKHZhbCwgVkFMKTsKKwlvdXRiKHJlZywgUkVHKTsKKwlvdXRiKHZhbCwgVkFMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19pbncoaW50IHJlZykKQEAgLTIwNCwxMCArMjA0LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dHcoaW50IHZhbCwgaW50IHJlZykKIHsKLSAgICAgICBvdXRiKHJlZysrLCBSRUcpOwotICAgICAgIG91dGIodmFsID4+IDgsIFZBTCk7Ci0gICAgICAgb3V0YihyZWcsIFJFRyk7Ci0gICAgICAgb3V0Yih2YWwsIFZBTCk7CisJb3V0YihyZWcrKywgUkVHKTsKKwlvdXRiKHZhbCA+PiA4LCBWQUwpOworCW91dGIocmVnLCBSRUcpOworCW91dGIodmFsLCBWQUwpOwogfQogCiAvKiB3YXRjaGRvZyB0aW1lciBoYW5kbGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCmluZGV4IGRiOTE4OTIuLjQ2NWZlMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKQEAgLTksOCArOSw4IEBACiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KIAogCi0jZGVmaW5lIEdQVF9NT0RFX1dEVAkJKDE8PDE1KQotI2RlZmluZSBHUFRfTU9ERV9DRQkJKDE8PDEyKQorI2RlZmluZSBHUFRfTU9ERV9XRFQJCSgxIDw8IDE1KQorI2RlZmluZSBHUFRfTU9ERV9DRQkJKDEgPDwgMTIpCiAjZGVmaW5lIEdQVF9NT0RFX01TX1RJTUVSCSgweDQpCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCAxMTMwYWQ2Li4xNTEyYWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKglCYXNlZCBvbiB0aGUgU29mdERvZyBkcml2ZXI6CiAgKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCi0gKiAJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgorICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwppbmRleCAzYWNjZTYyLi41MzliNmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKQEAgLTUsNyArNSw3IEBACiAgKgkJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LjRnLXN5c3RlbXMuYml6CiAgKgotICogCShDKSBDb3B5cmlnaHQgMjAwNyBPcGVuV3J0Lm9yZywgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqCShDKSBDb3B5cmlnaHQgMjAwNyBPcGVuV3J0Lm9yZywgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KICAqCiAgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYwppbmRleCBiNjRhZTFhLi5lODE0NDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCkBAIC0xNiwxMSArMTYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb241eF93ZHQuaD4KIAogLyoKICAqIFdhdGNoZG9nIHRpbWVyIGJsb2NrIHJlZ2lzdGVycy4KQEAgLTI5LDEzICszMSwxNCBAQAogI2RlZmluZSAgV0RUX0VOCQkJMHgwMDEwCiAjZGVmaW5lIFdEVF9WQUwJCQkoVElNRVJfVklSVF9CQVNFICsgMHgwMDI0KQogCi0jZGVmaW5lIE9SSU9ONVhfVENMSwkJMTY2NjY2NjY3Ci0jZGVmaW5lIFdEVF9NQVhfRFVSQVRJT04JKDB4ZmZmZmZmZmYgLyBPUklPTjVYX1RDTEspCisjZGVmaW5lIFdEVF9NQVhfQ1lDTEVfQ09VTlQJMHhmZmZmZmZmZgogI2RlZmluZSBXRFRfSU5fVVNFCQkwCiAjZGVmaW5lIFdEVF9PS19UT19DTE9TRQkJMQogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Ci1zdGF0aWMgaW50IGhlYXJ0YmVhdCA9ICBXRFRfTUFYX0RVUkFUSU9OOwkvKiAoc2Vjb25kcykgKi8KK3N0YXRpYyBpbnQgaGVhcnRiZWF0ID0gLTE7CQkvKiBtb2R1bGUgcGFyYW1ldGVyIChzZWNvbmRzKSAqLworc3RhdGljIHVuc2lnbmVkIGludCB3ZHRfbWF4X2R1cmF0aW9uOwkvKiAoc2Vjb25kcykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2R0X3RjbGs7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfc3RhdHVzOwogc3RhdGljIHNwaW5sb2NrX3Qgd2R0X2xvY2s7CiAKQEAgLTQ2LDcgKzQ5LDcgQEAKIAlzcGluX2xvY2soJndkdF9sb2NrKTsKIAogCS8qIFNldCB3YXRjaGRvZyBkdXJhdGlvbiAqLwotCXdyaXRlbChPUklPTjVYX1RDTEsgKiBoZWFydGJlYXQsIFdEVF9WQUwpOworCXdyaXRlbCh3ZHRfdGNsayAqIGhlYXJ0YmVhdCwgV0RUX1ZBTCk7CiAKIAkvKiBDbGVhciB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgKi8KIAlyZWcgPSByZWFkbChCUklER0VfQ0FVU0UpOwpAQCAtODgsNyArOTEsNyBAQAogc3RhdGljIGludCBvcmlvbjV4X3dkdF9nZXRfdGltZWxlZnQoaW50ICp0aW1lX2xlZnQpCiB7CiAJc3Bpbl9sb2NrKCZ3ZHRfbG9jayk7Ci0JKnRpbWVfbGVmdCA9IHJlYWRsKFdEVF9WQUwpIC8gT1JJT041WF9UQ0xLOworCSp0aW1lX2xlZnQgPSByZWFkbChXRFRfVkFMKSAvIHdkdF90Y2xrOwogCXNwaW5fdW5sb2NrKCZ3ZHRfbG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgsNyArMTYxLDcgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWlmICh0aW1lIDw9IDAgfHwgdGltZSA+IFdEVF9NQVhfRFVSQVRJT04pIHsKKwkJaWYgKHRpbWUgPD0gMCB8fCB0aW1lID4gd2R0X21heF9kdXJhdGlvbikgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMTAsMjMgKzIxMyw2OSBAQAogCS5mb3BzCQk9ICZvcmlvbjV4X3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgb3Jpb241eF93ZHRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgb3Jpb241eF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb3Jpb241eF93ZHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKHBkYXRhKSB7CisJCXdkdF90Y2xrID0gcGRhdGEtPnRjbGs7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJPcmlvbjV4IFdhdGNoZG9nIG1pc3NlcyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50KQorCQlyZXR1cm4gLUVCVVNZOworCW9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXdkdF9tYXhfZHVyYXRpb24gPSBXRFRfTUFYX0NZQ0xFX0NPVU5UIC8gd2R0X3RjbGs7CisJaWYgKGhlYXJ0YmVhdCA8PSAwIHx8IGhlYXJ0YmVhdCA+IHdkdF9tYXhfZHVyYXRpb24pCisJCWhlYXJ0YmVhdCA9IHdkdF9tYXhfZHVyYXRpb247CisKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiT3Jpb241eCBXYXRjaGRvZyBUaW1lcjogSW5pdGlhbCB0aW1lb3V0ICVkIHNlYyVzXG4iLAorCQkJCWhlYXJ0YmVhdCwgbm93YXlvdXQgPyAiLCBub3dheW91dCIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9yaW9uNXhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaW5pdCgmd2R0X2xvY2spOworCWlmICh0ZXN0X2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cykpIHsKKwkJd2R0X2Rpc2FibGUoKTsKKwkJY2xlYXJfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKTsKKwl9CiAKLQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKLQlpZiAocmV0ID09IDApCi0JCXByaW50aygiT3Jpb241eCBXYXRjaGRvZyBUaW1lcjogaGVhcnRiZWF0ICVkIHNlY1xuIiwKLQkJCQkJCQkJaGVhcnRiZWF0KTsKKwlyZXQgPSBtaXNjX2RlcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCWlmICghcmV0KQorCQlvcmlvbjV4X3dkdF9taXNjZGV2LnBhcmVudCA9IE5VTEw7CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvcmlvbjV4X3dkdF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9yaW9uNXhfd2R0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpb241eF93ZHRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIm9yaW9uNXhfd2R0IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb3Jpb241eF93ZHRfaW5pdCh2b2lkKQoreworCXNwaW5fbG9ja19pbml0KCZ3ZHRfbG9jayk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb3Jpb241eF93ZHRfZHJpdmVyKTsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IG9yaW9uNXhfd2R0X2V4aXQodm9pZCkKIHsKLQltaXNjX2RlcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvcmlvbjV4X3dkdF9pbml0KTsKQEAgLTIzNiw4ICsyODUsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPcmlvbjV4IFByb2Nlc3NvciBXYXRjaGRvZyIpOwogCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcyAoZGVmYXVsdCBpcyAiCi0JCQkJCV9fTU9EVUxFX1NUUklORyhXRFRfTUFYX0RVUkFUSU9OKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcyIpOwogCiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKaW5kZXggNDg0YzIxNS4uMWEyYjkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYwpAQCAtNTM2LDcgKzUzNiw4IEBACiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwYzg3NDEzX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CiAJCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwYzg3NDEzX25vdGlmaWVyKTsKIAkJcmV0dXJuIHJldDsKQEAgLTU3NCw3ICs1NzUsOCBAQAogbW9kdWxlX2luaXQocGM4NzQxM19pbml0KTsKIG1vZHVsZV9leGl0KHBjODc0MTNfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIlN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4sIE1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwiKTsKK01PRFVMRV9BVVRIT1IoIlN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4sICIKKwkJIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUEM4NzQxMyBXRFQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKaW5kZXggOWUxMzMxYS4uYWE5NTEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKQEAgLTI0LDI1ICsyNCwyNSBAQAogICoJCXZlcnNpb24gcmVwb3J0aW5nLiAgQWRkZWQgcmVhZCByb3V0aW5lIGZvciB0ZW1wZXJhdHVyZS4KICAqCQlSZW1vdmVkIHNvbWUgZXh0cmEgZGVmaW5lcywgYWRkZWQgYW4gYXV0b2RldGVjdCBSZXZpc2lvbgogICoJCXJvdXRpbmUuCi0gKiA5NjEwMDYgICAgICAgUmV2aXNlZCBzb21lIGRvY3VtZW50YXRpb24sIGZpeGVkIHNvbWUgY29zbWV0aWMgYnVncy4gIE1hZGUKLSAqICAgICAgICAgICAgICBkcml2ZXJzIHRvIHBhbmljIHRoZSBzeXN0ZW0gaWYgaXQncyBvdmVyaGVhdGluZyBhdCBib290dXAuCisgKiA5NjEwMDYJUmV2aXNlZCBzb21lIGRvY3VtZW50YXRpb24sIGZpeGVkIHNvbWUgY29zbWV0aWMgYnVncy4gIE1hZGUKKyAqCQlkcml2ZXJzIHRvIHBhbmljIHRoZSBzeXN0ZW0gaWYgaXQncyBvdmVyaGVhdGluZyBhdCBib290dXAuCiAgKiA5NjExMTgJQ2hhbmdlZCBzb21lIHZlcmJpYWdlIG9uIHNvbWUgb2YgdGhlIG91dHB1dCwgdGlkaWVkIHVwCiAgKgkJY29kZSBiaXRzLCBhbmQgYWRkZWQgY29tcGF0aWJpbGl0eSB0byAyLjEueC4KLSAqIDk3MDkxMiAgICAgICBFbmFibGVkIGJvYXJkIG9uIG9wZW4gYW5kIGRpc2FibGUgb24gY2xvc2UuCisgKiA5NzA5MTIJRW5hYmxlZCBib2FyZCBvbiBvcGVuIGFuZCBkaXNhYmxlIG9uIGNsb3NlLgogICogOTcxMTA3CVRvb2sgYWNjb3VudCBvZiByZWNlbnQgVkZTIGNoYW5nZXMgKGJyb2tlIHJlYWQpLgotICogOTcxMjEwICAgICAgIERpc2FibGUgYm9hcmQgb24gaW5pdGlhbGlzYXRpb24gaW4gY2FzZSBib2FyZCBhbHJlYWR5IHRpY2tpbmcuCi0gKiA5NzEyMjIgICAgICAgQ2hhbmdlZCBvcGVuL2Nsb3NlIGZvciB0ZW1wZXJhdHVyZSBoYW5kbGluZwotICogICAgICAgICAgICAgIE1pY2hhZWwgTWVza2VzIDxtZXNrZXNAZGViaWFuLm9yZz4uCi0gKiA5ODAxMTIgICAgICAgVXNlZCBtaW5vciBudW1iZXJzIGZyb20gaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKLSAqIDk5MDQwMyAgICAgICBDbGVhciByZXNldCBzdGF0dXMgYWZ0ZXIgcmVhZGluZyBjb250cm9sIHN0YXR1cyByZWdpc3RlciBpbgotICogICAgICAgICAgICAgIHBjd2Rfc2hvd3ByZXZzdGF0ZSgpLiBbTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+XQorICogOTcxMjEwCURpc2FibGUgYm9hcmQgb24gaW5pdGlhbGlzYXRpb24gaW4gY2FzZSBib2FyZCBhbHJlYWR5IHRpY2tpbmcuCisgKiA5NzEyMjIJQ2hhbmdlZCBvcGVuL2Nsb3NlIGZvciB0ZW1wZXJhdHVyZSBoYW5kbGluZworICoJCU1pY2hhZWwgTWVza2VzIDxtZXNrZXNAZGViaWFuLm9yZz4uCisgKiA5ODAxMTIJVXNlZCBtaW5vciBudW1iZXJzIGZyb20gaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKKyAqIDk5MDQwMwlDbGVhciByZXNldCBzdGF0dXMgYWZ0ZXIgcmVhZGluZyBjb250cm9sIHN0YXR1cyByZWdpc3RlciBpbgorICoJCXBjd2Rfc2hvd3ByZXZzdGF0ZSgpLiBbTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+XQogICogOTkwNjA1CU1hZGUgY2hhbmdlcyB0byBjb2RlIHRvIHN1cHBvcnQgRmlybXdhcmUgMS4yMmEsIGFkZGVkCiAgKgkJZmFpcmx5IHVzZWxlc3MgcHJvYyBlbnRyeS4KICAqIDk5MDYxMAlyZW1vdmVkIHNhaWQgdXNlbGVzcyBwcm9jIGNvZGUgZm9yIHRoZSBtZXJnZSA8YWxhbj4KICAqIDAwMDQwMwlSZW1vdmVkIGxhc3QgdHJhY2VzIG9mIHByb2MgY29kZS4gPGRhdmVqPgogICogMDExMjE0CUFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUKICAqCQlDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgICAgIEFkZGVkIHRpbWVvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0CisgKgkJQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKICAqLwogCiAvKgpAQCAtNzYsOCArNzYsNyBAQAogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiSVNBLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKVxuIgotI2RlZmluZSBXRF9WRVIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIikiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICJcbiIKIAogLyoKICAqIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IFBDV0RfUkVWSVNJT05fQiB3YXMgcmVtb3ZlZCBiZWNhdXNlIEEgYW5kIEIKQEAgLTIwMCw3ICsxOTksOSBAQAogI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDIgPD0gaGVhcnRiZWF0IDw9IDcyMDAgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDIgPD0gaGVhcnRiZWF0IDw9IDcyMDAgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CkBAIC0yMzksNyArMjQwLDggQEAKIAl9CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yIGNtZD0weCUwMng6IHBvcnQwPTB4JTAyeCBsYXN0X3BvcnQwPTB4JTAyeFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgIgorCQkJImNtZD0weCUwMng6IHBvcnQwPTB4JTAyeCBsYXN0X3BvcnQwPTB4JTAyeFxuIiwKIAkJCWNtZCwgcG9ydDAsIGxhc3RfcG9ydDApOwogCiAJcmV0dXJuIHBvcnQwOwpAQCAtMzM5LDEwICszNDEsMTIgQEAKIAkJCQkJCQlwY3dkX3ByaXZhdGUuaW9fYWRkcik7CiAJZWxzZSBpZiAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQykgewogCQlwY3dkX2dldF9maXJtd2FyZSgpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQykgZGV0ZWN0ZWQgYXQgcG9ydCAweCUwNHggKEZpcm13YXJlIHZlcnNpb246ICVzKVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIklTQS1QQyBXYXRjaGRvZyAoUkVWLkMpIGRldGVjdGVkIGF0IHBvcnQgIgorCQkJIjB4JTA0eCAoRmlybXdhcmUgdmVyc2lvbjogJXMpXG4iLAogCQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIsIHBjd2RfcHJpdmF0ZS5md192ZXJfc3RyKTsKIAkJb3B0aW9uX3N3aXRjaGVzID0gcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6ICIKKwkJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQkJb3B0aW9uX3N3aXRjaGVzLAogCQkJKChvcHRpb25fc3dpdGNoZXMgJiAweDEwKSA/ICJPTiIgOiAiT0ZGIiksCiAJCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CkBAIC0zNTgsNyArMzYyLDggQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRlbXBlcmF0dXJlIE9wdGlvbiBEZXRlY3RlZFxuIik7CiAKIAlpZiAocGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfQ0FSRFJFU0VUKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJldmlvdXMgcmVib290IHdhcyBjYXVzZWQgYnkgdGhlIGNhcmRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIlByZXZpb3VzIHJlYm9vdCB3YXMgY2F1c2VkIGJ5IHRoZSBjYXJkXG4iKTsKIAogCWlmIChwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9PVkVSSEVBVCkgewogCQlwcmludGsoS0VSTl9FTUVSRyBQRlgKQEAgLTg3MSw3ICs4NzYsNyBAQAogCWNhcmRzX2ZvdW5kKys7CiAJaWYgKGNhcmRzX2ZvdW5kID09IDEpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJ2JXMgS2VuIEhvbGxpcyAoa2VuamlAYml0Z2F0ZS5jb20pXG4iLAotCQkJCQkJCQlXRF9WRVIpOworCQkJCQkJCVdBVENIRE9HX1ZFUlNJT04pOwogCiAJaWYgKGNhcmRzX2ZvdW5kID4gMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIDEgZGV2aWNlXG4iKTsKQEAgLTEwMjYsNyArMTAzMSw4IEBACiBtb2R1bGVfaW5pdChwY3dkX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KHBjd2RfY2xlYW51cF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJLZW4gSG9sbGlzIDxrZW5qaUBiaXRnYXRlLmNvbT4sIFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Iik7CitNT0RVTEVfQVVUSE9SKCJLZW4gSG9sbGlzIDxrZW5qaUBiaXRnYXRlLmNvbT4sICIKKwkJIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJlcmtzaGlyZSBJU0EtUEMgV2F0Y2hkb2cgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihXQVRDSERPR19WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYwppbmRleCA1ZDc2NDIyLi42OThmNTFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYwpAQCAtMjQsNyArMjQsOCBAQAogICoJQSBiZWxscyBhbmQgd2hpc3RsZXMgZHJpdmVyIGlzIGF2YWlsYWJsZSBmcm9tOgogICoJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL3dpbS9wY3dkL3Bjd2RfcGNpLwogICoKLSAqCU1vcmUgaW5mbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5iZXJrcHJvZC5jb20vIG9yIGh0dHA6Ly93d3cucGN3YXRjaGRvZy5jb20vCisgKglNb3JlIGluZm8gYXZhaWxhYmxlIGF0CisgKglodHRwOi8vd3d3LmJlcmtwcm9kLmNvbS8gb3IgaHR0cDovL3d3dy5wY3dhdGNoZG9nLmNvbS8KICAqLwogCiAvKgpAQCAtNTEsMTEgKzUyLDEwIEBACiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBXQVRDSERPR19WRVJTSU9OICIxLjAzIgotI2RlZmluZSBXQVRDSERPR19EQVRFICIyMSBKYW4gMjAwNyIKICNkZWZpbmUgV0FUQ0hET0dfRFJJVkVSX05BTUUgIlBDSS1QQyBXYXRjaGRvZyIKICNkZWZpbmUgV0FUQ0hET0dfTkFNRSAicGN3ZF9wY2kiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpXG4iCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICJcbiIKIAogLyogU3R1ZmYgZm9yIHRoZSBQQ0kgSUQncyAgKi8KICNpZm5kZWYgUENJX1ZFTkRPUl9JRF9RVUlDS0xPR0lDCkBAIC03Niw3ICs3Niw4IEBACiAjZGVmaW5lIFdEX1BDSV9UVFJQCQkweDA0CS8qIFRlbXBlcmF0dXJlIFRyaXAgc3RhdHVzICovCiAjZGVmaW5lIFdEX1BDSV9STDJBCQkweDA4CS8qIFJlbGF5IDIgQWN0aXZlICovCiAjZGVmaW5lIFdEX1BDSV9STDFBCQkweDEwCS8qIFJlbGF5IDEgQWN0aXZlICovCi0jZGVmaW5lIFdEX1BDSV9SMkRTCQkweDQwCS8qIFJlbGF5IDIgRGlzYWJsZSBUZW1wZXJhdHVyZS10cmlwL3Jlc2V0ICovCisjZGVmaW5lIFdEX1BDSV9SMkRTCQkweDQwCS8qIFJlbGF5IDIgRGlzYWJsZSBUZW1wZXJhdHVyZS10cmlwIC8KKwkJCQkJCQkJCXJlc2V0ICovCiAjZGVmaW5lIFdEX1BDSV9STFkyCQkweDgwCS8qIEFjdGl2YXRlIFJlbGF5IDIgb24gdGhlIGJvYXJkICovCiAvKiBQb3J0IDIgOiBDb250cm9sIFN0YXR1cyAjMiAqLwogI2RlZmluZSBXRF9QQ0lfV0RJUwkJMHgxMAkvKiBXYXRjaGRvZyBEaXNhYmxlICovCkBAIC0xMTQsMTIgKzExNSwxOCBAQAogc3RhdGljIGludCB0ZW1wX3BhbmljOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNfYWN0aXZlOwogc3RhdGljIGNoYXIgZXhwZWN0X3JlbGVhc2U7Ci1zdGF0aWMgc3RydWN0IHsJCQkJLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggUENJLVBDIHdhdGNoZG9nIGNhcmQgKi8KLQlpbnQgc3VwcG9ydHNfdGVtcDsJCS8qIFdldGhlciBvciBub3QgdGhlIGNhcmQgaGFzIGEgdGVtcGVyYXR1cmUgZGV2aWNlICovCi0JaW50IGJvb3Rfc3RhdHVzOwkJLyogVGhlIGNhcmQncyBib290IHN0YXR1cyAqLwotCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsJCS8qIFRoZSBjYXJkcyBJL08gYWRkcmVzcyAqLwotCXNwaW5sb2NrX3QgaW9fbG9jazsJCS8qIHRoZSBsb2NrIGZvciBpbyBvcGVyYXRpb25zICovCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CQkvKiB0aGUgUENJLWRldmljZSAqLworLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggUENJLVBDIHdhdGNoZG9nIGNhcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCS8qIFdldGhlciBvciBub3QgdGhlIGNhcmQgaGFzIGEgdGVtcGVyYXR1cmUgZGV2aWNlICovCisJaW50IHN1cHBvcnRzX3RlbXA7CisJLyogVGhlIGNhcmQncyBib290IHN0YXR1cyAqLworCWludCBib290X3N0YXR1czsKKwkvKiBUaGUgY2FyZHMgSS9PIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CisJLyogdGhlIGxvY2sgZm9yIGlvIG9wZXJhdGlvbnMgKi8KKwlzcGlubG9ja190IGlvX2xvY2s7CisJLyogdGhlIFBDSS1kZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIH0gcGNpcGN3ZF9wcml2YXRlOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtMTMwLDE0ICsxMzcsMTggQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMD1RdWlldCwgMT1WZXJib3NlLCAyPURlYnVnIChkZWZhdWx0PTApIik7CiAKLSNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPSBkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCisjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0KKwkJCQkJCWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogLyoKICAqCUludGVybmFsIGZ1bmN0aW9ucwpAQCAtMTQ4LDggKzE1OSw4IEBACiAJaW50IGdvdF9yZXNwb25zZSwgY291bnQ7CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAic2VuZGluZyBmb2xsb3dpbmcgZGF0YSBjbWQ9MHglMDJ4IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKLQkJY21kLCAqbXNiLCAqbHNiKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhICIKKwkJImNtZD0weCUwMnggbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLCBjbWQsICptc2IsICpsc2IpOwogCiAJc3Bpbl9sb2NrKCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAJLyogSWYgYSBjb21tYW5kIHJlcXVpcmVzIGRhdGEgaXQgc2hvdWxkIGJlIHdyaXR0ZW4gZmlyc3QuCkBAIC0xNjYsMTcgKzE3NywyMCBAQAogCSAqIHRoZSBXUlNQIGJpdCBpbiBwb3J0IDIgYW5kIGdpdmUgaXQgYSBtYXguIHRpbWVvdXQgb2YKIAkgKiBQQ0lfQ09NTUFORF9USU1FT1VUIHRvIHByb2Nlc3MgKi8KIAlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgV0RfUENJX1dSU1A7Ci0JZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFBDSV9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsgY291bnQrKykgeworCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBQQ0lfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7CisJCQkJCQkJCWNvdW50KyspIHsKIAkJbWRlbGF5KDEpOwogCQlnb3RfcmVzcG9uc2UgPSBpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDIpICYgV0RfUENJX1dSU1A7CiAJfQogCiAJaWYgKGRlYnVnID49IERFQlVHKSB7CiAJCWlmIChnb3RfcmVzcG9uc2UpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAidGltZSB0byBwcm9jZXNzIGNvbW1hbmQgd2FzOiAlZCBtc1xuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJCSJ0aW1lIHRvIHByb2Nlc3MgY29tbWFuZCB3YXM6ICVkIG1zXG4iLAogCQkJCWNvdW50KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiY2FyZCBkaWQgbm90IHJlc3BvbmQgb24gY29tbWFuZCFcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkJImNhcmQgZGlkIG5vdCByZXNwb25kIG9uIGNvbW1hbmQhXG4iKTsKIAkJfQogCX0KIApAQCAtMTg5LDcgKzIwMyw4IEBACiAJCWluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgNik7CiAKIAkJaWYgKGRlYnVnID49IERFQlVHKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgY21kPTB4JTAyeDogbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgIgorCQkJCSJjbWQ9MHglMDJ4OiBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCiAJCQkJY21kLCAqbXNiLCAqbHNiKTsKIAl9CiAKQEAgLTIxOCw3ICsyMzMsOCBAQAogCWNoYXIgZndfdmVyX3N0clsyMF07CQkvKiBUaGUgY2FyZHMgZmlybXdhcmUgdmVyc2lvbiAqLwogCWludCBvcHRpb25fc3dpdGNoZXM7CiAKLQlnb3RfZndfcmV2ID0gc2VuZF9jb21tYW5kKENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CisJZ290X2Z3X3JldiA9IHNlbmRfY29tbWFuZChDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sICZmd19yZXZfbWFqb3IsCisJCQkJCQkJCSZmd19yZXZfbWlub3IpOwogCWlmIChnb3RfZndfcmV2KQogCQlzcHJpbnRmKGZ3X3Zlcl9zdHIsICIldS4lMDJ1IiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3IpOwogCWVsc2UKQEAgLTIyNywyMyArMjQzLDI3IEBACiAJLyogR2V0IHN3aXRjaCBzZXR0aW5ncyAqLwogCW9wdGlvbl9zd2l0Y2hlcyA9IHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kIGNhcmQgYXQgcG9ydCAweCUwNHggKEZpcm13YXJlOiAlcykgJXMgdGVtcCBvcHRpb25cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kIGNhcmQgYXQgcG9ydCAiCisJCSIweCUwNHggKEZpcm13YXJlOiAlcykgJXMgdGVtcCBvcHRpb25cbiIsCiAJCShpbnQpIHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyLCBmd192ZXJfc3RyLAogCQkocGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXAgPyAid2l0aCIgOiAid2l0aG91dCIpKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkiVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKIAkJb3B0aW9uX3N3aXRjaGVzLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOwogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX0NBUkRSRVNFVCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByZXZpb3VzIHJlc2V0IHdhcyBjYXVzZWQgYnkgdGhlIFdhdGNoZG9nIGNhcmRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIlByZXZpb3VzIHJlc2V0IHdhcyBjYXVzZWQgYnkgdGhlIFdhdGNoZG9nIGNhcmRcbiIpOwogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX09WRVJIRUFUKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ2FyZCBzZW5zZWQgYSBDUFUgT3ZlcmhlYXRcbiIpOwogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTm8gcHJldmlvdXMgdHJpcCBkZXRlY3RlZCAtIENvbGQgYm9vdCBvciByZXNldFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiTm8gcHJldmlvdXMgdHJpcCBkZXRlY3RlZCAtIENvbGQgYm9vdCBvciByZXNldFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgcGNpcGN3ZF9zdGFydCh2b2lkKQpAQCAtMjgzLDcgKzMwMyw4IEBACiAJc3Bpbl91bmxvY2soJnBjaXBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAogCWlmICghKHN0YXRfcmVnICYgV0RfUENJX1dESVMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM2NCw3ICszODUsOCBAQAogCX0KIAogCS8qIGNsZWFyIHRyaXAgc3RhdHVzICYgTEVEIGFuZCBrZWVwIG1vZGUgb2YgcmVsYXkgMiAqLwotCW91dGJfcCgoY29udHJvbF9zdGF0dXMgJiBXRF9QQ0lfUjJEUykgfCBXRF9QQ0lfV1RSUCwgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKKwlvdXRiX3AoKGNvbnRyb2xfc3RhdHVzICYgV0RfUENJX1IyRFMpIHwgV0RfUENJX1dUUlAsCisJCQkJCQlwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOwogCiAJLyogY2xlYXIgcmVzZXQgY291bnRlciAqLwogCW1zYiA9IDA7CkBAIC00MzcsNyArNDU5LDggQEAKIAkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLwogCQkJZXhwZWN0X3JlbGVhc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC01MzEsNyArNTU0LDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmIChwY2lwY3dkX3NldF9oZWFydGJlYXQobmV3X2hlYXJ0YmVhdCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXBjaXBjd2Rfa2VlcGFsaXZlKCk7CiAJCS8qIEZhbGwgKi8KQEAgLTU2MCw3ICs1ODMsOCBAQAogCS8qIC9kZXYvd2F0Y2hkb2cgY2FuIG9ubHkgYmUgb3BlbmVkIG9uY2UgKi8KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmaXNfYWN0aXZlKSkgewogCQlpZiAoZGVidWcgPj0gVkVSQk9TRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gb3BlbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UuXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiQXR0ZW1wdCB0byBvcGVuIGFscmVhZHkgb3BlbmVkIGRldmljZS5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNTc4LDcgKzYwMiw4IEBACiAJaWYgKGV4cGVjdF9yZWxlYXNlID09IDQyKSB7CiAJCXBjaXBjd2Rfc3RvcCgpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgUEZYICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKIAkJcGNpcGN3ZF9rZWVwYWxpdmUoKTsKIAl9CiAJZXhwZWN0X3JlbGVhc2UgPSAwOwpAQCAtNjIxLDcgKzY0Niw4IEBACiAgKglOb3RpZnkgc3lzdGVtCiAgKi8KIAotc3RhdGljIGludCBwY2lwY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3N0YXRpYyBpbnQgcGNpcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAorCQkJCQkJCQl2b2lkICp1bnVzZWQpCiB7CiAJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKIAkJcGNpcGN3ZF9zdG9wKCk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KQEAgLTcyMiwzNCArNzQ4LDM4IEBACiAKIAkvKiBJZiBoZWFydGJlYXQgPSAwIHRoZW4gd2UgdXNlIHRoZSBoZWFydGJlYXQgZnJvbSB0aGUgZGlwLXN3aXRjaGVzICovCiAJaWYgKGhlYXJ0YmVhdCA9PSAwKQotCQloZWFydGJlYXQgPSBoZWFydGJlYXRfdGJsWyhwY2lwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKSAmIDB4MDcpXTsKKwkJaGVhcnRiZWF0ID0KKwkJCWhlYXJ0YmVhdF90YmxbKHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpICYgMHgwNyldOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAocGNpcGN3ZF9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCkpIHsKIAkJcGNpcGN3ZF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX0hFQVJUQkVBVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAogCQkJV0FUQ0hET0dfSEVBUlRCRUFUKTsKIAl9CiAKIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjaXBjd2Rfbm90aWZpZXIpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAotCQkJcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsIHJldCk7CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXApIHsKIAkJcmV0ID0gbWlzY19yZWdpc3RlcigmcGNpcGN3ZF90ZW1wX21pc2NkZXYpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAotCQkJCVRFTVBfTUlOT1IsIHJldCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiAiCisJCQkJIm1pbm9yPSVkIChlcnI9JWQpXG4iLCBURU1QX01JTk9SLCByZXQpOwogCQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfcmVib290OwogCQl9CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcGNpcGN3ZF9taXNjZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXQpOwogCQlnb3RvIGVycl9vdXRfbWlzY19kZXJlZ2lzdGVyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwppbmRleCBhZmIwODk2Li4wNTJmZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCkBAIC01MSwxMiArNTEsMTEgQEAKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCiAjdW5kZWYgZGJnCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIFBGWCBmb3JtYXQgIlxuIiAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0KKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIFBGWCBmb3JtYXQgIlxuIiAsICMjIGFyZyk7IH0gd2hpbGUgKDApCiAKIC8qIE1vZHVsZSBhbmQgVmVyc2lvbiBJbmZvcm1hdGlvbiAqLwogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wMiIKLSNkZWZpbmUgRFJJVkVSX0RBVEUgIjIxIEphbiAyMDA3IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkJlcmtzaGlyZSBVU0ItUEMgV2F0Y2hkb2cgZHJpdmVyIgogI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgpAQCAtNzMsMTQgKzcyLDE4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKIAotI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9IGRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPQorCQkJCQkJZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIC8qIFRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQncyBmb3IgdGhlIFVTQi1QQyBXYXRjaGRvZyBjYXJkICovCiAjZGVmaW5lIFVTQl9QQ1dEX1ZFTkRPUl9JRAkweDBjOTgKQEAgLTkxLDIwICs5NCwyMSBAQAogCXsgVVNCX0RFVklDRShVU0JfUENXRF9WRU5ET1JfSUQsIFVTQl9QQ1dEX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX3Bjd2RfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9wY3dkX3RhYmxlKTsKIAogLyogYWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24gbWF4LiB0aW1lIHRvIHByb2Nlc3MgYSBjb21tYW5kIGZvciB0aGUgVVNCCiAgKiB3YXRjaGRvZyBjYXJkIGlzIDEwMCBvciAyMDAgbXMsIHNvIHdlIGdpdmUgaXQgMjUwIG1zIHRvIGRvIGl0J3Mgam9iICovCiAjZGVmaW5lIFVTQl9DT01NQU5EX1RJTUVPVVQJMjUwCiAKIC8qIFdhdGNoZG9nJ3MgaW50ZXJuYWwgY29tbWFuZHMgKi8KLSNkZWZpbmUgQ01EX1JFQURfVEVNUAkJCTB4MDIJLyogUmVhZCBUZW1wZXJhdHVyZTsgUmUtdHJpZ2dlciBXYXRjaGRvZyAqLworI2RlZmluZSBDTURfUkVBRF9URU1QCQkJMHgwMgkvKiBSZWFkIFRlbXBlcmF0dXJlOworCQkJCQkJCVJlLXRyaWdnZXIgV2F0Y2hkb2cgKi8KICNkZWZpbmUgQ01EX1RSSUdHRVIJCQlDTURfUkVBRF9URU1QCiAjZGVmaW5lIENNRF9HRVRfU1RBVFVTCQkJMHgwNAkvKiBHZXQgU3RhdHVzIEluZm9ybWF0aW9uICovCiAjZGVmaW5lIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTgkweDA4CS8qIEdldCBGaXJtd2FyZSBWZXJzaW9uICovCiAjZGVmaW5lIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUwkweDBjCS8qIEdldCBEaXAgU3dpdGNoIFNldHRpbmdzICovCiAjZGVmaW5lIENNRF9SRUFEX1dBVENIRE9HX1RJTUVPVVQJMHgxOAkvKiBSZWFkIEN1cnJlbnQgV2F0Y2hkb2cgVGltZSAqLwotI2RlZmluZSBDTURfV1JJVEVfV0FUQ0hET0dfVElNRU9VVAkweDE5CS8qIFdyaXRlIEN1cnJlbnQgV2F0Y2hkb2cgVGltZSAqLworI2RlZmluZSBDTURfV1JJVEVfV0FUQ0hET0dfVElNRU9VVAkweDE5CS8qIFdyaXRlIEN1cnJlbnQgV2F0Y2hkb2dUaW1lICovCiAjZGVmaW5lIENNRF9FTkFCTEVfV0FUQ0hET0cJCTB4MzAJLyogRW5hYmxlIC8gRGlzYWJsZSBXYXRjaGRvZyAqLwogI2RlZmluZSBDTURfRElTQUJMRV9XQVRDSERPRwkJQ01EX0VOQUJMRV9XQVRDSERPRwogCkBAIC0xMjksMjMgKzEzMywzNiBAQAogCiAvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLwogc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwkJCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwkvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwogCi0JdW5zaWduZWQgaW50CQlpbnRlcmZhY2VfbnVtYmVyOwkvKiB0aGUgaW50ZXJmYWNlIG51bWJlciB1c2VkIGZvciBjbWQncyAqLworCS8qIHRoZSBpbnRlcmZhY2UgbnVtYmVyIHVzZWQgZm9yIGNtZCdzICovCisJdW5zaWduZWQgaW50CQlpbnRlcmZhY2VfbnVtYmVyOwogCi0JdW5zaWduZWQgY2hhcgkJKmludHJfYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB0byBpbnRyIGRhdGEgKi8KLQlkbWFfYWRkcl90CQlpbnRyX2RtYTsJCS8qIHRoZSBkbWEgYWRkcmVzcyBmb3IgdGhlIGludHIgYnVmZmVyICovCi0Jc2l6ZV90CQkJaW50cl9zaXplOwkJLyogdGhlIHNpemUgb2YgdGhlIGludHIgYnVmZmVyICovCi0Jc3RydWN0IHVyYgkJKmludHJfdXJiOwkJLyogdGhlIHVyYiB1c2VkIGZvciB0aGUgaW50ciBwaXBlICovCisJLyogdGhlIGJ1ZmZlciB0byBpbnRyIGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyCQkqaW50cl9idWZmZXI7CisJLyogdGhlIGRtYSBhZGRyZXNzIGZvciB0aGUgaW50ciBidWZmZXIgKi8KKwlkbWFfYWRkcl90CQlpbnRyX2RtYTsKKwkvKiB0aGUgc2l6ZSBvZiB0aGUgaW50ciBidWZmZXIgKi8KKwlzaXplX3QJCQlpbnRyX3NpemU7CisJLyogdGhlIHVyYiB1c2VkIGZvciB0aGUgaW50ciBwaXBlICovCisJc3RydWN0IHVyYgkJKmludHJfdXJiOwogCi0JdW5zaWduZWQgY2hhcgkJY21kX2NvbW1hbmQ7CQkvKiBUaGUgY29tbWFuZCB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9tc2I7CQkvKiBUaGUgZGF0YSBNU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbHNiOwkJLyogVGhlIGRhdGEgTFNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCWF0b21pY190CQljbWRfcmVjZWl2ZWQ7CQkvKiB0cnVlIGlmIHdlIHJlY2VpdmVkIGEgcmVwb3J0IGFmdGVyIGEgY29tbWFuZCAqLworCS8qIFRoZSBjb21tYW5kIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9jb21tYW5kOworCS8qIFRoZSBkYXRhIE1TQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9tc2I7CisJLyogVGhlIGRhdGEgTFNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX2xzYjsKKwkvKiB0cnVlIGlmIHdlIHJlY2VpdmVkIGEgcmVwb3J0IGFmdGVyIGEgY29tbWFuZCAqLworCWF0b21pY190CQljbWRfcmVjZWl2ZWQ7CiAKLQlpbnQJCQlleGlzdHM7CQkJLyogV2V0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGV4aXN0cyAqLwotCXN0cnVjdCBtdXRleAkJbXR4OwkJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJLyogV2V0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGV4aXN0cyAqLworCWludAkJCWV4aXN0czsKKwkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBtdXRleAkJbXR4OwogfTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2RfZGV2aWNlOwogCkBAIC0xNTMsNyArMTcwLDggQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoZGlzY29ubmVjdF9tdXRleCk7CiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCB1c2JfcGN3ZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCkBAIC0xNjcsNyArMTg1LDggQEAKIAogc3RhdGljIHZvaWQgdXNiX3Bjd2RfaW50cl9kb25lKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QgPSAoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkID0KKwkJCQkoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKil1cmItPmNvbnRleHQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzYl9wY3dkLT5pbnRyX2J1ZmZlcjsKIAlpbnQgcmV0dmFsOwogCkBAIC0xNzgsMTEgKzE5NywxMyBAQAogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FU0hVVERPV046CiAJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sCisJCQkJCQkJCXVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwogCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCQkJCQkJCXVyYi0+c3RhdHVzKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CiAKQEAgLTE5OSwyMiArMjIwLDIzIEBACiByZXN1Ym1pdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IHJlc3VibWl0IGludHIsIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKLQkJCXJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IHJlc3VibWl0IGludHIsICIKKwkJCSJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsIHJldHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgdW5zaWduZWQgY2hhciBjbWQsCi0JdW5zaWduZWQgY2hhciAqbXNiLCB1bnNpZ25lZCBjaGFyICpsc2IpCitzdGF0aWMgaW50IHVzYl9wY3dkX3NlbmRfY29tbWFuZChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsCisJCXVuc2lnbmVkIGNoYXIgY21kLCB1bnNpZ25lZCBjaGFyICptc2IsIHVuc2lnbmVkIGNoYXIgKmxzYikKIHsKIAlpbnQgZ290X3Jlc3BvbnNlLCBjb3VudDsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls2XTsKIAotCS8qIFdlIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIGlmIHRoZSBVU0IgUENXRCBkZXZpY2UgZG9lcyBub3QgZXhpc3QgKi8KKwkvKiBXZSB3aWxsIG5vdCBzZW5kIGFueSBjb21tYW5kcyBpZiB0aGUgVVNCIFBDV0QgZGV2aWNlIGRvZXMKKwkgKiBub3QgZXhpc3QgKi8KIAlpZiAoKCF1c2JfcGN3ZCkgfHwgKCF1c2JfcGN3ZC0+ZXhpc3RzKSkKIAkJcmV0dXJuIC0xOwogCi0JLyogVGhlIFVTQiBQQyBXYXRjaGRvZyB1c2VzIGEgNiBieXRlIHJlcG9ydCBmb3JtYXQuIFRoZSBib2FyZCBjdXJyZW50bHkgdXNlcwotCSAqIG9ubHkgMyBvZiB0aGUgc2l4IGJ5dGVzIG9mIHRoZSByZXBvcnQuICovCisJLyogVGhlIFVTQiBQQyBXYXRjaGRvZyB1c2VzIGEgNiBieXRlIHJlcG9ydCBmb3JtYXQuCisJICogVGhlIGJvYXJkIGN1cnJlbnRseSB1c2VzIG9ubHkgMyBvZiB0aGUgc2l4IGJ5dGVzIG9mIHRoZSByZXBvcnQuICovCiAJYnVmWzBdID0gY21kOwkJCS8qIEJ5dGUgMCA9IENNRCAqLwogCWJ1ZlsxXSA9ICptc2I7CQkJLyogQnl0ZSAxID0gRGF0YSBNU0IgKi8KIAlidWZbMl0gPSAqbHNiOwkJCS8qIEJ5dGUgMiA9IERhdGEgTFNCICovCkBAIC0yMjksMTIgKzI1MSwxNCBAQAogCQkJSElEX1JFUV9TRVRfUkVQT1JULCBISURfRFRfUkVQT1JULAogCQkJMHgwMjAwLCB1c2JfcGN3ZC0+aW50ZXJmYWNlX251bWJlciwgYnVmLCBzaXplb2YoYnVmKSwKIAkJCVVTQl9DT01NQU5EX1RJTUVPVVQpICE9IHNpemVvZihidWYpKSB7Ci0JCWRiZygidXNiX3Bjd2Rfc2VuZF9jb21tYW5kOiBlcnJvciBpbiB1c2JfY29udHJvbF9tc2cgZm9yIGNtZCAweCV4IDB4JXggMHgleFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKKwkJZGJnKCJ1c2JfcGN3ZF9zZW5kX2NvbW1hbmQ6IGVycm9yIGluIHVzYl9jb250cm9sX21zZyBmb3IgIgorCQkJCSJjbWQgMHgleCAweCV4IDB4JXhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CiAJfQogCS8qIHdhaXQgdGlsbCB0aGUgdXNiIGNhcmQgcHJvY2Vzc2VkIHRoZSBjb21tYW5kLAogCSAqIHdpdGggYSBtYXguIHRpbWVvdXQgb2YgVVNCX0NPTU1BTkRfVElNRU9VVCAqLwogCWdvdF9yZXNwb25zZSA9IDA7Ci0JZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFVTQl9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsgY291bnQrKykgeworCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBVU0JfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7CisJCQkJCQkJCWNvdW50KyspIHsKIAkJbWRlbGF5KDEpOwogCQlpZiAoYXRvbWljX3JlYWQoJnVzYl9wY3dkLT5jbWRfcmVjZWl2ZWQpKQogCQkJZ290X3Jlc3BvbnNlID0gMTsKQEAgLTI1NiwxMCArMjgwLDEyIEBACiAJaW50IHJldHZhbDsKIAogCS8qIEVuYWJsZSBXYXRjaGRvZyAqLwotCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0VOQUJMRV9XQVRDSERPRywgJm1zYiwgJmxzYik7CisJcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRU5BQkxFX1dBVENIRE9HLAorCQkJCQkJCQkmbXNiLCAmbHNiKTsKIAogCWlmICgocmV0dmFsID09IDApIHx8IChsc2IgPT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGVuYWJsZSBhdHRlbXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZW5hYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNzMsMTAgKzI5OSwxMiBAQAogCWludCByZXR2YWw7CiAKIAkvKiBEaXNhYmxlIFdhdGNoZG9nICovCi0JcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRElTQUJMRV9XQVRDSERPRywgJm1zYiwgJmxzYik7CisJcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRElTQUJMRV9XQVRDSERPRywKKwkJCQkJCQkJJm1zYiwgJmxzYik7CiAKIAlpZiAoKHJldHZhbCA9PSAwKSB8fCAobHNiICE9IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMwOCw3ICszMzYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIGludCAqdGVtcGVyYXR1cmUpCitzdGF0aWMgaW50IHVzYl9wY3dkX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsCisJCQkJCQkJaW50ICp0ZW1wZXJhdHVyZSkKIHsKIAl1bnNpZ25lZCBjaGFyIG1zYiwgbHNiOwogCkBAIC0zMjMsNyArMzUyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGltZWxlZnQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCBpbnQgKnRpbWVfbGVmdCkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RpbWVsZWZ0KHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJCQkJCQkJaW50ICp0aW1lX2xlZnQpCiB7CiAJdW5zaWduZWQgY2hhciBtc2IsIGxzYjsKIApAQCAtMzQxLDcgKzM3MSw3IEBACiAgKi8KIAogc3RhdGljIHNzaXplX3QgdXNiX3Bjd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAotCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQorCQkJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewogCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KIAlpZiAobGVuKSB7CkBAIC0zNTIsNyArMzgyLDggQEAKIAkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLwogCQkJZXhwZWN0X3JlbGVhc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC00MzEsNyArNDYyLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICh1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkX2RldmljZSwgbmV3X2hlYXJ0YmVhdCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXVzYl9wY3dkX2tlZXBhbGl2ZSh1c2JfcGN3ZF9kZXZpY2UpOwogCQkvKiBGYWxsICovCkBAIC00NzUsNyArNTA2LDggQEAKIAlpZiAoZXhwZWN0X3JlbGVhc2UgPT0gNDIpIHsKIAkJdXNiX3Bjd2Rfc3RvcCh1c2JfcGN3ZF9kZXZpY2UpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgUEZYICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKIAkJdXNiX3Bjd2Rfa2VlcGFsaXZlKHVzYl9wY3dkX2RldmljZSk7CiAJfQogCWV4cGVjdF9yZWxlYXNlID0gMDsKQEAgLTUxNSw3ICs1NDcsOCBAQAogICoJTm90aWZ5IHN5c3RlbQogICovCiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQorc3RhdGljIGludCB1c2JfcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAorCQkJCQkJCQl2b2lkICp1bnVzZWQpCiB7CiAJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKIAkJdXNiX3Bjd2Rfc3RvcCh1c2JfcGN3ZF9kZXZpY2UpOwkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCkBAIC01NzgsNyArNjExLDggQEAKICAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCiAgKgl0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgogICovCi1zdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwpAQCAtNjAyLDE2ICs2MzYsMTUgQEAKIAogCS8qIGNoZWNrIG91dCB0aGF0IHdlIGhhdmUgYSBISUQgZGV2aWNlICovCiAJaWYgKCEoaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0hJRCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhlIGRldmljZSBpc24ndCBhIEh1bWFuIEludGVyZmFjZSBEZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiVGhlIGRldmljZSBpc24ndCBhIEh1bWFuIEludGVyZmFjZSBEZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50OiBpdCBoYXMgdG8gYmUgSW50ZXJydXB0ICYgSU4gKi8KIAllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFswXS5kZXNjOwogCi0JaWYgKCEoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKLQkgICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpKSB7CisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkgewogCQkvKiB3ZSBkaWRuJ3QgZmluZCBhIEludGVycnVwdCBlbmRwb2ludCB3aXRoIGRpcmVjdGlvbiBJTiAqLwogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG4ndCBmaW5kIGFuIElOVFIgJiBJTiBlbmRwb2ludFxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNjM0LDEwICs2NjcsMTIgQEAKIAl1c2JfcGN3ZC0+dWRldiA9IHVkZXY7CiAJdXNiX3Bjd2QtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAl1c2JfcGN3ZC0+aW50ZXJmYWNlX251bWJlciA9IGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQl1c2JfcGN3ZC0+aW50cl9zaXplID0gKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiA4ID8gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6IDgpOworCXVzYl9wY3dkLT5pbnRyX3NpemUgPSAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA+IDggPworCQkJCWxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgOiA4KTsKIAogCS8qIHNldCB1cCB0aGUgbWVtb3J5IGJ1ZmZlcidzICovCi0JdXNiX3Bjd2QtPmludHJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCB1c2JfcGN3ZC0+aW50cl9zaXplLCBHRlBfQVRPTUlDLCAmdXNiX3Bjd2QtPmludHJfZG1hKTsKKwl1c2JfcGN3ZC0+aW50cl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHVzYl9wY3dkLT5pbnRyX3NpemUsCisJCQkJCUdGUF9BVE9NSUMsICZ1c2JfcGN3ZC0+aW50cl9kbWEpOwogCWlmICghdXNiX3Bjd2QtPmludHJfYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIk91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtNjcxLDcgKzcwNiw4IEBACiAJdXNiX3Bjd2Rfc3RvcCh1c2JfcGN3ZCk7CiAKIAkvKiBHZXQgdGhlIEZpcm13YXJlIFZlcnNpb24gKi8KLQlnb3RfZndfcmV2ID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sICZmd19yZXZfbWFqb3IsICZmd19yZXZfbWlub3IpOworCWdvdF9md19yZXYgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwKKwkJCQkJCSZmd19yZXZfbWFqb3IsICZmd19yZXZfbWlub3IpOwogCWlmIChnb3RfZndfcmV2KQogCQlzcHJpbnRmKGZ3X3Zlcl9zdHIsICIldS4lMDJ1IiwgZndfcmV2X21ham9yLCBmd19yZXZfbWlub3IpOwogCWVsc2UKQEAgLTY4MSw5ICs3MTcsMTEgQEAKIAkJZndfdmVyX3N0cik7CiAKIAkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCi0JdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0RJUF9TV0lUQ0hfU0VUVElOR1MsICZkdW1teSwgJm9wdGlvbl9zd2l0Y2hlcyk7CisJdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0RJUF9TV0lUQ0hfU0VUVElOR1MsICZkdW1teSwKKwkJCQkJCQkmb3B0aW9uX3N3aXRjaGVzKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6IFRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkiVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKIAkJb3B0aW9uX3N3aXRjaGVzLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOwpAQCAtNjkyLDMwICs3MzAsMzUgQEAKIAlpZiAoaGVhcnRiZWF0ID09IDApCiAJCWhlYXJ0YmVhdCA9IGhlYXJ0YmVhdF90YmxbKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDcpXTsKIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2QsIGhlYXJ0YmVhdCkpIHsKIAkJdXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZCwgV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCiAJCQlXQVRDSERPR19IRUFSVEJFQVQpOwogCX0KIAogCXJldHZhbCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmdXNiX3Bjd2Rfbm90aWZpZXIpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKIAkJCXJldHZhbCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJcmV0dmFsID0gbWlzY19yZWdpc3RlcigmdXNiX3Bjd2RfdGVtcGVyYXR1cmVfbWlzY2Rldik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlURU1QX01JTk9SLCByZXR2YWwpOwogCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9yZWJvb3Q7CiAJfQogCiAJcmV0dmFsID0gbWlzY19yZWdpc3RlcigmdXNiX3Bjd2RfbWlzY2Rldik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0dmFsKTsKIAkJZ290byBlcnJfb3V0X21pc2NfZGVyZWdpc3RlcjsKIAl9CkBAIC04MDEsNyArODQ0LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCBEUklWRVJfREVTQyAiIHYiIERSSVZFUl9WRVJTSU9OICIgKCIgRFJJVkVSX0RBVEUgIilcbiIpOworCXByaW50ayhLRVJOX0lORk8gUEZYIERSSVZFUl9ERVNDICIgdiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwppbmRleCA2ZDlmM2Q0Li42NDEzNTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCkBAIC01NCwyMiArNTQsMjIgQEAKIAogLyogV0RUSU1fQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgQ09VTlRfRU5BQiAgICAgMQotI2RlZmluZSBSRVNFVF9DT1VOVCAgICAoMTw8MSkKLSNkZWZpbmUgREVCVUdfRU4gICAgICAgKDE8PDIpCisjZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxIDw8IDEpCisjZGVmaW5lIERFQlVHX0VOICAgICAgICgxIDw8IDIpCiAKIC8qIFdEVElNX01DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBNUjBfSU5UICAgICAgICAxCiAjdW5kZWYgIFJFU0VUX0NPVU5UMAotI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MikKLSNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCi0jZGVmaW5lIE1fUkVTMSAgICAgICAgICgxPDwzKQotI2RlZmluZSBNX1JFUzIgICAgICAgICAoMTw8NCkKLSNkZWZpbmUgUkVTRlJDMSAgICAgICAgKDE8PDUpCi0jZGVmaW5lIFJFU0ZSQzIgICAgICAgICgxPDw2KQorI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMSA8PCAyKQorI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMSA8PCAyKQorI2RlZmluZSBNX1JFUzEgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBNX1JFUzIgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBSRVNGUkMxICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBSRVNGUkMyICAgICAgICAoMSA8PCA2KQogCiAvKiBXRFRJTV9FTVIgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIEVYVF9NQVRDSDAgICAgICAxCi0jZGVmaW5lIE1BVENIX09VVFBVVF9ISUdIICgyPDw0KQkvKmEgTUFUQ0hfQ1RSTCBzZXR0aW5nICovCisjZGVmaW5lIE1BVENIX09VVFBVVF9ISUdIICgyIDw8IDQpCS8qYSBNQVRDSF9DVFJMIHNldHRpbmcgKi8KIAogLyogV0RUSU1fUkVTIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBXRE9HX1JFU0VUICAgICAgMQkvKiByZWFkIG9ubHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYwppbmRleCBmMzU1M2ZhLi5mNmNjY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCkBAIC0xNywyNyArMTcsMjkgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JCS8qIEZvciBtb2R1bGUgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgkJLyogRm9yIG5ldyBtb2R1bGVwYXJhbSdzICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIEZvciBzdGFuZGFyZCB0eXBlcyAobGlrZSBzaXplX3QpICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JCS8qIEZvciB0aGUgLUVOT0RFVi8uLi4gdmFsdWVzICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CQkvKiBGb3IgcHJpbnRrL3BhbmljLy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkJLyogRm9yIGZpbGUgb3BlcmF0aW9ucyAqLworI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4JCS8qIEZvciBNT0RVTEVfQUxJQVNfTUlTQ0RFVgorCQkJCQkJCShXQVRDSERPR19NSU5PUikgKi8KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgkJLyogRm9yIHRoZSB3YXRjaGRvZyBzcGVjaWZpYyBpdGVtcyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCQkvKiBGb3IgX19pbml0L19fZXhpdC8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4JLyogRm9yIHBsYXRmb3JtX2RyaXZlciBmcmFtZXdvcmsgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkJLyogRm9yIHNwaW5fbG9jay9zcGluX3VubG9jay8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CQkvKiBGb3IgY29weV90b191c2VyL3B1dF91c2VyLy4uLiAqLwogCi0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2ludGVnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9pbnRlZy5oPgkvKiBGb3IgdGhlIFdhdGNoZG9nIHJlZ2lzdGVycyAqLwogCi0jZGVmaW5lIFZFUlNJT04gIjAuNCIKKyNkZWZpbmUgUEZYIEtCVUlMRF9NT0ROQU1FICI6ICIKKworI2RlZmluZSBWRVJTSU9OICIxLjAiCiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgaW51c2U7CisJc3BpbmxvY2tfdCBpb19sb2NrOwogfSByYzMyNDM0X3dkdF9kZXZpY2U7CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWcgX19pb21lbSAqd2R0X3JlZzsKQEAgLTU4LDYgKzYwLDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCAyMAogCiBzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IHZhbHVlLCBpbiBzZWNvbmRzIChkZWZhdWx0PSIKKwkJV0FUQ0hET0dfVElNRU9VVCAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CkBAIC02OCwxMCArNzMsMjkgQEAKICNkZWZpbmUgU0VUX0JJVFMoYWRkciwgb3IsIG5hbmQpIFwKIAl3cml0ZWwoKHJlYWRsKCZhZGRyKSB8IG9yKSAmIH5uYW5kLCAmYWRkcikKIAorc3RhdGljIGludCByYzMyNDM0X3dkdF9zZXQoaW50IG5ld190aW1lb3V0KQoreworCWludCBtYXhfdG8gPSBXVENPTVAyU0VDKCh1MzIpLTEpOworCisJaWYgKG5ld190aW1lb3V0IDwgMCB8fCBuZXdfdGltZW91dCA+IG1heF90bykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCisJCQltYXhfdG8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdGltZW91dCA9IG5ld190aW1lb3V0OworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXdyaXRlbChTRUMyV1RDT01QKHRpbWVvdXQpLCAmd2R0X3JlZy0+d3Rjb21wYXJlKTsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3N0YXJ0KHZvaWQpCiB7CiAJdTMyIG9yLCBuYW5kOwogCisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKIAkvKiB6ZXJvIHRoZSBjb3VudGVyIGJlZm9yZSBlbmFibGluZyAqLwogCXdyaXRlbCgwLCAmd2R0X3JlZy0+d3Rjb3VudCk7CiAKQEAgLTg1LDM4ICsxMDksMzUgQEAKIAogCVNFVF9CSVRTKHdkdF9yZWctPmVycmNzLCBvciwgbmFuZCk7CiAKKwkvKiBzZXQgdGhlIHRpbWVvdXQgKGVpdGhlciBkZWZhdWx0IG9yIGJhc2VkIG9uIG1vZHVsZSBwYXJhbSkgKi8KKwlyYzMyNDM0X3dkdF9zZXQodGltZW91dCk7CisKIAkvKiByZXNldCBXVEMgdGltZW91dCBiaXQgYW5kIGVuYWJsZSBXRFQgKi8KIAluYW5kID0gMSA8PCBSQzMyNDM0X1dUQ19UTzsKIAlvciA9IDEgPDwgUkMzMjQzNF9XVENfRU47CiAKIAlTRVRfQklUUyh3ZHRfcmVnLT53dGMsIG9yLCBuYW5kKTsKKworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlN0YXJ0ZWQgd2F0Y2hkb2cgdGltZXIuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc3RvcCh2b2lkKQogeworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCiAJLyogRGlzYWJsZSBXRFQgKi8KIAlTRVRfQklUUyh3ZHRfcmVnLT53dGMsIDAsIDEgPDwgUkMzMjQzNF9XVENfRU4pOwotfQogCi1zdGF0aWMgaW50IHJjMzI0MzRfd2R0X3NldChpbnQgbmV3X3RpbWVvdXQpCi17Ci0JaW50IG1heF90byA9IFdUQ09NUDJTRUMoKHUzMiktMSk7Ci0KLQlpZiAobmV3X3RpbWVvdXQgPCAwIHx8IG5ld190aW1lb3V0ID4gbWF4X3RvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJIjogdGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLAotCQkJbWF4X3RvKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXRpbWVvdXQgPSBuZXdfdGltZW91dDsKLQl3cml0ZWwoU0VDMldUQ09NUCh0aW1lb3V0KSwgJndkdF9yZWctPnd0Y29tcGFyZSk7Ci0KLQlyZXR1cm4gMDsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXByaW50ayhLRVJOX0lORk8gUEZYICJTdG9wcGVkIHdhdGNoZG9nIHRpbWVyLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3Bpbmcodm9pZCkKIHsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKIAl3cml0ZWwoMCwgJndkdF9yZWctPnd0Y291bnQpOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcmMzMjQzNF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEzNywxMSArMTU4LDEwIEBACiB7CiAJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikgewogCQlyYzMyNDM0X3dkdF9zdG9wKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogZGlzYWJsaW5nIHdhdGNoZG9nIHRpbWVyXG4iKTsKIAkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBLQlVJTERfTU9ETkFNRQotCQkJIjogZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuIFdEVCB3aWxsIG5vdCBzdG9wICFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJImRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5LiBXRFQgd2lsbCBub3Qgc3RvcCFcbiIpOwogCQlyYzMyNDM0X3dkdF9waW5nKCk7CiAJfQogCWNsZWFyX2JpdCgwLCAmcmMzMjQzNF93ZHRfZGV2aWNlLmludXNlKTsKQEAgLTE4NSw4ICsyMDUsOSBAQAogCQkuaWRlbnRpdHkgPQkJIlJDMzI0MzRfV0RUIFdhdGNoZG9nIiwKIAl9OwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBXRElPQ19LRUVQQUxJVkU6Ci0JCXJjMzI0MzRfd2R0X3BpbmcoKTsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIAljYXNlIFdESU9DX0dFVFNUQVRVUzoKIAljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CkBAIC0xOTQsMTAgKzIxNSw2IEBACiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZhbHVlLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7Ci0JY2FzZSBXRElPQ19HRVRTVVBQT1JUOgotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7CiAJY2FzZSBXRElPQ19TRVRPUFRJT05TOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmdwLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIxMiw2ICsyMjksOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCXJjMzI0MzRfd2R0X3BpbmcoKTsKKwkJYnJlYWs7CiAJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ld190aW1lb3V0LCBhcmdwLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIyNyw3ICsyNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYzMyNDM0X3dkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmMzMjQzNF93ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IHJjMzI0MzRfd2R0X3dyaXRlLApAQCAtMjQyLDggKzI2Miw4IEBACiAJLmZvcHMJPSAmcmMzMjQzNF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9fZGV2aW5pdGRhdGEgPSBLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKLQkJIjogV2F0Y2hkb2cgVGltZXIgdmVyc2lvbiAiIFZFUlNJT04gIiwgdGltZXIgbWFyZ2luOiAlZCBzZWNcbiI7CitzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2RldmluaXRkYXRhID0gS0VSTl9JTkZPIFBGWAorCQkiV2F0Y2hkb2cgVGltZXIgdmVyc2lvbiAiIFZFUlNJT04gIiwgdGltZXIgbWFyZ2luOiAlZCBzZWNcbiI7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHJjMzI0MzRfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0yNTIsMjIgKzI3MiwzMyBAQAogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJyYjUzMl93ZHRfcmVzIik7CiAJaWYgKCFyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZXRyaWV2ZSByZXNvdXJjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmV0cmlldmUgcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJd2R0X3JlZyA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQpOwogCWlmICghd2R0X3JlZykgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmVtYXAgSS9PIHJlc291cmNlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZW1hcCBJL08gcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCisJLyogTWFrZSBzdXJlIHRoZSB3YXRjaGRvZyBpcyBub3QgcnVubmluZyAqLworCXJjMzI0MzRfd2R0X3N0b3AoKTsKKworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZTsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwlpZiAocmMzMjQzNF93ZHRfc2V0KHRpbWVvdXQpKSB7CisJCXJjMzI0MzRfd2R0X3NldChXQVRDSERPR19USU1FT1VUKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJ0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKKwkJCVdUQ09NUDJTRUMoKHUzMiktMSkpOworCX0KKwogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnJjMzI0MzRfd2R0X21pc2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZWdpc3RlciB3YXRjaGRvZyBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVnaXN0ZXIgd2F0Y2hkb2cgZGV2aWNlXG4iKTsKIAkJZ290byB1bm1hcDsKIAl9CiAKQEAgLTI4NywyMiArMzE4LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJjMzI0MzRfd2R0ID0gewotCS5wcm9iZQk9IHJjMzI0MzRfd2R0X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChyYzMyNDM0X3dkdF9yZW1vdmUpLAotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lID0gInJjMzI0MzRfd2R0IiwKK3N0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmMzMjQzNF93ZHRfc3RvcCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByYzMyNDM0X3dkdF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHJjMzI0MzRfd2R0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocmMzMjQzNF93ZHRfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSByYzMyNDM0X3dkdF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJCS5uYW1lID0gInJjMzI0MzRfd2R0IiwKIAl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByYzMyNDM0X3dkdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmMzMjQzNF93ZHQpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJjMzI0MzRfd2R0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByYzMyNDM0X3dkdF9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJjMzI0MzRfd2R0KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmMzMjQzNF93ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocmMzMjQzNF93ZHRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3JkYzMyMXhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3JkYzMyMXhfd2R0LmMKaW5kZXggYmY5MjgwMi4uMzZlMjIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yZGMzMjF4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmRjMzIxeF93ZHQuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vcmRjMzIxeF9kZWZzLmg+CiAKICNkZWZpbmUgUkRDX1dEVF9NQVNLCTB4ODAwMDAwMDAgLyogTWFzayAqLwogI2RlZmluZSBSRENfV0RUX0VOCTB4MDA4MDAwMDAgLyogRW5hYmxlIGJpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCmluZGV4IDA5Y2IxODMuLjFlOGYwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKQEAgLTE0LDkgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAKIC8qIFJJTyB1c2VzIHRoZSBOYXRTZW1pIFN1cGVyIEkvTyBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljYWwgZGV2aWNlCkBAIC04Niw4ICs4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmlvd2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHJpb3dkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfU0VUVElNRU9VVCwKQEAgLTE0Nyw3ICsxNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCByaW93ZCAqcCA9IHJpb3dkX2RldmljZTsKIApAQCAtMTYwLDEyICsxNTksMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmlvd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkubGxzZWVrID0Jbm9fbGxzZWVrLAotCS5pb2N0bCA9CXJpb3dkX2lvY3RsLAotCS5vcGVuID0JCXJpb3dkX29wZW4sCi0JLndyaXRlID0Jcmlvd2Rfd3JpdGUsCi0JLnJlbGVhc2UgPQlyaW93ZF9yZWxlYXNlLAorCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0JCW5vX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwgPQlyaW93ZF9pb2N0bCwKKwkub3BlbiA9CQkJcmlvd2Rfb3BlbiwKKwkud3JpdGUgPQkJcmlvd2Rfd3JpdGUsCisJLnJlbGVhc2UgPQkJcmlvd2RfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSByaW93ZF9taXNjZGV2ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCmluZGV4IGYxYWUzNzI5Li5jY2UxOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JtOWtfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCkBAIC01OSw4ICs1OSw4IEBACiBzdGF0aWMgaW50IHdkdF9ncGlfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLAogCQkJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKIAogc3RhdGljIGNvbnN0IGNoYXIgd2R0X2dwaV9uYW1lW10gPSAid2R0X2dwaSI7CkBAIC0zNDYsMTAgKzM0Niw5IEBACiB9CiAKIC8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2KQogewogCWludCByZXM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkdiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWNvbnN0IHN0cnVjdCByZXNvdXJjZQogCQkqIGNvbnN0IHJyID0gd2R0X2dwaV9nZXRfcmVzb3VyY2UocGR2LCBXRFRfUkVTT1VSQ0VfUkVHUywKIAkJCQkJCSAgSU9SRVNPVVJDRV9NRU0pLApAQCAtMzc0LDcgKzM3Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXM7CiAKQEAgLTM4NywxNSArMzg2LDEzIEBACiAKIAogLyogRGV2aWNlIGRyaXZlciBpbml0ICYgZXhpdCAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdkdF9ncGlfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIHdkdF9ncGlfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3Z3RfZ3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSB3ZHRfZ3BpX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSB3ZHRfZ3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3Aod2R0X2dwaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IE5VTEwsCi0JLnN1c3BlbmQJPSBOVUxMLAotCS5yZXN1bWUJCT0gTlVMTCwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTQwMywxMiArNDAwLDEyIEBACiAJYXRvbWljX3NldCgmb3BlbmNudCwgMSk7CiAJaWYgKHRpbWVvdXQgPiBNQVhfVElNRU9VVF9TRUNPTkRTKQogCQl0aW1lb3V0ID0gTUFYX1RJTUVPVVRfU0VDT05EUzsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2dwaV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQod2R0X2dwaV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCmluZGV4IGUxOWI0NTcuLjViZDc4MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCVdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIFNBMTF4MC9QWEEyeHgKICAqCi0gKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMCBPbGVnIERyb2tpbiA8Z3JlZW5AY3JpbWVhLmVkdT4KLSAqICAgICAgICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKgkoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CisgKgkgICAgQmFzZWQgb24gU29mdERvZyBkcml2ZXIgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMCAgICAgICAgICAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CiAgKgotICogICAgICAyNy8xMS8yMDAwIEluaXRpYWwgcmVsZWFzZQorICoJMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCmluZGV4IDMyNjZkYWFhZS4uZDFjMzkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJNjB4eCBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIgV2F0Y2hkb2cgVGltZXIgZHJpdmVyIGZvciBMaW51eCAyLjIueAogICoKLSAqICAgICAgQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294LgorICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294LgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjODM2MC5jCmluZGV4IGFlNzRmNmIuLmI2ZTY3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjODM2MC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjODM2MC5jCkBAIC00LDEyICs0LDEyIEBACiAgKgkoYykgQ29weXJpZ2h0IDIwMDUgV2ViY29uLCBJbmMuCiAgKgogICoJQmFzZWQgb24gaWI3MDB3ZHQuYywgd2hpY2ggaXMgYmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQKLSAqICAgICAgb24gYWNxdWlyZXdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIHdkdC5jLgorICoJb24gYWNxdWlyZXdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIHdkdC5jLgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMSBDaGFybGVzIEhvd2VzIDxjaG93ZXNAdnNvbC5uZXQ+CiAgKgotICogICAgICBCYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhY3F1aXJld2R0LmMgd2hpY2gKLSAqICAgICAgIGlzIGJhc2VkIG9uIHdkdC5jLgorICoJQmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWNxdWlyZXdkdC5jIHdoaWNoCisgKglpcyBiYXNlZCBvbiB3ZHQuYy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDAtMjAwMSBNYXJlayBNaWNoYWxraWV3aWN6IDxtYXJla21AbGludXgub3JnLnBsPgogICoKQEAgLTMwLDkgKzMwLDkgQEAKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTUgICAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCi0gKiAgICAgIDE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KLSAqICAgICAgICAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAotICogICAgICAgICAgIEFkZGVkIHRpbWVvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0CisgKgkxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CisgKgkgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisgKgkgICAgIEFkZGVkIHRpbWVvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKaW5kZXggMDY1NTNkZS4uZTQ2N2RkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKQEAgLTM1LDcgKzM1LDggQEAKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKICNkZWZpbmUgRVBYQzNfV0FUQ0hET0dfQ1RMX1JFRyAweDFlZSAvKiB3cml0ZSAxIHRvIGVuYWJsZSwgMCB0byBkaXNhYmxlICovCiAjZGVmaW5lIEVQWEMzX1dBVENIRE9HX1BFVF9SRUcgMHgxZWYgLyogd3JpdGUgYW55dGhpbmcgdG8gcGV0IG9uY2UgZW5hYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKaW5kZXggMjNkYTNjYy4uYjVlMTljMSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCkBAIC03MSw3ICs3MSw3IEBACiAjZGVmaW5lIFVBUlQyX0lSUQkweDA0CS8qIFNlcmlhbDEgKi8KIC8qIDUgLTcgYXJlIHJlc2VydmVkICovCiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gUEZYIFNDMTIwMF9NT0RVTEVfVkVSOworc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IFBGWCBTQzEyMDBfTU9EVUxFX1ZFUjsKIHN0YXRpYyBpbnQgdGltZW91dCA9IDE7CiBzdGF0aWMgaW50IGlvID0gLTE7CiBzdGF0aWMgaW50IGlvX2xlbiA9IDI7CQkvKiBmb3Igbm9uIHBsdWcgYW5kIHBsYXkgKi8KQEAgLTM5Miw3ICszOTIsNyBAQAogewogCWludCByZXQ7CiAKLQlwcmludGsoIiVzXG4iLCBiYW5uZXIpOworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBiYW5uZXIpOwogCiAjaWYgZGVmaW5lZCBDT05GSUdfUE5QCiAJaWYgKGlzYXBucCkgewpAQCAtNDc3LDYgKzQ3Nyw3IEBACiBtb2R1bGVfZXhpdChzYzEyMDB3ZHRfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlp3YW5lIE13YWlrYW1ibyA8endhbmVAY29tbWZpcmVzZXJ2aWNlcy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3MzA3L1BDOTczMDcgd2F0Y2hkb2cgY29tcG9uZW50Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oCisJIkRyaXZlciBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3MzA3L1BDOTczMDcgd2F0Y2hkb2cgY29tcG9uZW50Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYwppbmRleCBhMmI2YzEwLi41MmI2M2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKQEAgLTEsOCArMSw4IEBACiAvKgogICoJQU1EIEVsYW4gU0M1MjAgcHJvY2Vzc29yIFdhdGNoZG9nIFRpbWVyIGRyaXZlcgogICoKLSAqICAgICAgQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294LAotICogICAgICAgICAgIGFuZCBzYmM2MHh4d2R0LmMgYnkgSmFrb2IgT2VzdGVyZ2FhcmQgPGpha29iQHVudGhvdWdodC5uZXQ+CisgKglCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3gsCisgKgkgICAgIGFuZCBzYmM2MHh4d2R0LmMgYnkgSmFrb2IgT2VzdGVyZ2FhcmQgPGpha29iQHVudGhvdWdodC5uZXQ+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTExLDcgKzExLDcgQEAKICAqCiAgKglUaGUgYXV0aG9ycyBkbyBOT1QgYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlIHdhcnJhbnR5IGZvcgogICoJYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQgIkFTLUlTIiBpbgotICogICAgICB0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KKyAqCXRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMSAgICBTY290dCBKZW5uaW5ncyA8bGludXhkcml2ZXJzQG9yby5uZXQ+CiAgKiAgICAgICAgICAgOS8yNyAtIDIwMDEgICAgICBbSW5pdGlhbCByZWxlYXNlXQpAQCAtNDM4LDYgKzQzOCw3IEBACiBtb2R1bGVfZXhpdChzYzUyMF93ZHRfdW5sb2FkKTsKIAogTU9EVUxFX0FVVEhPUigiU2NvdHQgYW5kIEJpbGwgSmVubmluZ3MiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB3YXRjaGRvZyB0aW1lciBpbiBBTUQgXCJFbGFuXCIgU0M1MjAgdVByb2Nlc3NvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKAorCSJEcml2ZXIgZm9yIHdhdGNoZG9nIHRpbWVyIGluIEFNRCBcIkVsYW5cIiBTQzUyMCB1UHJvY2Vzc29yIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKaW5kZXggMmU1NmNhZC4uOGExZjBiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwpAQCAtMiw3ICsyLDcgQEAKICAqCVNNc0MgMzdCNzg3IFdhdGNoZG9nIFRpbWVyIGRyaXZlciBmb3IgTGludXggMi42LngueAogICoKICAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgotICogICAgICAgYW5kIHNvbWUgb3RoZXIgZXhpc3RpbmcgZHJpdmVycworICoJYW5kIHNvbWUgb3RoZXIgZXhpc3RpbmcgZHJpdmVycwogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICoJVGhlIGF1dGhvcnMgZG8gTk9UIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZSB3YXJyYW50eSBmb3IKICAqCWFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkICJBUy1JUyIgaW4KLSAqICAgICAgdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCisgKgl0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KICAqCiAgKgkoQykgQ29weXJpZ2h0IDIwMDMtMjAwNiAgU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPgogICoKQEAgLTIyLDE5ICsyMiwxOSBAQAogICoKICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9uOgogICoKLSAqICAgICAgQSBXYXRjaGRvZyBUaW1lciAoV0RUKSBpcyBhIGhhcmR3YXJlIGNpcmN1aXQgdGhhdCBjYW4KLSAqICAgICAgcmVzZXQgdGhlIGNvbXB1dGVyIHN5c3RlbSBpbiBjYXNlIG9mIGEgc29mdHdhcmUgZmF1bHQuCi0gKiAgICAgIFlvdSBwcm9iYWJseSBrbmV3IHRoYXQgYWxyZWFkeS4KKyAqCUEgV2F0Y2hkb2cgVGltZXIgKFdEVCkgaXMgYSBoYXJkd2FyZSBjaXJjdWl0IHRoYXQgY2FuCisgKglyZXNldCB0aGUgY29tcHV0ZXIgc3lzdGVtIGluIGNhc2Ugb2YgYSBzb2Z0d2FyZSBmYXVsdC4KKyAqCVlvdSBwcm9iYWJseSBrbmV3IHRoYXQgYWxyZWFkeS4KICAqCi0gKiAgICAgIFVzdWFsbHkgYSB1c2Vyc3BhY2UgZGFlbW9uIHdpbGwgbm90aWZ5IHRoZSBrZXJuZWwgV0RUIGRyaXZlcgotICogICAgICB2aWEgdGhlIC9kZXYvd2F0Y2hkb2cgc3BlY2lhbCBkZXZpY2UgZmlsZSB0aGF0IHVzZXJzcGFjZSBpcwotICogICAgICBzdGlsbCBhbGl2ZSwgYXQgcmVndWxhciBpbnRlcnZhbHMuICBXaGVuIHN1Y2ggYSBub3RpZmljYXRpb24KLSAqICAgICAgb2NjdXJzLCB0aGUgZHJpdmVyIHdpbGwgdXN1YWxseSB0ZWxsIHRoZSBoYXJkd2FyZSB3YXRjaGRvZwotICogICAgICB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIsIGFuZCB0aGF0IHRoZSB3YXRjaGRvZyBzaG91bGQgd2FpdAotICogICAgICBmb3IgeWV0IGFub3RoZXIgbGl0dGxlIHdoaWxlIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCi0gKiAgICAgIElmIHVzZXJzcGFjZSBmYWlscyAoUkFNIGVycm9yLCBrZXJuZWwgYnVnLCB3aGF0ZXZlciksIHRoZQotICogICAgICBub3RpZmljYXRpb25zIGNlYXNlIHRvIG9jY3VyLCBhbmQgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIHdpbGwKLSAqICAgICAgcmVzZXQgdGhlIHN5c3RlbSAoY2F1c2luZyBhIHJlYm9vdCkgYWZ0ZXIgdGhlIHRpbWVvdXQgb2NjdXJzLgorICoJVXN1YWxseSBhIHVzZXJzcGFjZSBkYWVtb24gd2lsbCBub3RpZnkgdGhlIGtlcm5lbCBXRFQgZHJpdmVyCisgKgl2aWEgdGhlIC9kZXYvd2F0Y2hkb2cgc3BlY2lhbCBkZXZpY2UgZmlsZSB0aGF0IHVzZXJzcGFjZSBpcworICoJc3RpbGwgYWxpdmUsIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLiAgV2hlbiBzdWNoIGEgbm90aWZpY2F0aW9uCisgKglvY2N1cnMsIHRoZSBkcml2ZXIgd2lsbCB1c3VhbGx5IHRlbGwgdGhlIGhhcmR3YXJlIHdhdGNoZG9nCisgKgl0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIsIGFuZCB0aGF0IHRoZSB3YXRjaGRvZyBzaG91bGQgd2FpdAorICoJZm9yIHlldCBhbm90aGVyIGxpdHRsZSB3aGlsZSB0byByZXNldCB0aGUgc3lzdGVtLgorICoJSWYgdXNlcnNwYWNlIGZhaWxzIChSQU0gZXJyb3IsIGtlcm5lbCBidWcsIHdoYXRldmVyKSwgdGhlCisgKglub3RpZmljYXRpb25zIGNlYXNlIHRvIG9jY3VyLCBhbmQgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIHdpbGwKKyAqCXJlc2V0IHRoZSBzeXN0ZW0gKGNhdXNpbmcgYSByZWJvb3QpIGFmdGVyIHRoZSB0aW1lb3V0IG9jY3Vycy4KICAqCiAgKiBDcmVhdGUgZGV2aWNlIHdpdGg6CiAgKiAgbWtub2QgL2Rldi93YXRjaGRvZyBjIDEwIDEzMApAQCAtNDg1LDcgKzQ4NSw3IEBACiAJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgogCQluZXdfdGltZW91dCA9IHRpbWVvdXQ7CiAJCWlmICh1bml0ID09IFVOSVRfTUlOVVRFKQotCQkJICBuZXdfdGltZW91dCAqPSA2MDsKKwkJCW5ld190aW1lb3V0ICo9IDYwOwogCQlyZXR1cm4gcHV0X3VzZXIobmV3X3RpbWVvdXQsIHVhcmcuaSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc29mdGRvZy5jCmluZGV4IDcyMDRmOTYuLmViY2M5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc29mdGRvZy5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc29mdGRvZy5jCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqCVNvZnREb2cJMC4wNzoJQSBTb2Z0d2FyZSBXYXRjaGRvZyBEZXZpY2UKICAqCi0gKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCisgKgkJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zMiw3ICszMyw3IEBACiAgKglBZGRlZCBXRElPQ19HRVRUSU1FT1VUIGFuZCBXRElPQ19TRVRUSU1PVVQuCiAgKgogICogIDIwMDIwNTMwIEpvZWwgQmVja2VyIDxqb2VsLmJlY2tlckBvcmFjbGUuY29tPgotICogIAlBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCisgKglBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKaW5kZXggM2M3YWE0MS4uYTljN2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCkBAIC00NjIsNiArNDYyLDcgQEAKIG1vZHVsZV9leGl0KHdkdF9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCBTYW11ZWwgVGFyZGlldSA8c2FtQHJmYzExNDkubmV0PiIpOworTU9EVUxFX0FVVEhPUigiTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCAiCisJCSJTYW11ZWwgVGFyZGlldSA8c2FtQHJmYzExNDkubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3ODM2OTdoZi9oZyBXRFQgZHJpdmVyIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYwppbmRleCBhZGE4YWQ4Li44ODNiNWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKQEAgLTIsNyArMiw3IEBACiAgKgl3ODM2OTd1Zy91ZiBXRFQgZHJpdmVyCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDA4IEZsZW1taW5nIEZyYW5zZW4gPGZmQG5ydmlzc2luZy5uZXQ+Ci0gKiAgICAgICAgICAgICAgcmV1c2VkIG9yaWdpbmFsIGNvZGUgdG8gc3Vwb3BydCB3ODM2OTd1Zy91Zi4KKyAqCQlyZXVzZWQgb3JpZ2luYWwgY29kZSB0byBzdXBwb3J0IHc4MzY5N3VnL3VmLgogICoKICAqCUJhc2VkIG9uIHc4MzYyN2hmX3dkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFkdmFudGVjaHdkdC5jCiAgKgl3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KQEAgLTc5LDcgKzc5LDcgQEAKIAkJCQkJCQkoc2FtZSBhcyBFRkVSKSAqLwogI2RlZmluZSBXRFRfRUZEUiAoV0RUX0VGSVIrMSkgLyogRXh0ZW5kZWQgRnVuY3Rpb24gRGF0YSBSZWdpc3RlciAqLwogCi1zdGF0aWMgdm9pZCB3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIodm9pZCkKK3N0YXRpYyBpbnQgdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCXVuc2lnbmVkIGNoYXIgdmVyc2lvbjsKQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gVzgzNjk3VUcvVUYgY291bGQgYmUgZm91bmRcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCW91dGJfcCgweDA3LCBXRFRfRUZFUik7IC8qIHBvaW50IHRvIGxvZ2ljYWwgZGV2aWNlIG51bWJlciByZWcgKi8KQEAgLTExMCw2ICsxMTAsOCBAQAogCW91dGJfcCgweDMwLCBXRFRfRUZFUik7IC8qIHNlbGVjdCBDUjMwICovCiAJYyA9IGluYl9wKFdEVF9FRkRSKTsKIAlvdXRiX3AoYyB8fCAweDAxLCBXRFRfRUZEUik7IC8qIHNldCBiaXQgMCB0byBhY3RpdmF0ZSBHUElPMiAqLworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHc4MzY5N3VnX3Vuc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCkBAIC0xMTcsMTEgKzExOSwxNCBAQAogCW91dGJfcCgweEFBLCBXRFRfRUZFUik7IC8qIExlYXZlIGV4dGVuZGVkIGZ1bmN0aW9uIG1vZGUgKi8KIH0KIAotc3RhdGljIHZvaWQgdzgzNjk3dWdfaW5pdCh2b2lkKQorc3RhdGljIGludCB3ODM2OTd1Z19pbml0KHZvaWQpCiB7CisJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIHQ7CiAKLQl3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIoKTsKKwlyZXQgPSB3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CiAKIAlvdXRiX3AoMHhGNiwgV0RUX0VGRVIpOyAvKiBTZWxlY3QgQ1JGNiAqLwogCXQgPSBpbmJfcChXRFRfRUZEUik7ICAgIC8qIHJlYWQgQ1JGNiAqLwpAQCAtMTM3LDEzICsxNDIsMTUgQEAKIAlvdXRiX3AodCwgV0RUX0VGRFIpOyAgICAvKiBXcml0ZSBiYWNrIHRvIENSRjUgKi8KIAogCXc4MzY5N3VnX3Vuc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdkdF9jdHJsKGludCB0aW1lb3V0KQogewogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKLQl3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIoKTsKKwlpZiAodzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCkgPCAwKQorCQlyZXR1cm47CiAKIAlvdXRiX3AoMHhGNCwgV0RUX0VGRVIpOyAgICAvKiBTZWxlY3QgQ1JGNCAqLwogCW91dGJfcCh0aW1lb3V0LCBXRFRfRUZEUik7IC8qIFdyaXRlIFRpbWVvdXQgY291bnRlciB0byBDUkY0ICovCkBAIC0zNDcsNyArMzU0LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JdzgzNjk3dWdfaW5pdCgpOworCXJldCA9IHc4MzY5N3VnX2luaXQoKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gdW5yZWdfcmVnaW9uczsKIAogCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKIAlpZiAocmV0ICE9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwppbmRleCAyNTI1ZGE1Li4wNTYwMTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICh3ZHRfc2V0X3RpbWVvdXQobmV3X3RpbWVvdXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl3ZHRfa2VlcGFsaXZlKCk7CiAJCS8qIEZhbGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmggYi9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCmluZGV4IGRiMzQ4NTMuLjBlM2E0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmgKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaApAQCAtMTEsOSArMTEsOSBAQAogICoKICAqCWh0dHA6Ly93d3cuY3ltcnUubmV0CiAgKgotICoJVGhpcyBkcml2ZXIgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQKLSAqCWhlcmVpbiBieSByZWZlcmVuY2UuIFRoZSBkcml2ZXIgaXMgcHJvdmlkZWQgd2l0aG91dCB3YXJyYW50eSBvcgotICoJc3VwcG9ydC4KKyAqCVRoaXMgZHJpdmVyIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqCWluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIHdpdGhvdXQKKyAqCXdhcnJhbnR5IG9yIHN1cHBvcnQuCiAgKgogICoJUmVsZWFzZSAwLjA0LgogICoKQEAgLTM5LDEzICszOSwxMyBAQAogLyogcHJvZ3JhbW1hYmxlIG91dHB1dHM6ICovCiAjZGVmaW5lIFdEVF9QUk9HT1VUCQkoaW8rMTUpCS8qIHdyPWVuYWJsZSwgcmQ9ZGlzYWJsZSAqLwogCi0JCQkJCQkJCS8qIEZBTiA1MDEgNTAwICovCi0jZGVmaW5lIFdEQ19TUl9XQ0NSCQkxCS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgWCAgKi8KLSNkZWZpbmUgV0RDX1NSX1RHT09ECQkyCQkJCS8qICBYICAgWCAgIC0gICovCi0jZGVmaW5lIFdEQ19TUl9JU09JMAkJNAkJCQkvKiAgWCAgIFggICBYICAqLwotI2RlZmluZSBXRENfU1JfSVNJSTEJCTgJCQkJLyogIFggICBYICAgWCAgKi8KLSNkZWZpbmUgV0RDX1NSX0ZBTkdPT0QJCTE2CQkJCS8qICBYICAgLSAgIC0gICovCi0jZGVmaW5lIFdEQ19TUl9QU1VPVkVSCQkzMgkvKiBBY3RpdmUgbG93ICovCS8qICBYICAgWCAgIC0gICovCi0jZGVmaW5lIFdEQ19TUl9QU1VVTkRSCQk2NAkvKiBBY3RpdmUgbG93ICovCS8qICBYICAgWCAgIC0gICovCi0jZGVmaW5lIFdEQ19TUl9JUlEJCTEyOAkvKiBBY3RpdmUgbG93ICovCS8qICBYICAgWCAgIFggICovCisJCQkJCQkJIC8qIEZBTiA1MDEgNTAwICovCisjZGVmaW5lIFdEQ19TUl9XQ0NSCQkxCS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgWCAgKi8KKyNkZWZpbmUgV0RDX1NSX1RHT09ECQkyCQkJIC8qICBYICAgWCAgIC0gICovCisjZGVmaW5lIFdEQ19TUl9JU09JMAkJNAkJCSAvKiAgWCAgIFggICBYICAqLworI2RlZmluZSBXRENfU1JfSVNJSTEJCTgJCQkgLyogIFggICBYICAgWCAgKi8KKyNkZWZpbmUgV0RDX1NSX0ZBTkdPT0QJCTE2CQkJIC8qICBYICAgLSAgIC0gICovCisjZGVmaW5lIFdEQ19TUl9QU1VPVkVSCQkzMgkvKiBBY3RpdmUgbG93ICovIC8qICBYICAgWCAgIC0gICovCisjZGVmaW5lIFdEQ19TUl9QU1VVTkRSCQk2NAkvKiBBY3RpdmUgbG93ICovIC8qICBYICAgWCAgIC0gICovCisjZGVmaW5lIFdEQ19TUl9JUlEJCTEyOAkvKiBBY3RpdmUgbG93ICovIC8qICBYICAgWCAgIFggICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCmluZGV4IGVkZGI5MTguLjNiYmVmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ZHQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKglJbmR1c3RyaWFsIENvbXB1dGVyIFNvdXJjZSBXRFQ1MDAvNTAxIGRyaXZlcgorICoJSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UgV0RUNTAxIGRyaXZlcgogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5Ni0xOTk3IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgpAQCAtODIsMTQgKzgyLDE2IEBACiBtb2R1bGVfcGFyYW0oaXJxLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJXRFQgaXJxIChkZWZhdWx0PTExKSIpOwogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKIC8qIFN1cHBvcnQgZm9yIHRoZSBGYW4gVGFjaG9tZXRlciBvbiB0aGUgV0RUNTAxLVAgKi8KIHN0YXRpYyBpbnQgdGFjaG9tZXRlcjsKLQogbW9kdWxlX3BhcmFtKHRhY2hvbWV0ZXIsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRhY2hvbWV0ZXIsCiAJCSJXRFQ1MDEtUCBGYW4gVGFjaG9tZXRlciBzdXBwb3J0ICgwPWRpc2FibGUsIGRlZmF1bHQ9MCkiKTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLworCitzdGF0aWMgaW50IHR5cGUgPSA1MDA7Cittb2R1bGVfcGFyYW0odHlwZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModHlwZSwKKwkJIldEVDUwMS1QIENhcmQgdHlwZSAoNTAwIG9yIDUwMSAsIGRlZmF1bHQ9NTAwKSIpOwogCiAvKgogICoJUHJvZ3JhbW1pbmcgc3VwcG9ydApAQCAtMTU4LDcgKzE2MCw3IEBACiAgKglyZWxvYWRpbmcgdGhlIGNhc2NhZGUgY291bnRlci4KICAqLwogCi1zdGF0aWMgaW50IHdkdF9waW5nKHZvaWQpCitzdGF0aWMgdm9pZCB3ZHRfcGluZyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJndkdF9sb2NrLCBmbGFncyk7CkBAIC0xNjksNyArMTcxLDYgQEAKIAl3ZHRfY3RyX2xvYWQoMSwgd2RfaGVhcnRiZWF0KTsJLyogSGVhcnRiZWF0ICovCiAJb3V0Yl9wKDAsIFdEVF9EQyk7CQkvKiBFbmFibGUgd2F0Y2hkb2cgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHRfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE5Myw3ICsxOTQsNiBAQAogCiAvKioKICAqCXdkdF9nZXRfc3RhdHVzOgotICoJQHN0YXR1czoJCXRoZSBuZXcgc3RhdHVzLgogICoKICAqCUV4dHJhY3QgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIGEgV0RUIHdhdGNoZG9nIGRldmljZS4gVGhlcmUgYXJlCiAgKglzZXZlcmFsIGJvYXJkIHZhcmlhbnRzIHNvIHdlIGhhdmUgdG8ga25vdyB3aGljaCBiaXRzIGFyZSB2YWxpZC4gU29tZQpAQCAtMjAyLDM2ICsyMDIsMzUgQEAKICAqCXdlIHRoZW4gbWFwIHRoZSBiaXRzIG9udG8gdGhlIHN0YXR1cyBpb2N0bCBmbGFncy4KICAqLwogCi1zdGF0aWMgaW50IHdkdF9nZXRfc3RhdHVzKGludCAqc3RhdHVzKQorc3RhdGljIGludCB3ZHRfZ2V0X3N0YXR1cyh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgbmV3X3N0YXR1czsKKwlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndkdF9sb2NrLCBmbGFncyk7CiAJbmV3X3N0YXR1cyA9IGluYl9wKFdEVF9TUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKIAotCSpzdGF0dXMgPSAwOwogCWlmIChuZXdfc3RhdHVzICYgV0RDX1NSX0lTT0kwKQotCQkqc3RhdHVzIHw9IFdESU9GX0VYVEVSTjE7CisJCXN0YXR1cyB8PSBXRElPRl9FWFRFUk4xOwogCWlmIChuZXdfc3RhdHVzICYgV0RDX1NSX0lTSUkxKQotCQkqc3RhdHVzIHw9IFdESU9GX0VYVEVSTjI7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1RHT09EKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9PVkVSSEVBVDsKLQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQotCQkqc3RhdHVzIHw9IFdESU9GX1BPV0VST1ZFUjsKLQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQotCQkqc3RhdHVzIHw9IFdESU9GX1BPV0VSVU5ERVI7Ci0JaWYgKHRhY2hvbWV0ZXIpIHsKLQkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9GQU5HT09EKSkKLQkJCSpzdGF0dXMgfD0gV0RJT0ZfRkFORkFVTFQ7CisJCXN0YXR1cyB8PSBXRElPRl9FWFRFUk4yOworCWlmICh0eXBlID09IDUwMSkgeworCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1RHT09EKSkKKwkJCXN0YXR1cyB8PSBXRElPRl9PVkVSSEVBVDsKKwkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VPVkVSKSkKKwkJCXN0YXR1cyB8PSBXRElPRl9QT1dFUk9WRVI7CisJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCisJCQlzdGF0dXMgfD0gV0RJT0ZfUE9XRVJVTkRFUjsKKwkJaWYgKHRhY2hvbWV0ZXIpIHsKKwkJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCisJCQkJc3RhdHVzIHw9IFdESU9GX0ZBTkZBVUxUOworCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKioKICAqCXdkdF9nZXRfdGVtcGVyYXR1cmU6CiAgKgpAQCAtMjM5LDcgKzIzOCw3IEBACiAgKglmYXJlbmhlaXQuIEl0IHdhcyBkZXNpZ25lZCBieSBhbiBpbXBlcmlhbCBtZWFzdXJlbWVudCBsdWRkaXRlLgogICovCiAKLXN0YXRpYyBpbnQgd2R0X2dldF90ZW1wZXJhdHVyZShpbnQgKnRlbXBlcmF0dXJlKQorc3RhdGljIGludCB3ZHRfZ2V0X3RlbXBlcmF0dXJlKHZvaWQpCiB7CiAJdW5zaWduZWQgc2hvcnQgYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjQ3LDEwICsyNDYsMTggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKIAljID0gaW5iX3AoV0RUX1JUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHRfbG9jaywgZmxhZ3MpOwotCSp0ZW1wZXJhdHVyZSA9IChjICogMTEgLyAxNSkgKyA3OwotCXJldHVybiAwOworCXJldHVybiAoYyAqIDExIC8gMTUpICsgNzsKIH0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLworCitzdGF0aWMgdm9pZCB3ZHRfZGVjb2RlXzUwMShpbnQgc3RhdHVzKQoreworCWlmICghKHN0YXR1cyAmIFdEQ19TUl9UR09PRCkpCisJCXByaW50ayhLRVJOX0NSSVQgIk92ZXJoZWF0IGFsYXJtLiglZClcbiIsIGluYl9wKFdEVF9SVCkpOworCWlmICghKHN0YXR1cyAmIFdEQ19TUl9QU1VPVkVSKSkKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiUFNVIG92ZXIgdm9sdGFnZS5cbiIpOworCWlmICghKHN0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiUFNVIHVuZGVyIHZvbHRhZ2UuXG4iKTsKK30KIAogLyoqCiAgKgl3ZHRfaW50ZXJydXB0OgpAQCAtMjc1LDE4ICsyODIsMTMgQEAKIAogCXByaW50ayhLRVJOX0NSSVQgIldEVCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCWlmICghKHN0YXR1cyAmIFdEQ19TUl9UR09PRCkpCi0JCXByaW50ayhLRVJOX0NSSVQgIk92ZXJoZWF0IGFsYXJtLiglZClcbiIsIGluYl9wKFdEVF9SVCkpOwotCWlmICghKHN0YXR1cyAmIFdEQ19TUl9QU1VPVkVSKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiUFNVIG92ZXIgdm9sdGFnZS5cbiIpOwotCWlmICghKHN0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiUFNVIHVuZGVyIHZvbHRhZ2UuXG4iKTsKLQlpZiAodGFjaG9tZXRlcikgewotCQlpZiAoIShzdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCi0JCQlwcmludGsoS0VSTl9DUklUICJQb3NzaWJsZSBmYW4gZmF1bHQuXG4iKTsKKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJd2R0X2RlY29kZV81MDEoc3RhdHVzKTsKKwkJaWYgKHRhY2hvbWV0ZXIpIHsKKwkJCWlmICghKHN0YXR1cyAmIFdEQ19TUl9GQU5HT09EKSkKKwkJCQlwcmludGsoS0VSTl9DUklUICJQb3NzaWJsZSBmYW4gZmF1bHQuXG4iKTsKKwkJfQogCX0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCWlmICghKHN0YXR1cyAmIFdEQ19TUl9XQ0NSKSkgewogI2lmZGVmIFNPRlRXQVJFX1JFQk9PVAogI2lmZGVmIE9OTFlfVEVTVElORwpAQCAtMzY2LDE3ICszNjgsMTggQEAKIAogCS8qIEFkZCBvcHRpb25zIGFjY29yZGluZyB0byB0aGUgY2FyZCB3ZSBoYXZlICovCiAJaWRlbnQub3B0aW9ucyB8PSAoV0RJT0ZfRVhURVJOMXxXRElPRl9FWFRFUk4yKTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCWlkZW50Lm9wdGlvbnMgfD0gKFdESU9GX09WRVJIRUFUfFdESU9GX1BPV0VSVU5ERVJ8V0RJT0ZfUE9XRVJPVkVSKTsKLQlpZiAodGFjaG9tZXRlcikKLQkJaWRlbnQub3B0aW9ucyB8PSBXRElPRl9GQU5GQVVMVDsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLworCWlmICh0eXBlID09IDUwMSkgeworCQlpZGVudC5vcHRpb25zIHw9IChXRElPRl9PVkVSSEVBVHxXRElPRl9QT1dFUlVOREVSfAorCQkJCQkJCVdESU9GX1BPV0VST1ZFUik7CisJCWlmICh0YWNob21ldGVyKQorCQkJaWRlbnQub3B0aW9ucyB8PSBXRElPRl9GQU5GQVVMVDsKKwl9CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKIAkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBXRElPQ19HRVRTVEFUVVM6Ci0JCXdkdF9nZXRfc3RhdHVzKCZzdGF0dXMpOworCQlzdGF0dXMgPSB3ZHRfZ2V0X3N0YXR1cygpOwogCQlyZXR1cm4gcHV0X3VzZXIoc3RhdHVzLCBwKTsKIAljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CiAJCXJldHVybiBwdXRfdXNlcigwLCBwKTsKQEAgLTQ0Niw3ICs0NDksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKIC8qKgogICoJd2R0X3RlbXBfcmVhZDoKICAqCUBmaWxlOiBmaWxlIGhhbmRsZSB0byB0aGUgd2F0Y2hkb2cgYm9hcmQKQEAgLTQ2MSwxMCArNDYzLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHdkdF90ZW1wX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHRyKQogewotCWludCB0ZW1wZXJhdHVyZTsKLQotCWlmICh3ZHRfZ2V0X3RlbXBlcmF0dXJlKCZ0ZW1wZXJhdHVyZSkpCi0JCXJldHVybiAtRUZBVUxUOworCWludCB0ZW1wZXJhdHVyZSA9IHdkdF9nZXRfdGVtcGVyYXR1cmUoKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmdGVtcGVyYXR1cmUsIDEpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ5Nyw3ICs0OTYsNiBAQAogewogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAKIC8qKgogICoJbm90aWZ5X3N5czoKQEAgLTUzOSw3ICs1MzcsNiBAQAogCS5mb3BzCT0gJndkdF9mb3BzLAogfTsKIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfdGVtcF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKQEAgLTU1Myw3ICs1NTAsNiBAQAogCS5uYW1lCT0gInRlbXBlcmF0dXJlIiwKIAkuZm9wcwk9ICZ3ZHRfdGVtcF9mb3BzLAogfTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCiAvKgogICoJVGhlIFdEVCBjYXJkIG5lZWRzIHRvIGxlYXJuIGFib3V0IHNvZnQgc2h1dGRvd25zIGluIG9yZGVyIHRvCkBAIC01NzcsOSArNTczLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3ZHRfZXhpdCh2b2lkKQogewogCW1pc2NfZGVyZWdpc3Rlcigmd2R0X21pc2NkZXYpOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisJaWYgKHR5cGUgPT0gNTAxKQorCQltaXNjX2RlcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiAJZnJlZV9pcnEoaXJxLCBOVUxMKTsKIAlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CkBAIC01OTcsMTIgKzU5MiwxNyBAQAogewogCWludCByZXQ7CiAKKwlpZiAodHlwZSAhPSA1MDAgJiYgdHlwZSAhPSA1MDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3ZHQ6IHVua25vd24gY2FyZCB0eXBlICclZCcuXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlOwogCSAgIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmICh3ZHRfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CiAJCXdkdF9zZXRfaGVhcnRiZWF0KFdEX1RJTU8pOwotCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IGhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDAgPCBoZWFydGJlYXQgPCA2NTUzNiwgdXNpbmcgJWRcbiIsCi0JCQlXRF9USU1PKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAiCisJCQkiMCA8IGhlYXJ0YmVhdCA8IDY1NTM2LCB1c2luZyAlZFxuIiwgV0RfVElNTyk7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgOCwgIndkdDUwMXAiKSkgewpAQCAtNjI1LDE1ICs2MjUsMTQgQEAKIAkJZ290byBvdXRpcnE7CiAJfQogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkid2R0OiBjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKLQkJCQkJCQlURU1QX01JTk9SLCByZXQpOwotCQlnb3RvIG91dHJidDsKKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJcmV0ID0gbWlzY19yZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ3ZHQ6IGNhbm5vdCByZWdpc3RlciBtaXNjZGV2ICIKKwkJCQkib24gbWlub3I9JWQgKGVycj0lZClcbiIsIFRFTVBfTUlOT1IsIHJldCk7CisJCQlnb3RvIG91dHJidDsKKwkJfQogCX0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCiAJcmV0ID0gbWlzY19yZWdpc3Rlcigmd2R0X21pc2NkZXYpOwogCWlmIChyZXQpIHsKQEAgLTY0MywyOCArNjQyLDI1IEBACiAJCWdvdG8gb3V0bWlzYzsKIAl9CiAKLQlyZXQgPSAwOwotCXByaW50ayhLRVJOX0lORk8gIldEVDUwMC81MDEtUCBkcml2ZXIgMC4xMCBhdCAweCUwNHggKEludGVycnVwdCAlZCkuIGhlYXJ0YmVhdD0lZCBzZWMgKG5vd2F5b3V0PSVkKVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJXRFQ1MDAvNTAxLVAgZHJpdmVyIDAuMTAgIgorCQkiYXQgMHglMDR4IChJbnRlcnJ1cHQgJWQpLiBoZWFydGJlYXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCiAJCWlvLCBpcnEsIGhlYXJ0YmVhdCwgbm93YXlvdXQpOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBGYW4gVGFjaG9tZXRlciBpcyAlc1xuIiwKKwlpZiAodHlwZSA9PSA1MDEpCisJCXByaW50ayhLRVJOX0lORk8gIndkdDogRmFuIFRhY2hvbWV0ZXIgaXMgJXNcbiIsCiAJCQkJKHRhY2hvbWV0ZXIgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKSk7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KLQotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiAKIG91dG1pc2M6Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQltaXNjX2RlcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7CisJaWYgKHR5cGUgPT0gNTAxKQorCQltaXNjX2RlcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7CiBvdXRyYnQ6Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKIG91dGlycToKIAlmcmVlX2lycShpcnEsIE5VTEwpOwogb3V0cmVnOgogCXJlbGVhc2VfcmVnaW9uKGlvLCA4KTsKLQlnb3RvIG91dDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBtb2R1bGVfaW5pdCh3ZHRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYwppbmRleCA2MGUyOGQ0Li45MGVmNzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHdkdDk3N19zZXRfdGltZW91dChuZXdfdGltZW91dCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXdkdDk3N19rZWVwYWxpdmUoKTsKIAkJLyogRmFsbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCBlYjBkZmRlLi4zMDk2M2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtMjYsOSArMjYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNfYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KICNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KQEAgLTUwLDM2ICs1Miw1NSBAQAogLyogSVJRIDwtPiBJUEkgbWFwcGluZyAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgaXBpX3RvX2lycVtYRU5fTlJfSVBJU10pID0ge1swIC4uLiBYRU5fTlJfSVBJUy0xXSA9IC0xfTsKIAotLyogUGFja2VkIElSUSBpbmZvcm1hdGlvbjogYmluZGluZyB0eXBlLCBzdWItdHlwZSBpbmRleCwgYW5kIGV2ZW50IGNoYW5uZWwuICovCi1zdHJ1Y3QgcGFja2VkX2lycQotewotCXVuc2lnbmVkIHNob3J0IGV2dGNobjsKLQl1bnNpZ25lZCBjaGFyIGluZGV4OwotCXVuc2lnbmVkIGNoYXIgdHlwZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGFja2VkX2lycSBpcnFfaW5mb1tOUl9JUlFTXTsKLQotLyogQmluZGluZyB0eXBlcy4gKi8KLWVudW0gewotCUlSUVRfVU5CT1VORCwKKy8qIEludGVycnVwdCB0eXBlcy4gKi8KK2VudW0geGVuX2lycV90eXBlIHsKKwlJUlFUX1VOQk9VTkQgPSAwLAogCUlSUVRfUElSUSwKIAlJUlFUX1ZJUlEsCiAJSVJRVF9JUEksCiAJSVJRVF9FVlRDSE4KIH07CiAKLS8qIENvbnZlbmllbnQgc2hvcnRoYW5kIGZvciBwYWNrZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5ib3VuZCBJUlEuICovCi0jZGVmaW5lIElSUV9VTkJPVU5ECW1rX2lycV9pbmZvKElSUVRfVU5CT1VORCwgMCwgMCkKKy8qCisgKiBQYWNrZWQgSVJRIGluZm9ybWF0aW9uOgorICogdHlwZSAtIGVudW0geGVuX2lycV90eXBlCisgKiBldmVudCBjaGFubmVsIC0gaXJxLT5ldmVudCBjaGFubmVsIG1hcHBpbmcKKyAqIGNwdSAtIGNwdSB0aGlzIGV2ZW50IGNoYW5uZWwgaXMgYm91bmQgdG8KKyAqIGluZGV4IC0gdHlwZS1zcGVjaWZpYyBpbmZvcm1hdGlvbjoKKyAqICAgIFBJUlEgLSB2ZWN0b3IsIHdpdGggTVNCIGJlaW5nICJuZWVkcyBFSU8iCisgKiAgICBWSVJRIC0gdmlycSBudW1iZXIKKyAqICAgIElQSSAtIElQSSB2ZWN0b3IKKyAqICAgIEVWVENITiAtCisgKi8KK3N0cnVjdCBpcnFfaW5mbworeworCWVudW0geGVuX2lycV90eXBlIHR5cGU7CS8qIHR5cGUgKi8KKwl1bnNpZ25lZCBzaG9ydCBldnRjaG47CS8qIGV2ZW50IGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBzaG9ydCBjcHU7CS8qIGNwdSBib3VuZCAqLworCisJdW5pb24geworCQl1bnNpZ25lZCBzaG9ydCB2aXJxOworCQllbnVtIGlwaV92ZWN0b3IgaXBpOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgc2hvcnQgZ3NpOworCQkJdW5zaWduZWQgc2hvcnQgdmVjdG9yOworCQl9IHBpcnE7CisJfSB1OworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfaW5mbyBpcnFfaW5mb1tOUl9JUlFTXTsKIAogc3RhdGljIGludCBldnRjaG5fdG9faXJxW05SX0VWRU5UX0NIQU5ORUxTXSA9IHsKIAlbMCAuLi4gTlJfRVZFTlRfQ0hBTk5FTFMtMV0gPSAtMQogfTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9ldnRjaG5fbWFza1tOUl9DUFVTXVtOUl9FVkVOVF9DSEFOTkVMUy9CSVRTX1BFUl9MT05HXTsKLXN0YXRpYyB1OCBjcHVfZXZ0Y2huW05SX0VWRU5UX0NIQU5ORUxTXTsKLQotLyogUmVmZXJlbmNlIGNvdW50cyBmb3IgYmluZGluZ3MgdG8gSVJRcy4gKi8KLXN0YXRpYyBpbnQgaXJxX2JpbmRjb3VudFtOUl9JUlFTXTsKK3N0cnVjdCBjcHVfZXZ0Y2huX3MgeworCXVuc2lnbmVkIGxvbmcgYml0c1tOUl9FVkVOVF9DSEFOTkVMUy9CSVRTX1BFUl9MT05HXTsKK307CitzdGF0aWMgc3RydWN0IGNwdV9ldnRjaG5fcyAqY3B1X2V2dGNobl9tYXNrX3A7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmNwdV9ldnRjaG5fbWFzayhpbnQgY3B1KQoreworCXJldHVybiBjcHVfZXZ0Y2huX21hc2tfcFtjcHVdLmJpdHM7Cit9CiAKIC8qIFhlbiB3aWxsIG5ldmVyIGFsbG9jYXRlIHBvcnQgemVybyBmb3IgYW55IHB1cnBvc2UuICovCiAjZGVmaW5lIFZBTElEX0VWVENITihjaG4pCSgoY2huKSAhPSAwKQpAQCAtODcsMjcgKzEwOCwxMDggQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGVuX2R5bmFtaWNfY2hpcDsKIAogLyogQ29uc3RydWN0b3IgZm9yIHBhY2tlZCBJUlEgaW5mb3JtYXRpb24uICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWNrZWRfaXJxIG1rX2lycV9pbmZvKHUzMiB0eXBlLCB1MzIgaW5kZXgsIHUzMiBldnRjaG4pCitzdGF0aWMgc3RydWN0IGlycV9pbmZvIG1rX3VuYm91bmRfaW5mbyh2b2lkKQogewotCXJldHVybiAoc3RydWN0IHBhY2tlZF9pcnEpIHsgZXZ0Y2huLCBpbmRleCwgdHlwZSB9OworCXJldHVybiAoc3RydWN0IGlycV9pbmZvKSB7IC50eXBlID0gSVJRVF9VTkJPVU5EIH07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gbWtfZXZ0Y2huX2luZm8odW5zaWduZWQgc2hvcnQgZXZ0Y2huKQoreworCXJldHVybiAoc3RydWN0IGlycV9pbmZvKSB7IC50eXBlID0gSVJRVF9FVlRDSE4sIC5ldnRjaG4gPSBldnRjaG4sCisJCQkuY3B1ID0gMCB9OworfQorCitzdGF0aWMgc3RydWN0IGlycV9pbmZvIG1rX2lwaV9pbmZvKHVuc2lnbmVkIHNob3J0IGV2dGNobiwgZW51bSBpcGlfdmVjdG9yIGlwaSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcnFfaW5mbykgeyAudHlwZSA9IElSUVRfSVBJLCAuZXZ0Y2huID0gZXZ0Y2huLAorCQkJLmNwdSA9IDAsIC51LmlwaSA9IGlwaSB9OworfQorCitzdGF0aWMgc3RydWN0IGlycV9pbmZvIG1rX3ZpcnFfaW5mbyh1bnNpZ25lZCBzaG9ydCBldnRjaG4sIHVuc2lnbmVkIHNob3J0IHZpcnEpCit7CisJcmV0dXJuIChzdHJ1Y3QgaXJxX2luZm8pIHsgLnR5cGUgPSBJUlFUX1ZJUlEsIC5ldnRjaG4gPSBldnRjaG4sCisJCQkuY3B1ID0gMCwgLnUudmlycSA9IHZpcnEgfTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaW5mbyBta19waXJxX2luZm8odW5zaWduZWQgc2hvcnQgZXZ0Y2huLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBnc2ksIHVuc2lnbmVkIHNob3J0IHZlY3RvcikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcnFfaW5mbykgeyAudHlwZSA9IElSUVRfUElSUSwgLmV2dGNobiA9IGV2dGNobiwKKwkJCS5jcHUgPSAwLCAudS5waXJxID0geyAuZ3NpID0gZ3NpLCAudmVjdG9yID0gdmVjdG9yIH0gfTsKIH0KIAogLyoKICAqIEFjY2Vzc29ycyBmb3IgcGFja2VkIElSUSBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXZ0Y2huX2Zyb21faXJxKGludCBpcnEpCitzdGF0aWMgc3RydWN0IGlycV9pbmZvICppbmZvX2Zvcl9pcnEodW5zaWduZWQgaXJxKQogewotCXJldHVybiBpcnFfaW5mb1tpcnFdLmV2dGNobjsKKwlyZXR1cm4gJmlycV9pbmZvW2lycV07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZGV4X2Zyb21faXJxKGludCBpcnEpCitzdGF0aWMgdW5zaWduZWQgaW50IGV2dGNobl9mcm9tX2lycSh1bnNpZ25lZCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9pbmZvW2lycV0uaW5kZXg7CisJcmV0dXJuIGluZm9fZm9yX2lycShpcnEpLT5ldnRjaG47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHR5cGVfZnJvbV9pcnEoaW50IGlycSkKK3N0YXRpYyBlbnVtIGlwaV92ZWN0b3IgaXBpX2Zyb21faXJxKHVuc2lnbmVkIGlycSkKIHsKLQlyZXR1cm4gaXJxX2luZm9baXJxXS50eXBlOworCXN0cnVjdCBpcnFfaW5mbyAqaW5mbyA9IGluZm9fZm9yX2lycShpcnEpOworCisJQlVHX09OKGluZm8gPT0gTlVMTCk7CisJQlVHX09OKGluZm8tPnR5cGUgIT0gSVJRVF9JUEkpOworCisJcmV0dXJuIGluZm8tPnUuaXBpOworfQorCitzdGF0aWMgdW5zaWduZWQgdmlycV9mcm9tX2lycSh1bnNpZ25lZCBpcnEpCit7CisJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CisKKwlCVUdfT04oaW5mbyA9PSBOVUxMKTsKKwlCVUdfT04oaW5mby0+dHlwZSAhPSBJUlFUX1ZJUlEpOworCisJcmV0dXJuIGluZm8tPnUudmlycTsKK30KKworc3RhdGljIHVuc2lnbmVkIGdzaV9mcm9tX2lycSh1bnNpZ25lZCBpcnEpCit7CisJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CisKKwlCVUdfT04oaW5mbyA9PSBOVUxMKTsKKwlCVUdfT04oaW5mby0+dHlwZSAhPSBJUlFUX1BJUlEpOworCisJcmV0dXJuIGluZm8tPnUucGlycS5nc2k7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB2ZWN0b3JfZnJvbV9pcnEodW5zaWduZWQgaXJxKQoreworCXN0cnVjdCBpcnFfaW5mbyAqaW5mbyA9IGluZm9fZm9yX2lycShpcnEpOworCisJQlVHX09OKGluZm8gPT0gTlVMTCk7CisJQlVHX09OKGluZm8tPnR5cGUgIT0gSVJRVF9QSVJRKTsKKworCXJldHVybiBpbmZvLT51LnBpcnEudmVjdG9yOworfQorCitzdGF0aWMgZW51bSB4ZW5faXJxX3R5cGUgdHlwZV9mcm9tX2lycSh1bnNpZ25lZCBpcnEpCit7CisJcmV0dXJuIGluZm9fZm9yX2lycShpcnEpLT50eXBlOworfQorCitzdGF0aWMgdW5zaWduZWQgY3B1X2Zyb21faXJxKHVuc2lnbmVkIGlycSkKK3sKKwlyZXR1cm4gaW5mb19mb3JfaXJxKGlycSktPmNwdTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjcHVfZnJvbV9ldnRjaG4odW5zaWduZWQgaW50IGV2dGNobikKK3sKKwlpbnQgaXJxID0gZXZ0Y2huX3RvX2lycVtldnRjaG5dOworCXVuc2lnbmVkIHJldCA9IDA7CisKKwlpZiAoaXJxICE9IC0xKQorCQlyZXQgPSBjcHVfZnJvbV9pcnEoaXJxKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhY3RpdmVfZXZ0Y2hucyh1bnNpZ25lZCBpbnQgY3B1LApAQCAtMTE1LDcgKzIxNyw3IEBACiAJCQkJCSAgIHVuc2lnbmVkIGludCBpZHgpCiB7CiAJcmV0dXJuIChzaC0+ZXZ0Y2huX3BlbmRpbmdbaWR4XSAmCi0JCWNwdV9ldnRjaG5fbWFza1tjcHVdW2lkeF0gJgorCQljcHVfZXZ0Y2huX21hc2soY3B1KVtpZHhdICYKIAkJfnNoLT5ldnRjaG5fbWFza1tpZHhdKTsKIH0KIApAQCAtMTI1LDEzICsyMjcsMTMgQEAKIAogCUJVR19PTihpcnEgPT0gLTEpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpcnFfdG9fZGVzYyhpcnEpLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJY3B1bWFza19jb3B5KGlycV90b19kZXNjKGlycSktPmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOwogI2VuZGlmCiAKLQlfX2NsZWFyX2JpdChjaG4sIGNwdV9ldnRjaG5fbWFza1tjcHVfZXZ0Y2huW2Nobl1dKTsKLQlfX3NldF9iaXQoY2huLCBjcHVfZXZ0Y2huX21hc2tbY3B1XSk7CisJX19jbGVhcl9iaXQoY2huLCBjcHVfZXZ0Y2huX21hc2soY3B1X2Zyb21faXJxKGlycSkpKTsKKwlfX3NldF9iaXQoY2huLCBjcHVfZXZ0Y2huX21hc2soY3B1KSk7CiAKLQljcHVfZXZ0Y2huW2Nobl0gPSBjcHU7CisJaXJxX2luZm9baXJxXS5jcHUgPSBjcHU7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfZXZ0Y2huX2NwdV9iaW5kaW5ncyh2b2lkKQpAQCAtMTQyLDE3ICsyNDQsMTEgQEAKIAogCS8qIEJ5IGRlZmF1bHQgYWxsIGV2ZW50IGNoYW5uZWxzIG5vdGlmeSBDUFUjMC4gKi8KIAlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7Ci0JCWRlc2MtPmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoMCk7CisJCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgY3B1bWFza19vZigwKSk7CiAJfQogI2VuZGlmCiAKLQltZW1zZXQoY3B1X2V2dGNobiwgMCwgc2l6ZW9mKGNwdV9ldnRjaG4pKTsKLQltZW1zZXQoY3B1X2V2dGNobl9tYXNrWzBdLCB+MCwgc2l6ZW9mKGNwdV9ldnRjaG5fbWFza1swXSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfZnJvbV9ldnRjaG4odW5zaWduZWQgaW50IGV2dGNobikKLXsKLQlyZXR1cm4gY3B1X2V2dGNobltldnRjaG5dOworCW1lbXNldChjcHVfZXZ0Y2huX21hc2soMCksIH4wLCBzaXplb2YoY3B1X2V2dGNobl9tYXNrKDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ldnRjaG4oaW50IHBvcnQpCkBAIC0yMzIsOSArMzI4LDggQEAKIAlpbnQgaXJxOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAotCS8qIE9ubHkgYWxsb2NhdGUgZnJvbSBkeW5pcnEgcmFuZ2UgKi8KIAlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2lycXM7IGlycSsrKQotCQlpZiAoaXJxX2JpbmRjb3VudFtpcnFdID09IDApCisJCWlmIChpcnFfaW5mb1tpcnFdLnR5cGUgPT0gSVJRVF9VTkJPVU5EKQogCQkJYnJlYWs7CiAKIAlpZiAoaXJxID09IG5yX2lycXMpCkBAIC0yNDQsNiArMzM5LDggQEAKIAlpZiAoV0FSTl9PTihkZXNjID09IE5VTEwpKQogCQlyZXR1cm4gLTE7CiAKKwlkeW5hbWljX2lycV9pbml0KGlycSk7CisKIAlyZXR1cm4gaXJxOwogfQogCkBAIC0yNTgsMTYgKzM1NSwxMyBAQAogCWlmIChpcnEgPT0gLTEpIHsKIAkJaXJxID0gZmluZF91bmJvdW5kX2lycSgpOwogCi0JCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX2R5bmFtaWNfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImV2ZW50Iik7CiAKIAkJZXZ0Y2huX3RvX2lycVtldnRjaG5dID0gaXJxOwotCQlpcnFfaW5mb1tpcnFdID0gbWtfaXJxX2luZm8oSVJRVF9FVlRDSE4sIDAsIGV2dGNobik7CisJCWlycV9pbmZvW2lycV0gPSBta19ldnRjaG5faW5mbyhldnRjaG4pOwogCX0KIAotCWlycV9iaW5kY291bnRbaXJxXSsrOwotCiAJc3Bpbl91bmxvY2soJmlycV9tYXBwaW5nX3VwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBpcnE7CkBAIC0yODIsMTIgKzM3NiwxMiBAQAogCXNwaW5fbG9jaygmaXJxX21hcHBpbmdfdXBkYXRlX2xvY2spOwogCiAJaXJxID0gcGVyX2NwdShpcGlfdG9faXJxLCBjcHUpW2lwaV07CisKIAlpZiAoaXJxID09IC0xKSB7CiAJCWlycSA9IGZpbmRfdW5ib3VuZF9pcnEoKTsKIAkJaWYgKGlycSA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlkeW5hbWljX2lycV9pbml0KGlycSk7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnhlbl9keW5hbWljX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJpcGkiKTsKIApAQCAtMjk4LDE1ICszOTIsMTIgQEAKIAkJZXZ0Y2huID0gYmluZF9pcGkucG9ydDsKIAogCQlldnRjaG5fdG9faXJxW2V2dGNobl0gPSBpcnE7Ci0JCWlycV9pbmZvW2lycV0gPSBta19pcnFfaW5mbyhJUlFUX0lQSSwgaXBpLCBldnRjaG4pOwotCisJCWlycV9pbmZvW2lycV0gPSBta19pcGlfaW5mbyhldnRjaG4sIGlwaSk7CiAJCXBlcl9jcHUoaXBpX3RvX2lycSwgY3B1KVtpcGldID0gaXJxOwogCiAJCWJpbmRfZXZ0Y2huX3RvX2NwdShldnRjaG4sIGNwdSk7CiAJfQogCi0JaXJxX2JpbmRjb3VudFtpcnFdKys7Ci0KICBvdXQ6CiAJc3Bpbl91bmxvY2soJmlycV9tYXBwaW5nX3VwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gaXJxOwpAQCAtMzMyLDIwICs0MjMsMTcgQEAKIAogCQlpcnEgPSBmaW5kX3VuYm91bmRfaXJxKCk7CiAKLQkJZHluYW1pY19pcnFfaW5pdChpcnEpOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fZHluYW1pY19jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAidmlycSIpOwogCiAJCWV2dGNobl90b19pcnFbZXZ0Y2huXSA9IGlycTsKLQkJaXJxX2luZm9baXJxXSA9IG1rX2lycV9pbmZvKElSUVRfVklSUSwgdmlycSwgZXZ0Y2huKTsKKwkJaXJxX2luZm9baXJxXSA9IG1rX3ZpcnFfaW5mbyhldnRjaG4sIHZpcnEpOwogCiAJCXBlcl9jcHUodmlycV90b19pcnEsIGNwdSlbdmlycV0gPSBpcnE7CiAKIAkJYmluZF9ldnRjaG5fdG9fY3B1KGV2dGNobiwgY3B1KTsKIAl9CiAKLQlpcnFfYmluZGNvdW50W2lycV0rKzsKLQogCXNwaW5fdW5sb2NrKCZpcnFfbWFwcGluZ191cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gaXJxOwpAQCAtMzU4LDcgKzQ0Niw3IEBACiAKIAlzcGluX2xvY2soJmlycV9tYXBwaW5nX3VwZGF0ZV9sb2NrKTsKIAotCWlmICgoLS1pcnFfYmluZGNvdW50W2lycV0gPT0gMCkgJiYgVkFMSURfRVZUQ0hOKGV2dGNobikpIHsKKwlpZiAoVkFMSURfRVZUQ0hOKGV2dGNobikpIHsKIAkJY2xvc2UucG9ydCA9IGV2dGNobjsKIAkJaWYgKEhZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcChFVlRDSE5PUF9jbG9zZSwgJmNsb3NlKSAhPSAwKQogCQkJQlVHKCk7CkBAIC0zNjYsMTEgKzQ1NCwxMSBAQAogCQlzd2l0Y2ggKHR5cGVfZnJvbV9pcnEoaXJxKSkgewogCQljYXNlIElSUVRfVklSUToKIAkJCXBlcl9jcHUodmlycV90b19pcnEsIGNwdV9mcm9tX2V2dGNobihldnRjaG4pKQotCQkJCVtpbmRleF9mcm9tX2lycShpcnEpXSA9IC0xOworCQkJCVt2aXJxX2Zyb21faXJxKGlycSldID0gLTE7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFUX0lQSToKIAkJCXBlcl9jcHUoaXBpX3RvX2lycSwgY3B1X2Zyb21fZXZ0Y2huKGV2dGNobikpCi0JCQkJW2luZGV4X2Zyb21faXJxKGlycSldID0gLTE7CisJCQkJW2lwaV9mcm9tX2lycShpcnEpXSA9IC0xOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTM4MCw3ICs0NjgsNyBAQAogCQliaW5kX2V2dGNobl90b19jcHUoZXZ0Y2huLCAwKTsKIAogCQlldnRjaG5fdG9faXJxW2V2dGNobl0gPSAtMTsKLQkJaXJxX2luZm9baXJxXSA9IElSUV9VTkJPVU5EOworCQlpcnFfaW5mb1tpcnFdID0gbWtfdW5ib3VuZF9pbmZvKCk7CiAKIAkJZHluYW1pY19pcnFfY2xlYW51cChpcnEpOwogCX0KQEAgLTQ5OCw4ICs1ODYsOCBAQAogCWZvcihpID0gMDsgaSA8IE5SX0VWRU5UX0NIQU5ORUxTOyBpKyspIHsKIAkJaWYgKHN5bmNfdGVzdF9iaXQoaSwgc2gtPmV2dGNobl9wZW5kaW5nKSkgewogCQkJcHJpbnRrKCIgICVkOiBldmVudCAlZCAtPiBpcnEgJWRcbiIsCi0JCQkJY3B1X2V2dGNobltpXSwgaSwKLQkJCQlldnRjaG5fdG9faXJxW2ldKTsKKwkJCSAgICAgICBjcHVfZnJvbV9ldnRjaG4oaSksIGksCisJCQkgICAgICAgZXZ0Y2huX3RvX2lycVtpXSk7CiAJCX0KIAl9CiAKQEAgLTUwOCw3ICs1OTYsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotCiAvKgogICogU2VhcmNoIHRoZSBDUFVzIHBlbmRpbmcgZXZlbnRzIGJpdG1hc2tzLiAgRm9yIGVhY2ggb25lIGZvdW5kLCBtYXAKICAqIHRoZSBldmVudCBudW1iZXIgdG8gYW4gaXJxLCBhbmQgZmVlZCBpdCBpbnRvIGRvX0lSUSgpIGZvcgpAQCAtNTIxLDExICs2MDgsMTUgQEAKIHZvaWQgeGVuX2V2dGNobl9kb191cGNhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJc3RydWN0IHNoYXJlZF9pbmZvICpzID0gSFlQRVJWSVNPUl9zaGFyZWRfaW5mbzsKIAlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBfX2dldF9jcHVfdmFyKHhlbl92Y3B1KTsKIAlzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIG5lc3RpbmdfY291bnQpOwogIAl1bnNpZ25lZCBjb3VudDsKIAorCWV4aXRfaWRsZSgpOworCWlycV9lbnRlcigpOworCiAJZG8gewogCQl1bnNpZ25lZCBsb25nIHBlbmRpbmdfd29yZHM7CiAKQEAgLTU1MCw3ICs2NDEsNyBAQAogCQkJCWludCBpcnEgPSBldnRjaG5fdG9faXJxW3BvcnRdOwogCiAJCQkJaWYgKGlycSAhPSAtMSkKLQkJCQkJeGVuX2RvX0lSUShpcnEsIHJlZ3MpOworCQkJCQloYW5kbGVfaXJxKGlycSwgcmVncyk7CiAJCQl9CiAJCX0KIApAQCAtNTYxLDEyICs2NTIsMTcgQEAKIAl9IHdoaWxlKGNvdW50ICE9IDEpOwogCiBvdXQ6CisJaXJxX2V4aXQoKTsKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworCiAJcHV0X2NwdSgpOwogfQogCiAvKiBSZWJpbmQgYSBuZXcgZXZlbnQgY2hhbm5lbCB0byBhbiBleGlzdGluZyBpcnEuICovCiB2b2lkIHJlYmluZF9ldnRjaG5faXJxKGludCBldnRjaG4sIGludCBpcnEpCiB7CisJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CisKIAkvKiBNYWtlIHN1cmUgdGhlIGlycSBpcyBtYXNrZWQsIHNpbmNlIHRoZSBuZXcgZXZlbnQgY2hhbm5lbAogCSAgIHdpbGwgYWxzbyBiZSBtYXNrZWQuICovCiAJZGlzYWJsZV9pcnEoaXJxKTsKQEAgLTU3NiwxMSArNjcyLDExIEBACiAJLyogQWZ0ZXIgcmVzdW1lIHRoZSBpcnE8LT5ldnRjaG4gbWFwcGluZ3MgYXJlIGFsbCBjbGVhcmVkIG91dCAqLwogCUJVR19PTihldnRjaG5fdG9faXJxW2V2dGNobl0gIT0gLTEpOwogCS8qIEV4cGVjdCBpcnEgdG8gaGF2ZSBiZWVuIGJvdW5kIGJlZm9yZSwKLQkgICBzbyB0aGUgYmluZGNvdW50IHNob3VsZCBiZSBub24tMCAqLwotCUJVR19PTihpcnFfYmluZGNvdW50W2lycV0gPT0gMCk7CisJICAgc28gdGhlcmUgc2hvdWxkIGJlIGEgcHJvcGVyIHR5cGUgKi8KKwlCVUdfT04oaW5mby0+dHlwZSA9PSBJUlFUX1VOQk9VTkQpOwogCiAJZXZ0Y2huX3RvX2lycVtldnRjaG5dID0gaXJxOwotCWlycV9pbmZvW2lycV0gPSBta19pcnFfaW5mbyhJUlFUX0VWVENITiwgMCwgZXZ0Y2huKTsKKwlpcnFfaW5mb1tpcnFdID0gbWtfZXZ0Y2huX2luZm8oZXZ0Y2huKTsKIAogCXNwaW5fdW5sb2NrKCZpcnFfbWFwcGluZ191cGRhdGVfbG9jayk7CiAKQEAgLTY5MCw4ICs3ODYsNyBAQAogCQlpZiAoKGlycSA9IHBlcl9jcHUodmlycV90b19pcnEsIGNwdSlbdmlycV0pID09IC0xKQogCQkJY29udGludWU7CiAKLQkJQlVHX09OKGlycV9pbmZvW2lycV0udHlwZSAhPSBJUlFUX1ZJUlEpOwotCQlCVUdfT04oaXJxX2luZm9baXJxXS5pbmRleCAhPSB2aXJxKTsKKwkJQlVHX09OKHZpcnFfZnJvbV9pcnEoaXJxKSAhPSB2aXJxKTsKIAogCQkvKiBHZXQgYSBuZXcgYmluZGluZyBmcm9tIFhlbi4gKi8KIAkJYmluZF92aXJxLnZpcnEgPSB2aXJxOwpAQCAtNzAzLDcgKzc5OCw3IEBACiAKIAkJLyogUmVjb3JkIHRoZSBuZXcgbWFwcGluZy4gKi8KIAkJZXZ0Y2huX3RvX2lycVtldnRjaG5dID0gaXJxOwotCQlpcnFfaW5mb1tpcnFdID0gbWtfaXJxX2luZm8oSVJRVF9WSVJRLCB2aXJxLCBldnRjaG4pOworCQlpcnFfaW5mb1tpcnFdID0gbWtfdmlycV9pbmZvKGV2dGNobiwgdmlycSk7CiAJCWJpbmRfZXZ0Y2huX3RvX2NwdShldnRjaG4sIGNwdSk7CiAKIAkJLyogUmVhZHkgZm9yIHVzZS4gKi8KQEAgLTcyMCw4ICs4MTUsNyBAQAogCQlpZiAoKGlycSA9IHBlcl9jcHUoaXBpX3RvX2lycSwgY3B1KVtpcGldKSA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCi0JCUJVR19PTihpcnFfaW5mb1tpcnFdLnR5cGUgIT0gSVJRVF9JUEkpOwotCQlCVUdfT04oaXJxX2luZm9baXJxXS5pbmRleCAhPSBpcGkpOworCQlCVUdfT04oaXBpX2Zyb21faXJxKGlycSkgIT0gaXBpKTsKIAogCQkvKiBHZXQgYSBuZXcgYmluZGluZyBmcm9tIFhlbi4gKi8KIAkJYmluZF9pcGkudmNwdSA9IGNwdTsKQEAgLTczMiw3ICs4MjYsNyBAQAogCiAJCS8qIFJlY29yZCB0aGUgbmV3IG1hcHBpbmcuICovCiAJCWV2dGNobl90b19pcnFbZXZ0Y2huXSA9IGlycTsKLQkJaXJxX2luZm9baXJxXSA9IG1rX2lycV9pbmZvKElSUVRfSVBJLCBpcGksIGV2dGNobik7CisJCWlycV9pbmZvW2lycV0gPSBta19pcGlfaW5mbyhldnRjaG4sIGlwaSk7CiAJCWJpbmRfZXZ0Y2huX3RvX2NwdShldnRjaG4sIGNwdSk7CiAKIAkJLyogUmVhZHkgZm9yIHVzZS4gKi8KQEAgLTgxMiw4ICs5MDYsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4ZW5fZHluYW1pY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gInhlbi1keW4iLAorCisJLmRpc2FibGUJPSBkaXNhYmxlX2R5bmlycSwKIAkubWFzawkJPSBkaXNhYmxlX2R5bmlycSwKIAkudW5tYXNrCQk9IGVuYWJsZV9keW5pcnEsCisKIAkuYWNrCQk9IGFja19keW5pcnEsCiAJLnNldF9hZmZpbml0eQk9IHNldF9hZmZpbml0eV9pcnEsCiAJLnJldHJpZ2dlcgk9IHJldHJpZ2dlcl9keW5pcnEsCkBAIC04MjIsNiArOTE5LDEwIEBACiB2b2lkIF9faW5pdCB4ZW5faW5pdF9JUlEodm9pZCkKIHsKIAlpbnQgaTsKKwlzaXplX3Qgc2l6ZSA9IG5yX2NwdV9pZHMgKiBzaXplb2Yoc3RydWN0IGNwdV9ldnRjaG5fcyk7CisKKwljcHVfZXZ0Y2huX21hc2tfcCA9IGFsbG9jX2Jvb3RtZW0oc2l6ZSk7CisJQlVHX09OKGNwdV9ldnRjaG5fbWFza19wID09IE5VTEwpOwogCiAJaW5pdF9ldnRjaG5fY3B1X2JpbmRpbmdzKCk7CiAKQEAgLTgyOSw5ICs5MzAsNSBAQAogCWZvciAoaSA9IDA7IGkgPCBOUl9FVkVOVF9DSEFOTkVMUzsgaSsrKQogCQltYXNrX2V2dGNobihpKTsKIAotCS8qIER5bmFtaWMgSVJRIHNwYWNlIGlzIGN1cnJlbnRseSB1bmJvdW5kLiBaZXJvIHRoZSByZWZjbnRzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspCi0JCWlycV9iaW5kY291bnRbaV0gPSAwOwotCiAJaXJxX2N0eF9pbml0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCmluZGV4IDU2ODkyYTEuLjNjY2QzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL21hbmFnZS5jCisrKyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkvKiBYWFggdXNlIG5vcm1hbCBkZXZpY2UgdHJlZT8gKi8KIAl4ZW5idXNfc3VzcGVuZCgpOwogCi0JZXJyID0gc3RvcF9tYWNoaW5lKHhlbl9zdXNwZW5kLCAmY2FuY2VsbGVkLCAmY3B1bWFza19vZl9jcHUoMCkpOworCWVyciA9IHN0b3BfbWFjaGluZSh4ZW5fc3VzcGVuZCwgJmNhbmNlbGxlZCwgY3B1bWFza19vZigwKSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzdGFydCB4ZW5fc3VzcGVuZDogJWRcbiIsIGVycik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy96b3Jyby96b3Jyby5jIGIvZHJpdmVycy96b3Jyby96b3Jyby5jCmluZGV4IGExNTg1ZDYuLmQ0NWZiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vem9ycm8uYworKysgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgWm9ycm8gYnVzICovCiAgICAgSU5JVF9MSVNUX0hFQUQoJnpvcnJvX2J1cy5kZXZpY2VzKTsKLSAgICBzdHJjcHkoem9ycm9fYnVzLmRldi5idXNfaWQsICJ6b3JybyIpOworICAgIGRldl9zZXRfbmFtZSgmem9ycm9fYnVzLmRldiwgInpvcnJvIik7CiAgICAgZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJnpvcnJvX2J1cy5kZXYpOwogICAgIGlmIChlcnJvcikgewogCXByX2VycigiWm9ycm86IEVycm9yIHJlZ2lzdGVyaW5nIHpvcnJvX2J1c1xuIik7CkBAIC0xNjcsNyArMTY3LDcgQEAKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSh6b3Jyb19maW5kX3BhcmVudF9yZXNvdXJjZSh6KSwgJnotPnJlc291cmNlKSkKIAkgICAgcHJfZXJyKCJab3JybzogQWRkcmVzcyBzcGFjZSBjb2xsaXNpb24gb24gZGV2aWNlICVzICVwUlxuIiwKIAkJICAgei0+bmFtZSwgJnotPnJlc291cmNlKTsKLQlzcHJpbnRmKHotPmRldi5idXNfaWQsICIlMDJ4IiwgaSk7CisJZGV2X3NldF9uYW1lKCZ6LT5kZXYsICIlMDJ4IiwgaSk7CiAJei0+ZGV2LnBhcmVudCA9ICZ6b3Jyb19idXMuZGV2OwogCXotPmRldi5idXMgPSAmem9ycm9fYnVzX3R5cGU7CiAJZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJnotPmRldik7CmRpZmYgLS1naXQgYS9maXJtd2FyZS8zY29tL3R5cGhvb24uYmluLmloZXggYi9maXJtd2FyZS8zY29tL3R5cGhvb24uYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhODNiZQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlLzNjb20vdHlwaG9vbi5iaW4uaWhleApAQCAtMCwwICsxLDI4MTkgQEAKKzoxMDAwMDAwMDU0NTk1MDQ4NEY0RjRFMDAwMjAwMDAwMDA5MDAwMDAwQjQKKzoxMDAwMTAwMDAwMDBGRkZGQ0I5OUIxRDQ0Q0I4RDA0QjMyMDJENEVFRTQKKzoxMDAwMjAwMDczN0UwQjEzOUJDMEFFRjQ0MDAxMDAwMEU4RkMwMDAwOUYKKzoxMDAwMzAwMDAwMDBGRkZGMzkwMDAwRUEwNTAwMDBFQTA0MDAwMEVBQzIKKzoxMDAwNDAwMDAzMDAwMEVBMDIwMDAwRUEwMTAwMDBFQTMyMDIwMEVBQ0UKKzoxMDAwNTAwMEM1MTQwMEVBMDcwMDJERTkwRTAwQTBFMTAwMTAwRkUxMzEKKzoxMDAwNjAwMEQwMjA5RkU1MTJGRjJGRTFGRUZGRkZFQTAxMDA4MEUwQjQKKzoxMDAwNzAwMDA0MjA4MUU0MDEwMDUwRTFGQ0ZGRkYxQTBFRjBBMEUxMzIKKzoxMDAwODAwMDAwQTBBMEUxMEVCMEEwRTEwMDAwQTBFM0E4MTA5RkU1NTEKKzoxMDAwOTAwMDAwMDA4MUU1QTQxMDlGRTUwMDAwODFFNTAxMTZBMEUzQzIKKzoxMDAwQTAwMDAwMDA5MUU1MDEwMDgwRTMwMDAwODFFNUQ3MDBBMEUzQjYKKzoxMDAwQjAwMDAwRjAyMUUxODhEMDlGRTVEQjAwQTBFMzAwRjAyMUUxMjIKKzoxMDAwQzAwMDdDRDA5RkU1RDIwMEEwRTMwMEYwMjFFMTc0RDA5RkU1NTEKKzoxMDAwRDAwMEQxMDBBMEUzMDBGMDIxRTE2Q0QwOUZFNTlCMTQwMEVCODAKKzoxMDAwRTAwMEQzMDBBMEUzMDBGMDIxRTE2MEQwOUZFNTYwMDA5RkU1MzAKKzoxMDAwRjAwMDYwMTA5RkU1NjAyMDlGRTVEQkZGRkZFQjVDMDA5RkU1NjQKKzoxMDAxMDAwMDVDMTA5RkU1MDAyMEEwRTNEN0ZGRkZFQjU0MDA5RkU1QzQKKzoxMDAxMTAwMDU0MTA5RkU1RDRGRkZGRUIwQTAwQTBFMTBCRjBBMEUxMzMKKzoxMDAxMjAwMEQzMTBBMEUzMDFGMDIxRTFENEZGRkZFQjNDQTA5RkU1NTkKKzoxMDAxMzAwMDFBRkYyRkUxQzZGRkZGRUExNTIxRkZGRjBDMDAxMDAwOTgKKzoxMDAxNDAwMDFDMDAxMDAwM0MzODAwODBGQzM3MDA4MEZDM0YwMDgwMjEKKzoxMDAxNTAwMDdDMzQwMDgwODAwRjAwMDA4MDMwMDA4MEFEREVBRERFOUEKKzoxMDAxNjAwMEIwQkIwMDAwMjRBQjIwNDA0ODI5MDAwMDI4MDUwMDgwRDcKKzoxMDAxNzAwMEJEQkEyMTQwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwQTkKKzoxMDAxODAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMDU4NTcwMDAwQzIKKzoxMDAxOTAwMDg2NEIwMDAwNjAwMUZGRkZCMEI1MDcxQzEyNEQwMDI0MjQKKzoxMDAxQTAwMDI4NjgwMDI4MUVEMDM4MUMxMDQ5MDRGMDdCRkQyOTY4RkYKKzoxMDAxQjAwMEMwNDYwODYwMDAyODE1RDAzODAxMEQ0OTQwMTgxOTIzQTEKKzoxMDAxQzAwMERCMDFDMDE4NDE2QjgwMjkwQ0QyMDEzMTQxNjMyODY4RTIKKzoxMDAxRDAwMEMxNjlDMDQ2Mjk2MDM5MDc0MTYwMDQ2MkM3NjJCMEJDOEEKKzoxMDAxRTAwMDA4QkMxODQ3MjAxQ0ZBRTdFODE3MDA4MEVFMDUwMDAwNUQKKzoxMDAxRjAwMEEwMUMwMDgwMDI0OTBBNjhDMDQ2QzI2MTA4NjA3MDQ3QkUKKzoxMDAyMDAwMEU4MTcwMDgwNzA0NzAwMDA3MDQ3MDAwMDcwNDcwMDAwNEEKKzoxMDAyMTAwMDAwMDAwRkUxMDAxMEEwRTFDMDEwODFFMzAxRjAyMUUxMzYKKzoxMDAyMjAwMDFFRkYyRkUxMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxOTIKKzoxMDAyMzAwMEMwMDA4MEUzMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxOEMKKzoxMDAyNDAwMEMwMDBDMEUzMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxM0MKKzoxMDAyNTAwMDQwMDA4MEUzMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxRUMKKzoxMDAyNjAwMDgwMDAxMEUzODAwMDgwRTMwMEYwMjFFMTAwMDAwMDEyMzQKKzoxMDAyNzAwMDFFRkYyRkUxMDAwMDUwRTMwMDAwMEZFMTgwMDBDMDEzREIKKzoxMDAyODAwMDAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMTgwMDBDMEUzM0MKKzoxMDAyOTAwMDAwRjAyMUUxMUVGRjJGRTE5MTAwMDBFMDFFRkYyRkUxQTEKKzoxMDAyQTAwMDAxMjA4MEUwMDEwMDgwRTAxRUZGMkZFMTgwQjUwODRGQjMKKzoxMDAyQjAwMDY0MjgwNEQzNjQyMDM4NjMwMDIwQzA0MzAzRTAzODYzMUIKKzoxMDAyQzAwMDA0NDkwNUYwMDFGQjc4NjNCODYzODBCQzA4QkMxODQ3OUIKKzoxMDAyRDAwMDY4MEUwMDgwODgxMzAwMDA4MEI0MTA0QjAwMjIxRjZCNTIKKzoxMDAyRTAwMDY0MkYwM0QyMDk2ODA5Njg0OTA4MDJEMjEwMUM4MEJDMzcKKzoxMDAyRjAwMDcwNDcxOTFDREI2QjRGNkJCQjQyMDVEMjQwNjgwMDA0OTIKKzoxMDAzMDAwMDAwMEMxODE4Qzg2M0YxRTc0MTY4MDU0QjE5NDM0MTYwQjgKKzoxMDAzMTAwMDA0NDhDMTZCMDEzMUMxNjMwMjIwRThFNzY4MEUwMDgwMjgKKzoxMDAzMjAwMDAwMDAwMDgwMEMyQjAwODA5MEI1MDcxQzE1NEMwMDIwQUQKKzoxMDAzMzAwMDIxNkI2NDI5MEJEMkI5NkU0OTA4MDhEMzIxNkNBMjZCREEKKzoxMDAzNDAwMDkxNDIwN0QyRkExRDM5MzI1MjhCODkxODIxNjQ5MEJDMzAKKzoxMDAzNTAwMDA4QkMxODQ3Nzg2QTM5NkJDMDQ2NDg2MjM4NkIwMkYwQUYKKzoxMDAzNjAwMDJERkUzODFDMDJGMEU4RkEwMTIwQkIyMzFCMDFFMTE4MjYKKzoxMDAzNzAwMEM4NzMwNTQ5MEE2QzEyMTgwQTY0MDQ0OThBNkQxMjE4NzgKKzoxMDAzODAwMDhBNjVFNEU3NjgwRTAwODAwQzJCMDA4MEE0MkEwMDgwQjgKKzoxMDAzOTAwMDgwQjQwQTQ4QzA2RDAyMjMxODQwMDk0QTAwMjEwMDI4OTEKKzoxMDAzQTAwMDAzRDBEMTYzMTE2NDgwQkM3MDQ3MDY0ODA3Njg3QjFDOEEKKzoxMDAzQjAwMDAzNjAwQTJGRjdEMzAxNjBGM0U3MDAwMEE0MkEwMDgwNEUKKzoxMDAzQzAwMDY4MEUwMDgwRTAwMTAwODA3MDQ3MDIwNDEyMEMwMDBDRUYKKzoxMDAzRDAwMDEwMTgwQTA0MTIwQzA5MEM1MTE4MDgxODAxMEMwNUQwNDkKKzoxMDAzRTAwMDAxMDQwOTBDMDAwQzA4MTgwMTBDRjlEMTAwMDQwMDBDRTAKKzoxMDAzRjAwMDcwNDc4MEI0MDAyMjAwMjkxOEQwNEYwODdCMUUwMDJGQzAKKzoxMDA0MDAwMDA2RDAwNzg4QkExODAyMzAxRjFDMDEzQjAwMkZGOEQxMTQKKzoxMDA0MTAwMDQ5MDgwM0QzMDA4ODAwMDYwMDBFODIxODEwMEMwNUQwOEUKKzoxMDA0MjAwMDEwMDQwMDBDMTEwQzQyMTgxMDBDRjlEMTEwMDQwMDBDMkYKKzoxMDA0MzAwMDgwQkM3MDQ3ODBCNTgzODlDNzg5RkIxODA3OEFGQjE4ODEKKzoxMDA0NDAwMDQ3OEFGQjE4NDA3QTAwMDJDNzE4MzgwQzA1RDAzODA0RDgKKzoxMDA0NTAwMDAwMEMzQjBDQzcxODM4MENGOUQxMDgxQzExMUNGRkY3MTUKKzoxMDA0NjAwMEM4RkYwMTFDMzgxQ0ZGRjdCMEZGODBCQzA4QkMxODQ3NTAKKzoxMDA0NzAwMDkwQjUwMjIzODI2ODFBNDAwMDI3MDAyQTBGRDAwQTRBNEEKKzoxMDA0ODAwMDkzNjkwMTMzOTM2MTBBNjg4QjY4OUExODAwNjgxQzE4OTUKKzoxMDA0OTAwMDU3ODEwOTY5MTAxQ0ZGRjdBQ0ZGQzA0MzYwODEzODFDMEQKKzoxMDA0QTAwMDkwQkMwOEJDMTg0NzAwMDAwQzJCMDA4MDkwQjUwNDIzQkEKKzoxMDA0QjAwMDgyNjgxQTQwMDAyNzAwMkExMUQwNEE2ODUyMDkwRUQzRDgKKzoxMDA0QzAwMDA5NEExMzZBMDEzMzEzNjJDQjY4MDI2ODlDMTgwMTIzM0UKKzoxMDA0RDAwMDlCMDcwODNBMUE0MzEyNjgwMEYwMkVGODIwODIzODFDNTUKKzoxMDA0RTAwMDkwQkMwOEJDMTg0NzAwMDAwQzJCMDA4MDkwQjU4MDIzRkUKKzoxMDA0RjAwMDgyNjgxQTQwMDAyNDAwMkExNUQwNEE2ODkyMDkxMkQzNTMKKzoxMDA1MDAwMDBCNEFEMzY5MDEzM0QzNjFDQjY4MDI2ODlGMTgwMTIzN0EKKzoxMDA1MTAwMDlCMDcwODNBMUE0MzEyNjgwMEYwMEVGODAwMjgwMEQxMzEKKzoxMDA1MjAwMDA0NDhDMDQ2Rjg4MDIwMUM5MEJDMDhCQzE4NDcwMDAwNTYKKzoxMDA1MzAwMDBDMkIwMDgwRkZGRjAwMDBCMEI1MTQxQzA1MUMwRjFDMjUKKzoxMDA1NDAwMDM4NjlCOTY4NDExODM4NjhGRkY3NTNGRkMwNDMwMTA0QTAKKzoxMDA1NTAwMDA5MEMyMDFDRkZGNzM5RkYwNDFDQjg2ODc5Njk0MDE4QTIKKzoxMDA1NjAwMDY5Njg4ODQyMENEMjJBNjgxMjE4MDkxQTEwMUMwMEYwMTcKKzoxMDA1NzAwMDA1RjlDMDQzMDEwNDA5MEMyMDFDRkZGNzI2RkYwNDFDRTkKKzoxMDA1ODAwMEUwNDMwMDA0MDAwQ0IwQkMwOEJDMTg0NzgwQjUwNzFDNTEKKzoxMDA1OTAwMEI4NkJDMDA4MUFEM0I4NkFGOTZCNDAxODc5NkMwMEYwRDAKKzoxMDA1QTAwMEVERjhDMDQzMDEwNDA5MEMwQTQ4MDdEMDIwMjNCOTY5QkIKKzoxMDA1QjAwMDE5NDNCOTYxMDE2QjAxMzEwMTYzMDdFMEZGMjMwMTMzODYKKzoxMDA1QzAwMEI5NjkxOTQzQjk2MTQxNkEwMTMxNDE2MjAwMjA4MEJDQjcKKzoxMDA1RDAwMDA4QkMxODQ3MEMyQjAwODA4MEI1MDcxQ0I4NkI0MTA5N0MKKzoxMDA1RTAwMDFDRDNDMDA4MUFEM0Y4MUQzOTMwMDA3QjA2MjgxNUQxNUEKKzoxMDA1RjAwMDM4MUMwMEYwNTNGODAxMUMwQTQ4MDdEMDQwMjNCOTY5QTEKKzoxMDA2MDAwMDE5NDNCOTYxODE2QjAxMzE4MTYzMDdFMDAxMjM5QjAyQ0EKKzoxMDA2MTAwMEI5NjkxOTQzQjk2MUMxNkEwMTMxQzE2MjAwMjA4MEJDNjYKKzoxMDA2MjAwMDA4QkMxODQ3MEMyQjAwODBCMEI1MDcxQ0I4NkI4MTA5QkIKKzoxMDA2MzAwMDJDRDNDMDA4MkFEM0Y4MUQzOTMwMDA3QjExMjgyNUQxQ0UKKzoxMDA2NDAwMEI4NkEzOTZDNDAxODAxMjM5QjA3MDYzMDE4NDMwMDY4Q0MKKzoxMDA2NTAwMDA1MDQyRDBDMEY0QzExRDAzODFDMDBGMDFGRjgwMDI4OTkKKzoxMDA2NjAwMDBDRDBBODQyMDJEMTBDNEI5ODQyMDdEMDgwMjNCODY5MjUKKzoxMDA2NzAwMDE4NDNCODYxNjA2QjAxMzA2MDYzMDdFMDAxMjM1QjAyREYKKzoxMDA2ODAwMEI4NjkxODQzQjg2MUEwNkEwMTMwQTA2MjAwMjBCMEJDMEMKKzoxMDA2OTAwMDA4QkMxODQ3MEMyQjAwODBGRkZGMDAwMEYwQjVGRkIwMkUKKzoxMDA2QTAwMDk5QjAwNDFDRTA2QjYxNkMwOTE4MDNBQTg1MThBMzZBNTEKKzoxMDA2QjAwMDAwMjA4QTA4MDEzMjk3OTIwN0QwODIwMDlGNTgwM0FFMkIKKzoxMDA2QzAwMEI3NTA5NzlBMDEzMDgyNDJGN0Q4NjA2QTAxMjM5QjA3OUUKKzoxMDA2RDAwMDA0MzAxODQzMDA2OEMwNDYwMjkwMDJBRjNGODgwM0E4NjgKKzoxMDA2RTAwMEZGRjc4N0ZFQzA0MzAxMDQwOTBDMzgxQ0ZGRjc2REZFQkQKKzoxMDA2RjAwMDA3MUNFMDZCQTE2QzQwMTg2MTZBMDEyMzlCMDcwODMxNUQKKzoxMDA3MDAwMDE5NDMwOTY4QzA0NjAxOTEwMUE5MDk4ODAxMzE4ODQyNEQKKzoxMDA3MTAwMDBDRDJBMjZBMTIxODA5MUExMDFDMDBGMDJGRjhDMDQzNUMKKzoxMDA3MjAwMDAxMDQwOTBDMzgxQ0ZGRjc1MEZFMDcxQ0E4ODlFOTg5NTEKKzoxMDA3MzAwMDA4MTgyOThBMDgxODY5OEEwODE4Njk3QTA5MDIwODE4QTUKKzoxMDA3NDAwMEExNkM2MjZDODkxQTBBMDQxMjBDMTEwMjEyMEExMTQzN0MKKzoxMDA3NTAwMDA5MDQwOTBDMDkxODA4MEMwNUQwMDgwNDAwMEMwOTBDNDAKKzoxMDA3NjAwMDQxMTgwODBDRjlEMTM4MUNGRkY3MkZGRUMwNDMwMDA0RDQKKzoxMDA3NzAwMDAwMEM3RkIwMTlCMEYwQkMwOEJDMTg0N0IwQjQwMDIyMjAKKzoxMDA3ODAwMDAwMjkyRUQwODMwNzlCMEZEQzAwNDcxODA0MjVFRjFCQTAKKzoxMDA3OTAwMEJGMDdCRjBGRkYwMDgwMDg4MDAwNTkxODAzMzE4OTA4ODgKKzoxMDA3QTAwMDREMUUwMkM4RTE0MEExNDA2QjFFMDAyRDA5RDAwQzA0NzMKKzoxMDA3QjAwMDI0MENBMjE4MDkwQzhBMTgwMkM4MUMxQzAxM0IwMDJDMkUKKzoxMDA3QzAwMEY1RDFCOTQwMDgxQ0Y4NDAwMTA0MDkwQzg5MTgwMDBDNDcKKzoxMDA3RDAwMDQyMTgxMDBDMDVEMDEwMDQwMDBDMTEwQzQyMTgxMDBDMUIKKzoxMDA3RTAwMEY5RDExMDA0MDAwQ0IwQkM3MDQ3MDAwMDkwQjQwMDIwOTgKKzoxMDA3RjAwMDAxMjcxMTQ5NDIwMDEyMThEMjAwNTMxODlDNjgwMTIzQTYKKzoxMDA4MDAwMDlCMDcyMzQzMUI2ODFCMDMxQjBCOEE1ODEyMDMxMjBCMDUKKzoxMDA4MTAwMDkzNDIwQ0QxMDEzMDA0MjhFQ0QzMDg0OEMwNkEwMTAzOEMKKzoxMDA4MjAwMDA5MEIwNzQ4MDA2RjAwMDMwMDBCODE0MjAyRDAzODFDRkYKKzoxMDA4MzAwMDkwQkM3MDQ3MDAyMEZCRTdBODAzMDA4MDAwNDAxNDQwRjQKKzoxMDA4NDAwMDY4MEUwMDgwOThCNDE0NEFDMDQ2MDA5MjgzMDAxMzQ4OTIKKzoxMDA4NTAwMEMwNTgwNzAzM0YwQjEyNDhDMDU4MDIwMzEyMEIxMTQ4M0YKKzoxMDA4NjAwMEMwNTgwMDAzMDAwQjEwNENFNDU4MDEyMzlCMDcyMzQzOUUKKzoxMDA4NzAwMDFCNjg5QjAwQ0MwMDAxMjE5ODQyMDFEMTA4MUMwOUUwQjMKKzoxMDA4ODAwMDk4NDIwM0Q5MTAxQURBMUI4MDE4MDBFMDE4MUE4NDQyMjMKKzoxMDA4OTAwMEY0RDMwMDIwOThCQzcwNDc1NTU1NTU1NTIwMDQwMDgwNkUKKzoxMDA4QTAwMDI4MDQwMDgwMDgwNDAwODAxODA0MDA4MDgwQjQxMzA0MjkKKzoxMDA4QjAwMDAwRDAwMTNBODAwMDBCMUMxMzQ5MEY1OEMwNDYzQjYwMjIKKzoxMDA4QzAwMDBCNThDMDQ2NUE2MDBBNTgwODMyMTA0QjFCNTg5QTQyQkYKKzoxMDA4RDAwMDAxRDMwRjRBMTI1ODBGNEIxRjU4MDEyMzlCMDczQjQzNkMKKzoxMDA4RTAwMDFCNjg5QjAwMTcwMzNGMEI5RjQyMDZEMTBBNDhDMTY4NTMKKzoxMDA4RjAwMDAxMzFDMTYwMDEyMDgwQkM3MDQ3MDg0QjFCNThDMDQ2QzUKKzoxMDA5MDAwMDFBNjAwQTUwMDAyMEY2RTcwODA0MDA4MDI4MDQwMDgwREUKKzoxMDA5MTAwMDIwMDQwMDgwMTgwNDAwODBBMDgyMjA0MDEwMDQwMDgwODEKKzoxMDA5MjAwMEZGNUYyREU5NDhGRUZGRUIwMUI2QTBFMzAxQjE4QkUyQ0EKKzoxMDA5MzAwMDAyOEFBMEUzMDE3QUEwRTMwMUE5QTBFMzAxNTZBMEUzQTMKKzoxMDA5NDAwMEM4NjA5RkU1Qzg5MDlGRTUxNDQwOUJFNTAwMDA1NEUzMTQKKzoxMDA5NTAwMDJDMDAwMDBBMDMwQTE0RTMxMTAwMDAwQTBDMDA5NkU1QkIKKzoxMDA5NjAwMDAwMDA1MEUzMjEwMDAwMEEwMTBBMTRFMzA1MDAwMDBBMTgKKzoxMDA5NzAwMDFDMDA5NkU1MDEwQUMwRTMxQzAwODZFNTFDMDA4NUU1MjUKKzoxMDA5ODAwMDE0NzA4NUU1MDYwMDAwRUEwMjBBMTRFMzA0MDAwMDBBNzgKKzoxMDA5OTAwMDFDMDA5NkU1MDIwQUMwRTMxQzAwODZFNTFDMDA4NUU1MDQKKzoxMDA5QTAwMDE0ODA4NUU1MDEwOTE0RTMwNDAwMDAwQTFDMDA5NkU1QTMKKzoxMDA5QjAwMDAxMDlDMEUzMUMwMDg2RTUxQzAwODVFNTE0QTA4NUU1NUYKKzoxMDA5QzAwMDAyMDAxNEUzNDAwMDAwMUIwMTAwMTRFMzU0MDAwMDFCNkMKKzoxMDA5RDAwMDAyMEIxNEUzNjcwMDAwMUIwMTBCMTRFMzIwMDAwMDFCNTMKKzoxMDA5RTAwMDE4MDA5OUU1MDEwMDgwRTIxODAwODlFNUQ1RkZGRkVBQ0IKKzoxMDA5RjAwMDFDMDA5NkU1MDEwQUMwRTMxQzAwODZFNTFDMDA4NUU1QTUKKzoxMDBBMDAwMDE0NzA4NUU1RTFGRkZGRUFGRjVGQkRFODA0RjA1RUUyRjgKKzoxMDBBMTAwMDY4MEUwMDgwMDg4MzIwNDAxMDEwMUZFNTE0MzA5MUU1MTcKKzoxMDBBMjAwMDAwMjBDM0UxMTQyMDgxRTUwMTE2QTBFMzBDMjA4MUU1M0MKKzoxMDBBMzAwMDBCMTJBMEUzMDAwMDgxRTUxODEwOUZFNUIwMjREMUUxN0UKKzoxMDBBNDAwMDAxMjA4MkUyQjAyNEMxRTEzQzIwOTFFNTAwMDA4MkUxNzYKKzoxMDBBNTAwMDNDMDA4MUU1MUVGRjJGRTFBMDgyMjA0MEZGRkZGRkVBNUUKKzoxMDBBNjAwMEZFRkZGRkVBMDEwQkEwRTMwMTE2QTBFMzE0MDA4MUU1RkQKKzoxMDBBNzAwMDAwMUE4MUUxMjQyMDkxRTU3MDAwMUZFNTAwMDAwMDAwQ0MKKzoxMDBBODAwMDI0MjA4MEU1MjgxMDkxRTUwMDAwMDAwMDI4MTA4MEU1NzIKKzoxMDBBOTAwMDJDMjA5MEU1MDEyMDgyRTIyQzIwODBFNTNGMDAwMUUyM0QKKzoxMDBBQTAwMDNGMDA1MEUzMUVGRjJGMTExODAwOUZFNTAwMTA5MEU1NTYKKzoxMDBBQjAwMDAxMTA4MUUyMDAxMDgwRTUwMjE4QTBFMzBCMDJBMEUzMjAKKzoxMDBBQzAwMDAwMTA4MEU1MUVGRjJGRTEzMDA0MDA4MDAxMDZBMEUzNDYKKzoxMDBBRDAwMDAxMDE4MEUyMDAxMDkwRTUwMTA4MTFFMzBCMTBBMEUzOTIKKzoxMDBBRTAwMDAyMTk4MUUyMDUwMDAwMUEwMDIwOTBFNTQyMjhCMEUxRDkKKzoxMDBBRjAwMDA1MDAwMDFBMDAwMDkwRTUwMjBDMTBFMzAyMDAwMDBBNTUKKzoxMDBCMDAwMDA2MDdBMEUzNEMxMTgwRTUwMzAwMDBFQTBDMDA5RkU1MTYKKzoxMDBCMTAwMDAwMDAwMDAwNDAxMDgwRTVGRkZGRkZFQUZFRkZGRkVBNTMKKzoxMDBCMjAwMDAwMDAwMDgwMDEwNkEwRTMwMTAxODBFMjAwMTA5MEU1RDIKKzoxMDBCMzAwMDAxMDgxMUUzMEMxMEEwRTMwMjE5ODFFMjA1MDAwMDFBN0MKKzoxMDBCNDAwMDAwMjA5MEU1NDIyOEIwRTEwNTAwMDAxQTAwMDA5MEU1ODEKKzoxMDBCNTAwMDAyMEMxMEUzMDIwMDAwMEEwNjA3QTBFMzRDMTE4MEU1MzYKKzoxMDBCNjAwMDAzMDAwMEVBNEMwMDFGRTUwMDAwMDAwMDQwMTA4MEU1OTMKKzoxMDBCNzAwMEZGRkZGRkVBRkVGRkZGRUEwMjFCQTBFMzAxMDZBMEUzN0UKKzoxMDBCODAwMDE0MTA4MEU1MUVGRjJGRTE4MDIxMUZFNTE0MzA5MkU1NEYKKzoxMDBCOTAwMDAwMDAwMDAwMDAzMDgwRTUxQzAwOTJFNTAwMDAwMDAwMkQKKzoxMDBCQTAwMDAwMDA4MUU1MDAxMEEwRTMxNDEwODJFNTAxMDZBMEUzMzcKKzoxMDBCQjAwMDFDMTA4MkU1MEMxMDgwRTUxQzEwOTJFNTAwMDAwMDAwN0UKKzoxMDBCQzAwMDFDMTA4MEU1MUVGRjJGRTFDMDIxMUZFNTAwMDAwMDAwODIKKzoxMDBCRDAwMDFDMTA4MkU1MDExNkEwRTMxNDAwODJFNTBDMDA4MUU1RkIKKzoxMDBCRTAwMDFDMDA5MkU1MDAwMDAwMDAxQzAwODFFNTFFRkYyRkUxQzMKKzoxMDBCRjAwMDgwQjUwRjFDMzgxQzAwRjAxN0Y4MDAyODAyRDAzODFDRjQKKzoxMDBDMDAwMDAwRjA5MkY4MDAyMDgwQkMwOEJDMTg0NzgwQjUwRjFDOEIKKzoxMDBDMTAwMDM4MUMwMEYwMDlGODAwMjgwMkQwMzgxQzAwRjA4NEY4RDUKKzoxMDBDMjAwMDAwMjA4MEJDMDhCQzE4NDdGMEI0MDc2ODNBNzhEMjA3QTcKKzoxMDBDMzAwMEQyMEYwMDI0MDAyQTAzRDBGRjIyMDEzMjQyNjAwMEUwREMKKzoxMDBDNDAwMDQ0NjAzQTdCN0I3QjFCMDIxQTQzODEyQTA4RDEwMTIzMzMKKzoxMDBDNTAwMDVCMDI0MjY4MUE0MzQyNjAwNDIyQkYxODgyNjAwMEUwQ0YKKzoxMDBDNjAwMDg0NjAzQTdCN0I3QjFCMDIxQTQzMDgyQTA2RDEwNjIzNDkKKzoxMDBDNzAwMDQxNjgxOTQzNDE2MDgxNjgwRTMxM0NFMEMxMjNEQjAwQ0IKKzoxMDBDODAwMDlBNDIwM0QxNDE2ODI0NEIxOTQzM0VFMDIzNEI5QTQyRDgKKzoxMDBDOTAwMDA0RDEwMTIzMUIwMzQxNjgxOTQzMzZFMDEzMDIxMjBBRjEKKzoxMDBDQTAwMDEyMDYxMjBFMUE0MzEyMDQxMjBDMkUzQTFDNEI5QTQyRDAKKzoxMDBDQjAwMDJERDgwMTI1NDI2ODE1NDM0NTYwQkE3QkZCN0IxQjAyOUEKKzoxMDBDQzAwMDFBNDMxODRCOUE0MjIyRDFGQjFEMDkzMzQ0Q0I5QjA3OTAKKzoxMDBDRDAwMERCMEVEQTQwNUI0MjIwMzM5RTQwMTY0MzAzMkUxOEQxRDAKKzoxMDBDRTAwMDM5N0Q3QjdEMUIwMjE5NDMwODI5MDdEMTA0MjEyOTQzNDMKKzoxMDBDRjAwMDQxNjA4MTY4MTYzMTgxNjAwMTIxMEFFMEMxMjNEQjAwNzcKKzoxMDBEMDAwMDk5NDIwNEQxMDEyMTg5MDMyOTQzNDE2MDAwRTA4NDYwQjQKKzoxMDBEMTAwMDAwMjEwODFDRjBCQzcwNDcwMjQwMDAwMDgxODAwMDAwRTgKKzoxMDBEMjAwMEFFMDUwMDAwQUFBQTAwMDA4MEI0NDI2OEQxMDgzRkQzRjMKKzoxMDBEMzAwMDAxNjg4MzY4NTkxODAyMzk4Rjc4M0YwNzNGMEYwNTJGRTQKKzoxMDBENDAwMDAzRDFEQTFEMEQzMkMyNjAwNUUwQkYwMERCMTlDMzYwQkMKKzoxMDBENTAwMDA4MjMxQTQzNDI2MDhBNzgxMjA3MTIwRjkyMDAwMjYxMzgKKzoxMDBENjAwMDBBNzk0Qjc5MUIwMjFBNDMxMzAyMTIwQTEyMDYxMjBFNTkKKzoxMDBENzAwMDFBNDMxMjA0MTIwQzQyNjFDQTdBMDYyQTAzRDExMDIzQzQKKzoxMDBEODAwMDQyNjgxQTQzMTBFMDExMkEwM0QxMjAyMzQyNjgxQTQzMTMKKzoxMDBEOTAwMDBBRTAzMzJBMDNEMTQwMjM0MjY4MUE0MzA0RTAzMjJBOEUKKzoxMDBEQTAwMDAzRDE4MDIzNDI2ODFBNDM0MjYwQzk3QUMwNDYwMTc2NjMKKzoxMDBEQjAwMDgwQkM3MDQ3MEE3OEMwNDYwMjYwNEI3ODFCMDIxQTQzMTkKKzoxMDBEQzAwMDAyNjA4Qjc4MUIwNDFBNDMwMjYwQzk3ODA5MDYxMTQzM0MKKzoxMDBERDAwMDAxNjA3MDQ3ODBCNTA3MUM0ODY4ODAwOTI2RDNCODZBNEYKKzoxMDBERTAwMEM5Njg0MDE4MDEyMzlCMDcwMjMwMTg0MzAwNjgwMDA0QkIKKzoxMDBERjAwMDAwMEMxMTIzOUIwMjk4NDIxOEQxNzg2QTM5NkJDMDQ2QzcKKzoxMDBFMDAwMDQ4NjIzODZCMDJGMERBRjgzODFDMDFGMDk1RkQwMTIwRDkKKzoxMDBFMTAwMDA3NDlDMDQ2Qzg3MzA3NDk0QTZDMTIxODRBNjQwNjQ5MTQKKzoxMDBFMjAwMDhBNkQxMjE4OEE2NTgwQkMwOEJDMTg0NzAwMjBGQUU3NTIKKzoxMDBFMzAwMDE4MUEwMDgwMEMyQjAwODBBNDJBMDA4MDgxMDcxOUQwOEEKKzoxMDBFNDAwMDgwMDg4MDAwMDEyMzlCMDcwMTFEMTg0MzAwNjgxOTQzOTcKKzoxMDBFNTAwMDA5NjgwMjAyMTIwRTEyMDYwMDBBRkYyMzFCMDQxODQwNDIKKzoxMDBFNjAwMDEwNDMwQTBBMTIwNjEyMEUxMDQzMDkwMjFCMEExOTQwMDcKKzoxMDBFNzAwMDA4NDM3MDQ3MDEyMzlCMDcxODQzMDA2ODAxMDYwMjAyREMKKzoxMDBFODAwMEZGMjMxQjA0MUE0MDExNDMwMjBBMUIwQTFBNDAxMTQzOTQKKzoxMDBFOTAwMDAwMEUwODQzRURFNzAwMDBGMEI1MDQyMzgxNkIxOTQwMTQKKzoxMDBFQTAwMDAwMjIwMDI5NDZEMEM3MUQzOTM3Mzk3QjMzMjkwMUQwQUMKKzoxMDBFQjAwMDMyMjkzRkQxMDE2QkMwNDY0QTY1QzQxRDJEMzRDRDFEN0EKKzoxMDBFQzAwMDJEMzUwMDIyOTMwMEU2NThDMDQ2RUU1MDAxMzIwNzJBMjUKKzoxMDBFRDAwMEY4RDM4MjZBQzA0NjRBNjM4MjZBQzA0NjhBNjI3QThCQzUKKzoxMDBFRTAwMENCMUQzOTMzNUE4MzQwNkFDMDQ2NDg2MjEyNDgwMTI3RjUKKzoxMDBFRjAwMDQyNjgwMDJBMTBEMUMyNjgwMDJBMTNEMTQyNjkwMDJBMzAKKzoxMDBGMDAwMDBERDEwMTYxQzE2MDAxNkEwMjI5MDJEMzIwMzAwNzcxNEQKKzoxMDBGMTAwMDBDRTAwMEYwMTNGODA5RTBDMjY4MDAyQTAyRDEwMTYxNzgKKzoxMDBGMjAwMEMxNjAwM0UwMDI2OUMwNDY1MTY1MDE2MTM4MUNGMEJDMzQKKzoxMDBGMzAwMDA4QkMxODQ3MTAxQ0ZBRTc2QzA2MDA4MDgwQjUxRTQ5RjMKKzoxMDBGNDAwMDAwMjJDQjY4MDAyQjM0RDBDODFERjkzMDgzNjJDQjY4RjcKKzoxMDBGNTAwMDlCNkFDMDQ2QzM2MkNGNjk3QjAwREYxOTdGMDIxNzRCRDMKKzoxMDBGNjAwMEZGMThGRjM3NjUzNzgzNjMwNzYzQ0IxREZGMzM1QTMzQTEKKzoxMDBGNzAwMDFBNzJDQjY5MDAyQjAxRDBDQTYxMDFFMDAxMjNDQjYxNTkKKzoxMDBGODAwMDBGMUNDOTY4NDk2QTA5ODkwMTMxNDE2M0Y4MURGRjMwQTYKKzoxMDBGOTAwMDNBMzA0MjYwMDI4MjgyNjBDMjYwMzgxQzAwRjBDRUZBQjEKKzoxMDBGQTAwMDM4NkEwMTMwMzg2MjM4MUMwMEYwMEFGODgwQkMwOEJDOEUKKzoxMDBGQjAwMDE4NDcxMDFDRkFFNzAwMDA2QzA2MDA4MEFDQUIyMDQwMUMKKzoxMDBGQzAwMEYwQjUwNzFDRjkxREY5MzE4ODZBQzIxRDJEMzIwMTIzQzUKKzoxMDBGRDAwMDlCMDcwODMyMUE0M0M4NkExMjY4MTIwNDEyMEM4MDE4NjAKKzoxMDBGRTAwMDgyNzlDMzc5MUIwMjFBNDMxMzAyMTIwQTEyMDYxMjBFRTcKKzoxMDBGRjAwMDFBNDMxMjA0MTIwQzAyMzg5MjA0OTIwQzAwMjYyNTRENUEKKzoxMDEwMDAwMEVDMURGRjM0M0EzNDAwMkEwNEQwMjA4QTAxMjM5QjAyQ0QKKzoxMDEwMTAwMDE4NDMyQkUwMDEyMzlCMDdDMjFEMEQzMjFBNDMxMjY4QUYKKzoxMDEwMjAwMDEyMDQxMjMwMTg0MzAwNjgwMDA0MDAwQzEwNDMwMzFDMjMKKzoxMDEwMzAwMEY4MURGRjMwNEEzMDgyNzhDODZCMTkxQzAyRjAwMkY4QTQKKzoxMDEwNDAwMDAwMjgwNERBMjA4QUZGMjMwMTMzMTg0MzBFRTBGOTFEM0IKKzoxMDEwNTAwMEZGMzEzQTMxMDg2MDAxMDQwOTBDMzgxQzAwRjAxQ0Y4MUIKKzoxMDEwNjAwMDAwMjgxNEQxMjA4QTAxMjM1QjAyMTg0MzIwODIyMThBQTAKKzoxMDEwNzAwMDM4MUMwMEYwQTJGQkU4NjgwMTIzOUIwNzU0MzAxODQzOUEKKzoxMDEwODAwMDAwNjhDMDQ2RTg2MDMwMUNGMEJDMDhCQzE4NDcwMTIwNkUKKzoxMDEwOTAwMEZBRTcwMDAwNkMwNjAwODBGOEI1MDcxQ0ZDMURGOTM0NjcKKzoxMDEwQTAwMEEwNkJBNjZBQzUxRDBEMzUzODQ4QzA2QTRCMDA1OTE4OUIKKzoxMDEwQjAwMDQ5MDE0MjE4MDEyMDgwMDcxMDQzMDA2ODAwMDQwMDBDMTkKKzoxMDEwQzAwMDAwOTAwMTIzOUIwN0QwMUQwNTMwMTg0MzAwNjgzODFDOTEKKzoxMDEwRDAwMDI5MUMwMEYwQzJGQUE4ODg0MTA3MDFEMDAwMjA1MUUwODUKKzoxMDEwRTAwMDI5ODkwOTE4NjA2QjgxNDJGOEQ4Njk4OUVBODg4OTE4Q0EKKzoxMDEwRjAwMDgxNDJGM0Q4MDA5ODAxMjgyNUQxRTA2QUYxNkI0MDE4QUQKKzoxMDExMDAwMDcxNkNGQTFEQ0QzMjAxRjAzM0Y5RkExREZGMzIzQTMyMUIKKzoxMDExMTAwMEUwNkE1MTY5NDAxOEMzMUQwMzMzMDAyMDgxMDA1RTU4MDYKKzoxMDExMjAwMEM5MTlGRjMxMDEzMTRFNjEwMTMwMDQyOEY2RDNFMDZBNUMKKzoxMDExMzAwMDUxNjk0MDE4QzExRDA1MzEwMDIwMDAyMjQzMDBDQTUyRTgKKzoxMDExNDAwMDAxMzAwNjI4RkFEMzI5MUMxMTRBMDAyMEZGRjdBRUZCMTQKKzoxMDExNTAwMDAxMjI1MjA0NjA2QjAyNDMwMTIwMjE2QkZGRjdBNkZCQzIKKzoxMDExNjAwMDAxMjI1MjA0NjA2QjAyNDMwMDIwRTE2QUZGRjc5RUZCRkMKKzoxMDExNzAwMEExNkIwODRBMDEyMEZGRjc5OUZCMDMyMDA2NDlDMDQ2RUUKKzoxMDExODAwMDQ4NjIwMTIwRjhCQzA4QkMxODQ3MDAwMDRDMkEwMDgwQzcKKzoxMDExOTAwMDU0MDAwMzAwMTQwMDBGMDA2QzA3MDA4MEYwQjU4REIwMDAKKzoxMDExQTAwMDAwMjBCNTRBRDUxREY5MzU2ODYyMDEyMDAwMDVCMzQ5MTQKKzoxMDExQjAwMEMwNDYwODYwQTg2QUM0MUQyRDM0QjE0OEMwNkFENzFENTYKKzoxMDExQzAwMEZGMzczQTM3Mzk2ODRCMDA1OTE4NDkwMTQwMTgwMTIzNTUKKzoxMDExRDAwMDlCMDdDMTFEMDUzMTE5NDMwOTY4MDgzMDE4NDMwMDY4OTEKKzoxMDExRTAwMEMwNDYwOTkwRkYyMzFCMDIxODQwMDAwQTBBOTAwQTk4ODMKKzoxMDExRjAwMEE0NEUwMTI4NTlEMTI4NkJBMjY4ODAxOEEyNEEyMTY5RkYKKzoxMDEyMDAwMDA5MDQwOTBDMDFGMDI2RjkyODZCNzk2OTQwMThDMTFEMDEKKzoxMDEyMTAwMDA1MzEwMDIwODIwMDk4NEJEMzE4RkYzMzAxMzM1QjY5RkUKKzoxMDEyMjAwMEMwNDY4QjUwMDEzMDA0MjhGNEQzMDAyMDMxMUM4MjAwQ0EKKzoxMDEyMzAwMDU2MTgwMTIzOUIwNzMzNDMxQjY4MDRBRUIzNTAwMTMwOUIKKzoxMDEyNDAwMDAzMjhGNEQzMDAyMDA4OTA5MDQ5NDIwMDhCNUFCMjVBRTgKKzoxMDEyNTAwMDkzNDIxM0QwOEU0OEMxODkwMTMxQzE4MUI4NjgwMDI4RkEKKzoxMDEyNjAwMDAzRDEzODhBMTAyMzE4NDM3MUUwMzg4QTQwMjMxODQzODkKKzoxMDEyNzAwMDZERTAwMEYwMTFGOTAxRjA2N0ZGRjVFMDAxMzAwNjI4OUMKKzoxMDEyODAwMEUzRDMwODk4MDAyODBDRDFCODY4NDExQ0I5NjAwMDI4NDUKKzoxMDEyOTAwMDAzRDEzODhBMDEyMzE4NDMwMkUwMzg4QTA0MjMxODQzMTMKKzoxMDEyQTAwMDM4ODI3ODY4MDEzMDc4NjA2MkUwMEE5ODAyMjg1RkQxNUQKKzoxMDEyQjAwMDA5OTg0MDBDNzNEMzAxMjM5QjA3RTAxRDAxMzAxODQzQUMKKzoxMDEyQzAwMDAwNjhFMTFEMEQzMTE5NDMwOTY4NDAxODBDMzgwMDA0MEQKKzoxMDEyRDAwMDAwMEMwMDIxOEEwMDZCNEJENjE4MDEyMzlCMDczMzQzNzcKKzoxMDEyRTAwMDFCNjgwNEFFQjM1MDAxMzEwMzI5RjNEMzAwMjE4MzFFRTAKKzoxMDEyRjAwMDBDOTM2ODRBMTY2QkMwNDYwQjk2OEEwMDBDOUI5QjE4OTEKKzoxMDEzMDAwMDBCOUU5RTE5MDEyMzlCMDczMzQzMUI2ODZFNDZCMzUwMDcKKzoxMDEzMTAwMDAxMzEwNDI5RjFEMzY5NDY4QjFDMDc5MzAwMjEwODkxMDAKKzoxMDEzMjAwMDA0QUU0QTAwMDc5QjlCNUFCMjVBOTM0MjExRDA1ODQ4QzgKKzoxMDEzMzAwMEMxODkwMTMxQzE4MUY4Njg0MTFDRjk2MDAwMjgwM0QxREQKKzoxMDEzNDAwMDM4OEEyMDIzMTg0MzAyRTAzODhBODAyMzE4NDMzODgyRTEKKzoxMDEzNTAwMDhGRTcwMTMxMDYyOUU0RDMwODk5MDAyOTBERDFGOTY4RjYKKzoxMDEzNjAwMDRBMUNGQTYwMDAyOTA0RDEzOThBMDIyMzE5NDMwM0UwOTgKKzoxMDEzNzAwMDBDRTAzOThBMDgyMzE5NDMzOTgyMjk2QjA4MTgwMTIzQTQKKzoxMDEzODAwMDlCMDcwMTM4MTg0MzAwNjhDMDQ2MjA3NjAxMjM5QjA3NUQKKzoxMDEzOTAwMEUwMUQxMTMwMTg0MzAwNjgwMTA2MDkwRTAwRTAxOUUwNTUKKzoxMDEzQTAwMDM1NDgyQTZCQzA0NkVBNjIwNDI5NEZEMTAxMjFDNjFEODcKKzoxMDEzQjAwMEZGMzY1QTM2MzE3MjBBOTkwMjI5MUVEMTA5OTkwOTBFNEYKKzoxMDEzQzAwMDQ5MDYxQUQxRTExRDA1MzExOTQzMDk2ODA5MDYwOTBFQkMKKzoxMDEzRDAwMDA4MzkxQUUwMDEyMzlCMDdFMDFEMDEzMDE4NDMwMDY4MUIKKzoxMDEzRTAwMEUxMUQwRDMxMTk0MzA5Njg0MDE4MDAwNDAwMENGOTY4MkIKKzoxMDEzRjAwMDRBMUNGQTYwMDAyOUJDRDFCNkU3MDEyMzlCMDdFMTFEMTYKKzoxMDE0MDAwMDA1MzExOTQzMDk2ODA5MDYwOTBFQTE2MEU4NkFDMDQ2NUEKKzoxMDE0MTAwMDIwNjAyMDFDRkZGNzg4RkMyMDdFMzMyODAxRDAzMjI4NzIKKzoxMDE0MjAwMDExRDEwMTIxMTQ0Q0MwNDZGOTYwQjk2MDIwMUMwMEYwQjQKKzoxMDE0MzAwMDg1RjgyODZCQTk2QUMwNDY4ODYyMjAxQ0ZGRjdDMEZEQUEKKzoxMDE0NDAwMDAwMjgxMUQxMEVFMDAwMjAzMDcyMTFFMDMzMjkwMUQwQzQKKzoxMDE0NTAwMDMyMjkwREQxMDcxQzAwRjA3MUY4MzgxQ0ZGRjdCMEZERTAKKzoxMDE0NjAwMDAwMjgwMUQxMDFGMDcwRkUwREIwRjBCQzA4QkMxODQ3OTcKKzoxMDE0NzAwMDAwRjAxMkY4RjZFNzAwMDA2QzA2MDA4MDAwMDAwMEIwRjMKKzoxMDE0ODAwMDRDMkEwMDgwQUNBQjIwNDA0MDA3MDA4MDgyMDcwMDgwREYKKzoxMDE0OTAwMDBDMkIwMDgwNkMwNzAwODBGMEI1MjU0ODQxNjgwMTMxQjUKKzoxMDE0QTAwMDQxNjAyNDRGRjkxREY5MzEwMDI0ODg2QUZBNjhDMDQ2NkEKKzoxMDE0QjAwMDk0NjEwNDIyRkI2OEMwNDZEQTYwMTAyMkZCNjhDMDQ2RDMKKzoxMDE0QzAwMDlBNjFGQTFERkYzMjVBMzIxMzdBMUI0QTAwMkIwQkQwNTUKKzoxMDE0RDAwMDE1OEEyRTBBMzYwMjMzMjMyQjQwOUIwMDFFNDNDQzIzNTEKKzoxMDE0RTAwMDJCNDA5QjA4MzM0MzEzODIxMjhBRkI2OEMwNDZEQTgzODEKKzoxMDE0RjAwMDRBNkJGQjY4QzA0NkRBODEwQTZCQzA0NjgyNjJDNDYyRUUKKzoxMDE1MDAwMEMzMUQzOTMzNEE2QkMwNDY1QTgzMDQyMzAyNjgxQTQzMDkKKzoxMDE1MTAwMDAyNjA4ODZBMDFGMDMyRkFGODY4MDEyMzlCMDc1NDMwQjAKKzoxMDE1MjAwMDE4NDMwMDY4QzA0NkY4NjBGMEJDMDhCQzE4NDcwMDAwQ0IKKzoxMDE1MzAwMDBDMkIwMDgwNkMwNjAwODBBQzA3MDA4MDgwQjVDMTFEQkMKKzoxMDE1NDAwMEY5MzE4QTZBMDEyMzlCMDdEMTFENDUzMTE5NDMwOTY4ODYKKzoxMDE1NTAwMDBCMDYxQjBFMDEyN0MxMURGRjMxNEEzMTMzMkIwNUQxNkMKKzoxMDE1NjAwMDhCNzAwMTFDMTAxQzAwRjAwRkY4MDZFMDMyMkIwOEQxMjQKKzoxMDE1NzAwMDhCNzAwMTFDMTAxQzAwRjAzQ0Y4MzgxQzgwQkMwOEJDQUYKKzoxMDE1ODAwMDE4NDcwMDIwODg3MEY5RTc5MEI0Q0ExREY5MzIzMzI3NTQKKzoxMDE1OTAwMENDMURGRjM0NEEzNEQzNkFDMDQ2QTc3MEZGMzE0MTMxQjUKKzoxMDE1QTAwMDA3NkNDMDQ2NEY2MUZCMTgzOTFDOUYxRTAxMjM5QjA3MjcKKzoxMDE1QjAwMEZDMUMyMzQzMUI2ODFCMDYxQjBFOUIwMDFCMDQxQjBDRkYKKzoxMDE1QzAwMEM5MTgwODMxMDE2NDAxMjM5QjA3QjkxQzE5NDMwOTY4MzQKKzoxMDE1RDAwMDM0MzAwMTc2RjgxRDAxMzAxODQzMDA2ODAwMDRCOTFENEQKKzoxMDE1RTAwMDE5NDNEMDYzMDk2ODA5MDQwOTBDMDg0M0QwNjM5MEJDMEYKKzoxMDE1RjAwMDcwNDdCMEI1Q0ExREY5MzJDNTFEMkQzNTMyMjBDRjFEM0IKKzoxMDE2MDAwMEZGMzc0QTM3RDM2QUMwNDZCODcwQ0MxREZGMzQzQTM0MkUKKzoxMDE2MTAwMEU4NjhDMDQ2NjA2MTEwMzBFODYwNjA2OUMwMTg4NzFFRTUKKzoxMDE2MjAwMDAxMjM5QjA3MzgxRDE4NDMwMDY4MDAwNEI5MUMxOTQzQTcKKzoxMDE2MzAwMEQwNjMwOTY4MDkwNDA5MEMwODQzRDA2M0Y4MUQwMzMwMUUKKzoxMDE2NDAwMEZGRjdGQ0ZCMjA2MkY4MUQwNzMwRkZGN0Y3RkI2MDYyMzUKKzoxMDE2NTAwMDAwMjAyODc2QjBCQzA4QkMxODQ3RjdCNTgxQjAwMTk4QzcKKzoxMDE2NjAwMEM3MURGOTM3Qjg2QTAxMjM5QjA3RDQxRDA1MzQyMzQzRUUKKzoxMDE2NzAwMDFDNjhGRjIzRkUzMzIzNDA3RjZCM0YwNDNCNDMwQjYwMUEKKzoxMDE2ODAwMDM0MzAxQzFDODAyMzIzNDAwMTlGRkYzNzQxMzcwMDJCM0YKKzoxMDE2OTAwMDNDRDAwQzIzMDA5MzAwMjM5RDAwQUUxODM2Njk2RDE4RDIKKzoxMDE2QTAwMDZFNjEwMTMzMDUyQkY3RDMwMDIzOUQwMEFFMTg3NjZBRDcKKzoxMDE2QjAwMDZEMThBRTYyMDEzMzA1MkJGN0QzMDE5QkZGMzM1MTMzMTUKKzoxMDE2QzAwMDlCNzgzMzJCMEVEMTAxMjM5QjA3QzUxRDAxMzUyQjQzN0UKKzoxMDE2RDAwMDFCNjhDMDQ2NEI4MTAxMjM5QjA3QzUxRDBEMzUyQjQzNUQKKzoxMDE2RTAwMDFCNjgxNkUwN0I2OUMwNDY0QjgxMDEyMzlCMDdDNTFEMjMKKzoxMDE2RjAwMDBEMzUyQjQzMUI2ODdENjk1RDFCMDEyMzlCMDdDNjFEQjAKKzoxMDE3MDAwMDAxMzYzMzQzMUI2OEVCMTgwQzNCMDJFMDAwMjMwMDkzQzcKKzoxMDE3MTAwMDRCODFDQjgwNjMwOTQ5RDMwMTIzOUIwN0M0MUQwNTM0NEEKKzoxMDE3MjAwMDIzNDMxQjY4QzA0NjBCODEwMTIzOUIwN0M0MUQwRDM0NTYKKzoxMDE3MzAwMDIzNDMxQjY4MEM4OTFCMUIwMDlDMUMxQjAxMjM5QjA3NUMKKzoxMDE3NDAwMDA4MzAxODQzMDA2ODIwMTg4ODgwMzg2QTA0MEVGRjIzODgKKzoxMDE3NTAwMDFCMDQwMzQwMUIwQTFDNDNGRjIzMUIwMjAzNDAxQjAyMDQKKzoxMDE3NjAwMDIzNDMwMDA2MTg0M0M4NjA3ODZBMDcwRUZGMjMxQjA0NTIKKzoxMDE3NzAwMDAzNDAxQjBBMUY0M0ZGMjMxQjAyMDM0MDFCMDIzQjQzODIKKzoxMDE3ODAwMDAwMDYxODQzMDg2MUQwNkJDMDQ2Qzg2MzkwNkJDMDQ2MjIKKzoxMDE3OTAwMDA4NjQ1MDZDQzA0NjQ4NjQxMDZDQzA0Njg4NjREMDZDQzUKKzoxMDE3QTAwMEMwNDZDODY0OTA2Q0MwNDYwODY1MDJFMDAwMjMwQjgxMDcKKzoxMDE3QjAwMDhCODAwNEIwRjBCQzA4QkMxODQ3MDBCNTBGNEE5Mzg5NzEKKzoxMDE3QzAwMDAxMzM5MzgxQzIxREY5MzIwNDIzOTA2QUMwNDZDMzYwN0QKKzoxMDE3RDAwMDEwMjM4MzYxQ0IwQTAxRDMxODIzODM2MUMxODM1MTZCMkEKKzoxMDE3RTAwMEMwNDZDMTgxNTE2QkMyMUQzOTMyNTE4MzA0MjMwMTY4NDcKKzoxMDE3RjAwMDE5NDMwMTYwMDFGMEMyRjgwOEJDMTg0NzBDMkIwMDgwQTcKKzoxMDE4MDAwMEIwQjUxQjRDMjA2QTAyMjgxQkQyMDAyMEU3MUQxOTM3RjcKKzoxMDE4MTAwMDM4NzFFMTY4RTAxREY5MzAwMDI5MTVEMDQyNkEwMDJBQ0MKKzoxMDE4MjAwMDEyRDEwMTI1MEFFMEZGRjc4OUZCMDAyODA5RDEyMDZBQkYKKzoxMDE4MzAwMDAyMjgwMEQzM0Q3MUUwNjgwMDI4MDJEMDM4NzkwMDI4RTIKKzoxMDE4NDAwMEYxRDBCMEJDMDhCQzE4NDc0MDZBMDAyOEY5RDEwMDI5ODMKKzoxMDE4NTAwMEY3RDE2MDY5MDAyODA0RDAwNjQ4MDA2ODAzRjBBOEZDQUUKKzoxMDE4NjAwMEVGRTc2MDY4MDAyOEVDRDAwMEYwNUFGOEU5RTcwMDAwRTQKKzoxMDE4NzAwMDZDMDYwMDgwMzQwNDAwODBCMEI1MDcxQzIwMjNCODY4RDMKKzoxMDE4ODAwMDE4NDAwMTI0MDAyNTAwMjgwQkQxMzg2QTAwMjgwM0QxMTQKKzoxMDE4OTAwMDI4MUNCMEJDMDhCQzE4NDcxRjQ4MDE2RTAxMzEwMTY2MDYKKzoxMDE4QTAwMDAzRTA0ODY4QzQyMzE4NDAwM0QxMzg2QTAwRjAwQ0ZDRjgKKzoxMDE4QjAwMDJGRTAzODFDMDBGMDFDRkMzODFDMDBGMDdCRkFCODY4RTQKKzoxMDE4QzAwMEMwMDgwMkQzMzg2QTAwRjBEMUZCQjg2ODM5NkFDMDQ2NTQKKzoxMDE4RDAwMDg4NjAzODZBQzA0NkM1NjAxMDQ4NDE2ODAwMjkxMUQxNDcKKzoxMDE4RTAwMEMxNjgwMDI5MDlEMTQxNjkwMDI5MDZEMTM5NkFDMDQ2NzkKKzoxMDE4RjAwMDgxNjA0MTYwMDBGMDE0RjgwQkUwMzk2QUMwNDY4MTYwRjUKKzoxMDE5MDAwMDQxNjAwNkUwMzk2QTgyNjhDMDQ2RDE2MDM5NkFDMDQ2RTMKKzoxMDE5MTAwMDgxNjAyMDFDQkRFNzAwMDBBNDJBMDA4MDZDMDYwMDgwQzYKKzoxMDE5MjAwMDkwQjUwQjRDNjc2ODAwMkYwRkQwMzgxQzAwRjAxMkY4RjAKKzoxMDE5MzAwMDAwMjgwQUQxNjA2OEMwNjhDMDQ2NjA2MDM4MUMwMEYwQUEKKzoxMDE5NDAwMEMzRkIwMDIwOTBCQzA4QkMxODQ3MDEyMEZBRTcwMDAwNDgKKzoxMDE5NTAwMDZDMDYwMDgwRjBCNTA3MUNGRTFENDkzNjMwNzg0MDAwNEIKKzoxMDE5NjAwMEMwMTk4NThCMzM0QzM0NEI5RDQyM0NEMDM4MUMyMTFDMTQKKzoxMDE5NzAwMDJBMUMwMEYwMURGOTMxNDg4MDZBNTgyMTY5NDM0MDE4M0IKKzoxMDE5ODAwMDAxMjM5QjA3MTg0MzAwNjgwMDA0MDAwQzJDNEQwMTI4MUMKKzoxMDE5OTAwMDFBRDEzMDc4QzAxOUMxMUQxOTMxMDg3QTNBNjg4MDE4RjcKKzoxMDE5QTAwMDA5N0JFQTFEMjEzMjAwRjBFM0ZDMzA3OEMwMTkyMDMwQjkKKzoxMDE5QjAwMDAwNzkzOTY4NDAxOEMxMUQwNTMxMDAyMDAwMjM0MjAwMUMKKzoxMDE5QzAwMDhCNTIwMTMwMDYyOEZBRDNBMDg4NDEwNzBCRDEyMTg5MTgKKzoxMDE5RDAwMDA5MTg3ODY4MDAwNDAwMEM4MTQyMDREODYxODlFMjg4MDMKKzoxMDE5RTAwMDg5MTg4MTQyMDNEOTAwMjBGMEJDMDhCQzE4NDcyMTFDOEIKKzoxMDE5RjAwMDE0NEEwMDIwRkVGNzVBRkYwMTIyNTIwNDc4NjgwMjQzN0QKKzoxMDFBMDAwMDAxMjAzOTY4RkVGNzUyRkYwMTIyNTIwNDc4NjgwMjQzMzAKKzoxMDFBMTAwMDAwMjAzOTY4RkVGNzRBRkYwQjQ5MEM0QTAxMjBGRUY3MDcKKzoxMDFBMjAwMDQ1RkYwMTIwRTkxRDE5MzE0ODcxMDIyMUVBMURGOTMyRjMKKzoxMDFBMzAwMDUxNjJEOUU3MjhBQzIwNDBGRkZGMDAwMDRDMkEwMDgwMEIKKzoxMDFBNDAwMDZDMDYwMDgwNTQwMDAzMDAxNEFDMjA0MDE0MDAwNzAwMTIKKzoxMDFBNTAwMEYwQjU4M0IwMDAyMTRGNDhDMjFERjkzMjUxNjIwMTIxMTcKKzoxMDFBNjAwMEM5MDQ0RDRBQzA0NjExNjBDMTFEMTkzMTQ5NzkwMDI5ODgKKzoxMDFBNzAwMDA0RDE0QTQ4MDA2ODAzRjA5QkZCODdFMDQ1NDg0NzY4NkIKKzoxMDFBODAwMEZDMUQ0OTM0MjE3ODQ4MDBDMDE5ODA4QjQ0NEE5MjZBNzEKKzoxMDFBOTAwMDU4MjM1ODQzMTUxODAxMjM5QjA3RUExRDA1MzIxQTQzQTIKKzoxMDFBQTAwMDEyNjgwODM1MkI0MzFENjhGRjIzMUIwMjJCNDAxQjBBQkQKKzoxMDFBQjAwMDNDNEQwMTJCMjREMUM4MTlDMTFEMTkzMTA4N0EzQTY4NEYKKzoxMDFBQzAwMDgwMTgzOTRBMDk3QjAwRjBDNUZDMjA3OEMwMTkyMDMwMDUKKzoxMDFBRDAwMDAwNzkzOTY4NDExODAwMjA4MjAwNTMxOTlCNkU2RTQ2QzgKKzoxMDFBRTAwMEIzNTAwMTMwMDMyOEY3RDNDQTFEMDUzMjY5NDYwMDIwRTAKKzoxMDFBRjAwMDQzMDBDRDVBQzA0NkQ1NTIwMTMwMDYyOEY4RDMyREUwMTgKKzoxMDFCMDAwMDAyMkIyQkQxMTEwQTI5RDMwMDIxOEEwMDUzMTk5QjZFNzUKKzoxMDFCMTAwMDZFNDZCMzUwMDEzMTAzMjlGN0QzMjE3ODQ5MDBDOTE5MjIKKzoxMDFCMjAwMDA5OEYzQTY4OEIxODZBNDYwMDIxNEQwMDU2NUJDMDQ2MDMKKzoxMDFCMzAwMDVFNTMwMTMxMDYyOUY4RDMxOTQ5OEE2QTEzMTgxQTZEQzAKKzoxMDFCNDAwMDAwOUQ1NTQwMTk0QUQ2Njg3NTQwMUQ2NTg5NkEwODE4NzgKKzoxMDFCNTAwMDQxNkQwMjlCNTk0MDkyNjk1MTQwNDE2NTIwNzg0MTFFNzgKKzoxMDFCNjAwMDIxNzAwMDI4MEREMDM4MUNGRkY3RjRGRTAwMjgwREQxOUQKKzoxMDFCNzAwMDA4NEE1MDY4QzA2OEMwNDY1MDYwMzgxQzAwRjBBNEZBOUIKKzoxMDFCODAwMDAyRTAzODFDMDBGMDczRkEwMUYwREVGQTAzQjBGMEJDOUEKKzoxMDFCOTAwMDA4QkMxODQ3NkMwNjAwODAwMDAwMDBCMDM4MDQwMDgwQzQKKzoxMDFCQTAwMDRDMkEwMDgwQUNBQjIwNDA5NDA2MDA4MDA4ODMyMDQwODMKKzoxMDFCQjAwMEYwQjU4MkIwNjk0QjlGNkE1ODIzNUE0M0JBMThDMzFEQzcKKzoxMDFCQzAwMDQ5MzMxRjc4MDEyMzlCMDdENDFEMDEzNDIzNDMxRDY4MkIKKzoxMDFCRDAwMDQzNjgxQzA0MDEyMzlCMDdENjFEMDUzNjMzNDMxQjY4NEQKKzoxMDFCRTAwMDFDNDM0MjIzMUM0MzBDNjBGRjI2MzYwMjJFNDAwMTIzNzcKKzoxMDFCRjAwMDVCMDI5RTQyNzREMTZCMEMyQkQzQzMxOTIwMzMxQjc5MkIKKzoxMDFDMDAwMEMwNDY0QjgxN0IwMDFCMTgxQjhGNEM4OTFCMUJDQjgwNTQKKzoxMDFDMTAwMDAwMjRBNjAwMDE5NkIzMThERTFEMDkzNjAxMjM5QjA3OTgKKzoxMDFDMjAwMDMzNDMxQjY4MDE5RTc2MTg3MzYxMDEzNDA1MkNGMEQzOTEKKzoxMDFDMzAwMDAwMjRBNjAwMDA5NkIzMThERTFEMUQzNjAxMjM5QjA3NjUKKzoxMDFDNDAwMDMzNDMxQjY4MDA5RTc2MThCMzYyMDEzNDA1MkNGMEQzMzEKKzoxMDFDNTAwMDA2RTAwMDIzNEI4MUNCODA0MDIzOUM0MzBDNjAyMzFDNzcKKzoxMDFDNjAwMDZCMEU0QUQzQzMxOTIwMzMxQjc5MTAzMzBCODE3QjAwRDEKKzoxMDFDNzAwMDFCMTgxQjhGMEY4OURCMUI4QjgwMDEyMzlCMDdENDFEMzcKKzoxMDFDODAwMDM1MzQyMzQzMUI2OEMwNDZDQjYzMDEyMzlCMDdENDFEMTcKKzoxMDFDOTAwMDMxMzQyMzQzMUI2OEMwNDYwQjY0QUIwRTIxRDIwMTIzQjEKKzoxMDFDQTAwMDlCMDdENDFEM0QzNDIzNDMxQjY4QzA0NjRCNjQwMTIzNkUKKzoxMDFDQjAwMDlCMDdENDFEMzkzNDIzNDMxQjY4QzA0NjhCNjQwMTIzMjIKKzoxMDFDQzAwMDlCMDdENDFENDUzNDIzNDMxQjY4QzA0NkNCNjQwMTIzQzYKKzoxMDFDRDAwMDlCMDdENDFENDEzNDIzNDMxQjY4QzA0NjBCNjUwMEUwQkQKKzoxMDFDRTAwMDBGRTBGQjFGMDEzQjFCMDQxQjBDMDc2OEZGMTgwMzY5NzcKKzoxMDFDRjAwMDA4MUMzOTFDMDBGMDM0RjgyQ0UwMDAyMzBCODE4QjgwODkKKzoxMDFEMDAwMDI4RTAwMDIzOEI4MDBCODFDMzE5MjAzMzFCN0FDMDQ2NDcKKzoxMDFEMTAwMDRCODE3QjAwMTgxODAwOEVDMDQ2Qzg4MDAwMjA4NzAwQzkKKzoxMDFEMjAwMEJCMThEQzFEMDkzNDAxMjM5QjA3MjM0MzFCNjg3RjE4NjQKKzoxMDFEMzAwMDdCNjEwMTMwMDUyOEYyRDMwMDIwODcwMEJCMThEQzFEMzEKKzoxMDFENDAwMDFEMzQwMTIzOUIwNzIzNDMxQjY4N0YxOEJCNjIwMTMwQUUKKzoxMDFENTAwMDA1MjhGMkQzMDJCMEYwQkMwOEJDMTg0NzRDMkEwMDgwMUEKKzoxMDFENjAwMDgwQjQxRjFDM0IwQzE4RDIxNzZEMTE0QkMwNDZERjYwQUUKKzoxMDFENzAwMDUyNkRDMDQ2MUE2MUM3NjAxQTY5QzA0NjAyNjFEODY4RDAKKzoxMDFEODAwMEMwNDYwODgwRDg2ODAwMEM0ODgwMTg2OUMwNDY4ODgwMjIKKzoxMDFEOTAwMDE4NjkwMDBDQzg4MDgwQkM3MDQ3NEE4ODEyMDQwQjg4MDAKKzoxMDFEQTAwMDFBNDNDMjYwOEE4OEM5ODgwOTA0MTE0MzAxNjFGMkU3QjUKKzoxMDFEQjAwMDJDMDcwMDgwRjFCNTg4QjAwMDIyMDg5ODAwNkEwODlCQzMKKzoxMDFEQzAwMDk5Njg0OTBBMDJEMzAxMjdGRjAzMDBFMDAwMjcwMzhCMkIKKzoxMDFERDAwMDAwMkIxOUQwQTM0OTg5NkExQzFDNTgyMzYzNDNDOTE4RDYKKzoxMDFERTAwMDAxMjM5QjA3NTgzOTE5NDMwOTY4MDkwNDA5MEMwMjI5ODIKKzoxMDFERjAwMDAyRDEwODIzMUY0MzA3RTA0MThCMDAyOTAyRDAwQzIzQTYKKzoxMDFFMDAwMDFGNDMwMUUwMDQyMzFGNDM4MzhBMDAyQjE4RDA5NTQ5MDgKKzoxMDFFMTAwMDg5NkExQzFDNTgyMzYzNDNDOTE4MDEyMzlCMDc1ODM5M0UKKzoxMDFFMjAwMDE5NDMwOTY4MDkwNDA5MEMwMjI5MDFEMTBGNDMwN0UwOEQKKzoxMDFFMzAwMEMxOEEwMDI5MDJEMDAzMjMxRjQzMDFFMDAxMjMxRjQzNkQKKzoxMDFFNDAwMEMxMUQzOTMxMDc5MTRCODkwQzg5MUMxOTI0MDQyNDBDQkMKKzoxMDFFNTAwMDA4OUQyRDY4QzA0NjAxOTVDOTg4N0QwODFBRDMxQTFDQjMKKzoxMDFFNjAwMEMzMUQxOTMzMUE3MjA3OUE5Mjg5QzA0NjFBNzMwNzlBQ0EKKzoxMDFFNzAwMDEyODlDMDQ2MDI4NjA0ODc4MjhBMDEzQTgyODMwMTIyM0YKKzoxMDFFODAwMDE5NzEwODlCMUI2ODVCMTg1Qjc4OUIwMDFCMDQxQjBDN0IKKzoxMDFFOTAwMDA4MzM1OTE4QkIwODQ3RDMwNzlCNUI4OTg1MTgwNjk1RkIKKzoxMDFFQTAwMDIwMzUyQjcyMDc5QjlCODlDMDQ2MkI3MzA3OUIxQjg5OTAKKzoxMDFFQjAwMDJFMUM1NTAwMkQxODA1OTUyQjg2MDAyQTAxRDBDMzhBQUIKKzoxMDFFQzAwMDAwRTA4MzhBMDEzQjA1OURDMDQ2QUI4MzMxNzE2NTRCQzEKKzoxMDFFRDAwMDlENkEwNTlCOUU4QjU4MjM3MzQzRUIxOEREMUQwMTM1Q0UKKzoxMDFFRTAwMDAxMjM5QjA3MkI0MzFENjgyQjBFNUIwNjAxRDEwODMxOTQKKzoxMDFFRjAwMDAwRTAxMDMxODEyMzVCMDIxRDQwOUQ0MjAzRDFFMzFGQUUKKzoxMDFGMDAwMDA1M0IxQzA0MjQwQzA1OUJDMDQ2MUM4NzA4OUIxQjY4RDIKKzoxMDFGMTAwMDFCMTkxMDNCOUI3QjA2OUQ0MDM1MkI3MDJCNzgwMjMzQTEKKzoxMDFGMjAwMEUzMUExQzA0MjQwQzAxMzJCQjA4OUIwNzZERDA4MzE4RjQKKzoxMDFGMzAwMDIwMzMwNDkzMTk3MjAxOUI1RDE4MDEyMzlCMDcyQjQzRTcKKzoxMDFGNDAwMDFCNjgxQjA3MUIwRjlCMDAwNDlFQzA0NjMzNzMwMDk1NDQKKzoxMDFGNTAwMDJCNzgxQjA3MUIwRjlCMDAwNDlEQzA0NjJCNzMwMDlEMTUKKzoxMDFGNjAwMEVCNzhBRDc4MUIwMjFENDMyQjAyMkQwQTJEMDYyRDBFOUEKKzoxMDFGNzAwMDJCNDM1NTAwMkQxODJCODYwNDlCQzA0NjU5NzIwNDlCOTkKKzoxMDFGODAwMDFCN0IyRTFDMDQ5REMwNDY2QjczMzM4RUMwNDY3Mzg2MkMKKzoxMDFGOTAwMDAwOUQyQjc4MUIwNzFCMEY5QjAwMUIwNDFCMEM1OTE4NjMKKzoxMDFGQTAwMDA0MjUzRDQwMEVEMDM0ODcwMzhCMDEzQkIzODMxMzFDQzMKKzoxMDFGQjAwMDFCMTgyMDMzMTk3MTAxOUI1QjE4NUI3ODlCMDA1OTE4MjMKKzoxMDFGQzAwMDA4MzEwMTMyM0IwOTM3RDMwMDJEMDFEMDQzOEIwMEUwQUIKKzoxMDFGRDAwMDAzOEI1NTAwMkQxODAxM0JBQjgzODMxODAzOTMyMDMzRUIKKzoxMDFGRTAwMDE5NzEyMDRCOUQ2QTUzMDAxQjE4MDI5MzlFOEI1ODIzMzYKKzoxMDFGRjAwMDczNDNFQjE4REQxRDAxMzUwMTIzOUIwNzJCNDMxRDY4M0YKKzoxMDIwMDAwMDJCMEU1QjA2MDJEMTA4MzEwMUUwMTVFMDEwMzE4MTIzNkYKKzoxMDIwMTAwMDVCMDIxRDQwOUQ0MjAzRDFFMzFGMDUzQjFDMDQyNDBDQzEKKzoxMDIwMjAwMDAyOUJDMDQ2MUM4NzA4OUIxQjY4MUIxOTEwM0I5QjdCQUYKKzoxMDIwMzAwMDAzOUM0MDM0MjM3MDAxMzIwNzlCQzA0NkQ5ODA1MTFFNTcKKzoxMDIwNDAwMEMzMUQ0OTMzMTk3MDA3NjEwNDJBMDZEMjA2NDk1MzAwOUIKKzoxMDIwNTAwMDFCMTg5OTgzMDEzMjA0MkFGOUQzMDlCMEYwQkMwOEJDREIKKzoxMDIwNjAwMDE4NDcwMDAwNEMyQTAwODBGRkZGMDAwMDcwNDc4MEI1MzEKKzoxMDIwNzAwMDhDQjAwNzFDMTI0ODAxNjgwMTMxMDE2MDM4NjhDMDQ2MDUKKzoxMDIwODAwMDAwOTA3ODY4QzA0NjAxOTBCODY4QzA0NjAyOTAwRDQ4M0MKKzoxMDIwOTAwMDQxNjhDOTY4QzA0NjQxNjAzODFDMDBGMDRGRjhCODY4MTQKKzoxMDIwQTAwMDQwMDkwNkQzMTAyMzAyOTgxODQzMDI5MDY4NDYwMkYwQjQKKzoxMDIwQjAwMEUxRkY2ODQ2MDJGMDlBRkUwQ0IwODBCQzA4QkMxODQ3RUQKKzoxMDIwQzAwMDBDMkIwMDgwNkMwNjAwODAwMEI1OENCMDAxNjhDMDQ2MDcKKzoxMDIwRDAwMDAwOTE0MTY4MDU0QjE5NDMwMTkxMDBGMDJGRjg2ODQ2QzMKKzoxMDIwRTAwMDAyRjA4NEZFMENCMDA4QkMxODQ3MDAwMDAwMDAwMEEwRkQKKzoxMDIwRjAwMDAyNkEwMzY4QzA0NjEzNjA0MDY4QzA0NjUwNjA0MDMyQzAKKzoxMDIxMDAwMDQ4NjhDMDQ2OTA4MEM4NjhDMDQ2RDA4MDQ4NjlDMDQ2Q0MKKzoxMDIxMTAwMDEwODE4ODY4QzA0NjUwODEwODdFQzA0NjkwNzMwODY5NjcKKzoxMDIxMjAwMEMwNDY5MDgxNzA0NzA0NDkwODY4MDAyODAwRDE3MDQ3NzQKKzoxMDIxMzAwMEMyNjhDMDQ2MEE2MEZBRTc2QzA2MDA4MDAyNDkwQTY4NzUKKzoxMDIxNDAwMEMwNDZDMjYwMDg2MDcwNDc2QzA2MDA4MEIwQjQwMDIyRDAKKzoxMDIxNTAwMDEyNEY3QzdGMDEzNDdDNzcwMzIzRkMxRDE5MzQzODYyRDUKKzoxMDIxNjAwMDc5NjIyMzcyMEU0QzI1Njg2QjBDMDVEMjIzNjgxQjBDMTgKKzoxMDIxNzAwMDEwRDEyNDY4QTMwQTBERDMwMTIzMEE0RkMwNDZGQjYyODUKKzoxMDIxODAwMDA5NEYwQTRCQzA0NkRGNjA5OTYwNTg2MDEwMUMxODYwMDgKKzoxMDIxOTAwMDAxMzJGQkU3MTAxQzM4NjQwMTMyRkJFNzAwMDAwMDgwQ0QKKzoxMDIxQTAwMDAwMDAxMDQwQzAwMDE4MDAwMjgxMDAwMDQwMDExODAwMkIKKzoxMDIxQjAwMEYwQjU0NzRGMzg2ODQ3NEU0NzREMDcyMzVCMDJFQzE4OTAKKzoxMDIxQzAwMDAwMjgxREQxMjA2QjAxMzAyMDYzNDQ0OUMwNDYwODYwQkYKKzoxMDIxRDAwMDQzNDg0MTY5MDAyOTEzRDBDMTFENjkzMTA5N0IwMDI5OTkKKzoxMDIxRTAwMDBFRDAwMTIzOUIwNzAxNkQxOTQzMDk2OEMwNDY4MTYxMjgKKzoxMDIxRjAwMEMyNjk5MTQyMDREMEYxNkMwMTMxRjE2NDAxRjA1MEZFRUEKKzoxMDIyMDAwMDM4NjgwMTI4MTdEMTM3NDg0MTY5MDAyOTEzRDBDMTFEMEEKKzoxMDIyMTAwMDY5MzEwOTdCMDAyOTBFRDAwMTIzOUIwNzAxNkQxOTQzMDkKKzoxMDIyMjAwMDA5NjhDMDQ2ODE2MUMyNjk5MTQyMDREMEYxNkMwMTMxRjQKKzoxMDIyMzAwMEYxNjQwMUYwMzVGRTM4NjgwMjI4MkZEMUJCMjMxQjAxNjEKKzoxMDIyNDAwMEVFMTg3MDdCMDAyODAzRDAwMDIwNzA3MzAwRjA0QUZENjgKKzoxMDIyNTAwMDMwN0IwMDI4MDJEMDc4NjgwMkYwQUFGRjFCMjNEQjAxNDQKKzoxMDIyNjAwMEU4MThDMDhCMDQyNjA2NDBFMDZBQjA0MjE0RDBGODY4MzMKKzoxMDIyNzAwMDAxMzBGODYwMTkyODExRDMxQjQ4MDE3QjAwMjkwREQxQ0EKKzoxMDIyODAwMEZGMzA0MTMwNDA3ODAwMjgwOEQxQjg2ODAyRjA5MEZGNTQKKzoxMDIyOTAwMDAwMjBGODYwRTY2MjAxRTAwMDIwRjg2MDM4NjgwMzI4NUEKKzoxMDIyQTAwMDBCRDFFQzFENzkzNEUwNkI4MDA4MDJEMzAyMjAwMkYwRTAKKzoxMDIyQjAwMDA3RkMwMjIzRTA2Qjk4NDNFMDYzMzg2ODAxMzAzODYwMjQKKzoxMDIyQzAwMDAzMjgwMUQ5MDAyMDM4NjBGMEJDMDhCQzE4NDcwMDAwODIKKzoxMDIyRDAwMDNDMDQwMDgwQTA4MjIwNDA2ODBFMDA4MDQwMDExODAwNkQKKzoxMDIyRTAwMDY0MkQwMDgwRTQyQzAwODAyODA1MDA4MEIwQjQxRDQ4RDcKKzoxMDIyRjAwMDg0OEExRDRBMTM4QUMxMUQwOTMxMDEyNzlDNDIwM0QxREEKKzoxMDIzMDAwMDQzOEE1NDhBQTM0MjEwRDAwQjc4MDAyQjBERDA0Qjc4MEYKKzoxMDIzMTAwMDAwMkIwQUQwNDQ4QjkzOEE5QzQyMDREQzEzNEJDMDQ2QUEKKzoxMDIzMjAwMDVGNjA5NzgyMDFFMDAxMzM5MzgyQzM4QjVDMUNDNDgzOUUKKzoxMDIzMzAwMDg0OEJBMzQyMEVEQjg0OEEwNThCMDAyM0FDNDIwNURBMzIKKzoxMDIzNDAwMDQ0OEFDNThBQUM0MjAxREE0QjcwMDBFMDRGNzA0MzgyODgKKzoxMDIzNTAwMDgzODJDMzgzNDE4QUMwNDY1MTgyODA4QUMwNDYxMDgyRUMKKzoxMDIzNjAwMEIwQkM3MDQ3RTgwRTAwODAzQzA0MDA4MDQwMDExODAwQkIKKzoxMDIzNzAwMEY3QjU5MUIwNkI0Njg0MUUxMjk5MTQyOTFBRDkwMDIwMjIKKzoxMDIzODAwMDgxMDA2NzU4QzA0NjU3NTAwMTMwMDAwNjAwMEUxMDI4RTMKKzoxMDIzOTAwMEY2RDMwMDIxMDUyMDg3MDBENjU5NEYxQzNEMDYyRDBFOEYKKzoxMDIzQTAwMDBGMUNCRjAwREU1MTI5MUMwMTMwMDAwNjAwMEUxMDI4NTIKKzoxMDIzQjAwMEYxRDMwOUUwMDAyMDgxMDA2MzU4QzA0NjUzNTAwMTMwM0EKKzoxMDIzQzAwMDAwMDYwMDBFMDYyOEY2RDMwMDIwRTA3MDIwNzI2MDcyMkUKKzoxMDIzRDAwMEEwNzIyMDczNjA3MzEyOTkxNDI5MzdEOTY5NDY4RTFDMzQKKzoxMDIzRTAwMDkxNzgwOTA3MDkwRjg5MDAxNDM5MEQwNjJEMTYwMDI3NjkKKzoxMDIzRjAwMDAwMkQxQkRERjAxOTEwQTkwMEYwM0RGODAwMjgwRUQwQ0IKKzoxMDI0MDAwMDAwMjAxMEE5MDk3ODAwMjkwOUREMDAyMjM5MTg3MjU0MkEKKzoxMDI0MTAwMDAxMzAwMDA2MDAwRTEwQTkwOTc4ODg0MkY2REIxMEE4RUEKKzoxMDI0MjAwMDAwNzgzODE4MDcwNjNGMEVBRjQyRTNEQjY4NDZFMjFEMkUKKzoxMDI0MzAwMDBEMzIwMDIxQUIwODVGMUMwOEQwOEIwMEM0NThDMDQ2ODkKKzoxMDI0NDAwMEQ0NTAwMTMxMDkwNjA5MEU4RjQyRjZEODE0QjBGMEJDMDEKKzoxMDI0NTAwMDA4QkMxODQ3OTBCNDg3MUUwMDIwODkwODRCMUMwOEQwODAKKzoxMDI0NjAwMDgxMDA1NDU4QzA0NjdDNTAwMTMwMDAwNjAwMEU4MzQyNjMKKzoxMDI0NzAwMEY2RDg5MEJDNzA0NzgwQjQwMjc4RDIwNkQyMEUwMDIzMDIKKzoxMDI0ODAwMDAxMjcwMTJBMDFEQzBGNzAxMUUwNDA3OEMwNDYwODcwNzYKKzoxMDI0OTAwMDE0MkEwNEQxMDg0ODAxN0EwMTMxMDE3MjA3RTAwMjJBQTYKKzoxMDI0QTAwMDA1RDAwNTJBMDNEMDA2MkEwMUQwMTUyQTAyRDExODFDMEUKKzoxMDI0QjAwMDgwQkM3MDQ3MzgxQ0ZCRTdFMDgyMjA0MDAwQjUwRjQ4MjUKKzoxMDI0QzAwMDAxMjMxQjA2NDE2OTk5NDMxQTA5NDE2MUQxNjAwMDIxMkEKKzoxMDI0RDAwMEExMjI1MjAzOTE2MTE5MUMwOTRBQzA0NjExNjAxQjIzQjUKKzoxMDI0RTAwMERCMDFDMDE4ODA2OTAwMjgwM0QwMDJGMDYxRkUwOEJDM0YKKzoxMDI0RjAwMDE4NDcwNDQ4NDE4ODAxMzE0MTgwRjhFNzY4MEUwMDgwQTAKKzoxMDI1MDAwMDAwMDAwMEIwRTA4MjIwNDA3MDQ3MDAwMEYwQjU4NkIwQzcKKzoxMDI1MTAwMDk1NEFEMDY4RDcxRDc5MzcwMTI4MDlEMTM4ODkwMDI4MTQKKzoxMDI1MjAwMDA2RDFEMDZGMDIyMzAxNjg5OTQzMDE2MDE0MjAzODgxREQKKzoxMDI1MzAwMDhFNEM2MTZBOEU0OEMzNkI1OTE4QzE2M0EwNkExOTIzMTcKKzoxMDI1NDAwMERCMDFENDE4QTA2MjIxNkEwOTAzMDkwQjgxNDIwNUQxN0QKKzoxMDI1NTAwMDAxMjA0MDA0ODc0OUMwNDYwODYwRjNFMEJCOEE1ODFDNEMKKzoxMDI1NjAwMEI4ODIzRDhCMDEyMDAwMjFBQjQyMDREQkQzMUQ4OTMzQUYKKzoxMDI1NzAwMDU4NzBCOTgyRjk4MzMzMjM5QjAxRDMxODA1OTM1QjY5QTMKKzoxMDI1ODAwMDBGMkI3M0QyMDAyMTdDNEZDMDQ2Mzk2MTIxNkE4QTY4QzMKKzoxMDI1OTAwMDEyMDQxMjBDNEI2ODFFMEMzNjA0RkQxRjA5M0QwMDJFNjAKKzoxMDI1QTAwMDA1RDEzQjJBMDNEMzAxMjNEQjAyOUE0MjAxRDlBODczNDgKKzoxMDI1QjAwMEM4RTAwMTIzOUIwNzA4MzExOTQzMDk2OEMwNDYwMzkxMEQKKzoxMDI1QzAwMDAzQTkwOTg4MDEzMTA5MDQwOTBDNzk4MjQ5MDkwNTMxRjcKKzoxMDI1RDAwMDA5MDYwOTBFNjk0RUMwNDYwMjk2Njk0ODQzNkFDMDQ2MUMKKzoxMDI1RTAwMDAxOTM4MzZBQzA0NjAwOTNDMjFEMTEzMjgwNjkwMDAzQzMKKzoxMDI1RjAwMDAwMEI5MjY4QjMwNzFBNDMxMjY4OTA0MjAxRDEwMTIwODAKKzoxMDI2MDAwMDBERTA5MDQyMDVEOTAwOUIxODFBMDE5QkQyMUE4MjE4M0UKKzoxMDI2MTAwMDAwRTAxMjFBMDEyMDA5MDE5MTQyMDBEMzAwMjAwMTI4OTQKKzoxMDI2MjAwMDY1RDE1MTQ5MjA2OTAwMjg2MkQwMDU5OTQ4NjkwMTMwNzcKKzoxMDI2MzAwMDQ4NjEwMjIwMjE2QUMwNDYwODYwMDBGMEE3RkM3ODYzNjgKKzoxMDI2NDAwMEJFNjA0OTQ5MjI2QUEzNkJEMzE4NjY2QkIzNDIwMEQ5QjYKKzoxMDI2NTAwMDIyNkJDMDQ2QkE2MkJBNkEwQzMyRkE2MjAwMjJGQTYxOTAKKzoxMDI2NjAwMDAzQUE1Mjg4RDIwOTAzRDMwMTIyMDBFMDdCRTAwMEUwRjQKKzoxMDI2NzAwMDAwMjI3QTYwN0E2OEMwNDYwMjYwNzg4QTQxNEU2MDI4RkIKKzoxMDI2ODAwMDA0RENCMDgzNzg4QUMwNDZGMDgzMDhFMDYwMjBCMDgzMjEKKzoxMDI2OTAwMDc5OEFGODZBNDIxODYzNkI5QTQyMDNEOEYxODMwMDIyNjAKKzoxMDI2QTAwMDNBNjMwNUUwMjE2QkMwNDYzOTYzNjE2QjA4MUFGMDgzMTkKKzoxMDI2QjAwMDJENDk3ODZCNDI2OEMwNDZCQTYwODI2OEMwNDZGQTYwQUQKKzoxMDI2QzAwMDAyNjlDMDQ2N0E2MTQwNjlDMDQ2Qjg2MTJFNEJDODE4OUQKKzoxMDI2RDAwMDA0OTAwMEYwMzdGOTA0OTgwMEYwODhGODAwRjBGNkZBNUEKKzoxMDI2RTAwMDc4OEFGMThCODg0MjA0RDFGOTZBMDgxODA0RTAzOEUwNEUKKzoxMDI2RjAwMDMyRTAzQTZCMTAxODQwMUE4MTA3MDJEMDgwMDg4MDAwM0YKKzoxMDI3MDAwMDA0MzA2MTZCMDkxQUEyNkI5MTQyMDBEMjIwNkJDMDQ2NjMKKzoxMDI3MTAwMDIwNjJFODdCMDAyODA4RDAwMDIyRUE3MzA1OTk0ODY5MDYKKzoxMDI3MjAwMDAxMzg0ODYxNzg2QjAwRjA3M0ZBMTg0ODgwNkE4MDA2QjcKKzoxMDI3MzAwMDgwMEUwMTI4MEFEMTIwNkEwMDAzMDAwQjBCNENBMTZBMEQKKzoxMDI3NDAwMDg4NDIwM0QwMDZCMEYwQkMwOEJDMTg0NzAxMjA0MDA0MDIKKzoxMDI3NTAwMDA4NDlDMDQ2MDg2MDA2RTBFMDY4MDAyODAxRDAwMEYwQTMKKzoxMDI3NjAwMEI1RkEwMTIwQTg3M0VERTc2ODBFMDA4MDAwNDAxNDQwMjAKKzoxMDI3NzAwMEE0MkEwMDgwMDAwMDAwQjAyODFBMDA4MDU1NTU1NTU1NDUKKzoxMDI3ODAwMEE4MDMwMDgwNjgxQTAwODBDNDBCMDAwMDAwMDAxMDQwRkQKKzoxMDI3OTAwMDgwQjUwNzFDNzg2QTQwODlGRjIxMDEzMTAxNDAxMDQ4NEIKKzoxMDI3QTAwMDAyRDE4MTZDMDEzMTgxNjQ3OTZBNDk4OTQ5MEIwMkQyNzUKKzoxMDI3QjAwMDQxNkMwMTMxNDE2NDBCNDg0MTZBMDEzMTQxNjI3ODZBRTAKKzoxMDI3QzAwMDM5NkJDMDQ2NDg2MjM4NkIwMEYwRjhGQjM4MUMwMEYwRUIKKzoxMDI3RDAwMEIzRjgwMTIwMDQ0OUMwNDZDODczODBCQzA4QkMxODQ3NDAKKzoxMDI3RTAwMEE0MkEwMDgwQTA4MjIwNDAxODFBMDA4MEY4QjUwNzFDOTcKKzoxMDI3RjAwMDAwMjJGOTFENjEzMTBEMUM3ODZBQzA0NjAwOTA0MDg5QTUKKzoxMDI4MDAwMDAzMEMwMUQyNDAwQTAzRDIzODFDRkZGN0MxRkY2N0UwNzYKKzoxMDI4MTAwMDM1NDhDMDZCMDAwOTFGRDMwODc4NDAwODFDRDIwMDIwM0YKKzoxMDI4MjAwMDQzMDBDQzVBMzE0RTlFMTkzMzIzOUIwMUYzMTgxQjg4NjkKKzoxMDI4MzAwMDlDNDIwRUQwQjg2OTM5NkJDMDQ2ODg2MUY4NjgzOTZCMjQKKzoxMDI4NDAwMEMwNDZDODYwMzgxQzAwRjAyN0Y5MzgxQzAwRjA3NEY4NDYKKzoxMDI4NTAwMDQ2RTAwMTMwMDMyOEUzREIwMjIwNDMwMDVDMThFNDg4RjMKKzoxMDI4NjAwMDIyNEU5RTE5MzMyMzlCMDFGMzE4MUI4ODlDNDIwM0QxRUYKKzoxMDI4NzAwMDAxMjMwMTM4RDg0MkYwREMwMTIzRDg0MkM0RDAxQjRFREEKKzoxMDI4ODAwMDBCMjMxQjAyRjAxODQwNjkwMDI4MjREMDdENjMwMDk4QjgKKzoxMDI4OTAwMDQwODkwMDBDMUZEMjAwMjQyRDIzOUIwMUYwMThDMDZCMkYKKzoxMDI4QTAwMDM1MUMwMDI4MTdEMEZFMUQyRDM2QTIwMDUyMTkyRDIzRUQKKzoxMDI4QjAwMDlCMDFEMjE4RDI2QjM4MUMzMTFDMDJGMDdCRkMwMTI4MjIKKzoxMDI4QzAwMDBFRDAwMTM0QTAwMDQwMTkyRDIzOUIwMUMwMThDMDZCMEQKKzoxMDI4RDAwMDAwMjhFQUQxMDFFMDAxMkEwMkQwMzgxQzAwRjAwOEY4RjMKKzoxMDI4RTAwMEY4QkMwOEJDMTg0NzAwMDBFODFBMDA4MDY4MEUwMDgwOTkKKzoxMDI4RjAwMDgwQjUwNzFDQjg2OTM5NkJDMDQ2ODg2MUY4NjgzOTZCQzgKKzoxMDI5MDAwMEMwNDZDODYwNzg2QTQwODkwMTBDMEVEMjQwMEEwQ0QzRDgKKzoxMDI5MTAwMDM4Njg0MDA4MDJEMzM4MUMwMkYwMENGQzM4MUMwMEYwNjgKKzoxMDI5MjAwMEJCRjgzODFDMDBGMDA4RjgwMkUwMzgxQ0ZGRjczMEZGNTUKKzoxMDI5MzAwMDAxMjA4MEJDMDhCQzE4NDcwMTIxMDA2QjQwNkFDMDQ2REEKKzoxMDI5NDAwMDAxNjA3MDQ3QjBCNEMxMUQzOTMxMDk4Qjg5MDgwOTA0OTEKKzoxMDI5NTAwMDA5MEM4NDZBQzIxRDYxMzIwMDIwMDAyOTBDREQ4NzAwNDkKKzoxMDI5NjAwMDNEMTkwMTIzOUIwNzJCNDMxQjY4QzA0NkQzNTEwMTMwRkYKKzoxMDI5NzAwMDAwMDQwMDBDODg0MkYyREJCMEJDNzA0N0YwQjVBMEIwOTgKKzoxMDI5ODAwMDAxMjM5QjA3QzExRDIxMzExOTQzMDk2OEMwNDYwQjkxRTIKKzoxMDI5OTAwMEMxMUQ1MzMxMTk0MzFGOTEwOTY4MDFBRkZBMUQzOTMyMjYKKzoxMDI5QTAwMDFFOTIxN0FCNTk4MDNBNDkwMTIzOUIwNzBBNkExMzQzQzkKKzoxMDI5QjAwMENDMUQxMTM0ODk2OTA5MDMwOTBCMjI2OUU1NjhDMDQ2RjkKKzoxMDI5QzAwMDFEOTVGQzFEMzkzNDY0OEI2NDA5MDUzNDI0MDYyNDBFREUKKzoxMDI5RDAwMDFDOTQ1NjFBMUI5NjFDOUMyRTRBQzA0NjAwOTIwMTI2MzcKKzoxMDI5RTAwMDFEOUQxQTY4OTE0MjAxRDEzMjFDMEJFMDkxNDIwM0Q5MUUKKzoxMDI5RjAwMDUyMUIxQjlFQjUxODAwRTA1NTFBMDEyMjI0MDFBQzQyNUYKKzoxMDJBMDAwMDAwRDMwMDIyMDEyQUU2RDE5MTA3MDE0MzA5NjhDMDQ2OUMKKzoxMDJBMTAwMDM5NjA5MzA3MDExRDE5NDMwOTY4QzA0Njc5NjBDMTFEREIKKzoxMDJBMjAwMDAxMzExOTQzMDk2OEMwNDZCOTYwMUY5OTA5NjgxRTlBQTcKKzoxMDJBMzAwMEMwNDY1MTgzQzExRDFEMzExOTQzMDk2OEMwNDYzODYzMjIKKzoxMDJBNDAwMDc5NjJDMTFEMTEzMTE5NDMwOTY4QzA0NkI5NjFDMTFEQzAKKzoxMDJBNTAwMDA1MzExOTQzMDk2OEMwNDZGOTYwQzExRDE3MzExOTQzOTIKKzoxMDJBNjAwMDA5NjhDMDQ2Rjk4MzBFMzAxODQzMDA2OEMwNDZGODgxRjMKKzoxMDJBNzAwMDM4Njg0MDA4MDJEMzM4MUMwMkYwNUNGQjM4MUMwMEYwQjgKKzoxMDJBODAwMDBCRjgzODFDRkZGNzU4RkYyMEIwRjBCQzA4QkMxODQ3MDMKKzoxMDJBOTAwMEE4MDMwMDgwNTU1NTU1NTVGOEI1MDcxQ0Y4MUQzOTMwNjkKKzoxMDJBQTAwMDQxOEIzOTRBOTE0MjAwREQ0MjgzNDI4QkMwNDYwMDkyRkQKKzoxMDJBQjAwMDAxMjAzQTFEMDZDQUJCNkEwMkYwMEVGRjMzNEFDMDQ2MjcKKzoxMDJBQzAwMDAwOTIzMzRFMzA2QTMzNENFMTZENDExODM4NkJDMzFEQjAKKzoxMDJBRDAwMDA1MzMwMTIwNzI2QTAyRjBGQkZFRTA2RDE4MzAwMDI1MUMKKzoxMDJBRTAwMEIxNkE4MTQyMDFEOEU1NjUwMEUwRTA2NTJGMjM5QjAxRDIKKzoxMDJBRjAwMDIwMUNFMTZERTQxODIyNjg5MjAwMjc0QkMwNDY5OTUwRDMKKzoxMDJCMDAwMDI2NDhDMTZCNEEwODA1RDM0OTA4NDkwMEMxNjMwMTIwMjIKKzoxMDJCMTAwMDAxRjBENkZGMjI0QTFGNDhDMTFEODkzMTBCNzgwMDJCRDYKKzoxMDJCMjAwMDAyRDA0OTc4MDAyOTAwRDExRTRBQzA0NjAwOTIyMDY4OTAKKzoxMDJCMzAwMDgwMDAxOTRCQzMxODA1Q0VDMTFEMTEzMTAxMjAwMkYwRDAKKzoxMDJCNDAwMEM3RkUxNDQ4MjE2ODAxMzEyMTYwMTcyOTAwRDMyNTYwOTAKKzoxMDJCNTAwMDM5NkJDMDQ2MEQ2NTc5NkEzQTZCQzA0NjUxNjIzMzIzQzIKKzoxMDJCNjAwMDlCMDFDMDE4ODE2ODAwMjkwM0QxMzk2QkMwNDY4MTYwODAKKzoxMDJCNzAwMDA0RTAzOTZCQzI2OEMwNDYxMTY1Mzk2QkMwNDZDMTYwNUMKKzoxMDJCODAwMEY4QkMwOEJDMTg0NzAwMDBFQTA1MDAwMDE4MDAxNDAyNTEKKzoxMDJCOTAwMDdDMjkwMDgwNjgwRTAwODA0NDgyMjA0MEU4MEUwMDgwN0UKKzoxMDJCQTAwMDA0MDAwMDAyMDQwMDAwMDNGMEI1MTE0RUZGMjUwMTM1QkEKKzoxMDJCQjAwMDEwNEZDMDQ2MzU2MDc4NjkwMTM4Nzg2MUJDNjgwMDJDRDgKKzoxMDJCQzAwMDEwRDAyMDZEQzA0NkI4NjAyMDFDMDBGMDIxRjgyMDFDRjkKKzoxMDJCRDAwMDAwRjAwNEZBMDg0ODgwNkEwMDBDMDAwN0U5RDFGMEJDNTQKKzoxMDJCRTAwMDA4QkMxODQ3MDU0OEMxNzkwMTMxQzE3MUY3RTcwMDAwRjkKKzoxMDJCRjAwMDAwMDAwMEIwMjgxQjAwODAwMDAwMTA0MEEwODIyMDQwOTAKKzoxMDJDMDAwMDAxMjA4MDAzMDE0OUMwNDYwODYwNzA0NzAwMDAwMEIwMDEKKzoxMDJDMTAwMDkwQjUwNzFDMzg2OEMwMDgwOUQzMUQ0ODAxNkEwMTM5RkUKKzoxMDJDMjAwMDAxNjIyMDMwMDA3OTAwMjgwMUQwRkVGN0U5RkQwMTIzODAKKzoxMDJDMzAwMDlCMDdGODFEMUQzMDE4NDMwMDY4MTY0QzYxNkE4MTQyREQKKzoxMDJDNDAwMDIxRDEwMTFDMTk0MzA5NjgwOTA0MDkwQzAxMjkxQUQxNzEKKzoxMDJDNTAwMDAwRjAyMkY4NjA2MjYwNkEyMTZBODg0MjA1RDAwMTIxOTIKKzoxMDJDNjAwMDg5MDcwMTQzMDk2ODA5MDRGMkQwNTEyMTg5MDM2MjZBODYKKzoxMDJDNzAwMDIzNkI5QTQyMDJEMTYwNkJBMjZCODAxQTA0MzhDODYwNDEKKzoxMDJDODAwMDkwQkMwOEJDMTg0NzAwMjA3OTZBQzA0NjA4NjBGN0U3ODYKKzoxMDJDOTAwMDZDMDYwMDgwRTgxQTAwODAwMTIzOUIwN0MxMUQwMTMxRUEKKzoxMDJDQTAwMDE5NDMwOTY4MDkwNDA5MEMwODE4MEQzMDgxMDcwMkQwN0UKKzoxMDJDQjAwMDgwMDg4MDAwMDQzMDA0NDk4QTZCMTIxODRCNkI5QTQyREEKKzoxMDJDQzAwMDAwRDkwODZCNzA0NzAwMDBFODFBMDA4MDAwQjUwNDQ4N0UKKzoxMDJDRDAwMEMwNjgxMDI4MDFEMzAwRjAwNUY4MDhCQzE4NDcwMDAwQjAKKzoxMDJDRTAwMEU4MUEwMDgwODhCNTBDNEYzODc5MDAyODExRDEwQjQ5QkIKKzoxMDJDRjAwMDEwMjAwMkYwRjVGRDAwMjgwQkQwMDEyMDM4NzEwODRBQTEKKzoxMDJEMDAwMEMwNDYwMDkyMDc0ODQyNjgwNzRCMDE2ODAwMjAwMkYwNjUKKzoxMDJEMTAwMERGRkQ4OEJDMDhCQzE4NDdGODFBMDA4MEY1MkNGRkZGQkYKKzoxMDJEMjAwMDEwMDAzNTAyN0MyOTAwODA0NDgwMjA0MDkwQjUwMTIwQUQKKzoxMDJEMzAwMDQwMDIxMDQ5QzA0NjA4NjAwRjRGMTAyMUY4MUQzRDMwNzkKKzoxMDJENDAwMDAyRjA0Q0ZDMTkyM0RCMDFGQzE4RTA2ODAwMjgwMUQwREMKKzoxMDJENTAwMDAwRjAxNEY4MDAyMEM5MjMxQjAxRjkxODA4NzFFMDY4N0QKKzoxMDJENjAwMDEwMjgwNEQzMDEyMEJCMjMxQjAxRjkxODQ4NzM5MEJDMjEKKzoxMDJENzAwMDA4QkMxODQ3MDAwMDAwQjA2ODBFMDA4MEY4QjUzNzQ4NUUKKzoxMDJEODAwMDE5MjNEQjAxQzExOEM5NjgzNTREMTAyOTAwRDkxMDIxNUMKKzoxMDJEOTAwMDY5NjIzMjQ4QzE2QzAwNkU4MTQyMDdEOTA4MUEwNzA5N0UKKzoxMDJEQTAwMDAwMjQ2ODZBQjg0MjEyRDIwNzFDMTBFMDgxNDIyQUQyN0QKKzoxMDJEQjAwMDJDNEE1MjZCMTAxQTA3MDk2ODZBQjg0MjA1RDkwQzA5RTcKKzoxMDJEQzAwMDM5MTk4ODQyMDNEMkM0MUIwMUUwMDAyNDA3MUMzRTE5QjQKKzoxMDJERDAwMDMwMDEyNTQ5MDJGMDg0RkQwMDI4M0REMDIzNDgwMDJDMTUKKzoxMDJERTAwMDFBRDExRTQ5M0EwMTZGNjIwOTZFOEMxODFENEQ2QjZCMkEKKzoxMDJERjAwMEEzNDIwMEQ4RTQxQTFFNEIxQTQzMDA5MkVBNkE1MTE4MDMKKzoxMDJFMDAwMDJBNkIwMzFDMjBFMDFCNDgwMTZCMDEzMTAxNjMwMDIwODkKKzoxMDJFMTAwMDY4NjJGOEJDMDhCQzE4NDcxMDQ5MjQwMTNGMDExMTIyMjAKKzoxMDJFMjAwMDUyMDUzQTQzNkU2MjAwOTIwRTRERUE2QTA5NkU1MTE4REQKKzoxMDJFMzAwMDAzMUMwNjFDMDAyMDJBNkIwMkYwNEFGRDBDNEEyMjQzQTgKKzoxMDJFNDAwMDAwOTJCQjE5RTk2QTJBNkIwMDIwMDJGMDQxRkQwMzQ4OTkKKzoxMDJFNTAwMEMwNDYwNDY2MDBGMDEwRjgwMTIwREFFNzY4MEUwMDgwMzIKKzoxMDJFNjAwMDI4MUIwMDgwN0MyOTAwODA1RDJFRkZGRjQ0ODAyMDQwQ0QKKzoxMDJFNzAwMDAwMDAzNjAyQTA4MjIwNDAwNDQ4MDE2RTA0NEE4MDMwREYKKzoxMDJFODAwMEQxNjAwMjIzQzE2QjE5NDNDMTYzNzA0NzY4MEUwMDgwOTMKKzoxMDJFOTAwMDkwRUUyMDQwRjBCNTg0QjAwMTIwODAwMjFDNDlDMDQ2NkQKKzoxMDJFQTAwMDA4NjAwMDI3MUI0RTMzMjM5QjAxRjUxODY4NkEwMDI4MzEKKzoxMDJFQjAwMDFERDkxOTRDNjg0NjEwMjEwMkYwOTBGQjY4NDYwMEYwQkQKKzoxMDJFQzAwMDMzRjgwMDI4MDREMDE1NDk0ODY5MDEzMDQ4NjEwQUUwMDgKKzoxMDJFRDAwMDEzNDk2MDdCMDEzMDYwNzM4ODc5MDEzMDg4NzExMTQ4MzMKKzoxMDJFRTAwMDAwNjgwMkYwNjVGOTY4NkEwMTM3Qjg0MkUyRDhCQjIzOEUKKzoxMDJFRjAwMDFCMDFGMDE4ODE3QjAwMjkwM0QwMDAyMTgxNzNGRkY3QUIKKzoxMDJGMDAwMDA1RkJGRkY3RTNGRTA0QjBGMEJDMDhCQzE4NDcwMDAwNjcKKzoxMDJGMTAwMDAwMDAwMEIwNjgwRTAwODBCMDgyMjA0MDA4ODMyMDQwOEUKKzoxMDJGMjAwMEEwODIyMDQwNTgwNDAwODA5MEI0MTc0RjE5MjNEQjAxODEKKzoxMDJGMzAwMEY5MTgwMDIyQ0I2ODAwMkIyM0QwMDEzQkNCNjAzMzIzNTAKKzoxMDJGNDAwMDlCMDFGRjE4QkI2OTFDNkRDMDQ2QkM2MTA0NjhDMDQ2OEMKKzoxMDJGNTAwMDVDNjA0NDY4QzA0NjlDNjA4NDY4QzA0NjFDNjFDMDY4NzAKKzoxMDJGNjAwMEMwNDY1ODYxMUE2NTA4Njk0MjFDMEE2MTAwMjgwM0QwRUUKKzoxMDJGNzAwMDM4NkFDMDQ2MDM2NTAwRTBGQjYxM0I2MjE4MUM5MEJDRTgKKzoxMDJGODAwMDcwNDcxMDFDRkJFNzAwMDA2ODBFMDA4MDBBNEEzMzIzREMKKzoxMDJGOTAwMDlCMDFEMTE4Qzg2OTE5MjNEQjAxRDIxODEzNjkwMDJCRDIKKzoxMDJGQTAwMDA2RDAwMTNCMTM2MUNBNjkxMjZEQzA0NkNBNjE3MDQ3MDEKKzoxMDJGQjAwMDAwMjExMTYxRkJFNzAwMDA2ODBFMDA4MDA2NEExMTY5REMKKzoxMDJGQzAwMDRCMUMxMzYxNDAzMjAwMjkwMUQwRDE2OTAwRTAwMDIxN0YKKzoxMDJGRDAwMDAxNjVEMDYxNzA0NzAwMDBFODFBMDA4MDA2NEFEMTY4OTgKKzoxMDJGRTAwMDRCMUNEMzYwNDAzMjAwMjkwMUQwOTE2OTAwRTAwMDIxRTAKKzoxMDJGRjAwMDAxNjU5MDYxNzA0NzAwMDBFODFBMDA4MDkwQjQwMDIxREMKKzoxMDMwMDAwMDBGNEE5Nzg5OTI2QTRCMDAxQjE4OUI4QTAwMkIxMkQwOUIKKzoxMDMwMTAwMEJCNDIxMERDMUMxQzU4MjM2MzQzRDMxOERDMUY0OTNDMDMKKzoxMDMwMjAwMDAxMjM5QjA3MjM0MzFCNjgxQjA2MUIwRTAzMkIwMkQwQTcKKzoxMDMwMzAwMDAwMjA5MEJDNzA0NzAxMzEwNDI5RTREMzAxMjBGOEU3NTcKKzoxMDMwNDAwMDRDMkEwMDgwRjdCNTg2QjAzRDRBMDcxQ0QxNjk4RjQwRjUKKzoxMDMwNTAwMDAzMUMxNDZBRTM0MDVGNDAwNzlFOEU0MDc3NDBDRjQwRDgKKzoxMDMwNjAwMDk0NjlDMDQ2MDU5NDAzMUNBMzQwMDAyNTE0NjlDMDQ2MUEKKzoxMDMwNzAwMDA0OTQwMDJDNUREOTFDMUMzMjRFMjY0Mzk0NjlFNjQwMTIKKzoxMDMwODAwMDMzMUMwMzk2NTM2QUMwNDYwMjkzRDI2QUMwNDYwMTkyMkIKKzoxMDMwOTAwMEJCMDAwMjlBRDI1ODEzMUMwNTlDRTM0MDAzOUNBMzQyMzgKKzoxMDMwQTAwMDNFRDE4QTQwQ0E0MDE0MUM2MzAwMUIxOTVCMDEwMTlBN0YKKzoxMDMwQjAwMEQyMTgwMTIzOUIwN0Q2MUQwMTM2MzM0MzFCNjgxQjA2MUMKKzoxMDMwQzAwMDFCMEUwMzJCMkNEMTAxMjM5QjA3RDYxRDUxMzYzMzQzRjYKKzoxMDMwRDAwMDFCNjgwNzlFMUU0MDAwOTYwMTIzOUIwN0Q2MUQ0OTM2OUMKKzoxMDMwRTAwMDMzNDMxQjY4ODM0MjFCRDEwMTIzOUIwN0Q2MUQ0RDM2RkEKKzoxMDMwRjAwMDMzNDMxQjY4MDA5RUIzNDIxMkQxMDEyMzlCMDcxQTQzM0UKKzoxMDMxMDAwMDEyNjgxMjA0MTIwQzA4OUIzMjJCMDREMTAyMkEwN0QxMzgKKzoxMDMxMTAwMDIwMDQwMDE0MEZFMDA4OUIzMzJCMDFEMTAxMkFGN0QwQzMKKzoxMDMxMjAwMDA0OUEwMTM3OTc0MjAwRDMwMDI3MDQ5QTAxMzVBQTQyMzYKKzoxMDMxMzAwMEFFRDgwMDIwQzA0MzA5QjBGMEJDMDhCQzE4NDcwMDAwNUUKKzoxMDMxNDAwMDRDMkEwMDgwMDAwMDAwODBGMEI1Mjc0RDY4NjkwMDI4RjcKKzoxMDMxNTAwMDA2RDAyNjQ4MDA2ODAyRjAyQkY4RjBCQzA4QkMxODQ3REYKKzoxMDMxNjAwMDIzNEMwMDI2QTA2ODIzNEYwMDI4MTZEMDBGRTAyODZBQzEKKzoxMDMxNzAwMDAyMjgwMkQzMDEyMDM4NzEwRkUwQTY2MEZERjdERUZFQzEKKzoxMDMxODAwMDAwMjhFQUQxMjg2QTAyMjgwMUQzMDEyMDM4NzFFODY4QjIKKzoxMDMxOTAwMDAwMjgwMkQwMzg3OTAwMjhFOUQwNjg2ODAwMjgxQkQwQzAKKzoxMDMxQTAwMDAxMjBBMDYwRkVGN0JDRkIwMDI4RDZEMTY4NjgwMDI4OEIKKzoxMDMxQjAwMEY2RDExMUUwMDAyOEQwRDEyODZBMDIyODAyRDMwMTIwREMKKzoxMDMxQzAwMDM4NzFDQUU3QTY2MEZERjdCOUZFMDAyOEM1RDEyODZBQTQKKzoxMDMxRDAwMDAyMjgwMUQzMDEyMDM4NzFFODY4MDAyOEJERDAzODc5NzEKKzoxMDMxRTAwMDAwMjhFN0QwQjlFNzAwMDA2QzA2MDA4MDVDMDQwMDgwOEUKKzoxMDMxRjAwMDRDMkEwMDgwOEMwNjAwODA3MDQ3MDAwMDcwNDcwMDAwNTkKKzoxMDMyMDAwMDcwNDcwMDAwOTBCNTQwMjAxRDQ5QzA0NjA4NjAwMUYwOUQKKzoxMDMyMTAwMDlERkMwMzIzMUIwNzQxNjgxOTQwMEMwRjYxMDEwOTFCMkEKKzoxMDMyMjAwMDg5MDAxODRBOEYxODAxMjEzOTgwODE2QUMwNDY3OTY1NjIKKzoxMDMyMzAwMDQxNkFDMDQ2Nzk2N0I5NkNGQTZDODkxOEI5NjQwMDIxOTMKKzoxMDMyNDAwMEY5NjRCQTZCM0I2REQyMThCQTYzMzk2NTQyNkEyMDMyQjEKKzoxMDMyNTAwMDUxNzE3OTZEN0E2RkQyNkRDMDQ2MTE2MEZDRjdDQUZGNkIKKzoxMDMyNjAwMDIwMDEwOTQ5NDAxODE5MjNEQjAxQzAxODQxNkIwMTM5QkQKKzoxMDMyNzAwMDQxNjM3ODZGMDFGMEM2RkI5MEJDMDhCQzE4NDcwMDAwQTIKKzoxMDMyODAwMDAwMDAwMEIwNUMyQjAwODBBMDFDMDA4MEYwQjU0MDIwNDYKKzoxMDMyOTAwMDEyNDlDMDQ2MDg2MDAxRjA1OUZDMDcxQzQwNjgwMzIzMkUKKzoxMDMyQTAwMDFCMDcxODQwMDYwRjcwMDE4MDFCODAwMDBDNDk0NDE4NTIKKzoxMDMyQjAwMEI4NkFDMDQ2NjA2NTc4NkFDMDQ2NjA2NzgwNkYwNTFENjEKKzoxMDMyQzAwMEU1NjNCOTY5MjgxQzAyRjA4OUY5MzgxQzIxMUMzMjFDRkQKKzoxMDMyRDAwMDJCMUMwMEYwMjBGOEYwQkMwOEJDMTg0NzAwMDAwMEIwMjAKKzoxMDMyRTAwMDVDMkIwMDgwRjBCNTRCNkY5QjZGMUYxRENGNjMwNTY4OTMKKzoxMDMyRjAwMDAwMjM4NDY5QTQwODA4RDA5QzAwMkU1OUMwNDYzRTUxODIKKzoxMDMzMDAwMDg0NjlBNDA4MDEzMzlDNDJGNkQ4M0IxQzAwRjAwM0Y4MDIKKzoxMDMzMTAwMEYwQkMwOEJDMTg0N0ZGQjU4MUIwMDQxQzFEMUMwRjFDNzUKKzoxMDMzMjAwMDQ2NDgwMTY5MDEzMTAxNjFGOTFENTEzMUJENjUwMDkxQzYKKzoxMDMzMzAwMDIwMUNGREY3NURGQ0Y4NkQ0MDA5MzZEMkI4NkQwNjdCQTgKKzoxMDMzNDAwMDQzN0IxQjAyMUU0MzE3MjE0OTAyMDE3MzBCMEE0MzczN0YKKzoxMDMzNTAwMDAwOTkyMDFDRkRGNzRDRkNCODZEQzA0NjA2NzMzMzBBN0IKKzoxMDMzNjAwMDQzNzNGODZENDAwOTIwRDI2MDY4MDEwNDA5MEMwMzk4OEEKKzoxMDMzNzAwMDAxRjBDQ0ZDNjA2ODMyNEIxODQzNjA2MDIwMUMwMUYwMDcKKzoxMDMzODAwMDM1RkQwMDI1N0Q2MEJENjAzRDY0N0Q2NDIwMUNGQ0Y3M0IKKzoxMDMzOTAwMDMxRkYzODg4NDAyMzE4NDMzODgwN0Q2MjI5NDhDMDQ2NzEKKzoxMDMzQTAwMEI4NjIzODFDMDBGMEEwRkI0NEUwMjA2ODAxMjM5QjA3QjIKKzoxMDMzQjAwMDA4MzgxODQzMDA2OEMwNDY3ODY0NjA2ODAyMDQxMjBDM0MKKzoxMDMzQzAwMDc4NkUwMTI2QzExRDBEMzE4QTQyMDJEMjNBNjQwODFDNzIKKzoxMDMzRDAwMDBFRTA0MTE5ODk4OUYwMjMxOTQwMDkwOTg5MDA0MDE4MzQKKzoxMDMzRTAwMEY4NjBGOTYxNjE2ODA5MDQwOTBDODE0MjE2RDIzOTY0RjgKKzoxMDMzRjAwMDYzNjgxOTA0MDkwQzQwMUEwMzMwODAwODgyMDBBMDYxMzgKKzoxMDM0MDAwMDIwNjgwOTE4OUIxODYzNjBDMzFGMDUzQjM4MUMwMEYwMzcKKzoxMDM0MTAwMEI2RkE3RTgwMjAxQzAwRjBCRkZCMEJFMEI5NjgwODFBRUEKKzoxMDM0MjAwMDAwMjU3ODYyQkQ2MjM4MUMwMEYwM0NGQzIwMUMzOTFDNzEKKzoxMDM0MzAwMDAwRjA2NEY4MDVCMEYwQkMwOEJDMTg0NzBDMkIwMDgwMDUKKzoxMDM0NDAwMDAwMDAwMDgwMDEwMDAwQzBGMEI1MDQxQzBGMUMzODZDQTcKKzoxMDM0NTAwMEY5NkIwRDE4MjE2ODQxMTgwMDIwQTI2OTAwMkEwQkQ5QzgKKzoxMDM0NjAwMDgyMDA1NjE4MDEyMzlCMDczMzQzMUI2OEMwNDZBQjUwQUMKKzoxMDM0NzAwMEEyNjkwMTMwODI0MkYzRDg3ODZFRjk2QjA5MTg4OTg5MDQKKzoxMDM0ODAwMEYwMjMxOTQwMDkwOTg5MDA0MDE4Rjg2MEY5NjEyMDY4QTMKKzoxMDM0OTAwMDAxMjM5QjA3MDgzODE4NDMwMTY4Nzg2Q0ZDRjc5NUZGRjcKKzoxMDM0QTAwMDc4NjQ2MDY4MDEwNDA5MENGODY4ODE0MjE5RDIzOTY0QjMKKzoxMDM0QjAwMDYzNjgxOTA0MDkwQzQwMUEwMzMwODAwODgyMDBBMDYxNzcKKzoxMDM0QzAwMDIwNjgwOTE4OUIxODYzNjBDMzFGMDUzQjM4MUMwMEYwNzcKKzoxMDM0RDAwMDU2RkEwMTIwNzg4MDIwMUMwMEYwNUVGQkYwQkMwOEJDOEUKKzoxMDM0RTAwMDE4NDdCOTY4MDgxQTc4NjIwMDIwQjg2MjM4MUMwMEYwRTIKKzoxMDM0RjAwMEQ5RkIyMDFDMzkxQzAwRjAwMUY4RUZFN0YwQjU4NEIwQ0YKKzoxMDM1MDAwMDA0MUMwRjFDOEU0ODQxNjkwMTMxNDE2MTAzMjAwMDA3RjIKKzoxMDM1MTAwMDYxNjgwODQwMDYwRjBBMDQxMjBDMjA2ODExMThGQjY4NDUKKzoxMDM1MjAwMEQyMUE3QjY4OUQxQUMzMUYwNTNCMzgxQzJBMUMwMEYwNjkKKzoxMDM1MzAwMDI2RkEwMDIwNzg4MDIwMUMwMEYwMkVGQjYwNjg0MDE5REQKKzoxMDM1NDAwMDAxMDQwOTBDNjA2MDMwMUMwMUYwRTBGQjdENEUwQjIzOTAKKzoxMDM1NTAwMDFCMDJGMDE4MDA2OTAwMjgxOUQwMDAyNTJEMjM5QjAxQkIKKzoxMDM1NjAwMEYwMThDMDY4MDAyODEyRDBBQTAwOTIxOTJEMjM5QjAxRTAKKzoxMDM1NzAwMEQyMThEMjY4MjAxQzM5MUMwMUYwMUNGRTAxMzVBODAwQUQKKzoxMDM1ODAwMDgwMTkyRDIzOUIwMUMwMThDMDY4MDAyOEVDRDFGODZCNkUKKzoxMDM1OTAwMDAxMUY4QTFDRkE2M0ZBNjg3RDZDMDBGMEJCRjlDMDQzMTYKKzoxMDM1QTAwMDAxMDQwOTBDMjgxQ0ZDRjcxMEZGMDM5MEY5NkIzQTZFMUMKKzoxMDM1QjAwMDhFMTgyMDY4MTIxODAxOTI3QTZFOEQxODExMTgwMjkxRDcKKzoxMDM1QzAwMEM4MUQwOTMwRTA2MEIxODgwODAyMDkwQTA5MDYwOTBFMjEKKzoxMDM1RDAwMDA4NDMwMDA0MDAwQzc4NjE2ODY4MDEwRUZGMjIxMjA0QTEKKzoxMDM1RTAwMDAyNDAxMjBBMTE0M0ZGMjIxMjAyMDI0MDEyMDIxMTQzNEEKKzoxMDM1RjAwMDAwMDYwODQzMzg2MUE4ODkwOTIzMUIwMjE4NDBCODYxRjYKKzoxMDM2MDAwMEE4ODk5ODQzQTg4MUE4ODkwMjk5QzA0Njg4ODEwMDIwOEEKKzoxMDM2MTAwMDcwODBCMDgwNzA4MTY4NjAyODgyQjk2RTMwMUNGQ0Y3QzEKKzoxMDM2MjAwMEU4RkUzODg2RkE2OTMwMUMyOTFDRkNGNzAzRkY3ODg2MEYKKzoxMDM2MzAwMDNEOEU3ODhFMDM5OUZDRjdDOEZFMDA5MDYwNjgwMDA0MDgKKzoxMDM2NDAwMDAwMEMzOTZFNDExQTA5MDQwOTBDN0E2RTgyMUExMzA0QUYKKzoxMDM2NTAwMDFCMEMxQTAyMUIwQTFBNDMxNjA0MzYwQ0JBNjg4MjQyNjMKKzoxMDM2NjAwMDAxRDIwMDIwMDBFMDEwMUFCODYwMDgwMjA5MTIwOTA2MTEKKzoxMDM2NzAwMDA5MEUwODQzMDEwNDA5MEMwMTk4QzA0NjQxODAyODFDMkEKKzoxMDM2ODAwMEZDRjdBM0ZFMDUxQzAwOTgzMTFDRkNGNzlFRkUwNjFDRUYKKzoxMDM2OTAwMDc4NjkwMDA0MDAwQzAxMDIwMDBBMDg0MzAxMDQwOTBDQzcKKzoxMDM2QTAwMDAxOThDMDQ2ODE4MDI4MUNGQ0Y3OEZGRTc5NjkwMTMxQTIKKzoxMDM2QjAwMEMwNDM3OTYxMDE5QUMwNDY1MDgxMzg2OTAxMEVGRjIyRUEKKzoxMDM2QzAwMDEyMDQwMjQwMTIwQTExNDNGRjIyMTIwMjAyNDAxMjAyQTcKKzoxMDM2RDAwMDExNDMwMDA2MDE0MzMwMUNGQ0Y3NzdGRTM5Njk3QTY4MTQKKzoxMDM2RTAwMDg5MTgzOTYxQjk2ODAwMjkwOUQxMDI5OTg5ODlCQTY5QUIKKzoxMDM2RjAwMDExNDMwMjlBQzA0NjkxODFCOTY5RkNGNzY2RkUyMDgyQTcKKzoxMDM3MDAwMDAwMjA2MDgyRjg2RDQxMDgxNkQzODAwQTBBRDM2MDY4RjEKKzoxMDM3MTAwMDEwMzgwMTA0MDkwQzA4MDIwOTBBMDg0MzIxNjhDMDQ2NTAKKzoxMDM3MjAwMDA4ODIwOUUwNjA2ODBDMzgwMTA0MDkwQzA4MDIwOTBBRTMKKzoxMDM3MzAwMDA4NDMyMTY4QzA0Njg4ODEwNEIwRjBCQzA4QkMxODQ3MjMKKzoxMDM3NDAwMDBDMkIwMDgwNjgwRTAwODBGMUI1ODRCMDZFNEQyODY5QTYKKzoxMDM3NTAwMDAxMjIwNDk5OEE0MDkwNDMyODYxMDQ5ODQzMDExODFBNzEKKzoxMDM3NjAwMDgwMDAxNjFDNjk0OTQ0MThFMDZCQzA0NjAwOTBBMDY4QjAKKzoxMDM3NzAwMDAwMjgwMUQxMDAyNjI2RTA2NTQ4NDE2OTAxMzE0MTYxRjgKKzoxMDM3ODAwMDA0OThGQ0Y3MDlGRDA3MUMwM0QxMjg2OTMwNDMyODYxMjAKKzoxMDM3OTAwMEI1RTBBMDY4NjU2OEE4NDIwMEQyMDUxQ0ExNkNBOTQyRUEKKzoxMDM3QTAwMDE2RDI0MDFBNjI2QTEwMUEwMDI2NjA2MkE2NjBBNjYyRUIKKzoxMDM3QjAwMDIwODg0ODIzMTg0MzIwODAwRDFDMDlEMTM4MUNGQ0Y3QjEKKzoxMDM3QzAwMDE5RkQwMzIwNjA4MDY2NjAyMDFDMDBGMDhERjk5NkUwRjIKKzoxMDM3RDAwMEUxNjgzODY4MDkxOEMzMUYwNTNCMjAxQzAyMzkyQTFDMDAKKzoxMDM3RTAwMDAwRjBDREY4MzgxQzAwRjBEN0Y5RTA2ODQ2MTk3ODY4ODkKKzoxMDM3RjAwMDMwNDM3ODYwMDQ5ODMxMUMwMUYwODhGQTIxNkUwMDk4RkIKKzoxMDM4MDAwMDA4MTgwMTkwNzAxQTAwMDQwMDBDNjE2RTcxMUEwQTA0MDUKKzoxMDM4MTAwMDEyMEMxMTAyMTIwQTExNDMwOTA0MDkwQzAyOTEwMTAyNEYKKzoxMDM4MjAwMDAwMEEwODQzMDEwNDA5MEMwMTk4QzA0NjQxODAyMDhFMUIKKzoxMDM4MzAwMEZDRjdDQkZEMDYxQzYwOEUwMjk5RkNGN0M2RkQwMzkwRDkKKzoxMDM4NDAwMDYwNjkwMTA0MDkwQzA4MDIwOTBBMDg0MzAxMDQwOTBDMTMKKzoxMDM4NTAwMDAxOThDMDQ2ODE4MDMwMUNGQ0Y3QjdGRDYxNjkwMTMxRDkKKzoxMDM4NjAwMEMwNDM2MTYxMDE5OUMwNDY0ODgxNjA2RTAwOTk0NjE4NjUKKzoxMDM4NzAwMDIwNjkwMTBFRkYyMjEyMDQwMjQwMTIwQTExNDNGRjIyQTYKKzoxMDM4ODAwMDEyMDIwMjQwMTIwMjExNDMwMDA2MDE0MzcxNjAwMzk4QzQKKzoxMDM4OTAwMEZDRjc5QkZEMjE2OTQ5MTkyMTYxQTE2ODQ5MUJBMTYwQzEKKzoxMDM4QTAwMDA2RDFCMTg5QTI2OTExNDNCMTgxQTE2OUZDRjc4REZERUYKKzoxMDM4QjAwMDM4ODI2MTZFMzg2ODA5MTgwRTMxRjk2MEUyNjgwMDk5NDMKKzoxMDM4QzAwMDA0MzgwMEYwNENGODAyMjA3ODgyRTA2RDQxMDgxNkQzRUQKKzoxMDM4RDAwMDgwMEEwQUQzNzg2ODEwMzgwMTA0MDkwQzA4MDIwOTBBMjIKKzoxMDM4RTAwMDA4NDMzOTY4QzA0NkM4ODEwOUUwNzg2ODBDMzgwMTA0OEIKKzoxMDM4RjAwMDA5MEMwODAyMDkwQTA4NDMzOTY4QzA0NjQ4ODEwNUIwMjYKKzoxMDM5MDAwMEYwQkMwOEJDMTg0NzAwMDBEMDJDMDA4MDVDMkIwMDgwNjUKKzoxMDM5MTAwMDBDMkIwMDgwRjdCNTAzMUMwRjFDMDAyMDFDNjgyNjA0MkMKKzoxMDM5MjAwMDMxMUMxRDFERkNGNzUxRkQ0MEM3MDI5QUQxMUM4OTA4QUUKKzoxMDM5MzAwMDAxMzk0QTFFMDI5MjAwMjkwREQwMjEwQzEwQ0QyMjA0MUIKKzoxMDM5NDAwMDBBNDMxMTFDMTYxQ0ZDRjc0MEZENDBDNzAyOTk0QTFFOTEKKzoxMDM5NTAwMDAyOTIwMDI5RjFEMTAzQjBGMEJDMDhCQzE4NDc4MDA4REUKKzoxMDM5NjAwMDgwMDA4OTA4ODkwMDAzMzI5MzA4NUExRTAwMkIwNUQwNzUKKzoxMDM5NzAwMDA4QzkwOEMwMTMxQzAxM0EwMDJCRjlEMTcwNDdGRkI1RTQKKzoxMDM5ODAwMDg2QjAxNzFDMDAyNjA2OTg4MDZDQzAxQjA2OTlDMDQ2OUUKKzoxMDM5OTAwMDg4NjQwMTIwQzAwNTA2OTk4OTZCQzA0NjAxOTEwNjk5OEIKKzoxMDM5QTAwMDRDNkI2N0UwMjE2OEMwNDYwMjkxNjE2OEMwNDYwMzkxOTQKKzoxMDM5QjAwMEExNjhDMDQ2MDQ5MTAyQTk0OTg4Qjk0MjA4RDIwMkFENjMKKzoxMDM5QzAwMDZEODgwMkE5NDk4ODdGMUEwMDIxMDJBQjU5ODAxOUUwNEQKKzoxMDM5RDAwMDAyQTk0OTg4QzkxQjAyQUI1OTgwM0QxQzAwMjcwMTIxNUYKKzoxMDM5RTAwMDQ5MDYwNzlCOUEwNzkyMEYwREQwRUIwNkRCMEUwOEQwMTUKKzoxMDM5RjAwMDFFMkIwOEQzMUUyQjAyRDEwMzJBMDREMTAxRTAwMjJBNzgKKzoxMDNBMDAwMDAxRDMwMTI2MDAyMTI5NDMwMTQzMEExQzAwOTEwMDIwMTMKKzoxMDNBMTAwMDAzOTkwNDlBMDc5QjAxRjA1QkZGMDc5OTQ5MTkwNzkxRTUKKzoxMDNBMjAwMDAwMkUwQUQwMUQ0QUMwNDYwMDkyMUQ0ODAxNkQ0MjZEMEQKKzoxMDNBMzAwMDAwMjAwNzlCMDFGMDRDRkYwMDI2MDJBODQwODgwMDI4QzgKKzoxMDNBNDAwMDBDRDAwMzk4NDAxOTAzOTAwMjk4QzA0NjIwNjAwMzk4NTgKKzoxMDNBNTAwMEMwNDY2MDYwMDQ5OEMwNDZBMDYwMDNFMDAxOTgwMTM4NDkKKzoxMDNBNjAwMDAxOTAxMDM0MDY5OEMwNDY0NDYzMDE5ODA2OTlDMDQ2RjgKKzoxMDNBNzAwMDg4NjMwMDIwMDAyRjAyRDAwMTk5MDAyOTkyRDEwOTRBQzEKKzoxMDNBODAwMEMwNDYwMDkyMDY0ODAxNkQ0MjZEMDAyMDA5OUIwMUYwN0UKKzoxMDNBOTAwMDFGRkYwQUIwRjBCQzA4QkMxODQ3MDAwMDAxMDAwMDAyN0MKKzoxMDNBQTAwMDdDMjkwMDgwMDQwMDUzMDI5MEI1MEMxQzA3MUMzODY4NjgKKzoxMDNBQjAwMDAxMjM5QjA3MDgzODE4NDMwMTY4Mzg4QUZDRjc4NUZDMDYKKzoxMDNBQzAwMEMwNDNGOTY4QzA0NjA4ODA3ODhBMzk2ODA4MUEzODYwQTcKKzoxMDNBRDAwMDM4MUMwMUYwOEJGOTM4MUNGQ0Y3OENGQjIwMUNGRkY3MUQKKzoxMDNBRTAwMDMzRkU5MEJDMDhCQzE4NDc4MEI1MDE4ODhBMDkyMUQzRjEKKzoxMDNBRjAwMENBMDkxRkQyOEEwODFERDMwMDIxMDE4MDQxODA0NzZGNjcKKzoxMDNCMDAwMDQwNkRGQTFEMTkzMjUxNzFGQTZEQzA0NjEwNjAzQTZFNUYKKzoxMDNCMTAwMEMwNDYxMDYwMEM0OEMwNDY4MTYzQzE2QjQ5MDg0OTAwMkIKKzoxMDNCMjAwMEMxNjMwMTIwMDBGMENDRkYzODFDMDBGMDZCRkY4MEJDQUIKKzoxMDNCMzAwMDA4QkMxODQ3ODAyMzE5NDMwMTgwMDE4ODQ5MDlGNkQyM0YKKzoxMDNCNDAwMDAwRjBCMEY4RjNFNzAwMDBFODBFMDA4MEYwQjUwNzFDQzUKKzoxMDNCNTAwMDEwMUMwRDFDMDAyNDVFMUUwMDJCMTlEMDAxNjhDMDQ2RUQKKzoxMDNCNjAwMDM5NjA0MTg4MEMxOTQxNjhDMDQ2Nzk2MDgxNjhDMDQ2NTcKKzoxMDNCNzAwMEI5NjBDMTY4QzA0NkY5NjAxMDMwMTAzN0U5NkE4MTQyMDcKKzoxMDNCODAwMDAyRDgyODFDMDBGMEVDRkYzMTFDMDEzRTAwMjlFNUQxRDEKKzoxMDNCOTAwMDIwMUNGMEJDMDhCQzE4NDcwMDIxQzE2MTA1NDkwQTY4MTcKKzoxMDNCQTAwMDAwMkEwMUQxMDg2MDAyRTA0QTY4QzA0NkQwNjE0ODYwM0UKKzoxMDNCQjAwMDcwNDcwMDAwRDAyQzAwODAwMzQ5MDg2ODAwMjgwMkQwMUMKKzoxMDNCQzAwMEMyNjlDMDQ2MEE2MDcwNDdEMDJDMDA4MDAwMjE4MTY3MUUKKzoxMDNCRDAwMDA1NDk4QTY4MDAyQTAxRDE4ODYwMDJFMENBNjhDMDQ2QTcKKzoxMDNCRTAwMDkwNjdDODYwNzA0NzAwMDBEMDJDMDA4MDAzNDk4ODY4NDcKKzoxMDNCRjAwMDAwMjgwMkQwODI2RkMwNDY4QTYwNzA0N0QwMkMwMDgwQjcKKzoxMDNDMDAwMDAwQjU4MDIwMTM0OUMwNDYwODYwRkZGN0Q1RkYwMDI4QTMKKzoxMDNDMTAwMDFCRDAwMzIzMUIwNzQxNjgxOTQwMEEwRjUxMDE4OTFBNjEKKzoxMDNDMjAwMDg5MDAwRDRCQzkxODRCODgwMDJCMDREMTExMUNGRkY3REMKKzoxMDNDMzAwMDNCRkYwOEJDMTg0NzAxMkIwMkQxRkZGNzA1RkNGOEU3NTIKKzoxMDNDNDAwMDAyMkJGNkQxRkZGNzRFRkJGM0U3MDQ0ODAxNkQwMTMxN0IKKzoxMDNDNTAwMDAxNjVFRUU3MDAwMDAwQjA1QzJCMDA4MEEwODIyMDQwRjAKKzoxMDNDNjAwMDAwQjUyMDIwMEQ0OUMwNDYwODYwRkZGN0JGRkYwMDI4QkYKKzoxMDNDNzAwMDBFRDAwMTg4MjAyMzE5NDMwMTgwMDE4ODEwMjM5OTQzMjUKKzoxMDNDODAwMDAxODAwMTg4MDkwQTAxRDNGRkY3MkVGRjA4QkMxODQ3RkQKKzoxMDNDOTAwMDAzNDgwMTZEMDEzMTAxNjVGOEU3MDAwMDAwMDAwMEIwNDQKKzoxMDNDQTAwMEEwODIyMDQwOThCNTA3MUMyMjQ4QzA0NjAwOTAyMjQ4QjgKKzoxMDNDQjAwMEMzMUQ0MTMzNDE2RDgyNkQ4MDZDMDAwMzAwMEI5QzY4MTUKKzoxMDNDQzAwMDAxMjM5QjA3MjM0MzFCNjg5ODQyMDBEMTBDRTA5ODQyRDQKKzoxMDNDRDAwMDAzRDkxMDFBNTkxQTQxMTgwMEUwMTkxQTAxMjAxMDI5QTUKKzoxMDNDRTAwMDAwRDgwMDIwMDAyODFGRDA3ODZBRjk2QUMwNDYwODYwMTIKKzoxMDNDRjAwMEI4NkFGOTZBQzA0NjQ4NjAxMDRBQzA0NjAwOTJGQjZBM0EKKzoxMDNEMDAwMDBGNDg0MjZEMDMyMDM5NkEwMUYwRTJGRDM4ODgxMDIzMjQKKzoxMDNEMTAwMDE4NDMzODgwMzg4ODQwMjM5ODQzMzg4MDM4MUNGRkY3OTAKKzoxMDNEMjAwMDU1RkY5OEJDMDhCQzE4NDczODg4NDAyMzE4NDMzODgwOTIKKzoxMDNEMzAwMEY3RTcwMDAwNTU1NTU1NTVBODAzMDA4MDA4MDAxMTAyMEIKKzoxMDNENDAwMDdDMjkwMDgwQjBCNTQwMjAyQzQ5QzA0NjA4NjAwMEYwQjYKKzoxMDNENTAwMEZERkUwNzFDNDA2ODAzMjMxQjA3MTg0MDA1MEY2ODAxODAKKzoxMDNENjAwMDQwMUI4MDAwMjY0OTQ0MTgyMDg4MDIyMzE4NDMyMDgwRTUKKzoxMDNENzAwMDIwODg0MTA4MzREMzQwMDg0MDAwMjA4MEEwNkNFMTZDQ0EKKzoxMDNEODAwMDQwMThBMDY0MDAyMEUwNjRBMTZCMjI2RDg5MThBMTYzMzMKKzoxMDNEOTAwMDIwNjVCODZBQzA0NjYwNjUwMzIzMUIwNzc4NjgxODQwMzEKKzoxMDNEQTAwMDc4NjA2MTY4MzYzMTk0MjkwNEQ4MzgyMzE4NDM3ODYwRTQKKzoxMDNEQjAwMDM4MjAwM0UwOTQyMzE4NDM3ODYwOTQyMEI4NjEzOTY4NzAKKzoxMDNEQzAwMDc4NjgwMjA0MTIwQzIwMUNDQjFGMDUzQkZGRjdEN0ZEQkYKKzoxMDNERDAwMDAyMjA2MDgwMzgxQ0ZGRjdERkZFQjBCQzA4QkMxODQ3MkIKKzoxMDNERTAwMDM4MUNGQ0Y3MDdGQTI4MDEwNjQ5NDAxODE5MjNEQjAxQTMKKzoxMDNERjAwMEMwMTg0MTZCMDEzOTQxNjNFRkU3MDAwMDAwMDAwMEIwREIKKzoxMDNFMDAwMDVDMkIwMDgwQTAxQzAwODA5MEI1MDAyNzBGNEMwREUwQkIKKzoxMDNFMTAwMDQyNkIwMTNBNDI2MzAwMkEwNURDMDI2QkMwNDY0MjYzRjIKKzoxMDNFMjAwMEMwNkEwMUYwQzZGOTAxMzcwQjJGMDdEMjM4MDEwMDE5MUIKKzoxMDNFMzAwMDMzMjM5QjAxQzAxODgxNkEwMDI5RTlEMTAxMjA0MDA2ODMKKzoxMDNFNDAwMDAzNDlDMDQ2MDg2MDkwQkMwOEJDMTg0NzY4MEUwMDgwNTMKKzoxMDNFNTAwMDAwMDAwMEIwMTA0OEMxNjgwMTMxQzE2MDBGNDlDODY4NTYKKzoxMDNFNjAwMDAxMjgxN0QxQzgxRDc5MzAwMjg5MDAyQTEyRDAwMTNBRTEKKzoxMDNFNzAwMDAyODEwMjg5MDAyQTBERDE0Mjg5MDAyQTA4RDFDOTZGMjYKKzoxMDNFODAwMDAyMjMwQTY4MUE0MzBBNjAwNDIxMDE4MTAxMjEwMEUwMkIKKzoxMDNFOTAwMDAwMjE0MTgxNzA0NzAwMDAwODgzMjA0MDY4MEUwMDgwQTcKKzoxMDNFQTAwMEIwQjUwNzFDMDEyM0Y4MUQ2OTMwMDM3MzFFNDhDMjFERkQKKzoxMDNFQjAwMDc5MzI1NDhBNjExQzUxODJENThBMDAyMUFDNDIwNERCREMKKzoxMDNFQzAwMEM0MUQ4OTM0NjM3MDUxODJEMTgzMDEyMzlCMDczQTZERUQKKzoxMDNFRDAwMDFBNDMxMjY4QzA0NkJBNjFGQjY5OUE0MjA2RDFGODZDNkYKKzoxMDNFRTAwMDEyNDlDMDQ2MDg2MEIwQkMwOEJDMTg0Nzc5NjE0MTY5RjYKKzoxMDNFRjAwMEZBNkM5MTQzNDE2MTAxMjAwMDA1QzE2MDM4NjkwMjI4RDQKKzoxMDNGMDAwMEYxRDBCODY5Rjk2OTQxMUEwMUQ1Nzg2RDQxMTgzODFDQUEKKzoxMDNGMTAwMDAwRjAwRUY4Rjk2OTA5MThGOTYxNzg2RDgxNDJFMkQzNzEKKzoxMDNGMjAwMDA4MUFGODYxREZFNzAwMDA2ODBFMDA4MDAwMDAwMEIwQUEKKzoxMDNGMzAwMEY4QjUwNDFDMEYxQ0ZGMjMyMTMzOUY0MjAxRDlGRjI3MzIKKzoxMDNGNDAwMDIxMzdFMTZFMzgxQzAxRjBDQkZDMkQ0RDAwMjgxM0QxMzgKKzoxMDNGNTAwMEUwMUQ0OTMwMDE3QTAxMjMxOTQzMDE3MjI5NEFDMDQ2MDQKKzoxMDNGNjAwMDAwOTIyOTQ4MDE2RDQyNkQwMDIwMkIxQzAxRjBCMEZDMkQKKzoxMDNGNzAwMDAwMjBGOEJDMDhCQzE4NDcyMDY5MDEzMDIwNjEyMzQ5QTMKKzoxMDNGODAwMEM4MURCOTMwMDI2QjkyMDA1MTE4QzAzMTBGNjEwMTZCMkUKKzoxMDNGOTAwMDAxMzE4OTA3ODkwRjAxNjMyMDZCQzIxOTYxNkQ4QTQyNjMKKzoxMDNGQTAwMDAzRDgyMzIyMTIwNTNBNDMwNUUwMDkxQTdFMUEwN0QxRTUKKzoxMDNGQjAwMDIzMjIxMjA1MEE0MzAwOTI2MTZFMDkxOEEyNkUxMEUwRDYKKzoxMDNGQzAwMDExMjI1MjA1MEE0MzAwOTI2MTZFMDkxODAwMjBBMjZFNjgKKzoxMDNGRDAwMDJCMUMwMUYwN0RGQzIzMjIxMjA1MzI0MzAwOTI2MTZFRkUKKzoxMDNGRTAwMEEyNkUwMDIwMkIxQzAxRjA3M0ZDMjA2QkMwMTkwMDA5OEQKKzoxMDNGRjAwMDAwMDE2MTZEODE0MjAwRDg0MDFBMjA2MzM4MUNCOEU3ODcKKzoxMDQwMDAwMDQ0ODAyMDQwMDQwMDFCMDI3QzI5MDA4MDY4MEUwMDgwNTAKKzoxMDQwMTAwMDgwQjUwMTIwQzAwMzBENDlDMDQ2MDg2MDBDNDlDODFEODkKKzoxMDQwMjAwMDQ5MzAwMjdBMDAyNzAwMkEwM0QwMDc3MjA4MUNGRkY3RTQKKzoxMDQwMzAwMDM3RkYwODQ5QzgxRDQ5MzAwMjdBMDAyQTAzRDAwNzcyQTkKKzoxMDQwNDAwMDA4MUNGRkY3MkRGRjgwQkMwOEJDMTg0NzAwMDAwMEIwMUIKKzoxMDQwNTAwMDY0MkQwMDgwRTQyQzAwODA5MEI1MDcxQzEwMjAxODQ5QzYKKzoxMDQwNjAwMEMwNDYwODYwRjg2ODAxMzBGODYwMTY0OEM0MURCOTM0Q0QKKzoxMDQwNzAwMDYxNkI4OTAwMDkxOEMwMzEwOTY5N0E2ODkyMDBEMjE5MDgKKzoxMDQwODAwMDUxNjQ2MTZCODkwMDA4MThDMDMwMDE2OTc4Njg4MDAwNEMKKzoxMDQwOTAwMEMwMTlDMDZCMDFGMEEyRkEwMTIzNzg2ODU4NDA3ODYwMUIKKzoxMDQwQTAwMDYwNkIwMTMwODAwNzgwMEY2MDYzRjgxRDE5MzA0MDc5MjQKKzoxMDQwQjAwMDAwMjgwMkQxMzgxQzAwRjAwN0Y4OTBCQzA4QkMxODQ3NTMKKzoxMDQwQzAwMDAwMDAwMEIwNjgwRTAwODA5MEI1MDcxQzM5NDhDMDY4MzkKKzoxMDQwRDAwMDAwMjgwNUQwQjg2QUMwNjg4MDA5MDFEMzAyMjAwMEUwM0EKKzoxMDQwRTAwMDc4NkZGQ0Y3NTlGODA0MUMwNkQxMDEyMEY5MUQxOTMxMkQKKzoxMDQwRjAwMDA4NzE5MEJDMDhCQzE4NDdGODZDMkY0OUMwNDYwODYwOEUKKzoxMDQxMDAwMEJBNkEzODFDMjExQzAwRjA1OUY4Njc2MjAwMjgwM0QxRjQKKzoxMDQxMTAwMDIwMUMwMEYwMEJGREVDRTdGOTZEMDk2ODA5MTgwOTA5OEUKKzoxMDQxMjAwMDA5MDE3QTZEOEE0MjAwRDg4OTFBQTE2MkI5Njg4OTAwQUEKKzoxMDQxMzAwMEM5MTk0QTZDMDAyQTA3RDA0QTZDMTIxQTRBNjQ4MDA4Q0UKKzoxMDQxNDAwMDgwMDBCOTZBMDgxOEI4NjIzODY4Qjk2QTgwMDBDMDE5NzYKKzoxMDQxNTAwMDQyNkI5MTQyMEVEMzAwMjE0MTY0Qjg2QTM5Njg4OTAwRUMKKzoxMDQxNjAwMEM5MTk0OTZCNDAxQUI4NjJCOTY4ODkwMEM5MTlDOTZCODUKKzoxMDQxNzAwMDQwMThCODYyQjg2ODgxMDBDOTE5NDk2QzAwMjlCOEQxRTMKKzoxMDQxODAwMEI5NkFGQTZCOTE0MkI0RDAzQTZDOTE0MkIxRDAwMTIzMzIKKzoxMDQxOTAwMDU4NDBCODYwODAwMEMwMTlDMDZCQzA0NkI4NjJGODY4NkIKKzoxMDQxQTAwMDAwMjgwMUQwMDEzOEY4NjAzODY5MDAyOEExRDAwMTM4MTIKKzoxMDQxQjAwMDM4NjE5RUU3NjgxOTAwODAwMDAwMDBCMEY3QjU5MEIwNDQKKzoxMDQxQzAwMDA0MUMwRDFDMDAyMDA1OTAwMjkwMDAyMjAxOTJGOTQ4NjkKKzoxMDQxRDAwMEMwNkFDMDQ2QTg2MUEwNjg4MTAwMDkxOTQ5NkJDMDQ2NDEKKzoxMDQxRTAwMDIwNjBFMTYyMTI5QUQwNjhDMDQ2QTg2MDEyOUE1MTc4QTUKKzoxMDQxRjAwMEMwNDYwQzkxRjA0OEMwNDYwMzkwRDcxRDA5MzdFMDZBQ0QKKzoxMDQyMDAwMEMxMUIwOTA5RTMxRDE5MzMwQzlBQzA0NjBGOTNFQjRCRjAKKzoxMDQyMTAwMEMwNDYwRTkzOTE0MjAxRDNCODQyMjFEOEUxNjgwMjI5RTkKKzoxMDQyMjAwMDFFRDIwMTIwMEY5OUMwNDY0ODcxMDAyMDAzOTkwMUYwNjkKKzoxMDQyMzAwMDU3RkIwMDI4MDNEMTBFOUJEODZCMDEzMEQ4NjMwMTIwQjcKKzoxMDQyNDAwMDgwMDYwMDI3Njg2MEFGNjFERDRBQzA0NjAwOTJERDQ4MDUKKzoxMDQyNTAwMDAxNkQ0MjZEREM0QjAwMjAwMUYwM0FGQjM4MUM1Q0UzNDEKKzoxMDQyNjAwMEI4NDIwM0Q4MjAxQzAwRjA3QkZDMDcxQ0Q3NDhDMDY4NkMKKzoxMDQyNzAwMDAwMjg2NEQwMzg3ODQwMDc0MDBGMDMyODYwRDEwNTk4QTMKKzoxMDQyODAwMDAxMzAwMDA2MDAwRTA1OTAzODc4RjAyMzE4NDA1OEQxMTAKKzoxMDQyOTAwMEUwNkFDMDFCMDAwOTBDOTk4ODQyMDJEMkUwNjgwMjI4M0IKKzoxMDQyQTAwMDA1RDNDQjQ5ODg2ODAwRjA4M0ZGMDYxQzA2RDEwMzlCMjkKKzoxMDQyQjAwMDI4MUMzOTFDMjIxQzAwRjA4QkZDMTZFMTJFNjJGODY4QzkKKzoxMDQyQzAwMDAwMjgwREQwQjg4OTAwMjgwM0QwQzE0OUM5NjgwMEYwODIKKzoxMDQyRDAwMDcwRkZGODg5MDAyODAzRDBCRDQ5Qzk2ODAwRjA2OUZGNjQKKzoxMDQyRTAwMDdBNjhDMDQ2NzI2MUI5NjhDMDQ2QjE2MTMwMUNCODQ5OEQKKzoxMDQyRjAwMDA5NjgwMEYwNUVGRjAwMjgxN0QxMzAxQ0I0NDk0OTY4RjYKKzoxMDQzMDAwMDAwRjA1N0ZGMTAzN0UwNkFCODQyMDNEODIwMUMwMEYwRDUKKzoxMDQzMTAwMDI3RkMwNzFDNjg2OEFGNEIxODQzNjg2MDAwMjBBODYxNDEKKzoxMDQzMjAwMEFDMjNBODY4OTg0M0E4NjBCMEUwQTg2OUE4MjgwMUQyODcKKzoxMDQzMzAwMEE4MjBBODYxMTAzN0UwNkFCODQyNkNEODlDRTBBNUUwREMKKzoxMDQzNDAwMEE0RTAxMDI4NjhEMTAzMjMxQjA3Njg2ODE4NDAwMTBGRjgKKzoxMDQzNTAwMDQ4MDE0MDFBODAwMEEwNEE4MjE4MDE5Mjc4ODg0MjBCRDYKKzoxMDQzNjAwMDMxRDM4MjBCMkZEMzlENDhDMDQ2MDM5MDAyMjAwMTlBN0YKKzoxMDQzNzAwMEMwNDYxMDgwNzg4ODAwMDUwMDBEMDE5QUMwNDY1MDYwNDQKKzoxMDQzODAwMEI4NjgwMTlBQzA0NjkwNjA3ODY4MDE5QUMwNDYxMDYyODkKKzoxMDQzOTAwMDAwMjAwMTlBQzA0NjkwNjQwMTlBQzA0NjkwNjM4ODAyNEEKKzoxMDQzQTAwMDhGNDk0MDE4MDE5QUMwNDY1MDYzMDE5QTUwNjgzNjMwRDAKKzoxMDQzQjAwMDk0MjgwMUQ4MzgyMDAwRTA5NDIwQTg2MTEwMzdFMDZBRTIKKzoxMDQzQzAwMEI4NDIyOEQ4NThFMDdBODg5MjBCMDNEMzg1NDhDMDQ2NzMKKzoxMDQzRDAwMDAzOTAyM0UwMDEyMjEyMDMwMjQwODM0QjFERDAwMzkzN0MKKzoxMDQzRTAwMDAwMDUwMDBEMDE5QUMwNDY1MDYwQjg2ODAxOUFDMDQ2QTkKKzoxMDQzRjAwMDkwNjA3ODY4MDE5QUMwNDYxMDYyMDAyMDAxOUFDMDQ2MTkKKzoxMDQ0MDAwMDkwNjQwMTlBQzA0NjkwNjM4ODAyNzU0OTQwMTgwMTlBRTkKKzoxMDQ0MTAwMEMwNDY1MDYzMDJFMDMzRTAyQUUwMDM5MzAxMjAwRjk5ODUKKzoxMDQ0MjAwMEMwNDY0ODcxMTI5QTUwNzgwNTk5NDMxQTBCOTMxMDM3NzkKKzoxMDQ0MzAwMEUwNkFCODQyMDNEODIwMUMwMEYwOTJGQjA3MUMwMTlBRTYKKzoxMDQ0NDAwMDUwNkI5MTZCMDkwMTQwMTgwQjlCMjExQzNBMUNGRkY3MjQKKzoxMDQ0NTAwMDdERkIwMTlBQzA0NkQwNjQwMTlBMEI5QkMwNDYxMzY1NTAKKzoxMDQ0NjAwMDAxMjM1QjA2Njg2ODE4NDM2ODYwMDAyMEE4NjEwREUwQkUKKzoxMDQ0NzAwMDEwMzdFMDZBQjg0MjAzRDgyMDFDMDBGMDcxRkIwNzFDMUIKKzoxMDQ0ODAwMDM4Nzg0MDA3NDAwRjAzMjgwMEQxRjhFNkE4NjkwMzk5NUYKKzoxMDQ0OTAwMDAxRjAyNkZBMDAyODJBRDEzODFDMjExQzAwRjA3OUZCRjMKKzoxMDQ0QTAwMEE4Njg4MDA5MDREMzMwMUM0OTQ5NDk2ODAwRjA4MUZFOUUKKzoxMDQ0QjAwMDQxNDkwMDIwMDFGMDE0RkEwMDI4MDREMTBFOUJEODZCNkEKKzoxMDQ0QzAwMDAxMzBEODYzMTFFMDAxMjAwRjk5QzA0NjQ4NzE4MDA2ODEKKzoxMDQ0RDAwMDAwMjc2ODYwQUY2MTNBNEFDMDQ2MDA5MjM5NDgwMTZERDIKKzoxMDQ0RTAwMDQyNkQzOTRCMDAyMDAxRjBGM0Y5MDAyMDE1RTIwNTk4RTgKKzoxMDQ0RjAwMDBDOTkwODFBMDAwNDAwMEMwQzkwMEI5MDBDOTgwMDI4RTIKKzoxMDQ1MDAwMDAzRDAwMTIwMEY5OUMwNDY0ODcxMjg2OEMwNDYwNDkwMjYKKzoxMDQ1MTAwMDAwMjYwMDIwMDg5MDAwMjIwQTkyMEM5ODAxMzgwRDkwODUKKzoxMDQ1MjAwMEEzRTA3ODg4OEExQjEyMDQxMjBDOTA0MjA1REQwNzkyRTIKKzoxMDQ1MzAwMDgwMUEwMDA0MDAwQzA4OTAwMEUwMDc5MDA4OTgwMDI4RkEKKzoxMDQ1NDAwMDA3RDEwRDk4MEE5QTkwNDIwN0REMDc5ODMwMTg4ODQyRTMKKzoxMDQ1NTAwMDAzRDgwMTIwNDAwNTA2OTAxQ0UwMTEyMDQwMDUwNjkwN0MKKzoxMDQ1NjAwMEE4Njg4QzIzMTg0MDAyRDEyMDQ4QzA0NjA2OTBCMTA3QTUKKzoxMDQ1NzAwMDg5MEYwRkQwMDc5OEMwMDZDMDBFMDhEMDFFMjgwOURCOEYKKzoxMDQ1ODAwMDFFMjgwMkQxMDMyOTA1RDEwMUUwMDIyOTAyRDMwMTIwMEUKKzoxMDQ1OTAwMDAyOTBERUU3MEE5QTAwMkEwNEQxMDEyM0RCMDUwNjk4N0YKKzoxMDQ1QTAwMDE4NDMwNjkwMDc5ODA2OTkwODQzMDIxQzAwOTAwNDk4NDcKKzoxMDQ1QjAwMDgzMTkxREUwRTgwRTAwODAwMTQ5RkZGRjI4MEYwMDgwRUQKKzoxMDQ1QzAwMDA0MDAxMjAyN0MyOTAwODA0NDgwMjA0MDY4MTkwMDgwODkKKzoxMDQ1RDAwMDYwMDQwMDgwMDAwMDAwODA1QzJCMDA4MDU1MzJGRkZGRUIKKzoxMDQ1RTAwMEFDNUUyMTQwMEQzREZGRkZDRDMxRkZGRjAwMDAzMjAyRTgKKzoxMDQ1RjAwMDAwMjAzQTFEMDZDQTAxRjA2QkY5MDc5ODM2MTgwMjk4OTgKKzoxMDQ2MDAwMDAwMjgxNkQwQTg2ODhDMjMxODQwMDREMTA5MjM1QjA0MjUKKzoxMDQ2MTAwMDA2OTgxODQzMDY5MDA2OThDMjRBMDI0MzAwOTIwNDk4RUUKKzoxMDQ2MjAwMDgzMTlDMTQ4MDE2RDQyNkQwMDIwMDFGMDUxRjkwMDIwNEQKKzoxMDQ2MzAwMDAyOTAwODk4MDAyODBCRDEwQjlCMDEzQjBCOTMxMDM3N0QKKzoxMDQ2NDAwMEUwNkFCODQyMENEODIwMUMwMEYwOEFGQTA3MUMwN0UwODgKKzoxMDQ2NTAwMDc4NjgwNzlBODAxODc4NjA3ODg4MDc5QTgwMUE3ODgwMzYKKzoxMDQ2NjAwMDBBOUE1MDFDMDIwNDEyMEMwQTkyMEM5ODBBOUE4MjQyNkUKKzoxMDQ2NzAwMDAzREFBOTY5QjE0MjAwRDk1M0U3QTg2OUIwNDI2QkQxMDYKKzoxMDQ2ODAwMEE4NjgwMTA5NjlEMjA4OUEwMDJBNTZEMDBDOTkwQTlBOUEKKzoxMDQ2OTAwMDhBNDIzRURCQjEwNzg5MEYwQ0QwMDg5QUQyMDZEMjBFQUYKKzoxMDQ2QTAwMDBCRDAxRTJBMDZEQjFFMkEwMkQxMDMyOTA1RDAwMUUwMDkKKzoxMDQ2QjAwMDAyMjkwMkQyMDI5OTAwMjkyMUQwMDg5QUMwNDYwMDkyMEMKKzoxMDQ2QzAwMDA0OTg4MzE5MDAyMDNBMUQwNkNBMDFGMDAxRjkwODk4RTAKKzoxMDQ2RDAwMDM2MThBODY4OEMyMzE4NDAwMkQwMDEyMDQwMDYwMEUwNUMKKzoxMDQ2RTAwMDkyNDgwMTIyMDI0MzAwOTIwNDk4ODMxOThFNDgwMTZEN0EKKzoxMDQ2RjAwMDQyNkQwMDIwMDFGMEVDRjgwMDIwMDI5MDE1RTA4QzIzQzAKKzoxMDQ3MDAwMDE4NDAwMkQwMDEyMDQwMDYwMEUwODg0ODA4OUEwMjQzODEKKzoxMDQ3MTAwMDAwRTAwODlBQzA0NjAwOTIwNDk4ODMxOTAwMjAzQTFERDAKKzoxMDQ3MjAwMDA2Q0EwMUYwRDVGODA4OTgzNjE4MTAzN0UwNkFCODQyODIKKzoxMDQ3MzAwMDAzRDgyMDFDMDBGMDE0RkEwNzFDNjg2ODgwMEU2QkQyQTYKKzoxMDQ3NDAwMDBBOThDMDQ2MDk5MDBDOTk4ODQyNUNEQTBEOTgwOTk5M0MKKzoxMDQ3NTAwMDg4NDIwM0QwN0E4ODFFRTA1RkUwNUVFMDc4ODgwMTIyMUMKKzoxMDQ3NjAwMDUyMDYwMjQzQTk2ODhDMjMxOTQwMDJEMTA5MjM1QjA0MzUKKzoxMDQ3NzAwMDFBNDNCMTA3ODkwRjBFRDBDMzA2REIwRTA4RDAxRTJCREIKKzoxMDQ3ODAwMDA5REIxRTJCMDJEMTAzMjkwNUQxMDFFMDAyMjkwMkQzNDYKKzoxMDQ3OTAwMDAxMjEwMjkxMDIxQzA5OTgwMDI4MDJEMTAxMjNEQjA1QTYKKzoxMDQ3QTAwMDFBNDMwMDkyMDQ5ODgzMTkwMDIwM0ExRDA2Q0EwMUYwQUEKKzoxMDQ3QjAwMDhGRjg3ODg4ODYxOTEwMzcwMjk4MDAyODE0RDBBODY4RDYKKzoxMDQ3QzAwMDhDMjMxODQwMDJEMDAxMjA0MDA2MDBFMDU3NDgwMTIyMDcKKzoxMDQ3RDAwMDAyNDMwMDkyMDQ5ODgzMTk1MzQ4MDE2RDQyNkQwMDIwRjIKKzoxMDQ3RTAwMDAxRjA3NkY4MDAyMDAyOTBFMDZBQjg0MjAzRDgyMDFDNUQKKzoxMDQ3RjAwMDAwRjBCNkY5MDcxQzA5OTgwMTMwMDAwNDAwMEMwOTkwN0MKKzoxMDQ4MDAwMDBDOTk4ODQyQTJEQjY4NjgzMDQzMDEwNDA5MEM2ODYwOTcKKzoxMDQ4MTAwMEU4NkEwMEYwN0JGQTI4RTAyN0UwQTg2ODAwMDkxNEQzRDIKKzoxMDQ4MjAwMDY4Njg4MDBFMTVEMjAxOUEwMDJBMTJEMDAxOUE1MDZCNDYKKzoxMDQ4MzAwMDBCOUIyMTFDM0ExQ0ZGRjc4OUY5MDE5QUMwNDY5MDY0MzIKKzoxMDQ4NDAwMDAxOUEwQjlCQzA0NjkzNjMwM0UwRTg2QTMxMUMwMEYwQjkKKzoxMDQ4NTAwMDVERkE2ODY4MzA0MzY4NjBBODY5QjA0MjA1RDkwMDA0MTEKKzoxMDQ4NjAwMDAwMEM4MDFCMDBGMEVFRjlBRTYxQTg2ODhDMjMxODQwQTQKKzoxMDQ4NzAwMDBCRDAyRjRBQzA0NjAwOTIwNDk4QzMxRjA1M0IyQTQ4MUMKKzoxMDQ4ODAwMDAxNkQ0MjZEMDAyMDAxRjAyM0Y4MDEyMzlCMDcyMDZEOEMKKzoxMDQ4OTAwMDE4NDMwMDY4QzA0NkEwNjFFMTY5ODE0MjEyRDAyMjY5RDQKKzoxMDQ4QTAwMDAyMkEwRkQyNDExQTAxRDU2MDZENDExODIwMUNGRkY3NzIKKzoxMDQ4QjAwMDNGRkJFMTY5NDAxOEUwNjE2MTZEODg0MjI0RDM0MDFBRjIKKzoxMDQ4QzAwMEUwNjEyMUUwODE0MjFGRDEyMDY5MDIyODFDRDIwMTIwMzEKKzoxMDQ4RDAwMDYwNjExODQ4NDE2OUUyNkMwQTQzNDI2MTgxNjlFMzZDOTYKKzoxMDQ4RTAwMDk5NDM4MTYxMDEyMTA5MDVDQTYwODA2OUMwNDYwODYxNTgKKzoxMDQ4RjAwMDhCMDIyMDZEMTg0MzAwNjhDMDQ2QTA2MUUxNjk4MTQyQzcKKzoxMDQ5MDAwMDAyRDAyMDFDRkZGN0NDRkEyODFDMDBGMDBGRjkwQzk4RkQKKzoxMDQ5MTAwMDA1OTk0MDE4MDAwMTEwMzA2ODYxMTNCMEYwQkMwOEJDNjQKKzoxMDQ5MjAwMDE4NDcwMDAwMDEwMDAwMDI3QzI5MDA4MDAwMDAxMjAyRUMKKzoxMDQ5MzAwMDA0MDA1MjAyNjgwRTAwODBGMEI1NDAyMDJENDlDMDQ2QTgKKzoxMDQ5NDAwMDA4NjAwMEYwMDNGOTA3MUM4MTY5NDQ2QUEwNkYwMEYwNTkKKzoxMDQ5NTAwMDQ1RkUwMDIwRTExRDE5MzE0ODcxNzk2OEM5MEUwOUQzNUYKKzoxMDQ5NjAwMEY4NkEwMDAxMjQ0OTQwMTgyNDRCQzAxODAxNjgwMTM5MzUKKzoxMDQ5NzAwMDAxNjAzNkUwRTE2RDA5NjgyMjZFQzA0NjExNjAyMDRFOEMKKzoxMDQ5ODAwMEY1MUQ3OTM1MDEyM0U5NkIxOTQzRTk2M0I5NkFFMjZERDUKKzoxMDQ5OTAwMEMwNDYxMTYwQjk2QTIyNkVDMDQ2MTE2MDYxNjkwMDI5ODMKKzoxMDQ5QTAwMDA0RDFBOTZCMDEzMUE5NjMwODI5MDdEM0E4NjMwMTIwQTkKKzoxMDQ5QjAwMDAwRjA4NkY4RTg2QjQwMDg0MDAwRTg2Mzc4Njg4MTBFRjQKKzoxMDQ5QzAwMDBGRDIwQjIzMUIwMkYxMThDOTY4MDAyOTA2RDAwMDA4N0EKKzoxMDQ5RDAwMDA0RDIyMDFDMzkxQzAwRjA0M0Y4MDJFMDM4MUMwMEYwMUYKKzoxMDQ5RTAwMDA1RkEzODFDRkJGNzA2RkMyMDFDMDBGMDBCRjhGMEJDQTUKKzoxMDQ5RjAwMDA4QkMxODQ3MDAwMDAwQjBBMDFDMDA4MEI0MEMwMDAwRTgKKzoxMDRBMDAwMDY4MEUwMDgwODBCNTA3MUNGODFEMTkzMDAxNzkwMDI5NTcKKzoxMDRBMTAwMDA0RDAwMDIxMDE3MTM4MUNGRkY3NTZGQkY4NjgwMjI4MEEKKzoxMDRBMjAwMDBERDBCODY4ODAwMEMyMTk1MDZDMDAyODExRDBCODZBNDcKKzoxMDRBMzAwMDQxNzgwOTAxMTAzMTUyNkIxMDFBODg0MjA1RDMzODFDOTUKKzoxMDRBNDAwMEZGRjc0MkZCODBCQzA4QkMxODQ3MzgxQ0ZGRjcyOEZBNjgKKzoxMDRBNTAwMEY4RTc3ODY4ODAwMEMwMTlDMDZCQzA0NkI4NjJGMUU3MUIKKzoxMDRBNjAwMEIwQjU4N0IwMEYxQzgwNkZDMDQ2MDA5MDAwMjQxMzRENzYKKzoxMDRBNzAwMDBCMjMxQjAyRTgxODgwNjkwMDI4MTdEMDY5NDZBMjAwQTIKKzoxMDRBODAwMDUyMTkwQjIzMUIwMkQyMTg5MjY5MzgxQzAwRjA5MkZCQkEKKzoxMDRBOTAwMDAwMjgwOUQxMDEzNEEwMDA0MDE5MEIyMzFCMDJDMDE4QzMKKzoxMDRBQTAwMDgwNjkwMDI4RUFEMTAxRTAwMTI4MDJEMDM4MUMwMEYwMUEKKzoxMDRBQjAwMDlERjkwN0IwQjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwMjQKKzoxMDRBQzAwMEI4QjVDMjA3RDIwRjE2NEMxNjQ5MDFEMDA4MjIwOEUwMkIKKzoxMDRBRDAwMDgyMDgwNUQzMEMyMkE0MTgwQjY4REYxRDE1MzcwM0UwRUMKKzoxMDRBRTAwMDFDMjIwQjY4REYxRDA5MzcwRjRCMUQ3ODAwMkQxM0QwREEKKzoxMDRBRjAwMDVCNzgwMDJCMTBEMDAxMjM1QjA2MUE0MzAwMjgwMUQxRkMKKzoxMDRCMDAwMDVCMDgxQTQzMDA5MjRBNjgwMTIwMzkxQzIzMUMwMEYwRkMKKzoxMDRCMTAwMERGRkVCOEJDMDhCQzE4NDcwMzIzMUIwNjFBNDNGMUU3QTUKKzoxMDRCMjAwMDkwRUUyMDQwN0MyOTAwODBGODBFMDA4MDAwMjFDMTYxQjkKKzoxMDRCMzAwMDA1NDk4QTY4MDAyQTAxRDE4ODYwMDJFMENBNjhDMDQ2MzcKKzoxMDRCNDAwMEQwNjFDODYwNzA0NzAwMDAyODBGMDA4MDAzNDk4ODY4NjIKKzoxMDRCNTAwMDAwMjgwMkQwQzI2OUMwNDY4QTYwNzA0NzI4MEYwMDgwRDIKKzoxMDRCNjAwMDAxMUMwMTIzODg2ODU4NDA4ODYwQ0E2ODAxM0FDQTYwRkQKKzoxMDRCNzAwMDBBNjkwMTNBODAwMDBBNjE0MjE4RDA2QjUzNkJDMDQ2NDMKKzoxMDRCODAwMENCNjIwQjY4OUIwMDU5MTg0OTZDNTM2Q0M5MTg1MTY0NkYKKzoxMDRCOTAwMDcwNDc4QTY4OTIwMDUyMThEMzZCODM0MjE3RDFEMDFEOTgKKzoxMDRCQTAwMDNEMzAwQTY4OTIwMDUyMTg1MjZDMDM2ODlBMUEwMjYwRUIKKzoxMDRCQjAwMDAxMjM4ODY4NTg0MDg4NjBDQTY4MDEzMkNBNjAwQTY5NUYKKzoxMDRCQzAwMDAxMzI4MDAwNDAxODBBNjE0MDZCQzA0NkM4NjI3MDQ3REQKKzoxMDRCRDAwMEI4QjUwNDFDMUQxQzE3MUMwODFDMzkxQ0ZGRjdEOUZGOTUKKzoxMDRCRTAwMDAwMjAyOTFDMDBGMDdDRkUwMTIwRjkxRDE5MzE0ODcxQkMKKzoxMDRCRjAwMDgwMDY2MDYwMDAyMEEwNjEwNjRBQzA0NjAwOTIwNjQ4MTgKKzoxMDRDMDAwMDAxNkQ0MjZEMDU0QjAwMjAwMEYwNjJGRUI4QkMwOEJDOEYKKzoxMDRDMTAwMDE4NDcwMDAwMDQwMDEyMDI3QzI5MDA4MDQ0ODAyMDQwRDQKKzoxMDRDMjAwMDA2NDkwQTY4MTAxODA4NjAwMTIzNUIwMjk4NDIwM0Q5RkMKKzoxMDRDMzAwMDAzNDkwQTc5MDEzMjBBNzE3MDQ3MDAwMEU0MkQwMDgwQUYKKzoxMDRDNDAwMEEwODIyMDQwODAwODgwMDAwNjQ5MEE2ODEwMTgwODYwODkKKzoxMDRDNTAwMDAxMjM1QjAyOTg0MjAzRDkwMzQ5MEE3OTAxMzIwQTcxQTAKKzoxMDRDNjAwMDcwNDcwMDAwRTQyRDAwODBBMDgyMjA0MDAzMzA4MDA4QkYKKzoxMDRDNzAwMDgwMDAwNjQ5MEE2ODEwMTgwODYwMDEyMzVCMDI5ODQyMDgKKzoxMDRDODAwMDAzRDkwMzQ5MEE3OTAxMzIwQTcxNzA0N0U0MkQwMDgwODMKKzoxMDRDOTAwMEEwODIyMDQwMDI0ODQxNzkwMTMxNDE3MTcwNDcwMDAwRjMKKzoxMDRDQTAwMEEwODIyMDQwOTBCNDgyMDAxNzRCOUE1ODhCMDcwMkQwMDQKKzoxMDRDQjAwMDg5MDgwQjFEMDFFMDg5MDhDQjFDMTE2OUQ3NjgxMjRDQ0IKKzoxMDRDQzAwMDgwMDAyMDU4NDA2OEI5NDIwM0QxODE0MjE5RDkxMTY4NDcKKzoxMDRDRDAwMDE3RTAwMDI0Qjk0MjA5RDk4MTQyMTJEOTExNjg3ODFBMjMKKzoxMDRDRTAwMDAwRDUwMzMwODAxMDk4NDIwQkQ4MDdFMDgxNDIwNUQ4RTgKKzoxMDRDRjAwMDc4MUEwMEQ1MDMzMDgwMTA5ODQyMDJEODIwMUM5MEJDNEUKKzoxMDREMDAwMDcwNDdDODFEMDUzMEZBRTc3MDA0MDA4MDgwQjU4MDAwNDgKKzoxMDREMTAwMDBGNEExNzU4ODgwNzAyRDA4ODA4MDQzMDAxRTA4ODA4MzUKKzoxMDREMjAwMDAzMzAzOTY5N0E2ODkxNDIwOUQ5Mzk2OEMwNDYzOTYxRDYKKzoxMDREMzAwMEY5Njg3QTY4OTE0MjAyRDkzOTY4QzA0NkY5NjA4MTAwMDEKKzoxMDRENDAwMDM4NjkwMEYwRDFGRDM4NjE4MEJDMDhCQzE4NDcwMDAwMEMKKzoxMDRENTAwMDcwMDQwMDgwOTBCNTAzMjEwOTA3MDE0MDBDMEYwMTA0ODUKKzoxMDRENjAwMDA5MEMwMTIyOTIwNzAyNDBBMzAwMUM0RkZGNTg4OTA3M0IKKzoxMDRENzAwMDg5MEYwMDA0MDAwQzgwMDgwMDI5MDBEMDAxMzAwMDJBQUYKKzoxMDREODAwMDAxRDAwMjMwMDBFMDAzMzBGOTY4N0E2ODkxNDIwMkQ5MUMKKzoxMDREOTAwMDM5NjhDMDQ2Rjk2MDgxMDBGODY4MDBGMEE1RkRGODYwNDgKKzoxMDREQTAwMDBGNDgwMDY5MDAyODA1RDAwMTIwQTA0MDAyRDAyMDFDMzcKKzoxMDREQjAwMEZFRjdDQUZDMEI0OUM4MUQxOTMwMDM3OTAwMjIwMDJCRUQKKzoxMDREQzAwMDA1RDEwOTQ5QzgxRDE5MzAwMzc5MDAyQjAzRDAwMjcxQTAKKzoxMDRERDAwMDA4MUNGRkY3NzlGOTkwQkMwOEJDMTg0NzcwMDQwMDgwRTQKKzoxMDRERTAwMEQwMkMwMDgwNjQyRDAwODBFNDJDMDA4MEIwQjUyQjQ5Q0QKKzoxMDRERjAwMDA5NzkwMDI5MDNEMTQxNjgyOTRCMTk0MzQxNjA4MTY4MzEKKzoxMDRFMDAwMDQ5MDgwMkQzMDkyMTA5MDQwMUUwMEQyMTA5MDQwQ0M4NTUKKzoxMDRFMTAwMDA4MzgxOTQzODc2OEJCMEEwM0QzNDM2ODVCMDgwMEQzOEIKKzoxMDRFMjAwMDAxMzE0MDY4MDMyMzFCMDcxODQwMDcwRkY4MDAxRDRDOTEKKzoxMDRFMzAwMDAwMTkyMzY4QzAxODUwMzAwMDc5MDEyODEwRDE2MDY4MkIKKzoxMDRFNDAwMDAxMjgwREQwMTAxQzAwRjA3MUY4MzgwMTAwMTkxOTIzNDkKKzoxMDRFNTAwMERCMDFDMDE4NDE2QjAxMzk0MTYzQjBCQzA4QkMxODQ3ODUKKzoxMDRFNjAwMDM4MDEwMDE5MTkyM0RCMDFDMDE4MDM2QjVEMUMwNTYzQjEKKzoxMDRFNzAwMEJEMDIyRDE5REIwMEVCMTg4MDMzMTk2M0RBNjI4MTZCRjgKKzoxMDRFODAwMDAxMzE4MTYzMDEyMUI5NDAyMjY4MTE0MzIxNjAwMTZCMjYKKzoxMDRFOTAwMDgwMjlFMkQzMDAyMTAxNjNERkU3MDAwMDI4MEYwMDgwQjIKKzoxMDRFQTAwMDAwMDAwMDgwQTAxQzAwODBGMEI1MUY0RTcwNjgwMDI4MzQKKzoxMDRFQjAwMDM2RDEwMDI0QjE2ODQ4MUNDOTAwODkxOUIwNjAzMjY4MzUKKzoxMDRFQzAwMDg5MTg2MDMxMEQ3QjA4MjgwMEQzQjQ2MDI4MDE4MDE5NEYKKzoxMDRFRDAwMDE5MjNEQjAxQzAxODg3NkIwMDJGMjFEMEMxNkE0QjFDM0UKKzoxMDRFRTAwMEFBMDI5MjE5QzkwMDUxMTg4MDMxQzM2MkNBNkEwOTZCQkIKKzoxMDRFRjAwMDAxM0Y4NzYzODAyQjAwRDNDNDYyMDAyRjA2RDEwMTI3QjYKKzoxMDRGMDAwMEFGNDAzQjFDREI0MzM3NjgzQjQwMzM2MDQzNkIwMTNCQTYKKzoxMDRGMTAwMDQzNjMxMDFDMzcxQzAwRjAwOUY4Nzg2ODAwMjhDOUQwREEKKzoxMDRGMjAwMEYwQkMwOEJDMTg0NzAwMDBBMDFDMDA4MEYwQjVDRDBGRjUKKzoxMDRGMzAwMEVEMDcwMTI0MDAyNzJFNEIyRTRBMDAyRDFERDBEODZBRTQKKzoxMDRGNDAwMDAxMzBEODYyMTAxQzUyNjkwMDJBMTJEMDAyNjk1MzFDMjkKKzoxMDRGNTAwMDkyMDAxMjE4MDM2MTkxNjE0MTY5MDEzMTQxNjEwMjY5NTYKKzoxMDRGNjAwMDBGMkEwMEQzMDc2MTBGMjkwMEQzNDQ2MEYwQkMwOEJDQUUKKzoxMDRGNzAwMDE4NDcwODFDRkZGN0VFRkVGOEU3MTU2OTZFMUNBRDAwMzgKKzoxMDRGODAwMEFEMTgxNjYxQTk2MTU1NjkwMTM1NTU2MTE2NjkwRjJFNzUKKzoxMDRGOTAwMDAwRDMxNzYxMEYyRDAwRDM1NDYwOEMwMkE0MEExNjRGNjIKKzoxMDRGQTAwMDNBNkZGRDY4RjkxRDc5MzEwMTJEMENEMURCNkQ1QjA4N0QKKzoxMDRGQjAwMDA5RDMwQjg5MDAyQjA2RDFGRDZGMDMzQjJFNjgzMzQwQ0MKKzoxMDRGQzAwMDJCNjAxNDIzMEI4MTEwNjA4MDA3ODAwQTIwNDMwMzA0QTgKKzoxMDRGRDAwMDAwRDAwMTM4NTA2MDA5NkEwODMyOTE0MjAwRDgwNzRBNkYKKzoxMDRGRTAwMDAwMEQwMkQzNTEyMDgwMDM4MjYxM0E2N0JFRTcwMDAwQzIKKzoxMDRGRjAwMEE0MkEwMDgwQTAxQzAwODA2ODBFMDA4MDI0QTcyMDQwMDYKKzoxMDUwMDAwMEIwQjUwMDI4MDREMTAxMjBDMDA1MTY0OUMwNDYwODYwOEIKKzoxMDUwMTAwMDE1NEMwMDI1Njc2OTAwMkYxNkQwRTA2ODQxMUM4MDAwMDAKKzoxMDUwMjAwMDAwMTlFMTYwODA2OTAxM0ZGRkY3OTRGRUUwNjgwRjI4RjYKKzoxMDUwMzAwMDAwRDNFNTYwRTA2ODgwMDAwMDE5ODA2OTAwMDgwMUQzQjIKKzoxMDUwNDAwMDAwMkZFQUQxNjc2MTAzRTAwODQ4MDE2RDAxMzEwMTY1NzUKKzoxMDUwNTAwMDY1NjAyMDY4MDAyODAxRDBGRkY3MjZGRkIwQkMwOEJDQkYKKzoxMDUwNjAwMDE4NDcwMDAwMDAwMDAwQjBBMDFDMDA4MEEwODIyMDQwNzMKKzoxMDUwNzAwMDAwMjA3MDQ3QjBCNDEwMjM4MjY4MTM0MDAwMjEwMDJCMzkKKzoxMDUwODAwMDE1RDAwQzRCMUE0MDEyMDE4MTI0MTQ0MzAyNjgxNTY4OTQKKzoxMDUwOTAwMDEzMUQ4MENCMUI2ODA0M0EwMjYwMjBDMjgwQzIwOEMyODQKKzoxMDUwQTAwMDE0NjA0MjY4MDEyMzlCMDcwNDMyMUE0MzQyNjAwODFDQzMKKzoxMDUwQjAwMEIwQkM3MDQ3MDBGMEZGMEZGMEI0ODI2ODUzMDkzNEQzREUKKzoxMDUwQzAwMDFCNEIxQTQwMTIwMTgxMjYxNjQzMDM2ODFENjgxRjFERTEKKzoxMDUwRDAwMDEwQ0YzRjY4MDQzQjAzNjAyMEMzMTBDMzgwQzMxRTYwMzEKKzoxMDUwRTAwMDQzNjgxRjFEMDEyMzlCMDczQjQzNDM2MENCNkIxODFGODUKKzoxMDUwRjAwMEM4NjM4MENCODBDMDFDNjgxRjFEMDMxRDA0NjAzODFDNjIKKzoxMDUxMDAwMDNGNjhDMDQ2MUY2MDFGMUQ0MzY4MUMwNDI0MEM4MTIzOTgKKzoxMDUxMTAwMDIzNDMzQjYwNDA2ODAwMEMwMDA0MTA0Mzc4NjAwODZFMzUKKzoxMDUxMjAwMDA0MzAwODY2NDg2RTA0MzA0ODY2MDAyMEYwQkM3MDQ3QzIKKzoxMDUxMzAwMDAwRjBGRjBGODBCNDgxNkEwMTIzOUIwN0NBMUQwNTMyNkUKKzoxMDUxNDAwMDFBNDMxMjY4Q0YxRDAxMzczQjQzMUI2OEMwNDZDQjYwMzIKKzoxMDUxNTAwMDAxMjM5QjA3MEYxRDNCNDMxQjY4QzA0NjhCNjAwMTIzNDcKKzoxMDUxNjAwMDlCMDcwQjQzMUI2ODBDQzEwMjYyMDE2QkMwNDYwQTYyQkQKKzoxMDUxNzAwMDA0MjM4MTY5MTk0MzgxNjEwMjZCQzA0NjkxNjE4MTZBOTAKKzoxMDUxODAwMDA0MzE4MTYyMDI2QkMwNDY5MTYyQzExRDM5MzE0QThCODQKKzoxMDUxOTAwMDA0M0E0QTgzNDk4QjAyNkI0MDMyNTE4M0MxODkwNDM5RjYKKzoxMDUxQTAwMEMxODFDMTY4MDA2QkMwNDZDMTYwMDAyMDgwQkM3MDQ3RUYKKzoxMDUxQjAwMDAwNDcwODQ3MTA0NzE4NDcyMDQ3Mjg0NzMwNDczODQ3RDcKKzoxMDUxQzAwMDMwNDAyREU5MENDMDlERTUwQzQ4QTBFMTI0NDhCMEUxMzkKKzoxMDUxRDAwMDFFMDAwMDBBMDFDMDRDRTIxODQwQTBFMzY0NTE5RkU1QTQKKzoxMDUxRTAwMDk0NTAyMEUwMDA1MDkwRTUxNDQwOTBFNTAwMzA4NUU1QjMKKzoxMDUxRjAwMDA0QzA4NUU1MDgxMDg1RTUwQzIwODVFNTEwMTA5MEU1RDQKKzoxMDUyMDAwMDEwNTA4NUUyMDEwMDU1RTEwQzUwOTA1NTA0MDA1NUUxMjUKKzoxMDUyMTAwMDA1MDAwMDBBMDQxMDkwRTUwMDUwODBFNTAwNTA4MUU1OEIKKzoxMDUyMjAwMDAwMDBBMEUzMzA0MEJERTgxRUZGMkZFMTAwMzA5M0U1MTEKKzoxMDUyMzAwMDA4MjA5MEU1MDEzMTgzRTMwMjM2ODNFMzAzMDA1NUUxNjIKKzoxMDUyNDAwMDE0MzA4MEU1RjJGRkZGMUEwMTAwQTBFM0Y0RkZGRkVBNEIKKzoxMDUyNTAwMDAxMDYxQ0UzRjFGRkZGMEFFQzEwOUZFNTAyQzZDQ0UzNTgKKzoxMDUyNjAwMDU0MjA5MUU1RTQzMDlGRTU1MDEwOTFFNUQ5RkZGRkVBMjUKKzoxMDUyNzAwMEYwNDcyREU5MjBDMDlERTUwQzY4QTBFMTI2NjhCMEUxNkIKKzoxMDUyODAwMDI1MDAwMDBBMTg0MEEwRTNCODUwOUZFNTk0MDAwMEUwMTQKKzoxMDUyOTAwMDA1MDA4MEUwMDg0MDkwRTUwNDgwOTBFNTAwNzBBMEUzMDAKKzoxMDUyQTAwMDFGQzBBMEUzMDJDNDhDRTMwMDUwOTBFNTEwOTA5MEU1OEQKKzoxMDUyQjAwMDE0QTA5MEU1MDAzMDg1RTUwNEMwODVFNTA4MTA4NUU1N0IKKzoxMDUyQzAwMDBDMjA4NUU1MTA1MDg1RTIwOTAwNTVFMTBDNTA5MDU1MDEKKzoxMDUyRDAwMDBBMDA1NUUxMTUwMDAwMEEwMzcwMTdFMjIwMTA4MUUyNzAKKzoxMDUyRTAwMDIwMzA4M0UyMEEwMDAwMEEwMDYwOTZFMjAxNzA4N0UyNDMKKzoxMDUyRjAwMDA5MDAwMDBBMjA2MDQ2RTIyMDAwNTZFM0VDRkZGRkNBRTYKKzoxMDUzMDAwMDAwNzBBMEUzMDFDMDQ2RTIwMkM0OENFMzAwNjBBMEUzQTkKKzoxMDUzMTAwMEU3RkZGRkVBMDA1MDg4RTVGMkZGRkZFQTAwMTBBMEUzOTQKKzoxMDUzMjAwMDAwNTA4MEU1MDEwMEEwRTFGMDQ3QkRFODFFRkYyRkUxM0QKKzoxMDUzMzAwMDAwQTA5NEU1MEEwMDU1RTExNEEwODBFNUU1RkZGRjFBRkUKKzoxMDUzNDAwMDAxMTBBMEUzRjVGRkZGRUFBODAzMDA4MDdDMjkwMDgwOUMKKzoxMDUzNTAwMDAwODAyMDQwNjg4MjlGRTUwQjkyQTBFMzY0QTI5RkU1NTUKKzoxMDUzNjAwMDU4QjA5QUU1MEVGMEEwRTE1NEIwOUFFNTFFRkYyRkUxODcKKzoxMDUzNzAwMDNGNDAyREU5MDAwMDRGRTExRjAwMDBFMjEyMDA1MEUzMjIKKzoxMDUzODAwMDU0MDAwMDBBMDAwMDBGRTE4MDAwQzBFMzAwRjAyMUUxQkEKKzoxMDUzOTAwMDA0NTBBMEUzMDA0MDk5RTUwOTAwMDBFQTAyMDAxNEUzOEMKKzoxMDUzQTAwMDUzMDAwMDFCODAwMDE0RTM1OTAwMDAxQjIwMDAxNEUzOEQKKzoxMDUzQjAwMDU5MDAwMDFCMDIwNzE0RTM1OTAwMDAxQjAxMDYxNEUzMDcKKzoxMDUzQzAwMDU5MDAwMDFCMDgwMDE0RTM0NTAwMDAxQjAyMDUxNEUzMEMKKzoxMDUzRDAwMDRBMDAwMDFCMDIwODE0RTM0QjAwMDAxQkU1MEUxNEUzMTcKKzoxMDUzRTAwMDA3MDAwMDBBMDQyMDk4RTUwQzEwOThFNTA0MzA1MkUyMEEKKzoxMDUzRjAwMDNDMzBBMEIzMDQzMDg4RTUwMjAwOTFFNzBGRTBBMEUxNjMKKzoxMDU0MDAwMDEwRkYyRkUxMDE1MDU1RTIwMzAwMDAwQTAwNDA5OUU1MkEKKzoxMDU0MTAwMDBDMDA5QUU1MDAwMDE0RTExQkZGMkYxMTA4MDA5QUU1MkIKKzoxMDU0MjAwMDAwMDAxNEUxMEIwMDAwMEEwMTBDMTRFMzk4MDE5RjE1MjEKKzoxMDU0MzAwMDBGRTBBMDExMTBGRjJGMTEwMjA0MTRFMzhDMDE5RjE1M0YKKzoxMDU0NDAwMDBGRTBBMDExMTBGRjJGMTEwMTA5MTRFMzgwMDE5RjE1MzcKKzoxMDU0NTAwMDBGRTBBMDExMTBGRjJGMTEwNDAwOUFFNTAwMDAxNEUxRTUKKzoxMDU0NjAwMDE2MDAwMDBBNTRFMDhGRTIwNDAwMTRFMzQwMDA5QTE1OEQKKzoxMDU0NzAwMDEwRkYyRjExMDIwQTE0RTM0NDAwOUExNTEwRkYyRjExOTgKKzoxMDU0ODAwMDAyMDkxNEUzNDgwMDlBMTUxMEZGMkYxMTAxMDIxNEUzREEKKzoxMDU0OTAwMDRDMDA5QTE1MTBGRjJGMTEwMTA0MTRFMzUwMDA5QTE1QzcKKzoxMDU0QTAwMDEwRkYyRjExMDEwQTE0RTMyMTAwMDAxQjAyMDAxNEUzNzYKKzoxMDU0QjAwMDBFMDAwMDFCMTAwMDlBRTUwMDAwMTRFMTFDMDAwMDFCMDgKKzoxMDU0QzAwMDAwNDA5OUU1MDQ1MEEwRTMwMDQwOTRFMjFCRkYyRjExMzcKKzoxMDU0RDAwMDNGNDBCREU4MDRGMDVFRTJDMDAwODBFMzAwRjA2MUUxMUYKKzoxMDU0RTAwMEZBRkZGRkVBMTgwMDlBRTUxQzEwOUFFNTExRkYyRkUxNzgKKzoxMDU0RjAwMDU0QjA5QUU1MUMxMDlBRTUxNDAwOUFFNTExRkYyRkUxQ0IKKzoxMDU1MDAwMDIwMTA5QUU1MDAwMEEwRTMxMUZGMkZFMTI0MTA5QUU1OTYKKzoxMDU1MTAwMDExRkYyRkUxMjgxMDlBRTUxMUZGMkZFMTJDMTA5QUU1RDkKKzoxMDU1MjAwMDExRkYyRkUxMzAxMDlBRTUxMUZGMkZFMTM0MTA5QUU1QjkKKzoxMDU1MzAwMDExRkYyRkUxRkVGRkZGRUEzOEUwOUFFNTNDMTA5QUU1MDMKKzoxMDU1NDAwMDE4MDA5QUU1MTFGRjJGRTEzOEUwOUFFNTNDMTA5QUU1NDIKKzoxMDU1NTAwMDE0MDA5QUU1MTFGRjJGRTE2NDIwOUZFNTAwMzA5MkU1RTkKKzoxMDU1NjAwMDAwMzA1M0UwMEEwMDAwQkEwMDMwODJFNTBDMDA5MkU1RkEKKzoxMDU1NzAwMDA4MzA5MkU1MDAxMDkxRTIwMzAwMDAwQTAzMTA4MEU3NzIKKzoxMDU1ODAwMDA0MzA1M0UyM0MzMEEwQjMwODMwODJFNTAxMDBBMEUzRDAKKzoxMDU1OTAwMDFFRkYyRkUxM0MxMDlGRTUwMDAwOTFFNTAxMDA4MEUyMzUKKzoxMDU1QTAwMDAwMDA4MUU1MDAwMEEwRTNGOEZGRkZFQTEwMDA5RkU1OUUKKzoxMDU1QjAwMDA4MTA5MEU1MDQxMDUxRTIzQzEwQTBCMzA4MTA4MEU1RkIKKzoxMDU1QzAwMDFFRkYyRkUxRTQyRDAwODBDQzA0MDA4MDcxMkJGRkZGMzMKKzoxMDU1RDAwMEQxM0RGRkZGQzkyQkZGRkZBMDgyMjA0MEM5MUM4OTA4RDUKKzoxMDU1RTAwMDg5MDAwMTIzODU0QTVCMDcxODQzMTM2ODVCMTgxMzYwMjEKKzoxMDU1RjAwMDAwMUY4MUEzNUIxQTE4NDcwNDIwQTBFNTA0MjBBMEU1NDIKKzoxMDU2MDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RjYKKzoxMDU2MTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RTYKKzoxMDU2MjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RDYKKzoxMDU2MzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QzYKKzoxMDU2NDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QjYKKzoxMDU2NTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QTYKKzoxMDU2NjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1OTYKKzoxMDU2NzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1ODYKKzoxMDU2ODAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NzYKKzoxMDU2OTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NjYKKzoxMDU2QTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NTYKKzoxMDU2QjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NDYKKzoxMDU2QzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MzYKKzoxMDU2RDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MjYKKzoxMDU2RTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MTYKKzoxMDU2RjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDYKKzoxMDU3MDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RjUKKzoxMDU3MTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RTUKKzoxMDU3MjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1RDUKKzoxMDU3MzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QzUKKzoxMDU3NDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QjUKKzoxMDU3NTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1QTUKKzoxMDU3NjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1OTUKKzoxMDU3NzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1ODUKKzoxMDU3ODAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NzUKKzoxMDU3OTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NjUKKzoxMDU3QTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NTUKKzoxMDU3QjAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1NDUKKzoxMDU3QzAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MzUKKzoxMDU3RDAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MjUKKzoxMDU3RTAwMDA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MTUKKzoxMDU3RjAwMDA0MjBBMEU1MDQyMEEwRTUxRUZGMkZFMUU0MkQwMDgwOTkKKzoxMDU4MDAwMDk4MDA5RkU1OTgxMDlGRTUwMTIwNDBFMDk0MzA5RkU1QzcKKzoxMDU4MTAwMDAwMDA5MUU1MDMwMDUwRTEwMzAwMDAxQTA0MTA4MUUyNEEKKzoxMDU4MjAwMDA0MjA1MkUyMDAwMDAwMEFGOEZGRkZFQTc4MDA5RkU1M0EKKzoxMDU4MzAwMDAwMjA4MEU1NzQwMDlGRTU3NDEwOUZFNTAxMjA0MEUwQTIKKzoxMDU4NDAwMDYwMzA5RkU1MDAwMDkxRTUwMzAwNTBFMTAzMDAwMDFBN0QKKzoxMDU4NTAwMDA0MTA4MUUyMDQyMDUyRTIwMDAwMDAwQUY4RkZGRkVBOEYKKzoxMDU4NjAwMDUwMDA5RkU1MDAyMDgwRTU0QzAwOUZFNTRDMTA5RkU1MkYKKzoxMDU4NzAwMDAxMjA0MEUwMkMzMDlGRTUwMDAwOTFFNTAzMDA1MEUxNUQKKzoxMDU4ODAwMDAzMDAwMDFBMDQxMDgxRTIwNDIwNTJFMjAwMDAwMDBBMjIKKzoxMDU4OTAwMEY4RkZGRkVBMjgwMDlGRTUwMDIwODBFNTFFRkYyRkUxQ0EKKzoxMDU4QTAwMDdDMzQwMDgwODAzMDAwODBBRERFQURERUMwMDQwMDgwM0UKKzoxMDU4QjAwMEZDMzcwMDgwODAzNDAwODBDNDA0MDA4MEZDM0YwMDgwRkUKKzoxMDU4QzAwMDQwMzgwMDgwQzgwNDAwODA3ODQ3MDAwMDcxRUFGRkVBOTEKKzoxMDU4RDAwMDc4NDcwMDAwMzlGRUZGRUE3ODQ3MDAwMDYzRkVGRkVBRTAKKzoxMDU4RTAwMDc4NDcwMDAwMUJGRkZGRUE3ODQ3MDAwMDZCRUFGRkVBRjkKKzoxMDU4RjAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDA4MDI4MDQwMDAwRkUKKzoxMDU5MDAwMEY4M0QwMDAwMDAwMTAwODAwMEZGMDAwMDAwMDAwMDAwRTIKKzoxMDU5MTAwMEI5MEJGRkZGMDAwMDAwMDBENTBCRkZGRjAzRkYwNjU0OEIKKzoxMDU5MjAwMDAzMDAwMDAwNzUwNEZGRkYwMDAwMDAwMEExMDVGRkZGNTkKKzoxMDU5MzAwMDA0RkYwNzU0MDMwMDAwMDBCNTA0RkZGRjAwMDAwMDAwNEYKKzoxMDU5NDAwMEYxMDVGRkZGMDVGRjA1NTQwMzAwMDAwMDM5MDRGRkZGQzgKKzoxMDU5NTAwMDAwMDAwMDAwNTUwNUZGRkYwMUZGMDQwMDAzMDAwMDAwRTgKKzoxMDU5NjAwMDQxMThGRkZGMDAwMDAwMDA2MTBFRkZGRjAyRkYwMjA4NjgKKzoxMDU5NzAwMDAwMDAwMDAwQTEwMkZGRkYwMDAwMDAwMEYxMDJGRkZGOTUKKzoxMDU5ODAwMEZGRkYwMTQ0MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU5OTAwMDlEMERGRkZGMDYwMEZGMDAwMDAwMDAwMDNENTBGRkZGQ0YKKzoxMDU5QTAwMDgxNTBGRkZGMDAwMDAwMDBGRkZGRkYwMDAwMDAwMDAwMkIKKzoxMDU5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRjAwRUEKKzoxMDU5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDU5RDAwMEZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4MDUwMDgwRUEKKzoxMDU5RjAwMDExNzUyMTQwMUI3NTIxNDAzMTc1MjE0MDQ5NzUyMTQwQTkKKzoxMDVBMDAwMDU1NzUyMTQwNjM3NTIxNDA3RDc1MjE0MEE5NzUyMTQwNjAKKzoxMDVBMTAwMDZENzYyMTQwQzU3NjIxNDBEMzc2MjE0MERENzYyMTQwNDgKKzoxMDVBMjAwMEU3NzYyMTQwOTk3NzIxNDBBNzc3MjE0MEI1NzcyMTQwM0IKKzoxMDVBMzAwMDYxNzgyMTQwNUY3QzIxNDBFOTdDMjE0MDg5N0QyMTQwQzMKKzoxMDVBNDAwMEJEN0UyMTQwQzk3RTIxNDAyOTdGMjE0MDhEN0YyMTQwOUMKKzoxMDVBNTAwMEI5N0YyMTQwREQ3RjIxNDAxRDgwMjE0MDQ1ODAyMTQwQ0MKKzoxMDVBNjAwMDhEODAyMTQwOUQ4MDIxNDBDNTgwMjE0MEQ1ODAyMTQwRUUKKzoxMDVBNzAwMDFEODEyMTQwNUI4MTIxNDBCMTgxMjE0MDExODIyMTQwNjMKKzoxMDVBODAwMDFCODIyMTQwMUY4MjIxNDA4RDgyMjE0MEQ5ODIyMTQwRUEKKzoxMDVBOTAwMDMxODMyMTQwNkQ4MzIxNDBEMTgzMjE0MDA5ODQyMTQwRkQKKzoxMDVBQTAwMDE5ODQyMTQwNTE4NDIxNDA2MTg0MjE0MDc1ODQyMTQwMjIKKzoxMDVBQjAwMDlEODQyMTQwQTc4NDIxNDBCMTg0MjE0MDE1ODUyMTQwNDcKKzoxMDVBQzAwMDQ1ODUyMTQwNTE4NTIxNDBDNTg1MjE0MENGODUyMTQwMTQKKzoxMDVBRDAwMEQ5ODUyMTQwRTM4NTIxNDBFRDg1MjE0MEY3ODUyMTQwOEUKKzoxMDVBRTAwMDAxODYyMTQwMEI4NjIxNDAxNTg2MjE0MDAxODkyMTQwRjUKKzoxMDVBRjAwMDFGODYyMTQwMjk4NjIxNDAzMzg2MjE0MDNEODYyMTQwNTIKKzoxMDVCMDAwMDY1ODYyMTQwNkY4NjIxNDBEMTg2MjE0MERCODYyMTQwNzkKKzoxMDVCMTAwMEU1ODYyMTQwRUY4NjIxNDBGOTg2MjE0MDlENzQyMTQwOTEKKzoxMDVCMjAwMDAzODcyMTQwNjk4NzIxNDBCNTg3MjE0MEY5ODcyMTQwQkIKKzoxMDVCMzAwMDA5ODgyMTQwOUQ3NDIxNDA1NTg4MjE0MDU5ODgyMTQwODEKKzoxMDVCNDAwMDVEODgyMTQwQjU4ODIxNDBERDg4MjE0MEU5ODgyMTQwRDkKKzoxMDVCNTAwMEVEODgyMTQwRjE4ODIxNDBGNTg4MjE0MEY5ODgyMTQwRDUKKzoxMDVCNjAwMEZEODgyMTQwMkQ4NTIxNDA4OTg1MjE0MDlENzQyMTQwNUIKKzoxMDVCNzAwMDlENzQyMTQwMEQ4OTIxNDA5RDc0MjE0MEUxNzQyMTQwOTQKKzoxMDVCODAwMDlENzQyMTQwOUQ3NDIxNDA5RDc0MjE0MDlENzQyMTQwNEQKKzoxMDVCOTAwMDlENzQyMTQwOUQ3NDIxNDA2Qjc4MjE0MEY1N0IyMTQwMEMKKzoxMDVCQTAwMDMxN0MyMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDVCQjAwMDAwMDAwMDAwNUMwMTE4NDA1ODAxMTg0MDI0QTMyMDQwNTgKKzoxMDVCQzAwMDI0QTcyMDQwMDAwMDAwMDAwMDAwMDAwMDZDMDExODQwRTUKKzoxMDVCRDAwMDY4MDExODQwMjQ4MzIwNDAyNEEzMjA0MDAwMDAwMDAwRDYKKzoxMDVCRTAwMDAwMDAwMDAwN0MwMTE4NDA3ODAxMTg0MDAwMDAwMDAwMEYKKzoxMDVCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDMDExODQwQzAKKzoxMDVDMDAwMDg4MDExODQwMjRBOTIwNDAyNEFCMjA0MDAwMDAwMDAwNTcKKzoxMDVDMTAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMTIwMDE4MDAxMjAwNDAKKzoxMDVDMjAwMDBDMDAxMjAwMUMwMDEyMDAyNEE4MjA0MEE0QTgyMDQwNTAKKzoxMDVDMzAwMEE0QTgyMDQwMjRBOTIwNDAwMDAwMDAwMEQxQTgyMTQwQjEKKzoxMDVDNDAwMDJEQUEyMTQwMDAwMDAwMDA4OTcwMjE0MEM5QTEyMTQwRjcKKzoxMDVDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwNDMKKzoxMDVDNjAwMDU3ODkyMTQwRDFBODIxNDBDNTJGRkZGRjA1MjFGRkZGMDMKKzoxMDVDNzAwMEVGMjBGRkZGNTlBNzIxNDAzNDJFMDA4MDQ4MkUwMDgwREUKKzoxMDVDODAwMDVDMkUwMDgwMzAzMzNBMzEzMTNBMzEzMTAwMzAzNzJGRDkKKzoxMDVDOTAwMDMyMzMyRjMwMzEwMDMwMzAzMDMwMzEzNTM2MzkwMDQzMzcKKzoxMDVDQTAwMDZGNzA3OTcyNjk2NzY4NzQyMDI4NjMyOTIwMzIzMDMwRjgKKzoxMDVDQjAwMDMxMjAzMzQzNkY2RDIwNDM2RjcyNzA2RjcyNjE3NDY5NkUKKzoxMDVDQzAwMDZGNkUwQTAwMDgxMDAwMDMwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDVDRDAwMDAwMDAwMDAwOEM1M0ZGRkYyN0YwN0RGRDAwMDEwMDAyNTMKKzoxMDVDRTAwMERBMEU4MjAwMDE0MDY0MDQ2NDJEMDA4MEU0MkMwMDgwMDAKKzoxMDVDRjAwMDY5M0VGRkZGQzk0RkZGRkZENTI0RkZGRkM5M0JGRkZGRjAKKzoxMDVEMDAwMDI5M0NGRkZGMTkxQUZGRkY2NTExRkZGRkNDNTNGRkZGNkUKKzoxMDVEMTAwMDIxNDBGRkZGODk3MDIxNDA0OTcyMjE0MEQ5M0ZGRkZGOTgKKzoxMDVEMjAwMDIxOUEyMTQwODUyNEZGRkY2NDUzRkZGRjhDNTNGRkZGMUUKKzoxMDVEMzAwMDAwMDAwMDAwRkZGRjAwMDA4MDMwMDA4MDAwMDAwMDAwMzUKKzoxMDVENDAwMEZGRkYwMDAwMDAwMDIwNDBCMDUwMDAwMDdCMEUwMDAwNkMKKzoxMDVENTAwMDAwNkUyMTQwMDAwMDAwMDAwMDAwMDAwMEVEODkyMTQwOUQKKzoxMDVENjAwMDhCODkyMTQwQTU4QzIxNDAwNThEMjE0MENEOEQyMTQwN0UKKzoxMDVENzAwMDhCOEIyMTQwQTk4RTIxNDAxNThGMjE0MDY5OEIyMTQwQkEKKzoxMDVEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDVEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDVEQTAwMDAwMDAwMDAwNTlCRDIxNDBDMUJEMjE0MDJEQkUyMTQwNTEKKzoxMDVEQjAwMDAwMjAwQTRBMEIyMzFCMDJEMTE4MkQyMzlCMDFEMzE4NjQKKzoxMDVEQzAwMDg4NjFEODYwRDg2MzgwMzJDODYwMDg2MTQ4NjFEMDYyNTkKKzoxMDVERDAwMDAzNDhDMDQ2NDg2MDg4NjA3MDQ3MDAwMDY4MEUwMDgwMzUKKzoxMDVERTAwMEZFMDMwMDAwRjBCNTg0QjAwQzFDMDUxQzAwMjMwMDkzREEKKzoxMDVERjAwMEZGRjdERUZGNjg0OTBCMjMxQjAyQ0YxODc4NjgyODQwQTUKKzoxMDVFMDAwMDAwMjJGODYwM0E2MUJBNjgyMjQwN0E2MTBDMUM0MTA5QUMKKzoxMDVFMTAwMDAzRDI1MTA5MDFEMjgwMEEwMkQzNjA0ODAwRjBDMkY4Q0YKKzoxMDVFMjAwMDAxMjBGOTY4NDkwOTAzRDI3OTY5NDkwOTAwRDIwMDIwQTMKKzoxMDVFMzAwMDAwMDYwMDBFMDNGMEQ0RkFGODY4MDAyODcwRDAwMDIzQTIKKzoxMDVFNDAwMDAyOTMwMTkzNTQ0QTAxMjMxODQzRjg2MDAwMjBENTFEQTIKKzoxMDVFNTAwMDc5MzUwMzk1MDEyNDAwMjE0RjRERkE2ODIyNDAzOUQwNEQKKzoxMDVFNjAwMDhBMDA1MjE4OTIwMDRFNEI5QjVDMUUxQzgzNDIwNEQwNDkKKzoxMDVFNzAwMDRCNEJEMzE4NUI3ODgzNDIyQ0QxNDk0QkQyMThEMzc4NDMKKzoxMDVFODAwMDAzOURFRDZBQUI0MjAyRDkwMzlEQzA0NkVCNjI1MzY4QTUKKzoxMDVFOTAwMDVCMDgwMUQzMDEyMzAwOTM4NjQyMEFEMTk1NjgwMjlCRDcKKzoxMDVFQTAwMDVFMUMwMjk2OUIwMDNDNEU5RTE5MEIyMzFCMDJGMzE4QUUKKzoxMDVFQjAwMDlENjE1Mzc4ODM0MjBERDFEMjY4MDE5QjVEMUMwMTk1OTEKKzoxMDVFQzAwMDlCMDAzNTRENUQxOTJEMjM5QjAxRUIxOERBNjAzQTY5NzMKKzoxMDVFRDAwMDAxMzIzQTYxNjQwMDAxMzEwQjI5QkREMzAxMzAwOTI4MzgKKzoxMDVFRTAwMEI4RDMwMDIwMDI5Qjk5MDAyQjRBODkxODBCMjMxQjAyNzAKKzoxMDVFRjAwMEM5MTg4ODYxMDE5Qjk5MDA4OTE4MkQyMzlCMDFDOTE4MzUKKzoxMDVGMDAwMEM4NjAwMDlCMDAyQjBDRDE4MTAwODkxODBCMjMxQjAyNTkKKzoxMDVGMTAwMEM5MThDQjY5QzA0NjhCNjEwMTMwMEIyOEY0RDMwOEUwNjcKKzoxMDVGMjAwMDA3RTAwMzlERTg2QTMwMjgwM0QyMzAyMDAzOURDMDQ2NzUKKzoxMDVGMzAwMEU4NjIxOTRBNzg2OTAwMjgyQUQwMDAyMTAxMjMxODQzMTEKKzoxMDVGNDAwMDc4NjEwMDIwMDEyNDAwMjIxMzRFN0I2OTIzNDAxMEQwODkKKzoxMDVGNTAwMDkzMDA5QjE4OUIwMDEyNEQ1QjE5OUQ3ODg1NDIwOEQxRDgKKzoxMDVGNjAwMDFENjkwQjFDOUIwMDlFMTkyRDIzOUIwMUYzMThERDYzRkIKKzoxMDVGNzAwMDAxMzE2NDAwMDEzMjBCMkFFNkQzMDEzMDA5MjhFMUQzNTQKKzoxMDVGODAwMDAwMjA4OTAwMDQ0QTg5MTgyRDIzOUIwMUM5MThDODYzODEKKzoxMDVGOTAwMDA0QjBGMEJDMDhCQzE4NDc2ODBFMDA4MDMwNTNGRkZGMDcKKzoxMDVGQTAwMDAwMDEwMDgwMDA0NzA4NDcxMDQ3MTg0Nzc4NDdDMDQ2NUYKKzoxMDVGQjAwMDE4QzA5RkU1MUNGRjJGRTE3ODQ3QzA0NjEwQzA5RkU1NDEKKzoxMDVGQzAwMDFDRkYyRkUxNzg0N0MwNDYwOEMwOUZFNTFDRkYyRkUxNkEKKzoxMDVGRDAwMDM4NTJGRkZGODg1MUZGRkZENUIwMjE0MEYwQjUwNDIwQjMKKzoxMDVGRTAwMDFBNDkwMTI1MDg2MDFBNEZCQjIzMUIwMUY4MTgwNTczRDUKKzoxMDVGRjAwMDE4NDg0MTZCMkMwNTAwMjA3QTZFMTc0QjhBNDIxREQwNDEKKzoxMDYwMDAwMDE5N0IwMDI5MTdEMUQ5MURGRjMxM0EzMTQ5NzgxRTFDNUYKKzoxMDYwMTAwMDAwMjkxMEQxQjA2MDEwMjA3MDYwMTA0QTEwNDlGRkY3QkQKKzoxMDYwMjAwMEMzRkYwMDI4MDdEMDM1NzMwNDIzQjg2OTE4NDNCODYxNEIKKzoxMDYwMzAwMDIwNjEwMEYwMTdGOEYwQkMwOEJDMTg0NzE4NzMwNDIzNUYKKzoxMDYwNDAwMEI4Njk5ODQzQjg2MTIwNjFGNUU3MDAwMDAwMDAwMEIwMkUKKzoxMDYwNTAwMDY4MEUwMDgwMDAwMTE4NDAyODA1MDA4MDIwNTVGRkZGRDEKKzoxMDYwNjAwMDdENzEyMTQwRjhCNTE1NEYzOTZDMTU0ODQwNkUwQzFBRkEKKzoxMDYwNzAwMDE0NEU3MTY4MTQ0REExNDIwNkQ4MTQ0QTBBNDMwMDkyODYKKzoxMDYwODAwMEI5NkIwOTE4RkE2QjExRTAxMTIyNTIwNTIyNDMwMDkyRjQKKzoxMDYwOTAwMEI5NkIwOTE4MDAyMEZBNkIyQjFDRkZGNzhERkY3MDY4OTUKKzoxMDYwQTAwMDAwMUIwQTRBMDI0MzAwOTJCOTZCRkE2QjAwMjAyQjFDQkEKKzoxMDYwQjAwMEZGRjc4MkZGRjhCQzA4QkMxODQ3MDAwMDdDMjkwMDgwNkQKKzoxMDYwQzAwMDY4MEUwMDgwMjgwNTAwODA0NDgwMjA0MDAwMDAzNzAyRDAKKzoxMDYwRDAwMEYwQjUyQjRGQjg2ODc5NjhDMDE5MjAzMDI5NEFGRkY3MEUKKzoxMDYwRTAwMDYzRkYwMTIwQzAwMjI4NDlDMDQ2MDg2MEI5NjgzODFDMTcKKzoxMDYwRjAwMDI2NEQwMDI0MjY0RUVGMUQ3OTM3MDAyOTMxRDEzMTY4MTUKKzoxMDYxMDAwMDBBNzgxMjBBMDNEMjA0NzNGMEJDMDhCQzE4NDc0OTc4MTUKKzoxMDYxMTAwMDAwMjkwQ0QxMDUxQzQwNjgwMEYwM0VGOTMwNjgwMEYwMDEKKzoxMDYxMjAwMDY3RjgwMDI4MjZEMTJDNzNGRkY3NThGRjIyRTAwOTAxRjkKKzoxMDYxMzAwMDA3MUM0MTYwMDgxQzE3NEExNzQ5RkZGNzM1RkYwMDI4NjQKKzoxMDYxNDAwMDA3RDEzQzczMDQyM0E4Njk5ODQzOTkwNEE4NjEwODYxQTYKKzoxMDYxNTAwMERBRTcxMDIwMDBGMDIwRjkxMDIwQjg2MEZGRjc4MkZGODYKKzoxMDYxNjAwMEQyRTcwNTFDNDA2ODAwRjAxN0Y5MzA2ODAwRjA0MEY4RUQKKzoxMDYxNzAwMDAwMjhEOEQwMDIyM0Y4NkIxODQzRjg2M0M0RTcwMDAwNjYKKzoxMDYxODAwMDI4MDUwMDgwQTU1NUZGRkYwMDAwMDBCMDY4MEUwMDgwQzQKKzoxMDYxOTAwMEU0MDEwMDgwMjA1NUZGRkY3RDcxMjE0MDkwQjUwMTIwNzIKKzoxMDYxQTAwMDQwMDMxMDQ5MDAyNzA4NjAwRjRDRTAxREZGMzAzQTMwRDMKKzoxMDYxQjAwMDQ3NzBFMDY5ODAwMDAwMTkwMDY5MDBGMEQ3RjhFMDY5RDUKKzoxMDYxQzAwMDAwMjgwMUQwRTc2MTAxRTAwMTIwRTA2MTA3NDgwMjIzRDcKKzoxMDYxRDAwMEMxNkIxOTQzQzE2MzI3NzNGRkY3MDBGRjkwQkMwOEJDNzQKKzoxMDYxRTAwMDE4NDcwMDAwMDAwMDAwQjAyODA1MDA4MEU4MEUwMDgwN0QKKzoxMDYxRjAwMDgwQjU4NEIwMDcxQzc4ODg2RDI4MDNEQjM4MUMwMEYwNUMKKzoxMDYyMDAwMEY3RjgxN0UwODAwMDBENDkwOTU4MzgxQ0ZGRjdDQkZFNUUKKzoxMDYyMTAwMDAwMjgwRkQxMzk3OEM5MDkwQ0QzNjk0NjM4MUMwMEYwMjEKKzoxMDYyMjAwMENGRjg2ODQ2MDAyMTAwRjAwQkY4MDAyODAxRDEwMTIwQ0EKKzoxMDYyMzAwMDAwRTAwMDIwMDRCMDgwQkMwOEJDMTg0N0U4MDEwMDgwRTIKKzoxMDYyNDAwMEYwQjU4MkIwMDIxQzQxNEJERDFERkYzNTNBMzUyRjc4ODkKKzoxMDYyNTAwMDAwMkYwMUQwMDAyNzAwRTAwMTI3MkY3MDJGNzhGQjAwQ0UKKzoxMDYyNjAwMERCMTk1QjAxM0E0RkRDMTk0MDc4MDAwMUM3MUQwOTM3ODMKKzoxMDYyNzAwMDAwMjA4MzAwRDY1OEMwNDZFNjUwMDEzMDA0MjhGOEQzRTkKKzoxMDYyODAwMDAwMjkwRkQwMDAyMkJCMDgwMTkzODM0MjBCRDkxMzFDQjUKKzoxMDYyOTAwMDlCMDBDQjU4ODYwMEEzNTEwMTlCMDEzMDAxMzI4MzQyMDEKKzoxMDYyQTAwMEY1RDgwMEUwMTAyNzJCNDgwMjZEODA2RTJBNDk4MjQyMDMKKzoxMDYyQjAwMDAzRDg4MjFBQ0I2QzlBMUEwMEUwMTIxQUJBNDIwNUQ4OTcKKzoxMDYyQzAwMDI2NDg4MTZCMDEzMTgxNjMwMTIwMzdFMEMzMTlDQTZDMTQKKzoxMDYyRDAwMDkzNDIwOEQ4MjI0QTNBNDMwMDkyMEExQzQ5NkMwOTE4OTIKKzoxMDYyRTAwMDkyNkMyMzFDMTJFMDE2MUEwMDk2MUI0OTQ5NkMwOTE4N0YKKzoxMDYyRjAwMDE5NDg4MjZDMDMyMDIzMUNGRkY3NUVGRUI4MUIxODRBNjYKKzoxMDYzMDAwMDAyNDMwMDkyQTMxOTE0NDg4MjZDNDE2QzAzMjBGRkY3RUEKKzoxMDYzMTAwMDUzRkUwMTIwMEQ0OUMwNDY2ODcwOEE2OTkyMDA1MjE4RTgKKzoxMDYzMjAwMDE3NjE4QTY5MDAyQTAyRDAwMDI3OEY2MTAwRTA4ODYxMjYKKzoxMDYzMzAwMDBDNDgwMjIzQzE2QjE5NDNDMTYzMDAyMDAxMjcwQTQ5OUQKKzoxMDYzNDAwMEMwNDY0RjczMDJCMEYwQkMwOEJDMTg0NzI4MDUwMDgwNTcKKzoxMDYzNTAwMDUwQkEyMDQwNjgwRTAwODA3QzI5MDA4MEEwODIyMDQwMzYKKzoxMDYzNjAwMDAwMDAxOTAyRTgwRTAwODAxODFBMDA4MDA3NDk4QTZFQTIKKzoxMDYzNzAwMDEwMTgwNzRBRDI2QzEzMDQxQjBDODM0MjAwRDg4MDFBRjEKKzoxMDYzODAwMDg4NjY4ODZFMDM0OUMwNDY0ODYxNzA0NzY4MEUwMDgwODEKKzoxMDYzOTAwMDdDMjkwMDgwOTBFRTIwNDAwNjQ5NEE2RTEwMTgwNjRBN0IKKzoxMDYzQTAwMDEyNkM4MjQyMDBEODgwMUE0ODY2NDg2RTAzNDlDMDQ2ODMKKzoxMDYzQjAwMDA4NjE3MDQ3NjgwRTAwODA3QzI5MDA4MDkwRUUyMDQwQzQKKzoxMDYzQzAwMDA1MjIwQTYwODI4OEMwNDY4QTgwMDAyMjRBNzA0MDg4N0UKKzoxMDYzRDAwMEMwNDY0ODgwQ0E4MDhBNjBDQTYwNzA0NzA1MjIwMjYwNTEKKzoxMDYzRTAwMDAwMjI4MjgwNDI3MDQxODBDMjgwODI2MEMyNjA3MDQ3MTkKKzoxMDYzRjAwMDgwQjU4NEIwMDcxQzBFNDg0MTZCMDEzMTQxNjM2OTQ2OEEKKzoxMDY0MDAwMDM4MUNGRkY3RERGRjM4NjhDMDQ2MDA5MDQ1MjAwMEFCMjAKKzoxMDY0MTAwMDE4NzAwMTI3REY4MDY4NDYwMDIxRkZGNzExRkYwMDI4NzAKKzoxMDY0MjAwMDAxRDEzODFDMDBFMDAwMjAwNEIwODBCQzA4QkMxODQ3MzMKKzoxMDY0MzAwMEEwODIyMDQwMDBCNTg0QjBDMTg4MDk0QUMwNDY5MTgxM0QKKzoxMDY0NDAwMDY5NDZGRkY3QkRGRjAxMjA0MDAyMDFBQjU4ODA2ODQ2NTYKKzoxMDY0NTAwMDAwMjFGRkY3RjVGRTAxMjAwNEIwMDhCQzE4NDcwMDAwM0EKKzoxMDY0NjAwMEU4MEUwMDgwMDBCNUZGRjdDM0ZGMDhCQzE4NDcwMTIwMDUKKzoxMDY0NzAwMDAzNDlDMDQ2MDg3MUExMjE0OTAzODg2MDAwMjA3MDQ3ODQKKzoxMDY0ODAwMDI4MEYwMDgwMDAyMDA0NDlDMDQ2MDg3MUZGMjFBMTIyODYKKzoxMDY0OTAwMDUyMDMwMTMxOTE2MDcwNDcyODBGMDA4MDAyMjBBMTIxMzIKKzoxMDY0QTAwMDQ5MDM4ODYwMDAyMDcwNDcwMTIwNDAwMkExMjE0OTAzNzAKKzoxMDY0QjAwMDg4NjAwMDIwNzA0N0MwODhDMDA2QzAwRUExMjE0OTAzMzMKKzoxMDY0QzAwMDQ4NjEwMjQ5QzA0NkM4NjMwMDIwNzA0N0U4MUEwMDgwNEUKKzoxMDY0RDAwMDgwQjU4NEIwMDg0OTBGNkI2OTQ2RkZGNzcxRkZGODA2NzUKKzoxMDY0RTAwMEMwMEUwMUFCNTg4MDY4NDYwMDIxRkZGN0E5RkUwMTIwQ0QKKzoxMDY0RjAwMDA0QjA4MEJDMDhCQzE4NDc4MDAwMTQ0MDgwQjU4NUIwNEIKKzoxMDY1MDAwMDA3MUM2OTQ2MzgxQ0ZGRjc1QkZGRjg4ODA0QTkwM0YwRjUKKzoxMDY1MTAwMEM5RkYwMUFCNTg4MDAxQTg0MDg4MDAyODBGRDAwMUE4MEUKKzoxMDY1MjAwMDQwODg4MDA4MDMzODgwMDgwMTMwMDQzQjU4NzAwNDk4ODQKKzoxMDY1MzAwMDAxNjhDMDQ2MDI5MTQwNjhDMDQ2MDM5MDA1RTAwMEE4OEIKKzoxMDY1NDAwMDAwNzg0MDIzMTg0MzAwQUIxODcwMDQ5OEMxMUQwMTMxMzYKKzoxMDY1NTAwMDY4NDZGRkY3NzVGRTAxMjAwNUIwODBCQzA4QkMxODQ3RUYKKzoxMDY1NjAwMDkwQjU4NEIwMTQ0RjM5N0IwMDI5MjBEMUY5MURGRjMxM0IKKzoxMDY1NzAwMDNBMzE0OTc4MDAyOTFBRDExMDQ5MDUyMjAwOTIwODIyOUYKKzoxMDY1ODAwMDAwQUI1QTgwOTg4MDA2MjAwMEFCNTg3MDAwMjREQzgwNTUKKzoxMDY1OTAwMDA4NjhDMDQ2MDI5MDQ4NjhDMDQ2MDM5MDAxMjAzODczREUKKzoxMDY1QTAwMDY4NDYwODMxRkZGNzRDRkUwMDI4MDBEMDNDNzMwNEIwNjkKKzoxMDY1QjAwMDkwQkMwOEJDMTg0NzAwMDAyODA1MDA4MEE0MkEwMDgwNzEKKzoxMDY1QzAwMDkwQjU4NEIwMDcxQzY5NDYzODFDRkZGN0Y5RkVCQTY4MUQKKzoxMDY1RDAwMDBENEMwRTQ4MDAyQTA1RDEwRDQ5RkZGN0U0RkMwMDI4QjgKKzoxMDY1RTAwMDBDREEwNUUwQjk4ODBCNEJGRkY3REZGQzAwMjgwNURBNzEKKzoxMDY1RjAwMDAxQUI1QzgwNjg0NjAwMjFGRkY3MjJGRTAwMjAwNEIwNUEKKzoxMDY2MDAwMDkwQkMwOEJDMTg0NzAwMDBGRkZGMDAwMDBENzYyMTQwMzkKKzoxMDY2MTAwMEMxQkQyMTQwNTlCRDIxNDAwMEI1QzA4ODAzRjAyRUZGMDcKKzoxMDY2MjAwMDAwMjAwOEJDMTg0NzAwQjVGRkY3RTJGRTA4QkMxODQ3NzkKKzoxMDY2MzAwMDAwQjVGRkY3RERGRTA4QkMxODQ3MDBCNTAxMUMwMjIwQkQKKzoxMDY2NDAwMDAwRjAwMkY4MDhCQzE4NDdCMEI1QzZCMDA3MUMwODFDMUIKKzoxMDY2NTAwMDY5NDZGRkY3QjVGRTIxNDhGRkY3QTRGQzA0MUMyMDRBNTkKKzoxMDY2NjAwMDAwMjEzODFDRkZGN0EwRkMwMDI4MjdEMDA0QTkxRDRBRjAKKzoxMDY2NzAwMDM4MUNGRkY3OTlGQzA0QTgwMDIzMDEyRjA2RDEwQ0FBQUYKKzoxMDY2ODAwMDAyMzIwMDIxMTM2MDAxMzExMDI5RkJEMzAxNjgwNDI5NzMKKzoxMDY2OTAwMDA0RDk4OTA4MDMzOTg5MDgwMTMxMDBFMDE5MUMwMEFCQ0QKKzoxMDY2QTAwMDU5NzAwNkE5MDk3OEMwNDZEOTgwMDA2OEMwNDYwMjkwOTIKKzoxMDY2QjAwMDA3OThDMDQ2MDM5MDA0MzMwOEFEMDJFMDQ1MjAwMEFCQzQKKzoxMDY2QzAwMDE4NzAwOTQ5MjAxQ0ZGRjc2RUZDNjg0NjI5MUNGRkY3NkIKKzoxMDY2RDAwMEI3RkQwMTIwNDZCMEIwQkMwOEJDMTg0NzI0MDJGRkZGM0MKKzoxMDY2RTAwMDU5QjEyMTQwOURBRjIxNDAzQzAyRkZGRjAwQjUwMTFDODQKKzoxMDY2RjAwMDAyMjAwMEYwMTBGODA4QkMxODQ3MDBCNTAxMUMwMTIwNkEKKzoxMDY3MDAwMEZGRjdBMkZGMDhCQzE4NDcwMEI1MDExQzAxMjAwMEYwRUMKKzoxMDY3MTAwMDAyRjgwOEJDMTg0N0YwQjVDN0IwMDQxQzBGMUMzODFDQTEKKzoxMDY3MjAwMDAxQTlGRkY3NERGRTIxNDhGRkY3M0NGQzAwOTA3ODc4NjcKKzoxMDY3MzAwMDAwMDFCQTY4MDQzMEZDMkEyNUQ4RkYyMzA5MzM5ODQyQTcKKzoxMDY3NDAwMDIxRDgxOTJDMUZEOEZEODhGODY4QzA0NjA1OTBGOTFEN0UKKzoxMDY3NTAwMDA5MzEwNkFCMDAyMDdFNzgwMDJFMERERDQwQzk0MEMzMTQKKzoxMDY3NjAwMDQwQzk0MEMzNDBDOTQwQzM0MEM5NDBDMzAxMzAwMDA0RDAKKzoxMDY3NzAwMDAwMEM3RTc4ODY0MkYxREMyMDFDMDVBOTJCMUNGRkY3NUIKKzoxMDY3ODAwMDIxRkMwMDI4MDVEMDAxQTgwMDc4NDAyMzE4NDMwMUFCNjQKKzoxMDY3OTAwMDE4NzAwNzQ5MDA5OEZGRjcwNkZDMDAyMTAxQThGRkY3RDEKKzoxMDY3QTAwMDRGRkQwMTIwNDdCMEYwQkMwOEJDMTg0NzI0MDJGRkZGOTIKKzoxMDY3QjAwMDNDMDJGRkZGMDBCNUZGRjcxQkZFMDhCQzE4NDdGMEI1MTEKKzoxMDY3QzAwMEM2QjAwNzFDRkM4ODI1NEQ2ODY4MDEzMDY5NDY2ODYwQzIKKzoxMDY3RDAwMDM4MUNGRkY3RjVGRDEwMkMwOEQzMDBBODAwNzg0MDIzRTMKKzoxMDY3RTAwMDE4NDMwMEFCMTg3MDAyMjBEODgwMTdFMDc4Nzg4MjAwMzgKKzoxMDY3RjAwMEZCMUQwOTMzMDAyMEI5NjgwMDJBMTVEOTQwQ0IwRjFDQjYKKzoxMDY4MDAwMDAxMzFCRTQyMEREMDAwQUExMjc4NDAyMzFBNDMwMEFCREEKKzoxMDY4MTAwMDFBNzAwNDIyREE4MDAyOTAwMzkxMDQzMzY4NDYwMDIxNDIKKzoxMDY4MjAwMDE1RTAwMTMwOTA0MkU5RDMwMEFCNUM3MDAyOTQ2OTY4RDYKKzoxMDY4MzAwMEMwNDYwMzkxQTIwMDAwMjAxMDMzMDAyQTA1RDkwRjFDODYKKzoxMDY4NDAwMDgwQzMwMTMwMDEzMTkwNDJGOUQzNjg0NjA0QTlGRkY3QjMKKzoxMDY4NTAwMEY3RkMwMTIwNDZCMEYwQkMwOEJDMTg0NzlDMDMwMDgwNDAKKzoxMDY4NjAwMDkwQjQyMzQ4MDA2ODAxMjE0MjA5MDBEMzAwMjEwMDI3ODkKKzoxMDY4NzAwMDNBMUM0MzBCMDBEMjAyMjIxMTQzMUU0QTIwMjREMzY4NDMKKzoxMDY4ODAwMDAxMkIyRUQxODAwQTAwRDIwMDI0MEM0MzIwMUMxQjIzOTQKKzoxMDY4OTAwMERCMDFEMTE4ODk4QjA5MEIwMEQyMDQyNzM4NDNEMTZGNTMKKzoxMDY4QTAwMDA5NjgwOTBBMDdEMkQxMUQ3OTMxMDk2ODA5NjgwOTBBRkUKKzoxMDY4QjAwMDAxRDMwODIzMTg0M0UzMjMxQjAxRDExODg5NzkwMzI5NDUKKzoxMDY4QzAwMDAyRDFGRjIzMDEzMzE4NDMwQjQ5MDk2QTEwMjI0QjBBRjYKKzoxMDY4RDAwMDAwRDIwMDIyMTA0Mzg5MDc4OTBGODkwMTA4NDM5MEJDMjgKKzoxMDY4RTAwMDcwNDc0MDBDMDBEMjAwMjQwQzQzMjAxQ0VDRTcwMDAwNTEKKzoxMDY4RjAwMDAwMDAxMDQwNjgwRTAwODBDMDAwMTg0MEYwQjUzQTRDMEYKKzoxMDY5MDAwMDIwMUMwNEYwMDdGQTM5NDhFMzIzMUIwMUM3MThCOTc5QTIKKzoxMDY5MTAwMDM3NEVDNTFENzkzNTA2Mjk2MkQyMDJBMzVCNUM1QjAwNDgKKzoxMDY5MjAwMDlGNDQwMDFDMDMwRTFFMzc0RTU1MDEyMEI4NzEwMDIwRjUKKzoxMDY5MzAwMEIwNjBGRkY3OTVGRjA1MjM5ODQzMDBGMDZGRjgwQ0UwNzcKKzoxMDY5NDAwMEZGRjc4RUZGQzAwODA2RDNCMDY4NDExQ0IxNjAwQTI4NkIKKzoxMDY5NTAwMDAzRDkwNDIwMDBFMDAyMjBCODcxNjQyMjIwMUMyQkUwM0YKKzoxMDY5NjAwMDA2MUNDMDZGODAyMzAxNjgxOTQzMDE2MDAzMjBCODcxQzEKKzoxMDY5NzAwMDIwMUMyMDRBMDAyMTA0RjA5OUY5RjA2RjA0MjMwMTY4REIKKzoxMDY5ODAwMDk5NDMwMTYwMjg2ODAxNjgxOTQzMDE2MEYwQkMwOEJDQTQKKzoxMDY5OTAwMDE4NDcwNTIxQjk3MTI5NjgwNDIzMEE2ODlBNDMwQTYwRDcKKzoxMDY5QTAwMEMwNkYwMTY4MTk0MzAxNjBGRkY3NUFGRjA4MjMxODQzQkQKKzoxMDY5QjAwMDAwRjAzNEY4MjAxQzEwNEEwMDIxMDRGMDc3RjlFNUU3RDQKKzoxMDY5QzAwMEZGRjc0RUZGMDQyMzE4NDMwMEYwMjhGOERFRTcwMDIwMEQKKzoxMDY5RDAwMDI5Njg2MDIzMEE2ODlBNDMwQTYwRkZGN0UzRkFENUU3NUIKKzoxMDY5RTAwMDA2MjBCODcxRDJFNzAwMDBBOTc5MjE0MDY4MEUwMDgwMjYKKzoxMDY5RjAwMDlDMDMwMDgwMzA3NTAwMDAxMDI3MDAwMDAwQjUwMDIwQzcKKzoxMDZBMDAwMDA0NDlDMDQ2ODg3MTA0NDgwMTIyMDAyMTA0RjA0RUY5NkYKKzoxMDZBMTAwMDA4QkMxODQ3OTgxQzAwODBBOTc5MjE0MDkwQjUwNzFDMzQKKzoxMDZBMjAwMDMxNDgwMDY4NzkwODAzRDMxMDIzMDExQzk5NDMwMUUwMjEKKzoxMDZBMzAwMDEwMjEwMTQzMkQ0Q0UyNjgwMTJBMDVEMTIyNzkwMDJBNTgKKzoxMDZBNDAwMDAyRDAwMTIzOUIwMjE5NDM4MTQyMDJEMDAxMjAwMDA1OUMKKzoxMDZBNTAwMDAxNjBFMDY4MDEyODIwRDExQjIzREIwMUUwMTg4MDhCNTYKKzoxMDZBNjAwMEY5MDgwNEQzMDEyM0RCMDIwMTFDOTk0MzAxRTAwMTIxNTEKKzoxMDZBNzAwMEM5MDI4MTQyMDJEMDAwMjAwMkYwMUFGQjM4MDkwN0QzNzQKKzoxMDZBODAwMEUwNkY4MDIzMDE2ODk5NDMwMTYwRTAxODAwNjgwMEUwMkUKKzoxMDZBOTAwMEUwNkY4MDIzMDE2ODE5NDMwMTYwMTU0ODAxNkE3ODA5OTUKKzoxMDZBQTAwMDAzRDNGRjIwMDEzMDA4NDMwM0UwRkYyMzA4MUMwMTMzMTgKKzoxMDZBQjAwMDk4NDM4MDA4ODAwMEJBMDk5MjA3OTIwRjEwNDM4ODQyRDkKKzoxMDZBQzAwMDAyRDAwQzQ5QzA0NjA4NjJFMTY4MDEyOTA4RDE3OTBBNjAKKzoxMDZBRDAwMDA2RDNGRjIzMDQzMzE4NDAwMzI4MDFEMUZGRjc4RUZGQUMKKzoxMDZBRTAwMDkwQkMwOEJDMTg0NzAwMDAwMDAwMTA0MDY4MEUwMDgwRjEKKzoxMDZBRjAwMEMwMDAxODQwQzAwMDE4MDA4MEI1RkZGN0IxRkU4MDA5NDMKKzoxMDZCMDAwMDFCRDIwRjQ4RTMyMzFCMDFDMTE4NEE3OTAwMkExNEQxNzQKKzoxMDZCMTAwMDAxMjI0QTcxMDAyNzgwMzAwMDY4NjAyMzAxNjg5OTQzOTAKKzoxMDZCMjAwMDAxNjAwODQ4MDZFMDAyMjAwMkYwOENGQzA3MjAwMkYwMTkKKzoxMDZCMzAwMDVCRkMzODFDRkZGNzM2RkFGNUU3ODBCQzA4QkMxODQ3NDkKKzoxMDZCNDAwMDY4MEUwMDgwRjQwMUZGRkYwMEI1ODRCMDY5NDZGRkY3Q0UKKzoxMDZCNTAwMDM3RkNGRkY3ODVGRTAxQUI1ODgwMDg0ODAwNjhDMDQ2NDcKKzoxMDZCNjAwMDAyOTAwNzQ4MDA2QUMwNDYwMzkwNjg0NjAwMjFGRkY3N0MKKzoxMDZCNzAwMDY3RkIwMTIwMDRCMDA4QkMxODQ3MDAwMDAwMDAxMDQwNkIKKzoxMDZCODAwMEMwMDAxODQwODBCNTg0QjAwNzFDNjk0NjM4MUNGRkY3NjgKKzoxMDZCOTAwMDE3RkNGODg4RkZGNzQyRkZGRkY3NjJGRTAxQUI1ODgwNTEKKzoxMDZCQTAwMDY4NDYwMDIxRkZGNzRDRkIwMTIwMDRCMDgwQkMwOEJDMDQKKzoxMDZCQjAwMDE4NDdCMEI1QzZCMEM3ODg2OTQ2RkZGNzAxRkMwMTI0ODUKKzoxMDZCQzAwMDFBNEI5RjQyMEFEOTAwQTgwMDc4NDAyMzE4NDMwMEFCMTMKKzoxMDZCRDAwMDE4NzAwMjIwRDg4MDY4NDYwMDIxMjBFMDE0NDhGRkY3OTIKKzoxMDZCRTAwMEUxRjkwNTFDMTM0QTM4MUMwNEE5RkZGN0RERjkxMjQ5MjUKKzoxMDZCRjAwMDI4MUNGRkY3RDhGOTAxMkYwNkQxMENBOTAwMjAwMDIyOEMKKzoxMDZDMDAwMDBBNjAwMTMwMTAyOEZCRDMxMDIwMDBBQjU4NzAwNDk4QTQKKzoxMDZDMTAwMEMwNDYwMjkwMDU5OEMwNDYwMzkwNjg0NjA2QTlGRkY3NTMKKzoxMDZDMjAwMDBGRkIyMDFDNDZCMEIwQkMwOEJDMTg0N0ZGMDEwMDAwOTkKKzoxMDZDMzAwMDI0MDJGRkZGOURBRjIxNDAzQzAyRkZGRkYwQjVDNkIwMkMKKzoxMDZDNDAwMDA3MUM2OTQ2MzgxQ0ZGRjdCQkZCRkM4ODc4NzgwMTI1RDgKKzoxMDZDNTAwMDEwMjgwMUQxMTkyQzA5RDkwMEE4MDA3ODQwMjMxODQzMjUKKzoxMDZDNjAwMDAwQUIxODcwMDIyMEQ4ODAwNDMzMjdFMEI4NjhDMDQ2MTMKKzoxMDZDNzAwMDA0OTBGODY4QzA0NjA1OTAwNkFBRkIxRDA5MzMwMDIxNjAKKzoxMDZDODAwMDc4NzgwMDI4MERERDAwMjA0MENCNDBDMjAxMzAwMDA0QTAKKzoxMDZDOTAwMDAwMEMwNDI4RjhEQjQ4MUMwMTA0MDkwQzc4Nzg4ODQyQjEKKzoxMDZDQTAwMEYxREMwQjQ4RkZGNzdFRjkwNzFDMEE0QTIwMUMwNEE5RjcKKzoxMDZDQjAwMEZGRjc3QUY5MDg0OTM4MUNGRkY3NzVGOTY4NDYwMDIxOTMKKzoxMDZDQzAwMEZGRjdCRUZBMjgxQzQ2QjBGMEJDMDhCQzE4NDcwMDAwMEQKKzoxMDZDRDAwMDI0MDJGRkZGQzVBRjIxNDAzQzAyRkZGRkYwQjU4NEIwQTYKKzoxMDZDRTAwMDA0MUMwMDI3RTY4OEEyNjg0NzQ5MDg3OTAwMjgwOEQwRDQKKzoxMDZDRjAwMDAwMkUwMUQwMDEyRTAxRDEwMTI3MDFFMDA0MkUwMEQxODgKKzoxMDZEMDAwMDAzMjYwMTI1NDE0ODA1MkU2NkQyMDJBMzlCNUQ1QjAwNDgKKzoxMDZEMTAwMDlGNDQwMDFDMDMwNjA4MEMxMDAwMDU4MDAwMjMwM0UwQkMKKzoxMDZEMjAwMDA1ODAwNUUwMDAyMzAzODA0MzgwMDZFMDAwMjMwMzgwMDQKKzoxMDZEMzAwMDQ1ODAwMkUwRkYyMzAxMzMwMzgwQ0IxRDc5MzM5RTg5MTgKKzoxMDZENDAwMDAxMjM1QjAyOUU0MjAyREJEMjA3RDIwRjAwRTAwMTIyNDgKKzoxMDZENTAwMDZEMjM1QjAxQzkxODg5ODhGRjIzRTEzMzk5NDMwMTIzMUYKKzoxMDZENjAwMDE5NDMwNjg4RkYzMzlFNDIwREQxRkYyMEUxMzAwODQzQ0UKKzoxMDZENzAwMDAwMkEwNEQxMDEyMzlCMDI5ODQzMDExQzIwRTAwMTIxMzkKKzoxMDZEODAwMDg5MDIwMTQzMUNFMDAxMkUwQUQxNDA4ODAxMjgwNEQxNjgKKzoxMDZEOTAwMDYwMjMxOTQzMDAyQTEzRDAwQ0UwMjAyMzE5NDMwRkUwOEQKKzoxMDZEQTAwMDAwMkUwREQxNDA4ODAxMjgwOEQxRkYyMzgxMzMxOTQzREIKKzoxMDZEQjAwMDAwMkEwNUQwMDEyMzlCMDIxOTQzMDFFMDgwMjMxOTQzRDcKKzoxMDZEQzAwMDA0MjAwMkYwNzVGOTA5MjE0OTAyMDAyMDAyRjA3MEY5NEYKKzoxMDZERDAwMDAwMkYwMkQxMDAyMDEyRTBGRkU3Njk0NjIwMUNGRkY3RDgKKzoxMDZERTAwMEVGRkEwMEE4MDA3ODQwMjMxODQzMDBBQjE4NzAwMjIwODcKKzoxMDZERjAwMEQ4ODA2ODQ2MDAyMTA0MzNGRkY3MjJGQTI4MUMwNEIwMkIKKzoxMDZFMDAwMEYwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MDg4MUMwMDgwOTkKKzoxMDZFMTAwMEMwODg1MTIxODkwMzA4NjIwMDIwNzA0NzgwQjUxNjRGNTEKKzoxMDZFMjAwMEY4NjgwMTI4MDdEMTM3MjM5QjAxRjgxODQwOEE4MDIxOTAKKzoxMDZFMzAwMDAxNDMxQjIwMDdFMDZEMjM1QjAxRjgxODgwOEIwMTIxQzMKKzoxMDZFNDAwMDQ5MDMwMTQzMTAyMDAyRjAzM0Y5MDEyMDcxMjM1QjAxNTMKKzoxMDZFNTAwMEY5MTgwODgwNDg4MDFCMjNEQjAxRjgxODgwOEIwMTIzNzgKKzoxMDZFNjAwMDFCMDM5ODQzNDEyMTA5MDIwMTQzMDAyMDAyRjAyMEY5NEQKKzoxMDZFNzAwMDAwMjA4MEJDMDhCQzE4NDc2ODBFMDA4MDgwQjUxNzRGMDIKKzoxMDZFODAwMEY4NjgwMTI4MDhEMTM3MjM5QjAxRjgxODQwOEE4MDIzMkQKKzoxMDZFOTAwMDk4NDMwMTFDMUIyMDA4RTA2RDIzNUIwMUY4MTg4MDhCRDAKKzoxMDZFQTAwMDAxMjM1QjAzOTg0MzAxMUMxMDIwMDJGMDAxRjlGRjIwMkQKKzoxMDZFQjAwMDcxMjM1QjAxRjkxODAxMzAwODgwMUIyM0RCMDFGODE4RUUKKzoxMDZFQzAwMDgwOEI0MTIzMUIwMjk4NDMwOTIxNDkwMjAxNDMwMDIwODIKKzoxMDZFRDAwMDAyRjBFRUY4MDAyMDgwQkMwOEJDMTg0NzY4MEUwMDgwNjUKKzoxMDZFRTAwMDgwQjU4NEIwMDg0OUNGNkE2OTQ2RkZGNzY5RkFCODA1RUEKKzoxMDZFRjAwMDgwMEQwMUFCNTg4MDY4NDYwMDIxRkZGN0ExRjkwMTIwMDEKKzoxMDZGMDAwMDA0QjA4MEJDMDhCQzE4NDc0MDAwMTQ0MEMwODg5RjIzRDAKKzoxMDZGMTAwMDE4NDAwNTQ5Qzk2QTFCMjM1QjAxMTk0MDA4NDMwMzQ5MEUKKzoxMDZGMjAwMEMwNDZDODYyMDAyMDcwNDc0MDAwMTQ0MDQwMDAxNDAwNzIKKzoxMDZGMzAwMDgwQjU4NEIwMEQ0OTBGNkEwMTJGMDFEMUZGMDMwN0UwMkUKKzoxMDZGNDAwMDAyMkYwMUQxM0YwMzAzRTAwMDJGMDFEMTAxMjdGRjAyRUYKKzoxMDZGNTAwMDY5NDZGRkY3MzVGQTAxQUI1RjgwNjg0NjAwMjFGRkY3MEQKKzoxMDZGNjAwMDZGRjkwMTIwMDRCMDgwQkMwOEJDMTg0NzAwMjAxNDQwMTEKKzoxMDZGNzAwMEMyODhBMTIwNDAwMzAwMjEwMTIzNUIwMzlBNDIwMUQxNzIKKzoxMDZGODAwMDAyMjIwNEUwMDEyM0RCMDM5QTQyMDJEMTAxMjIwMjYyQzEKKzoxMDZGOTAwMDAwRTAwMTYyMDgxQzcwNDc5MEI1ODRCMDA3MUMwMkYwNDUKKzoxMDZGQTAwMDlGRjg2OTQ2MDQxQzM4MUNGRkY3MEFGQTAxQUI1QzgwQTUKKzoxMDZGQjAwMDA5NEZGODZEQzA0NjAyOTA2ODQ2MDAyMUZGRjc0MEY5N0UKKzoxMDZGQzAwMEY4NkRDMDA3QzAwRjA1NDlDMDQ2Qzg2MjAxMjAwNEIwNzMKKzoxMDZGRDAwMDkwQkMwOEJDMTg0NzAwMDBBNDJBMDA4MDY4MUMwMDgwRjAKKzoxMDZGRTAwMEMwODgwMjQ5QzA0NjQ4NjEwMDIwNzA0NzgwMDAxNDAwRjQKKzoxMDZGRjAwMDAwQjU4NEIwNjk0NkZGRjdFM0Y5MDY0OEMwNjgwMUFCMDUKKzoxMDcwMDAwMDU4ODA2ODQ2MDAyMUZGRjcxQkY5MDEyMDA0QjAwOEJDMzYKKzoxMDcwMTAwMDE4NDcwMDAwODAwMDE0NDBDMDg4MDI0OUMwNDZDODYwN0MKKzoxMDcwMjAwMDAwMjA3MDQ3ODAwMDE0MDA4MEI1ODRCMDY5NDY4NzY4RUUKKzoxMDcwMzAwMEZGRjdDNkY5MjAyRjA3RDI3ODAwMEM0OTQwMTgxQjIzMTAKKzoxMDcwNDAwMERCMDFDMDE4ODA4QjA2RTAwMEE4MDA3ODQwMjMxODQzQkQKKzoxMDcwNTAwMDAwQUIxODcwMDIyMDAxQUI1ODgwNjg0NjAwMjFGRkY3OTIKKzoxMDcwNjAwMEVGRjgwMTIwMDRCMDgwQkMwOEJDMTg0NzY4MEUwMDgwMEYKKzoxMDcwNzAwMDAwQjU4NEIwQzE4ODgyNjgyMDJBMDREMjEwMUMwMkYwQjYKKzoxMDcwODAwMDE3RjgwMDIwMTBFMDY5NDZGRkY3OUFGOTAwQTgwMDc4ODkKKzoxMDcwOTAwMDQwMjMxODQzMDBBQjE4NzAwMjIwRDg4MDY4NDYwMDIxQjYKKzoxMDcwQTAwMDA0MzNGRkY3Q0RGODAxMjAwNEIwMDhCQzE4NDc5MEI1QjEKKzoxMDcwQjAwMDg0QjBDNzg4Njk0NkZGRjc4M0Y5MTA0OEZFRjc3MkZGNkUKKzoxMDcwQzAwMDAyMjAzOTFDMDJGMEYyRkYwMDI4MDZEMDAyMjAzOTFDRjEKKzoxMDcwRDAwMDAyRjAzNkZGMDFBQjU4ODAwMkUwNDUyMDAwQUIxODcwOEIKKzoxMDcwRTAwMDA3NDkyMDFDRkVGNzVGRkY2ODQ2MDAyMUZGRjdBOEY4NUMKKzoxMDcwRjAwMDAxMjAwNEIwOTBCQzA4QkMxODQ3MDAwMDI0MDJGRkZGMjgKKzoxMDcxMDAwMDNDMDJGRkZGQjBCNTg0QjBDNzg4Njk0Njg0NjhGRkY3Q0EKKzoxMDcxMTAwMDU3RjkxMDQ4RkVGNzQ2RkYwRjRBMDIyMDM5MUNGRUY3QzgKKzoxMDcxMjAwMDQzRkYwMDI4MDZEMDBENEIwMjIwMzkxQzIyMUNGRUY3MUQKKzoxMDcxMzAwMDNDRkYwMkUwNDUyMDAwQUIxODcwMDk0OTI4MUNGRUY3MEYKKzoxMDcxNDAwMDMyRkY2ODQ2MDAyMUZGRjc3QkY4MDEyMDA0QjBCMEJDOTUKKzoxMDcxNTAwMDA4QkMxODQ3MjQwMkZGRkY1OUIxMjE0MDU5QjAyMTQwMTMKKzoxMDcxNjAwMDNDMDJGRkZGMDBCNUZGRjc0M0Y5MDhCQzE4NDcwMDIwQjkKKzoxMDcxNzAwMDcwNDc4MEI0QzI4ODE5NEJBMTIxNDkwMzAwMkEwM0QxNkEKKzoxMDcxODAwMDE4NkIxMDIzOTg0MzA0RTAwMTJBMDREMTE4NkIxMDIzRDQKKzoxMDcxOTAwMDE4NDM0ODYxMUZFMDAyMkExREQxQzI2ODg3NjgwMDIwOTkKKzoxMDcxQTAwMDNCMUNDMzQwREIwN0RCMEY5QjAyMDM0MzBCNjEwMTMwMzkKKzoxMDcxQjAwMDAwMDQwMDBDMjAyOEYzREIwMDIwMTMxQ0MzNDBEQjA3NzUKKzoxMDcxQzAwMERCMEY5QjAyQzcxRDE5MzczQjQzMEI2MTAxMzAwMDA0RTUKKzoxMDcxRDAwMDAwMEMyMDI4RjFEQjAwMjA4MEJDNzA0NzgwMDAxNDQwQTgKKzoxMDcxRTAwMDgwQjRDMjg4ODE2ODEwMDIxMjBBMTA0MzAyMDQxMjBDOTMKKzoxMDcxRjAwMDBDNDhDMDQ2MDI2MDBDNEJDMDQ2MUE4MDBBMEMxNzAyQUQKKzoxMDcyMDAwMDEyMTIzQTQzMTIwNDEyMEM0MjYwNUE4MDA5MDQwOTBDMEIKKzoxMDcyMTAwMDBBMDIwOTBBMTE0MzA5MDQwOTBDODE2MDk5ODAwMDIwQkYKKzoxMDcyMjAwMDgwQkM3MDQ3NDAwMDE0MDAyODFCMDA4MEIwQjU4NEIwQkIKKzoxMDcyMzAwMDEzNDkwQTY4MTIwNDEyMEMxMzAyMTIxMjEzNDM0QTY4MEIKKzoxMDcyNDAwMDEyMDQxMjBDMUYxQzEzMDIxMjEyMTM0Mzg5NjgwOTA0NDIKKzoxMDcyNTAwMDA5MEMwQTAyMDkxMjExNDMwQzA0MjQwQzY5NDYxRDFDNzYKKzoxMDcyNjAwMEZGRjdBRUY4MDFBQjVGODAyODA0MjA0MzAyOTA2ODQ2MjgKKzoxMDcyNzAwMDAwMjFGRUY3RTVGRjAxMjAwNEIwQjBCQzA4QkMxODQ3QjAKKzoxMDcyODAwMDQwMDAxNDQwQzE4ODgyNjgwODAyMDkwQTA4NDMwMDA0Q0IKKzoxMDcyOTAwMDAwMEMwQTQ5QzA0NkM4NjAxMDBDMDMwMjAwMTIxODQzRDMKKzoxMDcyQTAwMDAwMDQwMDBDMDg2MTEwMDQwMDBDMDIwMjAwMEExMDQzRTQKKzoxMDcyQjAwMDAwMDQwMDBDNDg2MTAwMjA3MDQ3MDAwMDQwMDAxNDAwRUEKKzoxMDcyQzAwMDkwQjU4NEIwMTY0QkQ5NjgwOTA0MDkwQzBBMDIwOTEyNUEKKzoxMDcyRDAwMDExNDMxQTY5MTIwNDEyMEMxNzAyMTIxMjNBNDM1QjY5MjUKKzoxMDcyRTAwMDFCMDQxQjBDMUYwMjFCMTIzQjQzMUYwNDNGMEMwNTIzRjYKKzoxMDcyRjAwMDAwOTM4NDg4MDFBQjFDODAwMDI0MDQzQjVDNzA0MDg4QjAKKzoxMDczMDAwMDAwQUI1ODgwRDk4MDEwMDQzODQzMDI5MDAzOTQ2ODQ2M0IKKzoxMDczMTAwMDAwMjFGRUY3OTVGRjAxMjAwNEIwOTBCQzA4QkMxODQ3N0YKKzoxMDczMjAwMDQwMDAxNDQwMDBCNTg0QjAwQjQ5OEE2QTA1MjEwMDkxRTEKKzoxMDczMzAwMDgxODgwMUFCMTk4MDAwMjEwNDNCNTk3MDQwODgwMEFCNjMKKzoxMDczNDAwMDU4ODBEQTgwMDI5MTAzOTE2ODQ2RkVGNzc5RkYwMTIwQTgKKzoxMDczNTAwMDA0QjAwOEJDMTg0NzAwMDBDMDAwMTQ0MEMwODgwMjQ5QUYKKzoxMDczNjAwMEMwNDY4ODYyMDAyMDcwNDdDMDAwMTQwMDAwQjU4NEIwOTkKKzoxMDczNzAwMDBCNDkwQTZBMDUyMTAwOTE4MTg4MDFBQjE5ODAwMDIxMUYKKzoxMDczODAwMDA0M0I1OTcwNDA4ODAwQUI1ODgwREE4MDAyOTEwMzkxMjkKKzoxMDczOTAwMDY4NDZGRUY3NTVGRjAxMjAwNEIwMDhCQzE4NDcwMDAwRkUKKzoxMDczQTAwMEMwMDAxNDQwQzA4ODAyNDlDMDQ2MDg2MjAwMjA3MDQ3RUYKKzoxMDczQjAwMEMwMDAxNDAwMDBCNUMwODgwMjQ5RkVGN0Y0RkQwMDIwQUIKKzoxMDczQzAwMDA4QkMxODQ3NzUwMkZGRkYwMEI1ODRCMDY5NDZGRUY3OTgKKzoxMDczRDAwMEY3RkYwNjQ4MDA2QjAxQUI1ODgwNjg0NjAwMjFGRUY3QjYKKzoxMDczRTAwMDJGRkYwMTIwMDRCMDA4QkMxODQ3MDAwMDY4MEUwMDgwODEKKzoxMDczRjAwMDAwQjVGRUY3RkRGRjA4QkMxODQ3MDBCNUZFRjdGOEZGMjMKKzoxMDc0MDAwMDA4QkMxODQ3MDBCNUZFRjdGM0ZGMDhCQzE4NDc4MEI1NjUKKzoxMDc0MTAwMDA3MUMxMDQ4RkVGN0M2RkQwMTIwNDAwMkExMjE0OTAzQzgKKzoxMDc0MjAwMDg4NjAwMDIxMEM0OEMwNDYwMTcxMEM0ODAyNjg1MjBDNkIKKzoxMDc0MzAwMDA1RDIwMjY4MTIwQzA2RDEwMDY4ODAwQTAzRDMwODQ4RkUKKzoxMDc0NDAwMEMwNDZDNzYwMDJFMDA3NDhDMDQ2MDc2NDA4MUM4MEJDMEQKKzoxMDc0NTAwMDA4QkMxODQ3RDU5NDIxNDAyODBGMDA4MDAwMDAxMDQwMzgKKzoxMDc0NjAwMDQwMDExODAwMDAwMDAwODAwMEI1MDEyMDAzNDlDMDQ2MUIKKzoxMDc0NzAwMDA4NzIxMjIwRkZGN0NCRkYwOEJDMTg0Nzg4MUMwMDgwNTkKKzoxMDc0ODAwMDAwQjUwMTIwMDM0OUMwNDY0ODcyMTUyMEZGRjdCRkZGMzEKKzoxMDc0OTAwMDA4QkMxODQ3ODgxQzAwODAwMEI1MDFGMEY5RkYwMTIwRTYKKzoxMDc0QTAwMDA4QkMxODQ3ODBCNTg0QjAwNzFDRjg4ODAyRjBGRUY4QzUKKzoxMDc0QjAwMDAwMjgwQ0QxNjk0NjM4MUNGRUY3ODJGRjA2NDgwMUFCNTQKKzoxMDc0QzAwMDU4ODA2ODQ2MDAyMUZFRjdCQkZFMDEyMDAwRTAwMDIwNDYKKzoxMDc0RDAwMDA0QjA4MEJDMDhCQzE4NDdGRkZGMDAwMDgwQjU4NEIwMzIKKzoxMDc0RTAwMDY5NDZGRUY3NkRGRjAxMjcwMUFCNUY4MDA5NDg4MTg5N0UKKzoxMDc0RjAwMDA5MDRDMjg5MTE0MzAyOTE4MTg4MDkwNEMwODgwODQzQTQKKzoxMDc1MDAwMDAzOTA2ODQ2MDAyMUZFRjc5QkZFMzgxQzA0QjA4MEJDNDcKKzoxMDc1MTAwMDA4QkMxODQ3NEMyQTAwODAwMEI1RkVGNzY5RkYwOEJDN0MKKzoxMDc1MjAwMDE4NDcwMEI1RkVGNzY0RkYwOEJDMTg0NzAwQjVGRUY3MjIKKzoxMDc1MzAwMDVGRkYwOEJDMTg0NzAwQjVGRUY3NUFGRjA4QkMxODQ3QTQKKzoxMDc1NDAwMDAwQjVGRUY3NTVGRjA4QkMxODQ3MDBCNUZFRjc1MEZGMjEKKzoxMDc1NTAwMDA4QkMxODQ3MDBCNUZFRjc0QkZGMDhCQzE4NDcwMEI1M0MKKzoxMDc1NjAwMEZFRjc0NkZGMDhCQzE4NDcwMEI1RkVGNzQxRkYwOEJDMTAKKzoxMDc1NzAwMDE4NDcwMEI1RkVGNzNDRkYwOEJDMTg0NzAwQjVGRUY3RkEKKzoxMDc1ODAwMDM3RkYwOEJDMTg0NzAwQjVGRUY3MzJGRjA4QkMxODQ3QTQKKzoxMDc1OTAwMDAwQjU4Q0IwMDhBOUZFRjcxM0ZGNjk0NjA4QTgwMkYwRjEKKzoxMDc1QTAwMEE5RkYwMjIwMDhBQjU4NzA2OTQ2MDhBOEZFRjc0OEZFRkMKKzoxMDc1QjAwMDAxMjAwQ0IwMDhCQzE4NDcwMEI1RkVGNzE5RkYwOEJDNDUKKzoxMDc1QzAwMDE4NDc5MEI1ODRCMDA3MUM2OTQ2MzgxQ0ZFRjdGOEZFRDIKKzoxMDc1RDAwMEZBODgxMjQ5MDEyNEM4MUQ4OTMwMDAyQTBGRDAwNDcwOEUKKzoxMDc1RTAwMDQ0NzBCODY4MDAwQzgwMzFDODgyQjg2OEMwNDYwODgzMEYKKzoxMDc1RjAwMEY4NjgwMDBDNDg4M0Y4NjhDMDQ2ODg4MzAyRTAwMDIxRTAKKzoxMDc2MDAwMDAxNzA0MTcwMDY0ODAxQUI1ODgwNjg0NjAwMjFGRUY3QzIKKzoxMDc2MTAwMDE3RkUyMDFDMDRCMDkwQkMwOEJDMTg0NzY4MEUwMDgwMDAKKzoxMDc2MjAwMEZGRkYwMDAwMDBCNUZFRjdFM0ZFMDhCQzE4NDcwMEI1RjkKKzoxMDc2MzAwMEZFRjdERUZFMDhCQzE4NDcwMEI1RkVGN0Q5RkUwOEJDMTEKKzoxMDc2NDAwMDE4NDcwMEI1RkVGN0Q0RkUwOEJDMTg0NzAwQjVGRUY3OTIKKzoxMDc2NTAwMENGRkUwOEJDMTg0NzkwQjU4NEIwMDcxQzY5NDYzODFDOUIKKzoxMDc2NjAwMEZFRjdBRUZFRjg4ODAzMjRFNDA0MDQ0MzAzMjNEQjA0OUUKKzoxMDc2NzAwMDlDNDIwMkQzMEY0QjlDNDIwNkQ5MEY0ODAxQUI1ODgwNjUKKzoxMDc2ODAwMDY4NDYwMDIxRkVGN0RDRkQwMTIwODAwNzIwNDMwMDY4RUEKKzoxMDc2OTAwMDAwMjEwMEFCNTk3MEZBODhDMDQ2REE4MDAyOTAwMzkxNEQKKzoxMDc2QTAwMDY4NDYwNDMzRkVGN0NDRkQwMTIwMDRCMDkwQkMwOEJDNTIKKzoxMDc2QjAwMDE4NDcwMDAwRTAwMDE4MDBGRkZGMDAwMDgwQjU4NEIwMEMKKzoxMDc2QzAwMDA3MUM2OTQ2MzgxQ0ZFRjc3QkZFRjg4ODAzMjNEQjA0QTEKKzoxMDc2RDAwMDE4NDM5ODQyMDJEMzBBNEI5ODQyMDhEOTA5NDgwMUFCOTMKKzoxMDc2RTAwMDU4ODA2ODQ2MDAyMUZFRjdBQkZEMDEyMDAzRTBCOTY4MzEKKzoxMDc2RjAwMEMwNDYwMTYwMDAyMDA0QjA4MEJDMDhCQzE4NDcwMDAwRjAKKzoxMDc3MDAwMEUwMDAxODAwRkZGRjAwMDA4MEI1ODZCMDAyQTlGRUY3NzgKKzoxMDc3MTAwMDU3RkUwMTI3MDJBQjVGNzAwMDIwRDg4MDBBNDg0MTY4RkQKKzoxMDc3MjAwMEMwNDYwNDkxODE2OEMwNDYwNTkxQzE2OEMwNDYwMDkxNzkKKzoxMDc3MzAwMDQwNjlDMDQ2MDE5MDY5NDYwMkE4RkVGNzgxRkQzODFDRTkKKzoxMDc3NDAwMDA2QjA4MEJDMDhCQzE4NDc2ODE5MDA4MDAwQjVDMTY4NDUKKzoxMDc3NTAwMDgwNjhGRUY3NDdGQjAwMjAwOEJDMTg0NzAwMjA3MDQ3RjAKKzoxMDc3NjAwMDkwQjU4NEIwMDQxQzBGMUM2ODQ2NTAyMUZFRjczNkZFMEQKKzoxMDc3NzAwMDAxQUI1QzgwMDI5NzY4NDYwMDIxRkVGNzYxRkQwNEIwMTIKKzoxMDc3ODAwMDkwQkMwOEJDMTg0NzgwQjU4NEIwMDcxQzY4NDY1MTIxREUKKzoxMDc3OTAwMEZFRjcyNEZFMDFBQjVGODA2ODQ2MDAyMUZFRjc1MEZEMzYKKzoxMDc3QTAwMDA0QjA4MEJDMDhCQzE4NDcwMDIwNzA0NzAwMjA3MDQ3MTgKKzoxMDc3QjAwMDkwQjU4NEIwMDAyNzEyNDkwOTY4MTI0QTEyNkIxMDIzNTEKKzoxMDc3QzAwMDFBNDAwMTI0MDAyQTAwRDAwMTI3OEEwQzAzRDMzQTA0NkUKKzoxMDc3RDAwMDEyMEMwMjI3MTc0M0M5MEMwM0QzMzkwNDA5MEMwNDI3RTAKKzoxMDc3RTAwMDBGNDM2OTQ2RkVGN0VDRkQwMUFCNUY4MDY4NDYwMDIxNjAKKzoxMDc3RjAwMEZFRjcyNkZEMjAxQzA0QjA5MEJDMDhCQzE4NDcwMDAwMTIKKzoxMDc4MDAwMDAwMDAxMDQwQzAwMDE4NDAwMEI1ODRCMDY5NDZGRUY3ODMKKzoxMDc4MTAwMEQ3RkQwNjQ4QzA2RDAxQUI1ODgwNjg0NjAwMjFGRUY3RDEKKzoxMDc4MjAwMDBGRkQwMTIwMDRCMDA4QkMxODQ3MDAwMEE0MkEwMDgwMDYKKzoxMDc4MzAwMDAwQjVGRUY3RERGRDA4QkMxODQ3NzA0NzAwMjA3MDQ3MTMKKzoxMDc4NDAwMDAwMjA3MDQ3MDAyMDcwNDcwMDIwNzA0NzAwMjA3MDQ3REMKKzoxMDc4NTAwMDAwMjA3MDQ3MDBCNUZFRjdDQkZEMDhCQzE4NDcwMDAwQkMKKzoxMDc4NjAwMDgwQjU4NUIwMDFBOUZFRjdBQkZEMDAyMDAxQUI1ODcwRDMKKzoxMDc4NzAwMDBDNDlDOTY4MDEyNzAxMjkwMkQxMDM5NzA0OTcwMUUwNDcKKzoxMDc4ODAwMDAzOTcwNDkwNjg0NjAxRjAzM0ZEMDJBQjAwOThDMDQ2QjAKKzoxMDc4OTAwMDU4ODAwMDIxMDFBOEZFRjdEM0ZDMzgxQzA1QjA4MEJDM0QKKzoxMDc4QTAwMDA4QkMxODQ3NjgwRTAwODA3MDQ3MDQ0OTAwMjAwMDIyNzkKKzoxMDc4QjAwMDBBNzAwMTMwMDEzMTY4MjhGQUQzNzA0N0EwODIyMDQwNTUKKzoxMDc4QzAwMDAwMjI4ODQyMDNEMzQwMUEwMTMyODg0MkZCRDIxMDFDQTYKKzoxMDc4RDAwMDcwNDc4ODQyMDJEMzQwMUE4ODQyRkNEMjcwNDc5MEI0NjUKKzoxMDc4RTAwMDAxMUNGRjI3MDQyOTI3REEwMDIwMTQ0QTQzMDAxQjE4MzMKKzoxMDc4RjAwMERCMDBENDU4NjMwQzFBRDI0QjAwNTkxOEM5MDA1NzU4RjIKKzoxMDc5MDAwMDQzMDAxQjE4REIwMEQ3NTA4OTE4OUExODRGNjhDMDQ2RUYKKzoxMDc5MTAwMDU3NjA4QjY4QzA0NjkzNjAwQjY5QzA0NjEzNjE0QjY5MjIKKzoxMDc5MjAwMEMwNDY1MzYxQzk2OEMwNDZEMTYwOTBCQzcwNDcwMTMwMDEKKzoxMDc5MzAwMDAwMDYwMDBFMDQyOEQ5REIzODFDRjZFNzQwQUIyMDQwRDcKKzoxMDc5NDAwMEY3QjVDNEIwMDQxQzAwMjA0NjlBMTEyMTExNDA2RUQwMzYKKzoxMDc5NTAwMDAwMjc3OTAwQzkxOUM5MDA1NzRBNTE1ODQ5MEMwM0QyNjgKKzoxMDc5NjAwMDAxMzAwMDA2MDAwRTA0RTA3OTFDMEYwNjNGMEUwNDJGQzQKKzoxMDc5NzAwMEVGREIwMDI4NUJEMDAwMjYwMDIyMDA5MjQwMjMwMDIxOEMKKzoxMDc5ODAwMDAwMjAwMkFBMDBGMDg4RkEwNEE5MDAyMDgyMDA4QTU4ODgKKzoxMDc5OTAwMDEyMDYxMjBFQTI0MjAzRDE3MjFDMTYwNjM2MEUwNEUwMjUKKzoxMDc5QTAwMDAxMzAwMDA2MDAwRTEwMjhGMERCMDAyRTNERDAwNDJDMjQKKzoxMDc5QjAwMDNFRDE4MDAwMDg1ODQwMDE4MDBEMDAyMjAwOTIxMDIzMjMKKzoxMDc5QzAwMDAwMjEwMkFBMDBGMDY4RkEwMDIxMDE5MTAyQTgwNTk5OUQKKzoxMDc5RDAwMDQ5MEM4OTA1MjlEMEMxNjgwQTA2MTIwRTQ1OUI5QTQyQjYKKzoxMDc5RTAwMDExRDFDMDY4NDAwMTg2MEQwMDIyMDA5MjBDMjMwMDIxQjUKKzoxMDc5RjAwMDMwMUMwMkFBMDBGMDUwRkEwMTk5MDI5RDQ4MUMwMTA2QjEKKzoxMDdBMDAwMDA5MEUwMTkxMEVFMDQ4MDE4NjBEMDAyMjAwOTIxMDIzMUMKKzoxMDdBMTAwMDAwMjEzMDFDMDJBQTAwRjAzRkZBMDJBODA1OTk0OTBDODcKKzoxMDdBMjAwMDg5MDVEOEQxMDE5OTAwMjkwRkQxRkYyMDNERTA0MEUwMjAKKzoxMDdBMzAwMDgwMDAwODU4NDAwMTg2MEQwMDIyMDA5MjBDMjMwMDIxOEUKKzoxMDdBNDAwMDMwMUMwMkFBMDBGMDI4RkEwMjlEMDEyMDAwMDQ0NjlBODgKKzoxMDdBNTAwMDEwNDM3OTAwQzkxOUM5MDAxNzRBQzA0NjUwNTAzMDFDNUMKKzoxMDdBNjAwMDhFMTg3MDYwMTAyMDA0MkMwMEQwMEMyMDA0MUNCMDYwMTQKKzoxMDdBNzAwMDAwMjAyMDIxNDY5QTExNDAyMDI5MDBEMDI4MUMzMDYxODYKKzoxMDdBODAwMDI4MTlGRjIxRkYzMDA4MzAwOTMxRkZGNzE5RkY0MzAxQTIKKzoxMDdBOTAwMDE4MThDMDAwMDAxQjcwNjEwMDIwNTAyMTQ2OUExMTQwNDgKKzoxMDdBQTAwMDUwMjkwMEQxMjgxQ0YwNjAzODFDNDdCMEYwQkMwOEJDM0QKKzoxMDdBQjAwMDE4NDdGRjIwRjlFNzAwMDA0MEFCMjA0MDgwQjQwMDIzQzYKKzoxMDdBQzAwMDAwMjIwMDI5MDZEOTg3NUM3QjQwMUIwNjFCMEUwMTMyNzEKKzoxMDdBRDAwMDhBNDJGOEQzRDg0MzAwMDYwMDBFODBCQzcwNDdGMEI1NDgKKzoxMDdBRTAwMEM2QjAwNDI4MDdEQTQxMDAwOTE4QzkwMDQ1OTE0MTRBODcKKzoxMDdBRjAwMDUxNTg0QjBDMDJEMjAwMjBDMDQzNzZFMDAxMjM1QjA0QjYKKzoxMDdCMDAwMDE5NDA0MzAwMTgxOEMwMDAzQTRBMTQxODAwMjk2MUQwREYKKzoxMDdCMTAwMDAwMjEwMjkxMjA2OUExNjg0NTE4MzBEMEZGMjE2ODFFMUMKKzoxMDdCMjAwMDA5MzFGRkY3Q0RGRTYxNjg0MDE4MDE5MDAxOTg4MTQyNEMKKzoxMDdCMzAwMDAyRDFBNjY4QUYxQjA5RTAwMDI2RkYyMTI4MUMwOTMxRUQKKzoxMDdCNDAwMEZGRjdDN0ZFMDcxQzAxRDFGRjI3MDkzNzAwMjIwMDkyNkIKKzoxMDdCNTAwMDAxOTgzMTFDMDNBQTNCMUMwMEYwOUVGOTAzQTgzOTFDQjQKKzoxMDdCNjAwMEZGRjdBQ0ZGQzA0MzAyOTk0ODQwMDEwNjA5MEUwMjkxOUQKKzoxMDdCNzAwMEVEMUJBMDY4QTg0MjAwRDEwMDI1MDAyRENFRDgwMjk5QTcKKzoxMDdCODAwMENGNDMwMDIyMDA5MjBDMjMwMDIxNjA2ODAzQUEwMEYwN0EKKzoxMDdCOTAwMDgzRjkyMDY5QzA0NjAzOTAwNTk4MDAwQTAwMDIzOTA2NUYKKzoxMDdCQTAwMDA5MEUwODQzMDU5MEZGMjMxQjAyOTg0MzA1OTAwQzIxMDIKKzoxMDdCQjAwMDAzQThGRkY3ODNGRkZGMjMxQjAyMDU5OTk5NDMwMDA2RTMKKzoxMDdCQzAwMDAwMEUwMDAyMDg0MzA1OTAwQzIzMDAyMTYwNjgwM0FBMDAKKzoxMDdCRDAwMDAwRjBDQUY5MDAyMDQ1OTkwNjRBQzA0NjUwNTBDMTQzRkEKKzoxMDdCRTAwMDYxNjBBMTYwRTE2MDIxNjE2MTYxNDZCMEYwQkMwOEJDRTgKKzoxMDdCRjAwMDE4NDcwMDAwNDBBQjIwNDBCMEI0NEM0MjAwMjkwMERCRTUKKzoxMDdDMDAwMDBDMUMwMDI3RkY0MzA0MjgyMURBMTI0RDQzMDAxODE4RUEKKzoxMDdDMTAwMEMwMDA0MDE5MDEyQTA1RDAwMjJBMDlEMDAzMkExNkQxMzIKKzoxMDdDMjAwMDAxNjkwQkUwMDAyOTEyREIwMjY5OEE0MjBGRDMwNUUwRUIKKzoxMDdDMzAwMDAwMjkwN0RBQzE2OEExNDIwOUQzMDkxQkMxNjBDMDY4RTUKKzoxMDdDNDAwMEIwQkM3MDQ3QzE2ODA5MTkwMjY5OTE0MkY2RDkzODFDNjUKKzoxMDdDNTAwMEY2RTcwMDAwNDBBQjIwNDBGMEI1ODRCMDE3MUMwRDFDQzcKKzoxMDdDNjAwMDAwMjEwMjkxNDIwMDEyMThEMjAwMkM0OThCNTgxQjA2QTkKKzoxMDdDNzAwMDFCMEUwMTkzMDAyM0RCNDMwNDI4MDJEQTAxOTg0MDA4MUQKKzoxMDdDODAwMDAxRDIxODFDNDZFMDU0MThFMDY4QzIxOTIxNjk4QTQyRTIKKzoxMDdDOTAwMDAwRDkwRjFBMDAyRjNDRDlBMDY4RTE2ODQwMThGRjIxRDUKKzoxMDdDQTAwMDA5MzFGRkY3MERGRTYxNjg0NjE4QTA2OEUxNjg0MDE4QzkKKzoxMDdDQjAwMEZGMjEwOTMxRkZGNzBERkVDMjE5RkYyMTA5MzE4QTQyNjgKKzoxMDdDQzAwMDE0RDkwMTlBQzA0NjAwOTIwQjFBMDM5MzAxMUMzMDFDNzAKKzoxMDdDRDAwMDJBMUMwMEYwRTFGOEUwNjgwMzlCQzAxOEUwNjAwMzlCRjkKKzoxMDdDRTAwMDVEMTlGRjFBMDI5ODE4MTgwMjkwMTBFMDAxOUFDMDQ2MTgKKzoxMDdDRjAwMDAwOTIwMTFDMzAxQzJBMUMzQjFDMDBGMENERjhFMDY4RUYKKzoxMDdEMDAwMEMwMTlFRDE5RTA2MDAyOThDMDE5MDI5MDAwMjcwMDJGRjkKKzoxMDdEMTAwMEMyRDgwMjk4MDRCMEYwQkMwOEJDMTg0NzQwQUIyMDQwNjEKKzoxMDdEMjAwMEYwQjU4M0IwMTcxQzBEMUMwMDIxMDE5MTQyMDAxMjE4MDAKKzoxMDdEMzAwMEQyMDAwMjkyMzA0OThBNTgxMjA2MTIwRTAwMjRFNDQzRkYKKzoxMDdENDAwMDA0MjgwMURBNTAwOTAxRDIyMDFDNTFFMDAyOUE1NDE4OEIKKzoxMDdENTAwMEUwNjhDMjE5NjA2OTgyNDIwMUQ5MjI2OTg3MUEwMDJGM0UKKzoxMDdENjAwMDQ1RDkyNTRFQTA2OEUxNjg0MDE4RkYyMTA5MzFGRkY3ODkKKzoxMDdENzAwMEE3RkQ2MTY4NDAxODAwOTBBMDY4RTE2ODQwMThGRjIxRTUKKzoxMDdEODAwMDA5MzFGRkY3QTZGRDAyOUFCMTU4MDEyMzVCMDQxOTQzOUMKKzoxMDdEOTAwMEIxNTBDMTE5RkYyMjA5MzI5MTQyMTNEOTEzMUEwMTFDQTMKKzoxMDdEQTAwMDAwOTgyQTFDMUUxQzAwRjBERkY4RTA2ODgwMTk3NTE5ODUKKzoxMDdEQjAwMEUwNjAyMTY5ODg0MjAwRDkyMDYxQkYxQjAxOTgzMDE4MUEKKzoxMDdEQzAwMDAxOTAxMkUwMDExQzAwOUUzMDFDMkExQzNCMUMwMEYwOUMKKzoxMDdERDAwMENCRjhFMDY4QzAxOUVEMTlFMDYwMjE2OTg4NDIwMEQ5NEMKKzoxMDdERTAwMDIwNjEwMTk4QzAxOTAxOTAwMDI3MDAyRkI5RDgwMTk4OEYKKzoxMDdERjAwMDAzQjBGMEJDMDhCQzE4NDc0MEFCMjA0MEIwQjVDM0IwREUKKzoxMDdFMDAwMDBDMUMwMDI3RkE0MzA0MjgwNkRBNDEwMDA5MThDOTAwQUYKKzoxMDdFMTAwMDE0NDg0NTU4NkIwQzA0RDIxMDFDNDNCMEIwQkMwOEJDQ0QKKzoxMDdFMjAwMDE4NDc2MjA5MUJEMzAwMjIwMDkyMDgxODQwNjgwQzIzRUYKKzoxMDdFMzAwMDAwMjEwMUFBMDBGMDMwRjgxMTJDMEREMDEyMkMwREQwMjkKKzoxMDdFNDAwMDEzMkMwNUQwMTQyQzBBRDEwMzk4MDAwNDA3MEUwNkUwNjkKKzoxMDdFNTAwMDAzOTgwNzA2M0YwRTAyRTAwMTlGMDBFMDAyOUYzODFDRDYKKzoxMDdFNjAwMERCRTcwMDAwNDBBQjIwNDAwMzQ5MDAyMDAwMjIwQTU0MTkKKzoxMDdFNzAwMDAxMzA2MDI4RkJEMzcwNDc0MEFCMjA0MDAwQjUwMkYwRDIKKzoxMDdFODAwMDZGRkE1NzIwMDJGMENDRjkwMkYwNDBGOTAwMEFGQkQzNTgKKzoxMDdFOTAwMDAyRjA0RUZBMDhCQzE4NDdGMEI1ODJCMDA3OUQxNDFDREEKKzoxMDdFQTAwMDFGMUMzMDRBRDI2RjIwMjMxNjY4OUU0MzE2NjAzMzFDNzUKKzoxMDdFQjAwMEZGMjIwMTMyMkE0MDQwMDIwODQzMDUwQTA2MUMwMDBDM0EKKzoxMDdFQzAwMDAxOTAwMDJBMjBEMDAyRjA0QkZBNTMyMDAyRjBBOEY5Q0EKKzoxMDdFRDAwMDAxOThDMDQ2MDA5MDAyRjBBM0Y5MjgxQzAyRjBBMEY5MTYKKzoxMDdFRTAwMDMwMUMwMkYwOURGOTAyRjAyM0ZBRkZGN0M3RkYwMkYwMDEKKzoxMDdFRjAwMDM3RkE1NDIwMDJGMDk0RjkwMDk4MDJGMDkxRjkyODFDMDYKKzoxMDdGMDAwMDAyRjA4RUY5MzAxQzE0RTAwMkYwMkFGQTUyMjAwMkYwM0UKKzoxMDdGMTAwMDg3RjkwMTk4MDJGMDg0RjkyODFDMDJGMDgxRjkzMDFDREQKKzoxMDdGMjAwMDAyRjA3RUY5MDAyMDAyRjA3QkY5MDAyMDAyRjA3OEY5REYKKzoxMDdGMzAwMDAwMjAwMkYwNzVGOTAwMjAwMkYwNzJGOTAwMkYwNUQ5MzcKKzoxMDdGNDAwMDAyRjBFNEY4MjA3MDAxMzQwMTNGRjlEMTAyRjBGMEY5QjkKKzoxMDdGNTAwMDA0NEFEMDZGMjAyMzAxNjgxOTQzMDE2MDAyQjBGMEJDQ0QKKzoxMDdGNjAwMDA4QkMxODQ3NjgwRTAwODBGMEI1ODJCMDE0MUMxRjFDQjYKKzoxMDdGNzAwMDQyMDIwQTQzMTUxQzAxMjg1NEQwMkM0OUM4NkYyMDIzMDMKKzoxMDdGODAwMDAyNjg5QTQzMDI2MEM4NkY0MDIzMDE2ODE5NDMwMTYwODgKKzoxMDdGOTAwMDAyRjBFNkY5NTMyMDAyRjA0M0Y5MjgwQzA2MUMwMkYwMjcKKzoxMDdGQTAwMDNGRjkyODBBMDE5MDAwOTAwMkYwM0FGOTI4MUMwMkYwRUIKKzoxMDdGQjAwMDM3RjkwMkYwQkRGOUZGRjc2MUZGMDJGMEQxRjk4NDIwMzMKKzoxMDdGQzAwMDAyRjAyRUY5MzAxQzAyRjAyQkY5MDA5ODAyRjAyOEY5OEIKKzoxMDdGRDAwMDI4MUMwMkYwMjVGOTAwMkYwNUQ5MjA3ODAxMzQwMkYwODEKKzoxMDdGRTAwMDFGRjkwMTNGRjlEMTAyRjBBM0Y5MDJGMEI5Rjk4MzIwOUEKKzoxMDdGRjAwMDAyRjAxNkY5MzAxQzAyRjAxM0Y5MDE5ODAyRjAxMEY5QTIKKzoxMDgwMDAwMDI4MUMwMkYwMERGOTAyRjA5M0Y5RkZGNzM3RkYwNzQ5M0EKKzoxMDgwMTAwMEM4NkY0MDIzMDI2ODlBNDMwMjYwQzg2RjIwMjMwMTY4M0EKKzoxMDgwMjAwMDE5NDMwMTYwMDJCMEYwQkMwOEJDMTg0NzY4MEUwMDgwMUMKKzoxMDgwMzAwMDcwNDcwMDAwODBCNTAxRjA4RkY4MDY0RkMwNDZGODYwMjkKKzoxMDgwNDAwMDAxRjBGMkY4Nzg4MDAxRjBCMUY4Mzg3MTgwQkMwOEJDMUEKKzoxMDgwNTAwMDE4NDcwMDAwNjgwRTAwODAwMEI1MDFGMDA1RjkwMjQ5REMKKzoxMDgwNjAwMEMwNDYwODgwMDhCQzE4NDc2ODBFMDA4MDBCNDhDMTY4RUQKKzoxMDgwNzAwMDAxMjkxMUQxQzE2RjAyMjMwQTY4MUE0MzBBNjBDMTZGMzYKKzoxMDgwODAwMDgwMjMwQTY4MUE0MzBBNjBDMTE4MDg2ODgyMjMwMjY4QkMKKzoxMDgwOTAwMDFBNDMwMjYwMDAyMDA4ODE3MDQ3MDAwMDY4MEUwMDgwQ0IKKzoxMDgwQTAwMEYwQjQ0QTQ5Q0ExRDlEMzIwMDIwMDAyNzgzMDBENzUwRjIKKzoxMDgwQjAwMDAxMzAxNzI4RkFEMzQ2NEMwMDIwODIwMEE3NTAwMTMwMjcKKzoxMDgwQzAwMDIwMjhGQUQzNDM0QTAwMjA4MzAwRDc1MDAxMzAyMDI4Q0IKKzoxMDgwRDAwMEZBRDNBNzYxOTc2MTRGNjU4RjY1M0Y0REMwNDYyRjYwMEEKKzoxMDgwRTAwMDZGNjBBRjYwQUY2MUVGNjAyRjYxNkY2MTAwMjBDMTAwMTIKKzoxMDgwRjAwMDA5MTg0OTAxMzU0QkM5MTg4NjAwQ0IxREY5MzMzNDRDOUEKKzoxMDgxMDAwMDM0MTlFMzYzMTEyMzVCMDFDQjE4NjM2MzBEMjM5QjAxRDcKKzoxMDgxMTAwMENCMThCNDE4RTM2MzIzMjM1QjAxQzkxODYxNjMwMTMwRjIKKzoxMDgxMjAwMDAyMjhFNERCMjk0OEMxMURGOTMxMjk0Q0MwNDZBMTYyNkYKKzoxMDgxMzAwMDYxNkIwRDIzOUIwMUUxNjJDMTE4OTE2MjUxNkJDMDQ2RDYKKzoxMDgxNDAwMEQxNjIwODIxRTE2NDI1NDlDMDQ2MjE2NTI0NDkwQjY5QjMKKzoxMDgxNTAwMEMwNDY2MzY1QzMxRDREMzNFMzY1MjU2NjhCNjhDMDQ2MjUKKzoxMDgxNjAwMDYzNjZDQjY4QzA0NkEzNjYxRTRCQzA0NkUzNjYyNzY3QkUKKzoxMDgxNzAwMDBCMjNEQjAxQzMxOEEzNjc2NzY3MDEyNkUzMUQ2OTMzN0YKKzoxMDgxODAwMDY2NjFFNzYxMUY3MzAyMjNEMzY0MTc0QkMwNDYxMzY1MTIKKzoxMDgxOTAwMENCNjlDMDQ2NTM2NUMzMUQ1MTMzRDM2NTJCMUQxMzY2OTAKKzoxMDgxQTAwMDRCNjlDMDQ2NTM2Njg5NjlDMDQ2OTE2NjBGNDlDMDQ2MEYKKzoxMDgxQjAwMEQxNjYxNjY3MEYyM0RCMDFDMDE4OTA2NzU2NjdENzYxMzkKKzoxMDgxQzAwMEQwMUQ2OTMwNTY2MTA3NzNGMEJDNzA0NzY4MEUwMDgwOUYKKzoxMDgxRDAwMEU0MkMwMDgwNjQyRDAwODA5MEVFMjA0MDMwMDExODAwRDcKKzoxMDgxRTAwMDdDMjkwMDgwMDA1NUZGRkYzODAxMTgwMDEwNTVGRkZGNjMKKzoxMDgxRjAwMDkwQjQwMDIxMUU0QUJCMjMxQjAxRDcxOEY5NzMxOTIzMjEKKzoxMDgyMDAwMERCMDFEMDE4MDEyNENEMjMxQjAxRDMxOEMxNjExQzcwRTAKKzoxMDgyMTAwMDMzMjM5QjAxRDMxODk5NjBCOTczNTk2MTJGMjM5QjAxQjQKKzoxMDgyMjAwMEQzMTgxOTYwMTM0QjUxMjdCRjAzMDM2MzNCNjA4NDY5NjQKKzoxMDgyMzAwMEU0MTg0NDYzMDQzQzdDNjAwMTI0RTQwMjg0NjMwRTRDMzMKKzoxMDgyNDAwMEMwNDZCQzYwMDQ2QkMwNDY0NDYyODQ2OUU0MTgwQjRCQjIKKzoxMDgyNTAwMEUzMThGQjYwMDM2QkMwNDY4MzYyNDM2QUMwNDYwMzYyNTcKKzoxMDgyNjAwMEMxNjM1MTY0OTE2NEQxNjVEMTY2OTBCQzcwNDcwMDAwRDAKKzoxMDgyNzAwMDY4MEUwMDgwMDAwMDIwNDBGQzA3MDAwMEZDRjdGRkZGQjQKKzoxMDgyODAwMDkwQjQwMDIyMUI0OUM5MjMxQjAxQzgxODAyNzEwMTIwQTgKKzoxMDgyOTAwMEJCMjMxQjAxQ0IxODU4NzMxNzQ4MDMxQzAwMjdEQzFEOTgKKzoxMDgyQTAwMEMxMzQxQzY1MjMxQzAxMzczRjJGRjhEMzFBNjUxOTIzRUQKKzoxMDgyQjAwMERCMDFDRjE4MzMyMzlCMDFDQjE4M0E2MTk4NjE0MDIwMzIKKzoxMDgyQzAwMEY4NjBEQTYxMUE2MkNBNjQwQTY2MEM0OEMwNDZDMjYwODUKKzoxMDgyRDAwMDBCNDgwMDZCQzAwNkMwMEVGODYzMEE0ODAxNjhDMDQ2MzAKKzoxMDgyRTAwMDE5ODA0MTY4QzA0NjU5ODA4MDY4QzA0Njk4ODA5MEJDMUIKKzoxMDgyRjAwMDcwNDcwMDAwNjgwRTAwODA5MEJDMjA0MDkwRUUyMDQwNDcKKzoxMDgzMDAwMDgwMDAxNDQwNDAwMDE0NDAwMDIwMEE0OUMwNDYwODczMTEKKzoxMDgzMTAwMENCMURGRjMzM0EzMzg4NjFDODYxMTg3MDA2NEFDMDQ2RTYKKzoxMDgzMjAwMDEwNjU1MDY2OTA2NjA4NzA1ODcwQkIyMzFCMDFEMTE4MDkKKzoxMDgzMzAwMDA4NzM3MDQ3MjgwNTAwODA2ODBFMDA4MEYwQjQyRjQ5NEMKKzoxMDgzNDAwMDJGNEFDMDQ2MTE2MTAxMjM5QjAyQzgxODUwNjEyRDQ4NzUKKzoxMDgzNTAwMEMwNDYxMDYyREIwMEMzMTg1MzYyMDAyMzEzNjM1MzYzRUIKKzoxMDgzNjAwMDI5NEEyQTRGRDQxREZGMzRGQTM0MTRDNzA4M0YzQjYxMTEKKzoxMDgzNzAwMDFDMUY3QzYxMjY0RkMwNDYzOTYwQjg2MTc5NjFGODYyODQKKzoxMDgzODAwMDNCNjM3QjY0QkE2NEZBNjUyMjRGRkUxREY5MzYyMjREQzkKKzoxMDgzOTAwMEVDMUQ3OTM0MjY2MjUxMjZCNjAzMzc2MTI0NkFDMDQ2NDMKKzoxMDgzQTAwMDc0NjEyRjY3MUQ0RDA5Mjc3RjA0RUMxRDc1MzQ3QzYwQjcKKzoxMDgzQjAwMDNENjAxQjRDQzA0NjNDNjFFNjFENzUzNjdFNjExOTRGMjEKKzoxMDgzQzAwMEMwNDY3QzYwM0Q2MDBGMUMwMDIxRkYyNDAxMzQxRDFDNTEKKzoxMDgzRDAwMDhCMDBGRDUwMDEzMUExNDJGQUQzMDExQzAwMjAwMTI3N0UKKzoxMDgzRTAwMEZGMDI4MzAwQ0Q1MDAxMzBCODQyRkFEMzAwMjA4MTAwNTMKKzoxMDgzRjAwMDU1NTAwMTMwODAyOEZBRDNGMEJDNzA0NzI0QTMyMDQwQTgKKzoxMDg0MDAwMDQwMDExODAwMjQ4MzIwNDAyNEE5MjA0MDgwMDExODAwNDYKKzoxMDg0MTAwMEE4MDMwMDgwMjRBNzIwNDA2ODBFMDA4MDI0QTgyMDQwRTQKKzoxMDg0MjAwMEE0QTgyMDQwMDgwNDAwODBCOEI1MkM0OEZERjdCQUZEODgKKzoxMDg0MzAwMDAxMjAyQjQ5MEE2ODUyMEMwNkQyMEE2ODEyMEMwMkQxOUMKKzoxMDg0NDAwMDBBNjg5MjBBMDBEMjAwMjAwNDA2MjQwRTI1NEFENzFEOEQKKzoxMDg0NTAwMDBEMzcwMDIzMDAyMDlEMDA3ODUxMDEzMzA0MkJGQUQzRkYKKzoxMDg0NjAwMDAxMjczRjA1NTA2MUY4NjBEMDYxRjg2MTAwMjNEQjQzQ0MKKzoxMDg0NzAwMDkzNjEzQjYxMTM2MjNCNjIwMDI3MUI0QjhENjhDMDQ2RDIKKzoxMDg0ODAwMDAwOTU4RDY5QzA0NjAwOTUwMDJDMEJEMERENkJDMDQ2NzEKKzoxMDg0OTAwMDAwOTU5RDZCQzA0NjAwOTU1RDZCQzA0NjAwOTUxRDZCQjkKKzoxMDg0QTAwMEMwNDYwMDk1MDEzNzQwMkZFOEQzMDAyNzZDNDYwMTIzRDIKKzoxMDg0QjAwMDVCMDcxQzQzMDFFMDIwNjAwMTM3MEQ2ODJCMDkwMkQyRTUKKzoxMDg0QzAwMDgwMkZGOEQzMDFFMDgwMkYwM0QzMDg0OTRCNkUwMTMzOEUKKzoxMDg0RDAwMDRCNjZEMDYyQjhCQzA4QkMxODQ3MDAwMEY0MDFGRkZGMkYKKzoxMDg0RTAwMDAwMDAxMDQwNjgwRTAwODAwMDAxMTg0MEEwODIyMDQwNkIKKzoxMDg0RjAwMDkwQjQwMDIxMEU0RjBGNEEwMDIwNEMwMTY0MUFBNDAwRDIKKzoxMDg1MDAwMEEzMTg1ODYwOTg2MDE4NjQ1ODY0MTA1MzU4ODBDQzAwQzEKKzoxMDg1MTAwMEU0MTk5ODY3REM2MjAxMzEwMzI5RUVEMzA2NDlDMDQ2QUQKKzoxMDg1MjAwMDA4NjA0ODYwODg2MEM4NjAwODYxOTBCQzcwNDcwMDAwQkYKKzoxMDg1MzAwMEFDNjYyMTQwNUMyQjAwODBEMDJDMDA4MDY0MjEwNTQ4NzMKKzoxMDg1NDAwMEMwNDYwMTYzMDAyMUM5NDM0MTYzODE2MzAwMjFDMTYzQzcKKzoxMDg1NTAwMDAxNjQ3MDQ3NjgwRTAwODA4MEI0MDEyMDQwMDIwQTQ5MUYKKzoxMDg1NjAwMEMwNDYwODYwM0MyMDQ4NjA4ODYwMDg0OEMwNDZDODYwMzMKKzoxMDg1NzAwMDAwMjAwNzRBODcwMENCNjhDMDQ2REE1MTAxMzAxMDI4MzYKKzoxMDg1ODAwMEY4RDM4MEJDNzA0NzAwMDBFNDJEMDA4MEY0MkQwMDgwRkIKKzoxMDg1OTAwMDVENENGRkZGMTI0OTEzNDg2NzIzOUIwMUNBMTgwNkMwQjAKKzoxMDg1QTAwMDA4MzgxMTRCQ0ExOEMxNjA4MjYwMDE2MTBGNDkxMDQ4MzgKKzoxMDg1QjAwMEE3MjM5QjAxQ0ExODA2QzAwODM4MEU0QkNBMThDMTYwMTEKKzoxMDg1QzAwMDgyNjAwMTYxMEM0ODBENDk2NzIzOUIwMUMyMTgwNUMxRjcKKzoxMDg1RDAwMDA4MzkwNTRCQzIxOEM4NjA4QTYwMDg2MTcwNDcwMDAwRkUKKzoxMDg1RTAwMEFDMUUyMTQwNDgyRTAwODBGQzFGMDAwMEFDRUUyMDQwNTUKKzoxMDg1RjAwMDM0MkUwMDgwRkMyRjAwMDBBQzNFMjE0MDVDMkUwMDgwMTkKKzoxMDg2MDAwMDkwQjQwMDIxNDA0QzAwMjAwQTAxMTIxOTE5MjNEQjAxMEIKKzoxMDg2MTAwMEQyMThEMDYyMTA2MzUwNjM5MDYzMDEzMTAzMjlGM0QzMDEKKzoxMDg2MjAwMDNBNDlDMDQ2MDg2MzQ4NjM4ODYzMjA2MDAxMjFFMzFEMUUKKzoxMDg2MzAwMDU5MzM2MDYwMTk3MTE4NzI5ODcxOTg3MjU5NzE1ODcyMzMKKzoxMDg2NDAwMEQ4NzFEODcyRTIxRDQ5MzIxMTczMTk3MDkwNzM5ODcwMDUKKzoxMDg2NTAwMDUxNzM1OTcwRDA3M0Q4NzAxMTcxMTE3MjkwNzE5MDcyRkEKKzoxMDg2NjAwMDUwNzE1MDcyRDA3MUQwNzIxODczMDIyMkU3MUQ2OTM3QjEKKzoxMDg2NzAwMDNBNzA5OTczQkE3MDU4NzM3ODcwRDg3M0Y4NzAzOTcxMEEKKzoxMDg2ODAwMDNBNzJCOTcxQjk3Mjc4NzE3QTcyRjk3MUY5NzIzOTczOTMKKzoxMDg2OTAwMEUzMUQ3OTMzMUE3MEI5NzM5OTcwNzg3MzVBNzBGOTczNEUKKzoxMDg2QTAwMEQ5NzAxQTcxMUE3Mjk5NzE5QTcyNTg3MTVBNzJEOTcxNzUKKzoxMDg2QjAwMERBNzIxOTczRTcxRDg5MzczQTcwOTk3M0I5NzA1ODczNzQKKzoxMDg2QzAwMDdBNzBEOTczRjk3MDM5NzEzQTcyQjk3MUI5NzI3ODcxNzcKKzoxMDg2RDAwMDdBNzJGOTcxRjk3MjNBNzNFMzFEOTkzMzFBNzBCOTczQUEKKzoxMDg2RTAwMDlBNzA3ODczNUE3MEY5NzNEQTcwMTk3MTFBNzI5OTcxRjUKKzoxMDg2RjAwMDk5NzI1ODcxNUE3MkQ5NzFEOTcyMjA2MUUwNjA2MDYxQzMKKzoxMDg3MDAwMEEwNjA5MEJDNzA0NzAwMDBBMDFDMDA4MEU4MTkwMDgwQTkKKzoxMDg3MTAwMDgxMjAwMDAyMDE0OUMwNDY4ODYyNzA0N0MwMDAxNDAwRjEKKzoxMDg3MjAwMDA5NDkwQTRCQzgxODA0M0JDOTE4MDg2MDAwMjFDMjFEM0EKKzoxMDg3MzAwMDI5MzJDMjYxMTAxQzAxMzEwODI5RjhEM0MxMUYyOTM5MUYKKzoxMDg3NDAwMDAwMjBDODYxNzA0NzAwMDA2ODBFMDA4MDg0MDkwMDAwQTYKKzoxMDg3NTAwMDA2NDgwNzQ5QzA0NjA4ODA0ODgwMDAyMDg4ODBDODgwQjUKKzoxMDg3NjAwMDg4NjAwNDQ5QzA0NjQ4NjE4ODYxNzA0N0ZGRkYwMDAwODcKKzoxMDg3NzAwMDRDMkEwMDgwNkMwNjAwODAwMDIxMDY0OEMyMUQxOTMyNzgKKzoxMDg3ODAwMEMxNjAwMTYxQzE2MTAxNjIxMTcxRkYzMDAxMzA0MTYyNUMKKzoxMDg3OTAwMDcwNDcwMDAwNkMwNjAwODAwOTQ4MEE0QkMwNDYxODYwMEMKKzoxMDg3QTAwMDAwMjFDMjFENEQzMkMyNjAxMDFDMDEzMTE0MjlGOEQzQzIKKzoxMDg3QjAwMEMxMUY0RDM5MDAyMEM4NjA1ODYwOTg2MDcwNDcwMDAwQTQKKzoxMDg3QzAwMEQ4MDcwMDgwNkMwNjAwODAwMEI1MEI0OTBCNDhGREY3MDgKKzoxMDg3RDAwMEVBRkIwQjQ4MDA2QTAxMjNEQjAzOTg0MzA5NDlDMDQ2QzIKKzoxMDg3RTAwMDA4NjIwOTQ4QzE2ODAxMjkwNEQxQzA2RjgwMjMwMTY4NkIKKzoxMDg3RjAwMDE5NDMwMTYwMDhCQzE4NDdDMUJEMjE0MDc1OTgyMTQwNEMKKzoxMDg4MDAwMEMwMDAxODQwQzAwMDE4MDA2ODBFMDA4MDAwQjUwRjQ4NzYKKzoxMDg4MTAwMEMxNjgwMTI5MDREMUMwNkY4MDIzMDE2ODk5NDMwMTYwQjgKKzoxMDg4MjAwMDBCNEIwQzQ4MEM0QTAwMjFGREY3QkZGQjBCNDg0MThENTgKKzoxMDg4MzAwMDAxMzE0MTg1MDAyMUMxODUwOTQ4MDA2QTAxMjNEQjAzMUMKKzoxMDg4NDAwMDE4NDMwODQ5QzA0NjA4NjIwOEJDMTg0NzY4MEUwMDgwRjMKKzoxMDg4NTAwMDU5QkQyMTQwNzU5ODIxNDBCODBCMDAwMDAwMDAwMDgwRjAKKzoxMDg4NjAwMEMwMDAxODQwQzAwMDE4MDBGMEI1MUI0QzEwMjZFMDY4OEUKKzoxMDg4NzAwMDAxMjgwOEQxNjA4ODAwMjgwNUQxMjA3OTAwMjgwMkQxN0MKKzoxMDg4ODAwMDE5MjBBMDY3MDBFMEE2NjcwMDIwMDcyMzVCMDJFNTE4MTcKKzoxMDg4OTAwMEMxNDNFODYxNjk2MjU5MDhBMTI3N0YwMzc5NjAwRjIxMEMKKzoxMDg4QTAwMDc5NjBFMTFEQjkzMTA4NzEwMTIwQjg2MDQwMDJCODYwRkIKKzoxMDg4QjAwMDAwRjA0Q0ZBMDBGMEYwRkEwNDIwQjg2MDA3MjA3ODYxNkMKKzoxMDg4QzAwMDdFNjAxQjIzREIwMUUwMThDMDhCMDQyMzE4NDBFODYyQTQKKzoxMDg4RDAwMEYwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MDkwQjQwMjFDNzEKKzoxMDg4RTAwMDAwMjBGRjIzMDEzMzlBNDIwOEQwMDEyOTAwRDEwMTIwNDIKKzoxMDg4RjAwMDAwMkEwMUQxMDIyMzE4NDM5MEJDNzA0NzFCNEFENzY4NTUKKzoxMDg5MDAwMDFBNEIxOTc5MUMxQzM3MjM5QjAxRTMxODAxMkYwREQxMzkKKzoxMDg5MTAwMDU3ODgwMDJGMEFEMTAwMjkwQUQxNTk4QjBBMDkwMEQzQTAKKzoxMDg5MjAwMDAyMjA0OTA5RThEMzAxMjMxODQzRTVFNzAwMjkwM0QwRDEKKzoxMDg5MzAwMDk4OEE4MDA3ODAwRkRGRTc2RDIzNUIwMUQxMTg4QTg4NTIKKzoxMDg5NDAwMEZGMjcwMTM3MTc0MDBBNDlDOTg4MDNEMDRCMEEwMUQzRDIKKzoxMDg5NTAwMDAzMjBEMUU3MTMwQTAzRDMwQjBBMDFEMzAyMjBDQkU3OEMKKzoxMDg5NjAwMEQyMDlDOUQzQzkwOUM3RDMwMTIwQzVFNzY4MEUwMDgwNjEKKzoxMDg5NzAwMDA4MUMwMDgwRjBCNUMxQjAwMTIwMDAwNzUyNDlDMDQ2NzQKKzoxMDg5ODAwMDA4NjA1MjQ4NDI2OTQwMERBMTIxNDkwMzQ4NjA1MDQ4OUYKKzoxMDg5OTAwMEMwNkE1MDRCMTg0MzAwMjEwMzAzMUIwQjRFNEMyNzZGM0EKKzoxMDg5QTAwMDNEMDMyRDBCRTcxRDc5MzdBQjQyMUNEMEUzMUQ3OTMzMTYKKzoxMDg5QjAwMDFCNkFDMDQ2NDA5MzAxMjM5QjA3MDM0MzFCNjhDQzAwRkUKKzoxMDg5QzAwMDZFNDYzMzUxMDEyMzlCMDcwNjFEMzM0MzFCNjg2QzQ0REQKKzoxMDg5RDAwMDYzNjAwODMwMDEzMTQwOUI4MzQyMDBEODNGNDgwMzAzNjUKKzoxMDg5RTAwMDFCMEJBQjQyRTdEMTAwMjAwMTIzMUIwMzEzNDAzQzRDN0YKKzoxMDg5RjAwMDAzRDA2MzZBMDEzMzYzNjIwOUUwMTMwQjAzRDMyMzZBNzQKKzoxMDhBMDAwMDAxMzMyMzYyMDNFMDM3NEI1QzZEMDEzNDVDNjUwMDI5NjAKKzoxMDhBMTAwMDA5RDAwMzFDREMwMDIzMUM2QjQ0NUM2ODAxMzAyMzBENkYKKzoxMDhBMjAwMDAxRDI4ODQyRjVEMTMwNEMyNTY4NkIwQzA1RDIyMzY4MDEKKzoxMDhBMzAwMDFCMEMwOEQxMjQ2OEEzMEEwNUQzMjAyNDJCNEJDMDQ2NjUKKzoxMDhBNDAwMDVDNjIwMDI0NUM2MjI1NEIyMzRDNTEyNkI2MDMyMzY3RUQKKzoxMDhBNTAwMDMzNjEzRDZBQzA0Njc1NjEwMjI1QTEyNjc2MDM3NTYwQzMKKzoxMDhBNjAwMDAxMjVCNTYwRTYxREI5MzYzNTcxODg0MjIxRDAyNTFDMzcKKzoxMDhBNzAwMEMzMDA2QzQ2RTQ1ODJFNkY2QjQ0MzQ2MDVCNjgyQzZGMDcKKzoxMDhBODAwMEMwNDY2MzYwMkI2RjA4MzMyQjY3M0M2QUEzNDIwMkQzNTYKKzoxMDhBOTAwMDEyNEJDMDQ2MkI2NzAzMUNEQjAwNkI0NDVDNjgwMTMwNDMKKzoxMDhBQTAwMDIzMEQwNEQzNTEyNEE0MDMyQjZGQzA0NkEzNjE4ODQyMzUKKzoxMDhBQjAwMERFRDExMDBCMDNEMzBFNDkwMTIwRkRGNzc0RkE0MUIwNEIKKzoxMDhBQzAwMEYwQkMwOEJDMTg0NzAwMDAwMDAwMDBCMDAwMDExNDQwRDIKKzoxMDhBRDAwMDAwNDAxNDQwMDAwMDIwNDA2ODBFMDA4MDI0QTcyMDQwODEKKzoxMDhBRTAwMEE0MkEwMDgwQTA4MjIwNDAwMDAwMTA0MEMwMDAxODAwOEUKKzoxMDhBRjAwMEM5NEZGRkZGRjBCNDAwMjEwMDIzMDcyMjA2MjQ0NzRGOEYKKzoxMDhCMDAwMEMwNDYzQzYxM0E2MTAxMzMyMDJCRjlEMzA0MjUzRDYxMTUKKzoxMDhCMTAwMDA1MjMzQjYxM0M2MTNBNjEzQzYxM0E2MTNENjEzQjYxRTcKKzoxMDhCMjAwMDNGNERBQjZGREUwODAyMjMxRTQwMDQyMzMzNDMzQjYxRkQKKzoxMDhCMzAwMDA1MjMzMzQzM0I2MUFCNkY5RTA4MDIyMzFFNDAwNDIzOTEKKzoxMDhCNDAwMDMzNDMzQjYxMDUyMzMzNDMzQjYxQUI2RjVFMDgwMjIzMzQKKzoxMDhCNTAwMDFFNDAwNDIzMzM0MzNCNjEwNTIzMzM0MzNCNjEwMjIzMUYKKzoxMDhCNjAwMEFFNkYxRTQwMDQyMzMzNDMzQjYxMDUyMzMzNDMzQjYxMTcKKzoxMDhCNzAwMEFCNkY1RDAwMDIyMzFENDAwNDIzMkI0MzNCNjEwNTIzQTMKKzoxMDhCODAwMDJCNDMzQjYxQzUwODAyMjMxRDQwMDQyMzJCNDMzQjYxNUIKKzoxMDhCOTAwMDA1MjMyQjQzM0I2MTg1MDgwMjIzMUQ0MDA0MjMyQjQzRkYKKzoxMDhCQTAwMDNCNjEwNTIzMkI0MzNCNjE0NTA4MDIyMzFENDAwNDIzMDEKKzoxMDhCQjAwMDJCNDMzQjYxMDUyMzJCNDMzQjYxMDIyNTA1NDAwNDIzRTYKKzoxMDhCQzAwMDJCNDMzQjYxMDUyMzJCNDMzQjYxNDAwMDAyMjMxODQwQUMKKzoxMDhCRDAwMDA0MjMwMzQzM0I2MTA1MjMxODQzMzg2MTAwMjUzRDYxQUQKKzoxMDhCRTAwMDAxMjMzQjYxM0Q2MTNCNjEwMDIwM0Q2MTBENEIxQjY5RjEKKzoxMDhCRjAwMDQ5MDAxRTFDMDIyMzMzNDAxOTQzMDEyMzNCNjEwMTMwMEQKKzoxMDhDMDAwMDEwMjhGMkQzMDIyMDM4NjEwMzIwMzg2MTNDNjEzQTYxQjgKKzoxMDhDMTAwMDNDNjEzQTYxMzg2MTQ4MDhGMEJDNzA0NzgwMDAxNDAwM0MKKzoxMDhDMjAwMDY4MEUwMDgwODAwMDE0NDBGMEI0MDAyNDA3MjMwNjI3NUIKKzoxMDhDMzAwMDQ0NEFDMDQ2MTc2MTEzNjEwMTM0MjAyQ0Y5RDMwNDI2M0QKKzoxMDhDNDAwMDE2NjEwNTI0MTQ2MTE3NjEwNzIzMTM2MTE2NjExNDYxMEQKKzoxMDhDNTAwMDE3NjExMzYxM0M0QjlCNkZERDA4MDIyMzFENDAyQjFDRTkKKzoxMDhDNjAwMDMzNDMxMzYxMjU0MzE1NjEzNzRCOUI2RjlEMDgwMjIzRTYKKzoxMDhDNzAwMDFENDAyQjFDMzM0MzEzNjEyNTQzMTU2MTMyNEI5QjZGMDEKKzoxMDhDODAwMDVEMDgwMjIzMUQ0MDJCMUMzMzQzMTM2MTI1NDMxNTYxRUUKKzoxMDhDOTAwMDJENEI5RDZGMDIyMzFENDAyQjFDMzM0MzEzNjEyNTQzMzUKKzoxMDhDQTAwMDE1NjEyOTRCOUI2RjVEMDAwMjIzMUQ0MDJCMUMzMzQzMzQKKzoxMDhDQjAwMDEzNjEyNTQzMTU2MUM1MDgwMjIzMUQ0MDJCMUMzMzQzNTYKKzoxMDhDQzAwMDEzNjEyNTQzMTU2MTg1MDgwMjIzMUQ0MDJCMUMzMzQzODYKKzoxMDhDRDAwMDEzNjEyNTQzMTU2MTQ1MDgwMjIzMUQ0MDJCMUMzMzQzQjYKKzoxMDhDRTAwMDEzNjEyNTQzMTU2MTAyMjUwNTQwMkIxQzMzNDMxMzYxOTUKKzoxMDhDRjAwMDI1NDMxNTYxNDAwMDAyMjMxODQwMDMxQzMzNDMxMzYxRDAKKzoxMDhEMDAwMDIwNDMxMDYxMTc2MTA3MjMxMzYxMTY2MTE0NjE0QzAwNDEKKzoxMDhEMTAwMDAwMjAwRjIxMjUxQ0NENDAwMjIzMUQ0MDA0MjMyQjQzOUUKKzoxMDhEMjAwMDEzNjEwNTIzMkI0MzEzNjEwMTMwMDEzOTEwMjhGMUQzNUUKKzoxMDhEMzAwMDE3NjEwNzIzMTM2MTE3NjExMzYxMDMyMDEwNjFGMEJDRjEKKzoxMDhENDAwMDcwNDcwMDAwODAwMDE0MDA2ODBFMDA4MEYwQjU0RjREQTEKKzoxMDhENTAwMDA4MjEwMjIwMkExQ0ZERjcyN0Y5NEQ0QzcxMjM1QjAxRTUKKzoxMDhENjAwMEU3MTgzODgwMUEyMTAyMjAyQTFDRkRGNzFERjk3ODgwQTcKKzoxMDhENzAwMDIwNzkwMDI4MEJEMDAwMjAzODgwRTA2ODAxMjgxMEQxMkQKKzoxMDhEODAwMDQ0NDgwMDY4MDEyMzlCMDIxODQzOTkwMjA4NjBFMDY4ODgKKzoxMDhEOTAwMDAxMjgwNkQxNjA4ODAwMjgwM0QxRjkyMTEyMjBGRkY3QUQKKzoxMDhEQTAwMDQzRkYwMTIxQzkwMzAwMjBGRkY3M0VGRjAwMjU3RDI2NzgKKzoxMDhEQjAwMEY2MDAwMEUwMDEzNTAwMjBGRkY3OUNGRTAwMEMwMUQzMTcKKzoxMDhEQzAwMEI1NDJGN0QzMDAyNTA1RTAwMzIxMDkwMzAwMjBGRkY3OTIKKzoxMDhERDAwMDJCRkYwMTM1MDAyMEZGRjc4REZFNDAwQjAxRDJCNTQyN0QKKzoxMDhERTAwMEYyRDMwNDIwRkZGNzg2RkVGRjIzRTEzMzk4NDMwMTIxRUQKKzoxMDhERjAwMDAxNDMzODg4RkYyMzAxMzM5ODQyMDNEMTJGMjM1QjAxQkQKKzoxMDhFMDAwMDE5NDMxNkUwMDEyODA5RDE3ODg4MDEyODAzRDEyMzIzQ0EKKzoxMDhFMTAwMDVCMDExOTQzMERFMDIwMjMxOTQzMEFFMDAwMjgwOEQxMjMKKzoxMDhFMjAwMDc4ODgwMTI4MDNEMTBCMjNEQjAxMTk0MzAxRTA4MDIzNUIKKzoxMDhFMzAwMDE5NDMwNDIwRkZGN0Y4RkUwOTIxNDkwMjAwMjBGRkY3M0IKKzoxMDhFNDAwMEYzRkVFMDY4MDAyODBDRDEwMDIxMUIyMEZGRjdFQ0ZFQTgKKzoxMDhFNTAwMDFBMjBGRkY3NEZGRTAxMjFDOTAzMDE0MzFBMjBGRkY3MzMKKzoxMDhFNjAwMEUzRkUwMDI3MDNFMDA4MkYwMUQzMEYyRjA4RDkzODFDOTkKKzoxMDhFNzAwMEZGRjc0MEZFNzkwMDA5MTkxQjIzREIwMUM5MTg4ODgzMUQKKzoxMDhFODAwMDAxMzcyMDJGRUZEM0YwQkMwOEJDMTg0N0VEQUYyMTQwQ0QKKzoxMDhFOTAwMDY4MEUwMDgwMDAwMDEwNDA4MUIwMTM0ODAxNjhDMDQ2OTEKKzoxMDhFQTAwMDAwOTE0MTY4QzA0NjAwOTE4MTY4QzA0NjAwOTFDMTY4NDgKKzoxMDhFQjAwMEMwNDYwMDkxMDE2OUMwNDYwMDkxNDE2OUMwNDYwMDkxRDkKKzoxMDhFQzAwMDgxNjlDMDQ2MDA5MUMxNjlDMDQ2MDA5MTAxNkFDMDQ2RUYKKzoxMDhFRDAwMDAwOTE0MTZBQzA0NjAwOTE4MTZBQzA0NjAwOTFDMDZBMTMKKzoxMDhFRTAwMEMwNDYwMDkwMDFCMDcwNDcwMDA4MTQ0MEYwQjU4M0IwNTAKKzoxMDhFRjAwMDY4NEQxQjIzREIwMUVGMThGODhCMDQyMjAyNDAwMjkyMUQKKzoxMDhGMDAwMDcxMjM1QjAxRTgxODAxODhDMDQ2MDE5MTQwODhDMDQ2ODIKKzoxMDhGMTAwMDAwOTAwMDI0MDNFMDA4MkMwMUQzMEYyQzA4RDkyMDFDNUEKKzoxMDhGMjAwMEZGRjdFOEZENjEwMDQ5MTkxQjIzREIwMUM5MTg4ODgzOUQKKzoxMDhGMzAwMDAxMzQyMDJDRUZEMzU4NENFMDY5MDAyODE1RDA1NzRFNEYKKzoxMDhGNDAwMDIwMjUwMTNENTM0OUUwNjkzMDQwMEJEMDY4MDA0MDE4QUUKKzoxMDhGNTAwMDM3MjM5QjAxQzAxODgxOEIyODFDRkZGNzY1RkVFMDY5NTEKKzoxMDhGNjAwMEIwNDNFMDYxNzYwODAwMkRFQkQxMDEyMEZGRjdDMkZEOTAKKzoxMDhGNzAwMDQ4NDlDMDQ2Rjg4M0Y4OEJDMjA4MjVEM0NBNjgwMTJBM0QKKzoxMDhGODAwMDEzRDEwQTc5MDAyQTFGRDE0OTg4MDAyOTFDRDEwMTk5REYKKzoxMDhGOTAwMDQzNEEwMDI5MDVEMDAxMjkxNkQxNTE4QkM5MDgxM0QyQTMKKzoxMDhGQTAwMDBGRTA1MThCMDkwOTBGRDIwQkUwMEE3OTAwMkEwQkQxOEYKKzoxMDhGQjAwMDZEMjM1QjAxQzkxODhBODhDOTg4MTE0MDQ5MDkwOTA3Q0UKKzoxMDhGQzAwMDAyRDEwNDIzOTg0M0Y4ODNGODhCMDQyMTAxNDAwMjlBQ0MKKzoxMDhGRDAwMDFGRDBCOThCNEEwQjI3RDM4MDA5MjVEM0ZGMjMwMTk4RDMKKzoxMDhGRTAwMDAxMzM5ODQyMjBEMDAwMjUwMDk4MDEyODAwRDEwNTAyQzUKKzoxMDhGRjAwMDAxOTgwMDI4MDJEMTAxMjM1QjAzMUQ0M0E5NDIxM0QwMkQKKzoxMDkwMDAwMDAwMjAyOTFDRkZGNzEwRkVCRDgzMDAyMEMwNDM2MDYyRDIKKzoxMDkwMTAwMDBBRTBCODhCNDAwQjA3RDIwOTIxNDkwMjAwMjBGRkY3NzQKKzoxMDkwMjAwMDAzRkUwOTIwNDAwMkI4ODNGODhCQzAwODJERDMxRDQ4RTkKKzoxMDkwMzAwMEM3NkEwMTk4MDA5OUZGRjc1MUZDQzIwN0QyMEYxQTQ5N0QKKzoxMDkwNDAwMDAzRDAwNDIzQ0Q2RDJCNDMwM0UwMDQyM0NENkQ5RDQzNUEKKzoxMDkwNTAwMDJCMUNDQjY1ODMwODAzRDMwMjIzQ0Q2RDJCNDMwM0UwODgKKzoxMDkwNjAwMDAyMjNDRDZEOUQ0MzJCMUNDQjY1NjE2QTgxNDIwQ0QwRTAKKzoxMDkwNzAwMDYwNjIwRTQ4MDAyQTAzRDBGRjIxMjEzMTM5NDMwM0UwMEEKKzoxMDkwODAwMEZGMjMyMTMzOUY0MzM5MUNDMTYyMDNCMEYwQkMwOEJDRUQKKzoxMDkwOTAwMDE4NDcwMDAwNjgwRTAwODA2ODFDMDA4MDAwMDAwMDgwRjcKKzoxMDkwQTAwMDI4MUMwMDgwNDAwMDE0NDBBNDJBMDA4MDQwMDAxNDAwQzYKKzoxMDkwQjAwMDkwQjQwMTIyMjAyODBGRDI0MzAwMEYxQzA3NDk1QzE4RUUKKzoxMDkwQzAwMDM3MjM5QjAxRTMxODlGODM4MjQwMDcyMzVCMDJDOTE4NjMKKzoxMDkwRDAwMDEwMUNDQTY5MTA0M0M4NjE5MEJDNzA0NzY4MEUwMDgwQkMKKzoxMDkwRTAwMDBCNDg0MDY5MEI0OUM5OEIwNDIyMEE0MDBBNDkwNkQwNDMKKzoxMDkwRjAwMDAxMjNEQjAyOTg0MzAxMjNDQTZEMUE0MzA1RTAwMTIzRDMKKzoxMDkxMDAwMERCMDIxODQzQ0E2RDUyMDg1MjAwQ0E2NTcwNDcwMDAwNUUKKzoxMDkxMTAwMDgwMDAxNDQwRTgxQjAwODBBNDJBMDA4MDAwQjU4NEIwQzEKKzoxMDkxMjAwMEZGRjdERUZGMDExQzA1MjAwMDkwMDAyMDAxQUIxODgwMzYKKzoxMDkxMzAwMDA0M0I1ODcwMUIyMjAwQUI1QTgwRDk4MDA1NDlDOTZEODkKKzoxMDkxNDAwMEMwNDYwMjkxMDM5MDY4NDYwMDIxRkRGNzc5RjgwNEIwMEIKKzoxMDkxNTAwMDA4QkMxODQ3QTQyQTAwODAwRjQ4MDE2ODQ5MEMwNUQyQjIKKzoxMDkxNjAwMDAxNjgwOTBDMDZEMTAwNjg4MDBBMDNEMzBCNDgwMDY4MjcKKzoxMDkxNzAwMDAwMEMwMUUwMEE0ODgwNkMwMDA0MDAwQzA5NEI5ODQyODYKKzoxMDkxODAwMDA1RDAwMjMzOTg0MjAyRDAwNzRCOTg0MjAxRDEwMTIwMEEKKzoxMDkxOTAwMDcwNDcwMDIwRkNFNzAwMDAwMDAwMTA0MDAwMDAxODQwNkQKKzoxMDkxQTAwMDAwMDAwMDgwMDQ5OTAwMDAwNzk5MDAwMDkwQjQwMTI0OTkKKzoxMDkxQjAwMDIxMUMxODQ4MDI2ODUyMEMwNkQyMDI2ODEyMEMwMkQxMTcKKzoxMDkxQzAwMDAwNjg4MDBBMDBEMjAwMjEwOTA2MDkwRTEyNEYxMzRBRDYKKzoxMDkxRDAwMDAyRDAzODY4MDAwQzAwRTA5MDZDMDAwNDAwMEMxMDRCQ0EKKzoxMDkxRTAwMDk4NDIwOEQwMDIzMzk4NDIwNUQwMEU0Qjk4NDIwMkQwRTQKKzoxMDkxRjAwMDAyM0I5ODQyMENEMTAwMjkwMkQwRjg2QTAwMEMwMEUwMzIKKzoxMDkyMDAwMEQwNkM0MDBBMDBEMjAwMjQyMDA2MDAwRTkwQkM3MDQ3QUIKKzoxMDkyMTAwMDAwMjBGQkU3MDAwMDEwNDAwMDAwMTg0MDAwMDAwMDgwMjQKKzoxMDkyMjAwMDA0OTkwMDAwMDc5OTAwMDAwQzQ4MDE2ODQ5MEMwNUQyMTgKKzoxMDkyMzAwMDAxNjgwOTBDMDVEMTAwNjg4MDBBMDJEMzA4NDg4MDY4REIKKzoxMDkyNDAwMDAxRTAwODQ4NDA2QzAwMDQwMDBDMDAyMTAzMjgwM0QwMTIKKzoxMDkyNTAwMDQwMDgwMUQzMDEyMDcwNDcwODFDRkNFNzAwMDAxMDQwQzMKKzoxMDkyNjAwMDAwMDAxODQwMDAwMDAwODBGMEI1MDEyNzFBNEMyNTY4NjYKKzoxMDkyNzAwMEZGRjc3MkZGMDMxQzE5NEEwMjIxMDEyNjE4NDgwMTJCMkYKKzoxMDkyODAwMDFCRDFDQjA0MUU2MDU1MjMwMzYwMDAyMzQzNjAwNjY4OTYKKzoxMDkyOTAwMDU1MkUxQkQxQUEyNjA2NjA0MzYwMDM2OEFBMkIxNUQxNjAKKzoxMDkyQTAwMDA5MjMwMzYwMDUyMzBGNEZDMDQ2M0I2MDAzMjMwRTRGODUKKzoxMDkyQjAwMEMwNDYzQjYwMTE2MDA3NjgwOEUwMDgyMzIzNjAwNDIzNzAKKzoxMDkyQzAwMDBBNEZDMDQ2M0I2MDExNjAwNjYwMjc2OEMwNDYyNTYwQjMKKzoxMDkyRDAwMDM4MUNGMEJDMDhCQzE4NDcwMDAwMjA0MDAwMDAyNDQwQTcKKzoxMDkyRTAwMDAwMDAyMjQwMDAwMDJBNDAwMDAwMjY0MDAwMDAyODQwRTQKKzoxMDkyRjAwMDgwQjUwNzFDRkZGNzMwRkYwMTI4MDVEMTE5NDgwMDY4MjkKKzoxMDkzMDAwMDE5NDk0OTZCMDg0MDIyRTAxODQ4MDE2ODQ5MEMwNUQyMDgKKzoxMDkzMTAwMDAxNjgwOTBDMDZEMTAwNjg4MDBBMDNEMzE0NDgwMDY4NkMKKzoxMDkzMjAwMDAwMEMwMUUwMTM0ODgwNkMwMDA0MDAwQzEyNEJDMDE4QzQKKzoxMDkzMzAwMDA4MjgwQkQyMDFBMzFCNUM1QjAwOUY0NDA1MDMwNzAzQjUKKzoxMDkzNDAwMDA3MDcwNTAzMDMyMDAyRTAwMTIwMDBFMDAwMjAwMTIxQkYKKzoxMDkzNTAwMDM4NjA4MDA3MDBEMTAwMjEwODA2MDAwRTgwQkMwOEJDRTAKKzoxMDkzNjAwMDE4NDcwMDAwMzQ2RTIxNDAwMDAwMTE0MDAwMDAxMDQwRkEKKzoxMDkzNzAwMDAwMDAxODQwMDAwMDAwODBGRTY2RkZGRkYwQjU4MkIwREMKKzoxMDkzODAwMDA3MUMwMTIwMDE5MEZGRjdFN0ZFMDEyODEzRDEzODJGQjkKKzoxMDkzOTAwMDAxRDBBODJGMDdEMTAwMjZGNjQzMzQxQ0E4MkYwMkQxRjQKKzoxMDkzQTAwMDMwMUMwMDk2MzUxQzExMjAwMDA0MDY2MjQ0NjI4NTYyNjAKKzoxMDkzQjAwMDAwOTlDMDQ2QzE2MjAwMjEwODQ4QzA0NjAxNjAzODJGQUMKKzoxMDkzQzAwMDAxRDBBODJGMDVEMTAxMjEwMTYwQTgyRjAxRDEwMzIxQ0YKKzoxMDkzRDAwMDAxNjAwMTk4MDJCMEYwQkMwOEJDMTg0NzM0NkUyMTQwMEYKKzoxMDkzRTAwMDcwNDcwMDAwNzA0NzAwMDA5MEI1MDcxQzEyNEMyMTY4QzAKKzoxMDkzRjAwMDEyNDg4MTQyMEJEMDAwMjMyMTFDRTIxREMxMzIwMEUwNDMKKzoxMDk0MDAwMDA4QzE5MTQyRkNEMzIwNjBDODIwQTA4MDY3NzIzODAxNTcKKzoxMDk0MTAwMDAwRjAxOEY4Mjc3MjBBNDhDMDQ2RTA2MDA5MkYwMERCMDgKKzoxMDk0MjAwMDAwMjdFMDE5MDE3RDAxMzEwMTc1RTA4ODAxMzBFMDgwRkQKKzoxMDk0MzAwMDAxMjA5MEJDMDhCQzE4NDcwMDAwMDA4MEVFRkZDMEQwOUYKKzoxMDk0NDAwMDA4MTAwMDAzODBCNDA4NEFEMTFEODkzMTBCN0EyMDJCMDMKKzoxMDk0NTAwMDAxRDMwMDIzMEI3MjA3MUMwODdBNDMxQzBCNzI4MDE4N0YKKzoxMDk0NjAwMDkwMzA0NzcyODBCQzcwNDcwMDAwMDA4MDA3NDkwMTIyOUQKKzoxMDk0NzAwMDEyMDQwODY4MDI0MDAxMjAwMDJBMDZEMTBBNjgxMjBDNzIKKzoxMDk0ODAwMDAyRDEwOTY4ODkwQTAwRDIwMDIwNzA0NzAwMDAxMDQwMEMKKzoxMDk0OTAwMDkwQjUwNzFDMDk0QzM4MUMyMTFDRkNGNzkxRkYzODFDQTcKKzoxMDk0QTAwMDAwRjAwRUY4MDEyM0Q4NDIwMUQxMDAwQ0UwODAwMDIxMjkKKzoxMDk0QjAwMDIwMUNGQ0Y3QzVGRTkwQkMwOEJDMTg0N0M0NjYyMTQwQzAKKzoxMDk0QzAwMEY4QjUwNzFDNzk3QTc2NDgwMDIzNzY0QzAxMjk1REQxREUKKzoxMDk0RDAwMEEyODhDMDQ2MDA5MkExODk4QTQyNzREQUZBN0EwMDJBRTgKKzoxMDk0RTAwMDE1RDA3QTZDMDAyQTEyRDA4QTQyMTBEODAwOUE1MTFDRUEKKzoxMDk0RjAwMEExODBBMTg4QzA0NjQxODE3ODZDNkI0RUMwNDZGMDgwNDcKKzoxMDk1MDAwMEEwNkE1ODIzNzk2QzU5NDM0MDE4QzExQTI4RTAyMjg4NzAKKzoxMDk1MTAwMDAxMzIxMjA0MTIwQzIyODA4QTQyMDBEQjIzODAwMDIyRDYKKzoxMDk1MjAwMDAwMjk2OURENUY0Q0E0NkE1RTRCMUQ4ODU4MjM2QjQzOUMKKzoxMDk1MzAwMEUzMThERTFEMDEzNjAxMjM5QjA3MzM0MzFCNjgxQjA2MUUKKzoxMDk1NDAwMDE1RDE1ODQ5MDA5QTAxMzI4QTgwOEE4OEMwNDY0MjgxRTIKKzoxMDk1NTAwMDA4ODgwMTMwNTQ0RUMwNDZGMDgwNTgyMDY4NDMyMTE4RDYKKzoxMDk1NjAwMDM4MUMwMEYwMzlGQkYwODgwMDA0MDAxNDk1RTA0RDRCRTYKKzoxMDk1NzAwMDAxMzUyRDA0MkQwQzFEODA4RDQyMDFEQjAwMjUxRDgwNDEKKzoxMDk1ODAwMDAxMzIxMjA0MTIxNDkxNDJDRURDODFFMEUxODhFMjg5QkEKKzoxMDk1OTAwMDkxNDIxOERBRjk3QTAwMjkyRkQwNzk2QzQ5MDQ0OTBDRTQKKzoxMDk1QTAwMDc5NjQyQUQwRTI4OTkxNDIyN0Q4RTE4ODAxMzFFMTgwQUIKKzoxMDk1QjAwMEUxODhDMDQ2ODE4MTAxMjNEQjAzNzg2QzE4NDMzQTRFNzEKKzoxMDk1QzAwMEMwNDZGMDgwMDBFMDYzRTBFMDZBNzk2QzRCMDA1OTE4MTcKKzoxMDk1RDAwMDQ5MDE0MDE4QzExRjU5MzkzODFDMDBGMDBGRkJFMDZBREYKKzoxMDk1RTAwMDc5NkM0QTAwNTIxODUyMDE4MDE4MDEzOTA5MDQwOTBDOUIKKzoxMDk1RjAwMDYwMzgwMEYwODlGQkI2RTc0QUUwNjE4ODAxMzEwOTA0NzAKKzoxMDk2MDAwMDA5MEM2MTgwRTI4OTkxNDIwMERCNjM4MDAwMjEwMDJBMUQKKzoxMDk2MTAwMDNFREQyNDRDRTQ2QTIzNEI1RDg4NkIwMDVCMTk1QjAxRTMKKzoxMDk2MjAwMEUzMThERTFEMDEzNjAxMjM5QjA3MzM0MzFCNjgxQjA2MkQKKzoxMDk2MzAwMDIwRDExQzRFRjE4ODAxMzFGMTgwRjE4OEMwNDY4MTgxMzIKKzoxMDk2NDAwMDcwODgwMTIzREIwMzAxMzAxODQzMTc0OUMwNDZDODgwRTYKKzoxMDk2NTAwMDY4MDA0MDE5NDAwMTIxMTgzODFDMDBGMENGRkE3MTg4QzkKKzoxMDk2NjAwMDRBMDA1MjE4NTIwMUYwNkE4MDE4MDBGMDRERkIwRTQ5NzIKKzoxMDk2NzAwMEM4ODg3OUU3MEI0QjAxMzUyRDA0MkQwQzVEODA5NTQyOTAKKzoxMDk2ODAwMDAxREIwMDI1NUQ4MDAxMzEwOTA0MDkxNDhBNDJDMkRDMzYKKzoxMDk2OTAwMDAxODkwMTMxMDE4MTAwMjBDMDQzRjhCQzA4QkMxODQ3OTIKKzoxMDk2QTAwMDRDMkIwMDgwNEMyQTAwODBDNDY2MjE0MEYwQjQwNjFDN0MKKzoxMDk2QjAwMDAxMjNEQjAzMzM0MDAxMjQ0NDRGMDAyMDQ0NEE0NTREM0QKKzoxMDk2QzAwMEQxMUQzOTMxMDAyQjQxRDBFMzAzRjMxQTczRDBFRTg5NTkKKzoxMDk2RDAwMDlFNDI3MUQzRUU4ODAwMkU2REQwRUQ2QTVFMUU3MzAwM0YKKzoxMDk2RTAwMDlCMTk1QjAxRUQxOEFFNjgzNjA2MzYwRTAzMkUwMkQwQ0MKKzoxMDk2RjAwMENFODkwMTM2Q0U4MTQwMzVBRDhCQUQwMDM1NEU3NjZBRDAKKzoxMDk3MDAwMEMwNDY3MDUxNTU4OTAxMzU1NTgxMzI0RUYyNkFEMjE4RTIKKzoxMDk3MTAwMDkwNjBGMjZBRDIxODkwNjNGMjZBRDIxOEQwNjNGMjZBNEIKKzoxMDk3MjAwMEQyMTgxMDY0RjI2QUQyMTg1MDY0RjI2QUQyMTg5MDY0QTcKKzoxMDk3MzAwMEYyNkFEMjE4RDA2NEYwODgwMTM4RjA4MEYwODhDMDQ2MTAKKzoxMDk3NDAwMDg4ODEyNDQ5MDAyODM5RDE0RjgwMzdFMDAwMkUzOEQ5NEMKKzoxMDk3NTAwMEFCODlCMzQyMzBEM0FCODgwMDJCMkNEMDUzODkwMTMzNzMKKzoxMDk3NjAwMDUzODEyQTFDQUQ2QTU4MjMwMTNFNzM0M0VEMThBRTY4M0QKKzoxMDk3NzAwMDM2MDYzNjBFMDMyRTAyRDBDRTg5MDEzNkNFODFBODYwODEKKzoxMDk3ODAwMDk1NkFFRDE4QTg2Mzk1NkFFRDE4RTg2Mzk1NkFFRDE4NzcKKzoxMDk3OTAwMDI4NjQ5NTZBRUQxODY4NjQ5NTZBRUQxOEE4NjQ5NTZBNUUKKzoxMDk3QTAwMEVCMThEODY0OTA4ODAxMzg5MDgwOTA4OEMwNDY0ODgxMzIKKzoxMDk3QjAwMDAwMjgwM0QxMDFFMDA0RTAwM0UwMTc4MDIwMUNGMEJDODYKKzoxMDk3QzAwMDcwNDdDQTg5MDEzMkNBODFGOUU3MDAwMEZGRkYwMDAwMzMKKzoxMDk3RDAwMDBDMkIwMDgwNEMyQTAwODAwMEI1MDAyMTQxNjAxMDQ5MEMKKzoxMDk3RTAwMDRBNjgwMDJBMTBEMUNBNjgwMDJBMDREMENBMUQxOTMyNUEKKzoxMDk3RjAwMDEyNzkwMDJBMDhEMDRBNjkwMDJBMEJEMTg4NjE0ODYxOTEKKzoxMDk4MDAwMDAwRjAxMEY4MDhCQzE4NDc0QTY5MDAyQTAyRDE4ODYxQTQKKzoxMDk4MTAwMDQ4NjFGN0U3OEE2OUMwNDY1MDYwODg2MUYyRTcwMDAwNTYKKzoxMDk4MjAwMDZDMDYwMDgwQjBCNTJBNDg0MDY5MDAyODRDRDAwODIyNTgKKzoxMDk4MzAwMEMxNjgwQTQwMDAyNzI3NEJEOTFEQjkzMTAwMkExMUQwMzEKKzoxMDk4NDAwMDA0MjIyNTRDQzA0NjBDNjEyNDRDQzA0NjRDNjIyNDRDN0EKKzoxMDk4NTAwMEMwNDY4QzYyMjM0Q0MwNDZDQzYyMjM0Q0MwNDYwQzYzOEQKKzoxMDk4NjAwMDRGNjMxMkUwMDUyMjIxNENDMDQ2MEM2MTIwNENDMDQ2REIKKzoxMDk4NzAwMDRDNjIyMDRDQzA0NjhDNjIxRjRDQzA0NkNDNjIxRjRDRDAKKzoxMDk4ODAwMEMwNDYwQzYzMUU0Q0MwNDY0QzYzNDAyNENDODI0RjgzQzAKKzoxMDk4OTAwMDFDNEYwMDIxMDAyQTBDRDk4QzAwMDUxOTZENkE3RDQwRUYKKzoxMDk4QTAwMEU0MThGRjM0MDEzNDY1NjIwMTMxOTE0MkY0RDMxMDI5ODgKKzoxMDk4QjAwMDA3RDI4QTAwRDIxOEZGMzIwMTMyNTc2MjAxMzExMDI5RDMKKzoxMDk4QzAwMEY3RDMxMTQ5MDBGMDIyRjhCMEJDMDhCQzE4NDcwMDAwREIKKzoxMDk4RDAwMDZDMDYwMDgwQUNBQjIwNDAyODAxNDAwMDAxMjM0NTY3QTYKKzoxMDk4RTAwMDg5QUJDREVGRkVEQ0JBOTg3NjU0MzIxMDIwMDE0MDAwRUYKKzoxMDk4RjAwMDY3NDUyMzAxRUZDREFCODk5OEJBRENGRTEwMzI1NDc2NzAKKzoxMDk5MDAwMEMzRDJFMUYwMzYzNjM2MzYzMDgwMjA0MEIwQjUwRjFDNzkKKzoxMDk5MTAwMDE1NERFOTFEQzkzMTE1NEMyMzFDMTU0QTAwMjBGQ0Y3RDMKKzoxMDk5MjAwMDQ0RkJFOTFERkYzMTFFMzEyMzFDMEQxQzExNEEwMTIwOEYKKzoxMDk5MzAwMEZDRjczQkZCMjkxQzIzMUMwRTRBMDAyMEZDRjczNUZCREYKKzoxMDk5NDAwMDM5MUMyMzFDMEM0QTAxMjBGQ0Y3MkZGQjAwMjEwQjQ4N0IKKzoxMDk5NTAwMEMyMUQxOTMyNTE3MTAxMjFGRjMwMDEzMDQxNjIwODFDRDIKKzoxMDk5NjAwMEIwQkMwOEJDMTg0NzAwMDBBQ0FCMjA0MDc1MDhGRkZGMzYKKzoxMDk5NzAwMDI4MDAwMzAwNDAwMDAyMDAxNDAwMDcwMDZDMDYwMDgwNkQKKzoxMDk5ODAwMEYwQjUzNzRBNTA2OTAxMjM5QjA3MDgzMDE4NDMwMDY4MzcKKzoxMDk5OTAwMDAxMDYwOTBFMzM0QjAxMjk0OUQxMUY2ODE5MUMzMjRCQUUKKzoxMDk5QTAwMDlGNDIwNEQxRkZGNzNFRkZGMEJDMDhCQzE4NDcwMDIzREMKKzoxMDk5QjAwMDlGMDBDQzU5NTU2OUVGMTkzQzYxMDEzMzA1MkJGN0QzNTIKKzoxMDk5QzAwMDAwMEEwMDAyMDIyMzE4NDM1MzY5QzA0Njk4NjA1MDY5OTgKKzoxMDk5RDAwMDA4MjNDMjY4MTM0MDI1NEZGQTFEQjkzMjAwMkIwMkQwNkMKKzoxMDk5RTAwMDA0MjMyMzRDMDFFMDA1MjMyMjRDQzA0NjE0NjE0MDI0OEIKKzoxMDk5RjAwMEQ0ODIwMDI0NTQ4MzIwNEMwMDIyMDAyQjBDRDk5NTAwRTMKKzoxMDlBMDAwMDQ2MTk3NjZBNjY0MEVEMTlGRjM1MDEzNTZFNjIwMTMyRkUKKzoxMDlBMTAwMDlBNDJGNEQzMTAyQTA3RDI5MzAwREIxOUZGMzMwMTMzQTMKKzoxMDlBMjAwMDVDNjIwMTMyMTAyQUY3RDNGRkY3NzBGRkJDRTcwMDIxMTgKKzoxMDlBMzAwMDhGMDBEQzU5NTU2OUVGMTk3QzYyMDEzMTA1MjlGN0QzOTQKKzoxMDlBNDAwMDAwMEEwMDAyMDMyMzE4NDM1MTY5QzA0Njg4NjA1MDY5MjgKKzoxMDlBNTAwMDQwNjhDMDQ2NTA2MTA5NDhGQ0Y3QTRGQUE0RTcwMDAwM0EKKzoxMDlBNjAwMDZDMDYwMDgwMzA4MDIwNDA2NzQ1MjMwMUFDQUIyMDQwNkQKKzoxMDlBNzAwMDI4MDE0MDAwMjAwMTQwMDA1QzVDNUM1QzExMzFGRkZGNkMKKzoxMDlBODAwMEYwQjUwNzFDM0I0ODNDNEMwODIxMjA2MEExODAwMDIwMTkKKzoxMDlBOTAwMDIwODFFMTgwNjA4MTM5NDhDMDQ2RTA2MDM4NDhDMDQ2OTYKKzoxMDlBQTAwMDIwNjEzODQ4QzA0NjYwNjEzNzQ4QzA0NkEwNjEzNzQ4RTkKKzoxMDlBQjAwMEMwNDZFMDYxMzY0OEMwNDYyMDYyMzY0OEMwNDY2MDYyMTMKKzoxMDlBQzAwMDM1NDhDMDQ2QTA2MjM1NDhDMDQ2RTA2MjM0NDhDMDQ2Q0EKKzoxMDlBRDAwMDIwNjMzNDQ4QzA0NjYwNjMzMzQ4QzA0NkEwNjMzMzQ4QkYKKzoxMDlBRTAwMEMwNDZFMDYzMzI0OEMwNDYyMDY0MzI0OEMwNDY2MDY0RTUKKzoxMDlBRjAwMDMxNDhDMDQ2QTA2NDMxNDhDMDQ2RTA2NDMwNDhDMDQ2QTIKKzoxMDlCMDAwMDIwNjUzMDQ5Qzg2ODAyMDQ4OTY5NEE0MEUzMUQ3OTMzRjkKKzoxMDlCMTAwMDA5MDRDOTQzQzA0MzQ4NDBFMTFEQjkzMURBNjMwODYwMTQKKzoxMDlCMjAwMDI5NEQyMTFDMkIxQzI5NEEwMDIwRkNGNzNFRkEyODRBMEIKKzoxMDlCMzAwMEUxMURCNTMxMDEyMDJCMUMwRTFDRkNGNzM2RkEyNDRBMUUKKzoxMDlCNDAwMDAwMjAzMTFDMkIxQ0ZDRjczMEZBRTExRDREMzEyQjFDODEKKzoxMDlCNTAwMDIwNEEwMTIwRkNGNzI5RkFFMDFENUQzMDAxNjgwMDI5NDgKKzoxMDlCNjAwMEZDRDA2MDZEQzA0NjM4NjUyMDZFQzA0Njc4NjVGMEJDOUMKKzoxMDlCNzAwMDA4QkMxODQ3ODAwMDA4MDA4Q0I5MjA0MDgxODE0OEJEOEUKKzoxMDlCODAwMDc5NTYyMzhDOTMwQzgyOTUxRDBFMTJDRjlCM0JDMEU5MTYKKzoxMDlCOTAwMEU2NTU3QzgyOTlGNjc4MDJEMUQ3MjU3MzcyOEMzMzEwMDIKKzoxMDlCQTAwMEY3MDNGMTQyNkM5QjRBQTc4MjhFMjNBOTkwQjE4MjhFNjMKKzoxMDlCQjAwMERDM0ZGQjI5MDA2MjIyNDU4ODJCRjE4NTEyNjFEMTczQkQKKzoxMDlCQzAwMDZFQjExMTE2MDg4MzIwNDA3NTA4RkZGRjU0MDAwMzAwOTIKKzoxMDlCRDAwMDA4MDAwMjAwMTQwMDAzMDA4MEI1MEYxQzM5MUMwMEYwQkYKKzoxMDlCRTAwMDMzRjgzODFDRkZGNzRDRkYwMzQ4MDE4OTAxMzEwMTgxMkMKKzoxMDlCRjAwMDgwQkMwOEJDMTg0NzAwMDAwQzJCMDA4MDkwQjUwNDFDRUEKKzoxMDlDMDAwMDBGMUMyMDFDMzkxQzAwRjAxRkY4RTA2ODAxMEVGRjIyMTkKKzoxMDlDMTAwMDEyMDQwMjQwMTIwQTExNDNGRjIyMTIwMjAyNDAxMjAyRjEKKzoxMDlDMjAwMDExNDMwMDA2MDg0MzM4NjUyMDY5QzA0Njc4NjU2MDY5QkQKKzoxMDlDMzAwMEMwNDZCODY1MDM0ODAxODkwMTMxMDE4MTkwQkMwOEJDNjgKKzoxMDlDNDAwMDE4NDcwMDAwMEMyQjAwODA5MEI1MDAyMjkzMDAxRjE4Q0QKKzoxMDlDNTAwMEJGNjk1QjE4NUY2MjAxMzIwNTJBRjdEMzA3N0FGQjA4RjgKKzoxMDlDNjAwMDAzRDMwMDIzOTIwMDUyMTgxMzYyMDc2QkMwNDY4RjYzMjAKKzoxMDlDNzAwMEM3NkFDMDQ2Q0Y2Mzg3NkJDMDQ2MEY2NDQ3NkJDMDQ2NTgKKzoxMDlDODAwMDRGNjQwNzZDQzA0NjhGNjRDMjZCQzA0NkNBNjRDMjg4MEEKKzoxMDlDOTAwMEMwNDYwQTgwODI3QTEyMDYwMzdBMUIwNDFBNDNDMzg4REMKKzoxMDlDQTAwMDFCMDIxQTQzNDM3QURCMDcxQTQzOEE2MDE3MUM4MzdBMjQKKzoxMDlDQjAwMDVBMDgwNUQzMTQyMjFDMUNBMzA4MDJEMjE1MjIwMEUwNjYKKzoxMDlDQzAwMDAwMjIwMDdBNDMwODEwRDNDMDA4MDJEMzg4MjAxMDQzMzIKKzoxMDlDRDAwMDAxRTA4MDIwMTA0MzNBMEExMjAyMDEyMzFBNDNDODYwQUYKKzoxMDlDRTAwMDhBNjAwODFDRkZGNzc4RkQwNUUwMzgwQTAwMDIwMzIzQUMKKzoxMDlDRjAwMDE4NDM4ODYwQ0E2MDAzNDgwMTg5MDEzMTAxODE5MEJDMjIKKzoxMDlEMDAwMDA4QkMxODQ3MEMyQjAwODBGMEI0MDI2RDE0NEMxNTFDRDUKKzoxMDlEMTAwMEU3NjlCRDQwMTMxQzI2NkFGMzQwNUQ0MDJFMUM0NTZENkIKKzoxMDlEMjAwMEJENDA2RTQwMkIxQzM1MUNGRDQwMkYxQ0JCMDA2NTZBREUKKzoxMDlEMzAwMEVCNTgwMDJCMDhEMDIzNjkwMTM3OUY0MjAwRDMwMDI3M0UKKzoxMDlENDAwMEJFMDBBRTU5MDAyRUY3RDFBNDY5QTI0MDExNDMwNTRCQzUKKzoxMDlENTAwMDE5NDNCQTAwQTk1MDQwMzA4NzgzRjBCQzcwNDcwMDAwMTcKKzoxMDlENjAwMDRDMkEwMDgwMDAwMDAwODA4MEI0MDAyMjAwMjMwMDI5REIKKzoxMDlENzAwMDA1RDkwNzc4N0E0MDAxMzAwMTMzOEI0MkY5RDNEMDQzQkIKKzoxMDlEODAwMDAwMDYwMDBFODBCQzcwNDdGMEI1MDcxQzAwMjRGRjI2QkIKKzoxMDlEOTAwMDA5MzYyMDFDMDBGMDlBRjgwMEYwQjhGOTA1MUMwMEYwMTQKKzoxMDlEQTAwMEM3RkEzRDcwMjgxQzAxMzcwMTM0QjQ0MkYxRDNGMEJDMkUKKzoxMDlEQjAwMDA4QkMxODQ3ODBCNTAwRjA5M0Y4MDBGMEE3RjkwNzFDMUQKKzoxMDlEQzAwMDAwRjBCNkZBMzgwQUY2RDM4MEJDMDhCQzE4NDdGM0I1RTEKKzoxMDlERDAwMDgyQjAwMjk4NDEwMjUzMjAwMEYwNjRGODAwRjBBOEZBMjMKKzoxMDlERTAwMEZGRjdFOEZGMDAyNDAwMjAwMTkwMkUyMDAwOTAwMDI1QkUKKzoxMDlERjAwMDAwMjcwMjk4MDEyODA0RDEwMDk4ODQ0MjAxRDMwMDI2NEMKKzoxMDlFMDAwMDA5RTAwMTk4NDExQzAxOTEwMEYwNjBGODAwRjA3RUY5MzIKKzoxMDlFMTAwMDA2MUMwMEYwOERGQUY4MDA4NjQwMzU0MzAxMzQwMTM3MDYKKzoxMDlFMjAwMDA0MkZFNkQzMDM5OTIwQzEwMzkxRkYyMzA5MzM5QzQyRjkKKzoxMDlFMzAwMERERDMwNEIwRjBCQzA4QkMxODQ3RjBCNTA0MUMwRjFDRkYKKzoxMDlFNDAwMDAxMkMyQUQwMTY0OEMwNkY0MDIzMDE2ODE5NDMwMTYwRDUKKzoxMDlFNTAwMDAwMjYyMENGQjEwMDg0MjAwMEYwMjRGODI4MUMwMEYwNTgKKzoxMDlFNjAwMERGRjkyODBBMDBGMERDRjkyODBDMDBGMEQ5RjkyODBFRjcKKzoxMDlFNzAwMDAwRjBENkY5MDBGMDVDRkEwMTM2NDIyRUU5RDM2MTAyMTcKKzoxMDlFODAwMDgzMjAwMEYwMEZGODAwRjA1M0ZBRkZGNzkzRkYwNDQ4MjcKKzoxMDlFOTAwMEMwNkY0MDIzMDE2ODk5NDMwMTYwRjBCQzA4QkMxODQ3QkIKKzoxMDlFQTAwMDY4MEUwMDgwOTBCNTA0MUMwRjFDMDBGMDU5RkEyMDFDQUQKKzoxMDlFQjAwMDAwRjBCNkY5MzgwQzAwRjBCM0Y5MzgwQTAwRjBCMEY5NDgKKzoxMDlFQzAwMDM4MUMwMEYwQURGOTkwQkMwOEJDMTg0NzAwQjUwMTFDNjcKKzoxMDlFRDAwMDU0MjBGRkY3RTdGRjAwMjAwMEYwQTJGOTA4QkMxODQ3NjQKKzoxMDlFRTAwMDAwQjUwMEYwM0RGQTU3MjAwMEYwOUFGOTA4QkMxODQ3NzkKKzoxMDlFRjAwMDkwQjUwODRGRkE2RjIwMjMxNDY4OUM0MzE0NjAyMzFDMEMKKzoxMDlGMDAwMEZGRjc2NUZGRjg2RjIwMjMwMTY4MTk0MzAxNjA5MEJDREIKKzoxMDlGMTAwMDA4QkMxODQ3NjgwRTAwODA5MEI1MDg0RkZBNkYyMDIzRTAKKzoxMDlGMjAwMDE0Njg5QzQzMTQ2MDIzMUNGRkY3ODdGRkY4NkYyMDIzRkQKKzoxMDlGMzAwMDAxNjgxOTQzMDE2MDkwQkMwOEJDMTg0NzY4MEUwMDgwOTYKKzoxMDlGNDAwMEYwQjUwNDFDMEYxQzE4NEVGMDZGMjAyMzAxNjg5OTQzRDQKKzoxMDlGNTAwMDAxNjA2MTAyNTMyMEZGRjdBNUZGMDBGMEU5RjlGRkY3NjgKKzoxMDlGNjAwMDI5RkZGODFEMDUzMDAxMkMwM0QxMjIyRjAxRDMwMDI3MzIKKzoxMDlGNzAwMDBGRTA0NDFDRkZGN0FBRkYwMEYwQzhGODA3MUMwMEYwMzAKKzoxMDlGODAwMEQ3RjkyMDFDRkZGN0EyRkYwMEYwQzBGODA1MUMwMEYwNzUKKzoxMDlGOTAwMENGRjlGMDZGMjAyMzAxNjgxOTQzMDE2MDI4MDIzODQzOEMKKzoxMDlGQTAwMEYwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MEYwQjVDMkIwRDUKKzoxMDlGQjAwMDE0MUMwRDFDMDcxQzAxMkYyRkQwNzkwMjE5NEVGMDZGQjUKKzoxMDlGQzAwMDIwMjMwMjY4OUE0MzAyNjA1MzIwRkZGNzZCRkYwMEYwRTIKKzoxMDlGRDAwMEFGRjlGRkY3RUZGRTY4NDZGRkY3RDZGRTZBNDZFODFEQzkKKzoxMDlGRTAwMDA1MzAxNDU0MjEwQTY4NDQ0MTcwNjg0NjAwOTkwQzMwQzkKKzoxMDlGRjAwMEZGRjdCQUZFMDJBQjE4NzAwMDIwNTg3MDY4NDYwQzIxQkIKKzoxMEEwMDAwMEZGRjdCMkZFMDJBQjU4NzA2OTQ2MzgxQ0ZGRjcxNUZGMjgKKzoxMEEwMTAwMEYwNkYyMDIzMDE2ODE5NDMwMTYwNDJCMEYwQkMwOEJDMTYKKzoxMEEwMjAwMDE4NDcwMDAwNjgwRTAwODBGRkI1QzJCMDA3MUMwMTJGNjIKKzoxMEEwMzAwMDAxRDEwMTIwMzZFMDZCNDYwMDIwQzQ0MzEwQzMwMTMwM0IKKzoxMEEwNDAwMDQyMjhGQkQzNjg0NjBDMzAwMzFDMDAyNDAwMkEwQUQ5OUUKKzoxMEEwNTAwMDBFODhDMDQ2MDY3MDBFODgzNjEyNDY3MDAyMzAwMjMxRjUKKzoxMEEwNjAwMDAyMzQ5NDQyRjREMzAwOTIxODFDMTExQ0ZGRjc3Q0ZFQkEKKzoxMEEwNzAwMDA0MUMwMDIwMDE5MDAyQUIxQzcwNTg3MDlENzA2ODQ2NTMKKzoxMEEwODAwMDBDMjFGRkY3NzFGRTAyQUI1ODcwNDU5QjFEMDYyRDBFOEIKKzoxMEEwOTAwMEFDNDIwM0QxNjk0NjM4MUNGRkY3M0VGRjAxMjBBQzQyQjkKKzoxMEEwQTAwMDAwRDEwMDIwNDZCMEYwQkMwOEJDMTg0N0IwQjVDMkIwMjMKKzoxMEEwQjAwMDBGMUM0MTAyMTQ0Q0UwNkYyMDIzMDI2ODlBNDMwMjYwOTcKKzoxMEEwQzAwMDUzMjBGRkY3RUZGRTAwRjAzM0Y5RkZGNzczRkU2ODQ2MDkKKzoxMEEwRDAwMEZGRjc1QUZFRTA2RjIwMjMwMTY4MTk0MzAyQUQwMTYwQ0IKKzoxMEEwRTAwMDZENzgwMDI0MDJBQjVDNzA2ODQ2MEMyMUZGRjczQ0ZFRTMKKzoxMEEwRjAwMEE4NDIwMkQxMDA5ODg3NDIwMUQzMjAxQzAwRTAwMTIwMzEKKzoxMEExMDAwMDQyQjBCMEJDMDhCQzE4NDc2ODBFMDA4MEZDNDY2MDQ3RUYKKzoxMEExMTAwMDAwMDBBMEUzQjQyMjlGRTVCNDMyOUZFNTAxMTBBMEUzNjQKKzoxMEExMjAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1MzcKKzoxMEExMzAwMDAwMTA4MkU1MDAxMDkzRTU4MTAzODBFMTAxMTBBMEUzQTcKKzoxMEExNDAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1MTcKKzoxMEExNTAwMDAwMTA4MkU1MDAxMDkzRTUwMTAzODBFMTAxMTBBMEUzMDcKKzoxMEExNjAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1RjcKKzoxMEExNzAwMDAwMTA4MkU1MDAxMDkzRTU4MTAyODBFMTAxMTBBMEUzNjgKKzoxMEExODAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1RDcKKzoxMEExOTAwMDAwMTA4MkU1MDAxMDkzRTUwMTAyODBFMTAxMTBBMEUzQzgKKzoxMEExQTAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1QjcKKzoxMEExQjAwMDAwMTA4MkU1MDAxMDkzRTU4MTAxODBFMTAxMTBBMEUzMjkKKzoxMEExQzAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1OTcKKzoxMEExRDAwMDAwMTA4MkU1MDAxMDkzRTUwMTAxODBFMTAxMTBBMEUzODkKKzoxMEExRTAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1NzcKKzoxMEExRjAwMDAwMTA4MkU1MDAxMDkzRTU4MTAwODBFMTAxMTBBMEUzRUEKKzoxMEEyMDAwMDAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMzAwMTA4MkU1NTYKKzoxMEEyMTAwMDAwMTA4MkU1MDAxMDkzRTUwMTAwODBFMTFFRkYyRkUxQjAKKzoxMEEyMjAwMEZDNDY2MDQ3QTQyMTlGRTVBODMxOUZFNUEwMTNBMEUxNkIKKzoxMEEyMzAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1MjQKKzoxMEEyNDAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTIwMTNBMEUxRDkKKzoxMEEyNTAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1MDQKKzoxMEEyNjAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNUEwMTJBMEUxM0EKKzoxMEEyNzAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1RTQKKzoxMEEyODAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTIwMTJBMEUxOUEKKzoxMEEyOTAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1QzQKKzoxMEEyQTAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNUEwMTFBMEUxRkIKKzoxMEEyQjAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1QTQKKzoxMEEyQzAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTIwMTFBMEUxNUIKKzoxMEEyRDAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1ODQKKzoxMEEyRTAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNUEwMTBBMEUxQkMKKzoxMEEyRjAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1NjQKKzoxMEEzMDAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUxM0IKKzoxMEEzMTAwMDAwMTA4M0U1MDExMEEwRTMwMDEwODJFNTAwMTA4MkU1NDMKKzoxMEEzMjAwMDAwMTBBMEUzMDAxMDgyRTUwMDEwODJFNTFFRkYyRkUxN0YKKzoxMEEzMzAwMEZDNDY2MDQ3QTAzMDlGRTUwMTEwQTBFMzAwMTA4M0U1RDQKKzoxMEEzNDAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MkQKKzoxMEEzNTAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTFFRkYyRkUxNjgKKzoxMEEzNjAwMEZDNDY2MDQ3NzAzMDlGRTUwMDEwQTBFMzAwMTA4M0U1RDUKKzoxMEEzNzAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1RkQKKzoxMEEzODAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTFFRkYyRkUxMzgKKzoxMEEzOTAwMEZDNDY2MDQ3MzQyMDlGRTUzQzMwOUZFNTAwMTBBMEUzNzkKKzoxMEEzQTAwMDAwMTA4MkU1MDAxMDgyRTUwMTEwQTBFMzAwMTA4M0U1QjMKKzoxMEEzQjAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1QkQKKzoxMEEzQzAwMDAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTFFRkYyRkUxRjgKKzoxMEEzRDAwMEY4MDAxODQwMDQwMTE4NDAwMDAxMTg0MEZDMDAxODQwMjMKKzoxMEEzRTAwMDgwQjUwMEYwMENGODAwMjczODFDMDBGMDQ3Rjg3ODFDMDYKKzoxMEEzRjAwMDA3MDQzRjBDMEMyRkY3REQ4MEJDMDhCQzE4NDcxRDQ4MzQKKzoxMEE0MDAwMDAyNjgxRDQ5OEI2OUQyMTgwMjYwMDI2NjhBNkE0MzY4MzUKKzoxMEE0MTAwMDlCMTg0MzYwOTM0MjAyRDI4MjY4MDEzMjgyNjBDMjY4MTQKKzoxMEE0MjAwMDBCNkFEMjE4QzI2MDQyNjlDQjY4RDIxODQyNjFDMjY5MTUKKzoxMEE0MzAwMDhCNjhEMjE4QzI2MTAyNjkwQjY5RDIxODAyNjE4MjY5MDUKKzoxMEE0NDAwMDBCNjhEMjE4ODI2MTAyNkJDQjY5RDIxODAyNjM0QTZBMjgKKzoxMEE0NTAwMDQzNkI5QjE4NDM2MzkzNDIwMkQyODI2QjAxMzI4MjYzNDcKKzoxMEE0NjAwMEMyNkI0QjY5RDIxOEMyNjMwMjZDQzk2QTUxMTgwMTY0OEQKKzoxMEE0NzAwMDcwNDcwMDAwQTQyQTAwODAwMDA4MTQ0MDg4QjU2OTQ2OEYKKzoxMEE0ODAwMDAwRjAxN0Y4ODEwODBBRDAwMDIwMDAyOTA3RDkwMDIyMUYKKzoxMEE0OTAwMDgzMDAwMDlGQzA0NkZBNTAwMTMwODg0MkY4RDM4OEJDNDAKKzoxMEE0QTAwMDA4QkMxODQ3MDBCNTAwRjAwNEY4MDAwNDAwMEMwOEJDMTQKKzoxMEE0QjAwMDE4NDcwMDIyMDAyODBBRDAwMTI4MEFEMDAyMjgwQ0QwMTAKKzoxMEE0QzAwMDAzMjgwMkQxMDc0ODFDMjIwODYwMTAxQzcwNDcwNjQ4NjgKKzoxMEE0RDAwMDA0RTAwNjQ4NTAyMjA4NjBGN0U3MDU0ODY4MjIwODYwNTMKKzoxMEE0RTAwMEYzRTcwMDAwMDg4MzIwNDBBNDJBMDA4MDBDMkIwMDgwQTIKKzoxMEE0RjAwMEEwODIyMDQwODBCNDAzMjJDMjgwMTU0QUMwNDY4MjYwRjgKKzoxMEE1MDAwMDE0NEExMjg4MDEzMkMyNjAwMDIwMTM0QTEzNUNDMDQ2MEMKKzoxMEE1MTAwMDBCNzAwMTMwMDEzMTA4MjhGOEQzMjAyMjBBNzAwMTMxNzQKKzoxMEE1MjAwMDAwMjAwRTRCMUY1Q0MwNDYwRjcwMDEzMDAxMzEwODI4MUYKKzoxMEE1MzAwMEY4RDMwQTcwMDEzMTAwMjAwOTRBMTM1Q0MwNDYwQjcwNDEKKzoxMEE1NDAwMDAxMzAwMTMxMDgyOEY4RDMwMDIwMDg3MDgwQkM3MDQ3MjIKKzoxMEE1NTAwMDA4MTAwMDAzNjgwRTAwODA3QzA0MDA4MDg1MDQwMDgwRTEKKzoxMEE1NjAwMDhFMDQwMDgwMDBCNTAxMjMwQTQ4QzExRDg5MzE0QjcwNUIKKzoxMEE1NzAwMDAwMjIwQTcwNjQyMTgwMzBDMTgyMDE4MzQzODM3RDIxREYKKzoxMEE1ODAwMEM5MDA4MTgzQzI4MzA0NDgwMTIyMDAyMTAwRjA4RUZCQjAKKzoxMEE1OTAwMDA4QkMxODQ3NjgwRTAwODBCNTIyRkZGRjAwQjVGRkY3MjIKKzoxMEE1QTAwMEUxRkYxMzQ4MDIyMjAwMjEwMEYwODBGQjAxMjNEODQyODIKKzoxMEE1QjAwMDBBRDExMDQ4QzExRDM5MzFDQTg4MDEzMkNBODA4MTc5NTcKKzoxMEE1QzAwMDAxMzE4MTcxRkRGNzcwRjkwQjQ4QzA2ODAxMjgwNUQxOTAKKzoxMEE1RDAwMDBBNDg3RDIyRDIwMDAwMjEwMEYwNjhGQjA4NDhGQkY3MDIKKzoxMEE1RTAwMEUxRkMwODQ4MjgyMjAwMjEwMEYwNjBGQjA4QkMxODQ3NjUKKzoxMEE1RjAwMDc5MjFGRkZGQTA4MjIwNDA2ODBFMDA4MEE1N0IyMTQwQ0EKKzoxMEE2MDAwMDk1MkNGRkZGNTkwM0ZGRkYwMEI1MTAyMDBGNDlDMDQ2RUUKKzoxMEE2MTAwMDA4NjAwRjRBMEY0ODY0MjFGQkY3QzZGQzBFNDgwMTIyNzAKKzoxMEE2MjAwMDEyMDQwMTY4MEE0MDA4MjEwMDJBMDVEMTAyNjgxMjBDQjAKKzoxMEE2MzAwMDA3RDEwMDY4ODAwQTA0RDMwODQ4QzA0NkMxNjAwOEJDM0UKKzoxMEE2NDAwMDE4NDcwNzQ4QzA0NjAxNjRGOUU3MDAwMDAwMDAwMEIwNjEKKzoxMEE2NTAwMEE1NTVGRkZGN0MyOTAwODAwMDAwMTA0MDQwMDExODAwMzQKKzoxMEE2NjAwMDAwMDAwMDgwRjhCNTI3NDgwMTIyMTIwNDAxNjgwQTQwNjIKKzoxMEE2NzAwMDA3MjEwMDJBMDVEMTAyNjgxMjBDMDZEMTAwNjg4MDBBNjEKKzoxMEE2ODAwMDAzRDMyMTQ4QzA0NkMxNjAwMkUwMjA0OEMwNDYwMTY0QUYKKzoxMEE2OTAwMDFGNDhGQkY3ODdGQzFGNDhDMTZCRkYyOUZDRDE4MTZCNkEKKzoxMEE2QTAwMDQyNkIxNjFDMEYxQzFDNEMxMDIzNjA2OTE4NDM2MDYxMjAKKzoxMEE2QjAwMEExNjk5OTQzMUQwNEExNjFFODYwQTA2OUMwNDYyODYxQjEKKzoxMEE2QzAwMDE2NEExNzQ5NjQyMEZCRjc2RkZDMTY0QUMwNDYwMDkyRjEKKzoxMEE2RDAwMDE1NEIwMDIwMzkxQzMyMUNGQkY3NkVGQzEzNDhDMTY4NzcKKzoxMEE2RTAwMDA4MjlGQ0QxMTI0OEZCRjc1REZDMTAyMzYwNjk5ODQzRjAKKzoxMEE2RjAwMDYwNjFFODYwMDEyMEUzMjMxQjAxRTExOEM4NzFGOEJDMjgKKzoxMEE3MDAwMDA4QkMxODQ3MDAwMDEwNDA0MDAxMTgwMDAwMDAwMDgwRkQKKzoxMEE3MTAwMDA0MDJGRkZGMDAwMTE4NDA2ODBFMDA4MDIwNTVGRkZGNzMKKzoxMEE3MjAwMEI1QjYyMTQwNjQwMDMwMDI0NDgwMjA0MDQwMDExODQwMEEKKzoxMEE3MzAwMEY0MDFGRkZGMDBCNUZERjcwMUZGMDY0OEZCRjczMkZDMEYKKzoxMEE3NDAwMEZERjdENkZFRkVGNzA0RjhGRUY3MTZGOEZFRjcyNEY4M0MKKzoxMEE3NTAwMDA4QkMxODQ3OTEwM0ZGRkY5MEI1RkRGNzZCRkMzNDRGMjEKKzoxMEE3NjAwMDAwMjRGOTY4RjgxRDc5MzAwMTI5MEZEMTMxNDlDMDQ2MUMKKzoxMEE3NzAwMEY5NjczMTQ5QzA0NjAxNjAzMDQ5QzA0NjBDNjA0QzYwMDEKKzoxMEE3ODAwMDhDNjBDQzYwMEM2MTRDNjE4QzYxMDRFMEY5MUQ3RDMxMDIKKzoxMEE3OTAwMEY5NjcxMkMwMDgzODAwNjg2MDIzMDE2ODE5NDMwMTYwMzYKKzoxMEE3QTAwMEY4NkYyMDIzMDE2ODE5NDMwMTYwRjg2RjQwMjMwMTY4QTYKKzoxMEE3QjAwMDk5NDMwMTYwMDBGMDU0RjhGREY3NEVGQzAwRjA1RUY5OUIKKzoxMEE3QzAwMEZERjc3M0Y4RkZGNzBDRkVGREY3MkVGRUZERjdCNkZENjMKKzoxMEE3RDAwMEZERjdDMkZFRkRGNzU0RkRGREY3MEFGREZERjc5NEZEMDAKKzoxMEE3RTAwMDAwRjAxQUZBRkRGNzlDRkZGREY3MEFGRkZERjdEMkZFMTUKKzoxMEE3RjAwMEZERjczQ0ZDRkJGN0RDRkFGRkY3OUNGRjcxMjM1QjAxRTQKKzoxMEE4MDAwMEY4MTgwNDcyNDQ3MjA3MjM1QjAyRjgxODA0NjNGODY4QUUKKzoxMEE4MTAwMDAxMjgwMkQxQTgyMEZFRjdCMUZEMDk0OEMwNDY0NDYyRDQKKzoxMEE4MjAwMDAwRjAxOEZBMDc0OEZCRjdCREZCOTBCQzA4QkMxODQ3QkUKKzoxMEE4MzAwMDY4MEUwMDgwMDAwMTExNDAwNDAxMTE0MDAwMDExMTAwNjgKKzoxMEE4NDAwMEMwMDAxODAwMTU4RjIxNDAwMEI1MDQ0OEZCRjdBQUZCOTMKKzoxMEE4NTAwMEZERjc1RUZGRkRGNzI0RkMwOEJDMTg0NzE1OTkyMTQwNjEKKzoxMEE4NjAwMEZBMjEwMzQ4QzA0NjQxNjI0MDIxNDE2MjcwNDcwMDAwMUUKKzoxMEE4NzAwMEMwMDAxODAwMDc0ODQxNjkwNzRCMTk0MzQxNjE4MjY5Q0MKKzoxMEE4ODAwMDlBNDM4MjYxMDEyMjEyMDVEMTYwODA2OUMwNDYxMDYxM0QKKzoxMEE4OTAwMDcwNDcwMDAwNjgwRTAwODBGRUFGOUExMDAwQjUwMjQ4QjUKKzoxMEE4QTAwMEZCRjc4MEZCMDhCQzE4NDdDODU3RkZGRkYwQjUyNDRDRTYKKzoxMEE4QjAwMDAxMjEwOTA0MjA2ODAxNDAwOTIwMjI0RTIyNEQwMDI5NkYKKzoxMEE4QzAwMDA1RDEyMTY4MDkwQzA0RDEyMTY4ODkwQTAxRDNGMDYwRkYKKzoxMEE4RDAwMDAwRTAyODY0MUQ0OEZCRjc2NUZCMUQ0RjFENDk4ODY5OTIKKzoxMEE4RTAwMDAxMzA4ODYxMzg3QTAwMjgwMkQxNzg3QTAwMjgxRkQwOTgKKzoxMEE4RjAwMDE5NDhGQkY3NTdGQjE5NDhGQkY3NTRGQjAwMjhGQUQxMUUKKzoxMEE5MDAwMDM4N0EwMDI4MDJEMDE2NDhGQkY3NENGQjAxMjEwOTA0RDUKKzoxMEE5MTAwMDIwNjgwMTQwMTQyMDAwMjkwNUQxMjE2ODA5MEMwNEQxQzgKKzoxMEE5MjAwMDIxNjg4OTBBMDFEM0YwNjAwMUUwMjg2NEZGRTdGRUU3QUYKKzoxMEE5MzAwMEZGRjc2NUZEMEI0OEZCRjczNUZCRkZGN0FGRkZDREU3RjIKKzoxMEE5NDAwMDAwMDAxMDQwNDAwMTE4MDAwMDAwMDA4MDA0MDJGRkZGREEKKzoxMEE5NTAwMDg4MUMwMDgwMDg4MzIwNDBGNDAxRkZGRkI1MDdGRkZGM0IKKzoxMEE5NjAwMDAwMDBGRkZGOTk5RjIxNDAwMDIwMDc0QTAxMjEwOTA1QUYKKzoxMEE5NzAwMDUwNjFDODYwRDA2MUM4NjEwMzIzREIwNDAzNEEwMTIxMzAKKzoxMEE5ODAwMEQxNjM1ODYwRkNFNzAwMDA2ODBFMDA4MEMwMDAxODAwMkEKKzoxMEE5OTAwMDgwQjVDMEIwMDEyMjAwMjEwQTIwRkNGN0QxRkYwNzFDQkUKKzoxMEE5QTAwMEZGMkYyOEQwNjk0NkZGMjIzODFDMDEzMkZERjc1NEY5RTkKKzoxMEE5QjAwMEZGMjMwMTMzOTg0MjFCRDEwRDk4MDAwOTE4RDMzODFDOEUKKzoxMEE5QzAwMEZERjc4REY4MEU0OTAxMjIxMjA0MDg2ODAyNDAwRDQ4NzcKKzoxMEE5RDAwMDA1RDEwQTY4MTIwQzA2RDEwOTY4ODkwQTAzRDMwQTQ5MEQKKzoxMEE5RTAwMEMwNDZDODYwMDJFMDA5NDlDMDQ2MDg2NEZGRjdCQ0ZGRTIKKzoxMEE5RjAwMDM4MUNGREY3NzRGODQwQjA4MEJDMDhCQzE4NDcwMDAwNTQKKzoxMEFBMDAwMDAwMDAxMDQwMDc4MDAwMDA0MDAxMTgwMDAwMDAwMDgwOTYKKzoxMEFBMTAwMDAwQjUxNzQ5MDEyMjEyMDQwODY4MDI0MDA2MjAwMDJBRTYKKzoxMEFBMjAwMDA1RDEwQTY4MTIwQzA2RDEwOTY4ODkwQTAzRDMxMTQ5QjUKKzoxMEFBMzAwMEMwNDZDODYwMDJFMDEwNDlDMDQ2MDg2NDAzMjBGRUY3MjMKKzoxMEFBNDAwMEQzRkNGQkY3MERGRjAxMjMxODQzRkJGN0U3RkZGRkY3RUMKKzoxMEFBNTAwMDgzRkVGRkY3OURGRkZGRjcwNUZFRkZGN0Y1RkVGRkY3MEIKKzoxMEFBNjAwMDA5RkZGRkY3OUJGREZGRjcyMUZGMDhCQzE4NDcwMDAwMTcKKzoxMEFBNzAwMDAwMDAxMDQwNDAwMTE4MDAwMDAwMDA4MEYwQjQ0NjRBNzkKKzoxMEFBODAwMDAxMjFDOTAzNDU0RDE5MjNEQjAxRUMxOEExNjEyODg4NzgKKzoxMEFBOTAwMDQwMDQ0MzRCQzAxODg3MUEwNDIwQUY2MDQxNEVDMDQ2QTMKKzoxMEFBQTAwMEIwNjEwODIwQzgyMzQzNDNCQjQyMjFEOTQxMDAzRDRFMzkKKzoxMEFBQjAwMEMwNDYzMTYxQjY2OTIwMjM5QjFCM0E0RUMwNDZGMzYxMDQKKzoxMEFBQzAwMDEwM0IzMzYyOEIwMEZGMUE0MDA4ODE0MjE3RDNCODIzMzIKKzoxMEFBRDAwMDQzNDNCQjQyMDhEOTQxMUUzMjRCQzA0Njk5ODFEOTgxQkMKKzoxMEFBRTAwMDQwMDAwMjM4NTg2MTBBRTAwMTMwODE0MkVGRDIwNkUwQUUKKzoxMEFBRjAwMDJDNEVCMzY5MDEzM0IzNjE0MDAwODg0MkQyRDkyQTQ5NTAKKzoxMEFCMDAwMDAwMjBBMzY5OUIwODA3RDAyODRCODcwMENCNTFBNzY5NzkKKzoxMEFCMTAwMEJGMDgwMTMwODc0MkY4RDgyMjQ5QzA0NjhBNjI4Qzg5MzIKKzoxMEFCMjAwMDU4MjA2MDQzODcxODAwMjAwMDIyMDAyQzBBREQ1ODIzOUIKKzoxMEFCMzAwMDQzNDM4QzZBRTMxODAxMzAwMDA0MDAwQzlBNjA4Qjg5NEYKKzoxMEFCNDAwMDgzNDJGNERDQ0Y2MkNDODk2MDAwMDAxOTQwMDFDNzE5NTAKKzoxMEFCNTAwMDAwMjAwMDJDMEJERDQzMDAxQjE4NUIwMUNDNkFFMzE4QkUKKzoxMEFCNjAwMDAxMzAwMDA0MDAwQzlBNjBDQjg5ODM0MkYzREM0RjYyMTEKKzoxMEFCNzAwMDAwMjAwQjY5MDAyQjA3RDk4NzAwNEI2QUMwNDZEQTUxQzkKKzoxMEFCODAwMDBCNjkwMTMwODM0MkY3RDg0OTZBODAwMDA4MTgwNDM4RkQKKzoxMEFCOTAwMDI4NjFGMEJDNzA0NzAwMDBCMEJFMjE0MDY4MEUwMDgwMDQKKzoxMEFCQTAwMDAwMDAyMDQwNEMyQTAwODAwMDAwMjA0MDAwQURERTAwNjQKKzoxMEFCQjAwMDBBNDgwMTIzMUIwNjQxNjk5OTQzMUEwOTQxNjFEMTYwODIKKzoxMEFCQzAwMDAwMjFBMTIyNTIwMzkxNjExQjIzREIwMUMwMTg4MTYxODYKKzoxMEFCRDAwMDAxMjAwMDA2NTkwNTA4NjA3MDQ3MDAwMDY4MEUwMDgwREIKKzoxMEFCRTAwMDgwQjQwMjFDMEI0ODFCMjNEQjAxQzMxODlBNjEwMTIzQUMKKzoxMEFCRjAwMDFCMDY0MjY5MUE0MzQyNjE4NzY5OUY0MzAxMjMxQjA1NzMKKzoxMEFDMDAwMDg3NjFEQTYwODA2OUMwNDYxODYxQTEyMDQwMDM4MTYxRDQKKzoxMEFDMTAwMDgwQkM3MDQ3NjgwRTAwODA4MEI1RkZGN0M5RkYwMDIwMzgKKzoxMEFDMjAwMDAwRjAyMEY4MDAyMDA5NDkwMDIyMDMwMTVGMTgzMzIzQjcKKzoxMEFDMzAwMDlCMDFGQjE4OUE2MjAxMzAwQjI4RjZEMzA0NDgwMTIyQ0QKKzoxMEFDNDAwMDAwMjEwMEYwMzNGODgwQkMwOEJDMTg0NzY4MEUwMDgwNzMKKzoxMEFDNTAwMDFEM0VGRkZGMDBCNTAyNDgwMEYwMDRGODA4QkMxODQ3OEQKKzoxMEFDNjAwMEE4NjEwMDAwODBCNDAxMjIxMjA1MEY0QkExMjE0OTAzMDUKKzoxMEFDNzAwMDAwMjgwRUQwQzg2MTE4MUM1OTY5NTMwMTE5NDM0MTYxNUQKKzoxMEFDODAwMDg3Njk5RjQzODc2MUQxNjA4MDY5QzA0NjEwNjE4MEJDM0QKKzoxMEFDOTAwMDcwNDcxODFDNUY2OTAxMjM1QjA2OUY0MzQ3NjFENzYwQkIKKzoxMEFDQTAwMDAwMjBDODYxRjNFNzAwMDA2ODBFMDA4MEIwQjQwNzFDMDQKKzoxMEFDQjAwMDAwMjAxNzRDMDMwMTFEMTkzMzIzOUIwMUVCMTg5RDZBREIKKzoxMEFDQzAwMEJENDIwNUQxMUQ2Qjk1NDIwMkQxREI2QThCNDIxQ0QwN0YKKzoxMEFDRDAwMDAxMzAwQjI4RUVEMzAwMjAwMzAxMUQxOTMzMjM5QjAxMDMKKzoxMEFDRTAwMEVCMTg5QjZBMDAyQjA5RDEwMzAxMUMxOTMzMjM5QjAxMkMKKzoxMEFDRjAwMEUzMTgxQTYzRDk2MjVBNjM5RjYyMDJFMDAxMzAwQjI4OUQKKzoxMEFEMDAwMEVBRDMwQjI4MDFEMTAwMjBDMDQzQjBCQzcwNDcwMDAwM0IKKzoxMEFEMTAwMDY4MEUwMDgwOTBCNDAxMUMwMDIyMDEyMDE2NEYwMUUwNTMKKzoxMEFEMjAwMDAwMkEwN0QxMDMwMURDMTkzMzIzOUIwMUUzMTg5QjY5MzcKKzoxMEFEMzAwMDhCNDIxMUQxMDIwMUQyMTkzMzIzOUIwMUQyMTg5MzZBOUQKKzoxMEFENDAwMEMwNDY5MzYxRDM2QUMwNDZEMzYxMTM2QkMwNDYxMzYyOTkKKzoxMEFENTAwMDUzNkJDMDQ2NTM2MjAxMjIwMTMwMEIyOEUwRDMwNzRCRUUKKzoxMEFENjAwMDAwMkEwMkQxOUE2ODhBNDIwM0QxMDAyMTk5NjA5MEJDREUKKzoxMEFENzAwMDcwNDcwMDIwQzA0M0ZBRTc2ODBFMDA4MEU4MUIwMDgwOUYKKzoxMEFEODAwMDBCMjgxN0RBMEM0OTAxMjM1QjA2OEE2OTEzNDMwMTIyNTkKKzoxMEFEOTAwMDEyMDU4QjYxMTM2MTAwMDE0MDE4MzMyMzlCMDFDMDE4MTkKKzoxMEFEQTAwMDAzNkJDMDQ2NDM2MzUzMDE4ODY5OTg0Mzg4NjExMDYxMEYKKzoxMEFEQjAwMDAxMjA3MDQ3MDAyMEZDRTc2ODBFMDA4MDkwQjQwODRBMkMKKzoxMEFEQzAwMEQwNjkwMDIxMDc0RkQzNjk4MzQyMDJEOUZDMUEyMDE4QTkKKzoxMEFERDAwMDAwRTBDMDFBMDkxODE4MUNCOTQyRjREOTkwQkM3MDQ3OTkKKzoxMEFERTAwMDAwMjAxNDQwQTg2MTAwMDA5MEI1MDcxQzAwMjQwMDJGMkIKKzoxMEFERjAwMDA0RDNGRkY3RTNGRjAxMzRCQzQyRkFEOTkwQkMwOEJDOEUKKzowNEFFMDAwMDE4NDcwMDAwRUYKKzowMDAwMDAwMUZGCisvKiB2ZXIgMDMuMDAxLjAwOCAqLworLyoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDQgM0NvbSBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiB0aGUgM2M5OTBpbWcuaAorICogbWljcm9jb2RlIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgM0NvbSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgM0NPTSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgUFVSQ0hBU0UgT1IgVVNFIE9GIFRIRSAzYzk5MGltZy5oCisgKiBNSUNST0NPREUgU09GVFdBUkUgV0lMTCBOT1QgQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZCisgKiBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SIE9USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUworICogKFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpCisgKiBFTUJPRElFRCBJTiBBTlkgT1RIRVIgM0NPTSBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCisgKiBDT01CSU5BVElPTiBXSVRIIFRIRSAzYzk5MGltZy5oIE1JQ1JPQ09ERSBTT0ZUV0FSRQorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDQ2NjEwNmYuLmM2YWY2MWIgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0zNSw3ICszNSw3IEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX0NPTVBVVE9ORSkgKz0gaW50ZWxsaXBvcnQyLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DSEVMU0lPX1QzKSArPSBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluIFwKIAkJCQkgICBjeGdiMy90M2NfcHNyYW0tMS4xLjAuYmluIFwKLQkJCQkgICBjeGdiMy90M2Z3LTcuMC4wLmJpbgorCQkJCSAgIGN4Z2IzL3QzZnctNy4xLjAuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9UVFVTQl9CVURHRVQpICs9IHR0dXNiLWJ1ZGdldC9kc3Bib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRTEwMCkgKz0gZTEwMC9kMTAxbV91Y29kZS5iaW4gZTEwMC9kMTAxc191Y29kZS5iaW4gXAogCQkJICAgICBlMTAwL2QxMDJlX3Vjb2RlLmJpbgpAQCAtNDksOCArNDksMTAgQEAKIAkJCQkgICAgIHNiMTYvaW1hX2FkcGNtX2NhcHR1cmUuY3NwCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9ZTUZQQ0kpICs9IHlhbWFoYS9kczFfY3RybC5mdyB5YW1haGEvZHMxX2RzcC5mdyBcCiAJCQkJICAgeWFtYWhhL2RzMWVfY3RybC5mdworZnctc2hpcHBlZC0kKENPTkZJR19URUhVVEkpICs9IHRlaHV0aS9iZHguYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1RJR09OMykgKz0gdGlnb24vdGczLmJpbiB0aWdvbi90ZzNfdHNvLmJpbiBcCiAJCQkgICAgICAgdGlnb24vdGczX3RzbzUuYmluCitmdy1zaGlwcGVkLSQoQ09ORklHX1RZUEhPT04pICs9IDNjb20vdHlwaG9vbi5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfVVNCX0RBQlVTQikgKz0gZGFidXNiL2Zpcm13YXJlLmZ3IGRhYnVzYi9iaXRzdHJlYW0uYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1VTQl9FTUkyNikgKz0gZW1pMjYvbG9hZGVyLmZ3IGVtaTI2L2Zpcm13YXJlLmZ3IFwKIAkJCQkgIGVtaTI2L2JpdHN0cmVhbS5mdwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IDUyNDExM2YuLjAwYjZlM2MgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTM2OCw3ICszNjgsNyBAQAogCiBGaWxlOiBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluLmloZXgKIEZpbGU6IGN4Z2IzL3QzY19wc3JhbS0xLjEuMC5iaW4uaWhleAotZmlsZTogY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleAorZmlsZTogY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleAogCiBMaWNlbnNlOiBHUEx2MiBvciBPcGVuSUIub3JnIEJTRCBsaWNlbnNlLCBubyBzb3VyY2UgdmlzaWJsZQogCkBAIC00MzUsMyArNDM1LDYxIEBACiAgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IFRFSFVUSSAtIFRlaHV0aSBOZXR3b3JrcyAxMEcgRXRoZXJuZXQKKworRmlsZTogdGVodXRpL2JkeC5iaW4KKworTGljZW5jZToKKworIENvcHlyaWdodCAoQykgMjAwNyBUZWh1dGkgTmV0d29ya3MgTHRkLgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgYWNjb21wYW55aW5nIGl0LgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IFRZUEhPT04gLSAzY3I5OTAgc2VyaWVzIFR5cGhvb24KKworRmlsZTogM2NvbS90eXBob29uLmJpbgorCitMaWNlbmNlOgorLyoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDQgM0NvbSBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiB0aGUgM2M5OTBpbWcuaAorICogbWljcm9jb2RlIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgM0NvbSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgM0NPTSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgUFVSQ0hBU0UgT1IgVVNFIE9GIFRIRSAzYzk5MGltZy5oCisgKiBNSUNST0NPREUgU09GVFdBUkUgV0lMTCBOT1QgQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZCisgKiBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SIE9USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUworICogKFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpCisgKiBFTUJPRElFRCBJTiBBTlkgT1RIRVIgM0NPTSBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCisgKiBDT01CSU5BVElPTiBXSVRIIFRIRSAzYzk5MGltZy5oIE1JQ1JPQ09ERSBTT0ZUV0FSRQorICovCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2MTE3OS4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTg4MSArMCwwIEBACi06MTAwMDAwMDA2MDAwNzQwMDIwMDM4MDAwMjAwMzcwMDAwMDAwMTAwMEQ2Ci06MTAwMDEwMDAwMDAwMjAwMEUxMDAwMjg0MDAwNzAwMDBFMTAwMDI4OEU3Ci06MTAwMDIwMDAwMDAxMDAwMEUwMDAwMDAwRTAwMDAwQTAwMTAwMDAwMDZFCi06MTAwMDMwMDA0NDQ0NDQ0MEUzMDAwMTgzMjAwMjAwMDAyMDAxRTAwMDJBCi06MTAwMDQwMDAyMDAxRkYxMDFGRkZEMDAwMUZGRkMwMDBFMzAwMDQzQzkxCi06MTAwMDUwMDAwMjAwMDAwMDIwMDA2OTU0MUZGRkM1ODAyMDAwNjk5QzM5Ci06MTAwMDYwMDAxRkZGQzU4NDIwMDA2OURDMUZGRkM1ODgyMDAwNkE1MDdGCi06MTAwMDcwMDAxRkZGQzU4QzIwMDAwM0MwQzAwMDAwRTQzMTAwRUEzMTNFCi06MTAwMDgwMDAwMEExMzEwMEEwMzEwMzAyMDAwMkVEMzA2RTJBMDUwMDBDCi06MTAwMDkwMDBFRDMxMDAwMjAwMDIxNjAwMTJGRkRCQzAzMDE0RkZEQTVGCi06MTAwMEEwMDBEMzBGRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzQ3Ci06MTAwMEIwMDAwRkQzMEZEMzBGMTJGRkQ1MjMwQTAwMjQwQTAwRDMwRjRBCi06MTAwMEMwMDBEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzMEZEMzI3Ci06MTAwMEQwMDAwRkQzMEYxNEZGQ0UwMzQyMUYxNEZGQ0IwMzQyMUYxMjk2Ci06MTAwMEUwMDBGRkNDQzAzMDJEMzczMDJEMzczNDJEMzczODJEMzczQ0VECi06MTAwMEYwMDAyMzNEMDE3MjMzRUQwMDAyMDAxMkZGQzRDMDMwMkYzN0UwCi06MTAwMTAwMDAwMDJGMzcxMDJGMzcyMDJGMzczMDIzM0QwMTcyMzNFRDZBCi06MTAwMTEwMDAwMDAyMDAxMkZGQkVDMDMwMjczNzAwMjczNzEwMjczN0Y0Ci06MTAwMTIwMDAyMDI3MzczMDIzM0QwMTcyMzNFRDAzMDIwMDEyRkZCOTVGCi06MTAwMTMwMDAxM0ZGQkEwQzAyMDA5MzIwMTJGRkI5MTNGRkI5MEMwMjhGCi06MTAwMTQwMDAwMDkzMjAxMkZGQjhDMDMxOTMyMDgyMjAxMkZGQjcxMzEyCi06MTAwMTUwMDBGRkI3OTMyMDEyRkZCNzE1RkZCMzE2RkZCNkMwMzBENzE1Ci06MTAwMTYwMDAyMDA1NjYwMTYwMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTAwMTcwMDAwNDM2MDUwMDAyMDBEMzBGRDMwRjc1MzExNDA3NDcxNDVFCi06MTAwMTgwMDAwNTMzMEMwNzA0NDM3NjMxRTYwNDM2MDU3NTM5RUQwMDc2Ci06MTAwMTkwMDAwMjAwMTJGRkE3MTVGRkEzQzAzMEQ3MjA2MDAwMDYwMEExCi06MTAwMUEwMDAwNzQ3MTQwNTMzMEMwNzA0NDMwNDNFMDU3NTM5RjAwMzczCi06MTAwMUIwMDAwMjAwMTJGRkExQzAzMDE0RkZBMUQzMEZEMzBGRDMwRjQxCi06MTAwMUMwMDA5MzQwQjQ0NDcyNDlGMkQzMEZEMzBGRDMwRjE0RkY5QjYzCi06MTAwMUQwMDA4MzQwMTRGRjlCODM0MDEyRkY5QjIzMEEwMDE0RkY5QTY1Ci06MTAwMUUwMDBEMzBGRDMwRkQzMEY5MzQwQjQ0NDcyNDlGMkQzMEZEMzNDCi06MTAwMUYwMDAwRkQzMEYxNEZGOTU4MzQwMTJGRjk1Q0EyMDgzMjA4NEVDCi06MTAwMjAwMDAyMTg1MjJCQzIyNzQzQjEwODY1MEI0NTU5NjMwQjQzM0ZECi06MTAwMjEwMDA3NDMzRjQ2M0ZGRTYwMDAwMDA2NTNGRTA2NTVGREQxMkM0Ci06MTAwMjIwMDBGRjdDQzAzMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0Q0NGCi06MTAwMjMwMDAyMzNEMDE3MjMzRUQwMzAyMDAwMDAyMDAxMkZGN0FDMDc5Ci06MTAwMjQwMDAzMjAzMkUwNTAzMDIwMDEyRkY3ODEzRkY4MTkzMjBDMEIyCi06MTAwMjUwMDAxMTAxNDkzMTAwNDgzMTAxMDIwMEMwMDAxNEZGN0UwNDQxCi06MTAwMjYwMDBEMjMxMTVGRjdEOTQ1MDE0RkY3RDA0RDMzMTE1RkY3Q0VFCi06MTAwMjcwMDA5NDUwMTRGRjdDMDRENDMxMTVGRjdDMjQ1NjAwMTRGRkU1Ci06MTAwMjgwMDA3QjA0RDUzMTE1RkY3QjI0NTYwMDEwRkY3QTAzMDAwMDU0Ci06MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTAwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTAwMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTAwMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTAwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTAwMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTAwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTAwM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTAwM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTAwM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTAwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTAwNDIwMDA2M0ZGRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMEExCi06MTAwNDQwMDAxRkZDMDAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEFCCi06MTAwNDUwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBFMzAwMDVDODA2Ci06MTAwNDYwMDAxRkZGQzAwMDFGRkZDMDAwRTMwMDA1QzgxRkZGQzAwMDQyCi06MTAwNDcwMDAxRkZGQzAxOEUzMDAwNUM4MUZGRkMwMTgxRkZGQzAxOEVBCi06MTAwNDgwMDBFMzAwMDVFMDFGRkZDMDE4MUZGRkMyODhFMzAwMDVFMDdFCi06MTAwNDkwMDAxRkZGQzI4ODFGRkZDMjg4RTMwMDA4NTAxRkZGQzI5MEUxCi06MTAwNEEwMDAxRkZGQzU3Q0UzMDAwODUwMjAwMDAwMDAyMDAwMDE2QTA3Ci06MTAwNEIwMDBFMzAwMEIzQzIwMDAwMTgwMjAwMDAxODBFMzAwMENBODM5Ci06MTAwNEMwMDAyMDAwMDIwMDIwMDAwMjAzRTMwMDBDQTgyMDAwMDIxQzEwCi06MTAwNEQwMDAyMDAwMDIyMEUzMDAwQ0FDMjAwMDAyMjAyMDAwMDIyNkI1Ci06MTAwNEUwMDBFMzAwMENCMDIwMDAwMjNDMjAwMDAyNDBFMzAwMENCODA2Ci06MTAwNEYwMDAyMDAwMDI0MDIwMDAwMjQ5RTMwMDBDQkMyMDAwMDI0QzE2Ci06MTAwNTAwMDAyMDAwMDI1MEUzMDAwQ0M4MjAwMDAyNTAyMDAwMDI1OUQ1Ci06MTAwNTEwMDBFMzAwMENDQzIwMDAwMjVDMjAwMDAyNjBFMzAwMENEODU5Ci06MTAwNTIwMDAyMDAwMDI2MDIwMDAwMjY5RTMwMDBDREMyMDAwMDI2QzY1Ci06MTAwNTMwMDAyMDAwMDI3MEUzMDAwQ0U4MjAwMDAyNzAyMDAwMDI3OTI1Ci06MTAwNTQwMDBFMzAwMENFQzIwMDAwMjhDMjAwMDAyOENFMzAwMENGODhECi06MTAwNTUwMDAyMDAwMDI5MDIwMDAwMjkzRTMwMDBDRjgyMDAwMDJBQzdGCi06MTAwNTYwMDAyMDAwMDJCMEUzMDAwQ0ZDMjAwMDAyRDAyMDAwMDJGMkM4Ci06MTAwNTcwMDBFMzAwMEQwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQyNEQxCi06MTAwNTgwMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMjQyMDAwMDNCMERFCi06MTAwNTkwMDAyMDAwMDNCMEUzMDAwRDI0MjAwMDAzQjAyMDAwMDNCMENFCi06MTAwNUEwMDBFMzAwMEQyNDIwMDAwM0IwMjAwMDZCNzRFMzAwMEQyNDUxCi06MTAwNUIwMDAyMDAwNkI3NDIwMDA2Qjc0RTMwMDc0RTgwMDAwMDAwMEZFCi06MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDAxRkZDMDAwMEY1Ci06MTAwNUQwMDAxRkZGQzU4MDFGRkZDNjcwMjAwMDZCNzgyMDAwNkI3ODVFCi06MTAwNUUwMDBERUZGRkUwMDAwMDAwODBDREVBREJFRUYxRkZGQzI5MDc0Ci06MTAwNUYwMDAxRkZDRkUwMDFGRkZDMDg0MUZGRkM1QzAzMDAwMDAwMEFECi06MTAwNjAwMDAwMDNGRkZGRjgwNDAwMDAwMTAwMDAwMDAwODBGRkZGRkM4Ci06MTAwNjEwMDAxRkZGQzI1RDAwMEZGRkZGODA0RkZGRkY4MDAwMDAwMDQzCi06MTAwNjIwMDAwMDAwMDg4MEIwMDAwMDA1NjA1MDAwMDA2MDAwMDAwMDdECi06MTAwNjMwMDA0MDAwMDAxMTM1MDAwMDAwNDEwMDAwMDAxMDAwMDAwMUUyCi06MTAwNjQwMDAyMDAwMDAwMDAwMDAxMDAwN0ZGRkZGRkY0MDAwMDAwMEJFCi06MTAwNjUwMDAwNTAwMDAwMDgwMDAwMDE5MDQwMDAwMDAwMDAwMDgwMEYwCi06MTAwNjYwMDAxMDAwMDAwNTgwNjAwMDAwNzAwMDAwMDAyMDAwMDAwOUZDCi06MTAwNjcwMDAwMDFGRjgwMDgwMDAwMDFFQTAwMDAwMDBGODAwMDAwMDJECi06MTAwNjgwMDAwODAwMDAwMDA3RkZGRkZGMTgwMDAwMDAwMTAwODAwMUM0Ci06MTAwNjkwMDA0MjAwMDAwMDFGRkZDMjBEMUZGRkMwQ0MwMDAxMDA4MDAwCi06MTAwNkEwMDA2MDQwMDAwMDFBMDAwMDAwMEMwMDAwMDAwMDAwMzAwMDU0Ci06MTAwNkIwMDA2MDAwMDgwMDgwMDAwMDFDMDAwMTAwMDA4MDAwMDAxQTlCCi06MTAwNkMwMDA4MDAwMDAxOEZDMDAwMDAwODAwMDAwMDEwMDAwNDAwMEQ1Ci06MTAwNkQwMDA4MDAwMDQwMDAzMDAwMDAwNTAwMDAwMDNGRkZGQkZGRjg0Ci06MTAwNkUwMDAwMDAwMEZGRjFGRkZDMzkwRkZGRkYwMDAwMDAwMTZEMEI3Ci06MTAwNkYwMDAwMDAwRkZGN0E1MDAwMDAwMUZGRkM0QTAxRkZGQzQ1MUFBCi06MTAwNzAwMDAwMDAxMDAwODAwMDAwQjIwMjAyRkZGODAxRkZGQzQ0NUMwCi06MTAwNzEwMDAwMDAwMkMwMEZGRkVGRkY4MDBGRkZGRkYxRkZGQzU2ODcxCi06MTAwNzIwMDAwMDAwMjAwMEZGRkZERkZGMDAwMEZGRUYwMTAwMTEwMENECi06MTAwNzMwMDAxRkZGQzQ2MTFGRkZDM0MyMUZGRkM0MTAxRkZGQzU5MDZFCi06MTAwNzQwMDBGRkZGRUZGRjAwMDBGRkZCMUZGRkJFOTBGRkZGRjdGRjYzCi06MTAwNzUwMDAxRkZGQzA1NDAwMDBGRkZEMDAwMUZCRDAxRkZGQzVCMDBDCi06MTAwNzYwMDAxRkZGQzY2MDFGRkZDNTkxRTBGRkZFMDAwMDAwODAwMDc0Ci06MTAwNzcwMDAxRkZGQzUyQzFGRkZDNUI0MUZGRkMwNTgxRkZGQzREMEVCCi06MTAwNzgwMDAxRkZDRkZEODAwMDEwMDgxRTEwMDA2MDAwMDAwMjcxMEQ3Ci06MTAwNzkwMDAxRkZDRkUzMDFGRkNGRTcwRTEwMDAyMDAxRkZGQzUyODk5Ci06MTAwN0EwMDAxRkZGQzU0MDAwMDNEMDkwMUZGRkM1NTQyQjUwNjM4MDJFCi06MTAwN0IwMDAyQjUwNzk4MDJCNTA5MDgwMkI1MEE2ODAxRkZGQzQ1OTVFCi06MTAwN0MwMDAwMTAwMTEwRjIwMkZGRTAwMjAzMDAwODAyMDJGRkYwMDlECi06MTAwN0QwMDAwMDAwRkZGRjAwMDFGRkY4MkI1MEIyMDAyQjUwQjIwOEMxCi06MTAwN0UwMDAwMDAxMDAxMDJCNTBCMTgwMkI1MEIyODAyQjUwQkEwMDZBCi06MTAwN0YwMDAwMDAxMDAxMTJCNTBCRDI4MkI1MEJDODAyQjUwQkRBMEY4Ci06MTAwODAwMDAyMDMwMDAwMERGRkZGRTAwNTAwMDAwMDIwMEMwMDAwMEFBCi06MTAwODEwMDAwMjAwMDAwMEZGRkZGN0Y0MUZGRkMwNUMwMDBGRjgwMEFDCi06MTAwODIwMDAwNDQwMDAwMDAwMTAwMDAwMEM0MDAwMDAxQzQwMDAwMENDCi06MTAwODMwMDBFMDAwMDBBMDFGRkZDNTMwMUZGRDAwMDgxRkZGQzU0NERBCi06MTAwODQwMDAxRkZGQzU1ODFGRkZDNTZDRTEwMDA2OTBFMTAwMDZFQ0Q0Ci06MTAwODUwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTAwODYwMDAyMDEwMDA0MDIwMTAwMDQwMjAxMDAwNDAyMDE0MDA4MDg0Ci06MTAwODcwMDAyMDBDMDAwMDIwMEMwMDAwMjAwQzAwMDAyMDEwMDA0MDg0Ci06MTAwODgwMDAyMDE0MDA4MDIwMTQwMDgwMjAxNDAwODAyMDE4MDBDMDU0Ci06MTAwODkwMDAyMDFDMDEwMDIwMUMwMTAwMjAxQzAxMDAyMDIwMDE0MDIwCi06MTAwOEEwMDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzAyMDFDMDEwMDIzCi06MTAwOEIwMDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzAyMDFDMDEwMDEzCi06MTAwOEMwMDAyMDIwMDE0MDIwMjAwMTQwMjAyMDAxNDAyMDIwMDk0MDFDCi06MTAwOEQwMDAyMDIwMDk0MDIwMjAwOTQwMjAyMDA5NDAyMDI0MDk4MEIwCi06MTAwOEUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDE0Ci06MTAwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTAwOTAwMDAyMDAwNTI1NDIwMDA1MTI0MjAwMDUyNTQyMDAwNTI1NDAwCi06MTAwOTEwMDAyMDAwNTA2MDIwMDA1MDYwMjAwMDUwNjAyMDAwNEU5NDY1Ci06MTAwOTIwMDAyMDAwNEU5NDIwMDA0RThDMjAwMDRERkMyMDAwNENBMDU2Ci06MTAwOTMwMDAyMDAwNEE4ODIwMDA0ODg4MDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAwOTQwMDAyMDAwNTIyNDIwMDA1MEYwMjAwMDUxOTQyMDAwNTE5NEE3Ci06MTAwOTUwMDAyMDAwNEYzODIwMDA0RjM4MjAwMDRGMzgyMDAwNEYzOEZCCi06MTAwOTYwMDAyMDAwNEYzODIwMDA0RTg0MjAwMDRGMzgyMDAwNEJDNDE4Ci06MTAwOTcwMDAyMDAwNEEzQzIwMDA0ODM4MDAwMDAwMDAwMDAwMDAwMDMxCi06MTAwOTgwMDAyMDAwMEI3MDIwMDAzODRDMjAwMDA0QzAyMDAwNDQyQ0I0Ci06MTAwOTkwMDAyMDAwMEI2ODIwMDAzRjQwMjAwMDAzRjAyMDAwNDNFQ0MzCi06MTAwOUEwMDAyMDAwNDgxNDIwMDAzQzUwMjAwMDNCNkMyMDAwMzdDODM5Ci06MTAwOUIwMDAyMDAwMzY1NDIwMDAzM0NDMjAwMDJFRjgyMDAwMzlDQzAzCi06MTAwOUMwMDAyMDAwMkI1QzIwMDAyNzk0MjAwMDY0OEMyMDAwMjMyMDMyCi06MTAwOUQwMDAyMDAwMjAwNDIwMDAxRkI4MjAwMDFDQTQyMDAwMTdCMDE1Ci06MTAwOUUwMDAyMDAwMTRGMDIwMDAwRDhDMjAwMDBCQjQyMDAwMTBCQzVGCi06MTAwOUYwMDAyMDAwMTJBMDIwMDA0MTMwMjAwMDNDMDQyMDAwMEI3ODkxCi06MTAwQTAwMDAyMDAwMDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTAwQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTAwQTgwMDAwMDAwMDAwMDMyNjQwMDAwMDAwMDAwMDAzMjY0MDAwMDNBCi06MTAwQTkwMDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDM2Ci06MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTAwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMEY2Ci06MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTAwQjAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAwQjEwMDAwMDAwMDAwMDAwNDMyMzgwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDOTQwMUM0Ci06MTAwQjQwMDA1RDk0MDI1RTk0MDM1Rjk0MDA0MzAwMDAwMDAwMDAwMDg3Ci06MTAwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDOTAwMTg4Ci06MTAwQjgwMDA1RDkwMDI1RTkwMDM1RjkwMDA1MzAwMDAwMDAwMDAwMDQzCi06MTAwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDOTQwMDA1Ci06MTAwQkMwMDAxRDkwMDE5RDk0MDI5RTk0MDM5Rjk0MDQwODk0MDUwOTJFCi06MTAwQkQwMDA5NDA2MEE5NDA3MEI5NDAwNDMwMDAwMDAwMDAwMDAwMEY0Ci06MTAwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTAwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDOTAwMUM4Ci06MTAwQzAwMDA5RDkwMDI5RTkwMDcxRDkwMDM5RjkwMDQ3ODkwMDU3OTE3Ci06MTAwQzEwMDA5MDA2N0E5MDA3N0I5MDAwNTMwMDAwMDAwMDAwMDAwMENGCi06MTAwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTAwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDOTQwMDQ0Ci06MTAwQzQwMDAxRDkwMDFERDk0MDJERTk0MDNERjk0MDQwNDk0MDUwNUY1Ci06MTAwQzUwMDA5NDA2MDY5NDA3MDc5NDA4MDg5NDA5MDk5NDBBMEE5NENDCi06MTAwQzYwMDAwQjBCOTQwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTAwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDOTAwMTA3Ci06MTAwQzgwMDBERDkwMDJERTkwMEIxRDkwMDNERjkwMDRCNDkwMDVCNTVCCi06MTAwQzkwMDA5MDA2QjY5MDA3Qjc5MDA4Qjg5MDA5Qjk5MDBBQkE5MDM0Ci06MTAwQ0EwMDAwQkJCOTAwMDUzMDAwMDAwNjNGRkZDMDAyMDAwNjkzMDg0Ci06MTAwQ0IwMDAxMEZGRkYwQTAwMDAwMDAwMjAwMDY5NTQwMEQyMzExMDJDCi06MTAwQ0MwMDBGRkZFMEEwMDAwMDAwMDAwMjAwMDY5OUMwMEQzMzExMEU0Ci06MTAwQ0QwMDBGRkZFMEEwMDAwMDAwMDAwMjAwMDY5REMwMEQ0MzExMDkzCi06MTAwQ0UwMDBGRkZFMEEwMDAwMDAwMDAwMjAwMDZBNTAwMEQ1MzExMDBECi06MTAwQ0YwMDBGRkZFMEEwMDAwMDAwMDAwNjNGRkZDMDBFMDAwMDBBMDBGCi06MTAwRDAwMDAxMkZGRjc4MjIwMDI4MjU3QzgyMTYzRkZGQzEyRkZGMzEzCi06MTAwRDEwMDAwM0U4MzAwNEVFMzAwNUMwMzA5MzIwOTQyMTk1MjI2MzFGCi06MTAwRDIwMDBGRkZDMDAwMDFGRkZEMDAwMDAwNDAwMjAxRkZGQzU4MDUzCi06MTAwRDMwMDAxRkZGQzY3MDIwMEEwMDExRkZGQjEzRkZGQjAzRTYzMTAzCi06MTAwRDQwMDAwMTAyMDAxNkZGRkExN0ZGRkFEMzBGNzc2QjA2OTA2MEM3Ci06MTAwRDUwMDBCNDY2Nzc2M0Y4NTQxNTI2NTQxOUQ5MEYxNDAwNjNGRjRECi06MTAwRDYwMDBGOTAwMDAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDZDMDA4Ci06MTAwRDcwMDBDNzFBRUYwNjBENDkxMUQ4MzBENzIwMUJFRjA1QkMyMjRBCi06MTAwRDgwMDA4NTcyQUI3NjgzNzEwNTQ1MEI5NTcyMDkzMzBDMjM3NjFBCi06MTAwRDkwMDAwMTcyM0IwNTIzM0QwODIzNzYwMUEzOUQxOUVFRkU3RERDCi06MTAwREEwMDA2MzI2QzAyMUMwRTAwMzJFMzgwRTBFNDJDOEVFMjlBNkVECi06MTAwREIwMDA3RTZENEEwNTAwODA4ODAwMzA4QzgyNzFEMTBGQzBGMEIyCi06MTAwREMwMDAwODJGMzg3RkMwRUE2M0ZGRTQ5MjEwMDM3RjBDQUJGRjZCCi06MTAwREQwMDAwRjNEMTJEQjgwMkVEQzEwMEU0RTM2QzAyMUMwNTAwM0JBCi06MTAwREUwMDAyNTM4MjIxMjAwMDUwNTQyQ0I1MDI5QTY3RTZERUEwNTYyCi06MTAwREYwMDAwMEIwODgwMDMwOENCQzc2QzA1MEE4RjNDMDgxMDY4NTU2Ci06MTAwRTAwMDAzODA1MDU0MkNBNTEyOUE2N0UwRDQ4MENEMzBGNkQ4QUJDCi06MTAwRTEwMDAwNTAwMzA4ODAwMjA4QzgyNzFEMTBGMDBDMDYxQzA1MDY1Ci06MTAwRTIwMDAwODY1Mzg3NUMwQzY2M0ZGQzBDMEIwMDM4QjM4N0JDMDhGCi06MTAwRTMwMDBENzYzRkZEMTZDMTAxMjE2RUVEODJBMjIxRTJFMjIxRDY3Ci06MTAwRTQwMDBDMEQwN0FFMTFCMkNBMDAwRDdBMDI4Q0NFOTY0ODE0ODRGCi06MTAwRTUwMDAyOUNDRTg2NDkzNDFDMUI5N0JDMTI1NjlDQzFCNjAwMEYyCi06MTAwRTYwMDAyMjJDRDAwMEQ3RDAyOENDRTk2NDgxNTQyOUNDRTg2NDY2Ci06MTAwRTcwMDA5M0JBQzFCOTdCQzEwOTY4Q0MwOUMwMjBEMTBGMDAwMDY5Ci06MTAwRTgwMDAwMDJEMjUwMjhDMzJDMDkwMEM2RjUwNjVGNTg2MjkyNDA4Ci06MTAwRTkwMDA2NzA5MDg0NzY1ODU4MkI0NDkyNzIwMEMxOEVFQzAwQzA1Ci06MTAwRUEwMDA3RjExQThGRjI4RjI4NkRCNzA3ODkzMDI2MDA1NTQxOTQxCi06MTAwRUIwMDBFRUJDMDk3OTBBMjk5MkEzNjg5MDA4MjgyMjAwMDk4OEMzCi06MTAwRUMwMDAwQzY1ODUzRjI5RjI4NTY0OTUzOTI5MTYxQTY1NTU2M0E1Ci06MTAwRUQwMDA3QUUxMDREQkEwNjAwMDAxQzBCMDIyMTYxQjhEQjQxMkMxCi06MTAwRUUwMDBFRUIxMEQ4ODE0ODIyNDBEMEQ0N0E4MjIxOEVFQUYwOTJCCi06MTAwRUYwMDBERDEwMDgyMjAyOTI5MDE4RUVBRDEyRUVBRTA4QzgwMTg1Ci06MTAwRjAwMDAwRDg4MDIwMjQyMDIxREVFQUE5MjkxMEQ4ODAyOTg5MjZCCi06MTAwRjEwMDAyMkIwMjMyREIwMjIwNDI4MTAwNkREMTAwMjQyMTIwODUwCi06MTAwRjIwMDBERDAyMjhCMDIxMDcyMjEwMEM4ODEwMDI4ODAyMEQ4OEVCCi06MTAwRjMwMDAwMjEyRUVBMThEMzMwMkREMDE4MjM0MEQ4ODAyOTg5M0Y2Ci06MTAwRjQwMDA5MkI5OTI5NDhEQjU4MjM5OUQ5NTg4QjY4RDM4OTg5NkQwCi06MTAwRjUwMDA4OEI3OTI5OTlEOTg5ODk3QzBEMDI4RjI4NTEyRUU5N0ZECi06MTAwRjYwMDAwODQ4MEJBMjcyMkQyNENGMjhGNjg1MjIxMjFCNjU1NDQ3Ci06MTAwRjcwMDBERTdBRTEwNERCQTA2MDAwMDFDMEIwNjRCRUZCMkNCMEVGCi06MTAwRjgwMDAwNzI4QjAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MERFCi06MTAwRjkwMDAwMERCQTA2NUFGRTc2M0ZFRTAyRUEwMDMyQjIwNjdEOTNFCi06MTAwRkEwMDBFMEQ0RTA2NUIxQUI4QjMyMEJGQzUwNjRDNEIyMThFRUY4Ci06MTAwRkIwMDA4NDhGMkEwOEI4MDEwOEZGMEM2NEYyQ0RDMDkyNjAwMTRBCi06MTAwRkMwMDA4QTJBRDAwMzI5MjA2N0Q0QTA2NTk0Qzk4QjMyMEJGQ0YwCi06MTAwRkQwMDA1MDY0QzQ4QzFGRUU3QjhFMkEwRkJGMDE3RkU5REM4QzJFCi06MTAwRkUwMDAzMzBDRTg1MDY0ODRCNEMwQjAwQ0E1MTE4RjU5MkIxNjkzCi06MTAwRkYwMDAxMjhBNTc4RTU4MkExNjExREJFMEFBRkE3RkFCMDFCMThDCi06MTAxMDAwMDBFQjc1Q0U1OTlFMUY4OTM3OTUxQ0FGOTg5ODFENzk4QjJCCi06MTAxMDEwMDAwODI1MTYwQzI5RUMwMTI5MTYwRjlBMTY4QTFEODUxRjIyCi06MTAxMDIwMDAyQTE2MTkyQTBBMDA3QkUzMEE3QkU5MDUyQjEyMDY3RkEwCi06MTAxMDMwMDBCQjAxQzBBMTY1QTQ2OThCMzVDMEEwQzA4MDc4RTMwNDYyCi06MTAxMDQwMDA2NEUzQjVDMEExNjVBNDU4ODkxQzI5MTYxNzBDNEE1NDNECi06MTAxMDUwMDAyQTE2MTZCQ0FBMkExNjE4NjAwMEFGMDAwMDAwODgzN0FFCi06MTAxMDYwMDA4OTM2MjgxNjE0MjkxNjE1MDhGODBDMDlFOTBDMjkxNkQyCi06MTAxMDcwMDAxMzk4MUU3OEZCMDcyODEyMTNCMDg4MjgxNjEzODkxRUIwCi06MTAxMDgwMDA5QTE4OUYxNzJBMTIxM0MwRjAyOTE2MTk3QkUzMEM3QkJDCi06MTAxMDkwMDBFOTA3OEUxNzJCMTIwODdFQkIwMUMwRjE2NUY0MDZDMDZDCi06MTAxMEEwMDBCMDJGMTIxOTg4MzUyRTEyMTI5ODE5MjgxMjExQUFFRTkzCi06MTAxMEIwMDBBRjhGNzhGQjAyMkVFQzAxOUYxMzhGMTk5RjEyQzBGMEE3Ci06MTAxMEMwMDA3QkUzMEM3RUI5MDc4OTEzMjgxMjAyNzk4QjAxQzBGMUVBCi06MTAxMEQwMDA2NUYzRDIyNTE2MTcyOTEyMTUwQzRGNTRDMEUxMkYxNkFGCi06MTAxMEUwMDAxNkJDRkYyRjE2MTgwMEYxMDQwMEVFMUEyRjEyMTRCMEQwCi06MTAxMEYwMDBFRTBFRjgxMzA5ODgwMTBGRUUwMTJGMTIxOUE4QUFBRUZGCi06MTAxMTAwMDBGRTdGRUIwMUIxQUFENUEwMkUxNjE5MkIxMjE5REE1MEM5Ci06MTAxMTEwMDAyQzEyMTg1ODE4RDNDMEQwQzA5MDJFMTIxOTA3NDgwQUE0Ci06MTAxMTIwMDAyQzEyMThEQUIwOEYzNEMwQjFBQUZGMDBDMTA0MkExMjAxCi06MTAxMTMwMDAxNjJGODYxNjJDMTIxNzAwQkIxQUIwQkIwRUJFMDE5RUNFCi06MTAxMTQwMDBDOTBCRkIxMzA1QkIwMTlCQzgyQTc0MTAyOTI0NjcyOTBFCi06MTAxMTUwMDA3MDAzOEU3NUIxOUYyRjc0MDNCMEVFMEU0RTBDNjVFRENCCi06MTAxMTYwMDAxODI4MjA2NzJEMjUwMjY1ODMxMzJBMjIxRTI5MjIxRDk3Ci06MTAxMTcwMDA3QTkxMDREQkEwNjAwMDAxQzBCMDY0QkNGQzJDQjAwNzE1Ci06MTAxMTgwMDAyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMEUzCi06MTAxMTkwMDBEQkEwNjVBRkU3NjNGQ0UxODlBQUIxOTk2NTkwOTQ4OTBBCi06MTAxMUEwMDAzNDFCRUUwODk5QUE4ODMzMUZFRTAyMDg0ODU0MjhBNDdECi06MTAxMUIwMDAyQzhFMkE4QzMyMEZFRTAyMEJDQjAxN0VCOTY0MEM0QkM1Ci06MTAxMUMwMDA1MTZGQjI1RThCMzM3NUI2NTkyQ0EwMTMwQkVFNTEwRUQ2Ci06MTAxMUQwMDBDRTAxMEUwRTQxMEMwQzQxN0VDOTQ3MkZBMDEyQjBGRjZDCi06MTAxMUUwMDA2NUYyREQ4RTM3OENBODhCMzY4RkE5N0NCMzA3N0JDOTVGCi06MTAxMUYwMDAwMjdFRkIwMUMwRDFDRUQ5ODgzNUREQjAwRThFMDg3OEQ1Ci06MTAxMjAwMDBFQjAxQjFCRDg5QTdEQUMwMEY5QjA4NzlCQjAyMkFDQ0RDCi06MTAxMjEwMDAwMURDQjBDMEIwN0RBMzA3N0FEOTAyN0NFQjAxQzBCMTdDCi06MTAxMjIwMDA2NEIxNjNDMDkxMjkyNDY3QzAyMEQxMEYwMDhCREFCMTZCCi06MTAxMjMwMDBCQjY0QjBDMDJDMjA2NzJEMjUwMjY1QzIyODFERUREQ0UzCi06MTAxMjQwMDA4QzMyMUZFREUxMERDRDAxMEZERDBDNjVEMUMxMEM0RkNFCi06MTAxMjUwMDA1MTZGRjIwMjYwMDFCOEMwOTAyOTI0NjcwOTA4NDc2NTAwCi06MTAxMjYwMDA4MjBGN0FFMTA0REJBMDYwMDAwMUMwQjA2NEJDMEEyQ0VDCi06MTAxMjcwMDBCMDA3MjhCMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQkJCCi06MTAxMjgwMDA4MDAwREJBMDY1QUZFNzYzRkJFRjhDMzMwQ0U5NTA2NEIzCi06MTAxMjkwMDA5MjA5MENFRjExQUZBRjJGMTYxNzhFRjg4NUY3REJFMDMwCi06MTAxMkEwMDA4RkY5MjUxNjEwQTVGNTdGNUIwMjJCRUMwMTBDQTg1MEQ5Ci06MTAxMkIwMDA2NTgwREQ4ODM3REFFMEFGODkyOTE2MEE3ODlCMDIyQTMzCi06MTAxMkMwMDBFQzAxOTUxNDg5MUFENUEwMjkxNjE5MkEwQTAwN0JFMzg2Ci06MTAxMkQwMDAwQTdCRTkwNTJCMTIwNDdGQkIwMUMwQTE2NUExQzE4QjZDCi06MTAxMkUwMDAzNUMwQTBDMDgwNzhFMzA0NjRFMTA0QzBBMTY0QUQ1Q0IzCi06MTAxMkYwMDA2MDAxQUQwMDAwOEUzNDE5RURCMzlFREE4QzMzMUJFRDI2Ci06MTAxMzAwMDBBQzBDNEM1NDJDRDQyQzhBMkE4QzMyMEJBQTAyMDlDOTVFCi06MTAxMzEwMDAwMTBBOTkwQzY1OUYwQjBDNEY1MTZFRjIwMjYzRkYwMjlDCi06MTAxMzIwMDA4QjMzMEJBODUwNjQ4RUZBMjlEMDEzMEJFQTUxMEE5QTFBCi06MTAxMzMwMDAwMTBBMEE0MTA5MDk0MTBBOTkwQzY1OUVFNTJCRDAxMjYwCi06MTAxMzQwMDBCMEJCNjVCMTg4QzBBMDhFMzc4Q0Q4MkIzMjA2MkZEMkE3Ci06MTAxMzUwMDAwOTdDQjMwNzdCQzkwMjdFRkIwMUMwQTE2NUFFQzM4OENGCi06MTAxMzYwMDAzNUQzQjBBRThFNzhFQjAxQjFCMzg5RDdEQUMwQUY5QjdECi06MTAxMzcwMDA3OUJCMDFCMUNBRENCMEMwQjA3M0EzMDc3QTM5MDI3QzczCi06MTAxMzgwMDBFQjAxQzBCMTY1QkU5QkMwOTAyOTI0NjdDMDIwRDEwRjdFCi06MTAxMzkwMDAwMDhBMzY4ODM3MkExNjE1MjgxNjE0MEFFQTBDMDhGODI3Ci06MTAxM0EwMDAwQzk4MUI3OEZCMDFCMEFBOUYxNThGMUIyRjE2MTkyRkM1Ci06MTAxM0IwMDAwQTAwN0JFMzBBN0JFOTA1MjgxMjA1Nzg1QjAxQzBGMThFCi06MTAxM0MwMDA2NUYwRTJBQURFOEIzNTJGMTIxOTI5MTIxMEMwNTBBRjNBCi06MTAxM0QwMDA5Rjc5RkIwMUIxRUU5RjExQzBGMDc1RTMwQTdFNTkwNUJDCi06MTAxM0UwMDAyODEyMDE3OEJCMDFDMEYxNjRGQ0VBNjAwMEI3MDAwMDdDCi06MTAxM0YwMDA3RkIzMDI2M0ZFRjY2M0ZFRjE3RkIzMDI2M0ZDNDU2M0Q1Ci06MTAxNDAwMDBGQzQwMDAwMDY0NTBBNERBMjA1ODE1QzhDMDIwRDEwRjU5Ci06MTAxNDEwMDBDMDkxNjNGRTQzQzA5MTYzRkE3M0RBMjBEQjcwQzBEMUUwCi06MTAxNDIwMDAyRTBBODBDMDlBMjkyNDY4MkM3MDA3NTgxNEI4RDJBMEJDCi06MTAxNDMwMDBEMTBGMDAwMDE5RUQ2NjAzNDgwQjk4MTAwODhCMDIwOUM0Ci06MTAxNDQwMDAyOTA4Nzk4MzAyMkI4REY4MjkxMjFBNjNGQThCMDAwMDgwCi06MTAxNDUwMDAyQTJDNzREQjQwNTgwRTQ0MkUyMjFEMkEyMjFFNjNGQkM4Ci06MTAxNDYwMDAwRkMwOTE2M0ZDRTUwMjJBMDI1ODAyNEMwQUEyMDIwNjUwCi06MTAxNDcwMDAwMDAwMDIyQTAyNTgwMjQ5MEFBMjAyMDYwMDAwREI3MDlDCi06MTAxNDgwMDBEQTIwQzBEMTJFMEE4MEMwQ0UyQzI0NjgyQzcwMDc1OEQ4Ci06MTAxNDkwMDAxNDlGQzAyMEQxMEZEOUEwNjNGQ0I2MDBDMDk0NjNGQzk4Ci06MTAxNEEwMDBBQUMwOTY2M0ZDQTVDMDk2NjNGQ0EwMDAyQTJDNzREQjNFCi06MTAxNEIwMDAzMERDNDA1QkZFMkVDMkQwMkRBNDAwMkIyMDBDNjNGRjNECi06MTAxNEMwMDA0NThGMzU4RUE3N0ZFQjAyNjNGRUJCNjNGRDU0ODkzNUU0Ci06MTAxNEQwMDA4OEQ3Nzk4QjAyNjNGRUFFNjNGRDQ3MDA2QzEwMDRDMEIxCi06MTAxNEUwMDAyMEQxMEYwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQyQjExCi06MTAxNEYwMDAyMjFFMjgyMjFEQzBBMEMwOTQyOTI0MDYyQTI1MDI3QjcyCi06MTAxNTAwMDA4OTAxREJBMEM5QjkxM0VEMjREQTIwMjhCMDAwMkNCMDgyCi06MTAxNTEwMDAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjhFCi06MTAxNTIwMDBFN0MwMjBEMTBGMDAwMDAwNkMxMDA2MDIyNjAyMjkyMDFGCi06MTAxNTMwMDAwNkMwRTA2ODk4MDUyODlDRjk2NTgxMjAyQTYxMDIxNzk5Ci06MTAxNTQwMDBFRDE3MEEwQTRDNjVBMEYwMkI3MjlFMUFFRDEzNkZCOEM2Ci06MTAxNTUwMDAwMjYwMDBGNDJBQTIyNjY4QTAwOThCNjBEMzBGMEFCQkEwCi06MTAxNTYwMDAwQzY1QjBFNDJBNzI5RDY0QTBERTJCNjAwQzBDQkMxMUVCCi06MTAxNTcwMDAwN0NDMDgyREMyODY2RkQ5MDI2MDAwRDcxREVEMDkwRDdBCi06MTAxNTgwMDBCRDBBMkREMkEzNjhEMDA3OEY2MDBERkYwQzY1RjBDMzk0Ci06MTAxNTkwMDAyMkMyODVDMEYwNjQyMEJCMURFRDBFNjg0MzREMThFRERFCi06MTAxNUEwMDAwRDhDNkIwOENDMDI5QzIwOEE2MDA4QUExMTBEQUEwMjNGCi06MTAxNUIwMDA5QTIxODk2QTk5MjQ4ODMyOTgyNTJDNjEwNDA4Q0MxMUQzCi06MTAxNUMwMDA5QzI3MUNFQ0ZFMENCQTExQTdBQTI5QTI4NUFDQkMyRjQzCi06MTAxNUQwMDBDNENGMjk5QzI4MjlBNjg1Qzg1QTJBNkM3NERCNDA1ODk4Ci06MTAxNUUwMDAwREUyRDJBMEQxMEZEMkUwRDEwRjAwMDAyODlDRjk2NDA3Ci06MTAxNUYwMDA4MDkxMkM2MDY2ODkzMUIxQ0MwQzBDNDcyQzY0NjY2RkVECi06MTAxNjAwMDBDNjY5NzA5RTY2MUFFQ0Y0OEMzMDg5NkIwQzhDNDAwQkFBCi06MTAxNjEwMDBDQzEwMEM5OTAyMEE5OTAyOTkyMDg4NjAwODg4MTEwRDUzCi06MTAxNjIwMDA4ODAyOTgyMThDMzM5QzIzOEEzMjlBMjI4OTZBOTkyNEQxCi06MTAxNjMwMDA4ODM0OTgyNTYzRkY4MjAwMDBDQzU3REE2MERCMzBEQzA5Ci06MTAxNjQwMDA0MDU4MTRBN0MwMjBEMTBGMDBEQTYwQzBCNjU4MTUzNzMzCi06MTAxNjUwMDA2M0ZGRTUwMERBNjA1ODE1MzU2M0ZGREMwMERBMjBEQjU0Ci06MTAxNjYwMDAzMERDNDBERDUwNTgxNUI3RDJBMEQxMEY5RTEwMkI2MTUxCi06MTAxNjcwMDAwNDU4MTNDODFERUNENzhFMTAyQjYwMENDMEYwMkY2NERCCi06MTAxNjgwMDA2NjYzRkY4MDI5NjEyM0MwODg3OTgzMDI2M0ZGNzUyRTFBCi06MTAxNjkwMDAxNjAwMkM2MDY2MkI2MTA0MkNDQzAxMEMwQzQ3MkM2NENBCi06MTAxNkEwMDA2NjU4MTNCQzFERUNDQjhFMTAyQjYwMENDMEYwMkY2NDYxCi06MTAxNkIwMDA2NjYzRkY1MDZDMTAwNEMwQjdDMEExMTZFQ0M4MTVFQ0VGCi06MTAxNkMwMDBCQUQ3MjBEODQwQjgyMkMwNDAwNTM1MDI5NjcxOTU3MDJGCi06MTAxNkQwMDAwMkE0MzgwNDA0NDJDOTRCMUFFQ0FEMTlFQ0FFMjlBNjk5Ci06MTAxNkUwMDA3RUMxNDBEMzBGNkQ0QTA1MDA4MDg4MDAyMDhDMjIwQUZECi06MTAxNkYwMDA4OEEyNzJEMTBGQzA1MDA4QTUzODc1QjBFMzYzRkZENzM4Ci06MTAxNzAwMDA2QzEwMDg5MzE0OTQxMjI5MjAwNjY1NTI3MEMwNzE2OEY5Ci06MTAxNzEwMDA5ODA1MkE5Q0Y5NjVBMjgwMTZFQ0ExMjkyMTAyOEExNDU5Ci06MTAxNzIwMDAwOTA5NEM2NTkwQzc4QUEwMEE2QTUxMkFBQ0ZENjVBMEQ4Ci06MTAxNzMwMDBCQ0NDNUZEQjMwREEyMDhDMTI1ODE0NjlDMDUxOUExNDhCCi06MTAxNzQwMDBDN0JGOUJBOThFMTQyRUUyMDk2OEUwNjAyRjYyOUUxRDIwCi06MTAxNzUwMDBFQzkyNkZGODAyNjAwMDgxMkREMjI2NjhEMDA1MkYyMjBFCi06MTAxNzYwMDAwMDdERjk3NTJDNjI5REM3OTA2NEMwNkQ5QzExOEExNDMwCi06MTAxNzcwMDAyQjIwMEMyQUEwMjAwQ0JEMTFBNkREMEE0RjE0QkZBOEY3Ci06MTAxNzgwMDAwOTg4MDEyOUQyODZBRjg4Mjg4QzA5Nzk4QjU1MUZFQ0VFCi06MTAxNzkwMDA4NDBGQkYwQTJGRjJBMzY4RjAwNTI4MjIwMDdGODk0MzM3Ci06MTAxN0EwMDAyOUQyODVENDkwNjU5MDc3NjAwMDNEMDAwMDJCMjAwQ0Y1Ci06MTAxN0IwMDAxRkVDN0MwQ0JEMTFBNkREMjlEMjg2MEZCRjBBNkU5NkU4Ci06MTAxN0MwMDAxMDJGRjJBMzY4RjAwNDg4MjA3Rjg5MDUyOUQyODU2NTRGCi06MTAxN0QwMDA5MTU1REEyMDU4MTRENTYwMDAxM0RBMjBDMEI2NTgxNDk5Ci06MTAxN0UwMDBEMzYwMDAwOUMwOTA2M0ZGQjlEQTIwNTgxNEQwODkxNDdGCi06MTAxN0YwMDA4OTkxMDlGRTUwNjU1MUNDOEMxMjhEMTREQTIwREJEMDEyCi06MTAxODAwMDA4REQwOUUxMDBENkQ1MTU4MTM0MTlBMTQ2NEExRjBDN0VDCi06MTAxODEwMDA1RjhGQTE5NUE5QzA1MTBGMEY0NzlGMTI2M0ZFRkIwMDc4Ci06MTAxODIwMDBDMDkxQzBGMTI4MjAwNjJDMjA2NjI4OENGOUE3Q0MwQzhBCi06MTAxODMwMDAwQzQ3MkMyNDY2NkZDNjA4OEQxNDhERDE3MERFMDFDMDU0Ci06MTAxODQwMDA5MEREOTA2NDgxNDFDOUQyOEExMTJCMjEwNDU4MTM1MTMzCi06MTAxODUwMDA4QTE0QzBCMDJCMjQ2NjhFQTkyQUEwMjBDMTcwMUNFQzZCCi06MTAxODYwMDA1QjBFMjgxNDE1RUM1MDhFMTQ4NTU2QUMyQzlDMTMyRTUwCi06MTAxODcwMDBFQzI4QTg1NURERTA3Q0UzMDIyREVERjhEM0QwMEE3NzAzCi06MTAxODgwMDAzNkRBNDBEQjUwREMzMDVCRkY4QkQ0QTAyRTIwMENCNDZBCi06MTAxODkwMDA1NTI5MEE4OEMwQzAxQkVDNDkwQ0VGMTFBNkZGMjhGMjlECi06MTAxOEEwMDA4NUFCRUUyQ0U0Q0ZBOTg4MjhGNjg1MjkwQTgwODgxMzE5Ci06MTAxOEIwMDBBOTMzREQzMDg5MTQ3ODMzMDIyRDNERjgyODkwMjBEM0U4Ci06MTAxOEMwMDBEMDA3ODgwQ0MxNzAwODA4NDcyODk0MjAwODc3MzY2NTJGCi06MTAxOEQwMDA3RkFFODkxNDEzRUM0Mzg5OTBDMEQ0Nzc5NzNEMThFQzAwCi06MTAxOEUwMDA0MUMxQkEyNzIxMDQ4NTE0MDk5QzQwMDZDQzExODY1M0I2Ci06MTAxOEYwMDAwNDc3MTE4NTUyMEM3NzAyMEI3NzAyQzBDMDk4QTA5RDI3Ci06MTAxOTAwMDBBMThEMkI5Q0E1OTdBNDk2QTc5NUE2MDNERDAyOURBMjY5Ci06MTAxOTEwMDAyQkYyODUyQ0U0Q0YyQkJDMjAyQkY2ODUyQTJDNzQ4QjQ0Ci06MTAxOTIwMDAxMjU4MEQxMUQyQTBEMTBGMjgyMDNEQzBFMDdDODc3NzNFCi06MTAxOTMwMDAyRTI0NjcwRTBBNDc2NUEwNzMxOEVDMkI4RjIwMUNFQzMxCi06MTAxOTQwMDAxOThFMTQ4Q0M0OEVFNDA4RkYxMTA4RkYwMjBFOEUxNDQ5Ci06MTAxOTUwMDBBRUNDMUVFQzI2OUY5MTBFQ0MwMjlDOTBDMDgwMUVFQzVCCi06MTAxOTYwMDAyNDJDMjEwMjFBRUMxNjJGRDI4NUFBQkFCOEZGMkZENjQyCi06MTAxOTcwMDA4NTBFQ0MwMjI4QTRDRjJDMjUwMkMwMjBEMTBGODcxNEJECi06MTAxOTgwMDA4NzcwMDcwNzQ3NjNGRDg2MjgyMTIzQzA5OTc5OEIwMjVBCi06MTAxOTkwMDA2M0ZFQjJEREYwNjNGRUFEMDBEQTIwREIzMDhDMTJEREQ5Ci06MTAxOUEwMDA1MDU4MTRFOEQyQTBEMTBGQzBFMTYzRkY4MjhCMTQ4QzkxCi06MTAxOUIwMDAxMkRENTBDMEFBMkUwQTgwMkEyNDY4REEyMDU4MTM1MzU4Ci06MTAxOUMwMDBEMkEwRDEwRjAwNzA5NjU1MkI2MjlFNkVCODUzMURFQkJFCi06MTAxOUQwMDBGMjJERDIyNjY4RDAwNDhFMjA3REU5NDUyQTYyOURDQjY3Ci06MTAxOUUwMDBBRjJCMjEwNDJDMjA2NjU4MTJFQkMwOTAyOTI0NjY4MjZDCi06MTAxOUYwMDAxNDE4RUMwMDhGMjEwOEZGMDE5RjIxQzAyMEQxMEYwMDk3Ci06MTAxQTAwMDA4QjEwQzlCODhDQTAwQzZDNTFDQ0NDOEUyNDFGRUJFRTgzCi06MTAxQTEwMDA4REUxOUUxNDBGREQwMjlERTE4ODEwNjU4RkE5QzAyMDI1Ci06MTAxQTIwMDBEMTBGREEyMEMwQjY1ODE0NDFDMDIwRDEwRjAwMDAwMEY5Ci06MTAxQTMwMDA2QzEwMDZDMEQwMkEyMTAyOTQxMTc1QTcwRTg5MzQ3RjNDCi06MTAxQTQwMDA5NzA5OEIzNTdGQkYwNDJEMjUwMkRBRDAwQTBDNEM2NTJGCi06MTAxQTUwMDBDMTdCMTZFQkQyMUZFQkQwMjg2MjlFQzBFQTc4RTMwMjZFCi06MTAxQTYwMDA2MDAxODEyOUYyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMUU1Ci06MTAxQTcwMDA3MzJBNjI5RERFQTA2NEExNzAyQjIwMENDMDcwMENCQzg4Ci06MTAxQTgwMDAxMTA2Q0MwODI5QzI4NjI4MEEwQzc5ODMwMjYwMDE0QzExCi06MTAxQTkwMDAxOUVCQzQwOUI5MEEyOTkyQTM2ODkwMDc4ODIwMDk4ODFDCi06MTAxQUEwMDAwQzY1ODEzODI0QzI4NTFDRUJDNjY0NDEyRjg5MzEwOTNECi06MTAxQUIwMDA4QjE0MENCQjAxNkZCMTFEMkMyMDY2OUUxMEIxQ0MwQzk5Ci06MTAxQUMwMDAwQzQ3MkMyNDY2NkVDNjAyNjAwMTM0MDlGRTUwNjVFMUE1Ci06MTAxQUQwMDAyRThBMTAyQUFDMTg4OTM0QzBFNDdGOTczNjE3RUJDN0RBCi06MTAxQUUwMDBDMDgyMUJFQkM1OEMzNTlFNDE5QjQwOEIyMDk4NDU5RDQ5Ci06MTAxQUYwMDA0NDE4RUJDMzA3QkIwMjlCNDIwQzA3NDAwRjc3MTE5OEI5Ci06MTAxQjAwMDA0Mzk3NDdEN0UwN0ZDNzBCMkMyMTAyMjg0QTAwMDhDQzE3Ci06MTAxQjEwMDAwMjJDMjUwMjdFOTcwNDhCMzYyQjI1MjI3RDk3MDQ4QzgwCi06MTAxQjIwMDAzNzJDMjUyMTdDOTczQTBBQUIwMjJDMEEwMUMwODAwQTg3Ci06MTAxQjMwMDBDODM4MkEzQzIwMDgwODQyNjQ4MDgyMUNFQjk0MTlFQkM4Ci06MTAxQjQwMDA5NTI5QzY3RTAwQTA4ODAwQjA4QzAwQTA4ODAwQjA4Q0NCCi06MTAxQjUwMDAwMEEwODgwMEIwOEMyODYyOUQyREY0QTIyODhDMTgyODQzCi06MTAxQjYwMDA2NjlEODkzMDc3OTczNTFGRUI5RjhDMzM4ODMyMDQ3QkQ1Ci06MTAxQjcwMDAwQjJBMjEwNEI0NzcwNEFBMTE5RUIxOUZCMDhGMkI5RDJDCi06MTAxQjgwMDBCNTk4QjY5Q0I3MThFQjk2MDk5QzQwMDZDQzExMENBQUU4Ci06MTAxQjkwMDAwMjA4RkYwMjlGQjJDMUNDMENBQTAyOUFCNEM5NzcyQUVDCi06MTAxQkEwMDAyMDBDMUJFQjg2MENBOTExQTY5OTI4OTI4NUFCQUEyREI3Ci06MTAxQkIwMDBBNENGMDg3ODBCMjg5Njg1Q0Y1OEMwMjBEMTBGQzA4N0I2Ci06MTAxQkMwMDBDMDkwMEFDOTM4Nzk4ODAyNjNGRjc4NjNGRjZDQ0M1N0VDCi06MTAxQkQwMDBEQTIwREIzMDhDMTE1ODEzNDJDMDIwRDEwRkRBMjA1OEE0Ci06MTAxQkUwMDAxM0QzNjNGRkU4QzBBMDYzRkU4OURBMjBDMEI2NTgxM0EwCi06MTAxQkYwMDBDRjYzRkZEOTJBMkM3NDhCMTE1ODBDNUJEMkEwRDEwRjY0Ci06MTAxQzAwMDA4QTEwMkIyMTA0NTgxMjYzMUZFQjY0QzBEMDJEMjQ2NjY4Ci06MTAxQzEwMDA2M0ZFQkQwMDZDMTAwNkQ2MjAxOUVCNUYxRUVCNjEyODM5Ci06MTAxQzIwMDA2MTAyMTdFQjVFMDgwODRDNjU4MDVGOEEzMDBBNkE1MUQyCi06MTAxQzMwMDA2OUEzNTcyQjcyOUU2RUI4M0YyQTkyMjY2OEEwMDQ4QzI3Ci06MTAxQzQwMDA2MDdBQzkzNDJBNzI5RDJDNENGRUNBQUIyQjYwMENCNjRDCi06MTAxQzUwMDA0RjBDQkQxMUE3REQyOEQyODYwRUJFMEE3OEZCMjY5QzRDCi06MTAxQzYwMDAxMTJFRTJBMzJDMTYwMDY4RTAwNTJGNjIwMDdFRjkxNTA0Ci06MTAxQzcwMDAyMkQyODVDRjI1NjAwMDBEMDBEQTYwQzBCNjU4MTNBQkM0Ci06MTAxQzgwMDBDODVBNjAwMTBGMDBEQTYwNTgxM0E4NjU1MTA2REM0MDlECi06MTAxQzkwMDBEQjMwOEQzMERBNjAwRDZENTE1ODEyMUNEM0EwNjRBMDdBCi06MTAxQ0EwMDBGMzg0QTFDMDUxMDQwNDQ3NjNGRjZEMDBDMEIwMkM2MEYxCi06MTAxQ0IwMDA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkZDNjAyNzA5NkY1Ci06MTAxQ0MwMDAwQTJCNjEwNDU4MTIzM0MwQjAyQjY0NjY2NTUwQjQyQUU1Ci06MTAxQ0QwMDAzQzEwQzBFN0RDMjBDMEQxQzBGMDAyREYzODBGMEY0MjVCCi06MTAxQ0UwMDA2NEYwOTAxOUVCMkExOEVCMkIyODk2N0U4RDEwNkREQTk0Ci06MTAxQ0YwMDAwNTAwQTA4ODAwQzA4Q0MwQTA4OTMwMURFQjNBNzc5NzAyCi06MTAxRDAwMDA1Mzg4MzI4QzEwOEYzMzAyQ0UwQkMwMjQ5MkUxMjI2MUIzCi06MTAxRDEwMDAwNDlERTAwNDIyMTE4RDZCOUJFNTlGRTc5OEU2MUZFQjg1Ci06MTAxRDIwMDAzMDA5OTg0MDA2ODgxMTA4MjIwMjBGREQwMkMxOEQ5REZFCi06MTAxRDMwMDBFMjA4MjIwMjkyRTRCNEMyMkU2MDBDMUZFQjIwMENFOEYxCi06MTAxRDQwMDAxMUE3ODgyQzgyODVBRkVFMEMyMjBCMkJFNENGMjI4NkM0Ci06MTAxRDUwMDA4NUQyQTBEMTBGMjg2MDBDRDJBMDhDMTExOUVCMTgwQ0UxCi06MTAxRDYwMDA4RDExQTdERDJFRDI4NUE5ODgyQjg0Q0YwRUNDMEIyQzBDCi06MTAxRDcwMDBENjg1RDEwRkMwRjAwQURGMzg3RkU4MDI2M0ZGNkM2M0JECi06MTAxRDgwMDBGRjYwMDAwMDJBNkM3NEMwQjJEQzIwREQ0MDU4MTIxMUU0Ci06MTAxRDkwMDBDMEIwNjNGRjYzQzAyMEQxMEYwMDAwMDA2QzEwMDQyQ0EyCi06MTAxREEwMDAyMjFEMkEyMjFFQzA0OUQzMjAyOTMwMDYyNDM0NjhDMEFGCi06MTAxREIwMDA0MDdBQzEwNUREQTA2MDAwMDIwMEMwRDA2RTk3MzhDMDM3Ci06MTAxREMwMDA4RjJFMEE4MDJCMzAxNEMwOTYyOTM0MDYwRUJCMDIyRUFCCi06MTAxREQwMDAzMTAyMkIzNDE0N0U4MDA0MjQzNTAyREU0MDdBQzEwRTk5Ci06MTAxREUwMDBDOEFCREJEMERBMzAyQzBBMDA1ODBBNzkyRTMxMDIwRTRCCi06MTAxREYwMDAwRjRDQzhGRUMwMjBEMTBGNjg5NUY4MjgzMTAyMDgwOEEyCi06MTAxRTAwMDA0QzY1OEZFRjFBRUFFNjFDRUFFNDJCQTI5RUMwOUE3QjhGCi06MTAxRTEwMDA5QjQ2MkJDMjI2NjhCMDA0OEQzMDdCRDkzQjI5QTI5REZFCi06MTAxRTIwMDBDMEUzQ0I5Mzk0OTAxQkVBRjcyRDMxMDQ5Qjk2MDhERDE5Ci06MTAxRTMwMDAxMTBFREQwMjlEOTc5RDkxMjRDNEEyMTJFQUYzMkYzMTY5Ci06MTAxRTQwMDAwMjI4QTI5REMwRTUyRTM0MDYyODhDMzAyOEE2OUQwMkNCCi06MTAxRTUwMDBGRjAyMkYzNTAyQzAyMEQxMEZEQTMwQzBCNjU4MTMzMzNECi06MTAxRTYwMDBDMDIwRDEwRjZDMTAwNjJBMjAwNjk0MTE2OEE4MDUyOEZFCi06MTAxRTcwMDBBQ0Y5NjU4MjRGMjkyMTAyMDkwOTRDNjU5MjA2Q0M1RkI1Ci06MTAxRTgwMDBEQjMwREEyMDhDMTE1ODEyOTZDMDUxRDNBMEM3QUY5QTFDCi06MTAxRTkwMDAzQUMwRTAxOUVBQzMxREVBQzkxQUVBQzI4RjNBMTZFQTQzCi06MTAxRUEwMDBCRkIxRkI2NEIxMzUyQzYyOUU2RkM4MDI2MDAxRTkyN0E3Ci06MTAxRUIwMDBEQzMzMjc3MjI2Njg3MDA3ODgyMDA3ODgwQzY1ODFEODc0Ci06MTAxRUMwMDAyNDYyOURDMDc2NjQ0MUQwMkIyMDBDMENCQzExQTZDQ0EyCi06MTAxRUQwMDAyOEMyODZDMDlFNzg5MzAyNjAwMUM4MTlFQUIxMDlCOTg4Ci06MTAxRUUwMDAwQTI5OTJBMzk0MTA2ODkwMDc4ODIwMDk4ODBDNjU4MUJDCi06MTAxRUYwMDBCMjI0QzI4NTY0NDFBQzI5MjAwNjI5OUNGOTY0OTFERjkzCi06MTAxRjAwMDAyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjlECi06MTAxRjEwMDA2MDAxOTgwOUY4NTA2NTgxOTIxQUVBQTM4QzM2MTlFQTkzCi06MTAxRjIwMDBBMTBDODgxNDg5OTQwQzBDNDcwOUNDMTBBODk5MEE5OTIzCi06MTAxRjMwMDAwMjE4RUFCNjJBMjEwNDk5NDA5ODQxODgyQTE5RUFCNDdECi06MTAxRjQwMDAwQzg4MDIwOTg4MDI5ODQyMjgzMDJDMkMzMDEzMjkzMDQyCi06MTAxRjUwMDAxMjA0Q0MxMDA2OTkxMDBDODgxMDlGNDQwOEE4MDIwQzlCCi06MTAxRjYwMDA5OTAyMDk4ODAyOTg0MzhGMzc5RjQ1OEMzODlDNDY4OThGCi06MTAxRjcwMDAzOUMwRjE5OTQ3MTlFQUE3ODgzNTlGNEI5ODQ4MDg4OEQ2Ci06MTAxRjgwMDAxNDA5ODgwMjk4NEE4RjMwMThFQTk3NzdGNzMyQzA3NDlDCi06MTAxRjkwMDA4OTMyOEMzMzk4NEM5NzREMEY5NzQwODgyQjJFNDYxMUUxCi06MTAxRkEwMDAwNjc3MTEyQzQ2MTMyOTQ2MTIwNEFDMTExOUVBOEQwNzQ1Ci06MTAxRkIwMDBDQzAyQzE3OTA5ODgwMjk4NEUwN0NDMDIyQzQ2MTBDMDg5Ci06MTAxRkMwMDA3QUFEQkMwQ0JBMTFBNkFBMjlBMjg1MkVDNENGMDk3OTc0Ci06MTAxRkQwMDAwQjI5QTY4NTY1NTBGQ0MwMjBEMTBGMDAyQjIwMEMwQ0NFCi06MTAxRkUwMDBCQzExMDZDQzA4MkZDMjg2MDlCOTBBNkZGOTAyNjAwMTNDCi06MTAxRkYwMDAxRTI5OTJBMzY4OTAwODJGMjIwMDA5RkYwQzY1RjEwRjlCCi06MTAyMDAwMDAyRkMyODU2NEYxMDkyODIwM0QwODI4NDA2NDgwODQ4NDFCCi06MTAyMDEwMDAzNTA0ODQxNDY0NDA3Qzg1QTU3NDUzNzc4NDM2MDQ4NDI1Ci06MTAyMDIwMDAxNDY0NDA2Rjc0NTM2QzI5MzAxM0MwOEM3OTg4NjRDMDc5Ci06MTAyMDMwMDA5MDI5MjQ2NzA5MDg0NzY1ODBERDg4MjA4OUE0ODQzNUI0Ci06MTAyMDQwMDAxQUVBNkIwNDg0MTRBNDk0MEE0NDAyOTRGMDE0RUE2NjE1Ci06MTAyMDUwMDAwODg4MTEwNDg4MDI5OEYxODQzNjk4RjMwNDg0MTRBNDQzCi06MTAyMDYwMDA5OTBBOTkwMjk5RjIxQUVBNjIyOTIxMDIyNEMyODVBRERECi06MTAyMDcwMDBCODJFODRDRjI0NEMxMDI0QzY4NTBBOTkwMjI5MjUwMjQzCi06MTAyMDgwMDBDMDIwRDEwRjAwQ0M1N0RBMjBEQjMwOEMxMTU4MTIxNDRECi06MTAyMDkwMDBDMDIwRDEwRkMwOTE2M0ZGOTdEQTIwQzBCNjU4MTJBM0I5Ci06MTAyMEEwMDA2M0ZGRTEwMERBMjA1ODEyQTE2M0ZGRDg4QTEwMkIyMUM4Ci06MTAyMEIwMDAwNDU4MTEzODFERUE0MjJCMjAwQ0MwRTAyRTI0NjY4RkY0Ci06MTAyMEMwMDAzQTYzRkU1NDAwREEyMERCMzBEQzQwREQ1MDU4MTMxRDRCCi06MTAyMEQwMDBEMkEwRDEwRjJBMkM3NDhCMTE1ODBCMjNEMkEwRDEwRjcwCi06MTAyMEUwMDAyOTIxMjNDMDg4Nzk4MzAyNjNGRTJEMkExMjAwMkMyMDI3Ci06MTAyMEYwMDA2NjJCMjEwNDJDQ0MwMTBDMEM0NzJDMjQ2NjU4MTEyNThFCi06MTAyMTAwMDAxREVBMkYyQjIwMENDMEUwMkUyNDY2OEYzQTYzRkUwOEI4Ci06MTAyMTEwMDBEQTIwNTgxMjg2NjNGRjZDREEyMDVCRkYyMEQyQTBEMTUwCi06MTAyMTIwMDAwRjAwMDAwMDZDMTAwQTk1MTZDMDYxQzFCMEQ5NDAyQTlBCi06MTAyMTMwMDAyMDNEQzA0MDBCQUEwMTBBNjQzODJBMjAwNjI5MTYwNzUwCi06MTAyMTQwMDA2OEE4MDUyQ0FDRjk2NUMzM0IxREVBMTZDODQ0MkYxMkRDCi06MTAyMTUwMDAwNjY0RjI5QjI2MjEwMjFFRUExMjk2MTQwNjA2NEM2NUJFCi06MTAyMTYwMDA2MkRFMTVFQTBFNjQ0MENGOEEzNTI5MzAwMzlBMTUwQURCCi06MTAyMTcwMDA5OTBDNjQ5MEMyMkMyMDBDOEIxNTlDMTIwQ0NDMTFBNUQwCi06MTAyMTgwMDBDQzlDMTMyQ0MyODZCNEJCN0NCMzAyNjAwMkNFOEYxMkVGCi06MTAyMTkwMDAwRUZFMEEyRUUyQTM2OEUwMDgyNjIyMDAwRTY2MEM2NUY5Ci06MTAyMUEwMDA2MkJBODgxMzI4ODI4NTY0ODJCMjg5MTU2NDkwNUVEQUU3Ci06MTAyMUIwMDA4MEQ5MzA4QzIwMUVFQTBDMUZFQTBEMURFOUZBOEIxNTIwCi06MTAyMUMwMDA4REQ0RDRCMDdGQjcxOEI4OEEyOTNDMTA4NTM2MDhDNjlDCi06MTAyMUQwMDAxMTBFNjYwMjk2ODEwNTg1MTRBNUQ1MEY1NTAyOTU4MENFCi06MTAyMUUwMDAwNDE4MTQ2RDg5Mjc4ODk2MDhDQjExMDg4ODE0MEVCQjMzCi06MTAyMUYwMDAwMkE4RDgyOTlDMjAwRjg4MDI5QkExOThBMDg4OTI5QkI2Ci06MTAyMjAwMDBBMzA4ODgxNEE4RDgwRjg4MDI5OEEyMkFBQzEwQzBEMEJFCi06MTAyMjEwMDA4QTE1MUZFOUVBOEUxMjE5RTlGNjhCMTM4ODE0MkNCMjdECi06MTAyMjIwMDA4NTA5ODgwMkFGRUUwQ0FBMEIyREU0Q0YyQUI2ODUyOENCCi06MTAyMjMwMDAyNTAyQzAyMEQxMEYwMDAwMjY1MjlFMThFOUQ3NkY2OEYyCi06MTAyMjQwMDAwMjYwMDIwRDI4ODIyNjY4ODAwOTg5MjBEMzBGMDg5OTMwCi06MTAyMjUwMDAwQzY1OTFGRDJBNTI5REMwRkQ5QTExNjRBMUYzMkIyMEJCCi06MTAyMjYwMDAwQ0MxQ0EwQ0I4MTEwNTg4MDgyRDgyODYwRUJFMEE3REU1Ci06MTAyMjcwMDBDMzAyNjAwMjBBMkVFMkEzNjhFMDA4MjYyMjAwMEU2NjZFCi06MTAyMjgwMDAwQzY1NjFGQjI4ODI4NURFODA2NDgyMDcyOTIwMDY5ODIwCi06MTAyMjkwMDAxMDI5OUNGOTY0OTIwNDJDMjA2Njg4MzFCMUNDMEMwQzc2Ci06MTAyMkEwMDA0NzJDMjQ2NjZFQzYwMjYwMDFCRDA4RkQ1MDY1RDFCNzlCCi06MTAyMkIwMDAxN0U5REExQ0U5QkQxOUU5QzQyQTIxMDQ4QjJEMjgzMDVECi06MTAyMkMwMDAxMDJEMjExRDBDODgxMDBCREIwOTBBODgwMjA5ODgwMkQ5Ci06MTAyMkQwMDAwQ0JCMDI2NDQxNTU4OTEwOUI5MDk3OTE5ODkyODQzNTZDCi06MTAyMkUwMDBEOUUwNjQ0MDZGRDczMERCNDBEODMwN0Y0NzE1MjczQ0JBCi06MTAyMkYwMDAxMEJDRTkyNjMyMTY4QzM5OTZFNjlDRTc4QTM3MjgzQ0QyCi06MTAyMzAwMDAwNDJBRTYwODBCMTMxNDY0MzA0QTJBODIxNjg2Nzk5QTQ2Ci06MTAyMzEwMDA5Njk2OTc4Qzc3OEE3RDlDOTgyQjgyMTcyQzdDMjA5QTk2Ci06MTAyMzIwMDA5QTJBOUMxODlCOTk4NjdCQjAzQjI5OEMwODZEQjkyMTExCi06MTAyMzMwMDA4QkM5OTZBNTI2OTIxNjJBQUMxOEI4OTk5QkExOTZBMDhGCi06MTAyMzQwMDA4QkM3ODZDRDlCQTIyQjkyMTU5NkE0OUJBMzg2Q0IyQ0U0Ci06MTAyMzUwMDBDQzIwMjZBNjA1QzAzNDZCNDQyMDA0M0IwQzA0NDgwOTVECi06MTAyMzYwMDAwRTg4MEE3RkI3MDVDMDkwOTk4OEJDODhDMDkwMEIxQTY4Ci06MTAyMzcwMDAxMjZEQUEwNjk5ODg5OThCMjg4QzE4MUNFOUE4MUJFOTZDCi06MTAyMzgwMDBBODE2RTk5REIxREQyQTIxMUMyM0U2MTMwRDBENEYyNjY5Ci06MTAyMzkwMDBFNjEyMkQyNTFEQzA2MDg3MjA3REE5MDdDMEQwMjgwQTIwCi06MTAyM0EwMDAwMDI4MjUxRDI2RTYxNzJDRTYxNjJCRTYxNTA1RDgxMTY0Ci06MTAyM0IwMDAxQUU5OTMyOEU2MTgwQTdBMDIyQUU2MTQyOTIwMDYyOTNGCi06MTAyM0MwMDA5Q0Y5NjQ5MTA2MkEyMDBDQzA5MDFCRTk3QzBDQUQxMThECi06MTAyM0QwMDBBNUREMkNEMjg1QUJBQUMwQjAyOUE0Q0YwQ0ZDMEIyQzU4Ci06MTAyM0UwMDBENjg1REEyMDhDMTcyRDEyMDY1ODExMEREMkEwRDEwRkU4Ci06MTAyM0YwMDA4QTM1NkZBNTQ2RDgzMDhCRDU2REE5MEM4QTg2MEE4QTk2Ci06MTAyNDAwMDAxNENCQTc3QUIzMzUyODhDMTBDMDgwMjgyNDY3MDgwQjFBCi06MTAyNDEwMDA0NzY1QjExQ0RBMjBEQjMwOEMxNzU4MTEzMUQzQTBDMENFCi06MTAyNDIwMDBDMUMwRDAyREE0MDM5QzE2NjNGRDI4MDA4NjM2NjQ2MUNDCi06MTAyNDMwMDAxNjg5MTA5QjkwOTc5MTk4OTI2M0ZFQTFDMDgxNjNGRkNCCi06MTAyNDQwMDBDOThBMTZDQ0E3REEyMERCMzA4QzE3NTgxMTI1QzAyMDlBCi06MTAyNDUwMDBEMTBGREEyMEMwQjY1ODExQjU2M0ZGRTQwMERBMjA4QjQzCi06MTAyNDYwMDAxMjU4MTFCMjYzRkZEOTAwOUYxODlFMTk4QTExMkIyMUFGCi06MTAyNDcwMDAwNDU4MTA0ODhFMTk4RjE4QzBCMDJCMjQ2NjYzRkUyRkE1Ci06MTAyNDgwMDBDMDgwNjNGRTAxREEyMERCMzA4QzE3REQ1MDU4MTIyRDNFCi06MTAyNDkwMDBEMkEwRDEwRkRBMjA1ODExQTU2M0ZGQTQyRDIxMjNDMEFCCi06MTAyNEEwMDBDODdEQzMwMjYzRkUwODlGMTg4QTExMkIyMTA0MkMyMENCCi06MTAyNEIwMDA2Njk4MTlCMUNDMEMwQzQ3MkMyNDY2NTgxMDM2OEUxOTJFCi06MTAyNEMwMDA4RjE4QzBEMDJEMjQ2NjYzRkRFNTAwMDAyNjIxMjNCMEJGCi06MTAyNEQwMDA2NjA2MDY0RjI2MjUyMzY1NkVFQTI4MjA2QTdGODcwNTUzCi06MTAyNEUwMDAwODI5NDE2NDkwRkRDMEQwMUJFOTNGMTlFOTRFMjYyMDIwCi06MTAyNEYwMDAwNzIzRTYxQkIxNjYwOTdBMDIyQkU2MUEyODIwMEEyRDZCCi06MTAyNTAwMDBFNjFEMkFFNjFFMDk4ODAyMjhFNjFDODgyNjA2MDY0N0RDCi06MTAyNTEwMDAyOEU2MjA4QjI4MjZFNTNFMkJFNjIxMkQyNDA3MkMyMEJCCi06MTAyNTIwMDAwNjJBMjA2NDJDQ0NGRDY0QzA5REI0RkY2M0ZFOTUwMDk4Ci06MTAyNTMwMDAwMERCMzBEQTIwOEQxNkMwQ0UyRTBBODAyQzI0Njg4QzY5Ci06MTAyNTQwMDAxNzU4MTA3MkQyQTBEMTBGOEUxMDI2MzIxNjFGRTkxNTFGCi06MTAyNTUwMDAwNjI2MTQ4RkY2MkJFNjEyOTdFMTI3RTYxMzI4RTYxNEQ5Ci06MTAyNTYwMDBBNkZGMENGRjAyOUZFMEMxRjYyRUVDNDgyNkVDQzA2NEVCCi06MTAyNTcwMDA2RDZCODQzNUMwODA2NDREREJEOUUwREMzMERCRTBEREExCi06MTAyNTgwMDAzMEIxODgxNEU5Mjk4NkM5OEFDODI3OURGRjJDQ0MxMDUwCi06MTAyNTkwMDAyOTlDMTAyQTc2MzIyQTc2MzAwNDY0MDExQUU5MjQyNDEwCi06MTAyNUEwMDA3NjMxQUE0NDI0NzYzMzJBRDIxNjE3RTkyMTlBQjYwNzNGCi06MTAyNUIwMDA2NjAxOTZCNzg0QzNCQ0JCOTRCNTg0MzVCNERENzQ4MzFGCi06MTAyNUMwMDBCRjJEMjExRDYzRkQ4RDAwNjRBRjVFMURFOEY2MkMyMDNDCi06MTAyNUQwMDAxNjhERDIwQUNDMEMwMEQxMDQwMENDMUFBQ0JDOUMyOUJDCi06MTAyNUUwMDA2M0ZGNDYwMDJCMjEwNDZFQjgyMjJDMjA2NkI4Q0MwQzY5Ci06MTAyNUYwMDAwQzQ3MkMyNDY2QzlDNDlGMTg5RTE5OEExMTU4MEZFNUYwCi06MTAyNjAwMDA4RTE5OEYxOEMwMzQ4NzIwQzBEMDJEMjQ2NkMwNjgyNjRDCi06MTAyNjEwMDAyNDA2NjNGRUQwMDAwMDAwNkMxMDA4MjkyMDA2Mjg5Q0M4Ci06MTAyNjIwMDBGODY1ODJDMzI5MjEwMkMwQUEwOTA5NEM2NTkwRTYyQkVFCi06MTAyNjMwMDAyMDBDMTZFOERBMENCQzExQTZDQzJFQzI4NkMxRDI3RUM0Ci06MTAyNjQwMDBEMzAyNjAwMjhFMTlFOEQ2MDlCOTBBMjk5MkEzMkExNjg0Ci06MTAyNjUwMDAwMjY4OTAwNzhBMjAwOUFBMEM2NUEyNzcyOUMyODU2NEJFCi06MTAyNjYwMDA5MjcxMkI2MjlFMUFFOENDNkZCODAyNjAwMjZFMkFBMkE5Ci06MTAyNjcwMDAyNjI5MTYwMTY4QTAwODJCMjIwMDBBQkIwQzY1QjI1QzUzCi06MTAyNjgwMDAyOTYyOURDMThDNjQ5MjU0MkEyMTIwMEE4MDYwOTkxMDhECi06MTAyNjkwMDAyQzIwM0NDN0VGMDAwRjNFMDEwQjNFQjFCRDBGREIzOUQ0Ci06MTAyNkEwMDAwQkJCMDk4RjI2MERCRDExMkREQzFDMEQwRDQxMEVERDYwCi06MTAyNkIwMDAwMzhFMjdCMUREMEQwRDQxMEZFRTBDMERCQjBCMkJCQ0I2Ci06MTAyNkMwMDAxQzBCQjcwMjdFQzcxQzJDMjEyNTdCQ0IxNjJEMUFGQ0I4Ci06MTAyNkQwMDAwQ0JBMEMwREExNjAwMDA5M0UwMTA3M0VCMTc4MDk4N0Q0Ci06MTAyNkUwMDAzOTBCNzcwQTc3RUIwMjYwMDIwNjJCMjEyMzI4MjEyMTgwCi06MTAyNkYwMDBCMUJCMEIwQjRGMkIyNTIzN0I4QjI5QjBCRDJEMjUyMzg1Ci06MTAyNzAwMDBDODU1REEyMERCMzA1ODBGRjAyOTIxMDJDQzk2QzBFOEZBCi06MTAyNzEwMDAwRTlFMDIyRTI1MDJDQzU3REEyMERCMzBEQzQwNTgxMDBBCi06MTAyNzIwMDA3MEMwMjBEMTBGMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzA1Ci06MTAyNzMwMDAyNDY2NkVDNjAyNjAwMUNGMDlGRDUwNjVEMUM5MkYwQTFCCi06MTAyNzQwMDAwMTI4MzAxMTI5MjIxNDY0ODAxMTJBMjIxQjA5MEM0NDBCCi06MTAyNzUwMDAwMEMxMDQwMEZCMUEwQkFBMDIyQTI2MUIyRDMwMTBDMDUwCi06MTAyNzYwMDBBMEMwRTA4ODMwMUJFODhGOTQxMzk1MTQyNDBBMDEyNTNCCi06MTAyNzcwMDAyMDNDMkJCMDIyMDg4QzE0Nzc4NzA0QzBGMTBCRkEzODY4Ci06MTAyNzgwMDBDMEYyQzA4NDA4NTgwMTBGNUYwMTBGNEUzODA1MzU0MDc0Ci06MTAyNzkwMDAwN0VFMTBDMEYwMDg0RjM4MDhGRjEwMEZFRTAyMjhEQ0RCCi06MTAyN0EwMDBGRUMwRjAwODRGMzg4NDJCMEJBODEwMEFGRjEwMkEyMTE2Ci06MTAyN0IwMDAyMDBGODgwMjBFODgwMjA4NDQwMjE4RTg5RThGMTEwODM0Ci06MTAyN0MwMDA0NDAyMjgyMTI1MEEyQTE0MDgyODE0MDQ4ODExMEE4ODlBCi06MTAyN0QwMDAwMjJBMjEwNDk0RjA4RTIwMDRENDEwMDhFRTExMDRFRTk1Ci06MTAyN0UwMDAwMkMwNEEwNEVFMDI5RUYxODQyQTA4QUUxMTBFREUwMkY3Ci06MTAyN0YwMDA5NEY0MEE1NDExMEU0NDAyMDU1NTEwMEMxRTQwOTRGNzJGCi06MTAyODAwMDAwN0VFMTAwRTU1MDIwODU1MDJDMDgxOTVGNjg0MzNDMEJDCi06MTAyODEwMDA1MDk0RjNCMTk0OEUzMjk1Rjg5OEY5OUVGMkMwODBDMTJECi06MTAyODIwMDBFQzI0MjYxNDk4RkI5RUY1OTlGQTg1Mzg5NUZDODQzQTk5Ci06MTAyODMwMDA5NEZEOEUzQjlFRkU4ODM5OThGRjg1MzUyNUY2MTA4NEUxCi06MTAyODQwMDAzNjg1MTQyNEY2MTE4RTM3ODQxMzJFRjYxMkMwRTA2NEY4Ci06MTAyODUwMDBCMDQ5ODkzMDc3OTc0NDJCMzAxMDg4MzM4QzExMUZFOEFBCi06MTAyODYwMDA2MThEMzIyRkM2MTRDMEY0MkZDNjE1OEYyQjJFQzYxOUJBCi06MTAyODcwMDAyREM2MUEyOEM2MUIwNEFEMTEwOTk4NDAwNjg4MTEwOEY4Ci06MTAyODgwMDBERDAyMERCQjAyMThFODU2QzFEMDBEQkIwMjA4RkYwMkU1Ci06MTAyODkwMDAyRkM2MTYyQkM2MTgyODBBMEUyODE2MDIyQjIwMEM4OEM1Ci06MTAyOEEwMDAxMjFDRTg0NjBDQjkxMUE2OTkyQTkyODVBQ0JCMkVCNDJECi06MTAyOEIwMDBDRjBBODgwQjI4OTY4NUM5NzE4QjI2OEEyOTA3QkIwODAxCi06MTAyOEMwMDAyQjI2MDYwQkFBMEMwQTBBNDgyQTI1MjU2NTUwNDhDMDYzCi06MTAyOEQwMDAyMEQxMEYwMERBMjA1ODEwOTU2M0ZFMzkwMERBMjBDMEFECi06MTAyOEUwMDBCNjU4MTA5MjYzRkUyRTAwNjg5NzM4QzAyMEQxMEYwMEIyCi06MTAyOEYwMDAwMERBMjBEQjcwNTgxMDRGQzBDMEMwRDEwQURBMzkwQUE0Ci06MTAyOTAwMDBEQzM4NjVDREU0NjNGRTBEOEExMDJCMjEwNDU4MEYyMUJECi06MTAyOTEwMDBDMEUwMkUyNDY2NjNGRTI1REI0MDJBMkM3NDU4MDkxMjgxCi06MTAyOTIwMDBEMkEwRDEwRkRBMjA1ODBGMjY2M0ZDRjc2QzEwMDRDMDM4Ci06MTAyOTMwMDAyMEQxMEYwMDZDMTAwNDI3MEE4MDFDRTgzRjFERTgzRkRGCi06MTAyOTQwMDAxQUU4MTcwQzI5MTFBQTk5MkEyQ0ZDMkI5Mjg1MERBQTlBCi06MTAyOTUwMDAwMjlDQjE5QUIwQzA1MTEzRTgzQzI4OTI4NTE2RTgzODIxCi06MTAyOTYwMDAxNEU4MzlBNjI2MDQyNDBBQjg4ODI4OTY4NTIzNDY5MUI3Ci06MTAyOTcwMDBBNzY2MjU2NDlGRDEwRjAwNkMxMDBBRDYzMDI4MzAxMDRFCi06MTAyOTgwMDAyOTIwMDYyODhDRjk2NDgyOTc2ODk4MEIyQTlDRjk2NTlGCi06MTAyOTkwMDBBMUIyMDIyQTAyNTgwRjBBODkzNzFCRTgwMkM4OTE2NEMzCi06MTAyOUEwMDA1MjBFMkEyMTAyMEEwQzRDNjVDMjU1OEQzMDE5RTdGQkU0Ci06MTAyOUIwMDA3NEQ3MDUyRTIxMjM2NUUyOUEyRjkyOUUxQUU3Rjc2RkFFCi06MTAyOUMwMDBGODAyNjAwMjUwMkFBMjI2NjhBMDA4MkMyMjAwMEFDQzM1Ci06MTAyOUQwMDAwQzY1QzI0MTJBOTI5RDY0QTIzQjlBMTUxRkU3RjE4REI2Ci06MTAyOUUwMDA2N0MxRTZDOEREMkI2MjA2MThFN0VGNjRCMDA1Mjg4MEYyCi06MTAyOUYwMDAyMTdCOEI0MzJCMjAwQzE4RTdFOTBDQkMxMUE4Q0MyOUI4Ci06MTAyQTAwMDBDMjg2NzlFQjQ2MEZCRTBBMkVFMkEzNjhFMDA1MkYyMkFDCi06MTAyQTEwMDAwMDdFRjkzNzJDQzI4NTlDMTg2NEMyMkYyQjIxMkY4NzhBCi06MTAyQTIwMDA2NjBCN0IzNjBCNzkwQzZGOUQyNjZFRDI0NjJDMjAzREIzCi06MTAyQTMwMDA3QkM3NDBDRTU1NjAwMDFFMkEyMDBDQzFCMjhDMjA1OEE2Ci06MTAyQTQwMDAxMDZGOUExODY0QTI0MThENjc2M0ZGQ0ZDMEMwNjNGRjA3Ci06MTAyQTUwMDBDNUQ3QjA2M0ZGRDMwMEMwRTA2MDAwMDIyRTYwMDMwRTU0Ci06MTAyQTYwMDBEQjBDNkVCMjBFREM3MDBDRUExMUFBNkEyQUFDMjA1ODlDCi06MTAyQTcwMDAwMTk4RDdBMERBMjBEQjcwQzFDODJEMjEyMDU4MTAxNThECi06MTAyQTgwMDA4QzI2OEIyNzlBMTYwQ0JCMEM3QUIzMzQ4RjE4ODk2MzZCCi06MTAyQTkwMDA5OUYzODg2Mjk4RjI4RTY1OUVGODJENjAxMDhBMTg5REQxCi06MTAyQUEwMDAxNzY4RDcyOUMwRDA5REE5MkMyMjE4MkIyMjEzOUNBQkM0Ci06MTAyQUIwMDA5QkFBOTdBNThFNjY3RTczMDI2MDAwOTdDRjU4NjAwMDMwCi06MTAyQUMwMDAxRkRBMjA4QjE2NTgwRkRCNjVBMTM1NjNGRkJEQzA4MTZGCi06MTAyQUQwMDBDMDkwOEYxOEMwQTI5QUY5OTlGQjk4RkE5N0Y1NjNGRkY2Ci06MTAyQUUwMDBEMkRCMzBEQTIwREM0MDU4MEY3RUMwNTFENkEwQzBDMDA3Ci06MTAyQUYwMDAyQkEwMTAyQ0E0MDM5QjE3MkMxMjA4MDIyQTAyMDY2QjkxCi06MTAyQjAwMDAwMkRGNzAyRDYwMDM4RTE3OUQxNDlFMTAwQ0REMTFDMDI2Ci06MTAyQjEwMDBFMEFENkQyRERDMjA1ODAxMTc4QzE0OEIxNkFDQUMyQzVECi06MTAyQjIwMDA2NDAzOEEyNjg5MjlBQkFBMEE5OTBDOUEyNjg4NjYwOTIxCi06MTAyQjMwMDAwOTQ4MjkyNTI1MDc4ODBDOTg2NjJGMjIxOEE3RkYyRkZBCi06MTAyQjQwMDAyNjE4NjNGRTk2REEyMERCMzBEQzQwREQ1MDU4MTA3RDFECi06MTAyQjUwMDBEMkEwRDEwRkMwMzAyQzIwNjY4OTYxQjFDQzBDMEM0N0JCCi06MTAyQjYwMDAyQzI0NjY2RUM2MDI2MDAwQ0VDMDMwMDlGRDUwNjVEMEQwCi06MTAyQjcwMDBDNjhFNjc2NEUwNjk2NDcwNjZEQjYwOEMxOERGNzBEQUFCCi06MTAyQjgwMDAyMDJENjAwMzhFMTcwQ0REMTE5RTEwQUQ2RDJEREMyMDA1Ci06MTAyQjkwMDAxRUU3QTc1ODAwRjgyMzI2MThEQTIwOEIxNkRDNDAyRkYyCi06MTAyQkEwMDAyMjEzREQ1MEIxRkYyRjI2MTM1ODBGMUREMkEwRDEwRkQ1Ci06MTAyQkIwMDAwMDI4MjAzRDA4NDg0MDY1OERFNzZGOTUzRURBMzA4RDRFCi06MTAyQkMwMDBCNTZEOTkwQzhDQTgwQzhDMTRDQUNGN0NEMzJEMkFBQzczCi06MTAyQkQwMDAxMEMwOTAyOTI0NjcwOTBENDc2NEREQzU2MDAwOEUwMDkwCi06MTAyQkUwMDAyQzEyMDgwNjZCMDIyRDZDMjAwNzdGMDI4RTE3REEyMDRDCi06MTAyQkYwMDA5RTEwMUVFNzhFNTgwMDdDNjNGRjlBMDBDMDkxNjNGRjExCi06MTAyQzAwMDBEMTY1NTA4MERBMjBEQjYwREM0MDU4MEYzNUMwMjBDMDMxCi06MTAyQzEwMDBGMDJGQTQwM0QxMEZEQTIwQzBCNjU4MEZDNDYzRkZFMDMxCi06MTAyQzIwMDAwMDZGOTUwMjYzRkQ3MERBMjBEQjMwREM0MERENTBDNEJDCi06MTAyQzMwMDBFMDU4MEVCNkQyQTBEMTBGOEExNTJCMjEwNDU4MEU1NTlDCi06MTAyQzQwMDAyMzI0NjYyODYwMTA5ODE3NjNGRjI1MDBEQTIwNTgwRkE4Ci06MTAyQzUwMDBCNzYzRkZBQ0M4NThEQjMwREEyMDU4MEU5QjJBMjEwMjNDCi06MTAyQzYwMDA2NUFGOURDMDk0MDlBOTAyMjkyNTAyNjNGRjkyREIzMDVDCi06MTAyQzcwMDBEQzQwREQ1MEMwQTMyRTBBODAyQTI0NjhEQTIwNTgwRURBCi06MTAyQzgwMDBBM0QyQTBEMTBGQzAyMEQxMEZEQTIwMkIyMDBDNTgwRkQ3Ci06MTAyQzkwMDBDMDYzRkY2QzZDMTAwNDI4MjAwNkMwNjIyODhDRjg2NUE1Ci06MTAyQ0EwMDA4MTI1QzA1MEM3REYyQjIyMUJDMEUxMkEyMDZCMjkyMUMwCi06MTAyQ0IwMDAyMzAwQTEwNEIwOTkyOTI1MjNCMUFBMDBFQzFBMEJDNDYyCi06MTAyQ0MwMDAwMTBBMEE0NDJBMjQ2QjA0RTQzOTBEQ0MwMzBDQkIwMTJECi06MTAyQ0QwMDAyQjI2MUI2NDQwNjkyOTIwMEMxQkU3MzAwQzlBMTEwQjMyCi06MTAyQ0UwMDBBQTA4MkZBMjg2MUJFNzJFNkZGOTAyNjAwMEI2MEI5Qjg1Ci06MTAyQ0YwMDAwQTJCQjJBMzY4QjAwODJDMjIwMDBCQ0MwQzY1QzBBNDMwCi06MTAyRDAwMDAyQkEyODUxQ0U3NTI2NEIwOUI4ODJCMkYyMTA0MEM4OEQyCi06MTAyRDEwMDAwMjk4QjA4NDIwQzA4NTA4NDQxMTA4NDQwMjk0QjE4NDBDCi06MTAyRDIwMDAyQTA4RkYxMTk0QjQ4RTM0OUZCNzlFQjVDMDQwMURFN0FBCi06MTAyRDMwMDAyMzJFQTI4NTBEOUQwODJFRUMyODJFQTY4NTI1RDRDRjA2Ci06MTAyRDQwMDAyOTIxMDIwOTA5NEM2ODk0MUE2ODk4MjBDOTQwMkEyMTRGCi06MTAyRDUwMDAwMjY1QTAwQjJBMjIxRTJCMjIxRDdBQjEwMjY1QTA3OUUyCi06MTAyRDYwMDBDMDIwRDEwRjJDMjEyMzY1Q0ZERTYwMDAwODJFMjEyMTQ5Ci06MTAyRDcwMDAyRDIxMjM3RURCRDUyQjIyMUUyRjIyMUQyNTI1MDI3QjE0Ci06MTAyRDgwMDBGOTAxQzBCMDY0QkZDNDEzRTcwNDJDQjAwNzI4QjAwMDM5Ci06MTAyRDkwMDBEQTIwMDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUIyCi06MTAyREEwMDBBRkU3NjNGRkE2MkEyQzc0QzBCMDJDMEEwMjU4MEQ4RDIxCi06MTAyREIwMDAxQ0U3Mjg5Q0EwOEIyMDA4QkIxMTA2QkIwMjlCQTE4OUE1Ci06MTAyREMwMDAzNDk5QTI2M0ZGNzkwMDAwMjYyNDY4REEyMERCMzBEQzI2Ci06MTAyREQwMDA0MERENTA1ODBGRENEMkEwRDEwRkRBMjAyQjIwMEM1ODQ4Ci06MTAyREUwMDAwRjUzQzAyMEQxMEYwMDAwNkMxMDA2MDczRDE0QzA4MEE3Ci06MTAyREYwMDBEQzMwREI0MERBMjBDMDQ3QzAyMTIzQkMzMDAzMjgzODU4Ci06MTAyRTAwMDAwODA4NDI3NzQwMDIyRERDMDE2NDgxNTcxRUU2RTAxOTc0Ci06MTAyRTEwMDBFNkUxMjlFNjdFNkREQTA1MDA1MDg4MDAzMDhDQzBFMERFCi06MTAyRTIwMDBDMDIwMjVBMDNDMTRFNkRGQjZEMzhGQzBDMEQwMEY4N0VBCi06MTAyRTMwMDAxNDI0NDAyMjBGODk0MDk0MTA3N0Y3MDRDMDgxMDQ4MjQzCi06MTAyRTQwMDAzOEMwRjEwQjI4MTBDMDQ0QzAyMjA0NTQwMTA0RkQzOERFCi06MTAyRTUwMDAwMjUyMDEwMkZFMzgwOEREMTA4MjFDMDdFRTEwMEU2RUQxCi06MTAyRTYwMDAwMjBFREQwMjI0MkNGRUMwRTAwNEZFMzgwQUVFMTAwRTM1Ci06MTAyRTcwMDA4ODAyMEQ4ODAyOERBQjFFRTZDRjA4RDgwMjBFODgwMkFDCi06MTAyRTgwMDA5OEIwQzBFODA0MjgxMDBFNUUwMTg0QTAyNUExMjUwODkyCi06MTAyRTkwMDA0NDExMDg0NDAyMDUyNTE0MDQ1NTExMDQzNDAyQzA4MTZDCi06MTAyRUEwMDAwRThFMzk5NEIxOEZBQTg0MTA5RkI0NzU2NjBBMjZBMTNDCi06MTAyRUIwMDAxRkMwRjIwNjI2MTQ2MDAwMDcyNkExMjBDMEYyMDYyNkQ1Ci06MTAyRUMwMDAxNDA1NjUwMjBGNzcwMTA3ODczOTA1RTYxMDA3NzgxMEFBCi06MTAyRUQwMDAwODY2MDIwNjU1MDI5NUI2MjVBMTA0MEFFNjExMDg1OEFGCi06MTAyRUUwMDAxMTA4MjgwMjA4NjYwMjk2QjdDMDYwNjQ0MDU2NjQ5MEQ0Ci06MTAyRUYwMDA1MzA2N0UxMUMwRjQ4OUMyODhDMzBCMzQwQjk2NDU5OEUzCi06MTAyRjAwMDA0Nzk5NDYxOEU2Qjc5RjQxMDQ1OTExMEU5OTAyMUZFNkVBCi06MTAyRjEwMDBCNTAyMEU0NzA4RDgwMjlGNDA5ODQyMEU5OTAyQjQzODc1Ci06MTAyRjIwMDBDMUUwMEU5OTAyOTk0NDJGQTAwQzBDRjkxMTE0RTZBM0VDCi06MTAyRjMwMDAxRUU2OUJBNEZGQUU5OTJFOTI4NTI2RjRDRjBFODgwQjM5Ci06MTAyRjQwMDAyODk2ODVEMTBGMkJBMDBDMENCRTExMUNFNjlDMUZFNjA5Ci06MTAyRjUwMDA5M0FDQkJBRkVFMkRFMjg1MjZCNENGMEQzRDBCMkRFNjM1Ci06MTAyRjYwMDA4NUQxMEYwMEMwODAwNTI4Mzg3ODQ4MDI2M0ZFQTU2MzJDCi06MTAyRjcwMDBGRTk5MDAwMDZDMTAwNkMwQjBDMEE2QzBDMDY1NzBGMDFECi06MTAyRjgwMDA4ODMwQzAzMDA4ODcxNDA4ODg0MDY1ODBEM0MwRTBDMDBFCi06MTAyRjkwMDA5MUMwRDRDMDgyMjUyMDNDMEIzRjEwOTcxMjgzMUNDMEU3Ci06MTAyRkEwMDA3MDA4NTgwMTBENUQwMTA4OTczOEMwODAwQjk4MzgwN0VDCi06MTAyRkIwMDA3NzEwMDQ4ODEwMDg2ODAyMDg3NzAyQzA4MDBEOTgzOERFCi06MTAyRkMwMDAyRDNDRkUwODg4MTAwRDlFMzg4RDJCMEFFRTEwMDhFRTYxCi06MTAyRkQwMDAwMjA3RUUwMjBDQjgxMDBGREQwMjA1M0I0MDBFREQwMkM5Ci06MTAyRkUwMDA5RDQwODkyMDA0M0QxMDA4OTkxMTBEOTkwMjJEMjEwNDVFCi06MTAyRkYwMDAwOUE5MDIwOEREMTE5OTQxODcyQTA1QjkxMDBEM0QwMjgyCi06MTAzMDAwMDAwQUJCMTEwREJCMDIwODc3MDI5NzQ0MjgyMTI1ODcxMkJECi06MTAzMDEwMDAwODI4MTQwNDg4MTEwNzFFNDAwN0VFMTAwRTk5MDI3NTQ3Ci06MTAzMDIwMDA2NjA5MjYyMTFGMDYyNjE0NjAwMDA2MDAyNjIxMjAwNkI4Ci06MTAzMDMwMDAyNjE0MDg2ODAyOUI0NzA5ODgwMjk4NDYyOTIwMENEMjZBCi06MTAzMDQwMDBDMEMwODAwQzlFMTExQkU2NUQxRkU2NTRBQjk5QUZFRTJECi06MTAzMDUwMDAyREUyODUyODk0Q0YwREFEMEIyREU2ODVEMTBGMDAwMDE0Ci06MTAzMDYwMDAwMDFGRTY1MDJGRjAyMkMwMzA2NUZGMjBDMDMxNjNGRjAzCi06MTAzMDcwMDAxQkRENDA4RTUxQ0FFMDBFNzgzNjk4MTAwODc3MENCMkVFCi06MTAzMDgwMDBBQUIxQkI4RjUwMkREQzEwOThEOTlGRDg4OTUzOEY1MjhECi06MTAzMDkwMDA5OTExOTlEQjlGREE3RTgzMEFCMUNDMjU1QzEwQzk3ODNGCi06MTAzMEEwMDA2M0ZGQ0YwMDg4MTA4RDExMDhFNzBDOTc1MUFEOEREN0M1Ci06MTAzMEIwMDBGMDc4REIwMUIxRjc5RDUzOTc1Mjg4MzBDMDMwMDg4NzE0Ci06MTAzMEMwMDAxNDA4ODg0MDY0OEVDNTY1QkZBMTYzRkY5MzAwMDAwMEFCCi06MTAzMEQwMDA2QzEwMDRENzIwQjAzQTg4MjBDMDMwODIyMUNBQTE3NDc1Ci06MTAzMEUwMDAyQjFGMjk3MjA0NkQwODBGQzk4MUM5OTI4NTc1QjEzM0YwCi06MTAzMEYwMDBBMjUyN0EzQjBDNzQyQjA5NjNGRkU5MDAwMDY0OUZFQjNBCi06MTAzMTAwMDBEMTBGRDI0MEQxMEYwMDAwNkMxMDA4RDYzMEMwNzA5NTlFCi06MTAzMTEwMDAxNURBNDA4RTM5MTRFNjIzOUExNDY0RTAwMjY0NTFGOEZCCi06MTAzMTIwMDAyOTIwMDYyQTlDRjg2NUEyNUIyQTIxMDIwQTBCNEM2NTFECi06MTAzMTMwMDBCMjFCMkMzMjAwMTVFNjE5NzRDNzA1MkQyMTIzNjVEMzY3Ci06MTAzMTQwMDAyMDJFNTI5RTFBRTYxNTZGRTgwMjYwMDIxNzJBQTIyNjY4Ci06MTAzMTUwMDA2OEEwMDgyQjIyMDAwQUJCMEM2NUIyMDgyRTUyOUQxREU4Ci06MTAzMTYwMDBFNjEwNjRFMUZGOEIzODY0QjIyOTlFMTZDOEJDOEQ2OUY1Ci06MTAzMTcwMDAxRUU2MEQ2NEQwMDUyRUUwMjE3QkVCNDkyRTIwMEMxOEI1Ci06MTAzMTgwMDBFNjA3MENFRjExQThGRjI5RjI4NkMxODY3OThCNEExNzUyCi06MTAzMTkwMDBFNjA0MDdFNzBBMjc3MkEzNjg3MDA0ODgyMDc3ODkzOTU0Ci06MTAzMUEwMDAyNUYyODU2NDUyOUUyNzIxMkUwN0I3MzYwN0I5MEM2RjhBCi06MTAzMUIwMDA5RDAxRDdCMDg5Njk2RTkyNDIyODIwM0Q3Qjg3M0M4QTY5Ci06MTAzMUMwMDAxNUNEQUY2MDAwMThDMUIyOEMyMDJBMjAwQzU4MEU4QjkwCi06MTAzMUQwMDBENUEwNjRBMkE4OEI2ODYzRkZDQkMwNTA2M0ZGQzNDMEI3Ci06MTAzMUUwMDBFMDYwMDAwMjJFNjAwMzBFOUIwQzZFQjIwRURDNzAwQ0QxCi06MTAzMUYwMDBFQTExQUE2QTJBQUMyODVCRkZCNkQ3QTBEQTIwREI3MEY2Ci06MTAzMjAwMDBDMUM0MkQyMTFGNTgwRTMzOEMyNjhCMjdENEEwMENCQjk0Ci06MTAzMjEwMDAwQzdBQjMyNThBNjNDMDkwOUE1Mzg4NjI5OTU4OTg1MjYxCi06MTAzMjIwMDA4RjY1OUY1OThFNjc5RTVCOEQ2Njk3NTU5RDVBOEI2OEZCCi06MTAzMjMwMDA3QjdCNzQ4QjE1Q0VCMzYwMDAwRERBMjBEQjQwNTgwRDFDCi06MTAzMjQwMDBGRDY1QTEwOTYzRkZDQzAwREEyMERCMzA4QzE0NTgwRDNBCi06MTAzMjUwMDBBNEQ2QTBDMEMwQzBEMTlEMTUyQ0E0MDNEQTIwREI2MDg5Ci06MTAzMjYwMDBERjcwREM1MEMwRTAyNTYwMDM5RTEwMUVFNUU2MEM1REJCCi06MTAzMjcwMDAxMUFENkQyRERDMjg1QkZGM0Y4RTY2QTVBODhGNjcyOEZBCi06MTAzMjgwMDA2NDAzQUY3Rjc3RkIwMUIxRUU5RTY2OUY2NzhEMjY4QzRFCi06MTAzMjkwMDAyOUE0REQwRENDMEM5RDI2OEI2ODBDMEM0ODJDMjUyNTEzCi06MTAzMkEwMDAwN0JCMEM5QjY4NjNGRUMzMkMyMDY2ODk2MUIxQ0MwQzA0Ci06MTAzMkIwMDAwQzQ3MkMyNDY2NkVDNjAyNjAwMEI0MDlGRDUwNjVEMDMwCi06MTAzMkMwMDBBRUNCQkI4RTY5Q0JFN0RCNjBEQzUwREY3MERBMjAxRTUzCi06MTAzMkQwMDBFNUUxMkQ2MDAzQzA4MDk4MTAwQ0REMTFBRDZEMkREQzkzCi06MTAzMkUwMDAyODVCRkYyNDhCMTVDODRGOEEyNjg5MjlBNEFBOUEyNjExCi06MTAzMkYwMDAwQTk5MEMwOTA5NDgyOTI1MjU2NUIxM0JDMDIwRDEwRjQxCi06MTAzMzAwMDBEQjYwMkQ2QzI4REY3MERBMjBDMEMwMUVFNUQyOUMxMDc3Ci06MTAzMzEwMDBEQzUwNUJGRUI1NjNGRkNCMDAyRDIwM0QwRDRENDA2NUJECi06MTAzMzIwMDBEREZENkZFNTIyREEzMDhGNDU2REU5MEM4RUFBMEU4RTM5Ci06MTAzMzMwMDAxNEM5RTM3RUYzMTEyQUFDMTBDMDkwMjkyNDY3MDkwRjQ5Ci06MTAzMzQwMDA0NzY0RkREQjYwMDE0MTAwQzA5MTYzRkZFRDAwODgxNTFCCi06MTAzMzUwMDA2NTgxNENEQTIwREI2MDhDMTQ1ODBENjFDMDIwQzA5MDcwCi06MTAzMzYwMDAyOUE0MDNEMTBGREEyMEMwQjY1ODBERjA2M0ZGREUwMEE4Ci06MTAzMzcwMDA4QTE2MkIyMTA0NTgwQzg3QzBBMDJBMjQ2NjhCNjg2MzA4Ci06MTAzMzgwMDBGRjNFMDAwMDAwMkI5Q0Y5NjVCMEM1REEyMDU4MEM4QzdDCi06MTAzMzkwMDA2M0ZEOTUwMDJCMjAwQzBDQkExMUE1QUEyRkEyODZDMUEzCi06MTAzM0EwMDBDMjdGQzMwMjYwMDBGQzBEQjkwQTI5OTJBMzY4OTAwNzhFCi06MTAzM0IwMDA4QzIwMDlDQzBDNjVDMEVCMjZBMjg1NjQ2MEU1MkMyMDJFCi06MTAzM0MwMDA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NkZDNjAyNzA5NjBFCi06MTAzM0QwMDAwQURBRTAyQjIxMDQ1ODBDNkYyNzI0NjY4OTMwNzc5NzhFCi06MTAzM0UwMDA0QjE4RTU3RjFERTU4MDhBMzI4QjMzQzBGNDJDMjEwNDE1Ci06MTAzM0YwMDAwOTlFNDAwNkVFMTEwNENDMTEwRUNDMDI5RjYxQzFFMDgzCi06MTAzNDAwMDAwRUNDMDI5RDYwOEYyQjlBNjY5QjY3OUM2NDk3NjUwODIzCi06MTAzNDEwMDBGRjAyOUY2MjJGMjAwQzE4RTU2OTBDRkUxMUE1RUUyRDBFCi06MTAzNDIwMDBFMjg1QThGRjI3RjRDRjJEREMyMDJERTY4NThGMTU2NURBCi06MTAzNDMwMDBGMDkxQzAyMEQxMEYwMDAwMkEyQzc0OEIxNDU4MDY0QTNBCi06MTAzNDQwMDBEMkEwRDEwRjAwREEyMERCRTA1ODBEQjg2M0ZFRkUwMEY5Ci06MTAzNDUwMDAwMERBMjBEQjMwOEMxNDhEMTU1ODBFM0FEMkEwRDEwRjMzCi06MTAzNDYwMDAwMDAwODgxNUM4ODhEQTIwREIzMDU4MEM5NzJBMjEwMjIyCi06MTAzNDcwMDA2NUFFREFDMDk0MDlBOTAyMjkyNTAyNjNGRUNGREEyMERECi06MTAzNDgwMDAyQjIwMEM1ODBEQzM2M0ZFQzQyNzI0NjhEQTIwREIzMEUwCi06MTAzNDkwMDAyQzEyMDQyRDEyMDUyRTBBODA1ODBDOUM2M0ZDODAwMDBGCi06MTAzNEEwMDBDMDIwRDEwRkRBMjA1ODBEQTE4QTE1Q0RBMURBMjAwMzUyCi06MTAzNEIwMDAzQjAyMkMxMjA0NTgwRDBBMjdBNDAzQzAyMEQxMEYwMDkwCi06MTAzNEMwMDBDMDIwRDEwRjJBMkM3NDhCMTQ1ODA2MjdEMkEwRDEwRkZDCi06MTAzNEQwMDA2QzEwMEUyODIxMDI5NDEwMDgwODRDNjU4MzVFMUZFNUNECi06MTAzNEUwMDAyRjI5RjI5RTZGOTgwMjYwMDM2MjFERTUyQjI5RDIyNkQ4Ci06MTAzNEYwMDA2ODkwMDgyQTIyMDAwOUFBMEM2NUEzNTAyQ0YyOUQ2NDRBCi06MTAzNTAwMDBDMzRBMkIyMDBDMENCNjExQUY2NjI4NjI4NkMxRUM3ODNBCi06MTAzNTEwMDBFMzAyNjAwMzQyMTlFNTIyMDlCOTBBMjk5MkEzNjg5MERGCi06MTAzNTIwMDAwNzhBMjAwOUFBMEM2NUEzMkUyNDYyODU2NDQzMjhDMDVCCi06MTAzNTMwMDBFMTJBMzEwOUMwNzAyNzI0NjY4OTM1OUExMjk5MkE4OEIwCi06MTAzNTQwMDAzNjk5MTM5ODJCODkzNzk4MTQ5OTJDODgzODk5MTUwODJGCi06MTAzNTUwMDA1ODE0OTgxNjk4MkQ4OTM5MkEyNTA0MkUyNTFEMjkyNUI5Ci06MTAzNTYwMDAxQzI4MzAyOEMwOTIyODI0M0MyQTMwMjkwODA4NDc5ODczCi06MTAzNTcwMDAxNzA5ODkwMTJBMjQzRDJBMzExNTk5MTgwQTA5NDEwOTk4Ci06MTAzNTgwMDBBOTBDMjk5Q0VDMjkyNTFGN0U4NzE5MkQyQTAwMERBMDQ2Ci06MTAzNTkwMDA2MDAwMDgzRTAxMEEzRUIxQUQwOERBMzkwRUFBMTEwQUYwCi06MTAzNUEwMDA5OTBDMjkyNTFGMjcyMTFGMThFNTJDMDc4MTYwMDEwODg4Ci06MTAzNUIwMDAzRTAwMEQzRUIxOEEwREE4MzkyRDlDRkMyRDI1MjBDMTYxCi06MTAzNUMwMDA5MDA5ODgzNjA4REQxQzA4NzcxQzg5M0Q4QTNDMkUyNjI4Ci06MTAzNUQwMDAxMzJFMjYxNDJFMjYxNTJFMjQ2QjI5MjUyMjJBMjUyMTZBCi06MTAzNUUwMDAyODIwMTRDMEEwMjcyNTJFMkQyNTJGMDgwODQzMkQyMTgzCi06MTAzNUYwMDAxQzI4MjQxNEMwNzAyNzI1MjQyNzI1MjUyNzI1MkMyNzlGCi06MTAzNjAwMDAyNjE4MjcyNjFCMjcyNDY3MjcyNDY4MjkzMjExMjcyNUY3Ci06MTAzNjEwMDAyMzk5MTk2RUQyMTU2RDA4MEFCMUFBMDBBMTA0MDBFOTE4Ci06MTAzNjIwMDAxQTdEOUIwNTYzRkZFRTAwMDAwMDg5MTkxREU0RkRDMEIzCi06MTAzNjMwMDBFMEMwNzI5QjFEODgxMzk1MUI5RjFGOUMxRTk2MUMxQzJGCi06MTAzNjQwMDBFNTA4MjYyMDNEQzBGMDA2MDU0MDA4REIxNDA3NjYwMUFBCi06MTAzNjUwMDAwRDg4MTBDMDcxMDU3RTM4MDY3RjM4ODUxMjBCRkYxMDZCCi06MTAzNjYwMDAxNkU0RTYwQUVFMTA5NjQwMEZFRTAyMEQ1NTExQjBBRkNCCi06MTAzNjcwMDAwOUZGMTEwRkVFMDIxRkU0RjkwODU1MDIwRkVFMDJDMDE4Ci06MTAzNjgwMDBGNDlGNDE4QTIwOUY0OTk2NDg5QzRCOUI0RTlENDM5RUE4Ci06MTAzNjkwMDA0NjhEMTYxRUU0REE4QjE1QzdDRjlDNEQ5QzRDOUM0NTdECi06MTAzNkEwMDA5QzQ0MEJEODE0MEVBRTAyMERCQjEwOUU0QTlFNDIwOERECi06MTAzNkIwMDA1NTAyOTU0RjBEMTgxNDE1RTRDRDBEODgxMTA1ODgwMjlCCi06MTAzNkMwMDA5ODQ3MThFNEU4ODUyNjJFNDYxMjJFNDYxQTJFNDYyMkUyCi06MTAzNkQwMDAyNjQ2MTAyNjQ2MTgyNjQ2MjAyRjQ2MTEyRjQ2MTkyRjFCCi06MTAzNkUwMDA0NjIxMjg0NjI0Mjg0NjI2MkM0NjE0MkM0NjE1OTUxMTlBCi06MTAzNkYwMDA4QzE3MThFNEREMDUwNTQ4OEYxODA1NTUxMTA5MDY0ODkzCi06MTAzNzAwMDAyODQ2MTM4OTE0MEU2NjExMDY1NTAyMEY3RjM5MEMzRUE4Ci06MTAzNzEwMDA0MDAyRUUxMDE3RTRENjBEOTkxMTBDMjY0MDBGNjYxMUU5Ci06MTAzNzIwMDAwQjk5MDIwQzBDNDA4QjFEMDFDQzEwMDZGRjAyMjc0NkEyCi06MTAzNzMwMDAxQjI5NDYxNkMwNzAyOTMxMTYxNkU0Q0QwRUNDMDIwNUExCi06MTAzNzQwMDBGRjAyMUVFNDlDMTVFNENCMkY0NjE3MjY0NjFDQzBGMDUyCi06MTAzNzUwMDA4NjFDMkY0NjFEMkY0NjFGMkY0NjI3MjU0NjIzMEVDQzlECi06MTAzNzYwMDAwMjg1MUIyQzQ2MUUxRUU0QzQxQ0U0OEU4RjFGOENDN0QyCi06MTAzNzcwMDAyRTQ2MjVBRENDMjgyMDA2MjkyNDZBMjQzMTE3OUMyREZECi06MTAzNzgwMDAyNDI1MjM4QzFFQ0M4MTI3MjQwN0MwRDc3Rjk3MTg4RTMxCi06MTAzNzkwMDAxMTA5Mjg0MTlFMjk2NDgwOEU2NDQwOThDMDk4MDk0OTg3Ci06MTAzN0EwMDAzNjJEMjQwNjYwMDAwQjAwNjQ0MDc1QzA5ODA5NDkzNjI4Ci06MTAzN0IwMDAyRDI0MDYwMUM0MDQyRDBBQTAyRTIxMDQyODYyODUwOEE4Ci06MTAzN0MwMDBFRTExQUQ4ODI4NjY4NTg2M0Y4NDNFMkQzMjEwMDY0ODZFCi06MTAzN0QwMDAxODk4QzMwMEM0MDQwNjQ2MTgxOEU0NzgwNEM0NTMwMEJCCi06MTAzN0UwMDA2NjExMDZERDAyQThCODI3ODRDRjlEQzQwOTA2NEU5NjRGCi06MTAzN0YwMDBDNTFERTRBMzA1QTYxMTA2NDQwMjE2RTRBMDlEQzAwNjVCCi06MTAzODAwMDA0NDAyOTRDMkMwNDMwNEVFMDI5RUMxMTRFNDYzMjZGMjUzCi06MTAzODEwMDA5RDI3NDRBMjI2NkMxODI2RjY5RDY1NTA0MkMwMjBEMUYzCi06MTAzODIwMDAwRkMwOTA2M0ZGODkwMDAwNjU0RjcwQzA5OEMwRTgyRUZDCi06MTAzODMwMDAyNDA2NjNGRjdEMkQyNDA2QzA5MDYzRkY3NUNDNTdEQTA0Ci06MTAzODQwMDAyMERCMzA4QzEwNTgwQzI2QzAyMEQxMEYwMERBMjBDMEFECi06MTAzODUwMDBCNjU4MENCNjYzRkZFNTAwREEyMDU4MENCNDYzRkZEQzAxCi06MTAzODYwMDAyQTJDNzQ4QjEwNTgwNTQwRDJBMEQxMEY2QzEwMDYyODVBCi06MTAzODcwMDAyMDA2OEEzMzZGODIwMjYwMDE2MUMwNTAxM0U0NDcyOTM5Ci06MTAzODgwMDAyMTAyMTZFNDQ2Njk5MjA0MjUyNTAyRDk1MDJDMjAxNTAwCi06MTAzODkwMDA5QTI4MTRFNDQ0OEYyNjI3MjAwQjBBRkUwQzA0NzcwOThCCi06MTAzOEEwMDAyQjcxMUM2NEUxMzk4RTQyOEQ0MzZGQkMwMjYwMDE2RjQ1Ci06MTAzOEIwMDAwMEUxMDRCMEM4MDA4ODFBMDhBODA4MDhEODAyOTgyN0IwCi06MTAzOEMwMDAyQjIwMDY2OEIzMkVDRTk3MkIyMjFFMkMyMjFEMDExMTExCi06MTAzOEQwMDAwMjdCQzkwMUMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQTcxCi06MTAzOEUwMDAyMDAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjgyCi06MTAzOEYwMDBFN0MwMjBEMTBGMkQyMDY0NjRERkNBOEIyOUMwRjEwQkYzCi06MTAzOTAwMDBBQjBDNjZCRkMwMkIyMDBDMENCQzExQTZDQzI4QzI4NjA5Ci06MTAzOTEwMDAyRTBBMDg3OEVCNjExRUU0MjIwRUJFMEEyRUUyQTM2ODhFCi06MTAzOTIwMDBFMDA1MjgyMjAwN0U4OTRGMjlDMjg1MUVFNDJFNjQ5MDdFCi06MTAzOTMwMDA0NjFGRTQzQzlFOTBDMDg0OTg5MTI4MjAwQTk1OTMwRkRFCi06MTAzOTQwMDA4ODAyOTg5MjhFMjAwRkVFMDI5RTk0MkYyMDA3ODgyNkUwCi06MTAzOTUwMDAyRjk1MEE5ODk2OUE5NzJFMjAwNjI1MjQwNzY4RTM0MzA4Ci06MTAzOTYwMDAyOTIxMDIxQUU0MTYyREMyODVBQUJBMkREQzIwMkRDNjAzCi06MTAzOTcwMDA4NTI1QTRDRjYzRkY0RTAwMkIyMDY1Q0JCREMwQzIyQzk0Ci06MTAzOTgwMDAyNDY1QzlGNjA1RTQzMTAwMDIwMDJFNjI4MjFGRTQxRUEwCi06MTAzOTkwMDAyRDQxMDIwRkVFMDIyRTY2ODIwREU0MzEyOTIxMDI2M0QxCi06MTAzOUEwMDBGRjIzMDAwMDY0REZCODg5NDIyODIwMTYwMDkxMDQwRDJGCi06MTAzOUIwMDA4ODBDMDA4ODFBQThBODk4Mjk2M0ZGQTM4QzIwMkQzMkIwCi06MTAzOUMwMDAyMUIxQ0M5Q0QwMkIzMjIxMkEzMjIzQjRCQjJCMzYyMUZGCi06MTAzOUQwMDA3QkE5QTkyRDMyMjIyRDM2MjE2M0ZGQTBDMDIwRDEwRjUzCi06MTAzOUUwMDA5RjI3MjUyNDE1QUNCODI4NzUxQzJCMjAwNkMwQzEyRTk2Ci06MTAzOUYwMDBCQ0ZFNjRFMEFCNjhCNzc3MkRCQ0ZENjVERUM3MkQyMDRCCi06MTAzQTAwMDA2NEMwRjA2NEQwODY4RTI5MEVBRTBDNjZFMDg5QzBGMUU5Ci06MTAzQTEwMDAyODIwNUEyODhDRkUwOENGMzg2NUZFRTg2M0ZGNTgwMDNFCi06MTAzQTIwMDAwMEUwMDQ5MzEwQzA4MTBBRjMwQzAzODMzOUM3OEYwOEE4Ci06MTAzQTMwMDBEODAzMDhBODAxMDhGODBDMDgwODE5QTgzMzAzQzgwQzEzCi06MTAzQTQwMDBBOEI4Mjg3NTFDMDMwQjQ3MkIyNDE1ODMxMENCQjcwMDhGCi06MTAzQTUwMDBFMTA0QjBCQzAwQ0MxQUFDQUMwQ0RDMDI5QzI3NjU5RTI3Ci06MTAzQTYwMDA1RUMwQjIwQjk5MDIwOTA5NEYyOTI1MDI2M0ZFNTAwMDdFCi06MTAzQTcwMDAyRDIwNkEwRDJENDE2NURGN0VEQTIwQzBCMDU4MEM3MjEyCi06MTAzQTgwMDA2NEFGMThDMEYxNjNGRUVGOUYyNzYzRkZEMDJFMjIxRkEzCi06MTAzQTkwMDA2NUVFMzI2M0ZGNzkwMDAwMjgyMjFGNjU4RTI3NjNGRkUxCi06MTAzQUEwMDA2RTI1MjQwNjI1MjUwMkMwOTA2M0ZFMTk2QzEwMDY2NTVDCi06MTAzQUIwMDA3MTMzMkI0QzE4QzBDNzI5M0MxOEMwQTFDMDgwMDlBODdECi06MTAzQUMwMDAzODA4MDg0MjY0ODExMDFDRTNCMTFBRTNCMjJBQzY3RUFBCi06MTAzQUQwMDAyQTVDRkREMzBGNkRBQTA1MDBCMDg4MDA5MDhDODg0MDQ5Ci06MTAzQUUwMDBDMEEwMDg4OTQ3MUZFM0RCMDkwQjQ3MDg0QzUwMDgwREFECi06MTAzQUYwMDA1MzA0REQxMEI0Q0MwNENDMTAwRDVEMDI5RDMxMENCQjIxCi06MTAzQjAwMDAwMjlCMzA4ODQzOEUyMDk4MzUwRkVFMDI5RTMyOEQyNjIwCi06MTAzQjEwMDBEODUwQTZERDlEMjY4RTQwQzA5MDBFNUU1MDY0RTA5NzgyCi06MTAzQjIwMDAxQ0UzQzExRUUzQjAwMzhCMEJDMEY0OUZCMTlFQjAyRDBDCi06MTAzQjMwMDAyMDBBOTlCMzBDREQwMjlEQjI4RjIwMENGRjAyOUZCNEM2Ci06MTAzQjQwMDA4RTI2MkQyMDA3OUVCNjhDMjgyREI1MEE5Q0I3MjkyNEQ5Ci06MTAzQjUwMDAwNzJGMjAwNjJCMjA2NDY5RjMzOUNCQjYxREUzOTIyMzhGCi06MTAzQjYwMDAyMDE2OEREMjBCMzMwQzAwRDEwNDAwMzMxQUEzQzNCNDNBCi06MTAzQjcwMDA4RDkzMjkyMjIwMEMxM0UzOTExRkUzODgwQzJFMTFBRkEzCi06MTAzQjgwMDBFRUEzMjIyOTI0Q0YyRkUyODVEMkEwMEZERDBCMkRFNjU0Ci06MTAzQjkwMDA4NUQxMEYwMEI0OEMyRTIwMEMwQ0VCMTExRkUzODgxRDc3Ci06MTAzQkEwMDBFMzdGQUZFRUFEQkIyMkIyODUyOUU0Q0YwMkMyMEIyMjg4Ci06MTAzQkIwMDBCNjg1RDJBMEQxMEYwMDAwMkUyMDBDMENFQjExMUZFMzE0Ci06MTAzQkMwMDA3RjFDRTM3NkFGRUVBQ0JCMjJCMjg1MjlFNENGMDI4MjQ0Ci06MTAzQkQwMDAwQjIyQjY4NUQyQTBEMTBGQzBEMDBCQUQzODdEQzgwMjY0Ci06MTAzQkUwMDA2M0ZFRUM2M0ZFRTA4RTQwMjcyQzc0N0JFRTEyREE3MEVECi06MTAzQkYwMDBDMEIzMkMzQzE4REQ1MDU4MEE3N0MwOTA4ODQwNjNGRTUzCi06MTAzQzAwMDBFMzA2NkUwMjAyMkEwMjAzM0IwMkRDNDBERDUwNTgwMDRDCi06MTAzQzEwMDAwNDlBMTBEQjUwREE3MDU4MDQ1NDg4MTA2M0ZFRjYwMEUyCi06MTAzQzIwMDA2QzEwMDgyRTNDMThDMEEwOTIxNjFGRTM2ODhDNDBBRkExCi06MTAzQzMwMDAyRjBDOEM0N0MwMjMwNENCMEJEREIwN0ZCMzAyMkRCRDBFCi06MTAzQzQwMDBGOEQ5RDBDMEIwNzVDMzAyNjAwMDhEOUYxNDZEMDg0RkM1Ci06MTAzQzUwMDA4RDkwMEQ2RDM2QURBQTBENjYwQzBFQjcwQjBFQkYwQTFBCi06MTAzQzYwMDA5REYwQjg3N0I4OUZEOEYwMDA4MDg4MDA3MDhDOTcxMUNECi06MTAzQzcwMDA4NzkwOTgxMDk3MTU2OEIxMkFCMjIyNzdEMzJEODg5MTMyCi06MTAzQzgwMDBDMEQwQ0I4Rjk4OTAyNzlDMTAwMDcwODg5NzEyMDBGMEJFCi06MTAzQzkwMDA4QzlGMTM5RDkxNjQ2MEEwQzA4MTA4QkIwMzc1Q0IzOEQ1Ci06MTAzQ0EwMDA2M0ZGQTkwMEIxMjIyRUVDMTg2M0ZGQ0U4NTkyMEQ3NzM5Ci06MTAzQ0IwMDAwQzg2OTM5NzkwQTZENjdENkIwMUIxNTU5NTkyOTY5M0ZECi06MTAzQ0MwMDA4OTQyNjAwMDE3QjNDQzI5OUMxODg4MTRERDkwNzg5MzQyCi06MTAzQ0QwMDAwMjJEOURGOEQ5RDA2M0ZGQkI4OTQyREE5MDg1MTYwQzdFCi06MTAzQ0UwMDAwRDQ3MkQ0NDAyMUJFMzY3OTIzMTlCMzA4NjQzN0E5MTQ2Ci06MTAzQ0YwMDAyNjFCRTM1ODFFRTM2NTg5NTAwRTY2MDE5NjM1MEI5OTI1Ci06MTAzRDAwMDAwMjk5MzI4ODQyMEE4ODBDOTg0Mjg3NTZBN0E3OTc1NjhDCi06MTAzRDEwMDA4RjQ0QUZBRjlGNDREMTBGMUJFMzRGODk1MDk2MzUwQkIzCi06MTAzRDIwMDA5OTAyOTkzMjg4NDIwQTg4MEM5ODQyODc1NkE3QTc5NzI5Ci06MTAzRDMwMDA1NjhGNDRBRkFGOUY0NEQxMEY4OTQyNjNGRjlFMDAwMDZFCi06MTAzRDQwMDA2QzEwMDYxRkUzNTI5MzEwRDYzMDg4MzBDMDkxMDg2MzgwCi06MTAzRDUwMDA1MTA4MDg0NzA1OTgzODk4MTEyODIxMDIyOTNDRkQwODg4Ci06MTAzRDYwMDAwODRDNjU4MTU3NjU5MTU0MkE2MjAzMEEyQjUwNjVCMTRFCi06MTAzRDcwMDA3RTBBNjgxNDJFMEFGRjdDQTYwQTJDMjA1QUNDQzQyRDc5Ci06MTAzRDgwMDAwQTAyMkQyNDVBNzhFMDAyNjAwMjA4OEEyODg5MjYxODNGCi06MTAzRDkwMDBFMzQwMEE5OTBDNjU5MjAzMkUyMDBCMUNFMzNGMDhFRUNBCi06MTAzREEwMDAwQjJFRUQwMTJERTAzMjJFRTAzMzA4REQxMTBFREQwMjg5Ci06MTAzREIwMDAxRUUzMzlBRkREMEVERDAxMERDQzM3MkQyMDBDODk2MEZGCi06MTAzREMwMDBDMUUwN0I5NjIzMUFFMkY3OEI2MjJBQTAyMTlDMTI3QjJBCi06MTAzREQwMDBBMzE2REFEMEMxQjAwQjRCMzdCNEJCOEMyMDU4MEI4NzdECi06MTAzREUwMDA4QzEyREJBMENFQUI2MDAxQkYwRTRFMzcxQkUyRUMwQzk5Ci06MTAzREYwMDBEQTExQUJBQTI4QTI4NkI4RUU3OEVCMzUxRUUyRTkwRUZFCi06MTAzRTAwMDBERTBBMkVFMkEzNjhFMDA0ODgyMDdFODkyNDJCQTI4NUE2Ci06MTAzRTEwMDA2NEIwQTI4NzYyREU3MDBDNzkzNjlCMTM4ODI2OEQyN0VBCi06MTAzRTIwMDAwOTdBMEMwOEREMEM2RkFEMEU3N0QzMTA3RTdCNjk2MENDCi06MTAzRTMwMDAwMDFGQzBCMDYzRkZEODAwRDc5MDYzRkZFQjlDMTJEQTdECi06MTAzRTQwMDAyMERCNzA1ODBBRkM4QjEzOEMxMjY1QTA2RjhFNjI3RThCCi06MTAzRTUwMDA3QjQ2OUMxMjlCMTNDQzVGREEyMDhCMTAwNDRDMDI1OERCCi06MTAzRTYwMDAwQUEwRDZBMDhCMTMyNTBBMDFERTcwREEyMERDNjBERDAzCi06MTAzRTcwMDA0MDVCRkY2QjhDMTJEOUEwMkQyMDBDQzBFMDFCRTJDNzY5Ci06MTAzRTgwMDAxN0UyQ0YwQ0RBMTFBN0Q3QUJBQTJCQTI4NTJFNzRDRkRECi06MTAzRTkwMDAwQjk5MEIyOUE2ODU2M0ZGMjREQTIwREM2MERENDBERTY4Ci06MTAzRUEwMDA3MDg5MTEyODIwMDdERjUwQTk4ODI4MjQwNzVCRkVGRkFFCi06MTAzRUIwMDBEMkEwRDEwRjAwMDBEQkQwREEyMDU4MEIxQzY1NTBGM0U0Ci06MTAzRUMwMDAyQTIwMTQwQTNBNDA2NUEwRUVEQjYwREM0MEREMzBEQURGCi06MTAzRUQwMDAyMDU4MDk4RTFGRTJFRUQ2QTA2NEEwRDc4NEExODNBMDRCCi06MTAzRUUwMDAwNDA0NDcwMzA1NDc5NTExMDM2MzUxQzA1MTYzRkU2OEZECi06MTAzRUYwMDAyQzIwMDYyOENDRkQ2NDgwQTg2OEM3MDRDMDkzMjkyNDIwCi06MTAzRjAwMDAwNkMwQzE4RTY0MTlFMkE3OUUyNjlFMjk5RTI4ODk5MjJBCi06MTAzRjEwMDA5RTI3MDA5MTA0MDBDQzFBMDA5MDA0QjBDODhENjUwODVCCi06MTAzRjIwMDBFRTAxQUVDQzBEMEU1RTAxRUUxMUFFQ0NCMENDMkUwQTgxCi06MTAzRjMwMDBGRTBDMEMxOTBFQ0MzNkMwRTIwQzBDNDcwRUNDMzcyQzA0Ci06MTAzRjQwMDAyNDE2QzBCMDJCMjQwNzJDMjAwNjFCRTI5RjBBMEU0NTI2Ci06MTAzRjUwMDAwRDA4NDIyODI0MEIyRTI0MEFCNDg5MjkyNDBDN0RCODhDCi06MTAzRjYwMDA1QTI5MjAxNjBBNUQ1MkIwOUUwRUREMzYyRDI0NjQyQjkwCi06MTAzRjcwMDBDQ0ZENjVCREZCMEQwQzQ3NjRDREY1MURFMjhBODgyODlDCi06MTAzRjgwMDA4REQyMEM5QjBDMDBEMTA0MDBCQjFBQUI4ODk4Mjk2MzFFCi06MTAzRjkwMDBGRERFMDAwMDFDRTJCOTYzRkUyMDAwMDAxQ0UyQUY2M0ZFCi06MTAzRkEwMDBGRTE4OEQ2NTYzRkZBMjAwMDBEQTIwMkIyMDBDNTgwQTUyCi06MTAzRkIwMDBGODY0NUYwQkMwMjBEMTBGQzAyMEQxMEZDMDkzQzBFM0M1Ci06MTAzRkMwMDAyRTI0MTY2M0ZGOUQwMDAwNkMxMDA0QzA2MDE3RTI3MjdGCi06MTAzRkQwMDAxREUyNzVDMzgxMjkzMTAxMkEzMDA4MjkyNDBBNzhBMUZDCi06MTAzRkUwMDAwOEMzQjI3QkExNzJEMjYwRDEwRkMwQzE2NTUwNTEyNjA3Ci06MTAzRkYwMDAyNTAyMkFEMDIwMkYyMDBCMjkwQUZCMkIyMDE0MkUyMDRCCi06MTA0MDAwMDAxNTI2MjQxNTA5QkIwMTBERkYwOTI4RjExQzJCMjQxNENBCi06MTA0MDEwMDBBOEVFMkVGNTFDNjRBMEI1MkIyMjFFMjgyMjFEMDExMTJFCi06MTA0MDIwMDAwMjdCODkwMURCNjA2NEIwMTcyQ0IwMDcyOEIwMDBEQThFCi06MTA0MDMwMDAyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRjI2Ci06MTA0MDQwMDBFN0RCMzBEQzQwREQ1MERBMjA1ODAwRDgyOTIxMDIwOUI2Ci06MTA0MDUwMDAwQjRDQ0FCMkQyQTBEMTBGMDBDQzVBMkMzMDA4N0JDMTc1Ci06MTA0MDYwMDAzNzJFRDAyMDY0RTAyRDAyMkEwMjAzM0IwMkRDNDBERDIzCi06MTA0MDcwMDA1MDU4MDBDRUQyQTBEMTBGMkIyMDE0QjBCQjJCMjQxNDRCCi06MTA0MDgwMDAwQjBGNDE2NEYwODI3Q0I3Q0FDMEMxMEM5QzAyMkMyNTg2Ci06MTA0MDkwMDAwMkQyQTBEMTBGQzAyMEQxMEYyRTIwMDY2OUUyQzEyRjdECi06MTA0MEEwMDAyMTAyMEYwRjRDNjlGMUI4MjYyNDA2MjYyNTAyMkIyMjg3Ci06MTA0MEIwMDAxRTI4MjIxRDJBMjAwQjI5MjAxNTBEQUEwOTJDQTExQzFGCi06MTA0MEMwMDAyNjI0MTVBQzk5MjlBNTFDN0I4MTRBNjAwMDQ5QjBCQjA4Ci06MTA0MEQwMDAyQjI0MTQwQjBENDFDQkQ2N0NCNzAyMkMyNTAyMkIyMkFFCi06MTA0MEUwMDAxRTJFMjIxRDdCRTkwMjJCMEEwMDY0QjAxNzJDQjAwNzlDCi06MTA0MEYwMDAyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMDQzCi06MTA0MTAwMDBEQkEwNjVBRkU3QzAyMEQxMEYyNjI0MDZEMkEwRDEwRkQ3Ci06MTA0MTEwMDAyNjI0MDY2M0ZGQzdEQjYwMURFMjIzNjRCRjQyMkNCMDg4Ci06MTA0MTIwMDAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDMEQxMEI4MDBCCi06MTA0MTMwMDAwMERCQTA2NUFGRTcxREUyMUI2M0ZGMjQ2QzEwMDQyOEMxCi06MTA0MTQwMDAyMDA2QzA2NDZGODU2NENBNUIyOTIwMTQ3RDk3MjZEQTM3Ci06MTA0MTUwMDAyMERCMzBEQzQwMDU1RDAyNTgwMDE5MjkyMTAyMDkwQUU0Ci06MTA0MTYwMDA0Q0M4QTNDMDIwRDEwRjAwQzBCMTBCOUIwMjJCMjUwMjZECi06MTA0MTcwMDBDMDIwRDEwRjAwMDAwMjJBMDIwMzNCMDIyQzBBMDE1ODgyCi06MTA0MTgwMDAwMEM5QzlBQURBMjBEQjMwREM0MDU4MDlENTI5QTAxMUMyCi06MTA0MTkwMDBEM0EwN0U5NzA4MkMwQUZEMEM5QzAxMkNBNDExQzA1MUMxCi06MTA0MUEwMDAyRDIwMTQwNkREMDIyRDI0MTQ2M0ZGQTJEQTIwREIzMDVCCi06MTA0MUIwMDBEQzQwREQ1MEMwRTA1ODA5NTVEMkEwRDEwRjAwMDAwMDBFCi06MTA0MUMwMDA2QzEwMDYxNkUxRjYxQ0UxRjY2NTUxM0JDMEUxMTdFMTAzCi06MTA0MUQwMDBGMjI4MjEwMjhCMjAwODA4NEM2NTgwN0MyOTMyMDAwOUQ2Ci06MTA0MUUwMDA2OTUxNjk5MzczMkE2MjlFNkVBODQ4MkE3MjI2NjhBMDU0Ci06MTA0MUYwMDAwMjdBQjkzRjJBNjI5REI0NEZDQkE3MkIyMDBDMENCRDhECi06MTA0MjAwMDAxMTA2REQwODI4RDI4Njc4RkIxNTBDQkYwQTJGRjJBMzExCi06MTA0MjEwMDA2OEYwMDQ4ODIwN0Y4OTA3MkREMjg1RDMwRjY1RDA2MDkwCi06MTA0MjIwMDAyQTIxMDQxOUUyMUVEMzBGN0E5QjFEREEyMDU4MDg1MzY1Ci06MTA0MjMwMDA2MDAwMjUwMDJDMjEwNDFCRTIxOTdDQkIxNERBMjBDMDhECi06MTA0MjQwMDBCNjU4MDg0RUM5NTQ2MDAwRUZEQTIwNTgwQTM4NjAwMEFBCi06MTA0MjUwMDAwNzAwREEyMEMwQjY1ODBBMzU2NTUwRENEQzQwREIzMDk4Ci06MTA0MjYwMDA4RDMwREEyMDBENkQ1MTU4MDhBOUQzQTA2NEEwQzkxQzY3Ci06MTA0MjcwMDBFMUNDQzA1MTg0QTE4RUEwMDQwNDQ3MEUwRTQ3NjNGRjE5Ci06MTA0MjgwMDA0RjJCMjEwNEMwOEM4OTMxQzA3MERGNzAwOUY5NTAwOUFGCi06MTA0MjkwMDA4RjM4NkVCODE3MkMyMDY2QUVDQzBDMEM0NzJDMjQ2NkQ5Ci06MTA0MkEwMDA3Q0ZCMDk5RDEwNTgwOEJCOEQxMDI3MjQ2Njk0RDExRUY1Ci06MTA0MkIwMDBFMUQyQjhEQzlFRDA2NTUwNTZDMEQ3QjgzQUMwQjFDMDg0Ci06MTA0MkMwMDBGMDBDQkYzODBGMEY0MkNCRjExOUUxQjAxOEUxQjIyODYyCi06MTA0MkQwMDA5NjdFQjA0QkQzMEY2REJBMDUwMEEwODgwMEMwOEMyQzIxCi06MTA0MkUwMDAyMDBDQzAyMDFERTFCNjBDQ0YxMUE2RkYyRUYyODVBRDJCCi06MTA0MkYwMDBDQzI3QzRDRjBFNEUwQjJFRjY4NUQxMEZDMDgwMEFCODQ2Ci06MTA0MzAwMDAzODc4RDBDRDYzRkZDMTAwOEUzMDBFMEU0NzYzRkVCREZFCi06MTA0MzEwMDAyQTJDNzQyQjBBMDEwNDREMDI1ODA4QUUyRjIwMEMxMkNGCi06MTA0MzIwMDBFMUE3MENGOTExQTY5OTI4OTI4NUEyRkYyN0Y0Q0ZEMjE0Ci06MTA0MzMwMDBBMDA4NDgwQjI4OTY4NUQxMEZDMDIwRDEwRjAwMDAwMDlGCi06MTA0MzQwMDA2QzEwMDRDMDYwQ0I1NURCMzBEQzQwMDU1RDAyMDIyQUY2Ci06MTA0MzUwMDAwMjVCRkY5QjI5MjEwMjA5MDg0Q0M4ODJEMkEwRDEwRjIxCi06MTA0MzYwMDAyQjIwMTRCMEJCMkIyNDE0MEIwQzQxQ0JDNTdEQjdFQjE5Ci06MTA0MzcwMDBDMEMxMEM5QzAyMkMyNTAyRDJBMEQxMEYwMDAwMDIyQTQxCi06MTA0MzgwMDAwMjAzM0IwMjA2NkMwMkMwRDBDN0Y3MkUyMDE0MjgzMTZFCi06MTA0MzkwMDAwMTI2MjUwMjI4MjQwQTBGRUUwMTJFMjQxNDU4MDEwQ0IwCi06MTA0M0EwMDA2M0ZGQTMwMDI2MjQwNkQyQTBEMTBGMDA2QzEwMDYyOEJDCi06MTA0M0IwMDAyMTAyRDYyMDA4MDg0QzY1ODA5OTJCMjAwQzEyRTE3NzQ5Ci06MTA0M0MwMDAwQ0I4MTFBMjg4MkE4Mjg2QjU0OTdBOTMwMjYwMDA5M0JDCi06MTA0M0QwMDAxOUUxNzQwOUI5MEEyOTkyQTM2ODkwMDgyQTYyMDAwOUIwCi06MTA0M0UwMDBBQTBDNjVBMDdFMjg4Mjg1MUNFMTdGNjQ4MDc1OUM4MDc0Ci06MTA0M0YwMDBCODg3QjE0QjlCODE5QjEwNjU1MDcyQzBBN0Q5NzAyOEJDCi06MTA0NDAwMDAwQTAxQzBEMDA3OEQzODBEMEQ0MkNCREIxRkUxNjAxRUM1Ci06MTA0NDEwMDBFMTYxMkVGNjdFRDgzMEQzMEY2RDRBMDUwMDgwODgwMDBBCi06MTA0NDIwMDA5MDhDQzA4MDJGMzAwODJGNzQwMDI5NjAwQzFBRTE2MzMzCi06MTA0NDMwMDAwQzlEMTFBMkREMkNEMjg1QzAyMEFBOTkyMjk0Q0YwQzBDCi06MTA0NDQwMDBCQzBCMkNENjg1RDI4MEQxMEZDMEUwMDM4RTM4N0VBMDY1Ci06MTA0NDUwMDBDMzYzRkZCN0NDNTgyQTZDNzREQjMwREM0MDU4MDdFMUVCCi06MTA0NDYwMDBDMDIwRDEwRkRBNjA1ODA5QjE2M0ZGRTcwMDAwREQ0MERBCi06MTA0NDcwMDA4NTEwMkE2Qzc0QzBCMERDNzA1ODA4NTYyRjMwMDgyRjk1Ci06MTA0NDgwMDA3NDAwMjg2MDBDQzBGMDBDOEIxMUEyQkIyOUIyODUxMkZECi06MTA0NDkwMDBFMTRCMDk1OTBCQTI4MjJGMjRDRjI5QjY4NUQyQTBEMTk2Ci06MTA0NEEwMDAwRjAwMDAwMDZDMTAwNDI5MjAxNDI4MjAwNkIxOTkyOTVGCi06MTA0NEIwMDAyNDE0Njg4MTI0QzBBRjJDMEEwMTJCMjEwMjJDMjQwNjZECi06MTA0NEMwMDA3QkEwMDRDMEQwMkQyNTAyMDIyQTAyMDMzQjAyMDQ0QzJCCi06MTA0NEQwMDAwMkMwRDA1ODAwQkZEMkEwRDEwRkMwMjBEMTBGMDAwMDIxCi06MTA0NEUwMDA2QzEwMDQyOTMxMDFDMkI0MjkyNDBBMkEzMDExQzI4Mzc0Ci06MTA0NEYwMDA3OEExNkM3QkExNjk2NDUwNDcyQzIwMDZDMDY4NkZDNTA5Ci06MTA0NTAwMDA2MkNBNTcyRDIwMTQ3Q0Q3MjJEQTIwREIzMERDNDBERDU0Ci06MTA0NTEwMDA1MDVCRkZBNjI5MjEwMjA5MEU0Q0M4RTJDMDIwRDEwRjMyCi06MTA0NTIwMDBDMEYxMEY5RjAyMkYyNTAyQzAyMEQxMEZEQTIwREIzMDBGCi06MTA0NTMwMDBDMEMwNUJGRkRDMjgyMDE0MDY4ODAyMjgyNDE0NjNGRjE3Ci06MTA0NTQwMDBDNzI5MjAxNTFCRTExODJBMjAwQkMwQzA5QzI0MEJBQUU4Ci06MTA0NTUwMDAwOTJCQTExQzJDMjQxNUFCOTkyOUE1MUM2M0ZGOTkwMERDCi06MTA0NTYwMDBDMDIwRDEwRkRBMjBEQjMwREM0MERENTBDMEUwNTgwODNECi06MTA0NTcwMDA2N0QyQTBEMTBGMDAwMDAwNkMxMDA0Q0I1NTEzRTExM0RCCi06MTA0NTgwMDAyNTIyMUYwRDQ2MTEwNjU1MENBMzIzMjYyMjFFMjUyNjgzCi06MTA0NTkwMDAxRjA2NDQwQjI0MjYxRTczNEIxREM4NTJEMjQwRDEwRjU4Ci06MTA0NUEwMDAyODBBODBDMDQwMjQyNjFGQTgyODI4MjYxRTI4MjYxRDQ5Ci06MTA0NUIwMDBEMjQwRDEwRkMwMjBEMTBGMjQ0REY4MjQyNjFFNjNGRjE2Ci06MTA0NUMwMDBEODAwMDAwMDZDMTAwNDI4MjAwNkQ2MjA2RTg1MDI2MEZBCi06MTA0NUQwMDAwMERFMTdFMEYyMURFMEY5MTlFMEYyQzBDMUMwMjAyQUE4Ci06MTA0NUUwMDA4Q0ZDNjRBMTMyMkI2MTAyQjQ0RTBCMEI0QzY1QjBBODVECi06MTA0NUYwMDAyQjYwMEMyQTYyMDAwQ0I4MTEwNzg4MDgyRjgyODYwOUVDCi06MTA0NjAwMDBCOTBBN0ZFMzAyNjAwMDlGMjk5MkEzNjg5MDA1MDlBQTc2Ci06MTA0NjEwMDAwQzY1QTA5MzI4ODI4NTY0ODA4REI4ODkxQkUwRjc5NDhGCi06MTA0NjIwMDA4MTlCODA2NTUxNERDMEI3QjgzOEMwQTFDMEUwMDlBRUNDCi06MTA0NjMwMDAzODBFMEU0MjY0RTA0ODFBRTBENTFGRTBENjJGQTY3RTYxCi06MTA0NjQwMDBCMDRBNkRBQTA1MDA4MDg4MDA5MDhDQzBBMDJFNjAwQzM2Ci06MTA0NjUwMDAwQ0U4MTFBNzg4MkY4Mjg1QURFRTBGNEYwQjJGODY4NUIyCi06MTA0NjYwMDAyQjYwMDYyMkU0Q0Y2OEIxMkEyOTYwMTVDMEIyQzk5QTJFCi06MTA0NjcwMDBEMkEwMkQ2MTAyMkI2NDA2MENERDAyMkQ2NTAyRDEwRjQ0Ci06MTA0NjgwMDBDMEUwMDhBRTM4N0VCMEI3NjNGRkFCMDAyMjY0MDZEMjRDCi06MTA0NjkwMDBBMEQxMEYwMEQyQTBEMTBGMDBDQzU3REE2MERCMzBEQzA0Ci06MTA0NkEwMDA0MDU4MDg4RkMwMjBEMTBGREE2MDU4MDkyMDYzRkZFODE2Ci06MTA0NkIwMDAwMDI4MjIxRTI5MjIxRDc4OTkwMjI4MEEwMEMxNzZDMUVECi06MTA0NkMwMDBDMUMxRDIxQkUwQzJDMTI0QUI2QjY0ODA0Mzc4OTE0MDZFCi06MTA0NkQwMDAyQTgwMDAwQ0FGMEM2NEYwQUUwREFFMEM2NEUwQTgwMkIyCi06MTA0NkUwMDBBRjBDNjRGMEEyMDdBRTBDNjRFMDlDMkZBQ0U4NjRGMDYxCi06MTA0NkYwMDA5NjJFQUNFNzY0RTA5MDJGQUNFNjY0RjA4QTJBODAwNzNGCi06MTA0NzAwMDAwOEE4MEIwODhBMDI3QjgzMDIyQThERjhEOEEwNjVBRjFGCi06MTA0NzEwMDBCQkMwOTA2MDAwNzMwMDAwMkI2MDBDMENCODExQTc4ODIwCi06MTA0NzIwMDAyRTgyODY2RUU4NzkwOUJBMEEyQUEyQTM2OEEwMDQ4RUFFCi06MTA0NzMwMDA2MDdBRTk2QjJBODI4NTY0QTA2NTFGRTBBQUMwRTMyRTM3Ci06MTA0NzQwMDA2NDA2OUVBMTlGQTAxRkUwRDYyRTYwMEE5MkEzMEZFRUUyCi06MTA0NzUwMDAwMjlFQTI4RTYwMEZFRTAyOUVBNDJGNjAxNDdBRkY0Nzg1Ci06MTA0NzYwMDAyMkE0MTcyRjgyODVBREJFMjJFNENGMkZGQzE4MkY4NkZFCi06MTA0NzcwMDA4NTYzRkU3MDJBNkM3NEMwQjFEQzkwREQ0MDU4MDc5NUVCCi06MTA0NzgwMDAxREUwOEZDMEMxNjNGRUM0RDlBMERBNjBEQjMwREM0MDFECi06MTA0NzkwMDBERDUwQzJGMEMxRTAwOUZFMzk1ODA3RENEMkEwRDEwRkNDCi06MTA0N0EwMDBEQTYwNTgwOEUyNjNGRUYwMkNBNDE3Mjk4Mjg1MERCRTVBCi06MTA0N0IwMDAwODIyRTRDRjI5OUMxODI5ODY4NTY0NTAwQzJBNkM3NDQxCi06MTA0N0MwMDAwNDRCMDI1ODAxNjlEMkEwRDEwRkMwMjBEMTBGMDAwMEM0Ci06MTA0N0QwMDA2QzEwMDYyQjIyMUUyODIyMUQ5MzEwN0I4OTAxQzBCMDZECi06MTA0N0UwMDBDMEM5QzAzQkMxRjIwNDA2NDAxREUwNzhDMEUyQzA3NEZECi06MTA0N0YwMDAwNzQ3MDEwRTRFMDFBRDJEOUUxMUMwNDAyRTBBMTQ2NEQ0Ci06MTA0ODAwMDBCMDZFNkQwODQ0MjgyMjFEN0I4MTY1MkFCMDAwN0VBMTEwCi06MTA0ODEwMDAzQjdGQTE0NzdCNTEyMDdDQTE0OTY4QTkxNzY4QUExNDU2Ci06MTA0ODIwMDA3M0ExMTFDMDlGNzlBMTBDQzE4Qjc4QTEwN0MxQUUyOURBCi06MTA0ODMwMDAwQTFFMjlCNDAwN0NBMTJCMkFCMDA3MEJBQjBCREFCMEZGCi06MTA0ODQwMDA3REIzMDIyQUJERjhEQkEwQ0FBNTYzRkZCNDI4QjAxMDZGCi06MTA0ODUwMDA4OTExNjk4N0JCNjQ5RkI4NjNGRkRDMDA2NDdGQjQ2MzIwCi06MTA0ODYwMDBGRkQ1MDAwMDY0NkZEMEMwNDFDMUFFMkFCNDAwNjNGRjIxCi06MTA0ODcwMDBDNjJCMjEwMkNFQkUyQTIyMUQyQjIyMUU3QUIxMkE4Q0UzCi06MTA0ODgwMDAxMDdDQjEyMTdBQjkwMUMwQjBDOUI5MTNFMDQzREEyMDc0Ci06MTA0ODkwMDAyOEIwMDAyQ0IwMDcwMzg4MEEyODgyNENDMEQxMEI4MEI2Ci06MTA0OEEwMDAwMERCQTA2NUFGRTdEMjQwRDEwRjg5MTA2NTlGRDQ2M0NDCi06MTA0OEIwMDBGRkYzMDAwMDZDMTAwOEMwNzA2NDUxNzE4RjMwMjkyMTIzCi06MTA0OEMwMDAwMjBGMEY0NzE2RTAzNjA5MEM0QzY1QzA4RjhEMzAwRDc2Ci06MTA0OEQwMDA2RTUxNjhFMzAyNjAwMDg0Mjg2MjlFMUFFMDJGNkU4OEExCi06MTA0OEUwMDA1MjJBQTIyNjY4QTAwNDhCMjA3QUI5NDcyQTYyOURCMDdBCi06MTA0OEYwMDA0RUNCQUY5QTEwMkIyMDBDOUUxMTBDQkMxMUE2Q0MyOUNDCi06MTA0OTAwMDBDMjg2Qjc0ODc5OEI0MTE3RTAyNjA3QjcwQTI3NzJBM0ZBCi06MTA0OTEwMDA2ODcwMDQ4ODIwNzc4OTMwMkNDMjg1OUMxMkQ3QzA2NUM2Ci06MTA0OTIwMDBDMDYyMkMyMTA0MUFFMDVEN0NBQjIyREEyMDU4MDY5Mzg5Ci06MTA0OTMwMDA2MDAwMjkwMDJFMjEwNDFERTA1OTdFREIxOERBMjBDMDFBCi06MTA0OTQwMDBCNjU4MDY4RUM5NTg2MDAxNTZDMEMwNjNGRkNDREEyMDQ1Ci06MTA0OTUwMDA1ODA4NzY2MDAwMDZEQTIwQzBCNjU4MDg3NDY1NTEzRkUyCi06MTA0OTYwMDBEQzQwREIzMDhEMzBEQTIwMEQ2RDUxNTgwNkU4RDNBMEU1Ci06MTA0OTcwMDA2NEExMkNDMDUxMjkyMTAyODRBMThGQTAwNDA0NDcwRkY3Ci06MTA0OTgwMDAwRjQ3NjNGRjQxMkIyMTA0QzA4Qzg5MzFDMEEwMDlGOTc2Ci06MTA0OTkwMDA1MDA5OEEzODZFQjgxRTJDMjA2NkFGQ0MwQzBDNDcyQzAwCi06MTA0OUEwMDAyNDY2N0NBQjEwOUUxNDJBMTIwMDU4MDZGQThFMTRDMDlFCi06MTA0OUIwMDBEMDJEMjQ2NjhEMzBDMDkyMUJFMDEwQzFGODdGRDYwQzNDCi06MTA0OUMwMDA4NzEyOUI3MDI5NzYwMTJGNzQwODI3N0MxMDY1NTBCN0Q5Ci06MTA0OUQwMDBCODNBQzBEN0RDNzBDMDUxQzA4MDA3NTgzODA4MDg0MkM4Ci06MTA0OUUwMDA2NDgwNzkxRERGRUExOURGRUIyOUQ2N0U2QTQyMEFEMzlCCi06MTA0OUYwMDAwRjZERTkwNTAwQTA4ODAwQzA4Q0MwQTA4ODMwQzA5MjZGCi06MTA0QTAwMDA3Rjg2MzgwN0U4MEIyRjg0MDg5QjgwOTk4MUI0RTgyQ0I3Ci06MTA0QTEwMDAyMDBDQzA5MDFEREZFQTBDQzMxMUE2MzMyMjMyODVBREY1Ci06MTA0QTIwMDBDQzAyODIwQjI5QzRDRjIyMzY4NUQyQTBEMTBGOEEzMDg2Ci06MTA0QTMwMDBDMEYxN0VBRTMyMjkyMTAyNjNGRTg4MDAyQzIwMEM4RTRDCi06MTA0QTQwMDAxMUMwQjAxRERGREUwQ0NGMTFBNkZGMjJGMjg1QURDQzY4Ci06MTA0QTUwMDAyQkM0Q0YwMkVFMEIyRUY2ODVEMkEwRDEwRkMwODAwQTU4Ci06MTA0QTYwMDA1ODM4NzhEMDg2NjNGRjdBOUYxM0RCMzBEQTIwQzBDMUQ0Ci06MTA0QTcwMDBERDcwNUJGRjU3MjkyMTAyOEYxMzJBOUNGRTY1QUU0MzMwCi06MTA0QTgwMDAyNzI1MDJDMDkwNjNGRTNCOUUxNDJBMkM3NEMwQjFEQzIzCi06MTA0QTkwMDA3MERENDA1ODA2RDA4RTE0MUJERkQ4QzFGODYzRkY1QjcxCi06MTA0QUEwMDBDMDIwRDEwRjZDMTAwNjI4MjEwMjE2REZCQzA4MDg0QzZDCi06MTA0QUIwMDA2NTgyMTUyOTYyOUU2Rjk4MDI2MDAyMUMxOURGQjcyOTcyCi06MTA0QUMwMDA5MjI2Njg5MDA3OEEyMDA5QUEwQzY1QTIwQjI3NjI5RDhFCi06MTA0QUQwMDBDMENDNjQ3MjAzMkIyMTA0OEUzMUMwQTBEREEwMEVGRTc5Ci06MTA0QUUwMDA1MDBFQ0QzODZFQjgxMTJDMjA2NjJDQ0MwMTBDMEM0NzIyCi06MTA0QUYwMDAyQzI0NjY3Q0RCMDI2MDAxRUFDMEMxMjkzMDA4MUJERjgwCi06MTA0QjAwMDBBOTY0OTA5NzJGMEFGRkMwRDNCMDlFNjRFMEZENjg5MjFECi06MTA0QjEwMDAwRTY0NTA4MzJBMkM3NERCNDA1ODAwOTNEMkEwRDEwRjJFCi06MTA0QjIwMDAyQjIwMEMyNzIxMDQwQ0JDMTFBNkNDMjlDMjg2MjgwQUY0Ci06MTA0QjMwMDAwODc5ODMwMjYwMDFCOTE5REY5QTA5QjkwQTI5OTJBMzk5Ci06MTA0QjQwMDA2ODkwMDgyRTIyMDAwOUVFMEM2NUUxQTQyRUMyODU2NDRGCi06MTA0QjUwMDBFMTlFMjYyMDA3MTNERkEzNkU3QjAyNjAwMTlBMTdERjE4Ci06MTA0QjYwMDA5QTFGREZBMzE5REZEMEMwRDIyODIwMEE5M0UwOURFMTZECi06MTA0QjcwMDBBOTY5MEY4ODAyOThFMjJGOTA4MDJBOTQ4MEIxRkYwN0RDCi06MTA0QjgwMDBGRjAyOUZFMzFFREY4RTJGQzI4NUFFQkUwRkRGMEIyRjBECi06MTA0QjkwMDBDNjg1MkFFNENGNjU1RjdCQzAyMEQxMEYyRjMwMTAyOTU2Ci06MTA0QkEwMDAzMDExMkUzMDEzMDA5OTMyMDBFRDMyNjRGMEVFMkEzMENECi06MTA0QkIwMDAxNDFGREZCRDAwQUEzMjc4RUYwNTBGOUUwOTJERTQ3Rjk4Ci06MTA0QkMwMDAxRURGQkI2NkEwMDUwRjk4MDkyQTg0ODBCNEE3MThERkYyCi06MTA0QkQwMDBCOEM3NkYwMDkxMDRBRTlFRERFMDAwQUYxQTAwQzMxQUEzCi06MTA0QkUwMDA2RUUxMDUyREIyMDAwREVEMEMxRURGQjIwOEQ4MUMwNkRCCi06MTA0QkYwMDAzMzAzQUU4ODJBODQ4QjJFQjAyRTI3ODQ4QzAzRUUwMURCCi06MTA0QzAwMDAwRkVFMDIyRUI0MkU1ODAxOEY2M0ZGMDQyOTMxMDgyOUJDCi06MTA0QzEwMDAyNTA0MjgzMDE0MkUzMTA5QjA4ODY0ODBBMzJFMjQwQTdDCi06MTA0QzIwMDBDMDgxMkUzMDE2MkNCNDIzMkUyNDBCQjRFRjJGMjQwQzZECi06MTA0QzMwMDA4QzM3OEIzNjI5MjUwNERFQjBERkMwMEY4RjM5MEU4RUZFCi06MTA0QzQwMDAzOTBGRUUwMjY0RUVDOTA4OUYxMTAxQzQwNDhEMzgwQ0JGCi06MTA0QzUwMDBCODE4MDBDNDA0MENCRTE4MDBFRTExMEVERDAyQzBFMzRCCi06MTA0QzYwMDAwRUZGMDIxRURGODc5RjcxOUU3MDFFREY4NDhGMjA5OENCCi06MTA0QzcwMDA3MzlENzQwNUZGMTEwQkNENTNDMTgwOTg3NTBGREQwMjM0Ci06MTA0QzgwMDAwRUREMDI5RDcyMkEyNDY2MUVERjQ0MkY2MjlEMkFFNEY3Ci06MTA0QzkwMDBBMjJGRkMxODJGNjY5RDYzRkU3NjAwMDAwMDJGMzAxMkI1Ci06MTA0Q0EwMDAxQkRGODYwMEZBMzI3OEZGMDUwQjk4MEIyQTg0N0Y2NjlCCi06MTA0Q0IwMDBEMDA1MEI5QTBCMkRBNDgwMkEzMDExMDBBQTMyNjNGRjc1Ci06MTA0Q0MwMDA0NDJGMjQwQTlFMkI2M0ZGNTZDQzU3REEyMERCMzBEQ0JFCi06MTA0Q0QwMDA0MDU4MDcwM0MwMjBEMTBGMDBEQTIwQzBCNjU4MDc5MzEwCi06MTA0Q0UwMDA2M0ZGRTUwMERBNzA1ODA2MkJDMEEwMkEyNDY2NjNGRTM1Ci06MTA0Q0YwMDAwN0RBMjA1ODA3OEU2M0ZGQ0ZCMTY5MjgyMDBBODYyMDgzCi06MTA0RDAwMDAwOTA5NDc5OTExMjkyNDA3OTgxMDdGODEyNjkzRTAyN0U0Ci06MTA0RDEwMDBFNTBBOUFFMzg4MTA5REUxMTlERjYyOEQxMTA5NkYwMjlGCi06MTA0RDIwMDA5RkU0MkRFNDE2MDk4ODAyQzBEMzk4RTIyQTI0MDc2MzgxCi06MTA0RDMwMDBGRTUxMDAwMDFGREYyQjA4NjkxMTg4MTE4RDJCOTNFMEI1Ci06MTA0RDQwMDAwOTg4MDJDMDlGOThFNTBGREQwMjA0NzgxMTlERTJDMDNBCi06MTA0RDUwMDBGNDlGRTFDMEQ0MDk4ODAyOThFNDYzRkZDRTAwMDAwMDBDCi06MTA0RDYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0ODUyMTBEMzgxMTg3Ci06MTA0RDcwMDAxNERGMDg4NjIyQTQyNDA4NjYwQzk2MjIwNTMzMEI5M0MwCi06MTA0RDgwMDAyMTc0M0IxM0M4NjJEMjMwRDEwRkMwMzBCQzI5OTkyMUE1Ci06MTA0RDkwMDA5OTIwOTMyMkQyMzBEMTBGMjMzREY4OTMyMTYzRkZFMzcyCi06MTA0REEwMDA2QzEwMEFENjIwOTQxODE3REVGREQ5MzBCODM4OTgxOTNGCi06MTA0REIwMDA5OTE0NjU1MjUyQzBFMUQyRTAyRTYxMDIxRERFRkEwRTU2Ci06MTA0REMwMDAwRTRDNjVFMTYzOEYzMDhFMTkwRjZGNTEyRkZDRkQ2NTFFCi06MTA0REQwMDBGMTU2OEVFMTI5RDAyMzBFOEY1MDc3RTY2QjhGMTgxRTg3Ci06MTA0REUwMDBERjM3QjBGRjBGRjQxMTBGMUYxNDY1OTBDRTE4REYzNEJBCi06MTA0REYwMDA4QzYwQThDQ0MwQjExOURFRTgyODYwMEIwOUNDMEIwRDgzCi06MTA0RTAwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQUY1Ci06MTA0RTEwMDAzODFCREYyQTBDQTkwQTI5OTI5NDdCOUIwMjYwMDA4QzI0Ci06MTA0RTIwMDAyQjYwMEM5NDE2MENCRDExQTdERDI5RDI4NkI4NDg3OUU5Ci06MTA0RTMwMDA4MzAyNjAwMEQyMTlERURBMDlCODBBMjg4MkEzOTgxNzIzCi06MTA0RTQwMDA2ODgwMDI2MDAwQTM2MDAwQTUxQURGMUU4NDE4MEFFRUM1Ci06MTA0RTUwMDAwMUNBOTgxQkRFRDE4QzE5MkJCMDAwOENDMDZFQjMxMzI1Ci06MTA0RTYwMDAxRERFQ0UwQzFDNTIwRENDMEIyREMyOTVDMEExN0VEQkRECi06MTA0RTcwMDBBRTYwMDAzODBDMEM1MzYwMDAwOTAwMDAwMDE4REYxMDExCi06MTA0RTgwMDA4QzYwQThDQ0MwQjExOURFQzQyODYwMEIwOUNDMEIwRDE2Ci06MTA0RTkwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQTY1Ci06MTA0RUEwMDAzODBDQTkwQTI5OTI5NDdFOTMwMjYzRkY3MkRBNjBDMERCCi06MTA0RUIwMDBCQTU4MDcxRTY0NTA3NDYwMDI2NjAwMDAxQURFQjc4QzkwCi06MTA0RUMwMDAxOTJBQTAwMDhDQzA2RUEzMUExOERFQjMwQzFDNTIwODVECi06MTA0RUQwMDBDQzBCMThERUZBMkJDMjk1QzBBMTc4QjMwMjYzRkYzRjVBCi06MTA0RUUwMDA2M0ZGQzkwMDBDMEM1MzYzRkYwOTg5NjA3ODk5MTgyOTg2Ci06MTA0RUYwMDBEMjg1Qzk5MjJCNzI5RTFEREVBODZFQjgyNDJERDIyNkIzCi06MTA0RjAwMDA5OTEzNjlEMDBDNjAwMDBFREE2MDU4MDcwODYwMDAxODI5Ci06MTA0RjEwMDAwMDAwODg2MDdEODkwQTlBMUEyOTcyOUQ5QzEyOTkxNTUxCi06MTA0RjIwMDBDRjk0REE2MEMwQjY1ODA3MDE2NTUxRjQ4RDE0OEMxODFGCi06MTA0RjMwMDBEQkQwOEREMERBNjAwRDZENTE1ODA1NzREM0EwOUExNDcyCi06MTA0RjQwMDA2NEExREQ4MkEwODVBMUI4QUY5RjE5MDUwNTQ3MDIwMkMzCi06MTA0RjUwMDA0Nzk1MThDMDUxNjNGRTYwMkI2MTA0QzA4Qzg5MzFDMDM1Ci06MTA0RjYwMDBBMDA5Rjk1MDA5OEEzODZFQjgxRjJDNjA2NkEyQ0MwQ0QzCi06MTA0RjcwMDAwQzQ3MkM2NDY2N0NBQjExOUYxMTlFMUI4QTE1NTgwNTRCCi06MTA0RjgwMDA4NThFMUI4RjExQzBBMDJBNjQ2NjlGMTE2NEYwRTE4OTkxCi06MTA0RjkwMDAxMzg4MTlERUYwNkRFOTE3MkY4MTAzMDA5MDhEQUVGRUE2Ci06MTA0RkEwMDAwMDgwODg5RjkyMDA5MDhDMDA4MDg4Qjg5OTAwOTA4QzM3Ci06MTA0RkIwMDA2NTUxNEU4QTEwODUxQThCMzAxRkRFOEE4ODEyMjk2MDRGCi06MTA0RkMwMDAwNzA4NTgwQTJDODI5NDJENjEwNDBFQ0MwQzJDODY5NDcwCi06MTA0RkQwMDA2RkRCM0MxQ0RFQjRBQzlDMjlDMDgwMEI1RDUwQTI5OUY5Ci06MTA0RkUwMDAwOTA5NDcyOUM0ODA2NUQwREEyRTYwMENDMEQwMUZERUM1Ci06MTA0RkYwMDA3MzBDRTgxMUE3ODgyMjgyODVBRkVFMDI0MjBCMkRFNEU0Ci06MTA1MDAwMDBDRjIyODY4NUQyQTBEMTBGOEUzMDBFMEU0NzYzRkRBNjJCCi06MTA1MDEwMDBBMjlDMEMwQzQ3MkM2NDA3N0FCNkNEOEI2MDJFNjAwQURDCi06MTA1MDIwMDAyODBBRkYwOEU4MEM2NDgxMEUxOERFOUQ4MzE2ODIxMzlGCi06MTA1MDMwMDBCMzM5MDIzMzBCMkMzNDE2MkQzNTBBQzAyMzkyMzE5RjFECi06MTA1MDQwMDAzMEMwMjA5MjMzMDhCMjAyMDhFODAyOTIzNDk4MzJDMDhECi06MTA1MDUwMDA4MDJCNjAwQzI4NjQwN0QyQTAxQ0RFNTgwQ0JFMTFBNzYwCi06MTA1MDYwMDBFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEIyREU2ODVEMThFCi06MTA1MDcwMDAwRjhCMTg4ODEzOEQzMEI4OEMwRDhGNDcwRDQ5NTBCNEE1Ci06MTA1MDgwMDA5OTA0OTkxMDBEMEQ1RjA0REQxMDA5RkYwMjlGODAwRDNBCi06MTA1MDkwMDBCQjAyOUI4MTY1NTA4RDg1MUFCODNBQzBGMUMwODAwQzY3Ci06MTA1MEEwMDBGODM4MDgwODQyNjQ4MDZCMUJERTM5MTlERTNBMjlCNkVECi06MTA1MEIwMDA3RThEMThCMERENkREQTA1MDBBMDg4MDBDMDhDQzBBMDIwCi06MTA1MEMwMDA2M0ZFRjMwMDFEREU0QjI4NjAwQTgyMTM4QjE2QzBFMERFCi06MTA1MEQwMDAyRUM0ODAwMkIyMEIwRDg4MDJCMkJCOTkyMzlGMjBDMDYwCi06MTA1MEUwMDBEMjk4MjI5RDIxMjI2MDBDMEMyRDExQTdERDI4RDI4NTlCCi06MTA1MEYwMDAwOEJCMEIxOERFMzIyQkQ2ODVBODIyMkUyNENGRDJBMEQ3Ci06MTA1MTAwMDBEMTBGOUUxQjg1MUEyQTZDNzQ4QjE4NUJGRjE3OEUxQkEwCi06MTA1MTEwMDA2M0ZFQTMwMEMwODdDMDkwMEFGOTM4Nzk4MDkyNjNGRkNDCi06MTA1MTIwMDA4NkMwMjBEMTBGOUUxQjJBNkM3NEMwQjE4RDE4NTgwNTAzCi06MTA1MTMwMDAyOThFMUI4NTFBNjNGRTdFODg2QjgyMTM4OTE2MDhCRTMyCi06MTA1MTQwMDAxMTBFQ0UwMjAyOTIwQjlFMjVCNDk5MUVERTI1OUYyMEUxCi06MTA1MTUwMDAwRTg4MDI5ODIyQzBFRjA0RDgxMTBFODgwMjk4MjRDMDRECi06MTA1MTYwMDBFNDlFMjFDMDgwRDJBMDJCNjAwQzI4NjQwNzFDREUxM0IzCi06MTA1MTcwMDAwQ0JFMTFBN0VFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQjY0Ci06MTA1MTgwMDAyREU2ODVEMTBGMDAwMDAwNkMxMDA0QzAyMEQxMEYwMDY3Ci06MTA1MTkwMDA2QzEwMDQ4NjMzQzA3MUMwMzA2MDAwMDFCMTMzMDAzMTNGCi06MTA1MUEwMDAwNDAwNzQxQTA0NjIwMTc0NjBGMUQxMEY2QzEwMDQwMkRGCi06MTA1MUIwMDAyQTAyMDMzQjAyNUJGRkY2MUREREZCMUJERTQzQzc5RjlDCi06MTA1MUMwMDA4OEIwMDlBOTAzMDk4QTAxOUFCMDJCRDEwMjc5ODAxQjAyCi06MTA1MUQwMDAxQ0RERjNDMEUwMEVFNDMxMDAwMjAwMkFDMjgyMURERUI1Ci06MTA1MUUwMDAzQjBEQUEwMjJBQzY4MjBCRTQzMUQxMEZDMUYwMEZCRkRBCi06MTA1MUYwMDAwMjBGMEY0RjJGRDUwMjBGRTQzMUQxMEY2QzEwMDQxMkE0Ci06MTA1MjAwMDBEREU5MUFEREU2QzBDMDBDRTQzMTAwMDIwMDI5QTI4MjBCCi06MTA1MjEwMDAxOERFMzExQkRFMkYyNjIxMDIwQjk5MDEwODY2MDEyOUI5Ci06MTA1MjIwMDBBNjgyMjYyNTAyMDZFNDMxMTRERTJDMTVERTI3MjM2QTI5Ci06MTA1MjMwMDA5MDIzMjYxMjg1NTAyNDI2MTEyNTI2MTMyMjJDNDBEMTk2Ci06MTA1MjQwMDAwRjAwMDAwMDZDMTAwODE2REUyNTJCMEE2NDJDMUFCNDFGCi06MTA1MjUwMDAxN0RERDUxRERERDExOERFMjIwRjJFMTEwRDJBMTFCMjVBCi06MTA1MjYwMDBFOTBFRUUxMUE4QTgwRTk5MTFBREFBQTc5OUE3RUU5RTc2Ci06MTA1MjcwMDAxNjk5MTFBQ0FBOUExNTJDODBGRjJBODBGRTI4OEQwMTYwCi06MTA1MjgwMDAyOTgwMDEwOEFBMTEyODgwMDAwQ0FBMDIwODg4MTEwOUE3Ci06MTA1MjkwMDA4ODAyMDhBQTFDQjg4ODI4MTYwMDU4MDg1RDI5NzExNkNCCi06MTA1MkEwMDA5QTEyMjkxNjAzOEExNThCMTIyQUEwODAwQkFBMjg4QjIyCi06MTA1MkIwMDAxMDU4MDg1N0Q0NzA4QzE2OEIxMzE1REUwQTBCQUIyOEM4Ci06MTA1MkMwMDAyMzVDNDE5QjE0MkJDNjI4MkMzMDgwNzJDOTE1OEMxNDhBCi06MTA1MkQwMDAyQTUwQzAyQjNBMjAwQ0FBMjg1ODA4NERDMEQxMEFERDBDCi06MTA1MkUwMDAzNzJENDU0MEI0NDRCMjU1QjIzMzc2MzlEQUIyNzc4RkIwCi06MTA1MkYwMDAxMThFMTY4ODE1QjRFRUIxODg5ODE1OUUxNjdGRTlBNDE0Ci06MTA1MzAwMDBEMTBGMDAwMDZDMTAwNEMwMjFEMTBGMDA2QzEwMDZDMDNBCi06MTA1MzEwMDA3MDFBRERBMjFFRERBRDFERERCMzFDRERCNTFCREQ5RUVCCi06MTA1MzIwMDAxM0RERTEyMjBBMDgxOEREOUYxNERERUYyODgwMkUyNDBBCi06MTA1MzMwMDA0MDAwMjgxNjAwNkQyQTcwQTM0OTI4OTA4MEMwRjE2NEFGCi06MTA1MzQwMDA4MDU5ODUxMDAwNDEwNEMwNjEwMDY2MUEwNjU1MDEwNUE4Ci06MTA1MzUwMDBGNTM5MEM1NjExMEE2NjA4MkY2Mjk2NkVGNzREMEI1RkYxCi06MTA1MzYwMDAwQTJGRjIyNDY4RjAwODEyREREMTAyNDIwODcyRjkzQkRDCi06MTA1MzcwMDAyMzYyOTUwQzQyMDJDQjM0OTIzMkMwRjI5RDMwOUYzMUIxCi06MTA1MzgwMDAwRThGMDI5RjMzMjM2Mjk1QUI1MjJGMEEwMDJGOTQ4MDE5Ci06MTA1MzkwMDAyRjI0QTAyMzNDMTAyMzY2OTUxM0REQzJCMTc3MTJEREM0Ci06MTA1M0EwMDBEMkIxNDQwNDA0NDIyNDI0MDBEMTBGMDBEMTBGRDEwRjA0Ci06MTA1M0IwMDA2QzEwMDQxQURENzkyQUEwMDA1ODAyMUI1QkZGRDMwMjhGCi06MTA1M0MwMDAyQTAyMDMzQjAyNUJGRkNGMUJERDc3QzBDNDI5QjEwMjc5Ci06MTA1M0QwMDBDOEFDMEM5QzAyMEMwQzRGMkNCNTAyMENFNDMxRDEwRjY0Ci06MTA1M0UwMDAxRURENkZDMDgwMDhFNDMxMDAwMjAwMkRFMjgyMUZERDY3Ci06MTA1M0YwMDA4MDBGREQwMjJERTY4MjA5RTQzMUQxMEY2QzEwMDQxNTE3Ci06MTA1NDAwMDBERDY3MTZERDY4QzAyMDAyRTQzMTAwMDIwMDI0NTI4MjBDCi06MTA1NDEwMDAyMjYxMDI3MzRGMDYwMkU0MzFDMDIwRDEwRjE4RERCNEJGCi06MTA1NDIwMDAxOUREQjMwODI4MDEwOTQ5MDEyOTU2ODIyODY1MDIwOEI3Ci06MTA1NDMwMDBFNDMxMTNEREE5MjI2QzcwMjM2NjFERDEwRjAwMDAwMDNBCi06MTA1NDQwMDA2QzEwMDQyOTIwMDYyODlDRjk2NDgwQTAyQTlDRkQ2NTI0Ci06MTA1NDUwMDBBMDk2OEEyODhEMjYyRjBBMDg3QUQ5MDQyQjIyMUZDOEU1Ci06MTA1NDYwMDBCRDJDMjA2NDY0QzA4MTJFMjIwOTBFQUUwQzY2RTA3ODRCCi06MTA1NDcwMDAyQjIwMEMxRURENEEwQ0JDMTFBRUNDMjhDMjg2MTlEREQ3Ci06MTA1NDgwMDA0ODc4RjMwMjYwMDBBOTA5QjkwQTI5OTJBMzY4OTAwODM0Ci06MTA1NDkwMDAyRTIyMDAwOUVFMEM2NUUwOTcyOUMyODUxRkRENTI2NEJCCi06MTA1NEEwMDA5MDhFOUY5MEMwRTQxRkRENUY5RTkxMjgyMDBBQzBFMDhGCi06MTA1NEIwMDA5RTkzMEY4ODAyOTg5Mjg4MjAwRjg4MDI5ODk0MkYyMDNDCi06MTA1NEMwMDAwNzlBOTc5RDk2MkY5NTBBMkUyNDA3MjgyMDA2MjkyMEIzCi06MTA1NEQwMDA2NDY4ODMyRjI4QzI4NTEyREQzOTI4OEMyMEEyQjIyRTYxCi06MTA1NEUwMDAyNENGMjhDNjg1QzAyMEQxMEZDMDIwRDEwRjJBMjA2QTIyCi06MTA1NEYwMDAwQTJBNDE2NUFGNTVEQTIwQzBCMDU4MDVEMzY0QUZFODM5Ci06MTA1NTAwMDBDMDIxRDEwRjY0OUZDQzFGREQyNzJEMjAxNjhGRjIwOUZCCi06MTA1NTEwMDBERDBDMDBGMTA0MDBERDFBQURBRDlEMjkyOEMyODUxMjE1Ci06MTA1NTIwMDBERDI3Mjg4QzIwQTJCMjJFMjRDRjI4QzY4NUMwMjBEMTBBCi06MTA1NTMwMDAwRkMwMjFEMTBGMDAwMDAwNkMxMDA0MjYwQTAwMUJEREYzCi06MTA1NTQwMDA2RDE1REQxODI4MjA2NTE3REQxNTI4OENGRTY0ODA5NDA0Ci06MTA1NTUwMDAwQzREMTFBREJEMkNEMkY1MkJEMkY0MkE1MTAyN0NCMUU5Ci06MTA1NTYwMDA0MjJBNTEwMkI0QkIyRUQyRjcyQkQ2RjQ3QkU5MDUyQjhECi06MTA1NTcwMDBEMkY2MkJENkY0N0NCOTJCMjlEMkY2MjlENkY1MjlENjJBCi06MTA1NTgwMDBGNDA2RTQzMTAwMDIwMDJGNzI4MkM3OUYwMDQxMDRDMDdDCi06MTA1NTkwMDA4MTAwODgxQTA5ODgwMzA4RkYwMTJGNzY4MjBBRTQzMTA2Ci06MTA1NUEwMDA2MDAwMDAwMDI2MjQ2NTJCRDJGNDhFNUEyQ0QyRjVCMDcwCi06MTA1NUIwMDBFRTlFNUE3QkNCMTYyOUQyRjYyRkQyRjcwQ0I4MEMwOUU3Ci06MTA1NUMwMDBGRjBDMDhGRjBDMEYyRjE0QzhGOTYwMDAyRjBCQ0QwQzM3Ci06MTA1NUQwMDAwRDJEMTRDRUQ2QzBFMjBFQUUwMjBFMEU0RjJFNTUwMjg5Ci06MTA1NUUwMDAwRUU0MzFEMTBGREIzMERBMjA1QkZGOTUxQkRENDI2NDI2Ci06MTA1NUYwMDBBRjVEMkE1MTAyMEM0RDExQURCRDYzRkZBOTA2RTQzMTI4Ci06MTA1NjAwMDAwMDAyMDAyRTcyODIxRkREMDAwRkVFMDIyRTc2ODIwQTRCCi06MTA1NjEwMDBFNDMxRDEwRjZDMTAwNDE2RENFMTE1RENFMkMwMzAwMzdDCi06MTA1NjIwMDBFNDMxMDAwMjAwMjQ2MjgyNzQ0NzIxMThERDMzODc1QTc2Ci06MTA1NjMwMDAwODQ4MDEyODY2ODJDRDczMTlERDMxMEMyQTExQUE5OTE4Ci06MTA1NjQwMDAyMjkyODMyOTkyODQ3MjkxMDM4MjIwQ0MyOTJCNTEwMkM5Ci06MTA1NjUwMDAwQkU0MzFDMDIwRDEwRjAwMUZERDJBMkU1MTAyMEZFRUM2Ci06MTA1NjYwMDAwMTJFNTUwMjBFRTQzMUIwMkRCMTdDOUM1QTIyNUM2MEIzCi06MTA1NjcwMDAwOEREMTEyRDU2MTlEMTBGNkMxMDBBMUFEQ0M3MUREQzdDCi06MTA1NjgwMDBDOTIzQTAwMDE5REQyMDZGMzM3OTFDREQwN0MwMjgxNTYwCi06MTA1NjkwMDBERDFGMUVERDFEMkIxQzEwRDRCMDgzRTAwMDUwODY5NTRECi06MTA1NkEwMDAxMDAwNDA4QTk0MTg2RDJBNEYwRjM1MTEwQzM0MDkyNENDCi06MTA1NkIwMDA0MDgwMEE1NjBBMjg2Mjk0MEQ1NTA5MkY1MTQwMEY0NDI0Ci06MTA1NkMwMDAxMTBCNDQwQTA4OTcwQzBGNzczNjhGNDAwRjc3MzYyMjVDCi06MTA1NkQwMDA1MTQxMDdGRjBDOUY0MEE4NzcyRjYyOTUyNzY2OTQwRkQyCi06MTA1NkUwMDA5ODBDMDI4ODM2ODc0MTA3ODgzNkIxMzMwODc3MENBRkFCCi06MTA1NkYwMDA4RjJGNjY5NTk3NDEwMzAzNDJCMTM4MDgwODQyOThFMDFFCi06MTA1NzAwMDBEMTBGMDAwMDFDREQwMzE0REQwM0JGQzUyNDQyQjU2NEM2Ci06MTA1NzEwMDAzMDU1QzA5MUMwRDAxNkREMDAwNDg4NDMyQkMwMDBDMEI2Ci06MTA1NzIwMDA0MDZEMzkzRTAwNDEwNDAwOTcxQTc3ODAxNjJGQTI5NUVDCi06MTA1NzMwMDA4RTUwQUZFRTJFRUQyMDA2RUUzNjlFNTAyREE2OTU2MEQzCi06MTA1NzQwMDAwMDFBMDAwMDc3QjAwOTgzNTA5RDUwMjNBNjk1NjAwMDkxCi06MTA1NzUwMDAwMjIzQTI5NTIyM0QyMDA2MjIzNjIyQTY5NUIxNDRCNDBBCi06MTA1NzYwMDA1NUI4QUEyOEM0MDBEMTBGMDQ4ODQzMjhDNDAwRDEwRjFCCi06MTA1NzcwMDA2QzEwMDQxNURDRUExM0RDRUFDMDQwMDRFNDMxMDAwMkRBCi06MTA1NzgwMDAwMDg4NTBDQjgxNUJGRkJDMUNEQ0U3MEMyRDExQURDQzNECi06MTA1NzkwMDAyQkMyODIyQUMyODM5NDUwN0JBQjE0MkVDMjg0MjlDMkFFCi06MTA1N0EwMDA4NTBBQkQwQzBFOTkwQzBEOTkwQzA5MjkxNDYwMDAwNTkxCi06MTA1N0IwMDAwQkE5MEMwOTI5MTQ5OTMwMTVEQzdCMkE1MTAyMEFFNDQzCi06MTA1N0MwMDAzMTJBMkNGQzU4MDA0OTJCMzIwMDFFREM3NDJCQkNGRjA0Ci06MTA1N0QwMDAyQjM2MDBDQ0I1QzhBM0QyQTBEMTBGMDBEMkEwMDRFNEQwCi06MTA1N0UwMDAzMTAwMDIwMDJERTI4MjJDNTEwMjJGQkFGRjBGREQwMUExCi06MTA1N0YwMDAyREU2ODIwQ0U0MzFEMTBGNkMxMDA0RDEwRjAwMDAwMEIzCi06MTA1ODAwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0MTNEQ0M3QzBEMTkxCi06MTA1ODEwMDAwMzIzMDkyMzMxOERDMEEwNkYzNDAyNjAwMDg5MUJEQzkzCi06MTA1ODIwMDA2MUM3Q0YxOERDQzAwQzI5MTFBOTg4MjY4MjgzMjU4Mjg0Ci06MTA1ODMwMDA4MjE5REM1QTc2NTE0NDI3NTIwMDJFODI4NTI1NUMwNDU5Ci06MTA1ODQwMDAyNTg2ODI3NUU5MDUyNTgyODQyNTg2ODI3NjU5NTQyNjI3Ci06MTA1ODUwMDA4Mjg0RDU2MDI2ODY4MjI2ODY4MzBBRTQzMTAwMDIwMDhGCi06MTA1ODYwMDAyMzkyODIyRkIxMDIwMDIxMDQwMEQ0MUEwQzQ0MDMwNEI1Ci06MTA1ODcwMDAzMzAxMjM5NjgyMEZFNDMxNjAwMDAyMDBEN0EwNzY1OUVECi06MTA1ODgwMDAyMjBBRTQzMTAwMDIwMDJFOTI4MjAwMjEwNDI4QjEwMjkzCi06MTA1ODkwMDAwMERGMUEwQ0ZGMDMwRkVFMDEyRTk2ODIwOEU0MzFEMkNFCi06MTA1OEEwMDA3MEQxMEYwMEQyNzBEMTBGQzAyMEQxMEY2QzEwMDREQjZCCi06MTA1OEIwMDAzMDg2MjAxNURDMzkyODBBMDAyODI1MDJEQTIwMjhCMDk1Ci06MTA1OEMwMDAwMDJDQjAwNzA1ODgwQTI4ODI0QzJEMEEwMTBCODAwMEE1Ci06MTA1OEQwMDBEQkEwNjVBRkU2MUFEQzMyMEE0QTBBMjlBMkEzQzdCRkQ5Ci06MTA1OEUwMDA3NjkxMDFEMTBGMkJBNkEzRDEwRjAwMDA2QzEwMDRDMDNDCi06MTA1OEYwMDBEMUM3Q0YxQkRDMkNDMEEwMThEQzI4MEMyOTExQTk4ODJCCi06MTA1OTAwMDA4Nzg1ODU4NDE5REMyNjc3NTE3OTg2NTA4RTg3QjQ1NTMyCi06MTA1OTEwMDA5NTg0NzVFOTAzODU4Njk1ODQ3NzU5NkM4Rjg2OUY4NTc0Ci06MTA1OTIwMDA5Rjg0MEFFNDMxMDAwMjAwMjM5MjgyQjQyRTAwRTEwNDM1Ci06MTA1OTMwMDAyRkIxMDIwMEQ0MUEwQzQ0MDMwNDMzMDEyMzk2ODIwRkMyCi06MTA1OTQwMDBFNDMxMEFFNDMxMDAwMjAwMjM5MjgyMDBENDFBMEM0NEFDCi06MTA1OTUwMDAwMzA0MzMwMTIzOTY4MjBGRTQzMUQyNjBEMTBGMDAwMDlCCi06MTA1OTYwMDAwQUU0MzEwMDAyMDAyMzkyODJCNDI4MDA4MTA0MjJCMUFCCi06MTA1OTcwMDAwMjAwRDQxQTBDNDQwMzA0MzMwMTIzOTY4MjAyRTQzMTVBCi06MTA1OTgwMDBEMkEwRDEwRkQ2QTA3NzUxRDZEMjYwRDEwRjAwMDAwMDlGCi06MTA1OTkwMDA2QzEwMDQyNzBBODAxQ0RDMjgxRERDMjgxQURDMDAwQzkzCi06MTA1OUEwMDAyOTExQUE5OTJBMkNGQzJCOTI4NTBEQUEwMjlDQjE5QTQ2Ci06MTA1OUIwMDBCMEMwNTExM0RDMjUyODkyODUxNkRDMjExNERDMjJBNjA4Ci06MTA1OUMwMDAyNjA0MjQwQUI4ODgyODk2ODUyMzQ2OTFBNzY2MjU2NDZDCi06MTA1OUQwMDA5RkQxMEYwMDZDMTAwNDE5REM1NTBDMkExMUE5QTk4OTVDCi06MTA1OUUwMDA5MEM0ODQ3OThCNzYxQkRDNDVBQkFDMkFDMjgzMkNDMjc1Ci06MTA1OUYwMDA4NDdBQzE2ODhBQTAyQkJDMzBEM0EwNjRBMDVFMEIyQjM0Ci06MTA1QTAwMDAwQTJDQjJBMzE5REMwRjY4QzAwNzFEREM0OUQzMEY3RDM3Ci06MTA1QTEwMDBDOTRBQTkyOTI5OUQwMTI5OTAxRjY4OTEzMjcwQTYwM0JFCi06MTA1QTIwMDBEM0EwQ0E5RTY4OTIxMEM3QUYyQUI2QTMyQTJDRkM1QkVCCi06MTA1QTMwMDBGRkFGRDIzMEQxMEYwMDAwMTNEQkVGMDNBMzAxOEMzMTk1Ci06MTA1QTQwMDAxRERCRTAwQzhDMTQwRENDMDEyQ0I2QTM2M0ZGREMwMDM1Ci06MTA1QTUwMDBDMDIwRDEwRkRBMjA1QkZGQ0VDMDIwRDEwRkMwMjBEMUYzCi06MTA1QTYwMDAwRjAwMDAwMDZDMTAwNERCMzBDMEQwMTlEQkNCREEyMDUzCi06MTA1QTcwMDAyODMwMDAyMjMwMDcwODQ4MTIwOTg4MEEyODgyNENEQ0E2Ci06MTA1QTgwMDAyMDBCODAwMDFCREJDNjBDNEExMUFCQUEyOUEyODQwOTlCCi06MTA1QTkwMDAyOTBCMjlBNjg0RDEwRjAwNkMxMDA0QzA0MTE4REJCRjZDCi06MTA1QUEwMDAxN0RCQzEwQzI2MTFBNzI3Mjc3MDMwQTg2NjI1NjI4NjUwCi06MTA1QUIwMDAwMDcxMDRBMzU1MDA0NDFBNzU0MTQ4MjI2Mjg0MTVEQjI1Ci06MTA1QUMwMDBFMjAyMzIwQkM5MjI4ODIxMTdEQkJFMDg4NDE0MDc0NDg2Ci06MTA1QUQwMDAwMTc1NDkwNUM4MzRDMDIwRDEwRkQxMEYxRERDMTVDMDk4Ci06MTA1QUUwMDBCMjhFMjAxRkRCQUQwRTBFNDNBRkVDMEZFRTBBMkJDNEJGCi06MTA1QUYwMDBBMDJERTYyNEMwMjAyQTYyODQwODA5NDcwQTk5MEIyOUIwCi06MTA1QjAwMDA2Njg0RDEwRkMwMjBEMTBGNkMxMDA0REIzMEMwRDAxOEQ4Ci06MTA1QjEwMDBEQkEyREEyMDI1MzAwMDIyMzAwNzA4NTgwQTI4ODI0QzAwCi06MTA1QjIwMDBEQzIwMEI4MDAwODkzMTcwOUUxMjFCREI5QzBDNEExMTFCCi06MTA1QjMwMDBBQkFBMjlBMjg0MDkyOTBCMjlBNjg0RDEwRjA5Qzk1MjJECi06MTA1QjQwMDA2ODUzMjYwMDkxMDQxOERCOTdDMEExMkY4MTEyMDBBQTg4Ci06MTA1QjUwMDAxQTBBRkYwMjJGODUxMjFFREI5MTBDNEQxMUFFREQyQ0FGCi06MTA1QjYwMDBEMjg0MEMyQzBCMkNENjg0RDEwRkMwODExRkRCOEVCOEI1Ci06MTA1QjcwMDA5QTBBMEE0NzAwQTEwNDJFRjExMjAwODgxQTA4RUUwMkMwCi06MTA1QjgwMDAyRUY1MTIxRERCODYwQzRDMTFBRENDMkJDMjg0MEIyQkQ5Ci06MTA1QjkwMDAwQjJCQzY4NEQxMEYwMDAwNkMxMDA0REIzMEMwRDAxOTcxCi06MTA1QkEwMDBEQjdFREEyMDI4MzAwMDIyMzAwNzA5ODgwQTI4ODI0QzYwCi06MTA1QkIwMDBEQzIwMEI4MDAwMUNEQjc5MEM0QjExQUNCQjJBQjI4NEJGCi06MTA1QkMwMDAwQTJBMEIyQUI2ODREMTBGNkMxMDA0QzA0MTE4REI3MzZCCi06MTA1QkQwMDAxNkRCNzUwQzI3MTFBNjI2MjY2MDMwQTg3MjI1MjI4NkIyCi06MTA1QkUwMDAwMDYxMDRBMzU1MDA0NDFBNzU0MTA4MjIyMjg0MDIzMjQwCi06MTA1QkYwMDAwQkQxMEYwMEMwMjBEMTBGNkMxMDA0MTVEQkNFMDI0OTcxCi06MTA1QzAwMDAxNDI5NTYxMTI0NTIxMkMwNzMwMjA4NDMwRjg4MTEwMDQwCi06MTA1QzEwMDA4MTA0MDAzNjFBQzc4RjAwNzcxQTA4NzcwMzA3NDQwMUZBCi06MTA1QzIwMDAwNjQ0MDIyNDU2MTJEMTBGNkMxMDA2QzBCMDZFMjMwMjM3Ci06MTA1QzMwMDA2MDAwQTI2NDIwOUQ4NTEwMTNEQkFBMTZEQkJFQzA0MDY1Ci06MTA1QzQwMDBBNkJBMkJBMkFFMEIxOTQxNjQ5MDVFNjg5MTU1Njg5MjdBCi06MTA1QzUwMDA0QTY4OTMzNzI5MzBGRjI4MzBGRTJBQTJBQTA4ODgxMTAzCi06MTA1QzYwMDAwQTBBNEQyQUFDRjIwOTg4MDI3NTg5NDQyQjNEMDEyOUE0Ci06MTA1QzcwMDBCMDAwMkJCMDAxMDg5OTExMEI5OTAyN0E5OTMyQjgzMzEwCi06MTA1QzgwMDAyQjJBMDBCMTQ0NzI0OUI3NjAwMDQ4MDA3RkJGMDUxNTU4Ci06MTA1QzkwMDBEQkFBNjNGRkJFMjUzQUU4NjNGRkI4MDAyNTNBRTg2MzU0Ci06MTA1Q0EwMDBGRkIxMDAwMDI1MEE2NDYzRkZBOUMwNUE2M0ZGQTQwMDg2Ci06MTA1Q0IwMDAwMDcwNUYwODI1MzRGRjA1OEMxNDJDMzRGRTcwQUYwQjg4Ci06MTA1Q0MwMDAwQThEMTQyRTNEMDEyQUU0MDEyREU0MDBEQTQwNUJGRDJCCi06MTA1Q0QwMDA1RDYzRkZBOUQxMEZEMTBGNkMxMDA0MUFEQjMyMTlEQjAxCi06MTA1Q0UwMDAyRjFDREI5NjFCREI5N0MwODBDMDcxNjAwMDBEMDAwMDhECi06MTA1Q0YwMDAwMDIyQTQzMEIxQUEyOTlDMTA3QjkxNUYyNjkyODY3OTVDCi06MTA1RDAwMDBDMjE1QzAyMDZFNjJFOTZEMDgwQUIxMjIwMDIxMDQwMEFDCi06MTA1RDEwMDA3NDFBNzY0QkRCNjNGRkVFMjI5Mjg1MEQ2MzExMDMyNTI3Ci06MTA1RDIwMDAxNDY0NUZDRkQ2NTAwMzJENDM2REQ5MDM5ODIwQjQyMjVECi06MTA1RDMwMDAwNjQ0MTQ2RDQ5MjI5ODIwOTgyMTk4MjI5ODIzOTgyNDhCCi06MTA1RDQwMDA5ODI1OTgyNjk4Mjc5ODI4OTgyOTk4MkE5ODJCOTgyQzRGCi06MTA1RDUwMDA5ODJEOTgyRTk4MkYyMjJDNDA2M0ZGOTcxRURCMTAyNzNBCi06MTA1RDYwMDBFNjgwMjdFNjgxRDEwRjAwNkMxMDA0QzA2MkMwNDExMkFBCi06MTA1RDcwMDBEQjBEMTNEQjc0MjMzMjJEMUFEQjA4MTlEQjZFMkFBMDJFCi06MTA1RDgwMDAwMDI5OTJBRTZFQTMwMjYwMDA5MTI4QUNGRTA5MEQ0MDdFCi06MTA1RDkwMDAyQzFBQzJDMkJEMERDQjM5MkIyNTE2NjQ4MDg5NUJGRjNFCi06MTA1REEwMDBBMjE1REI2OTFBREIxNDJCM0FFODBBM0EwMTU4MDU5ODY4Ci06MTA1REIwMDAyQjIxMTYwQUJCMjhEM0EwMkI1NjAwNTgwNUFGOEI1MEI5Ci06MTA1REMwMDAwQUJCMDgyQTBBMDA1ODA1QUUxNURCNjAyRDIxMDIyQ0ZCCi06MTA1REQwMDAzQUU4MEMzQzI4MDRERDAyMkQyNTAyOUM1MDU4MDVBNjBCCi06MTA1REUwMDA4QjUwQUFCQkMwQTE1ODA1QTYxQ0RCNTkyRDIxMDIwQzYzCi06MTA1REYwMDAzQzI4MDZERDAyMTNEQjU3MkQyNTAyOUMzMDU4MDU5RUZBCi06MTA1RTAwMDA4QjMwQUFCQkMwQTI1ODA1OUUyQTIxMDJDMEI0MEJBQTlGCi06MTA1RTEwMDAwMjBBMEE0RjJBMjUwMjU4MDVCMkQxMEYyNDI0MjNDM0FGCi06MTA1RTIwMDBDQzJDMjUxNjYzRkY3NjAwMThEQjRGMUNEQjRCMTlEQkVGCi06MTA1RTMwMDA0QzFCREI0QTE3REIxRjg1MjAyRTBBRkQxRkRCNEIyRDc5Ci06MTA1RTQwMDAyMDJFMjRGNDdBMjRGNDdFMjRGNDgyMEVERDAxMjRGNDNFCi06MTA1RTUwMDA4NjJFMEFGNzA3NTUyODA2REQwMkMwNzUwRUREMDEwNUZFCi06MTA1RTYwMDAwNTA2QUI1QkE5NTlDMEU4QUM1QzI0QzRBQjBFREQwMkVGCi06MTA1RTcwMDAyN0M0QUMyRTBBREZBODU1MjdCNEVDMEVERDAxMjRCNEVDCi06MTA1RTgwMDBFQkMyRTAyNzk0MkMwRUREMDIyNDk0MkIyRTBBODAwRDA5Ci06MTA1RTkwMDAwRDQ2Mjc1NDZDMjQ1NDZCMEVERDAyMkQyNDJFNjNGRTE4Ci06MTA1RUEwMDBGQzAwMDAwMDZDMTAwNEMzQTBDMEIzNUJGRjUzQzA0QUU5Ci06MTA1RUIwMDAxMkRCMjFDMzgwMjgyNjE2MjQyNjE3QzNBMUMwQjM1QjlBCi06MTA1RUMwMDBGRjRFQzAzQ0MzQTEyQTI2MTYxOURBQjYyOTkwMjAyMzFBCi06MTA1RUQwMDAyNjE3NjQ5MDhGMkEwQTMyMkIwQTAxNUJGRjQ3QzNBMjYwCi06MTA1RUUwMDAyQjBBMDE1QkZGNDVDM0IyMkIyNjE2MjMyNjE3QzJBRjMwCi06MTA1RUYwMDBDMEIxNUJGRjQxQzJGRjJGMjYxNkMwRUUyRTI2MTdDMjhGCi06MTA1RjAwMDBEMjJEMjYxNkMwQzgyQzI2MTcyNDI2MTEyQTIyMTJDN0U1Ci06MTA1RjEwMDBCMzBCQUEwMUMwQjQwQkFBMDIyQTI2MTIyOTBBQTEyOThFCi06MTA1RjIwMDAyNjE2QzE4MjI4MjYxN0MwQjMyQjI2MTEyRTIyMTIxRjM3Ci06MTA1RjMwMDBEQUNBMEZFRTAyMkUyNjEyQzNENjJEMjYxNjJBMEFBMjgwCi06MTA1RjQwMDBDMUMzMkMyNjE3NUJGRjJDMkMwQUEyMkMyNjE2QzFCNTI4Ci06MTA1RjUwMDAyQjI2MTdDMkFCMkEyNjE2QzA5NzI5MjYxNzE4REIwMzUzCi06MTA1RjYwMDAyODI2MTBEMTBGQzNBMkMwQjM1QkZGMjM2M0ZGNkUwMENFCi06MTA1RjcwMDA2QzEwMDQxQ0RBQ0UxQkRBQkIxOERBRkQxN0RBRkUxNjM5Ci06MTA1RjgwMDBEQUZFMTVEQUZFQzBFMEMwRDQxNERBQ0ExRkRBODYyMkJGCi06MTA1RjkwMDAwQTA4MkZGMjAwNkQyQTM2REFDMEQ5QzA3QzVCMDIwRkU2Ci06MTA1RkEwMDBDOTBDMUNEQUMzMEM5QzI4QThDM0E2QzIyQTM2ODAyQUI2Ci06MTA1RkIwMDAyNTg0QTRDMkE3Q0MyRDI0OEMyQjI0OEEyQjI0ODcyRUE1Ci06MTA1RkMwMDAyNDhCQjFCQjJFMzY5RjJDMzY5RTJDMzY5REIxQUMxQzNCCi06MTA1RkQwMDBEQUE1MUJEQUVCQzAyODZEMkEzM0RBQzBEOUMwN0M1QkE2Ci06MTA1RkUwMDAwMjBGQzkwQzFDREFCMzBDOUMyOEE4QzNBNkMyMkEzNjFGCi06MTA1RkYwMDA4MDJCMjU4NEE0QzJCMUJCQTdDQzJEMjQ4QzJFMjQ4QjRFCi06MTA2MDAwMDAyQTI0OEEyRTM2OUYyQzM2OUUyQzM2OURCMUFDQzA3OTIwCi06MTA2MDEwMDAxOURBQTMxQkRBREUxM0RBREIxQURBREIxOERBREQxNDlECi06MTA2MDIwMDBEQUE0MTZEQURDMDRGNDI4MTJEQURDMDQ2NjBDMDQwNUJGCi06MTA2MDMwMDAwNkEyNTJBODU4QUE1QUEzNTM5QjMwMjlBNTAwMjc4NDI4Ci06MTA2MDQwMDA4QUMwOTFDMEE1MkE4NDhDMjk4NDhCMTdEQUQ1MThEQUU2Ci06MTA2MDUwMDBEM0E3NTcyNjM2MUQyNjM2MUUyRTM2MUYxNkRBRDIxMzI0Ci06MTA2MDYwMDBEQUQyQTY1NTA0MzMwQzI4MjZDODJFNzUwMDJENTRBQzYwCi06MTA2MDcwMDAyRTU0QUIyRTU0QUEyMzI2RTYyMzI2RTUyRTI2RTdEMTVFCi06MTA2MDgwMDAwRjAwMDAwMDZDMTAwNjEzREFBRjE3REFBQTI0NzIzRDc1Ci06MTA2MDkwMDAyMjMyOTM3RjJGMEI2RDA4MDUyODMyOTM3RjhGMDI2Mzg2Ci06MTA2MEEwMDBGRkYzQzBDNEMwQjAxRURBM0ZDMDYxRDk0MDA5NjkzOUVFCi06MTA2MEIwMDAyOUU0MjA2RTQ0MDFENkIwQzMyOERGQjAyNkU0MjIwNkNFCi06MTA2MEMwMDAyRjM5MkZFNDIxQzA1MDFGREFCOTE5REFBQTE2REFBQjNBCi06MTA2MEQwMDAxOERBNzk5NDEwMkE3MjQ1OERFMDE3REFBNTlEMTExRDAyCi06MTA2MEUwMDBEQUI0NkRBOTRCRDQ1MDI1NUMwMzdBNUIxOERFNTA3NTg5Ci06MTA2MEYwMDA2QjA1MkUxMjAxMEU1RTBDMTJEQTZFMDJFMjI4MDExMUZGCi06MTA2MTAwMDAwMkFGMjIyMkQ2ODFENTQwMTNEQTZBNzQ2QjA1MjUxMkJDCi06MTA2MTEwMDAwMTA1NDUwQzAzNTMyOEIxNDVBODNFQTkzMkE3MzMyMkY3Ci06MTA2MTIwMDAzNjlEMjIzNjlFMjQzNjgwMkIzNjlGMkJFNDhCMkNFNDIyCi06MTA2MTMwMDA4QzE0REE4NDI0NDI0REMwMzAwNDE0MTRDODRDNkQwODA5Ci06MTA2MTQwMDAwNkIxMzMwNDE0MTRDODQyNjNGRkYyMDAxNkRBMTNDNDE0Ci06MTA2MTUwMDA0MEMxNTgwMDMxMDQxQURBMTNDMEIxOTNBMjAwQkIxQTJGCi06MTA2MTYwMDBCMEJCOUJBMzE4REE3ODI5ODI0RDIzODI0RTI4ODI1MzM0Ci06MTA2MTcwMDA3QTg3MUMyQzY0MDA4QzEwNkZDNDQ4MUVEQTBBMDQzRDE4Ci06MTA2MTgwMDAwQzJERTUxQzJGRTExRDJERTUxQTJGRTUxQkQxMEYwMDZECi06MTA2MTkwMDBDMDcyMTJEQTY4ODIyMDdFMjdEQjAzMDM0RjI3NjQwMDc3Ci06MTA2MUEwMDA4ODEwQzA2MTZGODQzMEMwQTAwMzE5MTQwQTU0MzkxQUQyCi06MTA2MUIwMDBEOUZEMDQ5OTBDMjlBNTFDMjlBNTFEMjlBNTFBMjlBNUQ1Ci06MTA2MUMwMDAxQkQxMEYwMDFDRDlGODA1M0IwQzJCQzUxQzJEQzExRDg0Ci06MTA2MUQwMDAyQkM1MUEyREM1MUJEMTBGMDY1NDM5MDMxRTE0MDRFRTBFCi06MTA2MUUwMDAwQzJFQTUxQzJFQTUxRDJFQTUxQTJFQTUxQkQxMEYwMDA5Ci06MTA2MUYwMDA2QzEwMDgxQUQ5RUMxNERBNEYxM0RBNTJDNzJGQzA1MEJBCi06MTA2MjAwMDAxNkRBNkMyNTY2QTgyNTY2QTkyNTY2QUEyNTY2QUIyMjNFCi06MTA2MjEwMDAzNjI5MkI0MjQ1MTlEQTEzRDgxMDFDREE2NkMwRDQ5REYyCi06MTA2MjIwMDAxMTlDMTAwMDgwODkwQjk5MEM5OUEwMjgxNjAyNUJGRjI1Ci06MTA2MjMwMDA5NTJBMzJFMzFGRDlEQzBBNUExNDlBRjQyOTMyRTRCMUMwCi06MTA2MjQwMDA5OTA5NTkxNDBBOTkwQzk5RjUyODMyRTUwODU4MTQ5OEI3Ci06MTA2MjUwMDBGNjJFMzJDRDBFNUUxNDJFRjYwNzVCRkY0NTVCRkYxMTY2Ci06MTA2MjYwMDAyMjQ2M0IxQ0Q5RDAyQUMxMDJDMUIwMEJBQTAyMUJEQUJDCi06MTA2MjcwMDAyQTBBMEE0RjJBQzUwMjJCNDYzQTU4MDQ5OTVCRkVCQUVECi06MTA2MjgwMDA1QkZFOTVDMEIwODYxMzE3RDlDNTI1MzYyREM3NEVDMDA1Ci06MTA2MjkwMDAzMDk0MTRDMDUwMTREOUNBNjAwMDQzMDAwMDdGOUYwRjhGCi06MTA2MkEwMDBCMTU1MDkxOTE0NjU5RkY0QzA1MDBBQTkwMjdGQTdFRkUwCi06MTA2MkIwMDAxOEQ5QkFEQTUwMDg1ODBBMjg4MjJDMkIwQTAwMEI4MDA5Ci06MTA2MkMwMDAwMDAwNTEwNEQyQTBDMDkxQzdBRjAwOTkxQTBBOTkwM0U3Ci06MTA2MkQwMDAyOTE2MDRDRTMzNjQyMDYzRDMyMDJCMjAwN0Q2NTA4QzlDCi06MTA2MkUwMDAxNDJBNzI4MjdDQTg1QzE4RDlBQzA4NTgwQTI4ODIyQzFGCi06MTA2MkYwMDBEQTUwMEI4MDAwRDJBMDY0M0ZEQThBMzEwQThBMTQwNDkzCi06MTA2MzAwMDBBQTAxQzgyQTJCMjIwMTBCOEIxNDA0QkIwMTdBQjk0MEM1Ci06MTA2MzEwMDBEREEwNkVBMTA4MUREOUEzMkREMjAwMERBRDBDREIzMDgwCi06MTA2MzIwMDBEQzYwMUFEOUUzMThEOTlDMEFEQTI4MDg2ODBBMUREQTUxCi06MTA2MzMwMDAxRjI4ODIzQ0FEQUEwQjgwMDA2NTJGOUJEMzIwQzBCMEU0Ci06MTA2MzQwMDA2M0ZGOUIwMENBNUNCMTU1MDA1MDA0MEEwOTE5NjNGRjQyCi06MTA2MzUwMDA0QkRDQjA2RUIxMDkxQ0Q5OTM4Q0MwRDMwRjBDQkMwQ0I0Ci06MTA2MzYwMDAxREQ5RDQxRURBMTIwRENEMjhBRUREMUVEQTExMkRFNkIwCi06MTA2MzcwMDA4MTYzRkY5QjdGQTdDRTYzRkY2QzAwMDA2QzEwMDQxQjQyCi06MTA2MzgwMDBEOTg3MjcyMjFFQzA4MDA4RTQzMTAwMDIwMDJBQjI4Mjg5Ci06MTA2MzkwMDAxOUQ5ODUwMDMxMDRDMDYxMDA2NjFBMjk5MTAyMEE2QTgwCi06MTA2M0EwMDAwMjJBQjY4MjA5RTQzMTE1RDlERjBDMzgxMUE4NTMyODI2Ci06MTA2M0IwMDAzMjgyMjQzMjg0MkE4Q0ZDNzg0MTEwMjkyMTAyMkEzNjI4Ci06MTA2M0MwMDA4Mjk3QTAwOTY5MDIyOTI1MDJEMTBGMDAyQjIxMDIyQ0Y2Ci06MTA2M0QwMDAzMjg1MEI2QjAyMkNDQ0ZDMkMzNjgyOTdDMDJCMjUwMjBECi06MTA2M0UwMDBEMTBGMDAwMDZDMTAwNkMwQzcxQkQ5NjgxQUQ5NkEwREZFCi06MTA2M0YwMDA0RTExRDcyMDg4MjA4NTIyRDk4MDA1NDUwQjAyODIwQ0JBCi06MTA2NDAwMDA5NTcyMjIyQ0Y0QzgzNDZGMkUwMjYwMDBBQjFGRDk2MDQ1Ci06MTA2NDEwMDBBOUUyQUY3RDcyRDMzNEM5M0RDMDIxMkYwQTAwMDkyRkY0Ci06MTA2NDIwMDAzODBGMEY0MkM5RjkyQUI2N0U2RDRBMDUwMDMwODgwMDQwCi06MTA2NDMwMDA5MDhDMjI3MjAwMDJFMjA4NzJEMTc0OTI3MEQyODBEMUU0Ci06MTA2NDQwMDAwRkMwNTAwMzI1Mzg3NUMwREY2M0ZGRDkwOTdEMENBRjNECi06MTA2NDUwMDBERDBERUUwQzY0MzA0RUQyMzAwRDNGMTI5NjExMkYxNjJBCi06MTA2NDYwMDAwMDJGRkMxMDBGNEYzNjI2MEEwMTI1MEEwMDA5NjUzODU3Ci06MTA2NDcwMDAwNTA1NDI2NDUwNzEyQUI2N0U2REZBMDUwMDIwODgwMDM5Ci06MTA2NDgwMDA5MDhDQzA1MEEzRDI4OTEwMjM3QzBDMDk0NDBDMjkwQTlCCi06MTA2NDkwMDAwMTAzOTUzODA1MDU0MjY0NTA1QTJBQjY3RTZENEEwNUI3Ci06MTA2NEEwMDAwMDIwODgwMDMwOENEMjgwQTdFQUJDQUE5QTcwRDEwRjU1Ci06MTA2NEIwMDBEMjgwQkM3QjlCNzBEMTBGMDAwMjNGMTRDMUQwRDIzMDgwCi06MTA2NEMwMDAwRkREMEMwRDREMzYyOThEMDhDMEYxMjUwQTAwMDlGNUE4Ci06MTA2NEQwMDAzODA1MDU0MkNBNTgyQUI2N0U2RERBMDUwMDIwODgwMEM0Ci06MTA2NEUwMDA5MDhDODk3MDYzRkYyNTAwQzA2MUMwNTAwMzY1Mzg3NUNBCi06MTA2NEYwMDBDMDg2NjNGRjgwQzBEMDAyOUQzODdEQzA5RjYzRkY5OTM2Ci06MTA2NTAwMDBDMDUwMDNGNTM4NzVDMEQwNjNGRkNBMDA2QzEwMDRENkM0Ci06MTA2NTEwMDAyMDY4NTIwRjY5NTMyNERBMjBEQjMwREM0MDU4MDBGMDQ5Ci06MTA2NTIwMDBEMkEwRDEwRkRBMjBEQjMwREM0MDU4MDBFRDlBMjQyNEQxCi06MTA2NTMwMDAyNDBFQzAyMTIyNjQwRkMwMjBEMTBGMDBCODNCQjA0QzA0Ci06MTA2NTQwMDAyQTJDNzQ4OTI0MkQyMDBFMkUyMDBGQTREREIxRUUyRUNFCi06MTA2NTUwMDAyNDBGQjBERDJEMjQwRTI4OTAwNzJEOTAwM0E0ODhCMEMxCi06MTA2NTYwMDA4OEIxREQyRDk0MDMyODk0MDc1QkZGOUU2OTUxMURDMEZGCi06MTA2NTcwMDBFMDgyMjQyQTYwMEYxOEQ5OTAyQTI0MDMyOTYwMEU4RjA0Ci06MTA2NTgwMDAyMDI5MjQwNzA4RkYwMjlGMjA5RTY0RDEwRkMwMjBEMTNDCi06MTA2NTkwMDAwRjAwMDAwMDZDMTAwNDk0MjMxOUQ5ODhDMEIzMDgzQTg2Ci06MTA2NUEwMDAxMTBCQUEwMjk5MjAxOUQ4RkQ5QTIxMjg5MjlEMTZEODdDCi06MTA2NUIwMDBGQUMwNTAyNTY0QTIyODhDMTgyODk2OUREMTBGMDAwMDlGCi06MTA2NUMwMDA2QzEwMDQyODIwNjZDMDM4MjMyNDA2Qjc4ODI4MjQ2NjY3Ci06MTA2NUQwMDBEMTBGMDAwMDZDMTAwNjAzNUEwQzBEMzYxMTBENUMxMTIyCi06MTA2NUUwMDBEODIwOEIyMjgyMjEwQ0JCMEMwNjU1MEY5QjgyMDIzMkQ1Ci06MTA2NUYwMDAwQjkyODExM0Q4RTdEOTIwQTM4RjY0NTA1MzFDRDhFM0EyCi06MTA2NjAwMDBDMEQ3MUJEOEU0QTI1NkMwRTEyOTBBMDAwNEU5MzgwOTIyCi06MTA2NjEwMDAwOTQyNzZGMzRBMDQ0MzAyQzk5RTJCQzY3RTZEQUEwNTQxCi06MTA2NjIwMDAwMDIwODgwMDMwOEM4OTgxQTk1OTA5RkEwQzY0QTA3OTZFCi06MTA2NjMwMDA5OTgxOEE4MkM4QUREMjkwRDEwRkMwNjAwMkU2Mzg3NkM3Ci06MTA2NjQwMDBEMERBNjNGRkQ0QzAyMEJDODk5OTgxOTk4MDkyODJEMTJECi06MTA2NjUwMDAwRjdGMjMwNDI5MkRGODk5ODE2NUJGRDk2M0ZGRTUwMEQ5Ci06MTA2NjYwMDAwMjhGMENBM0ZGMEYzMzEyOTMxMDAzQUEwQ0QzNDBDQjVECi06MTA2NjcwMDA5RTJCQzY3RTg2MTA2RDZBMDUwMDIwODgwMDMwOENCQzdCCi06MTA2NjgwMDA4MjI5MEEwMDA0RjMwODI0MEEwMTAzNDkzODA5MDk0MjRGCi06MTA2NjkwMDBDQTk4MkJDNjdFNkRBQTA1MDAyMDg4MDAzMDhDMEY1OTQxCi06MTA2NkEwMDAwQ0E5ODlCQzk5OTk4MTYzRkY4N0JDODk5OTgxNjNGRjkzCi06MTA2NkIwMDA4MEMwNjAwMkU2Mzg3NkQwQkE2M0ZGQjRDMDcwMDI0NzhCCi06MTA2NkMwMDAzODc3RDBEMDYzRkZDQTAwNkMxMDA0MTREOEMwQzE1MjEwCi06MTA2NkQwMDBBNDI0QzkzRTI4MjIxRDczODExOTI5MjEwMkNEOTMyQUExCi06MTA2NkUwMDAzMDAwNzVBOTEyREEyMERCMzAyQzMwMDdDMEQyNTgwMUY3Ci06MTA2NkYwMDBDNDY1M0ZERkQxMEYwMDAwMkIzMDA3MDNCQjBCREFCMEJFCi06MTA2NzAwMDA3NEIzMDIyQUJERjhEM0EwNjNGRkM2MDA2QzEwMDQyOTNECi06MTA2NzEwMDAyMDA2QzA3MDZFOTc0MTI5MjEwMkMwOEYyQTIwMTRDMDI0Ci06MTA2NzIwMDBCNjJCMjQwNjA2QUEwMjJBMjQxNDc5ODAwMjI3MjUwMjAxCi06MTA2NzMwMDAyQTIyMUUyQzIyMUQ3QUMxMEVDOEFCREEyMERCMzAyQzk3Ci06MTA2NzQwMDAwQTAwMDMzRDAyNUJGODIyNjQ1MDc1MkQyMTAyMEQwREY1Ci06MTA2NzUwMDA0Q0M5RDNDMDIwRDEwRjAwMDAyRTlDRkI2NEUwODIyRkQ3Ci06MTA2NzYwMDAyMTAyMEYwRjRDNjVGMDkxMUFEODhEMUNEODhCMjlBMkVECi06MTA2NzcwMDA5RUMwOEE3OThCNUQyQkMyMjY2OEIwMDQ4RDIwN0JEOUEwCi06MTA2NzgwMDA1MjI5QTI5REMwRjM2NDkwNEE5NzkwMUREODlFMkUyMTU1Ci06MTA2NzkwMDAwNDlEOTYwOEVFMTEwRkVFMDI5RTk3OUU5MTI3QzRBMkNCCi06MTA2N0EwMDAxOEQ4OUEyRjIxMDIyQkEyOURDMEU1MkUyNDA2MkJCQ0JGCi06MTA2N0IwMDAzMDA4RkYwMjJCQTY5RDJGMjUwMkMwMjBEMTBGMDAwMDFDCi06MTA2N0MwMDAwMDJGMzAwMDY4RjkzOERBMjBEQjMwREM0MDU4MDA0NDE0Ci06MTA2N0QwMDA2M0ZGNzcwMDAyMkEwMjJCMEEwNjU4MDBENDIyMEEwMDFGCi06MTA2N0UwMDBEMTBGNjU1MDEwMjgzMDAwNjg4OTI0MDIyQTAyMDMzQjJCCi06MTA2N0YwMDAwMkRDNDA1ODAwM0JDMDIwRDEwRkQyNzBEMTBGMDAwMDA2Ci06MTA2ODAwMDAyQTJDNzQwMzNCMDIwNDRDMDI1QkZFRjY2M0ZGM0IwMDQwCi06MTA2ODEwMDBEQjMwREM0MDJBMkM3NDVCRkVGM0MwMjBEMTBGMDAwMDdCCi06MTA2ODIwMDA2QzEwMDRDODNGODkyNjg4MjlBMzk5OTkyNjA5ODgwQ0U5Ci06MTA2ODMwMDAwODA4NDgyODI1MjVDQzUyQzAyMEQxMEZEQjQwMkEyQzNGCi06MTA2ODQwMDA3NDVCRjk0OUQyQTBEMTBGNkMxMDA0RDgyMEQ3MzA4MkU0Ci06MTA2ODUwMDAyMjBENDUxMTA1MjIwQzkyODI2NDIwNzQwNzQyMEIxMzBECi06MTA2ODYwMDBEODRDRDQyMEEzODM3MzIzMDIyNDJERjg4NTgwNzQ1MTNGCi06MTA2ODcwMDA0Q0JDODJDMDkwNkQwODE2MDA0MDg4MDA3MDhDNzczOTNGCi06MTA2ODgwMDAwM0Q3MjBDMDkxODY4MDc0MzkwMUQ0MjA3NDYxMDI2M0RCCi06MTA2ODkwMDBGRkUyQ0E5OEMwOTdDMDQxMUJEOENBQzBBMDBCOEIwQzlFCi06MTA2OEEwMDAwQjRBMzgwQTBBNDJDOUFBMUREODM5MUNEODNBMkNENjM0Ci06MTA2OEIwMDA3RUMxNDBEMzBGNkQ0QTA1MDAyMDg4MDAzMDhDOTc4MDQwCi06MTA2OEMwMDBEMjcwRDEwRkJDOEZDMEUwMEY0RTM4N0U5MEUyNjNGRkQ0Ci06MTA2OEQwMDBENkJDODI5MjgxOTI4MEMwMjA5MjgyRDEwRjAwMDAwMEFCCi06MTA2OEUwMDA2QzEwMDZDMEQ3MUNEODI5MUJEODJCMEQ0OTExRDcyMEY2Ci06MTA2OEYwMDAyQTIyMUYyODIyMUQwQTRBMEJEMjgwMDc4NjBDMkE3NkRDCi06MTA2OTAwMDAxRjI2NkM4MEM4MzQ2RjZFMDI2MDAwRDAyRjBBODAxQTc4Ci06MTA2OTEwMDBEODJGQTI5RUFBN0E3RUEzM0ZDOTNGQzBFMUMwNTAwMkYxCi06MTA2OTIwMDBFNTM4MDUwNTQyQ0E1NTJCQzY3RURCMjBEMzBGNkQ0QURDCi06MTA2OTMwMDAwNTAwMzA4ODAwQjA4QzJFNzIxREFFOUUwRUE1MEM2NDMyCi06MTA2OTQwMDA1MDhBRDI4MDJFNzYxREMwOTEyOTg0MDNEMTBGQzA1MDY5Ci06MTA2OTUwMDAwM0U1Mzg3NUQwRDM2M0ZGQ0QxNUQ4MUMwMjdFMENBNTk2Ci06MTA2OTYwMDBFRTY0MzA1NURBMzAwRTM1MTI5NjEyOTUxMTI1NUMxMDEyCi06MTA2OTcwMDAwNTQ1MzZDMDYxOTUxMEMwNTAwMjY1MzgwNTA1NDI2NDcyCi06MTA2OTgwMDA1MDg5MkJDNjdFODUxMEQzMEY2RDVBMDUwMEEwODgwMDU0Ci06MTA2OTkwMDAyMDhDQzBBMUEzRTJDMDUwMjNGQTgwMDM3MzBDMDNBNThFCi06MTA2OUEwMDAzOEFGNzMwNTA1NDI2NDUwNzIyQkM2N0U4NTExMDU0NUNDCi06MTA2OUIwMDAwQzZENUEwNTAwMjA4ODAwMzA4Q0QyODBDMEExMEU5QjNGCi06MTA2OUMwMDAwQ0FCN0JBRkJCMkI3NjFEMkE4NDAzRDEwRkQyODBDMENBCi06MTA2OUQwMDBDMUFGN0QyRDc2MUQyQzg0MDNEMTBGMDAwMDA2M0YxNDFFCi06MTA2OUUwMDBDMUUwRDIzMDBGRUUwQzBFNEUzNjJBOEQwOEMwRjEyNUQ0Ci06MTA2OUYwMDAwQTAwMEFGNTM4MDUwNTQyQ0E1QzJCQzY3RTZERUEwNTE5Ci06MTA2QTAwMDAwMDIwODgwMEEwOEMyMjcyMUQ2M0ZFRkZDMDYxQzA1MDcwCi06MTA2QTEwMDAwMzY1Mzg3NUQ4MDI2M0ZGNkI2M0ZGNjVDMDUwMDJBNTNDCi06MTA2QTIwMDAzODc1RDA4NzYzRkY4MTAwQzA2MDAzRjYzODc2RDBDQzFDCi06MTA2QTMwMDA2M0ZGQzYwMDZDMTAwNDJBMjAxNTI5MjAxNjE0RDdEOTJDCi06MTA2QTQwMDAwQTk5MENDQjlEMkUyMDBCMDRFRDA5MkJEMTFDMDlCQ0ZGCi06MTA2QTUwMDAzNkFDQUEwQ0JCMEMyQkQ1MUMwQTBBNDcyQTI0MTVDQjMyCi06MTA2QTYwMDBBMThCNDM4RjI4ODk0MkIwQTgwMDkxMDQwMDg4MUFBOEZFCi06MTA2QTcwMDBGRjBGQkIwMjlCMjc4RjI2MEZCODBDNzgzQjFBQzAyMDU0Ci06MTA2QTgwMDBEMTBGMDAwMDI5MjEwMkMwQTIwQTk5MDIyOTI1MDJDMEMzCi06MTA2QTkwMDAyMUQxMEYwMDhCMjc2M0ZGREMyQkQxMUMwQ0FBMEMwQTIxCi06MTA2QUEwMDAwQTQ3MkEyNDE1QUNCQjJCRDUxQ0M5QUU4QjQzOEMyOEI2Ci06MTA2QUIwMDA4RjQyQjBBRDAwRjEwNDAwREQxQUFEQ0MwQ0JCMDI5QkRGCi06MTA2QUMwMDAyN0RBMjBCN0VCNTgwMDE5QzAyMUQxMEY5RjI3NjNGRkE5Ci06MTA2QUQwMDBFRjAwMDAwMDZDMTAwNDI4MjAzQzY0MzA0NzA1MzA2MDUzCi06MTA2QUUwMDAwMDA3M0UwMTA1M0VCMTU2MDc2NTM5MDU0OTI4Qzc3RkI1Ci06MTA2QUYwMDBBOTMzMDMwNjQxMDc2NjAzQjE2NjA2MDY0MUE2MzM3RTQ1Ci06MTA2QjAwMDA4NzFFMjIyMTI1MjkxQUZDNzMyQjE1MDIzODBDMDk4MUI2Ci06MTA2QjEwMDA2MDAwMDYzRTAxMDIzRUIxMjQwNjQyMzkwMzIyMEFEMTNBCi06MTA2QjIwMDAwRkQyMzBEMTBGQzA1MTYzRkZDMDAwMDA2QzEwMDQxREE0Ci06MTA2QjMwMDBENzlCMjcyMjFFQzA4MDA4RTQzMTAwMDIwMDJDRDI4MjlECi06MTA2QjQwMDAxQkQ3OTkwMDMxMDRDMDYxMDA2NjFBMkJCMTAyMEM2QzhFCi06MTA2QjUwMDAwMjJDRDY4MjBCRTQzMTE5RDgxQjBDM0ExMUFBOTMyOEM3Ci06MTA2QjYwMDAzMjgyOTc4MDI1MzI4MjI0MzI4NEI0NTUyNTM2ODI3NTRDCi06MTA2QjcwMDA0MTBBMjkyMTAyMDk2OTAyMjkyNTAyRDEwRjJBMjEwMjhECi06MTA2QjgwMDAyQjMyODMwQTZBMDIyQjM2ODIyQTI1MDJEMTBGMDAwMDlCCi06MTA2QjkwMDA2QzEwMDQxREQ3ODIxOUQ3OEMyNzIyMUVDMDgwMDk3NzVDCi06MTA2QkEwMDAwMjA4RTQzMTAwMDIwMDJDRDI4MjFCRDc3RTAwMzEwNDlGCi06MTA2QkIwMDBDMDYxMDA2NjFBMkJCMTAyMEM2QzAyMkNENjgyMEJFNDY5Ci06MTA2QkMwMDAzMTE5RDgwMDBDM0ExMUFBOTMyODMyODI5NzgwMjUzMkM1Ci06MTA2QkQwMDA4MjI0MzI4NEI0NTUyNTM2ODI3NTQxMEIyQTIxMDIwQTVCCi06MTA2QkUwMDA2QTAyMkEyNTAyRDEwRjAwMkIyMTAyMkMzMjgzMEI2QjYzCi06MTA2QkYwMDAwMjJDMzY4MjJCMjUwMkQxMEYwMDAwMDA2QzEwMDQxQkUyCi06MTA2QzAwMDBENzY3MEMyQTExQUJBQTI5QTI4NkI0Mzg3OThCMjIxQjJDCi06MTA2QzEwMDBENzY0MTlENzhCMEIyQjBBMkJCMkEzMDkyOTA4NjhCMEFDCi06MTA2QzIwMDAwMjc0QjkwRDI5OUQwMTI5OTAxRjZFOTIwODIyQTI4NTM4Ci06MTA2QzMwMDBEMTBGQzAyMEQxMEZDODkyQzAyMEQxMEZEQTIwNUJFRjU2Ci06MTA2QzQwMDAzREMwMjBEMTBGMDAwMDAwNkMxMDA0MTRENzU0Mjg0MjFFCi06MTA2QzUwMDA5RTE5RDc1MTZGODgwMjYwMDBCOTI5OTIyNjY4OTAwNzYzCi06MTA2QzYwMDA4QTIwMDlBQTBDNjVBMEFCMkE0MjlEQzBEQzY0QTBBM0JGCi06MTA2QzcwMDAyQjIwMEMxOUQ3NEIwQ0JDMTFBNENDMkVDMjg2MDlCOTAxCi06MTA2QzgwMDAwQTdFRDMwMjYwMDA5OTI5OTJBMzY4OTAwNzhEMjAwOTlCCi06MTA2QzkwMDBERDBDNjVEMDhCMjVDMjg1NjQ1MDg1MkQyMTA0QzAzMDY0Ci06MTA2Q0EwMDA2RUQ4MEQyQzIwNjZCOENDMEMwQzQ3MkMyNDY2NjVDMDIxCi06MTA2Q0IwMDA3QTFBRDc1MjFDRDc1QjFERDc0ODFFRDc0RkMwODQ5ODZECi06MTA2Q0MwMDA1MTlFNTA4OTIwOUQ1NjlENTQ5MzU3OTM1NTlDNTMwQTJECi06MTA2Q0QwMDA5OTAyMUNEN0JEMUFENzY0OTk1MjhGMjY5OTVBOTg1OTkwCi06MTA2Q0UwMDA5RTU4OTM1RTlDNUQ5MzVDOUE1QjBGMEQ0ODA1REQxMTg5Ci06MTA2Q0YwMDA5RDVGQzBEODFFRDczMjBDQjkxMUE0OTkyODkyODVBRUQ5Ci06MTA2RDAwMDBCRTIzRTRDRjI4OEM0MDI4OTY4NTlGMjkyRDI0MDZDMEQ5Ci06MTA2RDEwMDAyMEQxMEYwMENBMzJEQTIwQzBCNjVCRkY4NEM3MkZEMTYyCi06MTA2RDIwMDAwRkM5MzlEQTIwNUJGRjgxQzcyRkQxMEZEQkQwNUJGRUEzCi06MTA2RDMwMDAxOTIzMjQ2NjJCMjAwQzYzRkY3NkM3MkZEMTBGQzcyRjkyCi06MTA2RDQwMDBEMTBGMDAwMDZDMTAwNEM4NUIyOTIwMDY2ODk0MUM2OEYxCi06MTA2RDUwMDA5NjA3QzAyMEQxMEZDMDIwRDEwRkRBMjBEQjMwREM0MEY1Ci06MTA2RDYwMDBERDUwMkUwQTAwNUJGRTY5RDJBMEQxMEYyRTIwMEMxODM4Ci06MTA2RDcwMDBENzBCMENFRjExQThGRjI5RjI4NkMwODg3OThCNzUxQTAyCi06MTA2RDgwMDBENzA4MEFFQTBBMkFBMkEzNjhBMDA0OEIyMDdBQjk2NDY5Ci06MTA2RDkwMDAyM0YyODU2NDMwNUUxQ0Q3MTIyQTBBODAyRDIwNjgyOUQwCi06MTA2REEwMDAyMDY3MjgyMTA0MEI5OTExMDQ4ODExMDk4ODAyMDhERDQ1Ci06MTA2REIwMDAwMkMwOTQyODRBMTAwOEREMDIxOEQ3MEE5OTMxOTgzMDg5Ci06MTA2REMwMDA4QjJCOUEzNzlEMzQwQ0JCMDI5QjMyQzBDMDlDMzU5Q0U4Ci06MTA2REQwMDAzNjJBMkM3NERCNDBDMEQzMThENkY5MjlGMjg1QThFRUU4Ci06MTA2REUwMDAyOTlDMjAyOUY2ODUyQ0U0Q0YyRDI0MDZERDQwNUJGRDZGCi06MTA2REYwMDBGOUQyQTBEMTBGREEyMERCRTA1QkZGNENDMDIwRDEwRjJECi06MTA2RTAwMDA2QzEwMEFENjMwMkEyMDA2OTQxMDI4QUNGODY1ODNGRjRGCi06MTA2RTEwMDAyQjIxMjIyNzBBMDIyQTIxMjRDQzU3MkFBQzAxMEEwQTU0Ci06MTA2RTIwMDA0RjJBMjUyNDdBQkIwMjYwMDNGNzJDMjEwMjJBMjAwQzZBCi06MTA2RTMwMDAwQzBDNEM2NUMzOEUyRTIyMTU4RDMyQzBGMTBFREQwQzZDCi06MTA2RTQwMDA2NUQ0MDQ4ODM4MUVENkQ1NjQ4M0UxOEYzN0MwQzhDMEE2Ci06MTA2RTUwMDA5NjBGQzkzOTk5MTRCNDlCOUIxMTBEOTkxMTk5MTNDOUI3Ci06MTA2RTYwMDBGQjE5RDZEMDI5OTAyMTdGOTMxMzhCMTQ4QzIwNUJGRkM0Ci06MTA2RTcwMDA2MzFFRDZDQUREQTA2NEE0MUM4RjY3NjAwMDI5OEMxMTM0Ci06MTA2RTgwMDAwQ0FEMTFBRUREMjhEMjg2MEFBQjAyNzhDQjYyMUFENkUxCi06MTA2RTkwMDBDNDBBQkEwQTJBQTJBMzY4QTAwNTJDMjIwMDdBQzk1MDAzCi06MTA2RUEwMDAyQUQyODVEREEwNjRBM0Q3MjkyMTJFMDlGOTM2MkEyMDBDCi06MTA2RUIwMDAzQzA5RjgwQzZGOEQzRUQ3RjBDQjdGMjgyMTFGMDg3MDVFCi06MTA2RUMwMDA2MDAxMEIzRTAwMDQzRUIxQkMwNENCMzlDNzRGMEJCQjg1Ci06MTA2RUQwMDAwQTA3QkIwQTBCMEM0MTA0Q0MwM0IxQ0MwQzBDNDFBQzJGCi06MTA2RUUwMDBCQkQ0QjBDMEMyN0NBMDRDMkEyMTI1N0JBQjQ2NjAwMDNECi06MTA2RUYwMDAyQ0MwQTA2M0ZGQUNENzkwNjNGRkJEMDBDMDkyQzc0RjBBCi06MTA2RjAwMDAyQzdDMTQwQzBCNDEwNEJCMDNCMUJCMEIwQjQxQUI3NEM5Ci06MTA2RjEwMDAyNDRDMTQ3OUEwMUUyQTIxMjU3NEFCMThBQ0JCMjQxQTZBCi06MTA2RjIwMDBGQzBBQkMwQzA0QzE2MDAwMDkzRTAxMDQzRUIxNDgwOUUyCi06MTA2RjMwMDA4NDM5MEI0NDBBODkyNjg4MjcwOTg4MEM3NDgzMURDMDZDCi06MTA2RjQwMDA4MDk4RDg4QzY0OUNEOThCNjY4QTY1OUJEQjlBREE5NzhCCi06MTA2RjUwMDBENTdGNzMwMjYwMDEzQUNFNUU2MDAwMTYwMDlEMTVEQTlGCi06MTA2RjYwMDAyMERCNDA1QkZFQjQ4RDE1MUVENjhENjVBMjU2OEY2NzYzCi06MTA2RjcwMDA2M0ZGQ0I5RDE1REEyMERCMzA4QzEwNUJGRTU5OEQxNTNECi06MTA2RjgwMDAxRUQ2ODdDMDUxRDZBMDhGQTdDMEMwOEE2ODk3REQ5QTQ5Ci06MTA2RjkwMDBEQzg4Njk4OTZBOThERTk5REY4QjZBOEE2OUFCN0I3N0JFCi06MTA2RkEwMDBCQjAyMkFBQzAxOUI2QTlBNjk4ODYwQzBBMDA4OEIxNDU2Ci06MTA2RkIwMDA3Nzg3MDFDMEExQzA5MDI4MjAzQzk0MTc5NTE4OTMxNjlDCi06MTA2RkMwMDBDMDUwQzAzMUMwNDQwNDg0MDEwNDM5MzgwODk5MTBDMDRECi06MTA2RkQwMDA0MjA0ODQwMTA0MzUzODA4Mzg0MDgzMkIwQkE0MTAwNzgxCi06MTA2RkUwMDA1NTEwMkEyMTFGMDk1NTAyMDU0NDAyMEIxOTQwMEEyQThGCi06MTA2RkYwMDAxNDA3OTkxMDA1ODUxMDA0MzMwMjBBODgxMTE0RDZGMzdBCi06MTA3MDAwMDAwOTU1MDIyOTIxMDQwNDMzMDIwODk5MTEwOTg4MDJDMDk0Ci06MTA3MDEwMDA5MjA5ODgwMjI5MjEyNTkzRDAwOTI5MTQwNDk5MTEwQTdCCi06MTA3MDIwMDA5OTAyMDk1NTAyOEEyMDg5MTQwOEFBMTEwQTk5MDIxQTlDCi06MTA3MDMwMDBENjZGMTRENkU3MEE5OTAyOTlEMTgzMkE5NUQ2OThEN0E0Ci06MTA3MDQwMDA4NTE4MDQzMzAyOTNENDg0MTc4MzE2OEE2NThENjZBQTQzCi06MTA3MDUwMDBDQUFEN0Q3N0RCMDFCMUFBMDdGRjBDOUE2NTlENjY4OEYyCi06MTA3MDYwMDAyNjhDMjlBNDg4MDhDQzBDOTgyNjBDMEM0ODJDMjUyNUE1Ci06MTA3MDcwMDA5RjY3MkEyMDBDQzBDMDFCRDY1MTBDQTkxMUFFOTlBQjNBCi06MTA3MDgwMDBBQjI4OTI4NTJDQjRDRjhCMTNBQjg4Mjg5Njg1NjNGREYzCi06MTA3MDkwMDBDRDAwQzA5MUMwRjBDMEIyQzBDNDg4NjAyMzIwM0M5ODJECi06MTA3MEEwMDAxMjBDM0MwMTBCM0EwMTA4ODgxNDBCODgwMTBBOUYzODI2Ci06MTA3MEIwMDAwN0ZGMTAwODk4MzlDMEEwMEM5QTM4MDc4ODEwMDhBQTUyCi06MTA3MEMwMDAxMDBBRkYwMkMwQTgwQTMzMDEwMzkzMzkyQTIxMDQyOUI4Ci06MTA3MEQwMDAyMTI1MDUzQzEwMDhDQzAyMEEzMzExMDhBQTExMDkyOTAwCi06MTA3MEUwMDAxNDAzQUEwMjA0OTkxMTBCQUEwMjJCMjExRjgzMTQwQjZCCi06MTA3MEYwMDAyQjE0MEI5OTAyMEM5OTAyOEIyMDFDRDYzQzA4QkIxMTU3Ci06MTA3MTAwMDAwM0JCMDIwQ0JCMDI4MzJBOEMyQjY0NzA4NDg4Njg5N0IzCi06MTA3MTEwMDBERDk4REM4NzY5ODg2QTk3REU5OERGODgxMkMwNzA3NzBGCi06MTA3MTIwMDA4NzAxQzA3MTlCRDE5OUQ2MEI3ODEwOUFENzE3RDZBOTMxCi06MTA3MTMwMDAwOEY4MDIwOEM4MDIwNzg4MDIxN0Q2QTU5OEQwMDczN0IyCi06MTA3MTQwMDAwMjk3RDQyODIwMEMyOTVDRkUyQjIxMjRDMEYwMUFENkVCCi06MTA3MTUwMDAxQjBDOEQxMUFFREQyQ0QyODVBQTg4MkY4NENGOEYxMzA2Ci06MTA3MTYwMDBCMEJCQUZDQzJDRDY4NTJBMjIxNTJCMjUyNEIxQUEyQTU4Ci06MTA3MTcwMDAyNjE1NjQ5MERDQzg0RjhDMjY4QjI5QTRDQzlDMjYwQzQ5Ci06MTA3MTgwMDBCQjBDMEIwQjQ4MkIyNTI1NjU1MEU4QzAyMEQxMEYwMDA4Ci06MTA3MTkwMDAwMDAwQzA3MDlCRDE5OUQ2OUFENzg4MTI5M0Q0Nzc4Nzc0Ci06MTA3MUEwMDAwRTE4RDYwMDkyMUEyODgwMjJDMDIxMDgyNzM4ODIxQTg5Ci06MTA3MUIwMDAxOEQ2OEEwQjczMTAwM0YzMDIwM0MzMDIwODMzMDI5MzM5Ci06MTA3MUMwMDBEMDYzRkY3RTAwQ0M1N0RBMjBEQjYwOEMxMDVCRkRDNEZGCi06MTA3MUQwMDAyOTIxMDI2ODk4MDY2ODk0MDNDMDIwRDEwRjJCMjIxRTMzCi06MTA3MUUwMDBDMDkwMjgyMjFEMjkyNTAyN0I4OTAxQzBCMDY0QkZFODE4Ci06MTA3MUYwMDAxM0Q1RUEyQ0IwMDcyOEIwMDBEQTIwMDM4ODBBMjg4MkM5Ci06MTA3MjAwMDA0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRkNBMDAwMDc0Ci06MTA3MjEwMDA2OEE3NzVEQTIwREIzMERDNDBERDUwNUJGRUNBRDJBMDA3Ci06MTA3MjIwMDBEMTBGQzFGREMxOUQyOTI1MkM2MDAwMDMwMDJGMjUyQzA1Ci06MTA3MjMwMDAyRjI0NjcyNzI0NjhEQTIwREIzMDhDMTBERDUwMkUwQURCCi06MTA3MjQwMDA4MDVCRkQzMkQyQTBEMTBGQzFGOEMxQTgyQTI1MkM2M0UyCi06MTA3MjUwMDBGRkREQzg0RjhDMjY4QjI5QTRDQzlDMjYwQ0JCMEMwQkM1Ci06MTA3MjYwMDAwQjQ4MkIyNTI1MkEyQzc0REI2MDJDMTIwMDVCRkQ3NjQ1Ci06MTA3MjcwMDBEMkEwRDEwRjJBMkM3NDhCMTA1QkY2QkJEMkEwRDEwRkY5Ci06MTA3MjgwMDBEQTIwNUJGRTJBNjNGRjNDMDBEQTIwQzBCMTVCRkU2RUIxCi06MTA3MjkwMDA2NUFGMzE2M0ZCNzlEQTIwMkIyMDBDNUJGRTNENjNGRjg5Ci06MTA3MkEwMDAyMzAwMDAwMDEyRDY0RTgyMjAwMjgyNTdDODIxNjNGRkJECi06MTA3MkIwMDBGQzEyRDY0QTAzRTgzMDA0RUUzMDA1QjEzMDkzMjA5NDM2Ci06MTA3MkMwMDAyMTk1MjI2M0ZGRkMwMDAwMTBENjQ2OTEwMDkyMDE5M0E1Ci06MTA3MkQwMDAwMjk0MDMxMUQ2MUQ4MjEwMDFFQTMwQTIxMTAxRjAzMThGCi06MTA3MkUwMDBDMDQwMDRFNDE2MDAwMjAwMTFENjNGODIxMDIzNEEwMDc5Ci06MTA3MkYwMDAwMzIyMDI5MjEwMTFENjA5QzAyMTkyMTAwNEU0MzE4NEI1Ci06MTA3MzAwMDAwMzgzMDI4MjAxODEwMDAwRDIzMDAxMjMwMDAwMDAwMENCCi06MTA3MzEwMDAxMEQ2MzY5MTAwOTIwMTkzMDI5NDAzMTFENjBDODIxMDdDCi06MTA3MzIwMDAwMUVBMzBBMjExMDFGMTMxQzA0MDA0RTQxNjAwMDIwMDZDCi06MTA3MzMwMDAxMUQ2MkQ4MjEwMTNENUI0MDMyMjAyOTIxMDA0RTQzMTI5Ci06MTA3MzQwMDA4NDAzODMwMjgyMDE4MTAwMDBEMzMwMDEzMzAwMDAwMEY2Ci06MTA3MzUwMDAxMEQ2Mjc5MTAwODEwMTY1MTA0OTgxMDI2NTEwNDQ4MTkyCi06MTA3MzYwMDAwM0NGMUY5MjAxOTMwMjk0MDMxMUQ1RkE4MjEwMDFFQTEwCi06MTA3MzcwMDAzMEEyMTEwMUYyMzFDMDQwMDRFNDE2MDAwMjAwMTFENjFGCi06MTA3MzgwMDAxOTgyMTAxM0Q1OUIwMzIyMDI5MjEwMDRFNDMxODQwMzY2Ci06MTA3MzkwMDA4MzAyODIwMUMwMTA5MTAzOTEwMjkxMDE4MTAwMDBENDA3Ci06MTA3M0EwMDAzMDAxNDMwMDEyRDVDQUMwMzAyODM3NDAyODM3NDQyODVFCi06MTA3M0IwMDAzNzQ4MjgzNzRDMjMzRDAxNzIzM0VEMDMwMjAwNjNGRjQ5Ci06MTA3M0MwMDBGQzAwMDAwMDEwRDYwQjkxMDA5MjAxOTMwMjk0MDMxMTZGCi06MTA3M0QwMDBENjA5ODIxMDkyMTAxMUQ1QkM4MzEwMDMyMjAyOTIxMDlDCi06MTA3M0UwMDAxMUQ2MDYxMkQ1Q0Q5MjEwQzA0MDA0RTQxNjAwMDIwMDVBCi06MTA3M0YwMDAxMUQ1RkQ4MjEwMTNENUI1MDMyMjAyOTIxMDA0RTQzMTk5Ci06MTA3NDAwMDA4NDAzODMwMjgyMDE4MTAwMDBENTMwMDE1MzAwMDAwMDEzCi06MTA3NDEwMDA2QzEwMDI2RTMyMkZENjIwMDU2RjA0MDQzRjA0NzQ1QjlCCi06MTA3NDIwMDAyQTA1NDQwQzAwNDEwNDAwMzMxQTIyMEEwMDZENDkwRDVDCi06MTA3NDMwMDA3MzYzMDQwMzY2MENCMTIyMEYyMjExMDMxMzE0NzM2M0U4Ci06MTA3NDQwMDAwMjIyMkMwMUQxMEZDODNCRDEwRjAwMDA3MzYzMENDMDg2Ci06MTA3NDUwMDAyMUQxMEYwMDAwMDAwMDAwNDQ0OTU2MzBDMDIwRDEwRjU4Ci06MTA3NDYwMDA2QzEwMDIwMDQwMDQ2QjRDMDcwMzIzMTgwMjAyMTlEMTcwCi06MTA3NDcwMDAwRjAyMDMxOUMwMjBEMTBGNkMxMDAyMDJFQTMwRDEwRkE1Ci06MTA3NDgwMDA2QzEwMDJDQzI1MDNGMDMxNjAwMDBGMDA2RjIyMDUwMzYxCi06MTA3NDkwMDBGMTMxNjAwMDA1NkYyMzA1MDNGMjMxMDAwMjAwRDEwRkM2Ci06MTA3NEEwMDA2QzEwMDJDQzI1MDJGMDMwRDEwRjAwMDA2RjIyMDQwMkQ0Ci06MTA3NEIwMDBGMTMwRDEwRjZGMjMwNDAyRjIzMEQxMEZDMDIwRDEwRjcxCi06MTA3NEMwMDA2QzEwMDIyMjBBMjAyMzBBMDA2RDI4MEUyODM3NDAyODVCCi06MTA3NEQwMDAzNzQ0MjgzNzQ4MjgzNzRDMjMzRDAxMDMwMjAwRDEwRjk5Ci06MTA3NEUwMDA2QzEwMDIwMkU0MzFEMTBGMEEwMDQzNjg2NTZDNzM2OUM1Ci06MTA3NEYwMDA2RjIwNDY1NzIwNDQ0NTQyNTU0NzNEMzAyMDI4NDI3NTZECi06MTA3NTAwMDA2OTZDNzQyMDU0NzU2NTIwNDE3NTY3MjAzMTMyMjAzMEQ0Ci06MTA3NTEwMDAzOTNBMzQzMzNBMzAzNDIwNTA0NDU0MjAzMjMwMzAzODAxCi06MTA3NTIwMDAyMDZGNkUyMDY2NjU2QzY5NzgyRTYxNzM2OTYzNjQ2NThGCi06MTA3NTMwMDA3MzY5Njc2RTY1NzI3MzJFNjM2RjZEM0EyRjY4NkY2RDM2Ci06MTA3NTQwMDA2NTJGNjY2NTZDNjk3ODJGNzcyRjY2Nzc1RjM2MkUzMEVBCi06MTA3NTUwMDAyOTJDMjA1NjY1NzI3MzY5NkY2RTIwNTQzMzc4NzgyMDE5Ci06MTA3NTYwMDAzMDMwMzcyRTMwMzAyRTMwMzAyMDJEMjAzMTMwMzAzNzMzCi06MEM3NTcwMDAzMDMwMzAzMDEwMDcwMDAwQ0M0NEEwRDZCMgotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xLjAuYmluLmloZXggYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDJmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4CkBAIC0wLDAgKzEsMTg4NSBAQAorOjEwMDAwMDAwNjAwMDc0MDAyMDAzODAwMDIwMDM3MDAwMDAwMDEwMDBENgorOjEwMDAxMDAwMDAwMDIwMDBFMTAwMDI4NDAwMDcwMDAwRTEwMDAyODhFNworOjEwMDAyMDAwMDAwMTAwMDBFMDAwMDAwMEUwMDAwMEEwMDEwMDAwMDA2RQorOjEwMDAzMDAwNDQ0NDQ0NDBFMzAwMDE4MzIwMDIwMDAwMjAwMUUwMDAyQQorOjEwMDA0MDAwMjAwMUZGMTAxRkZGRDAwMDFGRkZDMDAwRTMwMDA0M0M5MQorOjEwMDA1MDAwMDIwMDAwMDAyMDAwNjk4ODFGRkZDMjkwMjAwMDY5RDBDNAorOjEwMDA2MDAwMUZGRkMyOTQyMDAwNkExMDFGRkZDMjk4MjAwMDZBODRGQworOjEwMDA3MDAwMUZGRkMyOUMyMDAwMDNDMEMwMDAwMEU0MzEwMEVBMzEzMQorOjEwMDA4MDAwMDBBMTMxMDBBMDMxMDMwMjAwMDJFRDMwNkUyQTA1MDAwQworOjEwMDA5MDAwRUQzMTAwMDIwMDAyMTYwMDEyRkZEQkMwMzAxNEZGREE1RgorOjEwMDBBMDAwRDMwRkQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDM0NworOjEwMDBCMDAwMEZEMzBGRDMwRjEyRkZENTIzMEEwMDI0MEEwMEQzMEY0QQorOjEwMDBDMDAwRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzBGRDMyNworOjEwMDBEMDAwMEZEMzBGMTRGRkNFMDM0MjFGMTRGRkNCMDM0MjFGMTI5NgorOjEwMDBFMDAwRkZDQ0MwMzAyRDM3MzAyRDM3MzQyRDM3MzgyRDM3M0NFRAorOjEwMDBGMDAwMjMzRDAxNzIzM0VEMDAwMjAwMTJGRkM0QzAzMDJGMzdFMAorOjEwMDEwMDAwMDAyRjM3MTAyRjM3MjAyRjM3MzAyMzNEMDE3MjMzRUQ2QQorOjEwMDExMDAwMDAwMjAwMTJGRkJFQzAzMDI3MzcwMDI3MzcxMDI3MzdGNAorOjEwMDEyMDAwMjAyNzM3MzAyMzNEMDE3MjMzRUQwMzAyMDAxMkZGQjk1RgorOjEwMDEzMDAwMTNGRkJBMEMwMjAwOTMyMDEyRkZCOTEzRkZCOTBDMDI4RgorOjEwMDE0MDAwMDA5MzIwMTJGRkI4QzAzMTkzMjA4MjIwMTJGRkI3MTMxMgorOjEwMDE1MDAwRkZCNzkzMjAxMkZGQjcxNUZGQjMxNkZGQjZDMDMwRDcxNQorOjEwMDE2MDAwMjAwNTY2MDE2MDAwMUIwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDE3MDAwMDQzNjA1MDAwMjAwRDMwRkQzMEYwNTMzMEM2RTNCMTQ3OQorOjEwMDE4MDAwMDc0NzE0MDcwNDQzNzYzMUU2MDQzNjA1MDUzMzBDNkY0MAorOjEwMDE5MDAwM0JFRDAwMDIwMDEyRkZBNjE1RkZBMzIzMEEwMEQ3MjBBMworOjEwMDFBMDAwMDcwNDQzMDQzRTA1MDUzMzBDMDc0NzE0NkYzQkYwMDM3NworOjEwMDFCMDAwMDIwMDEyRkZBMUMwMzAxNEZGQTFEMzBGRDMwRkQzMEY0MQorOjEwMDFDMDAwOTM0MEI0NDQ3MjQ5RjJEMzBGRDMwRkQzMEYxNEZGOUI2MworOjEwMDFEMDAwODM0MDE0RkY5QjgzNDAxMkZGOUIyMzBBMDAxNEZGOUE2NQorOjEwMDFFMDAwRDMwRkQzMEZEMzBGOTM0MEI0NDQ3MjQ5RjJEMzBGRDMzQworOjEwMDFGMDAwMEZEMzBGMTRGRjk1ODM0MDEyRkY5NUM5MkY4MzIwODRERQorOjEwMDIwMDAwMjE4NTIyQkMyMjc0M0IwRjg2NTBCNDU1OTYzMEI0MzNGRQorOjEwMDIxMDAwNzQzM0Y0NjNGRkU2MDAwMDY1M0ZFMTY1NUZERTEyRkZDMworOjEwMDIyMDAwN0MyMzBBMDAyODM3NDAyODM3NDQyODM3NDgyODM3NEM5MQorOjEwMDIzMDAwMjMzRDAxNzIzM0VEMDMwMjAwMDAwMjAwMTJGRjdBQzA3OQorOjEwMDI0MDAwMzIwMzJFMDUwMzAyMDAxMkZGNzgxM0ZGODE5MzIwQzBCMgorOjEwMDI1MDAwMTEwMTQ5MzEwMDQ4MzEwMTAyMDBDMDAwMTRGRjdFMDQ0MQorOjEwMDI2MDAwRDIzMTE1RkY3RDk0NTAxNEZGN0QwNEQzMzExNUZGN0NFRQorOjEwMDI3MDAwOTQ1MDE0RkY3QzA0RDQzMTE1RkY3QzI0NTYwMDE0RkZFNQorOjEwMDI4MDAwN0IwNEQ1MzExNUZGN0IyNDU2MDAxMEZGN0EwMzAwMDA1NAorOjEwMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDQyMDAwNjNGRkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDBBMQorOjEwMDQ0MDAwMUZGQzAwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBBQgorOjEwMDQ1MDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwRTMwMDA1QzgwNgorOjEwMDQ2MDAwMUZGRkMwMDAxRkZGQzAwMEUzMDAwNUM4MUZGRkMwMDA0MgorOjEwMDQ3MDAwMUZGRkMwMThFMzAwMDVDODFGRkZDMDE4MUZGRkMwMThFQQorOjEwMDQ4MDAwRTMwMDA1RTAxRkZGQzAxODFGRkZDMjhDRTMwMDA1RTA3QQorOjEwMDQ5MDAwMUZGRkMyOEMxRkZGQzI4Q0UzMDAwODU0MUZGRkMyOTBENQorOjEwMDRBMDAwMUZGRkM1OENFMzAwMDg1NDIwMDAwMDAwMjAwMDAxNkFGMworOjEwMDRCMDAwRTMwMDBCNTAyMDAwMDE4MDIwMDAwMTgwRTMwMDBDQkMxMQorOjEwMDRDMDAwMjAwMDAyMDAyMDAwMDIwM0UzMDAwQ0JDMjAwMDAyMUNGQworOjEwMDREMDAwMjAwMDAyMjBFMzAwMENDMDIwMDAwMjIwMjAwMDAyMjZBMQorOjEwMDRFMDAwRTMwMDBDQzQyMDAwMDIzQzIwMDAwMjQwRTMwMDBDQ0NERQorOjEwMDRGMDAwMjAwMDAyNDAyMDAwMDI0OUUzMDAwQ0QwMjAwMDAyNEMwMgorOjEwMDUwMDAwMjAwMDAyNTBFMzAwMENEQzIwMDAwMjUwMjAwMDAyNTlDMQorOjEwMDUxMDAwRTMwMDBDRTAyMDAwMDI1QzIwMDAwMjYwRTMwMDBDRUMzMQorOjEwMDUyMDAwMjAwMDAyNjAyMDAwMDI2OUUzMDAwQ0YwMjAwMDAyNkM1MQorOjEwMDUzMDAwMjAwMDAyNzBFMzAwMENGQzIwMDAwMjcwMjAwMDAyNzkxMQorOjEwMDU0MDAwRTMwMDBEMDAyMDAwMDI4QzIwMDAwMjhDRTMwMDBEMEM2MworOjEwMDU1MDAwMjAwMDAyOTAyMDAwMDI5M0UzMDAwRDBDMjAwMDAyQUM2QQorOjEwMDU2MDAwMjAwMDAyQjBFMzAwMEQxMDIwMDAwMkQwMjAwMDAyRjJCMworOjEwMDU3MDAwRTMwMDBEMTQyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMzhBOQorOjEwMDU4MDAwMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDM4MjAwMDAzQjBDQQorOjEwMDU5MDAwMjAwMDAzQjBFMzAwMEQzODIwMDAwM0IwMjAwMDAzQjBCQQorOjEwMDVBMDAwRTMwMDBEMzgyMDAwMDNCMDIwMDA2QkE4RTMwMDBEMzhGNQorOjEwMDVCMDAwMjAwMDZCQTgyMDAwNkJBOEUzMDA3NTMwMDAwMDAwMDA0RAorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwMUZGQzAwMDBGNQorOjEwMDVEMDAwMUZGRkM1OTAxRkZGQzY3MDIwMDA2QkE4MjAwMDZCQThFRQorOjEwMDVFMDAwREVGRkZFMDAwMDAwMDgwQ0RFQURCRUVGMUZGRkMyQTA2NAorOjEwMDVGMDAwMUZGQ0ZFMDAxRkZGQzA5NDFGRkZDNUMwMzAwMDAwMDA5RAorOjEwMDYwMDAwMDAzRkZGRkY4MDQwMDAwMDEwMDAwMDAwMDgwRkZGRkZDOAorOjEwMDYxMDAwMUZGRkMyNkQwMDBGRkZGRjgwNEZGRkZGODAwMDAwMDAzMworOjEwMDYyMDAwMDAwMDA4ODBCMDAwMDAwNTYwNTAwMDAwNjAwMDAwMDA3RAorOjEwMDYzMDAwNDAwMDAwMTEzNTAwMDAwMDQxMDAwMDAwMTAwMDAwMDFFMgorOjEwMDY0MDAwMjAwMDAwMDAwMDAwMTAwMDdGRkZGRkZGNDAwMDAwMDBCRQorOjEwMDY1MDAwMDUwMDAwMDA4MDAwMDAxOTA0MDAwMDAwMDAwMDA4MDBGMAorOjEwMDY2MDAwMTAwMDAwMDU4MDYwMDAwMDcwMDAwMDAwMjAwMDAwMDlGQworOjEwMDY3MDAwMDAxRkY4MDA4MDAwMDAxRUEwMDAwMDAwRjgwMDAwMDAyRAorOjEwMDY4MDAwMDdGRkZGRkYwODAwMDAwMDE4MDAwMDAwMDEwMDgwMDFDNAorOjEwMDY5MDAwNDIwMDAwMDAxRkZGQzIxRDFGRkZDMERDMDAwMTAwODBFMAorOjEwMDZBMDAwNjA0MDAwMDAxQTAwMDAwMDBDMDAwMDAwMDAwMDMwMDA1NAorOjEwMDZCMDAwNjAwMDA4MDA4MDAwMDAxQzAwMDEwMDAwODAwMDAwMUE5QgorOjEwMDZDMDAwODAwMDAwMThGQzAwMDAwMDgwMDAwMDAxMDAwMDQwMDBENQorOjEwMDZEMDAwMDMwMDAwMDA4MDAwMDQwMDUwMDAwMDAzRkZGRkJGRkY4NAorOjEwMDZFMDAwMUZGRkMzRDQwMDAwMEZGRkZGRkZGMDAwMDAwMDE2RDA3MworOjEwMDZGMDAwMDAwMEZGRjdBNTAwMDAwMDFGRkZDNEIwMUZGRkM0NjE4QQorOjEwMDcwMDAwMDAwMTAwMDgwMDAwMEIyMDIwMkZGRjgwMUZGRkM0NTVCMAorOjEwMDcxMDAwMDAwMDJDMDBGRkZFRkZGODAwRkZGRkZGMUZGRkM1Nzg2MQorOjEwMDcyMDAwMDAwMDIwMDBGRkZGREZGRjAwMDBGRkVGMDEwMDExMDBDRAorOjEwMDczMDAwMUZGRkMzRDIxRkZGQzU5MEZGRkZFRkZGMDAwMEZGRkJBRAorOjEwMDc0MDAwMUZGRkM2MzAxRkZGQkVBMEZGRkZGN0ZGMUZGRkMwNjRFMworOjEwMDc1MDAwMDAwMEZGRkQxRkZGQzYyMDAwMDFGQkQwMUZGRkM1QjAzQQorOjEwMDc2MDAwMUZGRkM2NjAxRkZGQzU5MUUwRkZGRTAwMUZGRkM1QTA3MQorOjEwMDc3MDAwMDAwMDgwMDAxRkZGQzUzQzFGRkZDNUI0MUZGRkMwNjhGRAorOjEwMDc4MDAwMUZGRkM0RDAxRkZDRkZEODAwMDEwMDgxRTEwMDA2MDA1QworOjEwMDc5MDAwMDAwMDI3MTAxRkZDRkUzMDFGRkNGRTcwRTEwMDAyMDA2RAorOjEwMDdBMDAwMUZGRkM1MzgxRkZGQzU1MDAwMDNEMDkwMUZGRkM1NjQ1MQorOjEwMDdCMDAwMkI1MDYzODAyQjUwNzk4MDJCNTA5MDgwMkI1MEE2ODAzQgorOjEwMDdDMDAwMUZGRkM0NjkwMTAwMTEwRjIwMkZGRTAwMjAzMDAwODBBMAorOjEwMDdEMDAwMjAyRkZGMDAwMDAwRkZGRjAwMDFGRkY4MkI1MEIyMDBBOAorOjEwMDdFMDAwMkI1MEIyMDgwMDAxMDAxMDJCNTBCMTgwMkI1MEIyODA2QQorOjEwMDdGMDAwMkI1MEJBMDAwMDAxMDAxMTJCNTBCRDI4MkI1MEJDODA5QgorOjEwMDgwMDAwMkI1MEJEQTAyMDMwMDAwMERGRkZGRTAwNTAwMDAwMDI5MgorOjEwMDgxMDAwMDBDMDAwMDAwMjAwMDAwMEZGRkZGN0Y0MUZGRkMwNkNFMworOjEwMDgyMDAwMDAwRkY4MDAwNDQwMDAwMDAwMTAwMDAwMEM0MDAwMDAyMQorOjEwMDgzMDAwMUM0MDAwMDBFMDAwMDBBMDFGRkZDNTQwMUZGRDAwMDg5NQorOjEwMDg0MDAwMUZGRkM1NTQxRkZGQzU2ODFGRkZDNTdDRTEwMDA2OTA1MAorOjEwMDg1MDAwRTEwMDA2RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMDg2MDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMDg3MDAwMDAwMDAwMDAyMDEwMDA0MDIwMTAwMDQwMjAxMDAwNDAyOAorOjEwMDg4MDAwMjAxNDAwODAyMDBDMDAwMDIwMEMwMDAwMjAwQzAwMDAzMAorOjEwMDg5MDAwMjAxMDAwNDAyMDE0MDA4MDIwMTQwMDgwMjAxNDAwODBDQworOjEwMDhBMDAwMjAxODAwQzAyMDFDMDEwMDIwMUMwMTAwMjAxQzAxMDA5OQorOjEwMDhCMDAwMjAyMDAxNDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzBDRgorOjEwMDhDMDAwMjAxQzAxMDAyMDE4MDBDMDIwMTgwMEMwMjAxODAwQzAwMworOjEwMDhEMDAwMjAxQzAxMDAyMDIwMDE0MDIwMjAwMTQwMjAyMDAxNDA1OAorOjEwMDhFMDAwMjAyMDA5NDAyMDIwMDk0MDIwMjAwOTQwMjAyMDA5NDBFNAorOjEwMDhGMDAwMjAyNDA5ODBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNworOjEwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMDkxMDAwMDAwMDAwMDAyMDAwNTJGQzIwMDA1MUNDMjAwMDUyRkNCRQorOjEwMDkyMDAwMjAwMDUyRkMyMDAwNTEwODIwMDA1MTA4MjAwMDUxMDhFRQorOjEwMDkzMDAwMjAwMDRGNDgyMDAwNEY0ODIwMDA0RjQwMjAwMDRFQUM4MAorOjEwMDk0MDAwMjAwMDRENTQyMDAwNEIzNDIwMDA0OTA4MDAwMDAwMDBENgorOjEwMDk1MDAwMDAwMDAwMDAyMDAwNTJDQzIwMDA1MTk4MjAwMDUyM0NBMgorOjEwMDk2MDAwMjAwMDUyM0MyMDAwNEZGMDIwMDA0RkYwMjAwMDRGRjBCQworOjEwMDk3MDAwMjAwMDRGRjAyMDAwNEZGMDIwMDA0RjM4MjAwMDRGRjBCMworOjEwMDk4MDAwMjAwMDRDNzQyMDAwNEFFNDIwMDA0OEI0MDAwMDAwMDAxRAorOjEwMDk5MDAwMDAwMDAwMDAyMDAwMEJFMDIwMDAzOEJDMjAwMDA0QzA1NAorOjEwMDlBMDAwMjAwMDQ0QTgyMDAwMEJEODIwMDAzRkI0MjAwMDAzRjAxMgorOjEwMDlCMDAwMjAwMDQ0NjgyMDAwNDg5MDIwMDAzQ0M0MjAwMDNCRTAxOAorOjEwMDlDMDAwMjAwMDM4MzgyMDAwMzZDNDIwMDAzNDM0MjAwMDJGOTQxMgorOjEwMDlEMDAwMjAwMDNBM0MyMDAwMkJGNDIwMDAyODI4MjAwMDY1MzQxOQorOjEwMDlFMDAwMjAwMDIzQjQyMDAwMjA5NDIwMDAyMDQwMjAwMDFEMkM1MworOjEwMDlGMDAwMjAwMDE4NDAyMDAwMTU3MDIwMDAwREVDMjAwMDBDMjQ3MQorOjEwMEEwMDAwMjAwMDExMzQyMDAwMTMyMDIwMDA0MUFDMjAwMDNDNzg0RAorOjEwMEExMDAwMjAwMDBCRTgyMDAwMDRDMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMEEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMEE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMEE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDMyNjQwMDAwMDAwMDAwMDBDMAorOjEwMEFBMDAwMzI2NDAwMDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA1OAorOjEwMEFCMDAwNjQwMDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDBFNgorOjEwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMEIxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMyMzgwMDAwMDAwMDBERgorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMEI1MDAwMDA1Qzk0MDE1RDk0MDI1RTk0MDM1Rjk0MDA0MzAwMDA4NgorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMEI5MDAwMDA1QzkwMDE1RDkwMDI1RTkwMDM1RjkwMDA1MzAwMDA0NgorOjEwMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMEJEMDAwMDA5Qzk0MDAxRDkwMDE5RDk0MDI5RTk0MDM5Rjk0MDQ5OAorOjEwMEJFMDAwMDg5NDA1MDk5NDA2MEE5NDA3MEI5NDAwNDMwMDAwMDAzQQorOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMEMxMDAwMDA5QzkwMDE5RDkwMDI5RTkwMDcxRDkwMDM5RjkwMDQ2MAorOjEwMEMyMDAwNzg5MDA1Nzk5MDA2N0E5MDA3N0I5MDAwNTMwMDAwMDAzOQorOjEwMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMEM1MDAwMDBEQzk0MDAxRDkwMDFERDk0MDJERTk0MDNERjk0MDQxNworOjEwMEM2MDAwMDQ5NDA1MDU5NDA2MDY5NDA3MDc5NDA4MDg5NDA5MDk1NgorOjEwMEM3MDAwOTQwQTBBOTQwQjBCOTQwMDQzMDAwMDAwMDAwMDAwMDA0QgorOjEwMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMEM5MDAwMDBEQzkwMDFERDkwMDJERTkwMEIxRDkwMDNERjkwMDREQworOjEwMENBMDAwQjQ5MDA1QjU5MDA2QjY5MDA3Qjc5MDA4Qjg5MDA5QjkwQQorOjEwMENCMDAwOTAwQUJBOTAwQkJCOTAwMDUzMDAwMDAwNjNGRkZDMDA0OQorOjEwMENDMDAwMjAwMDY5NjQxMEZGRkYwQTAwMDAwMDAwMjAwMDY5ODgwRQorOjEwMENEMDAwMDBEMjMxMTBGRkZFMEEwMDAwMDAwMDAwMjAwMDY5RDBBMQorOjEwMENFMDAwMDBEMzMxMTBGRkZFMEEwMDAwMDAwMDAwMjAwMDZBMTA0RgorOjEwMENGMDAwMDBENDMxMTBGRkZFMEEwMDAwMDAwMDAwMjAwMDZBODRDQQorOjEwMEQwMDAwMDBENTMxMTBGRkZFMEEwMDAwMDAwMDAwNjNGRkZDMDA2OAorOjEwMEQxMDAwRTAwMDAwQTAxMkZGRjc4MjIwMDI4MjU3QzgyMTYzRkY4MworOjEwMEQyMDAwRkMxMkZGRjMwM0U4MzAwNEVFMzAwNUMwMzA5MzIwOTQ0QQorOjEwMEQzMDAwMjE5NTIyNjNGRkZDMDAwMDFGRkZEMDAwMDAwNDAwMjA2QgorOjEwMEQ0MDAwMUZGRkM1OTAxRkZGQzY3MDIwMEEwMDExRkZGQjEzRkY5NQorOjEwMEQ1MDAwRkIwM0U2MzEwMTAyMDAxNkZGRkExN0ZGRkFEMzBGNzcwMworOjEwMEQ2MDAwNkIwNjkwNjBCNDY2Nzc2M0Y4NTQxNTUwNTQxOUU2MEYxQgorOjEwMEQ3MDAwMTQwMDYzRkZGOTAwMDAwMDZDMTAwNEMwMjBEMTBGMDBDNAorOjEwMEQ4MDAwNkMxMDA0QzBDNzFBRUYwNkQ4MzBCQzJCRDcyMDg1NzI3MAorOjEwMEQ5MDAwMEQ0MjExODM3MTA1NDUwQjk1NzIwMjMzMEMyMzc2MDFDOAorOjEwMERBMDAwN0IzQjA0MjMzRDA4OTM3MUEzMkQxMkVFRkUxOUVFRkU0QQorOjEwMERCMDAwQTI3NjdENjMyQzJFMEEwMDA4ODIwMjI4MEEwMTAzOEU4NworOjEwMERDMDAwMzgwRTBFNDJDOEVFMjlBNjdFNkQ0QTA1MDAyMDg4MDAyNgorOjEwMEREMDAwMzA4QzgyNzFEMTBGQzBGMDAyOEYzODdGQzBFQTYzRkY4MAorOjEwMERFMDAwRTQwMEMwRjFDMDUwMDM3RTBDQTJFRTBFM0QxMjA4ODI1QQorOjEwMERGMDAwMDIwM0Y1MzgwNTA1NDJDQjU3MjlBNjdFMkZEQzEwMEZEQworOjEwMEUwMDAwNEYzNjZERkEwNTAwMjA4ODAwMzA4Q0JDNzVDMDMwMDg2NAorOjEwMEUxMDAwRTIwODI4MEEwMTA1ODMzODAzMDM0MkM5M0UyOUE2N0U1OQorOjEwMEUyMDAwMEQ0ODBDRDMwRjZEOEEwNTAwMjA4ODAwQjA4QzgyNzFBQworOjEwMEUzMDAwRDEwRkMwNTAwOEY1Mzg3NUMwQzE2M0ZGQkJDMDYwMDI1OAorOjEwMEU0MDAwODYzODc2QzBEQTYzRkZENDZDMTAxMjE2RUVEOEMxRjg3QgorOjEwMEU1MDAwQzFFNzJCMjIxRTJDMjIxREMwRDA3QkMxMkYyOTIwMDZDQQorOjEwMEU2MDAwRDdCMDI5OUNGQUNDNTcyODIwNzAyODhDRkYyODI0NzBGMgorOjEwMEU3MDAwNjQ5MTVDMkFCMDAwMEVBODBDNjQ4MTY3MEZBOTBDNjQxMQorOjEwMEU4MDAwOTJCM0MxRTk3RUExMzk2OUFDMkY2MDAwMzYyOTIwMDZGMgorOjEwMEU5MDAwRDdEMDI5OUNGQUNDNTcyODIwNzAyODhDRkYyODI0NzBBMgorOjEwMEVBMDAwNjQ5MTM1MkFEMDAwMEVBODBDNjQ4MTY0MEZBOTBDNjRFQgorOjEwMEVCMDAwOTMxQkMxRTk3RUExMDk2OEFDMDlDMDIwRDEwRjAwMDBENQorOjEwMEVDMDAwMDAyRDI1MDI4QTMyQzA5MDBBNkY1MDY1RjVBRDI5MjRBNQorOjEwMEVEMDAwNjcwOTA4NDc2NTg1QTkyRjIwMEMxOEVFQjUwQ0ZFMTE4RgorOjEwMEVFMDAwQThFRTI4RTI4NkI0NDk3ODkzMDI2MDA1N0ExOUVFQjEzQgorOjEwMEVGMDAwMDlGOTBBMjk5MkEzNjg5MDA3ODgyMDA5ODgwQzY1ODU1QQorOjEwMEYwMDAwNjYyN0UyODU2NDc1NjA2NTU1OEU3QkMxMDREOUIwNjA0MworOjEwMEYxMDAwMDAwMUMwOTA4Qjk0MUNFRUE4MEI4ODE0OENDNDBCMEJBMgorOjEwMEYyMDAwNDdBOENDMThFRUE2MDlCQjEwMDhDQzAyOUM3MDE4RUU5RQorOjEwMEYzMDAwQTQxQ0VFQTUwOEE4MDEwQjg4MDIwQzRDMDIxQkVFQTExNAorOjEwMEY0MDAwOUM3MTBCODgwMjk4NzIyQzkwMjMyQjkwMjIwNEM4MTA1RAorOjEwMEY1MDAwMDZCQjEwMEM0QzEyMDhCQjAyMjg5MDIxMDdDQzEwMENDOQorOjEwMEY2MDAwODgxMDBDODgwMjBCODgwMjFDRUU5OThCMzMwQ0JCMDE5NQorOjEwMEY3MDAwOEMzNDBCODgwMjk4NzM5Qzk5OUM3NDhCOTU4QzM5OUI0QworOjEwMEY4MDAwNzU4ODk2OEIzODk4NzY4ODk3OUM3OTlCNzg5ODc3MUM4QgorOjEwMEY5MDAwRUU5MDI4RTI4NTBDRkMwODJEQzRDRjA4NDgwQjI4RTYwQgorOjEwMEZBMDAwODU2NTU1MEIyQjIyMUUyRDIyMUQ3QkQ5MDIyQjBBMDA5NQorOjEwMEZCMDAwNjRCRjA2MkNCMDA3MjhCMDAwREEyMDA2ODgwQTI4ODIxMQorOjEwMEZDMDAwNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzRkVFQjAwMDBGNworOjEwMEZEMDAwMjkyMDcwNjU5RTlDNjAwNEU0MkEyMDcwNjVBRUMzNjA4MQorOjEwMEZFMDAwMDREQjAwMDAyRUIwMDMyQzIwNjdENEUwNjVDMTA1OEEyNQorOjEwMEZGMDAwMzI4QzMzMEFGRjUwMEM0NTU0QkM1NTY0RjRFNjE5RUVBQworOjEwMTAwMDAwNzU4ODJBMDlBOTAxMDk4ODBDNjQ4MjFCQzA5MjYwMDBCNgorOjEwMTAxMDAwREQyRUQwMDMyQTIwNjdENEUwNjVBMEQ4OEEzMjhCMzMzNgorOjEwMTAyMDAwMEFGQzUwMEI0NTU0QkM1NTY0QzRCOTE5RUU2QTg4MkFCMQorOjEwMTAzMDAwMDlBOTAxNzk4OUQ1MEJFQTUwNjRBNEREMENFRTExQzAzMQorOjEwMTA0MDAwRjAyRjE2MTMyRTE2MTY4QUU3OENFODJBMTYxMjhFRTk1MAorOjEwMTA1MDAwREZDMEFBRUE3RUFCMDFCMUNGMEJBODUwNjU4MzQyODhGRQorOjEwMTA2MDAwMzdEQkMwQUU4OTk5MUU3ODlCMDIyQkNDMDEyQjE2MUI1NworOjEwMTA3MDAwMjkxMjBFMkIwQTAwMjkxNjFBN0ZDMzA3N0ZDOTAyN0U4OAorOjEwMTA4MDAwQUIwMUMwQjE2NUI0OTg4QjM1MkYwQTAwMkEwQTAwN0FFQgorOjEwMTA5MDAwQzMwNTY0QzNDNzJGMEEwMTY1RjQ4NDJCMTIxNjJCMTZFRgorOjEwMTBBMDAwMTkwMDUxMDRDMEMxMDBDQzFBMkNDQ0ZGMkMxNjE3MEMwRgorOjEwMTBCMDAwRkMxMzJDMTYxODJCMTIxQTJBMTIxQkRDNTA1ODE4RkE4MworOjEwMTBDMDAwQzBEMEMwOTAyRTVDRjQyQzEyMTcyODEyMTgyRjEyMUJCRgorOjEwMTBEMDAwMkExMjFBMDhGRjAxMENBQTAxODgzNDA3NEMwQUFCOEJBQworOjEwMTBFMDAwMjgxMjE5MkJDNjE2MkY4NjA4MkE4NjA5MkU3NDEwMjk1NQorOjEwMTBGMDAwMjQ2NzJFNzAwMzg5NzVCMUVBMkE3NDAzQjA5OTA5NDlFRgorOjEwMTEwMDAwMEM2NTlEQjUyQjIwNjcyRDI1MDI2NUIzRjQyQjIyMUU5RgorOjEwMTExMDAwMkMyMjFEN0JDOTAxQzBCMDY0QkQ5RTJDQjAwNzI4QjAzNQorOjEwMTEyMDAwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMERCQTBBMAorOjEwMTEzMDAwNjVBRkU3NjNGRDgzODlCQUIxOTk2NTkwOTc4ODM0MUNFMAorOjEwMTE0MDAwRUUyNjk4QkE4RjMzMUVFRTFGMEY0RjU0MkZCNDJDOERGRQorOjEwMTE1MDAwMkE4QTMyMEVERDAyMENBQzAxN0RDOTY2MEE0OTUxNkY0NAorOjEwMTE2MDAwOTI2MDhBMzM3NUE2NUIyQ0IwMTMwQUVENTEwRENEMDE0OAorOjEwMTE3MDAwMEQwRDQxMEMwQzQxN0RDOTQ5MkVCMDEyQjBFRTY1RTM1NgorOjEwMTE4MDAwQzJDMEQwOEUzNzhDQjg4QTM2OEZCOTdDQTMwNzdBQzk5MworOjEwMTE5MDAwMDI3RUZCMDFDMEQxQ0VEOTg4MzUwQUFEMDIwRThFMDg4MQorOjEwMTFBMDAwNzhFQjAyMkRBQzAxODlCN0RBQzBBRjlCNzlCQjAxQjFGNgorOjEwMTFCMDAwQ0FEQ0IwQzBCMDdEQTMwNzdBRDkwMjdDRUIwMUMwQjExNAorOjEwMTFDMDAwNjRCMTVEQzA5MTI5MjQ2N0MwMjBEMTBGMDAwMDhBREE4NAorOjEwMTFEMDAwQjFBQTY0QTBCQzJFMjA2NzJEMjUwMjY1RTMwQjFGRUQ4QworOjEwMTFFMDAwRjk4QTMyMThFREZFMEZBRjAxMDhGRjBDNjVGMjg2MEE4RQorOjEwMTFGMDAwNDg1MTZGODIwMjYwMDI3REMwOTAyOTI0NjcwOTBBNDcyNgorOjEwMTIwMDAwNjVBMkYyN0JDOTAxQzBCMDY0QkNBRTJDQjAwNzI4QjBBNworOjEwMTIxMDAwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMERCQTBBRgorOjEwMTIyMDAwNjVBRkU3NjNGQzkzMDAwMDBDRTk1MDY0OTJFQjBDRUZCMAorOjEwMTIzMDAwMTFDMDgwMjgxNjExQUZCRjJGMTYxOThFRjg4QkY3REE2MAorOjEwMTI0MDAwRTA4RkY5MkIxNjEwQUJGQjdGQkIwMUIxRUEwQ0E4NTA2NQorOjEwMTI1MDAwNjU4MEQ2ODgzN0RDRTBBRjg5OTkxQzc4OUIwMjJDRUMzRQorOjEwMTI2MDAwMDEyQzE2MUIyOTEyMEMyQzBBMDAyOTE2MUE3QUUzMDdFNgorOjEwMTI3MDAwN0FFOTAyN0ZCQjAxQzBDMTY1QzJBNDhCMzUyQzBBMDA4QworOjEwMTI4MDAwMkEwQTAwN0FFMzA1NjRFMUNBMkMwQTAxNjRDRTExNjBERgorOjEwMTI5MDAwMDI4RDg4MzQxQkVERDE5OERBOEYzMzFFRURDQTBGNEZDMworOjEwMTJBMDAwNTQyRkQ0MkM4QzJBOEEzMjBFQ0MwMjBCQUIwMTBDQkJFRgorOjEwMTJCMDAwMEM2NUJGMEUwQTQ5NTE2RTkyMDI2M0ZGMDU4QTMzMEExQworOjEwMTJDMDAwQUI1MDY0QkVGRDJDRDAxMzBBRUU1MTBFQ0UwMTBFMEVCMworOjEwMTJEMDAwNDEwQzBDNDEwRUNDMEM2NUNFRTgyRkQwMTJCMEZGNjU0RQorOjEwMTJFMDAwRjI2RUMwQjA4RTM3OENEODhBMzYyRkQyMDk3Q0EzMDcxNQorOjEwMTJGMDAwN0FDOTAyN0VGQjAxQzBCMTY1QkVDNzg4MzVEQkEwQUVFRQorOjEwMTMwMDAwOEU3OEVCMDFCMUFCODlEN0RBQzBBRjlENzlEQjAxQjE0MworOjEwMTMxMDAwQ0FDMEMwN0JBMzA3N0FCOTAyN0RFQjAxQzBDMTY1Q0UwQworOjEwMTMyMDAwQTFDMDkwMjkyNDY3QzAyMEQxMEY4ODM3OEMzNjk4MTQyQgorOjEwMTMzMDAwMENFOTBDMjkxNjE0MDhGODBDOTgxRDc4RkIwNzI4MTJFNAorOjEwMTM0MDAwMTRCMDg4MjgxNjE0ODkxRDlGMTU5QjE2QzBGMDJCMTIwNworOjEwMTM1MDAwMTQyOTE2MUEyQjE2MUI4QjE0N0FFMzBCN0FFOTA2ODhDQworOjEwMTM2MDAwMTU4RTE2NzhFQjAxQzBGMTY1RjFCOTI5MTIxQTJGMTIwQQorOjEwMTM3MDAwMTE4QTM1MkUxMjFCOUExQUFGRUUyRjEyMTBDMEEwQUY5MQorOjEwMTM4MDAwOUY3OUZCMDFCMUVFOUYxMTg4MUFDMEYwOTgxMDdBRTNBMworOjEwMTM5MDAwMEE3RUE5MDUyQTEyMDE3QThCMDFDMEYxNjRGMDgxNjBFRQorOjEwMTNBMDAwMDE4Mjg5MzY4QjM3OTkxNzBCRTgwQzk4MUYwOUM5MENGNQorOjEwMTNCMDAwMjkxNjE1NzhFQjA3MjgxMjE1QjA4ODI4MTYxNUQ5QzBGQworOjEwMTNDMDAwOUExOTlFMTg4QTFGMkUxMjE1MkExNjFBMkUxNjFCREEyMworOjEwMTNEMDAwQzBDMEUwOEMxNzdGOTMwQjdGQTkwNjg4MTg4RjE5NzhGRgorOjEwMTNFMDAwRkIwMUMwRTE2NUUxM0QyOTEyMUEyRjEyMTM4QTM1MkU0NworOjEwMTNGMDAwMTIxQjlBMUJBRkVFMkYxMjEyQzBBMEFGOUY3OUZCMDFGOAorOjEwMTQwMDAwQjFFRTlGMTM4ODFCQzBGMDk4MTI3QUUzMEE3RUE5MDVGQgorOjEwMTQxMDAwMkExMjAzN0E4QjAxQzBGMTY1RjEwOTJFMTIxNjJFMTZERAorOjEwMTQyMDAwMTkyQTEyMUIwMDUxMDRDMEUxMDBFRTFBQjBFRTJFMTY2QworOjEwMTQzMDAwMTcwRUZGMTMyRjE2MTgwRkNDMDFBQ0FBMkYxMjFBMEU3RAorOjEwMTQ0MDAwQkMwMUFDRkM3RkNCMDFCMUFBMkExNjFCMkMxNjFBNjM3NworOjEwMTQ1MDAwRkM2MjAwMDA3RkIzMDI2M0ZFMzE2M0ZFMkI3RUIzMDJBOQorOjEwMTQ2MDAwNjNGQzM0NjNGQzJFMDAwMDY0NTBDMERBMjBEQkYwNThDQgorOjEwMTQ3MDAwMTVERUMwMjBEMTBGQzA5MTYzRkQ3RTAwQzA5MTYzRkFEQworOjEwMTQ4MDAwNENEQTIwREI3MEMwRDEyRTBBODBDMDlBMjkyNDY4MkM0NworOjEwMTQ5MDAwNzAwNzU4MTRDRUQyQTBEMTBGMDM0QzBCMThFRDUxREJCRQorOjEwMTRBMDAwQzBBODI4NzhDMzAyMkJDREY4RDlCMDYzRkE2NTAwMDAzNAorOjEwMTRCMDAwMkEyQzc0REI0MDU4MEU1MDYzRkFFODAwMDAwMDJEMjVGQQorOjEwMTRDMDAwMDI3QkM5MDFDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREFBNQorOjEwMTREMDAwMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZCMworOjEwMTRFMDAwRTdDMDIwRDEwRkMwOTE2M0ZDMDQwMjJBMDI1ODAyNTBDOQorOjEwMTRGMDAwMEFBMjAyMDYwMDAwMDIyQTAyNTgwMjREMEFBMjAyMDZBRgorOjEwMTUwMDAwMDAwMERCNzBEQTIwQzBEMTJFMEE4MEMwOUUyOTI0NjgzQQorOjEwMTUxMDAwMkM3MDA3NTgxNEFFQzAyMEQxMEZDMDk0NjNGQkNGMDBDRAorOjEwMTUyMDAwQzA5NjYzRkJDOUMwOTY2M0ZCQzQwMDAwMkEyQzc0REIyMQorOjEwMTUzMDAwMzBEQzQwNUJGRTEzREJBMEMyQTAyQUI0MDAyRjIwMENERAorOjEwMTU0MDAwNjNGRjI3MDA4RDM1OENCNzdEQ0IwMjYzRkREMjYzRkMzMgorOjEwMTU1MDAwNzE4RjM1OEVENzdGRUIwMjYzRkRDNTYzRkM2NDAwMDA5RAorOjEwMTU2MDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNEMwMjBEMTBGMDBGQgorOjEwMTU3MDAwNkMxMDA0MkIyMjFFMjgyMjFEQzBBMEMwOTQyOTI0MDYxMgorOjEwMTU4MDAwMkEyNTAyN0I4OTAxREJBMEM5QjkxM0VEMDhEQTIwMjhERQorOjEwMTU5MDAwQjAwMDJDQjAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwMDAxMQorOjEwMTVBMDAwREJBMDY1QUZFN0MwMjBEMTBGMDAwMDAwNkMxMDA0Mjk1QworOjEwMTVCMDAwMjAwNjJBMjEwMjY4OTgwNTI4OUNGOTY1ODExQTBBMEFFMgorOjEwMTVDMDAwNEM2NUEwRjAxNkVDRkIyQjYyOUUxQUVDRjg2RkI4MDI4QgorOjEwMTVEMDAwNjAwMEYxMkFBMjI2NjhBMDA3OEIyMDBBQkIwQzY1QjAyOAorOjEwMTVFMDAwRTMyQTYyOUQ2NEEwREQyQjIwMEMwQ0JDMTFBNkNDMkQzRgorOjEwMTVGMDAwQzI4NjZGRDkwMjYwMDBENzFERUNFRjBEQkQwQTJERDI1NworOjEwMTYwMDAwQTM2OEQwMDc4RTIwMERFRTBDNjVFMEMzMjdDMjg1QzAwRAorOjEwMTYxMDAwRTA2NDcwQkIxREVDRjQ2ODQzNEQxQ0VDRjM4QTJCMENBQQorOjEwMTYyMDAwQUEwMjlBNzA4OTIwMDg5OTExMEQ5OTAyOTk3MTg4MkE0NQorOjEwMTYzMDAwOTg3NDhGMzI5Rjc1MjgyMTA0MDg4ODExOTg3NzE4RUNDOAorOjEwMTY0MDAwRTQwQ0JGMTFBNkZGMkRGMjg1QThCODJFODRDRjJERENBNworOjEwMTY1MDAwMjgyREY2ODVDODVBMkEyQzc0REI0MDU4MERFN0QyQTBGNQorOjEwMTY2MDAwRDEwRkMwMjBEMTBGMDAwMDJDOUNGOTY0QzA4RDJDMjAxQworOjEwMTY3MDAwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZGQzY2OTcwOUUwQworOjEwMTY4MDAwNjYxOEVDREE4OTMwOEYyQjA5ODk0MDBCOTkxMDA5RkYxNQorOjEwMTY5MDAwMDIwOEZGMDI5RjcwOEMyMDA4Q0MxMTBEQ0MwMjlDNzFCNworOjEwMTZBMDAwOEEzMzlBNzM4OTMyOTk3Mjg4MkE5ODc0OEYzNDlGNzUxNQorOjEwMTZCMDAwNjNGRjgyMDAwMENDNTdEQTIwREIzMERDNDA1ODE0QjhERQorOjEwMTZDMDAwQzAyMEQxMEYwMERBMjBDMEI2NTgxNTQ3NjNGRkU1MDBFRgorOjEwMTZEMDAwREEyMDU4MTU0NTYzRkZEQzAwREEyMERCMzBEQzQwREQyMgorOjEwMTZFMDAwNTA1ODE1QzdEMkEwRDEwRjJCMjEwNDU4MTNEQTFERUM4NgorOjEwMTZGMDAwQkQyQjIwMENDMEUwMkUyNDY2NjNGRjg0MkYyMTIzQzA2NQorOjEwMTcwMDAwQzg3RkMzMDI2M0ZGNzkyQzIwNjYyQjIxMDRCMUNDMEM2NworOjEwMTcxMDAwMEM0NzJDMjQ2NjU4MTNDRjFERUNCMzJCMjAwQ0MwRTBEMworOjEwMTcyMDAwMkUyNDY2NjNGRjVBMDAwMDZDMTAwNEMwQjdDMEExMTZENworOjEwMTczMDAwRUNCMDE1RUNBMkQ3MjBEODQwQjgyMkMwNDAwNTM1MDI0NQorOjEwMTc0MDAwOTY3MTk1NzAwMkE0MzgwNDA0NDJDOTRCMUFFQzk1MTk5RAorOjEwMTc1MDAwRUM5NjI5QTY3RUMxNDBEMzBGNkQ0QTA1MDA4MDg4MDAxMworOjEwMTc2MDAwMjA4QzIyMEE4OEEyNzJEMTBGQzA1MDA4QTUzODc1QjAwQgorOjEwMTc3MDAwRTM2M0ZGRDc2QzEwMDg5MzE0OTQxMjI5MjAwNjY1NTI3NgorOjEwMTc4MDAwODhDMDcxNjg5ODA1MkE5Q0Y5NjVBMjk4MTZFQzg5Mjk4OQorOjEwMTc5MDAwMjEwMjhBMTQwOTA5NEM2NTkwQzc4QUEwMEE2QTUxMkE1NQorOjEwMTdBMDAwQUNGRDY1QTBCQ0NDNUZEQjMwREEyMDhDMTI1ODE0N0MxOQorOjEwMTdCMDAwQzA1MTlBMTRDN0JGOUJBOThFMTQyRUUyMDk2OEUwNjAzRAorOjEwMTdDMDAwMkY2MjlFMURFQzdBNkZGODAyNjAwMDgxMkREMjI2Njg5MAorOjEwMTdEMDAwRDAwNTJGMjIwMDdERjk3NTJDNjI5REM3OTA2NEMwNkRFNQorOjEwMTdFMDAwOUMxMThBMTQyQjIwMEMyQUEwMjAwQ0JEMTFBNkREMEEwNgorOjEwMTdGMDAwNEYxNEJGQTgwOTg4MDEyOUQyODZBRjg4Mjg4QzA5Nzk5RgorOjEwMTgwMDAwOEI1NTFGRUM2QzBGQkYwQTJGRjJBMzY4RjAwNTI4MjIzRQorOjEwMTgxMDAwMDA3Rjg5NDMyOUQyODVENDkwNjU5MDc3NjAwMDNEMDA5MAorOjEwMTgyMDAwMDAyQjIwMEMxRkVDNjQwQ0JEMTFBNkREMjlEMjg2MEYwNQorOjEwMTgzMDAwQkYwQTZFOTYxMDJGRjJBMzY4RjAwNDg4MjA3Rjg5MDVGNgorOjEwMTg0MDAwMjlEMjg1NjU5MTY1REEyMDU4MTRFNzYwMDAxM0RBMjAwMworOjEwMTg1MDAwQzBCNjU4MTRFNTYwMDAwOUMwOTA2M0ZGQjlEQTIwNTg5QgorOjEwMTg2MDAwMTRFMjg5MTQ4OTkxMDlGRTUwNjU1MUU0OEMxMjhEMTQ5QgorOjEwMTg3MDAwREEyMERCRDA4REQwOUUxMDBENkQ1MTU4MTM1NDlBMTQ4MAorOjEwMTg4MDAwNjRBMjA4Qzc1RjhGQTE5NUE5QzA1MTBGMEY0NzlGMTI4RgorOjEwMTg5MDAwNjNGRUZCMDBDMDkxQzBGMTI4MjAwNjJDMjA2NjI4OEMzNgorOjEwMThBMDAwRjlBN0NDMEMwQzQ3MkMyNDY2NkZDNjA4OEQxNDhERDE3QgorOjEwMThCMDAwNzBERTAxQzA5MEREOTA2NDgxNTlDOUQzMkExMjAxMkJEQQorOjEwMThDMDAwMjEwNDU4MTM2NDhBMTRDMEIwMkIyNDY2OEVBOTJBQTA2MAorOjEwMThEMDAwMjAwRTI4MTQxQ0VDNDM4RDE0MTVFQzM3QzE3MDBBNzdDOAorOjEwMThFMDAwMzY4NTU2MkREQzI4QUMyQzlDMTNERUQwQTg1NTdDRDMzNQorOjEwMThGMDAwMDIyRURERjhEM0UwREE0MDA1NUIwMkRDMzA1QkZGOEFDNAorOjEwMTkwMDAwRDRBMDI4MjAwQ0I0NTVDMEQwMkIwQTg4MkYwQTgwMENGNAorOjEwMTkxMDAwOEMxMUE2Q0MyOUMyODVBRjNGQUI5OTI5QzY4NTFDRUM5QQorOjEwMTkyMDAwMkNERUYwQUM4ODJEODRDRjI4MTIwMzI5MTIwNDc4RjMyMgorOjEwMTkzMDAwMDIyRUZERjgyODkwMjBEM0UwMDc4ODBDQzE3MDA4MDgxQgorOjEwMTk0MDAwNDcyODk0MjAwODc3MzY2NTdGQUI4OTE0MTNFQzJBODlFMQorOjEwMTk1MDAwOTBDMEY0Nzc5NzQ5MUJFQzI4QzFDQTI4MjEwNDg1MTQ0QworOjEwMTk2MDAwMDk5RTQwMDZFRTExODc1MzA0ODgxMTg1NTIwRTg4MDJBNQorOjEwMTk3MDAwMEM4ODAyOUJBMDlGQTE4RjJCOURBNTk4QTQ5N0E3OTU0QgorOjEwMTk4MDAwQTYwM0ZGMDI5RkEyMkMyMDBDMUVFQzExQUVDRTBDQ0NBNQorOjEwMTk5MDAwMTEwNkNDMDgyQkMyODUyREU0Q0YyQkJDMjAyQkM2ODU4RAorOjEwMTlBMDAwMkEyQzc0OEIxMjU4MEQxNEQyQTBEMTBGMjgyMDNEQzBDMAorOjEwMTlCMDAwRTA3Qzg3N0YyRTI0NjcwRTBBNDc2NUEwN0IxQUVDMEYxOAorOjEwMTlDMDAwODgyMDFFRUJGRDhGMTQ4RUU0OEZGNDA4ODgxMTBBODg5RQorOjEwMTlEMDAwMDIwRjhGMTRBRkVFMUZFQzBBOTg5MTBGRUUwMjlFOTA0QgorOjEwMTlFMDAwMUVFQzA5QzA4MDFBRUJGQTJDRDI4NUFBQkFCOENDMjgxMgorOjEwMTlGMDAwQTRDRjJDRDY4NTJDMjEwMjJGMjA3MDBFQ0MwMkIxRkY1MworOjEwMUEwMDAwMkYyNDcwMkMyNTAyQzAyMEQxMEY4NzE0ODc3MDA3MDc2MAorOjEwMUExMDAwNDc2M0ZENkUyODIxMjNDMDk5Nzk4QjAyNjNGRTlBREQwRQorOjEwMUEyMDAwRjA2M0ZFOTUwMERBMjBEQjMwOEMxMkRENTA1ODE0RjRBMAorOjEwMUEzMDAwRDJBMEQxMEZDMEUxNjNGRjdBOEIxNDhDMTJERDUwQzBBRAorOjEwMUE0MDAwQUEyRTBBODAyQTI0NjhEQTIwNTgxMzYwRDJBMEQxMEY2NworOjEwMUE1MDAwMDA3MDk2NTUyQjYyOUU2RUI4NTMxREVCRDQyREQyMjY4NgorOjEwMUE2MDAwNjhEMDA0OEUyMDdERTk0NTJBNjI5RENCQUYyQjIxMDRFRQorOjEwMUE3MDAwMkMyMDY2NTgxMkY4QzA5MDI5MjQ2NjgyMTQxOEVCRTJENAorOjEwMUE4MDAwOEYyMTA4RkYwMTlGMjFDMDIwRDEwRjAwOEIxMEM5QjgwMgorOjEwMUE5MDAwOENBMDBDNkM1MUNDQ0M4RTI0MUZFQkQwOERFMTlFMTQwRAorOjEwMUFBMDAwMEZERDAyOURFMTg4MTA2NThGQTlDMDIwRDEwRkRBMjBEQgorOjEwMUFCMDAwQzBCNjU4MTQ0REMwMjBEMTBGMDAwMDAwNkMxMDA2Mjk4QworOjEwMUFDMDAwMjEwMkMwRDA3NTk3MTAyQTMyMDQ3RkE3MEE4QjM1N0Y3OAorOjEwMUFEMDAwQkYwNTJEMjUwMjBERDkwMjA5MEM0QzY1QzE4MjE2RUJGQworOjEwMUFFMDAwQjQxRUVCQjIyODYyOUVDMEZBNzhGMzAyNjAwMTg4MjkyNgorOjEwMUFGMDAwRTIyNjY4OTAwNzhBMjAwOUFBMEM2NUExN0EyQTYyOURDRAorOjEwMUIwMDAwREZBMDY0QTE3NzJCMjAwQzBDQkMxMUE2Q0MyOUMyODZDNworOjEwMUIxMDAwQzA4Qzc5ODMwMjYwMDE1NzE5RUJBNzA5QjkwQTI5OTI5MQorOjEwMUIyMDAwQTM2ODkwMDc4ODIwMDk4ODBDNjU4MTQzMjdDMjg1MUMxQgorOjEwMUIzMDAwRUJBOTY0NzEzQTg5MzEwOThCMTQwQ0JCMDE2RkIxMUQ5QgorOjEwMUI0MDAwMkMyMDY2OUYxMEIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2QworOjEwMUI1MDAwNjAwMTQwMDlGRjUwNjVGMTNBOEExMDJBQUMxODg5MzRCNworOjEwMUI2MDAwQzBDNDdGOTczQzE4RUJBQTFCRUJBOThGMzU5QzcxOUJENworOjEwMUI3MDAwNzA4QjIwOUQ3NDA4QkIwMjlCNzJDMDgyOTg3NTFCRUIxMgorOjEwMUI4MDAwQTUwRjA4NDA5QjczMEY4ODExOTg3NzdGRjcwQjJGMjFDMworOjEwMUI5MDAwMDIyODRBMDAwOEZGMDIyRjI1MDJDMEI0NjAwMDA0MDA5QQorOjEwMUJBMDAwMDAwMEMwQjA3RTk3MDQ4RjM2MkYyNTIyN0Q5NzA0ODhEMQorOjEwMUJCMDAwMzcyODI1MjE3Qzk3MzZDMEYxQzA5MDBBRjkzODJGM0M5MAorOjEwMUJDMDAwMjAwOTA5NDI2NDkwODYxOUVCNzYxOEVCNzcyODk2N0VGNworOjEwMUJEMDAwMDBGMDg4MDBBMDhDMDBGMDg4MDBBMDhDMDBGMDg4MDA0NQorOjEwMUJFMDAwQTA4QzJBNjI5RDJERTRBMjJBQUMxODJBNjY5RDg5MzAxOQorOjEwMUJGMDAwNzc5NzM4OEYzMzhBMzIxOEVCODAwN0JFMEIyQzIxMDQ3RAorOjEwMUMwMDAwQjRCQjA0Q0MxMTk4RTBDMDg0OThFMTg4MkI5REU1OUE4MAorOjEwMUMxMDAwRTY5RkU3MUFFQjc4MDk5RjQwMDZGRjExMEZDQzAyMEFGNgorOjEwMUMyMDAwODgwMjk4RTJDMUZDMEZDQzAyMkNFNjA0QzlCODJDMjAzMworOjEwMUMzMDAwMEMxRUVCNjcwQ0NBMTFBRUNDMDZBQTA4MjlBMjg1MkQ5MgorOjEwMUM0MDAwQzRDRjA5QjkwQjI5QTY4NUNGNUNDMDIwRDEwRkMwODFCNAorOjEwMUM1MDAwQzA5MDBGODkzOEMwODc3OTg4MDI2M0ZGNzI2M0ZGNjY3RQorOjEwMUM2MDAwMDBDQzU3REEyMERCMzBEQzQwNTgxMzREQzAyMEQxMEZCOAorOjEwMUM3MDAwREEyMDU4MTNERDYzRkZFOEMwQTA2M0ZFODJEQTIwQzBEQgorOjEwMUM4MDAwQjY1ODEzRDk2M0ZGRDkwMERCNDAyQTJDNzQ1ODBDNUE3QworOjEwMUM5MDAwRDJBMEQxMEY4QTEwMkIyMTA0NTgxMjZFMUVFQjQ0QzAyMworOjEwMUNBMDAwRDAyRDI0NjY2M0ZFQjEwMDZDMTAwNkQ2MjAxOUVCM0ZFMAorOjEwMUNCMDAwMUVFQjQxMjg2MTAyMTdFQjNFMDgwODRDNjU4MDVGOEFFNQorOjEwMUNDMDAwMzAwQTZBNTE2OUEzNTcyQjcyOUU2RUI4M0YyQTkyMjYzQQorOjEwMUNEMDAwNjhBMDA0OEM2MDdBQzkzNDJBNzI5RDJDNENGRUNBQUI3MQorOjEwMUNFMDAwMkI2MDBDQjY0RjBDQkQxMUE3REQyOEQyODYwRUJFMEFBNAorOjEwMUNGMDAwNzhGQjI2OUMxMTJFRTJBMzJDMTYwMDY4RTAwNTJGNjJDQgorOjEwMUQwMDAwMDA3RUY5MTUyMkQyODVDRjI1NjAwMDBEMDBEQTYwQzA3MworOjEwMUQxMDAwQjY1ODEzQjVDODVBNjAwMTBGMDBEQTYwNTgxM0IyNjU5RgorOjEwMUQyMDAwNTEwNkRDNDBEQjMwOEQzMERBNjAwRDZENTE1ODEyMjdFMgorOjEwMUQzMDAwRDNBMDY0QTBGMzg0QTFDMDUxMDQwNDQ3NjNGRjZEMDBFNQorOjEwMUQ0MDAwQzBCMDJDNjA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkYzNgorOjEwMUQ1MDAwQzYwMjcwOTYwQTJCNjEwNDU4MTIzRUMwQjAyQjY0NjYwRQorOjEwMUQ2MDAwNjU1MEI0MkEzQzEwQzBFN0RDMjBDMEQxQzBGMDAyREZDRgorOjEwMUQ3MDAwMzgwRjBGNDI2NEYwOTAxOUVCMEExOEVCMEIyODk2N0U4RgorOjEwMUQ4MDAwOEQxMDZEREEwNTAwQTA4ODAwQzA4Q0MwQTA4OTMwMURDMAorOjEwMUQ5MDAwRUIxQTc3OTc1Mzg4MzI4QzEwOEYzMzAyQ0UwQkMwMjQwNgorOjEwMURBMDAwOTJFMTIyNjEwNDlERTAwNDIyMTE4RDZCOUJFNTlGRTc4NworOjEwMURCMDAwOThFNjFGRUIxMDA5OTg0MDA2ODgxMTA4MjIwMjBGRERGMworOjEwMURDMDAwMDJDMThEOURFMjA4MjIwMjkyRTRCNEMyMkU2MDBDMUY3MworOjEwMUREMDAwRUIwMDBDRTgxMUE3ODgyQzgyODVBRkVFMEMyMjBCMkJCMAorOjEwMURFMDAwRTRDRjIyODY4NUQyQTBEMTBGMjg2MDBDRDJBMDhDMTExRQorOjEwMURGMDAwMTlFQUY4MEM4RDExQTk4OEE3REQyRUQyODUyQjg0Q0Y4NgorOjEwMUUwMDAwMEVDQzBCMkNENjg1RDEwRkMwRjAwQURGMzg3RkU4MDI0QworOjEwMUUxMDAwNjNGRjZDNjNGRjYwMDAwMDJBNkM3NEMwQjJEQzIwRERERAorOjEwMUUyMDAwNDA1ODEyMUNDMEIwNjNGRjYzQzAyMEQxMEYwMDAwMDBGNworOjEwMUUzMDAwNkMxMDA0MkMyMjFEMkEyMjFFQzA0OUQzMjAyOTMwMDZGMgorOjEwMUU0MDAwMjQzNDY4QzA0MDdBQzEwNUREQTA2MDAwMDIwMEMwRDAyMworOjEwMUU1MDAwNkU5NzM4QzA4RjJFMEE4MDJCMzAxNEMwOTYyOTM0MDYxNgorOjEwMUU2MDAwMEVCQjAyMkUzMTAyMkIzNDE0N0U4MDA0MjQzNTAyREU5OAorOjEwMUU3MDAwNDA3QUMxMEVDOEFCREJEMERBMzAyQzBBMDA1ODBBNzZBMworOjEwMUU4MDAwMkUzMTAyMEUwRjRDQzhGRUMwMjBEMTBGNjg5NUY4MjhFNQorOjEwMUU5MDAwMzEwMjA4MDg0QzY1OEZFRjFBRUFDNjFDRUFDNDJCQTI2RgorOjEwMUVBMDAwOUVDMDlBN0I5QjQ2MkJDMjI2NjhCMDA0OEQzMDdCRDk5RQorOjEwMUVCMDAwM0IyOUEyOURDMEUzQ0I5Mzk0OTAxQkVBRDcyRDMxMDQxQworOjEwMUVDMDAwOUI5NjA4REQxMTBFREQwMjlEOTc5RDkxMTJFQUQ0QzAwQworOjEwMUVEMDAwRTUyNEM0QTIyRTM0MDYyRjMxMDIyOEEyOUQwMkZGMDI1RgorOjEwMUVFMDAwMjg4QzMwMjhBNjlEMkYzNTAyQzAyMEQxMEZEQTMwQzBCMworOjEwMUVGMDAwQjY1ODEzM0RDMDIwRDEwRjZDMTAwNjI5MjAwNjY4OThGMworOjEwMUYwMDAwMDUyODlDRjk2NTgyNUQyOTIxMDIwOTA5NEM2NTkyMTAxQQorOjEwMUYxMDAwQ0Q1MURCMzBEQTIwMDQ0QzAyNTgxMkExQzA1MUQzQTBCRAorOjEwMUYyMDAwQzdBRjJBMzYwQUMwRTAxOUVBQTMxREVBQTkxRkVBQTIzMAorOjEwMUYzMDAwOEEzQTE2RUE5RkIxQUM2NEMxMzUyODYyOUU2Rjg4MDI2NgorOjEwMUY0MDAwNjAwMUYxMjlEQzMzMjk5MjI2Njg5MDA3OEIyMDA5QkJCOAorOjEwMUY1MDAwMEM2NUIxRTAyNzYyOURDMDhFNjQ3MUQ4MkIyMDBDMENGQgorOjEwMUY2MDAwQkMxMUE2Q0MyOUMyODY3OTgzMDI2MDAxRDIxOUVBOTFGQworOjEwMUY3MDAwMDlCOTBBMjk5MkEzOTcxMDY4OTAwODI4MjIwMDA5ODhCNQorOjEwMUY4MDAwMEM2NTgxQkIyN0MyODU2NDcxQjUyOTIwMDYyOTlDRjk5RgorOjEwMUY5MDAwNjQ5MUVDMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2MgorOjEwMUZBMDAwNkVDNjAyNjAwMUExMDlGODUwNjU4MTlCODgzNjg5RjRFQworOjEwMUZCMDAwMDg4QzE0QUM5OTFDRUE4MTBDOTkwMjJDMjEwNDk5NzBBQworOjEwMUZDMDAwMTlFQTk4MDgwODQ3OTk3MTg5MkEwOTg4MTAwODk5MDIxRQorOjEwMUZEMDAwMThFQTk1MDg5OTAyOTk3MjI4MzAxMzI5MzAxMjA0ODg1QQorOjEwMUZFMDAwMTAwNjk5MTAwODk5MDIyODMwMkM5QTc0MEM4ODEwMDg1MQorOjEwMUZGMDAwQzgwMjA5ODgwMjk4NzM4OTM3OTk3NTg4Mzg5ODc2OEE1MworOjEwMjAwMDAwMzlDMDgxOUE3NzFBRUE4ODg5MzU5ODdCOTk3ODA5ODk0NQorOjEwMjAxMDAwMTQwQTk5MDI5OTdBOEEzMDg5MzI3N0E3MzYxOEVBNzZCMworOjEwMjAyMDAwOEYzMzk4N0NDMDg0OTg3RDg4MkIyRTc2MTEyOTc2MTI2OAorOjEwMjAzMDAwMkY3NjEzMTlFQTcwMEE5RjQwMDZGRjExMDRDQTExMDk4RQorOjEwMjA0MDAwODgwMjBGQUEwMjk4N0VDMUY5MEZBQTAyMkE3NjEwQzA1MAorOjEwMjA1MDAwQUE2MDAwMDFDMEE2QURCRjBDQkMxMUE2Q0MyOUMyODVFOAorOjEwMjA2MDAwMkVGNENGMDlBOTBCMjlDNjg1NjU1MTA3QzAyMEQxMEZEMQorOjEwMjA3MDAwMkIyMDBDMENCQzExMDZDQzA4MjhDMjg2MDlCOTBBNkZBQgorOjEwMjA4MDAwODkwMjYwMDEyRTI5OTJBMzY4OTAwODJBMjIwMDA5QUFEOQorOjEwMjA5MDAwMEM2NUExMUYyQUMyODU2NEExMTkyODIwM0QwODI4NDA4QgorOjEwMjBBMDAwNjQ4MDhDODQzNTA0ODQxNDY0NDA4NDg1RjU3NDUzN0Y4MworOjEwMjBCMDAwODQzNjA0ODQxNDY0NDA3Nzc0NTM3NDI5MzAxM0MwOENCQworOjEwMjBDMDAwNzk4ODZDQzA5MDI5MjQ2NzA5MDg0NzY1ODBFRDg4MjBDRAorOjEwMjBEMDAwODlGNDg0MzUxRkVBNEIwNDg0MTRBNDk0MEY0NDAyOTRCOQorOjEwMjBFMDAwQTAxNEVBNDYwODg4MTEwNDg4MDI5OEExODQzNjk4QTNBRgorOjEwMjBGMDAwMDQ4NDE0QTQ5OTBGOTkwMjk5QTIxOUVBNDJBREI0Mjg1NAorOjEwMjEwMDAwQzI4NTJFNDRDRjI4OEMxMDI4QzY4NTI4MjEwMjJGMjA3NgorOjEwMjExMDAwNzAwOTg4MDJCMkZGMkYyNDcwMjgyNTAyQzAyMEQxMEYzOQorOjEwMjEyMDAwMDBDQzU3REEyMERCMzBEQzQwNTgxMjFEQzAyMEQxMEYyNAorOjEwMjEzMDAwQzA5MTYzRkY4RkRBMjBDMEI2NTgxMkFCNjNGRkUxMDA5NQorOjEwMjE0MDAwREEyMDU4MTJBOTYzRkZEODhBMTAyQjIxMDQ1ODExNDFCNAorOjEwMjE1MDAwMURFQTIwMUZFQTE5MkIyMDBDQzBFMDJFMjQ2NjhBM0FDMworOjEwMjE2MDAwNjNGRTQ4MDAwMERBMjBEQjMwREM0MERENTA1ODEzMjRFOQorOjEwMjE3MDAwRDJBMEQxMEYyQTJDNzREQjQwNTgwQjFGRDJBMEQxMEY1NAorOjEwMjE4MDAwMjkyMTIzQzA4ODc5ODMwMjYzRkUyMDJBMTIwMDJDMjA5MworOjEwMjE5MDAwNjYyQjIxMDQyQ0NDMDEwQzBDNDcyQzI0NjY1ODExMkRFNQorOjEwMjFBMDAwMURFQTBDMUZFQTA1MkIyMDBDQzBFMDJFMjQ2NjhBM0E5QgorOjEwMjFCMDAwNjNGREY4MDBEQTIwNTgxMjhDNjNGRjY0REEyMDVCRkZCRAorOjEwMjFDMDAwMUNEMkEwRDEwRjAwMDAwMDZDMTAwODk1MTVDMDYxQzE5MQorOjEwMjFEMDAwQjBEOTQwMkEyMDNEQzA0MDBCQUEwMTBBNjQzODJBMjAwOQorOjEwMjFFMDAwMDYyOTE2MDY2OEE4MDUyQ0FDRjk2NUMzM0IxREU5RjI2MworOjEwMjFGMDAwNjQ0MDA1MkYxMjA1NjRGMjlDMjYyMTAyMUVFOUVFMDZCQQorOjEwMjIwMDAwMDY0QzY1NjJFMzE1RTlFQTY0NDBEOThBMzUyOTMwMDM1MgorOjEwMjIxMDAwOUExNDBBOTkwQzY0OTBDQzJDMjAwQzhCMTQ5QzExMENGMQorOjEwMjIyMDAwQ0MxMUE1Q0M5QzEyMkNDMjg2QjRCQjdDQjMwMjYwMDIzQworOjEwMjIzMDAwRDM4RjExMEVGRTBBMkVFMkEzNjhFMDA5ODYyMEQzMEY4OQorOjEwMjI0MDAwMEU2NjBDNjU2MkJFODgxMjI4ODI4NTY0ODJCNjg5MTQ4NworOjEwMjI1MDAwNjQ5MDVFREE4MEQ5MzA4QzIwMUVFOUU4MUZFOUU5MUQyMAorOjEwMjI2MDAwRTlENjhCMTQ4REQ0RDRCMDdGQjcxOEI4OEEyOTNDMTAyNgorOjEwMjI3MDAwODUzNjA4QzYxMTBFNjYwMjk2ODEwNTg1MTRBNUQ1MEYxMAorOjEwMjI4MDAwNTUwMjk1ODAwNDE4MTQ2RDg5Mjc4ODk2MDhDQjExMDg4QgorOjEwMjI5MDAwODgxNDBFQkIwMkE4RDgyOTlDMjAwRjg4MDI5QkExOTgwNQorOjEwMjJBMDAwQTA4ODkyOUJBMzA4ODgxNEE4RDgwRjg4MDI5OEEyMkExNQorOjEwMjJCMDAwQUMxMDE5RTlENEMwQzA4RjE0MUVFOUM1ODYxMjhEMTE2NworOjEwMjJDMDAwMjg2Mjg1QUVERDA4RkYwQjJDRDRDRjI4MjEwMjJGNjZCMworOjEwMjJEMDAwODU4QjM1MkEyMDcwMDk4ODAyQUJBQTI4MjUwMjJBMjQ3QQorOjEwMjJFMDAwNzBDMDIwRDEwRjI5NTI5RTE4RTlCMTZGOTgwMjYwMDI4OAorOjEwMjJGMDAwMDgyODgyMjY2ODgwMDgyOTIyMDAwODk5MEM2NTkxRjkyRgorOjEwMjMwMDAwMkE1MjlEQzFDQTlBMTM2NEExRUYyQjIwMEMyNjIwMDZFNQorOjEwMjMxMDAwMENCODExQTU4ODJEODI4NjBFQkUwQTdEQzMwMjYwMDIwQworOjEwMjMyMDAwMDIyRUUyQTM2OEUwMDgyRjIyMDAwRUZGMEM2NUYxRjNGNQorOjEwMjMzMDAwMjg4Mjg1REU4MDY0ODFGRjk4MTAyNjZDRjk2NDYxRkYzNQorOjEwMjM0MDAwMkMyMDY2ODgzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI1QQorOjEwMjM1MDAwNjAwMUJDMDhGRDUwNjVEMUI2MTdFOUI0MTlFOTk4MUFCNworOjEwMjM2MDAwRTk5RjJDMjEwNDhCMkQyODMwMTAyRjIxMUQwQzg4MTA2MworOjEwMjM3MDAwMEJGQjA5MEM4ODAyMEE4ODAyMDlCQjAyNjQ0MTUyODlERQorOjEwMjM4MDAwMTBDMDREOUI5MDk3OTE5ODkyOEQzNUQ5RTA2NEQwNkM5OAorOjEwMjM5MDAwRDczMERCRDBEODMwN0ZENzEzMjczQzEwQkNFOTI2MzJBQQorOjEwMjNBMDAwMTY4QzM5OTZFNjlDRTc4QTM3QjQzODlBRTgwQjEzMTRGMgorOjEwMjNCMDAwNjQzMDQ5MkE4MjE2ODY3OTlBOTY5Njk3OEM3NzhBN0QxOAorOjEwMjNDMDAwOUM5ODJCODIxNzJDN0MyMDlBOUEyQTlDMTg5Qjk5ODY4MQorOjEwMjNEMDAwN0JCMDNCQjg4OTZEQjkyMThCQzk5NkE1MjY5MjE2MkE4OAorOjEwMjNFMDAwQUMxOEI4OTk5QkExOTZBMDhCQzc4NkNEOUJBMjJCOTJDNworOjEwMjNGMDAwMTU5NkE0OUJBMzg2Q0IyQ0NDMjAyNkE2MDVDMDM0NkJCNworOjEwMjQwMDAwRDQyMDBEM0IwQzBERDgwOTBFODgwQTdGQjcwNUMwOTA2QgorOjEwMjQxMDAwOTk4OEJDODhDMDkwMEIxQTEyNkRBQTA2OTk4ODk5OEI2RQorOjEwMjQyMDAwMjg4QzE4QzBEMDFCRTk4MzFDRTk4MjE2RTk3OEIxRkYxQgorOjEwMjQzMDAwMkEyMTFDMjNFNjEzMEYwRjRGMjZFNjEyMkYyNTFEN0Y5RQorOjEwMjQ0MDAwQTkwNkMwRjBDMDgwMjgyNTFEMDVGNjExMUFFOTcxOEY3NAorOjEwMjQ1MDAwMjAyQkU2MTUyQ0U2MTYyREU2MTcyNkU2MTgwQUZBMDJCQQorOjEwMjQ2MDAwMkFFNjE0MjkyMDA2Mjk5Q0Y5NjQ5MEZGMjkyMDBDOEQ2NgorOjEwMjQ3MDAwMTVDMDgwMUFFOTU3MEM5QzExQUE5OUE1Q0NEQTIwMkIxQgorOjEwMjQ4MDAwQzI4NTI4OTRDRjBCNEIwQjJCQzY4NUMwQjA4QzE2NTgzOQorOjEwMjQ5MDAwMTExNEQyQTBEMTBGOEEzNTZGQTU0OEQ4MzA4QkQ1NkRENQorOjEwMjRBMDAwQTkwQzhBODYwQThBMTRDQkE5N0FCMzM3Mjg4QzEwQzA2MworOjEwMjRCMDAwODAyODI0NjcwODBCNDc2NUIxMTJEQTIwREIzMDJDMTIyNAorOjEwMjRDMDAwMDY1ODExMzdEM0EwQzBDMUMwRDAyREE0MDM5QzE1NjNGQQorOjEwMjREMDAwRkQyNjg2MzY2NDYxMEM4OTEwQzA0RDlCOTA5NzkxOThCQgorOjEwMjRFMDAwOTI2M0ZFQTRDMDgxNjNGRkM3OEExNUNDQTdEQTIwREIwNAorOjEwMjRGMDAwMzA4QzE2NTgxMTJCQzAyMEQxMEZEQTIwQzBCNjU4MTFERAorOjEwMjUwMDAwQkE2M0ZGRTQwMERBMjA4QjExNTgxMUI3NjNGRkQ5MDBEQQorOjEwMjUxMDAwOUUxNzhBMTMyQjIxMDQ1ODEwNEY4RTE3QzBCMDJCMjRGRQorOjEwMjUyMDAwNjY2M0ZFMzRDMDgwNjNGRTA5REEyMERCMzA4QzE2REQ4MgorOjEwMjUzMDAwNTA1ODEyMzNEMkEwRDEwRkRBMjA1ODExQUI2M0ZGQTg0NAorOjEwMjU0MDAwMkQyMTIzQzBDODdEQzMwMjYzRkUwRDhBMTMyQjIxMDRGNQorOjEwMjU1MDAwMkMyMDY2OTgxN0IxQ0MwQzBDNDcyQzI0NjY1ODEwM0RFMworOjEwMjU2MDAwOEUxN0MwRDAyRDI0NjY2M0ZERUUwMDAwMjYyMTIzQjAxNworOjEwMjU3MDAwNjYwNjA2NEYyNjI1MjM2NTZFRjEyODIwNkE3Rjg3MDVBQgorOjEwMjU4MDAwMDgyOTQxNjQ5MEE1QzBEMDFCRTkxQzE5RTkyQjI2MjAxRAorOjEwMjU5MDAwMDcyM0U2MUJCMTY2MDlGQTAyMkJFNjFBMjgyMDBBMkQ0QQorOjEwMjVBMDAwRTYxRDJBRTYxRTA5ODgwMjI4RTYxQzg4MjYwNjA2NDczQworOjEwMjVCMDAwMjhFNjIwMkIyMjA4MjZFNTNFMkJFNjIxMkQyNDA3MkM5OQorOjEwMjVDMDAwMjAwNjJBMjA2NDY4QzM0N0I0NDQ2M0ZFOUVEQjMwREFFOQorOjEwMjVEMDAwMjA4RDE1QzBDRTJFMEE4MDJDMjQ2ODhDMTY1ODEwN0JCNgorOjEwMjVFMDAwRDJBMEQxMEY4RTEwMkEzMjE2MTZFOEYzMEEyQTE0ODZDQQorOjEwMjVGMDAwNjYyQkU2MTI5N0UxMjdFNjEzMjhFNjE0QUE2NjA5NjYxOQorOjEwMjYwMDAwMDI5NkUwMkVFQzQ4NjlFRDUwQzE0NjYzRkQ3QTAwMDA2OQorOjEwMjYxMDAwNjRBRkI0MTlFOEU5MjgyMDE2ODk5MjBBODgwQzAwOTE2MQorOjEwMjYyMDAwMDQwMDg4MUFBOEI4OTgyOTYzRkY5QzAwMkIyMTA0NkUyNworOjEwMjYzMDAwQjgxRTJDMjA2NkI4Q0MwQzBDNDcyQzI0NjZDOUMwOUU1MgorOjEwMjY0MDAwMTc4QTEzNTgxMDA0OEUxN0MwMzQ4RjIwQzBEMDJEMjQ0MQorOjEwMjY1MDAwNjZDMDY4MjYyNDA2NjNGRjJDMDA4RDM1QzA4MDY0RDBEOAorOjEwMjY2MDAwNEFEOUUwREMzMERCRTBERjMwMUFFOEY0QjE4OEI0RkZBRgorOjEwMjY3MDAwMTdFOEY0ODZDOTI0OURGRjhEQzgyQ0NDMTAyRDQ2MzA1OAorOjEwMjY4MDAwMDc2NzAxMkQ0NjMyMEE2NjAxMURFOEVFMjY0NjMxQUQ4OAorOjEwMjY5MDAwNkQyRDQ2MzMyNkYyMTU5N0I3OTZCNjg0QzNCQ0JCOTQwRQorOjEwMjZBMDAwQjU4RDM1Mjk5QzEwN0Q4M0MyMkYyMTFEQzE0NjYzRkQ0OAorOjEwMjZCMDAwNEIwMDAwMDA2QzEwMDYyOTIwMDYyODlDRjg2NTgyQzM5OAorOjEwMjZDMDAwMjkyMTAyMkIyMDBDMDkwOTRDNjU5MEUxMTZFOEI5MEM3MAorOjEwMjZEMDAwQkExMUE2QUEyREEyODYyQzBBMTI3REMzMDI2MDAyOTAwRQorOjEwMjZFMDAwMTlFOEI1MDlCOTBBMjk5MkEzNjg5MDA3OEMyMDA5Q0M4QQorOjEwMjZGMDAwMEM2NUMyN0MyOUEyODU2NDkyNzYyRDYyOUUxQUU4QUI5NQorOjEwMjcwMDAwNkZEODAyNjAwMjcyMkFBMjI2MjkxNjAxNjhBMDA4MkIzRgorOjEwMjcxMDAwMjIwMDBBQkIwQzY1QjI2MDI5NjI5REMxOEM2NDkyNTg4QworOjEwMjcyMDAwMkEyMTIwMEE4MDYwOTkxMDJDMjAzQ0M3RUYwMDBGM0UyMAorOjEwMjczMDAwMDEwQjNFQjFCRDBGREIzOTBCQkIwOThGMjYwREJEMTE1RgorOjEwMjc0MDAwMkREQzFDMEQwRDQxMEVERDAzOEUyN0IxREQwRDBENDE3RAorOjEwMjc1MDAwMEZFRTBDMERCQjBCMkJCQzFDMEJCNzAyN0VDNzFDMkM0OQorOjEwMjc2MDAwMjEyNTdCQ0IxNjJEMUFGQzBDQkEwQzBEQTE2MDAwMDk5QgorOjEwMjc3MDAwM0UwMTA3M0VCMTc4MDk4NzM5MEI3NzBBNzdFQjAyNjA5MworOjEwMjc4MDAwMDIwQTJDMjEyMzI4MjEyMUIxQ0MwQzBDNEYyQzI1MjMwQgorOjEwMjc5MDAwN0M4QjI5QjBDRDJEMjUyM0M4NTVEQTIwREIzMDU4MEY4RQorOjEwMjdBMDAwRkEyOTIxMDJDQzk2QzBFODBFOUUwMjJFMjUwMkNDNTdCMworOjEwMjdCMDAwREEyMERCMzBEQzQwNTgxMDdBQzAyMEQxMEYyQzIwNjZBNAorOjEwMjdDMDAwODkzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAxRDM1MworOjEwMjdEMDAwMDlGRDUwNjVEMUNEMkYwQTAxMkUzMDExMjkyMjE0NjQzNAorOjEwMjdFMDAwRTAxMTI4MjIxQjA5MEM0NDAwQzEwNDAwRkExQTBBODhDRgorOjEwMjdGMDAwMDIyODI2MUIyRTMwMTBDMEEwQzBCMDg4MzAxQ0U4NkUwNgorOjEwMjgwMDAwOTQxMjk1MTNDMDQxMjUyMDNDMkNDMDIyMDg4RDE0NzdDQQorOjEwMjgxMDAwODcwNTJGMEEwMTBDRkEzOEMwRjJDMDg0MDg1ODAxMEY0RQorOjEwMjgyMDAwNUYwMTBGNEIzODA1MzU0MDA3QkIxMEMwRjAwODRGMzgyQgorOjEwMjgzMDAwMDhGRjEwMEZCQjAyMjhFQ0ZFQzBGMDA4NEYzODg0MkJCNQorOjEwMjg0MDAwMEJBODEwMEFGRjEwMkEyMTIwMEY4ODAyMEI4ODAyMDgwQgorOjEwMjg1MDAwNDQwMjE4RTg3RDhGMTEwODQ0MDIyODIxMjUwQTJBMTQxMQorOjEwMjg2MDAwMDgyODE0MDQ4ODExMEE4ODAyMkEyMTA0OTRGMDhCMjA3NQorOjEwMjg3MDAwMDRFNDEwMDhCQjExMDRCQjAyQzA0QTA0QkIwMjlCRjE3NAorOjEwMjg4MDAwODQyQTA4QUIxMTBCRUIwMjk0RjQwQTU0MTEwQjQ0MDI5NgorOjEwMjg5MDAwMDU1NTEwMEQxQjQwOTRGNzA3QkIxMDBCNTUwMjA4NTU0QQorOjEwMjhBMDAwMDJDMDgxOTVGNjg0MzNDMDUwOTRGM0IxOTQ4QjMyOTU3NQorOjEwMjhCMDAwRjg5OEY5OUJGMkMwODBDMUJDMjQyNjE0OThGQjlCRjVDNAorOjEwMjhDMDAwOTlGQTg1Mzg5NUZDODQzQTk0RkQ4QjNCOUJGRTg4MzlCOAorOjEwMjhEMDAwOThGRjg1MzUyNUY2MTA4NDM2ODUxMzI0RjYxMThCMzczRAorOjEwMjhFMDAwODQxMjJCRjYxMkMwQjA2NEMwODE4OTMwNzc5NzQ2OEQ3MAorOjEwMjhGMDAwMzI4ODMzMkUzMDEwOEYxMTFDRTg0MDA5OTk0MDA2OTkxOAorOjEwMjkwMDAwMTEyQ0Y2MTRDMEM0MkNGNjE1OEMyQjJERjYxQTI4RjZCMworOjEwMjkxMDAwMUIyQkY2MTkwNEE4MTEwOTg4MDIwOEVFMDIxOUU4MzVFNAorOjEwMjkyMDAwQzE4MDA4RUUwMjA5QzkwMjI5RjYxNjJFRjYxOEMwOUVDQgorOjEwMjkzMDAwNjAwMDA0MDAwMDAwQzA5QTJGMjAwQzE4RTgyNTBDRkU0RgorOjEwMjk0MDAwMTFBOEZGQTZFRTJERTI4NTJCRjRDRjBEOUQwQjJERTZGMQorOjEwMjk1MDAwODVDODdGOEEyNjg5MjlBN0FBOUEyNjBBOTkwQzA5MDk3NworOjEwMjk2MDAwNDgyOTI1MjU2NTUwNENDMDIwRDEwRjAwQzA5QTYzRkYyRgorOjEwMjk3MDAwQzZEQTIwNTgxMDlENjNGRTM0REEyMEMwQjY1ODEwOUE4QgorOjEwMjk4MDAwNjNGRTJBMDA2ODk3MzhDMDIwRDEwRjAwMDBEQTIwREJGMAorOjEwMjk5MDAwNzA1ODEwNTdDMEIwQzBDMTBBQ0EzOTBBQ0IzODY1QkREQgorOjEwMjlBMDAwRTA2M0ZFMDk4QTEwMkIyMTA0NTgwRjJBQzBCMDJCMjRBMworOjEwMjlCMDAwNjY2M0ZFMjFEQjQwMkEyQzc0NTgwOTBGRDJBMEQxMEY4OAorOjEwMjlDMDAwREEyMDU4MEYyRjYzRkNGNzZDMTAwNEMwMjBEMTBGMDBFMQorOjEwMjlEMDAwNkMxMDA0MjkwQTgwMUVFODFEMUZFODFEMUNFN0Y1MEM3OQorOjEwMjlFMDAwMkIxMUFDQkIyQzJDRkMyREIyODUwRkNDMDI5RUQxOUNBNAorOjEwMjlGMDAwRDBDMDUxQzA3MDEzRTgxOTE0RTgxODE4RTgxNjJBQjJBQworOjEwMkEwMDAwODVBODI4MDQyNDBBMjM0NjkxQTk4NkI4QUEyQUI2ODU0RgorOjEwMkExMDAwQTk4ODI3ODQ5RjI1NjQ5RkQxMEYwMDAwNkMxMDBBRDZENworOjEwMkEyMDAwMzAyODMwMTAyOTIwMDYyODhDRjk2NDgyOUI2ODk4MEI4NgorOjEwMkEzMDAwMkE5Q0Y5NjVBMUIyMDIyQTAyNTgwRjExODkzNzFCRTdCNworOjEwMkE0MDAwREVDODkxNjQ1MjBFMkEyMTAyMEEwQzRDNjVDMjU4OEREMAorOjEwMkE1MDAwMzAxOUU3RDc3NEQ3MDUyRTIxMjM2NUUyOUUyRjkyOUU2OQorOjEwMkE2MDAwMUFFN0QzNkZGODAyNjAwMjUzMkFBMjI2NjhBMDA4MkM0NgorOjEwMkE3MDAwMjIwMDBBQ0MwQzY1QzI0NDJBOTI5RDY0QTIzRTlBMTU5QgorOjEwMkE4MDAwMUZFN0NEOEQ2N0MxRTY2NEQwMEUyQjYyMDYxOEU3Q0EzQQorOjEwMkE5MDAwNjRCMDA1Mjg4MDIxN0I4QjQyMkIyMDBDMThFN0M1MENFNQorOjEwMkFBMDAwQkMxMUE4Q0MyOUMyODY3OUVCNDUwRkJFMEEyRUUyQTM0MQorOjEwMkFCMDAwNjhFMDA0OEYyMDdFRjkzNzJDQzI4NTlDMTg2NEMyMzNFRAorOjEwMkFDMDAwMkIyMTJGODc2NjBCN0IzNjBCNzkwQzZGOUQyNjZFRDJFMAorOjEwMkFEMDAwNDYyQzIwM0Q3QkM3NDBDRTU1NjAwMDFFMkEyMDBDQzFFRAorOjEwMkFFMDAwQjI4QzIwNTgxMDc1OUExODY0QTI0NThENjc2M0ZGQ0Y4OQorOjEwMkFGMDAwQzBDMDYzRkZDNUQ3QjA2M0ZGRDMwMEMwRTA2MDAwMDI3MQorOjEwMkIwMDAwMkU2MDAzMEVEQjBDNkVCMjBFREM3MDBDRUExMUFBNkFBQQorOjEwMkIxMDAwMkFBQzIwNTgwMTk5RDdBMERBMjBEQjcwQzFDODJEMjEzQQorOjEwMkIyMDAwMjA1ODEwMUI4QzI2OEIyNzlBMTYwQ0JCMEM3QUIzMzRCQQorOjEwMkIzMDAwOEYxODg5NjM5OUYzODg2Mjk4RjI4RTY1OUVGODJENjBFQworOjEwMkI0MDAwMTA4QTE4OUQxNzY4RDcyOUMwRDA5REE5MkMyMjE4MkI1MAorOjEwMkI1MDAwMjIxMzlDQUI5QkFBOTdBNThFNjY3RTczMDI2MDAwOTc5QQorOjEwMkI2MDAwQ0Y1ODYwMDAxRkRBMjA4QjE2NTgwRkUxNjVBMTM4NjMzQgorOjEwMkI3MDAwRkZCREMwODFDMDkwOEYxOEMwQTI5QUY5OTlGQjk4RkE0NgorOjEwMkI4MDAwOTdGNTYzRkZEMkRCMzBEQTIwREM0MDU4MEY4NUMwNTE2NworOjEwMkI5MDAwRDZBMEMwQzAyQkEwMTAyQ0E0MDM5QjE3MkMxMjA4MDI5NworOjEwMkJBMDAwMkEwMjA2NkIwMkRGNzAyRDYwMDM4RTE3OUQxNDlFMTBBMworOjEwMkJCMDAwMENERDExQzBFMEFENkQyRERDMjA1ODAxMTg4QzE0OEI5QworOjEwMkJDMDAwMTZBQ0FDMkM2NDAzOEEyNjg5MjlBQkFBMEE5OTBDOUEwNAorOjEwMkJEMDAwMjY4ODY2MDkwOTQ4MjkyNTI1MDc4ODBDOTg2NjJGMjIyQQorOjEwMkJFMDAwMThBN0ZGMkYyNjE4NjNGRTk2REEyMERCMzBEQzQwRERDNQorOjEwMkJGMDAwNTA1ODEwODNEMkEwRDEwRkMwMzAyQzIwNjY4OTYxQjEwQgorOjEwMkMwMDAwQ0MwQzBDNDcyQzI0NjY2RUM2MDI2MDAwRDJDMDMwMDk4MgorOjEwMkMxMDAwRkQ1MDY1RDBDQThFNjc2NEUwNjk2NDcwNjZEQjYwOENDNQorOjEwMkMyMDAwMThERjcwREEyMDJENjAwMzhFMTcwQ0REMTE5RTEwQURCOQorOjEwMkMzMDAwNkQyRERDMjAxRUU3ODQ1ODAwRjkyMzI2MThEQTIwOEIzRQorOjEwMkM0MDAwMTZEQzQwMkYyMjEzREQ1MEIxRkYyRjI2MTM1ODBGMjQxRQorOjEwMkM1MDAwRDJBMEQxMEYwMDI4MjAzRDA4NDg0MDY1OERFNzZGOTUzMAorOjEwMkM2MDAwM0VEQTMwOERCNTZEOTkwQzhDQTgwQzhDMTRDQUNGN0NEMworOjEwMkM3MDAwRDMyRDJBQUMxMEMwOTAyOTI0NjcwOTBENDc2NEREQzUwNworOjEwMkM4MDAwNjAwMDkyMDAyQzEyMDgwNjZCMDIyRDZDMjAwNzdGMDI1OAorOjEwMkM5MDAwOEUxN0RBMjA5RTEwMUVFNzZCNTgwMDdENjNGRjlBMDBBNgorOjEwMkNBMDAwQzA5MTYzRkZEMTAwMDAwMDY1NTA4MURBMjBEQjYwREM1OQorOjEwMkNCMDAwNDA1ODBGM0JDMDIwQzBGMDJGQTQwM0QxMEZEQTIwQzAzMgorOjEwMkNDMDAwQjY1ODBGQzk2M0ZGRTAwMDAwNkY5NTAyNjNGRDZDREEzMAorOjEwMkNEMDAwMjBEQjMwREM0MERENTBDNEUwNTgwRUJDRDJBMEQxMEY2OAorOjEwMkNFMDAwOEExNTJCMjEwNDU4MEU1QjIzMjQ2NjI4NjAxMDk4MTc0MAorOjEwMkNGMDAwNjNGRjIxMDBEQTIwNTgwRkJDNjNGRkFCQzg1OERCMzBGQworOjEwMkQwMDAwREEyMDU4MEVBMTJBMjEwMjY1QUY5Q0MwOTQwOUE5MDJCRAorOjEwMkQxMDAwMjkyNTAyNjNGRjkxREIzMERDNDBERDUwQzBBMzJFMEE4MQorOjEwMkQyMDAwODAyQTI0NjhEQTIwNTgwRUE5RDJBMEQxMEZDMDIwRDE2MQorOjEwMkQzMDAwMEZEQTIwMkIyMDBDNTgwRkM1NjNGRjZCNkMxMDA0Mjg5MgorOjEwMkQ0MDAwMjAwNkMwNjIyODhDRjg2NTgxMjVDMDUwQzdERjJCMjI4MQorOjEwMkQ1MDAwMUJDMEUxMkEyMDZCMjkyMTIzMDBBMTA0QjA5OTI5MjU1OQorOjEwMkQ2MDAwMjNCMUFBMDBFQzFBMEJDNDAxMEEwQTQ0MkEyNDZCMDRGQQorOjEwMkQ3MDAwRTQzOTBEQ0MwMzBDQkIwMTJCMjYxQjY0NDA2OTI5MjBEMAorOjEwMkQ4MDAwMEMxQkU3MEIwQzlBMTEwQkFBMDgyRkEyODYxQkU3MDk1NAorOjEwMkQ5MDAwNkZGOTAyNjAwMEI2MEI5QjBBMkJCMkEzNjhCMDA4MkMzNworOjEwMkRBMDAwMjIwMDBCQ0MwQzY1QzBBNDJCQTI4NTFERTcyRDY0QjBCRQorOjEwMkRCMDAwOUI4QzJCMjQyMTA0MERDQzAyOUNCMDg4MjBDMEM1MDgxQworOjEwMkRDMDAwODgxMTBDODgwMjk4QjE4ODJBMDg0NDExOThCNDhGMzQ2RAorOjEwMkREMDAwOTRCNzlGQjVDMDQwMUVFNkZFMkRBMjg1MEU5RTA4MjUyNQorOjEwMkRFMDAwRTRDRjJEREMyODJEQTY4NTI5MjEwMjA5MDk0QzY4OTQwMQorOjEwMkRGMDAwMUE2ODk4MjBDOTQwMkEyMTAyNjVBMDBCMkEyMjFFMkI5RQorOjEwMkUwMDAwMjIxRDdBQjEwMjY1QTA3OUMwMjBEMTBGMkMyMTIzNjU0MworOjEwMkUxMDAwQ0ZERTYwMDAwODJFMjEyMTJEMjEyMzdFREJENTJCMjI0MQorOjEwMkUyMDAwMUUyRjIyMUQyNTI1MDI3QkY5MDFDMEIwNjRCRkM0MTNFQgorOjEwMkUzMDAwRTZERjJDQjAwNzI4QjAwMERBMjAwMzg4MEEyODgyNEM4RAorOjEwMkU0MDAwQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZGQTYyQTJDNzQxRQorOjEwMkU1MDAwQzBCMDJDMEEwMjU4MEQ5NTFDRTcwMzlDQTA4QjIwMDhEQgorOjEwMkU2MDAwQkIxMTA2QkIwMjlCQTE4OTM0OTlBMjYzRkY3OTAwMDBDNAorOjEwMkU3MDAwMjYyNDY4REEyMERCMzBEQzQwREQ1MDU4MEZFMUQyQTA5OAorOjEwMkU4MDAwRDEwRkRBMjAyQjIwMEM1ODBGNThDMDIwRDEwRjAwMDA5MgorOjEwMkU5MDAwNkMxMDA2MDczRDE0QzA4MERDMzBEQjQwREEyMEMwNDdGMAorOjEwMkVBMDAwQzAyMTIzQkMzMDAzMjgzODA4MDg0Mjc3NDAwMUIxREQzNworOjEwMkVCMDAwNjQ4MTVBMUVFNkJCMTlFNkJDMjlFNjdFRDMwRjZEREFBMworOjEwMkVDMDAwMDUwMDUwODgwMDMwOENDMEUwQzAyMDI1QTAzQzE0RTZFRQorOjEwMkVEMDAwQkFCNkQzOEZDMEMwRDAwRjg3MTQyNDQwMjIwRjg5NDBDOAorOjEwMkVFMDAwOTQxMDc3RjcwNEMwODEwNDgyMzhDMEYxMEIyODEwQzAxOQorOjEwMkVGMDAwNDRDMDIyMDQ1NDAxMDRGRDM4MDI1MjAxMDJGRTM4MDg4NQorOjEwMkYwMDAwREQxMDgyMUMwN0VFMTAwRTZFMDIwRUREMDIyNDJDRkU3OAorOjEwMkYxMDAwQzBFMDA0RkUzODBBRUUxMDBFODgwMjBEODgwMjhEQUI2OAorOjEwMkYyMDAwMUVFNkFBMDhEODAyMEU4ODAyOThCMEMwRTgwNDI4MTA0RAorOjEwMkYzMDAwMEU1RTAxODRBMDI1QTEyNTA4NDQxMTA4NDQwMjA1MjU0MAorOjEwMkY0MDAwMTQwNDU1MTEwNDM0MDJDMDgxMEU4RTM5OTRCMThGQUEzNQorOjEwMkY1MDAwODQxMDlGQjQ3NTY2MEMyNkExMUZDMEYyMDYyNjE0NjA2QgorOjEwMkY2MDAwMDAwOTAwMDAyNkExMjBDMEYyMDYyNjE0MDU2NTAyMEYwNAorOjEwMkY3MDAwNzcwMTA3ODczOTA1RTYxMDA3NzgxMDA4NjYwMjA2NTVCRAorOjEwMkY4MDAwMDI5NUI2MjVBMTA0MEFFNjExMDg1ODExMDgyODAyMDg3RQorOjEwMkY5MDAwNjYwMjk2QjdDMDYwNjQ0MDU2NjQ5MDUzMDY3RTExQzBDNgorOjEwMkZBMDAwRjQ4OUMyODhDMzBCMzQwQjk2NDU5ODQ3OTk0NjE4RTZCNgorOjEwMkZCMDAwOTE5RjQxMDQ1OTExMEU5OTAyMUZFNjhGMDIwRTQ3MDg5NgorOjEwMkZDMDAwRDgwMjk4NDIwRTk5MDI5RjQwQzFFMDBFOTkwMjk5NDQ5RQorOjEwMkZEMDAwMkZBMDBDQjQzODBDRjkxMTE0RTY3RTFFRTY3NUE0RkY4MAorOjEwMkZFMDAwQUU5OTJFOTI4NTI2RjRDRjBFODgwQjI4OTY4NUQxMEZBOAorOjEwMkZGMDAwMkJBMDBDMUZFNjZGMUNFNjc2MENCRTExQUNCQkFGRUUyRgorOjEwMzAwMDAwMkRFMjg1MjZCNENGMEQzRDBCMkRFNjg1RDEwRkMwODA3NgorOjEwMzAxMDAwMDUyODM4Nzg0ODAyNjNGRUEyNjNGRTk2NkMxMDA2QzA0RAorOjEwMzAyMDAwQzA2NTcwRjE4ODMwQzAzMDA4ODcxNDc3ODcxMkMwQjA0RgorOjEwMzAzMDAwQzBBNjE5RTY2MTI5OTAyMkMwMzBDQzk3QzAzMTYwMDA0QgorOjEwMzA0MDAwMDNDMEIwQzBBNkMwRTBDMDkxQzBENEMwODIyNTIwM0M1RgorOjEwMzA1MDAwMEIzRjEwOTcxMjgzMUNDMDcwMDg1ODAxMEQ1RDAxMDhDQQorOjEwMzA2MDAwOTczOEMwODAwQjk4MzgwNzc3MTAwNDg4MTAwODY4MDJEQQorOjEwMzA3MDAwMDg3NzAyQzA4MDBEOTgzODJEM0NGRTA4ODgxMDBEOUUwMAorOjEwMzA4MDAwMzg4RDJCMEFFRTEwMDhFRTAyMDdFRTAyMENCODEwMEY3NgorOjEwMzA5MDAwREQwMjA1M0I0MDBFREQwMjlENDA4OTIwMDQzRDEwMDgwNQorOjEwMzBBMDAwOTkxMTBEOTkwMjJEMjEwNDA5QTkwMjA4REQxMTk5NDFGOAorOjEwMzBCMDAwODcyQTA1QjkxMDBEM0QwMjBBQkIxMTBEQkIwMjA4NzcyNgorOjEwMzBDMDAwMDI5NzQ0MjgyMTI1ODcxMjA4MjgxNDA0ODgxMTA3MUUxNgorOjEwMzBEMDAwNDAwN0VFMTAwRTk5MDI3NTY2MDkyNjIxMUYwNjI2MTQ3OAorOjEwMzBFMDAwNjAwMDA2MDAyNjIxMjAwNjI2MTQwODY4MDI5QjQ3MDk3NgorOjEwMzBGMDAwODgwMjk4NDYyOTIwMENEMkMwQzA4MDBDOUUxMTFCRTY4NQorOjEwMzEwMDAwMzQxRkU2MkJBQjk5QUZFRTJERTI4NTI4OTRDRjBEQURBMQorOjEwMzExMDAwMEIyREU2ODVEMTBGREQ0MEMwQTZDMEIwOEU1MUNBRTBCMAorOjEwMzEyMDAwQjJBQUIxQkIyRERDMTA4RjUwMEU3ODM2OTgxMDA4NzdGQworOjEwMzEzMDAwMEM5RkQ4OThEOTg5NTM4RjUyOTkxMTk5REI5RkRBN0VDOQorOjEwMzE0MDAwODMwOUIxQ0MyNTVDMTBDOTc3NjNGRkNGODgxMDhEMTEzRQorOjEwMzE1MDAwMDhFNzBDOTc1MUFEOEREN0YwNzhEQjAxQjFGNzlENTM5RgorOjEwMzE2MDAwOTc1Mjg4MzBDMDMwMDg4NzE0MDg4ODQwNjQ4RUQ1NjUyRgorOjEwMzE3MDAwQkVDOTYzRkVCQzAwMDAwMDZDMTAwNEQ3MjBCMDNBODhDMgorOjEwMzE4MDAwMjBDMDMwODIyMUNBQTA3NDJCMUUyOTcyMDQ2RDA4MEY0MgorOjEwMzE5MDAwQzk4MEM5OTE4NTc1QjEzM0EyNTI3QTNCMEI3NDJCMDg1MworOjEwMzFBMDAwNjNGRkU5MDA2NDlGRUNEMTBGRDI0MEQxMEYwMDAwMDAxMworOjEwMzFCMDAwNkMxMDA4RDYzMEMwNzA5NTE1REE0MDhFMzkxNEU1RkVEMworOjEwMzFDMDAwOUExNDY0RTAwMjY0NTFGQzI5MjAwNjJBOUNGODY1QTI0NgorOjEwMzFEMDAwNUYyQTIxMDIwQTBCNEM2NUIyMUYyQzMyMDAxNUU1RjQ2MAorOjEwMzFFMDAwNzRDNzA1MkQyMTIzNjVEMzI0MkU1MjlFMUFFNUYwNkY1NgorOjEwMzFGMDAwRTgwMjYwMDIxQjJBQTIyNjY4QTAwODJCMjIwMDBBQkI1NAorOjEwMzIwMDAwMEM2NUIyMEMyRTUyOUQxREU1RUI2NEUyMDM4QjM4NjQxNQorOjEwMzIxMDAwQjIyRDlFMTZDOEJDOEQ2OTFFRTVFODY0RDAwNTJFRTA2RgorOjEwMzIyMDAwMjE3QkVCNDkyRTIwMEMxOEU1RTIwQ0VGMTFBOEZGMjlCOQorOjEwMzIzMDAwRjI4NkMxODY3OThCNEExN0U1REYwN0U3MEEyNzcyQTM3MgorOjEwMzI0MDAwNjg3MDA0ODgyMDc3ODkzOTI1RjI4NTY0NTJBMjI3MjE4NQorOjEwMzI1MDAwMkUwN0I3MzYwN0I5MEM2RjlEMDFEN0IwODk2OTZFOTJGQQorOjEwMzI2MDAwNDIyODIwM0Q3Qjg3M0M4QTE1Q0RBRjYwMDAxOEMxQjI1MworOjEwMzI3MDAwOEMyMDJBMjAwQzU4MEU5MEQ1QTA2NEEyQUM4QjY4NjNEOQorOjEwMzI4MDAwRkZDQkMwNTA2M0ZGQzNDMEUwNjAwMDAyMkU2MDAzMEU5RQorOjEwMzI5MDAwOUIwQzZFQjIwRURDNzAwQ0VBMTFBQTZBMkFBQzI4NUI5OQorOjEwMzJBMDAwRkZCNkQ3QTBEQTIwREI3MEMxQzQyRDIxMUY1ODBFMzgxRAorOjEwMzJCMDAwOEMyNjhCMjdENEEwMENCQjBDN0FCMzI1OEE2M0MwOTBENAorOjEwMzJDMDAwOUE1Mzg4NjI5OTU4OTg1MjhGNjU5RjU5OEU2NzlFNUI3MgorOjEwMzJEMDAwOEQ2Njk3NTU5RDVBOEI2ODdCN0I3NDhCMTVDRUIzNjAzQQorOjEwMzJFMDAwMDAwRERBMjBEQjQwNTgwRTAyNjVBMTBENjNGRkNDMDAxMworOjEwMzJGMDAwREEyMERCMzA4QzE0NTgwREFBRDZBMEMwQzBDMEQxOURGNgorOjEwMzMwMDAwMTUyQ0E0MDNEQTIwREI2MERGNzBEQzUwQzBFMDI1NjAwMAorOjEwMzMxMDAwMDM5RTEwMUVFNUMxMEM1RDExQUQ2RDJEREMyODVCRkYxOQorOjEwMzMyMDAwM0Y4RTY2QTVBODhGNjcyODY0MDNBRjdGNzdGQjAxQjE0NgorOjEwMzMzMDAwRUU5RTY2OUY2NzhEMjY4QzI5QTRERDBEQ0MwQzlEMjYwNAorOjEwMzM0MDAwOEI2ODBDMEM0ODJDMjUyNTA3QkIwQzlCNjg2M0ZFQzNCRgorOjEwMzM1MDAwMkMyMDY2ODk2MUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDIwOQorOjEwMzM2MDAwNjAwMEI4MDlGRDUwNjVEMEIyQ0JCRjhFNjlDQkVCREJGNgorOjEwMzM3MDAwNjBEQzUwREY3MERBMjAxRUU1QkMyRDYwMDNDMDgwOTg1MQorOjEwMzM4MDAwMTAwQ0REMTFBRDZEMkREQzI4NUJGRjI0OEIxNUM5NDJCRgorOjEwMzM5MDAwOEEyNjI5MjIwOTA0QUEwODJBMjYwNjBBOTkwQzA5MDk1QworOjEwMzNBMDAwNDgyOTI1MjU2NUIxM0NDMDIwRDEwRjAwREI2MDJENkM3QworOjEwMzNCMDAwMjhERjcwREEyMEMwQzAxRUU1QUM5QzEwREM1MDVCRkUzQworOjEwMzNDMDAwQjQ2M0ZGQzcwMDJEMjAzRDBENEQ0MDY1RERGOTZGRTU2RAorOjEwMzNEMDAwMjJEQTMwOEY0NTZERTkwQzhFQUEwRThFMTRDOUUzN0U3OQorOjEwMzNFMDAwRjMxMTJBQUMxMEMwOTAyOTI0NjcwOTBGNDc2NEZERDc1OAorOjEwMzNGMDAwNjAwMTQxMDBDMDkxNjNGRkVEMDA4ODE1NjU4MTRDREFFMgorOjEwMzQwMDAwMjBEQjYwOEMxNDU4MEQ2NkMwMjBDMDkwMjlBNDAzRDEyNQorOjEwMzQxMDAwMEZEQTIwQzBCNjU4MERGNDYzRkZERTAwOEExNjJCMjFBOAorOjEwMzQyMDAwMDQ1ODBDOENDMEEwMkEyNDY2OEI2ODYzRkYzQTAwMDAwNQorOjEwMzQzMDAwMDAyQjlDRjk2NUIwQzVEQTIwNTgwQzkxNjNGRDkxMDAxMgorOjEwMzQ0MDAwMkIyMDBDMENCQTExQTVBQTJGQTI4NkMxQzI3RkMzMDJFMQorOjEwMzQ1MDAwNjAwMEZDMERCOTBBMjk5MkEzNjg5MDA3OEMyMDA5Q0M2MgorOjEwMzQ2MDAwMEM2NUMwRUIyNkEyODU2NDYwRTUyQzIwNjY4OTMxQjEyRAorOjEwMzQ3MDAwQ0MwQzBDNDcyQzI0NjY2RkM2MDI3MDk2MEFEQUUwMkIzRgorOjEwMzQ4MDAwMjEwNDU4MEM3NDI3MjQ2Njg5MzA3Nzk3NEIxOEU1NTkyNgorOjEwMzQ5MDAwMURFNTVBOEEzMjhCMzNDMEY0MkMyMTA0MDk5RTQwMDY2NAorOjEwMzRBMDAwRUUxMTA0Q0MxMTBFQ0MwMjlGNjFDMUUwMEVDQzAyOUQ0NgorOjEwMzRCMDAwNjA4RjJCOUE2NjlCNjc5QzY0OTc2NTA4RkYwMjlGNjJFQQorOjEwMzRDMDAwMkYyMDBDMThFNTQzMENGRTExQTVFRTJERTI4NUE4RkY3OAorOjEwMzREMDAwMjdGNENGMkREQzIwMkRFNjg1OEYxNTY1RjA5MUMwMjBENworOjEwMzRFMDAwRDEwRjAwMDAyQTJDNzQ4QjE0NTgwNjQzRDJBMEQxMEZBMAorOjEwMzRGMDAwMDBEQTIwREJFMDU4MERCQzYzRkVGRTAwMDBEQTIwREJDMgorOjEwMzUwMDAwMzA4QzE0OEQxNTU4MEUzRUQyQTBEMTBGMDAwMDg4MTVCNgorOjEwMzUxMDAwQzg4OERBMjBEQjMwNTgwQzlDMkEyMTAyNjVBRURBQzA1QworOjEwMzUyMDAwOTQwOUE5MDIyOTI1MDI2M0ZFQ0ZEQTIwMkIyMDBDNTgyQQorOjEwMzUzMDAwMERDNzYzRkVDNDI3MjQ2OERBMjBEQjMwMkMxMjA0MkQ2QgorOjEwMzU0MDAwMTIwNTJFMEE4MDU4MENBMTYzRkM3QzAwQzAyMEQxMEYwQworOjEwMzU1MDAwREEyMDU4MERBNThBMTVDREExREEyMDAzM0IwMjJDMTJFMgorOjEwMzU2MDAwMDQ1ODBEMEYyN0E0MDNDMDIwRDEwRjAwQzAyMEQxMEY5NQorOjEwMzU3MDAwMkEyQzc0OEIxNDU4MDYyMEQyQTBEMTBGNkMxMDBDMjg2MgorOjEwMzU4MDAwMjEwMjk0MTAwODA4NEM2NTgzNjIxRkU1MDkyOUYyOUUwOAorOjEwMzU5MDAwNkY5ODAyNjAwMzY2MURFNTA1MjlEMjI2Njg5MDA4MkEwNworOjEwMzVBMDAwMjIwMDA5QUEwQzY1QTM1NDJDRjI5RDY0QzM0RTJCMjA2MworOjEwMzVCMDAwMEMwQ0I2MTFBRjY2Mjg2Mjg2QzFFQzc4RTMwMjYwMDM5QQorOjEwMzVDMDAwNDYxOUU0RkMwOUI5MEEyOTkyQTM2ODkwMDc4QTIwMDlFMAorOjEwMzVEMDAwQUEwQzY1QTMzMjI0NjI4NTY0NDMyQ0MwRTEyQTMxMDkxOAorOjEwMzVFMDAwQzA3MDI3MjQ2Njg5MzU5QTExOTkyQTg4MzY5OTEyOThDRAorOjEwMzVGMDAwMkI4OTM3OTgxMzk5MkM4ODM4OTkxNDA4NTgxNDk4MTVFMgorOjEwMzYwMDAwOTgyRDg5MzkyQTI1MDQyRTI1MUQyOTI1MUMyODMwMjg4NgorOjEwMzYxMDAwQzA5MjI4MjQzQzJBMzAyOTA4MDg0Nzk4MTYwOTg5MDFCNQorOjEwMzYyMDAwMkEyNDNEMkEzMTE1OTkxNzBBMDk0MTA5QTkwQzI5OUMxOAorOjEwMzYzMDAwRUMyOTI1MUY3RTg3MTkyRDJBMDAwREEwNjAwMDA4M0U2OQorOjEwMzY0MDAwMDEwQTNFQjFBRDA4REEzOTBFQUExMTBBOTkwQzI5MjVGMgorOjEwMzY1MDAwMUYyQTIxMUYxOEU1MDYwQTgxNjBDMUQwOTQxQTk1MUIwNAorOjEwMzY2MDAwMDEwODNFMDAwNTNFQjE4NDA1NDgzOTg0M0MyNTlDRkM5OAorOjEwMzY3MDAwMEQ4ODM2MjkyMDE0MDhBQTFDOEQzRDI3MjYxODJFMjZEMQorOjEwMzY4MDAwMTMyRTI2MTQyRTI2MTUyNzI2MUIyRTI0NkIyNzI0Njc3RgorOjEwMzY5MDAwMjcyNDY4MDg1ODFDMDkwOTQzMjkyNDE0MjkzMjExMkFBRgorOjEwMzZBMDAwMjUyRTI4MjUyRjI3MjUyNDI3MjUyNTI3MjUyQzI3MjVBNgorOjEwMzZCMDAwMjMyNTI1MjAyNDI1MjEyRDI1MjI4NDFBMkQyMTFDODUxMgorOjEwMzZDMDAwMUI2RkQyMDI2MDAyMDlDMEEwOTkxODZEMDgwQUIxQUE0NgorOjEwMzZEMDAwMDBBMTA0MDBFOTFBN0Q5QjAyNjNGRkVFODkxOEMwODBGNworOjEwMzZFMDAwQzBFMUMwNzBDMEQyOUIxRDk1MUI5NjFDOUMxRTE2RTRBOQorOjEwMzZGMDAwRDEyQzIwM0QxNUU0RTAwQzBCNDAwRENDMDEwQkU3MzgzQworOjEwMzcwMDAwMURFNEMzMEE3NzEwMENFODM4MEI4ODEwQzBDNDlDNDEzNAorOjEwMzcxMDAwMDg3NzAyOUQ0MEIwQTgwOTg4MTE4QjIwOUM0OTlENDhEQworOjEwMzcyMDAwOTU0Qjk2NDMwODc3MDI4NjE0MThFNEQxMTVFNEI5MDgzRQorOjEwMzczMDAwNzcwMjA1QkIwMjlCNEE5QjQyOTc0Njg4MTI4NzExMDg3NQorOjEwMzc0MDAwREExNDlBNEUwRDg4MTAwRDc3MTEwODc3MDIxQUU0QUMzRQorOjEwMzc1MDAwMDZEODE0MEQ2NjEwMDg3NzAyOTc0RkM3OEY5ODREOThCQQorOjEwMzc2MDAwNEM5ODQ1ODcxNTk4NDQwNzE1MTQwRDU1MTEwQTU1MDJCNAorOjEwMzc3MDAwOTU0NzE1RTRDMThBMjYyRDQ2MTAyRDQ2MTgyRDQ2MjA2MgorOjEwMzc4MDAwMkM0NjExMkM0NjE5MkM0NjIxMkI0NjEyMkI0NjFBMjg2MgorOjEwMzc5MDAwNDYxNDI4NDYxNTJCNDYyMjg4MTYyNTQ2MjQyNTQ2MjZGQgorOjEwMzdBMDAwOEIxNzBBMEM0ODA5MEQ0ODg1MTMwRUREMTEwNUNDMTE0NQorOjEwMzdCMDAwMDgzOTQwMEJFQjM5MDI5OTEwMUVFNEIwMERDQzAyMEQxNAorOjEwMzdDMDAwNTUxMTA4MkQ0MDA2NTUwMjJFNDYxMzE2RTQ3QjBGREREOQorOjEwMzdEMDAwMTEyNTQ2MTYwODA4NDA4NTFCMDE4ODEwMERCQjAyODY3RQorOjEwMzdFMDAwNjcxREU0QTcwOTg4MDIwQ0JCMDIxOUU0NzcxQ0U0QTU1NQorOjEwMzdGMDAwMkI0NjE3MkQ0NjFCQTc2NjFCRTRBNEMwNzAyQzQ2MUM0NQorOjEwMzgwMDAwMDk4ODAyOEMxRTI4NDYxRTJCNDYyM0MwOTA4QjFEMjkzQQorOjEwMzgxMDAwNDYxRDI5NDYxRjE4RTQ5RDI5NDYyNzI4NDYyNTI5MzE5QgorOjEwMzgyMDAwMTYyRTIwMDYyOTI0NkEyNDMxMTc5NjJEMjQyNTIzODY1NgorOjEwMzgzMDAwMUNDQ0UxMjcyNDA3QzBENzA5MEU0MDY0RTA4MjlBMjlGNgorOjEwMzg0MDAwMDkyODQxNjQ4MDkxNjQ0MDlCMkQyNDA2QzA5ODA5NDk1MQorOjEwMzg1MDAwMzYyODBBQTAyNDYyODUwMUM0MDRBODQ0MjgyMTA0MjQyRgorOjEwMzg2MDAwNjY4NTA4ODgxMThFM0Y4QTNFMkQzMjEwMEVBNDE4MDBGRQorOjEwMzg3MDAwQzQwNDBFQUUxODAwRUUxMTBBQ0E1MzBFREQwMkMwRTNGNgorOjEwMzg4MDAwMEU4ODAyOThDMTFFRTQ4MjA5MDg0RTlFQzA4RTIwOTRDNAorOjEwMzg5MDAwQzM5OEM1OURDNDE4RTQ0RTFERTQ3RjA1RUUxMTBFQUEyMQorOjEwMzhBMDAwMDIwREFBMDJBOEI4Mjc4NENGOUFDMjFFRTQ0MDI0RjJDRgorOjEwMzhCMDAwOUQyN0U0QTIyNDRDMTgyNEY2OUQ2NTUwNTJDMDIwRDFDNworOjEwMzhDMDAwMEYyRDI0MDZDMEEwQzA5ODA5NDkzNjA0QTkzODYzRkYwQgorOjEwMzhEMDAwN0ZDMEEwNjNGRTA3MDAwMDY1NEY2REMwOThDMEE4MkE5NgorOjEwMzhFMDAwMjQwNjYzRkY2QjJEMjQwNkMwOTA2M0ZGNjNDQzU3REE3OAorOjEwMzhGMDAwMjBEQjMwOEMxMDU4MEMyQUMwMjBEMTBGMDBEQTIwQzBGOQorOjEwMzkwMDAwQjY1ODBDQjk2M0ZGRTUwMERBMjA1ODBDQjc2M0ZGREM0QQorOjEwMzkxMDAwMkEyQzc0OEIxMDU4MDUzOEQyQTBEMTBGNkMxMDA2MjhCMQorOjEwMzkyMDAwMjAwNjhBMzM2RjgyMDI2MDAxNjFDMDUwMTNFNDIwMjlBRgorOjEwMzkzMDAwMjEwMjE2RTQxRjY5OTIwNDI1MjUwMkQ5NTAyQzIwMTU3NgorOjEwMzk0MDAwOUEyODE0RTQxRDhGMjYyNzIwMEIwQUZFMEMwNDc3MDkwMQorOjEwMzk1MDAwMkI3MTFDNjRFMTM5OEU0MjhENDM2RkJDMDI2MDAxNkY5NAorOjEwMzk2MDAwMDBFMTA0QjBDODAwODgxQTA4QTgwODA4RDgwMjk4MjdGRgorOjEwMzk3MDAwMkIyMDA2NjhCMzJFQ0U5NzJCMjIxRTJDMjIxRDAxMTE2MAorOjEwMzk4MDAwMDI3QkM5MDFDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREFDMAorOjEwMzk5MDAwMjAwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZEMQorOjEwMzlBMDAwRTdDMDIwRDEwRjJEMjA2NDY0REZDQThCMjlDMEYxMEI0MgorOjEwMzlCMDAwQUIwQzY2QkZDMDJCMjAwQzBDQkMxMUE2Q0MyOEMyODY1OQorOjEwMzlDMDAwMkUwQTA4NzhFQjYxMUVFM0ZCMEVCRTBBMkVFMkEzNjgwNgorOjEwMzlEMDAwRTAwNTI4MjIwMDdFODk0RjI5QzI4NTFFRTQwNzY0OTBGNQorOjEwMzlFMDAwNDYxRkU0MTU5RTkwQzA4NDk4OTEyODIwMEE5NTkzMEY1NQorOjEwMzlGMDAwODgwMjk4OTI4RTIwMEZFRTAyOUU5NDJGMjAwNzg4MjYzMAorOjEwM0EwMDAwMkY5NTBBOTg5NjlBOTcyRTIwMDYyNTI0MDc2OEUzNDM1NworOjEwM0ExMDAwMjkyMTAyMkFDMjg1MURFM0VFMkFBQzIwQURCRDI1RDRBMgorOjEwM0EyMDAwQ0YyQUM2ODU2M0ZGNEUwMDJFMjA2NUNCRURDMDgyMjhDRAorOjEwM0EzMDAwMjQ2NUM5RjYwNUU0MzEwMDAyMDAyQTYyODIxQkUzRjcxRgorOjEwM0E0MDAwMjk0MTAyMEJBQTAyMkE2NjgyMDlFNDMxMjkyMTAyNjM3NAorOjEwM0E1MDAwRkYyMzAwMDA2NERGQjg4RjQyMkUyMDE2MDBGMTA0MEQxMgorOjEwM0E2MDAwRUUwQzAwRUUxQUFFQUU5RTI5NjNGRkEzOEEyMDJCMzIyNQorOjEwM0E3MDAwMjFCMUFBOUFCMDI5MzIyMTI4MzIyM0I0OTkyOTM2MjFCQQorOjEwM0E4MDAwNzk4OUE5MkIzMjIyMkIzNjIxNjNGRkEwQzAyMEQxMEZDOAorOjEwM0E5MDAwOUYyNzI1MjQxNUFDQjgyODc1MUMyQjIwMDZDMEMxMkVFNQorOjEwM0FBMDAwQkNGRTY0RTBBQjY4Qjc3NzJEQkNGRDY1REVDNzJEMjA5QQorOjEwM0FCMDAwNjRDMEYwNjREMDg2OEUyOTBFQUUwQzY2RTA4OUMwRjEzOQorOjEwM0FDMDAwMjgyMDVBMjg4Q0ZFMDhDRjM4NjVGRUU4NjNGRjU4MDA4RQorOjEwM0FEMDAwMDBFMDA0OTMxMEMwODEwQUYzMEMwMzgzMzlDNzhGMDhGOAorOjEwM0FFMDAwRDgwMzA4QTgwMTA4RjgwQzA4MDgxOUE4MzMwM0M4MEM2MworOjEwM0FGMDAwQThCODI4NzUxQzAzMEI0NzJCMjQxNTgzMTBDQkI3MDBERgorOjEwM0IwMDAwRTEwNEIwQkMwMENDMUFBQ0FDMENEQzAyOUMyNzY1OUU3NgorOjEwM0IxMDAwNUVDMEIyMEI5OTAyMDkwOTRGMjkyNTAyNjNGRTUwMDBDRAorOjEwM0IyMDAwMkQyMDZBMEQyRDQxNjVERjdFREEyMEMwQjA1ODBDNzU1RQorOjEwM0IzMDAwNjRBRjE4QzBGMTYzRkVFRjlGMjc2M0ZGRDAyRTIyMUZGMgorOjEwM0I0MDAwNjVFRTMyNjNGRjc5MDAwMDI4MjIxRjY1OEUyNzYzRkYzMAorOjEwM0I1MDAwNkUyNTI0MDYyNTI1MDJDMDkwNjNGRTE5NkMxMDA2NjVBQgorOjEwM0I2MDAwNzEzMzJCNEMxOEMwQzcyOTNDMThDMEExQzA4MDA5QThDQworOjEwM0I3MDAwMzgwODA4NDI2NDgxMTAxQ0UzOEExQUUzOEIyQUM2N0U0NworOjEwM0I4MDAwMkE1Q0ZERDMwRjZEQUEwNTAwQjA4ODAwOTA4Qzg5NDA5NworOjEwM0I5MDAwQzBBMDA5ODg0NzFGRTNCNDA4MEI0NzA5NEM1MDA5MEQyMgorOjEwM0JBMDAwNTMwNEREMTBCNENDMDRDQzEwMEQ1RDAyOUQzMTBDQkI3MAorOjEwM0JCMDAwMDI5QjMwODg0MzhFMjA5ODM1MEZFRTAyOUUzMjhEMjY3MAorOjEwM0JDMDAwRDg1MEE2REQ5RDI2OEU0MEMwOTAwRTVFNTA2NEUwOTdEMgorOjEwM0JEMDAwMUNFMzlBMUVFMzg5MDM4QjBCQzBGNDlGQjE5RUIwMkRBQQorOjEwM0JFMDAwMjAwQTk5QjMwQ0REMDI5REIyOEYyMDBDRkYwMjlGQjQxNgorOjEwM0JGMDAwOEUyNjJEMjAwNzlFQjY4QzI4MkRCNTBBOUNCNzI5MjQyOQorOjEwM0MwMDAwMDcyRjIwMDYyQjIwNjQ2OUYzMzlDQkI2MURFMzZCMjMwNQorOjEwM0MxMDAwMjAxNjhERDIwQjMzMEMwMEQxMDQwMDMzMUFCNDhEQTNCRgorOjEwM0MyMDAwQzM5MzI5MjIyMDBDMTNFMzZBMUZFMzYxMEMyRTExQUYwQQorOjEwM0MzMDAwRUVBMzIyMjkyNENGMkZFMjg1RDJBMDBGREQwQjJERTZBMworOjEwM0M0MDAwODVEMTBGMDAyRTIwMENCNDhDMENFQjExMUZFMzYxMURFRAorOjEwM0M1MDAwRTM1OEFGRUVBREJCMjJCMjg1MjlFNENGMDJDMjBCMjJGRQorOjEwM0M2MDAwQjY4NUQyQTBEMTBGMDAwMDJFMjAwQzFDRTM1MTFGRTMxQgorOjEwM0M3MDAwNTgwQ0VCMTFBRkVFQUNCQjIyQjI4NTI5RTRDRjAyODIyNworOjEwM0M4MDAwMEIyMkI2ODVEMkEwRDEwRkMwRDAwQkFEMzg3REM4MDJCMworOjEwM0M5MDAwNjNGRUVDNjNGRUUwOEU0MDI3MkM3NDdCRUUxMkRBNzAzQworOjEwM0NBMDAwQzBCMzJDM0MxOERENTA1ODBBN0I4OTQwQzA4MDYzRkVBRAorOjEwM0NCMDAwRTNERTYwREEyMERCMzBEQzQwREQ1MDU4MDAwNTlBMTA4RQorOjEwM0NDMDAwREI1MDA3N0EwMjU4MDQ0Qzg4MTA2M0ZFRjgwMDAwMDBBRAorOjEwM0NEMDAwNkMxMDA2OTIxMjFFRTM0MjhDNDBBRTJEMEM4QzQ3MkVDNworOjEwM0NFMDAwM0MxODA0Q0EwQkQ5QTA3REEzMDIyOUFERjg3NUMzMDIwNAorOjEwM0NGMDAwNjAwMDg0QzBCMEMwMjNDMEEwOUQxMDZEMDg0NEI4OUY3MAorOjEwM0QwMDAwMEVCODBBOEQ5MDBFQjcwQkI4NzcwRDZEMzZBREFBOUQyMworOjEwM0QxMDAwODAwRDY2MENEOEYwMDA4MDg4MDA3MDhDODc5MDY4QjFBOAorOjEwM0QyMDAwMjRCMjIyNzdEMzI3ODg5MUMwRDBDQjg3OTg5MDI3OUM0NAorOjEwM0QzMDAwMTAwMDcwODgwMEYwOEM5RDkxQ0I2RkMwODEwOEJCMDM5MAorOjEwM0Q0MDAwNzVDQjM2NjNGRkI0QjEyMjJFRUMxODYzRkZENDg1OTI5NQorOjEwM0Q1MDAwMEQ3NzBDODY5Mzk3OTBBNkQ2N0Q2QjAxQjE1NTk2OTNGRgorOjEwM0Q2MDAwOTU5MjYwMDAxNkIzQ0MyRDlDMTg4ODEwRDlEMDc4RDNDQQorOjEwM0Q3MDAwQzcyOURERjg2M0ZGQzEwMEMwMjM4QTQyMUJFMzQ3MDA2NworOjEwM0Q4MDAwQ0QzMjJENDQwMjlCMzA5MjMxODk0Mjg1NDM3OUExMDU4MQorOjEwM0Q5MDAwMUVFMzQzMEU1NTAxODcxMjFCRTMzNDg5NzA5NTM1MEJFMgorOjEwM0RBMDAwOTkwMjk5MzI4ODQyMEE4ODBDOTg0Mjg2NzZBNkE2OTY4RAorOjEwM0RCMDAwNzY4RjQ0QUZBRjlGNDREMTBGMDAwMDAwNkMxMDA4OTM4MgorOjEwM0RDMDAwMTFENjMwODgzMEMwOTEwODYzNTEwODA4NDcwNTk4MzhFQgorOjEwM0REMDAwOTgxMjI4MjEwMjI5M0NGRDA4MDg0QzY1ODE2NTY1OTFFRgorOjEwM0RFMDAwNjI4QTYzMEEyQjUwNjVCMThCMEE2RjE0MkUwQUZGN0MxRQorOjEwM0RGMDAwQTYwQTJDMjA1QUNDQzQyRDBBMDIyRDI0NUE3RkUwMDI5OAorOjEwM0UwMDAwNjAwMjE1ODkyODg4MjYxRkUzMjYwOTg4MEM2NTgyMEYyMQorOjEwM0UxMDAwMkUyMDBCMEZFRTBCMkRFMEZFMkVFMEZGMDhERDExMEUyNQorOjEwM0UyMDAwREQwMjFFRTMyMEFFREQxRUUzMjAxQ0UzMjAwRUREMDFEQgorOjEwM0UzMDAwMERDQzM3QzE4MDA4NDgzN0I4OERCNDg4OTgxMDg5NjA5OAorOjEwM0U0MDAwMUFFMkRFN0I5NjIxOEI2MjJBQTAyMTlDMTQ3QkEzMTdBOQorOjEwM0U1MDAwOUQxMzJBMjAwQzhCMTA4QzIwNTgwQjk3OEMxNDhEMTNEQgorOjEwM0U2MDAwREJBMENFQUM2MDAxQzQwMDJFMjAwQzFCRTJEMTBDRUExQQorOjEwM0U3MDAwMTEwQkFBMDgyQkEyODYxRkUyQ0Y3QkRCM0IwRkVGMEFCOAorOjEwM0U4MDAwMkZGMkEzNjhGMDA1MjgyMjAwN0Y4OTJDMkJBMjg1NjRERAorOjEwM0U5MDAwQjBBQTg3NjI4ODI2REU3MDBDNzkzNjA5N0EwQzZGQUQ3RAorOjEwM0VBMDAwMUM4RjI3OUIxNTA4RkYwQzc3RjMxOTdFN0I3MjlEMTNERgorOjEwM0VCMDAwOUMxNDlCMTVDRjU2NjAwMDI1QzBCMDYzRkZEMEQ3OTBFRgorOjEwM0VDMDAwNjNGRkREMDAwMDlEMTM5QzE0REEyMERCNzA1ODBCMDhBMworOjEwM0VEMDAwOEIxNThDMTQ4RDEzNjVBMDZBOEU2MjYzRkZDQzAwREE5QgorOjEwM0VFMDAwMjA4QjExREM0MDU4MEFBRUQ2QTA4QjE1QzA1MURFNzA3NQorOjEwM0VGMDAwREEyMERDNjBERDQwNUJGRjc2OEQxMzhDMTREOUEwMkVCOAorOjEwM0YwMDAwMjAwQzFCRTJBQjFGRTJCMjBDRUExMUFGRUZDMEUwQUIzQQorOjEwM0YxMDAwQUEyQkEyODUyRUY0Q0YwQjk5MEIyOUE2ODU2M0ZGMUQzMgorOjEwM0YyMDAwMDBEQTIwREM2MERENDBERTcwODkxMjI4MjAwN0RGNTBENworOjEwM0YzMDAwQTk4ODI4MjQwNzVCRkYwOUQyQTBEMTBGMDBEQkUwREFCMworOjEwM0Y0MDAwMjA1ODBCMjk2NTUwRUYyQTIwMTQwQTNBNDA2NUEwRUI0RgorOjEwM0Y1MDAwREI2MERDNDBERDMwMDIyQTAyNTgwOTlDRDZBMDY0QTA1OAorOjEwM0Y2MDAwRDU4NEExODNBMDA0MDQ0NzAzMDU0Nzk1MTIwMzYzNTEzOAorOjEwM0Y3MDAwQzA1MTYzRkU1QzJDMjAwNkQzMEYyOENDRkQ2NDgwQTVDNQorOjEwM0Y4MDAwNjhDNzA0QzA5MzI5MjQwNjJDMjAwNkMwQjE4RDY0MUY4NQorOjEwM0Y5MDAwRTI4QTlEMjc5RDI4OUQyOThGRjI5RDI2MDBGMTA0MDAyRAorOjEwM0ZBMDAwQkIxQTAwRjAwNEIwQkUwRUREMDFDMEYwQURCQjhENjVFNAorOjEwM0ZCMDAwMkYyNDA3MEQwRTVFMDFFRTExQUVCQjJFMEFGRUIwQkIyNAorOjEwM0ZDMDAwMEIwQjE5MEVCQjM2QzBFMjBCMEI0NzBFQkIzNzJCMjQ3NQorOjEwM0ZEMDAwMTYxOEUyODIwQTA5NDUwRDBCNDIyQjI0MEIyOTI0MEFFQworOjEwM0ZFMDAwQjRCRTJFMjQwQzdEODg1NzI5MjAxNjJGQ0NGREIwOUQwMQorOjEwM0ZGMDAwMEE1QzUyMERDQzM2MkMyNDY0NjVGREVDMEMwQzQ3NjQzNQorOjEwNDAwMDAwQ0RFNjE4RTI2RDhFMjg4ODgyMEM5RjBDMDA4MTA0MDA5QQorOjEwNDAxMDAwRkYxQUFGRUU5RTI5NjNGRENGMUNFMjlDNjNGRTEzMDBFNgorOjEwNDAyMDAwMUNFMjkzNjNGRTBDOEQ2NTYzRkZBNTAwREEyMDJCMjA1NAorOjEwNDAzMDAwMEM1ODBCMDY2NDVGMEZDMDIwRDEwRjAwQzAyMEQxMEZCOQorOjEwNDA0MDAwQzA5MzI5MjQxNkMwOTM2M0ZGQTAwMDAwNkMxMDA0QzAyNQorOjEwNDA1MDAwNjAxN0UyNTYxREUyNTlDMzgxMjkzMTAxMkEzMDA4MjkyRgorOjEwNDA2MDAwMjQwQTc4QTEwOEMzQjI3QkExNzJEMjYwRDEwRkMwQzE2QgorOjEwNDA3MDAwNjU1MDUxMjYyNTAyMkFEMDIwMkYyMDBCMjkwQUZCMkIyMAorOjEwNDA4MDAwMjAxNDJFMjAxNTI2MjQxNTA5QkIwMTBERkYwOTI4RjE0NworOjEwNDA5MDAwMUMyQjI0MTRBOEVFMkVGNTFDNjRBMEI1MkIyMjFFMjg4MAorOjEwNDBBMDAwMjIxRDAxMTEwMjdCODkwMURCNjA2NEIwMTcyQ0IwMDc2RgorOjEwNDBCMDAwMjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDA4MworOjEwNDBDMDAwREJBMDY1QUZFN0RCMzBEQzQwREQ1MERBMjA1ODAwRDhGQworOjEwNDBEMDAwMjkyMTAyMDkwQjRDQ0FCMkQyQTBEMTBGMDBDQzVBMkMxNAorOjEwNDBFMDAwMzAwODdCQzEzNzJFRDAyMDY0RTAyRDAyMkEwMjAzM0IyQQorOjEwNDBGMDAwMDJEQzQwREQ1MDU4MDBDRUQyQTBEMTBGMkIyMDE0QjBFRQorOjEwNDEwMDAwQkIyQjI0MTQwQjBGNDE2NEYwODI3Q0I3Q0FDMEMxMENENgorOjEwNDExMDAwOUMwMjJDMjUwMkQyQTBEMTBGQzAyMEQxMEYyRTIwMDY0OAorOjEwNDEyMDAwNjlFMkMxMkYyMTAyMEYwRjRDNjlGMUI4MjYyNDA2MjYzRgorOjEwNDEzMDAwMjUwMjJCMjIxRTI4MjIxRDJBMjAwQjI5MjAxNTBEQUExQworOjEwNDE0MDAwMDkyQ0ExMUMyNjI0MTVBQzk5MjlBNTFDN0I4MTRBNjA0OQorOjEwNDE1MDAwMDA0OUIwQkIyQjI0MTQwQjBENDFDQkQ2N0NCNzAyMkNFRAorOjEwNDE2MDAwMjUwMjJCMjIxRTJFMjIxRDdCRTkwMjJCMEEwMDY0QjBBMQorOjEwNDE3MDAwMTcyQ0IwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzAyNAorOjEwNDE4MDAwRDEwQjgwMDBEQkEwNjVBRkU3QzAyMEQxMEYyNjI0MDY0RAorOjEwNDE5MDAwRDJBMEQxMEYyNjI0MDY2M0ZGQzdEQjYwMURFMjA3NjRBRgorOjEwNDFBMDAwQkY0MjJDQjAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDQQorOjEwNDFCMDAwQzBEMTBCODAwMERCQTA2NUFGRTcxREUxRkY2M0ZGMjRFQQorOjEwNDFDMDAwNkMxMDA0MjgyMDA2QzA2NDZGODU2NENBNUIyOTIwMTQyMworOjEwNDFEMDAwN0Q5NzI2REEyMERCMzBEQzQwMDU1RDAyNTgwMDE5Mjk4NgorOjEwNDFFMDAwMjEwMjA5MEE0Q0M4QTNDMDIwRDEwRjAwQzBCMTBCOUIwQgorOjEwNDFGMDAwMDIyQjI1MDJDMDIwRDEwRjAwMDAwMjJBMDIwMzNCMDIzRAorOjEwNDIwMDAwMkMwQTAxNTgwMENBQzlBQURBMjBEQjMwREM0MDU4MDk2MAorOjEwNDIxMDAwRTQyOUEwMTFEM0EwN0U5NzA4MkMwQUZEMEM5QzAxMkM0OAorOjEwNDIyMDAwQTQxMUMwNTEyRDIwMTQwNkREMDIyRDI0MTQ2M0ZGQTIxOQorOjEwNDIzMDAwREEyMERCMzBEQzQwREQ1MEMwRTA1ODA5NjREMkEwRDE4OAorOjEwNDI0MDAwMEYwMDAwMDA2QzEwMDYxNkUxREExQ0UxREE2NTUxM0I0NAorOjEwNDI1MDAwQzBFMTE3RTFENjI4MjEwMjhCMjAwODA4NEM2NTgwN0IzRAorOjEwNDI2MDAwMjkzMjAwMDk2OTUxNjk5MzcyMkE2MjlFNkVBODQ4MkExMAorOjEwNDI3MDAwNzIyNjY4QTAwMjdBQjkzRjJBNjI5REI0NEZDQkE3MkI2MQorOjEwNDI4MDAwMjAwQzBDQkQxMTA2REQwODI4RDI4Njc4RkIxNTBDQkY2QQorOjEwNDI5MDAwMEEyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA3MkREMjg1RDNFNgorOjEwNDJBMDAwMEY2NUQwNjAyQTIxMDQxOUUyMDJEMzBGN0E5QjFEREEzMAorOjEwNDJCMDAwMjA1ODA4NjQ2MDAwMjQwMDJDMjEwNDFCRTFGRDdDQkIxNQorOjEwNDJDMDAwMTNEQTIwQzBCNjU4MDg1RkM5NTM2MDAwRUZEQTIwNThFRgorOjEwNDJEMDAwMEE0NjYwMDAwNkRBMjBDMEI2NTgwQTQzNjU1MERERENBNQorOjEwNDJFMDAwNDBEQjMwOEQzMERBMjAwRDZENTE1ODA4QjhEM0EwNjQxMgorOjEwNDJGMDAwQTBDQTFDRTFCMEMwNTE4NEExOEVBMDA0MDQ0NzBFMEVEOAorOjEwNDMwMDAwNDc2M0ZGNTAwMDJCMjEwNEMwOEM4OTMxQzA3MERGNzBERgorOjEwNDMxMDAwMDlGOTUwMDk4RjM4NkVCODE3MkMyMDY2QUVDQzBDMENGQQorOjEwNDMyMDAwNDcyQzI0NjY3Q0ZCMDk5RDEwNTgwOENBOEQxMDI3MjQ1MQorOjEwNDMzMDAwNjY5NEQxMUVFMUI2QjhEQzlFRDA2NTUwNTZDMEQ3QjhBMQorOjEwNDM0MDAwM0FDMEIxQzBGMDBDQkYzODBGMEY0MkNCRjExOUUxOTQ2NQorOjEwNDM1MDAwMThFMTk2Mjg5NjdFQjA0QkQzMEY2REJBMDUwMEEwODg2MQorOjEwNDM2MDAwMDBDMDhDMkMyMDBDQzAyMDFERTE5QTBDQ0YxMUE2RkZBMAorOjEwNDM3MDAwMkVGMjg1QURDQzI3QzRDRjBFNEUwQjJFRjY4NUQxMEY3NQorOjEwNDM4MDAwQzA4MDBBQjgzODc4RDBDRDYzRkZDMTAwOEUzMDBFMEVFMQorOjEwNDM5MDAwNDc2M0ZFQkQyQTJDNzQyQjBBMDEwNDREMDI1ODA4QkQ0OAorOjEwNDNBMDAwMkYyMDBDMTJFMThCMENGOTExQTY5OUEyRkYyN0Y0Q0Y1NAorOjEwNDNCMDAwMjg5Mjg1RDJBMDA4NDgwQjI4OTY4NUQxMEZDMDIwRDExRAorOjEwNDNDMDAwMEYwMDAwMDA2QzEwMDRDMDYwQ0I1NURCMzBEQzQwMDVGMgorOjEwNDNEMDAwNUQwMjAyMkEwMjVCRkY5QjI5MjEwMjA5MDg0Q0M4ODI2OAorOjEwNDNFMDAwRDJBMEQxMEYyQjIwMTRCMEJCMkIyNDE0MEIwQzQxQ0IyQgorOjEwNDNGMDAwQzU3REI3RUJDMEMxMEM5QzAyMkMyNTAyRDJBMEQxMEYwOQorOjEwNDQwMDAwMDAwMDAyMkEwMjAzM0IwMjA2NkMwMkMwRDBDN0Y3MkU0RQorOjEwNDQxMDAwMjAxNDI4MzEwMTI2MjUwMjI4MjQwQTBGRUUwMTJFMjQxQgorOjEwNDQyMDAwMTQ1ODAxMEQ2M0ZGQTMwMDI2MjQwNkQyQTBEMTBGMDA2QgorOjEwNDQzMDAwNkMxMDA2MjgyMTAyRDYyMDA4MDg0QzY1ODA5RDJCMjA5MAorOjEwNDQ0MDAwMEMxMkUxNUIwQ0I4MTFBMjg4MkE4Mjg2QjU0OTdBOTNENgorOjEwNDQ1MDAwMDI2MDAwOTcxOUUxNTgwOUI5MEEyOTkyQTM2ODkwMDhFNworOjEwNDQ2MDAwMkE2MjAwMDlBQTBDNjVBMDgyMjg4Mjg1MUNFMTYzNjQ4NworOjEwNDQ3MDAwODA3OTlDODBCODg3QjE0QjlCODE5QjEwNjU1MDc0QzAzQworOjEwNDQ4MDAwQTdEOTcwMjgwQTAxQzBEMDA3OEQzODBEMEQ0MkNCREVBOAorOjEwNDQ5MDAwMUZFMTQ0MUVFMTQ1MkVGNjdFRDgzMEQzMEY2RDRBMDU0QworOjEwNDRBMDAwMDA4MDg4MDA5MDhDMkUzMDA4QzBBMDAwRUUzMjJFNzQ2MAorOjEwNDRCMDAwMDAyODYwMEMxOUUxNDcwQzhEMTFBMkREQTk4OEMwMjBFRAorOjEwNDRDMDAwMkNEMjg1MjI4NENGRDJBMDBDQkMwQjJDRDY4NUQxMEY0OAorOjEwNDREMDAwQzBGMDAzOEYzODdGQTBDMDYzRkZCNDAwQ0M1ODJBNkNCMworOjEwNDRFMDAwNzREQjMwREM0MDU4MDdGMUMwMjBEMTBGREE2MDU4MDk4NgorOjEwNDRGMDAwQkU2M0ZGRTdERDQwMkE2Qzc0QzBCMERDNzA1ODA4NjUwRAorOjEwNDUwMDAwMkUzMDA4OEIxMDAwRUUzMjJFNzQwMDI4NjAwQzE5RTE1QQorOjEwNDUxMDAwMzAwQzhEMTFBMkREQTk4OEMwMjAyQ0QyODUyMjg0Q0YzOQorOjEwNDUyMDAwRDJBMDBDQkMwQjJDRDY4NUQxMEYwMDAwNkMxMDA0MjkzNgorOjEwNDUzMDAwMjAxNDI4MjAwNkIxOTkyOTI0MTQ2ODgxMjRDMEFGMkNBNgorOjEwNDU0MDAwMEEwMTJCMjEwMjJDMjQwNjdCQTAwNEMwRDAyRDI1MDJCOQorOjEwNDU1MDAwMDIyQTAyMDMzQjAyMDQ0QzAyQzBEMDU4MDBCRkQyQTA4MgorOjEwNDU2MDAwRDEwRkMwMjBEMTBGMDAwMDZDMTAwNDI5MzEwMUMyQjQ1QQorOjEwNDU3MDAwMjkyNDBBMkEzMDExQzI4Mzc4QTE2QzdCQTE2OTY0NTA3NgorOjEwNDU4MDAwNDcyQzIwMDZDMDY4NkZDNTYyQ0E1NzJEMjAxNDdDRDdGRgorOjEwNDU5MDAwMjJEQTIwREIzMERDNDBERDUwNUJGRkE1MjkyMTAyMDk1NworOjEwNDVBMDAwMEU0Q0M4RTJDMDIwRDEwRkMwRjEwRjlGMDIyRjI1MDI5MAorOjEwNDVCMDAwQzAyMEQxMEZEQTIwREIzMEMwQzA1QkZGREMyODIwMTQyNAorOjEwNDVDMDAwMDY4ODAyMjgyNDE0NjNGRkM3MjkyMDE1MUJFMEZCMkE1NAorOjEwNDVEMDAwMjAwQkMwQzA5QzI0MEJBQTA5MkJBMTFDMkMyNDE1QUJCQQorOjEwNDVFMDAwOTkyOUE1MUM2M0ZGOTkwMEMwMjBEMTBGREEyMERCMzA4OAorOjEwNDVGMDAwREM0MERENTBDMEUwNTgwODc1RDJBMEQxMEYwMDAwMDBBQgorOjEwNDYwMDAwNkMxMDA0Q0I1NTEzRTBGNjI1MjIxRjBENDYxMTA2NTVGQworOjEwNDYxMDAwMENBMzIzMjYyMjFFMjUyNjFGMDY0NDBCMjQyNjFFNzNDOAorOjEwNDYyMDAwNEIxREM4NTJEMjQwRDEwRjI4MEE4MEMwNDAyNDI2MUZGQgorOjEwNDYzMDAwQTgyODI4MjYxRTI4MjYxREQyNDBEMTBGQzAyMEQxMEYyMQorOjEwNDY0MDAwMjQ0REY4MjQyNjFFNjNGRkQ4MDAwMDAwNkMxMDA0MjhCNworOjEwNDY1MDAwMjAwNkQ2MjA2RTg1MDI2MDAwREUxN0UwRDUxREUwREM2NgorOjEwNDY2MDAwMTlFMEQ1QzBDMUMwMjAyQThDRkM2NEExMzIyQjYxMDJBNAorOjEwNDY3MDAwQjQ0RTBCMEI0QzY1QjBBODJCNjAwQzJBNjIwMDBDQjgzMgorOjEwNDY4MDAwMTEwNzg4MDgyRjgyODYwOUI5MEE3RkUzMDI2MDAwOUYxQworOjEwNDY5MDAwMjk5MkEzNjg5MDA1MDlBQTBDNjVBMDkzMjg4Mjg1NjRENQorOjEwNDZBMDAwODA4REI4ODkxQkUwREE5NDgxOUI4MDY1NTE0REMwQjczRAorOjEwNDZCMDAwQjgzOEMwQTFDMEUwMDlBRTM4MEUwRTQyNjRFMDQ4MUExNgorOjEwNDZDMDAwRTBCODFGRTBCOTJGQTY3RUIwNEE2REFBMDUwMDgwODgyOQorOjEwNDZEMDAwMDA5MDhDQzBBMDJFNjAwQzBDRTgxMUE3ODgyRjgyODU1QQorOjEwNDZFMDAwQURFRTBGNEYwQjJGODY4NTJCNjAwNjIyRTRDRjY4QjEwRAorOjEwNDZGMDAwMkEyOTYwMTVDMEIyQzk5QUQyQTAyRDYxMDIyQjY0MDY4NgorOjEwNDcwMDAwMENERDAyMkQ2NTAyRDEwRkMwRTAwOEFFMzg3RUIwQjdENworOjEwNDcxMDAwNjNGRkFCMDAyMjY0MDZEMkEwRDEwRjAwRDJBMEQxMEY1QworOjEwNDcyMDAwMDBDQzU3REE2MERCMzBEQzQwNTgwODlEQzAyMEQxMEY0OAorOjEwNDczMDAwREE2MDU4MDkyRDYzRkZFODAwMjgyMjFFMjkyMjFENzgxRgorOjEwNDc0MDAwOTkwMjI4MEEwMEMxNzZDMUMxQzFEMjFCRTBBNUMxMjRDQgorOjEwNDc1MDAwQUI2QjY0ODA0Mzc4OTE0MDJBODAwMDBDQUYwQzY0RjAwRQorOjEwNDc2MDAwQUUwREFFMEM2NEUwQTgwMkFGMEM2NEYwQTIwN0FFMEM3NAorOjEwNDc3MDAwNjRFMDlDMkZBQ0U4NjRGMDk2MkVBQ0U3NjRFMDkwMkZFOAorOjEwNDc4MDAwQUNFNjY0RjA4QTJBODAwNzA4QTgwQjA4OEEwMjdCODNCQgorOjEwNDc5MDAwMDIyQThERjhEOEEwNjVBRkJCQzA5MDYwMDA3MzAwMDBGRQorOjEwNDdBMDAwMkI2MDBDMENCODExQTc4ODJFODI4NjZFRTg3OTA5QkFBNgorOjEwNDdCMDAwMEEyQUEyQTM2OEEwMDQ4RTYwN0FFOTZCMkE4Mjg1NjQyMworOjEwNDdDMDAwQTA2NTFGRTA4REMwRTMyRTY0MDY5RUExOUZBMDFGRTBBMAorOjEwNDdEMDAwQjkyRTYwMEE5MkEzMEZFRTAyOUVBMjhFNjAwRkVFMDIyNworOjEwNDdFMDAwOUVBNDJGNjAxNDdBRkY0NzIyQTQxN0FEQkUyRjgyODVBNgorOjEwNDdGMDAwMjJFNENGMkZGQzE4MkY4Njg1NjNGRTcwMkE2Qzc0QzBDQworOjEwNDgwMDAwQjFEQzkwREQ0MDU4MDdBMzFERTA3MkMwQzE2M0ZFQzQ1NworOjEwNDgxMDAwRDlBMERBNjBEQjMwREM0MERENTBDMkYwQzFFMDA5RkUzNworOjEwNDgyMDAwMzk1ODA3RUFEMkEwRDEwRkRBNjA1ODA4RUY2M0ZFRjBEQQorOjEwNDgzMDAwMkNBNDE3MERCRTA4Mjk4Mjg1MjJFNENGMjk5QzE4MjlCMworOjEwNDg0MDAwODY4NTY0NTAwQzJBNkM3NDA0NEIwMjU4MDE2QkQyQTAwQworOjEwNDg1MDAwRDEwRkMwMjBEMTBGMDAwMDZDMTAwNjJCMjIxRTI4MjI4MQorOjEwNDg2MDAwMUQ5MzEwN0I4OTAxQzBCMEMwQzlDMDNCQzFGMjA0MDZEMgorOjEwNDg3MDAwNDAxREUwNUJDMEUyQzA3NDA3NDcwMTBFNEUwMUFEMkQ0NAorOjEwNDg4MDAwOUUxMUMwNDAyRTBBMTQ2NEIwNkU2RDA4NDQyODIyMUQ4QgorOjEwNDg5MDAwN0I4MTY1MkFCMDAwN0VBMTNCN0ZBMTQ3N0I1MTIwN0NCNAorOjEwNDhBMDAwQTE0OTY4QTkxNzY4QUExNDczQTExMUMwOUY3OUExMEMyNgorOjEwNDhCMDAwQzE4Qjc4QTEwN0MxQUUyOTBBMUUyOUI0MDA3Q0ExMkJBNworOjEwNDhDMDAwMkFCMDA3MEJBQjBCREFCMDdEQjMwMjJBQkRGOERCQTAzMAorOjEwNDhEMDAwQ0FBNTYzRkZCNDI4QjAxMDg5MTE2OTg3QkI2NDlGQjg2QgorOjEwNDhFMDAwNjNGRkRDMDA2NDdGQjQ2M0ZGRDUwMDAwNjQ2RkQwQzA1OQorOjEwNDhGMDAwNDFDMUFFMkFCNDAwNjNGRkM2MkIyMTAyQ0VCRTJBMjJEQworOjEwNDkwMDAwMUQyQjIyMUU3QUIxMkE4QzEwN0NCMTIxN0FCOTAxQzBFQworOjEwNDkxMDAwQjBDOUI5MTNFMDI2REEyMDI4QjAwMDJDQjAwNzAzODgwQworOjEwNDkyMDAwMEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZFN0QyNDBFMworOjEwNDkzMDAwRDEwRjg5MTA2NTlGRDQ2M0ZGRjMwMDAwNkMxMDA4QzA4RAorOjEwNDk0MDAwRDBDODU5OEMzMDI5MjEwMjBDMEM0NzYwMDAwQzhFMzBFNQorOjEwNDk1MDAwMEUxRTUwNjVFMTlFMjkyMTAyQzBDMTE2RTAxNTA5MEIwQgorOjEwNDk2MDAwNEM2NUIwOTA4QTMwMEE2RTUxNjhFMzAyNjAwMDg1MkY3MgorOjEwNDk3MDAwNjI5RTFCRTAwRTZFRjg1MzJCQjIyNjY4QjAwNTJFMjIwNQorOjEwNDk4MDAwMDA3QkU5NDcyNzYyOURCNzQ4Q0I3Rjk3MTAyQjIwMEMwRgorOjEwNDk5MDAwQjA0RTBDQkYxMUE2RkYyOUYyODY5RTEyNzk4QjQxMTdFQgorOjEwNDlBMDAwRTAwNTA3QjcwQTI3NzJBMzY4NzAwNDg4MjA3Nzg5MzA2QQorOjEwNDlCMDAwMjlGMjg1REY5MEQ3OTA2NTkwNjUyQTIxMDQxOUUwM0NBMworOjEwNDlDMDAwN0E5QjIyREEyMDU4MDY5RjYwMDAyOTAwMkMyMTA0MUJDNAorOjEwNDlEMDAwRTAzODdDQkIxOERBMjBDMEI2NTgwNjlBQzk1ODYwMDE4NgorOjEwNDlFMDAwNENDMDkwNjNGRkNDREEyMDU4MDg3RjYwMDAwNkRBMjBDNAorOjEwNDlGMDAwQzBCNjU4MDg3RDY1NTEzNURDNDBEQjMwOEQzMERBMjA5QgorOjEwNEEwMDAwMEQ2RDUxNTgwNkYyQzBEMEQzQTA2NEExMjAyOTIxMDIxNworOjEwNEExMDAwQzA1MTg0QTE4Q0EwMDQwNDQ3MEMwQzQ3NjNGRjNFMDBFNgorOjEwNEEyMDAwQzA5Qzg4MzFEQkQwMDhGODUwMDg5QjM4MjgyMTA0OThCNgorOjEwNEEzMDAwMTE2RTg4MjMyODIwNjZBQzhDMEMwQzQ3MkMyNDY2N0NENQorOjEwNEE0MDAwQkIxNTlGMTM5RTE0OEExMDhCMTE1ODA3MDI4RTE0OEY2QQorOjEwNEE1MDAwMTNDMEQwMkQyNDY2OEEzMEMwOTJDMUM4MUJERkVDN0YwMgorOjEwNEE2MDAwQTYwOTlCRjA5OUYxMkNGNDA4MjdGQzEwNjU1MEE0QjgxNgorOjEwNEE3MDAwM0FERjcwQzA1MUMwODAwNzU4MzgwODA4NDI2NDgwNjcyOAorOjEwNEE4MDAwMThERkM4MTlERkM5Mjk4NjdFNkE0MjBBRDMwRjZERTk4QgorOjEwNEE5MDAwMDUwMEEwODgwMEYwOENDMEEwODkzMEI0RTM3Rjk2Mjg4MAorOjEwNEFBMDAwQzBGMjA3RTkwQjJDOTQwODlCOTA5RjkxMkYyMDBDMTJDOQorOjEwNEFCMDAwREZDODBDRjgxMUE2ODgyOTgyODVBMkZGMkRGNENGRDI3OQorOjEwNEFDMDAwQTAwOTMzMEIyMzg2ODVEMTBGMjIyMDBDODkxMjE4REYxMQorOjEwNEFEMDAwQzAwQzJCMTFBNkJCQTgyMjJEMjRDRjJDQjI4NUQyQTBBRQorOjEwNEFFMDAwMEM5OTBCMjlCNjg1RDEwRkMwODdDMDkwMEE1OTM4NzkyNworOjEwNEFGMDAwODA5NjYzRkY4QURCMzBEQTIwQzBDMUMwRDA1QkZGNTZFRQorOjEwNEIwMDAwMjkyMTAyQzBEMDJBOUNGRTY1QUU0RDJEMjUwMkMwOTAwMQorOjEwNEIxMDAwNjNGRTQ1MDA5RTE0MkEyQzc0QzBCMURDNzBERDQwNTg0MQorOjEwNEIyMDAwMDZERDhFMTRDMEQwMUJERkI5QzFDODYzRkY2QUMwMjA4OAorOjEwNEIzMDAwRDEwRjAwMDA2QzEwMDYyODIxMDIxNkRGOUQwODA4NENEQQorOjEwNEI0MDAwNjU4MjE5Mjk2MjlFNkY5ODAyNjAwMjIwMTlERjk4MjlGOAorOjEwNEI1MDAwOTIyNjY4OTAwNzhBMjAwOUFBMEM2NUEyMEYyNzYyOURGOQorOjEwNEI2MDAwQzBDQzY0NzIwNzJCMjEwNDhFMzFDMEEwRERBMDBFRkVFNAorOjEwNEI3MDAwNTAwRUNEMzg2RUI4MTAyQzIwNjZCMUNDMEMwQzQ3MkNFMgorOjEwNEI4MDAwMjQ2NjdDREIwMjYwMDFFRkMwQzEyOTMwMDgxQkRGOEE4QworOjEwNEI5MDAwNjQ5MDlDMkYwQUZGQzBEM0IwOUU2NEUxMDI2ODkyMTMxOAorOjEwNEJBMDAwNjQ1MDg4MkEyQzc0MDQ0QjAyNTgwMDkzMEFBMjAyMDYwRgorOjEwNEJCMDAwMDAwMDAwMDAyQjIwMEMyNzIxMDQwQ0JDMTFBNkNDMjlERQorOjEwNEJDMDAwQzI4NjI4MEEwODc5ODMwMjYwMDFCOTE5REY3QTA5QjkxNworOjEwNEJEMDAwMEEyOTkyQTM2ODkwMDgyRTIyMDAwOUVFMEM2NUUxQTQzMAorOjEwNEJFMDAwMkVDMjg1NjRFMTlFMjYyMDA3MTNERjgzNkU3QjAyNjA2MAorOjEwNEJGMDAwMDE5QTE3REY3QTFGREY4MzE5REZCMEMwRDIyODIwMEE5RAorOjEwNEMwMDAwOTNFMDlERTFBOTY5MEY4ODAyOThFMjJGOTA4MDJBOTQ5MQorOjEwNEMxMDAwODBCMUZGMDdGRjAyOUZFMzJFQzI4NTFGREY2RDBFREUwRQorOjEwNEMyMDAwMEJBRkJGMkFGNENGMkVDNjg1NjU1Rjc2QzAyMEQxMEZBQgorOjEwNEMzMDAwMjgzMDEwMjkzMDExMkUzMDEzMDA5OTMyMDBFRDMyNjRFMworOjEwNEM0MDAwODBFRTJBMzAxNDFGREY5RDAwQUEzMjc4RUYwNTBGOUVGOAorOjEwNEM1MDAwMDkyREU0N0YxRURGOUI2NkEwMDUwRjk4MDkyQTg0ODAzQQorOjEwNEM2MDAwQjRBNzE4REY5OEM3NkYwMDkxMDRBRTlFRERFMDAwQUZENworOjEwNEM3MDAwMUEwMEMzMUE2RUUxMDUyREIyMDAwREVEMEMxRURGOTI3NQorOjEwNEM4MDAwMDhEODFDMDYzMzAzQUU4ODJBODQ4QjJFQjAyRTI3ODRDNgorOjEwNEM5MDAwOEMwM0VFMDEwRkVFMDIyRUI0MkU1ODAxOEY2M0ZFRkYzRgorOjEwNENBMDAwMjkzMTA4MjkyNTA0MjgzMDE0MkUzMTA5QjA4ODY0ODA2MAorOjEwNENCMDAwQTMyRTI0MEFDMDgxMkUzMDE2MkNCNDIzMkUyNDBCQjQyQworOjEwNENDMDAwRUYyRjI0MEM4QzM3OEIzNjI5MjUwNERFQjBERkMwMEM4NworOjEwNENEMDAwOEYzOTBCOEUzOTBGRUUwMjY0RUVDNDA4OUYxMTAxQzRBOAorOjEwNENFMDAwMDQ4RDM4MENCODE4MDBDNDA0MENCRTE4MDBFRTExMEU2OAorOjEwNENGMDAwREQwMkMwRTMwRUZGMDIxRURGNjY5RjcxOUU3MDFFREZBNQorOjEwNEQwMDAwNjU4RjIwOTg3MzlENzQwNUZGMTEwQkNENTNDMTgwOTg1QQorOjEwNEQxMDAwNzUwRkREMDIwRUREMDI5RDcyMUVERjI0MkEyNDY2MkYzMAorOjEwNEQyMDAwNjI5RDJBRTRBMjJGRkMxODJGNjY5RDYzRkU3MTAwMDA4RAorOjEwNEQzMDAwMDAyRjMwMTIxQkRGNjYwMEZBMzI3OEZGMDUwQjk4MEI0QworOjEwNEQ0MDAwMkE4NDdGNjZEMDA1MEI5QTBCMkRBNDgwMkEzMDExMDA4RgorOjEwNEQ1MDAwQUEzMjYzRkY0NDJGMjQwQTlFMkI2M0ZGNTZDQzU3REFGNgorOjEwNEQ2MDAwMjBEQjMwREM0MDU4MDcwRUMwMjBEMTBGMDBEQTIwQzAxNQorOjEwNEQ3MDAwQjY1ODA3OUQ2M0ZGRTUwMERBNzA1ODA2MzZDMEEwMkFEMgorOjEwNEQ4MDAwMjQ2NjYzRkUwMkRBMjA1ODA3OTg2M0ZGQ0ZCMTY5MjhEMgorOjEwNEQ5MDAwMjAwQTg2MjAwOTA5NDc5OTExMjkyNDA3OTgxMDdGODE0NAorOjEwNERBMDAwMjY5M0UwMjdFNTBBOUFFMzg4MTA5REUxMTlERjQyOERGQQorOjEwNERCMDAwMTEwOTZGMDI5RkU0MkRFNDE2MDk4ODAyQzBEMzk4RTIxRQorOjEwNERDMDAwMkEyNDA3NjNGRTUxMDAwMDFEREYwQjA4NjgxMThGMTFCNAorOjEwNEREMDAwODkyQjkzRTAwOEZGMDJDMDhGOUZFNTBEOTkwMjk5RTJBRAorOjEwNERFMDAwMDQ3RjExQzBENDlERTEwOEZGMDI5RkU0NjNGRkQwMDA1RgorOjEwNERGMDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDg1MjEwRDM4MTFGNworOjEwNEUwMDAwMTRERUU5ODYyMkE0MjQwODY2MEM5NjIyMDUzMzBCOTM0RgorOjEwNEUxMDAwMjE3NDNCMTNDODYyRDIzMEQxMEZDMDMwQkMyOTk5MjExNAorOjEwNEUyMDAwOTkyMDkzMjJEMjMwRDEwRjIzM0RGODkzMjE2M0ZGRTNFMQorOjEwNEUzMDAwNkMxMDBBRDYyMDk0MTgxN0RFREVEOTMwQjgzODk4MTlDRAorOjEwNEU0MDAwOTkxNDY1NTI1MkMwRTFEMkUwMkU2MTAyMURERURCMEVFNAorOjEwNEU1MDAwMEU0QzY1RTE2MjhGMzA4RTE5MEY2RjUxMkZGQ0ZENjU4RQorOjEwNEU2MDAwRjE1NThFRTEyOUQwMjMwRThGNTA3N0U2NkI4RjE4MUVGNworOjEwNEU3MDAwREYxOEIwRkYwRkY0MTEwRjFGMTQ2NTkwQ0UxOERGMTU2NworOjEwNEU4MDAwOEM2MEE4Q0NDMEIxMTlERUM5Mjg2MDBCMDlDQzBCMEQxMQorOjEwNEU5MDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkE2NQorOjEwNEVBMDAwMzgxQkRGMEIwQ0E5MEEyOTkyOTQ3QjlCMDI2MDAwOENCMworOjEwNEVCMDAwMkI2MDBDOTQxNjBDQkQxMUE3REQyOUQyODZCODQ4Nzk1OQorOjEwNEVDMDAwODMwMjYwMDBEMjE5REVCQjA5QjgwQTI4ODJBMzk4MTdCMgorOjEwNEVEMDAwNjg4MDAyNjAwMEEzNjAwMEE1MUFERUZGODQxODBBRUU1NQorOjEwNEVFMDAwMDFDQTk4MUJERUIyOEMxOTJCQjAwMDhDQzA2RUIzMTNCNAorOjEwNEVGMDAwMURERUFGMEMxQzUyMERDQzBCMkRDMjk1QzBBMTdFREI2QworOjEwNEYwMDAwQUU2MDAwMzgwQzBDNTM2MDAwMDkwMDAwMDAxOERFRjFBMAorOjEwNEYxMDAwOEM2MEE4Q0NDMEIxMTlERUE1Mjg2MDBCMDlDQzBCMERBNAorOjEwNEYyMDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkFENAorOjEwNEYzMDAwMzgwQ0E5MEEyOTkyOTQ3RTkzMDI2M0ZGNzJEQTYwQzA0QQorOjEwNEY0MDAwQkE1ODA3Mjk2NDUwNzM2MDAyNjYwMDAwMUFERTk4OEMxNAorOjEwNEY1MDAwMTkyQUEwMDA4Q0MwNkVBMzFBMThERTk0MEMxQzUyMDhFQgorOjEwNEY2MDAwQ0MwQjE4REVEQjJCQzI5NUMwQTE3OEIzMDI2M0ZGM0ZFOAorOjEwNEY3MDAwNjNGRkM5MDAwQzBDNTM2M0ZGMDk4OTYwNzg5OTE4MjlGNQorOjEwNEY4MDAwRDI4NUM5OTIyQjcyOUUxRERFODk2RUI4MjMyREQyMjY0MgorOjEwNEY5MDAwOTkxMzY5RDAwQjYwMDAwRERBNjA1ODA3MTM2MDAwMTc5MQorOjEwNEZBMDAwMDA4ODYwN0Q4OTBBOUExQTI5NzI5RDlDMTI5OTE1Q0ZGMgorOjEwNEZCMDAwOTVEQTYwQzBCNjU4MDcwQzY1NTFGNThEMTQ4QzE4REI3NgorOjEwNEZDMDAwRDA4REQwMDY2QTAyMEQ2RDUxNTgwNTgwRDNBMDlBMTQ3OQorOjEwNEZEMDAwNjRBMUREODJBMDg1QTFCOEFGOUYxOTA1MDU0NzAyMDIzMworOjEwNEZFMDAwNDc5NTE4QzA1MTYzRkU2MDJCNjEwNEMwOEM4OTMxQzBBNQorOjEwNEZGMDAwQTAwOUY5NTAwOThBMzg2RUI4MUYyQzYwNjZBMkNDMEM0MworOjEwNTAwMDAwMEM0NzJDNjQ2NjdDQUIxMTlGMTE5RTFCOEExNTU4MDVCQQorOjEwNTAxMDAwOTE4RTFCOEYxMUMwQTAyQTY0NjY5RjExNjRGMEUxMjk1NAorOjEwNTAyMDAwMTIwMzI4MTIwOTZERjkxNzJGODEwMzAwOTA4REFFRkUyRgorOjEwNTAzMDAwMDA4MDg4OUY5MjAwOTA4QzAwODA4OEI4OTkwMDkwOENBNgorOjEwNTA0MDAwNjU1MTRFOEExMDg1MUE4QjMwMUZERTZCODgxMjI5NjBERAorOjEwNTA1MDAwMDcwODU4MEEyQzgyOTQyRDYxMDQwRUNDMEMyQzg2OTRERgorOjEwNTA2MDAwNkZEQjNDMUNERTk1QUM5QzI5QzA4MDBCNUQ1MEEyOTk4NworOjEwNTA3MDAwMDkwOTQ3MjlDNDgwNjVEMERBMkU2MDBDQzBEMDFGREUzNAorOjEwNTA4MDAwNTQwQ0U4MTFBRkVFQTc4ODIyODI4NTJERTRDRjAyNDJBRQorOjEwNTA5MDAwMEIyMjg2ODVEMkEwRDEwRjhFMzAwRTBFNDc2M0ZEQTY1RgorOjEwNTBBMDAwQTI5QzBDMEM0NzJDNjQwNzdBQjZDRDhCNjAyRTYwMEE0QworOjEwNTBCMDAwMjgwQUZGMDhFODBDNjQ4MTBFMThERTdFODMxNjgyMTMyRQorOjEwNTBDMDAwQjMzOTAyMzMwQjJDMzQxNjJEMzUwQUMwMjM5MjMxOUY4RAorOjEwNTBEMDAwMzBDMDIwOTIzMzA4QjIwMjA4RTgwMjkyMzQ5ODMyQzBGRAorOjEwNTBFMDAwODAyODY0MDcyQjYwMENEMkEwMUNERTM5MENCRTExQTdFRgorOjEwNTBGMDAwRUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCMkRFNjg1RDFGRQorOjEwNTEwMDAwMEY4QjE4ODgxMzhEMzBCODhDMEQ4RjQ3MEQ0OTUwQjQxNAorOjEwNTExMDAwOTkwNDk5MTAwRDBENUYwNEREMTAwOUZGMDI5RjgwMERBOQorOjEwNTEyMDAwQkIwMjlCODE2NTUwOEQ4NTFBQjgzQUMwRjFDMDgwMENENgorOjEwNTEzMDAwRjgzODA4MDg0MjY0ODA2QjFCREUxQTE5REUxQjI5QjY5QQorOjEwNTE0MDAwN0U4RDE4QjBERDZEREEwNTAwQTA4ODAwQzA4Q0MwQTA4RgorOjEwNTE1MDAwNjNGRUYzMDA4MjEzOEIxNjFEREUyQjI4NjAwQUMwRTA2RAorOjEwNTE2MDAwMkVDNDgwMEQ4ODAyMDJCMjBCOTkyMzlGMjBDMEQyOThEMgorOjEwNTE3MDAwMjI5RDIxMjI2MDBDQjJCQjBDMkQxMUE3REQyOEQyODUwNworOjEwNTE4MDAwMDhCQjBCMThERTEzMkJENjg1QTgyMjJFMjRDRkQyQTA2NQorOjEwNTE5MDAwRDEwRjlFMUI4NTFBMkE2Qzc0OEIxODVCRkYxNzhFMUIxMAorOjEwNTFBMDAwNjNGRUEzMDBDMDg3QzA5MDBBRjkzODc5ODA5MjYzRkYzQworOjEwNTFCMDAwODZDMDIwRDEwRjlFMUIyQTZDNzRDMEIxOEQxODU4MDU3MworOjEwNTFDMDAwMzU4RTFCODUxQTYzRkU3RTg4NkI4MjEzODkxNjA4QkU5NgorOjEwNTFEMDAwMTEwRUNFMDIwMjkyMEI5RTI1QjQ5OTFFREUwNjlGMjA3MAorOjEwNTFFMDAwMEU4ODAyOTgyMkMwRUYwNEQ4MTEwRTg4MDI5ODI0QzBCRAorOjEwNTFGMDAwRTQ5RTIxQzA4MEQyQTAyQjYwMEMyODY0MDcxQ0RERjQ0MworOjEwNTIwMDAwMENCRTExQTdFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEJEMworOjEwNTIxMDAwMkRFNjg1RDEwRjAwMDAwMDZDMTAwNEMwMjBEMTBGMDBENgorOjEwNTIyMDAwNkMxMDA0ODYzM0MwNzFDMDMwNjAwMDAxQjEzMzAwMzFBRQorOjEwNTIzMDAwMDQwMDc0MUEwNDYyMDE3NDYwRjFEMTBGNkMxMDA0MDI0RQorOjEwNTI0MDAwMkEwMjAzM0IwMjVCRkZGNjFDREREQzFCREUyNEM3OUY0QQorOjEwNTI1MDAwODhCMDA5QTkwMzA5OEEwMTlBQjA3OTgwMUVDMEYwMEZBRAorOjEwNTI2MDAwRTQzMTFEREREMzAwMDIwMDJCRDI4MjFFREUxRDJBQzFENworOjEwNTI3MDAwMDIwRUJCMDIyQkQ2ODIwQUU0MzFEMTBGMjhDMTAyQzEzMworOjEwNTI4MDAwOTAwOTg4MDIwODA4NEYyOEM1MDIwOEU0MzFEMTBGMDBCMAorOjEwNTI5MDAwNkMxMDA0QzBDMDBDRTQzMTEyRERDODFBRERDNTAwMDI3OAorOjEwNTJBMDAwMDAyOUEyODIxOERFMTExQkRFMEYyNjIxMDIwQjk5MDFCNAorOjEwNTJCMDAwMDg2NjAxMjlBNjgyMjYyNTAyMDZFNDMxMTRERTBDMTVCMworOjEwNTJDMDAwREUwNzIzNkE5MDIzMjYxMjg1NTAyNDI2MTEyNTI2MTNGMworOjEwNTJEMDAwMjIyQzQwRDEwRjAwMDAwMDZDMTAwOEQ2MTAyQjBBNjQ1RAorOjEwNTJFMDAwMjkxQUI0MUFEREIyMEQyMzExMUNEREIzMEYyNTExQjgzNAorOjEwNTJGMDAwMTg5ODEzMEU1NTExMThEREZFQUM1NUE4MzhBQTMzMkM5QQorOjEwNTMwMDAwODBGRjJBODBGRUE5MzMyODhEMDEyOTgwMDEwOEFBMTE3NworOjEwNTMxMDAwMjg4MDAwMENBQTAyMDg4ODExMDk4ODAyMDhBQTFDMjgwMworOjEwNTMyMDAwOEMwODI4MTYwNDU4MDg0QzE0RERBNDBBQTcwMjI0NDE0RQorOjEwNTMzMDAwMTYyQTMwODAyQjEyMDQwN0FBMjg1ODA4NDdCMTMzOEI0RAorOjEwNTM0MDAwMTNCNDU1OUE2MDA0QUMyOEI0NjYyQzU2Mjc3QjY5RTBFOAorOjEwNTM1MDAwMTZERERCOTQxMkMwNTBDMEQwMTdERDk3OUQxNUQzNzBCOQorOjEwNTM2MDAwRDQxMDJGNjA4MDJFNjA4MjlGMTY5RTE3ODgxNjcyODkzNworOjEwNTM3MDAwMUE4RDEyOEM0MDJBNjA3RjBEQ0MyODJCM0EyMDBDQUE2MworOjEwNTM4MDAwMjg1ODA4MzVDMEIxMEFCRTM3MkUzNTQwOEYxNzcyRjkzQworOjEwNTM5MDAwMUE4RDEyOEM0MDJBNjA4MTBEQ0MyODJCM0EyMDBDQUE0MQorOjEwNTNBMDAwMjg1ODA4MkRDMEIxMEFCRTM3MkUzNTQyQjIzM0I0NDQ1NgorOjEwNTNCMDAwQjE1NTY5NTJCNkI0NjZDMDUwOEYxNUI4NzdEMzcwQjI4NAorOjEwNTNDMDAwRkY5RjE1NkVGODk5RDEwRjZDMTAwNEMwMjFEMTBGMDAwQQorOjEwNTNEMDAwNkMxMDA0MjcwQTAwMUNERDc2MUZERDg3MUVERDhBMUQ4OAorOjEwNTNFMDAwREQ3MzFBRERCNTFCRERDM0MwMjgyNEIwMDA2RDJBNzUzRQorOjEwNTNGMDAwQUE0ODI4ODA4MEMwOTE2NDgwNjEwMDQxMDQxNURENkU1OAorOjEwNTQwMDAwQzAzMTI1NTAyRTAwMzYxQTA2NTUwMTA1OTUzOTBDNTYyNworOjEwNTQxMDAwMTEwQzY2MDgyOTYyOTY2RTk3NEQwRDU5MEEyOTkyMjQzRgorOjEwNTQyMDAwNjg5MDA4MTJEREE3MDI0MjA4NzI5OTNCMjM2Mjk1MTIyOAorOjEwNTQzMDAwREQ2QkNCMzQ5RjMwMDI4MjAyMEU0NDAyQzA5Mjk5MzE2MAorOjEwNTQ0MDAwOTQzMjkyMzNBRDUyMjQ2Mjk1QzA5MDI0NEMxMDI0NjY1RAorOjEwNTQ1MDAwOTUyNEIwMDAyOTI0QTBBQTQyMjkyNDgwQjE3N0IxNDQyMAorOjEwNTQ2MDAwMDQwNDQyMjRCNDAwRDEwRkQxMEZEMTBGNkMxMDA0MUFFMAorOjEwNTQ3MDAwREQ0RjJBQTAwMDU4MDIxQzVCRkZENTAyMkEwMjAzM0IyNQorOjEwNTQ4MDAwMDI1QkZGRDExQkRENERDOUExMkNCMTAyQzBENDBEQ0NGNAorOjEwNTQ5MDAwMDIwQzBDNEYyQ0I1MDIwQ0U0MzFEMTBGQzBBMDBBRTQ3MQorOjEwNTRBMDAwMzExOERENDMwMDAyMDAyRjgyODIxOURENTYyRUIxMDIzMQorOjEwNTRCMDAwMDlGRjAyMkY4NjgyMEVFNDMxRDEwRjAwNkMxMDA0QzA2OAorOjEwNTRDMDAwMjAwMkU0MzExNEREM0QxNkREM0EwMDAyMDAyMjYyODI0MgorOjEwNTREMDAwMjM0MTAyNzMyRjA2MDNFNDMxQzAyMEQxMEYxOUREODc2OQorOjEwNTRFMDAwMUFERDg2Mjg0MTAyMEEyQTAxMDk4ODAxMkE2NjgyMjhEMworOjEwNTRGMDAwNDUwMjA4RTQzMTE1REQ3RDEyREQ4MjI1NDYxREQxMEYwMAorOjEwNTUwMDAwNkMxMDA0MjkyMDA2Mjg5Q0Y5NjQ4MEEwMkE5Q0ZENjU2MworOjEwNTUxMDAwQTA5NjhBMjg4RDI2MkYwQTA4N0FEOTA0MkIyMjFGQzgyNAorOjEwNTUyMDAwQkQyQzIwNjQ2NEMwODEyRTIyMDkwRUFFMEM2NkUwNzg4QQorOjEwNTUzMDAwMkIyMDBDMUVERDFGMENCQzExQUVDQzI4QzI4NjE5REQ0MQorOjEwNTU0MDAwMUQ3OEYzMDI2MDAwQUQwOUI5MEEyOTkyQTM2ODkwMDg5QQorOjEwNTU1MDAwMkUyMjAwMDlFRTBDNjVFMDlCMjlDMjg1MUZERDI3NjQyMQorOjEwNTU2MDAwOTA5MjlGOTBDMEU0MUZERDM0OUU5MTI4MjAwQUMwRTBGNQorOjEwNTU3MDAwOUU5MzBGODgwMjk4OTI4ODIwMEY4ODAyOTg5NDJGMjA3QgorOjEwNTU4MDAwMDc5QTk3OUQ5NjJGOTUwQTJFMjQwNzI4MjAwNjI5MjBGMgorOjEwNTU5MDAwNjQ2ODgzMzMyOEMyODUxMkREMEUyODhDMjBBMkIyMkVDNworOjEwNTVBMDAwMjRDRjI4QzY4NUMwMjBEMTBGQzAyMEQxMEYyQTIwNkE2MQorOjEwNTVCMDAwMDExMTAyMEEyQTQxNjVBRjUyREEyMEMwQjA1ODA1RDE2NAorOjEwNTVDMDAwNjRBRkU1QzAyMUQxMEYwMDY0OUZDODFGRENGQjJEMjAxNAorOjEwNTVEMDAwMTY4RkYyMDlERDBDMDBGMTA0MDBERDFBQURBRDlEMjkzNgorOjEwNTVFMDAwMTJEQ0ZDMjhDMjg1QTJCMjJFMjRDRjI4OEMyMDI4QzYyQgorOjEwNTVGMDAwODVDMDIwRDEwRkMwMjFEMTBGMDAwMDAwNkMxMDA0MjZGRgorOjEwNTYwMDAwMEEwMDFCREQ0MDE1RENFQzI4MjA2NTE3RENFOTI4OEMzRQorOjEwNTYxMDAwRkU2NDgwOTQwQzREMTEwREJEMDgyQ0QyRjUyQkQyRjRGNAorOjEwNTYyMDAwMkVEMkY3N0NCMTNEQjRCQjJCRDZGNDdCRTkwNTJCRDI0RgorOjEwNTYzMDAwRjYyQkQ2RjQ3Q0I5MkMyQUQyRjYyQUQ2RjUyQUQ2RjQ0MworOjEwNTY0MDAwMDZFNDMxMDAwMjAwMjg3MjgyMkFGQUZGMDA0MTA0Mjk5MAorOjEwNTY1MDAwMEEwMTJGNTEwMjAwOTkxQTBBOTkwMzA5ODgwMTI4NzYzNAorOjEwNTY2MDAwODIwRkU0MzEyNjI0NjUyQkQyRjQ4RTVBMkNEMkY1QjA2OQorOjEwNTY3MDAwRUU5RTVBN0JDQjE2MjlEMkY2MkZEMkY3MENCODBDMDkyNgorOjEwNTY4MDAwRkYwQzA4RkYwQzBGMkYxNEM4Rjk2MDAwMzIwQkNBMEM3NgorOjEwNTY5MDAwMEEyQTE0Q0VBOTJCNTEwMkMwQzIwQ0JCMDIwQjBCNEYxRAorOjEwNTZBMDAwMkI1NTAyMEJFNDMxRDEwRjAwREIzMERBMjA1QkZGOTQ4NQorOjEwNTZCMDAwMUJERDE1NjRBRjVEMEM0RDExQURCRDYzRkZBODAwMDA4RgorOjEwNTZDMDAwMDZFNDMxMDAwMjAwMkY3MjgyMThEQ0Q0MkU1MTAyMDg0OQorOjEwNTZEMDAwRkYwMjJGNzY4MjBFRTQzMUQxMEYwMDAwNkMxMDA0QzA1RgorOjEwNTZFMDAwMzAwM0U0MzExNkRDQjMxNURDQjQwMDAyMDAyNDYyODIxRQorOjEwNTZGMDAwNzQ0NzIxMThERDA1ODc1QTA4NDgwMTI4NjY4MkNENzM1MgorOjEwNTcwMDAwMTlERDAzMEMyQTExQUE5OTIyOTI4MzI5OTI4NDcyOTE5RAorOjEwNTcxMDAwMDM4MjIwQ0MyOTJCNTEwMjBCRTQzMUMwMjBEMTBGMDA5MQorOjEwNTcyMDAwMUZEQ0ZDMkU1MTAyMEZFRTAxMkU1NTAyMEVFNDMxQjBBQgorOjEwNTczMDAwMkRCMTdDOUM1QTEyRENGNzA4REQxMTJENTYxOUQxMEZDMgorOjEwNTc0MDAwNkMxMDA2MUJEQzlBMUVEQzlDMjJCMDAwMUFEQ0YzNkY4NgorOjEwNTc1MDAwMjM3MjFERENEQUMwNDgxOERDRjIxRkRDRjBEQzEwRDU0NworOjEwNTc2MDAwQzA4M0YwMDA4MDg2MDA1MDhBNkQ0QTRGMEYzNTExMERCRQorOjEwNTc3MDAwMzQwOTI0NDA4MDBCNTYwQTI5NjI5NEIxMzMwRTU1MDkyRQorOjEwNTc4MDAwMjI1MTQwMEY0NDExMEM0NDBBODc0MDA5QTgwQzAyODg5QQorOjEwNTc5MDAwMzYyMjUxNDEwNzg4MzYwODc3MENBODk5Mjk2Njk0OTdENAorOjEwNTdBMDAwNDAyOTYyOTU4NzQxMDlBODBDMDI4ODM2MDc4ODM2MDg4NworOjEwNTdCMDAwNzcwQ0E4OTkyOTY2OTU5NzQxMDMwMzQyQjEzODA4MDhFOAorOjEwNTdDMDAwNDI5OEYwRDEwRjFDRENENzEzRENEODI3QjAwMDIzMzI2RAorOjEwNTdEMDAwQjU2NDcwNTdDMDkxQzBEMDE2RENENjE1RENENEMwNDA3QgorOjEwNTdFMDAwMkFDMDAwMDM4ODQzMjhDNDAwNkQ3OTNDMDA0MTA0QjFGRAorOjEwNTdGMDAwNDQwMDk3MUE3NzgwMTQ4RTUwMkZCMjk1MkRCNjk1QUYyRQorOjEwNTgwMDAwRUUyRUVEMjAwNkVFMzY5RTUwNjAwMDE4NzdBMDA5ODMzQworOjEwNTgxMDAwNTA5RDUwMjNCNjk1NjAwMDAyMjNCMjk1MjIzRDIwMDY4QworOjEwNTgyMDAwMjIzNjIyQjY5NUI0NTVCOEJCRDEwRjAwMDM4ODQzMjg2MQorOjEwNTgzMDAwQzQwMEQxMEY2QzEwMDRDMDQwMDRFNDMxMTVEQ0JFMDA3QworOjEwNTg0MDAwMDIwMDg4NTAxM0RDQkRDQjgxNUJGRkJEMUNEQ0JDMENBRgorOjEwNTg1MDAwMkQxMUFEQ0MyQkMyODIyQUMyODM5NDUwN0JBQjE0MkU2NworOjEwNTg2MDAwQzI4NDI5QzI4NTBBQkQwQzBFOTkwQzBEOTkwQzA5MjkxOAorOjEwNTg3MDAwMTQ2MDAwMDUwQkE5MEMwOTI5MTQ5OTMwMTVEQzRGMkE3NgorOjEwNTg4MDAwNTEwMjBBRTQzMTJBMkNGQzU4MDA0QjJCMzIwMDBBQTJBOAorOjEwNTg5MDAwMDIyQkJDRkY5QjMwQ0NCNkM4QTREMkEwRDEwRjAwMDAxNQorOjEwNThBMDAwMDRFNDMxMUVEQzQzMDAwMjAwMkRFMjgyMkZCQUZGMkNGQgorOjEwNThCMDAwNTEwMjBGREQwMTJERTY4MjBDRTQzMUQxMEYwMDAwMDAxMgorOjEwNThDMDAwNkMxMDA0RDEwRjAwMDAwMDZDMTAwNEMwMjBEMTBGMDAzOAorOjEwNThEMDAwNkMxMDA0MTNEQzlCQzBEMTAzMjMwOTIzMzE4REMwQTBCRAorOjEwNThFMDAwNkYzNDAyNjAwMDhEMTlEQzMyMUJEQzMzMTdEQzk0MEM0MgorOjEwNThGMDAwMjgxMUE4NzcyNjcyODMyNTcyODIyQ0ZBRkY3NjUxNDdFOQorOjEwNTkwMDAwODg1MDJFNzI4NTI1NUMwNDI1NzY4Mjc1RTkwNTI1NzJGRQorOjEwNTkxMDAwODQyNTc2ODI3NjU5MjkyRTcyODQyRTc2ODIyRTc2ODM3RAorOjEwNTkyMDAwMEFFNDMxMDAwMjAwMjM5MjgyMDAyMTA0MkZCMTAyMDAxOAorOjEwNTkzMDAwRDYxQTBDNjYwMzA2MzMwMTIzOTY4MjBGRTQzMTI2NzJEMQorOjEwNTk0MDAwODMyNTcyODI2MDAwMDIwMEQ4QTA3NjU5MjIwQUU0MzFEMQorOjEwNTk1MDAwMDAwMjAwMjM5MjgyMDAyMTA0MDBEMjFBMkZCMTAyMEMwRgorOjEwNTk2MDAwMjIwMzAyMzIwMTIyOTY4MjBGRTQzMUQyODBEMTBGMDA0RAorOjEwNTk3MDAwRDI4MEQxMEZDMDIwRDEwRjZDMTAwNERCMzA4NjIwMTVFRgorOjEwNTk4MDAwREMwQjI4MEEwMDI4MjUwMkRBMjAyOEIwMDAyQ0IwMDdGQQorOjEwNTk5MDAwMDU4ODBBMjg4MjRDMkQwQTAxMEI4MDAwREJBMDY1QUYyOAorOjEwNTlBMDAwRTYxQURDMDQwQTRBMEEyOUEyQTNDN0JGNzY5MTAxRDFFQworOjEwNTlCMDAwMEYyQkE2QTNEMTBGMDAwMDZDMTAwNEMwRDFDN0NGMUJDMgorOjEwNTlDMDAwREJGRTE5REJGQjE3REJGOTBDMjgxMUE4Nzc4Njc1ODU0MAorOjEwNTlEMDAwNzRDMEEwNzY1MTYyODg1MDhFNzdCNDU1OTU3NDc1RTk3RAorOjEwNTlFMDAwMDM4NTc2OTU3NDc2NTkyNzhGNzY5Rjc1OUY3NDBBRTRBMAorOjEwNTlGMDAwMzEwMDAyMDAyMzkyODJCNDJFMkZCMTAyMDBFMTA0MDA5NAorOjEwNUEwMDAwRDYxQTBDNjYwMzA2MzMwMTIzOTY4MjBGRTQzMTg2NzU5RAorOjEwNUExMDAwODM3NDc2MzkyODBBRTQzMTAwMDIwMDJFOTI4MkI0MjI3RgorOjEwNUEyMDAwMDAyMTA0MjRCMTAyMDBERjFBMENGRjAzMEZFRTAxMkU0NworOjEwNUEzMDAwOTY4MjA0RTQzMUQyODBEMTBGRDhBMDc2NTFENkQyODA5QworOjEwNUE0MDAwRDEwRjAwMDA2QzEwMDQyOTBBODAxRURDMDAxRkRDMDA0RQorOjEwNUE1MDAwMUNEQkQ4MEMyQjExQUNCQjJDMkNGQzJEQjI4NTBGQ0MzNQorOjEwNUE2MDAwMDI5RUQxOUNEMEMwNTFDMDcwMTNEQkZDMTREQkZCMTgyQworOjEwNUE3MDAwREJGOTJBQjI4NUE4MjgwNDI0MEEyMzQ2OTFBOTg2QjgwRQorOjEwNUE4MDAwQUEyQUI2ODVBOTg4Mjc4NDlGMjU2NDlGRDEwRjAwMDA4NAorOjEwNUE5MDAwNkMxMDA0MTlEQzJDMEMyQTExQTlBOTg5OTBDNDg0NzlGMgorOjEwNUFBMDAwOEI3NjFCREMxQUFCQUMyQUMyODMyQ0MyODQ3QUMxNjgwOQorOjEwNUFCMDAwOEFBMDJCQkMzMEQzQTA2NEEwNUUwQjJCMEEyQ0IyQTMwRgorOjEwNUFDMDAwMTlEQkU1NjhDMDA3MUREQzIwRDMwRjdEQzk0QUE5Mjk3MQorOjEwNUFEMDAwMjk5RDAxMjk5MDFGNjg5MTMyNzBBNjAzRDNBMENBOUUwOAorOjEwNUFFMDAwNjg5MjEwQzdBRjJBQjZBMzJBMkNGQzVCRkZCM0QyMzA1MgorOjEwNUFGMDAwRDEwRjAwMDAxM0RCQzUwM0EzMDE4QzMxMUREQkI2MENGNQorOjEwNUIwMDAwOEMxNDBEQ0MwMTJDQjZBMzYzRkZEQzAwQzAyMEQxMEY5OAorOjEwNUIxMDAwREEyMDVCRkZDQ0MwMjBEMTBGQzAyMEQxMEYwMDAwMDBFNQorOjEwNUIyMDAwNkMxMDA0REIzMEMwRDAxOURCQTFEQTIwMjgzMDAwMjI1MQorOjEwNUIzMDAwMzAwNzA4NDgxMjA5ODgwQTI4ODI0Q0RDMjAwQjgwMDBCNAorOjEwNUI0MDAwMUJEQjlDMEM0QTExQUJBQTI5QTI4NDA5MjkwQjI5QTZBQworOjEwNUI1MDAwODREMTBGMDA2QzEwMDRDMDQxMThEQjk1MTdEQjk3MEM0MworOjEwNUI2MDAwMjYxMUE3MjcyNzcwMzBBODY2MjU2Mjg2MDA3MTA0QTMzNgorOjEwNUI3MDAwNTUwMDQ0MUE3NTQxNDgyMjYyODQxNURCQjgwMjMyMEI4NQorOjEwNUI4MDAwQzkyMjg4MjExN0RCOTQwODg0MTQwNzQ0MDE3NTQ5MDU0QworOjEwNUI5MDAwQzgzNEMwMjBEMTBGRDEwRjA4MDk0NzFEREJFQkMwQjJCQworOjEwNUJBMDAwOEUyMDFGREI4MjBFMEU0M0FGRUMyQkM0QTAwRkVFMEEzQgorOjEwNUJCMDAwMkRFNjI0MkE2Mjg0QzAyMDBBOTkwQjI5NjY4NEQxMEYxRAorOjEwNUJDMDAwQzAyMEQxMEY2QzEwMDREQjMwQzBEMDE4REI3OERBMjA5NQorOjEwNUJEMDAwMjUzMDAwMjIzMDA3MDg1ODBBMjg4MjRDREMyMDBCODAzMAorOjEwNUJFMDAwMDA4OTMxNzA5RTEyMUJEQjcyMEM0QTExQUJBQTI5QTJFQworOjEwNUJGMDAwODQwOTI5MEIyOUE2ODREMTBGMDlDOTUyNjg1MzI2MDBBQworOjEwNUMwMDAwOTEwNDE4REI2REMwQTEyRjgxMTIwMEFBMUEwQUZGMDJBRAorOjEwNUMxMDAwMkY4NTEyMUVEQjY3MEM0RDExQUVERDJDRDI4NDBDMkNBRgorOjEwNUMyMDAwMEIyQ0Q2ODREMTBGQzA4MTFGREI2NEI4OUEwQTBBNDdCNworOjEwNUMzMDAwMkVGMTEyMDBBMTA0MDA4ODFBMDhFRTAyMkVGNTEyMURBMgorOjEwNUM0MDAwREI1QzBDNEMxMUFEQ0MyQkMyODQwQjJCMEIyQkM2ODQxNAorOjEwNUM1MDAwRDEwRjAwMDA2QzEwMDREQjMwQzBEMDE5REI1NERBMjAwNworOjEwNUM2MDAwMjgzMDAwMjIzMDA3MDk4ODBBMjg4MjRDREMyMDBCODA2QgorOjEwNUM3MDAwMDAxQ0RCNEYwQzRCMTFBQ0JCMkFCMjg0MEEyQTBCMkE0NgorOjEwNUM4MDAwQjY4NEQxMEY2QzEwMDRDMDQxMThEQjQ5MTZEQjRCMENGNQorOjEwNUM5MDAwMjcxMUE2MjYyNjYwMzBBODcyMjUyMjg2MDA2MTA0QTM1QgorOjEwNUNBMDAwNTUwMDQ0MUE3NTQxMDgyMjIyODQwMjMyMEJEMTBGMDA5QworOjEwNUNCMDAwQzAyMEQxMEY2QzEwMDQxNURCQTUwMjQ5MTQyOTU2MTEyMAorOjEwNUNDMDAwMjQ1MjEyMDIwODQzMEY4ODExQzA3MzAwODEwNDAwMzY2OQorOjEwNUNEMDAwMUEwMDgxMDRDNzhGMDA3NzFBMDg3NzAzMDc0NDAxMDY2QQorOjEwNUNFMDAwNDQwMjI0NTYxMkQxMEYwMDZDMTAwNjZFMjMwMjYwMDA4RAorOjEwNUNGMDAwQUM2NDIwQTdDMEEwODUxMDEzREI3RTE2REI5NEMwNDBFNworOjEwNUQwMDAwQTZBQTJCQTJBRTBCMTk0MTY0OTA2NjY4OTE1RDY4OTJCOQorOjEwNUQxMDAwNTI2ODkzM0MyQUEyQUEyODNDN0YyODhDN0YwQTBBNEQwRAorOjEwNUQyMDAwMjk4MDAxMjg4MDAwMkFBQ0YyMDg4ODExMDk4ODAyNzVCMAorOjEwNUQzMDAwODk0NjJCM0QwMTI5QjAwMDJCQjAwMTA4OTkxMTBCOTkyMAorOjEwNUQ0MDAwMDI3QTk5MzRCODMzMkEyQTAwQjE0NDcyNDlCMTYwMDAwQQorOjEwNUQ1MDAwNEE3RkJGMDcxNURCN0Y2M0ZGQjkwMDAwMjUzQUU4NjM4MAorOjEwNUQ2MDAwRkZCMTAwMDAyNTNBRTg2M0ZGQTkwMDAwMjUwQTY0NjMzQgorOjEwNUQ3MDAwRkZBMUMwNUE2M0ZGOUMwMDAwNzA1RjA4MjUzNEZGMDUzNworOjEwNUQ4MDAwOEMxNDJDMzRGRTcwQUYwQjBBOEQxNDJFM0QwMTJBRTRDNgorOjEwNUQ5MDAwMDEyREU0MDBEQTQwNUJGRDUwNjNGRkE3RDEwRkQxMEY2NgorOjEwNURBMDAwNkMxMDA0MUFEQjA1MTlEQjAyMUNEQjZBMUJEQjZCQzAwMQorOjEwNURCMDAwODBDMDcxNjAwMDBEMDAwMDAwMjJBNDMwQjFBQTI5OUNBRgorOjEwNURDMDAwMTA3QjkxNUYyNjkyODY3OUMyMTU2RTYyNjJDMDIwNkQ0QgorOjEwNUREMDAwMDgwQUIxMjIwMDIxMDQwMDc0MUE3NjRCREI2M0ZGRUUzRgorOjEwNURFMDAwMjI5Mjg1MEQ2MzExMDMyNTE0NjQ1RkNGRDY1MDAzMkRENQorOjEwNURGMDAwNDM2REQ5MDM5ODIwQjQyMjA2NDQxNDZENDkyMjk4MjA5QgorOjEwNUUwMDAwOTgyMTk4MjI5ODIzOTgyNDk4MjU5ODI2OTgyNzk4MjhBRQorOjEwNUUxMDAwOTgyOTk4MkE5ODJCOTgyQzk4MkQ5ODJFOTgyRjIyMkNEOAorOjEwNUUyMDAwNDA2M0ZGOTcxRURBRTMyN0U2ODAyN0U2ODFEMTBGMDA2MworOjEwNUUzMDAwQzAyMDYzRkY4MzAwMDAwMDZDMTAwNEMwNjJDMDQxMTJFOAorOjEwNUU0MDAwREFERTFBREFEQTEzREI0NTJBQTAwMDIzMzIyRDE5REI1OQorOjEwNUU1MDAwM0YyQkFDRkUyOTkyQUU2RUEzMDI2MDAwOEUwOTBFNDA2RAorOjEwNUU2MDAwMkQxQUMyQzJDRDBFREMzOTJDMjUxNjY0QjA4OTVCRkYxOQorOjEwNUU3MDAwOUUxNURCM0IxQURBRTUyQjNBRTgwQTNBMDE1ODA1NzYxQgorOjEwNUU4MDAwMkIyMTE2MEFCQjI4RDNBMDJCNTYwMDU4MDU4RDhCNTAwQQorOjEwNUU5MDAwMEFCQjA4MkEwQTAwNTgwNThDMTVEQjMyMkQyMTAyMkM3QQorOjEwNUVBMDAwM0FFODBDM0MyODA0REQwMjJEMjUwMjlDNTA1ODA1ODQ1QworOjEwNUVCMDAwOEI1MEFBQkJDMEExNTgwNTg0MUNEQjJCMkQyMTAyMENFMgorOjEwNUVDMDAwM0MyODA2REQwMjEzREIyOTJEMjUwMjlDMzA1ODA1N0M3OQorOjEwNUVEMDAwOEIzMEFBQkJDMEEyNTgwNTdDMkEyMTAyQzBCNDBCQUFGMQorOjEwNUVFMDAwMDIwQTBBNEYyQTI1MDI1ODA1OTBEMTBGMjQyNDIzQzMwMQorOjEwNUVGMDAwQ0MyQzI1MTY2M0ZGNzYwMDE4REIyMTFDREIxRDE5REI3QgorOjEwNUYwMDAwMUUxQkRCMUMxN0RBRjA4NTIwMkUwQUZEMUZEQjFEMkQ2MgorOjEwNUYxMDAwMjAyRTI0RjQ3QTI0RjQ3RTI0RjQ4MjBFREQwMTI0RjQ2RAorOjEwNUYyMDAwODYyRTBBRjcwNzU1MjgwNkREMDJDMDc1MEVERDAxMDUyRAorOjEwNUYzMDAwMDUwNkFCNUJBOTU5QzBFOEFDNUMyNEM0QUIwRUREMDIxRQorOjEwNUY0MDAwMjdDNEFDMkUwQURGQTg1NTI3QjRFQzBFREQwMTI0QjQxQgorOjEwNUY1MDAwRUJDMkUwMjc5NDJDMEVERDAyMjQ5NDJCMkUwQTgwMEQzOAorOjEwNUY2MDAwMEQ0NjI3NTQ2QzI0NTQ2QjBFREQwMjJEMjQyRTYzRkU0NworOjEwNUY3MDAwRkMwMDAwMDA2QzEwMDQyQTBBMzAyQjBBMDM1QkZGNEQ2MgorOjEwNUY4MDAwMTJEQUYzQzM5MDI5MjYxNkMzQTFDMEIzQzA4QTI4MjYwQgorOjEwNUY5MDAwMTc1QkZGNDhDMDNDQzNCMTJCMjYxNjFBREE4NzJBQTAyQworOjEwNUZBMDAwMjAyMzI2MTc2NEEwNzlDM0EyQzBCMTVCRkY0MkMzQTIxRAorOjEwNUZCMDAwQzBCMTVCRkY0MEMzQzIyQzI2MTZDMkFGQzBCMTIzMjZCRQorOjEwNUZDMDAwMTc1QkZGM0NDMjhGMjgyNjE2QzBGRTJGMjYxN0MyRTJBMQorOjEwNUZEMDAwMkUyNjE2MkEwQUExQzBCMUMwRDgyRDI2MTc1QkZGMzU4MAorOjEwNUZFMDAwMkEwQUExMkEyNjE2QzNBNkMwQjNDMTkyMjkyNjE3NUI4NgorOjEwNUZGMDAwRkYzMUMzQzYyQzI2MTZDMUIzMkEwQUEyMkIyNjE3QzAwRQorOjEwNjAwMDAwQjM1QkZGMkMyOTBBQTIyOTI2MTZDMTg1MjgyNjE3QzJCMAorOjEwNjAxMDAwRkIyRjI2MTZDMEU3MkUyNjE3MUREQURBMkQyNjEwRDEwMworOjEwNjAyMDAwMEZDM0EyQzBCMzVCRkYyMzYzRkY4MjAwNkMxMDA0MUM4QworOjEwNjAzMDAwREFBNDFCREE5MTE4REFENDE3REFENTE2REFENTE1REExQworOjEwNjA0MDAwRDVDMEUwQzBENDE0REFBMDFGREE1Q0MwMjg4RkYwNkQ5MAorOjEwNjA1MDAwMkEzNkRBQzBEOUMwN0M1QjAyMEZDOTBDMUNEQTlBMEM1NAorOjEwNjA2MDAwOUMyOEE4QzNBNkMyMkEzNjgwMkEyNTg0QTRDMkE3Q0MwRAorOjEwNjA3MDAwMkQyNDhDMkIyNDhBMkIyNDg3MkUyNDhCQjFCQjJFMzZFNworOjEwNjA4MDAwOUYyQzM2OUUyQzM2OURCMUFDMUNEQTdCMUJEQUMzQzAyQworOjEwNjA5MDAwMjg2RDJBMzNEQUMwRDlDMDdDNUIwMjBGQzkwQzFDREEyOAorOjEwNjBBMDAwODkwQzlDMjhBOEMzQTZDMjJBMzY4MDJCMjU4NEE0QzJBQQorOjEwNjBCMDAwQjFCQkE3Q0MyRDI0OEMyRTI0OEIyQTI0OEEyRTM2OUY2QworOjEwNjBDMDAwMkMzNjlFMkMzNjlEQjFBQ0MwNzkxOURBNzkxQkRBQjUyNQorOjEwNjBEMDAwMTNEQUIzMUFEQUIzMThEQUI0MTREQTdBMTZEQUI0MDRDMworOjEwNjBFMDAwRjQyODEyREFCMzA0NjYwQzA0MDUwNkEyNTJBODU4QUFEMgorOjEwNjBGMDAwNUFBMzUzOUIzMDI5QTUwMDI3ODQ4QUMwOTFDMEE1MkFBMgorOjEwNjEwMDAwODQ4QzI5ODQ4QjE3REFBQzE4REFBQkE3NTcyNjM2MUQ5NgorOjEwNjExMDAwMjYzNjFFMkUzNjFGMTZEQUE5MTNEQUE5QTY1NTA0MzMyMQorOjEwNjEyMDAwMEMyODI2QzgyRTc1MDAyRDU0QUMyRTU0QUIyRTU0QUEyNAorOjEwNjEzMDAwMjMyNkU2MjMyNkU1MkUyNkU3RDEwRjAwNkMxMDA2MTM1MgorOjEwNjE0MDAwREE4NzE3REE4MjI0NzIzRDIyMzI5MzdGMkYwQjZEMDg5MworOjEwNjE1MDAwMDUyODMyOTM3RjhGMDI2M0ZGRjNDMEM0QzBCMDFBREEwMAorOjEwNjE2MDAwMTZDMDUxRDk0MDA0NTkzOTI5QTQyMDZFNDQwMjBCQjVGOAorOjEwNjE3MDAwMDJDMzI4MUVEQTExRERCMDI1RTQyMjA1MkQzOTJERTRGNQorOjEwNjE4MDAwMjFDMDUwMUVEQTkwMTlEQTgwMThEQTgwMTZEQTgyMURFMgorOjEwNjE5MDAwREE4RTk0MTAyQTcyNDUxN0RBNEM2REE5NEJENDUwQjM5RAorOjEwNjFBMDAwNTU3QTVCMTdERjUwNzU2QjA3MUZEQTAzOEZGMDBGNUZBRgorOjEwNjFCMDAwMEMxMkRBNDQwMkYyMjhBRTIyMjJENjgxRDU0MDEzREEzQworOjEwNjFDMDAwNDE3NDZCMDcxNUQ5RkQ4NTUwMDU0NTBDMDM1MzI4QjE2MworOjEwNjFEMDAwNDVBNzNGQTgzMkE5MzMyMjM2OUQyMjM2OUUyNDM2ODAxOQorOjEwNjFFMDAwMkIzNjlGMkJGNDhCMkNGNDhDMTREQTVDMjQ0MjREQzA5QworOjEwNjFGMDAwMzAwNDE0MTRDODRDNkQwODA2QjEzMzA0MTQxNEM4NDI5QQorOjEwNjIwMDAwNjNGRkYyMDAxNUQ5RUFDNDQwMDAzMTA0MUFEOUVCQzA4QgorOjEwNjIxMDAwRDE5M0EyMDBERDFBQzEzOEIwREQ5REEzMThEQTUwMkI0RQorOjEwNjIyMDAwODI0RDI5ODI0RTI5QTUxQzI4ODI1MzdBODcxRTJDNTQyMAorOjEwNjIzMDAwMDA4RTEwNkZFNDVEMTJEOUUwMkYyMTFEMjMyMTFDMkY0OQorOjEwNjI0MDAwMjUxQjA0MzMwQzIzMjUxQzIzMjUxQUQxMEZDMDYyMThFQgorOjEwNjI1MDAwREEzRjg4ODA3RTg3RDk4OTEwMjY1NDAwNkY5NDE5MUJGNQorOjEwNjI2MDAwRDlENjJBQjExQzBBMUExNDA0QUEwQzJBQjUxQzJBQjVCQworOjEwNjI3MDAwMUQyQUI1MUEyQUI1MUJEMTBGMUJEOUNGMkFCMTFDMEE2QQorOjEwNjI4MDAwMUExNDAzQUEwQzJBQjUxQzJBQjUxRDJBQjUxQTJBQjU1OAorOjEwNjI5MDAwMUJEMTBGMDAxQ0Q5QzkyQkMxMUQyREMxMUMyQkM1MUIyNworOjEwNjJBMDAwMDNERDBDMkRDNTFDMkRDNTFBRDEwRjAwNkMxMDA2MTk2RAorOjEwNjJCMDAwRDlDMjE0REEyNjEyREEyOTE1REE0NEM3M0ZDMEUwMkUxMworOjEwNjJDMDAwNTZBODJFNTZBOTJFNTZBQTJFNTZBQjIzMjYyOTE4RDlFMworOjEwNjJEMDAwRUFEQjEwMUNEQTNFQzBENDJBNDI0NTJEMTYwMTlDMTA4MAorOjEwNjJFMDAwMDBCMDg5MEE4ODBDMjg5NjAwNUJGRjk0MkIyMkUzMThFMworOjEwNjJGMDAwRDlCMjBCNUIxNDlCODQyQTIyRTQ4Qjg0QjFBQTBBNUE3QworOjEwNjMwMDAwMTQwQkFBMEM5QTg1MjkyMkU1MDk1OTE0OTk4NjJGMjI4MworOjEwNjMxMDAwQ0QwRjVGMTQ5Rjg3NUJGRjQ1NUJGRjE2MjM0NjNCQzE5NAorOjEwNjMyMDAwQjAxREQ5QTUxQ0RBMDMyQUQxMDIyQzQ2M0EwQkFBMDJDOQorOjEwNjMzMDAwMEEwQTRGMkFENTAyNTgwNDdDNUJGRUJGNUJGRTk4QzA1OAorOjEwNjM0MDAwNTBDMEIwMTZEOTlCMTREOUEzMTdEQTEyQzBDMEM3M0VFQgorOjEwNjM1MDAwOTMxMjJDMjYyREMwMzA2MDAwNDMwMDAwMDA3RjlGMEY1OQorOjEwNjM2MDAwQjE1NTA5MTkxNDY1OUZGNEMwNTAwQUE5MDI3RkE3RUYxRgorOjEwNjM3MDAwMThEOThGREE1MDA4NTgwQTI4ODIyQzJCMEEwMDBCODA3MworOjEwNjM4MDAwMDAwMDUxMDREMkEwQzA5MUM3QUYwMDk5MUEwQTk5MDMyNgorOjEwNjM5MDAwOTkxMkNFMzM2NDIwNjdEMzIwMkIyMDA3OTUxMzhDMTJEQgorOjEwNjNBMDAwMkE2MjgyN0NBODVGMThEOTgxMDg1ODBBMjg4MjJDREFEMAorOjEwNjNCMDAwNTAwQjgwMDBEMkEwNjQzRkRBOEEzMTBBOEExNDA0QUEwMgorOjEwNjNDMDAwMDFDODI5OEIyMTBCOEIxNDA0QkIwMTdCQTk0NUREQTBERgorOjEwNjNEMDAwN0E3QjA4MUREOTc5MkREMjAwMERBRDBDREIzMDE5RDk4RgorOjEwNjNFMDAwNzMxQUQ5QjgyODEyMDMwQURBMjgwODhDMDIxREQ5RjVDNQorOjEwNjNGMDAwMDk4ODBBMjg4MjNDMERBQTA4MEI4MDAwNjUyRjk3RDNENAorOjEwNjQwMDAwMjBDMEIwNjNGRjk3Q0I1M0IxNTUwMDUwMDQwQTA5MTk1RgorOjEwNjQxMDAwNjNGRjQ5MDBEQUIwN0I3QjA3MUFEOTY3OEFBMDBBQkEwMgorOjEwNjQyMDAwMEMxQkQ5QTg4QzMxMEJBQjI4MEM4QTE0MUNEOUU2QUNGOAorOjEwNjQzMDAwQkIxQ0Q5RTUwNEFBMDEyQkM2ODE2M0ZGOTA3RkE3QzdDNworOjEwNjQ0MDAwNjNGRjYyMDA2QzEwMDQyNzIyMUVDMDgwMDhFNDMxMUIyOQorOjEwNjQ1MDAwRDk1ODAwMDIwMDJBQjI4MjE5RDk1ODAwMzEwNEMwNjEwQgorOjEwNjQ2MDAwMDA2NjFBMjk5MTAyMEE2QTAyMkFCNjgyMDlFNDMxMTVFNQorOjEwNjQ3MDAwRDlCMzBDMzgxMUE4NTMyODMyODIyNDMyODQyQThDRkNEOAorOjEwNjQ4MDAwNzg0MTEwMjkyMTAyMkEzNjgyOTdBMDA5NjkwMjI5MjUxQworOjEwNjQ5MDAwMDJEMTBGMDAyQjIxMDIyQzMyODUwQjZCMDIyQ0NDRkM3RAorOjEwNjRBMDAwMkMzNjgyOTdDMDJCMjUwMkQxMEYwMDAwNkMxMDA0QzAzRgorOjEwNjRCMDAwRTcxREQ5M0IxQ0Q5M0QwRDQ5MTFENzIwOEIyMjhBMjBERAorOjEwNjRDMDAwMEI0QjBCRDJBMDA3QTgwQzlCNzIyODhDRjRDODM0NkYxRQorOjEwNjREMDAwOEUwMjYwMDBBMjFGRDkzM0EyOThBRjdCNzhCMzM0Qzk3MworOjEwNjRFMDAwM0RDMDgxQzBGMDAyOEYzODBGMEY0MkM5RkEyQ0Q2N0UxMgorOjEwNjRGMDAwRDUyMDZENEEwNTAwMzA4ODAwNTA4Qzg4NzAwODk4MDhCNworOjEwNjUwMDAwNzhCMTZDRDJBMDk4NzBEMTBGQzBGMDAzOEYzODdGRTBDMworOjEwNjUxMDAwREU2M0ZGRDgwMjdCMENBRkJCMEI5OTBDNjQzMDQ2RDgwRQorOjEwNjUyMDAwMzBDMEYxQzA1MDAyRjUzODA1MDU0MjY0NTA3OTJDRDZEMAorOjEwNjUzMDAwN0UwQjM2MTIyRjZDMTAwRjRGMzY2REZBMDUwMDgwODhENworOjEwNjU0MDAwMDAyMDhDMDY0NDBDQzA4MTI1MEEwMDAzQjIwODIzN0M3RAorOjEwNjU1MDAwMEMwMzg1MzgwNTA1NDI2NDUwNTkyQ0Q2N0U2RDRBMDVEQQorOjEwNjU2MDAwMDAyMDg4MDAzMDhDRDJBMEE3OThCQzg4OTg3MEQxMEZFQQorOjEwNjU3MDAwRDJBMEJDNzk5OTcwRDEwRkQyMzAyQkFEMDhDMEYxQzAzOAorOjEwNjU4MDAwNTAwQkY1MzgwNTA1NDJDQjU1MkNENjdFMDgzRjE0QzE3QgorOjEwNjU5MDAwNjAwRjY2MEMwNjQ2MzZEMzBGNkQ2QTA1MDAyMDg4MDAzMgorOjEwNjVBMDAwQjA4QzgyNzA2M0ZGMkQwMEMwNTAwM0Y1Mzg3NUUwODAxOQorOjEwNjVCMDAwNjNGRjdBMDBDMDYwMDI4NjM4NzZFMEEwNjNGRjlBMDAyRAorOjEwNjVDMDAwQzA1MDAzRjUzODc1RTBDMzYzRkZCRDAwNkMxMDA0RDZGRQorOjEwNjVEMDAwMjA2ODUyMEY2OTUzMjREQTIwREIzMERDNDA1ODAwRjA4OQorOjEwNjVFMDAwRDJBMEQxMEZEQTIwREIzMERDNDA1ODAwRUQ5QTI0MjQxMQorOjEwNjVGMDAwMjQwRUMwMjEyMjY0MEZDMDIwRDEwRjAwQjgzQkIwNEM0NAorOjEwNjYwMDAwMkEyQzc0ODkyNDJEMjAwRTJFMjAwRkE0RERCMUVFMkUwRAorOjEwNjYxMDAwMjQwRkIwREQyRDI0MEUyODkwMDcyRDkwMDNBNDg4QjAwMAorOjEwNjYyMDAwODhCMUREMkQ5NDAzMjg5NDA3NUJGRkEwNjk1MTFEQzAzQworOjEwNjYzMDAwRTA4MjI0MkE2MDBGMThEOTY2MkEyNDAzMjk2MDBFOEY2RAorOjEwNjY0MDAwMjAyOTI0MDcwOEZGMDI5RjIwOUU2NEQxMEZDMDIwRDE3QgorOjEwNjY1MDAwMEYwMDAwMDA2QzEwMDQ5NDIzMTlEOTVFQzBCMzA4M0FFRgorOjEwNjY2MDAwMTEwQkFBMDI5OTIwMTlEOEQyOUEyMTE2RDhEMEMwNTA1RAorOjEwNjY3MDAwMjg5MjlEMjU2NEEyMjg4QzE4Mjg5NjlERDEwRjAwMDA5MQorOjEwNjY4MDAwNkMxMDA0MjgyMDY2QzAzODIzMjQwNkI3ODgyODI0NjZBNgorOjEwNjY5MDAwRDEwRjAwMDA2QzEwMDYwMzVBMEMwRDM2MTEwRDVDMTE2MQorOjEwNjZBMDAwRDgyMDhCMjI4MjIxMENCQjBDMDY1NTBGOUI4MjAyMzIxNAorOjEwNjZCMDAwMEI5MjgxMTNEOEJDRDkyMEEzOEY2NDUwNTMxQ0Q4QjgzNworOjEwNjZDMDAwQzBENzFCRDhCOUEyNTZDMEUxMjkwQTAwMDRFOTM4MDk4RAorOjEwNjZEMDAwMDk0Mjc2RjM0QTA0NDMwMkM5OUUyQkM2N0U2REFBMDU4MQorOjEwNjZFMDAwMDAyMDg4MDAzMDhDODk4MUE5NTkwOUZBMEM2NEEwNzlBRQorOjEwNjZGMDAwOTk4MThBODJDOEFERDI5MEQxMEZDMDYwMDJFNjM4NzYwNworOjEwNjcwMDAwRDBEQTYzRkZENEMwMjBCQzg5OTk4MTk5ODA5MjgyRDE2QworOjEwNjcxMDAwMEY3RjIzMDQyOTJERjg5OTgxNjVCRkQ5NjNGRkU1MDAxOAorOjEwNjcyMDAwMDI4RjBDQTNGRjBGMzMxMjkzMTAwM0FBMENEMzQwQ0I5QworOjEwNjczMDAwOUUyQkM2N0U4NjEwNkQ2QTA1MDAyMDg4MDAzMDhDQkNCQQorOjEwNjc0MDAwODIyOTBBMDAwNEYzMDgyNDBBMDEwMzQ5MzgwOTA5NDI4RQorOjEwNjc1MDAwQ0E5ODJCQzY3RTZEQUEwNTAwMjA4ODAwMzA4QzBGNTk4MAorOjEwNjc2MDAwMENBOTg5QkM5OTk5ODE2M0ZGODdCQzg5OTk4MTYzRkZEMgorOjEwNjc3MDAwODBDMDYwMDJFNjM4NzZEMEJBNjNGRkI0QzA3MDAyNDdDQQorOjEwNjc4MDAwMzg3N0QwRDA2M0ZGQ0EwMDZDMTAwNDE0RDg5NUMxNTI3QQorOjEwNjc5MDAwQTQyNENBMzAyODIyMUQ3MzgxMUIyOTIxMDJDRDk1MkFFOQorOjEwNjdBMDAwMzAwMDc1QTkxMkRBMjAwMzNCMDIyQzMwMDcyRDBBMDJCMworOjEwNjdCMDAwNTgwMUMyNjUzRkRERDEwRjJCMzAwNzAzQkIwQkRBQjBBOAorOjEwNjdDMDAwNzRCMzAyMkFCREY4RDNBMDYzRkZDNjAwNkMxMDA0Mjk3RAorOjEwNjdEMDAwMjAwNkMwNzA2RTk3NDEyOTIxMDJDMDhGMkEyMDE0QzA2NAorOjEwNjdFMDAwQjYyQjI0MDYwNkFBMDIyQTI0MTQ3OTgwMDIyNzI1MDI0MQorOjEwNjdGMDAwMkEyMjFFMkMyMjFEN0FDMTBFQzhBQkRBMjBEQjMwMkNENworOjEwNjgwMDAwMEEwMDAzM0QwMjVCRjgxNDY0NTA3NTJEMjEwMjBEMEQ0MgorOjEwNjgxMDAwNENDOUQzQzAyMEQxMEYwMDAwMkU5Q0ZCNjRFMDgyMkYxNgorOjEwNjgyMDAwMjEwMjBGMEY0QzY1RjA5MTFBRDg2MjFDRDg2MDI5QTI4MgorOjEwNjgzMDAwOUVDMDhBNzk4QjVEMkJDMjI2NjhCMDA0OEQyMDdCRDlERgorOjEwNjg0MDAwNTIyOUEyOURDMEYzNjQ5MDRBOTc5MDFERDg3MzJFMjFCRgorOjEwNjg1MDAwMDQ5RDk2MDhFRTExMEZFRTAyOUU5NzlFOTExOEQ4NkYzOAorOjEwNjg2MDAwQzBFNTI3QzRBMjJFMjQwNjJCQTI5RDJGMjEwMjJCQkNGQgorOjEwNjg3MDAwMzAwOEZGMDIyRjI1MDIyQkE2OURDMDIwRDEwRjAwMDA1QgorOjEwNjg4MDAwMDAyRjMwMDA2OEY5MzhEQTIwREIzMERDNDA1ODAwNDQ1MworOjEwNjg5MDAwNjNGRjc3MDAwMjJBMDIyQjBBMDY1ODAwRDMyMjBBMDA1RgorOjEwNjhBMDAwRDEwRjY1NTAxMDI4MzAwMDY4ODkyNDAyMkEwMjAzM0I2QQorOjEwNjhCMDAwMDJEQzQwNTgwMDNCQzAyMEQxMEZEMjcwRDEwRjAwMDA0NQorOjEwNjhDMDAwMkEyQzc0MDMzQjAyMDQ0QzAyNUJGRUY4NjNGRjNCMDA3RQorOjEwNjhEMDAwREIzMERDNDAyQTJDNzQ1QkZFRjVDMDIwRDEwRjAwMDBCOQorOjEwNjhFMDAwNkMxMDA0QzgzRjg5MjY4ODI5QTM5OTk5MjYwOTg4MEMyOQorOjEwNjhGMDAwMDgwODQ4MjgyNTI1Q0M1MkMwMjBEMTBGREI0MDJBMkM3RgorOjEwNjkwMDAwNzQ1QkY5M0REMkEwRDEwRjZDMTAwNEQ4MjBENzMwODIyRgorOjEwNjkxMDAwMjIwRDQ1MTEwNTIyMEM5MjgyNjQyMDc0MDc0MjBCMTM0QworOjEwNjkyMDAwRDgyMUQ0MjBBMzgzNzMyMzAyMjQyREY4ODU4MDc0NTFBOQorOjEwNjkzMDAwNENCQzgyQzA5MDZEMDgxNjAwNDA4ODAwNzA4Qzc3Mzk3RQorOjEwNjk0MDAwMDNENzIwQzA5MTg2ODA3NDM5MDFENDIwNzQ2MTAyNjMxQQorOjEwNjk1MDAwRkZFMkNBOThDMDk3QzA0MTFCRDhBMEMwQTAwQjhCMEMwNworOjEwNjk2MDAwMEI0QTM4MEEwQTQyQzlBQTFERDgwRTFDRDgwRjJDRDZDOQorOjEwNjk3MDAwN0VDMTQwRDMwRjZENEEwNTAwMjA4ODAwMzA4Qzk3ODA3RgorOjEwNjk4MDAwRDI3MEQxMEZCQzhGQzBFMDBGNEUzODdFOTBFMjYzRkYxMworOjEwNjk5MDAwRDZCQzgyOTI4MTkyODBDMDIwOTI4MkQxMEYwMDAwMDBFQQorOjEwNjlBMDAwNkMxMDA2QzBENzFDRDdGRTFCRDgwMDBENDkxMUQ3MjA4QworOjEwNjlCMDAwMkUyMjFGMjgyMjFEMEU0RTBCRDI4MDA3OEEwQzJFNzYwNworOjEwNjlDMDAwMUYyQUFDODBDODM0NkZBRTAyNjAwMENCMkYwQTgwMUEzOQorOjEwNjlEMDAwRDgwNEEyOUVBQTdBN0VBMzNGQzkzRkMwRTFDMDUwMDI1QworOjEwNjlFMDAwRTUzODA1MDU0MkNBNTUyQkM2N0VEQjIwRDMwRjZENEExQworOjEwNjlGMDAwMDUwMDMwODgwMEIwOEMyRTcyMURBRTlFMEVBNTBDNjQ3MgorOjEwNkEwMDAwNTA4NkQyODAyRTc2MURDMDkxMjk4NDAzRDEwRkMwNTBBQworOjEwNkExMDAwMDNFNTM4NzVEMEQzNjNGRkNEMTVEN0YxMDI3RTBDQTUwMQorOjEwNkEyMDAwRUU2NDMwNTFDMEExMjUwQTAwMDJBNTM4MDMzQTAyMDVFMAorOjEwNkEzMDAwMDU0MjY0NTA5MjJCQzY3RTBFMzUxMjk1MTAyNTVDMTBDRgorOjEwNkE0MDAwMDU0NTM2RDMwRjZENUEwNTAwQTA4ODAwMjA4Q0MwQTFFMworOjEwNkE1MDAwQTNFMkMwNTAyM0ZBODAwMzczMEMwM0E1MzhBRjczMDU3QgorOjEwNkE2MDAwMDU0MjY0NTA3MjJCQzY3RTg1MTAwNTQ1MEM2RDVBMDU5MworOjEwNkE3MDAwMDAyMDg4MDAzMDhDRDI4MEMwQTEwRTlCMENBQjdCQUY3NQorOjEwNkE4MDAwQkIyQjc2MUQyQTg0MDNEMTBGRDI4MEMwQzFBRjdEMkREMAorOjEwNkE5MDAwNzYxRDJDODQwM0QxMEYwMEQyMzAyRThEMDhDMEYxQzA5QQorOjEwNkFBMDAwNTAwRUY1MzgwNTA1NDJDQjU5MkJDNjdFMEEzRjE0QzE1RQorOjEwNkFCMDAwNjAwRjY2MEMwNjQ2MzZEMzBGNkQ2QTA1MDAyMDg4MDAwRAorOjEwNkFDMDAwRTA4QzIyNzIxRDYzRkYwM0MwNjFDMDUwMDM2NTM4NzVGRQorOjEwNkFEMDAwRDgwMjYzRkY2MjYzRkY1Q0MwNTAwMkE1Mzg3NUQwODc5RgorOjEwNkFFMDAwNjNGRjgxMDBDMDYwMDNGNjM4NzZEMEJGNjNGRkI5MDA1MgorOjEwNkFGMDAwNkMxMDA0MkEyMDE1MjkyMDE2MTREN0FGMEE5OTBDQ0I0NAorOjEwNkIwMDAwOUQyRTIwMEIwNEVEMDkyQkQxMUM4RjI4MDlCQzM2QUMxRgorOjEwNkIxMDAwQUEwQ0JCMEMyQkQ1MUMwQTBBNDcyQTI0MTVDQUFGOEIxQQorOjEwNkIyMDAwNDM4OTQyQjBBODAwOTEwNDAwODgxQUE4RkYwRkJCMDI1NQorOjEwNkIzMDAwOUIyNzhGMjYwRkI4MEM3ODNCMUFDMDIwRDEwRjAwMDA3RQorOjEwNkI0MDAwMjkyMTAyQzBBMjBBOTkwMjI5MjUwMkMwMjFEMTBGMDBFMQorOjEwNkI1MDAwOEIyNzYzRkZEQzJCRDExQzBDQUEwQzBBMEE0NzJBMjRDMgorOjEwNkI2MDAwMTVBQ0JCMkJENTFDQzlBRThCNDM4QzI4OEY0MkIwQUQ2NgorOjEwNkI3MDAwMDBGMTA0MDBERDFBQURDQzBDQkIwMjlCMjdEQTIwQjc3NAorOjEwNkI4MDAwRUI1ODAwMTlDMDIxRDEwRjlGMjc2M0ZGRUYwMDAwMDBEMQorOjEwNkI5MDAwNkMxMDA0MjgyMDNDNjQzMDQ3MDUzMDYwMDAwNzNFMDEzQgorOjEwNkJBMDAwMDUzRUIxNTYwNzY1MzkwNTQ5MjhDNzdGQTkzMzAzMDY1NQorOjEwNkJCMDAwNDEwNzY2MDNCMTY2MDYwNjQxQTYzMzdFODcxRTIyMjE4MQorOjEwNkJDMDAwMjUyOTFBRkM3MzJCMTUwMjM4MEMwOTgxNjAwMDA2M0UzQQorOjEwNkJEMDAwMDEwMjNFQjEyNDA2NDIzOTAzMjIwQUQxMEZEMjMwRDEzQworOjEwNkJFMDAwMEZDMDUxNjNGRkMwMDAwMDZDMTAwNDI3MjIxRUMwODAzQworOjEwNkJGMDAwMDhFNDMxMURENzZGMDAwMjAwMkNEMjgyMUJENzZGMDAzMgorOjEwNkMwMDAwMzEwNEMwNjEwMDY2MUEyQkIxMDIwQzZDMDIyQ0Q2ODJEMgorOjEwNkMxMDAwMEJFNDMxMTlEN0YyMEMzQTExQUE5MzI4MzI4Mjk3ODBFQgorOjEwNkMyMDAwMjUzMjgyMjQzMjg0QjQ1NTI1MzY4Mjc1NDEwQTI5MjFDMQorOjEwNkMzMDAwMDIwOTY5MDIyOTI1MDJEMTBGMkEyMTAyMkIzMjgzMEE3NworOjEwNkM0MDAwNkEwMjJCMzY4MjJBMjUwMkQxMEYwMDAwNkMxMDA0MTkyQgorOjEwNkM1MDAwRDc2MzI3MjIxRUMwODAwOTc3MDIwOEU0MzExREQ3NTQ2QworOjEwNkM2MDAwMDAwMjAwMkNEMjgyMUJENzU0MDAzMTA0QzA2MTAwNjZBMAorOjEwNkM3MDAwMUEyQkIxMDIwQzZDMDIyQ0Q2ODIwQkU0MzExOUQ3RDczNworOjEwNkM4MDAwMEMzQTExQUE5MzI4MzI4Mjk3ODAyNTMyODIyNDMyODRDQQorOjEwNkM5MDAwQjQ1NTI1MzY4Mjc1NDEwQjJBMjEwMjBBNkEwMjJBMjUzQgorOjEwNkNBMDAwMDJEMTBGMDAyQjIxMDIyQzMyODMwQjZCMDIyQzM2ODI3NworOjEwNkNCMDAwMkIyNTAyRDEwRjAwMDAwMDZDMTAwNDFCRDczRDBDMkFCRAorOjEwNkNDMDAwMTFBQkFBMjlBMjg2QjQzODc5OEIyMjFCRDczQTE5RDdERgorOjEwNkNEMDAwNjEwQjJCMEEyQkIyQTMwOTI5MDg2OEIwMDI3NEI5MEQwNQorOjEwNkNFMDAwMjk5RDAxMjk5MDFGNkU5MjA4MjJBMjg1RDEwRkMwMjBGNAorOjEwNkNGMDAwRDEwRkM4OTJDMDIwRDEwRkRBMjA1QkVGMzVDMDIwRDE3MAorOjEwNkQwMDAwMEYwMDAwMDA2QzEwMDQxNEQ3MkEyODQyOUUxOUQ3MjdDMAorOjEwNkQxMDAwNkY4ODAyNjAwMEJBMjk5MjI2Njg5MDA3OEEyMDA5QUEyMworOjEwNkQyMDAwMEM2NUEwQUMyQTQyOURDMERDNjRBMEE0MkIyMDBDMTlFOQorOjEwNkQzMDAwRDcyMTBDQkMxMUE0Q0MyRUMyODYwOUI5MEE3RUQzMDI3RAorOjEwNkQ0MDAwNjAwMDlBMjk5MkEzNjg5MDA3OEQyMDA5REQwQzY1RDAxOAorOjEwNkQ1MDAwOEMyNUMyODU2NDUwODYyRDIxMDRDMDMwNkVEODBEMkM0MAorOjEwNkQ2MDAwMjA2NkI4Q0MwQzBDNDcyQzI0NjY2NUMwN0IxQ0Q3OUNENQorOjEwNkQ3MDAwMThENzI4MUFENzFFMTlENzJGMURENzI0QzBFNDlFNTEyMworOjEwNkQ4MDAwOUQ1MDhGMjA5MzU3OTM1NTk5NTM5QTU2OUE1NDA4RkZDNAorOjEwNkQ5MDAwMDIxQUQ3M0E5RjUyODgyNjlGNUE5RTU5OUQ1ODkzNUU1MQorOjEwNkRBMDAwOUM1RDkzNUM5QTVCMDgwODQ4MDU4ODExOTg1RkMwRDg4MQorOjEwNkRCMDAwMUZENzA4MENCOTExQTQ5OTI4OTI4NUFGQkYyM0Y0Q0YyRgorOjEwNkRDMDAwMjg4QzQwMjg5Njg1OEUyNjJEMjQwNjlFMjlDMDIwRDEwOQorOjEwNkREMDAwMEZDQTMzREEyMEMwQjY1QkZGODRDNzJGRDEwRkM5M0E4MAorOjEwNkRFMDAwREEyMDVCRkY4MUM3MkZEMTBGREJEMDVCRkUxQTIzMjQ5MworOjEwNkRGMDAwNjYyQjIwMEM2M0ZGNzUwMEM3MkZEMTBGQzcyRkQxMEY1MworOjEwNkUwMDAwNkMxMDA0Qzg1QjI5MjAwNjY4OTQxQzY4OTYwN0MwMjA5MworOjEwNkUxMDAwRDEwRkMwMjBEMTBGREEyMERCMzBEQzQwREQ1MDJFMEE0QworOjEwNkUyMDAwMDA1QkZFNkFEMkEwRDEwRjJFMjAwQzE4RDZFMTBDRUYyOQorOjEwNkUzMDAwMTFBOEZGMjlGMjg2QzA4ODc5OEI3NTFBRDZERTBBRUE3NgorOjEwNkU0MDAwMEEyQUEyQTM2OEEwMDQ4QjIwN0FCOTY0MjNGMjg1NjQ3RAorOjEwNkU1MDAwMzA1RTFDRDZFODJBMEE4MDJEMjA2ODI5MjA2NzI4MjE2OAorOjEwNkU2MDAwMDQwQjk5MTEwNDg4MTEwOTg4MDIwOEREMDJDMDk0MjhENgorOjEwNkU3MDAwNEExMDA4REQwMjE4RDZFMDk5MzE5ODMwOEIyQjlBMzdFQQorOjEwNkU4MDAwOUQzNDBDQkIwMjlCMzJDMEMwOUMzNTlDMzYyQTJDNzRBRQorOjEwNkU5MDAwREI0MEMwRDMxOEQ2Q0YyOUYyODVBOEVFMjk5QzIwMkM0MAorOjEwNkVBMDAwRTRDRjI5RjY4NTJEMjQwNkRENDA1QkZERkFEMkEwRDE4MgorOjEwNkVCMDAwMEZEQTIwREJFMDVCRkY0Q0MwMjBEMTBGNkMxMDBBRDY0QworOjEwNkVDMDAwMzAyQTIwMDY5NDExMjhBQ0Y4NjU4Mzg3MkIyMTIyQzAzNAorOjEwNkVEMDAwRjIyQTIxMjQ2NTUwMDgyQUFDMDEwQTBBNEYyQTI1MjRFNworOjEwNkVFMDAwN0FCQjAyNjAwMzdGMkMyMTAyMEMwQzRDNjVDMzE5MkU2NworOjEwNkVGMDAwMjIxNThEMzJDMDkxMEVERDBDNjVEMzkwODgzODFFRDZEOAorOjEwNkYwMDAwQUM2NDgzNkI4QzM3QzBCOEMwOTYwQ0I5Mzk5OTE0QjQ5MworOjEwNkYxMDAwOUE5QTEyMEQ5OTExOTkxMzhGNjcxOEQ2QTdDOUZCMjg1MQorOjEwNkYyMDAwODAyMTdGODMxNjhCMTQyQzIyMDAyQTIwMEM1QkZGNjJBOQorOjEwNkYzMDAwRDRBMDY0QTNBODhGNjc2MDAwMjgwMDAwMkIyMDBDODlEMAorOjEwNkY0MDAwMTIwQ0JBMTFBRUFBMkNBMjg2MURENjlBN0M5QjNFMERCRAorOjEwNkY1MDAwQkQwQTJERDJBMzY4RDAwNDg4MjA3RDg5MzAyNEEyODU2MworOjEwNkY2MDAwNjQ0MzY0MjcyMTJFMDdGNzM2MDdGOTBDNkY5RDAxRDc3QworOjEwNkY3MDAwRjBEQTIwREI3MEMxQzQyRDIxMUY1QkZGMDU4OTI2ODg1NAorOjEwNkY4MDAwMjdEREEwMDk4ODBDN0E4QjE3OUExMDYwMDAwNkMwNDA5NAorOjEwNkY5MDAwNjNGRkNDMDAwMERBMjA4QjEwNUJGRUQ1OEQxMDY1QTI1QworOjEwNkZBMDAwNjdDMEUwOUU0ODhDNjQ5QzQ5OEI2NThBNjY5QjRBOUFDMAorOjEwNkZCMDAwNEI5NzQ1OEY2NzdGNzMwMjYwMDEyMENENTI5RDEwREE5OQorOjEwNkZDMDAwMjBEQjMwMkMxMjAxNUJGRTc2OEQxMEMwNTFENkEwOEZENQorOjEwNkZEMDAwQTdDMEMwOEE2ODk3NEQ5QTRDODg2OTg5NkE5ODRFOTk2QgorOjEwNkZFMDAwNEY4RTZBOEE2OUFFN0U3N0VCMDFCMUFBOUU2QTlBNjk3MgorOjEwNkZGMDAwOEI2MEMwQTAwQjhFMTQ3N0I3MDFDMEExQzA5MUMwODQ3NAorOjEwNzAwMDAwOTMxNTlEMTc5NTE2QzBEMDI1MjAzQ0MwMzAwODU4MDExNworOjEwNzAxMDAwMDg5MzM4QzA4MjA4MzMxMDA4NUIwMTA1MzU0MDBCOUQ4QQorOjEwNzAyMDAwMzgwN0REMTAwQkFCMTAwRTE5NDAyQTIxMUYwNzk5MTBFRAorOjEwNzAzMDAwMDNERDAyMERCQjAyMDU1MzEwMDkzMzAyMEE1NTExMjk2NQorOjEwNzA0MDAwMjEyNTBBMkExNDA5MjkxNDA0OTkxMTBBOTkwMjA5MzNERAorOjEwNzA1MDAwMDI4QTJCMjkyMTA0MEJBQTAyMUJENkUyMDg5OTExMDlFNgorOjEwNzA2MDAwNTUwMjA4NTUwMjBCQUEwMjlBNDA4OTIwODgxNDA4OTlGMworOjEwNzA3MDAwMTEwOTg4MDIxOUQ2NjMxREQ2REMwOTg4MDI5ODQxOEI1NAorOjEwNzA4MDAwMkE5MzQ2OTU0NzgzMTUwREJCMDI4NTE2OEQxNzlCNDRBMQorOjEwNzA5MDAwOEE2NTg5NjZBQUNBQTk3Qzc3Q0IwMUIxQUEwN0ZCMENDRAorOjEwNzBBMDAwOUM2NjlBNjU4ODI2OEUyOUFEODc5NzI2MDdFRTBDMEU3QQorOjEwNzBCMDAwMEU0ODJFMjUyNTlCNjcyQjIwMEM4NzEzMUVENjNEMENEMgorOjEwNzBDMDAwQjkxMUFFOTkyODkyODVBNzg4Mjg5Njg1MTdENjQxQzAxMAorOjEwNzBEMDAwOTBBN0JCMjlCNENGODcxODYzRkUzQzAwOEM2MEMwRTA0QQorOjEwNzBFMDAwQzA5MUMwRjBDMDM0QzBCODJBMjEwNDI4MjAzQzA4QUFBRQorOjEwNzBGMDAwMTEwQjhCMDEwMzgzMDEwMzlGMzgwQjlCMzlDMDMyMDhBRQorOjEwNzEwMDAwRkYxMDAzODgwMTA4OUUzODBDODgxNDA3RUUxMDBGRUU1QworOjEwNzExMDAwMDIwMzg4MDEwODk4MzkwNUJGMTAyOTIxMUYwQUJCMTFGNQorOjEwNzEyMDAwMDc4ODEwMDhGRjAyMEJBQTAyMThENjM1MDkyOTE0MDM5NAorOjEwNzEzMDAwQUEwMjJCMjEyNTgzMjAwQjJCMTQwNEJCMTEwODMzMTEyOQorOjEwNzE0MDAwMEZCQjAyMEI5OTAyOEIxNDhGMkEwQjMzMDIwODMzMDJGOAorOjEwNzE1MDAwOEIyQjY0NzA4Njg4Njg5NzREOTg0Qzg3Njk4ODZBOTNGMgorOjEwNzE2MDAwNDE5OTQ2OTc0RTk4NEZDMDcwNzdDNzAxQzA3MTlBNDdCMgorOjEwNzE3MDAwMThENjlFMEI3QzEwMENFQzAyMDhGODAyOTg0NDE4RDYyNgorOjEwNzE4MDAwOUIwQ0JDMDIwOENDMDI5QzQwMkEyMDBDMjk1Q0ZFQzA0RgorOjEwNzE5MDAwODAxRkQ2MDcxQ0Q2MEYwQ0FFMTEyQjIxMjRBQ0FBQUYzMgorOjEwNzFBMDAwRUVCMEJCOEYxMzJDRTI4NTI4QTRDRkFGQ0MyQ0U2ODVBNAorOjEwNzFCMDAwMkEyMjE1MkIyNTI0QjFBQTJBMjYxNTY0OTBEQkM5RDJEMAorOjEwNzFDMDAwOEYyNjJFMjIwOTBERkYwODJGMjYwNjBGRUUwQzBFMEUxRAorOjEwNzFEMDAwNDgyRTI1MjU2NTUwRTRDMDIwRDEwRjAwQzA3MDkzNDE5MgorOjEwNzFFMDAwOUY0NDk5NDY5QTQ3NzdDNzBBMUNENUYzMkNDMDIyQzAwMgorOjEwNzFGMDAwODEwQzg3MzgxQ0Q2N0YwQjc4MTAwOEU4MDIwOEI4MDI4QgorOjEwNzIwMDAwMEM4ODAyOTg0MDYzRkY4MDAwQ0M1N0RBMjBEQjYwOEM0QQorOjEwNzIxMDAwMTE1QkZERTMyOTIxMDI2ODk4MDY2ODk0MDNDMDIwRDEyMAorOjEwNzIyMDAwMEYyQjIyMUVDMEEwMjkyMjFEMkEyNTAyN0I5OTAxQzBGNgorOjEwNzIzMDAwQjA2NEJGRTgxM0Q1REUyQ0IwMDcyOEIwMDBEQTIwMDMxNQorOjEwNzI0MDAwODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNDMQorOjEwNzI1MDAwRkZDQTAwMDA2OEE3NzlEQTIwREIzMERDNDBERDUwNUIzNAorOjEwNzI2MDAwRkVFOEQyQTBEMTBGQzE2REMxOUQyOTI1MkM2MDAwMDQ3QworOjEwNzI3MDAwMjkyNTJDRDY5MDI2MjQ2NzJGMjQ2OERBMjBEQjMwOEMzMQorOjEwNzI4MDAwMTFERDUwMkUwQTgwNUJGRDUxRDJBMEQxMEZDMTY4QzEyMworOjEwNzI5MDAwQTgyQTI1MkM2M0ZGREQwMDAwMDBDOERGOEMyNjhCMjk3RgorOjEwNzJBMDAwQURDQzlDMjYwQ0JCMEMwQjBCNDgyQjI1MjUyQTJDNzQzMworOjEwNzJCMDAwREI2MDJDMTIwMTVCRkQ5NEQyQTBEMTBGMkEyQzc0OEJDMQorOjEwNzJDMDAwMTE1QkY2Q0REMkEwRDEwRkRBMjA1QkZFNDc2M0ZGMzgwOQorOjEwNzJEMDAwMDBEQTIwQzBCMTVCRkU4QjY1QUYyRDYzRkJFRERBMjBEOQorOjEwNzJFMDAwMkIyMDBDNUJGRTVBNjNGRjFGMDAwMDAwMTJENjQyODI2NworOjEwNzJGMDAwMjAwMjgyNTdDODIxNjNGRkZDMTJENjNFMDNFODMwMDQwNworOjEwNzMwMDAwRUUzMDA1QjEzMDkzMjA5NDIxOTUyMjYzRkZGQzAwMDBGQworOjEwNzMxMDAwMTBENjNBOTEwMDkyMDE5MzAyOTQwMzExRDYxMTgyMTA3MworOjEwNzMyMDAwMDFFQTMwQTIxMTAxRjAzMUMwNDAwNEU0MTYwMDAyMDA2RAorOjEwNzMzMDAwMTFENjMzODIxMDIzNEEwMDAzMjIwMjkyMTAxMUQ1RkQ4OAorOjEwNzM0MDAwQzAyMTkyMTAwNEU0MzE4NDAzODMwMjgyMDE4MTAwMDA5MQorOjEwNzM1MDAwRDIzMDAxMjMwMDAwMDAwMDEwRDYyQTkxMDA5MjAxOTM0MAorOjEwNzM2MDAwMDI5NDAzMTFENjAwODIxMDAxRUEzMEEyMTEwMUYxMzExQQorOjEwNzM3MDAwQzA0MDA0RTQxNjAwMDIwMDExRDYyMTgyMTAxM0Q1QTdFNAorOjEwNzM4MDAwMDMyMjAyOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDAwQgorOjEwNzM5MDAwMDBEMzMwMDEzMzAwMDAwMDEwRDYxQjkxMDA4MTAxNjUzRAorOjEwNzNBMDAwMTA0OTgxMDI2NTEwNDQ4MTAzQ0YxRjkyMDE5MzAyOTQxQQorOjEwNzNCMDAwMDMxMUQ1RUU4MjEwMDFFQTMwQTIxMTAxRjIzMUMwNDA3MgorOjEwNzNDMDAwMDRFNDE2MDAwMjAwMTFENjBEODIxMDEzRDU4RTAzMjI5QworOjEwNzNEMDAwMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxQzAxMDkxMDNGRAorOjEwNzNFMDAwOTEwMjkxMDE4MTAwMDBENDMwMDE0MzAwMTJENUJEQzA0QgorOjEwNzNGMDAwMzAyODM3NDAyODM3NDQyODM3NDgyODM3NEMyMzNEMDE2OAorOjEwNzQwMDAwNzIzM0VEMDMwMjAwNjNGRkZDMDAwMDAwMTBENUZGOTExMgorOjEwNzQxMDAwMDA5MjAxOTMwMjk0MDMxMUQ1RkQ4MjEwOTIxMDExRDVCMAorOjEwNzQyMDAwQUY4MzEwMDMyMjAyOTIxMDExRDVGQTEyRDVDMTkyMTAyNworOjEwNzQzMDAwQzA0MDA0RTQxNjAwMDIwMDExRDVGMTgyMTAxM0Q1QTg1MworOjEwNzQ0MDAwMDMyMjAyOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDA0QQorOjEwNzQ1MDAwMDBENTMwMDE1MzAwMDAwMDZDMTAwMjZFMzIyRkQ2MjA5MAorOjEwNzQ2MDAwMDU2RjA0MDQzRjA0NzQ1QjJBMDU0NDBDMDA0MTA0MDBDQQorOjEwNzQ3MDAwMzMxQTIyMEEwMDZENDkwRDczNjMwNDAzNjYwQ0IxMjJBRQorOjEwNzQ4MDAwMEYyMjExMDMxMzE0NzM2MzAyMjIyQzAxRDEwRkM4M0I4NgorOjEwNzQ5MDAwRDEwRjAwMDA3MzYzMENDMDIxRDEwRjAwMDAwMDAwMDA2OQorOjEwNzRBMDAwNDQ0OTU2MzBDMDIwRDEwRjZDMTAwMjAwNDAwNDZCNEM5MAorOjEwNzRCMDAwMDcwMzIzMTgwMjAyMTlEMTBGMDIwMzE5QzAyMEQxMEZBQworOjEwNzRDMDAwNkMxMDAyMDJFQTMwRDEwRjZDMTAwMkNDMjUwM0YwMzFBRgorOjEwNzREMDAwNjAwMDBGMDA2RjIyMDUwM0YxMzE2MDAwMDU2RjIzMDU4NgorOjEwNzRFMDAwMDNGMjMxMDAwMjAwRDEwRjZDMTAwMkNDMjUwMkYwMzAwMworOjEwNzRGMDAwRDEwRjAwMDA2RjIyMDQwMkYxMzBEMTBGNkYyMzA0MDI3QworOjEwNzUwMDAwRjIzMEQxMEZDMDIwRDEwRjZDMTAwMjIyMEEyMDIzMEFDMgorOjEwNzUxMDAwMDA2RDI4MEUyODM3NDAyODM3NDQyODM3NDgyODM3NEMzNAorOjEwNzUyMDAwMjMzRDAxMDMwMjAwRDEwRjZDMTAwMjAyRTQzMUQxMEZBMAorOjEwNzUzMDAwMEEwMDAwMDA0MzY4NjU2QzczNjk2RjIwNDY1NzIwNDQ1OQorOjEwNzU0MDAwNDU0MjU1NDczRDMwMjAyODQyNzU2OTZDNzQyMDU3NjU4NworOjEwNzU1MDAwNjQyMDRGNjM3NDIwMjAzODIwMzEzNTNBMzUzMDNBMzU3NQorOjEwNzU2MDAwMzAyMDUwNDQ1NDIwMzIzMDMwMzgyMDZGNkUyMDYzNkMwRAorOjEwNzU3MDAwNjU2RjcwNjE3NDcyNjEzQTJGNjg2RjZENjUyRjY2NjUxMworOjEwNzU4MDAwNkM2OTc4MkY3NzJGNjY3NzVGMzcyRTMwMjkyQzIwNTYzRAorOjEwNzU5MDAwNjU3MjczNjk2RjZFMjA1NDMzNzg3ODIwMzAzMDM3MkVERgorOjEwNzVBMDAwMzAzMTJFMzAzMDIwMkQyMDMxMzAzMDM3MzAzMTMwMzBGNgorOjA4NzVCMDAwMTAwNzAxMDA2RjRFRjhCQjRCCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvdGVodXRpL2JkeC5iaW4uaWhleCBiL2Zpcm13YXJlL3RlaHV0aS9iZHguYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyOWU0YwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3RlaHV0aS9iZHguYmluLmloZXgKQEAgLTAsMCArMSwyNjc4IEBACis6MTAwMDAwMDAwMjAwMEYwMDAwODA3MTQwMkQwMDAwMDAwMDAwMDBDMEMxCis6MTAwMDEwMDAwMjAwMEYwMDAxODA3MTAwMkQwMDAwMDAwMDAwODBDMDcwCis6MTAwMDIwMDAwMjAwMEYwMDAyODA3MTAwMkQwMDAwMDAwMDAwMDBDMURFCis6MTAwMDMwMDAwMjAwMEYwMDAzODA3MTAwMkQwMDAwMDAwMDAwODBDMTRECis6MTAwMDQwMDAwMjAwMEYwMDA0ODA3MTAwMkQwMDAwMDAwMDAwMDBDMkJCCis6MTAwMDUwMDAwMjAwMEYwMDA1ODA3MTAwMkQwMDAwMDAwMDAwODBDMjJBCis6MTAwMDYwMDAwMjAwMEYwMDA2ODA3MTAwMkQwMDAwMDAwMDAwMDBDMzk4Cis6MTAwMDcwMDAwMjAwMEYwMDA3ODA3MTAwMkQwMDAwMDAwMDAwODBDMzA3Cis6MTAwMDgwMDAwMjAwMEYwMDA4ODA3MTAwMkQwMDAwMDAwMDAwMDBDNDc1Cis6MTAwMDkwMDAwMjAwMEYwMDA5ODA3MTAwMkQwMDAwMDAwMDAwODBDNEU0Cis6MTAwMEEwMDAwMjAwMEYwMDBBODA3MTAwMkQwMDAwMDAwMDAwMDBDNTUyCis6MTAwMEIwMDAwMjAwMEYwMDBCODA3MTAwMkQwMDAwMDAwMDAwODBDNUMxCis6MTAwMEMwMDAwMjAwMEYwMDBDODA3MTAwMkQwMDAwMDAwMDAwMDBDNjJGCis6MTAwMEQwMDAwMjAwMEYwMDBEODA3MTAwMkQwMDAwMDAwMDAwODBDNjlFCis6MTAwMEUwMDAwMjAwMEYwMDBFODA3MTAwMkQwMDAwMDAwMDAwMDBDNzBDCis6MTAwMEYwMDAwMjAwMEYwMDBGODA3MTAwMkQwMDAwMDAwMDAwODBDNzdCCis6MTAwMTAwMDAwMjAwMEYwMDEwODA3MTAwMkQwMDAwMDAwMDAwMDBDOEU4Cis6MTAwMTEwMDAwMjAwMEYwMDExODA3MTAwMkQwMDAwMDAwMDAwODBDODU3Cis6MTAwMTIwMDAwMjAwMEYwMDEyODA3MTAwMkQwMDAwMDAwMDAwMDBDOUM1Cis6MTAwMTMwMDAwMjAwMEYwMDEzODA3MTAwMkQwMDAwMDAwMDAwODBDOTM0Cis6MTAwMTQwMDAwMjAwMEYwMDE0ODA3MTAwMkQwMDAwMDAwMDAwMDBDQUEyCis6MTAwMTUwMDAwMjAwMEYwMDE1ODA3MTAwMkQwMDAwMDAwMDAwODBDQTExCis6MTAwMTYwMDAwMjAwMEYwMDE2ODA3MTAwMkQwMDAwMDAwMDAwMDBDQjdGCis6MTAwMTcwMDAwMjAwMEYwMDE3ODA3MTAwMkQwMDAwMDAwMDAwODBDQkVFCis6MTAwMTgwMDAwMjAwMEYwMDE4ODA3MTAwMkQwMDAwMDAwMDAwMDBDQzVDCis6MTAwMTkwMDAwMjAwMEYwMDE5ODA3MTAwMkQwMDAwMDAwMDAwODBDQ0NCCis6MTAwMUEwMDAwMjAwMEYwMDFBODA3MTAwMkQwMDAwMDAwMDAwMDBDRDM5Cis6MTAwMUIwMDAwMjAwMEYwMDFCODA3MTAwMkQwMDAwMDAwMDAwODBDREE4Cis6MTAwMUMwMDAwMjAwMEYwMDFDODA3MTAwMkQwMDAwMDAwMDAwMDBDRTE2Cis6MTAwMUQwMDAwMjAwMEYwMDFEODA3MTAwMkQwMDAwMDAwMDAwODBDRTg1Cis6MTAwMUUwMDAwMjAwMEYwMDFFODA3MTAwMkQwMDAwMDAwMDAwMDBDRkYzCis6MTAwMUYwMDAwMjAwMEYwMDFGODA3MTAwMkQwMDAwMDAwMDAwODBDRjYyCis6MTAwMjAwMDAwMjAwMEYwMDIwODA3MTAwMkQwMDAwMDAwMDAwMDBEMENGCis6MTAwMjEwMDAwMjAwMEYwMDIxODA3MTAwMkQwMDAwMDAwMDAwODBEMDNFCis6MTAwMjIwMDAwMjAwMEYwMDIyODA3MTAwMkQwMDAwMDAwMDAwMDBEMUFDCis6MTAwMjMwMDAwMjAwMEYwMDIzODA3MTAwMkQwMDAwMDAwMDAwODBEMTFCCis6MTAwMjQwMDAwMjAwMEYwMDI0ODA3MTAwMkQwMDAwMDAwMDAwMDBEMjg5Cis6MTAwMjUwMDAwMjAwMEYwMDI1ODA3MTAwMkQwMDAwMDAwMDAwODBEMkY4Cis6MTAwMjYwMDAwMjAwMEYwMDI2ODA3MTAwMkQwMDAwMDAwMDAwMDBEMzY2Cis6MTAwMjcwMDAwMjAwMEYwMDI3ODA3MTAwMkQwMDAwMDAwMDAwODBEM0Q1Cis6MTAwMjgwMDAwMjAwMEYwMDI4ODA3MTAwMkQwMDAwMDAwMDAwMDBENDQzCis6MTAwMjkwMDAwMjAwMEYwMDI5ODA3MTAwMkQwMDAwMDAwMDAwODBENEIyCis6MTAwMkEwMDAwMjAwMEYwMDJBODA3MTAwMkQwMDAwMDAwMDAwMDBENTIwCis6MTAwMkIwMDAwMjAwMEYwMDJCODA3MTAwMkQwMDAwMDAwMDAwODBENThGCis6MTAwMkMwMDAwMjAwMEYwMDJDODA3MTAwMkQwMDAwMDAwMDAwMDBENkZECis6MTAwMkQwMDAwMjAwMEYwMDJEODA3MTAwMkQwMDAwMDAwMDAwODBENjZDCis6MTAwMkUwMDAwMjAwMEYwMDJFODA3MTAwMkQwMDAwMDAwMDAwMDBEN0RBCis6MTAwMkYwMDAwMjAwMEYwMDJGODA3MTAwMkQwMDAwMDAwMDAwODBENzQ5Cis6MTAwMzAwMDAwMjAwMEYwMDMwODA3MTAwMkQwMDAwMDAwMDAwMDBEOEI2Cis6MTAwMzEwMDAwMjAwMEYwMDMxODA3MTAwMkQwMDAwMDAwMDAwODBEODI1Cis6MTAwMzIwMDAwMjAwMEYwMDMyODA3MTAwMkQwMDAwMDAwMDAwMDBEOTkzCis6MTAwMzMwMDAwMjAwMEYwMDMzODA3MTAwMkQwMDAwMDAwMDAwODBEOTAyCis6MTAwMzQwMDAwMjAwMEYwMDM0ODA3MTAwMkQwMDAwMDAwMDAwMDBEQTcwCis6MTAwMzUwMDAwMjAwMEYwMDM1ODA3MTAwMkQwMDAwMDAwMDAwODBEQURGCis6MTAwMzYwMDAwMjAwMEYwMDM2ODA3MTAwMkQwMDAwMDAwMDAwMDBEQjRECis6MTAwMzcwMDAwMjAwMEYwMDM3ODA3MTAwMkQwMDAwMDAwMDAwODBEQkJDCis6MTAwMzgwMDAwMjAwMEYwMDM4ODA3MTAwN0IwMDAwMDAwMDgwNjBEREZCCis6MTAwMzkwMDAwMjAwMEYwMDM5ODA3MTAwMkQwMDAwMDAwMDAwMDBERDE4Cis6MTAwM0EwMDAwMjAwMEYwMDNBODA3MTAwMkQwMDAwMDAwMDAwODBEQjg5Cis6MTAwM0IwMDAwMjAwMEYwMDNCODA3MTAwMkQwMDAwMDAwMDAwMDBEREY2Cis6MTAwM0MwMDAwMjAwMEYwMDNDODA3MTAwMkQwMDAwMDAwMDAwMDBEREU1Cis6MTAwM0QwMDAwMjAwMEYwMDNEODA3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwM0UwMDAwMjAwMEYwMDNFODA3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwM0YwMDAwMjAwMEYwMDNGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAwNDAwMDAwMjAwMEYwMDQwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTAwNDEwMDAwMjAwMEYwMDQxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNDIwMDAwMjAwMEYwMDQyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwNDMwMDAwMjAwMEYwMDQzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwNDQwMDAwMjAwMEYwMDQ0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwNDUwMDAwMjAwMEYwMDQ1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwNDYwMDAwMjAwMEYwMDQ2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAwNDcwMDAwMjAwMEYwMDQ3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwNDgwMDAwMjAwMEYwMDQ4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAwNDkwMDAwMjAwMEYwMDQ5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAwNEEwMDAwMjAwMEYwMDRBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAwNEIwMDAwMjAwMEYwMDRCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwNEMwMDAwMjAwMEYwMDRDODA3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwNEQwMDAwMjAwMEYwMDREODA3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwNEUwMDAwMjAwMEYwMDRFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAwNEYwMDAwMjAwMEYwMDRGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAwNTAwMDAwMjAwMEYwMDUwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNTEwMDAwMjAwMEYwMDUxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwNTIwMDAwMjAwMEYwMDUyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwNTMwMDAwMjAwMEYwMDUzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwNTQwMDAwMjAwMEYwMDU0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwNTUwMDAwMjAwMEYwMDU1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAwNTYwMDAwMjAwMEYwMDU2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwNTcwMDAwMjAwMEYwMDU3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAwNTgwMDAwMjAwMEYwMDU4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAwNTkwMDAwMjAwMEYwMDU5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAwNUEwMDAwMjAwMEYwMDVBODA3MTAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwNUIwMDAwMjAwMEYwMDVCODA3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwNUMwMDAwMjAwMEYwMDVDODA3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwNUQwMDAwMjAwMEYwMDVEODA3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAwNUUwMDAwMjAwMEYwMDVFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAwNUYwMDAwMjAwMEYwMDVGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTAwNjAwMDAwMjAwMEYwMDYwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwNjEwMDAwMjAwMEYwMDYxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwNjIwMDAwMjAwMEYwMDYyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwNjMwMDAwMjAwMEYwMDYzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwNjQwMDAwMjAwMEYwMDY0ODA3MTAwMkQwMDAwMDAwMDAwMDBEQjNDCis6MTAwNjUwMDAwMjAwMEYwMDY1ODA3MTAwM0YwMDAwMDAwNDAxMDBERDEyCis6MTAwNjYwMDAwMjAwMEYwMDY2ODA3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAwNjcwMDAwMjAwMEYwMDY3ODA3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAwNjgwMDAwMjAwMEYwMDY4ODA3MTAwM0YwMDAwMDAwNDA4MDBEREQ4Cis6MTAwNjkwMDAwMjAwMEYwMDY5ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwNkEwMDAwMjAwMEYwMDZBODA3MTAwM0YwMDAwMDAwNDMwMDBERDhFCis6MTAwNkIwMDAwMjAwMEYwMDZCODA3MTAwM0YwMDAwMDAwMTAwMThERDk4Cis6MTAwNkMwMDAwMjAwMEYwMDZDODA3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAwNkQwMDAwMjAwMEYwMDZEODA3MTAwM0YwMDAwMDAwNDAwMDBERDhCCis6MTAwNkUwMDAwMjAwMEYwMDZFODA3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAwNkYwMDAwMjAwMEYwMDZGODA3MTAwM0YwMDAwMDAwNDNEMDBERDJDCis6MTAwNzAwMDAwMjAwMEYwMDcwODA3MTAwM0YwMDAwMDAwMTAwMThERDQyCis6MTAwNzEwMDAwMjAwMEYwMDcxODA3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAwNzIwMDAwMjAwMEYwMDcyODA3MTAwM0YwMDAwMDAwNDA3MDBERDJFCis6MTAwNzMwMDAwMjAwMEYwMDczODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ3Cis6MTAwNzQwMDAwMjAwMEYwMDc0ODA3MTAwM0YwMDAwMDA4NDI4MDBERDZCCis6MTAwNzUwMDAwMjAwMEYwMDc1ODA3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAwNzYwMDAwMjAwMEYwMDc2ODA3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAwNzcwMDAwMjAwMEYwMDc3ODA3MTAwM0YwMDAwMDAwNDM3MDBEREE5Cis6MTAwNzgwMDAwMjAwMEYwMDc4ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwNzkwMDAwMjAwMEYwMDc5ODA3MTAwM0YwMDAwMDAwNDI5MDBERDk1Cis6MTAwN0EwMDAwMjAwMEYwMDdBODA3MTAwM0YwMDAwMDAwMTAwMThERDk4Cis6MTAwN0IwMDAwMjAwMEYwMDdCODA3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAwN0MwMDAwMjAwMEYwMDdDODA3MTAwM0YwMDAwMDAwNEFBMDRERERECis6MTAwN0QwMDAwMjAwMEYwMDdEODA3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAwN0UwMDAwMjAwMEYwMDdFODA3MTAwM0YwMDAwMDAwNDI4MDBERDQxCis6MTAwN0YwMDAwMjAwMEYwMDdGODA3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAwODAwMDAwMjAwMEYwMDgwODA3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAwODEwMDAwMjAwMEYwMDgxODA3MTAwM0YwMDAwMDAwNDMxMDBERDA0Cis6MTAwODIwMDAwMjAwMEYwMDgyODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ3Cis6MTAwODMwMDAwMjAwMEYwMDgzODA3MTAwM0YwMDAwMDA4NDJCMDBERDY4Cis6MTAwODQwMDAwMjAwMEYwMDg0ODA3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAwODUwMDAwMjAwMEYwMDg1ODA3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAwODYwMDAwMjAwMEYwMDg2ODA3MTAwM0YwMDAwMDAwNEU0MDFEREZCCis6MTAwODcwMDAwMjAwMEYwMDg3ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwODgwMDAwMjAwMEYwMDg4ODA3MTAwM0YwMDAwMDA4NDAwODBEN0M0Cis6MTAwODkwMDAwMjAwMEYwMDg5ODA3MTAwM0YwMDAwMDAwMTAwOThENzFFCis6MTAwOEEwMDAwMjAwMEYwMDhBODA3MTAwNTkwMDAwMDBFRjM3ODBEN0U2Cis6MTAwOEIwMDAwMjAwMEYwMDhCODA3MTAwM0QwMDAwMDA2RjAwODBGNzg4Cis6MTAwOEMwMDAwMjAwMEYwMDhDODA3MTAwM0QwMDAwMDA2RjAwODBGNzc3Cis6MTAwOEQwMDAwMjAwMEYwMDhEODA3MTAwM0QwMDAwMDA2RjAwODBGNzY2Cis6MTAwOEUwMDAwMjAwMEYwMDhFODA3MTAwMkQwMDAwMDA3RjAyRDZENzFECis6MTAwOEYwMDAwMjAwMEYwMDhGODA3MTAwMTgwMDAwMDA4MTAwRkYxN0I4Cis6MTAwOTAwMDAwMjAwMEYwMDkwODA3MTAwM0QwMDAwMDA2RjAwODBGNzMyCis6MTAwOTEwMDAwMjAwMEYwMDkxODA3MTAwM0QwMDAwMDA2RjAwODBGNzIxCis6MTAwOTIwMDAwMjAwMEYwMDkyODA3MTAwMkQwMDAwMDBCODAwRDhENzlGCis6MTAwOTMwMDAwMjAwMEYwMDkzODA3MTAwMTgwMDAwMDA4MTAwRUIxNzg3Cis6MTAwOTQwMDAwMjAwMEYwMDk0ODA3MTAwM0YwMDAwMDAwNDI5MDBEREM4Cis6MTAwOTUwMDAwMjAwMEYwMDk1ODA3MTAwM0YwMDAwMDAwMTAwMThERENCCis6MTAwOTYwMDAwMjAwMEYwMDk2ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwOTcwMDAwMjAwMEYwMDk3ODA3MTAwM0YwMDAwMDA4NEFBMDRERDkwCis6MTAwOTgwMDAwMjAwMEYwMDk4ODA3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAwOTkwMDAwMjAwMEYwMDk5ODA3MTAwM0YwMDAwMDAwNDJCMDBERDcxCis6MTAwOUEwMDAwMjAwMEYwMDlBODA3MTAwM0YwMDAwMDAwMTAwMThERDc2Cis6MTAwOUIwMDAwMjAwMEYwMDlCODA3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAwOUMwMDAwMjAwMEYwMDlDODA3MTAwM0YwMDAwMDAwNDAwMDBERDY5Cis6MTAwOUQwMDAwMjAwMEYwMDlEODA3MTAwNjkwMDAwMDA3QTNEMDBERDdCCis6MTAwOUUwMDAwMjAwMEYwMDlFODA3MTAwM0YwMDAwMDA4NDI5MDBERDlFCis6MTAwOUYwMDAwMjAwMEYwMDlGODA3MTAwM0YwMDAwMDAwMTAwMThERDIxCis6MTAwQTAwMDAwMjAwMEYwMEEwODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ3Cis6MTAwQTEwMDAwMjAwMEYwMEExODA3MTAwM0YwMDAwMDAwNDAwMDBERDEzCis6MTAwQTIwMDAwMjAwMEYwMEEyODA3MTAwNjkwMDAwMDA3QTNEMDBERDI1Cis6MTAwQTMwMDAwMjAwMEYwMEEzODA3MTAwM0YwMDAwMDAwNDJBMDBEREM3Cis6MTAwQTQwMDAwMjAwMEYwMEE0ODA3MTAwM0YwMDAwMDAwMTAwMThERENCCis6MTAwQTUwMDAwMjAwMEYwMEE1ODA3MTAwNjkwMDAwMDA3QTNEMDBEREYyCis6MTAwQTYwMDAwMjAwMEYwMEE2ODA3MTAwM0YwMDAwMDA4NDkxMDBEREFECis6MTAwQTcwMDAwMjAwMEYwMEE3ODA3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAwQTgwMDAwMjAwMEYwMEE4ODA3MTAwM0YwMDAwMDA4NDE5ODBENjhBCis6MTAwQTkwMDAwMjAwMEYwMEE5ODA3MTAwM0YwMDAwMDAwMTAwODBENjE1Cis6MTAwQUEwMDAwMjAwMEYwMEFBODA3MTAwMzUwMDAwMDBFRDAwODBENjIyCis6MTAwQUIwMDAwMjAwMEYwMEFCODA3MTAwMTgwMDAwMDA4MTAwRkYzN0JBCis6MTAwQUMwMDAwMjAwMEYwMEFDODA3MTAwM0YwMDAwMDAwNDJCMDBERDJECis6MTAwQUQwMDAwMjAwMEYwMEFEODA3MTAwM0YwMDAwMDAwMTAwMThERDMyCis6MTAwQUUwMDAwMjAwMEYwMEFFODA3MTAwNjkwMDAwMDA3QTNEMDBERDU5Cis6MTAwQUYwMDAwMjAwMEYwMEFGODA3MTAwM0YwMDAwMDAwNDAwMDBERDI1Cis6MTAwQjAwMDAwMjAwMEYwMEIwODA3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAwQjEwMDAwMjAwMEYwMEIxODA3MTAwM0YwMDAwMDA4NDJBMDBERDU4Cis6MTAwQjIwMDAwMjAwMEYwMEIyODA3MTAwM0YwMDAwMDAwMTAwMThERERDCis6MTAwQjMwMDAwMjAwMEYwMEIzODA3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAwQjQwMDAwMjAwMEYwMEI0ODA3MTAwM0YwMDAwMDAwNDAwMDBERENGCis6MTAwQjUwMDAwMjAwMEYwMEI1ODA3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAwQjYwMDAwMjAwMEYwMEI2ODA3MTAwM0YwMDAwMDA4NDBDODBENkE4Cis6MTAwQjcwMDAwMjAwMEYwMEI3ODA3MTAwM0YwMDAwMDAwMTAwODBENjI2Cis6MTAwQjgwMDAwMjAwMEYwMEI4ODA3MTAwMzUwMDAwMDBFRDAwODBENjMzCis6MTAwQjkwMDAwMjAwMEYwMEI5ODA3MTAwMTgwMDAwMDA4MTAwRkYzN0NCCis6MTAwQkEwMDAwMjAwMEYwMEJBODA3MTAwM0YwMDAwMDA4NDJBMDBEREJGCis6MTAwQkIwMDAwMjAwMEYwMEJCODA3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAwQkMwMDAwMjAwMEYwMEJDODA3MTAwNjkwMDAwMDA3QTNEMDBERDZBCis6MTAwQkQwMDAwMjAwMEYwMEJEODA3MTAwM0YwMDAwMDAwNDAwMDBERDM2Cis6MTAwQkUwMDAwMjAwMEYwMEJFODA3MTAwNjkwMDAwMDA3QTNEMDBERDQ4Cis6MTAwQkYwMDAwMjAwMEYwMEJGODA3MTAwM0YwMDAwMDA4NDBGODBENjBDCis6MTAwQzAwMDAwMjAwMEYwMEMwODA3MTAwM0YwMDAwMDAwMTAwODBENjhDCis6MTAwQzEwMDAwMjAwMEYwMEMxODA3MTAwMzUwMDAwMDBFRDAwODBENjk5Cis6MTAwQzIwMDAwMjAwMEYwMEMyODA3MTAwMTgwMDAwMDA4MTAwRkYzNzMxCis6MTAwQzMwMDAwMjAwMEYwMEMzODA3MTAwM0YwMDAwMDAwNDJBMDBEREE1Cis6MTAwQzQwMDAwMjAwMEYwMEM0ODA3MTAwM0YwMDAwMDAwMTAwMThEREE5Cis6MTAwQzUwMDAwMjAwMEYwMEM1ODA3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAwQzYwMDAwMjAwMEYwMEM2ODA3MTAwM0YwMDAwMDA4NDExMDBERDBCCis6MTAwQzcwMDAwMjAwMEYwMEM3ODA3MTAwNjkwMDAwMDA3QTNEMDBEREFFCis6MTAwQzgwMDAwMjAwMEYwMEM4ODA3MTAwM0YwMDAwMDA4NDI4MDBEREQyCis6MTAwQzkwMDAwMjAwMEYwMEM5ODA3MTAwM0YwMDAwMDAwMTAwMThERDU0Cis6MTAwQ0EwMDAwMjAwMEYwMENBODA3MTAwNjkwMDAwMDA3QTNEMDBERDdCCis6MTAwQ0IwMDAwMjAwMEYwMENCODA3MTAwM0YwMDAwMDA4NDM3MDBERDkwCis6MTAwQ0MwMDAwMjAwMEYwMENDODA3MTAwNjkwMDAwMDA3QTNEMDBERDU5Cis6MTAwQ0QwMDAwMjAwMEYwMENEODA3MTAwMkQwMDAwMDAwMDAwODBEM0M1Cis6MTAwQ0UwMDAwMjAwMEYwMENFODA3MTAwM0YwMDAwMDA4MDM3MDBEMjZDCis6MTAwQ0YwMDAwMjAwMEYwMENGODA3MTAwM0YwMDAwMDAwNDA0ODBEMThCCis6MTAwRDAwMDAwMjAwMEYwMEQwODA3MTAwM0YwMDAwMDAwMTAwODREMTdDCis6MTAwRDEwMDAwMjAwMEYwMEQxODA3MTAwNjkwMDAwMDA3NjNCMDBERDA5Cis6MTAwRDIwMDAwMjAwMEYwMEQyODA3MTAwNjkwMDAwMDA3NjNCMDBEREY4Cis6MTAwRDMwMDAwMjAwMEYwMEQzODA3MTAwNjkwMDAwMDA3NjNCMDBEREU3Cis6MTAwRDQwMDAwMjAwMEYwMEQ0ODA3MTAwM0YwMDAwMDA4NEZGN0ZEMUJCCis6MTAwRDUwMDAwMjAwMEYwMEQ1ODA3MTAwM0YwMDAwMDA4MUZGN0ZEMUFECis6MTAwRDYwMDAwMjAwMEYwMEQ2ODA3MTAwNjkwMDAwMDA3NjNCMDBEREI0Cis6MTAwRDcwMDAwMjAwMEYwMEQ3ODA3MTAwNjkwMDAwMDA3NjNCMDBEREEzCis6MTAwRDgwMDAwMjAwMEYwMEQ4ODA3MTAwNjkwMDAwMDA3NjNCMDBERDkyCis6MTAwRDkwMDAwMjAwMEYwMEQ5ODA3MTAwNjkwMDAwMDA3NjNCMDBERDgxCis6MTAwREEwMDAwMjAwMEYwMERBODA3MTAwNjkwMDAwMDA3NjNCMDBERDcwCis6MTAwREIwMDAwMjAwMEYwMERCODA3MTAwNjkwMDAwMDA3NjNCMDBERDVGCis6MTAwREMwMDAwMjAwMEYwMERDODA3MTAwM0YwMDAwMDA4NDA3ODBENjI1Cis6MTAwREQwMDAwMjAwMEYwMEREODA3MTAwM0YwMDAwMDAwMTAwODBENjlFCis6MTAwREUwMDAwMjAwMEYwMERFODA3MTAwMzUwMDAwMDBFRDAwODBENkFCCis6MTAwREYwMDAwMjAwMEYwMERGODA3MTAwMTgwMDAwMDA4MTAwRkYzNzQzCis6MTAwRTAwMDAwMjAwMEYwMEUwODA3MTAwNDkwMDAwMDA2MzNCMDBERDNDCis6MTAwRTEwMDAwMjAwMEYwMEUxODA3MTAwNTkwMDAwMDA3NjNCMDBERDA4Cis6MTAwRTIwMDAwMjAwMEYwMEUyODA3MTAwM0QwMDAwMDA2RjAwODBGN0JCCis6MTAwRTMwMDAwMjAwMEYwMEUzODA3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAwRTQwMDAwMjAwMEYwMEU0ODA3MTAwM0QwMDAwMDA2RjAwODBGNzk5Cis6MTAwRTUwMDAwMjAwMEYwMEU1ODA3MTAwMkQwMDAwMDA3RjAyMDZERDFBCis6MTAwRTYwMDAwMjAwMEYwMEU2ODA3MTAwMTgwMDAwMDA3QTNEN0YxRDJGCis6MTAwRTcwMDAwMjAwMEYwMEU3ODA3MTAwNDUwMDAwMDAzOTMxMDBEREZECis6MTAwRTgwMDAwMjAwMEYwMEU4ODA3MTAwOTQwMDAwMDAzQjMxMEIwMDZECis6MTAwRTkwMDAwMjAwMEYwMEU5ODA3MTAwOTQwMDAwMDAzRDMxMDkwMDVDCis6MTAwRUEwMDAwMjAwMEYwMEVBODA3MTAwOTQwMDAwMDAzRjMxMDcwMDRCCis6MTAwRUIwMDAwMjAwMEYwMEVCODA3MTAwOTQwMDAwMDA3NjNCMDUwMEZCCis6MTAwRUMwMDAwMjAwMEYwMEVDODA3MTAwMDkwMDAwMDA3QTNERURDMUM2Cis6MTAwRUQwMDAwMjAwMEYwMEVEODA3MTAwM0YwMDAwMDA4MEI3MDBEMkRCCis6MTAwRUUwMDAwMjAwMEYwMEVFODA3MTAwM0YwMDAwMDA4NDI4MDBERDRBCis6MTAwRUYwMDAwMjAwMEYwMEVGODA3MTAwM0YwMDAwMDAwMTAwMThERENDCis6MTAwRjAwMDAwMjAwMEYwMEYwODA3MTAwNjkwMDAwMDA2NDMyMDBERDEzCis6MTAwRjEwMDAwMjAwMEYwMEYxODA3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAwRjIwMDAwMjAwMEYwMEYyODA3MTAwM0YwMDAwMDA4NDA3ODBENkFECis6MTAwRjMwMDAwMjAwMEYwMEYzODA3MTAwM0YwMDAwMDAwMTAwODBENjI2Cis6MTAwRjQwMDAwMjAwMEYwMEY0ODA3MTAwMzUwMDAwMDBFRDAwODBENjMzCis6MTAwRjUwMDAwMjAwMEYwMEY1ODA3MTAwMTgwMDAwMDA4MTAwRkYzN0NCCis6MTAwRjYwMDAwMjAwMEYwMEY2ODA3MTAwNDkwMDAwMDA2MzNCMDBEREM1Cis6MTAwRjcwMDAwMjAwMEYwMEY3ODA3MTAwNTkwMDAwMDA3NjNCMDBERDkxCis6MTAwRjgwMDAwMjAwMEYwMEY4ODA3MTAwM0QwMDAwMDA2RjAwODBGNzQ0Cis6MTAwRjkwMDAwMjAwMEYwMEY5ODA3MTAwM0QwMDAwMDA2RjAwODBGNzMzCis6MTAwRkEwMDAwMjAwMEYwMEZBODA3MTAwM0QwMDAwMDA2RjAwODBGNzIyCis6MTAwRkIwMDAwMjAwMEYwMEZCODA3MTAwMkQwMDAwMDA3RjAyMDZEREEzCis6MTAwRkMwMDAwMjAwMEYwMEZDODA3MTAwMTgwMDAwMDA3QTNEN0YxREI4Cis6MTAwRkQwMDAwMjAwMEYwMEZEODA3MTAwNDUwMDAwMDAzQTMxMDBERDg1Cis6MTAwRkUwMDAwMjAwMEYwMEZFODA3MTAwMTgwMDAwMDA3NjNCMkQxREVFCis6MTAwRkYwMDAwMjAwMEYwMEZGODA3MTAwNDUwMDAwMDAzQzMxMDBERDYxCis6MTAxMDAwMDAwMjAwMEYwMDAwODE3MTAwMTgwMDAwMDA3NjNCMTMxREU0Cis6MTAxMDEwMDAwMjAwMEYwMDAxODE3MTAwNDUwMDAwMDAzRTMxMDBERDNCCis6MTAxMDIwMDAwMjAwMEYwMDAyODE3MTAwMTgwMDAwMDA3NjNCMUIxREJBCis6MTAxMDMwMDAwMjAwMEYwMDAzODE3MTAwM0YwMDAwMDAwNDMwMDBERDVBCis6MTAxMDQwMDAwMjAwMEYwMDA0ODE3MTAwM0YwMDAwMDAwMTAwMThERDY0Cis6MTAxMDUwMDAwMjAwMEYwMDA1ODE3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAxMDYwMDAwMjAwMEYwMDA2ODE3MTAwM0YwMDAwMDAwNDAxMDBERDU2Cis6MTAxMDcwMDAwMjAwMEYwMDA3ODE3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAxMDgwMDAwMjAwMEYwMDA4ODE3MTAwMDkwMDAwMDA3QTNEMkRDNUEzCis6MTAxMDkwMDAwMjAwMEYwMDA5ODE3MTAwMjkwMDAwMDA2NDAwMDFEMkU0Cis6MTAxMEEwMDAwMjAwMEYwMDBBODE3MTAwM0YwMDAwMDA4NDI4MDBERDZCCis6MTAxMEIwMDAwMjAwMEYwMDBCODE3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAxMEMwMDAwMjAwMEYwMDBDODE3MTAwNjkwMDAwMDA2NDMyMDBERDM1Cis6MTAxMEQwMDAwMjAwMEYwMDBEODE3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAxMEUwMDAwMjAwMEYwMDBFODE3MTAwMDkwMDAwMDA3QTNEMjlDMjQ0Cis6MTAxMEYwMDAwMjAwMEYwMDBGODE3MTAwMjkwMDAwMDA2NDAwMDBEMjdGCis6MTAxMTAwMDAwMjAwMEYwMDEwODE3MTAwM0YwMDAwMDA4NDI4MDBERDA0Cis6MTAxMTEwMDAwMjAwMEYwMDExODE3MTAwM0YwMDAwMDAwMTAwMThERDg2Cis6MTAxMTIwMDAwMjAwMEYwMDEyODE3MTAwNjkwMDAwMDA2NDMyMDBERENFCis6MTAxMTMwMDAwMjAwMEYwMDEzODE3MTAwNjkwMDAwMDA3QTNEMDBERDlDCis6MTAxMTQwMDAwMjAwMEYwMDE0ODE3MTAwNDkwMDAwMDA2MzNCMDBEREM0Cis6MTAxMTUwMDAwMjAwMEYwMDE1ODE3MTAwNTkwMDAwMDA3NjNCMDBERDkwCis6MTAxMTYwMDAwMjAwMEYwMDE2ODE3MTAwM0QwMDAwMDA2RjAwODBGNzQzCis6MTAxMTcwMDAwMjAwMEYwMDE3ODE3MTAwM0QwMDAwMDA2RjAwODBGNzMyCis6MTAxMTgwMDAwMjAwMEYwMDE4ODE3MTAwM0QwMDAwMDA2RjAwODBGNzIxCis6MTAxMTkwMDAwMjAwMEYwMDE5ODE3MTAwMkQwMDAwMDA3RjAyMDZEREEyCis6MTAxMUEwMDAwMjAwMEYwMDFBODE3MTAwMTgwMDAwMDA3QTNEN0YxREI3Cis6MTAxMUIwMDAwMjAwMEYwMDFCODE3MTAwNDUwMDAwMDAzQTMxMDBERDg0Cis6MTAxMUMwMDAwMjAwMEYwMDFDODE3MTAwMTgwMDAwMDA3NjNCMEYxRDBCCis6MTAxMUQwMDAwMjAwMEYwMDFEODE3MTAwM0YwMDAwMDAwNDMwMDBERDlGCis6MTAxMUUwMDAwMjAwMEYwMDFFODE3MTAwM0YwMDAwMDAwMTAwMThEREE5Cis6MTAxMUYwMDAwMjAwMEYwMDFGODE3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAxMjAwMDAwMjAwMEYwMDIwODE3MTAwM0YwMDAwMDAwNDAxMDBERDlBCis6MTAxMjEwMDAwMjAwMEYwMDIxODE3MTAwNjkwMDAwMDA3QTNEMDBEREFECis6MTAxMjIwMDAwMjAwMEYwMDIyODE3MTAwMDkwMDAwMDA3QTNEMkRDNUU3Cis6MTAxMjMwMDAwMjAwMEYwMDIzODE3MTAwMkQwMDAwMDA4MjAwMDhEMTAwCis6MTAxMjQwMDAwMjAwMEYwMDI0ODE3MTAwMDgwMDAwMDA3QTNEQzMyM0QyCis6MTAxMjUwMDAwMjAwMEYwMDI1ODE3MTAwNDkwMDAwMDAwQTNCMDBENjAyCis6MTAxMjYwMDAwMjAwMEYwMDI2ODE3MTAwM0YwMDAwMDAwNDAwMDBEMzNGCis6MTAxMjcwMDAwMjAwMEYwMDI3ODE3MTAwM0YwMDAwMDAwMTAwMDREMzJECis6MTAxMjgwMDAwMjAwMEYwMDI4ODE3MTAwMkYwMDAwMDA4NTQwODFENkU4Cis6MTAxMjkwMDAwMjAwMEYwMDI5ODE3MTAwM0YwMDAwMDA4NEZGRkZENDhECis6MTAxMkEwMDAwMjAwMEYwMDJBODE3MTAwM0YwMDAwMDA4MTA3ODBENEY2Cis6MTAxMkIwMDAwMjAwMEYwMDJCODE3MTAwM0YwMDAwMDA4NEZGRkZEMTZFCis6MTAxMkMwMDAwMjAwMEYwMDJDODE3MTAwM0YwMDAwMDAwMTAwODBEMTVFCis6MTAxMkQwMDAwMjAwMEYwMDJEODE3MTAwNDkwMDAwMDA2NjM2MDBERDFDCis6MTAxMkUwMDAwMjAwMEYwMDJFODE3MTAwNjkwMDAwMDA3NjNCMDBEREQ2Cis6MTAxMkYwMDAwMjAwMEYwMDJGODE3MTAwNjkwMDAwMDA3NjNCMDBEREM1Cis6MTAxMzAwMDAwMjAwMEYwMDMwODE3MTAwNjkwMDAwMDA3NjNCMDBEREIzCis6MTAxMzEwMDAwMjAwMEYwMDMxODE3MTAwNjkwMDAwMDA2OTNCMDBEREFGCis6MTAxMzIwMDAwMjAwMEYwMDMyODE3MTAwNjkwMDAwMDA3NjNCMDBERDkxCis6MTAxMzMwMDAwMjAwMEYwMDMzODE3MTAwNjkwMDAwMDA3NjNCMDBERDgwCis6MTAxMzQwMDAwMjAwMEYwMDM0ODE3MTAwNjkwMDAwMDA3NjNCMDBERDZGCis6MTAxMzUwMDAwMjAwMEYwMDM1ODE3MTAwNjkwMDAwMDA2OTNCMDBERDZCCis6MTAxMzYwMDAwMjAwMEYwMDM2ODE3MTAwNjEwMDAwMDA2QzA0MDBGNjdECis6MTAxMzcwMDAwMjAwMEYwMDM3ODE3MTAwMzUwMDAwMDBFRDAwODBENkJCCis6MTAxMzgwMDAwMjAwMEYwMDM4ODE3MTAwMTgwMDAwMDA4MTAwNkIzREUxCis6MTAxMzkwMDAwMjAwMEYwMDM5ODE3MTAwNDkwMDAwMDA4QjA1MDBENjYyCis6MTAxM0EwMDAwMjAwMEYwMDNBODE3MTAwMkYwMDAwMDAwNjAxODFENjczCis6MTAxM0IwMDAwMjAwMEYwMDNCODE3MTAwMkQwMDAwMDAwMDAwMDBEMkYwCis6MTAxM0MwMDAwMjAwMEYwMDNDODE3MTAwMjEwMDAwMDBFNDAwMDBEMjA3Cis6MTAxM0QwMDAwMjAwMEYwMDNEODE3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAxM0UwMDAwMjAwMEYwMDNFODE3MTAwMkQwMDAwMDA3RjAxMDZERDJDCis6MTAxM0YwMDAwMjAwMEYwMDNGODE3MTAwMTgwMDAwMDA3QTNEN0YxRDQwCis6MTAxNDAwMDAwMjAwMEYwMDQwODE3MTAwNDkwMDAwMDA2QzM2MDBEOEQ2Cis6MTAxNDEwMDAwMjAwMEYwMDQxODE3MTAwNjkwMDAwMDBFNzMzMDBEODJECis6MTAxNDIwMDAwMjAwMEYwMDQyODE3MTAwNjkwMDAwMDBFNzMzMDBEODFDCis6MTAxNDMwMDAwMjAwMEYwMDQzODE3MTAwNjkwMDAwMDBFRjM3MDBEOEZGCis6MTAxNDQwMDAwMjAwMEYwMDQ0ODE3MTAwMzEwMDAwMDA2QzAxMDBENkUxCis6MTAxNDUwMDAwMjAwMEYwMDQ1ODE3MTAwMkQwMDAwMDAwMDAwMDBEMTQ2Cis6MTAxNDYwMDAwMjAwMEYwMDQ2ODE3MTAwNDkwMDAwMDBFNDMzN0FEMTg4Cis6MTAxNDcwMDAwMjAwMEYwMDQ3ODE3MTAwMkYwMDAwMDA2MjAxNzFEMTRFCis6MTAxNDgwMDAwMjAwMEYwMDQ4ODE3MTAwMkYwMDAwMDA2MjAxNjFEMTRECis6MTAxNDkwMDAwMjAwMEYwMDQ5ODE3MTAwNDkwMDAwMDBFMzMzNDBEMTkwCis6MTAxNEEwMDAwMjAwMEYwMDRBODE3MTAwM0QwMDAwMDA2RjAwODBGN0NDCis6MTAxNEIwMDAwMjAwMEYwMDRCODE3MTAwMkQwMDAwMDA3RjAxMDZERDRFCis6MTAxNEMwMDAwMjAwMEYwMDRDODE3MTAwMTgwMDAwMDA3QTNEN0YxRDYyCis6MTAxNEQwMDAwMjAwMEYwMDREODE3MTAwNDkwMDAwMDA2QzM2MDBEOEY5Cis6MTAxNEUwMDAwMjAwMEYwMDRFODE3MTAwNjkwMDAwMDBFNzMzMDBEODUwCis6MTAxNEYwMDAwMjAwMEYwMDRGODE3MTAwNjkwMDAwMDA2MjMxMDBEOEM2Cis6MTAxNTAwMDAwMjAwMEYwMDUwODE3MTAwNjkwMDAwMDBFRjM3MDBEODIxCis6MTAxNTEwMDAwMjAwMEYwMDUxODE3MTAwMzEwMDAwMDA2QzAxMDBENjAzCis6MTAxNTIwMDAwMjAwMEYwMDUyODE3MTAwM0QwMDAwMDA2RjAwODBGNzQzCis6MTAxNTMwMDAwMjAwMEYwMDUzODE3MTAwMkQwMDAwMDA3RjAxMDZEREM1Cis6MTAxNTQwMDAwMjAwMEYwMDU0ODE3MTAwMTgwMDAwMDA3QTNEN0YxREQ5Cis6MTAxNTUwMDAwMjAwMEYwMDU1ODE3MTAwNDkwMDAwMDA2QzM2MDBEODcwCis6MTAxNTYwMDAwMjAwMEYwMDU2ODE3MTAwNjkwMDAwMDBFNzMzMDBEOEM3Cis6MTAxNTcwMDAwMjAwMEYwMDU3ODE3MTAwNjkwMDAwMDBFNzMzMDBEOEI2Cis6MTAxNTgwMDAwMjAwMEYwMDU4ODE3MTAwNjkwMDAwMDBFRjM3MDBEODk5Cis6MTAxNTkwMDAwMjAwMEYwMDU5ODE3MTAwMzEwMDAwMDA2QzAxMDBENjdCCis6MTAxNUEwMDAwMjAwMEYwMDVBODE3MTAwMkQwMDAwMDAwMDAwMDBEMUUwCis6MTAxNUIwMDAwMjAwMEYwMDVCODE3MTAwMkQwMDAwMDBFNDA3NkNEMTc4Cis6MTAxNUMwMDAwMjAwMEYwMDVDODE3MTAwNDkwMDAwMDBFMzMzNDBEMTRDCis6MTAxNUQwMDAwMjAwMEYwMDVEODE3MTAwM0QwMDAwMDA2RjAwODBGNzg4Cis6MTAxNUUwMDAwMjAwMEYwMDVFODE3MTAwMkQwMDAwMDA3RjAxMDZERDBBCis6MTAxNUYwMDAwMjAwMEYwMDVGODE3MTAwMTgwMDAwMDA3QTNEN0YxRDFFCis6MTAxNjAwMDAwMjAwMEYwMDYwODE3MTAwNDkwMDAwMDA2QzM2MDBEOEI0Cis6MTAxNjEwMDAwMjAwMEYwMDYxODE3MTAwNjkwMDAwMDBFNzMzMDBEODBCCis6MTAxNjIwMDAwMjAwMEYwMDYyODE3MTAwNjkwMDAwMDA2MjMxMDBEODgxCis6MTAxNjMwMDAwMjAwMEYwMDYzODE3MTAwNjkwMDAwMDBFRjM3MDBEOERECis6MTAxNjQwMDAwMjAwMEYwMDY0ODE3MTAwMzEwMDAwMDA2QzAxMDBENkJGCis6MTAxNjUwMDAwMjAwMEYwMDY1ODE3MTAwM0QwMDAwMDA2RjAwODBGN0ZGCis6MTAxNjYwMDAwMjAwMEYwMDY2ODE3MTAwMkQwMDAwMDA3RjAxMDZERDgxCis6MTAxNjcwMDAwMjAwMEYwMDY3ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDk1Cis6MTAxNjgwMDAwMjAwMEYwMDY4ODE3MTAwNDkwMDAwMDA2QzM2MDBEODJDCis6MTAxNjkwMDAwMjAwMEYwMDY5ODE3MTAwNjkwMDAwMDBFNzMzMDBEODgzCis6MTAxNkEwMDAwMjAwMEYwMDZBODE3MTAwNjkwMDAwMDBFNzMzMDBEODcyCis6MTAxNkIwMDAwMjAwMEYwMDZCODE3MTAwNjkwMDAwMDBFRjM3MDBEODU1Cis6MTAxNkMwMDAwMjAwMEYwMDZDODE3MTAwMzEwMDAwMDA2QzAxMDBENjM3Cis6MTAxNkQwMDAwMjAwMEYwMDZEODE3MTAwMkQwMDAwMDAwMDAwMDBEMTlDCis6MTAxNkUwMDAwMjAwMEYwMDZFODE3MTAwNDkwMDAwMDBFNDMzNzhEMUUwCis6MTAxNkYwMDAwMjAwMEYwMDZGODE3MTAwMkYwMDAwMDA2MjAxNzFEMUE0Cis6MTAxNzAwMDAwMjAwMEYwMDcwODE3MTAwMkYwMDAwMDA2MjAxNjFEMUEyCis6MTAxNzEwMDAwMjAwMEYwMDcxODE3MTAwNDkwMDAwMDBFMzMzNDBEMUU1Cis6MTAxNzIwMDAwMjAwMEYwMDcyODE3MTAwM0QwMDAwMDA2RjAwODBGNzIxCis6MTAxNzMwMDAwMjAwMEYwMDczODE3MTAwMkQwMDAwMDA3RjAxMDZEREEzCis6MTAxNzQwMDAwMjAwMEYwMDc0ODE3MTAwMTgwMDAwMDA3QTNEN0YxREI3Cis6MTAxNzUwMDAwMjAwMEYwMDc1ODE3MTAwNDkwMDAwMDA2QzM2MDBEODRFCis6MTAxNzYwMDAwMjAwMEYwMDc2ODE3MTAwNjkwMDAwMDBFNzMzMDBEOEE1Cis6MTAxNzcwMDAwMjAwMEYwMDc3ODE3MTAwNjkwMDAwMDA2MjMxMDBEODFCCis6MTAxNzgwMDAwMjAwMEYwMDc4ODE3MTAwNjkwMDAwMDBFRjM3MDBEODc3Cis6MTAxNzkwMDAwMjAwMEYwMDc5ODE3MTAwMzEwMDAwMDA2QzAxMDBENjU5Cis6MTAxN0EwMDAwMjAwMEYwMDdBODE3MTAwM0QwMDAwMDA2RjAwODBGNzk5Cis6MTAxN0IwMDAwMjAwMEYwMDdCODE3MTAwMkQwMDAwMDA3RjAxMDZERDFCCis6MTAxN0MwMDAwMjAwMEYwMDdDODE3MTAwMTgwMDAwMDA3QTNEN0YxRDJGCis6MTAxN0QwMDAwMjAwMEYwMDdEODE3MTAwNDkwMDAwMDA2QzM2MDBEOEM2Cis6MTAxN0UwMDAwMjAwMEYwMDdFODE3MTAwNjkwMDAwMDBFNzMzMDBEODFECis6MTAxN0YwMDAwMjAwMEYwMDdGODE3MTAwNjkwMDAwMDBFNzMzMDBEODBDCis6MTAxODAwMDAwMjAwMEYwMDgwODE3MTAwNjkwMDAwMDBFRjM3MDBEOEVFCis6MTAxODEwMDAwMjAwMEYwMDgxODE3MTAwMzEwMDAwMDA2QzAxMDBENkQwCis6MTAxODIwMDAwMjAwMEYwMDgyODE3MTAwMkQwMDAwMDAwMDAwMDBEMTM1Cis6MTAxODMwMDAwMjAwMEYwMDgzODE3MTAwMkQwMDAwMDBFNDA3NjhEMUQxCis6MTAxODQwMDAwMjAwMEYwMDg0ODE3MTAwNDkwMDAwMDBFMzMzNDBEMUExCis6MTAxODUwMDAwMjAwMEYwMDg1ODE3MTAwM0QwMDAwMDA2RjAwODBGN0RECis6MTAxODYwMDAwMjAwMEYwMDg2ODE3MTAwMkQwMDAwMDA3RjAxMDZERDVGCis6MTAxODcwMDAwMjAwMEYwMDg3ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDczCis6MTAxODgwMDAwMjAwMEYwMDg4ODE3MTAwNDkwMDAwMDA2QzM2MDBEODBBCis6MTAxODkwMDAwMjAwMEYwMDg5ODE3MTAwNjkwMDAwMDBFNzMzMDBEODYxCis6MTAxOEEwMDAwMjAwMEYwMDhBODE3MTAwNjkwMDAwMDA2MjMxMDBEOEQ3Cis6MTAxOEIwMDAwMjAwMEYwMDhCODE3MTAwNjkwMDAwMDBFRjM3MDBEODMzCis6MTAxOEMwMDAwMjAwMEYwMDhDODE3MTAwMzEwMDAwMDA2QzAxMDBENjE1Cis6MTAxOEQwMDAwMjAwMEYwMDhEODE3MTAwMzUwMDAwMDBFRDAwODBENjAwCis6MTAxOEUwMDAwMjAwMEYwMDhFODE3MTAwMDgwMDAwMDA4MTAwNzkyMjQzCis6MTAxOEYwMDAwMjAwMEYwMDhGODE3MTAwNDkwMDAwMDAwQzA2MDBENjI1Cis6MTAxOTAwMDAwMjAwMEYwMDkwODE3MTAwMkYwMDAwMDAwNjAxODFENkI3Cis6MTAxOTEwMDAwMjAwMEYwMDkxODE3MTAwM0YwMDAwMDAwMjAwODBENDlFCis6MTAxOTIwMDAwMjAwMEYwMDkyODE3MTAwM0YwMDAwMDA4NDAwODBENDBCCis6MTAxOTMwMDAwMjAwMEYwMDkzODE3MTAwM0YwMDAwMDAwMjAxMDBENUZBCis6MTAxOTQwMDAwMjAwMEYwMDk0ODE3MTAwM0YwMDAwMDA4NDAxMDBENTY3Cis6MTAxOTUwMDAwMjAwMEYwMDk1ODE3MTAwM0YwMDAwMDAwMjAyODBENTU3Cis6MTAxOTYwMDAwMjAwMEYwMDk2ODE3MTAwM0YwMDAwMDAwNDAyODBENTQ0Cis6MTAxOTcwMDAwMjAwMEYwMDk3ODE3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAxOTgwMDAwMjAwMEYwMDk4ODE3MTAwMkQwMDAwMDA3RjAxMDZERDJDCis6MTAxOTkwMDAwMjAwMEYwMDk5ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDQwCis6MTAxOUEwMDAwMjAwMEYwMDlBODE3MTAwNDkwMDAwMDA2QzM2MDBEOEQ3Cis6MTAxOUIwMDAwMjAwMEYwMDlCODE3MTAwNjkwMDAwMDBFOTM0MDBEODJCCis6MTAxOUMwMDAwMjAwMEYwMDlDODE3MTAwNjkwMDAwMDA2QTM1MDBEODk4Cis6MTAxOUQwMDAwMjAwMEYwMDlEODE3MTAwNjkwMDAwMDBFRjM3MDBEODAwCis6MTAxOUUwMDAwMjAwMEYwMDlFODE3MTAwMzEwMDAwMDA2QzAxMDBENkUyCis6MTAxOUYwMDAwMjAwMEYwMDlGODE3MTAwNDEwMDAwMDBFQjM0ODBENDkxCis6MTAxQTAwMDAwMjAwMEYwMEEwODE3MTAwNDEwMDAwMDA2QjM1MDBENTdECis6MTAxQTEwMDAwMjAwMEYwMEExODE3MTAwMzUwMDAwMDBFRDAwODBENkFBCis6MTAxQTIwMDAwMjAwMEYwMEEyODE3MTAwMTgwMDAwMDA4MTAwRUIzNzU2Cis6MTAxQTMwMDAwMjAwMEYwMEEzODE3MTAwNDkwMDAwMDAwRDNCMDBENjk5Cis6MTAxQTQwMDAwMjAwMEYwMEE0ODE3MTAwNDkwMDAwMDAwNzNCODBENjBFCis6MTAxQTUwMDAwMjAwMEYwMEE1ODE3MTAwMkQwMDAwMDAwMDAwMDBEMUUwCis6MTAxQTYwMDAwMjAwMEYwMEE2ODE3MTAwNDkwMDAwMDA2NjM2MDBERDBCCis6MTAxQTcwMDAwMjAwMEYwMEE3ODE3MTAwNjkwMDAwMDA3NjNCMDBEREM1Cis6MTAxQTgwMDAwMjAwMEYwMEE4ODE3MTAwNjkwMDAwMDA3NjNCMDBEREI0Cis6MTAxQTkwMDAwMjAwMEYwMEE5ODE3MTAwNjkwMDAwMDA3NjNCMDBEREEzCis6MTAxQUEwMDAwMjAwMEYwMEFBODE3MTAwNjkwMDAwMDA3NjNCMDBERDkyCis6MTAxQUIwMDAwMjAwMEYwMEFCODE3MTAwNjkwMDAwMDA3NjNCMDBERDgxCis6MTAxQUMwMDAwMjAwMEYwMEFDODE3MTAwNjkwMDAwMDA3NjNCMDBERDcwCis6MTAxQUQwMDAwMjAwMEYwMEFEODE3MTAwNjkwMDAwMDA3NjNCMDBERDVGCis6MTAxQUUwMDAwMjAwMEYwMEFFODE3MTAwNjkwMDAwMDA3NjNCMDBERDRFCis6MTAxQUYwMDAwMjAwMEYwMEFGODE3MTAwNjEwMDAwMDA2QzA0MDBGNjZECis6MTAxQjAwMDAwMjAwMEYwMEIwODE3MTAwMzUwMDAwMDBFRDAwODBENkFBCis6MTAxQjEwMDAwMjAwMEYwMEIxODE3MTAwMTgwMDAwMDA4MTAwRUIzNzU2Cis6MTAxQjIwMDAwMjAwMEYwMEIyODE3MTAwNDkwMDAwMDAwRTNCMDBENjk4Cis6MTAxQjMwMDAwMjAwMEYwMEIzODE3MTAwNDkwMDAwMDAwODNCODBENjBECis6MTAxQjQwMDAwMjAwMEYwMEI0ODE3MTAwNDkwMDAwMDAwOTNCODBENUZDCis6MTAxQjUwMDAwMjAwMEYwMEI1ODE3MTAwM0QwMDAwMDA2RjAwODBGN0FBCis6MTAxQjYwMDAwMjAwMEYwMEI2ODE3MTAwMkQwMDAwMDA3RjAxMDZERDJDCis6MTAxQjcwMDAwMjAwMEYwMEI3ODE3MTAwMTgwMDAwMDA3QTNEN0YxRDQwCis6MTAxQjgwMDAwMjAwMEYwMEI4ODE3MTAwNDkwMDAwMDA2QzM2MDBEOEQ3Cis6MTAxQjkwMDAwMjAwMEYwMEI5ODE3MTAwNjkwMDAwMDBFQjM1MDBEODI4Cis6MTAxQkEwMDAwMjAwMEYwMEJBODE3MTAwNjkwMDAwMDBFNzMzMDBEODFECis6MTAxQkIwMDAwMjAwMEYwMEJCODE3MTAwNjkwMDAwMDBFRjM3MDBEODAwCis6MTAxQkMwMDAwMjAwMEYwMEJDODE3MTAwNDEwMDAwMDBFQzA3MDBENjRDCis6MTAxQkQwMDAwMjAwMEYwMEJEODE3MTAwNDEwMDAwMDA2QjA4ODBENTNDCis6MTAxQkUwMDAwMjAwMEYwMEJFODE3MTAwMzUwMDAwMDBFRDAwODBENkJDCis6MTAxQkYwMDAwMjAwMEYwMEJGODE3MTAwMTgwMDAwMDA4MTAwRUQzNzY2Cis6MTAxQzAwMDAwMjAwMEYwMEMwODE3MTAwM0YwMDAwMDA4MEZGRkZENDgwCis6MTAxQzEwMDAwMjAwMEYwMEMxODE3MTAwM0YwMDAwMDAwNDAwMDJENUU2Cis6MTAxQzIwMDAwMjAwMEYwMEMyODE3MTAwM0YwMDAwMDAwMTAwMThENUMyCis6MTAxQzMwMDAwMjAwMEYwMEMzODE3MTAwNDkwMDAwMDA2QTNCMDBERDEzCis6MTAxQzQwMDAwMjAwMEYwMEM0ODE3MTAwNjkwMDAwMDA2OTNCMDBEREUzCis6MTAxQzUwMDAwMjAwMEYwMEM1ODE3MTAwNjkwMDAwMDA2OTNCMDBEREQyCis6MTAxQzYwMDAwMjAwMEYwMEM2ODE3MTAwMjEwMDAwMDBFQTAwMDBENUNCCis6MTAxQzcwMDAwMjAwMEYwMEM3ODE3MTAwNDkwMDAwMDA2QTNCMEVEREMxCis6MTAxQzgwMDAwMjAwMEYwMEM4ODE3MTAwMzUwMDAwMDA3QTAwMDREMTA1Cis6MTAxQzkwMDAwMjAwMEYwMEM5ODE3MTAwMTgwMDAwMDA4MTAwRjUzN0IzCis6MTAxQ0EwMDAwMjAwMEYwMENBODE3MTAwM0YwMDAwMDA4MEZGRkZENEQ2Cis6MTAxQ0IwMDAwMjAwMEYwMENCODE3MTAwM0YwMDAwMDAwNDAwMDRENTNBCis6MTAxQ0MwMDAwMjAwMEYwMENDODE3MTAwM0YwMDAwMDAwMTAwMThENTE4Cis6MTAxQ0QwMDAwMjAwMEYwMENEODE3MTAwNjkwMDAwMDA2OTNCMDBERDRBCis6MTAxQ0UwMDAwMjAwMEYwMENFODE3MTAwNjkwMDAwMDA2OTNCMDBERDM5Cis6MTAxQ0YwMDAwMjAwMEYwMENGODE3MTAwNDkwMDAwMDA2QTNCMDBERDQ3Cis6MTAxRDAwMDAwMjAwMEYwMEQwODE3MTAwNTEwMDAwMDBFQTAwMDBGNUQwCis6MTAxRDEwMDAwMjAwMEYwMEQxODE3MTAwM0QwMDAwMDA2RjAwODBGN0NDCis6MTAxRDIwMDAwMjAwMEYwMEQyODE3MTAwM0QwMDAwMDA2RjAwODBGN0JCCis6MTAxRDMwMDAwMjAwMEYwMEQzODE3MTAwNDkwMDAwMDA2QTNCMEVEREY0Cis6MTAxRDQwMDAwMjAwMEYwMEQ0ODE3MTAwMzUwMDAwMDA3QTgwMDREMUI4Cis6MTAxRDUwMDAwMjAwMEYwMEQ1ODE3MTAwMTgwMDAwMDA4MTAwRjUzN0U2Cis6MTAxRDYwMDAwMjAwMEYwMEQ2ODE3MTAwM0YwMDAwMDAwNDdGN0ZDNzkyCis6MTAxRDcwMDAwMjAwMEYwMEQ3ODE3MTAwM0YwMDAwMDAwMTdGN0ZDNzg0Cis6MTAxRDgwMDAwMjAwMEYwMEQ4ODE3MTAwM0YwMDAwMDAwMDQwODBENkEzCis6MTAxRDkwMDAwMjAwMEYwMEQ5ODE3MTAwM0YwMDAwMDAwMEMwMDNEMTk0Cis6MTAxREEwMDAwMjAwMEYwMERBODE3MTAwMjUwMDAwMDBFMjAwMjBERTUxCis6MTAxREIwMDAwMjAwMEYwMERCODE3MTAwNDkwMDAwMDA0RTI3ODBERTI5Cis6MTAxREMwMDAwMjAwMEYwMERDODE3MTAwM0QwMDAwMDA2RjAwODBGNzExCis6MTAxREQwMDAwMjAwMEYwMEREODE3MTAwM0QwMDAwMDA2RjAwODBGNzAwCis6MTAxREUwMDAwMjAwMEYwMERFODE3MTAwMzUwMDAwMDBFMjAwMDBEMTJBCis6MTAxREYwMDAwMjAwMEYwMERGODE3MTAwMzUwMDAwMDBFRDAwODBENjg5Cis6MTAxRTAwMDAwMjAwMEYwMEUwODE3MTAwMTgwMDAwMDA4MTAwRjUzNzJBCis6MTAxRTEwMDAwMjAwMEYwMEUxODE3MTAwM0YwMDAwMDAwNDMwMDBERDhFCis6MTAxRTIwMDAwMjAwMEYwMEUyODE3MTAwM0YwMDAwMDAwMTAwMThERDk4Cis6MTAxRTMwMDAwMjAwMEYwMEUzODE3MTAwNjkwMDAwMDAzQTFEMDBERDFGCis6MTAxRTQwMDAwMjAwMEYwMEU0ODE3MTAwNjkwMDAwMDA3QTNEMDBEREFFCis6MTAxRTUwMDAwMjAwMEYwMEU1ODE3MTAwN0QwMDAwMDAxM0E3NjBDNzNDCis6MTAxRTYwMDAwMjAwMEYwMEU2ODE3MTAwMzEwMDAwMDA0MTAwODBDMEQ3Cis6MTAxRTcwMDAwMjAwMEYwMEU3ODE3MTAwMzEwMDAwMDA0ODAwMDBDNDNCCis6MTAxRTgwMDAwMjAwMEYwMEU4ODE3MTAwMzEwMDAwMDA0NTAwODBDMkFGCis6MTAxRTkwMDAwMjAwMEYwMEU5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTAxRUEwMDAwMjAwMEYwMEVBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAxRUIwMDAwMjAwMEYwMEVCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAxRUMwMDAwMjAwMEYwMEVDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAxRUQwMDAwMjAwMEYwMEVEODE3MTAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAxRUUwMDAwMjAwMEYwMEVFODE3MTAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAxRUYwMDAwMjAwMEYwMEVGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAxRjAwMDAwMjAwMEYwMEYwODE3MTAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAxRjEwMDAwMjAwMEYwMEYxODE3MTAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAxRjIwMDAwMjAwMEYwMEYyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAxRjMwMDAwMjAwMEYwMEYzODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAxRjQwMDAwMjAwMEYwMEY0ODE3MTAwMkQwMDAwMDAwMDAwMDBEQjkyCis6MTAxRjUwMDAwMjAwMEYwMEY1ODE3MTAwM0YwMDAwMDAwNDMwMDBERDM5Cis6MTAxRjYwMDAwMjAwMEYwMEY2ODE3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAxRjcwMDAwMjAwMEYwMEY3ODE3MTAwNjkwMDAwMDA3QTNEMDBERDZBCis6MTAxRjgwMDAwMjAwMEYwMEY4ODE3MTAwM0YwMDAwMDAwNDAwMDBERDM2Cis6MTAxRjkwMDAwMjAwMEYwMEY5ODE3MTAwNjkwMDAwMDA3QTNEMDBERDQ4Cis6MTAxRkEwMDAwMjAwMEYwMEZBODE3MTAwMkQwMDAwMDAwMDAwODBEM0I0Cis6MTAxRkIwMDAwMjAwMEYwMEZCODE3MTAwM0YwMDAwMDAwNDA0MDBEREZGCis6MTAxRkMwMDAwMjAwMEYwMEZDODE3MTAwM0YwMDAwMDAwMTAwMThERERECis6MTAxRkQwMDAwMjAwMEYwMEZEODE3MTAwNjkwMDAwMDAxNDBBMDBERDlECis6MTAxRkUwMDAwMjAwMEYwMEZFODE3MTAwNjkwMDAwMDA3QTNEMDBEREYzCis6MTAxRkYwMDAwMjAwMEYwMEZGODE3MTAwNDkwMDAwMDA5NDMzMDREMUZBCis6MTAyMDAwMDAwMjAwMEYwMDAwODI3MTAwM0YwMDAwMDA4NDA0MDBERDI4Cis6MTAyMDEwMDAwMjAwMEYwMDAxODI3MTAwM0YwMDAwMDAwMTAwMThERDg2Cis6MTAyMDIwMDAwMjAwMEYwMDAyODI3MTAwNjkwMDAwMDA2MjMxMDBEREQxCis6MTAyMDMwMDAwMjAwMEYwMDAzODI3MTAwNjkwMDAwMDA3QTNEMDBERDlDCis6MTAyMDQwMDAwMjAwMEYwMDA0ODI3MTAwM0YwMDAwMDAwNDA1MDBERDYzCis6MTAyMDUwMDAwMjAwMEYwMDA1ODI3MTAwM0YwMDAwMDAwMTAwMThERDQyCis6MTAyMDYwMDAwMjAwMEYwMDA2ODI3MTAwNjkwMDAwMDA5NTBBMDBERDgxCis6MTAyMDcwMDAwMjAwMEYwMDA3ODI3MTAwNjkwMDAwMDA3QTNEMDBERDU4Cis6MTAyMDgwMDAwMjAwMEYwMDA4ODI3MTAwNDkwMDAwMDA5NTMzMDREMTVFCis6MTAyMDkwMDAwMjAwMEYwMDA5ODI3MTAwM0YwMDAwMDA4NDA1MDBERDhFCis6MTAyMEEwMDAwMjAwMEYwMDBBODI3MTAwM0YwMDAwMDAwMTAwMThEREVECis6MTAyMEIwMDAwMjAwMEYwMDBCODI3MTAwNjkwMDAwMDA2MjMxMDBERDM4Cis6MTAyMEMwMDAwMjAwMEYwMDBDODI3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAyMEQwMDAwMjAwMEYwMDBEODI3MTAwM0YwMDAwMDAwNDA2MDBEREM5Cis6MTAyMEUwMDAwMjAwMEYwMDBFODI3MTAwM0YwMDAwMDAwMTAwMThEREE5Cis6MTAyMEYwMDAwMjAwMEYwMDBGODI3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAyMTAwMDAwMjAwMEYwMDEwODI3MTAwM0YwMDAwMDA4NDAwMDBERDFCCis6MTAyMTEwMDAwMjAwMEYwMDExODI3MTAwNjkwMDAwMDA3QTNEMDBEREFECis6MTAyMTIwMDAwMjAwMEYwMDEyODI3MTAwM0YwMDAwMDAwNDAwMDBERDc5Cis6MTAyMTMwMDAwMjAwMEYwMDEzODI3MTAwM0YwMDAwMDAwMTAwMThERDUzCis6MTAyMTQwMDAwMjAwMEYwMDE0ODI3MTAwNjkwMDAwMDAxNjBCMDBERDEwCis6MTAyMTUwMDAwMjAwMEYwMDE1ODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyMTYwMDAwMjAwMEYwMDE2ODI3MTAwM0YwMDAwMDAwNDEwMDBERDI1Cis6MTAyMTcwMDAwMjAwMEYwMDE3ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyMTgwMDAwMjAwMEYwMDE4ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyMTkwMDAwMjAwMEYwMDE5ODI3MTAwM0YwMDAwMDAwNDAwMDBERDAyCis6MTAyMUEwMDAwMjAwMEYwMDFBODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyMUIwMDAwMjAwMEYwMDFCODI3MTAwM0YwMDAwMDA4NDEwMDBERDUwCis6MTAyMUMwMDAwMjAwMEYwMDFDODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyMUQwMDAwMjAwMEYwMDFEODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyMUUwMDAwMjAwMEYwMDFFODI3MTAwM0YwMDAwMDAwNDgwMDFERDJDCis6MTAyMUYwMDAwMjAwMEYwMDFGODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyMjAwMDAwMjAwMEYwMDIwODI3MTAwM0YwMDAwMDAwNDExMDBERDc5Cis6MTAyMjEwMDAwMjAwMEYwMDIxODI3MTAwM0YwMDAwMDAwMTAwMThERDY0Cis6MTAyMjIwMDAwMjAwMEYwMDIyODI3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAyMjMwMDAwMjAwMEYwMDIzODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyMjQwMDAwMjAwMEYwMDI0ODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyMjUwMDAwMjAwMEYwMDI1ODI3MTAwM0YwMDAwMDA4NDExMDBEREE0Cis6MTAyMjYwMDAwMjAwMEYwMDI2ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyMjcwMDAwMjAwMEYwMDI3ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyMjgwMDAwMjAwMEYwMDI4ODI3MTAwM0YwMDAwMDAwNDAwMTZEREVDCis6MTAyMjkwMDAwMjAwMEYwMDI5ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyMkEwMDAwMjAwMEYwMDJBODI3MTAwM0YwMDAwMDAwNDEyMDBERENFCis6MTAyMkIwMDAwMjAwMEYwMDJCODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyMkMwMDAwMjAwMEYwMDJDODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyMkQwMDAwMjAwMEYwMDJEODI3MTAwM0YwMDAwMDAwNDAwMDBEREFECis6MTAyMkUwMDAwMjAwMEYwMDJFODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyMkYwMDAwMjAwMEYwMDJGODI3MTAwM0YwMDAwMDA4NDEyMDBEREY5Cis6MTAyMzAwMDAwMjAwMEYwMDMwODI3MTAwM0YwMDAwMDAwMTAwMThERDY0Cis6MTAyMzEwMDAwMjAwMEYwMDMxODI3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAyMzIwMDAwMjAwMEYwMDMyODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyMzMwMDAwMjAwMEYwMDMzODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyMzQwMDAwMjAwMEYwMDM0ODI3MTAwM0YwMDAwMDAwNDEzMDBERDIyCis6MTAyMzUwMDAwMjAwMEYwMDM1ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyMzYwMDAwMjAwMEYwMDM2ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyMzcwMDAwMjAwMEYwMDM3ODI3MTAwM0YwMDAwMDAwNDAwMDBERDAyCis6MTAyMzgwMDAwMjAwMEYwMDM4ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyMzkwMDAwMjAwMEYwMDM5ODI3MTAwM0YwMDAwMDA4NDEzMDBERDRECis6MTAyM0EwMDAwMjAwMEYwMDNBODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyM0IwMDAwMjAwMEYwMDNCODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyM0MwMDAwMjAwMEYwMDNDODI3MTAwM0YwMDAwMDAwNDAwMDVEREE4Cis6MTAyM0QwMDAwMjAwMEYwMDNEODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyM0UwMDAwMjAwMEYwMDNFODI3MTAwM0YwMDAwMDAwNDIwMDBERDZCCis6MTAyM0YwMDAwMjAwMEYwMDNGODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyNDAwMDAwMjAwMEYwMDQwODI3MTAwNjkwMDAwMDA3QTNEMDBERDhCCis6MTAyNDEwMDAwMjAwMEYwMDQxODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyNDIwMDAwMjAwMEYwMDQyODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyNDMwMDAwMjAwMEYwMDQzODI3MTAwM0YwMDAwMDA4NDIwMDBERDk1Cis6MTAyNDQwMDAwMjAwMEYwMDQ0ODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyNDUwMDAwMjAwMEYwMDQ1ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyNDYwMDAwMjAwMEYwMDQ2ODI3MTAwM0YwMDAwMDAwNDkwMDFERDcxCis6MTAyNDcwMDAwMjAwMEYwMDQ3ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyNDgwMDAwMjAwMEYwMDQ4ODI3MTAwM0YwMDAwMDAwNDIxMDBEREJGCis6MTAyNDkwMDAwMjAwMEYwMDQ5ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyNEEwMDAwMjAwMEYwMDRBODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyNEIwMDAwMjAwMEYwMDRCODI3MTAwM0YwMDAwMDA4NDAwMDBERDJECis6MTAyNEMwMDAwMjAwMEYwMDRDODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyNEQwMDAwMjAwMEYwMDREODI3MTAwM0YwMDAwMDA4NDIxMDBEREVBCis6MTAyNEUwMDAwMjAwMEYwMDRFODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyNEYwMDAwMjAwMEYwMDRGODI3MTAwNjkwMDAwMDA3QTNEMDBERDhDCis6MTAyNTAwMDAwMjAwMEYwMDUwODI3MTAwM0YwMDAwMDAwNDAwMDBERDU3Cis6MTAyNTEwMDAwMjAwMEYwMDUxODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyNTIwMDAwMjAwMEYwMDUyODI3MTAwM0YwMDAwMDAwNDIyMDBERDEzCis6MTAyNTMwMDAwMjAwMEYwMDUzODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyNTQwMDAwMjAwMEYwMDU0ODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyNTUwMDAwMjAwMEYwMDU1ODI3MTAwM0YwMDAwMDA4NDAyMDBERDgwCis6MTAyNTYwMDAwMjAwMEYwMDU2ODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyNTcwMDAwMjAwMEYwMDU3ODI3MTAwM0YwMDAwMDA4NDIyMDBERDNFCis6MTAyNTgwMDAwMjAwMEYwMDU4ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyNTkwMDAwMjAwMEYwMDU5ODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyNUEwMDAwMjAwMEYwMDVBODI3MTAwM0YwMDAwMDAwNDAwMDBEREFECis6MTAyNUIwMDAwMjAwMEYwMDVCODI3MTAwNjkwMDAwMDA3QTNEMDBEREJGCis6MTAyNUMwMDAwMjAwMEYwMDVDODI3MTAwM0YwMDAwMDAwNDIzMDBERDY4Cis6MTAyNUQwMDAwMjAwMEYwMDVEODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyNUUwMDAwMjAwMEYwMDVFODI3MTAwNjkwMDAwMDA3QTNEMDBERDhDCis6MTAyNUYwMDAwMjAwMEYwMDVGODI3MTAwM0YwMDAwMDAwNDAwMDBERDU4Cis6MTAyNjAwMDAwMjAwMEYwMDYwODI3MTAwNjkwMDAwMDA3QTNEMDBERDY5Cis6MTAyNjEwMDAwMjAwMEYwMDYxODI3MTAwM0YwMDAwMDAwNDE4MDBERDFECis6MTAyNjIwMDAwMjAwMEYwMDYyODI3MTAwM0YwMDAwMDAwMTAwMThERDBGCis6MTAyNjMwMDAwMjAwMEYwMDYzODI3MTAwNjkwMDAwMDA5NzBCMDBERDRCCis6MTAyNjQwMDAwMjAwMEYwMDY0ODI3MTAwNjkwMDAwMDA3QTNEMDBERDI1Cis6MTAyNjUwMDAwMjAwMEYwMDY1ODI3MTAwNDkwMDAwMDA5NzMzMDREMTI5Cis6MTAyNjYwMDAwMjAwMEYwMDY2ODI3MTAwM0YwMDAwMDA4NDE4MDBERDQ4Cis6MTAyNjcwMDAwMjAwMEYwMDY3ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyNjgwMDAwMjAwMEYwMDY4ODI3MTAwNjkwMDAwMDA2MjMxMDBERDA1Cis6MTAyNjkwMDAwMjAwMEYwMDY5ODI3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAyNkEwMDAwMjAwMEYwMDZBODI3MTAwM0YwMDAwMDAwNDE5MDBERDgzCis6MTAyNkIwMDAwMjAwMEYwMDZCODI3MTAwM0YwMDAwMDAwMTAwMThERDc2Cis6MTAyNkMwMDAwMjAwMEYwMDZDODI3MTAwNjkwMDAwMDAxODBDMDBERDMwCis6MTAyNkQwMDAwMjAwMEYwMDZEODI3MTAwNjkwMDAwMDA3QTNEMDBERDhDCis6MTAyNkUwMDAwMjAwMEYwMDZFODI3MTAwNDkwMDAwMDA5ODMzMDREMThGCis6MTAyNkYwMDAwMjAwMEYwMDZGODI3MTAwM0YwMDAwMDA4NDE5MDBEREFFCis6MTAyNzAwMDAwMjAwMEYwMDcwODI3MTAwM0YwMDAwMDAwMTAwMThERDIwCis6MTAyNzEwMDAwMjAwMEYwMDcxODI3MTAwNjkwMDAwMDA2MjMxMDBERDZCCis6MTAyNzIwMDAwMjAwMEYwMDcyODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyNzMwMDAwMjAwMEYwMDczODI3MTAwM0YwMDAwMDAwNDFBMDBEREU4Cis6MTAyNzQwMDAwMjAwMEYwMDc0ODI3MTAwM0YwMDAwMDAwMTAwMThERERDCis6MTAyNzUwMDAwMjAwMEYwMDc1ODI3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAyNzYwMDAwMjAwMEYwMDc2ODI3MTAwM0YwMDAwMDAwNDAwMDBERENGCis6MTAyNzcwMDAwMjAwMEYwMDc3ODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyNzgwMDAwMjAwMEYwMDc4ODI3MTAwM0YwMDAwMDA4NDFBMDBERDEzCis6MTAyNzkwMDAwMjAwMEYwMDc5ODI3MTAwM0YwMDAwMDAwMTAwMThERDg3Cis6MTAyN0EwMDAwMjAwMEYwMDdBODI3MTAwNjkwMDAwMDAxNjBCMDBERDQ0Cis6MTAyN0IwMDAwMjAwMEYwMDdCODI3MTAwNjkwMDAwMDA3QTNEMDBERDlECis6MTAyN0MwMDAwMjAwMEYwMDdDODI3MTAwM0YwMDAwMDAwNDFDMDBERDRECis6MTAyN0QwMDAwMjAwMEYwMDdEODI3MTAwM0YwMDAwMDAwMTAwMThERDQzCis6MTAyN0UwMDAwMjAwMEYwMDdFODI3MTAwNjkwMDAwMDA5OTBDMDBERDdDCis6MTAyN0YwMDAwMjAwMEYwMDdGODI3MTAwNjkwMDAwMDA3QTNEMDBERDU5Cis6MTAyODAwMDAwMjAwMEYwMDgwODI3MTAwM0YwMDAwMDA4NDFDMDBERDg4Cis6MTAyODEwMDAwMjAwMEYwMDgxODI3MTAwM0YwMDAwMDAwMTAwMThEREZFCis6MTAyODIwMDAwMjAwMEYwMDgyODI3MTAwNjkwMDAwMDAxQTBEMDBEREI1Cis6MTAyODMwMDAwMjAwMEYwMDgzODI3MTAwNjkwMDAwMDA3QTNEMDBERDE0Cis6MTAyODQwMDAwMjAwMEYwMDg0ODI3MTAwM0YwMDAwMDAwNDFEMDBEREMzCis6MTAyODUwMDAwMjAwMEYwMDg1ODI3MTAwM0YwMDAwMDAwMTAwMThEREJBCis6MTAyODYwMDAwMjAwMEYwMDg2ODI3MTAwNjkwMDAwMDA5QjBEMDBEREYwCis6MTAyODcwMDAwMjAwMEYwMDg3ODI3MTAwNjkwMDAwMDA3QTNEMDBEREQwCis6MTAyODgwMDAwMjAwMEYwMDg4ODI3MTAwNDkwMDAwMDA5QjMzMDREMUQwCis6MTAyODkwMDAwMjAwMEYwMDg5ODI3MTAwM0YwMDAwMDA4NDFEMDBEREVFCis6MTAyOEEwMDAwMjAwMEYwMDhBODI3MTAwM0YwMDAwMDAwMTAwMThERDY1Cis6MTAyOEIwMDAwMjAwMEYwMDhCODI3MTAwNjkwMDAwMDA2MjMxMDBEREIwCis6MTAyOEMwMDAwMjAwMEYwMDhDODI3MTAwNjkwMDAwMDA3QTNEMDBERDdCCis6MTAyOEQwMDAwMjAwMEYwMDhEODI3MTAwM0YwMDAwMDAwNDFFMDBERDI5Cis6MTAyOEUwMDAwMjAwMEYwMDhFODI3MTAwM0YwMDAwMDAwMTAwMThERDIxCis6MTAyOEYwMDAwMjAwMEYwMDhGODI3MTAwNjkwMDAwMDAxQzBFMDBEREQ1Cis6MTAyOTAwMDAwMjAwMEYwMDkwODI3MTAwNjkwMDAwMDA3QTNEMDBERDM2Cis6MTAyOTEwMDAwMjAwMEYwMDkxODI3MTAwM0YwMDAwMDAwNDAxMDBERDAxCis6MTAyOTIwMDAwMjAwMEYwMDkyODI3MTAwM0YwMDAwMDAwMTAwMThERERDCis6MTAyOTMwMDAwMjAwMEYwMDkzODI3MTAwNjkwMDAwMDA3QTNEMDBERDAzCis6MTAyOTQwMDAwMjAwMEYwMDk0ODI3MTAwM0YwMDAwMDAwNDBGMDBEREMwCis6MTAyOTUwMDAwMjAwMEYwMDk1ODI3MTAwNjkwMDAwMDA3QTNEMDBEREUxCis6MTAyOTYwMDAwMjAwMEYwMDk2ODI3MTAwN0QwMDAwMDAxM0E3NjBDNzZGCis6MTAyOTcwMDAwMjAwMEYwMDk3ODI3MTAwMzEwMDAwMDA0MTAwODBDMDBBCis6MTAyOTgwMDAwMjAwMEYwMDk4ODI3MTAwMzEwMDAwMDA0ODAwMDBDNDZFCis6MTAyOTkwMDAwMjAwMEYwMDk5ODI3MTAwMzEwMDAwMDA0NTAwODBDMkUyCis6MTAyOUEwMDAwMjAwMEYwMDlBODI3MTAwMzEwMDAwMDA2RDAwODBENjk1Cis6MTAyOUIwMDAwRjAwMEYwMDY0MDA3MDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAyOUMwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMTAwMDAwMDA0MDAwMEMyCis6MTAyOUQwMDA2NDAwMDAwMDU0MDAwMDAwMDAwMDAwMDAwMDI0MDAwMDFCCis6MTAyOUUwMDAwMDI4MDAwMDAwMDQwMDAwODAyODAwMDA4MDAxMDAwMDkyCis6MTAyOUYwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAyQTAwMDA1MTAwMDAwMDdEMDEwMDAwMDgwMDAwMDA1MTAwMDAwMDlFCis6MTAyQTEwMDA1RDAwMDAwMDAwMDAwMDAwMDkwMDAwMDAwMDUwMDAwMDAwCis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMEYwMDBGMDBGNDAxNzAwMDIzCis6MTAyQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDU2Cis6MTAyQTQwMDAwMDAxMDAwMDAwMDQwMDAwNjQwMDAwMDA1NDAwMDAwMEM5Cis6MTAyQTUwMDAwMDAwMDAwMDAwMjQwMDAwMDAyODAwMDAwMDA0MDAwMDI2Cis6MTAyQTYwMDA4MDI4MDAwMDgwMDEwMDAwMDMwMDAwMDAwMDAwMDAwMDNBCis6MTAyQTcwMDAwMDAwMDAwMDAwMDAwMDAwNTEwMDAwMDA3RDAxMDAwMDg3Cis6MTAyQTgwMDAwODAwMDAwMDUxMDAwMDAwNUQwMDAwMDAwMDAwMDAwMDkwCis6MTAyQTkwMDAwOTAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAyQUEwMDAwMjAwMEYwMDAwMDA3MDAwMDEwMDAwMDAwMDAwMDAwMEE0Cis6MTAyQUIwMDAwMjAwMEYwMDAwMDA3MDAwMDEwMDAwMDAwMDAwMDAwMDk0Cis6MTAyQUMwMDAwMjAwMEYwMDAwODA3MTAwMjUwMDAwMDAwMjAwMEVEREYyCis6MTAyQUQwMDAwMjAwMEYwMDAxODA3MTAwMDQwMDAwMDA3NjNCRDEwMTZDCis6MTAyQUUwMDAwMjAwMEYwMDAyODA3MTAwMjUwMDAwMDA4MjAwMEVERDUwCis6MTAyQUYwMDAwMjAwMEYwMDAzODA3MTAwMDQwMDAwMDA3NjNCODkwMjkxCis6MTAyQjAwMDAwMjAwMEYwMDA0ODA3MTAwMjUwMDAwMDAwMjAxMEVEREFDCis6MTAyQjEwMDAwMjAwMEYwMDA1ODA3MTAwMDQwMDAwMDA3NjNCODUwMjcyCis6MTAyQjIwMDAwMjAwMEYwMDA2ODA3MTAwMjUwMDAwMDA4MjAxMEVERDBBCis6MTAyQjMwMDAwMjAwMEYwMDA3ODA3MTAwMDQwMDAwMDA3NjNCRkQwM0Q3Cis6MTAyQjQwMDAwMjAwMEYwMDA4ODA3MTAwMDkwMDAwMDA3NjNCODFDRjcxCis6MTAyQjUwMDAwMjAwMEYwMDA5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyQjYwMDAwMjAwMEYwMDBBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyQjcwMDAwMjAwMEYwMDBCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyQjgwMDAwMjAwMEYwMDBDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyQjkwMDAwMjAwMEYwMDBEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyQkEwMDAwMjAwMEYwMDBFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQkIwMDAwMjAwMEYwMDBGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyQkMwMDAwMjAwMEYwMDEwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyQkQwMDAwMjAwMEYwMDExODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyQkUwMDAwMjAwMEYwMDEyODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyQkYwMDAwMjAwMEYwMDEzODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyQzAwMDAwMjAwMEYwMDE0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyQzEwMDAwMjAwMEYwMDE1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyQzIwMDAwMjAwMEYwMDE2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyQzMwMDAwMjAwMEYwMDE3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyQzQwMDAwMjAwMEYwMDE4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyQzUwMDAwMjAwMEYwMDE5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyQzYwMDAwMjAwMEYwMDFBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyQzcwMDAwMjAwMEYwMDFCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyQzgwMDAwMjAwMEYwMDFDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyQzkwMDAwMjAwMEYwMDFEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQ0EwMDAwMjAwMEYwMDFFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyQ0IwMDAwMjAwMEYwMDFGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyQ0MwMDAwMjAwMEYwMDIwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyQ0QwMDAwMjAwMEYwMDIxODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyQ0UwMDAwMjAwMEYwMDIyODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyQ0YwMDAwMjAwMEYwMDIzODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyRDAwMDAwMjAwMEYwMDI0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyRDEwMDAwMjAwMEYwMDI1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyRDIwMDAwMjAwMEYwMDI2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyRDMwMDAwMjAwMEYwMDI3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyRDQwMDAwMjAwMEYwMDI4ODA3MTAwNDkwMDAwMDAwMDNCMDBDMDE1Cis6MTAyRDUwMDAwMjAwMEYwMDI5ODA3MTAwNDkwMDAwMDAwMjNCODBDMDgyCis6MTAyRDYwMDAwMjAwMEYwMDJBODA3MTAwNDkwMDAwMDAwMzNCMDBDMUVGCis6MTAyRDcwMDAwMjAwMEYwMDJCODA3MTAwNDkwMDAwMDAwNDNCODBDMTVECis6MTAyRDgwMDAwMjAwMEYwMDJDODA3MTAwMjkwMDAwMDA3NjAwNjBERjM3Cis6MTAyRDkwMDAwMjAwMEYwMDJEODA3MTAwNDkwMDAwMDA3RDNCNDRERkUwCis6MTAyREEwMDAwMjAwMEYwMDJFODA3MTAwNzkwMDAwMDA3NjkwNjBGRDE3Cis6MTAyREIwMDAwMjAwMEYwMDJGODA3MTAwM0QwMDAwMDA2RjAwODBGN0JGCis6MTAyREMwMDAwMjAwMEYwMDMwODA3MTAwM0QwMDAwMDA2RjAwODBGN0FFCis6MTAyREQwMDAwMjAwMEYwMDMxODA3MTAwM0QwMDAwMDA2RjAwODBGNzlECis6MTAyREUwMDAwMjAwMEYwMDMyODA3MTAwM0QwMDAwMDA2RjAwODBGNzhDCis6MTAyREYwMDAwMjAwMEYwMDMzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyRTAwMDAwMjAwMEYwMDM0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyRTEwMDAwMjAwMEYwMDM1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyRTIwMDAwMjAwMEYwMDM2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyRTMwMDAwMjAwMEYwMDM3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyRTQwMDAwMjAwMEYwMDM4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyRTUwMDAwMjAwMEYwMDM5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyRTYwMDAwMjAwMEYwMDNBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyRTcwMDAwMjAwMEYwMDNCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyRTgwMDAwMjAwMEYwMDNDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyRTkwMDAwMjAwMEYwMDNEODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyRUEwMDAwMjAwMEYwMDNFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyRUIwMDAwMjAwMEYwMDNGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyRUMwMDAwMjAwMEYwMDQwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyRUQwMDAwMjAwMEYwMDQxODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyRUUwMDAwMjAwMEYwMDQyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyRUYwMDAwMjAwMEYwMDQzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyRjAwMDAwMjAwMEYwMDQ0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyRjEwMDAwMjAwMEYwMDQ1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyRjIwMDAwMjAwMEYwMDQ2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAyRjMwMDAwMjAwMEYwMDQ3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyRjQwMDAwMjAwMEYwMDQ4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyRjUwMDAwMjAwMEYwMDQ5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAyRjYwMDAwMjAwMEYwMDRBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyRjcwMDAwMjAwMEYwMDRCODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAyRjgwMDAwMjAwMEYwMDRDODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAyRjkwMDAwMjAwMEYwMDREODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyRkEwMDAwMjAwMEYwMDRFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyRkIwMDAwMjAwMEYwMDRGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyRkMwMDAwMjAwMEYwMDUwODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAyRkQwMDAwMjAwMEYwMDUxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyRkUwMDAwMjAwMEYwMDUyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyRkYwMDAwMjAwMEYwMDUzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAzMDAwMDAwMjAwMEYwMDU0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAzMDEwMDAwMjAwMEYwMDU1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAzMDIwMDAwMjAwMEYwMDU2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAzMDMwMDAwMjAwMEYwMDU3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzMDQwMDAwMjAwMEYwMDU4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzMDUwMDAwMjAwMEYwMDU5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzMDYwMDAwMjAwMEYwMDVBODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzMDcwMDAwMjAwMEYwMDVCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzMDgwMDAwMjAwMEYwMDVDODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzMDkwMDAwMjAwMEYwMDVEODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzMEEwMDAwMjAwMEYwMDVFODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzMEIwMDAwMjAwMEYwMDVGODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzMEMwMDAwMjAwMEYwMDYwODA3MTAwM0YwMDAwMDAwMzAwMDBERjdECis6MTAzMEQwMDAwMjAwMEYwMDYxODA3MTAwMkQwMDAwMDA4MTBGRTBERDEzCis6MTAzMEUwMDAwMjAwMEYwMDYyODA3MTAwM0YwMDAwMDA4MzAyODBERDVCCis6MTAzMEYwMDAwMjAwMEYwMDYzODA3MTAwMkQwMDAwMDA4MDAxMDRERERDCis6MTAzMTAwMDAwMjAwMEYwMDY0ODA3MTAwN0QwMDAwMDA4MDAwMTVGRDRBCis6MTAzMTEwMDAwMjAwMEYwMDY1ODA3MTAwN0EwMDAwMDA3NjNCMjAxMEVECis6MTAzMTIwMDAwMjAwMEYwMDY2ODA3MTAwN0EwMDAwMDA3NjdCMjAzMDdDCis6MTAzMTMwMDAwMjAwMEYwMDY3ODA3MTAwMjEwMDAwMDA2MDAwMjREMEIxCis6MTAzMTQwMDAwMjAwMEYwMDY4ODA3MTAwM0YwMDAwMDAwNDAxMDBEREY0Cis6MTAzMTUwMDAwMjAwMEYwMDY5ODA3MTAwM0YwMDAwMDA4MTAyNDBERDI1Cis6MTAzMTYwMDAwMjAwMEYwMDZBODA3MTAwNzkwMDAwMDAwM0JCMzFEREFFCis6MTAzMTcwMDAwMjAwMEYwMDZCODA3MTAwNzkwMDAwMDAwNEZCMzFERDVDCis6MTAzMTgwMDAwMjAwMEYwMDZDODA3MTAwNzkwMDAwMDA3NkJCMzFERDE5Cis6MTAzMTkwMDAwMjAwMEYwMDZEODA3MTAwNzkwMDAwMDA3NkZCMzFEREM4Cis6MTAzMUEwMDAwMjAwMEYwMDZFODA3MTAwNzkwMDAwMDAwMTAxMjFGRDE2Cis6MTAzMUIwMDAwMjAwMEYwMDZGODA3MTAwN0QwMDAwMDA4MTQwMkJGRDM4Cis6MTAzMUMwMDAwMjAwMEYwMDcwODA3MTAwNDAwMDAwMDAwMjMwMDAzRERFCis6MTAzMUQwMDAwMjAwMEYwMDcxODA3MTAwNDgwMDAwMDAwMjNCMDAxRERBCis6MTAzMUUwMDAwMjAwMEYwMDcyODA3MTAwNzkwMDAwMDA3NjdCMjFERDAzCis6MTAzMUYwMDAwMjAwMEYwMDczODA3MTAwMkQwMDAwMDA3RjA1MDREREM4Cis6MTAzMjAwMDAwMjAwMEYwMDc0ODA3MTAwMTgwMDAwMDA3NjNCN0YzREMzCis6MTAzMjEwMDAwMjAwMEYwMDc1ODA3MTAwM0QwMDAwMDA2RjAwODBGNzE0Cis6MTAzMjIwMDAwMjAwMEYwMDc2ODA3MTAwM0QwMDAwMDA2RjAwODBGNzAzCis6MTAzMjMwMDAwMjAwMEYwMDc3ODA3MTAwM0QwMDAwMDA2RjAwODBGN0YyCis6MTAzMjQwMDAwMjAwMEYwMDc4ODA3MTAwMjEwMDAwMDA3NjFGMzdFMzM0Cis6MTAzMjUwMDAwMjAwMEYwMDc5ODA3MTAwNDkwMDAwMDA3OTNCMDBERDE5Cis6MTAzMjYwMDAwMjAwMEYwMDdBODA3MTAwNzkwMDAwMDA3NkJCMjFERDNBCis6MTAzMjcwMDAwMjAwMEYwMDdCODA3MTAwNDkwMDAwMDA3OTNCMDBEREY3Cis6MTAzMjgwMDAwMjAwMEYwMDdDODA3MTAwNzkwMDAwMDA3NkJCMjFERDE4Cis6MTAzMjkwMDAwMjAwMEYwMDdEODA3MTAwNDkwMDAwMDA3OTNCMDBEREQ1Cis6MTAzMkEwMDAwMjAwMEYwMDdFODA3MTAwNzkwMDAwMDA3NkJCMjFEREY2Cis6MTAzMkIwMDAwMjAwMEYwMDdGODA3MTAwNzkwMDAwMDA3NjkwNjBGREIxCis6MTAzMkMwMDAwMjAwMEYwMDgwODA3MTAwNzkwMDAwMDA3NkZCMjFERDk0Cis6MTAzMkQwMDAwMjAwMEYwMDgxODA3MTAwM0YwMDAwMDA4MzAwMDBERkNBCis6MTAzMkUwMDAwMjAwMEYwMDgyODA3MTAwM0QwMDAwMDA2RjAwODBGNzM3Cis6MTAzMkYwMDAwMjAwMEYwMDgzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAzMzAwMDAwMjAwMEYwMDg0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzMzEwMDAwMjAwMEYwMDg1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzMzIwMDAwMjAwMEYwMDg2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzMzMwMDAwMjAwMEYwMDg3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzMzQwMDAwMjAwMEYwMDg4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzMzUwMDAwMjAwMEYwMDg5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzMzYwMDAwMjAwMEYwMDhBODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzMzcwMDAwMjAwMEYwMDhCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzMzgwMDAwMjAwMEYwMDhDODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzMzkwMDAwMjAwMEYwMDhEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzM0EwMDAwMjAwMEYwMDhFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAzM0IwMDAwMjAwMEYwMDhGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAzM0MwMDAwMjAwMEYwMDkwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTAzM0QwMDAwMjAwMEYwMDkxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAzM0UwMDAwMjAwMEYwMDkyODA3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAzM0YwMDAwMjAwMEYwMDkzODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTAzNDAwMDAwMjAwMEYwMDk0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzNDEwMDAwMjAwMEYwMDk1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzNDIwMDAwMjAwMEYwMDk2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzNDMwMDAwMjAwMEYwMDk3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzNDQwMDAwMjAwMEYwMDk4ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzNDUwMDAwMjAwMEYwMDk5ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzNDYwMDAwMjAwMEYwMDlBODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzNDcwMDAwMjAwMEYwMDlCODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzNDgwMDAwMjAwMEYwMDlDODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzNDkwMDAwMjAwMEYwMDlEODA3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAzNEEwMDAwMjAwMEYwMDlFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAzNEIwMDAwMjAwMEYwMDlGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTAzNEMwMDAwMjAwMEYwMEEwODA3MTAwMkQwMDAwMDAwMzA4MDhEMDRBCis6MTAzNEQwMDAwMjAwMEYwMEExODA3MTAwMDgwMDAwMDA3NkZCQjUyMUZBCis6MTAzNEUwMDAwMjAwMEYwMEEyODA3MTAwNzkwMDAwMDA4MTAwMDFERDYwCis6MTAzNEYwMDAwMjAwMEYwMEEzODA3MTAwNzkwMDAwMDAwMjgxMDFERDRECis6MTAzNTAwMDAwMjAwMEYwMEE0ODA3MTAwN0QwMDAwMDA4MzgwMDFGRDk3Cis6MTAzNTEwMDAwMjAwMEYwMEE1ODA3MTAwNzkwMDAwMDA3NjNCOTBEMDdBCis6MTAzNTIwMDAwMjAwMEYwMEE2ODA3MTAwNDkwMDAwMDA3QTNCNThEMENECis6MTAzNTMwMDAwMjAwMEYwMEE3ODA3MTAwNDkwMDAwMDAwMDNCMDREMjg4Cis6MTAzNTQwMDAwMjAwMEYwMEE4ODA3MTAwM0QwMDAwMDAwMzAwNDBERDc0Cis6MTAzNTUwMDAwMjAwMEYwMEE5ODA3MTAwMjQwMDAwMDA2NDAyMDAzMjA0Cis6MTAzNTYwMDAwMjAwMEYwMEFBODA3MTAwM0QwMDAwMDAwM0Y4N0ZERDFCCis6MTAzNTcwMDAwMjAwMEYwMEFCODA3MTAwMjkwMDAwMDA3QTAxMjBEMDBBCis6MTAzNTgwMDAwMjAwMEYwMEFDODA3MTAwNDkwMDAwMDAwRTNCQTREMDg3Cis6MTAzNTkwMDAwMjAwMEYwMEFEODA3MTAwMkQwMDAwMDBGRjQyMDRERDJECis6MTAzNUEwMDAwMjAwMEYwMEFFODA3MTAwMTgwMDAwMDA3NjNCN0YzREU2Cis6MTAzNUIwMDAwMjAwMEYwMEFGODA3MTAwMkQwMDAwMDA4MjAwMDZEREM4Cis6MTAzNUMwMDAwMjAwMEYwMEIwODA3MTAwMzgwMDAwMDBFMDAxMDAzMDAwCis6MTAzNUQwMDAwMjAwMEYwMEIxODA3MTAwMzkwMDAwMDA2MDAxMDBEMENFCis6MTAzNUUwMDAwMjAwMEYwMEIyODA3MTAwNzkwMDAwMDA3QzNCQjFEMTc1Cis6MTAzNUYwMDAwMjAwMEYwMEIzODA3MTAwMkQwMDAwMDBFMzBGRTBERDNBCis6MTAzNjAwMDAwMjAwMEYwMEI0ODA3MTAwNDkwMDAwMDBFNDMwODBEMDU3Cis6MTAzNjEwMDAwMjAwMEYwMEI1ODA3MTAwNzkwMDAwMDA3QzdCMzFERDc1Cis6MTAzNjIwMDAwMjAwMEYwMEI2ODA3MTAwNzkwMDAwMDA3QzNCMzFEREE0Cis6MTAzNjMwMDAwMjAwMEYwMEI3ODA3MTAwN0QwMDAwMDA4MjQwMzdGRDVFCis6MTAzNjQwMDAwMjAwMEYwMEI4ODA3MTAwMDgwMDAwMDA3NjNCN0QwMTg5Cis6MTAzNjUwMDAwMjAwMEYwMEI5ODA3MTAwM0QwMDAwMDA2RjAwODBGNzhDCis6MTAzNjYwMDAwMjAwMEYwMEJBODA3MTAwM0QwMDAwMDA2RjAwODBGNzdCCis6MTAzNjcwMDAwMjAwMEYwMEJCODA3MTAwNDkwMDAwMDA4NzAzMDBERERECis6MTAzNjgwMDAwMjAwMEYwMEJDODA3MTAwNzkwMDAwMDAwODA0MzFEREU5Cis6MTAzNjkwMDAwMjAwMEYwMEJEODA3MTAwNzkwMDAwMDA3QTdEMzFEREVECis6MTAzNkEwMDAwMjAwMEYwMEJFODA3MTAwNDkwMDAwMDA3QzNCMDBEMzg3Cis6MTAzNkIwMDAwMjAwMEYwMEJGODA3MTAwNzkwMDAwMDA3Q0JCODFEMzQ1Cis6MTAzNkMwMDAwMjAwMEYwMEMwODA3MTAwN0YwMDAwMDA3Q0IyMDFEMUI5Cis6MTAzNkQwMDAwMjAwMEYwMEMxODA3MTAwNDgwMDAwMDA2NDMyMDA1MUY4Cis6MTAzNkUwMDAwMjAwMEYwMEMyODA3MTAwM0QwMDAwMDAwMzAwNDBEREI5Cis6MTAzNkYwMDAwMjAwMEYwMEMzODA3MTAwMDgwMDAwMDA2MjMxOTUwMUQ0Cis6MTAzNzAwMDAwMjAwMEYwMEM0ODA3MTAwMjEwMDAwMDA2NjA2MDBEMzkzCis6MTAzNzEwMDAwMjAwMEYwMEM1ODA3MTAwMjAwMDAwMDBFNzAwODA1MzA4Cis6MTAzNzIwMDAwMjAwMEYwMEM2ODA3MTAwM0YwMDAwMDAwMDA4MDBEREFECis6MTAzNzMwMDAwMjAwMEYwMEM3ODA3MTAwNzkwMDAwMDA2NkIzMDFERDUwCis6MTAzNzQwMDAwMjAwMEYwMEM4ODA3MTAwNzkwMDAwMDBFN0IzMDFEREJFCis6MTAzNzUwMDAwMjAwMEYwMEM5ODA3MTAwNzUwMDAwMDA2Mjg2MDFGMTRGCis6MTAzNzYwMDAwMjAwMEYwMENBODA3MTAwNzUwMDAwMDA2NEIxMDFEMjMwCis6MTAzNzcwMDAwMjAwMEYwMENCODA3MTAwNzgwMDAwMDA3NjdCMDAxREY2Cis6MTAzNzgwMDAwMjAwMEYwMENDODA3MTAwMjUwMDAwMDBFMzAxMDBERDg1Cis6MTAzNzkwMDAwMjAwMEYwMENEODA3MTAwMDgwMDAwMDA2MjMxQjEwMTBECis6MTAzN0EwMDAwMjAwMEYwMENFODA3MTAwM0QwMDAwMDA2RjAwODBGNzI2Cis6MTAzN0IwMDAwMjAwMEYwMENGODA3MTAwM0QwMDAwMDA2RjAwODBGNzE1Cis6MTAzN0MwMDAwMjAwMEYwMEQwODA3MTAwM0QwMDAwMDA2RjAwODBGNzA0Cis6MTAzN0QwMDAwMjAwMEYwMEQxODA3MTAwMjEwMDAwMDA2MzlGMzdFM0Q5Cis6MTAzN0UwMDAwMjAwMEYwMEQyODA3MTAwNDkwMDAwMDA3QzNCMDBEMzMyCis6MTAzN0YwMDAwMjAwMEYwMEQzODA3MTAwNzkwMDAwMDA3Q0JCODFEM0YwCis6MTAzODAwMDAwMjAwMEYwMEQ0ODA3MTAwN0YwMDAwMDA3Q0IyMDFEMTYzCis6MTAzODEwMDAwMjAwMEYwMEQ1ODA3MTAwNDgwMDAwMDA2NDMyMDA1MUEyCis6MTAzODIwMDAwMjAwMEYwMEQ2ODA3MTAwNzUwMDAwMDA2NEIxMDFEMjYzCis6MTAzODMwMDAwMjAwMEYwMEQ3ODA3MTAwNzgwMDAwMDA3NjdCMDAxRDI5Cis6MTAzODQwMDAwMjAwMEYwMEQ4ODA3MTAwM0YwMDAwMDAwNDAwMDBERDdFCis6MTAzODUwMDAwMjAwMEYwMEQ5ODA3MTAwNzkwMDAwMDA4MUMwMDFEREY1Cis6MTAzODYwMDAwMjAwMEYwMERBODA3MTAwNzkwMDAwMDA3NjkwNjBGREEwCis6MTAzODcwMDAwMjAwMEYwMERCODA3MTAwMkQwMDAwMDAwMzA4MDhERDRFCis6MTAzODgwMDAwMjAwMEYwMERDODA3MTAwNzgwMDAwMDA4MUMwMDEzRDYzCis6MTAzODkwMDAwMjAwMEYwMEREODA3MTAwM0QwMDAwMDA2RjAwODBGNzI2Cis6MTAzOEEwMDAwMjAwMEYwMERFODA3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTAzOEIwMDAwMjAwMEYwMERGODA3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAzOEMwMDAwMjAwMEYwMEUwODA3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAzOEQwMDAwMjAwMEYwMEUxODA3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAzOEUwMDAwMjAwMEYwMEUyODA3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzOEYwMDAwMjAwMEYwMEUzODA3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAzOTAwMDAwMjAwMEYwMEU0ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzOTEwMDAwMjAwMEYwMEU1ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzOTIwMDAwMjAwMEYwMEU2ODA3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzOTMwMDAwMjAwMEYwMEU3ODA3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzOTQwMDAwMjAwMEYwMEU4ODA3MTAwNDkwMDAwMDAwMzNCOEVEMUE3Cis6MTAzOTUwMDAwMjAwMEYwMEU5ODA3MTAwMkYwMDAwMDBFMzAwODFEMTE4Cis6MTAzOTYwMDAwMjAwMEYwMEVBODA3MTAwM0YwMDAwMDAwMzE4ODBEMUMwCis6MTAzOTcwMDAwMjAwMEYwMEVCODA3MTAwNDkwMDAwMDAwMzNCMDREMUZFCis6MTAzOTgwMDAwMjAwMEYwMEVDODA3MTAwM0YwMDAwMDAwMzAyODBEREE4Cis6MTAzOTkwMDAwMjAwMEYwMEVEODA3MTAwNDkwMDAwMDAwMjNCMDREMkRDCis6MTAzOUEwMDAwMjAwMEYwMEVFODA3MTAwNDkwMDAwMDAwMDNCODREMjRECis6MTAzOUIwMDAwMjAwMEYwMEVGODA3MTAwMjUwMDAwMDBFMjAwMDBERDMyCis6MTAzOUMwMDAwMjAwMEYwMEYwODA3MTAwOTQwMDAwMDA2MjQxMTMwMEJCCis6MTAzOUQwMDAwMjAwMEYwMEYxODA3MTAwOTQwMDAwMDA2MjQzMEIwMEIwCis6MTAzOUUwMDAwMjAwMEYwMEYyODA3MTAwOTQwMDAwMDBFMjQ4MTUwMDEwCis6MTAzOUYwMDAwMjAwMEYwMEYzODA3MTAwOTQwMDAwMDA2MjQ5MUIwMDc4Cis6MTAzQTAwMDAwMjAwMEYwMEY0ODA3MTAwOTQwMDAwMDA3NjQwMkYwMDQ3Cis6MTAzQTEwMDAwMjAwMEYwMEY1ODA3MTAwMDkwMDAwMDA3QTNEODFDRjlGCis6MTAzQTIwMDAwMjAwMEYwMEY2ODA3MTAwMUQwMDAwMDBFNTgwMkJGREY0Cis6MTAzQTMwMDAwMjAwMEYwMEY3ODA3MTAwMzAwMDAwMDA2MzgwODMzMUM2Cis6MTAzQTQwMDAwMjAwMEYwMEY4ODA3MTAwMzAwMDAwMDA2MzgwODIxMUQ2Cis6MTAzQTUwMDAwMjAwMEYwMEY5ODA3MTAwMUQwMDAwMDBFNTgwMjVGREM3Cis6MTAzQTYwMDAwMjAwMEYwMEZBODA3MTAwMzAwMDAwMDA2MzAwODMzMTEzCis6MTAzQTcwMDAwMjAwMEYwMEZCODA3MTAwMzAwMDAwMDA2MzAwODIxMTIzCis6MTAzQTgwMDAwMjAwMEYwMEZDODA3MTAwMkYwMDAwMDBFMzAwODFEMUQ0Cis6MTAzQTkwMDAwMjAwMEYwMEZEODA3MTAwMUQwMDAwMDBFNTgwMDlGRDlGCis6MTAzQUEwMDAwMjAwMEYwMEZFODA3MTAwMzAwMDAwMDA2M0QzODMzMUZDCis6MTAzQUIwMDAwMjAwMEYwMEZGODA3MTAwMzAwMDAwMDA2M0QyODMxMTBDCis6MTAzQUMwMDAwMjAwMEYwMDAwODE3MTAwMkYwMDAwMDBFMzAwODFEMThGCis6MTAzQUQwMDAwMjAwMEYwMDAxODE3MTAwM0YwMDAwMDA4NDAxODBENkM4Cis6MTAzQUUwMDAwMjAwMEYwMDAyODE3MTAwM0YwMDAwMDAwMTAwODBENjNCCis6MTAzQUYwMDAwMjAwMEYwMDAzODE3MTAwMzUwMDAwMDBFRDAwODBENjQ4Cis6MTAzQjAwMDAwMjAwMEYwMDA0ODE3MTAwMTgwMDAwMDA4MTAwRkYzN0RGCis6MTAzQjEwMDAwMjAwMEYwMDA1ODE3MTAwMjUwMDAwMDA2NDAyMDBEMjQwCis6MTAzQjIwMDAwMjAwMEYwMDA2ODE3MTAwMTgwMDAwMDA3QUZENzc3RDA5Cis6MTAzQjMwMDAwMjAwMEYwMDA3ODE3MTAwNDkwMDAwMDA2MzNCMjBERTk2Cis6MTAzQjQwMDAwMjAwMEYwMDA4ODE3MTAwNDkwMDAwMDA3OTNCODBERTBGCis6MTAzQjUwMDAwMjAwMEYwMDA5ODE3MTAwMjEwMDAwMDBFMzAwODBEMTA0Cis6MTAzQjYwMDAwMjAwMEYwMDBBODE3MTAwMDkwMDAwMDA3QTNEODFDRjM4Cis6MTAzQjcwMDAwMjAwMEYwMDBCODE3MTAwNDkwMDAwMDBFMzMxMDBEREZECis6MTAzQjgwMDAwMjAwMEYwMDBDODE3MTAwNjkwMDAwMDA3ODNCMEVERDFGCis6MTAzQjkwMDAwMjAwMEYwMDBEODE3MTAwNjEwMDAwMDA3NjNCMDBERDI2Cis6MTAzQkEwMDAwMjAwMEYwMDBFODE3MTAwM0YwMDAwMDA4NDAxMDBERDYzCis6MTAzQkIwMDAwMjAwMEYwMDBGODE3MTAwM0YwMDAwMDAwMTAwMDBEREQ2Cis6MTAzQkMwMDAwMjAwMEYwMDEwODE3MTAwMzUwMDAwMDBGQTAwMDBEREQ2Cis6MTAzQkQwMDAwMjAwMEYwMDExODE3MTAwMTgwMDAwMDA3NjNCN0YzQjRFCis6MTAzQkUwMDAwMjAwMEYwMDEyODE3MTAwM0QwMDAwMDA2RjAwODBGNzlECis6MTAzQkYwMDAwMjAwMEYwMDEzODE3MTAwM0QwMDAwMDA2RjAwODBGNzhDCis6MTAzQzAwMDAwMjAwMEYwMDE0ODE3MTAwM0QwMDAwMDA2RjAwODBGNzdBCis6MTAzQzEwMDAwMjAwMEYwMDE1ODE3MTAwMjEwMDAwMDBFMzAwODBEMTM3Cis6MTAzQzIwMDAwMjAwMEYwMDE2ODE3MTAwNjkwMDAwMDA3OTNCMDRERDdECis6MTAzQzMwMDAwMjAwMEYwMDE3ODE3MTAwNjEwMDAwMDBFMzAwODBGMUI1Cis6MTAzQzQwMDAwMjAwMEYwMDE4ODE3MTAwM0YwMDAwMDA4NDAxODBENjNGCis6MTAzQzUwMDAwMjAwMEYwMDE5ODE3MTAwM0YwMDAwMDAwMTAwODBENkIyCis6MTAzQzYwMDAwMjAwMEYwMDFBODE3MTAwMzUwMDAwMDBFRDAwODBENkJGCis6MTAzQzcwMDAwMjAwMEYwMDFCODE3MTAwMTgwMDAwMDA4MTAwRkYzNzU3Cis6MTAzQzgwMDAwMjAwMEYwMDFDODE3MTAwMjUwMDAwMDA2NDAyMDBEMkI4Cis6MTAzQzkwMDAwMjAwMEYwMDFEODE3MTAwOTgwMDAwMDA3NkJCNUQ2MDdFCis6MTAzQ0EwMDAwMjAwMEYwMDFFODE3MTAwMDkwMDAwMDA3QTNEODFDRkUzCis6MTAzQ0IwMDAwMjAwMEYwMDFGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzQ0MwMDAwMjAwMEYwMDIwODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzQ0QwMDAwMjAwMEYwMDIxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzQ0UwMDAwMjAwMEYwMDIyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzQ0YwMDAwMjAwMEYwMDIzODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzRDAwMDAwMjAwMEYwMDI0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAzRDEwMDAwMjAwMEYwMDI1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzRDIwMDAwMjAwMEYwMDI2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAzRDMwMDAwMjAwMEYwMDI3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAzRDQwMDAwMjAwMEYwMDI4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAzRDUwMDAwMjAwMEYwMDI5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzRDYwMDAwMjAwMEYwMDJBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzRDcwMDAwMjAwMEYwMDJCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzRDgwMDAwMjAwMEYwMDJDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzRDkwMDAwMjAwMEYwMDJEODE3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzREEwMDAwMjAwMEYwMDJFODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzREIwMDAwMjAwMEYwMDJGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzREMwMDAwMjAwMEYwMDMwODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzREQwMDAwMjAwMEYwMDMxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzREUwMDAwMjAwMEYwMDMyODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzREYwMDAwMjAwMEYwMDMzODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAzRTAwMDAwMjAwMEYwMDM0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzRTEwMDAwMjAwMEYwMDM1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAzRTIwMDAwMjAwMEYwMDM2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAzRTMwMDAwMjAwMEYwMDM3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAzRTQwMDAwMjAwMEYwMDM4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzRTUwMDAwMjAwMEYwMDM5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAzRTYwMDAwMjAwMEYwMDNBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAzRTcwMDAwMjAwMEYwMDNCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzRTgwMDAwMjAwMEYwMDNDODE3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzRTkwMDAwMjAwMEYwMDNEODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzRUEwMDAwMjAwMEYwMDNFODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzRUIwMDAwMjAwMEYwMDNGODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAzRUMwMDAwMjAwMEYwMDQwODE3MTAwNDkwMDAwMDAwMTNCMDhENDRFCis6MTAzRUQwMDAwMjAwMEYwMDQxODE3MTAwMDkwMDAwMDA3QTNEOEJDMjkxCis6MTAzRUUwMDAwMjAwMEYwMDQyODE3MTAwM0YwMDAwMDA4MDAzMDBENEY3Cis6MTAzRUYwMDAwMjAwMEYwMDQzODE3MTAwMDkwMDAwMDA3QTNEOEJDMjZGCis6MTAzRjAwMDAwMjAwMEYwMDQ0ODE3MTAwNDkwMDAwMDAwMzNCMEVENDAxCis6MTAzRjEwMDAwMjAwMEYwMDQ1ODE3MTAwM0YwMDAwMDAwMDAwNDJENjAyCis6MTAzRjIwMDAwMjAwMEYwMDQ2ODE3MTAwMkYwMDAwMDA4MDQwODFEMjA2Cis6MTAzRjMwMDAwMjAwMEYwMDQ3ODE3MTAwMkQwMDAwMDA2NTAzODREMjRDCis6MTAzRjQwMDAwMjAwMEYwMDQ4ODE3MTAwM0YwMDAwMDA4MDAwODBENjExCis6MTAzRjUwMDAwMjAwMEYwMDQ5ODE3MTAwM0YwMDAwMDAwNDAwMDREREYxCis6MTAzRjYwMDAwMjAwMEYwMDRBODE3MTAwM0YwMDAwMDAwMTAwMThERENGCis6MTAzRjcwMDAwMjAwMEYwMDRCODE3MTAwNjkwMDAwMDA2RDNCMDBERDA1Cis6MTAzRjgwMDAwMjAwMEYwMDRDODE3MTAwNjkwMDAwMDA2RDNCMDBEREY0Cis6MTAzRjkwMDAwMjAwMEYwMDREODE3MTAwMzEwMDAwMDA2NUQyMDNEMzkzCis6MTAzRkEwMDAwMjAwMEYwMDRFODE3MTAwNDkwMDAwMDA2NjNCNDBERUI4Cis6MTAzRkIwMDAwMjAwMEYwMDRGODE3MTAwM0YwMDAwMDA4NDAxODBENjk1Cis6MTAzRkMwMDAwMjAwMEYwMDUwODE3MTAwM0YwMDAwMDAwMTAwODBENjA4Cis6MTAzRkQwMDAwMjAwMEYwMDUxODE3MTAwMzUwMDAwMDBFRDAwODBENjE1Cis6MTAzRkUwMDAwMjAwMEYwMDUyODE3MTAwMTgwMDAwMDA4MTAwRkYzN0FECis6MTAzRkYwMDAwMjAwMEYwMDUzODE3MTAwNDkwMDAwMDA3RTNCODBENTE0Cis6MTA0MDAwMDAwMjAwMEYwMDU0ODE3MTAwMjEwMDAwMDBFNjAwNDBERTM0Cis6MTA0MDEwMDAwMjAwMEYwMDU1ODE3MTAwM0YwMDAwMDA4NDAxODBENjJFCis6MTA0MDIwMDAwMjAwMEYwMDU2ODE3MTAwM0YwMDAwMDAwMTAwODBENkExCis6MTA0MDMwMDAwMjAwMEYwMDU3ODE3MTAwMzUwMDAwMDBFRDAwODBENkFFCis6MTA0MDQwMDAwMjAwMEYwMDU4ODE3MTAwMTgwMDAwMDA4MTAwRkYzNzQ2Cis6MTA0MDUwMDAwMjAwMEYwMDU5ODE3MTAwNDkwMDAwMDA3RTNCMDBENTJECis6MTA0MDYwMDAwMjAwMEYwMDVBODE3MTAwNzkwMDAwMDA3NjNCMDFEREVCCis6MTA0MDcwMDAwMjAwMEYwMDVCODE3MTAwMkQwMDAwMDA3RjQwMDRERDE1Cis6MTA0MDgwMDAwMjAwMEYwMDVDODE3MTAwMTgwMDAwMDA3NjNCN0YzRDRDCis6MTA0MDkwMDAwMjAwMEYwMDVEODE3MTAwNzkwMDAwMDA3NkJCMDFERDM4Cis6MTA0MEEwMDAwMjAwMEYwMDVFODE3MTAwNzUwMDAwMDBFODgwMDFGREQ0Cis6MTA0MEIwMDAwMjAwMEYwMDVGODE3MTAwOTQwMDAwMDA2ODQxMTUwMDRDCis6MTA0MEMwMDAwMjAwMEYwMDYwODE3MTAwOTQwMDAwMDBFODQ0MjUwMEE4Cis6MTA0MEQwMDAwMjAwMEYwMDYxODE3MTAwOTQwMDAwMDBFODQxMjMwMDlDCis6MTA0MEUwMDAwMjAwMEYwMDYyODE3MTAwOTQwMDAwMDA2ODQ1MTcwMDEzCis6MTA0MEYwMDAwMjAwMEYwMDYzODE3MTAwOTQwMDAwMDA2ODQyMTUwMDA3Cis6MTA0MTAwMDAwMjAwMEYwMDY0ODE3MTAwOTQwMDAwMDBFODQyMjcwMDYzCis6MTA0MTEwMDAwMjAwMEYwMDY1ODE3MTAwOTQwMDAwMDA2ODQzMkQwMENCCis6MTA0MTIwMDAwMjAwMEYwMDY2ODE3MTAwOTQwMDAwMDA2ODQ0MkQwMEI5Cis6MTA0MTMwMDAwMjAwMEYwMDY3ODE3MTAwOTQwMDAwMDBFODQzMzMwMDIzCis6MTA0MTQwMDAwMjAwMEYwMDY4ODE3MTAwMDQwMDAwMDA3NjNCOTcwM0I1Cis6MTA0MTUwMDAwMjAwMEYwMDY5ODE3MTAwMEQwMDAwMDA2NUMxMERFM0QwCis6MTA0MTYwMDAwMjAwMEYwMDZBODE3MTAwMzAwMDAwMDA3NjAwMDMzMjA3Cis6MTA0MTcwMDAwMjAwMEYwMDZCODE3MTAwMzAwMDAwMDA3NjAwMDIxMjE3Cis6MTA0MTgwMDAwMjAwMEYwMDZDODE3MTAwM0YwMDAwMDAwMDAwODBENDJECis6MTA0MTkwMDAwMjAwMEYwMDZEODE3MTAwM0YwMDAwMDAwMDgwODBEMTlGCis6MTA0MUEwMDAwMjAwMEYwMDZFODE3MTAwMEQwMDAwMDA2NUMxM0ZFMzQ5Cis6MTA0MUIwMDAwMjAwMEYwMDZGODE3MTAwMzAwMDAwMDA3NjYwMDQzMjUxCis6MTA0MUMwMDAwMjAwMEYwMDcwODE3MTAwMzAwMDAwMDA3NjQwMDQxMjgwCis6MTA0MUQwMDAwMjAwMEYwMDcxODE3MTAwM0YwMDAwMDAwMDgwODJENDU2Cis6MTA0MUUwMDAwMjAwMEYwMDcyODE3MTAwM0YwMDAwMDAwMDgwODBEMTRBCis6MTA0MUYwMDAwMjAwMEYwMDczODE3MTAwMEQwMDAwMDA2NUMxM0ZFM0Y0Cis6MTA0MjAwMDAwMjAwMEYwMDc0ODE3MTAwMzAwMDAwMDA3NjIwMDQzMjNCCis6MTA0MjEwMDAwMjAwMEYwMDc1ODE3MTAwMzAwMDAwMDA3NjAwMDQxMjZBCis6MTA0MjIwMDAwMjAwMEYwMDc2ODE3MTAwM0YwMDAwMDAwMDAwODJENDgwCis6MTA0MjMwMDAwMjAwMEYwMDc3ODE3MTAwMEQwMDAwMDA2NUMxNjNFMzhCCis6MTA0MjQwMDAwMjAwMEYwMDc4ODE3MTAwMzAwMDAwMDA3NjIwMDMzMkY4Cis6MTA0MjUwMDAwMjAwMEYwMDc5ODE3MTAwMzAwMDAwMDA3NjAwMDMxMjI3Cis6MTA0MjYwMDAwMjAwMEYwMDdBODE3MTAwM0YwMDAwMDAwMDAwODNENDNCCis6MTA0MjcwMDAwMjAwMEYwMDdCODE3MTAwNDkwMDAwMDA3NjNCODBEMjc0Cis6MTA0MjgwMDAwMjAwMEYwMDdDODE3MTAwMEQwMDAwMDA2NUMxMERFMzhDCis6MTA0MjkwMDAwMjAwMEYwMDdEODE3MTAwMzAwMDAwMDA3NjgwMDMzMjQzCis6MTA0MkEwMDAwMjAwMEYwMDdFODE3MTAwMzAwMDAwMDA3NjgwMDIxMjUzCis6MTA0MkIwMDAwMjAwMEYwMDdGODE3MTAwM0YwMDAwMDAwMDAwODFENEU4Cis6MTA0MkMwMDAwMjAwMEYwMDgwODE3MTAwM0YwMDAwMDAwMDAwMDJENjU0Cis6MTA0MkQwMDAwMjAwMEYwMDgxODE3MTAwM0YwMDAwMDAwMDAwODFEMUM5Cis6MTA0MkUwMDAwMjAwMEYwMDgyODE3MTAwMEQwMDAwMDA2NUMxM0ZFM0Y0Cis6MTA0MkYwMDAwMjAwMEYwMDgzODE3MTAwMzAwMDAwMDA3NjIwMDQzMjNDCis6MTA0MzAwMDAwMjAwMEYwMDg0ODE3MTAwMzAwMDAwMDA3NjAwMDQxMjZBCis6MTA0MzEwMDAwMjAwMEYwMDg1ODE3MTAwM0YwMDAwMDAwMDAwODJENDgwCis6MTA0MzIwMDAwMjAwMEYwMDg2ODE3MTAwNDEwMDAwMDBFQjM0ODBENDUwCis6MTA0MzMwMDAwMjAwMEYwMDg3ODE3MTAwNzkwMDAwMDA2QUJCMDFERDc3Cis6MTA0MzQwMDAwMjAwMEYwMDg4ODE3MTAwNzkwMDAwMDA3NkJCMDFERDVBCis6MTA0MzUwMDAwMjAwMEYwMDg5ODE3MTAwM0YwMDAwMDAwMzE4MDBEMkE1Cis6MTA0MzYwMDAwMjAwMEYwMDhBODE3MTAwM0YwMDAwMDAwMDAwODFEMTJGCis6MTA0MzcwMDAwMjAwMEYwMDhCODE3MTAwNzUwMDAwMDA2MzgwMDFGRDU5Cis6MTA0MzgwMDAwMjAwMEYwMDhDODE3MTAwOTgwMDAwMDA2NDNCNjk4MDdFCis6MTA0MzkwMDAwMjAwMEYwMDhEODE3MTAwNTEwMDAwMDBFNDAwMDBGMjY2Cis6MTA0M0EwMDAwMjAwMEYwMDhFODE3MTAwM0YwMDAwMDA4NDAxODBENjYyCis6MTA0M0IwMDAwMjAwMEYwMDhGODE3MTAwM0YwMDAwMDAwMTAwODBENkQ1Cis6MTA0M0MwMDAwMjAwMEYwMDkwODE3MTAwMzUwMDAwMDBFRDAwODBENkUyCis6MTA0M0QwMDAwMjAwMEYwMDkxODE3MTAwMTgwMDAwMDA4MTAwRkYzNzdBCis6MTA0M0UwMDAwMjAwMEYwMDkyODE3MTAwMkQwMDAwMDA3RjQwMDRERDZCCis6MTA0M0YwMDAwMjAwMEYwMDkzODE3MTAwMTgwMDAwMDA3NjNCN0YzREEyCis6MTA0NDAwMDAwMjAwMEYwMDk0ODE3MTAwNDkwMDAwMDAzODNCQzBEM0M2Cis6MTA0NDEwMDAwMjAwMEYwMDk1ODE3MTAwNDkwMDAwMDA2NDNCMDBERDNGCis6MTA0NDIwMDAwMjAwMEYwMDk2ODE3MTAwNTEwMDAwMDBFNDAwMDBGMkNDCis6MTA0NDMwMDAwMjAwMEYwMDk3ODE3MTAwM0YwMDAwMDA4NDAxODBENkM4Cis6MTA0NDQwMDAwMjAwMEYwMDk4ODE3MTAwM0YwMDAwMDAwMTAwODBENjNCCis6MTA0NDUwMDAwMjAwMEYwMDk5ODE3MTAwMzUwMDAwMDBFRDAwODBENjQ4Cis6MTA0NDYwMDAwMjAwMEYwMDlBODE3MTAwMTgwMDAwMDA4MTAwRkYzN0UwCis6MTA0NDcwMDAwMjAwMEYwMDlCODE3MTAwNDkwMDAwMDAzODNCQTBEMzZGCis6MTA0NDgwMDAwMjAwMEYwMDlDODE3MTAwMTkwMDAwMDA3NkJCNjFERDA1Cis6MTA0NDkwMDAwMjAwMEYwMDlEODE3MTAwNDkwMDAwMDA2NzNCMDBEREI0Cis6MTA0NEEwMDAwMjAwMEYwMDlFODE3MTAwNzUwMDAwMDA2MzgyODFGMTlGCis6MTA0NEIwMDAwMjAwMEYwMDlGODE3MTAwNDEwMDAwMDBFQjM0ODBENEE2Cis6MTA0NEMwMDAwMjAwMEYwMEEwODE3MTAwNzkwMDAwMDA2QUJCMDFERENECis6MTA0NEQwMDAwMjAwMEYwMEExODE3MTAwNzkwMDAwMDA3NkJCMDFEREIwCis6MTA0NEUwMDAwMjAwMEYwMEEyODE3MTAwM0YwMDAwMDAwMzE4MDBEMkZCCis6MTA0NEYwMDAwMjAwMEYwMEEzODE3MTAwM0YwMDAwMDAwMDgwODBEMTA2Cis6MTA0NTAwMDAwMjAwMEYwMEE0ODE3MTAwNzUwMDAwMDA2MzgwMDFGREFFCis6MTA0NTEwMDAwMjAwMEYwMEE1ODE3MTAwOTgwMDAwMDA2NDNCMzc4MDA1Cis6MTA0NTIwMDAwMjAwMEYwMEE2ODE3MTAwNTEwMDAwMDBFNDAwMDBGMkJCCis6MTA0NTMwMDAwMjAwMEYwMEE3ODE3MTAwM0YwMDAwMDA4NDAxODBENkI3Cis6MTA0NTQwMDAwMjAwMEYwMEE4ODE3MTAwM0YwMDAwMDAwMTAwODBENjJBCis6MTA0NTUwMDAwMjAwMEYwMEE5ODE3MTAwMzUwMDAwMDBFRDAwODBENjM3Cis6MTA0NTYwMDAwMjAwMEYwMEFBODE3MTAwMTgwMDAwMDA4MTAwRkYzN0NGCis6MTA0NTcwMDAwMjAwMEYwMEFCODE3MTAwMkQwMDAwMDA3RjQwMDREREMwCis6MTA0NTgwMDAwMjAwMEYwMEFDODE3MTAwMTgwMDAwMDA3NjNCN0YzREY3Cis6MTA0NTkwMDAwMjAwMEYwMEFEODE3MTAwNDkwMDAwMDAzODNCODBEMzVDCis6MTA0NUEwMDAwMjAwMEYwMEFFODE3MTAwMTkwMDAwMDA3NkJCNkZEREM0Cis6MTA0NUIwMDAwMjAwMEYwMEFGODE3MTAwNDkwMDAwMDA2NzNCMDBERDgxCis6MTA0NUMwMDAwMjAwMEYwMEIwODE3MTAwNzUwMDAwMDA2MzgyODFGMTZDCis6MTA0NUQwMDAwMjAwMEYwMEIxODE3MTAwNDEwMDAwMDBFQjM0ODBENDczCis6MTA0NUUwMDAwMjAwMEYwMEIyODE3MTAwNzkwMDAwMDA2QUJCMDFERDlBCis6MTA0NUYwMDAwMjAwMEYwMEIzODE3MTAwNzkwMDAwMDA2M0JCMDFERDkwCis6MTA0NjAwMDAwMjAwMEYwMEI0ODE3MTAwNzUwMDAwMDA2MzgwMDFGRDlECis6MTA0NjEwMDAwMjAwMEYwMEI1ODE3MTAwOTgwMDAwMDA2NDNCMTc4MDE0Cis6MTA0NjIwMDAwMjAwMEYwMEI2ODE3MTAwNDkwMDAwMDA2NDNCNDBERUNCCis6MTA0NjMwMDAwMjAwMEYwMEI3ODE3MTAwM0YwMDAwMDA4NDAxODBENkE2Cis6MTA0NjQwMDAwMjAwMEYwMEI4ODE3MTAwM0YwMDAwMDAwMTAwODBENjE5Cis6MTA0NjUwMDAwMjAwMEYwMEI5ODE3MTAwMzUwMDAwMDBFRDAwODBENjI2Cis6MTA0NjYwMDAwMjAwMEYwMEJBODE3MTAwMTgwMDAwMDA4MTAwRkYzN0JFCis6MTA0NjcwMDAwMjAwMEYwMEJCODE3MTAwMkQwMDAwMDA3RjQwMDREREFGCis6MTA0NjgwMDAwMjAwMEYwMEJDODE3MTAwMTgwMDAwMDA3NjNCN0YzREU2Cis6MTA0NjkwMDAwMjAwMEYwMEJEODE3MTAwMjEwMDAwMDBFNDAwMDBEMjgzCis6MTA0NkEwMDAwMjAwMEYwMEJFODE3MTAwMTkwMDAwMDA3RTdCRUZEMzc1Cis6MTA0NkIwMDAwMjAwMEYwMEJGODE3MTAwNzUwMDAwMDA2MzgyODFGMTZDCis6MTA0NkMwMDAwMjAwMEYwMEMwODE3MTAwM0YwMDAwMDAwMDAwODBENjkyCis6MTA0NkQwMDAwMjAwMEYwMEMxODE3MTAwM0YwMDAwMDAwNDAwMDREREYyCis6MTA0NkUwMDAwMjAwMEYwMEMyODE3MTAwM0YwMDAwMDAwMTAwMThEREQwCis6MTA0NkYwMDAwMjAwMEYwMEMzODE3MTAwNjkwMDAwMDA2RDNCMDBERDA2Cis6MTA0NzAwMDAwMjAwMEYwMEM0ODE3MTAwNjkwMDAwMDA2RDNCMDBEREY0Cis6MTA0NzEwMDAwMjAwMEYwMEM1ODE3MTAwM0YwMDAwMDAwMDAwMDBEREI1Cis6MTA0NzIwMDAwMjAwMEYwMEM2ODE3MTAwMkQwMDAwMDA4MDAxNTREREUxCis6MTA0NzMwMDAwMjAwMEYwMEM3ODE3MTAwNzkwMDAwMDA3NjgwRTBGMzZECis6MTA0NzQwMDAwMjAwMEYwMEM4ODE3MTAwNDkwMDAwMDA3QTM2MDBENkNGCis6MTA0NzUwMDAwMjAwMEYwMEM5ODE3MTAwNzkwMDAwMDA3NkZCMDFEREM1Cis6MTA0NzYwMDAwMjAwMEYwMENBODE3MTAwM0QwMDAwMDA2RjAwODBGNzU5Cis6MTA0NzcwMDAwMjAwMEYwMENCODE3MTAwNDkwMDAwMDAwMzNCMDBERDA3Cis6MTA0NzgwMDAwMjAwMEYwMENDODE3MTAwNTkwMDAwMDA3NjNCMDBGRDUzCis6MTA0NzkwMDAwMjAwMEYwMENEODE3MTAwM0YwMDAwMDAwMzFDODBERDhFCis6MTA0N0EwMDAwMjAwMEYwMENFODE3MTAwM0QwMDAwMDA2RjAwODBGNzE1Cis6MTA0N0IwMDAwMjAwMEYwMENGODE3MTAwM0QwMDAwMDA2RjAwODBGNzA0Cis6MTA0N0MwMDAwMjAwMEYwMEQwODE3MTAwM0QwMDAwMDA2RjAwODBGN0YzCis6MTA0N0QwMDAwMjAwMEYwMEQxODE3MTAwMkQwMDAwMDA3RjAyMDZERDc0Cis6MTA0N0UwMDAwMjAwMEYwMEQyODE3MTAwMTgwMDAwMDA3QTNEN0YxRDg5Cis6MTA0N0YwMDAwMjAwMEYwMEQzODE3MTAwMzEwMDAwMDA2Qjg4ODNENDY4Cis6MTA0ODAwMDAwMjAwMEYwMEQ0ODE3MTAwNzkwMDAwMDA2QUJCMDFERDU1Cis6MTA0ODEwMDAwMjAwMEYwMEQ1ODE3MTAwNzkwMDAwMDA3NjkwODFGMUNGCis6MTA0ODIwMDAwMjAwMEYwMEQ2ODE3MTAwNzUwMDAwMDA2MzgwMDFGRDU5Cis6MTA0ODMwMDAwMjAwMEYwMEQ3ODE3MTAwOTgwMDAwMDA3NkJCNTM4MDAyCis6MTA0ODQwMDAwMjAwMEYwMEQ4ODE3MTAwMTkwMDAwMDA3OTdCN0ZERDI0Cis6MTA0ODUwMDAwMjAwMEYwMEQ5ODE3MTAwNzUwMDAwMDA2MzgyODFGMUIwCis6MTA0ODYwMDAwMjAwMEYwMERBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0ODcwMDAwMjAwMEYwMERCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA0ODgwMDAwMjAwMEYwMERDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0ODkwMDAwMjAwMEYwMEREODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA0OEEwMDAwMjAwMEYwMERFODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0OEIwMDAwMjAwMEYwMERGODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0OEMwMDAwMjAwMEYwMEUwODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA0OEQwMDAwMjAwMEYwMEUxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA0OEUwMDAwMjAwMEYwMEUyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA0OEYwMDAwMjAwMEYwMEUzODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA0OTAwMDAwMjAwMEYwMEU0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0OTEwMDAwMjAwMEYwMEU1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0OTIwMDAwMjAwMEYwMEU2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0OTMwMDAwMjAwMEYwMEU3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0OTQwMDAwMjAwMEYwMEU4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0OTUwMDAwMjAwMEYwMEU5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0OTYwMDAwMjAwMEYwMEVBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA0OTcwMDAwMjAwMEYwMEVCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0OTgwMDAwMjAwMEYwMEVDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA0OTkwMDAwMjAwMEYwMEVEODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0OUEwMDAwMjAwMEYwMEVFODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0OUIwMDAwMjAwMEYwMEVGODE3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA0OUMwMDAwMjAwMEYwMEYwODE3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA0OUQwMDAwMjAwMEYwMEYxODE3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA0OUUwMDAwMjAwMEYwMEYyODE3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA0OUYwMDAwMjAwMEYwMEYzODE3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA0QTAwMDAwMjAwMEYwMEY0ODE3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0QTEwMDAwMjAwMEYwMEY1ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0QTIwMDAwMjAwMEYwMEY2ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0QTMwMDAwMjAwMEYwMEY3ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0QTQwMDAwMjAwMEYwMEY4ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0QTUwMDAwMjAwMEYwMEY5ODE3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA0QTYwMDAwMjAwMEYwMEZBODE3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0QTcwMDAwMjAwMEYwMEZCODE3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA0QTgwMDAwMjAwMEYwMEZDODE3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0QTkwMDAwMjAwMEYwMEZEODE3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0QUEwMDAwMjAwMEYwMEZFODE3MTAwM0YwMDAwMDAwMzAyODBERDY0Cis6MTA0QUIwMDAwMjAwMEYwMEZGODE3MTAwNDkwMDAwMDAwMjNCODREMTE5Cis6MTA0QUMwMDAwMjAwMEYwMDAwODI3MTAwNDkwMDAwMDAwMzNCMDBERDdFCis6MTA0QUQwMDAwMjAwMEYwMDAxODI3MTAwNjkwMDAwMDA3QTNCMDBEREQ2Cis6MTA0QUUwMDAwMjAwMEYwMDAyODI3MTAwNDkwMDAwMDA3OTNCMDBEREU2Cis6MTA0QUYwMDAwMjAwMEYwMDAzODI3MTAwNjUwMDAwMDA2MzAyODBGMTc0Cis6MTA0QjAwMDAwMjAwMEYwMDA0ODI3MTAwMTgwMDAwMDA3NjNCN0Q3RERBCis6MTA0QjEwMDAwMjAwMEYwMDA1ODI3MTAwMDkwMDAwMDA3QTNEODFDRjdDCis6MTA0QjIwMDAwMjAwMEYwMDA2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0QjMwMDAwMjAwMEYwMDA3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0QjQwMDAwMjAwMEYwMDA4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0QjUwMDAwMjAwMEYwMDA5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0QjYwMDAwMjAwMEYwMDBBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0QjcwMDAwMjAwMEYwMDBCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0QjgwMDAwMjAwMEYwMDBDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0QjkwMDAwMjAwMEYwMDBEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0QkEwMDAwMjAwMEYwMDBFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0QkIwMDAwMjAwMEYwMDBGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0QkMwMDAwMjAwMEYwMDEwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0QkQwMDAwMjAwMEYwMDExODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0QkUwMDAwMjAwMEYwMDEyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0QkYwMDAwMjAwMEYwMDEzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0QzAwMDAwMjAwMEYwMDE0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTA0QzEwMDAwMjAwMEYwMDE1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0QzIwMDAwMjAwMEYwMDE2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0QzMwMDAwMjAwMEYwMDE3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0QzQwMDAwMjAwMEYwMDE4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0QzUwMDAwMjAwMEYwMDE5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0QzYwMDAwMjAwMEYwMDFBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0QzcwMDAwMjAwMEYwMDFCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0QzgwMDAwMjAwMEYwMDFDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0QzkwMDAwMjAwMEYwMDFEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0Q0EwMDAwMjAwMEYwMDFFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0Q0IwMDAwMjAwMEYwMDFGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0Q0MwMDAwMjAwMEYwMDIwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0Q0QwMDAwMjAwMEYwMDIxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0Q0UwMDAwMjAwMEYwMDIyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0Q0YwMDAwMjAwMEYwMDIzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0RDAwMDAwMjAwMEYwMDI0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0RDEwMDAwMjAwMEYwMDI1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0RDIwMDAwMjAwMEYwMDI2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RDMwMDAwMjAwMEYwMDI3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0RDQwMDAwMjAwMEYwMDI4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0RDUwMDAwMjAwMEYwMDI5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0RDYwMDAwMjAwMEYwMDJBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0RDcwMDAwMjAwMEYwMDJCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0RDgwMDAwMjAwMEYwMDJDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0RDkwMDAwMjAwMEYwMDJEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0REEwMDAwMjAwMEYwMDJFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0REIwMDAwMjAwMEYwMDJGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0REMwMDAwMjAwMEYwMDMwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0REQwMDAwMjAwMEYwMDMxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0REUwMDAwMjAwMEYwMDMyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0REYwMDAwMjAwMEYwMDMzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0RTAwMDAwMjAwMEYwMDM0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0RTEwMDAwMjAwMEYwMDM1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RTIwMDAwMjAwMEYwMDM2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0RTMwMDAwMjAwMEYwMDM3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0RTQwMDAwMjAwMEYwMDM4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0RTUwMDAwMjAwMEYwMDM5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0RTYwMDAwMjAwMEYwMDNBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0RTcwMDAwMjAwMEYwMDNCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0RTgwMDAwMjAwMEYwMDNDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0RTkwMDAwMjAwMEYwMDNEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RUEwMDAwMjAwMEYwMDNFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0RUIwMDAwMjAwMEYwMDNGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0RUMwMDAwMjAwMEYwMDQwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0RUQwMDAwMjAwMEYwMDQxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0RUUwMDAwMjAwMEYwMDQyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0RUYwMDAwMjAwMEYwMDQzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0RjAwMDAwMjAwMEYwMDQ0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0RjEwMDAwMjAwMEYwMDQ1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0RjIwMDAwMjAwMEYwMDQ2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0RjMwMDAwMjAwMEYwMDQ3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA0RjQwMDAwMjAwMEYwMDQ4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0RjUwMDAwMjAwMEYwMDQ5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA0RjYwMDAwMjAwMEYwMDRBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA0RjcwMDAwMjAwMEYwMDRCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA0RjgwMDAwMjAwMEYwMDRDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RjkwMDAwMjAwMEYwMDREODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0RkEwMDAwMjAwMEYwMDRFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0RkIwMDAwMjAwMEYwMDRGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0RkMwMDAwMjAwMEYwMDUwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0RkQwMDAwMjAwMEYwMDUxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA0RkUwMDAwMjAwMEYwMDUyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA0RkYwMDAwMjAwMEYwMDUzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MDAwMDAwMjAwMEYwMDU0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1MDEwMDAwMjAwMEYwMDU1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1MDIwMDAwMjAwMEYwMDU2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1MDMwMDAwMjAwMEYwMDU3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MDQwMDAwMjAwMEYwMDU4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MDUwMDAwMjAwMEYwMDU5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MDYwMDAwMjAwMEYwMDVBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MDcwMDAwMjAwMEYwMDVCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MDgwMDAwMjAwMEYwMDVDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MDkwMDAwMjAwMEYwMDVEODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MEEwMDAwMjAwMEYwMDVFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MEIwMDAwMjAwMEYwMDVGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MEMwMDAwMjAwMEYwMDYwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1MEQwMDAwMjAwMEYwMDYxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1MEUwMDAwMjAwMEYwMDYyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MEYwMDAwMjAwMEYwMDYzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1MTAwMDAwMjAwMEYwMDY0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1MTEwMDAwMjAwMEYwMDY1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1MTIwMDAwMjAwMEYwMDY2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MTMwMDAwMjAwMEYwMDY3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MTQwMDAwMjAwMEYwMDY4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MTUwMDAwMjAwMEYwMDY5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MTYwMDAwMjAwMEYwMDZBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MTcwMDAwMjAwMEYwMDZCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MTgwMDAwMjAwMEYwMDZDODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MTkwMDAwMjAwMEYwMDZEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MUEwMDAwMjAwMEYwMDZFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MUIwMDAwMjAwMEYwMDZGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1MUMwMDAwMjAwMEYwMDcwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1MUQwMDAwMjAwMEYwMDcxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MUUwMDAwMjAwMEYwMDcyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1MUYwMDAwMjAwMEYwMDczODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1MjAwMDAwMjAwMEYwMDc0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1MjEwMDAwMjAwMEYwMDc1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MjIwMDAwMjAwMEYwMDc2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MjMwMDAwMjAwMEYwMDc3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MjQwMDAwMjAwMEYwMDc4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MjUwMDAwMjAwMEYwMDc5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MjYwMDAwMjAwMEYwMDdBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MjcwMDAwMjAwMEYwMDdCODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjgwMDAwMjAwMEYwMDdDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjkwMDAwMjAwMEYwMDdEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MkEwMDAwMjAwMEYwMDdFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1MkIwMDAwMjAwMEYwMDdGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1MkMwMDAwMjAwMEYwMDgwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1MkQwMDAwMjAwMEYwMDgxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1MkUwMDAwMjAwMEYwMDgyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1MkYwMDAwMjAwMEYwMDgzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1MzAwMDAwMjAwMEYwMDg0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1MzEwMDAwMjAwMEYwMDg1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1MzIwMDAwMjAwMEYwMDg2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1MzMwMDAwMjAwMEYwMDg3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1MzQwMDAwMjAwMEYwMDg4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1MzUwMDAwMjAwMEYwMDg5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MzYwMDAwMjAwMEYwMDhBODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MzcwMDAwMjAwMEYwMDhCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MzgwMDAwMjAwMEYwMDhDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MzkwMDAwMjAwMEYwMDhEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1M0EwMDAwMjAwMEYwMDhFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1M0IwMDAwMjAwMEYwMDhGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1M0MwMDAwMjAwMEYwMDkwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1M0QwMDAwMjAwMEYwMDkxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1M0UwMDAwMjAwMEYwMDkyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1M0YwMDAwMjAwMEYwMDkzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NDAwMDAwMjAwMEYwMDk0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1NDEwMDAwMjAwMEYwMDk1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1NDIwMDAwMjAwMEYwMDk2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1NDMwMDAwMjAwMEYwMDk3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NDQwMDAwMjAwMEYwMDk4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NDUwMDAwMjAwMEYwMDk5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NDYwMDAwMjAwMEYwMDlBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NDcwMDAwMjAwMEYwMDlCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NDgwMDAwMjAwMEYwMDlDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NDkwMDAwMjAwMEYwMDlEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NEEwMDAwMjAwMEYwMDlFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NEIwMDAwMjAwMEYwMDlGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NEMwMDAwMjAwMEYwMEEwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1NEQwMDAwMjAwMEYwMEExODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1NEUwMDAwMjAwMEYwMEEyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NEYwMDAwMjAwMEYwMEEzODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1NTAwMDAwMjAwMEYwMEE0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1NTEwMDAwMjAwMEYwMEE1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1NTIwMDAwMjAwMEYwMEE2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NTMwMDAwMjAwMEYwMEE3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NTQwMDAwMjAwMEYwMEE4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NTUwMDAwMjAwMEYwMEE5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NTYwMDAwMjAwMEYwMEFBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NTcwMDAwMjAwMEYwMEFCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NTgwMDAwMjAwMEYwMEFDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NTkwMDAwMjAwMEYwMEFEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NUEwMDAwMjAwMEYwMEFFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NUIwMDAwMjAwMEYwMEFGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1NUMwMDAwMjAwMEYwMEIwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1NUQwMDAwMjAwMEYwMEIxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NUUwMDAwMjAwMEYwMEIyODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1NUYwMDAwMjAwMEYwMEIzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1NjAwMDAwMjAwMEYwMEI0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1NjEwMDAwMjAwMEYwMEI1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NjIwMDAwMjAwMEYwMEI2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NjMwMDAwMjAwMEYwMEI3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NjQwMDAwMjAwMEYwMEI4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NjUwMDAwMjAwMEYwMEI5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NjYwMDAwMjAwMEYwMEJBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NjcwMDAwMjAwMEYwMEJCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NjgwMDAwMjAwMEYwMEJDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NjkwMDAwMjAwMEYwMEJEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NkEwMDAwMjAwMEYwMEJFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1NkIwMDAwMjAwMEYwMEJGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1NkMwMDAwMjAwMEYwMEMwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NkQwMDAwMjAwMEYwMEMxODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1NkUwMDAwMjAwMEYwMEMyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1NkYwMDAwMjAwMEYwMEMzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1NzAwMDAwMjAwMEYwMEM0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1NzEwMDAwMjAwMEYwMEM1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1NzIwMDAwMjAwMEYwMEM2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1NzMwMDAwMjAwMEYwMEM3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1NzQwMDAwMjAwMEYwMEM4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1NzUwMDAwMjAwMEYwMEM5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NzYwMDAwMjAwMEYwMENBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1NzcwMDAwMjAwMEYwMENCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NzgwMDAwMjAwMEYwMENDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1NzkwMDAwMjAwMEYwMENEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1N0EwMDAwMjAwMEYwMENFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1N0IwMDAwMjAwMEYwMENGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1N0MwMDAwMjAwMEYwMEQwODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1N0QwMDAwMjAwMEYwMEQxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1N0UwMDAwMjAwMEYwMEQyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1N0YwMDAwMjAwMEYwMEQzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1ODAwMDAwMjAwMEYwMEQ0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1ODEwMDAwMjAwMEYwMEQ1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1ODIwMDAwMjAwMEYwMEQ2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1ODMwMDAwMjAwMEYwMEQ3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1ODQwMDAwMjAwMEYwMEQ4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1ODUwMDAwMjAwMEYwMEQ5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1ODYwMDAwMjAwMEYwMERBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1ODcwMDAwMjAwMEYwMERCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1ODgwMDAwMjAwMEYwMERDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1ODkwMDAwMjAwMEYwMEREODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1OEEwMDAwMjAwMEYwMERFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1OEIwMDAwMjAwMEYwMERGODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1OEMwMDAwMjAwMEYwMEUwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1OEQwMDAwMjAwMEYwMEUxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1OEUwMDAwMjAwMEYwMEUyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1OEYwMDAwMjAwMEYwMEUzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA1OTAwMDAwMjAwMEYwMEU0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1OTEwMDAwMjAwMEYwMEU1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1OTIwMDAwMjAwMEYwMEU2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1OTMwMDAwMjAwMEYwMEU3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1OTQwMDAwMjAwMEYwMEU4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1OTUwMDAwMjAwMEYwMEU5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1OTYwMDAwMjAwMEYwMEVBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1OTcwMDAwMjAwMEYwMEVCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1OTgwMDAwMjAwMEYwMEVDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1OTkwMDAwMjAwMEYwMEVEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1OUEwMDAwMjAwMEYwMEVFODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1OUIwMDAwMjAwMEYwMEVGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1OUMwMDAwMjAwMEYwMEYwODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1OUQwMDAwMjAwMEYwMEYxODI3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1OUUwMDAwMjAwMEYwMEYyODI3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA1OUYwMDAwMjAwMEYwMEYzODI3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1QTAwMDAwMjAwMEYwMEY0ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1QTEwMDAwMjAwMEYwMEY1ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1QTIwMDAwMjAwMEYwMEY2ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1QTMwMDAwMjAwMEYwMEY3ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1QTQwMDAwMjAwMEYwMEY4ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1QTUwMDAwMjAwMEYwMEY5ODI3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA1QTYwMDAwMjAwMEYwMEZBODI3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA1QTcwMDAwMjAwMEYwMEZCODI3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA1QTgwMDAwMjAwMEYwMEZDODI3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1QTkwMDAwMjAwMEYwMEZEODI3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA1QUEwMDAwMjAwMEYwMEZFODI3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA1QUIwMDAwMjAwMEYwMEZGODI3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA1QUMwMDAwMjAwMEYwMDAwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1QUQwMDAwMjAwMEYwMDAxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1QUUwMDAwMjAwMEYwMDAyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1QUYwMDAwMjAwMEYwMDAzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1QjAwMDAwMjAwMEYwMDA0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTA1QjEwMDAwMjAwMEYwMDA1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1QjIwMDAwMjAwMEYwMDA2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1QjMwMDAwMjAwMEYwMDA3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1QjQwMDAwMjAwMEYwMDA4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1QjUwMDAwMjAwMEYwMDA5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1QjYwMDAwMjAwMEYwMDBBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1QjcwMDAwMjAwMEYwMDBCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1QjgwMDAwMjAwMEYwMDBDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1QjkwMDAwMjAwMEYwMDBEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1QkEwMDAwMjAwMEYwMDBFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1QkIwMDAwMjAwMEYwMDBGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1QkMwMDAwMjAwMEYwMDEwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1QkQwMDAwMjAwMEYwMDExODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1QkUwMDAwMjAwMEYwMDEyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1QkYwMDAwMjAwMEYwMDEzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1QzAwMDAwMjAwMEYwMDE0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1QzEwMDAwMjAwMEYwMDE1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1QzIwMDAwMjAwMEYwMDE2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1QzMwMDAwMjAwMEYwMDE3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1QzQwMDAwMjAwMEYwMDE4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1QzUwMDAwMjAwMEYwMDE5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1QzYwMDAwMjAwMEYwMDFBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1QzcwMDAwMjAwMEYwMDFCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1QzgwMDAwMjAwMEYwMDFDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1QzkwMDAwMjAwMEYwMDFEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1Q0EwMDAwMjAwMEYwMDFFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1Q0IwMDAwMjAwMEYwMDFGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1Q0MwMDAwMjAwMEYwMDIwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1Q0QwMDAwMjAwMEYwMDIxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1Q0UwMDAwMjAwMEYwMDIyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1Q0YwMDAwMjAwMEYwMDIzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1RDAwMDAwMjAwMEYwMDI0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1RDEwMDAwMjAwMEYwMDI1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1RDIwMDAwMjAwMEYwMDI2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RDMwMDAwMjAwMEYwMDI3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1RDQwMDAwMjAwMEYwMDI4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1RDUwMDAwMjAwMEYwMDI5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1RDYwMDAwMjAwMEYwMDJBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1RDcwMDAwMjAwMEYwMDJCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1RDgwMDAwMjAwMEYwMDJDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RDkwMDAwMjAwMEYwMDJEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1REEwMDAwMjAwMEYwMDJFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1REIwMDAwMjAwMEYwMDJGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1REMwMDAwMjAwMEYwMDMwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1REQwMDAwMjAwMEYwMDMxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1REUwMDAwMjAwMEYwMDMyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1REYwMDAwMjAwMEYwMDMzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1RTAwMDAwMjAwMEYwMDM0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA1RTEwMDAwMjAwMEYwMDM1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RTIwMDAwMjAwMEYwMDM2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1RTMwMDAwMjAwMEYwMDM3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1RTQwMDAwMjAwMEYwMDM4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1RTUwMDAwMjAwMEYwMDM5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1RTYwMDAwMjAwMEYwMDNBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1RTcwMDAwMjAwMEYwMDNCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RTgwMDAwMjAwMEYwMDNDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1RTkwMDAwMjAwMEYwMDNEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1RUEwMDAwMjAwMEYwMDNFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1RUIwMDAwMjAwMEYwMDNGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1RUMwMDAwMjAwMEYwMDQwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1RUQwMDAwMjAwMEYwMDQxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1RUUwMDAwMjAwMEYwMDQyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1RUYwMDAwMjAwMEYwMDQzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1RjAwMDAwMjAwMEYwMDQ0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RjEwMDAwMjAwMEYwMDQ1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA1RjIwMDAwMjAwMEYwMDQ2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1RjMwMDAwMjAwMEYwMDQ3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA1RjQwMDAwMjAwMEYwMDQ4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA1RjUwMDAwMjAwMEYwMDQ5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA1RjYwMDAwMjAwMEYwMDRBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RjcwMDAwMjAwMEYwMDRCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1RjgwMDAwMjAwMEYwMDRDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1RjkwMDAwMjAwMEYwMDREODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1RkEwMDAwMjAwMEYwMDRFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1RkIwMDAwMjAwMEYwMDRGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1RkMwMDAwMjAwMEYwMDUwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1RkQwMDAwMjAwMEYwMDUxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA1RkUwMDAwMjAwMEYwMDUyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1RkYwMDAwMjAwMEYwMDUzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MDAwMDAwMjAwMEYwMDU0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2MDEwMDAwMjAwMEYwMDU1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2MDIwMDAwMjAwMEYwMDU2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2MDMwMDAwMjAwMEYwMDU3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MDQwMDAwMjAwMEYwMDU4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MDUwMDAwMjAwMEYwMDU5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MDYwMDAwMjAwMEYwMDVBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MDcwMDAwMjAwMEYwMDVCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MDgwMDAwMjAwMEYwMDVDODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MDkwMDAwMjAwMEYwMDVEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MEEwMDAwMjAwMEYwMDVFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MEIwMDAwMjAwMEYwMDVGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MEMwMDAwMjAwMEYwMDYwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2MEQwMDAwMjAwMEYwMDYxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2MEUwMDAwMjAwMEYwMDYyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MEYwMDAwMjAwMEYwMDYzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2MTAwMDAwMjAwMEYwMDY0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2MTEwMDAwMjAwMEYwMDY1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2MTIwMDAwMjAwMEYwMDY2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MTMwMDAwMjAwMEYwMDY3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MTQwMDAwMjAwMEYwMDY4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MTUwMDAwMjAwMEYwMDY5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MTYwMDAwMjAwMEYwMDZBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MTcwMDAwMjAwMEYwMDZCODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MTgwMDAwMjAwMEYwMDZDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MTkwMDAwMjAwMEYwMDZEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MUEwMDAwMjAwMEYwMDZFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MUIwMDAwMjAwMEYwMDZGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2MUMwMDAwMjAwMEYwMDcwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2MUQwMDAwMjAwMEYwMDcxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MUUwMDAwMjAwMEYwMDcyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2MUYwMDAwMjAwMEYwMDczODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2MjAwMDAwMjAwMEYwMDc0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2MjEwMDAwMjAwMEYwMDc1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MjIwMDAwMjAwMEYwMDc2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MjMwMDAwMjAwMEYwMDc3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MjQwMDAwMjAwMEYwMDc4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MjUwMDAwMjAwMEYwMDc5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MjYwMDAwMjAwMEYwMDdBODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MjcwMDAwMjAwMEYwMDdCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MjgwMDAwMjAwMEYwMDdDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MjkwMDAwMjAwMEYwMDdEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MkEwMDAwMjAwMEYwMDdFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2MkIwMDAwMjAwMEYwMDdGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2MkMwMDAwMjAwMEYwMDgwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2MkQwMDAwMjAwMEYwMDgxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2MkUwMDAwMjAwMEYwMDgyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2MkYwMDAwMjAwMEYwMDgzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2MzAwMDAwMjAwMEYwMDg0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2MzEwMDAwMjAwMEYwMDg1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2MzIwMDAwMjAwMEYwMDg2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2MzMwMDAwMjAwMEYwMDg3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2MzQwMDAwMjAwMEYwMDg4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2MzUwMDAwMjAwMEYwMDg5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2MzYwMDAwMjAwMEYwMDhBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2MzcwMDAwMjAwMEYwMDhCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2MzgwMDAwMjAwMEYwMDhDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2MzkwMDAwMjAwMEYwMDhEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2M0EwMDAwMjAwMEYwMDhFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2M0IwMDAwMjAwMEYwMDhGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2M0MwMDAwMjAwMEYwMDkwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2M0QwMDAwMjAwMEYwMDkxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2M0UwMDAwMjAwMEYwMDkyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2M0YwMDAwMjAwMEYwMDkzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NDAwMDAwMjAwMEYwMDk0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2NDEwMDAwMjAwMEYwMDk1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2NDIwMDAwMjAwMEYwMDk2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2NDMwMDAwMjAwMEYwMDk3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NDQwMDAwMjAwMEYwMDk4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NDUwMDAwMjAwMEYwMDk5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NDYwMDAwMjAwMEYwMDlBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NDcwMDAwMjAwMEYwMDlCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NDgwMDAwMjAwMEYwMDlDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NDkwMDAwMjAwMEYwMDlEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NEEwMDAwMjAwMEYwMDlFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NEIwMDAwMjAwMEYwMDlGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NEMwMDAwMjAwMEYwMEEwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2NEQwMDAwMjAwMEYwMEExODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2NEUwMDAwMjAwMEYwMEEyODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NEYwMDAwMjAwMEYwMEEzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2NTAwMDAwMjAwMEYwMEE0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2NTEwMDAwMjAwMEYwMEE1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2NTIwMDAwMjAwMEYwMEE2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NTMwMDAwMjAwMEYwMEE3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NTQwMDAwMjAwMEYwMEE4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NTUwMDAwMjAwMEYwMEE5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NTYwMDAwMjAwMEYwMEFBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NTcwMDAwMjAwMEYwMEFCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NTgwMDAwMjAwMEYwMEFDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NTkwMDAwMjAwMEYwMEFEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NUEwMDAwMjAwMEYwMEFFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NUIwMDAwMjAwMEYwMEFGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2NUMwMDAwMjAwMEYwMEIwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2NUQwMDAwMjAwMEYwMEIxODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NUUwMDAwMjAwMEYwMEIyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2NUYwMDAwMjAwMEYwMEIzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2NjAwMDAwMjAwMEYwMEI0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2NjEwMDAwMjAwMEYwMEI1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NjIwMDAwMjAwMEYwMEI2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NjMwMDAwMjAwMEYwMEI3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NjQwMDAwMjAwMEYwMEI4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NjUwMDAwMjAwMEYwMEI5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NjYwMDAwMjAwMEYwMEJBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NjcwMDAwMjAwMEYwMEJCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NjgwMDAwMjAwMEYwMEJDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NjkwMDAwMjAwMEYwMEJEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NkEwMDAwMjAwMEYwMEJFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2NkIwMDAwMjAwMEYwMEJGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2NkMwMDAwMjAwMEYwMEMwODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2NkQwMDAwMjAwMEYwMEMxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2NkUwMDAwMjAwMEYwMEMyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2NkYwMDAwMjAwMEYwMEMzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2NzAwMDAwMjAwMEYwMEM0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2NzEwMDAwMjAwMEYwMEM1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2NzIwMDAwMjAwMEYwMEM2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2NzMwMDAwMjAwMEYwMEM3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2NzQwMDAwMjAwMEYwMEM4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2NzUwMDAwMjAwMEYwMEM5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2NzYwMDAwMjAwMEYwMENBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2NzcwMDAwMjAwMEYwMENCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2NzgwMDAwMjAwMEYwMENDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2NzkwMDAwMjAwMEYwMENEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2N0EwMDAwMjAwMEYwMENFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2N0IwMDAwMjAwMEYwMENGODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2N0MwMDAwMjAwMEYwMEQwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2N0QwMDAwMjAwMEYwMEQxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2N0UwMDAwMjAwMEYwMEQyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2N0YwMDAwMjAwMEYwMEQzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA2ODAwMDAwMjAwMEYwMEQ0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2ODEwMDAwMjAwMEYwMEQ1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2ODIwMDAwMjAwMEYwMEQ2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2ODMwMDAwMjAwMEYwMEQ3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2ODQwMDAwMjAwMEYwMEQ4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2ODUwMDAwMjAwMEYwMEQ5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2ODYwMDAwMjAwMEYwMERBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2ODcwMDAwMjAwMEYwMERCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2ODgwMDAwMjAwMEYwMERDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2ODkwMDAwMjAwMEYwMEREODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2OEEwMDAwMjAwMEYwMERFODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2OEIwMDAwMjAwMEYwMERGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2OEMwMDAwMjAwMEYwMEUwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2OEQwMDAwMjAwMEYwMEUxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2OEUwMDAwMjAwMEYwMEUyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA2OEYwMDAwMjAwMEYwMEUzODM3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA2OTAwMDAwMjAwMEYwMEU0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2OTEwMDAwMjAwMEYwMEU1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2OTIwMDAwMjAwMEYwMEU2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2OTMwMDAwMjAwMEYwMEU3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2OTQwMDAwMjAwMEYwMEU4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2OTUwMDAwMjAwMEYwMEU5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2OTYwMDAwMjAwMEYwMEVBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2OTcwMDAwMjAwMEYwMEVCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2OTgwMDAwMjAwMEYwMEVDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2OTkwMDAwMjAwMEYwMEVEODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2OUEwMDAwMjAwMEYwMEVFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2OUIwMDAwMjAwMEYwMEVGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2OUMwMDAwMjAwMEYwMEYwODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2OUQwMDAwMjAwMEYwMEYxODM3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA2OUUwMDAwMjAwMEYwMEYyODM3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA2OUYwMDAwMjAwMEYwMEYzODM3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA2QTAwMDAwMjAwMEYwMEY0ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2QTEwMDAwMjAwMEYwMEY1ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2QTIwMDAwMjAwMEYwMEY2ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2QTMwMDAwMjAwMEYwMEY3ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2QTQwMDAwMjAwMEYwMEY4ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2QTUwMDAwMjAwMEYwMEY5ODM3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA2QTYwMDAwMjAwMEYwMEZBODM3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA2QTcwMDAwMjAwMEYwMEZCODM3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA2QTgwMDAwMjAwMEYwMEZDODM3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA2QTkwMDAwMjAwMEYwMEZEODM3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA2QUEwMDAwMjAwMEYwMEZFODM3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA2QUIwMDAwMjAwMEYwMEZGODM3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA2QUMwMDAwMjAwMEYwMDAwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2QUQwMDAwMjAwMEYwMDAxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2QUUwMDAwMjAwMEYwMDAyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2QUYwMDAwMjAwMEYwMDAzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2QjAwMDAwMjAwMEYwMDA0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA2QjEwMDAwMjAwMEYwMDA1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA2QjIwMDAwMjAwMEYwMDA2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA2QjMwMDAwMjAwMEYwMDA3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2QjQwMDAwMjAwMEYwMDA4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2QjUwMDAwMjAwMEYwMDA5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2QjYwMDAwMjAwMEYwMDBBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2QjcwMDAwMjAwMEYwMDBCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2QjgwMDAwMjAwMEYwMDBDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2QjkwMDAwMjAwMEYwMDBEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2QkEwMDAwMjAwMEYwMDBFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2QkIwMDAwMjAwMEYwMDBGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2QkMwMDAwMjAwMEYwMDEwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2QkQwMDAwMjAwMEYwMDExODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2QkUwMDAwMjAwMEYwMDEyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2QkYwMDAwMjAwMEYwMDEzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2QzAwMDAwMjAwMEYwMDE0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA2QzEwMDAwMjAwMEYwMDE1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA2QzIwMDAwMjAwMEYwMDE2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2QzMwMDAwMjAwMEYwMDE3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2QzQwMDAwMjAwMEYwMDE4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2QzUwMDAwMjAwMEYwMDE5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2QzYwMDAwMjAwMEYwMDFBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2QzcwMDAwMjAwMEYwMDFCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2QzgwMDAwMjAwMEYwMDFDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2QzkwMDAwMjAwMEYwMDFEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2Q0EwMDAwMjAwMEYwMDFFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2Q0IwMDAwMjAwMEYwMDFGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2Q0MwMDAwMjAwMEYwMDIwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2Q0QwMDAwMjAwMEYwMDIxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2Q0UwMDAwMjAwMEYwMDIyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2Q0YwMDAwMjAwMEYwMDIzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2RDAwMDAwMjAwMEYwMDI0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA2RDEwMDAwMjAwMEYwMDI1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2RDIwMDAwMjAwMEYwMDI2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2RDMwMDAwMjAwMEYwMDI3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2RDQwMDAwMjAwMEYwMDI4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2RDUwMDAwMjAwMEYwMDI5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2RDYwMDAwMjAwMEYwMDJBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2RDcwMDAwMjAwMEYwMDJCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2RDgwMDAwMjAwMEYwMDJDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2RDkwMDAwMjAwMEYwMDJEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2REEwMDAwMjAwMEYwMDJFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2REIwMDAwMjAwMEYwMDJGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2REMwMDAwMjAwMEYwMDMwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2REQwMDAwMjAwMEYwMDMxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2REUwMDAwMjAwMEYwMDMyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2REYwMDAwMjAwMEYwMDMzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2RTAwMDAwMjAwMEYwMDM0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA2RTEwMDAwMjAwMEYwMDM1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2RTIwMDAwMjAwMEYwMDM2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2RTMwMDAwMjAwMEYwMDM3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2RTQwMDAwMjAwMEYwMDM4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2RTUwMDAwMjAwMEYwMDM5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2RTYwMDAwMjAwMEYwMDNBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2RTcwMDAwMjAwMEYwMDNCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2RTgwMDAwMjAwMEYwMDNDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2RTkwMDAwMjAwMEYwMDNEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2RUEwMDAwMjAwMEYwMDNFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2RUIwMDAwMjAwMEYwMDNGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2RUMwMDAwMjAwMEYwMDQwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2RUQwMDAwMjAwMEYwMDQxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2RUUwMDAwMjAwMEYwMDQyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2RUYwMDAwMjAwMEYwMDQzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2RjAwMDAwMjAwMEYwMDQ0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA2RjEwMDAwMjAwMEYwMDQ1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA2RjIwMDAwMjAwMEYwMDQ2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA2RjMwMDAwMjAwMEYwMDQ3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA2RjQwMDAwMjAwMEYwMDQ4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA2RjUwMDAwMjAwMEYwMDQ5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA2RjYwMDAwMjAwMEYwMDRBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA2RjcwMDAwMjAwMEYwMDRCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA2RjgwMDAwMjAwMEYwMDRDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA2RjkwMDAwMjAwMEYwMDREODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA2RkEwMDAwMjAwMEYwMDRFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA2RkIwMDAwMjAwMEYwMDRGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA2RkMwMDAwMjAwMEYwMDUwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA2RkQwMDAwMjAwMEYwMDUxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA2RkUwMDAwMjAwMEYwMDUyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA2RkYwMDAwMjAwMEYwMDUzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MDAwMDAwMjAwMEYwMDU0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3MDEwMDAwMjAwMEYwMDU1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3MDIwMDAwMjAwMEYwMDU2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3MDMwMDAwMjAwMEYwMDU3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MDQwMDAwMjAwMEYwMDU4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MDUwMDAwMjAwMEYwMDU5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MDYwMDAwMjAwMEYwMDVBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MDcwMDAwMjAwMEYwMDVCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MDgwMDAwMjAwMEYwMDVDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MDkwMDAwMjAwMEYwMDVEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MEEwMDAwMjAwMEYwMDVFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MEIwMDAwMjAwMEYwMDVGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MEMwMDAwMjAwMEYwMDYwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3MEQwMDAwMjAwMEYwMDYxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3MEUwMDAwMjAwMEYwMDYyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MEYwMDAwMjAwMEYwMDYzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3MTAwMDAwMjAwMEYwMDY0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3MTEwMDAwMjAwMEYwMDY1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3MTIwMDAwMjAwMEYwMDY2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MTMwMDAwMjAwMEYwMDY3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MTQwMDAwMjAwMEYwMDY4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MTUwMDAwMjAwMEYwMDY5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MTYwMDAwMjAwMEYwMDZBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MTcwMDAwMjAwMEYwMDZCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MTgwMDAwMjAwMEYwMDZDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MTkwMDAwMjAwMEYwMDZEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MUEwMDAwMjAwMEYwMDZFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MUIwMDAwMjAwMEYwMDZGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3MUMwMDAwMjAwMEYwMDcwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3MUQwMDAwMjAwMEYwMDcxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MUUwMDAwMjAwMEYwMDcyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3MUYwMDAwMjAwMEYwMDczODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3MjAwMDAwMjAwMEYwMDc0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3MjEwMDAwMjAwMEYwMDc1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MjIwMDAwMjAwMEYwMDc2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MjMwMDAwMjAwMEYwMDc3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MjQwMDAwMjAwMEYwMDc4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MjUwMDAwMjAwMEYwMDc5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MjYwMDAwMjAwMEYwMDdBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MjcwMDAwMjAwMEYwMDdCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MjgwMDAwMjAwMEYwMDdDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MjkwMDAwMjAwMEYwMDdEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MkEwMDAwMjAwMEYwMDdFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3MkIwMDAwMjAwMEYwMDdGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3MkMwMDAwMjAwMEYwMDgwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3MkQwMDAwMjAwMEYwMDgxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3MkUwMDAwMjAwMEYwMDgyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3MkYwMDAwMjAwMEYwMDgzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3MzAwMDAwMjAwMEYwMDg0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3MzEwMDAwMjAwMEYwMDg1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3MzIwMDAwMjAwMEYwMDg2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3MzMwMDAwMjAwMEYwMDg3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3MzQwMDAwMjAwMEYwMDg4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3MzUwMDAwMjAwMEYwMDg5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3MzYwMDAwMjAwMEYwMDhBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3MzcwMDAwMjAwMEYwMDhCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3MzgwMDAwMjAwMEYwMDhDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3MzkwMDAwMjAwMEYwMDhEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3M0EwMDAwMjAwMEYwMDhFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3M0IwMDAwMjAwMEYwMDhGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3M0MwMDAwMjAwMEYwMDkwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3M0QwMDAwMjAwMEYwMDkxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3M0UwMDAwMjAwMEYwMDkyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3M0YwMDAwMjAwMEYwMDkzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NDAwMDAwMjAwMEYwMDk0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3NDEwMDAwMjAwMEYwMDk1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3NDIwMDAwMjAwMEYwMDk2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3NDMwMDAwMjAwMEYwMDk3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NDQwMDAwMjAwMEYwMDk4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NDUwMDAwMjAwMEYwMDk5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NDYwMDAwMjAwMEYwMDlBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NDcwMDAwMjAwMEYwMDlCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NDgwMDAwMjAwMEYwMDlDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NDkwMDAwMjAwMEYwMDlEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NEEwMDAwMjAwMEYwMDlFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NEIwMDAwMjAwMEYwMDlGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NEMwMDAwMjAwMEYwMEEwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3NEQwMDAwMjAwMEYwMEExODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3NEUwMDAwMjAwMEYwMEEyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NEYwMDAwMjAwMEYwMEEzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3NTAwMDAwMjAwMEYwMEE0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3NTEwMDAwMjAwMEYwMEE1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3NTIwMDAwMjAwMEYwMEE2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NTMwMDAwMjAwMEYwMEE3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NTQwMDAwMjAwMEYwMEE4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NTUwMDAwMjAwMEYwMEE5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NTYwMDAwMjAwMEYwMEFBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NTcwMDAwMjAwMEYwMEFCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NTgwMDAwMjAwMEYwMEFDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NTkwMDAwMjAwMEYwMEFEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NUEwMDAwMjAwMEYwMEFFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NUIwMDAwMjAwMEYwMEFGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3NUMwMDAwMjAwMEYwMEIwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3NUQwMDAwMjAwMEYwMEIxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NUUwMDAwMjAwMEYwMEIyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3NUYwMDAwMjAwMEYwMEIzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3NjAwMDAwMjAwMEYwMEI0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3NjEwMDAwMjAwMEYwMEI1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NjIwMDAwMjAwMEYwMEI2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NjMwMDAwMjAwMEYwMEI3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NjQwMDAwMjAwMEYwMEI4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NjUwMDAwMjAwMEYwMEI5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NjYwMDAwMjAwMEYwMEJBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NjcwMDAwMjAwMEYwMEJCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NjgwMDAwMjAwMEYwMEJDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NjkwMDAwMjAwMEYwMEJEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NkEwMDAwMjAwMEYwMEJFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3NkIwMDAwMjAwMEYwMEJGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3NkMwMDAwMjAwMEYwMEMwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3NkQwMDAwMjAwMEYwMEMxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3NkUwMDAwMjAwMEYwMEMyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3NkYwMDAwMjAwMEYwMEMzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3NzAwMDAwMjAwMEYwMEM0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3NzEwMDAwMjAwMEYwMEM1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3NzIwMDAwMjAwMEYwMEM2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3NzMwMDAwMjAwMEYwMEM3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3NzQwMDAwMjAwMEYwMEM4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3NzUwMDAwMjAwMEYwMEM5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3NzYwMDAwMjAwMEYwMENBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3NzcwMDAwMjAwMEYwMENCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3NzgwMDAwMjAwMEYwMENDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3NzkwMDAwMjAwMEYwMENEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3N0EwMDAwMjAwMEYwMENFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3N0IwMDAwMjAwMEYwMENGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3N0MwMDAwMjAwMEYwMEQwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3N0QwMDAwMjAwMEYwMEQxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3N0UwMDAwMjAwMEYwMEQyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3N0YwMDAwMjAwMEYwMEQzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA3ODAwMDAwMjAwMEYwMEQ0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3ODEwMDAwMjAwMEYwMEQ1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3ODIwMDAwMjAwMEYwMEQ2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3ODMwMDAwMjAwMEYwMEQ3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3ODQwMDAwMjAwMEYwMEQ4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3ODUwMDAwMjAwMEYwMEQ5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3ODYwMDAwMjAwMEYwMERBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3ODcwMDAwMjAwMEYwMERCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3ODgwMDAwMjAwMEYwMERDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3ODkwMDAwMjAwMEYwMEREODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3OEEwMDAwMjAwMEYwMERFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3OEIwMDAwMjAwMEYwMERGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3OEMwMDAwMjAwMEYwMEUwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3OEQwMDAwMjAwMEYwMEUxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3OEUwMDAwMjAwMEYwMEUyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA3OEYwMDAwMjAwMEYwMEUzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA3OTAwMDAwMjAwMEYwMEU0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3OTEwMDAwMjAwMEYwMEU1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3OTIwMDAwMjAwMEYwMEU2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3OTMwMDAwMjAwMEYwMEU3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3OTQwMDAwMjAwMEYwMEU4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3OTUwMDAwMjAwMEYwMEU5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3OTYwMDAwMjAwMEYwMEVBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3OTcwMDAwMjAwMEYwMEVCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3OTgwMDAwMjAwMEYwMEVDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3OTkwMDAwMjAwMEYwMEVEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3OUEwMDAwMjAwMEYwMEVFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3OUIwMDAwMjAwMEYwMEVGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3OUMwMDAwMjAwMEYwMEYwODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3OUQwMDAwMjAwMEYwMEYxODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA3OUUwMDAwMjAwMEYwMEYyODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA3OUYwMDAwMjAwMEYwMEYzODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA3QTAwMDAwMjAwMEYwMEY0ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3QTEwMDAwMjAwMEYwMEY1ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3QTIwMDAwMjAwMEYwMEY2ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3QTMwMDAwMjAwMEYwMEY3ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3QTQwMDAwMjAwMEYwMEY4ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3QTUwMDAwMjAwMEYwMEY5ODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA3QTYwMDAwMjAwMEYwMEZBODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA3QTcwMDAwMjAwMEYwMEZCODQ3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA3QTgwMDAwMjAwMEYwMEZDODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA3QTkwMDAwMjAwMEYwMEZEODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA3QUEwMDAwMjAwMEYwMEZFODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA3QUIwMDAwMjAwMEYwMEZGODQ3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA3QUMwMDAwMjAwMEYwMDAwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3QUQwMDAwMjAwMEYwMDAxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3QUUwMDAwMjAwMEYwMDAyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3QUYwMDAwMjAwMEYwMDAzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3QjAwMDAwMjAwMEYwMDA0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA3QjEwMDAwMjAwMEYwMDA1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA3QjIwMDAwMjAwMEYwMDA2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA3QjMwMDAwMjAwMEYwMDA3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3QjQwMDAwMjAwMEYwMDA4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3QjUwMDAwMjAwMEYwMDA5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3QjYwMDAwMjAwMEYwMDBBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3QjcwMDAwMjAwMEYwMDBCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3QjgwMDAwMjAwMEYwMDBDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3QjkwMDAwMjAwMEYwMDBEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3QkEwMDAwMjAwMEYwMDBFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3QkIwMDAwMjAwMEYwMDBGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3QkMwMDAwMjAwMEYwMDEwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3QkQwMDAwMjAwMEYwMDExODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3QkUwMDAwMjAwMEYwMDEyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3QkYwMDAwMjAwMEYwMDEzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3QzAwMDAwMjAwMEYwMDE0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA3QzEwMDAwMjAwMEYwMDE1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA3QzIwMDAwMjAwMEYwMDE2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3QzMwMDAwMjAwMEYwMDE3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3QzQwMDAwMjAwMEYwMDE4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3QzUwMDAwMjAwMEYwMDE5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3QzYwMDAwMjAwMEYwMDFBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3QzcwMDAwMjAwMEYwMDFCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3QzgwMDAwMjAwMEYwMDFDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3QzkwMDAwMjAwMEYwMDFEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3Q0EwMDAwMjAwMEYwMDFFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3Q0IwMDAwMjAwMEYwMDFGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3Q0MwMDAwMjAwMEYwMDIwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3Q0QwMDAwMjAwMEYwMDIxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3Q0UwMDAwMjAwMEYwMDIyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3Q0YwMDAwMjAwMEYwMDIzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3RDAwMDAwMjAwMEYwMDI0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA3RDEwMDAwMjAwMEYwMDI1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3RDIwMDAwMjAwMEYwMDI2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3RDMwMDAwMjAwMEYwMDI3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3RDQwMDAwMjAwMEYwMDI4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3RDUwMDAwMjAwMEYwMDI5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3RDYwMDAwMjAwMEYwMDJBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3RDcwMDAwMjAwMEYwMDJCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3RDgwMDAwMjAwMEYwMDJDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3RDkwMDAwMjAwMEYwMDJEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3REEwMDAwMjAwMEYwMDJFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3REIwMDAwMjAwMEYwMDJGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3REMwMDAwMjAwMEYwMDMwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3REQwMDAwMjAwMEYwMDMxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3REUwMDAwMjAwMEYwMDMyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3REYwMDAwMjAwMEYwMDMzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3RTAwMDAwMjAwMEYwMDM0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA3RTEwMDAwMjAwMEYwMDM1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3RTIwMDAwMjAwMEYwMDM2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3RTMwMDAwMjAwMEYwMDM3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3RTQwMDAwMjAwMEYwMDM4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3RTUwMDAwMjAwMEYwMDM5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3RTYwMDAwMjAwMEYwMDNBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3RTcwMDAwMjAwMEYwMDNCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3RTgwMDAwMjAwMEYwMDNDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3RTkwMDAwMjAwMEYwMDNEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3RUEwMDAwMjAwMEYwMDNFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3RUIwMDAwMjAwMEYwMDNGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3RUMwMDAwMjAwMEYwMDQwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3RUQwMDAwMjAwMEYwMDQxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3RUUwMDAwMjAwMEYwMDQyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3RUYwMDAwMjAwMEYwMDQzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3RjAwMDAwMjAwMEYwMDQ0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA3RjEwMDAwMjAwMEYwMDQ1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA3RjIwMDAwMjAwMEYwMDQ2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA3RjMwMDAwMjAwMEYwMDQ3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA3RjQwMDAwMjAwMEYwMDQ4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA3RjUwMDAwMjAwMEYwMDQ5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA3RjYwMDAwMjAwMEYwMDRBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA3RjcwMDAwMjAwMEYwMDRCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA3RjgwMDAwMjAwMEYwMDRDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA3RjkwMDAwMjAwMEYwMDREODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA3RkEwMDAwMjAwMEYwMDRFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA3RkIwMDAwMjAwMEYwMDRGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA3RkMwMDAwMjAwMEYwMDUwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA3RkQwMDAwMjAwMEYwMDUxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA3RkUwMDAwMjAwMEYwMDUyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA3RkYwMDAwMjAwMEYwMDUzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MDAwMDAwMjAwMEYwMDU0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4MDEwMDAwMjAwMEYwMDU1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4MDIwMDAwMjAwMEYwMDU2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4MDMwMDAwMjAwMEYwMDU3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MDQwMDAwMjAwMEYwMDU4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MDUwMDAwMjAwMEYwMDU5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MDYwMDAwMjAwMEYwMDVBODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MDcwMDAwMjAwMEYwMDVCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MDgwMDAwMjAwMEYwMDVDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MDkwMDAwMjAwMEYwMDVEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MEEwMDAwMjAwMEYwMDVFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MEIwMDAwMjAwMEYwMDVGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MEMwMDAwMjAwMEYwMDYwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4MEQwMDAwMjAwMEYwMDYxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4MEUwMDAwMjAwMEYwMDYyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MEYwMDAwMjAwMEYwMDYzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4MTAwMDAwMjAwMEYwMDY0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4MTEwMDAwMjAwMEYwMDY1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4MTIwMDAwMjAwMEYwMDY2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MTMwMDAwMjAwMEYwMDY3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MTQwMDAwMjAwMEYwMDY4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MTUwMDAwMjAwMEYwMDY5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MTYwMDAwMjAwMEYwMDZBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MTcwMDAwMjAwMEYwMDZCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MTgwMDAwMjAwMEYwMDZDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MTkwMDAwMjAwMEYwMDZEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MUEwMDAwMjAwMEYwMDZFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MUIwMDAwMjAwMEYwMDZGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4MUMwMDAwMjAwMEYwMDcwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4MUQwMDAwMjAwMEYwMDcxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MUUwMDAwMjAwMEYwMDcyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4MUYwMDAwMjAwMEYwMDczODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4MjAwMDAwMjAwMEYwMDc0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4MjEwMDAwMjAwMEYwMDc1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MjIwMDAwMjAwMEYwMDc2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MjMwMDAwMjAwMEYwMDc3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MjQwMDAwMjAwMEYwMDc4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MjUwMDAwMjAwMEYwMDc5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MjYwMDAwMjAwMEYwMDdBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MjcwMDAwMjAwMEYwMDdCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MjgwMDAwMjAwMEYwMDdDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MjkwMDAwMjAwMEYwMDdEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MkEwMDAwMjAwMEYwMDdFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4MkIwMDAwMjAwMEYwMDdGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4MkMwMDAwMjAwMEYwMDgwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4MkQwMDAwMjAwMEYwMDgxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4MkUwMDAwMjAwMEYwMDgyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4MkYwMDAwMjAwMEYwMDgzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4MzAwMDAwMjAwMEYwMDg0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4MzEwMDAwMjAwMEYwMDg1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4MzIwMDAwMjAwMEYwMDg2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4MzMwMDAwMjAwMEYwMDg3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4MzQwMDAwMjAwMEYwMDg4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4MzUwMDAwMjAwMEYwMDg5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4MzYwMDAwMjAwMEYwMDhBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4MzcwMDAwMjAwMEYwMDhCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4MzgwMDAwMjAwMEYwMDhDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4MzkwMDAwMjAwMEYwMDhEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4M0EwMDAwMjAwMEYwMDhFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4M0IwMDAwMjAwMEYwMDhGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4M0MwMDAwMjAwMEYwMDkwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4M0QwMDAwMjAwMEYwMDkxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4M0UwMDAwMjAwMEYwMDkyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4M0YwMDAwMjAwMEYwMDkzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NDAwMDAwMjAwMEYwMDk0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4NDEwMDAwMjAwMEYwMDk1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4NDIwMDAwMjAwMEYwMDk2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4NDMwMDAwMjAwMEYwMDk3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NDQwMDAwMjAwMEYwMDk4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NDUwMDAwMjAwMEYwMDk5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NDYwMDAwMjAwMEYwMDlBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NDcwMDAwMjAwMEYwMDlCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NDgwMDAwMjAwMEYwMDlDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NDkwMDAwMjAwMEYwMDlEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NEEwMDAwMjAwMEYwMDlFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NEIwMDAwMjAwMEYwMDlGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NEMwMDAwMjAwMEYwMEEwODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4NEQwMDAwMjAwMEYwMEExODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4NEUwMDAwMjAwMEYwMEEyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NEYwMDAwMjAwMEYwMEEzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4NTAwMDAwMjAwMEYwMEE0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4NTEwMDAwMjAwMEYwMEE1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4NTIwMDAwMjAwMEYwMEE2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NTMwMDAwMjAwMEYwMEE3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NTQwMDAwMjAwMEYwMEE4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NTUwMDAwMjAwMEYwMEE5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NTYwMDAwMjAwMEYwMEFBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NTcwMDAwMjAwMEYwMEFCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NTgwMDAwMjAwMEYwMEFDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NTkwMDAwMjAwMEYwMEFEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NUEwMDAwMjAwMEYwMEFFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NUIwMDAwMjAwMEYwMEFGODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4NUMwMDAwMjAwMEYwMEIwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4NUQwMDAwMjAwMEYwMEIxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NUUwMDAwMjAwMEYwMEIyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4NUYwMDAwMjAwMEYwMEIzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4NjAwMDAwMjAwMEYwMEI0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4NjEwMDAwMjAwMEYwMEI1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NjIwMDAwMjAwMEYwMEI2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NjMwMDAwMjAwMEYwMEI3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NjQwMDAwMjAwMEYwMEI4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NjUwMDAwMjAwMEYwMEI5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NjYwMDAwMjAwMEYwMEJBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NjcwMDAwMjAwMEYwMEJCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NjgwMDAwMjAwMEYwMEJDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NjkwMDAwMjAwMEYwMEJEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NkEwMDAwMjAwMEYwMEJFODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4NkIwMDAwMjAwMEYwMEJGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4NkMwMDAwMjAwMEYwMEMwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4NkQwMDAwMjAwMEYwMEMxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4NkUwMDAwMjAwMEYwMEMyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4NkYwMDAwMjAwMEYwMEMzODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4NzAwMDAwMjAwMEYwMEM0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4NzEwMDAwMjAwMEYwMEM1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4NzIwMDAwMjAwMEYwMEM2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4NzMwMDAwMjAwMEYwMEM3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4NzQwMDAwMjAwMEYwMEM4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4NzUwMDAwMjAwMEYwMEM5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4NzYwMDAwMjAwMEYwMENBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4NzcwMDAwMjAwMEYwMENCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4NzgwMDAwMjAwMEYwMENDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4NzkwMDAwMjAwMEYwMENEODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4N0EwMDAwMjAwMEYwMENFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4N0IwMDAwMjAwMEYwMENGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4N0MwMDAwMjAwMEYwMEQwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4N0QwMDAwMjAwMEYwMEQxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4N0UwMDAwMjAwMEYwMEQyODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4N0YwMDAwMjAwMEYwMEQzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA4ODAwMDAwMjAwMEYwMEQ0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4ODEwMDAwMjAwMEYwMEQ1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4ODIwMDAwMjAwMEYwMEQ2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4ODMwMDAwMjAwMEYwMEQ3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4ODQwMDAwMjAwMEYwMEQ4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4ODUwMDAwMjAwMEYwMEQ5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4ODYwMDAwMjAwMEYwMERBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4ODcwMDAwMjAwMEYwMERCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4ODgwMDAwMjAwMEYwMERDODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4ODkwMDAwMjAwMEYwMEREODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4OEEwMDAwMjAwMEYwMERFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4OEIwMDAwMjAwMEYwMERGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4OEMwMDAwMjAwMEYwMEUwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4OEQwMDAwMjAwMEYwMEUxODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4OEUwMDAwMjAwMEYwMEUyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA4OEYwMDAwMjAwMEYwMEUzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA4OTAwMDAwMjAwMEYwMEU0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4OTEwMDAwMjAwMEYwMEU1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4OTIwMDAwMjAwMEYwMEU2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4OTMwMDAwMjAwMEYwMEU3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4OTQwMDAwMjAwMEYwMEU4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4OTUwMDAwMjAwMEYwMEU5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4OTYwMDAwMjAwMEYwMEVBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4OTcwMDAwMjAwMEYwMEVCODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4OTgwMDAwMjAwMEYwMEVDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4OTkwMDAwMjAwMEYwMEVEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4OUEwMDAwMjAwMEYwMEVFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4OUIwMDAwMjAwMEYwMEVGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4OUMwMDAwMjAwMEYwMEYwODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4OUQwMDAwMjAwMEYwMEYxODU3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA4OUUwMDAwMjAwMEYwMEYyODU3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA4OUYwMDAwMjAwMEYwMEYzODU3MTAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA4QTAwMDAwMjAwMEYwMEY0ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4QTEwMDAwMjAwMEYwMEY1ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4QTIwMDAwMjAwMEYwMEY2ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4QTMwMDAwMjAwMEYwMEY3ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4QTQwMDAwMjAwMEYwMEY4ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4QTUwMDAwMjAwMEYwMEY5ODU3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA4QTYwMDAwMjAwMEYwMEZBODU3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA4QTcwMDAwMjAwMEYwMEZCODU3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA4QTgwMDAwMjAwMEYwMEZDODU3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA4QTkwMDAwMjAwMEYwMEZEODU3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA4QUEwMDAwMjAwMEYwMEZFODU3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA4QUIwMDAwMjAwMEYwMEZGODU3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA4QUMwMDAwMjAwMEYwMDAwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4QUQwMDAwMjAwMEYwMDAxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4QUUwMDAwMjAwMEYwMDAyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4QUYwMDAwMjAwMEYwMDAzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4QjAwMDAwMjAwMEYwMDA0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA4QjEwMDAwMjAwMEYwMDA1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA4QjIwMDAwMjAwMEYwMDA2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA4QjMwMDAwMjAwMEYwMDA3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4QjQwMDAwMjAwMEYwMDA4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4QjUwMDAwMjAwMEYwMDA5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4QjYwMDAwMjAwMEYwMDBBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4QjcwMDAwMjAwMEYwMDBCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4QjgwMDAwMjAwMEYwMDBDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4QjkwMDAwMjAwMEYwMDBEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4QkEwMDAwMjAwMEYwMDBFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4QkIwMDAwMjAwMEYwMDBGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4QkMwMDAwMjAwMEYwMDEwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4QkQwMDAwMjAwMEYwMDExODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4QkUwMDAwMjAwMEYwMDEyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4QkYwMDAwMjAwMEYwMDEzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4QzAwMDAwMjAwMEYwMDE0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA4QzEwMDAwMjAwMEYwMDE1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA4QzIwMDAwMjAwMEYwMDE2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4QzMwMDAwMjAwMEYwMDE3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4QzQwMDAwMjAwMEYwMDE4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4QzUwMDAwMjAwMEYwMDE5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4QzYwMDAwMjAwMEYwMDFBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4QzcwMDAwMjAwMEYwMDFCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4QzgwMDAwMjAwMEYwMDFDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4QzkwMDAwMjAwMEYwMDFEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4Q0EwMDAwMjAwMEYwMDFFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4Q0IwMDAwMjAwMEYwMDFGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4Q0MwMDAwMjAwMEYwMDIwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4Q0QwMDAwMjAwMEYwMDIxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4Q0UwMDAwMjAwMEYwMDIyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4Q0YwMDAwMjAwMEYwMDIzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4RDAwMDAwMjAwMEYwMDI0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA4RDEwMDAwMjAwMEYwMDI1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4RDIwMDAwMjAwMEYwMDI2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4RDMwMDAwMjAwMEYwMDI3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4RDQwMDAwMjAwMEYwMDI4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4RDUwMDAwMjAwMEYwMDI5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4RDYwMDAwMjAwMEYwMDJBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4RDcwMDAwMjAwMEYwMDJCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4RDgwMDAwMjAwMEYwMDJDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4RDkwMDAwMjAwMEYwMDJEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4REEwMDAwMjAwMEYwMDJFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4REIwMDAwMjAwMEYwMDJGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4REMwMDAwMjAwMEYwMDMwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4REQwMDAwMjAwMEYwMDMxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4REUwMDAwMjAwMEYwMDMyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4REYwMDAwMjAwMEYwMDMzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4RTAwMDAwMjAwMEYwMDM0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA4RTEwMDAwMjAwMEYwMDM1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4RTIwMDAwMjAwMEYwMDM2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4RTMwMDAwMjAwMEYwMDM3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4RTQwMDAwMjAwMEYwMDM4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4RTUwMDAwMjAwMEYwMDM5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4RTYwMDAwMjAwMEYwMDNBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4RTcwMDAwMjAwMEYwMDNCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4RTgwMDAwMjAwMEYwMDNDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4RTkwMDAwMjAwMEYwMDNEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4RUEwMDAwMjAwMEYwMDNFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4RUIwMDAwMjAwMEYwMDNGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4RUMwMDAwMjAwMEYwMDQwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4RUQwMDAwMjAwMEYwMDQxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4RUUwMDAwMjAwMEYwMDQyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4RUYwMDAwMjAwMEYwMDQzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4RjAwMDAwMjAwMEYwMDQ0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA4RjEwMDAwMjAwMEYwMDQ1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA4RjIwMDAwMjAwMEYwMDQ2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA4RjMwMDAwMjAwMEYwMDQ3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA4RjQwMDAwMjAwMEYwMDQ4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA4RjUwMDAwMjAwMEYwMDQ5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA4RjYwMDAwMjAwMEYwMDRBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA4RjcwMDAwMjAwMEYwMDRCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA4RjgwMDAwMjAwMEYwMDRDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA4RjkwMDAwMjAwMEYwMDREODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA4RkEwMDAwMjAwMEYwMDRFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA4RkIwMDAwMjAwMEYwMDRGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA4RkMwMDAwMjAwMEYwMDUwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA4RkQwMDAwMjAwMEYwMDUxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA4RkUwMDAwMjAwMEYwMDUyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA4RkYwMDAwMjAwMEYwMDUzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MDAwMDAwMjAwMEYwMDU0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5MDEwMDAwMjAwMEYwMDU1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5MDIwMDAwMjAwMEYwMDU2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5MDMwMDAwMjAwMEYwMDU3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MDQwMDAwMjAwMEYwMDU4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MDUwMDAwMjAwMEYwMDU5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MDYwMDAwMjAwMEYwMDVBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MDcwMDAwMjAwMEYwMDVCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MDgwMDAwMjAwMEYwMDVDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MDkwMDAwMjAwMEYwMDVEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MEEwMDAwMjAwMEYwMDVFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MEIwMDAwMjAwMEYwMDVGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MEMwMDAwMjAwMEYwMDYwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5MEQwMDAwMjAwMEYwMDYxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5MEUwMDAwMjAwMEYwMDYyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MEYwMDAwMjAwMEYwMDYzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5MTAwMDAwMjAwMEYwMDY0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5MTEwMDAwMjAwMEYwMDY1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5MTIwMDAwMjAwMEYwMDY2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MTMwMDAwMjAwMEYwMDY3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MTQwMDAwMjAwMEYwMDY4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MTUwMDAwMjAwMEYwMDY5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MTYwMDAwMjAwMEYwMDZBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MTcwMDAwMjAwMEYwMDZCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MTgwMDAwMjAwMEYwMDZDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MTkwMDAwMjAwMEYwMDZEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MUEwMDAwMjAwMEYwMDZFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MUIwMDAwMjAwMEYwMDZGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5MUMwMDAwMjAwMEYwMDcwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5MUQwMDAwMjAwMEYwMDcxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MUUwMDAwMjAwMEYwMDcyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5MUYwMDAwMjAwMEYwMDczODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5MjAwMDAwMjAwMEYwMDc0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5MjEwMDAwMjAwMEYwMDc1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MjIwMDAwMjAwMEYwMDc2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MjMwMDAwMjAwMEYwMDc3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MjQwMDAwMjAwMEYwMDc4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MjUwMDAwMjAwMEYwMDc5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MjYwMDAwMjAwMEYwMDdBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MjcwMDAwMjAwMEYwMDdCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MjgwMDAwMjAwMEYwMDdDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MjkwMDAwMjAwMEYwMDdEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MkEwMDAwMjAwMEYwMDdFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5MkIwMDAwMjAwMEYwMDdGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5MkMwMDAwMjAwMEYwMDgwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5MkQwMDAwMjAwMEYwMDgxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5MkUwMDAwMjAwMEYwMDgyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5MkYwMDAwMjAwMEYwMDgzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5MzAwMDAwMjAwMEYwMDg0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5MzEwMDAwMjAwMEYwMDg1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5MzIwMDAwMjAwMEYwMDg2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5MzMwMDAwMjAwMEYwMDg3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5MzQwMDAwMjAwMEYwMDg4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5MzUwMDAwMjAwMEYwMDg5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5MzYwMDAwMjAwMEYwMDhBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5MzcwMDAwMjAwMEYwMDhCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5MzgwMDAwMjAwMEYwMDhDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5MzkwMDAwMjAwMEYwMDhEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5M0EwMDAwMjAwMEYwMDhFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5M0IwMDAwMjAwMEYwMDhGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5M0MwMDAwMjAwMEYwMDkwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5M0QwMDAwMjAwMEYwMDkxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5M0UwMDAwMjAwMEYwMDkyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5M0YwMDAwMjAwMEYwMDkzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NDAwMDAwMjAwMEYwMDk0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5NDEwMDAwMjAwMEYwMDk1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5NDIwMDAwMjAwMEYwMDk2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5NDMwMDAwMjAwMEYwMDk3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NDQwMDAwMjAwMEYwMDk4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NDUwMDAwMjAwMEYwMDk5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NDYwMDAwMjAwMEYwMDlBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NDcwMDAwMjAwMEYwMDlCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NDgwMDAwMjAwMEYwMDlDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NDkwMDAwMjAwMEYwMDlEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NEEwMDAwMjAwMEYwMDlFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NEIwMDAwMjAwMEYwMDlGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NEMwMDAwMjAwMEYwMEEwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5NEQwMDAwMjAwMEYwMEExODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5NEUwMDAwMjAwMEYwMEEyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NEYwMDAwMjAwMEYwMEEzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5NTAwMDAwMjAwMEYwMEE0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5NTEwMDAwMjAwMEYwMEE1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5NTIwMDAwMjAwMEYwMEE2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NTMwMDAwMjAwMEYwMEE3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NTQwMDAwMjAwMEYwMEE4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NTUwMDAwMjAwMEYwMEE5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NTYwMDAwMjAwMEYwMEFBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NTcwMDAwMjAwMEYwMEFCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NTgwMDAwMjAwMEYwMEFDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NTkwMDAwMjAwMEYwMEFEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NUEwMDAwMjAwMEYwMEFFODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NUIwMDAwMjAwMEYwMEFGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5NUMwMDAwMjAwMEYwMEIwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5NUQwMDAwMjAwMEYwMEIxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NUUwMDAwMjAwMEYwMEIyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5NUYwMDAwMjAwMEYwMEIzODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5NjAwMDAwMjAwMEYwMEI0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5NjEwMDAwMjAwMEYwMEI1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NjIwMDAwMjAwMEYwMEI2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NjMwMDAwMjAwMEYwMEI3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NjQwMDAwMjAwMEYwMEI4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NjUwMDAwMjAwMEYwMEI5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NjYwMDAwMjAwMEYwMEJBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NjcwMDAwMjAwMEYwMEJCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NjgwMDAwMjAwMEYwMEJDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NjkwMDAwMjAwMEYwMEJEODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NkEwMDAwMjAwMEYwMEJFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5NkIwMDAwMjAwMEYwMEJGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5NkMwMDAwMjAwMEYwMEMwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5NkQwMDAwMjAwMEYwMEMxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5NkUwMDAwMjAwMEYwMEMyODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5NkYwMDAwMjAwMEYwMEMzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5NzAwMDAwMjAwMEYwMEM0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5NzEwMDAwMjAwMEYwMEM1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5NzIwMDAwMjAwMEYwMEM2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5NzMwMDAwMjAwMEYwMEM3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5NzQwMDAwMjAwMEYwMEM4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5NzUwMDAwMjAwMEYwMEM5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5NzYwMDAwMjAwMEYwMENBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5NzcwMDAwMjAwMEYwMENCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5NzgwMDAwMjAwMEYwMENDODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5NzkwMDAwMjAwMEYwMENEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5N0EwMDAwMjAwMEYwMENFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5N0IwMDAwMjAwMEYwMENGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5N0MwMDAwMjAwMEYwMEQwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5N0QwMDAwMjAwMEYwMEQxODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5N0UwMDAwMjAwMEYwMEQyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5N0YwMDAwMjAwMEYwMEQzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA5ODAwMDAwMjAwMEYwMEQ0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5ODEwMDAwMjAwMEYwMEQ1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5ODIwMDAwMjAwMEYwMEQ2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5ODMwMDAwMjAwMEYwMEQ3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5ODQwMDAwMjAwMEYwMEQ4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5ODUwMDAwMjAwMEYwMEQ5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5ODYwMDAwMjAwMEYwMERBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5ODcwMDAwMjAwMEYwMERCODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5ODgwMDAwMjAwMEYwMERDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5ODkwMDAwMjAwMEYwMEREODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5OEEwMDAwMjAwMEYwMERFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5OEIwMDAwMjAwMEYwMERGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5OEMwMDAwMjAwMEYwMEUwODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5OEQwMDAwMjAwMEYwMEUxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5OEUwMDAwMjAwMEYwMEUyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA5OEYwMDAwMjAwMEYwMEUzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA5OTAwMDAwMjAwMEYwMEU0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5OTEwMDAwMjAwMEYwMEU1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5OTIwMDAwMjAwMEYwMEU2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5OTMwMDAwMjAwMEYwMEU3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5OTQwMDAwMjAwMEYwMEU4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5OTUwMDAwMjAwMEYwMEU5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5OTYwMDAwMjAwMEYwMEVBODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5OTcwMDAwMjAwMEYwMEVCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5OTgwMDAwMjAwMEYwMEVDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5OTkwMDAwMjAwMEYwMEVEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5OUEwMDAwMjAwMEYwMEVFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5OUIwMDAwMjAwMEYwMEVGODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5OUMwMDAwMjAwMEYwMEYwODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5OUQwMDAwMjAwMEYwMEYxODY3MTAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA5OUUwMDAwMjAwMEYwMEYyODY3MTAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA5OUYwMDAwMjAwMEYwMEYzODY3MTAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTA5QTAwMDAwMjAwMEYwMEY0ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5QTEwMDAwMjAwMEYwMEY1ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5QTIwMDAwMjAwMEYwMEY2ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5QTMwMDAwMjAwMEYwMEY3ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5QTQwMDAwMjAwMEYwMEY4ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5QTUwMDAwMjAwMEYwMEY5ODY3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTA5QTYwMDAwMjAwMEYwMEZBODY3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA5QTcwMDAwMjAwMEYwMEZCODY3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTA5QTgwMDAwMjAwMEYwMEZDODY3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA5QTkwMDAwMjAwMEYwMEZEODY3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5QUEwMDAwMjAwMEYwMEZFODY3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA5QUIwMDAwMjAwMEYwMEZGODY3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA5QUMwMDAwMjAwMEYwMDAwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5QUQwMDAwMjAwMEYwMDAxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5QUUwMDAwMjAwMEYwMDAyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5QUYwMDAwMjAwMEYwMDAzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5QjAwMDAwMjAwMEYwMDA0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA5QjEwMDAwMjAwMEYwMDA1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA5QjIwMDAwMjAwMEYwMDA2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA5QjMwMDAwMjAwMEYwMDA3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5QjQwMDAwMjAwMEYwMDA4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5QjUwMDAwMjAwMEYwMDA5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5QjYwMDAwMjAwMEYwMDBBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5QjcwMDAwMjAwMEYwMDBCODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5QjgwMDAwMjAwMEYwMDBDODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5QjkwMDAwMjAwMEYwMDBEODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5QkEwMDAwMjAwMEYwMDBFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5QkIwMDAwMjAwMEYwMDBGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5QkMwMDAwMjAwMEYwMDEwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5QkQwMDAwMjAwMEYwMDExODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5QkUwMDAwMjAwMEYwMDEyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5QkYwMDAwMjAwMEYwMDEzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5QzAwMDAwMjAwMEYwMDE0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA5QzEwMDAwMjAwMEYwMDE1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA5QzIwMDAwMjAwMEYwMDE2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5QzMwMDAwMjAwMEYwMDE3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5QzQwMDAwMjAwMEYwMDE4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5QzUwMDAwMjAwMEYwMDE5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5QzYwMDAwMjAwMEYwMDFBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5QzcwMDAwMjAwMEYwMDFCODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5QzgwMDAwMjAwMEYwMDFDODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5QzkwMDAwMjAwMEYwMDFEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5Q0EwMDAwMjAwMEYwMDFFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5Q0IwMDAwMjAwMEYwMDFGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5Q0MwMDAwMjAwMEYwMDIwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5Q0QwMDAwMjAwMEYwMDIxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5Q0UwMDAwMjAwMEYwMDIyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5Q0YwMDAwMjAwMEYwMDIzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5RDAwMDAwMjAwMEYwMDI0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA5RDEwMDAwMjAwMEYwMDI1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5RDIwMDAwMjAwMEYwMDI2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5RDMwMDAwMjAwMEYwMDI3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5RDQwMDAwMjAwMEYwMDI4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5RDUwMDAwMjAwMEYwMDI5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5RDYwMDAwMjAwMEYwMDJBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5RDcwMDAwMjAwMEYwMDJCODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5RDgwMDAwMjAwMEYwMDJDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5RDkwMDAwMjAwMEYwMDJEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5REEwMDAwMjAwMEYwMDJFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5REIwMDAwMjAwMEYwMDJGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5REMwMDAwMjAwMEYwMDMwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5REQwMDAwMjAwMEYwMDMxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5REUwMDAwMjAwMEYwMDMyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5REYwMDAwMjAwMEYwMDMzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5RTAwMDAwMjAwMEYwMDM0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA5RTEwMDAwMjAwMEYwMDM1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5RTIwMDAwMjAwMEYwMDM2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5RTMwMDAwMjAwMEYwMDM3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5RTQwMDAwMjAwMEYwMDM4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5RTUwMDAwMjAwMEYwMDM5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5RTYwMDAwMjAwMEYwMDNBODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5RTcwMDAwMjAwMEYwMDNCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5RTgwMDAwMjAwMEYwMDNDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5RTkwMDAwMjAwMEYwMDNEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5RUEwMDAwMjAwMEYwMDNFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5RUIwMDAwMjAwMEYwMDNGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5RUMwMDAwMjAwMEYwMDQwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5RUQwMDAwMjAwMEYwMDQxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5RUUwMDAwMjAwMEYwMDQyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5RUYwMDAwMjAwMEYwMDQzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5RjAwMDAwMjAwMEYwMDQ0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTA5RjEwMDAwMjAwMEYwMDQ1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTA5RjIwMDAwMjAwMEYwMDQ2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA5RjMwMDAwMjAwMEYwMDQ3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA5RjQwMDAwMjAwMEYwMDQ4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA5RjUwMDAwMjAwMEYwMDQ5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA5RjYwMDAwMjAwMEYwMDRBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA5RjcwMDAwMjAwMEYwMDRCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA5RjgwMDAwMjAwMEYwMDRDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA5RjkwMDAwMjAwMEYwMDREODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTA5RkEwMDAwMjAwMEYwMDRFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA5RkIwMDAwMjAwMEYwMDRGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA5RkMwMDAwMjAwMEYwMDUwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTA5RkQwMDAwMjAwMEYwMDUxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTA5RkUwMDAwMjAwMEYwMDUyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA5RkYwMDAwMjAwMEYwMDUzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMDAwMDAwMjAwMEYwMDU0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBBMDEwMDAwMjAwMEYwMDU1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBMDIwMDAwMjAwMEYwMDU2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBMDMwMDAwMjAwMEYwMDU3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMDQwMDAwMjAwMEYwMDU4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMDUwMDAwMjAwMEYwMDU5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMDYwMDAwMjAwMEYwMDVBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMDcwMDAwMjAwMEYwMDVCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMDgwMDAwMjAwMEYwMDVDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMDkwMDAwMjAwMEYwMDVEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMEEwMDAwMjAwMEYwMDVFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMEIwMDAwMjAwMEYwMDVGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMEMwMDAwMjAwMEYwMDYwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBMEQwMDAwMjAwMEYwMDYxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBMEUwMDAwMjAwMEYwMDYyODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMEYwMDAwMjAwMEYwMDYzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBMTAwMDAwMjAwMEYwMDY0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBMTEwMDAwMjAwMEYwMDY1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBMTIwMDAwMjAwMEYwMDY2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMTMwMDAwMjAwMEYwMDY3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMTQwMDAwMjAwMEYwMDY4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMTUwMDAwMjAwMEYwMDY5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMTYwMDAwMjAwMEYwMDZBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMTcwMDAwMjAwMEYwMDZCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMTgwMDAwMjAwMEYwMDZDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMTkwMDAwMjAwMEYwMDZEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMUEwMDAwMjAwMEYwMDZFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMUIwMDAwMjAwMEYwMDZGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBMUMwMDAwMjAwMEYwMDcwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBMUQwMDAwMjAwMEYwMDcxODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMUUwMDAwMjAwMEYwMDcyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBMUYwMDAwMjAwMEYwMDczODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBMjAwMDAwMjAwMEYwMDc0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBMjEwMDAwMjAwMEYwMDc1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMjIwMDAwMjAwMEYwMDc2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMjMwMDAwMjAwMEYwMDc3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMjQwMDAwMjAwMEYwMDc4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMjUwMDAwMjAwMEYwMDc5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMjYwMDAwMjAwMEYwMDdBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMjcwMDAwMjAwMEYwMDdCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMjgwMDAwMjAwMEYwMDdDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMjkwMDAwMjAwMEYwMDdEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMkEwMDAwMjAwMEYwMDdFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBMkIwMDAwMjAwMEYwMDdGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBMkMwMDAwMjAwMEYwMDgwODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBMkQwMDAwMjAwMEYwMDgxODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBMkUwMDAwMjAwMEYwMDgyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBMkYwMDAwMjAwMEYwMDgzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBMzAwMDAwMjAwMEYwMDg0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBBMzEwMDAwMjAwMEYwMDg1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMzIwMDAwMjAwMEYwMDg2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBMzMwMDAwMjAwMEYwMDg3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBMzQwMDAwMjAwMEYwMDg4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBMzUwMDAwMjAwMEYwMDg5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBMzYwMDAwMjAwMEYwMDhBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBMzcwMDAwMjAwMEYwMDhCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBMzgwMDAwMjAwMEYwMDhDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBMzkwMDAwMjAwMEYwMDhEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBM0EwMDAwMjAwMEYwMDhFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBM0IwMDAwMjAwMEYwMDhGODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBM0MwMDAwMjAwMEYwMDkwODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBM0QwMDAwMjAwMEYwMDkxODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBM0UwMDAwMjAwMEYwMDkyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBM0YwMDAwMjAwMEYwMDkzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBNDAwMDAwMjAwMEYwMDk0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBNDEwMDAwMjAwMEYwMDk1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBNDIwMDAwMjAwMEYwMDk2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBNDMwMDAwMjAwMEYwMDk3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBNDQwMDAwMjAwMEYwMDk4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBNDUwMDAwMjAwMEYwMDk5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNDYwMDAwMjAwMEYwMDlBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNDcwMDAwMjAwMEYwMDlCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBNDgwMDAwMjAwMEYwMDlDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBNDkwMDAwMjAwMEYwMDlEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBNEEwMDAwMjAwMEYwMDlFODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBNEIwMDAwMjAwMEYwMDlGODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBNEMwMDAwMjAwMEYwMEEwODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBNEQwMDAwMjAwMEYwMEExODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBNEUwMDAwMjAwMEYwMEEyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBNEYwMDAwMjAwMEYwMEEzODc3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBBNTAwMDAwMjAwMEYwMEE0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBBNTEwMDAwMjAwMEYwMEE1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBNTIwMDAwMjAwMEYwMEE2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBNTMwMDAwMjAwMEYwMEE3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBNTQwMDAwMjAwMEYwMEE4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNTUwMDAwMjAwMEYwMEE5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNTYwMDAwMjAwMEYwMEFBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBNTcwMDAwMjAwMEYwMEFCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBNTgwMDAwMjAwMEYwMEFDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBNTkwMDAwMjAwMEYwMEFEODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBNUEwMDAwMjAwMEYwMEFFODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBNUIwMDAwMjAwMEYwMEFGODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBNUMwMDAwMjAwMEYwMEIwODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBNUQwMDAwMjAwMEYwMEIxODc3MTAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBNUUwMDAwMjAwMEYwMEIyODc3MTAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBBNUYwMDAwMjAwMEYwMEIzODc3MTAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBBNjAwMDAwMjAwMEYwMEI0ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBBNjEwMDAwMjAwMEYwMEI1ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBBNjIwMDAwMjAwMEYwMEI2ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBBNjMwMDAwMjAwMEYwMEI3ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNjQwMDAwMjAwMEYwMEI4ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNjUwMDAwMjAwMEYwMEI5ODc3MTAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBNjYwMDAwMjAwMEYwMEJBODc3MTAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBNjcwMDAwMjAwMEYwMEJCODc3MTAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBNjgwMDAwMjAwMEYwMEJDODc3MTAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBNjkwMDAwMjAwMEYwMEJEODc3MTAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBNkEwMDAwMjAwMEYwMEJFODc3MTAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBNkIwMDAwMjAwMEYwMEJGODc3MTAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBNkMwMDAwMjAwMEYwMEMwODc3MTAwNzkwMDAwMDA3NjkwNjBGREU1Cis6MTBBNkQwMDAwMjAwMEYwMEMxODc3MTAwM0QwMDAwMDA2RjAwODBGNzhECis6MTBBNkUwMDAwMjAwMEYwMEMyODc3MTAwM0QwMDAwMDA2RjAwODBGNzdDCis6MTBBNkYwMDAwMjAwMEYwMEMzODc3MTAwM0QwMDAwMDA2RjAwODBGNzZCCis6MTBBNzAwMDAwMjAwMEYwMEM0ODc3MTgwM0QwMDAwMDA2RjAwODBGN0Q5Cis6MDAwMDAwMDFGRgorLyogTG9hZGluZyBGaXJtd2FyZSAqLworLyogSU5UX01FTSBWZXIgKi8KKyAqIFRlaHV0aSBOZXR3b3JrcyhSKSBOZXR3b3JrIERyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRlaHV0aSBOZXR3b3JrcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnNfdmZzLmggYi9mcy85cC92OWZzX3Zmcy5oCmluZGV4IGMyOTViYTcuLmYwYzdkZTcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnNfdmZzLmgKKysrIGIvZnMvOXAvdjlmc192ZnMuaApAQCAtNDEsOCArNDEsOCBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdjlmc19hZGRyX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKIAogc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSk7CiBpbm9fdCB2OWZzX3FpZDJpbm8oc3RydWN0IHA5X3FpZCAqcWlkKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kZW50cnkuYyBiL2ZzLzlwL3Zmc19kZW50cnkuYwppbmRleCAwNmRjYzdjLi5kNzQzMjUyIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGVudHJ5LmMKKysrIGIvZnMvOXAvdmZzX2RlbnRyeS5jCkBAIC0xMDQsMTIgKzEwNCwxMiBAQAogCX0KIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHY5ZnNfY2FjaGVkX2RlbnRyeV9kZWxldGUsCiAJLmRfcmVsZWFzZSA9IHY5ZnNfZGVudHJ5X3JlbGVhc2UsCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHY5ZnNfZGVudHJ5X2RlbGV0ZSwKIAkuZF9yZWxlYXNlID0gdjlmc19kZW50cnlfcmVsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfc3VwZXIuYyBiL2ZzLzlwL3Zmc19zdXBlci5jCmluZGV4IDkzMjEyZTQuLjVmOGFiOGEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19zdXBlci5jCisrKyBiL2ZzLzlwL3Zmc19zdXBlci5jCkBAIC0xNjgsOCArMTY4LDkgQEAKIAlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwogCi1QOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiByZXR1cm4gc2ltcGxlIHNldCBtb3VudFxuIik7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIgc2ltcGxlIHNldCBtb3VudCwgcmV0dXJuIDBcbiIpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogCiByZWxlYXNlX3NiOgogCWlmIChzYikgewpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggOTM5NDVkZC4uY2VmOGIxOCAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC01Niw2MSArNTYsNyBAQAogCiBzb3VyY2UgImZzL25vdGlmeS9LY29uZmlnIgogCi1jb25maWcgUVVPVEEKLQlib29sICJRdW90YSBzdXBwb3J0IgotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNldCBwZXIgdXNlciBsaW1pdHMgZm9yIGRpc2sKLQkgIHVzYWdlIChhbHNvIGNhbGxlZCBkaXNrIHF1b3RhcykuIEN1cnJlbnRseSwgaXQgd29ya3MgZm9yIHRoZQotCSAgZXh0MiwgZXh0MywgYW5kIHJlaXNlcmZzIGZpbGUgc3lzdGVtLiBleHQzIGFsc28gc3VwcG9ydHMgam91cm5hbGxlZAotCSAgcXVvdGFzIGZvciB3aGljaCB5b3UgZG9uJ3QgbmVlZCB0byBydW4gcXVvdGFjaGVjayg4KSBhZnRlciBhbiB1bmNsZWFuCi0JICBzaHV0ZG93bi4KLQkgIEZvciBmdXJ0aGVyIGRldGFpbHMsIHJlYWQgdGhlIFF1b3RhIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCi0JICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LCBvciB0aGUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZAotCSAgd2l0aCB0aGUgcXVvdGEgdG9vbHMuIFByb2JhYmx5IHRoZSBxdW90YSBzdXBwb3J0IGlzIG9ubHkgdXNlZnVsIGZvcgotCSAgbXVsdGkgdXNlciBzeXN0ZW1zLiBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKLQlib29sICJSZXBvcnQgcXVvdGEgbWVzc2FnZXMgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZSIKLQlkZXBlbmRzIG9uIFFVT1RBICYmIE5FVAotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCBxdW90YSB3YXJuaW5ncyAoYWJvdXQgZXhjZWVkaW5nIHNvZnRsaW1pdCwgcmVhY2hpbmcKLQkgIGhhcmRsaW1pdCwgZXRjLikgd2lsbCBiZSByZXBvcnRlZCB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlLiBJZiB1bnN1cmUsCi0JICBzYXkgWS4KLQotY29uZmlnIFBSSU5UX1FVT1RBX1dBUk5JTkcKLQlib29sICJQcmludCBxdW90YSB3YXJuaW5ncyB0byBjb25zb2xlIChPQlNPTEVURSkiCi0JZGVwZW5kcyBvbiBRVU9UQQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCBxdW90YSB3YXJuaW5ncyAoYWJvdXQgZXhjZWVkaW5nIHNvZnRsaW1pdCwgcmVhY2hpbmcKLQkgIGhhcmRsaW1pdCwgZXRjLikgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBwcm9jZXNzJyBjb250cm9sbGluZyB0ZXJtaW5hbC4KLQkgIE5vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBkZXByZWNhdGVkIGFuZCBtYXkgZ28gYXdheSBpbgotCSAgZnV0dXJlLiBQbGVhc2UgdXNlIG5vdGlmaWNhdGlvbiB2aWEgbmV0bGluayBzb2NrZXQgaW5zdGVhZC4KLQotIyBHZW5lcmljIHN1cHBvcnQgZm9yIHRyZWUgc3RydWN0dXJlZCBxdW90YSBmaWxlcy4gU2VsZXRlZCB3aGVuIG5lZWRlZC4KLWNvbmZpZyBRVU9UQV9UUkVFCi0JIHRyaXN0YXRlCi0KLWNvbmZpZyBRRk1UX1YxCi0JdHJpc3RhdGUgIk9sZCBxdW90YSBmb3JtYXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFFVT1RBCi0JaGVscAotCSAgVGhpcyBxdW90YSBmb3JtYXQgd2FzIChpcykgdXNlZCBieSBrZXJuZWxzIGVhcmxpZXIgdGhhbiAyLjQuMjIuIElmCi0JICB5b3UgaGF2ZSBxdW90YSB3b3JraW5nIGFuZCB5b3UgZG9uJ3Qgd2FudCB0byBjb252ZXJ0IHRvIG5ldyBxdW90YQotCSAgZm9ybWF0IHNheSBZIGhlcmUuCi0KLWNvbmZpZyBRRk1UX1YyCi0JdHJpc3RhdGUgIlF1b3RhIGZvcm1hdCB2MiBzdXBwb3J0IgotCWRlcGVuZHMgb24gUVVPVEEKLQlzZWxlY3QgUVVPVEFfVFJFRQotCWhlbHAKLQkgIFRoaXMgcXVvdGEgZm9ybWF0IGFsbG93cyB1c2luZyBxdW90YXMgd2l0aCAzMi1iaXQgVUlEcy9HSURzLiBJZiB5b3UKLQkgIG5lZWQgdGhpcyBmdW5jdGlvbmFsaXR5IHNheSBZIGhlcmUuCi0KLWNvbmZpZyBRVU9UQUNUTAotCWJvb2wKLQlkZXBlbmRzIG9uIFhGU19RVU9UQSB8fCBRVU9UQQotCWRlZmF1bHQgeQorc291cmNlICJmcy9xdW90YS9LY29uZmlnIgogCiBzb3VyY2UgImZzL2F1dG9mcy9LY29uZmlnIgogc291cmNlICJmcy9hdXRvZnM0L0tjb25maWciCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IGRjMjBkYjMuLjZlODJhMzAgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC01MSwxMSArNTEsNyBAQAogb2JqLSQoQ09ORklHX05GU19DT01NT04pCSs9IG5mc19jb21tb24vCiBvYmotJChDT05GSUdfR0VORVJJQ19BQ0wpCSs9IGdlbmVyaWNfYWNsLm8KIAotb2JqLSQoQ09ORklHX1FVT1RBKQkJKz0gZHF1b3Qubwotb2JqLSQoQ09ORklHX1FGTVRfVjEpCQkrPSBxdW90YV92MS5vCi1vYmotJChDT05GSUdfUUZNVF9WMikJCSs9IHF1b3RhX3YyLm8KLW9iai0kKENPTkZJR19RVU9UQV9UUkVFKQkrPSBxdW90YV90cmVlLm8KLW9iai0kKENPTkZJR19RVU9UQUNUTCkJCSs9IHF1b3RhLm8KK29iai15CQkJCSs9IHF1b3RhLwogCiBvYmotJChDT05GSUdfUFJPQ19GUykJCSs9IHByb2MvCiBvYmoteQkJCQkrPSBwYXJ0aXRpb25zLwpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9hZGZzLmggYi9mcy9hZGZzL2FkZnMuaAppbmRleCA4MzExNTc1Li5lMGE4NWRiIDEwMDY0NAotLS0gYS9mcy9hZGZzL2FkZnMuaAorKysgYi9mcy9hZGZzL2FkZnMuaApAQCAtODYsNyArODYsNyBAQAogLyogZGlyXyouYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFkZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZGZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZGZzX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZGZzX2RlbnRyeV9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCBhZGZzX2Rpcl9vcHMgYWRmc19mX2Rpcl9vcHM7CiBleHRlcm4gc3RydWN0IGFkZnNfZGlyX29wcyBhZGZzX2ZwbHVzX2Rpcl9vcHM7CiAKZGlmZiAtLWdpdCBhL2ZzL2FkZnMvZGlyLmMgYi9mcy9hZGZzL2Rpci5jCmluZGV4IDg1YTMwZTkuLmU4NjdjY2YgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvZGlyLmMKKysrIGIvZnMvYWRmcy9kaXIuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZGZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfaGFzaAkJPSBhZGZzX2hhc2gsCiAJLmRfY29tcGFyZQk9IGFkZnNfY29tcGFyZSwKIH07CmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oCmluZGV4IGU5ZWM5MTUuLjFhMmQ1ZTMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYWZmcy5oCisrKyBiL2ZzL2FmZnMvYWZmcy5oCkBAIC0xOTksOCArMTk5LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucwkgYWZmc19hb3BzX29mczsKIAotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucwkgYWZmc19kZW50cnlfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMJIGFmZnNfZGVudHJ5X29wZXJhdGlvbnNfaW50bDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMJIGFmZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogYWZmc19zZXRfYmxvY2tzaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBzaXplKQpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jCmluZGV4IDgwNTU3MzAuLjdkMGYwYTMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuYworKysgYi9mcy9hZmZzL2FtaWdhZmZzLmMKQEAgLTE3OSwxNCArMTc5LDE4IEBACiAJCWFmZnNfbG9ja19kaXIoZGlyKTsKIAkJYWZmc19maXhfZGNhY2hlKGRlbnRyeSwgbGlua19pbm8pOwogCQlyZXR2YWwgPSBhZmZzX3JlbW92ZV9oYXNoKGRpciwgbGlua19iaCk7Ci0JCWlmIChyZXR2YWwpCisJCWlmIChyZXR2YWwpIHsKKwkJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQkJZ290byBkb25lOworCQl9CiAJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGxpbmtfYmgsIGlub2RlKTsKIAogCQltZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktPm5hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktPm5hbWUsIDMyKTsKIAkJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTsKLQkJaWYgKHJldHZhbCkKKwkJaWYgKHJldHZhbCkgeworCQkJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJCQlnb3RvIGRvbmU7CisJCX0KIAkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGlub2RlKTsKIAogCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuYwppbmRleCBjZmNmMWI2Li45NjBkMzM2IDEwMDY0NAotLS0gYS9mcy9hZmZzL25hbWVpLmMKKysrIGIvZnMvYWZmcy9uYW1laS5jCkBAIC0xOSwxMiArMTksMTIgQEAKIHN0YXRpYyBpbnQJIGFmZnNfaW50bF9oYXNoX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwogc3RhdGljIGludCAgICAgICBhZmZzX2ludGxfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IGFmZnNfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IGFmZnNfY29tcGFyZV9kZW50cnksCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmZnNfaW50bF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19pbnRsX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gYWZmc19pbnRsX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUJPSBhZmZzX2ludGxfY29tcGFyZV9kZW50cnksCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDk5Y2YzOTAuLjliZDc1NzcgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYworKysgYi9mcy9hZnMvZGlyLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAkuc2V0YXR0cgk9IGFmc19zZXRhdHRyLAogfTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gYWZzX2RfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBhZnNfZF9kZWxldGUsCiAJLmRfcmVsZWFzZQk9IGFmc19kX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IDhmYTc3ZTIuLjc2ZGExMjUgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAlyZXEtPnByaXZhdGUgPSBOVUxMOwogCXJlcS0+a2lfaW92ZWMgPSBOVUxMOwogCUlOSVRfTElTVF9IRUFEKCZyZXEtPmtpX3J1bl9saXN0KTsKLQlyZXEtPmtpX2V2ZW50ZmQgPSBFUlJfUFRSKC1FSU5WQUwpOworCXJlcS0+a2lfZXZlbnRmZCA9IE5VTEw7CiAKIAkvKiBDaGVjayBpZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBoYXMgZW5vdWdoIGZyZWUgc3BhY2UgdG8KIAkgKiBhY2NlcHQgYW4gZXZlbnQgZnJvbSB0aGlzIGlvLgpAQCAtNDg1LDggKzQ4NSw2IEBACiB7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZjdHgtPmN0eF9sb2NrKTsKIAotCWlmICghSVNfRVJSKHJlcS0+a2lfZXZlbnRmZCkpCi0JCWZwdXQocmVxLT5raV9ldmVudGZkKTsKIAlpZiAocmVxLT5raV9kdG9yKQogCQlyZXEtPmtpX2R0b3IocmVxKTsKIAlpZiAocmVxLT5raV9pb3ZlYyAhPSAmcmVxLT5raV9pbmxpbmVfdmVjKQpAQCAtNTA4LDggKzUwNiwxMSBAQAogCQlsaXN0X2RlbCgmcmVxLT5raV9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZmcHV0X2xvY2spOwogCi0JCS8qIENvbXBsZXRlIHRoZSBmcHV0ICovCi0JCV9fZnB1dChyZXEtPmtpX2ZpbHApOworCQkvKiBDb21wbGV0ZSB0aGUgZnB1dChzKSAqLworCQlpZiAocmVxLT5raV9maWxwICE9IE5VTEwpCisJCQlfX2ZwdXQocmVxLT5raV9maWxwKTsKKwkJaWYgKHJlcS0+a2lfZXZlbnRmZCAhPSBOVUxMKQorCQkJX19mcHV0KHJlcS0+a2lfZXZlbnRmZCk7CiAKIAkJLyogTGluayB0aGUgaW9jYiBpbnRvIHRoZSBjb250ZXh0J3MgZnJlZSBsaXN0ICovCiAJCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwpAQCAtNTI3LDEyICs1MjgsMTQgQEAKICAqLwogc3RhdGljIGludCBfX2Fpb19wdXRfcmVxKHN0cnVjdCBraW9jdHggKmN0eCwgc3RydWN0IGtpb2NiICpyZXEpCiB7CisJaW50IHNjaGVkdWxlX3B1dHJlcSA9IDA7CisKIAlkcHJpbnRrKEtFUk5fREVCVUcgImFpb19wdXQoJXApOiBmX2NvdW50PSVsZFxuIiwKIAkJcmVxLCBhdG9taWNfbG9uZ19yZWFkKCZyZXEtPmtpX2ZpbHAtPmZfY291bnQpKTsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmY3R4LT5jdHhfbG9jayk7CiAKLQlyZXEtPmtpX3VzZXJzIC0tOworCXJlcS0+a2lfdXNlcnMtLTsKIAlCVUdfT04ocmVxLT5raV91c2VycyA8IDApOwogCWlmIChsaWtlbHkocmVxLT5raV91c2VycykpCiAJCXJldHVybiAwOwpAQCAtNTQwLDEwICs1NDMsMjMgQEAKIAlyZXEtPmtpX2NhbmNlbCA9IE5VTEw7CiAJcmVxLT5raV9yZXRyeSA9IE5VTEw7CiAKLQkvKiBNdXN0IGJlIGRvbmUgdW5kZXIgdGhlIGxvY2sgdG8gc2VyaWFsaXNlIGFnYWluc3QgY2FuY2VsbGF0aW9uLgotCSAqIENhbGwgdGhpcyBhaW9fZnB1dCBhcyBpdCBkdXBsaWNhdGVzIGZwdXQgdmlhIHRoZSBmcHV0X3dvcmsuCisJLyoKKwkgKiBUcnkgdG8gb3B0aW1pemUgdGhlIGFpbyBhbmQgZXZlbnRmZCBmaWxlKiBwdXRzLCBieSBhdm9pZGluZyB0bworCSAqIHNjaGVkdWxlIHdvcmsgaW4gY2FzZSBpdCBpcyBub3QgX19mcHV0KCkgdGltZS4gSW4gbm9ybWFsIGNhc2VzLAorCSAqIHdlIHdvdWxkIG5vdCBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgZmlsZSosIHNvCisJICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIHcvb3V0IGFueSBhaW8ga3RocmVhZCB3YWtldXAuCiAJICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19sb25nX2RlY19hbmRfdGVzdCgmcmVxLT5raV9maWxwLT5mX2NvdW50KSkpIHsKKwlpZiAodW5saWtlbHkoYXRvbWljX2xvbmdfZGVjX2FuZF90ZXN0KCZyZXEtPmtpX2ZpbHAtPmZfY291bnQpKSkKKwkJc2NoZWR1bGVfcHV0cmVxKys7CisJZWxzZQorCQlyZXEtPmtpX2ZpbHAgPSBOVUxMOworCWlmIChyZXEtPmtpX2V2ZW50ZmQgIT0gTlVMTCkgeworCQlpZiAodW5saWtlbHkoYXRvbWljX2xvbmdfZGVjX2FuZF90ZXN0KCZyZXEtPmtpX2V2ZW50ZmQtPmZfY291bnQpKSkKKwkJCXNjaGVkdWxlX3B1dHJlcSsrOworCQllbHNlCisJCQlyZXEtPmtpX2V2ZW50ZmQgPSBOVUxMOworCX0KKwlpZiAodW5saWtlbHkoc2NoZWR1bGVfcHV0cmVxKSkgewogCQlnZXRfaW9jdHgoY3R4KTsKIAkJc3Bpbl9sb2NrKCZmcHV0X2xvY2spOwogCQlsaXN0X2FkZCgmcmVxLT5raV9saXN0LCAmZnB1dF9oZWFkKTsKQEAgLTU3MSw3ICs1ODcsNyBAQAogc3RhdGljIHN0cnVjdCBraW9jdHggKmxvb2t1cF9pb2N0eCh1bnNpZ25lZCBsb25nIGN0eF9pZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXN0cnVjdCBraW9jdHggKmN0eCA9IE5VTEw7CisJc3RydWN0IGtpb2N0eCAqY3R4LCAqcmV0ID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTU3OSwxMiArNTk1LDEzIEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0eCwgbiwgJm1tLT5pb2N0eF9saXN0LCBsaXN0KSB7CiAJCWlmIChjdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFjdHgtPmRlYWQpIHsKIAkJCWdldF9pb2N0eChjdHgpOworCQkJcmV0ID0gY3R4OwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gY3R4OworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMDA5LDcgKzEwMjYsNyBAQAogCSAqIGV2ZW50ZmQuIFRoZSBldmVudGZkX3NpZ25hbCgpIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgY2FsbGVkCiAJICogZnJvbSBJUlEgY29udGV4dC4KIAkgKi8KLQlpZiAoIUlTX0VSUihpb2NiLT5raV9ldmVudGZkKSkKKwlpZiAoaW9jYi0+a2lfZXZlbnRmZCAhPSBOVUxMKQogCQlldmVudGZkX3NpZ25hbChpb2NiLT5raV9ldmVudGZkLCAxKTsKIAogcHV0X3JxOgpAQCAtMTYwOCw2ICsxNjI1LDcgQEAKIAkJcmVxLT5raV9ldmVudGZkID0gZXZlbnRmZF9mZ2V0KChpbnQpIGlvY2ItPmFpb19yZXNmZCk7CiAJCWlmIChJU19FUlIocmVxLT5raV9ldmVudGZkKSkgewogCQkJcmV0ID0gUFRSX0VSUihyZXEtPmtpX2V2ZW50ZmQpOworCQkJcmVxLT5raV9ldmVudGZkID0gTlVMTDsKIAkJCWdvdG8gb3V0X3B1dF9yZXE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCAzYmJkYjlkLi4xZGQ5NmQ0IDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkuZ2V0X3NiCQk9IGFub25faW5vZGVmc19nZXRfc2IsCiAJLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCiB9Owotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFub25faW5vZGVmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUJPSBhbm9uX2lub2RlZnNfZGVsZXRlX2RlbnRyeSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuYwppbmRleCBmNDM2MDE5Li45ZmUxYjFiIDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKKysrIGIvZnMvYXR0ci5jCkBAIC0xNzMsNyArMTczLDggQEAKIAkJaWYgKCFlcnJvcikgewogCQkJaWYgKChpYV92YWxpZCAmIEFUVFJfVUlEICYmIGF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CiAJCQkgICAgKGlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpCi0JCQkJZXJyb3IgPSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKKwkJCQllcnJvciA9IHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPworCQkJCQktRURRVU9UIDogMDsKIAkJCWlmICghZXJyb3IpCiAJCQkJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL3Jvb3QuYyBiL2ZzL2F1dG9mcy9yb290LmMKaW5kZXggOGFhY2FkZS4uNGExNDAxYyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzL3Jvb3QuYworKysgYi9mcy9hdXRvZnMvcm9vdC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gYXV0b2ZzX3JldmFsaWRhdGUsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2lub2RlLmMgYi9mcy9hdXRvZnM0L2lub2RlLmMKaW5kZXggNzE2ZTEyYi4uNjljODE0MiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mczQvaW5vZGUuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJcmV0dXJuIGlubzsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X3NiX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X3NiX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JlbGVhc2UgICAgICA9IGF1dG9mczRfZGVudHJ5X3JlbGVhc2UsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3Jvb3QuYyBiL2ZzL2F1dG9mczQvcm9vdC5jCmluZGV4IDJhNDFjMmEuLjc0YjE0NjkgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC0zNDksMTMgKzM0OSwxMyBAQAogfQogCiAvKiBGb3IgZGVudHJpZXMgb2YgZGlyZWN0b3JpZXMgaW4gdGhlIHJvb3QgZGlyICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mczRfcm9vdF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzNF9yb290X2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhdXRvZnM0X3JldmFsaWRhdGUsCiAJLmRfcmVsZWFzZQk9IGF1dG9mczRfZGVudHJ5X3JlbGVhc2UsCiB9OwogCiAvKiBGb3Igb3RoZXIgZGVudHJpZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzNF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzNF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gYXV0b2ZzNF9yZXZhbGlkYXRlLAogCS5kX3JlbGVhc2UJPSBhdXRvZnM0X2RlbnRyeV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2Jpby1pbnRlZ3JpdHkuYyBiL2ZzL2Jpby1pbnRlZ3JpdHkuYwppbmRleCA1NDliMDE0Li4zMWM0NmEyIDEwMDY0NAotLS0gYS9mcy9iaW8taW50ZWdyaXR5LmMKKysrIGIvZnMvYmlvLWludGVncml0eS5jCkBAIC0yNiw1NSArMjYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpiaW9faW50ZWdyaXR5X3NsYWIgX19yZWFkX21vc3RseTsKK3N0YXRpYyBtZW1wb29sX3QgKmJpb19pbnRlZ3JpdHlfcG9vbDsKK3N0YXRpYyBzdHJ1Y3QgYmlvX3NldCAqaW50ZWdyaXR5X2Jpb19zZXQ7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtpbnRlZ3JpdHlkX3dxOwogCiAvKioKLSAqIGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0IC0gQWxsb2NhdGUgaW50ZWdyaXR5IHBheWxvYWQgYW5kIGF0dGFjaCBpdCB0byBiaW8KLSAqIEBiaW86CWJpbyB0byBhdHRhY2ggaW50ZWdyaXR5IG1ldGFkYXRhIHRvCi0gKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKLSAqIEBucl92ZWNzOglOdW1iZXIgb2YgaW50ZWdyaXR5IG1ldGFkYXRhIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnRzCi0gKiBAYnM6CQliaW9fc2V0IHRvIGFsbG9jYXRlIGZyb20KLSAqCi0gKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhIGJpbyBmb3IgYXR0YWNoaW5nIGludGVncml0eQotICogbWV0YWRhdGEuICBucl92ZWNzIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgY29udGFpbmluZwotICogaW50ZWdyaXR5IG1ldGFkYXRhIHRoYXQgY2FuIGJlIGF0dGFjaGVkLgotICovCi1zdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldChzdHJ1Y3QgYmlvICpiaW8sCi0JCQkJCQkJIGdmcF90IGdmcF9tYXNrLAotCQkJCQkJCSB1bnNpZ25lZCBpbnQgbnJfdmVjcywKLQkJCQkJCQkgc3RydWN0IGJpb19zZXQgKmJzKQotewotCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKLQlzdHJ1Y3QgYmlvX3ZlYyAqaXY7Ci0JdW5zaWduZWQgbG9uZyBpZHg7Ci0KLQlCVUdfT04oYmlvID09IE5VTEwpOwotCi0JYmlwID0gbWVtcG9vbF9hbGxvYyhicy0+YmlvX2ludGVncml0eV9wb29sLCBnZnBfbWFzayk7Ci0JaWYgKHVubGlrZWx5KGJpcCA9PSBOVUxMKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW1lbXNldChiaXAsIDAsIHNpemVvZigqYmlwKSk7Ci0KLQlpdiA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX3ZlY3MsICZpZHgsIGJzKTsKLQlpZiAodW5saWtlbHkoaXYgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcF92ZWNcbiIsIF9fZnVuY19fKTsKLQkJbWVtcG9vbF9mcmVlKGJpcCwgYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWJpcC0+YmlwX3Bvb2wgPSBpZHg7Ci0JYmlwLT5iaXBfdmVjID0gaXY7Ci0JYmlwLT5iaXBfYmlvID0gYmlvOwotCWJpby0+YmlfaW50ZWdyaXR5ID0gYmlwOwotCi0JcmV0dXJuIGJpcDsKLX0KLUVYUE9SVF9TWU1CT0woYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQpOwotCi0vKioKICAqIGJpb19pbnRlZ3JpdHlfYWxsb2MgLSBBbGxvY2F0ZSBpbnRlZ3JpdHkgcGF5bG9hZCBhbmQgYXR0YWNoIGl0IHRvIGJpbwogICogQGJpbzoJYmlvIHRvIGF0dGFjaCBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8KICAqIEBnZnBfbWFzazoJTWVtb3J5IGFsbG9jYXRpb24gbWFzawpAQCAtODgsMTkgKzQ0LDQ0IEBACiAJCQkJCQkgIGdmcF90IGdmcF9tYXNrLAogCQkJCQkJICB1bnNpZ25lZCBpbnQgbnJfdmVjcykKIHsKLQlyZXR1cm4gYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoYmlvLCBnZnBfbWFzaywgbnJfdmVjcywgZnNfYmlvX3NldCk7CisJc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwOworCXN0cnVjdCBiaW9fdmVjICppdjsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKworCUJVR19PTihiaW8gPT0gTlVMTCk7CisKKwliaXAgPSBtZW1wb29sX2FsbG9jKGJpb19pbnRlZ3JpdHlfcG9vbCwgZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShiaXAgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZW1zZXQoYmlwLCAwLCBzaXplb2YoKmJpcCkpOworCisJaXYgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl92ZWNzLCAmaWR4LCBpbnRlZ3JpdHlfYmlvX3NldCk7CisJaWYgKHVubGlrZWx5KGl2ID09IE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBfdmVjXG4iLCBfX2Z1bmNfXyk7CisJCW1lbXBvb2xfZnJlZShiaXAsIGJpb19pbnRlZ3JpdHlfcG9vbCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWJpcC0+YmlwX3Bvb2wgPSBpZHg7CisJYmlwLT5iaXBfdmVjID0gaXY7CisJYmlwLT5iaXBfYmlvID0gYmlvOworCWJpby0+YmlfaW50ZWdyaXR5ID0gYmlwOworCisJcmV0dXJuIGJpcDsKIH0KIEVYUE9SVF9TWU1CT0woYmlvX2ludGVncml0eV9hbGxvYyk7CiAKIC8qKgogICogYmlvX2ludGVncml0eV9mcmVlIC0gRnJlZSBiaW8gaW50ZWdyaXR5IHBheWxvYWQKICAqIEBiaW86CWJpbyBjb250YWluaW5nIGJpcCB0byBiZSBmcmVlZAotICogQGJzOgkJYmlvX3NldCB0aGlzIGJpbyB3YXMgYWxsb2NhdGVkIGZyb20KICAqCiAgKiBEZXNjcmlwdGlvbjogVXNlZCB0byBmcmVlIHRoZSBpbnRlZ3JpdHkgcG9ydGlvbiBvZiBhIGJpby4gVXN1YWxseQogICogY2FsbGVkIGZyb20gYmlvX2ZyZWUoKS4KICAqLwotdm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvX3NldCAqYnMpCit2b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwID0gYmlvLT5iaV9pbnRlZ3JpdHk7CiAKQEAgLTExMSw4ICs5Miw4IEBACiAJICAgICYmIGJpcC0+YmlwX2J1ZiAhPSBOVUxMKQogCQlrZnJlZShiaXAtPmJpcF9idWYpOwogCi0JYnZlY19mcmVlX2JzKGJzLCBiaXAtPmJpcF92ZWMsIGJpcC0+YmlwX3Bvb2wpOwotCW1lbXBvb2xfZnJlZShiaXAsIGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpOworCWJ2ZWNfZnJlZV9icyhpbnRlZ3JpdHlfYmlvX3NldCwgYmlwLT5iaXBfdmVjLCBiaXAtPmJpcF9wb29sKTsKKwltZW1wb29sX2ZyZWUoYmlwLCBiaW9faW50ZWdyaXR5X3Bvb2wpOwogCiAJYmlvLT5iaV9pbnRlZ3JpdHkgPSBOVUxMOwogfQpAQCAtNjg1LDE5ICs2NjYsMTggQEAKICAqIGJpb19pbnRlZ3JpdHlfY2xvbmUgLSBDYWxsYmFjayBmb3IgY2xvbmluZyBiaW9zIHdpdGggaW50ZWdyaXR5IG1ldGFkYXRhCiAgKiBAYmlvOglOZXcgYmlvCiAgKiBAYmlvX3NyYzoJT3JpZ2luYWwgYmlvCi0gKiBAYnM6CQliaW9fc2V0IHRvIGFsbG9jYXRlIGJpcCBmcm9tCisgKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKICAqCiAgKiBEZXNjcmlwdGlvbjoJQ2FsbGVkIHRvIGFsbG9jYXRlIGEgYmlwIHdoZW4gY2xvbmluZyBhIGJpbwogICovCi1pbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsCi0JCQlzdHJ1Y3QgYmlvX3NldCAqYnMpCitpbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcF9zcmMgPSBiaW9fc3JjLT5iaV9pbnRlZ3JpdHk7CiAJc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwOwogCiAJQlVHX09OKGJpcF9zcmMgPT0gTlVMTCk7CiAKLQliaXAgPSBiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldChiaW8sIEdGUF9OT0lPLCBiaXBfc3JjLT5iaXBfdmNudCwgYnMpOworCWJpcCA9IGJpb19pbnRlZ3JpdHlfYWxsb2MoYmlvLCBnZnBfbWFzaywgYmlwX3NyYy0+YmlwX3ZjbnQpOwogCiAJaWYgKGJpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTzsKQEAgLTcxMywzNyArNjkzLDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfY2xvbmUpOwogCi1pbnQgYmlvc2V0X2ludGVncml0eV9jcmVhdGUoc3RydWN0IGJpb19zZXQgKmJzLCBpbnQgcG9vbF9zaXplKQotewotCWJzLT5iaW9faW50ZWdyaXR5X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2wocG9vbF9zaXplLAotCQkJCQkJCSAgYmlvX2ludGVncml0eV9zbGFiKTsKLQlpZiAoIWJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZSk7Ci0KLXZvaWQgYmlvc2V0X2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW9fc2V0ICpicykKLXsKLQlpZiAoYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCkKLQkJbWVtcG9vbF9kZXN0cm95KGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpOwotfQotRVhQT1JUX1NZTUJPTChiaW9zZXRfaW50ZWdyaXR5X2ZyZWUpOwotCi12b2lkIF9faW5pdCBiaW9faW50ZWdyaXR5X2luaXRfc2xhYih2b2lkKQotewotCWJpb19pbnRlZ3JpdHlfc2xhYiA9IEtNRU1fQ0FDSEUoYmlvX2ludGVncml0eV9wYXlsb2FkLAotCQkJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGludGVncml0eV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBiaW9faW50ZWdyaXR5X2luaXQodm9pZCkKIHsKIAlraW50ZWdyaXR5ZF93cSA9IGNyZWF0ZV93b3JrcXVldWUoImtpbnRlZ3JpdHlkIik7CiAKIAlpZiAoIWtpbnRlZ3JpdHlkX3dxKQogCQlwYW5pYygiRmFpbGVkIHRvIGNyZWF0ZSBraW50ZWdyaXR5ZFxuIik7CiAKKwliaW9faW50ZWdyaXR5X3NsYWIgPSBLTUVNX0NBQ0hFKGJpb19pbnRlZ3JpdHlfcGF5bG9hZCwKKwkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUMpOworCisJYmlvX2ludGVncml0eV9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKEJJT19QT09MX1NJWkUsCisJCQkJCQkgICAgICBiaW9faW50ZWdyaXR5X3NsYWIpOworCWlmICghYmlvX2ludGVncml0eV9wb29sKQorCQlwYW5pYygiYmlvX2ludGVncml0eTogY2FuJ3QgYWxsb2NhdGUgYmlwIHBvb2xcbiIpOworCisJaW50ZWdyaXR5X2Jpb19zZXQgPSBiaW9zZXRfY3JlYXRlKEJJT19QT09MX1NJWkUsIDApOworCWlmICghaW50ZWdyaXR5X2Jpb19zZXQpCisJCXBhbmljKCJiaW9faW50ZWdyaXR5OiBjYW4ndCBhbGxvY2F0ZSBiaW9fc2V0XG4iKTsKKwogCXJldHVybiAwOwogfQotc3Vic3lzX2luaXRjYWxsKGludGVncml0eV9pbml0KTsKK3N1YnN5c19pbml0Y2FsbChiaW9faW50ZWdyaXR5X2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCAxMjRiOTVjLi5hMDQwY2RlIDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCWJ2ZWNfZnJlZV9icyhicywgYmlvLT5iaV9pb192ZWMsIEJJT19QT09MX0lEWChiaW8pKTsKIAogCWlmIChiaW9faW50ZWdyaXR5KGJpbykpCi0JCWJpb19pbnRlZ3JpdHlfZnJlZShiaW8sIGJzKTsKKwkJYmlvX2ludGVncml0eV9mcmVlKGJpbyk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgZnJvbnQgcGFkZGluZywgYWRqdXN0IHRoZSBiaW8gcG9pbnRlciBiZWZvcmUgZnJlZWluZwpAQCAtMzAxLDQ4ICszMDEsNTEgQEAKICAqKi8KIHN0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQoZ2ZwX3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MsIHN0cnVjdCBiaW9fc2V0ICpicykKIHsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZsID0gTlVMTDsKIAlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwotCXZvaWQgKnVuaW5pdGlhbGl6ZWRfdmFyKHApOworCXVuc2lnbmVkIGxvbmcgaWR4ID0gMDsKKwl2b2lkICpwID0gTlVMTDsKIAogCWlmIChicykgewogCQlwID0gbWVtcG9vbF9hbGxvYyhicy0+YmlvX3Bvb2wsIGdmcF9tYXNrKTsKLQotCQlpZiAocCkKLQkJCWJpbyA9IHAgKyBicy0+ZnJvbnRfcGFkOwotCX0gZWxzZQorCQlpZiAoIXApCisJCQlnb3RvIGVycjsKKwkJYmlvID0gcCArIGJzLT5mcm9udF9wYWQ7CisJfSBlbHNlIHsKIAkJYmlvID0ga21hbGxvYyhzaXplb2YoKmJpbyksIGdmcF9tYXNrKTsKLQotCWlmIChsaWtlbHkoYmlvKSkgewotCQlzdHJ1Y3QgYmlvX3ZlYyAqYnZsID0gTlVMTDsKLQotCQliaW9faW5pdChiaW8pOwotCQlpZiAobGlrZWx5KG5yX2lvdmVjcykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoaWR4KTsKLQotCQkJaWYgKG5yX2lvdmVjcyA8PSBCSU9fSU5MSU5FX1ZFQ1MpIHsKLQkJCQlpZHggPSAwOwotCQkJCWJ2bCA9IGJpby0+YmlfaW5saW5lX3ZlY3M7Ci0JCQkJbnJfaW92ZWNzID0gQklPX0lOTElORV9WRUNTOwotCQkJfSBlbHNlIHsKLQkJCQlidmwgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl9pb3ZlY3MsICZpZHgsCi0JCQkJCQkJYnMpOwotCQkJCW5yX2lvdmVjcyA9IGJ2ZWNfbnJfdmVjcyhpZHgpOwotCQkJfQotCQkJaWYgKHVubGlrZWx5KCFidmwpKSB7Ci0JCQkJaWYgKGJzKQotCQkJCQltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKLQkJCQllbHNlCi0JCQkJCWtmcmVlKGJpbyk7Ci0JCQkJYmlvID0gTlVMTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWJpby0+YmlfZmxhZ3MgfD0gaWR4IDw8IEJJT19QT09MX09GRlNFVDsKLQkJCWJpby0+YmlfbWF4X3ZlY3MgPSBucl9pb3ZlY3M7Ci0JCX0KLQkJYmlvLT5iaV9pb192ZWMgPSBidmw7CisJCWlmICghYmlvKQorCQkJZ290byBlcnI7CiAJfQotb3V0OgorCisJYmlvX2luaXQoYmlvKTsKKworCWlmICh1bmxpa2VseSghbnJfaW92ZWNzKSkKKwkJZ290byBvdXRfc2V0OworCisJaWYgKG5yX2lvdmVjcyA8PSBCSU9fSU5MSU5FX1ZFQ1MpIHsKKwkJYnZsID0gYmlvLT5iaV9pbmxpbmVfdmVjczsKKwkJbnJfaW92ZWNzID0gQklPX0lOTElORV9WRUNTOworCX0gZWxzZSB7CisJCWJ2bCA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX2lvdmVjcywgJmlkeCwgYnMpOworCQlpZiAodW5saWtlbHkoIWJ2bCkpCisJCQlnb3RvIGVycl9mcmVlOworCisJCW5yX2lvdmVjcyA9IGJ2ZWNfbnJfdmVjcyhpZHgpOworCX0KKwliaW8tPmJpX2ZsYWdzIHw9IGlkeCA8PCBCSU9fUE9PTF9PRkZTRVQ7CisJYmlvLT5iaV9tYXhfdmVjcyA9IG5yX2lvdmVjczsKK291dF9zZXQ6CisJYmlvLT5iaV9pb192ZWMgPSBidmw7CisKIAlyZXR1cm4gYmlvOworCitlcnJfZnJlZToKKwlpZiAoYnMpCisJCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOworCWVsc2UKKwkJa2ZyZWUoYmlvKTsKK2VycjoKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RydWN0IGJpbyAqYmlvX2FsbG9jKGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzKQpAQCAtNDYzLDEwICs0NjYsMTIgQEAKIAlpZiAoYmlvX2ludGVncml0eShiaW8pKSB7CiAJCWludCByZXQ7CiAKLQkJcmV0ID0gYmlvX2ludGVncml0eV9jbG9uZShiLCBiaW8sIGZzX2Jpb19zZXQpOworCQlyZXQgPSBiaW9faW50ZWdyaXR5X2Nsb25lKGIsIGJpbywgZ2ZwX21hc2spOwogCi0JCWlmIChyZXQgPCAwKQorCQlpZiAocmV0IDwgMCkgeworCQkJYmlvX3B1dChiKTsKIAkJCXJldHVybiBOVUxMOworCQl9CiAJfQogCiAJcmV0dXJuIGI7CkBAIC0xNTI0LDcgKzE1MjksNiBAQAogCWlmIChicy0+YmlvX3Bvb2wpCiAJCW1lbXBvb2xfZGVzdHJveShicy0+YmlvX3Bvb2wpOwogCi0JYmlvc2V0X2ludGVncml0eV9mcmVlKGJzKTsKIAliaW92ZWNfZnJlZV9wb29scyhicyk7CiAJYmlvX3B1dF9zbGFiKGJzKTsKIApAQCAtMTU2NSw5ICsxNTY5LDYgQEAKIAlpZiAoIWJzLT5iaW9fcG9vbCkKIAkJZ290byBiYWQ7CiAKLQlpZiAoYmlvc2V0X2ludGVncml0eV9jcmVhdGUoYnMsIHBvb2xfc2l6ZSkpCi0JCWdvdG8gYmFkOwotCiAJaWYgKCFiaW92ZWNfY3JlYXRlX3Bvb2xzKGJzLCBwb29sX3NpemUpKQogCQlyZXR1cm4gYnM7CiAKQEAgLTE1ODQsNiArMTU4NSwxMyBAQAogCQlpbnQgc2l6ZTsKIAkJc3RydWN0IGJpb3ZlY19zbGFiICpidnMgPSBidmVjX3NsYWJzICsgaTsKIAorI2lmbmRlZiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkKKwkJaWYgKGJ2cy0+bnJfdmVjcyA8PSBCSU9fSU5MSU5FX1ZFQ1MpIHsKKwkJCWJ2cy0+c2xhYiA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisKIAkJc2l6ZSA9IGJ2cy0+bnJfdmVjcyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7CiAJCWJ2cy0+c2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKGJ2cy0+bmFtZSwgc2l6ZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUMsIE5VTEwpOwpAQCAtMTU5OCw3ICsxNjA2LDYgQEAKIAlpZiAoIWJpb19zbGFicykKIAkJcGFuaWMoImJpbzogY2FuJ3QgYWxsb2NhdGUgYmlvc1xuIik7CiAKLQliaW9faW50ZWdyaXR5X2luaXRfc2xhYigpOwogCWJpb3ZlY19pbml0X3NsYWJzKCk7CiAKIAlmc19iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZShCSU9fUE9PTF9TSVpFLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggYjNjMWVmZi4uOGMzYzY4OSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L21wYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTE3NCw2ICsxNzUsMTUxIEBACiAJCQkJaW92LCBvZmZzZXQsIG5yX3NlZ3MsIGJsa2Rldl9nZXRfYmxvY2tzLCBOVUxMKTsKIH0KIAorLyoKKyAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCB0aGUgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBibG9jaworICogZGV2aWNlIHZpYSBpdHMgbWFwcGluZy4gIERvZXMgbm90IHRha2UgdGhlIHN1cGVyYmxvY2sgbG9jay4KKyAqLworaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChiZGV2KQorCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGJkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfYmxvY2tkZXYpOworCisvKgorICogV3JpdGUgb3V0IGFuZCB3YWl0IHVwb24gYWxsIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqIGRldmljZS4gICBGaWxlc3lzdGVtIGRhdGEgYXMgd2VsbCBhcyB0aGUgdW5kZXJseWluZyBibG9jaworICogZGV2aWNlLiAgVGFrZXMgdGhlIHN1cGVyYmxvY2sgbG9jay4KKyAqLworaW50IGZzeW5jX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X3N1cGVyKGJkZXYpOworCWlmIChzYikgeworCQlpbnQgcmVzID0gZnN5bmNfc3VwZXIoc2IpOworCQlkcm9wX3N1cGVyKHNiKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJcmV0dXJuIHN5bmNfYmxvY2tkZXYoYmRldik7Cit9CisKKy8qKgorICogZnJlZXplX2JkZXYgIC0tICBsb2NrIGEgZmlsZXN5c3RlbSBhbmQgZm9yY2UgaXQgaW50byBhIGNvbnNpc3RlbnQgc3RhdGUKKyAqIEBiZGV2OglibG9ja2RldmljZSB0byBsb2NrCisgKgorICogVGhpcyB0YWtlcyB0aGUgYmxvY2sgZGV2aWNlIGJkX21vdW50X3NlbSB0byBtYWtlIHN1cmUgbm8gbmV3IG1vdW50cworICogaGFwcGVuIG9uIGJkZXYgdW50aWwgdGhhd19iZGV2KCkgaXMgY2FsbGVkLgorICogSWYgYSBzdXBlcmJsb2NrIGlzIGZvdW5kIG9uIHRoaXMgZGV2aWNlLCB3ZSB0YWtlIHRoZSBzX3Vtb3VudCBzZW1hcGhvcmUKKyAqIG9uIGl0IHRvIG1ha2Ugc3VyZSBub2JvZHkgdW5tb3VudHMgdW50aWwgdGhlIHNuYXBzaG90IGNyZWF0aW9uIGlzIGRvbmUuCisgKiBUaGUgcmVmZXJlbmNlIGNvdW50ZXIgKGJkX2ZzZnJlZXplX2NvdW50KSBndWFyYW50ZWVzIHRoYXQgb25seSB0aGUgbGFzdAorICogdW5mcmVlemUgcHJvY2VzcyBjYW4gdW5mcmVlemUgdGhlIGZyb3plbiBmaWxlc3lzdGVtIGFjdHVhbGx5IHdoZW4gbXVsdGlwbGUKKyAqIGZyZWV6ZSByZXF1ZXN0cyBhcnJpdmUgc2ltdWx0YW5lb3VzbHkuIEl0IGNvdW50cyB1cCBpbiBmcmVlemVfYmRldigpIGFuZAorICogY291bnQgZG93biBpbiB0aGF3X2JkZXYoKS4gV2hlbiBpdCBiZWNvbWVzIDAsIHRoYXdfYmRldigpIHdpbGwgdW5mcmVlemUKKyAqIGFjdHVhbGx5LgorICovCitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwlpbnQgZXJyb3IgPSAwOworCisJbXV0ZXhfbG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCWlmIChiZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCA+IDApIHsKKwkJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKKwkJc2IgPSBnZXRfc3VwZXIoYmRldik7CisJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQlyZXR1cm4gc2I7CisJfQorCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50Kys7CisKKwlkb3duKCZiZGV2LT5iZF9tb3VudF9zZW0pOworCXNiID0gZ2V0X3N1cGVyKGJkZXYpOworCWlmIChzYiAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfV1JJVEU7CisJCXNtcF93bWIoKTsKKworCQlfX2ZzeW5jX3N1cGVyKHNiKTsKKworCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfVFJBTlM7CisJCXNtcF93bWIoKTsKKworCQlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOworCisJCWlmIChzYi0+c19vcC0+ZnJlZXplX2ZzKSB7CisJCQllcnJvciA9IHNiLT5zX29wLT5mcmVlemVfZnMoc2IpOworCQkJaWYgKGVycm9yKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSJWRlM6RmlsZXN5c3RlbSBmcmVlemUgZmFpbGVkXG4iKTsKKwkJCQlzYi0+c19mcm96ZW4gPSBTQl9VTkZST1pFTjsKKwkJCQlkcm9wX3N1cGVyKHNiKTsKKwkJCQl1cCgmYmRldi0+YmRfbW91bnRfc2VtKTsKKwkJCQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudC0tOworCQkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQkJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwkJCX0KKwkJfQorCX0KKworCXN5bmNfYmxvY2tkZXYoYmRldik7CisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisKKwlyZXR1cm4gc2I7CS8qIHRoYXdfYmRldiByZWxlYXNlcyBzLT5zX3Vtb3VudCBhbmQgYmRfbW91bnRfc2VtICovCit9CitFWFBPUlRfU1lNQk9MKGZyZWV6ZV9iZGV2KTsKKworLyoqCisgKiB0aGF3X2JkZXYgIC0tIHVubG9jayBmaWxlc3lzdGVtCisgKiBAYmRldjoJYmxvY2tkZXZpY2UgdG8gdW5sb2NrCisgKiBAc2I6CQlhc3NvY2lhdGVkIHN1cGVyYmxvY2sKKyAqCisgKiBVbmxvY2tzIHRoZSBmaWxlc3lzdGVtIGFuZCBtYXJrcyBpdCB3cml0ZWFibGUgYWdhaW4gYWZ0ZXIgZnJlZXplX2JkZXYoKS4KKyAqLworaW50IHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBlcnJvciA9IDA7CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJaWYgKCFiZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCkgeworCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmRldi0+YmRfZnNmcmVlemVfY291bnQtLTsKKwlpZiAoYmRldi0+YmRfZnNmcmVlemVfY291bnQgPiAwKSB7CisJCWlmIChzYikKKwkJCWRyb3Bfc3VwZXIoc2IpOworCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNiKSB7CisJCUJVR19PTihzYi0+c19iZGV2ICE9IGJkZXYpOworCQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwkJCWlmIChzYi0+c19vcC0+dW5mcmVlemVfZnMpIHsKKwkJCQllcnJvciA9IHNiLT5zX29wLT51bmZyZWV6ZV9mcyhzYik7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJIlZGUzpGaWxlc3lzdGVtIHRoYXcgZmFpbGVkXG4iKTsKKwkJCQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1RSQU5TOworCQkJCQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCsrOworCQkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwkJCQkJcmV0dXJuIGVycm9yOworCQkJCX0KKwkJCX0KKwkJCXNiLT5zX2Zyb3plbiA9IFNCX1VORlJPWkVOOworCQkJc21wX3dtYigpOworCQkJd2FrZV91cCgmc2ItPnNfd2FpdF91bmZyb3plbik7CisJCX0KKwkJZHJvcF9zdXBlcihzYik7CisJfQorCisJdXAoJmJkZXYtPmJkX21vdW50X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRoYXdfYmRldik7CisKIHN0YXRpYyBpbnQgYmxrZGV2X3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBibGtkZXZfZ2V0X2Jsb2NrLCB3YmMpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggODI0OTFiYS4uNWUxZDRlMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC03ODQsNyArNzg0LDE0IEBACiAJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9jb3dvbmx5X3Jvb3RzOwogCiAJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXM7CisKKwkvKgorCSAqIHRoZSBzcGFjZV9pbmZvIGxpc3QgaXMgYWxtb3N0IGVudGlyZWx5IHJlYWQgb25seS4gIEl0IG9ubHkgY2hhbmdlcworCSAqIHdoZW4gd2UgYWRkIGEgbmV3IHJhaWQgdHlwZSB0byB0aGUgRlMsIGFuZCB0aGF0IGhhcHBlbnMKKwkgKiB2ZXJ5IHJhcmVseS4gIFJDVSBpcyB1c2VkIHRvIHByb3RlY3QgaXQuCisJICovCiAJc3RydWN0IGxpc3RfaGVhZCBzcGFjZV9pbmZvOworCiAJc3BpbmxvY2tfdCBkZWxhbGxvY19sb2NrOwogCXNwaW5sb2NrX3QgbmV3X3RyYW5zX2xvY2s7CiAJdTY0IGRlbGFsbG9jX2J5dGVzOwpAQCAtMTc5Nyw2ICsxODA0LDggQEAKIGludCBidHJmc19yZWxvY19jbG9uZV9jc3VtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZmlsZV9wb3MsIHU2NCBsZW4pOwogdTY0IGJ0cmZzX3JlZHVjZV9hbGxvY19wcm9maWxlKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgZmxhZ3MpOwogdm9pZCBidHJmc19zZXRfaW5vZGVfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppb25kZSk7Cit2b2lkIGJ0cmZzX2NsZWFyX3NwYWNlX2luZm9fZnVsbChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CisKIGludCBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19jaGVja19kYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJdTY0IGJ5dGVzKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCAzZTE4MTc1Li42ZWM4MGMwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC0yMzg1LDcgKzIzODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGhyZXNoID0gMzIgKiAxMDI0ICogMTAyNDsKIAl0cmVlID0gJkJUUkZTX0kocm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGUpLT5pb190cmVlOwogCi0JaWYgKGN1cnJlbnRfaXNfcGRmbHVzaCgpIHx8IGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpCisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpCiAJCXJldHVybjsKIAogCW51bV9kaXJ0eSA9IGNvdW50X3JhbmdlX2JpdHModHJlZSwgJnN0YXJ0LCAodTY0KS0xLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggOWFiZjgxZi4uZmVmZTgzYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSAiY29tcGF0LmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgImNyYzMyYy5oIgpAQCAtMzMwLDEzICszMzEsMzMgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmluZm8tPnNwYWNlX2luZm87CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmZvdW5kOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZm91bmQsIGhlYWQsIGxpc3QpIHsKLQkJaWYgKGZvdW5kLT5mbGFncyA9PSBmbGFncykKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkgeworCQlpZiAoZm91bmQtPmZsYWdzID09IGZsYWdzKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBmb3VuZDsKKwkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGFmdGVyIGFkZGluZyBzcGFjZSB0byB0aGUgZmlsZXN5c3RlbSwgd2UgbmVlZCB0byBjbGVhciB0aGUgZnVsbCBmbGFncworICogb24gYWxsIHRoZSBzcGFjZSBpbmZvcy4KKyAqLwordm9pZCBidHJmc19jbGVhcl9zcGFjZV9pbmZvX2Z1bGwoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZpbmZvLT5zcGFjZV9pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpmb3VuZDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkKKwkJZm91bmQtPmZ1bGwgPSAwOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCiBzdGF0aWMgdTY0IGRpdl9mYWN0b3IodTY0IG51bSwgaW50IGZhY3RvcikKIHsKIAlpZiAoZmFjdG9yID09IDEwKQpAQCAtMTkwMyw3ICsxOTI0LDYgQEAKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxpc3RfYWRkKCZmb3VuZC0+bGlzdCwgJmluZm8tPnNwYWNlX2luZm8pOwogCUlOSVRfTElTVF9IRUFEKCZmb3VuZC0+YmxvY2tfZ3JvdXBzKTsKIAlpbml0X3J3c2VtKCZmb3VuZC0+Z3JvdXBzX3NlbSk7CiAJc3Bpbl9sb2NrX2luaXQoJmZvdW5kLT5sb2NrKTsKQEAgLTE5MTcsNiArMTkzNyw3IEBACiAJZm91bmQtPmZ1bGwgPSAwOwogCWZvdW5kLT5mb3JjZV9hbGxvYyA9IDA7CiAJKnNwYWNlX2luZm8gPSBmb3VuZDsKKwlsaXN0X2FkZF9yY3UoJmZvdW5kLT5saXN0LCAmaW5mby0+c3BhY2VfaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzMjAsNiArNjM0MSw3IEBACiBpbnQgYnRyZnNfZnJlZV9ibG9ja19ncm91cHMoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cDsKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAogCXNwaW5fbG9jaygmaW5mby0+YmxvY2tfZ3JvdXBfY2FjaGVfbG9jayk7CkBAIC02MzQxLDYgKzYzNjMsMjMgQEAKIAkJc3Bpbl9sb2NrKCZpbmZvLT5ibG9ja19ncm91cF9jYWNoZV9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmluZm8tPmJsb2NrX2dyb3VwX2NhY2hlX2xvY2spOworCisJLyogbm93IHRoYXQgYWxsIHRoZSBibG9jayBncm91cHMgYXJlIGZyZWVkLCBnbyB0aHJvdWdoIGFuZAorCSAqIGZyZWUgYWxsIHRoZSBzcGFjZV9pbmZvIHN0cnVjdHMuICBUaGlzIGlzIG9ubHkgY2FsbGVkIGR1cmluZworCSAqIHRoZSBmaW5hbCBzdGFnZXMgb2YgdW5tb3VudCwgYW5kIHNvIHdlIGtub3cgbm9ib2R5IGlzCisJICogdXNpbmcgdGhlbS4gIFdlIGNhbGwgc3luY2hyb25pemVfcmN1KCkgb25jZSBiZWZvcmUgd2Ugc3RhcnQsCisJICoganVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgorCSAqLworCXN5bmNocm9uaXplX3JjdSgpOworCisJd2hpbGUoIWxpc3RfZW1wdHkoJmluZm8tPnNwYWNlX2luZm8pKSB7CisJCXNwYWNlX2luZm8gPSBsaXN0X2VudHJ5KGluZm8tPnNwYWNlX2luZm8ubmV4dCwKKwkJCQkJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8sCisJCQkJCWxpc3QpOworCisJCWxpc3RfZGVsKCZzcGFjZV9pbmZvLT5saXN0KTsKKwkJa2ZyZWUoc3BhY2VfaW5mbyk7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggMTMxNjEzOS4uZGQwNmUxOCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMTM3NCw2ICsxMzc0LDEyIEBACiAJCXJldCA9IGJ0cmZzX2FkZF9kZXZpY2UodHJhbnMsIHJvb3QsIGRldmljZSk7CiAJfQogCisJLyoKKwkgKiB3ZSd2ZSBnb3QgbW9yZSBzdG9yYWdlLCBjbGVhciBhbnkgZnVsbCBmbGFncyBvbiB0aGUgc3BhY2UKKwkgKiBpbmZvcworCSAqLworCWJ0cmZzX2NsZWFyX3NwYWNlX2luZm9fZnVsbChyb290LT5mc19pbmZvKTsKKwogCXVubG9ja19jaHVua3Mocm9vdCk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIApAQCAtMTQ1OSw2ICsxNDY1LDggQEAKIAlkZXZpY2UtPmZzX2RldmljZXMtPnRvdGFsX3J3X2J5dGVzICs9IGRpZmY7CiAKIAlkZXZpY2UtPnRvdGFsX2J5dGVzID0gbmV3X3NpemU7CisJYnRyZnNfY2xlYXJfc3BhY2VfaW5mb19mdWxsKGRldmljZS0+ZGV2X3Jvb3QtPmZzX2luZm8pOworCiAJcmV0dXJuIGJ0cmZzX3VwZGF0ZV9kZXZpY2UodHJhbnMsIGRldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggOWY2OTc0MS4uYTJmZDc0MyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE2NiwxNTEgKzE2Niw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKLSAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCi0gKi8KLWludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoYmRldikKLQkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2KTsKLQotLyoKLSAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gKiBkZXZpY2UuICAgRmlsZXN5c3RlbSBkYXRhIGFzIHdlbGwgYXMgdGhlIHVuZGVybHlpbmcgYmxvY2sKLSAqIGRldmljZS4gIFRha2VzIHRoZSBzdXBlcmJsb2NrIGxvY2suCi0gKi8KLWludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihiZGV2KTsKLQlpZiAoc2IpIHsKLQkJaW50IHJlcyA9IGZzeW5jX3N1cGVyKHNiKTsKLQkJZHJvcF9zdXBlcihzYik7Ci0JCXJldHVybiByZXM7Ci0JfQotCXJldHVybiBzeW5jX2Jsb2NrZGV2KGJkZXYpOwotfQotCi0vKioKLSAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCi0gKiBAYmRldjoJYmxvY2tkZXZpY2UgdG8gbG9jawotICoKLSAqIFRoaXMgdGFrZXMgdGhlIGJsb2NrIGRldmljZSBiZF9tb3VudF9zZW0gdG8gbWFrZSBzdXJlIG5vIG5ldyBtb3VudHMKLSAqIGhhcHBlbiBvbiBiZGV2IHVudGlsIHRoYXdfYmRldigpIGlzIGNhbGxlZC4KLSAqIElmIGEgc3VwZXJibG9jayBpcyBmb3VuZCBvbiB0aGlzIGRldmljZSwgd2UgdGFrZSB0aGUgc191bW91bnQgc2VtYXBob3JlCi0gKiBvbiBpdCB0byBtYWtlIHN1cmUgbm9ib2R5IHVubW91bnRzIHVudGlsIHRoZSBzbmFwc2hvdCBjcmVhdGlvbiBpcyBkb25lLgotICogVGhlIHJlZmVyZW5jZSBjb3VudGVyIChiZF9mc2ZyZWV6ZV9jb3VudCkgZ3VhcmFudGVlcyB0aGF0IG9ubHkgdGhlIGxhc3QKLSAqIHVuZnJlZXplIHByb2Nlc3MgY2FuIHVuZnJlZXplIHRoZSBmcm96ZW4gZmlsZXN5c3RlbSBhY3R1YWxseSB3aGVuIG11bHRpcGxlCi0gKiBmcmVlemUgcmVxdWVzdHMgYXJyaXZlIHNpbXVsdGFuZW91c2x5LiBJdCBjb3VudHMgdXAgaW4gZnJlZXplX2JkZXYoKSBhbmQKLSAqIGNvdW50IGRvd24gaW4gdGhhd19iZGV2KCkuIFdoZW4gaXQgYmVjb21lcyAwLCB0aGF3X2JkZXYoKSB3aWxsIHVuZnJlZXplCi0gKiBhY3R1YWxseS4KLSAqLwotc3RydWN0IHN1cGVyX2Jsb2NrICpmcmVlemVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IGVycm9yID0gMDsKLQotCW11dGV4X2xvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQlpZiAoYmRldi0+YmRfZnNmcmVlemVfY291bnQgPiAwKSB7Ci0JCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50Kys7Ci0JCXNiID0gZ2V0X3N1cGVyKGJkZXYpOwotCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQkJcmV0dXJuIHNiOwotCX0KLQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCsrOwotCi0JZG93bigmYmRldi0+YmRfbW91bnRfc2VtKTsKLQlzYiA9IGdldF9zdXBlcihiZGV2KTsKLQlpZiAoc2IgJiYgIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKLQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1dSSVRFOwotCQlzbXBfd21iKCk7Ci0KLQkJX19mc3luY19zdXBlcihzYik7Ci0KLQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1RSQU5TOwotCQlzbXBfd21iKCk7Ci0KLQkJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQotCQlpZiAoc2ItPnNfb3AtPmZyZWV6ZV9mcykgewotCQkJZXJyb3IgPSBzYi0+c19vcC0+ZnJlZXplX2ZzKHNiKTsKLQkJCWlmIChlcnJvcikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiVkZTOkZpbGVzeXN0ZW0gZnJlZXplIGZhaWxlZFxuIik7Ci0JCQkJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47Ci0JCQkJZHJvcF9zdXBlcihzYik7Ci0JCQkJdXAoJmJkZXYtPmJkX21vdW50X3NlbSk7Ci0JCQkJYmRldi0+YmRfZnNmcmVlemVfY291bnQtLTsKLQkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQkJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzeW5jX2Jsb2NrZGV2KGJkZXYpOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCi0JcmV0dXJuIHNiOwkvKiB0aGF3X2JkZXYgcmVsZWFzZXMgcy0+c191bW91bnQgYW5kIGJkX21vdW50X3NlbSAqLwotfQotRVhQT1JUX1NZTUJPTChmcmVlemVfYmRldik7Ci0KLS8qKgotICogdGhhd19iZGV2ICAtLSB1bmxvY2sgZmlsZXN5c3RlbQotICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIHVubG9jawotICogQHNiOgkJYXNzb2NpYXRlZCBzdXBlcmJsb2NrCi0gKgotICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGZyZWV6ZV9iZGV2KCkuCi0gKi8KLWludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCi0JbXV0ZXhfbG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCWlmICghYmRldi0+YmRfZnNmcmVlemVfY291bnQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50LS07Ci0JaWYgKGJkZXYtPmJkX2ZzZnJlZXplX2NvdW50ID4gMCkgewotCQlpZiAoc2IpCi0JCQlkcm9wX3N1cGVyKHNiKTsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzYikgewotCQlCVUdfT04oc2ItPnNfYmRldiAhPSBiZGV2KTsKLQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCQlpZiAoc2ItPnNfb3AtPnVuZnJlZXplX2ZzKSB7Ci0JCQkJZXJyb3IgPSBzYi0+c19vcC0+dW5mcmVlemVfZnMoc2IpOwotCQkJCWlmIChlcnJvcikgewotCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJCSJWRlM6RmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxuIik7Ci0JCQkJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9UUkFOUzsKLQkJCQkJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCQkJCXJldHVybiBlcnJvcjsKLQkJCQl9Ci0JCQl9Ci0JCQlzYi0+c19mcm96ZW4gPSBTQl9VTkZST1pFTjsKLQkJCXNtcF93bWIoKTsKLQkJCXdha2VfdXAoJnNiLT5zX3dhaXRfdW5mcm96ZW4pOwotCQl9Ci0JCWRyb3Bfc3VwZXIoc2IpOwotCX0KLQotCXVwKCZiZGV2LT5iZF9tb3VudF9zZW0pOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTCh0aGF3X2JkZXYpOwotCi0vKgogICogVmFyaW91cyBmaWxlc3lzdGVtcyBhcHBlYXIgdG8gd2FudCBfX2ZpbmRfZ2V0X2Jsb2NrIHRvIGJlIG5vbi1ibG9ja2luZy4KICAqIEJ1dCBpdCdzIHRoZSBwYWdlIGxvY2sgd2hpY2ggcHJvdGVjdHMgdGhlIGJ1ZmZlcnMuICBUbyBnZXQgYXJvdW5kIHRoaXMsCiAgKiB3ZSBnZXQgZXhjbHVzaW9uIGZyb20gdHJ5X3RvX2ZyZWVfYnVmZmVycyB3aXRoIHRoZSBibG9ja2RldiBtYXBwaW5nJ3MKQEAgLTc2MCwxNSArNjE1LDkgQEAKICAqIElmIHdhcm4gaXMgdHJ1ZSwgdGhlbiBlbWl0IGEgd2FybmluZyBpZiB0aGUgcGFnZSBpcyBub3QgdXB0b2RhdGUgYW5kIGhhcwogICogbm90IGJlZW4gdHJ1bmNhdGVkLgogICovCi1zdGF0aWMgaW50IF9fc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UsCitzdGF0aWMgdm9pZCBfX3NldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgaW50IHdhcm4pCiB7Ci0JaWYgKHVubGlrZWx5KCFtYXBwaW5nKSkKLQkJcmV0dXJuICFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpOwotCi0JaWYgKFRlc3RTZXRQYWdlRGlydHkocGFnZSkpCi0JCXJldHVybiAwOwotCiAJc3Bpbl9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlpZiAocGFnZS0+bWFwcGluZykgewkvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCiAJCVdBUk5fT05fT05DRSh3YXJuICYmICFQYWdlVXB0b2RhdGUocGFnZSkpOwpAQCAtNzg1LDggKzYzNCw2IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlfX21hcmtfaW5vZGVfZGlydHkobWFwcGluZy0+aG9zdCwgSV9ESVJUWV9QQUdFUyk7Ci0KLQlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTgxNiw2ICs2NjMsNyBAQAogICovCiBpbnQgX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWludCBuZXdseV9kaXJ0eTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAogCWlmICh1bmxpa2VseSghbWFwcGluZykpCkBAIC04MzEsOSArNjc5LDEyIEBACiAJCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAJfQorCW5ld2x5X2RpcnR5ID0gIVRlc3RTZXRQYWdlRGlydHkocGFnZSk7CiAJc3Bpbl91bmxvY2soJm1hcHBpbmctPnByaXZhdGVfbG9jayk7CiAKLQlyZXR1cm4gX19zZXRfcGFnZV9kaXJ0eShwYWdlLCBtYXBwaW5nLCAxKTsKKwlpZiAobmV3bHlfZGlydHkpCisJCV9fc2V0X3BhZ2VfZGlydHkocGFnZSwgbWFwcGluZywgMSk7CisJcmV0dXJuIG5ld2x5X2RpcnR5OwogfQogRVhQT1JUX1NZTUJPTChfX3NldF9wYWdlX2RpcnR5X2J1ZmZlcnMpOwogCkBAIC0xMjYyLDggKzExMTMsMTEgQEAKIAkJCXJldHVybjsKIAl9CiAKLQlpZiAoIXRlc3Rfc2V0X2J1ZmZlcl9kaXJ0eShiaCkpCi0JCV9fc2V0X3BhZ2VfZGlydHkoYmgtPmJfcGFnZSwgcGFnZV9tYXBwaW5nKGJoLT5iX3BhZ2UpLCAwKTsKKwlpZiAoIXRlc3Rfc2V0X2J1ZmZlcl9kaXJ0eShiaCkpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBiaC0+Yl9wYWdlOworCQlpZiAoIVRlc3RTZXRQYWdlRGlydHkocGFnZSkpCisJCQlfX3NldF9wYWdlX2RpcnR5KHBhZ2UsIHBhZ2VfbWFwcGluZyhwYWdlKSwgMCk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IDg1MTM4OGYuLjY1OTg0MDAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTYsNyArNiwxNiBAQAogYXJlIGF1dGhlbnRpY2F0ZWQgYXMgZ3Vlc3QsIGFzIHJlY29ubmVjdGlvbnMsIGludmFsaWRhdGluZyB0aGUgZWFybGllcgogdXNlcidzIHNtYiBzZXNzaW9uLiAgVGhpcyBmaXggYWxsb3dzIGNpZnMgdG8gbW91bnQgbXVsdGlwbGUgdGltZXMgdG8gdGhlCiBzYW1lIHNlcnZlciB3aXRoIGRpZmZlcmVudCB1c2VyaWRzIHdpdGhvdXQgcmlza2luZyBpbnZhbGlkYXRpbmcgZWFybGllcgotZXN0YWJsaXNoZWQgc2VjdXJpdHkgY29udGV4dHMuCitlc3RhYmxpc2hlZCBzZWN1cml0eSBjb250ZXh0cy4gIGZzeW5jIG5vdyBzZW5kcyBTTUIgRmx1c2ggb3BlcmF0aW9uCit0byBiZXR0ZXIgZW5zdXJlIHRoYXQgd2Ugd2FpdCBmb3Igc2VydmVyIHRvIHdyaXRlIGFsbCBvZiB0aGUgZGF0YSB0bworc2VydmVyIGRpc2sgKG5vdCBqdXN0IHdyaXRlIGl0IG92ZXIgdGhlIG5ldHdvcmspLiAgQWRkIG5ldyBtb3VudAorcGFyYW1ldGVyIHRvIGFsbG93IHVzZXIgdG8gZGlzYWJsZSBzZW5kaW5nIHRoZSAoc2xvdykgU01CIGZsdXNoIG9uCitmc3luYyBpZiBkZXNpcmVkIChmc3luYyBzdGlsbCBmbHVzaGVzIGFsbCBjYWNoZWQgd3JpdGUgZGF0YSB0byB0aGUgc2VydmVyKS4KK1Bvc2l4IGZpbGUgb3BlbiBzdXBwb3J0IGFkZGVkICh0dXJuZWQgb2ZmIGFmdGVyIG9uZSBhdHRlbXB0IGlmIHNlcnZlcgorZmFpbHMgdG8gc3VwcG9ydCBpdCBwcm9wZXJseSwgYXMgd2l0aCBTYW1iYSBzZXJ2ZXIgdmVyc2lvbnMgcHJpb3IgdG8gMy4zLjIpCitGaXggInJlZHpvbmUgb3ZlcndyaXR0ZW4iIGJ1ZyBpbiBjaWZzX3B1dF90Y29uIChDSUZTVGNvbiBtYXkgYWxsb2NhdGUgdG9vCitsaXR0bGUgbWVtb3J5IGZvciB0aGUgIm5hdGl2ZUZpbGVTeXN0ZW0iIGZpZWxkIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIKK2R1cmluZyBtb3VudCkuIAogCiBWZXJzaW9uIDEuNTYKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCmluZGV4IDM0MWE5ODkuLjY5OTRhMGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvS2NvbmZpZworKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTExOCw2ICsxMTgsMTggQEAKIAkgICBvcHRpb24gY2FuIGJlIHR1cm5lZCBvZmYgdW5sZXNzIHlvdSBhcmUgZGVidWdnaW5nCiAJICAgY2lmcyBwcm9ibGVtcy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBDSUZTX0RGU19VUENBTEwKKwkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgS0VZUworCSAgaGVscAorCSAgICBEaXN0cmlidXRlZCBGaWxlIFN5c3RlbSAoREZTKSBzdXBwb3J0IGlzIHVzZWQgdG8gYWNjZXNzIHNoYXJlcworCSAgICB0cmFuc3BhcmVudGx5IGluIGFuIGVudGVycHJpc2UgbmFtZSBzcGFjZSwgZXZlbiBpZiB0aGUgc2hhcmUKKwkgICAgbW92ZXMgdG8gYSBkaWZmZXJlbnQgc2VydmVyLiAgVGhpcyBmZWF0dXJlIGFsc28gZW5hYmxlcworCSAgICBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGNvbnRhY3RzIHVzZXJzcGFjZSBoZWxwZXIKKwkgICAgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc2VydmVyIG5hbWUgcmVzb2x1dGlvbiAoaG9zdCBuYW1lcyB0bworCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgorCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAogCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCiAJICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCkBAIC0xMzEsMTIgKzE0MywzIEBACiAJICAgICh3aGljaCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0KS4gU2VlIHRoZSBmaWxlIGZzL2NpZnMvUkVBRE1FCiAJICAgIGZvciBtb3JlIGRldGFpbHMuICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgQ0lGU19ERlNfVVBDQUxMCi0JICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTX0VYUEVSSU1FTlRBTAotCSAgZGVwZW5kcyBvbiBLRVlTCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UKLQkgICAgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KLQkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KLQkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCBkYTQ1MTVlLi4wNzQzNDE4IDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtNDcyLDYgKzQ3MiwxOSBAQAogCQlldmVuIGlmIHRoZSBjaWZzIHNlcnZlciB3b3VsZCBzdXBwb3J0IHBvc2l4IGFkdmlzb3J5IGxvY2tzLgogCQkiZm9yY2VtYW5kIiBpcyBhY2NlcHRlZCBhcyBhIHNob3J0ZXIgZm9ybSBvZiB0aGlzIG1vdW50CiAJCW9wdGlvbi4KKyBub3N0cmljdHN5bmMgICBJZiB0aGlzIG1vdW50IG9wdGlvbiBpcyBzZXQsIHdoZW4gYW4gYXBwbGljYXRpb24gZG9lcyBhbgorCQlmc3luYyBjYWxsIHRoZW4gdGhlIGNpZnMgY2xpZW50IGRvZXMgbm90IHNlbmQgYW4gU01CIEZsdXNoCisJCXRvIHRoZSBzZXJ2ZXIgKHRvIGZvcmNlIHRoZSBzZXJ2ZXIgdG8gd3JpdGUgYWxsIGRpcnR5IGRhdGEKKwkJZm9yIHRoaXMgZmlsZSBpbW1lZGlhdGVseSB0byBkaXNrKSwgYWx0aG91Z2ggY2lmcyBzdGlsbCBzZW5kcworCQlhbGwgZGlydHkgKGNhY2hlZCkgZmlsZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgYW5kIHdhaXRzIGZvciB0aGUKKwkJc2VydmVyIHRvIHJlc3BvbmQgdG8gdGhlIHdyaXRlLiAgU2luY2UgU01CIEZsdXNoIGNhbiBiZQorCQl2ZXJ5IHNsb3csIGFuZCBzb21lIHNlcnZlcnMgbWF5IGJlIHJlbGlhYmxlIGVub3VnaCAodG8gcmlzaworCQlkZWxheWluZyBzbGlnaHRseSBmbHVzaGluZyB0aGUgZGF0YSB0byBkaXNrIG9uIHRoZSBzZXJ2ZXIpLAorCQl0dXJuaW5nIG9uIHRoaXMgb3B0aW9uIG1heSBiZSB1c2VmdWwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IKKwkJYXBwbGljYXRpb25zIHRoYXQgZnN5bmMgdG9vIG11Y2gsIGF0IGEgc21hbGwgcmlzayBvZiBzZXJ2ZXIKKwkJY3Jhc2guICBJZiB0aGlzIG1vdW50IG9wdGlvbiBpcyBub3Qgc2V0LCBieSBkZWZhdWx0IGNpZnMgd2lsbAorCQlzZW5kIGFuIFNNQiBmbHVzaCByZXF1ZXN0IChhbmQgd2FpdCBmb3IgYSByZXNwb25zZSkgb24gZXZlcnkKKwkJZnN5bmMgY2FsbC4KICBub2RmcyAgICAgICAgICBEaXNhYmxlIERGUyAoZ2xvYmFsIG5hbWUgc3BhY2Ugc3VwcG9ydCkgZXZlbiBpZiB0aGUKIAkJc2VydmVyIGNsYWltcyB0byBzdXBwb3J0IGl0LiAgVGhpcyBjYW4gaGVscCB3b3JrIGFyb3VuZAogCQlhIHByb2JsZW0gd2l0aCBwYXJzaW5nIG9mIERGUyBwYXRocyB3aXRoIFNhbWJhIHNlcnZlcgpAQCAtNjkyLDEzICs3MDUsMTQgQEAKIGNpZnMudXBjYWxsIGhlbHBlciBwcm9ncmFtKSwgaW5zdGVhZCBvZiB1c2luZyBLZXJiZXJvcywgaXMgc3VmZmljaWVudCBmb3IKIHNvbWUgdXNlIGNhc2VzLgogCi1FbmFibGluZyBERlMgc3VwcG9ydCAodXNlZCB0byBhY2Nlc3Mgc2hhcmVzIHRyYW5zcGFyZW50bHkgaW4gYW4gTVMtREZTCi1nbG9iYWwgbmFtZSBzcGFjZSkgcmVxdWlyZXMgdGhhdCBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgYmUgZW5hYmxlZC4gIEluCi1hZGRpdGlvbiwgREZTIHN1cHBvcnQgZm9yIHRhcmdldCBzaGFyZXMgd2hpY2ggYXJlIHNwZWNpZmllZCBhcyBVTkMKK0RGUyBzdXBwb3J0IGFsbG93cyB0cmFuc3BhcmVudCByZWRpcmVjdGlvbiB0byBzaGFyZXMgaW4gYW4gTVMtREZTIG5hbWUgc3BhY2UuCitJbiBhZGRpdGlvbiwgREZTIHN1cHBvcnQgZm9yIHRhcmdldCBzaGFyZXMgd2hpY2ggYXJlIHNwZWNpZmllZCBhcyBVTkMKIG5hbWVzIHdoaWNoIGJlZ2luIHdpdGggaG9zdCBuYW1lcyAocmF0aGVyIHRoYW4gSVAgYWRkcmVzc2VzKSByZXF1aXJlcwogYSB1c2VyIHNwYWNlIGhlbHBlciAoc3VjaCBhcyBjaWZzLnVwY2FsbCkgdG8gYmUgcHJlc2VudCBpbiBvcmRlciB0bwogdHJhbnNsYXRlIGhvc3QgbmFtZXMgdG8gaXAgYWRkcmVzcywgYW5kIHRoZSB1c2VyIHNwYWNlIGhlbHBlciBtdXN0IGFsc28KLWJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZpbGUgL2V0Yy9yZXF1ZXN0LWtleS5jb25mCitiZSBjb25maWd1cmVkIGluIHRoZSBmaWxlIC9ldGMvcmVxdWVzdC1rZXkuY29uZi4gIFNhbWJhLCBXaW5kb3dzIHNlcnZlcnMgYW5kCittYW55IE5BUyBhcHBsaWFuY2VzIHN1cHBvcnQgREZTIGFzIGEgd2F5IG9mIGNvbnN0cnVjdGluZyBhIGdsb2JhbCBuYW1lCitzcGFjZSB0byBlYXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgaW1wcm92ZSByZWxpYWJpbGl0eS4KIAogVG8gdXNlIGNpZnMgS2VyYmVyb3MgYW5kIERGUyBzdXBwb3J0LCB0aGUgTGludXgga2V5dXRpbHMgcGFja2FnZSBzaG91bGQgYmUKIGluc3RhbGxlZCBhbmQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBsaW5lcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuYyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCmluZGV4IDQ5MGUzNGIuLjg3N2U0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCkBAIC0zNDAsNiArMzQwLDggQEAKIAkJCQlzZXFfcHJpbnRmKG0sICJcbldyaXRlczogJWQgQnl0ZXM6ICVsbGQiLAogCQkJCQlhdG9taWNfcmVhZCgmdGNvbi0+bnVtX3dyaXRlcyksCiAJCQkJCShsb25nIGxvbmcpKHRjb24tPmJ5dGVzX3dyaXR0ZW4pKTsKKwkJCQlzZXFfcHJpbnRmKG0sICJcbkZsdXNoZXM6ICVkIiwKKwkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV9mbHVzaGVzKSk7CiAJCQkJc2VxX3ByaW50ZihtLCAiXG5Mb2NrczogJWQgSGFyZExpbmtzOiAlZCAiCiAJCQkJCSAgICAgICJTeW1saW5rczogJWQiLAogCQkJCQlhdG9taWNfcmVhZCgmdGNvbi0+bnVtX2xvY2tzKSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCmluZGV4IDg1YzBhNzQuLjVmZGJmOGEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKKysrIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwpAQCAtMTA0LDkgKzEwNCw5IEBACiAKIAogLyoqCi0gKiBjb21wb3NlX21vdW50X29wdGlvbnMJLQljcmVhdGVzIG1vdW50IG9wdGlvbnMgZm9yIHJlZmZlcnJhbAorICogY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMJLQljcmVhdGVzIG1vdW50IG9wdGlvbnMgZm9yIHJlZmZlcnJhbAogICogQHNiX21vdW50ZGF0YToJcGFyZW50L3Jvb3QgREZTIG1vdW50IG9wdGlvbnMgKHRlbXBsYXRlKQotICogQGRlbnRyeToJCXBvaW50IHdoZXJlIHdlIGFyZSBnb2luZyB0byBtb3VudAorICogQGZ1bGxwYXRoOgkJZnVsbCBwYXRoIGluIFVOQyBmb3JtYXQKICAqIEByZWY6CQlzZXJ2ZXIncyByZWZlcnJhbAogICogQGRldm5hbWU6CQlwb2ludGVyIGZvciBzYXZpbmcgZGV2aWNlIG5hbWUKICAqCkBAIC0xMTYsOCArMTE2LDggQEAKICAqIFJldHVybnM6IHBvaW50ZXIgdG8gbmV3IG1vdW50IG9wdGlvbnMgb3IgRVJSX1BUUi4KICAqIENhbGxlciBpcyByZXNwb25jaWJsZSBmb3IgZnJlZWluZyByZXR1bnJuZWQgdmFsdWUgaWYgaXQgaXMgbm90IGVycm9yLgogICovCi1zdGF0aWMgY2hhciAqY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKLQkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCitjaGFyICpjaWZzX2NvbXBvc2VfbW91bnRfb3B0aW9ucyhjb25zdCBjaGFyICpzYl9tb3VudGRhdGEsCisJCQkJICAgY29uc3QgY2hhciAqZnVsbHBhdGgsCiAJCQkJICAgY29uc3Qgc3RydWN0IGRmc19pbmZvM19wYXJhbSAqcmVmLAogCQkJCSAgIGNoYXIgKipkZXZuYW1lKQogewpAQCAtMTI4LDcgKzEyOCw2IEBACiAJY2hhciAqc3J2SVAgPSBOVUxMOwogCWNoYXIgc2VwID0gJywnOwogCWludCBvZmYsIG5vZmY7Ci0JY2hhciAqZnVsbHBhdGg7CiAKIAlpZiAoc2JfbW91bnRkYXRhID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtMjAyLDE3ICsyMDEsNiBAQAogCQlnb3RvIGNvbXBvc2VfbW91bnRfb3B0aW9uc19lcnI7CiAJfQogCi0JLyoKLQkgKiB0aGlzIGZ1bmN0aW9uIGdpdmVzIHVzIGEgcGF0aCB3aXRoIGEgZG91YmxlIGJhY2tzbGFzaCBwcmVmaXguIFdlCi0JICogcmVxdWlyZSBhIHNpbmdsZSBiYWNrc2xhc2ggZm9yIERGUy4gVGVtcG9yYXJpbHkgaW5jcmVtZW50IGZ1bGxwYXRoCi0JICogdG8gcHV0IGl0IGluIHRoZSBwcm9wZXIgZm9ybSBhbmQgZGVjcmVtZW50IGJlZm9yZSBmcmVlaW5nIGl0LgotCSAqLwotCWZ1bGxwYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnkpOwotCWlmICghZnVsbHBhdGgpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGNvbXBvc2VfbW91bnRfb3B0aW9uc19lcnI7Ci0JfQotCSsrZnVsbHBhdGg7CiAJdGtuX2UgPSBzdHJjaHIodGtuX2UgKyAxLCAnXFwnKTsKIAlpZiAodGtuX2UgfHwgKHN0cmxlbihmdWxscGF0aCkgLSByZWYtPnBhdGhfY29uc3VtZWQpKSB7CiAJCXN0cm5jYXQobW91bnRkYXRhLCAmc2VwLCAxKTsKQEAgLTIyMSw4ICsyMDksNiBAQAogCQkJc3RyY2F0KG1vdW50ZGF0YSwgdGtuX2UgKyAxKTsKIAkJc3RyY2F0KG1vdW50ZGF0YSwgZnVsbHBhdGggKyByZWYtPnBhdGhfY29uc3VtZWQpOwogCX0KLQktLWZ1bGxwYXRoOwotCWtmcmVlKGZ1bGxwYXRoKTsKIAogCS8qY0ZZSSgxLCgiJXM6IHBhcmVudCBtb3VudGRhdGE6ICVzIiwgX19mdW5jX18sc2JfbW91bnRkYXRhKSk7Ki8KIAkvKmNGWUkoMSwgKCIlczogc3VibW91bnQgbW91bnRkYXRhOiAlcyIsIF9fZnVuY19fLCBtb3VudGRhdGEgKSk7Ki8KQEAgLTI0NSwxMCArMjMxLDIwIEBACiAJc3RydWN0IHZmc21vdW50ICptbnQ7CiAJY2hhciAqbW91bnRkYXRhOwogCWNoYXIgKmRldm5hbWUgPSBOVUxMOworCWNoYXIgKmZ1bGxwYXRoOwogCiAJY2lmc19zYiA9IENJRlNfU0IoZGVudHJ5LT5kX2lub2RlLT5pX3NiKTsKLQltb3VudGRhdGEgPSBjb21wb3NlX21vdW50X29wdGlvbnMoY2lmc19zYi0+bW91bnRkYXRhLAotCQkJCQkJZGVudHJ5LCByZWYsICZkZXZuYW1lKTsKKwkvKgorCSAqIHRoaXMgZnVuY3Rpb24gZ2l2ZXMgdXMgYSBwYXRoIHdpdGggYSBkb3VibGUgYmFja3NsYXNoIHByZWZpeC4gV2UKKwkgKiByZXF1aXJlIGEgc2luZ2xlIGJhY2tzbGFzaCBmb3IgREZTLgorCSAqLworCWZ1bGxwYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnkpOworCWlmICghZnVsbHBhdGgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbW91bnRkYXRhID0gY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY2lmc19zYi0+bW91bnRkYXRhLAorCQkJZnVsbHBhdGggKyAxLCByZWYsICZkZXZuYW1lKTsKKwlrZnJlZShmdWxscGF0aCk7CiAKIAlpZiAoSVNfRVJSKG1vdW50ZGF0YSkpCiAJCXJldHVybiAoc3RydWN0IHZmc21vdW50ICopbW91bnRkYXRhOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmggYi9mcy9jaWZzL2NpZnNfZnNfc2IuaAppbmRleCBjNGMzMDZmLi40Nzk3Nzg3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZnNfc2IuaAorKysgYi9mcy9jaWZzL2NpZnNfZnNfc2IuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBDSUZTX01PVU5UX09WRVJSX0dJRCAgICAweDgwMCAvKiBvdmVycmlkZSBnaWQgcmV0dXJuZWQgZnJvbSBzZXJ2ZXIgICAgKi8KICNkZWZpbmUgQ0lGU19NT1VOVF9EWU5QRVJNICAgICAgMHgxMDAwIC8qIGFsbG93IGluLW1lbW9yeSBvbmx5IG1vZGUgc2V0dGluZyAgICovCiAjZGVmaW5lIENJRlNfTU9VTlRfTk9QT1NJWEJSTCAgIDB4MjAwMCAvKiBtYW5kYXRvcnkgbm90IHBvc2l4IGJ5dGUgcmFuZ2UgbG9jayAqLworI2RlZmluZSBDSUZTX01PVU5UX05PU1NZTkMgICAgICAweDQwMDAgLyogZG9uJ3QgZG8gc2xvdyBTTUJmbHVzaCBvbiBldmVyeSBzeW5jKi8KIAogc3RydWN0IGNpZnNfc2JfaW5mbyB7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsJLyogcHJpbWFyeSBtb3VudCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggMTNlYTUzMi4uMzg0OTFmZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC02MDYsNyArNjA2LDggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAlzYi0+c19mbGFncyB8PSBNU19BQ1RJVkU7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBjaWZzX2ZpbGVfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCAyYjFkMjhhLi43N2UxOTBkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTc4LDggKzc4LDggQEAKIGV4dGVybiBpbnQgY2lmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpkaXJlbnRyeSwgZmlsbGRpcl90IGZpbGxkaXIpOwogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBkaXIgZW50cmllcyAqLwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2RlbnRyeV9vcHM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNpZnNfY2lfZGVudHJ5X29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19kZW50cnlfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2NpX2RlbnRyeV9vcHM7CiAKIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHN5bWxpbmtzICovCiBleHRlcm4gdm9pZCAqY2lmc19mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IGUwMDRmNmQuLjlmYmY0ZGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTI1NCw2ICsyNTQsNyBAQAogCWF0b21pY190IG51bV9zbWJzX3NlbnQ7CiAJYXRvbWljX3QgbnVtX3dyaXRlczsKIAlhdG9taWNfdCBudW1fcmVhZHM7CisJYXRvbWljX3QgbnVtX2ZsdXNoZXM7CiAJYXRvbWljX3QgbnVtX29wbG9ja19icmtzOwogCWF0b21pY190IG51bV9vcGVuczsKIAlhdG9taWNfdCBudW1fY2xvc2VzOwpAQCAtMjk4LDYgKzI5OSw3IEBACiAJYm9vbCB1bml4X2V4dDoxOyAgLyogaWYgZmFsc2UgZGlzYWJsZSBMaW51eCBleHRlbnNpb25zIHRvIENJRlMgcHJvdG9jb2wKIAkJCQlmb3IgdGhpcyBtb3VudCBldmVuIGlmIHNlcnZlciB3b3VsZCBzdXBwb3J0ICovCiAJYm9vbCBsb2NhbF9sZWFzZToxOyAvKiBjaGVjayBsZWFzZXMgKG9ubHkpIG9uIGxvY2FsIHN5c3RlbSBub3QgcmVtb3RlICovCisJYm9vbCBicm9rZW5fcG9zaXhfb3BlbjsgLyogZS5nLiBTYW1iYSBzZXJ2ZXIgdmVyc2lvbnMgPCAzLjMuMiwgMy4yLjkgKi8KIAlib29sIG5lZWRfcmVjb25uZWN0OjE7IC8qIGNvbm5lY3Rpb24gcmVzZXQsIHRpZCBub3cgaW52YWxpZCAqLwogCS8qIEJCIGFkZCBmaWVsZCBmb3IgYmFjayBwb2ludGVyIHRvIHNiIHN0cnVjdChzKT8gKi8KIH07CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwZHUuaCBiL2ZzL2NpZnMvY2lmc3BkdS5oCmluZGV4IGI0ZTJlOWYwLi5iMzcwNDg5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwZHUuaAorKysgYi9mcy9jaWZzL2NpZnNwZHUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY2lmc3BkdS5oCiAgKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDgKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA5CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBfQ0lGU1BEVV9ICiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgInNtYmZzY3RsLmgiCiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKICNkZWZpbmUgTEFOTUFOX1BST1QgMApAQCAtMzQsMTUgKzM1LDE1IEBACiAjZGVmaW5lIFBPU0lYX1BST1QgIChDSUZTX1BST1QrMSkKICNkZWZpbmUgQkFEX1BST1QgMHhGRkZGCiAKLS8qIFNNQiBjb21tYW5kIGNvZGVzICovCi0vKgotICogU29tZSBjb21tYW5kcyBoYXZlIG1pbmltYWwgKHdjdD0wLGJjYz0wKSwgb3IgdW5pbnRlcmVzdGluZywgcmVzcG9uc2VzCisvKiBTTUIgY29tbWFuZCBjb2RlczoKKyAqIE5vdGUgc29tZSBjb21tYW5kcyBoYXZlIG1pbmltYWwgKHdjdD0wLGJjYz0wKSwgb3IgdW5pbnRlcmVzdGluZywgcmVzcG9uc2VzCiAgKiAoaWUgd2hpY2ggaW5jbHVkZSBubyB1c2VmdWwgZGF0YSBvdGhlciB0aGFuIHRoZSBTTUIgZXJyb3IgY29kZSBpdHNlbGYpLgotICogS25vd2luZyB0aGlzIGhlbHBzIGF2b2lkIHJlc3BvbnNlIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgY29weSBpbiBzb21lIGNhc2VzCisgKiBUaGlzIGNhbiBhbGxvdyB1cyB0byBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcwogICovCiAjZGVmaW5lIFNNQl9DT01fQ1JFQVRFX0RJUkVDVE9SWSAgICAgIDB4MDAgLyogdHJpdmlhbCByZXNwb25zZSAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURV9ESVJFQ1RPUlkgICAgICAweDAxIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9DTE9TRSAgICAgICAgICAgICAgICAgMHgwNCAvKiB0cml2IHJlcS9yc3AsIHRpbWVzdGFtcCBpZ25vcmVkICovCisjZGVmaW5lIFNNQl9DT01fRkxVU0ggICAgICAgICAgICAgICAgIDB4MDUgLyogdHJpdiByZXEvcnNwICovCiAjZGVmaW5lIFNNQl9DT01fREVMRVRFICAgICAgICAgICAgICAgIDB4MDYgLyogdHJpdmlhbCByZXNwb25zZSAqLwogI2RlZmluZSBTTUJfQ09NX1JFTkFNRSAgICAgICAgICAgICAgICAweDA3IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9RVUVSWV9JTkZPUk1BVElPTiAgICAgMHgwOCAvKiBha2EgZ2V0YXR0ciAqLwpAQCAtNzkwLDYgKzc5MSwxMiBAQAogCV9fdTE2IEJ5dGVDb3VudDsJLyogYmN0ID0gMCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBDTE9TRV9SU1A7CiAKK3R5cGVkZWYgc3RydWN0IHNtYl9jb21fZmx1c2hfcmVxIHsKKwlzdHJ1Y3Qgc21iX2hkciBoZHI7CS8qIHdjdCA9IDEgKi8KKwlfX3UxNiBGaWxlSUQ7CisJX191MTYgQnl0ZUNvdW50OwkvKiAwICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEZMVVNIX1JFUTsKKwogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV9maW5kY2xvc2VfcmVxIHsKIAlzdHJ1Y3Qgc21iX2hkciBoZHI7IC8qIHdjdCA9IDEgKi8KIAlfX3UxNiBGaWxlSUQ7CkBAIC0xOTI0LDE5ICsxOTMxLDE5IEBACiAjZGVmaW5lIERGU19UWVBFX1JPT1QgMHgwMDAxCiAKIC8qIFJlZmVycmFsIEVudHJ5IEZsYWdzICovCi0jZGVmaW5lIERGU19OQU1FX0xJU1RfUkVGIDB4MDIwMAorI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAgLyogc2V0IGZvciBkb21haW4gb3IgREMgcmVmZXJyYWwgcmVzcG9uc2VzICovCisjZGVmaW5lIERGU19UQVJHRVRfU0VUX0JPVU5EQVJZIDB4MDQwMCAvKiBvbmx5IHZhbGlkIHdpdGggdmVyc2lvbiA0IGRmcyByZXEgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgZGZzX3JlZmVycmFsX2xldmVsXzMgewotCV9fbGUxNiBWZXJzaW9uTnVtYmVyOwordHlwZWRlZiBzdHJ1Y3QgZGZzX3JlZmVycmFsX2xldmVsXzMgeyAvKiB2ZXJzaW9uIDQgaXMgc2FtZSwgKyBvbmUgZmxhZyBiaXQgKi8KKwlfX2xlMTYgVmVyc2lvbk51bWJlcjsgIC8qIG11c3QgYmUgMyBvciA0ICovCiAJX19sZTE2IFNpemU7CiAJX19sZTE2IFNlcnZlclR5cGU7IC8qIDB4MDAwMSA9IHJvb3QgdGFyZ2V0czsgMHgwMDAwID0gbGluayB0YXJnZXRzICovCi0JX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsgLyogMHgwMjAwIGJpdCBzZXQgb25seSBmb3IgZG9tYWluCi0JCQkJICAgICAgb3IgREMgcmVmZXJyYWwgcmVzcG9uY2UgKi8KKwlfX2xlMTYgUmVmZXJyYWxFbnRyeUZsYWdzOwogCV9fbGUzMiBUaW1lVG9MaXZlOwogCV9fbGUxNiBEZnNQYXRoT2Zmc2V0OwogCV9fbGUxNiBEZnNBbHRlcm5hdGVQYXRoT2Zmc2V0OwogCV9fbGUxNiBOZXR3b3JrQWRkcmVzc09mZnNldDsgLyogb2Zmc2V0IG9mIHRoZSBsaW5rIHRhcmdldCAqLwotCV9fbGUxNiBTZXJ2aWNlU2l0ZUd1aWQ7CisJX191OCAgIFNlcnZpY2VTaXRlR3VpZFsxNl07ICAvKiBNQlosIGlnbm9yZWQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgUkVGRVJSQUwzOwogCiB0eXBlZGVmIHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uX2dldF9kZnNfcmVmZXJfcnNwIHsKQEAgLTE5NDYsNDggKzE5NTMsMTUgQEAKIAlfX3U4IFBhZDsKIAlfX2xlMTYgUGF0aENvbnN1bWVkOwogCV9fbGUxNiBOdW1iZXJPZlJlZmVycmFsczsKLQlfX2xlMTYgREZTRmxhZ3M7Ci0JX191MTYgUGFkMjsKKwlfX2xlMzIgREZTRmxhZ3M7CiAJUkVGRVJSQUwzIHJlZmVycmFsc1sxXTsJLyogYXJyYXkgb2YgbGV2ZWwgMyBkZnNfcmVmZXJyYWwgc3RydWN0dXJlcyAqLwogCS8qIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmdzIHBvaW50ZWQgdG8gYnkgdGhlIHJlZmVycmFsIHN0cnVjdHVyZXMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVFJBTlNBQ1RJT04yX0dFVF9ERlNfUkVGRVJfUlNQOwogCiAvKiBERlMgRmxhZ3MgKi8KLSNkZWZpbmUgREZTUkVGX1JFRkVSUkFMX1NFUlZFUiAgMHgwMDAxCi0jZGVmaW5lIERGU1JFRl9TVE9SQUdFX1NFUlZFUiAgIDB4MDAwMgotCi0vKiBJT0NUTCBpbmZvcm1hdGlvbiAqLwotLyoKLSAqIExpc3Qgb2YgaW9jdGwgZnVuY3Rpb24gY29kZXMgdGhhdCBsb29rIHRvIGJlIG9mIGludGVyZXN0IHRvIHJlbW90ZSBjbGllbnRzCi0gKiBsaWtlIHRoaXMgb25lLiAgTmVlZCB0byBkbyBzb21lIGV4cGVyaW1lbnRhdGlvbiB0byBtYWtlIHN1cmUgdGhleSBhbGwgd29yawotICogcmVtb3RlbHkuICBTb21lIG9mIHRoZSBmb2xsb3dpbmcsIHN1Y2ggYXMgdGhlIGVuY3J5cHRpb24vY29tcHJlc3Npb24gb25lcwotICogd291bGQgYmUgaW52b2tlZCBmcm9tIHRvb2xzIHZpYSBhIHNwZWNpYWxpemVkIGhvb2sgaW50byB0aGUgVkZTIHJhdGhlcgotICogdGhhbiB2aWEgdGhlIHN0YW5kYXJkIHZmcyBlbnRyeSBwb2ludHMKLSAqLwotI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8xIDB4MDAwOTAwMDAKLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMiAweDAwMDkwMDA0Ci0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfQkFUQ0hfT1BMT0NLICAgMHgwMDA5MDAwOAotI2RlZmluZSBGU0NUTF9MT0NLX1ZPTFVNRSAgICAgICAgICAgIDB4MDAwOTAwMTgKLSNkZWZpbmUgRlNDVExfVU5MT0NLX1ZPTFVNRSAgICAgICAgICAweDAwMDkwMDFDCi0jZGVmaW5lIEZTQ1RMX0dFVF9DT01QUkVTU0lPTiAgICAgICAgMHgwMDA5MDAzQwotI2RlZmluZSBGU0NUTF9TRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOUMwNDAKLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9GSUxURVJfT1BMT0NLICAweDAwMDkwMDhDCi0jZGVmaW5lIEZTQ1RMX0ZJTEVTWVNfR0VUX1NUQVRJU1RJQ1MgMHgwMDA5MDA5MAotI2RlZmluZSBGU0NUTF9TRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTQKLSNkZWZpbmUgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE4Ci0jZGVmaW5lIEZTQ1RMX0RFTEVURV9SRVBBUlNFX1BPSU5UICAgMHgwMDA5MDBBQwotI2RlZmluZSBGU0NUTF9TRVRfU1BBUlNFICAgICAgICAgICAgIDB4MDAwOTAwQzQKLSNkZWZpbmUgRlNDVExfU0VUX1pFUk9fREFUQSAgICAgICAgICAweDAwMDkwMEM4Ci0jZGVmaW5lIEZTQ1RMX1NFVF9FTkNSWVBUSU9OICAgICAgICAgMHgwMDA5MDBENwotI2RlZmluZSBGU0NUTF9FTkNSWVBUSU9OX0ZTQ1RMX0lPICAgIDB4MDAwOTAwREIKLSNkZWZpbmUgRlNDVExfV1JJVEVfUkFXX0VOQ1JZUFRFRCAgICAweDAwMDkwMERGCi0jZGVmaW5lIEZTQ1RMX1JFQURfUkFXX0VOQ1JZUFRFRCAgICAgMHgwMDA5MDBFMwotI2RlZmluZSBGU0NUTF9TSVNfQ09QWUZJTEUgICAgICAgICAgIDB4MDAwOTAxMDAKLSNkZWZpbmUgRlNDVExfU0lTX0xJTktfRklMRVMgICAgICAgICAweDAwMDlDMTA0Ci0KLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlQgICAweEEwMDAwMDAzCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX0hTTSAgICAgICAgICAgMHhDMDAwMDAwNAotI2RlZmluZSBJT19SRVBBUlNFX1RBR19TSVMgICAgICAgICAgIDB4ODAwMDAwMDcKKyNkZWZpbmUgREZTUkVGX1JFRkVSUkFMX1NFUlZFUiAgMHgwMDAwMDAwMSAvKiBhbGwgdGFyZ2V0cyBhcmUgREZTIHJvb3RzICovCisjZGVmaW5lIERGU1JFRl9TVE9SQUdFX1NFUlZFUiAgIDB4MDAwMDAwMDIgLyogbm8gZnVydGhlciByZWYgcmVxdWVzdHMgbmVlZGVkICovCisjZGVmaW5lIERGU1JFRl9UQVJHRVRfRkFJTEJBQ0sgIDB4MDAwMDAwMDQgLyogb25seSBmb3IgREZTIHJlZmVycmFsIHZlcnNpb24gNCAqLwogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjUwOCw4ICsyNDgyLDYgQEAKIAk2KSBVc2UgbmFub3NlY29uZCB0aW1lc3RhbXBzIHRocm91Z2hvdXQgYWxsIHRpbWUgZmllbGRzIGlmCiAJICAgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZmxhZyBpcyBzZXQKIAk3KSBzZW5kZmlsZSAtIGhhbmRsZSBiYXNlZCBjb3B5Ci0JOCkgRGlyZWN0IGkvbwotCTkpIE1pc2MgZmNudGxzPwogCiAJd2hhdCBhYm91dCBmaXhpbmcgNjQgYml0IGFsaWdubWVudAogCkBAIC0yNjI4LDcgKzI2MDAsNSBAQAogCV9fbGU2NAltb2RlOyAvKiBsaXN0IG9mIGFjdHVhbCBhdHRyaWJ1dGUgYml0cyBvbiB0aGlzIGlub2RlICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEZJTEVfQ0hBVFRSX0lORk87ICAvKiBleHQgYXR0cmlidXRlcwogCQkJCQkJKGNoYXR0ciwgY2hmbGFncykgbGV2ZWwgMHgyMDYgKi8KLQotI2VuZGlmCi0KKyNlbmRpZiAJCQkJLyogUE9TSVggKi8KICNlbmRpZgkJCQkvKiBfQ0lGU1BEVV9IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCAwODNkZmM1Li40MTY3NzE2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTQ0LDYgKzQ0LDkgQEAKIGV4dGVybiBjaGFyICpidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gY2hhciAqY2lmc19idWlsZF9wYXRoX3RvX3Jvb3Qoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CiBleHRlcm4gY2hhciAqYnVpbGRfd2lsZGNhcmRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7CitleHRlcm4gY2hhciAqY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAorCQljb25zdCBjaGFyICpmdWxscGF0aCwgY29uc3Qgc3RydWN0IGRmc19pbmZvM19wYXJhbSAqcmVmLAorCQljaGFyICoqZGV2bmFtZSk7CiAvKiBleHRlcm4gdm9pZCByZW5ld19wYXJlbnRhbF90aW1lc3RhbXBzKHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5KTsqLwogZXh0ZXJuIGludCBTZW5kUmVjZWl2ZShjb25zdCB1bnNpZ25lZCBpbnQgLyogeGlkICovICwgc3RydWN0IGNpZnNTZXNJbmZvICosCiAJCQlzdHJ1Y3Qgc21iX2hkciAqIC8qIGlucHV0ICovICwKQEAgLTkyLDYgKzk1LDkgQEAKIGV4dGVybiBfX2xlNjQgY252cnREb3NDaWZzVG0oX191MTYgZGF0ZSwgX191MTYgdGltZSk7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNudnJ0RG9zVW5peFRtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogCitleHRlcm4gaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKKwkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAorCQkJICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCk7CiBleHRlcm4gdm9pZCBwb3NpeF9maWxsX2luX2lub2RlKHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlLAogCQkJCUZJTEVfVU5JWF9CQVNJQ19JTkZPICpwRGF0YSwgaW50IGlzTmV3SW5vZGUpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqY2lmc19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191NjQgKmludW0pOwpAQCAtMjgxLDYgKzI4Nyw5IEBACiBleHRlcm4gaW50IENJRlNTTUJDbG9zZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgaW50IHNtYl9maWxlX2lkKTsKIAorZXh0ZXJuIGludCBDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CisKIGV4dGVybiBpbnQgQ0lGU1NNQlJlYWQoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBuZXRmaWQsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJCWNvbnN0IF9fdTY0IGxzZWVrLCB1bnNpZ25lZCBpbnQgKm5ieXRlcywgY2hhciAqKmJ1ZiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTM5ZTJmNy4uYmMwOWM5OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTE5MzQsNiArMTkzNCwyNyBAQAogfQogCiBpbnQKK0NJRlNTTUJGbHVzaChjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBpbnQgc21iX2ZpbGVfaWQpCit7CisJaW50IHJjID0gMDsKKwlGTFVTSF9SRVEgKnBTTUIgPSBOVUxMOworCWNGWUkoMSwgKCJJbiBDSUZTU01CRmx1c2giKSk7CisKKwlyYyA9IHNtYWxsX3NtYl9pbml0KFNNQl9DT01fRkxVU0gsIDEsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwU01CLT5GaWxlSUQgPSAoX191MTYpIHNtYl9maWxlX2lkOworCXBTTUItPkJ5dGVDb3VudCA9IDA7CisJcmMgPSBTZW5kUmVjZWl2ZU5vUnNwKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwgMCk7CisJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9mbHVzaGVzKTsKKwlpZiAocmMpCisJCWNFUlJPUigxLCAoIlNlbmQgZXJyb3IgaW4gRmx1c2ggPSAlZCIsIHJjKSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludAogQ0lGU1NNQlJlbmFtZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCSAgICAgIGNvbnN0IGNoYXIgKmZyb21OYW1lLCBjb25zdCBjaGFyICp0b05hbWUsCiAJICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCkBAIC0yMzU2LDggKzIzNzcsMTAgQEAKIAkJCQkgICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQluYW1lX2xlbiAqPSAyOwotCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAwOwkvKiBwYWQgKi8KLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAxXSA9IDB4MDQ7CisKKwkJLyogcHJvdG9jb2wgc3BlY2lmaWVzIEFTQ0lJIGJ1ZmZlciBmb3JtYXQgKDB4MDQpIGZvciB1bmljb2RlICovCisJCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuXSA9IDB4MDQ7CisJCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDAwOyAvKiBwYWQgKi8KIAkJbmFtZV9sZW4yID0KIAkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fbGUxNiAqKSZwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDJdLAogCQkJCSAgICAgdG9OYW1lLCBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGRhMGY0ZmYuLjBkZTNiNTYxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtOTUsNiArOTUsNyBAQAogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIG9ubHkgb24gbG9jYWwgc3lzdGVtLCBub3QgcmVtb3RlICovCiAJYm9vbCBub2Jsb2Nrc25kOjE7CiAJYm9vbCBub2F1dG90dW5lOjE7CisJYm9vbCBub3N0cmljdHN5bmM6MTsgLyogZG8gbm90IGZvcmNlIGV4cGVuc2l2ZSBTTUJmbHVzaCBvbiBldmVyeSBzeW5jICovCiAJdW5zaWduZWQgaW50IHJzaXplOwogCXVuc2lnbmVkIGludCB3c2l6ZTsKIAl1bnNpZ25lZCBpbnQgc29ja29wdDsKQEAgLTEyNzQsNiArMTI3NSwxMCBAQAogCQkJdm9sLT5pbnRyID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiaW50ciIsIDQpID09IDApIHsKIAkJCXZvbC0+aW50ciA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vc3RyaWN0c3luYyIsIDEyKSA9PSAwKSB7CisJCQl2b2wtPm5vc3RyaWN0c3luYyA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInN0cmljdHN5bmMiLCAxMCkgPT0gMCkgeworCQkJdm9sLT5ub3N0cmljdHN5bmMgPSAwOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzZXJ2ZXJpbm8iLCA3KSA9PSAwKSB7CiAJCQl2b2wtPnNlcnZlcl9pbm8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3NlcnZlcmlubyIsIDkpID09IDApIHsKQEAgLTIxNjAsNiArMjE2NSw4IEBACiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfVU5YX0VNVUw7CiAJaWYgKHB2b2x1bWVfaW5mby0+bm9icmwpCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9fQlJMOworCWlmIChwdm9sdW1lX2luZm8tPm5vc3RyaWN0c3luYykKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9OT1NTWU5DOwogCWlmIChwdm9sdW1lX2luZm8tPm1hbmRfbG9jaykKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9OT1BPU0lYQlJMOwogCWlmIChwdm9sdW1lX2luZm8tPmNpZnNfYWNsKQpAQCAtMzY2Nyw3ICszNjc0LDcgQEAKIAkJCSAgICBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKIAkJCQlrZnJlZSh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKTsKIAkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtID0KLQkJCQkgICAga3phbGxvYyhsZW5ndGggKyAyLCBHRlBfS0VSTkVMKTsKKwkJCQkgICAga3phbGxvYygyKihsZW5ndGggKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pCiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZSgKIAkJCQkJCXRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0sCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA4OWZiNzI4Li4yZjM1Y2NjZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi1zdGF0aWMgaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKK2ludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCiAJCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKIAkJICAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpCiB7CkBAIC0xODcsNyArMTg3LDkgQEAKIAlpZiAoIXBpbm9kZSkKIAkJZ290byBwb3NpeF9vcGVuX3JldDsgLyogY2FsbGVyIGRvZXMgbm90IG5lZWQgaW5mbyAqLwogCi0JKnBpbm9kZSA9IGNpZnNfbmV3X2lub2RlKHNiLCAmcHJlc3BfZGF0YS0+VW5pcXVlSWQpOworCWlmICgqcGlub2RlID09IE5VTEwpCisJCSpwaW5vZGUgPSBjaWZzX25ld19pbm9kZShzYiwgJnByZXNwX2RhdGEtPlVuaXF1ZUlkKTsKKwkvKiBlbHNlIGFuIGlub2RlIHdhcyBwYXNzZWQgaW4uIFVwZGF0ZSBpdHMgaW5mbywgZG9uJ3QgY3JlYXRlIG9uZSAqLwogCiAJLyogV2UgZG8gbm90IG5lZWQgdG8gY2xvc2UgdGhlIGZpbGUgaWYgbmV3X2lub2RlIGZhaWxzIHNpbmNlCiAJICAgdGhlIGNhbGxlciB3aWxsIHJldHJ5IHFwYXRoaW5mbyBhcyBsb25nIGFzIGlub2RlIGlzIG51bGwgKi8KQEAgLTY5OSw3ICs3MDEsNyBAQAogCXJldHVybiByYzsKIH0gICAgICovCiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2RlbnRyeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBjaWZzX2RfcmV2YWxpZGF0ZSwKIC8qIGRfZGVsZXRlOiAgICAgICBjaWZzX2RfZGVsZXRlLCAgICAgICovIC8qIG5vdCBuZWVkZWQgZXhjZXB0IGZvciBkZWJ1Z2dpbmcgKi8KIH07CkBAIC03MzcsNyArNzM5LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNpZnNfY2lfZGVudHJ5X29wcyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2NpX2RlbnRyeV9vcHMgPSB7CiAJLmRfcmV2YWxpZGF0ZSA9IGNpZnNfZF9yZXZhbGlkYXRlLAogCS5kX2hhc2ggPSBjaWZzX2NpX2hhc2gsCiAJLmRfY29tcGFyZSA9IGNpZnNfY2lfY29tcGFyZSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggMTJiYjY1Ni4uODE3NDdhYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTc4LDggKzc4LDM2IEBACiAJcmV0dXJuIChSRUFEX0NPTlRST0wgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMgfCBGSUxFX1JFQURfQVRUUklCVVRFUyB8CiAJCUZJTEVfV1JJVEVfRUEgfCBGSUxFX0FQUEVORF9EQVRBIHwgRklMRV9XUklURV9EQVRBIHwKIAkJRklMRV9SRUFEX0RBVEEpOworfQogCitzdGF0aWMgaW5saW5lIGZtb2RlX3QgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlmbW9kZV90IHBvc2l4X2ZsYWdzID0gMDsKIAorCWlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQorCQlwb3NpeF9mbGFncyA9IEZNT0RFX1JFQUQ7CisJZWxzZSBpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9XUklURTsKKwllbHNlIGlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRXUikgeworCQkvKiBHRU5FUklDX0FMTCBpcyB0b28gbXVjaCBwZXJtaXNzaW9uIHRvIHJlcXVlc3QKKwkJICAgY2FuIGNhdXNlIHVubmVjZXNzYXJ5IGFjY2VzcyBkZW5pZWQgb24gY3JlYXRlICovCisJCS8qIHJldHVybiBHRU5FUklDX0FMTDsgKi8KKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEU7CisJfQorCS8qIGNhbiBub3QgbWFwIE9fQ1JFQVQgb3IgT19FWENMIG9yIE9fVFJVTkMgZmxhZ3Mgd2hlbgorCSAgIHJlb3BlbmluZyBhIGZpbGUuICBUaGV5IGhhZCB0aGVpciBlZmZlY3Qgb24gdGhlIG9yaWdpbmFsIG9wZW4gKi8KKwlpZiAoZmxhZ3MgJiBPX0FQUEVORCkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19BUFBFTkQ7CisJaWYgKGZsYWdzICYgT19TWU5DKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX1NZTkM7CisJaWYgKGZsYWdzICYgT19ESVJFQ1RPUlkpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fRElSRUNUT1JZOworCWlmIChmbGFncyAmIE9fTk9GT0xMT1cpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fTk9GT0xMT1c7CisJaWYgKGZsYWdzICYgT19ESVJFQ1QpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fRElSRUNUOworCisJcmV0dXJuIHBvc2l4X2ZsYWdzOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX2dldF9kaXNwb3NpdGlvbih1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC05Nyw2ICsxMjUsODAgQEAKIH0KIAogLyogYWxsIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgaW4gY2FsbGVyICovCitzdGF0aWMgaW5saW5lIGludCBjaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGUsCisJCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsIGludCBvcGxvY2ssIHUxNiBuZXRmaWQpCit7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOworLyoJc3RydWN0IHRpbWVzcGVjIHRlbXA7ICovICAgLyogQkIgUkVNT1ZFTUUgQkIgKi8KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7CisJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZjaWZzX3NiLT50Y29uLT5vcGVuRmlsZUxpc3QpOworCisJcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAocENpZnNJbm9kZSA9PSBOVUxMKSB7CisJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHdhbnQgaGFuZGxlcyB3ZSBjYW4gdXNlIHRvIHJlYWQgd2l0aCBmaXJzdAorCSAgIGluIHRoZSBsaXN0IHNvIHdlIGRvIG5vdCBoYXZlIHRvIHdhbGsgdGhlCisJICAgbGlzdCB0byBzZWFyY2ggZm9yIG9uZSBpbiB3cml0ZV9iZWdpbiAqLworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKKwkJCSAgICAgICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAorCQkJICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOworCX0KKworCWlmIChwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKKwkJLyogd2UgaGF2ZSB0aGUgaW5vZGUgb3BlbiBzb21ld2hlcmUgZWxzZQorCQkgICBubyBuZWVkIHRvIGRpc2NhcmQgY2FjaGUgZGF0YSAqLworCQlnb3RvIHBzeF9jbGllbnRfY2FuX2NhY2hlOworCX0KKworCS8qIEJCIEZJWE1FIG5lZWQgdG8gZml4IHRoaXMgY2hlY2sgdG8gbW92ZSBpdCBlYXJsaWVyIGludG8gcG9zaXhfb3BlbgorCSAgIEJCICBmSVggZm9sbG93aW5nIHNlY3Rpb24gQkIgRklYTUUgKi8KKworCS8qIGlmIG5vdCBvcGxvY2tlZCwgaW52YWxpZGF0ZSBpbm9kZSBwYWdlcyBpZiBtdGltZSBvciBmaWxlCisJICAgc2l6ZSBjaGFuZ2VkICovCisvKgl0ZW1wID0gY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUoYnVmLT5MYXN0V3JpdGVUaW1lKSk7CisJaWYgKHRpbWVzcGVjX2VxdWFsKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX210aW1lLCAmdGVtcCkgJiYKKwkJCSAgIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgPT0KKwkJCSAgICAobG9mZl90KWxlNjRfdG9fY3B1KGJ1Zi0+RW5kT2ZGaWxlKSkpIHsKKwkJY0ZZSSgxLCAoImlub2RlIHVuY2hhbmdlZCBvbiBzZXJ2ZXIiKSk7CisJfSBlbHNlIHsKKwkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZykgeworCQkJcmMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQlDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IHJjOworCQl9CisJCWNGWUkoMSwgKCJpbnZhbGlkYXRpbmcgcmVtb3RlIGlub2RlIHNpbmNlIG9wZW4gZGV0ZWN0ZWQgaXQgIgorCQkJICJjaGFuZ2VkIikpOworCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwl9ICovCisKK3BzeF9jbGllbnRfY2FuX2NhY2hlOgorCWlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7CisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gdHJ1ZTsKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKKwkJY0ZZSSgxLCAoIkV4Y2x1c2l2ZSBPcGxvY2sgZ3JhbnRlZCBvbiBpbm9kZSAlcCIsCisJCQkgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOworCX0gZWxzZSBpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX1JFQUQpCisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CisKKwkvKiB3aWxsIGhhdmUgdG8gY2hhbmdlIHRoZSB1bmxvY2sgaWYgd2UgcmVlbmFibGUgdGhlCisJICAgZmlsZW1hcF9mZGF0YXdyaXRlICh3aGljaCBkb2VzIG5vdCBzZWVtIG5lY2Vzc2FyeSAqLworCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLwogc3RhdGljIGlubGluZSBpbnQgY2lmc19vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwgc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uLCBpbnQgKm9wbG9jaywgRklMRV9BTExfSU5GTyAqYnVmLApAQCAtMTY3LDcgKzI2OSw3IEBACiAJaW50IHJjID0gLUVBQ0NFUzsKIAlpbnQgeGlkLCBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CkBAIC0xODAsNyArMjgyLDcgQEAKIAl4aWQgPSBHZXRYaWQoKTsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKLQlwVGNvbiA9IGNpZnNfc2ItPnRjb247CisJdGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fQ1JFQVQpIHsKIAkJLyogc2VhcmNoIGlub2RlIGZvciB0aGlzIGZpbGUgYW5kIGZpbGwgaW4gZmlsZS0+cHJpdmF0ZV9kYXRhICovCkBAIC0yMjAsNiArMzIyLDQ1IEBACiAKIAljRllJKDEsICgiaW5vZGUgPSAweCVwIGZpbGUgZmxhZ3MgYXJlIDB4JXggZm9yICVzIiwKIAkJIGlub2RlLCBmaWxlLT5mX2ZsYWdzLCBmdWxsX3BhdGgpKTsKKworCWlmIChvcGxvY2tFbmFibGVkKQorCQlvcGxvY2sgPSBSRVFfT1BMT0NLOworCWVsc2UKKwkJb3Bsb2NrID0gMDsKKworCWlmICghdGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gJiYgdGNvbi0+dW5peF9leHQgJiYKKwkgICAgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJICAgIChDSUZTX1VOSVhfUE9TSVhfUEFUSF9PUFNfQ0FQICYKKwkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGlub2RlLT5pX3NiLAorCQkJCSAgICAgY2lmc19zYi0+bW50X2ZpbGVfbW9kZSAvKiBpZ25vcmVkICovLAorCQkJCSAgICAgb2ZsYWdzLCAmb3Bsb2NrLCAmbmV0ZmlkLCB4aWQpOworCQlpZiAocmMgPT0gMCkgeworCQkJY0ZZSSgxLCAoInBvc2l4IG9wZW4gc3VjY2VlZGVkIikpOworCQkJLyogbm8gbmVlZCBmb3Igc3BlY2lhbCBjYXNlIGhhbmRsaW5nIG9mIHNldHRpbmcgbW9kZQorCQkJICAgb24gcmVhZCBvbmx5IGZpbGVzIG5lZWRlZCBoZXJlICovCisKKwkJCWNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCisJCQkJCQkgICAgIHBDaWZzRmlsZSwgb3Bsb2NrLCBuZXRmaWQpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoKHJjID09IC1FSU5WQUwpIHx8IChyYyA9PSAtRU9QTk9UU1VQUCkpIHsKKwkJCWlmICh0Y29uLT5zZXMtPnNlcnZlck5PUykKKwkJCQljRVJST1IoMSwgKCJzZXJ2ZXIgJXMgb2YgdHlwZSAlcyByZXR1cm5lZCIKKwkJCQkJICAgIiB1bmV4cGVjdGVkIGVycm9yIG9uIFNNQiBwb3NpeCBvcGVuIgorCQkJCQkgICAiLCBkaXNhYmxpbmcgcG9zaXggb3BlbiBzdXBwb3J0LiIKKwkJCQkJICAgIiBDaGVjayBpZiBzZXJ2ZXIgdXBkYXRlIGF2YWlsYWJsZS4iLAorCQkJCQkgICB0Y29uLT5zZXMtPnNlcnZlck5hbWUsCisJCQkJCSAgIHRjb24tPnNlcy0+c2VydmVyTk9TKSk7CisJCQl0Y29uLT5icm9rZW5fcG9zaXhfb3BlbiA9IHRydWU7CisJCX0gZWxzZSBpZiAoKHJjICE9IC1FSU8pICYmIChyYyAhPSAtRVJFTU9URSkgJiYKKwkJCSAocmMgIT0gLUVPUE5PVFNVUFApKSAvKiBwYXRoIG5vdCBmb3VuZCBvciBuZXQgZXJyICovCisJCQlnb3RvIG91dDsKKwkJLyogZWxzZSBmYWxsdGhyb3VnaCB0byByZXRyeSBvcGVuIHRoZSBvbGQgd2F5IG9uIG5ldHdvcmsgaS9vCisJCSAgIG9yIERGUyBlcnJvcnMgKi8KKwl9CisKIAlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDgsMTEgKzM4OSw2IEBACiAKIAlkaXNwb3NpdGlvbiA9IGNpZnNfZ2V0X2Rpc3Bvc2l0aW9uKGZpbGUtPmZfZmxhZ3MpOwogCi0JaWYgKG9wbG9ja0VuYWJsZWQpCi0JCW9wbG9jayA9IFJFUV9PUExPQ0s7Ci0JZWxzZQotCQlvcGxvY2sgPSAwOwotCiAJLyogQkIgcGFzcyBPX1NZTkMgZmxhZyB0aHJvdWdoIG9uIGZpbGUgYXR0cmlidXRlcyAuLiBCQiAqLwogCiAJLyogQWxzbyByZWZyZXNoIGlub2RlIGJ5IHBhc3NpbmcgaW4gZmlsZV9pbmZvIGJ1ZiByZXR1cm5lZCBieSBTTUJPcGVuCkBAIC0yNjksNyArNDA1LDcgQEAKIAl9CiAKIAlpZiAoY2lmc19zYi0+dGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfTlRfU01CUykKLQkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAorCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKIAkJCSBkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgYnVmLAogCQkJIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MKIAkJCQkgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0yNzgsNyArNDE0LDcgQEAKIAogCWlmIChyYyA9PSAtRUlPKSB7CiAJCS8qIE9sZCBzZXJ2ZXIsIHRyeSBsZWdhY3kgc3R5bGUgT3BlblggKi8KLQkJcmMgPSBTTUJMZWdhY3lPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCisJCXJjID0gU01CTGVnYWN5T3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCiAJCQlkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgYnVmLAogCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncwogCQkJCSYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMjk1LDEyICs0MzEsMTIgQEAKIAl9CiAJcENpZnNGaWxlID0gY2lmc19pbml0X3ByaXZhdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCBpbm9kZSwgZmlsZSwgbmV0ZmlkKTsKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnBUY29uLT5vcGVuRmlsZUxpc3QpOworCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKIAogCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKHBDaWZzSW5vZGUpIHsKIAkJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAotCQkJCQkgICAgcENpZnNGaWxlLCBwVGNvbiwKKwkJCQkJICAgIHBDaWZzRmlsZSwgdGNvbiwKIAkJCQkJICAgICZvcGxvY2ssIGJ1ZiwgZnVsbF9wYXRoLCB4aWQpOwogCX0gZWxzZSB7CiAJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CkBAIC0zMDksNyArNDQ1LDcgQEAKIAlpZiAob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSB7CiAJCS8qIHRpbWUgdG8gc2V0IG1vZGUgd2hpY2ggd2UgY2FuIG5vdCBzZXQgZWFybGllciBkdWUgdG8KIAkJICAgcHJvYmxlbXMgY3JlYXRpbmcgbmV3IHJlYWQtb25seSBmaWxlcyAqLwotCQlpZiAocFRjb24tPnVuaXhfZXh0KSB7CisJCWlmICh0Y29uLT51bml4X2V4dCkgewogCQkJc3RydWN0IGNpZnNfdW5peF9zZXRfaW5mb19hcmdzIGFyZ3MgPSB7CiAJCQkJLm1vZGUJPSBpbm9kZS0+aV9tb2RlLAogCQkJCS51aWQJPSBOT19DSEFOR0VfNjQsCkBAIC0zMTksNyArNDU1LDcgQEAKIAkJCQkubXRpbWUJPSBOT19DSEFOR0VfNjQsCiAJCQkJLmRldmljZQk9IDAsCiAJCQl9OwotCQkJQ0lGU1NNQlVuaXhTZXRJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgJmFyZ3MsCisJCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZhcmdzLAogCQkJCQkgICAgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJCQkgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMzQ5LDcgKzQ4NSw3IEBACiAJaW50IHJjID0gLUVBQ0NFUzsKIAlpbnQgeGlkLCBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtMzg3LDcgKzUyMyw3IEBACiAJfQogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYi0+dGNvbjsKKwl0Y29uID0gY2lmc19zYi0+dGNvbjsKIAogLyogY2FuIG5vdCBncmFiIHJlbmFtZSBzZW0gaGVyZSBiZWNhdXNlIHZhcmlvdXMgb3BzLCBpbmNsdWRpbmcKICAgIHRob3NlIHRoYXQgYWxyZWFkeSBoYXZlIHRoZSByZW5hbWUgc2VtIGNhbiBlbmQgdXAgY2F1c2luZyB3cml0ZXBhZ2UKQEAgLTQwNCwyMCArNTQwLDM3IEBACiAKIAljRllJKDEsICgiaW5vZGUgPSAweCVwIGZpbGUgZmxhZ3MgMHgleCBmb3IgJXMiLAogCQkgaW5vZGUsIGZpbGUtPmZfZmxhZ3MsIGZ1bGxfcGF0aCkpOwotCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAKIAlpZiAob3Bsb2NrRW5hYmxlZCkKIAkJb3Bsb2NrID0gUkVRX09QTE9DSzsKIAllbHNlCiAJCW9wbG9jayA9IDA7CiAKKwlpZiAodGNvbi0+dW5peF9leHQgJiYgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJICAgIChDSUZTX1VOSVhfUE9TSVhfUEFUSF9PUFNfQ0FQICYKKwkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCBOVUxMLCBpbm9kZS0+aV9zYiwKKwkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKKwkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWNGWUkoMSwgKCJwb3NpeCByZW9wZW4gc3VjY2VlZGVkIikpOworCQkJZ290byByZW9wZW5fc3VjY2VzczsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCB0byByZXRyeSBvcGVuIHRoZSBvbGQgd2F5IG9uIGVycm9ycywgZXNwZWNpYWxseQorCQkgICBpbiB0aGUgcmVjb25uZWN0IHBhdGggaXQgaXMgaW1wb3J0YW50IHRvIHJldHJ5IGhhcmQgKi8KKwl9CisKKwlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCiAJLyogQ2FuIG5vdCByZWZyZXNoIGlub2RlIGJ5IHBhc3NpbmcgaW4gZmlsZV9pbmZvIGJ1ZiB0byBiZSByZXR1cm5lZAogCSAgIGJ5IFNNQk9wZW4gYW5kIHRoZW4gY2FsbGluZyBnZXRfaW5vZGVfaW5mbyB3aXRoIHJldHVybmVkIGJ1ZgogCSAgIHNpbmNlIGZpbGUgbWlnaHQgaGF2ZSB3cml0ZSBiZWhpbmQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGZsdXNoZWQKIAkgICBhbmQgc2VydmVyIHZlcnNpb24gb2YgZmlsZSBzaXplIGNhbiBiZSBzdGFsZS4gSWYgd2Uga25ldyBmb3Igc3VyZQogCSAgIHRoYXQgaW5vZGUgd2FzIG5vdCBkaXJ0eSBsb2NhbGx5IHdlIGNvdWxkIGRvIHRoaXMgKi8KIAotCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKKwlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKIAkJCSBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKIAkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC00MjYsNiArNTc5LDcgQEAKIAkJY0ZZSSgxLCAoImNpZnNfb3BlbiByZXR1cm5lZCAweCV4IiwgcmMpKTsKIAkJY0ZZSSgxLCAoIm9wbG9jazogJWQiLCBvcGxvY2spKTsKIAl9IGVsc2UgeworcmVvcGVuX3N1Y2Nlc3M6CiAJCXBDaWZzRmlsZS0+bmV0ZmlkID0gbmV0ZmlkOwogCQlwQ2lmc0ZpbGUtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKIAkJdXAoJnBDaWZzRmlsZS0+Zmhfc2VtKTsKQEAgLTQzOSw3ICs1OTMsNyBAQAogCQkJICAgZ28gdG8gc2VydmVyIHRvIGdldCBpbm9kZSBpbmZvICovCiAJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBmYWxzZTsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBmYWxzZTsKLQkJCQlpZiAocFRjb24tPnVuaXhfZXh0KQorCQkJCWlmICh0Y29uLT51bml4X2V4dCkKIAkJCQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmlub2RlLAogCQkJCQkJZnVsbF9wYXRoLCBpbm9kZS0+aV9zYiwgeGlkKTsKIAkJCQllbHNlCkBAIC00NjcsNyArNjIxLDYgQEAKIAkJCWNpZnNfcmVsb2NrX2ZpbGUocENpZnNGaWxlKTsKIAkJfQogCX0KLQogCWtmcmVlKGZ1bGxfcGF0aCk7CiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKQEAgLTE1MjMsNiArMTY3Niw5IEBACiB7CiAJaW50IHhpZDsKIAlpbnQgcmMgPSAwOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqc21iZmlsZSA9CisJCShzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC0xNTM0LDcgKzE2OTAsMTIgQEAKIAlpZiAocmMgPT0gMCkgewogCQlyYyA9IENJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYzsKIAkJQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gMDsKKwkJdGNvbiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpLT50Y29uOworCQlpZiAoIXJjICYmIHRjb24gJiYgc21iZmlsZSAmJgorCQkgICAhKENJRlNfU0IoaW5vZGUtPmlfc2IpLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9TU1lOQykpCisJCQlyYyA9IENJRlNTTUJGbHVzaCh4aWQsIHRjb24sIHNtYmZpbGUtPm5ldGZpZCk7CiAJfQorCiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA0NjkwYTM2Li5hODc5N2NjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC03NjMsNiArNzYzLDkgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAJRklMRV9CQVNJQ19JTkZPCWluZm9fYnVmOwogCisJaWYgKGF0dHJzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfQVRJTUUpIHsKIAkJc2V0X3RpbWUgPSB0cnVlOwogCQlpbmZvX2J1Zi5MYXN0QWNjZXNzVGltZSA9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmZzY3RsLmggYi9mcy9jaWZzL3NtYmZzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NmI4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvc21iZnNjdGwuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogICBmcy9jaWZzL3NtYmZzY3RsLmg6IFNNQiwgQ0lGUywgU01CMiBGU0NUTCBkZWZpbml0aW9ucworICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA5CisgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiBJT0NUTCBpbmZvcm1hdGlvbiAqLworLyoKKyAqIExpc3Qgb2YgaW9jdGwvZnNjdGwgZnVuY3Rpb24gY29kZXMgdGhhdCBhcmUgb3IgY291bGQgYmUgdXNlZnVsIGluIHRoZQorICogZnV0dXJlIHRvIHJlbW90ZSBjbGllbnRzIGxpa2UgY2lmcyBvciBTTUIyIGNsaWVudC4gIFRoZXJlIGlzIHByb2JhYmx5CisgKiBhIHNsaWdodGx5IGxhcmdlciBzZXQgb2YgZnNjdGxzIHRoYXQgTlRGUyBsb2NhbCBmaWxlc3lzdGVtIGNvdWxkIGhhbmRsZSwKKyAqIGluY2x1ZGluZyB0aGUgc2V2ZW4gYmVsb3cgdGhhdCB3ZSBkbyBub3QgaGF2ZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgZm9yLgorICogRXZlbiB3aXRoIHByb3RvY29sIGRlZmluaXRpb25zIGZvciBtb3N0IG9mIHRoZXNlIG5vdyBhdmFpbGFibGUsIHdlIHN0aWxsCisgKiBuZWVkIHRvIGRvIHNvbWUgZXhwZXJpbWVudGF0aW9uIHRvIGlkZW50aWZ5IHdoaWNoIGFyZSBwcmFjdGljYWwgdG8gZG8KKyAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKKyAqIGNvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKKyAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCisgKi8KKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAorI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKKyNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4CisjZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQworI2RlZmluZSBGU0NUTF9JU19QQVRITkFNRV9WQUxJRCAgICAgIDB4MDAwOTAwMkMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOUMwNDAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9GQVRfQlBCICAgICAgICAgIDB4MDAwOTAwNTggLyogQkIgYWRkIHN0cnVjdCAqLworLyogVmVyaWZ5IHRoZSBuZXh0IEZTQ1RMIG51bWJlciwgd2UgaGFkIGl0IGFzIDB4MDAwOTAwOTAgYmVmb3JlICovCisjZGVmaW5lIEZTQ1RMX0ZJTEVTWVNURU1fR0VUX1NUQVRTICAgMHgwMDA5MDA2MCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9OVEZTX1ZPTFVNRV9EQVRBICAgMHgwMDA5MDA2NCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9SRVRSSUVWQUxfUE9JTlRFUlMgMHgwMDA5MDA3MyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0lTX1ZPTFVNRV9ESVJUWSAgICAgICAgMHgwMDA5MDA3OCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0FMTE9XX0VYVEVOREVEX0RBU0RfSU8gMHgwMDA5MDA4MyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QworI2RlZmluZSBGU0NUTF9GSU5EX0ZJTEVTX0JZX1NJRCAgICAgIDB4MDAwOTAwOEYgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfT0JKRUNUX0lEICAgICAgICAgIDB4MDAwOTAwOTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfT0JKRUNUX0lEICAgICAgICAgIDB4MDAwOTAwOUMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9ERUxFVEVfT0JKRUNUX0lEICAgICAgIDB4MDAwOTAwQTAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfT0JKRUNUX0lEX0VYVEVOREVEIDB4MDAwOTAwQkMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9DUkVBVEVfT1JfR0VUX09CSkVDVF9JRCAweDAwMDkwMEMwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fREFUQSAgICAgICAgICAweDAwMDkwMEM4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0VOQ1JZUFRJT04gICAgICAgICAweDAwMDkwMEQ3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfV1JJVEVfUkFXX0VOQ1JZUFRFRCAgICAweDAwMDkwMERGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVBRF9SQVdfRU5DUllQVEVEICAgICAweDAwMDkwMEUzIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVBRF9GSUxFX1VTTl9EQVRBICAgICAweDAwMDkwMEVCIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfV1JJVEVfVVNOX0NMT1NFX1JFQ09SRCAweDAwMDkwMEVGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVDQUxMX0ZJTEUgICAgICAgICAgICAweDAwMDkwMTE3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfU1BBUklOR19JTkZPICAgICAweDAwMDkwMTM4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fT05fREVBTExPQyAgICAweDAwMDkwMTk0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1NIT1JUX05BTUVfQkVIQVZJT1IgMHgwMDA5MDFCNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX0FMTE9DQVRFRF9SQU5HRVMgMHgwMDA5NDBDRiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9ERUZFQ1RfTUFOQUdFTUVOVCAgMHgwMDA5ODEzNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAorI2RlZmluZSBGU0NUTF9QSVBFX1BFRUsgICAgICAgICAgICAgIDB4MDAxMTQwMEMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9QSVBFX1RSQU5TQ0VJVkUgICAgICAgIDB4MDAxMUMwMTcgLyogQkIgYWRkIHN0cnVjdCAqLworLyogc3RyYW5nZSB0aGF0IHRoZSBudW1iZXIgZm9yIHRoaXMgb3AgaXMgbm90IHNlcXVlbnRpYWwgd2l0aCBwcmV2aW91cyBvcCAqLworI2RlZmluZSBGU0NUTF9QSVBFX1dBSVQgICAgICAgICAgICAgIDB4MDAxMTAwMTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9MTVJfR0VUX0xJTktfVFJBQ0tfSU5GIDB4MDAxNDAwRTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9MTVJfU0VUX0xJTktfVFJBQ0tfSU5GIDB4MDAxNDAwRUMgLyogQkIgYWRkIHN0cnVjdCAqLworCisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMworI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CmRpZmYgLS1naXQgYS9mcy9jb2RhL2Rpci5jIGIvZnMvY29kYS9kaXIuYwppbmRleCA3NWIxZmE5Li40YmI5ZDBhIDEwMDY0NAotLS0gYS9mcy9jb2RhL2Rpci5jCisrKyBiL2ZzL2NvZGEvZGlyLmMKQEAgLTU5LDcgKzU5LDcgQEAKIH0KICNkZWZpbmUgQ09EQV9FSU9fRVJST1IgKCh2b2lkICopIChjb2RhX3JldHVybl9FSU8pKQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNvZGFfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb2RhX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gY29kYV9kZW50cnlfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBjb2RhX2RlbnRyeV9kZWxldGUsCmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGQwMTQ1Y2EuLjVlMzc0YWEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0zNzgsNiArMzc4LDM0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKgorICogVGhpcyBpcyBhIGNvcHkgb2Ygc3lzX3VzdGF0LCBqdXN0IGRlYWxpbmcgd2l0aCBhIHN0cnVjdHVyZSBsYXlvdXQuCisgKiBHaXZlbiBob3cgc2ltcGxlIHRoaXMgc3lzY2FsbCBpcyB0aGF0IGFwcG9yYWNoIGlzIG1vcmUgbWFpbnRhaW5hYmxlCisgKiB0aGFuIHRoZSB2YXJpb3VzIGNvbnZlcnNpb24gaGFja3MuCisgKi8KK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3VzdGF0KHVuc2lnbmVkIGRldiwgc3RydWN0IGNvbXBhdF91c3RhdCBfX3VzZXIgKnUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwlzdHJ1Y3QgY29tcGF0X3VzdGF0IHRtcDsKKwlzdHJ1Y3Qga3N0YXRmcyBzYnVmOworCWludCBlcnI7CisKKwlzYiA9IHVzZXJfZ2V0X3N1cGVyKG5ld19kZWNvZGVfZGV2KGRldikpOworCWlmICghc2IpCisJCXJldHVybiAtRUlOVkFMOworCWVyciA9IHZmc19zdGF0ZnMoc2ItPnNfcm9vdCwgJnNidWYpOworCWRyb3Bfc3VwZXIoc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfdXN0YXQpKTsKKwl0bXAuZl90ZnJlZSA9IHNidWYuZl9iZnJlZTsKKwl0bXAuZl90aW5vZGUgPSBzYnVmLmZfZmZyZWU7CisJaWYgKGNvcHlfdG9fdXNlcih1LCAmdG1wLCBzaXplb2Yoc3RydWN0IGNvbXBhdF91c3RhdCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnZXRfY29tcGF0X2Zsb2NrKHN0cnVjdCBmbG9jayAqa2ZsLCBzdHJ1Y3QgY29tcGF0X2Zsb2NrIF9fdXNlciAqdWZsKQogewogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1ZmwsIHNpemVvZigqdWZsKSkgfHwKQEAgLTE0MDIsNiArMTQzMCw3IEBACiAJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDE7CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKQEAgLTE0NTQsNiArMTQ4Myw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWFjY3RfdXBkYXRlX2ludGVncmFscyhjdXJyZW50KTsKIAlmcmVlX2Jwcm0oYnBybSk7CkBAIC0xNDcwLDYgKzE1MDAsNyBAQAogCX0KIAogb3V0X3VubG9jazoKKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQ1ZTU5ZDMuLmZmNzg2NjggMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC01MjIsNiArNTIyLDExIEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgdWlmcjMyLCBzaXplb2YoKnVpZnIzMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmci5pZnJfZGF0YSA9IGNvbXBhdF9wdHIodWlmcjMyLT5pZnJfaWZydS5pZnJ1X2RhdGEpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgdWlmcjMyLCBzaXplb2YoKnVpZnIzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xOTkzLDYgKzE5OTgsOCBAQAogQ09NUEFUSUJMRV9JT0NUTChUVU5HRVRGRUFUVVJFUykKIENPTVBBVElCTEVfSU9DVEwoVFVOU0VUT0ZGTE9BRCkKIENPTVBBVElCTEVfSU9DVEwoVFVOU0VUVFhGSUxURVIpCitDT01QQVRJQkxFX0lPQ1RMKFRVTkdFVFNOREJVRikKK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUU05EQlVGKQogLyogQmlnIFYgKi8KIENPTVBBVElCTEVfSU9DVEwoVlRfU0VUTU9ERSkKIENPTVBBVElCTEVfSU9DVEwoVlRfR0VUTU9ERSkKQEAgLTI1NjYsNiArMjU3Myw3IEBACiBIQU5ETEVfSU9DVEwoU0lPQ0dJRkFERFIsIGRldl9pZnNpb2MpCiBIQU5ETEVfSU9DVEwoU0lPQ1NJRkFERFIsIGRldl9pZnNpb2MpCiBIQU5ETEVfSU9DVEwoU0lPQ1NJRkhXQlJPQURDQVNULCBkZXZfaWZzaW9jKQorSEFORExFX0lPQ1RMKFNJT0NTSFdUU1RBTVAsIGRldl9pZnNpb2MpCiAKIC8qIGlvY3RscyB1c2VkIGJ5IGFwcGxldGFsayBkZHAuYyAqLwogSEFORExFX0lPQ1RMKFNJT0NBVEFMS0RJRkFERFIsIGRldl9pZnNpb2MpCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDhlOTMzNDEuLjA1MzczZGIgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC03Miw3ICs3Miw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY29uZmlnZnNfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY29uZmlnZnNfZGVudHJ5X29wcyA9IHsKIAkuZF9pcHV0CQk9IGNvbmZpZ2ZzX2RfaXB1dCwKIAkvKiBzaW1wbGVfZGVsZXRlX2RlbnRyeSgpIGlzbid0IGV4cG9ydGVkICovCiAJLmRfZGVsZXRlCT0gY29uZmlnZnNfZF9kZWxldGUsCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDA3ZTJkNGEuLjkwYmJkN2UgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xMjQ3LDE1ICsxMjQ3LDE4IEBACiAJc3RydWN0IGRlbnRyeSAqZm91bmQ7CiAJc3RydWN0IGRlbnRyeSAqbmV3OwogCi0JLyogRG9lcyBhIGRlbnRyeSBtYXRjaGluZyB0aGUgbmFtZSBleGlzdCBhbHJlYWR5PyAqLworCS8qCisJICogRmlyc3QgY2hlY2sgaWYgYSBkZW50cnkgbWF0Y2hpbmcgdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMsCisJICogaWYgbm90IGdvIGFoZWFkIGFuZCBjcmVhdGUgaXQgbm93LgorCSAqLwogCWZvdW5kID0gZF9oYXNoX2FuZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCwgbmFtZSk7Ci0JLyogSWYgbm90LCBjcmVhdGUgaXQgbm93IGFuZCByZXR1cm4gKi8KIAlpZiAoIWZvdW5kKSB7CiAJCW5ldyA9IGRfYWxsb2MoZGVudHJ5LT5kX3BhcmVudCwgbmFtZSk7CiAJCWlmICghbmV3KSB7CiAJCQllcnJvciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KKwogCQlmb3VuZCA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBuZXcpOwogCQlpZiAoZm91bmQpIHsKIAkJCWRwdXQobmV3KTsKQEAgLTEyNjMsNjEgKzEyNjYsNDYgQEAKIAkJfQogCQlyZXR1cm4gbmV3OwogCX0KLQkvKiBNYXRjaGluZyBkZW50cnkgZXhpc3RzLCBjaGVjayBpZiBpdCBpcyBuZWdhdGl2ZS4gKi8KKworCS8qCisJICogSWYgYSBtYXRjaGluZyBkZW50cnkgZXhpc3RzLCBhbmQgaXQncyBub3QgbmVnYXRpdmUgdXNlIGl0LgorCSAqCisJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgdG8gYmFsYW5jZSB0aGUgaWdldCgpIGRvbmUKKwkgKiBlYXJsaWVyIG9uLgorCSAqLwogCWlmIChmb3VuZC0+ZF9pbm9kZSkgewogCQlpZiAodW5saWtlbHkoZm91bmQtPmRfaW5vZGUgIT0gaW5vZGUpKSB7CiAJCQkvKiBUaGlzIGNhbid0IGhhcHBlbiBiZWNhdXNlIGJhZCBpbm9kZXMgYXJlIHVuaGFzaGVkLiAqLwogCQkJQlVHX09OKCFpc19iYWRfaW5vZGUoaW5vZGUpKTsKIAkJCUJVR19PTighaXNfYmFkX2lub2RlKGZvdW5kLT5kX2lub2RlKSk7CiAJCX0KLQkJLyoKLQkJICogQWxyZWFkeSBoYXZlIHRoZSBpbm9kZSBhbmQgdGhlIGRlbnRyeSBhdHRhY2hlZCwgZGVjcmVtZW50Ci0JCSAqIHRoZSByZWZlcmVuY2UgY291bnQgdG8gYmFsYW5jZSB0aGUgaWdldCgpIGRvbmUKLQkJICogZWFybGllciBvbi4gIFdlIGZvdW5kIHRoZSBkZW50cnkgdXNpbmcgZF9sb29rdXAoKSBzbyBpdAotCQkgKiBjYW5ub3QgYmUgZGlzY29ubmVjdGVkIGFuZCB0aHVzIHdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5Ci0JCSAqIGFib3V0IGFueSBORlMvZGlzY29ubmVjdGVkbmVzcyBpc3N1ZXMgaGVyZS4KLQkJICovCiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gZm91bmQ7CiAJfQorCiAJLyoKIAkgKiBOZWdhdGl2ZSBkZW50cnk6IGluc3RhbnRpYXRlIGl0IHVubGVzcyB0aGUgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kCi0JICogaGFzIGEgJ2Rpc2Nvbm5lY3RlZCcgZGVudHJ5IChpLmUuIElTX1JPT1QgYW5kIERDQUNIRV9ESVNDT05ORUNURUQpLAotCSAqIGluIHdoaWNoIGNhc2UgZF9tb3ZlKCkgdGhhdCBpbiBwbGFjZSBvZiB0aGUgZm91bmQgZGVudHJ5LgorCSAqIGFscmVhZHkgaGFzIGEgZGVudHJ5LgogCSAqLwotCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkvKiBOb3QgYSBkaXJlY3Rvcnk7IGV2ZXJ5dGhpbmcgaXMgZWFzeS4gKi8KLQkJZF9pbnN0YW50aWF0ZShmb3VuZCwgaW5vZGUpOwotCQlyZXR1cm4gZm91bmQ7Ci0JfQogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKSB7Ci0JCS8qCi0JCSAqIERpcmVjdG9yeSB3aXRob3V0IGEgJ2Rpc2Nvbm5lY3RlZCcgZGVudHJ5OyB3ZSBuZWVkIHRvIGRvCi0JCSAqIGRfaW5zdGFudGlhdGUoKSBieSBoYW5kIGJlY2F1c2UgaXQgdGFrZXMgZGNhY2hlX2xvY2sgd2hpY2gKLQkJICogd2UgYWxyZWFkeSBob2xkLgotCQkgKi8KKwlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgbGlzdF9lbXB0eSgmaW5vZGUtPmlfZGVudHJ5KSkgewogCQlfX2RfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKIAkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShmb3VuZCwgaW5vZGUpOwogCQlyZXR1cm4gZm91bmQ7CiAJfQorCiAJLyoKLQkgKiBEaXJlY3Rvcnkgd2l0aCBhICdkaXNjb25uZWN0ZWQnIGRlbnRyeTsgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZQotCSAqICdkaXNjb25uZWN0ZWQnIGRlbnRyeS4KKwkgKiBJbiBjYXNlIGEgZGlyZWN0b3J5IGFscmVhZHkgaGFzIGEgKGRpc2Nvbm5lY3RlZCkgZW50cnkgZ3JhYiBhCisJICogcmVmZXJlbmNlIHRvIGl0LCBtb3ZlIGl0IGluIHBsYWNlIGFuZCB1c2UgaXQuCiAJICovCiAJbmV3ID0gbGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkubmV4dCwgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7CiAJZGdldF9sb2NrZWQobmV3KTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCS8qIERvIHNlY3VyaXR5IHZvZG9vLiAqLwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKLQkvKiBNb3ZlIG5ldyBpbiBwbGFjZSBvZiBmb3VuZC4gKi8KIAlkX21vdmUobmV3LCBmb3VuZCk7Ci0JLyogQmFsYW5jZSB0aGUgaWdldCgpIHdlIGRpZCBhYm92ZS4gKi8KIAlpcHV0KGlub2RlKTsKLQkvKiBUaHJvdyBhd2F5IGZvdW5kLiAqLwogCWRwdXQoZm91bmQpOwotCS8qIFVzZSBuZXcgYXMgdGhlIGFjdHVhbCBkZW50cnkuICovCiAJcmV0dXJuIG5ldzsKIAogZXJyX291dDoKZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggYmZmNDA1Mi4uNjNhNGE1OSAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTMyMiwxNzcgKzMyMiw4MSBAQAogfQogCiAvKgotICogU2FmZWx5IHBhcnNlIHRoZSBtb3VudCBvcHRpb25zIGluIEBkYXRhIGFuZCB1cGRhdGUgQG9wdHMuCisgKiBkZXZwdHNfZ2V0X3NiKCkKICAqCi0gKiBkZXZwdHMgZW5kcyB1cCBwYXJzaW5nIG9wdGlvbnMgdHdvIHRpbWVzIGR1cmluZyBtb3VudCwgZHVlIHRvIHRoZQotICogdHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBpdCBzdXBwb3J0cy4gVGhlIGZpcnN0IHBhcnNlIG9jY3VycyBpbgotICogZGV2cHRzX2dldF9zYigpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG1vZGUgKHNpbmdsZS1pbnN0YW5jZSBvcgotICogbXVsdGktaW5zdGFuY2UgbW9kZSkuIFRoZSBzZWNvbmQgcGFyc2UgaGFwcGVucyBpbiBkZXZwdHNfcmVtb3VudCgpCi0gKiBvciBuZXdfcHRzX21vdW50KCkgZGVwZW5kaW5nIG9uIHRoZSBtb2RlLgorICogICAgIElmIHRoZSAnLW8gbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiB3YXMgc3BlY2lmaWVkLCBtb3VudCBhIG5ldworICogICAgIChwcml2YXRlKSBpbnN0YW5jZSBvZiBkZXZwdHMuICBQVFlzIGNyZWF0ZWQgaW4gdGhpcyBpbnN0YW5jZSBhcmUKKyAqICAgICBpbmRlcGVuZGVudCBvZiB0aGUgUFRZcyBpbiBvdGhlciBkZXZwdHMgaW5zdGFuY2VzLgogICoKLSAqIFBhcnNpbmcgb2Ygb3B0aW9ucyBtb2RpZmllcyB0aGUgQGRhdGEgbWFraW5nIHN1YnNlcXVlbnQgcGFyc2luZwotICogaW5jb3JyZWN0LiBTbyBtYWtlIGEgbG9jYWwgY29weSBvZiBAZGF0YSBhbmQgcGFyc2UgaXQuCisgKiAgICAgSWYgdGhlICctbyBuZXdpbnN0YW5jZScgb3B0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLCBtb3VudC9yZW1vdW50IHRoZQorICogICAgIGluaXRpYWwga2VybmVsIG1vdW50IG9mIGRldnB0cy4gIFRoaXMgdHlwZSBvZiBtb3VudCBnaXZlcyB0aGUKKyAqICAgICBsZWdhY3ksIHNpbmdsZS1pbnN0YW5jZSBzZW1hbnRpY3MuCiAgKgotICogUmV0dXJuOiAwIE9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IHNhZmVfcGFyc2VfbW91bnRfb3B0aW9ucyh2b2lkICpkYXRhLCBzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHMpCi17Ci0JaW50IHJjOwotCXZvaWQgKmRhdGFjcDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBVc2Uga3N0cmR1cCgpID8gICovCi0JZGF0YWNwID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YWNwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhY3AsIGRhdGEsIFBBR0VfU0laRSk7Ci0JcmMgPSBwYXJzZV9tb3VudF9vcHRpb25zKChjaGFyICopZGF0YWNwLCBQQVJTRV9NT1VOVCwgb3B0cyk7Ci0Ja2ZyZWUoZGF0YWNwKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIE1vdW50IGEgbmV3IChwcml2YXRlKSBpbnN0YW5jZSBvZiBkZXZwdHMuICBQVFlzIGNyZWF0ZWQgaW4gdGhpcwotICogaW5zdGFuY2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBQVFlzIGluIG90aGVyIGRldnB0cyBpbnN0YW5jZXMuCi0gKi8KLXN0YXRpYyBpbnQgbmV3X3B0c19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQl2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwdHNfZnNfaW5mbyAqZnNpOwotCXN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0czsKLQotCWVyciA9IGdldF9zYl9ub2Rldihmc190eXBlLCBmbGFncywgZGF0YSwgZGV2cHRzX2ZpbGxfc3VwZXIsIG1udCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWZzaSA9IERFVlBUU19TQihtbnQtPm1udF9zYik7Ci0Jb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7Ci0KLQllcnIgPSBwYXJzZV9tb3VudF9vcHRpb25zKGRhdGEsIFBBUlNFX01PVU5ULCBvcHRzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw7Ci0KLQllcnIgPSBta25vZF9wdG14KG1udC0+bW50X3NiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlkcHV0KG1udC0+bW50X3NiLT5zX3Jvb3QpOwotCWRlYWN0aXZhdGVfc3VwZXIobW50LT5tbnRfc2IpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiAnbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiB3YXMgc3BlY2lmaWVkIGluIEBkYXRhLgorICogICAgIFRoZSAnbmV3aW5zdGFuY2UnIG9wdGlvbiBpcyBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBuYW1lc3BhY2UKKyAqICAgICBzZW1hbnRpY3MgaW4gZGV2cHRzIHdoaWxlIHByZXNlcnZpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiB0aGUKKyAqICAgICBjdXJyZW50ICdzaW5nbGUtbmFtZXNwYWNlJyBzZW1hbnRpY3MuIGkuZSBhbGwgbW91bnRzIG9mIGRldnB0cworICogICAgIHdpdGhvdXQgdGhlICduZXdpbnN0YW5jZScgbW91bnQgb3B0aW9uIHNob3VsZCBiaW5kIHRvIHRoZSBpbml0aWFsCisgKiAgICAga2VybmVsIG1vdW50LCBsaWtlIGdldF9zYl9zaW5nbGUoKS4KICAqCi0gKiBSZXR1cm46IC1lcnJubyAgCW9uIGVycm9yIChlZzogaW52YWxpZCBtb3VudCBvcHRpb25zIHNwZWNpZmllZCkKLSAqIAkgOiAxIAkJaWYgJ25ld2luc3RhbmNlJyBtb3VudCBvcHRpb24gd2FzIHNwZWNpZmllZAotICogCSA6IDAgCQlpZiAnbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiB3YXMgTk9UIHNwZWNpZmllZAotICovCi1zdGF0aWMgaW50IGlzX25ld19pbnN0YW5jZV9tb3VudCh2b2lkICpkYXRhKQotewotCWludCByYzsKLQlzdHJ1Y3QgcHRzX21vdW50X29wdHMgb3B0czsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlyYyA9IHNhZmVfcGFyc2VfbW91bnRfb3B0aW9ucyhkYXRhLCAmb3B0cyk7Ci0JaWYgKCFyYykKLQkJcmMgPSBvcHRzLm5ld2luc3RhbmNlOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogZ2V0X2luaXRfcHRzX3NiKCkKKyAqICAgICBNb3VudHMgd2l0aCAnbmV3aW5zdGFuY2UnIG9wdGlvbiBjcmVhdGUgYSBuZXcsIHByaXZhdGUgbmFtZXNwYWNlLgogICoKLSAqICAgICBUaGlzIGludGVyZmFjZSBpcyBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBuYW1lc3BhY2Ugc2VtYW50aWNzIGluCi0gKiAgICAgZGV2cHRzIHdoaWxlIHByZXNlcnZpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiB0aGUgY3VycmVudCAnc2luZ2xlLQotICogICAgIG5hbWVzcGFjZScgc2VtYW50aWNzLiBpLmUgYWxsIG1vdW50cyBvZiBkZXZwdHMgd2l0aG91dCB0aGUgJ25ld2luc3RhbmNlJwotICogICAgIG1vdW50IG9wdGlvbiBzaG91bGQgYmluZCB0byB0aGUgaW5pdGlhbCBrZXJuZWwgbW91bnQsIGxpa2UKLSAqICAgICBnZXRfc2Jfc2luZ2xlKCkuCisgKiAgICAgTk9URToKICAqCi0gKiAgICAgTW91bnRzIHdpdGggJ25ld2luc3RhbmNlJyBvcHRpb24gY3JlYXRlIGEgbmV3IHByaXZhdGUgbmFtZXNwYWNlLgotICoKLSAqICAgICBCdXQgZm9yIHNpbmdsZS1tb3VudCBzZW1hbnRpY3MsIGRldnB0cyBjYW5ub3QgdXNlIGdldF9zYl9zaW5nbGUoKSwKKyAqICAgICBGb3Igc2luZ2xlLW1vdW50IHNlbWFudGljcywgZGV2cHRzIGNhbm5vdCB1c2UgZ2V0X3NiX3NpbmdsZSgpLAogICogICAgIGJlY2F1c2UgZ2V0X3NiX3NpbmdsZSgpL3NnZXQoKSBmaW5kIGFuZCB1c2UgdGhlIHN1cGVyLWJsb2NrIGZyb20KICAqICAgICB0aGUgbW9zdCByZWNlbnQgbW91bnQgb2YgZGV2cHRzLiBCdXQgdGhhdCByZWNlbnQgbW91bnQgbWF5IGJlIGEKICAqICAgICAnbmV3aW5zdGFuY2UnIG1vdW50IGFuZCBnZXRfc2Jfc2luZ2xlKCkgd291bGQgcGljayB0aGUgbmV3aW5zdGFuY2UKICAqICAgICBzdXBlci1ibG9jayBpbnN0ZWFkIG9mIHRoZSBpbml0aWFsIHN1cGVyLWJsb2NrLgotICoKLSAqICAgICBUaGlzIGludGVyZmFjZSBpcyBpZGVudGljYWwgdG8gZ2V0X3NiX3NpbmdsZSgpIGV4Y2VwdCB0aGF0IGl0Ci0gKiAgICAgY29uc2lzdGVudGx5IHNlbGVjdHMgdGhlICdzaW5nbGUtbmFtZXNwYWNlJyBzdXBlcmJsb2NrIGV2ZW4gaW4gdGhlCi0gKiAgICAgcHJlc2VuY2Ugb2YgdGhlIHByaXZhdGUgbmFtZXNwYWNlIChpLmUgJ25ld2luc3RhbmNlJykgc3VwZXItYmxvY2tzLgogICovCi1zdGF0aWMgaW50IGdldF9pbml0X3B0c19zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQl2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3N0YXRpYyBpbnQgZGV2cHRzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7CiAJaW50IGVycm9yOworCXN0cnVjdCBwdHNfbW91bnRfb3B0cyBvcHRzOworCXN0cnVjdCBzdXBlcl9ibG9jayAqczsKIAotCXMgPSBzZ2V0KGZzX3R5cGUsIGNvbXBhcmVfaW5pdF9wdHNfc2IsIHNldF9hbm9uX3N1cGVyLCBOVUxMKTsKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJaWYgKGRhdGEpIHsKKwkJZXJyb3IgPSBwYXJzZV9tb3VudF9vcHRpb25zKGRhdGEsIFBBUlNFX01PVU5ULCAmb3B0cyk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAob3B0cy5uZXdpbnN0YW5jZSkKKwkJcyA9IHNnZXQoZnNfdHlwZSwgTlVMTCwgc2V0X2Fub25fc3VwZXIsIE5VTEwpOworCWVsc2UKKwkJcyA9IHNnZXQoZnNfdHlwZSwgY29tcGFyZV9pbml0X3B0c19zYiwgc2V0X2Fub25fc3VwZXIsIE5VTEwpOworCiAJaWYgKElTX0VSUihzKSkKIAkJcmV0dXJuIFBUUl9FUlIocyk7CiAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQlzLT5zX2ZsYWdzID0gZmxhZ3M7CiAJCWVycm9yID0gZGV2cHRzX2ZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7Ci0JCWlmIChlcnJvcikgewotCQkJdXBfd3JpdGUoJnMtPnNfdW1vdW50KTsKLQkJCWRlYWN0aXZhdGVfc3VwZXIocyk7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdW5kb19zZ2V0OwogCQlzLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsKIAl9Ci0JZG9fcmVtb3VudF9zYihzLCBmbGFncywgZGF0YSwgMCk7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisKKwlzaW1wbGVfc2V0X21udChtbnQsIHMpOworCisJbWVtY3B5KCYoREVWUFRTX1NCKHMpKS0+bW91bnRfb3B0cywgJm9wdHMsIHNpemVvZihvcHRzKSk7CisKKwllcnJvciA9IG1rbm9kX3B0bXgocyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9kcHV0OworCisJcmV0dXJuIDA7CisKK291dF9kcHV0OgorCWRwdXQocy0+c19yb290KTsKKworb3V0X3VuZG9fc2dldDoKKwl1cF93cml0ZSgmcy0+c191bW91bnQpOworCWRlYWN0aXZhdGVfc3VwZXIocyk7CisJcmV0dXJuIGVycm9yOwogfQogCi0vKgotICogTW91bnQgb3IgcmVtb3VudCB0aGUgaW5pdGlhbCBrZXJuZWwgbW91bnQgb2YgZGV2cHRzLiBUaGlzIHR5cGUgb2YKLSAqIG1vdW50IG1haW50YWlucyB0aGUgbGVnYWN5LCBzaW5nbGUtaW5zdGFuY2Ugc2VtYW50aWNzLCB3aGlsZSB0aGUKLSAqIGtlcm5lbCBzdGlsbCBhbGxvd3MgbXVsdGlwbGUtaW5zdGFuY2VzLgotICovCi1zdGF0aWMgaW50IGluaXRfcHRzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCi0JCXZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBnZXRfaW5pdF9wdHNfc2IoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIG1udCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IG1rbm9kX3B0bXgobW50LT5tbnRfc2IpOwotCWlmIChlcnIpIHsKLQkJZHB1dChtbnQtPm1udF9zYi0+c19yb290KTsKLQkJZGVhY3RpdmF0ZV9zdXBlcihtbnQtPm1udF9zYik7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkZXZwdHNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCWludCBuZXc7Ci0KLQluZXcgPSBpc19uZXdfaW5zdGFuY2VfbW91bnQoZGF0YSk7Ci0JaWYgKG5ldyA8IDApCi0JCXJldHVybiBuZXc7Ci0KLQlpZiAobmV3KQotCQlyZXR1cm4gbmV3X3B0c19tb3VudChmc190eXBlLCBmbGFncywgZGF0YSwgbW50KTsKLQotCXJldHVybiBpbml0X3B0c19tb3VudChmc190eXBlLCBmbGFncywgZGF0YSwgbW50KTsKLX0KICNlbHNlCiAvKgogICogVGhpcyBzdXBwb3J0cyBvbmx5IHRoZSBsZWdhY3kgc2luZ2xlLWluc3RhbmNlIHNlbWFudGljcyAobm8KZGlmZiAtLWdpdCBhL2ZzL2RsbS9kaXIuYyBiL2ZzL2RsbS9kaXIuYwppbmRleCA5Mjk2OWY4Li44NThmYmExIDEwMDY0NAotLS0gYS9mcy9kbG0vZGlyLmMKKysrIGIvZnMvZGxtL2Rpci5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogCWJ1Y2tldCA9IGRpcl9oYXNoKGxzLCBuYW1lLCBuYW1lbGVuKTsKIAotCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAogCWRlID0gc2VhcmNoX2J1Y2tldChscywgbmFtZSwgbmFtZWxlbiwgYnVja2V0KTsKIApAQCAtMTczLDcgKzE3Myw3IEBACiAJbGlzdF9kZWwoJmRlLT5saXN0KTsKIAlrZnJlZShkZSk7CiAgb3V0OgotCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiB9CiAKIHZvaWQgZGxtX2Rpcl9jbGVhcihzdHJ1Y3QgZGxtX2xzICpscykKQEAgLTE4NSwxNCArMTg1LDE0IEBACiAJRExNX0FTU0VSVChsaXN0X2VtcHR5KCZscy0+bHNfcmVjb3Zlcl9saXN0KSwgKTsKIAogCWZvciAoaSA9IDA7IGkgPCBscy0+bHNfZGlydGJsX3NpemU7IGkrKykgewotCQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOworCQlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CiAJCWhlYWQgPSAmbHMtPmxzX2RpcnRibFtpXS5saXN0OwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJCWRlID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgZGxtX2RpcmVudHJ5LCBsaXN0KTsKIAkJCWxpc3RfZGVsKCZkZS0+bGlzdCk7CiAJCQlwdXRfZnJlZV9kZShscywgZGUpOwogCQl9Ci0JCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CiAJfQogfQogCkBAIC0zMDcsMTcgKzMwNywxNyBAQAogCiAJYnVja2V0ID0gZGlyX2hhc2gobHMsIG5hbWUsIG5hbWVsZW4pOwogCi0Jd3JpdGVfbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCXNwaW5fbG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCWRlID0gc2VhcmNoX2J1Y2tldChscywgbmFtZSwgbmFtZWxlbiwgYnVja2V0KTsKIAlpZiAoZGUpIHsKIAkJKnJfbm9kZWlkID0gZGUtPm1hc3Rlcl9ub2RlaWQ7Ci0JCXdyaXRlX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOworCQlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCQlpZiAoKnJfbm9kZWlkID09IG5vZGVpZCkKIAkJCXJldHVybiAtRUVYSVNUOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCiAJaWYgKG5hbWVsZW4gPiBETE1fUkVTTkFNRV9NQVhMRU4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzMwLDcgKzMzMCw3IEBACiAJZGUtPmxlbmd0aCA9IG5hbWVsZW47CiAJbWVtY3B5KGRlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAotCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAl0bXAgPSBzZWFyY2hfYnVja2V0KGxzLCBuYW1lLCBuYW1lbGVuLCBidWNrZXQpOwogCWlmICh0bXApIHsKIAkJa2ZyZWUoZGUpOwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmRlLT5saXN0LCAmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxpc3QpOwogCX0KIAkqcl9ub2RlaWQgPSBkZS0+bWFzdGVyX25vZGVpZDsKLQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9kbG0vZGxtX2ludGVybmFsLmggYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKaW5kZXggMDc2ZTg2Zi4uZDAxY2EwYSAxMDA2NDQKLS0tIGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCisrKyBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaApAQCAtOTksNyArOTksNyBAQAogCiBzdHJ1Y3QgZGxtX2RpcnRhYmxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jcndsb2NrX3QJCWxvY2s7CisJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKIHN0cnVjdCBkbG1fcnNidGFibGUgewpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suYyBiL2ZzL2RsbS9sb2NrLmMKaW5kZXggMDFlN2QzOS4uMjA1ZWM5NSAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suYworKysgYi9mcy9kbG0vbG9jay5jCkBAIC04MzUsNyArODM1LDcgQEAKIAkJbGtiLT5sa2Jfd2FpdF9jb3VudCsrOwogCQlob2xkX2xrYihsa2IpOwogCi0JCWxvZ19kZWJ1ZyhscywgImFkZCBvdmVybGFwICV4IGN1ciAlZCBuZXcgJWQgY291bnQgJWQgZmxhZ3MgJXgiLAorCQlsb2dfZGVidWcobHMsICJhZGR3YWl0ICV4IGN1ciAlZCBvdmVybGFwICVkIGNvdW50ICVkIGYgJXgiLAogCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2Jfd2FpdF90eXBlLCBtc3R5cGUsCiAJCQkgIGxrYi0+bGtiX3dhaXRfY291bnQsIGxrYi0+bGtiX2ZsYWdzKTsKIAkJZ290byBvdXQ7CkBAIC04NTEsNyArODUxLDcgQEAKIAlsaXN0X2FkZCgmbGtiLT5sa2Jfd2FpdF9yZXBseSwgJmxzLT5sc193YWl0ZXJzKTsKICBvdXQ6CiAJaWYgKGVycm9yKQotCQlsb2dfZXJyb3IobHMsICJhZGRfdG9fd2FpdGVycyAleCBlcnJvciAlZCBmbGFncyAleCAlZCAlZCAlcyIsCisJCWxvZ19lcnJvcihscywgImFkZHdhaXQgZXJyb3IgJXggJWQgZmxhZ3MgJXggJWQgJWQgJXMiLAogCQkJICBsa2ItPmxrYl9pZCwgZXJyb3IsIGxrYi0+bGtiX2ZsYWdzLCBtc3R5cGUsCiAJCQkgIGxrYi0+bGtiX3dhaXRfdHlwZSwgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKIAltdXRleF91bmxvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKQEAgLTg2MywyMyArODYzLDU1IEBACiAgICByZXF1ZXN0IHJlcGx5IG9uIHRoZSByZXF1ZXN0cXVldWUpIGJldHdlZW4gZGxtX3JlY292ZXJfd2FpdGVyc19wcmUoKSB3aGljaAogICAgc2V0IFJFU0VORCBhbmQgZGxtX3JlY292ZXJfd2FpdGVyc19wb3N0KCkgKi8KIAotc3RhdGljIGludCBfcmVtb3ZlX2Zyb21fd2FpdGVycyhzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgbXN0eXBlKQorc3RhdGljIGludCBfcmVtb3ZlX2Zyb21fd2FpdGVycyhzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgbXN0eXBlLAorCQkJCXN0cnVjdCBkbG1fbWVzc2FnZSAqbXMpCiB7CiAJc3RydWN0IGRsbV9scyAqbHMgPSBsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX2xzOwogCWludCBvdmVybGFwX2RvbmUgPSAwOwogCiAJaWYgKGlzX292ZXJsYXBfdW5sb2NrKGxrYikgJiYgKG1zdHlwZSA9PSBETE1fTVNHX1VOTE9DS19SRVBMWSkpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCB1bmxvY2tfcmVwbHkgb3ZlcmxhcCIsIGxrYi0+bGtiX2lkKTsKIAkJbGtiLT5sa2JfZmxhZ3MgJj0gfkRMTV9JRkxfT1ZFUkxBUF9VTkxPQ0s7CiAJCW92ZXJsYXBfZG9uZSA9IDE7CiAJCWdvdG8gb3V0X2RlbDsKIAl9CiAKIAlpZiAoaXNfb3ZlcmxhcF9jYW5jZWwobGtiKSAmJiAobXN0eXBlID09IERMTV9NU0dfQ0FOQ0VMX1JFUExZKSkgeworCQlsb2dfZGVidWcobHMsICJyZW13YWl0ICV4IGNhbmNlbF9yZXBseSBvdmVybGFwIiwgbGtiLT5sa2JfaWQpOwogCQlsa2ItPmxrYl9mbGFncyAmPSB+RExNX0lGTF9PVkVSTEFQX0NBTkNFTDsKIAkJb3ZlcmxhcF9kb25lID0gMTsKIAkJZ290byBvdXRfZGVsOwogCX0KIAorCS8qIENhbmNlbCBzdGF0ZSB3YXMgcHJlZW1wdGl2ZWx5IGNsZWFyZWQgYnkgYSBzdWNjZXNzZnVsIGNvbnZlcnQsCisJICAgc2VlIG5leHQgY29tbWVudCwgbm90aGluZyB0byBkby4gKi8KKworCWlmICgobXN0eXBlID09IERMTV9NU0dfQ0FOQ0VMX1JFUExZKSAmJgorCSAgICAobGtiLT5sa2Jfd2FpdF90eXBlICE9IERMTV9NU0dfQ0FOQ0VMKSkgeworCQlsb2dfZGVidWcobHMsICJyZW13YWl0ICV4IGNhbmNlbF9yZXBseSB3YWl0X3R5cGUgJWQiLAorCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2Jfd2FpdF90eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFJlbW92ZSBmb3IgdGhlIGNvbnZlcnQgcmVwbHksIGFuZCBwcmVtcHRpdmVseSByZW1vdmUgZm9yIHRoZQorCSAgIGNhbmNlbCByZXBseS4gIEEgY29udmVydCBoYXMgYmVlbiBncmFudGVkIHdoaWxlIHRoZXJlJ3Mgc3RpbGwKKwkgICBhbiBvdXRzdGFuZGluZyBjYW5jZWwgb24gaXQgKHRoZSBjYW5jZWwgaXMgbW9vdCBhbmQgdGhlIHJlc3VsdAorCSAgIGluIHRoZSBjYW5jZWwgcmVwbHkgc2hvdWxkIGJlIDApLiAgV2UgcHJlZW1wdCB0aGUgY2FuY2VsIHJlcGx5CisJICAgYmVjYXVzZSB0aGUgYXBwIGdldHMgdGhlIGNvbnZlcnQgcmVzdWx0IGFuZCB0aGVuIGNhbiBmb2xsb3cgdXAKKwkgICB3aXRoIGFub3RoZXIgb3AsIGxpa2UgY29udmVydC4gIFRoaXMgc3Vic2VxdWVudCBvcCB3b3VsZCBzZWUgdGhlCisJICAgbGluZ2VyaW5nIHN0YXRlIG9mIHRoZSBjYW5jZWwgYW5kIGZhaWwgd2l0aCAtRUJVU1kuICovCisKKwlpZiAoKG1zdHlwZSA9PSBETE1fTVNHX0NPTlZFUlRfUkVQTFkpICYmCisJICAgIChsa2ItPmxrYl93YWl0X3R5cGUgPT0gRExNX01TR19DT05WRVJUKSAmJgorCSAgICBpc19vdmVybGFwX2NhbmNlbChsa2IpICYmIG1zICYmICFtcy0+bV9yZXN1bHQpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCBjb252ZXJ0X3JlcGx5IHphcCBvdmVybGFwX2NhbmNlbCIsCisJCQkgIGxrYi0+bGtiX2lkKTsKKwkJbGtiLT5sa2Jfd2FpdF90eXBlID0gMDsKKwkJbGtiLT5sa2JfZmxhZ3MgJj0gfkRMTV9JRkxfT1ZFUkxBUF9DQU5DRUw7CisJCWxrYi0+bGtiX3dhaXRfY291bnQtLTsKKwkJZ290byBvdXRfZGVsOworCX0KKwogCS8qIE4uQi4gdHlwZSBvZiByZXBseSBtYXkgbm90IGFsd2F5cyBjb3JyZXNwb25kIHRvIHR5cGUgb2Ygb3JpZ2luYWwKIAkgICBtc2cgZHVlIHRvIGxvb2t1cC0+cmVxdWVzdCBvcHRpbWl6YXRpb24sIHZlcmlmeSBvdGhlcnM/ICovCiAKQEAgLTg4OCw4ICs5MjAsOCBAQAogCQlnb3RvIG91dF9kZWw7CiAJfQogCi0JbG9nX2Vycm9yKGxzLCAicmVtb3ZlX2Zyb21fd2FpdGVycyBsa2lkICV4IGZsYWdzICV4IHR5cGVzICVkICVkIiwKLQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfZmxhZ3MsIG1zdHlwZSwgbGtiLT5sa2Jfd2FpdF90eXBlKTsKKwlsb2dfZXJyb3IobHMsICJyZW13YWl0IGVycm9yICV4IHJlcGx5ICVkIGZsYWdzICV4IG5vIHdhaXRfdHlwZSIsCisJCSAgbGtiLT5sa2JfaWQsIG1zdHlwZSwgbGtiLT5sa2JfZmxhZ3MpOwogCXJldHVybiAtMTsKIAogIG91dF9kZWw6CkBAIC04OTksNyArOTMxLDcgQEAKIAkgICB0aGlzIHdvdWxkIGhhcHBlbiAqLwogCiAJaWYgKG92ZXJsYXBfZG9uZSAmJiBsa2ItPmxrYl93YWl0X3R5cGUpIHsKLQkJbG9nX2Vycm9yKGxzLCAicmVtb3ZlX2Zyb21fd2FpdGVycyAleCByZXBseSAlZCBnaXZlIHVwIG9uICVkIiwKKwkJbG9nX2Vycm9yKGxzLCAicmVtd2FpdCBlcnJvciAleCByZXBseSAlZCB3YWl0X3R5cGUgJWQgb3ZlcmxhcCIsCiAJCQkgIGxrYi0+bGtiX2lkLCBtc3R5cGUsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CiAJCWxrYi0+bGtiX3dhaXRfY291bnQtLTsKIAkJbGtiLT5sa2Jfd2FpdF90eXBlID0gMDsKQEAgLTkyMSw3ICs5NTMsNyBAQAogCWludCBlcnJvcjsKIAogCW11dGV4X2xvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKLQllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXN0eXBlKTsKKwllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXN0eXBlLCBOVUxMKTsKIAltdXRleF91bmxvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC05MzYsNyArOTY4LDcgQEAKIAogCWlmIChtcyAhPSAmbHMtPmxzX3N0dWJfbXMpCiAJCW11dGV4X2xvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKLQllcnJvciA9IF9yZW1vdmVfZnJvbV93YWl0ZXJzKGxrYiwgbXMtPm1fdHlwZSk7CisJZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zLT5tX3R5cGUsIG1zKTsKIAlpZiAobXMgIT0gJmxzLT5sc19zdHViX21zKQogCQltdXRleF91bmxvY2soJmxzLT5sc193YWl0ZXJzX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0yMDgzLDYgKzIxMTUsMTEgQEAKIAlsa2ItPmxrYl90aW1lb3V0X2NzID0gYXJncy0+dGltZW91dDsKIAlydiA9IDA7CiAgb3V0OgorCWlmIChydikKKwkJbG9nX2RlYnVnKGxzLCAidmFsaWRhdGVfbG9ja19hcmdzICVkICV4ICV4ICV4ICVkICVkICVzIiwKKwkJCSAgcnYsIGxrYi0+bGtiX2lkLCBsa2ItPmxrYl9mbGFncywgYXJncy0+ZmxhZ3MsCisJCQkgIGxrYi0+bGtiX3N0YXR1cywgbGtiLT5sa2Jfd2FpdF90eXBlLAorCQkJICBsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX25hbWUpOwogCXJldHVybiBydjsKIH0KIApAQCAtMjE0OSw2ICsyMTg2LDEzIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCisJCS8qIHRoZXJlJ3Mgbm90aGluZyB0byBjYW5jZWwgKi8KKwkJaWYgKGxrYi0+bGtiX3N0YXR1cyA9PSBETE1fTEtTVFNfR1JBTlRFRCAmJgorCQkgICAgIWxrYi0+bGtiX3dhaXRfdHlwZSkgeworCQkJcnYgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXN3aXRjaCAobGtiLT5sa2Jfd2FpdF90eXBlKSB7CiAJCWNhc2UgRExNX01TR19MT09LVVA6CiAJCWNhc2UgRExNX01TR19SRVFVRVNUOgpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2tzcGFjZS5jIGIvZnMvZGxtL2xvY2tzcGFjZS5jCmluZGV4IGFhMzJlNWYuLmNkOGUyZGYgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2Nrc3BhY2UuYworKysgYi9mcy9kbG0vbG9ja3NwYWNlLmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCQlnb3RvIG91dF9sa2JmcmVlOwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmxzLT5sc19kaXJ0YmxbaV0ubGlzdCk7Ci0JCXJ3bG9ja19pbml0KCZscy0+bHNfZGlydGJsW2ldLmxvY2spOworCQlzcGluX2xvY2tfaW5pdCgmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmbHMtPmxzX3dhaXRlcnMpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCAxMDNhNWViLi42MDkxMDhhIDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCiAqKiAgQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMjEsNyArMjEsNyBAQAogICoKICAqIENsdXN0ZXIgbm9kZXMgYXJlIHJlZmVycmVkIHRvIGJ5IHRoZWlyIG5vZGVpZHMuIG5vZGVpZHMgYXJlCiAgKiBzaW1wbHkgMzIgYml0IG51bWJlcnMgdG8gdGhlIGxvY2tpbmcgbW9kdWxlIC0gaWYgdGhleSBuZWVkIHRvCi0gKiBiZSBleHBhbmRlZCBmb3IgdGhlIGNsdXN0ZXIgaW5mcmFzdHJ1Y3R1cmUgdGhlbiB0aGF0IGlzIGl0J3MKKyAqIGJlIGV4cGFuZGVkIGZvciB0aGUgY2x1c3RlciBpbmZyYXN0cnVjdHVyZSB0aGVuIHRoYXQgaXMgaXRzCiAgKiByZXNwb25zaWJpbGl0eS4gSXQgaXMgdGhpcyBsYXllcidzCiAgKiByZXNwb25zaWJpbGl0eSB0byByZXNvbHZlIHRoZXNlIGludG8gSVAgYWRkcmVzcyBvcgogICogd2hhdGV2ZXIgaXQgbmVlZHMgZm9yIGludGVyLW5vZGUgY29tbXVuaWNhdGlvbi4KQEAgLTM2LDkgKzM2LDkgQEAKICAqIG9mIGhpZ2ggbG9hZC4gQWxzbywgdGhpcyB3YXksIHRoZSBzZW5kaW5nIHRocmVhZCBjYW4gY29sbGVjdCB0b2dldGhlcgogICogbWVzc2FnZXMgYm91bmQgZm9yIG9uZSBub2RlIGFuZCBzZW5kIHRoZW0gaW4gb25lIGJsb2NrLgogICoKLSAqIGxvd2NvbW1zIHdpbGwgY2hvb3NlIHRvIHVzZSB3aXRoZXIgVENQIG9yIFNDVFAgYXMgaXRzIHRyYW5zcG9ydCBsYXllcgorICogbG93Y29tbXMgd2lsbCBjaG9vc2UgdG8gdXNlIGVpdGhlciBUQ1Agb3IgU0NUUCBhcyBpdHMgdHJhbnNwb3J0IGxheWVyCiAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ3Byb3RvY29sJy4gVGhpcyBzaG91bGQgYmUgc2V0Ci0gKiB0byAwIChkZWZhdWx0KSBmb3IgVENQIG9yIDEgZm9yIFNDVFAuIEl0IHNob3VsZGJlIGNvbmZpZ3VyZWQgdXNpbmcgYQorICogdG8gMCAoZGVmYXVsdCkgZm9yIFRDUCBvciAxIGZvciBTQ1RQLiBJdCBzaG91bGQgYmUgY29uZmlndXJlZCB1c2luZyBhCiAgKiBjbHVzdGVyLXdpZGUgbWVjaGFuaXNtIGFzIGl0IG11c3QgYmUgdGhlIHNhbWUgb24gYWxsIG5vZGVzIG9mIHRoZSBjbHVzdGVyCiAgKiBmb3IgdGhlIERMTSB0byBmdW5jdGlvbi4KICAqCkBAIC00OCwxMSArNDgsMTEgQEAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2N0cC5oPgogI2luY2x1ZGUgPG5ldC9zY3RwL3VzZXIuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogCiAjaW5jbHVkZSAiZGxtX2ludGVybmFsLmgiCiAjaW5jbHVkZSAibG93Y29tbXMuaCIKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2RlZmluZSBORUVERURfUk1FTSAoNCoxMDI0KjEwMjQpCisjZGVmaW5lIENPTk5fSEFTSF9TSVpFIDMyCiAKIHN0cnVjdCBjYnVmIHsKIAl1bnNpZ25lZCBpbnQgYmFzZTsKQEAgLTExNCw2ICsxMTUsNyBAQAogCWludCByZXRyaWVzOwogI2RlZmluZSBNQVhfQ09OTkVDVF9SRVRSSUVTIDMKIAlpbnQgc2N0cF9hc3NvYzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OwogCXN0cnVjdCBjb25uZWN0aW9uICpvdGhlcmNvbjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcndvcms7IC8qIFJlY2VpdmUgd29ya3F1ZXVlICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHN3b3JrOyAvKiBTZW5kIHdvcmtxdWV1ZSAqLwpAQCAtMTM4LDE0ICsxNDAsMzcgQEAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVjdl93b3JrcXVldWU7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlbmRfd29ya3F1ZXVlOwogCi1zdGF0aWMgREVGSU5FX0lEUihjb25uZWN0aW9uc19pZHIpOworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGNvbm5lY3Rpb25faGFzaFtDT05OX0hBU0hfU0laRV07CiBzdGF0aWMgREVGSU5FX01VVEVYKGNvbm5lY3Rpb25zX2xvY2spOwotc3RhdGljIGludCBtYXhfbm9kZWlkOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpjb25fY2FjaGU7CiAKIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVjdl9zb2NrZXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3NlbmRfc29ja2V0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCisKKy8qIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltcGxlIGJlY2F1c2UgbW9zdCBjbHVzdGVycyBoYXZlIHNpbXBsZQorICAgc2VxdWVudGlhbCBub2RlaWRzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBnbyBzdHJhaWdodCB0byBhIGNvbm5lY3Rpb24KKyAgIHN0cnVjdCBpbiB0aGUgYXJyYXkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5vZGVpZF9oYXNoKGludCBub2RlaWQpCit7CisJcmV0dXJuIG5vZGVpZCAmIChDT05OX0hBU0hfU0laRS0xKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25uZWN0aW9uICpfX2ZpbmRfY29uKGludCBub2RlaWQpCit7CisJaW50IHI7CisJc3RydWN0IGhsaXN0X25vZGUgKmg7CisJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKKworCXIgPSBub2RlaWRfaGFzaChub2RlaWQpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29uLCBoLCAmY29ubmVjdGlvbl9oYXNoW3JdLCBsaXN0KSB7CisJCWlmIChjb24tPm5vZGVpZCA9PSBub2RlaWQpCisJCQlyZXR1cm4gY29uOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqIElmICdhbGxvY2F0aW9uJyBpcyB6ZXJvIHRoZW4gd2UgZG9uJ3QgYXR0ZW1wdCB0byBjcmVhdGUgYSBuZXcKICAqIGNvbm5lY3Rpb24gc3RydWN0dXJlIGZvciB0aGlzIG5vZGUuCkBAIC0xNTQsMzEgKzE3OSwxNyBAQAogewogCXN0cnVjdCBjb25uZWN0aW9uICpjb24gPSBOVUxMOwogCWludCByOwotCWludCBuOwogCi0JY29uID0gaWRyX2ZpbmQoJmNvbm5lY3Rpb25zX2lkciwgbm9kZWlkKTsKKwljb24gPSBfX2ZpbmRfY29uKG5vZGVpZCk7CiAJaWYgKGNvbiB8fCAhYWxsb2MpCiAJCXJldHVybiBjb247CiAKLQlyID0gaWRyX3ByZV9nZXQoJmNvbm5lY3Rpb25zX2lkciwgYWxsb2MpOwotCWlmICghcikKLQkJcmV0dXJuIE5VTEw7Ci0KIAljb24gPSBrbWVtX2NhY2hlX3phbGxvYyhjb25fY2FjaGUsIGFsbG9jKTsKIAlpZiAoIWNvbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlyID0gaWRyX2dldF9uZXdfYWJvdmUoJmNvbm5lY3Rpb25zX2lkciwgY29uLCBub2RlaWQsICZuKTsKLQlpZiAocikgewotCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobiAhPSBub2RlaWQpIHsKLQkJaWRyX3JlbW92ZSgmY29ubmVjdGlvbnNfaWRyLCBuKTsKLQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCXIgPSBub2RlaWRfaGFzaChub2RlaWQpOworCWhsaXN0X2FkZF9oZWFkKCZjb24tPmxpc3QsICZjb25uZWN0aW9uX2hhc2hbcl0pOwogCiAJY29uLT5ub2RlaWQgPSBub2RlaWQ7CiAJbXV0ZXhfaW5pdCgmY29uLT5zb2NrX211dGV4KTsKQEAgLTE4OSwxOSArMjAwLDMwIEBACiAKIAkvKiBTZXR1cCBhY3Rpb24gcG9pbnRlcnMgZm9yIGNoaWxkIHNvY2tldHMgKi8KIAlpZiAoY29uLT5ub2RlaWQpIHsKLQkJc3RydWN0IGNvbm5lY3Rpb24gKnplcm9jb24gPSBpZHJfZmluZCgmY29ubmVjdGlvbnNfaWRyLCAwKTsKKwkJc3RydWN0IGNvbm5lY3Rpb24gKnplcm9jb24gPSBfX2ZpbmRfY29uKDApOwogCiAJCWNvbi0+Y29ubmVjdF9hY3Rpb24gPSB6ZXJvY29uLT5jb25uZWN0X2FjdGlvbjsKIAkJaWYgKCFjb24tPnJ4X2FjdGlvbikKIAkJCWNvbi0+cnhfYWN0aW9uID0gemVyb2Nvbi0+cnhfYWN0aW9uOwogCX0KIAotCWlmIChub2RlaWQgPiBtYXhfbm9kZWlkKQotCQltYXhfbm9kZWlkID0gbm9kZWlkOwotCiAJcmV0dXJuIGNvbjsKIH0KIAorLyogTG9vcCByb3VuZCBhbGwgY29ubmVjdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGZvcmVhY2hfY29ubih2b2lkICgqY29ubl9mdW5jKShzdHJ1Y3QgY29ubmVjdGlvbiAqYykpCit7CisJaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKmgsICpuOworCXN0cnVjdCBjb25uZWN0aW9uICpjb247CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09OTl9IQVNIX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbiwgaCwgbiwgJmNvbm5lY3Rpb25faGFzaFtpXSwgbGlzdCl7CisJCQljb25uX2Z1bmMoY29uKTsKKwkJfQorCX0KK30KKwogc3RhdGljIHN0cnVjdCBjb25uZWN0aW9uICpub2RlaWQyY29uKGludCBub2RlaWQsIGdmcF90IGFsbG9jYXRpb24pCiB7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKQEAgLTIxNywxNCArMjM5LDE3IEBACiBzdGF0aWMgc3RydWN0IGNvbm5lY3Rpb24gKmFzc29jMmNvbihpbnQgYXNzb2NfaWQpCiB7CiAJaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKmg7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKIAogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwotCWZvciAoaT0wOyBpPD1tYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoY29uICYmIGNvbi0+c2N0cF9hc3NvYyA9PSBhc3NvY19pZCkgewotCQkJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQkJCXJldHVybiBjb247CisKKwlmb3IgKGkgPSAwIDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29uLCBoLCAmY29ubmVjdGlvbl9oYXNoW2ldLCBsaXN0KSB7CisJCQlpZiAoY29uICYmIGNvbi0+c2N0cF9hc3NvYyA9PSBhc3NvY19pZCkgeworCQkJCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CisJCQkJcmV0dXJuIGNvbjsKKwkJCX0KIAkJfQogCX0KIAltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwpAQCAtMjUwLDggKzI3NSw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqaW42ICA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZhZGRyOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpyZXQ2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgcmV0YWRkcjsKLQkJbWVtY3B5KCZyZXQ2LT5zaW42X2FkZHIsICZpbjYtPnNpbjZfYWRkciwKLQkJICAgICAgIHNpemVvZihpbjYtPnNpbjZfYWRkcikpOworCQlpcHY2X2FkZHJfY29weSgmcmV0Ni0+c2luNl9hZGRyLCAmaW42LT5zaW42X2FkZHIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzc2LDI1ICs0MDAsMjMgQEAKIAkJbG9nX3ByaW50KCJzZW5kIEVPRiB0byBub2RlIGZhaWxlZDogJWQiLCByZXQpOwogfQogCitzdGF0aWMgdm9pZCBzY3RwX2luaXRfZmFpbGVkX2ZvcmVhY2goc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKK3sKKwljb24tPnNjdHBfYXNzb2MgPSAwOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0ZfQ09OTkVDVF9QRU5ESU5HLCAmY29uLT5mbGFncykpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KENGX1dSSVRFX1BFTkRJTkcsICZjb24tPmZsYWdzKSkKKwkJCXF1ZXVlX3dvcmsoc2VuZF93b3JrcXVldWUsICZjb24tPnN3b3JrKTsKKwl9Cit9CisKIC8qIElOSVQgZmFpbGVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIG5vZGUuLi4KICAgIHJlc3RhcnQgSU5JVCBvbiBhbGwgcGVuZGluZyBub2RlcyAqLwogc3RhdGljIHZvaWQgc2N0cF9pbml0X2ZhaWxlZCh2b2lkKQogewotCWludCBpOwotCXN0cnVjdCBjb25uZWN0aW9uICpjb247Ci0KIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQlmb3IgKGk9MTsgaTw9bWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKCFjb24pCi0JCQljb250aW51ZTsKLQkJY29uLT5zY3RwX2Fzc29jID0gMDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZjb24tPmZsYWdzKSkgewotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KENGX1dSSVRFX1BFTkRJTkcsICZjb24tPmZsYWdzKSkgewotCQkJCXF1ZXVlX3dvcmsoc2VuZF93b3JrcXVldWUsICZjb24tPnN3b3JrKTsKLQkJCX0KLQkJfQotCX0KKworCWZvcmVhY2hfY29ubihzY3RwX2luaXRfZmFpbGVkX2ZvcmVhY2gpOworCiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIH0KIApAQCAtMTMxMywxMyArMTMzNSwxMCBAQAogCiBzdGF0aWMgdm9pZCBjbGVhbl9vbmVfd3JpdGVxdWV1ZShzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKKwlzdHJ1Y3Qgd3JpdGVxdWV1ZV9lbnRyeSAqZSwgKnNhZmU7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdGVtcCwgJmNvbi0+d3JpdGVxdWV1ZSkgewotCQlzdHJ1Y3Qgd3JpdGVxdWV1ZV9lbnRyeSAqZSA9Ci0JCQlsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgc2FmZSwgJmNvbi0+d3JpdGVxdWV1ZSwgbGlzdCkgewogCQlsaXN0X2RlbCgmZS0+bGlzdCk7CiAJCWZyZWVfZW50cnkoZSk7CiAJfQpAQCAtMTM2OSwxNCArMTM4OCw3IEBACiAvKiBEaXNjYXJkIGFsbCBlbnRyaWVzIG9uIHRoZSB3cml0ZSBxdWV1ZXMgKi8KIHN0YXRpYyB2b2lkIGNsZWFuX3dyaXRlcXVldWVzKHZvaWQpCiB7Ci0JaW50IG5vZGVpZDsKLQotCWZvciAobm9kZWlkID0gMTsgbm9kZWlkIDw9IG1heF9ub2RlaWQ7IG5vZGVpZCsrKSB7Ci0JCXN0cnVjdCBjb25uZWN0aW9uICpjb24gPSBfX25vZGVpZDJjb24obm9kZWlkLCAwKTsKLQotCQlpZiAoY29uKQotCQkJY2xlYW5fb25lX3dyaXRlcXVldWUoY29uKTsKLQl9CisJZm9yZWFjaF9jb25uKGNsZWFuX29uZV93cml0ZXF1ZXVlKTsKIH0KIAogc3RhdGljIHZvaWQgd29ya19zdG9wKHZvaWQpCkBAIC0xNDA2LDIzICsxNDE4LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHN0b3BfY29ubihzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKQoreworCWNvbi0+ZmxhZ3MgfD0gMHgwRjsKKwlpZiAoY29uLT5zb2NrKQorCQljb24tPnNvY2stPnNrLT5za191c2VyX2RhdGEgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Nvbm4oc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKK3sKKwljbG9zZV9jb25uZWN0aW9uKGNvbiwgdHJ1ZSk7CisJaWYgKGNvbi0+b3RoZXJjb24pCisJCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbi0+b3RoZXJjb24pOworCWhsaXN0X2RlbCgmY29uLT5saXN0KTsKKwlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24pOworfQorCiB2b2lkIGRsbV9sb3djb21tc19zdG9wKHZvaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKLQogCS8qIFNldCBhbGwgdGhlIGZsYWdzIHRvIHByZXZlbnQgYW55CiAJICAgc29ja2V0IGFjdGl2aXR5LgogCSovCiAJbXV0ZXhfbG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8PSBtYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoY29uKSB7Ci0JCQljb24tPmZsYWdzIHw9IDB4MEY7Ci0JCQlpZiAoY29uLT5zb2NrKQotCQkJCWNvbi0+c29jay0+c2stPnNrX3VzZXJfZGF0YSA9IE5VTEw7Ci0JCX0KLQl9CisJZm9yZWFjaF9jb25uKHN0b3BfY29ubik7CiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIAogCXdvcmtfc3RvcCgpOwpAQCAtMTQzMCwyNSArMTQ0OCwyMCBAQAogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwogCWNsZWFuX3dyaXRlcXVldWVzKCk7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IG1heF9ub2RlaWQ7IGkrKykgewotCQljb24gPSBfX25vZGVpZDJjb24oaSwgMCk7Ci0JCWlmIChjb24pIHsKLQkJCWNsb3NlX2Nvbm5lY3Rpb24oY29uLCB0cnVlKTsKLQkJCWlmIChjb24tPm90aGVyY29uKQotCQkJCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbi0+b3RoZXJjb24pOwotCQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKLQkJfQotCX0KLQltYXhfbm9kZWlkID0gMDsKKwlmb3JlYWNoX2Nvbm4oZnJlZV9jb25uKTsKKwogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGNvbl9jYWNoZSk7Ci0JaWRyX2luaXQoJmNvbm5lY3Rpb25zX2lkcik7CiB9CiAKIGludCBkbG1fbG93Y29tbXNfc3RhcnQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAtRUlOVkFMOwogCXN0cnVjdCBjb25uZWN0aW9uICpjb247CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09OTl9IQVNIX1NJWkU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZjb25uZWN0aW9uX2hhc2hbaV0pOwogCiAJaW5pdF9sb2NhbCgpOwogCWlmICghZGxtX2xvY2FsX2NvdW50KSB7CmRpZmYgLS1naXQgYS9mcy9kbG0vdXNlci5jIGIvZnMvZGxtL3VzZXIuYwppbmRleCAwNjUxNDllLi5lYmNlOTk0IDEwMDY0NAotLS0gYS9mcy9kbG0vdXNlci5jCisrKyBiL2ZzL2RsbS91c2VyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQAogCiBzdGF0aWMgdm9pZCBjb21wYXRfaW5wdXQoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0ICprYiwKIAkJCSBzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiAqa2IzMiwKLQkJCSBzaXplX3QgY291bnQpCisJCQkgaW50IG5hbWVsZW4pCiB7CiAJa2ItPnZlcnNpb25bMF0gPSBrYjMyLT52ZXJzaW9uWzBdOwogCWtiLT52ZXJzaW9uWzFdID0ga2IzMi0+dmVyc2lvblsxXTsKQEAgLTk2LDggKzk2LDcgQEAKIAkgICAga2ItPmNtZCA9PSBETE1fVVNFUl9SRU1PVkVfTE9DS1NQQUNFKSB7CiAJCWtiLT5pLmxzcGFjZS5mbGFncyA9IGtiMzItPmkubHNwYWNlLmZsYWdzOwogCQlrYi0+aS5sc3BhY2UubWlub3IgPSBrYjMyLT5pLmxzcGFjZS5taW5vcjsKLQkJbWVtY3B5KGtiLT5pLmxzcGFjZS5uYW1lLCBrYjMyLT5pLmxzcGFjZS5uYW1lLCBjb3VudCAtCi0JCQlvZmZzZXRvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiwgaS5sc3BhY2UubmFtZSkpOworCQltZW1jcHkoa2ItPmkubHNwYWNlLm5hbWUsIGtiMzItPmkubHNwYWNlLm5hbWUsIG5hbWVsZW4pOwogCX0gZWxzZSBpZiAoa2ItPmNtZCA9PSBETE1fVVNFUl9QVVJHRSkgewogCQlrYi0+aS5wdXJnZS5ub2RlaWQgPSBrYjMyLT5pLnB1cmdlLm5vZGVpZDsKIAkJa2ItPmkucHVyZ2UucGlkID0ga2IzMi0+aS5wdXJnZS5waWQ7CkBAIC0xMTUsOCArMTE0LDcgQEAKIAkJa2ItPmkubG9jay5iYXN0YWRkciA9ICh2b2lkICopKGxvbmcpa2IzMi0+aS5sb2NrLmJhc3RhZGRyOwogCQlrYi0+aS5sb2NrLmxrc2IgPSAodm9pZCAqKShsb25nKWtiMzItPmkubG9jay5sa3NiOwogCQltZW1jcHkoa2ItPmkubG9jay5sdmIsIGtiMzItPmkubG9jay5sdmIsIERMTV9VU0VSX0xWQl9MRU4pOwotCQltZW1jcHkoa2ItPmkubG9jay5uYW1lLCBrYjMyLT5pLmxvY2submFtZSwgY291bnQgLQotCQkJb2Zmc2V0b2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIsIGkubG9jay5uYW1lKSk7CisJCW1lbWNweShrYi0+aS5sb2NrLm5hbWUsIGtiMzItPmkubG9jay5uYW1lLCBuYW1lbGVuKTsKIAl9CiB9CiAKQEAgLTUzOSw5ICs1MzcsMTYgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaWYgKCFrYnVmLT5pczY0Yml0KSB7CiAJCXN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyICprMzJidWY7CisJCWludCBuYW1lbGVuID0gMDsKKworCQlpZiAoY291bnQgPiBzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIpKQorCQkJbmFtZWxlbiA9IGNvdW50IC0gc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyKTsKKwogCQlrMzJidWYgPSAoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIgKilrYnVmOwotCQlrYnVmID0ga21hbGxvYyhjb3VudCArIDEgKyAoc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdCkgLQotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMikpLCBHRlBfS0VSTkVMKTsKKworCQkvKiBhZGQgMSBhZnRlciBuYW1lbGVuIHNvIHRoYXQgdGhlIG5hbWUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgKi8KKwkJa2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdCkgKyBuYW1lbGVuICsgMSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFrYnVmKSB7CiAJCQlrZnJlZShrMzJidWYpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC01NDksNyArNTU0LDggQEAKIAogCQlpZiAocHJvYykKIAkJCXNldF9iaXQoRExNX1BST0NfRkxBR1NfQ09NUEFULCAmcHJvYy0+ZmxhZ3MpOwotCQljb21wYXRfaW5wdXQoa2J1ZiwgazMyYnVmLCBjb3VudCArIDEpOworCisJCWNvbXBhdF9pbnB1dChrYnVmLCBrMzJidWYsIG5hbWVsZW4pOwogCQlrZnJlZShrMzJidWYpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZHJvcF9jYWNoZXMuYyBiL2ZzL2Ryb3BfY2FjaGVzLmMKaW5kZXggM2U1NjM3Zi4uNDRkNzI1ZiAxMDA2NDQKLS0tIGEvZnMvZHJvcF9jYWNoZXMuYworKysgYi9mcy9kcm9wX2NhY2hlcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCiAJCQljb250aW51ZTsKIAkJaWYgKGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMgPT0gMCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwppbmRleCBmNmNhZWIxLi44YjY1ZjI4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9jcnlwdG8uYworKysgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwpAQCAtOTQ2LDYgKzk0Niw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShnbG9iYWxfYXV0aF90b2ssCiAJCQkgICAgJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0LAogCQkJICAgIG1vdW50X2NyeXB0X3N0YXRfbGlzdCkgeworCQlpZiAoZ2xvYmFsX2F1dGhfdG9rLT5mbGFncyAmIEVDUllQVEZTX0FVVEhfVE9LX0ZORUspCisJCQljb250aW51ZTsKIAkJcmMgPSBlY3J5cHRmc19hZGRfa2V5c2lnKGNyeXB0X3N0YXQsIGdsb2JhbF9hdXRoX3Rvay0+c2lnKTsKIAkJaWYgKHJjKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGFkZGluZyBrZXlzaWc7IHJjID0gWyVkXVxuIiwgcmMpOwpAQCAtMTMyMiwxNCArMTMyNCwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1lY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b19jb250ZW50cyhzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKLQkJCQkgICAgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJCSAgICBjaGFyICp2aXJ0KQorZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9fY29udGVudHMoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAorCQkJCSAgICBjaGFyICp2aXJ0LCBzaXplX3QgdmlydF9sZW4pCiB7CiAJaW50IHJjOwogCiAJcmMgPSBlY3J5cHRmc193cml0ZV9sb3dlcihlY3J5cHRmc19kZW50cnktPmRfaW5vZGUsIHZpcnQsCi0JCQkJICAwLCBjcnlwdF9zdGF0LT5udW1faGVhZGVyX2J5dGVzX2F0X2Zyb250KTsKKwkJCQkgIDAsIHZpcnRfbGVuKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gd3JpdGUgaGVhZGVyICIKIAkJICAgICAgICJpbmZvcm1hdGlvbiB0byBsb3dlciBmaWxlOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLApAQCAtMTMzOSw3ICsxMzQwLDYgQEAKIAogc3RhdGljIGludAogZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9feGF0dHIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJCSBzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJCQkgY2hhciAqcGFnZV92aXJ0LCBzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgcmM7CkBAIC0xMzQ5LDYgKzEzNDksMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVjcnlwdGZzX2dldF96ZXJvZWRfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9aRVJPLCBvcmRlcik7CisJaWYgKHBhZ2UpCisJCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCXJldHVybiAwOworfQorCiAvKioKICAqIGVjcnlwdGZzX3dyaXRlX21ldGFkYXRhCiAgKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5CkBAIC0xMzY1LDcgKzEzNzYsOSBAQAogewogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CiAJY2hhciAqdmlydDsKKwlzaXplX3QgdmlydF9sZW47CiAJc2l6ZV90IHNpemUgPSAwOwogCWludCByYyA9IDA7CiAKQEAgLTEzODEsMzMgKzEzOTQsMzUgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisJdmlydF9sZW4gPSBjcnlwdF9zdGF0LT5udW1faGVhZGVyX2J5dGVzX2F0X2Zyb250OworCW9yZGVyID0gZ2V0X29yZGVyKHZpcnRfbGVuKTsKIAkvKiBSZWxlYXNlZCBpbiB0aGlzIGZ1bmN0aW9uICovCi0JdmlydCA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXZpcnQgPSAoY2hhciAqKWVjcnlwdGZzX2dldF96ZXJvZWRfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOwogCWlmICghdmlydCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfd3JpdGVfaGVhZGVyc192aXJ0KHZpcnQsIFBBR0VfQ0FDSEVfU0laRSwgJnNpemUsCi0JCQkJCSBjcnlwdF9zdGF0LCBlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfd3JpdGVfaGVhZGVyc192aXJ0KHZpcnQsIHZpcnRfbGVuLCAmc2l6ZSwgY3J5cHRfc3RhdCwKKwkJCQkJIGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHVubGlrZWx5KHJjKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3aGlsc3Qgd3JpdGluZyBoZWFkZXJzOyByYyA9IFslZF1cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikKLQkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b194YXR0cihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgICAgICBjcnlwdF9zdGF0LCB2aXJ0LCBzaXplKTsKKwkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b194YXR0cihlY3J5cHRmc19kZW50cnksIHZpcnQsCisJCQkJCQkgICAgICBzaXplKTsKIAllbHNlCi0JCXJjID0gZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9fY29udGVudHMoY3J5cHRfc3RhdCwKLQkJCQkJCQkgZWNyeXB0ZnNfZGVudHJ5LCB2aXJ0KTsKKwkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b19jb250ZW50cyhlY3J5cHRmc19kZW50cnksIHZpcnQsCisJCQkJCQkJIHZpcnRfbGVuKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igd3JpdGluZyBtZXRhZGF0YSBvdXQgdG8gbG93ZXIgZmlsZTsgIgogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiBvdXRfZnJlZToKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmlydCk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2aXJ0LCBvcmRlcik7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMjIwNiwxNyArMjIyMSwxOSBAQAogCQkJCQkgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGlyX2RlbnRyeSwKIAkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX3NpemUpCiB7CisJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQgPQorCQkmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAorCQkJZWNyeXB0ZnNfZGlyX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJY2hhciAqZGVjb2RlZF9uYW1lOwogCXNpemVfdCBkZWNvZGVkX25hbWVfc2l6ZTsKIAlzaXplX3QgcGFja2V0X3NpemU7CiAJaW50IHJjID0gMDsKIAotCWlmICgobmFtZV9zaXplID4gRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYX1NJWkUpCisJaWYgKChtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0dMT0JBTF9FTkNSWVBUX0ZJTEVOQU1FUykKKwkgICAgJiYgIShtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0VOQ1JZUFRFRF9WSUVXX0VOQUJMRUQpCisJICAgICYmIChuYW1lX3NpemUgPiBFQ1JZUFRGU19GTkVLX0VOQ1JZUFRFRF9GSUxFTkFNRV9QUkVGSVhfU0laRSkKIAkgICAgJiYgKHN0cm5jbXAobmFtZSwgRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYLAogCQkJRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYX1NJWkUpID09IDApKSB7Ci0JCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0ID0KLQkJCSZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCi0JCQkJZWNyeXB0ZnNfZGlyX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJCWNvbnN0IGNoYXIgKm9yaWdfbmFtZSA9IG5hbWU7CiAJCXNpemVfdCBvcmlnX25hbWVfc2l6ZSA9IG5hbWVfc2l6ZTsKIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwppbmRleCA1ZTU5NjU4Li4yZGRhNWFkIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9kZW50cnkuYworKysgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwpAQCAtODksNyArODksNyBAQAogCXJldHVybjsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGVjcnlwdGZzX2RvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gZWNyeXB0ZnNfZF9yZXZhbGlkYXRlLAogCS5kX3JlbGVhc2UgPSBlY3J5cHRmc19kX3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBjMTFmYzk1Li4wNjRjNTgyIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtMzI4LDYgKzMyOCw3IEBACiAgKi8KIHN0cnVjdCBlY3J5cHRmc19nbG9iYWxfYXV0aF90b2sgewogI2RlZmluZSBFQ1JZUFRGU19BVVRIX1RPS19JTlZBTElEIDB4MDAwMDAwMDEKKyNkZWZpbmUgRUNSWVBURlNfQVVUSF9UT0tfRk5FSyAgICAweDAwMDAwMDAyCiAJdTMyIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgbW91bnRfY3J5cHRfc3RhdF9saXN0OwogCXN0cnVjdCBrZXkgKmdsb2JhbF9hdXRoX3Rva19rZXk7CkBAIC01NzksNyArNTgwLDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlY3J5cHRmc19kaXJfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBlY3J5cHRmc19zeW1saW5rX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZWNyeXB0ZnNfc29wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wczsKIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVjcnlwdGZzX2FvcHM7CiBleHRlcm4gaW50IGVjcnlwdGZzX3ZlcmJvc2l0eTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZWNyeXB0ZnNfbWVzc2FnZV9idWZfbGVuOwpAQCAtNjE5LDcgKzYyMCw2IEBACiAJCSAgICAgICB1MzIgZmxhZ3MpOwogaW50IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAotCQkJCQlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUsCiAJCQkJCXN0cnVjdCBuYW1laWRhdGEgKmVjcnlwdGZzX25kKTsKIGludCBlY3J5cHRmc19kZWNvZGVfYW5kX2RlY3J5cHRfZmlsZW5hbWUoY2hhciAqKmRlY3J5cHRlZF9uYW1lLApAQCAtNjk2LDcgKzY5Niw3IEBACiBpbnQgZWNyeXB0ZnNfYWRkX2tleXNpZyhzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwgY2hhciAqc2lnKTsKIGludAogZWNyeXB0ZnNfYWRkX2dsb2JhbF9hdXRoX3RvayhzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdCwKLQkJCSAgIGNoYXIgKnNpZyk7CisJCQkgICBjaGFyICpzaWcsIHUzMiBnbG9iYWxfYXV0aF90b2tfZmxhZ3MpOwogaW50IGVjcnlwdGZzX2dldF9nbG9iYWxfYXV0aF90b2tfZm9yX3NpZygKIAlzdHJ1Y3QgZWNyeXB0ZnNfZ2xvYmFsX2F1dGhfdG9rICoqZ2xvYmFsX2F1dGhfdG9rLAogCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0LCBjaGFyICpzaWcpOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggNTY5Nzg5OS4uNTViMzE0NSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC0yNDYsNyArMjQ2LDYgQEAKICAqLwogaW50IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAotCQkJCQlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUsCiAJCQkJCXN0cnVjdCBuYW1laWRhdGEgKmVjcnlwdGZzX25kKQogewpAQCAtMjU0LDYgKzI1Myw3IEBACiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7CiAJc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdDsKKwlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdDsKIAljaGFyICpwYWdlX3ZpcnQgPSBOVUxMOwogCXU2NCBmaWxlX3NpemU7CiAJaW50IHJjID0gMDsKQEAgLTMxNCw2ICszMTQsMTEgQEAKIAkJCWdvdG8gb3V0X2ZyZWVfa21lbTsKIAkJfQogCX0KKwljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoCisJCQkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CisJLyogVE9ETzogbG9jayBmb3IgY3J5cHRfc3RhdCBjb21wYXJpc29uICovCisJaWYgKCEoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19QT0xJQ1lfQVBQTElFRCkpCisJCQllY3J5cHRmc19zZXRfZGVmYXVsdF9zaXplcyhjcnlwdF9zdGF0KTsKIAlyYyA9IGVjcnlwdGZzX3JlYWRfYW5kX3ZhbGlkYXRlX2hlYWRlcl9yZWdpb24ocGFnZV92aXJ0LAogCQkJCQkJICAgICAgZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAocmMpIHsKQEAgLTM2Miw5ICszNjcsNyBAQAogewogCWNoYXIgKmVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lID0gTlVMTDsKIAlzaXplX3QgZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZTsKLQlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCA9IE5VTEw7CiAJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQgPSBOVUxMOwotCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvOwogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnksICpsb3dlcl9kZW50cnk7CiAJaW50IHJjID0gMDsKIApAQCAtMzg4LDI2ICszOTEsMTUgQEAKIAl9CiAJaWYgKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkKIAkJZ290byBsb29rdXBfYW5kX2ludGVycG9zZTsKLQlpbm9kZV9pbmZvID0gIGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAoaW5vZGVfaW5mbykgewotCQljcnlwdF9zdGF0ID0gJmlub2RlX2luZm8tPmNyeXB0X3N0YXQ7Ci0JCS8qIFRPRE86IGxvY2sgZm9yIGNyeXB0X3N0YXQgY29tcGFyaXNvbiAqLwotCQlpZiAoIShjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX1BPTElDWV9BUFBMSUVEKSkKLQkJCWVjcnlwdGZzX3NldF9kZWZhdWx0X3NpemVzKGNyeXB0X3N0YXQpOwotCX0KLQlpZiAoY3J5cHRfc3RhdCkKLQkJbW91bnRfY3J5cHRfc3RhdCA9IGNyeXB0X3N0YXQtPm1vdW50X2NyeXB0X3N0YXQ7Ci0JZWxzZQotCQltb3VudF9jcnlwdF9zdGF0ID0gJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZSgKLQkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7Ci0JaWYgKCEoY3J5cHRfc3RhdCAmJiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19FTkNSWVBUX0ZJTEVOQU1FUykpCi0JICAgICYmICEobW91bnRfY3J5cHRfc3RhdCAmJiAobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MKLQkJCQkgICAgICYgRUNSWVBURlNfR0xPQkFMX0VOQ1JZUFRfRklMRU5BTUVTKSkpCisJbW91bnRfY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCisJCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX3NiKS0+bW91bnRfY3J5cHRfc3RhdDsKKwlpZiAoIShtb3VudF9jcnlwdF9zdGF0CisJICAgICYmIChtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0dMT0JBTF9FTkNSWVBUX0ZJTEVOQU1FUykpKQogCQlnb3RvIGxvb2t1cF9hbmRfaW50ZXJwb3NlOwogCWRwdXQobG93ZXJfZGVudHJ5KTsKIAlyYyA9IGVjcnlwdGZzX2VuY3J5cHRfYW5kX2VuY29kZV9maWxlbmFtZSgKIAkJJmVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lLCAmZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZSwKLQkJY3J5cHRfc3RhdCwgbW91bnRfY3J5cHRfc3RhdCwgZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJTlVMTCwgbW91bnRfY3J5cHRfc3RhdCwgZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBlbmNyeXB0IGFuZCBlbmNvZGUgIgpAQCAtNDI2LDcgKzQxOCw3IEBACiAJfQogbG9va3VwX2FuZF9pbnRlcnBvc2U6CiAJcmMgPSBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihlY3J5cHRmc19kZW50cnksIGxvd2VyX2RlbnRyeSwKLQkJCQkJCSBjcnlwdF9zdGF0LCBlY3J5cHRmc19kaXJfaW5vZGUsCisJCQkJCQkgZWNyeXB0ZnNfZGlyX2lub2RlLAogCQkJCQkJIGVjcnlwdGZzX25kKTsKIAlnb3RvIG91dDsKIG91dF9kX2Ryb3A6CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwppbmRleCBmZjUzOTQyLi5lNGE2MjIzIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKQEAgLTIzNzUsNyArMjM3NSw3IEBACiAKIGludAogZWNyeXB0ZnNfYWRkX2dsb2JhbF9hdXRoX3RvayhzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdCwKLQkJCSAgICAgY2hhciAqc2lnKQorCQkJICAgICBjaGFyICpzaWcsIHUzMiBnbG9iYWxfYXV0aF90b2tfZmxhZ3MpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2dsb2JhbF9hdXRoX3RvayAqbmV3X2F1dGhfdG9rOwogCWludCByYyA9IDA7CkBAIC0yMzg5LDYgKzIzODksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJbWVtY3B5KG5ld19hdXRoX3Rvay0+c2lnLCBzaWcsIEVDUllQVEZTX1NJR19TSVpFX0hFWCk7CisJbmV3X2F1dGhfdG9rLT5mbGFncyA9IGdsb2JhbF9hdXRoX3Rva19mbGFnczsKIAluZXdfYXV0aF90b2stPnNpZ1tFQ1JZUFRGU19TSUdfU0laRV9IRVhdID0gJ1wwJzsKIAltdXRleF9sb2NrKCZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdF9tdXRleCk7CiAJbGlzdF9hZGQoJm5ld19hdXRoX3Rvay0+bW91bnRfY3J5cHRfc3RhdF9saXN0LApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IDc4OWNmMmUuLmFlZDU2YzIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCQljYXNlIGVjcnlwdGZzX29wdF9lY3J5cHRmc19zaWc6CiAJCQlzaWdfc3JjID0gYXJnc1swXS5mcm9tOwogCQkJcmMgPSBlY3J5cHRmc19hZGRfZ2xvYmFsX2F1dGhfdG9rKG1vdW50X2NyeXB0X3N0YXQsCi0JCQkJCQkJICBzaWdfc3JjKTsKKwkJCQkJCQkgIHNpZ19zcmMsIDApOwogCQkJaWYgKHJjKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhdHRlbXB0aW5nIHRvIHJlZ2lzdGVyICIKIAkJCQkgICAgICAgImdsb2JhbCBzaWc7IHJjID0gWyVkXVxuIiwgcmMpOwpAQCAtMzcwLDcgKzM3MCw4IEBACiAJCQkJRUNSWVBURlNfU0lHX1NJWkVfSEVYXSA9ICdcMCc7CiAJCQlyYyA9IGVjcnlwdGZzX2FkZF9nbG9iYWxfYXV0aF90b2soCiAJCQkJbW91bnRfY3J5cHRfc3RhdCwKLQkJCQltb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfZGVmYXVsdF9mbmVrX3NpZyk7CisJCQkJbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2RlZmF1bHRfZm5la19zaWcsCisJCQkJRUNSWVBURlNfQVVUSF9UT0tfRk5FSyk7CiAJCQlpZiAocmMpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgIgogCQkJCSAgICAgICAiZ2xvYmFsIGZuZWsgc2lnIFslc107IHJjID0gWyVkXVxuIiwKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMDExYjliOC4uYzVjNDI0ZiAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTQxNywxMCArNDE3LDEwIEBACiAJZXBfdW5yZWdpc3Rlcl9wb2xsd2FpdChlcCwgZXBpKTsKIAogCS8qIFJlbW92ZSB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIGxpc3Qgb2YgZXBvbGwgaG9va3MgKi8KLQlzcGluX2xvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWlmIChlcF9pc19saW5rZWQoJmVwaS0+ZmxsaW5rKSkKIAkJbGlzdF9kZWxfaW5pdCgmZXBpLT5mbGxpbmspOwotCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2VwX2xvY2spOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCiAJcmJfZXJhc2UoJmVwaS0+cmJuLCAmZXAtPnJicik7CiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKIAogCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBnZXQgImZpbGUtPmZfZXBfbG9jayIgYmVjYXVzZSBpdCBpcyBub3QKKwkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ3JlIGluIHRoZSAic3RydWN0IGZpbGUiCiAJICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vb25lIGlzIHVzaW5nIHRoaXMgZmlsZSBhbnltb3JlLgogCSAqIFNvLCBmb3IgZXhhbXBsZSwgZXBvbGxfY3RsKCkgY2Fubm90IGhpdCBoZXJlIHNpY25lIGlmIHdlIHJlYWNoIHRoaXMKQEAgLTU0Nyw2ICs1NDcsOCBAQAogCSAqIHdpbGwgY29ycmVjdGx5IHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9uLiBXZSBkbyBuZWVkIHRvIGFjcXVpcmUKIAkgKiAiZXAtPm10eCIgYWZ0ZXIgImVwbXV0ZXgiIGJlY2F1c2UgZXBfcmVtb3ZlKCkgcmVxdWlyZXMgaXQgd2hlbiBjYWxsZWQKIAkgKiBmcm9tIGFueXdoZXJlIGJ1dCBlcF9mcmVlKCkuCisJICoKKwkgKiBCZXNpZGVzLCBlcF9yZW1vdmUoKSBhY3F1aXJlcyB0aGUgbG9jaywgc28gd2UgY2FuJ3QgaG9sZCBpdCBoZXJlLgogCSAqLwogCW11dGV4X2xvY2soJmVwbXV0ZXgpOwogCkBAIC03ODUsOSArNzg3LDkgQEAKIAkJZ290byBlcnJvcl91bnJlZ2lzdGVyOwogCiAJLyogQWRkIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGVwb2xsIGhvb2sgZm9yIHRoaXMgZmlsZSAqLwotCXNwaW5fbG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZlcGktPmZsbGluaywgJnRmaWxlLT5mX2VwX2xpbmtzKTsKLQlzcGluX3VubG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl91bmxvY2soJnRmaWxlLT5mX2xvY2spOwogCiAJLyoKIAkgKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgUkIgdHJlZS4gQWxsIFJCIHRyZWUgb3BlcmF0aW9ucyBhcmUKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA5MjliNTgwLi5iOWYxYzE0IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgpAQCAtMTI3LDYgKzEyOCw5IEBACiAJCQkJIE1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGV4aXQ7CisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjaygmbmQucGF0aCwgTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXhpdDsKIAogCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZfE9fTEFSR0VGSUxFKTsKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CkBAIC02NzQsNiArNjc4LDkgQEAKIAllcnIgPSBpbm9kZV9wZXJtaXNzaW9uKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wYXRoX3B1dDsKKwllcnIgPSBpbWFfcGF0aF9jaGVjaygmbmQucGF0aCwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcGF0aF9wdXQ7CiAKIAlmaWxlID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBPX1JET05MWXxPX0xBUkdFRklMRSk7CiAJaWYgKElTX0VSUihmaWxlKSkKQEAgLTExODQsNiArMTE5MSw5IEBACiAJcmV0dmFsID0gc2VjdXJpdHlfYnBybV9jaGVjayhicHJtKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGltYV9icHJtX2NoZWNrKGJwcm0pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKIAkvKiBrZXJuZWwgbW9kdWxlIGxvYWRlciBmaXh1cCAqLwogCS8qIHNvIHdlIGRvbid0IHRyeSB0byBsb2FkIHJ1biBtb2Rwcm9iZSBpbiBrZXJuZWwgc3BhY2UuICovCkBAIC0xMjg0LDYgKzEyOTQsNyBAQAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKwljdXJyZW50LT5pbl9leGVjdmUgPSAxOwogCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CkBAIC0xMzM3LDYgKzEzNDgsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOwpAQCAtMTM1NSw2ICsxMzY3LDcgQEAKIAl9CiAKIG91dF91bmxvY2s6CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9iYWxsb2MuYyBiL2ZzL2V4dDIvYmFsbG9jLmMKaW5kZXggNGEyOWQ2My4uN2Y4ZDJlNSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9iYWxsb2MuYworKysgYi9mcy9leHQyL2JhbGxvYy5jCkBAIC01NzAsNyArNTcwLDcgQEAKIGVycm9yX3JldHVybjoKIAlicmVsc2UoYml0bWFwX2JoKTsKIAlyZWxlYXNlX2Jsb2NrcyhzYiwgZnJlZWQpOwotCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGZyZWVkKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgZnJlZWQpOwogfQogCiAvKioKQEAgLTEyNDcsNyArMTI0Nyw3IEBACiAJLyoKIAkgKiBDaGVjayBxdW90YSBmb3IgYWxsb2NhdGlvbiBvZiB0aGlzIGJsb2NrLgogCSAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgbnVtKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIG51bSkpIHsKIAkJKmVycnAgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDA5LDcgKzE0MDksNyBAQAogCiAJKmVycnAgPSAwOwogCWJyZWxzZShiaXRtYXBfYmgpOwotCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsICpjb3VudC1udW0pOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQtbnVtKTsKIAkqY291bnQgPSBudW07CiAJcmV0dXJuIHJldF9ibG9jazsKIApAQCAtMTQyMCw3ICsxNDIwLDcgQEAKIAkgKiBVbmRvIHRoZSBibG9jayBhbGxvY2F0aW9uCiAJICovCiAJaWYgKCFwZXJmb3JtZWRfYWxsb2NhdGlvbikKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgKmNvdW50KTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudCk7CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQyL2lhbGxvYy5jIGIvZnMvZXh0Mi9pYWxsb2MuYwppbmRleCA2NjMyMWE4Li4xNTM4N2M5IDEwMDY0NAotLS0gYS9mcy9leHQyL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDIvaWFsbG9jLmMKQEAgLTEyMSw4ICsxMjEsOCBAQAogCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkgewogCQkvKiBRdW90YSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGluIGlwdXQoKSAqLwogCQlleHQyX3hhdHRyX2RlbGV0ZV9pbm9kZShpbm9kZSk7Ci0JICAgIAlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQkJRFFVT1RfRFJPUChpbm9kZSk7CisJCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwkJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCX0KIAogCWVzID0gRVhUMl9TQihzYiktPnNfZXM7CkBAIC01ODYsNyArNTg2LDcgQEAKIAkJZ290byBmYWlsX2Ryb3A7CiAJfQogCi0JaWYgKERRVU9UX0FMTE9DX0lOT0RFKGlub2RlKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CiAJCWVyciA9IC1FRFFVT1Q7CiAJCWdvdG8gZmFpbF9kcm9wOwogCX0KQEAgLTYwNSwxMCArNjA1LDEwIEBACiAJcmV0dXJuIGlub2RlOwogCiBmYWlsX2ZyZWVfZHJvcDoKLQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKKwl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CiAKIGZhaWxfZHJvcDoKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCWlub2RlLT5pX25saW5rID0gMDsKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuYwppbmRleCAyM2ZmZjJmLi5iNDNiOTU1NiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CiAJICAgIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpIHsKLQkJZXJyb3IgPSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgaWF0dHIpID8gLUVEUVVPVCA6IDA7CisJCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBpYXR0cikgPyAtRURRVU9UIDogMDsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCA3YzZlMzYwLi5mOTgzMjI1IDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0xMzMxLDYgKzEzMzEsNyBAQAogCQkJCXNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA6IHRvcmVhZDsKIAogCQl0bXBfYmguYl9zdGF0ZSA9IDA7CisJCXRtcF9iaC5iX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJCWVyciA9IGV4dDJfZ2V0X2Jsb2NrKGlub2RlLCBibGssICZ0bXBfYmgsIDApOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmMKaW5kZXggOTg3YTUyNi4uNzkxMzUzMSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi94YXR0ci5jCisrKyBiL2ZzL2V4dDIveGF0dHIuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJCQkJZWFfYmRlYnVnKG5ld19iaCwgInJldXNpbmcgYmxvY2siKTsKIAogCQkJCWVycm9yID0gLUVEUVVPVDsKLQkJCQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKSB7CisJCQkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpIHsKIAkJCQkJdW5sb2NrX2J1ZmZlcihuZXdfYmgpOwogCQkJCQlnb3RvIGNsZWFudXA7CiAJCQkJfQpAQCAtNjk5LDcgKzY5OSw3IEBACiAJCSAqIGFzIGlmIG5vdGhpbmcgaGFwcGVuZWQgYW5kIGNsZWFudXAgdGhlIHVudXNlZCBibG9jayAqLwogCQlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT1NQQykgewogCQkJaWYgKG5ld19iaCAmJiBuZXdfYmggIT0gb2xkX2JoKQotCQkJCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQogCX0gZWxzZQpAQCAtNzMxLDcgKzczMSw3IEBACiAJCQlsZTMyX2FkZF9jcHUoJkhEUihvbGRfYmgpLT5oX3JlZmNvdW50LCAtMSk7CiAJCQlpZiAoY2UpCiAJCQkJbWJfY2FjaGVfZW50cnlfcmVsZWFzZShjZSk7Ci0JCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KG9sZF9iaCk7CiAJCQllYV9iZGVidWcob2xkX2JoLCAicmVmY291bnQgbm93PSVkIiwKIAkJCQlsZTMyX3RvX2NwdShIRFIob2xkX2JoKS0+aF9yZWZjb3VudCkpOwpAQCAtNzk0LDcgKzc5NCw3IEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCX0KIAlFWFQyX0koaW5vZGUpLT5pX2ZpbGVfYWNsID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggMGRiZjFjMC4uMjI1MjAyZCAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC02NzYsNyArNjc2LDcgQEAKIAl9CiAJZXh0M19mcmVlX2Jsb2Nrc19zYihoYW5kbGUsIHNiLCBibG9jaywgY291bnQsICZkcXVvdF9mcmVlZF9ibG9ja3MpOwogCWlmIChkcXVvdF9mcmVlZF9ibG9ja3MpCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGRxdW90X2ZyZWVkX2Jsb2Nrcyk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBkcXVvdF9mcmVlZF9ibG9ja3MpOwogCXJldHVybjsKIH0KIApAQCAtMTUwMiw3ICsxNTAyLDcgQEAKIAkvKgogCSAqIENoZWNrIHF1b3RhIGZvciBhbGxvY2F0aW9uIG9mIHRoaXMgYmxvY2suCiAJICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBudW0pKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgbnVtKSkgewogCQkqZXJycCA9IC1FRFFVT1Q7CiAJCXJldHVybiAwOwogCX0KQEAgLTE3MTQsNyArMTcxNCw3IEBACiAKIAkqZXJycCA9IDA7CiAJYnJlbHNlKGJpdG1hcF9iaCk7Ci0JRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgKmNvdW50LW51bSk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudC1udW0pOwogCSpjb3VudCA9IG51bTsKIAlyZXR1cm4gcmV0X2Jsb2NrOwogCkBAIC0xNzI5LDcgKzE3MjksNyBAQAogCSAqIFVuZG8gdGhlIGJsb2NrIGFsbG9jYXRpb24KIAkgKi8KIAlpZiAoIXBlcmZvcm1lZF9hbGxvY2F0aW9uKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAqY291bnQpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgKmNvdW50KTsKIAlicmVsc2UoYml0bWFwX2JoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaWFsbG9jLmMgYi9mcy9leHQzL2lhbGxvYy5jCmluZGV4IDhkZTZjNzIuLmRkMTNkNjAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaWFsbG9jLmMKKysrIGIvZnMvZXh0My9pYWxsb2MuYwpAQCAtMTIzLDEwICsxMjMsMTAgQEAKIAkgKiBOb3RlOiB3ZSBtdXN0IGZyZWUgYW55IHF1b3RhIGJlZm9yZSBsb2NraW5nIHRoZSBzdXBlcmJsb2NrLAogCSAqIGFzIHdyaXRpbmcgdGhlIHF1b3RhIHRvIGRpc2sgbWF5IG5lZWQgdGhlIGxvY2sgYXMgd2VsbC4KIAkgKi8KLQlEUVVPVF9JTklUKGlub2RlKTsKKwl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJZXh0M194YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7Ci0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAogCWlzX2RpcmVjdG9yeSA9IFNfSVNESVIoaW5vZGUtPmlfbW9kZSk7CiAKQEAgLTU4OSw3ICs1ODksNyBAQAogCQlzaXplb2Yoc3RydWN0IGV4dDNfaW5vZGUpIC0gRVhUM19HT09EX09MRF9JTk9ERV9TSVpFIDogMDsKIAogCXJldCA9IGlub2RlOwotCWlmKERRVU9UX0FMTE9DX0lOT0RFKGlub2RlKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CiAJCWVyciA9IC1FRFFVT1Q7CiAJCWdvdG8gZmFpbF9kcm9wOwogCX0KQEAgLTYyMCwxMCArNjIwLDEwIEBACiAJcmV0dXJuIHJldDsKIAogZmFpbF9mcmVlX2Ryb3A6Ci0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwogCiBmYWlsX2Ryb3A6Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggNWZhNDUzYi4uNGEwOWZmMSAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTQzNSw2ICsxNDM1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYnVmZmVyX3VubWFwcGVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuICFidWZmZXJfbWFwcGVkKGJoKTsKK30KIC8qCiAgKiBOb3RlIHRoYXQgd2UgYWx3YXlzIHN0YXJ0IGEgdHJhbnNhY3Rpb24gZXZlbiBpZiB3ZSdyZSBub3Qgam91cm5hbGxpbmcKICAqIGRhdGEuICBUaGlzIGlzIHRvIHByZXNlcnZlIG9yZGVyaW5nOiBhbnkgaG9sZSBpbnN0YW50aWF0aW9uIHdpdGhpbgpAQCAtMTUwNSw2ICsxNTA5LDE1IEBACiAJaWYgKGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpKQogCQlnb3RvIG91dF9mYWlsOwogCisJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSB7CisJCWNyZWF0ZV9lbXB0eV9idWZmZXJzKHBhZ2UsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSwKKwkJCQkoMSA8PCBCSF9EaXJ0eSl8KDEgPDwgQkhfVXB0b2RhdGUpKTsKKwl9IGVsc2UgaWYgKCF3YWxrX3BhZ2VfYnVmZmVycyhOVUxMLCBwYWdlX2J1ZmZlcnMocGFnZSksIDAsIFBBR0VfQ0FDSEVfU0laRSwgTlVMTCwgYnVmZmVyX3VubWFwcGVkKSkgeworCQkvKiBQcm92aWRlIE5VTEwgaW5zdGVhZCBvZiBnZXRfYmxvY2sgc28gdGhhdCB3ZSBjYXRjaCBidWdzIGlmIGJ1ZmZlcnMgd2VyZW4ndCByZWFsbHkgbWFwcGVkICovCisJCXJldHVybiBibG9ja193cml0ZV9mdWxsX3BhZ2UocGFnZSwgTlVMTCwgd2JjKTsKKwl9CisJcGFnZV9idWZzID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCBleHQzX3dyaXRlcGFnZV90cmFuc19ibG9ja3MoaW5vZGUpKTsKIAogCWlmIChJU19FUlIoaGFuZGxlKSkgewpAQCAtMTUxMiwxMSArMTUyNSw2IEBACiAJCWdvdG8gb3V0X2ZhaWw7CiAJfQogCi0JaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSB7Ci0JCWNyZWF0ZV9lbXB0eV9idWZmZXJzKHBhZ2UsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSwKLQkJCQkoMSA8PCBCSF9EaXJ0eSl8KDEgPDwgQkhfVXB0b2RhdGUpKTsKLQl9Ci0JcGFnZV9idWZzID0gcGFnZV9idWZmZXJzKHBhZ2UpOwogCXdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZzLCAwLAogCQkJUEFHRV9DQUNIRV9TSVpFLCBOVUxMLCBiZ2V0X29uZSk7CiAKQEAgLTMwNTUsNyArMzA2Myw3IEBACiAJCQllcnJvciA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQotCQllcnJvciA9IERRVU9UX1RSQU5TRkVSKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQllcnJvciA9IHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKIAkJaWYgKGVycm9yKSB7CiAJCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQkJcmV0dXJuIGVycm9yOwpAQCAtMzE0Niw3ICszMTU0LDcgQEAKIAkJcmV0ID0gMiAqIChicHAgKyBpbmRpcmVjdHMpICsgMjsKIAogI2lmZGVmIENPTkZJR19RVU9UQQotCS8qIFdlIGtub3cgdGhhdCBzdHJ1Y3R1cmUgd2FzIGFscmVhZHkgYWxsb2NhdGVkIGR1cmluZyBEUVVPVF9JTklUIHNvCisJLyogV2Uga25vdyB0aGF0IHN0cnVjdHVyZSB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgZHVyaW5nIHZmc19kcV9pbml0IHNvCiAJICogd2Ugd2lsbCBiZSB1cGRhdGluZyBvbmx5IHRoZSBkYXRhIGJsb2NrcyArIGlub2RlcyAqLwogCXJldCArPSAyKkVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKICNlbmRpZgpAQCAtMzIzNyw3ICszMjQ1LDcgQEAKICAqIGlfc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IGdlbmVyaWNfY29tbWl0X3dyaXRlKCkgYW5kIHdlIHRodXMgbmVlZAogICogdG8gaW5jbHVkZSB0aGUgdXBkYXRlZCBpbm9kZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAqCi0gKiBBbHNvLCBEUVVPVF9BTExPQ19TUEFDRSgpIHdpbGwgYWx3YXlzIGRpcnR5IHRoZSBpbm9kZSB3aGVuIGJsb2NrcworICogQWxzbywgdmZzX2RxX2FsbG9jX3NwYWNlKCkgd2lsbCBhbHdheXMgZGlydHkgdGhlIGlub2RlIHdoZW4gYmxvY2tzCiAgKiBhcmUgYWxsb2NhdGVkIHRvIHRoZSBmaWxlLgogICoKICAqIElmIHRoZSBpbm9kZSBpcyBtYXJrZWQgc3luY2hyb25vdXMsIHdlIGRvbid0IGhvbm91ciB0aGF0IGhlcmUgLSBkb2luZwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IDRkYjRmZmEuLmUyZmM2M2MgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTIwNDksNyArMjA0OSw3IEBACiAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28gaW4KIAkgKiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwotCURRVU9UX0lOSVQoZGVudHJ5LT5kX2lub2RlKTsKKwl2ZnNfZHFfaW5pdChkZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yMTA4LDcgKzIxMDgsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBxdW90YXMgYmVmb3JlIHNvIHRoYXQgZXZlbnR1YWwgd3JpdGVzIGdvCiAJICogaW4gc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KLQlEUVVPVF9JTklUKGRlbnRyeS0+ZF9pbm9kZSk7CisJdmZzX2RxX2luaXQoZGVudHJ5LT5kX2lub2RlKTsKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RFTEVURV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwpAQCAtMjI3Miw3ICsyMjcyLDcgQEAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28KIAkgKiBpbiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwogCWlmIChuZXdfZGVudHJ5LT5kX2lub2RlKQotCQlEUVVPVF9JTklUKG5ld19kZW50cnktPmRfaW5vZGUpOworCQl2ZnNfZHFfaW5pdChuZXdfZGVudHJ5LT5kX2lub2RlKTsKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQob2xkX2RpciwgMiAqCiAJCQkJCUVYVDNfREFUQV9UUkFOU19CTE9DS1Mob2xkX2Rpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDRhOTcwNDEuLjllNWI4ZTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTcwNyw4ICs3MDcsNiBAQAogI2RlZmluZSBRVFlQRTJOQU1FKHQpICgodCk9PVVTUlFVT1RBPyJ1c2VyIjoiZ3JvdXAiKQogI2RlZmluZSBRVFlQRTJNT1BUKG9uLCB0KSAoKHQpPT1VU1JRVU9UQT8oKG9uKSMjVVNSSlFVT1RBKTooKG9uKSMjR1JQSlFVT1RBKSkKIAotc3RhdGljIGludCBleHQzX2RxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpOwotc3RhdGljIGludCBleHQzX2RxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSk7CiBzdGF0aWMgaW50IGV4dDNfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CiBzdGF0aWMgaW50IGV4dDNfYWNxdWlyZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKIHN0YXRpYyBpbnQgZXh0M19yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwpAQCAtNzIzLDggKzcyMSw4IEBACiAJCQkJY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CiAKIHN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQzX3F1b3RhX29wZXJhdGlvbnMgPSB7Ci0JLmluaXRpYWxpemUJPSBleHQzX2RxdW90X2luaXRpYWxpemUsCi0JLmRyb3AJCT0gZXh0M19kcXVvdF9kcm9wLAorCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKKwkuZHJvcAkJPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLAogCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAogCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKQEAgLTE0MzgsNyArMTQzNiw3IEBACiAJCX0KIAogCQlsaXN0X2FkZCgmRVhUM19JKGlub2RlKS0+aV9vcnBoYW4sICZFWFQzX1NCKHNiKS0+c19vcnBoYW4pOwotCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJdmZzX2RxX2luaXQoaW5vZGUpOwogCQlpZiAoaW5vZGUtPmlfbmxpbmspIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJIiVzOiB0cnVuY2F0aW5nIGlub2RlICVsdSB0byAlTGQgYnl0ZXNcbiIsCkBAIC0yNzAyLDcgKzI3MDAsNyBAQAogICogUHJvY2VzcyAxICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3MgMgogICogZXh0M19jcmVhdGUoKSAgICAgICAgICAgICAgICAgICAgIHF1b3RhX3N5bmMoKQogICogICBqb3VybmFsX3N0YXJ0KCkgICAgICAgICAgICAgICAgICAgd3JpdGVfZHF1b3QoKQotICogICBEUVVPVF9JTklUKCkgICAgICAgICAgICAgICAgICAgICAgICBkb3duKGRxaW9fbXV0ZXgpCisgKiAgIHZmc19kcV9pbml0KCkgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19tdXRleCkKICAqICAgICBkb3duKGRxaW9fbXV0ZXgpICAgICAgICAgICAgICAgICAgICBqb3VybmFsX3N0YXJ0KCkKICAqCiAgKi8KQEAgLTI3MTQsNDQgKzI3MTIsNiBAQAogCXJldHVybiBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5maWxlc1tkcXVvdC0+ZHFfdHlwZV07CiB9CiAKLXN0YXRpYyBpbnQgZXh0M19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCWhhbmRsZV90ICpoYW5kbGU7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGNyZWF0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmIChJU19FUlIoaGFuZGxlKSkKLQkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKLQlyZXQgPSBkcXVvdF9pbml0aWFsaXplKGlub2RlLCB0eXBlKTsKLQllcnIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBleHQzX2RxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQloYW5kbGVfdCAqaGFuZGxlOwotCWludCByZXQsIGVycjsKLQotCS8qIFdlIG1heSBkZWxldGUgcXVvdGEgc3RydWN0dXJlIHNvIHdlIG5lZWQgdG8gcmVzZXJ2ZSBlbm91Z2ggYmxvY2tzICovCi0JaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAyKkVYVDNfUVVPVEFfREVMX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQkvKgotCQkgKiBXZSBjYWxsIGRxdW90X2Ryb3AoKSBhbnl3YXkgdG8gYXQgbGVhc3QgcmVsZWFzZSByZWZlcmVuY2VzCi0JCSAqIHRvIHF1b3RhIHN0cnVjdHVyZXMgc28gdGhhdCB1bW91bnQgZG9lcyBub3QgaGFuZy4KLQkJICovCi0JCWRxdW90X2Ryb3AoaW5vZGUpOwotCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwotCX0KLQlyZXQgPSBkcXVvdF9kcm9wKGlub2RlKTsKLQllcnIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBleHQzX3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CiAJaW50IHJldCwgZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My94YXR0ci5jIGIvZnMvZXh0My94YXR0ci5jCmluZGV4IDE3NTQxNGEuLjgzYjdiZTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMveGF0dHIuYworKysgYi9mcy9leHQzL3hhdHRyLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCQllcnJvciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQllYV9iZGVidWcoYmgsICJyZWZjb3VudCBub3c9JWQ7IHJlbGVhc2luZyIsCiAJCQkgIGxlMzJfdG9fY3B1KEJIRFIoYmgpLT5oX3JlZmNvdW50KSk7CiAJCWlmIChjZSkKQEAgLTc3NCw3ICs3NzQsNyBAQAogCQkJCS8qIFRoZSBvbGQgYmxvY2sgaXMgcmVsZWFzZWQgYWZ0ZXIgdXBkYXRpbmcKIAkJCQkgICB0aGUgaW5vZGUuICovCiAJCQkJZXJyb3IgPSAtRURRVU9UOwotCQkJCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgMSkpCisJCQkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpCiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQllcnJvciA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKIAkJCQkJCQkJICAgICAgbmV3X2JoKTsKQEAgLTg0OCw3ICs4NDgsNyBAQAogCXJldHVybiBlcnJvcjsKIAogY2xlYW51cF9kcXVvdDoKLQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJZ290byBjbGVhbnVwOwogCiBiYWRfYmxvY2s6CmRpZmYgLS1naXQgYS9mcy9leHQ0L2JhbGxvYy5jIGIvZnMvZXh0NC9iYWxsb2MuYwppbmRleCBkZTk0NTliLi4zOGY0MGQ1IDEwMDY0NAotLS0gYS9mcy9leHQ0L2JhbGxvYy5jCisrKyBiL2ZzL2V4dDQvYmFsbG9jLmMKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWV4dDRfbWJfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmxvY2ssIGNvdW50LAogCQkJICAgIG1ldGFkYXRhLCAmZHF1b3RfZnJlZWRfYmxvY2tzKTsKIAlpZiAoZHF1b3RfZnJlZWRfYmxvY2tzKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBkcXVvdF9mcmVlZF9ibG9ja3MpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgZHF1b3RfZnJlZWRfYmxvY2tzKTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjBjODdkYy4uNjA4M2JiMzggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KICNpbmNsdWRlIDxsaW51eC9qYmQyLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KICNpbmNsdWRlICJleHQ0X2kuaCIKIAogLyoKQEAgLTEwOTgsNiArMTA5OSw3IEBACiBleHRlcm4gaW50IGV4dDRfYmxvY2tfdHJ1bmNhdGVfcGFnZShoYW5kbGVfdCAqaGFuZGxlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pOwogZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qIGlvY3RsLmMgKi8KIGV4dGVybiBsb25nIGV4dDRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggZTJlYWIxOS4uZTBhYTRmZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTExMjIsNyArMTEyMiw4IEBACiAJc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqaXg7CiAJc3RydWN0IGV4dDRfZXh0ZW50ICpleDsKIAlleHQ0X2ZzYmxrX3QgYmxvY2s7Ci0JaW50IGRlcHRoLCBlZV9sZW47CisJaW50IGRlcHRoOwkvKiBOb3RlLCBOT1QgZWhfZGVwdGg7IGRlcHRoIGZyb20gdG9wIG9mIHRyZWUgKi8KKwlpbnQgZWVfbGVuOwogCiAJQlVHX09OKHBhdGggPT0gTlVMTCk7CiAJZGVwdGggPSBwYXRoLT5wX2RlcHRoOwpAQCAtMTE3OSw3ICsxMTgwLDggQEAKIAkJaWYgKGJoID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTzsKIAkJZWggPSBleHRfYmxvY2tfaGRyKGJoKTsKLQkJaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgZWgsIGRlcHRoKSkgeworCQkvKiBzdWJ0cmFjdCBmcm9tIHBfZGVwdGggdG8gZ2V0IHByb3BlciBlaF9kZXB0aCAqLworCQlpZiAoZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBlaCwgcGF0aC0+cF9kZXB0aCAtIGRlcHRoKSkgewogCQkJcHV0X2JoKGJoKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lhbGxvYy5jIGIvZnMvZXh0NC9pYWxsb2MuYwppbmRleCA2MjdmOGMzLi5mYjUxYjQwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lhbGxvYy5jCisrKyBiL2ZzL2V4dDQvaWFsbG9jLmMKQEAgLTIyMCwxMCArMjIwLDEwIEBACiAJICogTm90ZTogd2UgbXVzdCBmcmVlIGFueSBxdW90YSBiZWZvcmUgbG9ja2luZyB0aGUgc3VwZXJibG9jaywKIAkgKiBhcyB3cml0aW5nIHRoZSBxdW90YSB0byBkaXNrIG1heSBuZWVkIHRoZSBsb2NrIGFzIHdlbGwuCiAJICovCi0JRFFVT1RfSU5JVChpbm9kZSk7CisJdmZzX2RxX2luaXQoaW5vZGUpOwogCWV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUpOwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCkBAIC02OTgsNiArNjk4LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJldDsKIAlleHQ0X2dyb3VwX3QgaTsKIAlpbnQgZnJlZSA9IDA7CisJc3RhdGljIGludCBvbmNlID0gMTsKIAlleHQ0X2dyb3VwX3QgZmxleF9ncm91cDsKIAogCS8qIENhbm5vdCBjcmVhdGUgZmlsZXMgaW4gYSBkZWxldGVkIGRpcmVjdG9yeSAqLwpAQCAtNzE5LDcgKzcyMCw4IEBACiAJCXJldDIgPSBmaW5kX2dyb3VwX2ZsZXgoc2IsIGRpciwgJmdyb3VwKTsKIAkJaWYgKHJldDIgPT0gLTEpIHsKIAkJCXJldDIgPSBmaW5kX2dyb3VwX290aGVyKHNiLCBkaXIsICZncm91cCk7Ci0JCQlpZiAocmV0MiA9PSAwICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJCWlmIChyZXQyID09IDAgJiYgb25jZSkKKwkJCQlvbmNlID0gMDsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgImV4dDQ6IGZpbmRfZ3JvdXBfZmxleCAiCiAJCQkJICAgICAgICJmYWlsZWQsIGZhbGxiYWNrIHN1Y2NlZWRlZCBkaXIgJWx1XG4iLAogCQkJCSAgICAgICBkaXItPmlfaW5vKTsKQEAgLTkxMyw3ICs5MTUsNyBAQAogCWVpLT5pX2V4dHJhX2lzaXplID0gRVhUNF9TQihzYiktPnNfd2FudF9leHRyYV9pc2l6ZTsKIAogCXJldCA9IGlub2RlOwotCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewogCQllcnIgPSAtRURRVU9UOwogCQlnb3RvIGZhaWxfZHJvcDsKIAl9CkBAIC05NTQsMTAgKzk1NiwxMCBAQAogCXJldHVybiByZXQ7CiAKIGZhaWxfZnJlZV9kcm9wOgotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogZmFpbF9kcm9wOgotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGM3ZmVkNWIuLjcxZDNlY2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYworKysgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTk3NSw2ICs5NzUsMTcgQEAKIAlyZXR1cm4gZXJyOwogfQogCitxc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsOworCisJc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCXRvdGFsID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyArCisJCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CisJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisKKwlyZXR1cm4gdG90YWw7Cit9CiAvKgogICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQogICogdG8gYWxsb2NhdGUgQGJsb2NrcyBmb3Igbm9uIGV4dGVudCBmaWxlIGJhc2VkIGZpbGUKQEAgLTEwMzYsOCArMTA0NywxNCBAQAogCS8qIHVwZGF0ZSBwZXItaW5vZGUgcmVzZXJ2YXRpb25zICovCiAJQlVHX09OKHVzZWQgID4gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7CiAJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyAtPSB1c2VkOwotCiAJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisKKwkvKgorCSAqIGZyZWUgdGhvc2Ugb3Zlci1ib29raW5nIHF1b3RhIGZvciBtZXRhZGF0YSBibG9ja3MKKwkgKi8KKworCWlmIChtZGJfZnJlZSkKKwkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIG1kYl9mcmVlKTsKIH0KIAogLyoKQEAgLTE1NTMsOCArMTU3MCw4IEBACiBzdGF0aWMgaW50IGV4dDRfZGFfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnJibG9ja3MpCiB7CiAJaW50IHJldHJpZXMgPSAwOwotICAgICAgIHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbWRfbmVlZGVkLCBtZGJsb2NrcywgdG90YWwgPSAwOworCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOworCXVuc2lnbmVkIGxvbmcgbWRfbmVlZGVkLCBtZGJsb2NrcywgdG90YWwgPSAwOwogCiAJLyoKIAkgKiByZWNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIG1ldGFkYXRhIGJsb2NrcyB0byByZXNlcnZlCkBAIC0xNTcwLDEyICsxNTg3LDIzIEBACiAJbWRfbmVlZGVkID0gbWRibG9ja3MgLSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzOwogCXRvdGFsID0gbWRfbmVlZGVkICsgbnJibG9ja3M7CiAKKwkvKgorCSAqIE1ha2UgcXVvdGEgcmVzZXJ2YXRpb24gaGVyZSB0byBwcmV2ZW50IHF1b3RhIG92ZXJmbG93CisJICogbGF0ZXIuIFJlYWwgcXVvdGEgYWNjb3VudGluZyBpcyBkb25lIGF0IHBhZ2VzIHdyaXRlb3V0CisJICogdGltZS4KKwkgKi8KKwlpZiAodmZzX2RxX3Jlc2VydmVfYmxvY2soaW5vZGUsIHRvdGFsKSkgeworCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKwkJcmV0dXJuIC1FRFFVT1Q7CisJfQorCiAJaWYgKGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCB0b3RhbCkpIHsKIAkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAJCWlmIChleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKSB7CiAJCQl5aWVsZCgpOwogCQkJZ290byByZXBlYXQ7CiAJCX0KKwkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKz0gbnJibG9ja3M7CkBAIC0xNjI5LDYgKzE2NTcsOCBAQAogCUJVR19PTihtZGIgPiBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKIAlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzID0gbWRiOwogCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCisJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHJlbGVhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBleHQ0X2RhX3BhZ2VfcmVsZWFzZV9yZXNlcnZhdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwKQEAgLTQ2MTIsNyArNDY0Miw3IEBACiAJCQllcnJvciA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQotCQllcnJvciA9IERRVU9UX1RSQU5TRkVSKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQllcnJvciA9IHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKIAkJaWYgKGVycm9yKSB7CiAJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQkJcmV0dXJuIGVycm9yOwpAQCAtNDk5MSw3ICs1MDIxLDcgQEAKICAqIGlfc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IGdlbmVyaWNfY29tbWl0X3dyaXRlKCkgYW5kIHdlIHRodXMgbmVlZAogICogdG8gaW5jbHVkZSB0aGUgdXBkYXRlZCBpbm9kZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAqCi0gKiBBbHNvLCBEUVVPVF9BTExPQ19TUEFDRSgpIHdpbGwgYWx3YXlzIGRpcnR5IHRoZSBpbm9kZSB3aGVuIGJsb2NrcworICogQWxzbywgdmZzX2RxX2FsbG9jX2Jsb2NrKCkgd2lsbCBhbHdheXMgZGlydHkgdGhlIGlub2RlIHdoZW4gYmxvY2tzCiAgKiBhcmUgYWxsb2NhdGVkIHRvIHRoZSBmaWxlLgogICoKICAqIElmIHRoZSBpbm9kZSBpcyBtYXJrZWQgc3luY2hyb25vdXMsIHdlIGRvbid0IGhvbm91ciB0aGF0IGhlcmUgLSBkb2luZwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCA0NDE1YmVlLi5iMDM4MTg4IDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAKIAlzdHJ1Y3QgZXh0NF9mcmVlX2V4dGVudCAqZ2V4ID0gJmFjLT5hY19nX2V4OwogCiAJQlVHX09OKGV4LT5mZV9sZW4gPD0gMCk7Ci0JQlVHX09OKGV4LT5mZV9sZW4gPj0gRVhUNF9CTE9DS1NfUEVSX0dST1VQKGFjLT5hY19zYikpOworCUJVR19PTihleC0+ZmVfbGVuID4gRVhUNF9CTE9DS1NfUEVSX0dST1VQKGFjLT5hY19zYikpOwogCUJVR19PTihleC0+ZmVfc3RhcnQgPj0gRVhUNF9CTE9DS1NfUEVSX0dST1VQKGFjLT5hY19zYikpOwogCUJVR19PTihhYy0+YWNfc3RhdHVzICE9IEFDX1NUQVRVU19DT05USU5VRSk7CiAKQEAgLTMwODYsOSArMzA4NiwxMiBAQAogCWlmICghKGFjLT5hY19mbGFncyAmIEVYVDRfTUJfREVMQUxMT0NfUkVTRVJWRUQpKQogCQkvKiByZWxlYXNlIGFsbCB0aGUgcmVzZXJ2ZWQgYmxvY2tzIGlmIG5vbiBkZWxhbGxvYyAqLwogCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCByZXNlcnZfYmxrcyk7Ci0JZWxzZQorCWVsc2UgewogCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLAogCQkJCQkJYWMtPmFjX2JfZXguZmVfbGVuKTsKKwkJLyogY29udmVydCByZXNlcnZlZCBxdW90YSBibG9ja3MgdG8gcmVhbCBxdW90YSBibG9ja3MgKi8KKwkJdmZzX2RxX2NsYWltX2Jsb2NrKGFjLT5hY19pbm9kZSwgYWMtPmFjX2JfZXguZmVfbGVuKTsKKwl9CiAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLApAQCAtMzI5Miw3ICszMjk1LDcgQEAKIAl9CiAJQlVHX09OKHN0YXJ0ICsgc2l6ZSA8PSBhYy0+YWNfb19leC5mZV9sb2dpY2FsICYmCiAJCQlzdGFydCA+IGFjLT5hY19vX2V4LmZlX2xvZ2ljYWwpOwotCUJVR19PTihzaXplIDw9IDAgfHwgc2l6ZSA+PSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoYWMtPmFjX3NiKSk7CisJQlVHX09OKHNpemUgPD0gMCB8fCBzaXplID4gRVhUNF9CTE9DS1NfUEVSX0dST1VQKGFjLT5hY19zYikpOwogCiAJLyogbm93IHByZXBhcmUgZ29hbCByZXF1ZXN0ICovCiAKQEAgLTM1ODksNiArMzU5Miw3IEBACiAJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpCiB7CiAJZXh0NF9ncm91cF90IGdycDsKKwlleHQ0X2ZzYmxrX3QgZ3JwX2JsazsKIAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmcGEtPnBhX2NvdW50KSB8fCBwYS0+cGFfZnJlZSAhPSAwKQogCQlyZXR1cm47CkBAIC0zNjAzLDggKzM2MDcsMTIgQEAKIAlwYS0+cGFfZGVsZXRlZCA9IDE7CiAJc3Bpbl91bmxvY2soJnBhLT5wYV9sb2NrKTsKIAotCS8qIC0xIGlzIHRvIHByb3RlY3QgZnJvbSBjcm9zc2luZyBhbGxvY2F0aW9uIGdyb3VwICovCi0JZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgcGEtPnBhX3BzdGFydCAtIDEsICZncnAsIE5VTEwpOworCWdycF9ibGsgPSBwYS0+cGFfcHN0YXJ0OworCS8qIElmIGxpbmVhciwgcGFfcHN0YXJ0IG1heSBiZSBpbiB0aGUgbmV4dCBncm91cCB3aGVuIHBhIGlzIHVzZWQgdXAgKi8KKwlpZiAocGEtPnBhX2xpbmVhcikKKwkJZ3JwX2Jsay0tOworCisJZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgZ3JwX2JsaywgJmdycCwgTlVMTCk7CiAKIAkvKgogCSAqIHBvc3NpYmxlIHJhY2U6CkBAIC00NTM5LDcgKzQ1NDcsNyBAQAogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCWV4dDRfZnNibGtfdCBibG9jayA9IDA7Ci0JdW5zaWduZWQgaW50IGlucXVvdGE7CisJdW5zaWduZWQgaW50IGlucXVvdGEgPSAwOwogCXVuc2lnbmVkIGludCByZXNlcnZfYmxrcyA9IDA7CiAKIAlzYiA9IGFyLT5pbm9kZS0+aV9zYjsKQEAgLTQ1NTcsOSArNDU2NSwxNyBAQAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBhci0+cGxlZnQsCiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFyLT5wcmlnaHQpOwogCi0JaWYgKCFFWFQ0X0koYXItPmlub2RlKS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnKSB7Ci0JCS8qCi0JCSAqIFdpdGggZGVsYWxsb2Mgd2UgYWxyZWFkeSByZXNlcnZlZCB0aGUgYmxvY2tzCisJLyoKKwkgKiBGb3IgZGVsYXllZCBhbGxvY2F0aW9uLCB3ZSBjb3VsZCBza2lwIHRoZSBFTk9TUEMgYW5kCisJICogRURRVU9UIGNoZWNrLCBhcyBibG9ja3MgYW5kIHF1b3RhcyBoYXZlIGJlZW4gYWxyZWFkeQorCSAqIHJlc2VydmVkIHdoZW4gZGF0YSBiZWluZyBjb3BpZWQgaW50byBwYWdlY2FjaGUuCisJICovCisJaWYgKEVYVDRfSShhci0+aW5vZGUpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcpCisJCWFyLT5mbGFncyB8PSBFWFQ0X01CX0RFTEFMTE9DX1JFU0VSVkVEOworCWVsc2UgeworCQkvKiBXaXRob3V0IGRlbGF5ZWQgYWxsb2NhdGlvbiB3ZSBuZWVkIHRvIHZlcmlmeQorCQkgKiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBibG9ja3MgdG8gZG8gYmxvY2sgYWxsb2NhdGlvbgorCQkgKiBhbmQgdmVyaWZ5IGFsbG9jYXRpb24gZG9lc24ndCBleGNlZWQgdGhlIHF1b3RhIGxpbWl0cy4KIAkJICovCiAJCXdoaWxlIChhci0+bGVuICYmIGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCBhci0+bGVuKSkgewogCQkJLyogbGV0IG90aGVycyB0byBmcmVlIHRoZSBzcGFjZSAqLwpAQCAtNDU3MSwxOSArNDU4NywxNiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmVzZXJ2X2Jsa3MgPSBhci0+bGVuOworCQl3aGlsZSAoYXItPmxlbiAmJiB2ZnNfZHFfYWxsb2NfYmxvY2soYXItPmlub2RlLCBhci0+bGVuKSkgeworCQkJYXItPmZsYWdzIHw9IEVYVDRfTUJfSElOVF9OT1BSRUFMTE9DOworCQkJYXItPmxlbi0tOworCQl9CisJCWlucXVvdGEgPSBhci0+bGVuOworCQlpZiAoYXItPmxlbiA9PSAwKSB7CisJCQkqZXJycCA9IC1FRFFVT1Q7CisJCQlnb3RvIG91dDM7CisJCX0KIAl9Ci0Jd2hpbGUgKGFyLT5sZW4gJiYgRFFVT1RfQUxMT0NfQkxPQ0soYXItPmlub2RlLCBhci0+bGVuKSkgewotCQlhci0+ZmxhZ3MgfD0gRVhUNF9NQl9ISU5UX05PUFJFQUxMT0M7Ci0JCWFyLT5sZW4tLTsKLQl9Ci0JaWYgKGFyLT5sZW4gPT0gMCkgewotCQkqZXJycCA9IC1FRFFVT1Q7Ci0JCWdvdG8gb3V0MzsKLQl9Ci0JaW5xdW90YSA9IGFyLT5sZW47Ci0KLQlpZiAoRVhUNF9JKGFyLT5pbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZykKLQkJYXItPmZsYWdzIHw9IEVYVDRfTUJfREVMQUxMT0NfUkVTRVJWRUQ7CiAKIAlhYyA9IGttZW1fY2FjaGVfYWxsb2MoZXh0NF9hY19jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAoIWFjKSB7CkBAIC00NjQ5LDggKzQ2NjIsOCBAQAogb3V0MjoKIAlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTsKIG91dDE6Ci0JaWYgKGFyLT5sZW4gPCBpbnF1b3RhKQotCQlEUVVPVF9GUkVFX0JMT0NLKGFyLT5pbm9kZSwgaW5xdW90YSAtIGFyLT5sZW4pOworCWlmIChpbnF1b3RhICYmIGFyLT5sZW4gPCBpbnF1b3RhKQorCQl2ZnNfZHFfZnJlZV9ibG9jayhhci0+aW5vZGUsIGlucXVvdGEgLSBhci0+bGVuKTsKIG91dDM6CiAJaWYgKCFhci0+bGVuKSB7CiAJCWlmICghRVhUNF9JKGFyLT5pbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZykKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCBiYTcwMmJkLi44MzQxMDI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0yMDkyLDcgKzIwOTIsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBxdW90YXMgYmVmb3JlIHNvIHRoYXQgZXZlbnR1YWwgd3JpdGVzIGdvIGluCiAJICogc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KLQlEUVVPVF9JTklUKGRlbnRyeS0+ZF9pbm9kZSk7CisJdmZzX2RxX2luaXQoZGVudHJ5LT5kX2lub2RlKTsKIAloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQ0X0RFTEVURV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwpAQCAtMjE1MSw3ICsyMTUxLDcgQEAKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCi0JRFFVT1RfSU5JVChkZW50cnktPmRfaW5vZGUpOworCXZmc19kcV9pbml0KGRlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGRpciwgRVhUNF9ERUxFVEVfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIzMTgsNyArMjMxOCw3IEBACiAJLyogSW5pdGlhbGl6ZSBxdW90YXMgYmVmb3JlIHNvIHRoYXQgZXZlbnR1YWwgd3JpdGVzIGdvCiAJICogaW4gc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KIAlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkKLQkJRFFVT1RfSU5JVChuZXdfZGVudHJ5LT5kX2lub2RlKTsKKwkJdmZzX2RxX2luaXQobmV3X2RlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KG9sZF9kaXIsIDIgKgogCQkJCQlFWFQ0X0RBVEFfVFJBTlNfQkxPQ0tTKG9sZF9kaXItPmlfc2IpICsKIAkJCQkJRVhUNF9JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAzOWQxOTkzLi5mNzM3MWE2IDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC05MjYsOCArOTI2LDYgQEAKICNkZWZpbmUgUVRZUEUyTkFNRSh0KSAoKHQpID09IFVTUlFVT1RBID8gInVzZXIiIDogImdyb3VwIikKICNkZWZpbmUgUVRZUEUyTU9QVChvbiwgdCkgKCh0KSA9PSBVU1JRVU9UQT8oKG9uKSMjVVNSSlFVT1RBKTooKG9uKSMjR1JQSlFVT1RBKSkKIAotc3RhdGljIGludCBleHQ0X2RxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpOwotc3RhdGljIGludCBleHQ0X2RxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSk7CiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CiBzdGF0aWMgaW50IGV4dDRfYWNxdWlyZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKIHN0YXRpYyBpbnQgZXh0NF9yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwpAQCAtOTQyLDkgKzk0MCwxMyBAQAogCQkJCWNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpOwogCiBzdGF0aWMgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZXh0NF9xdW90YV9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplCT0gZXh0NF9kcXVvdF9pbml0aWFsaXplLAotCS5kcm9wCQk9IGV4dDRfZHF1b3RfZHJvcCwKKwkuaW5pdGlhbGl6ZQk9IGRxdW90X2luaXRpYWxpemUsCisJLmRyb3AJCT0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UJPSBkcXVvdF9hbGxvY19zcGFjZSwKKwkucmVzZXJ2ZV9zcGFjZQk9IGRxdW90X3Jlc2VydmVfc3BhY2UsCisJLmNsYWltX3NwYWNlCT0gZHF1b3RfY2xhaW1fc3BhY2UsCisJLnJlbGVhc2VfcnN2CT0gZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSwKKwkuZ2V0X3Jlc2VydmVkX3NwYWNlID0gZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2UsCiAJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCiAJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAogCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKQEAgLTE4MDIsNyArMTgwNCw3IEBACiAJCX0KIAogCQlsaXN0X2FkZCgmRVhUNF9JKGlub2RlKS0+aV9vcnBoYW4sICZFWFQ0X1NCKHNiKS0+c19vcnBoYW4pOwotCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJdmZzX2RxX2luaXQoaW5vZGUpOwogCQlpZiAoaW5vZGUtPmlfbmxpbmspIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJIiVzOiB0cnVuY2F0aW5nIGlub2RlICVsdSB0byAlbGxkIGJ5dGVzXG4iLApAQCAtMzM2Nyw4ICszMzY5LDggQEAKICAqIGlzIGxvY2tlZCBmb3Igd3JpdGUuIE90aGVyd2lzZSB0aGUgYXJlIHBvc3NpYmxlIGRlYWRsb2NrczoKICAqIFByb2Nlc3MgMSAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzIDIKICAqIGV4dDRfY3JlYXRlKCkgICAgICAgICAgICAgICAgICAgICBxdW90YV9zeW5jKCkKLSAqICAgamJkMl9qb3VybmFsX3N0YXJ0KCkgICAgICAgICAgICAgICAgICAgd3JpdGVfZHF1b3QoKQotICogICBEUVVPVF9JTklUKCkgICAgICAgICAgICAgICAgICAgICAgICBkb3duKGRxaW9fbXV0ZXgpCisgKiAgIGpiZDJfam91cm5hbF9zdGFydCgpICAgICAgICAgICAgICAgICAgd3JpdGVfZHF1b3QoKQorICogICB2ZnNfZHFfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19tdXRleCkKICAqICAgICBkb3duKGRxaW9fbXV0ZXgpICAgICAgICAgICAgICAgICAgICBqYmQyX2pvdXJuYWxfc3RhcnQoKQogICoKICAqLwpAQCAtMzM4MCw0NCArMzM4Miw2IEBACiAJcmV0dXJuIHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZpbGVzW2RxdW90LT5kcV90eXBlXTsKIH0KIAotc3RhdGljIGludCBleHQ0X2RxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCi17Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBXZSBtYXkgY3JlYXRlIHF1b3RhIHN0cnVjdHVyZSBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgZW5vdWdoIGJsb2NrcyAqLwotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMipFWFQ0X1FVT1RBX0lOSVRfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKQotCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwotCXJldCA9IGRxdW90X2luaXRpYWxpemUoaW5vZGUsIHR5cGUpOwotCWVyciA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGV4dDRfZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWhhbmRsZV90ICpoYW5kbGU7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGRlbGV0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIqRVhUNF9RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCS8qCi0JCSAqIFdlIGNhbGwgZHF1b3RfZHJvcCgpIGFueXdheSB0byBhdCBsZWFzdCByZWxlYXNlIHJlZmVyZW5jZXMKLQkJICogdG8gcXVvdGEgc3RydWN0dXJlcyBzbyB0aGF0IHVtb3VudCBkb2VzIG5vdCBoYW5nLgotCQkgKi8KLQkJZHF1b3RfZHJvcChpbm9kZSk7Ci0JCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7Ci0JfQotCXJldCA9IGRxdW90X2Ryb3AoaW5vZGUpOwotCWVyciA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKIAlpbnQgcmV0LCBlcnI7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggMTU3Y2U2NS4uNjJiMzFjMiAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCisrKyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJCWVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOwogCQlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCQlleHQ0X2hhbmRsZV9zeW5jKGhhbmRsZSk7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCWVhX2JkZWJ1ZyhiaCwgInJlZmNvdW50IG5vdz0lZDsgcmVsZWFzaW5nIiwKIAkJCSAgbGUzMl90b19jcHUoQkhEUihiaCktPmhfcmVmY291bnQpKTsKIAkJaWYgKGNlKQpAQCAtNzg0LDcgKzc4NCw3IEBACiAJCQkJLyogVGhlIG9sZCBibG9jayBpcyByZWxlYXNlZCBhZnRlciB1cGRhdGluZwogCQkJCSAgIHRoZSBpbm9kZS4gKi8KIAkJCQllcnJvciA9IC1FRFFVT1Q7Ci0JCQkJaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCAxKSkKKwkJCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCAxKSkKIAkJCQkJZ290byBjbGVhbnVwOwogCQkJCWVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAogCQkJCQkJCQkgICAgICBuZXdfYmgpOwpAQCAtODYwLDcgKzg2MCw3IEBACiAJcmV0dXJuIGVycm9yOwogCiBjbGVhbnVwX2RxdW90OgotCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAlnb3RvIGNsZWFudXA7CiAKIGJhZF9ibG9jazoKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jIGIvZnMvZmF0L25hbWVpX21zZG9zLmMKaW5kZXggN2JhMDNhNC4uZGEzZjM2MSAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG1zZG9zX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBtc2Rvc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IG1zZG9zX2hhc2gsCiAJLmRfY29tcGFyZQk9IG1zZG9zX2NtcCwKIH07CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCA4YWUzMmUzNy4uYTBlMDBlMyAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuYworKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCkBAIC0xNjYsMTMgKzE2NiwxMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHZmYXRfY2lfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdmZhdF9jaV9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUJPSB2ZmF0X3JldmFsaWRhdGVfY2ksCiAJLmRfaGFzaAkJPSB2ZmF0X2hhc2hpLAogCS5kX2NvbXBhcmUJPSB2ZmF0X2NtcGksCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHZmYXRfZGVudHJ5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdmZhdF9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUJPSB2ZmF0X3JldmFsaWRhdGUsCiAJLmRfaGFzaAkJPSB2ZmF0X2hhc2gsCiAJLmRfY29tcGFyZQk9IHZmYXRfY21wLApkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggYmQyMTVjYy4uZDg2NWNhNjYgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBTRVRGTF9NQVNLIChPX0FQUEVORCB8IE9fTk9OQkxPQ0sgfCBPX05ERUxBWSB8IEZBU1lOQyB8IE9fRElSRUNUIHwgT19OT0FUSU1FKQorI2RlZmluZSBTRVRGTF9NQVNLIChPX0FQUEVORCB8IE9fTk9OQkxPQ0sgfCBPX05ERUxBWSB8IE9fRElSRUNUIHwgT19OT0FUSU1FKQogCiBzdGF0aWMgaW50IHNldGZsKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxwLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE3NywyMSArMTc3LDIxIEBACiAJCXJldHVybiBlcnJvcjsKIAogCS8qCi0JICogV2Ugc3RpbGwgbmVlZCBhIGxvY2sgaGVyZSBmb3Igbm93IHRvIGtlZXAgbXVsdGlwbGUgRkFTWU5DIGNhbGxzCi0JICogZnJvbSByYWNpbmcgd2l0aCBlYWNoIG90aGVyLgorCSAqIC0+ZmFzeW5jKCkgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIEZBU1lOQyBiaXQuCiAJICovCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAoKGFyZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSB7Ci0JCWlmIChmaWxwLT5mX29wICYmIGZpbHAtPmZfb3AtPmZhc3luYykgewotCQkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIChhcmcgJiBGQVNZTkMpICE9IDApOwotCQkJaWYgKGVycm9yIDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQorCWlmICgoKGFyZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSAmJiBmaWxwLT5mX29wICYmCisJCQlmaWxwLT5mX29wLT5mYXN5bmMpIHsKKwkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIChhcmcgJiBGQVNZTkMpICE9IDApOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBvdXQ7CisJCWlmIChlcnJvciA+IDApCisJCQllcnJvciA9IDA7CiAJfQotCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCWZpbHAtPmZfZmxhZ3MgPSAoYXJnICYgU0VURkxfTUFTSykgfCAoZmlscC0+Zl9mbGFncyAmIH5TRVRGTF9NQVNLKTsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKKwogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01MTYsNyArNTE2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmFzeW5jX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCi0gKiBmYXN5bmNfaGVscGVyKCkgaXMgdXNlZCBieSBzb21lIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycyAobWFpbmx5IG1pY2UpCisgKiBmYXN5bmNfaGVscGVyKCkgaXMgdXNlZCBieSBhbG1vc3QgYWxsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycwogICogdG8gc2V0IHVwIHRoZSBmYXN5bmMgcXVldWUuIEl0IHJldHVybnMgbmVnYXRpdmUgb24gZXJyb3IsIDAgaWYgaXQgZGlkCiAgKiBubyBjaGFuZ2VzIGFuZCBwb3NpdGl2ZSBpZiBpdCBhZGRlZC9kZWxldGVkIHRoZSBlbnRyeS4KICAqLwpAQCAtNTU1LDYgKzU1NSwxMyBAQAogCQlyZXN1bHQgPSAxOwogCX0KIG91dDoKKwkvKiBGaXggdXAgRkFTWU5DIGJpdCB3aGlsZSBzdGlsbCBob2xkaW5nIGZhc3luY19sb2NrICovCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOworCWlmIChvbikKKwkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7CisJZWxzZQorCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfdW5sb2NrX2lycSgmZmFzeW5jX2xvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggYmJlZWFjNi4uYjc0YThlMSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9ldmVudHBvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CkBAIC0xMjcsNiArMTI4LDcgQEAKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwogCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOworCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCiAJcmV0dXJuIGY7CkBAIC0yNzksNiArMjgxLDcgQEAKIAlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5yZWxlYXNlKQogCQlmaWxlLT5mX29wLT5yZWxlYXNlKGlub2RlLCBmaWxlKTsKIAlzZWN1cml0eV9maWxlX2ZyZWUoZmlsZSk7CisJaW1hX2ZpbGVfZnJlZShmaWxlKTsKIAlpZiAodW5saWtlbHkoU19JU0NIUihpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9jZGV2ICE9IE5VTEwpKQogCQljZGV2X3B1dChpbm9kZS0+aV9jZGV2KTsKIAlmb3BzX3B1dChmaWxlLT5mX29wKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggZTVlYWE2Mi4uZTNmZTk5MSAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTI3NCw2ICsyNzQsNyBAQAogCWludCByZXQ7CiAKIAlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiBJX1NZTkMpOworCVdBUk5fT04oaW5vZGUtPmlfc3RhdGUgJiBJX05FVyk7CiAKIAkvKiBTZXQgSV9TWU5DLCByZXNldCBJX0RJUlRZICovCiAJZGlydHkgPSBpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFk7CkBAIC0yOTgsNiArMjk5LDcgQEAKIAl9CiAKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOworCVdBUk5fT04oaW5vZGUtPmlfc3RhdGUgJiBJX05FVyk7CiAJaW5vZGUtPmlfc3RhdGUgJj0gfklfU1lOQzsKIAlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpIHsKIAkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSAmJgpAQCAtNDcwLDYgKzQ3MiwxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykgeworCQkJcmVxdWV1ZV9pbyhpbm9kZSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKIAkJCWlmICghc2JfaXNfYmxrZGV2X3NiKHNiKSkKQEAgLTUzMSw3ICs1MzgsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKIAkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCi0JCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkKKwkJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJCWNvbnRpbnVlOwogCQkJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAJCQlpZiAobWFwcGluZy0+bnJwYWdlcyA9PSAwKQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggZmRmZjM0Ni4uMDZkYTA1MiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlyZXR1cm4gIW5vZGVpZCB8fCBub2RlaWQgPT0gRlVTRV9ST09UX0lEOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZnVzZV9kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmdXNlX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBmdXNlX2RlbnRyeV9yZXZhbGlkYXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggNWU2NGI4MS4uNmZjNWFlZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC00OTMsNyArNDkzLDcgQEAKIC8qKiBEZXZpY2Ugb3BlcmF0aW9ucyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVzZV9kZXZfb3BlcmF0aW9uczsKIAotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmdXNlX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmdXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCiAvKioKICAqIEdldCBhIGZpbGxlZCBpbiBpbm9kZQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9LY29uZmlnIGIvZnMvZ2ZzMi9LY29uZmlnCmluZGV4IGU1NjNhNjQuLjNhOTgxYjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvS2NvbmZpZworKysgYi9mcy9nZnMyL0tjb25maWcKQEAgLTEsNiArMSwxMCBAQAogY29uZmlnIEdGUzJfRlMKIAl0cmlzdGF0ZSAiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICg2NEJJVCB8fCBMQkQpCisJc2VsZWN0IERMTSBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IENPTkZJR0ZTX0ZTIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgU1lTRlMgaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBJUF9TQ1RQIGlmIERMTV9TQ1RQCiAJc2VsZWN0IEZTX1BPU0lYX0FDTAogCXNlbGVjdCBDUkMzMgogCWhlbHAKQEAgLTE4LDE3ICsyMiwxNiBAQAogCSAgdGhlIGxvY2tpbmcgbW9kdWxlIGJlbG93LiBEb2N1bWVudGF0aW9uIGFuZCB1dGlsaXRpZXMgZm9yIEdGUzIgY2FuCiAJICBiZSBmb3VuZCBoZXJlOiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2NsdXN0ZXIKIAotCSAgVGhlICJub2xvY2siIGxvY2sgbW9kdWxlIGlzIG5vdyBidWlsdCBpbiB0byBHRlMyIGJ5IGRlZmF1bHQuCisJICBUaGUgIm5vbG9jayIgbG9jayBtb2R1bGUgaXMgbm93IGJ1aWx0IGluIHRvIEdGUzIgYnkgZGVmYXVsdC4gSWYKKwkgIHlvdSB3YW50IHRvIHVzZSB0aGUgRExNLCBiZSBzdXJlIHRvIGVuYWJsZSBIT1RQTFVHIGFuZCBJUHY0LzYKKwkgIG5ldHdvcmtpbmcuCiAKIGNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNCi0JdHJpc3RhdGUgIkdGUzIgRExNIGxvY2tpbmcgbW9kdWxlIgotCWRlcGVuZHMgb24gR0ZTMl9GUyAmJiBTWVNGUyAmJiBORVQgJiYgSU5FVCAmJiAoSVBWNiB8fCBJUFY2PW4pCi0Jc2VsZWN0IElQX1NDVFAgaWYgRExNX1NDVFAKLQlzZWxlY3QgQ09ORklHRlNfRlMKLQlzZWxlY3QgRExNCisJYm9vbCAiR0ZTMiBETE0gbG9ja2luZyIKKwlkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSAmJiBORVQgJiYgSU5FVCAmJiAoSVBWNiB8fCBJUFY2PW4pICYmIEhPVFBMVUcKIAloZWxwCiAJICBNdWx0aXBsZSBub2RlIGxvY2tpbmcgbW9kdWxlIGZvciBHRlMyCiAKLQkgIE1vc3QgdXNlcnMgb2YgR0ZTMiB3aWxsIHJlcXVpcmUgdGhpcyBtb2R1bGUuIEl0IHByb3ZpZGVzIHRoZSBsb2NraW5nCisJICBNb3N0IHVzZXJzIG9mIEdGUzIgd2lsbCByZXF1aXJlIHRoaXMuIEl0IHByb3ZpZGVzIHRoZSBsb2NraW5nCiAJICBpbnRlcmZhY2UgYmV0d2VlbiBHRlMyIGFuZCB0aGUgRExNLCB3aGljaCBpcyByZXF1aXJlZCB0byB1c2UgR0ZTMgogCSAgaW4gYSBjbHVzdGVyIGVudmlyb25tZW50LgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9NYWtlZmlsZSBiL2ZzL2dmczIvTWFrZWZpbGUKaW5kZXggYzFiNGVjNmEuLmE4NTFlYTQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvTWFrZWZpbGUKKysrIGIvZnMvZ2ZzMi9NYWtlZmlsZQpAQCAtMSw5ICsxLDkgQEAKIG9iai0kKENPTkZJR19HRlMyX0ZTKSArPSBnZnMyLm8KIGdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8gZWFvcHMubyBlYXR0ci5vIGdsb2NrLm8gXAotCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbG9ja2luZy5vIG1haW4ubyBtZXRhX2lvLm8gXAorCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbWFpbi5vIG1ldGFfaW8ubyBcCiAJbW91bnQubyBvcHNfYWRkcmVzcy5vIG9wc19kZW50cnkubyBvcHNfZXhwb3J0Lm8gb3BzX2ZpbGUubyBcCiAJb3BzX2ZzdHlwZS5vIG9wc19pbm9kZS5vIG9wc19zdXBlci5vIHF1b3RhLm8gXAogCXJlY292ZXJ5Lm8gcmdycC5vIHN1cGVyLm8gc3lzLm8gdHJhbnMubyB1dGlsLm8KIAotb2JqLSQoQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0pICs9IGxvY2tpbmcvZGxtLworZ2ZzMi0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IGUzMzVkY2UuLjQzNzY0ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2JtYXAuYyBiL2ZzL2dmczIvYm1hcC5jCmluZGV4IDExZmZjNTYuLjNhNWQzZjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYm1hcC5jCisrKyBiL2ZzL2dmczIvYm1hcC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Rpci5jIGIvZnMvZ2ZzMi9kaXIuYwppbmRleCBiN2M4ZTVjLi5hZWY0ZDBjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2Rpci5jCisrKyBiL2ZzL2dmczIvZGlyLmMKQEAgLTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYW9wcy5jIGIvZnMvZ2ZzMi9lYW9wcy5jCmluZGV4IGYxMTRiYTIuLmRlZTliMDMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWFvcHMuYworKysgYi9mcy9nZnMyL2Vhb3BzLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2VhdHRyLmMgYi9mcy9nZnMyL2VhdHRyLmMKaW5kZXggMGQxYzc2ZC4uODk5NzYzYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9lYXR0ci5jCisrKyBiL2ZzL2dmczIvZWF0dHIuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggNmI5ODNhZS4uMzk4NGU0NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CkBAIC0xOCw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KQEAgLTE1NSwxMyArMTUzLDEwIEBACiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gZ2wtPmdsX2FzcGFjZTsKIAotCWlmIChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jaykKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2wtPmdsX2xvY2spOwotCiAJaWYgKGFzcGFjZSkKIAkJZ2ZzMl9hc3BhY2VfcHV0KGFzcGFjZSk7CiAKLQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jayhnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOwogfQogCiAvKioKQEAgLTE3Miw2ICsxNjcsNyBAQAogCiBzdGF0aWMgdm9pZCBnZnMyX2dsb2NrX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogeworCUdMT0NLX0JVR19PTihnbCwgYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpID09IDApOwogCWF0b21pY19pbmMoJmdsLT5nbF9yZWYpOwogfQogCkBAIC0yMTEsMTcgKzIwNywxNSBAQAogCQkJYXRvbWljX2RlYygmbHJ1X2NvdW50KTsKIAkJfQogCQlzcGluX3VubG9jaygmbHJ1X2xvY2spOwotCQlHTE9DS19CVUdfT04oZ2wsIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCk7Ci0JCUdMT0NLX0JVR19PTihnbCwgIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKTsKIAkJR0xPQ0tfQlVHX09OKGdsLCAhbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpKTsKIAkJZ2xvY2tfZnJlZShnbCk7CiAJCXJ2ID0gMTsKIAkJZ290byBvdXQ7CiAJfQotCXdyaXRlX3VubG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKIAkvKiAxIGZvciBiZWluZyBoYXNoZWQsIDEgZm9yIGhhdmluZyBzdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAqLwogCWlmIChhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikgPT0gMikKIAkJZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShnbCk7CisJd3JpdGVfdW5sb2NrKGdsX2xvY2tfYWRkcihnbC0+Z2xfaGFzaCkpOwogb3V0OgogCXJldHVybiBydjsKIH0KQEAgLTI1NiwyNyArMjUwLDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX2dsb2NrX2ZpbmQoKSAtIEZpbmQgZ2xvY2sgYnkgbG9jayBudW1iZXIKLSAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKLSAqIEBuYW1lOiBUaGUgbG9jayBuYW1lCi0gKgotICogUmV0dXJuczogTlVMTCwgb3IgdGhlIHN0cnVjdCBnZnMyX2dsb2NrIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIKLSAqLwotCi1zdGF0aWMgc3RydWN0IGdmczJfZ2xvY2sgKmdmczJfZ2xvY2tfZmluZChjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUpCi17Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBnbF9oYXNoKHNkcCwgbmFtZSk7Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmdsOwotCi0JcmVhZF9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7Ci0JZ2wgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgbmFtZSk7Ci0JcmVhZF91bmxvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKLQotCXJldHVybiBnbDsKLX0KLQotLyoqCiAgKiBtYXlfZ3JhbnQgLSBjaGVjayBpZiBpdHMgb2sgdG8gZ3JhbnQgYSBuZXcgbG9jawogICogQGdsOiBUaGUgZ2xvY2sKICAqIEBnaDogVGhlIGxvY2sgcmVxdWVzdCB3aGljaCB3ZSB3aXNoIHRvIGdyYW50CkBAIC01MjMsNyArNDk2LDcgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBnZnMyX2xtX2xvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssCi0JCQkJIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCisJCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCiAJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0ID0gTE1fT1VUX0VSUk9SOwpAQCAtNTMyLDcgKzUwNSw3IEBACiAJCXJldHVybiByZXFfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQgPyAwIDogcmVxX3N0YXRlOwogCiAJaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGxvY2ssIGN1cl9zdGF0ZSwKKwkJcmV0ID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jayhsb2NrLAogCQkJCQkJCSByZXFfc3RhdGUsIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTc1LDcgKzU0OCw3IEBACiAJICAgIGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9ERUZFUlJFRCkgJiYKIAkgICAgIShsY2tfZmxhZ3MgJiAoTE1fRkxBR19UUlkgfCBMTV9GTEFHX1RSWV8xQ0IpKSkKIAkJbGNrX2ZsYWdzIHw9IExNX0ZMQUdfVFJZXzFDQjsKLQlyZXQgPSBnZnMyX2xtX2xvY2soc2RwLCBnbC0+Z2xfbG9jaywgZ2wtPmdsX3N0YXRlLCB0YXJnZXQsIGxja19mbGFncyk7CisJcmV0ID0gZ2ZzMl9sbV9sb2NrKHNkcCwgZ2wsIHRhcmdldCwgbGNrX2ZsYWdzKTsKIAogCWlmICghKHJldCAmIExNX09VVF9BU1lOQykpIHsKIAkJZmluaXNoX3htb3RlKGdsLCByZXQpOwpAQCAtNjI0LDEwICs1OTcsMTEgQEAKIAogCUdMT0NLX0JVR19PTihnbCwgdGVzdF9iaXQoR0xGX0RFTU9URV9JTl9QUk9HUkVTUywgJmdsLT5nbF9mbGFncykpOwogCisJZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCWlmICh0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IGdsLT5nbF9zdGF0ZSkgewogCQlpZiAoZmluZF9maXJzdF9ob2xkZXIoZ2wpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmIChub25ibG9jaykKIAkJCWdvdG8gb3V0X3NjaGVkOwogCQlzZXRfYml0KEdMRl9ERU1PVEVfSU5fUFJPR1JFU1MsICZnbC0+Z2xfZmxhZ3MpOwpAQCAtNjM4LDIzICs2MTIsMjYgQEAKIAkJCWdmczJfZGVtb3RlX3dha2UoZ2wpOwogCQlyZXQgPSBkb19wcm9tb3RlKGdsKTsKIAkJaWYgKHJldCA9PSAwKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmIChyZXQgPT0gMikKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0X3NlbTsKIAkJZ2ggPSBmaW5kX2ZpcnN0X3dhaXRlcihnbCk7CiAJCWdsLT5nbF90YXJnZXQgPSBnaC0+Z2hfc3RhdGU7CiAJCWlmICghKGdoLT5naF9mbGFncyAmIChMTV9GTEFHX1RSWSB8IExNX0ZMQUdfVFJZXzFDQikpKQogCQkJZG9fZXJyb3IoZ2wsIDApOyAvKiBGYWlsIHF1ZXVlZCB0cnkgbG9ja3MgKi8KIAl9CiAJZG9feG1vdGUoZ2wsIGdoLCBnbC0+Z2xfdGFyZ2V0KTsKK291dF9zZW06CisJdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlyZXR1cm47CiAKIG91dF9zY2hlZDoKIAlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKLW91dDoKK291dF91bmxvY2s6CiAJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnb3RvIG91dF9zZW07CiB9CiAKIHN0YXRpYyB2b2lkIGdsb2NrX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC02ODEsMTggKzY1OCw2IEBACiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIH0KIAotc3RhdGljIGludCBnZnMyX2xtX2dldF9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgdm9pZCAqKmxvY2twKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9nZXRfbG9jaykKLQkJcmV0dXJuIDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2dldF9sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGxvY2twKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIC8qKgogICogZ2ZzMl9nbG9ja19nZXQoKSAtIEdldCBhIGdsb2NrLCBvciBjcmVhdGUgb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0CiAgKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCkBAIC03MTksMTAgKzY4NCwxMSBAQAogCWdsID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsICZuYW1lKTsKIAlyZWFkX3VubG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwogCi0JaWYgKGdsIHx8ICFjcmVhdGUpIHsKLQkJKmdscCA9IGdsOworCSpnbHAgPSBnbDsKKwlpZiAoZ2wpCiAJCXJldHVybiAwOwotCX0KKwlpZiAoIWNyZWF0ZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlnbCA9IGttZW1fY2FjaGVfYWxsb2MoZ2ZzMl9nbG9ja19jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZ2wpCkBAIC03MzYsNyArNzAyLDkgQEAKIAlnbC0+Z2xfZGVtb3RlX3N0YXRlID0gTE1fU1RfRVhDTFVTSVZFOwogCWdsLT5nbF9oYXNoID0gaGFzaDsKIAlnbC0+Z2xfb3BzID0gZ2xvcHM7Ci0JZ2wtPmdsX3N0YW1wID0gamlmZmllczsKKwlzbnByaW50ZihnbC0+Z2xfc3RybmFtZSwgR0RMTV9TVFJOQU1FX0JZVEVTLCAiJTh4JTE2bGx4IiwgbmFtZS5sbl90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKW51bWJlcik7CisJbWVtc2V0KCZnbC0+Z2xfbGtzYiwgMCwgc2l6ZW9mKHN0cnVjdCBkbG1fbGtzYikpOworCWdsLT5nbF9sa3NiLnNiX2x2YnB0ciA9IGdsLT5nbF9sdmI7CiAJZ2wtPmdsX3RjaGFuZ2UgPSBqaWZmaWVzOwogCWdsLT5nbF9vYmplY3QgPSBOVUxMOwogCWdsLT5nbF9zYmQgPSBzZHA7CkBAIC03NTMsMTAgKzcyMSw2IEBACiAJCX0KIAl9CiAKLQllcnJvciA9IGdmczJfbG1fZ2V0X2xvY2soc2RwLCAmbmFtZSwgJmdsLT5nbF9sb2NrKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9hc3BhY2U7Ci0KIAl3cml0ZV9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CiAJdG1wID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsICZuYW1lKTsKIAlpZiAodG1wKSB7CkBAIC03NzIsOSArNzM2LDYgQEAKIAogCXJldHVybiAwOwogCi1mYWlsX2FzcGFjZToKLQlpZiAoZ2wtPmdsX2FzcGFjZSkKLQkJZ2ZzMl9hc3BhY2VfcHV0KGdsLT5nbF9hc3BhY2UpOwogZmFpbDoKIAlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC05NjYsNyArOTI3LDcgQEAKIAlpZiAoIShnaC0+Z2hfZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKSkgewogCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKQotCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKGdsLT5nbF9sb2NrKTsKKwkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbChnbCk7CiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCX0KIAlyZXR1cm47CkBAIC0xMDUxLDcgKzEwMTIsNiBAQAogCQkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJCQljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOwogCQl9Ci0JCWdsLT5nbF9zdGFtcCA9IGppZmZpZXM7CiAJCWlmIChsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykgJiYKIAkJICAgICF0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJCSAgICAhdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCkBAIC0xMjQwLDcwICsxMjAwLDEzIEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaHNbeF0pOwogfQogCi1zdGF0aWMgaW50IGdmczJfbG1faG9sZF9sdmIoc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKQordm9pZCBnZnMyX2dsb2NrX2NiKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdW5zaWduZWQgaW50IHN0YXRlKQogewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9ob2xkX2x2YikKLQkJcmV0dXJuIDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2hvbGRfbHZiKGxvY2ssIGx2YnApOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2x2Yl9ob2xkIC0gYXR0YWNoIGEgTFZCIGZyb20gYSBnbG9jawotICogQGdsOiBUaGUgZ2xvY2sgaW4gcXVlc3Rpb24KLSAqCi0gKi8KLQotaW50IGdmczJfbHZiX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCWludCBlcnJvcjsKLQotCWlmICghYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpKSB7Ci0JCWVycm9yID0gZ2ZzMl9sbV9ob2xkX2x2YihnbC0+Z2xfc2JkLCBnbC0+Z2xfbG9jaywgJmdsLT5nbF9sdmIpOwotCQlpZiAoZXJyb3IpIAotCQkJcmV0dXJuIGVycm9yOwotCQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCX0KLQlhdG9taWNfaW5jKCZnbC0+Z2xfbHZiX2NvdW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfbHZiX3VuaG9sZCAtIGRldGFjaCBhIExWQiBmcm9tIGEgZ2xvY2sKLSAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCi0gKgotICovCi0KLXZvaWQgZ2ZzMl9sdmJfdW5ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0KLQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCWdmczJfYXNzZXJ0KGdsLT5nbF9zYmQsIGF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSA+IDApOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZnbC0+Z2xfbHZiX2NvdW50KSkgewotCQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fdW5ob2xkX2x2YikKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3VuaG9sZF9sdmIoZ2wtPmdsX2xvY2ssIGdsLT5nbF9sdmIpOwotCQlnbC0+Z2xfbHZiID0gTlVMTDsKLQkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwotCX0KLQlnZnMyX2dsb2NrX3B1dChnbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsb2NraW5nX2NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQl1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmdsOwogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCXVuc2lnbmVkIGxvbmcgaG9sZHRpbWU7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCi0JZ2wgPSBnZnMyX2dsb2NrX2ZpbmQoc2RwLCBuYW1lKTsKLQlpZiAoIWdsKQotCQlyZXR1cm47Ci0KKwlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCWlmICh0aW1lX2JlZm9yZShub3csIGhvbGR0aW1lKSkKIAkJZGVsYXkgPSBob2xkdGltZSAtIG5vdzsKQEAgLTEzMTcsNzQgKzEyMjAsMzMgQEAKIAkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX2pkZXNjX21ha2VfZGlydHkoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpCi17Ci0Jc3RydWN0IGdmczJfamRlc2MgKmpkOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewotCQlpZiAoamQtPmpkX2ppZCAhPSBqaWQpCi0JCQljb250aW51ZTsKLQkJamQtPmpkX2RpcnR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKLX0KLQogLyoqCi0gKiBnZnMyX2dsb2NrX2NiIC0gQ2FsbGJhY2sgdXNlZCBieSBsb2NraW5nIG1vZHVsZQotICogQHNkcDogUG9pbnRlciB0byB0aGUgc3VwZXJibG9jawotICogQHR5cGU6IFR5cGUgb2YgY2FsbGJhY2sKLSAqIEBkYXRhOiBUeXBlIGRlcGVuZGVudCBkYXRhIHBvaW50ZXIKKyAqIGdmczJfZ2xvY2tfY29tcGxldGUgLSBDYWxsYmFjayB1c2VkIGJ5IGxvY2tpbmcKKyAqIEBnbDogUG9pbnRlciB0byB0aGUgZ2xvY2sKKyAqIEByZXQ6IFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZGxtCiAgKgotICogQ2FsbGVkIGJ5IHRoZSBsb2NraW5nIG1vZHVsZSB3aGVuIGl0IHdhbnRzIHRvIHRlbGwgdXMgc29tZXRoaW5nLgotICogRWl0aGVyIHdlIG5lZWQgdG8gZHJvcCBhIGxvY2ssIG9uZSBvZiBvdXIgQVNZTkMgcmVxdWVzdHMgY29tcGxldGVkLCBvcgotICogYSBqb3VybmFsIGZyb20gYW5vdGhlciBjbGllbnQgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgogICovCiAKLXZvaWQgZ2ZzMl9nbG9ja19jYih2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKK3ZvaWQgZ2ZzMl9nbG9ja19jb21wbGV0ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCByZXQpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBjYl9kYXRhOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBMTV9DQl9ORUVEX0U6Ci0JCWJsb2NraW5nX2NiKHNkcCwgZGF0YSwgTE1fU1RfVU5MT0NLRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX05FRURfRDoKLQkJYmxvY2tpbmdfY2Ioc2RwLCBkYXRhLCBMTV9TVF9ERUZFUlJFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfTkVFRF9TOgotCQlibG9ja2luZ19jYihzZHAsIGRhdGEsIExNX1NUX1NIQVJFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfQVNZTkM6IHsKLQkJc3RydWN0IGxtX2FzeW5jX2NiICphc3luYyA9IGRhdGE7Ci0JCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKLQotCQlkb3duX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7Ci0JCWdsID0gZ2ZzMl9nbG9ja19maW5kKHNkcCwgJmFzeW5jLT5sY19uYW1lKTsKLQkJaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBnbCkpCisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJZ2wtPmdsX3JlcGx5ID0gcmV0OworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpKSkgeworCQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoOworCQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKKwkJZ2ggPSBmaW5kX2ZpcnN0X3dhaXRlcihnbCk7CisJCWlmICgoIShnaCAmJiAoZ2gtPmdoX2ZsYWdzICYgTE1fRkxBR19OT0VYUCkpICYmCisJCSAgICAgKGdsLT5nbF90YXJnZXQgIT0gTE1fU1RfVU5MT0NLRUQpKSB8fAorCQkgICAgKChyZXQgJiB+TE1fT1VUX1NUX01BU0spICE9IDApKQorCQkJc2V0X2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKKwkJaWYgKHRlc3RfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpKQogCQkJcmV0dXJuOwotCQlnbC0+Z2xfcmVwbHkgPSBhc3luYy0+bGNfcmV0OwotCQlzZXRfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKTsKLQkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKLQkJCWdmczJfZ2xvY2tfcHV0KGdsKTsKLQkJdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJcmV0dXJuOwogCX0KLQotCWNhc2UgTE1fQ0JfTkVFRF9SRUNPVkVSWToKLQkJZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHNkcCwgKih1bnNpZ25lZCBpbnQgKilkYXRhKTsKLQkJaWYgKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2VzcykKLQkJCXdha2VfdXBfcHJvY2VzcyhzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpOwotCQlyZXR1cm47Ci0KLQlkZWZhdWx0OgotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgMCk7Ci0JCXJldHVybjsKLQl9CisJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKIC8qKgpAQCAtMTUxNSw2ICsxMzc3LDI1IEBACiAJcmV0dXJuIGhhc19lbnRyaWVzOwogfQogCisKKy8qKgorICogdGhhd19nbG9jayAtIHRoYXcgb3V0IGEgZ2xvY2sgd2hpY2ggaGFzIGFuIHVucHJvY2Vzc2VkIHJlcGx5IHdhaXRpbmcKKyAqIEBnbDogVGhlIGdsb2NrIHRvIHRoYXcKKyAqCisgKiBOLkIuIFdoZW4gd2UgZnJlZXplIGEgZ2xvY2ssIHdlIGxlYXZlIGEgcmVmIHRvIHRoZSBnbG9jayBvdXRzdGFuZGluZywKKyAqIHNvIHRoaXMgaGFzIHRvIHJlc3VsdCBpbiB0aGUgcmVmIGNvdW50IGJlaW5nIGRyb3BwZWQgYnkgb25lLgorICovCisKK3N0YXRpYyB2b2lkIHRoYXdfZ2xvY2soc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CisJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7Cit9CisKIC8qKgogICogY2xlYXJfZ2xvY2sgLSBsb29rIGF0IGEgZ2xvY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZnJlZSBpdCBmcm9tIGdsb2NrIGNhY2hlCiAgKiBAZ2w6IHRoZSBnbG9jayB0byBsb29rIGF0CkBAIC0xNTQwLDYgKzE0MjEsMjAgQEAKIH0KIAogLyoqCisgKiBnZnMyX2dsb2NrX3RoYXcgLSBUaGF3IGFueSBmcm96ZW4gZ2xvY2tzCisgKiBAc2RwOiBUaGUgc3VwZXIgYmxvY2sKKyAqCisgKi8KKwordm9pZCBnZnMyX2dsb2NrX3RoYXcoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJdW5zaWduZWQgeDsKKworCWZvciAoeCA9IDA7IHggPCBHRlMyX0dMX0hBU0hfU0laRTsgeCsrKQorCQlleGFtaW5lX2J1Y2tldCh0aGF3X2dsb2NrLCBzZHAsIHgpOworfQorCisvKioKICAqIGdmczJfZ2xfaGFzaF9jbGVhciAtIEVtcHR5IG91dCB0aGUgZ2xvY2sgaGFzaCB0YWJsZQogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KICAqIEB3YWl0OiB3YWl0IHVudGlsIGl0J3MgYWxsIGdvbmUKQEAgLTE2MTksNyArMTUxNCw3IEBACiAJaWYgKGZsYWdzICYgTE1fRkxBR19OT0VYUCkKIAkJKnArKyA9ICdlJzsKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX0FOWSkKLQkJKnArKyA9ICdhJzsKKwkJKnArKyA9ICdBJzsKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKQogCQkqcCsrID0gJ3AnOwogCWlmIChmbGFncyAmIEdMX0FTWU5DKQpAQCAtMTY4Myw2ICsxNTc4LDEwIEBACiAJCSpwKysgPSAnaSc7CiAJaWYgKHRlc3RfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCBnZmxhZ3MpKQogCQkqcCsrID0gJ3InOworCWlmICh0ZXN0X2JpdChHTEZfSU5JVElBTCwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdJJzsKKwlpZiAodGVzdF9iaXQoR0xGX0ZST1pFTiwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdGJzsKIAkqcCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KQEAgLTE3MTcsMTQgKzE2MTYsMTMgQEAKIAlkdGltZSAqPSAxMDAwMDAwL0haOyAvKiBkZW1vdGUgdGltZSBpbiB1U2VjICovCiAJaWYgKCF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJZHRpbWUgPSAwOwotCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGw6JWQgYTolZCByOiVkXG4iLAorCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgcjolZFxuIiwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX3N0YXRlKSwKIAkJICBnbC0+Z2xfbmFtZS5sbl90eXBlLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2wtPmdsX25hbWUubG5fbnVtYmVyLAogCQkgIGdmbGFnczJzdHIoZ2ZsYWdzX2J1ZiwgJmdsLT5nbF9mbGFncyksCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF90YXJnZXQpLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfZGVtb3RlX3N0YXRlKSwgZHRpbWUsCi0JCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpLAogCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikpOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggNTQzZWM3ZS4uYTYwMmEyOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTEsMTUgKzExLDEzMCBAQAogI2RlZmluZSBfX0dMT0NLX0RPVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKLS8qIEZsYWdzIGZvciBsb2NrIHJlcXVlc3RzOyB1c2VkIGluIGdmczJfaG9sZGVyIGdoX2ZsYWcgZmllbGQuCi0gICBGcm9tIGxtX2ludGVyZmFjZS5oOgorLyogT3B0aW9ucyBmb3IgaG9zdGRhdGEgcGFyc2VyICovCisKK2VudW0geworCU9wdF9qaWQsCisJT3B0X2lkLAorCU9wdF9maXJzdCwKKwlPcHRfbm9kaXIsCisJT3B0X2VyciwKK307CisKKy8qCisgKiBsbV9sb2NrbmFtZSB0eXBlcworICovCisKKyNkZWZpbmUgTE1fVFlQRV9SRVNFUlZFRAkweDAwCisjZGVmaW5lIExNX1RZUEVfTk9ORElTSwkJMHgwMQorI2RlZmluZSBMTV9UWVBFX0lOT0RFCQkweDAyCisjZGVmaW5lIExNX1RZUEVfUkdSUAkJMHgwMworI2RlZmluZSBMTV9UWVBFX01FVEEJCTB4MDQKKyNkZWZpbmUgTE1fVFlQRV9JT1BFTgkJMHgwNQorI2RlZmluZSBMTV9UWVBFX0ZMT0NLCQkweDA2CisjZGVmaW5lIExNX1RZUEVfUExPQ0sJCTB4MDcKKyNkZWZpbmUgTE1fVFlQRV9RVU9UQQkJMHgwOAorI2RlZmluZSBMTV9UWVBFX0pPVVJOQUwJCTB4MDkKKworLyoKKyAqIGxtX2xvY2soKSBzdGF0ZXMKKyAqCisgKiBTSEFSRUQgaXMgY29tcGF0aWJsZSB3aXRoIFNIQVJFRCwgbm90IHdpdGggREVGRVJSRUQgb3IgRVguCisgKiBERUZFUlJFRCBpcyBjb21wYXRpYmxlIHdpdGggREVGRVJSRUQsIG5vdCB3aXRoIFNIQVJFRCBvciBFWC4KKyAqLworCisjZGVmaW5lIExNX1NUX1VOTE9DS0VECQkwCisjZGVmaW5lIExNX1NUX0VYQ0xVU0lWRQkJMQorI2RlZmluZSBMTV9TVF9ERUZFUlJFRAkJMgorI2RlZmluZSBMTV9TVF9TSEFSRUQJCTMKKworLyoKKyAqIGxtX2xvY2soKSBmbGFncworICoKKyAqIExNX0ZMQUdfVFJZCisgKiBEb24ndCB3YWl0IHRvIGFjcXVpcmUgdGhlIGxvY2sgaWYgaXQgY2FuJ3QgYmUgZ3JhbnRlZCBpbW1lZGlhdGVseS4KKyAqCisgKiBMTV9GTEFHX1RSWV8xQ0IKKyAqIFNlbmQgb25lIGJsb2NraW5nIGNhbGxiYWNrIGlmIFRSWSBpcyBzZXQgYW5kIHRoZSBsb2NrIGlzIG5vdCBncmFudGVkLgorICoKKyAqIExNX0ZMQUdfTk9FWFAKKyAqIEdGUyBzZXRzIHRoaXMgZmxhZyBvbiBsb2NrIHJlcXVlc3RzIGl0IG1ha2VzIHdoaWxlIGRvaW5nIGpvdXJuYWwgcmVjb3ZlcnkuCisgKiBUaGVzZSBzcGVjaWFsIHJlcXVlc3RzIHNob3VsZCBub3QgYmUgYmxvY2tlZCBkdWUgdG8gdGhlIHJlY292ZXJ5IGxpa2UKKyAqIG9yZGluYXJ5IGxvY2tzIHdvdWxkIGJlLgorICoKKyAqIExNX0ZMQUdfQU5ZCisgKiBBIFNIQVJFRCByZXF1ZXN0IG1heSBhbHNvIGJlIGdyYW50ZWQgaW4gREVGRVJSRUQsIG9yIGEgREVGRVJSRUQgcmVxdWVzdCBtYXkKKyAqIGFsc28gYmUgZ3JhbnRlZCBpbiBTSEFSRUQuICBUaGUgcHJlZmVycmVkIHN0YXRlIGlzIHdoaWNoZXZlciBpcyBjb21wYXRpYmxlCisgKiB3aXRoIG90aGVyIGdyYW50ZWQgbG9ja3MsIG9yIHRoZSBzcGVjaWZpZWQgc3RhdGUgaWYgbm8gb3RoZXIgbG9ja3MgZXhpc3QuCisgKgorICogTE1fRkxBR19QUklPUklUWQorICogT3ZlcnJpZGUgZmFpcm5lc3MgY29uc2lkZXJhdGlvbnMuICBTdXBwb3NlIGEgbG9jayBpcyBoZWxkIGluIGEgc2hhcmVkIHN0YXRlCisgKiBhbmQgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcXVlc3QgZm9yIHRoZSBkZWZlcnJlZCBzdGF0ZS4gIEEgc2hhcmVkIGxvY2sKKyAqIHJlcXVlc3Qgd2l0aCB0aGUgcHJpb3JpdHkgZmxhZyB3b3VsZCBiZSBhbGxvd2VkIHRvIGJ5cGFzcyB0aGUgZGVmZXJyZWQKKyAqIHJlcXVlc3QgYW5kIGRpcmVjdGx5IGpvaW4gdGhlIG90aGVyIHNoYXJlZCBsb2NrLiAgQSBzaGFyZWQgbG9jayByZXF1ZXN0CisgKiB3aXRob3V0IHRoZSBwcmlvcml0eSBmbGFnIG1pZ2h0IGJlIGZvcmNlZCB0byB3YWl0IHVudGlsIHRoZSBkZWZlcnJlZAorICogcmVxdWVzdGVkIGhhZCBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgdGhlIGxvY2suCisgKi8KKwogI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQogI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKICNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAogI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAgKi8KKyNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCisjZGVmaW5lIEdMX0FTWU5DCQkweDAwMDAwMDQwCisjZGVmaW5lIEdMX0VYQUNUCQkweDAwMDAwMDgwCisjZGVmaW5lIEdMX1NLSVAJCQkweDAwMDAwMTAwCisjZGVmaW5lIEdMX0FUSU1FCQkweDAwMDAwMjAwCisjZGVmaW5lIEdMX05PQ0FDSEUJCTB4MDAwMDA0MDAKKyAgCisvKgorICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKKyAqCisgKiBMTV9PVVRfU1RfTUFTSworICogTWFza3MgdGhlIGxvd2VyIHR3byBiaXRzIG9mIGxvY2sgc3RhdGUgaW4gdGhlIHJldHVybmVkIHZhbHVlLgorICoKKyAqIExNX09VVF9DQU5DRUxFRAorICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCisgKgorICogTE1fT1VUX0FTWU5DCisgKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCisgKgorICovCisKKyNkZWZpbmUgTE1fT1VUX1NUX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgTE1fT1VUX0NBTkNFTEVECQkweDAwMDAwMDA4CisjZGVmaW5lIExNX09VVF9BU1lOQwkJMHgwMDAwMDA4MAorI2RlZmluZSBMTV9PVVRfRVJST1IJCTB4MDAwMDAxMDAKKworLyoKKyAqIGxtX3JlY292ZXJ5X2RvbmUoKSBtZXNzYWdlcworICovCisKKyNkZWZpbmUgTE1fUkRfR0FWRVVQCQkzMDgKKyNkZWZpbmUgTE1fUkRfU1VDQ0VTUwkJMzA5CisKKyNkZWZpbmUgR0xSX1RSWUZBSUxFRAkJMTMKKworc3RydWN0IGxtX2xvY2tvcHMgeworCWNvbnN0IGNoYXIgKmxtX3Byb3RvX25hbWU7CisJaW50ICgqbG1fbW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqZnNuYW1lKTsKKyAJdm9pZCAoKmxtX3VubW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisJdm9pZCAoKmxtX3dpdGhkcmF3KSAoc3RydWN0IGdmczJfc2JkICpzZHApOworCXZvaWQgKCpsbV9wdXRfbG9jaykgKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKmdsKTsKKwl1bnNpZ25lZCBpbnQgKCpsbV9sb2NrKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsLAorCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCXZvaWQgKCpsbV9jYW5jZWwpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOworCWNvbnN0IG1hdGNoX3RhYmxlX3QgKmxtX3Rva2VuczsKK307CisKKyNkZWZpbmUgTE1fRkxBR19UUlkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTE1fRkxBR19UUllfMUNCCQkweDAwMDAwMDAyCisjZGVmaW5lIExNX0ZMQUdfTk9FWFAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTE1fRkxBR19BTlkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCiAKICNkZWZpbmUgR0xfQVNZTkMJCTB4MDAwMDAwNDAKICNkZWZpbmUgR0xfRVhBQ1QJCTB4MDAwMDAwODAKQEAgLTEyOCwxMCArMjQzLDEyIEBACiBpbnQgZ2ZzMl9sdmJfaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogdm9pZCBnZnMyX2x2Yl91bmhvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAotdm9pZCBnZnMyX2dsb2NrX2NiKHZvaWQgKmNiX2RhdGEsIHVuc2lnbmVkIGludCB0eXBlLCB2b2lkICpkYXRhKTsKK3ZvaWQgZ2ZzMl9nbG9ja19jYihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSk7Cit2b2lkIGdmczJfZ2xvY2tfY29tcGxldGUoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgcmV0KTsKIHZvaWQgZ2ZzMl9yZWNsYWltX2dsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9nbF9oYXNoX2NsZWFyKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9nbG9ja19maW5pc2hfdHJ1bmNhdGUoc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKK3ZvaWQgZ2ZzMl9nbG9ja190aGF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogaW50IF9faW5pdCBnZnMyX2dsb2NrX2luaXQodm9pZCk7CiB2b2lkIGdmczJfZ2xvY2tfZXhpdCh2b2lkKTsKQEAgLTE0MSw0ICsyNTgsNiBAQAogaW50IGdmczJfcmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKIHZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZnMyX2RsbV9vcHM7CisKICNlbmRpZiAvKiBfX0dMT0NLX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuYyBiL2ZzL2dmczIvZ2xvcHMuYwppbmRleCA4NTIyZDNhLi5iZjIzYTYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmMKKysrIGIvZnMvZ2ZzMi9nbG9wcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTM4LDE5ICszNywyNCBAQAogc3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfZ2woc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKLQl1bnNpZ25lZCBpbnQgYmxvY2tzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmZ2wtPmdsX2FpbF9saXN0OwogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVycm9yOworCXN0cnVjdCBnZnMyX3RyYW5zIHRyOwogCi0JYmxvY2tzID0gYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpOwotCWlmICghYmxvY2tzKQorCW1lbXNldCgmdHIsIDAsIHNpemVvZih0cikpOworCXRyLnRyX3Jldm9rZXMgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7CisKKwlpZiAoIXRyLnRyX3Jldm9rZXMpCiAJCXJldHVybjsKIAotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDAsIGJsb2Nrcyk7Ci0JaWYgKGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWVycm9yKSkKLQkJcmV0dXJuOworCS8qIEEgc2hvcnRlbmVkLCBpbmxpbmUgdmVyc2lvbiBvZiBnZnMyX3RyYW5zX2JlZ2luKCkgKi8KKwl0ci50cl9yZXNlcnZlZCA9IDEgKyBnZnMyX3N0cnVjdDJibGsoc2RwLCB0ci50cl9yZXZva2VzLCBzaXplb2YodTY0KSk7CisJdHIudHJfaXAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJSU5JVF9MSVNUX0hFQUQoJnRyLnRyX2xpc3RfYnVmKTsKKwlnZnMyX2xvZ19yZXNlcnZlKHNkcCwgdHIudHJfcmVzZXJ2ZWQpOworCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8pOworCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9ICZ0cjsKIAogCWdmczJfbG9nX2xvY2soc2RwKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTcyLDI5ICs3Niw3IEBACiB9CiAKIC8qKgotICogZ2ZzMl9wdGVfaW52YWwgLSBTeW5jIGFuZCBpbnZhbGlkYXRlIGFsbCBQVEVzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBnZnMyX3B0ZV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlpcCA9IGdsLT5nbF9vYmplY3Q7Ci0JaW5vZGUgPSAmaXAtPmlfaW5vZGU7Ci0JaWYgKCFpcCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuOwotCi0JdW5tYXBfc2hhcmVkX21hcHBpbmdfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgMCwgMCk7Ci0JaWYgKHRlc3RfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKSkKLQkJc2V0X2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOwotCi19Ci0KLS8qKgotICogbWV0YV9nb19zeW5jIC0gc3luYyBvdXQgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCisgKiByZ3JwX2dvX3N5bmMgLSBzeW5jIG91dCB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKICAqIEBnbDogdGhlIGdsb2NrCiAgKgogICogQ2FsbGVkIHdoZW4gZGVtb3Rpbmcgb3IgdW5sb2NraW5nIGFuIEVYIGdsb2NrLiAgV2UgbXVzdCBmbHVzaApAQCAtMTAyLDM2ICs4NCw0MiBAQAogICogbm90IHJldHVybiB0byBjYWxsZXIgdG8gZGVtb3RlL3VubG9jayB0aGUgZ2xvY2sgdW50aWwgSS9PIGlzIGNvbXBsZXRlLgogICovCiAKLXN0YXRpYyB2b2lkIG1ldGFfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCitzdGF0aWMgdm9pZCByZ3JwX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKQotCQlyZXR1cm47CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCWludCBlcnJvcjsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkgewotCQlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7Ci0JCWdmczJfbWV0YV9zeW5jKGdsKTsKLQkJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwotCX0KKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CisJQlVHX09OKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOworCisJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CisJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisgICAgICAgIG1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7CisJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwogfQogCiAvKioKLSAqIG1ldGFfZ29faW52YWwgLSBpbnZhbGlkYXRlIHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jaworICogcmdycF9nb19pbnZhbCAtIGludmFsaWRhdGUgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICogQGZsYWdzOgogICoKKyAqIFdlIG5ldmVyIHVzZWQgTE1fU1RfREVGRVJSRUQgd2l0aCByZXNvdXJjZSBncm91cHMsIHNvIHRoYXQgd2UKKyAqIHNob3VsZCBhbHdheXMgc2VlIHRoZSBtZXRhZGF0YSBmbGFnIHNldCBoZXJlLgorICoKICAqLwogCi1zdGF0aWMgdm9pZCBtZXRhX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQorc3RhdGljIHZvaWQgcmdycF9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKIHsKLQlpZiAoIShmbGFncyAmIERJT19NRVRBREFUQSkpCi0JCXJldHVybjsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKIAotCWdmczJfbWV0YV9pbnZhbChnbCk7Ci0JaWYgKGdsLT5nbF9vYmplY3QgPT0gR0ZTMl9JKGdsLT5nbF9zYmQtPnNkX3JpbmRleCkpCi0JCWdsLT5nbF9zYmQtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDA7Ci0JZWxzZSBpZiAoZ2wtPmdsX29wcyA9PSAmZ2ZzMl9yZ3JwX2dsb3BzICYmIGdsLT5nbF9vYmplY3QpIHsKKwlCVUdfT04oIShmbGFncyAmIERJT19NRVRBREFUQSkpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOworCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOworCisJaWYgKGdsLT5nbF9vYmplY3QpIHsKIAkJc3RydWN0IGdmczJfcmdycGQgKnJnZCA9IChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqKWdsLT5nbF9vYmplY3Q7Ci0KIAkJcmdkLT5yZF9mbGFncyAmPSB+R0ZTMl9SREZfVVBUT0RBVEU7CiAJfQogfQpAQCAtMTQ4LDQ4ICsxMzYsNTQgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CiAJaW50IGVycm9yOwogCi0JaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCkKLQkJZ2ZzMl9wdGVfaW52YWwoZ2wpOwotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKQotCQlyZXR1cm47Ci0KIAlpZiAoaXAgJiYgIVNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKIAkJaXAgPSBOVUxMOworCWlmIChpcCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoR0lGX1NXX1BBR0VELCAmaXAtPmlfZmxhZ3MpKQorCQl1bm1hcF9zaGFyZWRfbWFwcGluZ19yYW5nZShpcC0+aV9pbm9kZS5pX21hcHBpbmcsIDAsIDApOworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpCisJCXJldHVybjsKIAotCWlmICh0ZXN0X2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKLQkJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKLQkJaWYgKGlwKSB7Ci0JCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX2lub2RlLmlfbWFwcGluZzsKLQkJCWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKLQkJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7Ci0JCQltYXBwaW5nX3NldF9lcnJvcihtYXBwaW5nLCBlcnJvcik7Ci0JCX0KLQkJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7Ci0JCW1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7Ci0JCWNsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOwotCQlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CisJQlVHX09OKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOworCisJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CisJaWYgKGlwKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaXAtPmlfaW5vZGUuaV9tYXBwaW5nOworCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7CisJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7CisJCW1hcHBpbmdfc2V0X2Vycm9yKG1hcHBpbmcsIGVycm9yKTsKIAl9CisJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisJbWFwcGluZ19zZXRfZXJyb3IobWV0YW1hcHBpbmcsIGVycm9yKTsKKwlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CiB9CiAKIC8qKgogICogaW5vZGVfZ29faW52YWwgLSBwcmVwYXJlIGEgaW5vZGUgZ2xvY2sgdG8gYmUgcmVsZWFzZWQKICAqIEBnbDogdGhlIGdsb2NrCiAgKiBAZmxhZ3M6CisgKiAKKyAqIE5vcm1hbGx5IHdlIGludmxpZGF0ZSBldmVyeXRoaW5nLCBidXQgaWYgd2UgYXJlIG1vdmluZyBpbnRvCisgKiBMTV9TVF9ERUZFUlJFRCBmcm9tIExNX1NUX1NIQVJFRCBvciBMTV9TVF9FWENMVVNJVkUgdGhlbiB3ZQorICogY2FuIGtlZXAgaG9sZCBvZiB0aGUgbWV0YWRhdGEsIHNpbmNlIGl0IHdvbid0IGhhdmUgY2hhbmdlZC4KICAqCiAgKi8KIAogc3RhdGljIHZvaWQgaW5vZGVfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gZ2wtPmdsX29iamVjdDsKLQlpbnQgbWV0YSA9IChmbGFncyAmIERJT19NRVRBREFUQSk7CiAKLQlpZiAobWV0YSkgewotCQlnZnMyX21ldGFfaW52YWwoZ2wpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOworCisJaWYgKGZsYWdzICYgRElPX01FVEFEQVRBKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKIAkJaWYgKGlwKQogCQkJc2V0X2JpdChHSUZfSU5WQUxJRCwgJmlwLT5pX2ZsYWdzKTsKIAl9CiAKKwlpZiAoaXAgPT0gR0ZTMl9JKGdsLT5nbF9zYmQtPnNkX3JpbmRleCkpCisJCWdsLT5nbF9zYmQtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDA7CiAJaWYgKGlwICYmIFNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaXAtPmlfaW5vZGUuaV9tYXBwaW5nLCAwKTsKIH0KQEAgLTM5MCwyMCArMzg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBxdW90YV9nb19kZW1vdGVfb2sgLSBDaGVjayB0byBzZWUgaWYgaXQncyBvayB0byB1bmxvY2sgYSBxdW90YSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKiBSZXR1cm5zOiAxIGlmIGl0J3Mgb2sKLSAqLwotCi1zdGF0aWMgaW50IHF1b3RhX2dvX2RlbW90ZV9vayhjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0JcmV0dXJuICFhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9tZXRhX2dsb3BzID0gewotCS5nb194bW90ZV90aCA9IG1ldGFfZ29fc3luYywKIAkuZ29fdHlwZSA9IExNX1RZUEVfTUVUQSwKIH07CiAKQEAgLTQxOCw4ICszOTksOCBAQAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3JncnBfZ2xvcHMgPSB7Ci0JLmdvX3htb3RlX3RoID0gbWV0YV9nb19zeW5jLAotCS5nb19pbnZhbCA9IG1ldGFfZ29faW52YWwsCisJLmdvX3htb3RlX3RoID0gcmdycF9nb19zeW5jLAorCS5nb19pbnZhbCA9IHJncnBfZ29faW52YWwsCiAJLmdvX2RlbW90ZV9vayA9IHJncnBfZ29fZGVtb3RlX29rLAogCS5nb19sb2NrID0gcmdycF9nb19sb2NrLAogCS5nb191bmxvY2sgPSByZ3JwX2dvX3VubG9jaywKQEAgLTQ0OCw3ICs0MjksNiBAQAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3F1b3RhX2dsb3BzID0gewotCS5nb19kZW1vdGVfb2sgPSBxdW90YV9nb19kZW1vdGVfb2ssCiAJLmdvX3R5cGUgPSBMTV9UWVBFX1FVT1RBLAogfTsKIApAQCAtNDU2LDMgKzQzNiwxNSBAQAogCS5nb190eXBlID0gTE1fVFlQRV9KT1VSTkFMLAogfTsKIAorY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2ZzMl9nbG9wc19saXN0W10gPSB7CisJW0xNX1RZUEVfTUVUQV0gPSAmZ2ZzMl9tZXRhX2dsb3BzLAorCVtMTV9UWVBFX0lOT0RFXSA9ICZnZnMyX2lub2RlX2dsb3BzLAorCVtMTV9UWVBFX1JHUlBdID0gJmdmczJfcmdycF9nbG9wcywKKwlbTE1fVFlQRV9OT05ESVNLXSA9ICZnZnMyX3RyYW5zX2dsb3BzLAorCVtMTV9UWVBFX0lPUEVOXSA9ICZnZnMyX2lvcGVuX2dsb3BzLAorCVtMTV9UWVBFX0ZMT0NLXSA9ICZnZnMyX2Zsb2NrX2dsb3BzLAorCVtMTV9UWVBFX05PTkRJU0tdID0gJmdmczJfbm9uZGlza19nbG9wcywKKwlbTE1fVFlQRV9RVU9UQV0gPSAmZ2ZzMl9xdW90YV9nbG9wcywKKwlbTE1fVFlQRV9KT1VSTkFMXSA9ICZnZnMyX2pvdXJuYWxfZ2xvcHMsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmggYi9mcy9nZnMyL2dsb3BzLmgKaW5kZXggYTFkOWI1Yi4uYjNhYTJlMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5oCisrKyBiL2ZzL2dmczIvZ2xvcHMuaApAQCAtMjEsNSArMjEsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9ub25kaXNrX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9xdW90YV9nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfam91cm5hbF9nbG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnZnMyX2dsb3BzX2xpc3RbXTsKIAogI2VuZGlmIC8qIF9fR0xPUFNfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggNjA4ODQ5ZC4uMzk5ZDFiOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAKICNkZWZpbmUgRElPX1dBSVQJMHgwMDAwMDAxMAogI2RlZmluZSBESU9fTUVUQURBVEEJMHgwMDAwMDAyMApAQCAtMjYsNiArMjgsNyBAQAogc3RydWN0IGdmczJfYWlsOwogc3RydWN0IGdmczJfamRlc2M7CiBzdHJ1Y3QgZ2ZzMl9zYmQ7CitzdHJ1Y3QgbG1fbG9ja29wczsKIAogdHlwZWRlZiB2b2lkICgqZ2ZzMl9nbG9wX2JoX3QpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCByZXQpOwogCkBAIC0xMjEsNiArMTI0LDI4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBiZF9haWxfZ2xfbGlzdDsKIH07CiAKKy8qCisgKiBJbnRlcm5hbGx5LCB3ZSBwcmVmaXggdGhpbmdzIHdpdGggZ2RsbV8gYW5kIEdETE1fIChmb3IgZ2ZzLWRsbSkgc2luY2UgYQorICogcHJlZml4IG9mIGxvY2tfZGxtXyBnZXRzIGF3a3dhcmQuCisgKi8KKworI2RlZmluZSBHRExNX1NUUk5BTUVfQllURVMJMjUKKyNkZWZpbmUgR0RMTV9MVkJfU0laRQkJMzIKKworZW51bSB7CisJREZMX0JMT0NLX0xPQ0tTCQk9IDAsCit9OworCitzdHJ1Y3QgbG1fbG9ja25hbWUgeworCXU2NCBsbl9udW1iZXI7CisJdW5zaWduZWQgaW50IGxuX3R5cGU7Cit9OworCisjZGVmaW5lIGxtX25hbWVfZXF1YWwobmFtZTEsIG5hbWUyKSBcCisgICAgICAgICgoKG5hbWUxKS0+bG5fbnVtYmVyID09IChuYW1lMiktPmxuX251bWJlcikgJiYgXAorICAgICAgICAgKChuYW1lMSktPmxuX3R5cGUgPT0gKG5hbWUyKS0+bG5fdHlwZSkpCisKKwogc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyB7CiAJdm9pZCAoKmdvX3htb3RlX3RoKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAlpbnQgKCpnb194bW90ZV9iaCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgc3RydWN0IGdmczJfaG9sZGVyICpnaCk7CkBAIC0xNjIsNiArMTg3LDggQEAKIAlHTEZfTEZMVVNICQkJPSA3LAogCUdMRl9JTlZBTElEQVRFX0lOX1BST0dSRVNTCT0gOCwKIAlHTEZfUkVQTFlfUEVORElORwkJPSA5LAorCUdMRl9JTklUSUFMCQkJPSAxMCwKKwlHTEZfRlJPWkVOCQkJPSAxMSwKIH07CiAKIHN0cnVjdCBnZnMyX2dsb2NrIHsKQEAgLTE3NiwxNiArMjAzLDE1IEBACiAJdW5zaWduZWQgaW50IGdsX3RhcmdldDsKIAl1bnNpZ25lZCBpbnQgZ2xfcmVwbHk7CiAJdW5zaWduZWQgaW50IGdsX2hhc2g7CisJdW5zaWduZWQgaW50IGdsX3JlcTsKIAl1bnNpZ25lZCBpbnQgZ2xfZGVtb3RlX3N0YXRlOyAvKiBzdGF0ZSByZXF1ZXN0ZWQgYnkgcmVtb3RlIG5vZGUgKi8KIAl1bnNpZ25lZCBsb25nIGdsX2RlbW90ZV90aW1lOyAvKiB0aW1lIG9mIGZpcnN0IGRlbW90ZSByZXF1ZXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBnbF9ob2xkZXJzOwogCiAJY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xfb3BzOwotCXZvaWQgKmdsX2xvY2s7Ci0JY2hhciAqZ2xfbHZiOwotCWF0b21pY190IGdsX2x2Yl9jb3VudDsKLQotCXVuc2lnbmVkIGxvbmcgZ2xfc3RhbXA7CisJY2hhciBnbF9zdHJuYW1lW0dETE1fU1RSTkFNRV9CWVRFU107CisJc3RydWN0IGRsbV9sa3NiIGdsX2xrc2I7CisJY2hhciBnbF9sdmJbMzJdOwogCXVuc2lnbmVkIGxvbmcgZ2xfdGNoYW5nZTsKIAl2b2lkICpnbF9vYmplY3Q7CiAKQEAgLTI4Myw3ICszMDksOSBAQAogCiBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHFkX2xpc3Q7Ci0JdW5zaWduZWQgaW50IHFkX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgcWRfcmVjbGFpbTsKKworCWF0b21pY190IHFkX2NvdW50OwogCiAJdTMyIHFkX2lkOwogCXVuc2lnbmVkIGxvbmcgcWRfZmxhZ3M7CQkvKiBRREZfLi4uICovCkBAIC0zMDMsNyArMzMxLDYgQEAKIAogCXU2NCBxZF9zeW5jX2dlbjsKIAl1bnNpZ25lZCBsb25nIHFkX2xhc3Rfd2FybjsKLQl1bnNpZ25lZCBsb25nIHFkX2xhc3RfdG91Y2hlZDsKIH07CiAKIHN0cnVjdCBnZnMyX3RyYW5zIHsKQEAgLTM5MCw3ICs0MTcsNyBAQAogCXVuc2lnbmVkIGludCBhcl9zdWlkZGlyOjE7CQkvKiBzdWlkZGlyIHN1cHBvcnQgKi8KIAl1bnNpZ25lZCBpbnQgYXJfZGF0YToyOwkJCS8qIG9yZGVyZWQvd3JpdGViYWNrICovCiAJdW5zaWduZWQgaW50IGFyX21ldGE6MTsJCQkvKiBtb3VudCBtZXRhZnMgKi8KLQl1bnNpZ25lZCBpbnQgYXJfbnVtX2dsb2NrZDsJCS8qIE51bWJlciBvZiBnbG9ja2QgdGhyZWFkcyAqLworCXVuc2lnbmVkIGludCBhcl9kaXNjYXJkOjE7CQkvKiBkaXNjYXJkIHJlcXVlc3RzICovCiB9OwogCiBzdHJ1Y3QgZ2ZzMl90dW5lIHsKQEAgLTQwNiw3ICs0MzMsNiBAQAogCXVuc2lnbmVkIGludCBndF9xdW90YV93YXJuX3BlcmlvZDsgLyogU2VjcyBiZXR3ZWVuIHF1b3RhIHdhcm4gbXNncyAqLwogCXVuc2lnbmVkIGludCBndF9xdW90YV9zY2FsZV9udW07IC8qIE51bWVyYXRvciAqLwogCXVuc2lnbmVkIGludCBndF9xdW90YV9zY2FsZV9kZW47IC8qIERlbm9taW5hdG9yICovCi0JdW5zaWduZWQgaW50IGd0X3F1b3RhX2NhY2hlX3NlY3M7CiAJdW5zaWduZWQgaW50IGd0X3F1b3RhX3F1YW50dW07IC8qIFNlY3MgYmV0d2VlbiBzeW5jcyB0byBxdW90YSBmaWxlICovCiAJdW5zaWduZWQgaW50IGd0X25ld19maWxlc19qZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3RfbWF4X3JlYWRhaGVhZDsgLyogTWF4IGJ5dGVzIHRvIHJlYWQtYWhlYWQgZnJvbSBkaXNrICovCkBAIC00NDUsNiArNDcxLDMxIEBACiAKIAljaGFyIHNiX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTl07CiAJY2hhciBzYl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU5dOworCXU4IHNiX3V1aWRbMTZdOworfTsKKworLyoKKyAqIGxtX21vdW50KCkgcmV0dXJuIHZhbHVlcworICoKKyAqIGxzX2ppZCAtIHRoZSBqb3VybmFsIElEIHRoaXMgbm9kZSBzaG91bGQgdXNlCisgKiBsc19maXJzdCAtIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtCisgKiBsc19sb2Nrc3BhY2UgLSBsb2NrIG1vZHVsZSdzIGNvbnRleHQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0KKyAqIGxzX29wcyAtIGxvY2sgbW9kdWxlJ3MgZnVuY3Rpb25zCisgKi8KKworc3RydWN0IGxtX2xvY2tzdHJ1Y3QgeworCXUzMiBsc19pZDsKKwl1bnNpZ25lZCBpbnQgbHNfamlkOworCXVuc2lnbmVkIGludCBsc19maXJzdDsKKwl1bnNpZ25lZCBpbnQgbHNfZmlyc3RfZG9uZTsKKwl1bnNpZ25lZCBpbnQgbHNfbm9kaXI7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxzX29wczsKKwl1bnNpZ25lZCBsb25nIGxzX2ZsYWdzOworCWRsbV9sb2Nrc3BhY2VfdCAqbHNfZGxtOworCisJaW50IGxzX3JlY292ZXJfamlkOworCWludCBsc19yZWNvdmVyX2ppZF9kb25lOworCWludCBsc19yZWNvdmVyX2ppZF9zdGF0dXM7CiB9OwogCiBzdHJ1Y3QgZ2ZzMl9zYmQgewpAQCAtNTIwLDcgKzU3MSw2IEBACiAJc3BpbmxvY2tfdCBzZF9qaW5kZXhfc3BpbjsKIAlzdHJ1Y3QgbXV0ZXggc2RfamluZGV4X211dGV4OwogCXVuc2lnbmVkIGludCBzZF9qb3VybmFsczsKLQl1bnNpZ25lZCBsb25nIHNkX2ppbmRleF9yZWZyZXNoX3RpbWU7CiAKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqc2RfamRlc2M7CiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2pvdXJuYWxfZ2g7CkBAIC01NDAsNyArNTkwLDYgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgc2RfcXVvdGFfbGlzdDsKIAlhdG9taWNfdCBzZF9xdW90YV9jb3VudDsKLQlzcGlubG9ja190IHNkX3F1b3RhX3NwaW47CiAJc3RydWN0IG11dGV4IHNkX3F1b3RhX211dGV4OwogCXdhaXRfcXVldWVfaGVhZF90IHNkX3F1b3RhX3dhaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBzZF90cnVuY19saXN0OwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDNiODdjMTguLjdiMjc3ZDQ0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIApAQCAtMTM3LDE2ICsxMzYsMTYgQEAKIAogCWlmIChTX0lTUkVHKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfZmlsZV9pb3BzOwotCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZmlsZV9mb3BzX25vbG9jazsKKwkJaWYgKGdmczJfbG9jYWxmbG9ja3Moc2RwKSkKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZmlsZV9mb3BzX25vbG9jazsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZmlsZV9mb3BzOworCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9maWxlX2ZvcHM7CiAJfSBlbHNlIGlmIChTX0lTRElSKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfZGlyX2lvcHM7Ci0JCWlmIChzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCQlpbm9kZS0+aV9mb3AgPSAmZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CisJCWlmIChnZnMyX2xvY2FsZmxvY2tzKHNkcCkpCisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2Rpcl9mb3BzX25vbG9jazsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZGlyX2ZvcHM7CisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2Rpcl9mb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX3N5bWxpbmtfaW9wczsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5oIGIvZnMvZ2ZzMi9pbm9kZS5oCmluZGV4IGQ1MzI5MzYuLmRjYTRmZWUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuaAorKysgYi9mcy9nZnMyL2lub2RlLmgKQEAgLTEwMSwxMiArMTAxLDI2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX3N5bWxpbmtfaW9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzX25vbG9jazsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHNfbm9sb2NrOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzX25vbG9jazsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzX25vbG9jazsKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSk7CisgCisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzOworc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9sb2NhbGZsb2Nrcyhjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlyZXR1cm4gc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzOworfQorI2Vsc2UgLyogU2luZ2xlIG5vZGUgb25seSAqLworI2RlZmluZSBnZnMyX2ZpbGVfZm9wcyBOVUxMCisjZGVmaW5lIGdmczJfZGlyX2ZvcHMgTlVMTAorc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9sb2NhbGZsb2Nrcyhjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSAqLwogCiAjZW5kaWYgLyogX19JTk9ERV9ET1RfSF9fICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja19kbG0uYyBiL2ZzL2dmczIvbG9ja19kbG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmRmOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZ2ZzMi9sb2NrX2RsbS5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CisKKyNpbmNsdWRlICJpbmNvcmUuaCIKKyNpbmNsdWRlICJnbG9jay5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworCitzdGF0aWMgdm9pZCBnZGxtX2FzdCh2b2lkICphcmcpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYXJnOworCXVuc2lnbmVkIHJldCA9IGdsLT5nbF9zdGF0ZTsKKworCUJVR19PTihnbC0+Z2xfbGtzYi5zYl9mbGFncyAmIERMTV9TQkZfREVNT1RFRCk7CisKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX1ZBTE5PVFZBTElEKQorCQltZW1zZXQoZ2wtPmdsX2x2YiwgMCwgR0RMTV9MVkJfU0laRSk7CisKKwlzd2l0Y2ggKGdsLT5nbF9sa3NiLnNiX3N0YXR1cykgeworCWNhc2UgLURMTV9FVU5MT0NLOiAvKiBVbmxvY2tlZCwgc28gZ2xvY2sgY2FuIGJlIGZyZWVkICovCisJCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOworCQlyZXR1cm47CisJY2FzZSAtRExNX0VDQU5DRUw6IC8qIENhbmNlbCB3aGlsZSBnZXR0aW5nIGxvY2sgKi8KKwkJcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKKwkJZ290byBvdXQ7CisJY2FzZSAtRUFHQUlOOiAvKiBUcnkgbG9jayBmYWlscyAqLworCQlnb3RvIG91dDsKKwljYXNlIC1FSU5WQUw6IC8qIEludmFsaWQgKi8KKwljYXNlIC1FTk9NRU06IC8qIE91dCBvZiBtZW1vcnkgKi8KKwkJcmV0IHw9IExNX09VVF9FUlJPUjsKKwkJZ290byBvdXQ7CisJY2FzZSAwOiAvKiBTdWNjZXNzICovCisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIFNvbWV0aGluZyB1bmV4cGVjdGVkICovCisJCUJVRygpOworCX0KKworCXJldCA9IGdsLT5nbF9yZXE7CisJaWYgKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9BTFRNT0RFKSB7CisJCWlmIChnbC0+Z2xfcmVxID09IExNX1NUX1NIQVJFRCkKKwkJCXJldCA9IExNX1NUX0RFRkVSUkVEOworCQllbHNlIGlmIChnbC0+Z2xfcmVxID09IExNX1NUX0RFRkVSUkVEKQorCQkJcmV0ID0gTE1fU1RfU0hBUkVEOworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlzZXRfYml0KEdMRl9JTklUSUFMLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnZnMyX2dsb2NrX2NvbXBsZXRlKGdsLCByZXQpOworCXJldHVybjsKK291dDoKKwlpZiAoIXRlc3RfYml0KEdMRl9JTklUSUFMLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9IDA7CisJZ2ZzMl9nbG9ja19jb21wbGV0ZShnbCwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgZ2RsbV9iYXN0KHZvaWQgKmFyZywgaW50IG1vZGUpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYXJnOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBETE1fTE9DS19FWDoKKwkJZ2ZzMl9nbG9ja19jYihnbCwgTE1fU1RfVU5MT0NLRUQpOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX0NXOgorCQlnZnMyX2dsb2NrX2NiKGdsLCBMTV9TVF9ERUZFUlJFRCk7CisJCWJyZWFrOworCWNhc2UgRExNX0xPQ0tfUFI6CisJCWdmczJfZ2xvY2tfY2IoZ2wsIExNX1NUX1NIQVJFRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBiYXN0IG1vZGUgJWQiLCBtb2RlKTsKKwkJQlVHKCk7CisJfQorfQorCisvKiBjb252ZXJ0IGdmcyBsb2NrLXN0YXRlIHRvIGRsbSBsb2NrLW1vZGUgKi8KKworc3RhdGljIGludCBtYWtlX21vZGUoY29uc3QgdW5zaWduZWQgaW50IGxtc3RhdGUpCit7CisJc3dpdGNoIChsbXN0YXRlKSB7CisJY2FzZSBMTV9TVF9VTkxPQ0tFRDoKKwkJcmV0dXJuIERMTV9MT0NLX05MOworCWNhc2UgTE1fU1RfRVhDTFVTSVZFOgorCQlyZXR1cm4gRExNX0xPQ0tfRVg7CisJY2FzZSBMTV9TVF9ERUZFUlJFRDoKKwkJcmV0dXJuIERMTV9MT0NLX0NXOworCWNhc2UgTE1fU1RfU0hBUkVEOgorCQlyZXR1cm4gRExNX0xPQ0tfUFI7CisJfQorCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBMTSBzdGF0ZSAlZCIsIGxtc3RhdGUpOworCUJVRygpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHUzMiBtYWtlX2ZsYWdzKGNvbnN0IHUzMiBsa2lkLCBjb25zdCB1bnNpZ25lZCBpbnQgZ2ZzX2ZsYWdzLAorCQkgICAgICBjb25zdCBpbnQgcmVxKQoreworCXUzMiBsa2YgPSAwOworCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZKQorCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOworCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZXzFDQikgeworCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOworCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFQkFTVDsKKwl9CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19QUklPUklUWSkgeworCQlsa2YgfD0gRExNX0xLRl9OT09SREVSOworCQlsa2YgfD0gRExNX0xLRl9IRUFEUVVFOworCX0KKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX0FOWSkgeworCQlpZiAocmVxID09IERMTV9MT0NLX1BSKQorCQkJbGtmIHw9IERMTV9MS0ZfQUxUQ1c7CisJCWVsc2UgaWYgKHJlcSA9PSBETE1fTE9DS19DVykKKwkJCWxrZiB8PSBETE1fTEtGX0FMVFBSOworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlpZiAobGtpZCAhPSAwKSAKKwkJbGtmIHw9IERMTV9MS0ZfQ09OVkVSVDsKKworCWxrZiB8PSBETE1fTEtGX1ZBTEJMSzsKKworCXJldHVybiBsa2Y7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisJaW50IHJlcTsKKwl1MzIgbGtmOworCisJZ2wtPmdsX3JlcSA9IHJlcV9zdGF0ZTsKKwlyZXEgPSBtYWtlX21vZGUocmVxX3N0YXRlKTsKKwlsa2YgPSBtYWtlX2ZsYWdzKGdsLT5nbF9sa3NiLnNiX2xraWQsIGZsYWdzLCByZXEpOworCisJLyoKKwkgKiBTdWJtaXQgdGhlIGFjdHVhbCBsb2NrIHJlcXVlc3QuCisJICovCisKKwllcnJvciA9IGRsbV9sb2NrKGxzLT5sc19kbG0sIHJlcSwgJmdsLT5nbF9sa3NiLCBsa2YsIGdsLT5nbF9zdHJuYW1lLAorCQkJIEdETE1fU1RSTkFNRV9CWVRFUyAtIDEsIDAsIGdkbG1fYXN0LCBnbCwgZ2RsbV9iYXN0KTsKKwlpZiAoZXJyb3IgPT0gLUVBR0FJTikKKwkJcmV0dXJuIDA7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gTE1fT1VUX0VSUk9SOworCXJldHVybiBMTV9PVVRfQVNZTkM7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fcHV0X2xvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IHB0cjsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9PSAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwkJcmV0dXJuOworCX0KKworCWVycm9yID0gZGxtX3VubG9jayhscy0+bHNfZGxtLCBnbC0+Z2xfbGtzYi5zYl9sa2lkLCBETE1fTEtGX1ZBTEJMSywKKwkJCSAgIE5VTEwsIGdsKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnZGxtX3VubG9jayAleCwlbGx4IGVycj0lZFxuIiwKKwkJICAgICAgIGdsLT5nbF9uYW1lLmxuX3R5cGUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwgZXJyb3IpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBnZGxtX2NhbmNlbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJZGxtX3VubG9jayhscy0+bHNfZGxtLCBnbC0+Z2xfbGtzYi5zYl9sa2lkLCBETE1fTEtGX0NBTkNFTCwgTlVMTCwgZ2wpOworfQorCitzdGF0aWMgaW50IGdkbG1fbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmZzbmFtZSkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWludCBlcnJvcjsKKworCWlmIChmc25hbWUgPT0gTlVMTCkgeworCQlmc19pbmZvKHNkcCwgIm5vIGZzbmFtZSBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVycm9yID0gZGxtX25ld19sb2Nrc3BhY2UoZnNuYW1lLCBzdHJsZW4oZnNuYW1lKSwgJmxzLT5sc19kbG0sCisJCQkJICBETE1fTFNGTF9GUyB8IERMTV9MU0ZMX05FV0VYQ0wgfAorCQkJCSAgKGxzLT5sc19ub2RpciA/IERMTV9MU0ZMX05PRElSIDogMCksCisJCQkJICBHRExNX0xWQl9TSVpFKTsKKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX0VSUiAiZGxtX25ld19sb2Nrc3BhY2UgZXJyb3IgJWQiLCBlcnJvcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCisJaWYgKGxzLT5sc19kbG0pIHsKKwkJZGxtX3JlbGVhc2VfbG9ja3NwYWNlKGxzLT5sc19kbG0sIDIpOworCQlscy0+bHNfZGxtID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGRsbV90b2tlbnMgPSB7CisJeyBPcHRfamlkLCAiamlkPSVkIn0sCisJeyBPcHRfaWQsICJpZD0lZCJ9LAorCXsgT3B0X2ZpcnN0LCAiZmlyc3Q9JWQifSwKKwl7IE9wdF9ub2RpciwgIm5vZGlyPSVkIn0sCisJeyBPcHRfZXJyLCBOVUxMIH0sCit9OworCitjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZnMyX2RsbV9vcHMgPSB7CisJLmxtX3Byb3RvX25hbWUgPSAibG9ja19kbG0iLAorCS5sbV9tb3VudCA9IGdkbG1fbW91bnQsCisJLmxtX3VubW91bnQgPSBnZGxtX3VubW91bnQsCisJLmxtX3B1dF9sb2NrID0gZ2RsbV9wdXRfbG9jaywKKwkubG1fbG9jayA9IGdkbG1fbG9jaywKKwkubG1fY2FuY2VsID0gZ2RsbV9jYW5jZWwsCisJLmxtX3Rva2VucyA9ICZkbG1fdG9rZW5zLAorfTsKKwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nLmMgYi9mcy9nZnMyL2xvY2tpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzMjQzYS4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgotCi1zdHJ1Y3QgbG1oX3dyYXBwZXIgewotCXN0cnVjdCBsaXN0X2hlYWQgbHdfbGlzdDsKLQljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHdfb3BzOwotfTsKLQotc3RhdGljIGludCBub2xvY2tfbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLS8qIExpc3Qgb2YgcmVnaXN0ZXJlZCBsb3ctbGV2ZWwgbG9ja2luZyBwcm90b2NvbHMuICBBIGZpbGUgc3lzdGVtIHNlbGVjdHMgb25lCi0gICBvZiB0aGVtIGJ5IG5hbWUgYXQgbW91bnQgdGltZSwgZS5nLiBsb2NrX25vbG9jaywgbG9ja19kbG0uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0gewotCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKLQkubG1fbW91bnQgPSBub2xvY2tfbW91bnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGxtaF93cmFwcGVyIG5vbG9ja19wcm90byAgPSB7Ci0JLmx3X2xpc3QgPSBMSVNUX0hFQURfSU5JVChub2xvY2tfcHJvdG8ubHdfbGlzdCksCi0JLmx3X29wcyA9ICZub2xvY2tfb3BzLAotfTsKLQotc3RhdGljIExJU1RfSEVBRChsbWhfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGxtaF9sb2NrKTsKLQotc3RhdGljIGludCBub2xvY2tfbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQljaGFyICpjOwotCXVuc2lnbmVkIGludCBqaWQ7Ci0KLQljID0gc3Ryc3RyKGhvc3RfZGF0YSwgImppZD0iKTsKLQlpZiAoIWMpCi0JCWppZCA9IDA7Ci0JZWxzZSB7Ci0JCWMgKz0gNDsKLQkJc3NjYW5mKGMsICIldSIsICZqaWQpOwotCX0KLQotCWxvY2tzdHJ1Y3QtPmxzX2ppZCA9IGppZDsKLQlsb2Nrc3RydWN0LT5sc19maXJzdCA9IDE7Ci0JbG9ja3N0cnVjdC0+bHNfbHZiX3NpemUgPSBtaW5fbHZiX3NpemU7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzID0gJm5vbG9ja19vcHM7Ci0JbG9ja3N0cnVjdC0+bHNfZmxhZ3MgPSBMTV9MU0ZMQUdfTE9DQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byAtIFJlZ2lzdGVyIGEgbG93LWxldmVsIGxvY2tpbmcgcHJvdG9jb2wKLSAqIEBwcm90bzogdGhlIHByb3RvY29sIGRlZmluaXRpb24KLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FWFhYIG9uIGZhaWx1cmUKLSAqLwotCi1pbnQgZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHc7Ci0KLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx3LCAmbG1oX2xpc3QsIGx3X2xpc3QpIHsKLQkJaWYgKCFzdHJjbXAobHctPmx3X29wcy0+bG1fcHJvdG9fbmFtZSwgcHJvdG8tPmxtX3Byb3RvX25hbWUpKSB7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IHByb3RvY29sICVzIGFscmVhZHkgZXhpc3RzXG4iLAotCQkJICAgICAgIHByb3RvLT5sbV9wcm90b19uYW1lKTsKLQkJCXJldHVybiAtRUVYSVNUOwotCQl9Ci0JfQotCi0JbHcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG1oX3dyYXBwZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWx3KSB7Ci0JCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlsdy0+bHdfb3BzID0gcHJvdG87Ci0JbGlzdF9hZGQoJmx3LT5sd19saXN0LCAmbG1oX2xpc3QpOwotCi0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvIC0gVW5yZWdpc3RlciBhIGxvdy1sZXZlbCBsb2NraW5nIHByb3RvY29sCi0gKiBAcHJvdG86IHRoZSBwcm90b2NvbCBkZWZpbml0aW9uCi0gKgotICovCi0KLXZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdzsKLQotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobHcsICZsbWhfbGlzdCwgbHdfbGlzdCkgewotCQlpZiAoIXN0cmNtcChsdy0+bHdfb3BzLT5sbV9wcm90b19uYW1lLCBwcm90by0+bG1fcHJvdG9fbmFtZSkpIHsKLQkJCWxpc3RfZGVsKCZsdy0+bHdfbGlzdCk7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCWtmcmVlKGx3KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgdW5yZWdpc3RlciBsb2NrIHByb3RvY29sICVzXG4iLAotCSAgICAgICBwcm90by0+bG1fcHJvdG9fbmFtZSk7Ci19Ci0KLS8qKgotICogZ2ZzMl9tb3VudF9sb2NrcHJvdG8gLSBNb3VudCBhIGxvY2sgcHJvdG9jb2wKLSAqIEBwcm90b19uYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHByb3RvY29sCi0gKiBAdGFibGVfbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBsb2NrIHNwYWNlCi0gKiBAaG9zdF9kYXRhIC0gZGF0YSBzcGVjaWZpYyB0byB0aGlzIGhvc3QKLSAqIEBjYiAtIHRoZSBjYWxsYmFjayB0byB0aGUgY29kZSB1c2luZyB0aGUgbG9jayBtb2R1bGUKLSAqIEBzZHAgLSBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAbWluX2x2Yl9zaXplIC0gdGhlIG1pbmludW0gTFZCIHNpemUgdGhhdCB0aGUgY2FsbGVyIGNhbiBkZWFsIHdpdGgKLSAqIEBmbGFncyAtIExNX01GTEFHXyoKLSAqIEBsb2Nrc3RydWN0IC0gYSBzdHJ1Y3R1cmUgcmV0dXJuZWQgZGVzY3JpYmluZyB0aGUgbW91bnQKLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FWFhYIG9uIGZhaWx1cmUKLSAqLwotCi1pbnQgZ2ZzMl9tb3VudF9sb2NrcHJvdG8oY2hhciAqcHJvdG9fbmFtZSwgY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdyA9IE5VTEw7Ci0JaW50IHRyeSA9IDA7Ci0JaW50IGVycm9yLCBmb3VuZDsKLQotCi1yZXRyeToKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmbm9sb2NrX3Byb3RvLmx3X2xpc3QpKQotCQlsaXN0X2FkZCgmbm9sb2NrX3Byb3RvLmx3X2xpc3QsICZsbWhfbGlzdCk7Ci0KLQlmb3VuZCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShsdywgJmxtaF9saXN0LCBsd19saXN0KSB7Ci0JCWlmICghc3RyY21wKGx3LT5sd19vcHMtPmxtX3Byb3RvX25hbWUsIHByb3RvX25hbWUpKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJaWYgKCF0cnkgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKLQkJCXRyeSA9IDE7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCXJlcXVlc3RfbW9kdWxlKHByb3RvX25hbWUpOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjYW4ndCBmaW5kIHByb3RvY29sICVzXG4iLCBwcm90b19uYW1lKTsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobHctPmx3X29wcy0+bG1fb3duZXIgJiYKLQkgICAgIXRyeV9tb2R1bGVfZ2V0KGx3LT5sd19vcHMtPmxtX293bmVyKSkgewotCQl0cnkgPSAwOwotCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJbXNsZWVwKDEwMDApOwotCQlnb3RvIHJldHJ5OwotCX0KLQotCWVycm9yID0gbHctPmx3X29wcy0+bG1fbW91bnQodGFibGVfbmFtZSwgaG9zdF9kYXRhLCBjYiwgY2JfZGF0YSwKLQkJCQkgICAgIG1pbl9sdmJfc2l6ZSwgZmxhZ3MsIGxvY2tzdHJ1Y3QsIGZza29iaik7Ci0JaWYgKGVycm9yKQotCQltb2R1bGVfcHV0KGx3LT5sd19vcHMtPmxtX293bmVyKTsKLW91dDoKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2ZzMl91bm1vdW50X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCkKLXsKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fdW5tb3VudCkKLQkJbG9ja3N0cnVjdC0+bHNfb3BzLT5sbV91bm1vdW50KGxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpCi0JCW1vZHVsZV9wdXQobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcik7Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci19Ci0KLS8qKgotICogZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8gLSBhYm5vcm1hbGx5IHVubW91bnQgYSBsb2NrIG1vZHVsZQotICogQGxvY2tzdHJ1Y3Q6IHRoZSBsb2Nrc3RydWN0IHBhc3NlZCBpbnRvIG1vdW50Ci0gKgotICovCi0KLXZvaWQgZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpCi17Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCWxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fd2l0aGRyYXcobG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlKTsKLQlpZiAobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcikKLQkJbW9kdWxlX3B1dChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKTsKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8pOwotRVhQT1JUX1NZTUJPTF9HUEwoZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byk7Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA5YmI2Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCi1sb2NrX2RsbS15IDo9IGxvY2subyBtYWluLm8gbW91bnQubyBzeXNmcy5vIHRocmVhZC5vCi0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODJjOTAuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBjaGFyIGp1bmtfbHZiW0dETE1fTFZCX1NJWkVdOwotCi0KLS8qIGNvbnZlcnQgZGxtIGxvY2stbW9kZSB0byBnZnMgbG9jay1zdGF0ZSAqLwotCi1zdGF0aWMgczE2IGdkbG1fbWFrZV9sbXN0YXRlKHMxNiBkbG1tb2RlKQotewotCXN3aXRjaCAoZGxtbW9kZSkgewotCWNhc2UgRExNX0xPQ0tfSVY6Ci0JY2FzZSBETE1fTE9DS19OTDoKLQkJcmV0dXJuIExNX1NUX1VOTE9DS0VEOwotCWNhc2UgRExNX0xPQ0tfRVg6Ci0JCXJldHVybiBMTV9TVF9FWENMVVNJVkU7Ci0JY2FzZSBETE1fTE9DS19DVzoKLQkJcmV0dXJuIExNX1NUX0RFRkVSUkVEOwotCWNhc2UgRExNX0xPQ0tfUFI6Ci0JCXJldHVybiBMTV9TVF9TSEFSRUQ7Ci0JfQotCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIERMTSBtb2RlICVkIiwgZGxtbW9kZSk7Ci0JcmV0dXJuIC0xOwotfQotCi0vKiBBIGxvY2sgcGxhY2VkIG9uIHRoaXMgcXVldWUgaXMgcmUtc3VibWl0dGVkIHRvIERMTSBhcyBzb29uIGFzIHRoZSBsb2NrX2RsbQotICAgdGhyZWFkIGdldHMgdG8gaXQuICovCi0KLXN0YXRpYyB2b2lkIHF1ZXVlX3N1Ym1pdChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZscC0+ZGVsYXlfbGlzdCwgJmxzLT5zdWJtaXQpOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0Jd2FrZV91cCgmbHMtPnRocmVhZF93YWl0KTsKLX0KLQotc3RhdGljIHZvaWQgd2FrZV91cF9hc3Qoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0JY2xlYXJfYml0KExGTF9BU1RfV0FJVCwgJmxwLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQl3YWtlX3VwX2JpdCgmbHAtPmZsYWdzLCBMRkxfQVNUX1dBSVQpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX2RlbGV0ZV9scChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmxwLT5kZWxheV9saXN0KSkKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCWxzLT5hbGxfbG9ja3NfY291bnQtLTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0Ja2ZyZWUobHApOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX3F1ZXVlX2RlbGF5ZWQoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbHAtPmRlbGF5X2xpc3QsICZscy0+ZGVsYXllZCk7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19jb21wbGV0ZShzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0Jc3RydWN0IGxtX2FzeW5jX2NiIGFjYjsKLQotCW1lbXNldCgmYWNiLCAwLCBzaXplb2YoYWNiKSk7Ci0KLQlpZiAobHAtPmxrc2Iuc2Jfc3RhdHVzID09IC1ETE1fRUNBTkNFTCkgewotCQlsb2dfaW5mbygiY29tcGxldGUgZGxtIGNhbmNlbCAleCwlbGx4IGZsYWdzICVseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSBscC0+ZmxhZ3MpOwotCi0JCWxwLT5yZXEgPSBscC0+Y3VyOwotCQlhY2IubGNfcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKLQkJaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfRExNX1VOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJaWYgKGxwLT5sa3NiLnNiX3N0YXR1cyAhPSAtRExNX0VVTkxPQ0spIHsKLQkJCWxvZ19pbmZvKCJ1bmxvY2sgc2Jfc3RhdHVzICVkICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJCQkgbHAtPmxrc2Iuc2Jfc3RhdHVzLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJCSBscC0+ZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbHAtPmN1ciA9IERMTV9MT0NLX0lWOwotCQlscC0+cmVxID0gRExNX0xPQ0tfSVY7Ci0JCWxwLT5sa3NiLnNiX2xraWQgPSAwOwotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1VOTE9DS19ERUxFVEUsICZscC0+ZmxhZ3MpKSB7Ci0JCQlnZGxtX2RlbGV0ZV9scChscCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9WQUxOT1RWQUxJRCkKLQkJbWVtc2V0KGxwLT5sa3NiLnNiX2x2YnB0ciwgMCwgR0RMTV9MVkJfU0laRSk7Ci0KLQlpZiAobHAtPmxrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0FMVE1PREUpIHsKLQkJaWYgKGxwLT5yZXEgPT0gRExNX0xPQ0tfUFIpCi0JCQlscC0+cmVxID0gRExNX0xPQ0tfQ1c7Ci0JCWVsc2UgaWYgKGxwLT5yZXEgPT0gRExNX0xPQ0tfQ1cpCi0JCQlscC0+cmVxID0gRExNX0xPQ0tfUFI7Ci0JfQotCi0JLyoKLQkgKiBBIGNhbmNlbGVkIGxvY2sgcmVxdWVzdC4gIFRoZSBsb2NrIHdhcyBqdXN0IHRha2VuIG9mZiB0aGUgZGVsYXllZAotCSAqIGxpc3QgYW5kIHdhcyBuZXZlciBldmVuIHN1Ym1pdHRlZCB0byBkbG0uCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9DQU5DRUwsICZscC0+ZmxhZ3MpKSB7Ci0JCWxvZ19pbmZvKCJjb21wbGV0ZSBpbnRlcm5hbCBjYW5jZWwgJXgsJWxseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCWxwLT5yZXEgPSBscC0+Y3VyOwotCQlhY2IubGNfcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBBbiBlcnJvciBvY2N1cmVkLgotCSAqLwotCi0JaWYgKGxwLT5sa3NiLnNiX3N0YXR1cykgewotCQkvKiBhICJub3JtYWwiIGVycm9yICovCi0JCWlmICgobHAtPmxrc2Iuc2Jfc3RhdHVzID09IC1FQUdBSU4pICYmCi0JCSAgICAobHAtPmxrZiAmIERMTV9MS0ZfTk9RVUVVRSkpIHsKLQkJCWxwLT5yZXEgPSBscC0+Y3VyOwotCQkJaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCQkJbHAtPmxrc2Iuc2JfbGtpZCA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIHRoaXMgY291bGQgb25seSBoYXBwZW4gd2l0aCBjYW5jZWxzIEkgdGhpbmsgKi8KLQkJbG9nX2luZm8oImFzdCBzYl9zdGF0dXMgJWQgJXgsJWxseCBmbGFncyAlbHgiLAotCQkJIGxwLT5sa3NiLnNiX3N0YXR1cywgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJIGxwLT5mbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaXMgYW4gQVNUIGZvciBhbiBFWC0+RVggY29udmVyc2lvbiBmb3Igc3luY19sdmIgZnJvbSBHRlMuCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9TWU5DX0xWQiwgJmxwLT5mbGFncykpIHsKLQkJd2FrZV91cF9hc3QobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBIGxvY2sgaGFzIGJlZW4gZGVtb3RlZCB0byBOTCBiZWNhdXNlIGl0IGluaXRpYWxseSBjb21wbGV0ZWQgZHVyaW5nCi0JICogQkxPQ0tfTE9DS1MuICBOb3cgaXQgbXVzdCBiZSByZXF1ZXN0ZWQgaW4gdGhlIG9yaWdpbmFsbHkgcmVxdWVzdGVkCi0JICogbW9kZS4KLQkgKi8KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1JFUkVRVUVTVCwgJmxwLT5mbGFncykpIHsKLQkJZ2RsbV9hc3NlcnQobHAtPnJlcSA9PSBETE1fTE9DS19OTCwgIiV4LCVsbHgiLAotCQkJICAgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCWdkbG1fYXNzZXJ0KGxwLT5wcmV2X3JlcSA+IERMTV9MT0NLX05MLCAiJXgsJWxseCIsCi0JCQkgICAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQotCQlscC0+Y3VyID0gRExNX0xPQ0tfTkw7Ci0JCWxwLT5yZXEgPSBscC0+cHJldl9yZXE7Ci0JCWxwLT5wcmV2X3JlcSA9IERMTV9MT0NLX0lWOwotCQlscC0+bGtmICY9IH5ETE1fTEtGX0NPTlZERUFETEs7Ci0KLQkJc2V0X2JpdChMRkxfTk9DQUNIRSwgJmxwLT5mbGFncyk7Ci0KLQkJaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykgJiYKLQkJICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykpCi0JCQlnZGxtX3F1ZXVlX2RlbGF5ZWQobHApOwotCQllbHNlCi0JCQlxdWV1ZV9zdWJtaXQobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBIHJlcXVlc3QgaXMgZ3JhbnRlZCBkdXJpbmcgZGxtIHJlY292ZXJ5LiAgSXQgbWF5IGJlIGdyYW50ZWQKLQkgKiBiZWNhdXNlIHRoZSBsb2NrcyBvZiBhIGZhaWxlZCBub2RlIHdlcmUgY2xlYXJlZC4gIEluIHRoYXQgY2FzZSwKLQkgKiB0aGVyZSBtYXkgYmUgaW5jb25zaXN0ZW50IGRhdGEgYmVuZWF0aCB0aGlzIGxvY2sgYW5kIHdlIG11c3Qgd2FpdAotCSAqIGZvciByZWNvdmVyeSB0byBjb21wbGV0ZSB0byB1c2UgaXQuICBXaGVuIGdmcyByZWNvdmVyeSBpcyBkb25lIHRoaXMKLQkgKiBncmFudGVkIGxvY2sgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gTkwgYW5kIHRoZW4gcmVhY3F1aXJlZCBpbiB0aGlzCi0JICogZ3JhbnRlZCBzdGF0ZS4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpICYmCi0JICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykgJiYKLQkgICAgbHAtPnJlcSAhPSBETE1fTE9DS19OTCkgewotCi0JCWxwLT5jdXIgPSBscC0+cmVxOwotCQlscC0+cHJldl9yZXEgPSBscC0+cmVxOwotCQlscC0+cmVxID0gRExNX0xPQ0tfTkw7Ci0JCWxwLT5sa2YgfD0gRExNX0xLRl9DT05WRVJUOwotCQlscC0+bGtmICY9IH5ETE1fTEtGX0NPTlZERUFETEs7Ci0KLQkJbG9nX2RlYnVnKCJyZXJlcSAleCwlbGx4IGlkICV4ICVkLCVkIiwKLQkJCSAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSAgbHAtPmxrc2Iuc2JfbGtpZCwgbHAtPmN1ciwgbHAtPnJlcSk7Ci0KLQkJc2V0X2JpdChMRkxfUkVSRVFVRVNULCAmbHAtPmZsYWdzKTsKLQkJcXVldWVfc3VibWl0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRExNIGRlbW90ZWQgdGhlIGxvY2sgdG8gTkwgYmVmb3JlIGl0IHdhcyBncmFudGVkIHNvIEdGUyBtdXN0IGJlCi0JICogdG9sZCBpdCBjYW5ub3QgY2FjaGUgZGF0YSBmb3IgdGhpcyBsb2NrLgotCSAqLwotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9ERU1PVEVEKQotCQlzZXRfYml0KExGTF9OT0NBQ0hFLCAmbHAtPmZsYWdzKTsKLQotb3V0OgotCS8qCi0JICogVGhpcyBpcyBhbiBpbnRlcm5hbCBsb2NrX2RsbSBsb2NrCi0JICovCi0KLQlpZiAodGVzdF9iaXQoTEZMX0lOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJY2xlYXJfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQkJbHAtPmN1ciA9IGxwLT5yZXE7Ci0JCXdha2VfdXBfYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogTm9ybWFsIGNvbXBsZXRpb24gb2YgYSBsb2NrIHJlcXVlc3QuICBUZWxsIEdGUyBpdCBub3cgaGFzIHRoZSBsb2NrLgotCSAqLwotCi0JY2xlYXJfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQlscC0+Y3VyID0gbHAtPnJlcTsKLQotCWFjYi5sY19uYW1lID0gbHAtPmxvY2tuYW1lOwotCWFjYi5sY19yZXQgfD0gZ2RsbV9tYWtlX2xtc3RhdGUobHAtPmN1cik7Ci0KLQlscy0+ZnNjYihscy0+c2RwLCBMTV9DQl9BU1lOQywgJmFjYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fYXN0KHZvaWQgKmFzdGFyZykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGFzdGFyZzsKLQljbGVhcl9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0JcHJvY2Vzc19jb21wbGV0ZShscCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfYmxvY2tpbmcoc3RydWN0IGdkbG1fbG9jayAqbHAsIGludCBiYXN0X21vZGUpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCXVuc2lnbmVkIGludCBjYiA9IDA7Ci0KLQlzd2l0Y2ggKGdkbG1fbWFrZV9sbXN0YXRlKGJhc3RfbW9kZSkpIHsKLQljYXNlIExNX1NUX0VYQ0xVU0lWRToKLQkJY2IgPSBMTV9DQl9ORUVEX0U7Ci0JCWJyZWFrOwotCWNhc2UgTE1fU1RfREVGRVJSRUQ6Ci0JCWNiID0gTE1fQ0JfTkVFRF9EOwotCQlicmVhazsKLQljYXNlIExNX1NUX1NIQVJFRDoKLQkJY2IgPSBMTV9DQl9ORUVEX1M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIGJhc3QgbW9kZSAldSIsIGJhc3RfbW9kZSk7Ci0JfQotCi0JbHMtPmZzY2IobHMtPnNkcCwgY2IsICZscC0+bG9ja25hbWUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGdkbG1fYmFzdCh2b2lkICphc3RhcmcsIGludCBtb2RlKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gYXN0YXJnOwotCi0JaWYgKCFtb2RlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBiYXN0IG1vZGUgemVybyAleCwlbGx4XG4iLAotCQkJbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJvY2Vzc19ibG9ja2luZyhscCwgbW9kZSk7Ci19Ci0KLS8qIGNvbnZlcnQgZ2ZzIGxvY2stc3RhdGUgdG8gZGxtIGxvY2stbW9kZSAqLwotCi1zdGF0aWMgczE2IG1ha2VfbW9kZShzMTYgbG1zdGF0ZSkKLXsKLQlzd2l0Y2ggKGxtc3RhdGUpIHsKLQljYXNlIExNX1NUX1VOTE9DS0VEOgotCQlyZXR1cm4gRExNX0xPQ0tfTkw7Ci0JY2FzZSBMTV9TVF9FWENMVVNJVkU6Ci0JCXJldHVybiBETE1fTE9DS19FWDsKLQljYXNlIExNX1NUX0RFRkVSUkVEOgotCQlyZXR1cm4gRExNX0xPQ0tfQ1c7Ci0JY2FzZSBMTV9TVF9TSEFSRUQ6Ci0JCXJldHVybiBETE1fTE9DS19QUjsKLQl9Ci0JZ2RsbV9hc3NlcnQoMCwgInVua25vd24gTE0gc3RhdGUgJWQiLCBsbXN0YXRlKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLQotLyogdmVyaWZ5IGFncmVlbWVudCB3aXRoIEdGUyBvbiB0aGUgY3VycmVudCBsb2NrIHN0YXRlLCBOQjogRExNX0xPQ0tfTkwgYW5kCi0gICBETE1fTE9DS19JViBhcmUgYm90aCBjb25zaWRlcmVkIExNX1NUX1VOTE9DS0VEIGJ5IEdGUy4gKi8KLQotc3RhdGljIHZvaWQgY2hlY2tfY3VyX3N0YXRlKHN0cnVjdCBnZGxtX2xvY2sgKmxwLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKQotewotCXMxNiBjdXIgPSBtYWtlX21vZGUoY3VyX3N0YXRlKTsKLQlpZiAobHAtPmN1ciAhPSBETE1fTE9DS19JVikKLQkJZ2RsbV9hc3NlcnQobHAtPmN1ciA9PSBjdXIsICIlZCwgJWQiLCBscC0+Y3VyLCBjdXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYWtlX2ZsYWdzKHN0cnVjdCBnZGxtX2xvY2sgKmxwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBnZnNfZmxhZ3MsCi0JCQkJICAgICAgczE2IGN1ciwgczE2IHJlcSkKLXsKLQl1bnNpZ25lZCBpbnQgbGtmID0gMDsKLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWSkKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWV8xQ0IpIHsKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRUJBU1Q7Ci0JfQotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpIHsKLQkJbGtmIHw9IERMTV9MS0ZfTk9PUkRFUjsKLQkJbGtmIHw9IERMTV9MS0ZfSEVBRFFVRTsKLQl9Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19BTlkpIHsKLQkJaWYgKHJlcSA9PSBETE1fTE9DS19QUikKLQkJCWxrZiB8PSBETE1fTEtGX0FMVENXOwotCQllbHNlIGlmIChyZXEgPT0gRExNX0xPQ0tfQ1cpCi0JCQlsa2YgfD0gRExNX0xLRl9BTFRQUjsKLQl9Ci0KLQlpZiAobHAtPmxrc2Iuc2JfbGtpZCAhPSAwKSB7Ci0JCWxrZiB8PSBETE1fTEtGX0NPTlZFUlQ7Ci0JfQotCi0JaWYgKGxwLT5sdmIpCi0JCWxrZiB8PSBETE1fTEtGX1ZBTEJMSzsKLQotCXJldHVybiBsa2Y7Ci19Ci0KLS8qIG1ha2Vfc3RybmFtZSAtIGNvbnZlcnQgR0ZTIGxvY2sgbnVtYmVycyB0byBhIHN0cmluZyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zdHJuYW1lKGNvbnN0IHN0cnVjdCBsbV9sb2NrbmFtZSAqbG9ja25hbWUsCi0JCQkJc3RydWN0IGdkbG1fc3RybmFtZSAqc3RyKQotewotCXNwcmludGYoc3RyLT5uYW1lLCAiJTh4JTE2bGx4IiwgbG9ja25hbWUtPmxuX3R5cGUsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpbG9ja25hbWUtPmxuX251bWJlcik7Ci0Jc3RyLT5uYW1lbGVuID0gR0RMTV9TVFJOQU1FX0JZVEVTOwotfQotCi1zdGF0aWMgaW50IGdkbG1fY3JlYXRlX2xwKHN0cnVjdCBnZGxtX2xzICpscywgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJICBzdHJ1Y3QgZ2RsbV9sb2NrICoqbHBwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwOwotCi0JbHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2RsbV9sb2NrKSwgR0ZQX05PRlMpOwotCWlmICghbHApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHAtPmxvY2tuYW1lID0gKm5hbWU7Ci0JbWFrZV9zdHJuYW1lKG5hbWUsICZscC0+c3RybmFtZSk7Ci0JbHAtPmxzID0gbHM7Ci0JbHAtPmN1ciA9IERMTV9MT0NLX0lWOwotCUlOSVRfTElTVF9IRUFEKCZscC0+ZGVsYXlfbGlzdCk7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlscy0+YWxsX2xvY2tzX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCSpscHAgPSBscDsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGdkbG1fZ2V0X2xvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgdm9pZCAqKmxvY2twKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2RsbV9jcmVhdGVfbHAobG9ja3NwYWNlLCBuYW1lLCAmbHApOwotCi0JKmxvY2twID0gbHA7Ci0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fcHV0X2xvY2sodm9pZCAqbG9jaykKLXsKLQlnZGxtX2RlbGV0ZV9scChsb2NrKTsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fZG9fbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JaW50IGVycm9yLCBiYXN0ID0gMTsKLQotCS8qCi0JICogV2hlbiByZWNvdmVyeSBpcyBpbiBwcm9ncmVzcywgZGVsYXkgbG9jayByZXF1ZXN0cyBmb3Igc3VibWlzc2lvbgotCSAqIG9uY2UgcmVjb3ZlcnkgaXMgZG9uZS4gIFJlcXVlc3RzIGZvciByZWNvdmVyeSAoTk9FWFApIGFuZCB1bmxvY2tzCi0JICogY2FuIHBhc3MuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpICYmIGxwLT5yZXEgIT0gRExNX0xPQ0tfTkwpIHsKLQkJZ2RsbV9xdWV1ZV9kZWxheWVkKGxwKTsKLQkJcmV0dXJuIExNX09VVF9BU1lOQzsKLQl9Ci0KLQkvKgotCSAqIFN1Ym1pdCB0aGUgYWN0dWFsIGxvY2sgcmVxdWVzdC4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChMRkxfTk9CQVNULCAmbHAtPmZsYWdzKSkKLQkJYmFzdCA9IDA7Ci0KLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JbG9nX2RlYnVnKCJsayAleCwlbGx4IGlkICV4ICVkLCVkICV4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+bGtzYi5zYl9sa2lkLAotCQkgIGxwLT5jdXIsIGxwLT5yZXEsIGxwLT5sa2YpOwotCi0JZXJyb3IgPSBkbG1fbG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbHAtPnJlcSwgJmxwLT5sa3NiLCBscC0+bGtmLAotCQkJIGxwLT5zdHJuYW1lLm5hbWUsIGxwLT5zdHJuYW1lLm5hbWVsZW4sIDAsIGdkbG1fYXN0LAotCQkJIGxwLCBiYXN0ID8gZ2RsbV9iYXN0IDogTlVMTCk7Ci0KLQlpZiAoKGVycm9yID09IC1FQUdBSU4pICYmIChscC0+bGtmICYgRExNX0xLRl9OT1FVRVVFKSkgewotCQlscC0+bGtzYi5zYl9zdGF0dXMgPSAtRUFHQUlOOwotCQlnZGxtX2FzdChscCk7Ci0JCWVycm9yID0gMDsKLQl9Ci0KLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCIlczogZ2RsbV9sb2NrICV4LCVsbHggZXJyPSVkIGN1cj0lZCByZXE9JWQgbGtmPSV4ICIKLQkJCSAgImZsYWdzPSVseCIsIGxzLT5mc25hbWUsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGVycm9yLAotCQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCX0KLQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdkbG1fZG9fdW5sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQl1bnNpZ25lZCBpbnQgbGtmID0gMDsKLQlpbnQgZXJyb3I7Ci0KLQlzZXRfYml0KExGTF9ETE1fVU5MT0NLLCAmbHAtPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JaWYgKGxwLT5sdmIpCi0JCWxrZiA9IERMTV9MS0ZfVkFMQkxLOwotCi0JbG9nX2RlYnVnKCJ1biAleCwlbGx4ICV4ICVkICV4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkgIGxwLT5sa3NiLnNiX2xraWQsIGxwLT5jdXIsIGxrZik7Ci0KLQllcnJvciA9IGRsbV91bmxvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIGxwLT5sa3NiLnNiX2xraWQsIGxrZiwgTlVMTCwgbHApOwotCi0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiJXM6IGdkbG1fdW5sb2NrICV4LCVsbHggZXJyPSVkIGN1cj0lZCByZXE9JWQgbGtmPSV4ICIKLQkJCSAgImZsYWdzPSVseCIsIGxzLT5mc25hbWUsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGVycm9yLAotCQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCX0KLQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotfQotCi11bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JaWYgKHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCkKLQkJcmV0dXJuIGdkbG1fdW5sb2NrKGxvY2ssIGN1cl9zdGF0ZSk7Ci0KLQlpZiAocmVxX3N0YXRlID09IExNX1NUX1VOTE9DS0VEKQotCQlyZXR1cm4gZ2RsbV91bmxvY2sobG9jaywgY3VyX3N0YXRlKTsKLQotCWNsZWFyX2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JaWYgKGZsYWdzICYgTE1fRkxBR19OT0VYUCkKLQkJc2V0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0KLQljaGVja19jdXJfc3RhdGUobHAsIGN1cl9zdGF0ZSk7Ci0JbHAtPnJlcSA9IG1ha2VfbW9kZShyZXFfc3RhdGUpOwotCWxwLT5sa2YgPSBtYWtlX2ZsYWdzKGxwLCBmbGFncywgbHAtPmN1ciwgbHAtPnJlcSk7Ci0KLQlyZXR1cm4gZ2RsbV9kb19sb2NrKGxwKTsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fdW5sb2NrKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JY2xlYXJfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlpZiAobHAtPmN1ciA9PSBETE1fTE9DS19JVikKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGdkbG1fZG9fdW5sb2NrKGxwKTsKLX0KLQotdm9pZCBnZGxtX2NhbmNlbCh2b2lkICpsb2NrKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JaW50IGVycm9yLCBkZWxheV9saXN0ID0gMDsKLQotCWlmICh0ZXN0X2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncykpCi0JCXJldHVybjsKLQotCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCAleCwlbGx4IGZsYWdzICVseCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZscC0+ZGVsYXlfbGlzdCkpIHsKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQlkZWxheV9saXN0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCWlmIChkZWxheV9saXN0KSB7Ci0JCXNldF9iaXQoTEZMX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JCXNldF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0JCWdkbG1fYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdGVzdF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoTEZMX0RMTV9VTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCBza2lwICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJIAkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogdGhlIGxvY2sgaXMgYmxvY2tlZCBpbiB0aGUgZGxtICovCi0KLQlzZXRfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JZXJyb3IgPSBkbG1fdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBscC0+bGtzYi5zYl9sa2lkLCBETE1fTEtGX0NBTkNFTCwKLQkJCSAgIE5VTEwsIGxwKTsKLQotCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCBydiAlZCAleCwlbGx4IGZsYWdzICVseCIsIGVycm9yLAotCQkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGxwLT5mbGFncyk7Ci0KLQlpZiAoZXJyb3IgPT0gLUVCVVNZKQotCQljbGVhcl9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGdkbG1fYWRkX2x2YihzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQljaGFyICpsdmI7Ci0KLQlsdmIgPSBremFsbG9jKEdETE1fTFZCX1NJWkUsIEdGUF9OT0ZTKTsKLQlpZiAoIWx2YikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlscC0+bGtzYi5zYl9sdmJwdHIgPSBsdmI7Ci0JbHAtPmx2YiA9IGx2YjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9kZWxfbHZiKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCWtmcmVlKGxwLT5sdmIpOwotCWxwLT5sdmIgPSBOVUxMOwotCWxwLT5sa3NiLnNiX2x2YnB0ciA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9hc3Rfd2FpdCh2b2lkICp3b3JkKQotewotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgY2FuIGRvIGEgc3luY2hyb25vdXMgZGxtIHJlcXVlc3QgKHJlcXVpcmluZyBhIGxvY2tfZGxtIHRocmVhZCB0byBnZXQKLSAgIHRoZSBjb21wbGV0aW9uKSBiZWNhdXNlIGdmcyB3b24ndCBjYWxsIGhvbGRfbHZiKCkgZHVyaW5nIGEgY2FsbGJhY2sgKGZyb20KLSAgIHRoZSBjb250ZXh0IG9mIGEgbG9ja19kbG0gdGhyZWFkKS4gKi8KLQotc3RhdGljIGludCBob2xkX251bGxfbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscG4gPSBOVUxMOwotCWludCBlcnJvcjsKLQotCWlmIChscC0+aG9sZF9udWxsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBsdmIgYWxyZWFkeSBoZWxkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZXJyb3IgPSBnZGxtX2NyZWF0ZV9scChscC0+bHMsICZscC0+bG9ja25hbWUsICZscG4pOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQlscG4tPmxrc2Iuc2JfbHZicHRyID0ganVua19sdmI7Ci0JbHBuLT5sdmIgPSBqdW5rX2x2YjsKLQotCWxwbi0+cmVxID0gRExNX0xPQ0tfTkw7Ci0JbHBuLT5sa2YgPSBETE1fTEtGX1ZBTEJMSyB8IERMTV9MS0ZfRVhQRURJVEU7Ci0Jc2V0X2JpdChMRkxfTk9CQVNULCAmbHBuLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfSU5MT0NLLCAmbHBuLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQVNUX1dBSVQsICZscG4tPmZsYWdzKTsKLQotCWdkbG1fZG9fbG9jayhscG4pOwotCXdhaXRfb25fYml0KCZscG4tPmZsYWdzLCBMRkxfQVNUX1dBSVQsIGdkbG1fYXN0X3dhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQllcnJvciA9IGxwbi0+bGtzYi5zYl9zdGF0dXM7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBob2xkX251bGxfbG9jayBkbG0gZXJyb3IgJWRcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JCWdkbG1fZGVsZXRlX2xwKGxwbik7Ci0JCWxwbiA9IE5VTEw7Ci0JfQotb3V0OgotCWxwLT5ob2xkX251bGwgPSBscG47Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBUaGlzIGNhbm5vdCBkbyBhIHN5bmNocm9ub3VzIGRsbSByZXF1ZXN0IChyZXF1aXJpbmcgYSBsb2NrX2RsbSB0aHJlYWQgdG8gZ2V0Ci0gICB0aGUgY29tcGxldGlvbikgYmVjYXVzZSBnZnMgbWF5IGNhbGwgdW5ob2xkX2x2YigpIGR1cmluZyBhIGNhbGxiYWNrIChmcm9tCi0gICB0aGUgY29udGV4dCBvZiBhIGxvY2tfZGxtIHRocmVhZCkgd2hpY2ggY291bGQgY2F1c2UgYSBkZWFkbG9jayBzaW5jZSB0aGUKLSAgIG90aGVyIGxvY2tfZGxtIHRocmVhZCBjb3VsZCBiZSBlbmdhZ2VkIGluIHJlY292ZXJ5LiAqLwotCi1zdGF0aWMgdm9pZCB1bmhvbGRfbnVsbF9sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwbiA9IGxwLT5ob2xkX251bGw7Ci0KLQlnZGxtX2Fzc2VydChscG4sICIleCwlbGx4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCWxwbi0+bGtzYi5zYl9sdmJwdHIgPSBOVUxMOwotCWxwbi0+bHZiID0gTlVMTDsKLQlzZXRfYml0KExGTF9VTkxPQ0tfREVMRVRFLCAmbHBuLT5mbGFncyk7Ci0JZ2RsbV9kb191bmxvY2sobHBuKTsKLQlscC0+aG9sZF9udWxsID0gTlVMTDsKLX0KLQotLyogQWNxdWlyZSBhIE5MIGxvY2sgYmVjYXVzZSBnZnMgcmVxdWlyZXMgdGhlIHZhbHVlIGJsb2NrIHRvIHJlbWFpbgotICAgaW50YWN0IG9uIHRoZSByZXNvdXJjZSB3aGlsZSB0aGUgbHZiIGlzICJoZWxkIiBldmVuIGlmIGl0J3MgaG9sZGluZyBubyBsb2NrcwotICAgb24gdGhlIHJlc291cmNlLiAqLwotCi1pbnQgZ2RsbV9ob2xkX2x2Yih2b2lkICpsb2NrLCBjaGFyICoqbHZicCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZGxtX2FkZF9sdmIobHApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JKmx2YnAgPSBscC0+bHZiOwotCi0JZXJyb3IgPSBob2xkX251bGxfbG9jayhscCk7Ci0JaWYgKGVycm9yKQotCQlnZGxtX2RlbF9sdmIobHApOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fdW5ob2xkX2x2Yih2b2lkICpsb2NrLCBjaGFyICpsdmIpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JdW5ob2xkX251bGxfbG9jayhscCk7Ci0JZ2RsbV9kZWxfbHZiKGxwKTsKLX0KLQotdm9pZCBnZGxtX3N1Ym1pdF9kZWxheWVkKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCwgKnNhZmU7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHAsIHNhZmUsICZscy0+ZGVsYXllZCwgZGVsYXlfbGlzdCkgewotCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCWxpc3RfYWRkX3RhaWwoJmxwLT5kZWxheV9saXN0LCAmbHMtPnN1Ym1pdCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0Jd2FrZV91cCgmbHMtPnRocmVhZF93YWl0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzk4ZTdjLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIExPQ0tfRExNX0RPVF9ICi0jZGVmaW5lIExPQ0tfRExNX0RPVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RsbV9wbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgotCi0vKgotICogSW50ZXJuYWxseSwgd2UgcHJlZml4IHRoaW5ncyB3aXRoIGdkbG1fIGFuZCBHRExNXyAoZm9yIGdmcy1kbG0pIHNpbmNlIGEKLSAqIHByZWZpeCBvZiBsb2NrX2RsbV8gZ2V0cyBhd2t3YXJkLiAgRXh0ZXJuYWxseSwgR0ZTIHJlZmVycyB0byB0aGlzIG1vZHVsZQotICogYXMgImxvY2tfZGxtIi4KLSAqLwotCi0jZGVmaW5lIEdETE1fU1RSTkFNRV9CWVRFUwkyNAotI2RlZmluZSBHRExNX0xWQl9TSVpFCQkzMgotI2RlZmluZSBHRExNX0RST1BfQ09VTlQJCTAKLSNkZWZpbmUgR0RMTV9EUk9QX1BFUklPRAk2MAotI2RlZmluZSBHRExNX05BTUVfTEVOCQkxMjgKLQotLyogR0ZTIHVzZXMgMTIgYnl0ZXMgdG8gaWRlbnRpZnkgYSByZXNvdXJjZSAoMzIgYml0IHR5cGUgKyA2NCBiaXQgbnVtYmVyKS4KLSAgIFdlIHNwcmludGYgdGhlc2UgbnVtYmVycyBpbnRvIGEgMjQgYnl0ZSBzdHJpbmcgb2YgaGV4IHZhbHVlcyB0byBtYWtlIHRoZW0KLSAgIGh1bWFuLXJlYWRhYmxlICh0byBtYWtlIGRlYnVnZ2luZyBzaW1wbGVyLikgKi8KLQotc3RydWN0IGdkbG1fc3RybmFtZSB7Ci0JdW5zaWduZWQgY2hhcgkJbmFtZVtHRExNX1NUUk5BTUVfQllURVNdOwotCXVuc2lnbmVkIHNob3J0CQluYW1lbGVuOwotfTsKLQotZW51bSB7Ci0JREZMX0JMT0NLX0xPQ0tTCQk9IDAsCi0JREZMX1NQRUNUQVRPUgkJPSAxLAotCURGTF9XSVRIRFJBVwkJPSAyLAotfTsKLQotc3RydWN0IGdkbG1fbHMgewotCXUzMgkJaWQ7Ci0JaW50CQkJamlkOwotCWludAkJCWZpcnN0OwotCWludAkJCWZpcnN0X2RvbmU7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0Jc3RydWN0IGtvYmplY3QJCWtvYmo7Ci0JY2hhcgkJCWNsdXN0ZXJuYW1lW0dETE1fTkFNRV9MRU5dOwotCWNoYXIJCQlmc25hbWVbR0RMTV9OQU1FX0xFTl07Ci0JaW50CQkJZnNmbGFnczsKLQlkbG1fbG9ja3NwYWNlX3QJCSpkbG1fbG9ja3NwYWNlOwotCWxtX2NhbGxiYWNrX3QJCWZzY2I7Ci0Jc3RydWN0IGdmczJfc2JkCQkqc2RwOwotCWludAkJCXJlY292ZXJfamlkOwotCWludAkJCXJlY292ZXJfamlkX2RvbmU7Ci0JaW50CQkJcmVjb3Zlcl9qaWRfc3RhdHVzOwotCXNwaW5sb2NrX3QJCWFzeW5jX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheWVkOwotCXN0cnVjdCBsaXN0X2hlYWQJc3VibWl0OwotCXUzMgkJYWxsX2xvY2tzX2NvdW50OwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29udHJvbDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl0aHJlYWRfd2FpdDsKLX07Ci0KLWVudW0gewotCUxGTF9OT0JMT0NLCQk9IDAsCi0JTEZMX05PQ0FDSEUJCT0gMSwKLQlMRkxfRExNX1VOTE9DSwkJPSAyLAotCUxGTF9ETE1fQ0FOQ0VMCQk9IDMsCi0JTEZMX1NZTkNfTFZCCQk9IDQsCi0JTEZMX0ZPUkNFX1BST01PVEUJPSA1LAotCUxGTF9SRVJFUVVFU1QJCT0gNiwKLQlMRkxfQUNUSVZFCQk9IDcsCi0JTEZMX0lOTE9DSwkJPSA4LAotCUxGTF9DQU5DRUwJCT0gOSwKLQlMRkxfTk9CQVNUCQk9IDEwLAotCUxGTF9IRUFEUVVFCQk9IDExLAotCUxGTF9VTkxPQ0tfREVMRVRFCT0gMTIsCi0JTEZMX0FTVF9XQUlUCQk9IDEzLAotfTsKLQotc3RydWN0IGdkbG1fbG9jayB7Ci0Jc3RydWN0IGdkbG1fbHMJCSpsczsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUJbG9ja25hbWU7Ci0Jc3RydWN0IGdkbG1fc3RybmFtZQlzdHJuYW1lOwotCWNoYXIJCQkqbHZiOwotCXN0cnVjdCBkbG1fbGtzYgkJbGtzYjsKLQotCXMxNgkJCWN1cjsKLQlzMTYJCQlyZXE7Ci0JczE2CQkJcHJldl9yZXE7Ci0JdTMyCQkJbGtmOwkJLyogZGxtIGZsYWdzIERMTV9MS0ZfICovCi0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb2NrX2RsbSBmbGFncyBMRkxfICovCi0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWRlbGF5X2xpc3Q7CS8qIGRlbGF5ZWQgKi8KLQlzdHJ1Y3QgZ2RsbV9sb2NrCSpob2xkX251bGw7CS8qIE5MIGxvY2sgZm9yIGhvbGRfbHZiICovCi19OwotCi0jZGVmaW5lIGdkbG1fYXNzZXJ0KGFzc2VydGlvbiwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKHVubGlrZWx5KCEoYXNzZXJ0aW9uKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJcHJpbnRrKEtFUk5fRU1FUkcgImxvY2tfZGxtOiBmYXRhbCBhc3NlcnRpb24gZmFpbGVkIFwiJXNcIlxuIiBcCi0JCQkJICAibG9ja19kbG06ICAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkgICNhc3NlcnRpb24sICMjYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlCVUcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBsb2dfcHJpbnQobGV2LCBmbXQsIGFyZy4uLikgcHJpbnRrKGxldiAibG9ja19kbG06ICIgZm10ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGxvZ19pbmZvKGZtdCwgYXJnLi4uKSAgbG9nX3ByaW50KEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZykKLSNkZWZpbmUgbG9nX2Vycm9yKGZtdCwgYXJnLi4uKSBsb2dfcHJpbnQoS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmcpCi0jaWZkZWYgTE9DS19ETE1fTE9HX0RFQlVHCi0jZGVmaW5lIGxvZ19kZWJ1ZyhmbXQsIGFyZy4uLikgbG9nX3ByaW50KEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBsb2dfZGVidWcoZm10LCBhcmcuLi4pCi0jZW5kaWYKLQotLyogc3lzZnMuYyAqLwotCi1pbnQgZ2RsbV9zeXNmc19pbml0KHZvaWQpOwotdm9pZCBnZGxtX3N5c2ZzX2V4aXQodm9pZCk7Ci1pbnQgZ2RsbV9rb2JqZWN0X3NldHVwKHN0cnVjdCBnZGxtX2xzICosIHN0cnVjdCBrb2JqZWN0ICopOwotdm9pZCBnZGxtX2tvYmplY3RfcmVsZWFzZShzdHJ1Y3QgZ2RsbV9scyAqKTsKLQotLyogdGhyZWFkLmMgKi8KLQotaW50IGdkbG1faW5pdF90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICopOwotdm9pZCBnZGxtX3JlbGVhc2VfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqKTsKLQotLyogbG9jay5jICovCi0KLXZvaWQgZ2RsbV9zdWJtaXRfZGVsYXllZChzdHJ1Y3QgZ2RsbV9scyAqKTsKLXVuc2lnbmVkIGludCBnZGxtX2RvX2xvY2soc3RydWN0IGdkbG1fbG9jayAqKTsKLQotaW50IGdkbG1fZ2V0X2xvY2sodm9pZCAqLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKiwgdm9pZCAqKik7Ci12b2lkIGdkbG1fcHV0X2xvY2sodm9pZCAqKTsKLXVuc2lnbmVkIGludCBnZGxtX2xvY2sodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBnZGxtX3VubG9jayh2b2lkICosIHVuc2lnbmVkIGludCk7Ci12b2lkIGdkbG1fY2FuY2VsKHZvaWQgKik7Ci1pbnQgZ2RsbV9ob2xkX2x2Yih2b2lkICosIGNoYXIgKiopOwotdm9pZCBnZGxtX3VuaG9sZF9sdmIodm9pZCAqLCBjaGFyICopOwotCi0vKiBtb3VudC5jICovCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTAzYTcuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sb2NrX2RsbSh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oJmdkbG1fb3BzKTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja19kbG06ICBjYW4ndCByZWdpc3RlciBwcm90b2NvbDogJWRcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQllcnJvciA9IGdkbG1fc3lzZnNfaW5pdCgpOwotCWlmIChlcnJvcikgewotCQlnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJMb2NrX0RMTSAoYnVpbHQgJXMgJXMpIGluc3RhbGxlZFxuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbG9ja19kbG0odm9pZCkKLXsKLQlnZGxtX3N5c2ZzX2V4aXQoKTsKLQlnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfbG9ja19kbG0pOwotbW9kdWxlX2V4aXQoZXhpdF9sb2NrX2RsbSk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiR0ZTIERMTSBMb2NraW5nIE1vZHVsZSIpOwotTU9EVUxFX0FVVEhPUigiUmVkIEhhdCwgSW5jLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYTdlYjYuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1jb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQotCi1zdGF0aWMgc3RydWN0IGdkbG1fbHMgKmluaXRfZ2RsbShsbV9jYWxsYmFja190IGNiLCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCQkgaW50IGZsYWdzLCBjaGFyICp0YWJsZV9uYW1lKQotewotCXN0cnVjdCBnZGxtX2xzICpsczsKLQljaGFyIGJ1ZlsyNTZdLCAqcDsKLQotCWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdkbG1fbHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxzKQotCQlyZXR1cm4gTlVMTDsKLQotCWxzLT5mc2NiID0gY2I7Ci0JbHMtPnNkcCA9IHNkcDsKLQlscy0+ZnNmbGFncyA9IGZsYWdzOwotCXNwaW5fbG9ja19pbml0KCZscy0+YXN5bmNfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxzLT5kZWxheWVkKTsKLQlJTklUX0xJU1RfSEVBRCgmbHMtPnN1Ym1pdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbHMtPnRocmVhZF93YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZscy0+d2FpdF9jb250cm9sKTsKLQlscy0+amlkID0gLTE7Ci0KLQlzdHJuY3B5KGJ1ZiwgdGFibGVfbmFtZSwgMjU2KTsKLQlidWZbMjU1XSA9ICdcMCc7Ci0KLQlwID0gc3RyY2hyKGJ1ZiwgJzonKTsKLQlpZiAoIXApIHsKLQkJbG9nX2luZm8oImludmFsaWQgdGFibGVfbmFtZSBcIiVzXCIiLCB0YWJsZV9uYW1lKTsKLQkJa2ZyZWUobHMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JKnAgPSAnXDAnOwotCXArKzsKLQotCXN0cm5jcHkobHMtPmNsdXN0ZXJuYW1lLCBidWYsIEdETE1fTkFNRV9MRU4pOwotCXN0cm5jcHkobHMtPmZzbmFtZSwgcCwgR0RMTV9OQU1FX0xFTik7Ci0KLQlyZXR1cm4gbHM7Ci19Ci0KLXN0YXRpYyBpbnQgbWFrZV9hcmdzKHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqZGF0YV9hcmcsIGludCAqbm9kaXIpCi17Ci0JY2hhciBkYXRhWzI1Nl07Ci0JY2hhciAqb3B0aW9ucywgKngsICp5OwotCWludCBlcnJvciA9IDA7Ci0KLQltZW1zZXQoZGF0YSwgMCwgMjU2KTsKLQlzdHJuY3B5KGRhdGEsIGRhdGFfYXJnLCAyNTUpOwotCi0JaWYgKCFzdHJsZW4oZGF0YSkpIHsKLQkJbG9nX2Vycm9yKCJubyBtb3VudCBvcHRpb25zLCAodSltb3VudCBoZWxwZXJzIG5vdCBpbnN0YWxsZWQiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChvcHRpb25zID0gZGF0YTsgKHggPSBzdHJzZXAoJm9wdGlvbnMsICI6IikpOyApIHsKLQkJaWYgKCEqeCkKLQkJCWNvbnRpbnVlOwotCi0JCXkgPSBzdHJjaHIoeCwgJz0nKTsKLQkJaWYgKHkpCi0JCQkqeSsrID0gMDsKLQotCQlpZiAoIXN0cmNtcCh4LCAiamlkIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBqaWQiKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzc2NhbmYoeSwgIiV1IiwgJmxzLT5qaWQpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAiZmlyc3QiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGZpcnN0Iik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+Zmlyc3QpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAiaWQiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGlkIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+aWQpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAibm9kaXIiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIG5vZGlyIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsIG5vZGlyKTsKLQotCQl9IGVsc2UgewotCQkJbG9nX2Vycm9yKCJ1bmtvbnduIG9wdGlvbjogJXMiLCB4KTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdkbG1fbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHM7Ci0JaW50IGVycm9yID0gLUVOT01FTSwgbm9kaXIgPSAwOwotCi0JaWYgKG1pbl9sdmJfc2l6ZSA+IEdETE1fTFZCX1NJWkUpCi0JCWdvdG8gb3V0OwotCi0JbHMgPSBpbml0X2dkbG0oY2IsIGNiX2RhdGEsIGZsYWdzLCB0YWJsZV9uYW1lKTsKLQlpZiAoIWxzKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gbWFrZV9hcmdzKGxzLCBob3N0X2RhdGEsICZub2Rpcik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gZ2RsbV9pbml0X3RocmVhZHMobHMpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZTsKLQotCWVycm9yID0gZ2RsbV9rb2JqZWN0X3NldHVwKGxzLCBmc2tvYmopOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfdGhyZWFkOwotCi0JZXJyb3IgPSBkbG1fbmV3X2xvY2tzcGFjZShscy0+ZnNuYW1lLCBzdHJsZW4obHMtPmZzbmFtZSksCi0JCQkJICAmbHMtPmRsbV9sb2Nrc3BhY2UsCi0JCQkJICBETE1fTFNGTF9GUyB8IERMTV9MU0ZMX05FV0VYQ0wgfAotCQkJCSAgKG5vZGlyID8gRExNX0xTRkxfTk9ESVIgOiAwKSwKLQkJCQkgIEdETE1fTFZCX1NJWkUpOwotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoImRsbV9uZXdfbG9ja3NwYWNlIGVycm9yICVkIiwgZXJyb3IpOwotCQlnb3RvIG91dF9rb2JqOwotCX0KLQotCWxvY2tzdHJ1Y3QtPmxzX2ppZCA9IGxzLT5qaWQ7Ci0JbG9ja3N0cnVjdC0+bHNfZmlyc3QgPSBscy0+Zmlyc3Q7Ci0JbG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlID0gbHM7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzID0gJmdkbG1fb3BzOwotCWxvY2tzdHJ1Y3QtPmxzX2ZsYWdzID0gMDsKLQlsb2Nrc3RydWN0LT5sc19sdmJfc2l6ZSA9IEdETE1fTFZCX1NJWkU7Ci0JcmV0dXJuIDA7Ci0KLW91dF9rb2JqOgotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLW91dF90aHJlYWQ6Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUobHMpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV91bm1vdW50KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0KLQlsb2dfZGVidWcoInVubW91bnQgZmxhZ3MgJWx4IiwgbHMtPmZsYWdzKTsKLQotCS8qIEZJWE1FOiBzZXJpYWxpemUgdW5tb3VudCBhbmQgd2l0aGRyYXcgaW4gY2FzZSB0aGV5Ci0JICAgaGFwcGVuIGF0IG9uY2UuICBBbHNvLCBpZiB1bm1vdW50IGZvbGxvd3Mgd2l0aGRyYXcsCi0JICAgd2FpdCBmb3Igd2l0aGRyYXcgdG8gZmluaXNoLiAqLwotCi0JaWYgKHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpCi0JCWdvdG8gb3V0OwotCi0JZ2RsbV9rb2JqZWN0X3JlbGVhc2UobHMpOwotCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+ZGxtX2xvY2tzcGFjZSwgMik7Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotCUJVR19PTihscy0+YWxsX2xvY2tzX2NvdW50KTsKLW91dDoKLQlrZnJlZShscyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fcmVjb3ZlcnlfZG9uZSh2b2lkICpsb2Nrc3BhY2UsIHVuc2lnbmVkIGludCBqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCi17Ci0JY2hhciBlbnZfamlkWzIwXTsKLQljaGFyIGVudl9zdGF0dXNbMjBdOwotCWNoYXIgKmVudnBbXSA9IHsgZW52X2ppZCwgZW52X3N0YXR1cywgTlVMTCB9OwotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlscy0+cmVjb3Zlcl9qaWRfZG9uZSA9IGppZDsKLQlscy0+cmVjb3Zlcl9qaWRfc3RhdHVzID0gbWVzc2FnZTsKLQlzcHJpbnRmKGVudl9qaWQsICJKSUQ9JWQiLCBqaWQpOwotCXNwcmludGYoZW52X3N0YXR1cywgIlJFQ09WRVJZPSVzIiwKLQkJbWVzc2FnZSA9PSBMTV9SRF9TVUNDRVNTID8gIkRvbmUiIDogIkZhaWxlZCIpOwotCWtvYmplY3RfdWV2ZW50X2VudigmbHMtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9vdGhlcnNfbWF5X21vdW50KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQljaGFyICptZXNzYWdlID0gIkZJUlNUTU9VTlQ9RG9uZSI7Ci0JY2hhciAqZW52cFtdID0geyBtZXNzYWdlLCBOVUxMIH07Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCWxzLT5maXJzdF9kb25lID0gMTsKLQlrb2JqZWN0X3VldmVudF9lbnYoJmxzLT5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7Ci19Ci0KLS8qIFVzZXJzcGFjZSBnZXRzIHRoZSBvZmZsaW5lIHVldmVudCwgYmxvY2tzIG5ldyBnZnMgbG9ja3Mgb24KLSAgIG90aGVyIG1vdW50ZXJzLCBhbmQgbGV0cyB1cyBrbm93IChzZXRzIFdJVEhEUkFXIGZsYWcpLiAgVGhlbiwKLSAgIHVzZXJzcGFjZSBsZWF2ZXMgdGhlIG1vdW50IGdyb3VwIHdoaWxlIHdlIGxlYXZlIHRoZSBsb2Nrc3BhY2UuICovCi0KLXN0YXRpYyB2b2lkIGdkbG1fd2l0aGRyYXcodm9pZCAqbG9ja3NwYWNlKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQotCWtvYmplY3RfdWV2ZW50KCZscy0+a29iaiwgS09CSl9PRkZMSU5FKTsKLQotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShscy0+d2FpdF9jb250cm9sLAotCQkJCSB0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKTsKLQotCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+ZGxtX2xvY2tzcGFjZSwgMik7Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3Bsb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfbG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBjbWQsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3B1bmxvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBuYW1lLT5sbl9udW1iZXIsIGZpbGUsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3Bsb2NrX2dldCh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X2dldChscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBmbCk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdkbG1fb3BzID0gewotCS5sbV9wcm90b19uYW1lID0gImxvY2tfZGxtIiwKLQkubG1fbW91bnQgPSBnZGxtX21vdW50LAotCS5sbV9vdGhlcnNfbWF5X21vdW50ID0gZ2RsbV9vdGhlcnNfbWF5X21vdW50LAotCS5sbV91bm1vdW50ID0gZ2RsbV91bm1vdW50LAotCS5sbV93aXRoZHJhdyA9IGdkbG1fd2l0aGRyYXcsCi0JLmxtX2dldF9sb2NrID0gZ2RsbV9nZXRfbG9jaywKLQkubG1fcHV0X2xvY2sgPSBnZGxtX3B1dF9sb2NrLAotCS5sbV9sb2NrID0gZ2RsbV9sb2NrLAotCS5sbV91bmxvY2sgPSBnZGxtX3VubG9jaywKLQkubG1fcGxvY2sgPSBnZGxtX3Bsb2NrLAotCS5sbV9wdW5sb2NrID0gZ2RsbV9wdW5sb2NrLAotCS5sbV9wbG9ja19nZXQgPSBnZGxtX3Bsb2NrX2dldCwKLQkubG1fY2FuY2VsID0gZ2RsbV9jYW5jZWwsCi0JLmxtX2hvbGRfbHZiID0gZ2RsbV9ob2xkX2x2YiwKLQkubG1fdW5ob2xkX2x2YiA9IGdkbG1fdW5ob2xkX2x2YiwKLQkubG1fcmVjb3ZlcnlfZG9uZSA9IGdkbG1fcmVjb3ZlcnlfZG9uZSwKLQkubG1fb3duZXIgPSBUSElTX01PRFVMRSwKLX07Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3ZWRjZi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIHNzaXplX3QgcHJvdG9fbmFtZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBnZGxtX29wcy5sbV9wcm90b19uYW1lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxvY2tfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlzc2l6ZV90IHJldDsKLQlpbnQgdmFsID0gMDsKLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpKQotCQl2YWwgPSAxOwotCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxvY2tfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3NpemVfdCByZXQgPSBsZW47Ci0JaW50IHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKLQotCWlmICh2YWwgPT0gMSkKLQkJc2V0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpOwotCWVsc2UgaWYgKHZhbCA9PSAwKSB7Ci0JCWNsZWFyX2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpOwotCQlnZGxtX3N1Ym1pdF9kZWxheWVkKGxzKTsKLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB3aXRoZHJhd19zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXNzaXplX3QgcmV0OwotCWludCB2YWwgPSAwOwotCi0JaWYgKHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpCi0JCXZhbCA9IDE7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB3aXRoZHJhd19zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzc2l6ZV90IHJldCA9IGxlbjsKLQlpbnQgdmFsOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwotCi0JaWYgKHZhbCA9PSAxKQotCQlzZXRfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncyk7Ci0JZWxzZQotCQlyZXQgPSAtRUlOVkFMOwotCXdha2VfdXAoJmxzLT53YWl0X2NvbnRyb2wpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGlkX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGxzLT5pZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGppZF9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+amlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZmlyc3Rfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmZpcnN0KTsKLX0KLQotc3RhdGljIHNzaXplX3QgZmlyc3RfZG9uZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+Zmlyc3RfZG9uZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlscy0+cmVjb3Zlcl9qaWQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Ci0JbHMtPmZzY2IobHMtPnNkcCwgTE1fQ0JfTkVFRF9SRUNPVkVSWSwgJmxzLT5yZWNvdmVyX2ppZCk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9kb25lX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZF9kb25lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkX3N0YXR1cyk7Ci19Ci0KLXN0cnVjdCBnZGxtX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdkbG1fbHMgKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBnZGxtX2xzICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLX07Ci0KLSNkZWZpbmUgR0RMTV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAotc3RhdGljIHN0cnVjdCBnZGxtX2F0dHIgZ2RsbV9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQotCi1HRExNX0FUVFIocHJvdG9fbmFtZSwgICAgIDA0NDQsIHByb3RvX25hbWVfc2hvdywgICAgIE5VTEwpOwotR0RMTV9BVFRSKGJsb2NrLCAgICAgICAgICAwNjQ0LCBibG9ja19zaG93LCAgICAgICAgICBibG9ja19zdG9yZSk7Ci1HRExNX0FUVFIod2l0aGRyYXcsICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csICAgICAgIHdpdGhkcmF3X3N0b3JlKTsKLUdETE1fQVRUUihpZCwgICAgICAgICAgICAgMDQ0NCwgaWRfc2hvdywgICAgICAgICAgICAgTlVMTCk7Ci1HRExNX0FUVFIoamlkLCAgICAgICAgICAgIDA0NDQsIGppZF9zaG93LCAgICAgICAgICAgIE5VTEwpOwotR0RMTV9BVFRSKGZpcnN0LCAgICAgICAgICAwNDQ0LCBmaXJzdF9zaG93LCAgICAgICAgICBOVUxMKTsKLUdETE1fQVRUUihmaXJzdF9kb25lLCAgICAgMDQ0NCwgZmlyc3RfZG9uZV9zaG93LCAgICAgTlVMTCk7Ci1HRExNX0FUVFIocmVjb3ZlciwgICAgICAgIDA2NDQsIHJlY292ZXJfc2hvdywgICAgICAgIHJlY292ZXJfc3RvcmUpOwotR0RMTV9BVFRSKHJlY292ZXJfZG9uZSwgICAwNDQ0LCByZWNvdmVyX2RvbmVfc2hvdywgICBOVUxMKTsKLUdETE1fQVRUUihyZWNvdmVyX3N0YXR1cywgMDQ0NCwgcmVjb3Zlcl9zdGF0dXNfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpnZGxtX2F0dHJzW10gPSB7Ci0JJmdkbG1fYXR0cl9wcm90b19uYW1lLmF0dHIsCi0JJmdkbG1fYXR0cl9ibG9jay5hdHRyLAotCSZnZGxtX2F0dHJfd2l0aGRyYXcuYXR0ciwKLQkmZ2RsbV9hdHRyX2lkLmF0dHIsCi0JJmdkbG1fYXR0cl9qaWQuYXR0ciwKLQkmZ2RsbV9hdHRyX2ZpcnN0LmF0dHIsCi0JJmdkbG1fYXR0cl9maXJzdF9kb25lLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyX2RvbmUuYXR0ciwKLQkmZ2RsbV9hdHRyX3JlY292ZXJfc3RhdHVzLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGdkbG1fYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0Jc3RydWN0IGdkbG1fYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZ2RsbV9hdHRyLCBhdHRyKTsKLQlyZXR1cm4gYS0+c2hvdyA/IGEtPnNob3cobHMsIGJ1ZikgOiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBnZGxtX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0Jc3RydWN0IGdkbG1fYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZ2RsbV9hdHRyLCBhdHRyKTsKLQlyZXR1cm4gYS0+c3RvcmUgPyBhLT5zdG9yZShscywgYnVmLCBsZW4pIDogbGVuOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBnZGxtX2F0dHJfb3BzID0gewotCS5zaG93ICA9IGdkbG1fYXR0cl9zaG93LAotCS5zdG9yZSA9IGdkbG1fYXR0cl9zdG9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGdkbG1fa3R5cGUgPSB7Ci0JLmRlZmF1bHRfYXR0cnMgPSBnZGxtX2F0dHJzLAotCS5zeXNmc19vcHMgICAgID0gJmdkbG1fYXR0cl9vcHMsCi19OwotCi1zdGF0aWMgc3RydWN0IGtzZXQgKmdkbG1fa3NldDsKLQotaW50IGdkbG1fa29iamVjdF9zZXR1cChzdHJ1Y3QgZ2RsbV9scyAqbHMsIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0JaW50IGVycm9yOwotCi0JbHMtPmtvYmoua3NldCA9IGdkbG1fa3NldDsKLQllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZscy0+a29iaiwgJmdkbG1fa3R5cGUsIGZza29iaiwKLQkJCQkgICAgICJsb2NrX21vZHVsZSIpOwotCWlmIChlcnJvcikKLQkJbG9nX2Vycm9yKCJjYW4ndCByZWdpc3RlciBrb2JqICVkIiwgZXJyb3IpOwotCWtvYmplY3RfdWV2ZW50KCZscy0+a29iaiwgS09CSl9BREQpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fa29iamVjdF9yZWxlYXNlKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlrb2JqZWN0X3B1dCgmbHMtPmtvYmopOwotfQotCi1zdGF0aWMgaW50IGdkbG1fdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKLXsKLSAgICAgICAgc3RydWN0IGdkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZGxtX2xzLCBrb2JqKTsKLSAgICAgICAgYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzOiVzIiwgbHMtPmNsdXN0ZXJuYW1lLCBscy0+ZnNuYW1lKTsKLSAgICAgICAgYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPWxvY2tfZGxtIik7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBnZGxtX3VldmVudF9vcHMgPSB7Ci0JLnVldmVudCA9IGdkbG1fdWV2ZW50LAotfTsKLQotCi1pbnQgZ2RsbV9zeXNmc19pbml0KHZvaWQpCi17Ci0JZ2RsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgibG9ja19kbG0iLCAmZ2RsbV91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7Ci0JaWYgKCFnZGxtX2tzZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbiBub3QgY3JlYXRlIGtzZXRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGdkbG1fc3lzZnNfZXhpdCh2b2lkKQotewotCWtzZXRfdW5yZWdpc3RlcihnZGxtX2tzZXQpOwotfQotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg4MjNlZi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBpbmxpbmUgaW50IG5vX3dvcmsoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCWludCByZXQ7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlyZXQgPSBsaXN0X2VtcHR5KCZscy0+c3VibWl0KTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnZGxtX3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IChzdHJ1Y3QgZ2RsbV9scyAqKSBkYXRhOwotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gTlVMTDsKLQotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShscy0+dGhyZWFkX3dhaXQsCi0JCQkJIW5vX3dvcmsobHMpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0KLQkJc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZscy0+c3VibWl0KSkgewotCQkJbHAgPSBsaXN0X2VudHJ5KGxzLT5zdWJtaXQubmV4dCwgc3RydWN0IGdkbG1fbG9jaywKLQkJCQkJZGVsYXlfbGlzdCk7Ci0JCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCQkJZ2RsbV9kb19sb2NrKGxwKTsKLQkJCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBnZGxtX2luaXRfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWludCBlcnJvcjsKLQotCXAgPSBrdGhyZWFkX3J1bihnZGxtX3RocmVhZCwgbHMsICJsb2NrX2RsbSIpOwotCWVycm9yID0gSVNfRVJSKHApOwotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoImNhbid0IHN0YXJ0IGxvY2tfZGxtIHRocmVhZCAlZCIsIGVycm9yKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlscy0+dGhyZWFkID0gcDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGdkbG1fcmVsZWFzZV90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlrdGhyZWFkX3N0b3AobHMtPnRocmVhZCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9nLmMgYi9mcy9nZnMyL2xvZy5jCmluZGV4IGFkMzA1ODUuLjk4OTE4YTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9nLmMKKysrIGIvZnMvZ2ZzMi9sb2cuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggNDM5MGY2Zi4uODBlNGY1ZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA3Y2FjZmRlLi5hNjg5MmVkIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTIzLDYgKzIyLDEyIEBACiAjaW5jbHVkZSAic3lzLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImdsb2NrLmgiCisjaW5jbHVkZSAicXVvdGEuaCIKKworc3RhdGljIHN0cnVjdCBzaHJpbmtlciBxZF9zaHJpbmtlciA9IHsKKwkuc2hyaW5rID0gZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5LAorCS5zZWVrcyA9IERFRkFVTFRfU0VFS1MsCit9OwogCiBzdGF0aWMgdm9pZCBnZnMyX2luaXRfaW5vZGVfb25jZSh2b2lkICpmb28pCiB7CkBAIC00MSw4ICs0Niw2IEBACiAJSU5JVF9ITElTVF9OT0RFKCZnbC0+Z2xfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmdsLT5nbF9zcGluKTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2hvbGRlcnMpOwotCWdsLT5nbF9sdmIgPSBOVUxMOwotCWF0b21pY19zZXQoJmdsLT5nbF9sdmJfY291bnQsIDApOwogCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2FpbF9saXN0KTsKIAlhdG9taWNfc2V0KCZnbC0+Z2xfYWlsX2NvdW50LCAwKTsKQEAgLTEwMCw2ICsxMDMsOCBAQAogCWlmICghZ2ZzMl9xdW90YWRfY2FjaGVwKQogCQlnb3RvIGZhaWw7CiAKKwlyZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOworCiAJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtMTE3LDYgKzEyMiw3IEBACiBmYWlsX3VucmVnaXN0ZXI6CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogZmFpbDoKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CiAJZ2ZzMl9nbG9ja19leGl0KCk7CiAKIAlpZiAoZ2ZzMl9xdW90YWRfY2FjaGVwKQpAQCAtMTQ1LDYgKzE1MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2dmczJfZnModm9pZCkKIHsKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CiAJZ2ZzMl9nbG9ja19leGl0KCk7CiAJZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnMoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJfZnNfdHlwZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IDA5ODUzNjIuLjhkNmYxMzIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtOTAsMjcgKzg5LDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX21ldGFfaW52YWwgLSBJbnZhbGlkYXRlIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqLwotCi12b2lkIGdmczJfbWV0YV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gZ2wtPmdsX2FzcGFjZTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKLQotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7Ci0KLQlhdG9taWNfaW5jKCZhc3BhY2UtPmlfd3JpdGVjb3VudCk7Ci0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7Ci0JYXRvbWljX2RlYygmYXNwYWNlLT5pX3dyaXRlY291bnQpOwotCi0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhbWFwcGluZy0+bnJwYWdlcyk7Ci19Ci0KLS8qKgogICogZ2ZzMl9tZXRhX3N5bmMgLSBTeW5jIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCiAgKiBAZ2w6IFRoZSBnbG9jawogICoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWV0YV9pby5oIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKaW5kZXggYjFhNWYzNi4uZGUyNzBjMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tZXRhX2lvLmgKKysrIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKQEAgLTQwLDcgKzQwLDYgQEAKIHN0cnVjdCBpbm9kZSAqZ2ZzMl9hc3BhY2VfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9hc3BhY2VfcHV0KHN0cnVjdCBpbm9kZSAqYXNwYWNlKTsKIAotdm9pZCBnZnMyX21ldGFfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIHZvaWQgZ2ZzMl9tZXRhX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAogc3RydWN0IGJ1ZmZlcl9oZWFkICpnZnMyX21ldGFfbmV3KHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdTY0IGJsa25vKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuYyBiL2ZzL2dmczIvbW91bnQuYwppbmRleCAzY2IwYTQ0Li5mN2U4NTI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL21vdW50LmMKKysrIGIvZnMvZ2ZzMi9tb3VudC5jCkBAIC0xMiwxMiArMTIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgotI2luY2x1ZGUgIm1vdW50LmgiCisjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJzeXMuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAKQEAgLTM3LDExICszNiwxNSBAQAogCU9wdF9xdW90YV9vZmYsCiAJT3B0X3F1b3RhX2FjY291bnQsCiAJT3B0X3F1b3RhX29uLAorCU9wdF9xdW90YSwKKwlPcHRfbm9xdW90YSwKIAlPcHRfc3VpZGRpciwKIAlPcHRfbm9zdWlkZGlyLAogCU9wdF9kYXRhX3dyaXRlYmFjaywKIAlPcHRfZGF0YV9vcmRlcmVkLAogCU9wdF9tZXRhLAorCU9wdF9kaXNjYXJkLAorCU9wdF9ub2Rpc2NhcmQsCiAJT3B0X2VyciwKIH07CiAKQEAgLTYxLDExICs2NCwxNSBAQAogCXtPcHRfcXVvdGFfb2ZmLCAicXVvdGE9b2ZmIn0sCiAJe09wdF9xdW90YV9hY2NvdW50LCAicXVvdGE9YWNjb3VudCJ9LAogCXtPcHRfcXVvdGFfb24sICJxdW90YT1vbiJ9LAorCXtPcHRfcXVvdGEsICJxdW90YSJ9LAorCXtPcHRfbm9xdW90YSwgIm5vcXVvdGEifSwKIAl7T3B0X3N1aWRkaXIsICJzdWlkZGlyIn0sCiAJe09wdF9ub3N1aWRkaXIsICJub3N1aWRkaXIifSwKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKIAl7T3B0X2RhdGFfb3JkZXJlZCwgImRhdGE9b3JkZXJlZCJ9LAogCXtPcHRfbWV0YSwgIm1ldGEifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCisJe09wdF9ub2Rpc2NhcmQsICJub2Rpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKQEAgLTc3LDEwMSArODQsNDYgQEAKICAqIFJldHVybjogZXJybm8KICAqLwogCi1pbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpkYXRhX2FyZywgaW50IHJlbW91bnQpCitpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpvcHRpb25zKQogewotCXN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MgPSAmc2RwLT5zZF9hcmdzOwotCWNoYXIgKmRhdGEgPSBkYXRhX2FyZzsKLQljaGFyICpvcHRpb25zLCAqbywgKnY7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICghcmVtb3VudCkgewotCQkvKiAgU2V0IHNvbWUgZGVmYXVsdHMgICovCi0JCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9ERUZBVUxUOwotCQlhcmdzLT5hcl9kYXRhID0gR0ZTMl9EQVRBX0RFRkFVTFQ7Ci0JfQorCWNoYXIgKm87CisJaW50IHRva2VuOworCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwogCiAJLyogU3BsaXQgdGhlIG9wdGlvbnMgaW50byB0b2tlbnMgd2l0aCB0aGUgIiwiIGNoYXJhY3RlciBhbmQKIAkgICBwcm9jZXNzIHRoZW0gKi8KIAotCWZvciAob3B0aW9ucyA9IGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKTsgKSB7Ci0JCWludCB0b2tlbjsKLQkJc3Vic3RyaW5nX3QgdG1wW01BWF9PUFRfQVJHU107Ci0KLQkJaWYgKCEqbykKKwl3aGlsZSAoMSkgeworCQlvID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpOworCQlpZiAobyA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmICgqbyA9PSAnXDAnKQogCQkJY29udGludWU7CiAKIAkJdG9rZW4gPSBtYXRjaF90b2tlbihvLCB0b2tlbnMsIHRtcCk7CiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfbG9ja3Byb3RvOgotCQkJdiA9IG1hdGNoX3N0cmR1cCgmdG1wWzBdKTsKLQkJCWlmICghdikgewotCQkJCWZzX2luZm8oc2RwLCAibm8gbWVtb3J5IGZvciBsb2NrcHJvdG9cbiIpOwotCQkJCWVycm9yID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0KLQotCQkJaWYgKHJlbW91bnQgJiYgc3RyY21wKHYsIGFyZ3MtPmFyX2xvY2twcm90bykpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQkJCQotCQkJc3RybmNweShhcmdzLT5hcl9sb2NrcHJvdG8sIHYsIEdGUzJfTE9DS05BTUVfTEVOKTsKLQkJCWFyZ3MtPmFyX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTiAtIDFdID0gMDsKLQkJCWtmcmVlKHYpOworCQkJbWF0Y2hfc3RybGNweShhcmdzLT5hcl9sb2NrcHJvdG8sICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2t0YWJsZToKLQkJCXYgPSBtYXRjaF9zdHJkdXAoJnRtcFswXSk7Ci0JCQlpZiAoIXYpIHsKLQkJCQlmc19pbmZvKHNkcCwgIm5vIG1lbW9yeSBmb3IgbG9ja3RhYmxlXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9sb2NrdGFibGUpKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0KLQkJCXN0cm5jcHkoYXJncy0+YXJfbG9ja3RhYmxlLCB2LCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JCQlhcmdzLT5hcl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSAgPSAwOwotCQkJa2ZyZWUodik7CisJCQltYXRjaF9zdHJsY3B5KGFyZ3MtPmFyX2xvY2t0YWJsZSwgJnRtcFswXSwKKwkJCQkgICAgICBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaG9zdGRhdGE6Ci0JCQl2ID0gbWF0Y2hfc3RyZHVwKCZ0bXBbMF0pOwotCQkJaWYgKCF2KSB7Ci0JCQkJZnNfaW5mbyhzZHAsICJubyBtZW1vcnkgZm9yIGhvc3RkYXRhXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9ob3N0ZGF0YSkpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQotCQkJc3RybmNweShhcmdzLT5hcl9ob3N0ZGF0YSwgdiwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCQkJYXJncy0+YXJfaG9zdGRhdGFbR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSA9IDA7Ci0JCQlrZnJlZSh2KTsKKwkJCW1hdGNoX3N0cmxjcHkoYXJncy0+YXJfaG9zdGRhdGEsICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3NwZWN0YXRvcjoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9zcGVjdGF0b3IpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9zcGVjdGF0b3IgPSAxOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lnbm9yZV9sb2NhbF9mczoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9pZ25vcmVfbG9jYWxfZnMpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9pZ25vcmVfbG9jYWxfZnMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2FsZmxvY2tzOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX2xvY2FsZmxvY2tzKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbG9jYWxmbG9ja3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2FsY2FjaGluZzoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9sb2NhbGNhY2hpbmcpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9sb2NhbGNhY2hpbmcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgpAQCAtMTgxLDI1ICsxMzMsMjMgQEAKIAkJCWFyZ3MtPmFyX2RlYnVnID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF91cGdyYWRlOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX3VwZ3JhZGUpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl91cGdyYWRlID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9hY2w6CiAJCQlhcmdzLT5hcl9wb3NpeF9hY2wgPSAxOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9hY2w6CiAJCQlhcmdzLT5hcl9wb3NpeF9hY2wgPSAwOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJj0gfk1TX1BPU0lYQUNMOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX29mZjoKKwkJY2FzZSBPcHRfbm9xdW90YToKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9PRkY7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcXVvdGFfYWNjb3VudDoKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9BQ0NPVU5UOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX29uOgorCQljYXNlIE9wdF9xdW90YToKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9PTjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9zdWlkZGlyOgpAQCAtMjE1LDI5ICsxNjUsMjEgQEAKIAkJCWFyZ3MtPmFyX2RhdGEgPSBHRlMyX0RBVEFfT1JERVJFRDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9tZXRhOgotCQkJaWYgKHJlbW91bnQgJiYgYXJncy0+YXJfbWV0YSAhPSAxKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbWV0YSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZGlzY2FyZDoKKwkJCWFyZ3MtPmFyX2Rpc2NhcmQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vZGlzY2FyZDoKKwkJCWFyZ3MtPmFyX2Rpc2NhcmQgPSAwOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2VycjoKIAkJZGVmYXVsdDoKLQkJCWZzX2luZm8oc2RwLCAidW5rbm93biBvcHRpb246ICVzXG4iLCBvKTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0X2Vycm9yOworCQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbjogJXNcbiIsIG8pOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLW91dF9lcnJvcjoKLQlpZiAoZXJyb3IpCi0JCWZzX2luZm8oc2RwLCAiaW52YWxpZCBtb3VudCBvcHRpb24ocylcbiIpOwotCi0JaWYgKGRhdGEgIT0gZGF0YV9hcmcpCi0JCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuIGVycm9yOwotCi1jYW50X3JlbW91bnQ6Ci0JZnNfaW5mbyhzZHAsICJjYW4ndCByZW1vdW50IHdpdGggb3B0aW9uICVzXG4iLCBvKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tb3VudC5oIGIvZnMvZ2ZzMi9tb3VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEyODhhLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbW91bnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19NT1VOVF9ET1RfSF9fCi0jZGVmaW5lIF9fTU9VTlRfRE9UX0hfXwotCi1zdHJ1Y3QgZ2ZzMl9zYmQ7Ci0KLWludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmRhdGFfYXJnLCBpbnQgcmVtb3VudCk7Ci0KLSNlbmRpZiAvKiBfX01PVU5UX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2FkZHJlc3MuYyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwppbmRleCA0ZGRhYjY3Li5hNmRkZTE3IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19hZGRyZXNzLmMKKysrIGIvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTQ0Miw2ICs0NDEsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseShwYWdlLT5pbmRleCkpIHsKIAkJemVyb191c2VyKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDk2LDYgKzEwOTYsNyBAQAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCiAJLmRpcmVjdF9JTyA9IGdmczJfZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZSA9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfb3JkZXJlZF9hb3BzID0gewpAQCAtMTExMSw2ICsxMTEyLDcgQEAKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAogCS5kaXJlY3RfSU8gPSBnZnMyX2RpcmVjdF9JTywKIAkubWlncmF0ZXBhZ2UgPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX2pkYXRhX2FvcHMgPSB7CkBAIC0xMTI1LDYgKzExMjcsNyBAQAogCS5ibWFwID0gZ2ZzMl9ibWFwLAogCS5pbnZhbGlkYXRlcGFnZSA9IGdmczJfaW52YWxpZGF0ZXBhZ2UsCiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogdm9pZCBnZnMyX3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19kZW50cnkuYyBiL2ZzL2dmczIvb3BzX2RlbnRyeS5jCmluZGV4IGMyYWQzNjMuLjAyMmM2NmMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2RlbnRyeS5jCisrKyBiL2ZzL2dmczIvb3BzX2RlbnRyeS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0xMDgsNyArMTA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGdmczJfZG9wcyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBnZnMyX2RvcHMgPSB7CiAJLmRfcmV2YWxpZGF0ZSA9IGdmczJfZHJldmFsaWRhdGUsCiAJLmRfaGFzaCA9IGdmczJfZGhhc2gsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMgYi9mcy9nZnMyL29wc19leHBvcnQuYwppbmRleCA3ZmRlYjE0Li45MjAwZWYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19leHBvcnQuYworKysgYi9mcy9nZnMyL29wc19leHBvcnQuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydGZzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZmlsZS5jIGIvZnMvZ2ZzMi9vcHNfZmlsZS5jCmluZGV4IDkzZmU0MWIuLjNiOWU4ZGUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZpbGUuYworKysgYi9mcy9nZnMyL29wc19maWxlLmMKQEAgLTIwLDkgKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbV9wbG9jay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMzU0LDcgKzM1NSw5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwlzZXRfYml0KEdMRl9ESVJUWSwgJmlwLT5pX2dsLT5nbF9mbGFncyk7CiAJc2V0X2JpdChHSUZfU1dfUEFHRUQsICZpcC0+aV9mbGFncyk7CisKIAlyZXQgPSBnZnMyX3dyaXRlX2FsbG9jX3JlcXVpcmVkKGlwLCBwb3MsIFBBR0VfQ0FDSEVfU0laRSwgJmFsbG9jX3JlcXVpcmVkKTsKIAlpZiAocmV0IHx8ICFhbGxvY19yZXF1aXJlZCkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNTYwLDU3ICs1NjMsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KKwogLyoqCiAgKiBnZnMyX3NldGxlYXNlIC0gYWNxdWlyZS9yZWxlYXNlIGEgZmlsZSBsZWFzZQogICogQGZpbGU6IHRoZSBmaWxlIHBvaW50ZXIKICAqIEBhcmc6IGxlYXNlIHR5cGUKICAqIEBmbDogZmlsZSBsb2NrCiAgKgorICogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gZW5mb3JjZSBhIGxlYXNlIGFjcm9zcyB0aGUgd2hvbGUKKyAqIGNsdXN0ZXI7IHVudGlsIHdlIGRvLCBkaXNhYmxlIGxlYXNlcyAoYnkganVzdCByZXR1cm5pbmcgLUVJTlZBTCksCisgKiB1bmxlc3MgdGhlIGFkbWluaXN0cmF0b3IgaGFzIHJlcXVlc3RlZCBwdXJlbHkgbG9jYWwgbG9ja2luZy4KKyAqCiAgKiBSZXR1cm5zOiBlcnJubwogICovCiAKIHN0YXRpYyBpbnQgZ2ZzMl9zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9uZyBhcmcsIHN0cnVjdCBmaWxlX2xvY2sgKipmbCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKLQotCS8qCi0JICogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gZW5mb3JjZSBhIGxlYXNlIGFjcm9zcyB0aGUgd2hvbGUKLQkgKiBjbHVzdGVyOyB1bnRpbCB3ZSBkbywgZGlzYWJsZSBsZWFzZXMgKGJ5IGp1c3QgcmV0dXJuaW5nIC1FSU5WQUwpLAotCSAqIHVubGVzcyB0aGUgYWRtaW5pc3RyYXRvciBoYXMgcmVxdWVzdGVkIHB1cmVseSBsb2NhbCBsb2NraW5nLgotCSAqLwotCWlmICghc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZ2VuZXJpY19zZXRsZWFzZShmaWxlLCBhcmcsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3Bsb2NrX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcGxvY2tfZ2V0KAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGZsKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9sbV9wbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkgIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBjbWQsIGZsKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9sbV9wdW5sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHVubG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBmbCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKQEAgLTYyNiw5ICs1OTYsNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShmaWxlLT5mX21hcHBpbmctPmhvc3QpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihmaWxlLT5mX21hcHBpbmctPmhvc3QpOwotCXN0cnVjdCBsbV9sb2NrbmFtZSBuYW1lID0KLQkJeyAubG5fbnVtYmVyID0gaXAtPmlfbm9fYWRkciwKLQkJICAubG5fdHlwZSA9IExNX1RZUEVfUExPQ0sgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OwogCiAJaWYgKCEoZmwtPmZsX2ZsYWdzICYgRkxfUE9TSVgpKQogCQlyZXR1cm4gLUVOT0xDSzsKQEAgLTY0MCwxMiArNjA4LDE0IEBACiAJCWNtZCA9IEZfU0VUTEs7CiAJCWZsLT5mbF90eXBlID0gRl9VTkxDSzsKIAl9CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKKwkJcmV0dXJuIC1FSU87CiAJaWYgKElTX0dFVExLKGNtZCkpCi0JCXJldHVybiBnZnMyX2xtX3Bsb2NrX2dldChzZHAsICZuYW1lLCBmaWxlLCBmbCk7CisJCXJldHVybiBkbG1fcG9zaXhfZ2V0KGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGZsKTsKIAllbHNlIGlmIChmbC0+ZmxfdHlwZSA9PSBGX1VOTENLKQotCQlyZXR1cm4gZ2ZzMl9sbV9wdW5sb2NrKHNkcCwgJm5hbWUsIGZpbGUsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF91bmxvY2sobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgZmwpOwogCWVsc2UKLQkJcmV0dXJuIGdmczJfbG1fcGxvY2soc2RwLCAmbmFtZSwgZmlsZSwgY21kLCBmbCk7CisJCXJldHVybiBkbG1fcG9zaXhfbG9jayhscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBjbWQsIGZsKTsKIH0KIAogc3RhdGljIGludCBkb19mbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCkBAIC03MzIsNyArNzAyLDcgQEAKIAl9CiB9CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wcyA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLmxsc2VlawkJPSBnZnMyX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApAQCAtNzUwLDcgKzcyMCw3IEBACiAJLnNldGxlYXNlCT0gZ2ZzMl9zZXRsZWFzZSwKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHMgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5yZWFkZGlyCT0gZ2ZzMl9yZWFkZGlyLAogCS51bmxvY2tlZF9pb2N0bAk9IGdmczJfaW9jdGwsCiAJLm9wZW4JCT0gZ2ZzMl9vcGVuLApAQCAtNzYwLDcgKzczMCw5IEBACiAJLmZsb2NrCQk9IGdmczJfZmxvY2ssCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzX25vbG9jayA9IHsKKyNlbmRpZiAvKiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSAqLworCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wc19ub2xvY2sgPSAmKGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpewogCS5sbHNlZWsJCT0gZ2ZzMl9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKQEAgLTc3MywxMCArNzQ1LDEwIEBACiAJLmZzeW5jCQk9IGdmczJfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLAotCS5zZXRsZWFzZQk9IGdmczJfc2V0bGVhc2UsCisJLnNldGxlYXNlCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wc19ub2xvY2sgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzX25vbG9jayA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLnJlYWRkaXIJPSBnZnMyX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ2ZzMl9pb2N0bCwKIAkub3BlbgkJPSBnZnMyX29wZW4sCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19mc3R5cGUuYyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCmluZGV4IGY5MWVlYmQuLjUxODgzYjMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0yNSw3ICsyNCw2IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJnbG9wcy5oIgogI2luY2x1ZGUgImlub2RlLmgiCi0jaW5jbHVkZSAibW91bnQuaCIKICNpbmNsdWRlICJyZWNvdmVyeS5oIgogI2luY2x1ZGUgInJncnAuaCIKICNpbmNsdWRlICJzdXBlci5oIgpAQCAtNjQsNyArNjIsNiBAQAogCWd0LT5ndF9xdW90YV93YXJuX3BlcmlvZCA9IDEwOwogCWd0LT5ndF9xdW90YV9zY2FsZV9udW0gPSAxOwogCWd0LT5ndF9xdW90YV9zY2FsZV9kZW4gPSAxOwotCWd0LT5ndF9xdW90YV9jYWNoZV9zZWNzID0gMzAwOwogCWd0LT5ndF9xdW90YV9xdWFudHVtID0gNjA7CiAJZ3QtPmd0X25ld19maWxlc19qZGF0YSA9IDA7CiAJZ3QtPmd0X21heF9yZWFkYWhlYWQgPSAxIDw8IDE4OwpAQCAtMTAwLDcgKzk3LDYgQEAKIAltdXRleF9pbml0KCZzZHAtPnNkX2ppbmRleF9tdXRleCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZF9xdW90YV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmc2RwLT5zZF9xdW90YV9zcGluKTsKIAltdXRleF9pbml0KCZzZHAtPnNkX3F1b3RhX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX3F1b3RhX3dhaXQpOwogCUlOSVRfTElTVF9IRUFEKCZzZHAtPnNkX3RydW5jX2xpc3QpOwpAQCAtMjM4LDYgKzIzNCw3IEBACiAKIAltZW1jcHkoc2ItPnNiX2xvY2twcm90bywgc3RyLT5zYl9sb2NrcHJvdG8sIEdGUzJfTE9DS05BTUVfTEVOKTsKIAltZW1jcHkoc2ItPnNiX2xvY2t0YWJsZSwgc3RyLT5zYl9sb2NrdGFibGUsIEdGUzJfTE9DS05BTUVfTEVOKTsKKwltZW1jcHkoc2ItPnNiX3V1aWQsIHN0ci0+c2JfdXVpZCwgMTYpOwogfQogCiAvKioKQEAgLTI5OSwxNSArMjk2LDE1IEBACiAJX19mcmVlX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7CiB9CisKIC8qKgogICogZ2ZzMl9yZWFkX3NiIC0gUmVhZCBzdXBlciBibG9jawogICogQHNkcDogVGhlIEdGUzIgc3VwZXJibG9jawotICogQGdsOiB0aGUgZ2xvY2sgZm9yIHRoZSBzdXBlcmJsb2NrIChhc3N1bWVkIHRvIGJlIGhlbGQpCiAgKiBAc2lsZW50OiBEb24ndCBwcmludCBtZXNzYWdlIGlmIG1vdW50IGZhaWxzCiAgKgogICovCiAKLXN0YXRpYyBpbnQgZ2ZzMl9yZWFkX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBzaWxlbnQpCitzdGF0aWMgaW50IGdmczJfcmVhZF9zYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHNpbGVudCkKIHsKIAl1MzIgaGFzaF9ibG9ja3MsIGluZF9ibG9ja3MsIGxlYWZfYmxvY2tzOwogCXUzMiB0bXBfYmxvY2tzOwpAQCAtNTI3LDcgKzUyNCw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gZ2ZzMl9yZWFkX3NiKHNkcCwgc2JfZ2guZ2hfZ2wsIHNpbGVudCk7CisJcmV0ID0gZ2ZzMl9yZWFkX3NiKHNkcCwgc2lsZW50KTsKIAlpZiAocmV0KSB7CiAJCWZzX2VycihzZHAsICJjYW4ndCByZWFkIHN1cGVyYmxvY2s6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTYzMCwxMyArNjI3LDEzIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX2xtX290aGVyc19tYXlfbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCitzdGF0aWMgdm9pZCBnZnMyX290aGVyc19tYXlfbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9vdGhlcnNfbWF5X21vdW50KQotCQlyZXR1cm47Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9vdGhlcnNfbWF5X21vdW50KAotCQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlKTsKKwljaGFyICptZXNzYWdlID0gIkZJUlNUTU9VTlQ9RG9uZSI7CisJY2hhciAqZW52cFtdID0geyBtZXNzYWdlLCBOVUxMIH07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlscy0+bHNfZmlyc3RfZG9uZSA9IDE7CisJa29iamVjdF91ZXZlbnRfZW52KCZzZHAtPnNkX2tvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KIAogLyoqCkBAIC03OTYsNyArNzkzLDcgQEAKIAkJCX0KIAkJfQogCi0JCWdmczJfbG1fb3RoZXJzX21heV9tb3VudChzZHApOworCQlnZnMyX290aGVyc19tYXlfbW91bnQoc2RwKTsKIAl9IGVsc2UgaWYgKCFzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKSB7CiAJCWVycm9yID0gZ2ZzMl9yZWNvdmVyX2pvdXJuYWwoc2RwLT5zZF9qZGVzYyk7CiAJCWlmIChlcnJvcikgewpAQCAtMTAwNSw3ICsxMDAyLDYgQEAKIAkJZ290byBmYWlsX3F1b3RhZDsKIAogCXNkcC0+c2RfbG9nX2ZsdXNoX3RpbWUgPSBqaWZmaWVzOwotCXNkcC0+c2RfamluZGV4X3JlZnJlc2hfdGltZSA9IGppZmZpZXM7CiAKIAlwID0ga3RocmVhZF9ydW4oZ2ZzMl9sb2dkLCBzZHAsICJnZnMyX2xvZ2QiKTsKIAllcnJvciA9IElTX0VSUihwKTsKQEAgLTEwMzMsNiArMTAyOSwxNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgbm9sb2NrX3Rva2VucyA9IHsKKwl7IE9wdF9qaWQsICJqaWQ9JWRcbiIsIH0sCisJeyBPcHRfZXJyLCBOVUxMIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgbm9sb2NrX29wcyA9IHsKKwkubG1fcHJvdG9fbmFtZSA9ICJsb2NrX25vbG9jayIsCisJLmxtX3B1dF9sb2NrID0ga21lbV9jYWNoZV9mcmVlLAorCS5sbV90b2tlbnMgPSAmbm9sb2NrX3Rva2VucywKK307CisKIC8qKgogICogZ2ZzMl9sbV9tb3VudCAtIG1vdW50IGEgbG9ja2luZyBwcm90b2NvbAogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KQEAgLTEwNDQsMzEgKzEwNTEsNzMgQEAKIAogc3RhdGljIGludCBnZnMyX2xtX21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQogewotCWNoYXIgKnByb3RvID0gc2RwLT5zZF9wcm90b19uYW1lOwotCWNoYXIgKnRhYmxlID0gc2RwLT5zZF90YWJsZV9uYW1lOwotCWludCBmbGFncyA9IExNX01GTEFHX0NPTlZfTk9EUk9QOwotCWludCBlcnJvcjsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzID0gJnNkcC0+c2RfYXJnczsKKwljb25zdCBjaGFyICpwcm90byA9IHNkcC0+c2RfcHJvdG9fbmFtZTsKKwljb25zdCBjaGFyICp0YWJsZSA9IHNkcC0+c2RfdGFibGVfbmFtZTsKKwljb25zdCBjaGFyICpmc25hbWU7CisJY2hhciAqbywgKm9wdGlvbnM7CisJaW50IHJldDsKIAotCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQotCQlmbGFncyB8PSBMTV9NRkxBR19TUEVDVEFUT1I7CisJaWYgKCFzdHJjbXAoImxvY2tfbm9sb2NrIiwgcHJvdG8pKSB7CisJCWxtID0gJm5vbG9ja19vcHM7CisJCXNkcC0+c2RfYXJncy5hcl9sb2NhbGZsb2NrcyA9IDE7CisJCXNkcC0+c2RfYXJncy5hcl9sb2NhbGNhY2hpbmcgPSAxOworI2lmZGVmIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNCisJfSBlbHNlIGlmICghc3RyY21wKCJsb2NrX2RsbSIsIHByb3RvKSkgeworCQlsbSA9ICZnZnMyX2RsbV9vcHM7CisjZW5kaWYKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjYW4ndCBmaW5kIHByb3RvY29sICVzXG4iLCBwcm90byk7CisJCXJldHVybiAtRU5PRU5UOworCX0KIAogCWZzX2luZm8oc2RwLCAiVHJ5aW5nIHRvIGpvaW4gY2x1c3RlciBcIiVzXCIsIFwiJXNcIlxuIiwgcHJvdG8sIHRhYmxlKTsKIAotCWVycm9yID0gZ2ZzMl9tb3VudF9sb2NrcHJvdG8ocHJvdG8sIHRhYmxlLCBzZHAtPnNkX2FyZ3MuYXJfaG9zdGRhdGEsCi0JCQkJICAgICBnZnMyX2dsb2NrX2NiLCBzZHAsCi0JCQkJICAgICBHRlMyX01JTl9MVkJfU0laRSwgZmxhZ3MsCi0JCQkJICAgICAmc2RwLT5zZF9sb2Nrc3RydWN0LCAmc2RwLT5zZF9rb2JqKTsKLQlpZiAoZXJyb3IpIHsKLQkJZnNfaW5mbyhzZHAsICJjYW4ndCBtb3VudCBwcm90bz0lcywgdGFibGU9JXMsIGhvc3RkYXRhPSVzXG4iLAotCQkJcHJvdG8sIHRhYmxlLCBzZHAtPnNkX2FyZ3MuYXJfaG9zdGRhdGEpOwotCQlnb3RvIG91dDsKLQl9CisJbHMtPmxzX29wcyA9IGxtOworCWxzLT5sc19maXJzdCA9IDE7CisJbHMtPmxzX2lkID0gMDsKIAotCWlmIChnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcykgfHwKLQkgICAgZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19sdmJfc2l6ZSA+PQotCQkJCSAgR0ZTMl9NSU5fTFZCX1NJWkUpKSB7Ci0JCWdmczJfdW5tb3VudF9sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7Ci0JCWdvdG8gb3V0OworCWZvciAob3B0aW9ucyA9IGFyZ3MtPmFyX2hvc3RkYXRhOyAobyA9IHN0cnNlcCgmb3B0aW9ucywgIjoiKSk7ICkgeworCQlzdWJzdHJpbmdfdCB0bXBbTUFYX09QVF9BUkdTXTsKKwkJaW50IHRva2VuLCBvcHRpb247CisKKwkJaWYgKCFvIHx8ICEqbykKKwkJCWNvbnRpbnVlOworCisJCXRva2VuID0gbWF0Y2hfdG9rZW4obywgKmxtLT5sbV90b2tlbnMsIHRtcCk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfamlkOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCBvcHRpb24gPCAwKSAKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2ppZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9pZDoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19pZCA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9maXJzdDoKKwkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKKwkJCWlmIChyZXQgfHwgKG9wdGlvbiAhPSAwICYmIG9wdGlvbiAhPSAxKSkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2ZpcnN0ID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vZGlyOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCAob3B0aW9uICE9IDAgJiYgb3B0aW9uICE9IDEpKQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfbm9kaXIgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyOgorCQlkZWZhdWx0OgoraG9zdGRhdGFfZXJyb3I6CisJCQlmc19pbmZvKHNkcCwgInVua25vd24gaG9zdGRhdGEgKCVzKVxuIiwgbyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQpAQCAtMTA3NywyMiArMTEyNiwyNSBAQAogCQlzbnByaW50ZihzZHAtPnNkX2ZzbmFtZSwgR0ZTMl9GU05BTUVfTEVOLCAiJXMuJXUiLCB0YWJsZSwKIAkJCSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKTsKIAotCWZzX2luZm8oc2RwLCAiSm9pbmVkIGNsdXN0ZXIuIE5vdyBtb3VudGluZyBGUy4uLlxuIik7Ci0KLQlpZiAoKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19mbGFncyAmIExNX0xTRkxBR19MT0NBTCkgJiYKLQkgICAgIXNkcC0+c2RfYXJncy5hcl9pZ25vcmVfbG9jYWxfZnMpIHsKLQkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzID0gMTsKLQkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsY2FjaGluZyA9IDE7CisJZnNuYW1lID0gc3RyY2hyKHRhYmxlLCAnOicpOworCWlmIChmc25hbWUpCisJCWZzbmFtZSsrOworCWlmIChsbS0+bG1fbW91bnQgPT0gTlVMTCkgeworCQlmc19pbmZvKHNkcCwgIk5vdyBtb3VudGluZyBGUy4uLlxuIik7CisJCXJldHVybiAwOwogCX0KLQotb3V0OgotCXJldHVybiBlcnJvcjsKKwlyZXQgPSBsbS0+bG1fbW91bnQoc2RwLCBmc25hbWUpOworCWlmIChyZXQgPT0gMCkKKwkJZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWdmczJfdW5tb3VudF9sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxtID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wczsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkgJiYKKwkgICAgbG0tPmxtX3VubW91bnQpCisJCWxtLT5sbV91bm1vdW50KHNkcCk7CiB9CiAKIC8qKgpAQCAtMTExNiwxMiArMTE2OCwyMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsIChjaGFyICopZGF0YSwgMCk7CisJc2RwLT5zZF9hcmdzLmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9ERUZBVUxUOworCXNkcC0+c2RfYXJncy5hcl9kYXRhID0gR0ZTMl9EQVRBX0RFRkFVTFQ7CisKKwllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsICZzZHAtPnNkX2FyZ3MsIGRhdGEpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiBjYW4ndCBwYXJzZSBtb3VudCBhcmd1bWVudHNcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCisJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCisgICAgICAgICAgICAgICAgc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfcG9zaXhfYWNsKQorCQlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKwogCXNiLT5zX21hZ2ljID0gR0ZTMl9NQUdJQzsKIAlzYi0+c19vcCA9ICZnZnMyX3N1cGVyX29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmZ2ZzMl9leHBvcnRfb3BzOwpAQCAtMTE5OSw2ICsxMjU5LDggQEAKIAkJZHB1dChzZHAtPnNkX3Jvb3RfZGlyKTsKIAlpZiAoc2RwLT5zZF9tYXN0ZXJfZGlyKQogCQlkcHV0KHNkcC0+c2RfbWFzdGVyX2Rpcik7CisJaWYgKHNiLT5zX3Jvb3QpCisJCWRwdXQoc2ItPnNfcm9vdCk7CiAJc2ItPnNfcm9vdCA9IE5VTEw7CiBmYWlsX2xvY2tpbmc6CiAJaW5pdF9sb2NraW5nKHNkcCwgJm1vdW50X2doLCBVTkRPKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IDQ5ODc3NTQuLmFiZDU0MjkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maWVtYXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19zdXBlci5jIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwppbmRleCAzMjAzMjNkLi40NTgwMTk1IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19zdXBlci5jCisrKyBiL2ZzL2dmczIvb3BzX3N1cGVyLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0yNyw3ICsyNiw2IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJpbm9kZS5oIgogI2luY2x1ZGUgImxvZy5oIgotI2luY2x1ZGUgIm1vdW50LmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJyZWNvdmVyeS5oIgogI2luY2x1ZGUgInJncnAuaCIKQEAgLTQwLDYgKzM4LDggQEAKICNpbmNsdWRlICJibWFwLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgogCisjZGVmaW5lIGFyZ3NfbmVxKGExLCBhMiwgeCkgKChhMSktPmFyXyMjeCAhPSAoYTIpLT5hcl8jI3gpCisKIC8qKgogICogZ2ZzMl93cml0ZV9pbm9kZSAtIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgc3RhYmxlIG9uIHRoZSBkaXNrCiAgKiBAaW5vZGU6IFRoZSBpbm9kZQpAQCAtNDM1LDI1ICs0MzUsNDUgQEAKIHN0YXRpYyBpbnQgZ2ZzMl9yZW1vdW50X2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBnZnMyX2FyZ3MgYXJncyA9IHNkcC0+c2RfYXJnczsgLyogRGVmYXVsdCB0byBjdXJyZW50IHNldHRpbmdzICovCiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCBkYXRhLCAxKTsKKwllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsICZhcmdzLCBkYXRhKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAorCS8qIE5vdCBhbGxvd2VkIHRvIGNoYW5nZSBsb2NraW5nIGRldGFpbHMgKi8KKwlpZiAoc3RyY21wKGFyZ3MuYXJfbG9ja3Byb3RvLCBzZHAtPnNkX2FyZ3MuYXJfbG9ja3Byb3RvKSB8fAorCSAgICBzdHJjbXAoYXJncy5hcl9sb2NrdGFibGUsIHNkcC0+c2RfYXJncy5hcl9sb2NrdGFibGUpIHx8CisJICAgIHN0cmNtcChhcmdzLmFyX2hvc3RkYXRhLCBzZHAtPnNkX2FyZ3MuYXJfaG9zdGRhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNvbWUgZmxhZ3MgbXVzdCBub3QgYmUgY2hhbmdlZCAqLworCWlmIChhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgc3BlY3RhdG9yKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgaWdub3JlX2xvY2FsX2ZzKSB8fAorCSAgICBhcmdzX25lcSgmYXJncywgJnNkcC0+c2RfYXJncywgbG9jYWxmbG9ja3MpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBsb2NhbGNhY2hpbmcpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBtZXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKIAkJKmZsYWdzIHw9IE1TX1JET05MWTsKLQllbHNlIHsKLQkJaWYgKCpmbGFncyAmIE1TX1JET05MWSkgewotCQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQotCQkJCWVycm9yID0gZ2ZzMl9tYWtlX2ZzX3JvKHNkcCk7Ci0JCX0gZWxzZSBpZiAoISgqZmxhZ3MgJiBNU19SRE9OTFkpICYmCi0JCQkgICAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisKKwlpZiAoKHNiLT5zX2ZsYWdzIF4gKmZsYWdzKSAmIE1TX1JET05MWSkgeworCQlpZiAoKmZsYWdzICYgTVNfUkRPTkxZKQorCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcm8oc2RwKTsKKwkJZWxzZQogCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcncoc2RwKTsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JcmV0dXJuIGVycm9yOworCXNkcC0+c2RfYXJncyA9IGFyZ3M7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCisJCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworCWVsc2UKKwkJc2ItPnNfZmxhZ3MgJj0gfk1TX1BPU0lYQUNMOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTU4OCw2ICs2MDgsOCBAQAogCQl9CiAJCXNlcV9wcmludGYocywgIixkYXRhPSVzIiwgc3RhdGUpOwogCX0KKwlpZiAoYXJncy0+YXJfZGlzY2FyZCkKKwkJc2VxX3ByaW50ZihzLCAiLGRpc2NhcmQiKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5jIGIvZnMvZ2ZzMi9xdW90YS5jCmluZGV4IGIwOGQwOTYuLjhkNTNmNjYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuYworKysgYi9mcy9nZnMyL3F1b3RhLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIApAQCAtODAsNiArNzksNTEgQEAKIAl1MzIgcWNfaWQ7CiB9OwogCitzdGF0aWMgTElTVF9IRUFEKHFkX2xydV9saXN0KTsKK3N0YXRpYyBhdG9taWNfdCBxZF9scnVfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBzcGlubG9ja190IHFkX2xydV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCitpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CisJc3RydWN0IGdmczJfc2JkICpzZHA7CisKKwlpZiAobnIgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX0ZTKSkKKwkJcmV0dXJuIC0xOworCisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CisJd2hpbGUgKG5yICYmICFsaXN0X2VtcHR5KCZxZF9scnVfbGlzdCkpIHsKKwkJcWQgPSBsaXN0X2VudHJ5KHFkX2xydV9saXN0Lm5leHQsCisJCQkJc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfcmVjbGFpbSk7CisJCXNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOworCisJCS8qIEZyZWUgZnJvbSB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBsaXN0ICovCisJCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7CisKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKKworCQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOworCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKKworCQkvKiBEZWxldGUgaXQgZnJvbSB0aGUgY29tbW9uIHJlY2xhaW0gbGlzdCAqLworCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CisJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CisJCW5yLS07CisJfQorCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CisKK291dDoKKwlyZXR1cm4gKGF0b21pY19yZWFkKCZxZF9scnVfY291bnQpICogc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZSkgLyAxMDA7Cit9CisKIHN0YXRpYyB1NjQgcWQyb2Zmc2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewogCXU2NCBvZmZzZXQ7CkBAIC0xMDAsMjIgKzE0NCwxOCBAQAogCWlmICghcWQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcWQtPnFkX2NvdW50ID0gMTsKKwlhdG9taWNfc2V0KCZxZC0+cWRfY291bnQsIDEpOwogCXFkLT5xZF9pZCA9IGlkOwogCWlmICh1c2VyKQogCQlzZXRfYml0KFFERl9VU0VSLCAmcWQtPnFkX2ZsYWdzKTsKIAlxZC0+cWRfc2xvdCA9IC0xOworCUlOSVRfTElTVF9IRUFEKCZxZC0+cWRfcmVjbGFpbSk7CiAKIAllcnJvciA9IGdmczJfZ2xvY2tfZ2V0KHNkcCwgMiAqICh1NjQpaWQgKyAhdXNlciwKIAkJCSAgICAgICZnZnMyX3F1b3RhX2dsb3BzLCBDUkVBVEUsICZxZC0+cWRfZ2wpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCi0JZXJyb3IgPSBnZnMyX2x2Yl9ob2xkKHFkLT5xZF9nbCk7Ci0JZ2ZzMl9nbG9ja19wdXQocWQtPnFkX2dsKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKLQogCSpxZHAgPSBxZDsKIAogCXJldHVybiAwOwpAQCAtMTM1LDExICsxNzUsMTcgQEAKIAogCWZvciAoOzspIHsKIAkJZm91bmQgPSAwOwotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHFkLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7CiAJCQlpZiAocWQtPnFkX2lkID09IGlkICYmCiAJCQkgICAgIXRlc3RfYml0KFFERl9VU0VSLCAmcWQtPnFkX2ZsYWdzKSA9PSAhdXNlcikgewotCQkJCXFkLT5xZF9jb3VudCsrOworCQkJCWlmICghYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkgJiYKKwkJCQkgICAgIWxpc3RfZW1wdHkoJnFkLT5xZF9yZWNsYWltKSkgeworCQkJCQkvKiBSZW1vdmUgaXQgZnJvbSByZWNsYWltIGxpc3QgKi8KKwkJCQkJbGlzdF9kZWxfaW5pdCgmcWQtPnFkX3JlY2xhaW0pOworCQkJCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQkJCX0KKwkJCQlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCQkJCWZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE1NSwxMSArMjAxLDExIEBACiAJCQluZXdfcWQgPSBOVUxMOwogCQl9CiAKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAkJaWYgKHFkIHx8ICFjcmVhdGUpIHsKIAkJCWlmIChuZXdfcWQpIHsKLQkJCQlnZnMyX2x2Yl91bmhvbGQobmV3X3FkLT5xZF9nbCk7CisJCQkJZ2ZzMl9nbG9ja19wdXQobmV3X3FkLT5xZF9nbCk7CiAJCQkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgbmV3X3FkKTsKIAkJCX0KIAkJCSpxZHAgPSBxZDsKQEAgLTE3NSwyMSArMjIxLDE4IEBACiBzdGF0aWMgdm9pZCBxZF9ob2xkKHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfY291bnQpOwotCXFkLT5xZF9jb3VudCsrOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCWdmczJfYXNzZXJ0KHNkcCwgYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpOworCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiB9CiAKIHN0YXRpYyB2b2lkIHFkX3B1dChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9jb3VudCk7Ci0JaWYgKCEtLXFkLT5xZF9jb3VudCkKLQkJcWQtPnFkX2xhc3RfdG91Y2hlZCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnFkLT5xZF9jb3VudCwgJnFkX2xydV9sb2NrKSkgeworCQkvKiBBZGQgdG8gdGhlIHJlY2xhaW0gbGlzdCAqLworCQlsaXN0X2FkZF90YWlsKCZxZC0+cWRfcmVjbGFpbSwgJnFkX2xydV9saXN0KTsKKwkJYXRvbWljX2luYygmcWRfbHJ1X2NvdW50KTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2xvdF9nZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCkBAIC0xOTgsMTAgKzI0MSwxMCBAQAogCXVuc2lnbmVkIGludCBjLCBvID0gMCwgYjsKIAl1bnNpZ25lZCBjaGFyIGJ5dGUgPSAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHFkLT5xZF9zbG90X2NvdW50KyspIHsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjI1LDEzICsyNjgsMTMgQEAKIAogCXNkcC0+c2RfcXVvdGFfYml0bWFwW2NdW29dIHw9IDEgPDwgYjsKIAotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbDoKIAlxZC0+cWRfc2xvdF9jb3VudC0tOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKQEAgLTIzOSwyMyArMjgyLDIzIEBACiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlxZC0+cWRfc2xvdF9jb3VudCsrOwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHNsb3RfcHV0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJZ2ZzMl9hc3NlcnQoc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJaWYgKCEtLXFkLT5xZF9zbG90X2NvdW50KSB7CiAJCWdmczJfaWNiaXRfbXVuZ2Uoc2RwLCBzZHAtPnNkX3F1b3RhX2JpdG1hcCwgcWQtPnFkX3Nsb3QsIDApOwogCQlxZC0+cWRfc2xvdCA9IC0xOwogCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogfQogCiBzdGF0aWMgaW50IGJoX2dldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKQEAgLTMzMCw3ICszNzMsNyBAQAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHFkLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7CiAJCWlmICh0ZXN0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKSB8fApAQCAtMzQxLDggKzM4NCw4IEBACiAJCWxpc3RfbW92ZV90YWlsKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAKIAkJc2V0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jb3VudCk7Ci0JCXFkLT5xZF9jb3VudCsrOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkpOworCQlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCQlxZC0+cWRfY2hhbmdlX3N5bmMgPSBxZC0+cWRfY2hhbmdlOwogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCQlxZC0+cWRfc2xvdF9jb3VudCsrOwpAQCAtMzU0LDcgKzM5Nyw3IEBACiAJaWYgKCFmb3VuZCkKIAkJcWQgPSBOVUxMOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmIChxZCkgewogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NoYW5nZV9zeW5jKTsKQEAgLTM3OSwyNCArNDIyLDI0IEBACiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChRREZfTE9DS0VELCAmcWQtPnFkX2ZsYWdzKSB8fAogCSAgICAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpIHsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAogCWxpc3RfbW92ZV90YWlsKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAKIAlzZXRfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpOwotCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY291bnQpOwotCXFkLT5xZF9jb3VudCsrOworCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIAlxZC0+cWRfY2hhbmdlX3N5bmMgPSBxZC0+cWRfY2hhbmdlOwogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJcWQtPnFkX3Nsb3RfY291bnQrKzsKIAotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NoYW5nZV9zeW5jKTsKIAlpZiAoYmhfZ2V0KHFkKSkgewpAQCAtNTU2LDkgKzU5OSw5IEBACiAJeCA9IGJlNjRfdG9fY3B1KHFjLT5xY19jaGFuZ2UpICsgY2hhbmdlOwogCXFjLT5xY19jaGFuZ2UgPSBjcHVfdG9fYmU2NCh4KTsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlxZC0+cWRfY2hhbmdlID0geDsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKCF4KSB7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCB0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSk7CkBAIC04MDIsOCArODQ1LDggQEAKIAkJbG9mZl90IHBvczsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQocV9naCk7CiAJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHFkLT5xZF9nbCwKLQkJCQkJICBMTV9TVF9FWENMVVNJVkUsIEdMX05PQ0FDSEUsCi0JCQkJCSAgcV9naCk7CisJCQkJCSAgIExNX1NUX0VYQ0xVU0lWRSwgR0xfTk9DQUNIRSwKKwkJCQkJICAgcV9naCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIApAQCAtODIwLDcgKzg2Myw2IEBACiAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwogCi0KIAkJZ2ZzMl9xdW90YV9pbigmcSwgYnVmKTsKIAkJcWx2YiA9IChzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgKilxZC0+cWRfZ2wtPmdsX2x2YjsKIAkJcWx2Yi0+cWJfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKQEAgLTg5MCw5ICs5MzIsOSBAQAogCWlmICghcWQtPnFkX3FiLnFiX2xpbWl0KQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAl2YWx1ZSA9IHFkLT5xZF9jaGFuZ2U7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCXNwaW5fbG9jaygmZ3QtPmd0X3NwaW4pOwogCW51bSA9IGd0LT5ndF9xdW90YV9zY2FsZV9udW07CkBAIC05ODUsOSArMTAyNyw5IEBACiAJCQljb250aW51ZTsKIAogCQl2YWx1ZSA9IChzNjQpYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX3ZhbHVlKTsKLQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJdmFsdWUgKz0gcWQtPnFkX2NoYW5nZTsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAkJaWYgKGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkgJiYgKHM2NCliZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfbGltaXQpIDwgdmFsdWUpIHsKIAkJCXByaW50X21lc3NhZ2UocWQsICJleGNlZWRlZCIpOwpAQCAtMTE3MSwxMyArMTIxMywxMiBAQAogCQkJcWQtPnFkX2NoYW5nZSA9IHFjLnFjX2NoYW5nZTsKIAkJCXFkLT5xZF9zbG90ID0gc2xvdDsKIAkJCXFkLT5xZF9zbG90X2NvdW50ID0gMTsKLQkJCXFkLT5xZF9sYXN0X3RvdWNoZWQgPSBqaWZmaWVzOwogCi0JCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJCWdmczJfaWNiaXRfbXVuZ2Uoc2RwLCBzZHAtPnNkX3F1b3RhX2JpdG1hcCwgc2xvdCwgMSk7CiAJCQlsaXN0X2FkZCgmcWQtPnFkX2xpc3QsICZzZHAtPnNkX3F1b3RhX2xpc3QpOwogCQkJYXRvbWljX2luYygmc2RwLT5zZF9xdW90YV9jb3VudCk7Ci0JCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAkJCWZvdW5kKys7CiAJCX0KQEAgLTExOTcsNzMgKzEyMzgsNDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfcXVvdGFfc2NhbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCwgKnNhZmU7Ci0JTElTVF9IRUFEKGRlYWQpOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxZCwgc2FmZSwgJnNkcC0+c2RfcXVvdGFfbGlzdCwgcWRfbGlzdCkgewotCQlpZiAoIXFkLT5xZF9jb3VudCAmJgotCQkgICAgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBxZC0+cWRfbGFzdF90b3VjaGVkICsKLQkJCSAgICAgICAgZ2ZzMl90dW5lX2dldChzZHAsIGd0X3F1b3RhX2NhY2hlX3NlY3MpICogSFopKSB7Ci0JCQlsaXN0X21vdmUoJnFkLT5xZF9saXN0LCAmZGVhZCk7Ci0JCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwKLQkJCQkJIGF0b21pY19yZWFkKCZzZHAtPnNkX3F1b3RhX2NvdW50KSA+IDApOwotCQkJYXRvbWljX2RlYygmc2RwLT5zZF9xdW90YV9jb3VudCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRlYWQpKSB7Ci0JCXFkID0gbGlzdF9lbnRyeShkZWFkLm5leHQsIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEsIHFkX2xpc3QpOwotCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOwotCi0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2NoYW5nZSk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX3Nsb3RfY291bnQpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7Ci0KLQkJZ2ZzMl9sdmJfdW5ob2xkKHFkLT5xZF9nbCk7Ci0JCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKLQl9Ci19Ci0KIHZvaWQgZ2ZzMl9xdW90YV9jbGVhbnVwKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmc2RwLT5zZF9xdW90YV9saXN0OwogCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkOwogCXVuc2lnbmVkIGludCB4OwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQlxZCA9IGxpc3RfZW50cnkoaGVhZC0+cHJldiwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfbGlzdCk7CiAKLQkJaWYgKHFkLT5xZF9jb3VudCA+IDEgfHwKLQkJICAgIChxZC0+cWRfY291bnQgJiYgIXRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKSkgeworCQlpZiAoYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkgPiAxIHx8CisJCSAgICAoYXRvbWljX3JlYWQoJnFkLT5xZF9jb3VudCkgJiYKKwkJICAgICAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpKSB7CiAJCQlsaXN0X21vdmUoJnFkLT5xZF9saXN0LCBoZWFkKTsKLQkJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJCXNjaGVkdWxlKCk7Ci0JCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKKwkJLyogQWxzbyByZW1vdmUgaWYgdGhpcyBxZCBleGlzdHMgaW4gdGhlIHJlY2xhaW0gbGlzdCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJnFkLT5xZF9yZWNsYWltKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmcWQtPnFkX3JlY2xhaW0pOworCQkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJfQogCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKLQkJaWYgKCFxZC0+cWRfY291bnQpIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSkgewogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKIAkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX3Nsb3RfY291bnQpOwogCQl9IGVsc2UKIAkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCA9PSAxKTsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOwogCi0JCWdmczJfbHZiX3VuaG9sZChxZC0+cWRfZ2wpOworCQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOwogCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBxZCk7CiAKLQkJc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhYXRvbWljX3JlYWQoJnNkcC0+c2RfcXVvdGFfY291bnQpKTsKIApAQCAtMTM0MSw5ICsxMzU3LDYgQEAKIAkJcXVvdGFkX2NoZWNrX3RpbWVvKHNkcCwgInN5bmMiLCBnZnMyX3F1b3RhX3N5bmMsIHQsCiAJCQkJICAgJnF1b3RhZF90aW1lbywgJnR1bmUtPmd0X3F1b3RhX3F1YW50dW0pOwogCi0JCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB0dXJuZWQgaW50byBhIHNocmlua2VyICovCi0JCWdmczJfcXVvdGFfc2NhbihzZHApOwotCiAJCS8qIENoZWNrIGZvciAmIHJlY292ZXIgcGFydGlhbGx5IHRydW5jYXRlZCBpbm9kZXMgKi8KIAkJcXVvdGFkX2NoZWNrX3RydW5jX2xpc3Qoc2RwKTsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5oIGIvZnMvZ2ZzMi9xdW90YS5oCmluZGV4IGNlYzkwMzIuLjBmYTVmYTYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuaAorKysgYi9mcy9nZnMyL3F1b3RhLmgKQEAgLTQ5LDQgKzQ5LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitleHRlcm4gaW50IGdmczJfc2hyaW5rX3FkX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKTsKKwogI2VuZGlmIC8qIF9fUVVPVEFfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZWNvdmVyeS5jIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCmluZGV4IGVmZDA5YzMuLjI0N2U4ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmVjb3ZlcnkuYworKysgYi9mcy9nZnMyL3JlY292ZXJ5LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCkBAIC00MjcsMjAgKzQyNiwyMyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGdmczJfbG1fcmVjb3ZlcnlfZG9uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCwKLQkJCQkgIHVuc2lnbmVkIGludCBtZXNzYWdlKQorc3RhdGljIHZvaWQgZ2ZzMl9yZWNvdmVyeV9kb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZXNzYWdlKQogewotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcmVjb3ZlcnlfZG9uZSkKLQkJcmV0dXJuOwotCi0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9yZWNvdmVyeV9kb25lKAotCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgamlkLCBtZXNzYWdlKTsKKwljaGFyIGVudl9qaWRbMjBdOworCWNoYXIgZW52X3N0YXR1c1syMF07CisJY2hhciAqZW52cFtdID0geyBlbnZfamlkLCBlbnZfc3RhdHVzLCBOVUxMIH07CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKyAgICAgICAgbHMtPmxzX3JlY292ZXJfamlkX2RvbmUgPSBqaWQ7CisgICAgICAgIGxzLT5sc19yZWNvdmVyX2ppZF9zdGF0dXMgPSBtZXNzYWdlOworCXNwcmludGYoZW52X2ppZCwgIkpJRD0lZCIsIGppZCk7CisJc3ByaW50ZihlbnZfc3RhdHVzLCAiUkVDT1ZFUlk9JXMiLAorCQltZXNzYWdlID09IExNX1JEX1NVQ0NFU1MgPyAiRG9uZSIgOiAiRmFpbGVkIik7CisgICAgICAgIGtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiB9CiAKLQogLyoqCi0gKiBnZnMyX3JlY292ZXJfam91cm5hbCAtIHJlY292ZXJ5IGEgZ2l2ZW4gam91cm5hbAorICogZ2ZzMl9yZWNvdmVyX2pvdXJuYWwgLSByZWNvdmVyIGEgZ2l2ZW4gam91cm5hbAogICogQGpkOiB0aGUgc3RydWN0IGdmczJfamRlc2MgZGVzY3JpYmluZyB0aGUgam91cm5hbAogICoKICAqIEFjcXVpcmUgdGhlIGpvdXJuYWwncyBsb2NrLCBjaGVjayB0byBzZWUgaWYgdGhlIGpvdXJuYWwgaXMgY2xlYW4sIGFuZApAQCAtNTYxLDcgKzU2Myw3IEBACiAJaWYgKGpkLT5qZF9qaWQgIT0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCkKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmppX2doKTsKIAotCWdmczJfbG1fcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX1NVQ0NFU1MpOworCWdmczJfcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX1NVQ0NFU1MpOwogCiAJaWYgKGpkLT5qZF9qaWQgIT0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ppZCkKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmpfZ2gpOwpAQCAtNTgxLDcgKzU4Myw3IEBACiAJZnNfaW5mbyhzZHAsICJqaWQ9JXU6ICVzXG4iLCBqZC0+amRfamlkLCAoZXJyb3IpID8gIkZhaWxlZCIgOiAiRG9uZSIpOwogCiBmYWlsOgotCWdmczJfbG1fcmVjb3ZlcnlfZG9uZShzZHAsIGpkLT5qZF9qaWQsIExNX1JEX0dBVkVVUCk7CisJZ2ZzMl9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfR0FWRVVQKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggOGIwMWM2My4uZjAzZDAyNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMTMyLDgxICsxMzIsOTAgQEAKIH0KIAogLyoqCisgKiBnZnMyX2JpdF9zZWFyY2gKKyAqIEBwdHI6IFBvaW50ZXIgdG8gYml0bWFwIGRhdGEKKyAqIEBtYXNrOiBNYXNrIHRvIHVzZSAobm9ybWFsbHkgMHg1NTU1NS4uLi4gYnV0IGFkanVzdGVkIGZvciBzZWFyY2ggc3RhcnQpCisgKiBAc3RhdGU6IFRoZSBzdGF0ZSB3ZSBhcmUgc2VhcmNoaW5nIGZvcgorICoKKyAqIFdlIHhvciB0aGUgYml0bWFwIGRhdGEgd2l0aCBhIHBhdHRlciB3aGljaCBpcyB0aGUgYml0d2lzZSBvcHBvc2l0ZQorICogb2Ygd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IsIHRoaXMgZ2l2ZXMgcmlzZSB0byBhIHBhdHRlcm4gb2Ygb25lcworICogd2hlcmV2ZXIgdGhlcmUgaXMgYSBtYXRjaC4gU2luY2Ugd2UgaGF2ZSB0d28gYml0cyBwZXIgZW50cnksIHdlCisgKiB0YWtlIHRoaXMgcGF0dGVybiwgc2hpZnQgaXQgZG93biBieSBvbmUgcGxhY2UgYW5kIHRoZW4gYW5kIGl0IHdpdGgKKyAqIHRoZSBvcmlnaW5hbC4gQWxsIHRoZSBldmVuIGJpdCBwb3NpdGlvbnMgKDAsMiw0LCBldGMpIHRoZW4gcmVwcmVzZW50CisgKiBzdWNjZXNzZnVsIG1hdGNoZXMsIHNvIHdlIG1hc2sgd2l0aCAweDU1NTU1Li4uLi4gdG8gcmVtb3ZlIHRoZSB1bndhbnRlZAorICogb2RkIGJpdCBwb3NpdGlvbnMuCisgKgorICogVGhpcyBhbGxvd3Mgc2VhcmNoaW5nIG9mIGEgd2hvbGUgdTY0IGF0IG9uY2UgKDMyIGJsb2Nrcykgd2l0aCBhCisgKiBzaW5nbGUgdGVzdCAob24gNjQgYml0IGFyY2hlcykuCisgKi8KKworc3RhdGljIGlubGluZSB1NjQgZ2ZzMl9iaXRfc2VhcmNoKGNvbnN0IF9fbGU2NCAqcHRyLCB1NjQgbWFzaywgdTggc3RhdGUpCit7CisJdTY0IHRtcDsKKwlzdGF0aWMgY29uc3QgdTY0IHNlYXJjaFtdID0geworCQlbMF0gPSAweGZmZmZmZmZmZmZmZmZmZmZVTEwsCisJCVsxXSA9IDB4YWFhYWFhYWFhYWFhYWFhYVVMTCwKKwkJWzJdID0gMHg1NTU1NTU1NTU1NTU1NTU1VUxMLAorCQlbM10gPSAweDAwMDAwMDAwMDAwMDAwMDBVTEwsCisJfTsKKwl0bXAgPSBsZTY0X3RvX2NwdSgqcHRyKSBeIHNlYXJjaFtzdGF0ZV07CisJdG1wICY9ICh0bXAgPj4gMSk7CisJdG1wICY9IG1hc2s7CisJcmV0dXJuIHRtcDsKK30KKworLyoqCiAgKiBnZnMyX2JpdGZpdCAtIFNlYXJjaCBhbiByZ3JwJ3MgYml0bWFwIGJ1ZmZlciB0byBmaW5kIGEgYml0LXBhaXIgcmVwcmVzZW50aW5nCiAgKiAgICAgICBhIGJsb2NrIGluIGEgZ2l2ZW4gYWxsb2NhdGlvbiBzdGF0ZS4KICAqIEBidWZmZXI6IHRoZSBidWZmZXIgdGhhdCBob2xkcyB0aGUgYml0bWFwcwotICogQGJ1ZmxlbjogdGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBidWZmZXIKKyAqIEBsZW46IHRoZSBsZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgYnVmZmVyCiAgKiBAZ29hbDogc3RhcnQgc2VhcmNoIGF0IHRoaXMgYmxvY2sncyBiaXQtcGFpciAod2l0aGluIEBidWZmZXIpCi0gKiBAb2xkX3N0YXRlOiBHRlMyX0JMS1NUX1hYWCB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIHdlJ3JlIGxvb2tpbmcgZm9yLgorICogQHN0YXRlOiBHRlMyX0JMS1NUX1hYWCB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIHdlJ3JlIGxvb2tpbmcgZm9yLgogICoKICAqIFNjb3BlIG9mIEBnb2FsIGFuZCByZXR1cm5lZCBibG9jayBudW1iZXIgaXMgb25seSB3aXRoaW4gdGhpcyBiaXRtYXAgYnVmZmVyLAogICogbm90IGVudGlyZSByZ3JwIG9yIGZpbGVzeXN0ZW0uICBAYnVmZmVyIHdpbGwgYmUgb2Zmc2V0IGZyb20gdGhlIGFjdHVhbAotICogYmVnaW5uaW5nIG9mIGEgYml0bWFwIGJsb2NrIGJ1ZmZlciwgc2tpcHBpbmcgYW55IGhlYWRlciBzdHJ1Y3R1cmVzLgorICogYmVnaW5uaW5nIG9mIGEgYml0bWFwIGJsb2NrIGJ1ZmZlciwgc2tpcHBpbmcgYW55IGhlYWRlciBzdHJ1Y3R1cmVzLCBidXQKKyAqIGhlYWRlcnMgYXJlIGFsd2F5cyBhIG11bHRpcGxlIG9mIDY0IGJpdHMgbG9uZyBzbyB0aGF0IHRoZSBidWZmZXIgaXMKKyAqIGFsd2F5cyBhbGlnbmVkIHRvIGEgNjQgYml0IGJvdW5kYXJ5LgorICoKKyAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgaW4gYnl0ZXMsIGJ1dCBpcyBpdCBhc3N1bWVkIHRoYXQgaXQgaXMKKyAqIGFsd2F5cyBvayB0byB0byByZWFkIGEgY29tcGxldGUgbXVsdGlwbGUgb2YgNjQgYml0cyBhdCB0aGUgZW5kCisgKiBvZiB0aGUgYmxvY2sgaW4gY2FzZSB0aGUgZW5kIGlzIG5vIGFsaWduZWQgdG8gYSBuYXR1cmFsIGJvdW5kYXJ5LgogICoKICAqIFJldHVybjogdGhlIGJsb2NrIG51bWJlciAoYml0bWFwIGJ1ZmZlciBzY29wZSkgdGhhdCB3YXMgZm91bmQKICAqLwogCi1zdGF0aWMgdTMyIGdmczJfYml0Zml0KGNvbnN0IHU4ICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHUzMiBnb2FsLAotCQkgICAgICAgdTggb2xkX3N0YXRlKQorc3RhdGljIHUzMiBnZnMyX2JpdGZpdChjb25zdCB1OCAqYnVmLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgICAgICAgdTMyIGdvYWwsIHU4IHN0YXRlKQogewotCWNvbnN0IHU4ICpieXRlLCAqc3RhcnQsICplbmQ7Ci0JaW50IGJpdCwgc3RhcnRiaXQ7Ci0JdTMyIGcxLCBnMiwgbWlzYWxpZ25lZDsKLQl1bnNpZ25lZCBsb25nICpwbG9uZzsKLQl1bnNpZ25lZCBsb25nIGxza2lwdmFsOworCXUzMiBzcG9pbnQgPSAoZ29hbCA8PCAxKSAmICgoOCpzaXplb2YodTY0KSkgLSAxKTsKKwljb25zdCBfX2xlNjQgKnB0ciA9ICgoX19sZTY0ICopYnVmKSArIChnb2FsID4+IDUpOworCWNvbnN0IF9fbGU2NCAqZW5kID0gKF9fbGU2NCAqKShidWYgKyBBTElHTihsZW4sIHNpemVvZih1NjQpKSk7CisJdTY0IHRtcDsKKwl1NjQgbWFzayA9IDB4NTU1NTU1NTU1NTU1NTU1NVVMTDsKKwl1MzIgYml0OwogCi0JbHNraXB2YWwgPSAob2xkX3N0YXRlICYgR0ZTMl9CTEtTVF9VU0VEKSA/IExCSVRTS0lQMDAgOiBMQklUU0tJUDU1OwotCWcxID0gKGdvYWwgLyBHRlMyX05CQlkpOwotCXN0YXJ0ID0gYnVmZmVyICsgZzE7Ci0JYnl0ZSA9IHN0YXJ0OwotICAgICAgICBlbmQgPSBidWZmZXIgKyBidWZsZW47Ci0JZzIgPSBBTElHTihnMSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQlwbG9uZyA9ICh1bnNpZ25lZCBsb25nICopKGJ1ZmZlciArIGcyKTsKLQlzdGFydGJpdCA9IGJpdCA9IChnb2FsICUgR0ZTMl9OQkJZKSAqIEdGUzJfQklUX1NJWkU7Ci0JbWlzYWxpZ25lZCA9IGcyIC0gZzE7Ci0JaWYgKCFtaXNhbGlnbmVkKQotCQlnb3RvIHVsb25nX2FsaWduZWQ7Ci0vKiBwYXJzZSB0aGUgYml0bWFwIGEgYnl0ZSBhdCBhIHRpbWUgKi8KLW1pc2FsaWduZWQ6Ci0Jd2hpbGUgKGJ5dGUgPCBlbmQpIHsKLQkJaWYgKCgoKmJ5dGUgPj4gYml0KSAmIEdGUzJfQklUX01BU0spID09IG9sZF9zdGF0ZSkgewotCQkJcmV0dXJuIGdvYWwgKwotCQkJCSgoKGJ5dGUgLSBzdGFydCkgKiBHRlMyX05CQlkpICsKLQkJCQkgKChiaXQgLSBzdGFydGJpdCkgPj4gMSkpOwotCQl9Ci0JCWJpdCArPSBHRlMyX0JJVF9TSVpFOwotCQlpZiAoYml0ID49IEdGUzJfTkJCWSAqIEdGUzJfQklUX1NJWkUpIHsKLQkJCWJpdCA9IDA7Ci0JCQlieXRlKys7Ci0JCQltaXNhbGlnbmVkLS07Ci0JCQlpZiAoIW1pc2FsaWduZWQpIHsKLQkJCQlwbG9uZyA9ICh1bnNpZ25lZCBsb25nICopYnl0ZTsKLQkJCQlnb3RvIHVsb25nX2FsaWduZWQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIEJGSVROT0VOVDsKKwlCVUdfT04oc3RhdGUgPiAzKTsKIAotLyogcGFyc2UgdGhlIGJpdG1hcCBhIHVuc2lnbmVkIGxvbmcgYXQgYSB0aW1lICovCi11bG9uZ19hbGlnbmVkOgotCS8qIFN0b3AgYXQgImVuZCAtIDEiIG9yIGVsc2UgcHJlZmV0Y2ggY2FuIGdvIHBhc3QgdGhlIGVuZCBhbmQgc2VnZmF1bHQuCi0JICAgV2UgY291bGQgImlmIiBpdCBidXQgd2UnZCBsb3NlIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlIGdhaW5lZC4KLQkgICBUaGlzIHdheSB3aWxsIG9ubHkgc2xvdyBkb3duIHNlYXJjaGluZyB0aGUgdmVyeSBsYXN0IDQvOCBieXRlcwotCSAgIGRlcGVuZGluZyBvbiBhcmNoaXRlY3R1cmUuICBJJ3ZlIGV4cGVyaW1lbnRlZCB3aXRoIHNldmVyYWwgd2F5cwotCSAgIG9mIHdyaXRpbmcgdGhpcyBzZWN0aW9uIHN1Y2ggYXMgdXNpbmcgYW4gZWxzZSBiZWZvcmUgdGhlIGdvdG8KLQkgICBidXQgdGhpcyBvbmUgc2VlbXMgdG8gYmUgdGhlIGZhc3Rlc3QuICovCi0Jd2hpbGUgKCh1bnNpZ25lZCBjaGFyICopcGxvbmcgPCBlbmQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLQkJcHJlZmV0Y2gocGxvbmcgKyAxKTsKLQkJaWYgKCgoKnBsb25nKSAmIExCSVRNQVNLKSAhPSBsc2tpcHZhbCkKLQkJCWJyZWFrOwotCQlwbG9uZysrOworCS8qIE1hc2sgb2ZmIGJpdHMgd2UgZG9uJ3QgY2FyZSBhYm91dCBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlYXJjaCAqLworCW1hc2sgPDw9IHNwb2ludDsKKwl0bXAgPSBnZnMyX2JpdF9zZWFyY2gocHRyLCBtYXNrLCBzdGF0ZSk7CisJcHRyKys7CisJd2hpbGUodG1wID09IDAgJiYgcHRyIDwgZW5kKSB7CisJCXRtcCA9IGdmczJfYml0X3NlYXJjaChwdHIsIDB4NTU1NTU1NTU1NTU1NTU1NVVMTCwgc3RhdGUpOworCQlwdHIrKzsKIAl9Ci0JaWYgKCh1bnNpZ25lZCBjaGFyICopcGxvbmcgPCBlbmQpIHsKLQkJYnl0ZSA9IChjb25zdCB1OCAqKXBsb25nOwotCQltaXNhbGlnbmVkICs9IHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDE7Ci0JCWdvdG8gbWlzYWxpZ25lZDsKLQl9Ci0JcmV0dXJuIEJGSVROT0VOVDsKKwkvKiBNYXNrIG9mZiBhbnkgYml0cyB3aGljaCBhcmUgbW9yZSB0aGFuIGxlbiBieXRlcyBmcm9tIHRoZSBzdGFydCAqLworCWlmIChwdHIgPT0gZW5kICYmIChsZW4gJiAoc2l6ZW9mKHU2NCkgLSAxKSkpCisJCXRtcCAmPSAoKCh1NjQpfjApID4+ICg2NCAtIDgqKGxlbiAmIChzaXplb2YodTY0KSAtIDEpKSkpOworCS8qIERpZG4ndCBmaW5kIGFueXRoaW5nLCBzbyByZXR1cm4gKi8KKwlpZiAodG1wID09IDApCisJCXJldHVybiBCRklUTk9FTlQ7CisJcHRyLS07CisJYml0ID0gZmxzNjQodG1wKTsKKwliaXQtLTsJCS8qIGZsczY0IGFsd2F5cyBhZGRzIG9uZSB0byB0aGUgYml0IGNvdW50ICovCisJYml0IC89IDI7CS8qIHR3byBiaXRzIHBlciBlbnRyeSBpbiB0aGUgYml0bWFwICovCisJcmV0dXJuICgoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwdHIgLSBidWYpICogR0ZTMl9OQkJZKSArIGJpdDsKIH0KIAogLyoqCkBAIC04MzEsNiArODQwLDU4IEBACiAJc3Bpbl91bmxvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwogfQogCitzdGF0aWMgdm9pZCBnZnMyX3JncnBfc2VuZF9kaXNjYXJkcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG9mZnNldCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGdmczJfYml0bWFwICpiaSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHNiLT5zX2JkZXY7CisJY29uc3QgdW5zaWduZWQgaW50IHNlY3RzX3Blcl9ibGsgPSBzZHAtPnNkX3NiLnNiX2JzaXplIC8KKwkJCQkJICAgYmRldl9oYXJkc2VjdF9zaXplKHNiLT5zX2JkZXYpOworCXU2NCBibGs7CisJc2VjdG9yX3Qgc3RhcnQgPSAwOworCXNlY3Rvcl90IG5yX3NlY3RzID0gMDsKKwlpbnQgcnY7CisJdW5zaWduZWQgaW50IHg7CisKKwlmb3IgKHggPSAwOyB4IDwgYmktPmJpX2xlbjsgeCsrKSB7CisJCWNvbnN0IHU4ICpvcmlnID0gYmktPmJpX2JoLT5iX2RhdGEgKyBiaS0+Ymlfb2Zmc2V0ICsgeDsKKwkJY29uc3QgdTggKmNsb25lID0gYmktPmJpX2Nsb25lICsgYmktPmJpX29mZnNldCArIHg7CisJCXU4IGRpZmYgPSB+KCpvcmlnIHwgKCpvcmlnID4+IDEpKSAmICgqY2xvbmUgfCAoKmNsb25lID4+IDEpKTsKKwkJZGlmZiAmPSAweDU1OworCQlpZiAoZGlmZiA9PSAwKQorCQkJY29udGludWU7CisJCWJsayA9IG9mZnNldCArICgoYmktPmJpX3N0YXJ0ICsgeCkgKiBHRlMyX05CQlkpOworCQlibGsgKj0gc2VjdHNfcGVyX2JsazsgLyogY29udmVydCB0byBzZWN0b3JzICovCisJCXdoaWxlKGRpZmYpIHsKKwkJCWlmIChkaWZmICYgMSkgeworCQkJCWlmIChucl9zZWN0cyA9PSAwKQorCQkJCQlnb3RvIHN0YXJ0X25ld19leHRlbnQ7CisJCQkJaWYgKChzdGFydCArIG5yX3NlY3RzKSAhPSBibGspIHsKKwkJCQkJcnYgPSBibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCwKKwkJCQkJCQkgICAgbnJfc2VjdHMsIEdGUF9OT0ZTKTsKKwkJCQkJaWYgKHJ2KQorCQkJCQkJZ290byBmYWlsOworCQkJCQlucl9zZWN0cyA9IDA7CitzdGFydF9uZXdfZXh0ZW50OgorCQkJCQlzdGFydCA9IGJsazsKKwkJCQl9CisJCQkJbnJfc2VjdHMgKz0gc2VjdHNfcGVyX2JsazsKKwkJCX0KKwkJCWRpZmYgPj49IDI7CisJCQlibGsgKz0gc2VjdHNfcGVyX2JsazsKKwkJfQorCX0KKwlpZiAobnJfc2VjdHMpIHsKKwkJcnYgPSBibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCwgbnJfc2VjdHMsIEdGUF9OT0ZTKTsKKwkJaWYgKHJ2KQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm47CitmYWlsOgorCWZzX3dhcm4oc2RwLCAiZXJyb3IgJWQgb24gZGlzY2FyZCByZXF1ZXN0LCB0dXJuaW5nIGRpc2NhcmRzIG9mZiBmb3IgdGhpcyBmaWxlc3lzdGVtIiwgcnYpOworCXNkcC0+c2RfYXJncy5hcl9kaXNjYXJkID0gMDsKK30KKwogdm9pZCBnZnMyX3JncnBfcmVwb2xpc2hfY2xvbmVzKHN0cnVjdCBnZnMyX3JncnBkICpyZ2QpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSByZ2QtPnJkX3NiZDsKQEAgLTg0MSw2ICs5MDIsOCBAQAogCQlzdHJ1Y3QgZ2ZzMl9iaXRtYXAgKmJpID0gcmdkLT5yZF9iaXRzICsgeDsKIAkJaWYgKCFiaS0+YmlfY2xvbmUpCiAJCQljb250aW51ZTsKKwkJaWYgKHNkcC0+c2RfYXJncy5hcl9kaXNjYXJkKQorCQkJZ2ZzMl9yZ3JwX3NlbmRfZGlzY2FyZHMoc2RwLCByZ2QtPnJkX2RhdGEwLCBiaSk7CiAJCW1lbWNweShiaS0+YmlfY2xvbmUgKyBiaS0+Ymlfb2Zmc2V0LAogCQkgICAgICAgYmktPmJpX2JoLT5iX2RhdGEgKyBiaS0+Ymlfb2Zmc2V0LCBiaS0+YmlfbGVuKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggMTQxYjc4MS4uNjAxOTEzZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTMzOSw3ICszMzgsNiBAQAogCQkJCSAgICBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKnRfZ2gpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBnZnMyX2hvbGRlciBqaV9naDsKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQ7CiAJc3RydWN0IGxmY2MgKmxmY2M7CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMzg3LDcgKzM4NSw2IEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZsZmNjLT5naCk7CiAJCWtmcmVlKGxmY2MpOwogCX0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5oIGIvZnMvZ2ZzMi9zdXBlci5oCmluZGV4IGY2YjhiMDAuLmI1NjQxM2UgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuaAorKysgYi9mcy9nZnMyL3N1cGVyLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KICNpbmNsdWRlICJpbmNvcmUuaCIKIAotdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZzMl9qaW5kZXhfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKQEAgLTI3LDI3ICsyNywyOSBAQAogCiB2b2lkIGdmczJfamluZGV4X2ZyZWUoc3RydWN0IGdmczJfc2JkICpzZHApOwogCi1zdHJ1Y3QgZ2ZzMl9qZGVzYyAqZ2ZzMl9qZGVzY19maW5kKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKTsKLWludCBnZnMyX2pkZXNjX2NoZWNrKHN0cnVjdCBnZnMyX2pkZXNjICpqZCk7CitleHRlcm4gaW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYXJncyAqYXJncywgY2hhciAqZGF0YSk7CiAKLWludCBnZnMyX2xvb2t1cF9pbl9tYXN0ZXJfZGlyKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmaWxlbmFtZSwKLQkJCSAgICAgIHN0cnVjdCBnZnMyX2lub2RlICoqaXBwKTsKK2V4dGVybiBzdHJ1Y3QgZ2ZzMl9qZGVzYyAqZ2ZzMl9qZGVzY19maW5kKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKTsKK2V4dGVybiBpbnQgZ2ZzMl9qZGVzY19jaGVjayhzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQpOwogCi1pbnQgZ2ZzMl9tYWtlX2ZzX3J3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiBpbnQgZ2ZzMl9sb29rdXBfaW5fbWFzdGVyX2RpcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZmlsZW5hbWUsCisJCQkJICAgICBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqKmlwcCk7CiAKLWludCBnZnMyX3N0YXRmc19pbml0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLXZvaWQgZ2ZzMl9zdGF0ZnNfY2hhbmdlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLAotCQkJczY0IHRvdGFsLCBzNjQgZnJlZSwgczY0IGRpbm9kZXMpOwotaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX21ha2VfZnNfcncoc3RydWN0IGdmczJfc2JkICpzZHApOwogCi1pbnQgZ2ZzMl9mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOwotdm9pZCBnZnMyX3VuZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiBpbnQgZ2ZzMl9zdGF0ZnNfaW5pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX3N0YXRmc19jaGFuZ2Uoc3RydWN0IGdmczJfc2JkICpzZHAsIHM2NCB0b3RhbCwgczY0IGZyZWUsCisJCQkgICAgICAgczY0IGRpbm9kZXMpOworZXh0ZXJuIGludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKKworZXh0ZXJuIGludCBnZnMyX2ZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX3VuZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJfZnNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnZnMybWV0YV9mc190eXBlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBnZnMyX2V4cG9ydF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2ZzMl9zdXBlcl9vcHM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGdmczJfZG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZ2ZzMl9kb3BzOwogCiAjZW5kaWYgLyogX19TVVBFUl9ET1RfSF9fICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3lzLmMgYi9mcy9nZnMyL3N5cy5jCmluZGV4IDI2YzFmYTcuLjc2NTVmNTAyIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTE0LDkgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTI1LDYgKzI0LDcgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgInF1b3RhLmgiCiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImdsb3BzLmgiCiAKIHN0YXRpYyBzc2l6ZV90IGlkX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKIHsKQEAgLTM3LDYgKzM3LDMwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHNkcC0+c2RfZnNuYW1lKTsKIH0KIAorc3RhdGljIGludCBnZnMyX3V1aWRfdmFsaWQoY29uc3QgdTggKnV1aWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAodXVpZFtpXSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdXVpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisJYnVmWzBdID0gJ1wwJzsKKwlpZiAoIWdmczJfdXVpZF92YWxpZCh1dWlkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyWCUwMlglMDJYJTAyWC0lMDJYJTAyWC0iCisJCQkiJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYXG4iLAorCQkJdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVpZFs0XSwgdXVpZFs1XSwKKwkJCXV1aWRbNl0sIHV1aWRbN10sIHV1aWRbOF0sIHV1aWRbOV0sIHV1aWRbMTBdLCB1dWlkWzExXSwKKwkJCXV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1aWRbMTVdKTsKK30KKwogc3RhdGljIHNzaXplX3QgZnJlZXplX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CkBAIC0xNDgsNiArMTcyLDQ2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHNzaXplX3QgZGVtb3RlX3JxX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsOworCWNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzOworCXVuc2lnbmVkIGludCBnbG1vZGU7CisJdW5zaWduZWQgaW50IGdsdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZ2xudW07CisJY2hhciBtb2RlWzE2XTsKKwlpbnQgcnY7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRUFDQ0VTOworCisJcnYgPSBzc2NhbmYoYnVmLCAiJXU6JWxsdSAlMTVzIiwgJmdsdHlwZSwgJmdsbnVtLAorCQkgICAgbW9kZSk7CisJaWYgKHJ2ICE9IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcChtb2RlLCAiRVgiKSA9PSAwKQorCQlnbG1vZGUgPSBMTV9TVF9VTkxPQ0tFRDsKKwllbHNlIGlmICgoc3RyY21wKG1vZGUsICJDVyIpID09IDApIHx8IChzdHJjbXAobW9kZSwgIkRGIikgPT0gMCkpCisJCWdsbW9kZSA9IExNX1NUX0RFRkVSUkVEOworCWVsc2UgaWYgKChzdHJjbXAobW9kZSwgIlBSIikgPT0gMCkgfHwgKHN0cmNtcChtb2RlLCAiU0giKSA9PSAwKSkKKwkJZ2xtb2RlID0gTE1fU1RfU0hBUkVEOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZ2x0eXBlID4gTE1fVFlQRV9KT1VSTkFMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlnbG9wcyA9IGdmczJfZ2xvcHNfbGlzdFtnbHR5cGVdOworCWlmIChnbG9wcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlydiA9IGdmczJfZ2xvY2tfZ2V0KHNkcCwgZ2xudW0sIGdsb3BzLCAwLCAmZ2wpOworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCWdmczJfZ2xvY2tfY2IoZ2wsIGdsbW9kZSk7CisJZ2ZzMl9nbG9ja19wdXQoZ2wpOworCXJldHVybiBsZW47Cit9CisKIHN0cnVjdCBnZnMyX2F0dHIgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKIAlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdmczJfc2JkICosIGNoYXIgKik7CkBAIC0xNTksMjIgKzIyMywyNiBAQAogCiBHRlMyX0FUVFIoaWQsICAgICAgICAgICAgICAgICAgMDQ0NCwgaWRfc2hvdywgICAgICAgTlVMTCk7CiBHRlMyX0FUVFIoZnNuYW1lLCAgICAgICAgICAgICAgMDQ0NCwgZnNuYW1lX3Nob3csICAgTlVMTCk7CitHRlMyX0FUVFIodXVpZCwgICAgICAgICAgICAgICAgMDQ0NCwgdXVpZF9zaG93LCAgICAgTlVMTCk7CiBHRlMyX0FUVFIoZnJlZXplLCAgICAgICAgICAgICAgMDY0NCwgZnJlZXplX3Nob3csICAgZnJlZXplX3N0b3JlKTsKIEdGUzJfQVRUUih3aXRoZHJhdywgICAgICAgICAgICAwNjQ0LCB3aXRoZHJhd19zaG93LCB3aXRoZHJhd19zdG9yZSk7CiBHRlMyX0FUVFIoc3RhdGZzX3N5bmMsICAgICAgICAgMDIwMCwgTlVMTCwgICAgICAgICAgc3RhdGZzX3N5bmNfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3N5bmMsICAgICAgICAgIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3N5bmNfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3JlZnJlc2hfdXNlciwgIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3JlZnJlc2hfdXNlcl9zdG9yZSk7CiBHRlMyX0FUVFIocXVvdGFfcmVmcmVzaF9ncm91cCwgMDIwMCwgTlVMTCwgICAgICAgICAgcXVvdGFfcmVmcmVzaF9ncm91cF9zdG9yZSk7CitHRlMyX0FUVFIoZGVtb3RlX3JxLCAgICAgICAgICAgMDIwMCwgTlVMTCwJICAgIGRlbW90ZV9ycV9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpnZnMyX2F0dHJzW10gPSB7CiAJJmdmczJfYXR0cl9pZC5hdHRyLAogCSZnZnMyX2F0dHJfZnNuYW1lLmF0dHIsCisJJmdmczJfYXR0cl91dWlkLmF0dHIsCiAJJmdmczJfYXR0cl9mcmVlemUuYXR0ciwKIAkmZ2ZzMl9hdHRyX3dpdGhkcmF3LmF0dHIsCiAJJmdmczJfYXR0cl9zdGF0ZnNfc3luYy5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfc3luYy5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfcmVmcmVzaF91c2VyLmF0dHIsCiAJJmdmczJfYXR0cl9xdW90YV9yZWZyZXNoX2dyb3VwLmF0dHIsCisJJmdmczJfYXR0cl9kZW1vdGVfcnEuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMjI0LDE0ICsyOTIsMTQ1IEBACiAKIExPQ0tTVFJVQ1RfQVRUUihqaWQsICAgICAgIiV1XG4iKTsKIExPQ0tTVFJVQ1RfQVRUUihmaXJzdCwgICAgIiV1XG4iKTsKLUxPQ0tTVFJVQ1RfQVRUUihsdmJfc2l6ZSwgIiV1XG4iKTsKLUxPQ0tTVFJVQ1RfQVRUUihmbGFncywgICAgIiVkXG4iKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxvY2tzdHJ1Y3RfYXR0cnNbXSA9IHsKIAkmbG9ja3N0cnVjdF9hdHRyX2ppZC5hdHRyLAogCSZsb2Nrc3RydWN0X2F0dHJfZmlyc3QuYXR0ciwKLQkmbG9ja3N0cnVjdF9hdHRyX2x2Yl9zaXplLmF0dHIsCi0JJmxvY2tzdHJ1Y3RfYXR0cl9mbGFncy5hdHRyLAorCU5VTEwsCit9OworCisvKgorICogbG9ja19tb2R1bGUuIE9yaWdpbmFsbHkgZnJvbSBsb2NrX2RsbQorICovCisKK3N0YXRpYyBzc2l6ZV90IHByb3RvX25hbWVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpvcHMgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBvcHMtPmxtX3Byb3RvX25hbWUpOworfQorCitzdGF0aWMgc3NpemVfdCBibG9ja19zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzc2l6ZV90IHJldDsKKwlpbnQgdmFsID0gMDsKKworCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpKQorCQl2YWwgPSAxOworCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYmxvY2tfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXNzaXplX3QgcmV0ID0gbGVuOworCWludCB2YWw7CisKKwl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CisKKwlpZiAodmFsID09IDEpCisJCXNldF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKTsKKwllbHNlIGlmICh2YWwgPT0gMCkgeworCQljbGVhcl9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJZ2ZzMl9nbG9ja190aGF3KHNkcCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbGtpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbHMtPmxzX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgbGtmaXJzdF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX2ZpcnN0KTsKK30KKworc3RhdGljIHNzaXplX3QgZmlyc3RfZG9uZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX2ZpcnN0X2RvbmUpOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfcmVjb3Zlcl9qaWQpOworfQorCitzdGF0aWMgdm9pZCBnZnMyX2pkZXNjX21ha2VfZGlydHkoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpCit7CisJc3RydWN0IGdmczJfamRlc2MgKmpkOworCisJc3Bpbl9sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgeworCQlpZiAoamQtPmpkX2ppZCAhPSBqaWQpCisJCQljb250aW51ZTsKKwkJamQtPmpkX2RpcnR5ID0gMTsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJbHMtPmxzX3JlY292ZXJfamlkID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOworCWdmczJfamRlc2NfbWFrZV9kaXJ0eShzZHAsIGxzLT5sc19yZWNvdmVyX2ppZCk7CisJaWYgKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2VzcykKKwkJd2FrZV91cF9wcm9jZXNzKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2Vzcyk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9kb25lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfcmVjb3Zlcl9qaWRfZG9uZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RhdHVzX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfcmVjb3Zlcl9qaWRfc3RhdHVzKTsKK30KKworc3RydWN0IGdkbG1fYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCisjZGVmaW5lIEdETE1fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIFwKK3N0YXRpYyBzdHJ1Y3QgZ2RsbV9hdHRyIGdkbG1fYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworR0RMTV9BVFRSKHByb3RvX25hbWUsICAgICAwNDQ0LCBwcm90b19uYW1lX3Nob3csICAgICBOVUxMKTsKK0dETE1fQVRUUihibG9jaywgICAgICAgICAgMDY0NCwgYmxvY2tfc2hvdywgICAgICAgICAgYmxvY2tfc3RvcmUpOworR0RMTV9BVFRSKHdpdGhkcmF3LCAgICAgICAwNjQ0LCB3aXRoZHJhd19zaG93LCAgICAgICB3aXRoZHJhd19zdG9yZSk7CitHRExNX0FUVFIoaWQsICAgICAgICAgICAgIDA0NDQsIGxraWRfc2hvdywgICAgICAgICAgIE5VTEwpOworR0RMTV9BVFRSKGZpcnN0LCAgICAgICAgICAwNDQ0LCBsa2ZpcnN0X3Nob3csICAgICAgICBOVUxMKTsKK0dETE1fQVRUUihmaXJzdF9kb25lLCAgICAgMDQ0NCwgZmlyc3RfZG9uZV9zaG93LCAgICAgTlVMTCk7CitHRExNX0FUVFIocmVjb3ZlciwgICAgICAgIDA2NDQsIHJlY292ZXJfc2hvdywgICAgICAgIHJlY292ZXJfc3RvcmUpOworR0RMTV9BVFRSKHJlY292ZXJfZG9uZSwgICAwNDQ0LCByZWNvdmVyX2RvbmVfc2hvdywgICBOVUxMKTsKK0dETE1fQVRUUihyZWNvdmVyX3N0YXR1cywgMDQ0NCwgcmVjb3Zlcl9zdGF0dXNfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsb2NrX21vZHVsZV9hdHRyc1tdID0geworCSZnZGxtX2F0dHJfcHJvdG9fbmFtZS5hdHRyLAorCSZnZGxtX2F0dHJfYmxvY2suYXR0ciwKKwkmZ2RsbV9hdHRyX3dpdGhkcmF3LmF0dHIsCisJJmdkbG1fYXR0cl9pZC5hdHRyLAorCSZsb2Nrc3RydWN0X2F0dHJfamlkLmF0dHIsCisJJmdkbG1fYXR0cl9maXJzdC5hdHRyLAorCSZnZGxtX2F0dHJfZmlyc3RfZG9uZS5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlci5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlcl9kb25lLmF0dHIsCisJJmdkbG1fYXR0cl9yZWNvdmVyX3N0YXR1cy5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNzMsNyArNTcyLDYgQEAKIFRVTkVfQVRUUihzdGF0ZnNfc2xvdywgMCk7CiBUVU5FX0FUVFIobmV3X2ZpbGVzX2pkYXRhLCAwKTsKIFRVTkVfQVRUUihxdW90YV9zaW11bF9zeW5jLCAxKTsKLVRVTkVfQVRUUihxdW90YV9jYWNoZV9zZWNzLCAxKTsKIFRVTkVfQVRUUihzdGFsbF9zZWNzLCAxKTsKIFRVTkVfQVRUUihzdGF0ZnNfcXVhbnR1bSwgMSk7CiBUVU5FX0FUVFJfREFFTU9OKHJlY292ZXJkX3NlY3MsIHJlY292ZXJkX3Byb2Nlc3MpOwpAQCAtMzg5LDcgKzU4Nyw2IEBACiAJJnR1bmVfYXR0cl9jb21wbGFpbl9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGF0ZnNfc2xvdy5hdHRyLAogCSZ0dW5lX2F0dHJfcXVvdGFfc2ltdWxfc3luYy5hdHRyLAotCSZ0dW5lX2F0dHJfcXVvdGFfY2FjaGVfc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhbGxfc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhdGZzX3F1YW50dW0uYXR0ciwKIAkmdHVuZV9hdHRyX3JlY292ZXJkX3NlY3MuYXR0ciwKQEAgLTQxNCw2ICs2MTEsMTEgQEAKIAkuYXR0cnMgPSB0dW5lX2F0dHJzLAogfTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG9ja19tb2R1bGVfZ3JvdXAgPSB7CisJLm5hbWUgPSAibG9ja19tb2R1bGUiLAorCS5hdHRycyA9IGxvY2tfbW9kdWxlX2F0dHJzLAorfTsKKwogaW50IGdmczJfc3lzX2ZzX2FkZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKIAlpbnQgZXJyb3I7CkBAIC00MzYsOSArNjM4LDE1IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfYXJnczsKIAorCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfdHVuZTsKKwogCWtvYmplY3RfdWV2ZW50KCZzZHAtPnNkX2tvYmosIEtPQkpfQUREKTsKIAlyZXR1cm4gMDsKIAorZmFpbF90dW5lOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiBmYWlsX2FyZ3M6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZhcmdzX2dyb3VwKTsKIGZhaWxfbG9ja3N0cnVjdDoKQEAgLTQ1NSwxNSArNjYzLDI3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZ0dW5lX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmFyZ3NfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja3N0cnVjdF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CiAJa29iamVjdF9wdXQoJnNkcC0+c2Rfa29iaik7CiB9CiAKKwogc3RhdGljIGludCBnZnMyX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGdmczJfc2JkLCBzZF9rb2JqKTsKKwljb25zdCB1OCAqdXVpZCA9IHNkcC0+c2Rfc2Iuc2JfdXVpZDsKKwogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lcyIsIHNkcC0+c2RfdGFibGVfbmFtZSk7CiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPSVzIiwgc2RwLT5zZF9wcm90b19uYW1lKTsKKwlpZiAoZ2ZzMl91dWlkX3ZhbGlkKHV1aWQpKSB7CisJCWFkZF91ZXZlbnRfdmFyKGVudiwgIlVVSUQ9JTAyWCUwMlglMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWC0iCisJCQkgICAgICAgIiUwMlglMDJYLSUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCIsCisJCQkgICAgICAgdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVpZFs0XSwKKwkJCSAgICAgICB1dWlkWzVdLCB1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLAorCQkJICAgICAgIHV1aWRbMTBdLCB1dWlkWzExXSwgdXVpZFsxMl0sIHV1aWRbMTNdLAorCQkJICAgICAgIHV1aWRbMTRdLCB1dWlkWzE1XSk7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3RyYW5zLmMgYi9mcy9nZnMyL3RyYW5zLmMKaW5kZXggZjY3N2I4YS4uMDUzNzUyZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi90cmFucy5jCisrKyBiL2ZzL2dmczIvdHJhbnMuYwpAQCAtMTIsOSArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC04OCw5ICs4NywxMSBAQAogCiAJaWYgKCF0ci0+dHJfdG91Y2hlZCkgewogCQlnZnMyX2xvZ19yZWxlYXNlKHNkcCwgdHItPnRyX3Jlc2VydmVkKTsKLQkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOwotCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKLQkJa2ZyZWUodHIpOworCQlpZiAodHItPnRyX3RfZ2guZ2hfZ2wpIHsKKwkJCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKKwkJCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOworCQkJa2ZyZWUodHIpOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNiw5ICsxMDcsMTEgQEAKIAl9CiAKIAlnZnMyX2xvZ19jb21taXQoc2RwLCB0cik7Ci0gICAgICAgIGdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKLSAgICAgICAgZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7Ci0gICAgICAgIGtmcmVlKHRyKTsKKwlpZiAodHItPnRyX3RfZ2guZ2hfZ2wpIHsKKwkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOworCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKKwkJa2ZyZWUodHIpOworCX0KIAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1NZTkNIUk9OT1VTKQogCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi91dGlsLmMgYi9mcy9nZnMyL3V0aWwuYwppbmRleCAzNzRmNTBlLi45ZDEyYjExIDEwMDY0NAotLS0gYS9mcy9nZnMyL3V0aWwuYworKysgYi9mcy9nZnMyL3V0aWwuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0zNSw2ICszNCw4IEBACiAKIGludCBnZnMyX2xtX3dpdGhkcmF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbSA9IGxzLT5sc19vcHM7CiAJdmFfbGlzdCBhcmdzOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCkBAIC00Nyw4ICs0OCwxMiBAQAogCWZzX2VycihzZHAsICJhYm91dCB0byB3aXRoZHJhdyB0aGlzIGZpbGUgc3lzdGVtXG4iKTsKIAlCVUdfT04oc2RwLT5zZF9hcmdzLmFyX2RlYnVnKTsKIAotCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHdpdGhkcmF3XG4iKTsKLQlnZnMyX3dpdGhkcmF3X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKKwlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX09GRkxJTkUpOworCisJaWYgKGxtLT5sbV91bm1vdW50KSB7CisJCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHVubW91bnRcbiIpOworCQlsbS0+bG1fdW5tb3VudChzZHApOworCX0KIAlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKIAlkdW1wX3N0YWNrKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmcy9oZnNfZnMuaCBiL2ZzL2hmcy9oZnNfZnMuaAppbmRleCA5OTU1MjMyLi4wNTIzODdlIDEwMDY0NAotLS0gYS9mcy9oZnMvaGZzX2ZzLmgKKysrIGIvZnMvaGZzL2hmc19mcy5oCkBAIC0yMTMsNyArMjEzLDcgQEAKIGV4dGVybiBpbnQgaGZzX3BhcnRfZmluZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2VjdG9yX3QgKiwgc2VjdG9yX3QgKik7CiAKIC8qIHN0cmluZy5jICovCi1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc19kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzX2RlbnRyeV9vcGVyYXRpb25zOwogCiBleHRlcm4gaW50IGhmc19oYXNoX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIGludCBoZnNfc3RyY21wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50LApkaWZmIC0tZ2l0IGEvZnMvaGZzL3N5c2RlcC5jIGIvZnMvaGZzL3N5c2RlcC5jCmluZGV4IDViZjg5ZWMuLjc0NzhmNWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zeXNkZXAuYworKysgYi9mcy9oZnMvc3lzZGVwLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc19kZW50cnlfb3BlcmF0aW9ucyA9Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gaGZzX3JldmFsaWRhdGVfZGVudHJ5LAogCS5kX2hhc2gJCT0gaGZzX2hhc2hfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCBmMDI3YTkwLi41YzEwZDgwIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAorKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaApAQCAtMzI3LDcgKzMyNyw3IEBACiAvKiBpbm9kZS5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIHZvaWQgaGZzcGx1c19pbm9kZV9yZWFkX2Zvcmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICopOwogdm9pZCBoZnNwbHVzX2lub2RlX3dyaXRlX2Zvcmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICopOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jCmluZGV4IGYxMDVlZTkuLjFiY2Y1OTcgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuYworKysgYi9mcy9oZnNwbHVzL2lub2RlLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAogfTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoICAgICAgID0gaGZzcGx1c19oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IDVjNTM4ZTBlLi5mZTAyYWQ0IDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAKICNkZWZpbmUgRklMRV9IT1NURlNfSShmaWxlKSBIT1NURlNfSSgoZmlsZSktPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpCiAKLWludCBob3N0ZnNfZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBob3N0ZnNfZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiAxOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaG9zdGZzX2RlbnRyeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhvc3Rmc19kZW50cnlfb3BzID0gewogCS5kX2RlbGV0ZQkJPSBob3N0ZnNfZF9kZWxldGUsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2RlbnRyeS5jIGIvZnMvaHBmcy9kZW50cnkuYwppbmRleCAwODMxOTEyLi45NDBkNmQxIDEwMDY0NAotLS0gYS9mcy9ocGZzL2RlbnRyeS5jCisrKyBiL2ZzL2hwZnMvZGVudHJ5LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBocGZzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBocGZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gaHBmc19oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlCT0gaHBmc19jb21wYXJlX2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCA5MTNhYjJkLi5kMDZkNmQyIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC0xNDcsMTMgKzE0OCwxMyBAQAogCWlub2RlLT5pX2NkZXYgPSBOVUxMOwogCWlub2RlLT5pX3JkZXYgPSAwOwogCWlub2RlLT5kaXJ0aWVkX3doZW4gPSAwOwotCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpIHsKLQkJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKQotCQkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOwotCQllbHNlCi0JCQlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCAoaW5vZGUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCisJaWYgKHNlY3VyaXR5X2lub2RlX2FsbG9jKGlub2RlKSkKKwkJZ290byBvdXRfZnJlZV9pbm9kZTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlfaW50ZWdyaXR5ICovCisJaWYgKGltYV9pbm9kZV9hbGxvYyhpbm9kZSkpCisJCWdvdG8gb3V0X2ZyZWVfc2VjdXJpdHk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfbG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmlub2RlLT5pX2xvY2ssICZzYi0+c190eXBlLT5pX2xvY2tfa2V5KTsKQEAgLTE4OSw2ICsxOTAsMTUgQEAKIAlpbm9kZS0+aV9tYXBwaW5nID0gbWFwcGluZzsKIAogCXJldHVybiBpbm9kZTsKKworb3V0X2ZyZWVfc2VjdXJpdHk6CisJc2VjdXJpdHlfaW5vZGVfZnJlZShpbm9kZSk7CitvdXRfZnJlZV9pbm9kZToKKwlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUpCisJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKKwllbHNlCisJCWttZW1fY2FjaGVfZnJlZShpbm9kZV9jYWNoZXAsIChpbm9kZSkpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X2Fsd2F5cyk7CiAKQEAgLTI4NCw3ICsyOTQsNyBAQAogCUJVR19PTighKGlub2RlLT5pX3N0YXRlICYgSV9GUkVFSU5HKSk7CiAJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9DTEVBUik7CiAJaW5vZGVfc3luY193YWl0KGlub2RlKTsKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZSkKIAkJaW5vZGUtPmlfc2ItPnNfb3AtPmNsZWFyX2lub2RlKGlub2RlKTsKIAlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9iZGV2KQpAQCAtMzU2LDkgKzM2NiwxMiBAQAogCQlpZiAodG1wID09IGhlYWQpCiAJCQlicmVhazsKIAkJaW5vZGUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGlub2RlLCBpX3NiX2xpc3QpOworCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykKKwkJCWNvbnRpbnVlOwogCQlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOwogCQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpIHsKIAkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcG9zZSk7CisJCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9GUkVFSU5HOwogCQkJY291bnQrKzsKIAkJCWNvbnRpbnVlOwpAQCAtNDYwLDYgKzQ3Myw3IEBACiAJCQkJY29udGludWU7CiAJCX0KIAkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmZnJlZWFibGUpOworCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX0ZSRUVJTkc7CiAJCW5yX3BydW5lZCsrOwogCX0KQEAgLTY1Niw2ICs2NzAsNyBAQAogCSAqIGp1c3QgY3JlYXRlZCBpdCAoc28gdGhlcmUgY2FuIGJlIG5vIG9sZCBob2xkZXJzCiAJICogdGhhdCBoYXZlbid0IHRlc3RlZCBJX0xPQ0spLgogCSAqLworCVdBUk5fT04oKGlub2RlLT5pX3N0YXRlICYgKElfTE9DS3xJX05FVykpICE9IChJX0xPQ0t8SV9ORVcpKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+KElfTE9DS3xJX05FVyk7CiAJd2FrZV91cF9pbm9kZShpbm9kZSk7CiB9CkBAIC0xMTQ1LDYgKzExNjAsNyBAQAogCiAJbGlzdF9kZWxfaW5pdCgmaW5vZGUtPmlfbGlzdCk7CiAJbGlzdF9kZWxfaW5pdCgmaW5vZGUtPmlfc2JfbGlzdCk7CisJV0FSTl9PTihpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKTsKIAlpbm9kZS0+aV9zdGF0ZSB8PSBJX0ZSRUVJTkc7CiAJaW5vZGVzX3N0YXQubnJfaW5vZGVzLS07CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwpAQCAtMTE1NCw3ICsxMTcwLDcgQEAKIAlpZiAob3AtPmRlbGV0ZV9pbm9kZSkgewogCQl2b2lkICgqZGVsZXRlKShzdHJ1Y3QgaW5vZGUgKikgPSBvcC0+ZGVsZXRlX2lub2RlOwogCQlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpCi0JCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJCXZmc19kcV9pbml0KGlub2RlKTsKIAkJLyogRmlsZXN5c3RlbXMgaW1wbGVtZW50aW5nIHRoZWlyIG93bgogCQkgKiBzX29wLT5kZWxldGVfaW5vZGUgYXJlIHJlcXVpcmVkIHRvIGNhbGwKIAkJICogdHJ1bmNhdGVfaW5vZGVfcGFnZXMgYW5kIGNsZWFyX2lub2RlKCkKQEAgLTExODYsMTYgKzEyMDIsMTkgQEAKIAkJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKIAkJCXJldHVybjsKIAkJfQorCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX1dJTExfRlJFRTsKIAkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCQl3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDEpOwogCQlzcGluX2xvY2soJmlub2RlX2xvY2spOworCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCQlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9XSUxMX0ZSRUU7CiAJCWlub2Rlc19zdGF0Lm5yX3VudXNlZC0tOwogCQlobGlzdF9kZWxfaW5pdCgmaW5vZGUtPmlfaGFzaCk7CiAJfQogCWxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2xpc3QpOwogCWxpc3RfZGVsX2luaXQoJmlub2RlLT5pX3NiX2xpc3QpOworCVdBUk5fT04oaW5vZGUtPmlfc3RhdGUgJiBJX05FVyk7CiAJaW5vZGUtPmlfc3RhdGUgfD0gSV9GUkVFSU5HOwogCWlub2Rlc19zdGF0Lm5yX2lub2Rlcy0tOwogCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKQEAgLTEyODMsNiArMTMwMiw0MCBAQAogfQogRVhQT1JUX1NZTUJPTChibWFwKTsKIAorLyoKKyAqIFdpdGggcmVsYXRpdmUgYXRpbWUsIG9ubHkgdXBkYXRlIGF0aW1lIGlmIHRoZSBwcmV2aW91cyBhdGltZSBpcworICogZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUgb3IgaWYgYXQgbGVhc3QgYSBkYXkgaGFzCisgKiBwYXNzZWQgc2luY2UgdGhlIGxhc3QgYXRpbWUgdXBkYXRlLgorICovCitzdGF0aWMgaW50IHJlbGF0aW1lX25lZWRfdXBkYXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBzdHJ1Y3QgdGltZXNwZWMgbm93KQoreworCisJaWYgKCEobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIG10aW1lIHlvdW5nZXIgdGhhbiBhdGltZT8gSWYgeWVzLCB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLCAmaW5vZGUtPmlfYXRpbWUpID49IDApCisJCXJldHVybiAxOworCS8qCisJICogSXMgY3RpbWUgeW91bmdlciB0aGFuIGF0aW1lPyBJZiB5ZXMsIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfY3RpbWUsICZpbm9kZS0+aV9hdGltZSkgPj0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElzIHRoZSBwcmV2aW91cyBhdGltZSB2YWx1ZSBvbGRlciB0aGFuIGEgZGF5PyBJZiB5ZXMsCisJICogdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICgobG9uZykobm93LnR2X3NlYyAtIGlub2RlLT5pX2F0aW1lLnR2X3NlYykgPj0gMjQqNjAqNjApCisJCXJldHVybiAxOworCS8qCisJICogR29vZCwgd2UgY2FuIHNraXAgdGhlIGF0aW1lIHVwZGF0ZToKKwkgKi8KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKgl0b3VjaF9hdGltZQktCXVwZGF0ZSB0aGUgYWNjZXNzIHRpbWUKICAqCUBtbnQ6IG1vdW50IHRoZSBpbm9kZSBpcyBhY2Nlc3NlZCBvbgpAQCAtMTMxMCwxNyArMTM2MywxMiBAQAogCQlnb3RvIG91dDsKIAlpZiAoKG1udC0+bW50X2ZsYWdzICYgTU5UX05PRElSQVRJTUUpICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gb3V0OwotCWlmIChtbnQtPm1udF9mbGFncyAmIE1OVF9SRUxBVElNRSkgewotCQkvKgotCQkgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMKLQkJICogYXRpbWUgaXMgZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUuCi0JCSAqLwotCQlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfbXRpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwICYmCi0JCSAgICB0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwgJmlub2RlLT5pX2F0aW1lKSA8IDApCi0JCQlnb3RvIG91dDsKLQl9CiAKIAlub3cgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOworCisJaWYgKCFyZWxhdGltZV9uZWVkX3VwZGF0ZShtbnQsIGlub2RlLCBub3cpKQorCQlnb3RvIG91dDsKKwogCWlmICh0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZub3cpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggMjQwZWM2MzkuLmFjMmQ0N2UgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtNDA0LDEwICs0MDQsMTIgQEAKIAlpZiAoT19OT05CTE9DSyAhPSBPX05ERUxBWSkKIAkJZmxhZyB8PSBPX05ERUxBWTsKICNlbmRpZgorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlpZiAob24pCiAJCWZpbHAtPmZfZmxhZ3MgfD0gZmxhZzsKIAllbHNlCiAJCWZpbHAtPmZfZmxhZ3MgJj0gfmZsYWc7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00MjUsMTggKzQyNywxMiBAQAogCS8qIERpZCBGQVNZTkMgc3RhdGUgY2hhbmdlID8gKi8KIAlpZiAoKGZsYWcgXiBmaWxwLT5mX2ZsYWdzKSAmIEZBU1lOQykgewogCQlpZiAoZmlscC0+Zl9vcCAmJiBmaWxwLT5mX29wLT5mYXN5bmMpCisJCQkvKiBmYXN5bmMoKSBhZGp1c3RzIGZpbHAtPmZfZmxhZ3MgKi8KIAkJCWVycm9yID0gZmlscC0+Zl9vcC0+ZmFzeW5jKGZkLCBmaWxwLCBvbik7CiAJCWVsc2UKIAkJCWVycm9yID0gLUVOT1RUWTsKIAl9Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAob24pCi0JCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOwotCWVsc2UKLQkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAwOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2ZzZnJlZXplKHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNDk5LDE3ICs0OTUsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZJT05CSU86Ci0JCS8qIEJLTCBuZWVkZWQgdG8gYXZvaWQgcmFjZXMgdHdlYWtpbmcgZl9mbGFncyAqLwotCQlsb2NrX2tlcm5lbCgpOwogCQllcnJvciA9IGlvY3RsX2Zpb25iaW8oZmlscCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZJT0FTWU5DOgotCQkvKiBCS0wgbmVlZGVkIHRvIGF2b2lkIHJhY2VzIHR3ZWFraW5nIGZfZmxhZ3MgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJZXJyb3IgPSBpb2N0bF9maW9hc3luYyhmZCwgZmlscCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZJT1FTSVpFOgpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggNjE0N2VjMy4uMTNkMmVkZCAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYworKysgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBpc29mc19kZW50cnlfb3BzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGlzb2ZzX2RlbnRyeV9vcHNbXSA9IHsKIAl7CiAJCS5kX2hhc2gJCT0gaXNvZnNfaGFzaCwKIAkJLmRfY29tcGFyZQk9IGlzb2ZzX2RlbnRyeV9jbXAsCmRpZmYgLS1naXQgYS9mcy9qZnMvYWNsLmMgYi9mcy9qZnMvYWNsLmMKaW5kZXggZDNlNWMzMy4uYTE2NmMxNiAxMDA2NDQKLS0tIGEvZnMvamZzL2FjbC5jCisrKyBiL2ZzL2pmcy9hY2wuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAKIAlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEICYmIGlhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAogCSAgICAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaWF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7Ci0JCWlmIChEUVVPVF9UUkFOU0ZFUihpbm9kZSwgaWF0dHIpKQorCQlpZiAodmZzX2RxX3RyYW5zZmVyKGlub2RlLCBpYXR0cikpCiAJCQlyZXR1cm4gLUVEUVVPVDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9pbm9kZS5jIGIvZnMvamZzL2lub2RlLmMKaW5kZXggYjAwZWU5Zi4uYjJhZTE5MCAxMDA2NDQKLS0tIGEvZnMvamZzL2lub2RlLmMKKysrIGIvZnMvamZzL2lub2RlLmMKQEAgLTE1OCw5ICsxNTgsOSBAQAogCQkvKgogCQkgKiBGcmVlIHRoZSBpbm9kZSBmcm9tIHRoZSBxdW90YSBhbGxvY2F0aW9uLgogCQkgKi8KLQkJRFFVT1RfSU5JVChpbm9kZSk7Ci0JCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCQlEUVVPVF9EUk9QKGlub2RlKTsKKwkJdmZzX2RxX2luaXQoaW5vZGUpOworCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJCXZmc19kcV9kcm9wKGlub2RlKTsKIAl9CiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2R0cmVlLmMgYi9mcy9qZnMvamZzX2R0cmVlLmMKaW5kZXggNGRjYzA1OC4uOTI1ODcxZSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kdHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwpAQCAtMzgxLDEwICszODEsMTAgQEAKIAkJICogSXQncyB0aW1lIHRvIG1vdmUgdGhlIGlubGluZSB0YWJsZSB0byBhbiBleHRlcm5hbAogCQkgKiBwYWdlIGFuZCBiZWdpbiB0byBidWlsZCB0aGUgeHRyZWUKIAkJICovCi0JCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgc2JpLT5uYnBlcnBhZ2UpKQorCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBzYmktPm5icGVycGFnZSkpCiAJCQlnb3RvIGNsZWFuX3VwOwogCQlpZiAoZGJBbGxvYyhpcCwgMCwgc2JpLT5uYnBlcnBhZ2UsICZ4YWRkcikpIHsKLQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHNiaS0+bmJwZXJwYWdlKTsKKwkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBzYmktPm5icGVycGFnZSk7CiAJCQlnb3RvIGNsZWFuX3VwOwogCQl9CiAKQEAgLTQwOCw3ICs0MDgsNyBAQAogCQkJbWVtY3B5KCZqZnNfaXAtPmlfZGlydGFibGUsIHRlbXBfdGFibGUsCiAJCQkgICAgICAgc2l6ZW9mICh0ZW1wX3RhYmxlKSk7CiAJCQlkYkZyZWUoaXAsIHhhZGRyLCBzYmktPm5icGVycGFnZSk7Ci0JCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBzYmktPm5icGVycGFnZSk7CisJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgc2JpLT5uYnBlcnBhZ2UpOwogCQkJZ290byBjbGVhbl91cDsKIAkJfQogCQlpcC0+aV9zaXplID0gUFNJWkU7CkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQkJbiA9IHhsZW47CiAKIAkJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIG4pKSB7CisJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIG4pKSB7CiAJCQlyYyA9IC1FRFFVT1Q7CiAJCQlnb3RvIGV4dGVuZE91dDsKIAkJfQpAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAogCS8qIFJvbGxiYWNrIHF1b3RhIGFsbG9jYXRpb24gKi8KIAlpZiAocmMgJiYgcXVvdGFfYWxsb2NhdGlvbikKLQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgcXVvdGFfYWxsb2NhdGlvbik7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBxdW90YV9hbGxvY2F0aW9uKTsKIAogICAgICAgZHRTcGxpdFVwX0V4aXQ6CiAKQEAgLTEzNjksNyArMTM2OSw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CiAJCXJlbGVhc2VfbWV0YXBhZ2Uocm1wKTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQpAQCAtMTkxNiw3ICsxOTE2LDcgQEAKIAlycCA9IHJtcC0+ZGF0YTsKIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIGxlbmd0aFBYRChweGQpKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKSkgewogCQlyZWxlYXNlX21ldGFwYWdlKHJtcCk7CiAJCXJldHVybiAtRURRVU9UOwogCX0KQEAgLTIyODcsNyArMjI4Nyw3IEBACiAJeGxlbiA9IGxlbmd0aFBYRCgmZnAtPmhlYWRlci5zZWxmKTsKIAogCS8qIEZyZWUgcXVvdGEgYWxsb2NhdGlvbi4gKi8KLQlEUVVPVF9GUkVFX0JMT0NLKGlwLCB4bGVuKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgeGxlbik7CiAKIAkvKiBmcmVlL2ludmFsaWRhdGUgaXRzIGJ1ZmZlciBwYWdlICovCiAJZGlzY2FyZF9tZXRhcGFnZShmbXApOwpAQCAtMjM2Myw3ICsyMzYzLDcgQEAKIAkJCQl4bGVuID0gbGVuZ3RoUFhEKCZwLT5oZWFkZXIuc2VsZik7CiAKIAkJCQkvKiBGcmVlIHF1b3RhIGFsbG9jYXRpb24gKi8KLQkJCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCB4bGVuKTsKKwkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgeGxlbik7CiAKIAkJCQkvKiBmcmVlL2ludmFsaWRhdGUgaXRzIGJ1ZmZlciBwYWdlICovCiAJCQkJZGlzY2FyZF9tZXRhcGFnZShtcCk7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2V4dGVudC5jIGIvZnMvamZzL2pmc19leHRlbnQuYwppbmRleCA3YWUxZTMyLi4xNjk4MDJlIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2V4dGVudC5jCisrKyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCX0KIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIG54bGVuKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIG54bGVuKSkgewogCQlkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pOwogCQltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAJCXJldHVybiAtRURRVU9UOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJICovCiAJaWYgKHJjKSB7CiAJCWRiRnJlZShpcCwgbnhhZGRyLCBueGxlbik7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaXAsIG54bGVuKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG54bGVuKTsKIAkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCQlyZXR1cm4gKHJjKTsKIAl9CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJZ290byBleGl0OwogCiAJLyogQWxsb2NhdCBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBueGxlbikpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBueGxlbikpIHsKIAkJZGJGcmVlKGlwLCBueGFkZHIsIChzNjQpIG54bGVuKTsKIAkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCQlyZXR1cm4gLUVEUVVPVDsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQkvKiBleHRlbmQgdGhlIGV4dGVudCAqLwogCQlpZiAoKHJjID0geHRFeHRlbmQoMCwgaXAsIHhvZmYgKyB4bGVuLCAoaW50KSBuZXh0ZW5kLCAwKSkpIHsKIAkJCWRiRnJlZShpcCwgeGFkZHIgKyB4bGVuLCBkZWx0YSk7Ci0JCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBueGxlbik7CisJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbnhsZW4pOwogCQkJZ290byBleGl0OwogCQl9CiAJfSBlbHNlIHsKQEAgLTMwOCw3ICszMDgsNyBAQAogCQkgKi8KIAkJaWYgKChyYyA9IHh0VGFpbGdhdGUoMCwgaXAsIHhvZmYsIChpbnQpIG50YWlsLCBueGFkZHIsIDApKSkgewogCQkJZGJGcmVlKGlwLCBueGFkZHIsIG54bGVuKTsKLQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIG54bGVuKTsKKwkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBueGxlbik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmMgYi9mcy9qZnMvamZzX2lub2RlLmMKaW5kZXggZDRkMTQyYy4uZGMwZTAyMSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5jCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBpbm9kZSB0byBxdW90YS4KIAkgKi8KLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKIAkJcmMgPSAtRURRVU9UOwogCQlnb3RvIGZhaWxfZHJvcDsKIAl9CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlyZXR1cm4gaW5vZGU7CiAKIGZhaWxfZHJvcDoKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogZmFpbF91bmxvY2s6CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbm9kZS5oIGIvZnMvamZzL2pmc19pbm9kZS5oCmluZGV4IGFkYjJmYWYuLjFlZmY3ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW5vZGUuaAorKysgYi9mcy9qZnMvamZzX2lub2RlLmgKQEAgLTQ3LDUgKzQ3LDUgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgamZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKICNlbmRpZgkJCQkvKiBfSF9KRlNfSU5PREUgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfeHRyZWUuYyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwppbmRleCBhZTNhY2FmLi5hMjdlMjZjIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3h0cmVlLmMKKysrIGIvZnMvamZzL2pmc194dHJlZS5jCkBAIC04NDYsMTAgKzg0NiwxMCBAQAogCQkJaGludCA9IGFkZHJlc3NYQUQoeGFkKSArIGxlbmd0aFhBRCh4YWQpIC0gMTsKIAkJfSBlbHNlCiAJCQloaW50ID0gMDsKLQkJaWYgKChyYyA9IERRVU9UX0FMTE9DX0JMT0NLKGlwLCB4bGVuKSkpCisJCWlmICgocmMgPSB2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIHhsZW4pKSkKIAkJCWdvdG8gb3V0OwogCQlpZiAoKHJjID0gZGJBbGxvYyhpcCwgaGludCwgKHM2NCkgeGxlbiwgJnhhZGRyKSkpIHsKLQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHhsZW4pOworCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHhsZW4pOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC04NzgsNyArODc4LDcgQEAKIAkJCS8qIHVuZG8gZGF0YSBleHRlbnQgYWxsb2NhdGlvbiAqLwogCQkJaWYgKCp4YWRkcnAgPT0gMCkgewogCQkJCWRiRnJlZShpcCwgeGFkZHIsIChzNjQpIHhsZW4pOwotCQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHhsZW4pOworCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCB4bGVuKTsKIAkJCX0KIAkJCXJldHVybiByYzsKIAkJfQpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIAlyYm4gPSBhZGRyZXNzUFhEKHB4ZCk7CiAKIAkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKIAkJcmMgPSAtRURRVU9UOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uLiAqLwogCWlmIChxdW90YV9hbGxvY2F0aW9uKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBxdW90YV9hbGxvY2F0aW9uKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHF1b3RhX2FsbG9jYXRpb24pOwogCiAJcmV0dXJuIChyYyk7CiB9CkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIGxlbmd0aFBYRChweGQpKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKSkgewogCQlyZWxlYXNlX21ldGFwYWdlKHJtcCk7CiAJCXJldHVybiAtRURRVU9UOwogCX0KQEAgLTM5NDEsNyArMzk0MSw3IEBACiAJCWlwLT5pX3NpemUgPSBuZXdzaXplOwogCiAJLyogdXBkYXRlIHF1b3RhIGFsbG9jYXRpb24gdG8gcmVmbGVjdCBmcmVlZCBibG9ja3MgKi8KLQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBuZnJlZWQpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBuZnJlZWQpOwogCiAJLyoKIAkgKiBmcmVlIHRsb2NrIG9mIGludmFsaWRhdGVkIHBhZ2VzCmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jCmluZGV4IGI0ZGU1NmIuLjUxNGVlMmUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0zNSw3ICszNSw3IEBACiAvKgogICogZm9yd2FyZCByZWZlcmVuY2VzCiAgKi8KLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnM7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOwogCiBzdGF0aWMgczY0IGNvbW1pdFplcm9MaW5rKHRpZF90LCBzdHJ1Y3QgaW5vZGUgKik7CiAKQEAgLTM1Niw3ICszNTYsNyBAQAogCWpmc19pbmZvKCJqZnNfcm1kaXI6IGRpcDoweCVwIG5hbWU6JXMiLCBkaXAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJLyogSW5pdCBpbm9kZSBmb3IgcXVvdGEgb3BlcmF0aW9ucy4gKi8KLQlEUVVPVF9JTklUKGlwKTsKKwl2ZnNfZHFfaW5pdChpcCk7CiAKIAkvKiBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eSB0byBiZSByZW1vdmVkICovCiAJaWYgKCFkdEVtcHR5KGlwKSkgewpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJamZzX2luZm8oImpmc191bmxpbms6IGRpcDoweCVwIG5hbWU6JXMiLCBkaXAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJLyogSW5pdCBpbm9kZSBmb3IgcXVvdGEgb3BlcmF0aW9ucy4gKi8KLQlEUVVPVF9JTklUKGlwKTsKKwl2ZnNfZHFfaW5pdChpcCk7CiAKIAlpZiAoKHJjID0gZ2V0X1VDU25hbWUoJmRuYW1lLCBkZW50cnkpKSkKIAkJZ290byBvdXQ7CkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCX0gZWxzZSBpZiAobmV3X2lwKSB7CiAJCUlXUklURV9MT0NLKG5ld19pcCwgUkRXUkxPQ0tfTk9STUFMKTsKIAkJLyogSW5pdCBpbm9kZSBmb3IgcXVvdGEgb3BlcmF0aW9ucy4gKi8KLQkJRFFVT1RfSU5JVChuZXdfaXApOworCQl2ZnNfZHFfaW5pdChuZXdfaXApOwogCX0KIAogCS8qCkBAIC0xNTk1LDcgKzE1OTUsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnMgPQorY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfaGFzaCA9IGpmc19jaV9oYXNoLAogCS5kX2NvbXBhcmUgPSBqZnNfY2lfY29tcGFyZSwKZGlmZiAtLWdpdCBhL2ZzL2pmcy94YXR0ci5jIGIvZnMvamZzL3hhdHRyLmMKaW5kZXggOWI3ZjJjZC4uNjFkZmE4MSAxMDA2NDQKLS0tIGEvZnMvamZzL3hhdHRyLmMKKysrIGIvZnMvamZzL3hhdHRyLmMKQEAgLTI2MCwxNCArMjYwLDE0IEBACiAJbmJsb2NrcyA9IChzaXplICsgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKIAogCS8qIEFsbG9jYXRlIG5ldyBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBuYmxvY2tzKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIG5ibG9ja3MpKSB7CiAJCXJldHVybiAtRURRVU9UOwogCX0KIAogCXJjID0gZGJBbGxvYyhpcCwgSU5PSElOVChpcCksIG5ibG9ja3MsICZibGtubyk7CiAJaWYgKHJjKSB7CiAJCS8qUm9sbGJhY2sgcXVvdGEgYWxsb2NhdGlvbi4gKi8KLQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgbmJsb2Nrcyk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBuYmxvY2tzKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzMyLDcgKzMzMiw3IEBACiAKICAgICAgIGZhaWxlZDoKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uLiAqLwotCURRVU9UX0ZSRUVfQkxPQ0soaXAsIG5ibG9ja3MpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBuYmxvY2tzKTsKIAogCWRiRnJlZShpcCwgYmxrbm8sIG5ibG9ja3MpOwogCXJldHVybiByYzsKQEAgLTUzOCw3ICs1MzgsNyBAQAogCiAJaWYgKGJsb2Nrc19uZWVkZWQgPiBjdXJyZW50X2Jsb2NrcykgewogCQkvKiBBbGxvY2F0ZSBuZXcgYmxvY2tzIHRvIHF1b3RhLiAqLwotCQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIGJsb2Nrc19uZWVkZWQpKQorCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBibG9ja3NfbmVlZGVkKSkKIAkJCXJldHVybiAtRURRVU9UOwogCiAJCXF1b3RhX2FsbG9jYXRpb24gPSBibG9ja3NfbmVlZGVkOwpAQCAtNjAyLDcgKzYwMiw3IEBACiAgICAgICBjbGVhbl91cDoKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uICovCiAJaWYgKHF1b3RhX2FsbG9jYXRpb24pCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIHF1b3RhX2FsbG9jYXRpb24pOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgcXVvdGFfYWxsb2NhdGlvbik7CiAKIAlyZXR1cm4gKHJjKTsKIH0KQEAgLTY3Nyw3ICs2NzcsNyBAQAogCiAJLyogSWYgb2xkIGJsb2NrcyBleGlzdCwgdGhleSBtdXN0IGJlIHJlbW92ZWQgZnJvbSBxdW90YSBhbGxvY2F0aW9uLiAqLwogCWlmIChvbGRfYmxvY2tzKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCBvbGRfYmxvY2tzKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIG9sZF9ibG9ja3MpOwogCiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDQ5YjQ0MDkuLjQ5MTBhMzYgMTAwNjQ0Ci0tLSBhL2ZzL2xpYmZzLmMKKysrIGIvZnMvbGliZnMuYwpAQCAtNDQsNyArNDQsNyBAQAogICovCiBzdHJ1Y3QgZGVudHJ5ICpzaW1wbGVfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc2ltcGxlX2RlbnRyeV9vcGVyYXRpb25zID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc2ltcGxlX2RlbnRyeV9vcGVyYXRpb25zID0gewogCQkuZF9kZWxldGUgPSBzaW1wbGVfZGVsZXRlX2RlbnRyeSwKIAl9OwogCkBAIC0yNDIsNyArMjQyLDggQEAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcm9vdCk7CiAJcy0+c19yb290ID0gZGVudHJ5OwogCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJcmV0dXJuIDA7CiAKIEVub21lbToKIAl1cF93cml0ZSgmcy0+c191bW91bnQpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudGxvY2suYyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKaW5kZXggMWYzYjBmYy4uYWVkYzQ3YSAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudGxvY2suYworKysgYi9mcy9sb2NrZC9jbG50bG9jay5jCkBAIC0xMzksNiArMTM5LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm5sbWNsbnRfbWFwX3Y0YWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKKwkJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmFkZHJfbWFwcGVkKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gJigoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcCktPnNpbjZfYWRkcjsKKwljYXNlIEFGX0lORVQ6CisJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoc2luLT5zaW5fYWRkci5zX2FkZHIsIGFkZHJfbWFwcGVkKTsKKwkJcmV0dXJuIGFkZHJfbWFwcGVkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgbG9ja2QgaXMgdXNpbmcgYSBQRl9JTkVUNiBsaXN0ZW5lciwgYWxsIGluY29taW5nIHJlcXVlc3RzIGFwcGVhcgorICogdG8gY29tZSBmcm9tIEFGX0lORVQ2IHJlbW90ZXMuICBUaGUgYWRkcmVzcyBvZiBBRl9JTkVUIHJlbW90ZXMgYXJlCisgKiBtYXBwZWQgdG8gQUZfSU5FVDYgYXV0b21hdGljYWxseSBieSB0aGUgbmV0d29yayBsYXllci4gIEluIGNhc2UgdGhlCisgKiB1c2VyIHBhc3NlZCBhbiBBRl9JTkVUIHNlcnZlciBhZGRyZXNzIGF0IG1vdW50IHRpbWUsIGVuc3VyZSBib3RoCisgKiBhZGRyZXNzZXMgYXJlIEFGX0lORVQ2IGJlZm9yZSBjb21wYXJpbmcgdGhlbS4KKyAqLworc3RhdGljIGludCBubG1jbG50X2NtcF9hZGRyKGNvbnN0IHN0cnVjdCBubG1faG9zdCAqaG9zdCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIxOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjI7CisJc3RydWN0IGluNl9hZGRyIGFkZHIxX21hcHBlZDsKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjJfbWFwcGVkOworCisJYWRkcjEgPSBubG1jbG50X21hcF92NGFkZHIobmxtX2FkZHIoaG9zdCksICZhZGRyMV9tYXBwZWQpOworCWlmIChsaWtlbHkoYWRkcjEgIT0gTlVMTCkpIHsKKwkJYWRkcjIgPSBubG1jbG50X21hcF92NGFkZHIoc2FwLCAmYWRkcjJfbWFwcGVkKTsKKwkJaWYgKGxpa2VseShhZGRyMiAhPSBOVUxMKSkKKwkJCXJldHVybiBpcHY2X2FkZHJfZXF1YWwoYWRkcjEsIGFkZHIyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCS8qICEoQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFKSAqLworc3RhdGljIGludCBubG1jbG50X2NtcF9hZGRyKGNvbnN0IHN0cnVjdCBubG1faG9zdCAqaG9zdCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwlyZXR1cm4gbmxtX2NtcF9hZGRyKG5sbV9hZGRyKGhvc3QpLCBzYXApOworfQorI2VuZGlmCS8qICEoQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFKSAqLworCiAvKgogICogVGhlIHNlcnZlciBsb2NrZCBoYXMgY2FsbGVkIHVzIGJhY2sgdG8gdGVsbCB1cyB0aGUgbG9jayB3YXMgZ3JhbnRlZAogICovCkBAIC0xNjYsNyArMjE1LDcgQEAKIAkJICovCiAJCWlmIChmbF9ibG9ja2VkLT5mbF91Lm5mc19mbC5vd25lci0+cGlkICE9IGxvY2stPnN2aWQpCiAJCQljb250aW51ZTsKLQkJaWYgKCFubG1fY21wX2FkZHIobmxtX2FkZHIoYmxvY2stPmJfaG9zdCksIGFkZHIpKQorCQlpZiAoIW5sbWNsbnRfY21wX2FkZHIoYmxvY2stPmJfaG9zdCwgYWRkcikpCiAJCQljb250aW51ZTsKIAkJaWYgKG5mc19jb21wYXJlX2ZoKE5GU19GSChmbF9ibG9ja2VkLT5mbF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAsZmgpICE9IDApCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jCmluZGV4IGQxZDFlYjguLjYxODg2NWIgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKKysrIGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTYgIEdlcnRqYW4gdmFuIFdpbmdlcmRlICAgIChnZXJ0amFuQGNzLnZ1Lm5sKQorICogIENvcHlyaWdodCAoQykgMTk5NiAgR2VydGphbiB2YW4gV2luZ2VyZGUKICAqCU1pbml4IFYyIGZzIHN1cHBvcnQuCiAgKgogICogIE1vZGlmaWVkIGZvciA2ODB4MCBieSBBbmRyZWFzIFNjaHdhYgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggYmJjMTVjMi4uZDA0MGNlMSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CkBAIC04NTAsNiArODUxLDggQEAKIAkJaWYgKGVyciA9PSAtRUFHQUlOKQogCQkJZXJyID0gaW5vZGVfcGVybWlzc2lvbihuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQkJCSAgICAgICBNQVlfRVhFQyk7CisJCWlmICghZXJyKQorCQkJZXJyID0gaW1hX3BhdGhfY2hlY2soJm5kLT5wYXRoLCBNQVlfRVhFQyk7CiAgCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKQEAgLTE0NzAsNyArMTQ3Myw3IEBACiAJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIG5kKTsKIAlpZiAoIWVycm9yKQogCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwpAQCAtMTQ4NiwyOSArMTQ4OSwzMiBAQAogCWlmICghaW5vZGUpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCisJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGTE5LOgogCQlyZXR1cm4gLUVMT09QOwotCQotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIChhY2NfbW9kZSAmIE1BWV9XUklURSkpCi0JCXJldHVybiAtRUlTRElSOwotCi0JLyoKLQkgKiBGSUZPJ3MsIHNvY2tldHMgYW5kIGRldmljZSBmaWxlcyBhcmUgc3BlY2lhbDogdGhleSBkb24ndAotCSAqIGFjdHVhbGx5IGxpdmUgb24gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLCBhbmQgYXMgc3VjaCB5b3UKLQkgKiBjYW4gd3JpdGUgdG8gdGhlbSBldmVuIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWQtb25seS4KLQkgKi8KLQlpZiAoU19JU0ZJRk8oaW5vZGUtPmlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpIHsKLQkgICAgCWZsYWcgJj0gfk9fVFJVTkM7Ci0JfSBlbHNlIGlmIChTX0lTQkxLKGlub2RlLT5pX21vZGUpIHx8IFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkpIHsKKwljYXNlIFNfSUZESVI6CisJCWlmIChhY2NfbW9kZSAmIE1BWV9XUklURSkKKwkJCXJldHVybiAtRUlTRElSOworCQlicmVhazsKKwljYXNlIFNfSUZCTEs6CisJY2FzZSBTX0lGQ0hSOgogCQlpZiAocGF0aC0+bW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9ERVYpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKLQorCQkvKkZBTExUSFJVKi8KKwljYXNlIFNfSUZJRk86CisJY2FzZSBTX0lGU09DSzoKIAkJZmxhZyAmPSB+T19UUlVOQzsKKwkJYnJlYWs7CiAJfQogCiAJZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBhY2NfbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGltYV9wYXRoX2NoZWNrKHBhdGgsCisJCQkgICAgICAgYWNjX21vZGUgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCS8qCiAJICogQW4gYXBwZW5kLW9ubHkgZmlsZSBtdXN0IGJlIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSBmb3Igd3JpdGluZy4KIAkgKi8KQEAgLTE1NDQsNyArMTU1MCw3IEBACiAJCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUocGF0aCwgMCwKIAkJCQkJICAgICAgIEFUVFJfTVRJTUV8QVRUUl9DVElNRXxBVFRSX09QRU4pOwogCQlpZiAoIWVycm9yKSB7Ci0JCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJCXZmc19kcV9pbml0KGlub2RlKTsKIAogCQkJZXJyb3IgPSBkb190cnVuY2F0ZShkZW50cnksIDAsCiAJCQkJCSAgICBBVFRSX01USU1FfEFUVFJfQ1RJTUV8QVRUUl9PUEVOLApAQCAtMTU1NSw3ICsxNTYxLDcgQEAKIAkJCXJldHVybiBlcnJvcjsKIAl9IGVsc2UKIAkJaWYgKGZsYWcgJiBGTU9ERV9XUklURSkKLQkJCURRVU9UX0lOSVQoaW5vZGUpOworCQkJdmZzX2RxX2luaXQoaW5vZGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTM4LDcgKzE5NDQsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JRFFVT1RfSU5JVChkaXIpOworCXZmc19kcV9pbml0KGRpcik7CiAJZXJyb3IgPSBkaXItPmlfb3AtPm1rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmICghZXJyb3IpCiAJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7CkBAIC0yMDM3LDcgKzIwNDMsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JRFFVT1RfSU5JVChkaXIpOworCXZmc19kcV9pbml0KGRpcik7CiAJZXJyb3IgPSBkaXItPmlfb3AtPm1rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoIWVycm9yKQogCQlmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7CkBAIC0yMTIzLDcgKzIxMjksNyBAQAogCWlmICghZGlyLT5pX29wLT5ybWRpcikKIAkJcmV0dXJuIC1FUEVSTTsKIAotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlkZW50cnlfdW5oYXNoKGRlbnRyeSk7CkBAIC0yMjEwLDcgKzIyMTYsNyBAQAogCWlmICghZGlyLT5pX29wLT51bmxpbmspCiAJCXJldHVybiAtRVBFUk07CiAKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAogCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKGRfbW91bnRwb2ludChkZW50cnkpKQpAQCAtMjMyMSw3ICsyMzI3LDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKIAlpZiAoIWVycm9yKQogCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwpAQCAtMjQwNSw3ICsyNDExLDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKCFlcnJvcikKQEAgLTI2MDQsOCArMjYxMCw4IEBACiAJaWYgKCFvbGRfZGlyLT5pX29wLT5yZW5hbWUpCiAJCXJldHVybiAtRVBFUk07CiAKLQlEUVVPVF9JTklUKG9sZF9kaXIpOwotCURRVU9UX0lOSVQobmV3X2Rpcik7CisJdmZzX2RxX2luaXQob2xkX2Rpcik7CisJdmZzX2RxX2luaXQobmV3X2Rpcik7CiAKIAlvbGRfbmFtZSA9IGZzbm90aWZ5X29sZG5hbWVfaW5pdChvbGRfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggMDZmOGU2My4uMGE0MmUwZSAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTM5NywxMSArMzk3LDEwIEBACiAJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogfQogCi1pbnQgc2ltcGxlX3NldF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit2b2lkIHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCW1udC0+bW50X3NiID0gc2I7CiAJbW50LT5tbnRfcm9vdCA9IGRnZXQoc2ItPnNfcm9vdCk7Ci0JcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0woc2ltcGxlX3NldF9tbnQpOwpAQCAtNzgwLDYgKzc3OSw3IEBACiAJCXsgTU5UX05PQVRJTUUsICIsbm9hdGltZSIgfSwKIAkJeyBNTlRfTk9ESVJBVElNRSwgIixub2RpcmF0aW1lIiB9LAogCQl7IE1OVF9SRUxBVElNRSwgIixyZWxhdGltZSIgfSwKKwkJeyBNTlRfU1RSSUNUQVRJTUUsICIsc3RyaWN0YXRpbWUiIH0sCiAJCXsgMCwgTlVMTCB9CiAJfTsKIAljb25zdCBzdHJ1Y3QgcHJvY19mc19pbmZvICpmc19pbmZvcDsKQEAgLTE5MTksNiArMTkxOSw5IEBACiAJaWYgKGRhdGFfcGFnZSkKIAkJKChjaGFyICopZGF0YV9wYWdlKVtQQUdFX1NJWkUgLSAxXSA9IDA7CiAKKwkvKiBEZWZhdWx0IHRvIHJlbGF0aW1lICovCisJbW50X2ZsYWdzIHw9IE1OVF9SRUxBVElNRTsKKwogCS8qIFNlcGFyYXRlIHRoZSBwZXItbW91bnRwb2ludCBmbGFncyAqLwogCWlmIChmbGFncyAmIE1TX05PU1VJRCkKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT1NVSUQ7CkBAIC0xOTMwLDEzICsxOTMzLDE0IEBACiAJCW1udF9mbGFncyB8PSBNTlRfTk9BVElNRTsKIAlpZiAoZmxhZ3MgJiBNU19OT0RJUkFUSU1FKQogCQltbnRfZmxhZ3MgfD0gTU5UX05PRElSQVRJTUU7Ci0JaWYgKGZsYWdzICYgTVNfUkVMQVRJTUUpCi0JCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CisJaWYgKGZsYWdzICYgTVNfU1RSSUNUQVRJTUUpCisJCW1udF9mbGFncyAmPSB+KE1OVF9SRUxBVElNRSB8IE1OVF9OT0FUSU1FKTsKIAlpZiAoZmxhZ3MgJiBNU19SRE9OTFkpCiAJCW1udF9mbGFncyB8PSBNTlRfUkVBRE9OTFk7CiAKIAlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwKLQkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UKTsKKwkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UIHwKKwkJICAgTVNfU1RSSUNUQVRJTUUpOwogCiAJLyogLi4uIGFuZCBnZXQgdGhlIG1vdW50cG9pbnQgKi8KIAlyZXR2YWwgPSBrZXJuX3BhdGgoZGlyX25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2Rpci5jIGIvZnMvbmNwZnMvZGlyLmMKaW5kZXggMDdlOTcxNS4uOWM1OTA3MiAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvZGlyLmMKKysrIGIvZnMvbmNwZnMvZGlyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIHN0YXRpYyBpbnQgbmNwX2NvbXBhcmVfZGVudHJ5IChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwogc3RhdGljIGludCBuY3BfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9kZW50cnlfb3BlcmF0aW9ucyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IG5jcF9sb29rdXBfdmFsaWRhdGUsCiAJLmRfaGFzaAkJPSBuY3BfaGFzaF9kZW50cnksCkBAIC04Nyw3ICs4Nyw3IEBACiAJLmRfZGVsZXRlCT0gbmNwX2RlbGV0ZV9kZW50cnksCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmNwX3Jvb3RfZGVudHJ5X29wZXJhdGlvbnMgPQorY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9oYXNoCQk9IG5jcF9oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlCT0gbmNwX2NvbXBhcmVfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDliNzI4ZjMuLjU3NDE1OGEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTI1NSw2ICsyNTUsMzIgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBUZXN0IGlmIHR3byBpcDYgc29ja2V0IGFkZHJlc3NlcyByZWZlciB0byB0aGUgc2FtZSBzb2NrZXQgYnkKKyAqIGNvbXBhcmluZyByZWxldmFudCBmaWVsZHMuIFRoZSBwYWRkaW5nIGJ5dGVzIHNwZWNpZmljYWxseSwgYXJlIG5vdAorICogY29tcGFyZWQuIHNpbjZfZmxvd2luZm8gaXMgbm90IGNvbXBhcmVkIGJlY2F1c2UgaXQgb25seSBhZmZlY3RzIFFvUworICogYW5kIHNpbjZfc2NvcGVfaWQgaXMgb25seSBjb21wYXJlZCBpZiB0aGUgYWRkcmVzcyBpcyAibGluayBsb2NhbCIKKyAqIGJlY2F1c2UgImxpbmsgbG9jYWwiIGFkZHJlc3NlcyBuZWVkIG9ubHkgYmUgdW5pcXVlIHRvIGEgc3BlY2lmaWMKKyAqIGxpbmsuIENvbnZlcnNlbHksIG9yZGluYXJ5IHVuaWNhc3QgYWRkcmVzc2VzIG1pZ2h0IGhhdmUgZGlmZmVyZW50CisgKiBzaW42X3Njb3BlX2lkLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSBib3RoIHNvY2tldCBhZGRyZXNzZXMgYXJlIEFGX0lORVQ2LgorICovCitzdGF0aWMgaW50IG5mc19zb2NrYWRkcl9jbXBfaXA2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAorCQkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2ExOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EyOworCisJaWYgKCFpcHY2X2FkZHJfZXF1YWwoJnNhZGRyMS0+c2luNl9hZGRyLAorCQkJICAgICAmc2FkZHIxLT5zaW42X2FkZHIpKQorCQlyZXR1cm4gMDsKKwlpZiAoaXB2Nl9hZGRyX3Njb3BlKCZzYWRkcjEtPnNpbjZfYWRkcikgPT0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCAmJgorCSAgICBzYWRkcjEtPnNpbjZfc2NvcGVfaWQgIT0gc2FkZHIyLT5zaW42X3Njb3BlX2lkKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2FkZHIxLT5zaW42X3BvcnQgPT0gc2FkZHIyLT5zaW42X3BvcnQ7Cit9CiAjZWxzZQogc3RhdGljIGludCBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhMSwKIAkJCQkgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzYTIpCkBAIC0yNzAsOSArMjk2LDUyIEBACiAJcmV0dXJuIG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI0KChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTEsCiAJCQkoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2EyKTsKIH0KKworc3RhdGljIGludCBuZnNfc29ja2FkZHJfY21wX2lwNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBzYTEsCisJCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyICogc2EyKQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKIC8qCisgKiBUZXN0IGlmIHR3byBpcDQgc29ja2V0IGFkZHJlc3NlcyByZWZlciB0byB0aGUgc2FtZSBzb2NrZXQsIGJ5CisgKiBjb21wYXJpbmcgcmVsZXZhbnQgZmllbGRzLiBUaGUgcGFkZGluZyBieXRlcyBzcGVjaWZpY2FsbHksIGFyZQorICogbm90IGNvbXBhcmVkLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSBib3RoIHNvY2tldCBhZGRyZXNzZXMgYXJlIEFGX0lORVQuCisgKi8KK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX2NtcF9pcDQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCisJCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzYWRkcjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2ExOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHIyID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMjsKKworCWlmIChzYWRkcjEtPnNpbl9hZGRyLnNfYWRkciAhPSBzYWRkcjItPnNpbl9hZGRyLnNfYWRkcikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNhZGRyMS0+c2luX3BvcnQgPT0gc2FkZHIyLT5zaW5fcG9ydDsKK30KKworLyoKKyAqIFRlc3QgaWYgdHdvIHNvY2tldCBhZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBzYW1lIGFjdHVhbCBzb2NrZXQsCisgKiBieSBjb21wYXJpbmcgKG9ubHkpIHJlbGV2YW50IGZpZWxkcy4KKyAqLworc3RhdGljIGludCBuZnNfc29ja2FkZHJfY21wKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAorCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQoreworCWlmIChzYTEtPnNhX2ZhbWlseSAhPSBzYTItPnNhX2ZhbWlseSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHNhMS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gbmZzX3NvY2thZGRyX2NtcF9pcDQoc2ExLCBzYTIpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBuZnNfc29ja2FkZHJfY21wX2lwNihzYTEsIHNhMik7CisJfQorCXJldHVybiAwOworfQorCisvKgogICogRmluZCBhIGNsaWVudCBieSBJUCBhZGRyZXNzIGFuZCBwcm90b2NvbCB2ZXJzaW9uCiAgKiAtIHJldHVybnMgTlVMTCBpZiBubyBzdWNoIGNsaWVudAogICovCkBAIC0zNDQsOCArNDEzLDEwIEBACiBzdGF0aWMgc3RydWN0IG5mc19jbGllbnQgKm5mc19tYXRjaF9jbGllbnQoY29uc3Qgc3RydWN0IG5mc19jbGllbnRfaW5pdGRhdGEgKmRhdGEpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IGRhdGEtPmFkZHI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNscCwgJm5mc19jbGllbnRfbGlzdCwgY2xfc2hhcmVfbGluaykgeworCSAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpjbGFwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZjbHAtPmNsX2FkZHI7CiAJCS8qIERvbid0IG1hdGNoIGNsaWVudHMgdGhhdCBmYWlsZWQgdG8gaW5pdGlhbGlzZSBwcm9wZXJseSAqLwogCQlpZiAoY2xwLT5jbF9jb25zX3N0YXRlIDwgMCkKIAkJCWNvbnRpbnVlOwpAQCAtMzU4LDcgKzQyOSw3IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBNYXRjaCB0aGUgZnVsbCBzb2NrZXQgYWRkcmVzcyAqLwotCQlpZiAobWVtY21wKCZjbHAtPmNsX2FkZHIsIGRhdGEtPmFkZHIsIHNpemVvZihjbHAtPmNsX2FkZHIpKSAhPSAwKQorCQlpZiAoIW5mc19zb2NrYWRkcl9jbXAoc2FwLCBjbGFwKSkKIAkJCWNvbnRpbnVlOwogCiAJCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IGUzNWM4MTkuLjc4YmY3MmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTg5OSw3ICs4OTksNyBAQAogCWlwdXQoaW5vZGUpOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gbmZzX2xvb2t1cF9yZXZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IG5mc19kZW50cnlfZGVsZXRlLAogCS5kX2lwdXQJCT0gbmZzX2RlbnRyeV9pcHV0LApAQCAtOTY3LDcgKzk2Nyw3IEBACiAjaWZkZWYgQ09ORklHX05GU19WNAogc3RhdGljIGludCBuZnNfb3Blbl9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mczRfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gbmZzX29wZW5fcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBuZnNfZGVudHJ5X2RlbGV0ZSwKIAkuZF9pcHV0CQk9IG5mc19kZW50cnlfaXB1dCwKQEAgLTE4OTIsOCArMTg5MiwxNCBAQAogCWNhY2hlLmNyZWQgPSBjcmVkOwogCWNhY2hlLmppZmZpZXMgPSBqaWZmaWVzOwogCXN0YXR1cyA9IE5GU19QUk9UTyhpbm9kZSktPmFjY2Vzcyhpbm9kZSwgJmNhY2hlKTsKLQlpZiAoc3RhdHVzICE9IDApCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWlmIChzdGF0dXMgPT0gLUVTVEFMRSkgeworCQkJbmZzX3phcF9jYWNoZXMoaW5vZGUpOworCQkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJCXNldF9iaXQoTkZTX0lOT19TVEFMRSwgJk5GU19JKGlub2RlKS0+ZmxhZ3MpOworCQl9CiAJCXJldHVybiBzdGF0dXM7CisJfQogCW5mc19hY2Nlc3NfYWRkX2NhY2hlKGlub2RlLCAmY2FjaGUpOwogb3V0OgogCWlmICgobWFzayAmIH5jYWNoZS5tYXNrICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKSA9PSAwKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggY2VmNjI1NS4uNmJiZjBlNiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC0yOTIsNyArMjkyLDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CiAJc3RydWN0IG5mc19mYXR0ciBmYXR0cjsKLQlzdHJ1Y3QgcGFnZSAqcGFnZXNbTkZTQUNMX01BWFBBR0VTXSA9IHsgfTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbTkZTQUNMX01BWFBBR0VTXTsKIAlzdHJ1Y3QgbmZzM19zZXRhY2xhcmdzIGFyZ3MgPSB7CiAJCS5pbm9kZSA9IGlub2RlLAogCQkubWFzayA9IE5GU19BQ0wsCkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJLnJwY19hcmdwCT0gJmFyZ3MsCiAJCS5ycGNfcmVzcAk9ICZmYXR0ciwKIAl9OwotCWludCBzdGF0dXMsIGNvdW50OworCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKIAlpZiAoIW5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwgTkZTX0NBUF9BQ0xTKSkKQEAgLTMxOSw2ICszMTksMjAgQEAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQlhcmdzLm1hc2sgfD0gTkZTX0RGQUNMOwogCQlhcmdzLmFjbF9kZWZhdWx0ID0gZGZhY2w7CisJCWFyZ3MubGVuID0gbmZzYWNsX3NpemUoYWNsLCBkZmFjbCk7CisJfSBlbHNlCisJCWFyZ3MubGVuID0gbmZzYWNsX3NpemUoYWNsLCBOVUxMKTsKKworCWlmIChhcmdzLmxlbiA+IE5GU19BQ0xfSU5MSU5FX0JVRlNJWkUpIHsKKwkJdW5zaWduZWQgaW50IG5wYWdlcyA9IDEgKyAoKGFyZ3MubGVuIC0gMSkgPj4gUEFHRV9TSElGVCk7CisKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZG8geworCQkJYXJncy5wYWdlc1thcmdzLm5wYWdlc10gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQkJaWYgKGFyZ3MucGFnZXNbYXJncy5ucGFnZXNdID09IE5VTEwpCisJCQkJZ290byBvdXRfZnJlZXBhZ2VzOworCQkJYXJncy5ucGFnZXMrKzsKKwkJfSB3aGlsZSAoYXJncy5ucGFnZXMgPCBucGFnZXMpOwogCX0KIAogCWRwcmludGsoIk5GUyBjYWxsIHNldGFjbFxuIik7CkBAIC0zMjksMTAgKzM0Myw2IEBACiAJbmZzX3phcF9hY2xfY2FjaGUoaW5vZGUpOwogCWRwcmludGsoIk5GUyByZXBseSBzZXRhY2w6ICVkXG4iLCBzdGF0dXMpOwogCi0JLyogcGFnZXMgbWF5IGhhdmUgYmVlbiBhbGxvY2F0ZWQgYXQgdGhlIHhkciBsYXllci4gKi8KLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBORlNBQ0xfTUFYUEFHRVMgJiYgYXJncy5wYWdlc1tjb3VudF07IGNvdW50KyspCi0JCV9fZnJlZV9wYWdlKGFyZ3MucGFnZXNbY291bnRdKTsKLQogCXN3aXRjaCAoc3RhdHVzKSB7CiAJCWNhc2UgMDoKIAkJCXN0YXR1cyA9IG5mc19yZWZyZXNoX2lub2RlKGlub2RlLCAmZmF0dHIpOwpAQCAtMzQ2LDYgKzM1NiwxMSBAQAogCQljYXNlIC1FTk9UU1VQUDoKIAkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOwogCX0KK291dF9mcmVlcGFnZXM6CisJd2hpbGUgKGFyZ3MubnBhZ2VzICE9IDApIHsKKwkJYXJncy5ucGFnZXMtLTsKKwkJX19mcmVlX3BhZ2UoYXJncy5wYWdlc1thcmdzLm5wYWdlc10pOworCX0KIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczN4ZHIuYyBiL2ZzL25mcy9uZnMzeGRyLmMKaW5kZXggMTFjZGRkZS4uNmNkZWFjZiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczN4ZHIuYworKysgYi9mcy9uZnMvbmZzM3hkci5jCkBAIC04Miw4ICs4MiwxMCBAQAogI2RlZmluZSBORlMzX2NvbW1pdHJlc19zegkoMStORlMzX3djY19kYXRhX3N6KzIpCiAKICNkZWZpbmUgQUNMM19nZXRhY2xhcmdzX3N6CShORlMzX2ZoX3N6KzEpCi0jZGVmaW5lIEFDTDNfc2V0YWNsYXJnc19zegkoTkZTM19maF9zeisxKzIqKDIrNSozKSkKLSNkZWZpbmUgQUNMM19nZXRhY2xyZXNfc3oJKDErTkZTM19wb3N0X29wX2F0dHJfc3orMSsyKigyKzUqMykpCisjZGVmaW5lIEFDTDNfc2V0YWNsYXJnc19zegkoTkZTM19maF9zeisxKyBcCisJCQkJWERSX1FVQURMRU4oTkZTX0FDTF9JTkxJTkVfQlVGU0laRSkpCisjZGVmaW5lIEFDTDNfZ2V0YWNscmVzX3N6CSgxK05GUzNfcG9zdF9vcF9hdHRyX3N6KzErIFwKKwkJCQlYRFJfUVVBRExFTihORlNfQUNMX0lOTElORV9CVUZTSVpFKSkKICNkZWZpbmUgQUNMM19zZXRhY2xyZXNfc3oJKDErTkZTM19wb3N0X29wX2F0dHJfc3opCiAKIC8qCkBAIC03MDMsMjggKzcwNSwxOCBAQAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnMzX3NldGFjbGFyZ3MgKmFyZ3MpCiB7CiAJc3RydWN0IHhkcl9idWYgKmJ1ZiA9ICZyZXEtPnJxX3NuZF9idWY7Ci0JdW5zaWduZWQgaW50IGJhc2UsIGxlbl9pbl9oZWFkLCBsZW4gPSBuZnNhY2xfc2l6ZSgKLQkJKGFyZ3MtPm1hc2sgJiBORlNfQUNMKSAgID8gYXJncy0+YWNsX2FjY2VzcyAgOiBOVUxMLAotCQkoYXJncy0+bWFzayAmIE5GU19ERkFDTCkgPyBhcmdzLT5hY2xfZGVmYXVsdCA6IE5VTEwpOwotCWludCBjb3VudCwgZXJyOworCXVuc2lnbmVkIGludCBiYXNlOworCWludCBlcnI7CiAKIAlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIE5GU19GSChhcmdzLT5pbm9kZSkpOwogCSpwKysgPSBodG9ubChhcmdzLT5tYXNrKTsKLQliYXNlID0gKGNoYXIgKilwIC0gKGNoYXIgKilidWYtPmhlYWQtPmlvdl9iYXNlOwotCS8qIHB1dCBhcyBtdWNoIG9mIHRoZSBhY2xzIGludG8gaGVhZCBhcyBwb3NzaWJsZS4gKi8KLQlsZW5faW5faGVhZCA9IG1pbl90KHVuc2lnbmVkIGludCwgYnVmLT5oZWFkLT5pb3ZfbGVuIC0gYmFzZSwgbGVuKTsKLQlsZW4gLT0gbGVuX2luX2hlYWQ7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHAgKyAobGVuX2luX2hlYWQgPj4gMikpOworCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKKwliYXNlID0gcmVxLT5ycV9zbGVuOwogCi0JZm9yIChjb3VudCA9IDA7IChjb3VudCA8PCBQQUdFX1NISUZUKSA8IGxlbjsgY291bnQrKykgewotCQlhcmdzLT5wYWdlc1tjb3VudF0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIWFyZ3MtPnBhZ2VzW2NvdW50XSkgewotCQkJd2hpbGUgKGNvdW50KQotCQkJCV9fZnJlZV9wYWdlKGFyZ3MtPnBhZ2VzWy0tY291bnRdKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCXhkcl9lbmNvZGVfcGFnZXMoYnVmLCBhcmdzLT5wYWdlcywgMCwgbGVuKTsKKwlpZiAoYXJncy0+bnBhZ2VzICE9IDApCisJCXhkcl9lbmNvZGVfcGFnZXMoYnVmLCBhcmdzLT5wYWdlcywgMCwgYXJncy0+bGVuKTsKKwllbHNlCisJCXJlcS0+cnFfc2xlbiArPSBhcmdzLT5sZW47CiAKIAllcnIgPSBuZnNhY2xfZW5jb2RlKGJ1ZiwgYmFzZSwgYXJncy0+aW5vZGUsCiAJCQkgICAgKGFyZ3MtPm1hc2sgJiBORlNfQUNMKSA/CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCA0ZTRkMzMyLi44NDM0NWRlIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTE3OSw3ICsxNzksNyBAQAogCWludCAoKnJlY292ZXJfbG9jaykoc3RydWN0IG5mczRfc3RhdGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCiAvKiBpbm9kZS5jICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jIGIvZnMvbmZzL25mczRuYW1lc3BhY2UuYwppbmRleCAzMGJlZmMzLi4yYTJhMGE3IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCisrKyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKQEAgLTIxLDcgKzIxLDkgQEAKICNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfVkZTCiAKIC8qCi0gKiBDaGVjayBpZiBmc19yb290IGlzIHZhbGlkCisgKiBDb252ZXJ0IHRoZSBORlN2NCBwYXRobmFtZSBjb21wb25lbnRzIGludG8gYSBzdGFuZGFyZCBwb3NpeCBwYXRoLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIKICAqLwogc3RhdGljIGlubGluZSBjaGFyICpuZnM0X3BhdGhuYW1lX3N0cmluZyhjb25zdCBzdHJ1Y3QgbmZzNF9wYXRobmFtZSAqcGF0aG5hbWUsCiAJCQkJCSBjaGFyICpidWZmZXIsIHNzaXplX3QgYnVmbGVuKQpAQCAtOTksMjEgKzEwMSwyMCBAQAogewogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gRVJSX1BUUigtRU5PRU5UKTsKIAljaGFyICptbnRfcGF0aDsKLQlpbnQgcGFnZTJsZW47CisJdW5zaWduZWQgaW50IG1heGJ1ZmxlbjsKIAl1bnNpZ25lZCBpbnQgczsKIAogCW1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihtbnRfcGF0aCkpCiAJCXJldHVybiBtbnQ7CiAJbW91bnRkYXRhLT5tbnRfcGF0aCA9IG1udF9wYXRoOwotCXBhZ2UyICs9IHN0cmxlbihtbnRfcGF0aCkgKyAxOwotCXBhZ2UybGVuID0gUEFHRV9TSVpFIC0gc3RybGVuKG1udF9wYXRoKSAtIDE7CisJbWF4YnVmbGVuID0gbW50X3BhdGggLSAxIC0gcGFnZTI7CiAKIAlmb3IgKHMgPSAwOyBzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzOyBzKyspIHsKIAkJY29uc3Qgc3RydWN0IG5mczRfc3RyaW5nICpidWYgPSAmbG9jYXRpb24tPnNlcnZlcnNbc107CiAJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CiAKLQkJaWYgKGJ1Zi0+bGVuIDw9IDAgfHwgYnVmLT5sZW4gPj0gUEFHRV9TSVpFKQorCQlpZiAoYnVmLT5sZW4gPD0gMCB8fCBidWYtPmxlbiA+PSBtYXhidWZsZW4pCiAJCQljb250aW51ZTsKIAogCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7CkBAIC0xMjYsOCArMTI3LDggQEAKIAkJCWNvbnRpbnVlOwogCQluZnNfc2V0X3BvcnQobW91bnRkYXRhLT5hZGRyLCBORlNfUE9SVCk7CiAKLQkJc3RybmNweShwYWdlMiwgYnVmLT5kYXRhLCBwYWdlMmxlbik7Ci0JCXBhZ2UyW3BhZ2UybGVuXSA9ICdcMCc7CisJCW1lbWNweShwYWdlMiwgYnVmLT5kYXRhLCBidWYtPmxlbik7CisJCXBhZ2UyW2J1Zi0+bGVuXSA9ICdcMCc7CiAJCW1vdW50ZGF0YS0+aG9zdG5hbWUgPSBwYWdlMjsKIAogCQlzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIlczolcyIsCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IGY2NTk1M2IuLjkyNTAwNjc5NCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTI1OTYsNiArMjU5Niw3IEBACiAJW09QX0xPT0tVUFBdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCiAJW09QX05WRVJJRlldCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCiAJW09QX09QRU5dCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX29wZW4sCisJW09QX09QRU5BVFRSXQkJPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9ub29wLAogCVtPUF9PUEVOX0NPTkZJUk1dCT0gKG5mc2Q0X2VuYyluZnNkNF9lbmNvZGVfb3Blbl9jb25maXJtLAogCVtPUF9PUEVOX0RPV05HUkFERV0JPSAobmZzZDRfZW5jKW5mc2Q0X2VuY29kZV9vcGVuX2Rvd25ncmFkZSwKIAlbT1BfUFVURkhdCQk9IChuZnNkNF9lbmMpbmZzZDRfZW5jb2RlX25vb3AsCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA2ZTUwYWFhLi43ODM3NmI2IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCQkJcHV0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CiAJCQlnb3RvIG91dF9uZnNlcnI7CiAJCX0KLQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKIAl9CiAKIAkvKiBzYW5pdGl6ZSB0aGUgbW9kZSBjaGFuZ2UgKi8KQEAgLTcyMyw3ICs3MjMsNyBAQAogCQllbHNlCiAJCQlmbGFncyA9IE9fV1JPTkxZfE9fTEFSR0VGSUxFOwogCi0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJfQogCSpmaWxwID0gZGVudHJ5X29wZW4oZGdldChkZW50cnkpLCBtbnRnZXQoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KSwKIAkJCSAgICBmbGFncywgY3JlZCk7CkBAIC05OTgsOCArOTk4LDExIEBACiAKIAlpZiAoIUVYX0lTU1lOQyhleHApKQogCQlzdGFibGUgPSAwOwotCWlmIChzdGFibGUgJiYgIUVYX1dHQVRIRVIoZXhwKSkKKwlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpIHsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CisJfQogCiAJLyogV3JpdGUgdGhlIGRhdGEuICovCiAJb2xkZnMgPSBnZXRfZnMoKTsgc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMKaW5kZXggMzMxZjJlOC4uMjIwYzEzZiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuYwpAQCAtMzgwLDYgKzM4MCwxNCBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICp3YXRjaGVzOwogCiAJCS8qCisJCSAqIFdlIGNhbm5vdCBfX2lnZXQoKSBhbiBpbm9kZSBpbiBzdGF0ZSBJX0NMRUFSLCBJX0ZSRUVJTkcsCisJCSAqIElfV0lMTF9GUkVFLCBvciBJX05FVyB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYnkgdGhhdCBwb2ludAorCQkgKiB0aGUgaW5vZGUgY2Fubm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd2F0Y2hlcy4KKwkJICovCisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0NMRUFSfElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQljb250aW51ZTsKKworCQkvKgogCQkgKiBJZiBpX2NvdW50IGlzIHplcm8sIHRoZSBpbm9kZSBjYW5ub3QgaGF2ZSBhbnkgd2F0Y2hlcyBhbmQKIAkJICogZG9pbmcgYW4gX19pZ2V0L2lwdXQgd2l0aCBNU19BQ1RJVkUgY2xlYXIgd291bGQgYWN0dWFsbHkKIAkJICogZXZpY3QgYWxsIGlub2RlcyB3aXRoIHplcm8gaV9jb3VudCBmcm9tIGljYWNoZSB3aGljaCBpcwpAQCAtMzg4LDE0ICszOTYsNiBAQAogCQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpCiAJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBXZSBjYW5ub3QgX19pZ2V0KCkgYW4gaW5vZGUgaW4gc3RhdGUgSV9DTEVBUiwgSV9GUkVFSU5HLCBvcgotCQkgKiBJX1dJTExfRlJFRSB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYnkgdGhhdCBwb2ludCB0aGUgaW5vZGUKLQkJICogY2Fubm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd2F0Y2hlcy4KLQkJICovCi0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0NMRUFSIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpKQotCQkJY29udGludWU7Ci0KIAkJbmVlZF9pcHV0X3RtcCA9IG5lZWRfaXB1dDsKIAkJbmVlZF9pcHV0ID0gTlVMTDsKIAkJLyogSW4gY2FzZSBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IDNhOWU1ZGUuLjE5ZTNhOTYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtMTc2LDcgKzE3Niw4IEBACiAKIAlCVUdfT04oT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKIAltbG9nX2J1Z19vbl9tc2coIW9jZnMyX3NwYXJzZV9hbGxvYyhvc2IpICYmCi0JCQkoT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzICE9IHJlYy0+ZV9jcG9zKSwKKwkJCShPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgIT0KKwkJCSBsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykpLAogCQkJIkRldmljZSAlcywgYXNraW5nIGZvciBzcGFyc2UgYWxsb2NhdGlvbjogaW5vZGUgJWxsdSwgIgogCQkJImNwb3MgJXUsIGNsdXN0ZXJzICV1XG4iLAogCQkJb3NiLT5kZXZfc3RyLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IGEwNjdhNmMuLjhlMTcwOWEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAKIAlpZiAoc2l6ZSA+IFBBR0VfQ0FDSEVfU0laRSB8fAotCSAgICBzaXplID4gb2NmczJfbWF4X2lubGluZV9kYXRhKGlub2RlLT5pX3NiKSkgeworCSAgICBzaXplID4gb2NmczJfbWF4X2lubGluZV9kYXRhX3dpdGhfeGF0dHIoaW5vZGUtPmlfc2IsIGRpKSkgewogCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKIAkJCSAgICAiSW5vZGUgJWxsdSBoYXMgd2l0aCBpbmxpbmUgZGF0YSBoYXMgYmFkIHNpemU6ICVMdSIsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCkBAIC0xNTU1LDYgKzE1NTUsNyBAQAogCWludCByZXQsIHdyaXR0ZW4gPSAwOwogCWxvZmZfdCBlbmQgPSBwb3MgKyBsZW47CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSBOVUxMOwogCiAJbWxvZygwLCAiSW5vZGUgJWxsdSwgd3JpdGUgb2YgJXUgYnl0ZXMgYXQgb2ZmICVsbHUuIGZlYXR1cmVzOiAweCV4XG4iLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sIGxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3MsCkBAIC0xNTg3LDcgKzE1ODgsOSBAQAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGUgd3JpdGUgY2FuIGZpdC4KIAkgKi8KLQlpZiAobW1hcF9wYWdlIHx8IGVuZCA+IG9jZnMyX21heF9pbmxpbmVfZGF0YShpbm9kZS0+aV9zYikpCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXdjLT53X2RpX2JoLT5iX2RhdGE7CisJaWYgKG1tYXBfcGFnZSB8fAorCSAgICBlbmQgPiBvY2ZzMl9tYXhfaW5saW5lX2RhdGFfd2l0aF94YXR0cihpbm9kZS0+aV9zYiwgZGkpKQogCQlyZXR1cm4gMDsKIAogZG9faW5saW5lX3dyaXRlOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGNhY2hlLmMgYi9mcy9vY2ZzMi9kY2FjaGUuYwppbmRleCBlOWQ3YzIwLi43ZDYwNDQ4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kY2FjaGUuYworKysgYi9mcy9vY2ZzMi9kY2FjaGUuYwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJZF9tb3ZlKGRlbnRyeSwgdGFyZ2V0KTsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG9jZnMyX2RlbnRyeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgb2NmczJfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlCQk9IG9jZnMyX2RlbnRyeV9yZXZhbGlkYXRlLAogCS5kX2lwdXQJCQk9IG9jZnMyX2RlbnRyeV9pcHV0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RjYWNoZS5oIGIvZnMvb2NmczIvZGNhY2hlLmgKaW5kZXggZDA2ZTE2Yy4uZmFhMTJlNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGNhY2hlLmgKKysrIGIvZnMvb2NmczIvZGNhY2hlLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgT0NGUzJfRENBQ0hFX0gKICNkZWZpbmUgT0NGUzJfRENBQ0hFX0gKIAotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBvY2ZzMl9kZW50cnlfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBvY2ZzMl9kZW50cnlfb3BzOwogCiBzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgewogCS8qIFVzZSBjb3VudCBvZiBkZW50cnkgbG9jayAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggMDg0YWJhOC4uNGIxMTc2MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC01MzIsNyArNTMyLDggQEAKIAogCQlmZS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihmZWF0IHwgT0NGUzJfSU5MSU5FX0RBVEFfRkwpOwogCi0JCWZlLT5pZDIuaV9kYXRhLmlkX2NvdW50ID0gY3B1X3RvX2xlMTYob2NmczJfbWF4X2lubGluZV9kYXRhKG9zYi0+c2IpKTsKKwkJZmUtPmlkMi5pX2RhdGEuaWRfY291bnQgPSBjcHVfdG9fbGUxNigKKwkJCQlvY2ZzMl9tYXhfaW5saW5lX2RhdGFfd2l0aF94YXR0cihvc2ItPnNiLCBmZSkpOwogCX0gZWxzZSB7CiAJCWZlbCA9ICZmZS0+aWQyLmlfbGlzdDsKIAkJZmVsLT5sX3RyZWVfZGVwdGggPSAwOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYzdhZTQ1YS4uMjMzMmVmNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0xMDcwLDEyICsxMDcwLDYgQEAKIAkJIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX3N5bWxpbmspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tYXhfaW5saW5lX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlyZXR1cm4gc2ItPnNfYmxvY2tzaXplIC0KLQkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2Rpbm9kZSwgaWQyLmlfZGF0YS5pZF9kYXRhKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgb2NmczJfbWF4X2lubGluZV9kYXRhX3dpdGhfeGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCSAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggNGRkZDc4OC4uMjU2M2RmOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYworKysgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC01NDcsOCArNTQ3LDEyIEBACiAJICogd2hlbiBibG9ja3NpemUgPSA1MTIsIG1heSByZXNlcnZlIG9uZSBtb3JlIGNsdXNlciBmb3IKIAkgKiB4YXR0ciBidWNrZXQsIG90aGVyd2lzZSByZXNlcnZlIG9uZSBtZXRhZGF0YSBibG9jawogCSAqIGZvciB0aGVtIGlzIG9rLgorCSAqIElmIHRoaXMgaXMgYSBuZXcgZGlyZWN0b3J5IHdpdGggaW5saW5lIGRhdGEsCisJICogd2UgY2hvb3NlIHRvIHJlc2VydmUgdGhlIGVudGlyZSBpbmxpbmUgYXJlYSBmb3IKKwkgKiBkaXJlY3RvcnkgY29udGVudHMgYW5kIGZvcmNlIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLgogCSAqLwogCWlmIChkaXItPmlfc2ItPnNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgfHwKKwkgICAgKFNfSVNESVIobW9kZSkgJiYgb2NmczJfc3VwcG9ydHNfaW5saW5lX2RhdGEob3NiKSkgfHwKIAkgICAgKHNfc2l6ZSArIGFfc2l6ZSkgPiBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0lCT0RZKSB7CiAJCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIDEsIHhhdHRyX2FjKTsKIAkJaWYgKHJldCkgewpAQCAtNDc5MSwxOSArNDc5NSwzMyBAQAogCQkJCQkJY2hhciAqdmFsLAogCQkJCQkJaW50IHZhbHVlX2xlbikKIHsKLQlpbnQgb2Zmc2V0OworCWludCByZXQsIG9mZnNldCwgYmxvY2tfb2ZmOwogCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4djsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBidWNrZXRfeGgoeHMtPmJ1Y2tldCk7CisJdm9pZCAqYmFzZTsKIAogCUJVR19PTigheHMtPmJhc2UgfHwgIXhlIHx8IG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSk7CiAKLQlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKLQkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKTsKKwlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsIHhoLAorCQkJCQkJeGUgLSB4aC0+eGhfZW50cmllcywKKwkJCQkJCSZibG9ja19vZmYsCisJCQkJCQkmb2Zmc2V0KTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQogCi0JeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikoeHMtPmJhc2UgKyBvZmZzZXQpOworCWJhc2UgPSBidWNrZXRfYmxvY2soeHMtPmJ1Y2tldCwgYmxvY2tfb2ZmKTsKKwl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKShiYXNlICsgb2Zmc2V0ICsKKwkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSk7CiAKLQlyZXR1cm4gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgaGFuZGxlLAotCQkJCQkgICAgICAgeHYsIHZhbCwgdmFsdWVfbGVuKTsKKwlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCBoYW5kbGUsCisJCQkJCSAgICAgIHh2LCB2YWwsIHZhbHVlX2xlbik7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgb2NmczJfcm1feGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLApkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IGEzYTc4Y2UuLjc1YjYxNjcgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCWlmICghZXJyb3IpCiAJCWVycm9yID0gc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSgmcGF0aCwgbGVuZ3RoLCAwKTsKIAlpZiAoIWVycm9yKSB7Ci0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJCWVycm9yID0gZG9fdHJ1bmNhdGUocGF0aC5kZW50cnksIGxlbmd0aCwgMCwgTlVMTCk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggNmQ3MjAyNC4uMzhlMzM3ZCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJcGRldi0+ZGV2dCA9IGRldnQ7CiAKIAkvKiBkZWxheSB1ZXZlbnQgdW50aWwgJ2hvbGRlcnMnIHN1YmRpciBpcyBjcmVhdGVkICovCi0JcGRldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhwZGV2LCAxKTsKIAllcnIgPSBkZXZpY2VfYWRkKHBkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICghcC0+aG9sZGVyX2RpcikKIAkJZ290byBvdXRfZGVsOwogCi0JcGRldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhwZGV2LCAwKTsKIAlpZiAoZmxhZ3MgJiBBRERQQVJUX0ZMQUdfV0hPTEVESVNLKSB7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShwZGV2LCAmZGV2X2F0dHJfd2hvbGVfZGlzayk7CiAJCWlmIChlcnIpCkBAIC00MjIsNyArNDIyLDcgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIocHRibC0+cGFydFtwYXJ0bm9dLCBwKTsKIAogCS8qIHN1cHByZXNzIHVldmVudCBpZiB0aGUgZGlzayBzdXByZXNzZXMgaXQgKi8KLQlpZiAoIWRkZXYtPnVldmVudF9zdXBwcmVzcykKKwlpZiAoIWRldl9nZXRfdWV2ZW50X3N1cHByZXNzKHBkZXYpKQogCQlrb2JqZWN0X3VldmVudCgmcGRldi0+a29iaiwgS09CSl9BREQpOwogCiAJcmV0dXJuIHA7CkBAIC00NTUsNyArNDU1LDcgQEAKIAlkZXZfc2V0X25hbWUoZGRldiwgZGlzay0+ZGlza19uYW1lKTsKIAogCS8qIGRlbGF5IHVldmVudHMsIHVudGlsIHdlIHNjYW5uZWQgcGFydGl0aW9uIHRhYmxlICovCi0JZGRldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAxKTsKIAogCWlmIChkZXZpY2VfYWRkKGRkZXYpKQogCQlyZXR1cm47CkBAIC00OTAsNyArNDkwLDcgQEAKIAogZXhpdDoKIAkvKiBhbm5vdW5jZSBkaXNrIGFmdGVyIHBvc3NpYmxlIHBhcnRpdGlvbnMgYXJlIGNyZWF0ZWQgKi8KLQlkZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRkZXYsIDApOwogCWtvYmplY3RfdWV2ZW50KCZkZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKIAkvKiBhbm5vdW5jZSBwb3NzaWJsZSBwYXJ0aXRpb25zICovCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2libS5jIGIvZnMvcGFydGl0aW9ucy9pYm0uYwppbmRleCAxZTA2NGM0Li40NjI5NzY4IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2libS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKQEAgLTIxLDIwICsyMSwzOCBAQAogICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYQogICogY3lsLWN5bC1oZWFkLWhlYWQgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgc2VjdG9yX3QKIGNjaGgyYmxrIChzdHJ1Y3QgdnRvY19jY2hoICpwdHIsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKSB7Ci0gICAgICAgIHJldHVybiBwdHItPmNjICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCi0JICAgICAgIHB0ci0+aGggKiBnZW8tPnNlY3RvcnM7CisKKwlzZWN0b3JfdCBjeWw7CisJX191MTYgaGVhZDsKKworCS8qZGVjb2RlIGN5bGluZGVyIGFuZCBoZWFkcyBmb3IgbGFyZ2Ugdm9sdW1lcyAqLworCWN5bCA9IHB0ci0+aGggJiAweEZGRjA7CisJY3lsIDw8PSAxMjsKKwljeWwgfD0gcHRyLT5jYzsKKwloZWFkID0gcHRyLT5oaCAmIDB4MDAwRjsKKwlyZXR1cm4gY3lsICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCisJICAgICAgIGhlYWQgKiBnZW8tPnNlY3RvcnM7CiB9CiAKIC8qCiAgKiBjb21wdXRlIHRoZSBibG9jayBudW1iZXIgZnJvbSBhCiAgKiBjeWwtY3lsLWhlYWQtaGVhZC1ibG9jayBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBzZWN0b3JfdAogY2NoaGIyYmxrIChzdHJ1Y3QgdnRvY19jY2hoYiAqcHRyLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykgewotICAgICAgICByZXR1cm4gcHRyLT5jYyAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKwotCQlwdHItPmhoICogZ2VvLT5zZWN0b3JzICsKKworCXNlY3Rvcl90IGN5bDsKKwlfX3UxNiBoZWFkOworCisJLypkZWNvZGUgY3lsaW5kZXIgYW5kIGhlYWRzIGZvciBsYXJnZSB2b2x1bWVzICovCisJY3lsID0gcHRyLT5oaCAmIDB4RkZGMDsKKwljeWwgPDw9IDEyOworCWN5bCB8PSBwdHItPmNjOworCWhlYWQgPSBwdHItPmhoICYgMHgwMDBGOworCXJldHVybgljeWwgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKKwkJaGVhZCAqIGdlby0+c2VjdG9ycyArCiAJCXB0ci0+YjsKIH0KIApAQCAtNDMsMTQgKzYxLDE1IEBACiBpbnQKIGlibV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlpbnQgYmxvY2tzaXplLCBvZmZzZXQsIHNpemUscmVzOwotCWxvZmZfdCBpX3NpemU7CisJaW50IGJsb2Nrc2l6ZSwgcmVzOworCWxvZmZfdCBpX3NpemUsIG9mZnNldCwgc2l6ZSwgZm10X3NpemU7CiAJZGFzZF9pbmZvcm1hdGlvbjJfdCAqaW5mbzsKIAlzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbzsKIAljaGFyIHR5cGVbNV0gPSB7MCx9OwogCWNoYXIgbmFtZVs3XSA9IHswLH07CiAJdW5pb24gbGFiZWxfdCB7Ci0JCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbCB2b2w7CisJCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwgdm9sOworCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIGxueDsKIAkJc3RydWN0IHZ0b2NfY21zX2xhYmVsIGNtczsKIAl9ICpsYWJlbDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwpAQCAtODUsMTQgKzEwNCwxNiBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X3JlYWRlcnI7CiAKLQlzdHJuY3B5ICh0eXBlLCBkYXRhLCA0KTsKLQlpZiAoKCFpbmZvLT5GQkFfbGF5b3V0KSAmJiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSkKLQkJc3RybmNweShuYW1lLCBkYXRhICsgOCwgNik7Ci0JZWxzZQotCQlzdHJuY3B5KG5hbWUsIGRhdGEgKyA0LCA2KTsKIAltZW1jcHkobGFiZWwsIGRhdGEsIHNpemVvZih1bmlvbiBsYWJlbF90KSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAKKwlpZiAoKCFpbmZvLT5GQkFfbGF5b3V0KSAmJiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSkgeworCQlzdHJuY3B5KHR5cGUsIGxhYmVsLT52b2wudm9sbGJsLCA0KTsKKwkJc3RybmNweShuYW1lLCBsYWJlbC0+dm9sLnZvbGlkLCA2KTsKKwl9IGVsc2UgeworCQlzdHJuY3B5KHR5cGUsIGxhYmVsLT5sbngudm9sbGJsLCA0KTsKKwkJc3RybmNweShuYW1lLCBsYWJlbC0+bG54LnZvbGlkLCA2KTsKKwl9CiAJRUJDQVNDKHR5cGUsIDQpOwogCUVCQ0FTQyhuYW1lLCA2KTsKIApAQCAtMTEwLDM2ICsxMzEsNTQgQEAKIAkJCS8qCiAJCQkgKiBWTSBzdHlsZSBDTVMxIGxhYmVsZWQgZGlzawogCQkJICovCisJCQlibG9ja3NpemUgPSBsYWJlbC0+Y21zLmJsb2NrX3NpemU7CiAJCQlpZiAobGFiZWwtPmNtcy5kaXNrX29mZnNldCAhPSAwKSB7CiAJCQkJcHJpbnRrKCJDTVMxLyU4cyhNRFNLKToiLCBuYW1lKTsKIAkJCQkvKiBkaXNrIGlzIHJlc2VydmVkIG1pbmlkaXNrICovCi0JCQkJYmxvY2tzaXplID0gbGFiZWwtPmNtcy5ibG9ja19zaXplOwogCQkJCW9mZnNldCA9IGxhYmVsLT5jbXMuZGlza19vZmZzZXQ7CiAJCQkJc2l6ZSA9IChsYWJlbC0+Y21zLmJsb2NrX2NvdW50IC0gMSkKIAkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoIkNNUzEvJThzOiIsIG5hbWUpOwogCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOwotCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlzaXplID0gbGFiZWwtPmNtcy5ibG9ja19jb3VudAorCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogT2xkIHN0eWxlIExOWDEgb3IgdW5sYWJlbGVkIGRpc2sKLQkJCSAqLwotCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKQotCQkJCXByaW50ayAoIkxOWDEvJThzOiIsIG5hbWUpOwotCQkJZWxzZQotCQkJCXByaW50aygiKG5vbmwpIik7Ci0JCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJCXNpemUgPSBpX3NpemUgPj4gOTsKLQkJfQotCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKKwkJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAogCQkJCSAgICAgIHNpemUtb2Zmc2V0KihibG9ja3NpemUgPj4gOSkpOworCQl9IGVsc2UgeworCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKSB7CisJCQkJcHJpbnRrKCJMTlgxLyU4czoiLCBuYW1lKTsKKwkJCQlpZiAobGFiZWwtPmxueC5sZGxfdmVyc2lvbiA9PSAweGYyKSB7CisJCQkJCWZtdF9zaXplID0gbGFiZWwtPmxueC5mb3JtYXR0ZWRfYmxvY2tzCisJCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CisJCQkJfSBlbHNlIGlmICghc3RyY21wKGluZm8tPnR5cGUsICJFQ0tEIikpIHsKKwkJCQkJLyogZm9ybWF0ZWQgdy9vIGxhcmdlIHZvbHVtZSBzdXBwb3J0ICovCisJCQkJCWZtdF9zaXplID0gZ2VvLT5jeWxpbmRlcnMgKiBnZW8tPmhlYWRzCisJCQkJCSAgICAgICogZ2VvLT5zZWN0b3JzICogKGJsb2Nrc2l6ZSA+PiA5KTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBvbGQgbGFiZWwgYW5kIG5vIHVzYWJsZSBkaXNrIGdlb21ldHJ5CisJCQkJCSAqIChlLmcuIERJQUcpICovCisJCQkJCWZtdF9zaXplID0gaV9zaXplID4+IDk7CisJCQkJfQorCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlpZiAoZm10X3NpemUgPCBzaXplKQorCQkJCQlzaXplID0gZm10X3NpemU7CisJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHVubGFiZWxlZCBkaXNrICovCisJCQkJcHJpbnRrKCIobm9ubCkiKTsKKwkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CisJCQl9CisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKKwkJCQkgICAgICBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJfQogCX0gZWxzZSBpZiAoaW5mby0+Zm9ybWF0ID09IERBU0RfRk9STUFUX0NETCkgewogCQkvKgogCQkgKiBOZXcgc3R5bGUgQ0RMIGZvcm1hdHRlZCBkaXNrCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgYmxrOworCQlzZWN0b3JfdCBibGs7CiAJCWludCBjb3VudGVyOwogCiAJCS8qCkBAIC0xNjYsNyArMjA1LDggQEAKIAkJCQkvKiBza2lwIEZNVDQgLyBGTVQ1IC8gRk1UNyBsYWJlbHMgKi8KIAkJCQlpZiAoZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNCddCiAJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzUnXQotCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc3J10pIHsKKwkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNyddCisJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzknXSkgewogCQkJCQlibGsrKzsKIAkJCQkJZGF0YSA9IHJlYWRfZGV2X3NlY3RvcihiZGV2LCBibGsgKgogCQkJCQkJCSAgICAgICAoYmxvY2tzaXplLzUxMiksCkBAIC0xNzQsOCArMjE0LDkgQEAKIAkJCQkJY29udGludWU7CiAJCQkJfQogCi0JCQkJLyogb25seSBGTVQxIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KLQkJCQlpZiAoZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snMSddKQorCQkJCS8qIG9ubHkgRk1UMSBhbmQgOCBsYWJlbHMgdmFsaWQgYXQgdGhpcyBwb2ludCAqLworCQkJCWlmIChmMS5EUzFGTVRJRCAhPSBfYXNjZWJjWycxJ10gJiYKKwkJCQkgICAgZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snOCddKQogCQkJCQlicmVhazsKIAogCQkJCS8qIE9LLCB3ZSBnb3QgdmFsaWQgcGFydGl0aW9uIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAzYTQ4YmE1Li40YWY3YWE1IDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC02NjcsMTAgKzY2Nyw3IEBACiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfcmVhZGVycyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNjg0LDEwICs2ODEsNyBAQAogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTY5OSwxOCArNjkzLDE0IEBACiAJaW50IHJldHZhbDsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwotCi0JaWYgKHJldHZhbCA+PSAwKQorCWlmIChyZXR2YWwgPj0gMCkgewogCQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnBpcGUtPmZhc3luY193cml0ZXJzKTsKLQorCQlpZiAocmV0dmFsIDwgMCkgLyogdGhpcyBjYW4gaGFwcGVuIG9ubHkgaWYgb24gPT0gVCAqLworCQkJZmFzeW5jX2hlbHBlcigtMSwgZmlscCwgMCwgJnBpcGUtPmZhc3luY19yZWFkZXJzKTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtODcwLDcgKzg2MCw3IEBACiAJCQkJZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlwZWZzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlCT0gcGlwZWZzX2RlbGV0ZV9kZW50cnksCiAJLmRfZG5hbWUJPSBwaXBlZnNfZG5hbWUsCiB9OwpAQCAtMTAzNCwxMSArMTAyNCw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZG9fcGlwZShpbnQgKmZkKQotewotCXJldHVybiBkb19waXBlX2ZsYWdzKGZkLCAwKTsKLX0KLQogLyoKICAqIHN5c19waXBlKCkgaXMgdGhlIG5vcm1hbCBDIGNhbGxpbmcgc3RhbmRhcmQgZm9yIGNyZWF0aW5nCiAgKiBhIHBpcGUuIEl0J3Mgbm90IHRoZSB3YXkgVW5peCB0cmFkaXRpb25hbGx5IGRvZXMgdGhpcywgdGhvdWdoLgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCAwYzlkZTE5Li5hZWY2ZDU1IDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIAlyZXR1cm4gIXByb2NfcGlkKGRlbnRyeS0+ZF9pbm9kZSktPnRhc2tzW1BJRFRZUEVfUElEXS5maXJzdDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaWRfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSBwaWRfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBwaWRfZGVsZXRlX2RlbnRyeSwKQEAgLTE3MTcsNyArMTcxNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdGlkX2ZkX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdGlkX2ZkX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gdGlkX2ZkX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gcGlkX2RlbGV0ZV9kZW50cnksCkBAIC0yMzM5LDcgKzIzMzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2NfYmFzZV9kZW50cnlfb3BlcmF0aW9ucyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2NfYmFzZV9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IHByb2NfYmFzZV9yZXZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IHBpZF9kZWxldGVfZGVudHJ5LApAQCAtMzA2Niw3ICszMDY2LDYgQEAKIAlpbnQgcmV0dmFsID0gLUVOT0VOVDsKIAlpbm9fdCBpbm87CiAJaW50IHRpZDsKLQl1bnNpZ25lZCBsb25nIHBvcyA9IGZpbHAtPmZfcG9zOyAgLyogYXZvaWRpbmcgImxvbmcgbG9uZyIgZmlscC0+Zl9wb3MgKi8KIAlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKIAl0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CkBAIC0zMDgzLDE4ICszMDgyLDE4IEBACiAJCWdvdG8gb3V0X25vX3Rhc2s7CiAJcmV0dmFsID0gMDsKIAotCXN3aXRjaCAocG9zKSB7CisJc3dpdGNoICgodW5zaWduZWQgbG9uZylmaWxwLT5mX3BvcykgewogCWNhc2UgMDoKIAkJaW5vID0gaW5vZGUtPmlfaW5vOwotCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuIiwgMSwgcG9zLCBpbm8sIERUX0RJUikgPCAwKQorCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuIiwgMSwgZmlscC0+Zl9wb3MsIGlubywgRFRfRElSKSA8IDApCiAJCQlnb3RvIG91dDsKLQkJcG9zKys7CisJCWZpbHAtPmZfcG9zKys7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMToKIAkJaW5vID0gcGFyZW50X2lubyhkZW50cnkpOwotCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuLiIsIDIsIHBvcywgaW5vLCBEVF9ESVIpIDwgMCkKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBmaWxwLT5mX3BvcywgaW5vLCBEVF9ESVIpIDwgMCkKIAkJCWdvdG8gb3V0OwotCQlwb3MrKzsKKwkJZmlscC0+Zl9wb3MrKzsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJfQogCkBAIC0zMTA0LDkgKzMxMDMsOSBAQAogCW5zID0gZmlscC0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKIAl0aWQgPSAoaW50KWZpbHAtPmZfdmVyc2lvbjsKIAlmaWxwLT5mX3ZlcnNpb24gPSAwOwotCWZvciAodGFzayA9IGZpcnN0X3RpZChsZWFkZXIsIHRpZCwgcG9zIC0gMiwgbnMpOworCWZvciAodGFzayA9IGZpcnN0X3RpZChsZWFkZXIsIHRpZCwgZmlscC0+Zl9wb3MgLSAyLCBucyk7CiAJICAgICB0YXNrOwotCSAgICAgdGFzayA9IG5leHRfdGlkKHRhc2spLCBwb3MrKykgeworCSAgICAgdGFzayA9IG5leHRfdGlkKHRhc2spLCBmaWxwLT5mX3BvcysrKSB7CiAJCXRpZCA9IHRhc2tfcGlkX25yX25zKHRhc2ssIG5zKTsKIAkJaWYgKHByb2NfdGFza19maWxsX2NhY2hlKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgdGFzaywgdGlkKSA8IDApIHsKIAkJCS8qIHJldHVybmluZyB0aGlzIHRnaWQgZmFpbGVkLCBzYXZlIGl0IGFzIHRoZSBmaXJzdApAQCAtMzExNyw3ICszMTE2LDYgQEAKIAkJfQogCX0KIG91dDoKLQlmaWxwLT5mX3BvcyA9IHBvczsKIAlwdXRfdGFza19zdHJ1Y3QobGVhZGVyKTsKIG91dF9ub190YXNrOgogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IGRiN2ZhNWMuLjVkMjk4OWUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfZGVsZXRlCT0gcHJvY19kZWxldGVfZGVudHJ5LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19zeXNjdGwuYyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwppbmRleCA5NGZjZmZmLi45YjFlNGU5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKKysrIGIvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19zeXNfZGVudHJ5X29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3N5c19maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19zeXNfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc3lzX2Rpcl9maWxlX29wZXJhdGlvbnM7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAlyZXR1cm4gIXN5c2N0bF9pc19zZWVuKFBST0NfSShkZW50cnktPmRfaW5vZGUpLT5zeXNjdGwpOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2Nfc3lzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gcHJvY19zeXNfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBwcm9jX3N5c19kZWxldGUsCiAJLmRfY29tcGFyZQk9IHByb2Nfc3lzX2NvbXBhcmUsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IGY2Mjk5YTIuLjFlMTVhMmIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC04Myw3ICs4Myw4IEBACiAJCW5zLT5wcm9jX21udCA9IG1udDsKIAl9CiAKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2Nfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvS2NvbmZpZyBiL2ZzL3F1b3RhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0N2UwMQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3F1b3RhL0tjb25maWcKQEAgLTAsMCArMSw1OSBAQAorIworIyAgUXVvdGEgY29uZmlndXJhdGlvbgorIworCitjb25maWcgUVVPVEEKKwlib29sICJRdW90YSBzdXBwb3J0IgorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNldCBwZXIgdXNlciBsaW1pdHMgZm9yIGRpc2sKKwkgIHVzYWdlIChhbHNvIGNhbGxlZCBkaXNrIHF1b3RhcykuIEN1cnJlbnRseSwgaXQgd29ya3MgZm9yIHRoZQorCSAgZXh0MiwgZXh0MywgYW5kIHJlaXNlcmZzIGZpbGUgc3lzdGVtLiBleHQzIGFsc28gc3VwcG9ydHMgam91cm5hbGxlZAorCSAgcXVvdGFzIGZvciB3aGljaCB5b3UgZG9uJ3QgbmVlZCB0byBydW4gcXVvdGFjaGVjayg4KSBhZnRlciBhbiB1bmNsZWFuCisJICBzaHV0ZG93bi4KKwkgIEZvciBmdXJ0aGVyIGRldGFpbHMsIHJlYWQgdGhlIFF1b3RhIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCisJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LCBvciB0aGUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZAorCSAgd2l0aCB0aGUgcXVvdGEgdG9vbHMuIFByb2JhYmx5IHRoZSBxdW90YSBzdXBwb3J0IGlzIG9ubHkgdXNlZnVsIGZvcgorCSAgbXVsdGkgdXNlciBzeXN0ZW1zLiBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKKwlib29sICJSZXBvcnQgcXVvdGEgbWVzc2FnZXMgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIFFVT1RBICYmIE5FVAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBxdW90YSB3YXJuaW5ncyAoYWJvdXQgZXhjZWVkaW5nIHNvZnRsaW1pdCwgcmVhY2hpbmcKKwkgIGhhcmRsaW1pdCwgZXRjLikgd2lsbCBiZSByZXBvcnRlZCB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlLiBJZiB1bnN1cmUsCisJICBzYXkgWS4KKworY29uZmlnIFBSSU5UX1FVT1RBX1dBUk5JTkcKKwlib29sICJQcmludCBxdW90YSB3YXJuaW5ncyB0byBjb25zb2xlIChPQlNPTEVURSkiCisJZGVwZW5kcyBvbiBRVU9UQQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBxdW90YSB3YXJuaW5ncyAoYWJvdXQgZXhjZWVkaW5nIHNvZnRsaW1pdCwgcmVhY2hpbmcKKwkgIGhhcmRsaW1pdCwgZXRjLikgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBwcm9jZXNzJyBjb250cm9sbGluZyB0ZXJtaW5hbC4KKwkgIE5vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBkZXByZWNhdGVkIGFuZCBtYXkgZ28gYXdheSBpbgorCSAgZnV0dXJlLiBQbGVhc2UgdXNlIG5vdGlmaWNhdGlvbiB2aWEgbmV0bGluayBzb2NrZXQgaW5zdGVhZC4KKworIyBHZW5lcmljIHN1cHBvcnQgZm9yIHRyZWUgc3RydWN0dXJlZCBxdW90YSBmaWxlcy4gU2VsZWN0ZWQgd2hlbiBuZWVkZWQuCitjb25maWcgUVVPVEFfVFJFRQorCSB0cmlzdGF0ZQorCitjb25maWcgUUZNVF9WMQorCXRyaXN0YXRlICJPbGQgcXVvdGEgZm9ybWF0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBRVU9UQQorCWhlbHAKKwkgIFRoaXMgcXVvdGEgZm9ybWF0IHdhcyAoaXMpIHVzZWQgYnkga2VybmVscyBlYXJsaWVyIHRoYW4gMi40LjIyLiBJZgorCSAgeW91IGhhdmUgcXVvdGEgd29ya2luZyBhbmQgeW91IGRvbid0IHdhbnQgdG8gY29udmVydCB0byBuZXcgcXVvdGEKKwkgIGZvcm1hdCBzYXkgWSBoZXJlLgorCitjb25maWcgUUZNVF9WMgorCXRyaXN0YXRlICJRdW90YSBmb3JtYXQgdjIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFFVT1RBCisJc2VsZWN0IFFVT1RBX1RSRUUKKwloZWxwCisJICBUaGlzIHF1b3RhIGZvcm1hdCBhbGxvd3MgdXNpbmcgcXVvdGFzIHdpdGggMzItYml0IFVJRHMvR0lEcy4gSWYgeW91CisJICBuZWVkIHRoaXMgZnVuY3Rpb25hbGl0eSBzYXkgWSBoZXJlLgorCitjb25maWcgUVVPVEFDVEwKKwlib29sCisJZGVwZW5kcyBvbiBYRlNfUVVPVEEgfHwgUVVPVEEKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL01ha2VmaWxlIGIvZnMvcXVvdGEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1YTA4MwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3F1b3RhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBmaWxlc3lzdGVtcy4KKyMKKyMgMTQgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KKyMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuCisjCisKK29iai15IDo9CisKK29iai0kKENPTkZJR19RVU9UQSkJCSs9IGRxdW90Lm8KK29iai0kKENPTkZJR19RRk1UX1YxKQkJKz0gcXVvdGFfdjEubworb2JqLSQoQ09ORklHX1FGTVRfVjIpCQkrPSBxdW90YV92Mi5vCitvYmotJChDT05GSUdfUVVPVEFfVFJFRSkJKz0gcXVvdGFfdHJlZS5vCitvYmotJChDT05GSUdfUVVPVEFDVEwpCQkrPSBxdW90YS5vCmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBmcy9kcXVvdC5jCnJlbmFtZSB0byBmcy9xdW90YS9kcXVvdC5jCmluZGV4IGJjYTNjYWMuLjJjYTk2N2EgMTAwNjQ0Ci0tLSBhL2ZzL2RxdW90LmMKKysrIGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTI5LDkgKzEyOSwxMCBAQAogICogaV9tdXRleCBvbiBxdW90YSBmaWxlcyBpcyBzcGVjaWFsIChpdCdzIGJlbG93IGRxaW9fbXV0ZXgpCiAgKi8KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhkcV9saXN0X2xvY2spOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkcV9zdGF0ZV9sb2NrKTsKLURFRklORV9TUElOTE9DSyhkcV9kYXRhX2xvY2spOworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9saXN0X2xvY2spOworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9zdGF0ZV9sb2NrKTsKK19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9kYXRhX2xvY2spOworRVhQT1JUX1NZTUJPTChkcV9kYXRhX2xvY2spOwogCiBzdGF0aWMgY2hhciAqcXVvdGF0eXBlc1tdID0gSU5JVFFGTkFNRVM7CiBzdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpxdW90YV9mb3JtYXRzOwkvKiBMaXN0IG9mIHJlZ2lzdGVyZWQgZm9ybWF0cyAqLwpAQCAtMTQ4LDM1ICsxNDksNDYgQEAKIAlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfcXVvdGFfZm9ybWF0KTsKIAogdm9pZCB1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCkKIHsKIAlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKiphY3RxZjsKIAogCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlmb3IgKGFjdHFmID0gJnF1b3RhX2Zvcm1hdHM7ICphY3RxZiAmJiAqYWN0cWYgIT0gZm10OyBhY3RxZiA9ICYoKmFjdHFmKS0+cWZfbmV4dCk7CisJZm9yIChhY3RxZiA9ICZxdW90YV9mb3JtYXRzOyAqYWN0cWYgJiYgKmFjdHFmICE9IGZtdDsKKwkgICAgIGFjdHFmID0gJigqYWN0cWYpLT5xZl9uZXh0KQorCQk7CiAJaWYgKCphY3RxZikKIAkJKmFjdHFmID0gKCphY3RxZiktPnFmX25leHQ7CiAJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KTsKIAogc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZmluZF9xdW90YV9mb3JtYXQoaW50IGlkKQogewogCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqYWN0cWY7CiAKIAlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JZm9yIChhY3RxZiA9IHF1b3RhX2Zvcm1hdHM7IGFjdHFmICYmIGFjdHFmLT5xZl9mbXRfaWQgIT0gaWQ7IGFjdHFmID0gYWN0cWYtPnFmX25leHQpOworCWZvciAoYWN0cWYgPSBxdW90YV9mb3JtYXRzOyBhY3RxZiAmJiBhY3RxZi0+cWZfZm10X2lkICE9IGlkOworCSAgICAgYWN0cWYgPSBhY3RxZi0+cWZfbmV4dCkKKwkJOwogCWlmICghYWN0cWYgfHwgIXRyeV9tb2R1bGVfZ2V0KGFjdHFmLT5xZl9vd25lcikpIHsKIAkJaW50IHFtOwogCiAJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwogCQkKLQkJZm9yIChxbSA9IDA7IG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICYmIG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICE9IGlkOyBxbSsrKTsKLQkJaWYgKCFtb2R1bGVfbmFtZXNbcW1dLnFtX2ZtdF9pZCB8fCByZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZXNbcW1dLnFtX21vZF9uYW1lKSkKKwkJZm9yIChxbSA9IDA7IG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICYmCisJCQkgICAgIG1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkICE9IGlkOyBxbSsrKQorCQkJOworCQlpZiAoIW1vZHVsZV9uYW1lc1txbV0ucW1fZm10X2lkIHx8CisJCSAgICByZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZXNbcW1dLnFtX21vZF9uYW1lKSkKIAkJCXJldHVybiBOVUxMOwogCiAJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJZm9yIChhY3RxZiA9IHF1b3RhX2Zvcm1hdHM7IGFjdHFmICYmIGFjdHFmLT5xZl9mbXRfaWQgIT0gaWQ7IGFjdHFmID0gYWN0cWYtPnFmX25leHQpOworCQlmb3IgKGFjdHFmID0gcXVvdGFfZm9ybWF0czsgYWN0cWYgJiYgYWN0cWYtPnFmX2ZtdF9pZCAhPSBpZDsKKwkJICAgICBhY3RxZiA9IGFjdHFmLT5xZl9uZXh0KQorCQkJOwogCQlpZiAoYWN0cWYgJiYgIXRyeV9tb2R1bGVfZ2V0KGFjdHFmLT5xZl9vd25lcikpCiAJCQlhY3RxZiA9IE5VTEw7CiAJfQpAQCAtMjE1LDYgKzIyNyw3IEBACiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmRxdW90X2hhc2g7CiAKIHN0cnVjdCBkcXN0YXRzIGRxc3RhdHM7CitFWFBPUlRfU1lNQk9MKGRxc3RhdHMpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogaGFzaGZuKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBpZCwgaW50IHR5cGUpCkBAIC0yMzAsNyArMjQzLDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGluc2VydF9kcXVvdF9oYXNoKHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBkcXVvdF9oYXNoICsgaGFzaGZuKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX2lkLCBkcXVvdC0+ZHFfdHlwZSk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJaGVhZCA9IGRxdW90X2hhc2ggKyBoYXNoZm4oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfaWQsIGRxdW90LT5kcV90eXBlKTsKIAlobGlzdF9hZGRfaGVhZCgmZHF1b3QtPmRxX2hhc2gsIGhlYWQpOwogfQogCkBAIC0yMzksMTcgKzI1MywxOSBAQAogCWhsaXN0X2RlbF9pbml0KCZkcXVvdC0+ZHFfaGFzaCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRxdW90ICpmaW5kX2RxdW90KHVuc2lnbmVkIGludCBoYXNoZW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQorc3RhdGljIHN0cnVjdCBkcXVvdCAqZmluZF9kcXVvdCh1bnNpZ25lZCBpbnQgaGFzaGVudCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQl1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CiAKIAlobGlzdF9mb3JfZWFjaCAobm9kZSwgZHF1b3RfaGFzaCtoYXNoZW50KSB7CiAJCWRxdW90ID0gaGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGRxdW90LCBkcV9oYXNoKTsKLQkJaWYgKGRxdW90LT5kcV9zYiA9PSBzYiAmJiBkcXVvdC0+ZHFfaWQgPT0gaWQgJiYgZHF1b3QtPmRxX3R5cGUgPT0gdHlwZSkKKwkJaWYgKGRxdW90LT5kcV9zYiA9PSBzYiAmJiBkcXVvdC0+ZHFfaWQgPT0gaWQgJiYKKwkJICAgIGRxdW90LT5kcV90eXBlID09IHR5cGUpCiAJCQlyZXR1cm4gZHF1b3Q7CiAJfQotCXJldHVybiBOT0RRVU9UOworCXJldHVybiBOVUxMOwogfQogCiAvKiBBZGQgYSBkcXVvdCB0byB0aGUgdGFpbCBvZiB0aGUgZnJlZSBsaXN0ICovCkBAIC0zMDksNiArMzI1LDcgQEAKIAlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7CiAKIC8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgZHFfbGlzdF9sb2NrICovCiBzdGF0aWMgaW5saW5lIGludCBjbGVhcl9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQpAQCAtMzQ1LDggKzM2MiwxMCBAQAogCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmICFkcXVvdC0+ZHFfb2ZmKSB7CiAJCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5jb21taXRfZHFibGsoZHF1b3QpOwogCQkvKiBXcml0ZSB0aGUgaW5mbyBpZiBuZWVkZWQgKi8KLQkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpCi0JCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKKwkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpIHsKKwkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKAorCQkJCQkJZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7CisJCX0KIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dF9pb2xvY2s7CiAJCWlmIChyZXQyIDwgMCkgewpAQCAtMzYwLDYgKzM3OSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfYWNxdWlyZSk7CiAKIC8qCiAgKglXcml0ZSBkcXVvdCB0byBkaXNrCkBAIC0zODAsOCArNDAwLDEwIEBACiAJICogPT4gd2UgaGF2ZSBiZXR0ZXIgbm90IHdyaXRpbmcgaXQgKi8KIAlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKSB7CiAJCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5jb21taXRfZHFibGsoZHF1b3QpOwotCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkKLQkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOworCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkgeworCQkJcmV0MiA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT53cml0ZV9maWxlX2luZm8oCisJCQkJCQlkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKKwkJfQogCQlpZiAocmV0ID49IDApCiAJCQlyZXQgPSByZXQyOwogCX0KQEAgLTM4OSw2ICs0MTEsNyBAQAogCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRxdW90X2NvbW1pdCk7CiAKIC8qCiAgKglSZWxlYXNlIGRxdW90CkBAIC00MDYsOCArNDI5LDEwIEBACiAJaWYgKGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5yZWxlYXNlX2RxYmxrKSB7CiAJCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5yZWxlYXNlX2RxYmxrKGRxdW90KTsKIAkJLyogV3JpdGUgdGhlIGluZm8gKi8KLQkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpCi0JCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKKwkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpIHsKKwkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKAorCQkJCQkJZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7CisJCX0KIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gcmV0MjsKIAl9CkBAIC00MTcsNiArNDQyLDcgQEAKIAltdXRleF91bmxvY2soJmRxdW90LT5kcV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlKTsKIAogdm9pZCBkcXVvdF9kZXN0cm95KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CkBAIC01MTYsNiArNTQyLDcgQEAKIAltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3Rfc2Nhbl9hY3RpdmUpOwogCiBpbnQgdmZzX3F1b3RhX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiB7CkBAIC01MzMsNyArNTYwLDggQEAKIAkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwogCQlkaXJ0eSA9ICZkcW9wdC0+aW5mb1tjbnRdLmRxaV9kaXJ0eV9saXN0OwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoZGlydHkpKSB7Ci0JCQlkcXVvdCA9IGxpc3RfZmlyc3RfZW50cnkoZGlydHksIHN0cnVjdCBkcXVvdCwgZHFfZGlydHkpOworCQkJZHF1b3QgPSBsaXN0X2ZpcnN0X2VudHJ5KGRpcnR5LCBzdHJ1Y3QgZHF1b3QsCisJCQkJCQkgZHFfZGlydHkpOwogCQkJLyogRGlydHkgYW5kIGluYWN0aXZlIGNhbiBiZSBvbmx5IGJhZCBkcXVvdC4uLiAqLwogCQkJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpIHsKIAkJCQljbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCk7CkBAIC01NjMsNiArNTkxLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfc3luYyk7CiAKIC8qIEZyZWUgdW51c2VkIGRxdW90cyBmcm9tIGNhY2hlICovCiBzdGF0aWMgdm9pZCBwcnVuZV9kcWNhY2hlKGludCBjb3VudCkKQEAgLTY3Miw2ICs3MDEsNyBAQAogCXB1dF9kcXVvdF9sYXN0KGRxdW90KTsKIAlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0woZHFwdXQpOwogCiBzdHJ1Y3QgZHF1b3QgKmRxdW90X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewpAQCAtNjg1LDcgKzcxNSw3IEBACiAKIAlkcXVvdCA9IHNiLT5kcV9vcC0+YWxsb2NfZHF1b3Qoc2IsIHR5cGUpOwogCWlmKCFkcXVvdCkKLQkJcmV0dXJuIE5PRFFVT1Q7CisJCXJldHVybiBOVUxMOwogCiAJbXV0ZXhfaW5pdCgmZHF1b3QtPmRxX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZkcXVvdC0+ZHFfZnJlZSk7CkBAIC03MTEsMTAgKzc0MSwxMCBAQAogc3RydWN0IGRxdW90ICpkcWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQogewogCXVuc2lnbmVkIGludCBoYXNoZW50ID0gaGFzaGZuKHNiLCBpZCwgdHlwZSk7Ci0Jc3RydWN0IGRxdW90ICpkcXVvdCA9IE5PRFFVT1QsICplbXB0eSA9IE5PRFFVT1Q7CisJc3RydWN0IGRxdW90ICpkcXVvdCA9IE5VTEwsICplbXB0eSA9IE5VTEw7CiAKICAgICAgICAgaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKLQkJcmV0dXJuIE5PRFFVT1Q7CisJCXJldHVybiBOVUxMOwogd2Vfc2xlcHQ6CiAJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwogCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CkBAIC03MjUsMTUgKzc1NSwxNyBAQAogCX0KIAlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7CiAKLQlpZiAoKGRxdW90ID0gZmluZF9kcXVvdChoYXNoZW50LCBzYiwgaWQsIHR5cGUpKSA9PSBOT0RRVU9UKSB7Ci0JCWlmIChlbXB0eSA9PSBOT0RRVU9UKSB7CisJZHF1b3QgPSBmaW5kX2RxdW90KGhhc2hlbnQsIHNiLCBpZCwgdHlwZSk7CisJaWYgKCFkcXVvdCkgeworCQlpZiAoIWVtcHR5KSB7CiAJCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJCWlmICgoZW1wdHkgPSBnZXRfZW1wdHlfZHF1b3Qoc2IsIHR5cGUpKSA9PSBOT0RRVU9UKQorCQkJZW1wdHkgPSBnZXRfZW1wdHlfZHF1b3Qoc2IsIHR5cGUpOworCQkJaWYgKCFlbXB0eSkKIAkJCQlzY2hlZHVsZSgpOwkvKiBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQuLi4gKi8KIAkJCWdvdG8gd2Vfc2xlcHQ7CiAJCX0KIAkJZHF1b3QgPSBlbXB0eTsKLQkJZW1wdHkgPSBOT0RRVU9UOworCQllbXB0eSA9IE5VTEw7CiAJCWRxdW90LT5kcV9pZCA9IGlkOwogCQkvKiBhbGwgZHF1b3RzIGdvIG9uIHRoZSBpbnVzZV9saXN0ICovCiAJCXB1dF9pbnVzZShkcXVvdCk7CkBAIC03NDksMTMgKzc4MSwxNCBAQAogCQlkcXN0YXRzLmxvb2t1cHMrKzsKIAkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CiAJfQotCS8qIFdhaXQgZm9yIGRxX2xvY2sgLSBhZnRlciB0aGlzIHdlIGtub3cgdGhhdCBlaXRoZXIgZHF1b3RfcmVsZWFzZSgpIGlzIGFscmVhZHkKLQkgKiBmaW5pc2hlZCBvciBpdCB3aWxsIGJlIGNhbmNlbGVkIGR1ZSB0byBkcV9jb3VudCA+IDEgdGVzdCAqLworCS8qIFdhaXQgZm9yIGRxX2xvY2sgLSBhZnRlciB0aGlzIHdlIGtub3cgdGhhdCBlaXRoZXIgZHF1b3RfcmVsZWFzZSgpIGlzCisJICogYWxyZWFkeSBmaW5pc2hlZCBvciBpdCB3aWxsIGJlIGNhbmNlbGVkIGR1ZSB0byBkcV9jb3VudCA+IDEgdGVzdCAqLwogCXdhaXRfb25fZHF1b3QoZHF1b3QpOwotCS8qIFJlYWQgdGhlIGRxdW90IGFuZCBpbnN0YW50aWF0ZSBpdCAoZXZlcnl0aGluZyBkb25lIG9ubHkgaWYgbmVlZGVkKSAqLwotCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmIHNiLT5kcV9vcC0+YWNxdWlyZV9kcXVvdChkcXVvdCkgPCAwKSB7CisJLyogUmVhZCB0aGUgZHF1b3QgLyBhbGxvY2F0ZSBzcGFjZSBpbiBxdW90YSBmaWxlICovCisJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykgJiYKKwkgICAgc2ItPmRxX29wLT5hY3F1aXJlX2RxdW90KGRxdW90KSA8IDApIHsKIAkJZHFwdXQoZHF1b3QpOwotCQlkcXVvdCA9IE5PRFFVT1Q7CisJCWRxdW90ID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogI2lmZGVmIF9fRFFVT1RfUEFSQU5PSUEKQEAgLTc2Nyw2ICs4MDAsNyBAQAogCiAJcmV0dXJuIGRxdW90OwogfQorRVhQT1JUX1NZTUJPTChkcWdldCk7CiAKIHN0YXRpYyBpbnQgZHFpbml0X25lZWRlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKIHsKQEAgLTc3NSw5ICs4MDksOSBAQAogCWlmIChJU19OT1FVT1RBKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAJaWYgKHR5cGUgIT0gLTEpCi0JCXJldHVybiBpbm9kZS0+aV9kcXVvdFt0eXBlXSA9PSBOT0RRVU9UOworCQlyZXR1cm4gIWlub2RlLT5pX2RxdW90W3R5cGVdOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gPT0gTk9EUVVPVCkKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC03ODksMTIgKzgyMywxMiBAQAogCiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQljb250aW51ZTsKIAkJaWYgKCFhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkpCiAJCQljb250aW51ZTsKIAkJaWYgKCFkcWluaXRfbmVlZGVkKGlub2RlLCB0eXBlKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkKLQkJCWNvbnRpbnVlOwogCiAJCV9faWdldChpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKQEAgLTgxMyw3ICs4NDcsMTAgQEAKIAlpcHV0KG9sZF9pbm9kZSk7CiB9CiAKLS8qIFJldHVybiAwIGlmIGRxcHV0KCkgd29uJ3QgYmxvY2sgKG5vdGUgdGhhdCAxIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiBibG9ja2luZykgKi8KKy8qCisgKiBSZXR1cm4gMCBpZiBkcXB1dCgpIHdvbid0IGJsb2NrLgorICogKG5vdGUgdGhhdCAxIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiBibG9ja2luZykKKyAqLwogc3RhdGljIGlubGluZSBpbnQgZHFwdXRfYmxvY2tzKHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CiAJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpIDw9IDEpCkBAIC04MjEsMjIgKzg1OCwyNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZW1vdmUgcmVmZXJlbmNlcyB0byBkcXVvdHMgZnJvbSBpbm9kZSAtIGFkZCBkcXVvdCB0byBsaXN0IGZvciBmcmVlaW5nIGlmIG5lZWRlZCAqLwotLyogV2UgY2FuJ3QgcmFjZSB3aXRoIGFueWJvZHkgYmVjYXVzZSB3ZSBob2xkIGRxcHRyX3NlbSBmb3Igd3JpdGluZy4uLiAqLworLyoKKyAqIFJlbW92ZSByZWZlcmVuY2VzIHRvIGRxdW90cyBmcm9tIGlub2RlIGFuZCBhZGQgZHF1b3QgdG8gbGlzdCBmb3IgZnJlZWluZworICogaWYgd2UgaGF2ZSB0aGUgbGFzdCByZWZlcmVjZSB0byBkcXVvdAorICogV2UgY2FuJ3QgcmFjZSB3aXRoIGFueWJvZHkgYmVjYXVzZSB3ZSBob2xkIGRxcHRyX3NlbSBmb3Igd3JpdGluZy4uLgorICovCiBzdGF0aWMgaW50IHJlbW92ZV9pbm9kZV9kcXVvdF9yZWYoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCiAJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKIHsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90ID0gaW5vZGUtPmlfZHF1b3RbdHlwZV07CiAKLQlpbm9kZS0+aV9kcXVvdFt0eXBlXSA9IE5PRFFVT1Q7Ci0JaWYgKGRxdW90ICE9IE5PRFFVT1QpIHsKKwlpbm9kZS0+aV9kcXVvdFt0eXBlXSA9IE5VTEw7CisJaWYgKGRxdW90KSB7CiAJCWlmIChkcXB1dF9ibG9ja3MoZHF1b3QpKSB7CiAjaWZkZWYgX19EUVVPVF9QQVJBTk9JQQogCQkJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpICE9IDEpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBBZGRpbmcgZHF1b3Qgd2l0aCBkcV9jb3VudCAlZCB0byBkaXNwb3NlIGxpc3QuXG4iLCBhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSk7CiAjZW5kaWYKIAkJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJCWxpc3RfYWRkKCZkcXVvdC0+ZHFfZnJlZSwgdG9mcmVlX2hlYWQpOwkvKiBBcyBkcXVvdCBtdXN0IGhhdmUgY3VycmVudGx5IHVzZXJzIGl0IGNhbid0IGJlIG9uIHRoZSBmcmVlIGxpc3QuLi4gKi8KKwkJCS8qIEFzIGRxdW90IG11c3QgaGF2ZSBjdXJyZW50bHkgdXNlcnMgaXQgY2FuJ3QgYmUgb24KKwkJCSAqIHRoZSBmcmVlIGxpc3QuLi4gKi8KKwkJCWxpc3RfYWRkKCZkcXVvdC0+ZHFfZnJlZSwgdG9mcmVlX2hlYWQpOwogCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtODQ2LDE5ICs4ODgsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogRnJlZSBsaXN0IG9mIGRxdW90cyAtIGNhbGxlZCBmcm9tIGlub2RlLmMgKi8KLS8qIGRxdW90cyBhcmUgcmVtb3ZlZCBmcm9tIGlub2Rlcywgbm8gbmV3IHJlZmVyZW5jZXMgY2FuIGJlIGdvdCBzbyB3ZSBhcmUgdGhlIG9ubHkgb25lcyBob2xkaW5nIHJlZmVyZW5jZSAqLworLyoKKyAqIEZyZWUgbGlzdCBvZiBkcXVvdHMKKyAqIERxdW90cyBhcmUgcmVtb3ZlZCBmcm9tIGlub2RlcyBhbmQgbm8gbmV3IHJlZmVyZW5jZXMgY2FuIGJlIGdvdCBzbyB3ZSBhcmUKKyAqIHRoZSBvbmx5IG9uZXMgaG9sZGluZyByZWZlcmVuY2UKKyAqLwogc3RhdGljIHZvaWQgcHV0X2RxdW90X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqdG9mcmVlX2hlYWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqYWN0X2hlYWQ7CiAJc3RydWN0IGRxdW90ICpkcXVvdDsKIAogCWFjdF9oZWFkID0gdG9mcmVlX2hlYWQtPm5leHQ7Ci0JLyogU28gbm93IHdlIGhhdmUgZHF1b3RzIG9uIHRoZSBsaXN0Li4uIEp1c3QgZnJlZSB0aGVtICovCiAJd2hpbGUgKGFjdF9oZWFkICE9IHRvZnJlZV9oZWFkKSB7CiAJCWRxdW90ID0gbGlzdF9lbnRyeShhY3RfaGVhZCwgc3RydWN0IGRxdW90LCBkcV9mcmVlKTsKIAkJYWN0X2hlYWQgPSBhY3RfaGVhZC0+bmV4dDsKLQkJbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2ZyZWUpOwkvKiBSZW1vdmUgZHF1b3QgZnJvbSB0aGUgbGlzdCBzbyB3ZSB3b24ndCBoYXZlIHByb2JsZW1zLi4uICovCisJCS8qIFJlbW92ZSBkcXVvdCBmcm9tIHRoZSBsaXN0IHNvIHdlIHdvbid0IGhhdmUgcHJvYmxlbXMuLi4gKi8KKwkJbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2ZyZWUpOwogCQlkcXB1dChkcXVvdCk7CiAJfQogfQpAQCAtODcwLDYgKzkxNSwxMiBAQAogCiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKKwkJLyoKKwkJICogIFdlIGhhdmUgdG8gc2NhbiBhbHNvIElfTkVXIGlub2RlcyBiZWNhdXNlIHRoZXkgY2FuIGFscmVhZHkKKwkJICogIGhhdmUgcXVvdGEgcG9pbnRlciBpbml0aWFsaXplZC4gTHVja2lseSwgd2UgbmVlZCB0byB0b3VjaAorCQkgKiAgb25seSBxdW90YSBwb2ludGVycyBhbmQgdGhlc2UgaGF2ZSBzZXBhcmF0ZSBsb2NraW5nCisJCSAqICAoZHFwdHJfc2VtKS4KKwkJICovCiAJCWlmICghSVNfTk9RVU9UQShpbm9kZSkpCiAJCQlyZW1vdmVfaW5vZGVfZHF1b3RfcmVmKGlub2RlLCB0eXBlLCB0b2ZyZWVfaGVhZCk7CiAJfQpAQCAtODk5LDcgKzk1MCwyOSBAQAogCWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlICs9IG51bWJlcjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2RlY3JfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgbnVtYmVyKQorc3RhdGljIGlubGluZSB2b2lkIGRxdW90X3Jlc3Zfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCit7CisJZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UgKz0gbnVtYmVyOworfQorCisvKgorICogQ2xhaW0gcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLworc3RhdGljIHZvaWQgZHF1b3RfY2xhaW1fcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCQkJCXFzaXplX3QgbnVtYmVyKQoreworCVdBUk5fT04oZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UgPCBudW1iZXIpOworCWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlICs9IG51bWJlcjsKKwlkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZSAtPSBudW1iZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZHF1b3RfZnJlZV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3sKKwlkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZSAtPSBudW1iZXI7Cit9CisKK3N0YXRpYyB2b2lkIGRxdW90X2RlY3JfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgbnVtYmVyKQogewogCWlmIChzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5mbGFncyAmIERRVU9UX05FR0FUSVZFX1VTQUdFIHx8CiAJICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA+PSBudW1iZXIpCkBAIC05MTEsNyArOTg0LDcgQEAKIAljbGVhcl9iaXQoRFFfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfZGVjcl9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3N0YXRpYyB2b2lkIGRxdW90X2RlY3Jfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCiB7CiAJaWYgKHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZsYWdzICYgRFFVT1RfTkVHQVRJVkVfVVNBR0UgfHwKIAkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPj0gbnVtYmVyKQpAQCAtOTM4LDcgKzEwMTEsNyBAQAogI2lmZGVmIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HCiBzdGF0aWMgaW50IGZsYWdfcHJpbnRfd2FybmluZ3MgPSAxOwogCi1zdGF0aWMgaW5saW5lIGludCBuZWVkX3ByaW50X3dhcm5pbmcoc3RydWN0IGRxdW90ICpkcXVvdCkKK3N0YXRpYyBpbnQgbmVlZF9wcmludF93YXJuaW5nKHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CiAJaWYgKCFmbGFnX3ByaW50X3dhcm5pbmdzKQogCQlyZXR1cm4gMDsKQEAgLTEwNTcsMTAgKzExMzAsNyBAQAogCQlnb3RvIGF0dHJfZXJyX291dDsKIAlnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTsKIAotCXJldCA9IGdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgcXVvdGFfZ2VubF9mYW1pbHkuaWQsIEdGUF9OT0ZTKTsKLQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVTUkNIKQotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJWRlM6IEZhaWxlZCB0byBzZW5kIG5vdGlmaWNhdGlvbiBtZXNzYWdlOiAlZFxuIiwgcmV0KTsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHF1b3RhX2dlbmxfZmFtaWx5LmlkLCBHRlBfTk9GUyk7CiAJcmV0dXJuOwogYXR0cl9lcnJfb3V0OgogCXByaW50ayhLRVJOX0VSUiAiVkZTOiBOb3QgZW5vdWdoIHNwYWNlIHRvIGNvbXBvc2UgcXVvdGEgbWVzc2FnZSFcbiIpOwpAQCAtMTA2OCwxMyArMTEzOCwxNyBAQAogCWtmcmVlX3NrYihza2IpOwogfQogI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93YXJuaW5ncyhzdHJ1Y3QgZHF1b3QgKiBjb25zdCAqZHF1b3RzLCBjaGFyICp3YXJudHlwZSkKKy8qCisgKiBXcml0ZSB3YXJuaW5ncyB0byB0aGUgY29uc29sZSBhbmQgc2VuZCB3YXJuaW5nIG1lc3NhZ2VzIG92ZXIgbmV0bGluay4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc2xlZXAuCisgKi8KK3N0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdCAqY29uc3QgKmRxdW90cywgY2hhciAqd2FybnR5cGUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspCi0JCWlmIChkcXVvdHNbaV0gIT0gTk9EUVVPVCAmJiB3YXJudHlwZVtpXSAhPSBRVU9UQV9OTF9OT1dBUk4gJiYKKwkJaWYgKGRxdW90c1tpXSAmJiB3YXJudHlwZVtpXSAhPSBRVU9UQV9OTF9OT1dBUk4gJiYKIAkJICAgICF3YXJuaW5nX2lzc3VlZChkcXVvdHNbaV0sIHdhcm50eXBlW2ldKSkgewogI2lmZGVmIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HCiAJCQlwcmludF93YXJuaW5nKGRxdW90c1tpXSwgd2FybnR5cGVbaV0pOwpAQCAtMTA4NSw0MiArMTE1OSw0NyBAQAogCQl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2hhciBpZ25vcmVfaGFyZGxpbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCitzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKIAlzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9ICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXTsKIAogCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICYmCi0JICAgIChpbmZvLT5kcWlfZm9ybWF0LT5xZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEIHx8ICEoaW5mby0+ZHFpX2ZsYWdzICYgVjFfRFFGX1JTUVVBU0gpKTsKKwkgICAgICAgKGluZm8tPmRxaV9mb3JtYXQtPnFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwKKwkJIShpbmZvLT5kcWlfZmxhZ3MgJiBWMV9EUUZfUlNRVUFTSCkpOwogfQogCiAvKiBuZWVkcyBkcV9kYXRhX2xvY2sgKi8KIHN0YXRpYyBpbnQgY2hlY2tfaWRxKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLCBjaGFyICp3YXJudHlwZSkKIHsKKwlxc2l6ZV90IG5ld2lub2RlcyA9IGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyArIGlub2RlczsKKwogCSp3YXJudHlwZSA9IFFVT1RBX05MX05PV0FSTjsKIAlpZiAoIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSB8fAogCSAgICB0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQogCQlyZXR1cm4gUVVPVEFfT0s7CiAKIAlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCAmJgotCSAgIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgKyBpbm9kZXMpID4gZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCAmJgorCSAgICBuZXdpbm9kZXMgPiBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCiAgICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKIAkJKndhcm50eXBlID0gUVVPVEFfTkxfSUhBUkRXQVJOOwogCQlyZXR1cm4gTk9fUVVPVEE7CiAJfQogCiAJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKLQkgICAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICsgaW5vZGVzKSA+IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgJiYgZ2V0X3NlY29uZHMoKSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSAmJgorCSAgICBuZXdpbm9kZXMgPiBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2l0aW1lICYmCisJICAgIGdldF9zZWNvbmRzKCkgPj0gZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgJiYKICAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewogCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JU09GVExPTkdXQVJOOwogCQlyZXR1cm4gTk9fUVVPVEE7CiAJfQogCiAJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKLQkgICAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICsgaW5vZGVzKSA+IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKKwkgICAgbmV3aW5vZGVzID4gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgogCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSA9PSAwKSB7CiAJCSp3YXJudHlwZSA9IFFVT1RBX05MX0lTT0ZUV0FSTjsKLQkJZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsgc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfdHlwZV0uZHFpX2lncmFjZTsKKwkJZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsKKwkJICAgIHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdLmRxaV9pZ3JhY2U7CiAJfQogCiAJcmV0dXJuIFFVT1RBX09LOwpAQCAtMTEyOSwxMyArMTIwOCwxOSBAQAogLyogbmVlZHMgZHFfZGF0YV9sb2NrICovCiBzdGF0aWMgaW50IGNoZWNrX2JkcShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IHNwYWNlLCBpbnQgcHJlYWxsb2MsIGNoYXIgKndhcm50eXBlKQogeworCXFzaXplX3QgdHNwYWNlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkcXVvdC0+ZHFfc2I7CisKIAkqd2FybnR5cGUgPSBRVU9UQV9OTF9OT1dBUk47Ci0JaWYgKCFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkgfHwKKwlpZiAoIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChzYiwgZHF1b3QtPmRxX3R5cGUpIHx8CiAJICAgIHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykpCiAJCXJldHVybiBRVU9UQV9PSzsKIAorCXRzcGFjZSA9IGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlICsgZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UKKwkJKyBzcGFjZTsKKwogCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCi0JICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlICsgc3BhY2UgPiBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCisJICAgIHRzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKICAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewogCQlpZiAoIXByZWFsbG9jKQogCQkJKndhcm50eXBlID0gUVVPVEFfTkxfQkhBUkRXQVJOOwpAQCAtMTE0Myw4ICsxMjI4LDkgQEAKIAl9CiAKIAlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArIHNwYWNlID4gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSAmJiBnZXRfc2Vjb25kcygpID49IGRxdW90LT5kcV9kcWIuZHFiX2J0aW1lICYmCisJICAgIHRzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgJiYKKwkgICAgZ2V0X3NlY29uZHMoKSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSAmJgogICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7CiAJCWlmICghcHJlYWxsb2MpCiAJCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CU09GVExPTkdXQVJOOwpAQCAtMTE1MiwxMSArMTIzOCwxMiBAQAogCX0KIAogCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCi0JICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlICsgc3BhY2UgPiBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCisJICAgIHRzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKIAkgICAgZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgPT0gMCkgewogCQlpZiAoIXByZWFsbG9jKSB7CiAJCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CU09GVFdBUk47Ci0JCQlkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSA9IGdldF9zZWNvbmRzKCkgKyBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfYmdyYWNlOworCQkJZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgPSBnZXRfc2Vjb25kcygpICsKKwkJCSAgICBzYl9kcW9wdChzYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdLmRxaV9iZ3JhY2U7CiAJCX0KIAkJZWxzZQogCQkJLyoKQEAgLTExNzEsMTUgKzEyNTgsMTggQEAKIAogc3RhdGljIGludCBpbmZvX2lkcV9mcmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzKQogeworCXFzaXplX3QgbmV3aW5vZGVzOworCiAJaWYgKHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykgfHwKIAkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIDw9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgfHwKIAkgICAgIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSkKIAkJcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKIAotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgLSBpbm9kZXMgPD0gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCkKKwluZXdpbm9kZXMgPSBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgLSBpbm9kZXM7CisJaWYgKG5ld2lub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQogCQlyZXR1cm4gUVVPVEFfTkxfSVNPRlRCRUxPVzsKIAlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID49IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIC0gaW5vZGVzIDwgZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCkKKwkgICAgbmV3aW5vZGVzIDwgZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCkKIAkJcmV0dXJuIFFVT1RBX05MX0lIQVJEQkVMT1c7CiAJcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKIH0KQEAgLTEyMDYsNyArMTI5Niw3IEBACiB7CiAJdW5zaWduZWQgaW50IGlkID0gMDsKIAlpbnQgY250LCByZXQgPSAwOwotCXN0cnVjdCBkcXVvdCAqZ290W01BWFFVT1RBU10gPSB7IE5PRFFVT1QsIE5PRFFVT1QgfTsKKwlzdHJ1Y3QgZHF1b3QgKmdvdFtNQVhRVU9UQVNdID0geyBOVUxMLCBOVUxMIH07CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCiAJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCkBAIC0xMjM5LDkgKzEzMjksOSBAQAogCQkvKiBBdm9pZCByYWNlcyB3aXRoIHF1b3Rhb2ZmKCkgKi8KIAkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQogCQkJY29udGludWU7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKSB7CiAJCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gZ290W2NudF07Ci0JCQlnb3RbY250XSA9IE5PRFFVT1Q7CisJCQlnb3RbY250XSA9IE5VTEw7CiAJCX0KIAl9CiBvdXRfZXJyOgpAQCAtMTI1MSw2ICsxMzQxLDcgQEAKIAkJZHFwdXQoZ290W2NudF0pOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRxdW90X2luaXRpYWxpemUpOwogCiAvKgogICogCVJlbGVhc2UgYWxsIHF1b3RhcyByZWZlcmVuY2VkIGJ5IGlub2RlCkBAIC0xMjYzLDcgKzEzNTQsNyBAQAogCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKIAkJcHV0W2NudF0gPSBpbm9kZS0+aV9kcXVvdFtjbnRdOwotCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gTk9EUVVPVDsKKwkJaW5vZGUtPmlfZHF1b3RbY250XSA9IE5VTEw7CiAJfQogCXVwX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAKQEAgLTEyNzEsNiArMTM2Miw3IEBACiAJCWRxcHV0KHB1dFtjbnRdKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfZHJvcCk7CiAKIC8qIFdyYXBwZXIgdG8gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gcXVvdGEgc3RydWN0dXJlcyBmcm9tIGlub2RlICovCiB2b2lkIHZmc19kcV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC0xMjg3LDEyICsxMzc5LDEzIEBACiAJCSAqIG11c3QgYXNzdXJlIHRoYXQgbm9ib2R5IGNhbiBjb21lIGFmdGVyIHRoZSBEUVVPVF9EUk9QIGFuZAogCQkgKiBhZGQgcXVvdGEgcG9pbnRlcnMgYmFjayBhbnl3YXkgKi8KIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gIT0gTk9EUVVPVCkKKwkJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJCWJyZWFrOwogCQlpZiAoY250IDwgTUFYUVVPVEFTKQogCQkJaW5vZGUtPmlfc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHZmc19kcV9kcm9wKTsKIAogLyoKICAqIEZvbGxvd2luZyBmb3VyIGZ1bmN0aW9ucyB1cGRhdGUgaV9ibG9ja3MraV9ieXRlcyBmaWVsZHMgYW5kCkBAIC0xMzA2LDUyICsxMzk5LDk0IEBACiAvKgogICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKICAqLwotaW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgd2FybikKK2ludCBfX2RxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLAorCQkJaW50IHdhcm4sIGludCByZXNlcnZlKQogewotCWludCBjbnQsIHJldCA9IE5PX1FVT1RBOworCWludCBjbnQsIHJldCA9IFFVT1RBX09LOwogCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKIAotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLW91dF9hZGQ6Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLQkJcmV0dXJuIFFVT1RBX09LOwotCX0KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCiAJCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47CiAKLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsJLyogTm93IHdlIGNhbiBkbyByZWxpYWJsZSB0ZXN0Li4uICovCi0JCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkJZ290byBvdXRfYWRkOwotCX0KIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCisJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoY2hlY2tfYmRxKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlciwgd2Fybiwgd2FybnR5cGUrY250KSA9PSBOT19RVU9UQSkKLQkJCWdvdG8gd2Fybl9wdXRfYWxsOworCQlpZiAoY2hlY2tfYmRxKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlciwgd2Fybiwgd2FybnR5cGUrY250KQorCQkgICAgPT0gTk9fUVVPVEEpIHsKKwkJCXJldCA9IE5PX1FVT1RBOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CiAJfQogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQorCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCiAJCQljb250aW51ZTsKLQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOworCQlpZiAocmVzZXJ2ZSkKKwkJCWRxdW90X3Jlc3Zfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJZWxzZQorCQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwogCX0KLQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Ci0JcmV0ID0gUVVPVEFfT0s7Ci13YXJuX3B1dF9hbGw6CisJaWYgKCFyZXNlcnZlKQorCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CitvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCWlmIChyZXQgPT0gUVVPVEFfT0spCi0JCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgd2FybikKK3sKKwlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKKworCS8qCisJICogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisJICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4CisJICovCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMCk7CisJaWYgKHJldCA9PSBOT19RVU9UQSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKK291dF91bmxvY2s6CisJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jX3NwYWNlKTsKKworaW50IGRxdW90X3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQoreworCWludCByZXQgPSBRVU9UQV9PSzsKKworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJZ290byBvdXQ7CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldCA9IF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7CitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9yZXNlcnZlX3NwYWNlKTsKKwogLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KQEAgLTEzNzMsMTQgKzE1MDgsMTUgQEAKIAl9CiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQorCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCiAJCQljb250aW51ZTsKLQkJaWYgKGNoZWNrX2lkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm50eXBlK2NudCkgPT0gTk9fUVVPVEEpCisJCWlmIChjaGVja19pZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJudHlwZStjbnQpCisJCSAgICA9PSBOT19RVU9UQSkKIAkJCWdvdG8gd2Fybl9wdXRfYWxsOwogCX0KIAogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQorCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCiAJCQljb250aW51ZTsKIAkJZHF1b3RfaW5jcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAl9CkBAIC0xMzk2LDYgKzE1MzIsNzMgQEAKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2NfaW5vZGUpOworCitpbnQgZHF1b3RfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJaW50IGNudDsKKwlpbnQgcmV0ID0gUVVPVEFfT0s7CisKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCXsKKwkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwkvKiBDbGFpbSByZXNlcnZlZCBxdW90YXMgdG8gYWxsb2NhdGVkIHF1b3RhcyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWRxdW90X2NsYWltX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sCisJCQkJCQkJbnVtYmVyKTsKKwl9CisJLyogVXBkYXRlIGlub2RlIGJ5dGVzICovCisJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2NsYWltX3NwYWNlKTsKKworLyoKKyAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCWludCBjbnQ7CisKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCWdvdG8gb3V0OworCisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CisJLyogUmVsZWFzZSByZXNlcnZlZCBkcXVvdHMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCisJCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJfQorCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UpOwogCiAvKgogICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKQEAgLTE0MjEsNyArMTYyNCw3IEBACiAJfQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gPT0gTk9EUVVPVCkKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJY29udGludWU7CiAJCXdhcm50eXBlW2NudF0gPSBpbmZvX2JkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CiAJCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKQEAgLTE0MzYsNiArMTYzOSw3IEBACiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCXJldHVybiBRVU9UQV9PSzsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfZnJlZV9zcGFjZSk7CiAKIC8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZApAQCAtMTQ1OCw3ICsxNjYyLDcgQEAKIAl9CiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQorCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCiAJCQljb250aW51ZTsKIAkJd2FybnR5cGVbY250XSA9IGluZm9faWRxX2ZyZWUoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAkJZHF1b3RfZGVjcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKQEAgLTE0NzIsNiArMTY3NiwyMCBAQAogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlyZXR1cm4gUVVPVEFfT0s7CiB9CitFWFBPUlRfU1lNQk9MKGRxdW90X2ZyZWVfaW5vZGUpOworCisvKgorICogY2FsbCBiYWNrIGZ1bmN0aW9uLCBnZXQgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UgZnJvbSB1bmRlcmx5aW5nIGZzCisgKi8KK3FzaXplX3QgZHF1b3RfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcXNpemVfdCByZXNlcnZlZF9zcGFjZSA9IDA7CisKKwlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgJiYKKwkgICAgaW5vZGUtPmlfc2ItPmRxX29wLT5nZXRfcmVzZXJ2ZWRfc3BhY2UpCisJCXJlc2VydmVkX3NwYWNlID0gaW5vZGUtPmlfc2ItPmRxX29wLT5nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXJldHVybiByZXNlcnZlZF9zcGFjZTsKK30KIAogLyoKICAqIFRyYW5zZmVyIHRoZSBudW1iZXIgb2YgaW5vZGUgYW5kIGJsb2NrcyBmcm9tIG9uZSBkaXNrcXVvdGEgdG8gYW4gb3RoZXIuCkBAIC0xNDgxLDcgKzE2OTksOCBAQAogICovCiBpbnQgZHF1b3RfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKLQlxc2l6ZV90IHNwYWNlOworCXFzaXplX3Qgc3BhY2UsIGN1cl9zcGFjZTsKKwlxc2l6ZV90IHJzdl9zcGFjZSA9IDA7CiAJc3RydWN0IGRxdW90ICp0cmFuc2Zlcl9mcm9tW01BWFFVT1RBU107CiAJc3RydWN0IGRxdW90ICp0cmFuc2Zlcl90b1tNQVhRVU9UQVNdOwogCWludCBjbnQsIHJldCA9IFFVT1RBX09LOwpAQCAtMTQ5NiwyMiArMTcxNSwxNiBAQAogCQlyZXR1cm4gUVVPVEFfT0s7CiAJLyogSW5pdGlhbGl6ZSB0aGUgYXJyYXlzICovCiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCXRyYW5zZmVyX2Zyb21bY250XSA9IE5PRFFVT1Q7Ci0JCXRyYW5zZmVyX3RvW2NudF0gPSBOT0RRVU9UOworCQl0cmFuc2Zlcl9mcm9tW2NudF0gPSBOVUxMOworCQl0cmFuc2Zlcl90b1tjbnRdID0gTlVMTDsKIAkJd2FybnR5cGVfdG9bY250XSA9IFFVT1RBX05MX05PV0FSTjsKLQkJc3dpdGNoIChjbnQpIHsKLQkJCWNhc2UgVVNSUVVPVEE6Ci0JCQkJaWYgKCFjaHVpZCkKLQkJCQkJY29udGludWU7Ci0JCQkJdHJhbnNmZXJfdG9bY250XSA9IGRxZ2V0KGlub2RlLT5pX3NiLCBpYXR0ci0+aWFfdWlkLCBjbnQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBHUlBRVU9UQToKLQkJCQlpZiAoIWNoZ2lkKQotCQkJCQljb250aW51ZTsKLQkJCQl0cmFuc2Zlcl90b1tjbnRdID0gZHFnZXQoaW5vZGUtPmlfc2IsIGlhdHRyLT5pYV9naWQsIGNudCk7Ci0JCQkJYnJlYWs7Ci0JCX0KIAl9CisJaWYgKGNodWlkKQorCQl0cmFuc2Zlcl90b1tVU1JRVU9UQV0gPSBkcWdldChpbm9kZS0+aV9zYiwgaWF0dHItPmlhX3VpZCwKKwkJCQkJICAgICAgVVNSUVVPVEEpOworCWlmIChjaGdpZCkKKwkJdHJhbnNmZXJfdG9bR1JQUVVPVEFdID0gZHFnZXQoaW5vZGUtPmlfc2IsIGlhdHRyLT5pYV9naWQsCisJCQkJCSAgICAgIEdSUFFVT1RBKTsKIAogCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAkvKiBOb3cgcmVjaGVjayByZWxpYWJseSB3aGVuIGhvbGRpbmcgZHFwdHJfc2VtICovCkBAIC0xNTIwLDEwICsxNzMzLDEyIEBACiAJCWdvdG8gcHV0X2FsbDsKIAl9CiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCXNwYWNlID0gaW5vZGVfZ2V0X2J5dGVzKGlub2RlKTsKKwljdXJfc3BhY2UgPSBpbm9kZV9nZXRfYnl0ZXMoaW5vZGUpOworCXJzdl9zcGFjZSA9IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CisJc3BhY2UgPSBjdXJfc3BhY2UgKyByc3Zfc3BhY2U7CiAJLyogQnVpbGQgdGhlIHRyYW5zZmVyX2Zyb20gbGlzdCBhbmQgY2hlY2sgdGhlIGxpbWl0cyAqLwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAodHJhbnNmZXJfdG9bY250XSA9PSBOT0RRVU9UKQorCQlpZiAoIXRyYW5zZmVyX3RvW2NudF0pCiAJCQljb250aW51ZTsKIAkJdHJhbnNmZXJfZnJvbVtjbnRdID0gaW5vZGUtPmlfZHF1b3RbY250XTsKIAkJaWYgKGNoZWNrX2lkcSh0cmFuc2Zlcl90b1tjbnRdLCAxLCB3YXJudHlwZV90byArIGNudCkgPT0KQEAgLTE1MzksNyArMTc1NCw3IEBACiAJCS8qCiAJCSAqIFNraXAgY2hhbmdlcyBmb3Igc2FtZSB1aWQgb3IgZ2lkIG9yIGZvciB0dXJuZWQgb2ZmIHF1b3RhLXR5cGUuCiAJCSAqLwotCQlpZiAodHJhbnNmZXJfdG9bY250XSA9PSBOT0RRVU9UKQorCQlpZiAoIXRyYW5zZmVyX3RvW2NudF0pCiAJCQljb250aW51ZTsKIAogCQkvKiBEdWUgdG8gSU8gZXJyb3Igd2UgbWlnaHQgbm90IGhhdmUgdHJhbnNmZXJfZnJvbVtdIHN0cnVjdHVyZSAqLwpAQCAtMTU0OSwxMSArMTc2NCwxNCBAQAogCQkJd2FybnR5cGVfZnJvbV9zcGFjZVtjbnRdID0KIAkJCQlpbmZvX2JkcV9mcmVlKHRyYW5zZmVyX2Zyb21bY250XSwgc3BhY2UpOwogCQkJZHF1b3RfZGVjcl9pbm9kZXModHJhbnNmZXJfZnJvbVtjbnRdLCAxKTsKLQkJCWRxdW90X2RlY3Jfc3BhY2UodHJhbnNmZXJfZnJvbVtjbnRdLCBzcGFjZSk7CisJCQlkcXVvdF9kZWNyX3NwYWNlKHRyYW5zZmVyX2Zyb21bY250XSwgY3VyX3NwYWNlKTsKKwkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UodHJhbnNmZXJfZnJvbVtjbnRdLAorCQkJCQkJICByc3Zfc3BhY2UpOwogCQl9CiAKIAkJZHF1b3RfaW5jcl9pbm9kZXModHJhbnNmZXJfdG9bY250XSwgMSk7Ci0JCWRxdW90X2luY3Jfc3BhY2UodHJhbnNmZXJfdG9bY250XSwgc3BhY2UpOworCQlkcXVvdF9pbmNyX3NwYWNlKHRyYW5zZmVyX3RvW2NudF0sIGN1cl9zcGFjZSk7CisJCWRxdW90X3Jlc3Zfc3BhY2UodHJhbnNmZXJfdG9bY250XSwgcnN2X3NwYWNlKTsKIAogCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gdHJhbnNmZXJfdG9bY250XTsKIAl9CkBAIC0xNTY3LDcgKzE3ODUsNyBAQAogCQlpZiAodHJhbnNmZXJfdG9bY250XSkgewogCQkJbWFya19kcXVvdF9kaXJ0eSh0cmFuc2Zlcl90b1tjbnRdKTsKIAkJCS8qIFRoZSByZWZlcmVuY2Ugd2UgZ290IGlzIHRyYW5zZmVycmVkIHRvIHRoZSBpbm9kZSAqLwotCQkJdHJhbnNmZXJfdG9bY250XSA9IE5PRFFVT1Q7CisJCQl0cmFuc2Zlcl90b1tjbnRdID0gTlVMTDsKIAkJfQogCX0KIHdhcm5fcHV0X2FsbDoKQEAgLTE1ODUsMTAgKzE4MDMsMTEgQEAKIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCS8qIENsZWFyIGRxdW90IHBvaW50ZXJzIHdlIGRvbid0IHdhbnQgdG8gZHFwdXQoKSAqLwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJdHJhbnNmZXJfZnJvbVtjbnRdID0gTk9EUVVPVDsKKwkJdHJhbnNmZXJfZnJvbVtjbnRdID0gTlVMTDsKIAlyZXQgPSBOT19RVU9UQTsKIAlnb3RvIHdhcm5fcHV0X2FsbDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfdHJhbnNmZXIpOwogCiAvKiBXcmFwcGVyIGZvciB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIGFuIGlub2RlICovCiBpbnQgdmZzX2RxX3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCkBAIC0xNjAwLDcgKzE4MTksNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQorRVhQT1JUX1NZTUJPTCh2ZnNfZHFfdHJhbnNmZXIpOwogCiAvKgogICogV3JpdGUgaW5mbyBvZiBxdW90YSBmaWxlIHRvIGRpc2sKQEAgLTE2MTUsNiArMTgzNCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woZHF1b3RfY29tbWl0X2luZm8pOwogCiAvKgogICogRGVmaW5pdGlvbnMgb2YgZGlza3F1b3RhIG9wZXJhdGlvbnMuCkBAIC0xNzAwLDggKzE5MjAsOCBAQAogCQlkcm9wX2RxdW90X3JlZihzYiwgY250KTsKIAkJaW52YWxpZGF0ZV9kcXVvdHMoc2IsIGNudCk7CiAJCS8qCi0JCSAqIE5vdyBhbGwgZHF1b3RzIHNob3VsZCBiZSBpbnZhbGlkYXRlZCwgYWxsIHdyaXRlcyBkb25lIHNvIHdlIHNob3VsZCBiZSBvbmx5Ci0JCSAqIHVzZXJzIG9mIHRoZSBpbmZvLiBObyBsb2NrcyBuZWVkZWQuCisJCSAqIE5vdyBhbGwgZHF1b3RzIHNob3VsZCBiZSBpbnZhbGlkYXRlZCwgYWxsIHdyaXRlcyBkb25lIHNvIHdlCisJCSAqIHNob3VsZCBiZSBvbmx5IHVzZXJzIG9mIHRoZSBpbmZvLiBObyBsb2NrcyBuZWVkZWQuCiAJCSAqLwogCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bY250XSkpCiAJCQlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIGNudCk7CkBAIC0xNzM5LDEwICsxOTU5LDEyIEBACiAJCQkvKiBJZiBxdW90YSB3YXMgcmVlbmFibGVkIGluIHRoZSBtZWFudGltZSwgd2UgaGF2ZQogCQkJICogbm90aGluZyB0byBkbyAqLwogCQkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpKSB7Ci0JCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnRvcHV0aW5vZGVbY250XS0+aV9tdXRleCwgSV9NVVRFWF9RVU9UQSk7CisJCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnRvcHV0aW5vZGVbY250XS0+aV9tdXRleCwKKwkJCQkJCSAgSV9NVVRFWF9RVU9UQSk7CiAJCQkJdG9wdXRpbm9kZVtjbnRdLT5pX2ZsYWdzICY9IH4oU19JTU1VVEFCTEUgfAogCQkJCSAgU19OT0FUSU1FIHwgU19OT1FVT1RBKTsKLQkJCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmdG9wdXRpbm9kZVtjbnRdLT5pX2RhdGEsIDApOworCQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ0b3B1dGlub2RlW2NudF0tPmlfZGF0YSwKKwkJCQkJCSAgICAgMCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgpOwogCQkJCW1hcmtfaW5vZGVfZGlydHkodG9wdXRpbm9kZVtjbnRdKTsKIAkJCX0KQEAgLTE3NjcsMTMgKzE5ODksMTQgQEAKIAkJfQogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9kaXNhYmxlKTsKIAogaW50IHZmc19xdW90YV9vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCByZW1vdW50KQogewogCXJldHVybiB2ZnNfcXVvdGFfZGlzYWJsZShzYiwgdHlwZSwgcmVtb3VudCA/IERRVU9UX1NVU1BFTkRFRCA6CiAJCQkJIChEUVVPVF9VU0FHRV9FTkFCTEVEIHwgRFFVT1RfTElNSVRTX0VOQUJMRUQpKTsKIH0KLQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb2ZmKTsKIC8qCiAgKglUdXJuIHF1b3RhcyBvbiBvbiBhIGRldmljZQogICovCkBAIC0xODMxLDcgKzIwNTQsOCBAQAogCQkgKiBwb3NzaWJsZSkgQWxzbyBub2JvZHkgc2hvdWxkIHdyaXRlIHRvIHRoZSBmaWxlIC0gd2UgdXNlCiAJCSAqIHNwZWNpYWwgSU8gb3BlcmF0aW9ucyB3aGljaCBpZ25vcmUgdGhlIGltbXV0YWJsZSBiaXQuICovCiAJCWRvd25fd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwotCQlvbGRmbGFncyA9IGlub2RlLT5pX2ZsYWdzICYgKFNfTk9BVElNRSB8IFNfSU1NVVRBQkxFIHwgU19OT1FVT1RBKTsKKwkJb2xkZmxhZ3MgPSBpbm9kZS0+aV9mbGFncyAmIChTX05PQVRJTUUgfCBTX0lNTVVUQUJMRSB8CisJCQkJCSAgICAgU19OT1FVT1RBKTsKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBIHwgU19OT0FUSU1FIHwgU19JTU1VVEFCTEU7CiAJCXVwX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKIAkJc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKQEAgLTE4NTAsNyArMjA3NCw4IEBACiAJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2ZtdF9pZCA9IGZvcm1hdF9pZDsKIAlJTklUX0xJU1RfSEVBRCgmZHFvcHQtPmluZm9bdHlwZV0uZHFpX2RpcnR5X2xpc3QpOwogCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQlpZiAoKGVycm9yID0gZHFvcHQtPm9wc1t0eXBlXS0+cmVhZF9maWxlX2luZm8oc2IsIHR5cGUpKSA8IDApIHsKKwllcnJvciA9IGRxb3B0LT5vcHNbdHlwZV0tPnJlYWRfZmlsZV9pbmZvKHNiLCB0eXBlKTsKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwogCQlnb3RvIG91dF9maWxlX2luaXQ7CiAJfQpAQCAtMTkzMCw2ICsyMTU1LDcgQEAKIAkJCQkJICAgICBEUVVPVF9MSU1JVFNfRU5BQkxFRCk7CiAJcmV0dXJuIGVycm9yOwogfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fcGF0aCk7CiAKIGludCB2ZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsIGNoYXIgKm5hbWUsCiAJCSBpbnQgcmVtb3VudCkKQEAgLTE5NDcsNiArMjE3Myw3IEBACiAJfQogCXJldHVybiBlcnJvcjsKIH0KK0VYUE9SVF9TWU1CT0wodmZzX3F1b3RhX29uKTsKIAogLyoKICAqIE1vcmUgcG93ZXJmdWwgZnVuY3Rpb24gZm9yIHR1cm5pbmcgb24gcXVvdGFzIGFsbG93aW5nIHNldHRpbmcKQEAgLTE5OTMsNiArMjIyMCw3IEBACiBsb2FkX3F1b3RhOgogCXJldHVybiB2ZnNfbG9hZF9xdW90YV9pbm9kZShpbm9kZSwgdHlwZSwgZm9ybWF0X2lkLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9lbmFibGUpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gZmlsZXN5c3RlbSBuZWVkcyB0byBpbml0aWFsaXplIHF1b3RhcwpAQCAtMjAyMiw2ICsyMjUwLDcgQEAKIAlkcHV0KGRlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwogfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fbW91bnQpOwogCiAvKiBXcmFwcGVyIHRvIHR1cm4gb24gcXVvdGFzIHdoZW4gcmVtb3VudGluZyBydyAqLwogaW50IHZmc19kcV9xdW90YV9vbl9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0yMDM4LDYgKzIyNjcsNyBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTCh2ZnNfZHFfcXVvdGFfb25fcmVtb3VudCk7CiAKIHN0YXRpYyBpbmxpbmUgcXNpemVfdCBxYnRvcyhxc2l6ZV90IGJsb2NrcykKIHsKQEAgLTIwNTcsNyArMjI4Nyw3IEBACiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwogCWRpLT5kcWJfYmhhcmRsaW1pdCA9IHN0b3FiKGRtLT5kcWJfYmhhcmRsaW1pdCk7CiAJZGktPmRxYl9ic29mdGxpbWl0ID0gc3RvcWIoZG0tPmRxYl9ic29mdGxpbWl0KTsKLQlkaS0+ZHFiX2N1cnNwYWNlID0gZG0tPmRxYl9jdXJzcGFjZTsKKwlkaS0+ZHFiX2N1cnNwYWNlID0gZG0tPmRxYl9jdXJzcGFjZSArIGRtLT5kcWJfcnN2c3BhY2U7CiAJZGktPmRxYl9paGFyZGxpbWl0ID0gZG0tPmRxYl9paGFyZGxpbWl0OwogCWRpLT5kcWJfaXNvZnRsaW1pdCA9IGRtLT5kcWJfaXNvZnRsaW1pdDsKIAlkaS0+ZHFiX2N1cmlub2RlcyA9IGRtLT5kcWJfY3VyaW5vZGVzOwpAQCAtMjA2NywxOCArMjI5NywyMCBAQAogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwogfQogCi1pbnQgdmZzX2dldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsIHN0cnVjdCBpZl9kcWJsayAqZGkpCitpbnQgdmZzX2dldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCisJCSAgc3RydWN0IGlmX2RxYmxrICpkaSkKIHsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90OwogCiAJZHF1b3QgPSBkcWdldChzYiwgaWQsIHR5cGUpOwotCWlmIChkcXVvdCA9PSBOT0RRVU9UKQorCWlmICghZHF1b3QpCiAJCXJldHVybiAtRVNSQ0g7CiAJZG9fZ2V0X2RxYmxrKGRxdW90LCBkaSk7CiAJZHFwdXQoZHF1b3QpOwogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHZmc19nZXRfZHFibGspOwogCiAvKiBHZW5lcmljIHJvdXRpbmUgZm9yIHNldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgc3RydWN0dXJlICovCiBzdGF0aWMgaW50IGRvX3NldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgaWZfZHFibGsgKmRpKQpAQCAtMjA5Nyw3ICsyMzI5LDcgQEAKIAogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9TUEFDRSkgewotCQlkbS0+ZHFiX2N1cnNwYWNlID0gZGktPmRxYl9jdXJzcGFjZTsKKwkJZG0tPmRxYl9jdXJzcGFjZSA9IGRpLT5kcWJfY3Vyc3BhY2UgLSBkbS0+ZHFiX3JzdnNwYWNlOwogCQljaGVja19ibGltID0gMTsKIAkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9TUEFDRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CkBAIC0yMTMwLDIyICsyMzYyLDI1IEBACiAJfQogCiAJaWYgKGNoZWNrX2JsaW0pIHsKLQkJaWYgKCFkbS0+ZHFiX2Jzb2Z0bGltaXQgfHwgZG0tPmRxYl9jdXJzcGFjZSA8IGRtLT5kcWJfYnNvZnRsaW1pdCkgeworCQlpZiAoIWRtLT5kcWJfYnNvZnRsaW1pdCB8fAorCQkgICAgZG0tPmRxYl9jdXJzcGFjZSA8IGRtLT5kcWJfYnNvZnRsaW1pdCkgewogCQkJZG0tPmRxYl9idGltZSA9IDA7CiAJCQljbGVhcl9iaXQoRFFfQkxLU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJfQotCQllbHNlIGlmICghKGRpLT5kcWJfdmFsaWQgJiBRSUZfQlRJTUUpKQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCisJCX0gZWxzZSBpZiAoIShkaS0+ZHFiX3ZhbGlkICYgUUlGX0JUSU1FKSkKKwkJCS8qIFNldCBncmFjZSBvbmx5IGlmIHVzZXIgaGFzbid0IHByb3ZpZGVkIGhpcyBvd24uLi4gKi8KIAkJCWRtLT5kcWJfYnRpbWUgPSBnZXRfc2Vjb25kcygpICsgZHFpLT5kcWlfYmdyYWNlOwogCX0KIAlpZiAoY2hlY2tfaWxpbSkgewotCQlpZiAoIWRtLT5kcWJfaXNvZnRsaW1pdCB8fCBkbS0+ZHFiX2N1cmlub2RlcyA8IGRtLT5kcWJfaXNvZnRsaW1pdCkgeworCQlpZiAoIWRtLT5kcWJfaXNvZnRsaW1pdCB8fAorCQkgICAgZG0tPmRxYl9jdXJpbm9kZXMgPCBkbS0+ZHFiX2lzb2Z0bGltaXQpIHsKIAkJCWRtLT5kcWJfaXRpbWUgPSAwOwogCQkJY2xlYXJfYml0KERRX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJfQotCQllbHNlIGlmICghKGRpLT5kcWJfdmFsaWQgJiBRSUZfSVRJTUUpKQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCisJCX0gZWxzZSBpZiAoIShkaS0+ZHFiX3ZhbGlkICYgUUlGX0lUSU1FKSkKKwkJCS8qIFNldCBncmFjZSBvbmx5IGlmIHVzZXIgaGFzbid0IHByb3ZpZGVkIGhpcyBvd24uLi4gKi8KIAkJCWRtLT5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsgZHFpLT5kcWlfaWdyYWNlOwogCX0KLQlpZiAoZG0tPmRxYl9iaGFyZGxpbWl0IHx8IGRtLT5kcWJfYnNvZnRsaW1pdCB8fCBkbS0+ZHFiX2loYXJkbGltaXQgfHwgZG0tPmRxYl9pc29mdGxpbWl0KQorCWlmIChkbS0+ZHFiX2JoYXJkbGltaXQgfHwgZG0tPmRxYl9ic29mdGxpbWl0IHx8IGRtLT5kcWJfaWhhcmRsaW1pdCB8fAorCSAgICBkbS0+ZHFiX2lzb2Z0bGltaXQpCiAJCWNsZWFyX2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCWVsc2UKIAkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwpAQCAtMjE1NSw3ICsyMzkwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHZmc19zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLCBzdHJ1Y3QgaWZfZHFibGsgKmRpKQoraW50IHZmc19zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAorCQkgIHN0cnVjdCBpZl9kcWJsayAqZGkpCiB7CiAJc3RydWN0IGRxdW90ICpkcXVvdDsKIAlpbnQgcmM7CkBAIC0yMTcwLDYgKzI0MDYsNyBAQAogb3V0OgogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0wodmZzX3NldF9kcWJsayk7CiAKIC8qIEdlbmVyaWMgcm91dGluZSBmb3IgZ2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBmaWxlIGluZm9ybWF0aW9uICovCiBpbnQgdmZzX2dldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKQpAQCAtMjE5MSw2ICsyNDI4LDcgQEAKIAltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHZmc19nZXRfZHFpbmZvKTsKIAogLyogR2VuZXJpYyByb3V0aW5lIGZvciBzZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIGZpbGUgaW5mb3JtYXRpb24gKi8KIGludCB2ZnNfc2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IGlmX2RxaW5mbyAqaWkpCkBAIC0yMjEwLDcgKzI0NDgsOCBAQAogCWlmIChpaS0+ZHFpX3ZhbGlkICYgSUlGX0lHUkFDRSkKIAkJbWktPmRxaV9pZ3JhY2UgPSBpaS0+ZHFpX2lncmFjZTsKIAlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9GTEFHUykKLQkJbWktPmRxaV9mbGFncyA9IChtaS0+ZHFpX2ZsYWdzICYgfkRRRl9NQVNLKSB8IChpaS0+ZHFpX2ZsYWdzICYgRFFGX01BU0spOworCQltaS0+ZHFpX2ZsYWdzID0gKG1pLT5kcWlfZmxhZ3MgJiB+RFFGX01BU0spIHwKKwkJCQkoaWktPmRxaV9mbGFncyAmIERRRl9NQVNLKTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAltYXJrX2luZm9fZGlydHkoc2IsIHR5cGUpOwogCS8qIEZvcmNlIHdyaXRlIHRvIGRpc2sgKi8KQEAgLTIyMTksNiArMjQ1OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKHZmc19zZXRfZHFpbmZvKTsKIAogc3RydWN0IHF1b3RhY3RsX29wcyB2ZnNfcXVvdGFjdGxfb3BzID0gewogCS5xdW90YV9vbgk9IHZmc19xdW90YV9vbiwKQEAgLTIzNjgsNDMgKzI2MDgsMTAgQEAKIAogI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQogCWlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmcXVvdGFfZ2VubF9mYW1pbHkpICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBGYWlsZWQgdG8gY3JlYXRlIHF1b3RhIG5ldGxpbmsgaW50ZXJmYWNlLlxuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlZGUzogRmFpbGVkIHRvIGNyZWF0ZSBxdW90YSBuZXRsaW5rIGludGVyZmFjZS5cbiIpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KGRxdW90X2luaXQpOwotCi1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCk7Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KTsKLUVYUE9SVF9TWU1CT0woZHFzdGF0cyk7Ci1FWFBPUlRfU1lNQk9MKGRxX2RhdGFfbG9jayk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9lbmFibGUpOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb24pOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fcGF0aCk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vbl9tb3VudCk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9kaXNhYmxlKTsKLUVYUE9SVF9TWU1CT0wodmZzX3F1b3RhX29mZik7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3NjYW5fYWN0aXZlKTsKLUVYUE9SVF9TWU1CT0wodmZzX3F1b3RhX3N5bmMpOwotRVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2RxaW5mbyk7Ci1FWFBPUlRfU1lNQk9MKHZmc19zZXRfZHFpbmZvKTsKLUVYUE9SVF9TWU1CT0wodmZzX2dldF9kcWJsayk7Ci1FWFBPUlRfU1lNQk9MKHZmc19zZXRfZHFibGspOwotRVhQT1JUX1NZTUJPTChkcXVvdF9jb21taXQpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9jb21taXRfaW5mbyk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2FjcXVpcmUpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2luaXRpYWxpemUpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9kcm9wKTsKLUVYUE9SVF9TWU1CT0wodmZzX2RxX2Ryb3ApOwotRVhQT1JUX1NZTUJPTChkcWdldCk7Ci1FWFBPUlRfU1lNQk9MKGRxcHV0KTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9hbGxvY19pbm9kZSk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2ZyZWVfc3BhY2UpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfdHJhbnNmZXIpOwotRVhQT1JUX1NZTUJPTCh2ZnNfZHFfdHJhbnNmZXIpOwotRVhQT1JUX1NZTUJPTCh2ZnNfZHFfcXVvdGFfb25fcmVtb3VudCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YS5jIGIvZnMvcXVvdGEvcXVvdGEuYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBmcy9xdW90YS5jCnJlbmFtZSB0byBmcy9xdW90YS9xdW90YS5jCmluZGV4IGQ3NmFkYTkuLmI3ZjVhNDYgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhLmMKKysrIGIvZnMvcXVvdGEvcXVvdGEuYwpAQCAtMjAsNyArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIENoZWNrIHZhbGlkaXR5IG9mIGdlbmVyaWMgcXVvdGFjdGwgY29tbWFuZHMgKi8KLXN0YXRpYyBpbnQgZ2VuZXJpY19xdW90YWN0bF92YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQpCitzdGF0aWMgaW50IGdlbmVyaWNfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCisJCQkJICBxaWRfdCBpZCkKIHsKIAlpZiAodHlwZSA+PSBNQVhRVU9UQVMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzIsNyArNzMsOCBAQAogCQljYXNlIFFfU0VUSU5GTzoKIAkJY2FzZSBRX1NFVFFVT1RBOgogCQljYXNlIFFfR0VUUVVPVEE6Ci0JCQkvKiBUaGlzIGlzIGp1c3QgaW5mb3JtYXRpdmUgdGVzdCBzbyB3ZSBhcmUgc2F0aXNmaWVkIHdpdGhvdXQgYSBsb2NrICovCisJCQkvKiBUaGlzIGlzIGp1c3QgYW4gaW5mb3JtYXRpdmUgdGVzdCBzbyB3ZSBhcmUgc2F0aXNmaWVkCisJCQkgKiB3aXRob3V0IHRoZSBsb2NrICovCiAJCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKQogCQkJCXJldHVybiAtRVNSQ0g7CiAJfQpAQCAtOTIsNyArOTQsOCBAQAogfQogCiAvKiBDaGVjayB2YWxpZGl0eSBvZiBYRlMgUXVvdGEgTWFuYWdlciBjb21tYW5kcyAqLwotc3RhdGljIGludCB4cW1fcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkKQorc3RhdGljIGludCB4cW1fcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCisJCQkgICAgICBxaWRfdCBpZCkKIHsKIAlpZiAodHlwZSA+PSBYUU1fTUFYUVVPVEFTKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0Miw3ICsxNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLCBxaWRfdCBpZCkKK3N0YXRpYyBpbnQgY2hlY2tfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCisJCQkJcWlkX3QgaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xODAsNyArMTg0LDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCiAJCQljb250aW51ZTsKLQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9tdXRleCwgSV9NVVRFWF9RVU9UQSk7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgsCisJCQkJICBJX01VVEVYX1FVT1RBKTsKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9kYXRhLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgpOwogCX0KQEAgLTIwMCwxNCArMjA1LDE1IEBACiAJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIHJlc3RhcnQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7Ci0JCS8qIFRoaXMgdGVzdCBqdXN0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHNvIGl0IG5lZWRuJ3QgYmUgcmVsaWFibGUuLi4gKi8KKwkJLyogVGhpcyB0ZXN0IGp1c3QgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugc28gaXQgbmVlZG4ndCBiZQorCQkgKiByZWxpYWJsZS4uLiAqLwogCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKIAkJCWlmICh0eXBlICE9IC0xICYmIHR5cGUgIT0gY250KQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFpbmZvX2RpcnR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XSkgJiYKLQkJCSAgICBsaXN0X2VtcHR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XS5kcWlfZGlydHlfbGlzdCkpCisJCQkgICBsaXN0X2VtcHR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XS5kcWlfZGlydHlfbGlzdCkpCiAJCQkJY29udGludWU7CiAJCQlicmVhazsKIAkJfQpAQCAtMjI3LDcgKzIzMyw4IEBACiB9CiAKIC8qIENvcHkgcGFyYW1ldGVycyBhbmQgY2FsbCBwcm9wZXIgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbnQgZG9fcXVvdGFjdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkLCB2b2lkIF9fdXNlciAqYWRkcikKK3N0YXRpYyBpbnQgZG9fcXVvdGFjdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkLAorCQkgICAgICAgdm9pZCBfX3VzZXIgKmFkZHIpCiB7CiAJaW50IHJldDsKIApAQCAtMjM1LDcgKzI0Miw4IEBACiAJCWNhc2UgUV9RVU9UQU9OOiB7CiAJCQljaGFyICpwYXRobmFtZTsKIAotCQkJaWYgKElTX0VSUihwYXRobmFtZSA9IGdldG5hbWUoYWRkcikpKQorCQkJcGF0aG5hbWUgPSBnZXRuYW1lKGFkZHIpOworCQkJaWYgKElTX0VSUihwYXRobmFtZSkpCiAJCQkJcmV0dXJuIFBUUl9FUlIocGF0aG5hbWUpOwogCQkJcmV0ID0gc2ItPnNfcWNvcC0+cXVvdGFfb24oc2IsIHR5cGUsIGlkLCBwYXRobmFtZSwgMCk7CiAJCQlwdXRuYW1lKHBhdGhuYW1lKTsKQEAgLTI2MSw3ICsyNjksOCBAQAogCQljYXNlIFFfR0VUSU5GTzogewogCQkJc3RydWN0IGlmX2RxaW5mbyBpbmZvOwogCi0JCQlpZiAoKHJldCA9IHNiLT5zX3Fjb3AtPmdldF9pbmZvKHNiLCB0eXBlLCAmaW5mbykpKQorCQkJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2luZm8oc2IsIHR5cGUsICZpbmZvKTsKKwkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yNzcsNyArMjg2LDggQEAKIAkJY2FzZSBRX0dFVFFVT1RBOiB7CiAJCQlzdHJ1Y3QgaWZfZHFibGsgaWRxOwogCi0JCQlpZiAoKHJldCA9IHNiLT5zX3Fjb3AtPmdldF9kcWJsayhzYiwgdHlwZSwgaWQsICZpZHEpKSkKKwkJCXJldCA9IHNiLT5zX3Fjb3AtPmdldF9kcWJsayhzYiwgdHlwZSwgaWQsICZpZHEpOworCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmaWRxLCBzaXplb2YoaWRxKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0zMjIsNyArMzMyLDggQEAKIAkJY2FzZSBRX1hHRVRRVU9UQTogewogCQkJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOwogCi0JCQlpZiAoKHJldCA9IHNiLT5zX3Fjb3AtPmdldF94cXVvdGEoc2IsIHR5cGUsIGlkLCAmZmRxKSkpCisJCQlyZXQgPSBzYi0+c19xY29wLT5nZXRfeHF1b3RhKHNiLCB0eXBlLCBpZCwgJmZkcSk7CisJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmZHEsIHNpemVvZihmZHEpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM0MSw3ICszNTIsNyBAQAogICogbG9vayB1cCBhIHN1cGVyYmxvY2sgb24gd2hpY2ggcXVvdGEgb3BzIHdpbGwgYmUgcGVyZm9ybWVkCiAgKiAtIHVzZSB0aGUgbmFtZSBvZiBhIGJsb2NrIGRldmljZSB0byBmaW5kIHRoZSBzdXBlcmJsb2NrIHRoZXJlb24KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnF1b3RhY3RsX2Jsb2NrKGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsKQorc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqcXVvdGFjdGxfYmxvY2soY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwpCiB7CiAjaWZkZWYgQ09ORklHX0JMT0NLCiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhX3RyZWUuYyBiL2ZzL3F1b3RhL3F1b3RhX3RyZWUuYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBmcy9xdW90YV90cmVlLmMKcmVuYW1lIHRvIGZzL3F1b3RhL3F1b3RhX3RyZWUuYwppbmRleCA5NTM0MDRjLi5mODFmNGJjIDEwMDY0NAotLS0gYS9mcy9xdW90YV90cmVlLmMKKysrIGIvZnMvcXVvdGEvcXVvdGFfdHJlZS5jCkBAIC0yMiw4ICsyMiw2IEBACiAKICNkZWZpbmUgX19RVU9UQV9RVF9QQVJBTk9JQQogCi10eXBlZGVmIGNoYXIgKmRxYnVmX3Q7Ci0KIHN0YXRpYyBpbnQgZ2V0X2luZGV4KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBxaWRfdCBpZCwgaW50IGRlcHRoKQogewogCXVuc2lnbmVkIGludCBlcGIgPSBpbmZvLT5kcWlfdXNhYmxlX2JzID4+IDI7CkBAIC0zNSw0NiArMzMsNDIgQEAKIH0KIAogLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gb25lIGJsb2NrcyAqLwotc3RhdGljIGlubGluZSBpbnQgcXRyZWVfZHFzdHJfaW5fYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvKQorc3RhdGljIGludCBxdHJlZV9kcXN0cl9pbl9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8pCiB7CiAJcmV0dXJuIChpbmZvLT5kcWlfdXNhYmxlX2JzIC0gc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpKQogCSAgICAgICAvIGluZm8tPmRxaV9lbnRyeV9zaXplOwogfQogCi1zdGF0aWMgZHFidWZfdCBnZXRkcWJ1ZihzaXplX3Qgc2l6ZSkKK3N0YXRpYyBjaGFyICpnZXRkcWJ1ZihzaXplX3Qgc2l6ZSkKIHsKLQlkcWJ1Zl90IGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX05PRlMpOworCWNoYXIgKmJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX05PRlMpOwogCWlmICghYnVmKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBxdW90YSBidWZmZXJzLlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJWRlM6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBxdW90YSBidWZmZXJzLlxuIik7CiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVkcWJ1ZihkcWJ1Zl90IGJ1ZikKLXsKLQlrZnJlZShidWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHNzaXplX3QgcmVhZF9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHVpbnQgYmxrLCBkcWJ1Zl90IGJ1ZikKK3N0YXRpYyBzc2l6ZV90IHJlYWRfYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCB1aW50IGJsaywgY2hhciAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbmZvLT5kcWlfc2I7CiAKIAltZW1zZXQoYnVmLCAwLCBpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlyZXR1cm4gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIGluZm8tPmRxaV90eXBlLCAoY2hhciAqKWJ1ZiwKKwlyZXR1cm4gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIGluZm8tPmRxaV90eXBlLCBidWYsCiAJICAgICAgIGluZm8tPmRxaV91c2FibGVfYnMsIGJsayA8PCBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHNzaXplX3Qgd3JpdGVfYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCB1aW50IGJsaywgZHFidWZfdCBidWYpCitzdGF0aWMgc3NpemVfdCB3cml0ZV9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHVpbnQgYmxrLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGluZm8tPmRxaV9zYjsKIAotCXJldHVybiBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIGluZm8tPmRxaV90eXBlLCAoY2hhciAqKWJ1ZiwKKwlyZXR1cm4gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCBpbmZvLT5kcWlfdHlwZSwgYnVmLAogCSAgICAgICBpbmZvLT5kcWlfdXNhYmxlX2JzLCBibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKTsKIH0KIAogLyogUmVtb3ZlIGVtcHR5IGJsb2NrIGZyb20gbGlzdCBhbmQgcmV0dXJuIGl0ICovCiBzdGF0aWMgaW50IGdldF9mcmVlX2RxYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvKQogewotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CiAJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKIAlpbnQgcmV0LCBibGs7CiAKQEAgLTk4LDEyICs5MiwxMiBAQAogCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKIAlyZXQgPSBibGs7CiBvdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOworCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KIAogLyogSW5zZXJ0IGVtcHR5IGJsb2NrIHRvIHRoZSBsaXN0ICovCi1zdGF0aWMgaW50IHB1dF9mcmVlX2RxYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBkcWJ1Zl90IGJ1ZiwgdWludCBibGspCitzdGF0aWMgaW50IHB1dF9mcmVlX2RxYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBjaGFyICpidWYsIHVpbnQgYmxrKQogewogCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CiAJaW50IGVycjsKQEAgLTEyMCw5ICsxMTQsMTAgQEAKIH0KIAogLyogUmVtb3ZlIGdpdmVuIGJsb2NrIGZyb20gdGhlIGxpc3Qgb2YgYmxvY2tzIHdpdGggZnJlZSBlbnRyaWVzICovCi1zdGF0aWMgaW50IHJlbW92ZV9mcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGRxYnVmX3QgYnVmLCB1aW50IGJsaykKK3N0YXRpYyBpbnQgcmVtb3ZlX2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgY2hhciAqYnVmLAorCQkJICAgICAgIHVpbnQgYmxrKQogewotCWRxYnVmX3QgdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJY2hhciAqdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CiAJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKIAl1aW50IG5leHRibGsgPSBsZTMyX3RvX2NwdShkaC0+ZHFkaF9uZXh0X2ZyZWUpOwogCXVpbnQgcHJldmJsayA9IGxlMzJfdG9fY3B1KGRoLT5kcWRoX3ByZXZfZnJlZSk7CkBAIC0xNTMsMjEgKzE0OCwyNCBAQAogCQlpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IG5leHRibGs7CiAJCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKIAl9Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7CisJa2ZyZWUodG1wYnVmKTsKIAlkaC0+ZHFkaF9uZXh0X2ZyZWUgPSBkaC0+ZHFkaF9wcmV2X2ZyZWUgPSBjcHVfdG9fbGUzMigwKTsKIAkvKiBObyBtYXR0ZXIgd2hldGhlciB3cml0ZSBzdWNjZWVkcyBibG9jayBpcyBvdXQgb2YgbGlzdCAqLwogCWlmICh3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHdyaXRlIGJsb2NrICgldSkgd2l0aCBmcmVlIGVudHJpZXMuXG4iLCBibGspOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJWRlM6IENhbid0IHdyaXRlIGJsb2NrICgldSkgd2l0aCBmcmVlIGVudHJpZXMuXG4iLAorCQkgICAgICAgYmxrKTsKIAlyZXR1cm4gMDsKIG91dF9idWY6Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7CisJa2ZyZWUodG1wYnVmKTsKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBJbnNlcnQgZ2l2ZW4gYmxvY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBsaXN0IHdpdGggZnJlZSBlbnRyaWVzICovCi1zdGF0aWMgaW50IGluc2VydF9mcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGRxYnVmX3QgYnVmLCB1aW50IGJsaykKK3N0YXRpYyBpbnQgaW5zZXJ0X2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgY2hhciAqYnVmLAorCQkJICAgICAgIHVpbnQgYmxrKQogewotCWRxYnVmX3QgdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJY2hhciAqdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CiAJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKIAlpbnQgZXJyOwogCkBAIC0xODgsMTIgKzE4NiwxMiBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0X2J1ZjsKIAl9Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7CisJa2ZyZWUodG1wYnVmKTsKIAlpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IGJsazsKIAltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7CiAJcmV0dXJuIDA7CiBvdXRfYnVmOgotCWZyZWVkcWJ1Zih0bXBidWYpOworCWtmcmVlKHRtcGJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjE1LDcgKzIxMyw3IEBACiB7CiAJdWludCBibGssIGk7CiAJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7Ci0JZHFidWZfdCBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKIAljaGFyICpkZHF1b3Q7CiAKIAkqZXJyID0gMDsKQEAgLTIzMywxMSArMjMxLDEyIEBACiAJCWJsayA9IGdldF9mcmVlX2RxYmxrKGluZm8pOwogCQlpZiAoKGludClibGsgPCAwKSB7CiAJCQkqZXJyID0gYmxrOwotCQkJZnJlZWRxYnVmKGJ1Zik7CisJCQlrZnJlZShidWYpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JCS8qIFRoaXMgaXMgZW5vdWdoIGFzIGJsb2NrIGlzIGFscmVhZHkgemVyb2VkIGFuZCBlbnRyeSBsaXN0IGlzIGVtcHR5Li4uICovCisJCS8qIFRoaXMgaXMgZW5vdWdoIGFzIHRoZSBibG9jayBpcyBhbHJlYWR5IHplcm9lZCBhbmQgdGhlIGVudHJ5CisJCSAqIGxpc3QgaXMgZW1wdHkuLi4gKi8KIAkJaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBibGs7CiAJCW1hcmtfaW5mb19kaXJ0eShkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKIAl9CkBAIC0yNTMsOSArMjUyLDEyIEBACiAJfQogCWxlMTZfYWRkX2NwdSgmZGgtPmRxZGhfZW50cmllcywgMSk7CiAJLyogRmluZCBmcmVlIHN0cnVjdHVyZSBpbiBibG9jayAqLwotCWZvciAoaSA9IDAsIGRkcXVvdCA9ICgoY2hhciAqKWJ1ZikgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7Ci0JICAgICBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pICYmICFxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZGRxdW90KTsKLQkgICAgIGkrKywgZGRxdW90ICs9IGluZm8tPmRxaV9lbnRyeV9zaXplKTsKKwlkZHF1b3QgPSBidWYgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7CisJZm9yIChpID0gMDsgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKTsgaSsrKSB7CisJCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZGRxdW90KSkKKwkJCWJyZWFrOworCQlkZHF1b3QgKz0gaW5mby0+ZHFpX2VudHJ5X3NpemU7CisJfQogI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKIAlpZiAoaSA9PSBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IERhdGEgYmxvY2sgZnVsbCAiCkBAIC0yNzMsMTAgKzI3NSwxMCBAQAogCWRxdW90LT5kcV9vZmYgPSAoYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cykgKwogCQkJc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpICsKIAkJCWkgKiBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKLQlmcmVlZHFidWYoYnVmKTsKKwlrZnJlZShidWYpOwogCXJldHVybiBibGs7CiBvdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOworCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NCw3ICsyODYsNyBAQAogc3RhdGljIGludCBkb19pbnNlcnRfdHJlZShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCwKIAkJCSAgdWludCAqdHJlZWJsaywgaW50IGRlcHRoKQogewotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CiAJaW50IHJldCA9IDAsIG5ld3NvbiA9IDAsIG5ld2FjdCA9IDA7CiAJX19sZTMyICpyZWY7CiAJdWludCBuZXdibGs7CkBAIC0zMzMsNyArMzM1LDcgQEAKIAkJcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCAqdHJlZWJsayk7CiAJfQogb3V0X2J1ZjoKLQlmcmVlZHFidWYoYnVmKTsKKwlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0NiwxNCArMzQ4LDE1IEBACiB9CiAKIC8qCi0gKglXZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiBkZWFkbG9ja3MgYXMgd2UgbmV2ZXIgaGF2ZSBxdW90YXMgb24gcXVvdGEgZmlsZXMuLi4KKyAqIFdlIGRvbid0IGhhdmUgdG8gYmUgYWZyYWlkIG9mIGRlYWRsb2NrcyBhcyB3ZSBuZXZlciBoYXZlIHF1b3RhcyBvbiBxdW90YQorICogZmlsZXMuLi4KICAqLwogaW50IHF0cmVlX3dyaXRlX2RxdW90KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewogCWludCB0eXBlID0gZHF1b3QtPmRxX3R5cGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRxdW90LT5kcV9zYjsKIAlzc2l6ZV90IHJldDsKLQlkcWJ1Zl90IGRkcXVvdCA9IGdldGRxYnVmKGluZm8tPmRxaV9lbnRyeV9zaXplKTsKKwljaGFyICpkZHF1b3QgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfZW50cnlfc2l6ZSk7CiAKIAlpZiAoIWRkcXVvdCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNjQsMTUgKzM2NywxNSBAQAogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEVycm9yICV6ZCBvY2N1cnJlZCB3aGlsZSAiCiAJCQkJCSJjcmVhdGluZyBxdW90YS5cbiIsIHJldCk7Ci0JCQlmcmVlZHFidWYoZGRxdW90KTsKKwkJCWtmcmVlKGRkcXVvdCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpbmZvLT5kcWlfb3BzLT5tZW0yZGlza19kcWJsayhkZHF1b3QsIGRxdW90KTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQlyZXQgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIChjaGFyICopZGRxdW90LAotCQkJCQlpbmZvLT5kcWlfZW50cnlfc2l6ZSwgZHF1b3QtPmRxX29mZik7CisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCBkZHF1b3QsIGluZm8tPmRxaV9lbnRyeV9zaXplLAorCQkJCSAgICBkcXVvdC0+ZHFfb2ZmKTsKIAlpZiAocmV0ICE9IGluZm8tPmRxaV9lbnRyeV9zaXplKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZGUzogZHF1b3RhIHdyaXRlIGZhaWxlZCBvbiBkZXYgJXNcbiIsCiAJCSAgICAgICBzYi0+c19pZCk7CkBAIC0zODIsNyArMzg1LDcgQEAKIAkJcmV0ID0gMDsKIAl9CiAJZHFzdGF0cy53cml0ZXMrKzsKLQlmcmVlZHFidWYoZGRxdW90KTsKKwlrZnJlZShkZHF1b3QpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM5Myw3ICszOTYsNyBAQAogCQkJdWludCBibGspCiB7CiAJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7Ci0JZHFidWZfdCBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghYnVmKQpAQCAtNDQ0LDcgKzQ0Nyw3IEBACiAJfQogCWRxdW90LT5kcV9vZmYgPSAwOwkvKiBRdW90YSBpcyBub3cgdW5hdHRhY2hlZCAqLwogb3V0X2J1ZjoKLQlmcmVlZHFidWYoYnVmKTsKKwlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQ1Miw3ICs0NTUsNyBAQAogc3RhdGljIGludCByZW1vdmVfdHJlZShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCwKIAkJICAgICAgIHVpbnQgKmJsaywgaW50IGRlcHRoKQogewotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJY2hhciAqYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CiAJaW50IHJldCA9IDA7CiAJdWludCBuZXdibGs7CiAJX19sZTMyICpyZWYgPSAoX19sZTMyICopYnVmOwpAQCAtNDc1LDkgKzQ3OCw4IEBACiAJCWludCBpOwogCQlyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSA9IGNwdV90b19sZTMyKDApOwogCQkvKiBCbG9jayBnb3QgZW1wdHk/ICovCi0JCWZvciAoaSA9IDA7Ci0JCSAgICAgaSA8IChpbmZvLT5kcWlfdXNhYmxlX2JzID4+IDIpICYmICFyZWZbaV07Ci0JCSAgICAgaSsrKTsKKwkJZm9yIChpID0gMDsgaSA8IChpbmZvLT5kcWlfdXNhYmxlX2JzID4+IDIpICYmICFyZWZbaV07IGkrKykKKwkJCTsKIAkJLyogRG9uJ3QgcHV0IHRoZSByb290IGJsb2NrIGludG8gdGhlIGZyZWUgYmxvY2sgbGlzdCAqLwogCQlpZiAoaSA9PSAoaW5mby0+ZHFpX3VzYWJsZV9icyA+PiAyKQogCQkgICAgJiYgKmJsayAhPSBRVF9UUkVFT0ZGKSB7CkBAIC00OTEsNyArNDkzLDcgQEAKIAkJfQogCX0KIG91dF9idWY6Ci0JZnJlZWRxYnVmKGJ1Zik7CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MTAsNyArNTEyLDcgQEAKIHN0YXRpYyBsb2ZmX3QgZmluZF9ibG9ja19kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAogCQkJCSBzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1aW50IGJsaykKIHsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOworCWNoYXIgKmJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwogCWxvZmZfdCByZXQgPSAwOwogCWludCBpOwogCWNoYXIgKmRkcXVvdDsKQEAgLTUyMiw5ICs1MjQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgdHJlZSBibG9jayAldS5cbiIsIGJsayk7CiAJCWdvdG8gb3V0X2J1ZjsKIAl9Ci0JZm9yIChpID0gMCwgZGRxdW90ID0gKChjaGFyICopYnVmKSArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKLQkgICAgIGkgPCBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykgJiYgIWluZm8tPmRxaV9vcHMtPmlzX2lkKGRkcXVvdCwgZHF1b3QpOwotCSAgICAgaSsrLCBkZHF1b3QgKz0gaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCWRkcXVvdCA9IGJ1ZiArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pOyBpKyspIHsKKwkJaWYgKGluZm8tPmRxaV9vcHMtPmlzX2lkKGRkcXVvdCwgZHF1b3QpKQorCQkJYnJlYWs7CisJCWRkcXVvdCArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKwl9CiAJaWYgKGkgPT0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBmb3IgaWQgJXUgcmVmZXJlbmNlZCAiCiAJCSAgImJ1dCBub3QgcHJlc2VudC5cbiIsIGRxdW90LT5kcV9pZCk7CkBAIC01MzUsNyArNTQwLDcgQEAKIAkJICBxdF9kaXNrX2RxZGJoZWFkZXIpICsgaSAqIGluZm8tPmRxaV9lbnRyeV9zaXplOwogCX0KIG91dF9idWY6Ci0JZnJlZWRxYnVmKGJ1Zik7CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NDMsNyArNTQ4LDcgQEAKIHN0YXRpYyBsb2ZmX3QgZmluZF90cmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCiAJCQkJc3RydWN0IGRxdW90ICpkcXVvdCwgdWludCBibGssIGludCBkZXB0aCkKIHsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOworCWNoYXIgKmJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwogCWxvZmZfdCByZXQgPSAwOwogCV9fbGUzMiAqcmVmID0gKF9fbGUzMiAqKWJ1ZjsKIApAQCAtNTYzLDcgKzU2OCw3IEBACiAJZWxzZQogCQlyZXQgPSBmaW5kX2Jsb2NrX2RxZW50cnkoaW5mbywgZHF1b3QsIGJsayk7CiBvdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOworCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTc5LDcgKzU4NCw3IEBACiAJaW50IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZHF1b3QtPmRxX3NiOwogCWxvZmZfdCBvZmZzZXQ7Ci0JZHFidWZfdCBkZHF1b3Q7CisJY2hhciAqZGRxdW90OwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQpAQCAtNjA3LDggKzYxMiw4IEBACiAJZGRxdW90ID0gZ2V0ZHFidWYoaW5mby0+ZHFpX2VudHJ5X3NpemUpOwogCWlmICghZGRxdW90KQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKilkZHF1b3QsCi0JCQkJICAgaW5mby0+ZHFpX2VudHJ5X3NpemUsIGRxdW90LT5kcV9vZmYpOworCXJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCBkZHF1b3QsIGluZm8tPmRxaV9lbnRyeV9zaXplLAorCQkJCSAgIGRxdW90LT5kcV9vZmYpOwogCWlmIChyZXQgIT0gaW5mby0+ZHFpX2VudHJ5X3NpemUpIHsKIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gLUVJTzsKQEAgLTYxNiw3ICs2MjEsNyBAQAogCQkJCSJzdHJ1Y3R1cmUgZm9yIGlkICV1LlxuIiwgZHF1b3QtPmRxX2lkKTsKIAkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCQltZW1zZXQoJmRxdW90LT5kcV9kcWIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2RxYmxrKSk7Ci0JCWZyZWVkcWJ1ZihkZHF1b3QpOworCQlrZnJlZShkZHF1b3QpOwogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwpAQCAtNjI3LDcgKzYzMiw3IEBACiAJICAgICFkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQogCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JZnJlZWRxYnVmKGRkcXVvdCk7CisJa2ZyZWUoZGRxdW90KTsKIG91dDoKIAlkcXN0YXRzLnJlYWRzKys7CiAJcmV0dXJuIHJldDsKQEAgLTYzOCw3ICs2NDMsOCBAQAogICogdGhlIG9ubHkgb25lIG9wZXJhdGluZyBvbiBkcXVvdCAodGhhbmtzIHRvIGRxX2xvY2spICovCiBpbnQgcXRyZWVfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKLQlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSAmJiAhKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyB8IGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlKSkKKwlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSAmJgorCSAgICAhKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyB8IGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlKSkKIAkJcmV0dXJuIHF0cmVlX2RlbGV0ZV9kcXVvdChpbmZvLCBkcXVvdCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9xdW90YV90cmVlLmggYi9mcy9xdW90YS9xdW90YV90cmVlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3F1b3RhX3RyZWUuaApyZW5hbWUgdG8gZnMvcXVvdGEvcXVvdGFfdHJlZS5oCmRpZmYgLS1naXQgYS9mcy9xdW90YV92MS5jIGIvZnMvcXVvdGEvcXVvdGFfdjEuYwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBmcy9xdW90YV92MS5jCnJlbmFtZSB0byBmcy9xdW90YS9xdW90YV92MS5jCmluZGV4IGI0YWYxYzYuLjBlZGNmNDIgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhX3YxLmMKKysrIGIvZnMvcXVvdGEvcXVvdGFfdjEuYwpAQCAtNjIsMTEgKzYyLDE0IEBACiAKIAkvKiBTZXQgc3RydWN0dXJlIHRvIDBzIGluIGNhc2UgcmVhZCBmYWlscy9pcyBhZnRlciBlbmQgb2YgZmlsZSAqLwogCW1lbXNldCgmZHFibGssIDAsIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpOwotCWRxdW90LT5kcV9zYi0+c19vcC0+cXVvdGFfcmVhZChkcXVvdC0+ZHFfc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLCBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZihkcXVvdC0+ZHFfaWQpKTsKKwlkcXVvdC0+ZHFfc2ItPnNfb3AtPnF1b3RhX3JlYWQoZHF1b3QtPmRxX3NiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKKwkJCXNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKGRxdW90LT5kcV9pZCkpOwogCiAJdjFfZGlzazJtZW1fZHFibGsoJmRxdW90LT5kcV9kcWIsICZkcWJsayk7Ci0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgPT0gMCAmJiBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ID09IDAgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCA9PSAwICYmIGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgPT0gMCkKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdCA9PSAwICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgPT0gMCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ID09IDAgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCA9PSAwKQogCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJZHFzdGF0cy5yZWFkcysrOwogCkBAIC04MSwxMyArODQsMTYgQEAKIAogCXYxX21lbTJkaXNrX2RxYmxrKCZkcWJsaywgJmRxdW90LT5kcV9kcWIpOwogCWlmIChkcXVvdC0+ZHFfaWQgPT0gMCkgewotCQlkcWJsay5kcWJfYnRpbWUgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW3R5cGVdLmRxaV9iZ3JhY2U7Ci0JCWRxYmxrLmRxYl9pdGltZSA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bdHlwZV0uZHFpX2lncmFjZTsKKwkJZHFibGsuZHFiX2J0aW1lID0KKwkJCXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bdHlwZV0uZHFpX2JncmFjZTsKKwkJZHFibGsuZHFiX2l0aW1lID0KKwkJCXNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bdHlwZV0uZHFpX2lncmFjZTsKIAl9CiAJcmV0ID0gMDsKIAlpZiAoc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pCi0JCXJldCA9IGRxdW90LT5kcV9zYi0+c19vcC0+cXVvdGFfd3JpdGUoZHF1b3QtPmRxX3NiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKLQkJCQkJc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSwgdjFfZHFvZmYoZHF1b3QtPmRxX2lkKSk7CisJCXJldCA9IGRxdW90LT5kcV9zYi0+c19vcC0+cXVvdGFfd3JpdGUoZHF1b3QtPmRxX3NiLCB0eXBlLAorCQkJKGNoYXIgKikmZHFibGssIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksCisJCQl2MV9kcW9mZihkcXVvdC0+ZHFfaWQpKTsKIAlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBkcXVvdGEgd3JpdGUgZmFpbGVkIG9uIGRldiAlc1xuIiwKIAkJCWRxdW90LT5kcV9zYi0+c19pZCk7CkBAIC0xMzAsMTUgKzEzNiwyMCBAQAogCQlyZXR1cm4gMDsKIAlibG9ja3MgPSBpc2l6ZSA+PiBCTE9DS19TSVpFX0JJVFM7CiAJb2ZmID0gaXNpemUgJiAoQkxPQ0tfU0laRSAtIDEpOwotCWlmICgoYmxvY2tzICUgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSAqIEJMT0NLX1NJWkUgKyBvZmYpICUgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkKKwlpZiAoKGJsb2NrcyAlIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykgKiBCTE9DS19TSVpFICsgb2ZmKSAlCisJICAgIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpCiAJCXJldHVybiAwOwotCS8qIERvdWJsZWNoZWNrIHdoZXRoZXIgd2UgZGlkbid0IGdldCBmaWxlIHdpdGggbmV3IGZvcm1hdCAtIHdpdGggb2xkIHF1b3RhY3RsKCkgdGhpcyBjb3VsZCBoYXBwZW4gKi8KLQlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxaGVhZCwgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgMCk7CisJLyogRG91YmxlY2hlY2sgd2hldGhlciB3ZSBkaWRuJ3QgZ2V0IGZpbGUgd2l0aCBuZXcgZm9ybWF0IC0gd2l0aCBvbGQKKwkgKiBxdW90YWN0bCgpIHRoaXMgY291bGQgaGFwcGVuICovCisJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWhlYWQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciksIDApOwogCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikpCiAJCXJldHVybiAxOwkvKiBQcm9iYWJseSBub3QgbmV3IGZvcm1hdCAqLwogCWlmIChsZTMyX3RvX2NwdShkcWhlYWQuZHFoX21hZ2ljKSAhPSBxdW90YV9tYWdpY3NbdHlwZV0pCiAJCXJldHVybiAxOwkvKiBEZWZpbml0ZWx5IG5vdCBuZXcgZm9ybWF0ICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiVkZTOiAlczogUmVmdXNpbmcgdG8gdHVybiBvbiBvbGQgcXVvdGEgZm9ybWF0IG9uIGdpdmVuIGZpbGUuIEl0IHByb2JhYmx5IGNvbnRhaW5zIG5ld2VyIHF1b3RhIGZvcm1hdC5cbiIsIHNiLT5zX2lkKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJWRlM6ICVzOiBSZWZ1c2luZyB0byB0dXJuIG9uIG9sZCBxdW90YSBmb3JtYXQgb24gZ2l2ZW4gZmlsZS4iCisJICAgICAgICIgSXQgcHJvYmFibHkgY29udGFpbnMgbmV3ZXIgcXVvdGEgZm9ybWF0LlxuIiwgc2ItPnNfaWQpOwogICAgICAgICByZXR1cm4gMDsJCS8qIFNlZW1zIGxpa2UgYSBuZXcgZm9ybWF0IGZpbGUgLT4gcmVmdXNlIGl0ICovCiB9CiAKQEAgLTE0OCw3ICsxNTksOSBAQAogCXN0cnVjdCB2MV9kaXNrX2RxYmxrIGRxYmxrOwogCWludCByZXQ7CiAKLQlpZiAoKHJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSwgdjFfZHFvZmYoMCkpKSAhPSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKSB7CisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAorCQkJCXNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKTsKKwlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC0xNTcsOCArMTcwLDEwIEBACiAJLyogbGltaXRzIGFyZSBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGRhdGEgKi8KIAlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZjsKIAlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlID0gZHFibGsuZHFiX2l0aW1lID8gZHFibGsuZHFiX2l0aW1lIDogTUFYX0lRX1RJTUU7Ci0JZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZSA9IGRxYmxrLmRxYl9idGltZSA/IGRxYmxrLmRxYl9idGltZSA6IE1BWF9EUV9USU1FOworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2UgPQorCQkJZHFibGsuZHFiX2l0aW1lID8gZHFibGsuZHFiX2l0aW1lIDogTUFYX0lRX1RJTUU7CisJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZSA9CisJCQlkcWJsay5kcWJfYnRpbWUgPyBkcWJsay5kcWJfYnRpbWUgOiBNQVhfRFFfVElNRTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTcwLDggKzE4NSw5IEBACiAJaW50IHJldDsKIAogCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9mbGFncyAmPSB+RFFGX0lORk9fRElSVFk7Ci0JaWYgKChyZXQgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFibGssCi0JICAgIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKSkgIT0gc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkgeworCXJldCA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKKwkJCQlzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZigwKSk7CisJaWYgKHJldCAhPSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKSB7CiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZnMvcXVvdGFfdjIuYwpyZW5hbWUgdG8gZnMvcXVvdGEvcXVvdGFfdjIuYwppbmRleCBiNjE4YjU2Li5hNTQ3NWZiIDEwMDY0NAotLS0gYS9mcy9xdW90YV92Mi5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTU0LDcgKzU0LDggQEAKIAlzdGF0aWMgY29uc3QgdWludCBxdW90YV9tYWdpY3NbXSA9IFYyX0lOSVRRTUFHSUNTOwogCXN0YXRpYyBjb25zdCB1aW50IHF1b3RhX3ZlcnNpb25zW10gPSBWMl9JTklUUVZFUlNJT05TOwogIAotCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFoZWFkLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCAwKTsKKwlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxaGVhZCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgMCk7CiAJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSkgewogCQlwcmludGsoInF1b3RhX3YyOiBmYWlsZWQgcmVhZCBleHBlY3RlZD0lemQgZ290PSV6ZFxuIiwKIAkJCXNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciksIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGFpb192MS5oIGIvZnMvcXVvdGEvcXVvdGFpb192MS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9xdW90YWlvX3YxLmgKcmVuYW1lIHRvIGZzL3F1b3RhL3F1b3RhaW9fdjEuaApkaWZmIC0tZ2l0IGEvZnMvcXVvdGFpb192Mi5oIGIvZnMvcXVvdGEvcXVvdGFpb192Mi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy9xdW90YWlvX3YyLmgKcmVuYW1lIHRvIGZzL3F1b3RhL3F1b3RhaW9fdjIuaApkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCmluZGV4IGI5YjU2N2EuLjk5NWVmMWQgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogCkBAIC0xMTQsNiArMTEzLDkgQEAKIAkJaWYgKCFwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpKQogCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCisJCS8qIHByZXZlbnQgdGhlIHBhZ2UgZnJvbSBiZWluZyBkaXNjYXJkZWQgb24gbWVtb3J5IHByZXNzdXJlICovCisJCVNldFBhZ2VEaXJ0eShwYWdlKTsKKwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKQEAgLTEyNiw2ICsxMjgsNyBAQAogCXJldHVybiAtRUZCSUc7CiAKICBhZGRfZXJyb3I6CisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZXMgKyBsb29wKTsKIAlmb3IgKGxvb3ArKzsgbG9vcCA8IG5wYWdlczsgbG9vcCsrKQogCQlfX2ZyZWVfcGFnZShwYWdlcyArIGxvb3ApOwpAQCAtMjAxLDExICsyMDQsNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBieSBwcm92aWRpbmcgb3VyIG93biBzZXRhdHRyKCkgbWV0aG9kLCB3ZSBza2lwIHRoaXMgcXVvdGFpc20gKi8KLQlpZiAoKG9sZF9pYV92YWxpZCAmIEFUVFJfVUlEICYmIGlhLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAotCSAgICAob2xkX2lhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaWEtPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKQotCQlyZXQgPSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgaWEpID8gLUVEUVVPVCA6IDA7Ci0KIAkvKiBwaWNrIG91dCBzaXplLWNoYW5naW5nIGV2ZW50cyAqLwogCWlmIChpYS0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKIAkJbG9mZl90IHNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IDQ2NDZjYWEuLmYzMmQxNDIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAogCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgc2JoKTsKIAlpZiAoZm9yX3VuZm9ybWF0dGVkKQotCQlEUVVPVF9GUkVFX0JMT0NLX05PRElSVFkoaW5vZGUsIDEpOworCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCAxKTsKIH0KIAogdm9pZCByZWlzZXJmc19mcmVlX2Jsb2NrKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLApAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAkJCSAgICAgICBhbW91bnRfbmVlZGVkLCBoaW50LT5pbm9kZS0+aV91aWQpOwogI2VuZGlmCiAJCXF1b3RhX3JldCA9Ci0JCSAgICBEUVVPVF9BTExPQ19CTE9DS19OT0RJUlRZKGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkKTsKKwkJICAgIHZmc19kcV9hbGxvY19ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkKTsKIAkJaWYgKHF1b3RhX3JldCkJLyogUXVvdGEgZXhjZWVkZWQ/ICovCiAJCQlyZXR1cm4gUVVPVEFfRVhDRUVERUQ7CiAJCWlmIChoaW50LT5wcmVhbGxvY2F0ZSAmJiBoaW50LT5wcmVhbGxvY19zaXplKSB7CkBAIC0xMDY0LDggKzEwNjQsNyBAQAogCQkJCSAgICAgICAicmVpc2VycXVvdGE6IGFsbG9jYXRpbmcgKHByZWFsbG9jKSAlZCBibG9ja3MgaWQ9JXUiLAogCQkJCSAgICAgICBoaW50LT5wcmVhbGxvY19zaXplLCBoaW50LT5pbm9kZS0+aV91aWQpOwogI2VuZGlmCi0JCQlxdW90YV9yZXQgPQotCQkJICAgIERRVU9UX1BSRUFMTE9DX0JMT0NLX05PRElSVFkoaGludC0+aW5vZGUsCisJCQlxdW90YV9yZXQgPSB2ZnNfZHFfcHJlYWxsb2NfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwKIAkJCQkJCQkgaGludC0+cHJlYWxsb2Nfc2l6ZSk7CiAJCQlpZiAocXVvdGFfcmV0KQogCQkJCWhpbnQtPnByZWFsbG9jYXRlID0gaGludC0+cHJlYWxsb2Nfc2l6ZSA9IDA7CkBAIC0xMDk4LDcgKzEwOTcsMTAgQEAKIAkJCQkJICAgICAgIG5yX2FsbG9jYXRlZCwKIAkJCQkJICAgICAgIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKLQkJCQlEUVVPVF9GUkVFX0JMT0NLX05PRElSVFkoaGludC0+aW5vZGUsIGFtb3VudF9uZWVkZWQgKyBoaW50LT5wcmVhbGxvY19zaXplIC0gbnJfYWxsb2NhdGVkKTsJLyogRnJlZSBub3QgYWxsb2NhdGVkIGJsb2NrcyAqLworCQkJCS8qIEZyZWUgbm90IGFsbG9jYXRlZCBibG9ja3MgKi8KKwkJCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLAorCQkJCQlhbW91bnRfbmVlZGVkICsgaGludC0+cHJlYWxsb2Nfc2l6ZSAtCisJCQkJCW5yX2FsbG9jYXRlZCk7CiAJCQl9CiAJCQl3aGlsZSAobnJfYWxsb2NhdGVkLS0pCiAJCQkJcmVpc2VyZnNfZnJlZV9ibG9jayhoaW50LT50aCwgaGludC0+aW5vZGUsCkBAIC0xMTI5LDcgKzExMzEsNyBAQAogCQkJICAgICAgIFJFSVNFUkZTX0koaGludC0+aW5vZGUpLT5pX3ByZWFsbG9jX2NvdW50LAogCQkJICAgICAgIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKLQkJRFFVT1RfRlJFRV9CTE9DS19OT0RJUlRZKGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkICsKKwkJdmZzX2RxX2ZyZWVfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwgYW1vdW50X25lZWRlZCArCiAJCQkJCSBoaW50LT5wcmVhbGxvY19zaXplIC0gbnJfYWxsb2NhdGVkIC0KIAkJCQkJIFJFSVNFUkZTX0koaGludC0+aW5vZGUpLT4KIAkJCQkJIGlfcHJlYWxsb2NfY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggNTVmY2U5Mi4uODIzMjI3YSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC01Myw3ICs1Myw3IEBACiAJCSAqIGFmdGVyIGRlbGV0ZV9vYmplY3Qgc28gdGhhdCBxdW90YSB1cGRhdGVzIGdvIGludG8gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMKIAkJICogc3RhdCBkYXRhIGRlbGV0aW9uICovCiAJCWlmICghZXJyKSAKLQkJCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCQkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwogCiAJCWlmIChqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBqYmVnaW5fY291bnQpKQogCQkJZ290byBvdXQ7CkBAIC0xNzYzLDcgKzE3NjMsNyBAQAogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBvdXRfZW5kX3RyYW5zOwogCX0KQEAgLTE5NDcsMTIgKzE5NDcsMTIgQEAKIAlJTk9ERV9QS0VZKGlub2RlKS0+a19vYmplY3RpZCA9IDA7CiAKIAkvKiBRdW90YSBjaGFuZ2UgbXVzdCBiZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiBmb3Igam91cm5hbGluZyAqLwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogICAgICAgb3V0X2VuZF90cmFuczoKIAlqb3VybmFsX2VuZCh0aCwgdGgtPnRfc3VwZXIsIHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQpOwogCS8qIERyb3AgY2FuIGJlIG91dHNpZGUgYW5kIGl0IG5lZWRzIG1vcmUgY3JlZGl0cyBzbyBpdCdzIGJldHRlciB0byBoYXZlIGl0IG91dHNpZGUgKi8KLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIApAQCAtMzExOSw3ICszMTE5LDcgQEAKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gb3V0OwogCQkJCWVycm9yID0KLQkJCQkgICAgRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CisJCQkJICAgIHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKIAkJCQlpZiAoZXJyb3IpIHsKIAkJCQkJam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwKIAkJCQkJCSAgICBqYmVnaW5fY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggNzM4OTY3Zi4uNjM5ZDYzNSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC01NTUsNyArNTU1LDcgQEAKICovCiBzdGF0aWMgaW50IGRyb3BfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJaXB1dChpbm9kZSk7CkBAIC01NjMsNyArNTYzLDcgQEAKIH0KIAogLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgc2V0dXAgZm9yIHJlaXNlcmZzX25ld19pbm9kZS4gIAotKiogRFFVT1RfSU5JVCBuZWVkcyBsb3RzIG9mIGNyZWRpdHMgc28gaXQncyBiZXR0ZXIgdG8gaGF2ZSBpdAorKiogdmZzX2RxX2luaXQgbmVlZHMgbG90cyBvZiBjcmVkaXRzIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQKICoqIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiwgc28gd2UgaGFkIHRvIHB1bGwgc29tZSBiaXRzIG9mCiAqKiByZWlzZXJmc19uZXdfaW5vZGUgb3V0IGludG8gdGhpcyBmdW5jLgogKi8KQEAgLTU4Niw3ICs1ODYsNyBAQAogCX0gZWxzZSB7CiAJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKIAl9Ci0JRFFVT1RfSU5JVChpbm9kZSk7CisJdmZzX2RxX2luaXQoaW5vZGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdHJlZS5jIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwppbmRleCBhYmJjNjRkLi43M2FhYTMzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdHJlZS5jCisrKyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCSAgICAgICAicmVpc2VycXVvdGEgZGVsZXRlX2l0ZW0oKTogZnJlZWluZyAldSwgaWQ9JXUgdHlwZT0lYyIsCiAJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsIGhlYWQydHlwZSgmc19paCkpOwogI2VuZGlmCi0JRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKHBfc19pbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHBfc19pbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKIAogCS8qIFJldHVybiBkZWxldGVkIGJvZHkgbGVuZ3RoICovCiAJcmV0dXJuIG5fcmV0X3ZhbHVlOwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAkJCQkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgaW5vZGUtPmlfdWlkLAogCQkJCQkgICAgICAga2V5MnR5cGUoa2V5KSk7CiAjZW5kaWYKLQkJCQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsCisJCQkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKIAkJCQkJCQkgcXVvdGFfY3V0X2J5dGVzKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTczNCw3ICsxNzM0LDcgQEAKIAkJICAgICAgICJyZWlzZXJxdW90YSBjdXRfZnJvbV9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCiAJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsICc/Jyk7CiAjZW5kaWYKLQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwogCXJldHVybiBuX3JldF92YWx1ZTsKIH0KIApAQCAtMTk3MSw3ICsxOTcxLDcgQEAKIAkJICAgICAgIGtleTJ0eXBlKCYocF9zX2tleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKIAotCWlmIChEUVVPVF9BTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBuX3Bhc3RlZF9zaXplKSkgeworCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbl9wYXN0ZWRfc2l6ZSkpIHsKIAkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CiAJCXJldHVybiAtRURRVU9UOwogCX0KQEAgLTIwMjcsNyArMjAyNyw3IEBACiAJCSAgICAgICBuX3Bhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCiAJCSAgICAgICBrZXkydHlwZSgmKHBfc19rZXktPm9uX2Rpc2tfa2V5KSkpOwogI2VuZGlmCi0JRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKGlub2RlLCBuX3Bhc3RlZF9zaXplKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMDYwLDcgKzIwNjAsNyBAQAogI2VuZGlmCiAJCS8qIFdlIGNhbid0IGRpcnR5IGlub2RlIGhlcmUuIEl0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IHdyaXR0ZW4gYnV0CiAJCSAqIGFwcHJvcHJpYXRlIHN0YXQgaXRlbSBpc24ndCBpbnNlcnRlZCB5ZXQuLi4gKi8KLQkJaWYgKERRVU9UX0FMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsIHF1b3RhX2J5dGVzKSkgeworCQlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2J5dGVzKSkgewogCQkJcGF0aHJlbHNlKHBfc19wYXRoKTsKIAkJCXJldHVybiAtRURRVU9UOwogCQl9CkBAIC0yMTEyLDYgKzIxMTIsNiBAQAogCQkgICAgICAgcXVvdGFfYnl0ZXMsIGlub2RlLT5pX3VpZCwgaGVhZDJ0eXBlKHBfc19paCkpOwogI2VuZGlmCiAJaWYgKGlub2RlKQotCQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsIHF1b3RhX2J5dGVzKTsKKwkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCBmM2M4MjBiLi41ZGJhZmI3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAKIAkJaWYgKHRydW5jYXRlICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCS8qIFdlIGdvdCBhIHRydW5jYXRlIHJlcXVlc3QgZm9yIGEgZGlyIHdoaWNoIGlzIGltcG9zc2libGUuCkBAIC02MjksOCArNjI5LDYgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKICNkZWZpbmUgUVRZUEUyTkFNRSh0KSAoKHQpPT1VU1JRVU9UQT8idXNlciI6Imdyb3VwIikKIAotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqKTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICopOwogc3RhdGljIGludCByZWlzZXJmc19hY3F1aXJlX2RxdW90KHN0cnVjdCBkcXVvdCAqKTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKik7CkBAIC02MzksOCArNjM3LDggQEAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBjaGFyICosIGludCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyByZWlzZXJmc19xdW90YV9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplID0gcmVpc2VyZnNfZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcCA9IHJlaXNlcmZzX2RxdW90X2Ryb3AsCisJLmluaXRpYWxpemUgPSBkcXVvdF9pbml0aWFsaXplLAorCS5kcm9wID0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UgPSBkcXVvdF9hbGxvY19zcGFjZSwKIAkuYWxsb2NfaW5vZGUgPSBkcXVvdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9zcGFjZSA9IGRxdW90X2ZyZWVfc3BhY2UsCkBAIC0xODk2LDU4ICsxODk0LDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19RVU9UQQotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGNyZWF0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKLQlyZXQgPQotCSAgICBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkgIDIgKiBSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IGRxdW90X2luaXRpYWxpemUoaW5vZGUsIHR5cGUpOwotCWVyciA9Ci0JICAgIGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkyICogUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoIXJldCAmJiBlcnIpCi0JCXJldCA9IGVycjsKLSAgICAgIG91dDoKLQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcmVpc2VyZnNfZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGRlbGV0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKLQlyZXQgPQotCSAgICBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkgIDIgKiBSRUlTRVJGU19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKHJldCkgewotCQkvKgotCQkgKiBXZSBjYWxsIGRxdW90X2Ryb3AoKSBhbnl3YXkgdG8gYXQgbGVhc3QgcmVsZWFzZSByZWZlcmVuY2VzCi0JCSAqIHRvIHF1b3RhIHN0cnVjdHVyZXMgc28gdGhhdCB1bW91bnQgZG9lcyBub3QgaGFuZy4KLQkJICovCi0JCWRxdW90X2Ryb3AoaW5vZGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gZHF1b3RfZHJvcChpbm9kZSk7Ci0JZXJyID0KLQkgICAgam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwKLQkJCTIgKiBSRUlTRVJGU19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKCFyZXQgJiYgZXJyKQotCQlyZXQgPSBlcnI7Ci0gICAgICBvdXQ6Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHJlaXNlcmZzX3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGFkOTI0NjEuLmFlODgxY2MgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB4YXR0cl9sb29rdXBfcG9pc29uX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgeGF0dHJfbG9va3VwX3BvaXNvbl9vcHMgPSB7CiAJLmRfY29tcGFyZSA9IHhhdHRyX2xvb2t1cF9wb2lzb24sCiB9OwogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9kaXIuYyBiL2ZzL3NtYmZzL2Rpci5jCmluZGV4IGU3ZGRkMDMuLjNlNDgwM2IgMTAwNjQ0Ci0tLSBhL2ZzL3NtYmZzL2Rpci5jCisrKyBiL2ZzL3NtYmZzL2Rpci5jCkBAIC0yNzcsNyArMjc3LDcgQEAKIHN0YXRpYyBpbnQgc21iX2NvbXBhcmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CiBzdGF0aWMgaW50IHNtYl9kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc21iZnNfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IHNtYl9sb29rdXBfdmFsaWRhdGUsCiAJLmRfaGFzaAkJPSBzbWJfaGFzaF9kZW50cnksCkBAIC0yODUsNyArMjg1LDcgQEAKIAkuZF9kZWxldGUJPSBzbWJfZGVsZXRlX2RlbnRyeSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc21iZnNfZGVudHJ5X29wZXJhdGlvbnNfY2FzZSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNtYmZzX2RlbnRyeV9vcGVyYXRpb25zX2Nhc2UgPQogewogCS5kX3JldmFsaWRhdGUJPSBzbWJfbG9va3VwX3ZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IHNtYl9kZWxldGVfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvYmxvY2suYyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKaW5kZXggMzIxNzI4Zi4uMmE3OTYwMyAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvYmxvY2suYworKysgYi9mcy9zcXVhc2hmcy9ibG9jay5jCkBAIC0xODQsMTUgKzE4NCw3IEBACiAJCQkJb2Zmc2V0ID0gMDsKIAkJCX0KIAotCQkJaWYgKG1zYmxrLT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKLQkJCQlpZiAocGFnZSA9PSBwYWdlcykgewotCQkJCQlFUlJPUigiemxpYl9pbmZsYXRlIHRyaWVkIHRvICIKLQkJCQkJCSJkZWNvbXByZXNzIHRvbyBtdWNoIGRhdGEsICIKLQkJCQkJCSJleHBlY3RlZCAlZCBieXRlcy4gIFpsaWIgIgotCQkJCQkJImRhdGEgcHJvYmFibHkgY29ycnVwdFxuIiwKLQkJCQkJCXNyY2xlbmd0aCk7Ci0JCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKLQkJCQl9CisJCQlpZiAobXNibGstPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCAmJiBwYWdlIDwgcGFnZXMpIHsKIAkJCQltc2Jsay0+c3RyZWFtLm5leHRfb3V0ID0gYnVmZmVyW3BhZ2UrK107CiAJCQkJbXNibGstPnN0cmVhbS5hdmFpbF9vdXQgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCQl9CkBAIC0yMDksMjUgKzIwMSwyMCBAQAogCQkJCXpsaWJfaW5pdCA9IDE7CiAJCQl9CiAKLQkJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlKCZtc2Jsay0+c3RyZWFtLCBaX05PX0ZMVVNIKTsKKwkJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlKCZtc2Jsay0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOwogCiAJCQlpZiAobXNibGstPnN0cmVhbS5hdmFpbF9pbiA9PSAwICYmIGsgPCBiKQogCQkJCXB1dF9iaChiaFtrKytdKTsKIAkJfSB3aGlsZSAoemxpYl9lcnIgPT0gWl9PSyk7CiAKIAkJaWYgKHpsaWJfZXJyICE9IFpfU1RSRUFNX0VORCkgewotCQkJRVJST1IoInpsaWJfaW5mbGF0ZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIKLQkJCQkiIDB4JXgsIHNyY2xlbmd0aCAlZCwgYXZhaWxfaW4gJWQsIgotCQkJCSIgYXZhaWxfb3V0ICVkXG4iLCB6bGliX2Vyciwgc3JjbGVuZ3RoLAotCQkJCW1zYmxrLT5zdHJlYW0uYXZhaWxfaW4sCi0JCQkJbXNibGstPnN0cmVhbS5hdmFpbF9vdXQpOworCQkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKIAkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAkJfQogCiAJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlRW5kKCZtc2Jsay0+c3RyZWFtKTsKIAkJaWYgKHpsaWJfZXJyICE9IFpfT0spIHsKLQkJCUVSUk9SKCJ6bGliX2luZmxhdGVFbmQgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQgMHgleCwiCi0JCQkJIiBzcmNsZW5ndGggJWRcbiIsIHpsaWJfZXJyLCBzcmNsZW5ndGgpOworCQkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKIAkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAkJfQogCQlsZW5ndGggPSBtc2Jsay0+c3RyZWFtLnRvdGFsX291dDsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDgzNDllZDYuLjJiYTQ4MTUgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnMtPnNfYWN0aXZlLCAmc2JfbG9jaykpIHsKIAkJcy0+c19jb3VudCAtPSBTX0JJQVMtMTsKIAkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwotCQlEUVVPVF9PRkYocywgMCk7CisJCXZmc19kcV9vZmYocywgMCk7CiAJCWRvd25fd3JpdGUoJnMtPnNfdW1vdW50KTsKIAkJZnMtPmtpbGxfc2Iocyk7CiAJCXB1dF9maWxlc3lzdGVtKGZzKTsKQEAgLTI2Niw3ICsyNjYsNyBAQAogdm9pZCBfX2ZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3luY19pbm9kZXNfc2Ioc2IsIDApOwotCURRVU9UX1NZTkMoc2IpOworCXZmc19kcV9zeW5jKHNiKTsKIAlsb2NrX3N1cGVyKHNiKTsKIAlpZiAoc2ItPnNfZGlydCAmJiBzYi0+c19vcC0+d3JpdGVfc3VwZXIpCiAJCXNiLT5zX29wLT53cml0ZV9zdXBlcihzYik7CkBAIC0zNzEsOCArMzcxLDEwIEBACiAJCQkJY29udGludWU7CiAJCQlpZiAoIWdyYWJfc3VwZXIob2xkKSkKIAkJCQlnb3RvIHJldHJ5OwotCQkJaWYgKHMpCisJCQlpZiAocykgeworCQkJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCQkJZGVzdHJveV9zdXBlcihzKTsKKwkJCX0KIAkJCXJldHVybiBvbGQ7CiAJCX0KIAl9CkBAIC0zODcsNiArMzg5LDcgQEAKIAllcnIgPSBzZXQocywgZGF0YSk7CiAJaWYgKGVycikgewogCQlzcGluX3VubG9jaygmc2JfbG9jayk7CisJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCWRlc3Ryb3lfc3VwZXIocyk7CiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQpAQCAtNjUyLDcgKzY1NSw3IEBACiAJCQltYXJrX2ZpbGVzX3JvKHNiKTsKIAkJZWxzZSBpZiAoIWZzX21heV9yZW1vdW50X3JvKHNiKSkKIAkJCXJldHVybiAtRUJVU1k7Ci0JCXJldHZhbCA9IERRVU9UX09GRihzYiwgMSk7CisJCXJldHZhbCA9IHZmc19kcV9vZmYoc2IsIDEpOwogCQlpZiAocmV0dmFsIDwgMCAmJiByZXR2YWwgIT0gLUVOT1NZUykKIAkJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNjY3LDExICs2NzAsMTEgQEAKIAl9CiAJc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+TVNfUk1UX01BU0spIHwgKGZsYWdzICYgTVNfUk1UX01BU0spOwogCWlmIChyZW1vdW50X3J3KQotCQlEUVVPVF9PTl9SRU1PVU5UKHNiKTsKKwkJdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkb19lbWVyZ2VuY3lfcmVtb3VudCh1bnNpZ25lZCBsb25nIGZvbykKK3N0YXRpYyB2b2lkIGRvX2VtZXJnZW5jeV9yZW1vdW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCkBAIC02OTQsMTIgKzY5NywxOSBAQAogCQlzcGluX2xvY2soJnNiX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmc2JfbG9jayk7CisJa2ZyZWUod29yayk7CiAJcHJpbnRrKCJFbWVyZ2VuY3kgUmVtb3VudCBjb21wbGV0ZVxuIik7CiB9CiAKIHZvaWQgZW1lcmdlbmN5X3JlbW91bnQodm9pZCkKIHsKLQlwZGZsdXNoX29wZXJhdGlvbihkb19lbWVyZ2VuY3lfcmVtb3VudCwgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX2VtZXJnZW5jeV9yZW1vdW50KTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9CiB9CiAKIC8qCkBAIC04MjgsNyArODM4LDggQEAKIAkJYmRldi0+YmRfc3VwZXIgPSBzOwogCX0KIAotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJcmV0dXJuIDA7CiAKIGVycm9yX3M6CiAJZXJyb3IgPSBQVFJfRVJSKHMpOwpAQCAtODc0LDcgKzg4NSw4IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChnZXRfc2Jfbm9kZXYpOwpAQCAtOTA2LDcgKzkxOCw4IEBACiAJCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCX0KIAlkb19yZW1vdW50X3NiKHMsIGZsYWdzLCBkYXRhLCAwKTsKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGdldF9zYl9zaW5nbGUpOwpkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IGExNmQ1M2UuLjdhYmM2NWYgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTI1LDcgKzI1LDcgQEAKIHsKIAl3YWtldXBfcGRmbHVzaCgwKTsKIAlzeW5jX2lub2RlcygwKTsJCS8qIEFsbCBtYXBwaW5ncywgaW5vZGVzIGFuZCB0aGVpciBibG9ja2RldnMgKi8KLQlEUVVPVF9TWU5DKE5VTEwpOworCXZmc19kcV9zeW5jKE5VTEwpOwogCXN5bmNfc3VwZXJzKCk7CQkvKiBXcml0ZSB0aGUgc3VwZXJibG9ja3MgKi8KIAlzeW5jX2ZpbGVzeXN0ZW1zKDApOwkvKiBTdGFydCBzeW5jaW5nIHRoZSBmaWxlc3lzdGVtcyAqLwogCXN5bmNfZmlsZXN5c3RlbXMod2FpdCk7CS8qIFdhaXRpbmdseSBzeW5jIHRoZSBmaWxlc3lzdGVtcyAqLwpAQCAtNDIsOSArNDIsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZG9fc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkb19zeW5jKDApOworCWtmcmVlKHdvcmspOworfQorCiB2b2lkIGVtZXJnZW5jeV9zeW5jKHZvaWQpCiB7Ci0JcGRmbHVzaF9vcGVyYXRpb24oZG9fc3luYywgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX3N5bmNfd29yayk7CisJCXNjaGVkdWxlX3dvcmsod29yayk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCBmMmM0NzhjLi4wNzcwM2QzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtMjEsMTUgKzIxLDI4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCisvKgorICogVGhlcmUncyBvbmUgYmluX2J1ZmZlciBmb3IgZWFjaCBvcGVuIGZpbGUuCisgKgorICogZmlscC0+cHJpdmF0ZV9kYXRhIHBvaW50cyB0byBiaW5fYnVmZmVyIGFuZAorICogc3lzZnNfZGlyZW50LT5zX2Jpbl9hdHRyLmJ1ZmZlcnMgcG9pbnRzIHRvIGEgdGhlIGJpbl9idWZmZXIgcworICogc3lzZnNfZGlyZW50LT5zX2Jpbl9hdHRyLmJ1ZmZlcnMgaXMgcHJvdGVjdGVkIGJ5IHN5c2ZzX2Jpbl9sb2NrCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoc3lzZnNfYmluX2xvY2spOworCiBzdHJ1Y3QgYmluX2J1ZmZlciB7Ci0Jc3RydWN0IG11dGV4CW11dGV4OwotCXZvaWQJCSpidWZmZXI7Ci0JaW50CQltbWFwcGVkOworCXN0cnVjdCBtdXRleAkJCW11dGV4OworCXZvaWQJCQkJKmJ1ZmZlcjsKKwlpbnQJCQkJbW1hcHBlZDsKKwlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgCSp2bV9vcHM7CisJc3RydWN0IGZpbGUJCQkqZmlsZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkJbGlzdDsKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTE2OCw2ICsxODEsMTc1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgdm9pZCBiaW5fdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+b3BlbikKKwkJcmV0dXJuOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuOworCisJYmItPnZtX29wcy0+b3Blbih2bWEpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7Cit9CisKK3N0YXRpYyB2b2lkIGJpbl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+Y2xvc2UpCisJCXJldHVybjsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybjsKKworCWJiLT52bV9vcHMtPmNsb3NlKHZtYSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK30KKworc3RhdGljIGludCBiaW5fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+ZmF1bHQpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJcmV0ID0gYmItPnZtX29wcy0+ZmF1bHQodm1hLCB2bWYpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiaW5fcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCBwYWdlKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmluX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+YWNjZXNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYmItPnZtX29wcy0+YWNjZXNzKHZtYSwgYWRkciwgYnVmLCBsZW4sIHdyaXRlKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTlVNQQorc3RhdGljIGludCBiaW5fc2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1lbXBvbGljeSAqbmV3KQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+c2V0X3BvbGljeSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGJiLT52bV9vcHMtPnNldF9wb2xpY3kodm1hLCBuZXcpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBtZW1wb2xpY3kgKmJpbl9nZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmdldF9wb2xpY3kpCisJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKKworCXBvbCA9IGJiLT52bV9vcHMtPmdldF9wb2xpY3kodm1hLCBhZGRyKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiBwb2w7Cit9CisKK3N0YXRpYyBpbnQgYmluX21pZ3JhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sCisJCQljb25zdCBub2RlbWFza190ICp0bywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPm1pZ3JhdGUpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5taWdyYXRlKHZtYSwgZnJvbSwgdG8sIGZsYWdzKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBiaW5fdm1fb3BzID0geworCS5vcGVuCQk9IGJpbl92bWFfb3BlbiwKKwkuY2xvc2UJCT0gYmluX3ZtYV9jbG9zZSwKKwkuZmF1bHQJCT0gYmluX2ZhdWx0LAorCS5wYWdlX21rd3JpdGUJPSBiaW5fcGFnZV9ta3dyaXRlLAorCS5hY2Nlc3MJCT0gYmluX2FjY2VzcywKKyNpZmRlZiBDT05GSUdfTlVNQQorCS5zZXRfcG9saWN5CT0gYmluX3NldF9wb2xpY3ksCisJLmdldF9wb2xpY3kJPSBiaW5fZ2V0X3BvbGljeSwKKwkubWlncmF0ZQk9IGJpbl9taWdyYXRlLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IG1tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTE3OSwxOCArMzYxLDM3IEBACiAJbXV0ZXhfbG9jaygmYmItPm11dGV4KTsKIAogCS8qIG5lZWQgYXR0cl9zZCBmb3IgYXR0ciwgaXRzIHBhcmVudCBmb3Iga29iaiAqLworCXJjID0gLUVOT0RFVjsKIAlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJcmMgPSAtRUlOVkFMOwotCWlmIChhdHRyLT5tbWFwKQotCQlyYyA9IGF0dHItPm1tYXAoa29iaiwgYXR0ciwgdm1hKTsKKwlpZiAoIWF0dHItPm1tYXApCisJCWdvdG8gb3V0X3B1dDsKIAotCWlmIChyYyA9PSAwICYmICFiYi0+bW1hcHBlZCkKLQkJYmItPm1tYXBwZWQgPSAxOwotCWVsc2UKLQkJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmMgPSBhdHRyLT5tbWFwKGtvYmosIGF0dHIsIHZtYSk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9wdXQ7CiAKKwkvKgorCSAqIFBvd2VyUEMncyBwY2lfbW1hcCBvZiBsZWdhY3lfbWVtIHVzZXMgc2htZW1femVyb19zZXR1cCgpCisJICogdG8gc2F0aXNmeSB2ZXJzaW9ucyBvZiBYIHdoaWNoIGNyYXNoIGlmIHRoZSBtbWFwIGZhaWxzOiB0aGF0CisJICogc3Vic3RpdHV0ZXMgYSBuZXcgdm1fZmlsZSwgYW5kIHdlIGRvbid0IHRoZW4gd2FudCBiaW5fdm1fb3BzLgorCSAqLworCWlmICh2bWEtPnZtX2ZpbGUgIT0gZmlsZSkKKwkJZ290byBvdXRfcHV0OworCisJcmMgPSAtRUlOVkFMOworCWlmIChiYi0+bW1hcHBlZCAmJiBiYi0+dm1fb3BzICE9IHZtYS0+dm1fb3BzKQorCQlnb3RvIG91dF9wdXQ7CisKKwlyYyA9IDA7CisJYmItPm1tYXBwZWQgPSAxOworCWJiLT52bV9vcHMgPSB2bWEtPnZtX29wczsKKwl2bWEtPnZtX29wcyA9ICZiaW5fdm1fb3BzOworb3V0X3B1dDoKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJjOwpAQCAtMjIzLDggKzQyNCwxMyBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAltdXRleF9pbml0KCZiYi0+bXV0ZXgpOworCWJiLT5maWxlID0gZmlsZTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBiYjsKIAorCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZCgmYmItPmxpc3QsICZhdHRyX3NkLT5zX2Jpbl9hdHRyLmJ1ZmZlcnMpOworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworCiAJLyogb3BlbiBzdWNjZWVkZWQsIHB1dCBhY3RpdmUgcmVmZXJlbmNlcyAqLwogCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOwogCXJldHVybiAwOwpAQCAtMjM3LDExICs0NDMsMTIgQEAKIAogc3RhdGljIGludCByZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0Jc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWlmIChiYi0+bW1hcHBlZCkKLQkJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCWhsaXN0X2RlbCgmYmItPmxpc3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworCiAJa2ZyZWUoYmItPmJ1ZmZlcik7CiAJa2ZyZWUoYmIpOwogCXJldHVybiAwOwpAQCAtMjU2LDYgKzQ2MywyNiBAQAogCS5yZWxlYXNlCT0gcmVsZWFzZSwKIH07CiAKKwordm9pZCB1bm1hcF9iaW5fZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkKQoreworCXN0cnVjdCBiaW5fYnVmZmVyICpiYjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCisJaWYgKHN5c2ZzX3R5cGUoYXR0cl9zZCkgIT0gU1lTRlNfS09CSl9CSU5fQVRUUikKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYmIsIHRtcCwgJmF0dHJfc2QtPnNfYmluX2F0dHIuYnVmZmVycywgbGlzdCkgeworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmItPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkJdW5tYXBfbWFwcGluZ19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAwLCAwLCAxKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKK30KKwogLyoqCiAgKglzeXNmc19jcmVhdGVfYmluX2ZpbGUgLSBjcmVhdGUgYmluYXJ5IGZpbGUgZm9yIG9iamVjdC4KICAqCUBrb2JqOglvYmplY3QuCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDgyZDNiNzkuLmQ4OGQwZmEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlpcHV0KGlub2RlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXNmc19kZW50cnlfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXNmc19kZW50cnlfb3BzID0gewogCS5kX2lwdXQJCT0gc3lzZnNfZF9pcHV0LAogfTsKIApAQCAtNDM0LDYgKzQzNCwyNiBAQAogfQogCiAvKioKKyAqCXN5c2ZzX3BhdGhuYW1lIC0gcmV0dXJuIGZ1bGwgcGF0aCB0byBzeXNmcyBkaXJlbnQKKyAqCUBzZDogc3lzZnNfZGlyZW50IHdob3NlIHBhdGggd2Ugd2FudAorICoJQHBhdGg6IGNhbGxlciBhbGxvY2F0ZWQgYnVmZmVyCisgKgorICoJR2l2ZXMgdGhlIG5hbWUgIi8iIHRvIHRoZSBzeXNmc19yb290IGVudHJ5OyBhbnkgcGF0aCByZXR1cm5lZAorICoJaXMgcmVsYXRpdmUgdG8gd2hlcmV2ZXIgc3lzZnMgaXMgbW91bnRlZC4KKyAqCisgKglYWFg6IGRvZXMgbm8gZXJyb3IgY2hlY2tpbmcgb24gQHBhdGggc2l6ZQorICovCitzdGF0aWMgY2hhciAqc3lzZnNfcGF0aG5hbWUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QsIGNoYXIgKnBhdGgpCit7CisJaWYgKHNkLT5zX3BhcmVudCkgeworCQlzeXNmc19wYXRobmFtZShzZC0+c19wYXJlbnQsIHBhdGgpOworCQlzdHJjYXQocGF0aCwgIi8iKTsKKwl9CisJc3RyY2F0KHBhdGgsIHNkLT5zX25hbWUpOworCXJldHVybiBwYXRoOworfQorCisvKioKICAqCXN5c2ZzX2FkZF9vbmUgLSBhZGQgc3lzZnNfZGlyZW50IHRvIHBhcmVudAogICoJQGFjeHQ6IGFkZHJtIGNvbnRleHQgdG8gdXNlCiAgKglAc2Q6IHN5c2ZzX2RpcmVudCB0byBiZSBhZGRlZApAQCAtNDU4LDggKzQ3OCwxNiBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBfX3N5c2ZzX2FkZF9vbmUoYWN4dCwgc2QpOwotCVdBUk4ocmV0ID09IC1FRVhJU1QsIEtFUk5fV0FSTklORyAic3lzZnM6IGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnICIKLQkJICAgICAgICJjYW4gbm90IGJlIGNyZWF0ZWRcbiIsIHNkLT5zX25hbWUpOworCWlmIChyZXQgPT0gLUVFWElTVCkgeworCQljaGFyICpwYXRoID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJCVdBUk4oMSwgS0VSTl9XQVJOSU5HCisJCSAgICAgInN5c2ZzOiBjYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnXG4iLAorCQkgICAgIChwYXRoID09IE5VTEwpID8gc2QtPnNfbmFtZSA6CisJCSAgICAgc3RyY2F0KHN0cmNhdChzeXNmc19wYXRobmFtZShhY3h0LT5wYXJlbnRfc2QsIHBhdGgpLCAiLyIpLAorCQkgICAgICAgICAgICBzZC0+c19uYW1lKSk7CisJCWtmcmVlKHBhdGgpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4MSw2ICs2MDksNyBAQAogCiAJCXN5c2ZzX2Ryb3BfZGVudHJ5KHNkKTsKIAkJc3lzZnNfZGVhY3RpdmF0ZShzZCk7CisJCXVubWFwX2Jpbl9maWxlKHNkKTsKIAkJc3lzZnNfcHV0KHNkKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggMWY0YTNmOC4uMjg5YzQzYSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtNjU5LDEzICs2NTksMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX3JlbW92ZV9maWxlX2Zyb21fZ3JvdXApOwogCiBzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0IHsKLQlzdHJ1Y3Qga29iamVjdCAJCSprb2JqOworCXN0cnVjdCBsaXN0X2hlYWQJd29ya3FfbGlzdDsKKwlzdHJ1Y3Qga29iamVjdAkJKmtvYmo7CiAJdm9pZAkJCSgqZnVuYykodm9pZCAqKTsKIAl2b2lkCQkJKmRhdGE7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKIAorc3RhdGljIERFRklORV9NVVRFWChzeXNmc193b3JrcV9tdXRleCk7CitzdGF0aWMgTElTVF9IRUFEKHN5c2ZzX3dvcmtxKTsKIHN0YXRpYyB2b2lkIHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzID0gY29udGFpbmVyX29mKHdvcmssCkBAIC02NzQsNiArNjc3LDkgQEAKIAkoc3MtPmZ1bmMpKHNzLT5kYXRhKTsKIAlrb2JqZWN0X3B1dChzcy0+a29iaik7CiAJbW9kdWxlX3B1dChzcy0+b3duZXIpOworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2RlbCgmc3MtPndvcmtxX2xpc3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOwogCWtmcmVlKHNzKTsKIH0KIApAQCAtNjk1LDE1ICs3MDEsMjUgQEAKICAqIHVudGlsIEBmdW5jIHJldHVybnMuCiAgKgogICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdhcyBzdWJtaXR0ZWQsIC1FTk9NRU0gaWYgc3RvcmFnZSBjb3VsZCBub3QKLSAqIGJlIGFsbG9jYXRlZCwgLUVOT0RFViBpZiBhIHJlZmVyZW5jZSB0byBAb3duZXIgaXNuJ3QgYXZhaWxhYmxlLgorICogYmUgYWxsb2NhdGVkLCAtRU5PREVWIGlmIGEgcmVmZXJlbmNlIHRvIEBvd25lciBpc24ndCBhdmFpbGFibGUsCisgKiAtRUFHQUlOIGlmIGEgY2FsbGJhY2sgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQgZm9yIEBrb2JqLgogICovCiBpbnQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHZvaWQgKCpmdW5jKSh2b2lkICopLAogCQl2b2lkICpkYXRhLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKLQlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzczsKKwlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzcywgKnRtcDsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3MsIHRtcCwgJnN5c2ZzX3dvcmtxLCB3b3JrcV9saXN0KQorCQlpZiAoc3MtPmtvYmogPT0ga29iaikgeworCQkJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCiAJc3MgPSBrbWFsbG9jKHNpemVvZigqc3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNzKSB7CiAJCW1vZHVsZV9wdXQob3duZXIpOwpAQCAtNzE1LDYgKzczMSwxMCBAQAogCXNzLT5kYXRhID0gZGF0YTsKIAlzcy0+b3duZXIgPSBvd25lcjsKIAlJTklUX1dPUksoJnNzLT53b3JrLCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja193b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3MtPndvcmtxX2xpc3QpOworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZzcy0+d29ya3FfbGlzdCwgJnN5c2ZzX3dvcmtxKTsKKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKIAlzY2hlZHVsZV93b3JrKCZzcy0+d29yayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCBkZmEzZDk0Li41NTVmMGZmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0cjsKIAorCWlub2RlLT5pX3ByaXZhdGUgPSBzeXNmc19nZXQoc2QpOwogCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnN5c2ZzX2FvcHM7CiAJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZzeXNmc19iYWNraW5nX2Rldl9pbmZvOwogCWlub2RlLT5pX29wID0gJnN5c2ZzX2lub2RlX29wZXJhdGlvbnM7CkBAIC0yMTQsNiArMjE1LDIyIEBACiAJcmV0dXJuIGlub2RlOwogfQogCisvKgorICogVGhlIHN5c2ZzX2RpcmVudCBzZXJ2ZXMgYXMgYm90aCBhbiBpbm9kZSBhbmQgYSBkaXJlY3RvcnkgZW50cnkgZm9yIHN5c2ZzLgorICogVG8gcHJldmVudCB0aGUgc3lzZnMgaW5vZGUgbnVtYmVycyBmcm9tIGJlaW5nIGZyZWVkIHByZW1hdHVyZWx5IHdlIHRha2UgYQorICogcmVmZXJlbmNlIHRvIHN5c2ZzX2RpcmVudCBmcm9tIHRoZSBzeXNmcyBpbm9kZS4gIEEKKyAqIHN1cGVyX29wZXJhdGlvbnMuZGVsZXRlX2lub2RlKCkgaW1wbGVtZW50YXRpb24gaXMgbmVlZGVkIHRvIGRyb3AgdGhhdAorICogcmVmZXJlbmNlIHVwb24gaW5vZGUgZGVzdHJ1Y3Rpb24uCisgKi8KK3ZvaWQgc3lzZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QgID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwljbGVhcl9pbm9kZShpbm9kZSk7CisJc3lzZnNfcHV0KHNkKTsKK30KKwogaW50IHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHN5c2ZzX2FkZHJtX2N4dCBhY3h0OwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvbW91bnQuYyBiL2ZzL3N5c2ZzL21vdW50LmMKaW5kZXggYWIzNDNlMy4uNDk3NDk5NSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvbW91bnQuYworKysgYi9mcy9zeXNmcy9tb3VudC5jCkBAIC0xNywxMSArMTcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCi0vKiBSYW5kb20gbWFnaWMgbnVtYmVyICovCi0jZGVmaW5lIFNZU0ZTX01BR0lDIDB4NjI2NTY1NzIKIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc3lzZnNfbW91bnQ7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzeXNmc19zYiA9IE5VTEw7CkBAIC0zMCw2ICsyOSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3lzZnNfb3BzID0gewogCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKIAkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAorCS5kZWxldGVfaW5vZGUJPSBzeXNmc19kZWxldGVfaW5vZGUsCiB9OwogCiBzdHJ1Y3Qgc3lzZnNfZGlyZW50IHN5c2ZzX3Jvb3QgPSB7CkBAIC01Myw3ICs1Myw5IEBACiAJc3lzZnNfc2IgPSBzYjsKIAogCS8qIGdldCByb290IGlub2RlLCBpbml0aWFsaXplIGFuZCB1bmxvY2sgaXQgKi8KKwltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJaW5vZGUgPSBzeXNmc19nZXRfaW5vZGUoJnN5c2ZzX3Jvb3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfbXV0ZXgpOwogCWlmICghaW5vZGUpIHsKIAkJcHJfZGVidWcoInN5c2ZzOiBjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IDkzYzZkNmIuLjNmYTBkOTg0IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeXNmcy5oCisrKyBiL2ZzL3N5c2ZzL3N5c2ZzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogc3RydWN0IHN5c2ZzX2VsZW1fYmluX2F0dHIgewogCXN0cnVjdCBiaW5fYXR0cmlidXRlCSpiaW5fYXR0cjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlidWZmZXJzOwogfTsKIAogLyoKQEAgLTE0NSw2ICsxNDYsNyBAQAogICogaW5vZGUuYwogICovCiBzdHJ1Y3QgaW5vZGUgKnN5c2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7Cit2b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBzeXNmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7CiBpbnQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc3lzZnNfaW5vZGVfaW5pdCh2b2lkKTsKQEAgLTE2Myw2ICsxNjUsNyBAQAogICogYmluLmMKICAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmluX2ZvcHM7Cit2b2lkIHVubWFwX2Jpbl9maWxlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QpOwogCiAvKgogICogc3ltbGluay5jCmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYTFmMWVmMy4uMzNlMDQ3YiAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMzgsNyArMzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXN2X2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gc3lzdl9oYXNoLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvc3lzdi9zeXN2LmggYi9mcy9zeXN2L3N5c3YuaAppbmRleCAzOGViZTNmLi41Nzg0YTMxIDEwMDY0NAotLS0gYS9mcy9zeXN2L3N5c3YuaAorKysgYi9mcy9zeXN2L3N5c3YuaApAQCAtMTcwLDcgKzE3MCw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXN2X2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3lzdl9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHN5c3Zfc29wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9uczsKIAogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3N1cGVyLmMgYi9mcy91Ymlmcy9zdXBlci5jCmluZGV4IDExODJiNjYuLmM1Yzk4MzUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3N1cGVyLmMKKysrIGIvZnMvdWJpZnMvc3VwZXIuYwpAQCAtMjAzNCw3ICsyMDM0LDggQEAKIAkvKiAnZmlsbF9zdXBlcigpJyBvcGVucyB1YmkgYWdhaW4gc28gd2UgbXVzdCBjbG9zZSBpdCBoZXJlICovCiAJdWJpX2Nsb3NlX3ZvbHVtZSh1YmkpOwogCi0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogCiBvdXRfZGVhY3Q6CiAJdXBfd3JpdGUoJnNiLT5zX3Vtb3VudCk7CmRpZmYgLS1naXQgYS9mcy91ZGYvYmFsbG9jLmMgYi9mcy91ZGYvYmFsbG9jLmMKaW5kZXggMWI4MDliZDQuLjJiYjc4OGEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9iYWxsb2MuYworKysgYi9mcy91ZGYvYmFsbG9jLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkJCQkoKGNoYXIgKiliaC0+Yl9kYXRhKVsoYml0ICsgaSkgPj4gM10pOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5vZGUpCi0JCQkJCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQkJdWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgc2JpLT5zX3BhcnRpdGlvbiwgMSk7CiAJCQl9CiAJCX0KQEAgLTI2MSwxMSArMjYxLDExIEBACiAJCXdoaWxlIChiaXQgPCAoc2ItPnNfYmxvY2tzaXplIDw8IDMpICYmIGJsb2NrX2NvdW50ID4gMCkgewogCQkJaWYgKCF1ZGZfdGVzdF9iaXQoYml0LCBiaC0+Yl9kYXRhKSkKIAkJCQlnb3RvIG91dDsKLQkJCWVsc2UgaWYgKERRVU9UX1BSRUFMTE9DX0JMT0NLKGlub2RlLCAxKSkKKwkJCWVsc2UgaWYgKHZmc19kcV9wcmVhbGxvY19ibG9jayhpbm9kZSwgMSkpCiAJCQkJZ290byBvdXQ7CiAJCQllbHNlIGlmICghdWRmX2NsZWFyX2JpdChiaXQsIGJoLT5iX2RhdGEpKSB7CiAJCQkJdWRmX2RlYnVnKCJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBibG9jayAlZFxuIiwgYml0KTsKLQkJCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQlibG9ja19jb3VudC0tOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJLyoKIAkgKiBDaGVjayBxdW90YSBmb3IgYWxsb2NhdGlvbiBvZiB0aGlzIGJsb2NrLgogCSAqLwotCWlmIChpbm9kZSAmJiBEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgMSkpIHsKKwlpZiAoaW5vZGUgJiYgdmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCAxKSkgewogCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJCSplcnIgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCS8qIFdlIGRvIHRoaXMgdXAgZnJvbnQgLSBUaGVyZSBhcmUgc29tZSBlcnJvciBjb25kaXRpb25zIHRoYXQKIAkgICBjb3VsZCBvY2N1cmUsIGJ1dC4uIG9oIHdlbGwgKi8KIAlpZiAoaW5vZGUpCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGNvdW50KTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGNvdW50KTsKIAlpZiAodWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgc2JpLT5zX3BhcnRpdGlvbiwgY291bnQpKQogCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7CiAKQEAgLTcwMCw3ICs3MDAsNyBAQAogCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CiAKIAkJYWxsb2NfY291bnQgPSAoZWxlbiA+PiBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCWlmIChpbm9kZSAmJiBEUVVPVF9QUkVBTExPQ19CTE9DSyhpbm9kZSwKKwkJaWYgKGlub2RlICYmIHZmc19kcV9wcmVhbGxvY19ibG9jayhpbm9kZSwKIAkJCWFsbG9jX2NvdW50ID4gYmxvY2tfY291bnQgPyBibG9ja19jb3VudCA6IGFsbG9jX2NvdW50KSkKIAkJCWFsbG9jX2NvdW50ID0gMDsKIAkJZWxzZSBpZiAoYWxsb2NfY291bnQgPiBibG9ja19jb3VudCkgewpAQCAtODA2LDcgKzgwNiw3IEBACiAJZ29hbF9lbG9jLmxvZ2ljYWxCbG9ja051bSsrOwogCWdvYWxfZWxlbiAtPSBzYi0+c19ibG9ja3NpemU7CiAKLQlpZiAoaW5vZGUgJiYgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKSB7CisJaWYgKGlub2RlICYmIHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpIHsKIAkJYnJlbHNlKGdvYWxfZXBvcy5iaCk7CiAJCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkJKmVyciA9IC1FRFFVT1Q7CmRpZmYgLS1naXQgYS9mcy91ZGYvaWFsbG9jLmMgYi9mcy91ZGYvaWFsbG9jLmMKaW5kZXggMzFmYzg0Mi4uNDdkYmU1NiAxMDA2NDQKLS0tIGEvZnMvdWRmL2lhbGxvYy5jCisrKyBiL2ZzL3VkZi9pYWxsb2MuYwpAQCAtMzYsOCArMzYsOCBAQAogCSAqIE5vdGU6IHdlIG11c3QgZnJlZSBhbnkgcXVvdGEgYmVmb3JlIGxvY2tpbmcgdGhlIHN1cGVyYmxvY2ssCiAJICogYXMgd3JpdGluZyB0aGUgcXVvdGEgdG8gZGlzayBtYXkgbmVlZCB0aGUgbG9jayBhcyB3ZWxsLgogCSAqLwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAKQEAgLTE1NCw4ICsxNTQsOCBAQAogCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAotCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKLQkJRFFVT1RfRFJPUChpbm9kZSk7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKKwkJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJCWlub2RlLT5pX25saW5rID0gMDsKIAkJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy91ZnMvYmFsbG9jLmMgYi9mcy91ZnMvYmFsbG9jLmMKaW5kZXggMGQ5YWRhMS4uNTRjMTZlYyAxMDA2NDQKLS0tIGEvZnMvdWZzL2JhbGxvYy5jCisrKyBiL2ZzL3Vmcy9iYWxsb2MuYwpAQCAtODUsNyArODUsNyBAQAogCQkJCSAgICJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBmcmFnbWVudCAldSIsIGkpOwogCX0KIAkKLQlEUVVPVF9GUkVFX0JMT0NLIChpbm9kZSwgY291bnQpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBjb3VudCk7CiAKIAkKIAlmczMyX2FkZChzYiwgJnVjZy0+Y2dfY3MuY3NfbmZmcmVlLCBjb3VudCk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJdWJoX3NldGJsb2NrKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGJsa25vKTsKIAkJaWYgKChVRlNfU0Ioc2IpLT5zX2ZsYWdzICYgVUZTX0NHX01BU0spID09IFVGU19DR180NEJTRCkKIAkJCXVmc19jbHVzdGVyYWNjdCAoc2IsIHVjcGksIGJsa25vLCAxKTsKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgdXNwaS0+c19mcGIpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgdXNwaS0+c19mcGIpOwogCiAJCWZzMzJfYWRkKHNiLCAmdWNnLT5jZ19jcy5jc19uYmZyZWUsIDEpOwogCQl1c3BpLT5jc190b3RhbC5jc19uYmZyZWUrKzsKQEAgLTU1Niw3ICs1NTYsNyBAQAogCQlmczMyX2FkZChzYiwgJnVjZy0+Y2dfZnJzdW1bZnJhZ3NpemUgLSBjb3VudF0sIDEpOwogCWZvciAoaSA9IG9sZGNvdW50OyBpIDwgbmV3Y291bnQ7IGkrKykKIAkJdWJoX2NscmJpdCAoVUNQSV9VQkgodWNwaSksIHVjcGktPmNfZnJlZW9mZiwgZnJhZ25vICsgaSk7Ci0JaWYoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIGNvdW50KSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIGNvdW50KSkgewogCQkqZXJyID0gLUVEUVVPVDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjY0LDcgKzY2NCw3IEBACiAJCWZvciAoaSA9IGNvdW50OyBpIDwgdXNwaS0+c19mcGI7IGkrKykKIAkJCXViaF9zZXRiaXQgKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGdvYWwgKyBpKTsKIAkJaSA9IHVzcGktPnNfZnBiIC0gY291bnQ7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGkpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgaSk7CiAKIAkJZnMzMl9hZGQoc2IsICZ1Y2ctPmNnX2NzLmNzX25mZnJlZSwgaSk7CiAJCXVzcGktPmNzX3RvdGFsLmNzX25mZnJlZSArPSBpOwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJcmVzdWx0ID0gdWZzX2JpdG1hcF9zZWFyY2ggKHNiLCB1Y3BpLCBnb2FsLCBhbGxvY3NpemUpOwogCWlmIChyZXN1bHQgPT0gSU5WQkxPQ0spCiAJCXJldHVybiAwOwotCWlmKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBjb3VudCkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBjb3VudCkpIHsKIAkJKmVyciA9IC1FRFFVT1Q7CiAJCXJldHVybiAwOwogCX0KQEAgLTc0Nyw3ICs3NDcsNyBAQAogCXViaF9jbHJibG9jayAoVUNQSV9VQkgodWNwaSksIHVjcGktPmNfZnJlZW9mZiwgYmxrbm8pOwogCWlmICgoVUZTX1NCKHNiKS0+c19mbGFncyAmIFVGU19DR19NQVNLKSA9PSBVRlNfQ0dfNDRCU0QpCiAJCXVmc19jbHVzdGVyYWNjdCAoc2IsIHVjcGksIGJsa25vLCAtMSk7Ci0JaWYoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIHVzcGktPnNfZnBiKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIHVzcGktPnNfZnBiKSkgewogCQkqZXJyID0gLUVEUVVPVDsKIAkJcmV0dXJuIElOVkJMT0NLOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pYWxsb2MuYyBiL2ZzL3Vmcy9pYWxsb2MuYwppbmRleCA2ZjVkY2YwLi4zNTI3YzAwIDEwMDY0NAotLS0gYS9mcy91ZnMvaWFsbG9jLmMKKysrIGIvZnMvdWZzL2lhbGxvYy5jCkBAIC05NSw4ICs5NSw4IEBACiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCi0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAogCWNsZWFyX2lub2RlIChpbm9kZSk7CiAKQEAgLTM1NSw4ICszNTUsOCBAQAogCiAJdW5sb2NrX3N1cGVyIChzYik7CiAKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7Ci0JCURRVU9UX0RST1AoaW5vZGUpOworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CisJCXZmc19kcV9kcm9wKGlub2RlKTsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBmYWlsX3dpdGhvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pbm9kZS5jIGIvZnMvdWZzL2lub2RlLmMKaW5kZXggMzlmODc3OC4uM2QyNTEyYyAxMDA2NDQKLS0tIGEvZnMvdWZzL2lub2RlLmMKKysrIGIvZnMvdWZzL2lub2RlLmMKQEAgLTYyMiw3ICs2MjIsNiBAQAogCXN0cnVjdCB1ZnNfaW5vZGVfaW5mbyAqdWZzaSA9IFVGU19JKGlub2RlKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJbW9kZV90IG1vZGU7Ci0JdW5zaWduZWQgaTsKIAogCS8qCiAJICogQ29weSBkYXRhIHRvIHRoZSBpbi1jb3JlIGlub2RlLgpAQCAtNjU1LDExICs2NTQsMTIgQEAKIAogCQogCWlmIChTX0lTQ0hSKG1vZGUpIHx8IFNfSVNCTEsobW9kZSkgfHwgaW5vZGUtPmlfYmxvY2tzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpOyBpKyspCi0JCQl1ZnNpLT5pX3UxLmlfZGF0YVtpXSA9IHVmc19pbm9kZS0+dWlfdTIudWlfYWRkci51aV9kYltpXTsKKwkJbWVtY3B5KHVmc2ktPmlfdTEuaV9kYXRhLCAmdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfYWRkcikpOwogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpICogNDsgaSsrKQotCQkJdWZzaS0+aV91MS5pX3N5bWxpbmtbaV0gPSB1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmtbaV07CisJCW1lbWNweSh1ZnNpLT5pX3UxLmlfc3ltbGluaywgdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rLAorCQkgICAgICAgc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaykgLSAxKTsKKwkJdWZzaS0+aV91MS5pX3N5bWxpbmtbc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaykgLSAxXSA9IDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjY5LDcgKzY2OSw2IEBACiAJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAltb2RlX3QgbW9kZTsKLQl1bnNpZ25lZCBpOwogCiAJVUZTRCgiUmVhZGluZyB1ZnMyIGlub2RlLCBpbm8gJWx1XG4iLCBpbm9kZS0+aV9pbm8pOwogCS8qCkBAIC03MDQsMTIgKzcwMywxMiBAQAogCSovCiAKIAlpZiAoU19JU0NIUihtb2RlKSB8fCBTX0lTQkxLKG1vZGUpIHx8IGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzaS0+aV91MS51Ml9pX2RhdGFbaV0gPQotCQkJCXVmczJfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbaV07CisJCW1lbWNweSh1ZnNpLT5pX3UxLnUyX2lfZGF0YSwgJnVmczJfaW5vZGUtPnVpX3UyLnVpX2FkZHIsCisJCSAgICAgICBzaXplb2YodWZzMl9pbm9kZS0+dWlfdTIudWlfYWRkcikpOwogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpICogNDsgaSsrKQotCQkJdWZzaS0+aV91MS5pX3N5bWxpbmtbaV0gPSB1ZnMyX2lub2RlLT51aV91Mi51aV9zeW1saW5rW2ldOworCQltZW1jcHkodWZzaS0+aV91MS5pX3N5bWxpbmssIHVmczJfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmssCisJCSAgICAgICBzaXplb2YodWZzMl9pbm9kZS0+dWlfdTIudWlfc3ltbGluaykgLSAxKTsKKwkJdWZzaS0+aV91MS5pX3N5bWxpbmtbc2l6ZW9mKHVmczJfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspIC0gMV0gPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc4MSw3ICs3ODAsNiBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKICAJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOwotIAl1bnNpZ25lZCBpOwogCiAJdWZzX2lub2RlLT51aV9tb2RlID0gY3B1X3RvX2ZzMTYoc2IsIGlub2RlLT5pX21vZGUpOwogCXVmc19pbm9kZS0+dWlfbmxpbmsgPSBjcHVfdG9fZnMxNihzYiwgaW5vZGUtPmlfbmxpbmspOwpAQCAtODA5LDEyICs4MDcsMTIgQEAKIAkJLyogdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiWzBdID0gY3B1X3RvX2ZzMzIoc2IsIGlub2RlLT5pX3JkZXYpOyAqLwogCQl1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbMF0gPSB1ZnNpLT5pX3UxLmlfZGF0YVswXTsKIAl9IGVsc2UgaWYgKGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiW2ldID0gdWZzaS0+aV91MS5pX2RhdGFbaV07CisJCW1lbWNweSgmdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLCB1ZnNpLT5pX3UxLmlfZGF0YSwKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIpKTsKIAl9CiAJZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpICogNDsgaSsrKQotCQkJdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rW2ldID0gdWZzaS0+aV91MS5pX3N5bWxpbmtbaV07CisJCW1lbWNweSgmdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rLCB1ZnNpLT5pX3UxLmlfc3ltbGluaywKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspKTsKIAl9CiAKIAlpZiAoIWlub2RlLT5pX25saW5rKQpAQCAtODI1LDcgKzgyMyw2IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogIAlzdHJ1Y3QgdWZzX2lub2RlX2luZm8gKnVmc2kgPSBVRlNfSShpbm9kZSk7Ci0gCXVuc2lnbmVkIGk7CiAKIAlVRlNEKCJFTlRFUlxuIik7CiAJdWZzX2lub2RlLT51aV9tb2RlID0gY3B1X3RvX2ZzMTYoc2IsIGlub2RlLT5pX21vZGUpOwpAQCAtODUwLDExICs4NDcsMTEgQEAKIAkJLyogdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiWzBdID0gY3B1X3RvX2ZzMzIoc2IsIGlub2RlLT5pX3JkZXYpOyAqLwogCQl1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbMF0gPSB1ZnNpLT5pX3UxLnUyX2lfZGF0YVswXTsKIAl9IGVsc2UgaWYgKGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiW2ldID0gdWZzaS0+aV91MS51Ml9pX2RhdGFbaV07CisJCW1lbWNweSgmdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLCB1ZnNpLT5pX3UxLnUyX2lfZGF0YSwKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIpKTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKSAqIDQ7IGkrKykKLQkJCXVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGlua1tpXSA9IHVmc2ktPmlfdTEuaV9zeW1saW5rW2ldOworCQltZW1jcHkoJnVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaywgdWZzaS0+aV91MS5pX3N5bWxpbmssCisJCSAgICAgICBzaXplb2YodWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rKSk7CiAgCX0KIAogCWlmICghaW5vZGUtPmlfbmxpbmspCmRpZmYgLS1naXQgYS9mcy91ZnMvbmFtZWkuYyBiL2ZzL3Vmcy9uYW1laS5jCmluZGV4IGUzYTliMWYuLjIzMTE5ZmUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCisrKyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAl9IGVsc2UgewogCQkvKiBmYXN0IHN5bWxpbmsgKi8KIAkJaW5vZGUtPmlfb3AgPSAmdWZzX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCQltZW1jcHkoKGNoYXIqKSZVRlNfSShpbm9kZSktPmlfdTEuaV9kYXRhLHN5bW5hbWUsbCk7CisJCW1lbWNweShVRlNfSShpbm9kZSktPmlfdTEuaV9zeW1saW5rLCBzeW1uYW1lLCBsKTsKIAkJaW5vZGUtPmlfc2l6ZSA9IGwtMTsKIAl9CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IGU2NTIxMmQuLmUxYzFmYzUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBTdGVmYW4gUmVpbmF1ZXIgPHN0ZXBhbkBob21lLmN1bHR1cmUubWlwdC5ydT4KICAqCiAgKiBNb2R1bGUgdXNhZ2UgY291bnRzIGFkZGVkIG9uIDk2LzA0LzI5IGJ5Ci0gKiBHZXJ0amFuIHZhbiBXaW5nZXJkZSA8Z2VydGphbkBjcy52dS5ubD4KKyAqIEdlcnRqYW4gdmFuIFdpbmdlcmRlIDxnd2luZ2VyZGVAZ21haWwuY29tPgogICoKICAqIENsZWFuIHN3YWIgc3VwcG9ydCBvbiAxOTk3MDQwNiBieQogICogRnJhbmNvaXMtUmVuZSBSaWRlYXUgPGZhcmVAdHVuZXMub3JnPgpAQCAtNjM2LDYgKzYzNiw3IEBACiAJdW5zaWduZWQgYmxvY2tfc2l6ZSwgc3VwZXJfYmxvY2tfc2l6ZTsKIAl1bnNpZ25lZCBmbGFnczsKIAl1bnNpZ25lZCBzdXBlcl9ibG9ja19vZmZzZXQ7CisJdW5zaWduZWQgbWF4c3ltbGVuOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJdXNwaSA9IE5VTEw7CkBAIC0xMDY5LDYgKzEwNzAsMTYgQEAKIAkJdXNwaS0+c19tYXhzeW1saW5rbGVuID0KIAkJICAgIGZzMzJfdG9fY3B1KHNiLCB1c2IzLT5mc191bjIuZnNfNDQuZnNfbWF4c3ltbGlua2xlbik7CiAKKwlpZiAodXNwaS0+ZnNfbWFnaWMgPT0gVUZTMl9NQUdJQykKKwkJbWF4c3ltbGVuID0gMiAqIDQgKiAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpOworCWVsc2UKKwkJbWF4c3ltbGVuID0gNCAqIChVRlNfTkRBRERSICsgVUZTX05JTkRJUik7CisJaWYgKHVzcGktPnNfbWF4c3ltbGlua2xlbiA+IG1heHN5bWxlbikgeworCQl1ZnNfd2FybmluZyhzYiwgX19mdW5jX18sICJ1ZnNfcmVhZF9zdXBlcjogZXhjZXNzaXZlIG1heGltdW0gIgorCQkJICAgICJmYXN0IHN5bWxpbmsgc2l6ZSAoJXUpXG4iLCB1c3BpLT5zX21heHN5bWxpbmtsZW4pOworCQl1c3BpLT5zX21heHN5bWxpbmtsZW4gPSBtYXhzeW1sZW47CisJfQorCiAJaW5vZGUgPSB1ZnNfaWdldChzYiwgVUZTX1JPT1RJTk8pOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCXJldCA9IFBUUl9FUlIoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3Vmcy5oIGIvZnMvdWZzL3Vmcy5oCmluZGV4IDExYzAzNTEuLjY5YjM0MjcgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91ZnMuaAorKysgYi9mcy91ZnMvdWZzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB7CiAJdW5pb24gewogCQlfX2ZzMzIJaV9kYXRhWzE1XTsKLQkJX191OAlpX3N5bWxpbmtbNCoxNV07CisJCV9fdTgJaV9zeW1saW5rWzIgKiA0ICogMTVdOwogCQlfX2ZzNjQJdTJfaV9kYXRhWzE1XTsKIAl9IGlfdTE7CiAJX191MzIJaV9mbGFnczsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggY2IzMjllZC4uYWExMDE2YiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTM0LDYgKzM0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKKyNpbmNsdWRlICJ4ZnNfc2IuaCIKKyNpbmNsdWRlICJ4ZnNfaW51bS5oIgorI2luY2x1ZGUgInhmc19hZy5oIgorI2luY2x1ZGUgInhmc19kbWFwaS5oIgorI2luY2x1ZGUgInhmc19tb3VudC5oIgorCiBzdGF0aWMga21lbV96b25lX3QgKnhmc19idWZfem9uZTsKIFNUQVRJQyBpbnQgeGZzYnVmZCh2b2lkICopOwogU1RBVElDIGludCB4ZnNidWZkX3dha2V1cChpbnQsIGdmcF90KTsKQEAgLTE0MzUsMTAgKzE0NDEsMTIgQEAKIAogdm9pZAogeGZzX2ZyZWVfYnVmdGFyZygKLQl4ZnNfYnVmdGFyZ190CQkqYnRwKQorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXN0cnVjdCB4ZnNfYnVmdGFyZwkqYnRwKQogewogCXhmc19mbHVzaF9idWZ0YXJnKGJ0cCwgMSk7Ci0JeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChidHApOworCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKQorCQl4ZnNfYmxrZGV2X2lzc3VlX2ZsdXNoKGJ0cCk7CiAJeGZzX2ZyZWVfYnVmaGFzaChidHApOwogCWlwdXQoYnRwLT5idF9tYXBwaW5nLT5ob3N0KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCAyODhhZTdjLi45YjRkNjY2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtNDEzLDcgKzQxMyw3IEBACiAgKglIYW5kbGluZyBvZiBidWZ0YXJncy4KICAqLwogZXh0ZXJuIHhmc19idWZ0YXJnX3QgKnhmc19hbGxvY19idWZ0YXJnKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgaW50KTsKLWV4dGVybiB2b2lkIHhmc19mcmVlX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqKTsKK2V4dGVybiB2b2lkIHhmc19mcmVlX2J1ZnRhcmcoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZnRhcmcgKik7CiBleHRlcm4gdm9pZCB4ZnNfd2FpdF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CiBleHRlcm4gaW50IHhmc19zZXRzaXplX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHhmc19mbHVzaF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IGM3MWUyMjYuLjMyYWU1MDIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtNzM0LDE1ICs3MzQsMTUgQEAKIHsKIAlpZiAobXAtPm1fbG9nZGV2X3RhcmdwICYmIG1wLT5tX2xvZ2Rldl90YXJncCAhPSBtcC0+bV9kZGV2X3RhcmdwKSB7CiAJCXN0cnVjdCBibG9ja19kZXZpY2UgKmxvZ2RldiA9IG1wLT5tX2xvZ2Rldl90YXJncC0+YnRfYmRldjsKLQkJeGZzX2ZyZWVfYnVmdGFyZyhtcC0+bV9sb2dkZXZfdGFyZ3ApOworCQl4ZnNfZnJlZV9idWZ0YXJnKG1wLCBtcC0+bV9sb2dkZXZfdGFyZ3ApOwogCQl4ZnNfYmxrZGV2X3B1dChsb2dkZXYpOwogCX0KIAlpZiAobXAtPm1fcnRkZXZfdGFyZ3ApIHsKIAkJc3RydWN0IGJsb2NrX2RldmljZSAqcnRkZXYgPSBtcC0+bV9ydGRldl90YXJncC0+YnRfYmRldjsKLQkJeGZzX2ZyZWVfYnVmdGFyZyhtcC0+bV9ydGRldl90YXJncCk7CisJCXhmc19mcmVlX2J1ZnRhcmcobXAsIG1wLT5tX3J0ZGV2X3RhcmdwKTsKIAkJeGZzX2Jsa2Rldl9wdXQocnRkZXYpOwogCX0KLQl4ZnNfZnJlZV9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3ApOworCXhmc19mcmVlX2J1ZnRhcmcobXAsIG1wLT5tX2RkZXZfdGFyZ3ApOwogfQogCiAvKgpAQCAtODExLDkgKzgxMSw5IEBACiAKICBvdXRfZnJlZV9ydGRldl90YXJnOgogCWlmIChtcC0+bV9ydGRldl90YXJncCkKLQkJeGZzX2ZyZWVfYnVmdGFyZyhtcC0+bV9ydGRldl90YXJncCk7CisJCXhmc19mcmVlX2J1ZnRhcmcobXAsIG1wLT5tX3J0ZGV2X3RhcmdwKTsKICBvdXRfZnJlZV9kZGV2X3Rhcmc6Ci0JeGZzX2ZyZWVfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwKTsKKwl4ZnNfZnJlZV9idWZ0YXJnKG1wLCBtcC0+bV9kZGV2X3RhcmdwKTsKICBvdXRfY2xvc2VfcnRkZXY6CiAJaWYgKHJ0ZGV2KQogCQl4ZnNfYmxrZGV2X3B1dChydGRldik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IGUyZmI2MjEuLjQ3OGU1ODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC0yNDYsOSArMjQ2LDYgQEAKIAkJZ290byBvdXRfZGVzdHJveTsKIAl9CiAKLQlpZiAobG9ja19mbGFncykKLQkJeGZzX2lsb2NrKGlwLCBsb2NrX2ZsYWdzKTsKLQogCS8qCiAJICogUHJlbG9hZCB0aGUgcmFkaXggdHJlZSBzbyB3ZSBjYW4gaW5zZXJ0IHNhZmVseSB1bmRlciB0aGUKIAkgKiB3cml0ZSBzcGlubG9jay4gTm90ZSB0aGF0IHdlIGNhbm5vdCBzbGVlcCBpbnNpZGUgdGhlIHByZWxvYWQKQEAgLTI1Niw3ICsyNTMsMTYgQEAKIAkgKi8KIAlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpKSB7CiAJCWVycm9yID0gRUFHQUlOOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X2Rlc3Ryb3k7CisJfQorCisJLyoKKwkgKiBCZWNhdXNlIHRoZSBpbm9kZSBoYXNuJ3QgYmVlbiBhZGRlZCB0byB0aGUgcmFkaXgtdHJlZSB5ZXQgaXQgY2FuJ3QKKwkgKiBiZSBmb3VuZCBieSBhbm90aGVyIHRocmVhZCwgc28gd2UgY2FuIGRvIHRoZSBub24tc2xlZXBpbmcgbG9jayBoZXJlLgorCSAqLworCWlmIChsb2NrX2ZsYWdzKSB7CisJCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgbG9ja19mbGFncykpCisJCQlCVUcoKTsKIAl9CiAKIAltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKQEAgLTI4NCw3ICsyOTAsNiBAQAogb3V0X3ByZWxvYWRfZW5kOgogCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKLW91dF91bmxvY2s6CiAJaWYgKGxvY2tfZmxhZ3MpCiAJCXhmc19pdW5sb2NrKGlwLCBsb2NrX2ZsYWdzKTsKIG91dF9kZXN0cm95OgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IGIxMDQ3ZGUuLjYxYWY2MTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTE0NTUsMTAgKzE0NTUsMTkgQEAKIAlpdGVtID0gaXRlbS0+cmlfcHJldjsKIAogCWlmIChpdGVtLT5yaV90b3RhbCA9PSAwKSB7CQkvKiBmaXJzdCByZWdpb24gdG8gYmUgYWRkZWQgKi8KLQkJaXRlbS0+cmlfdG90YWwJPSBpbl9mLT5pbGZfc2l6ZTsKLQkJQVNTRVJUKGl0ZW0tPnJpX3RvdGFsIDw9IFhMT0dfTUFYX1JFR0lPTlNfSU5fSVRFTSk7Ci0JCWl0ZW0tPnJpX2J1ZiA9IGttZW1femFsbG9jKChpdGVtLT5yaV90b3RhbCAqCi0JCQkJCSAgICBzaXplb2YoeGZzX2xvZ19pb3ZlY190KSksIEtNX1NMRUVQKTsKKwkJaWYgKGluX2YtPmlsZl9zaXplID09IDAgfHwKKwkJICAgIGluX2YtPmlsZl9zaXplID4gWExPR19NQVhfUkVHSU9OU19JTl9JVEVNKSB7CisJCQl4bG9nX3dhcm4oCisJIlhGUzogYmFkIG51bWJlciBvZiByZWdpb25zICglZCkgaW4gaW5vZGUgbG9nIGZvcm1hdCIsCisJCQkJICBpbl9mLT5pbGZfc2l6ZSk7CisJCQlBU1NFUlQoMCk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CisJCX0KKworCQlpdGVtLT5yaV90b3RhbCA9IGluX2YtPmlsZl9zaXplOworCQlpdGVtLT5yaV9idWYgPQorCQkJa21lbV96YWxsb2MoaXRlbS0+cmlfdG90YWwgKiBzaXplb2YoeGZzX2xvZ19pb3ZlY190KSwKKwkJCQkgICAgS01fU0xFRVApOwogCX0KIAlBU1NFUlQoaXRlbS0+cmlfdG90YWwgPiBpdGVtLT5yaV9jbnQpOwogCS8qIERlc2NyaXB0aW9uIHJlZ2lvbiBpcyByaV9idWZbMF0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKaW5kZXggYTYyNzIwYS4uYWIwYjg1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTE0NCw2ICsxNDQsNyBAQAogCQkJCWFjcGlfc2l6ZSBsZW5ndGgpOwogCiB2b2lkIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqIGxvZ2ljYWxfYWRkcmVzcywgYWNwaV9zaXplIHNpemUpOwordm9pZCBlYXJseV9hY3BpX29zX3VubWFwX21lbW9yeSh2b2lkIF9faW9tZW0gKiB2aXJ0LCBhY3BpX3NpemUgc2l6ZSk7CiAKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCBjOGU4Y2Y0Li5jYzQwMTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC0xMzAsNiArMTMwLDEwIEBACiAJCSAgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqb3V0X3RhYmxlX2hlYWRlcik7CiAKIGFjcGlfc3RhdHVzCithY3BpX2dldF90YWJsZV93aXRoX3NpemUoYWNwaV9zdHJpbmcgc2lnbmF0dXJlLAorCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSwKKwkgICAgICAgYWNwaV9zaXplICp0Ymxfc2l6ZSk7CithY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGUoYWNwaV9zdHJpbmcgc2lnbmF0dXJlLAogCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaCBiL2luY2x1ZGUvYXNtLWZydi9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxMDc2Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKiBpZGUuaDogRlJWIElERSBkZWNsYXJhdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfQVNNX0lERV9ICi0jZGVmaW5lIF9BU01fSURFX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCmluZGV4IGU1MWNhNjcuLjU3YzNkNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKQEAgLTU0LDUgKzU0LDggQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zd2FiLmggYi9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCmluZGV4IGFmYjMzOTYuLmYzMDU4MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9TV0FCX0gKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggYjg0Nzc0MS4uNGQzZTQ4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtMTE3LDkgKzExNyw5IEBACiBzdHJ1Y3QgZmxvY2sgewogCXNob3J0CWxfdHlwZTsKIAlzaG9ydAlsX3doZW5jZTsKLQlvZmZfdAlsX3N0YXJ0OwotCW9mZl90CWxfbGVuOwotCXBpZF90CWxfcGlkOworCV9fa2VybmVsX29mZl90CWxfc3RhcnQ7CisJX19rZXJuZWxfb2ZmX3QJbF9sZW47CisJX19rZXJuZWxfcGlkX3QJbF9waWQ7CiAJX19BUkNIX0ZMT0NLX1BBRAogfTsKICNlbmRpZgpAQCAtMTQwLDkgKzE0MCw5IEBACiBzdHJ1Y3QgZmxvY2s2NCB7CiAJc2hvcnQgIGxfdHlwZTsKIAlzaG9ydCAgbF93aGVuY2U7Ci0JbG9mZl90IGxfc3RhcnQ7Ci0JbG9mZl90IGxfbGVuOwotCXBpZF90ICBsX3BpZDsKKwlfX2tlcm5lbF9sb2ZmX3QgbF9zdGFydDsKKwlfX2tlcm5lbF9sb2ZmX3QgbF9sZW47CisJX19rZXJuZWxfcGlkX3QgIGxfcGlkOwogCV9fQVJDSF9GTE9DSzY0X1BBRAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKaW5kZXggYjBlNjNjNi4uMDBmNDVmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCkBAIC04MCw0ICs4MCw1NiBAQAogI2RlZmluZSBERUNMQVJFX1BFUl9DUFUodHlwZSwgbmFtZSkgZXh0ZXJuIFBFUl9DUFVfQVRUUklCVVRFUyBcCiAJCQkJCV9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV92YXIobmFtZSkKIAorLyoKKyAqIE9wdGlvbmFsIG1ldGhvZHMgZm9yIG9wdGltaXplZCBub24tbHZhbHVlIHBlci1jcHUgdmFyaWFibGUgYWNjZXNzLgorICoKKyAqIEB2YXIgY2FuIGJlIGEgcGVyY3B1IHZhcmlhYmxlIG9yIGEgZmllbGQgb2YgaXQgYW5kIGl0cyBzaXplIHNob3VsZAorICogZXF1YWwgY2hhciwgaW50IG9yIGxvbmcuICBwZXJjcHVfcmVhZCgpIGV2YWx1YXRlcyB0byBhIGx2YWx1ZSBhbmQKKyAqIGFsbCBvdGhlcnMgdG8gdm9pZC4KKyAqCisgKiBUaGVzZSBvcGVyYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlIGF0b21pYyB3LnIudC4gcHJlZW1wdGlvbi4KKyAqIFRoZSBnZW5lcmljIHZlcnNpb25zIHVzZSBwbGFpbiBnZXQvcHV0X2NwdV92YXIoKS4gIEFyY2hzIGFyZQorICogZW5jb3VyYWdlZCB0byBpbXBsZW1lbnQgc2luZ2xlLWluc3RydWN0aW9uIGFsdGVybmF0aXZlcyB3aGljaCBkb24ndAorICogcmVxdWlyZSBwcmVlbXB0aW9uIHByb3RlY3Rpb24uCisgKi8KKyNpZm5kZWYgcGVyY3B1X3JlYWQKKyMgZGVmaW5lIHBlcmNwdV9yZWFkKHZhcikJCQkJCQlcCisgICh7CQkJCQkJCQkJXAorCXR5cGVvZihwZXJfY3B1X3Zhcih2YXIpKSBfX3RtcF92YXJfXzsJCQkJXAorCV9fdG1wX3Zhcl9fID0gZ2V0X2NwdV92YXIodmFyKTsJCQkJCVwKKwlwdXRfY3B1X3Zhcih2YXIpOwkJCQkJCVwKKwlfX3RtcF92YXJfXzsJCQkJCQkJXAorICB9KQorI2VuZGlmCisKKyNkZWZpbmUgX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsIHZhbCwgb3ApCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJZ2V0X2NwdV92YXIodmFyKSBvcCB2YWw7CQkJCQlcCisJcHV0X2NwdV92YXIodmFyKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjaWZuZGVmIHBlcmNwdV93cml0ZQorIyBkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQkJX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsICh2YWwpLCA9KQorI2VuZGlmCisKKyNpZm5kZWYgcGVyY3B1X2FkZAorIyBkZWZpbmUgcGVyY3B1X2FkZCh2YXIsIHZhbCkJCV9fcGVyY3B1X2dlbmVyaWNfdG9fb3AodmFyLCAodmFsKSwgKz0pCisjZW5kaWYKKworI2lmbmRlZiBwZXJjcHVfc3ViCisjIGRlZmluZSBwZXJjcHVfc3ViKHZhciwgdmFsKQkJX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsICh2YWwpLCAtPSkKKyNlbmRpZgorCisjaWZuZGVmIHBlcmNwdV9hbmQKKyMgZGVmaW5lIHBlcmNwdV9hbmQodmFyLCB2YWwpCQlfX3BlcmNwdV9nZW5lcmljX3RvX29wKHZhciwgKHZhbCksICY9KQorI2VuZGlmCisKKyNpZm5kZWYgcGVyY3B1X29yCisjIGRlZmluZSBwZXJjcHVfb3IodmFyLCB2YWwpCQlfX3BlcmNwdV9nZW5lcmljX3RvX29wKHZhciwgKHZhbCksIHw9KQorI2VuZGlmCisKKyNpZm5kZWYgcGVyY3B1X3hvcgorIyBkZWZpbmUgcGVyY3B1X3hvcih2YXIsIHZhbCkJCV9fcGVyY3B1X2dlbmVyaWNfdG9fb3AodmFyLCAodmFsKSwgXj0pCisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19QRVJDUFVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaAppbmRleCA3OWE3ZmY5Li40Y2U0OGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCkBAIC05LDcgKzksNyBAQAogZXh0ZXJuIGNoYXIgX19pbml0X2JlZ2luW10sIF9faW5pdF9lbmRbXTsKIGV4dGVybiBjaGFyIF9zaW5pdHRleHRbXSwgX2Vpbml0dGV4dFtdOwogZXh0ZXJuIGNoYXIgX2VuZFtdOwotZXh0ZXJuIGNoYXIgX19wZXJfY3B1X3N0YXJ0W10sIF9fcGVyX2NwdV9lbmRbXTsKK2V4dGVybiBjaGFyIF9fcGVyX2NwdV9sb2FkW10sIF9fcGVyX2NwdV9zdGFydFtdLCBfX3Blcl9jcHVfZW5kW107CiBleHRlcm4gY2hhciBfX2twcm9iZXNfdGV4dF9zdGFydFtdLCBfX2twcm9iZXNfdGV4dF9lbmRbXTsKIGV4dGVybiBjaGFyIF9faW5pdGRhdGFfYmVnaW5bXSwgX19pbml0ZGF0YV9lbmRbXTsKIGV4dGVybiBjaGFyIF9fc3RhcnRfcm9kYXRhW10sIF9fZW5kX3JvZGF0YVtdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaAppbmRleCA5Njk1NzAxLi4zNTc1MmRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaApAQCAtMjMsNyArMjMsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BUkNIX1NJX1VJRF9UCi0jZGVmaW5lIF9fQVJDSF9TSV9VSURfVAl1aWRfdAorI2RlZmluZSBfX0FSQ0hfU0lfVUlEX1QJX19rZXJuZWxfdWlkMzJfdAogI2VuZGlmCiAKIC8qCkBAIC00NywxMyArNDcsMTMgQEAKIAogCQkvKiBraWxsKCkgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQl9IF9raWxsOwogCiAJCS8qIFBPU0lYLjFiIHRpbWVycyAqLwogCQlzdHJ1Y3QgewotCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KKwkJCV9fa2VybmVsX3RpbWVyX3QgX3RpZDsJLyogdGltZXIgaWQgKi8KIAkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KIAkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07CiAJCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCkBAIC02MiwxOCArNjIsMTggQEAKIAogCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCiAJCXN0cnVjdCB7Ci0JCQlwaWRfdCBfcGlkOwkJLyogc2VuZGVyJ3MgcGlkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KIAkJCV9fQVJDSF9TSV9VSURfVCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KIAkJCXNpZ3ZhbF90IF9zaWd2YWw7CiAJCX0gX3J0OwogCiAJCS8qIFNJR0NITEQgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiB3aGljaCBjaGlsZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KIAkJCV9fQVJDSF9TSV9VSURfVCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KIAkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCi0JCQljbG9ja190IF91dGltZTsKLQkJCWNsb2NrX3QgX3N0aW1lOworCQkJX19rZXJuZWxfY2xvY2tfdCBfdXRpbWU7CisJCQlfX2tlcm5lbF9jbG9ja190IF9zdGltZTsKIAkJfSBfc2lnY2hsZDsKIAogCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaAppbmRleCA2MTI5ZDY4Li4zYjRmYjNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKQEAgLTEsOCArMSw5IEBACiAjaWZuZGVmIF9HRU5FUklDX1NUQVRGU19ICiAjZGVmaW5lIF9HRU5FUklDX1NUQVRGU19ICiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCi0jIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KIHR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggYzYxZmFiMS4uYTY1NGQ3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtODAsNiArODAsMTEgQEAKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCiAJKihfX3RyYWNlcG9pbnRzKQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX190cmFjZXBvaW50cykgPSAuOwkJCVwKKwkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAorCS4gPSBBTElHTig4KTsJCQkJCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CQkJCVwKIAlMSUtFTFlfUFJPRklMRSgpCQkgICAgICAgCQkJCVwKIAlCUkFOQ0hfUFJPRklMRSgpCiAKQEAgLTMwOSwxNSArMzE0LDcgQEAKIAlDUFVfRElTQ0FSRChpbml0LmRhdGEpCQkJCQkJXAogCUNQVV9ESVNDQVJEKGluaXQucm9kYXRhKQkJCQkJXAogCU1FTV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCi0JTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCi0JLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZV9zdHJpbmdzKSA9IC47ICAgICAgICAgICAgICAgICAgXAotCSooX192ZXJib3NlX3N0cmluZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZV9zdHJpbmdzKSA9IC47ICAgICAgICAgICAgICAgICAgIFwKLQkuID0gQUxJR04oOCk7CQkJCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSooX192ZXJib3NlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZSkgPSAuOworCU1FTV9ESVNDQVJEKGluaXQucm9kYXRhKQogCiAjZGVmaW5lIElOSVRfVEVYVAkJCQkJCQlcCiAJKiguaW5pdC50ZXh0KQkJCQkJCQlcCkBAIC00MzAsMTIgKzQyNyw1OSBAQAogICAJKiguaW5pdGNhbGw3LmluaXQpCQkJCQkJXAogICAJKiguaW5pdGNhbGw3cy5pbml0KQogCi0jZGVmaW5lIFBFUkNQVShhbGlnbikJCQkJCQkJXAotCS4gPSBBTElHTihhbGlnbik7CQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fcGVyX2NwdV9zdGFydCkgPSAuOwkJCQlcCi0JLmRhdGEucGVyY3B1ICA6IEFUKEFERFIoLmRhdGEucGVyY3B1KSAtIExPQURfT0ZGU0VUKSB7CQlcCisvKioKKyAqIFBFUkNQVV9WQUREUiAtIGRlZmluZSBvdXRwdXQgc2VjdGlvbiBmb3IgcGVyY3B1IGFyZWEKKyAqIEB2YWRkcjogZXhwbGljaXQgYmFzZSBhZGRyZXNzIChvcHRpb25hbCkKKyAqIEBwaGRyOiBkZXN0aW5hdGlvbiBQSERSIChvcHRpb25hbCkKKyAqCisgKiBNYWNybyB3aGljaCBleHBhbmRzIHRvIG91dHB1dCBzZWN0aW9uIGZvciBwZXJjcHUgYXJlYS4gIElmIEB2YWRkcgorICogaXMgbm90IGJsYW5rLCBpdCBzcGVjaWZpZXMgZXhwbGljaXQgYmFzZSBhZGRyZXNzIGFuZCBhbGwgcGVyY3B1CisgKiBzeW1ib2xzIHdpbGwgYmUgb2Zmc2V0IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MuICBJZiBibGFuaywgQHZhZGRyCisgKiBhbHdheXMgZXF1YWxzIEBsYWRkciArIExPQURfT0ZGU0VULgorICoKKyAqIEBwaGRyIGRlZmluZXMgdGhlIG91dHB1dCBQSERSIHRvIHVzZSBpZiBub3QgYmxhbmsuICBCZSB3YXJuZWQgdGhhdAorICogb3V0cHV0IFBIRFIgaXMgc3RpY2t5LiAgSWYgQHBoZHIgaXMgc3BlY2lmaWVkLCB0aGUgbmV4dCBvdXRwdXQKKyAqIHNlY3Rpb24gaW4gdGhlIGxpbmtlciBzY3JpcHQgd2lsbCBnbyB0aGVyZSB0b28uICBAcGhkciBzaG91bGQgaGF2ZQorICogYSBsZWFkaW5nIGNvbG9uLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIG1hY3JvcyBkZWZpbmVzIF9fcGVyX2NwdV9sb2FkIGFzIGFuIGFic29sdXRlIHN5bWJvbC4KKyAqIElmIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHV0IHRoZSBwZXJjcHUgc2VjdGlvbiBhdCBhIHByZWRldGVybWluZWQKKyAqIGFkZHJlc3MsIHVzZSBQRVJDUFUoKS4KKyAqLworI2RlZmluZSBQRVJDUFVfVkFERFIodmFkZHIsIHBoZHIpCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2xvYWQpID0gLjsJCQkJXAorCS5kYXRhLnBlcmNwdSB2YWRkciA6IEFUKFZNTElOVVhfU1lNQk9MKF9fcGVyX2NwdV9sb2FkKQkJXAorCQkJCS0gTE9BRF9PRkZTRVQpIHsJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fcGVyX2NwdV9zdGFydCkgPSAuOwkJCVwKKwkJKiguZGF0YS5wZXJjcHUuZmlyc3QpCQkJCQlcCiAJCSooLmRhdGEucGVyY3B1LnBhZ2VfYWxpZ25lZCkJCQkJXAogCQkqKC5kYXRhLnBlcmNwdSkJCQkJCQlcCiAJCSooLmRhdGEucGVyY3B1LnNoYXJlZF9hbGlnbmVkKQkJCQlcCi0JfQkJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fcGVyX2NwdV9lbmQpID0gLjsKKwkJVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2VuZCkgPSAuOwkJCVwKKwl9IHBoZHIJCQkJCQkJCVwKKwkuID0gVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2xvYWQpICsgU0laRU9GKC5kYXRhLnBlcmNwdSk7CisKKy8qKgorICogUEVSQ1BVIC0gZGVmaW5lIG91dHB1dCBzZWN0aW9uIGZvciBwZXJjcHUgYXJlYSwgc2ltcGxlIHZlcnNpb24KKyAqIEBhbGlnbjogcmVxdWlyZWQgYWxpZ25tZW50CisgKgorICogQWxpZ24gdG8gQGFsaWduIGFuZCBvdXRwdXRzIG91dHB1dCBzZWN0aW9uIGZvciBwZXJjcHUgYXJlYS4gIFRoaXMKKyAqIG1hY3JvIGRvZXNuJ3QgbWFuaXVwbGF0ZSBAdmFkZHIgb3IgQHBoZHIgYW5kIF9fcGVyX2NwdV9sb2FkIGFuZAorICogX19wZXJfY3B1X3N0YXJ0IHdpbGwgYmUgaWRlbnRpY2FsLgorICoKKyAqIFRoaXMgbWFjcm8gaXMgZXF1aXZhbGVudCB0byBBTElHTihhbGlnbik7IFBFUkNQVV9WQUREUiggLCApIGV4Y2VwdAorICogdGhhdCBfX3Blcl9jcHVfbG9hZCBpcyBkZWZpbmVkIGFzIGEgcmVsYXRpdmUgc3ltYm9sIGFnYWluc3QKKyAqIC5kYXRhLnBlcmNwdSB3aGljaCBpcyByZXF1aXJlZCBmb3IgcmVsb2NhdGFibGUgeDg2XzMyCisgKiBjb25maWd1cmF0aW9uLgorICovCisjZGVmaW5lIFBFUkNQVShhbGlnbikJCQkJCQkJXAorCS4gPSBBTElHTihhbGlnbik7CQkJCQkJXAorCS5kYXRhLnBlcmNwdQk6IEFUKEFERFIoLmRhdGEucGVyY3B1KSAtIExPQURfT0ZGU0VUKSB7CVwKKwkJVk1MSU5VWF9TWU1CT0woX19wZXJfY3B1X2xvYWQpID0gLjsJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fcGVyX2NwdV9zdGFydCkgPSAuOwkJCVwKKwkJKiguZGF0YS5wZXJjcHUuZmlyc3QpCQkJCQlcCisJCSooLmRhdGEucGVyY3B1LnBhZ2VfYWxpZ25lZCkJCQkJXAorCQkqKC5kYXRhLnBlcmNwdSkJCQkJCQlcCisJCSooLmRhdGEucGVyY3B1LnNoYXJlZF9hbGlnbmVkKQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fcGVyX2NwdV9lbmQpID0gLjsJCQlcCisJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKaW5kZXggOWEwZTIwMC4uYmU3ZWQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9NMzJSX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oCmluZGV4IDk3OTczZTEuLjU0ZGFiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX00zMlJfU1dBQl9ICiAjZGVmaW5lIF9BU01fTTMyUl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2lkZS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkY2RkOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2lkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyogTU4xMDMwMCBBcmNoLXNwZWNpZmljIElERSBjb2RlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqIC0gRGVyaXZlZCBmcm9tIGluY2x1ZGUvYXNtLWkzODYvaWRlLmgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9JREVfSAotI2RlZmluZSBfQVNNX0lERV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vaW50Y3RsLXJlZ3MuaD4KLQotI3VuZGVmIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTCi0jZGVmaW5lIFNVUFBPUlRfU0xPV19EQVRBX1BPUlRTIDAKLQotI3VuZGVmIFNVUFBPUlRfVkxCX1NZTkMKLSNkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAwCi0KLS8qCi0gKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCi0gKi8KLSNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKSBcCi0JaW5zdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1faW5zbChwb3J0LCBhZGRyLCBuKSBcCi0JaW5zbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1fb3V0c3cocG9ydCwgYWRkciwgbikgXAotCW91dHN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKSBcCi0Jb3V0c2woKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKaW5kZXggY2Q5Y2M1Yy4uMDUxN2I0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCkBAIC0xMjEsNCArMTIxLDkgQEAKIAogI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCiAKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWwgPyAxNSA6IDE0OworfQorCiAjZW5kaWYgLyogX0FTTV9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKaW5kZXggODBhZjljNC4uZmI1ZGFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaAppbmRleCA0NTA0ZDFiLi5iZDgxOGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3N3YWIuaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmZGVmIF9fR05VQ19fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2Flcy5oIGIvaW5jbHVkZS9jcnlwdG8vYWVzLmgKaW5kZXggNjU2YTRjNi4uNzUyNGJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vYWVzLmgKKysrIGIvaW5jbHVkZS9jcnlwdG8vYWVzLmgKQEAgLTE3LDEwICsxNywxNCBAQAogI2RlZmluZSBBRVNfTUFYX0tFWUxFTkdUSAkoMTUgKiAxNikKICNkZWZpbmUgQUVTX01BWF9LRVlMRU5HVEhfVTMyCShBRVNfTUFYX0tFWUxFTkdUSCAvIHNpemVvZih1MzIpKQogCisvKgorICogUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBmaXJzdCB0d28gZmllbGRzIGFyZSAxNi1ieXRlIGFsaWduZWQKKyAqIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RydWN0dXJlLCBpLmUuLCBkb24ndCBtb3ZlIHRoZW0hCisgKi8KIHN0cnVjdCBjcnlwdG9fYWVzX2N0eCB7Ci0JdTMyIGtleV9sZW5ndGg7CiAJdTMyIGtleV9lbmNbQUVTX01BWF9LRVlMRU5HVEhfVTMyXTsKIAl1MzIga2V5X2RlY1tBRVNfTUFYX0tFWUxFTkdUSF9VMzJdOworCXUzMiBrZXlfbGVuZ3RoOwogfTsKIAogZXh0ZXJuIGNvbnN0IHUzMiBjcnlwdG9fZnRfdGFiWzRdWzI1Nl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jb21wcmVzcy5oIGIvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE2M2VmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvbXByZXNzOiBDb21wcmVzc2lvbiBhbGdvcml0aG1zIHVuZGVyIHRoZSBjcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0NPTVBSRVNTX0gKKyNkZWZpbmUgX0NSWVBUT19DT01QUkVTU19ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworCitzdHJ1Y3QgY29tcF9yZXF1ZXN0IHsKKwljb25zdCB2b2lkICpuZXh0X2luOwkJLyogbmV4dCBpbnB1dCBieXRlICovCisJdm9pZCAqbmV4dF9vdXQ7CQkJLyogbmV4dCBvdXRwdXQgYnl0ZSAqLworCXVuc2lnbmVkIGludCBhdmFpbF9pbjsJCS8qIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCisJdW5zaWduZWQgaW50IGF2YWlsX291dDsJCS8qIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X291dCAqLworfTsKKworZW51bSB6bGliX2NvbXBfcGFyYW1zIHsKKwlaTElCX0NPTVBfTEVWRUwgPSAxLAkJLyogZS5nLiBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKi8KKwlaTElCX0NPTVBfTUVUSE9ELAkJLyogZS5nLiBaX0RFRkxBVEVEICovCisJWkxJQl9DT01QX1dJTkRPV0JJVFMsCQkvKiBlLmcuIE1BWF9XQklUUyAqLworCVpMSUJfQ09NUF9NRU1MRVZFTCwJCS8qIGUuZy4gREVGX01FTV9MRVZFTCAqLworCVpMSUJfQ09NUF9TVFJBVEVHWSwJCS8qIGUuZy4gWl9ERUZBVUxUX1NUUkFURUdZICovCisJX19aTElCX0NPTVBfTUFYLAorfTsKKworI2RlZmluZSBaTElCX0NPTVBfTUFYCShfX1pMSUJfQ09NUF9NQVggLSAxKQorCisKK2VudW0gemxpYl9kZWNvbXBfcGFyYW1zIHsKKwlaTElCX0RFQ09NUF9XSU5ET1dCSVRTID0gMSwJLyogZS5nLiBERUZfV0JJVFMgKi8KKwlfX1pMSUJfREVDT01QX01BWCwKK307CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBfTUFYCShfX1pMSUJfREVDT01QX01BWCAtIDEpCisKKworc3RydWN0IGNyeXB0b19wY29tcCB7CisJc3RydWN0IGNyeXB0b190Zm0gYmFzZTsKK307CisKK3N0cnVjdCBwY29tcF9hbGcgeworCWludCAoKmNvbXByZXNzX3NldHVwKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBsZW4pOworCWludCAoKmNvbXByZXNzX2luaXQpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSk7CisJaW50ICgqY29tcHJlc3NfdXBkYXRlKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpjb21wcmVzc19maW5hbCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpkZWNvbXByZXNzX3NldHVwKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCQl1bnNpZ25lZCBpbnQgbGVuKTsKKwlpbnQgKCpkZWNvbXByZXNzX2luaXQpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSk7CisJaW50ICgqZGVjb21wcmVzc191cGRhdGUpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpkZWNvbXByZXNzX2ZpbmFsKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKTsKKworCXN0cnVjdCBjcnlwdG9fYWxnIGJhc2U7Cit9OworCitleHRlcm4gc3RydWN0IGNyeXB0b19wY29tcCAqY3J5cHRvX2FsbG9jX3Bjb21wKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwKKwkJCQkJICAgICAgIHUzMiBtYXNrKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX3Bjb21wX3RmbShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuICZ0Zm0tPmJhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZnJlZV9wY29tcChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJY3J5cHRvX2Rlc3Ryb3lfdGZtKHRmbSwgY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNvbXBfYWxnICpfX2NyeXB0b19wY29tcF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGFsZywgc3RydWN0IHBjb21wX2FsZywgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjb21wX2FsZyAqY3J5cHRvX3Bjb21wX2FsZyhzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIF9fY3J5cHRvX3Bjb21wX2FsZyhjcnlwdG9fcGNvbXBfdGZtKHRmbSktPl9fY3J0X2FsZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCXZvaWQgKnBhcmFtcywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19zZXR1cCh0Zm0sIHBhcmFtcywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX2luaXQodGZtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3NfdXBkYXRlKHRmbSwgcmVxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX2ZpbmFsKHRmbSwgcmVxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgIHZvaWQgKnBhcmFtcywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX3NldHVwKHRmbSwgcGFyYW1zLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGVjb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX2luaXQodGZtKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmRlY29tcHJlc3NfdXBkYXRlKHRmbSwgcmVxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX2ZpbmFsKHRmbSwgcmVxKTsKK30KKworI2VuZGlmCS8qIF9DUllQVE9fQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmggYi9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWZhN2JiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIFNvZnR3YXJlIGFzeW5jIGNyeXB0byBkYWVtb24KKyAqLworCisjaWZuZGVmIF9DUllQVE9fQ1JZUFRfSAorI2RlZmluZSBfQ1JZUFRPX0NSWVBUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgeworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciBiYXNlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKl9fY3J5cHRkX2FibGtjaXBoZXJfY2FzdCgKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqKXRmbTsKK30KKworLyogYWxnX25hbWUgc2hvdWxkIGJlIGFsZ29yaXRobSB0byBiZSBjcnlwdGQtZWQgKi8KK3N0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoY29uc3QgY2hhciAqYWxnX25hbWUsCisJCQkJCQkgIHUzMiB0eXBlLCB1MzIgbWFzayk7CitzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pOwordm9pZCBjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaCBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0b193cS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZDI1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgQ1JZUFRPX1dRX0gKKyNkZWZpbmUgQ1JZUFRPX1dRX0gKKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtjcnlwdG9fd3E7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2hhc2guaCBiL2luY2x1ZGUvY3J5cHRvL2hhc2guaAppbmRleCBkNzk3ZTExLi5kNTZiYjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9oYXNoLmgKKysrIGIvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCkBAIC0yMzEsNiArMjMxLDExIEBACiAJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayhjcnlwdG9fc2hhc2hfdGZtKHRmbSkpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGNyeXB0b19zaGFzaF90Zm0odGZtKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNoYXNoX2FsZyAqX19jcnlwdG9fc2hhc2hfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihhbGcsIHN0cnVjdCBzaGFzaF9hbGcsIGJhc2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaCBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YTg4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvbXByZXNzOiBDb21wcmVzc2lvbiBhbGdvcml0aG1zIHVuZGVyIHRoZSBjcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0gKKyNkZWZpbmUgX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19ICisKKyNpbmNsdWRlIDxjcnlwdG8vY29tcHJlc3MuaD4KKworZXh0ZXJuIGludCBjcnlwdG9fcmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKTsKK2V4dGVybiBpbnQgY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKTsKKworI2VuZGlmCS8qIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtLmggYi9pbmNsdWRlL2RybS9kcm0uaAppbmRleCA4ZTc3MzU3Li43Y2I1MGJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9kcm0uaApAQCAtMzYsOCArMzYsNyBAQAogI2lmbmRlZiBfRFJNX0hfCiAjZGVmaW5lIF9EUk1fSF8KIAotI2lmIGRlZmluZWQoX19LRVJORUxfXykKLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CQkvKiBGb3IgX0lPKiBtYWNyb3MgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQlfSU9DX05SKG4pCiAjZGVmaW5lIERSTV9JT0NfVk9JRAkJX0lPQ19OT05FCkBAIC00OTcsOCArNDk2LDggQEAKICAqIFxzYSBkcm1Nb2Rlc2V0Q3RsKCkuCiAgKi8KIHN0cnVjdCBkcm1fbW9kZXNldF9jdGwgewotCXVpbnQzMl90IGNydGM7Ci0JdWludDMyX3QgY21kOworCV9fdTMyIGNydGM7CisJX191MzIgY21kOwogfTsKIAogLyoqCkBAIC01NzQsMjkgKzU3MywyOSBAQAogLyoqIERSTV9JT0NUTF9HRU1fQ0xPU0UgaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fY2xvc2UgewogCS8qKiBIYW5kbGUgb2YgdGhlIG9iamVjdCB0byBiZSBjbG9zZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogLyoqIERSTV9JT0NUTF9HRU1fRkxJTksgaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fZmxpbmsgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbmFtZWQgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybmVkIGdsb2JhbCBuYW1lICovCi0JdWludDMyX3QgbmFtZTsKKwlfX3UzMiBuYW1lOwogfTsKIAogLyoqIERSTV9JT0NUTF9HRU1fT1BFTiBpb2N0bCBhcmd1bWVudCB0eXBlICovCiBzdHJ1Y3QgZHJtX2dlbV9vcGVuIHsKIAkvKiogTmFtZSBvZiBvYmplY3QgYmVpbmcgb3BlbmVkICovCi0JdWludDMyX3QgbmFtZTsKKwlfX3UzMiBuYW1lOwogCiAJLyoqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKiogUmV0dXJuZWQgc2l6ZSBvZiB0aGUgb2JqZWN0ICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogfTsKIAogI2luY2x1ZGUgImRybV9tb2RlLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggZTVmNGFlOS4uYzE5YTkzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtNzU4LDYgKzc1OCw4IEBACiAKIAlpbnQgKCpwcm9jX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKIAl2b2lkICgqcHJvY19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisJaW50ICgqZGVidWdmc19pbml0KShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisJdm9pZCAoKmRlYnVnZnNfY2xlYW51cCkoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogCiAJLyoqCiAJICogRHJpdmVyLXNwZWNpZmljIGNvbnN0cnVjdG9yIGZvciBkcm1fZ2VtX29iamVjdHMsIHRvIHNldCB1cApAQCAtNzkzLDYgKzc5NSw0OCBAQAogI2RlZmluZSBEUk1fTUlOT1JfQ09OVFJPTCAyCiAjZGVmaW5lIERSTV9NSU5PUl9SRU5ERVIgMwogCisKKy8qKgorICogZGVidWdmcyBub2RlIGxpc3QuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBkZWJ1Z2ZzIGZpbGUgdG8KKyAqIGJlIGNyZWF0ZWQgYnkgdGhlIGRybSBjb3JlCisgKi8KK3N0cnVjdCBkcm1fZGVidWdmc19saXN0IHsKKwljb25zdCBjaGFyICpuYW1lOyAvKiogZmlsZSBuYW1lICovCisJaW50ICgqc2hvdykoc3RydWN0IHNlcV9maWxlKiwgdm9pZCopOyAvKiogc2hvdyBjYWxsYmFjayAqLworCXUzMiBkcml2ZXJfZmVhdHVyZXM7IC8qKjwgUmVxdWlyZWQgZHJpdmVyIGZlYXR1cmVzIGZvciB0aGlzIGVudHJ5ICovCit9OworCisvKioKKyAqIGRlYnVnZnMgbm9kZSBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBkZWJ1Z2ZzIGZpbGUuCisgKi8KK3N0cnVjdCBkcm1fZGVidWdmc19ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRybV9taW5vciAqbWlub3I7CisJc3RydWN0IGRybV9kZWJ1Z2ZzX2xpc3QgKmRlYnVnZnNfZW50OworCXN0cnVjdCBkZW50cnkgKmRlbnQ7Cit9OworCisvKioKKyAqIEluZm8gZmlsZSBsaXN0IGVudHJ5LiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgZGVidWdmcyBvciBwcm9jIGZpbGUgdG8KKyAqIGJlIGNyZWF0ZWQgYnkgdGhlIGRybSBjb3JlCisgKi8KK3N0cnVjdCBkcm1faW5mb19saXN0IHsKKwljb25zdCBjaGFyICpuYW1lOyAvKiogZmlsZSBuYW1lICovCisJaW50ICgqc2hvdykoc3RydWN0IHNlcV9maWxlKiwgdm9pZCopOyAvKiogc2hvdyBjYWxsYmFjayAqLworCXUzMiBkcml2ZXJfZmVhdHVyZXM7IC8qKjwgUmVxdWlyZWQgZHJpdmVyIGZlYXR1cmVzIGZvciB0aGlzIGVudHJ5ICovCisJdm9pZCAqZGF0YTsKK307CisKKy8qKgorICogZGVidWdmcyBub2RlIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGRlYnVnZnMgZmlsZS4KKyAqLworc3RydWN0IGRybV9pbmZvX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKKwlzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqaW5mb19lbnQ7CisJc3RydWN0IGRlbnRyeSAqZGVudDsKK307CisKIC8qKgogICogRFJNIG1pbm9yIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGRybSBtaW5vciBudW1iZXIuCiAgKi8KQEAgLTgwMiw3ICs4NDYsMTIgQEAKIAlkZXZfdCBkZXZpY2U7CQkJLyoqPCBEZXZpY2UgbnVtYmVyIGZvciBta25vZCAqLwogCXN0cnVjdCBkZXZpY2Uga2RldjsJCS8qKjwgTGludXggZGV2aWNlICovCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRldl9yb290OyAgLyoqPCBwcm9jIGRpcmVjdG9yeSBlbnRyeSAqLworCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3Q7ICAvKio8IHByb2MgZGlyZWN0b3J5IGVudHJ5ICovCisJc3RydWN0IGRybV9pbmZvX25vZGUgcHJvY19ub2RlczsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CisJc3RydWN0IGRybV9pbmZvX25vZGUgZGVidWdmc19ub2RlczsKKwogCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXI7IC8qIGN1cnJlbnRseSBhY3RpdmUgbWFzdGVyIGZvciB0aGlzIG5vZGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1hc3Rlcl9saXN0OwogCXN0cnVjdCBkcm1fbW9kZV9ncm91cCBtb2RlX2dyb3VwOwpAQCAtMTI1OCw2ICsxMzA3LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqZHJtX2NsYXNzOwogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHJtX3Byb2Nfcm9vdDsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpkcm1fZGVidWdmc19yb290OwogCiBleHRlcm4gc3RydWN0IGlkciBkcm1fbWlub3JzX2lkcjsKIApAQCAtMTI2OCw2ICsxMzE4LDMxIEBACiAJCQkgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290KTsKIGV4dGVybiBpbnQgZHJtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290KTsKIAorCQkJCS8qIERlYnVnZnMgc3VwcG9ydCAqLworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorZXh0ZXJuIGludCBkcm1fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yLCBpbnQgbWlub3JfaWQsCisJCQkgICAgc3RydWN0IGRlbnRyeSAqcm9vdCk7CitleHRlcm4gaW50IGRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyhzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqZmlsZXMsIGludCBjb3VudCwKKwkJCQkgICAgc3RydWN0IGRlbnRyeSAqcm9vdCwgc3RydWN0IGRybV9taW5vciAqbWlub3IpOworZXh0ZXJuIGludCBkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitleHRlcm4gaW50IGRybV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworI2VuZGlmCisKKwkJCQkvKiBJbmZvIGZpbGUgc3VwcG9ydCAqLworZXh0ZXJuIGludCBkcm1fbmFtZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGRybV92bV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGRybV9xdWV1ZXNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBkcm1fYnVmc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGRybV92YmxhbmtfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBkcm1fY2xpZW50c19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0YSk7CitleHRlcm4gaW50IGRybV9nZW1fbmFtZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGRybV9nZW1fb2JqZWN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkKiBkYXRhKTsKKworI2lmIERSTV9ERUJVR19DT0RFCitleHRlcm4gaW50IGRybV92bWFfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworI2VuZGlmCisKIAkJCQkvKiBTY2F0dGVyIEdhdGhlciBTdXBwb3J0IChkcm1fc2NhdHRlci5oKSAqLwogZXh0ZXJuIHZvaWQgZHJtX3NnX2NsZWFudXAoc3RydWN0IGRybV9zZ19tZW0gKiBlbnRyeSk7CiBleHRlcm4gaW50IGRybV9zZ19hbGxvY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggNjAxZDJiZC4uYWUzMDRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC0yNywxMSArMjcsOCBAQAogI2lmbmRlZiBfRFJNX01PREVfSAogI2RlZmluZSBfRFJNX01PREVfSAogCi0jaWYgIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIERSTV9ESVNQTEFZX0lORk9fTEVOCTMyCiAjZGVmaW5lIERSTV9DT05ORUNUT1JfTkFNRV9MRU4JMzIKQEAgLTgxLDQxICs3OCw0MSBAQAogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT04JMQogCiBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gewotCXVpbnQzMl90IGNsb2NrOwotCXVpbnQxNl90IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwotCXVpbnQxNl90IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOworCV9fdTMyIGNsb2NrOworCV9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OworCV9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOwogCi0JdWludDMyX3QgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisJX191MzIgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCiAKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHR5cGU7CiAJY2hhciBuYW1lW0RSTV9ESVNQTEFZX01PREVfTEVOXTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcyB7Ci0JdWludDY0X3QgZmJfaWRfcHRyOwotCXVpbnQ2NF90IGNydGNfaWRfcHRyOwotCXVpbnQ2NF90IGNvbm5lY3Rvcl9pZF9wdHI7Ci0JdWludDY0X3QgZW5jb2Rlcl9pZF9wdHI7Ci0JdWludDMyX3QgY291bnRfZmJzOwotCXVpbnQzMl90IGNvdW50X2NydGNzOwotCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7Ci0JdWludDMyX3QgY291bnRfZW5jb2RlcnM7Ci0JdWludDMyX3QgbWluX3dpZHRoLCBtYXhfd2lkdGg7Ci0JdWludDMyX3QgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKKwlfX3U2NCBmYl9pZF9wdHI7CisJX191NjQgY3J0Y19pZF9wdHI7CisJX191NjQgY29ubmVjdG9yX2lkX3B0cjsKKwlfX3U2NCBlbmNvZGVyX2lkX3B0cjsKKwlfX3UzMiBjb3VudF9mYnM7CisJX191MzIgY291bnRfY3J0Y3M7CisJX191MzIgY291bnRfY29ubmVjdG9yczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBtaW5fd2lkdGgsIG1heF93aWR0aDsKKwlfX3UzMiBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGMgewotCXVpbnQ2NF90IHNldF9jb25uZWN0b3JzX3B0cjsKLQl1aW50MzJfdCBjb3VudF9jb25uZWN0b3JzOworCV9fdTY0IHNldF9jb25uZWN0b3JzX3B0cjsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCAqLwotCXVpbnQzMl90IGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCAqLworCV9fdTMyIGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCiAKLQl1aW50MzJfdCB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCisJX191MzIgeCwgeTsgLyoqPCBQb3NpdGlvbiBvbiB0aGUgZnJhbWV1ZmZlciAqLwogCi0JdWludDMyX3QgZ2FtbWFfc2l6ZTsKLQl1aW50MzJfdCBtb2RlX3ZhbGlkOworCV9fdTMyIGdhbW1hX3NpemU7CisJX191MzIgbW9kZV92YWxpZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTEyNiwxMyArMTIzLDEzIEBACiAjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMJNAogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIgewotCXVpbnQzMl90IGVuY29kZXJfaWQ7Ci0JdWludDMyX3QgZW5jb2Rlcl90eXBlOworCV9fdTMyIGVuY29kZXJfaWQ7CisJX191MzIgZW5jb2Rlcl90eXBlOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCiAKLQl1aW50MzJfdCBwb3NzaWJsZV9jcnRjczsKLQl1aW50MzJfdCBwb3NzaWJsZV9jbG9uZXM7CisJX191MzIgcG9zc2libGVfY3J0Y3M7CisJX191MzIgcG9zc2libGVfY2xvbmVzOwogfTsKIAogLyogVGhpcyBpcyBmb3IgY29ubmVjdG9ycyB3aXRoIG11bHRpcGxlIHNpZ25hbCB0eXBlcy4gKi8KQEAgLTE2MSwyMyArMTU4LDIzIEBACiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIHsKIAotCXVpbnQ2NF90IGVuY29kZXJzX3B0cjsKLQl1aW50NjRfdCBtb2Rlc19wdHI7Ci0JdWludDY0X3QgcHJvcHNfcHRyOwotCXVpbnQ2NF90IHByb3BfdmFsdWVzX3B0cjsKKwlfX3U2NCBlbmNvZGVyc19wdHI7CisJX191NjQgbW9kZXNfcHRyOworCV9fdTY0IHByb3BzX3B0cjsKKwlfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CiAKLQl1aW50MzJfdCBjb3VudF9tb2RlczsKLQl1aW50MzJfdCBjb3VudF9wcm9wczsKLQl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBjb3VudF9tb2RlczsKKwlfX3UzMiBjb3VudF9wcm9wczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKIAotCXVpbnQzMl90IGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCi0JdWludDMyX3QgY29ubmVjdG9yX2lkOyAvKio8IElkICovCi0JdWludDMyX3QgY29ubmVjdG9yX3R5cGU7Ci0JdWludDMyX3QgY29ubmVjdG9yX3R5cGVfaWQ7CisJX191MzIgZW5jb2Rlcl9pZDsgLyoqPCBDdXJyZW50IEVuY29kZXIgKi8KKwlfX3UzMiBjb25uZWN0b3JfaWQ7IC8qKjwgSWQgKi8KKwlfX3UzMiBjb25uZWN0b3JfdHlwZTsKKwlfX3UzMiBjb25uZWN0b3JfdHlwZV9pZDsKIAotCXVpbnQzMl90IGNvbm5lY3Rpb247Ci0JdWludDMyX3QgbW1fd2lkdGgsIG1tX2hlaWdodDsgLyoqPCBIeFcgaW4gbWlsbGltZXRlcnMgKi8KLQl1aW50MzJfdCBzdWJwaXhlbDsKKwlfX3UzMiBjb25uZWN0aW9uOworCV9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCisJX191MzIgc3VicGl4ZWw7CiB9OwogCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfUEVORElORwkoMTw8MCkKQEAgLTE4Nyw0NiArMTg0LDQ2IEBACiAjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQgkoMTw8NCkKIAogc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gewotCXVpbnQ2NF90IHZhbHVlOworCV9fdTY0IHZhbHVlOwogCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5IHsKLQl1aW50NjRfdCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLwotCXVpbnQ2NF90IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLworCV9fdTY0IHZhbHVlc19wdHI7IC8qIHZhbHVlcyBhbmQgYmxvYiBsZW5ndGhzICovCisJX191NjQgZW51bV9ibG9iX3B0cjsgLyogZW51bSBhbmQgYmxvYiBpZCBwdHJzICovCiAKLQl1aW50MzJfdCBwcm9wX2lkOwotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgZmxhZ3M7CiAJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIAotCXVpbnQzMl90IGNvdW50X3ZhbHVlczsKLQl1aW50MzJfdCBjb3VudF9lbnVtX2Jsb2JzOworCV9fdTMyIGNvdW50X3ZhbHVlczsKKwlfX3UzMiBjb3VudF9lbnVtX2Jsb2JzOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgewotCXVpbnQ2NF90IHZhbHVlOwotCXVpbnQzMl90IHByb3BfaWQ7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTY0IHZhbHVlOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgY29ubmVjdG9yX2lkOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIHsKLQl1aW50MzJfdCBibG9iX2lkOwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50NjRfdCBkYXRhOworCV9fdTMyIGJsb2JfaWQ7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IGRhdGE7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKLQl1aW50MzJfdCBmYl9pZDsKLQl1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OwotCXVpbnQzMl90IHBpdGNoOwotCXVpbnQzMl90IGJwcDsKLQl1aW50MzJfdCBkZXB0aDsKKwlfX3UzMiBmYl9pZDsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIHBpdGNoOworCV9fdTMyIGJwcDsKKwlfX3UzMiBkZXB0aDsKIAkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCB7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTMyIGNvbm5lY3Rvcl9pZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTI0OCwyNCArMjQ1LDI0IEBACiAgKiAgICB5CiAgKi8KIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IgewotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IGNydGNfaWQ7Ci0JaW50MzJfdCB4OwotCWludDMyX3QgeTsKLQl1aW50MzJfdCB3aWR0aDsKLQl1aW50MzJfdCBoZWlnaHQ7CisJX191MzIgZmxhZ3M7CisJX191MzIgY3J0Y19pZDsKKwlfX3MzMiB4OworCV9fczMyIHk7CisJX191MzIgd2lkdGg7CisJX191MzIgaGVpZ2h0OwogCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKLQl1aW50MzJfdCBjcnRjX2lkOwotCXVpbnQzMl90IGdhbW1hX3NpemU7CisJX191MzIgY3J0Y19pZDsKKwlfX3UzMiBnYW1tYV9zaXplOwogCiAJLyogcG9pbnRlcnMgdG8gYXJyYXlzICovCi0JdWludDY0X3QgcmVkOwotCXVpbnQ2NF90IGdyZWVuOwotCXVpbnQ2NF90IGJsdWU7CisJX191NjQgcmVkOworCV9fdTY0IGdyZWVuOworCV9fdTY0IGJsdWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCA1MTY1ZjI0Li43NmM0YzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC00MTgsNCArNDE4LDYgQEAKIAl7MHg4MDg2LCAweDJlMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MHg4MDg2LCAweDJlMTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MHg4MDg2LCAweDJlMjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKKwl7MHg4MDg2LCAweGEwMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKKwl7MHg4MDg2LCAweGEwMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MCwgMCwgMH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDkxMmNkNTIuLjY3ZTMzNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMzAsNyArMzAsNyBAQAogLyogUGxlYXNlIG5vdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIGFsbCBzdHJ1Y3RzIGRlZmluZWQgaGVyZSBhcmUKICAqIHN1YmplY3QgdG8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgY29uc3RyYWludHMuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZHJtLmgiCiAKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KQEAgLTExNiwxNSArMTE2LDE1IEBACiAKIAkvKiBmaWxsIG91dCBzb21lIHNwYWNlIGZvciBvbGQgdXNlcnNwYWNlIHRyaXBsZSBidWZmZXIgKi8KIAlkcm1faGFuZGxlX3QgdW51c2VkX2hhbmRsZTsKLQl1aW50MzJfdCB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOworCV9fdTMyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CiAKIAkvKiBidWZmZXIgb2JqZWN0IGhhbmRsZXMgZm9yIHN0YXRpYyBidWZmZXJzLiBNYXkgY2hhbmdlCiAJICogb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNsaWVudC4KIAkgKi8KLQl1aW50MzJfdCBmcm9udF9ib19oYW5kbGU7Ci0JdWludDMyX3QgYmFja19ib19oYW5kbGU7Ci0JdWludDMyX3QgdW51c2VkX2JvX2hhbmRsZTsKLQl1aW50MzJfdCBkZXB0aF9ib19oYW5kbGU7CisJX191MzIgZnJvbnRfYm9faGFuZGxlOworCV9fdTMyIGJhY2tfYm9faGFuZGxlOworCV9fdTMyIHVudXNlZF9ib19oYW5kbGU7CisJX191MzIgZGVwdGhfYm9faGFuZGxlOwogCiB9IGRybV9pOTE1X3NhcmVhX3Q7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9od3NfYWRkciB7Ci0JdWludDY0X3QgYWRkcjsKKwlfX3U2NCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgewpAQCAtMzM1LDEyICszMzUsMTIgQEAKIAkgKiBCZWdpbm5pbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X3N0YXJ0OworCV9fdTY0IGd0dF9zdGFydDsKIAkvKioKIAkgKiBFbmRpbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X2VuZDsKKwlfX3U2NCBndHRfZW5kOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewpAQCAtMzQ5LDk0ICszNDksOTQgQEAKIAkgKgogCSAqIFRoZSAocGFnZS1hbGlnbmVkKSBhbGxvY2F0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdCB3aWxsIGJlIHJldHVybmVkLgogCSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCiAJICoKIAkgKiBPYmplY3QgaGFuZGxlcyBhcmUgbm9uemVyby4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHJlYWQgZnJvbSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byB3cml0ZSB0aGUgZGF0YSBpbnRvLgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBkYXRhX3B0cjsKKwlfX3U2NCBkYXRhX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHdyaXR0ZW4gdG8uICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gd3JpdGUgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byByZWFkIHRoZSBkYXRhIGZyb20uCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGRhdGFfcHRyOworCV9fdTY0IGRhdGFfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKgogCSAqIExlbmd0aCBvZiBkYXRhIHRvIG1hcC4KIAkgKgogCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIHBhZ2UtYWxpZ25lZC4KIAkgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBhZGRyX3B0cjsKKwlfX3U2NCBhZGRyX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKioKIAkgKiBGYWtlIG9mZnNldCB0byB1c2UgZm9yIHN1YnNlcXVlbnQgbW1hcCBjYWxsCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4gewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE5ldyByZWFkIGRvbWFpbnMgKi8KLQl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisJX191MzIgcmVhZF9kb21haW5zOwogCiAJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHsKQEAgLTQ0OCwxNiArNDQ4LDE2IEBACiAJICogYSByZWxvY2F0aW9uIGxpc3QgZm9yIHN0YXRlIGJ1ZmZlcnMgYW5kIG5vdCByZS13cml0ZSBpdCBwZXIKIAkgKiBleGVjIHVzaW5nIHRoZSBidWZmZXIuCiAJICovCi0JdWludDMyX3QgdGFyZ2V0X2hhbmRsZTsKKwlfX3UzMiB0YXJnZXRfaGFuZGxlOwogCiAJLyoqCiAJICogVmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhlIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0byBtYWtlIHVwCiAJICogdGhlIHJlbG9jYXRpb24gZW50cnkuCiAJICovCi0JdWludDMyX3QgZGVsdGE7CisJX191MzIgZGVsdGE7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBidWZmZXIgdGhlIHJlbG9jYXRpb24gZW50cnkgd2lsbCBiZSB3cml0dGVuIGludG8gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCiAJLyoqCiAJICogT2Zmc2V0IHZhbHVlIG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRoYXQgdGhlIHJlbG9jYXRpb24gZW50cnkgd2FzIGxhc3QKQEAgLTQ2NywxMiArNDY3LDEyIEBACiAJICogYW5kIHdyaXRpbmcgdGhlIHJlbG9jYXRpb24uICBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gYmFjayBvdXQgYnkKIAkgKiB0aGUgZXhlY2J1ZmZlciBpb2N0bCB3aGVuIHRoZSByZWxvY2F0aW9uIGlzIHdyaXR0ZW4uCiAJICovCi0JdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0OworCV9fdTY0IHByZXN1bWVkX29mZnNldDsKIAogCS8qKgogCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyByZWFkIGJ5IHRoaXMgb3BlcmF0aW9uLgogCSAqLwotCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwlfX3UzMiByZWFkX2RvbWFpbnM7CiAKIAkvKioKIAkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KQEAgLTQ4MSw3ICs0ODEsNyBAQAogCSAqIGV4ZWNidWZmZXIgb3BlcmF0aW9uLCBzbyB0aGF0IHdoZXJlIHRoZXJlIGFyZSBjb25mbGljdHMsCiAJICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IC1FSU5WQUwgYmFjay4KIAkgKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogLyoqIEB7CkBAIC01MTIsMjQgKzUxMiwyNCBAQAogCSAqIFVzZXIncyBoYW5kbGUgZm9yIGEgYnVmZmVyIHRvIGJlIGJvdW5kIGludG8gdGhlIEdUVCBmb3IgdGhpcwogCSAqIG9wZXJhdGlvbi4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KLQl1aW50MzJfdCByZWxvY2F0aW9uX2NvdW50OworCV9fdTMyIHJlbG9jYXRpb25fY291bnQ7CiAJLyoqCiAJICogUG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgY29udGFpbmluZwogCSAqIHRoZSByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gdGhpcyBidWZmZXIuCiAJICovCi0JdWludDY0X3QgcmVsb2NzX3B0cjsKKwlfX3U2NCByZWxvY3NfcHRyOwogCiAJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBvZmZzZXQgb2YgdGhlIG9iamVjdCwgZm9yIGZ1dHVyZQogCSAqIHByZXN1bWVkX29mZnNldCB3cml0ZXMuCiAJICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciB7CkBAIC01NDMsNDQgKzU0Myw0NCBAQAogCSAqIGEgYnVmZmVyIGlzIHBlcmZvcm1pbmcgcmVmZXIgdG8gYnVmZmVycyB0aGF0IGhhdmUgYWxyZWFkeSBhcHBlYXJlZAogCSAqIGluIHRoZSB2YWxpZGF0ZSBsaXN0LgogCSAqLwotCXVpbnQ2NF90IGJ1ZmZlcnNfcHRyOwotCXVpbnQzMl90IGJ1ZmZlcl9jb3VudDsKKwlfX3U2NCBidWZmZXJzX3B0cjsKKwlfX3UzMiBidWZmZXJfY291bnQ7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KLQl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OwogCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCi0JdWludDMyX3QgYmF0Y2hfbGVuOwotCXVpbnQzMl90IERSMTsKLQl1aW50MzJfdCBEUjQ7Ci0JdWludDMyX3QgbnVtX2NsaXByZWN0czsKKwlfX3UzMiBiYXRjaF9sZW47CisJX191MzIgRFIxOworCV9fdTMyIERSNDsKKwlfX3UzMiBudW1fY2xpcHJlY3RzOwogCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLwotCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7CisJX191NjQgY2xpcHJlY3RzX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgcGlubmVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAogCS8qKiBhbGlnbm1lbnQgcmVxdWlyZWQgd2l0aGluIHRoZSBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKiogUmV0dXJuZWQgR1RUIG9mZnNldCBvZiB0aGUgYnVmZmVyLiAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gY2hlY2sgZm9yIGJ1c3kgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCi0JdWludDMyX3QgYnVzeTsKKwlfX3UzMiBidXN5OwogfTsKIAogI2RlZmluZSBJOTE1X1RJTElOR19OT05FCTAKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBoYXZlIGl0cyB0aWxpbmcgc3RhdGUgdXBkYXRlZCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKQEAgLTYxMSw0NyArNjExLDQ3IEBACiAJICoKIAkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgogCSAqIEk5MTVfVElMSU5HX1kuCiAJICovCi0JdWludDMyX3Qgc3RyaWRlOworCV9fdTMyIHN0cmlkZTsKIAogCS8qKgogCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKIAkgKiBtbWFwIG1hcHBpbmcuCiAJICovCi0JdWludDMyX3Qgc3dpenpsZV9tb2RlOworCV9fdTMyIHN3aXp6bGVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGdldCB0aWxpbmcgc3RhdGUgZm9yLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAogCSAqIEk5MTVfVElMSU5HX1kpLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAogCSAqIG1tYXAgbWFwcGluZy4KIAkgKi8KLQl1aW50MzJfdCBzd2l6emxlX21vZGU7CisJX191MzIgc3dpenpsZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfYXBlcnR1cmUgewogCS8qKiBUb3RhbCBzaXplIG9mIHRoZSBhcGVydHVyZSB1c2VkIGJ5IGk5MTVfZ2VtX2V4ZWNidWZmZXIsIGluIGJ5dGVzICovCi0JdWludDY0X3QgYXBlcl9zaXplOworCV9fdTY0IGFwZXJfc2l6ZTsKIAogCS8qKgogCSAqIEF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgYXBlcnR1cmUgdXNlZCBieSBpOTE1X2dlbV9leGVjYnVmZmVyLCBpbgogCSAqIGJ5dGVzCiAJICovCi0JdWludDY0X3QgYXBlcl9hdmFpbGFibGVfc2l6ZTsKKwlfX3U2NCBhcGVyX2F2YWlsYWJsZV9zaXplOwogfTsKIAogI2VuZGlmCQkJCS8qIF9JOTE1X0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oIGIvaW5jbHVkZS9kcm0vbWdhX2RybS5oCmluZGV4IDk0NGI1MGEuLjMyNWZkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL21nYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKQEAgLTM1LDYgKzM1LDggQEAKICNpZm5kZWYgX19NR0FfRFJNX0hfXwogI2RlZmluZSBfX01HQV9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWHNlcnZlciBmaWxlIChtZ2Ffc2FyZWEuaCkKICAqLwpAQCAtMjU1LDggKzI1Nyw4IEBACiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfSUxPQUQgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfSUxPQUQsIGRybV9tZ2FfaWxvYWRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9CTElUICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9CTElULCBkcm1fbWdhX2JsaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9HRVRQQVJBTSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9HRVRQQVJBTSwgZHJtX21nYV9nZXRwYXJhbV90KQotI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCB1aW50MzJfdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIHVpbnQzMl90KQorI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCBfX3UzMikKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIF9fdTMyKQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRE1BX0JPT1RTVFJBUCwgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QpCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fbWdhX3dhcnBfaW5kZXggewpAQCAtMzEwLDcgKzMxMiw3IEBACiAJICovCiAJLypAeyAqLwogCXVuc2lnbmVkIGxvbmcgdGV4dHVyZV9oYW5kbGU7IC8qKjwgSGFuZGxlIHVzZWQgdG8gbWFwIEFHUCB0ZXh0dXJlcy4gKi8KLQl1aW50MzJfdCB0ZXh0dXJlX3NpemU7CSAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgQUdQIHRleHR1cmUgcmVnaW9uLiAqLworCV9fdTMyIHRleHR1cmVfc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCiAJLypAfSAqLwogCiAJLyoqCkBAIC0zMTksNyArMzIxLDcgQEAKIAkgKiBPbiByZXR1cm4gZnJvbSB0aGUgRFJNX01HQV9ETUFfQk9PVFNUUkFQIGlvY3RsLCB0aGlzIGZpZWxkIHdpbGwgYmUKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICovCi0JdWludDMyX3QgcHJpbWFyeV9zaXplOworCV9fdTMyIHByaW1hcnlfc2l6ZTsKIAogCS8qKgogCSAqIFJlcXVlc3RlZCBudW1iZXIgb2Ygc2Vjb25kYXJ5IERNQSBidWZmZXJzLgpAQCAtMzI5LDcgKzMzMSw3IEBACiAJICogYWxsb2NhdGVkLiAgUGFydGljdWxhcmx5IHdoZW4gUENJIERNQSBpcyB1c2VkLCB0aGlzIG1heSBiZQogCSAqIChzdWJ0YW50aWFsbHkpIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX2NvdW50OworCV9fdTMyIHNlY29uZGFyeV9iaW5fY291bnQ7CiAKIAkvKioKIAkgKiBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNoIHNlY29uZGFyeSBETUEgYnVmZmVyLgpAQCAtMzM4LDcgKzM0MCw3IEBACiAJICogZG1hX21nYV9kbWFfYm9vdHN0cmFwOjpzZWNvbmRhcnlfYmluX2NvdW50LCBpdCBpcyBcYiBub3QgYWxsb3dlZAogCSAqIHRvIHJlZHVjZSBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fc2l6ZS4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX3NpemU7CisJX191MzIgc2Vjb25kYXJ5X2Jpbl9zaXplOwogCiAJLyoqCiAJICogQml0LXdpc2UgbWFzayBvZiBBR1BTVEFUMl8qIHZhbHVlcy4gIEN1cnJlbnRseSBvbmx5IFxjIEFHUFNUQVQyXzFYLApAQCAtMzUwLDEyICszNTIsMTIgQEAKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICogKGkuZS4sIFBDSSBETUEgd2FzIHVzZWQpLCB0aGlzIHZhbHVlIHdpbGwgYmUgemVyby4KIAkgKi8KLQl1aW50MzJfdCBhZ3BfbW9kZTsKKwlfX3UzMiBhZ3BfbW9kZTsKIAogCS8qKgogCSAqIERlc2lyZWQgQUdQIEdBUlQgc2l6ZSwgbWVhc3VyZWQgaW4gbWVnYWJ5dGVzLgogCSAqLwotCXVpbnQ4X3QgYWdwX3NpemU7CisJX191OCBhZ3Bfc2l6ZTsKIH0gZHJtX21nYV9kbWFfYm9vdHN0cmFwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfY2xlYXIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDczZmY1MWYuLjcyZWNmNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpZm5kZWYgX19SQURFT05fRFJNX0hfXwogI2RlZmluZSBfX1JBREVPTl9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWCBzZXJ2ZXIgZmlsZSAocmFkZW9uX3NhcmVhLmgpCiAgKi8KQEAgLTcyMiw3ICs3MjQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3NldHBhcmFtIHsKIAl1bnNpZ25lZCBpbnQgcGFyYW07Ci0JaW50NjRfdCB2YWx1ZTsKKwlfX3M2NCB2YWx1ZTsKIH0gZHJtX3JhZGVvbl9zZXRwYXJhbV90OwogCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9GQl9MT0NBVElPTiAgICAxCS8qIGRldGVybWluZWQgZnJhbWVidWZmZXIgbG9jYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaCBiL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaAppbmRleCBhM2I1YzEwMi4uMTcwNzg2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdmlhX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaApAQCAtMjQsNiArMjQsOCBAQAogI2lmbmRlZiBfVklBX0RSTV9IXwogI2RlZmluZSBfVklBX0RSTV9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogV0FSTklORzogVGhlc2UgZGVmaW5lcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgdGhlIFhzZXJ2ZXIgdXNlcy4KICAqIGlmIHlvdSBjaGFuZ2UgdGhlbSwgeW91IG11c3QgY2hhbmdlIHRoZSBkZWZpbmVzIGluIHRoZSBYc2VydmVyLgogICovCkBAIC0xMTQsMTkgKzExNiwxOSBAQAogI2RlZmluZSBWSUFfTUVNX1VOS05PV04gNAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IHNpemU7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIHNpemU7CiB9IGRybV92aWFfYWdwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9mYl90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgY29udGV4dDsKLQl1aW50MzJfdCB0eXBlOwotCXVpbnQzMl90IHNpemU7CisJX191MzIgY29udGV4dDsKKwlfX3UzMiB0eXBlOworCV9fdTMyIHNpemU7CiAJdW5zaWduZWQgbG9uZyBpbmRleDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIH0gZHJtX3ZpYV9tZW1fdDsKQEAgLTE0OCw5ICsxNTAsOSBAQAogCQlWSUFfRlVURVhfV0FJVCA9IDB4MDAsCiAJCVZJQV9GVVRFWF9XQUtFID0gMFgwMQogCX0gZnVuYzsKLQl1aW50MzJfdCBtczsKLQl1aW50MzJfdCBsb2NrOwotCXVpbnQzMl90IHZhbDsKKwlfX3UzMiBtczsKKwlfX3UzMiBsb2NrOworCV9fdTMyIHZhbDsKIH0gZHJtX3ZpYV9mdXRleF90OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9kbWFfaW5pdCB7CkBAIC0yMTEsNyArMjEzLDcgQEAKIAkJVklBX0NNREJVRl9MQUcgPSAweDAyCiAJfSBmdW5jOwogCWludCB3YWl0OwotCXVpbnQzMl90IHNpemU7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9jbWRidWZfc2l6ZV90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMjM2LDggKzIzOCw4IEBACiBzdHJ1Y3QgZHJtX3ZpYV93YWl0X2lycV9yZXF1ZXN0IHsKIAl1bnNpZ25lZCBpcnE7CiAJdmlhX2lycV9zZXFfdHlwZV90IHR5cGU7Ci0JdWludDMyX3Qgc2VxdWVuY2U7Ci0JdWludDMyX3Qgc2lnbmFsOworCV9fdTMyIHNlcXVlbmNlOworCV9fdTMyIHNpZ25hbDsKIH07CiAKIHR5cGVkZWYgdW5pb24gZHJtX3ZpYV9pcnF3YWl0IHsKQEAgLTI0Niw3ICsyNDgsNyBAQAogfSBkcm1fdmlhX2lycXdhaXRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZpYV9ibGl0c3luYyB7Ci0JdWludDMyX3Qgc3luY19oYW5kbGU7CisJX191MzIgc3luY19oYW5kbGU7CiAJdW5zaWduZWQgZW5naW5lOwogfSBkcm1fdmlhX2JsaXRzeW5jX3Q7CiAKQEAgLTI1NywxNiArMjU5LDE2IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZpYV9kbWFibGl0IHsKLQl1aW50MzJfdCBudW1fbGluZXM7Ci0JdWludDMyX3QgbGluZV9sZW5ndGg7CisJX191MzIgbnVtX2xpbmVzOworCV9fdTMyIGxpbmVfbGVuZ3RoOwogCi0JdWludDMyX3QgZmJfYWRkcjsKLQl1aW50MzJfdCBmYl9zdHJpZGU7CisJX191MzIgZmJfYWRkcjsKKwlfX3UzMiBmYl9zdHJpZGU7CiAKIAl1bnNpZ25lZCBjaGFyICptZW1fYWRkcjsKLQl1aW50MzJfdCBtZW1fc3RyaWRlOworCV9fdTMyIG1lbV9zdHJpZGU7CiAKLQl1aW50MzJfdCBmbGFnczsKKwlfX3UzMiBmbGFnczsKIAlpbnQgdG9fZmI7CiAKIAlkcm1fdmlhX2JsaXRzeW5jX3Qgc3luYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggMTA2YzNiYS4uZTk1ODFmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTExNSw2ICsxMTUsNyBAQAogaGVhZGVyLXkgKz0gbXRpby5oCiBoZWFkZXIteSArPSBuY3Bfbm8uaAogaGVhZGVyLXkgKz0gbmVpZ2hib3VyLmgKK2hlYWRlci15ICs9IG5ldF9kcm9wbW9uLmgKIGhlYWRlci15ICs9IG5ldGZpbHRlcl9hcnAuaAogaGVhZGVyLXkgKz0gbmV0cm9tLmgKIGhlYWRlci15ICs9IG5mczIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCA2ZmNlMmZjLi43ODE5OTE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtNzksNiArNzksNyBAQAogdHlwZWRlZiBpbnQgKCphY3BpX3RhYmxlX2VudHJ5X2hhbmRsZXIpIChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBjaGFyICogX19hY3BpX21hcF90YWJsZSAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lkIF9fYWNwaV91bm1hcF90YWJsZShjaGFyICptYXAsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBpbnQgZWFybHlfYWNwaV9ib290X2luaXQodm9pZCk7CiBpbnQgYWNwaV9ib290X2luaXQgKHZvaWQpOwogaW50IGFjcGlfYm9vdF90YWJsZV9pbml0ICh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKaW5kZXggMTEwYzYwMC4uZjY3NzhlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKQEAgLTc3LDIwICs3NywyMCBAQAogICogVGhlICJwcm90IiBkb3duIGJlbG93IG5lZWRzIHN0aWxsIGEgInNsZWVwIiBmbGFnIHNvbWVob3cgLi4uCiAgKi8KIHR5cGVkZWYgc3RydWN0IF9hZ3Bfc2VnbWVudCB7Ci0Jb2ZmX3QgcGdfc3RhcnQ7CQkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCi0Jc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCi0JaW50IHByb3Q7CQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCisJX19rZXJuZWxfb2ZmX3QgcGdfc3RhcnQ7CS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KKwlfX2tlcm5lbF9zaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwlpbnQgcHJvdDsJCQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCiB9IGFncF9zZWdtZW50OwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3JlZ2lvbiB7Ci0JcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgICAgICAgICAqLwotCXNpemVfdCBzZWdfY291bnQ7CS8qIG51bWJlciBvZiBzZWdtZW50cyAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9waWRfdCBwaWQ7CQkvKiBwaWQgb2YgcHJvY2VzcyAgICAgICAqLworCV9fa2VybmVsX3NpemVfdCBzZWdfY291bnQ7CS8qIG51bWJlciBvZiBzZWdtZW50cyAgICovCiAJc3RydWN0IF9hZ3Bfc2VnbWVudCAqc2VnX2xpc3Q7CiB9IGFncF9yZWdpb247CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfYWxsb2NhdGUgewogCWludCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCi0Jc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJX19rZXJuZWxfc2l6ZV90IHBnX2NvdW50Oy8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAqLwogCV9fdTMyIHR5cGU7CQkvKiAwID09IG5vcm1hbCwgb3RoZXIgZGV2c3BlYyAgICovCiAgICAJX191MzIgcGh5c2ljYWw7ICAgICAgICAgLyogZGV2aWNlIHNwZWNpZmljIChzb21lIGRldmljZXMgIAogCQkJCSAqIG5lZWQgYSBwaHlzIGFkZHJlc3Mgb2YgdGhlICAgICAKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX2JpbmQgewogCWludCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCi0Jb2ZmX3QgcGdfc3RhcnQ7CQkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJX19rZXJuZWxfb2ZmX3QgcGdfc3RhcnQ7Lyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLwogfSBhZ3BfYmluZDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF91bmJpbmQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKaW5kZXggYTE5MTYwNy4uY2Q0YmNiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCkBAIC0yMzUsOCArMjM1LDYgQEAKIAogCiBzdHJ1Y3QgYXJjbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogCXVpbnQ4X3QgY29uZmlnLAkJLyogY3VycmVudCB2YWx1ZSBvZiBDT05GSUcgcmVnaXN0ZXIgKi8KIAkJdGltZW91dCwJLyogRXh0ZW5kZWQgdGltZW91dCBmb3IgQ09NMjAwMjAgKi8KIAkJYmFja3BsYW5lLAkvKiBCYWNrcGxhbmUgZmxhZyBmb3IgQ09NMjAwMjAgKi8KQEAgLTMzNSw3ICszMzMsMTIgQEAKIAogdm9pZCBhcmNuZXRfdW5yZWdpc3Rlcl9wcm90byhzdHJ1Y3QgQXJjUHJvdG8gKnByb3RvKTsKIGlycXJldHVybl90IGFyY25ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19hcmNkZXYoY2hhciAqbmFtZSk7CitzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJCQkJLyogX0xJTlVYX0FSQ0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0YS5oIGIvaW5jbHVkZS9saW51eC9hdGEuaAppbmRleCA5YTA2MWFjLi42NjE3YzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRhLmgKQEAgLTEwOCw2ICsxMDgsOCBAQAogCUFUQV9QSU81CQk9IEFUQV9QSU80IHwgKDEgPDwgNSksCiAJQVRBX1BJTzYJCT0gQVRBX1BJTzUgfCAoMSA8PCA2KSwKIAorCUFUQV9QSU80X09OTFkJCT0gKDEgPDwgNCksCisKIAlBVEFfU1dETUEwCQk9ICgxIDw8IDApLAogCUFUQV9TV0RNQTEJCT0gQVRBX1NXRE1BMCB8ICgxIDw8IDEpLAogCUFUQV9TV0RNQTIJCT0gQVRBX1NXRE1BMSB8ICgxIDw8IDIpLApAQCAtMTE3LDYgKzExOSw4IEBACiAJQVRBX01XRE1BMAkJPSAoMSA8PCAwKSwKIAlBVEFfTVdETUExCQk9IEFUQV9NV0RNQTAgfCAoMSA8PCAxKSwKIAlBVEFfTVdETUEyCQk9IEFUQV9NV0RNQTEgfCAoMSA8PCAyKSwKKwlBVEFfTVdETUEzCQk9IEFUQV9NV0RNQTIgfCAoMSA8PCAzKSwKKwlBVEFfTVdETUE0CQk9IEFUQV9NV0RNQTMgfCAoMSA8PCA0KSwKIAogCUFUQV9NV0RNQTEyX09OTFkJPSAoMSA8PCAxKSB8ICgxIDw8IDIpLAogCUFUQV9NV0RNQTJfT05MWQkJPSAoMSA8PCAyKSwKQEAgLTEzMSw2ICsxMzUsOCBAQAogCUFUQV9VRE1BNwkJPSBBVEFfVURNQTYgfCAoMSA8PCA3KSwKIAkvKiBBVEFfVURNQTcgaXMganVzdCBmb3IgY29tcGxldGVuZXNzLi4uIGRvZXNuJ3QgZXhpc3QgKHlldD8pLiAgKi8KIAorCUFUQV9VRE1BMjRfT05MWQkJPSAoMSA8PCAyKSB8ICgxIDw8IDQpLAorCiAJQVRBX1VETUFfTUFTS180MEMJPSBBVEFfVURNQTIsCS8qIHVkbWEwLTIgKi8KIAogCS8qIERNQS1yZWxhdGVkICovCkBAIC0yNDQsOCArMjUwLDYgQEAKIAlBVEFfQ01EX01FRElBX1VOTE9DSwk9IDB4REYsCiAJLyogbWFya2VkIG9ic29sZXRlIGluIHRoZSBBVEEvQVRBUEktNyBzcGVjICovCiAJQVRBX0NNRF9SRVNUT1JFCQk9IDB4MTAsCi0JLyogRVhBQllURSBzcGVjaWZpYyAqLwotCUFUQV9FWEFCWVRFX0VOQUJMRV9ORVNUCT0gMHhGMCwKIAogCS8qIFJFQURfTE9HX0VYVCBwYWdlcyAqLwogCUFUQV9MT0dfU0FUQV9OQ1EJPSAweDEwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NDdmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEltcmUgS2Fsb3ogPGthbG96QG9wZW53cnQub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0gKKyNkZWZpbmUgX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0gKKworI2RlZmluZSBBVEg5S19QTEFUX0VFUF9NQVhfV09SRFMJMjA0OAorCitzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSB7CisJdTE2IGVlcHJvbV9kYXRhW0FUSDlLX1BMQVRfRUVQX01BWF9XT1JEU107Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtbGVjLmggYi9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCmluZGV4IDZmNWExYmEuLjM5YzkxN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogQVRNIGxlYyBkYWVtb24gY29udHJvbCBzb2NrZXQgKi8KICNkZWZpbmUgQVRNTEVDX0NUUkwJX0lPKCdhJywgQVRNSU9DX0xBTkUpCkBAIC03OCw4ICs3OSw4IEBACiAJCX0gbm9ybWFsOwogCQlzdHJ1Y3QgYXRtbGVjX2NvbmZpZ19tc2cgY29uZmlnOwogCQlzdHJ1Y3QgewotCQkJdWludDE2X3QgbGVjX2lkOwkJCS8qIHJlcXVlc3RvciBsZWNfaWQgICovCi0JCQl1aW50MzJfdCB0cmFuX2lkOwkJCS8qIHRyYW5zYWN0aW9uIGlkICAgICovCisJCQlfX3UxNiBsZWNfaWQ7CQkJCS8qIHJlcXVlc3RvciBsZWNfaWQgICovCisJCQlfX3UzMiB0cmFuX2lkOwkJCQkvKiB0cmFuc2FjdGlvbiBpZCAgICAqLwogCQkJdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CS8qIGRzdCBtYWMgYWRkciAgICAgICovCiAJCQl1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsJLyogcmVxZXN0b3IgQVRNIGFkZHIgKi8KIAkJfSBwcm94eTsJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtbXBjLmggYi9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCmluZGV4IGVhMTY1MDQuLjJhYmE1NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG1tcGMuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIEFUTU1QQ19DVFJMIF9JTygnYScsIEFUTUlPQ19NUE9BKQogI2RlZmluZSBBVE1NUENfREFUQSBfSU8oJ2EnLCBBVE1JT0NfTVBPQSsxKQpAQCAtMTgsMzkgKzE5LDM5IEBACiB9OwogCiB0eXBlZGVmIHN0cnVjdCBpbl9jdHJsX2luZm8gewotICAgICAgICB1aW50OF90ICAgTGFzdF9OSFJQX0NJRV9jb2RlOwotICAgICAgICB1aW50OF90ICAgTGFzdF9RMjkzMV9jYXVzZV92YWx1ZTsgICAgIAotICAgICAgICB1aW50OF90ICAgZWdfTVBDX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191OCAgIExhc3RfTkhSUF9DSUVfY29kZTsKKyAgICAgICAgX191OCAgIExhc3RfUTI5MzFfY2F1c2VfdmFsdWU7CisgICAgICAgIF9fdTggICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOwogICAgICAgICBfX2JlMzIgIHRhZzsKICAgICAgICAgX19iZTMyICBpbl9kc3RfaXA7ICAgICAgLyogSVAgYWRkcmVzcyB0aGlzIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgdG8gKi8KLSAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKLSAgICAgICAgdWludDMyX3QgIHJlcXVlc3RfaWQ7CisgICAgICAgIF9fdTE2ICBob2xkaW5nX3RpbWU7CisgICAgICAgIF9fdTMyICByZXF1ZXN0X2lkOwogfSBpbl9jdHJsX2luZm87CiAKIHR5cGVkZWYgc3RydWN0IGVnX2N0cmxfaW5mbyB7Ci0gICAgICAgIHVpbnQ4X3QgICBETExfaGVhZGVyWzI1Nl07Ci0gICAgICAgIHVpbnQ4X3QgICBESF9sZW5ndGg7CisgICAgICAgIF9fdTggICBETExfaGVhZGVyWzI1Nl07CisgICAgICAgIF9fdTggICBESF9sZW5ndGg7CiAgICAgICAgIF9fYmUzMiAgY2FjaGVfaWQ7CiAgICAgICAgIF9fYmUzMiAgdGFnOwogICAgICAgICBfX2JlMzIgIG1wc19pcDsKICAgICAgICAgX19iZTMyICBlZ19kc3RfaXA7ICAgICAgLyogSVAgYWRkcmVzcyB0byB3aGljaCBpbmdyZXNzIE1QQyBzZW5kcyBwYWNrZXRzICovCi0gICAgICAgIHVpbnQ4X3QgICBpbl9NUENfZGF0YV9BVE1fYWRkcltBVE1fRVNBX0xFTl07Ci0gICAgICAgIHVpbnQxNl90ICBob2xkaW5nX3RpbWU7CisgICAgICAgIF9fdTggICBpbl9NUENfZGF0YV9BVE1fYWRkcltBVE1fRVNBX0xFTl07CisgICAgICAgIF9fdTE2ICBob2xkaW5nX3RpbWU7CiB9IGVnX2N0cmxfaW5mbzsKIAogc3RydWN0IG1wY19wYXJhbWV0ZXJzIHsKLSAgICAgICAgdWludDE2X3QgbXBjX3AxOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIENvdW50ICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wMjsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBUaW1lICAgICAqLwotICAgICAgICB1aW50OF90IG1wY19wM1s4XTsgLyogRmxvdy1kZXRlY3Rpb24gUHJvdG9jb2xzICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A0OyAgIC8qIE1QQyBJbml0aWFsIFJldHJ5IFRpbWUgICAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNTsgICAvKiBNUEMgUmV0cnkgVGltZSBNYXhpbXVtICAgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDY7ICAgLyogSG9sZCBEb3duIFRpbWUgICAgICAgICAgICAgICAgKi8gICAgICAKKyAgICAgICAgX191MTYgbXBjX3AxOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIENvdW50ICAgICovCisgICAgICAgIF9fdTE2IG1wY19wMjsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBUaW1lICAgICAqLworICAgICAgICBfX3U4IG1wY19wM1s4XTsgLyogRmxvdy1kZXRlY3Rpb24gUHJvdG9jb2xzICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A0OyAgIC8qIE1QQyBJbml0aWFsIFJldHJ5IFRpbWUgICAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNTsgICAvKiBNUEMgUmV0cnkgVGltZSBNYXhpbXVtICAgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDY7ICAgLyogSG9sZCBEb3duIFRpbWUgICAgICAgICAgICAgICAgKi8KIH0gOwogCiBzdHJ1Y3Qga19tZXNzYWdlIHsKLSAgICAgICAgdWludDE2X3QgdHlwZTsKKyAgICAgICAgX191MTYgdHlwZTsKICAgICAgICAgX19iZTMyIGlwX21hc2s7Ci0gICAgICAgIHVpbnQ4X3QgIE1QU19jdHJsW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191OCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgaW5fY3RybF9pbmZvIGluX2luZm87CiAgICAgICAgICAgICAgICAgZWdfY3RybF9pbmZvIGVnX2luZm87CkBAIC02MSwxMSArNjIsMTEgQEAKIAogc3RydWN0IGxsY19zbmFwX2hkciB7CiAJLyogUkZDIDE0ODMgTExDL1NOQVAgZW5jYXBzdWxhdGlvbiBmb3Igcm91dGVkIElQIFBEVXMgKi8KLSAgICAgICAgdWludDhfdCAgZHNhcDsgICAgLyogRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQgKDB4QUEpICAgICAqLwotICAgICAgICB1aW50OF90ICBzc2FwOyAgICAvKiBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQgICAgICAoMHhBQSkgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIHVpOyAgICAgIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gICAgICAgICAgICgweDAzKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgb3JnWzNdOyAgLyogT3JnYW5pemF0aW9uYWwgaWRlbnRpZmljYXRpb24gICAgKDB4MDAwMDAwKSAqLwotICAgICAgICB1aW50OF90ICB0eXBlWzJdOyAvKiBFdGhlciB0eXBlIChmb3IgSVApICAgICAgICAgICAgICAoMHgwODAwKSAgICovCisgICAgICAgIF9fdTggIGRzYXA7ICAgIC8qIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50ICgweEFBKSAgICAgKi8KKyAgICAgICAgX191OCAgc3NhcDsgICAgLyogU291cmNlIFNlcnZpY2UgQWNjZXNzIFBvaW50ICAgICAgKDB4QUEpICAgICAqLworICAgICAgICBfX3U4ICB1aTsgICAgICAvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICAgICAgICAgICAoMHgwMykgICAgICovCisgICAgICAgIF9fdTggIG9yZ1szXTsgIC8qIE9yZ2FuaXphdGlvbmFsIGlkZW50aWZpY2F0aW9uICAgICgweDAwMDAwMCkgKi8KKyAgICAgICAgX191OCAgdHlwZVsyXTsgLyogRXRoZXIgdHlwZSAoZm9yIElQKSAgICAgICAgICAgICAgKDB4MDgwMCkgICAqLwogfTsKIAogLyogVExWcyB0aGlzIE1QQyByZWNvZ25pemVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggNjdlNWRiZi4uNGZhMjgxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtMzYsNyArMzYsOCBAQAogICogMTUwMCAtIDE1OTkga2VybmVsIExTUFAgZXZlbnRzCiAgKiAxNjAwIC0gMTY5OSBrZXJuZWwgY3J5cHRvIGV2ZW50cwogICogMTcwMCAtIDE3OTkga2VybmVsIGFub21hbHkgcmVjb3JkcwotICogMTgwMCAtIDE5OTkgZnV0dXJlIGtlcm5lbCB1c2UgKG1heWJlIGludGVncml0eSBsYWJlbHMgYW5kIHJlbGF0ZWQgZXZlbnRzKQorICogMTgwMCAtIDE4OTkga2VybmVsIGludGVncml0eSBldmVudHMKKyAqIDE5MDAgLSAxOTk5IGZ1dHVyZSBrZXJuZWwgdXNlCiAgKiAyMDAwIGlzIGZvciBvdGhlcndpc2UgdW5jbGFzc2lmaWVkIGtlcm5lbCBhdWRpdCBtZXNzYWdlcyAobGVnYWN5KQogICogMjAwMSAtIDIwOTkgdW51c2VkIChrZXJuZWwpCiAgKiAyMTAwIC0gMjE5OSB1c2VyIHNwYWNlIGFub21hbHkgcmVjb3JkcwpAQCAtMTI1LDYgKzEyNiwxMiBAQAogI2RlZmluZSBBVURJVF9MQVNUX0tFUk5fQU5PTV9NU0cgICAgMTc5OQogI2RlZmluZSBBVURJVF9BTk9NX1BST01JU0NVT1VTICAgICAgMTcwMCAvKiBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlICovCiAjZGVmaW5lIEFVRElUX0FOT01fQUJFTkQgICAgICAgICAgICAxNzAxIC8qIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseSAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfREFUQQkgICAgMTgwMCAvKiBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24gKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBICAgIDE4MDEgLyogTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfU1RBVFVTCSAgICAxODAyIC8qIEludGVncml0eSBlbmFibGUgc3RhdHVzICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9IQVNICSAgICAxODAzIC8qIEludGVncml0eSBIQVNIIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1BDUgkgICAgMTgwNCAvKiBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1JVTEUJICAgIDE4MDUgLyogcG9saWN5IHJ1bGUgKi8KIAogI2RlZmluZSBBVURJVF9LRVJORUwJCTIwMDAJLyogQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggMWIxNjEwOC4uYjA1YjFkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC00MjYsOSArNDI2LDYgQEAKIAl1bnNpZ25lZCBpbnQgZnJvbnRfcGFkOwogCiAJbWVtcG9vbF90ICpiaW9fcG9vbDsKLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKLQltZW1wb29sX3QgKmJpb19pbnRlZ3JpdHlfcG9vbDsKLSNlbmRpZgogCW1lbXBvb2xfdCAqYnZlY19wb29sOwogfTsKIApAQCAtNTE5LDkgKzUxNiw4IEBACiAKICNkZWZpbmUgYmlvX2ludGVncml0eShiaW8pIChiaW8tPmJpX2ludGVncml0eSAhPSBOVUxMKQogCi1leHRlcm4gc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoc3RydWN0IGJpbyAqLCBnZnBfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgYmlvX3NldCAqKTsKIGV4dGVybiBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaW9faW50ZWdyaXR5X2FsbG9jKHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvX3NldCAqKTsKK2V4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2FkZF9wYWdlKHN0cnVjdCBiaW8gKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2VuYWJsZWQoc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9zZXRfdGFnKHN0cnVjdCBiaW8gKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwpAQCAtNTMxLDI3ICs1MjcsMjEgQEAKIGV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfYWR2YW5jZShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X3RyaW0oc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X3NwbGl0KHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb19wYWlyICosIGludCk7Ci1leHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIGludCBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShzdHJ1Y3QgYmlvX3NldCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgYmlvc2V0X2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9pbml0X3NsYWIodm9pZCk7CitleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvICosIGdmcF90KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKICNkZWZpbmUgYmlvX2ludGVncml0eShhKQkJKDApCi0jZGVmaW5lIGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKGEsIGIpCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3ByZXAoYSkJCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2VuYWJsZWQoYSkJKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfY2xvbmUoYSwgYiwgYykJKDApCi0jZGVmaW5lIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShhKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfZnJlZShhLCBiKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZnJlZShhKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2VuZGlvKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9hZHZhbmNlKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV90cmltKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9zcGxpdChhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfc2V0X3RhZyhhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZ2V0X3RhZyhhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKGEpCWRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IDk1ODM3YmYuLjQ1NWQ4MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC02NSwyMyArNjUsMjAgQEAKICNkZWZpbmUgQk9PVE1FTV9ERUZBVUxUCQkwCiAjZGVmaW5lIEJPT1RNRU1fRVhDTFVTSVZFCSgxPDwwKQogCitleHRlcm4gaW50IHJlc2VydmVfYm9vdG1lbSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCByZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSB1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJIGludCBmbGFncyk7Ci0jaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCi1leHRlcm4gaW50IHJlc2VydmVfYm9vdG1lbSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGZsYWdzKTsKLSNlbmRpZgorCQkJCXVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCWludCBmbGFncyk7CiAKLWV4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh1bnNpZ25lZCBsb25nIHNpemUsCitleHRlcm4gdm9pZCAqX19hbGxvY19ib290bWVtKHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBnb2FsKTsKLWV4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBzaXplLAorZXh0ZXJuIHZvaWQgKl9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGdvYWwpOwotZXh0ZXJuIHZvaWQgKl9fYWxsb2NfYm9vdG1lbV9sb3codW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLAotCQkJCSB1bnNpZ25lZCBsb25nIGdvYWwpOwogZXh0ZXJuIHZvaWQgKl9fYWxsb2NfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsCiAJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFsaWduLApAQCAtOTAsMzAgKzg3LDM1IEBACiAJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCSAgdW5zaWduZWQgbG9uZyBnb2FsKTsKK2V4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW1fbG93KHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBnb2FsKTsKIGV4dGVybiB2b2lkICpfX2FsbG9jX2Jvb3RtZW1fbG93X25vZGUocGdfZGF0YV90ICpwZ2RhdCwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGdvYWwpOwotI2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERQorCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW0oeCkgXAogCV9fYWxsb2NfYm9vdG1lbSh4LCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub3BhbmljKHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4LCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKLSNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3coeCkgXAotCV9fYWxsb2NfYm9vdG1lbV9sb3coeCwgU01QX0NBQ0hFX0JZVEVTLCAwKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzKHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW0oeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9wYW5pYyh4KSBcCiAJX19hbGxvY19ib290bWVtX25vcGFuaWMoeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCi0jZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHgpIFwKLQlfX2FsbG9jX2Jvb3RtZW1fbG93KHgsIFBBR0VfU0laRSwgMCkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZV9ub3BhbmljKHBnZGF0LCB4KSBcCisJX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCisKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3coeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9sb3coeCwgU01QX0NBQ0hFX0JZVEVTLCAwKQorI2RlZmluZSBhbGxvY19ib290bWVtX2xvd19wYWdlcyh4KSBcCisJX19hbGxvY19ib290bWVtX2xvdyh4LCBQQUdFX1NJWkUsIDApCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbG93X25vZGUocGdkYXQsIHgsIFBBR0VfU0laRSwgMCkKLSNlbmRpZiAvKiAhQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgKi8KIAogZXh0ZXJuIGludCByZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2cuaCBiL2luY2x1ZGUvbGludXgvYnNnLmgKaW5kZXggY2YwMzAzYTYuLmVjYjQ3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnNnLmgKKysrIGIvaW5jbHVkZS9saW51eC9ic2cuaApAQCAtMSwxMiArMSwyMiBAQAogI2lmbmRlZiBCU0dfSAogI2RlZmluZSBCU0dfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBCU0dfUFJPVE9DT0xfU0NTSQkJMAogCiAjZGVmaW5lIEJTR19TVUJfUFJPVE9DT0xfU0NTSV9DTUQJMAogI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVE1GCTEKICNkZWZpbmUgQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX1RSQU5TUE9SVAkyCiAKKy8qCisgKiBGb3IgZmxhZ3MgbWVtYmVyIGJlbG93CisgKiBzZy5oIHNnX2lvX2hkciBhbHNvIGhhcyBiaXRzIGRlZmluZWQgZm9yIGl0J3MgZmxhZ3MgbWVtYmVyLiBIb3dldmVyCisgKiBub25lIG9mIHRoZXNlIGJpdHMgYXJlIGltcGxlbWVudGVkL3VzZWQgYnkgYnNnLiBUaGUgYml0cyBiZWxvdyBhcmUKKyAqIGFsbG9jYXRlZCB0byBub3QgY29uZmxpY3Qgd2l0aCBzZy5oIG9uZXMgYW55d2F5LgorICovCisjZGVmaW5lIEJTR19GTEFHX1FfQVRfVEFJTCAweDEwIC8qIGRlZmF1bHQsID09IDAgYXQgdGhpcyBiaXQsIGlzIFFfQVRfSEVBRCAqLworCiBzdHJ1Y3Qgc2dfaW9fdjQgewogCV9fczMyIGd1YXJkOwkJLyogW2ldICdRJyB0byBkaWZmZXJlbnRpYXRlIGZyb20gdjMgKi8KIAlfX3UzMiBwcm90b2NvbDsJCS8qIFtpXSAwIC0+IFNDU0kgLCAuLi4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggYmQ3YWM3OS4uZjE5ZmQ5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMTY1LDE1ICsxNjUsOCBAQAogdm9pZCB1bm1hcF91bmRlcmx5aW5nX21ldGFkYXRhKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrKTsKIAogdm9pZCBtYXJrX2J1ZmZlcl9hc3luY193cml0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLXZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1pbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIHZvaWQgX193YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiB3YWl0X3F1ZXVlX2hlYWRfdCAqYmhfd2FpdHFfaGVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLWludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1pbnQgdGhhd19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwotaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWludCBmc3luY19ub19zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2ZpbmRfZ2V0X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogCQkJdW5zaWduZWQgc2l6ZSk7CiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fZ2V0YmxrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCAxYjk4NzI1Li40ODY0YTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaApAQCAtMzkzLDggKzM5MywxMCBAQAogIyBkZWZpbmUgQ0FQX0ZVTExfU0VUICAgICAoKGtlcm5lbF9jYXBfdCl7eyB+MCwgfjAgfX0pCiAjIGRlZmluZSBDQVBfSU5JVF9FRkZfU0VUICgoa2VybmVsX2NhcF90KXt7IH5DQVBfVE9fTUFTSyhDQVBfU0VUUENBUCksIH4wIH19KQogIyBkZWZpbmUgQ0FQX0ZTX1NFVCAgICAgICAoKGtlcm5lbF9jYXBfdCl7eyBDQVBfRlNfTUFTS19CMCwgQ0FQX0ZTX01BU0tfQjEgfSB9KQotIyBkZWZpbmUgQ0FQX05GU0RfU0VUICAgICAoKGtlcm5lbF9jYXBfdCl7eyBDQVBfRlNfTUFTS19CMHxDQVBfVE9fTUFTSyhDQVBfU1lTX1JFU09VUkNFKSwgXAotCQkJCQlDQVBfRlNfTUFTS19CMSB9IH0pCisjIGRlZmluZSBDQVBfTkZTRF9TRVQgICAgICgoa2VybmVsX2NhcF90KXt7IENBUF9GU19NQVNLX0IwIFwKKwkJCQkJICAgIHwgQ0FQX1RPX01BU0soQ0FQX1NZU19SRVNPVVJDRSkgXAorCQkJCQkgICAgfCBDQVBfVE9fTUFTSyhDQVBfTUtOT0QpLCBcCisJCQkJCSAgICBDQVBfRlNfTUFTS19CMSB9IH0pCiAKICNlbmRpZiAvKiBfS0VSTkVMX0NBUEFCSUxJVFlfVTMyUyAhPSAyICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCBmODhkMzJmLi41NzM4MTllZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtMjIsOCArMjIsMTA5IEBACiBzdHJ1Y3QgY2xvY2tzb3VyY2U7CiAKIC8qKgorICogc3RydWN0IGN5Y2xlY291bnRlciAtIGhhcmR3YXJlIGFic3RyYWN0aW9uIGZvciBhIGZyZWUgcnVubmluZyBjb3VudGVyCisgKglQcm92aWRlcyBjb21wbGV0ZWx5IHN0YXRlLWZyZWUgYWNjZXNzb3JzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgorICoJRGVwZW5kaW5nIG9uIHdoaWNoIGhhcmR3YXJlIGl0IHJlYWRzLCB0aGUgY3ljbGUgY291bnRlciBtYXkgd3JhcAorICoJYXJvdW5kIHF1aWNrbHkuIExvY2tpbmcgcnVsZXMgKGlmIG5lY2Vzc2FyeSkgaGF2ZSB0byBiZSBkZWZpbmVkCisgKglieSB0aGUgaW1wbGVtZW50b3IgYW5kIHVzZXIgb2Ygc3BlY2lmaWMgaW5zdGFuY2VzIG9mIHRoaXMgQVBJLgorICoKKyAqIEByZWFkOgkJcmV0dXJucyB0aGUgY3VycmVudCBjeWNsZSB2YWx1ZQorICogQG1hc2s6CQliaXRtYXNrIGZvciB0d28ncyBjb21wbGVtZW50CisgKgkJCXN1YnRyYWN0aW9uIG9mIG5vbiA2NCBiaXQgY291bnRlcnMsCisgKgkJCXNlZSBDTE9DS1NPVVJDRV9NQVNLKCkgaGVscGVyIG1hY3JvCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllcgorICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCisgKi8KK3N0cnVjdCBjeWNsZWNvdW50ZXIgeworCWN5Y2xlX3QgKCpyZWFkKShjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYyk7CisJY3ljbGVfdCBtYXNrOworCXUzMiBtdWx0OworCXUzMiBzaGlmdDsKK307CisKKy8qKgorICogc3RydWN0IHRpbWVjb3VudGVyIC0gbGF5ZXIgYWJvdmUgYSAlc3RydWN0IGN5Y2xlY291bnRlciB3aGljaCBjb3VudHMgbmFub3NlY29uZHMKKyAqCUNvbnRhaW5zIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGltZWNvdW50ZXJfcmVhZCgpIHRvIGRldGVjdAorICoJY3ljbGUgY291bnRlciB3cmFwIGFyb3VuZC4gSW5pdGlhbGl6ZSB3aXRoCisgKgl0aW1lY291bnRlcl9pbml0KCkuIEFsc28gdXNlZCB0byBjb252ZXJ0IGN5Y2xlIGNvdW50cyBpbnRvIHRoZQorICoJY29ycmVzcG9uZGluZyBuYW5vc2Vjb25kIGNvdW50cyB3aXRoIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCkuIFVzZXJzCisgKglvZiB0aGlzIGNvZGUgYXJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHVuZGVybHlpbmcKKyAqCWN5Y2xlIGNvdW50ZXIgaGFyZHdhcmUsIGxvY2tpbmcgaXNzdWVzIGFuZCByZWFkaW5nIHRoZSB0aW1lCisgKgltb3JlIG9mdGVuIHRoYW4gdGhlIGN5Y2xlIGNvdW50ZXIgd3JhcHMgYXJvdW5kLiBUaGUgbmFub3NlY29uZAorICoJY291bnRlciB3aWxsIG9ubHkgd3JhcCBhcm91bmQgYWZ0ZXIgfjU4NSB5ZWFycy4KKyAqCisgKiBAY2M6CQkJdGhlIGN5Y2xlIGNvdW50ZXIgdXNlZCBieSB0aGlzIGluc3RhbmNlCisgKiBAY3ljbGVfbGFzdDoJCW1vc3QgcmVjZW50IGN5Y2xlIGNvdW50ZXIgdmFsdWUgc2VlbiBieQorICoJCQl0aW1lY291bnRlcl9yZWFkKCkKKyAqIEBuc2VjOgkJY29udGludW91c2x5IGluY3JlYXNpbmcgY291bnQKKyAqLworc3RydWN0IHRpbWVjb3VudGVyIHsKKwljb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYzsKKwljeWNsZV90IGN5Y2xlX2xhc3Q7CisJdTY0IG5zZWM7Cit9OworCisvKioKKyAqIGN5Y2xlY291bnRlcl9jeWMybnMgLSBjb252ZXJ0cyBjeWNsZSBjb3VudGVyIGN5Y2xlcyB0byBuYW5vc2Vjb25kcworICogQHRjOgkJUG9pbnRlciB0byBjeWNsZSBjb3VudGVyLgorICogQGN5Y2xlczoJQ3ljbGVzCisgKgorICogWFhYIC0gVGhpcyBjb3VsZCB1c2Ugc29tZSBtdWx0X2x4bF9sbCgpIGFzbSBvcHRpbWl6YXRpb24uIFNhbWUgY29kZQorICogYXMgaW4gY3ljMm5zLCBidXQgd2l0aCB1bnNpZ25lZCByZXN1bHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGN5Y2xlY291bnRlcl9jeWMybnMoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkJICAgICAgY3ljbGVfdCBjeWNsZXMpCit7CisJdTY0IHJldCA9ICh1NjQpY3ljbGVzOworCXJldCA9IChyZXQgKiBjYy0+bXVsdCkgPj4gY2MtPnNoaWZ0OworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdGltZWNvdW50ZXJfaW5pdCAtIGluaXRpYWxpemUgYSB0aW1lIGNvdW50ZXIKKyAqIEB0YzoJCQlQb2ludGVyIHRvIHRpbWUgY291bnRlciB3aGljaCBpcyB0byBiZSBpbml0aWFsaXplZC9yZXNldAorICogQGNjOgkJCUEgY3ljbGUgY291bnRlciwgcmVhZHkgdG8gYmUgdXNlZC4KKyAqIEBzdGFydF90c3RhbXA6CUFyYml0cmFyeSBpbml0aWFsIHRpbWUgc3RhbXAuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsIHRoZSBjdXJyZW50IGN5Y2xlIHJlZ2lzdGVyIChyb3VnaGx5KSBjb3JyZXNwb25kcyB0bworICogdGhlIGluaXRpYWwgdGltZSBzdGFtcC4gRXZlcnkgY2FsbCB0byB0aW1lY291bnRlcl9yZWFkKCkgaW5jcmVtZW50cworICogdGhlIHRpbWUgc3RhbXAgY291bnRlciBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgbmFub3NlY29uZHMuCisgKi8KK2V4dGVybiB2b2lkIHRpbWVjb3VudGVyX2luaXQoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkgICAgIHU2NCBzdGFydF90c3RhbXApOworCisvKioKKyAqIHRpbWVjb3VudGVyX3JlYWQgLSByZXR1cm4gbmFub3NlY29uZHMgZWxhcHNlZCBzaW5jZSB0aW1lY291bnRlcl9pbml0KCkKKyAqICAgICAgICAgICAgICAgICAgICBwbHVzIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAKKyAqIEB0YzogICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIuCisgKgorICogSW4gb3RoZXIgd29yZHMsIGtlZXBzIHRyYWNrIG9mIHRpbWUgc2luY2UgdGhlIHNhbWUgZXBvY2ggYXMKKyAqIHRoZSBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZWQgdGhlIGluaXRpYWwgdGltZSBzdGFtcC4KKyAqLworZXh0ZXJuIHU2NCB0aW1lY291bnRlcl9yZWFkKHN0cnVjdCB0aW1lY291bnRlciAqdGMpOworCisvKioKKyAqIHRpbWVjb3VudGVyX2N5YzJ0aW1lIC0gY29udmVydCBhIGN5Y2xlIGNvdW50ZXIgdG8gc2FtZQorICogICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGJhc2UgYXMgdmFsdWVzIHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVjb3VudGVyX3JlYWQoKQorICogQHRjOgkJUG9pbnRlciB0byB0aW1lIGNvdW50ZXIuCisgKiBAY3ljbGU6CWEgdmFsdWUgcmV0dXJuZWQgYnkgdGMtPmNjLT5yZWFkKCkKKyAqCisgKiBDeWNsZSBjb3VudHMgdGhhdCBhcmUgY29udmVydGVkIGNvcnJlY3RseSBhcyBsb25nIGFzIHRoZXkKKyAqIGZhbGwgaW50byB0aGUgaW50ZXJ2YWwgWy0xLzIgbWF4IGN5Y2xlIGNvdW50LCArMS8yIG1heCBjeWNsZSBjb3VudF0sCisgKiB3aXRoICJtYXggY3ljbGUgY291bnQiID09IGNzLT5tYXNrKzEuCisgKgorICogVGhpcyBhbGxvd3MgY29udmVyc2lvbiBvZiBjeWNsZSBjb3VudGVyIHZhbHVlcyB3aGljaCB3ZXJlIGdlbmVyYXRlZAorICogaW4gdGhlIHBhc3QuCisgKi8KK2V4dGVybiB1NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCQljeWNsZV90IGN5Y2xlX3RzdGFtcCk7CisKKy8qKgogICogc3RydWN0IGNsb2Nrc291cmNlIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKICAqCVByb3ZpZGVzIG1vc3RseSBzdGF0ZS1mcmVlIGFjY2Vzc29ycyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KKyAqCVRoaXMgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBzeXN0ZW0gdGltZS4KICAqCiAgKiBAbmFtZToJCXB0ciB0byBjbG9ja3NvdXJjZSBuYW1lCiAgKiBAbGlzdDoJCWxpc3QgaGVhZCBmb3IgcmVnaXN0cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAppbmRleCA2MDVlYmUyLi43MmJmZWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmCV9DTTQwMDBfSF8KICNkZWZpbmUJX0NNNDAwMF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZQlNQVhfQVRSCQkJMzMKIAogI2RlZmluZQlDTTQwMDBfTUFYX0RFVgkJNApAQCAtMTAsOSArMTIsOSBAQAogICogbm90IHRvIGJyZWFrIGNvbXBpbGF0aW9uIG9mIHVzZXJzcGFjZSBhcHBzLiAtSFcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYXRyZXEgewotCWludDMyX3QgYXRyX2xlbjsKKwlfX3MzMiBhdHJfbGVuOwogCXVuc2lnbmVkIGNoYXIgYXRyWzY0XTsKLQlpbnQzMl90IHBvd2VyX2FjdDsKKwlfX3MzMiBwb3dlcl9hY3Q7CiAJdW5zaWduZWQgY2hhciBiSUZTRDsKIAl1bnNpZ25lZCBjaGFyIGJJRlNDOwogfSBhdHJlcV90OwpAQCAtMjIsMTMgKzI0LDEzIEBACiAgKiBtZW1iZXIgc2l6ZXMuIFRoaXMgbGVhZHMgdG8gQ09ORklHX0NPTVBBVCBicmVha2FnZSwgc2luY2UgMzJiaXQgdXNlcnNwYWNlCiAgKiB3aWxsIGxheSBvdXQgdGhlIHN0cnVjdHVyZSBtZW1iZXJzIGRpZmZlcmVudGx5IHRoYW4gdGhlIDY0Yml0IGtlcm5lbC4KICAqCi0gKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gInVfaW50MzJfdCIuCisgKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gIl9fdTMyIi4KICAqIE9uIDMyYml0IHRoaXMgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UuICBXaXRoIDY0Yml0IGtlcm5lbHMsIGl0IHdpbGwgbWFrZQogICogMzJiaXQgYXBwcyB3b3JrLCB0b28uCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgcHRzcmVxIHsKLQl1X2ludDMyX3QgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCisJX191MzIgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCiAgCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CiAgCXVuc2lnbmVkIGNoYXIgcHRzMTsKICAJdW5zaWduZWQgY2hhciBwdHMyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmggYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAppbmRleCAxYzg2ZDY1Li5iODEyNWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtNjUsMjAgKzY1LDIwIEBACiAJCX0gYWNrOwogCiAJCXN0cnVjdCBmb3JrX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcGFyZW50X3BpZDsKLQkJCXBpZF90IHBhcmVudF90Z2lkOwotCQkJcGlkX3QgY2hpbGRfcGlkOwotCQkJcGlkX3QgY2hpbGRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHBhcmVudF9waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwYXJlbnRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3RnaWQ7CiAJCX0gZm9yazsKIAogCQlzdHJ1Y3QgZXhlY19wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCX0gZXhlYzsKIAogCQlzdHJ1Y3QgaWRfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwcm9jZXNzX3BpZDsKLQkJCXBpZF90IHByb2Nlc3NfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOwogCQkJdW5pb24gewogCQkJCV9fdTMyIHJ1aWQ7IC8qIHRhc2sgdWlkICovCiAJCQkJX191MzIgcmdpZDsgLyogdGFzayBnaWQgKi8KQEAgLTkwLDggKzkwLDggQEAKIAkJfSBpZDsKIAogCQlzdHJ1Y3QgZXhpdF9wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCQlfX3UzMiBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogCQl9IGV4aXQ7CiAJfSBldmVudF9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmggYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAppbmRleCAwN2FlOGY4Li41YjVkNDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaApAQCAtNiw2ICs2LDcgQEAKICNkZWZpbmUgQ09EQV9QU0RFVl9NQUpPUiA2NwogI2RlZmluZSBNQVhfQ09EQURFVlMgIDUJICAgLyogaG93IG1hbnkgZG8gd2UgYWxsb3cgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBrc3RhdGZzOwogCiAvKiBjb21tdW5pY2F0aW9uIHBlbmRpbmcvcHJvY2Vzc2luZyBxdWV1ZXMgKi8KQEAgLTI0LDcgKzI1LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCB2ZW51c19jb21tICopKChzYiktPnNfZnNfaW5mbyk7CiB9CiAKLQogLyogdXBjYWxscyAqLwogaW50IHZlbnVzX3Jvb3RmaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZHApOwogaW50IHZlbnVzX2dldGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwKQEAgLTY0LDYgKzY0LDEyIEBACiBpbnQgdmVudXNfZnN5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCk7CiBpbnQgdmVudXNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKnNmcyk7CiAKKy8qCisgKiBTdGF0aXN0aWNzCisgKi8KKworZXh0ZXJuIHN0cnVjdCB2ZW51c19jb21tIGNvZGFfY29tbXNbXTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIG1lc3NhZ2VzIGJldHdlZW4gY29kYSBmaWxlc3lzdGVtIGluIGtlcm5lbCBhbmQgVmVudXMgKi8KIHN0cnVjdCB1cGNfcmVxIHsKQEAgLTgyLDExICs4OCw0IEBACiAjZGVmaW5lIFJFUV9XUklURSAgMHg0CiAjZGVmaW5lIFJFUV9BQk9SVCAgMHg4CiAKLQotLyoKLSAqIFN0YXRpc3RpY3MKLSAqLwotCi1leHRlcm4gc3RydWN0IHZlbnVzX2NvbW0gY29kYV9jb21tc1tdOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaCBiL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaAppbmRleCBhYzZkOWE0Li41ZGNmYjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKIGludCBjb20yMDAyMF9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBjb20yMDAyMF9mb3VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2hhcmVkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29tMjAwMjBfbmV0ZGV2X29wczsKIAogLyogVGhlIG51bWJlciBvZiBsb3cgSS9PIHBvcnRzIHVzZWQgYnkgdGhlIGNhcmQuICovCiAjZGVmaW5lIEFSQ05FVF9UT1RBTF9TSVpFIDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IDNmZDIxOTQuLmI4ODA4NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtMTI1LDYgKzEyNSwxMyBAQAogCWNoYXIJCWRfbmFtZVsyNTZdOwogfTsKIAorc3RydWN0IGNvbXBhdF91c3RhdCB7CisJY29tcGF0X2RhZGRyX3QJCWZfdGZyZWU7CisJY29tcGF0X2lub190CQlmX3Rpbm9kZTsKKwljaGFyCQkJZl9mbmFtZVs2XTsKKwljaGFyCQkJZl9mcGFja1s2XTsKK307CisKIHR5cGVkZWYgdW5pb24gY29tcGF0X3NpZ3ZhbCB7CiAJY29tcGF0X2ludF90CXNpdmFsX2ludDsKIAljb21wYXRfdXB0cl90CXNpdmFsX3B0cjsKQEAgLTE3OCw2ICsxODUsNyBAQAogCQl1bnNpZ25lZCBuc2VtcywgY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnRpbWVvdXQpOwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfa2V5Y3RsKHUzMiBvcHRpb24sCiAJCQkgICAgICB1MzIgYXJnMiwgdTMyIGFyZzMsIHUzMiBhcmc0LCB1MzIgYXJnNSk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCBjb21wYXRfdXN0YXQgX191c2VyICp1MzIpOwogCiBhc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLAogCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKaW5kZXggMTUxNGQ1My4uYTNlZDdjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC01Miw3ICs1MiwxNSBAQAogI2RlZmluZSBfX2RlcHJlY2F0ZWQJCQlfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKICNkZWZpbmUgX19wYWNrZWQJCQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogI2RlZmluZSBfX3dlYWsJCQkJX19hdHRyaWJ1dGVfXygod2VhaykpCi0jZGVmaW5lIF9fbmFrZWQJCQkJX19hdHRyaWJ1dGVfXygobmFrZWQpKQorCisvKgorICogaXQgZG9lc24ndCBtYWtlIHNlbnNlIG9uIEFSTSAoY3VycmVudGx5IHRoZSBvbmx5IHVzZXIgb2YgX19uYWtlZCkgdG8gdHJhY2UKKyAqIG5ha2VkIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZW4gbWNvdW50IGlzIGNhbGxlZCB3aXRob3V0IHN0YWNrIGFuZCBmcmFtZSBwb2ludGVyCisgKiBiZWluZyBzZXQgdXAgYW5kIHRoZXJlIGlzIG5vIGNoYW5jZSB0byByZXN0b3JlIHRoZSBsciByZWdpc3RlciB0byB0aGUgdmFsdWUKKyAqIGJlZm9yZSBtY291bnQgd2FzIGNhbGxlZC4KKyAqLworI2RlZmluZSBfX25ha2VkCQkJCV9fYXR0cmlidXRlX18oKG5ha2VkKSkgbm90cmFjZQorCiAjZGVmaW5lIF9fbm9yZXR1cm4JCQlfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCmluZGV4IDA5OTkyNzEuLjQ1MGZhNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCkBAIC0zLDggKzMsMTAgQEAKICNlbmRpZgogCiAvKiBHQ0MgNC4xLlswMV0gbWlzY29tcGlsZXMgX193ZWFrICovCi0jaWYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fIDw9IDEKLSMgZXJyb3IgWW91ciB2ZXJzaW9uIG9mIGdjYyBtaXNjb21waWxlcyB0aGUgX193ZWFrIGRpcmVjdGl2ZQorI2lmZGVmIF9fS0VSTkVMX18KKyMgaWYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fIDw9IDEKKyMgIGVycm9yIFlvdXIgdmVyc2lvbiBvZiBnY2MgbWlzY29tcGlsZXMgdGhlIF9fd2VhayBkaXJlY3RpdmUKKyMgZW5kaWYKICNlbmRpZgogCiAjZGVmaW5lIF9fdXNlZAkJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IDM0ZjI3ODkuLmZjNjVkMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTA5LDYgKzEwOSwxMiBAQAogCXVuc2lnbmVkIGNoYXIgbmFtZVtDTl9DQlFfTkFNRUxFTl07CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY25fcXVldWU7CisJLyogU2VudCB0byBrZXZlbnQgdG8gY3JlYXRlIGNuX3F1ZXVlIG9ubHkgd2hlbiBuZWVkZWQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3FfY3JlYXRpb247CisJLyogVGVsbCBpZiB0aGUgd3FfY3JlYXRpb24gam9iIGlzIHBlbmRpbmcvY29tcGxldGVkICovCisJYXRvbWljX3Qgd3FfcmVxdWVzdGVkOworCS8qIFdhaXQgZm9yIGNuX3F1ZXVlIHRvIGJlIGNyZWF0ZWQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cV9jcmVhdGVkOwogCiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OwogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKQEAgLTE2NCw2ICsxNzAsOCBAQAogaW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSk7CiB2b2lkIGNuX3F1ZXVlX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIHN0cnVjdCBjYl9pZCAqaWQpOwogCitpbnQgcXVldWVfY25fd29yayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogc3RydWN0IGNuX3F1ZXVlX2RldiAqY25fcXVldWVfYWxsb2NfZGV2KGNoYXIgKm5hbWUsIHN0cnVjdCBzb2NrICopOwogdm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IGE2N2E5MGMuLmRjY2E1MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCkBAIC0xMzcsOCArMTM3LDggQEAKIGludCBtZGFfY29uc29sZV9pbml0KHZvaWQpOwogdm9pZCBwcm9tX2Nvbl9pbml0KHZvaWQpOwogCi12b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCB2Y3NfbWFrZV9zeXNmcyhpbnQgaW5kZXgpOwordm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKGludCBpbmRleCk7CiAKIC8qIFNvbWUgZGVidWcgc3R1YiB0byBjYXRjaCBzb21lIG9mIHRoZSBvYnZpb3VzIHJhY2VzIGluIHRoZSBWVCBjb2RlICovCiAjaWYgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggMWYyZTkwMi4uZWMyOWZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9TSEFTSAkJMHgwMDAwMDAwOQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQUhBU0gJCTB4MDAwMDAwMGEKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1JORwkJMHgwMDAwMDAwYworI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTCTB4MDAwMDAwMGYKIAogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLCTB4MDAwMDAwMGUKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0FIQVNIX01BU0sJMHgwMDAwMDAwYwpAQCAtNTQ4LDkgKzU0OSw2IEBACiAgKiBUcmFuc2Zvcm0gdXNlciBpbnRlcmZhY2UuCiAgKi8KICAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAotCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spOwogc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY19iYXNlKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogdm9pZCBjcnlwdG9fZGVzdHJveV90Zm0odm9pZCAqbWVtLCBzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCmluZGV4IGQwNmZiZjIuLjc4ODg1MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTgyLDkgKzgyLDkgQEAKICAqIG9wZW4pCiAgKi8KIHN0cnVjdCBjeWNsYWRlc19pZGxlX3N0YXRzIHsKLSAgICB0aW1lX3QJICAgaW5fdXNlOwkvKiBUaW1lIGRldmljZSBoYXMgYmVlbiBpbiB1c2UgKHNlY3MpICovCi0gICAgdGltZV90CSAgIHJlY3ZfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgcmVjZWl2ZWQgKHNlY3MpICovCi0gICAgdGltZV90CSAgIHhtaXRfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgdHJhbnNtaXR0ZWQgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IGluX3VzZTsJLyogVGltZSBkZXZpY2UgaGFzIGJlZW4gaW4gdXNlIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCByZWN2X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHJlY2VpdmVkIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCB4bWl0X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHRyYW5zbWl0dGVkIChzZWNzKSAqLwogICAgIHVuc2lnbmVkIGxvbmcgIHJlY3ZfYnl0ZXM7CS8qIEJ5dGVzIHJlY2VpdmVkICovCiAgICAgdW5zaWduZWQgbG9uZyAgeG1pdF9ieXRlczsJLyogQnl0ZXMgdHJhbnNtaXR0ZWQgKi8KICAgICB1bnNpZ25lZCBsb25nICBvdmVycnVuczsJLyogSW5wdXQgb3ZlcnJ1bnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhLmggYi9pbmNsdWRlL2xpbnV4L2RjYS5oCmluZGV4IGIwMGE3NTMuLjljMjBjN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2EuaApAQCAtMSwzICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLwogI2lmbmRlZiBEQ0FfSAogI2RlZmluZSBEQ0FfSAogLyogRENBIFByb3ZpZGVyIEFQSSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggYzY2ZDIyNC4uMTUxNTYzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRfc3ViZGlyczsJLyogb3VyIGNoaWxkcmVuICovCiAJc3RydWN0IGxpc3RfaGVhZCBkX2FsaWFzOwkvKiBpbm9kZSBhbGlhcyBsaXN0ICovCiAJdW5zaWduZWQgbG9uZyBkX3RpbWU7CQkvKiB1c2VkIGJ5IGRfcmV2YWxpZGF0ZSAqLwotCXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDsKKwljb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpkX3NiOwkvKiBUaGUgcm9vdCBvZiB0aGUgZGVudHJ5IHRyZWUgKi8KIAl2b2lkICpkX2ZzZGF0YTsJCQkvKiBmcy1zcGVjaWZpYyBkYXRhICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNjcC5oIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKaW5kZXggNjE3MzRlMi4uNzQzNGE4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKQEAgLTM1NSw0NiArMzU1LDYgQEAKIAlyZXR1cm4gX19kY2NwX2hkcl9sZW4oZGNjcF9oZHIoc2tiKSk7CiB9CiAKLQotLyogaW5pdGlhbCB2YWx1ZXMgZm9yIGVhY2ggZmVhdHVyZSAqLwotI2RlZmluZSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVwkJMTAwCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfQUNLX1JBVElPCQkJMgotI2RlZmluZSBEQ0NQRl9JTklUSUFMX0NDSUQJCQlEQ0NQQ19DQ0lEMgotLyogRklYTUU6IGZvciBub3cgd2UncmUgZGVmYXVsdCB0byAxIGJ1dCBpdCBzaG91bGQgcmVhbGx5IGJlIDAgKi8KLSNkZWZpbmUgRENDUEZfSU5JVElBTF9TRU5EX05EUF9DT1VOVAkJMQotCi0vKioKLSAgKiBzdHJ1Y3QgZGNjcF9taW5pc29jayAtIE1pbmltYWwgRENDUCBjb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCi0gICoKLSAgKiBXaWxsIGJlIHVzZWQgdG8gcGFzcyB0aGUgc3RhdGUgZnJvbSBkY2NwX3JlcXVlc3Rfc29jayB0byBkY2NwX3NvY2suCi0gICoKLSAgKiBAZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyAtIFNlcXVlbmNlIFdpbmRvdyBGZWF0dXJlIChzZWN0aW9uIDcuNS4yKQotICAqIEBkY2NwbXNfcGVuZGluZyAtIExpc3Qgb2YgZmVhdHVyZXMgYmVpbmcgbmVnb3RpYXRlZAotICAqIEBkY2NwbXNfY29uZiAtCi0gICovCi1zdHJ1Y3QgZGNjcF9taW5pc29jayB7Ci0JX191NjQJCQlkY2NwbXNfc2VxdWVuY2Vfd2luZG93OwotCXN0cnVjdCBsaXN0X2hlYWQJZGNjcG1zX3BlbmRpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2NwbXNfY29uZjsKLX07Ci0KLXN0cnVjdCBkY2NwX29wdF9jb25mIHsKLQlfX3U4CQkJKmRjY3BvY192YWw7Ci0JX191OAkJCWRjY3BvY19sZW47Ci19OwotCi1zdHJ1Y3QgZGNjcF9vcHRfcGVuZCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2Nwb3Bfbm9kZTsKLQlfX3U4CQkJZGNjcG9wX3R5cGU7Ci0JX191OAkJCWRjY3BvcF9mZWF0OwotCV9fdTgJCSAgICAgICAgKmRjY3BvcF92YWw7Ci0JX191OAkJCWRjY3BvcF9sZW47Ci0JaW50CQkJZGNjcG9wX2NvbmY7Ci0Jc3RydWN0IGRjY3Bfb3B0X2NvbmYgICAgKmRjY3BvcF9zYzsKLX07Ci0KLWV4dGVybiB2b2lkIGRjY3BfbWluaXNvY2tfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayk7Ci0KIC8qKgogICogc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICAtICByZXByZXNlbnQgRENDUC1zcGVjaWZpYyBjb25uZWN0aW9uIHJlcXVlc3QKICAqIEBkcmVxX2luZXRfcnNrOiBzdHJ1Y3R1cmUgaW5oZXJpdGVkIGZyb20KQEAgLTQ4MywxMyArNDQzLDE0IEBACiAgKiBAZGNjcHNfdGltZXN0YW1wX3RpbWUgLSB0aW1lIG9mIHJlY2VpdmluZyBsYXRlc3QgQGRjY3BzX3RpbWVzdGFtcF9lY2hvCiAgKiBAZGNjcHNfbF9hY2tfcmF0aW8gLSBmZWF0dXJlLWxvY2FsIEFjayBSYXRpbwogICogQGRjY3BzX3JfYWNrX3JhdGlvIC0gZmVhdHVyZS1yZW1vdGUgQWNrIFJhdGlvCisgKiBAZGNjcHNfbF9zZXFfd2luIC0gbG9jYWwgU2VxdWVuY2UgV2luZG93IChpbmZsdWVuY2VzIGFjayBudW1iZXIgdmFsaWRpdHkpCisgKiBAZGNjcHNfcl9zZXFfd2luIC0gcmVtb3RlIFNlcXVlbmNlIFdpbmRvdyAoaW5mbHVlbmNlcyBzZXEgbnVtYmVyIHZhbGlkaXR5KQogICogQGRjY3BzX3Bjc2xlbiAtIHNlbmRlciAgIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKHZpYSBzb2Nrb3B0KQogICogQGRjY3BzX3BjcmxlbiAtIHJlY2VpdmVyIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKHZpYSBzb2Nrb3B0KQogICogQGRjY3BzX3NlbmRfbmRwX2NvdW50IC0gbG9jYWwgU2VuZCBORFAgQ291bnQgZmVhdHVyZSAoNy43LjIpCiAgKiBAZGNjcHNfbmRwX2NvdW50IC0gbnVtYmVyIG9mIE5vbiBEYXRhIFBhY2tldHMgc2luY2UgbGFzdCBkYXRhIHBhY2tldAogICogQGRjY3BzX21zc19jYWNoZSAtIGN1cnJlbnQgdmFsdWUgb2YgTVNTIChwYXRoIE1UVSBtaW51cyBoZWFkZXIgc2l6ZXMpCiAgKiBAZGNjcHNfcmF0ZV9sYXN0IC0gdGltZXN0YW1wIGZvciByYXRlLWxpbWl0aW5nIERDQ1AtU3luYyAoUkZDIDQzNDAsIDcuNS40KQotICogQGRjY3BzX21pbmlzb2NrIC0gYXNzb2NpYXRlZCBtaW5pc29jayAoYWNjZXNzZWQgdmlhIGRjY3BfbXNrKQogICogQGRjY3BzX2ZlYXRuZWcgLSB0cmFja3MgZmVhdHVyZS1uZWdvdGlhdGlvbiBzdGF0ZSAobW9zdGx5IGR1cmluZyBoYW5kc2hha2UpCiAgKiBAZGNjcHNfaGNfcnhfYWNrdmVjIC0gcnggaGFsZiBjb25uZWN0aW9uIGFjayB2ZWN0b3IKICAqIEBkY2Nwc19oY19yeF9jY2lkIC0gQ0NJRCB1c2VkIGZvciB0aGUgcmVjZWl2ZXIgKG9yIHJlY2VpdmluZyBoYWxmLWNvbm5lY3Rpb24pCkBAIC01MjMsMTIgKzQ4NCwxMyBAQAogCV9fdTMyCQkJCWRjY3BzX3RpbWVzdGFtcF90aW1lOwogCV9fdTE2CQkJCWRjY3BzX2xfYWNrX3JhdGlvOwogCV9fdTE2CQkJCWRjY3BzX3JfYWNrX3JhdGlvOworCV9fdTY0CQkJCWRjY3BzX2xfc2VxX3dpbjo0ODsKKwlfX3U2NAkJCQlkY2Nwc19yX3NlcV93aW46NDg7CiAJX191OAkJCQlkY2Nwc19wY3NsZW46NDsKIAlfX3U4CQkJCWRjY3BzX3Bjcmxlbjo0OwogCV9fdTgJCQkJZGNjcHNfc2VuZF9uZHBfY291bnQ6MTsKIAlfX3U2NAkJCQlkY2Nwc19uZHBfY291bnQ6NDg7CiAJdW5zaWduZWQgbG9uZwkJCWRjY3BzX3JhdGVfbGFzdDsKLQlzdHJ1Y3QgZGNjcF9taW5pc29jawkJZGNjcHNfbWluaXNvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJZGNjcHNfZmVhdG5lZzsKIAlzdHJ1Y3QgZGNjcF9hY2t2ZWMJCSpkY2Nwc19oY19yeF9hY2t2ZWM7CiAJc3RydWN0IGNjaWQJCQkqZGNjcHNfaGNfcnhfY2NpZDsKQEAgLTU0NiwxMSArNTA4LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCBkY2NwX3NvY2sgKilzazsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9taW5pc29jayAqZGNjcF9tc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotCXJldHVybiAoc3RydWN0IGRjY3BfbWluaXNvY2sgKikmZGNjcF9zayhzayktPmRjY3BzX21pbmlzb2NrOwotfQotCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRjY3Bfcm9sZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3dpdGNoIChkY2NwX3NrKHNrKS0+ZGNjcHNfcm9sZSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2J1bnppcDIuaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9idW56aXAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1MjcyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9idW56aXAyLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBERUNPTVBSRVNTX0JVTlpJUDJfSAorI2RlZmluZSBERUNPTVBSRVNTX0JVTlpJUDJfSAorCitpbnQgYnVuemlwMih1bnNpZ25lZCBjaGFyICppbmJ1ZiwgaW50IGxlbiwKKwkgICAgaW50KCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkgICAgaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCisJICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkgICAgaW50ICpwb3MsCisJICAgIHZvaWQoKmVycm9yKShjaGFyICp4KSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9nZW5lcmljLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmI4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgREVDT01QUkVTU19HRU5FUklDX0gKKyNkZWZpbmUgREVDT01QUkVTU19HRU5FUklDX0gKKworLyogTWluaW1hbCBjaHVua3NpemUgdG8gYmUgcmVhZC4KKyAqQnppcDIgcHJlZmVycyBhdCBsZWFzdCA0MDk2CisgKkx6bWEgcHJlZmVycyAweDEwMDAwICovCisjZGVmaW5lIENPTVBSX0lPQlVGX1NJWkUJNDA5NgorCit0eXBlZGVmIGludCAoKmRlY29tcHJlc3NfZm4pICh1bnNpZ25lZCBjaGFyICppbmJ1ZiwgaW50IGxlbiwKKwkJCSAgICAgIGludCgqZmlsbCkodm9pZCosIHVuc2lnbmVkIGludCksCisJCQkgICAgICBpbnQoKndyaXRlYmIpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCQkJICAgICAgaW50ICpwb3NwLAorCQkJICAgICAgdm9pZCgqZXJyb3IpKGNoYXIgKngpKTsKKworLyogaW5idWYgICAtIGlucHV0IGJ1ZmZlcgorICpsZW4gICAgIC0gbGVuIG9mIHByZS1yZWFkIGRhdGEgaW4gaW5idWYKKyAqZmlsbCAgICAtIGZ1bmN0aW9uIHRvIGZpbGwgaW5idWYgaWYgZW1wdHkKKyAqd3JpdGViYiAtIGZ1bmN0aW9uIHRvIHdyaXRlIG91dCBvdXRidWcKKyAqcG9zcCAgICAtIGlmIG5vbi1udWxsLCBpbnB1dCBwb3NpdGlvbiAobnVtYmVyIG9mIGJ5dGVzIHJlYWQpIHdpbGwgYmUKKyAqCSAgcmV0dXJuZWQgaGVyZQorICoKKyAqSWYgbGVuICE9IDAsIHRoZSBpbmJ1ZiBpcyBpbml0aWFsaXplZCAod2l0aCBhcyBtdWNoIGRhdGEpLCBhbmQgZmlsbAorICpzaG91bGQgbm90IGJlIGNhbGxlZAorICpJZiBsZW4gPSAwLCB0aGUgaW5idWYgaXMgYWxsb2NhdGVkLCBidXQgZW1wdHkuIEl0cyBzaXplIGlzIElPQlVGX1NJWkUKKyAqZmlsbCBzaG91bGQgYmUgY2FsbGVkIChyZXBlYXRlZGx5Li4uKSB0byByZWFkIGRhdGEsIGF0IG1vc3QgSU9CVUZfU0laRQorICovCisKKy8qIFV0aWxpdHkgcm91dGluZSB0byBkZXRlY3QgdGhlIGRlY29tcHJlc3Npb24gbWV0aG9kICovCitkZWNvbXByZXNzX2ZuIGRlY29tcHJlc3NfbWV0aG9kKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCBpbnQgbGVuLAorCQkJCWNvbnN0IGNoYXIgKipuYW1lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvaW5mbGF0ZS5oIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2luZmxhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWIwNmNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2luZmxhdGUuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIElORkxBVEVfSAorI2RlZmluZSBJTkZMQVRFX0gKKworLyogT3RoZXIgaG91c2VrZWVwaW5nIGNvbnN0YW50cyAqLworI2RlZmluZSBJTkJVRlNJWiA0MDk2CisKK2ludCBndW56aXAodW5zaWduZWQgY2hhciAqaW5idWYsIGludCBsZW4sCisJICAgaW50KCpmaWxsKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkgICBpbnQoKmZsdXNoKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJICAgaW50ICpwb3MsCisJICAgdm9pZCgqZXJyb3JfZm4pKGNoYXIgKngpKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmZmOGMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIGxpbnV4L2NvbXByX21tLmgKKyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudCBmb3IgcHJlLWJvb3QgYW5kIHJhbWRpc2sgdW5jb21wcmVzc29ycworICoKKyAqIEF1dGhvcnM6IEFsYWluIEtuYWZmIDxhbGFpbkBrbmFmZi5sdT4KKyAqCisgKi8KKworI2lmbmRlZiBERUNPTVBSX01NX0gKKyNkZWZpbmUgREVDT01QUl9NTV9ICisKKyNpZmRlZiBTVEFUSUMKKworLyogQ29kZSBhY3RpdmUgd2hlbiBpbmNsdWRlZCBmcm9tIHByZS1ib290IGVudmlyb25tZW50OiAqLworCisvKiBBIHRyaXZpYWwgbWFsbG9jIGltcGxlbWVudGF0aW9uLCBhZGFwdGVkIGZyb20KKyAqICBtYWxsb2MgYnkgSGFubnUgU2F2b2xhaW5lbiAxOTkzIGFuZCBNYXR0aGlhcyBVcmxpY2hzIDE5OTQKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFsbG9jX3B0cjsKK3N0YXRpYyBpbnQgbWFsbG9jX2NvdW50OworCitzdGF0aWMgdm9pZCAqbWFsbG9jKGludCBzaXplKQoreworCXZvaWQgKnA7CisKKwlpZiAoc2l6ZSA8IDApCisJCWVycm9yKCJNYWxsb2MgZXJyb3IiKTsKKwlpZiAoIW1hbGxvY19wdHIpCisJCW1hbGxvY19wdHIgPSBmcmVlX21lbV9wdHI7CisKKwltYWxsb2NfcHRyID0gKG1hbGxvY19wdHIgKyAzKSAmIH4zOyAgICAgLyogQWxpZ24gKi8KKworCXAgPSAodm9pZCAqKW1hbGxvY19wdHI7CisJbWFsbG9jX3B0ciArPSBzaXplOworCisJaWYgKGZyZWVfbWVtX2VuZF9wdHIgJiYgbWFsbG9jX3B0ciA+PSBmcmVlX21lbV9lbmRfcHRyKQorCQllcnJvcigiT3V0IG9mIG1lbW9yeSIpOworCisJbWFsbG9jX2NvdW50Kys7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWUodm9pZCAqd2hlcmUpCit7CisJbWFsbG9jX2NvdW50LS07CisJaWYgKCFtYWxsb2NfY291bnQpCisJCW1hbGxvY19wdHIgPSBmcmVlX21lbV9wdHI7Cit9CisKKyNkZWZpbmUgbGFyZ2VfbWFsbG9jKGEpIG1hbGxvYyhhKQorI2RlZmluZSBsYXJnZV9mcmVlKGEpIGZyZWUoYSkKKworI2RlZmluZSBzZXRfZXJyb3JfZm4oeCkKKworI2RlZmluZSBJTklUCisKKyNlbHNlIC8qIFNUQVRJQyAqLworCisvKiBDb2RlIGFjdGl2ZSB3aGVuIGNvbXBpbGVkIHN0YW5kYWxvbmUgZm9yIHVzZSB3aGVuIGxvYWRpbmcgcmFtZGlzazogKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvKiBVc2UgZGVmaW5lcyByYXRoZXIgdGhhbiBzdGF0aWMgaW5saW5lIGluIG9yZGVyIHRvIGF2b2lkIHNwdXJpb3VzCisgKiB3YXJuaW5ncyB3aGVuIG5vdCBuZWVkZWQgKGluZGVlZCBsYXJnZV9tYWxsb2MgLyBsYXJnZV9mcmVlIGFyZSBub3QKKyAqIG5lZWRlZCBieSBpbmZsYXRlICovCisKKyNkZWZpbmUgbWFsbG9jKGEpIGttYWxsb2MoYSwgR0ZQX0tFUk5FTCkKKyNkZWZpbmUgZnJlZShhKSBrZnJlZShhKQorCisjZGVmaW5lIGxhcmdlX21hbGxvYyhhKSB2bWFsbG9jKGEpCisjZGVmaW5lIGxhcmdlX2ZyZWUoYSkgdmZyZWUoYSkKKworc3RhdGljIHZvaWQoKmVycm9yKShjaGFyICptKTsKKyNkZWZpbmUgc2V0X2Vycm9yX2ZuKHgpIGVycm9yID0geDsKKworI2RlZmluZSBJTklUIF9faW5pdAorI2RlZmluZSBTVEFUSUMKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2VuZGlmIC8qIFNUQVRJQyAqLworCisjZW5kaWYgLyogREVDT01QUl9NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvdW5sem1hLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvdW5sem1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NjUzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy91bmx6bWEuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIERFQ09NUFJFU1NfVU5MWk1BX0gKKyNkZWZpbmUgREVDT01QUkVTU19VTkxaTUFfSAorCitpbnQgdW5sem1hKHVuc2lnbmVkIGNoYXIgKiwgaW50LAorCSAgIGludCgqZmlsbCkodm9pZCosIHVuc2lnbmVkIGludCksCisJICAgaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCisJICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCSAgIGludCAqcG9zcCwKKwkgICB2b2lkKCplcnJvcikoY2hhciAqeCkKKwkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDQ3ZjM0M2MuLjI5MThjMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBCVVNfSURfU0laRQkJMjAKIAogc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2VfcHJpdmF0ZTsKIHN0cnVjdCBkZXZpY2VfZHJpdmVyOwogc3RydWN0IGRyaXZlcl9wcml2YXRlOwogc3RydWN0IGNsYXNzOwpAQCAtMTQ3LDcgKzE0OCw3IEBACiBleHRlcm4gc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7CiBleHRlcm4gaW50IGRyaXZlcl9wcm9iZV9kb25lKHZvaWQpOwotZXh0ZXJuIGludCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCk7CiAKIAogLyogc3lzZnMgaW50ZXJmYWNlIGZvciBleHBvcnRpbmcgZHJpdmVyIGF0dHJpYnV0ZXMgKi8KQEAgLTM2NywxNSArMzY4LDExIEBACiB9OwogCiBzdHJ1Y3QgZGV2aWNlIHsKLQlzdHJ1Y3Qga2xpc3QJCWtsaXN0X2NoaWxkcmVuOwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX3BhcmVudDsJLyogbm9kZSBpbiBzaWJsaW5nIGxpc3QgKi8KLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9kcml2ZXI7Ci0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfYnVzOwogCXN0cnVjdCBkZXZpY2UJCSpwYXJlbnQ7CiAKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUJKnA7CisKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwotCWNoYXIJYnVzX2lkW0JVU19JRF9TSVpFXTsJLyogcG9zaXRpb24gb24gcGFyZW50IGJ1cyAqLwotCXVuc2lnbmVkCQl1ZXZlbnRfc3VwcHJlc3M6MTsKIAljb25zdCBjaGFyCQkqaW5pdF9uYW1lOyAvKiBpbml0aWFsIG5hbWUgb2YgdGhlIGRldmljZSAqLwogCXN0cnVjdCBkZXZpY2VfdHlwZQkqdHlwZTsKIApAQCAtMzg3LDggKzM4NCwxMyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7CS8qIHdoaWNoIGRyaXZlciBoYXMgYWxsb2NhdGVkIHRoaXMKIAkJCQkJICAgZGV2aWNlICovCiAJdm9pZAkJKmRyaXZlcl9kYXRhOwkvKiBkYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlciAqLwotCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOwkvKiBQbGF0Zm9ybSBzcGVjaWZpYyBkYXRhLCBkZXZpY2UKLQkJCQkJICAgY29yZSBkb2Vzbid0IHRvdWNoIGl0ICovCisKKwl2b2lkCQkqcGxhdGZvcm1fZGF0YTsJLyogV2Ugd2lsbCByZW1vdmUgcGxhdGZvcm1fZGF0YQorCQkJCQkgICBmaWVsZCBpZiBhbGwgcGxhdGZvcm0gZGV2aWNlcworCQkJCQkgICBwYXNzIGl0cyBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCisJCQkJCSAgIGZyb20gcGxhdGZvcm1fZGV2aWNlLT5wbGF0Zm9ybV9kYXRhLAorCQkJCQkgICBvdGhlciBraW5kIG9mIGRldmljZXMgc2hvdWxkIG5vdAorCQkJCQkgICB1c2UgcGxhdGZvcm1fZGF0YS4gKi8KIAlzdHJ1Y3QgZGV2X3BtX2luZm8JcG93ZXI7CiAKICNpZmRlZiBDT05GSUdfTlVNQQpAQCAtNDI3LDggKzQyOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGV2X25hbWUoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQogewotCS8qIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSBpbiB0aGUgbmVhciBmdXR1cmUgKi8KLQlyZXR1cm4gZGV2LT5idXNfaWQ7CisJcmV0dXJuIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKTsKIH0KIAogZXh0ZXJuIGludCBkZXZfc2V0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCkBAIC00NjMsNiArNDY0LDE2IEBACiAJZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRldl9nZXRfdWV2ZW50X3N1cHByZXNzKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5rb2JqLnVldmVudF9zdXBwcmVzczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldl9zZXRfdWV2ZW50X3N1cHByZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHZhbCkKK3sKKwlkZXYtPmtvYmoudWV2ZW50X3N1cHByZXNzID0gdmFsOworfQorCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfaXNfcmVnaXN0ZXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGRldi0+a29iai5zdGF0ZV9pbl9zeXNmczsKQEAgLTQ4Myw3ICs0OTQsOCBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmRldmljZV9maW5kX2NoaWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKSk7CiBleHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuZXdfbmFtZSk7Ci1leHRlcm4gaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCk7CitleHRlcm4gaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCwKKwkJICAgICAgIGVudW0gZHBtX29yZGVyIGRwbV9vcmRlcik7CiAKIC8qCiAgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXMKQEAgLTU3MCw3ICs1ODIsNyBAQAogI2lmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKIAlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8geyBcCiAJZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAjI19fVkFfQVJHU19fKTsgXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKaW5kZXggMTkyNzYzMy4uNjQ3YzhlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaApAQCAtOSw2ICs5LDggQEAKICNpZm5kZWYgX0RMTV9ORVRMSU5LX0gKICNkZWZpbmUgX0RMTV9ORVRMSU5LX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCURMTV9TVEFUVVNfV0FJVElORyA9IDEsCiAJRExNX1NUQVRVU19HUkFOVEVEID0gMiwKQEAgLTE4LDE2ICsyMCwxNiBAQAogI2RlZmluZSBETE1fTE9DS19EQVRBX1ZFUlNJT04gMQogCiBzdHJ1Y3QgZGxtX2xvY2tfZGF0YSB7Ci0JdWludDE2X3QgdmVyc2lvbjsKLQl1aW50MzJfdCBsb2Nrc3BhY2VfaWQ7CisJX191MTYgdmVyc2lvbjsKKwlfX3UzMiBsb2Nrc3BhY2VfaWQ7CiAJaW50IG5vZGVpZDsKIAlpbnQgb3ducGlkOwotCXVpbnQzMl90IGlkOwotCXVpbnQzMl90IHJlbWlkOwotCXVpbnQ2NF90IHhpZDsKLQlpbnQ4X3Qgc3RhdHVzOwotCWludDhfdCBncm1vZGU7Ci0JaW50OF90IHJxbW9kZTsKKwlfX3UzMiBpZDsKKwlfX3UzMiByZW1pZDsKKwlfX3U2NCB4aWQ7CisJX19zOCBzdGF0dXM7CisJX19zOCBncm1vZGU7CisJX19zOCBycW1vZGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CiAJaW50IHJlc291cmNlX25hbWVsZW47CiAJY2hhciByZXNvdXJjZV9uYW1lW0RMTV9SRVNOQU1FX01BWExFTl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKaW5kZXggMjhjMjk0MC4uNDhlNDRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaApAQCAtMTEzLDIwICsxMTMsMjAgQEAKIAkgKiByZXR1cm4gLUVOT1RUWSkgZmlsbCBvdXQgdGhpcyBmaWVsZCwgZXZlbiBpZiB0aGUKIAkgKiBjb21tYW5kIGZhaWxlZC4KIAkgKi8KLQl1aW50MzJfdCB2ZXJzaW9uWzNdOwkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBkYXRhX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwlfX3UzMiB2ZXJzaW9uWzNdOwkvKiBpbi9vdXQgKi8KKwlfX3UzMiBkYXRhX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KIAkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KIAotCXVpbnQzMl90IGRhdGFfc3RhcnQ7CS8qIG9mZnNldCB0byBzdGFydCBvZiBkYXRhCisJX191MzIgZGF0YV9zdGFydDsJLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIGRhdGEKIAkJCQkgKiByZWxhdGl2ZSB0byBzdGFydCBvZiB0aGlzIHN0cnVjdCAqLwogCi0JdWludDMyX3QgdGFyZ2V0X2NvdW50OwkvKiBpbi9vdXQgKi8KLQlpbnQzMl90IG9wZW5fY291bnQ7CS8qIG91dCAqLwotCXVpbnQzMl90IGZsYWdzOwkJLyogaW4vb3V0ICovCi0JdWludDMyX3QgZXZlbnRfbnI7ICAgICAgCS8qIGluL291dCAqLwotCXVpbnQzMl90IHBhZGRpbmc7CisJX191MzIgdGFyZ2V0X2NvdW50OwkvKiBpbi9vdXQgKi8KKwlfX3MzMiBvcGVuX2NvdW50OwkvKiBvdXQgKi8KKwlfX3UzMiBmbGFnczsJCS8qIGluL291dCAqLworCV9fdTMyIGV2ZW50X25yOyAgICAgIAkvKiBpbi9vdXQgKi8KKwlfX3UzMiBwYWRkaW5nOwogCi0JdWludDY0X3QgZGV2OwkJLyogaW4vb3V0ICovCisJX191NjQgZGV2OwkJLyogaW4vb3V0ICovCiAKIAljaGFyIG5hbWVbRE1fTkFNRV9MRU5dOwkvKiBkZXZpY2UgbmFtZSAqLwogCWNoYXIgdXVpZFtETV9VVUlEX0xFTl07CS8qIHVuaXF1ZSBpZGVudGlmaWVyIGZvcgpAQCAtMTM5LDkgKzEzOSw5IEBACiAgKiBkbV9pb2N0bC4KICAqLwogc3RydWN0IGRtX3RhcmdldF9zcGVjIHsKLQl1aW50NjRfdCBzZWN0b3Jfc3RhcnQ7Ci0JdWludDY0X3QgbGVuZ3RoOwotCWludDMyX3Qgc3RhdHVzOwkJLyogdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBrZXJuZWwgb25seSAqLworCV9fdTY0IHNlY3Rvcl9zdGFydDsKKwlfX3U2NCBsZW5ndGg7CisJX19zMzIgc3RhdHVzOwkJLyogdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBrZXJuZWwgb25seSAqLwogCiAJLyoKIAkgKiBMb2NhdGlvbiBvZiB0aGUgbmV4dCBkbV90YXJnZXRfc3BlYy4KQEAgLTE1Myw3ICsxNTMsNyBAQAogCSAqICAgKHRoYXQgZm9sbG93cyB0aGUgZG1faW9jdGwgc3RydWN0KSB0byB0aGUgc3RhcnQgb2YgdGhlICJuZXh0IgogCSAqICAgZG1fdGFyZ2V0X3NwZWMuCiAJICovCi0JdWludDMyX3QgbmV4dDsKKwlfX3UzMiBuZXh0OwogCiAJY2hhciB0YXJnZXRfdHlwZVtETV9NQVhfVFlQRV9OQU1FXTsKIApAQCAtMTY4LDE3ICsxNjgsMTcgQEAKICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCBkZXBlbmRlbmNpZXMuCiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfZGVwcyB7Ci0JdWludDMyX3QgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KLQl1aW50MzJfdCBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KLQl1aW50NjRfdCBkZXZbMF07CS8qIG91dCAqLworCV9fdTMyIGNvdW50OwkvKiBBcnJheSBzaXplICovCisJX191MzIgcGFkZGluZzsJLyogdW51c2VkICovCisJX191NjQgZGV2WzBdOwkvKiBvdXQgKi8KIH07CiAKIC8qCiAgKiBVc2VkIHRvIGdldCBhIGxpc3Qgb2YgYWxsIGRtIGRldmljZXMuCiAgKi8KIHN0cnVjdCBkbV9uYW1lX2xpc3QgewotCXVpbnQ2NF90IGRldjsKLQl1aW50MzJfdCBuZXh0OwkJLyogb2Zmc2V0IHRvIHRoZSBuZXh0IHJlY29yZCBmcm9tCisJX191NjQgZGV2OworCV9fdTMyIG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KIAkJCQkgICB0aGUgX3N0YXJ0XyBvZiB0aGlzICovCiAJY2hhciBuYW1lWzBdOwogfTsKQEAgLTE4Nyw4ICsxODcsOCBAQAogICogVXNlZCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IHZlcnNpb25zCiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfdmVyc2lvbnMgewotICAgICAgICB1aW50MzJfdCBuZXh0OwotICAgICAgICB1aW50MzJfdCB2ZXJzaW9uWzNdOworICAgICAgICBfX3UzMiBuZXh0OworICAgICAgICBfX3UzMiB2ZXJzaW9uWzNdOwogCiAgICAgICAgIGNoYXIgbmFtZVswXTsKIH07CkBAIC0xOTcsNyArMTk3LDcgQEAKICAqIFVzZWQgdG8gcGFzcyBtZXNzYWdlIHRvIGEgdGFyZ2V0CiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfbXNnIHsKLQl1aW50NjRfdCBzZWN0b3I7CS8qIERldmljZSBzZWN0b3IgKi8KKwlfX3U2NCBzZWN0b3I7CS8qIERldmljZSBzZWN0b3IgKi8KIAogCWNoYXIgbWVzc2FnZVswXTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaAppbmRleCBiYjBkZjJhLi5mZWM2NmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKQEAgLTc2LDcgKzc2LDcgQEAKIH0gYXVkaW9fa2FyYW9rZV90OyAgICAgLyogaW50byBsZWZ0IGFuZCByaWdodCAgKi8KIAogCi10eXBlZGVmIHVpbnQxNl90IGF1ZGlvX2F0dHJpYnV0ZXNfdDsKK3R5cGVkZWYgX191MTYgYXVkaW9fYXR0cmlidXRlc190OwogLyogICBiaXRzOiBkZXNjci4gKi8KIC8qICAgMTUtMTMgYXVkaW8gY29kaW5nIG1vZGUgKDA9YWMzLCAyPW1wZWcxLCAzPW1wZWcyZXh0LCA0PUxQQ00sIDY9RFRTLCAqLwogLyogICAxMiAgICBtdWx0aWNoYW5uZWwgZXh0ZW5zaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oIGIvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaAppbmRleCBiZDQ5YzNlLi4xZDc1MGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAjZGVmaW5lIFZJREVPX1ZTWU5DX0ZJRUxEX1BST0dSRVNTSVZFCSgzKQogCiBzdHJ1Y3QgdmlkZW9fZXZlbnQgewotCWludDMyX3QgdHlwZTsKKwlfX3MzMiB0eXBlOwogI2RlZmluZSBWSURFT19FVkVOVF9TSVpFX0NIQU5HRUQJMQogI2RlZmluZSBWSURFT19FVkVOVF9GUkFNRV9SQVRFX0NIQU5HRUQJMgogI2RlZmluZSBWSURFT19FVkVOVF9ERUNPREVSX1NUT1BQRUQgCTMKICNkZWZpbmUgVklERU9fRVZFTlRfVlNZTkMgCQk0Ci0JdGltZV90IHRpbWVzdGFtcDsKKwlfX2tlcm5lbF90aW1lX3QgdGltZXN0YW1wOwogCXVuaW9uIHsKIAkJdmlkZW9fc2l6ZV90IHNpemU7CiAJCXVuc2lnbmVkIGludCBmcmFtZV9yYXRlOwkvKiBpbiBmcmFtZXMgcGVyIDEwMDBzZWMgKi8KQEAgLTE1NywyNSArMTU3LDI1IEBACiAKIHN0cnVjdCB2aWRlb19zdGlsbF9waWN0dXJlIHsKIAljaGFyIF9fdXNlciAqaUZyYW1lOyAgICAgICAgLyogcG9pbnRlciB0byBhIHNpbmdsZSBpZnJhbWUgaW4gbWVtb3J5ICovCi0JaW50MzJfdCBzaXplOworCV9fczMyIHNpemU7CiB9OwogCiAKIHR5cGVkZWYKIHN0cnVjdCB2aWRlb19oaWdobGlnaHQgewogCWludCAgICAgYWN0aXZlOyAgICAgIC8qICAgIDE9c2hvdyBoaWdobGlnaHQsIDA9aGlkZSBoaWdobGlnaHQgKi8KLQl1aW50OF90IGNvbnRyYXN0MTsgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbnRyYXN0ICovCisJX191OCAgICBjb250cmFzdDE7ICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb250cmFzdCAqLwogCQkJICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbnRyYXN0ICovCi0JdWludDhfdCBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLworCV9fdTggICAgY29udHJhc3QyOyAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29udHJhc3QgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb250cmFzdCAqLwotCXVpbnQ4X3QgY29sb3IxOyAgICAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgKi8KKwlfX3U4ICAgIGNvbG9yMTsgICAgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbG9yICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEJhY2tncm91bmQgcGl4ZWwgY29sb3IgKi8KLQl1aW50OF90IGNvbG9yMjsgICAgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbG9yICovCisJX191OCAgICBjb2xvcjI7ICAgICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb2xvciAqLwogCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbG9yICovCi0JdWludDMyX3QgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLworCV9fdTMyICAgIHlwb3M7ICAgICAgIC8qICAgMjMtMjIgIGF1dG8gYWN0aW9uIG1vZGUgKi8KIAkJCSAgICAgLyogICAyMS0xMiAgc3RhcnQgeSAqLwogCQkJICAgICAvKiAgICA5LSAwICBlbmQgeSAqLwotCXVpbnQzMl90IHhwb3M7ICAgICAgIC8qICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgKi8KKwlfX3UzMiAgICB4cG9zOyAgICAgICAvKiAgIDIzLTIyICBidXR0b24gY29sb3IgbnVtYmVyICovCiAJCQkgICAgIC8qICAgMjEtMTIgIHN0YXJ0IHggKi8KIAkJCSAgICAgLyogICAgOS0gMCAgZW5kIHggKi8KIH0gdmlkZW9faGlnaGxpZ2h0X3Q7CkBAIC0xODksMTcgKzE4OSwxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB2aWRlb19zcHVfcGFsZXR0ZSB7ICAgICAgLyogU1BVIFBhbGV0dGUgaW5mb3JtYXRpb24gKi8KIAlpbnQgbGVuZ3RoOwotCXVpbnQ4X3QgX191c2VyICpwYWxldHRlOworCV9fdTggX191c2VyICpwYWxldHRlOwogfSB2aWRlb19zcHVfcGFsZXR0ZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHZpZGVvX25hdmlfcGFjayB7CiAJaW50IGxlbmd0aDsgICAgICAgICAgLyogMCAuLi4gMTAyNCAqLwotCXVpbnQ4X3QgZGF0YVsxMDI0XTsKKwlfX3U4IGRhdGFbMTAyNF07CiB9IHZpZGVvX25hdmlfcGFja190OwogCiAKLXR5cGVkZWYgdWludDE2X3QgdmlkZW9fYXR0cmlidXRlc190OwordHlwZWRlZiBfX3UxNiB2aWRlb19hdHRyaWJ1dGVzX3Q7CiAvKiAgIGJpdHM6IGRlc2NyLiAqLwogLyogICAxNS0xNCBWaWRlbyBjb21wcmVzc2lvbiBtb2RlICgwPU1QRUctMSwgMT1NUEVHLTIpICovCiAvKiAgIDEzLTEyIFRWIHN5c3RlbSAoMD01MjUvNjAsIDE9NjI1LzUwKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFiZjMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfRFlOQU1JQ19ERUJVR19ICisjZGVmaW5lIF9EWU5BTUlDX0RFQlVHX0gKKworLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAorICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQorICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2V4dGVybiBsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkOworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQyOworCisvKgorICogQW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgY3JlYXRlZCBpbiBhIHNwZWNpYWwKKyAqIEVMRiBzZWN0aW9uIGF0IGV2ZXJ5IGR5bmFtaWMgZGVidWcgY2FsbHNpdGUuICBBdCBydW50aW1lLAorICogdGhlIHNwZWNpYWwgc2VjdGlvbiBpcyB0cmVhdGVkIGFzIGFuIGFycmF5IG9mIHRoZXNlLgorICovCitzdHJ1Y3QgX2RkZWJ1ZyB7CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgdG8gZHJpdmUgdGhlIHVzZXIgaW50ZXJmYWNlCisJICogZm9yIHNlbGVjdGluZyBhbmQgZGlzcGxheWluZyBkZWJ1ZyBjYWxsc2l0ZXMuCisJICovCisJY29uc3QgY2hhciAqbW9kbmFtZTsKKwljb25zdCBjaGFyICpmdW5jdGlvbjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJY2hhciBwcmltYXJ5X2hhc2g7CisJY2hhciBzZWNvbmRhcnlfaGFzaDsKKwl1bnNpZ25lZCBpbnQgbGluZW5vOjI0OworCS8qCisgCSAqIFRoZSBmbGFncyBmaWVsZCBjb250cm9scyB0aGUgYmVoYXZpb3VyIGF0IHRoZSBjYWxsc2l0ZS4KKyAJICogVGhlIGJpdHMgaGVyZSBhcmUgY2hhbmdlZCBkeW5hbWljYWxseSB3aGVuIHRoZSB1c2VyCisgCSAqIHdyaXRlcyBjb21tYW5kcyB0byA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKKwkgKi8KKyNkZWZpbmUgX0RQUklOVEtfRkxBR1NfUFJJTlQgICAoMTw8MCkgIC8qIHByaW50aygpIGEgbWVzc2FnZSB1c2luZyB0aGUgZm9ybWF0ICovCisjZGVmaW5lIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgMAorCXVuc2lnbmVkIGludCBmbGFnczo4OworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisKKworaW50IGRkZWJ1Z19hZGRfbW9kdWxlKHN0cnVjdCBfZGRlYnVnICp0YWIsIHVuc2lnbmVkIGludCBuLAorCQkJCWNvbnN0IGNoYXIgKm1vZG5hbWUpOworCisjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKK2V4dGVybiBpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kX25hbWUpOworCisjZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChkZCkgICh7CSAgICAgXAorCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgXAorCWlmICh1bmxpa2VseSgoZHluYW1pY19kZWJ1Z19lbmFibGVkICYgKDFMTCA8PCBERUJVR19IQVNIKSkgJiYJICAgICBcCisJCQkoZHluYW1pY19kZWJ1Z19lbmFibGVkMiAmICgxTEwgPDwgREVCVUdfSEFTSDIpKSkpICAgXAorCQkJCWlmICh1bmxpa2VseShkZC5mbGFncykpCQkJICAgICBcCisJCQkJCV9fcmV0ID0gMTsJCQkgICAgIFwKKwlfX3JldDsgfSkKKworI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSBkbyB7CQkJCQlcCisJc3RhdGljIHN0cnVjdCBfZGRlYnVnIGRlc2NyaXB0b3IJCQkJXAorCV9fdXNlZAkJCQkJCQkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJXAorCXsgS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fLCBfX0ZJTEVfXywgZm10LCBERUJVR19IQVNILAlcCisJCURFQlVHX0hBU0gyLCBfX0xJTkVfXywgX0RQUklOVEtfRkxBR1NfREVGQVVMVCB9OwlcCisJaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChkZXNjcmlwdG9yKSkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiIgcHJfZm10KGZtdCksCVwKKwkJCQkjI19fVkFfQVJHU19fKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKworI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmbXQsIC4uLikgZG8gewkJCQlcCisJc3RhdGljIHN0cnVjdCBfZGRlYnVnIGRlc2NyaXB0b3IJCQkJXAorCV9fdXNlZAkJCQkJCQkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJXAorCXsgS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fLCBfX0ZJTEVfXywgZm10LCBERUJVR19IQVNILAlcCisJCURFQlVHX0hBU0gyLCBfX0xJTkVfXywgX0RQUklOVEtfRkxBR1NfREVGQVVMVCB9OwlcCisJaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChkZXNjcmlwdG9yKSkJCQkJXAorCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCQkJXAorCQkJCQlLQlVJTERfTU9ETkFNRSAiOiAiIHByX2ZtdChmbXQpLFwKKwkJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1MjhkMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jaWZuZGVmIF9EWU5BTUlDX1BSSU5US19ICi0jZGVmaW5lIF9EWU5BTUlDX1BSSU5US19ICi0KLSNkZWZpbmUgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMgNgotI2RlZmluZSBERUJVR19IQVNIX1RBQkxFX1NJWkUgKDEgPDwgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMpCi0KLSNkZWZpbmUgVFlQRV9CT09MRUFOIDEKLQotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfQUxMIDAKLSNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX05PTkUgMQotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfU09NRSAyCi0KLWV4dGVybiBpbnQgZHluYW1pY19lbmFibGVkOwotCi0vKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCi0gKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5Ci0gKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KLSAqLwotZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkOwotZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkMjsKLQotc3RydWN0IG1vZF9kZWJ1ZyB7Ci0JY2hhciAqbW9kbmFtZTsKLQljaGFyICpsb2dpY2FsX21vZG5hbWU7Ci0JY2hhciAqZmxhZ19uYW1lczsKLQlpbnQgdHlwZTsKLQlpbnQgaGFzaDsKLQlpbnQgaGFzaDI7Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKLQotaW50IHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgY2hhciAqc2hhcmVfbmFtZSwKLQkJCQkJY2hhciAqZmxhZ3MsIGludCBoYXNoLCBpbnQgaGFzaDIpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCi1leHRlcm4gaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUpOwotZXh0ZXJuIGludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZG5hbWUsIGludCB0eXBlLAotCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKTsKLQotI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQobW9kdWxlLCB0eXBlLCB2YWx1ZSwgbGV2ZWwsIGhhc2gpICAoewkgICAgIFwKLQlpbnQgX19yZXQgPSAwOwkJCQkJCQkgICAgIFwKLQlpZiAodW5saWtlbHkoKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJiAoMUxMIDw8IERFQlVHX0hBU0gpKSAmJgkgICAgIFwKLQkJCShkeW5hbWljX3ByaW50a19lbmFibGVkMiAmICgxTEwgPDwgREVCVUdfSEFTSDIpKSkpICAgXAotCQkJX19yZXQgPSBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKG1vZHVsZSwgdHlwZSwgICBcCi0JCQkJCQkJCXZhbHVlLCBoYXNoKTtcCi0JX19yZXQ7IH0pCi0KLSNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgZG8gewkJCQkJICAgIFwKLQlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAotCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCi0Jc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAotCV9fdXNlZAkJCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCi0JeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCi0JaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKLQkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAotCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiIgZm10LAkJICAgIFwKLQkJCQkjI19fVkFfQVJHU19fKTsJCQkJICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7CQkJCSAgICBcCi0Jc3RhdGljIGNoYXIgbW9kX25hbWVbXQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlX3N0cmluZ3MiKSkpCQkJICAgIFwKLQkgPSBLQlVJTERfTU9ETkFNRTsJCQkJCQkgICAgXAotCXN0YXRpYyBzdHJ1Y3QgbW9kX2RlYnVnIGRlc2NyaXB0b3IJCQkJICAgIFwKLQlfX3VzZWQJCQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQkgICAgXAotCXsgbW9kX25hbWUsIG1vZF9uYW1lLCBOVUxMLCBUWVBFX0JPT0xFQU4sIERFQlVHX0hBU0gsIERFQlVHX0hBU0gyIH07XAotCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoS0JVSUxEX01PRE5BTUUsIFRZUEVfQk9PTEVBTiwJCSAgICBcCi0JCQkJCQkwLCAwLCBERUJVR19IQVNIKSkJICAgIFwKLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAkJCSAgICBcCi0JCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgZm9ybWF0LAkgICAgXAotCQkJCQkjI19fVkFfQVJHU19fKTsJCQkgICAgXAotCX0gd2hpbGUgKDApCi0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY29uc3QgY2hhciAqbW9kX25hbWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZG5hbWUsIGludCB0eXBlLAotCQkJCQkJaW50IHZhbHVlLCBpbnQgaGFzaCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQobW9kdWxlLCB0eXBlLCB2YWx1ZSwgbGV2ZWwsIGhhc2gpICAoeyAwOyB9KQotI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmY29yZS5oIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKaW5kZXggNWNhNTRkNy4uNzYwNWM1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKQEAgLTExMSw2ICsxMTEsMTUgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZWxmX2NvcmVfY29weV9rZXJuZWxfcmVncyhlbGZfZ3JlZ3NldF90ICplbGZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX0tFUk5FTF9SRUdTCisJRUxGX0NPUkVfQ09QWV9LRVJORUxfUkVHUygoKmVsZnJlZ3MpLCByZWdzKTsKKyNlbHNlCisJZWxmX2NvcmVfY29weV9yZWdzKGVsZnJlZ3MsIHJlZ3MpOworI2VuZGlmCit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGVsZl9jb3JlX2NvcHlfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCogZWxmcmVncykKIHsKICNpZmRlZiBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCmluZGV4IGNlYjE0NTQuLmVjMTJjYzc0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBTT19FRV9PUklHSU5fTE9DQUwJMQogI2RlZmluZSBTT19FRV9PUklHSU5fSUNNUAkyCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QNgkzCisjZGVmaW5lIFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgNAogCiAjZGVmaW5lIFNPX0VFX09GRkVOREVSKGVlKQkoKHN0cnVjdCBzb2NrYWRkciopKChlZSkrMSkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAppbmRleCAxY2IwZjBiLi5hMWYxN2FiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCkBAIC0xODQsNCArMTg0LDI1IEBACiB9CiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCisvKioKKyAqIGNvbXBhcmVfZXRoZXJfaGVhZGVyIC0gQ29tcGFyZSB0d28gRXRoZXJuZXQgaGVhZGVycworICogQGE6IFBvaW50ZXIgdG8gRXRoZXJuZXQgaGVhZGVyCisgKiBAYjogUG9pbnRlciB0byBFdGhlcm5ldCBoZWFkZXIKKyAqCisgKiBDb21wYXJlIHR3byBldGhlcm5ldCBoZWFkZXJzLCByZXR1cm5zIDAgaWYgZXF1YWwuCisgKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBoZWFkZXIgKGkuZS4sIElQIGhlYWRlcikgaXMgNC1ieXRlCisgKiBhbGlnbmVkIE9SIHRoZSBwbGF0Zm9ybSBjYW4gaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3MuICBUaGlzIGlzIHRoZQorICogY2FzZSBmb3IgYWxsIHBhY2tldHMgY29taW5nIGludG8gbmV0aWZfcmVjZWl2ZV9za2Igb3Igc2ltaWxhcgorICogZW50cnkgcG9pbnRzLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfZXRoZXJfaGVhZGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJdTMyICphMzIgPSAodTMyICopKCh1OCAqKWEgKyAyKTsKKwl1MzIgKmIzMiA9ICh1MzIgKikoKHU4ICopYiArIDIpOworCisJcmV0dXJuICgqKHUxNiAqKWEgXiAqKHUxNiAqKWIpIHwgKGEzMlswXSBeIGIzMlswXSkgfAorCSAgICAgICAoYTMyWzFdIF4gYjMyWzFdKSB8IChhMzJbMl0gXiBiMzJbMl0pOworfQorCiAjZW5kaWYJLyogX0xJTlVYX0VUSEVSREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggMjdjNjdhNS4uMTMxYjEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTcsNiArNyw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgMjAwMiBJbnRlbCAoZWxpLmt1cGVybWFubkBpbnRlbC5jb20sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyaXN0b3BoZXIubGVlY2hAaW50ZWwuY29tLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3R0LmZlbGRtYW5AaW50ZWwuY29tKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSBTdW4gTWljcm9zeXN0ZW1zIDIwMDgKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9FVEhUT09MX0gKQEAgLTI4NywxMCArMjg4LDc1IEBACiAJRVRIX0ZMQUdfTFJPCQk9ICgxIDw8IDE1KSwJLyogTFJPIGlzIGVuYWJsZWQgKi8KIH07CiAKLXN0cnVjdCBldGh0b29sX3J4bmZjIHsKLQlfX3UzMgkJY21kOworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSBmb3Igc3VwcG9ydGluZyBSWCBuZXR3b3JrIGZsb3cKKyAqIGNsYXNzaWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIE5vdGUsIGFsbCBtdWx0aWJ5dGUgZmllbGRzLCBlLmcuLAorICogaXA0c3JjLCBpcDRkc3QsIHBzcmMsIHBkc3QsIHNwaSwgZXRjLiBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gbmV0d29yaworICogYnl0ZSBvcmRlci4KKyAqLworc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMTYJcHNyYzsKKwlfX2JlMTYJcGRzdDsKKwlfX3U4ICAgIHRvczsKK307CisKK3N0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTMyCXNwaTsKKwlfX3U4ICAgIHRvczsKK307CisKK3N0cnVjdCBldGh0b29sX3Jhd2lwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX191OAloZGF0YVs2NF07Cit9OworCitzdHJ1Y3QgZXRodG9vbF9ldGhlcl9zcGVjIHsKKwlfX2JlMTYJZXRoZXJfdHlwZTsKKwlfX3U4CWZyYW1lX3NpemU7CisJX191OAllZnJhbWVbMTZdOworfTsKKworI2RlZmluZQlFVEhfUlhfTkZDX0lQNAkxCisjZGVmaW5lCUVUSF9SWF9ORkNfSVA2CTIKKworc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMzIJbDRfNF9ieXRlczsKKwlfX3U4ICAgIHRvczsKKwlfX3U4ICAgIGlwX3ZlcjsKKwlfX3U4ICAgIHByb3RvOworfTsKKworc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAlfX3UzMgkJZmxvd190eXBlOwotCV9fdTY0CQlkYXRhOworCXVuaW9uIHsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfcmF3aXA0X3NwZWMJCXJhd19pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfZXRoZXJfc3BlYwkJZXRoZXJfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKKwkJX191OAkJCQkJaGRhdGFbNjRdOworCX0gaF91LCBtX3U7IC8qIGVudHJ5LCBtYXNrICovCisJX191NjQJCXJpbmdfY29va2llOworCV9fdTMyCQlsb2NhdGlvbjsKK307CisKK3N0cnVjdCBldGh0b29sX3J4bmZjIHsKKwlfX3UzMgkJCQljbWQ7CisJX191MzIJCQkJZmxvd190eXBlOworCS8qIFRoZSByeCBmbG93IGhhc2ggdmFsdWUgb3IgdGhlIHJ1bGUgREIgc2l6ZSAqLworCV9fdTY0CQkJCWRhdGE7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjCWZzOworCV9fdTMyCQkJCXJ1bGVfY250OworCV9fdTMyCQkJCXJ1bGVfbG9jc1swXTsKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC00MTcsOCArNDgzLDggQEAKIAkvKiB0aGUgZm9sbG93aW5nIGhvb2tzIGFyZSBvYnNvbGV0ZSAqLwogCWludAkoKnNlbGZfdGVzdF9jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7LyogdXNlIGdldF9zc2V0X2NvdW50ICovCiAJaW50CSgqZ2V0X3N0YXRzX2NvdW50KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsvKiB1c2UgZ2V0X3NzZXRfY291bnQgKi8KLQlpbnQJKCpnZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKLQlpbnQJKCpzZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKKwlpbnQJKCpnZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICosIHZvaWQgKik7CisJaW50CSgqc2V0X3J4bmZjKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKIH07CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCkBAIC00NjksNiArNTM1LDEyIEBACiAjZGVmaW5lCUVUSFRPT0xfU1JYRkgJCTB4MDAwMDAwMmEgLyogU2V0IFJYIGZsb3cgaGFzaCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEVUSFRPT0xfR0dSTwkJMHgwMDAwMDAyYiAvKiBHZXQgR1JPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KICNkZWZpbmUgRVRIVE9PTF9TR1JPCQkweDAwMDAwMDJjIC8qIFNldCBHUk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZQlFVEhUT09MX0dSWFJJTkdTCTB4MDAwMDAwMmQgLyogR2V0IFJYIHJpbmdzIGF2YWlsYWJsZSBmb3IgTEIgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSTENOVAkweDAwMDAwMDJlIC8qIEdldCBSWCBjbGFzcyBydWxlIGNvdW50ICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUlVMRQkweDAwMDAwMDJmIC8qIEdldCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUkxBTEwJMHgwMDAwMDAzMCAvKiBHZXQgYWxsIFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9TUlhDTFNSTERFTAkweDAwMDAwMDMxIC8qIERlbGV0ZSBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxJTlMJMHgwMDAwMDAzMiAvKiBJbnNlcnQgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCkBAIC01NjUsOSArNjM3LDEzIEBACiAjZGVmaW5lCVVEUF9WNl9GTE9XCTB4MDYKICNkZWZpbmUJU0NUUF9WNl9GTE9XCTB4MDcKICNkZWZpbmUJQUhfRVNQX1Y2X0ZMT1cJMHgwOAorI2RlZmluZQlBSF9WNF9GTE9XCTB4MDkKKyNkZWZpbmUJRVNQX1Y0X0ZMT1cJMHgwYQorI2RlZmluZQlBSF9WNl9GTE9XCTB4MGIKKyNkZWZpbmUJRVNQX1Y2X0ZMT1cJMHgwYworI2RlZmluZQlJUF9VU0VSX0ZMT1cJMHgwZAogCiAvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KLSNkZWZpbmUJUlhIX0RFVl9QT1JUCSgxIDw8IDApCiAjZGVmaW5lCVJYSF9MMkRBCSgxIDw8IDEpCiAjZGVmaW5lCVJYSF9WTEFOCSgxIDw8IDIpCiAjZGVmaW5lCVJYSF9MM19QUk9UTwkoMSA8PCAzKQpAQCAtNTc3LDUgKzY1Myw2IEBACiAjZGVmaW5lCVJYSF9MNF9CXzJfMwkoMSA8PCA3KSAvKiBkc3QgcG9ydCBpbiBjYXNlIG9mIFRDUC9VRFAvU0NUUCAqLwogI2RlZmluZQlSWEhfRElTQ0FSRAkoMSA8PCAzMSkKIAorI2RlZmluZQlSWF9DTFNfRkxPV19ESVNDCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAogCiAjZW5kaWYgLyogX0xJTlVYX0VUSFRPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaCBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKaW5kZXggZjFlMWQzYy4uZjY4NTZhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZXZlbnRwb2xsX2luaXRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlJTklUX0xJU1RfSEVBRCgmZmlsZS0+Zl9lcF9saW5rcyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZpbGUtPmZfZXBfbG9jayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCA0ZDA3OGU5Li5jNmIzY2EzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMjUsMTAgKzI1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KIAotI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJMHgwMAotI2RlZmluZSBGV19DREVWX0VWRU5UX1JFU1BPTlNFCQkweDAxCi0jZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVRVUVTVAkJMHgwMgotI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJMHgwMworI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJCTB4MDAKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVNQT05TRQkJCTB4MDEKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVFVRVNUCQkJMHgwMgorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJCTB4MDMKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVECTB4MDQKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQJMHgwNQogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiAtIENvbW1vbiBwYXJ0IG9mIGFsbCBmd19jZGV2X2V2ZW50XyB0eXBlcwpAQCAtMTM2LDcgKzEzOCwyNCBAQAogICogVGhpcyBldmVudCBpcyBzZW50IHdoZW4gdGhlIGNvbnRyb2xsZXIgaGFzIGNvbXBsZXRlZCBhbiAmZndfY2Rldl9pc29fcGFja2V0CiAgKiB3aXRoIHRoZSAlRldfQ0RFVl9JU09fSU5URVJSVVBUIGJpdCBzZXQuICBJbiB0aGUgcmVjZWl2ZSBjYXNlLCB0aGUgaGVhZGVycwogICogc3RyaXBwZWQgb2YgYWxsIHBhY2tldHMgdXAgdW50aWwgYW5kIGluY2x1ZGluZyB0aGUgaW50ZXJydXB0IHBhY2tldCBhcmUKLSAqIHJldHVybmVkIGluIHRoZSBAaGVhZGVyIGZpZWxkLgorICogcmV0dXJuZWQgaW4gdGhlIEBoZWFkZXIgZmllbGQuICBUaGUgYW1vdW50IG9mIGhlYWRlciBkYXRhIHBlciBwYWNrZXQgaXMgYXMKKyAqIHNwZWNpZmllZCBhdCBpc28gY29udGV4dCBjcmVhdGlvbiBieSAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUuCisgKgorICogSW4gdmVyc2lvbiAxIG9mIHRoaXMgQUJJLCBoZWFkZXIgZGF0YSBjb25zaXN0ZWQgb2YgdGhlIDEzOTQgaXNvY2hyb25vdXMKKyAqIHBhY2tldCBoZWFkZXIsIGZvbGxvd2VkIGJ5IHF1YWRsZXRzIGZyb20gdGhlIHBhY2tldCBwYXlsb2FkIGlmCisgKiAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgPiA0LgorICoKKyAqIEluIHZlcnNpb24gMiBvZiB0aGlzIEFCSSwgaGVhZGVyIGRhdGEgY29uc2lzdCBvZiB0aGUgMTM5NCBpc29jaHJvbm91cworICogcGFja2V0IGhlYWRlciwgZm9sbG93ZWQgYnkgYSB0aW1lc3RhbXAgcXVhZGxldCBpZgorICogJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplID4gNCwgZm9sbG93ZWQgYnkgcXVhZGxldHMgZnJvbSB0aGUKKyAqIHBhY2tldCBwYXlsb2FkIGlmICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSA+IDguCisgKgorICogQmVoYXZpb3VyIG9mIHZlci4gMSBvZiB0aGlzIEFCSSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIHNpbmNlIEFCSSB2ZXIuIDIuCisgKgorICogRm9ybWF0IG9mIDEzOTQgaXNvIHBhY2tldCBoZWFkZXI6IDE2IGJpdHMgbGVuLCAyIGJpdHMgdGFnLCA2IGJpdHMgY2hhbm5lbCwKKyAqIDQgYml0cyB0Y29kZSwgNCBiaXRzIHN5LCBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuICBGb3JtYXQgb2YgdGltZXN0YW1wOgorICogMTYgYml0cyBpbnZhbGlkLCAzIGJpdHMgY3ljbGVTZWNvbmRzLCAxMyBiaXRzIGN5Y2xlQ291bnQsIGluIGJpZyBlbmRpYW4gYnl0ZQorICogb3JkZXIuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgewogCV9fdTY0IGNsb3N1cmU7CkBAIC0xNDcsMTIgKzE2Niw0NCBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29fcmVzb3VyY2UgLSBJc28gcmVzb3VyY2VzIHdlcmUgYWxsb2NhdGVkIG9yIGZyZWVkCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsKKyAqCQlzZXQgYnkgJUZXX0NERVZfSU9DXyhERSlBTExPQ0FURV9JU09fUkVTT1VSQ0UoX09OQ0UpIGlvY3RsCisgKiBAdHlwZToJJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRCBvcgorICoJCSVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRAorICogQGhhbmRsZToJUmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGFsbG9jYXRlZCByZXNvdXJjZSBjYW4gYmUgZGVhbGxvY2F0ZWQKKyAqIEBjaGFubmVsOglJc29jaHJvbm91cyBjaGFubmVsIHdoaWNoIHdhcyAoZGUpYWxsb2NhdGVkLCBpZiBhbnkKKyAqIEBiYW5kd2lkdGg6CUJhbmR3aWR0aCBhbGxvY2F0aW9uIHVuaXRzIHdoaWNoIHdlcmUgKGRlKWFsbG9jYXRlZCwgaWYgYW55CisgKgorICogQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRCBldmVudCBpcyBzZW50IGFmdGVyIGFuIGlzb2Nocm9ub3VzCisgKiByZXNvdXJjZSB3YXMgYWxsb2NhdGVkIGF0IHRoZSBJUk0uICBUaGUgY2xpZW50IGhhcyB0byBjaGVjayBAY2hhbm5lbCBhbmQKKyAqIEBiYW5kd2lkdGggZm9yIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gYWN0dWFsbHkgc3VjY2VlZGVkLgorICoKKyAqIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRCBldmVudCBpcyBzZW50IGFmdGVyIGFuIGlzb2Nocm9ub3VzCisgKiByZXNvdXJjZSB3YXMgZGVhbGxvY2F0ZWQgYXQgdGhlIElSTS4gIEl0IGlzIGFsc28gc2VudCB3aGVuIGF1dG9tYXRpYworICogcmVhbGxvY2F0aW9uIGFmdGVyIGEgYnVzIHJlc2V0IGZhaWxlZC4KKyAqCisgKiBAY2hhbm5lbCBpcyA8MCBpZiBubyBjaGFubmVsIHdhcyAoZGUpYWxsb2NhdGVkIG9yIGlmIHJlYWxsb2NhdGlvbiBmYWlsZWQuCisgKiBAYmFuZHdpZHRoIGlzIDAgaWYgbm8gYmFuZHdpZHRoIHdhcyAoZGUpYWxsb2NhdGVkIG9yIGlmIHJlYWxsb2NhdGlvbiBmYWlsZWQuCisgKi8KK3N0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZSB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGhhbmRsZTsKKwlfX3MzMiBjaGFubmVsOworCV9fczMyIGJhbmR3aWR0aDsKK307CisKKy8qKgogICogdW5pb24gZndfY2Rldl9ldmVudCAtIENvbnZlbmllbmNlIHVuaW9uIG9mIGZ3X2NkZXZfZXZlbnRfIHR5cGVzCiAgKiBAY29tbW9uOiAgICAgICAgVmFsaWQgZm9yIGFsbCB0eXBlcwogICogQGJ1c19yZXNldDogICAgIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9CVVNfUkVTRVQKICAqIEByZXNwb25zZTogICAgICBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfUkVTUE9OU0UKICAqIEByZXF1ZXN0OiAgICAgICBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfUkVRVUVTVAogICogQGlzb19pbnRlcnJ1cHQ6IFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUCisgKiBAaXNvX3Jlc291cmNlOiAgVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIG9yCisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQKICAqCiAgKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYW4KICAqIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBjaGFyIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIKQEAgLTE2MywzMyArMjE0LDQ3IEBACiAgKiBub3QgZml0IHdpbGwgYmUgZGlzY2FyZGVkIHNvIHRoYXQgdGhlIG5leHQgcmVhZCgyKSB3aWxsIHJldHVybiBhIG5ldyBldmVudC4KICAqLwogdW5pb24gZndfY2Rldl9ldmVudCB7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uIGNvbW1vbjsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgYnVzX3Jlc2V0OwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlIHJlc3BvbnNlOwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QgcmVxdWVzdDsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0IGlzb19pbnRlcnJ1cHQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uCQljb21tb247CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0CQlidXNfcmVzZXQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UJCXJlc3BvbnNlOworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QJCXJlcXVlc3Q7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdAlpc29faW50ZXJydXB0OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZQlpc29fcmVzb3VyY2U7CiB9OwogCi0jZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9JTkZPCQlfSU9XUignIycsIDB4MDAsIHN0cnVjdCBmd19jZGV2X2dldF9pbmZvKQotI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1JFUVVFU1QJX0lPVygnIycsIDB4MDEsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfQUxMT0NBVEUJCV9JT1dSKCcjJywgMHgwMiwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUpCi0jZGVmaW5lIEZXX0NERVZfSU9DX0RFQUxMT0NBVEUJCV9JT1coJyMnLCAweDAzLCBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlKQotI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFCV9JT1coJyMnLCAweDA0LCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlKQotI2RlZmluZSBGV19DREVWX0lPQ19JTklUSUFURV9CVVNfUkVTRVQJX0lPVygnIycsIDB4MDUsIHN0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldCkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfQUREX0RFU0NSSVBUT1IJX0lPV1IoJyMnLCAweDA2LCBzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvcikKLSNkZWZpbmUgRldfQ0RFVl9JT0NfUkVNT1ZFX0RFU0NSSVBUT1IJX0lPVygnIycsIDB4MDcsIHN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yKQorLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4yMiAqLworI2RlZmluZSBGV19DREVWX0lPQ19HRVRfSU5GTyAgICAgICAgICAgX0lPV1IoJyMnLCAweDAwLCBzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9SRVFVRVNUICAgICAgICBfSU9XKCcjJywgMHgwMSwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0KQorI2RlZmluZSBGV19DREVWX0lPQ19BTExPQ0FURSAgICAgICAgICAgX0lPV1IoJyMnLCAweDAyLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfREVBTExPQ0FURSAgICAgICAgICBfSU9XKCcjJywgMHgwMywgc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9SRVNQT05TRSAgICAgICBfSU9XKCcjJywgMHgwNCwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfSU5JVElBVEVfQlVTX1JFU0VUICBfSU9XKCcjJywgMHgwNSwgc3RydWN0IGZ3X2NkZXZfaW5pdGlhdGVfYnVzX3Jlc2V0KQorI2RlZmluZSBGV19DREVWX0lPQ19BRERfREVTQ1JJUFRPUiAgICAgX0lPV1IoJyMnLCAweDA2LCBzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvcikKKyNkZWZpbmUgRldfQ0RFVl9JT0NfUkVNT1ZFX0RFU0NSSVBUT1IgICBfSU9XKCcjJywgMHgwNywgc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IpCisjZGVmaW5lIEZXX0NERVZfSU9DX0NSRUFURV9JU09fQ09OVEVYVCBfSU9XUignIycsIDB4MDgsIHN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfUVVFVUVfSVNPICAgICAgICAgIF9JT1dSKCcjJywgMHgwOSwgc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvKQorI2RlZmluZSBGV19DREVWX0lPQ19TVEFSVF9JU08gICAgICAgICAgIF9JT1coJyMnLCAweDBhLCBzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28pCisjZGVmaW5lIEZXX0NERVZfSU9DX1NUT1BfSVNPICAgICAgICAgICAgX0lPVygnIycsIDB4MGIsIHN0cnVjdCBmd19jZGV2X3N0b3BfaXNvKQogCi0jZGVmaW5lIEZXX0NERVZfSU9DX0NSRUFURV9JU09fQ09OVEVYVAlfSU9XUignIycsIDB4MDgsIHN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfUVVFVUVfSVNPCQlfSU9XUignIycsIDB4MDksIHN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbykKLSNkZWZpbmUgRldfQ0RFVl9JT0NfU1RBUlRfSVNPCQlfSU9XKCcjJywgMHgwYSwgc3RydWN0IGZ3X2NkZXZfc3RhcnRfaXNvKQotI2RlZmluZSBGV19DREVWX0lPQ19TVE9QX0lTTwkJX0lPVygnIycsIDB4MGIsIHN0cnVjdCBmd19jZGV2X3N0b3BfaXNvKQotI2RlZmluZSBGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIJX0lPUignIycsIDB4MGMsIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcikKKy8qIGF2YWlsYWJsZSBzaW5jZSBrZXJuZWwgdmVyc2lvbiAyLjYuMjQgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSICAgICBfSU9SKCcjJywgMHgwYywgc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyKQogCi0vKiBGV19DREVWX1ZFUlNJT04gSGlzdG9yeQotICoKLSAqIDEJRmViIDE4LCAyMDA3OiAgSW5pdGlhbCB2ZXJzaW9uLgorLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4zMCAqLworI2RlZmluZSBGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0UgICAgICAgX0lPV1IoJyMnLCAweDBkLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UpCisjZGVmaW5lIEZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFICAgICAgX0lPVygnIycsIDB4MGUsIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUpCisjZGVmaW5lIEZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFICAgX0lPVygnIycsIDB4MGYsIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSBfSU9XKCcjJywgMHgxMCwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlKQorI2RlZmluZSBGV19DREVWX0lPQ19HRVRfU1BFRUQgICAgICAgICAgICAgICAgICAgICBfSU8oJyMnLCAweDExKSAvKiByZXR1cm5zIHNwZWVkIGNvZGUgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9CUk9BRENBU1RfUkVRVUVTVCAgICAgICBfSU9XKCcjJywgMHgxMiwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0KQorI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1NUUkVBTV9QQUNLRVQgICAgICAgICAgIF9JT1coJyMnLCAweDEzLCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQpCisKKy8qCisgKiBGV19DREVWX1ZFUlNJT04gSGlzdG9yeQorICogIDEgICgyLjYuMjIpICAtIGluaXRpYWwgdmVyc2lvbgorICogIDIgICgyLjYuMzApICAtIGNoYW5nZWQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdC5oZWFkZXIgaWYKKyAqICAgICAgICAgICAgICAgICAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgaXMgOCBvciBtb3JlCiAgKi8KLSNkZWZpbmUgRldfQ0RFVl9WRVJTSU9OCQkxCisjZGVmaW5lIEZXX0NERVZfVkVSU0lPTiAyCiAKIC8qKgogICogc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8gLSBHZW5lcmFsIHB1cnBvc2UgaW5mb3JtYXRpb24gaW9jdGwKQEAgLTIwMSw3ICsyNjYsNyBAQAogICoJCWNhc2UsIEByb21fbGVuZ3RoIGlzIHVwZGF0ZWQgd2l0aCB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUKICAqCQljb25maWd1cmF0aW9uIFJPTS4KICAqIEByb206CUlmIG5vbi16ZXJvLCBhZGRyZXNzIG9mIGEgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBhIGNvcHkgb2YgdGhlCi0gKgkJbG9jYWwgbm9kZSdzIGNvbmZpZ3VyYXRpb24gUk9NCisgKgkJZGV2aWNlJ3MgY29uZmlndXJhdGlvbiBST00KICAqIEBidXNfcmVzZXQ6CUlmIG5vbi16ZXJvLCBhZGRyZXNzIG9mIGEgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBhCiAgKgkJJnN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlCiAgKgkJb2YgdGhlIGJ1cy4gIFRoaXMgZG9lcyBub3QgY2F1c2UgYSBidXMgcmVzZXQgdG8gaGFwcGVuLgpAQCAtMjI5LDcgKzI5NCw3IEBACiAgKiBTZW5kIGEgcmVxdWVzdCB0byB0aGUgZGV2aWNlLiAgVGhpcyBpb2N0bCBpbXBsZW1lbnRzIGFsbCBvdXRnb2luZyByZXF1ZXN0cy4KICAqIEJvdGggcXVhZGxldCBhbmQgYmxvY2sgcmVxdWVzdCBzcGVjaWZ5IHRoZSBwYXlsb2FkIGFzIGEgcG9pbnRlciB0byB0aGUgZGF0YQogICogaW4gdGhlIEBkYXRhIGZpZWxkLiAgT25jZSB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGVzLCB0aGUga2VybmVsIHdyaXRlcyBhbgotICogJmZ3X2NkZXZfZXZlbnRfcmVxdWVzdCBldmVudCBiYWNrLiAgVGhlIEBjbG9zdXJlIGZpZWxkIGlzIHBhc3NlZCBiYWNrIHRvCisgKiAmZndfY2Rldl9ldmVudF9yZXNwb25zZSBldmVudCBiYWNrLiAgVGhlIEBjbG9zdXJlIGZpZWxkIGlzIHBhc3NlZCBiYWNrIHRvCiAgKiB1c2VyIHNwYWNlIGluIHRoZSByZXNwb25zZSBldmVudC4KICAqLwogc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0IHsKQEAgLTI4NCw5ICszNDksOSBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlIC0gRnJlZSBhbiBhZGRyZXNzIHJhbmdlIGFsbG9jYXRpb24KLSAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWRkcmVzcyByYW5nZSwgYXMgcmV0dXJuZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRoZQotICoJCXJhbmdlIHdhcyBhbGxvY2F0ZWQKKyAqIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgLSBGcmVlIGEgQ1NSIGFkZHJlc3MgcmFuZ2Ugb3IgaXNvY2hyb25vdXMgcmVzb3VyY2UKKyAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWRkcmVzcyByYW5nZSBvciBpc28gcmVzb3VyY2UsIGFzIHJldHVybmVkIGJ5IHRoZQorICoJCWtlcm5lbCB3aGVuIHRoZSByYW5nZSBvciByZXNvdXJjZSB3YXMgYWxsb2NhdGVkCiAgKi8KIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgewogCV9fdTMyIGhhbmRsZTsKQEAgLTMyOSw2ICszOTQsOSBAQAogICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGtlcm5lbCBhZGRzIHRoZSBkZXNjcmlwdG9yIGFuZCB3cml0ZXMgYmFjayBhIGhhbmRsZSB0byB0aGUKICAqIGtlcm5lbC1zaWRlIG9iamVjdCB0byBiZSB1c2VkIGZvciBsYXRlciByZW1vdmFsIG9mIHRoZSBkZXNjcmlwdG9yIGJsb2NrIGFuZAogICogaW1tZWRpYXRlIGtleS4KKyAqCisgKiBUaGlzIGlvY3RsIGFmZmVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gUk9NcyBvZiBhbGwgbG9jYWwgbm9kZXMuCisgKiBUaGUgaW9jdGwgb25seSBzdWNjZWVkcyBvbiBkZXZpY2UgZmlsZXMgd2hpY2ggcmVwcmVzZW50IGEgbG9jYWwgbm9kZS4KICAqLwogc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IgewogCV9fdTMyIGltbWVkaWF0ZTsKQEAgLTM0NCw3ICs0MTIsNyBAQAogICoJCWRlc2NyaXB0b3Igd2FzIGFkZGVkCiAgKgogICogUmVtb3ZlIGEgZGVzY3JpcHRvciBibG9jayBhbmQgYWNjb21wYW55aW5nIGltbWVkaWF0ZSBrZXkgZnJvbSB0aGUgbG9jYWwKLSAqIG5vZGUncyBjb25maWd1cmF0aW9uIFJPTS4KKyAqIG5vZGVzJyBjb25maWd1cmF0aW9uIFJPTXMuCiAgKi8KIHN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yIHsKIAlfX3UzMiBoYW5kbGU7CkBAIC0zNzAsNiArNDM4LDkgQEAKICAqCiAgKiBJZiBhIGNvbnRleHQgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLCB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGEgaGFuZGxlIHRvIHRoZQogICogY29udGV4dCwgd2hpY2ggbXVzdCBiZSBwYXNzZWQgaW4gZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBvbiB0aGF0IGNvbnRleHQuCisgKgorICogTm90ZSB0aGF0IHRoZSBlZmZlY3Qgb2YgYSBAaGVhZGVyX3NpemUgPiA0IGRlcGVuZHMgb24KKyAqICZmd19jZGV2X2dldF9pbmZvLnZlcnNpb24sIGFzIGRvY3VtZW50ZWQgYXQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdC4KICAqLwogc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0IHsKIAlfX3UzMiB0eXBlOwpAQCAtNDczLDEwICs1NDQsOTEgQEAKICAqIFRoZSAlRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSIGlvY3RsIHJlYWRzIHRoZSBpc29jaHJvbm91cyBjeWNsZSB0aW1lcgogICogYW5kIGFsc28gdGhlIHN5c3RlbSBjbG9jay4gIFRoaXMgYWxsb3dzIHRvIGV4cHJlc3MgdGhlIHJlY2VpdmUgdGltZSBvZiBhbgogICogaXNvY2hyb25vdXMgcGFja2V0IGFzIGEgc3lzdGVtIHRpbWUgd2l0aCBtaWNyb3NlY29uZCBhY2N1cmFjeS4KKyAqCisgKiBAY3ljbGVfdGltZXIgY29uc2lzdHMgb2YgNyBiaXRzIGN5Y2xlU2Vjb25kcywgMTMgYml0cyBjeWNsZUNvdW50LCBhbmQKKyAqIDEyIGJpdHMgY3ljbGVPZmZzZXQsIGluIGhvc3QgYnl0ZSBvcmRlci4KICAqLwogc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyIHsKIAlfX3U2NCBsb2NhbF90aW1lOwogCV9fdTMyIGN5Y2xlX3RpbWVyOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgLSAoRGUpYWxsb2NhdGUgYSBjaGFubmVsIG9yIGJhbmR3aWR0aAorICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiBjb3JyZXBvbmRpbmcgaXNvIHJlc291cmNlIGV2ZW50cworICogQGNoYW5uZWxzOglJc29jaHJvbm91cyBjaGFubmVscyBvZiB3aGljaCBvbmUgaXMgdG8gYmUgKGRlKWFsbG9jYXRlZAorICogQGJhbmR3aWR0aDoJSXNvY2hyb25vdXMgYmFuZHdpZHRoIHVuaXRzIHRvIGJlIChkZSlhbGxvY2F0ZWQKKyAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWxsb2NhdGlvbiwgd3JpdHRlbiBieSB0aGUga2VybmVsIChvbmx5IHZhbGlkIGluCisgKgkJY2FzZSBvZiAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFIGlvY3RscykKKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRSBpb2N0bCBpbml0aWF0ZXMgYWxsb2NhdGlvbiBvZiBhbgorICogaXNvY2hyb25vdXMgY2hhbm5lbCBhbmQvb3Igb2YgaXNvY2hyb25vdXMgYmFuZHdpZHRoIGF0IHRoZSBpc29jaHJvbm91cworICogcmVzb3VyY2UgbWFuYWdlciAoSVJNKS4gIE9ubHkgb25lIG9mIHRoZSBjaGFubmVscyBzcGVjaWZpZWQgaW4gQGNoYW5uZWxzIGlzCisgKiBhbGxvY2F0ZWQuICBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIGlzIHNlbnQgYWZ0ZXIKKyAqIGNvbW11bmljYXRpb24gd2l0aCB0aGUgSVJNLCBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbiB0aGUgZXZlbnQgZGF0YS4KKyAqIFRoZSBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYWxsb2NhdGUgdGhlIHJlc291cmNlcyBhZnRlciBidXMgcmVzZXRzLgorICogU2hvdWxkIGEgcmVhbGxvY2F0aW9uIGZhaWwsIGFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRCBldmVudAorICogd2lsbCBiZSBzZW50LiAgVGhlIGtlcm5lbCB3aWxsIGFsc28gYXV0b21hdGljYWxseSBkZWFsbG9jYXRlIHRoZSByZXNvdXJjZXMKKyAqIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQuCisgKgorICogVGhlICVGV19DREVWX0lPQ19ERUFMTE9DQVRFX0lTT19SRVNPVVJDRSBpb2N0bCBjYW4gYmUgdXNlZCB0byBpbml0aWF0ZQorICogZGVhbGxvY2F0aW9uIG9mIHJlc291cmNlcyB3aGljaCB3ZXJlIGFsbG9jYXRlZCBhcyBkZXNjcmliZWQgYWJvdmUuCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQgZXZlbnQgY29uY2x1ZGVzIHRoaXMgb3BlcmF0aW9uLgorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgaW9jdGwgaXMgYSB2YXJpYW50IG9mIGFsbG9jYXRpb24KKyAqIHdpdGhvdXQgYXV0b21hdGljIHJlLSBvciBkZWFsbG9jYXRpb24uCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIGV2ZW50IGNvbmNsdWRlcyB0aGlzIG9wZXJhdGlvbiwKKyAqIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIGluIGl0cyBkYXRhLgorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSBpb2N0bCB3b3JrcyBsaWtlCisgKiAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgZXhjZXB0IHRoYXQgcmVzb3VyY2VzIGFyZSBmcmVlZAorICogaW5zdGVhZCBvZiBhbGxvY2F0ZWQuCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQgZXZlbnQgY29uY2x1ZGVzIHRoaXMgb3BlcmF0aW9uLgorICoKKyAqIFRvIHN1bW1hcml6ZSwgJUZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFIGFsbG9jYXRlcyBpc28gcmVzb3VyY2VzCisgKiBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBmZCBvciBoYW5kbGUuCisgKiBJbiBjb250cmFzdCwgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIGFsbG9jYXRlcyBpc28gcmVzb3VyY2VzCisgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgYnVzIGdlbmVyYXRpb24uCisgKgorICogQGNoYW5uZWxzIGlzIGEgaG9zdC1lbmRpYW4gYml0ZmllbGQgd2l0aCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgKiByZXByZXNlbnRpbmcgY2hhbm5lbCAwIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcmVwcmVzZW50aW5nIGNoYW5uZWwgNjM6CisgKiAxVUxMIDw8IGMgZm9yIGVhY2ggY2hhbm5lbCBjIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIChkZSlhbGxvY2F0aW9uLgorICoKKyAqIEBiYW5kd2lkdGggaXMgZXhwcmVzc2VkIGluIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHVuaXRzLCBpLmUuIHRoZSB0aW1lIHRvIHNlbmQKKyAqIG9uZSBxdWFkbGV0IG9mIGRhdGEgKHBheWxvYWQgb3IgaGVhZGVyIGRhdGEpIGF0IHNwZWVkIFMxNjAwLgorICovCitzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgeworCV9fdTY0IGNsb3N1cmU7CisJX191NjQgY2hhbm5lbHM7CisJX191MzIgYmFuZHdpZHRoOworCV9fdTMyIGhhbmRsZTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0IC0gc2VuZCBhbiBhc3luY2hyb25vdXMgc3RyZWFtIHBhY2tldAorICogQGxlbmd0aDoJTGVuZ3RoIG9mIG91dGdvaW5nIHBheWxvYWQsIGluIGJ5dGVzCisgKiBAdGFnOglEYXRhIGZvcm1hdCB0YWcKKyAqIEBjaGFubmVsOglJc29jaHJvbm91cyBjaGFubmVsIHRvIHRyYW5zbWl0IHRvCisgKiBAc3k6CQlTeW5jaHJvbml6YXRpb24gY29kZQorICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiB0aGUgcmVzcG9uc2UgZXZlbnQKKyAqIEBkYXRhOglVc2Vyc3BhY2UgcG9pbnRlciB0byBwYXlsb2FkCisgKiBAZ2VuZXJhdGlvbjoJVGhlIGJ1cyBnZW5lcmF0aW9uIHdoZXJlIHBhY2tldCBpcyB2YWxpZAorICogQHNwZWVkOglTcGVlZCB0byB0cmFuc21pdCBhdAorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUIGlvY3RsIHNlbmRzIGFuIGFzeW5jaHJvbm91cyBzdHJlYW0gcGFja2V0CisgKiB0byBldmVyeSBkZXZpY2Ugd2hpY2ggaXMgbGlzdGVuaW5nIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4gIFRoZSBrZXJuZWwKKyAqIHdyaXRlcyBhbiAmZndfY2Rldl9ldmVudF9yZXNwb25zZSBldmVudCB3aGljaCBpbmRpY2F0ZXMgc3VjY2VzcyBvciBmYWlsdXJlIG9mCisgKiB0aGUgdHJhbnNtaXNzaW9uLgorICovCitzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQgeworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiB0YWc7CisJX191MzIgY2hhbm5lbDsKKwlfX3UzMiBzeTsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTY0IGRhdGE7CisJX191MzIgZ2VuZXJhdGlvbjsKKwlfX3UzMiBzcGVlZDsKK307CisKICNlbmRpZiAvKiBfTElOVVhfRklSRVdJUkVfQ0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggOTI3MzRjMC4uNDI0MzZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTQxLDYgKzE0MSw3IEBACiAjZGVmaW5lIE1TX1JFTEFUSU1FCSgxPDwyMSkJLyogVXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lLiAqLwogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KKyNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCiAjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCiAKQEAgLTg0OCw2ICs4NDksNyBAQAogI2RlZmluZSBmX2RlbnRyeQlmX3BhdGguZGVudHJ5CiAjZGVmaW5lIGZfdmZzbW50CWZfcGF0aC5tbnQKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOworCXNwaW5sb2NrX3QJCWZfbG9jazsgIC8qIGZfZXBfbGlua3MsIGZfZmxhZ3MgKi8KIAlhdG9taWNfbG9uZ190CQlmX2NvdW50OwogCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7CiAJZm1vZGVfdAkJCWZfbW9kZTsKQEAgLTg2Niw3ICs4NjgsNiBAQAogI2lmZGVmIENPTkZJR19FUE9MTAogCS8qIFVzZWQgYnkgZnMvZXZlbnRwb2xsLmMgdG8gbGluayBhbGwgdGhlIGhvb2tzIHRvIHRoaXMgZmlsZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZl9lcF9saW5rczsKLQlzcGlubG9ja190CQlmX2VwX2xvY2s7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19FUE9MTCAqLwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSpmX21hcHBpbmc7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQKQEAgLTEwNjMsMzQgKzEwNjQsMTQ3IEBACiBleHRlcm4gaW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gaW50IGxvY2tfbWF5X3dyaXRlKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogI2Vsc2UgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KLSNkZWZpbmUgZmNudGxfZ2V0bGsoYSwgYikgKHsgLUVJTlZBTDsgfSkKLSNkZWZpbmUgZmNudGxfc2V0bGsoYSwgYiwgYywgZCkgKHsgLUVBQ0NFUzsgfSkKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX2dldGxrKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmxvY2sgX191c2VyICp1c2VyKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGZsb2NrIF9fdXNlciAqdXNlcikKK3sKKwlyZXR1cm4gLUVBQ0NFUzsKK30KKwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKLSNkZWZpbmUgZmNudGxfZ2V0bGs2NChhLCBiKSAoeyAtRUlOVkFMOyB9KQotI2RlZmluZSBmY250bF9zZXRsazY0KGEsIGIsIGMsIGQpICh7IC1FQUNDRVM7IH0pCitzdGF0aWMgaW5saW5lIGludCBmY250bF9nZXRsazY0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKnVzZXIpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX3NldGxrNjQodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKnVzZXIpCit7CisJcmV0dXJuIC1FQUNDRVM7Cit9CiAjZW5kaWYKLSNkZWZpbmUgZmNudGxfc2V0bGVhc2UoYSwgYiwgYykgKHsgMDsgfSkKLSNkZWZpbmUgZmNudGxfZ2V0bGVhc2UoYSkgKHsgMDsgfSkKLSNkZWZpbmUgbG9ja3NfaW5pdF9sb2NrKGEpICh7IH0pCi0jZGVmaW5lIF9fbG9ja3NfY29weV9sb2NrKGEsIGIpICh7IH0pCi0jZGVmaW5lIGxvY2tzX2NvcHlfbG9jayhhLCBiKSAoeyB9KQotI2RlZmluZSBsb2Nrc19yZW1vdmVfcG9zaXgoYSwgYikgKHsgfSkKLSNkZWZpbmUgbG9ja3NfcmVtb3ZlX2Zsb2NrKGEpICh7IH0pCi0jZGVmaW5lIHBvc2l4X3Rlc3RfbG9jayhhLCBiKSAoeyAwOyB9KQotI2RlZmluZSBwb3NpeF9sb2NrX2ZpbGUoYSwgYiwgYykgKHsgLUVOT0xDSzsgfSkKLSNkZWZpbmUgcG9zaXhfbG9ja19maWxlX3dhaXQoYSwgYikgKHsgLUVOT0xDSzsgfSkKLSNkZWZpbmUgcG9zaXhfdW5ibG9ja19sb2NrKGEsIGIpICgtRU5PRU5UKQotI2RlZmluZSB2ZnNfdGVzdF9sb2NrKGEsIGIpICh7IDA7IH0pCi0jZGVmaW5lIHZmc19sb2NrX2ZpbGUoYSwgYiwgYywgZCkgKC1FTk9MQ0spCi0jZGVmaW5lIHZmc19jYW5jZWxfbG9jayhhLCBiKSAoeyAwOyB9KQotI2RlZmluZSBmbG9ja19sb2NrX2ZpbGVfd2FpdChhLCBiKSAoeyAtRU5PTENLOyB9KQotI2RlZmluZSBfX2JyZWFrX2xlYXNlKGEsIGIpICh7IDA7IH0pCi0jZGVmaW5lIGxlYXNlX2dldF9tdGltZShhLCBiKSAoeyB9KQotI2RlZmluZSBnZW5lcmljX3NldGxlYXNlKGEsIGIsIGMpICh7IC1FSU5WQUw7IH0pCi0jZGVmaW5lIHZmc19zZXRsZWFzZShhLCBiLCBjKSAoeyAtRUlOVkFMOyB9KQotI2RlZmluZSBsZWFzZV9tb2RpZnkoYSwgYikgKHsgLUVJTlZBTDsgfSkKLSNkZWZpbmUgbG9ja19tYXlfcmVhZChhLCBiLCBjKSAoeyAxOyB9KQotI2RlZmluZSBsb2NrX21heV93cml0ZShhLCBiLCBjKSAoeyAxOyB9KQorc3RhdGljIGlubGluZSBpbnQgZmNudGxfc2V0bGVhc2UodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgbG9uZyBhcmcpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfaW5pdF9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKm5ldywgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKm5ldywgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfcmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IG93bmVyKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tzX3JlbW92ZV9mbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3NpeF90ZXN0X2xvY2soc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9zaXhfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwKKwkJCQkgIHN0cnVjdCBmaWxlX2xvY2sgKmNvbmZsb2NrKQoreworCXJldHVybiAtRU5PTENLOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3NpeF9sb2NrX2ZpbGVfd2FpdChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIC1FTk9MQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvc2l4X3VuYmxvY2tfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkgICAgIHN0cnVjdCBmaWxlX2xvY2sgKndhaXRlcikKK3sKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX3Rlc3RfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBmaWxlX2xvY2sgKmNvbmYpCit7CisJcmV0dXJuIC1FTk9MQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19jYW5jZWxfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZsb2NrX2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0KQoreworCXJldHVybiAtRU5PTENLOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2JyZWFrX2xlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnLAorCQkJCSAgICBzdHJ1Y3QgZmlsZV9sb2NrICoqZmxwKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnLAorCQkJICAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKipsZWFzZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGVhc2VfbW9kaWZ5KHN0cnVjdCBmaWxlX2xvY2sgKipiZWZvcmUsIGludCBhcmcpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NrX21heV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsCisJCQkJIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiAxOworfQorCiAjZW5kaWYgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogCkBAIC0xNjA2LDcgKzE3MjAsNyBAQAogZXh0ZXJuIGludCBnZXRfc2JfcHNldWRvKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICosIGNoYXIgKiwKIAljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLCB1bnNpZ25lZCBsb25nLAogCXN0cnVjdCB2ZnNtb3VudCAqbW50KTsKLWV4dGVybiBpbnQgc2ltcGxlX3NldF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIHZvaWQgc2ltcGxlX3NldF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IF9fcHV0X3N1cGVyX2FuZF9uZWVkX3Jlc3RhcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiAKIC8qIEFsYXMsIG5vIGFsaWFzZXMuIFRvbyBtdWNoIGhhc3NsZSB3aXRoIGJyaW5naW5nIG1vZHVsZS5oIGV2ZXJ5d2hlcmUgKi8KQEAgLTE2ODcsMTMgKzE4MDEsNDQgQEAKIAlyZXR1cm4gMDsKIH0KICNlbHNlIC8qICFDT05GSUdfRklMRV9MT0NLSU5HICovCi0jZGVmaW5lIGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoYSkgKHsgMDsgfSkKLSNkZWZpbmUgbG9ja3NfbWFuZGF0b3J5X2FyZWEoYSwgYiwgYywgZCwgZSkgKHsgMDsgfSkKLSNkZWZpbmUgX19tYW5kYXRvcnlfbG9jayhhKSAoeyAwOyB9KQotI2RlZmluZSBtYW5kYXRvcnlfbG9jayhhKSAoeyAwOyB9KQotI2RlZmluZSBsb2Nrc192ZXJpZnlfbG9ja2VkKGEpICh7IDA7IH0pCi0jZGVmaW5lIGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShhLCBiLCBjKSAoeyAwOyB9KQotI2RlZmluZSBicmVha19sZWFzZShhLCBiKSAoeyAwOyB9KQorc3RhdGljIGlubGluZSBpbnQgbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2Nrc19tYW5kYXRvcnlfYXJlYShpbnQgcncsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgICAgICBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbWFuZGF0b3J5X2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWFuZGF0b3J5X2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9ja3NfdmVyaWZ5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCXNpemVfdCBzaXplKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBicmVha19sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogLyogZnMvb3Blbi5jICovCkBAIC0xNzMwLDYgKzE4NzUsMTMgQEAKIGV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGJkcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9ieV9kZXZudW0oZGV2X3QsIGZtb2RlX3QpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CitleHRlcm4gaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CitleHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpmcmVlemVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gaW50IGZzeW5jX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBpbnQgZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBmc3luY19ub19zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBiZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSkge30KICNlbmRpZgpAQCAtMTg4MSw3ICsyMDMzLDYgQEAKIAlpZiAoZmlsZSkKIAkJYXRvbWljX2luYygmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKIH0KLWV4dGVybiBpbnQgZG9fcGlwZShpbnQgKik7CiBleHRlcm4gaW50IGRvX3BpcGVfZmxhZ3MoaW50ICosIGludCk7CiBleHRlcm4gc3RydWN0IGZpbGUgKmNyZWF0ZV9yZWFkX3BpcGUoc3RydWN0IGZpbGUgKmYsIGludCBmbGFncyk7CiBleHRlcm4gc3RydWN0IGZpbGUgKmNyZWF0ZV93cml0ZV9waXBlKGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaAppbmRleCAxM2Y0ZTc0Li4wZmZhNDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKQEAgLTIyLDcgKzIyLDcgQEAKIHsKIAlfX3U2NAlieXRlczsKIAlfX3UzMglwYWNrZXRzOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKICAqIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0IC0gcmF0ZSBlc3RpbWF0b3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCAxNjk0OGVhLi42MzRjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0zMzMsMTEgKzMzMywxMCBAQAogCQlwYXJ0X3RvX2Rpc2socGFydCktPnBhcnQwLmluX2ZsaWdodC0tOwogfQogCi0vKiBkcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jICovCisvKiBibG9jay9ibGstY29yZS5jICovCiBleHRlcm4gdm9pZCBwYXJ0X3JvdW5kX3N0YXRzKGludCBjcHUsIHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpOwogCi0vKiBkcml2ZXJzL2Jsb2NrL2dlbmhkLmMgKi8KLWV4dGVybiBpbnQgZ2V0X2Jsa2Rldl9saXN0KGNoYXIgKiwgaW50KTsKKy8qIGJsb2NrL2dlbmhkLmMgKi8KIGV4dGVybiB2b2lkIGFkZF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGRlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CiBleHRlcm4gdm9pZCB1bmxpbmtfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2hkbGMuaAppbmRleCBmZDQ3YTE1Li42YTZlNzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkbGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGMuaApAQCAtMzgsNiArMzgsNyBAQAogCWludCAoKmlvY3RsKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CiAJX19iZTE2ICgqdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJaW50ICgqbmV0aWZfcngpKHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKnhtaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIAlzdHJ1Y3QgaGRsY19wcm90byAqbmV4dDsgLyogbmV4dCBwcm90b2NvbCBpbiB0aGUgbGlzdCAqLwogfTsKQEAgLTEwMiw2ICsxMDMsMTAgQEAKIGludCBoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvKiBNdXN0IGJlIGNhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgd2hlbiBIRExDIGRldmljZSBpcyBiZWluZyBjbG9zZWQgKi8KIHZvaWQgaGRsY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIE1heSBiZSB1c2VkIGJ5IGhhcmR3YXJlIGRyaXZlciAqLworaW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisvKiBNdXN0IGJlIHBvaW50ZWQgdG8gYnkgaHcgZHJpdmVyJ3MgZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdCAqLworaW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogaW50IGF0dGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjX3Byb3RvICpwcm90bywKIAkJCSBzaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaCBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCmluZGV4IGJmNjMwMmYuLmMwMTBiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCkBAIC0yMTUsNyArMjE1LDcgQEAKIAogCXN0cnVjdCBoZGxjZHJ2X2hkbGN0eCB7CiAJCXN0cnVjdCBoZGxjZHJ2X2hkbGNidWZmZXIgaGJ1ZjsKLQkJbG9uZyBpbl9oZGxjX3R4OworCQl1bnNpZ25lZCBsb25nIGluX2hkbGNfdHg7CiAJCS8qCiAJCSAqIDAgPSBzZW5kIGZsYWdzCiAJCSAqIDEgPSBzZW5kIHR4dGFpbCAoZmxhZ3MpCkBAIC0yNDEsNyArMjQxLDYgQEAKIAlzdHJ1Y3QgaGRsY2Rydl9iaXRidWZmZXIgYml0YnVmX2hkbGM7CiAjZW5kaWYgLyogSERMQ0RSVl9ERUJVRyAqLwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJaW50IHB0dF9rZXllZDsKIAogCS8qIHF1ZXVlZCBza2IgZm9yIHRyYW5zbWlzc2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pYm10ci5oIGIvaW5jbHVkZS9saW51eC9pYm10ci5oCmluZGV4IDFjN2EwZGQuLjA2Njk1YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWJtdHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2libXRyLmgKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXVuc2lnbmVkIHNob3J0IGV4c2FwX3N0YXRpb25faWQ7CiAJdW5zaWduZWQgc2hvcnQgZ2xvYmFsX2ludF9lbmFibGU7CiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfc2tiOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHRyX3N0YXRzOworCiAJdW5zaWduZWQgY2hhciBhdXRvX3NwZWVkc2F2ZTsKIAlvcGVuX3N0YXRlCQkJb3Blbl9zdGF0dXMsIHNhcF9zdGF0dXM7CiAJZW51bSB7TUFOVUFMLCBBVVRPTUFUSUN9CW9wZW5fbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGUwY2VkZmUuLjg1NGViYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdXRleC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1JJUykgfHwgZGVmaW5lZChDT05GSUdfRlJWKQorI2lmIGRlZmluZWQoQ09ORklHX0NSSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTU4xMDMwMCkKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAogI2Vsc2UKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMQpAQCAtMTkzLDI0ICsxOTMsOCBAQAogCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0bF9hZGRyOwogfQogCi0vKiBmb3IgSURFIFBDSSBjb250cm9sbGVycyBpbiBsZWdhY3kgbW9kZSwgdGVtcG9yYXJ5ICovCi1zdGF0aWMgaW5saW5lIGludCBfX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jc3dpdGNoIChiYXNlKSB7Ci0jaWZkZWYgQ09ORklHX0lBNjQKLQljYXNlIDB4MWYwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTQpOwotCWNhc2UgMHgxNzA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNSk7Ci0jZWxzZQotCWNhc2UgMHgxZjA6IHJldHVybiAxNDsKLQljYXNlIDB4MTcwOiByZXR1cm4gMTU7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX01OMTAzMDApIHx8IGRlZmluZWQoQ09ORklHX1BBUklTQykgXAotICAgIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDNjQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQogI2luY2x1ZGUgPGFzbS9pZGUuaD4KICNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KQEAgLTc5Nyw2ICs3ODEsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfdGFibGU7CiAJaW50IHNnX21heF9uZW50czsJCS8qIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gaXQgKi8KIAlpbnQgc2dfbmVudHM7CQkJLyogQ3VycmVudCBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLworCWludCBvcmlnX3NnX25lbnRzOwogCWludCBzZ19kbWFfZGlyZWN0aW9uOwkJLyogZG1hIHRyYW5zZmVyIGRpcmVjdGlvbiAqLwogCiAJLyogZGF0YSBwaGFzZSBvZiB0aGUgYWN0aXZlIGNvbW1hbmQgKGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciBQSU8vRE1BKSAqLwpAQCAtODY1LDcgKzg1MCw3IEBACiAJaWRlX2h3aWZfdAkqcG9ydHNbTUFYX0hPU1RfUE9SVFMgKyAxXTsKIAl1bnNpZ25lZCBpbnQJbl9wb3J0czsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXZbMl07Ci0JdW5zaWduZWQgaW50CSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKwlpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKIAlpcnFfaGFuZGxlcl90CWlycV9oYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcJaG9zdF9mbGFnczsKIAl2b2lkCQkqaG9zdF9wcml2OwpAQCAtMTE0NSwxMSArMTEzMCwxNCBAQAogZXh0ZXJuIGludCBpZGVfdmxiX2NsazsKIGV4dGVybiBpbnQgaWRlX3BjaV9jbGs7CiAKLWV4dGVybiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2Vjcyk7Ci1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKTsKK2ludCBpZGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOworaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7Cit2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi1leHRlcm4gdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KTsKK3ZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgICBpZGVfZXhwaXJ5X3QgKik7Cit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKKwkJICAgICBpZGVfZXhwaXJ5X3QgKik7CiAKIHZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgaWRlX2V4cGlyeV90ICopOwpAQCAtMTE2OCwxMyArMTE1NiwxNCBAQAogCiBpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKiwgaWRlX2RyaXZlX3QgKiwgdTgsIHU4LCB1bnNpZ25lZCBsb25nKTsKIAoraWRlX3N0YXJ0c3RvcF90IGlkZV9kb19wYXJrX3VucGFyayhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fZGV2c2V0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCiBleHRlcm4gaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldCAoaWRlX2RyaXZlX3QgKik7CiAKIGV4dGVybiBpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nLCBpbnQgYXJnKTsKIAotZXh0ZXJuIHZvaWQgaWRlX2RvX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLQogZXh0ZXJuIHZvaWQgaWRlX2VuZF9kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgdTgsIHU4KTsKIAogdm9pZCBpZGVfdGZfZHVtcChjb25zdCBjaGFyICosIHN0cnVjdCBpZGVfdGFza2ZpbGUgKik7CkBAIC0xMTk5LDEwICsxMTg4LDYgQEAKIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKiwgdTE2ICosIHU4ICopOwogCi1leHRlcm4gaW50IGRyaXZlX2lzX3JlYWR5KGlkZV9kcml2ZV90ICopOwotCi12b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCB1MzIsIHUxNiwgdTgpOwotCiBpbnQgaWRlX2NoZWNrX2F0YXBpX2RldmljZShpZGVfZHJpdmVfdCAqLCBjb25zdCBjaGFyICopOwogCiB2b2lkIGlkZV9pbml0X3BjKHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CkBAIC0xMjUwLDYgKzEyMzUsOCBAQAogCiBpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKK2ludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKiwgdTgsIHUxNiAqKTsKKwogZXh0ZXJuIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gaW50IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoaWRlX2RyaXZlX3QgKiwgdTgpOwogZXh0ZXJuIHU4IGVpZ2h0eV9uaW50eV90aHJlZSAoaWRlX2RyaXZlX3QgKik7CkBAIC0xMjc5LDcgKzEyNjYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaW50LAordm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosCiAJCQkgaHdfcmVnc190ICosIGh3X3JlZ3NfdCAqKik7CiB2b2lkIGlkZV9zZXR1cF9wY2lfbm9pc2Uoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7CiAKQEAgLTEzNDgsMTAgKzEzMzUsNiBAQAogCUlERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPCT0gKDEgPDwgMTkpLAogCS8qIHNlcmlhbGl6ZSBwb3J0cyAqLwogCUlERV9IRkxBR19TRVJJQUxJWkUJCT0gKDEgPDwgMjApLAotCS8qIHVzZSBsZWdhY3kgSVJRcyAqLwotCUlERV9IRkxBR19MRUdBQ1lfSVJRUwkJPSAoMSA8PCAyMSksCi0JLyogZm9yY2UgdXNlIG9mIGxlZ2FjeSBJUlFzICovCi0JSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTCT0gKDEgPDwgMjIpLAogCS8qIGhvc3QgaXMgVFJNMjkwICovCiAJSURFX0hGTEFHX1RSTTI5MAkJPSAoMSA8PCAyMyksCiAJLyogdXNlIDMyLWJpdCBJL08gb3BzICovCkBAIC0xMzc5LDcgKzEzNjIsNyBAQAogCiBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyB7CiAJY2hhcgkJCSpuYW1lOwotCXVuc2lnbmVkIGludAkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCWludAkJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKIAl2b2lkCQkJKCppbml0X2lvcHMpKGlkZV9od2lmX3QgKik7CiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKCppbml0X2h3aWYpKGlkZV9od2lmX3QgKik7CiAJaW50CQkJKCppbml0X2RtYSkoaWRlX2h3aWZfdCAqLApAQCAtMTQ3MCw2ICsxNDUzLDcgQEAKIAogdm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICosIGludCk7CiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpZGVfaWRfZG1hX2J1ZyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KQEAgLTE0ODEsMjEgKzE0NjUsMjQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfZG1hX3ZlcmJvc2UoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQogc3RhdGljIGlubGluZSBpbnQgaWRlX3NldF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NoZWNrX2RtYV9jcmMoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorc3RhdGljIGlubGluZSBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKSB7IHJldHVybiBpZGVfc3RvcHBlZDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERUFDUEkKK2ludCBpZGVfYWNwaV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfZ2V0X3RpbWluZyhpZGVfaHdpZl90ICpod2lmKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX3B1c2hfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpOwotZXh0ZXJuIHZvaWQgaWRlX2FjcGlfaW5pdChpZGVfaHdpZl90ICpod2lmKTsKK3ZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKik7CiB2b2lkIGlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGlkZV9od2lmX3QgKik7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9zZXRfc3RhdGUoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpZGVfYWNwaV9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9hY3BpX2V4ZWNfdGZzKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2dldF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9wdXNoX3RpbWluZyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX3NldF9zdGF0ZShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pIHt9CiAjZW5kaWYKQEAgLTE1MjksOSArMTUxNiw3IEBACiAJaHdpZi0+aHdpZl9kYXRhID0gZGF0YTsKIH0KIAotY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKTsKIGV4dGVybiB2b2lkIGlkZV90b2dnbGVfYm91bmNlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKTsKLWV4dGVybiBpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKTsKIAogdTY0IGlkZV9nZXRfbGJhX2FkZHIoc3RydWN0IGlkZV90YXNrZmlsZSAqLCBpbnQpOwogdTggaWRlX2R1bXBfc3RhdHVzKGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKiwgdTgpOwpAQCAtMTU3MCwxNCArMTU1NSwxOCBAQAogCQkgICAgICBzdHJ1Y3QgaWRlX3RpbWluZyAqLCB1bnNpZ25lZCBpbnQpOwogaW50IGlkZV90aW1pbmdfY29tcHV0ZShpZGVfZHJpdmVfdCAqLCB1OCwgc3RydWN0IGlkZV90aW1pbmcgKiwgaW50LCBpbnQpOwogCisjaWZkZWYgQ09ORklHX0lERV9YRkVSX01PREUKIGludCBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KGNoYXIgKik7Ci0KK2NvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTgpOwogdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Ci0KIGludCBpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIHU4KTsKIGludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICosIHU4KTsKLQogdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqLCB1OCk7CitpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKiwgdTgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9tYXhfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTE2MTAsNiArMTU5OSwxMCBAQAogI2RlZmluZSBpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZGV2LCBwb3J0KSBcCiAJZm9yICgoaSkgPSAwOyAoKGRldikgPSAocG9ydCktPmRldmljZXNbaV0pIHx8IChpKSA8IE1BWF9EUklWRVM7IChpKSsrKQogCisjZGVmaW5lIGlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRldiwgcG9ydCkgXAorCWZvciAoKGkpID0gMDsgKChkZXYpID0gKHBvcnQpLT5kZXZpY2VzW2ldKSB8fCAoaSkgPCBNQVhfRFJJVkVTOyAoaSkrKykgXAorCQlpZiAoKGRldiktPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQorCiAjZGVmaW5lIGlkZV9ob3N0X2Zvcl9lYWNoX3BvcnQoaSwgcG9ydCwgaG9zdCkgXAogCWZvciAoKGkpID0gMDsgKChwb3J0KSA9IChob3N0KS0+cG9ydHNbaV0pIHx8IChpKSA8IE1BWF9IT1NUX1BPUlRTOyAoaSkrKykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggYzRlNmNhMS4uNGI1MDFiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC0xOCw2ICsxOCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCisvKgorICogRFMgYml0IHVzYWdlCisgKgorICogVEEgPSB0cmFuc21pdHRlciBhZGRyZXNzCisgKiBSQSA9IHJlY2VpdmVyIGFkZHJlc3MKKyAqIERBID0gZGVzdGluYXRpb24gYWRkcmVzcworICogU0EgPSBzb3VyY2UgYWRkcmVzcworICoKKyAqIFRvRFMgICAgRnJvbURTICBBMShSQSkgIEEyKFRBKSAgQTMgICAgICBBNCAgICAgIFVzZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAwICAgICAgIDAgICAgICAgREEgICAgICBTQSAgICAgIEJTU0lEICAgLSAgICAgICBJQlNTL0RMUworICogIDAgICAgICAgMSAgICAgICBEQSAgICAgIEJTU0lEICAgU0EgICAgICAtICAgICAgIEFQIC0+IFNUQQorICogIDEgICAgICAgMCAgICAgICBCU1NJRCAgIFNBICAgICAgREEgICAgICAtICAgICAgIEFQIDwtIFNUQQorICogIDEgICAgICAgMSAgICAgICBSQSAgICAgIFRBICAgICAgREEgICAgICBTQSAgICAgIHVuc3BlY2lmaWVkIChXRFMpCisgKi8KKwogI2RlZmluZSBGQ1NfTEVOIDQKIAogI2RlZmluZSBJRUVFODAyMTFfRkNUTF9WRVJTCQkweDAwMDMKQEAgLTUyNyw2ICs1NDMsOCBAQAogCXU4IHZpcnR1YWxfbWFwWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4gMTYKKwogc3RydWN0IGllZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKIAlfX2xlMTYgZHVyYXRpb247CkBAIC02NDYsNiArNjY0LDEwIEBACiAJCQkJCXU4IGFjdGlvbl9jb2RlOwogCQkJCQl1OCB2YXJpYWJsZVswXTsKIAkJCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1lc2hfYWN0aW9uOworCQkJCXN0cnVjdCB7CisJCQkJCXU4IGFjdGlvbjsKKwkJCQkJdTggdHJhbnNfaWRbV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU5dOworCQkJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNhX3F1ZXJ5OwogCQkJfSB1OwogCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhY3Rpb247CiAJfSB1OwpAQCAtNjU1LDYgKzY3NywxNSBAQAogI2RlZmluZSBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5hY3Rpb24udSkKIAogCisvKiBNYW5hZ2VtZW50IE1JQyBpbmZvcm1hdGlvbiBlbGVtZW50IChJRUVFIDgwMi4xMXcpICovCitzdHJ1Y3QgaWVlZTgwMjExX21taWUgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuZ3RoOworCV9fbGUxNiBrZXlfaWQ7CisJdTggc2VxdWVuY2VfbnVtYmVyWzZdOworCXU4IG1pY1s4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBDb250cm9sIGZyYW1lcyAqLwogc3RydWN0IGllZWU4MDIxMV9ydHMgewogCV9fbGUxNiBmcmFtZV9jb250cm9sOwpAQCAtODM2LDYgKzg2Nyw3IEBACiAvKiBBdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zICovCiAjZGVmaW5lIFdMQU5fQVVUSF9PUEVOIDAKICNkZWZpbmUgV0xBTl9BVVRIX1NIQVJFRF9LRVkgMQorI2RlZmluZSBXTEFOX0FVVEhfRlQgMgogI2RlZmluZSBXTEFOX0FVVEhfTEVBUCAxMjgKIAogI2RlZmluZSBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTiAxMjgKQEAgLTg5OSw2ICs5MzEsOSBAQAogCS8qIDgwMi4xMWcgKi8KIAlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9TSE9SVFRJTUUgPSAyNSwKIAlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9EU1NTT0ZETSA9IDI2LAorCS8qIDgwMi4xMXcgKi8KKwlXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9URU1QT1JBUklMWSA9IDMwLAorCVdMQU5fU1RBVFVTX1JPQlVTVF9NR01UX0ZSQU1FX1BPTElDWV9WSU9MQVRJT04gPSAzMSwKIAkvKiA4MDIuMTFpICovCiAJV0xBTl9TVEFUVVNfSU5WQUxJRF9JRSA9IDQwLAogCVdMQU5fU1RBVFVTX0lOVkFMSURfR1JPVVBfQ0lQSEVSID0gNDEsCkBAIC0xMDE4LDYgKzEwNTMsOCBAQAogCVdMQU5fRUlEX0hUX0lORk9STUFUSU9OID0gNjEsCiAJLyogODAyLjExaSAqLwogCVdMQU5fRUlEX1JTTiA9IDQ4LAorCVdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUwgPSA1NiwKKwlXTEFOX0VJRF9NTUlFID0gNzYgLyogODAyLjExdyAqLywKIAlXTEFOX0VJRF9XUEEgPSAyMjEsCiAJV0xBTl9FSURfR0VORVJJQyA9IDIyMSwKIAlXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMgPSAyMjEsCkBAIC0xMDMwLDYgKzEwNjcsOCBAQAogCVdMQU5fQ0FURUdPUllfUU9TID0gMSwKIAlXTEFOX0NBVEVHT1JZX0RMUyA9IDIsCiAJV0xBTl9DQVRFR09SWV9CQUNLID0gMywKKwlXTEFOX0NBVEVHT1JZX1BVQkxJQyA9IDQsCisJV0xBTl9DQVRFR09SWV9TQV9RVUVSWSA9IDgsCiAJV0xBTl9DQVRFR09SWV9XTU0gPSAxNywKIH07CiAKQEAgLTExMDQsNiArMTE0MywxMiBAQAogCX07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorZW51bSBpZWVlODAyMTFfdGltZW91dF9pbnRlcnZhbF90eXBlIHsKKwlXTEFOX1RJTUVPVVRfUkVBU1NPQ19ERUFETElORSA9IDEgLyogODAyLjExciAqLywKKwlXTEFOX1RJTUVPVVRfS0VZX0xJRkVUSU1FID0gMiAvKiA4MDIuMTFyICovLAorCVdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSyA9IDMgLyogODAyLjExdyAqLywKK307CisKIC8qIEJBQ0sgYWN0aW9uIGNvZGUgKi8KIGVudW0gaWVlZTgwMjExX2JhY2tfYWN0aW9uY29kZSB7CiAJV0xBTl9BQ1RJT05fQUREQkFfUkVRID0gMCwKQEAgLTExMTgsNiArMTE2MywxMyBAQAogCVdMQU5fQkFDS19USU1FUiA9IDIsCiB9OwogCisvKiBTQSBRdWVyeSBhY3Rpb24gKi8KK2VudW0gaWVlZTgwMjExX3NhX3F1ZXJ5X2FjdGlvbiB7CisJV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVRVUVTVCA9IDAsCisJV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVTUE9OU0UgPSAxLAorfTsKKworCiAvKiBBLU1TRFUgODAyLjExbiAqLwogI2RlZmluZSBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQgMHgwMDgwCiAKQEAgLTExMjgsNiArMTE4MCw3IEBACiAvKiByZXNlcnZlZDogCQkJCTB4MDAwRkFDMDMgKi8KICNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUAkJMHgwMDBGQUMwNAogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQJMHgwMDBGQUMwNQorI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQwkweDAwMEZBQzA2CiAKICNkZWZpbmUgV0xBTl9NQVhfS0VZX0xFTgkJMzIKIApAQCAtMTE4NSw0ICsxMjM4LDE0OSBAQAogCQlyZXR1cm4gaGRyLT5hZGRyMTsKIH0KIAorLyoqCisgKiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUgLSBjaGVjayBpZiBmcmFtZSBpcyBhIHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lCisgKiBAaGRyOiB0aGUgZnJhbWUgKGJ1ZmZlciBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgdGhlIGZpcnN0IG9jdGV0IG9mIHBheWxvYWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlpZiAoaWVlZTgwMjExX2lzX2Rpc2Fzc29jKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgaWVlZTgwMjExX2lzX2RlYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdTggKmNhdGVnb3J5OworCisJCS8qCisJCSAqIEFjdGlvbiBmcmFtZXMsIGV4Y2x1ZGluZyBQdWJsaWMgQWN0aW9uIGZyYW1lcywgYXJlIFJvYnVzdAorCQkgKiBNYW5hZ2VtZW50IEZyYW1lcy4gSG93ZXZlciwgaWYgd2UgYXJlIGxvb2tpbmcgYXQgYSBQcm90ZWN0ZWQKKwkJICogZnJhbWUsIHNraXAgdGhlIGNoZWNrIHNpbmNlIHRoZSBkYXRhIG1heSBiZSBlbmNyeXB0ZWQgYW5kCisJCSAqIHRoZSBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIGZvdW5kIHRvIGJlIGEgUm9idXN0IE1hbmFnZW1lbnQKKwkJICogRnJhbWUgKGJ5IHRoZSBvdGhlciBlbmQpLgorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJY2F0ZWdvcnkgPSAoKHU4ICopIGhkcikgKyAyNDsKKwkJcmV0dXJuICpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2Zoc3NfY2hhbl90b19mcmVxIC0gZ2V0IGNoYW5uZWwgZnJlcXVlbmN5CisgKiBAY2hhbm5lbDogdGhlIEZIU1MgY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBGSFNTIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE0LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2Zoc3NfY2hhbl90b19mcmVxKGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDEpICYmIChjaGFubmVsIDwgOTYpKQorCQlyZXR1cm4gY2hhbm5lbCArIDI0MDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fZmhzc19jaGFuIC0gZ2V0IGNoYW5uZWwKKyAqIEBmcmVxOiB0aGUgY2hhbm5lbHMgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBGSFNTIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTQuNgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZnJlcV90b19maHNzX2NoYW4oaW50IGZyZXEpCit7CisJaWYgKChmcmVxID4gMjQwMSkgJiYgKGZyZXEgPCAyNDk2KSkKKwkJcmV0dXJuIGZyZXEgLSAyNDAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGNlbnRlciBmcmVxdWVuY3kKKyAqIEBjaGFubmVsOiB0aGUgRFNTUyBjaGFubmVsCisgKgorICogQ29udmVydCBJRUVFODAyLjExIERTU1MgY2hhbm5lbCB0byB0aGUgY2VudGVyIGZyZXF1ZW5jeSAoTUh6KS4KKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTUuNgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMCkgJiYgKGNoYW5uZWwgPCAxNCkpCisJCXJldHVybiAyNDA3ICsgKGNoYW5uZWwgKiA1KTsKKwllbHNlIGlmIChjaGFubmVsID09IDE0KQorCQlyZXR1cm4gMjQ4NDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4gLSBnZXQgY2hhbm5lbAorICogQGZyZXE6IHRoZSBmcmVxdWVuY3kKKyAqCisgKiBDb252ZXJ0IGZyZXF1ZW5jeSAoTUh6KSB0byBJRUVFODAyLjExIERTU1MgY2hhbm5lbAorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNS42CisgKgorICogVGhpcyByb3V0aW5lIHNlbGVjdHMgdGhlIGNoYW5uZWwgd2l0aCB0aGUgY2xvc2VzdCBjZW50ZXIgZnJlcXVlbmN5LgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oaW50IGZyZXEpCit7CisJaWYgKChmcmVxID49IDI0MTApICYmIChmcmVxIDwgMjQ3NSkpCisJCXJldHVybiAoZnJlcSAtIDI0MDUpIC8gNTsKKwllbHNlIGlmICgoZnJlcSA+PSAyNDgyKSAmJiAoZnJlcSA8IDI0ODcpKQorCQlyZXR1cm4gMTQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qIENvbnZlcnQgSUVFRTgwMi4xMSBIUiBEU1NTIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopIGFuZCBiYWNrCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE4LjQuNi4yCisgKgorICogVGhlIGNoYW5uZWxzIGFuZCBmcmVxdWVuY2llcyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgZGVmaW5lZCBmb3IgRFNTUworICovCisjZGVmaW5lIGllZWU4MDIxMV9ocl9jaGFuX3RvX2ZyZXEoY2hhbikgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW4pCisjZGVmaW5lIGllZWU4MDIxMV9mcmVxX3RvX2hyX2NoYW4oZnJlcSkgaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGZyZXEpCisKKy8qIENvbnZlcnQgSUVFRTgwMi4xMSBFUlAgY2hhbm5lbCB0byBmcmVxdWVuY3kgKE1IeikgYW5kIGJhY2sKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTkuNC4yCisgKi8KKyNkZWZpbmUgaWVlZTgwMjExX2VycF9jaGFuX3RvX2ZyZXEoY2hhbikgaWVlZTgwMjExX2hyX2NoYW5fdG9fZnJlcShjaGFuKQorI2RlZmluZSBpZWVlODAyMTFfZnJlcV90b19lcnBfY2hhbihmcmVxKSBpZWVlODAyMTFfZnJlcV90b19ocl9jaGFuKGZyZXEpCisKKy8qKgorICogaWVlZTgwMjExX29mZG1fY2hhbl90b19mcmVxIC0gZ2V0IGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jeQorICogQHNfZnJlcTogc3RhcnRpbmcgZnJlcXVlbmN5ID09IChkb3RDaGFubmVsU3RhcnRpbmdGYWN0b3IvMikgTUh6CisgKiBAY2hhbm5lbDogdGhlIE9GRE0gY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBPRkRNIGNoYW5uZWwgdG8gY2VudGVyIGZyZXF1ZW5jeSAoTUh6KQorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNy4zLjguMy4yCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9vZmRtX2NoYW5fdG9fZnJlcShpbnQgc19mcmVxLCBpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAwKSAmJiAoY2hhbm5lbCA8PSAyMDApICYmCisJICAgIChzX2ZyZXEgPj0gNDAwMCkpCisJCXJldHVybiBzX2ZyZXEgKyAoY2hhbm5lbCAqIDUpOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX29mZG1fY2hhbm5lbCAtIGdldCBjaGFubmVsCisgKiBAc19mcmVxOiBzdGFydGluZyBmcmVxdWVuY3kgPT0gKGRvdENoYW5uZWxTdGFydGluZ0ZhY3Rvci8yKSBNSHoKKyAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBPRkRNIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTcuMy44LjMuMgorICoKKyAqIFRoaXMgcm91dGluZSBzZWxlY3RzIHRoZSBjaGFubmVsIHdpdGggdGhlIGNsb3Nlc3QgY2VudGVyIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fb2ZkbV9jaGFuKGludCBzX2ZyZXEsIGludCBmcmVxKQoreworCWlmICgoZnJlcSA+IChzX2ZyZXEgKyAyKSkgJiYgKGZyZXEgPD0gKHNfZnJlcSArIDEyMDIpKSAmJgorCSAgICAoc19mcmVxID49IDQwMDApKQorCQlyZXR1cm4gKGZyZXEgKyAyIC0gc19mcmVxKSAvIDU7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKICNlbmRpZiAvKiBMSU5VWF9JRUVFODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZi5oIGIvaW5jbHVkZS9saW51eC9pZi5oCmluZGV4IDJhNmUyOTYuLjExMDhmM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmLmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgSUZGX1NMQVZFX05FRURBUlAgMHg0MAkJLyogbmVlZCBBUlBzIGZvciB2YWxpZGF0aW9uCSovCiAjZGVmaW5lIElGRl9JU0FUQVAJMHg4MAkJLyogSVNBVEFQIGludGVyZmFjZSAoUkZDNDIxNCkJKi8KICNkZWZpbmUgSUZGX01BU1RFUl9BUlBNT04gMHgxMDAJCS8qIGJvbmRpbmcgbWFzdGVyLCBBUlAgbW9uIGluIHVzZSAqLworI2RlZmluZSBJRkZfV0FOX0hETEMJMHgyMDAJCS8qIFdBTiBIRExDIGRldmljZQkJKi8KIAogI2RlZmluZSBJRl9HRVRfSUZBQ0UJMHgwMDAxCQkvKiBmb3IgcXVlcnlpbmcgb25seSAqLwogI2RlZmluZSBJRl9HRVRfUFJPVE8JMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oIGIvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaAppbmRleCAyN2VhMmFjLi4wODM1ZGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpZm5kZWYgX0xJTlVYX0lGX0FSQ05FVF9ICiAjZGVmaW5lIF9MSU5VWF9JRl9BUkNORVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCiAKQEAgLTU3LDEwICs1OCwxMCBAQAogICovCiBzdHJ1Y3QgYXJjX3JmYzEyMDEKIHsKLSAgICB1aW50OF90ICBwcm90bzsJCS8qIHByb3RvY29sIElEIGZpZWxkIC0gdmFyaWVzCQkqLwotICAgIHVpbnQ4X3QgIHNwbGl0X2ZsYWc7CS8qIGZvciB1c2Ugd2l0aCBzcGxpdCBwYWNrZXRzCQkqLworICAgIF9fdTggIHByb3RvOwkJLyogcHJvdG9jb2wgSUQgZmllbGQgLSB2YXJpZXMJCSovCisgICAgX191OCAgc3BsaXRfZmxhZzsJLyogZm9yIHVzZSB3aXRoIHNwbGl0IHBhY2tldHMJCSovCiAgICAgX19iZTE2ICAgc2VxdWVuY2U7CQkvKiBzZXF1ZW5jZSBudW1iZXIJCQkqLwotICAgIHVpbnQ4X3QgIHBheWxvYWRbMF07CS8qIHNwYWNlIHJlbWFpbmluZyBpbiBwYWNrZXQgKDUwNCBieXRlcykqLworICAgIF9fdTggIHBheWxvYWRbMF07CS8qIHNwYWNlIHJlbWFpbmluZyBpbiBwYWNrZXQgKDUwNCBieXRlcykqLwogfTsKICNkZWZpbmUgUkZDMTIwMV9IRFJfU0laRSA0CiAKQEAgLTcwLDggKzcxLDggQEAKICAqLwogc3RydWN0IGFyY19yZmMxMDUxCiB7Ci0gICAgdWludDhfdCBwcm90bzsJCS8qIEFSQ19QX1JGQzEwNTFfQVJQL1JGQzEwNTFfSVAJKi8KLSAgICB1aW50OF90IHBheWxvYWRbMF07CQkvKiA1MDcgYnl0ZXMJCQkqLworICAgIF9fdTggcHJvdG87CQkvKiBBUkNfUF9SRkMxMDUxX0FSUC9SRkMxMDUxX0lQCSovCisgICAgX191OCBwYXlsb2FkWzBdOwkJLyogNTA3IGJ5dGVzCQkJKi8KIH07CiAjZGVmaW5lIFJGQzEwNTFfSERSX1NJWkUgMQogCkBAIC04MiwyMCArODMsMjAgQEAKICAqLwogc3RydWN0IGFyY19ldGhfZW5jYXAKIHsKLSAgICB1aW50OF90IHByb3RvOwkJLyogQWx3YXlzIEFSQ19QX0VUSEVSCQkJKi8KKyAgICBfX3U4IHByb3RvOwkJLyogQWx3YXlzIEFSQ19QX0VUSEVSCQkJKi8KICAgICBzdHJ1Y3QgZXRoaGRyIGV0aDsJCS8qIHN0YW5kYXJkIGV0aGVybmV0IGhlYWRlciAoeXVjayEpCSovCi0gICAgdWludDhfdCBwYXlsb2FkWzBdOwkJLyogNDkzIGJ5dGVzCQkJCSovCisgICAgX191OCBwYXlsb2FkWzBdOwkJLyogNDkzIGJ5dGVzCQkJCSovCiB9OwogI2RlZmluZSBFVEhfRU5DQVBfSERSX1NJWkUgMTQKIAogCiBzdHJ1Y3QgYXJjX2NhcAogewotCXVpbnQ4X3QgcHJvdG87Ci0JdWludDhfdCBjb29raWVbc2l6ZW9mKGludCldOyAgIC8qIEFjdHVhbGx5IE5PVCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgKi8KKwlfX3U4IHByb3RvOworCV9fdTggY29va2llW3NpemVvZihpbnQpXTsgICAvKiBBY3R1YWxseSBOT1Qgc2VudCBvdmVyIHRoZSBuZXR3b3JrICovCiAJdW5pb24gewotCQl1aW50OF90IGFjazsKLQkJdWludDhfdCByYXdbMF07CQkvKiA1MDcgYnl0ZXMgKi8KKwkJX191OCBhY2s7CisJCV9fdTggcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCiAJfSBtZXM7CiB9OwogCkBAIC0xMDksNyArMTEwLDcgQEAKICAqLwogc3RydWN0IGFyY19oYXJkd2FyZQogewotICAgIHVpbnQ4X3QgIHNvdXJjZSwJCS8qIHNvdXJjZSBBUkNuZXQgLSBmaWxsZWQgaW4gYXV0b21hZ2ljYWxseSAqLworICAgIF9fdTggIHNvdXJjZSwJCS8qIHNvdXJjZSBBUkNuZXQgLSBmaWxsZWQgaW4gYXV0b21hZ2ljYWxseSAqLwogICAgICAgICAgICAgIGRlc3QsCQkvKiBkZXN0aW5hdGlvbiBBUkNuZXQgLSAwIGZvciBicm9hZGNhc3QgICAgKi8KICAgICAJICAgICBvZmZzZXRbMl07CQkvKiBvZmZzZXQgYnl0ZXMgKHNvbWUgd2VpcmQgc2VtYW50aWNzKSAgICAgKi8KIH07CkBAIC0xMzAsNyArMTMxLDcgQEAKIAlzdHJ1Y3QgYXJjX3JmYzEwNTEgICByZmMxMDUxOwogCXN0cnVjdCBhcmNfZXRoX2VuY2FwIGV0aF9lbmNhcDsKIAlzdHJ1Y3QgYXJjX2NhcCAgICAgICBjYXA7Ci0JdWludDhfdCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KKwlfX3U4IHJhd1swXTsJCS8qIDUwOCBieXRlcwkJCQkqLwogICAgIH0gc29mdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaCBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAppbmRleCA3ZjNjNzM1Li5jZmU0ZmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotIAorCiAjaWZuZGVmIF9MSU5VWF9JRl9FVEhFUl9ICiAjZGVmaW5lIF9MSU5VWF9JRl9FVEhFUl9ICiAKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoKICAqCUlFRUUgODAyLjMgRXRoZXJuZXQgbWFnaWMgY29uc3RhbnRzLiAgVGhlIGZyYW1lIHNpemVzIG9taXQgdGhlIHByZWFtYmxlCi0gKglhbmQgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLiAKKyAqCWFuZCBGQ1MvQ1JDIChmcmFtZSBjaGVjayBzZXF1ZW5jZSkuCiAgKi8KIAogI2RlZmluZSBFVEhfQUxFTgk2CQkvKiBPY3RldHMgaW4gb25lIGV0aGVybmV0IGFkZHIJICovCkBAIC03OCwxMiArNzgsMTMgQEAKICNkZWZpbmUgRVRIX1BfUEFFCTB4ODg4RQkJLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KICNkZWZpbmUgRVRIX1BfQU9FCTB4ODhBMgkJLyogQVRBIG92ZXIgRXRoZXJuZXQJCSovCiAjZGVmaW5lIEVUSF9QX1RJUEMJMHg4OENBCQkvKiBUSVBDIAkJCSovCisjZGVmaW5lIEVUSF9QX0ZDT0UJMHg4OTA2CQkvKiBGaWJyZSBDaGFubmVsIG92ZXIgRXRoZXJuZXQgICovCiAjZGVmaW5lIEVUSF9QX0VEU0EJMHhEQURBCQkvKiBFdGhlcnR5cGUgRFNBIFsgTk9UIEFOIE9GRklDSUFMTFkgUkVHSVNURVJFRCBJRCBdICovCiAKIC8qCiAgKglOb24gRElYIHR5cGVzLiBXb24ndCBjbGFzaCBmb3IgMTUwMCB0eXBlcy4KICAqLwotIAorCiAjZGVmaW5lIEVUSF9QXzgwMl8zCTB4MDAwMQkJLyogRHVtbXkgdHlwZSBmb3IgODAyLjMgZnJhbWVzICAqLwogI2RlZmluZSBFVEhfUF9BWDI1CTB4MDAwMgkJLyogRHVtbXkgcHJvdG9jb2wgaWQgZm9yIEFYLjI1ICAqLwogI2RlZmluZSBFVEhfUF9BTEwJMHgwMDAzCQkvKiBFdmVyeSBwYWNrZXQgKGJlIGNhcmVmdWwhISEpICovCkBAIC0xMDksNyArMTEwLDcgQEAKIC8qCiAgKglUaGlzIGlzIGFuIEV0aGVybmV0IGZyYW1lIGhlYWRlci4KICAqLwotIAorCiBzdHJ1Y3QgZXRoaGRyIHsKIAl1bnNpZ25lZCBjaGFyCWhfZGVzdFtFVEhfQUxFTl07CS8qIGRlc3RpbmF0aW9uIGV0aCBhZGRyCSovCiAJdW5zaWduZWQgY2hhcgloX3NvdXJjZVtFVEhfQUxFTl07CS8qIHNvdXJjZSBldGhlciBhZGRyCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaCBiL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCmluZGV4IDYwZTE2YTUuLjY3M2YyMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oCkBAIC0xNTMsNyArMTUzLDYgQEAKIAogc3RydWN0IGRsY2lfbG9jYWwKIHsKLSAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgc3RydWN0IG5ldF9kZXZpY2UgICAgICAqbWFzdGVyOwogICAgc3RydWN0IG5ldF9kZXZpY2UgICAgICAqc2xhdmU7CiAgICBzdHJ1Y3QgZGxjaV9jb25mICAgICAgIGNvbmZpZzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaAppbmRleCBjN2E2Njg4Li4zYTE0YjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKi8KIHN0cnVjdCBwcHBvbDJ0cF9hZGRyCiB7Ci0JcGlkX3QJcGlkOwkJCS8qIHBpZCB0aGF0IG93bnMgdGhlIGZkLgorCV9fa2VybmVsX3BpZF90CXBpZDsJCS8qIHBpZCB0aGF0IG93bnMgdGhlIGZkLgogCQkJCQkgKiAwID0+IGN1cnJlbnQgKi8KIAlpbnQJZmQ7CQkJLyogRkQgb2YgVURQIHNvY2tldCB0byB1c2UgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCmluZGV4IDMwYzg4YjIuLjkwYjVmYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKQEAgLTk1LDE2ICs5NSwxNiBAQAogfSBfX2F0dHJpYnV0ZSAoKHBhY2tlZCkpOwogCiAvKiBUYWcgaWRlbnRpZmllcnMgKi8KLSNkZWZpbmUgUFRUX0VPTAkJX19jb25zdGFudF9odG9ucygweDAwMDApCi0jZGVmaW5lIFBUVF9TUlZfTkFNRQlfX2NvbnN0YW50X2h0b25zKDB4MDEwMSkKLSNkZWZpbmUgUFRUX0FDX05BTUUJX19jb25zdGFudF9odG9ucygweDAxMDIpCi0jZGVmaW5lIFBUVF9IT1NUX1VOSVEJX19jb25zdGFudF9odG9ucygweDAxMDMpCi0jZGVmaW5lIFBUVF9BQ19DT09LSUUJX19jb25zdGFudF9odG9ucygweDAxMDQpCi0jZGVmaW5lIFBUVF9WRU5ET1IgCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQotI2RlZmluZSBQVFRfUkVMQVlfU0lECV9fY29uc3RhbnRfaHRvbnMoMHgwMTEwKQotI2RlZmluZSBQVFRfU1JWX0VSUiAgICAgX19jb25zdGFudF9odG9ucygweDAyMDEpCi0jZGVmaW5lIFBUVF9TWVNfRVJSICAJX19jb25zdGFudF9odG9ucygweDAyMDIpCi0jZGVmaW5lIFBUVF9HRU5fRVJSICAJX19jb25zdGFudF9odG9ucygweDAyMDMpCisjZGVmaW5lIFBUVF9FT0wJCV9fY3B1X3RvX2JlMTYoMHgwMDAwKQorI2RlZmluZSBQVFRfU1JWX05BTUUJX19jcHVfdG9fYmUxNigweDAxMDEpCisjZGVmaW5lIFBUVF9BQ19OQU1FCV9fY3B1X3RvX2JlMTYoMHgwMTAyKQorI2RlZmluZSBQVFRfSE9TVF9VTklRCV9fY3B1X3RvX2JlMTYoMHgwMTAzKQorI2RlZmluZSBQVFRfQUNfQ09PS0lFCV9fY3B1X3RvX2JlMTYoMHgwMTA0KQorI2RlZmluZSBQVFRfVkVORE9SIAlfX2NwdV90b19iZTE2KDB4MDEwNSkKKyNkZWZpbmUgUFRUX1JFTEFZX1NJRAlfX2NwdV90b19iZTE2KDB4MDExMCkKKyNkZWZpbmUgUFRUX1NSVl9FUlIgICAgIF9fY3B1X3RvX2JlMTYoMHgwMjAxKQorI2RlZmluZSBQVFRfU1lTX0VSUiAgCV9fY3B1X3RvX2JlMTYoMHgwMjAyKQorI2RlZmluZSBQVFRfR0VOX0VSUiAgCV9fY3B1X3RvX2JlMTYoMHgwMjAzKQogCiBzdHJ1Y3QgcHBwb2VfaGRyIHsKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCmluZGV4IDg1MjlmNTcuLjA0OWQ2YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaApAQCAtNDYsNiArNDYsOCBAQAogI2RlZmluZSBUVU5TRVRPRkZMT0FEICBfSU9XKCdUJywgMjA4LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTlNFVFRYRklMVEVSIF9JT1coJ1QnLCAyMDksIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVFVOR0VUSUZGICAgICAgX0lPUignVCcsIDIxMCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBUVU5HRVRTTkRCVUYgICBfSU9SKCdUJywgMjExLCBpbnQpCisjZGVmaW5lIFRVTlNFVFNOREJVRiAgIF9JT1coJ1QnLCAyMTIsIGludCkKIAogLyogVFVOU0VUSUZGIGlmciBmbGFncyAqLwogI2RlZmluZSBJRkZfVFVOCQkweDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCmluZGV4IDgyYzQzNjI0Li41YTlhYWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKQEAgLTE2LDE0ICsxNiwxNCBAQAogI2RlZmluZSBTSU9DREVMUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNikKICNkZWZpbmUgU0lPQ0NIR1BSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDcpCiAKLSNkZWZpbmUgR1JFX0NTVU0JX19jb25zdGFudF9odG9ucygweDgwMDApCi0jZGVmaW5lIEdSRV9ST1VUSU5HCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQotI2RlZmluZSBHUkVfS0VZCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKLSNkZWZpbmUgR1JFX1NFUQkJX19jb25zdGFudF9odG9ucygweDEwMDApCi0jZGVmaW5lIEdSRV9TVFJJQ1QJX19jb25zdGFudF9odG9ucygweDA4MDApCi0jZGVmaW5lIEdSRV9SRUMJCV9fY29uc3RhbnRfaHRvbnMoMHgwNzAwKQotI2RlZmluZSBHUkVfRkxBR1MJX19jb25zdGFudF9odG9ucygweDAwRjgpCi0jZGVmaW5lIEdSRV9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA3KQorI2RlZmluZSBHUkVfQ1NVTQlfX2NwdV90b19iZTE2KDB4ODAwMCkKKyNkZWZpbmUgR1JFX1JPVVRJTkcJX19jcHVfdG9fYmUxNigweDQwMDApCisjZGVmaW5lIEdSRV9LRVkJCV9fY3B1X3RvX2JlMTYoMHgyMDAwKQorI2RlZmluZSBHUkVfU0VRCQlfX2NwdV90b19iZTE2KDB4MTAwMCkKKyNkZWZpbmUgR1JFX1NUUklDVAlfX2NwdV90b19iZTE2KDB4MDgwMCkKKyNkZWZpbmUgR1JFX1JFQwkJX19jcHVfdG9fYmUxNigweDA3MDApCisjZGVmaW5lIEdSRV9GTEFHUwlfX2NwdV90b19iZTE2KDB4MDBGOCkKKyNkZWZpbmUgR1JFX1ZFUlNJT04JX19jcHVfdG9fYmUxNigweDAwMDcpCiAKIHN0cnVjdCBpcF90dW5uZWxfcGFybQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbWEuaCBiL2luY2x1ZGUvbGludXgvaW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyYWE0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW1hLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9JTUFfSAorI2RlZmluZSBfTElOVVhfSU1BX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CitzdHJ1Y3QgbGludXhfYmlucHJtOworCisjaWZkZWYgQ09ORklHX0lNQQorZXh0ZXJuIGludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKK2V4dGVybiBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzayk7CitleHRlcm4gdm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKK2V4dGVybiBpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KTsKK2V4dGVybiB2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpOworCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9zaG1fY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuOworfQorI2VuZGlmIC8qIENPTkZJR19JTUFfSCAqLworI2VuZGlmIC8qIF9MSU5VWF9JTUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbjYuaCBiL2luY2x1ZGUvbGludXgvaW42LmgKaW5kZXggYmM0OTIwNC4uNzE4YmYyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luNi5oCkBAIC00NCwxMSArNDQsMTEgQEAKICAqIE5PVEU6IEJlIGF3YXJlIHRoZSBJTjZBRERSXyogY29uc3RhbnRzIGFuZCBpbjZhZGRyXyogZXh0ZXJuYWxzIGFyZSBkZWZpbmVkCiAgKiBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIG5vdCBpbiBob3N0IGJ5dGUgb3JkZXIgYXMgYXJlIHRoZSBJUHY0IGVxdWl2YWxlbnRzCiAgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfYW55OwogI2RlZmluZSBJTjZBRERSX0FOWV9JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfSB9IH0KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9sb29wYmFjazsKICNkZWZpbmUgSU42QUREUl9MT09QQkFDS19JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEgfSB9IH0KLSNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbGlua2xvY2FsX2FsbG5vZGVzOwogI2RlZmluZSBJTjZBRERSX0xJTktMT0NBTF9BTExOT0RFU19JTklUCVwKIAkJeyB7IHsgMHhmZiwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCAwNmZjZGI0Li5hY2VmMmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMTA4LDYgKzEwOCw3IEBACiAjZGVmaW5lIElOX0RFVl9BUlBGSUxURVIoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBBUlBGSUxURVIpCiAjZGVmaW5lIElOX0RFVl9BUlBfQU5OT1VOQ0UoaW5fZGV2KQlJTl9ERVZfTUFYQ09ORigoaW5fZGV2KSwgQVJQX0FOTk9VTkNFKQogI2RlZmluZSBJTl9ERVZfQVJQX0lHTk9SRShpbl9kZXYpCUlOX0RFVl9NQVhDT05GKChpbl9kZXYpLCBBUlBfSUdOT1JFKQorI2RlZmluZSBJTl9ERVZfQVJQX05PVElGWShpbl9kZXYpCUlOX0RFVl9NQVhDT05GKChpbl9kZXYpLCBBUlBfTk9USUZZKQogCiBzdHJ1Y3QgaW5faWZhZGRyCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCBlNzUyZDk3M2YuLmFmMWRlOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJCS5ucl9jcHVzX2FsbG93ZWQgPSBOUl9DUFVTLAkJCQlcCiAJfSwJCQkJCQkJCVwKIAkudGFza3MJCT0gTElTVF9IRUFEX0lOSVQodHNrLnRhc2tzKSwJCQlcCisJLnB1c2hhYmxlX3Rhc2tzID0gUExJU1RfTk9ERV9JTklUKHRzay5wdXNoYWJsZV90YXNrcywgTUFYX1BSSU8pLCBcCiAJLnB0cmFjZWQJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlZCksCQkJXAogCS5wdHJhY2VfZW50cnkJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlX2VudHJ5KSwJCVwKIAkucmVhbF9wYXJlbnQJPSAmdHNrLAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCAxMjQ5YTBjLi42YjI4MDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC02NjEsNiArNjYxLDcgQEAKICNkZWZpbmUgU1dfRE9DSwkJCTB4MDUgIC8qIHNldCA9IHBsdWdnZWQgaW50byBkb2NrICovCiAjZGVmaW5lIFNXX0xJTkVPVVRfSU5TRVJUCTB4MDYgIC8qIHNldCA9IGluc2VydGVkICovCiAjZGVmaW5lIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJUIDB4MDcgIC8qIHNldCA9IG1lY2hhbmljYWwgc3dpdGNoIHNldCAqLworI2RlZmluZSBTV19WSURFT09VVF9JTlNFUlQJMHgwOCAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfTUFYCQkJMHgwZgogI2RlZmluZSBTV19DTlQJCQkoU1dfTUFYKzEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDkxMjdmNmIuLjBjOWNiNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNjEsNiArNjEsMTcgQEAKIAogdHlwZWRlZiBpcnFyZXR1cm5fdCAoKmlycV9oYW5kbGVyX3QpKGludCwgdm9pZCAqKTsKIAorLyoqCisgKiBzdHJ1Y3QgaXJxYWN0aW9uIC0gcGVyIGludGVycnVwdCBhY3Rpb24gZGVzY3JpcHRvcgorICogQGhhbmRsZXI6CWludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uCisgKiBAZmxhZ3M6CWZsYWdzIChzZWUgSVJRRl8qIGFib3ZlKQorICogQG1hc2s6CW5vIGNvbW1lbnQgYXMgaXQgaXMgdXNlbGVzcyBhbmQgYWJvdXQgdG8gYmUgcmVtb3ZlZAorICogQG5hbWU6CW5hbWUgb2YgdGhlIGRldmljZQorICogQGRldl9pZDoJY29va2llIHRvIGlkZW50aWZ5IHRoZSBkZXZpY2UKKyAqIEBuZXh0Oglwb2ludGVyIHRvIHRoZSBuZXh0IGlycWFjdGlvbiBmb3Igc2hhcmVkIGludGVycnVwdHMKKyAqIEBpcnE6CWludGVycnVwdCBudW1iZXIKKyAqIEBkaXI6CXBvaW50ZXIgdG8gdGhlIHByb2MvaXJxL05OL25hbWUgZW50cnkKKyAqLwogc3RydWN0IGlycWFjdGlvbiB7CiAJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NjIsMTEgKzQ3MywxOCBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX0hBUkRJUlFTKSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19TSElSUSkKK2V4dGVybiB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKSB7IH0KKyNlbmRpZgorCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiAKIHN0cnVjdCBpcnFfZGVzYzsKIAogZXh0ZXJuIGludCBlYXJseV9pcnFfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgYXJjaF9wcm9iZV9ucl9pcnFzKHZvaWQpOwogZXh0ZXJuIGludCBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBhcmNoX2luaXRfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBfdnMuaCBiL2luY2x1ZGUvbGludXgvaXBfdnMuaAppbmRleCAwZjQzNGEyLi4xNDgyNjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcF92cy5oCkBAIC05NiwxMCArOTYsMTAgQEAKICAqLwogc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlciB7CiAJLyogdmlydHVhbCBzZXJ2aWNlIGFkZHJlc3NlcyAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGlwIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIHZpcnR1YWwgc2VydmljZSBvcHRpb25zICovCiAJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CkBAIC0xMTksOCArMTE5LDggQEAKIAlpbnQJCQl3ZWlnaHQ7CQkvKiBkZXN0aW5hdGlvbiB3ZWlnaHQgKi8KIAogCS8qIHRocmVzaG9sZHMgZm9yIGFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwotCXVfaW50MzJfdAkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLworCV9fdTMyCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJX191MzIJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KIH07CiAKIApAQCAtMTU5LDEwICsxNTksMTAgQEAKIC8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfU0VSVklDRSAqLwogc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkgewogCS8qIHdoaWNoIHNlcnZpY2U6IHVzZXIgZmlsbHMgaW4gdGhlc2UgKi8KLQl1X2ludDE2X3QJCXByb3RvY29sOworCV9fdTE2CQlwcm90b2NvbDsKIAlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBhZGRyZXNzICovCiAJX19iZTE2CQkJcG9ydDsKLQl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisJX191MzIJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiBzZXJ2aWNlIG9wdGlvbnMgKi8KIAljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKQEAgLTE4NCwxMiArMTg0LDEyIEBACiAJdW5zaWduZWQJCWNvbm5fZmxhZ3M7CS8qIGNvbm5lY3Rpb24gZmxhZ3MgKi8KIAlpbnQJCQl3ZWlnaHQ7CQkvKiBkZXN0aW5hdGlvbiB3ZWlnaHQgKi8KIAotCXVfaW50MzJfdAkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLwotCXVfaW50MzJfdAkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLworCV9fdTMyCQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCisJX191MzIJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KIAotCXVfaW50MzJfdAkJYWN0aXZlY29ubnM7CS8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJaW5hY3Rjb25uczsJLyogaW5hY3RpdmUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDMyX3QJCXBlcnNpc3Rjb25uczsJLyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqLworCV9fdTMyCQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCWluYWN0Y29ubnM7CS8qIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCisJX191MzIJCXBlcnNpc3Rjb25uczsJLyogcGVyc2lzdGVudCBjb25uZWN0aW9ucyAqLwogCiAJLyogc3RhdGlzdGljcyAqLwogCXN0cnVjdCBpcF92c19zdGF0c191c2VyIHN0YXRzOwpAQCAtMTk5LDEwICsxOTksMTAgQEAKIC8qIFRoZSBhcmd1bWVudCB0byBJUF9WU19TT19HRVRfREVTVFMgKi8KIHN0cnVjdCBpcF92c19nZXRfZGVzdHMgewogCS8qIHdoaWNoIHNlcnZpY2U6IHVzZXIgZmlsbHMgaW4gdGhlc2UgKi8KLQl1X2ludDE2X3QJCXByb3RvY29sOworCV9fdTE2CQlwcm90b2NvbDsKIAlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBhZGRyZXNzICovCiAJX19iZTE2CQkJcG9ydDsKLQl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisJX191MzIJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiBudW1iZXIgb2YgcmVhbCBzZXJ2ZXJzICovCiAJdW5zaWduZWQgaW50CQludW1fZGVzdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBmODk5YjUwLi44NzNlNGFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTE2MCwxMiArMTYwLDEwIEBACiAgKi8KIHN0cnVjdCBpcnFfZGVzYyB7CiAJdW5zaWduZWQgaW50CQlpcnE7Ci0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqdGltZXJfcmFuZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAqa3N0YXRfaXJxczsKLSMgaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCXN0cnVjdCBpcnFfMl9pb21tdSAgICAgICppcnFfMl9pb21tdTsKLSMgZW5kaWYKICNlbmRpZgogCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVfaXJxOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CkBAIC0xODIsMTEgKzE4MCwxMSBAQAogCXVuc2lnbmVkIGludAkJaXJxc191bmhhbmRsZWQ7CiAJc3BpbmxvY2tfdAkJbG9jazsKICNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza190CQlhZmZpbml0eTsKKwljcHVtYXNrX3Zhcl90CQlhZmZpbml0eTsKIAl1bnNpZ25lZCBpbnQJCWNwdTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCi0JY3B1bWFza190CQlwZW5kaW5nX21hc2s7CisJY3B1bWFza192YXJfdAkJcGVuZGluZ19tYXNrOworI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqZGlyOwpAQCAtMjAyLDEyICsyMDAsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXTsKICNlbHNlIC8qIENPTkZJR19TUEFSU0VfSVJRICovCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICptb3ZlX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIGludCBjcHUpOwotCi0jZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAotCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKLSNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCi0JKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCi0KICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFX0lSUSAqLwogCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzY19hbGxvY19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CkBAIC0yMjYsNyArMjE4LDYgQEAKICAqIE1pZ3JhdGlvbiBoZWxwZXJzIGZvciBvYnNvbGV0ZSBuYW1lcywgdGhleSB3aWxsIGdvIGF3YXk6CiAgKi8KICNkZWZpbmUgaHdfaW50ZXJydXB0X3R5cGUJaXJxX2NoaXAKLXR5cGVkZWYgc3RydWN0IGlycV9jaGlwCQlod19pcnFfY29udHJvbGxlcjsKICNkZWZpbmUgbm9faXJxX3R5cGUJCW5vX2lycV9jaGlwCiB0eXBlZGVmIHN0cnVjdCBpcnFfZGVzYwkJaXJxX2Rlc2NfdDsKIApAQCAtMjM2LDYgKzIyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3QpOwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIApAQCAtMjgwLDcgKzI3Miw3IEBACiB9CiAKIC8qIEhhbmRsZSBpcnEgYWN0aW9uIGNoYWluczogKi8KLWV4dGVybiBpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworZXh0ZXJuIGlycXJldHVybl90IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAogLyoKICAqIEJ1aWx0LWluIElSUSBoYW5kbGVycyBmb3IgdmFyaW91cyBJUlEgdHlwZXMsCkBAIC0zMjUsNyArMzE3LDcgQEAKIAogLyogSGFuZGxpbmcgb2YgdW5oYW5kbGVkIGFuZCBzcHVyaW91cyBpbnRlcnJ1cHRzOiAqLwogZXh0ZXJuIHZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAotCQkJICAgaW50IGFjdGlvbl9yZXQpOworCQkJICAgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCk7CiAKIC8qIFJlc2VuZGluZyBvZiBpbnRlcnJ1cHRzIDoqLwogdm9pZCBjaGVja19pcnFfcmVzZW5kKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSk7CkBAIC00MjIsNCArNDE0LDg0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1MzOTAgKi8KIAorI2lmZGVmIENPTkZJR19TTVAKKy8qKgorICogaW5pdF9hbGxvY19kZXNjX21hc2tzIC0gYWxsb2NhdGUgY3B1bWFza3MgZm9yIGlycV9kZXNjCisgKiBAZGVzYzoJcG9pbnRlciB0byBpcnFfZGVzYyBzdHJ1Y3QKKyAqIEBjcHU6CWNwdSB3aGljaCB3aWxsIGJlIGhhbmRsaW5nIHRoZSBjcHVtYXNrcworICogQGJvb3Q6CXRydWUgaWYgbmVlZCBib290bWVtCisgKgorICogQWxsb2NhdGVzIGFmZmluaXR5IGFuZCBwZW5kaW5nX21hc2sgY3B1bWFzayBpZiByZXF1aXJlZC4KKyAqIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsIChvciBub3QgcmVxdWlyZWQpLgorICogU2lkZSBlZmZlY3Q6IGFmZmluaXR5IGhhcyBhbGwgYml0cyBzZXQsIHBlbmRpbmdfbWFzayBoYXMgYWxsIGJpdHMgY2xlYXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpbml0X2FsbG9jX2Rlc2NfbWFza3Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LAorCQkJCQkJCQlib29sIGJvb3QpCit7CisJaW50IG5vZGU7CisKKwlpZiAoYm9vdCkgeworCQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZkZXNjLT5hZmZpbml0eSk7CisJCWNwdW1hc2tfc2V0YWxsKGRlc2MtPmFmZmluaXR5KTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmRlc2MtPnBlbmRpbmdfbWFzayk7CisJCWNwdW1hc2tfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKKyNlbmRpZgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKworCWlmICghYWxsb2NfY3B1bWFza192YXJfbm9kZSgmZGVzYy0+YWZmaW5pdHksIEdGUF9BVE9NSUMsIG5vZGUpKQorCQlyZXR1cm4gZmFsc2U7CisJY3B1bWFza19zZXRhbGwoZGVzYy0+YWZmaW5pdHkpOworCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyX25vZGUoJmRlc2MtPnBlbmRpbmdfbWFzaywgR0ZQX0FUT01JQywgbm9kZSkpIHsKKwkJZnJlZV9jcHVtYXNrX3ZhcihkZXNjLT5hZmZpbml0eSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOworI2VuZGlmCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogaW5pdF9jb3B5X2Rlc2NfbWFza3MgLSBjb3B5IGNwdW1hc2tzIGZvciBpcnFfZGVzYworICogQG9sZF9kZXNjOglwb2ludGVyIHRvIG9sZCBpcnFfZGVzYyBzdHJ1Y3QKKyAqIEBuZXdfZGVzYzoJcG9pbnRlciB0byBuZXcgaXJxX2Rlc2Mgc3RydWN0CisgKgorICogSW5zdXJlcyBhZmZpbml0eSBhbmQgcGVuZGluZ19tYXNrcyBhcmUgY29waWVkIHRvIG5ldyBpcnFfZGVzYy4KKyAqIElmICFDT05GSUdfQ1BVTUFTS1NfT0ZGU1RBQ0sgdGhlIGNwdW1hc2tzIGFyZSBlbWJlZGRlZCBpbiB0aGUKKyAqIGlycV9kZXNjIHN0cnVjdCBzbyB0aGUgY29weSBpcyByZWR1bmRhbnQuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29weV9kZXNjX21hc2tzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCisJCQkJCXN0cnVjdCBpcnFfZGVzYyAqbmV3X2Rlc2MpCit7CisjaWZkZWYgQ09ORklHX0NQVU1BU0tTX09GRlNUQUNLCisJY3B1bWFza19jb3B5KG5ld19kZXNjLT5hZmZpbml0eSwgb2xkX2Rlc2MtPmFmZmluaXR5KTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJY3B1bWFza19jb3B5KG5ld19kZXNjLT5wZW5kaW5nX21hc2ssIG9sZF9kZXNjLT5wZW5kaW5nX21hc2spOworI2VuZGlmCisjZW5kaWYKK30KKworI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSBib29sIGluaXRfYWxsb2NfZGVzY19tYXNrcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUsCisJCQkJCQkJCWJvb2wgYm9vdCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29weV9kZXNjX21hc2tzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCisJCQkJCXN0cnVjdCBpcnFfZGVzYyAqbmV3X2Rlc2MpCit7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfU01QICovCisKICNlbmRpZiAvKiBfTElOVVhfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxbnIuaCBiL2luY2x1ZGUvbGludXgvaXJxbnIuaAppbmRleCA4NmFmOTJlLi5lYzg3YjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycW5yLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCkBAIC0yMCw2ICsyMCw3IEBACiAKICMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaXJxLCBkZXNjKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWZvciAoaXJxID0gbnJfaXJxcyAtIDE7IGlycSA+PSAwOyBpcnEtLSkKKwogI2Vsc2UgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIAogZXh0ZXJuIGludCBucl9pcnFzOwpAQCAtMjgsMTMgKzI5LDE3IEBACiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQkJCQlcCiAJZm9yIChpcnEgPSAwLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsgaXJxIDwgbnJfaXJxczsJCVwKIAkgICAgIGlycSsrLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkJCQkJXAotCQlpZiAoZGVzYykKKwkJaWYgKCFkZXNjKQkJCQkJCVwKKwkJCTsJCQkJCQlcCisJCWVsc2UKIAogCiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGlycSwgZGVzYykJCQkJXAogCWZvciAoaXJxID0gbnJfaXJxcyAtIDEsIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOyBpcnEgPj0gMDsJXAogCSAgICAgaXJxLS0sIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpKQkJCQlcCi0JCWlmIChkZXNjKQorCQlpZiAoIWRlc2MpCQkJCQkJXAorCQkJOwkJCQkJCVwKKwkJZWxzZQogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaCBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKaW5kZXggODgxODgzYy4uYzU1ODRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCkBAIC0xLDI1ICsxLDE3IEBACi0vKiBpcnFyZXR1cm4uaCAqLwogI2lmbmRlZiBfTElOVVhfSVJRUkVUVVJOX0gKICNkZWZpbmUgX0xJTlVYX0lSUVJFVFVSTl9ICiAKLS8qCi0gKiBGb3IgMi40LnggY29tcGF0aWJpbGl0eSwgMi40LnggY2FuIHVzZQotICoKLSAqCXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSAqCSNkZWZpbmUgSVJRX05PTkUKLSAqCSNkZWZpbmUgSVJRX0hBTkRMRUQKLSAqCSNkZWZpbmUgSVJRX1JFVFZBTCh4KQotICoKLSAqIFRvIG1peCBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBpcnEgaGFuZGxlciByZXR1cm5zLgotICoKLSAqIElSUV9OT05FIG1lYW5zIHdlIGRpZG4ndCBoYW5kbGUgaXQuCi0gKiBJUlFfSEFORExFRCBtZWFucyB0aGF0IHdlIGRpZCBoYXZlIGEgdmFsaWQgaW50ZXJydXB0IGFuZCBoYW5kbGVkIGl0LgotICogSVJRX1JFVFZBTCh4KSBzZWxlY3RzIG9uIHRoZSB0d28gZGVwZW5kaW5nIG9uIHggYmVpbmcgbm9uLXplcm8gKGZvciBoYW5kbGVkKQorLyoqCisgKiBlbnVtIGlycXJldHVybgorICogQElSUV9OT05FCQlpbnRlcnJ1cHQgd2FzIG5vdCBmcm9tIHRoaXMgZGV2aWNlCisgKiBASVJRX0hBTkRMRUQJCWludGVycnVwdCB3YXMgaGFuZGxlZCBieSB0aGlzIGRldmljZQogICovCi10eXBlZGVmIGludCBpcnFyZXR1cm5fdDsKK2VudW0gaXJxcmV0dXJuIHsKKwlJUlFfTk9ORSwKKwlJUlFfSEFORExFRCwKK307CiAKLSNkZWZpbmUgSVJRX05PTkUJKDApCi0jZGVmaW5lIElSUV9IQU5ETEVECSgxKQotI2RlZmluZSBJUlFfUkVUVkFMKHgpCSgoeCkgIT0gMCkKK3R5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CisjZGVmaW5lIElSUV9SRVRWQUwoeCkJKCh4KSAhPSBJUlFfTk9ORSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oIGIvaW5jbHVkZS9saW51eC9pdnR2ZmIuaAppbmRleCBlMjBhZjQ3Li45ZDg4YjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKQEAgLTMzLDYgKzMzLDYgQEAKIH07CiAKICNkZWZpbmUgSVZUVkZCX0lPQ19ETUFfRlJBTUUgCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2ZmJfZG1hX2ZyYW1lKQotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMi5oIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCmluZGV4IGRhNzIwYmMuLjJiMzJkNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamZmczIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpZm5kZWYgX19MSU5VWF9KRkZTMl9IX18KICNkZWZpbmUgX19MSU5VWF9KRkZTMl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogLyogWW91IG11c3QgaW5jbHVkZSBzb21ldGhpbmcgd2hpY2ggZGVmaW5lcyB0aGUgQzk5IHVpbnRYWF90IHR5cGVzLiAKQEAgLTkxLDE1ICs5MiwxNSBAQAogICAgYnl0ZXN3YXBwaW5nICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCB2MzI7CisJX191MzIgdjMyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MzJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG07CisJX191MzIgbTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgam1vZGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQxNl90IHYxNjsKKwlfX3UxNiB2MTY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQxNl90OwogCiBzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlCkBAIC0xMjEsMTIgKzEyMiwxMiBAQAogCWppbnQzMl90IHZlcnNpb247CiAJamludDMyX3QgaW5vOyAvKiA9PSB6ZXJvIGZvciB1bmxpbmsgKi8KIAlqaW50MzJfdCBtY3RpbWU7Ci0JdWludDhfdCBuc2l6ZTsKLQl1aW50OF90IHR5cGU7Ci0JdWludDhfdCB1bnVzZWRbMl07CisJX191OCBuc2l6ZTsKKwlfX3U4IHR5cGU7CisJX191OCB1bnVzZWRbMl07CiAJamludDMyX3Qgbm9kZV9jcmM7CiAJamludDMyX3QgbmFtZV9jcmM7Ci0JdWludDhfdCBuYW1lWzBdOworCV9fdTggbmFtZVswXTsKIH07CiAKIC8qIFRoZSBKRkZTMiByYXcgaW5vZGUgc3RydWN0dXJlOiBVc2VkIGZvciBzdG9yYWdlIG9uIHBoeXNpY2FsIG1lZGlhLiAgKi8KQEAgLTE1MywxMiArMTU0LDEyIEBACiAJamludDMyX3Qgb2Zmc2V0OyAgICAgLyogV2hlcmUgdG8gYmVnaW4gdG8gd3JpdGUuICAqLwogCWppbnQzMl90IGNzaXplOyAgICAgIC8qIChDb21wcmVzc2VkKSBkYXRhIHNpemUgKi8KIAlqaW50MzJfdCBkc2l6ZTsJICAgICAvKiBTaXplIG9mIHRoZSBub2RlJ3MgZGF0YS4gKGFmdGVyIGRlY29tcHJlc3Npb24pICovCi0JdWludDhfdCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KLQl1aW50OF90IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCisJX191OCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KKwlfX3U4IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCiAJamludDE2X3QgZmxhZ3M7CSAgICAgLyogU2VlIEpGRlMyX0lOT19GTEFHXyogKi8KIAlqaW50MzJfdCBkYXRhX2NyYzsgICAvKiBDUkMgZm9yIHRoZSAoY29tcHJlc3NlZCkgZGF0YS4gICovCiAJamludDMyX3Qgbm9kZV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgcmF3IGlub2RlIChleGNsdWRpbmcgZGF0YSkgICovCi0JdWludDhfdCBkYXRhWzBdOworCV9fdTggZGF0YVswXTsKIH07CiAKIHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgewpAQCAtMTY4LDEyICsxNjksMTIgQEAKIAlqaW50MzJfdCBoZHJfY3JjOwogCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCiAJamludDMyX3QgdmVyc2lvbjsKLQl1aW50OF90IHhwcmVmaXg7Ci0JdWludDhfdCBuYW1lX2xlbjsKKwlfX3U4IHhwcmVmaXg7CisJX191OCBuYW1lX2xlbjsKIAlqaW50MTZfdCB2YWx1ZV9sZW47CiAJamludDMyX3QgZGF0YV9jcmM7CiAJamludDMyX3Qgbm9kZV9jcmM7Ci0JdWludDhfdCBkYXRhWzBdOworCV9fdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBqZmZzMl9yYXdfeHJlZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggN2ZhMzcxOC4uOTE0OTE4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVjaGVjay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvZHluYW1pY19kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKQEAgLTM1OCw5ICszNTgsMTAgQEAKICNpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXAogCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQotI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorLyogZHluYW1pY19wcl9kZWJ1ZygpIHVzZXMgcHJfZm10KCkgaW50ZXJuYWxseSBzbyB3ZSBkb24ndCBuZWVkIGl0IGhlcmUgKi8KICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIGRvIHsgXAotCWR5bmFtaWNfcHJfZGVidWcocHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyBcCisJZHluYW1pY19wcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggNTcwZDIwNC4uMGM4Yjg5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMjgsNyArMjgsNyBAQAogCiBzdHJ1Y3Qga2VybmVsX3N0YXQgewogCXN0cnVjdCBjcHVfdXNhZ2Vfc3RhdAljcHVzdGF0OwotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogICAgICAgIHVuc2lnbmVkIGludCBpcnFzW05SX0lSUVNdOwogI2VuZGlmCiB9OwpAQCAtNDEsNyArNDEsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5yX2NvbnRleHRfc3dpdGNoZXModm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKICNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShpcnEpIFwKIAkoa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKQogCkBAIC01MiwxNiArNTIsMTkgQEAKIHsKIAlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKIH0KLSNlbmRpZgogCi0KLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCiB7CiAgICAgICAgcmV0dXJuIGtzdGF0X2NwdShjcHUpLmlycXNbaXJxXTsKIH0KICNlbHNlCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiBleHRlcm4gdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOworI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KERFU0MpIFwKKwkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0pCisjZGVmaW5lIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnFubywgREVTQykgXAorCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSsrKQorCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKaW5kZXggNTQzN2FjMC4uNThhZThlMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC02OCwxMCArNjgsMTMgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdGVfaW5fc3lzZnM6MTsKIAl1bnNpZ25lZCBpbnQgc3RhdGVfYWRkX3VldmVudF9zZW50OjE7CiAJdW5zaWduZWQgaW50IHN0YXRlX3JlbW92ZV91ZXZlbnRfc2VudDoxOworCXVuc2lnbmVkIGludCB1ZXZlbnRfc3VwcHJlc3M6MTsKIH07CiAKIGV4dGVybiBpbnQga29iamVjdF9zZXRfbmFtZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQogCQkJICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkgIHZhX2xpc3QgdmFyZ3MpOwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtvYmplY3RfbmFtZShjb25zdCBzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggMzI4NTFlZS4uMmVjNmNjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTE4Miw2ICsxODIsMTQgQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlICosIGN1cnJlbnRfa3Byb2JlKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CiAKKy8qCisgKiBGb3IgI2lmZGVmIGF2b2lkYW5jZToKKyAqLworc3RhdGljIGlubGluZSBpbnQga3Byb2Jlc19idWlsdF9pbih2b2lkKQoreworCXJldHVybiAxOworfQorCiAjaWZkZWYgQ09ORklHX0tSRVRQUk9CRVMKIGV4dGVybiB2b2lkIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtMjcxLDggKzI3OSwxNiBAQAogdm9pZCBrcHJvYmVfZmx1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRrKTsKIHZvaWQgcmVjeWNsZV9ycF9pbnN0KHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCk7CiAKLSNlbHNlIC8qIENPTkZJR19LUFJPQkVTICovCisjZWxzZSAvKiAhQ09ORklHX0tQUk9CRVM6ICovCiAKK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZXNfYnVpbHRfaW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQoreworCXJldHVybiAwOworfQogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3Byb2JlICpnZXRfa3Byb2JlKHZvaWQgKmFkZHIpCiB7CiAJcmV0dXJuIE5VTEw7CkBAIC0zMjksNSArMzQ1LDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrcHJvYmVfZmx1c2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRrKQogewogfQotI2VuZGlmCQkJCS8qIENPTkZJR19LUFJPQkVTICovCi0jZW5kaWYJCQkJLyogX0xJTlVYX0tQUk9CRVNfSCAqLworI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCisjZW5kaWYgLyogX0xJTlVYX0tQUk9CRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggMDQyNDMyNmYuLjMxMWEwNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm0uaApAQCAtNDgsNyArNDgsMTAgQEAKIAkgKiBGb3IgSUEtNjQgKEFQSUMgbW9kZWwpIElPQVBJQzA6IGlycSAwLTIzOyBJT0FQSUMxOiBpcnEgMjQtNDcuLgogCSAqIEZvciBYODYgKHN0YW5kYXJkIEFUIG1vZGUpIFBJQzAvMTogaXJxIDAtMTUuIElPQVBJQzA6IDAtMjMuLgogCSAqLwotCV9fdTMyIGlycTsKKwl1bmlvbiB7CisJCV9fdTMyIGlycTsKKwkJX19zMzIgc3RhdHVzOworCX07CiAJX191MzIgbGV2ZWw7CiB9OwogCkBAIC0xMjYsNiArMTI5LDcgQEAKIAkJCV9fdTY0IGRhdGFfb2Zmc2V0OyAvKiByZWxhdGl2ZSB0byBrdm1fcnVuIHN0YXJ0ICovCiAJCX0gaW87CiAJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCBhcmNoOwogCQl9IGRlYnVnOwogCQkvKiBLVk1fRVhJVF9NTUlPICovCiAJCXN0cnVjdCB7CkBAIC0yMTcsMjEgKzIyMSw2IEBACiAJX191MzIgaXJxOwogfTsKIAotc3RydWN0IGt2bV9icmVha3BvaW50IHsKLQlfX3UzMiBlbmFibGVkOwotCV9fdTMyIHBhZGRpbmc7Ci0JX191NjQgYWRkcmVzczsKLX07Ci0KLS8qIGZvciBLVk1fREVCVUdfR1VFU1QgKi8KLXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgewotCS8qIGludCAqLwotCV9fdTMyIGVuYWJsZWQ7Ci0JX191MzIgcGFkOwotCXN0cnVjdCBrdm1fYnJlYWtwb2ludCBicmVha3BvaW50c1s0XTsKLQlfX3UzMiBzaW5nbGVzdGVwOwotfTsKLQogLyogZm9yIEtWTV9HRVRfRElSVFlfTE9HICovCiBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyB7CiAJX191MzIgc2xvdDsKQEAgLTI5Miw2ICsyODEsMTcgQEAKIAlfX3U2NCBwYXJtNjQ7CiB9OwogCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworCisjZGVmaW5lIEtWTV9HVUVTVERCR19FTkFCTEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAJCTB4MDAwMDAwMDIKKworc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7CisJX191MzIgY29udHJvbDsKKwlfX3UzMiBwYWQ7CisJc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIGFyY2g7Cit9OworCiAjZGVmaW5lIEtWTV9UUkNfU0hJRlQgICAgICAgICAgIDE2CiAvKgogICoga3ZtIHRyYWNlIGNhdGVnb3JpZXMKQEAgLTM5Niw2ICszOTYsNTcgQEAKICNpZmRlZiBfX0tWTV9IQVZFX1VTRVJfTk1JCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9OTUkgMjIKICNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgMjMKKyNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfUElUCisjZGVmaW5lIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTCAyNAorI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9JT0FQSUMKKyNkZWZpbmUgS1ZNX0NBUF9JUlFfUk9VVElORyAyNQorI2VuZGlmCisjZGVmaW5lIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVMgMjYKKyNpZmRlZiBfX0tWTV9IQVZFX0RFVklDRV9BU1NJR05NRU5UCisjZGVmaW5lIEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVCAyNworI2VuZGlmCisKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7CisJX191MzIgaXJxY2hpcDsKKwlfX3UzMiBwaW47Cit9OworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSB7CisJX191MzIgYWRkcmVzc19sbzsKKwlfX3UzMiBhZGRyZXNzX2hpOworCV9fdTMyIGRhdGE7CisJX191MzIgcGFkOworfTsKKworLyogZ3NpIHJvdXRpbmcgZW50cnkgdHlwZXMgKi8KKyNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAgMQorI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfTVNJIDIKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSB7CisJX191MzIgZ3NpOworCV9fdTMyIHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGFkOworCXVuaW9uIHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIGlycWNoaXA7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIG1zaTsKKwkJX191MzIgcGFkWzhdOworCX0gdTsKK307CisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmcgeworCV9fdTMyIG5yOworCV9fdTMyIGZsYWdzOworCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cmllc1swXTsKK307CisKKyNlbmRpZgogCiAvKgogICogaW9jdGxzIGZvciBWTSBmZHMKQEAgLTQyMSwxNCArNDcyLDE5IEBACiAjZGVmaW5lIEtWTV9DUkVBVEVfUElUCQkgIF9JTyhLVk1JTywgIDB4NjQpCiAjZGVmaW5lIEtWTV9HRVRfUElUCQkgIF9JT1dSKEtWTUlPLCAweDY1LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9QSVQJCSAgX0lPUihLVk1JTywgIDB4NjYsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQorI2RlZmluZSBLVk1fSVJRX0xJTkVfU1RBVFVTCSAgX0lPV1IoS1ZNSU8sIDB4NjcsIHN0cnVjdCBrdm1faXJxX2xldmVsKQogI2RlZmluZSBLVk1fUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjcsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFIF9JT1IoS1ZNSU8sIDB4NjksIFwKIAkJCQkgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCisjZGVmaW5lIEtWTV9TRVRfR1NJX1JPVVRJTkcgICAgICAgX0lPVyhLVk1JTywgMHg2YSwgc3RydWN0IGt2bV9pcnFfcm91dGluZykKICNkZWZpbmUgS1ZNX0FTU0lHTl9JUlEgX0lPUihLVk1JTywgMHg3MCwgXAogCQkJICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQorI2RlZmluZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTCAgICAgIF9JTyhLVk1JTywgMHg3MSkKKyNkZWZpbmUgS1ZNX0RFQVNTSUdOX1BDSV9ERVZJQ0UgX0lPVyhLVk1JTywgMHg3MiwgXAorCQkJCSAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQogCiAvKgogICogaW9jdGxzIGZvciB2Y3B1IGZkcwpAQCAtNDQwLDcgKzQ5Niw4IEBACiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODQsIHN0cnVjdCBrdm1fc3JlZ3MpCiAjZGVmaW5lIEtWTV9UUkFOU0xBVEUgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDB4ODUsIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24pCiAjZGVmaW5lIEtWTV9JTlRFUlJVUFQgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODYsIHN0cnVjdCBrdm1faW50ZXJydXB0KQotI2RlZmluZSBLVk1fREVCVUdfR1VFU1QgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg3LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0KQorLyogS1ZNX0RFQlVHX0dVRVNUIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHVzZSBLVk1fU0VUX0dVRVNUX0RFQlVHIGluc3RlYWQgKi8KKyNkZWZpbmUgS1ZNX0RFQlVHX0dVRVNUICAgICAgICAgICBfX0tWTV9ERVBSRUNBVEVEX0RFQlVHX0dVRVNUCiAjZGVmaW5lIEtWTV9HRVRfTVNSUyAgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDB4ODgsIHN0cnVjdCBrdm1fbXNycykKICNkZWZpbmUgS1ZNX1NFVF9NU1JTICAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4OSwgc3RydWN0IGt2bV9tc3JzKQogI2RlZmluZSBLVk1fU0VUX0NQVUlEICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDhhLCBzdHJ1Y3Qga3ZtX2NwdWlkKQpAQCAtNDY5LDYgKzUyNiwyOSBAQAogI2RlZmluZSBLVk1fU0VUX01QX1NUQVRFICAgICAgICAgIF9JT1coS1ZNSU8sICAweDk5LCBzdHJ1Y3Qga3ZtX21wX3N0YXRlKQogLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9OTUkgKi8KICNkZWZpbmUgS1ZNX05NSSAgICAgICAgICAgICAgICAgICBfSU8oS1ZNSU8sICAweDlhKQorLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgKi8KKyNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyAgICAgICBfSU9XKEtWTUlPLCAgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKKworLyoKKyAqIERlcHJlY2F0ZWQgaW50ZXJmYWNlcworICovCitzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgeworCV9fdTMyIGVuYWJsZWQ7CisJX191MzIgcGFkZGluZzsKKwlfX3U2NCBhZGRyZXNzOworfTsKKworc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCB7CisJX191MzIgZW5hYmxlZDsKKwlfX3UzMiBwYWQ7CisJc3RydWN0IGt2bV9icmVha3BvaW50IGJyZWFrcG9pbnRzWzRdOworCV9fdTMyIHNpbmdsZXN0ZXA7Cit9OworCisjZGVmaW5lIF9fS1ZNX0RFUFJFQ0FURURfREVCVUdfR1VFU1QgX0lPVyhLVk1JTywgIDB4ODcsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QpCisKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9HRVRfU1RBQ0sgICBfSU9SKEtWTUlPLCAgMHg5YSwgdm9pZCAqKQorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSyAgIF9JT1coS1ZNSU8sICAweDliLCB2b2lkICopCiAKICNkZWZpbmUgS1ZNX1RSQ19JTkpfVklSUSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAyKQogI2RlZmluZSBLVk1fVFJDX1JFREVMSVZFUl9FVlQgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDMpCkBAIC01MjIsNiArNjAyLDcgQEAKIAogI2RlZmluZSBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUJKDEgPDwgMCkKIAorI2RlZmluZSBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTglLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSQogI2RlZmluZSBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSQkoMSA8PCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBiZjZmNzAzLi44OTRhNTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0zNyw2ICszNyw3IEBACiAjZGVmaW5lIEtWTV9SRVFfUEVORElOR19USU1FUiAgICAgIDUKICNkZWZpbmUgS1ZNX1JFUV9VTkhBTFQgICAgICAgICAgICAgNgogI2RlZmluZSBLVk1fUkVRX01NVV9TWU5DICAgICAgICAgICA3CisjZGVmaW5lIEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFICAgIDgKIAogI2RlZmluZSBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQJMAogCkBAIC03Myw3ICs3NCw3IEBACiAJc3RydWN0IGt2bV9ydW4gKnJ1bjsKIAlpbnQgZ3Vlc3RfbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlcXVlc3RzOwotCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgZ3Vlc3RfZGVidWc7CisJdW5zaWduZWQgbG9uZyBndWVzdF9kZWJ1ZzsKIAlpbnQgZnB1X2FjdGl2ZTsKIAlpbnQgZ3Vlc3RfZnB1X2xvYWRlZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKQEAgLTEwNyw2ICsxMDgsMjAgQEAKIAlpbnQgdXNlcl9hbGxvYzsKIH07CiAKK3N0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5IHsKKwl1MzIgZ3NpOworCWludCAoKnNldCkoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCSAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCk7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaXJxY2hpcDsKKwkJCXVuc2lnbmVkIHBpbjsKKwkJfSBpcnFjaGlwOworCQlzdHJ1Y3QgbXNpX21zZyBtc2k7CisJfTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cit9OworCiBzdHJ1Y3Qga3ZtIHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhlIHZjcHVzIGFycmF5IGFuZCBBUElDIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdCBtbXVfbG9jazsKQEAgLTEyNyw2ICsxNDIsMTEgQEAKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKmNvYWxlc2NlZF9tbWlvX3Jpbmc7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJc3RydWN0IGxpc3RfaGVhZCBpcnFfcm91dGluZzsgLyogb2Yga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqLworCXN0cnVjdCBobGlzdF9oZWFkIG1hc2tfbm90aWZpZXJfbGlzdDsKKyNlbmRpZgorCiAjaWZkZWYgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIAlzdHJ1Y3QgbW11X25vdGlmaWVyIG1tdV9ub3RpZmllcjsKIAl1bnNpZ25lZCBsb25nIG1tdV9ub3RpZmllcl9zZXE7CkBAIC0yMzcsNyArMjU3LDYgQEAKIAkJCQkgICBpbnQgdXNlcl9hbGxvYyk7CiBsb25nIGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci12b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpOwpAQCAtMjU1LDggKzI3NCw4IEBACiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpOwotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpOworaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKTsKIAogaW50IGt2bV9hcmNoX2luaXQodm9pZCAqb3BhcXVlKTsKQEAgLTMxMCw3ICszMjksNiBAQAogCWludCBob3N0X2lycTsKIAlib29sIGhvc3RfaXJxX2Rpc2FibGVkOwogCWludCBndWVzdF9pcnE7Ci0Jc3RydWN0IG1zaV9tc2cgZ3Vlc3RfbXNpOwogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFgJKDEgPDwgMCkKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kJKDEgPDwgMSkKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX0lOVFgJKDEgPDwgOCkKQEAgLTMyMSw4ICszMzksMjEgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBrdm0gKmt2bTsKIH07Ci12b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCk7Ci12b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKTsKKworc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciB7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4sIGJvb2wgbWFza2VkKTsKKwlpbnQgaXJxOworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7Cit9OworCit2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pOwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7Cit2b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgYm9vbCBtYXNrKTsKKworaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCk7Cit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKTsKIHZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7CiB2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKQEAgLTQ2NCw0ICs0OTUsMjEgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKworI2RlZmluZSBLVk1fTUFYX0lSUV9ST1VURVMgMTAyNAorCitpbnQga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKTsKK2ludCBrdm1fc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKmVudHJpZXMsCisJCQl1bnNpZ25lZCBuciwKKwkJCXVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkge30KKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKaW5kZXggOWI2ZjM5NS4uMmI4MzE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCkBAIC00MCwxNyArNDAsNCBAQAogCiB0eXBlZGVmIGhmbl90IHBmbl90OwogCi1zdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCBjdXJfY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKmd1ZXN0X3BhZ2VzWzJdOwotCXVuc2lnbmVkIGd1ZXN0X3BhZ2Vfb2Zmc2V0OwotCWludCBpbjsKLQlpbnQgcG9ydDsKLQlpbnQgc2l6ZTsKLQlpbnQgc3RyaW5nOwotCWludCBkb3duOwotCWludCByZXA7Ci19OwotCiAjZW5kaWYgLyogX19LVk1fVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xhdGVuY3l0b3AuaCBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCmluZGV4IDkwMWMyZDYuLmIwZTk5ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oCkBAIC05LDYgKzksNyBAQAogI2lmbmRlZiBfSU5DTFVERV9HVUFSRF9MQVRFTkNZVE9QX0hfCiAjZGVmaW5lIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lUT1BfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaWZkZWYgQ09ORklHX0xBVEVOQ1lUT1AKIAogI2RlZmluZSBMVF9TQVZFQ09VTlQJCTMyCkBAIC0yNCw3ICsyNSwxNCBAQAogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKLXZvaWQgYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKTsKK2V4dGVybiBpbnQgbGF0ZW5jeXRvcF9lbmFibGVkOwordm9pZCBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcik7CitzdGF0aWMgaW5saW5lIHZvaWQKK2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK3sKKwlpZiAodW5saWtlbHkobGF0ZW5jeXRvcF9lbmFibGVkKSkKKwkJX19hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHRhc2ssIHVzZWNzLCBpbnRlcik7Cit9CiAKIHZvaWQgY2xlYXJfYWxsX2xhdGVuY3lfdHJhY2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBkYzE4Yjg3Li43NjI2MmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTc5NSw2ICs3OTUsNyBAQAogCWF0YV9yZXNldF9mbl90CQlwbXBfaGFyZHJlc2V0OwogCWF0YV9wb3N0cmVzZXRfZm5fdAlwbXBfcG9zdHJlc2V0OwogCXZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl2b2lkICgqbG9zdF9pbnRlcnJ1cHQpKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCXZvaWQgKCpwb3N0X2ludGVybmFsX2NtZCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKIAkvKgpAQCAtODM2LDYgKzgzNyw4IEBACiAJdm9pZCAoKmJtZG1hX3N0YXJ0KShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAl2b2lkICgqYm1kbWFfc3RvcCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAJdTggICAoKmJtZG1hX3N0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKKwl2b2lkICgqZHJhaW5fZmlmbykoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KIAogCXNzaXplX3QgKCplbV9zaG93KShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjaGFyICpidWYpOwpAQCAtMTAwOCw2ICsxMDExLDkgQEAKIGV4dGVybiBpbnQgYXRhX2NhYmxlX2lnbm9yZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX2NhYmxlX3Vua25vd24oc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKK2V4dGVybiB2b2lkIGF0YV9waW9fcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkICpkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOworCiAvKiBUaW1pbmcgaGVscGVycyAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfcGlvX25lZWRfaW9yZHkoY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKik7CiBleHRlcm4gY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKmF0YV90aW1pbmdfZmluZF9tb2RlKHU4IHhmZXJfbW9kZSk7CkBAIC0xNTcyLDYgKzE1NzgsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGlycXJldHVybl90IGF0YV9zZmZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IGF0YV9zZmZfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKQEAgLTE1ODQsNiArMTU5MSw3IEBACiBleHRlcm4gaW50IHNhdGFfc2ZmX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oIGIvaW5jbHVkZS9saW51eC9sbV9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkOGZhMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19MTV9JTlRFUkZBQ0VfRE9UX0hfXwotI2RlZmluZSBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fCi0KLQotdHlwZWRlZiB2b2lkICgqbG1fY2FsbGJhY2tfdCkgKHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IHR5cGUsIHZvaWQgKmRhdGEpOwotCi0vKgotICogbG1fbW91bnQoKSBmbGFncwotICoKLSAqIExNX01GTEFHX1NQRUNUQVRPUgotICogR0ZTIGlzIGFza2luZyB0byBqb2luIHRoZSBmaWxlc3lzdGVtJ3MgbG9ja3NwYWNlLCBidXQgaXQgZG9lc24ndCB3YW50IHRvCi0gKiBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0uICBUaGUgbG9jayBtb2R1bGUgc2hvdWxkbid0IGFzc2lnbiBhIGpvdXJuYWwgdG8gdGhlIEZTCi0gKiBtb3VudC4gIEl0IHNob3VsZG4ndCBzZW5kIHJlY292ZXJ5IGNhbGxiYWNrcyB0byB0aGUgRlMgbW91bnQuICBJZiB0aGUgbm9kZQotICogZGllcyBvciB3aXRoZHJhd3MsIGFsbCBsb2NrcyBjYW4gYmUgd2lwZWQgaW1tZWRpYXRlbHkuCi0gKgotICogTE1fTUZMQUdfQ09OVl9OT0RST1AKLSAqIERvIG5vdCBhbGxvdyB0aGUgZGxtIHRvIGludGVybmFsbHkgcmVzb2x2ZSBjb252ZXJzaW9uIGRlYWRsb2NrcyBieSBkZW1vdGluZwotICogdGhlIGxvY2sgdG8gdW5sb2NrZWQgYW5kIHRoZW4gcmVhY3F1aXJpbmcgaXQgaW4gdGhlIHJlcXVlc3RlZCBtb2RlLiBJbnN0ZWFkLAotICogaXQgc2hvdWxkIGNhbmNlbCB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIExNX09VVF9DT05WX0RFQURMSy4KLSAqLwotCi0jZGVmaW5lIExNX01GTEFHX1NQRUNUQVRPUgkweDAwMDAwMDAxCi0jZGVmaW5lIExNX01GTEFHX0NPTlZfTk9EUk9QCTB4MDAwMDAwMDIKLQotLyoKLSAqIGxtX2xvY2tzdHJ1Y3QgZmxhZ3MKLSAqCi0gKiBMTV9MU0ZMQUdfTE9DQUwKLSAqIFRoZSBsb2NrX25vbG9jayBtb2R1bGUgcmV0dXJucyBMTV9MU0ZMQUdfTE9DQUwgdG8gR0ZTLCBpbmRpY2F0aW5nIHRoYXQgR0ZTCi0gKiBjYW4gbWFrZSBzaW5nbGUtbm9kZSBvcHRpbWl6YXRpb25zLgotICovCi0KLSNkZWZpbmUgTE1fTFNGTEFHX0xPQ0FMCQkweDAwMDAwMDAxCi0KLS8qCi0gKiBsbV9sb2NrbmFtZSB0eXBlcwotICovCi0KLSNkZWZpbmUgTE1fVFlQRV9SRVNFUlZFRAkweDAwCi0jZGVmaW5lIExNX1RZUEVfTk9ORElTSwkJMHgwMQotI2RlZmluZSBMTV9UWVBFX0lOT0RFCQkweDAyCi0jZGVmaW5lIExNX1RZUEVfUkdSUAkJMHgwMwotI2RlZmluZSBMTV9UWVBFX01FVEEJCTB4MDQKLSNkZWZpbmUgTE1fVFlQRV9JT1BFTgkJMHgwNQotI2RlZmluZSBMTV9UWVBFX0ZMT0NLCQkweDA2Ci0jZGVmaW5lIExNX1RZUEVfUExPQ0sJCTB4MDcKLSNkZWZpbmUgTE1fVFlQRV9RVU9UQQkJMHgwOAotI2RlZmluZSBMTV9UWVBFX0pPVVJOQUwJCTB4MDkKLQotLyoKLSAqIGxtX2xvY2soKSBzdGF0ZXMKLSAqCi0gKiBTSEFSRUQgaXMgY29tcGF0aWJsZSB3aXRoIFNIQVJFRCwgbm90IHdpdGggREVGRVJSRUQgb3IgRVguCi0gKiBERUZFUlJFRCBpcyBjb21wYXRpYmxlIHdpdGggREVGRVJSRUQsIG5vdCB3aXRoIFNIQVJFRCBvciBFWC4KLSAqLwotCi0jZGVmaW5lIExNX1NUX1VOTE9DS0VECQkwCi0jZGVmaW5lIExNX1NUX0VYQ0xVU0lWRQkJMQotI2RlZmluZSBMTV9TVF9ERUZFUlJFRAkJMgotI2RlZmluZSBMTV9TVF9TSEFSRUQJCTMKLQotLyoKLSAqIGxtX2xvY2soKSBmbGFncwotICoKLSAqIExNX0ZMQUdfVFJZCi0gKiBEb24ndCB3YWl0IHRvIGFjcXVpcmUgdGhlIGxvY2sgaWYgaXQgY2FuJ3QgYmUgZ3JhbnRlZCBpbW1lZGlhdGVseS4KLSAqCi0gKiBMTV9GTEFHX1RSWV8xQ0IKLSAqIFNlbmQgb25lIGJsb2NraW5nIGNhbGxiYWNrIGlmIFRSWSBpcyBzZXQgYW5kIHRoZSBsb2NrIGlzIG5vdCBncmFudGVkLgotICoKLSAqIExNX0ZMQUdfTk9FWFAKLSAqIEdGUyBzZXRzIHRoaXMgZmxhZyBvbiBsb2NrIHJlcXVlc3RzIGl0IG1ha2VzIHdoaWxlIGRvaW5nIGpvdXJuYWwgcmVjb3ZlcnkuCi0gKiBUaGVzZSBzcGVjaWFsIHJlcXVlc3RzIHNob3VsZCBub3QgYmUgYmxvY2tlZCBkdWUgdG8gdGhlIHJlY292ZXJ5IGxpa2UKLSAqIG9yZGluYXJ5IGxvY2tzIHdvdWxkIGJlLgotICoKLSAqIExNX0ZMQUdfQU5ZCi0gKiBBIFNIQVJFRCByZXF1ZXN0IG1heSBhbHNvIGJlIGdyYW50ZWQgaW4gREVGRVJSRUQsIG9yIGEgREVGRVJSRUQgcmVxdWVzdCBtYXkKLSAqIGFsc28gYmUgZ3JhbnRlZCBpbiBTSEFSRUQuICBUaGUgcHJlZmVycmVkIHN0YXRlIGlzIHdoaWNoZXZlciBpcyBjb21wYXRpYmxlCi0gKiB3aXRoIG90aGVyIGdyYW50ZWQgbG9ja3MsIG9yIHRoZSBzcGVjaWZpZWQgc3RhdGUgaWYgbm8gb3RoZXIgbG9ja3MgZXhpc3QuCi0gKgotICogTE1fRkxBR19QUklPUklUWQotICogT3ZlcnJpZGUgZmFpcm5lc3MgY29uc2lkZXJhdGlvbnMuICBTdXBwb3NlIGEgbG9jayBpcyBoZWxkIGluIGEgc2hhcmVkIHN0YXRlCi0gKiBhbmQgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcXVlc3QgZm9yIHRoZSBkZWZlcnJlZCBzdGF0ZS4gIEEgc2hhcmVkIGxvY2sKLSAqIHJlcXVlc3Qgd2l0aCB0aGUgcHJpb3JpdHkgZmxhZyB3b3VsZCBiZSBhbGxvd2VkIHRvIGJ5cGFzcyB0aGUgZGVmZXJyZWQKLSAqIHJlcXVlc3QgYW5kIGRpcmVjdGx5IGpvaW4gdGhlIG90aGVyIHNoYXJlZCBsb2NrLiAgQSBzaGFyZWQgbG9jayByZXF1ZXN0Ci0gKiB3aXRob3V0IHRoZSBwcmlvcml0eSBmbGFnIG1pZ2h0IGJlIGZvcmNlZCB0byB3YWl0IHVudGlsIHRoZSBkZWZlcnJlZAotICogcmVxdWVzdGVkIGhhZCBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgdGhlIGxvY2suCi0gKi8KLQotI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQotI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAotI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAKLQotLyoKLSAqIGxtX2xvY2soKSBhbmQgbG1fYXN5bmNfY2IgcmV0dXJuIGZsYWdzCi0gKgotICogTE1fT1VUX1NUX01BU0sKLSAqIE1hc2tzIHRoZSBsb3dlciB0d28gYml0cyBvZiBsb2NrIHN0YXRlIGluIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAqCi0gKiBMTV9PVVRfQ0FDSEVBQkxFCi0gKiBUaGUgbG9jayBoYXNuJ3QgYmVlbiByZWxlYXNlZCBzbyBHRlMgY2FuIGNvbnRpbnVlIHRvIGNhY2hlIGRhdGEgZm9yIGl0LgotICoKLSAqIExNX09VVF9DQU5DRUxFRAotICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCi0gKgotICogTE1fT1VUX0FTWU5DCi0gKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCi0gKgotICogTE1fT1VUX0NPTlZfREVBRExLCi0gKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZCBkbyB0byBhIGNvbnZlcnNpb24gZGVhZGxvY2suCi0gKi8KLQotI2RlZmluZSBMTV9PVVRfU1RfTUFTSwkJMHgwMDAwMDAwMwotI2RlZmluZSBMTV9PVVRfQ0FOQ0VMRUQJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTE1fT1VUX0FTWU5DCQkweDAwMDAwMDgwCi0jZGVmaW5lIExNX09VVF9FUlJPUgkJMHgwMDAwMDEwMAotCi0vKgotICogbG1fY2FsbGJhY2tfdCB0eXBlcwotICoKLSAqIExNX0NCX05FRURfRSBMTV9DQl9ORUVEX0QgTE1fQ0JfTkVFRF9TCi0gKiBCbG9ja2luZyBjYWxsYmFjaywgYSByZW1vdGUgbm9kZSBpcyByZXF1ZXN0aW5nIHRoZSBnaXZlbiBsb2NrIGluCi0gKiBFWENMVVNJVkUsIERFRkVSUkVELCBvciBTSEFSRUQuCi0gKgotICogTE1fQ0JfTkVFRF9SRUNPVkVSWQotICogVGhlIGdpdmVuIGpvdXJuYWwgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgotICoKLSAqIExNX0NCX0FTWU5DCi0gKiBUaGUgZ2l2ZW4gbG9jayBoYXMgYmVlbiBncmFudGVkLgotICovCi0KLSNkZWZpbmUgTE1fQ0JfTkVFRF9FCQkyNTcKLSNkZWZpbmUgTE1fQ0JfTkVFRF9ECQkyNTgKLSNkZWZpbmUgTE1fQ0JfTkVFRF9TCQkyNTkKLSNkZWZpbmUgTE1fQ0JfTkVFRF9SRUNPVkVSWQkyNjAKLSNkZWZpbmUgTE1fQ0JfQVNZTkMJCTI2MgotCi0vKgotICogbG1fcmVjb3ZlcnlfZG9uZSgpIG1lc3NhZ2VzCi0gKi8KLQotI2RlZmluZSBMTV9SRF9HQVZFVVAJCTMwOAotI2RlZmluZSBMTV9SRF9TVUNDRVNTCQkzMDkKLQotCi1zdHJ1Y3QgbG1fbG9ja25hbWUgewotCXU2NCBsbl9udW1iZXI7Ci0JdW5zaWduZWQgaW50IGxuX3R5cGU7Ci19OwotCi0jZGVmaW5lIGxtX25hbWVfZXF1YWwobmFtZTEsIG5hbWUyKSBcCi0JKCgobmFtZTEpLT5sbl9udW1iZXIgPT0gKG5hbWUyKS0+bG5fbnVtYmVyKSAmJiBcCi0JICgobmFtZTEpLT5sbl90eXBlID09IChuYW1lMiktPmxuX3R5cGUpKSBcCi0KLXN0cnVjdCBsbV9hc3luY19jYiB7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lIGxjX25hbWU7Ci0JaW50IGxjX3JldDsKLX07Ci0KLXN0cnVjdCBsbV9sb2Nrc3RydWN0OwotCi1zdHJ1Y3QgbG1fbG9ja29wcyB7Ci0JY29uc3QgY2hhciAqbG1fcHJvdG9fbmFtZTsKLQotCS8qCi0JICogTW91bnQvVW5tb3VudAotCSAqLwotCi0JaW50ICgqbG1fbW91bnQpIChjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQkgbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCSB1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQkgc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQkgc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLQl2b2lkICgqbG1fb3RoZXJzX21heV9tb3VudCkgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQl2b2lkICgqbG1fdW5tb3VudCkgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQl2b2lkICgqbG1fd2l0aGRyYXcpICh2b2lkICpsb2Nrc3BhY2UpOwotCi0JLyoKLQkgKiBMb2NrIG9yaWVudGVkIG9wZXJhdGlvbnMKLQkgKi8KLQotCWludCAoKmxtX2dldF9sb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsIHZvaWQgKipsb2NrcCk7Ci0KLQl2b2lkICgqbG1fcHV0X2xvY2spICh2b2lkICpsb2NrKTsKLQotCXVuc2lnbmVkIGludCAoKmxtX2xvY2spICh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLAotCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCi0JdW5zaWduZWQgaW50ICgqbG1fdW5sb2NrKSAodm9pZCAqbG9jaywgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSk7Ci0KLQl2b2lkICgqbG1fY2FuY2VsKSAodm9pZCAqbG9jayk7Ci0KLQlpbnQgKCpsbV9ob2xkX2x2YikgKHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKTsKLQl2b2lkICgqbG1fdW5ob2xkX2x2YikgKHZvaWQgKmxvY2ssIGNoYXIgKmx2Yik7Ci0KLQkvKgotCSAqIFBvc2l4IExvY2sgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0JaW50ICgqbG1fcGxvY2tfZ2V0KSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQlpbnQgKCpsbV9wbG9jaykgKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQlpbnQgKCpsbV9wdW5sb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwotCi0JLyoKLQkgKiBDbGllbnQgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0Jdm9pZCAoKmxtX3JlY292ZXJ5X2RvbmUpICh2b2lkICpsb2Nrc3BhY2UsIHVuc2lnbmVkIGludCBqaWQsCi0JCQkJICB1bnNpZ25lZCBpbnQgbWVzc2FnZSk7Ci0KLQlzdHJ1Y3QgbW9kdWxlICpsbV9vd25lcjsKLX07Ci0KLS8qCi0gKiBsbV9tb3VudCgpIHJldHVybiB2YWx1ZXMKLSAqCi0gKiBsc19qaWQgLSB0aGUgam91cm5hbCBJRCB0aGlzIG5vZGUgc2hvdWxkIHVzZQotICogbHNfZmlyc3QgLSB0aGlzIG5vZGUgaXMgdGhlIGZpcnN0IHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbQotICogbHNfbHZiX3NpemUgLSBzaXplIGluIGJ5dGVzIG9mIGxvY2sgdmFsdWUgYmxvY2tzCi0gKiBsc19sb2Nrc3BhY2UgLSBsb2NrIG1vZHVsZSdzIGNvbnRleHQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0KLSAqIGxzX29wcyAtIGxvY2sgbW9kdWxlJ3MgZnVuY3Rpb25zCi0gKiBsc19mbGFncyAtIGxvY2sgbW9kdWxlIGZlYXR1cmVzCi0gKi8KLQotc3RydWN0IGxtX2xvY2tzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBsc19qaWQ7Ci0JdW5zaWduZWQgaW50IGxzX2ZpcnN0OwotCXVuc2lnbmVkIGludCBsc19sdmJfc2l6ZTsKLQl2b2lkICpsc19sb2Nrc3BhY2U7Ci0JY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxzX29wczsKLQlpbnQgbHNfZmxhZ3M7Ci19OwotCi0vKgotICogTG9jayBtb2R1bGUgYm90dG9tIGludGVyZmFjZS4gIEEgbG9jayBtb2R1bGUgbWFrZXMgaXRzZWxmIGF2YWlsYWJsZSB0byBHRlMKLSAqIHdpdGggdGhlc2UgZnVuY3Rpb25zLgotICovCi0KLWludCBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pOwotdm9pZCBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90byk7Ci0KLS8qCi0gKiBMb2NrIG1vZHVsZSB0b3AgaW50ZXJmYWNlLiAgR0ZTIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucyB3aGVuIG1vdW50aW5nIG9yCi0gKiB1bm1vdW50aW5nIGEgZmlsZSBzeXN0ZW0uCi0gKi8KLQotaW50IGdmczJfbW91bnRfbG9ja3Byb3RvKGNoYXIgKnByb3RvX25hbWUsIGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotdm9pZCBnZnMyX3VubW91bnRfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KTsKLQotdm9pZCBnZnMyX3dpdGhkcmF3X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCk7Ci0KLSNlbmRpZiAvKiBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAppbmRleCBhYTZmZTcwLi41MTg1NWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCkBAIC0zNDYsNiArMzQ2LDcgQEAKIAlyZXR1cm4gc2luMS0+c2luX2FkZHIuc19hZGRyID09IHNpbjItPnNpbl9hZGRyLnNfYWRkcjsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogc3RhdGljIGlubGluZSBpbnQgX19ubG1fY21wX2FkZHI2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKIHsKQEAgLTM1Myw2ICszNTQsMTMgQEAKIAljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4yID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXAyOwogCXJldHVybiBpcHY2X2FkZHJfZXF1YWwoJnNpbjEtPnNpbjZfYWRkciwgJnNpbjItPnNpbjZfYWRkcik7CiB9CisjZWxzZQkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbmxtX2NtcF9hZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCiAKIC8qCiAgKiBDb21wYXJlIHR3byBob3N0IGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCmluZGV4IDBiNGRmN2UuLjViNGUyOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFnaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKQEAgLTQ5LDQgKzQ5LDUgQEAKICNkZWZpbmUgRlVURVhGU19TVVBFUl9NQUdJQwkweEJBRDFERUEKICNkZWZpbmUgSU5PVElGWUZTX1NVUEVSX01BR0lDCTB4MkJBRDFERUEKIAorI2RlZmluZSBTVEFDS19FTkRfTUFHSUMJCTB4NTdBQzZFOUQKICNlbmRpZiAvKiBfX0xJTlVYX01BR0lDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWpvci5oIGIvaW5jbHVkZS9saW51eC9tYWpvci5oCmluZGV4IDg4MjQ5NDUuLjA1OGVjMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFqb3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L21ham9yLmgKQEAgLTE3MSw1ICsxNzEsNiBAQAogI2RlZmluZSBWSU9UQVBFX01BSk9SCQkyMzAKIAogI2RlZmluZSBCTE9DS19FWFRfTUFKT1IJCTI1OQorI2RlZmluZSBTQ1NJX09TRF9NQUpPUgkJMjYwCS8qIG9wZW4tb3NkJ3MgT1NEIHNjc2kgZGV2aWNlICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZS5oCmluZGV4IGMyM2QzZjUuLmQ5YTUxYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlLmgKQEAgLTgsMzMgKzgsNDkgQEAKIAogLyogTWFwbGUgQnVzIGNvbW1hbmQgYW5kIHJlc3BvbnNlIGNvZGVzICovCiBlbnVtIG1hcGxlX2NvZGUgewotCU1BUExFX1JFU1BPTlNFX0ZJTEVFUlIgPSAtNSwKLQlNQVBMRV9SRVNQT05TRV9BR0FJTiA9IC00LAkvKiByZXF1ZXN0IHNob3VsZCBiZSByZXRyYW5zbWl0dGVkICovCi0JTUFQTEVfUkVTUE9OU0VfQkFEQ01EID0gLTMsCi0JTUFQTEVfUkVTUE9OU0VfQkFERlVOQyA9IC0yLAotCU1BUExFX1JFU1BPTlNFX05PTkUgPSAtMSwJLyogdW5pdCBkaWRuJ3QgcmVzcG9uZCBhdCBhbGwgKi8KLQlNQVBMRV9DT01NQU5EX0RFVklORk8gPSAxLAotCU1BUExFX0NPTU1BTkRfQUxMSU5GTyA9IDIsCi0JTUFQTEVfQ09NTUFORF9SRVNFVCA9IDMsCi0JTUFQTEVfQ09NTUFORF9LSUxMID0gNCwKLQlNQVBMRV9SRVNQT05TRV9ERVZJTkZPID0gNSwKLQlNQVBMRV9SRVNQT05TRV9BTExJTkZPID0gNiwKLQlNQVBMRV9SRVNQT05TRV9PSyA9IDcsCi0JTUFQTEVfUkVTUE9OU0VfREFUQVRSRiA9IDgsCi0JTUFQTEVfQ09NTUFORF9HRVRDT05EID0gOSwKLQlNQVBMRV9DT01NQU5EX0dFVE1JTkZPID0gMTAsCi0JTUFQTEVfQ09NTUFORF9CUkVBRCA9IDExLAotCU1BUExFX0NPTU1BTkRfQldSSVRFID0gMTIsCi0JTUFQTEVfQ09NTUFORF9TRVRDT05EID0gMTQKKwlNQVBMRV9SRVNQT05TRV9GSUxFRVJSID0JLTUsCisJTUFQTEVfUkVTUE9OU0VfQUdBSU4sCS8qIHJldHJhbnNtaXQgKi8KKwlNQVBMRV9SRVNQT05TRV9CQURDTUQsCisJTUFQTEVfUkVTUE9OU0VfQkFERlVOQywKKwlNQVBMRV9SRVNQT05TRV9OT05FLAkvKiB1bml0IGRpZG4ndCByZXNwb25kKi8KKwlNQVBMRV9DT01NQU5EX0RFVklORk8gPQkJMSwKKwlNQVBMRV9DT01NQU5EX0FMTElORk8sCisJTUFQTEVfQ09NTUFORF9SRVNFVCwKKwlNQVBMRV9DT01NQU5EX0tJTEwsCisJTUFQTEVfUkVTUE9OU0VfREVWSU5GTywKKwlNQVBMRV9SRVNQT05TRV9BTExJTkZPLAorCU1BUExFX1JFU1BPTlNFX09LLAorCU1BUExFX1JFU1BPTlNFX0RBVEFUUkYsCisJTUFQTEVfQ09NTUFORF9HRVRDT05ELAorCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sCisJTUFQTEVfQ09NTUFORF9CUkVBRCwKKwlNQVBMRV9DT01NQU5EX0JXUklURSwKKwlNQVBMRV9DT01NQU5EX0JTWU5DLAorCU1BUExFX0NPTU1BTkRfU0VUQ09ORCwKKwlNQVBMRV9DT01NQU5EX01JQ0NPTlRST0wKK307CisKK2VudW0gbWFwbGVfZmlsZV9lcnJvcnMgeworCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9QQVJUSVRJT04gPQkweDAxMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfUEhBU0VfRVJST1IgPQkJMHgwMjAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfQkxPQ0sgPQkJMHgwNDAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX1dSSVRFX0VSUk9SID0JCTB4MDgwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9JTlZBTElEX1dSSVRFX0xFTkdUSCA9CTB4MTAwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9CQURfQ1JDID0gCQkweDIwMDAwMDAwCit9OworCitzdHJ1Y3QgbWFwbGVfYnVmZmVyIHsKKwljaGFyIGJ1ZnhbMHg0MDBdOworCXZvaWQgKmJ1ZjsKIH07CiAKIHN0cnVjdCBtYXBsZXEgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7Ci0Jdm9pZCAqc2VuZGJ1ZiwgKnJlY3ZidWYsICpyZWN2YnVmZGNzcDsKKwlzdHJ1Y3QgbWFwbGVfYnVmZmVyICpyZWN2YnVmOworCXZvaWQgKnNlbmRidWYsICpyZWN2YnVmX3AyOwogCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOwogCWVudW0gbWFwbGVfY29kZSBjb21tYW5kOwotCXN0cnVjdCBtdXRleCBtdXRleDsKIH07CiAKIHN0cnVjdCBtYXBsZV9kZXZpbmZvIHsKQEAgLTUyLDExICs2OCwxNSBAQAogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKIAl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgbWFwbGVxICogbXEpOworCXZvaWQgKCpmaWxlZXJyX2hhbmRsZXIpKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHZvaWQgKnJlY3ZidWYpOworCWludCAoKmNhbl91bmxvYWQpKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpOwogCXVuc2lnbmVkIGxvbmcgd2hlbiwgaW50ZXJ2YWwsIGZ1bmN0aW9uOwogCXN0cnVjdCBtYXBsZV9kZXZpbmZvIGRldmluZm87CiAJdW5zaWduZWQgY2hhciBwb3J0LCB1bml0OwogCWNoYXIgcHJvZHVjdF9uYW1lWzMyXTsKIAljaGFyIHByb2R1Y3RfbGljZW5jZVs2NF07CisJYXRvbWljX3QgYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBtYXBsZV93YWl0OwogCXN0cnVjdCBkZXZpY2UgZGV2OwogfTsKIApAQCAtNzIsNyArOTIsNyBAQAogaW50IG1hcGxlX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWFwbGVfZHJpdmVyICopOwogdm9pZCBtYXBsZV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbWFwbGVfZHJpdmVyICopOwogCi1pbnQgbWFwbGVfYWRkX3BhY2tldF9zbGVlcHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAoraW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAogCXUzMiBjb21tYW5kLCB1MzIgbGVuZ3RoLCB2b2lkICpkYXRhKTsKIHZvaWQgbWFwbGVfY2xlYXJfZGV2KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmggYi9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKaW5kZXggNDA0ZjY3OC4uMjIwMzEyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaApAQCAtMzcsNyArMzcsNyBAQAogICBNQVRST1hGQl9DSURfTEFTVAogfTsKIAotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCmluZGV4IGFmOTVhMWQuLmQ4OTlkYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCkBAIC00OTAsNiArNDkwLDcgQEAKIC8qCiAgKiBSMjMxICgweEU3KSAtIEphY2sgU3RhdHVzCiAgKi8KKyNkZWZpbmUgV004MzUwX0pBQ0tfTF9MVkwJCQkweDA4MDAKICNkZWZpbmUgV004MzUwX0pBQ0tfUl9MVkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaAppbmRleCBiNjY0MGUwLi5lMDZlZDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaApAQCAtMTE4MSw2ICsxMTgxLDcgQEAKICNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX09VVERJViAtIFsyOjBdICovCiAjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLwogCitzdHJ1Y3Qgd204NDAwOwogdm9pZCB3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHN0cnVjdCB3bTg0MDAgKndtODQwMCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAppbmRleCBhODIwZjgxLi5iZWI2ZWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBUVU5fTUlOT1IJCTIwMAogI2RlZmluZSBNV0FWRV9NSU5PUgkJMjE5CS8qIEFDUC9Nd2F2ZSBNb2RlbSAqLwogI2RlZmluZSBNUFRfTUlOT1IJCTIyMAorI2RlZmluZSBNUFQyU0FTX01JTk9SCQkyMjEKICNkZWZpbmUgSFBFVF9NSU5PUgkJMjI4CiAjZGVmaW5lIEZVU0VfTUlOT1IJCTIyOQogI2RlZmluZSBLVk1fTUlOT1IJCTIzMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCmluZGV4IGNmOWM2NzkuLjBmODIyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKQEAgLTU1LDYgKzU1LDcgQEAKIAlNTFg0X0NNRF9DTE9TRV9QT1JUCSA9IDB4YSwKIAlNTFg0X0NNRF9RVUVSWV9IQ0EJID0gMHhiLAogCU1MWDRfQ01EX1FVRVJZX1BPUlQJID0gMHg0MywKKwlNTFg0X0NNRF9TRU5TRV9QT1JUCSA9IDB4NGQsCiAJTUxYNF9DTURfU0VUX1BPUlQJID0gMHhjLAogCU1MWDRfQ01EX0FDQ0VTU19ERFIJID0gMHgyZSwKIAlNTFg0X0NNRF9NQVBfSUNNCSA9IDB4ZmZhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCmluZGV4IDhmNjU5Y2MuLjNhZmY4YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKQEAgLTE1NSw4ICsxNTUsOSBAQAogfTsKIAogZW51bSBtbHg0X3BvcnRfdHlwZSB7Ci0JTUxYNF9QT1JUX1RZUEVfSUIJPSAxIDw8IDAsCi0JTUxYNF9QT1JUX1RZUEVfRVRICT0gMSA8PCAxLAorCU1MWDRfUE9SVF9UWVBFX0lCCT0gMSwKKwlNTFg0X1BPUlRfVFlQRV9FVEgJPSAyLAorCU1MWDRfUE9SVF9UWVBFX0FVVE8JPSAzCiB9OwogCiBlbnVtIG1seDRfc3BlY2lhbF92bGFuX2lkeCB7CkBAIC0yMzcsNiArMjM4LDcgQEAKIAllbnVtIG1seDRfcG9ydF90eXBlCXBvcnRfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogCXU4CQkJc3VwcG9ydGVkX3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAl1MzIJCQlwb3J0X21hc2s7CisJZW51bSBtbHg0X3BvcnRfdHlwZQlwb3NzaWJsZV90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiB9OwogCiBzdHJ1Y3QgbWx4NF9idWZfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOTI5MTVlOC4uZDg0ZmViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMjc2LDQgKzI3Niw3IEBACiAjZW5kaWYKIH07CiAKKy8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgbW1fc3RydWN0J3MgY3B1X3ZtX21hc2suICovCisjZGVmaW5lIG1tX2NwdW1hc2sobW0pICgmKG1tKS0+Y3B1X3ZtX21hc2spCisKICNlbmRpZiAvKiBfTElOVVhfTU1fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvbW1pb3RyYWNlLmgKaW5kZXggMTM5ZDdjOC4uM2QxYjdiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21taW90cmFjZS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBNTUlPVFJBQ0VfSAotI2RlZmluZSBNTUlPVFJBQ0VfSAorI2lmbmRlZiBfTElOVVhfTU1JT1RSQUNFX0gKKyNkZWZpbmUgX0xJTlVYX01NSU9UUkFDRV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTEzLDI4ICsxMywzNCBAQAogCQkJCXVuc2lnbmVkIGxvbmcgY29uZGl0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAogc3RydWN0IGttbWlvX3Byb2JlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGttbWlvIGludGVybmFsIGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIGFkZHI7IC8qIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSBwcm9iZSBwb2ludCAqLwotCXVuc2lnbmVkIGxvbmcgbGVuOyAvKiBsZW5ndGggb2YgdGhlIHByb2JlIHJlZ2lvbiAqLwotCWttbWlvX3ByZV9oYW5kbGVyX3QgcHJlX2hhbmRsZXI7IC8qIENhbGxlZCBiZWZvcmUgYWRkciBpcyBleGVjdXRlZC4gKi8KLQlrbW1pb19wb3N0X2hhbmRsZXJfdCBwb3N0X2hhbmRsZXI7IC8qIENhbGxlZCBhZnRlciBhZGRyIGlzIGV4ZWN1dGVkICovCi0Jdm9pZCAqcHJpdmF0ZTsKKwkvKiBrbW1pbyBpbnRlcm5hbCBsaXN0OiAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwkvKiBzdGFydCBsb2NhdGlvbiBvZiB0aGUgcHJvYmUgcG9pbnQ6ICovCisJdW5zaWduZWQgbG9uZwkJYWRkcjsKKwkvKiBsZW5ndGggb2YgdGhlIHByb2JlIHJlZ2lvbjogKi8KKwl1bnNpZ25lZCBsb25nCQlsZW47CisJLyogQ2FsbGVkIGJlZm9yZSBhZGRyIGlzIGV4ZWN1dGVkOiAqLworCWttbWlvX3ByZV9oYW5kbGVyX3QJcHJlX2hhbmRsZXI7CisJLyogQ2FsbGVkIGFmdGVyIGFkZHIgaXMgZXhlY3V0ZWQ6ICovCisJa21taW9fcG9zdF9oYW5kbGVyX3QJcG9zdF9oYW5kbGVyOworCXZvaWQJCQkqcHJpdmF0ZTsKIH07CiAKLS8qIGttbWlvIGlzIGFjdGl2ZSBieSBzb21lIGttbWlvX3Byb2Jlcz8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2ttbWlvX2FjdGl2ZSh2b2lkKQotewotCWV4dGVybiB1bnNpZ25lZCBpbnQga21taW9fY291bnQ7Ci0JcmV0dXJuIGttbWlvX2NvdW50OwotfQorZXh0ZXJuIHVuc2lnbmVkIGludCBrbW1pb19jb3VudDsKIAogZXh0ZXJuIGludCByZWdpc3Rlcl9rbW1pb19wcm9iZShzdHJ1Y3Qga21taW9fcHJvYmUgKnApOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9rbW1pb19wcm9iZShzdHJ1Y3Qga21taW9fcHJvYmUgKnApOwogCisjaWZkZWYgQ09ORklHX01NSU9UUkFDRQorLyoga21taW8gaXMgYWN0aXZlIGJ5IHNvbWUga21taW9fcHJvYmVzPyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfa21taW9fYWN0aXZlKHZvaWQpCit7CisJcmV0dXJuIGttbWlvX2NvdW50OworfQorCiAvKiBDYWxsZWQgZnJvbSBwYWdlIGZhdWx0IGhhbmRsZXIuICovCiBleHRlcm4gaW50IGttbWlvX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfTU1JT1RSQUNFCiAvKiBDYWxsZWQgZnJvbSBpb3JlbWFwLmMgKi8KIGV4dGVybiB2b2lkIG1taW90cmFjZV9pb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJCQl2b2lkIF9faW9tZW0gKmFkZHIpOwpAQCAtNDMsNyArNDksMTcgQEAKIC8qIEZvciBhbnlvbmUgdG8gaW5zZXJ0IG1hcmtlcnMuIFJlbWVtYmVyIHRyYWlsaW5nIG5ld2xpbmUuICovCiBleHRlcm4gaW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotI2Vsc2UKKyNlbHNlIC8qICFDT05GSUdfTU1JT1RSQUNFOiAqLworc3RhdGljIGlubGluZSBpbnQgaXNfa21taW9fYWN0aXZlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGttbWlvX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1taW90cmFjZV9pb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCBfX2lvbWVtICphZGRyKQogewpAQCAtNjMsMjggKzc5LDI4IEBACiAjZW5kaWYgLyogQ09ORklHX01NSU9UUkFDRSAqLwogCiBlbnVtIG1tX2lvX29wY29kZSB7Ci0JTU1JT19SRUFEID0gMHgxLCAgICAgLyogc3RydWN0IG1taW90cmFjZV9ydyAqLwotCU1NSU9fV1JJVEUgPSAweDIsICAgIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KLQlNTUlPX1BST0JFID0gMHgzLCAgICAvKiBzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqLwotCU1NSU9fVU5QUk9CRSA9IDB4NCwgIC8qIHN0cnVjdCBtbWlvdHJhY2VfbWFwICovCi0JTU1JT19VTktOT1dOX09QID0gMHg1LCAvKiBzdHJ1Y3QgbW1pb3RyYWNlX3J3ICovCisJTU1JT19SRUFECT0gMHgxLAkvKiBzdHJ1Y3QgbW1pb3RyYWNlX3J3ICovCisJTU1JT19XUklURQk9IDB4MiwJLyogc3RydWN0IG1taW90cmFjZV9ydyAqLworCU1NSU9fUFJPQkUJPSAweDMsCS8qIHN0cnVjdCBtbWlvdHJhY2VfbWFwICovCisJTU1JT19VTlBST0JFCT0gMHg0LAkvKiBzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqLworCU1NSU9fVU5LTk9XTl9PUCA9IDB4NSwJLyogc3RydWN0IG1taW90cmFjZV9ydyAqLwogfTsKIAogc3RydWN0IG1taW90cmFjZV9ydyB7Ci0JcmVzb3VyY2Vfc2l6ZV90IHBoeXM7CS8qIFBDSSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCi0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQl1bnNpZ25lZCBsb25nIHBjOwkvKiBvcHRpb25hbCBwcm9ncmFtIGNvdW50ZXIgKi8KLQlpbnQgbWFwX2lkOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwkvKiBvbmUgb2YgTU1JT197UkVBRCxXUklURSxVTktOT1dOX09QfSAqLwotCXVuc2lnbmVkIGNoYXIgd2lkdGg7CS8qIHNpemUgb2YgcmVnaXN0ZXIgYWNjZXNzIGluIGJ5dGVzICovCisJcmVzb3VyY2Vfc2l6ZV90CXBoeXM7CS8qIFBDSSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZwl2YWx1ZTsKKwl1bnNpZ25lZCBsb25nCXBjOwkvKiBvcHRpb25hbCBwcm9ncmFtIGNvdW50ZXIgKi8KKwlpbnQJCW1hcF9pZDsKKwl1bnNpZ25lZCBjaGFyCW9wY29kZTsJLyogb25lIG9mIE1NSU9fe1JFQUQsV1JJVEUsVU5LTk9XTl9PUH0gKi8KKwl1bnNpZ25lZCBjaGFyCXdpZHRoOwkvKiBzaXplIG9mIHJlZ2lzdGVyIGFjY2VzcyBpbiBieXRlcyAqLwogfTsKIAogc3RydWN0IG1taW90cmFjZV9tYXAgewotCXJlc291cmNlX3NpemVfdCBwaHlzOwkvKiBiYXNlIGFkZHJlc3MgaW4gUENJIHNwYWNlICovCi0JdW5zaWduZWQgbG9uZyB2aXJ0OwkvKiBiYXNlIHZpcnR1YWwgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbGVuOwkvKiBtYXBwaW5nIHNpemUgKi8KLQlpbnQgbWFwX2lkOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwkvKiBNTUlPX1BST0JFIG9yIE1NSU9fVU5QUk9CRSAqLworCXJlc291cmNlX3NpemVfdAlwaHlzOwkvKiBiYXNlIGFkZHJlc3MgaW4gUENJIHNwYWNlICovCisJdW5zaWduZWQgbG9uZwl2aXJ0OwkvKiBiYXNlIHZpcnR1YWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJbGVuOwkvKiBtYXBwaW5nIHNpemUgKi8KKwlpbnQJCW1hcF9pZDsKKwl1bnNpZ25lZCBjaGFyCW9wY29kZTsJLyogTU1JT19QUk9CRSBvciBNTUlPX1VOUFJPQkUgKi8KIH07CiAKIC8qIGluIGtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYyAqLwpAQCAtOTQsNCArMTEwLDQgQEAKIGV4dGVybiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKTsKIGV4dGVybiBpbnQgbW1pb190cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogCi0jZW5kaWYgLyogTU1JT1RSQUNFX0ggKi8KKyNlbmRpZiAvKiBfTElOVVhfTU1JT1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IGZkZTg2NjcuLjFiZjU5MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtNDU0LDQgKzQ1NCwxMyBAQAogCiAjZGVmaW5lIERNSV9NQVRDSChhLCBiKQl7IGEsIGIgfQogCisjZGVmaW5lIFBMQVRGT1JNX05BTUVfU0laRQkyMAorI2RlZmluZSBQTEFURk9STV9NT0RVTEVfUFJFRklYCSJwbGF0Zm9ybToiCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgeworCWNoYXIgbmFtZVtQTEFURk9STV9OQU1FX1NJWkVdOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7Cit9OworCiAjZW5kaWYgLyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBjYWIyYTg1Li41MWY1NWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIE1OVF9OT0RJUkFUSU1FCTB4MTAKICNkZWZpbmUgTU5UX1JFTEFUSU1FCTB4MjAKICNkZWZpbmUgTU5UX1JFQURPTkxZCTB4NDAJLyogZG9lcyB0aGUgdXNlciB3YW50IHRoaXMgdG8gYmUgci9vPyAqLworI2RlZmluZSBNTlRfU1RSSUNUQVRJTUUgMHg4MAogCiAjZGVmaW5lIE1OVF9TSFJJTktBQkxFCTB4MTAwCiAjZGVmaW5lIE1OVF9JTUJBTEFOQ0VEX1dSSVRFX0NPVU5UCTB4MjAwIC8qIGp1c3QgZm9yIGRlYnVnZ2luZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggOGE0NTU2OS4uMGQ0NWI0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0xOTMsNiArMTkzLDkgQEAKIHN0cnVjdCBtZmNfY2FjaGUgCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbmV4dDsJCQkvKiBOZXh0IGVudHJ5IG9uIGNhY2hlIGxpbmUgCSovCisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKm1mY19uZXQ7CisjZW5kaWYKIAlfX2JlMzIgbWZjX21jYXN0Z3JwOwkJCS8qIEdyb3VwIHRoZSBlbnRyeSBiZWxvbmdzIHRvIAkqLwogCV9fYmUzMiBtZmNfb3JpZ2luOwkJCS8qIFNvdXJjZSBvZiBwYWNrZXQgCQkqLwogCXZpZmlfdCBtZmNfcGFyZW50OwkJCS8qIFNvdXJjZSBpbnRlcmZhY2UJCSovCkBAIC0yMTUsNiArMjE4LDE4IEBACiAJfSBtZmNfdW47CiB9OwogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbmV0ICptZmNfbmV0KGNvbnN0IHN0cnVjdCBtZmNfY2FjaGUgKm1mYykKK3sKKwlyZXR1cm4gcmVhZF9wbmV0KCZtZmMtPm1mY19uZXQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIG1mY19uZXRfc2V0KHN0cnVjdCBtZmNfY2FjaGUgKm1mYywgc3RydWN0IG5ldCAqbmV0KQoreworCXdyaXRlX3BuZXQoJm1mYy0+bWZjX25ldCwgaG9sZF9uZXQobmV0KSk7Cit9CisKICNkZWZpbmUgTUZDX1NUQVRJQwkJMQogI2RlZmluZSBNRkNfTk9USUZZCQkyCiAKQEAgLTI0MSw3ICsyNTYsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IHJ0bXNnOwotZXh0ZXJuIGludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCk7CitleHRlcm4gaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCA1Mzc1ZmFjLi40M2RjOTdlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTY1LDcgKzY1LDcgQEAKIAltaWZpX3QJbWlmNmNfbWlmaTsJCS8qIEluZGV4IG9mIE1JRiAqLwogCXVuc2lnbmVkIGNoYXIgbWlmNmNfZmxhZ3M7CS8qIE1JRkZfIGZsYWdzICovCiAJdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsJLyogdHRsIGxpbWl0ICovCi0JdV9zaG9ydAkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KKwlfX3UxNgkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KIAl1bnNpZ25lZCBpbnQgdmlmY19yYXRlX2xpbWl0OwkvKiBSYXRlIGxpbWl0ZXIgdmFsdWVzIChOSSkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmNwX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCmluZGV4IGY2OWU2NmQuLjMwYjA2YzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaApAQCAtMjA0LDcgKzIwNCw3IEBACiAvKiBsaW51eC9mcy9uY3Bmcy9kaXIuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5jcF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5jcF9kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmNwX3Jvb3RfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zOwogaW50IG5jcF9jb25uX2xvZ2dlZF9pbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBpbnQgbmNwX2RhdGVfZG9zMnVuaXgoX19sZTE2IHRpbWUsIF9fbGUxNiBkYXRlKTsKIHZvaWQgbmNwX2RhdGVfdW5peDJkb3MoaW50IHVuaXhfZGF0ZSwgX19sZTE2ICogdGltZSwgX19sZTE2ICogZGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oIGIvaW5jbHVkZS9saW51eC9uY3Bfbm8uaAppbmRleCBmNTZhNjk2Li5jZGRhYTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX25vLmgKQEAgLTIsMTggKzIsMTggQEAKICNkZWZpbmUgX05DUF9OTwogCiAvKiB0aGVzZSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBieXRlIGFzIHNlZW4gYnkgTkNQICovCi0jZGVmaW5lIGFST05MWQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpKQotI2RlZmluZSBhSElEREVOCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMikpCi0jZGVmaW5lIGFTWVNURU0JCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMig0KSkKLSNkZWZpbmUgYUVYRUNVVEUJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDgpKQotI2RlZmluZSBhRElSCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxMCkpCi0jZGVmaW5lIGFBUkNICQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyMCkpCi0jZGVmaW5lIGFTSEFSRUQJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDgwKSkKLSNkZWZpbmUgYURPTlRTVUJBTExPQ0FURQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTEpKQotI2RlZmluZSBhVFJBTlNBQ1RJT05BTAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDEyKSkKLSNkZWZpbmUgYVBVUkdFCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE2KSkKLSNkZWZpbmUgYVJFTkFNRUlOSElCSVQJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNykpCi0jZGVmaW5lIGFERUxFVEVJTkhJQklUCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTgpKQotI2RlZmluZSBhRE9OVENPTVBSRVNTCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MjcpKQorI2RlZmluZSBhUk9OTFkJCQkoX19jcHVfdG9fbGUzMigxKSkKKyNkZWZpbmUgYUhJRERFTgkJCShfX2NwdV90b19sZTMyKDIpKQorI2RlZmluZSBhU1lTVEVNCQkJKF9fY3B1X3RvX2xlMzIoNCkpCisjZGVmaW5lIGFFWEVDVVRFCQkoX19jcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgYURJUgkJCShfX2NwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBhQVJDSAkJCShfX2NwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBhU0hBUkVECQkJKF9fY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIGFET05UU1VCQUxMT0NBVEUJKF9fY3B1X3RvX2xlMzIoMUw8PDExKSkKKyNkZWZpbmUgYVRSQU5TQUNUSU9OQUwJCShfX2NwdV90b19sZTMyKDFMPDwxMikpCisjZGVmaW5lIGFQVVJHRQkJCShfX2NwdV90b19sZTMyKDFMPDwxNikpCisjZGVmaW5lIGFSRU5BTUVJTkhJQklUCQkoX19jcHVfdG9fbGUzMigxTDw8MTcpKQorI2RlZmluZSBhREVMRVRFSU5ISUJJVAkJKF9fY3B1X3RvX2xlMzIoMUw8PDE4KSkKKyNkZWZpbmUgYURPTlRDT01QUkVTUwkJKF9fY3B1X3RvX2xlMzIoMUw8PDI3KSkKIAogI2VuZGlmIC8qIF9OQ1BfTk8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmggYi9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCmluZGV4IDg3MzBkNWQuLjEyYzlkZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaApAQCAtMzEsNiArMzEsNyBAQAogICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgRmxhZ3MKICAqLwogCisjZGVmaW5lIE5URl9VU0UJCTB4MDEKICNkZWZpbmUgTlRGX1BST1hZCTB4MDgJLyogPT0gQVRGX1BVQkwgKi8KICNkZWZpbmUgTlRGX1JPVVRFUgkweDgwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDQ1MTVlZmEuLjRmYzJmZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTI5LDExICsxMjksMTUgQEAKIAlzb2NrZXRfc3RhdGUJCXN0YXRlOwogCXNob3J0CQkJdHlwZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CisJLyoKKwkgKiBQbGVhc2Uga2VlcCBmYXN5bmNfbGlzdCAmIHdhaXQgZmllbGRzIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUKKwkgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmFzeW5jX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwogCXN0cnVjdCBmaWxlCQkqZmlsZTsKIAlzdHJ1Y3Qgc29jawkJKnNrOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOwogfTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTdmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX05FVF9EUk9QTU9OX0gKKyNkZWZpbmUgX19ORVRfRFJPUE1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK3N0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCB7CisJX191OCBwY1s4XTsKKwlfX3UzMiBjb3VudDsKK307CisKKyNkZWZpbmUgTkVUX0RNX0NGR19WRVJTSU9OICAwCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfQ09VTlQgIDEKKyNkZWZpbmUgTkVUX0RNX0NGR19BTEVSVF9ERUxBWSAyCisjZGVmaW5lIE5FVF9ETV9DRkdfTUFYIDMKKworc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgeworCV9fdTMyIHR5cGU7CisJX191NjQgZGF0YSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCitzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgeworCV9fdTMyIGVudHJpZXM7CisJc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgb3B0aW9uc1swXTsKK307CisKK3N0cnVjdCBuZXRfZG1fYWxlcnRfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCBwb2ludHNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX3VzZXJfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBuZXRfZG1fY29uZmlnX21zZyB1c2VyOworCQlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyBhbGVydDsKKwl9IHU7Cit9OworCisKKy8qIFRoZXNlIGFyZSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGVzIGZvciB0aGlzIHByb3RvY29sICovCisKK2VudW0geworCU5FVF9ETV9DTURfVU5TUEVDID0gMCwKKwlORVRfRE1fQ01EX0FMRVJULAorCU5FVF9ETV9DTURfQ09ORklHLAorCU5FVF9ETV9DTURfU1RBUlQsCisJTkVUX0RNX0NNRF9TVE9QLAorCV9ORVRfRE1fQ01EX01BWCwKK307CisKKyNkZWZpbmUgTkVUX0RNX0NNRF9NQVggKF9ORVRfRE1fQ01EX01BWCAtIDEpCisKKy8qCisgKiBPdXIgZ3JvdXAgaWRlbnRpZmllcnMKKyAqLworI2RlZmluZSBORVRfRE1fR1JQX0FMRVJUIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmggYi9pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I4NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBVc2Vyc3BhY2UgQVBJIGZvciBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIG5ldHdvcmsgcGFja2V0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX1RJTUVTVEFNUElOR19ICisjZGVmaW5lIF9ORVRfVElNRVNUQU1QSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAgIC8qIGZvciBTT19USU1FU1RBTVBJTkcgKi8KKworLyogU09fVElNRVNUQU1QSU5HIGdldHMgYW4gaW50ZWdlciBiaXQgZmllbGQgY29tcHJpc2VkIG9mIHRoZXNlIHZhbHVlcyAqLworZW51bSB7CisJU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSA9ICgxPDwwKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFID0gKDE8PDEpLAorCVNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgPSAoMTw8MiksCisJU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSA9ICgxPDwzKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFID0gKDE8PDQpLAorCVNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFID0gKDE8PDUpLAorCVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFID0gKDE8PDYpLAorCVNPRl9USU1FU1RBTVBJTkdfTUFTSyA9CisJKFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIC0gMSkgfAorCVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFCit9OworCisvKioKKyAqIHN0cnVjdCBod3RzdGFtcF9jb25maWcgLSAlU0lPQ1NIV1RTVEFNUCBwYXJhbWV0ZXIKKyAqCisgKiBAZmxhZ3M6CW5vIGZsYWdzIGRlZmluZWQgcmlnaHQgbm93LCBtdXN0IGJlIHplcm8KKyAqIEB0eF90eXBlOglvbmUgb2YgSFdUU1RBTVBfVFhfKgorICogQHJ4X3R5cGU6CW9uZSBvZiBvbmUgb2YgSFdUU1RBTVBfRklMVEVSXyoKKyAqCisgKiAlU0lPQ1NIV1RTVEFNUCBleHBlY3RzIGEgJnN0cnVjdCBpZnJlcSB3aXRoIGEgaWZyX2RhdGEgcG9pbnRlciB0bworICogdGhpcyBzdHJ1Y3R1cmUuIGRldl9pZnNpb2MoKSBpbiB0aGUga2VybmVsIHRha2VzIGNhcmUgb2YgdGhlCisgKiB0cmFuc2xhdGlvbiBiZXR3ZWVuIDMyIGJpdCB1c2Vyc3BhY2UgYW5kIDY0IGJpdCBrZXJuZWwuIFRoZQorICogc3RydWN0dXJlIGlzIGludGVudGlvbmFsbHkgY2hvc2VuIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIGxheW91dCBvbgorICogMzIgYW5kIDY0IGJpdCBzeXN0ZW1zLCBkb24ndCBicmVhayB0aGlzIQorICovCitzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHsKKwlpbnQgZmxhZ3M7CisJaW50IHR4X3R5cGU7CisJaW50IHJ4X2ZpbHRlcjsKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT50eF90eXBlICovCitlbnVtIHsKKwkvKgorCSAqIE5vIG91dGdvaW5nIHBhY2tldCB3aWxsIG5lZWQgaGFyZHdhcmUgdGltZSBzdGFtcGluZzsKKwkgKiBzaG91bGQgYSBwYWNrZXQgYXJyaXZlIHdoaWNoIGFza3MgZm9yIGl0LCBubyBoYXJkd2FyZQorCSAqIHRpbWUgc3RhbXBpbmcgd2lsbCBiZSBkb25lLgorCSAqLworCUhXVFNUQU1QX1RYX09GRiwKKworCS8qCisJICogRW5hYmxlcyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGZvciBvdXRnb2luZyBwYWNrZXRzOworCSAqIHRoZSBzZW5kZXIgb2YgdGhlIHBhY2tldCBkZWNpZGVzIHdoaWNoIGFyZSB0byBiZQorCSAqIHRpbWUgc3RhbXBlZCBieSBzZXR0aW5nICVTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFCisJICogYmVmb3JlIHNlbmRpbmcgdGhlIHBhY2tldC4KKwkgKi8KKwlIV1RTVEFNUF9UWF9PTiwKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT5yeF9maWx0ZXIgKi8KK2VudW0geworCS8qIHRpbWUgc3RhbXAgbm8gaW5jb21pbmcgcGFja2V0IGF0IGFsbCAqLworCUhXVFNUQU1QX0ZJTFRFUl9OT05FLAorCisJLyogdGltZSBzdGFtcCBhbnkgaW5jb21pbmcgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX0FMTCwKKworCS8qIHJldHVybiB2YWx1ZTogdGltZSBzdGFtcCBhbGwgcGFja2V0cyByZXF1ZXN0ZWQgcGx1cyBzb21lIG90aGVycyAqLworCUhXVFNUQU1QX0ZJTFRFUl9TT01FLAorCisJLyogUFRQIHYxLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQsCisJLyogUFRQIHYxLCBVRFAsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DLAorCS8qIFBUUCB2MSwgVURQLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVEsCisJLyogUFRQIHYyLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQsCisJLyogUFRQIHYyLCBVRFAsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DLAorCS8qIFBUUCB2MiwgVURQLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVEsCisKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCwKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkMsCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUSwKKworCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQsCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkMsCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVRLAorfTsKKworI2VuZGlmIC8qIF9ORVRfVElNRVNUQU1QSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDY1OTM2NjcuLjJlNzc4M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzIsNiArMzIsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtOTYsNyArOTcsNyBAQAogICoJQ29tcHV0ZSB0aGUgd29yc3QgY2FzZSBoZWFkZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2xzCiAgKgl1c2VkLgogICovCi0gCisKICNpZiBkZWZpbmVkKENPTkZJR19XTEFOXzgwMjExKSB8fCBkZWZpbmVkKENPTkZJR19BWDI1KSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkKICMgaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfTUVTSCkKICMgIGRlZmluZSBMTF9NQVhfSEVBREVSIDEyOApAQCAtMTI0LDcgKzEyNSw3IEBACiAgKglOZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzLiBBa2luIHRvIHRoZSAyLjAgZXRoZXIgc3RhdHMgYnV0CiAgKgl3aXRoIGJ5dGUgY291bnRlcnMuCiAgKi8KLSAKKwogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMKIHsKIAl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCkBAIC0yODUsNyArMjg2LDcgQEAKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGF0IGJvb3QgdGltZSBjb25maWd1cmVkIG5ldGRldmljZSBzZXR0aW5ncy4gVGhleQotICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuIAorICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuCiAgKi8KIHN0cnVjdCBuZXRkZXZfYm9vdF9zZXR1cCB7CiAJY2hhciBuYW1lW0lGTkFNU0laXTsKQEAgLTMxNCw2ICszMTUsOSBAQAogCXNwaW5sb2NrX3QJCXBvbGxfbG9jazsKIAlpbnQJCQlwb2xsX293bmVyOwogI2VuZGlmCisKKwl1bnNpZ25lZCBpbnQJCWdyb19jb3VudDsKKwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKmdyb19saXN0OwpAQCAtMzI3LDYgKzMzMSwxNCBAQAogCU5BUElfU1RBVEVfTlBTVkMsCS8qIE5ldHBvbGwgLSBkb24ndCBkZXF1ZXVlIGZyb20gcG9sbF9saXN0ICovCiB9OwogCitlbnVtIHsKKwlHUk9fTUVSR0VELAorCUdST19NRVJHRURfRlJFRSwKKwlHUk9fSEVMRCwKKwlHUk9fTk9STUFMLAorCUdST19EUk9QLAorfTsKKwogZXh0ZXJuIHZvaWQgX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5hcGlfZGlzYWJsZV9wZW5kaW5nKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKQEAgLTU4Miw2ICs1OTQsMTQgQEAKICNkZWZpbmUgSEFWRV9ORVRERVZfUE9MTAogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqbmRvX3BvbGxfY29udHJvbGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwlpbnQJCQkoKm5kb19mY29lX2RkcF9zZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgIHUxNiB4aWQsCisJCQkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBzZ2MpOworCWludAkJCSgqbmRvX2Zjb2VfZGRwX2RvbmUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgIHUxNiB4aWQpOworI2VuZGlmCiB9OwogCiAvKgpAQCAtNjUwLDE0ICs2NzAsMTcgQEAKICNkZWZpbmUgTkVUSUZfRl9HUk8JCTE2Mzg0CS8qIEdlbmVyaWMgcmVjZWl2ZSBvZmZsb2FkICovCiAjZGVmaW5lIE5FVElGX0ZfTFJPCQkzMjc2OAkvKiBsYXJnZSByZWNlaXZlIG9mZmxvYWQgKi8KIAorI2RlZmluZSBORVRJRl9GX0ZDT0VfQ1JDCSgxIDw8IDI0KSAvKiBGQ29FIENSQzMyICovCisKIAkvKiBTZWdtZW50YXRpb24gb2ZmbG9hZCBmZWF0dXJlcyAqLwogI2RlZmluZSBORVRJRl9GX0dTT19TSElGVAkxNgotI2RlZmluZSBORVRJRl9GX0dTT19NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgTkVUSUZfRl9HU09fTUFTSwkweDAwZmYwMDAwCiAjZGVmaW5lIE5FVElGX0ZfVFNPCQkoU0tCX0dTT19UQ1BWNCA8PCBORVRJRl9GX0dTT19TSElGVCkKICNkZWZpbmUgTkVUSUZfRl9VRk8JCShTS0JfR1NPX1VEUCA8PCBORVRJRl9GX0dTT19TSElGVCkKICNkZWZpbmUgTkVUSUZfRl9HU09fUk9CVVNUCShTS0JfR1NPX0RPREdZIDw8IE5FVElGX0ZfR1NPX1NISUZUKQogI2RlZmluZSBORVRJRl9GX1RTT19FQ04JCShTS0JfR1NPX1RDUF9FQ04gPDwgTkVUSUZfRl9HU09fU0hJRlQpCiAjZGVmaW5lIE5FVElGX0ZfVFNPNgkJKFNLQl9HU09fVENQVjYgPDwgTkVUSUZfRl9HU09fU0hJRlQpCisjZGVmaW5lIE5FVElGX0ZfRlNPCQkoU0tCX0dTT19GQ09FIDw8IE5FVElGX0ZfR1NPX1NISUZUKQogCiAJLyogTGlzdCBvZiBmZWF0dXJlcyB3aXRoIHNvZnR3YXJlIGZhbGxiYWNrcy4gKi8KICNkZWZpbmUgTkVUSUZfRl9HU09fU09GVFdBUkUJKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082KQpAQCAtNzQwLDcgKzc2Myw3IEBACiAJdm9pZAkJCSpkc2FfcHRyOwkvKiBkc2Egc3BlY2lmaWMgZGF0YSAqLwogI2VuZGlmCiAJdm9pZCAJCQkqYXRhbGtfcHRyOwkvKiBBcHBsZVRhbGsgbGluayAJKi8KLQl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovICAKKwl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKmRuX3B0cjsgICAgICAgIC8qIERFQ25ldCBzcGVjaWZpYyBkYXRhICovCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKmlwNl9wdHI7ICAgICAgIC8qIElQdjYgc3BlY2lmaWMgZGF0YSAqLwogCXZvaWQJCQkqZWNfcHRyOwkvKiBFY29uZXQgc3BlY2lmaWMgZGF0YQkqLwpAQCAtNzUzLDcgKzc3Niw3IEBACiAgKi8KIAl1bnNpZ25lZCBsb25nCQlsYXN0X3J4OwkvKiBUaW1lIG9mIGxhc3QgUngJKi8KIAkvKiBJbnRlcmZhY2UgYWRkcmVzcyBpbmZvIHVzZWQgaW4gZXRoX3R5cGVfdHJhbnMoKSAqLwotCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CS8qIGh3IGFkZHJlc3MsIChiZWZvcmUgYmNhc3QgCisJdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsJLyogaHcgYWRkcmVzcywgKGJlZm9yZSBiY2FzdAogCQkJCQkJCSAgIGJlY2F1c2UgbW9zdCBwYWNrZXRzIGFyZSB1bmljYXN0KSAqLwogCiAJdW5zaWduZWQgY2hhcgkJYnJvYWRjYXN0W01BWF9BRERSX0xFTl07CS8qIGh3IGJjYXN0IGFkZAkqLwpAQCAtODQwLDYgKzg2MywxMSBAQAogCXN0cnVjdCBkY2JubF9ydG5sX29wcyAqZGNibmxfb3BzOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwkvKiBtYXggZXhjaGFuZ2UgaWQgZm9yIEZDb0UgTFJPIGJ5IGRkcCAqLworCXVuc2lnbmVkIGludAkJZmNvZV9kZHBfeGlkOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiAJc3RydWN0IHsKIAkJaW50CQkJKCppbml0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTk4NCw2ICsxMDEyLDkgQEAKIHZvaWQgbmV0aWZfbmFwaV9kZWwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTsKIAogc3RydWN0IG5hcGlfZ3JvX2NiIHsKKwkvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItPmRhdGEuICovCisJaW50IGRhdGFfb2Zmc2V0OworCiAJLyogVGhpcyBpcyBub24temVybyBpZiB0aGUgcGFja2V0IG1heSBiZSBvZiB0aGUgc2FtZSBmbG93LiAqLwogCWludCBzYW1lX2Zsb3c7CiAKQEAgLTEwODgsNiArMTExOSwzNiBAQAogI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKIGV4dGVybiBpbnQJCW5ldHBvbGxfdHJhcCh2b2lkKTsKICNlbmRpZgorZXh0ZXJuIHZvaWQJICAgICAgKnNrYl9ncm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBobGVuKTsKK2V4dGVybiBpbnQJICAgICAgIHNrYl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2dyb19sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5sZW4gLSBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCU5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0ICs9IGxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcmVzZXRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9ncm9fbWFjX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2JfbWFjX2hlYWRlcihza2IpIDwgc2tiLT5kYXRhID8gc2tiX21hY19oZWFkZXIoc2tiKSA6CisJICAgICAgIHBhZ2VfYWRkcmVzcyhza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpICsKKwkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldDsKK30KIAogc3RhdGljIGlubGluZSBpbnQgZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlLApAQCAtMTM3NiwxMiArMTQzNywxNSBAQAogZXh0ZXJuIHZvaWQJCW5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiBleHRlcm4gaW50CQlkZXZfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCW5hcGlfc2tiX2ZpbmlzaChpbnQgcmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCW5hcGlfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkJbmFwaV9yZXVzZV9za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqCW5hcGlfZnJhZ2luZm9fc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOworZXh0ZXJuIGludAkJbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCByZXQpOwogZXh0ZXJuIGludAkJbmFwaV9ncm9fZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQJCW5ldGlmX25pdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTU3NSw1NiArMTYzOSw2IEBACiAJcmV0dXJuICgxIDw8IGRlYnVnX3ZhbHVlKSAtIDE7CiB9CiAKLS8qIFRlc3QgaWYgcmVjZWl2ZSBuZWVkcyB0byBiZSBzY2hlZHVsZWQgYnV0IG9ubHkgaWYgdXAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCXJldHVybiBuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSk7Ci19Ci0KLS8qIEFkZCBpbnRlcmZhY2UgdG8gdGFpbCBvZiByeCBwb2xsIGxpc3QuIFRoaXMgYXNzdW1lcyB0aGF0IF9wcmVwIGhhcwotICogYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLX0KLQotLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGlycSBoYW5kbGVyLiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOwotfQotCi0vKiBUcnkgdG8gcmVzY2hlZHVsZSBwb2xsLiBDYWxsZWQgYnkgZGV2LT5wb2xsKCkgYWZ0ZXIgbmV0aWZfcnhfY29tcGxldGUoKS4gICovCi1zdGF0aWMgaW5saW5lIGludCBuZXRpZl9yeF9yZXNjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUobmFwaSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogc2FtZSBhcyBuZXRpZl9yeF9jb21wbGV0ZSwgZXhjZXB0IHRoYXQgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCi0gKiBoYXMgYWxyZWFkeSBiZWVuIGlzc3VlZAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JX19uYXBpX2NvbXBsZXRlKG5hcGkpOwotfQotCi0vKiBSZW1vdmUgaW50ZXJmYWNlIGZyb20gcG9sbCBsaXN0OiBpdCBtdXN0IGJlIGluIHRoZSBwb2xsIGxpc3QKLSAqIG9uIGN1cnJlbnQgY3B1LiBUaGlzIHByaW1pdGl2ZSBpcyBjYWxsZWQgYnkgZGV2LT5wb2xsKCksIHdoZW4KLSAqIGl0IGNvbXBsZXRlcyB0aGUgd29yay4gVGhlIGRldmljZSBjYW5ub3QgYmUgb3V0IG9mIHBvbGwgbGlzdCBhdCB0aGlzCi0gKiBtb21lbnQsIGl0IGlzIEJVRygpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCW5hcGlfY29tcGxldGUobmFwaSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3R4X2xvY2soc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLCBpbnQgY3B1KQogewogCXNwaW5fbG9jaygmdHhxLT5feG1pdF9sb2NrKTsKQEAgLTE4NzUsNyArMTg4OSw3IEBACiAKIAkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9JTkFDVElWRSkgewogCQkJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfTkVFREFSUCkgJiYKLQkJCSAgICBza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSkKIAkJCQlyZXR1cm4gMDsKIAogCQkJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQUxCKSB7CkBAIC0xODg0LDcgKzE4OTgsNyBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWlmIChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSXzgwMjNBRCAmJgotCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTE9XKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfU0xPVykpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCmluZGV4IDVhOGFmODcuLmFmOWQyZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKQEAgLTcsMTYgKzcsMjEgQEAKIGhlYWRlci15ICs9IHh0X0NPTk5NQVJLLmgKIGhlYWRlci15ICs9IHh0X0NPTk5TRUNNQVJLLmgKIGhlYWRlci15ICs9IHh0X0RTQ1AuaAoraGVhZGVyLXkgKz0geHRfTEVELmgKIGhlYWRlci15ICs9IHh0X01BUksuaAogaGVhZGVyLXkgKz0geHRfTkZMT0cuaAogaGVhZGVyLXkgKz0geHRfTkZRVUVVRS5oCiBoZWFkZXIteSArPSB4dF9SQVRFRVNULmgKIGhlYWRlci15ICs9IHh0X1NFQ01BUksuaAogaGVhZGVyLXkgKz0geHRfVENQTVNTLmgKK2hlYWRlci15ICs9IHh0X1RDUE9QVFNUUklQLmgKK2hlYWRlci15ICs9IHh0X1RQUk9YWS5oCiBoZWFkZXIteSArPSB4dF9jb21tZW50LmgKIGhlYWRlci15ICs9IHh0X2Nvbm5ieXRlcy5oCitoZWFkZXIteSArPSB4dF9jb25ubGltaXQuaAogaGVhZGVyLXkgKz0geHRfY29ubm1hcmsuaAogaGVhZGVyLXkgKz0geHRfY29ubnRyYWNrLmgKK2hlYWRlci15ICs9IHh0X2NsdXN0ZXIuaAogaGVhZGVyLXkgKz0geHRfZGNjcC5oCiBoZWFkZXIteSArPSB4dF9kc2NwLmgKIGhlYWRlci15ICs9IHh0X2VzcC5oCkBAIC0zMCw2ICszNSw3IEBACiBoZWFkZXIteSArPSB4dF9tdWx0aXBvcnQuaAogaGVhZGVyLXkgKz0geHRfb3duZXIuaAogaGVhZGVyLXkgKz0geHRfcGt0dHlwZS5oCitoZWFkZXIteSArPSB4dF9xdW90YS5oCiBoZWFkZXIteSArPSB4dF9yYXRlZXN0LmgKIGhlYWRlci15ICs9IHh0X3JlYWxtLmgKIGhlYWRlci15ICs9IHh0X3JlY2VudC5oCkBAIC0zOSw2ICs0NSw4IEBACiBoZWFkZXIteSArPSB4dF9zdHJpbmcuaAogaGVhZGVyLXkgKz0geHRfdGNwbXNzLmgKIGhlYWRlci15ICs9IHh0X3RjcHVkcC5oCitoZWFkZXIteSArPSB4dF90aW1lLmgKK2hlYWRlci15ICs9IHh0X3UzMi5oCiAKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfY29tbW9uLmgKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfZnRwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAppbmRleCBhMDQ5ZGY0Li4zMDY2Nzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0yLDYgKzIsOCBAQAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICiAvKiBUQ1AgdHJhY2tpbmcuICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUaGlzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIChjdG5ldGxpbmspICovCiBlbnVtIHRjcF9jb25udHJhY2sgewogCVRDUF9DT05OVFJBQ0tfTk9ORSwKQEAgLTM0LDggKzM2LDggQEAKICNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRAkweDEwCiAKIHN0cnVjdCBuZl9jdF90Y3BfZmxhZ3MgewotCXVfaW50OF90IGZsYWdzOwotCXVfaW50OF90IG1hc2s7CisJX191OCBmbGFnczsKKwlfX3U4IG1hc2s7CiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCA3ZDhlMDQ1Li5jNjAwMDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtMjUsOCArMjUsOCBAQAogLyogR2VuZXJhbCBmb3JtIG9mIGFkZHJlc3MgZmFtaWx5IGRlcGVuZGVudCBtZXNzYWdlLgogICovCiBzdHJ1Y3QgbmZnZW5tc2cgewotCXVfaW50OF90ICBuZmdlbl9mYW1pbHk7CQkvKiBBRl94eHggKi8KLQl1X2ludDhfdCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCisJX191OCAgbmZnZW5fZmFtaWx5OwkJLyogQUZfeHh4ICovCisJX191OCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCiAJX19iZTE2ICAgIHJlc19pZDsJCS8qIHJlc291cmNlIGlkICovCiB9OwogCkBAIC03Niw2ICs3Niw3IEBACiBleHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHVuc2lnbmVkIGludCBncm91cCk7CiBleHRlcm4gaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCAKIAkJCSAgaW50IGVjaG8pOworZXh0ZXJuIHZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpOwogCiBleHRlcm4gdm9pZCBuZm5sX2xvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKaW5kZXggZTE0NTE3Ni4uZWRhNTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaApAQCAtMSw1ICsxLDggQEAKICNpZm5kZWYgX05GTkVUTElOS19DT01QQVRfSAogI2RlZmluZSBfTkZORVRMSU5LX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZuZGVmIF9fS0VSTkVMX18KIC8qIE9sZCBuZm5ldGxpbmsgbWFjcm9zIGZvciB1c2Vyc3BhY2UgKi8KIApAQCAtMjAsOCArMjMsOCBAQAogCiBzdHJ1Y3QgbmZhdHRyCiB7Ci0JdV9pbnQxNl90IG5mYV9sZW47Ci0JdV9pbnQxNl90IG5mYV90eXBlOwkvKiB3ZSB1c2UgMTUgYml0cyBmb3IgdGhlIHR5cGUsIGFuZCB0aGUgaGlnaGVzdAorCV9fdTE2IG5mYV9sZW47CisJX191MTYgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CiAJCQkJICogYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgbmVzdGVkICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggZjY2MTczMS4uZDNiYWI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApAQCAtMTcsMTQgKzE3LDE0IEBACiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgewogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLwotCXVfaW50OF90CV9wYWQ7CisJX191OAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KKwlfX3U4CV9wYWQ7CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7CkBAIC0zNSwxMiArMzUsMTIgQEAKIGVudW0gbmZ1bG5sX2F0dHJfdHlwZSB7CiAJTkZVTEFfVU5TUEVDLAogCU5GVUxBX1BBQ0tFVF9IRFIsCi0JTkZVTEFfTUFSSywJCQkvKiB1X2ludDMyX3QgbmZtYXJrICovCisJTkZVTEFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KIAlORlVMQV9USU1FU1RBTVAsCQkvKiBuZnVsbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlVMQV9JRklOREVYX0lOREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX09VVERFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlVMQV9IV0FERFIsCQkJLyogbmZ1bG5sX21zZ19wYWNrZXRfaHcgKi8KIAlORlVMQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIAlORlVMQV9QUkVGSVgsCQkJLyogc3RyaW5nIHByZWZpeCAqLwpAQCAtNjUsMjMgKzY1LDIzIEBACiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX21vZGUgewogCV9fYmUzMgkJY29weV9yYW5nZTsKLQl1X2ludDhfdAljb3B5X21vZGU7Ci0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWNvcHlfbW9kZTsKKwlfX3U4CV9wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSBuZnVsbmxfYXR0cl9jb25maWcgewogCU5GVUxBX0NGR19VTlNQRUMsCiAJTkZVTEFfQ0ZHX0NNRCwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgKi8KIAlORlVMQV9DRkdfTU9ERSwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlICovCi0JTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogdV9pbnQzMl90IGJ1ZmZlciBzaXplICovCi0JTkZVTEFfQ0ZHX1RJTUVPVVQsCQkvKiB1X2ludDMyX3QgaW4gMS8xMDAgcyAqLwotCU5GVUxBX0NGR19RVEhSRVNILAkJLyogdV9pbnQzMl90ICovCi0JTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogdV9pbnQxNl90ICovCisJTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogX191MzIgYnVmZmVyIHNpemUgKi8KKwlORlVMQV9DRkdfVElNRU9VVCwJCS8qIF9fdTMyIGluIDEvMTAwIHMgKi8KKwlORlVMQV9DRkdfUVRIUkVTSCwJCS8qIF9fdTMyICovCisJTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogX191MTYgKi8KIAlfX05GVUxBX0NGR19NQVgKIH07CiAjZGVmaW5lIE5GVUxBX0NGR19NQVggKF9fTkZVTEFfQ0ZHX01BWCAtMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKaW5kZXggODNlNzg5Ni4uMjQ1NWZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKQEAgLTE1LDEzICsxNSwxMyBAQAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyIHsKIAlfX2JlMzIJCXBhY2tldF9pZDsJLyogdW5pcXVlIElEIG9mIHBhY2tldCBpbiBxdWV1ZSAqLwogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKQEAgLTMzLDEyICszMywxMiBAQAogCU5GUUFfVU5TUEVDLAogCU5GUUFfUEFDS0VUX0hEUiwKIAlORlFBX1ZFUkRJQ1RfSERSLAkJLyogbmZxbmxfbXNnX3ZlcmRpY3RfaHJkICovCi0JTkZRQV9NQVJLLAkJCS8qIHVfaW50MzJfdCBuZm1hcmsgKi8KKwlORlFBX01BUkssCQkJLyogX191MzIgbmZtYXJrICovCiAJTkZRQV9USU1FU1RBTVAsCQkJLyogbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlFBX0lGSU5ERVhfSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9PVVRERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfT1VUREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlFBX0hXQUREUiwJCQkvKiBuZnFubF9tc2dfcGFja2V0X2h3ICovCiAJTkZRQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIApAQCAtNjEsOCArNjEsOCBAQAogfTsKIAogc3RydWN0IG5mcW5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnFubF9tc2dfY29uZmlnX2NtZHMgKi8KLQl1X2ludDhfdAlfcGFkOworCV9fdTgJY29tbWFuZDsJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAlfcGFkOwogCV9fYmUxNgkJcGY7CQkvKiBBRl94eHggZm9yIFBGX1tVTl1CSU5EICovCiB9OwogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyB7CiAJX19iZTMyCQljb3B5X3JhbmdlOwotCXVfaW50OF90CWNvcHlfbW9kZTsJLyogZW51bSBuZnFubF9jb25maWdfbW9kZSAqLworCV9fdTgJY29weV9tb2RlOwkvKiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC04Miw3ICs4Miw3IEBACiAJTkZRQV9DRkdfVU5TUEVDLAogCU5GUUFfQ0ZHX0NNRCwJCQkvKiBuZnFubF9tc2dfY29uZmlnX2NtZCAqLwogCU5GUUFfQ0ZHX1BBUkFNUywJCS8qIG5mcW5sX21zZ19jb25maWdfcGFyYW1zICovCi0JTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogdV9pbnQzMl90ICovCisJTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogX191MzIgKi8KIAlfX05GUUFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZRQV9DRkdfTUFYIChfX05GUUFfQ0ZHX01BWC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggYzdlZTg3NC4uN2IxYTY1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWF9UQUJMRVNfSAogI2RlZmluZSBfWF9UQUJMRVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9GVU5DVElPTl9NQVhOQU1FTEVOIDMwCiAjZGVmaW5lIFhUX1RBQkxFX01BWE5BTUVMRU4gMzIKIApAQCAtOCwyMiArMTAsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCiAJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCQlfX3U4IHJldmlzaW9uOwogCQl9IHVzZXI7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KIAkJCXN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJX191MTYgbWF0Y2hfc2l6ZTsKIAl9IHU7CiAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMF07CkBAIC0zMywyMiArMzUsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCQlfX3UxNiB0YXJnZXRfc2l6ZTsKIAogCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KIAkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJCV9fdTggcmV2aXNpb247CiAJCX0gdXNlcjsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCV9fdTE2IHRhcmdldF9zaXplOwogCiAJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCiAJCQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCV9fdTE2IHRhcmdldF9zaXplOwogCX0gdTsKIAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKQEAgLTc0LDcgKzc2LDcgQEAKIHsKIAljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCXVfaW50OF90IHJldmlzaW9uOworCV9fdTggcmV2aXNpb247CiB9OwogCiAvKiBDT05USU5VRSB2ZXJkaWN0IGZvciB0YXJnZXRzICovCkBAIC05MCwxMCArOTIsMTAgQEAKICAqLwogc3RydWN0IF94dF9hbGlnbgogewotCXVfaW50OF90IHU4OwotCXVfaW50MTZfdCB1MTY7Ci0JdV9pbnQzMl90IHUzMjsKLQl1X2ludDY0X3QgdTY0OworCV9fdTggdTg7CisJX191MTYgdTE2OworCV9fdTMyIHUzMjsKKwlfX3U2NCB1NjQ7CiB9OwogCiAjZGVmaW5lIFhUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBfeHRfYWxpZ24pLTEpKSAJXApAQCAtMTA5LDcgKzExMSw3IEBACiAKIHN0cnVjdCB4dF9jb3VudGVycwogewotCXVfaW50NjRfdCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLworCV9fdTY0IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCiB9OwogCiAvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0FERF9DT1VOVEVSUy4gKi8KQEAgLTM0OSwyMyArMzUxLDIyIEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0JLyogQSB1bmlxdWUgbmFtZS4uLiAqLwotCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQogCS8qIFdoYXQgaG9va3MgeW91IHdpbGwgZW50ZXIgb24gKi8KIAl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CiAKIAkvKiBMb2NrIGZvciB0aGUgY3VydGFpbiAqLwotCXJ3bG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAKIAkvKiBNYW4gYmVoaW5kIHRoZSBjdXJ0YWluLi4uICovCi0JLy9zdHJ1Y3QgaXA2dF90YWJsZV9pbmZvICpwcml2YXRlOwotCXZvaWQgKnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCiAJdV9pbnQ4X3QgYWY7CQkvKiBhZGRyZXNzL3Byb3RvY29sIGZhbWlseSAqLworCisJLyogQSB1bmlxdWUgbmFtZS4uLiAqLworCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIH07CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgpAQCAtMzg2LDcgKzM4Nyw3IEBACiAKIAkvKiBpcHRfZW50cnkgdGFibGVzOiBvbmUgcGVyIENQVSAqLwogCS8qIE5vdGUgOiB0aGlzIGZpZWxkIE1VU1QgYmUgdGhlIGxhc3Qgb25lLCBzZWUgWFRfVEFCTEVfSU5GT19TWiAqLwotCWNoYXIgKmVudHJpZXNbMV07CisJdm9pZCAqZW50cmllc1sxXTsKIH07CiAKICNkZWZpbmUgWFRfVEFCTEVfSU5GT19TWiAob2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpIFwKQEAgLTQzMyw2ICs0MzQsMzEgQEAKIAogZXh0ZXJuIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CitleHRlcm4gdm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkLAorCQkJCSAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3KTsKKworLyoKKyAqIFRoaXMgaGVscGVyIGlzIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGFuZCBtdXN0IGJlIGlubGluZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlX2FsaWduZWQoY29uc3QgY2hhciAqX2EsCisJCQkJCQkgICBjb25zdCBjaGFyICpfYiwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKl9tYXNrKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlyZXR1cm4gcmV0OworfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCmluZGV4IDU4MTExMzUuLmE4MTNiZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApAQCAtMSw4ICsxLDEwIEBACiAjaWZuZGVmIF9YVF9DTEFTU0lGWV9ICiAjZGVmaW5lIF9YVF9DTEFTU0lGWV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8gewotCXVfaW50MzJfdCBwcmlvcml0eTsKKwlfX3UzMiBwcmlvcml0eTsKIH07CiAKICNlbmRpZiAvKl9YVF9DTEFTU0lGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAppbmRleCA0ZTU4YmE0Li43NjM1YzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTE5LDEyICsyMSwxMiBAQAogc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEgewotCXVfaW50MzJfdCBjdG1hcmssIGN0bWFzaywgbmZtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191MzIgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKKwlfX3U4IG1vZGU7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKaW5kZXggYzZiZDc1NC4uYjk3M2ZmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCkBAIC0xLDEzICsxLDE1IEBACiAjaWZuZGVmIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUNPTk5TRUNNQVJLX1NBVkUgPSAxLAogCUNPTk5TRUNNQVJLX1JFU1RPUkUsCiB9OwogCiBzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKaW5kZXggMTRkYTE5Ni4uNjQ4ZTBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaApAQCAtMTEsMTUgKzExLDE2IEBACiAjaWZuZGVmIF9YVF9EU0NQX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9EU0NQX1RBUkdFVF9ICiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiB0YXJnZXQgaW5mbyAqLwogc3RydWN0IHh0X0RTQ1BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKKwlfX3U4IGRzY3A7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCB0b3NfbWFzazsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzkxYTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfWFRfTEVEX0gKKyNkZWZpbmUgX1hUX0xFRF9ICisKK3N0cnVjdCB4dF9sZWRfaW5mbyB7CisJY2hhciBpZFsyN107ICAgICAgICAvKiBVbmlxdWUgSUQgZm9yIHRoaXMgdHJpZ2dlciBpbiB0aGUgTEVEIGNsYXNzICovCisJX191OCBhbHdheXNfYmxpbms7ICAvKiBCbGluayBldmVuIGlmIHRoZSBMRUQgaXMgYWxyZWFkeSBvbiAqLworCV9fdTMyIGRlbGF5OyAgICAgICAgLyogRGVsYXkgdW50aWwgTEVEIGlzIHN3aXRjaGVkIG9mZiBhZnRlciB0cmlnZ2VyICovCisKKwkvKiBLZXJuZWwgZGF0YSB1c2VkIGluIHRoZSBtb2R1bGUgKi8KKwl2b2lkICppbnRlcm5hbF9kYXRhIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZiAvKiBfWFRfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAppbmRleCA3NzhiMjc4Li4wMjgzMDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVmVyc2lvbiAwICovCiBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwpAQCAtMTUsMTEgKzE3LDExIEBACiAKIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiBzdHJ1Y3QgeHRfbWFya190Z2luZm8yIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKKwlfX3UzMiBtYXJrLCBtYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCmluZGV4IDRiMzZhZWIuLjg3YjU4MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaApAQCAtMSwxNyArMSwxOSBAQAogI2lmbmRlZiBfWFRfTkZMT0dfVEFSR0VUCiAjZGVmaW5lIF9YVF9ORkxPR19UQVJHRVQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfTkZMT0dfREVGQVVMVF9HUk9VUAkJMHgxCiAjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfVEhSRVNIT0xECTAKIAogI2RlZmluZSBYVF9ORkxPR19NQVNLCQkJMHgwCiAKIHN0cnVjdCB4dF9uZmxvZ19pbmZvIHsKLQl1X2ludDMyX3QJbGVuOwotCXVfaW50MTZfdAlncm91cDsKLQl1X2ludDE2X3QJdGhyZXNob2xkOwotCXVfaW50MTZfdAlmbGFnczsKLQl1X2ludDE2X3QJcGFkOworCV9fdTMyCWxlbjsKKwlfX3UxNglncm91cDsKKwlfX3UxNgl0aHJlc2hvbGQ7CisJX191MTYJZmxhZ3M7CisJX191MTYJcGFkOwogCWNoYXIJCXByZWZpeFs2NF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKaW5kZXggOWE5YWY3OWYuLjk4MmE4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKQEAgLTgsOSArOCwxMSBAQAogI2lmbmRlZiBfWFRfTkZRX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9ORlFfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfTkZRX2luZm8gewotCXVfaW50MTZfdCBxdWV1ZW51bTsKKwlfX3UxNiBxdWV1ZW51bTsKIH07CiAKICNlbmRpZiAvKiBfWFRfTkZRX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKaW5kZXggZjc5ZTMxMy4uNjYwNWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9UQVJHRVRfSAogI2RlZmluZSBfWFRfUkFURUVTVF9UQVJHRVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JhdGVlc3RfdGFyZ2V0X2luZm8gewogCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKLQlpbnQ4X3QJCQlpbnRlcnZhbDsKLQl1X2ludDhfdAkJZXdtYV9sb2c7CisJX19zOAkJCWludGVydmFsOworCV9fdTgJCWV3bWFfbG9nOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaAppbmRleCBjNTNmYmZmLi42ZmNkMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB2YXJpb3VzIHNlY3VyaXR5IHN1YnN5c3RlbXMgKGJ1dCBub3QKICAqIGF0IHRoZSBzYW1lIHRpbWUpLgpAQCAtMTIsMTIgKzE0LDEyIEBACiAjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWAkyNTYKIAogc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7Ci0JdV9pbnQzMl90IHNlbHNpZDsKKwlfX3UzMiBzZWxzaWQ7CiAJY2hhciBzZWxjdHhbU0VDTUFSS19TRUxDVFhfTUFYXTsKIH07CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOwogCX0gdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKaW5kZXggNTNhMjkyYy4uOWE2OTYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKQEAgLTEsOCArMSwxMCBAQAogI2lmbmRlZiBfWFRfVENQTVNTX0gKICNkZWZpbmUgX1hUX1RDUE1TU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gewotCXVfaW50MTZfdCBtc3M7CisJX191MTYgbXNzOwogfTsKIAogI2RlZmluZSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBhMGQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1hUX0NMVVNURVJfTUFUQ0hfSAorI2RlZmluZSBfWFRfQ0xVU1RFUl9NQVRDSF9ICisKK2VudW0geHRfY2x1c3Rlcl9mbGFncyB7CisJWFRfQ0xVU1RFUl9GX0lOVgk9ICgxIDw8IDApCit9OworCitzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvIHsKKwl1X2ludDMyX3QJCXRvdGFsX25vZGVzOworCXVfaW50MzJfdAkJbm9kZV9tYXNrOworCXVfaW50MzJfdAkJaGFzaF9zZWVkOworCXVfaW50MzJfdAkJZmxhZ3M7Cit9OworCisjZW5kaWYgLyogX1hUX0NMVVNURVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAppbmRleCBjMDIyYzk4Li41MmJkNjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5CWVRFU19ICiAjZGVmaW5lIF9YVF9DT05OQllURVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB4dF9jb25uYnl0ZXNfd2hhdCB7CiAJWFRfQ09OTkJZVEVTX1BLVFMsCiAJWFRfQ09OTkJZVEVTX0JZVEVTLApAQCAtMTksNyArMjEsNyBAQAogCQlhbGlnbmVkX3U2NCBmcm9tOwkvKiBjb3VudCB0byBiZSBtYXRjaGVkICovCiAJCWFsaWduZWRfdTY0IHRvOwkJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCX0gY291bnQ7Ci0JdV9pbnQ4X3Qgd2hhdDsJCS8qIGlwdF9jb25uYnl0ZXNfd2hhdCAqLwotCXVfaW50OF90IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KKwlfX3U4IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KKwlfX3U4IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCmluZGV4IDM1OWVmODYuLjU3MWUyNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5NQVJLX0gKICNkZWZpbmUgX1hUX0NPTk5NQVJLX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTEyLDEyICsxNCwxMiBAQAogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGludmVydDsKIH07CiAKIHN0cnVjdCB4dF9jb25ubWFya19tdGluZm8xIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgbWFyaywgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKaW5kZXggOGY1MzQ1Mi4uMzQzMGM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTYzLDkgKzYzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKIAogCS8qIEZsYWdzIHdvcmQgKi8KLQl1X2ludDhfdCBmbGFnczsKKwlfX3U4IGZsYWdzOwogCS8qIEludmVyc2UgZmxhZ3MgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsKKwlfX3U4IGludmZsYWdzOwogfTsKIAogc3RydWN0IHh0X2Nvbm50cmFja19tdGluZm8xIHsKQEAgLTczLDEyICs3MywxMiBAQAogCXVuaW9uIG5mX2luZXRfYWRkciBvcmlnZHN0X2FkZHIsIG9yaWdkc3RfbWFzazsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxkc3RfYWRkciwgcmVwbGRzdF9tYXNrOwotCXVfaW50MzJfdCBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7Ci0JdV9pbnQxNl90IGw0cHJvdG87CisJX191MzIgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OworCV9fdTE2IGw0cHJvdG87CiAJX19iZTE2IG9yaWdzcmNfcG9ydCwgb3JpZ2RzdF9wb3J0OwogCV9fYmUxNiByZXBsc3JjX3BvcnQsIHJlcGxkc3RfcG9ydDsKLQl1X2ludDE2X3QgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKLQl1X2ludDhfdCBzdGF0ZV9tYXNrLCBzdGF0dXNfbWFzazsKKwlfX3UxNiBtYXRjaF9mbGFncywgaW52ZXJ0X2ZsYWdzOworCV9fdTggc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTlRSQUNLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCmluZGV4IGUwMjIxYjkuLmE1NzllMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9EQ0NQX0hfCiAjZGVmaW5lIF9YVF9EQ0NQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX0RDQ1BfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9EQ0NQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX0RDQ1BfVFlQRQkJCTB4MDQKQEAgLTksMTQgKzExLDE0IEBACiAjZGVmaW5lIFhUX0RDQ1BfVkFMSURfRkxBR1MJCTB4MGYKIAogc3RydWN0IHh0X2RjY3BfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KIAotCXVfaW50MTZfdCBmbGFnczsKLQl1X2ludDE2X3QgaW52ZmxhZ3M7CisJX191MTYgZmxhZ3M7CisJX191MTYgaW52ZmxhZ3M7CiAKLQl1X2ludDE2X3QgdHlwZW1hc2s7Ci0JdV9pbnQ4X3Qgb3B0aW9uOworCV9fdTE2IHR5cGVtYXNrOworCV9fdTggb3B0aW9uOwogfTsKIAogI2VuZGlmIC8qIF9YVF9EQ0NQX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKaW5kZXggZjQ5YmMxYS4uMTVmODkzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaApAQCAtMTAsMjAgKzEwLDIyIEBACiAjaWZuZGVmIF9YVF9EU0NQX0gKICNkZWZpbmUgX1hUX0RTQ1BfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EU0NQX01BU0sJMHhmYwkvKiAxMTExMTEwMCAqLwogI2RlZmluZSBYVF9EU0NQX1NISUZUCTIKICNkZWZpbmUgWFRfRFNDUF9NQVgJMHgzZgkvKiAwMDExMTExMSAqLwogCiAvKiBtYXRjaCBpbmZvICovCiBzdHJ1Y3QgeHRfZHNjcF9pbmZvIHsKLQl1X2ludDhfdCBkc2NwOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGRzY3A7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX21hdGNoX2luZm8gewotCXVfaW50OF90IHRvc19tYXNrOwotCXVfaW50OF90IHRvc192YWx1ZTsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCmluZGV4IDkzODBmYjFjLi5lZjZmYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfRVNQX0gKICNkZWZpbmUgX1hUX0VTUF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfZXNwCiB7Ci0JdV9pbnQzMl90IHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTMyIHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCV9fdTggIGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IHh0X2VzcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKaW5kZXggNTFiMThkOC4uYjE5MjViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9IQVNITElNSVRfSAogI2RlZmluZSBfWFRfSEFTSExJTUlUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KICNkZWZpbmUgWFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKQEAgLTE4LDE1ICsyMCwxNSBAQAogfTsKIAogc3RydWN0IGhhc2hsaW1pdF9jZmcgewotCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiB1c2VyIHNwZWNpZmllZCAqLwotCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLwotCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KLQl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCi0JdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KIH07CiAKIHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyB7CkBAIC00MiwxNyArNDQsMTcgQEAKIH07CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnMSB7Ci0JdV9pbnQzMl90IG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCi0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCisJX191MzIgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwlfX3UzMiBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KIAogCS8qIHVzZXIgc3BlY2lmaWVkICovCi0JdV9pbnQzMl90IHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCi0JdV9pbnQzMl90IG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLwotCXVfaW50MzJfdCBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KLQl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLworCV9fdTMyIHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCisJX191MzIgbWF4OwkJLyogbWF4IG51bWJlciBvZiBlbnRyaWVzICovCisJX191MzIgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCisJX191MzIgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLwogCi0JdV9pbnQ4X3Qgc3JjbWFzaywgZHN0bWFzazsKKwlfX3U4IHNyY21hc2ssIGRzdG1hc2s7CiB9OwogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCmluZGV4IGE0Mjk5YzcuLmMxZjIxYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9ICiAjZGVmaW5lIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUlQUkFOR0VfU1JDICAgICA9IDEgPDwgMCwJLyogbWF0Y2ggc291cmNlIElQIGFkZHJlc3MgKi8KIAlJUFJBTkdFX0RTVCAgICAgPSAxIDw8IDEsCS8qIG1hdGNoIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKi8KQEAgLTExLDcgKzEzLDcgQEAKIHN0cnVjdCB4dF9pcHJhbmdlX210aW5mbyB7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNyY19taW4sIHNyY19tYXg7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGRzdF9taW4sIGRzdF9tYXg7Ci0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAppbmRleCA3YzJiNDM5Li5iODJlZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9YVF9MRU5HVEhfSAogI2RlZmluZSBfWFRfTEVOR1RIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9sZW5ndGhfaW5mbyB7Ci0gICAgdV9pbnQxNl90CW1pbiwgbWF4OwotICAgIHVfaW50OF90CWludmVydDsKKyAgICBfX3UxNgltaW4sIG1heDsKKyAgICBfX3U4CWludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9MRU5HVEhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAppbmRleCBiM2NlNjUzLi5iYjQ3ZmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKQEAgLTEsMjEgKzEsMjQgQEAKICNpZm5kZWYgX1hUX1JBVEVfSAogI2RlZmluZSBfWFRfUkFURV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCiAjZGVmaW5lIFhUX0xJTUlUX1NDQUxFIDEwMDAwCiAKK3N0cnVjdCB4dF9saW1pdF9wcml2OworCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKICAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KIHN0cnVjdCB4dF9yYXRlaW5mbyB7Ci0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQl1X2ludDMyX3QgY3JlZGl0OwotCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCXVuc2lnbmVkIGxvbmcgcHJldjsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdF9jYXAsIGNvc3Q7CiAKLQkvKiBVZ2x5LCB1Z2x5IGZ1Y2tlci4gKi8KLQlzdHJ1Y3QgeHRfcmF0ZWluZm8gKm1hc3RlcjsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqbWFzdGVyOwogfTsKICNlbmRpZiAvKl9YVF9SQVRFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCmluZGV4IGZhZTc0YmMuLjZmYTQ2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKQEAgLTEsMTQgKzEsMTYgQEAKICNpZm5kZWYgX1hUX01BUktfSAogI2RlZmluZSBfWFRfTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfbWFya19pbmZvIHsKICAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7Ci0gICAgdV9pbnQ4X3QgaW52ZXJ0OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X21hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKaW5kZXggZDQ5ZWU0MS4uMTg1ZGI0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9NVUxUSVBPUlRfSAogI2RlZmluZSBfWFRfTVVMVElQT1JUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfbXVsdGlwb3J0X2ZsYWdzCiB7CiAJWFRfTVVMVElQT1JUX1NPVVJDRSwKQEAgLTEzLDE4ICsxNSwxOCBAQAogLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIHh0X21hdGNoaW5mbzogMTYgYnl0ZXMgKi8KIHN0cnVjdCB4dF9tdWx0aXBvcnQKIHsKLQl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCi0JdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLwotCXVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLwogfTsKIAogc3RydWN0IHh0X211bHRpcG9ydF92MQogewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KLQl1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0IGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLworCV9fdTggaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCiB9OwogCiAjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKaW5kZXggYzg0ZTUyYy4uMjA4MTc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfT1dORVJfTUFUQ0hfSAogI2RlZmluZSBfWFRfT1dORVJfTUFUQ0hfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJWFRfT1dORVJfVUlEICAgID0gMSA8PCAwLAogCVhUX09XTkVSX0dJRCAgICA9IDEgPDwgMSwKQEAgLTgsOSArMTAsOSBAQAogfTsKIAogc3RydWN0IHh0X293bmVyX21hdGNoX2luZm8gewotCXVfaW50MzJfdCB1aWRfbWluLCB1aWRfbWF4OwotCXVfaW50MzJfdCBnaWRfbWluLCBnaWRfbWF4OwotCXVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CisJX191MzIgdWlkX21pbiwgdWlkX21heDsKKwlfX3UzMiBnaWRfbWluLCBnaWRfbWF4OworCV9fdTggbWF0Y2gsIGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfT1dORVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCmluZGV4IDI1YTdhMTguLjg1NTVlMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9QSFlTREVWX0gKICNkZWZpbmUgX1hUX1BIWVNERVZfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2VuZGlmCkBAIC0xNyw4ICsxOSw4IEBACiAJY2hhciBpbl9tYXNrW0lGTkFNU0laXTsKIAljaGFyIHBoeXNvdXRkZXZbSUZOQU1TSVpdOwogCWNoYXIgb3V0X21hc2tbSUZOQU1TSVpdOwotCXVfaW50OF90IGludmVydDsKLQl1X2ludDhfdCBiaXRtYXNrOworCV9fdTggaW52ZXJ0OworCV9fdTggYml0bWFzazsKIH07CiAKICNlbmRpZiAvKl9YVF9QSFlTREVWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAppbmRleCAwNTNkOGNjLi43YmI2NGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1BPTElDWV9ICiAjZGVmaW5lIF9YVF9QT0xJQ1lfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9QT0xJQ1lfTUFYX0VMRU0JNAogCiBlbnVtIHh0X3BvbGljeV9mbGFncwpAQCAtMTksNyArMjEsNyBAQAogCiBzdHJ1Y3QgeHRfcG9saWN5X3NwZWMKIHsKLQl1X2ludDhfdAlzYWRkcjoxLAorCV9fdTgJc2FkZHI6MSwKIAkJCWRhZGRyOjEsCiAJCQlwcm90bzoxLAogCQkJbW9kZToxLApAQCAtNTUsOSArNTcsOSBAQAogI2VuZGlmCiAJfTsKIAlfX2JlMzIJCQlzcGk7Ci0JdV9pbnQzMl90CQlyZXFpZDsKLQl1X2ludDhfdAkJcHJvdG87Ci0JdV9pbnQ4X3QJCW1vZGU7CisJX191MzIJCXJlcWlkOworCV9fdTgJCXByb3RvOworCV9fdTgJCW1vZGU7CiAKIAlzdHJ1Y3QgeHRfcG9saWN5X3NwZWMJbWF0Y2g7CiAJc3RydWN0IHh0X3BvbGljeV9zcGVjCWludmVydDsKQEAgLTY2LDggKzY4LDggQEAKIHN0cnVjdCB4dF9wb2xpY3lfaW5mbwogewogCXN0cnVjdCB4dF9wb2xpY3lfZWxlbSBwb2xbWFRfUE9MSUNZX01BWF9FTEVNXTsKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGxlbjsKKwlfX3UxNiBmbGFnczsKKwlfX3UxNiBsZW47CiB9OwogCiAjZW5kaWYgLyogX1hUX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAppbmRleCA0YzgzNjhkLi44ZGM4OWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKQEAgLTYsMTMgKzYsMTUgQEAKIH07CiAjZGVmaW5lIFhUX1FVT1RBX01BU0sJCTB4MQogCitzdHJ1Y3QgeHRfcXVvdGFfcHJpdjsKKwogc3RydWN0IHh0X3F1b3RhX2luZm8gewogCXVfaW50MzJfdAkJZmxhZ3M7CiAJdV9pbnQzMl90CQlwYWQ7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCWFsaWduZWRfdTY0CQlxdW90YTsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbwkqbWFzdGVyOworCXN0cnVjdCB4dF9xdW90YV9wcml2CSptYXN0ZXI7CiB9OwogCiAjZW5kaWYgLyogX1hUX1FVT1RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaAppbmRleCAyMDEwY2I3Li5kNDBhNjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9NQVRDSF9ICiAjZGVmaW5lIF9YVF9SQVRFRVNUX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfcmF0ZWVzdF9tYXRjaF9mbGFncyB7CiAJWFRfUkFURUVTVF9NQVRDSF9JTlZFUlQJPSAxPDwwLAogCVhUX1JBVEVFU1RfTUFUQ0hfQUJTCT0gMTw8MSwKQEAgLTIwLDEyICsyMiwxMiBAQAogc3RydWN0IHh0X3JhdGVlc3RfbWF0Y2hfaW5mbyB7CiAJY2hhcgkJCW5hbWUxW0lGTkFNU0laXTsKIAljaGFyCQkJbmFtZTJbSUZOQU1TSVpdOwotCXVfaW50MTZfdAkJZmxhZ3M7Ci0JdV9pbnQxNl90CQltb2RlOwotCXVfaW50MzJfdAkJYnBzMTsKLQl1X2ludDMyX3QJCXBwczE7Ci0JdV9pbnQzMl90CQlicHMyOwotCXVfaW50MzJfdAkJcHBzMjsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1vZGU7CisJX191MzIJCWJwczE7CisJX191MzIJCXBwczE7CisJX191MzIJCWJwczI7CisJX191MzIJCXBwczI7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCXN0cnVjdCB4dF9yYXRlZXN0CSplc3QxIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCmluZGV4IDIyMGU4NzIuLmQ0YTgyZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkVBTE1fSAogI2RlZmluZSBfWFRfUkVBTE1fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JlYWxtX2luZm8gewotCXVfaW50MzJfdCBpZDsKLQl1X2ludDMyX3QgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgaWQ7CisJX191MzIgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfUkVBTE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAppbmRleCA1Y2ZlYjgxLi5kMmMyNzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSAogI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCVhUX1JFQ0VOVF9DSEVDSyAgICA9IDEgPDwgMCwKIAlYVF9SRUNFTlRfU0VUICAgICAgPSAxIDw8IDEsCkBAIC0xNSwxMiArMTcsMTIgQEAKIH07CiAKIHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvIHsKLQl1X2ludDMyX3Qgc2Vjb25kczsKLQl1X2ludDMyX3QgaGl0X2NvdW50OwotCXVfaW50OF90IGNoZWNrX3NldDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgc2Vjb25kczsKKwlfX3UzMiBoaXRfY291bnQ7CisJX191OCBjaGVja19zZXQ7CisJX191OCBpbnZlcnQ7CiAJY2hhciBuYW1lW1hUX1JFQ0VOVF9OQU1FX0xFTl07Ci0JdV9pbnQ4X3Qgc2lkZTsKKwlfX3U4IHNpZGU7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCmluZGV4IDMyMDAwYmEuLjI5Mjg3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TQ1RQX0hfCiAjZGVmaW5lIF9YVF9TQ1RQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9TQ1RQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX1NDVFBfQ0hVTktfVFlQRVMJCTB4MDQKQEAgLTgsNDkgKzEwLDQ5IEBACiAjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MJCTB4MDcKIAogc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKLQl1X2ludDhfdCBjaHVua3R5cGU7Ci0JdV9pbnQ4X3QgZmxhZzsKLQl1X2ludDhfdCBmbGFnX21hc2s7CisJX191OCBjaHVua3R5cGU7CisJX191OCBmbGFnOworCV9fdTggZmxhZ19tYXNrOwogfTsKIAogI2RlZmluZSBYVF9OVU1fU0NUUF9GTEFHUwk0CiAKIHN0cnVjdCB4dF9zY3RwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLworCV9fdTMyIGNodW5rbWFwWzI1NiAvIHNpemVvZiAoX191MzIpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLwogCiAjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZICAgMHgwMSAgLyogTWF0Y2ggaWYgYW55IG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwogI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAgIDB4MDIgIC8qIE1hdGNoIGlmIGFsbCBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZICAweDA0ICAvKiBNYXRjaCBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgY2h1bmsgdHlwZXMgcHJlc2VudCAqLwogCi0JdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7CisJX191MzIgY2h1bmtfbWF0Y2hfdHlwZTsKIAlzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gZmxhZ19pbmZvW1hUX05VTV9TQ1RQX0ZMQUdTXTsKIAlpbnQgZmxhZ19jb3VudDsKIAotCXVfaW50MzJfdCBmbGFnczsKLQl1X2ludDMyX3QgaW52ZmxhZ3M7CisJX191MzIgZmxhZ3M7CisJX191MzIgaW52ZmxhZ3M7CiB9OwogCiAjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAJCVwKIAlkbyB7IAkJCQkJCVwKLQkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKLQkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildIHw9IAlcCisJCQkxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKTsJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAogCWRvIHsJCQkJCQkJXAotCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSAmPSAJCVwKLQkJCX4oMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildICY9IAkJXAorCQkJfigxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKSk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAJCQlcCiAoewkJCQkJCQkJXAotCSgoY2h1bmttYXApW3R5cGUgLyBieXRlcyAodV9pbnQzMl90KV0gJiAJCVwKLQkJKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7CVwKKwkoKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMgKF9fdTMyKV0gJiAJCVwKKwkJKDEgPDwgKHR5cGUgJSBieXRlcyAoX191MzIpKSkpID8gMTogMDsJXAogfSkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSBcCkBAIC02NSw3ICs2Nyw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIFwKIAlfX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCiBzdGF0aWMgaW5saW5lIGJvb2wKLV9fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCBfX3UzMiAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCkBAIC03Nyw3ICs3OSw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgXAogCV9fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQogc3RhdGljIGlubGluZSBib29sCi1fX3NjdHBfY2h1bmttYXBfaXNfYWxsX3NldChjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KGNvbnN0IF9fdTMyICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG47ICsraSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKaW5kZXggM2QzOGJjOS4uNGU5ODNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TVEFUSVNUSUNfSAogI2RlZmluZSBfWFRfU1RBVElTVElDX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfc3RhdGlzdGljX21vZGUgewogCVhUX1NUQVRJU1RJQ19NT0RFX1JBTkRPTSwKIAlYVF9TVEFUSVNUSUNfTU9ERV9OVEgsCkBAIC0xMywyMSArMTUsMjIgQEAKIH07CiAjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLCQkweDEKIAorc3RydWN0IHh0X3N0YXRpc3RpY19wcml2OworCiBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gewotCXVfaW50MTZfdAkJCW1vZGU7Ci0JdV9pbnQxNl90CQkJZmxhZ3M7CisJX191MTYJCQltb2RlOworCV9fdTE2CQkJZmxhZ3M7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CXByb2JhYmlsaXR5OworCQkJX191MzIJcHJvYmFiaWxpdHk7CiAJCX0gcmFuZG9tOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CWV2ZXJ5OwotCQkJdV9pbnQzMl90CXBhY2tldDsKLQkJCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCi0JCQl1X2ludDMyX3QJY291bnQ7CisJCQlfX3UzMglldmVyeTsKKwkJCV9fdTMyCXBhY2tldDsKKwkJCV9fdTMyCWNvdW50OyAvKiB1bnVzZWQgKi8KIAkJfSBudGg7CiAJfSB1OwotCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbwkqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwlzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiB9OwogCiAjZW5kaWYgLyogX1hUX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCmluZGV4IDhhNmJhN2IuLmVjYmI5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU1RSSU5HX0gKICNkZWZpbmUgX1hUX1NUUklOR19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIDEyOAogI2RlZmluZSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIDE2CiAKQEAgLTExLDE4ICsxMywxOCBAQAogCiBzdHJ1Y3QgeHRfc3RyaW5nX2luZm8KIHsKLQl1X2ludDE2X3QgZnJvbV9vZmZzZXQ7Ci0JdV9pbnQxNl90IHRvX29mZnNldDsKKwlfX3UxNiBmcm9tX29mZnNldDsKKwlfX3UxNiB0b19vZmZzZXQ7CiAJY2hhcgkgIGFsZ29bWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRV07CiAJY2hhciAJICBwYXR0ZXJuW1hUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFXTsKLQl1X2ludDhfdCAgcGF0bGVuOworCV9fdTggIHBhdGxlbjsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgaW52ZXJ0OworCQkJX191OCAgaW52ZXJ0OwogCQl9IHYwOwogCiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgZmxhZ3M7CisJCQlfX3U4ICBmbGFnczsKIAkJfSB2MTsKIAl9IHU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKaW5kZXggZTAzMjc0Yy4uZmJhYzU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfWFRfVENQTVNTX01BVENIX0gKICNkZWZpbmUgX1hUX1RDUE1TU19NQVRDSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8gewotICAgIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OwotICAgIHVfaW50OF90IGludmVydDsKKyAgICBfX3UxNiBtc3NfbWluLCBtc3NfbWF4OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qX1hUX1RDUE1TU19NQVRDSF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKaW5kZXggNzhiYzY1Zi4uYTQ5MGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKQEAgLTEsMTUgKzEsMTcgQEAKICNpZm5kZWYgX1hUX1RDUFVEUF9ICiAjZGVmaW5lIF9YVF9UQ1BVRFBfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVENQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdGNwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLwotCXVfaW50OF90IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KLQl1X2ludDhfdCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCV9fdTggZmxnX21hc2s7CQkJLyogVENQIGZsYWdzIG1hc2sgYnl0ZSAqLworCV9fdTggZmxnX2NtcDsJCQkvKiBUQ1AgZmxhZ3MgY29tcGFyZSBieXRlICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLwpAQCAtMjIsOSArMjQsOSBAQAogLyogVURQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdWRwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwdF91ZHAuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IDQ5OWFhOTMuLmY4MTA1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC01OSw5ICs1OSw5IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuZl9icmlkZ2VfZW5jYXBfaGVhZGVyX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QXzgwMjFRKToKIAkJcmV0dXJuIFZMQU5fSExFTjsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOgogCQlyZXR1cm4gUFBQT0VfU0VTX0hMRU47CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAppbmRleCA5MmY0YmRhLi5hNzg0NDViZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCkBAIC05LDEwICs5LDEwIEBACiAjZGVmaW5lIElQVF9PV05FUl9DT01NCTB4MTAKIAogc3RydWN0IGlwdF9vd25lcl9pbmZvIHsKLSAgICB1aWRfdCB1aWQ7Ci0gICAgZ2lkX3QgZ2lkOwotICAgIHBpZF90IHBpZDsKLSAgICBwaWRfdCBzaWQ7CisgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CisgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CisgICAgX19rZXJuZWxfcGlkX3QgcGlkOworICAgIF9fa2VybmVsX3BpZF90IHNpZDsKICAgICBjaGFyIGNvbW1bMTZdOwogICAgIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CS8qIGZsYWdzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAppbmRleCA4ODg3YTVmLi5hY2E0YmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZApAQCAtMTEsNiArMTEsNyBAQAogaGVhZGVyLXkgKz0gaXA2dF9saW1pdC5oCiBoZWFkZXIteSArPSBpcDZ0X21hYy5oCiBoZWFkZXIteSArPSBpcDZ0X21hcmsuaAoraGVhZGVyLXkgKz0gaXA2dF9taC5oCiBoZWFkZXIteSArPSBpcDZ0X211bHRpcG9ydC5oCiBoZWFkZXIteSArPSBpcDZ0X29wdHMuaAogaGVhZGVyLXkgKz0gaXA2dF9vd25lci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmluZGV4IDE5OTM3ZGEuLmVjNWNjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCkBAIC04LDEwICs4LDEwIEBACiAjZGVmaW5lIElQNlRfT1dORVJfU0lECTB4MDgKIAogc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7Ci0gICAgdWlkX3QgdWlkOwotICAgIGdpZF90IGdpZDsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgcGlkX3Qgc2lkOworICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOworICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworICAgIF9fa2VybmVsX3BpZF90IHBpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBzaWQ7CiAgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggNTFiMDlhMS4uNWJhMzk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTEwMyw2ICsxMDMsOCBAQAogI2RlZmluZSBORVRMSU5LX0FERF9NRU1CRVJTSElQCTEKICNkZWZpbmUgTkVUTElOS19EUk9QX01FTUJFUlNISVAJMgogI2RlZmluZSBORVRMSU5LX1BLVElORk8JCTMKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfRVJST1IJNAorI2RlZmluZSBORVRMSU5LX05PX0VOT0JVRlMJNQogCiBzdHJ1Y3QgbmxfcGt0aW5mbwogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCBlMzhkM2M5Li5kZTk5MDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtNjMsNiArNjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKKworCXJldHVybiBucGluZm8gJiYgKG5waW5mby0+cnhfbnAgfHwgbnBpbmZvLT5yeF9mbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoIWxpc3RfZW1wdHkoJnNrYi0+ZGV2LT5uYXBpX2xpc3QpKQpAQCAtOTksNiArMTA2LDEwIEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBkYjg2N2IwLi44Y2M4ODA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTQxNSw3ICs0MTUsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAjZW5kaWYgLyogQ09ORklHX05GU19WMyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mc19kZW50cnlfb3BlcmF0aW9uczsKIAogZXh0ZXJuIHZvaWQgbmZzX2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqZGlyKTsKIGV4dGVybiBpbnQgbmZzX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5mc19maCAqZmgsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggYTU1MGI1Mi4uNDNhNzEzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTQwNiw2ICs0MDYsOCBAQAogCWludAkJCW1hc2s7CiAJc3RydWN0IHBvc2l4X2FjbCAqCWFjbF9hY2Nlc3M7CiAJc3RydWN0IHBvc2l4X2FjbCAqCWFjbF9kZWZhdWx0OworCXNpemVfdAkJCWxlbjsKKwl1bnNpZ25lZCBpbnQJCW5wYWdlczsKIAlzdHJ1Y3QgcGFnZSAqKgkJcGFnZXM7CiB9OwogCkBAIC03ODMsNyArNzg1LDcgQEAKICAqLwogc3RydWN0IG5mc19ycGNfb3BzIHsKIAl1MzIJdmVyc2lvbjsJCS8qIFByb3RvY29sIHZlcnNpb24gKi8KLQlzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRlbnRyeV9vcHM7CisJY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkZW50cnlfb3BzOwogCWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpkaXJfaW5vZGVfb3BzOwogCWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpmaWxlX2lub2RlX29wczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaCBiL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKaW5kZXggNTQ0ODdhOS4uNDMwMTFiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCkBAIC0zNyw2ICszNyw5IEBACiAjZGVmaW5lIE5GU0FDTF9NQVhQQUdFUwkJKCgyKig4KzEyKk5GU19BQ0xfTUFYX0VOVFJJRVMpICsgUEFHRV9TSVpFLTEpIFwKIAkJCQkgPj4gUEFHRV9TSElGVCkKIAorI2RlZmluZSBORlNfQUNMX01BWF9FTlRSSUVTX0lOTElORQkoNSkKKyNkZWZpbmUgTkZTX0FDTF9JTkxJTkVfQlVGU0laRQkoKDIqKDIrMypORlNfQUNMX01BWF9FTlRSSUVTX0lOTElORSkpIDw8IDIpCisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBuZnNhY2xfc2l6ZShzdHJ1Y3QgcG9zaXhfYWNsICphY2xfYWNjZXNzLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2xfZGVmYXVsdCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggZTg2ZWQ1OS4uY2JlOGNlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqIEBOTDgwMjExX0NNRF9TRVRfV0lQSFk6IHNldCB3aXBoeSBwYXJhbWV0ZXJzLCBuZWVkcyAlTkw4MDIxMV9BVFRSX1dJUEhZIG9yCiAgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVg7IGNhbiBiZSB1c2VkIHRvIHNldCAlTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUsCiAgKgklTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMsICVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSwgYW5kL29yCi0gKgklTkw4MDIxMV9BVFRSX1dJUEhZX1NFQ19DSEFOX09GRlNFVC4KKyAqCSVOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFLgogICogQE5MODAyMTFfQ01EX05FV19XSVBIWTogTmV3bHkgY3JlYXRlZCB3aXBoeSwgcmVzcG9uc2UgdG8gZ2V0IHJlcXVlc3QKICAqCW9yIHJlbmFtZSBub3RpZmljYXRpb24uIEhhcyBhdHRyaWJ1dGVzICVOTDgwMjExX0FUVFJfV0lQSFkgYW5kCiAgKgklTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUuCkBAIC03Miw4ICs3Miw4IEBACiAgKgogICogQE5MODAyMTFfQ01EX0dFVF9LRVk6IEdldCBzZXF1ZW5jZSBjb3VudGVyIGluZm9ybWF0aW9uIGZvciBhIGtleSBzcGVjaWZpZWQKICAqCWJ5ICVOTDgwMjExX0FUVFJfS0VZX0lEWCBhbmQvb3IgJU5MODAyMTFfQVRUUl9NQUMuCi0gKiBATkw4MDIxMV9DTURfU0VUX0tFWTogU2V0IGtleSBhdHRyaWJ1dGVzICVOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFQgb3IKLSAqCSVOTDgwMjExX0FUVFJfS0VZX1RIUkVTSE9MRC4KKyAqIEBOTDgwMjExX0NNRF9TRVRfS0VZOiBTZXQga2V5IGF0dHJpYnV0ZXMgJU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVCwKKyAqCSVOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVCwgb3IgJU5MODAyMTFfQVRUUl9LRVlfVEhSRVNIT0xELgogICogQE5MODAyMTFfQ01EX05FV19LRVk6IGFkZCBhIGtleSB3aXRoIGdpdmVuICVOTDgwMjExX0FUVFJfS0VZX0RBVEEsCiAgKgklTkw4MDIxMV9BVFRSX0tFWV9JRFgsICVOTDgwMjExX0FUVFJfTUFDIGFuZCAlTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVIKICAqCWF0dHJpYnV0ZXMuCkBAIC04NCw3ICs4NCw3IEBACiAgKgklTkw4MDIyMl9DTURfTkVXX0JFQUNPTiBtZXNzYWdlKQogICogQE5MODAyMTFfQ01EX1NFVF9CRUFDT046IHNldCB0aGUgYmVhY29uIG9uIGFuIGFjY2VzcyBwb2ludCBpbnRlcmZhY2UKICAqCXVzaW5nIHRoZSAlTkw4MDIxMV9BVFRSX0JFQUNPTl9JTlRFUlZBTCwgJU5MODAyMTFfQVRUUl9EVElNX1BFUklPRCwKLSAqCSVOTDgwMjExX0JFQUNPTl9IRUFEIGFuZCAlTkw4MDIxMV9CRUFDT05fVEFJTCBhdHRyaWJ1dGVzLgorICoJJU5MODAyMTFfQVRUUl9CRUFDT05fSEVBRCBhbmQgJU5MODAyMTFfQVRUUl9CRUFDT05fVEFJTCBhdHRyaWJ1dGVzLgogICogQE5MODAyMTFfQ01EX05FV19CRUFDT046IGFkZCBhIG5ldyBiZWFjb24gdG8gYW4gYWNjZXNzIHBvaW50IGludGVyZmFjZSwKICAqCXBhcmFtZXRlcnMgYXJlIGxpa2UgZm9yICVOTDgwMjExX0NNRF9TRVRfQkVBQ09OLgogICogQE5MODAyMTFfQ01EX0RFTF9CRUFDT046IHJlbW92ZSB0aGUgYmVhY29uLCBzdG9wIHNlbmRpbmcgaXQKQEAgLTExMyw2ICsxMTMsOCBAQAogICogQE5MODAyMTFfQ01EX1NFVF9CU1M6IFNldCBCU1MgYXR0cmlidXRlcyBmb3IgQlNTIGlkZW50aWZpZWQgYnkKICAqCSVOTDgwMjExX0FUVFJfSUZJTkRFWC4KICAqCisgKiBATkw4MDIxMV9DTURfR0VUX1JFRzogYXNrIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNlbmQgdXMgaXRzIGN1cnJlbnRseSBzZXQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KICAqIEBOTDgwMjExX0NNRF9TRVRfUkVHOiBTZXQgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4gQ1JEQSBzZW5kcyB0aGlzIGNvbW1hbmQKICAqCWFmdGVyIGJlaW5nIHF1ZXJpZWQgYnkgdGhlIGtlcm5lbC4gQ1JEQSByZXBsaWVzIGJ5IHNlbmRpbmcgYSByZWd1bGF0b3J5CiAgKglkb21haW4gc3RydWN0dXJlIHdoaWNoIGNvbnNpc3RzIG9mICVOTDgwMjExX0FUVFJfUkVHX0FMUEhBIHNldCB0byBvdXIKQEAgLTEzMyw2ICsxMzUsNzAgQEAKICAqIEBOTDgwMjExX0NNRF9TRVRfTUVTSF9QQVJBTVM6IFNldCBtZXNoIG5ldHdvcmtpbmcgcHJvcGVydGllcyBmb3IgdGhlCiAgKiAgICAgIGludGVyZmFjZSBpZGVudGlmaWVkIGJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWAogICoKKyAqIEBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRTogU2V0IGV4dHJhIElFcyBmb3IgbWFuYWdlbWVudCBmcmFtZXMuIFRoZQorICoJaW50ZXJmYWNlIGlzIGlkZW50aWZpZWQgd2l0aCAlTkw4MDIxMV9BVFRSX0lGSU5ERVggYW5kIHRoZSBtYW5hZ2VtZW50CisgKglmcmFtZSBzdWJ0eXBlIHdpdGggJU5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUuIFRoZSBleHRyYSBJRSBkYXRhIHRvIGJlCisgKglhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQgbWFuYWdlbWVudCBmcmFtZSBpcyBzcGVjaWZpZWQgd2l0aAorICoJJU5MODAyMTFfQVRUUl9JRS4gSWYgdGhlIGNvbW1hbmQgc3VjY2VlZHMsIHRoZSByZXF1ZXN0ZWQgZGF0YSB3aWxsIGJlCisgKglhZGRlZCB0byBhbGwgc3BlY2lmaWVkIG1hbmFnZW1lbnQgZnJhbWVzIGdlbmVyYXRlZCBieQorICoJa2VybmVsL2Zpcm13YXJlL2RyaXZlci4KKyAqCU5vdGU6IFRoaXMgY29tbWFuZCBoYXMgYmVlbiByZW1vdmVkIGFuZCBpdCBpcyBvbmx5IHJlc2VydmVkIGF0IHRoaXMKKyAqCXBvaW50IHRvIGF2b2lkIHJlLXVzaW5nIGV4aXN0aW5nIGNvbW1hbmQgbnVtYmVyLiBUaGUgZnVuY3Rpb25hbGl0eSB0aGlzCisgKgljb21tYW5kIHdhcyBwbGFubmVkIGZvciBoYXMgYmVlbiBwcm92aWRlZCB3aXRoIGNsZWFuZXIgZGVzaWduIHdpdGggdGhlCisgKglvcHRpb24gdG8gc3BlY2lmeSBhZGRpdGlvbmFsIElFcyBpbiBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCisgKglOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsIE5MODAyMTFfQ01EX0FTU09DSUFURSwKKyAqCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFLCBhbmQgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFLgorICoKKyAqIEBOTDgwMjExX0NNRF9HRVRfU0NBTjogZ2V0IHNjYW4gcmVzdWx0cworICogQE5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTjogdHJpZ2dlciBhIG5ldyBzY2FuIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMKKyAqIEBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTOiBzY2FuIG5vdGlmaWNhdGlvbiAoYXMgYSByZXBseSB0bworICoJTkw4MDIxMV9DTURfR0VUX1NDQU4gYW5kIG9uIHRoZSAic2NhbiIgbXVsdGljYXN0IGdyb3VwKQorICogQE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRDogc2NhbiB3YXMgYWJvcnRlZCwgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbnMsCisgKglwYXJ0aWFsIHNjYW4gcmVzdWx0cyBtYXkgYmUgYXZhaWxhYmxlCisgKgorICogQE5MODAyMTFfQ01EX1JFR19DSEFOR0U6IGluZGljYXRlcyB0byB1c2Vyc3BhY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJaGFzIGJlZW4gY2hhbmdlZCBhbmQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgcmVxdWVzdCBpbmZvcm1hdGlvbgorICogCXRoYXQgY2F1c2VkIHRoZSBjaGFuZ2Ugc3VjaCBhcyB3aG8gaW5pdGlhdGVkIHRoZSByZWd1bGF0b3J5IHJlcXVlc3QKKyAqIAkoJU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SKSwgdGhlIHdpcGh5X2lkeAorICogCSglTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIpIG9uIHdoaWNoIHRoZSByZXF1ZXN0IHdhcyBtYWRlIGZyb20gaWYKKyAqIAl0aGUgaW5pdGlhdG9yIHdhcyAlTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IKKyAqIAklTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiwgdGhlIHR5cGUgb2YgcmVndWxhdG9yeSBkb21haW4KKyAqIAlzZXQgKCVOTDgwMjExX0FUVFJfUkVHX1RZUEUpLCBpZiB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbiBpcworICogCSVOTDgwMjExX1JFR19UWVBFX0NPVU5UUlkgdGhlIGFscGhhMiB0byB3aGljaCB3ZSBoYXZlIG1vdmVkIG9uCisgKiAJdG8gKCVOTDgwMjExX0FUVFJfUkVHX0FMUEhBMikuCisgKgorICogQE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURTogYXV0aGVudGljYXRpb24gcmVxdWVzdCBhbmQgbm90aWZpY2F0aW9uLgorICoJVGhpcyBjb21tYW5kIGlzIHVzZWQgYm90aCBhcyBhIGNvbW1hbmQgKHJlcXVlc3QgdG8gYXV0aGVudGljYXRlKSBhbmQKKyAqCWFzIGFuIGV2ZW50IG9uIHRoZSAibWxtZSIgbXVsdGljYXN0IGdyb3VwIGluZGljYXRpbmcgY29tcGxldGlvbiBvZiB0aGUKKyAqCWF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuCisgKglXaGVuIHVzZWQgYXMgYSBjb21tYW5kLCAlTkw4MDIxMV9BVFRSX0lGSU5ERVggaXMgdXNlZCB0byBpZGVudGlmeSB0aGUKKyAqCWludGVyZmFjZS4gJU5MODAyMTFfQVRUUl9NQUMgaXMgdXNlZCB0byBzcGVjaWZ5IFBlZXJTVEFBZGRyZXNzIChhbmQKKyAqCUJTU0lEIGluIGNhc2Ugb2Ygc3RhdGlvbiBtb2RlKS4gJU5MODAyMTFfQVRUUl9TU0lEIGlzIHVzZWQgdG8gc3BlY2lmeQorICoJdGhlIFNTSUQgKG1haW5seSBmb3IgYXNzb2NpYXRpb24sIGJ1dCBpcyBpbmNsdWRlZCBpbiBhdXRoZW50aWNhdGlvbgorICoJcmVxdWVzdCwgdG9vLCB0byBoZWxwIEJTUyBzZWxlY3Rpb24uICVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSBpcyB1c2VkCisgKgl0byBzcGVjaWZ5IHRoZSBmcmVxdWVuY2Ugb2YgdGhlIGNoYW5uZWwgaW4gTUh6LiAlTkw4MDIxMV9BVFRSX0FVVEhfVFlQRQorICoJaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlLiAlTkw4MDIxMV9BVFRSX0lFIGlzIHVzZWQgdG8KKyAqCWRlZmluZSBJRXMgKFZlbmRvclNwZWNpZmljSW5mbywgYnV0IGFsc28gaW5jbHVkaW5nIFJTTiBJRSBhbmQgRlQgSUVzKQorICoJdG8gYmUgYWRkZWQgdG8gdGhlIGZyYW1lLgorICoJV2hlbiB1c2VkIGFzIGFuIGV2ZW50LCB0aGlzIHJlcG9ydHMgcmVjZXB0aW9uIG9mIGFuIEF1dGhlbnRpY2F0aW9uCisgKglmcmFtZSBpbiBzdGF0aW9uIGFuZCBJQlNTIG1vZGVzIHdoZW4gdGhlIGxvY2FsIE1MTUUgcHJvY2Vzc2VkIHRoZQorICoJZnJhbWUsIGkuZS4sIGl0IHdhcyBmb3IgdGhlIGxvY2FsIFNUQSBhbmQgd2FzIHJlY2VpdmVkIGluIGNvcnJlY3QKKyAqCXN0YXRlLiBUaGlzIGlzIHNpbWlsYXIgdG8gTUxNRS1BVVRIRU5USUNBVEUuY29uZmlybSBwcmltaXRpdmUgaW4gdGhlCisgKglNTE1FIFNBUCBpbnRlcmZhY2UgKGtlcm5lbCBwcm92aWRpbmcgTUxNRSwgdXNlcnNwYWNlIFNNRSkuIFRoZQorICoJaW5jbHVkZWQgTkw4MDIxMV9BVFRSX0ZSQU1FIGF0dHJpYnV0ZSBjb250YWlucyB0aGUgbWFuYWdlbWVudCBmcmFtZQorICoJKGluY2x1ZGluZyBib3RoIHRoZSBoZWFkZXIgYW5kIGZyYW1lIGJvZHksIGJ1dCBub3QgRkNTKS4KKyAqIEBOTDgwMjExX0NNRF9BU1NPQ0lBVEU6IGFzc29jaWF0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgbGlrZQorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGJ1dCBmb3IgQXNzb2NpYXRpb24gYW5kIFJlYXNzb2NpYXRpb24KKyAqCShzaW1pbGFyIHRvIE1MTUUtQVNTT0NJQVRFLnJlcXVlc3QsIE1MTUUtUkVBU1NPQ0lBVEUucmVxdWVzdCwKKyAqCU1MTUUtQVNTT0NJQVRFLmNvbmZpcm0gb3IgTUxNRS1SRUFTU09DSUFURS5jb25maXJtIHByaW1pdGl2ZXMpLgorICogQE5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFOiBkZWF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgbGlrZQorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGJ1dCBmb3IgRGVhdXRoZW50aWNhdGlvbiBmcmFtZXMgKHNpbWlsYXIgdG8KKyAqCU1MTUUtREVBVVRIRU5USUNBVElPTi5yZXF1ZXN0IGFuZCBNTE1FLURFQVVUSEVOVElDQVRFLmluZGljYXRpb24KKyAqCXByaW1pdGl2ZXMpLgorICogQE5MODAyMTFfQ01EX0RJU0FTU09DSUFURTogZGlzYXNzb2NpYXRpb24gcmVxdWVzdCBhbmQgbm90aWZpY2F0aW9uOyBsaWtlCisgKglOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgYnV0IGZvciBEaXNhc3NvY2lhdGlvbiBmcmFtZXMgKHNpbWlsYXIgdG8KKyAqCU1MTUUtRElTQVNTT0NJQVRFLnJlcXVlc3QgYW5kIE1MTUUtRElTQVNTT0NJQVRFLmluZGljYXRpb24gcHJpbWl0aXZlcykuCisgKgogICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyCiAgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMTc4LDYgKzI0NCwyMiBAQAogCU5MODAyMTFfQ01EX0dFVF9NRVNIX1BBUkFNUywKIAlOTDgwMjExX0NNRF9TRVRfTUVTSF9QQVJBTVMsCiAKKwlOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSAvKiByZXNlcnZlZDsgbm90IHVzZWQgKi8sCisKKwlOTDgwMjExX0NNRF9HRVRfUkVHLAorCisJTkw4MDIxMV9DTURfR0VUX1NDQU4sCisJTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAorCU5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMsCisJTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVELAorCisJTkw4MDIxMV9DTURfUkVHX0NIQU5HRSwKKworCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSwKKwlOTDgwMjExX0NNRF9BU1NPQ0lBVEUsCisJTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUsCisJTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFLAorCiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KQEAgLTE5MCw2ICsyNzIsMTIgQEAKICAqIGhlcmUKICAqLwogI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfQlNTIE5MODAyMTFfQ01EX1NFVF9CU1MKKyNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUKKyNkZWZpbmUgTkw4MDIxMV9DTURfUkVHX0NIQU5HRSBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFCisjZGVmaW5lIE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUKKyNkZWZpbmUgTkw4MDIxMV9DTURfQVNTT0NJQVRFIE5MODAyMTFfQ01EX0FTU09DSUFURQorI2RlZmluZSBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURQorI2RlZmluZSBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFCiAKIC8qKgogICogZW51bSBubDgwMjExX2F0dHJzIC0gbmw4MDIxMSBuZXRsaW5rIGF0dHJpYnV0ZXMKQEAgLTI4NCw2ICszNzIsNDIgQEAKICAqCXN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZXMsIGVhY2ggYSBmbGFnIGF0dHJpYnV0ZSB3aXRoIHRoZSBudW1iZXIKICAqCW9mIHRoZSBpbnRlcmZhY2UgbW9kZS4KICAqCisgKiBATkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRTogTWFuYWdlbWVudCBmcmFtZSBzdWJ0eXBlIGZvcgorICoJJU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFLgorICoKKyAqIEBOTDgwMjExX0FUVFJfSUU6IEluZm9ybWF0aW9uIGVsZW1lbnQocykgZGF0YSAodXNlZCwgZS5nLiwgd2l0aAorICoJJU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFKS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUzogbnVtYmVyIG9mIFNTSURzIHlvdSBjYW4gc2NhbiB3aXRoCisgKglhIHNpbmdsZSBzY2FuIHJlcXVlc3QsIGEgd2lwaHkgYXR0cmlidXRlLgorICoKKyAqIEBOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUzogbmVzdGVkIGF0dHJpYnV0ZSB3aXRoIGZyZXF1ZW5jaWVzIChpbiBNSHopCisgKiBATkw4MDIxMV9BVFRSX1NDQU5fU1NJRFM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBTU0lEcywgbGVhdmUgb3V0IGZvciBwYXNzaXZlCisgKglzY2FubmluZyBhbmQgaW5jbHVkZSBhIHplcm8tbGVuZ3RoIFNTSUQgKHdpbGRjYXJkKSBmb3Igd2lsZGNhcmQgc2NhbgorICogQE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT046IHRoZSBzY2FuIGdlbmVyYXRpb24gaW5jcmVhc2VzIHdoZW5ldmVyIHRoZQorICoJc2NhbiByZXN1bHQgbGlzdCBjaGFuZ2VzIChCU1MgZXhwaXJlZCBvciBhZGRlZCkgc28gdGhhdCBhcHBsaWNhdGlvbnMKKyAqCWNhbiB2ZXJpZnkgdGhhdCB0aGV5IGdvdCBhIHNpbmdsZSwgY29uc2lzdGVudCBzbmFwc2hvdCAod2hlbiBhbGwgZHVtcAorICoJbWVzc2FnZXMgY2FycmllZCB0aGUgc2FtZSBnZW5lcmF0aW9uIG51bWJlcikKKyAqIEBOTDgwMjExX0FUVFJfQlNTOiBzY2FuIHJlc3VsdCBCU1MKKyAqCisgKiBATkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1I6IGluZGljYXRlcyB3aG8gcmVxdWVzdGVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgorICogCWN1cnJlbnRseSBpbiBlZmZlY3QuIFRoaXMgY291bGQgYmUgYW55IG9mIHRoZSAlTkw4MDIxMV9SRUdET01fU0VUX0JZXyoKKyAqIEBOTDgwMjExX0FUVFJfUkVHX1RZUEU6IGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgcmVndWxhdG9yeSBkb21haW4gY3VycmVudGx5CisgKiAJc2V0LiBUaGlzIGNhbiBiZSBvbmUgb2YgdGhlIG5sODAyMTFfcmVnX3R5cGUgKCVOTDgwMjExX1JFR0RPTV9UWVBFXyopCisgKgorICogQE5MODAyMTFfQVRUUl9TVVBQT1JURURfQ09NTUFORFM6IHdpcGh5IGF0dHJpYnV0ZSB0aGF0IHNwZWNpZmllcworICoJYW4gYXJyYXkgb2YgY29tbWFuZCBudW1iZXJzIChpLmUuIGEgbWFwcGluZyBpbmRleCB0byBjb21tYW5kIG51bWJlcikKKyAqCXRoYXQgdGhlIGRyaXZlciBmb3IgdGhlIGdpdmVuIHdpcGh5IHN1cHBvcnRzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfRlJBTUU6IGZyYW1lIGRhdGEgKGJpbmFyeSBhdHRyaWJ1dGUpLCBpbmNsdWRpbmcgZnJhbWUgaGVhZGVyCisgKglhbmQgYm9keSwgYnV0IG5vdCBGQ1M7IHVzZWQsIGUuZy4sIHdpdGggTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGFuZAorICoJTkw4MDIxMV9DTURfQVNTT0NJQVRFIGV2ZW50cworICogQE5MODAyMTFfQVRUUl9TU0lEOiBTU0lEIChiaW5hcnkgYXR0cmlidXRlLCAwLi4zMiBvY3RldHMpCisgKiBATkw4MDIxMV9BVFRSX0FVVEhfVFlQRTogQXV0aGVudGljYXRpb25UeXBlLCBzZWUgJmVudW0gbmw4MDIxMV9hdXRoX3R5cGUsCisgKglyZXByZXNlbnRlZCBhcyBhIHUzMgorICogQE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERTogUmVhc29uQ29kZSBmb3IgJU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFIGFuZAorICoJJU5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwgdTE2CisgKgogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0zNDYsNiArNDcwLDI4IEBACiAJTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsCiAJTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSwKIAorCU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01ULAorCisJTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSwKKwlOTDgwMjExX0FUVFJfSUUsCisKKwlOTDgwMjExX0FUVFJfTUFYX05VTV9TQ0FOX1NTSURTLAorCisJTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVMsCisJTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFMsCisJTkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTiwKKwlOTDgwMjExX0FUVFJfQlNTLAorCisJTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsCisJTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCisJTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9DT01NQU5EUywKKworCU5MODAyMTFfQVRUUl9GUkFNRSwKKwlOTDgwMjExX0FUVFJfU1NJRCwKKwlOTDgwMjExX0FUVFJfQVVUSF9UWVBFLAorCU5MODAyMTFfQVRUUl9SRUFTT05fQ09ERSwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKQEAgLTM2MCw3ICs1MDYsMTUgQEAKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUyBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRCi0jZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQgTkw4MDIxMV9BVFRSX1dJUEhZX1NFQ19DSEFOX09GRlNFVAorI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9JRSBOTDgwMjExX0FUVFJfSUUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19UWVBFIE5MODAyMTFfQVRUUl9SRUdfVFlQRQorI2RlZmluZSBOTDgwMjExX0FUVFJfRlJBTUUgTkw4MDIxMV9BVFRSX0ZSQU1FCisjZGVmaW5lIE5MODAyMTFfQVRUUl9TU0lEIE5MODAyMTFfQVRUUl9TU0lECisjZGVmaW5lIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRQorI2RlZmluZSBOTDgwMjExX0FUVFJfUkVBU09OX0NPREUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFCiAKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUwkJCTMyCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTCQkzMgpAQCAtNDEyLDEyICs1NjYsMTQgQEAKICAqIEBOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFOiBzdGF0aW9uIGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcwogICoJd2l0aCBzaG9ydCBiYXJrZXIgcHJlYW1ibGUKICAqIEBOTDgwMjExX1NUQV9GTEFHX1dNRTogc3RhdGlvbiBpcyBXTUUvUW9TIGNhcGFibGUKKyAqIEBOTDgwMjExX1NUQV9GTEFHX01GUDogc3RhdGlvbiB1c2VzIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbgogICovCiBlbnVtIG5sODAyMTFfc3RhX2ZsYWdzIHsKIAlfX05MODAyMTFfU1RBX0ZMQUdfSU5WQUxJRCwKIAlOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQsCiAJTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKIAlOTDgwMjExX1NUQV9GTEFHX1dNRSwKKwlOTDgwMjExX1NUQV9GTEFHX01GUCwKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNULApAQCAtNDY1LDYgKzYyMSw5IEBACiAgKiBATkw4MDIxMV9TVEFfSU5GT19TSUdOQUw6IHNpZ25hbCBzdHJlbmd0aCBvZiBsYXN0IHJlY2VpdmVkIFBQRFUgKHU4LCBkQm0pCiAgKiBATkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFOiBjdXJyZW50IHVuaWNhc3QgdHggcmF0ZSwgbmVzdGVkIGF0dHJpYnV0ZQogICogCWNvbnRhaW5pbmcgaW5mbyBhcyBwb3NzaWJsZSwgc2VlICZlbnVtIG5sODAyMTFfc3RhX2luZm9fdHhyYXRlLgorICogQE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUzogdG90YWwgcmVjZWl2ZWQgcGFja2V0ICh1MzIsIGZyb20gdGhpcyBzdGF0aW9uKQorICogQE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUzogdG90YWwgdHJhbnNtaXR0ZWQgcGFja2V0cyAodTMyLCB0byB0aGlzCisgKglzdGF0aW9uKQogICovCiBlbnVtIG5sODAyMTFfc3RhX2luZm8gewogCV9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElELApAQCAtNDc2LDYgKzYzNSw4IEBACiAJTkw4MDIxMV9TVEFfSU5GT19QTElOS19TVEFURSwKIAlOTDgwMjExX1NUQV9JTkZPX1NJR05BTCwKIAlOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUsCisJTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTLAorCU5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUywKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNULApAQCAtNjA3LDYgKzc2OCw0OCBAQAogfTsKIAogLyoqCisgKiBlbnVtIG5sODAyMTFfaW5pdGlhdG9yIC0gSW5kaWNhdGVzIHRoZSBpbml0aWF0b3Igb2YgYSByZWcgZG9tYWluIHJlcXVlc3QKKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRTogQ29yZSBxdWVyaWVkIENSREEgZm9yIGEgZHluYW1pYyB3b3JsZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLgorICogQE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOiBVc2VyIGFza2VkIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNldCB0aGUKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOiBhIHdpcmVsZXNzIGRyaXZlcnMgaGFzIGhpbnRlZCB0byB0aGUKKyAqIAl3aXJlbGVzcyBjb3JlIGl0IHRoaW5rcyBpdHMga25vd3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHdlIHNob3VsZCBiZSBpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRTogdGhlIHdpcmVsZXNzIGNvcmUgaGFzIHJlY2VpdmVkIGFuCisgKiAJODAyLjExIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudCB3aXRoIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gaXQKKyAqIAl0aGlua3Mgd2Ugc2hvdWxkIGNvbnNpZGVyLgorICovCitlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciB7CisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiwKKwlOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKK307CisKKy8qKgorICogZW51bSBubDgwMjExX3JlZ190eXBlIC0gc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZOiB0aGUgcmVndWxhdG9yeSBkb21haW4gc2V0IGlzIG9uZSB0aGF0IHBlcnRhaW5zCisgKgl0byBhIHNwZWNpZmljIGNvdW50cnkuIFdoZW4gdGhpcyBpcyBzZXQgeW91IGNhbiBjb3VudCBvbiB0aGUKKyAqCUlTTyAvIElFQyAzMTY2IGFscGhhMiBjb3VudHJ5IGNvZGUgYmVpbmcgdmFsaWQuCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRDogdGhlIHJlZ3VsYXRvcnkgc2V0IGRvbWFpbiBpcyB0aGUgd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9UWVBFX0NVU1RPTV9XT1JMRDogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyBhIGN1c3RvbQorICogCWRyaXZlciBzcGVjaWZpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbi4gVGhlc2UgZG8gbm90IGFwcGx5IHN5c3RlbS13aWRlCisgKiAJYW5kIGFyZSBvbmx5IGFwcGxpY2FibGUgdG8gdGhlIGluZGl2aWR1YWwgZGV2aWNlcyB3aGljaCBoYXZlIHJlcXVlc3RlZAorICogCXRoZW0gdG8gYmUgYXBwbGllZC4KKyAqIEBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTjogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyB0aGUgcHJvZHVjdAorICoJb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucyAtLSB0aGUgcHJldmlvdXNseQorICoJc2V0IHJlZ3VsYXRvcnkgZG9tYWluIG9uIHRoZSBzeXN0ZW0gYW5kIHRoZSBsYXN0IGFjY2VwdGVkIHJlZ3VsYXRvcnkKKyAqCWRvbWFpbiByZXF1ZXN0IHRvIGJlIHByb2Nlc3NlZC4KKyAqLworZW51bSBubDgwMjExX3JlZ190eXBlIHsKKwlOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlksCisJTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCwKKwlOTDgwMjExX1JFR0RPTV9UWVBFX0NVU1RPTV9XT1JMRCwKKwlOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTiwKK307CisKKy8qKgogICogZW51bSBubDgwMjExX3JlZ19ydWxlX2F0dHIgLSByZWd1bGF0b3J5IHJ1bGUgYXR0cmlidXRlcwogICogQE5MODAyMTFfQVRUUl9SRUdfUlVMRV9GTEFHUzogYSBzZXQgb2YgZmxhZ3Mgd2hpY2ggc3BlY2lmeSBhZGRpdGlvbmFsCiAgKiAJY29uc2lkZXJhdGlvbnMgZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IHJhbmdlLiBUaGVzZSBhcmUgdGhlCkBAIC04MTEsNCArMTAxNCw1MiBAQAogCU5MODAyMTFfQ0hBTl9IVDQwTUlOVVMsCiAJTkw4MDIxMV9DSEFOX0hUNDBQTFVTCiB9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9ic3MgLSBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGEgQlNTCisgKgorICogQF9fTkw4MDIxMV9CU1NfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfQlNTX0ZSRVFVRU5DWTogZnJlcXVlbmN5IGluIE1IeiAodTMyKQorICogQE5MODAyMTFfQlNTX1RTRjogVFNGIG9mIHRoZSByZWNlaXZlZCBwcm9iZSByZXNwb25zZS9iZWFjb24gKHU2NCkKKyAqIEBOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUw6IGJlYWNvbiBpbnRlcnZhbCBvZiB0aGUgKEkpQlNTICh1MTYpCisgKiBATkw4MDIxMV9CU1NfQ0FQQUJJTElUWTogY2FwYWJpbGl0eSBmaWVsZCAoQ1BVIG9yZGVyLCB1MTYpCisgKiBATkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFM6IGJpbmFyeSBhdHRyaWJ1dGUgY29udGFpbmluZyB0aGUKKyAqCXJhdyBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24gKGJpbikKKyAqIEBOTDgwMjExX0JTU19TSUdOQUxfTUJNOiBzaWduYWwgc3RyZW5ndGggb2YgcHJvYmUgcmVzcG9uc2UvYmVhY29uCisgKglpbiBtQm0gKDEwMCAqIGRCbSkgKHMzMikKKyAqIEBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbgorICoJaW4gdW5zcGVjaWZpZWQgdW5pdHMsIHNjYWxlZCB0byAwLi4xMDAgKHU4KQorICogQF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVDogaW50ZXJuYWwKKyAqIEBOTDgwMjExX0JTU19NQVg6IGhpZ2hlc3QgQlNTIGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfYnNzIHsKKwlfX05MODAyMTFfQlNTX0lOVkFMSUQsCisJTkw4MDIxMV9CU1NfQlNTSUQsCisJTkw4MDIxMV9CU1NfRlJFUVVFTkNZLAorCU5MODAyMTFfQlNTX1RTRiwKKwlOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUwsCisJTkw4MDIxMV9CU1NfQ0FQQUJJTElUWSwKKwlOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKKwlOTDgwMjExX0JTU19TSUdOQUxfTUJNLAorCU5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9CU1NfTUFYID0gX19OTDgwMjExX0JTU19BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYXV0aF90eXBlIC0gQXV0aGVudGljYXRpb25UeXBlCisgKgorICogQE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06IE9wZW4gU3lzdGVtIGF1dGhlbnRpY2F0aW9uCisgKiBATkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOiBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChXRVAgb25seSkKKyAqIEBOTDgwMjExX0FVVEhUWVBFX0ZUOiBGYXN0IEJTUyBUcmFuc2l0aW9uIChJRUVFIDgwMi4xMXIpCisgKiBATkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDogTmV0d29yayBFQVAgKHNvbWUgQ2lzY28gQVBzIGFuZCBtYWlubHkgTEVBUCkKKyAqLworZW51bSBubDgwMjExX2F1dGhfdHlwZSB7CisJTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSwKKwlOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVksCisJTkw4MDIxMV9BVVRIVFlQRV9GVCwKKwlOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQLAorfTsKICNlbmRpZiAvKiBfX0xJTlVYX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9udWJ1cy5oIGIvaW5jbHVkZS9saW51eC9udWJ1cy5oCmluZGV4IDczODJhZjMuLmUxMzdiM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnVidXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L251YnVzLmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogCWludCBtYXNrOwogfTsKIAorI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBudWJ1c19ib2FyZCB7CiAJc3RydWN0IG51YnVzX2JvYXJkKiBuZXh0OwogCXN0cnVjdCBudWJ1c19kZXYqIGZpcnN0X2RldjsKQEAgLTM1MSw2ICszNTIsNyBAQAogdm9pZCBudWJ1c19nZXRfcnNyY19zdHIodm9pZCogZGVzdCwKIAkJCWNvbnN0IHN0cnVjdCBudWJ1c19kaXJlbnQgKmRpcmVudCwKIAkJCWludCBtYXhsZW4pOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogV2UnZCBsaWtlIHRvIGdldCByaWQgb2YgdGhpcyBldmVudHVhbGx5LiAgT25seSBkYXluYXBvcnQuYyB1c2VzIGl0IG5vdy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqbnVidXNfc2xvdF9hZGRyKGludCBzbG90KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCBhY2E4YzQ1Li4wNWRmYTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtODM0LDYgKzgzNCw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NgkweDUyNzUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc3CTB4NzI3NQogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRk9YQ09OTgkJMHgxMDViCisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9VTUMJCTB4MTA2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg2NzNGCTB4MDEwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZCRgkweDY3M2EKQEAgLTE5NzEsNiArMTk3Myw4IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDE0NGQKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FNQklUCQkweDE0NjgKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01ZUklDT00JCTB4MTRjMQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVElUQU4JCTB4MTREMgpAQCAtMjExMiw2ICsyMTE2LDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9TSU5BSV9PTEQgMHg1ZThjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUkJMHg2Mjc0CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ERkkJCTB4MTViZAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUVVJQ0tORVQJCTB4MTVlMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVSUNLTkVUX1hKCTB4MDUwMAogCkBAIC0yMjE1LDYgKzIyMjEsOCBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9QU1BJTgkJMHgxODY3CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSUxBTgkJMHgxOTA0CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UREkgICAgICAgICAgICAgICAweDE5MkUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9URElfRUhDSSAgICAgICAgICAweDAxMDEKIApAQCAtMjI2Myw2ICsyMjcxLDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMAkweDE2MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMQkweDE2ZmYKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1FNSQkJMHgxYTMyCisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9URUtSQU0JCTB4MWRlMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RFS1JBTV9EQzI5MAkweGRjMjkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggOWYyYTM3NS4uZWU1NjE1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC01LDUzICs1LDY2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPiAvKiBGb3Iga21hbGxvYygpICovCiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogCiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogCisjaWZuZGVmIFBFUl9DUFVfQkFTRV9TRUNUSU9OCiAjaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wZXJjcHUiKSkpCQkJXAotCVBFUl9DUFVfQVRUUklCVVRFUyBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorI2RlZmluZSBQRVJfQ1BVX0JBU0VfU0VDVElPTiAiLmRhdGEucGVyY3B1IgorI2Vsc2UKKyNkZWZpbmUgUEVSX0NQVV9CQVNFX1NFQ1RJT04gIi5kYXRhIgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TTVAKIAogI2lmZGVmIE1PRFVMRQotI2RlZmluZSBTSEFSRURfQUxJR05FRF9TRUNUSU9OICIuZGF0YS5wZXJjcHUiCisjZGVmaW5lIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTiAiIgogI2Vsc2UKLSNkZWZpbmUgU0hBUkVEX0FMSUdORURfU0VDVElPTiAiLmRhdGEucGVyY3B1LnNoYXJlZF9hbGlnbmVkIgorI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKICNlbmRpZgorI2RlZmluZSBQRVJfQ1BVX0ZJUlNUX1NFQ1RJT04gIi5maXJzdCIKKworI2Vsc2UKKworI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIiIKKyNkZWZpbmUgUEVSX0NQVV9GSVJTVF9TRUNUSU9OICIiCisKKyNlbmRpZgorCisjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjdGlvbikJCQlcCisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oUEVSX0NQVV9CQVNFX1NFQ1RJT04gc2VjdGlvbikpKQlcCisJUEVSX0NQVV9BVFRSSUJVVEVTIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKyNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkJCQkJCVwKKwlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsICIiKQogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHR5cGUsIG5hbWUpCQkJXAotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKFNIQVJFRF9BTElHTkVEX1NFQ1RJT04pKSkJCVwKLQlQRVJfQ1BVX0FUVFJJQlVURVMgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUJCVwKKwlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTikgXAogCV9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKIAotI2RlZmluZSBERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQodHlwZSwgbmFtZSkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBlcmNwdS5wYWdlX2FsaWduZWQiKSkpCVwKLQlQRVJfQ1BVX0FUVFJJQlVURVMgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKLSNlbHNlCi0jZGVmaW5lIERFRklORV9QRVJfQ1BVKHR5cGUsIG5hbWUpCQkJCQlcCi0JUEVSX0NQVV9BVFRSSUJVVEVTIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisjZGVmaW5lIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRCh0eXBlLCBuYW1lKQkJCQlcCisJREVGSU5FX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCAiLnBhZ2VfYWxpZ25lZCIpCiAKLSNkZWZpbmUgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodHlwZSwgbmFtZSkJCSAgICAgIFwKLQlERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKQotCi0jZGVmaW5lIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRCh0eXBlLCBuYW1lKQkJICAgICAgXAotCURFRklORV9QRVJfQ1BVKHR5cGUsIG5hbWUpCi0jZW5kaWYKKyNkZWZpbmUgREVGSU5FX1BFUl9DUFVfRklSU1QodHlwZSwgbmFtZSkJCQkJXAorCURFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgUEVSX0NQVV9GSVJTVF9TRUNUSU9OKQogCiAjZGVmaW5lIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh2YXIpIEVYUE9SVF9TWU1CT0wocGVyX2NwdV9fIyN2YXIpCiAjZGVmaW5lIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwodmFyKSBFWFBPUlRfU1lNQk9MX0dQTChwZXJfY3B1X18jI3ZhcikKIAotLyogRW5vdWdoIHRvIGNvdmVyIGFsbCBERUZJTkVfUEVSX0NQVXMgaW4ga2VybmVsLCBpbmNsdWRpbmcgbW9kdWxlcy4gKi8KLSNpZm5kZWYgUEVSQ1BVX0VOT1VHSF9ST09NCisvKiBlbm91Z2ggdG8gY292ZXIgYWxsIERFRklORV9QRVJfQ1BVcyBpbiBtb2R1bGVzICovCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLSNkZWZpbmUgUEVSQ1BVX01PRFVMRV9SRVNFUlZFCTgxOTIKKyNkZWZpbmUgUEVSQ1BVX01PRFVMRV9SRVNFUlZFCQkoOCA8PCAxMCkKICNlbHNlCi0jZGVmaW5lIFBFUkNQVV9NT0RVTEVfUkVTRVJWRQkwCisjZGVmaW5lIFBFUkNQVV9NT0RVTEVfUkVTRVJWRQkJMAogI2VuZGlmCiAKKyNpZm5kZWYgUEVSQ1BVX0VOT1VHSF9ST09NCiAjZGVmaW5lIFBFUkNQVV9FTk9VR0hfUk9PTQkJCQkJCVwKLQkoX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCArIFBFUkNQVV9NT0RVTEVfUkVTRVJWRSkKLSNlbmRpZgkvKiBQRVJDUFVfRU5PVUdIX1JPT00gKi8KKwkoQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgU01QX0NBQ0hFX0JZVEVTKSArCVwKKwkgUEVSQ1BVX01PRFVMRV9SRVNFUlZFKQorI2VuZGlmCiAKIC8qCiAgKiBNdXN0IGJlIGFuIGx2YWx1ZS4gU2luY2UgQHZhciBtdXN0IGJlIGEgc2ltcGxlIGlkZW50aWZpZXIsCkBAIC02NSw1MiArNzgsOTQgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAorI2lmZGVmIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBCisKKy8qIG1pbmltdW0gdW5pdCBzaXplLCBhbHNvIGlzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBhbGxvY2F0aW9uIHNpemUgKi8KKyNkZWZpbmUgUENQVV9NSU5fVU5JVF9TSVpFCQlQRk5fQUxJR04oNjQgPDwgMTApCisKKy8qCisgKiBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFIGluZGljYXRlcyB0aGUgYW1vdW50IG9mIGZyZWUgYXJlYSB0byBwaWdneQorICogYmFjayBvbiB0aGUgZmlyc3QgY2h1bmsgZm9yIGR5bmFtaWMgcGVyY3B1IGFsbG9jYXRpb24gaWYgYXJjaCBpcworICogbWFudWFsbHkgYWxsb2NhdGluZyBhbmQgbWFwcGluZyBpdCBmb3IgZmFzdGVyIGFjY2VzcyAoYXMgYSBwYXJ0IG9mCisgKiBsYXJnZSBwYWdlIG1hcHBpbmcgZm9yIGV4YW1wbGUpLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGdpdmUgYmV0d2VlbiBvbmUgYW5kIHR3byBwYWdlcyBvZiBmcmVlIHNwYWNlCisgKiBhZnRlciB0eXBpY2FsIG1pbmltYWwgYm9vdCAoMi13YXkgU01QLCBzaW5nbGUgZGlzayBhbmQgTklDKSB3aXRoCisgKiBib3RoIGRlZmNvbmZpZyBhbmQgYSBkaXN0cm8gY29uZmlnIG9uIHg4Nl82NCBhbmQgMzIuICBNb3JlCisgKiBpbnRlbGxpZ2VudCB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgd291bGQgYmUgbmljZS4KKyAqLworI2lmIEJJVFNfUEVSX0xPTkcgPiAzMgorI2RlZmluZSBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFCQkoMjAgPDwgMTApCisjZWxzZQorI2RlZmluZSBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFCQkoMTIgPDwgMTApCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgKnBjcHVfYmFzZV9hZGRyOworCit0eXBlZGVmIHN0cnVjdCBwYWdlICogKCpwY3B1X2dldF9wYWdlX2ZuX3QpKHVuc2lnbmVkIGludCBjcHUsIGludCBwYWdlbm8pOwordHlwZWRlZiB2b2lkICgqcGNwdV9wb3B1bGF0ZV9wdGVfZm5fdCkodW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIHNpemVfdCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhwY3B1X2dldF9wYWdlX2ZuX3QgZ2V0X3BhZ2VfZm4sCisJCQkJc2l6ZV90IHN0YXRpY19zaXplLCBzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwKKwkJCQlzc2l6ZV90IGR5bl9zaXplLCBzc2l6ZV90IHVuaXRfc2l6ZSwKKwkJCQl2b2lkICpiYXNlX2FkZHIsCisJCQkJcGNwdV9wb3B1bGF0ZV9wdGVfZm5fdCBwb3B1bGF0ZV9wdGVfZm4pOworCitleHRlcm4gc3NpemVfdCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuaygKKwkJCQlzaXplX3Qgc3RhdGljX3NpemUsIHNpemVfdCByZXNlcnZlZF9zaXplLAorCQkJCXNzaXplX3QgZHluX3NpemUsIHNzaXplX3QgdW5pdF9zaXplKTsKKworLyoKKyAqIFVzZSB0aGlzIHRvIGdldCB0byBhIGNwdSdzIHZlcnNpb24gb2YgdGhlIHBlci1jcHUgb2JqZWN0CisgKiBkeW5hbWljYWxseSBhbGxvY2F0ZWQuIE5vbi1hdG9taWMgYWNjZXNzIHRvIHRoZSBjdXJyZW50IENQVSdzCisgKiB2ZXJzaW9uIHNob3VsZCBwcm9iYWJseSBiZSBjb21iaW5lZCB3aXRoIGdldF9jcHUoKS9wdXRfY3B1KCkuCisgKi8KKyNkZWZpbmUgcGVyX2NwdV9wdHIocHRyLCBjcHUpCVNISUZUX1BFUkNQVV9QVFIoKHB0ciksIHBlcl9jcHVfb2Zmc2V0KChjcHUpKSkKKworZXh0ZXJuIHZvaWQgKl9fYWxsb2NfcmVzZXJ2ZWRfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworCisjZWxzZSAvKiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQSAqLworCiBzdHJ1Y3QgcGVyY3B1X2RhdGEgewogCXZvaWQgKnB0cnNbMV07CiB9OwogCiAjZGVmaW5lIF9fcGVyY3B1X2Rpc2d1aXNlKHBkYXRhKSAoc3RydWN0IHBlcmNwdV9kYXRhICopfih1bnNpZ25lZCBsb25nKShwZGF0YSkKLS8qIAotICogVXNlIHRoaXMgdG8gZ2V0IHRvIGEgY3B1J3MgdmVyc2lvbiBvZiB0aGUgcGVyLWNwdSBvYmplY3QgZHluYW1pY2FsbHkKLSAqIGFsbG9jYXRlZC4gTm9uLWF0b21pYyBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgQ1BVJ3MgdmVyc2lvbiBzaG91bGQKLSAqIHByb2JhYmx5IGJlIGNvbWJpbmVkIHdpdGggZ2V0X2NwdSgpL3B1dF9jcHUoKS4KLSAqLyAKLSNkZWZpbmUgcGVyY3B1X3B0cihwdHIsIGNwdSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdHJ1Y3QgcGVyY3B1X2RhdGEgKl9fcCA9IF9fcGVyY3B1X2Rpc2d1aXNlKHB0cik7IFwKLSAgICAgICAgKF9fdHlwZW9mX18ocHRyKSlfX3AtPnB0cnNbKGNwdSldOwkgICAgICAgICAgXAorCisjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorICAgICAgICBzdHJ1Y3QgcGVyY3B1X2RhdGEgKl9fcCA9IF9fcGVyY3B1X2Rpc2d1aXNlKHB0cik7CQlcCisgICAgICAgIChfX3R5cGVvZl9fKHB0cikpX19wLT5wdHJzWyhjcHUpXTsJCQkJXAogfSkKIAotZXh0ZXJuIHZvaWQgKl9fcGVyY3B1X2FsbG9jX21hc2soc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgY3B1bWFza190ICptYXNrKTsKLWV4dGVybiB2b2lkIHBlcmNwdV9mcmVlKHZvaWQgKl9fcGRhdGEpOworI2VuZGlmIC8qIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBICovCisKK2V4dGVybiB2b2lkICpfX2FsbG9jX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKK2V4dGVybiB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKl9fcGRhdGEpOwogCiAjZWxzZSAvKiBDT05GSUdfU01QICovCiAKLSNkZWZpbmUgcGVyY3B1X3B0cihwdHIsIGNwdSkgKHsgKHZvaWQpKGNwdSk7IChwdHIpOyB9KQorI2RlZmluZSBwZXJfY3B1X3B0cihwdHIsIGNwdSkgKHsgKHZvaWQpKGNwdSk7IChwdHIpOyB9KQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fcGVyY3B1X2FsbG9jX21hc2soc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgY3B1bWFza190ICptYXNrKQorc3RhdGljIGlubGluZSB2b2lkICpfX2FsbG9jX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQogewotCXJldHVybiBremFsbG9jKHNpemUsIGdmcCk7CisJLyoKKwkgKiBDYW4ndCBlYXNpbHkgbWFrZSBsYXJnZXIgYWxpZ25tZW50IHdvcmsgd2l0aCBrbWFsbG9jLiAgV0FSTgorCSAqIG9uIGl0LiAgTGFyZ2VyIGFsaWdubWVudCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBtb2R1bGUKKwkgKiBwZXJjcHUgc2VjdGlvbnMgb24gU01QIGZvciB3aGljaCB0aGlzIHBhdGggaXNuJ3QgdXNlZC4KKwkgKi8KKwlXQVJOX09OX09OQ0UoYWxpZ24gPiBTTVBfQ0FDSEVfQllURVMpOworCXJldHVybiBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2ZyZWUodm9pZCAqX19wZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3BlcmNwdSh2b2lkICpwKQogewotCWtmcmVlKF9fcGRhdGEpOworCWtmcmVlKHApOwogfQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0jZGVmaW5lIHBlcmNwdV9hbGxvY19tYXNrKHNpemUsIGdmcCwgbWFzaykgXAotCV9fcGVyY3B1X2FsbG9jX21hc2soKHNpemUpLCAoZ2ZwKSwgJihtYXNrKSkKLQotI2RlZmluZSBwZXJjcHVfYWxsb2Moc2l6ZSwgZ2ZwKSBwZXJjcHVfYWxsb2NfbWFzaygoc2l6ZSksIChnZnApLCBjcHVfb25saW5lX21hcCkKLQotLyogKGxlZ2FjeSkgaW50ZXJmYWNlIGZvciB1c2Ugd2l0aG91dCBDUFUgaG90cGx1ZyBoYW5kbGluZyAqLwotCi0jZGVmaW5lIF9fYWxsb2NfcGVyY3B1KHNpemUpCXBlcmNwdV9hbGxvY19tYXNrKChzaXplKSwgR0ZQX0tFUk5FTCwgXAotCQkJCQkJICBjcHVfcG9zc2libGVfbWFwKQotI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkJKHR5cGUgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSkpCi0jZGVmaW5lIGZyZWVfcGVyY3B1KHB0cikJcGVyY3B1X2ZyZWUoKHB0cikpCi0jZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KQlwZXJjcHVfcHRyKChwdHIpLCAoY3B1KSkKKyNkZWZpbmUgYWxsb2NfcGVyY3B1KHR5cGUpCSh0eXBlICopX19hbGxvY19wZXJjcHUoc2l6ZW9mKHR5cGUpLCBcCisJCQkJCQkgICAgICAgX19hbGlnbm9mX18odHlwZSkpCiAKICNlbmRpZiAvKiBfX0xJTlVYX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IDAxYjI2MjkuLjIyOGIwYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0xMiwxODcgKzEyLDE4NyBAQAogI2RlZmluZSBQRktFWVYyX1JFVklTSU9OCTE5OTgwNkwKIAogc3RydWN0IHNhZGJfbXNnIHsKLQl1aW50OF90CQlzYWRiX21zZ192ZXJzaW9uOwotCXVpbnQ4X3QJCXNhZGJfbXNnX3R5cGU7Ci0JdWludDhfdAkJc2FkYl9tc2dfZXJybm87Ci0JdWludDhfdAkJc2FkYl9tc2dfc2F0eXBlOwotCXVpbnQxNl90CXNhZGJfbXNnX2xlbjsKLQl1aW50MTZfdAlzYWRiX21zZ19yZXNlcnZlZDsKLQl1aW50MzJfdAlzYWRiX21zZ19zZXE7Ci0JdWludDMyX3QJc2FkYl9tc2dfcGlkOworCV9fdTgJCXNhZGJfbXNnX3ZlcnNpb247CisJX191OAkJc2FkYl9tc2dfdHlwZTsKKwlfX3U4CQlzYWRiX21zZ19lcnJubzsKKwlfX3U4CQlzYWRiX21zZ19zYXR5cGU7CisJX191MTYJc2FkYl9tc2dfbGVuOworCV9fdTE2CXNhZGJfbXNnX3Jlc2VydmVkOworCV9fdTMyCXNhZGJfbXNnX3NlcTsKKwlfX3UzMglzYWRiX21zZ19waWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfZXh0IHsKLQl1aW50MTZfdAlzYWRiX2V4dF9sZW47Ci0JdWludDE2X3QJc2FkYl9leHRfdHlwZTsKKwlfX3UxNglzYWRiX2V4dF9sZW47CisJX191MTYJc2FkYl9leHRfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfZXh0KSA9PSA0ICovCiAKIHN0cnVjdCBzYWRiX3NhIHsKLQl1aW50MTZfdAlzYWRiX3NhX2xlbjsKLQl1aW50MTZfdAlzYWRiX3NhX2V4dHR5cGU7CisJX191MTYJc2FkYl9zYV9sZW47CisJX191MTYJc2FkYl9zYV9leHR0eXBlOwogCV9fYmUzMgkJc2FkYl9zYV9zcGk7Ci0JdWludDhfdAkJc2FkYl9zYV9yZXBsYXk7Ci0JdWludDhfdAkJc2FkYl9zYV9zdGF0ZTsKLQl1aW50OF90CQlzYWRiX3NhX2F1dGg7Ci0JdWludDhfdAkJc2FkYl9zYV9lbmNyeXB0OwotCXVpbnQzMl90CXNhZGJfc2FfZmxhZ3M7CisJX191OAkJc2FkYl9zYV9yZXBsYXk7CisJX191OAkJc2FkYl9zYV9zdGF0ZTsKKwlfX3U4CQlzYWRiX3NhX2F1dGg7CisJX191OAkJc2FkYl9zYV9lbmNyeXB0OworCV9fdTMyCXNhZGJfc2FfZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NhKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9saWZldGltZSB7Ci0JdWludDE2X3QJc2FkYl9saWZldGltZV9sZW47Ci0JdWludDE2X3QJc2FkYl9saWZldGltZV9leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7Ci0JdWludDY0X3QJc2FkYl9saWZldGltZV9ieXRlczsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9saWZldGltZV91c2V0aW1lOworCV9fdTE2CXNhZGJfbGlmZXRpbWVfbGVuOworCV9fdTE2CXNhZGJfbGlmZXRpbWVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX2xpZmV0aW1lX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfbGlmZXRpbWVfYnl0ZXM7CisJX191NjQJc2FkYl9saWZldGltZV9hZGR0aW1lOworCV9fdTY0CXNhZGJfbGlmZXRpbWVfdXNldGltZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfbGlmZXRpbWUpID09IDMyICovCiAKIHN0cnVjdCBzYWRiX2FkZHJlc3MgewotCXVpbnQxNl90CXNhZGJfYWRkcmVzc19sZW47Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX2V4dHR5cGU7Ci0JdWludDhfdAkJc2FkYl9hZGRyZXNzX3Byb3RvOwotCXVpbnQ4X3QJCXNhZGJfYWRkcmVzc19wcmVmaXhsZW47Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfYWRkcmVzc19sZW47CisJX191MTYJc2FkYl9hZGRyZXNzX2V4dHR5cGU7CisJX191OAkJc2FkYl9hZGRyZXNzX3Byb3RvOworCV9fdTgJCXNhZGJfYWRkcmVzc19wcmVmaXhsZW47CisJX191MTYJc2FkYl9hZGRyZXNzX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKSA9PSA4ICovCiAKIHN0cnVjdCBzYWRiX2tleSB7Ci0JdWludDE2X3QJc2FkYl9rZXlfbGVuOwotCXVpbnQxNl90CXNhZGJfa2V5X2V4dHR5cGU7Ci0JdWludDE2X3QJc2FkYl9rZXlfYml0czsKLQl1aW50MTZfdAlzYWRiX2tleV9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX2tleV9sZW47CisJX191MTYJc2FkYl9rZXlfZXh0dHlwZTsKKwlfX3UxNglzYWRiX2tleV9iaXRzOworCV9fdTE2CXNhZGJfa2V5X3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9rZXkpID09IDggKi8KIAogc3RydWN0IHNhZGJfaWRlbnQgewotCXVpbnQxNl90CXNhZGJfaWRlbnRfbGVuOwotCXVpbnQxNl90CXNhZGJfaWRlbnRfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX2lkZW50X3R5cGU7Ci0JdWludDE2X3QJc2FkYl9pZGVudF9yZXNlcnZlZDsKLQl1aW50NjRfdAlzYWRiX2lkZW50X2lkOworCV9fdTE2CXNhZGJfaWRlbnRfbGVuOworCV9fdTE2CXNhZGJfaWRlbnRfZXh0dHlwZTsKKwlfX3UxNglzYWRiX2lkZW50X3R5cGU7CisJX191MTYJc2FkYl9pZGVudF9yZXNlcnZlZDsKKwlfX3U2NAlzYWRiX2lkZW50X2lkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9pZGVudCkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfc2VucyB7Ci0JdWludDE2X3QJc2FkYl9zZW5zX2xlbjsKLQl1aW50MTZfdAlzYWRiX3NlbnNfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3NlbnNfZHBkOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19zZW5zX2xldmVsOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19zZW5zX2xlbjsKLQl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGV2ZWw7Ci0JdWludDhfdAkJc2FkYl9zZW5zX2ludGVnX2xlbjsKLQl1aW50MzJfdAlzYWRiX3NlbnNfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9zZW5zX2xlbjsKKwlfX3UxNglzYWRiX3NlbnNfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3NlbnNfZHBkOworCV9fdTgJCXNhZGJfc2Vuc19zZW5zX2xldmVsOworCV9fdTgJCXNhZGJfc2Vuc19zZW5zX2xlbjsKKwlfX3U4CQlzYWRiX3NlbnNfaW50ZWdfbGV2ZWw7CisJX191OAkJc2FkYl9zZW5zX2ludGVnX2xlbjsKKwlfX3UzMglzYWRiX3NlbnNfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NlbnMpID09IDE2ICovCiAKIC8qIGZvbGxvd2VkIGJ5OgotCXVpbnQ2NF90CXNhZGJfc2Vuc19iaXRtYXBbc2Vuc19sZW5dOwotCXVpbnQ2NF90CXNhZGJfaW50ZWdfYml0bWFwW2ludGVnX2xlbl07ICAqLworCV9fdTY0CXNhZGJfc2Vuc19iaXRtYXBbc2Vuc19sZW5dOworCV9fdTY0CXNhZGJfaW50ZWdfYml0bWFwW2ludGVnX2xlbl07ICAqLwogCiBzdHJ1Y3Qgc2FkYl9wcm9wIHsKLQl1aW50MTZfdAlzYWRiX3Byb3BfbGVuOwotCXVpbnQxNl90CXNhZGJfcHJvcF9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfcHJvcF9yZXBsYXk7Ci0JdWludDhfdAkJc2FkYl9wcm9wX3Jlc2VydmVkWzNdOworCV9fdTE2CXNhZGJfcHJvcF9sZW47CisJX191MTYJc2FkYl9wcm9wX2V4dHR5cGU7CisJX191OAkJc2FkYl9wcm9wX3JlcGxheTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApID09IDggKi8KIAogLyogZm9sbG93ZWQgYnk6CiAJc3RydWN0IHNhZGJfY29tYiBzYWRiX2NvbWJzWyhzYWRiX3Byb3BfbGVuICsKLQkJc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9wcm9wKSkgLworCQlzaXplb2YoX191NjQpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKV07ICovCiAKIHN0cnVjdCBzYWRiX2NvbWIgewotCXVpbnQ4X3QJCXNhZGJfY29tYl9hdXRoOwotCXVpbnQ4X3QJCXNhZGJfY29tYl9lbmNyeXB0OwotCXVpbnQxNl90CXNhZGJfY29tYl9mbGFnczsKLQl1aW50MTZfdAlzYWRiX2NvbWJfYXV0aF9taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21heGJpdHM7Ci0JdWludDE2X3QJc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKLQl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOwotCXVpbnQzMl90CXNhZGJfY29tYl9yZXNlcnZlZDsKLQl1aW50MzJfdAlzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKLQl1aW50MzJfdAlzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF9ieXRlczsKLQl1aW50NjRfdAlzYWRiX2NvbWJfaGFyZF9ieXRlczsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF9hZGR0aW1lOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9jb21iX3NvZnRfdXNldGltZTsKLQl1aW50NjRfdAlzYWRiX2NvbWJfaGFyZF91c2V0aW1lOworCV9fdTgJCXNhZGJfY29tYl9hdXRoOworCV9fdTgJCXNhZGJfY29tYl9lbmNyeXB0OworCV9fdTE2CXNhZGJfY29tYl9mbGFnczsKKwlfX3UxNglzYWRiX2NvbWJfYXV0aF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21heGJpdHM7CisJX191MTYJc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOworCV9fdTMyCXNhZGJfY29tYl9yZXNlcnZlZDsKKwlfX3UzMglzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKKwlfX3UzMglzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF9ieXRlczsKKwlfX3U2NAlzYWRiX2NvbWJfaGFyZF9ieXRlczsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF9hZGR0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX3NvZnRfdXNldGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfaGFyZF91c2V0aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKSA9PSA3MiAqLwogCiBzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQgewotCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2xlbjsKLQl1aW50MTZfdAlzYWRiX3N1cHBvcnRlZF9leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfc3VwcG9ydGVkX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2xlbjsKKwlfX3UxNglzYWRiX3N1cHBvcnRlZF9leHR0eXBlOworCV9fdTMyCXNhZGJfc3VwcG9ydGVkX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpID09IDggKi8KIAogLyogZm9sbG93ZWQgYnk6CiAJc3RydWN0IHNhZGJfYWxnIHNhZGJfYWxnc1soc2FkYl9zdXBwb3J0ZWRfbGVuICsKLQkJc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCisJCXNpemVvZihfX3U2NCkgLSBzaXplb2Yoc3RydWN0IHNhZGJfc3VwcG9ydGVkKSkgLwogCQlzaXplb2Yoc3RydWN0IHNhZGJfYWxnKV07ICovCiAKIHN0cnVjdCBzYWRiX2FsZyB7Ci0JdWludDhfdAkJc2FkYl9hbGdfaWQ7Ci0JdWludDhfdAkJc2FkYl9hbGdfaXZsZW47Ci0JdWludDE2X3QJc2FkYl9hbGdfbWluYml0czsKLQl1aW50MTZfdAlzYWRiX2FsZ19tYXhiaXRzOwotCXVpbnQxNl90CXNhZGJfYWxnX3Jlc2VydmVkOworCV9fdTgJCXNhZGJfYWxnX2lkOworCV9fdTgJCXNhZGJfYWxnX2l2bGVuOworCV9fdTE2CXNhZGJfYWxnX21pbmJpdHM7CisJX191MTYJc2FkYl9hbGdfbWF4Yml0czsKKwlfX3UxNglzYWRiX2FsZ19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfYWxnKSA9PSA4ICovCiAKIHN0cnVjdCBzYWRiX3NwaXJhbmdlIHsKLQl1aW50MTZfdAlzYWRiX3NwaXJhbmdlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3NwaXJhbmdlX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zcGlyYW5nZV9taW47Ci0JdWludDMyX3QJc2FkYl9zcGlyYW5nZV9tYXg7Ci0JdWludDMyX3QJc2FkYl9zcGlyYW5nZV9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3NwaXJhbmdlX2xlbjsKKwlfX3UxNglzYWRiX3NwaXJhbmdlX2V4dHR5cGU7CisJX191MzIJc2FkYl9zcGlyYW5nZV9taW47CisJX191MzIJc2FkYl9zcGlyYW5nZV9tYXg7CisJX191MzIJc2FkYl9zcGlyYW5nZV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc3BpcmFuZ2UpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX3hfa21wcml2YXRlIHsKLQl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfa21wcml2YXRlX2xlbjsKKwlfX3UxNglzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7CisJX191MzIJc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbXByaXZhdGUpID09IDggKi8KIAogc3RydWN0IHNhZGJfeF9zYTIgewotCXVpbnQxNl90CXNhZGJfeF9zYTJfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9zYTJfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX3hfc2EyX21vZGU7Ci0JdWludDhfdAkJc2FkYl94X3NhMl9yZXNlcnZlZDE7Ci0JdWludDE2X3QJc2FkYl94X3NhMl9yZXNlcnZlZDI7Ci0JdWludDMyX3QJc2FkYl94X3NhMl9zZXF1ZW5jZTsKLQl1aW50MzJfdAlzYWRiX3hfc2EyX3JlcWlkOworCV9fdTE2CXNhZGJfeF9zYTJfbGVuOworCV9fdTE2CXNhZGJfeF9zYTJfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3hfc2EyX21vZGU7CisJX191OAkJc2FkYl94X3NhMl9yZXNlcnZlZDE7CisJX191MTYJc2FkYl94X3NhMl9yZXNlcnZlZDI7CisJX191MzIJc2FkYl94X3NhMl9zZXF1ZW5jZTsKKwlfX3UzMglzYWRiX3hfc2EyX3JlcWlkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3NhMikgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9wb2xpY3kgewotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX3hfcG9saWN5X3R5cGU7Ci0JdWludDhfdAkJc2FkYl94X3BvbGljeV9kaXI7Ci0JdWludDhfdAkJc2FkYl94X3BvbGljeV9yZXNlcnZlZDsKLQl1aW50MzJfdAlzYWRiX3hfcG9saWN5X2lkOwotCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfcHJpb3JpdHk7CisJX191MTYJc2FkYl94X3BvbGljeV9sZW47CisJX191MTYJc2FkYl94X3BvbGljeV9leHR0eXBlOworCV9fdTE2CXNhZGJfeF9wb2xpY3lfdHlwZTsKKwlfX3U4CQlzYWRiX3hfcG9saWN5X2RpcjsKKwlfX3U4CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOworCV9fdTMyCXNhZGJfeF9wb2xpY3lfaWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9wb2xpY3kpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0IHsKLQl1aW50MTZfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOwotCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKLQl1aW50OF90CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOwotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOwotCXVpbnQzMl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7Ci0JdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7CisJX191MTYJc2FkYl94X2lwc2VjcmVxdWVzdF9sZW47CisJX191MTYJc2FkYl94X2lwc2VjcmVxdWVzdF9wcm90bzsKKwlfX3U4CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X21vZGU7CisJX191OAkJc2FkYl94X2lwc2VjcmVxdWVzdF9sZXZlbDsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMTsKKwlfX3UzMglzYWRiX3hfaXBzZWNyZXF1ZXN0X3JlcWlkOworCV9fdTMyCXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2lwc2VjcmVxdWVzdCkgPT0gMTYgKi8KIApAQCAtMjAwLDM4ICsyMDAsMzggQEAKICAqIHR5cGUgb2YgTkFULVQgaXMgc3VwcG9ydGVkLCBkcmFmdC1pZXRmLWlwc2VjLXVkcC1lbmNhcHMtMDYKICAqLwogc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlIHsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9sZW47Ci0JdWludDE2X3QJc2FkYl94X25hdF90X3R5cGVfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX3hfbmF0X3RfdHlwZV90eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3Jlc2VydmVkWzNdOworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfdHlwZSkgPT0gOCAqLwogCiAvKiBQYXNzIGEgTkFUIFRyYXZlcnNhbCBwb3J0IChTb3VyY2Ugb3IgRGVzdCBwb3J0KSAqLwogc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0IHsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9sZW47Ci0JdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9sZW47CisJX191MTYJc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKIAlfX2JlMTYJCXNhZGJfeF9uYXRfdF9wb3J0X3BvcnQ7Ci0JdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCkgPT0gOCAqLwogCiAvKiBHZW5lcmljIExTTSBzZWN1cml0eSBjb250ZXh0ICovCiBzdHJ1Y3Qgc2FkYl94X3NlY19jdHggewotCXVpbnQxNl90CXNhZGJfeF9zZWNfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9zZWNfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX3hfY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLwotCXVpbnQ4X3QJCXNhZGJfeF9jdHhfZG9pOwotCXVpbnQxNl90CXNhZGJfeF9jdHhfbGVuOworCV9fdTE2CXNhZGJfeF9zZWNfbGVuOworCV9fdTE2CXNhZGJfeF9zZWNfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3hfY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLworCV9fdTgJCXNhZGJfeF9jdHhfZG9pOworCV9fdTE2CXNhZGJfeF9jdHhfbGVuOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zZWNfY3R4KSA9IDggKi8KIAogLyogVXNlZCBieSBNSUdSQVRFIHRvIHBhc3MgYWRkcmVzc2VzIElLRSB3aWxsIHVzZSB0byBwZXJmb3JtCiAgKiBuZWdvdGlhdGlvbiB3aXRoIHRoZSBwZWVyICovCiBzdHJ1Y3Qgc2FkYl94X2ttYWRkcmVzcyB7Ci0JdWludDE2X3QJc2FkYl94X2ttYWRkcmVzc19sZW47Ci0JdWludDE2X3QJc2FkYl94X2ttYWRkcmVzc19leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfeF9rbWFkZHJlc3NfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl94X2ttYWRkcmVzc19sZW47CisJX191MTYJc2FkYl94X2ttYWRkcmVzc19leHR0eXBlOworCV9fdTMyCXNhZGJfeF9rbWFkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzKSA9PSA4ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IGQ3ZTU0ZDkuLjMyY2YxNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMzE1LDggKzMxNSw3IEBACiAKIAkvKiBJbnRlcnJ1cHQgYW5kIFBvbGxpbmcgaW5mcmFzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGh5X3F1ZXVlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGF0ZV9xdWV1ZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBwaHlfdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0ZV9xdWV1ZTsKIAlhdG9taWNfdCBpcnFfZGlzYWJsZTsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waW0uaCBiL2luY2x1ZGUvbGludXgvcGltLmgKaW5kZXggMWJhMDY2MS4uMjUyYmY2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpbS5oCkBAIC00LDE0ICs0LDE0IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKiBNZXNzYWdlIHR5cGVzIC0gVjEgKi8KLSNkZWZpbmUgUElNX1YxX1ZFUlNJT04JCV9fY29uc3RhbnRfaHRvbmwoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUElNX1YxX1ZFUlNJT04JCWNwdV90b19iZTMyKDB4MTAwMDAwMDApCiAjZGVmaW5lIFBJTV9WMV9SRUdJU1RFUgkJMQogCiAvKiBNZXNzYWdlIHR5cGVzIC0gVjIgKi8KICNkZWZpbmUgUElNX1ZFUlNJT04JCTIKICNkZWZpbmUgUElNX1JFR0lTVEVSCQkxCiAKLSNkZWZpbmUgUElNX05VTExfUkVHSVNURVIJX19jb25zdGFudF9odG9ubCgweDQwMDAwMDAwKQorI2RlZmluZSBQSU1fTlVMTF9SRUdJU1RFUgljcHVfdG9fYmUzMigweDQwMDAwMDAwKQogCiAvKiBQSU12MiByZWdpc3RlciBtZXNzYWdlIGhlYWRlciBsYXlvdXQgKGlldGYtZHJhZnQtaWRtci1waW12c20tdjItMDAucHMgKi8KIHN0cnVjdCBwaW1yZWdoZHIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCmluZGV4IDlhMzQyNjkuLjc2ZTQ3MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfUExBVEZPUk1fREVWSUNFX0hfCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSB7CiAJY29uc3QgY2hhcgkqIG5hbWU7CkBAIC0xOSw4ICsyMCwxMyBAQAogCXN0cnVjdCBkZXZpY2UJZGV2OwogCXUzMgkJbnVtX3Jlc291cmNlczsKIAlzdHJ1Y3QgcmVzb3VyY2UJKiByZXNvdXJjZTsKKwl2b2lkCQkqcGxhdGZvcm1fZGF0YTsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQJKmlkX2VudHJ5OwogfTsKIAorI2RlZmluZSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpCSgocGRldiktPmlkX2VudHJ5KQorCiAjZGVmaW5lIHRvX3BsYXRmb3JtX2RldmljZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpCiAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CkBAIC01Niw2ICs2Miw3IEBACiAJaW50ICgqcmVzdW1lX2Vhcmx5KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfdGFibGU7CiB9OwogCiBleHRlcm4gaW50IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGlzdC5oIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCmluZGV4IDg1ZGUyZjAuLjQ1OTI2ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKQEAgLTk2LDYgKzk2LDEwIEBACiAjIGRlZmluZSBQTElTVF9IRUFEX0xPQ0tfSU5JVChfbG9jaykKICNlbmRpZgogCisjZGVmaW5lIF9QTElTVF9IRUFEX0lOSVQoaGVhZCkJCQkJXAorCS5wcmlvX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkucHJpb19saXN0KSwJXAorCS5ub2RlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkubm9kZV9saXN0KQorCiAvKioKICAqIFBMSVNUX0hFQURfSU5JVCAtIHN0YXRpYyBzdHJ1Y3QgcGxpc3RfaGVhZCBpbml0aWFsaXplcgogICogQGhlYWQ6CXN0cnVjdCBwbGlzdF9oZWFkIHZhcmlhYmxlIG5hbWUKQEAgLTEwMyw4ICsxMDcsNyBAQAogICovCiAjZGVmaW5lIFBMSVNUX0hFQURfSU5JVChoZWFkLCBfbG9jaykJCQlcCiB7CQkJCQkJCVwKLQkucHJpb19saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLnByaW9fbGlzdCksCVwKLQkubm9kZV9saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLm5vZGVfbGlzdCksCVwKKyAgICAgICAgX1BMSVNUX0hFQURfSU5JVChoZWFkKSwgICAgICAgICAgICAgICAgICAgICAgICAgXAogCVBMSVNUX0hFQURfTE9DS19JTklUKCYoX2xvY2spKQkJCVwKIH0KIApAQCAtMTE2LDcgKzExOSw3IEBACiAjZGVmaW5lIFBMSVNUX05PREVfSU5JVChub2RlLCBfX3ByaW8pCQkJXAogewkJCQkJCQlcCiAJLnByaW8gID0gKF9fcHJpbyksCQkJCVwKLQkucGxpc3QgPSBQTElTVF9IRUFEX0lOSVQoKG5vZGUpLnBsaXN0LCBOVUxMKSwJXAorCS5wbGlzdCA9IHsgX1BMSVNUX0hFQURfSU5JVCgobm9kZSkucGxpc3QpIH0sIAlcCiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDI0YmE1ZjYuLjFkNGUyZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTQwMCw2ICs0MDAsOSBAQAogCiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKKyNkZWZpbmUgZGV2aWNlX3BtX2xvY2soKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZGV2aWNlX3BtX3VubG9jaygpIGRvIHt9IHdoaWxlICgwKQorCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJcmV0dXJuIDA7CkBAIC00MDksNiArNDEyLDE0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKKy8qIEhvdyB0byByZW9yZGVyIGRwbV9saXN0IGFmdGVyIGRldmljZV9tb3ZlKCkgKi8KK2VudW0gZHBtX29yZGVyIHsKKwlEUE1fT1JERVJfTk9ORSwKKwlEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVCwKKwlEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYsCisJRFBNX09SREVSX0RFVl9MQVNULAorfTsKKwogLyoKICAqIEdsb2JhbCBQb3dlciBNYW5hZ2VtZW50IGZsYWdzCiAgKiBVc2VkIHRvIGtlZXAgQVBNIGFuZCBBQ1BJIGZyb20gYm90aCBiZWluZyBhY3RpdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAppbmRleCBhOTQyODkyLi4wZDNmYTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCiBzdHJ1Y3QgcHBwX2NoYW5uZWw7CiAKQEAgLTM5LDggKzQwLDggQEAKIAlpbnQJCW10dTsJCS8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqLwogCWludAkJaGRybGVuOwkJLyogYW1vdW50IG9mIGhlYWRyb29tIGNoYW5uZWwgbmVlZHMgKi8KIAl2b2lkCQkqcHBwOwkJLyogb3BhcXVlIHRvIGNoYW5uZWwgKi8KLQkvKiB0aGUgZm9sbG93aW5nIGFyZSBub3QgdXNlZCBhdCBwcmVzZW50ICovCiAJaW50CQlzcGVlZDsJCS8qIHRyYW5zZmVyIHJhdGUgKGJ5dGVzL3NlY29uZCkgKi8KKwkvKiB0aGUgZm9sbG93aW5nIGlzIG5vdCB1c2VkIGF0IHByZXNlbnQgKi8KIAlpbnQJCWxhdGVuY3k7CS8qIG92ZXJoZWFkIHRpbWUgaW4gbWlsbGlzZWNvbmRzICovCiB9OwogCkBAIC01Niw2ICs1Nyw5IEBACiAgICB0aGF0IHdlIG1heSBoYXZlIG1pc3NlZCBhIHBhY2tldC4gKi8KIGV4dGVybiB2b2lkIHBwcF9pbnB1dF9lcnJvcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgaW50IGNvZGUpOwogCisvKiBBdHRhY2ggYSBjaGFubmVsIHRvIGEgZ2l2ZW4gUFBQIHVuaXQgaW4gc3BlY2lmaWVkIG5ldC4gKi8KK2V4dGVybiBpbnQgcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKHN0cnVjdCBuZXQgKiwgc3RydWN0IHBwcF9jaGFubmVsICopOworCiAvKiBBdHRhY2ggYSBjaGFubmVsIHRvIGEgZ2l2ZW4gUFBQIHVuaXQuICovCiBleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCmluZGV4IDFjODY2YmQuLjBmOTNlZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKQEAgLTE3Nyw4ICsxNzcsOCBAQAogICogdGhlIGxhc3QgTlAgcGFja2V0IHdhcyBzZW50IG9yIHJlY2VpdmVkLgogICovCiBzdHJ1Y3QgcHBwX2lkbGUgewotICAgIHRpbWVfdCB4bWl0X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHNlbnQgKi8KLSAgICB0aW1lX3QgcmVjdl9pZGxlOwkJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCByZWNlaXZlZCAqLworICAgIF9fa2VybmVsX3RpbWVfdCB4bWl0X2lkbGU7CS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgc2VudCAqLworICAgIF9fa2VybmVsX3RpbWVfdCByZWN2X2lkbGU7CS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgcmVjZWl2ZWQgKi8KIH07CiAKICNlbmRpZiAvKiBfUFBQX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGEuaAppbmRleCBkNzJkNWQ4Li43OGM0ODg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCkBAIC0xOTgsNiArMTk4LDcgQEAKIAlxc2l6ZV90IGRxYl9iaGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBkaXNrIGJsa3MgYWxsb2MgKi8KIAlxc2l6ZV90IGRxYl9ic29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gZGlzayBibGtzICovCiAJcXNpemVfdCBkcWJfY3Vyc3BhY2U7CS8qIGN1cnJlbnQgdXNlZCBzcGFjZSAqLworCXFzaXplX3QgZHFiX3JzdnNwYWNlOyAgIC8qIGN1cnJlbnQgcmVzZXJ2ZWQgc3BhY2UgZm9yIGRlbGFsbG9jKi8KIAlxc2l6ZV90IGRxYl9paGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBhbGxvY2F0ZWQgaW5vZGVzICovCiAJcXNpemVfdCBkcWJfaXNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGlub2RlIGxpbWl0ICovCiAJcXNpemVfdCBkcWJfY3VyaW5vZGVzOwkvKiBjdXJyZW50ICMgYWxsb2NhdGVkIGlub2RlcyAqLwpAQCAtMjc2LDggKzI3Nyw2IEBACiAJc3RydWN0IG1lbV9kcWJsayBkcV9kcWI7CS8qIERpc2txdW90YSB1c2FnZSAqLwogfTsKIAotI2RlZmluZSBOT0RRVU9UIChzdHJ1Y3QgZHF1b3QgKilOVUxMCi0KICNkZWZpbmUgUVVPVEFfT0sgICAgICAgICAgMAogI2RlZmluZSBOT19RVU9UQSAgICAgICAgICAxCiAKQEAgLTMwOCw2ICszMDcsMTQgQEAKIAlpbnQgKCpyZWxlYXNlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOwkJLyogUXVvdGEgaXMgZ29pbmcgdG8gYmUgZGVsZXRlZCBmcm9tIGRpc2sgKi8KIAlpbnQgKCptYXJrX2RpcnR5KSAoc3RydWN0IGRxdW90ICopOwkJLyogRHF1b3QgaXMgbWFya2VkIGRpcnR5ICovCiAJaW50ICgqd3JpdGVfaW5mbykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwkvKiBXcml0ZSBvZiBxdW90YSAic3VwZXJibG9jayIgKi8KKwkvKiByZXNlcnZlIHF1b3RhIGZvciBkZWxheWVkIGJsb2NrIGFsbG9jYXRpb24gKi8KKwlpbnQgKCpyZXNlcnZlX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QsIGludCk7CisJLyogY2xhaW0gcmVzZXJ2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KKwlpbnQgKCpjbGFpbV9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqLCBxc2l6ZV90KTsKKwkvKiByZWxlYXNlIHJzdmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCisJdm9pZCAoKnJlbGVhc2VfcnN2KSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOworCS8qIGdldCByZXNlcnZlZCBxdW90YSBmb3IgZGVsYXllZCBhbGxvYyAqLworCXFzaXplX3QgKCpnZXRfcmVzZXJ2ZWRfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKik7CiB9OwogCiAvKiBPcGVyYXRpb25zIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKaW5kZXggMGIzNWIzYS4uMzYzNTNkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtMzUsNiArMzUsMTEgQEAKIGludCBkcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHByZWFsbG9jKTsKIGludCBkcXVvdF9hbGxvY19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7CiAKK2ludCBkcXVvdF9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgcHJlYWxsb2MpOworaW50IGRxdW90X2NsYWltX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKK3ZvaWQgZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7Citxc2l6ZV90IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwogaW50IGRxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwogaW50IGRxdW90X2ZyZWVfaW5vZGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwogCkBAIC0xODMsNiArMTg4LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikpIHsKKwkJLyogVXNlZCBzcGFjZSBpcyB1cGRhdGVkIGluIGFsbG9jX3NwYWNlKCkgKi8KKwkJaWYgKGlub2RlLT5pX3NiLT5kcV9vcC0+cmVzZXJ2ZV9zcGFjZShpbm9kZSwgbnIsIDApID09IE5PX1FVT1RBKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikpIHsKQEAgLTE5Myw2ICsyMDgsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIENvbnZlcnQgaW4tbWVtb3J5IHJlc2VydmVkIHF1b3RhcyB0byByZWFsIGNvbnN1bWVkIHF1b3RhcworICovCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikpIHsKKwkJaWYgKGlub2RlLT5pX3NiLT5kcV9vcC0+Y2xhaW1fc3BhY2UoaW5vZGUsIG5yKSA9PSBOT19RVU9UQSkKKwkJCXJldHVybiAxOworCX0gZWxzZQorCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG5yKTsKKworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOworfQorCisvKgorICogUmVsZWFzZSByZXNlcnZlZCAoaW4tbWVtb3J5KSBxdW90YXMKKyAqLworc3RhdGljIGlubGluZQordm9pZCB2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkKKwkJaW5vZGUtPmlfc2ItPmRxX29wLT5yZWxlYXNlX3Jzdihpbm9kZSwgbnIpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewogCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkKQEAgLTMzOSw2ICszNzksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2NsYWltX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJcmV0dXJuIHZmc19kcV9hbGxvY19zcGFjZShpbm9kZSwgbnIpOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKIAlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG5yKTsKQEAgLTM1NCw2NyArNDEwLDQ4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9wcmVhbGxvY19ibG9ja19ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JcmV0dXJuIHZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAotCQkJbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXJldHVybiB2ZnNfZHFfcHJlYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9wcmVhbGxvY19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXJldHVybiB2ZnNfZHFfcHJlYWxsb2Nfc3BhY2UoaW5vZGUsCi0JCQluciA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CisJcmV0dXJuIHZmc19kcV9wcmVhbGxvY19zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9hbGxvY19ibG9ja19ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0gCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKLQkJCW5yIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlyZXR1cm4gdmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2NfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQlyZXR1cm4gdmZzX2RxX2FsbG9jX3NwYWNlKGlub2RlLAotCQkJbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcmVzZXJ2ZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCXJldHVybiB2ZnNfZHFfcmVzZXJ2ZV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9jbGFpbV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCXJldHVybiB2ZnNfZHFfY2xhaW1fc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIHZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfYmxvY2tfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZmc19kcV9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JdmZzX2RxX2ZyZWVfc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKLS8qCi0gKiBEZWZpbmUgdXBwZXJjYXNlIGVxdWl2YWxlbnRzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGZ1bmN0aW9uIG5hbWVzCi0gKiBDYW4gZ28gYXdheSB3aGVuIHdlIHRoaW5rIGFsbCB1c2VycyBoYXZlIGJlZW4gY29udmVydGVkICgxNS8wNC8yMDA4KQotICovCi0jZGVmaW5lIERRVU9UX0lOSVQoaW5vZGUpIHZmc19kcV9pbml0KGlub2RlKQotI2RlZmluZSBEUVVPVF9EUk9QKGlub2RlKSB2ZnNfZHFfZHJvcChpbm9kZSkKLSNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfU1BBQ0VfTk9ESVJUWShpbm9kZSwgbnIpIFwKLQkJCQl2ZnNfZHFfcHJlYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX1BSRUFMTE9DX1NQQUNFKGlub2RlLCBucikgdmZzX2RxX3ByZWFsbG9jX3NwYWNlKGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfU1BBQ0VfTk9ESVJUWShpbm9kZSwgbnIpIFwKLQkJCQl2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0FMTE9DX1NQQUNFKGlub2RlLCBucikgdmZzX2RxX2FsbG9jX3NwYWNlKGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfQkxPQ0tfTk9ESVJUWShpbm9kZSwgbnIpIFwKLQkJCQl2ZnNfZHFfcHJlYWxsb2NfYmxvY2tfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX1BSRUFMTE9DX0JMT0NLKGlub2RlLCBucikgdmZzX2RxX3ByZWFsbG9jX2Jsb2NrKGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfQkxPQ0tfTk9ESVJUWShpbm9kZSwgbnIpIFwKLQkJCQl2ZnNfZHFfYWxsb2NfYmxvY2tfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBucikgdmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpIHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkKLSNkZWZpbmUgRFFVT1RfRlJFRV9TUEFDRV9OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9GUkVFX1NQQUNFKGlub2RlLCBucikgdmZzX2RxX2ZyZWVfc3BhY2UoaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9GUkVFX0JMT0NLX05PRElSVFkoaW5vZGUsIG5yKSBcCi0JCQkJdmZzX2RxX2ZyZWVfYmxvY2tfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIG5yKSB2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0ZSRUVfSU5PREUoaW5vZGUpIHZmc19kcV9mcmVlX2lub2RlKGlub2RlKQotI2RlZmluZSBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgaWF0dHIpIHZmc19kcV90cmFuc2Zlcihpbm9kZSwgaWF0dHIpCi0jZGVmaW5lIERRVU9UX1NZTkMoc2IpIHZmc19kcV9zeW5jKHNiKQotI2RlZmluZSBEUVVPVF9PRkYoc2IsIHJlbW91bnQpIHZmc19kcV9vZmYoc2IsIHJlbW91bnQpCi0jZGVmaW5lIERRVU9UX09OX1JFTU9VTlQoc2IpIHZmc19kcV9xdW90YV9vbl9yZW1vdW50KHNiKQotCiAjZW5kaWYgLyogX0xJTlVYX1FVT1RBT1BTXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZHMuaCBiL2luY2x1ZGUvbGludXgvcmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxZGM5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmRzLmgKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9SRFNfSAorI2RlZmluZSBfTElOVVhfUkRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFRoZXNlIHNwYXJzZSBhbm5vdGF0ZWQgdHlwZXMgc2hvdWxkbid0IGJlIGluIGFueSB1c2VyCisgKiB2aXNpYmxlIGhlYWRlciBmaWxlLiBXZSBzaG91bGQgY2xlYW4gdGhpcyB1cCByYXRoZXIKKyAqIHRoYW4ga2x1ZGdpbmcgYXJvdW5kIHRoZW0uICovCisjaWZuZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19iZTE2CXVfaW50MTZfdAorI2RlZmluZSBfX2JlMzIJdV9pbnQzMl90CisjZGVmaW5lIF9fYmU2NAl1X2ludDY0X3QKKyNlbmRpZgorCisjZGVmaW5lIFJEU19JQl9BQklfVkVSU0lPTgkJMHgzMDEKKworLyoKKyAqIHNldHNvY2tvcHQvZ2V0c29ja29wdCBmb3IgU09MX1JEUworICovCisjZGVmaW5lIFJEU19DQU5DRUxfU0VOVF9UTyAgICAgIAkxCisjZGVmaW5lIFJEU19HRVRfTVIJCQkyCisjZGVmaW5lIFJEU19GUkVFX01SCQkJMworLyogZGVwcmVjYXRlZDogUkRTX0JBUlJJRVIgNCAqLworI2RlZmluZSBSRFNfUkVDVkVSUgkJCTUKKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUgkJNgorCisvKgorICogQ29udHJvbCBtZXNzYWdlIHR5cGVzIGZvciBTT0xfUkRTLgorICoKKyAqIENNU0dfUkRNQV9BUkdTIChzZW5kbXNnKQorICoJUmVxdWVzdCBhIFJETUEgdHJhbnNmZXIgdG8vZnJvbSB0aGUgc3BlY2lmaWVkCisgKgltZW1vcnkgcmFuZ2VzLgorICoJVGhlIGNtc2dfZGF0YSBpcyBhIHN0cnVjdCByZHNfcmRtYV9hcmdzLgorICogUkRTX0NNU0dfUkRNQV9ERVNUIChyZWN2bXNnLCBzZW5kbXNnKQorICoJS2VybmVsIGluZm9ybXMgYXBwbGljYXRpb24gYWJvdXQgaW50ZW5kZWQKKyAqCXNvdXJjZS9kZXN0aW5hdGlvbiBvZiBhIFJETUEgdHJhbnNmZXIKKyAqIFJEU19DTVNHX1JETUFfTUFQIChzZW5kbXNnKQorICoJQXBwbGljYXRpb24gYXNrcyBrZXJuZWwgdG8gbWFwIHRoZSBnaXZlbgorICoJbWVtb3J5IHJhbmdlIGludG8gYSBJQiBNUiwgYW5kIHNlbmQgdGhlCisgKglSX0tleSBhbG9uZyBpbiBhbiBSRFMgZXh0ZW5zaW9uIGhlYWRlci4KKyAqCVRoZSBjbXNnX2RhdGEgaXMgYSBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzLAorICoJdGhlIHNhbWUgYXMgZm9yIHRoZSBHRVRfTVIgc2V0c29ja29wdC4KKyAqIFJEU19DTVNHX1JETUFfU1RBVFVTIChyZWN2bXNnKQorICoJUmV0dXJucyB0aGUgc3RhdHVzIG9mIGEgY29tcGxldGVkIFJETUEgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJEU19DTVNHX1JETUFfQVJHUwkJMQorI2RlZmluZSBSRFNfQ01TR19SRE1BX0RFU1QJCTIKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9NQVAJCTMKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9TVEFUVVMJCTQKKyNkZWZpbmUgUkRTX0NNU0dfQ09OR19VUERBVEUJCTUKKworI2RlZmluZSBSRFNfSU5GT19GSVJTVAkJCTEwMDAwCisjZGVmaW5lIFJEU19JTkZPX0NPVU5URVJTCQkxMDAwMAorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OUwkJMTAwMDEKKy8qIDEwMDAyIGFrYSBSRFNfSU5GT19GTE9XUyBpcyBkZXByZWNhdGVkICovCisjZGVmaW5lIFJEU19JTkZPX1NFTkRfTUVTU0FHRVMJCTEwMDAzCisjZGVmaW5lIFJEU19JTkZPX1JFVFJBTlNfTUVTU0FHRVMgICAgICAgMTAwMDQKKyNkZWZpbmUgUkRTX0lORk9fUkVDVl9NRVNTQUdFUyAgICAgICAgICAxMDAwNQorI2RlZmluZSBSRFNfSU5GT19TT0NLRVRTICAgICAgICAgICAgICAgIDEwMDA2CisjZGVmaW5lIFJEU19JTkZPX1RDUF9TT0NLRVRTICAgICAgICAgICAgMTAwMDcKKyNkZWZpbmUgUkRTX0lORk9fSUJfQ09OTkVDVElPTlMJCTEwMDA4CisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fU1RBVFMJMTAwMDkKKyNkZWZpbmUgUkRTX0lORk9fSVdBUlBfQ09OTkVDVElPTlMJMTAwMTAKKyNkZWZpbmUgUkRTX0lORk9fTEFTVAkJCTEwMDEwCisKK3N0cnVjdCByZHNfaW5mb19jb3VudGVyIHsKKwl1X2ludDhfdAluYW1lWzMyXTsKKwl1X2ludDY0X3QJdmFsdWU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19TRU5ESU5HCTB4MDEKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX0NPTk5FQ1RJTkcJMHgwMgorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfQ09OTkVDVEVECTB4MDQKKworI2RlZmluZSBUUkFOU05BTVNJWgkxNgorCitzdHJ1Y3QgcmRzX2luZm9fY29ubmVjdGlvbiB7CisJdV9pbnQ2NF90CW5leHRfdHhfc2VxOworCXVfaW50NjRfdAluZXh0X3J4X3NlcTsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJdV9pbnQ4X3QJdHJhbnNwb3J0W1RSQU5TTkFNU0laXTsJCS8qIG51bGwgdGVybSBhc2NpaSAqLworCXVfaW50OF90CWZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJkc19pbmZvX2Zsb3cgeworCV9fYmUzMgkJbGFkZHI7CisJX19iZTMyCQlmYWRkcjsKKwl1X2ludDMyX3QJYnl0ZXM7CisJX19iZTE2CQlscG9ydDsKKwlfX2JlMTYJCWZwb3J0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBSRFNfSU5GT19NRVNTQUdFX0ZMQUdfQUNLICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRFNfSU5GT19NRVNTQUdFX0ZMQUdfRkFTVF9BQ0sgICAgICAgICAgMHgwMgorCitzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSB7CisJdV9pbnQ2NF90CXNlcTsKKwl1X2ludDMyX3QJbGVuOworCV9fYmUzMgkJbGFkZHI7CisJX19iZTMyCQlmYWRkcjsKKwlfX2JlMTYJCWxwb3J0OworCV9fYmUxNgkJZnBvcnQ7CisJdV9pbnQ4X3QJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcmRzX2luZm9fc29ja2V0IHsKKwl1X2ludDMyX3QJc25kYnVmOworCV9fYmUzMgkJYm91bmRfYWRkcjsKKwlfX2JlMzIJCWNvbm5lY3RlZF9hZGRyOworCV9fYmUxNgkJYm91bmRfcG9ydDsKKwlfX2JlMTYJCWNvbm5lY3RlZF9wb3J0OworCXVfaW50MzJfdAlyY3ZidWY7CisJdV9pbnQ2NF90CWludW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFJEU19JQl9HSURfTEVOCTE2CitzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uIHsKKwlfX2JlMzIJCXNyY19hZGRyOworCV9fYmUzMgkJZHN0X2FkZHI7CisJdWludDhfdAkJc3JjX2dpZFtSRFNfSUJfR0lEX0xFTl07CisJdWludDhfdAkJZHN0X2dpZFtSRFNfSUJfR0lEX0xFTl07CisKKwl1aW50MzJfdAltYXhfc2VuZF93cjsKKwl1aW50MzJfdAltYXhfcmVjdl93cjsKKwl1aW50MzJfdAltYXhfc2VuZF9zZ2U7CisJdWludDMyX3QJcmRtYV9tcl9tYXg7CisJdWludDMyX3QJcmRtYV9tcl9zaXplOworfTsKKworLyoKKyAqIENvbmdlc3Rpb24gbW9uaXRvcmluZy4KKyAqIENvbmdlc3Rpb24gY29udHJvbCBpbiBSRFMgaGFwcGVucyBhdCB0aGUgaG9zdCBjb25uZWN0aW9uCisgKiBsZXZlbCBieSBleGNoYW5naW5nIGEgYml0bWFwIG1hcmtpbmcgY29uZ2VzdGVkIHBvcnRzLgorICogQnkgZGVmYXVsdCwgYSBwcm9jZXNzIHNsZWVwaW5nIGluIHBvbGwoKSBpcyBhbHdheXMgd29rZW4KKyAqIHVwIHdoZW4gdGhlIGNvbmdlc3Rpb24gbWFwIGlzIHVwZGF0ZWQuCisgKiBXaXRoIGV4cGxpY2l0IG1vbml0b3JpbmcsIGFuIGFwcGxpY2F0aW9uIGNhbiBoYXZlIG1vcmUKKyAqIGZpbmUtZ3JhaW5lZCBjb250cm9sLgorICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbGxzIGEgNjRiaXQgbWFzayB2YWx1ZSBpbiB0aGUgc29ja2V0LAorICogd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBncm91cCBvZiBwb3J0cy4KKyAqIFdoZW4gYSBjb25nZXN0aW9uIHVwZGF0ZSBhcnJpdmVzLCBSRFMgY2hlY2tzIHRoZSBzZXQgb2YKKyAqIHBvcnRzIHRoYXQgYXJlIG5vdyB1bmNvbmdlc3RlZCBhZ2FpbnN0IHRoZSBsaXN0IGJpdCBtYXNrCisgKiBpbnN0YWxsZWQgaW4gdGhlIHNvY2tldCwgYW5kIGlmIHRoZXkgb3ZlcmxhcCwgd2UgcXVldWUgYQorICogY29uZ19ub3RpZmljYXRpb24gb24gdGhlIHNvY2tldC4KKyAqCisgKiBUbyBpbnN0YWxsIHRoZSBjb25nZXN0aW9uIG1vbml0b3IgYml0bWFzaywgdXNlIFJEU19DT05HX01PTklUT1IKKyAqIHdpdGggdGhlIDY0Yml0IG1hc2suCisgKiBDb25nZXN0aW9uIHVwZGF0ZXMgYXJlIHJlY2VpdmVkIHZpYSBSRFNfQ01TR19DT05HX1VQREFURQorICogY29udHJvbCBtZXNzYWdlcy4KKyAqCisgKiBUaGUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBiaXRzIGFuZCBwb3J0cyBpcworICoJMSA8PCAocG9ydG51bSAlIDY0KQorICovCisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfU0laRQk2NAorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX0JJVChwb3J0KSAgKCgodW5zaWduZWQgaW50KSBwb3J0KSAlIFJEU19DT05HX01PTklUT1JfU0laRSkKKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9NQVNLKHBvcnQpICgxVUxMIDw8IFJEU19DT05HX01PTklUT1JfQklUKHBvcnQpKQorCisvKgorICogUkRNQSByZWxhdGVkIHR5cGVzCisgKi8KKworLyoKKyAqIFRoaXMgZW5jYXBzdWxhdGVzIGEgcmVtb3RlIG1lbW9yeSBsb2NhdGlvbi4KKyAqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBpdCBjb250YWlucyB0aGUgUl9LZXkKKyAqIG9mIHRoZSByZW1vdGUgbWVtb3J5IHJlZ2lvbiwgYW5kIHRoZSBvZmZzZXQgaW50byBpdAorICogKHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIGFsaWdubWVudCkuCisgKi8KK3R5cGVkZWYgdV9pbnQ2NF90CXJkc19yZG1hX2Nvb2tpZV90OworCitzdHJ1Y3QgcmRzX2lvdmVjIHsKKwl1X2ludDY0X3QJYWRkcjsKKwl1X2ludDY0X3QJYnl0ZXM7Cit9OworCitzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIHsKKwlzdHJ1Y3QgcmRzX2lvdmVjIHZlYzsKKwl1X2ludDY0X3QJY29va2llX2FkZHI7CisJdWludDY0X3QJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyB7CisJcmRzX3JkbWFfY29va2llX3QgY29va2llOworCXVfaW50NjRfdAlmbGFnczsKK307CisKK3N0cnVjdCByZHNfcmRtYV9hcmdzIHsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHJkc19pb3ZlYyByZW1vdGVfdmVjOworCXVfaW50NjRfdAlsb2NhbF92ZWNfYWRkcjsKKwl1X2ludDY0X3QJbnJfbG9jYWw7CisJdV9pbnQ2NF90CWZsYWdzOworCXVfaW50NjRfdAl1c2VyX3Rva2VuOworfTsKKworc3RydWN0IHJkc19yZG1hX25vdGlmeSB7CisJdV9pbnQ2NF90CXVzZXJfdG9rZW47CisJaW50MzJfdAkJc3RhdHVzOworfTsKKworI2RlZmluZSBSRFNfUkRNQV9TVUNDRVNTCTAKKyNkZWZpbmUgUkRTX1JETUFfUkVNT1RFX0VSUk9SCTEKKyNkZWZpbmUgUkRTX1JETUFfQ0FOQ0VMRUQJMgorI2RlZmluZSBSRFNfUkRNQV9EUk9QUEVECTMKKyNkZWZpbmUgUkRTX1JETUFfT1RIRVJfRVJST1IJNAorCisvKgorICogQ29tbW9uIHNldCBvZiBmbGFncyBmb3IgYWxsIFJETUEgcmVsYXRlZCBzdHJ1Y3RzCisgKi8KKyNkZWZpbmUgUkRTX1JETUFfUkVBRFdSSVRFCTB4MDAwMQorI2RlZmluZSBSRFNfUkRNQV9GRU5DRQkJMHgwMDAyCS8qIHVzZSBGRU5DRSBmb3IgaW1tZWRpYXRlIHNlbmQgKi8KKyNkZWZpbmUgUkRTX1JETUFfSU5WQUxJREFURQkweDAwMDQJLyogaW52YWxpZGF0ZSBSX0tleSBhZnRlciBmcmVlaW5nIE1SICovCisjZGVmaW5lIFJEU19SRE1BX1VTRV9PTkNFCTB4MDAwOAkvKiBmcmVlIE1SIGFmdGVyIHVzZSAqLworI2RlZmluZSBSRFNfUkRNQV9ET05UV0FJVAkweDAwMTAJLyogRG9uJ3Qgd2FpdCBpbiBTRVRfQkFSUklFUiAqLworI2RlZmluZSBSRFNfUkRNQV9OT1RJRllfTUUJMHgwMDIwCS8qIE5vdGlmeSB3aGVuIG9wZXJhdGlvbiBjb21wbGV0ZXMgKi8KKworI2VuZGlmIC8qIElCX1JEU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggYmM1MTE0ZC4uZTM1NmM5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzX3NiLmg+CiAjZW5kaWYKIAotc3RydWN0IGZpZDsKLQogLyoKICAqICBpbmNsdWRlL2xpbnV4L3JlaXNlcl9mcy5oCiAgKgpAQCAtMzcsNiArMzUsMzMgQEAKICAqCiAgKi8KIAorLyogaW9jdGwncyBjb21tYW5kICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19VTlBBQ0sJCV9JT1coMHhDRCwxLGxvbmcpCisvKiBkZWZpbmUgZm9sbG93aW5nIGZsYWdzIHRvIGJlIHRoZSBzYW1lIGFzIGluIGV4dDIsIHNvIHRoYXQgY2hhdHRyKDEpLAorICAgbHNhdHRyKDEpIHdpbGwgd29yayB3aXRoIHVzLiAqLworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfU0VURkxBR1MJCUZTX0lPQ19TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT04JCUZTX0lPQ19TRVRWRVJTSU9OCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiB0aGUgMzIgYml0IGNvbXBhdCBkZWZpbml0aW9ucyB3aXRoIGludCBhcmd1bWVudCAqLworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9VTlBBQ0sJCV9JT1coMHhDRCwgMSwgaW50KQorI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRGTEFHUwkJRlNfSU9DMzJfR0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VURkxBR1MJCUZTX0lPQzMyX1NFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVFZFUlNJT04JRlNfSU9DMzJfR0VUVkVSU0lPTgorI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRWRVJTSU9OCUZTX0lPQzMyX1NFVFZFUlNJT04KKworLyogTG9ja2luZyBwcmltaXRpdmVzICovCisvKiBSaWdodCBub3cgd2UgYXJlIHN0aWxsIGZhbGxpbmcgYmFjayB0byAodW4pbG9ja19rZXJuZWwsIGJ1dCBldmVudHVhbGx5IHRoYXQKKyAgIHdvdWxkIGV2b2x2ZSBpbnRvIHJlYWwgcGVyLWZzIGxvY2tzICovCisjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQorI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCisKKy8qIHhhdHRyIHN0dWZmICovCisjZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQorc3RydWN0IGZpZDsKKwogLyogaW4gcmVhZGluZyB0aGUgI2RlZmluZXMsIGl0IG1heSBoZWxwIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGV5IGVtcGxveQogICAgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zOgogCkBAIC02OTgsNiArNzIzLDcgQEAKIC8qIG9iamVjdCBpZGVudGlmaWVyIGZvciByb290IGRpciAqLwogI2RlZmluZSBSRUlTRVJGU19ST09UX09CSkVDVElEIDIKICNkZWZpbmUgUkVJU0VSRlNfUk9PVF9QQVJFTlRfT0JKRUNUSUQgMQorCiBleHRlcm4gc3RydWN0IHJlaXNlcmZzX2tleSByb290X2tleTsKIAogLyogCkBAIC0xNTQwLDcgKzE1NjYsNiBAQAogLyogICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qI2lmZGVmIF9fS0VSTkVMX18qLwogI2RlZmluZSBnZXRfam91cm5hbF9kZXNjX21hZ2ljKGJoKSAoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUgLSAxMikKIAogI2RlZmluZSBqb3VybmFsX3RyYW5zX2hhbGYoYmxvY2tzaXplKSBcCkBAIC0yMTc4LDI5ICsyMjAzLDYgQEAKIAkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogaW50IHJlaXNlcmZzX3VucGFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKLS8qIGlvY3RsJ3MgY29tbWFuZCAqLwotI2RlZmluZSBSRUlTRVJGU19JT0NfVU5QQUNLCQlfSU9XKDB4Q0QsMSxsb25nKQotLyogZGVmaW5lIGZvbGxvd2luZyBmbGFncyB0byBiZSB0aGUgc2FtZSBhcyBpbiBleHQyLCBzbyB0aGF0IGNoYXR0cigxKSwKLSAgIGxzYXR0cigxKSB3aWxsIHdvcmsgd2l0aCB1cy4gKi8KLSNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVEZMQUdTCQlGU19JT0NfR0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVEZMQUdTCQlGU19JT0NfU0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVFZFUlNJT04JCUZTX0lPQ19HRVRWRVJTSU9OCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRWRVJTSU9OCQlGU19JT0NfU0VUVkVSU0lPTgogCi0vKiB0aGUgMzIgYml0IGNvbXBhdCBkZWZpbml0aW9ucyB3aXRoIGludCBhcmd1bWVudCAqLwotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9VTlBBQ0sJCV9JT1coMHhDRCwgMSwgaW50KQotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRGTEFHUwkJRlNfSU9DMzJfR0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VURkxBR1MJCUZTX0lPQzMyX1NFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVFZFUlNJT04JRlNfSU9DMzJfR0VUVkVSU0lPTgotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRWRVJTSU9OCUZTX0lPQzMyX1NFVFZFUlNJT04KLQotLyogTG9ja2luZyBwcmltaXRpdmVzICovCi0vKiBSaWdodCBub3cgd2UgYXJlIHN0aWxsIGZhbGxpbmcgYmFjayB0byAodW4pbG9ja19rZXJuZWwsIGJ1dCBldmVudHVhbGx5IHRoYXQKLSAgIHdvdWxkIGV2b2x2ZSBpbnRvIHJlYWwgcGVyLWZzIGxvY2tzICovCi0jZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQotI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCi0KLS8qIHhhdHRyIHN0dWZmICovCi0jZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQotCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCQkJCS8qIF9MSU5VWF9SRUlTRVJfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMWU1ZjY3My4uYmEzMjU0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0yMTcsNiArMjE3LDcgQEAKICNkZWZpbmUgUlRQUk9UX0ROUk9VVEVECTEzCS8qIERFQ25ldCByb3V0aW5nIGRhZW1vbiAqLwogI2RlZmluZSBSVFBST1RfWE9SUAkxNAkvKiBYT1JQICovCiAjZGVmaW5lIFJUUFJPVF9OVEsJMTUJLyogTmV0c3VrdWt1ICovCisjZGVmaW5lIFJUUFJPVF9ESENQCTE2ICAgICAgLyogREhDUCBjbGllbnQgKi8KIAogLyogcnRtX3Njb3BlCiAKQEAgLTYyMiw4ICs2MjMsOCBAQAogCiBleHRlcm4gaW50IHJ0bmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZWNobyk7CiBleHRlcm4gaW50IHJ0bmxfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQpOwotZXh0ZXJuIGludCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwKLQkJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncyk7CitleHRlcm4gdm9pZCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsCisJCQl1MzIgZ3JvdXAsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncyk7CiBleHRlcm4gdm9pZCBydG5sX3NldF9za19lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgZ3JvdXAsIGludCBlcnJvcik7CiBleHRlcm4gaW50IHJ0bmV0bGlua19wdXRfbWV0cmljcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKm1ldHJpY3MpOwogZXh0ZXJuIGludCBydG5sX3B1dF9jYWNoZWluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhjMjE2ZTAuLjFkMTljMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTk5OCw2ICs5OTgsNyBAQAogCQkJICAgICAgc3RydWN0IHJxICpidXNpZXN0LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKIAkJCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKTsKIAl2b2lkICgqcHJlX3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCWludCAoKm5lZWRzX3Bvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCpwb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKIAl2b2lkICgqdGFza193YWtlX3VwKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCkBAIC0xMDUyLDYgKzEwNTMsMTAgQEAKIAl1NjQJCQlsYXN0X3dha2V1cDsKIAl1NjQJCQlhdmdfb3ZlcmxhcDsKIAorCXU2NAkJCXN0YXJ0X3J1bnRpbWU7CisJdTY0CQkJYXZnX3dha2V1cDsKKwl1NjQJCQlucl9taWdyYXRpb25zOworCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAl1NjQJCQl3YWl0X3N0YXJ0OwogCXU2NAkJCXdhaXRfbWF4OwpAQCAtMTA2Nyw3ICsxMDcyLDYgQEAKIAl1NjQJCQlleGVjX21heDsKIAl1NjQJCQlzbGljZV9tYXg7CiAKLQl1NjQJCQlucl9taWdyYXRpb25zOwogCXU2NAkJCW5yX21pZ3JhdGlvbnNfY29sZDsKIAl1NjQJCQlucl9mYWlsZWRfbWlncmF0aW9uc19hZmZpbmU7CiAJdTY0CQkJbnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZzsKQEAgLTExNjQsNiArMTE2OCw3IEBACiAjZW5kaWYKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGFza3M7CisJc3RydWN0IHBsaXN0X25vZGUgcHVzaGFibGVfdGFza3M7CiAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKmFjdGl2ZV9tbTsKIApAQCAtMTE3NSwxMyArMTE4MCwxNCBAQAogCS8qID8/PyAqLwogCXVuc2lnbmVkIGludCBwZXJzb25hbGl0eTsKIAl1bnNpZ25lZCBkaWRfZXhlYzoxOworCXVuc2lnbmVkIGluX2V4ZWN2ZToxOwkvKiBUZWxsIHRoZSBMU01zIHRoYXQgdGhlIHByb2Nlc3MgaXMgZG9pbmcgYW4KKwkJCQkgKiBleGVjdmUgKi8KIAlwaWRfdCBwaWQ7CiAJcGlkX3QgdGdpZDsKIAotI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgogCS8qIENhbmFyeSB2YWx1ZSBmb3IgdGhlIC1mc3RhY2stcHJvdGVjdG9yIGdjYyBmZWF0dXJlICovCiAJdW5zaWduZWQgbG9uZyBzdGFja19jYW5hcnk7Ci0jZW5kaWYKKwogCS8qIAogCSAqIHBvaW50ZXJzIHRvIChvcmlnaW5hbCkgcGFyZW50IHByb2Nlc3MsIHlvdW5nZXN0IGNoaWxkLCB5b3VuZ2VyIHNpYmxpbmcsCiAJICogb2xkZXIgc2libGluZywgcmVzcGVjdGl2ZWx5LiAgKHAtPmZhdGhlciBjYW4gYmUgcmVwbGFjZWQgd2l0aCAKQEAgLTE0MTksNiArMTQyNSw5IEBACiAjZW5kaWYKIH07CiAKKy8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgdGFza19zdHJ1Y3QncyBjcHVzX2FsbG93ZWQuICovCisjZGVmaW5lIHRza19jcHVtYXNrKHRzaykgKCYodHNrKS0+Y3B1c19hbGxvd2VkKQorCiAvKgogICogUHJpb3JpdHkgb2YgYSBwcm9jZXNzIGdvZXMgZnJvbSAwLi5NQVhfUFJJTy0xLCB2YWxpZCBSVAogICogcHJpb3JpdHkgaXMgMC4uTUFYX1JUX1BSSU8tMSwgYW5kIFNDSEVEX05PUk1BTC9TQ0hFRF9CQVRDSApAQCAtMTY3MCw2ICsxNjc5LDE2IEBACiAJcmV0dXJuIHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsICZuZXdfbWFzayk7CiB9CiAKKy8qCisgKiBBcmNoaXRlY3R1cmVzIGNhbiBzZXQgdGhpcyB0byAxIGlmIHRoZXkgaGF2ZSBzcGVjaWZpZWQKKyAqIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLIGluIHRoZWlyIGFyY2ggS2NvbmZpZywKKyAqIGJ1dCB0aGVuIGR1cmluZyBib290dXAgaXQgdHVybnMgb3V0IHRoYXQgc2NoZWRfY2xvY2soKQorICogaXMgcmVsaWFibGUgYWZ0ZXIgYWxsOgorICovCisjaWZkZWYgQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKK2V4dGVybiBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOworI2VuZGlmCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCk7CiAKIGV4dGVybiB2b2lkIHNjaGVkX2Nsb2NrX2luaXQodm9pZCk7CkBAIC0yMDg3LDYgKzIxMDYsMTkgQEAKIAogZXh0ZXJuIHZvaWQgdGhyZWFkX2luZm9fY2FjaGVfaW5pdCh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN0YWNrX25vdF91c2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nICpuID0gZW5kX29mX3N0YWNrKHApOworCisJZG8geyAJLyogU2tpcCBvdmVyIGNhbmFyeSAqLworCQluKys7CisJfSB3aGlsZSAoISpuKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZyluIC0gKHVuc2lnbmVkIGxvbmcpZW5kX29mX3N0YWNrKHApOworfQorI2VuZGlmCisKIC8qIHNldCB0aHJlYWQgZmxhZ3MgaW4gb3RoZXIgdGFzaydzIHN0cnVjdHVyZXMKICAqIC0gc2VlIGFzbS90aHJlYWRfaW5mby5oIGZvciBUSUZfeHh4eCBmbGFncyBhdmFpbGFibGUKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L3NjdHAuaAppbmRleCA4YmExYzMyLi5jMjczMWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjdHAuaApAQCAtNjAsNyArNjAsNyBAQAogCV9fYmUxNiBzb3VyY2U7CiAJX19iZTE2IGRlc3Q7CiAJX19iZTMyIHZ0YWc7Ci0JX19iZTMyIGNoZWNrc3VtOworCV9fbGUzMiBjaGVja3N1bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zY3RwaGRyX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC0xNzIsMzUgKzE3MiwzNSBAQAogdHlwZWRlZiBlbnVtIHsKIAogCS8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjUgKi8KLQlTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPCQk9IF9fY29uc3RhbnRfaHRvbnMoMSksCisJU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTwkJPSBjcHVfdG9fYmUxNigxKSwKIAkvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4yLjEgKi8KLQlTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUwkJCT0gX19jb25zdGFudF9odG9ucyg1KSwKLQlTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUwkJCT0gX19jb25zdGFudF9odG9ucyg2KSwKLQlTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRQkJCT0gX19jb25zdGFudF9odG9ucyg3KSwKLQlTQ1RQX1BBUkFNX1VOUkVDT0dOSVpFRF9QQVJBTUVURVJTCT0gX19jb25zdGFudF9odG9ucyg4KSwKLQlTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkUJCT0gX19jb25zdGFudF9odG9ucyg5KSwKLQlTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTCQk9IF9fY29uc3RhbnRfaHRvbnMoMTEpLAotCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMJPSBfX2NvbnN0YW50X2h0b25zKDEyKSwKLQlTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMCksCisJU0NUUF9QQVJBTV9JUFY0X0FERFJFU1MJCQk9IGNwdV90b19iZTE2KDUpLAorCVNDVFBfUEFSQU1fSVBWNl9BRERSRVNTCQkJPSBjcHVfdG9fYmUxNig2KSwKKwlTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRQkJCT0gY3B1X3RvX2JlMTYoNyksCisJU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUwk9IGNwdV90b19iZTE2KDgpLAorCVNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRQkJPSBjcHVfdG9fYmUxNig5KSwKKwlTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTCQk9IGNwdV90b19iZTE2KDExKSwKKwlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTCT0gY3B1X3RvX2JlMTYoMTIpLAorCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUJCQk9IGNwdV90b19iZTE2KDB4ODAwMCksCiAKIAkvKiBBVVRIIEV4dGVuc2lvbiBTZWN0aW9uIDMgKi8KLQlTQ1RQX1BBUkFNX1JBTkRPTQkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDIpLAotCVNDVFBfUEFSQU1fQ0hVTktTCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMyksCi0JU0NUUF9QQVJBTV9ITUFDX0FMR08JCQk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDA0KSwKKwlTQ1RQX1BBUkFNX1JBTkRPTQkJCT0gY3B1X3RvX2JlMTYoMHg4MDAyKSwKKwlTQ1RQX1BBUkFNX0NIVU5LUwkJCT0gY3B1X3RvX2JlMTYoMHg4MDAzKSwKKwlTQ1RQX1BBUkFNX0hNQUNfQUxHTwkJCT0gY3B1X3RvX2JlMTYoMHg4MDA0KSwKIAogCS8qIEFkZC1JUDogU3VwcG9ydGVkIEV4dGVuc2lvbnMsIFNlY3Rpb24gNC4yICovCi0JU0NUUF9QQVJBTV9TVVBQT1JURURfRVhUCT0gX19jb25zdGFudF9odG9ucygweDgwMDgpLAorCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVAk9IGNwdV90b19iZTE2KDB4ODAwOCksCiAKIAkvKiBQUi1TQ1RQIFNlYyAzLjEgKi8KLQlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVAk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAwKSwKKwlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVAk9IGNwdV90b19iZTE2KDB4YzAwMCksCiAKIAkvKiBBZGQtSVAgRXh0ZW5zaW9uLiBTZWN0aW9uIDMuMiAqLwotCVNDVFBfUEFSQU1fQUREX0lQCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAxKSwKLQlTQ1RQX1BBUkFNX0RFTF9JUAkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMiksCi0JU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gX19jb25zdGFudF9odG9ucygweGMwMDMpLAotCVNDVFBfUEFSQU1fU0VUX1BSSU1BUlkJCT0gX19jb25zdGFudF9odG9ucygweGMwMDQpLAotCVNDVFBfUEFSQU1fU1VDQ0VTU19SRVBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNSksCi0JU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORCA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA2KSwKKwlTQ1RQX1BBUkFNX0FERF9JUAkJPSBjcHVfdG9fYmUxNigweGMwMDEpLAorCVNDVFBfUEFSQU1fREVMX0lQCQk9IGNwdV90b19iZTE2KDB4YzAwMiksCisJU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gY3B1X3RvX2JlMTYoMHhjMDAzKSwKKwlTQ1RQX1BBUkFNX1NFVF9QUklNQVJZCQk9IGNwdV90b19iZTE2KDB4YzAwNCksCisJU0NUUF9QQVJBTV9TVUNDRVNTX1JFUE9SVAk9IGNwdV90b19iZTE2KDB4YzAwNSksCisJU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORCA9IGNwdV90b19iZTE2KDB4YzAwNiksCiAKIH0gc2N0cF9wYXJhbV90OyAvKiBlbnVtICovCiAKQEAgLTIxMiwxMyArMjEyLDEzIEBACiAgKgogICovCiB0eXBlZGVmIGVudW0gewotCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkQgICAgID0gX19jb25zdGFudF9odG9ucygweDAwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkRfRVJSID0gX19jb25zdGFudF9odG9ucygweDQwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDgwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVBfRVJSICAgID0gX19jb25zdGFudF9odG9ucygweGMwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkQgICAgID0gY3B1X3RvX2JlMTYoMHgwMDAwKSwKKwlTQ1RQX1BBUkFNX0FDVElPTl9ESVNDQVJEX0VSUiA9IGNwdV90b19iZTE2KDB4NDAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fU0tJUCAgICAgICAgPSBjcHVfdG9fYmUxNigweDgwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVBfRVJSICAgID0gY3B1X3RvX2JlMTYoMHhjMDAwKSwKIH0gc2N0cF9wYXJhbV9hY3Rpb25fdDsKIAotZW51bSB7IFNDVFBfUEFSQU1fQUNUSU9OX01BU0sgPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksIH07CitlbnVtIHsgU0NUUF9QQVJBTV9BQ1RJT05fTUFTSyA9IGNwdV90b19iZTE2KDB4YzAwMCksIH07CiAKIC8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjEgUGF5bG9hZCBEYXRhIChEQVRBKSAoMCkgKi8KIApAQCAtNDU3LDE3ICs0NTcsMTcgQEAKICAqLwogdHlwZWRlZiBlbnVtIHsKIAotCVNDVFBfRVJST1JfTk9fRVJST1IJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDApLAotCVNDVFBfRVJST1JfSU5WX1NUUk0JICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDEpLAotCVNDVFBfRVJST1JfTUlTU19QQVJBTSAJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDIpLAotCVNDVFBfRVJST1JfU1RBTEVfQ09PS0lFCSAgID0gX19jb25zdGFudF9odG9ucygweDAzKSwKLQlTQ1RQX0VSUk9SX05PX1JFU09VUkNFIAkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNCksCi0JU0NUUF9FUlJPUl9ETlNfRkFJTEVEICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDUpLAotCVNDVFBfRVJST1JfVU5LTk9XTl9DSFVOSyAgID0gX19jb25zdGFudF9odG9ucygweDA2KSwKLQlTQ1RQX0VSUk9SX0lOVl9QQVJBTSAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNyksCi0JU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDgpLAotCVNDVFBfRVJST1JfTk9fREFUQSAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDA5KSwKLQlTQ1RQX0VSUk9SX0NPT0tJRV9JTl9TSFVURE9XTiA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYSksCisJU0NUUF9FUlJPUl9OT19FUlJPUgkgICA9IGNwdV90b19iZTE2KDB4MDApLAorCVNDVFBfRVJST1JfSU5WX1NUUk0JICAgPSBjcHVfdG9fYmUxNigweDAxKSwKKwlTQ1RQX0VSUk9SX01JU1NfUEFSQU0gCSAgID0gY3B1X3RvX2JlMTYoMHgwMiksCisJU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUJICAgPSBjcHVfdG9fYmUxNigweDAzKSwKKwlTQ1RQX0VSUk9SX05PX1JFU09VUkNFIAkgICA9IGNwdV90b19iZTE2KDB4MDQpLAorCVNDVFBfRVJST1JfRE5TX0ZBSUxFRCAgICAgID0gY3B1X3RvX2JlMTYoMHgwNSksCisJU0NUUF9FUlJPUl9VTktOT1dOX0NIVU5LICAgPSBjcHVfdG9fYmUxNigweDA2KSwKKwlTQ1RQX0VSUk9SX0lOVl9QQVJBTSAgICAgICA9IGNwdV90b19iZTE2KDB4MDcpLAorCVNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTSAgID0gY3B1X3RvX2JlMTYoMHgwOCksCisJU0NUUF9FUlJPUl9OT19EQVRBICAgICAgICAgPSBjcHVfdG9fYmUxNigweDA5KSwKKwlTQ1RQX0VSUk9SX0NPT0tJRV9JTl9TSFVURE9XTiA9IGNwdV90b19iZTE2KDB4MGEpLAogCiAKIAkvKiBTQ1RQIEltcGxlbWVudGF0aW9uIEd1aWRlOgpAQCAtNDc2LDkgKzQ3Niw5IEBACiAJICogIDEzICBQcm90b2NvbCBWaW9sYXRpb24KIAkgKi8KIAotCVNDVFBfRVJST1JfUkVTVEFSVCAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDBiKSwKLQlTQ1RQX0VSUk9SX1VTRVJfQUJPUlQgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYyksCi0JU0NUUF9FUlJPUl9QUk9UT19WSU9MQVRJT04gPSBfX2NvbnN0YW50X2h0b25zKDB4MGQpLAorCVNDVFBfRVJST1JfUkVTVEFSVCAgICAgICAgID0gY3B1X3RvX2JlMTYoMHgwYiksCisJU0NUUF9FUlJPUl9VU0VSX0FCT1JUICAgICAgPSBjcHVfdG9fYmUxNigweDBjKSwKKwlTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTiA9IGNwdV90b19iZTE2KDB4MGQpLAogCiAJLyogQURESVAgU2VjdGlvbiAzLjMgIE5ldyBFcnJvciBDYXVzZXMKIAkgKgpAQCAtNDkzLDExICs0OTMsMTEgQEAKIAkgKiAweDAxMDMgICAgICAgICAgQXNzb2NpYXRpb24gQWJvcnRlZCBkdWUgdG8gaWxsZWdhbCBBU0NPTkYtQUNLCiAJICogMHgwMTA0ICAgICAgICAgIFJlcXVlc3QgcmVmdXNlZCAtIG5vIGF1dGhvcml6YXRpb24uCiAJICovCi0JU0NUUF9FUlJPUl9ERUxfTEFTVF9JUAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAwKSwKLQlTQ1RQX0VSUk9SX1JTUkNfTE9XCT0gX19jb25zdGFudF9odG9ucygweDAxMDEpLAotCVNDVFBfRVJST1JfREVMX1NSQ19JUAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAyKSwKLQlTQ1RQX0VSUk9SX0FTQ09ORl9BQ0sgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAzKSwKLQlTQ1RQX0VSUk9SX1JFUV9SRUZVU0VECT0gX19jb25zdGFudF9odG9ucygweDAxMDQpLAorCVNDVFBfRVJST1JfREVMX0xBU1RfSVAJPSBjcHVfdG9fYmUxNigweDAxMDApLAorCVNDVFBfRVJST1JfUlNSQ19MT1cJPSBjcHVfdG9fYmUxNigweDAxMDEpLAorCVNDVFBfRVJST1JfREVMX1NSQ19JUAk9IGNwdV90b19iZTE2KDB4MDEwMiksCisJU0NUUF9FUlJPUl9BU0NPTkZfQUNLICAgPSBjcHVfdG9fYmUxNigweDAxMDMpLAorCVNDVFBfRVJST1JfUkVRX1JFRlVTRUQJPSBjcHVfdG9fYmUxNigweDAxMDQpLAogCiAJLyogQVVUSCBTZWN0aW9uIDQuICBOZXcgRXJyb3IgQ2F1c2UKIAkgKgpAQCAtNTA5LDcgKzUwOSw3IEBACiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiAweDAxMDUgICAgICAgICAgVW5zdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVyCiAJICovCi0JIFNDVFBfRVJST1JfVU5TVVBfSE1BQwk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQorCSBTQ1RQX0VSUk9SX1VOU1VQX0hNQUMJPSBjcHVfdG9fYmUxNigweDAxMDUpCiB9IHNjdHBfZXJyb3JfdDsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaAppbmRleCBiYmY0ODlkLi5kMjM5Nzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKQEAgLTEyLDYgKzEyLDggQEAKICNpZm5kZWYgX0xJTlVYX1NFTElOVVhfTkVUTElOS19ICiAjZGVmaW5lIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogTWVzc2FnZSB0eXBlcy4gKi8KICNkZWZpbmUgU0VMTkxfTVNHX0JBU0UgMHgxMAogZW51bSB7CkBAIC0zOCwxMSArNDAsMTEgQEAKIAogLyogTWVzc2FnZSBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3Qgc2VsbmxfbXNnX3NldGVuZm9yY2UgewotCWludDMyX3QJCXZhbDsKKwlfX3MzMgkJdmFsOwogfTsKIAogc3RydWN0IHNlbG5sX21zZ19wb2xpY3lsb2FkIHsKLQl1X2ludDMyX3QJc2Vxbm87CisJX191MzIJc2Vxbm87CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oIGIvaW5jbHVkZS9saW51eC9zaF9jbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaF9jbXQuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fU0hfQ01UX0hfXworI2RlZmluZSBfX1NIX0NNVF9IX18KKworc3RydWN0IHNoX2NtdF9jb25maWcgeworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBjaGFubmVsX29mZnNldDsKKwlpbnQgdGltZXJfYml0OworCWNoYXIgKmNsazsKKwl1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfcmF0aW5nOworCXVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nOworfTsKKworI2VuZGlmIC8qIF9fU0hfQ01UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmggYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAppbmRleCA2OGUyMTJmLi5lYjE0MjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtODUsNiArODUsNyBAQAogfQogI2VuZGlmCiAKK3Vuc2lnbmVkIGludCBpbnRjX2V2dDJpcnEodW5zaWduZWQgaW50IHZlY3Rvcik7CiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYyk7CiBpbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA5ZGNmOTU2Li41NWQ2NzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAKLSNkZWZpbmUgSEFWRV9BTExPQ19TS0IJCS8qIEZvciB0aGUgZHJpdmVycyB0byBrbm93ICovCi0jZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQgkvKiBEaXR0byA4KQkJICAgKi8KLQogLyogRG9uJ3QgY2hhbmdlIHRoaXMgd2l0aG91dCBjaGFuZ2luZyBza2JfY3N1bV91bm5lY2Vzc2FyeSEgKi8KICNkZWZpbmUgQ0hFQ0tTVU1fTk9ORSAwCiAjZGVmaW5lIENIRUNLU1VNX1VOTkVDRVNTQVJZIDEKQEAgLTEzNSw2ICsxMzIsNTUgQEAKIAlfX3UzMiBzaXplOwogfTsKIAorI2RlZmluZSBIQVZFX0hXX1RJTUVfU1RBTVAKKworLyoqCisgKiBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgLSBoYXJkd2FyZSB0aW1lIHN0YW1wcworICogQGh3dHN0YW1wOgloYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIGludG8gZHVyYXRpb24KKyAqCQlzaW5jZSBhcmJpdHJhcnkgcG9pbnQgaW4gdGltZQorICogQHN5c3RzdGFtcDoJaHd0c3RhbXAgdHJhbnNmb3JtZWQgdG8gc3lzdGVtIHRpbWUgYmFzZQorICoKKyAqIFNvZnR3YXJlIHRpbWUgc3RhbXBzIGdlbmVyYXRlZCBieSBrdGltZV9nZXRfcmVhbCgpIGFyZSBzdG9yZWQgaW4KKyAqIHNrYi0+dHN0YW1wLiBUaGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IGtpbmRzIG9mIHRpbWUKKyAqIHN0YW1wcyBpcyBhcyBmb2xsb3dzOgorICoKKyAqIHN5c3RzdGFtcCBhbmQgdHN0YW1wIGNhbiBiZSBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggb3RoZXIgaW4KKyAqIGFyYml0cmFyeSBjb21iaW5hdGlvbnMuICBUaGUgYWNjdXJhY3kgb2YgYQorICogc3lzdHN0YW1wL3RzdGFtcC8ic3lzdHN0YW1wIGZyb20gb3RoZXIgZGV2aWNlIiBjb21wYXJpc29uIGlzCisgKiBsaW1pdGVkIGJ5IHRoZSBhY2N1cmFjeSBvZiB0aGUgdHJhbnNmb3JtYXRpb24gaW50byBzeXN0ZW0gdGltZQorICogYmFzZS4gVGhpcyBkZXBlbmRzIG9uIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCBpdHMgdW5kZXJseWluZworICogaGFyZHdhcmUuCisgKgorICogaHd0c3RhbXBzIGNhbiBvbmx5IGJlIGNvbXBhcmVkIGFnYWluc3Qgb3RoZXIgaHd0c3RhbXBzIGZyb20KKyAqIHRoZSBzYW1lIGRldmljZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCisgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX2h3dHN0YW1wcygpIHRvIGdldCBhIHBvaW50ZXIuCisgKi8KK3N0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyB7CisJa3RpbWVfdAlod3RzdGFtcDsKKwlrdGltZV90CXN5c3RzdGFtcDsKK307CisKKy8qKgorICogc3RydWN0IHNrYl9zaGFyZWRfdHggLSBpbnN0cnVjdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcgb2Ygb3V0Z29pbmcgcGFja2V0cworICogQGhhcmR3YXJlOgkJZ2VuZXJhdGUgaGFyZHdhcmUgdGltZSBzdGFtcAorICogQHNvZnR3YXJlOgkJZ2VuZXJhdGUgc29mdHdhcmUgdGltZSBzdGFtcAorICogQGluX3Byb2dyZXNzOglkZXZpY2UgZHJpdmVyIGlzIGdvaW5nIHRvIHByb3ZpZGUKKyAqCQkJaGFyZHdhcmUgdGltZSBzdGFtcAorICoKKyAqIFRoZXNlIGZsYWdzIGFyZSBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCisgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX3R4KCkgdG8gZ2V0IGEgcG9pbnRlci4KKyAqLwordW5pb24gc2tiX3NoYXJlZF90eCB7CisJc3RydWN0IHsKKwkJX191OAloYXJkd2FyZToxLAorCQkJc29mdHdhcmU6MSwKKwkJCWluX3Byb2dyZXNzOjE7CisJfTsKKwlfX3U4IGZsYWdzOworfTsKKwogLyogVGhpcyBkYXRhIGlzIGludmFyaWFudCBhY3Jvc3MgY2xvbmVzIGFuZCBsaXZlcyBhdAogICogdGhlIGVuZCBvZiB0aGUgaGVhZGVyIGRhdGEsIGllLiBhdCBza2ItPmVuZC4KICAqLwpAQCAtMTQ2LDEwICsxOTIsMTIgQEAKIAl1bnNpZ25lZCBzaG9ydAlnc29fc2VnczsKIAl1bnNpZ25lZCBzaG9ydCAgZ3NvX3R5cGU7CiAJX19iZTMyICAgICAgICAgIGlwNl9mcmFnX2lkOworCXVuaW9uIHNrYl9zaGFyZWRfdHggdHhfZmxhZ3M7CiAjaWZkZWYgQ09ORklHX0hBU19ETUEKIAl1bnNpZ25lZCBpbnQJbnVtX2RtYV9tYXBzOwogI2VuZGlmCiAJc3RydWN0IHNrX2J1ZmYJKmZyYWdfbGlzdDsKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgaHd0c3RhbXBzOwogCXNrYl9mcmFnX3QJZnJhZ3NbTUFYX1NLQl9GUkFHU107CiAjaWZkZWYgQ09ORklHX0hBU19ETUEKIAlkbWFfYWRkcl90CWRtYV9tYXBzW01BWF9TS0JfRlJBR1MgKyAxXTsKQEAgLTE4OCw2ICsyMzYsOCBAQAogCVNLQl9HU09fVENQX0VDTiA9IDEgPDwgMywKIAogCVNLQl9HU09fVENQVjYgPSAxIDw8IDQsCisKKwlTS0JfR1NPX0ZDT0UgPSAxIDw8IDUsCiB9OwogCiAjaWYgQklUU19QRVJfTE9ORyA+IDMyCkBAIC0zNzMsNiArNDIzLDcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBjb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCSAgICAgICBfX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsCiAJCQkJICAgZ2ZwX3QgcHJpb3JpdHksIGludCBmY2xvbmUsIGludCBub2RlKTsKQEAgLTQxMSw3ICs0NjIsOCBAQAogZXh0ZXJuIGludAkgICAgICAgc2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKip0cmFpbGVyKTsKIGV4dGVybiBpbnQJICAgICAgIHNrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCk7Ci0jZGVmaW5lIGRldl9rZnJlZV9za2IoYSkJa2ZyZWVfc2tiKGEpCisjZGVmaW5lIGRldl9rZnJlZV9za2IoYSkJY29uc3VtZV9za2IoYSkKKyNkZWZpbmUgZGV2X2NvbnN1bWVfc2tiKGEpCWtmcmVlX3NrYl9jbGVhbihhKQogZXh0ZXJuIHZvaWQJICAgICAgc2tiX292ZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwKIAkJCQkgICAgIHZvaWQgKmhlcmUpOwogZXh0ZXJuIHZvaWQJICAgICAgc2tiX3VuZGVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCkBAIC00NTksNiArNTExLDE2IEBACiAvKiBJbnRlcm5hbCAqLwogI2RlZmluZSBza2Jfc2hpbmZvKFNLQikJKChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKHNrYl9lbmRfcG9pbnRlcihTS0IpKSkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gJnNrYl9zaGluZm8oc2tiKS0+aHd0c3RhbXBzOworfQorCitzdGF0aWMgaW5saW5lIHVuaW9uIHNrYl9zaGFyZWRfdHggKnNrYl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAmc2tiX3NoaW5mbyhza2IpLT50eF9mbGFnczsKK30KKwogLyoqCiAgKglza2JfcXVldWVfZW1wdHkgLSBjaGVjayBpZiBhIHF1ZXVlIGlzIGVtcHR5CiAgKglAbGlzdDogcXVldWUgaGVhZApAQCAtMTI3OCw3ICsxMzQwLDcgQEAKICAqIFRoZSBuZXR3b3JraW5nIGxheWVyIHJlc2VydmVzIHNvbWUgaGVhZHJvb20gaW4gc2tiIGRhdGEgKHZpYQogICogZGV2X2FsbG9jX3NrYikuIFRoaXMgaXMgdXNlZCB0byBhdm9pZCBoYXZpbmcgdG8gcmVhbGxvY2F0ZSBza2IgZGF0YSB3aGVuCiAgKiB0aGUgaGVhZGVyIGhhcyB0byBncm93LiBJbiB0aGUgZGVmYXVsdCBjYXNlLCBpZiB0aGUgaGVhZGVyIGhhcyB0byBncm93Ci0gKiAxNiBieXRlcyBvciBsZXNzIHdlIGF2b2lkIHRoZSByZWFsbG9jYXRpb24uCisgKiAzMiBieXRlcyBvciBsZXNzIHdlIGF2b2lkIHRoZSByZWFsbG9jYXRpb24uCiAgKgogICogVW5mb3J0dW5hdGVseSB0aGlzIGhlYWRyb29tIGNoYW5nZXMgdGhlIERNQSBhbGlnbm1lbnQgb2YgdGhlIHJlc3VsdGluZwogICogbmV0d29yayBwYWNrZXQuIEFzIGZvciBORVRfSVBfQUxJR04sIHRoaXMgdW5hbGlnbmVkIERNQSBpcyBleHBlbnNpdmUKQEAgLTEyODYsMTEgKzEzNDgsMTEgQEAKICAqIHBlcmhhcHMgc2V0dGluZyBpdCB0byBhIGNhY2hlbGluZSBpbiBzaXplIChzaW5jZSB0aGF0IHdpbGwgbWFpbnRhaW4KICAqIGNhY2hlbGluZSBhbGlnbm1lbnQgb2YgdGhlIERNQSkuIEl0IG11c3QgYmUgYSBwb3dlciBvZiAyLgogICoKLSAqIFZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgZXhwZWN0IGF0IGxlYXN0IDE2IGJ5dGVzIG9mCisgKiBWYXJpb3VzIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIGxheWVyIGV4cGVjdCBhdCBsZWFzdCAzMiBieXRlcyBvZgogICogaGVhZHJvb20sIHlvdSBzaG91bGQgbm90IHJlZHVjZSB0aGlzLgogICovCiAjaWZuZGVmIE5FVF9TS0JfUEFECi0jZGVmaW5lIE5FVF9TS0JfUEFECTE2CisjZGVmaW5lIE5FVF9TS0JfUEFECTMyCiAjZW5kaWYKIAogZXh0ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CkBAIC0xNjc4LDggKzE3NDAsNiBAQAogCQkJCSBpbnQgc2hpZnRsZW4pOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7Ci1leHRlcm4gaW50CSAgICAgICBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogc3RhdGljIGlubGluZSB2b2lkICpza2JfaGVhZGVyX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAkJCQkgICAgICAgaW50IGxlbiwgdm9pZCAqYnVmZmVyKQpAQCAtMTcyNiw2ICsxNzg2LDExIEBACiAKIGV4dGVybiB2b2lkIHNrYl9pbml0KHZvaWQpOwogCitzdGF0aWMgaW5saW5lIGt0aW1lX3Qgc2tiX2dldF9rdGltZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPnRzdGFtcDsKK30KKwogLyoqCiAgKglza2JfZ2V0X3RpbWVzdGFtcCAtIGdldCB0aW1lc3RhbXAgZnJvbSBhIHNrYgogICoJQHNrYjogc2tiIHRvIGdldCBzdGFtcCBmcm9tCkBAIC0xNzM1LDExICsxODAwLDE4IEBACiAgKglUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBvZmZzZXQgYmFjayB0byBhIHN0cnVjdCB0aW1ldmFsIGFuZCBzdG9yZXMKICAqCWl0IGluIHN0YW1wLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dldF90aW1lc3RhbXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpbWV2YWwgKnN0YW1wKQorc3RhdGljIGlubGluZSB2b2lkIHNrYl9nZXRfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgdGltZXZhbCAqc3RhbXApCiB7CiAJKnN0YW1wID0ga3RpbWVfdG9fdGltZXZhbChza2ItPnRzdGFtcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ2V0X3RpbWVzdGFtcG5zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqc3RhbXApCit7CisJKnN0YW1wID0ga3RpbWVfdG9fdGltZXNwZWMoc2tiLT50c3RhbXApOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOwpAQCAtMTc1NSw2ICsxODI3LDIwIEBACiAJcmV0dXJuIGt0aW1lX3NldCgwLCAwKTsKIH0KIAorLyoqCisgKiBza2JfdHN0YW1wX3R4IC0gcXVldWUgY2xvbmUgb2Ygc2tiIHdpdGggc2VuZCB0aW1lIHN0YW1wcworICogQG9yaWdfc2tiOgl0aGUgb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0CisgKiBAaHd0c3RhbXBzOgloYXJkd2FyZSB0aW1lIHN0YW1wcywgbWF5IGJlIE5VTEwgaWYgbm90IGF2YWlsYWJsZQorICoKKyAqIElmIHRoZSBza2IgaGFzIGEgc29ja2V0IGFzc29jaWF0ZWQsIHRoZW4gdGhpcyBmdW5jdGlvbiBjbG9uZXMgdGhlCisgKiBza2IgKHRodXMgc2hhcmluZyB0aGUgYWN0dWFsIGRhdGEgYW5kIG9wdGlvbmFsIHN0cnVjdHVyZXMpLCBzdG9yZXMKKyAqIHRoZSBvcHRpb25hbCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGluZm9ybWF0aW9uIChpZiBub24gTlVMTCkgb3IKKyAqIGdlbmVyYXRlcyBhIHNvZnR3YXJlIHRpbWUgc3RhbXAgKG90aGVyd2lzZSksIHRoZW4gcXVldWVzIHRoZSBjbG9uZQorICogdG8gdGhlIGVycm9yIHF1ZXVlIG9mIHRoZSBzb2NrZXQuICBFcnJvcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuCisgKi8KK2V4dGVybiB2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAorCQkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpOworCiBleHRlcm4gX19zdW0xNiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwogZXh0ZXJuIF9fc3VtMTYgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTE4ODUsNyArMTk3MSw3IEBACiAJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcXVldWVfbWFwcGluZzsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nOwogfQpAQCAtMTg5NSw2ICsxOTgxLDI0IEBACiAJdG8tPnF1ZXVlX21hcHBpbmcgPSBmcm9tLT5xdWV1ZV9tYXBwaW5nOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3JlY29yZF9yeF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgcnhfcXVldWUpCit7CisJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcnhfcXVldWUgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3J4X3F1ZXVlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+cXVldWVfbWFwcGluZyAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfcnhfcXVldWVfcmVjb3JkZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHNrYi0+cXVldWVfbWFwcGluZyAhPSAwKTsKK30KKworZXh0ZXJuIHUxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKICNpZmRlZiBDT05GSUdfWEZSTQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKnNrYl9zZWNfcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCmluZGV4IDJmNWMxNmIuLmUzN2I2YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgewogCXNwaW5sb2NrX3QgbGlzdF9sb2NrOwkvKiBQcm90ZWN0IHBhcnRpYWwgbGlzdCBhbmQgbnJfcGFydGlhbCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfcGFydGlhbDsKLQl1bnNpZ25lZCBsb25nIG1pbl9wYXJ0aWFsOwogCXN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDsKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogCWF0b21pY19sb25nX3QgbnJfc2xhYnM7CkBAIC04OSw2ICs4OCw3IEBACiAJdm9pZCAoKmN0b3IpKHZvaWQgKik7CiAJaW50IGludXNlOwkJLyogT2Zmc2V0IHRvIG1ldGFkYXRhICovCiAJaW50IGFsaWduOwkJLyogQWxpZ25tZW50ICovCisJdW5zaWduZWQgbG9uZyBtaW5fcGFydGlhbDsKIAljb25zdCBjaGFyICpuYW1lOwkvKiBOYW1lIChvbmx5IGZvciBkaXNwbGF5ISkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIExpc3Qgb2Ygc2xhYiBjYWNoZXMgKi8KICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwpAQCAtMTIxLDEwICsxMjEsMjMgQEAKICNkZWZpbmUgS01BTExPQ19TSElGVF9MT1cgaWxvZzIoS01BTExPQ19NSU5fU0laRSkKIAogLyoKKyAqIE1heGltdW0ga21hbGxvYyBvYmplY3Qgc2l6ZSBoYW5kbGVkIGJ5IFNMVUIuIExhcmdlciBvYmplY3QgYWxsb2NhdGlvbnMKKyAqIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcGFnZSBhbGxvY2F0b3IuIFRoZSBwYWdlIGFsbG9jYXRvciAiZmFzdHBhdGgiCisgKiBpcyByZWxhdGl2ZWx5IHNsb3cgc28gd2UgbmVlZCB0aGlzIHZhbHVlIHN1ZmZpY2llbnRseSBoaWdoIHNvIHRoYXQKKyAqIHBlcmZvcm1hbmNlIGNyaXRpY2FsIG9iamVjdHMgYXJlIGFsbG9jYXRlZCB0aHJvdWdoIHRoZSBTTFVCIGZhc3RwYXRoLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGRyb3BwZWQgdG8gUEFHRV9TSVpFIC8gMiBvbmNlIHRoZSBwYWdlIGFsbG9jYXRvcgorICogImZhc3RwYXRoIiBiZWNvbWVzIGNvbXBldGl0aXZlIHdpdGggdGhlIHNsYWIgYWxsb2NhdG9yIGZhc3RwYXRocy4KKyAqLworI2RlZmluZSBTTFVCX01BWF9TSVpFICgyICogUEFHRV9TSVpFKQorCisjZGVmaW5lIFNMVUJfUEFHRV9TSElGVCAoUEFHRV9TSElGVCArIDIpCisKKy8qCiAgKiBXZSBrZWVwIHRoZSBnZW5lcmFsIGNhY2hlcyBpbiBhbiBhcnJheSBvZiBzbGFiIGNhY2hlcyB0aGF0IGFyZSB1c2VkIGZvcgogICogMl54IGJ5dGVzIG9mIGFsbG9jYXRpb25zLgogICovCi1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbUEFHRV9TSElGVCArIDFdOworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1NMVUJfUEFHRV9TSElGVF07CiAKIC8qCiAgKiBTb3JyeSB0aGF0IHRoZSBmb2xsb3dpbmcgaGFzIHRvIGJlIHRoYXQgdWdseSBidXQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MKQEAgLTIxMiw3ICsyMjUsNyBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKLQkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCWlmIChzaXplID4gU0xVQl9NQVhfU0laRSkKIAkJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKIAogCQlpZiAoIShmbGFncyAmIFNMVUJfRE1BKSkgewpAQCAtMjM0LDcgKzI0Nyw3IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJgotCQlzaXplIDw9IFBBR0VfU0laRSAmJiAhKGZsYWdzICYgU0xVQl9ETUEpKSB7CisJCXNpemUgPD0gU0xVQl9NQVhfU0laRSAmJiAhKGZsYWdzICYgU0xVQl9ETUEpKSB7CiAJCQlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IGttYWxsb2Nfc2xhYihzaXplKTsKIAogCQlpZiAoIXMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCA3MTUxOTZiLi5iYmFjYjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTE3Niw2ICsxNzYsMTIgQEAKICNkZWZpbmUgcHV0X2NwdSgpCQlwcmVlbXB0X2VuYWJsZSgpCiAjZGVmaW5lIHB1dF9jcHVfbm9fcmVzY2hlZCgpCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKQogCisvKgorICogQ2FsbGJhY2sgdG8gYXJjaCBjb2RlIGlmIHRoZXJlJ3Mgbm9zbXAgb3IgbWF4Y3B1cz0wIG9uIHRoZQorICogYm9vdCBjb21tYW5kIGxpbmU6CisgKi8KK2V4dGVybiB2b2lkIGFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCh2b2lkKTsKKwogdm9pZCBzbXBfc2V0dXBfcHJvY2Vzc29yX2lkKHZvaWQpOwogCiAjZW5kaWYgLyogX19MSU5VWF9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCmluZGV4IDFjYmYwMzEuLmIzMjcyNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKQEAgLTQzLDUgKzQzLDggQEAKIC8qIENvbnN0YW50cyBmb3IgZmxhZ3MgKi8KICNkZWZpbmUgU01TQzkxMVhfVVNFXzE2QklUIAkJCShCSVQoMCkpCiAjZGVmaW5lIFNNU0M5MTFYX1VTRV8zMkJJVCAJCQkoQklUKDEpKQorI2RlZmluZSBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkJCShCSVQoMikpCisjZGVmaW5lIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSAJCShCSVQoMykpCisjZGVmaW5lIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MJCShCSVQoNCkpCiAKICNlbmRpZiAvKiBfX0xJTlVYX1NNU0M5MTFYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMjBmYzRiYi4uNDIxYWZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogcGlkX3QJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CQkvKiBfX3VzZXIJCQkqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBleHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpOwotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXNhX2ZhbWlseV90OwogCkBAIC0xNzksNiArMTgxLDcgQEAKICNkZWZpbmUgQUZfQVNICQkxOAkvKiBBc2gJCQkJKi8KICNkZWZpbmUgQUZfRUNPTkVUCTE5CS8qIEFjb3JuIEVjb25ldAkJCSovCiAjZGVmaW5lIEFGX0FUTVNWQwkyMAkvKiBBVE0gU1ZDcwkJCSovCisjZGVmaW5lIEFGX1JEUwkJMjEJLyogUkRTIHNvY2tldHMgCQkJKi8KICNkZWZpbmUgQUZfU05BCQkyMgkvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCiAjZGVmaW5lIEFGX0lSREEJCTIzCS8qIElSREEgc29ja2V0cwkJCSovCiAjZGVmaW5lIEFGX1BQUE9YCTI0CS8qIFBQUG9YIHNvY2tldHMJCSovCkBAIC0yMTcsNiArMjIwLDcgQEAKICNkZWZpbmUgUEZfQVNICQlBRl9BU0gKICNkZWZpbmUgUEZfRUNPTkVUCUFGX0VDT05FVAogI2RlZmluZSBQRl9BVE1TVkMJQUZfQVRNU1ZDCisjZGVmaW5lIFBGX1JEUwkJQUZfUkRTCiAjZGVmaW5lIFBGX1NOQQkJQUZfU05BCiAjZGVmaW5lIFBGX0lSREEJCUFGX0lSREEKICNkZWZpbmUgUEZfUFBQT1gJQUZfUFBQT1gKQEAgLTI5OCw2ICszMDIsNyBAQAogI2RlZmluZSBTT0xfUFBQT0wyVFAJMjczCiAjZGVmaW5lIFNPTF9CTFVFVE9PVEgJMjc0CiAjZGVmaW5lIFNPTF9QTlBJUEUJMjc1CisjZGVmaW5lIFNPTF9SRFMJCTI3NgogCiAvKiBJUFggb3B0aW9ucyAqLwogI2RlZmluZSBJUFhfVFlQRQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCmluZGV4IGFiZWY3NTk2Li4yNDFmMTc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaApAQCAtMTIyLDYgKzEyMiw5IEBACiAjZGVmaW5lIFNJT0NCUkFERElGCTB4ODlhMgkJLyogYWRkIGludGVyZmFjZSB0byBicmlkZ2UgICAgICAqLwogI2RlZmluZSBTSU9DQlJERUxJRgkweDg5YTMJCS8qIHJlbW92ZSBpbnRlcmZhY2UgZnJvbSBicmlkZ2UgKi8KIAorLyogaGFyZHdhcmUgdGltZSBzdGFtcGluZzogcGFyYW1ldGVycyBpbiBsaW51eC9uZXRfdHN0YW1wLmggKi8KKyNkZWZpbmUgU0lPQ1NIV1RTVEFNUCAgIDB4ODliMAorCiAvKiBEZXZpY2UgcHJpdmF0ZSBpb2N0bCBjYWxscyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbGliZXJ0YXNfc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTUwNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvbGliZXJ0YXNfc3BpLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGJvYXJkLXNwZWNpZmljIGRhdGEgZm9yIHRoZSBsaWJlcnRhc19zcGkgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSUJFUlRBU19TUElfSF8KKyNkZWZpbmUgX0xJQkVSVEFTX1NQSV9IXworCitzdHJ1Y3Qgc3BpX2RldmljZTsKKworc3RydWN0IGxpYmVydGFzX3NwaV9wbGF0Zm9ybV9kYXRhIHsKKwkvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gcmVhZCBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlJ3MgU1BJCisJICogaW50ZXJmYWNlLiBTZXR0aW5nIDAgb3IgMSBoZXJlIGNvbnRyb2xzIHdoaWNoIG9uZSBpcyB1c2VkLgorCSAqCisJICogVXN1YWxseSB5b3Ugd2FudCB0byBzZXQgdXNlX2R1bW15X3dyaXRlcyA9IDEuCisJICogSG93ZXZlciwgaWYgdGhhdCBkb2Vzbid0IHdvcmsgb3IgaWYgeW91IGFyZSB1c2luZyBhIHNsb3cgU1BJIGNsb2NrCisJICogc3BlZWQsIHlvdSBtYXkgd2FudCB0byB1c2UgMCBoZXJlLiAqLworCXUxNiB1c2VfZHVtbXlfd3JpdGVzOworCisJLyogR1BJTyBudW1iZXIgdG8gdXNlIGFzIGNoaXAgc2VsZWN0ICovCisJdTE2IGdwaW9fY3M7CisKKwkvKiBCb2FyZCBzcGVjaWZpYyBzZXR1cC90ZWFyZG93biAqLworCWludCAoKnNldHVwKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKKwlpbnQgKCp0ZWFyZG93bikoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSk7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDE3ZDliNTguLjVhZThmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC0zMzksNiArMzM5LDEwIEBACiAKIGV4dGVybiB2b2lkIHNzYl9idXNfdW5yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKIAorLyogU2V0IGEgZmFsbGJhY2sgU1BST00uCisgKiBTZWUga2RvYyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbi4gKi8KK2V4dGVybiBpbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKTsKKwogLyogU3VzcGVuZCBhIFNTQiBidXMuCiAgKiBDYWxsIHRoaXMgZnJvbSB0aGUgcGFyZW50IGJ1cyBzdXNwZW5kIHJvdXRpbmUuICovCiBleHRlcm4gaW50IHNzYl9idXNfc3VzcGVuZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKaW5kZXggN2Q3ZTAzZC4uZDNiMWQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKQEAgLTE4MSw2ICsxODEsMTYgQEAKICNkZWZpbmUgU1NCX0NISVBDT19QUk9HX1dBSVRDTlQJCTB4MDEyNAogI2RlZmluZSBTU0JfQ0hJUENPX0ZMQVNIX0NGRwkJMHgwMTI4CiAjZGVmaW5lIFNTQl9DSElQQ09fRkxBU0hfV0FJVENOVAkweDAxMkMKKyNkZWZpbmUgU1NCX0NISVBDT19DTEtDVExTVAkJMHgwMUUwIC8qIENsb2NrIGNvbnRyb2wgYW5kIHN0YXR1cyAocmV2ID49IDIwKSAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9GT1JDRUFMUAkweDAwMDAwMDAxIC8qIEZvcmNlIEFMUCByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFSFQJMHgwMDAwMDAwMiAvKiBGb3JjZSBIVCByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFSUxQCTB4MDAwMDAwMDQgLyogRm9yY2UgSUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUFMUFJFUQkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFRSRVEJMHgwMDAwMDAxMCAvKiBIVCBhdmFpbGFibGUgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IV0NST0ZGCTB4MDAwMDAwMjAgLyogRm9yY2UgSFcgY2xvY2sgcmVxdWVzdCBvZmYgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUCTB4MDAwMTAwMDAgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVBTFAJMHgwMDAyMDAwMCAvKiBBUEwgYXZhaWxhYmxlICovCisjZGVmaW5lIFNTQl9DSElQQ09fSFdfV09SS0FST1VORAkweDAxRTQgLyogSGFyZHdhcmUgd29ya2Fyb3VuZCAocmV2ID49IDIwKSAqLwogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQwX0RBVEEJCTB4MDMwMAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQwX0lNUgkJMHgwMzA0CiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfRkNSCQkweDAzMDgKQEAgLTE5Nyw2ICsyMDcsMTk2IEBACiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDFfTFNSCQkweDA0MTQKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMV9NU1IJCTB4MDQxOAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQxX1NDUkFUQ0gJMHgwNDFDCisvKiBQTVUgcmVnaXN0ZXJzIChyZXYgPj0gMjApICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NUTAkJCTB4MDYwMCAvKiBQTVUgY29udHJvbCAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVYJCTB4RkZGRjAwMDAgLyogSUxQIGRpdiBtYXNrICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVl9TSElGVAkxNgorI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX05PSUxQT05XCQkweDAwMDAwMjAwIC8qIE5vIElMUCBvbiB3YWl0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSFRSRVFFTgkJMHgwMDAwMDEwMCAvKiBIVCByZXEgZW5hYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfQUxQUkVRRU4JCTB4MDAwMDAwODAgLyogQUxQIHJlcSBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUQkJMHgwMDAwMDA3QyAvKiBDcnlzdGFsIGZyZXEgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVAkyCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQRElWRU4JCTB4MDAwMDAwMDIgLyogSUxQIGRpdiBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9MUE9TRUwJCTB4MDAwMDAwMDEgLyogTFBPIHNlbCAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9DQVAJCQkweDA2MDQgLyogUE1VIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ0FQX1JFVklTSU9OCQkweDAwMDAwMEZGIC8qIFJldmlzaW9uIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfU1RBVAkJCTB4MDYwOCAvKiBQTVUgc3RhdHVzICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX0lOVFBFTkQJCTB4MDAwMDAwNDAgLyogSW50ZXJydXB0IHBlbmRpbmcgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfU0JDTEtTVAkJMHgwMDAwMDAzMCAvKiBCYWNrcGxhbmUgY2xvY2sgc3RhdHVzPyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9IQVZFQUxQCQkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfSEFWRUhUCQkweDAwMDAwMDA0IC8qIEhUIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9SRVNJTklUCQkweDAwMDAwMDAzIC8qIFJlcyBpbml0ICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19TVEFUCQkJMHgwNjBDIC8qIFBNVSByZXMgc3RhdHVzICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19QRU5ECQkJMHgwNjEwIC8qIFBNVSByZXMgcGVuZGluZyAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9USU1FUgkJCTB4MDYxNCAvKiBQTVUgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSwkJMHgwNjE4IC8qIFBNVSBtaW4gcmVzIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSwkJMHgwNjFDIC8qIFBNVSBtYXggcmVzIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1RBQlNFTAkJMHgwNjIwIC8qIFBNVSByZXMgdGFibGUgc2VsICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0sJCTB4MDYyNCAvKiBQTVUgcmVzIGRlcCBtYXNrICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19VUEROVE0JCTB4MDYyOCAvKiBQTVUgcmVzIHVwZG93biB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfVElNRVIJCTB4MDYyQyAvKiBQTVUgcmVzIHRpbWVyICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NMS1NUUkVUQ0gJCTB4MDYzMCAvKiBQTVUgY2xvY2tzdHJldGNoICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1dBVENIRE9HCQkJMHgwNjM0IC8qIFBNVSB3YXRjaGRvZyAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRVFMJCTB4MDY0MCAvKiBQTVUgcmVzIHJlcSB0aW1lciBzZWwgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1JFUVQJCQkweDA2NDQgLyogUE1VIHJlcyByZXEgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1JFUU0JCQkweDA2NDggLyogUE1VIHJlcyByZXEgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NISVBDVExfQUREUgkJCTB4MDY1MAorI2RlZmluZSBTU0JfQ0hJUENPX0NISVBDVExfREFUQQkJCTB4MDY1NAorI2RlZmluZSBTU0JfQ0hJUENPX1JFR0NUTF9BRERSCQkJMHgwNjU4CisjZGVmaW5lIFNTQl9DSElQQ09fUkVHQ1RMX0RBVEEJCQkweDA2NUMKKyNkZWZpbmUgU1NCX0NISVBDT19QTExDVExfQUREUgkJCTB4MDY2MAorI2RlZmluZSBTU0JfQ0hJUENPX1BMTENUTF9EQVRBCQkJMHgwNjY0CisKKworCisvKiogUE1VIFBMTCByZWdpc3RlcnMgKi8KKworLyogUE1VIHJldiAwIFBMTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1NCX1BNVTBfUExMQ1RMMAkJCTAKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDBfUERJVl9NU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDBfUERJVl9GUkVRCQkyNTAwMCAvKiBrSHogKi8KKyNkZWZpbmUgU1NCX1BNVTBfUExMQ1RMMQkJCTEKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLCQkweEYwMDAwMDAwIC8qIFdpbGQgaW50IG1hc2sgKGxvdyBuaWJibGUpICovCisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TS19TSElGVAkyOAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0sJCTB4MEZGRkZGMDAgLyogV2lsZCBmcmFjIG1hc2sgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9GTVNLX1NISUZUCTgKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfU1RPUE1PRAkJMHgwMDAwMDA0MCAvKiBTdG9wIG1vZCAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwyCQkJMgorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISQkJMHgwMDAwMDAwRiAvKiBXaWxkIGludCBtYXNrIChoaWdoIG5pYmJsZSkgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSElfU0hJRlQJMAorCisvKiBQTVUgcmV2IDEgUExMIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU0JfUE1VMV9QTExDVEwwCQkJMAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMF9QMURJVgkJCTB4MDBGMDAwMDAgLyogUDEgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AxRElWX1NISUZUCQkyMAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMF9QMkRJVgkJCTB4MEYwMDAwMDAgLyogUDIgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AyRElWX1NISUZUCQkyNAorI2RlZmluZSBTU0JfUE1VMV9QTExDVEwxCQkJMQorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NMURJVgkJCTB4MDAwMDAwRkYgLyogTTEgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00xRElWX1NISUZUCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00yRElWCQkJMHgwMDAwRkYwMCAvKiBNMiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTJESVZfU0hJRlQJCTgKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTNESVYJCQkweDAwRkYwMDAwIC8qIE0zIGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NM0RJVl9TSElGVAkJMTYKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTRESVYJCQkweEZGMDAwMDAwIC8qIE00IGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NNERJVl9TSElGVAkJMjQKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMMgkJCTIKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTTVESVYJCQkweDAwMDAwMEZGIC8qIE01IGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNURJVl9TSElGVAkJMAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNkRJVgkJCTB4MDAwMEZGMDAgLyogTTYgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX002RElWX1NISUZUCQk4CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFCQkweDAwMEUwMDAwIC8qIE5ESVYgbW9kZSAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERV9TSElGVAkxNworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UCQkweDFGRjAwMDAwIC8qIE5ESVYgaW50ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlRfU0hJRlQJCTIwCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDMJCQkzCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDCQkweDAwRkZGRkZGIC8qIE5ESVYgZnJhYyAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMM19ORElWRlJBQ19TSElGVAkwCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDQJCQk0CisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDUJCQk1CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVgkJMHhGRkZGRkYwMCAvKiBjbGsgZHJ2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVl9TSElGVAkJOAorCisvKiBCQ000MzEyIFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfU1dJVENIRVJfQlVSU1QJCTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX1NXSVRDSEVSX1BXTSAgICAJMQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUEFfUkVGX0xETwkJMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQ09SRV9MRE9fQlVSU1QJCTMKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0NPUkVfTERPX1BXTQkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUkFESU9fTERPCQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9JTFBfUkVRVUVTVAkJNgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQkdfRklMVEJZUAkJNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfVFhfRklMVEJZUAkJOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUlhfRklMVEJZUAkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfWFRBTF9QVQkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9BTFBfQVZBSUwJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9CQl9QTExfRklMVEJZUAkJMTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX1JGX1BMTF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfSFRfQVZBSUwJCTE0CisKKy8qIEJDTTQzMjUgUExMIHJlc291cmNlIG51bWJlcnMuICovCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9CVUNLX0JPT1NUX0JVUlNUCTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NCVUNLX0JVUlNUCQkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9DQlVDS19QV00JCTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NMRE9fQ0JVQ0tfQlVSU1QJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0xET19DQlVDS19QV00JCTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0JVQ0tfQk9PU1RfUFdNCQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9JTFBfUkVRVUVTVAkJNgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUJVQ0tfQlVSU1QJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0FCVUNLX1BXTQkJOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfTE5MRE8xX1BVCQk5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzJfUFUJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzNfUFUJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzRfUFUJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9YVEFMX1BVCQkJMTMKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0FMUF9BVkFJTAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1JYX1BXUlNXX1BVCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfVFhfUFdSU1dfUFUJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9SRlBMTF9QV1JTV19QVQkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xPR0VOX1BXUlNXX1BVCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUZFX1BXUlNXX1BVCQkxOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQkJQTExfUFdSU1dfUFUJCTIwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTAkJMjEKKworLyogQkNNNDMyOCBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0VYVF9TV0lUQ0hFUl9QV00JMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNCQkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9CVVJTVAkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9FWFRfU1dJVENIRVJfQlVSU1QJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfSUxQX1JFUVVFU1QJCTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX1BXTQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9SQURJT19TV0lUQ0hFUl9CVVJTVAk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9ST01fU1dJVENICQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9QQV9SRUZfTERPCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9SQURJT19MRE8JCTkKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0FGRV9MRE8JCQkxMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUExMX0xETwkJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CR19GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfVFhfRklMVEJZUAkJMTMKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JYX0ZJTFRCWVAJCTE0CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9YVEFMX1BVCQkJMTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1hUQUxfRU4JCQkxNgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX0ZJTFRCWVAJCTE3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9SRl9QTExfRklMVEJZUAkJMTgKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVQkJMTkKKworLyogQkNNNTM1NCBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0VYVF9TV0lUQ0hFUl9QV00JMAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfU1dJVENIRVJfUFdNCQkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9TV0lUQ0hFUl9CVVJTVAkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9FWFRfU1dJVENIRVJfQlVSU1QJMworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfSUxQX1JFUVVFU1QJCTQKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX1NXSVRDSEVSX1BXTQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9SQURJT19TV0lUQ0hFUl9CVVJTVAk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9ST01fU1dJVENICQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9QQV9SRUZfTERPCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9SQURJT19MRE8JCTkKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0FGRV9MRE8JCQkxMAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUExMX0xETwkJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CR19GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfVFhfRklMVEJZUAkJMTMKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JYX0ZJTFRCWVAJCTE0CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9YVEFMX1BVCQkJMTUKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1hUQUxfRU4JCQkxNgorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX0ZJTFRCWVAJCTE3CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9SRl9QTExfRklMVEJZUAkJMTgKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX1BMTF9QVQkJMTkKKworCisKKy8qKiBDaGlwIHNwZWNpZmljIENoaXAtU3RhdHVzIHJlZ2lzdGVyIGNvbnRlbnRzLiAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TUFJPTV9PVFBfU0VMCTB4MDAwMDAwMDMKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfREVGQ0lTX1NFTAkJMCAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgdXNlIGRlZi4gQ0lTLCBubyBTUFJPTSAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TUFJPTV9TRUwJCTEgLyogT1RQIGlzIHBvd2VyZWQgdXAsIFNQUk9NIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfT1RQX1NFTAkJMiAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgbm8gU1BST00gKi8KKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfT1RQX1BXUkROCQkzIC8qIE9UUCBpcyBwb3dlcmVkIGRvd24sIFNQUk9NIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfU0RJT19VU0JfTU9ERQkweDAwMDAwMDA0CisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NESU9fVVNCX01PREVfU0hJRlQgIDIKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfUkNBTF9WQUxJRAkJMHgwMDAwMDAwOAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTElEX1NISUZUCTMKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfUkNBTF9WQUxVRQkJMHgwMDAwMDFGMAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTFVFX1NISUZUCTQKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfUE1VVE9QXzJCIAkJMHgwMDAwMDIwMCAvKiAxIGZvciAyYiwgMCBmb3IgdG8gMmEgKi8KIAogCiAKQEAgLTM1MywxMSArNTUzLDIwIEBACiBzdHJ1Y3Qgc3NiX2RldmljZTsKIHN0cnVjdCBzc2Jfc2VyaWFsX3BvcnQ7CiAKKy8qIERhdGEgZm9yIHRoZSBQTVUsIGlmIGF2YWlsYWJsZS4KKyAqIENoZWNrIGF2YWlsYWJpbGl0eSB3aXRoICgoc3RydWN0IHNzYl9jaGlwY29tbW9uKS0+Y2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKQorICovCitzdHJ1Y3Qgc3NiX2NoaXBjb21tb25fcG11IHsKKwl1OCByZXY7CQkJLyogUE1VIHJldmlzaW9uICovCisJdTMyIGNyeXN0YWxmcmVxOwkvKiBUaGUgYWN0aXZlIGNyeXN0YWwgZnJlcXVlbmN5IChpbiBrSHopICovCit9OworCiBzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gewogCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7CiAJdTMyIGNhcGFiaWxpdGllczsKIAkvKiBGYXN0IFBvd2VydXAgRGVsYXkgY29uc3RhbnQgKi8KIAl1MTYgZmFzdF9wd3J1cF9kZWxheTsKKwlzdHJ1Y3Qgc3NiX2NoaXBjb21tb25fcG11IHBtdTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzc2JfY2hpcGNvX2F2YWlsYWJsZShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQpAQCAtMzY1LDYgKzU3NCwxNyBAQAogCXJldHVybiAoY2MtPmRldiAhPSBOVUxMKTsKIH0KIAorLyogUmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkJc3NiX3JlYWQzMigoY2MpLT5kZXYsIG9mZnNldCkKKyNkZWZpbmUgY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgdmFsKQlzc2Jfd3JpdGUzMigoY2MpLT5kZXYsIG9mZnNldCwgdmFsKQorCisjZGVmaW5lIGNoaXBjb19tYXNrMzIoY2MsIG9mZnNldCwgbWFzaykgXAorCQljaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCBjaGlwY29fcmVhZDMyKGNjLCBvZmZzZXQpICYgKG1hc2spKQorI2RlZmluZSBjaGlwY29fc2V0MzIoY2MsIG9mZnNldCwgc2V0KSBcCisJCWNoaXBjb193cml0ZTMyKGNjLCBvZmZzZXQsIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgfCAoc2V0KSkKKyNkZWZpbmUgY2hpcGNvX21hc2tzZXQzMihjYywgb2Zmc2V0LCBtYXNrLCBzZXQpIFwKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgKGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpIHwgKHNldCkpCisKIGV4dGVybiB2b2lkIHNzYl9jaGlwY29tbW9uX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYyk7CiAKIGV4dGVybiB2b2lkIHNzYl9jaGlwY29fc3VzcGVuZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKQEAgLTQwNiw0ICs2MjYsOCBAQAogCQkJCSAgc3RydWN0IHNzYl9zZXJpYWxfcG9ydCAqcG9ydHMpOwogI2VuZGlmIC8qIENPTkZJR19TU0JfU0VSSUFMICovCiAKKy8qIFBNVSBzdXBwb3J0ICovCitleHRlcm4gdm9pZCBzc2JfcG11X2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYyk7CisKKwogI2VuZGlmIC8qIExJTlVYX1NTQl9DSElQQ09fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCmluZGV4IDk5YTBmOTkuLmEwMWI5ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaApAQCAtMzI2LDYgKzMyNiw0MiBAQAogI2RlZmluZSAgU1NCX1NQUk9NNV9HUElPQl9QMwkJMHhGRjAwCS8qIFBpbiAzICovCiAjZGVmaW5lICBTU0JfU1BST001X0dQSU9CX1AzX1NISUZUCTgKIAorLyogU1BST00gUmV2aXNpb24gOCAqLworI2RlZmluZSBTU0JfU1BST004X0JGTExPCQkweDEwODQJLyogQm9hcmRmbGFncyAobG93IDE2IGJpdHMpICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMSEkJCTB4MTA4NgkvKiBCb2FyZGZsYWdzIEhpICovCisjZGVmaW5lIFNTQl9TUFJPTThfSUwwTUFDCQkweDEwOEMJLyogNiBieXRlIE1BQyBhZGRyZXNzICovCisjZGVmaW5lIFNTQl9TUFJPTThfQ0NPREUJCTB4MTA5MgkvKiAyIGJ5dGUgY291bnRyeSBjb2RlICovCisjZGVmaW5lIFNTQl9TUFJPTThfQU5UQVZBSUwJCTB4MTA5QyAgLyogQW50ZW5uYSBhdmFpbGFibGUgYml0ZmllbGRzKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTF9BCQkweEZGMDAJLyogQS1QSFkgYml0ZmllbGQgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTF9BX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTF9CRwkJMHgwMEZGCS8qIEItUEhZIGFuZCBHLVBIWSBiaXRmaWVsZCAqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0JHX1NISUZUCTAKKyNkZWZpbmUgU1NCX1NQUk9NOF9BR0FJTjAxCQkweDEwOUUJLyogQW50ZW5uYSBHYWluIChpbiBkQm0gUTUuMikgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4wCQkweDAwRkYJLyogQW50ZW5uYSAwICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMF9TSElGVAkwCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMQkJMHhGRjAwCS8qIEFudGVubmEgMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0FHQUlOMjMJCTB4MTBBMAorI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjIJCTB4MDBGRgkvKiBBbnRlbm5hIDIgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4yX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4zCQkweEZGMDAJLyogQW50ZW5uYSAzICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOM19TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfR1BJT0EJCTB4MTA5NgkvKkdlbi4gUHVycG9zZSBJTyAjIDAgYW5kIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0FfUDAJCTB4MDBGRgkvKiBQaW4gMCAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQV9QMQkJMHhGRjAwCS8qIFBpbiAxICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9BX1AxX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9HUElPQgkJMHgxMDk4CS8qIEdlbi4gUHVycG9zZSBJTyAjIDIgYW5kIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDIJCTB4MDBGRgkvKiBQaW4gMiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QMwkJMHhGRjAwCS8qIFBpbiAzICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AzX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9NQVhQX0JHCQkweDEwQzAgIC8qIE1heCBQb3dlciBCRyBpbiBwYXRoIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9CR19NQVNLCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIEJHICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0JHCQkweEZGMDAJLyogTWFzayBmb3IgcGF0aCAxIGl0c3NpX2JnICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0JHX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9NQVhQX0EJCTB4MTBDOCAgLyogTWF4IFBvd2VyIEEgaW4gcGF0aCAxICovCisjZGVmaW5lICBTU0JfU1BST004X01BWFBfQV9NQVNLCQkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciBBICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0EJCTB4RkYwMAkvKiBNYXNrIGZvciBwYXRoIDEgaXRzc2lfYSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9JVFNTSV9BX1NISUZUCTgKIAogLyogVmFsdWVzIGZvciBTU0JfU1BST00xX0JJTkZfQ0NPREUgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdGFja3Byb3RlY3Rvci5oIGIvaW5jbHVkZS9saW51eC9zdGFja3Byb3RlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2U1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N0YWNrcHJvdGVjdG9yLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfTElOVVhfU1RBQ0tQUk9URUNUT1JfSAorI2RlZmluZSBfTElOVVhfU1RBQ0tQUk9URUNUT1JfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyMgaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGJvb3RfaW5pdF9zdGFja19jYW5hcnkodm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaAppbmRleCAyYzZmYWVjLi4wYjMwMzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCkBAIC0xLDE0ICsxLDE1IEBACiAjaWZuZGVmIF9MSU5VWF9TVVNQRU5EX0lPQ1RMU19ICiAjZGVmaW5lIF9MSU5VWF9TVVNQRU5EX0lPQ1RMU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyB0aGUgdmFsdWVzIG5lZWRlZCBmb3IgdGhlIGlkZW50aWZpY2F0aW9uCiAgKiBvZiB0aGUgcmVzdW1lIHN3YXAgYXJlYSBmcm9tIGEgdXNlciBzcGFjZSB0byB0aGUga2VybmVsIHZpYSB0aGUKICAqIFNOQVBTSE9UX1NFVF9TV0FQX0FSRUEgaW9jdGwKICAqLwogc3RydWN0IHJlc3VtZV9zd2FwX2FyZWEgewotCWxvZmZfdCBvZmZzZXQ7Ci0JdV9pbnQzMl90IGRldjsKKwlfX2tlcm5lbF9sb2ZmX3Qgb2Zmc2V0OworCV9fdTMyIGRldjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNkZWZpbmUgU05BUFNIT1RfSU9DX01BR0lDCSczJwpAQCAtMjAsMTMgKzIxLDEzIEBACiAjZGVmaW5lIFNOQVBTSE9UX1MyUkFNCQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTEpCiAjZGVmaW5lIFNOQVBTSE9UX1NFVF9TV0FQX0FSRUEJCV9JT1coU05BUFNIT1RfSU9DX01BR0lDLCAxMywgXAogCQkJCQkJCXN0cnVjdCByZXN1bWVfc3dhcF9hcmVhKQotI2RlZmluZSBTTkFQU0hPVF9HRVRfSU1BR0VfU0laRQkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE0LCBsb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0dFVF9JTUFHRV9TSVpFCQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTQsIF9fa2VybmVsX2xvZmZfdCkKICNkZWZpbmUgU05BUFNIT1RfUExBVEZPUk1fU1VQUE9SVAlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxNSkKICNkZWZpbmUgU05BUFNIT1RfUE9XRVJfT0ZGCQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxNikKICNkZWZpbmUgU05BUFNIT1RfQ1JFQVRFX0lNQUdFCQlfSU9XKFNOQVBTSE9UX0lPQ19NQUdJQywgMTcsIGludCkKICNkZWZpbmUgU05BUFNIT1RfUFJFRl9JTUFHRV9TSVpFCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE4KQotI2RlZmluZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkUJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE5LCBsb2ZmX3QpCi0jZGVmaW5lIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMjAsIGxvZmZfdCkKKyNkZWZpbmUgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxOSwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0UJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDIwLCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQVhOUgkyMAogCiAjZW5kaWYgLyogX0xJTlVYX1NVU1BFTkRfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDM5ZDQ3MWQuLmU3NmQzYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtNDkwLDYgKzQ5MCw3IEBACiAJTkVUX0lQVjRfQ09ORl9BUlBfSUdOT1JFPTE5LAogCU5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUz0yMCwKIAlORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQ9MjEsCisJTkVUX0lQVjRfQ09ORl9BUlBfTk9USUZZPTIyLAogCV9fTkVUX0lQVjRfQ09ORl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IGZlNzdlMTQuLjlkNTA3OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtNjksMTYgKzY5LDE2IEBACiAjZGVmaW5lIHRjcF9mbGFnX3dvcmQodHApICggKCh1bmlvbiB0Y3Bfd29yZF9oZHIgKikodHApKS0+d29yZHMgWzNdKSAKIAogZW51bSB7IAotCVRDUF9GTEFHX0NXUiA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDgwMDAwMCksIAotCVRDUF9GTEFHX0VDRSA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDQwMDAwMCksIAotCVRDUF9GTEFHX1VSRyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDIwMDAwMCksIAotCVRDUF9GTEFHX0FDSyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDEwMDAwMCksIAotCVRDUF9GTEFHX1BTSCA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDA4MDAwMCksIAotCVRDUF9GTEFHX1JTVCA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDA0MDAwMCksIAotCVRDUF9GTEFHX1NZTiA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDAyMDAwMCksIAotCVRDUF9GTEFHX0ZJTiA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDAxMDAwMCksCi0JVENQX1JFU0VSVkVEX0JJVFMgPSBfX2NvbnN0YW50X2h0b25sKDB4MEYwMDAwMDApLAotCVRDUF9EQVRBX09GRlNFVCA9IF9fY29uc3RhbnRfaHRvbmwoMHhGMDAwMDAwMCkKKwlUQ1BfRkxBR19DV1IgPSBfX2NwdV90b19iZTMyKDB4MDA4MDAwMDApLAorCVRDUF9GTEFHX0VDRSA9IF9fY3B1X3RvX2JlMzIoMHgwMDQwMDAwMCksCisJVENQX0ZMQUdfVVJHID0gX19jcHVfdG9fYmUzMigweDAwMjAwMDAwKSwKKwlUQ1BfRkxBR19BQ0sgPSBfX2NwdV90b19iZTMyKDB4MDAxMDAwMDApLAorCVRDUF9GTEFHX1BTSCA9IF9fY3B1X3RvX2JlMzIoMHgwMDA4MDAwMCksCisJVENQX0ZMQUdfUlNUID0gX19jcHVfdG9fYmUzMigweDAwMDQwMDAwKSwKKwlUQ1BfRkxBR19TWU4gPSBfX2NwdV90b19iZTMyKDB4MDAwMjAwMDApLAorCVRDUF9GTEFHX0ZJTiA9IF9fY3B1X3RvX2JlMzIoMHgwMDAxMDAwMCksCisJVENQX1JFU0VSVkVEX0JJVFMgPSBfX2NwdV90b19iZTMyKDB4MEYwMDAwMDApLAorCVRDUF9EQVRBX09GRlNFVCA9IF9fY3B1X3RvX2JlMzIoMHhGMDAwMDAwMCkKIH07IAogCiAvKiBUQ1Agc29ja2V0IG9wdGlvbnMgKi8KQEAgLTIxOCw3ICsyMTgsNiBAQAogCQlzbmRfd3NjYWxlIDogNCwJLyogV2luZG93IHNjYWxpbmcgcmVjZWl2ZWQgZnJvbSBzZW5kZXIJKi8KIAkJcmN2X3dzY2FsZSA6IDQ7CS8qIFdpbmRvdyBzY2FsaW5nIHRvIHNlbmQgdG8gcmVjZWl2ZXIJKi8KIC8qCVNBQ0tzIGRhdGEJKi8KLQl1OAllZmZfc2Fja3M7CS8qIFNpemUgb2YgU0FDSyBhcnJheSB0byBzZW5kIHdpdGggbmV4dCBwYWNrZXQgKi8KIAl1OAludW1fc2Fja3M7CS8qIE51bWJlciBvZiBTQUNLIGJsb2NrcwkJKi8KIAl1MTYJdXNlcl9tc3M7ICAJLyogbXNzIHJlcXVlc3RlZCBieSB1c2VyIGluIGlvY3RsICovCiAJdTE2CW1zc19jbGFtcDsJLyogTWF4aW1hbCBtc3MsIG5lZ290aWF0ZWQgYXQgY29ubmVjdGlvbiBzZXR1cCAqLwpAQCAtMjQ5LDcgKzI0OCw3IEBACiAJLyogaW5ldF9jb25uZWN0aW9uX3NvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGNwX3NvY2sgKi8KIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sJaW5ldF9jb25uOwogCXUxNgl0Y3BfaGVhZGVyX2xlbjsJLyogQnl0ZXMgb2YgdGNwIGhlYWRlciB0byBzZW5kCQkqLwotCXUxNgl4bWl0X3NpemVfZ29hbDsJLyogR29hbCBmb3Igc2VnbWVudGluZyBvdXRwdXQgcGFja2V0cwkqLworCXUxNgl4bWl0X3NpemVfZ29hbF9zZWdzOyAvKiBHb2FsIGZvciBzZWdtZW50aW5nIG91dHB1dCBwYWNrZXRzICovCiAKIC8qCiAgKglIZWFkZXIgcHJlZGljdGlvbiBmbGFncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCBmYmJkMmExLi4yNDJmNjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMTIsMTQgKzEyLDE0IEBACiAjaWZuZGVmIF9TVFJVQ1RfVElNRVNQRUMKICNkZWZpbmUgX1NUUlVDVF9USU1FU1BFQwogc3RydWN0IHRpbWVzcGVjIHsKLQl0aW1lX3QJdHZfc2VjOwkJLyogc2Vjb25kcyAqLwotCWxvbmcJdHZfbnNlYzsJLyogbmFub3NlY29uZHMgKi8KKwlfX2tlcm5lbF90aW1lX3QJdHZfc2VjOwkJCS8qIHNlY29uZHMgKi8KKwlsb25nCQl0dl9uc2VjOwkJLyogbmFub3NlY29uZHMgKi8KIH07CiAjZW5kaWYKIAogc3RydWN0IHRpbWV2YWwgewotCXRpbWVfdAkJdHZfc2VjOwkJLyogc2Vjb25kcyAqLwotCXN1c2Vjb25kc190CXR2X3VzZWM7CS8qIG1pY3Jvc2Vjb25kcyAqLworCV9fa2VybmVsX3RpbWVfdAkJdHZfc2VjOwkJLyogc2Vjb25kcyAqLworCV9fa2VybmVsX3N1c2Vjb25kc190CXR2X3VzZWM7CS8qIG1pY3Jvc2Vjb25kcyAqLwogfTsKIAogc3RydWN0IHRpbWV6b25lIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZWNvbXBhcmUuaCBiL2luY2x1ZGUvbGludXgvdGltZWNvbXBhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDZlMjIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90aW1lY29tcGFyZS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogVXRpbGl0eSBjb2RlIHdoaWNoIGhlbHBzIHRyYW5zZm9ybWluZyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgdGltZQorICogYmFzZXMsIGNhbGxlZCAic291cmNlIiBhbmQgInRhcmdldCIgdGltZSBpbiB0aGlzIGNvZGUuCisgKgorICogU291cmNlIHRpbWUgaGFzIHRvIGJlIHByb3ZpZGVkIHZpYSB0aGUgdGltZWNvdW50ZXIgQVBJIHdoaWxlIHRhcmdldAorICogdGltZSBpcyBhY2Nlc3NlZCB2aWEgYSBmdW5jdGlvbiBjYWxsYmFjayB3aG9zZSBwcm90b3R5cGUKKyAqIGludGVudGlvbmFsbHkgbWF0Y2hlcyBrdGltZV9nZXQoKSBhbmQga3RpbWVfZ2V0X3JlYWwoKS4gVGhlc2UKKyAqIGludGVyZmFjZXMgd2hlcmUgY2hvc2VuIGxpa2UgdGhpcyBzbyB0aGF0IHRoZSBjb2RlIHNlcnZlcyBpdHMKKyAqIGluaXRpYWwgcHVycG9zZSB3aXRob3V0IGFkZGl0aW9uYWwgZ2x1ZSBjb2RlLgorICoKKyAqIFRoaXMgcHVycG9zZSBpcyBzeW5jaHJvbml6aW5nIGEgaGFyZHdhcmUgY2xvY2sgaW4gYSBOSUMgd2l0aCBzeXN0ZW0KKyAqIHRpbWUsIGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCwKKyAqIElFRUUxNTg4KSB3aXRoIG1vcmUgYWNjdXJhdGUgaGFyZHdhcmUgYXNzaXN0ZWQgdGltZSBzdGFtcGluZy4gIEluCisgKiB0aGF0IGNvbnRleHQgb25seSBzeW5jaHJvbml6YXRpb24gYWdhaW5zdCBzeXN0ZW0gdGltZSAoPQorICoga3RpbWVfZ2V0X3JlYWwoKSkgaXMgY3VycmVudGx5IG5lZWRlZC4gQnV0IHRoaXMgdXRpbGl0eSBjb2RlIG1pZ2h0CisgKiBiZWNvbWUgdXNlZnVsIGluIG90aGVyIHNpdHVhdGlvbnMsIHdoaWNoIGlzIHdoeSBpdCB3YXMgd3JpdHRlbiBhcworICogZ2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgY29kZS4KKyAqCisgKiBUaGUgc291cmNlIHRpbWVjb3VudGVyIGlzIGFzc3VtZWQgdG8gcmV0dXJuIG1vbm90b25pY2FsbHkKKyAqIGluY3JlYXNpbmcgdGltZSAoYnV0IHRoaXMgY29kZSBkb2VzIGl0cyBiZXN0IHRvIGNvbXBlbnNhdGUgaWYgdGhhdAorICogaXMgbm90IHRoZSBjYXNlKSB3aGVyZWFzIHRhcmdldCB0aW1lIG1heSBqdW1wLgorICoKKyAqIFRoZSB0YXJnZXQgdGltZSBjb3JyZXNwb25kaW5nIHRvIGEgc291cmNlIHRpbWUgaXMgZGV0ZXJtaW5lZCBieQorICogcmVhZGluZyB0YXJnZXQgdGltZSwgcmVhZGluZyBzb3VyY2UgdGltZSwgcmVhZGluZyB0YXJnZXQgdGltZQorICogYWdhaW4sIHRoZW4gYXNzdW1pbmcgdGhhdCBhdmVyYWdlIHRhcmdldCB0aW1lIGNvcnJlc3BvbmRzIHRvIHNvdXJjZQorICogdGltZS4gSW4gb3RoZXIgd29yZHMsIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgcmVhZGluZyB0aGUgc291cmNlCisgKiB0aW1lIGlzIHNsb3cgYW5kIGludm9sdmVzIGVxdWFsIHRpbWUgZm9yIHNlbmRpbmcgdGhlIHJlcXVlc3QgYW5kCisgKiByZWNlaXZpbmcgdGhlIHJlcGx5LCB3aGVyZWFzIHJlYWRpbmcgdGFyZ2V0IHRpbWUgaXMgYXNzdW1lZCB0byBiZQorICogZmFzdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworI2lmbmRlZiBfTElOVVhfVElNRUNPTVBBUkVfSAorI2RlZmluZSBfTElOVVhfVElNRUNPTVBBUkVfSAorCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorCisvKioKKyAqIHN0cnVjdCB0aW1lY29tcGFyZSAtIHN0b3JlcyBzdGF0ZSBhbmQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHR3byBjbG9ja3MKKyAqCisgKiBJbml0aWFsaXplIHRvIHplcm8sIHRoZW4gc2V0IHNvdXJjZS90YXJnZXQvbnVtX3NhbXBsZXMuCisgKgorICogVHJhbnNmb3JtYXRpb24gYmV0d2VlbiBzb3VyY2UgdGltZSBhbmQgdGFyZ2V0IHRpbWUgaXMgZG9uZSB3aXRoOgorICogdGFyZ2V0X3RpbWUgPSBzb3VyY2VfdGltZSArIG9mZnNldCArCisgKiAgICAgICAgICAgICAgIChzb3VyY2VfdGltZSAtIGxhc3RfdXBkYXRlKSAqIHNrZXcgLworICogICAgICAgICAgICAgICBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04KKyAqCisgKiBAc291cmNlOiAgICAgICAgICB1c2VkIHRvIGdldCBzb3VyY2UgdGltZSBzdGFtcHMgdmlhIHRpbWVjb3VudGVyX3JlYWQoKQorICogQHRhcmdldDogICAgICAgICAgZnVuY3Rpb24gcmV0dXJuaW5nIHRhcmdldCB0aW1lIChmb3IgZXhhbXBsZSwga3RpbWVfZ2V0CisgKiAgICAgICAgICAgICAgICAgICBmb3IgbW9ub3RvbmljIHRpbWUsIG9yIGt0aW1lX2dldF9yZWFsIGZvciB3YWxsIGNsb2NrKQorICogQG51bV9zYW1wbGVzOiAgICAgbnVtYmVyIG9mIHRpbWVzIHRoYXQgc291cmNlIHRpbWUgYW5kIHRhcmdldCB0aW1lIGFyZSB0bworICogICAgICAgICAgICAgICAgICAgYmUgY29tcGFyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGVpciBvZmZzZXQKKyAqIEBvZmZzZXQ6ICAgICAgICAgICh0YXJnZXQgdGltZSAtIHNvdXJjZSB0aW1lKSBhdCB0aGUgdGltZSBvZiB0aGUgbGFzdCB1cGRhdGUKKyAqIEBza2V3OiAgICAgICAgICAgIGF2ZXJhZ2UgKHRhcmdldCB0aW1lIC0gc291cmNlIHRpbWUpIC8gZGVsdGEgc291cmNlIHRpbWUgKgorICogICAgICAgICAgICAgICAgICAgVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OCisgKiBAbGFzdF91cGRhdGU6ICAgICBsYXN0IHNvdXJjZSB0aW1lIHN0YW1wIHdoZW4gdGltZSBvZmZzZXQgd2FzIG1lYXN1cmVkCisgKi8KK3N0cnVjdCB0aW1lY29tcGFyZSB7CisJc3RydWN0IHRpbWVjb3VudGVyICpzb3VyY2U7CisJa3RpbWVfdCAoKnRhcmdldCkodm9pZCk7CisJaW50IG51bV9zYW1wbGVzOworCisJczY0IG9mZnNldDsKKwlzNjQgc2tldzsKKwl1NjQgbGFzdF91cGRhdGU7Cit9OworCisvKioKKyAqIHRpbWVjb21wYXJlX3RyYW5zZm9ybSAtIHRyYW5zZm9ybSBzb3VyY2UgdGltZSBzdGFtcCBpbnRvIHRhcmdldCB0aW1lIGJhc2UKKyAqIEBzeW5jOiAgICAgICAgICAgIGNvbnRleHQgZm9yIHRpbWUgc3luYworICogQHNvdXJjZV90c3RhbXA6ICAgdGhlIHJlc3VsdCBvZiB0aW1lY291bnRlcl9yZWFkKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCkKKyAqLworZXh0ZXJuIGt0aW1lX3QgdGltZWNvbXBhcmVfdHJhbnNmb3JtKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCQkgICAgIHU2NCBzb3VyY2VfdHN0YW1wKTsKKworLyoqCisgKiB0aW1lY29tcGFyZV9vZmZzZXQgLSBtZWFzdXJlIGN1cnJlbnQgKHRhcmdldCB0aW1lIC0gc291cmNlIHRpbWUpIG9mZnNldAorICogQHN5bmM6ICAgICAgICAgICAgY29udGV4dCBmb3IgdGltZSBzeW5jCisgKiBAb2Zmc2V0OiAgICAgICAgICBhdmVyYWdlIG9mZnNldCBkdXJpbmcgc2FtcGxlIHBlcmlvZCByZXR1cm5lZCBoZXJlCisgKiBAc291cmNlX3RzdGFtcDogICBhdmVyYWdlIHNvdXJjZSB0aW1lIGR1cmluZyBzYW1wbGUgcGVyaW9kIHJldHVybmVkIGhlcmUKKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHVzZWQuIE1pZ2h0IGJlIHplcm8gKD0gbm8gcmVzdWx0KSBpbiB0aGUKKyAqIHVubGlrZWx5IGNhc2UgdGhhdCB0YXJnZXQgdGltZSB3YXMgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZvciBhbGwKKyAqIHNhbXBsZXMgKD0gYnJva2VuKS4KKyAqLworZXh0ZXJuIGludCB0aW1lY29tcGFyZV9vZmZzZXQoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJICAgICAgczY0ICpvZmZzZXQsCisJCQkgICAgICB1NjQgKnNvdXJjZV90c3RhbXApOworCitleHRlcm4gdm9pZCBfX3RpbWVjb21wYXJlX3VwZGF0ZShzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCQkJIHU2NCBzb3VyY2VfdHN0YW1wKTsKKworLyoqCisgKiB0aW1lY29tcGFyZV91cGRhdGUgLSB1cGRhdGUgb2Zmc2V0IGFuZCBza2V3IGJ5IG1lYXN1cmluZyBjdXJyZW50IG9mZnNldAorICogQHN5bmM6ICAgICAgICAgICAgY29udGV4dCBmb3IgdGltZSBzeW5jCisgKiBAc291cmNlX3RzdGFtcDogICB0aGUgcmVzdWx0IG9mIHRpbWVjb3VudGVyX3JlYWQoKSBvcgorICogICAgICAgICAgICAgICAgICAgdGltZWNvdW50ZXJfY3ljMnRpbWUoKSwgcGFzcyB6ZXJvIHRvIGZvcmNlIHVwZGF0ZQorICoKKyAqIFVwZGF0ZXMgYXJlIG9ubHkgZG9uZSBhdCBtb3N0IG9uY2UgcGVyIHNlY29uZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRpbWVjb21wYXJlX3VwZGF0ZShzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCQkJICAgICAgdTY0IHNvdXJjZV90c3RhbXApCit7CisJaWYgKCFzb3VyY2VfdHN0YW1wIHx8CisJICAgIChzNjQpKHNvdXJjZV90c3RhbXAgLSBzeW5jLT5sYXN0X3VwZGF0ZSkgPj0gTlNFQ19QRVJfU0VDKQorCQlfX3RpbWVjb21wYXJlX3VwZGF0ZShzeW5jLCBzb3VyY2VfdHN0YW1wKTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9USU1FQ09NUEFSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKaW5kZXggZGFmOTY4NS4uZTJkNjYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXIuaApAQCAtODYsOCArODYsOCBAQAogCiBleHRlcm4gdm9pZCBhZGRfdGltZXJfb24oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCBpbnQgY3B1KTsKIGV4dGVybiBpbnQgZGVsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpOwotZXh0ZXJuIGludCBfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CiBleHRlcm4gaW50IG1vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CitleHRlcm4gaW50IG1vZF90aW1lcl9wZW5kaW5nKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKIAogLyoKICAqIFRoZSBqaWZmaWVzIHZhbHVlIHdoaWNoIGlzIGFkZGVkIHRvIG5vdywgd2hlbiB0aGVyZSBpcyBubyB0aW1lcgpAQCAtMTQ2LDI1ICsxNDYsNyBAQAogfQogI2VuZGlmCiAKLS8qKgotICogYWRkX3RpbWVyIC0gc3RhcnQgYSB0aW1lcgotICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgYWRkZWQKLSAqCi0gKiBUaGUga2VybmVsIHdpbGwgZG8gYSAtPmZ1bmN0aW9uKC0+ZGF0YSkgY2FsbGJhY2sgZnJvbSB0aGUKLSAqIHRpbWVyIGludGVycnVwdCBhdCB0aGUgLT5leHBpcmVzIHBvaW50IGluIHRoZSBmdXR1cmUuIFRoZQotICogY3VycmVudCB0aW1lIGlzICdqaWZmaWVzJy4KLSAqCi0gKiBUaGUgdGltZXIncyAtPmV4cGlyZXMsIC0+ZnVuY3Rpb24gKGFuZCBpZiB0aGUgaGFuZGxlciB1c2VzIGl0LCAtPmRhdGEpCi0gKiBmaWVsZHMgbXVzdCBiZSBzZXQgcHJpb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFRpbWVycyB3aXRoIGFuIC0+ZXhwaXJlcyBmaWVsZCBpbiB0aGUgcGFzdCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBuZXh0Ci0gKiB0aW1lciB0aWNrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKLXsKLQlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOwotCV9fbW9kX3RpbWVyKHRpbWVyLCB0aW1lci0+ZXhwaXJlcyk7Ci19CitleHRlcm4gdm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKIAogI2lmZGVmIENPTkZJR19TTVAKICAgZXh0ZXJuIGludCB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaCBiL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDI1MzE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXhAZGlncml6Lm9yZy51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKK3N0cnVjdCB0aW1lcmlvbWVtX3JuZ19kYXRhIHsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOworCXVuc2lnbmVkIGludAkJcHJlc2VudDoxOworCisJdTMyIF9faW9tZW0JCSphZGRyZXNzOworCisJLyogbWVhc3VyZXMgaW4gdXNlY3MgKi8KKwl1bnNpZ25lZCBpbnQJCXBlcmlvZDsKK307CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVzLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKaW5kZXggZTJkMzAyMC4uODdiNjI2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXMuaApAQCAtNCwxMCArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHN0cnVjdCB0bXMgewotCWNsb2NrX3QgdG1zX3V0aW1lOwotCWNsb2NrX3QgdG1zX3N0aW1lOwotCWNsb2NrX3QgdG1zX2N1dGltZTsKLQljbG9ja190IHRtc19jc3RpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfdXRpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfc3RpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfY3V0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX2NzdGltZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IDk5OGE1NWQuLmFhMzQ3NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTE5MCw3ICsxOTAsNyBAQAogICogb2Zmc2V0IGFuZCBtYXhpbXVtIGZyZXF1ZW5jeSB0b2xlcmFuY2UuCiAgKi8KICNkZWZpbmUgU0hJRlRfVVNFQyAxNgkJLyogZnJlcXVlbmN5IG9mZnNldCBzY2FsZSAoc2hpZnQpICovCi0jZGVmaW5lIFBQTV9TQ0FMRSAoTlNFQ19QRVJfVVNFQyA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfVVNFQykpCisjZGVmaW5lIFBQTV9TQ0FMRSAoKHM2NClOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKICNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAxOQogI2RlZmluZSBQUE1fU0NBTEVfSU5WICgoMWxsIDw8IChQUE1fU0NBTEVfSU5WX1NISUZUICsgTlRQX1NDQUxFX1NISUZUKSkgLyBcCiAJCSAgICAgICBQUE1fU0NBTEUgKyAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCmluZGV4IGU2MzJkMjkuLmExNmI5ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTE5Myw1ICsxOTMsMTEgQEAKICNpZm5kZWYgdG9wb2xvZ3lfY29yZV9zaWJsaW5ncwogI2RlZmluZSB0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkJCWNwdW1hc2tfb2ZfY3B1KGNwdSkKICNlbmRpZgorI2lmbmRlZiB0b3BvbG9neV90aHJlYWRfY3B1bWFzaworI2RlZmluZSB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpCQljcHVtYXNrX29mKGNwdSkKKyNlbmRpZgorI2lmbmRlZiB0b3BvbG9neV9jb3JlX2NwdW1hc2sKKyNkZWZpbmUgdG9wb2xvZ3lfY29yZV9jcHVtYXNrKGNwdSkJCWNwdW1hc2tfb2YoY3B1KQorI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cG0uaCBiL2luY2x1ZGUvbGludXgvdHBtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzOGIzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdHBtLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIExlZW5kZXJ0IHZhbiBEb29ybiA8bGVlbmRlcnRAd2F0c29uLmlibS5jb20+CisgKiBEYXZlIFNhZmZvcmQgPHNhZmZvcmRAd2F0c29uLmlibS5jb20+CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBLeWxlbmUgSGFsbCA8a2poYWxsQHVzLmlibS5jb20+CisgKiBEZWJvcmEgVmVsYXJkZSA8ZHZlbGFyZGVAdXMuaWJtLmNvbT4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiA8dHBtZGRfZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIERldmljZSBkcml2ZXIgZm9yIFRDRy9UQ1BBIFRQTSAodHJ1c3RlZCBwbGF0Zm9ybSBtb2R1bGUpLgorICogU3BlY2lmaWNhdGlvbnMgYXQgd3d3LnRydXN0ZWRjb21wdXRpbmdncm91cC5vcmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisjaWZuZGVmIF9fTElOVVhfVFBNX0hfXworI2RlZmluZSBfX0xJTlVYX1RQTV9IX18KKworLyoKKyAqIENoaXAgbnVtIGlzIHRoaXMgdmFsdWUgb3IgYSB2YWxpZCB0cG0gaWR4CisgKi8KKyNkZWZpbmUJVFBNX0FOWV9OVU0gMHhGRkZGCisKKyNpZiBkZWZpbmVkKENPTkZJR19UQ0dfVFBNKQorCitleHRlcm4gaW50IHRwbV9wY3JfcmVhZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1Zik7CitleHRlcm4gaW50IHRwbV9wY3JfZXh0ZW5kKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggNzEyY2E1My4uNWFiZTM1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMSw2ICsxLDkgQEAKICNpZm5kZWYgX0xJTlVYX1RZUEVTX0gKICNkZWZpbmUgX0xJTlVYX1RZUEVTX0gKIAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmCV9fS0VSTkVMX18KIAogI2RlZmluZSBERUNMQVJFX0JJVE1BUChuYW1lLGJpdHMpIFwKQEAgLTksOSArMTIsOCBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi0jaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworI2lmZGVmIF9fS0VSTkVMX18KIAogdHlwZWRlZiBfX3UzMiBfX2tlcm5lbF9kZXZfdDsKIApAQCAtMjksNyArMzEsNiBAQAogdHlwZWRlZiBfX2tlcm5lbF9jbG9ja2lkX3QJY2xvY2tpZF90OwogdHlwZWRlZiBfX2tlcm5lbF9tcWRfdAkJbXFkX3Q7CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiB0eXBlZGVmIF9Cb29sCQkJYm9vbDsKIAogdHlwZWRlZiBfX2tlcm5lbF91aWQzMl90CXVpZF90OwpAQCAtNDUsMTQgKzQ2LDYgQEAKIHR5cGVkZWYgX19rZXJuZWxfb2xkX2dpZF90CW9sZF9naWRfdDsKICNlbmRpZiAvKiBDT05GSUdfVUlEMTYgKi8KIAotLyogbGliYzUgaW5jbHVkZXMgdGhpcyBmaWxlIHRvIGRlZmluZSB1aWRfdCwgdGh1cyB1aWRfdCBjYW4gbmV2ZXIgY2hhbmdlCi0gKiB3aGVuIGl0IGlzIGluY2x1ZGVkIGJ5IG5vbi1rZXJuZWwgY29kZQotICovCi0jZWxzZQotdHlwZWRlZiBfX2tlcm5lbF91aWRfdAkJdWlkX3Q7Ci10eXBlZGVmIF9fa2VybmVsX2dpZF90CQlnaWRfdDsKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNpZiBkZWZpbmVkKF9fR05VQ19fKQogdHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QJCWxvZmZfdDsKICNlbmRpZgpAQCAtMTU0LDcgKzE0Nyw3IEBACiAjZGVmaW5lIHBnb2ZmX3QgdW5zaWduZWQgbG9uZwogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qCiAgKiBCZWxvdyBhcmUgdHJ1bHkgTGludXgtc3BlY2lmaWMgdHlwZXMgdGhhdCBzaG91bGQgbmV2ZXIgY29sbGlkZSB3aXRoCkBAIC0yMTIsNSArMjA1LDUgQEAKIH07CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCi0KKyNlbmRpZiAvKiAgX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0xJTlVYX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmgKaW5kZXggYTBiYjZiZC4uNWRjYzlmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgdWlvX21lbSAtIGRlc2NyaXB0aW9uIG9mIGEgVUlPIG1lbW9yeSByZWdpb24KKyAqIEBuYW1lOgkJbmFtZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBmb3IgaWRlbnRpZmljYXRpb24KICAqIEBhZGRyOgkJYWRkcmVzcyBvZiB0aGUgZGV2aWNlJ3MgbWVtb3J5CiAgKiBAc2l6ZToJCXNpemUgb2YgSU8KICAqIEBtZW10eXBlOgkJdHlwZSBvZiBtZW1vcnkgYWRkciBwb2ludHMgdG8KQEAgLTI5LDYgKzMwLDcgQEAKICAqIEBtYXA6CQlmb3IgdXNlIGJ5IHRoZSBVSU8gY29yZSBvbmx5LgogICovCiBzdHJ1Y3QgdWlvX21lbSB7CisJY29uc3QgY2hhcgkJKm5hbWU7CiAJdW5zaWduZWQgbG9uZwkJYWRkcjsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwogCWludAkJCW1lbXR5cGU7CkBAIC00MiwxMiArNDQsMTQgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgdWlvX3BvcnQgLSBkZXNjcmlwdGlvbiBvZiBhIFVJTyBwb3J0IHJlZ2lvbgorICogQG5hbWU6CQluYW1lIG9mIHRoZSBwb3J0IHJlZ2lvbiBmb3IgaWRlbnRpZmljYXRpb24KICAqIEBzdGFydDoJCXN0YXJ0IG9mIHBvcnQgcmVnaW9uCiAgKiBAc2l6ZToJCXNpemUgb2YgcG9ydCByZWdpb24KICAqIEBwb3J0dHlwZToJCXR5cGUgb2YgcG9ydCAoc2VlIFVJT19QT1JUXyogYmVsb3cpCiAgKiBAcG9ydGlvOgkJZm9yIHVzZSBieSB0aGUgVUlPIGNvcmUgb25seS4KICAqLwogc3RydWN0IHVpb19wb3J0IHsKKwljb25zdCBjaGFyCQkqbmFtZTsKIAl1bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwogCWludAkJCXBvcnR0eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggODgwNzlmZC4uYzZiMmFiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC02NDMsMTg2ICs2NDMsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKioKLSAqIHVzYl9lbmRwb2ludF9udW0gLSBnZXQgdGhlIGVuZHBvaW50J3MgbnVtYmVyCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyBAZXBkJ3MgbnVtYmVyOiAwIHRvIDE1LgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfbnVtKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiBlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3R5cGUgLSBnZXQgdGhlIGVuZHBvaW50J3MgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgb25lIG9mIFVTQl9FTkRQT0lOVF9YRkVSX3tDT05UUk9MLCBJU09DLCBCVUxLLCBJTlR9IGFjY29yZGluZwotICogdG8gQGVwZCdzIHRyYW5zZmVyIHR5cGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF90eXBlKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiBlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9kaXJfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIElOIGRpcmVjdGlvbgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBJTiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfZGlyX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgT1VUIGRpcmVjdGlvbgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBPVVQsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgYnVsaywgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSyk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgY29udHJvbCB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGNvbnRyb2wsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2ludCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaW50ZXJydXB0LCBvdGhlcndpc2UgaXQgcmV0dXJucwotICogZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2ludCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaXNvY2hyb25vdXMsIG90aGVyd2lzZSBpdCByZXR1cm5zCi0gKiBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaXNvYygKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIElOCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBPVVQKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pbnRfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IElOCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X2luKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbigKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pc29jX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBPVVQKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSBcCiAJCShVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUkFOR0UgXApAQCAtMTM1Nyw4ICsxMTc3LDggQEAKIAl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfZmxhZ3M7CS8qIChpbikgVVJCX1NIT1JUX05PVF9PSyB8IC4uLiovCiAJdm9pZCAqdHJhbnNmZXJfYnVmZmVyOwkJLyogKGluKSBhc3NvY2lhdGVkIGRhdGEgYnVmZmVyICovCiAJZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWE7CS8qIChpbikgZG1hIGFkZHIgZm9yIHRyYW5zZmVyX2J1ZmZlciAqLwotCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwkvKiAoaW4pIGRhdGEgYnVmZmVyIGxlbmd0aCAqLwotCWludCBhY3R1YWxfbGVuZ3RoOwkJLyogKHJldHVybikgYWN0dWFsIHRyYW5zZmVyIGxlbmd0aCAqLworCXUzMiB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwkvKiAoaW4pIGRhdGEgYnVmZmVyIGxlbmd0aCAqLworCXUzMiBhY3R1YWxfbGVuZ3RoOwkJLyogKHJldHVybikgYWN0dWFsIHRyYW5zZmVyIGxlbmd0aCAqLwogCXVuc2lnbmVkIGNoYXIgKnNldHVwX3BhY2tldDsJLyogKGluKSBzZXR1cCBwYWNrZXQgKGNvbnRyb2wgb25seSkgKi8KIAlkbWFfYWRkcl90IHNldHVwX2RtYTsJCS8qIChpbikgZG1hIGFkZHIgZm9yIHNldHVwX3BhY2tldCAqLwogCWludCBzdGFydF9mcmFtZTsJCS8qIChtb2RpZnkpIHN0YXJ0IGZyYW1lIChJU08pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCmluZGV4IDliNDJiYWUuLmIxNDUxMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCkBAIC0xMDIsNyArMTAyLDcgQEAKICNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1JFQUQJMHgxNgogI2RlZmluZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0VfRFMJMHgxNwogCi0vKiBUaGUgTGluayBQb3dlciBNYW5nZW1lbnQgKExQTSkgRUNOIGRlZmluZXMgVVNCX1JFUV9URVNUX0FORF9TRVQgY29tbWFuZCwKKy8qIFRoZSBMaW5rIFBvd2VyIE1hbmFnZW1lbnQgKExQTSkgRUNOIGRlZmluZXMgVVNCX1JFUV9URVNUX0FORF9TRVQgY29tbWFuZCwKICAqIHVzZWQgYnkgaHVicyB0byBwdXQgcG9ydHMgaW50byBhIG5ldyBMMSBzdXNwZW5kIHN0YXRlLCBleGNlcHQgdGhhdCBpdAogICogZm9yZ290IHRvIGRlZmluZSBpdHMgbnVtYmVyIC4uLgogICovCkBAIC0zNTMsNiArMzUzLDE4NSBAQAogI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQJCTMKICNkZWZpbmUgVVNCX0VORFBPSU5UX01BWF9BREpVU1RBQkxFCTB4ODAKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfbnVtIC0gZ2V0IHRoZSBlbmRwb2ludCdzIG51bWJlcgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgQGVwZCdzIG51bWJlcjogMCB0byAxNS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X251bShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF90eXBlIC0gZ2V0IHRoZSBlbmRwb2ludCdzIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIG9uZSBvZiBVU0JfRU5EUE9JTlRfWEZFUl97Q09OVFJPTCwgSVNPQywgQlVMSywgSU5UfSBhY2NvcmRpbmcKKyAqIHRvIEBlcGQncyB0cmFuc2ZlciB0eXBlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfdHlwZShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfZGlyX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBJTiBkaXJlY3Rpb24KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgSU4sIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTik7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2Rpcl9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIE9VVCBkaXJlY3Rpb24KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgT1VULCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfYnVsayAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGJ1bGssIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2wgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGNvbnRyb2wgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBjb250cm9sLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfSU5UKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9pc29jIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGlzb2Nocm9ub3VzLCBvdGhlcndpc2UgaXQgcmV0dXJucworICogZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQyk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2ludF9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Cit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU4NCw4ICs3NjMsOCBAQAogCS8qIGNoYXB0ZXIgOSBhbmQgYXV0aGVudGljYXRpb24gKHdpcmVsZXNzKSBkZXZpY2Ugc3RhdGVzICovCiAJVVNCX1NUQVRFX0FUVEFDSEVELAogCVVTQl9TVEFURV9QT1dFUkVELAkJCS8qIHdpcmVkICovCi0JVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCwJCS8qIGF1dGggKi8KIAlVU0JfU1RBVEVfUkVDT05ORUNUSU5HLAkJCS8qIGF1dGggKi8KKwlVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVELAkJLyogYXV0aCAqLwogCVVTQl9TVEFURV9ERUZBVUxULAkJCS8qIGxpbWl0ZWQgZnVuY3Rpb24gKi8KIAlVU0JfU1RBVEVfQUREUkVTUywKIAlVU0JfU1RBVEVfQ09ORklHVVJFRCwJCQkvKiBtb3N0IGZ1bmN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaAppbmRleCA5MzVjMzgwLi5hY2Q3YjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaApAQCAtMjQ0LDYgKzI0NCwxMCBAQAogICoJdmFsdWU7IGl0IHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uLgogICogQHVuYmluZDogUmV2ZXJzZXMgQGJpbmQoKTsgY2FsbGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdW5yZWdpc3RlcmluZwogICoJdGhpcyBkcml2ZXIuCisgKiBAc3VzcGVuZDogTm90aWZpZXMgd2hlbiB0aGUgaG9zdCBzdG9wcyBzZW5kaW5nIFVTQiB0cmFmZmljLAorICoJYWZ0ZXIgZnVuY3Rpb24gbm90aWZpY2F0aW9ucworICogQHJlc3VtZTogTm90aWZpZXMgY29uZmlndXJhdGlvbiB3aGVuIHRoZSBob3N0IHJlc3RhcnRzIFVTQiB0cmFmZmljLAorICoJYmVmb3JlIGZ1bmN0aW9uIG5vdGlmaWNhdGlvbnMKICAqCiAgKiBEZXZpY2VzIGRlZmF1bHQgdG8gcmVwb3J0aW5nIHNlbGYgcG93ZXJlZCBvcGVyYXRpb24uICBEZXZpY2VzIHdoaWNoIHJlbHkKICAqIG9uIGJ1cyBwb3dlcmVkIG9wZXJhdGlvbiBzaG91bGQgcmVwb3J0IHRoaXMgaW4gdGhlaXIgQGJpbmQoKSBtZXRob2QuCkBAIC0yNjgsNiArMjcyLDEwIEBACiAKIAlpbnQJCQkoKmJpbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKIAlpbnQJCQkoKnVuYmluZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOworCisJLyogZ2xvYmFsIHN1c3BlbmQgaG9va3MgKi8KKwl2b2lkCQkJKCpzdXNwZW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CisJdm9pZAkJCSgqcmVzdW1lKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CiB9OwogCiBleHRlcm4gaW50IHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaAppbmRleCAwNDYwYTc0Li5iYmY0NWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaApAQCAtNTk4LDYgKzU5OCw3IEBACiAvKioKICAqIHVzYl9nYWRnZXRfdmJ1c19jb25uZWN0IC0gTm90aWZ5IGNvbnRyb2xsZXIgdGhhdCBWQlVTIGlzIHBvd2VyZWQKICAqIEBnYWRnZXQ6VGhlIGRldmljZSB3aGljaCBub3cgaGFzIFZCVVMgcG93ZXIuCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBhIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKG9yIEdQSU8pCiAgKiB0aGF0IGRldGVjdHMgYSBWQlVTIHBvd2VyIHNlc3Npb24gc3RhcnRpbmcuICBDb21tb24gcmVzcG9uc2VzIGluY2x1ZGUKQEAgLTYzNiw2ICs2MzcsNyBAQAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3ZidXNfZGlzY29ubmVjdCAtIG5vdGlmeSBjb250cm9sbGVyIGFib3V0IFZCVVMgc2Vzc2lvbiBlbmQKICAqIEBnYWRnZXQ6dGhlIGRldmljZSB3aG9zZSBWQlVTIHN1cHBseSBpcyBiZWluZyBkZXNjcmliZWQKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIFRoaXMgY2FsbCBpcyB1c2VkIGJ5IGEgZHJpdmVyIGZvciBhbiBleHRlcm5hbCB0cmFuc2NlaXZlciAob3IgR1BJTykKICAqIHRoYXQgZGV0ZWN0cyBhIFZCVVMgcG93ZXIgc2Vzc2lvbiBlbmRpbmcuICBDb21tb24gcmVzcG9uc2VzIGluY2x1ZGUKQEAgLTc5MiwxOSArNzk0LDIwIEBACiAvKioKICAqIHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBnYWRnZXQgZHJpdmVyCiAgKiBAZHJpdmVyOnRoZSBkcml2ZXIgYmVpbmcgcmVnaXN0ZXJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogQ2FsbCB0aGlzIGluIHlvdXIgZ2FkZ2V0IGRyaXZlcidzIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwKICAqIHRvIHRlbGwgdGhlIHVuZGVybHlpbmcgdXNiIGNvbnRyb2xsZXIgZHJpdmVyIGFib3V0IHlvdXIgZHJpdmVyLgogICogVGhlIGRyaXZlcidzIGJpbmQoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBiaW5kIGl0IHRvIGEKICAqIGdhZGdldCBiZWZvcmUgdGhpcyByZWdpc3RyYXRpb24gY2FsbCByZXR1cm5zLiAgSXQncyBleHBlY3RlZCB0aGF0CiAgKiB0aGUgYmluZCgpIGZ1bmN0aW9ucyB3aWxsIGJlIGluIGluaXQgc2VjdGlvbnMuCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIGEgY29udGV4dCB0aGF0IGNhbiBzbGVlcC4KICAqLwogaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKIAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIC0gdW5yZWdpc3RlciBhIGdhZGdldCBkcml2ZXIKICAqIEBkcml2ZXI6dGhlIGRyaXZlciBiZWluZyB1bnJlZ2lzdGVyZWQKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIENhbGwgdGhpcyBpbiB5b3VyIGdhZGdldCBkcml2ZXIncyBtb2R1bGUgY2xlYW51cCBmdW5jdGlvbiwKICAqIHRvIHRlbGwgdGhlIHVuZGVybHlpbmcgdXNiIGNvbnRyb2xsZXIgdGhhdCB5b3VyIGRyaXZlciBpcwpAQCAtODEzLDcgKzgxNiw2IEBACiAgKiB0byB1bmJpbmQoKSBhbmQgY2xlYW4gdXAgYW55IGRldmljZSBzdGF0ZSwgYmVmb3JlIHRoaXMgcHJvY2VkdXJlCiAgKiBmaW5hbGx5IHJldHVybnMuICBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIHVuYmluZCgpIGZ1bmN0aW9ucwogICogd2lsbCBpbiBpbiBleGl0IHNlY3Rpb25zLCBzbyBtYXkgbm90IGJlIGxpbmtlZCBpbiBzb21lIGtlcm5lbHMuCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIGEgY29udGV4dCB0aGF0IGNhbiBzbGVlcC4KICAqLwogaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaCBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCmluZGV4IDk0ZGY0ZmUuLjFhYWE4MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCkBAIC04MCwxMiArODAsMTcgQEAKIAogLyogZm9yIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgKi8KIGV4dGVybiBpbnQgb3RnX3NldF90cmFuc2NlaXZlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICopOworI2lmZGVmIENPTkZJR19OT1BfVVNCX1hDRUlWCitleHRlcm4gdm9pZCB1c2Jfbm9wX3hjZWl2X3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKHZvaWQpOworI2VuZGlmCiAKIAogLyogZm9yIHVzYiBob3N0IGFuZCBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVycyAqLwogZXh0ZXJuIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Z19nZXRfdHJhbnNjZWl2ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBvdGdfcHV0X3RyYW5zY2VpdmVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKik7CiAKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zdGFydF9obnAoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQogewpAQCAtMTAyLDYgKzEwNyw4IEBACiAKIAogLyogZm9yIHVzYiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVycyAqLworCisvKiBDb250ZXh0OiBjYW4gc2xlZXAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBvdGdfc2V0X3BlcmlwaGVyYWwoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLCBzdHJ1Y3QgdXNiX2dhZGdldCAqcGVyaXBoKQogewpAQCAtMTE0LDYgKzEyMSw3IEBACiAJcmV0dXJuIG90Zy0+c2V0X3Bvd2VyKG90ZywgbUEpOwogfQogCisvKiBDb250ZXh0OiBjYW4gc2xlZXAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBvdGdfc2V0X3N1c3BlbmQoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLCBpbnQgc3VzcGVuZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oIGIvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKaW5kZXggN2Y2YzYwMy4uMjUyNmYzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKQEAgLTE2LDQgKzE2LDcgQEAKIC8qIGRldmljZSBjYW4ndCBoYW5kbGUgU2V0LUludGVyZmFjZSByZXF1ZXN0cyAqLwogI2RlZmluZSBVU0JfUVVJUktfTk9fU0VUX0lOVEYJCTB4MDAwMDAwMDQKIAorLyogZGV2aWNlIGNhbid0IGhhbmRsZSBpdHMgQ29uZmlndXJhdGlvbiBvciBJbnRlcmZhY2Ugc3RyaW5ncyAqLworI2RlZmluZSBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUwkweDAwMDAwMDA4CisKICNlbmRpZiAvKiBfX0xJTlVYX1VTQl9RVUlSS1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oIGIvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCmluZGV4IDBhNmU2ZDQuLjM3ODM2YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKQEAgLTQ5LDQ4ICs0OSw0NSBAQAogICovCiAjZGVmaW5lCVJORElTX0NPTlRST0xfVElNRU9VVF9NUwkoNSAqIDEwMDApCiAKLQotI2RlZmluZSBjY3B1MiBfX2NvbnN0YW50X2NwdV90b19sZTMyCi0KLSNkZWZpbmUgUk5ESVNfTVNHX0NPTVBMRVRJT04JY2NwdTIoMHg4MDAwMDAwMCkKKyNkZWZpbmUgUk5ESVNfTVNHX0NPTVBMRVRJT04JY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCkKIAogLyogY29kZXMgZm9yICJtc2dfdHlwZSIgZmllbGQgb2Ygcm5kaXMgbWVzc2FnZXM7CiAgKiBvbmx5IHRoZSBkYXRhIGNoYW5uZWwgdXNlcyBwYWNrZXQgbWVzc2FnZXMgKG1heWJlIGJhdGNoZWQpOwogICogZXZlcnl0aGluZyBlbHNlIGdvZXMgb24gdGhlIGNvbnRyb2wgY2hhbm5lbC4KICAqLwotI2RlZmluZSBSTkRJU19NU0dfUEFDS0VUCWNjcHUyKDB4MDAwMDAwMDEpCS8qIDEtTiBwYWNrZXRzICovCi0jZGVmaW5lIFJORElTX01TR19JTklUCQljY3B1MigweDAwMDAwMDAyKQorI2RlZmluZSBSTkRJU19NU0dfUEFDS0VUCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCS8qIDEtTiBwYWNrZXRzICovCisjZGVmaW5lIFJORElTX01TR19JTklUCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQogI2RlZmluZSBSTkRJU19NU0dfSU5JVF9DCShSTkRJU19NU0dfSU5JVHxSTkRJU19NU0dfQ09NUExFVElPTikKLSNkZWZpbmUgUk5ESVNfTVNHX0hBTFQJCWNjcHUyKDB4MDAwMDAwMDMpCi0jZGVmaW5lIFJORElTX01TR19RVUVSWQkJY2NwdTIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgUk5ESVNfTVNHX0hBTFQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDMpCisjZGVmaW5lIFJORElTX01TR19RVUVSWQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKICNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZX0MJKFJORElTX01TR19RVUVSWXxSTkRJU19NU0dfQ09NUExFVElPTikKLSNkZWZpbmUgUk5ESVNfTVNHX1NFVAkJY2NwdTIoMHgwMDAwMDAwNSkKKyNkZWZpbmUgUk5ESVNfTVNHX1NFVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKICNkZWZpbmUgUk5ESVNfTVNHX1NFVF9DCQkoUk5ESVNfTVNHX1NFVHxSTkRJU19NU0dfQ09NUExFVElPTikKLSNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUCQljY3B1MigweDAwMDAwMDA2KQorI2RlZmluZSBSTkRJU19NU0dfUkVTRVQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCiAjZGVmaW5lIFJORElTX01TR19SRVNFVF9DCShSTkRJU19NU0dfUkVTRVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19JTkRJQ0FURQljY3B1MigweDAwMDAwMDA3KQotI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFCWNjcHUyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFJORElTX01TR19JTkRJQ0FURQljcHVfdG9fbGUzMigweDAwMDAwMDA3KQorI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCiAjZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkVfQwkoUk5ESVNfTVNHX0tFRVBBTElWRXxSTkRJU19NU0dfQ09NUExFVElPTikKIAogLyogY29kZXMgZm9yICJzdGF0dXMiIGZpZWxkIG9mIGNvbXBsZXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUJUk5ESVNfU1RBVFVTX1NVQ0NFU1MJCWNjcHUyKDB4MDAwMDAwMDApCi0jZGVmaW5lCVJORElTX1NUQVRVU19GQUlMVVJFCQljY3B1MigweGMwMDAwMDAxKQotI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCWNjcHUyKDB4YzAwMTAwMTUpCi0jZGVmaW5lCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVECWNjcHUyKDB4YzAwMDAwYmIpCi0jZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCWNjcHUyKDB4NDAwMTAwMGIpCi0jZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCWNjcHUyKDB4NDAwMTAwMGMpCisjZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZQlSTkRJU19TVEFUVVNfRkFJTFVSRQkJY3B1X3RvX2xlMzIoMHhjMDAwMDAwMSkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQljcHVfdG9fbGUzMigweGMwMDEwMDE1KQorI2RlZmluZQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAljcHVfdG9fbGUzMigweGMwMDAwMGJiKQorI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVAljcHVfdG9fbGUzMigweDQwMDEwMDBiKQorI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVAljcHVfdG9fbGUzMigweDQwMDEwMDBjKQogCiAvKiBjb2RlcyBmb3IgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0gKi8KLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1VOU1BFQ0lGSUVECWNjcHUyKDB4MDAwMDAwMDApCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19MQU4JY2NwdTIoMHgwMDAwMDAwMSkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0NBQkxFX01PREVNCWNjcHUyKDB4MDAwMDAwMDIpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9QSE9ORV9MSU5FCWNjcHUyKDB4MDAwMDAwMDMpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9QT1dFUl9MSU5FCWNjcHUyKDB4MDAwMDAwMDQpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9EU0wJCWNjcHUyKDB4MDAwMDAwMDUpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9GSUJSRV9DSEFOTkVMCWNjcHUyKDB4MDAwMDAwMDYpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV8xMzk0CQljY3B1MigweDAwMDAwMDA3KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfV0FOCWNjcHUyKDB4MDAwMDAwMDgpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9NQVgJCWNjcHUyKDB4MDAwMDAwMDkpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9VTlNQRUNJRklFRAljcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfTEFOCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9DQUJMRV9NT0RFTQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fUEhPTkVfTElORQljcHVfdG9fbGUzMigweDAwMDAwMDAzKQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fUE9XRVJfTElORQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fRFNMCQljcHVfdG9fbGUzMigweDAwMDAwMDA1KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fRklCUkVfQ0hBTk5FTAljcHVfdG9fbGUzMigweDAwMDAwMDA2KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fMTM5NAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX1dBTgljcHVfdG9fbGUzMigweDAwMDAwMDA4KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fTUFYCQljcHVfdG9fbGUzMigweDAwMDAwMDA5KQogCiBzdHJ1Y3Qgcm5kaXNfZGF0YV9oZHIgewogCV9fbGUzMgltc2dfdHlwZTsJCS8qIFJORElTX01TR19QQUNLRVQgKi8KQEAgLTIyOCwyNCArMjI1LDI0IEBACiAgKiB0aGVyZSBhcmUgZ29icyBtb3JlIHRoYXQgbWF5IG9wdGlvbmFsbHkgYmUgc3VwcG9ydGVkLiAgV2UnbGwgYXZvaWQgYXMgbXVjaAogICogb2YgdGhhdCBtZXNzIGFzIHBvc3NpYmxlLgogICovCi0jZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUwljY3B1MigweDAxMDEwMTAxKQotI2RlZmluZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRQljY3B1MigweDAwMDEwMTA2KQotI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUgljY3B1MigweDAwMDEwMTBlKQotI2RlZmluZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTQkJY2NwdTIoMHgwMDAxMDIwMikKKyNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCWNwdV90b19sZTMyKDB4MDEwMTAxMDEpCisjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFCWNwdV90b19sZTMyKDB4MDAwMTAxMDYpCisjZGVmaW5lIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSCWNwdV90b19sZTMyKDB4MDAwMTAxMGUpCisjZGVmaW5lIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNCQljcHVfdG9fbGUzMigweDAwMDEwMjAyKQogCiAvKiBwYWNrZXQgZmlsdGVyIGJpdHMgdXNlZCBieSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiAqLwotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRAkJY2NwdTIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUCQljY3B1MigweDAwMDAwMDAyKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCQljY3B1MigweDAwMDAwMDA0KQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QJCWNjcHUyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1NPVVJDRV9ST1VUSU5HCWNjcHUyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTCQljY3B1MigweDAwMDAwMDIwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9TTVQJCQljY3B1MigweDAwMDAwMDQwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfTE9DQUwJCWNjcHUyKDB4MDAwMDAwODApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0dST1VQCQkJY2NwdTIoMHgwMDAwMTAwMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0ZVTkNUSU9OQUwJY2NwdTIoMHgwMDAwMjAwMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTAkJY2NwdTIoMHgwMDAwNDAwMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfTUFDX0ZSQU1FCQljY3B1MigweDAwMDA4MDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1NPVVJDRV9ST1VUSU5HCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTCQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9TTVQJCQljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfTE9DQUwJCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0dST1VQCQkJY3B1X3RvX2xlMzIoMHgwMDAwMTAwMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0ZVTkNUSU9OQUwJY3B1X3RvX2xlMzIoMHgwMDAwMjAwMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTAkJY3B1X3RvX2xlMzIoMHgwMDAwNDAwMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfTUFDX0ZSQU1FCQljcHVfdG9fbGUzMigweDAwMDA4MDAwKQogCiAvKiBkZWZhdWx0IGZpbHRlciB1c2VkIHdpdGggUk5ESVMgZGV2aWNlcyAqLwogI2RlZmluZSBSTkRJU19ERUZBVUxUX0ZJTFRFUiAoIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggMGI4NjE3YS4uYjk1ODQyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTEzMCw3ICsxMzAsOCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlCQkqZGV2OwogCXN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlcgkqdHlwZTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmludGVyZmFjZTsKLQl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOworCXVuc2lnbmVkIGNoYXIJCQlkaXNjb25uZWN0ZWQ6MTsKKwl1bnNpZ25lZCBjaGFyCQkJc3VzcGVuZGluZzoxOwogCXVuc2lnbmVkIGNoYXIJCQltaW5vcjsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRzOwogCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydF9wb2ludGVyczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKaW5kZXggN2QzODIyMi4uMzZmYWJiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKQEAgLTE3Niw2ICsxNzYsMTEgQEAKIAlzaXplX3QJCQlsZW5ndGg7CiB9OwogCitleHRlcm4gaW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gdm9pZCB1c2JuZXRfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gaW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSk7CiAKIGV4dGVybiBpbnQgdXNibmV0X2dldF9lbmRwb2ludHMoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKIGV4dGVybiB2b2lkIHVzYm5ldF9kZWZlcl9rZXZlbnQgKHN0cnVjdCB1c2JuZXQgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IDFlZWExYWIuLjNkMTVmYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtOTYsMzkgKzk2LDI2IEBACiAjZGVmaW5lIFVTX1BSX0NCSQkweDAwCQkvKiBDb250cm9sL0J1bGsvSW50ZXJydXB0ICovCiAjZGVmaW5lIFVTX1BSX0NCCTB4MDEJCS8qIENvbnRyb2wvQnVsayB3L28gaW50ZXJydXB0ICovCiAjZGVmaW5lIFVTX1BSX0JVTEsJMHg1MAkJLyogYnVsayBvbmx5ICovCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCisKICNkZWZpbmUgVVNfUFJfVVNCQVQJMHg4MAkJLyogU0NNLUFUQVBJIGJyaWRnZSAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQogI2RlZmluZSBVU19QUl9FVVNCX1NERFIwOQkweDgxCS8qIFNDTS1TQ1NJIGJyaWRnZSBmb3IgU0REUi0wOSAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQogI2RlZmluZSBVU19QUl9TRERSNTUJMHg4MgkJLyogU0REUi01NSAobWFkZSB1cCkgKi8KLSNlbmRpZgogI2RlZmluZSBVU19QUl9EUENNX1VTQiAgMHhmMAkJLyogQ29tYmluYXRpb24gQ0IvU0REUjA5ICovCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KICNkZWZpbmUgVVNfUFJfRlJFRUNPTSAgIDB4ZjEJCS8qIEZyZWVjb20gKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCiAjZGVmaW5lIFVTX1BSX0RBVEFGQUIgICAweGYyCQkvKiBEYXRhZmFiIGNoaXBzZXRzICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKICNkZWZpbmUgVVNfUFJfSlVNUFNIT1QgIDB4ZjMJCS8qIExleGFyIEp1bXBzaG90ICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCiAjZGVmaW5lIFVTX1BSX0FMQVVEQSAgICAweGY0CQkvKiBBbGF1ZGEgY2hpcHNldHMgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQogI2RlZmluZSBVU19QUl9LQVJNQSAgICAgMHhmNQkJLyogUmlvIEthcm1hICovCi0jZW5kaWYKIAogI2RlZmluZSBVU19QUl9ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCiAKIC8qCiAgKi8KK2V4dGVybiBpbnQgdXNiX3VzdWFsX2lnbm9yZV9kZXZpY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9zdG9yYWdlX3VzYl9pZHNbXTsKKwogI2lmZGVmIENPTkZJR19VU0JfTElCVVNVQUwKIAotZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkc1tdOwogZXh0ZXJuIHZvaWQgdXNiX3VzdWFsX3NldF9wcmVzZW50KGludCB0eXBlKTsKIGV4dGVybiB2b2lkIHVzYl91c3VhbF9jbGVhcl9wcmVzZW50KGludCB0eXBlKTsKIGV4dGVybiBpbnQgdXNiX3VzdWFsX2NoZWNrX3R5cGUoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKiwgaW50IHR5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91dGltZS5oIGIvaW5jbHVkZS9saW51eC91dGltZS5oCmluZGV4IDY0MGJlNmEuLjVjZGY2NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXRpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKQEAgLTQsOCArNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHV0aW1idWYgewotCXRpbWVfdCBhY3RpbWU7Ci0JdGltZV90IG1vZHRpbWU7CisJX19rZXJuZWxfdGltZV90IGFjdGltZTsKKwlfX2tlcm5lbF90aW1lX3QgbW9kdGltZTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAppbmRleCAzZWZhODZjLi4yNDIzNDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaApAQCAtMjIsMTEgKzIyLDE5IEBACiAjZGVmaW5lIFZJUlRJT19ORVRfRl9IT1NUX0VDTgkxMwkvKiBIb3N0IGNhbiBoYW5kbGUgVFNPWzZdIHcvIEVDTiBpbi4gKi8KICNkZWZpbmUgVklSVElPX05FVF9GX0hPU1RfVUZPCTE0CS8qIEhvc3QgY2FuIGhhbmRsZSBVRk8gaW4uICovCiAjZGVmaW5lIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYJMTUJLyogSG9zdCBjYW4gbWVyZ2UgcmVjZWl2ZSBidWZmZXJzLiAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfU1RBVFVTCTE2CS8qIHZpcnRpb19uZXRfY29uZmlnLnN0YXR1cyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NUUkxfVlEJMTcJLyogQ29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkxOAkvKiBDb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBwb3J0ICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4JMTkJLyogQ29udHJvbCBjaGFubmVsIFZMQU4gZmlsdGVyaW5nICovCisKKyNkZWZpbmUgVklSVElPX05FVF9TX0xJTktfVVAJMQkvKiBMaW5rIGlzIHVwICovCiAKIHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZwogewogCS8qIFRoZSBjb25maWcgZGVmaW5pbmcgbWFjIGFkZHJlc3MgKGlmIFZJUlRJT19ORVRfRl9NQUMpICovCiAJX191OCBtYWNbNl07CisJLyogU2VlIFZJUlRJT19ORVRfRl9TVEFUVVMgYW5kIFZJUlRJT19ORVRfU18qIGFib3ZlICovCisJX191MTYgc3RhdHVzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogVGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdC4gIElmIHlvdSBkb24ndApAQCAtNTQsNCArNjIsNjcgQEAKIAlfX3UxNiBudW1fYnVmZmVyczsJLyogTnVtYmVyIG9mIG1lcmdlZCByeCBidWZmZXJzICovCiB9OwogCisvKgorICogQ29udHJvbCB2aXJ0cXVldWUgZGF0YSBzdHJ1Y3R1cmVzCisgKgorICogVGhlIGNvbnRyb2wgdmlydHF1ZXVlIGV4cGVjdHMgYSBoZWFkZXIgaW4gdGhlIGZpcnN0IHNnIGVudHJ5CisgKiBhbmQgYW4gYWNrL3N0YXR1cyByZXNwb25zZSBpbiB0aGUgbGFzdCBlbnRyeS4gIERhdGEgZm9yIHRoZQorICogY29tbWFuZCBnb2VzIGluIGJldHdlZW4uCisgKi8KK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIHsKKwlfX3U4IGNsYXNzOworCV9fdTggY21kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiBfX3U4IHZpcnRpb19uZXRfY3RybF9hY2s7CisKKyNkZWZpbmUgVklSVElPX05FVF9PSyAgICAgMAorI2RlZmluZSBWSVJUSU9fTkVUX0VSUiAgICAxCisKKy8qCisgKiBDb250cm9sIHRoZSBSWCBtb2RlLCBpZS4gcHJvbWlzdWNvdXMgYW5kIGFsbG11bHRpLiAgUFJPTUlTQyBhbmQKKyAqIEFMTE1VTFRJIGNvbW1hbmRzIHJlcXVpcmUgYW4gIm91dCIgc2cgZW50cnkgY29udGFpbmluZyBhIDEgYnl0ZQorICogc3RhdGUgdmFsdWUsIHplcm8gPSBkaXNhYmxlLCBub24temVybyA9IGVuYWJsZS4gIFRoZXNlIGNvbW1hbmRzCisgKiBhcmUgc3VwcG9ydGVkIHdpdGggdGhlIFZJUlRJT19ORVRfRl9DVFJMX1JYIGZlYXR1cmUuCisgKi8KKyNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYICAgIDAKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWF9QUk9NSVNDICAgICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYX0FMTE1VTFRJICAgICAxCisKKy8qCisgKiBDb250cm9sIHRoZSBNQUMgZmlsdGVyIHRhYmxlLgorICoKKyAqIFRoZSBNQUMgZmlsdGVyIHRhYmxlIGlzIG1hbmFnZWQgYnkgdGhlIGh5cGVydmlzb3IsIHRoZSBndWVzdCBzaG91bGQKKyAqIGFzc3VtZSB0aGUgc2l6ZSBpcyBpbmZpbml0ZS4gIEZpbHRlcmluZyBzaG91bGQgYmUgY29uc2lkZXJlZAorICogbm9uLXBlcmZlY3QsIGllLiBiYXNlZCBvbiBoeXBlcnZpc29yIHJlc291cmNlcywgdGhlIGd1ZXN0IG1heQorICogcmVjZWl2ZWQgcGFja2V0cyBmcm9tIHNvdXJjZXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZmlsdGVyIGxpc3QuCisgKgorICogSW4gYWRkaXRpb24gdG8gdGhlIGNsYXNzL2NtZCBoZWFkZXIsIHRoZSBUQUJMRV9TRVQgY29tbWFuZCByZXF1aXJlcworICogdHdvIG91dCBzY2F0dGVybGlzdHMuICBFYWNoIGNvbnRhaW5zIGEgNCBieXRlIGNvdW50IG9mIGVudHJpZXMgZm9sbG93ZWQKKyAqIGJ5IGEgY29uY2F0ZW5hdGVkIGJ5dGUgc3RyZWFtIG9mIHRoZSBFVEhfQUxFTiBNQUMgYWRkcmVzc2VzLiAgVGhlCisgKiBmaXJzdCBzZyBsaXN0IGNvbnRhaW5zIHVuaWNhc3QgYWRkcmVzc2VzLCB0aGUgc2Vjb25kIGlzIGZvciBtdWx0aWNhc3QuCisgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCBpZiB0aGUgVklSVElPX05FVF9GX0NUUkxfUlggZmVhdHVyZQorICogaXMgYXZhaWxhYmxlLgorICovCitzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX21hYyB7CisJX191MzIgZW50cmllczsKKwlfX3U4IG1hY3NbXVtFVEhfQUxFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9NQUMgICAgMQorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX01BQ19UQUJMRV9TRVQgICAgICAgIDAKKworLyoKKyAqIENvbnRyb2wgVkxBTiBmaWx0ZXJpbmcKKyAqCisgKiBUaGUgVkxBTiBmaWx0ZXIgdGFibGUgaXMgY29udHJvbGxlZCB2aWEgYSBzaW1wbGUgQUREL0RFTCBpbnRlcmZhY2UuCisgKiBWTEFOIElEcyBub3QgYWRkZWQgbWF5IGJlIGZpbHRlcmQgYnkgdGhlIGh5cGVydmlzb3IuICBEZWwgaXMgdGhlCisgKiBvcHBvc2l0ZSBvZiBhZGQuICBCb3RoIGNvbW1hbmRzIGV4cGVjdCBhbiBvdXQgZW50cnkgY29udGFpbmluZyBhIDIKKyAqIGJ5dGUgVkxBTiBJRC4gIFZMQU4gZmlsdGVydGluZyBpcyBhdmFpbGFibGUgd2l0aCB0aGUKKyAqIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4gZmVhdHVyZSBiaXQuCisgKi8KKyNkZWZpbmUgVklSVElPX05FVF9DVFJMX1ZMQU4gICAgICAgMgorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1ZMQU5fQUREICAgICAgICAgICAgIDAKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0RFTCAgICAgICAgICAgICAxCisKICNlbmRpZiAvKiBfTElOVVhfVklSVElPX05FVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IDljMDg5MGMuLmE0M2ViZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC05NSw2ICs5NSw5IEBACiAKIGV4dGVybiBpbnQgbWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgcGdwcm90X3QgcHJvdCwKIAkJCXN0cnVjdCBwYWdlICoqKnBhZ2VzKTsKK2V4dGVybiBpbnQgbWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcyk7CitleHRlcm4gdm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKiBBbGxvY2F0ZS9kZXN0cm95IGEgJ3ZtYWxsb2MnIFZNIGFyZWEuICovCkBAIC0xMTAsNSArMTEzLDYgQEAKICAqLwogZXh0ZXJuIHJ3bG9ja190IHZtbGlzdF9sb2NrOwogZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtbGlzdDsKK2V4dGVybiBfX2luaXQgdm9pZCB2bV9hcmVhX3JlZ2lzdGVyX2Vhcmx5KHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCBzaXplX3QgYWxpZ24pOwogCiAjZW5kaWYgLyogX0xJTlVYX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oCmluZGV4IGJhMGM0OTMuLmM3MDNlMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlXQVJOX09OKDEpOwogCX0gZWxzZQogCQlzbnByaW50ZihoZWFkLCBoZWFkX3NpemUsICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXYtPmJ1c19pZCk7CisJCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaCBiL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKaW5kZXggNzQxOThmNS4uZDUxNDhhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCkBAIC0yMDcsNiArMjA3LDcgQEAKIAlJMjQwME1fUFRfVFJBQ0UsCS8qIEZvciBkZXZpY2UgZGVidWcgKi8KIAlJMjQwME1fUFRfUkVTRVRfV0FSTSwJLyogZGV2aWNlIHJlc2V0ICovCiAJSTI0MDBNX1BUX1JFU0VUX0NPTEQsCS8qIFVTQlt0cmFuc3BvcnRdIHJlc2V0LCBsaWtlIHJlY29ubmVjdCAqLworCUkyNDAwTV9QVF9FREFUQSwJLyogRXh0ZW5kZWQgUlggZGF0YSAqLwogCUkyNDAwTV9QVF9JTExFR0FMCiB9OwogCkBAIC0yMjEsNiArMjIyLDQ4IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAKKy8qCisgKiBQYXlsb2FkIGZvciBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIE5ldyBpbiBmdyB2MS40CisgKgorICogQHJlb3JkZXI6IGlmIHRoaXMgcGF5bG9hZCBoYXMgdG8gYmUgcmVvcmRlciBvciBub3QgKGFuZCBob3cpCisgKiBAY3M6IHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhlIHBhY2tldCwgYXMgZGVmaW5lZCBwZXIgKDgwMi4xNmUKKyAqICAgICBUMTEuMTMuMTkuMSkuIEN1cnJlbnRseSBvbmx5IDIgKElQdjQgcGFja2V0KSBzdXBwb3J0ZWQuCisgKgorICogVGhpcyBpcyBwcmVmaXhlZCB0byBlYWNoIGFuZCBldmVyeSBJTkNPTUlORyBEQVRBIHBhY2tldC4KKyAqLworc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIgeworCV9fbGUzMiByZW9yZGVyOwkJLyogYml0cyBkZWZpbmVkIGluIGkyNDAwbV9ybyAqLworCV9fdTggY3M7CisJX191OCByZXNlcnZlZFsxMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIGkyNDAwbV9jcyB7CisJSTI0MDBNX0NTX0lQVjRfMCA9IDAsCisJSTI0MDBNX0NTX0lQVjQgPSAyLAorfTsKKworZW51bSBpMjQwMG1fcm8geworCUkyNDAwTV9ST19ORUVERUQgICAgID0gMHgwMSwKKwlJMjQwME1fUk9fVFlQRSAgICAgICA9IDB4MDMsCisJSTI0MDBNX1JPX1RZUEVfU0hJRlQgPSAxLAorCUkyNDAwTV9ST19DSU4gICAgICAgID0gMHgwZiwKKwlJMjQwME1fUk9fQ0lOX1NISUZUICA9IDQsCisJSTI0MDBNX1JPX0ZCTiAgICAgICAgPSAweDA3ZmYsCisJSTI0MDBNX1JPX0ZCTl9TSElGVCAgPSA4LAorCUkyNDAwTV9ST19TTiAgICAgICAgID0gMHgwN2ZmLAorCUkyNDAwTV9ST19TTl9TSElGVCAgID0gMjEsCit9OworCitlbnVtIGkyNDAwbV9yb190eXBlIHsKKwlJMjQwME1fUk9fVFlQRV9SRVNFVCA9IDAsCisJSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCUkyNDAwTV9ST19UWVBFX1dTLAorCUkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKK307CisKKwogLyogTWlzYyBjb25zdGFudHMgKi8KIGVudW0gewogCUkyNDAwTV9QTF9QQUQgPSAxNiwJLyogUGF5bG9hZCBkYXRhIHNpemUgYWxpZ25tZW50ICovCkBAIC0zODEsNiArNDI0LDkgQEAKIAlJMjQwME1fVExWX1JGX1NUQVRVUyA9IDE2MywKIAlJMjQwME1fVExWX0RFVklDRV9SRVNFVF9UWVBFID0gMTMyLAogCUkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyA9IDYwMSwKKwlJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQgPSA2MTEsCisJSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUID0gNjE0LAorCUkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUiA9IDYxNSwKIH07CiAKIApAQCAtNTA5LDQgKzU1NSwyNyBAQAogCV9fbGUzMiBtZWRpYV9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisKKy8qIE5ldyBpbiB2MS40ICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fbGUzMiB0aW1lb3V0OwkvKiAxMDAgdG8gMzAwMDAwIG1zIFs1bWluXSwgMTAwIGluY3JlbWVudHMKKwkJCSAqIDAgZGlzYWJsZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE5ldyBpbiB2MS40IC0tIGZvciBiYWNrd2FyZCBjb21wYXQsIHdpbGwgYmUgcmVtb3ZlZCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2QyaF9kYXRhX2Zvcm1hdCB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX3U4IGZvcm1hdDsgCQkvKiAwIG9sZCBmb3JtYXQsIDEgZW5oYW5jZWQgKi8KKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTmV3IGluIHYxLjQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kbF9ob3N0X3Jlb3JkZXIgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX191OCByZW9yZGVyOyAJCS8qIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCAqLworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKICNlbmRpZiAvKiAjaWZuZGVmIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggZDc5NThmOS4uY2IyNDIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtNTc3LDE4ICs1NzcsMjIgQEAKICNkZWZpbmUgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTAk4CiAjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19DT05UUk9MCQk5CiAjZGVmaW5lIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VECQkxMAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UCTExCisjZGVmaW5lIElXX0FVVEhfTUZQCQkJMTIKIAogLyogSVdfQVVUSF9XUEFfVkVSU0lPTiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRAkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBCQkweDAwMDAwMDAyCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMgkweDAwMDAwMDA0CiAKLS8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSIGFuZCBJV19BVVRIX0dST1VQX0NJUEhFUiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KKy8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSLCBJV19BVVRIX0dST1VQX0NJUEhFUiwgYW5kIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQKKyAqIHZhbHVlcyAoYml0IGZpZWxkKSAqLwogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9OT05FCTB4MDAwMDAwMDEKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfV0VQNDAJMHgwMDAwMDAwMgogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9US0lQCTB4MDAwMDAwMDQKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfQ0NNUAkweDAwMDAwMDA4CiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDEwNAkweDAwMDAwMDEwCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0FFU19DTUFDCTB4MDAwMDAwMjAKIAogLyogSVdfQVVUSF9LRVlfTUdNVCB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgJMQpAQCAtNjA0LDYgKzYwOCwxMSBAQAogI2RlZmluZSBJV19BVVRIX1JPQU1JTkdfRElTQUJMRQkxCS8qIHVzZXIgc3BhY2UgcHJvZ3JhbSB1c2VkIGZvciByb2FtaW5nCiAJCQkJCSAqIGNvbnRyb2wgKi8KIAorLyogSVdfQVVUSF9NRlAgKG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbikgdmFsdWVzICovCisjZGVmaW5lIElXX0FVVEhfTUZQX0RJU0FCTEVECTAJLyogTUZQIGRpc2FibGVkICovCisjZGVmaW5lIElXX0FVVEhfTUZQX09QVElPTkFMCTEJLyogTUZQIG9wdGlvbmFsICovCisjZGVmaW5lIElXX0FVVEhfTUZQX1JFUVVJUkVECTIJLyogTUZQIHJlcXVpcmVkICovCisKIC8qIFNJT0NTSVdFTkNPREVFWFQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVdfRU5DT0RFX1NFUV9NQVhfU0laRQk4CiAvKiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAtPmFsZyAqLwpAQCAtNjEyLDYgKzYyMSw3IEBACiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfVEtJUAkyCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfQ0NNUAkzCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfUE1LCTQKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19BRVNfQ01BQwk1CiAvKiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAtPmV4dF9mbGFncyAqLwogI2RlZmluZSBJV19FTkNPREVfRVhUX1RYX1NFUV9WQUxJRAkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElECTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGZybS5oIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKaW5kZXggNTJmM2FiZC4uMmQ0ZWMxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC94ZnJtLmgKKysrIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKQEAgLTU4LDcgKzU4LDcgQEAKIAlfX3U4CXByZWZpeGxlbl9zOwogCV9fdTgJcHJvdG87CiAJaW50CWlmaW5kZXg7Ci0JdWlkX3QJdXNlcjsKKwlfX2tlcm5lbF91aWQzMl90CXVzZXI7CiB9OwogCiAjZGVmaW5lIFhGUk1fSU5GICh+KF9fdTY0KTApCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKaW5kZXggZDQwOWQ0OC4uODM3NmJkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaApAQCAtMTYsMzMgKzE2LDMzIEBACiAvKiBCbG9jayBDb250cm9sIEluZm9ybWF0aW9uICovCiAKIHN0cnVjdCBpbmZ0bF9iY2kgewotCXVpbnQ4X3QgRUNDc2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKKwlfX3U4IEVDQ3NpZ1s2XTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQxIHsKLQl1aW50MTZfdCB2aXJ0dWFsVW5pdE5vOwotCXVpbnQxNl90IHByZXZVbml0Tm87Ci0JdWludDhfdCBBTkFDOwotCXVpbnQ4X3QgTkFDczsKLQl1aW50OF90IHBhcml0eVBlckZpZWxkOwotCXVpbnQ4X3QgZGlzY2FyZGVkOworCV9fdTE2IHZpcnR1YWxVbml0Tm87CisJX191MTYgcHJldlVuaXRObzsKKwlfX3U4IEFOQUM7CisJX191OCBOQUNzOworCV9fdTggcGFyaXR5UGVyRmllbGQ7CisJX191OCBkaXNjYXJkZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQyIHsKLQl1aW50OF90IHBhcml0eVBlckZpZWxkOwotCXVpbnQ4X3QgQU5BQzsKLQl1aW50MTZfdCBwcmV2VW5pdE5vOwotCXVpbnQxNl90IHZpcnR1YWxVbml0Tm87Ci0JdWludDhfdCBOQUNzOwotCXVpbnQ4X3QgZGlzY2FyZGVkOworCV9fdTggcGFyaXR5UGVyRmllbGQ7CisJX191OCBBTkFDOworCV9fdTE2IHByZXZVbml0Tm87CisJX191MTYgdmlydHVhbFVuaXRObzsKKwlfX3U4IE5BQ3M7CisJX191OCBkaXNjYXJkZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdHRhaWwgewotCXVpbnQ4X3QgUmVzZXJ2ZWRbNF07Ci0JdWludDE2X3QgRXJhc2VNYXJrOwotCXVpbnQxNl90IEVyYXNlTWFyazE7CisJX191OCBSZXNlcnZlZFs0XTsKKwlfX3UxNiBFcmFzZU1hcms7CisJX191MTYgRXJhc2VNYXJrMTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGluZnRsX3VjaSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmggYi9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmgKaW5kZXggMDAxNjg1ZC4uZmE5NGIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaApAQCAtNyw2ICs3LDcgQEAKIAogLyogVGhpcyBmaWxlIGlzIGJsZXNzZWQgZm9yIGluY2x1c2lvbiBieSB1c2Vyc3BhY2UgKi8KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8ZW5kaWFuLmg+CiAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KIApAQCAtMTksOCArMjAsOCBAQAogCiBleHRlcm4gaW50IHRhcmdldF9lbmRpYW47CiAKLSNkZWZpbmUgdDE2KHgpICh7IHVpbnQxNl90IF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzE2KF9fYik7IH0pCi0jZGVmaW5lIHQzMih4KSAoeyB1aW50MzJfdCBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8zMihfX2IpOyB9KQorI2RlZmluZSB0MTYoeCkgKHsgX191MTYgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMTYoX19iKTsgfSkKKyNkZWZpbmUgdDMyKHgpICh7IF9fdTMyIF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzMyKF9fYik7IH0pCiAKICNkZWZpbmUgY3B1X3RvX2plMTYoeCkgKChqaW50MTZfdCl7dDE2KHgpfSkKICNkZWZpbmUgY3B1X3RvX2plMzIoeCkgKChqaW50MzJfdCl7dDMyKHgpfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaAppbmRleCBjNmM2MWNkLi5iNjU5NWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCkBAIC01LDE0ICs1LDE2IEBACiAjaWZuZGVmIF9fTVREX0FCSV9IX18KICNkZWZpbmUgX19NVERfQUJJX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IGVyYXNlX2luZm9fdXNlciB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKIH07CiAKIHN0cnVjdCBtdGRfb29iX2J1ZiB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKIAl1bnNpZ25lZCBjaGFyIF9fdXNlciAqcHRyOwogfTsKIApAQCAtNDgsMzAgKzUwLDMwIEBACiAjZGVmaW5lIE1URF9PVFBfVVNFUgkJMgogCiBzdHJ1Y3QgbXRkX2luZm9fdXNlciB7Ci0JdWludDhfdCB0eXBlOwotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IHNpemU7CSAvLyBUb3RhbCBzaXplIG9mIHRoZSBNVEQKLQl1aW50MzJfdCBlcmFzZXNpemU7Ci0JdWludDMyX3Qgd3JpdGVzaXplOwotCXVpbnQzMl90IG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKKwlfX3U4IHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAorCV9fdTMyIGVyYXNlc2l6ZTsKKwlfX3UzMiB3cml0ZXNpemU7CisJX191MzIgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQogCS8qIFRoZSBiZWxvdyB0d28gZmllbGRzIGFyZSBvYnNvbGV0ZSBhbmQgYnJva2VuLCBkbyBub3QgdXNlIHRoZW0KIAkgKiAoVE9ETzogcmVtb3ZlIGF0IHNvbWUgcG9pbnQpICovCi0JdWludDMyX3QgZWNjdHlwZTsKLQl1aW50MzJfdCBlY2NzaXplOworCV9fdTMyIGVjY3R5cGU7CisJX191MzIgZWNjc2l6ZTsKIH07CiAKIHN0cnVjdCByZWdpb25faW5mb191c2VyIHsKLQl1aW50MzJfdCBvZmZzZXQ7CQkvKiBBdCB3aGljaCB0aGlzIHJlZ2lvbiBzdGFydHMsCisJX191MzIgb2Zmc2V0OwkJLyogQXQgd2hpY2ggdGhpcyByZWdpb24gc3RhcnRzLAogCQkJCQkgKiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1URCAqLwotCXVpbnQzMl90IGVyYXNlc2l6ZTsJCS8qIEZvciB0aGlzIHJlZ2lvbiAqLwotCXVpbnQzMl90IG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhpcyByZWdpb24gKi8KLQl1aW50MzJfdCByZWdpb25pbmRleDsKKwlfX3UzMiBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KKwlfX3UzMiBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgcmVnaW9uICovCisJX191MzIgcmVnaW9uaW5kZXg7CiB9OwogCiBzdHJ1Y3Qgb3RwX2luZm8gewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50MzJfdCBsb2NrZWQ7CisJX191MzIgc3RhcnQ7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGxvY2tlZDsKIH07CiAKICNkZWZpbmUgTUVNR0VUSU5GTwkJX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQpAQCAtODQsOCArODYsOCBAQAogI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPCV9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTVNFVE9PQlNFTAkJX0lPVygnTScsIDksIHN0cnVjdCBuYW5kX29vYmluZm8pCiAjZGVmaW5lIE1FTUdFVE9PQlNFTAkJX0lPUignTScsIDEwLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQotI2RlZmluZSBNRU1HRVRCQURCTE9DSwkJX0lPVygnTScsIDExLCBsb2ZmX3QpCi0jZGVmaW5lIE1FTVNFVEJBREJMT0NLCQlfSU9XKCdNJywgMTIsIGxvZmZfdCkKKyNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMSwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBNRU1TRVRCQURCTE9DSwkJX0lPVygnTScsIDEyLCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIE9UUFNFTEVDVAkJX0lPUignTScsIDEzLCBpbnQpCiAjZGVmaW5lIE9UUEdFVFJFR0lPTkNPVU5UCV9JT1coJ00nLCAxNCwgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05JTkZPCV9JT1coJ00nLCAxNSwgc3RydWN0IG90cF9pbmZvKQpAQCAtOTksMTUgKzEwMSwxNSBAQAogICogaW50ZXJmYWNlcwogICovCiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKLQl1aW50MzJfdCB1c2VlY2M7Ci0JdWludDMyX3QgZWNjYnl0ZXM7Ci0JdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKLQl1aW50MzJfdCBlY2Nwb3NbMzJdOworCV9fdTMyIHVzZWVjYzsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBvb2JmcmVlWzhdWzJdOworCV9fdTMyIGVjY3Bvc1szMl07CiB9OwogCiBzdHJ1Y3QgbmFuZF9vb2JmcmVlIHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBsZW5ndGg7CiB9OwogCiAjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTCTgKQEAgLTExNiw5ICsxMTgsOSBAQAogICogZGlhZ25vc2lzIGFuZCB0byBhbGxvdyBjcmVhdGlvbiBvZiByYXcgaW1hZ2VzCiAgKi8KIHN0cnVjdCBuYW5kX2VjY2xheW91dCB7Ci0JdWludDMyX3QgZWNjYnl0ZXM7Ci0JdWludDMyX3QgZWNjcG9zWzY0XTsKLQl1aW50MzJfdCBvb2JhdmFpbDsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBlY2Nwb3NbNjRdOworCV9fdTMyIG9vYmF2YWlsOwogCXN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107CiB9OwogCkBAIC0xMzEsMTAgKzEzMywxMCBAQAogICogQGJidGJsb2NrczoJbnVtYmVyIG9mIGJsb2NrcyByZXNlcnZlZCBmb3IgYmFkIGJsb2NrIHRhYmxlcwogICovCiBzdHJ1Y3QgbXRkX2VjY19zdGF0cyB7Ci0JdWludDMyX3QgY29ycmVjdGVkOwotCXVpbnQzMl90IGZhaWxlZDsKLQl1aW50MzJfdCBiYWRibG9ja3M7Ci0JdWludDMyX3QgYmJ0YmxvY2tzOworCV9fdTMyIGNvcnJlY3RlZDsKKwlfX3UzMiBmYWlsZWQ7CisJX191MzIgYmFkYmxvY2tzOworCV9fdTMyIGJidGJsb2NrczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaCBiL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCmluZGV4IDM5MGQyMWMuLjk4ZTllNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCkBAIC02LDMzICs2LDM1IEBACiAjaWZuZGVmIF9fTVREX05GVExfVVNFUl9IX18KICNkZWZpbmUgX19NVERfTkZUTF9VU0VSX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgbmZ0bF9iY2kgewogCXVuc2lnbmVkIGNoYXIgRUNDU2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFVuaXQgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgbmZ0bF91Y2kwIHsKLQl1aW50MTZfdCBWaXJ0VW5pdE51bTsKLQl1aW50MTZfdCBSZXBsVW5pdE51bTsKLQl1aW50MTZfdCBTcGFyZVZpcnRVbml0TnVtOwotCXVpbnQxNl90IFNwYXJlUmVwbFVuaXROdW07CisJX191MTYgVmlydFVuaXROdW07CisJX191MTYgUmVwbFVuaXROdW07CisJX191MTYgU3BhcmVWaXJ0VW5pdE51bTsKKwlfX3UxNiBTcGFyZVJlcGxVbml0TnVtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdGxfdWNpMSB7Ci0JdWludDMyX3QgV2VhckluZm87Ci0JdWludDE2X3QgRXJhc2VNYXJrOwotCXVpbnQxNl90IEVyYXNlTWFyazE7CisJX191MzIgV2VhckluZm87CisJX191MTYgRXJhc2VNYXJrOworCV9fdTE2IEVyYXNlTWFyazE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZ0bF91Y2kyIHsKLSAgICAgICAgdWludDE2X3QgRm9sZE1hcms7Ci0gICAgICAgIHVpbnQxNl90IEZvbGRNYXJrMTsKLQl1aW50MzJfdCB1bnVzZWQ7CisgICAgICAgIF9fdTE2IEZvbGRNYXJrOworICAgICAgICBfX3UxNiBGb2xkTWFyazE7CisJX191MzIgdW51c2VkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gbmZ0bF91Y2kgewpAQCAtNTAsOSArNTIsOSBAQAogCiBzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyIHsKIAljaGFyIERhdGFPcmdJRFs2XTsKLQl1aW50MTZfdCBOdW1FcmFzZVVuaXRzOwotCXVpbnQxNl90IEZpcnN0UGh5c2ljYWxFVU47Ci0JdWludDMyX3QgRm9ybWF0dGVkU2l6ZTsKKwlfX3UxNiBOdW1FcmFzZVVuaXRzOworCV9fdTE2IEZpcnN0UGh5c2ljYWxFVU47CisJX191MzIgRm9ybWF0dGVkU2l6ZTsKIAl1bnNpZ25lZCBjaGFyIFVuaXRTaXplRmFjdG9yOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaCBiL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKaW5kZXggMjk2ZWZhZS4uNDY2YTgzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC91YmktdXNlci5oCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIF9fVUJJX1VTRVJfSF9fCiAjZGVmaW5lIF9fVUJJX1VTRVJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKgogICogVUJJIGRldmljZSBjcmVhdGlvbiAodGhlIHNhbWUgYXMgTVREIGRldmljZSBhdHRhY2htZW50KQogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTE1Miw3ICsxNTQsNyBAQAogLyogQ3JlYXRlIGFuIFVCSSB2b2x1bWUgKi8KICNkZWZpbmUgVUJJX0lPQ01LVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMCwgc3RydWN0IHViaV9ta3ZvbF9yZXEpCiAvKiBSZW1vdmUgYW4gVUJJIHZvbHVtZSAqLwotI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBfX3MzMikKIC8qIFJlLXNpemUgYW4gVUJJIHZvbHVtZSAqLwogI2RlZmluZSBVQklfSU9DUlNWT0wgX0lPVyhVQklfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSkKIC8qIFJlLW5hbWUgdm9sdW1lcyAqLwpAQCAtMTY1LDI0ICsxNjcsMjQgQEAKIC8qIEF0dGFjaCBhbiBNVEQgZGV2aWNlICovCiAjZGVmaW5lIFVCSV9JT0NBVFQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY0LCBzdHJ1Y3QgdWJpX2F0dGFjaF9yZXEpCiAvKiBEZXRhY2ggYW4gTVREIGRldmljZSAqLwotI2RlZmluZSBVQklfSU9DREVUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0RFVCBfSU9XKFVCSV9DVFJMX0lPQ19NQUdJQywgNjUsIF9fczMyKQogCiAvKiBpb2N0bCBjb21tYW5kcyBvZiBVQkkgdm9sdW1lIGNoYXJhY3RlciBkZXZpY2VzICovCiAKICNkZWZpbmUgVUJJX1ZPTF9JT0NfTUFHSUMgJ08nCiAKIC8qIFN0YXJ0IFVCSSB2b2x1bWUgdXBkYXRlICovCi0jZGVmaW5lIFVCSV9JT0NWT0xVUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAwLCBpbnQ2NF90KQorI2RlZmluZSBVQklfSU9DVk9MVVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMCwgX19zNjQpCiAvKiBMRUIgZXJhc3VyZSBjb21tYW5kLCB1c2VkIGZvciBkZWJ1Z2dpbmcsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCRVIgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCRVIgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMSwgX19zMzIpCiAvKiBBdG9taWMgTEVCIGNoYW5nZSBjb21tYW5kICovCi0jZGVmaW5lIFVCSV9JT0NFQkNIIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDIsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQkNIIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDIsIF9fczMyKQogLyogTWFwIExFQiBjb21tYW5kICovCiAjZGVmaW5lIFVCSV9JT0NFQk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgdWJpX21hcF9yZXEpCiAvKiBVbm1hcCBMRUIgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJVTk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA0LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJVTk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA0LCBfX3MzMikKIC8qIENoZWNrIGlmIExFQiBpcyBtYXBwZWQgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJJU01BUCBfSU9SKFVCSV9WT0xfSU9DX01BR0lDLCA1LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJJU01BUCBfSU9SKFVCSV9WT0xfSU9DX01BR0lDLCA1LCBfX3MzMikKIC8qIFNldCBhbiBVQkkgdm9sdW1lIHByb3BlcnR5ICovCiAjZGVmaW5lIFVCSV9JT0NTRVRQUk9QIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDYsIHN0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxKQogCkBAIC0yNjAsMTAgKzI2MiwxMCBAQAogICogc3ViLXBhZ2Ugb2YgdGhlIGZpcnN0IHBhZ2UgYW5kIGFkZCBuZWVkZWQgcGFkZGluZy4KICAqLwogc3RydWN0IHViaV9hdHRhY2hfcmVxIHsKLQlpbnQzMl90IHViaV9udW07Ci0JaW50MzJfdCBtdGRfbnVtOwotCWludDMyX3QgdmlkX2hkcl9vZmZzZXQ7Ci0JaW50OF90IHBhZGRpbmdbMTJdOworCV9fczMyIHViaV9udW07CisJX19zMzIgbXRkX251bTsKKwlfX3MzMiB2aWRfaGRyX29mZnNldDsKKwlfX3M4IHBhZGRpbmdbMTJdOwogfTsKIAogLyoqCkBAIC0yOTgsMTMgKzMwMCwxMyBAQAogICogQkxPQnMsIHdpdGhvdXQgY2FyaW5nIGFib3V0IGhvdyB0byBwcm9wZXJseSBhbGlnbiB0aGVtLgogICovCiBzdHJ1Y3QgdWJpX21rdm9sX3JlcSB7Ci0JaW50MzJfdCB2b2xfaWQ7Ci0JaW50MzJfdCBhbGlnbm1lbnQ7Ci0JaW50NjRfdCBieXRlczsKLQlpbnQ4X3Qgdm9sX3R5cGU7Ci0JaW50OF90IHBhZGRpbmcxOwotCWludDE2X3QgbmFtZV9sZW47Ci0JaW50OF90IHBhZGRpbmcyWzRdOworCV9fczMyIHZvbF9pZDsKKwlfX3MzMiBhbGlnbm1lbnQ7CisJX19zNjQgYnl0ZXM7CisJX19zOCB2b2xfdHlwZTsKKwlfX3M4IHBhZGRpbmcxOworCV9fczE2IG5hbWVfbGVuOworCV9fczggcGFkZGluZzJbNF07CiAJY2hhciBuYW1lW1VCSV9NQVhfVk9MVU1FX05BTUUgKyAxXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMjAsOCArMzIyLDggQEAKICAqIHplcm8gbnVtYmVyIG9mIGJ5dGVzKS4KICAqLwogc3RydWN0IHViaV9yc3ZvbF9yZXEgewotCWludDY0X3QgYnl0ZXM7Ci0JaW50MzJfdCB2b2xfaWQ7CisJX19zNjQgYnl0ZXM7CisJX19zMzIgdm9sX2lkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgpAQCAtMzU2LDEyICszNTgsMTIgQEAKICAqIHJlLW5hbWUgcmVxdWVzdC4KICAqLwogc3RydWN0IHViaV9ybnZvbF9yZXEgewotCWludDMyX3QgY291bnQ7Ci0JaW50OF90IHBhZGRpbmcxWzEyXTsKKwlfX3MzMiBjb3VudDsKKwlfX3M4IHBhZGRpbmcxWzEyXTsKIAlzdHJ1Y3QgewotCQlpbnQzMl90IHZvbF9pZDsKLQkJaW50MTZfdCBuYW1lX2xlbjsKLQkJaW50OF90ICBwYWRkaW5nMlsyXTsKKwkJX19zMzIgdm9sX2lkOworCQlfX3MxNiBuYW1lX2xlbjsKKwkJX19zOCAgcGFkZGluZzJbMl07CiAJCWNoYXIgICAgbmFtZVtVQklfTUFYX1ZPTFVNRV9OQU1FICsgMV07CiAJfSBlbnRzW1VCSV9NQVhfUk5WT0xdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0zNzUsMTAgKzM3NywxMCBAQAogICogQHBhZGRpbmc6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCiAgKi8KIHN0cnVjdCB1YmlfbGViX2NoYW5nZV9yZXEgewotCWludDMyX3QgbG51bTsKLQlpbnQzMl90IGJ5dGVzOwotCWludDhfdCAgZHR5cGU7Ci0JaW50OF90ICBwYWRkaW5nWzddOworCV9fczMyIGxudW07CisJX19zMzIgYnl0ZXM7CisJX19zOCAgZHR5cGU7CisJX19zOCAgcGFkZGluZ1s3XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKQEAgLTM4OCw5ICszOTAsOSBAQAogICogQHBhZGRpbmc6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCiAgKi8KIHN0cnVjdCB1YmlfbWFwX3JlcSB7Ci0JaW50MzJfdCBsbnVtOwotCWludDhfdCAgZHR5cGU7Ci0JaW50OF90ICBwYWRkaW5nWzNdOworCV9fczMyIGxudW07CisJX19zOCAgZHR5cGU7CisJX19zOCAgcGFkZGluZ1szXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKQEAgLTQwMiw5ICs0MDQsOSBAQAogICogQHZhbHVlOiB2YWx1ZSB0byBzZXQKICAqLwogc3RydWN0IHViaV9zZXRfcHJvcF9yZXEgewotICAgICAgIHVpbnQ4X3QgIHByb3BlcnR5OwotICAgICAgIHVpbnQ4X3QgIHBhZGRpbmdbN107Ci0gICAgICAgdWludDY0X3QgdmFsdWU7CisgICAgICAgX191OCAgcHJvcGVydHk7CisgICAgICAgX191OCAgcGFkZGluZ1s3XTsKKyAgICAgICBfX3U2NCB2YWx1ZTsKIH0gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2VuZGlmIC8qIF9fVUJJX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCBjMjE2ZGU1Li43YjU1YWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTg4LDggKzg4LDggQEAKIGV4dGVybiBpbnQJCQlpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJCXVuc2lnbmVkIGNoYXIgYmFubmVkX2ZsYWdzKTsKLWV4dGVybiBpbnQJCQlpcHY2X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIAotCQkJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CitleHRlcm4gaW50IAkJCWlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfam9pbl9zb2xpY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfbGVhdmVfc29saWN0KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hdG1jbGlwLmggYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKaW5kZXggYjVhNTFhNy4uNDY3YzUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCisrKyBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaApAQCAtNTAsNyArNTAsNiBAQAogc3RydWN0IGNsaXBfcHJpdiB7CiAJaW50IG51bWJlcjsJCQkvKiBmb3IgY29udmVuaWVuY2UgLi4uICovCiAJc3BpbmxvY2tfdCB4b2ZmX2xvY2s7CQkvKiBlbnN1cmVzIHRoYXQgcG9wIGlzIGF0b21pYyAoU01QKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXh0OwkvKiBuZXh0IENMSVAgaW50ZXJmYWNlICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9heDg4Nzk2LmggYi9pbmNsdWRlL25ldC9heDg4Nzk2LmgKaW5kZXggNTEzMjlkYS4uYjlhM2JlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2F4ODg3OTYuaApAQCAtMTUsMTQgKzE1LDE3IEBACiAjZGVmaW5lIEFYRkxHX0hBU19FRVBST00JCSgxPDwwKQogI2RlZmluZSBBWEZMR19NQUNfRlJPTURFVgkJKDE8PDEpCS8qIGRldmljZSBhbHJlYWR5IGhhcyBNQUMgKi8KICNkZWZpbmUgQVhGTEdfSEFTXzkzQ1g2CQkJKDE8PDIpCS8qIHVzZSBlZXByb21fOTNjeDYgZHJpdmVyICovCisjZGVmaW5lIEFYRkxHX01BQ19GUk9NUExBVEZPUk0JCSgxPDwzKQkvKiBNQUMgZ2l2ZW4gYnkgcGxhdGZvcm0gZGF0YSAqLwogCiBzdHJ1Y3QgYXhfcGxhdF9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIJIHdvcmRsZW5ndGg7CQkvKiAxIG9yIDIgKi8KLQl1bnNpZ25lZCBjaGFyCSBkY3JfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgRENSICovCi0JdW5zaWduZWQgY2hhcgkgcmNyX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIFJDUiAqLwotCXVuc2lnbmVkIGNoYXIJIGdwb2NfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgR1BPQyAqLwotCXUzMgkJKnJlZ19vZmZzZXRzOwkJLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworCXVuc2lnbmVkIGNoYXIJIHdvcmRsZW5ndGg7CS8qIDEgb3IgMiAqLworCXVuc2lnbmVkIGNoYXIJIGRjcl92YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIERDUiAqLworCXVuc2lnbmVkIGNoYXIJIHJjcl92YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIFJDUiAqLworCXVuc2lnbmVkIGNoYXIJIGdwb2NfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBHUE9DICovCisJdTMyCQkqcmVnX29mZnNldHM7CS8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwl1OAkJKm1hY19hZGRyOwkvKiBNQUMgYWRkciAob25seSB1c2VkIHdoZW4KKwkJCQkJICAgQVhGTEdfTUFDX0ZST01QTEFURk9STSBpcyB1c2VkICovCiB9OwogCiAjZW5kaWYgLyogX19ORVRfQVg4ODc5Nl9QTEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAppbmRleCBhMDRmODQ2Li4zYWQ1MzkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCkBAIC01Myw2ICs1MywxNyBAQAogI2RlZmluZSBTT0xfU0NPCQkxNwogI2RlZmluZSBTT0xfUkZDT01NCTE4CiAKKyNkZWZpbmUgQlRfU0VDVVJJVFkJNAorc3RydWN0IGJ0X3NlY3VyaXR5IHsKKwlfX3U4IGxldmVsOworfTsKKyNkZWZpbmUgQlRfU0VDVVJJVFlfU0RQCQkwCisjZGVmaW5lIEJUX1NFQ1VSSVRZX0xPVwkJMQorI2RlZmluZSBCVF9TRUNVUklUWV9NRURJVU0JMgorI2RlZmluZSBCVF9TRUNVUklUWV9ISUdICTMKKworI2RlZmluZSBCVF9ERUZFUl9TRVRVUAk3CisKICNkZWZpbmUgQlRfSU5GTyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiQmx1ZXRvb3RoOiAiIGZtdCAiXG4iICwgIyMgYXJnKQogI2RlZmluZSBCVF9FUlIoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCAiXG4iICwgX19mdW5jX18gLCAjIyBhcmcpCiAjZGVmaW5lIEJUX0RCRyhmbXQsIGFyZy4uLikgIHByX2RlYnVnKCIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQpAQCAtMTA4LDYgKzExOSw3IEBACiAJYmRhZGRyX3QgICAgZHN0OwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3E7CiAJc3RydWN0IHNvY2sgKnBhcmVudDsKKwl1MzIgZGVmZXJfc2V0dXA7CiB9OwogCiBzdHJ1Y3QgYnRfc29ja19saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCAzNjQ1MTM5Li5mNjlmMDE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCkBAIC0xMzMsOCArMTMzLDEzIEBACiAjZGVmaW5lIEVTQ09fRVYzCTB4MDAwOAogI2RlZmluZSBFU0NPX0VWNAkweDAwMTAKICNkZWZpbmUgRVNDT19FVjUJMHgwMDIwCisjZGVmaW5lIEVTQ09fMkVWMwkweDAwNDAKKyNkZWZpbmUgRVNDT18zRVYzCTB4MDA4MAorI2RlZmluZSBFU0NPXzJFVjUJMHgwMTAwCisjZGVmaW5lIEVTQ09fM0VWNQkweDAyMDAKIAogI2RlZmluZSBTQ09fRVNDT19NQVNLICAoRVNDT19IVjEgfCBFU0NPX0hWMiB8IEVTQ09fSFYzKQorI2RlZmluZSBFRFJfRVNDT19NQVNLICAoRVNDT18yRVYzIHwgRVNDT18zRVYzIHwgRVNDT18yRVY1IHwgRVNDT18zRVY1KQogCiAvKiBBQ0wgZmxhZ3MgKi8KICNkZWZpbmUgQUNMX0NPTlQJCTB4MDEKQEAgLTE3Niw2ICsxODEsOSBAQAogI2RlZmluZSBMTVBfRVY1CQkweDAyCiAKICNkZWZpbmUgTE1QX1NOSUZGX1NVQlIJMHgwMgorI2RlZmluZSBMTVBfRURSX0VTQ09fMk0JMHgyMAorI2RlZmluZSBMTVBfRURSX0VTQ09fM00JMHg0MAorI2RlZmluZSBMTVBfRURSXzNTX0VTQ08JMHg4MAogCiAjZGVmaW5lIExNUF9TSU1QTEVfUEFJUgkweDA4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggNDZhNDNiNy4uMDFmOTMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTE2OSw2ICsxNjksNyBAQAogCV9fdTE2ICAgICAgICAgICAgbGlua19wb2xpY3k7CiAJX191MzIJCSBsaW5rX21vZGU7CiAJX191OCAgICAgICAgICAgICBhdXRoX3R5cGU7CisJX191OCAgICAgICAgICAgICBzZWNfbGV2ZWw7CiAJX191OCAgICAgICAgICAgICBwb3dlcl9zYXZlOwogCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CiAKQEAgLTMyNSwxMiArMzI2LDExIEBACiB2b2lkIGhjaV9jb25uX2hhc2hfZmx1c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpOwogdm9pZCBoY2lfY29ubl9jaGVja19wZW5kaW5nKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIAotc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggYXV0aF90eXBlKTsKK3N0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubik7CitpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdWludDhfdCByb2xlKTsKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSk7CiAKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwpAQCAtNDcwLDI2ICs0NzAsMjYgQEAKIAogLyogLS0tLS0gSENJIHByb3RvY29scyAtLS0tLSAqLwogc3RydWN0IGhjaV9wcm90byB7Ci0JY2hhciAJCSpuYW1lOworCWNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGludAlpZDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJdm9pZAkJKnByaXY7CiAKLQlpbnQgKCpjb25uZWN0X2luZCkgCShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKTsKKwlpbnQgKCpjb25uZWN0X2luZCkJKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpOwogCWludCAoKmNvbm5lY3RfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7Ci0JaW50ICgqZGlzY29ubl9pbmQpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKKwlpbnQgKCpkaXNjb25uX2luZCkJKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CisJaW50ICgqZGlzY29ubl9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKIAlpbnQgKCpyZWN2X2FjbGRhdGEpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKTsKIAlpbnQgKCpyZWN2X3Njb2RhdGEpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpOwotCWludCAoKmF1dGhfY2ZtKQkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCWludCAoKmVuY3J5cHRfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKKwlpbnQgKCpzZWN1cml0eV9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgaGNpX3Byb3RvX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAJaW50IG1hc2sgPSAwOwotCQorCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKIAlpZiAoaHAgJiYgaHAtPmNvbm5lY3RfaW5kKQogCQltYXNrIHw9IGhwLT5jb25uZWN0X2luZChoZGV2LCBiZGFkZHIsIHR5cGUpOwpAQCAtNTE0LDMwICs1MTQsNTIgQEAKIAkJaHAtPmNvbm5lY3RfY2ZtKGNvbm4sIHN0YXR1cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbikKK3N0YXRpYyBpbmxpbmUgaW50IGhjaV9wcm90b19kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CisJaW50IHJlYXNvbiA9IDB4MTM7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCXJlYXNvbiA9IGhwLT5kaXNjb25uX2luZChjb25uKTsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCXJlYXNvbiA9IGhwLT5kaXNjb25uX2luZChjb25uKTsKKworCXJldHVybiByZWFzb247Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZGlzY29ubl9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbikKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKLQkJaHAtPmRpc2Nvbm5faW5kKGNvbm4sIHJlYXNvbik7CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2NmbSkKKwkJaHAtPmRpc2Nvbm5fY2ZtKGNvbm4sIHJlYXNvbik7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQotCQlocC0+ZGlzY29ubl9pbmQoY29ubiwgcmVhc29uKTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5fY2ZtKQorCQlocC0+ZGlzY29ubl9jZm0oY29ubiwgcmVhc29uKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCV9fdTggZW5jcnlwdDsKKworCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKKwkJcmV0dXJuOworCisJZW5jcnlwdCA9IChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgPyAweDAxIDogMHgwMDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5hdXRoX2NmbSkKLQkJaHAtPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+YXV0aF9jZm0pCi0JCWhwLT5hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KQpAQCAtNTQ1LDEyICs1NjcsMTIgQEAKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5lbmNyeXB0X2NmbSkKLQkJaHAtPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+ZW5jcnlwdF9jZm0pCi0JCWhwLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIGludCBoY2lfcmVnaXN0ZXJfcHJvdG8oc3RydWN0IGhjaV9wcm90byAqaHByb3RvKTsKQEAgLTU2Miw4ICs1ODQsNyBAQAogCiAJY2hhciAqbmFtZTsKIAotCXZvaWQgKCphdXRoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCXZvaWQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CisJdm9pZCAoKnNlY3VyaXR5X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CiAJdm9pZCAoKmtleV9jaGFuZ2VfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7CiAJdm9pZCAoKnJvbGVfc3dpdGNoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggcm9sZSk7CiB9OwpAQCAtNTcxLDE0ICs1OTIsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCV9fdTggZW5jcnlwdDsKIAogCWhjaV9wcm90b19hdXRoX2NmbShjb25uLCBzdGF0dXMpOwogCisJaWYgKHRlc3RfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQorCQlyZXR1cm47CisKKwllbmNyeXB0ID0gKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSA/IDB4MDEgOiAweDAwOworCiAJcmVhZF9sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZoY2lfY2JfbGlzdCkgewogCQlzdHJ1Y3QgaGNpX2NiICpjYiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jYiwgbGlzdCk7Ci0JCWlmIChjYi0+YXV0aF9jZm0pCi0JCQljYi0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJaWYgKGNiLT5zZWN1cml0eV9jZm0pCisJCQljYi0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIH0KQEAgLTU4NywxMyArNjE0LDE2IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAorCWlmIChjb25uLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQorCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKIAloY2lfcHJvdG9fZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKIAkJc3RydWN0IGhjaV9jYiAqY2IgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY2IsIGxpc3QpOwotCQlpZiAoY2ItPmVuY3J5cHRfY2ZtKQotCQkJY2ItPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJCWlmIChjYi0+c2VjdXJpdHlfY2ZtKQorCQkJY2ItPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCX0KIAlyZWFkX3VubG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IDczZTExNWIuLmY1NjZhYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0zNyw2ICszNyw3IEBACiAJc2FfZmFtaWx5X3QJbDJfZmFtaWx5OwogCV9fbGUxNgkJbDJfcHNtOwogCWJkYWRkcl90CWwyX2JkYWRkcjsKKwlfX2xlMTYJCWwyX2NpZDsKIH07CiAKIC8qIEwyQ0FQIHNvY2tldCBvcHRpb25zICovCkBAIC0xODUsNiArMTg2LDcgQEAKIC8qIGluZm8gdHlwZSAqLwogI2RlZmluZSBMMkNBUF9JVF9DTF9NVFUgICAgIDB4MDAwMQogI2RlZmluZSBMMkNBUF9JVF9GRUFUX01BU0sgIDB4MDAwMgorI2RlZmluZSBMMkNBUF9JVF9GSVhFRF9DSEFOIDB4MDAwMwogCiAvKiBpbmZvIHJlc3VsdCAqLwogI2RlZmluZSBMMkNBUF9JUl9TVUNDRVNTICAgIDB4MDAwMApAQCAtMjE5LDExICsyMjEsMTQgQEAKIAlfX3U4CQlyeF9pZGVudDsKIAlfX3U4CQl0eF9pZGVudDsKIAorCV9fdTgJCWRpc2NfcmVhc29uOworCiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCBjaGFuX2xpc3Q7CiB9OwogCiAjZGVmaW5lIEwyQ0FQX0lORk9fQ0xfTVRVX1JFUV9TRU5UCTB4MDEKLSNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQJMHgwMgorI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVAkweDA0CisjZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FCTB4MDgKIAogLyogLS0tLS0gTDJDQVAgY2hhbm5lbCBhbmQgc29ja2V0IGluZm8gLS0tLS0gKi8KICNkZWZpbmUgbDJjYXBfcGkoc2spICgoc3RydWN0IGwyY2FwX3BpbmZvICopIHNrKQpAQCAtMjM3LDggKzI0Miw5IEBACiAJX191MTYJCWltdHU7CiAJX191MTYJCW9tdHU7CiAJX191MTYJCWZsdXNoX3RvOwotCi0JX191MzIJCWxpbmtfbW9kZTsKKwlfX3U4ICAgICAgICAgICAgc2VjX2xldmVsOworCV9fdTgJCXJvbGVfc3dpdGNoOworCV9fdTggICAgICAgICAgICBmb3JjZV9yZWxpYWJsZTsKIAogCV9fdTgJCWNvbmZfcmVxWzY0XTsKIAlfX3U4CQljb25mX2xlbjsKQEAgLTI1Nyw2ICsyNjMsNyBAQAogI2RlZmluZSBMMkNBUF9DT05GX1JFUV9TRU5UCTB4MDEKICNkZWZpbmUgTDJDQVBfQ09ORl9JTlBVVF9ET05FCTB4MDIKICNkZWZpbmUgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORQkweDA0CisjZGVmaW5lIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5ECTB4ODAKIAogI2RlZmluZSBMMkNBUF9DT05GX01BWF9SRVRSSUVTCTIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCmluZGV4IDRkYzhkOTIuLjgwMDcyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKQEAgLTE4Myw4ICsxODMsOSBAQAogCXU4ICAgICAgICAgICAgcmVtb3RlX3YyNF9zaWc7CiAJdTggICAgICAgICAgICBtc2NleDsKIAl1OCAgICAgICAgICAgIG91dDsKLQotCXUzMiAgICAgICAgICAgbGlua19tb2RlOworCXU4ICAgICAgICAgICAgc2VjX2xldmVsOworCXU4ICAgICAgICAgICAgcm9sZV9zd2l0Y2g7CisJdTMyICAgICAgICAgICBkZWZlcl9zZXR1cDsKIAogCXVpbnQgICAgICAgICAgbXR1OwogCXVpbnQgICAgICAgICAgY2ZjOwpAQCAtMjAyLDEwICsyMDMsMTIgQEAKICNkZWZpbmUgUkZDT01NX1JYX1RIUk9UVExFRCAwCiAjZGVmaW5lIFJGQ09NTV9UWF9USFJPVFRMRUQgMQogI2RlZmluZSBSRkNPTU1fVElNRURfT1VUICAgIDIKLSNkZWZpbmUgUkZDT01NX01TQ19QRU5ESU5HICAzIAotI2RlZmluZSBSRkNPTU1fQVVUSF9QRU5ESU5HIDQKLSNkZWZpbmUgUkZDT01NX0FVVEhfQUNDRVBUICA1Ci0jZGVmaW5lIFJGQ09NTV9BVVRIX1JFSkVDVCAgNgorI2RlZmluZSBSRkNPTU1fTVNDX1BFTkRJTkcgIDMKKyNkZWZpbmUgUkZDT01NX1NFQ19QRU5ESU5HICA0CisjZGVmaW5lIFJGQ09NTV9BVVRIX1BFTkRJTkcgNQorI2RlZmluZSBSRkNPTU1fQVVUSF9BQ0NFUFQgIDYKKyNkZWZpbmUgUkZDT01NX0FVVEhfUkVKRUNUICA3CisjZGVmaW5lIFJGQ09NTV9ERUZFUl9TRVRVUCAgOAogCiAvKiBTY2hlZHVsaW5nIGZsYWdzIGFuZCBldmVudHMgKi8KICNkZWZpbmUgUkZDT01NX1NDSEVEX1NUQVRFICAwCkBAIC0yMzksNiArMjQyLDcgQEAKIGludCAgcmZjb21tX2RsY19zZW5kKHN0cnVjdCByZmNvbW1fZGxjICpkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCAgcmZjb21tX2RsY19zZXRfbW9kZW1fc3RhdHVzKHN0cnVjdCByZmNvbW1fZGxjICpkLCB1OCB2MjRfc2lnKTsKIGludCAgcmZjb21tX2RsY19nZXRfbW9kZW1fc3RhdHVzKHN0cnVjdCByZmNvbW1fZGxjICpkLCB1OCAqdjI0X3NpZyk7Cit2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKTsKIAogI2RlZmluZSByZmNvbW1fZGxjX2xvY2soZCkgICAgIHNwaW5fbG9jaygmZC0+bG9jaykKICNkZWZpbmUgcmZjb21tX2RsY191bmxvY2soZCkgICBzcGluX3VubG9jaygmZC0+bG9jaykKQEAgLTMwNCw3ICszMDgsOCBAQAogCXN0cnVjdCBidF9zb2NrIGJ0OwogCXN0cnVjdCByZmNvbW1fZGxjICAgKmRsYzsKIAl1OCAgICAgY2hhbm5lbDsKLQl1MzIgICAgbGlua19tb2RlOworCXU4ICAgICBzZWNfbGV2ZWw7CisJdTggICAgIHJvbGVfc3dpdGNoOwogfTsKIAogaW50ICByZmNvbW1faW5pdF9zb2NrZXRzKHZvaWQpOwpAQCAtMzMzLDcgKzMzOCw2IEBACiAJYmRhZGRyX3Qgc3JjOwogCWJkYWRkcl90IGRzdDsKIAl1OCAgICAgICBjaGFubmVsOwotCQogfTsKIAogc3RydWN0IHJmY29tbV9kZXZfaW5mbyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCAyM2MwYWI3Li41Mzg5YWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTQsNiArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogLyogcmVtb3ZlIG9uY2Ugd2UgcmVtb3ZlIHRoZSB3ZXh0IHN0dWZmICovCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KQEAgLTExMiwxMiArMTE2LDE0IEBACiAgKiBAU1RBVElPTl9GTEFHX1NIT1JUX1BSRUFNQkxFOiBzdGF0aW9uIGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcwogICoJd2l0aCBzaG9ydCBwcmVhbWJsZXMKICAqIEBTVEFUSU9OX0ZMQUdfV01FOiBzdGF0aW9uIGlzIFdNRS9Rb1MgY2FwYWJsZQorICogQFNUQVRJT05fRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KICAqLwogZW51bSBzdGF0aW9uX2ZsYWdzIHsKIAlTVEFUSU9OX0ZMQUdfQ0hBTkdFRAkJPSAxPDwwLAogCVNUQVRJT05fRkxBR19BVVRIT1JJWkVECQk9IDE8PE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCwKIAlTVEFUSU9OX0ZMQUdfU0hPUlRfUFJFQU1CTEUJPSAxPDxOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFLAogCVNUQVRJT05fRkxBR19XTUUJCT0gMTw8Tkw4MDIxMV9TVEFfRkxBR19XTUUsCisJU1RBVElPTl9GTEFHX01GUAkJPSAxPDxOTDgwMjExX1NUQV9GTEFHX01GUCwKIH07CiAKIC8qKgpAQCAtMTcyLDYgKzE3OCw4IEBACiAgKiBAU1RBVElPTl9JTkZPX1NJR05BTDogQHNpZ25hbCBmaWxsZWQKICAqIEBTVEFUSU9OX0lORk9fVFhfQklUUkFURTogQHR4X2JpdHJhdGUgZmllbGRzIGFyZSBmaWxsZWQKICAqICAodHhfYml0cmF0ZSwgdHhfYml0cmF0ZV9mbGFncyBhbmQgdHhfYml0cmF0ZV9tY3MpCisgKiBAU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM6IEByeF9wYWNrZXRzIGZpbGxlZAorICogQFNUQVRJT05fSU5GT19UWF9QQUNLRVRTOiBAdHhfcGFja2V0cyBmaWxsZWQKICAqLwogZW51bSBzdGF0aW9uX2luZm9fZmxhZ3MgewogCVNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FCT0gMTw8MCwKQEAgLTE4Miw2ICsxOTAsOCBAQAogCVNUQVRJT05fSU5GT19QTElOS19TVEFURQk9IDE8PDUsCiAJU1RBVElPTl9JTkZPX1NJR05BTAkJPSAxPDw2LAogCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFCQk9IDE8PDcsCisJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMJCT0gMTw8OCwKKwlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUwkJPSAxPDw5LAogfTsKIAogLyoqCkBAIC0yMjksNiArMjM5LDggQEAKICAqIEBwbGlua19zdGF0ZTogbWVzaCBwZWVyIGxpbmsgc3RhdGUKICAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldCBpbiBkQm0KICAqIEB0eHJhdGU6IGN1cnJlbnQgdW5pY2FzdCBiaXRyYXRlIHRvIHRoaXMgc3RhdGlvbgorICogQHJ4X3BhY2tldHM6IHBhY2tldHMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KKyAqIEB0eF9wYWNrZXRzOiBwYWNrZXRzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgogICovCiBzdHJ1Y3Qgc3RhdGlvbl9pbmZvIHsKIAl1MzIgZmlsbGVkOwpAQCAtMjQwLDYgKzI1Miw4IEBACiAJdTggcGxpbmtfc3RhdGU7CiAJczggc2lnbmFsOwogCXN0cnVjdCByYXRlX2luZm8gdHhyYXRlOworCXUzMiByeF9wYWNrZXRzOworCXUzMiB0eF9wYWNrZXRzOwogfTsKIAogLyoqCkBAIC0zMzUsMjQgKzM0OSw1MCBAQAogfTsKIAogLyoqCi0gKiBlbnVtIHJlZ19zZXRfYnkgLSBJbmRpY2F0ZXMgd2hvIGlzIHRyeWluZyB0byBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAUkVHRE9NX1NFVF9CWV9JTklUOiByZWd1bGF0b3J5IGRvbWFpbiB3YXMgc2V0IGJ5IGluaXRpYWxpemF0aW9uLiBXZSB3aWxsIGJlCi0gKiAJdXNpbmcgYSBzdGF0aWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4gYnkgZGVmYXVsdC4KLSAqIEBSRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9VU0VSOiBVc2VyIGFza2VkIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNldCB0aGUKLSAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KLSAqIEBSRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKLSAqCWl0IHRoaW5rcyBpdHMga25vd3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHdlIHNob3VsZCBiZSBpbi4KLSAqIEBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbiA4MDIuMTEgY291bnRyeQotICoJaW5mb3JtYXRpb24gZWxlbWVudCB3aXRoIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gaXQgdGhpbmtzIHdlCi0gKglzaG91bGQgY29uc2lkZXIuCisgKiBlbnVtIGVudmlyb25tZW50X2NhcCAtIEVudmlyb25tZW50IHBhcnNlZCBmcm9tIGNvdW50cnkgSUUKKyAqIEBFTlZJUk9OX0FOWTogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyB0byBib3RoIGluZG9vciBhbmQKKyAqCW91dGRvb3Igb3BlcmF0aW9uLgorICogQEVOVklST05fSU5ET09SOiBpbmRpY2F0ZXMgY291bnRyeSBJRSBhcHBsaWVzIG9ubHkgdG8gaW5kb29yIG9wZXJhdGlvbgorICogQEVOVklST05fT1VURE9PUjogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyBvbmx5IHRvIG91dGRvb3Igb3BlcmF0aW9uCiAgKi8KLWVudW0gcmVnX3NldF9ieSB7Ci0JUkVHRE9NX1NFVF9CWV9JTklULAotCVJFR0RPTV9TRVRfQllfQ09SRSwKLQlSRUdET01fU0VUX0JZX1VTRVIsCi0JUkVHRE9NX1NFVF9CWV9EUklWRVIsCi0JUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAorZW51bSBlbnZpcm9ubWVudF9jYXAgeworCUVOVklST05fQU5ZLAorCUVOVklST05fSU5ET09SLAorCUVOVklST05fT1VURE9PUiwKK307CisKKy8qKgorICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHVzZWQgdG8ga2VlcCB0cmFjayBvZiByZWd1bGF0b3J5IHJlcXVlc3RzCisgKgorICogQHdpcGh5X2lkeDogdGhpcyBpcyBzZXQgaWYgdGhpcyByZXF1ZXN0J3MgaW5pdGlhdG9yIGlzCisgKiAJJVJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSBvciAlUkVHRE9NX1NFVF9CWV9EUklWRVIuIFRoaXMKKyAqIAljYW4gYmUgdXNlZCBieSB0aGUgd2lyZWxlc3MgY29yZSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisgKiAJYW5kIHBvdGVudGlhbGx5IGluZm9ybSB1c2VycyBvZiB3aGljaCBkZXZpY2VzIHNwZWNpZmljYWxseQorICogCWNhc2VkIHRoZSBjb25mbGljdHMuCisgKiBAaW5pdGlhdG9yOiBpbmRpY2F0ZXMgd2hvIHNlbnQgdGhpcyByZXF1ZXN0LCBjb3VsZCBiZSBhbnkgb2YKKyAqIAlvZiB0aG9zZSBzZXQgaW4gbmw4MDIxMV9yZWdfaW5pdGlhdG9yICglTkw4MDIxMV9SRUdET01fU0VUX0JZXyopCisgKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCisgKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKKyAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCisgKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAorICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKKyAqIAljb3VudHJ5IElFCisgKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKKyAqIAlpbmRvb3IsIG9yIGlmIGl0IGRvZXNuJ3QgbWF0dGVyCisgKiBAbGlzdDogdXNlZCB0byBpbnNlcnQgaW50byB0aGUgcmVnX3JlcXVlc3RzX2xpc3QgbGlua2VkIGxpc3QKKyAqLworc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCB7CisJaW50IHdpcGh5X2lkeDsKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3I7CisJY2hhciBhbHBoYTJbMl07CisJYm9vbCBpbnRlcnNlY3Q7CisJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW07CisJZW51bSBlbnZpcm9ubWVudF9jYXAgY291bnRyeV9pZV9lbnY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlIHsKQEAgLTQzOCw2ICs0NzgsMTg3IEBACiBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWw7CiAKIC8qKgorICogc3RydWN0IGNmZzgwMjExX3NzaWQgLSBTU0lEIGRlc2NyaXB0aW9uCisgKiBAc3NpZDogdGhlIFNTSUQKKyAqIEBzc2lkX2xlbjogbGVuZ3RoIG9mIHRoZSBzc2lkCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9zc2lkIHsKKwl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCXU4IHNzaWRfbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IC0gc2NhbiByZXF1ZXN0IGRlc2NyaXB0aW9uCisgKgorICogQHNzaWRzOiBTU0lEcyB0byBzY2FuIGZvciAoYWN0aXZlIHNjYW4gb25seSkKKyAqIEBuX3NzaWRzOiBudW1iZXIgb2YgU1NJRHMKKyAqIEBjaGFubmVsczogY2hhbm5lbHMgdG8gc2NhbiBvbi4KKyAqIEBuX2NoYW5uZWxzOiBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIGVhY2ggYmFuZAorICogQGllOiBvcHRpb25hbCBpbmZvcm1hdGlvbiBlbGVtZW50KHMpIHRvIGFkZCBpbnRvIFByb2JlIFJlcXVlc3Qgb3IgJU5VTEwKKyAqIEBpZV9sZW46IGxlbmd0aCBvZiBpZSBpbiBvY3RldHMKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRoaXMgd2FzIGZvcgorICogQGlmaWR4OiB0aGUgaW50ZXJmYWNlIGluZGV4CisgKi8KK3N0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgeworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkczsKKwlpbnQgbl9zc2lkczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKipjaGFubmVsczsKKwl1MzIgbl9jaGFubmVsczsKKwl1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKKworCS8qIGludGVybmFsICovCisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgaWZpZHg7Cit9OworCisvKioKKyAqIGVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgLSBzaWduYWwgdHlwZQorICoKKyAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FOiBubyBzaWduYWwgc3RyZW5ndGggaW5mb3JtYXRpb24gYXZhaWxhYmxlCisgKiBAQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOiBzaWduYWwgc3RyZW5ndGggaW4gbUJtICgxMDAqZEJtKQorICogQENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzogc2lnbmFsIHN0cmVuZ3RoLCBpbmNyZWFzaW5nIGZyb20gMCB0aHJvdWdoIDEwMAorICovCitlbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIHsKKwlDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FLAorCUNGRzgwMjExX1NJR05BTF9UWVBFX01CTSwKKwlDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUMsCit9OworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9ic3MgLSBCU1MgZGVzY3JpcHRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBCU1MgKHdoaWNoIG1heSBhbHNvIGJlIGEgbWVzaCBuZXR3b3JrKQorICogZm9yIHVzZSBpbiBzY2FuIHJlc3VsdHMgYW5kIHNpbWlsYXIuCisgKgorICogQGJzc2lkOiBCU1NJRCBvZiB0aGUgQlNTCisgKiBAdHNmOiB0aW1lc3RhbXAgb2YgbGFzdCByZWNlaXZlZCB1cGRhdGUKKyAqIEBiZWFjb25faW50ZXJ2YWw6IHRoZSBiZWFjb24gaW50ZXJ2YWwgYXMgZnJvbSB0aGUgZnJhbWUKKyAqIEBjYXBhYmlsaXR5OiB0aGUgY2FwYWJpbGl0eSBmaWVsZCBpbiBob3N0IGJ5dGUgb3JkZXIKKyAqIEBpbmZvcm1hdGlvbl9lbGVtZW50czogdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChOb3RlIHRoYXQgdGhlcmUKKyAqCWlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZXNlIGFyZSB3ZWxsLWZvcm1lZCEpCisgKiBAbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOiB0b3RhbCBsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzCisgKiBAc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggdmFsdWUgKHR5cGUgZGVwZW5kcyBvbiB0aGUgd2lwaHkncyBzaWduYWxfdHlwZSkKKyAqIEBob2xkOiBCU1Mgc2hvdWxkIG5vdCBleHBpcmUKKyAqIEBmcmVlX3ByaXY6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnJlZSBwcml2YXRlIGRhdGEKKyAqIEBwcml2OiBwcml2YXRlIGFyZWEgZm9yIGRyaXZlciB1c2UsIGhhcyBhdCBsZWFzdCB3aXBoeS0+YnNzX3ByaXZfc2l6ZSBieXRlcworICovCitzdHJ1Y3QgY2ZnODAyMTFfYnNzIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTY0IHRzZjsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBjYXBhYmlsaXR5OworCXU4ICppbmZvcm1hdGlvbl9lbGVtZW50czsKKwlzaXplX3QgbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOworCisJczMyIHNpZ25hbDsKKworCXZvaWQgKCpmcmVlX3ByaXYpKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CisJdTggcHJpdlswXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhzaXplb2Yodm9pZCAqKSkpKTsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAtIEF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQorICogYXV0aGVudGljYXRpb24uCisgKiBOT1RFOiBUaGlzIHN0cnVjdHVyZSB3aWxsIGxpa2VseSBjaGFuZ2Ugd2hlbiBtb3JlIGNvZGUgZnJvbSBtYWM4MDIxMSBpcworICogbW92ZWQgaW50byBjZmc4MDIxMSBzbyB0aGF0IG5vbi1tYWM4MDIxMSBkcml2ZXJzIGNhbiBiZW5lZml0IGZyb20gaXQsIHRvby4KKyAqIEJlZm9yZSB1c2luZyB0aGlzIGluIGEgZHJpdmVyIHRoYXQgZG9lcyBub3QgdXNlIG1hYzgwMjExLCBpdCB3b3VsZCBiZSBiZXR0ZXIKKyAqIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhhdCB3b3JrIGFuZCBiZXR0ZXIgeWV0LCB2b2x1bnRlZXIgdG8gd29yayBvbiBpdC4KKyAqCisgKiBAY2hhbjogVGhlIGNoYW5uZWwgdG8gdXNlIG9yICVOVUxMIGlmIG5vdCBzcGVjaWZpZWQgKGF1dG8tc2VsZWN0IGJhc2VkIG9uCisgKglzY2FuIHJlc3VsdHMpCisgKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEIGluIGluZnJhc3RydWN0dXJlIGNhc2UpOworICoJdGhpcyBmaWVsZCBpcyByZXF1aXJlZCB0byBiZSBwcmVzZW50OyBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGhlbHAgd2l0aAorICoJQlNTIHNlbGVjdGlvbiwgaXQgc2hvdWxkIHVzZSAoeWV0IHRvIGJlIGFkZGVkKSBNTE1FIGV2ZW50IHRvIGFsbG93IHVzZXIKKyAqCXNwYWNlIFNNRSB0byBiZSBub3RpZmllZCBvZiByb2FtaW5nIGNhbmRpZGF0ZSwgc28gdGhhdCB0aGUgU01FIGNhbiB0aGVuCisgKgl1c2UgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2l0aCB0aGUgcmVjb21tZW5kZWQgQlNTSUQgYW5kIHdoYXRldmVyCisgKglvdGhlciBkYXRhIG1heSBiZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uL2Fzc29jaWF0aW9uCisgKiBAc3NpZDogU1NJRCBvciAlTlVMTCBpZiBub3QgeWV0IGF2YWlsYWJsZQorICogQHNzaWRfbGVuOiBMZW5ndGggb2Ygc3NpZCBpbiBvY3RldHMKKyAqIEBhdXRoX3R5cGU6IEF1dGhlbnRpY2F0aW9uIHR5cGUgKGFsZ29yaXRobSkKKyAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBBdXRoZW50aWNhdGlvbiBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXU4ICpwZWVyX2FkZHI7CisJY29uc3QgdTggKnNzaWQ7CisJc2l6ZV90IHNzaWRfbGVuOworCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlOworCWNvbnN0IHU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAtIChSZSlBc3NvY2lhdGlvbiByZXF1ZXN0IGRhdGEKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKKyAqIChyZSlhc3NvY2lhdGlvbi4KKyAqIE5PVEU6IFRoaXMgc3RydWN0dXJlIHdpbGwgbGlrZWx5IGNoYW5nZSB3aGVuIG1vcmUgY29kZSBmcm9tIG1hYzgwMjExIGlzCisgKiBtb3ZlZCBpbnRvIGNmZzgwMjExIHNvIHRoYXQgbm9uLW1hYzgwMjExIGRyaXZlcnMgY2FuIGJlbmVmaXQgZnJvbSBpdCwgdG9vLgorICogQmVmb3JlIHVzaW5nIHRoaXMgaW4gYSBkcml2ZXIgdGhhdCBkb2VzIG5vdCB1c2UgbWFjODAyMTEsIGl0IHdvdWxkIGJlIGJldHRlcgorICogdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGF0IHdvcmsgYW5kIGJldHRlciB5ZXQsIHZvbHVudGVlciB0byB3b3JrIG9uIGl0LgorICoKKyAqIEBjaGFuOiBUaGUgY2hhbm5lbCB0byB1c2Ugb3IgJU5VTEwgaWYgbm90IHNwZWNpZmllZCAoYXV0by1zZWxlY3QgYmFzZWQgb24KKyAqCXNjYW4gcmVzdWx0cykKKyAqIEBwZWVyX2FkZHI6IFRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIFNUQSAoQVAgQlNTSUQpOyB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkCisgKgl0byBiZSBwcmVzZW50IGFuZCB0aGUgU1RBIG11c3QgYmUgaW4gU3RhdGUgMiAoYXV0aGVudGljYXRlZCkgd2l0aCB0aGUKKyAqCXBlZXIgU1RBCisgKiBAc3NpZDogU1NJRAorICogQHNzaWRfbGVuOiBMZW5ndGggb2Ygc3NpZCBpbiBvY3RldHMKKyAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byAoUmUpQXNzb2NpYXRpb24gUmVxdWVzdCBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwl1OCAqcGVlcl9hZGRyOworCWNvbnN0IHU4ICpzc2lkOworCXNpemVfdCBzc2lkX2xlbjsKKwljb25zdCB1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IC0gRGVhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGRhdGEKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKKyAqIGRlYXV0aGVudGljYXRpb24uCisgKgorICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKKyAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHBlZXIgU1RBCisgKiBAaWU6IEV4dHJhIElFcyB0byBhZGQgdG8gRGVhdXRoZW50aWNhdGlvbiBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IHsKKwl1OCAqcGVlcl9hZGRyOworCXUxNiByZWFzb25fY29kZTsKKwljb25zdCB1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgLSBEaXNhc3NvY2lhdGlvbiByZXF1ZXN0IGRhdGEKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKKyAqIGRpc2Fzc29jYXRpb24uCisgKgorICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKKyAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBlZXIgU1RBCisgKiBAaWU6IEV4dHJhIElFcyB0byBhZGQgdG8gRGlzYXNzb2NpYXRpb24gZnJhbWUgb3IgJU5VTEwKKyAqIEBpZV9sZW46IExlbmd0aCBvZiBpZSBidWZmZXIgaW4gb2N0ZXRzCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0IHsKKwl1OCAqcGVlcl9hZGRyOworCXUxNiByZWFzb25fY29kZTsKKwljb25zdCB1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKK307CisKKy8qKgogICogc3RydWN0IGNmZzgwMjExX29wcyAtIGJhY2tlbmQgZGVzY3JpcHRpb24gZm9yIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24KICAqCiAgKiBUaGlzIHN0cnVjdCBpcyByZWdpc3RlcmVkIGJ5IGZ1bGxtYWMgY2FyZCBkcml2ZXJzIGFuZC9vciB3aXJlbGVzcyBzdGFja3MKQEAgLTQ1MCw2ICs2NzEsOSBAQAogICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBidXQgdGhpcyBpcyBzdWJqZWN0IHRvIHJlZXZhbHVhdGlvbiBhcyBzb29uIGFzIHRoaXMKICAqIGNvZGUgaXMgdXNlZCBtb3JlIHdpZGVseSBhbmQgd2UgaGF2ZSBhIGZpcnN0IHVzZXIgd2l0aG91dCB3ZXh0LgogICoKKyAqIEBzdXNwZW5kOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgc3VzcGVuZGVkCisgKiBAcmVzdW1lOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgcmVzdW1lZAorICoKICAqIEBhZGRfdmlydHVhbF9pbnRmOiBjcmVhdGUgYSBuZXcgdmlydHVhbCBpbnRlcmZhY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSwKICAqCW11c3Qgc2V0IHRoZSBzdHJ1Y3Qgd2lyZWxlc3NfZGV2J3MgaWZ0eXBlLgogICoKQEAgLTQ3MSw2ICs2OTUsOCBAQAogICoKICAqIEBzZXRfZGVmYXVsdF9rZXk6IHNldCB0aGUgZGVmYXVsdCBrZXkgb24gYW4gaW50ZXJmYWNlCiAgKgorICogQHNldF9kZWZhdWx0X21nbXRfa2V5OiBzZXQgdGhlIGRlZmF1bHQgbWFuYWdlbWVudCBmcmFtZSBrZXkgb24gYW4gaW50ZXJmYWNlCisgKgogICogQGFkZF9iZWFjb246IEFkZCBhIGJlYWNvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMsIEBoZWFkLCBAaW50ZXJ2YWwKICAqCWFuZCBAZHRpbV9wZXJpb2Qgd2lsbCBiZSB2YWxpZCwgQHRhaWwgaXMgb3B0aW9uYWwuCiAgKiBAc2V0X2JlYWNvbjogQ2hhbmdlIHRoZSBiZWFjb24gcGFyYW1ldGVycyBmb3IgYW4gYWNjZXNzIHBvaW50IG1vZGUKQEAgLTQ5Nyw4ICs3MjMsMjEgQEAKICAqIEBzZXRfdHhxX3BhcmFtczogU2V0IFRYIHF1ZXVlIHBhcmFtZXRlcnMKICAqCiAgKiBAc2V0X2NoYW5uZWw6IFNldCBjaGFubmVsCisgKgorICogQHNjYW46IFJlcXVlc3QgdG8gZG8gYSBzY2FuLiBJZiByZXR1cm5pbmcgemVybywgdGhlIHNjYW4gcmVxdWVzdCBpcyBnaXZlbgorICoJdGhlIGRyaXZlciwgYW5kIHdpbGwgYmUgdmFsaWQgdW50aWwgcGFzc2VkIHRvIGNmZzgwMjExX3NjYW5fZG9uZSgpLgorICoJRm9yIHNjYW4gcmVzdWx0cywgY2FsbCBjZmc4MDIxMV9pbmZvcm1fYnNzKCk7IHlvdSBjYW4gY2FsbCB0aGlzIG91dHNpZGUKKyAqCXRoZSBzY2FuL3NjYW5fZG9uZSBicmFja2V0IHRvby4KKyAqCisgKiBAYXV0aDogUmVxdWVzdCB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHBlZXIKKyAqIEBhc3NvYzogUmVxdWVzdCB0byAocmUpYXNzb2NpYXRlIHdpdGggdGhlIHNwZWNpZmllZCBwZWVyCisgKiBAZGVhdXRoOiBSZXF1ZXN0IHRvIGRlYXV0aGVudGljYXRlIGZyb20gdGhlIHNwZWNpZmllZCBwZWVyCisgKiBAZGlzYXNzb2M6IFJlcXVlc3QgdG8gZGlzYXNzb2NpYXRlIGZyb20gdGhlIHNwZWNpZmllZCBwZWVyCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9vcHMgeworCWludAkoKnN1c3BlbmQpKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCWludAkoKnJlc3VtZSkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKIAlpbnQJKCphZGRfdmlydHVhbF9pbnRmKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjaGFyICpuYW1lLAogCQkJCSAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwpAQCAtNTE4LDYgKzc1Nyw5IEBACiAJaW50CSgqc2V0X2RlZmF1bHRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgdTgga2V5X2luZGV4KTsKKwlpbnQJKCpzZXRfZGVmYXVsdF9tZ210X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4KTsKIAogCWludAkoKmFkZF9iZWFjb24pKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYmVhY29uX3BhcmFtZXRlcnMgKmluZm8pOwpAQCAtNTY0LDYgKzgwNiwxOCBAQAogCWludAkoKnNldF9jaGFubmVsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSk7CisKKwlpbnQJKCpzY2FuKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCk7CisKKwlpbnQJKCphdXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAqcmVxKTsKKwlpbnQJKCphc3NvYykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKTsKKwlpbnQJKCpkZWF1dGgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxKTsKKwlpbnQJKCpkaXNhc3NvYykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAqcmVxKTsKIH07CiAKIC8qIHRlbXBvcmFyeSB3ZXh0IGhhbmRsZXJzICovCkBAIC01NzQsNSArODI4LDEzNCBAQAogCQkJICB1MzIgKm1vZGUsIGNoYXIgKmV4dHJhKTsKIGludCBjZmc4MDIxMV93ZXh0X2dpd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgdTMyICptb2RlLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOworCisvKioKKyAqIGNmZzgwMjExX3NjYW5fZG9uZSAtIG5vdGlmeSB0aGF0IHNjYW4gZmluaXNoZWQKKyAqCisgKiBAcmVxdWVzdDogdGhlIGNvcnJlc3BvbmRpbmcgc2NhbiByZXF1ZXN0CisgKiBAYWJvcnRlZDogc2V0IHRvIHRydWUgaWYgdGhlIHNjYW4gd2FzIGFib3J0ZWQgZm9yIGFueSByZWFzb24sCisgKgl1c2Vyc3BhY2Ugd2lsbCBiZSBub3RpZmllZCBvZiB0aGF0CisgKi8KK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCk7CisKKy8qKgorICogY2ZnODAyMTFfaW5mb3JtX2JzcyAtIGluZm9ybSBjZmc4MDIxMSBvZiBhIG5ldyBCU1MKKyAqCisgKiBAd2lwaHk6IHRoZSB3aXBoeSByZXBvcnRpbmcgdGhlIEJTUworICogQGJzczogdGhlIGZvdW5kIEJTUworICogQHNpZ25hbDogdGhlIHNpZ25hbCBzdHJlbmd0aCwgdHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlCisgKiBAZ2ZwOiBjb250ZXh0IGZsYWdzCisgKgorICogVGhpcyBpbmZvcm1zIGNmZzgwMjExIHRoYXQgQlNTIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBhbmQKKyAqIHRoZSBCU1Mgc2hvdWxkIGJlIHVwZGF0ZWQvYWRkZWQuCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9ic3MqCitjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApOworCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgIGNvbnN0IHU4ICpic3NpZCwKKwkJCQkgICAgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJCSAgICAgIHUxNiBjYXBhX21hc2ssIHUxNiBjYXBhX3ZhbCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZmc4MDIxMV9ic3MgKgorY2ZnODAyMTFfZ2V0X2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCSAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3sKKwlyZXR1cm4gY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgTlVMTCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJV0xBTl9DQVBBQklMSVRZX0lCU1MsIFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X21lc2goc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGNmZyk7Cit2b2lkIGNmZzgwMjExX3B1dF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKy8qKgorICogY2ZnODAyMTFfdW5saW5rX2JzcyAtIHVubGluayBCU1MgZnJvbSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAqIEB3aXBoeTogdGhlIHdpcGh5CisgKiBAYnNzOiB0aGUgYnNzIHRvIHJlbW92ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZ2l2ZW4gQlNTIGZyb20gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICogdGhlcmVieSBtYWtpbmcgaXQgbm8gbG9uZ2VyIHNob3cgdXAgaW4gc2NhbiByZXN1bHRzIGV0Yy4gVXNlIHRoaXMKKyAqIGZ1bmN0aW9uIHdoZW4geW91IGRldGVjdCBhIEJTUyBpcyBnb25lLiBOb3JtYWxseSBCU1NlcyB3aWxsIGFsc28gdGltZQorICogb3V0LCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGF0IGFsbC4KKyAqLwordm9pZCBjZmc4MDIxMV91bmxpbmtfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CisKKy8qKgorICogY2ZnODAyMTFfc2VuZF9yeF9hdXRoIC0gbm90aWZpY2F0aW9uIG9mIHByb2Nlc3NlZCBhdXRoZW50aWNhdGlvbgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBidWY6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gYXV0aGVudGljYXRpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIGluCisgKiBzdGF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOworCisvKioKKyAqIGNmZzgwMjExX3NlbmRfcnhfYXNzb2MgLSBub3RpZmljYXRpb24gb2YgcHJvY2Vzc2VkIGFzc29jaWF0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGJ1ZjogKHJlKWFzc29jaWF0aW9uIHJlc3BvbnNlIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSAocmUpYXNzb2NpYXRpb24gcmVzcG9uc2UgaGFzIGJlZW4KKyAqIHByb2Nlc3NlZCBpbiBzdGF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKKworLyoqCisgKiBjZmc4MDIxMV9zZW5kX3J4X2RlYXV0aCAtIG5vdGlmaWNhdGlvbiBvZiBwcm9jZXNzZWQgZGVhdXRoZW50aWNhdGlvbgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBidWY6IGRlYXV0aGVudGljYXRpb24gZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBkZWF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBpbgorICogc3RhdGlvbiBtb2RlLgorICovCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgIHNpemVfdCBsZW4pOworCisvKioKKyAqIGNmZzgwMjExX3NlbmRfcnhfZGlzYXNzb2MgLSBub3RpZmljYXRpb24gb2YgcHJvY2Vzc2VkIGRpc2Fzc29jaWF0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGJ1ZjogZGlzYXNzb2NpYXRpb24gcmVzcG9uc2UgZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBkaXNhc3NvY2lhdGlvbiBoYXMgYmVlbiBwcm9jZXNzZWQgaW4KKyAqIHN0YXRpb24gbW9kZS4KKyAqLwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgICAgc2l6ZV90IGxlbik7CisKKy8qKgorICogY2ZnODAyMTFfaG9sZF9ic3MgLSBleGNsdWRlIGJzcyBmcm9tIGV4cGlyYXRpb24KKyAqIEBic3M6IGJzcyB3aGljaCBzaG91bGQgbm90IGV4cGlyZQorICoKKyAqIEluIGEgY2FzZSB3aGVuIHRoZSBCU1MgaXMgbm90IHVwZGF0ZWQgYnV0IGl0IHNob3VsZG4ndCBleHBpcmUgdGhpcworICogZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbWFyayB0aGUgQlNTIHRvIGJlIGV4Y2x1ZGVkIGZyb20gZXhwaXJhdGlvbi4KKyAqLwordm9pZCBjZmc4MDIxMV9ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOworCisvKioKKyAqIGNmZzgwMjExX3VuaG9sZF9ic3MgLSByZW1vdmUgZXhwaXJhdGlvbiBleGNlcHRpb24gZnJvbSB0aGUgQlNTCisgKiBAYnNzOiBic3Mgd2hpY2ggY2FuIGV4cGlyZSBhZ2FpbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIEJTUyB0byBiZSBleHBpcmFibGUgYWdhaW4uCisgKi8KK3ZvaWQgY2ZnODAyMTFfdW5ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwogCiAjZW5kaWYgLyogX19ORVRfQ0ZHODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaAppbmRleCA1MmU5N2JmLi44MzlmNzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAorKysgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBpbmNsdWRlL25ldC9kc2EuaCAtIERyaXZlciBmb3IgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSBzd2l0Y2ggY2hpcHMKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTEsMjMgKzExLDQ3IEBACiAjaWZuZGVmIF9fTElOVVhfTkVUX0RTQV9ICiAjZGVmaW5lIF9fTElOVVhfTkVUX0RTQV9ICiAKLSNkZWZpbmUgRFNBX01BWF9QT1JUUwkxMgorI2RlZmluZSBEU0FfTUFYX1NXSVRDSEVTCTQKKyNkZWZpbmUgRFNBX01BWF9QT1JUUwkJMTIKKworc3RydWN0IGRzYV9jaGlwX2RhdGEgeworCS8qCisJICogSG93IHRvIGFjY2VzcyB0aGUgc3dpdGNoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgorCSAqLworCXN0cnVjdCBkZXZpY2UJKm1paV9idXM7CisJaW50CQlzd19hZGRyOworCisJLyoKKwkgKiBUaGUgbmFtZXMgb2YgdGhlIHN3aXRjaCdzIHBvcnRzLiAgVXNlICJjcHUiIHRvCisJICogZGVzaWduYXRlIHRoZSBzd2l0Y2ggcG9ydCB0aGF0IHRoZSBjcHUgaXMgY29ubmVjdGVkIHRvLAorCSAqICJkc2EiIHRvIGluZGljYXRlIHRoYXQgdGhpcyBwb3J0IGlzIGEgRFNBIGxpbmsgdG8KKwkgKiBhbm90aGVyIHN3aXRjaCwgTlVMTCB0byBpbmRpY2F0ZSB0aGUgcG9ydCBpcyB1bnVzZWQsCisJICogb3IgYW55IG90aGVyIHN0cmluZyB0byBpbmRpY2F0ZSB0aGlzIGlzIGEgcGh5c2ljYWwgcG9ydC4KKwkgKi8KKwljaGFyCQkqcG9ydF9uYW1lc1tEU0FfTUFYX1BPUlRTXTsKKworCS8qCisJICogQW4gYXJyYXkgKHdpdGggbnJfY2hpcHMgZWxlbWVudHMpIG9mIHdoaWNoIGVsZW1lbnQgW2FdCisJICogaW5kaWNhdGVzIHdoaWNoIHBvcnQgb24gdGhpcyBzd2l0Y2ggc2hvdWxkIGJlIHVzZWQgdG8KKwkgKiBzZW5kIHBhY2tldHMgdG8gdGhhdCBhcmUgZGVzdGluZWQgZm9yIHN3aXRjaCBhLiAgQ2FuIGJlCisJICogTlVMTCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzd2l0Y2ggY2hpcC4KKwkgKi8KKwlzOAkJKnJ0YWJsZTsKK307CiAKIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSB7CiAJLyoKIAkgKiBSZWZlcmVuY2UgdG8gYSBMaW51eCBuZXR3b3JrIGludGVyZmFjZSB0aGF0IGNvbm5lY3RzCi0JICogdG8gdGhlIHN3aXRjaCBjaGlwLgorCSAqIHRvIHRoZSByb290IHN3aXRjaCBjaGlwIG9mIHRoZSB0cmVlLgogCSAqLwogCXN0cnVjdCBkZXZpY2UJKm5ldGRldjsKIAogCS8qCi0JICogSG93IHRvIGFjY2VzcyB0aGUgc3dpdGNoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBhbmQKLQkgKiB0aGUgbmFtZXMgb2YgdGhlIHN3aXRjaCBwb3J0cyAodXNlICJjcHUiIHRvIGRlc2lnbmF0ZQotCSAqIHRoZSBzd2l0Y2ggcG9ydCB0aGF0IHRoZSBjcHUgaXMgY29ubmVjdGVkIHRvKS4KKwkgKiBJbmZvIHN0cnVjdHMgZGVzY3JpYmluZyBlYWNoIG9mIHRoZSBzd2l0Y2ggY2hpcHMKKwkgKiBjb25uZWN0ZWQgdmlhIHRoaXMgbmV0d29yayBpbnRlcmZhY2UuCiAJICovCi0Jc3RydWN0IGRldmljZQkqbWlpX2J1czsKLQlpbnQJCXN3X2FkZHI7Ci0JY2hhcgkJKnBvcnRfbmFtZXNbRFNBX01BWF9QT1JUU107CisJaW50CQlucl9jaGlwczsKKwlzdHJ1Y3QgZHNhX2NoaXBfZGF0YQkqY2hpcDsKIH07CiAKIGV4dGVybiBib29sIGRzYV91c2VzX2RzYV90YWdzKHZvaWQgKmRzYV9wdHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZXRob2MuaCBiL2luY2x1ZGUvbmV0L2V0aG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmMzc4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2V0aG9jLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbmV0L2V0aG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05FVF9FVEhPQ19ICisjZGVmaW5lIExJTlVYX05FVF9FVEhPQ19IIDEKKworc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgeworCXU4IGh3YWRkcltJRkhXQUREUkxFTl07CisJczggcGh5X2lkOworfTsKKworI2VuZGlmIC8qICFMSU5VWF9ORVRfRVRIT0NfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFfcmFkaW90YXAuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCmluZGV4IDM4NDY5OGMuLjIzYzNmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCkBAIC0yMzAsOCArMjMwLDEwIEBACiAJCQkJCQkgKiA4MDIuMTEgaGVhZGVyIGFuZCBwYXlsb2FkCiAJCQkJCQkgKiAodG8gMzItYml0IGJvdW5kYXJ5KQogCQkJCQkJICovCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9GX0JBREZDUwkweDQwCS8qIGJhZCBGQ1MgKi8KKwogLyogRm9yIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyAqLwotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURGQ1MJMHgwMDAxCS8qIGZyYW1lIGZhaWxlZCBjcmMgY2hlY2sgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFEUExDUAkweDAwMDIJLyogZnJhbWUgaGFzIGJhZCBQTENQICovCiAKIC8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfVFhfRkxBR1MgKi8KICNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0ZfVFhfRkFJTAkweDAwMDEJLyogZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmggYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCmluZGV4IGM4ZWZmYTQuLjM4Yjc4MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtMzksOCArMzksNiBAQAogCQogCV9fdTMyCQkJdmFsaWRfbGZ0OwogCV9fdTMyCQkJcHJlZmVyZWRfbGZ0OwotCXVuc2lnbmVkIGxvbmcJCWNzdGFtcDsJLyogY3JlYXRlZCB0aW1lc3RhbXAgKi8KLQl1bnNpZ25lZCBsb25nCQl0c3RhbXA7IC8qIHVwZGF0ZWQgdGltZXN0YW1wICovCiAJYXRvbWljX3QJCXJlZmNudDsKIAlzcGlubG9ja190CQlsb2NrOwogCkBAIC00OSw2ICs0Nyw5IEBACiAKIAlfX3UxNgkJCXNjb3BlOwogCisJdW5zaWduZWQgbG9uZwkJY3N0YW1wOwkvKiBjcmVhdGVkIHRpbWVzdGFtcCAqLworCXVuc2lnbmVkIGxvbmcJCXRzdGFtcDsgLyogdXBkYXRlZCB0aW1lc3RhbXAgKi8KKwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCiAJc3RydWN0IGluZXQ2X2RldgkqaWRldjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmggYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCmluZGV4IDcwNDBhNzguLjliNWQwOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaApAQCAtMTEzLDEyICsxMTMsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IElORVRfRUNOX3NldF9jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChza2ItPm5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgPD0gc2tiLT50YWlsKQogCQkJcmV0dXJuIElQX0VDTl9zZXRfY2UoaXBfaGRyKHNrYikpOwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlpZiAoc2tiLT5uZXR3b3JrX2hlYWRlciArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgPD0gc2tiLT50YWlsKQogCQkJcmV0dXJuIElQNl9FQ05fc2V0X2NlKGlwdjZfaGRyKHNrYikpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKaW5kZXggZTA4MWVlZi4uMzlmMmRjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKQEAgLTYxLDcgKzYxLDggQEAKIAkJCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgaW50ICp3b3JrKTsKIGludCBpbmV0X2ZyYWdfZXZpY3RvcihzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZik7CiBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAotCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCk7CisJCXN0cnVjdCBpbmV0X2ZyYWdzICpmLCB2b2lkICprZXksIHVuc2lnbmVkIGludCBoYXNoKQorCV9fcmVsZWFzZXMoJmYtPmxvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9mcmFnX3B1dChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKaW5kZXggZDBhMDQzMS4uYTQ0ZTIyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKQEAgLTgyLDYgKzgyLDcgQEAKICNlbmRpZgogCXVuc2lnbmVkIHNob3J0CQlwb3J0OwogCXNpZ25lZCBzaG9ydAkJZmFzdHJldXNlOworCWludAkJCW51bV9vd25lcnM7CiAJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAlvd25lcnM7CiB9OwpAQCAtMTMzLDcgKzEzNCw3IEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0CSpiaGFzaDsKIAogCXVuc2lnbmVkIGludAkJCWJoYXNoX3NpemU7Ci0JLyogTm90ZSA6IDQgYnl0ZXMgcGFkZGluZyBvbiA2NCBiaXQgYXJjaGVzICovCisJLyogNCBieXRlcyBob2xlIG9uIDY0IGJpdCAqLwogCiAJc3RydWN0IGttZW1fY2FjaGUJCSpiaW5kX2J1Y2tldF9jYWNoZXA7CiAKQEAgLTE1MCw2ICsxNTEsNyBAQAogCXN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0CWxpc3RlbmluZ19oYXNoW0lORVRfTEhUQUJMRV9TSVpFXQogCQkJCQlfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCisJYXRvbWljX3QJCQlic29ja2V0czsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICppbmV0X2VoYXNoX2J1Y2tldCgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDEwODY4MTMuLjRhYzc1NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTUsNiArNTUsNyBAQAogCV9fYmUzMgkJCWFkZHI7CiAJaW50CQkJb2lmOwogCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CisJdW5pb24gc2tiX3NoYXJlZF90eAlzaHR4OwogfTsKIAogI2RlZmluZSBJUENCKHNrYikgKChzdHJ1Y3QgaW5ldF9za2JfcGFybSopKChza2IpLT5jYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBhYjliMDAzLi5iYmFlMWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTE4NCw4ICsxODQsOCBAQAogLyoKICAqICAgICAgVGhlIHBvcnQgbnVtYmVyIG9mIEZUUCBzZXJ2aWNlIChpbiBuZXR3b3JrIG9yZGVyKS4KICAqLwotI2RlZmluZSBGVFBQT1JUICBfX2NvbnN0YW50X2h0b25zKDIxKQotI2RlZmluZSBGVFBEQVRBICBfX2NvbnN0YW50X2h0b25zKDIwKQorI2RlZmluZSBGVFBQT1JUICBjcHVfdG9fYmUxNigyMSkKKyNkZWZpbmUgRlRQREFUQSAgY3B1X3RvX2JlMTYoMjApCiAKIC8qCiAgKiAgICAgIFRDUCBTdGF0ZSBWYWx1ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA2ZDViNThhLi5jMWYxNmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0xOTYsOCArMTk2LDggQEAKIAlzdHJ1Y3QgbmV0CQkqZmxfbmV0OwogfTsKIAotI2RlZmluZSBJUFY2X0ZMT1dJTkZPX01BU0sJX19jb25zdGFudF9odG9ubCgweDBGRkZGRkZGKQotI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NQVNLCV9fY29uc3RhbnRfaHRvbmwoMHgwMDBGRkZGRikKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19NQVNLCWNwdV90b19iZTMyKDB4MEZGRkZGRkYpCisjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01BU0sJY3B1X3RvX2JlMzIoMHgwMDBGRkZGRikKIAogc3RydWN0IGlwdjZfZmxfc29ja2xpc3QKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lweC5oIGIvaW5jbHVkZS9uZXQvaXB4LmgKaW5kZXggNGNjMGI0ZS4uYTE0MTIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB4LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB4LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogc3RydWN0IGlweGhkciB7CiAJX19iZTE2CQkJaXB4X2NoZWNrc3VtIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLSNkZWZpbmUgSVBYX05PX0NIRUNLU1VNCV9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKQorI2RlZmluZSBJUFhfTk9fQ0hFQ0tTVU0JY3B1X3RvX2JlMTYoMHhGRkZGKQogCV9fYmUxNgkJCWlweF9wa3RzaXplIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAlfX3U4CQkJaXB4X3RjdHJsOwogCV9fdTgJCQlpcHhfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDU1OTQyMmYuLjNiODNhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtOTMsMTIgKzkzLDkgQEAKICAqIGVudW0gaWVlZTgwMjExX21heF9xdWV1ZXMgLSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMKICAqCiAgKiBASUVFRTgwMjExX01BWF9RVUVVRVM6IE1heGltdW0gbnVtYmVyIG9mIHJlZ3VsYXIgZGV2aWNlIHF1ZXVlcy4KLSAqIEBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzogTWF4aW11bSBudW1iZXIgb2YgcXVldWVzIHVzYWJsZQotICoJZm9yIEEtTVBEVSBvcGVyYXRpb24uCiAgKi8KIGVudW0gaWVlZTgwMjExX21heF9xdWV1ZXMgewotCUlFRUU4MDIxMV9NQVhfUVVFVUVTID0JCTE2LAotCUlFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTID0JMTYsCisJSUVFRTgwMjExX01BWF9RVUVVRVMgPQkJNCwKIH07CiAKIC8qKgpAQCAtMjA3LDcgKzIwNCw3IEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJdTE2IGFzc29jX2NhcGFiaWxpdHk7CiAJdTY0IHRpbWVzdGFtcDsKLQl1NjQgYmFzaWNfcmF0ZXM7CisJdTMyIGJhc2ljX3JhdGVzOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2h0X2NvbmYgaHQ7CiB9OwogCkBAIC0yNDUsNiArMjQyLDEyIEBACiAgKiBASUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkU6IGludGVybmFsIHRvIG1hYzgwMjExLCBjYW4gYmUKICAqCXNldCBieSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtcyB0byBpbmRpY2F0ZSBwcm9iZSByYXRlLCB3aWxsCiAgKgliZSBjbGVhcmVkIGZvciBmcmFnbWVudGVkIGZyYW1lcyAoZXhjZXB0IG9uIHRoZSBsYXN0IGZyYWdtZW50KQorICogQElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR086IG1hYzgwMjExIGludGVybmFsIGZsYWcsIGRvIG5vdCB0ZXN0IG9yCisgKglzZXQgdGhpcyBmbGFnIGluIHRoZSBkcml2ZXI7IGluZGljYXRlcyB0aGF0IHRoZSByYXRlIGNvbnRyb2wKKyAqCWFsZ29yaXRobSB3YXMgdXNlZCBhbmQgc2hvdWxkIGJlIG5vdGlmaWVkIG9mIFRYIHN0YXR1cworICogQElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzogY29tcGxldGVseSBpbnRlcm5hbCB0byBtYWM4MDIxMSwKKyAqCXVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBlbmRpbmcgZnJhbWUgcmVxdWlyZXMgVFggcHJvY2Vzc2luZyBiZWZvcmUKKyAqCWl0IGNhbiBiZSBzZW50IG91dC4KICAqLwogZW51bSBtYWM4MDIxMV90eF9jb250cm9sX2ZsYWdzIHsKIAlJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMJCT0gQklUKDApLApAQCAtMjYwLDggKzI2MywzMCBAQAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVCQkJPSBCSVQoMTApLAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0sJCT0gQklUKDExKSwKIAlJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRQk9IEJJVCgxMiksCisJSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTwkJPSBCSVQoMTMpLAorCUlFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORwk9IEJJVCgxNCksCiB9OwogCisvKioKKyAqIGVudW0gbWFjODAyMTFfcmF0ZV9jb250cm9sX2ZsYWdzIC0gcGVyLXJhdGUgZmxhZ3Mgc2V0IGJ5IHRoZQorICoJUmF0ZSBDb250cm9sIGFsZ29yaXRobS4KKyAqCisgKiBUaGVzZSBmbGFncyBhcmUgc2V0IGJ5IHRoZSBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGZvciBlYWNoIHJhdGUgZHVyaW5nIHR4LAorICogaW4gdGhlIEBmbGFncyBtZW1iZXIgb2Ygc3RydWN0IGllZWU4MDIxMV90eF9yYXRlLgorICoKKyAqIEBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM6IFVzZSBSVFMvQ1RTIGV4Y2hhbmdlIGZvciB0aGlzIHJhdGUuCisgKiBASUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDogQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBpcyByZXF1aXJlZC4KKyAqCVRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi4KKyAqIEBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOiBVc2Ugc2hvcnQgcHJlYW1ibGUuCisgKiBASUVFRTgwMjExX1RYX1JDX01DUzogSFQgcmF0ZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQ6IEluZGljYXRlcyB3aGV0aGVyIHRoaXMgcmF0ZSBzaG91bGQgYmUgdXNlZCBpbgorICoJR3JlZW5maWVsZCBtb2RlLgorICogQElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg6IEluZGljYXRlcyBpZiB0aGUgQ2hhbm5lbCBXaWR0aCBzaG91bGQgYmUgNDAgTUh6LgorICogQElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQTogVGhlIGZyYW1lIHNob3VsZCBiZSB0cmFuc21pdHRlZCBvbiBib3RoIG9mIHRoZQorICoJYWRqYWNlbnQgMjAgTUh6IGNoYW5uZWxzLCBpZiB0aGUgY3VycmVudCBjaGFubmVsIHR5cGUgaXMKKyAqCU5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgb3IgTkw4MDIxMV9DSEFOX0hUNDBQTFVTLgorICogQElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTogU2hvcnQgR3VhcmQgaW50ZXJ2YWwgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcmF0ZS4KKyAqLwogZW51bSBtYWM4MDIxMV9yYXRlX2NvbnRyb2xfZmxhZ3MgewogCUlFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUwkJPSBCSVQoMCksCiAJSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVAkJPSBCSVQoMSksCkBAIC01MDAsMTcgKzUyNSw2IEBACiAJSUVFRTgwMjExX0NPTkZfUFMJCT0gKDE8PDEpLAogfTsKIAotLyogWFhYOiByZW1vdmUgYWxsIHRoaXMgb25jZSBkcml2ZXJzIHN0b3AgdHJ5aW5nIHRvIHVzZSBpdCAqLwotc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIF9fSUVFRTgwMjExX0NPTkZfU0hPUlRfU0xPVF9USU1FKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZGVmaW5lIElFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSAoX19JRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUoKSkKLQotc3RydWN0IGllZWU4MDIxMV9odF9jb25mIHsKLQlib29sIGVuYWJsZWQ7Ci0JZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7Ci19OwogCiAvKioKICAqIGVudW0gaWVlZTgwMjExX2NvbmZfY2hhbmdlZCAtIGRlbm90ZXMgd2hpY2ggY29uZmlndXJhdGlvbiBjaGFuZ2VkCkBAIC01MjAsMTAgKzUzNCwxMCBAQAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUw6IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT1RBUDogdGhlIHJhZGlvdGFwIGZsYWcgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUzogdGhlIFBTIGZsYWcgY2hhbmdlZAorICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUOiB0aGUgZHluYW1pYyBQUyB0aW1lb3V0IGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVI6IHRoZSBUWCBwb3dlciBjaGFuZ2VkCi0gKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUw6IHRoZSBjaGFubmVsIGNoYW5nZWQKKyAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDogdGhlIGNoYW5uZWwvY2hhbm5lbF90eXBlIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTOiByZXRyeSBsaW1pdHMgY2hhbmdlZAotICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVDogSFQgY29uZmlndXJhdGlvbiBjaGFuZ2VkCiAgKi8KIGVudW0gaWVlZTgwMjExX2NvbmZfY2hhbmdlZCB7CiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQJPSBCSVQoMCksCkBAIC01MzEsMTAgKzU0NSwxMCBAQAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwJPSBCSVQoMiksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPVEFQCQk9IEJJVCgzKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMJCT0gQklUKDQpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUgkJPSBCSVQoNSksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwJCT0gQklUKDYpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMJPSBCSVQoNyksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUCQk9IEJJVCg4KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfRFlOUFNfVElNRU9VVAk9IEJJVCg1KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIJCT0gQklUKDYpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMCQk9IEJJVCg3KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTCT0gQklUKDgpLAogfTsKIAogLyoqCkBAIC01NDcsOCArNTYxLDkgQEAKICAqIEBsaXN0ZW5faW50ZXJ2YWw6IGxpc3RlbiBpbnRlcnZhbCBpbiB1bml0cyBvZiBiZWFjb24gaW50ZXJ2YWwKICAqIEBmbGFnczogY29uZmlndXJhdGlvbiBmbGFncyBkZWZpbmVkIGFib3ZlCiAgKiBAcG93ZXJfbGV2ZWw6IHJlcXVlc3RlZCB0cmFuc21pdCBwb3dlciAoaW4gZEJtKQorICogQGR5bmFtaWNfcHNfdGltZW91dDogZHluYW1pYyBwb3dlcnNhdmUgdGltZW91dCAoaW4gbXMpCiAgKiBAY2hhbm5lbDogdGhlIGNoYW5uZWwgdG8gdHVuZSB0bwotICogQGh0OiB0aGUgSFQgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRldmljZQorICogQGNoYW5uZWxfdHlwZTogdGhlIGNoYW5uZWwgKEhUKSB0eXBlCiAgKiBAbG9uZ19mcmFtZV9tYXhfdHhfY291bnQ6IE1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgZm9yIGEgImxvbmciIGZyYW1lCiAgKiAgICAoYSBmcmFtZSBub3QgUlRTIHByb3RlY3RlZCksIGNhbGxlZCAiZG90MTFMb25nUmV0cnlMaW1pdCIgaW4gODAyLjExLAogICogICAgYnV0IGFjdHVhbGx5IG1lYW5zIHRoZSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCkBAIC01NTksNyArNTc0LDcgQEAKIHN0cnVjdCBpZWVlODAyMTFfY29uZiB7CiAJaW50IGJlYWNvbl9pbnQ7CiAJdTMyIGZsYWdzOwotCWludCBwb3dlcl9sZXZlbDsKKwlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dDsKIAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJYm9vbCByYWRpb19lbmFibGVkOwpAQCAtNTY3LDcgKzU4Miw3IEBACiAJdTggbG9uZ19mcmFtZV9tYXhfdHhfY291bnQsIHNob3J0X2ZyYW1lX21heF90eF9jb3VudDsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NvbmYgaHQ7CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7CiB9OwogCiAvKioKQEAgLTYzMCwxMCArNjQ1LDEyIEBACiAgKiBASUVFRTgwMjExX0lGQ0NfQlNTSUQ6IFRoZSBCU1NJRCBjaGFuZ2VkLgogICogQElFRUU4MDIxMV9JRkNDX0JFQUNPTjogVGhlIGJlYWNvbiBmb3IgdGhpcyBpbnRlcmZhY2UgY2hhbmdlZAogICoJKGN1cnJlbnRseSBBUCBhbmQgTUVTSCBvbmx5KSwgdXNlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkuCisgKiBASUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQ6IFRoZSBlbmFibGVfYmVhY29uIHZhbHVlIGNoYW5nZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2lmX2NvbmZfY2hhbmdlIHsKLQlJRUVFODAyMTFfSUZDQ19CU1NJRAk9IEJJVCgwKSwKLQlJRUVFODAyMTFfSUZDQ19CRUFDT04JPSBCSVQoMSksCisJSUVFRTgwMjExX0lGQ0NfQlNTSUQJCT0gQklUKDApLAorCUlFRUU4MDIxMV9JRkNDX0JFQUNPTgkJPSBCSVQoMSksCisJSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQJPSBCSVQoMiksCiB9OwogCiAvKioKQEAgLTY0MSwxMyArNjU4LDE2IEBACiAgKgogICogQGNoYW5nZWQ6IHBhcmFtZXRlcnMgdGhhdCBoYXZlIGNoYW5nZWQsIHNlZSAmZW51bSBpZWVlODAyMTFfaWZfY29uZl9jaGFuZ2UuCiAgKiBAYnNzaWQ6IEJTU0lEIG9mIHRoZSBuZXR3b3JrIHdlIGFyZSBhc3NvY2lhdGVkIHRvL2NyZWF0aW5nLgorICogQGVuYWJsZV9iZWFjb246IEluZGljYXRlcyB3aGV0aGVyIGJlYWNvbnMgY2FuIGJlIHNlbnQuCisgKglUaGlzIGlzIHZhbGlkIG9ubHkgZm9yIEFQL0lCU1MvTUVTSCBtb2Rlcy4KICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIGNvbmZpZ19pbnRlcmZhY2UoKSBjYWxsYmFjayBvZgogICogJnN0cnVjdCBpZWVlODAyMTFfaHcuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiB7CiAJdTMyIGNoYW5nZWQ7Ci0JdTggKmJzc2lkOworCWNvbnN0IHU4ICpic3NpZDsKKwlib29sIGVuYWJsZV9iZWFjb247CiB9OwogCiAvKioKQEAgLTY1NSwxMSArNjc1LDEzIEBACiAgKiBAQUxHX1dFUDogV0VQNDAgb3IgV0VQMTA0CiAgKiBAQUxHX1RLSVA6IFRLSVAKICAqIEBBTEdfQ0NNUDogQ0NNUCAoQUVTKQorICogQEFMR19BRVNfQ01BQzogQUVTLTEyOC1DTUFDCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9hbGcgewogCUFMR19XRVAsCiAJQUxHX1RLSVAsCiAJQUxHX0NDTVAsCisJQUxHX0FFU19DTUFDLAogfTsKIAogLyoqCkBAIC02ODgsMTIgKzcxMCwxNiBAQAogICoJZ2VuZXJhdGlvbiBpbiBzb2Z0d2FyZS4KICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0U6IFNldCBieSBtYWM4MDIxMSwgdGhpcyBmbGFnIGluZGljYXRlcwogICoJdGhhdCB0aGUga2V5IGlzIHBhaXJ3aXNlIHJhdGhlciB0aGVuIGEgc2hhcmVkIGtleS4KKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVDogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlIGRyaXZlciBmb3IgYQorICoJQ0NNUCBrZXkgaWYgaXQgcmVxdWlyZXMgQ0NNUCBlbmNyeXB0aW9uIG9mIG1hbmFnZW1lbnQgZnJhbWVzIChNRlApIHRvCisgKgliZSBkb25lIGluIHNvZnR3YXJlLgogICovCiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3MgewogCUlFRUU4MDIxMV9LRVlfRkxBR19XTU1fU1RBCT0gMTw8MCwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYJPSAxPDwxLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDPSAxPDwyLAogCUlFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRQk9IDE8PDMsCisJSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQJPSAxPDw0LAogfTsKIAogLyoqCkBAIC03MTQsOCArNzQwLDggQEAKICAqIAktIFRlbXBvcmFsIEVuY3J5cHRpb24gS2V5ICgxMjggYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgVHggTUlDIEtleSAoNjQgYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgUnggTUlDIEtleSAoNjQgYml0cykKLSAqIEBpY3ZfbGVuOiBGSVhNRQotICogQGl2X2xlbjogRklYTUUKKyAqIEBpY3ZfbGVuOiBUaGUgSUNWIGxlbmd0aCBmb3IgdGhpcyBrZXkgdHlwZQorICogQGl2X2xlbjogVGhlIElWIGxlbmd0aCBmb3IgdGhpcyBrZXkgdHlwZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIHsKIAllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKQEAgLTc1OSw3ICs3ODUsNyBAQAogICoJc2l6ZW9mKHZvaWQgKiksIHNpemUgaXMgZGV0ZXJtaW5lZCBpbiBodyBpbmZvcm1hdGlvbi4KICAqLwogc3RydWN0IGllZWU4MDIxMV9zdGEgewotCXU2NCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCXUzMiBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXU4IGFkZHJbRVRIX0FMRU5dOwogCXUxNiBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwIGh0X2NhcDsKQEAgLTgzMywxMSArODU5LDYgQEAKICAqCWV4cGVjdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCBAbWF4X3NpZ25hbC4KICAqCUlmIHBvc3NpYmxlIHBsZWFzZSBwcm92aWRlIGRCIG9yIGRCbSBpbnN0ZWFkLgogICoKLSAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX0RCOgotICoJSGFyZHdhcmUgZ2l2ZXMgc2lnbmFsIHZhbHVlcyBpbiBkQiwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gYW4KLSAqCWFyYml0cmFyeSwgZml4ZWQgcmVmZXJlbmNlLiBXZSBleHBlY3QgdmFsdWVzIGJldHdlZW4gMCBhbmQgQG1heF9zaWduYWwuCi0gKglJZiBwb3NzaWJsZSBwbGVhc2UgcHJvdmlkZSBkQm0gaW5zdGVhZC4KLSAqCiAgKiBASUVFRTgwMjExX0hXX1NJR05BTF9EQk06CiAgKglIYXJkd2FyZSBnaXZlcyBzaWduYWwgdmFsdWVzIGluIGRCbSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20KICAqCW9uZSBtaWxsaXdhdHQuIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2Qgc2luY2UgaXQgaXMgc3RhbmRhcmRpemVkCkBAIC04NTQsMTAgKzg3NSwyMiBAQAogICogQElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjoKICAqCUhhcmR3YXJlIHN1cHBvcnRzIDExbiBBLU1QRFUgYWdncmVnYXRpb24uCiAgKgotICogQElFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTOgotICoJSGFyZHdhcmUgd2hpY2ggaGFzIGR5bmFtaWMgcG93ZXIgc2F2ZSBzdXBwb3J0LCBtZWFuaW5nCi0gKgl0aGF0IHBvd2VyIHNhdmUgaXMgZW5hYmxlZCBpbiBpZGxlIHBlcmlvZHMsIGFuZCBkb24ndCBuZWVkIHN1cHBvcnQKLSAqCWZyb20gc3RhY2suCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTOgorICoJSGFyZHdhcmUgaGFzIHBvd2VyIHNhdmUgc3VwcG9ydCAoaS5lLiBjYW4gZ28gdG8gc2xlZXApLgorICoKKyAqIEBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s6CisgKglIYXJkd2FyZSByZXF1aXJlcyBudWxsZnVuYyBmcmFtZSBoYW5kbGluZyBpbiBzdGFjaywgaW1wbGllcworICoJc3RhY2sgc3VwcG9ydCBmb3IgZHluYW1pYyBQUy4KKyAqCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFM6CisgKglIYXJkd2FyZSBoYXMgc3VwcG9ydCBmb3IgZHluYW1pYyBQUy4KKyAqCisgKiBASUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIChNRlAsIElFRUUgODAyLjExdykuCisgKgorICogQElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgZHJvcHBpbmcgb2YgaXJyZWxldmFudCBiZWFjb24gZnJhbWVzIHRvCisgKglhdm9pZCB3YWtpbmcgdXAgY3B1LgogICovCiBlbnVtIGllZWU4MDIxMV9od19mbGFncyB7CiAJSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUwkJCT0gMTw8MSwKQEAgLTg2NSwxMiArODk4LDE1IEBACiAJSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUJCT0gMTw8MywKIAlJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUJPSAxPDw0LAogCUlFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDCQkJPSAxPDw1LAotCUlFRUU4MDIxMV9IV19TSUdOQUxfREIJCQkJPSAxPDw2LAotCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNCQkJCT0gMTw8NywKLQlJRUVFODAyMTFfSFdfTk9JU0VfREJNCQkJCT0gMTw8OCwKLQlJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVAkJCT0gMTw8OSwKLQlJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04JCQk9IDE8PDEwLAotCUlFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTCQk9IDE8PDExLAorCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNCQkJCT0gMTw8NiwKKwlJRUVFODAyMTFfSFdfTk9JU0VfREJNCQkJCT0gMTw8NywKKwlJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVAkJCT0gMTw8OCwKKwlJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04JCQk9IDE8PDksCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTCQkJPSAxPDwxMCwKKwlJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sJCQk9IDE8PDExLAorCUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTCQk9IDE8PDEyLAorCUlFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRQkJCT0gMTw8MTMsCisJSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIJCQk9IDE8PDE0LAogfTsKIAogLyoqCkBAIC04OTAsOSArOTI2LDggQEAKICAqIEB3b3JrcXVldWU6IHNpbmdsZSB0aHJlYWRlZCB3b3JrcXVldWUgYXZhaWxhYmxlIGZvciBkcml2ZXIgdXNlLAogICoJYWxsb2NhdGVkIGJ5IG1hYzgwMjExIG9uIHJlZ2lzdHJhdGlvbiBhbmQgZmx1c2hlZCB3aGVuIGFuCiAgKglpbnRlcmZhY2UgaXMgcmVtb3ZlZC4KLSAqCU5PVElDRTogQWxsIHdvcmsgcGVyZm9ybWVkIG9uIHRoaXMgd29ya3F1ZXVlIHNob3VsZCBORVZFUgotICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrIChpLmUuIERvbid0IHVzZSB0aGUgZnVuY3Rpb24KLSAqCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKCkpCisgKglOT1RJQ0U6IEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGlzIHdvcmtxdWV1ZSBtdXN0IG5vdAorICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrLgogICoKICAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgYXJlYSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGRyaXZlciB1c2UKICAqCWFsb25nIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCkBAIC05MTQsMTIgKzk0OSw2IEBACiAgKglkYXRhIHBhY2tldHMuIFdNTS9Rb1MgcmVxdWlyZXMgYXQgbGVhc3QgZm91ciwgdGhlc2UKICAqCXF1ZXVlcyBuZWVkIHRvIGhhdmUgY29uZmlndXJhYmxlIGFjY2VzcyBwYXJhbWV0ZXJzLgogICoKLSAqIEBhbXBkdV9xdWV1ZXM6IG51bWJlciBvZiBhdmFpbGFibGUgaGFyZHdhcmUgdHJhbnNtaXQgcXVldWVzCi0gKglmb3IgQS1NUERVIHBhY2tldHMsIHRoZXNlIGhhdmUgbm8gYWNjZXNzIHBhcmFtZXRlcnMKLSAqCWJlY2F1c2UgdGhleSdyZSB1c2VkIG9ubHkgZm9yIEEtTVBEVSBmcmFtZXMuIE5vdGUgdGhhdAotICoJbWFjODAyMTEgd2lsbCBub3QgY3VycmVudGx5IHVzZSBhbnkgb2YgdGhlIHJlZ3VsYXIgcXVldWVzCi0gKglmb3IgYWdncmVnYXRpb24uCi0gKgogICogQHJhdGVfY29udHJvbF9hbGdvcml0aG06IHJhdGUgY29udHJvbCBhbGdvcml0aG0gZm9yIHRoaXMgaGFyZHdhcmUuCiAgKglJZiB1bnNldCAoTlVMTCksIHRoZSBkZWZhdWx0IGFsZ29yaXRobSB3aWxsIGJlIHVzZWQuIE11c3QgYmUKICAqCXNldCBiZWZvcmUgY2FsbGluZyBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKS4KQEAgLTk0NCw3ICs5NzMsNiBAQAogCWludCB2aWZfZGF0YV9zaXplOwogCWludCBzdGFfZGF0YV9zaXplOwogCXUxNiBxdWV1ZXM7Ci0JdTE2IGFtcGR1X3F1ZXVlczsKIAl1MTYgbWF4X2xpc3Rlbl9pbnRlcnZhbDsKIAlzOCBtYXhfc2lnbmFsOwogCXU4IG1heF9yYXRlczsKQEAgLTk1Miw2ICs5ODAsMTkgQEAKIH07CiAKIC8qKgorICogd2lwaHlfdG9faWVlZTgwMjExX2h3IC0gcmV0dXJuIGEgbWFjODAyMTEgZHJpdmVyIGh3IHN0cnVjdCBmcm9tIGEgd2lwaHkKKyAqCisgKiBAd2lwaHk6IHRoZSAmc3RydWN0IHdpcGh5IHdoaWNoIHdlIHdhbnQgdG8gcXVlcnkKKyAqCisgKiBtYWM4MDIxMSBkcml2ZXJzIGNhbiB1c2UgdGhpcyB0byBnZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZQorICogJnN0cnVjdCBpZWVlODAyMTFfaHcuIERyaXZlcnMgd2lzaGluZyB0byBnZXQgdG8gdGhlaXIgb3duIHByaXZhdGUKKyAqIHN0cnVjdHVyZSBjYW4gdGhlbiBhY2Nlc3MgaXQgdmlhIGh3LT5wcml2LiBOb3RlIHRoYXQgbWFjODAyMTExIGRyaXZlcnMgc2hvdWxkCisgKiBub3QgdXNlIHdpcGh5X3ByaXYoKSB0byB0cnkgdG8gZ2V0IHRoZWlyIHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZSBhcyB0aGlzCisgKiBpcyBhbHJlYWR5IHVzZWQgaW50ZXJuYWxseSBieSBtYWM4MDIxMS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9odyAqd2lwaHlfdG9faWVlZTgwMjExX2h3KHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisvKioKICAqIFNFVF9JRUVFODAyMTFfREVWIC0gc2V0IGRldmljZSBmb3IgODAyLjExIGhhcmR3YXJlCiAgKgogICogQGh3OiB0aGUgJnN0cnVjdCBpZWVlODAyMTFfaHcgdG8gc2V0IHRoZSBkZXZpY2UgZm9yCkBAIC05NzMsMTYgKzEwMTQsNiBAQAogCW1lbWNweShody0+d2lwaHktPnBlcm1fYWRkciwgYWRkciwgRVRIX0FMRU4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXJldHVybiBody0+cXVldWVzOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlyZXR1cm4gaHctPnF1ZXVlcyArIGh3LT5hbXBkdV9xdWV1ZXM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfdHhfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjKQpAQCAtMTAxOCwxNiArMTA0OSwxMiBAQAogICoKICAqIFRoZSBzZXRfa2V5KCkgY2FsbGJhY2sgaW4gdGhlICZzdHJ1Y3QgaWVlZTgwMjExX29wcyBmb3IgYSBnaXZlbgogICogZGV2aWNlIGlzIGNhbGxlZCB0byBlbmFibGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIGVuY3J5cHRpb24gYW5kCi0gKiBkZWNyeXB0aW9uLiBUaGUgY2FsbGJhY2sgdGFrZXMgYW4gQGFkZHJlc3MgcGFyYW1ldGVyIHRoYXQgd2lsbCBiZQotICogdGhlIGJyb2FkY2FzdCBhZGRyZXNzIGZvciBkZWZhdWx0IGtleXMsIHRoZSBvdGhlciBzdGF0aW9uJ3MgaGFyZHdhcmUKLSAqIGFkZHJlc3MgZm9yIGluZGl2aWR1YWwga2V5cyBvciB0aGUgemVybyBhZGRyZXNzIGZvciBrZXlzIHRoYXQgd2lsbAotICogYmUgdXNlZCBvbmx5IGZvciB0cmFuc21pc3Npb24uCisgKiBkZWNyeXB0aW9uLiBUaGUgY2FsbGJhY2sgdGFrZXMgYSBAc3RhIHBhcmFtZXRlciB0aGF0IHdpbGwgYmUgTlVMTAorICogZm9yIGRlZmF1bHQga2V5cyBvciBrZXlzIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBvbmx5LCBvciBwb2ludCB0bworICogdGhlIHN0YXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwZWVyIGZvciBpbmRpdmlkdWFsIGtleXMuCiAgKiBNdWx0aXBsZSB0cmFuc21pc3Npb24ga2V5cyB3aXRoIHRoZSBzYW1lIGtleSBpbmRleCBtYXkgYmUgdXNlZCB3aGVuCiAgKiBWTEFOcyBhcmUgY29uZmlndXJlZCBmb3IgYW4gYWNjZXNzIHBvaW50LgogICoKLSAqIFRoZSBAbG9jYWxfYWRkcmVzcyBwYXJhbWV0ZXIgd2lsbCBhbHdheXMgYmUgc2V0IHRvIG91ciBvd24gYWRkcmVzcywKLSAqIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB5b3Ugc3VwcG9ydCBtdWx0aXBsZSBsb2NhbCBhZGRyZXNzZXMuCi0gKgogICogV2hlbiB0cmFuc21pdHRpbmcsIHRoZSBUWCBjb250cm9sIGRhdGEgd2lsbCB1c2UgdGhlIEBod19rZXlfaWR4CiAgKiBzZWxlY3RlZCBieSB0aGUgZHJpdmVyIGJ5IG1vZGlmeWluZyB0aGUgJnN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYKICAqIHBvaW50ZWQgdG8gYnkgdGhlIEBrZXkgcGFyYW1ldGVyIHRvIHRoZSBzZXRfa2V5KCkgZnVuY3Rpb24uCkBAIC0xMDYxLDYgKzEwODgsNjAgQEAKICAqLwogCiAvKioKKyAqIERPQzogUG93ZXJzYXZlIHN1cHBvcnQKKyAqCisgKiBtYWM4MDIxMSBoYXMgc3VwcG9ydCBmb3IgdmFyaW91cyBwb3dlcnNhdmUgaW1wbGVtZW50YXRpb25zLgorICoKKyAqIEZpcnN0LCBpdCBjYW4gc3VwcG9ydCBoYXJkd2FyZSB0aGF0IGhhbmRsZXMgYWxsIHBvd2Vyc2F2aW5nIGJ5CisgKiBpdHNlbGYsIHN1Y2ggaGFyZHdhcmUgc2hvdWxkIHNpbXBseSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMKKyAqIGhhcmR3YXJlIGZsYWcuIEluIHRoYXQgY2FzZSwgaXQgd2lsbCBiZSB0b2xkIGFib3V0IHRoZSBkZXNpcmVkCisgKiBwb3dlcnNhdmUgbW9kZSBkZXBlbmRpbmcgb24gdGhlIGFzc29jaWF0aW9uIHN0YXR1cywgYW5kIHRoZSBkcml2ZXIKKyAqIG11c3QgdGFrZSBjYXJlIG9mIHNlbmRpbmcgbnVsbGZ1bmMgZnJhbWVzIHdoZW4gbmVjZXNzYXJ5LCBpLmUuIHdoZW4KKyAqIGVudGVyaW5nIGFuZCBsZWF2aW5nIHBvd2Vyc2F2ZSBtb2RlLiBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGxvb2sgYXQKKyAqIHRoZSBBSUQgaW4gYmVhY29ucyBhbmQgc2lnbmFsIHRvIHRoZSBBUCB0aGF0IGl0IHdva2UgdXAgd2hlbiBpdCBmaW5kcworICogdHJhZmZpYyBkaXJlY3RlZCB0byBpdC4gVGhpcyBtb2RlIHN1cHBvcnRzIGR5bmFtaWMgUFMgYnkgc2ltcGx5CisgKiBlbmFibGluZy9kaXNhYmxpbmcgUFMuCisgKgorICogQWRkaXRpb25hbGx5LCBzdWNoIGhhcmR3YXJlIG1heSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUworICogZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGl0IGNhbiBzdXBwb3J0IGR5bmFtaWMgUFMgbW9kZSBpdHNlbGYgKHNlZSBiZWxvdykuCisgKgorICogT3RoZXIgaGFyZHdhcmUgZGVzaWducyBjYW5ub3Qgc2VuZCBudWxsZnVuYyBmcmFtZXMgYnkgdGhlbXNlbHZlcyBhbmQgYWxzbworICogbmVlZCBzb2Z0d2FyZSBzdXBwb3J0IGZvciBwYXJzaW5nIHRoZSBUSU0gYml0bWFwLiBUaGlzIGlzIGFsc28gc3VwcG9ydGVkCisgKiBieSBtYWM4MDIxMSBieSBjb21iaW5pbmcgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgYW5kCisgKiAlSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGZsYWdzLiBUaGUgaGFyZHdhcmUgaXMgb2YgY291cnNlIHN0aWxsCisgKiByZXF1aXJlZCB0byBwYXNzIHVwIGJlYWNvbnMuIEFkZGl0aW9uYWxseSwgaW4gdGhpcyBjYXNlLCBtYWM4MDIxMSB3aWxsCisgKiB3YWtlIHVwIHRoZSBoYXJkd2FyZSB3aGVuIG11bHRpY2FzdCB0cmFmZmljIGlzIGFubm91bmNlZCBpbiB0aGUgYmVhY29uLgorICoKKyAqIEZJWE1FOiBJIGRvbid0IHRoaW5rIHdlIGNhbiBiZSBmYXN0IGVub3VnaCBpbiBzb2Z0d2FyZSB3aGVuIHdlIHdhbnQgdG8KKyAqCSAgcmVjZWl2ZSBtdWx0aWNhc3QgdHJhZmZpYz8KKyAqCisgKiBEeW5hbWljIHBvd2Vyc2F2ZSBtb2RlIGlzIGFuIGV4dGVuc2lvbiB0byBub3JtYWwgcG93ZXJzYXZlIG1vZGUgaW4gd2hpY2gKKyAqIHRoZSBoYXJkd2FyZSBzdGF5cyBhd2FrZSBmb3IgYSB1c2VyLXNwZWNpZmllZCBwZXJpb2Qgb2YgdGltZSBhZnRlciBzZW5kaW5nCisgKiBhIGZyYW1lIHNvIHRoYXQgcmVwbHkgZnJhbWVzIG5lZWQgbm90IGJlIGJ1ZmZlcmVkIGFuZCB0aGVyZWZvcmUgZGVsYXllZAorICogdG8gdGhlIG5leHQgd2FrZXVwLiBUaGlzIGNhbiBlaXRoZXIgYmUgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLCBpbiB3aGljaCBjYXNlCisgKiB0aGUgZHJpdmVyIG5lZWRzIHRvIGxvb2sgYXQgdGhlIEBkeW5hbWljX3BzX3RpbWVvdXQgaGFyZHdhcmUgY29uZmlndXJhdGlvbgorICogdmFsdWUsIG9yIGJ5IHRoZSBzdGFjayBpZiBhbGwgbnVsbGZ1bmMgaGFuZGxpbmcgaXMgaW4gdGhlIHN0YWNrLgorICovCisKKy8qKgorICogRE9DOiBCZWFjb24gZmlsdGVyIHN1cHBvcnQKKyAqCisgKiBTb21lIGhhcmR3YXJlIGhhdmUgYmVhY29uIGZpbHRlciBzdXBwb3J0IHRvIHJlZHVjZSBob3N0IGNwdSB3YWtldXBzCisgKiB3aGljaCB3aWxsIHJlZHVjZSBzeXN0ZW0gcG93ZXIgY29uc3VtcHRpb24uIEl0IHVzdWFsbGx5IHdvcmtzIHNvIHRoYXQKKyAqIHRoZSBmaXJtd2FyZSBjcmVhdGVzIGEgY2hlY2tzdW0gb2YgdGhlIGJlYWNvbiBidXQgb21pdHMgYWxsIGNvbnN0YW50bHkKKyAqIGNoYW5naW5nIGVsZW1lbnRzIChUU0YsIFRJTSBldGMpLiBXaGVuZXZlciB0aGUgY2hlY2tzdW0gY2hhbmdlcyB0aGUKKyAqIGJlYWNvbiBpcyBmb3J3YXJkZWQgdG8gdGhlIGhvc3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGp1c3QgZHJvcHBlZC4gVGhhdAorICogd2F5IHRoZSBob3N0IHdpbGwgb25seSByZWNlaXZlIGJlYWNvbnMgd2hlcmUgc29tZSByZWxldmFudCBpbmZvcm1hdGlvbgorICogKGZvciBleGFtcGxlIEVSUCBwcm90ZWN0aW9uIG9yIFdNTSBzZXR0aW5ncykgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIEJlYWNvbiBmaWx0ZXIgc3VwcG9ydCBpcyBpbmZvcm1lZCB3aXRoICVJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUiBmbGFnLgorICogVGhlIGRyaXZlciBuZWVkcyB0byBlbmFibGUgYmVhY29uIGZpbHRlciBzdXBwb3J0IHdoZW5ldmVyIHBvd2VyIHNhdmUgaXMKKyAqIGVuYWJsZWQsIHRoYXQgaXMgJUlFRUU4MDIxMV9DT05GX1BTIGlzIHNldC4gV2hlbiBwb3dlciBzYXZlIGlzIGVuYWJsZWQsCisgKiB0aGUgc3RhY2sgd2lsbCBub3QgY2hlY2sgZm9yIGJlYWNvbiBtaXNzIGF0IGFsbCBhbmQgdGhlIGRyaXZlciBuZWVkcyB0bworICogbm90aWZ5IGFib3V0IGNvbXBsZXRlIGxvc3Mgb2YgYmVhY29ucyB3aXRoIGllZWU4MDIxMV9iZWFjb25fbG9zcygpLgorICovCisKKy8qKgogICogRE9DOiBGcmFtZSBmaWx0ZXJpbmcKICAqCiAgKiBtYWM4MDIxMSByZXF1aXJlcyB0byBzZWUgbWFueSBtYW5hZ2VtZW50IGZyYW1lcyBmb3IgcHJvcGVyCkBAIC0xMTQ5LDE0ICsxMjMwLDE0IEBACiAgKiBASUVFRTgwMjExX0FNUERVX1JYX1NUT1A6IHN0b3AgUnggYWdncmVnYXRpb24KICAqIEBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6IHN0YXJ0IFR4IGFnZ3JlZ2F0aW9uCiAgKiBASUVFRTgwMjExX0FNUERVX1RYX1NUT1A6IHN0b3AgVHggYWdncmVnYXRpb24KLSAqIEBJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FOiByZXN1bWUgVFggYWdncmVnYXRpb24KKyAqIEBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6IFRYIGFnZ3JlZ2F0aW9uIGhhcyBiZWNvbWUgb3BlcmF0aW9uYWwKICAqLwogZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gewogCUlFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKIAlJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKIAlJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCiAJSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCi0JSUVFRTgwMjExX0FNUERVX1RYX1JFU1VNRSwKKwlJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUwsCiB9OwogCiAvKioKQEAgLTExNzIsNiArMTI1Myw4IEBACiAgKgljb25maWd1cmF0aW9uIGluIHRoZSBUWCBjb250cm9sIGRhdGEuIFRoaXMgaGFuZGxlciBzaG91bGQsCiAgKglwcmVmZXJhYmx5LCBuZXZlciBmYWlsIGFuZCBzdG9wIHF1ZXVlcyBhcHByb3ByaWF0ZWx5LCBtb3JlCiAgKglpbXBvcnRhbnRseSwgaG93ZXZlciwgaXQgbXVzdCBuZXZlciBmYWlsIGZvciBBLU1QRFUtcXVldWVzLgorICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIE5FVERFVl9UWF9PSyBleGNlcHQgaW4gdmVyeQorICoJbGltaXRlZCBjYXNlcy4KICAqCU11c3QgYmUgaW1wbGVtZW50ZWQgYW5kIGF0b21pYy4KICAqCiAgKiBAc3RhcnQ6IENhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUKQEAgLTEyMTIsOSArMTI5NSwxMiBAQAogICoKICAqIEBjb25maWc6IEhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuIElFRUUgODAyLjExIGNvZGUgY2FsbHMgdGhpcwogICoJZnVuY3Rpb24gdG8gY2hhbmdlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGUuZy4sIGNoYW5uZWwuCisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBmYWlsIGJ1dCByZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJaWYgaXQgZG9lcy4KICAqCiAgKiBAY29uZmlnX2ludGVyZmFjZTogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRvIGludGVyZmFjZXMKICAqCShlLmcuIEJTU0lEIGNoYW5nZXMuKQorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCiAgKiBAYnNzX2luZm9fY2hhbmdlZDogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRvIEJTUwogICoJcGFyYW1ldGVycyB0aGF0IG1heSB2YXJ5IGR1cmluZyBCU1MncyBsaWZlc3BhbiwgYW5kIG1heSBhZmZlY3QgbG93CkBAIC0xMjMyLDggKzEzMTgsOSBAQAogICoKICAqIEBzZXRfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCiAgKglUaGlzIGNhbGxiYWNrIGNhbiBzbGVlcCwgYW5kIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gYWRkX2ludGVyZmFjZQotICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGludGVyZmFjZSB3aXRoIHRoZQotICoJZ2l2ZW4gbG9jYWxfYWRkcmVzcyBpcyBlbmFibGVkLgorICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGdpdmVuIHZpcnR1YWwgaW50ZXJmYWNlCisgKglpcyBlbmFibGVkLgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIGtleSBjYW4ndCBiZSBhZGRlZC4KICAqCiAgKiBAdXBkYXRlX3RraXBfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCiAgKiAJVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBSeC4gQ2FsbGVkIGZvciBkcml2ZXJzCkBAIC0xMjQxLDEyICsxMzI4LDIyIEBACiAgKgogICogQGh3X3NjYW46IEFzayB0aGUgaGFyZHdhcmUgdG8gc2VydmljZSB0aGUgc2NhbiByZXF1ZXN0LCBubyBuZWVkIHRvIHN0YXJ0CiAgKgl0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lIGluIHN0YWNrLiBUaGUgc2NhbiBtdXN0IGhvbm91ciB0aGUgY2hhbm5lbAotICoJY29uZmlndXJhdGlvbiBkb25lIGJ5IHRoZSByZWd1bGF0b3J5IGFnZW50IGluIHRoZSB3aXBoeSdzIHJlZ2lzdGVyZWQKLSAqCWJhbmRzLiBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlCi0gKgljYWxsZWQ7IG5vdGUgdGhhdCBpdCBhbHNvIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHNjYW4gY2Fubm90IGZpbmlzaAotICoJYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgdHVybmVkIG9mZiEgQW55dGhpbmcgZWxzZSBpcyBhIGJ1ZyEKKyAqCWNvbmZpZ3VyYXRpb24gZG9uZSBieSB0aGUgcmVndWxhdG9yeSBhZ2VudCBpbiB0aGUgd2lwaHkncworICoJcmVnaXN0ZXJlZCBiYW5kcy4gVGhlIGhhcmR3YXJlIChvciB0aGUgZHJpdmVyKSBuZWVkcyB0byBtYWtlIHN1cmUKKyAqCXRoYXQgcG93ZXIgc2F2ZSBpcyBkaXNhYmxlZC4gV2hlbiB0aGUgc2NhbiBmaW5pc2hlcywKKyAqCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgpIG11c3QgYmUgY2FsbGVkOyBub3RlIHRoYXQgaXQgYWxzbyBtdXN0CisgKgliZSBjYWxsZWQgd2hlbiB0aGUgc2NhbiBjYW5ub3QgZmluaXNoIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzCisgKgl0dXJuZWQgb2ZmISBBbnl0aGluZyBlbHNlIGlzIGEgYnVnISBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCi0gKiBAZ2V0X3N0YXRzOiByZXR1cm4gbG93LWxldmVsIHN0YXRpc3RpY3MKKyAqIEBzd19zY2FuX3N0YXJ0OiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhIHNvZnR3YXJlIHNjYW4KKyAqCWlzIHN0YXJ0ZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAc3dfc2Nhbl9jb21wbGV0ZTogTm90aWZpZXIgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQganVzdCBhZnRlciBhIHNvZnR3YXJlIHNjYW4KKyAqCWZpbmlzaGVkLiBDYW4gYmUgTlVMTCwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdGhpcyBub3RpZmljYXRpb24uCisgKgorICogQGdldF9zdGF0czogUmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzLgorICogCVJldHVybnMgemVybyBpZiBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUuCiAgKgogICogQGdldF90a2lwX3NlcTogSWYgeW91ciBkZXZpY2UgaW1wbGVtZW50cyBUS0lQIGVuY3J5cHRpb24gaW4gaGFyZHdhcmUgdGhpcwogICoJY2FsbGJhY2sgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHJlYWQgdGhlIFRLSVAgdHJhbnNtaXQgSVZzIChib3RoIElWMzIKQEAgLTEyNjAsMTYgKzEzNTcsMjEgQEAKICAqCiAgKiBAY29uZl90eDogQ29uZmlndXJlIFRYIHF1ZXVlIHBhcmFtZXRlcnMgKEVEQ0YgKGFpZnMsIGN3X21pbiwgY3dfbWF4KSwKICAqCWJ1cnN0aW5nKSBmb3IgYSBoYXJkd2FyZSBUWCBxdWV1ZS4KKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKgogICogQGdldF90eF9zdGF0czogR2V0IHN0YXRpc3RpY3Mgb2YgdGhlIGN1cnJlbnQgVFggcXVldWUgc3RhdHVzLiBUaGlzIGlzIHVzZWQKICAqCXRvIGdldCBudW1iZXIgb2YgY3VycmVudGx5IHF1ZXVlZCBwYWNrZXRzIChxdWV1ZSBsZW5ndGgpLCBtYXhpbXVtIHF1ZXVlCiAgKglzaXplIChsaW1pdCksIGFuZCB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IHVzaW5nIGVhY2ggVFggcXVldWUKLSAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMgKwotICoJaHctPmFtcGR1X3F1ZXVlcyBpdGVtcy4KKyAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMKKyAqCWl0ZW1zLgogICoKICAqIEBnZXRfdHNmOiBHZXQgdGhlIGN1cnJlbnQgVFNGIHRpbWVyIHZhbHVlIGZyb20gZmlybXdhcmUvaGFyZHdhcmUuIEN1cnJlbnRseSwKLSAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgZGVidWdnaW5nIGFuZCwgYXMgc3VjaCwgaXMgbm90IGEKLSAqCXJlcXVpcmVkIGZ1bmN0aW9uLiBNdXN0IGJlIGF0b21pYy4KKyAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgQlNTSUQgbWVyZ2luZyBhbmQgZGVidWdnaW5nLiBJcyBub3QgYQorICoJcmVxdWlyZWQgZnVuY3Rpb24uCisgKgorICogQHNldF90c2Y6IFNldCB0aGUgVFNGIHRpbWVyIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGZpcm13YXJlL2hhcmR3YXJlLgorICogICAgICBDdXJyZW50bHksIHRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgZGVidWdnaW5nLiBJcyBub3QgYQorICoJcmVxdWlyZWQgZnVuY3Rpb24uCiAgKgogICogQHJlc2V0X3RzZjogUmVzZXQgdGhlIFRTRiB0aW1lciBhbmQgYWxsb3cgZmlybXdhcmUvaGFyZHdhcmUgdG8gc3luY2hyb25pemUKICAqCXdpdGggb3RoZXIgU1RBcyBpbiB0aGUgSUJTUy4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLiBUaGlzCkBAIC0xMjc5LDEzICsxMzgxLDE1IEBACiAgKiBAdHhfbGFzdF9iZWFjb246IERldGVybWluZSB3aGV0aGVyIHRoZSBsYXN0IElCU1MgYmVhY29uIHdhcyBzZW50IGJ5IHVzLgogICoJVGhpcyBpcyBuZWVkZWQgb25seSBmb3IgSUJTUyBtb2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMKICAqCXVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwbHkgdG8gUHJvYmUgUmVxdWVzdHMuCisgKglSZXR1cm5zIG5vbi16ZXJvIGlmIHRoaXMgZGV2aWNlIHNlbnQgdGhlIGxhc3QgYmVhY29uLgogICoKICAqIEBhbXBkdV9hY3Rpb246IFBlcmZvcm0gYSBjZXJ0YWluIEEtTVBEVSBhY3Rpb24KICAqIAlUaGUgUkEvVElEIGNvbWJpbmF0aW9uIGRldGVybWluZXMgdGhlIGRlc3RpbmF0aW9uIGFuZCBUSUQgd2Ugd2FudAogICogCXRoZSBhbXBkdSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGZvci4gVGhlIGFjdGlvbiBpcyBkZWZpbmVkIHRocm91Z2gKICAqIAlpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24uIFN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciAoQHNzbikKLSAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gbm90aWNlCisgKiAJaXMgdGhlIGZpcnN0IGZyYW1lIHdlIGV4cGVjdCB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uIE5vdGljZQogICogCXRoYXQgVFgvUlhfU1RPUCBjYW4gcGFzcyBOVUxMIGZvciB0aGlzIHBhcmFtZXRlci4KKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfb3BzIHsKIAlpbnQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTMxMCwxMiArMTQxNCwxNSBAQAogCWludCAoKnNldF90aW0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICAgYm9vbCBzZXQpOwogCWludCAoKnNldF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogCXZvaWQgKCp1cGRhdGVfdGtpcF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZiwgY29uc3QgdTggKmFkZHJlc3MsCiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpOwotCWludCAoKmh3X3NjYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IGxlbik7CisJaW50ICgqaHdfc2Nhbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOworCXZvaWQgKCpzd19zY2FuX3N0YXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnN3X3NjYW5fY29tcGxldGUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCpnZXRfc3RhdHMpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7CiAJdm9pZCAoKmdldF90a2lwX3NlcSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X2tleV9pZHgsCkBAIC0xMzI4LDYgKzE0MzUsNyBAQAogCWludCAoKmdldF90eF9zdGF0cykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogCXU2NCAoKmdldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqc2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpOwogCXZvaWQgKCpyZXNldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCp0eF9sYXN0X2JlYWNvbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmFtcGR1X2FjdGlvbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xNzUyLDggKzE4NjAsOSBAQAogICogbWFjODAyMTEgdGhhdCB0aGUgc2NhbiBmaW5pc2hlZC4KICAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGF0IGZpbmlzaGVkIHRoZSBzY2FuCisgKiBAYWJvcnRlZDogc2V0IHRvIHRydWUgaWYgc2NhbiB3YXMgYWJvcnRlZAogICovCi12b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyAtIGl0ZXJhdGUgYWN0aXZlIGludGVyZmFjZXMKQEAgLTE4ODIsMTAgKzE5OTEsMzAgQEAKIHN0cnVjdCBpZWVlODAyMTFfc3RhICppZWVlODAyMTFfZmluZF9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBjb25zdCB1OCAqYWRkcik7CiAKKy8qKgorICogaWVlZTgwMjExX2JlYWNvbl9sb3NzIC0gaW5mb3JtIGhhcmR3YXJlIGRvZXMgbm90IHJlY2VpdmUgYmVhY29ucworICoKKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICoKKyAqIFdoZW4gYmVhY29uIGZpbHRlcmluZyBpcyBlbmFibGVkIHdpdGggSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVJJTkcgYW5kCisgKiBJRUVFODAyMTFfQ09ORl9QUyBpcyBzZXQsIHRoZSBkcml2ZXIgbmVlZHMgdG8gaW5mb3JtIHdoZW5ldmVyIHRoZQorICogaGFyZHdhcmUgaXMgbm90IHJlY2VpdmluZyBiZWFjb25zIHdpdGggdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Moc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiAKIC8qIFJhdGUgY29udHJvbCBBUEkgKi8KIAogLyoqCisgKiBlbnVtIHJhdGVfY29udHJvbF9jaGFuZ2VkIC0gZmxhZ3MgdG8gaW5kaWNhdGUgd2hpY2ggcGFyYW1ldGVyIGNoYW5nZWQKKyAqCisgKiBASUVFRTgwMjExX1JDX0hUX0NIQU5HRUQ6IFRoZSBIVCBwYXJhbWV0ZXJzIG9mIHRoZSBvcGVyYXRpbmcgY2hhbm5lbCBoYXZlCisgKgljaGFuZ2VkLCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGNhbiB1cGRhdGUgaXRzIGludGVybmFsIHN0YXRlIGlmIG5lZWRlZC4KKyAqLworZW51bSByYXRlX2NvbnRyb2xfY2hhbmdlZCB7CisJSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQgPSBCSVQoMCkKK307CisKKy8qKgogICogc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgLSByYXRlIGNvbnRyb2wgaW5mb3JtYXRpb24gZm9yL2Zyb20gUkMgYWxnbwogICoKICAqIEBodzogVGhlIGhhcmR3YXJlIHRoZSBhbGdvcml0aG0gaXMgaW52b2tlZCBmb3IuCkBAIC0xOTIxLDYgKzIwNTAsOSBAQAogCXZvaWQgKigqYWxsb2Nfc3RhKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBnZnBfdCBnZnApOwogCXZvaWQgKCpyYXRlX2luaXQpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSk7CisJdm9pZCAoKnJhdGVfdXBkYXRlKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgIHZvaWQgKnByaXZfc3RhLCB1MzIgY2hhbmdlZCk7CiAJdm9pZCAoKmZyZWVfc3RhKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJIHZvaWQgKnByaXZfc3RhKTsKIApAQCAtMTk2Miw0ICsyMDk0LDM0IEBACiBpbnQgaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcihzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzKTsKIHZvaWQgaWVlZTgwMjExX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQyMChzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQyMDsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDBfbWludXMoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDBfcGx1cyhzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odDQwKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZl9pc19odDQwX21pbnVzKGNvbmYpIHx8IGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUOworfQorCiAjZW5kaWYgLyogTUFDODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDJlMGM1MzYuLjZjM2Y5NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTkxLDggKzkxLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2lwdjYuaD4KIAotc3RydWN0IG5mX2Nvbm4KLXsKK3N0cnVjdCBuZl9jb25uIHsKIAkvKiBVc2FnZSBjb3VudCBpbiBoZXJlIGlzIDEgZm9yIGhhc2ggdGFibGUvZGVzdHJ1Y3QgdGltZXIsIDEgcGVyIHNrYiwKICAgICAgICAgICAgcGx1cyAxIGZvciBhbnkgY29ubmVjdGlvbihzKSB3ZSBhcmUgYG1hc3RlcicgZm9yICovCiAJc3RydWN0IG5mX2Nvbm50cmFjayBjdF9nZW5lcmFsOwpAQCAtMTI2LDcgKzEyNSw2IEBACiAjaWZkZWYgQ09ORklHX05FVF9OUwogCXN0cnVjdCBuZXQgKmN0X25ldDsKICNlbmRpZgotCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uICoKQEAgLTE5MCw5ICsxODgsMTMgQEAKIGV4dGVybiBpbnQgbmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKTsKIGV4dGVybiB2b2lkIG5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKTsKIAotZXh0ZXJuIHN0cnVjdCBobGlzdF9oZWFkICpuZl9jdF9hbGxvY19oYXNodGFibGUodW5zaWduZWQgaW50ICpzaXplcCwgaW50ICp2bWFsbG9jZWQpOwotZXh0ZXJuIHZvaWQgbmZfY3RfZnJlZV9oYXNodGFibGUoc3RydWN0IGhsaXN0X2hlYWQgKmhhc2gsIGludCB2bWFsbG9jZWQsCi0JCQkJIHVuc2lnbmVkIGludCBzaXplKTsKKy8qCisgKiBBbGxvY2F0ZSBhIGhhc2h0YWJsZSBvZiBobGlzdF9oZWFkIChpZiBudWxscyA9PSAwKSwKKyAqIG9yIGhsaXN0X251bGxzX2hlYWQgKGlmIG51bGxzID09IDEpCisgKi8KK2V4dGVybiB2b2lkICpuZl9jdF9hbGxvY19oYXNodGFibGUodW5zaWduZWQgaW50ICpzaXplcCwgaW50ICp2bWFsbG9jZWQsIGludCBudWxscyk7CisKK2V4dGVybiB2b2lkIG5mX2N0X2ZyZWVfaGFzaHRhYmxlKHZvaWQgKmhhc2gsIGludCB2bWFsbG9jZWQsIHVuc2lnbmVkIGludCBzaXplKTsKIAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCiBfX25mX2Nvbm50cmFja19maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwpAQCAtMjg3LDcgKzI4OSw3IEBACiAKIGV4dGVybiBpbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwotZXh0ZXJuIGludCBuZl9jb25udHJhY2tfbWF4OworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfbWF4OwogCiAjZGVmaW5lIE5GX0NUX1NUQVRfSU5DKG5ldCwgY291bnQpCVwKIAkocGVyX2NwdV9wdHIoKG5ldCktPmN0LnN0YXQsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT5jb3VudCsrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaAppbmRleCBjMjUwNjhlLi41YTQ0OWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaApAQCAtNjIsNyArNjIsOCBAQAogCWlmIChjdCAmJiBjdCAhPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkgewogCQlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkgJiYgIW5mX2N0X2lzX2R5aW5nKGN0KSkKIAkJCXJldCA9IF9fbmZfY29ubnRyYWNrX2NvbmZpcm0oc2tiKTsKLQkJbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKGN0KTsKKwkJaWYgKGxpa2VseShyZXQgPT0gTkZfQUNDRVBUKSkKKwkJCW5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjdCk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCA2NmQ2NWE3Li5lZTJhNGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKQEAgLTE0LDYgKzE0LDggQEAKIAogc3RydWN0IG1vZHVsZTsKIAorI2RlZmluZSBORl9DVF9IRUxQRVJfTkFNRV9MRU4JMTYKKwogc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBobm9kZTsJLyogSW50ZXJuYWwgdXNlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAppbmRleCAwMzc4Njc2Li45Zjk5ZDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaApAQCAtNTMsMTAgKzUzLDE3IEBACiAJaW50ICgqdHVwbGVfdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpOwogCisJLyoKKwkgKiBDYWxjdWxhdGUgc2l6ZSBvZiB0dXBsZSBubGF0dHIKKwkgKi8KKwlpbnQgKCpubGF0dHJfdHVwbGVfc2l6ZSkodm9pZCk7CisKIAlpbnQgKCpubGF0dHJfdG9fdHVwbGUpKHN0cnVjdCBubGF0dHIgKnRiW10sCiAJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCk7CiAJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKm5sYV9wb2xpY3k7CiAKKwlzaXplX3QgbmxhX3NpemU7CisKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmN0bF90YWJsZV9oZWFkZXI7CiAJc3RydWN0IGN0bF9wYXRoCQkqY3RsX3RhYmxlX3BhdGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCmluZGV4IGRlYmRhZjcuLmJhMzJlZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCkBAIC02NCwxNiArNjQsMjIgQEAKIAkvKiBjb252ZXJ0IHByb3RvaW5mbyB0byBuZm5ldGluayBhdHRyaWJ1dGVzICovCiAJaW50ICgqdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmxhdHRyICpubGEsCiAJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKKwkvKiBDYWxjdWxhdGUgcHJvdG9pbmZvIG5sYXR0ciBzaXplICovCisJaW50ICgqbmxhdHRyX3NpemUpKHZvaWQpOwogCiAJLyogY29udmVydCBuZm5ldGxpbmsgYXR0cmlidXRlcyB0byBwcm90b2luZm8gKi8KIAlpbnQgKCpmcm9tX25sYXR0cikoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5mX2Nvbm4gKmN0KTsKIAogCWludCAoKnR1cGxlX3RvX25sYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKKwkvKiBDYWxjdWxhdGUgdHVwbGUgbmxhdHRyIHNpemUgKi8KKwlpbnQgKCpubGF0dHJfdHVwbGVfc2l6ZSkodm9pZCk7CiAJaW50ICgqbmxhdHRyX3RvX3R1cGxlKShzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpOwogCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpubGFfcG9saWN5OwogCisJc2l6ZV90IG5sYV9zaXplOworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSoqY3RsX3RhYmxlX2hlYWRlcjsKIAlzdHJ1Y3QgY3RsX3RhYmxlCSpjdGxfdGFibGU7CkBAIC05MCwxMCArOTYsNyBAQAogCXN0cnVjdCBtb2R1bGUgKm1lOwogfTsKIAotLyogRXhpc3RpbmcgYnVpbHQtaW4gcHJvdG9jb2xzICovCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDY7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDQ7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDY7CisvKiBFeGlzdGluZyBidWlsdC1pbiBnZW5lcmljIHByb3RvY29sICovCiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWM7CiAKICNkZWZpbmUgTUFYX05GX0NUX1BST1RPIDI1NgpAQCAtMTAxLDExICsxMDQsNiBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqCiBfX25mX2N0X2w0cHJvdG9fZmluZCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgbDRwcm90byk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgotbmZfY3RfbDRwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgcHJvdG9jb2wpOwotCi1leHRlcm4gdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApOwotCiAvKiBQcm90b2NvbCByZWdpc3RyYXRpb24uICovCiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcHJvdG8pOwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnByb3RvKTsKQEAgLTExNSw2ICsxMTMsNyBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKIGV4dGVybiBpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUoc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKK2V4dGVybiBpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZl9jdF9wb3J0X25sYV9wb2xpY3lbXTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaAppbmRleCBmMmY2YWE3Li4yNjI4YzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3RfbnVsbHMuaD4KIAogLyogQSBgdHVwbGUnIGlzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIHRvIHVuaXF1ZWx5CiAgIGlkZW50aWZ5IGEgY29ubmVjdGlvbi4gIGllLiBpZiB0d28gcGFja2V0cyBoYXZlIHRoZSBzYW1lIHR1cGxlLCB0aGV5CkBAIC0xNDYsOSArMTQ3LDggQEAKIAkoKGVudW0gaXBfY29ubnRyYWNrX2RpcikoaCktPnR1cGxlLmRzdC5kaXIpCiAKIC8qIENvbm5lY3Rpb25zIGhhdmUgdHdvIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGU6IG9uZSBmb3IgZWFjaCB3YXkgKi8KLXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaAotewotCXN0cnVjdCBobGlzdF9ub2RlIGhub2RlOworc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoIHsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBobm5vZGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaAppbmRleCA3MTgyYzA2Li45MjA5OTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTkZfTE9HX0gKICNkZWZpbmUgX05GX0xPR19ICiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKwogLyogdGhvc2UgTkZfTE9HXyogZGVmaW5lcyBhbmQgc3RydWN0IG5mX2xvZ2luZm8gYXJlIGxlZ2FjeSBkZWZpbml0aW9zIHRoYXQgd2lsbAogICogZGlzYXBwZWFyIG9uY2UgaXB0YWJsZXMgaXMgcmVwbGFjZWQgd2l0aCBwa3R0YWJsZXMuICBQbGVhc2UgRE8gTk9UIHVzZSB0aGVtCiAgKiBmb3IgYW55IG5ldyBjb2RlISAqLwpAQCAtNDAsMTIgKzQyLDE1IEBACiAJc3RydWN0IG1vZHVsZQkqbWU7CiAJbmZfbG9nZm4gCSpsb2dmbjsKIAljaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3RbTkZQUk9UT19OVU1QUk9UT107CiB9OwogCiAvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGxvZyBmdW5jdGlvbi4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyX3BmKHVfaW50OF90IHBmKTsKK2ludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Cit2b2lkIG5mX2xvZ191bnJlZ2lzdGVyKHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7CisKK2ludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKTsKK3ZvaWQgbmZfbG9nX3VuYmluZF9wZih1X2ludDhfdCBwZik7CiAKIC8qIENhbGxzIHRoZSByZWdpc3RlcmVkIGJhY2tlbmQgbG9nZ2luZyBmdW5jdGlvbiAqLwogdm9pZCBuZl9sb2dfcGFja2V0KHVfaW50OF90IHBmLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCmluZGV4IDhhNjE1MGEuLmVkZGI1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKQEAgLTIzMCw2ICsyMzAsNyBAQAogZXh0ZXJuIGludAkJbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLAogCQkJCSAgc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpOworZXh0ZXJuIGludAkJbmxhX3BvbGljeV9sZW4oY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmxhdHRyICoJbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKTsKIGV4dGVybiBzaXplX3QJCW5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLAogCQkJCSAgICBzaXplX3QgZHN0c2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCmluZGV4IGY0NDk4YTYuLjlkYzU4NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX05FVE5TX0NPTk5UUkFDS19ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdF9udWxscy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7CkBAIC0xMCw5ICsxMSw5IEBACiBzdHJ1Y3QgbmV0bnNfY3QgewogCWF0b21pY190CQljb3VudDsKIAl1bnNpZ25lZCBpbnQJCWV4cGVjdF9jb3VudDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGFzaDsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAkqaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkqZXhwZWN0X2hhc2g7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJdW5jb25maXJtZWQ7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQJdW5jb25maXJtZWQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19zdGF0ICpzdGF0OwogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCiAJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAppbmRleCA5NzdmNDgyLi4yZWIzODE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCkBAIC01NCw1ICs1NCwxOCBAQAogCiAJc3RydWN0IHRpbWVyX2xpc3QgcnRfc2VjcmV0X3RpbWVyOwogCWF0b21pY190IHJ0X2dlbmlkOworCisjaWZkZWYgQ09ORklHX0lQX01ST1VURQorCXN0cnVjdCBzb2NrCQkqbXJvdXRlX3NrOworCXN0cnVjdCBtZmNfY2FjaGUJKiptZmNfY2FjaGVfYXJyYXk7CisJc3RydWN0IHZpZl9kZXZpY2UJKnZpZl90YWJsZTsKKwlpbnQJCQltYXh2aWY7CisJYXRvbWljX3QJCWNhY2hlX3Jlc29sdmVfcXVldWVfbGVuOworCWludAkJCW1yb3V0ZV9kb19hc3NlcnQ7CisJaW50CQkJbXJvdXRlX2RvX3BpbTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpCisJaW50CQkJbXJvdXRlX3JlZ192aWZfbnVtOworI2VuZGlmCisjZW5kaWYKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldHJvbS5oIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKaW5kZXggZjA2ODUyYi4uMTU2OTZiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0cm9tLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKQEAgLTU5LDEwICs1OSw2IEBACiAjZGVmaW5lIE5SX01BWF9XSU5ET1dfU0laRQkJMTI3CQkJLyogTWF4aW11bSBXaW5kb3cgQWxsb3dhYmxlIC0gMTI3ICovCiAjZGVmaW5lCU5SX01BWF9QQUNLRVRfU0laRQkJMjM2CQkJLyogTWF4aW11bSBQYWNrZXQgTGVuZ3RoIC0gMjM2ICovCiAKLXN0cnVjdCBucl9wcml2YXRlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLX07Ci0KIHN0cnVjdCBucl9zb2NrIHsKIAlzdHJ1Y3Qgc29jawkJc29jazsKIAlheDI1X2FkZHJlc3MJCXVzZXJfYWRkciwgc291cmNlX2FkZHIsIGRlc3RfYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaCBiL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaAppbmRleCAwNTdiMGE4YS4uZDQzZjcxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaApAQCAtMTA1LDcgKzEwNSw2IEBACiAKIGludCBwaG9uZXRfc3lzY3RsX2luaXQodm9pZCk7CiB2b2lkIHBob25ldF9zeXNjdGxfZXhpdCh2b2lkKTsKLXZvaWQgcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIodm9pZCk7CiBpbnQgaXNpX3JlZ2lzdGVyKHZvaWQpOwogdm9pZCBpc2lfdW5yZWdpc3Rlcih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCmluZGV4IGFhMWM1OWEuLjUwNTRkYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCi1leHRlcm4gc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCBwbmRldnM7CitzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwaG9uZXRfZGV2aWNlX2xpc3Qoc3RydWN0IG5ldCAqbmV0KTsKIAogc3RydWN0IHBob25ldF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTM2LDggKzM2LDkgQEAKIAlERUNMQVJFX0JJVE1BUChhZGRycywgNjQpOwogfTsKIAotdm9pZCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCk7CitpbnQgcGhvbmV0X2RldmljZV9pbml0KHZvaWQpOwogdm9pZCBwaG9uZXRfZGV2aWNlX2V4aXQodm9pZCk7CitpbnQgcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIodm9pZCk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X2RldmljZV9nZXQoc3RydWN0IG5ldCAqbmV0KTsKIAogaW50IHBob25ldF9hZGRyZXNzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgKaW5kZXggNDA4MmYzOS4uZTM3ZmUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgKKysrIGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgKQEAgLTg1LDYgKzg1LDcgQEAKIAkJc3RydWN0IG5sYXR0ciAqdGFiKTsKIGV4dGVybiB2b2lkIHFkaXNjX3B1dF9ydGFiKHN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICp0YWIpOwogZXh0ZXJuIHZvaWQgcWRpc2NfcHV0X3N0YWIoc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnRhYik7CitleHRlcm4gdm9pZCBxZGlzY193YXJuX25vbndjKGNoYXIgKnR4dCwgc3RydWN0IFFkaXNjICpxZGlzYyk7CiAKIGV4dGVybiB2b2lkIF9fcWRpc2NfcnVuKHN0cnVjdCBRZGlzYyAqcSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BzbmFwLmggYi9pbmNsdWRlL25ldC9wc25hcC5oCmluZGV4IGIyZTAxY2MuLmZlNDU2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BzbmFwLmgKKysrIGIvaW5jbHVkZS9uZXQvcHNuYXAuaApAQCAtMSw3ICsxLDExIEBACiAjaWZuZGVmIF9ORVRfUFNOQVBfSAogI2RlZmluZSBfTkVUX1BTTkFQX0gKIAotZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqcmVnaXN0ZXJfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYywgaW50ICgqcmN2ZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikpOworZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqCityZWdpc3Rlcl9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjLAorCQkgICAgIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCisJCQkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfc25hcF9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90byk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZjhjNDc0Mi4uOTY0ZmZhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC00MiwyNCArNDIsMTcgQEAKIAlpbnQgCQkJKCplbnF1ZXVlKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKmRldik7CiAJc3RydWN0IHNrX2J1ZmYgKgkoKmRlcXVldWUpKHN0cnVjdCBRZGlzYyAqZGV2KTsKIAl1bnNpZ25lZAkJZmxhZ3M7Ci0jZGVmaW5lIFRDUV9GX0JVSUxUSU4JMQotI2RlZmluZSBUQ1FfRl9USFJPVFRMRUQJMgotI2RlZmluZSBUQ1FfRl9JTkdSRVNTCTQKKyNkZWZpbmUgVENRX0ZfQlVJTFRJTgkJMQorI2RlZmluZSBUQ1FfRl9USFJPVFRMRUQJCTIKKyNkZWZpbmUgVENRX0ZfSU5HUkVTUwkJNAorI2RlZmluZSBUQ1FfRl9XQVJOX05PTldDCSgxIDw8IDE2KQogCWludAkJCXBhZGRlZDsKIAlzdHJ1Y3QgUWRpc2Nfb3BzCSpvcHM7CiAJc3RydWN0IHFkaXNjX3NpemVfdGFibGUJKnN0YWI7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXUzMgkJCWhhbmRsZTsKIAl1MzIJCQlwYXJlbnQ7CiAJYXRvbWljX3QJCXJlZmNudDsKLQl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKLQlzdHJ1Y3Qgc2tfYnVmZgkJKmdzb19za2I7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlxOwotCXN0cnVjdCBuZXRkZXZfcXVldWUJKmRldl9xdWV1ZTsKLQlzdHJ1Y3QgUWRpc2MJCSpuZXh0X3NjaGVkOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQotCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljCWJzdGF0czsKLQlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CiAJc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QJcmF0ZV9lc3Q7CiAJaW50CQkJKCpyZXNoYXBlX2ZhaWwpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCXN0cnVjdCBRZGlzYyAqcSk7CkBAIC03MCw2ICs2MywxNyBAQAogCSAqIGFuZCBpdCB3aWxsIGxpdmUgdW50aWwgYmV0dGVyIHNvbHV0aW9uIHdpbGwgYmUgaW52ZW50ZWQuCiAJICovCiAJc3RydWN0IFFkaXNjCQkqX19wYXJlbnQ7CisJc3RydWN0IG5ldGRldl9xdWV1ZQkqZGV2X3F1ZXVlOworCXN0cnVjdCBRZGlzYwkJKm5leHRfc2NoZWQ7CisKKwlzdHJ1Y3Qgc2tfYnVmZgkJKmdzb19za2I7CisJLyoKKwkgKiBGb3IgcGVyZm9ybWFuY2Ugc2FrZSBvbiBTTVAsIHdlIHB1dCBoaWdobHkgbW9kaWZpZWQgZmllbGRzIGF0IHRoZSBlbmQKKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXE7CisJc3RydWN0IGduZXRfc3RhdHNfYmFzaWMgYnN0YXRzOworCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlCXFzdGF0czsKIH07CiAKIHN0cnVjdCBRZGlzY19jbGFzc19vcHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaCBiL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaAppbmRleCAyZmVjM2MzLi5iZWZjOGQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oCkBAIC00NiwxNCArNDYsMTQgQEAKICNpbmNsdWRlIDxuZXQvc2N0cC9zY3RwLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzJjLmg+CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfY3JjMzJjKF9fYmUzMiBjcmMsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgpCitzdGF0aWMgaW5saW5lIF9fdTMyIHNjdHBfY3JjMzJjKF9fdTMyIGNyYywgdTggKmJ1ZmZlciwgdTE2IGxlbmd0aCkKIHsKLQlyZXR1cm4gKF9fZm9yY2UgX19iZTMyKWNyYzMyYygoX19mb3JjZSB1MzIpY3JjLCBidWZmZXIsIGxlbmd0aCk7CisJcmV0dXJuIGNyYzMyYyhjcmMsIGJ1ZmZlciwgbGVuZ3RoKTsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF9zdGFydF9ja3N1bShfX3U4ICpidWZmZXIsIF9fdTE2IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgX191MzIgc2N0cF9zdGFydF9ja3N1bShfX3U4ICpidWZmZXIsIF9fdTE2IGxlbmd0aCkKIHsKLQlfX2JlMzIgY3JjID0gfmNwdV90b19iZTMyKDApOworCV9fdTMyIGNyYyA9IH4oX191MzIpMDsKIAlfX3U4ICB6ZXJvW3NpemVvZihfX3UzMildID0gezB9OwogCiAJLyogT3B0aW1pemUgdGhpcyByb3V0aW5lIHRvIGJlIFNDVFAgc3BlY2lmaWMsIGtub3dpbmcgaG93CkBAIC03MiwxMiArNzIsMTIgQEAKIAlyZXR1cm4gY3JjOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX3VwZGF0ZV9ja3N1bShfX3U4ICpidWZmZXIsIF9fdTE2IGxlbmd0aCwgX19iZTMyIGNyYzMyKQorc3RhdGljIGlubGluZSBfX3UzMiBzY3RwX3VwZGF0ZV9ja3N1bShfX3U4ICpidWZmZXIsIF9fdTE2IGxlbmd0aCwgX191MzIgY3JjMzIpCiB7CiAJcmV0dXJuIHNjdHBfY3JjMzJjKGNyYzMyLCBidWZmZXIsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfZW5kX2Nrc3VtKF9fYmUzMiBjcmMzMikKK3N0YXRpYyBpbmxpbmUgX19sZTMyIHNjdHBfZW5kX2Nrc3VtKF9fYmUzMiBjcmMzMikKIHsKLQlyZXR1cm4gKF9fZm9yY2UgX19iZTMyKX5jcHVfdG9fbGUzMigoX19mb3JjZSB1MzIpY3JjMzIpOworCXJldHVybiBjcHVfdG9fbGUzMih+Y3JjMzIpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAppbmRleCA4ODk4OGFiLi4zYjk2NjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaApAQCAtNzcsNyArNzcsOCBAQAogCVNDVFBfQ01EX0hCX1RJTUVSU19TVEFSVCwgICAgLyogU3RhcnQgdGhlIGhlYXJ0YmVhdCB0aW1lcnMuICovCiAJU0NUUF9DTURfSEJfVElNRVJfVVBEQVRFLCAgICAvKiBVcGRhdGUgYSBoZWFydGJlYXQgdGltZXJzLiAgKi8KIAlTQ1RQX0NNRF9IQl9USU1FUlNfU1RPUCwgICAgIC8qIFN0b3AgdGhlIGhlYXJ0YmVhdCB0aW1lcnMuICAqLwotCVNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVCwgICAgLyogUmVzZXQgdGhlIHN0YXR1cyBvZiBhIHRyYW5zcG9ydC4gKi8KKwlTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwgIC8qIFJlc2V0IHRoZSBzdGF0dXMgb2YgYSB0cmFuc3BvcnQuICovCisJU0NUUF9DTURfVFJBTlNQT1JUX0lETEUsICAgICAvKiBEbyBtYW5pcHVsYXRpb25zIG9uIGlkbGUgdHJhbnNwb3J0ICovCiAJU0NUUF9DTURfVFJBTlNQT1JUX09OLCAgICAgICAvKiBNYXJrIHRoZSB0cmFuc3BvcnQgYXMgYWN0aXZlLiAqLwogCVNDVFBfQ01EX1JFUE9SVF9FUlJPUiwgICAvKiBQYXNzIHRoaXMgZXJyb3IgYmFjayBvdXQgb2YgdGhlIHNtLiAqLwogCVNDVFBfQ01EX1JFUE9SVF9CQURfVEFHLCAvKiBWZXJpZmljYXRpb24gdGFncyBkaWRuJ3QgbWF0Y2guICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGJiYjc3NDIuLjlmODBhNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC02MiwxMyArNjIsNiBAQAogICogICBhbmQgd2lsbCBjb250aW51ZSB0byBldm9sdmUuCiAgKi8KIAotCi0KLSNpZmRlZiBURVNUX0ZSQU1FCi0jdW5kZWYgQ09ORklHX1NDVFBfREJHX09CSkNOVAotI3VuZGVmIENPTkZJR19TWVNDVEwKLSNlbmRpZiAvKiBURVNUX0ZSQU1FICovCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgpAQCAtMTM4LDYgKzEzMSw4IEBACiB1bnNpZ25lZCBpbnQgc2N0cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQlwb2xsX3RhYmxlICp3YWl0KTsKIHZvaWQgc2N0cF9zb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBzY3RwX2NvcHlfc29jayhzdHJ1Y3Qgc29jayAqbmV3c2ssIHN0cnVjdCBzb2NrICpzaywKKwkJICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKIGV4dGVybiBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc2N0cF9zb2NrZXRzX2FsbG9jYXRlZDsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKaW5kZXggOTY2MWQ3Yi4uMjNmMDhmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKQEAgLTIxOCw2ICsyMTgsMTAgQEAKIAogCS8qIEZsYWcgdG8gaWRpY2F0ZSBpZiBTQ1RQLUFVVEggaXMgZW5hYmxlZCAqLwogCWludCBhdXRoX2VuYWJsZTsKKworCS8qIEZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBjb21wdXRpbmcgYW5kIHZlcmlmeWluZyBjaGVja3N1bQorCSAqIGlzIGRpc2FibGVkLiAqLworICAgICAgICBpbnQgY2hlY2tzdW1fZGlzYWJsZTsKIH0gc2N0cF9nbG9iYWxzOwogCiAjZGVmaW5lIHNjdHBfcnRvX2luaXRpYWwJCShzY3RwX2dsb2JhbHMucnRvX2luaXRpYWwpCkBAIC0yNTIsNiArMjU2LDcgQEAKICNkZWZpbmUgc2N0cF9hZGRpcF9ub2F1dGgJCShzY3RwX2dsb2JhbHMuYWRkaXBfbm9hdXRoX2VuYWJsZSkKICNkZWZpbmUgc2N0cF9wcnNjdHBfZW5hYmxlCQkoc2N0cF9nbG9iYWxzLnByc2N0cF9lbmFibGUpCiAjZGVmaW5lIHNjdHBfYXV0aF9lbmFibGUJCShzY3RwX2dsb2JhbHMuYXV0aF9lbmFibGUpCisjZGVmaW5lIHNjdHBfY2hlY2tzdW1fZGlzYWJsZQkJKHNjdHBfZ2xvYmFscy5jaGVja3N1bV9kaXNhYmxlKQogCiAvKiBTQ1RQIFNvY2tldCB0eXBlOiBVRFAgb3IgVENQIHN0eWxlLiAqLwogdHlwZWRlZiBlbnVtIHsKQEAgLTkwNSw4ICs5MTAsMTAgQEAKIAkgKgkJc2hvdWxkIGJlIHNldC4gRXZlcnkgdGltZSB0aGUgUlRUCiAJICoJCWNhbGN1bGF0aW9uIGNvbXBsZXRlcyAoaS5lLiB0aGUgREFUQSBjaHVuawogCSAqCQlpcyBTQUNLJ2QpIGNsZWFyIHRoaXMgZmxhZy4KKwkgKiBoYl9zZW50IDogYSBmbGFnIHRoYXQgc2lnbmFscyB0aGF0IHdlIGhhdmUgYSBwZW5kaW5nIGhlYXJ0YmVhdC4KIAkgKi8KIAlfX3U4IHJ0b19wZW5kaW5nOworCV9fdTggaGJfc2VudDsKIAogCS8qIEZsYWcgdG8gdHJhY2sgdGhlIGN1cnJlbnQgZmFzdCByZWNvdmVyeSBzdGF0ZSAqLwogCV9fdTggZmFzdF9yZWNvdmVyeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBlZWZlZWFmLi40YmIxZmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgKglAc2tfYWxsb2NhdGlvbjogYWxsb2NhdGlvbiBtb2RlCiAgICoJQHNrX3NuZGJ1Zjogc2l6ZSBvZiBzZW5kIGJ1ZmZlciBpbiBieXRlcwogICAqCUBza19mbGFnczogJVNPX0xJTkdFUiAobF9vbm9mZiksICVTT19CUk9BRENBU1QsICVTT19LRUVQQUxJVkUsCi0gICoJCSAgICVTT19PT0JJTkxJTkUgc2V0dGluZ3MKKyAgKgkJICAgJVNPX09PQklOTElORSBzZXR0aW5ncywgJVNPX1RJTUVTVEFNUElORyBzZXR0aW5ncwogICAqCUBza19ub19jaGVjazogJVNPX05PX0NIRUNLIHNldHRpbmcsIHdldGhlciBvciBub3QgY2hlY2t1cCBwYWNrZXRzCiAgICoJQHNrX3JvdXRlX2NhcHM6IHJvdXRlIGNhcGFiaWxpdGllcyAoZS5nLiAlTkVUSUZfRl9UU08pCiAgICoJQHNrX2dzb190eXBlOiBHU08gdHlwZSAoZS5nLiAlU0tCX0dTT19UQ1BWNCkKQEAgLTQ4OCw2ICs0ODgsMTMgQEAKIAlTT0NLX1JDVlRTVEFNUE5TLCAvKiAlU09fVElNRVNUQU1QTlMgc2V0dGluZyAqLwogCVNPQ0tfTE9DQUxST1VURSwgLyogcm91dGUgbG9jYWxseSBvbmx5LCAlU09fRE9OVFJPVVRFIHNldHRpbmcgKi8KIAlTT0NLX1FVRVVFX1NIUlVOSywgLyogd3JpdGUgcXVldWUgaGFzIGJlZW4gc2hydW5rIHJlY2VudGx5ICovCisJU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUsICAvKiAlU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUsICAvKiAlU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFLCAgICAgLyogJVNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUsIC8qICVTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSwgLyogJVNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19jb3B5X2ZsYWdzKHN0cnVjdCBzb2NrICpuc2ssIHN0cnVjdCBzb2NrICpvc2spCkBAIC05NDQsNiArOTUxLDExIEBACiAJCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJCSAgICAgaW50IG5vYmxvY2ssCiAJCQkJCQkgICAgIGludCAqZXJyY29kZSk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgCQkqc29ja19hbGxvY19zZW5kX3Bza2Ioc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBoZWFkZXJfbGVuLAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbiwKKwkJCQkJCSAgICAgIGludCBub2Jsb2NrLAorCQkJCQkJICAgICAgaW50ICplcnJjb2RlKTsKIGV4dGVybiB2b2lkICpzb2NrX2ttYWxsb2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgc2l6ZSwKIAkJCSAgZ2ZwX3QgcHJpb3JpdHkpOwogZXh0ZXJuIHZvaWQgc29ja19rZnJlZV9zKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqbWVtLCBpbnQgc2l6ZSk7CkBAIC0xMzQwLDE0ICsxMzUyLDQ1IEBACiBzb2NrX3JlY3ZfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWt0aW1lX3Qga3QgPSBza2ItPnRzdGFtcDsKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTsKIAotCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKSkKKwkvKgorCSAqIGdlbmVyYXRlIGNvbnRyb2wgbWVzc2FnZXMgaWYKKwkgKiAtIHJlY2VpdmUgdGltZSBzdGFtcGluZyBpbiBzb2Z0d2FyZSByZXF1ZXN0ZWQgKFNPQ0tfUkNWVFNUQU1QCisJICogICBvciBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkKKwkgKiAtIHNvZnR3YXJlIHRpbWUgc3RhbXAgYXZhaWxhYmxlIGFuZCB3YW50ZWQKKwkgKiAgIChTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSkKKwkgKiAtIGhhcmR3YXJlIHRpbWUgc3RhbXBzIGF2YWlsYWJsZSBhbmQgd2FudGVkCisJICogICAoU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIG9yCisJICogICBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpCisJICovCisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApIHx8CisJICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpIHx8CisJICAgIChrdC50djY0ICYmIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpKSB8fAorCSAgICAoaHd0c3RhbXBzLT5od3RzdGFtcC50djY0ICYmCisJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSkpIHx8CisJICAgIChod3RzdGFtcHMtPnN5c3RzdGFtcC50djY0ICYmCisJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSkpKQogCQlfX3NvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTsKIAllbHNlCiAJCXNrLT5za19zdGFtcCA9IGt0OwogfQogCiAvKioKKyAqIHNvY2tfdHhfdGltZXN0YW1wIC0gY2hlY2tzIHdoZXRoZXIgdGhlIG91dGdvaW5nIHBhY2tldCBpcyB0byBiZSB0aW1lIHN0YW1wZWQKKyAqIEBtc2c6CW91dGdvaW5nIHBhY2tldAorICogQHNrOgkJc29ja2V0IHNlbmRpbmcgdGhpcyBwYWNrZXQKKyAqIEBzaHR4OglmaWxsZWQgd2l0aCBpbnN0cnVjdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcKKyAqCisgKiBDdXJyZW50bHkgb25seSBkZXBlbmRzIG9uIFNPQ0tfVElNRVNUQU1QSU5HKiBmbGFncy4gUmV0dXJucyBlcnJvciBjb2RlIGlmCisgKiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorICovCitleHRlcm4gaW50IHNvY2tfdHhfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywKKwkJCSAgICAgc3RydWN0IHNvY2sgKnNrLAorCQkJICAgICB1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4KTsKKworCisvKioKICAqIHNrX2VhdF9za2IgLSBSZWxlYXNlIGEgc2tiIGlmIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQKICAqIEBzazogc29ja2V0IHRvIGVhdCB0aGlzIHNrYiBmcm9tCiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGVhdApAQCAtMTQxNSw3ICsxNDU4LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotZXh0ZXJuIHZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZyk7CiBleHRlcm4gaW50IHNvY2tfZ2V0X3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKik7CiBleHRlcm4gaW50IHNvY2tfZ2V0X3RpbWVzdGFtcG5zKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggMjE4MjM1ZC4uZTU0Yzc2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTQ4MSw3ICs0ODEsMTYgQEAKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsYXJnZSk7CitleHRlcm4gdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2spOworCisvKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCitzdGF0aWMgaW5saW5lIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCit7CisJaWYgKHRwLT5tYXhfd2luZG93ICYmIHBrdHNpemUgPiAodHAtPm1heF93aW5kb3cgPj4gMSkpCisJCXJldHVybiBtYXgodHAtPm1heF93aW5kb3cgPj4gMSwgNjhVIC0gdHAtPnRjcF9oZWFkZXJfbGVuKTsKKwllbHNlCisJCXJldHVybiBwa3RzaXplOworfQogCiAvKiB0Y3AuYyAqLwogZXh0ZXJuIHZvaWQgdGNwX2dldF9pbmZvKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0Y3BfaW5mbyAqKTsKQEAgLTY4NSw2ICs2OTQsNyBAQAogZXh0ZXJuIGludCB0Y3Bfc2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmFsbG93ZWQpOwogZXh0ZXJuIGludCB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgdGNwX3Nsb3dfc3RhcnQoc3RydWN0IHRjcF9zb2NrICp0cCk7CitleHRlcm4gdm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdyk7CiAKIGV4dGVybiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9pbml0X2Nvbmdlc3Rpb25fb3BzOwogZXh0ZXJuIHUzMiB0Y3BfcmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spOwpAQCAtODIxLDE1ICs4MzEsMTUgQEAKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAotCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRjcF9jdXJyZW50X21zcyhzaywgMSksIHRwLT5ub25hZ2xlKTsKKwlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spLCB0cC0+bm9uYWdsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfaW5pdF93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrLCB1MzIgc2VxKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9pbml0X3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEpCiB7CiAJdHAtPnNuZF93bDEgPSBzZXE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfdXBkYXRlX3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2ssIHUzMiBzZXEpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3VwZGF0ZV93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc2VxKQogewogCXRwLT5zbmRfd2wxID0gc2VxOwogfQpAQCAtOTI1LDcgKzkzNSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NhY2tfcmVzZXQoc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQpCiB7CiAJcnhfb3B0LT5kc2FjayA9IDA7Ci0Jcnhfb3B0LT5lZmZfc2Fja3MgPSAwOwogCXJ4X29wdC0+bnVtX3NhY2tzID0gMDsKIH0KIApAQCAtOTk3LDExICsxMDA2LDIxIEBACiAJcmV0dXJuIGZpbl90aW1lb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwgaW50IHJzdCkKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9wYXdzX2NoZWNrKGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LAorCQkJCSBpbnQgcGF3c193aW4pCiB7Ci0JaWYgKChzMzIpKHJ4X29wdC0+cmN2X3RzdmFsIC0gcnhfb3B0LT50c19yZWNlbnQpID49IDApCi0JCXJldHVybiAwOwotCWlmIChnZXRfc2Vjb25kcygpID49IHJ4X29wdC0+dHNfcmVjZW50X3N0YW1wICsgVENQX1BBV1NfMjREQVlTKQorCWlmICgoczMyKShyeF9vcHQtPnRzX3JlY2VudCAtIHJ4X29wdC0+cmN2X3RzdmFsKSA8PSBwYXdzX3dpbikKKwkJcmV0dXJuIDE7CisJaWYgKHVubGlrZWx5KGdldF9zZWNvbmRzKCkgPj0gcnhfb3B0LT50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19yZWplY3QoY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsCisJCQkJICBpbnQgcnN0KQoreworCWlmICh0Y3BfcGF3c19jaGVjayhyeF9vcHQsIDApKQogCQlyZXR1cm4gMDsKIAogCS8qIFJTVCBzZWdtZW50cyBhcmUgbm90IHJlY29tbWVuZGVkIHRvIGNhcnJ5IHRpbWVzdGFtcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKaW5kZXggODc2YjZmMi4uYmZiMjQwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKKysrIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJCQkJCSAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsCiAJCQkJCQkgIGludCAqaGxpbWl0LCBpbnQgKnRjbGFzcyk7CiAKLSNkZWZpbmUJCUxPT1BCQUNLNF9JUFY2CQlfX2NvbnN0YW50X2h0b25sKDB4N2YwMDAwMDYpCisjZGVmaW5lCQlMT09QQkFDSzRfSVBWNgkJY3B1X3RvX2JlMzIoMHg3ZjAwMDAwNikKIAogLyoKICAqCWFkZHJlc3MgZmFtaWx5IHNwZWNpZmljIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwLmggYi9pbmNsdWRlL25ldC91ZHAuaAppbmRleCA5MGU2Y2U1Li45M2RiZTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC91ZHAuaAorKysgYi9pbmNsdWRlL25ldC91ZHAuaApAQCAtMTI0LDYgKzEyNCw4IEBACiAJc2tfY29tbW9uX3JlbGVhc2Uoc2spOwogfQogCitleHRlcm4gaW50CWlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOwogZXh0ZXJuIGludAl1ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKIAkJaW50ICgqKShjb25zdCBzdHJ1Y3Qgc29jayosY29uc3Qgc3RydWN0IHNvY2sqKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmggYi9pbmNsdWRlL25ldC93aXJlbGVzcy5oCmluZGV4IDIxYzVkOTYuLjY0YTc2MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKKysrIGIvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaApAQCAtNjksNiArNjksOSBAQAogICogQGJhbmQ6IGJhbmQgdGhpcyBjaGFubmVsIGJlbG9uZ3MgdG8uCiAgKiBAbWF4X2FudGVubmFfZ2FpbjogbWF4aW11bSBhbnRlbm5hIGdhaW4gaW4gZEJpCiAgKiBAbWF4X3Bvd2VyOiBtYXhpbXVtIHRyYW5zbWlzc2lvbiBwb3dlciAoaW4gZEJtKQorICogQGJlYWNvbl9mb3VuZDogaGVscGVyIHRvIHJlZ3VsYXRvcnkgY29kZSB0byBpbmRpY2F0ZSB3aGVuIGEgYmVhY29uCisgKgloYXMgYmVlbiBmb3VuZCBvbiB0aGlzIGNoYW5uZWwuIFVzZSByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKCkKKyAqCXRvIGVuYWJsZSB0aGlzLCB0aGlzIGlzIGlzIHVzZWZ1bCBvbmx5IG9uIDUgR0h6IGJhbmQuCiAgKiBAb3JpZ19tYWc6IGludGVybmFsIHVzZQogICogQG9yaWdfbXB3cjogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTgwLDYgKzgzLDcgQEAKIAl1MzIgZmxhZ3M7CiAJaW50IG1heF9hbnRlbm5hX2dhaW47CiAJaW50IG1heF9wb3dlcjsKKwlib29sIGJlYWNvbl9mb3VuZDsKIAl1MzIgb3JpZ19mbGFnczsKIAlpbnQgb3JpZ19tYWcsIG9yaWdfbXB3cjsKIH07CkBAIC0xODEsMTIgKzE4NSwyNiBAQAogICogc3RydWN0IHdpcGh5IC0gd2lyZWxlc3MgaGFyZHdhcmUgZGVzY3JpcHRpb24KICAqIEBpZHg6IHRoZSB3aXBoeSBpbmRleCBhc3NpZ25lZCB0byB0aGlzIGl0ZW0KICAqIEBjbGFzc19kZXY6IHRoZSBjbGFzcyBkZXZpY2UgcmVwcmVzZW50aW5nIC9zeXMvY2xhc3MvaWVlZTgwMjExLzx3aXBoeS1uYW1lPgotICogQGZ3X2hhbmRsZXNfcmVndWxhdG9yeTogdGVsbHMgdXMgdGhlIGZpcm13YXJlIGZvciB0aGlzIGRldmljZQotICogCWhhcyBpdHMgb3duIHJlZ3VsYXRvcnkgc29sdXRpb24gYW5kIGNhbm5vdCBpZGVudGlmeSB0aGUKKyAqIEBjdXN0b21fcmVndWxhdG9yeTogdGVsbHMgdXMgdGhlIGRyaXZlciBmb3IgdGhpcyBkZXZpY2UKKyAqIAloYXMgaXRzIG93biBjdXN0b20gcmVndWxhdG9yeSBkb21haW4gYW5kIGNhbm5vdCBpZGVudGlmeSB0aGUKICAqIAlJU08gLyBJRUMgMzE2NiBhbHBoYTIgaXQgYmVsb25ncyB0by4gV2hlbiB0aGlzIGlzIGVuYWJsZWQKICAqIAl3ZSB3aWxsIGRpc3JlZ2FyZCB0aGUgZmlyc3QgcmVndWxhdG9yeSBoaW50ICh3aGVuIHRoZQogICogCWluaXRpYXRvciBpcyAlUkVHRE9NX1NFVF9CWV9DT1JFKS4KKyAqIEBzdHJpY3RfcmVndWxhdG9yeTogdGVsbHMgdXMgdGhlIGRyaXZlciBmb3IgdGhpcyBkZXZpY2Ugd2lsbCBpZ25vcmUKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB1bnRpbCBpdCBnZXRzIGl0cyBvd24gcmVndWxhdG9yeSBkb21haW4KKyAqIAl2aWEgaXRzIHJlZ3VsYXRvcnlfaGludCgpLiBBZnRlciBpdHMgZ2V0cyBpdHMgb3duIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJaXQgd2lsbCBvbmx5IGFsbG93IGZ1cnRoZXIgcmVndWxhdG9yeSBkb21haW4gc2V0dGluZ3MgdG8gZnVydGhlcgorICogCWVuaGFuY2UgY29tcGxpYW5jZS4gRm9yIGV4YW1wbGUgaWYgY2hhbm5lbCAxMyBhbmQgMTQgYXJlIGRpc2FibGVkCisgKiAJYnkgdGhpcyByZWd1bGF0b3J5IGRvbWFpbiBubyB1c2VyIHJlZ3VsYXRvcnkgZG9tYWluIGNhbiBlbmFibGUgdGhlc2UKKyAqIAljaGFubmVscyBhdCBhIGxhdGVyIHRpbWUuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGRldmljZXMgd2hpY2ggZG8gbm90CisgKiAJaGF2ZSBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBnYXVyYW50ZWVkIGZvciBmcmVxdWVuY2llcyBvciBzZXR0aW5ncworICogCW91dHNpZGUgb2YgaXRzIHJlZ3VsYXRvcnkgZG9tYWluLgogICogQHJlZ19ub3RpZmllcjogdGhlIGRyaXZlcidzIHJlZ3VsYXRvcnkgbm90aWZpY2F0aW9uIGNhbGxiYWNrCisgKiBAcmVnZDogdGhlIGRyaXZlcidzIHJlZ3VsYXRvcnkgZG9tYWluLCBpZiBvbmUgd2FzIHJlcXVlc3RlZCB2aWEKKyAqIAl0aGUgcmVndWxhdG9yeV9oaW50KCkgQVBJLiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIKKyAqCW9uIHRoZSByZWdfbm90aWZpZXIoKSBpZiBpdCBjaG9vc2VzIHRvIGlnbm9yZSBmdXR1cmUKKyAqCXJlZ3VsYXRvcnkgZG9tYWluIGNoYW5nZXMgY2F1c2VkIGJ5IG90aGVyIGRyaXZlcnMuCisgKiBAc2lnbmFsX3R5cGU6IHNpZ25hbCB0eXBlIHJlcG9ydGVkIGluICZzdHJ1Y3QgY2ZnODAyMTFfYnNzLgogICovCiBzdHJ1Y3Qgd2lwaHkgewogCS8qIGFzc2lnbiB0aGVzZSBmaWVsZHMgYmVmb3JlIHlvdSByZWdpc3RlciB0aGUgd2lwaHkgKi8KQEAgLTE5Nyw3ICsyMTUsMTMgQEAKIAkvKiBTdXBwb3J0ZWQgaW50ZXJmYWNlIG1vZGVzLCBPUiB0b2dldGhlciBCSVQoTkw4MDIxMV9JRlRZUEVfLi4uKSAqLwogCXUxNiBpbnRlcmZhY2VfbW9kZXM7CiAKLQlib29sIGZ3X2hhbmRsZXNfcmVndWxhdG9yeTsKKwlib29sIGN1c3RvbV9yZWd1bGF0b3J5OworCWJvb2wgc3RyaWN0X3JlZ3VsYXRvcnk7CisKKwllbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIHNpZ25hbF90eXBlOworCisJaW50IGJzc19wcml2X3NpemU7CisJdTggbWF4X3NjYW5fc3NpZHM7CiAKIAkvKiBJZiBtdWx0aXBsZSB3aXBoeXMgYXJlIHJlZ2lzdGVyZWQgYW5kIHlvdSdyZSBoYW5kZWQgZS5nLgogCSAqIGEgcmVndWxhciBuZXRkZXYgd2l0aCBhc3NpZ25lZCBpZWVlODAyMTFfcHRyLCB5b3Ugd29uJ3QKQEAgLTIwOSwxMCArMjMzLDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKIAkvKiBMZXRzIHVzIGdldCBiYWNrIHRoZSB3aXBoeSBvbiB0aGUgY2FsbGJhY2sgKi8KLQlpbnQgKCpyZWdfbm90aWZpZXIpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSk7CisJaW50ICgqcmVnX25vdGlmaWVyKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogCiAJLyogZmllbGRzIGJlbG93IGFyZSByZWFkLW9ubHksIGFzc2lnbmVkIGJ5IGNmZzgwMjExICovCiAKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwogCS8qIHRoZSBpdGVtIGluIC9zeXMvY2xhc3MvaWVlZTgwMjExLyBwb2ludHMgdG8gdGhpcywKIAkgKiB5b3UgbmVlZCB1c2Ugc2V0X3dpcGh5X2RldigpIChzZWUgYmVsb3cpICovCiAJc3RydWN0IGRldmljZSBkZXY7CkBAIC0zNjEsNyArMzg4LDcgQEAKICAqLwogc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCSAgICB1NjQgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKTsKKwkJCSAgICB1MzIgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKTsKIAogLyoqCiAgKiByZWd1bGF0b3J5X2hpbnQgLSBkcml2ZXIgaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCkBAIC0zNzgsOCArNDA1LDE1IEBACiAgKiBkb21haW4gc2hvdWxkIGJlIGluIG9yIGJ5IHByb3ZpZGluZyBhIGNvbXBsZXRlbHkgYnVpbGQgcmVndWxhdG9yeSBkb21haW4uCiAgKiBJZiB0aGUgZHJpdmVyIHByb3ZpZGVzIGFuIElTTy9JRUMgMzE2NiBhbHBoYTIgdXNlcnNwYWNlIHdpbGwgYmUgcXVlcmllZAogICogZm9yIGEgcmVndWxhdG9yeSBkb21haW4gc3RydWN0dXJlIGZvciB0aGUgcmVzcGVjdGl2ZSBjb3VudHJ5LgorICoKKyAqIFRoZSB3aXBoeSBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIHRvIGNmZzgwMjExIHByaW9yIHRvIHRoaXMgY2FsbC4KKyAqIEZvciBjZmc4MDIxMSBkcml2ZXJzIHRoaXMgbWVhbnMgeW91IG11c3QgZmlyc3QgdXNlIHdpcGh5X3JlZ2lzdGVyKCksCisgKiBmb3IgbWFjODAyMTEgZHJpdmVycyB5b3UgbXVzdCBmaXJzdCB1c2UgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkuCisgKgorICogRHJpdmVycyBzaG91bGQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgaXRzIHBvc3NpYmxlIHlvdSBjYW4gZ2V0CisgKiBhbiAtRU5PTUVNLgogICovCi1leHRlcm4gdm9pZCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKTsKK2V4dGVybiBpbnQgcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGNvbnN0IGNoYXIgKmFscGhhMik7CiAKIC8qKgogICogcmVndWxhdG9yeV9oaW50XzExZCAtIGhpbnRzIGEgY291bnRyeSBJRSBhcyBhIHJlZ3VsYXRvcnkgZG9tYWluCkBAIC0zOTUsNCArNDI5LDQ0IEBACiBleHRlcm4gdm9pZCByZWd1bGF0b3J5X2hpbnRfMTFkKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJdTggKmNvdW50cnlfaWUsCiAJCQkJdTggY291bnRyeV9pZV9sZW4pOworLyoqCisgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSAtIGFwcGx5IGEgY3VzdG9tIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgcmVndWxhdG9yeSBkb21haW4gb24KKyAqIEByZWdkOiB0aGUgY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluIHRvIHVzZSBmb3IgdGhpcyB3aXBoeQorICoKKyAqIERyaXZlcnMgY2FuIHNvbWV0aW1lcyBoYXZlIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbnMgd2hpY2ggZG8gbm90IGFwcGx5CisgKiB0byBhIHNwZWNpZmljIGNvdW50cnkuIERyaXZlcnMgY2FuIHVzZSB0aGlzIHRvIGFwcGx5IHN1Y2ggY3VzdG9tIHJlZ3VsYXRvcnkKKyAqIGRvbWFpbnMuIFRoaXMgcm91dGluZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byB3aXBoeSByZWdpc3RyYXRpb24uIFRoZQorICogY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluIHdpbGwgYmUgdHJ1c3RlZCBjb21wbGV0ZWx5IGFuZCBhcyBzdWNoIHByZXZpb3VzCisgKiBkZWZhdWx0IGNoYW5uZWwgc2V0dGluZ3Mgd2lsbCBiZSBkaXNyZWdhcmRlZC4gSWYgbm8gcnVsZSBpcyBmb3VuZCBmb3IgYQorICogY2hhbm5lbCBvbiB0aGUgcmVndWxhdG9yeSBkb21haW4gdGhlIGNoYW5uZWwgd2lsbCBiZSBkaXNhYmxlZC4KKyAqLworZXh0ZXJuIHZvaWQgd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoCisJc3RydWN0IHdpcGh5ICp3aXBoeSwKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCk7CisKKy8qKgorICogZnJlcV9yZWdfaW5mbyAtIGdldCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gZnJlcXVlbmN5CisgKiBAd2lwaHk6IHRoZSB3aXBoeSBmb3Igd2hpY2ggd2Ugd2FudCB0byBwcm9jZXNzIHRoaXMgcnVsZSBmb3IKKyAqIEBjZW50ZXJfZnJlcTogRnJlcXVlbmN5IGluIEtIeiBmb3Igd2hpY2ggd2Ugd2FudCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGZvcgorICogQGJhbmR3aWR0aDogdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudCB5b3UgaGF2ZSBpbiBLSHosIGlmIHlvdSBkbyBub3QgaGF2ZSBvbmUKKyAqIAl5b3UgY2FuIHNldCB0aGlzIHRvIDAuIElmIHRoaXMgZnJlcXVlbmN5IGlzIGFsbG93ZWQgd2UgdGhlbiBzZXQKKyAqIAl0aGlzIHZhbHVlIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYmFuZHdpZHRoLgorICogQHJlZ19ydWxlOiB0aGUgcmVndWxhdG9yeSBydWxlIHdoaWNoIHdlIGhhdmUgZm9yIHRoaXMgZnJlcXVlbmN5CisgKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSByZWd1bGF0b3J5IHJ1bGUgZm9yIGEgc3BlY2lmaWMgZnJlcXVlbmN5IG9uCisgKiBhIGdpdmVuIHdpcmVsZXNzIGRldmljZS4gSWYgdGhlIGRldmljZSBoYXMgYSBzcGVjaWZpYyByZWd1bGF0b3J5IGRvbWFpbgorICogaXQgd2FudHMgdG8gZm9sbG93IHdlIHJlc3BlY3QgdGhhdCB1bmxlc3MgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkCisgKiBhbmQgcHJvY2Vzc2VkIGFscmVhZHkuCisgKgorICogUmV0dXJucyAwIGlmIGl0IHdhcyBhYmxlIHRvIGZpbmQgYSB2YWxpZCByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggZG9lcworICogYXBwbHkgdG8gdGhlIGdpdmVuIGNlbnRlcl9mcmVxIG90aGVyd2lzZSBpdCByZXR1cm5zIG5vbi16ZXJvLiBJdCB3aWxsCisgKiBhbHNvIHJldHVybiAtRVJBTkdFIGlmIHdlIGRldGVybWluZSB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgZG9lcyBub3QgZXZlbiBoYXZlCisgKiBhIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBmcmVxdWVuY3kgcmFuZ2UgaW4gdGhlIGNlbnRlcl9mcmVxJ3MgYmFuZC4gU2VlCisgKiBmcmVxX2luX3J1bGVfYmFuZCgpIGZvciBvdXIgY3VycmVudCBkZWZpbml0aW9uIG9mIGEgYmFuZCAtLSB0aGlzIGlzIHB1cmVseQorICogc3ViamVjdGl2ZSBhbmQgcmlnaHQgbm93IGl0cyA4MDIuMTEgc3BlY2lmaWMuCisgKi8KK2V4dGVybiBpbnQgZnJlcV9yZWdfaW5mbyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2VudGVyX2ZyZXEsIHUzMiAqYmFuZHdpZHRoLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKipyZWdfcnVsZSk7CisKICNlbmRpZiAvKiBfX05FVF9XSVJFTEVTU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfY20uaCBiL2luY2x1ZGUvcmRtYS9pYl9jbS5oCmluZGV4IGVjN2M2ZDkuLjkzODg1ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9jbS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9jbS5oCkBAIC0zMTQsMTIgKzMxNCwxMiBAQAogICovCiB2b2lkIGliX2Rlc3Ryb3lfY21faWQoc3RydWN0IGliX2NtX2lkICpjbV9pZCk7CiAKLSNkZWZpbmUgSUJfU0VSVklDRV9JRF9BR05fTUFTSwlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4RkYwMDAwMDAwMDAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQgX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAyMDAwMDAwMDAwMDAwMDBVTEwpCi0jZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lECV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAxMDAwMDAwVUxMKQotI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGMDAwMDAwVUxMKQotI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRAlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDAwMDAwMDAwMDAxMDAwMFVMTCkKLSNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSURfTUFTSwlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4RkZGRkZGRkZGRkZGMDAwMFVMTCkKKyNkZWZpbmUgSUJfU0VSVklDRV9JRF9BR05fTUFTSwljcHVfdG9fYmU2NCgweEZGMDAwMDAwMDAwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNX0FTU0lHTl9TRVJWSUNFX0lECWNwdV90b19iZTY0KDB4MDIwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSUQJY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAxMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRF9NQVNLCWNwdV90b19iZTY0KDB4RkZGRkZGRkZGRjAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSUQJY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAwMDEwMDAwVUxMKQorI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRF9NQVNLCWNwdV90b19iZTY0KDB4RkZGRkZGRkZGRkZGMDAwMFVMTCkKIAogc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSB7CiAJdTggIGRhdGFbSUJfQ01fQ09NUEFSRV9TSVpFXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaCBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAppbmRleCA1ZjZjNDBmLi5kM2I5NDAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCkBAIC0xMDcsNyArMTA3LDcgQEAKICNkZWZpbmUJSUJfTUdNVF9STVBQX1NUQVRVU19BQk9SVF9NQVgJCTEyNwogCiAjZGVmaW5lIElCX1FQMAkJMAotI2RlZmluZSBJQl9RUDEJCV9fY29uc3RhbnRfaHRvbmwoMSkKKyNkZWZpbmUgSUJfUVAxCQljcHVfdG9fYmUzMigxKQogI2RlZmluZSBJQl9RUDFfUUtFWQkweDgwMDEwMDAwCiAjZGVmaW5lIElCX1FQX1NFVF9RS0VZCTB4ODAwMDAwMDAKIApAQCAtMjkwLDcgKzI5MCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9zZXRfcm1wcF9mbGFncyhzdHJ1Y3QgaWJfcm1wcF9oZHIgKnJtcHBfaGRyLCB1OCBmbGFncykKIHsKLQlybXBwX2hkci0+cm1wcF9ydGltZV9mbGFncyA9IChybXBwX2hkci0+cm1wcF9ydGltZV9mbGFncyAmIDB4RjEpIHwKKwlybXBwX2hkci0+cm1wcF9ydGltZV9mbGFncyA9IChybXBwX2hkci0+cm1wcF9ydGltZV9mbGFncyAmIDB4RjgpIHwKIAkJCQkgICAgIChmbGFncyAmIDB4Nyk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9zbWkuaCBiL2luY2x1ZGUvcmRtYS9pYl9zbWkuaAppbmRleCBhYWNhMDg3Li45OGI5MDg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfc21pLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3NtaS5oCkBAIC02MywyNSArNjMsMjUgQEAKIAl1OAlyZXR1cm5fcGF0aFtJQl9TTVBfTUFYX1BBVEhfSE9QU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJQl9TTVBfRElSRUNUSU9OCQkJX19jb25zdGFudF9odG9ucygweDgwMDApCisjZGVmaW5lIElCX1NNUF9ESVJFQ1RJT04JCQljcHVfdG9fYmUxNigweDgwMDApCiAKIC8qIFN1Ym5ldCBtYW5hZ2VtZW50IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgSUJfU01QX0FUVFJfTk9USUNFCQkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1NNUF9BVFRSX05PREVfREVTQwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfU1dJVENIX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMikKLSNkZWZpbmUgSUJfU01QX0FUVFJfR1VJRF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTQpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1BPUlRfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE1KQotI2RlZmluZSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFCQkJX19jb25zdGFudF9odG9ucygweDAwMTYpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1NMX1RPX1ZMX1RBQkxFCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNykKLSNkZWZpbmUgSUJfU01QX0FUVFJfVkxfQVJCX1RBQkxFCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxOCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTElORUFSX0ZPUldBUkRfVEFCTEUJX19jb25zdGFudF9odG9ucygweDAwMTkpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1JBTkRPTV9GT1JXQVJEX1RBQkxFCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFBKQotI2RlZmluZSBJQl9TTVBfQVRUUl9NQ0FTVF9GT1JXQVJEX1RBQkxFCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxQikKLSNkZWZpbmUgSUJfU01QX0FUVFJfU01fSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDIwKQotI2RlZmluZSBJQl9TTVBfQVRUUl9WRU5ET1JfRElBRwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDMwKQotI2RlZmluZSBJQl9TTVBfQVRUUl9MRURfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDMxKQotI2RlZmluZSBJQl9TTVBfQVRUUl9WRU5ET1JfTUFTSwkJCV9fY29uc3RhbnRfaHRvbnMoMHhGRjAwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9OT1RJQ0UJCQljcHVfdG9fYmUxNigweDAwMDIpCisjZGVmaW5lIElCX1NNUF9BVFRSX05PREVfREVTQwkJCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBJQl9TTVBfQVRUUl9TV0lUQ0hfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxMikKKyNkZWZpbmUgSUJfU01QX0FUVFJfR1VJRF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDE0KQorI2RlZmluZSBJQl9TTVBfQVRUUl9QT1JUX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTUpCisjZGVmaW5lIElCX1NNUF9BVFRSX1BLRVlfVEFCTEUJCQljcHVfdG9fYmUxNigweDAwMTYpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NMX1RPX1ZMX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMTcpCisjZGVmaW5lIElCX1NNUF9BVFRSX1ZMX0FSQl9UQUJMRQkJY3B1X3RvX2JlMTYoMHgwMDE4KQorI2RlZmluZSBJQl9TTVBfQVRUUl9MSU5FQVJfRk9SV0FSRF9UQUJMRQljcHVfdG9fYmUxNigweDAwMTkpCisjZGVmaW5lIElCX1NNUF9BVFRSX1JBTkRPTV9GT1JXQVJEX1RBQkxFCWNwdV90b19iZTE2KDB4MDAxQSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTUNBU1RfRk9SV0FSRF9UQUJMRQkJY3B1X3RvX2JlMTYoMHgwMDFCKQorI2RlZmluZSBJQl9TTVBfQVRUUl9TTV9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDIwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9WRU5ET1JfRElBRwkJCWNwdV90b19iZTE2KDB4MDAzMCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTEVEX0lORk8JCQljcHVfdG9fYmUxNigweDAwMzEpCisjZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9NQVNLCQkJY3B1X3RvX2JlMTYoMHhGRjAwKQogCiBzdHJ1Y3QgaWJfcG9ydF9pbmZvIHsKIAlfX2JlNjQgbWtleTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggOTM2ZTMzMy4uYzE3OTMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTM4OCw3ICszODgsNyBAQAogCUlCX01VTFRJQ0FTVF9RUE4gPSAweGZmZmZmZgogfTsKIAotI2RlZmluZSBJQl9MSURfUEVSTUlTU0lWRQlfX2NvbnN0YW50X2h0b25zKDB4RkZGRikKKyNkZWZpbmUgSUJfTElEX1BFUk1JU1NJVkUJY3B1X3RvX2JlMTYoMHhGRkZGKQogCiBlbnVtIGliX2FoX2ZsYWdzIHsKIAlJQl9BSF9HUkgJPSAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmNvZS5oIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2Zjb2UuaAppbmRleCA1N2FhYThmLi5jY2IzZGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmNvZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY29lLmgKQEAgLTI1LDE3ICsyNSw2IEBACiAgKi8KIAogLyoKLSAqIFRoZSBGQ29FIGV0aGVydHlwZSBldmVudHVhbGx5IGdvZXMgaW4gbmV0L2lmX2V0aGVyLmguCi0gKi8KLSNpZm5kZWYgRVRIX1BfRkNPRQotI2RlZmluZQlFVEhfUF9GQ09FCTB4ODkwNgkJLyogRkNPRSBldGhlciB0eXBlICovCi0jZW5kaWYKLQotI2lmbmRlZiBFVEhfUF84MDIxUQotI2RlZmluZQlFVEhfUF84MDIxUQkweDgxMDAKLSNlbmRpZgotCi0vKgogICogRkNfRkNPRV9PVUkgaGFzbid0IGJlZW4gc3RhbmRhcmRpemVkIHlldC4gICBYWFggVEJELgogICovCiAjaWZuZGVmIEZDX0ZDT0VfT1VJCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmMvZmNfZnMuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oCmluZGV4IDNlNDgwMWQuLjFiN2FmM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9mYy9mY19mcy5oCkBAIC0zMzcsNCArMzM3LDkgQEAKIAlGQ19SSlRfVkVORE9SID0JCTB4ZmYsCS8qIHZlbmRvciBzcGVjaWZpYyByZWplY3QgKi8KIH07CiAKKy8qIGRlZmF1bHQgdGltZW91dCB2YWx1ZXMgKi8KKworI2RlZmluZSBGQ19ERUZfRV9EX1RPVgkyMDAwVUwKKyNkZWZpbmUgRkNfREVGX1JfQV9UT1YJMTAwMDBVTAorCiAjZW5kaWYgLyogX0ZDX0ZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmNfZnJhbWUuaCBiL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oCmluZGV4IDA0ZDM0YTcuLjU5NTExMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oCkBAIC01NCw4ICs1NCw3IEBACiAjZGVmaW5lIGZyX2VvZihmcCkJKGZyX2NiKGZwKS0+ZnJfZW9mKQogI2RlZmluZSBmcl9mbGFncyhmcCkJKGZyX2NiKGZwKS0+ZnJfZmxhZ3MpCiAjZGVmaW5lIGZyX21heF9wYXlsb2FkKGZwKQkoZnJfY2IoZnApLT5mcl9tYXhfcGF5bG9hZCkKLSNkZWZpbmUgZnJfY21kKGZwKQkoZnJfY2IoZnApLT5mcl9jbWQpCi0jZGVmaW5lIGZyX2RpcihmcCkJKGZyX2NtZChmcCktPnNjX2RhdGFfZGlyZWN0aW9uKQorI2RlZmluZSBmcl9mc3AoZnApCShmcl9jYihmcCktPmZyX2ZzcCkKICNkZWZpbmUgZnJfY3JjKGZwKQkoZnJfY2IoZnApLT5mcl9jcmMpCiAKIHN0cnVjdCBmY19mcmFtZSB7CkBAIC02Niw3ICs2NSw3IEBACiAJc3RydWN0IHBhY2tldF90eXBlICAqcHR5cGU7CiAJc3RydWN0IGZjX2xwb3J0CSpmcl9kZXY7CS8qIHRyYW5zcG9ydCBsYXllciBwcml2YXRlIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgZmNfc2VxCSpmcl9zZXE7CS8qIGZvciB1c2Ugd2l0aCBleGNoYW5nZSBtYW5hZ2VyICovCi0Jc3RydWN0IHNjc2lfY21uZCAqZnJfY21kOwkvKiBmb3IgdXNlIG9mIHNjc2kgY29tbWFuZCAqLworCXN0cnVjdCBmY19mY3BfcGt0ICpmcl9mc3A7CS8qIGZvciB0aGUgY29ycmVzcG9uZGluZyBmY3AgSS9PICovCiAJdTMyCQlmcl9jcmM7CiAJdTE2CQlmcl9tYXhfcGF5bG9hZDsJLyogbWF4IEZDIHBheWxvYWQgKi8KIAllbnVtIGZjX3NvZglmcl9zb2Y7CQkvKiBzdGFydCBvZiBmcmFtZSBkZWxpbWl0ZXIgKi8KQEAgLTIxOCwyMCArMjE3LDYgQEAKIAlyZXR1cm4gZmNfZnJhbWVfcmN0bChmcCkgPT0gRkNfUkNUTF9ERF9VTlNPTF9DTUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmY19mcmFtZV9pc19yZWFkKGNvbnN0IHN0cnVjdCBmY19mcmFtZSAqZnApCi17Ci0JaWYgKGZjX2ZyYW1lX2lzX2NtZChmcCkgJiYgZnJfY21kKGZwKSkKLQkJcmV0dXJuIGZyX2RpcihmcCkgPT0gRE1BX0ZST01fREVWSUNFOwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZjX2ZyYW1lX2lzX3dyaXRlKGNvbnN0IHN0cnVjdCBmY19mcmFtZSAqZnApCi17Ci0JaWYgKGZjX2ZyYW1lX2lzX2NtZChmcCkgJiYgZnJfY21kKGZwKSkKLQkJcmV0dXJuIGZyX2RpcihmcCkgPT0gRE1BX1RPX0RFVklDRTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qCiAgKiBDaGVjayBmb3IgbGVha3MuCiAgKiBQcmludCB0aGUgZnJhbWUgaGVhZGVyIG9mIGFueSBjdXJyZW50bHkgYWxsb2NhdGVkIGZyYW1lLCBhc3N1bWluZyB0aGVyZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjLmggYi9pbmNsdWRlL3Njc2kvbGliZmMuaAppbmRleCA5ZjI4NzYzLi5hNzBlYWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmMuaApAQCAtNjgsOSArNjgsNiBAQAogLyoKICAqIEZDIEhCQSBzdGF0dXMKICAqLwotI2RlZmluZSBGQ19QQVVTRQkJICAgICgxIDw8IDEpCi0jZGVmaW5lIEZDX0xJTktfVVAJCSAgICAoMSA8PCAwKQotCiBlbnVtIGZjX2xwb3J0X3N0YXRlIHsKIAlMUE9SVF9TVF9OT05FID0gMCwKIAlMUE9SVF9TVF9GTE9HSSwKQEAgLTI0OCw2ICsyNDUsNyBAQAogCSAqLwogCXN0cnVjdCBmY3BfY21uZCBjZGJfY21kOwogCXNpemVfdAkJeGZlcl9sZW47CisJdTE2CQl4ZmVyX2RkcDsJLyogdGhpcyB4ZmVyIGlzIGRkcGVkICovCiAJdTMyCQl4ZmVyX2NvbnRpZ19lbmQ7IC8qIG9mZnNldCBvZiBlbmQgb2YgY29udGlndW91cyB4ZmVyICovCiAJdTE2CQltYXhfcGF5bG9hZDsJLyogbWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyAqLwogCkBAIC0yNzAsNiArMjY4LDE1IEBACiAJdTgJCXJlY292X3JldHJ5OwkvKiBjb3VudCBvZiByZWNvdmVyeSByZXRyaWVzICovCiAJc3RydWN0IGZjX3NlcQkqcmVjb3Zfc2VxOwkvKiBzZXF1ZW5jZSBmb3IgUkVDIG9yIFNSUiAqLwogfTsKKy8qCisgKiBGQ19GQ1AgSEVMUEVSIEZVTkNUSU9OUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBib29sIGZjX2ZjcF9pc19yZWFkKGNvbnN0IHN0cnVjdCBmY19mY3BfcGt0ICpmc3ApCit7CisJaWYgKGZzcCAmJiBmc3AtPmNtZCkKKwkJcmV0dXJuIGZzcC0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0U7CisJcmV0dXJuIGZhbHNlOworfQogCiAvKgogICogU3RydWN0dXJlIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgRmlicmUgQ2hhbm5lbCBFeGNoYW5nZXMKQEAgLTMzOSwzMSArMzQ2LDE3IEBACiAKIHN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSB7CiAKLQkvKioKLQkgKiBNYW5kYXRvcnkgRmllbGRzCi0JICoKLQkgKiBUaGVzZSBoYW5kbGVycyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBMTEQuCi0JICovCi0KIAkvKgogCSAqIEludGVyZmFjZSB0byBzZW5kIGEgRkMgZnJhbWUKKwkgKgorCSAqIFNUQVRVUzogUkVRVUlSRUQKIAkgKi8KIAlpbnQgKCpmcmFtZV9zZW5kKShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKTsKIAotCS8qKgotCSAqIE9wdGlvbmFsIEZpZWxkcwotCSAqCi0JICogVGhlIExMRCBtYXkgY2hvb3NlIHRvIGltcGxlbWVudCBhbnkgb2YgdGhlIGZvbGxvd2luZyBoYW5kbGVycy4KLQkgKiBJZiBMTEQgZG9lc24ndCBzcGVjaWZ5IGhhbmRlciBhbmQgbGVhdmVzIGl0cyBwb2ludGVyIE5VTEwgdGhlbgotCSAqIHRoZSBkZWZhdWx0IGxpYmZjIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhhdCBoYW5kbGVyLgotCSAqLwotCi0JLyoqCi0JICogRUxTL0NUIGludGVyZmFjZXMKLQkgKi8KLQogCS8qCi0JICogZWxzY3Rfc2VuZCAtIHNlbmRzIEVMUy9DVCBmcmFtZQorCSAqIEludGVyZmFjZSB0byBzZW5kIEVMUy9DVCBmcmFtZXMKKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAlzdHJ1Y3QgZmNfc2VxICooKmVsc2N0X3NlbmQpKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCiAJCQkJICAgICBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LApAQCAtMzczLDkgKzM2Niw2IEBACiAJCQkJCSAgICAgc3RydWN0IGZjX2ZyYW1lICpmcCwKIAkJCQkJICAgICB2b2lkICphcmcpLAogCQkJCSAgICAgdm9pZCAqYXJnLCB1MzIgdGltZXJfbXNlYyk7Ci0JLyoqCi0JICogRXhoYW5jZSBNYW5hZ2VyIGludGVyZmFjZXMKLQkgKi8KIAogCS8qCiAJICogU2VuZCB0aGUgRkMgZnJhbWUgcGF5bG9hZCB1c2luZyBhIG5ldyBleGNoYW5nZSBhbmQgc2VxdWVuY2UuCkBAIC00MDcsNiArMzk3LDggQEAKIAkgKiB0aW1lcl9tc2VjIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4gVGhlIHRpbWVyIGlzIGNhbmNlbGVkIHdoZW4KIAkgKiBpdCBmaXJlcyBvciB3aGVuIHRoZSBleGNoYW5nZSBpcyBkb25lLiBUaGUgZXhjaGFuZ2UgdGltZW91dCBoYW5kbGVyCiAJICogaXMgcmVnaXN0ZXJlZCBieSBFTSBsYXllci4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAlzdHJ1Y3QgZmNfc2VxICooKmV4Y2hfc2VxX3NlbmQpKHN0cnVjdCBmY19scG9ydCAqbHAsCiAJCQkJCXN0cnVjdCBmY19mcmFtZSAqZnAsCkBAIC00MTgsMTQgKzQxMCwzMyBAQAogCQkJCQl2b2lkICphcmcsIHVuc2lnbmVkIGludCB0aW1lcl9tc2VjKTsKIAogCS8qCi0JICogc2VuZCBhIGZyYW1lIHVzaW5nIGV4aXN0aW5nIHNlcXVlbmNlIGFuZCBleGNoYW5nZS4KKwkgKiBTZXRzIHVwIHRoZSBERFAgY29udGV4dCBmb3IgYSBnaXZlbiBleGNoYW5nZSBpZCBvbiB0aGUgZ2l2ZW4KKwkgKiBzY2F0dGVybGlzdCBpZiBMTEQgc3VwcG9ydHMgRERQIGZvciBsYXJnZSByZWNlaXZlLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAorCSAqLworCWludCAoKmRkcF9zZXR1cCkoc3RydWN0IGZjX2xwb3J0ICpscCwgdTE2IHhpZCwKKwkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnYyk7CisJLyoKKwkgKiBDb21wbGV0ZXMgdGhlIEREUCB0cmFuc2ZlciBhbmQgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGRhdGEgRERQZWQKKwkgKiBmb3IgdGhlIGdpdmVuIGV4Y2hhbmdlIGlkLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAorCSAqLworCWludCAoKmRkcF9kb25lKShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCB1MTYgeGlkKTsKKwkvKgorCSAqIFNlbmQgYSBmcmFtZSB1c2luZyBhbiBleGlzdGluZyBzZXF1ZW5jZSBhbmQgZXhjaGFuZ2UuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJaW50ICgqc2VxX3NlbmQpKHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19zZXEgKnNwLAogCQkJc3RydWN0IGZjX2ZyYW1lICpmcCk7CiAKIAkvKgotCSAqIFNlbmQgRUxTIHJlc3BvbnNlIHVzaW5nIG1haW5seSBpbmZvbWF0aW9uCi0JICogaW4gZXhjaGFuZ2UgYW5kIHNlcXVlbmNlIGluIEVNIGxheWVyLgorCSAqIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbSBhIHByZXZpb3VzCisJICogZXhjaGFuZ2UgYW5kIHNlcXVlbmNlLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpzZXFfZWxzX3JzcF9zZW5kKShzdHJ1Y3QgZmNfc2VxICpzcCwgZW51bSBmY19lbHNfY21kIGVsc19jbWQsCiAJCQkJIHN0cnVjdCBmY19zZXFfZWxzX2RhdGEgKmVsc19kYXRhKTsKQEAgLTQzNyw2ICs0NDgsOCBAQAogCSAqIEEgdGltZXJfbXNlYyBjYW4gYmUgc3BlY2lmaWVkIGZvciBhYm9ydCB0aW1lb3V0LCBpZiBub24temVybwogCSAqIHRpbWVyX21zZWMgdmFsdWUgaXMgc3BlY2lmaWVkIHRoZW4gZXhjaGFuZ2UgcmVzcCBoYW5kbGVyCiAJICogd2lsbCBiZSBjYWxsZWQgd2l0aCB0aW1lb3V0IGVycm9yIGlmIG5vIHJlc3BvbnNlIHRvIGFib3J0LgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCWludCAoKnNlcV9leGNoX2Fib3J0KShjb25zdCBzdHJ1Y3QgZmNfc2VxICpyZXFfc3AsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZXJfbXNlYyk7CkBAIC00NDQsNiArNDU3LDggQEAKIAkvKgogCSAqIEluZGljYXRlIHRoYXQgYW4gZXhjaGFuZ2Uvc2VxdWVuY2UgdHVwbGUgaXMgY29tcGxldGUgYW5kIHRoZSBtZW1vcnkKIAkgKiBhbGxvY2F0ZWQgZm9yIHRoZSByZWxhdGVkIG9iamVjdHMgbWF5IGJlIGZyZWVkLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpleGNoX2RvbmUpKHN0cnVjdCBmY19zZXEgKnNwKTsKIApAQCAtNDUxLDYgKzQ2Niw4IEBACiAJICogQXNzaWducyBhIEVNIGFuZCBhIGZyZWUgWElEIGZvciBhbiBuZXcgZXhjaGFuZ2UgYW5kIHRoZW4KIAkgKiBhbGxvY2F0ZXMgYSBuZXcgZXhjaGFuZ2UgYW5kIHNlcXVlbmNlIHBhaXIuCiAJICogVGhlIGZwIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBmcmVlIFhJRC4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAlzdHJ1Y3QgZmNfZXhjaCAqKCpleGNoX2dldCkoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZyYW1lICpmcCk7CiAKQEAgLTQ1OCwxMiArNDc1LDE2IEBACiAJICogUmVsZWFzZSBwcmV2aW91c2x5IGFzc2lnbmVkIFhJRCBieSBleGNoX2dldCBBUEkuCiAJICogVGhlIExMRCBtYXkgaW1wbGVtZW50IHRoaXMgaWYgWElEIGlzIGFzc2lnbmVkIGJ5IExMRAogCSAqIGluIGV4Y2hfZ2V0KCkuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJdm9pZCAoKmV4Y2hfcHV0KShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAogCQkJIHUxNiBleF9pZCk7CiAKIAkvKgogCSAqIFN0YXJ0IGEgbmV3IHNlcXVlbmNlIG9uIHRoZSBzYW1lIGV4Y2hhbmdlL3NlcXVlbmNlIHR1cGxlLgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXN0cnVjdCBmY19zZXEgKigqc2VxX3N0YXJ0X25leHQpKHN0cnVjdCBmY19zZXEgKnNwKTsKIApAQCAtNDcxLDI2ICs0OTIsMzggQEAKIAkgKiBSZXNldCBhbiBleGNoYW5nZSBtYW5hZ2VyLCBjb21wbGV0aW5nIGFsbCBzZXF1ZW5jZXMgYW5kIGV4Y2hhbmdlcy4KIAkgKiBJZiBzX2lkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5IGV4Y2hhbmdlcyBvcmlnaW5hdGluZyBmcm9tIHRoYXQgRklELgogCSAqIElmIGRfaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIHNlbmRpbmcgdG8gdGhhdCBGSUQuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCi0Jdm9pZCAoKmV4Y2hfbWdyX3Jlc2V0KShzdHJ1Y3QgZmNfZXhjaF9tZ3IgKiwKKwl2b2lkICgqZXhjaF9tZ3JfcmVzZXQpKHN0cnVjdCBmY19scG9ydCAqLAogCQkJICAgICAgIHUzMiBzX2lkLCB1MzIgZF9pZCk7CiAKLQl2b2lkICgqcnBvcnRfZmx1c2hfcXVldWUpKHZvaWQpOwotCS8qKgotCSAqIExvY2FsIFBvcnQgaW50ZXJmYWNlcworCS8qCisJICogRmx1c2ggdGhlIHJwb3J0IHdvcmsgcXVldWUuIEdlbmVyYWxseSB1c2VkIGJlZm9yZSBzaHV0ZG93bi4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KKwl2b2lkICgqcnBvcnRfZmx1c2hfcXVldWUpKHZvaWQpOwogCiAJLyoKLQkgKiBSZWNlaXZlIGEgZnJhbWUgdG8gYSBsb2NhbCBwb3J0LgorCSAqIFJlY2VpdmUgYSBmcmFtZSBmb3IgYSBsb2NhbCBwb3J0LgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpscG9ydF9yZWN2KShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfc2VxICpzcCwKIAkJCSAgIHN0cnVjdCBmY19mcmFtZSAqZnApOwogCisJLyoKKwkgKiBSZXNldCB0aGUgbG9jYWwgcG9ydC4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKKwkgKi8KIAlpbnQgKCpscG9ydF9yZXNldCkoc3RydWN0IGZjX2xwb3J0ICopOwogCi0JLyoqCi0JICogUmVtb3RlIFBvcnQgaW50ZXJmYWNlcworCS8qCisJICogQ3JlYXRlIGEgcmVtb3RlIHBvcnQKIAkgKi8KKwlzdHJ1Y3QgZmNfcnBvcnQgKigqcnBvcnRfY3JlYXRlKShzdHJ1Y3QgZmNfZGlzY19wb3J0ICopOwogCiAJLyoKIAkgKiBJbml0aWF0ZXMgdGhlIFJQIHN0YXRlIG1hY2hpbmUuIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBMUCBtb2R1bGUuCkBAIC01MDAsMjYgKzUzMywzMyBAQAogCSAqIC0gUExPR0kKIAkgKiAtIFBSTEkKIAkgKiAtIFJUVgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCWludCAoKnJwb3J0X2xvZ2luKShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KTsKIAogCS8qCiAJICogTG9nb2ZmLCBhbmQgcmVtb3ZlIHRoZSBycG9ydCBmcm9tIHRoZSB0cmFuc3BvcnQgaWYKIAkgKiBpdCBoYWQgYmVlbiBhZGRlZC4gVGhpcyB3aWxsIHNlbmQgYSBMT0dPIHRvIHRoZSB0YXJnZXQuCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJaW50ICgqcnBvcnRfbG9nb2ZmKShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KTsKIAogCS8qCiAJICogUmVjaWV2ZSBhIHJlcXVlc3QgZnJvbSBhIHJlbW90ZSBwb3J0LgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpycG9ydF9yZWN2X3JlcSkoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKiwKIAkJCSAgICAgICBzdHJ1Y3QgZmNfcnBvcnQgKik7CiAKLQlzdHJ1Y3QgZmNfcnBvcnQgKigqcnBvcnRfbG9va3VwKShjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKiwgdTMyKTsKLQotCS8qKgotCSAqIEZDUCBpbnRlcmZhY2VzCisJLyoKKwkgKiBsb29rdXAgYW4gcnBvcnQgYnkgaXQncyBwb3J0IElELgorCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLworCXN0cnVjdCBmY19ycG9ydCAqKCpycG9ydF9sb29rdXApKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqLCB1MzIpOwogCiAJLyoKIAkgKiBTZW5kIGEgZmNwIGNtZCBmcm9tIGZzcCBwa3QuCkBAIC01MjcsMzAgKzU2NywzOCBAQAogCSAqCiAJICogVGhlIHJlc3AgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiBGQ1BfUlNQIHJlY2VpdmVkLgogCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCWludCAoKmZjcF9jbWRfc2VuZCkoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCwKIAkJCSAgICB2b2lkICgqcmVzcCkoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAogCQkJCQkgdm9pZCAqYXJnKSk7CiAKIAkvKgotCSAqIFVzZWQgYXQgbGVhc3QgZHVycmluZyBsaW5rZG93biBhbmQgcmVzZXQKKwkgKiBDbGVhbnVwIHRoZSBGQ1AgbGF5ZXIsIHVzZWQgZHVycmluZyBsaW5rIGRvd24gYW5kIHJlc2V0CisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJdm9pZCAoKmZjcF9jbGVhbnVwKShzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAogCS8qCiAJICogQWJvcnQgYWxsIEkvTyBvbiBhIGxvY2FsIHBvcnQKKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAl2b2lkICgqZmNwX2Fib3J0X2lvKShzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAotCS8qKgotCSAqIERpc2NvdmVyeSBpbnRlcmZhY2VzCisJLyoKKwkgKiBSZWNlaXZlIGEgcmVxdWVzdCBmb3IgdGhlIGRpc2NvdmVyeSBsYXllci4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KLQogCXZvaWQgKCpkaXNjX3JlY3ZfcmVxKShzdHJ1Y3QgZmNfc2VxICosCiAJCQkgICAgICBzdHJ1Y3QgZmNfZnJhbWUgKiwgc3RydWN0IGZjX2xwb3J0ICopOwogCiAJLyoKIAkgKiBTdGFydCBkaXNjb3ZlcnkgZm9yIGEgbG9jYWwgcG9ydC4KKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAl2b2lkICgqZGlzY19zdGFydCkodm9pZCAoKmRpc2NfY2FsbGJhY2spKHN0cnVjdCBmY19scG9ydCAqLAogCQkJCQkJIGVudW0gZmNfZGlzY19ldmVudCksCkBAIC01NTksNiArNjA3LDggQEAKIAkvKgogCSAqIFN0b3AgZGlzY292ZXJ5IGZvciBhIGdpdmVuIGxwb3J0LiBUaGlzIHdpbGwgcmVtb3ZlCiAJICogYWxsIGRpc2NvdmVyZWQgcnBvcnRzCisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCiAJdm9pZCAoKmRpc2Nfc3RvcCkgKHN0cnVjdCBmY19scG9ydCAqKTsKIApAQCAtNTY2LDYgKzYxNiw4IEBACiAJICogU3RvcCBkaXNjb3ZlcnkgZm9yIGEgZ2l2ZW4gbHBvcnQuIFRoaXMgd2lsbCBibG9jawogCSAqIHVudGlsIGFsbCBkaXNjb3ZlcmVkIHJwb3J0cyBhcmUgZGVsZXRlZCBmcm9tIHRoZQogCSAqIEZDIHRyYW5zcG9ydCBjbGFzcworCSAqCisJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpkaXNjX3N0b3BfZmluYWwpIChzdHJ1Y3QgZmNfbHBvcnQgKik7CiB9OwpAQCAtNjAzLDcgKzY1NSw4IEBACiAKIAkvKiBPcGVyYXRpb25hbCBJbmZvcm1hdGlvbiAqLwogCXN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSB0dDsKLQl1MTYJCQlsaW5rX3N0YXR1czsKKwl1OAkJCWxpbmtfdXA7CisJdTgJCQlxZnVsbDsKIAllbnVtIGZjX2xwb3J0X3N0YXRlCXN0YXRlOwogCXVuc2lnbmVkIGxvbmcJCWJvb3RfdGltZTsKIApAQCAtNjI2LDYgKzY3OSw3IEBACiAJdTE2CQkJbGlua19zcGVlZDsKIAl1MTYJCQlsaW5rX3N1cHBvcnRlZF9zcGVlZHM7CiAJdTE2CQkJbHJvX3hpZDsJLyogbWF4IHhpZCBmb3IgZmNvZSBscm8gKi8KKwl1bnNpZ25lZCBpbnQJCWxzb19tYXg7CS8qIG1heCBsYXJnZSBzZW5kIHNpemUgKi8KIAlzdHJ1Y3QgZmNfbnNfZnRzCWZjdHM7CSAgICAgICAgLyogRkMtNCB0eXBlIG1hc2tzICovCiAJc3RydWN0IGZjX2Vsc19ybmlkX2dlbglybmlkX2dlbjsJLyogUk5JRCBpbmZvcm1hdGlvbiAqLwogCkBAIC02MzcsNyArNjkxLDcgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWRpc2Nfd29yazsKIH07CiAKLS8qKgorLyoKICAqIEZDX0xQT1JUIEhFTFBFUiBGVU5DVElPTlMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqbHBvcnRfcHJpdihjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKmxwKQpAQCAtNjY5LDcgKzcyMyw3IEBACiB9CiAKIAotLyoqCisvKgogICogTE9DQUwgUE9SVCBMQVlFUgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGZjX2xwb3J0X2luaXQoc3RydWN0IGZjX2xwb3J0ICpscCk7CkBAIC03MDQsMTIgKzc1OCw2IEBACiB2b2lkIGZjX2xpbmtkb3duKHN0cnVjdCBmY19scG9ydCAqKTsKIAogLyoKLSAqIFBhdXNlIGFuZCB1bnBhdXNlIHRyYWZmaWMuCi0gKi8KLXZvaWQgZmNfcGF1c2Uoc3RydWN0IGZjX2xwb3J0ICopOwotdm9pZCBmY191bnBhdXNlKHN0cnVjdCBmY19scG9ydCAqKTsKLQotLyoKICAqIENvbmZpZ3VyZSB0aGUgbG9jYWwgcG9ydC4KICAqLwogaW50IGZjX2xwb3J0X2NvbmZpZyhzdHJ1Y3QgZmNfbHBvcnQgKik7CkBAIC03MjUsMTkgKzc3MywxOSBAQAogaW50IGZjX3NldF9tZnMoc3RydWN0IGZjX2xwb3J0ICpscCwgdTMyIG1mcyk7CiAKIAotLyoqCisvKgogICogUkVNT1RFIFBPUlQgTEFZRVIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBmY19ycG9ydF9pbml0KHN0cnVjdCBmY19scG9ydCAqbHApOwogdm9pZCBmY19ycG9ydF90ZXJtaW5hdGVfaW8oc3RydWN0IGZjX3Jwb3J0ICpycCk7CiAKLS8qKgorLyoKICAqIERJU0NPVkVSWSBMQVlFUgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGZjX2Rpc2NfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAogCi0vKioKKy8qCiAgKiBTQ1NJIExBWUVSCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpAQCAtNzk4LDcgKzg0NiwxMiBAQAogICovCiB2b2lkIGZjX2ZjcF9kZXN0cm95KHN0cnVjdCBmY19scG9ydCAqKTsKIAotLyoqCisvKgorICogU2V0IHVwIGRpcmVjdC1kYXRhIHBsYWNlbWVudCBmb3IgdGhpcyBJL08gcmVxdWVzdAorICovCit2b2lkIGZjX2ZjcF9kZHBfc2V0dXAoc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCwgdTE2IHhpZCk7CisKKy8qCiAgKiBFTFMvQ1QgaW50ZXJmYWNlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpAQCAtODA3LDcgKzg2MCw3IEBACiBpbnQgZmNfZWxzY3RfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAogCi0vKioKKy8qCiAgKiBFWENIQU5HRSBNQU5BR0VSIExBWUVSCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpAQCAtOTE2LDcgKzk2OSw3IEBACiAgKiBJZiBzX2lkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5IGV4Y2hhbmdlcyBvcmlnaW5hdGluZyBmcm9tIHRoYXQgRklELgogICogSWYgZF9pZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgc2VuZGluZyB0byB0aGF0IEZJRC4KICAqLwotdm9pZCBmY19leGNoX21ncl9yZXNldChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKiwgdTMyIHNfaWQsIHUzMiBkX2lkKTsKK3ZvaWQgZmNfZXhjaF9tZ3JfcmVzZXQoc3RydWN0IGZjX2xwb3J0ICosIHUzMiBzX2lkLCB1MzIgZF9pZCk7CiAKIC8qCiAgKiBGdW5jdGlvbnMgZm9yIGZjX2Z1bmN0aW9uc190ZW1wbGF0ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaCBiL2luY2x1ZGUvc2NzaS9saWJmY29lLmgKaW5kZXggODlmZGJiOS4uYzQxZjdkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmNvZS5oCkBAIC00Niw2ICs0Niw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNfZGV2OwkJLyogZGV2aWNlIHdpdGggZXRodG9vbF9vcHMgKi8KIAlzdHJ1Y3QgcGFja2V0X3R5cGUgIGZjb2VfcGFja2V0X3R5cGU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBmY29lX3BlbmRpbmdfcXVldWU7CisJdTgJZmNvZV9wZW5kaW5nX3F1ZXVlX2FjdGl2ZTsKIAogCXU4IGRlc3RfYWRkcltFVEhfQUxFTl07CiAJdTggY3RsX3NyY19hZGRyW0VUSF9BTEVOXTsKQEAgLTU4LDE2ICs1OSwxMCBAQAogCXU4IGFkZHJlc3NfbW9kZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZjb2Vfc29mdGMgKmZjb2Vfc29mdGMoCi0JY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscCkKLXsKLQlyZXR1cm4gKHN0cnVjdCBmY29lX3NvZnRjICopbHBvcnRfcHJpdihscCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmZjb2VfbmV0ZGV2KAogCWNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHApCiB7Ci0JcmV0dXJuIGZjb2Vfc29mdGMobHApLT5yZWFsX2RldjsKKwlyZXR1cm4gKChzdHJ1Y3QgZmNvZV9zb2Z0YyAqKWxwb3J0X3ByaXYobHApKS0+cmVhbF9kZXY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZjb2VfaGRyICpza2JfZmNvZV9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTEyOSwyNCArMTI0LDYgQEAKIAlyZXR1cm4gYmUxNl90b19jcHUoc2tiX2ZjX2hlYWRlcihza2IpLT5maF9yeF9pZCk7CiB9CiAKLS8qIEZJWE1FIC0gRE1BX0JJRElSRUNUSU9OQUwgPyAqLwotI2RlZmluZSBza2JfY2Ioc2tiKQkoKHN0cnVjdCBmY29lX3Jjdl9pbmZvICopJigoc2tiKS0+Y2JbMF0pKQotI2RlZmluZSBza2JfY21kKHNrYikJKHNrYl9jYihza2IpLT5mcl9jbWQpCi0jZGVmaW5lIHNrYl9kaXIoc2tiKQkoc2tiX2NtZChza2IpLT5zY19kYXRhX2RpcmVjdGlvbikKLXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZmNfaXNfcmVhZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWlmIChza2JfZmNfaXNfY21kKHNrYikgJiYgc2tiX2NtZChza2IpKQotCQlyZXR1cm4gc2tiX2Rpcihza2IpID09IERNQV9GUk9NX0RFVklDRTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZmNfaXNfd3JpdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpZiAoc2tiX2ZjX2lzX2NtZChza2IpICYmIHNrYl9jbWQoc2tiKSkKLQkJcmV0dXJuIHNrYl9kaXIoc2tiKSA9PSBETUFfVE9fREVWSUNFOwotCXJldHVybiBmYWxzZTsKLX0KLQogLyogbGliZmNvZSBmdW5jcyAqLwogaW50IGZjb2VfcmVzZXQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogdTY0IGZjb2Vfd3duX2Zyb21fbWFjKHVuc2lnbmVkIGNoYXIgbWFjW01BWF9BRERSX0xFTl0sCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDczNjBlMTkuLjdmZmFlZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC00NSwxOCArNDUsMTAgQEAKIHN0cnVjdCBpc2NzaV9ub3BpbjsKIHN0cnVjdCBkZXZpY2U7CiAKLS8qICNkZWZpbmUgREVCVUdfU0NTSSAqLwotI2lmZGVmIERFQlVHX1NDU0kKLSNkZWZpbmUgZGVidWdfc2NzaShmbXQuLi4pIHByaW50ayhLRVJOX0lORk8gImlzY3NpOiAiIGZtdCkKLSNlbHNlCi0jZGVmaW5lIGRlYnVnX3Njc2koZm10Li4uKQotI2VuZGlmCi0KICNkZWZpbmUgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgJMTI4CS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwogI2RlZmluZSBJU0NTSV9NR01UX0NNRFNfTUFYCTE1CiAKLSNkZWZpbmUgSVNDU0lfREVGX0NNRF9QRVJfTFVOCQkzMgotI2RlZmluZSBJU0NTSV9NQVhfQ01EX1BFUl9MVU4JCTEyOAorI2RlZmluZSBJU0NTSV9ERUZfQ01EX1BFUl9MVU4JMzIKIAogLyogVGFzayBNZ210IHN0YXRlcyAqLwogZW51bSB7CkBAIC0zMjYsNiArMzE4LDkgQEAKIAlzcGlubG9ja190CQlsb2NrOwogCWludAkJCW51bV9zZXNzaW9uczsKIAlpbnQJCQlzdGF0ZTsKKworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcTsKKwljaGFyCQkJd29ya3FfbmFtZVsyMF07CiB9OwogCiAvKgpAQCAtMzUxLDcgKzM0Niw4IEBACiAJCQkJZW51bSBpc2NzaV9ob3N0X3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOwogZXh0ZXJuIGludCBpc2NzaV9ob3N0X2FkZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IGRldmljZSAqcGRldik7CiBleHRlcm4gc3RydWN0IFNjc2lfSG9zdCAqaXNjc2lfaG9zdF9hbGxvYyhzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQsCi0JCQkJCSAgaW50IGRkX2RhdGFfc2l6ZSwgdWludDE2X3QgcWRlcHRoKTsKKwkJCQkJICBpbnQgZGRfZGF0YV9zaXplLAorCQkJCQkgIGJvb2wgeG1pdF9jYW5fc2xlZXApOwogZXh0ZXJuIHZvaWQgaXNjc2lfaG9zdF9yZW1vdmUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogZXh0ZXJuIHZvaWQgaXNjc2lfaG9zdF9mcmVlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKIApAQCAtMzgyLDExICszNzgsMTIgQEAKIGV4dGVybiBpbnQgaXNjc2lfY29ubl9iaW5kKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqLCBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKiwKIAkJCSAgIGludCk7CiBleHRlcm4gdm9pZCBpc2NzaV9jb25uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycik7Ci1leHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKK2V4dGVybiB2b2lkIGlzY3NpX3Nlc3Npb25fZmFpbHVyZShzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkgIGVudW0gaXNjc2lfZXJyIGVycik7CiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCiAJCQkJZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIGV4dGVybiB2b2lkIGlzY3NpX3N1c3BlbmRfdHgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pOworZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9xdWV1ZV93b3JrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKIAogI2RlZmluZSBpc2NzaV9jb25uX3ByaW50ayhwcmVmaXgsIF9jLCBmbXQsIGEuLi4pIFwKIAlpc2NzaV9jbHNfY29ubl9wcmludGsocHJlZml4LCAoKHN0cnVjdCBpc2NzaV9jb25uICopX2MpLT5jbHNfY29ubiwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL29zZF9hdHRyaWJ1dGVzLmggYi9pbmNsdWRlL3Njc2kvb3NkX2F0dHJpYnV0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg4YTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL29zZF9hdHRyaWJ1dGVzLmgKQEAgLTAsMCArMSwzMjcgQEAKKyNpZm5kZWYgX19PU0RfQVRUUklCVVRFU19IX18KKyNkZWZpbmUgX19PU0RfQVRUUklCVVRFU19IX18KKworI2luY2x1ZGUgIm9zZF9wcm90b2NvbC5oIgorCisvKgorICogQ29udGFpbnMgdHlwZXMgYW5kIGNvbnN0YW50cyB0aGF0IGRlZmluZSBhdHRyaWJ1dGUgcGFnZXMgYW5kIGF0dHJpYnV0ZQorICogbnVtYmVycyBhbmQgdGhlaXIgZGF0YSB0eXBlcy4KKyAqLworCisjZGVmaW5lIEFUVFJfU0VUKHBnLCBpZCwgbCwgcHRyKSBcCisJeyAuYXR0cl9wYWdlID0gcGcsIC5hdHRyX2lkID0gaWQsIC5sZW4gPSBsLCAudmFsX3B0ciA9IHB0ciB9CisKKyNkZWZpbmUgQVRUUl9ERUYocGcsIGlkLCBsKSBBVFRSX1NFVChwZywgaWQsIGwsIE5VTEwpCisKKy8qIG9zZC1yMTAgNC43LjMgQXR0cmlidXRlcyBwYWdlcyAqLworZW51bSB7CisJT1NEX0FQQUdFX09CSkVDVF9GSVJTVAkJPSAweDAsCisJT1NEX0FQQUdFX09CSkVDVF9ESVJFQ1RPUlkJPSAwLAorCU9TRF9BUEFHRV9PQkpFQ1RfSU5GT1JNQVRJT04JPSAxLAorCU9TRF9BUEFHRV9PQkpFQ1RfUVVPVEFTCQk9IDIsCisJT1NEX0FQQUdFX09CSkVDVF9USU1FU1RBTVAJPSAzLAorCU9TRF9BUEFHRV9PQkpFQ1RfQ09MTEVDVElPTlMJPSA0LAorCU9TRF9BUEFHRV9PQkpFQ1RfU0VDVVJJVFkJPSA1LAorCU9TRF9BUEFHRV9PQkpFQ1RfTEFTVAkJPSAweDJmZmZmZmZmLAorCisJT1NEX0FQQUdFX1BBUlRJVElPTl9GSVJTVAk9IDB4MzAwMDAwMDAsCisJT1NEX0FQQUdFX1BBUlRJVElPTl9ESVJFQ1RPUlkJPSBPU0RfQVBBR0VfUEFSVElUSU9OX0ZJUlNUICsgMCwKKwlPU0RfQVBBR0VfUEFSVElUSU9OX0lORk9STUFUSU9OID0gT1NEX0FQQUdFX1BBUlRJVElPTl9GSVJTVCArIDEsCisJT1NEX0FQQUdFX1BBUlRJVElPTl9RVU9UQVMJPSBPU0RfQVBBR0VfUEFSVElUSU9OX0ZJUlNUICsgMiwKKwlPU0RfQVBBR0VfUEFSVElUSU9OX1RJTUVTVEFNUAk9IE9TRF9BUEFHRV9QQVJUSVRJT05fRklSU1QgKyAzLAorCU9TRF9BUEFHRV9QQVJUSVRJT05fU0VDVVJJVFkJPSBPU0RfQVBBR0VfUEFSVElUSU9OX0ZJUlNUICsgNSwKKwlPU0RfQVBBR0VfUEFSVElUSU9OX0xBU1QJPSAweDVGRkZGRkZGLAorCisJT1NEX0FQQUdFX0NPTExFQ1RJT05fRklSU1QJPSAweDYwMDAwMDAwLAorCU9TRF9BUEFHRV9DT0xMRUNUSU9OX0RJUkVDVE9SWQk9IE9TRF9BUEFHRV9DT0xMRUNUSU9OX0ZJUlNUICsgMCwKKwlPU0RfQVBBR0VfQ09MTEVDVElPTl9JTkZPUk1BVElPTiA9IE9TRF9BUEFHRV9DT0xMRUNUSU9OX0ZJUlNUICsgMSwKKwlPU0RfQVBBR0VfQ09MTEVDVElPTl9USU1FU1RBTVAJPSBPU0RfQVBBR0VfQ09MTEVDVElPTl9GSVJTVCArIDMsCisJT1NEX0FQQUdFX0NPTExFQ1RJT05fU0VDVVJJVFkJPSBPU0RfQVBBR0VfQ09MTEVDVElPTl9GSVJTVCArIDUsCisJT1NEX0FQQUdFX0NPTExFQ1RJT05fTEFTVAk9IDB4OEZGRkZGRkYsCisKKwlPU0RfQVBBR0VfUk9PVF9GSVJTVAkJPSAweDkwMDAwMDAwLAorCU9TRF9BUEFHRV9ST09UX0RJUkVDVE9SWQk9IE9TRF9BUEFHRV9ST09UX0ZJUlNUICsgMCwKKwlPU0RfQVBBR0VfUk9PVF9JTkZPUk1BVElPTgk9IE9TRF9BUEFHRV9ST09UX0ZJUlNUICsgMSwKKwlPU0RfQVBBR0VfUk9PVF9RVU9UQVMJCT0gT1NEX0FQQUdFX1JPT1RfRklSU1QgKyAyLAorCU9TRF9BUEFHRV9ST09UX1RJTUVTVEFNUAk9IE9TRF9BUEFHRV9ST09UX0ZJUlNUICsgMywKKwlPU0RfQVBBR0VfUk9PVF9TRUNVUklUWQkJPSBPU0RfQVBBR0VfUk9PVF9GSVJTVCArIDUsCisJT1NEX0FQQUdFX1JPT1RfTEFTVAkJPSAweEJGRkZGRkZGLAorCisJT1NEX0FQQUdFX1JFU0VSVkVEX1RZUEVfRklSU1QJPSAweEMwMDAwMDAwLAorCU9TRF9BUEFHRV9SRVNFUlZFRF9UWVBFX0xBU1QJPSAweEVGRkZGRkZGLAorCisJT1NEX0FQQUdFX0NPTU1PTl9GSVJTVAkJPSAweEYwMDAwMDAwLAorCU9TRF9BUEFHRV9DT01NT05fTEFTVAkJPSAweEZGRkZGRkZFLAorCisJT1NEX0FQQUdFX1JFUVVFU1RfQUxMCQk9IDB4RkZGRkZGRkYsCit9OworCisvKiBzdWJjYXRlZ29yaWVzIG9mIGF0dHIgcGFnZXMgd2l0aGluIGVhY2ggcmFuZ2UgYWJvdmUgKi8KK2VudW0geworCU9TRF9BUEFHRV9TVERfRklSU1QJCT0gMHgwLAorCU9TRF9BUEFHRV9TVERfRElSRUNUT1JZCQk9IDAsCisJT1NEX0FQQUdFX1NURF9JTkZPUk1BVElPTgk9IDEsCisJT1NEX0FQQUdFX1NURF9RVU9UQVMJCT0gMiwKKwlPU0RfQVBBR0VfU1REX1RJTUVTVEFNUAkJPSAzLAorCU9TRF9BUEFHRV9TVERfQ09MTEVDVElPTlMJPSA0LAorCU9TRF9BUEFHRV9TVERfUE9MSUNZX1NFQ1VSSVRZCT0gNSwKKwlPU0RfQVBBR0VfU1REX0xBU1QJCT0gMHgwMDAwMDA3RiwKKworCU9TRF9BUEFHRV9SRVNFUlZFRF9GSVJTVAk9IDB4MDAwMDAwODAsCisJT1NEX0FQQUdFX1JFU0VSVkVEX0xBU1QJCT0gMHgwMDAwN0ZGRiwKKworCU9TRF9BUEFHRV9PVEhFUl9TVERfRklSU1QJPSAweDAwMDA4MDAwLAorCU9TRF9BUEFHRV9PVEhFUl9TVERfTEFTVAk9IDB4MDAwMEVGRkYsCisKKwlPU0RfQVBBR0VfUFVCTElDX0ZJUlNUCQk9IDB4MDAwMEYwMDAsCisJT1NEX0FQQUdFX1BVQkxJQ19MQVNUCQk9IDB4MDAwMEZGRkYsCisKKwlPU0RfQVBBR0VfQVBQX0RFRklORURfRklSU1QJPSAweDAwMDEwMDAwLAorCU9TRF9BUEFHRV9BUFBfREVGSU5FRF9MQVNUCT0gMHgxRkZGRkZGRiwKKworCU9TRF9BUEFHRV9WRU5ET1JfU1BFQ0lGSUNfRklSU1QJPSAweDIwMDAwMDAwLAorCU9TRF9BUEFHRV9WRU5ET1JfU1BFQ0lGSUNfTEFTVAk9IDB4MkZGRkZGRkYsCit9OworCitlbnVtIHsKKwlPU0RfQVRUUl9QQUdFX0lERU5USUZJQ0FUSU9OID0gMCwgLyogaW4gYWxsIHBhZ2VzIDQwIGJ5dGVzICovCit9OworCitzdHJ1Y3QgcGFnZV9pZGVudGlmaWNhdGlvbiB7CisJdTggdmVuZG9yX2lkZW50aWZpY2F0aW9uWzhdOworCXU4IHBhZ2VfaWRlbnRpZmljYXRpb25bMzJdOworfSAgX19wYWNrZWQ7CisKK3N0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciB7CisJX19iZTMyIHBhZ2VfbnVtYmVyOworCV9fYmUzMiBwYWdlX2xlbmd0aDsKK30gX19wYWNrZWQ7CisKKy8qIDcuMS4yLjggUm9vdCBJbmZvcm1hdGlvbiBhdHRyaWJ1dGVzIHBhZ2UgKE9TRF9BUEFHRV9ST09UX0lORk9STUFUSU9OKSAqLworZW51bSB7CisJT1NEX0FUVFJfUklfT1NEX1NZU1RFTV9JRCAgICAgICAgICAgID0gMHgzLCAgIC8qIDIwICAgICAgICovCisJT1NEX0FUVFJfUklfVkVORE9SX0lERU5USUZJQ0FUSU9OICAgID0gMHg0LCAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfUklfUFJPRFVDVF9JREVOVElGSUNBVElPTiAgID0gMHg1LCAgIC8qIDE2ICAgICAgICovCisJT1NEX0FUVFJfUklfUFJPRFVDVF9NT0RFTCAgICAgICAgICAgID0gMHg2LCAgIC8qIDMyICAgICAgICovCisJT1NEX0FUVFJfUklfUFJPRFVDVF9SRVZJU0lPTl9MRVZFTCAgID0gMHg3LCAgIC8qIDQgICAgICAgICovCisJT1NEX0FUVFJfUklfUFJPRFVDVF9TRVJJQUxfTlVNQkVSICAgID0gMHg4LCAgIC8qIHZhcmlhYmxlICovCisJT1NEX0FUVFJfUklfT1NEX05BTUUgICAgICAgICAgICAgICAgID0gMHg5LCAgIC8qIHZhcmlhYmxlICovCisJT1NEX0FUVFJfUklfVE9UQUxfQ0FQQUNJVFkgICAgICAgICAgID0gMHg4MCwgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfUklfVVNFRF9DQVBBQ0lUWSAgICAgICAgICAgID0gMHg4MSwgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfUklfTlVNQkVSX09GX1BBUlRJVElPTlMgICAgID0gMHhDMCwgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfUklfQ0xPQ0sgICAgICAgICAgICAgICAgICAgID0gMHgxMDAsIC8qIDYgICAgICAgICovCit9OworLyogUm9vdF9JbmZvcm1hdGlvbl9hdHRyaWJ1dGVzX3BhZ2UgZG9lcyBub3QgaGF2ZSBhIGdldF9wYWdlIHN0cnVjdHVyZSAqLworCisvKiA3LjEuMi45IFBhcnRpdGlvbiBJbmZvcm1hdGlvbiBhdHRyaWJ1dGVzIHBhZ2UKKyAqIChPU0RfQVBBR0VfUEFSVElUSU9OX0lORk9STUFUSU9OKQorICovCitlbnVtIHsKKwlPU0RfQVRUUl9QSV9QQVJUSVRJT05fSUQgICAgICAgICAgICA9IDB4MSwgICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfUElfVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAweDksICAgICAvKiB2YXJpYWJsZSAqLworCU9TRF9BVFRSX1BJX1VTRURfQ0FQQUNJVFkgICAgICAgICAgID0gMHg4MSwgICAgLyogOCAgICAgICAgKi8KKwlPU0RfQVRUUl9QSV9OVU1CRVJfT0ZfT0JKRUNUUyAgICAgICA9IDB4QzEsICAgIC8qIDggICAgICAgICovCit9OworLyogUGFydGl0aW9uIEluZm9ybWF0aW9uIGF0dHJpYnV0ZXMgcGFnZSBkb2VzIG5vdCBoYXZlIGEgZ2V0X3BhZ2Ugc3RydWN0dXJlICovCisKKy8qIDcuMS4yLjEwIENvbGxlY3Rpb24gSW5mb3JtYXRpb24gYXR0cmlidXRlcyBwYWdlCisgKiAoT1NEX0FQQUdFX0NPTExFQ1RJT05fSU5GT1JNQVRJT04pCisgKi8KK2VudW0geworCU9TRF9BVFRSX0NJX1BBUlRJVElPTl9JRCAgICAgICAgICAgPSAweDEsICAgICAgIC8qIDggICAgICAgICovCisJT1NEX0FUVFJfQ0lfQ09MTEVDVElPTl9PQkpFQ1RfSUQgICA9IDB4MiwgICAgICAgLyogOCAgICAgICAgKi8KKwlPU0RfQVRUUl9DSV9VU0VSTkFNRSAgICAgICAgICAgICAgID0gMHg5LCAgICAgICAvKiB2YXJpYWJsZSAqLworCU9TRF9BVFRSX0NJX1VTRURfQ0FQQUNJVFkgICAgICAgICAgPSAweDgxLCAgICAgIC8qIDggICAgICAgICovCit9OworLyogQ29sbGVjdGlvbiBJbmZvcm1hdGlvbiBhdHRyaWJ1dGVzIHBhZ2UgZG9lcyBub3QgaGF2ZSBhIGdldF9wYWdlIHN0cnVjdHVyZSAqLworCisvKiA3LjEuMi4xMSBVc2VyIE9iamVjdCBJbmZvcm1hdGlvbiBhdHRyaWJ1dGVzIHBhZ2UKKyAqIChPU0RfQVBBR0VfT0JKRUNUX0lORk9STUFUSU9OKQorICovCitlbnVtIHsKKwlPU0RfQVRUUl9PSV9QQVJUSVRJT05fSUQgICAgICAgICA9IDB4MSwgICAgICAgLyogOCAgICAgICAgKi8KKwlPU0RfQVRUUl9PSV9PQkpFQ1RfSUQgICAgICAgICAgICA9IDB4MiwgICAgICAgLyogOCAgICAgICAgKi8KKwlPU0RfQVRUUl9PSV9VU0VSTkFNRSAgICAgICAgICAgICA9IDB4OSwgICAgICAgLyogdmFyaWFibGUgKi8KKwlPU0RfQVRUUl9PSV9VU0VEX0NBUEFDSVRZICAgICAgICA9IDB4ODEsICAgICAgLyogOCAgICAgICAgKi8KKwlPU0RfQVRUUl9PSV9MT0dJQ0FMX0xFTkdUSCAgICAgICA9IDB4ODIsICAgICAgLyogOCAgICAgICAgKi8KK307CisvKiBPYmplY3QgSW5mb3JtYXRpb24gYXR0cmlidXRlcyBwYWdlIGRvZXMgbm90IGhhdmUgYSBnZXRfcGFnZSBzdHJ1Y3R1cmUgKi8KKworLyogNy4xLjIuMTIgUm9vdCBRdW90YXMgYXR0cmlidXRlcyBwYWdlIChPU0RfQVBBR0VfUk9PVF9RVU9UQVMpICovCitlbnVtIHsKKwlPU0RfQVRUUl9SUV9ERUZBVUxUX01BWElNVU1fVVNFUl9PQkpFQ1RfTEVOR1RIICAgICA9IDB4MSwgICAgICAvKiA4ICAqLworCU9TRF9BVFRSX1JRX1BBUlRJVElPTl9DQVBBQ0lUWV9RVU9UQSAgICAgICAgICAgICAgID0gMHgxMDAwMSwgIC8qIDggICovCisJT1NEX0FUVFJfUlFfUEFSVElUSU9OX09CSkVDVF9DT1VOVCAgICAgICAgICAgICAgICAgPSAweDEwMDAyLCAgLyogOCAgKi8KKwlPU0RfQVRUUl9SUV9QQVJUSVRJT05fQ09MTEVDVElPTlNfUEVSX1VTRVJfT0JKRUNUICA9IDB4MTAwODEsICAvKiA0ICAqLworCU9TRF9BVFRSX1JRX1BBUlRJVElPTl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMDAwMiwgIC8qIDggICovCit9OworCitzdHJ1Y3QgUm9vdF9RdW90YXNfYXR0cmlidXRlc19wYWdlIHsKKwlzdHJ1Y3Qgb3NkX2F0dHJfcGFnZV9oZWFkZXIgaGRyOyAvKiBpZD1SKzIsIHNpemU9MHgyNCAqLworCV9fYmU2NCBkZWZhdWx0X21heGltdW1fdXNlcl9vYmplY3RfbGVuZ3RoOworCV9fYmU2NCBwYXJ0aXRpb25fY2FwYWNpdHlfcXVvdGE7CisJX19iZTY0IHBhcnRpdGlvbl9vYmplY3RfY291bnQ7CisJX19iZTY0IHBhcnRpdGlvbl9jb2xsZWN0aW9uc19wZXJfdXNlcl9vYmplY3Q7CisJX19iZTY0IHBhcnRpdGlvbl9jb3VudDsKK30gIF9fcGFja2VkOworCisvKiA3LjEuMi4xMyBQYXJ0aXRpb24gUXVvdGFzIGF0dHJpYnV0ZXMgcGFnZSAoT1NEX0FQQUdFX1BBUlRJVElPTl9RVU9UQVMpKi8KK2VudW0geworCU9TRF9BVFRSX1BRX0RFRkFVTFRfTUFYSU1VTV9VU0VSX09CSkVDVF9MRU5HVEggID0gMHgxLCAgICAgICAgLyogOCAqLworCU9TRF9BVFRSX1BRX0NBUEFDSVRZX1FVT1RBICAgICAgICAgICAgICAgICAgICAgID0gMHgxMDAwMSwgICAgLyogOCAqLworCU9TRF9BVFRSX1BRX09CSkVDVF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMDAwMiwgICAgLyogOCAqLworCU9TRF9BVFRSX1BRX0NPTExFQ1RJT05TX1BFUl9VU0VSX09CSkVDVCAgICAgICAgID0gMHgxMDA4MSwgICAgLyogNCAqLworfTsKKworc3RydWN0IFBhcnRpdGlvbl9RdW90YXNfYXR0cmlidXRlc19wYWdlIHsKKwlzdHJ1Y3Qgb3NkX2F0dHJfcGFnZV9oZWFkZXIgaGRyOyAvKiBpZD1QKzIsIHNpemU9MHgxQyAqLworCV9fYmU2NCBkZWZhdWx0X21heGltdW1fdXNlcl9vYmplY3RfbGVuZ3RoOworCV9fYmU2NCBjYXBhY2l0eV9xdW90YTsKKwlfX2JlNjQgb2JqZWN0X2NvdW50OworCV9fYmU2NCBjb2xsZWN0aW9uc19wZXJfdXNlcl9vYmplY3Q7Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMTQgVXNlciBPYmplY3QgUXVvdGFzIGF0dHJpYnV0ZXMgcGFnZSAoT1NEX0FQQUdFX09CSkVDVF9RVU9UQVMpICovCitlbnVtIHsKKwlPU0RfQVRUUl9PUV9NQVhJTVVNX0xFTkdUSCAgPSAweDEsICAgICAgICAvKiA4ICovCit9OworCitzdHJ1Y3QgT2JqZWN0X1F1b3Rhc19hdHRyaWJ1dGVzX3BhZ2UgeworCXN0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciBoZHI7IC8qIGlkPVUrMiwgc2l6ZT0weDggKi8KKwlfX2JlNjQgbWF4aW11bV9sZW5ndGg7Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMTUgUm9vdCBUaW1lc3RhbXBzIGF0dHJpYnV0ZXMgcGFnZSAoT1NEX0FQQUdFX1JPT1RfVElNRVNUQU1QKSAqLworZW51bSB7CisJT1NEX0FUVFJfUlRfQVRUUklCVVRFU19BQ0NFU1NFRF9USU1FICA9IDB4MiwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9SVF9BVFRSSUJVVEVTX01PRElGSUVEX1RJTUUgID0gMHgzLCAgICAgICAgLyogNiAqLworCU9TRF9BVFRSX1JUX1RJTUVTVEFNUF9CWVBBU1MgICAgICAgICAgPSAweEZGRkZGRkZFLCAvKiAxICovCit9OworCitzdHJ1Y3Qgcm9vdF90aW1lc3RhbXBzX2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9UiszLCBzaXplPTB4RCAqLworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGF0dHJpYnV0ZXNfYWNjZXNzZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBhdHRyaWJ1dGVzX21vZGlmaWVkX3RpbWU7CisJdTggdGltZXN0YW1wX2J5cGFzczsKK30gIF9fcGFja2VkOworCisvKiA3LjEuMi4xNiBQYXJ0aXRpb24gVGltZXN0YW1wcyBhdHRyaWJ1dGVzIHBhZ2UKKyAqIChPU0RfQVBBR0VfUEFSVElUSU9OX1RJTUVTVEFNUCkKKyAqLworZW51bSB7CisJT1NEX0FUVFJfUFRfQ1JFQVRFRF9USU1FICAgICAgICAgICAgICA9IDB4MSwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9QVF9BVFRSSUJVVEVTX0FDQ0VTU0VEX1RJTUUgID0gMHgyLCAgICAgICAgLyogNiAqLworCU9TRF9BVFRSX1BUX0FUVFJJQlVURVNfTU9ESUZJRURfVElNRSAgPSAweDMsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfUFRfREFUQV9BQ0NFU1NFRF9USU1FICAgICAgICA9IDB4NCwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9QVF9EQVRBX01PRElGSUVEX1RJTUUgICAgICAgID0gMHg1LCAgICAgICAgLyogNiAqLworCU9TRF9BVFRSX1BUX1RJTUVTVEFNUF9CWVBBU1MgICAgICAgICAgPSAweEZGRkZGRkZFLCAvKiAxICovCit9OworCitzdHJ1Y3QgcGFydGl0aW9uX3RpbWVzdGFtcHNfYXR0cmlidXRlc19wYWdlIHsKKwlzdHJ1Y3Qgb3NkX2F0dHJfcGFnZV9oZWFkZXIgaGRyOyAvKiBpZD1QKzMsIHNpemU9MHgxRiAqLworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGNyZWF0ZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBhdHRyaWJ1dGVzX2FjY2Vzc2VkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgYXR0cmlidXRlc19tb2RpZmllZF90aW1lOworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGRhdGFfYWNjZXNzZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBkYXRhX21vZGlmaWVkX3RpbWU7CisJdTggdGltZXN0YW1wX2J5cGFzczsKK30gIF9fcGFja2VkOworCisvKiA3LjEuMi4xNy8xOCBDb2xsZWN0aW9uL09iamVjdCBUaW1lc3RhbXBzIGF0dHJpYnV0ZXMgcGFnZQorICogKE9TRF9BUEFHRV9DT0xMRUNUSU9OX1RJTUVTVEFNUC9PU0RfQVBBR0VfT0JKRUNUX1RJTUVTVEFNUCkKKyAqLworZW51bSB7CisJT1NEX0FUVFJfT1RfQ1JFQVRFRF9USU1FICAgICAgICAgICAgICA9IDB4MSwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9PVF9BVFRSSUJVVEVTX0FDQ0VTU0VEX1RJTUUgID0gMHgyLCAgICAgICAgLyogNiAqLworCU9TRF9BVFRSX09UX0FUVFJJQlVURVNfTU9ESUZJRURfVElNRSAgPSAweDMsICAgICAgICAvKiA2ICovCisJT1NEX0FUVFJfT1RfREFUQV9BQ0NFU1NFRF9USU1FICAgICAgICA9IDB4NCwgICAgICAgIC8qIDYgKi8KKwlPU0RfQVRUUl9PVF9EQVRBX01PRElGSUVEX1RJTUUgICAgICAgID0gMHg1LCAgICAgICAgLyogNiAqLworfTsKKworLyogc2FtZSBmb3IgY29sbGVjdGlvbiAqLworc3RydWN0IG9iamVjdF90aW1lc3RhbXBzX2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9QyszLzMsIHNpemU9MHgxRSAqLworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGNyZWF0ZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBhdHRyaWJ1dGVzX2FjY2Vzc2VkX3RpbWU7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgYXR0cmlidXRlc19tb2RpZmllZF90aW1lOworCXN0cnVjdCBvc2RfdGltZXN0YW1wIGRhdGFfYWNjZXNzZWRfdGltZTsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBkYXRhX21vZGlmaWVkX3RpbWU7Cit9ICBfX3BhY2tlZDsKKworLyogNy4xLjIuMTkgQ29sbGVjdGlvbnMgYXR0cmlidXRlcyBwYWdlICovCisvKiBUQkQgKi8KKworLyogNy4xLjIuMjAgUm9vdCBQb2xpY3kvU2VjdXJpdHkgYXR0cmlidXRlcyBwYWdlIChPU0RfQVBBR0VfUk9PVF9TRUNVUklUWSkgKi8KK2VudW0geworCU9TRF9BVFRSX1JTX0RFRkFVTFRfU0VDVVJJVFlfTUVUSE9EICAgICAgICAgICA9IDB4MSwgICAgICAgLyogMSAgICAgICovCisJT1NEX0FUVFJfUlNfT0xERVNUX1ZBTElEX05PTkNFX0xJTUlUICAgICAgICAgID0gMHgyLCAgICAgICAvKiA2ICAgICAgKi8KKwlPU0RfQVRUUl9SU19ORVdFU1RfVkFMSURfTk9OQ0VfTElNSVQgICAgICAgICAgPSAweDMsICAgICAgIC8qIDYgICAgICAqLworCU9TRF9BVFRSX1JTX1BBUlRJVElPTl9ERUZBVUxUX1NFQ1VSSVRZX01FVEhPRCA9IDB4NiwgICAgICAgLyogMSAgICAgICovCisJT1NEX0FUVFJfUlNfU1VQUE9SVEVEX1NFQ1VSSVRZX01FVEhPRFMgICAgICAgID0gMHg3LCAgICAgICAvKiAyICAgICAgKi8KKwlPU0RfQVRUUl9SU19BREpVU1RBQkxFX0NMT0NLICAgICAgICAgICAgICAgICAgPSAweDksICAgICAgIC8qIDYgICAgICAqLworCU9TRF9BVFRSX1JTX01BU1RFUl9LRVlfSURFTlRJRklFUiAgICAgICAgICAgICA9IDB4N0ZGRCwgICAgLyogMCBvciA3ICovCisJT1NEX0FUVFJfUlNfUk9PVF9LRVlfSURFTlRJRklFUiAgICAgICAgICAgICAgID0gMHg3RkZFLCAgICAvKiAwIG9yIDcgKi8KKwlPU0RfQVRUUl9SU19TVVBQT1JURURfSU5URUdSSVRZX0FMR09SSVRITV8wICAgPSAweDgwMDAwMDAwLC8qIDEsKHgxNikqLworCU9TRF9BVFRSX1JTX1NVUFBPUlRFRF9ESF9HUk9VUF8wICAgICAgICAgICAgICA9IDB4ODAwMDAwMTAsLyogMSwoeDE2KSovCit9OworCitzdHJ1Y3Qgcm9vdF9zZWN1cml0eV9hdHRyaWJ1dGVzX3BhZ2UgeworCXN0cnVjdCBvc2RfYXR0cl9wYWdlX2hlYWRlciBoZHI7IC8qIGlkPVIrNSwgc2l6ZT0weDNGICovCisJdTggZGVmYXVsdF9zZWN1cml0eV9tZXRob2Q7CisJdTggcGFydGl0aW9uX2RlZmF1bHRfc2VjdXJpdHlfbWV0aG9kOworCV9fYmUxNiBzdXBwb3J0ZWRfc2VjdXJpdHlfbWV0aG9kczsKKwl1OCBta2lfdmFsaWRfcmtpX3ZhbGlkOworCXN0cnVjdCBvc2RfdGltZXN0YW1wIG9sZGVzdF92YWxpZF9ub25jZV9saW1pdDsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBuZXdlc3RfdmFsaWRfbm9uY2VfbGltaXQ7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgYWRqdXN0YWJsZV9jbG9jazsKKwl1OCBtYXN0ZXJfa2V5X2lkZW50aWZpZXJbMzItMjVdOworCXU4IHJvb3Rfa2V5X2lkZW50aWZpZXJbMzktMzJdOworCXU4IHN1cHBvcnRlZF9pbnRlZ3JpdHlfYWxnb3JpdGhtWzE2XTsKKwl1OCBzdXBwb3J0ZWRfZGhfZ3JvdXBbMTZdOworfSAgX19wYWNrZWQ7CisKKy8qIDcuMS4yLjIxIFBhcnRpdGlvbiBQb2xpY3kvU2VjdXJpdHkgYXR0cmlidXRlcyBwYWdlCisgKiAoT1NEX0FQQUdFX1BBUlRJVElPTl9TRUNVUklUWSkKKyAqLworZW51bSB7CisJT1NEX0FUVFJfUFNfREVGQVVMVF9TRUNVUklUWV9NRVRIT0QgICAgICAgID0gMHgxLCAgICAgICAgLyogMSAgICAgICovCisJT1NEX0FUVFJfUFNfT0xERVNUX1ZBTElEX05PTkNFICAgICAgICAgICAgID0gMHgyLCAgICAgICAgLyogNiAgICAgICovCisJT1NEX0FUVFJfUFNfTkVXRVNUX1ZBTElEX05PTkNFICAgICAgICAgICAgID0gMHgzLCAgICAgICAgLyogNiAgICAgICovCisJT1NEX0FUVFJfUFNfUkVRVUVTVF9OT05DRV9MSVNUX0RFUFRIICAgICAgID0gMHg0LCAgICAgICAgLyogMiAgICAgICovCisJT1NEX0FUVFJfUFNfRlJPWkVOX1dPUktJTkdfS0VZX0JJVF9NQVNLICAgID0gMHg1LCAgICAgICAgLyogMiAgICAgICovCisJT1NEX0FUVFJfUFNfUEFSVElUSU9OX0tFWV9JREVOVElGSUVSICAgICAgID0gMHg3RkZGLCAgICAgLyogMCBvciA3ICovCisJT1NEX0FUVFJfUFNfV09SS0lOR19LRVlfSURFTlRJRklFUl9GSVJTVCAgID0gMHg4MDAwLCAgICAgLyogMCBvciA3ICovCisJT1NEX0FUVFJfUFNfV09SS0lOR19LRVlfSURFTlRJRklFUl9MQVNUICAgID0gMHg4MDBGLCAgICAgLyogMCBvciA3ICovCisJT1NEX0FUVFJfUFNfUE9MSUNZX0FDQ0VTU19UQUcgICAgICAgICAgICAgID0gMHg0MDAwMDAwMSwgLyogNCAgICAgICovCisJT1NEX0FUVFJfUFNfVVNFUl9PQkpFQ1RfUE9MSUNZX0FDQ0VTU19UQUcgID0gMHg0MDAwMDAwMiwgLyogNCAgICAgICovCit9OworCitzdHJ1Y3QgcGFydGl0aW9uX3NlY3VyaXR5X2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9cCs1LCBzaXplPTB4OGYgKi8KKwl1OCByZXNlcnZlZFszXTsKKwl1OCBkZWZhdWx0X3NlY3VyaXR5X21ldGhvZDsKKwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBvbGRlc3RfdmFsaWRfbm9uY2U7CisJc3RydWN0IG9zZF90aW1lc3RhbXAgbmV3ZXN0X3ZhbGlkX25vbmNlOworCV9fYmUxNiByZXF1ZXN0X25vbmNlX2xpc3RfZGVwdGg7CisJX19iZTE2IGZyb3plbl93b3JraW5nX2tleV9iaXRfbWFzazsKKwlfX2JlMzIgcG9saWN5X2FjY2Vzc190YWc7CisJX19iZTMyIHVzZXJfb2JqZWN0X3BvbGljeV9hY2Nlc3NfdGFnOworCXU4IHBraV92YWxpZDsKKwlfX2JlMTYgd2tpXzAwXzBmX3ZsZDsKKwlzdHJ1Y3Qgb3NkX2tleV9pZGVudGlmaWVyIHBhcnRpdGlvbl9rZXlfaWRlbnRpZmllcjsKKwlzdHJ1Y3Qgb3NkX2tleV9pZGVudGlmaWVyIHdvcmtpbmdfa2V5X2lkZW50aWZpZXJzWzE2XTsKK30gIF9fcGFja2VkOworCisvKiA3LjEuMi4yMi8yMyBDb2xsZWN0aW9uL09iamVjdCBQb2xpY3ktU2VjdXJpdHkgYXR0cmlidXRlcyBwYWdlCisgKiAoT1NEX0FQQUdFX0NPTExFQ1RJT05fU0VDVVJJVFkvT1NEX0FQQUdFX09CSkVDVF9TRUNVUklUWSkKKyAqLworZW51bSB7CisJT1NEX0FUVFJfT1NfUE9MSUNZX0FDQ0VTU19UQUcgICAgICAgICAgICAgID0gMHg0MDAwMDAwMSwgLyogNCAgICAgICovCit9OworCitzdHJ1Y3Qgb2JqZWN0X3NlY3VyaXR5X2F0dHJpYnV0ZXNfcGFnZSB7CisJc3RydWN0IG9zZF9hdHRyX3BhZ2VfaGVhZGVyIGhkcjsgLyogaWQ9Qys1LzUsIHNpemU9NCAqLworCV9fYmUzMiBwb2xpY3lfYWNjZXNzX3RhZzsKK30gIF9fcGFja2VkOworCisjZW5kaWYgLypuZGVmIF9fT1NEX0FUVFJJQlVURVNfSF9fKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2RfaW5pdGlhdG9yLmggYi9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNGQ5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oCkBAIC0wLDAgKzEsNDMzIEBACisvKgorICogb3NkX2luaXRpYXRvci5oIC0gT1NEIGluaXRpYXRvciBBUEkgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICoKKyAqLworI2lmbmRlZiBfX09TRF9JTklUSUFUT1JfSF9fCisjZGVmaW5lIF9fT1NEX0lOSVRJQVRPUl9IX18KKworI2luY2x1ZGUgIm9zZF9wcm90b2NvbC5oIgorI2luY2x1ZGUgIm9zZF90eXBlcy5oIgorCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisKKy8qIE5vdGU6ICJOSSIgaW4gY29tbWVudHMgYmVsb3cgbWVhbnMgIk5vdCBJbXBsZW1lbnRlZCB5ZXQiICovCisKKy8qIENvbmZpZ3VyZSBvZiBjb2RlOgorICogI3VuZGVmIGlmIHlvdSAqZG9uJ3QqIHdhbnQgT1NEIHYxIHN1cHBvcnQgaW4gcnVudGltZS4KKyAqIElmICNkZWZpbmVkIHRoZSBpbml0aWF0b3Igd2lsbCBkeW5hbWljYWxseSBjb25maWd1cmUgdG8gZW5jb2RlIE9TRCB2MQorICogQ0RCJ3MgaWYgdGhlIHRhcmdldCBpcyBkZXRlY3RlZCB0byBiZSBPU0QgdjEgb25seS4KKyAqIE9TRCB2MiBvbmx5IGNvbW1hbmRzLCBvcHRpb25zLCBhbmQgYXR0cmlidXRlcyB3aWxsIGJlIGlnbm9yZWQgaWYgdGFyZ2V0CisgKiBpcyB2MSBvbmx5LgorICogSWYgI2RlZmluZWQgd2lsbCByZXN1bHQgaW4gYmlnZ2VyL3Nsb3dlciBjb2RlIChPSyBTbG93ZXIgbWF5YmUgbm90KQorICogUTogU2hvdWxkIHRoaXMgYmUgQ09ORklHX1NDU0lfT1NEX1ZFUjFfU1VQUE9SVCBhbmQgc2V0IGZyb20gS2NvbmZpZz8KKyAqLworI2RlZmluZSBPU0RfVkVSMV9TVVBQT1JUIHkKKworZW51bSBvc2Rfc3RkX3ZlcnNpb24geworCU9TRF9WRVJfTk9ORSA9IDAsCisJT1NEX1ZFUjEgPSAxLAorCU9TRF9WRVIyID0gMiwKK307CisKKy8qCisgKiBPYmplY3QtYmFzZWQgU3RvcmFnZSBEZXZpY2UuCisgKiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIE9TRCBkZXZpY2UuCisgKiBJdCBpcyBub3QgYSBmdWxsIGxpbnV4IGRldmljZSBpbiBhbnkgd2F5LiBJdCBpcyBvbmx5CisgKiBhIHBsYWNlIHRvIGhhbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIExpbnV4CisgKiByZXF1ZXN0IFEgYW5kIHNvbWUgZGVmYXVsdCBwcm9wZXJ0aWVzLgorICovCitzdHJ1Y3Qgb3NkX2RldiB7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZTsKKwl1bnNpZ25lZCBkZWZfdGltZW91dDsKKworI2lmZGVmIE9TRF9WRVIxX1NVUFBPUlQKKwllbnVtIG9zZF9zdGRfdmVyc2lvbiB2ZXJzaW9uOworI2VuZGlmCit9OworCisvKiBSZXRyaWV2ZS9yZXR1cm4gb3NkX2RldihzKSBmb3IgdXNlIGJ5IEtlcm5lbCBjbGllbnRzICovCitzdHJ1Y3Qgb3NkX2RldiAqb3NkdWxkX3BhdGhfbG9va3VwKGNvbnN0IGNoYXIgKmRldl9uYW1lKTsgLypVc2UgSVNfRVJSL0VSUl9QVFIqLwordm9pZCBvc2R1bGRfcHV0X2RldmljZShzdHJ1Y3Qgb3NkX2RldiAqb2QpOworCisvKiBBZGQvcmVtb3ZlIHRlc3QgaW9jdGxzIGZyb20gZXh0ZXJuYWwgbW9kdWxlcyAqLwordHlwZWRlZiBpbnQgKGRvX3Rlc3RfZm4pKHN0cnVjdCBvc2RfZGV2ICpvZCwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitpbnQgb3NkdWxkX3JlZ2lzdGVyX3Rlc3QodW5zaWduZWQgaW9jdGwsIGRvX3Rlc3RfZm4gKmRvX3Rlc3QpOwordm9pZCBvc2R1bGRfdW5yZWdpc3Rlcl90ZXN0KHVuc2lnbmVkIGlvY3RsKTsKKworLyogVGhlc2UgYXJlIGNhbGxlZCBieSB1bGQgYXQgcHJvYmUgdGltZSAqLwordm9pZCBvc2RfZGV2X2luaXQoc3RydWN0IG9zZF9kZXYgKm9kLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2aWNlKTsKK3ZvaWQgb3NkX2Rldl9maW5pKHN0cnVjdCBvc2RfZGV2ICpvZCk7CisKKy8qIHNvbWUgaGkgbGV2ZWwgZGV2aWNlIG9wZXJhdGlvbnMgKi8KK2ludCBvc2RfYXV0b19kZXRlY3RfdmVyKHN0cnVjdCBvc2RfZGV2ICpvZCwgdm9pZCAqY2Fwcyk7ICAgIC8qIEdGUF9LRVJORUwgKi8KKworLyogd2UgbWlnaHQgd2FudCB0byB1c2UgZnVuY3Rpb24gdmVjdG9yIGluIHRoZSBmdXR1cmUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvc2RfZGV2X3NldF92ZXIoc3RydWN0IG9zZF9kZXYgKm9kLCBlbnVtIG9zZF9zdGRfdmVyc2lvbiB2KQoreworI2lmZGVmIE9TRF9WRVIxX1NVUFBPUlQKKwlvZC0+dmVyc2lvbiA9IHY7CisjZW5kaWYKK30KKworc3RydWN0IG9zZF9yZXF1ZXN0OwordHlwZWRlZiB2b2lkIChvc2RfcmVxX2RvbmVfZm4pKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHZvaWQgKnByaXZhdGUpOworCitzdHJ1Y3Qgb3NkX3JlcXVlc3QgeworCXN0cnVjdCBvc2RfY2RiIGNkYjsKKwlzdHJ1Y3Qgb3NkX2RhdGFfb3V0X2ludGVncml0eV9pbmZvIG91dF9kYXRhX2ludGVnOworCXN0cnVjdCBvc2RfZGF0YV9pbl9pbnRlZ3JpdHlfaW5mbyBpbl9kYXRhX2ludGVnOworCisJc3RydWN0IG9zZF9kZXYgKm9zZF9kZXY7CisJc3RydWN0IHJlcXVlc3QgKnJlcXVlc3Q7CisKKwlzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50IHsKKwkJdm9pZCAqYnVmZjsKKwkJdW5zaWduZWQgYWxsb2Nfc2l6ZTsgLyogMCBoZXJlIG1lYW5zOiBkb24ndCBjYWxsIGtmcmVlICovCisJCXVuc2lnbmVkIHRvdGFsX2J5dGVzOworCX0gc2V0X2F0dHIsIGVuY19nZXRfYXR0ciwgZ2V0X2F0dHI7CisKKwlzdHJ1Y3QgX29zZF9pb19pbmZvIHsKKwkJc3RydWN0IGJpbyAqYmlvOworCQl1NjQgdG90YWxfYnl0ZXM7CisJCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJCXN0cnVjdCBfb3NkX3JlcV9kYXRhX3NlZ21lbnQgKmxhc3Rfc2VnOworCQl1OCAqcGFkX2J1ZmY7CisJfSBvdXQsIGluOworCisJZ2ZwX3QgYWxsb2NfZmxhZ3M7CisJdW5zaWduZWQgdGltZW91dDsKKwl1bnNpZ25lZCByZXRyaWVzOworCXU4IHNlbnNlW09TRF9NQVhfU0VOU0VfTEVOXTsKKwllbnVtIG9zZF9hdHRyaWJ1dGVzX21vZGUgYXR0cmlidXRlc19tb2RlOworCisJb3NkX3JlcV9kb25lX2ZuICphc3luY19kb25lOworCXZvaWQgKmFzeW5jX3ByaXZhdGU7CisJaW50IGFzeW5jX2Vycm9yOworfTsKKworLyogT1NEIFZlcnNpb24gY29udHJvbCAqLworc3RhdGljIGlubGluZSBib29sIG9zZF9yZXFfaXNfdmVyMShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworI2lmZGVmIE9TRF9WRVIxX1NVUFBPUlQKKwlyZXR1cm4gb3ItPm9zZF9kZXYtPnZlcnNpb24gPT0gT1NEX1ZFUjE7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisvKgorICogSG93IHRvIHVzZSB0aGUgb3NkIGxpYnJhcnk6CisgKgorICogb3NkX3N0YXJ0X3JlcXVlc3QKKyAqCUFsbG9jYXRlcyBhIHJlcXVlc3QuCisgKgorICogb3NkX3JlcV8qCisgKglDYWxsIG9uZSBvZiwgdG8gZW5jb2RlIHRoZSBkZXNpcmVkIG9wZXJhdGlvbi4KKyAqCisgKiBvc2RfYWRkX3tnZXQsc2V0fV9hdHRyCisgKglPcHRpb25hbGx5IGFkZCBhdHRyaWJ1dGVzIHRvIHRoZSBDREIsIGxpc3Qgb3IgcGFnZSBtb2RlLgorICoKKyAqIG9zZF9maW5hbGl6ZV9yZXF1ZXN0CisgKglDb21wdXRlcyBmaW5hbCBkYXRhIG91dC9pbiBvZmZzZXRzIGFuZCBzaWducyB0aGUgcmVxdWVzdCwKKyAqCW1ha2luZyBpdCByZWFkeSBmb3IgZXhlY3V0aW9uLgorICoKKyAqIG9zZF9leGVjdXRlX3JlcXVlc3QKKyAqCU1heSBiZSBjYWxsZWQgdG8gZXhlY3V0ZSBpdCB0aHJvdWdoIHRoZSBibG9jayBsYXllci4gT3RoZXIgd2lzZSBzdWJtaXQKKyAqCXRoZSBhc3NvY2lhdGVkIGJsb2NrIHJlcXVlc3QgaW4gc29tZSBvdGhlciB3YXkuCisgKgorICogQWZ0ZXIgZXhlY3V0aW9uOgorICogb3NkX3JlcV9kZWNvZGVfc2Vuc2UKKyAqCURlY29kZXMgc2Vuc2UgaW5mb3JtYXRpb24gdG8gdmVyaWZ5IGV4ZWN1dGlvbiByZXN1bHRzLgorICoKKyAqIG9zZF9yZXFfZGVjb2RlX2dldF9hdHRyCisgKglSZXRyaWV2ZSBvc2RfYWRkX2dldF9hdHRyX2xpc3QoKSB2YWx1ZXMgaWYgdXNlZC4KKyAqCisgKiBvc2RfZW5kX3JlcXVlc3QKKyAqCU11c3QgYmUgY2FsbGVkIHRvIGRlYWxsb2NhdGUgdGhlIHJlcXVlc3QuCisgKi8KKworLyoqCisgKiBvc2Rfc3RhcnRfcmVxdWVzdCAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIG9zZF9yZXF1ZXN0CisgKgorICogQG9zZF9kZXY6ICAgIE9TRCBkZXZpY2UgdGhhdCBob2xkcyB0aGUgc2NzaS1kZXZpY2UgYW5kIGRlZmF1bHQgdmFsdWVzCisgKiAgICAgICAgICAgICAgdGhhdCB0aGUgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCisgKiBAZ2ZwOiAgICAgICAgVGhlIGFsbG9jYXRpb24gZmxhZ3MgdG8gdXNlIGZvciByZXF1ZXN0IGFsbG9jYXRpb24sIGFuZCBhbGwKKyAqICAgICAgICAgICAgICBzdWJzZXF1ZW50IGFsbG9jYXRpb25zLiBUaGlzIHdpbGwgYmUgc3RvcmVkIGF0CisgKiAgICAgICAgICAgICAgb3NkX3JlcXVlc3QtPmFsbG9jX2ZsYWdzLCBjYW4gYmUgY2hhbmdlZCBieSB1c2VyIGxhdGVyCisgKgorICogQWxsb2NhdGUgb3NkX3JlcXVlc3QgYW5kIGluaXRpYWxpemUgYWxsIG1lbWJlcnMgdG8gdGhlCisgKiBkZWZhdWx0L2luaXRpYWwgc3RhdGUuCisgKi8KK3N0cnVjdCBvc2RfcmVxdWVzdCAqb3NkX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IG9zZF9kZXYgKm9kLCBnZnBfdCBnZnApOworCitlbnVtIG9zZF9yZXFfb3B0aW9ucyB7CisJT1NEX1JFUV9GVUEgPSAweDA4LAkvKiBGb3JjZSBVbml0IEFjY2VzcyAqLworCU9TRF9SRVFfRFBPID0gMHgxMCwJLyogRGlzYWJsZSBQYWdlIE91dCAqLworCisJT1NEX1JFUV9CWVBBU1NfVElNRVNUQU1QUyA9IDB4ODAsCit9OworCisvKioKKyAqIG9zZF9maW5hbGl6ZV9yZXF1ZXN0IC0gU2lnbiByZXF1ZXN0IGFuZCBwcmVwYXJlIHJlcXVlc3QgZm9yIGV4ZWN1dGlvbgorICoKKyAqIEBvcjoJCW9zZF9yZXF1ZXN0IHRvIHByZXBhcmUKKyAqIEBvcHRpb25zOgljb21iaW5hdGlvbiBvZiBvc2RfcmVxX29wdGlvbnMgYml0IGZsYWdzIG9yIDAuCisgKiBAY2FwOglBIFBvaW50ZXIgdG8gYW4gT1NEX0NBUF9MRU4gYnl0ZXMgYnVmZmVyIHRoYXQgaXMgcmVjZWl2ZWQgZnJvbQorICogICAgICAgICAgICAgIFRoZSBzZWN1cml0eSBtYW5hZ2VyIGFzIGNhcGFiaWxpdGllcyBmb3IgdGhpcyBjZGIuCisgKiBAY2FwX2tleToJVGhlIGNyeXB0b2dyYXBoaWMga2V5IHVzZWQgdG8gc2lnbiB0aGUgY2RiL2RhdGEuIENhbiBiZSBudWxsCisgKiAgICAgICAgICAgICAgaWYgTk9TRUMgaXMgdXNlZC4KKyAqCisgKiBUaGUgYWN0dWFsIHJlcXVlc3QgYW5kIGJpb3MgYXJlIG9ubHkgYWxsb2NhdGVkIGhlcmUsIHNvIGFyZSB0aGUgZ2V0X2F0dHIKKyAqIGJ1ZmZlcnMgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHJldHVybmVkIGF0dHJpYnV0ZXMuIENvcHkncyBAY2FwIHRvIGNkYi4KKyAqIFNpZ24gdGhlIGNkYi9kYXRhIHdpdGggQGNhcF9rZXkuCisgKi8KK2ludCBvc2RfZmluYWxpemVfcmVxdWVzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXU4IG9wdGlvbnMsIGNvbnN0IHZvaWQgKmNhcCwgY29uc3QgdTggKmNhcF9rZXkpOworCisvKioKKyAqIG9zZF9leGVjdXRlX3JlcXVlc3QgLSBFeGVjdXRlIHRoZSByZXF1ZXN0IHN5bmNocm9ub3VzbHkgdGhyb3VnaCBibG9jay1sYXllcgorICoKKyAqIEBvcjoJCW9zZF9yZXF1ZXN0IHRvIEV4ZWN1dGVkCisgKgorICogQ2FsbHMgYmxrX2V4ZWN1dGVfcnEgdG8gcSB0aGUgY29tbWFuZCBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24uCisgKi8KK2ludCBvc2RfZXhlY3V0ZV9yZXF1ZXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpOworCisvKioKKyAqIG9zZF9leGVjdXRlX3JlcXVlc3RfYXN5bmMgLSBFeGVjdXRlIHRoZSByZXF1ZXN0IHdpdGhvdXQgd2FpdHRpbmcuCisgKgorICogQG9yOiAgICAgICAgICAgICAgICAgICAgICAtIG9zZF9yZXF1ZXN0IHRvIEV4ZWN1dGVkCisgKiBAZG9uZTogKE9wdGlvbmFsKSAgICAgICAgIC0gQ2FsbGVkIGF0IGVuZCBvZiBleGVjdXRpb24KKyAqIEBwcml2YXRlOiAgICAgICAgICAgICAgICAgLSBXaWxsIGJlIHBhc3NlZCB0byBAZG9uZSBmdW5jdGlvbgorICoKKyAqIENhbGxzIGJsa19leGVjdXRlX3JxX25vd2FpdCB0byBxdWV1ZSB0aGUgY29tbWFuZC4gV2hlbiBleGVjdXRpb24gaXMgZG9uZQorICogb3B0aW9uYWxseSBjYWxscyBAZG9uZSB3aXRoIEBwcml2YXRlIGFzIHBhcmFtZXRlci4gQG9yLT5hc3luY19lcnJvciB3aWxsCisgKiBoYXZlIHRoZSByZXR1cm4gY29kZQorICovCitpbnQgb3NkX2V4ZWN1dGVfcmVxdWVzdF9hc3luYyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9yZXFfZG9uZV9mbiAqZG9uZSwgdm9pZCAqcHJpdmF0ZSk7CisKKy8qKgorICogb3NkX3JlcV9kZWNvZGVfc2Vuc2VfZnVsbCAtIERlY29kZSBzZW5zZSBpbmZvcm1hdGlvbiBhZnRlciBleGVjdXRpb24uCisgKgorICogQG9yOiAgICAgICAgICAgLSBvc2RfcmVxdWVzdCB0byBleGFtaW5lCisgKiBAb3NpICAgICAgICAgICAtIFJlY2lldnMgYSBtb3JlIGRldGFpbGVkIGVycm9yIHJlcG9ydCBpbmZvcm1hdGlvbiAob3B0aW9uYWwpLgorICogQHNpbGVudCAgICAgICAgLSBEbyBub3QgcHJpbnQgdG8gZG1zZyAoRXZlbiBpZiBlbmFibGVkKQorICogQGJhZF9vYmpfbGlzdCAgLSBTb21lIGNvbW1hbmRzIGFjdCBvbiBtdWx0aXBsZSBvYmplY3RzLiBGYWlsZWQgb2JqZWN0cyB3aWxsCisgKiAgICAgICAgICAgICAgICAgIGJlIHJlY2lldmVkIGhlcmUgKG9wdGlvbmFsKQorICogQG1heF9vYmogICAgICAgLSBTaXplIG9mIEBiYWRfb2JqX2xpc3QuCisgKiBAYmFkX2F0dHJfbGlzdCAtIExpc3Qgb2YgZmFpbGluZyBhdHRyaWJ1dGVzIChvcHRpb25hbCkKKyAqIEBtYXhfYXR0ciAgICAgIC0gU2l6ZSBvZiBAYmFkX2F0dHJfbGlzdC4KKyAqCisgKiBBZnRlciBleGVjdXRpb24sIHNlbnNlICsgcmV0dXJuIGNvZGUgY2FuIGJlIGFuYWx5emVkIHVzaW5nIHRoaXMgZnVuY3Rpb24uIFRoZQorICogcmV0dXJuIGNvZGUgaXMgdGhlIGZpbmFsIGRpc3Bvc2l0aW9uIG9uIHRoZSBlcnJvci4gU28gaXQgaXMgcG9zc2libGUgdGhhdCBhCisgKiBDSEVDS19DT05ESVRJT04gd2FzIHJldHVybmVkIGZyb20gdGFyZ2V0IGJ1dCB0aGlzIHdpbGwgcmV0dXJuIE5PX0VSUk9SLCBmb3IKKyAqIGV4YW1wbGUgb24gcmVjb3ZlcmVkIGVycm9ycy4gQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGlmIGNhbGxlciBkb2VzCisgKiBub3QgbmVlZCBhbnkgcmV0dXJuZWQgaW5mb3JtYXRpb24uCisgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBkdW1wIHRoZSBlcnJvciB0byBkbXNnIGFjY29yZGluZyB0byBzZXR0aW5ncworICogb2YgdGhlIFNDU0lfT1NEX0RQUklOVF9TRU5TRSBLY29uZmlnIHZhbHVlLiBTZXQgQHNpbGVudCBpZiB5b3Uga25vdyB0aGUKKyAqIGNvbW1hbmQgd291bGQgcm91dGluZWx5IGZhaWwsIHRvIG5vdCBzcGFtIHRoZSBkbXNnIGZpbGUuCisgKi8KK3N0cnVjdCBvc2Rfc2Vuc2VfaW5mbyB7CisJaW50IGtleTsJCS8qIG9uZSBvZiBlbnVtIHNjc2lfc2Vuc2Vfa2V5cyAqLworCWludCBhZGRpdGlvbmFsX2NvZGUgOwkvKiBlbnVtIG9zZF9hZGRpdGlvbmFsX3NlbnNlX2NvZGVzICovCisJdW5pb24geyAvKiBTZW5zZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCQl1MTYgc2Vuc2VfaW5mbzsKKwkJdTE2IGNkYl9maWVsZF9vZmZzZXQ7IAkvKiBzY3NpX2ludmFsaWRfZmllbGRfaW5fY2RiICovCisJfTsKKwl1bmlvbiB7IC8qIENvbW1hbmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwkJdTY0IGNvbW1hbmRfaW5mbzsKKwl9OworCisJdTMyIG5vdF9pbml0aWF0ZWRfY29tbWFuZF9mdW5jdGlvbnM7IC8qIG9zZF9jb21tYW5kX2Z1bmN0aW9uc19iaXRzICovCisJdTMyIGNvbXBsZXRlZF9jb21tYW5kX2Z1bmN0aW9uczsgLyogb3NkX2NvbW1hbmRfZnVuY3Rpb25zX2JpdHMgKi8KKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmo7CisJc3RydWN0IG9zZF9hdHRyIGF0dHI7Cit9OworCitpbnQgb3NkX3JlcV9kZWNvZGVfc2Vuc2VfZnVsbChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCXN0cnVjdCBvc2Rfc2Vuc2VfaW5mbyAqb3NpLCBib29sIHNpbGVudCwKKwlzdHJ1Y3Qgb3NkX29ial9pZCAqYmFkX29ial9saXN0LCBpbnQgbWF4X29iaiwKKwlzdHJ1Y3Qgb3NkX2F0dHIgKmJhZF9hdHRyX2xpc3QsIGludCBtYXhfYXR0cik7CisKK3N0YXRpYyBpbmxpbmUgaW50IG9zZF9yZXFfZGVjb2RlX3NlbnNlKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJc3RydWN0IG9zZF9zZW5zZV9pbmZvICpvc2kpCit7CisJcmV0dXJuIG9zZF9yZXFfZGVjb2RlX3NlbnNlX2Z1bGwob3IsIG9zaSwgZmFsc2UsIE5VTEwsIDAsIE5VTEwsIDApOworfQorCisvKioKKyAqIG9zZF9lbmRfcmVxdWVzdCAtIHJldHVybiBvc2RfcmVxdWVzdCB0byBmcmVlIHN0b3JlCisgKgorICogQG9yOgkJb3NkX3JlcXVlc3QgdG8gZnJlZQorICoKKyAqIERlYWxsb2NhdGUgYWxsIG9zZF9yZXF1ZXN0IHJlc291cmNlcyAoc3RydWN0IHJlcSdzLCBCSU9zLCBidWZmZXJzLCBldGMuKQorICovCit2b2lkIG9zZF9lbmRfcmVxdWVzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKTsKKworLyoKKyAqIENEQiBFbmNvZGluZworICoKKyAqIE5vdGU6IGNhbGwgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzLgorICovCisKKy8qCisgKiBEZXZpY2UgY29tbWFuZHMKKyAqLwordm9pZCBvc2RfcmVxX3NldF9tYXN0ZXJfc2VlZF94Y2hnKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIC4uLik7LyogTkkgKi8KK3ZvaWQgb3NkX3JlcV9zZXRfbWFzdGVyX2tleShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCAuLi4pOy8qIE5JICovCisKK3ZvaWQgb3NkX3JlcV9mb3JtYXQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdTY0IHRvdF9jYXBhY2l0eSk7CisKKy8qIGxpc3QgYWxsIHBhcnRpdGlvbnMKKyAqIEBsaXN0IGhlYWRlciBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8gb24gZmlyc3QgcnVuLgorICoKKyAqIENhbGwgb3NkX2lzX29ial9saXN0X2RvbmUoKSB0byBmaW5kIGlmIHdlIGdvdCB0aGUgY29tcGxldGUgbGlzdC4KKyAqLworaW50IG9zZF9yZXFfbGlzdF9kZXZfcGFydGl0aW9ucyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBpbml0aWFsX2lkLCBzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0LCB1bnNpZ25lZCBuZWxlbSk7CisKK3ZvaWQgb3NkX3JlcV9mbHVzaF9vYnNkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJZW51bSBvc2Rfb3B0aW9uc19mbHVzaF9zY29wZV92YWx1ZXMpOworCit2b2lkIG9zZF9yZXFfcGVyZm9ybV9zY3NpX2NvbW1hbmQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCB1OCAqY2RiLCAuLi4pOy8qIE5JICovCit2b2lkIG9zZF9yZXFfdGFza19tYW5hZ2VtZW50KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIC4uLik7LyogTkkgKi8KKworLyoKKyAqIFBhcnRpdGlvbiBjb21tYW5kcworICovCit2b2lkIG9zZF9yZXFfY3JlYXRlX3BhcnRpdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBvc2RfaWQgcGFydGl0aW9uKTsKK3ZvaWQgb3NkX3JlcV9yZW1vdmVfcGFydGl0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIG9zZF9pZCBwYXJ0aXRpb24pOworCit2b2lkIG9zZF9yZXFfc2V0X3BhcnRpdGlvbl9rZXkoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfaWQgcGFydGl0aW9uLCB1OCBuZXdfa2V5X2lkW09TRF9DUllQVE9fS0VZSURfU0laRV0sCisJdTggc2VlZFtPU0RfQ1JZUFRPX1NFRURfU0laRV0pOy8qIE5JICovCisKKy8qIGxpc3QgYWxsIGNvbGxlY3Rpb25zIGluIHRoZSBwYXJ0aXRpb24KKyAqIEBsaXN0IGhlYWRlciBtdXN0IGJlIGluaXQgdG8gemVybyBvbiBmaXJzdCBydW4uCisgKgorICogQ2FsbCBvc2RfaXNfb2JqX2xpc3RfZG9uZSgpIHRvIGZpbmQgaWYgd2UgZ290IHRoZSBjb21wbGV0ZSBsaXN0LgorICovCitpbnQgb3NkX3JlcV9saXN0X3BhcnRpdGlvbl9jb2xsZWN0aW9ucyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBwYXJ0aXRpb24sIG9zZF9pZCBpbml0aWFsX2lkLCBzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0LAorCXVuc2lnbmVkIG5lbGVtKTsKKworLyogbGlzdCBhbGwgb2JqZWN0cyBpbiB0aGUgcGFydGl0aW9uCisgKiBAbGlzdCBoZWFkZXIgbXVzdCBiZSBpbml0IHRvIHplcm8gb24gZmlyc3QgcnVuLgorICoKKyAqIENhbGwgb3NkX2lzX29ial9saXN0X2RvbmUoKSB0byBmaW5kIGlmIHdlIGdvdCB0aGUgY29tcGxldGUgbGlzdC4KKyAqLworaW50IG9zZF9yZXFfbGlzdF9wYXJ0aXRpb25fb2JqZWN0cyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBwYXJ0aXRpb24sIG9zZF9pZCBpbml0aWFsX2lkLCBzdHJ1Y3Qgb3NkX29ial9pZF9saXN0ICpsaXN0LAorCXVuc2lnbmVkIG5lbGVtKTsKKwordm9pZCBvc2RfcmVxX2ZsdXNoX3BhcnRpdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCW9zZF9pZCBwYXJ0aXRpb24sIGVudW0gb3NkX29wdGlvbnNfZmx1c2hfc2NvcGVfdmFsdWVzKTsKKworLyoKKyAqIENvbGxlY3Rpb24gY29tbWFuZHMKKyAqLwordm9pZCBvc2RfcmVxX2NyZWF0ZV9jb2xsZWN0aW9uKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKik7LyogTkkgKi8KK3ZvaWQgb3NkX3JlcV9yZW1vdmVfY29sbGVjdGlvbihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICopOy8qIE5JICovCisKKy8qIGxpc3QgYWxsIG9iamVjdHMgaW4gdGhlIGNvbGxlY3Rpb24gKi8KK2ludCBvc2RfcmVxX2xpc3RfY29sbGVjdGlvbl9vYmplY3RzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgb3NkX2lkIGluaXRpYWxfaWQsCisJc3RydWN0IG9zZF9vYmpfaWRfbGlzdCAqbGlzdCwgdW5zaWduZWQgbmVsZW0pOworCisvKiBWMiBvbmx5IGZpbHRlcmVkIGxpc3Qgb2Ygb2JqZWN0cyBpbiB0aGUgY29sbGVjdGlvbiAqLwordm9pZCBvc2RfcmVxX3F1ZXJ5KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIC4uLik7LyogTkkgKi8KKwordm9pZCBvc2RfcmVxX2ZsdXNoX2NvbGxlY3Rpb24oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqLCBlbnVtIG9zZF9vcHRpb25zX2ZsdXNoX3Njb3BlX3ZhbHVlcyk7CisKK3ZvaWQgb3NkX3JlcV9nZXRfbWVtYmVyX2F0dHJzKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIC4uLik7LyogVjItb25seSBOSSAqLwordm9pZCBvc2RfcmVxX3NldF9tZW1iZXJfYXR0cnMoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgLi4uKTsvKiBWMi1vbmx5IE5JICovCisKKy8qCisgKiBPYmplY3QgY29tbWFuZHMKKyAqLwordm9pZCBvc2RfcmVxX2NyZWF0ZV9vYmplY3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IG9zZF9vYmpfaWQgKik7Cit2b2lkIG9zZF9yZXFfcmVtb3ZlX29iamVjdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3Qgb3NkX29ial9pZCAqKTsKKwordm9pZCBvc2RfcmVxX3dyaXRlKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgc3RydWN0IGJpbyAqZGF0YV9vdXQsIHU2NCBvZmZzZXQpOwordm9pZCBvc2RfcmVxX2FwcGVuZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHN0cnVjdCBiaW8gKmRhdGFfb3V0KTsvKiBOSSAqLwordm9pZCBvc2RfcmVxX2NyZWF0ZV93cml0ZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHN0cnVjdCBiaW8gKmRhdGFfb3V0LCB1NjQgb2Zmc2V0KTsvKiBOSSAqLwordm9pZCBvc2RfcmVxX2NsZWFyKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgdTY0IG9mZnNldCwgdTY0IGxlbik7LyogTkkgKi8KK3ZvaWQgb3NkX3JlcV9wdW5jaChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIHU2NCBvZmZzZXQsIHU2NCBsZW4pOy8qIFYyLW9ubHkgTkkgKi8KKwordm9pZCBvc2RfcmVxX2ZsdXNoX29iamVjdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICosIGVudW0gb3NkX29wdGlvbnNfZmx1c2hfc2NvcGVfdmFsdWVzLAorCS8qVjIqLyB1NjQgb2Zmc2V0LCAvKlYyKi8gdTY0IGxlbik7CisKK3ZvaWQgb3NkX3JlcV9yZWFkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKiwgc3RydWN0IGJpbyAqZGF0YV9pbiwgdTY0IG9mZnNldCk7CisKKy8qCisgKiBSb290L1BhcnRpdGlvbi9Db2xsZWN0aW9uL09iamVjdCBBdHRyaWJ1dGVzIGNvbW1hbmRzCisgKi8KKworLyogZ2V0IGJlZm9yZSBzZXQgKi8KK3ZvaWQgb3NkX3JlcV9nZXRfYXR0cmlidXRlcyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqKTsKKworLyogc2V0IGJlZm9yZSBnZXQgKi8KK3ZvaWQgb3NkX3JlcV9zZXRfYXR0cmlidXRlcyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqKTsKKworLyoKKyAqIEF0dHJpYnV0ZXMgYXBwZW5kZWQgdG8gbW9zdCBjb21tYW5kcworICovCisKKy8qIEF0dHJpYnV0ZXMgTGlzdCBtb2RlIChvciBWMiBDREIpICovCisgIC8qCisgICAqIFRPRE86IEluIHZlcjIgaWYgYXQgZmluYWxpemUgdGltZSBvbmx5IG9uZSBhdHRyIHdhcyBzZXQgYW5kIG5vIGdldHMsCisgICAqIHRoZW4gdGhlIEF0dHJpYnV0ZXMgQ0RCIG1vZGUgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IHRvIHNhdmUgSU8uCisgICAqLworCisvKiBzZXQgYSBsaXN0IG9mIGF0dHJpYnV0ZXMuICovCitpbnQgb3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2RfYXR0ciAqLCB1bnNpZ25lZCBuZWxlbSk7CisKKy8qIGdldCBhIGxpc3Qgb2YgYXR0cmlidXRlcyAqLworaW50IG9zZF9yZXFfYWRkX2dldF9hdHRyX2xpc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgKiwgdW5zaWduZWQgbmVsZW0pOworCisvKgorICogQXR0cmlidXRlcyBsaXN0IGRlY29kaW5nCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBvc2RfcmVxdWVzdC5yZXF1ZXN0IHdhcyBleGVjdXRlZAorICogSXQgaXMgY2FsbGVkIGluIGEgbG9vcCB0byBkZWNvZGUgdGhlIHJldHVybmVkIGdldF9hdHRyCisgKiAoc2VlIG9zZF9hZGRfZ2V0X2F0dHIpCisgKi8KK2ludCBvc2RfcmVxX2RlY29kZV9nZXRfYXR0cl9saXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJc3RydWN0IG9zZF9hdHRyICosIGludCAqbmVsZW0sIHZvaWQgKippdGVyYXRvcik7CisKKy8qIEF0dHJpYnV0ZXMgUGFnZSBtb2RlICovCisKKy8qCisgKiBSZWFkIGFuIGF0dHJpYnV0ZSBwYWdlIGFuZCBvcHRpb25hbGx5IHNldCBvbmUgYXR0cmlidXRlCisgKgorICogUmV0cmlldmVzIHRoZSBhdHRyaWJ1dGUgcGFnZSBkaXJlY3RseSB0byBhIHVzZXIgYnVmZmVyLgorICogQGF0dHJfcGFnZV9kYXRhIHNoYWxsIHN0YXkgdmFsaWQgdW50aWwgZW5kIG9mIGV4ZWN1dGlvbi4KKyAqIFNlZSBvc2RfYXR0cmlidXRlcy5oIGZvciBjb21tb24gcGFnZSBzdHJ1Y3R1cmVzCisgKi8KK2ludCBvc2RfcmVxX2FkZF9nZXRfYXR0cl9wYWdlKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJdTMyIHBhZ2VfaWQsIHZvaWQgKmF0dHJfcGFnZV9kYXRhLCB1bnNpZ25lZCBtYXhfcGFnZV9sZW4sCisJY29uc3Qgc3RydWN0IG9zZF9hdHRyICpzZXRfb25lKTsKKworI2VuZGlmIC8qIF9fT1NEX0xJQl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2RfcHJvdG9jb2wuaCBiL2luY2x1ZGUvc2NzaS9vc2RfcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDNjYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zY3NpL29zZF9wcm90b2NvbC5oCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogb3NkX3Byb3RvY29sLmggLSBPU0QgVDEwIHN0YW5kYXJkIEMgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFBhbmFzYXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3JzOgorICogICBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICogICBCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHR5cGVzIGFuZCBjb25zdGFudHMgdGhhdCBhcmUgZGVmaW5lZCBieSB0aGUgcHJvdG9jb2wKKyAqIE5vdGU6IEFsbCBuYW1lcyBhbmQgc3ltYm9scyBhcmUgdGFrZW4gZnJvbSB0aGUgT1NEIHN0YW5kYXJkJ3MgdGV4dC4KKyAqLworI2lmbmRlZiBfX09TRF9QUk9UT0NPTF9IX18KKyNkZWZpbmUgX19PU0RfUFJPVE9DT0xfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKworZW51bSB7CisJT1NEdjFfQURESVRJT05BTF9DREJfTEVOR1RIID0gMTkyLAorCU9TRHYxX1RPVEFMX0NEQl9MRU4gPSBPU0R2MV9BRERJVElPTkFMX0NEQl9MRU5HVEggKyA4LAorCU9TRHYxX0NBUF9MRU4gPSA4MCwKKwkvKiBMYXRlc3Qgc3VwcG9ydGVkIHZlcnNpb24gKi8KKy8qIAlPU0RfQURESVRJT05BTF9DREJfTEVOR1RIID0gMjE2LCovCisJT1NEX0FERElUSU9OQUxfQ0RCX0xFTkdUSCA9CisJCU9TRHYxX0FERElUSU9OQUxfQ0RCX0xFTkdUSCwgLyogRklYTUU6IFBldGUgcmV2LTAwMSBzdXAgKi8KKwlPU0RfVE9UQUxfQ0RCX0xFTiA9IE9TRF9BRERJVElPTkFMX0NEQl9MRU5HVEggKyA4LAorLyogCU9TRF9DQVBfTEVOID0gMTA0LCovCisJT1NEX0NBUF9MRU4gPSBPU0R2MV9DQVBfTEVOLC8qIEZJWE1FOiBQZXRlIHJldi0wMDEgc3VwICovCisKKwlPU0RfU1lTVEVNSURfTEVOID0gMjAsCisJT1NEX0NSWVBUT19LRVlJRF9TSVpFID0gMjAsCisJLypGSVhNRTogT1NEdjJfQ1JZUFRPX0tFWUlEX1NJWkUgPSAzMiwqLworCU9TRF9DUllQVE9fU0VFRF9TSVpFID0gNCwKKwlPU0RfQ1JZUFRPX05PTkNFX1NJWkUgPSAxMiwKKwlPU0RfTUFYX1NFTlNFX0xFTiA9IDI1MiwgLyogZnJvbSBTUEMtMyAqLworCisJT1NEX1BBUlRJVElPTl9GSVJTVF9JRCA9IDB4MTAwMDAsCisJT1NEX09CSkVDVF9GSVJTVF9JRCA9IDB4MTAwMDAsCit9OworCisvKiAob3NkLXIxMCA1LjIuNCkKKyAqIG9zZDJyMDM6IDUuMi4zIENhY2hpbmcgY29udHJvbCBiaXRzCisgKi8KK2VudW0gb3NkX29wdGlvbnNfYnl0ZSB7CisJT1NEX0NEQl9GVUEgPSAweDA4LAkvKiBGb3JjZSBVbml0IEFjY2VzcyAqLworCU9TRF9DREJfRFBPID0gMHgxMCwJLyogRGlzYWJsZSBQYWdlIE91dCAqLworfTsKKworLyoKKyAqIG9zZDJyMDM6IDUuMi41IElzb2xhdGlvbi4KKyAqIEZpcnN0IDMgYml0cywgVjItb25seS4KKyAqIEFsc28gZm9yIGF0dHIgMTEwaCAiZGVmYXVsdCBpc29sYXRpb24gbWV0aG9kIiBhdCBSb290IEluZm9ybWF0aW9uIHBhZ2UKKyAqLworZW51bSBvc2Rfb3B0aW9uc19ieXRlX2lzb2xhdGlvbiB7CisJT1NEX0lTT0xBVElPTl9ERUZBVUxUID0gMCwKKwlPU0RfSVNPTEFUSU9OX05PTkUgPSAxLAorCU9TRF9JU09MQVRJT05fU1RSSUNUID0gMiwKKwlPU0RfSVNPTEFUSU9OX1JBTkdFID0gNCwKKwlPU0RfSVNPTEFUSU9OX0ZVTkNUSU9OQUwgPSA1LAorCU9TRF9JU09MQVRJT05fVkVORE9SID0gNywKK307CisKKy8qIChvc2QtcjEwOiA2LjcpCisgKiBvc2QycjAzOiA2LjggRkxVU0gsIEZMVVNIIENPTExFQ1RJT04sIEZMVVNIIE9TRCwgRkxVU0ggUEFSVElUSU9OCisgKi8KK2VudW0gb3NkX29wdGlvbnNfZmx1c2hfc2NvcGVfdmFsdWVzIHsKKwlPU0RfQ0RCX0ZMVVNIX0FMTCA9IDAsCisJT1NEX0NEQl9GTFVTSF9BVFRSX09OTFkgPSAxLAorCisJT1NEX0NEQl9GTFVTSF9BTExfUkVDVVJTSVZFID0gMiwKKwkvKiBWMi1vbmx5ICovCisJT1NEX0NEQl9GTFVTSF9BTExfUkFOR0UgPSAyLAorfTsKKworLyogb3NkMnIwMzogNS4yLjEwIFRpbWVzdGFtcHMgY29udHJvbCAqLworZW51bSB7CisJT1NEX0NEQl9OT1JNQUxfVElNRVNUQU1QUyA9IDAsCisJT1NEX0NEQl9CWVBBU1NfVElNRVNUQU1QUyA9IDB4N2YsCit9OworCisvKiAob3NkLXIxMDogNS4yLjIuMSkKKyAqIG9zZDJyMDM6IDUuMi40LjEgR2V0IGFuZCBzZXQgYXR0cmlidXRlcyBDREIgZm9ybWF0IHNlbGVjdGlvbgorICoJMiBiaXRzIGF0IHNlY29uZCBuaWJibGUgb2YgY29tbWFuZF9zcGVjaWZpY19vcHRpb25zIGJ5dGUKKyAqLworZW51bSBvc2RfYXR0cmlidXRlc19tb2RlIHsKKwkvKiBWMi1vbmx5ICovCisJT1NEX0NEQl9TRVRfT05FX0FUVFIgPSAweDEwLAorCisJT1NEX0NEQl9HRVRfQVRUUl9QQUdFX1NFVF9PTkUgPSAweDIwLAorCU9TRF9DREJfR0VUX1NFVF9BVFRSX0xJU1RTID0gMHgzMCwKKworCU9TRF9DREJfR0VUX1NFVF9BVFRSX01BU0sgPSAweDMwLAorfTsKKworLyogKG9zZC1yMTA6IDQuMTIuNSkKKyAqIG9zZDJyMDM6IDQuMTQuNSBEYXRhLUluIGFuZCBEYXRhLU91dCBidWZmZXIgb2Zmc2V0cworICoJYnl0ZSBvZmZzZXQgPSBtYW50aXNzYSAqICgyXihleHBvbmVudCs4KSkKKyAqCXN0cnVjdCB7CisgKgkJdW5zaWduZWQgbWFudGlzc2E6IDI4OworICoJCWludCBleHBvbmVudDogMDQ7CisgKgl9CisgKi8KK3R5cGVkZWYgX19iZTMyIF9fYml0d2lzZSBvc2RfY2RiX29mZnNldDsKKworZW51bSB7CisJT1NEX09GRlNFVF9VTlVTRUQgPSAweEZGRkZGRkZGLAorCU9TRF9PRkZTRVRfTUFYX0JJVFMgPSAyOCwKKworCU9TRHYxX09GRlNFVF9NSU5fU0hJRlQgPSA4LAorCU9TRF9PRkZTRVRfTUlOX1NISUZUID0gMywKKwlPU0RfT0ZGU0VUX01BWF9TSElGVCA9IDE2LAorfTsKKworLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBhbGxvd2VkIGVuY29kZWQgb2Zmc2V0IHRoYXQgY29udGFpbnMgQG9mZnNldC4KKyAqCisgKiBUaGUgYWN0dWFsIGVuY29kZWQgb2Zmc2V0IHJldHVybmVkIGlzIEBvZmZzZXQgKyAqcGFkZGluZy4KKyAqICh1cCB0byBtYXhfc2hpZnQsIG5vbi1pbmNsdXNpdmUpCisgKi8KK29zZF9jZGJfb2Zmc2V0IF9fb3NkX2VuY29kZV9vZmZzZXQodTY0IG9mZnNldCwgdW5zaWduZWQgKnBhZGRpbmcsCisJaW50IG1pbl9zaGlmdCwgaW50IG1heF9zaGlmdCk7CisKKy8qIE1pbmltdW0gYWxpZ25tZW50IGlzIDI1NiBieXRlcworICogTm90ZTogU2VlbXMgZnJvbSBzdGQgdjEgdGhhdCBleHBvbmVudCBjYW4gYmUgZnJvbSAwKzggdG8gMHhFKzggKGluY2x1c2l2ZSkKKyAqIHdoaWNoIGlzIDggdG8gMjMgYnV0IElCTSBjb2RlIHJlc3RyaWN0cyBpdCB0byAxNiwgc28gYmUgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgb3NkX2NkYl9vZmZzZXQgb3NkX2VuY29kZV9vZmZzZXRfdjEodTY0IG9mZnNldCwgdW5zaWduZWQgKnBhZGRpbmcpCit7CisJcmV0dXJuIF9fb3NkX2VuY29kZV9vZmZzZXQob2Zmc2V0LCBwYWRkaW5nLAorCQkJCU9TRHYxX09GRlNFVF9NSU5fU0hJRlQsIE9TRF9PRkZTRVRfTUFYX1NISUZUKTsKK30KKworLyogTWluaW11bSA4IGJ5dGVzIGFsaWdubWVudAorICogU2FtZSBhcyB2MSBidXQgc2luY2UgZXhwb25lbnQgY2FuIGJlIHNpZ25lZCB0aGFuIGEgbGVzcyB0aGFuCisgKiAyNTYgYWxpZ25tZW50IGNhbiBiZSByZWFjaGVkIHdpdGggc21hbGwgb2Zmc2V0cyAoPDJHQikKKyAqLworc3RhdGljIGlubGluZSBvc2RfY2RiX29mZnNldCBvc2RfZW5jb2RlX29mZnNldF92Mih1NjQgb2Zmc2V0LCB1bnNpZ25lZCAqcGFkZGluZykKK3sKKwlyZXR1cm4gX19vc2RfZW5jb2RlX29mZnNldChvZmZzZXQsIHBhZGRpbmcsCisJCQkJICAgT1NEX09GRlNFVF9NSU5fU0hJRlQsIE9TRF9PRkZTRVRfTUFYX1NISUZUKTsKK30KKworLyogb3NkMnIwMzogNS4yLjEgT3ZlcnZpZXcgKi8KK3N0cnVjdCBvc2RfY2RiX2hlYWQgeworCXN0cnVjdCBzY3NpX3Zhcmxlbl9jZGJfaGRyIHZhcmxlbl9jZGI7CisvKjEwKi8JdTgJCW9wdGlvbnM7CisJdTgJCWNvbW1hbmRfc3BlY2lmaWNfb3B0aW9uczsKKwl1OAkJdGltZXN0YW1wX2NvbnRyb2w7CisvKjEzKi8JdTgJCXJlc2VydmVkMVszXTsKKy8qMTYqLwlfX2JlNjQJCXBhcnRpdGlvbjsKKy8qMjQqLwlfX2JlNjQJCW9iamVjdDsKKy8qMzIqLwl1bmlvbiB7IC8qIFYxIHZzIFYyIGFsaWdubWVudCBkaWZmZXJlbmNlcyAqLworCQlzdHJ1Y3QgX19vc2R2MV9jZGJfYWRkcl9sZW4geworLyozMiovCQkJX19iZTMyIAkJbGlzdF9pZGVudGlmaWVyOy8qIFJhcmVseSB1c2VkICovCisvKjM2Ki8JCQlfX2JlNjQJCWxlbmd0aDsKKy8qNDQqLwkJCV9fYmU2NAkJc3RhcnRfYWRkcmVzczsKKwkJfSBfX3BhY2tlZCB2MTsKKworCQlzdHJ1Y3QgX19vc2R2Ml9jZGJfYWRkcl9sZW4geworCQkJLyogY2FsbGVkIGFsbG9jYXRpb25fbGVuZ3RoIGluIHNvbWUgY29tbWFuZHMgKi8KKy8qMzIqLwkJCV9fYmU2NAlsZW5ndGg7CisvKjQwKi8JCQlfX2JlNjQJc3RhcnRfYWRkcmVzczsKKy8qNDgqLwkJCV9fYmUzMiBsaXN0X2lkZW50aWZpZXI7LyogUmFyZWx5IHVzZWQgKi8KKwkJfSBfX3BhY2tlZCB2MjsKKwl9OworLyo1MiovCXVuaW9uIHsgLyogc2VsZWN0ZWQgYXR0cmlidXRlcyBtb2RlIFBhZ2UvTGlzdC9TaW5nbGUgKi8KKwkJc3RydWN0IG9zZF9hdHRyaWJ1dGVzX3BhZ2VfbW9kZSB7CisvKjUyKi8JCQlfX2JlMzIJCWdldF9hdHRyX3BhZ2U7CisvKjU2Ki8JCQlfX2JlMzIJCWdldF9hdHRyX2FsbG9jX2xlbmd0aDsKKy8qNjAqLwkJCW9zZF9jZGJfb2Zmc2V0CWdldF9hdHRyX29mZnNldDsKKworLyo2NCovCQkJX19iZTMyCQlzZXRfYXR0cl9wYWdlOworLyo2OCovCQkJX19iZTMyCQlzZXRfYXR0cl9pZDsKKy8qNzIqLwkJCV9fYmUzMgkJc2V0X2F0dHJfbGVuZ3RoOworLyo3NiovCQkJb3NkX2NkYl9vZmZzZXQJc2V0X2F0dHJfb2Zmc2V0OworLyo4MCovCQl9IF9fcGFja2VkIGF0dHJzX3BhZ2U7CisKKwkJc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfbW9kZSB7CisvKjUyKi8JCQlfX2JlMzIJCWdldF9hdHRyX2Rlc2NfYnl0ZXM7CisvKjU2Ki8JCQlvc2RfY2RiX29mZnNldAlnZXRfYXR0cl9kZXNjX29mZnNldDsKKworLyo2MCovCQkJX19iZTMyCQlnZXRfYXR0cl9hbGxvY19sZW5ndGg7CisvKjY0Ki8JCQlvc2RfY2RiX29mZnNldAlnZXRfYXR0cl9vZmZzZXQ7CisKKy8qNjgqLwkJCV9fYmUzMgkJc2V0X2F0dHJfYnl0ZXM7CisvKjcyKi8JCQlvc2RfY2RiX29mZnNldAlzZXRfYXR0cl9vZmZzZXQ7CisJCQlfX2JlMzIgbm90X3VzZWQ7CisvKjgwKi8JCX0gX19wYWNrZWQgYXR0cnNfbGlzdDsKKworCQkvKiBvc2QycjAzOjUuMi40LjIgU2V0IG9uZSBhdHRyaWJ1dGUgdmFsdWUgdXNpbmcgQ0RCIGZpZWxkcyAqLworCQlzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfY2RiX21vZGUgeworLyo1MiovCQkJX19iZTMyCQlzZXRfYXR0cl9wYWdlOworLyo1NiovCQkJX19iZTMyCQlzZXRfYXR0cl9pZDsKKy8qNjAqLwkJCV9fYmUxNgkJc2V0X2F0dHJfbGVuOworLyo2MiovCQkJdTgJCXNldF9hdHRyX3ZhbFsxOF07CisvKjgwKi8JCX0gX19wYWNrZWQgYXR0cnNfY2RiOworLyo1MiovCQl1OCBnZXRfc2V0X2F0dHJpYnV0ZXNfcGFyYW1ldGVyc1syOF07CisJfTsKK30gX19wYWNrZWQ7CisvKjgwKi8KKworLyoxNjAgdjEqLworLyoxODQgdjIqLworc3RydWN0IG9zZF9zZWN1cml0eV9wYXJhbWV0ZXJzIHsKKy8qMTYwKi91OAlpbnRlZ3JpdHlfY2hlY2tfdmFsdWVbT1NEX0NSWVBUT19LRVlJRF9TSVpFXTsKKy8qMTgwKi91OAlyZXF1ZXN0X25vbmNlW09TRF9DUllQVE9fTk9OQ0VfU0laRV07CisvKjE5Miovb3NkX2NkYl9vZmZzZXQJZGF0YV9pbl9pbnRlZ3JpdHlfY2hlY2tfb2Zmc2V0OworLyoxOTYqL29zZF9jZGJfb2Zmc2V0CWRhdGFfb3V0X2ludGVncml0eV9jaGVja19vZmZzZXQ7Cit9IF9fcGFja2VkOworLyoyMDAgdjEqLworLyoyMjQgdjIqLworCisvKiBGSVhNRTogb3NkdjJfc2VjdXJpdHlfcGFyYW1ldGVycyAqLworCitzdHJ1Y3Qgb3NkdjFfY2RiIHsKKwlzdHJ1Y3Qgb3NkX2NkYl9oZWFkIGg7CisJdTggY2Fwc1tPU0R2MV9DQVBfTEVOXTsKKwlzdHJ1Y3Qgb3NkX3NlY3VyaXR5X3BhcmFtZXRlcnMgc2VjX3BhcmFtczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBvc2R2Ml9jZGIgeworCXN0cnVjdCBvc2RfY2RiX2hlYWQgaDsKKwl1OCBjYXBzW09TRF9DQVBfTEVOXTsKKwlzdHJ1Y3Qgb3NkX3NlY3VyaXR5X3BhcmFtZXRlcnMgc2VjX3BhcmFtczsKKwkvKiBGSVhNRTogb3NkdjJfc2VjdXJpdHlfcGFyYW1ldGVycyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG9zZF9jZGIgeworCXVuaW9uIHsKKwkJc3RydWN0IG9zZHYxX2NkYiB2MTsKKwkJc3RydWN0IG9zZHYyX2NkYiB2MjsKKwkJdTggYnVmZltPU0RfVE9UQUxfQ0RCX0xFTl07CisJfTsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9zZF9jZGJfaGVhZCAqb3NkX2NkYl9oZWFkKHN0cnVjdCBvc2RfY2RiICpvY2RiKQoreworCXJldHVybiAoc3RydWN0IG9zZF9jZGJfaGVhZCAqKW9jZGItPmJ1ZmY7Cit9CisKKy8qIGRlZmluZSBib3RoIHZlcnNpb24gYWN0aW9ucworICogRXggbmFtZSA9IEZPUk1BVF9PU0Qgd2UgaGF2ZSBPU0RfQUNUX0ZPUk1BVF9PU0QgJiYgT1NEdjFfQUNUX0ZPUk1BVF9PU0QKKyAqLworI2RlZmluZSBPU0RfQUNUX19fKE5hbWUsIE51bSkgXAorCU9TRF9BQ1RfIyNOYW1lID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweDg4ODAgKyBOdW0pLCBcCisJT1NEdjFfQUNUXyMjTmFtZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHg4ODAwICsgTnVtKSwKKworLyogVjIgb25seSBhY3Rpb25zICovCisjZGVmaW5lIE9TRF9BQ1RfVjIoTmFtZSwgTnVtKSBcCisJT1NEX0FDVF8jI05hbWUgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4ODg4MCArIE51bSksCisKKyNkZWZpbmUgT1NEX0FDVF9WMV9WMihOYW1lLCBOdW0xLCBOdW0yKSBcCisJT1NEX0FDVF8jI05hbWUgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KE51bTIpLCBcCisJT1NEdjFfQUNUXyMjTmFtZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoTnVtMSksCisKK2VudW0gb3NkX3NlcnZpY2VfYWN0aW9ucyB7CisJT1NEX0FDVF9WMihPQkpFQ1RfU1RSVUNUVVJFX0NIRUNLLAkweDAwKQorCU9TRF9BQ1RfX18oRk9STUFUX09TRCwJCQkweDAxKQorCU9TRF9BQ1RfX18oQ1JFQVRFLAkJCTB4MDIpCisJT1NEX0FDVF9fXyhMSVNULAkJCTB4MDMpCisJT1NEX0FDVF9WMihQVU5DSCwJCQkweDA0KQorCU9TRF9BQ1RfX18oUkVBRCwJCQkweDA1KQorCU9TRF9BQ1RfX18oV1JJVEUsCQkJMHgwNikKKwlPU0RfQUNUX19fKEFQUEVORCwJCQkweDA3KQorCU9TRF9BQ1RfX18oRkxVU0gsCQkJMHgwOCkKKwlPU0RfQUNUX1YyKENMRUFSLAkJCTB4MDkpCisJT1NEX0FDVF9fXyhSRU1PVkUsCQkJMHgwQSkKKwlPU0RfQUNUX19fKENSRUFURV9QQVJUSVRJT04sCQkweDBCKQorCU9TRF9BQ1RfX18oUkVNT1ZFX1BBUlRJVElPTiwJCTB4MEMpCisJT1NEX0FDVF9fXyhHRVRfQVRUUklCVVRFUywJCTB4MEUpCisJT1NEX0FDVF9fXyhTRVRfQVRUUklCVVRFUywJCTB4MEYpCisJT1NEX0FDVF9fXyhDUkVBVEVfQU5EX1dSSVRFLAkJMHgxMikKKwlPU0RfQUNUX19fKENSRUFURV9DT0xMRUNUSU9OLAkJMHgxNSkKKwlPU0RfQUNUX19fKFJFTU9WRV9DT0xMRUNUSU9OLAkJMHgxNikKKwlPU0RfQUNUX19fKExJU1RfQ09MTEVDVElPTiwJCTB4MTcpCisJT1NEX0FDVF9fXyhTRVRfS0VZLAkJCTB4MTgpCisJT1NEX0FDVF9fXyhTRVRfTUFTVEVSX0tFWSwJCTB4MTkpCisJT1NEX0FDVF9fXyhGTFVTSF9DT0xMRUNUSU9OLAkJMHgxQSkKKwlPU0RfQUNUX19fKEZMVVNIX1BBUlRJVElPTiwJCTB4MUIpCisJT1NEX0FDVF9fXyhGTFVTSF9PU0QsCQkJMHgxQykKKworCU9TRF9BQ1RfVjIoUVVFUlksCQkJMHgyMCkKKwlPU0RfQUNUX1YyKFJFTU9WRV9NRU1CRVJfT0JKRUNUUywJMHgyMSkKKwlPU0RfQUNUX1YyKEdFVF9NRU1CRVJfQVRUUklCVVRFUywJMHgyMikKKwlPU0RfQUNUX1YyKFNFVF9NRU1CRVJfQVRUUklCVVRFUywJMHgyMykKKwlPU0RfQUNUX1YyKFJFQURfTUFQLAkJCTB4MzEpCisKKwlPU0RfQUNUX1YxX1YyKFBFUkZPUk1fU0NTSV9DT01NQU5ELAkweDhGN0UsIDB4OEY3QykKKwlPU0RfQUNUX1YxX1YyKFNDU0lfVEFTS19NQU5BR0VNRU5ULAkweDhGN0YsIDB4OEY3RCkKKwkvKiAweDhGODAgdG8gMHg4RkZGIGFyZSBWZW5kb3Igc3BlY2lmaWMgKi8KK307CisKKy8qIG9zZDJyMDM6IDcuMS4zLjIgTGlzdCBlbnRyeSBmb3JtYXQgZm9yIHJldHJpZXZpbmcgYXR0cmlidXRlcyAqLworc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfYXR0cmlkIHsKKwlfX2JlMzIgYXR0cl9wYWdlOworCV9fYmUzMiBhdHRyX2lkOworfSBfX3BhY2tlZDsKKworLyoKKyAqIG9zZDJyMDM6IDcuMS4zLjMgTGlzdCBlbnRyeSBmb3JtYXQgZm9yIHJldHJpZXZlZCBhdHRyaWJ1dGVzIGFuZAorICogICAgICAgICAgICAgICAgICBmb3Igc2V0dGluZyBhdHRyaWJ1dGVzCisgKiBOT1RFOiB2MiBpcyA4LWJ5dGVzIGFsaWduZWQsIHYxIGlzIG5vdCBhbGlnbmVkLgorICovCitzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9lbGVtZW50IHsKKwlfX2JlMzIgYXR0cl9wYWdlOworCV9fYmUzMiBhdHRyX2lkOworCV9fYmUxNiBhdHRyX2J5dGVzOworCXU4IGF0dHJfdmFsWzBdOworfSBfX3BhY2tlZDsKKworZW51bSB7CisJT1NEdjFfQVRUUklCVVRFU19FTEVNX0FMSUdOID0gMSwKKwlPU0RfQVRUUklCVVRFU19FTEVNX0FMSUdOID0gOCwKK307CisKK2VudW0geworCU9TRF9BVFRSX0xJU1RfQUxMX1BBR0VTID0gMHhGRkZGRkZGRiwKKwlPU0RfQVRUUl9MSVNUX0FMTF9JTl9QQUdFID0gMHhGRkZGRkZGRiwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgb3NkdjFfYXR0cl9saXN0X2VsZW1fc2l6ZSh1bnNpZ25lZCBsZW4pCit7CisJcmV0dXJuIEFMSUdOKGxlbiArIHNpemVvZihzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9lbGVtZW50KSwKKwkJICAgICBPU0R2MV9BVFRSSUJVVEVTX0VMRU1fQUxJR04pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG9zZHYyX2F0dHJfbGlzdF9lbGVtX3NpemUodW5zaWduZWQgbGVuKQoreworCXJldHVybiBBTElHTihsZW4gKyBzaXplb2Yoc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCksCisJCSAgICAgT1NEX0FUVFJJQlVURVNfRUxFTV9BTElHTik7Cit9CisKKy8qCisgKiBvc2QycjAzOiA3LjEuMyBPU0QgYXR0cmlidXRlcyBsaXN0cyAoVGFibGUgMTg0KSDigJQgTGlzdCB0eXBlIHZhbHVlcworICovCitlbnVtIG9zZF9hdHRyX2xpc3RfdHlwZXMgeworCU9TRF9BVFRSX0xJU1RfR0VUID0gMHgxLCAJLyogZGVzY3JpcHRvcnMgb25seSAqLworCU9TRF9BVFRSX0xJU1RfU0VUX1JFVFJJRVZFID0gMHg5LCAvKmRlc2NyaXB0b3JzL3ZhbHVlcyB2YXJpYWJsZS1sZW5ndGgqLworCU9TRF9WMl9BVFRSX0xJU1RfTVVMVElQTEUgPSAweEUsICAvKiB2ZXIyLCBNdWx0aXBsZSBPYmplY3RzIGxpc3RzKi8KKwlPU0RfVjFfQVRUUl9MSVNUX0NSRUFURV9NVUxUSVBMRSA9IDB4RiwvKnZlcjEsIHVzZWQgYnkgY3JlYXRlX211bHRwbGUqLworfTsKKworLyogb3NkMnIwMzogNy4xLjMuNCBNdWx0aS1vYmplY3QgcmV0cmlldmVkIGF0dHJpYnV0ZXMgZm9ybWF0ICovCitzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9tdWx0aV9oZWFkZXIgeworCV9fYmU2NCBvYmplY3RfaWQ7CisJdTggb2JqZWN0X3R5cGU7IC8qIG9iamVjdF90eXBlIGVudW0gYmVsb3cgKi8KKwl1OCByZXNlcnZlZFs1XTsKKwlfX2JlMTYgbGlzdF9ieXRlczsKKwkvKiBmb2xsb3dlZCBieSBzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9lbGVtZW50J3MgKi8KK307CisKK3N0cnVjdCBvc2R2MV9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyIHsKKwl1OCB0eXBlOwkvKiBsb3cgNC1iaXQgb25seSAqLworCXU4IHBhZDsKKwlfX2JlMTYgbGlzdF9ieXRlczsgLyogSW5pdGlhdG9yIHNoYWxsIHNldCB0byBaZXJvLiBPbmx5IHNldCBieSB0YXJnZXQgKi8KKwkvKgorCSAqIHR5cGU9OSBmb2xsb3dlZCBieSBzdHJ1Y3Qgb3NkX2F0dHJpYnV0ZXNfbGlzdF9lbGVtZW50J3MKKwkgKiB0eXBlPUUgZm9sbG93ZWQgYnkgc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfbXVsdGlfaGVhZGVyJ3MKKwkgKi8KK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgb3NkdjFfbGlzdF9zaXplKHN0cnVjdCBvc2R2MV9hdHRyaWJ1dGVzX2xpc3RfaGVhZGVyICpoKQoreworCXJldHVybiBiZTE2X3RvX2NwdShoLT5saXN0X2J5dGVzKTsKK30KKworc3RydWN0IG9zZHYyX2F0dHJpYnV0ZXNfbGlzdF9oZWFkZXIgeworCXU4IHR5cGU7CS8qIGxvd2VyIDQtYml0cyBvbmx5ICovCisJdTggcGFkWzNdOworLyo0Ki8JX19iZTMyIGxpc3RfYnl0ZXM7IC8qIEluaXRpYXRvciBzaGFsbCBzZXQgdG8gemVyby4gT25seSBzZXQgYnkgdGFyZ2V0ICovCisJLyoKKwkgKiB0eXBlPTkgZm9sbG93ZWQgYnkgc3RydWN0IG9zZF9hdHRyaWJ1dGVzX2xpc3RfZWxlbWVudCdzCisJICogdHlwZT1FIGZvbGxvd2VkIGJ5IHN0cnVjdCBvc2RfYXR0cmlidXRlc19saXN0X211bHRpX2hlYWRlcidzCisJICovCit9IF9fcGFja2VkOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG9zZHYyX2xpc3Rfc2l6ZShzdHJ1Y3Qgb3NkdjJfYXR0cmlidXRlc19saXN0X2hlYWRlciAqaCkKK3sKKwlyZXR1cm4gYmUzMl90b19jcHUoaC0+bGlzdF9ieXRlcyk7Cit9CisKKy8qIChvc2QtcjEwIDYuMTMpCisgKiBvc2QycjAzOiA2LjE1IExJU1QgKFRhYmxlIDc5KSBMSVNUIGNvbW1hbmQgcGFyYW1ldGVyIGRhdGEuCisgKglmb3Igcm9vdF9sc3RjaGcgYmVsb3cKKyAqLworZW51bSB7CisJT1NEX09CSl9JRF9MSVNUX1BBUiA9IDB4MSwgLyogVjEtb25seS4gTm90IHVzZWQgaW4gVjIgKi8KKwlPU0RfT0JKX0lEX0xJU1RfTFNUQ0hHID0gMHgyLAorfTsKKworLyoKKyAqIG9zZDJyMDM6IDYuMTUuMiBMSVNUIGNvbW1hbmQgcGFyYW1ldGVyIGRhdGEKKyAqIChBbHNvIGZvciBMSVNUIENPTExFQ1RJT04pCisgKi8KK3N0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgeworCV9fYmU2NCBsaXN0X2J5dGVzOyAvKiBieXRlcyBpbiBsaXN0IGV4Y2x1ZGluZyBsaXN0X2J5dGVzICgtOCkgKi8KKwlfX2JlNjQgY29udGludWF0aW9uX2lkOworCV9fYmUzMiBsaXN0X2lkZW50aWZpZXI7CisJdTggcGFkWzNdOworCXU4IHJvb3RfbHN0Y2hnOworCV9fYmU2NCBvYmplY3RfaWRzWzBdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSBib29sIG9zZF9pc19vYmpfbGlzdF9kb25lKHN0cnVjdCBvc2Rfb2JqX2lkX2xpc3QgKmxpc3QsCisJYm9vbCAqaXNfY2hhbmdlZCkKK3sKKwkqaXNfY2hhbmdlZCA9ICgwICE9IChsaXN0LT5yb290X2xzdGNoZyAmIE9TRF9PQkpfSURfTElTVF9MU1RDSEcpKTsKKwlyZXR1cm4gMCAhPSBsaXN0LT5jb250aW51YXRpb25faWQ7Cit9CisKKy8qCisgKiBvc2QycjAzOiA0LjEyLjQuNSBUaGUgQUxMREFUQSBzZWN1cml0eSBtZXRob2QKKyAqLworc3RydWN0IG9zZF9kYXRhX291dF9pbnRlZ3JpdHlfaW5mbyB7CisJX19iZTY0IGRhdGFfYnl0ZXM7CisJX19iZTY0IHNldF9hdHRyaWJ1dGVzX2J5dGVzOworCV9fYmU2NCBnZXRfYXR0cmlidXRlc19ieXRlczsKKwlfX2JlNjQgaW50ZWdyaXR5X2NoZWNrX3ZhbHVlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG9zZF9kYXRhX2luX2ludGVncml0eV9pbmZvIHsKKwlfX2JlNjQgZGF0YV9ieXRlczsKKwlfX2JlNjQgcmV0cmlldmVkX2F0dHJpYnV0ZXNfYnl0ZXM7CisJX19iZTY0IGludGVncml0eV9jaGVja192YWx1ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBvc2RfdGltZXN0YW1wIHsKKwl1OCB0aW1lWzZdOyAvKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDEvMS8xOTcwIFVUIChiaWcgZW5kaWFuKSAqLworfSBfX3BhY2tlZDsKKy8qIEZJWE1FOiBkZWZpbmUgaGVscGVyIGZ1bmN0aW9ucyB0byBjb252ZXJ0IHRvL2Zyb20gb3NkIHRpbWUgZm9ybWF0ICovCisKKy8qCisgKiBDYXBhYmlsaXR5ICYgU2VjdXJpdHkgZGVmaW5pdGlvbnMKKyAqIG9zZDJyMDM6IDQuMTEuMi4yIENhcGFiaWxpdHkgZm9ybWF0CisgKiBvc2QycjAzOiA1LjIuOCBTZWN1cml0eSBwYXJhbWV0ZXJzCisgKi8KKworc3RydWN0IG9zZF9rZXlfaWRlbnRpZmllciB7CisJdTggaWRbN107IC8qIGlmIHlvdSBrbm93IHdoeSA3IHBsZWFzZSBlbWFpbCBiaGFycm9zaEBwYW5hc2FzLmNvbSAqLworfSBfX3BhY2tlZDsKKworLyogZm9yIG9zZF9jYXBhYmlsaXR5LmZvcm1hdCAqLworZW51bSB7CisJT1NEX1NFQ19DQVBfRk9STUFUX05PX0NBUFMgPSAwLAorCU9TRF9TRUNfQ0FQX0ZPUk1BVF9WRVIxID0gMSwKKwlPU0RfU0VDX0NBUF9GT1JNQVRfVkVSMiA9IDIsCit9OworCisvKiBzZWN1cml0eV9tZXRob2QgKi8KK2VudW0geworCU9TRF9TRUNfTk9TRUMgPSAwLAorCU9TRF9TRUNfQ0FQS0VZID0gMSwKKwlPU0RfU0VDX0NNRFJTUCA9IDIsCisJT1NEX1NFQ19BTExEQVRBID0gMywKK307CisKK2VudW0gb2JqZWN0X3R5cGUgeworCU9TRF9TRUNfT0JKX1JPT1QgPSAweDEsCisJT1NEX1NFQ19PQkpfUEFSVElUSU9OID0gMHgyLAorCU9TRF9TRUNfT0JKX0NPTExFQ1RJT04gPSAweDQwLAorCU9TRF9TRUNfT0JKX1VTRVIgPSAweDgwLAorfTsKKworZW51bSBvc2RfY2FwYWJpbGl0eV9iaXRfbWFza3MgeworCU9TRF9TRUNfQ0FQX0FQUEVORAk9IEJJVCgwKSwKKwlPU0RfU0VDX0NBUF9PQkpfTUdNVAk9IEJJVCgxKSwKKwlPU0RfU0VDX0NBUF9SRU1PVkUJPSBCSVQoMiksCisJT1NEX1NFQ19DQVBfQ1JFQVRFCT0gQklUKDMpLAorCU9TRF9TRUNfQ0FQX1NFVF9BVFRSCT0gQklUKDQpLAorCU9TRF9TRUNfQ0FQX0dFVF9BVFRSCT0gQklUKDUpLAorCU9TRF9TRUNfQ0FQX1dSSVRFCT0gQklUKDYpLAorCU9TRF9TRUNfQ0FQX1JFQUQJPSBCSVQoNyksCisKKwlPU0RfU0VDX0NBUF9OT05FMQk9IEJJVCg4KSwKKwlPU0RfU0VDX0NBUF9OT05FMgk9IEJJVCg5KSwKKwlPU0RfU0VDX0NBUF9OT05FMwk9IEJJVCgxMCksCisJT1NEX1NFQ19DQVBfUVVFUlkJPSBCSVQoMTEpLCAvKnYyIG9ubHkqLworCU9TRF9TRUNfQ0FQX01fT0JKRUNUCT0gQklUKDEyKSwgLyp2MiBvbmx5Ki8KKwlPU0RfU0VDX0NBUF9QT0xfU0VDCT0gQklUKDEzKSwKKwlPU0RfU0VDX0NBUF9HTE9CQUwJPSBCSVQoMTQpLAorCU9TRF9TRUNfQ0FQX0RFVl9NR01UCT0gQklUKDE1KSwKK307CisKKy8qIGZvciBvYmplY3RfZGVzY3JpcHRvcl90eXBlIChoaSBuaWJibGUgdXNlZCkgKi8KK2VudW0geworCU9TRF9TRUNfT0JKX0RFU0NfTk9ORSA9IDAsICAgICAvKiBOb3QgYWxsb3dlZCAqLworCU9TRF9TRUNfT0JKX0RFU0NfT0JKID0gMSA8PCA0LCAvKiB2MTogYWxzbyBjb2xsZWN0aW9uICovCisJT1NEX1NFQ19PQkpfREVTQ19QQVIgPSAyIDw8IDQsIC8qIGFsc28gcm9vdCAqLworCU9TRF9TRUNfT0JKX0RFU0NfQ09MID0gMyA8PCA0LCAvKiB2MiBvbmx5ICovCit9OworCisvKiAob3NkLXIxMDo0LjkuMi4yKQorICogb3NkMnIwMzo0LjExLjIuMiBDYXBhYmlsaXR5IGZvcm1hdAorICovCitzdHJ1Y3Qgb3NkX2NhcGFiaWxpdHlfaGVhZCB7CisJdTggZm9ybWF0OyAvKiBsb3cgbmliYmxlICovCisJdTggaW50ZWdyaXR5X2FsZ29yaXRobV9fa2V5X3ZlcnNpb247IC8qIE1BS0VfQllURShpbnRlZ19hbGcsIGtleV92ZXIpICovCisJdTggc2VjdXJpdHlfbWV0aG9kOworCXU4IHJlc2VydmVkMTsKKy8qMDQqLwlzdHJ1Y3Qgb3NkX3RpbWVzdGFtcCBleHBpcmF0aW9uX3RpbWU7CisvKjEwKi8JdTggYXVkaXRbMjBdOworLyozMCovCXU4IGRpc2NyaW1pbmF0b3JbMTJdOworLyo0MiovCXN0cnVjdCBvc2RfdGltZXN0YW1wIG9iamVjdF9jcmVhdGVkX3RpbWU7CisvKjQ4Ki8JdTggb2JqZWN0X3R5cGU7CisvKjQ5Ki8JdTggcGVybWlzc2lvbnNfYml0X21hc2tbNV07CisvKjU0Ki8JdTggcmVzZXJ2ZWQyOworLyo1NSovCXU4IG9iamVjdF9kZXNjcmlwdG9yX3R5cGU7IC8qIGhpZ2ggbmliYmxlICovCit9IF9fcGFja2VkOworCisvKjU2IHYxKi8KK3N0cnVjdCBvc2R2MV9jYXBfb2JqZWN0X2Rlc2NyaXB0b3IgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKy8qNTYqLwkJCV9fYmUzMiBwb2xpY3lfYWNjZXNzX3RhZzsKKy8qNjAqLwkJCV9fYmU2NCBhbGxvd2VkX3BhcnRpdGlvbl9pZDsKKy8qNjgqLwkJCV9fYmU2NCBhbGxvd2VkX29iamVjdF9pZDsKKy8qNzYqLwkJCV9fYmUzMiByZXNlcnZlZDsKKwkJfSBfX3BhY2tlZCBvYmpfZGVzYzsKKworLyo1NiovCQl1OCBvYmplY3RfZGVzY3JpcHRvclsyNF07CisJfTsKK30gX19wYWNrZWQ7CisvKjgwIHYxKi8KKworLyo1NiB2MiovCitzdHJ1Y3Qgb3NkX2NhcF9vYmplY3RfZGVzY3JpcHRvciB7CisJdW5pb24geworCQlzdHJ1Y3QgeworLyo1NiovCQkJX19iZTMyIGFsbG93ZWRfYXR0cmlidXRlc19hY2Nlc3M7CisvKjYwKi8JCQlfX2JlMzIgcG9saWN5X2FjY2Vzc190YWc7CisvKjY0Ki8JCQlfX2JlMTYgYm9vdF9lcG9jaDsKKy8qNjYqLwkJCXU4IHJlc2VydmVkWzZdOworLyo3MiovCQkJX19iZTY0IGFsbG93ZWRfcGFydGl0aW9uX2lkOworLyo4MCovCQkJX19iZTY0IGFsbG93ZWRfb2JqZWN0X2lkOworLyo4OCovCQkJX19iZTY0IGFsbG93ZWRfcmFuZ2VfbGVuZ3RoOworLyo5NiovCQkJX19iZTY0IGFsbG93ZWRfcmFuZ2Vfc3RhcnQ7CisJCX0gX19wYWNrZWQgb2JqX2Rlc2M7CisKKy8qNTYqLwkJdTggb2JqZWN0X2Rlc2NyaXB0b3JbNDhdOworCX07Cit9IF9fcGFja2VkOworLyoxMDQgdjIqLworCitzdHJ1Y3Qgb3NkdjFfY2FwYWJpbGl0eSB7CisJc3RydWN0IG9zZF9jYXBhYmlsaXR5X2hlYWQgaDsKKwlzdHJ1Y3Qgb3NkdjFfY2FwX29iamVjdF9kZXNjcmlwdG9yIG9kOworfSBfX3BhY2tlZDsKKworc3RydWN0IG9zZF9jYXBhYmlsaXR5IHsKKwlzdHJ1Y3Qgb3NkX2NhcGFiaWxpdHlfaGVhZCBoOworLyogCXN0cnVjdCBvc2RfY2FwX29iamVjdF9kZXNjcmlwdG9yIG9kOyovCisJc3RydWN0IG9zZHYxX2NhcF9vYmplY3RfZGVzY3JpcHRvciBvZDsgLyogRklYTUU6IFBldGUgcmV2LTAwMSBzdXAgKi8KK30gX19wYWNrZWQ7CisKKy8qKgorICogb3NkX3NlY19zZXRfY2FwcyAtIHNldCBjYXAtYml0cyBpbnRvIHRoZSBjYXBhYmlsaXRpZXMgaGVhZGVyCisgKgorICogQGNhcDoJVGhlIG9zZF9jYXBhYmlsaXR5X2hlYWQgdG8gc2V0IGNhcCBiaXRzIHRvLgorICogQGJpdF9tYXNrOiAJVXNlIGFuIE9SZWQgbGlzdCBvZiBlbnVtIG9zZF9jYXBhYmlsaXR5X2JpdF9tYXNrcyB2YWx1ZXMKKyAqCisgKiBwZXJtaXNzaW9uc19iaXRfbWFzayBpcyB1bmFsaWduZWQgdXNlIGJlbG93IHRvIHNldCBpbnRvIGNhcHMKKyAqIGluIGEgdmVyc2lvbiBpbmRlcGVuZGVudCB3YXkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG9zZF9zZWNfc2V0X2NhcHMoc3RydWN0IG9zZF9jYXBhYmlsaXR5X2hlYWQgKmNhcCwKKwl1MTYgYml0X21hc2spCit7CisJLyoKKwkgKk5vdGU6IFRoZSBiaXRzIGFib3ZlIGFyZSBkZWZpbmVkIExFIG9yZGVyIHRoaXMgaXMgYmVjYXVzZSB0aGlzIHdheQorCSAqICAgICAgdGhleSBjYW4gZ3JvdyBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgdGhlbiAxNiwgYW5kIHN0aWxsIHJldGFpbgorCSAqICAgICAgdGhlcmUgY29uc3RhbnQgdmFsdWVzLgorCSAqLworCXB1dF91bmFsaWduZWRfbGUxNihiaXRfbWFzaywgJmNhcC0+cGVybWlzc2lvbnNfYml0X21hc2spOworfQorCisjZW5kaWYgLyogbmRlZiBfX09TRF9QUk9UT0NPTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2Rfc2VjLmggYi9pbmNsdWRlL3Njc2kvb3NkX3NlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDlmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvb3NkX3NlYy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBvc2Rfc2VjLmggLSBPU0Qgc2VjdXJpdHkgbWFuYWdlciBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKiAgIEJlbm55IEhhbGV2eSA8YmhhbGV2eUBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqCisgKi8KKyNpZm5kZWYgX19PU0RfU0VDX0hfXworI2RlZmluZSBfX09TRF9TRUNfSF9fCisKKyNpbmNsdWRlICJvc2RfcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJvc2RfdHlwZXMuaCIKKworLyoKKyAqIENvbnRhaW5zIHR5cGVzIGFuZCBjb25zdGFudHMgb2Ygb3NkIGNhcGFiaWxpdGllcyBhbmQgc2VjdXJpdHkKKyAqIGVuY29kaW5nL2RlY29kaW5nLgorICogQVBJIGlzIHRyeWluZyB0byBrZWVwIHNlY3VyaXR5IGFic3RyYWN0IHNvIGluaXRpYXRvciBvZiBhbiBvYmplY3QKKyAqIGJhc2VkIHBORlMgY2xpZW50IGtub3dzIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSBhYm91dCBzZWN1cml0eSBhbmQKKyAqIGNhcGFiaWxpdGllcy4gSXQgaXMgdGhlIFNlcnZlcidzIG9zZC1pbml0aWF0b3IgcGxhY2UgdG8ga25vdyBtb3JlLgorICogQWxzbyBjYW4gYmUgdXNlZCBieSBvc2QtdGFyZ2V0LgorICovCit2b2lkIG9zZF9zZWNfZW5jb2RlX2NhcHModm9pZCAqY2FwcywgLi4uKTsvKiBOSSAqLwordm9pZCBvc2Rfc2VjX2luaXRfbm9zZWNfZG9hbGxfY2Fwcyh2b2lkICpjYXBzLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIGJvb2wgaXNfY29sbGVjdGlvbiwgY29uc3QgYm9vbCBpc192MSk7CisKK2Jvb2wgb3NkX2lzX3NlY19hbGxkYXRhKHN0cnVjdCBvc2Rfc2VjdXJpdHlfcGFyYW1ldGVycyAqc2VjX3BhcmFtcyk7CisKKy8qIENvbmRpdGlvbmFsbHkgc2lnbiB0aGUgQ0RCIGFjY29yZGluZyB0byBzZWN1cml0eSBzZXR0aW5nIGluIG9jZGIKKyAqIHdpdGggY2FwX2tleSAqLwordm9pZCBvc2Rfc2VjX3NpZ25fY2RiKHN0cnVjdCBvc2RfY2RiICpvY2RiLCBjb25zdCB1OCAqY2FwX2tleSk7CisKKy8qIFVuY29uZGl0aW9uYWxseSBzaWduIHRoZSBCSU8gZGF0YSB3aXRoIGNhcF9rZXkuCisgKiBDaGVjayBmb3Igb3NkX2lzX3NlY19hbGxkYXRhKCkgd2FzIGRvbmUgcHJpb3IgdG8gY2FsbGluZyB0aGlzLiAqLwordm9pZCBvc2Rfc2VjX3NpZ25fZGF0YSh2b2lkICpkYXRhX2ludGVnLCBzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHU4ICpjYXBfa2V5KTsKKworLyogVmVyc2lvbiBpbmRlcGVuZGVudCBjb3B5IG9mIGNhcHMgaW50byB0aGUgY2RiICovCit2b2lkIG9zZF9zZXRfY2FwcyhzdHJ1Y3Qgb3NkX2NkYiAqY2RiLCBjb25zdCB2b2lkICpjYXBzKTsKKworI2VuZGlmIC8qIG5kZWYgX19PU0RfU0VDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL29zZF9zZW5zZS5oIGIvaW5jbHVkZS9zY3NpL29zZF9zZW5zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOWIzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvb3NkX3NlbnNlLmgKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBvc2Rfc2Vuc2UuaCAtIE9TRCBSZWxhdGVkIHNlbnNlIGhhbmRsaW5nIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0eXBlcyBhbmQgY29uc3RhbnRzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIHByb3RvY29sCisgKiBOb3RlOiBBbGwgbmFtZXMgYW5kIHN5bWJvbHMgYXJlIHRha2VuIGZyb20gdGhlIE9TRCBzdGFuZGFyZCdzIHRleHQuCisgKi8KKyNpZm5kZWYgX19PU0RfU0VOU0VfSF9fCisjZGVmaW5lIF9fT1NEX1NFTlNFX0hfXworCisjaW5jbHVkZSA8c2NzaS9vc2RfcHJvdG9jb2wuaD4KKworLyogU1BDM3IyMyA0LjUuNiBTZW5zZSBrZXkgYW5kIHNlbnNlIGNvZGUgZGVmaW5pdGlvbnMgdGFibGUgMjcgKi8KK2VudW0gc2NzaV9zZW5zZV9rZXlzIHsKKwlzY3NpX3NrX25vX3NlbnNlICAgICAgICA9IDB4MCwKKwlzY3NpX3NrX3JlY292ZXJlZF9lcnJvciA9IDB4MSwKKwlzY3NpX3NrX25vdF9yZWFkeSAgICAgICA9IDB4MiwKKwlzY3NpX3NrX21lZGl1bV9lcnJvciAgICA9IDB4MywKKwlzY3NpX3NrX2hhcmR3YXJlX2Vycm9yICA9IDB4NCwKKwlzY3NpX3NrX2lsbGVnYWxfcmVxdWVzdCA9IDB4NSwKKwlzY3NpX3NrX3VuaXRfYXR0ZW50aW9uICA9IDB4NiwKKwlzY3NpX3NrX2RhdGFfcHJvdGVjdCAgICA9IDB4NywKKwlzY3NpX3NrX2JsYW5rX2NoZWNrICAgICA9IDB4OCwKKwlzY3NpX3NrX3ZlbmRvcl9zcGVjaWZpYyA9IDB4OSwKKwlzY3NpX3NrX2NvcHlfYWJvcnRlZCAgICA9IDB4YSwKKwlzY3NpX3NrX2Fib3J0ZWRfY29tbWFuZCA9IDB4YiwKKwlzY3NpX3NrX3ZvbHVtZV9vdmVyZmxvdyA9IDB4ZCwKKwlzY3NpX3NrX21pc2NvbXBhcmUgICAgICA9IDB4ZSwKKwlzY3NpX3NrX3Jlc2VydmVkICAgICAgICA9IDB4ZiwKK307CisKKy8qIFNQQzNyMjMgNC41LjYgU2Vuc2Uga2V5IGFuZCBzZW5zZSBjb2RlIGRlZmluaXRpb25zIHRhYmxlIDI4ICovCisvKiBOb3RlOiBvbmx5IHRob3NlIHdoaWNoIGNhbiBiZSByZXR1cm5lZCBieSBhbiBPU0QgdGFyZ2V0LiBNb3N0IG9mCisgKiAgICAgICB0aGVzZSBlcnJvcnMgYXJlIHRha2VuIGNhcmUgb2YgYnkgdGhlIGdlbmVyaWMgc2NzaSBsYXllci4KKyAqLworZW51bSBvc2RfYWRkaXRpb25hbF9zZW5zZV9jb2RlcyB7CisJc2NzaV9ub19hZGRpdGlvbmFsX3NlbnNlX2luZm9ybWF0aW9uCQkJPSAweDAwMDAsCisJc2NzaV9vcGVyYXRpb25faW5fcHJvZ3Jlc3MJCQkJPSAweDAwMTYsCisJc2NzaV9jbGVhbmluZ19yZXF1ZXN0ZWQJCQkJCT0gMHgwMDE3LAorCXNjc2lfbHVucl9jYXVzZV9ub3RfcmVwb3J0YWJsZQkJCQk9IDB4MDQwMCwKKwlzY3NpX2xvZ2ljYWxfdW5pdF9pc19pbl9wcm9jZXNzX29mX2JlY29taW5nX3JlYWR5CT0gMHgwNDAxLAorCXNjc2lfbHVucl9pbml0aWFsaXppbmdfY29tbWFuZF9yZXF1aXJlZAkJCT0gMHgwNDAyLAorCXNjc2lfbHVucl9tYW51YWxfaW50ZXJ2ZW50aW9uX3JlcXVpcmVkCQkJPSAweDA0MDMsCisJc2NzaV9sdW5yX29wZXJhdGlvbl9pbl9wcm9ncmVzcwkJCQk9IDB4MDQwNywKKwlzY3NpX2x1bnJfc2VsZnRlc3RfaW5fcHJvZ3Jlc3MJCQkJPSAweDA0MDksCisJc2NzaV9sdW5hX2FzeW1tZXRyaWNfYWNjZXNzX3N0YXRlX3RyYW5zaXRpb24JCT0gMHgwNDBhLAorCXNjc2lfbHVuYV90YXJnZXRfcG9ydF9pbl9zdGFuZGJ5X3N0YXRlCQkJPSAweDA0MGIsCisJc2NzaV9sdW5hX3RhcmdldF9wb3J0X2luX3VuYXZhaWxhYmxlX3N0YXRlCQk9IDB4MDQwYywKKwlzY3NpX2x1bnJfbm90aWZ5X2VuYWJsZV9zcGludXBfcmVxdWlyZWQJCQk9IDB4MDQxMSwKKwlzY3NpX2xvZ2ljYWxfdW5pdF9kb2VzX25vdF9yZXNwb25kX3RvX3NlbGVjdGlvbgkJPSAweDA1MDAsCisJc2NzaV9sb2dpY2FsX3VuaXRfY29tbXVuaWNhdGlvbl9mYWlsdXJlCQkJPSAweDA4MDAsCisJc2NzaV9sb2dpY2FsX3VuaXRfY29tbXVuaWNhdGlvbl90aW1lb3V0CQkJPSAweDA4MDEsCisJc2NzaV9sb2dpY2FsX3VuaXRfY29tbXVuaWNhdGlvbl9wYXJpdHlfZXJyb3IJCT0gMHgwODAyLAorCXNjc2lfZXJyb3JfbG9nX292ZXJmbG93CQkJCQk9IDB4MGEwMCwKKwlzY3NpX3dhcm5pbmcJCQkJCQk9IDB4MGIwMCwKKwlzY3NpX3dhcm5pbmdfc3BlY2lmaWVkX3RlbXBlcmF0dXJlX2V4Y2VlZGVkCQk9IDB4MGIwMSwKKwlzY3NpX3dhcm5pbmdfZW5jbG9zdXJlX2RlZ3JhZGVkCQkJCT0gMHgwYjAyLAorCXNjc2lfd3JpdGVfZXJyb3JfdW5leHBlY3RlZF91bnNvbGljaXRlZF9kYXRhCQk9IDB4MGMwYywKKwlzY3NpX3dyaXRlX2Vycm9yX25vdF9lbm91Z2hfdW5zb2xpY2l0ZWRfZGF0YQkJPSAweDBjMGQsCisJc2NzaV9pbnZhbGlkX2luZm9ybWF0aW9uX3VuaXQJCQkJPSAweDBlMDAsCisJc2NzaV9pbnZhbGlkX2ZpZWxkX2luX2NvbW1hbmRfaW5mb3JtYXRpb25fdW5pdAkJPSAweDBlMDMsCisJc2NzaV9yZWFkX2Vycm9yX2ZhaWxlZF9yZXRyYW5zbWlzc2lvbl9yZXF1ZXN0CQk9IDB4MTExMywKKwlzY3NpX3BhcmFtZXRlcl9saXN0X2xlbmd0aF9lcnJvcgkJCT0gMHgxYTAwLAorCXNjc2lfaW52YWxpZF9jb21tYW5kX29wZXJhdGlvbl9jb2RlCQkJPSAweDIwMDAsCisJc2NzaV9pbnZhbGlkX2ZpZWxkX2luX2NkYgkJCQk9IDB4MjQwMCwKKwlvc2Rfc2VjdXJpdHlfYXVkaXRfdmFsdWVfZnJvemVuCQkJCT0gMHgyNDA0LAorCW9zZF9zZWN1cml0eV93b3JraW5nX2tleV9mcm96ZW4JCQkJPSAweDI0MDUsCisJb3NkX25vbmNlX25vdF91bmlxdWUJCQkJCT0gMHgyNDA2LAorCW9zZF9ub25jZV90aW1lc3RhbXBfb3V0X29mX3JhbmdlCQkJPSAweDI0MDcsCisJc2NzaV9sb2dpY2FsX3VuaXRfbm90X3N1cHBvcnRlZAkJCQk9IDB4MjUwMCwKKwlzY3NpX2ludmFsaWRfZmllbGRfaW5fcGFyYW1ldGVyX2xpc3QJCQk9IDB4MjYwMCwKKwlzY3NpX3BhcmFtZXRlcl9ub3Rfc3VwcG9ydGVkCQkJCT0gMHgyNjAxLAorCXNjc2lfcGFyYW1ldGVyX3ZhbHVlX2ludmFsaWQJCQkJPSAweDI2MDIsCisJc2NzaV9pbnZhbGlkX3JlbGVhc2Vfb2ZfcGVyc2lzdGVudF9yZXNlcnZhdGlvbgkJPSAweDI2MDQsCisJb3NkX2ludmFsaWRfZGF0YW91dF9idWZmZXJfaW50ZWdyaXR5X2NoZWNrX3ZhbHVlCT0gMHgyNjBmLAorCXNjc2lfbm90X3JlYWR5X3RvX3JlYWR5X2NoYW5nZV9tZWRpdW1fbWF5X2hhdmVfY2hhbmdlZAk9IDB4MjgwMCwKKwlzY3NpX3Bvd2VyX29uX3Jlc2V0X29yX2J1c19kZXZpY2VfcmVzZXRfb2NjdXJyZWQJPSAweDI5MDAsCisJc2NzaV9wb3dlcl9vbl9vY2N1cnJlZAkJCQkJPSAweDI5MDEsCisJc2NzaV9zY3NpX2J1c19yZXNldF9vY2N1cnJlZAkJCQk9IDB4MjkwMiwKKwlzY3NpX2J1c19kZXZpY2VfcmVzZXRfZnVuY3Rpb25fb2NjdXJyZWQJCQk9IDB4MjkwMywKKwlzY3NpX2RldmljZV9pbnRlcm5hbF9yZXNldAkJCQk9IDB4MjkwNCwKKwlzY3NpX3RyYW5zY2VpdmVyX21vZGVfY2hhbmdlZF90b19zaW5nbGVfZW5kZWQJCT0gMHgyOTA1LAorCXNjc2lfdHJhbnNjZWl2ZXJfbW9kZV9jaGFuZ2VkX3RvX2x2ZAkJCT0gMHgyOTA2LAorCXNjc2lfaV90X25leHVzX2xvc3Nfb2NjdXJyZWQJCQkJPSAweDI5MDcsCisJc2NzaV9wYXJhbWV0ZXJzX2NoYW5nZWQJCQkJCT0gMHgyYTAwLAorCXNjc2lfbW9kZV9wYXJhbWV0ZXJzX2NoYW5nZWQJCQkJPSAweDJhMDEsCisJc2NzaV9hc3ltbWV0cmljX2FjY2Vzc19zdGF0ZV9jaGFuZ2VkCQkJPSAweDJhMDYsCisJc2NzaV9wcmlvcml0eV9jaGFuZ2VkCQkJCQk9IDB4MmEwOCwKKwlzY3NpX2NvbW1hbmRfc2VxdWVuY2VfZXJyb3IJCQkJPSAweDJjMDAsCisJc2NzaV9wcmV2aW91c19idXN5X3N0YXR1cwkJCQk9IDB4MmMwNywKKwlzY3NpX3ByZXZpb3VzX3Rhc2tfc2V0X2Z1bGxfc3RhdHVzCQkJPSAweDJjMDgsCisJc2NzaV9wcmV2aW91c19yZXNlcnZhdGlvbl9jb25mbGljdF9zdGF0dXMJCT0gMHgyYzA5LAorCW9zZF9wYXJ0aXRpb25fb3JfY29sbGVjdGlvbl9jb250YWluc191c2VyX29iamVjdHMJPSAweDJjMGEsCisJc2NzaV9jb21tYW5kc19jbGVhcmVkX2J5X2Fub3RoZXJfaW5pdGlhdG9yCQk9IDB4MmYwMCwKKwlzY3NpX2NsZWFuaW5nX2ZhaWx1cmUJCQkJCT0gMHgzMDA3LAorCXNjc2lfZW5jbG9zdXJlX2ZhaWx1cmUJCQkJCT0gMHgzNDAwLAorCXNjc2lfZW5jbG9zdXJlX3NlcnZpY2VzX2ZhaWx1cmUJCQkJPSAweDM1MDAsCisJc2NzaV91bnN1cHBvcnRlZF9lbmNsb3N1cmVfZnVuY3Rpb24JCQk9IDB4MzUwMSwKKwlzY3NpX2VuY2xvc3VyZV9zZXJ2aWNlc191bmF2YWlsYWJsZQkJCT0gMHgzNTAyLAorCXNjc2lfZW5jbG9zdXJlX3NlcnZpY2VzX3RyYW5zZmVyX2ZhaWx1cmUJCT0gMHgzNTAzLAorCXNjc2lfZW5jbG9zdXJlX3NlcnZpY2VzX3RyYW5zZmVyX3JlZnVzZWQJCT0gMHgzNTA0LAorCXNjc2lfZW5jbG9zdXJlX3NlcnZpY2VzX2NoZWNrc3VtX2Vycm9yCQkJPSAweDM1MDUsCisJc2NzaV9yb3VuZGVkX3BhcmFtZXRlcgkJCQkJPSAweDM3MDAsCisJb3NkX3JlYWRfcGFzdF9lbmRfb2ZfdXNlcl9vYmplY3QJCQk9IDB4M2IxNywKKwlzY3NpX2xvZ2ljYWxfdW5pdF9oYXNfbm90X3NlbGZfY29uZmlndXJlZF95ZXQJCT0gMHgzZTAwLAorCXNjc2lfbG9naWNhbF91bml0X2ZhaWx1cmUJCQkJPSAweDNlMDEsCisJc2NzaV90aW1lb3V0X29uX2xvZ2ljYWxfdW5pdAkJCQk9IDB4M2UwMiwKKwlzY3NpX2xvZ2ljYWxfdW5pdF9mYWlsZWRfc2VsZnRlc3QJCQk9IDB4M2UwMywKKwlzY3NpX2xvZ2ljYWxfdW5pdF91bmFibGVfdG9fdXBkYXRlX3NlbGZ0ZXN0X2xvZwkJPSAweDNlMDQsCisJc2NzaV90YXJnZXRfb3BlcmF0aW5nX2NvbmRpdGlvbnNfaGF2ZV9jaGFuZ2VkCQk9IDB4M2YwMCwKKwlzY3NpX21pY3JvY29kZV9oYXNfYmVlbl9jaGFuZ2VkCQkJCT0gMHgzZjAxLAorCXNjc2lfaW5xdWlyeV9kYXRhX2hhc19jaGFuZ2VkCQkJCT0gMHgzZjAzLAorCXNjc2lfZWNob19idWZmZXJfb3ZlcndyaXR0ZW4JCQkJPSAweDNmMGYsCisJc2NzaV9kaWFnbm9zdGljX2ZhaWx1cmVfb25fY29tcG9uZW50X25uX2ZpcnN0CQk9IDB4NDA4MCwKKwlzY3NpX2RpYWdub3N0aWNfZmFpbHVyZV9vbl9jb21wb25lbnRfbm5fbGFzdAkJPSAweDQwZmYsCisJc2NzaV9tZXNzYWdlX2Vycm9yCQkJCQk9IDB4NDMwMCwKKwlzY3NpX2ludGVybmFsX3RhcmdldF9mYWlsdXJlCQkJCT0gMHg0NDAwLAorCXNjc2lfc2VsZWN0X29yX3Jlc2VsZWN0X2ZhaWx1cmUJCQkJPSAweDQ1MDAsCisJc2NzaV9zY3NpX3Bhcml0eV9lcnJvcgkJCQkJPSAweDQ3MDAsCisJc2NzaV9kYXRhX3BoYXNlX2NyY19lcnJvcl9kZXRlY3RlZAkJCT0gMHg0NzAxLAorCXNjc2lfc2NzaV9wYXJpdHlfZXJyb3JfZGV0ZWN0ZWRfZHVyaW5nX3N0X2RhdGFfcGhhc2UJPSAweDQ3MDIsCisJc2NzaV9hc3luY2hyb25vdXNfaW5mb3JtYXRpb25fcHJvdGVjdGlvbl9lcnJvcl9kZXRlY3RlZAk9IDB4NDcwNCwKKwlzY3NpX3Byb3RvY29sX3NlcnZpY2VfY3JjX2Vycm9yCQkJCT0gMHg0NzA1LAorCXNjc2lfcGh5X3Rlc3RfZnVuY3Rpb25faW5fcHJvZ3Jlc3MJCQk9IDB4NDcwNiwKKwlzY3NpX2ludmFsaWRfbWVzc2FnZV9lcnJvcgkJCQk9IDB4NDkwMCwKKwlzY3NpX2NvbW1hbmRfcGhhc2VfZXJyb3IJCQkJPSAweDRhMDAsCisJc2NzaV9kYXRhX3BoYXNlX2Vycm9yCQkJCQk9IDB4NGIwMCwKKwlzY3NpX2xvZ2ljYWxfdW5pdF9mYWlsZWRfc2VsZl9jb25maWd1cmF0aW9uCQk9IDB4NGMwMCwKKwlzY3NpX292ZXJsYXBwZWRfY29tbWFuZHNfYXR0ZW1wdGVkCQkJPSAweDRlMDAsCisJb3NkX3F1b3RhX2Vycm9yCQkJCQkJPSAweDU1MDcsCisJc2NzaV9mYWlsdXJlX3ByZWRpY3Rpb25fdGhyZXNob2xkX2V4Y2VlZGVkCQk9IDB4NWQwMCwKKwlzY3NpX2ZhaWx1cmVfcHJlZGljdGlvbl90aHJlc2hvbGRfZXhjZWVkZWRfZmFsc2UJPSAweDVkZmYsCisJc2NzaV92b2x0YWdlX2ZhdWx0CQkJCQk9IDB4NjUwMCwKK307CisKK2VudW0gc2NzaV9kZXNjcmlwdG9yX3R5cGVzIHsKKwlzY3NpX3NlbnNlX2luZm9ybWF0aW9uCQkJPSAweDAsCisJc2NzaV9zZW5zZV9jb21tYW5kX3NwZWNpZmljX2luZm9ybWF0aW9uCT0gMHgxLAorCXNjc2lfc2Vuc2Vfa2V5X3NwZWNpZmljCQkJPSAweDIsCisJc2NzaV9zZW5zZV9maWVsZF9yZXBsYWNlYWJsZV91bml0CT0gMHgzLAorCXNjc2lfc2Vuc2Vfc3RyZWFtX2NvbW1hbmRzCQk9IDB4NCwKKwlzY3NpX3NlbnNlX2Jsb2NrX2NvbW1hbmRzCQk9IDB4NSwKKwlvc2Rfc2Vuc2Vfb2JqZWN0X2lkZW50aWZpY2F0aW9uCQk9IDB4NiwKKwlvc2Rfc2Vuc2VfcmVzcG9uc2VfaW50ZWdyaXR5X2NoZWNrCT0gMHg3LAorCW9zZF9zZW5zZV9hdHRyaWJ1dGVfaWRlbnRpZmljYXRpb24JPSAweDgsCisJc2NzaV9zZW5zZV9hdGFfcmV0dXJuCQkJPSAweDksCisKKwlzY3NpX3NlbnNlX1Jlc2VydmVkX2ZpcnN0CQk9IDB4MEEsCisJc2NzaV9zZW5zZV9SZXNlcnZlZF9sYXN0CQk9IDB4N0YsCisJc2NzaV9zZW5zZV9WZW5kb3Jfc3BlY2lmaWNfZmlyc3QJPSAweDgwLAorCXNjc2lfc2Vuc2VfVmVuZG9yX3NwZWNpZmljX2xhc3QJCT0gMHhGRiwKK307CisKK3N0cnVjdCBzY3NpX3NlbnNlX2Rlc2NyaXB0b3IgeyAvKiBmb3IgcGlja2luZyBpbnRvIGRlc2MgdHlwZSAqLworCXU4CWRlc2NyaXB0b3JfdHlwZTsgLyogb25lIG9mIGVudW0gc2NzaV9kZXNjcmlwdG9yX3R5cGVzICovCisJdTgJYWRkaXRpb25hbF9sZW5ndGg7IC8qIG4gLSAxICovCisJdTgJZGF0YVtdOworfSBfX3BhY2tlZDsKKworLyogT1NEIGRlcGxveXMgb25seSBzY3NpIGRlc2NyaXB0b3JfYmFzZWQgc2Vuc2UgYnVmZmVycyAqLworc3RydWN0IHNjc2lfc2Vuc2VfZGVzY3JpcHRvcl9iYXNlZCB7CisvKjAqLwl1OCAJcmVzcG9uc2VfY29kZTsgLyogMHg3MiBvciAweDczICovCisvKjEqLwl1OCAJc2Vuc2Vfa2V5OyAvKiBvbmUgb2YgZW51bSBzY3NpX3NlbnNlX2tleXMgKDQgbG93ZXIgYml0cykgKi8KKy8qMiovCV9fYmUxNglhZGRpdGlvbmFsX3NlbnNlX2NvZGU7IC8qIGVudW0gb3NkX2FkZGl0aW9uYWxfc2Vuc2VfY29kZXMgKi8KKy8qNCovCXU4CVJlc2VydmVkWzNdOworLyo3Ki8JdTgJYWRkaXRpb25hbF9zZW5zZV9sZW5ndGg7IC8qIG4gLSA3ICovCisvKjgqLwlzdHJ1Y3QJc2NzaV9zZW5zZV9kZXNjcmlwdG9yIHNzZFswXTsgLyogdmFyaWFibGUgbGVuZ3RoLCAxIG9yIG1vcmUgKi8KK30gX19wYWNrZWQ7CisKKy8qIHNvbWUgZGVzY3JpcHRvcnMgZGVwbG95ZWQgYnkgT1NEICovCisKKy8qIFNQQzNyMjMgNC41LjIuMyBDb21tYW5kLXNwZWNpZmljIGluZm9ybWF0aW9uIHNlbnNlIGRhdGEgZGVzY3JpcHRvciAqLworLyogTm90ZTogdGhpcyBpcyB0aGUgc2FtZSBmb3IgZGVzY3JpcHRvcl90eXBlPTAwIGJ1dCB3aXRoIHR5cGU9MDAgdGhlCisgKiAgICAgICAgUmVzZXJ2ZWRbMF0gPT0gMHg4MCAoaWUuIGJpdC03IHNldCkKKyAqLworc3RydWN0IHNjc2lfc2Vuc2VfY29tbWFuZF9zcGVjaWZpY19kYXRhX2Rlc2NyaXB0b3IgeworLyowKi8JdTgJZGVzY3JpcHRvcl90eXBlOyAvKiAoMDBoLzAxaCkgKi8KKy8qMSovCXU4CWFkZGl0aW9uYWxfbGVuZ3RoOyAvKiAoMEFoKSAqLworLyoyKi8JdTgJUmVzZXJ2ZWRbMl07CisvKjQqLwlfX2JlNjQgIGluZm9ybWF0aW9uOworfSBfX3BhY2tlZDsKKy8qMTIqLworCitzdHJ1Y3Qgc2NzaV9zZW5zZV9rZXlfc3BlY2lmaWNfZGF0YV9kZXNjcmlwdG9yIHsKKy8qMCovCXU4CWRlc2NyaXB0b3JfdHlwZTsgLyogKDAyaCkgKi8KKy8qMSovCXU4CWFkZGl0aW9uYWxfbGVuZ3RoOyAvKiAoMDZoKSAqLworLyoyKi8JdTgJUmVzZXJ2ZWRbMl07CisvKiBTS1NWLCBDL0QsIFJlc2VydmVkICgyKSwgQlBWLCBCSVQgUE9JTlRFUiAoMykgKi8KKy8qNCovCXU4CXNrc3ZfY2RfYnB2X2JwOworLyo1Ki8JX19iZTE2CXZhbHVlOyAvKiBmaWVsZC1wb2ludGVyL3Byb2dyZXNzLXZhbHVlL3JldHJ5LWNvdW50Ly4uLiAqLworLyo3Ki8JdTgJUmVzZXJ2ZWQyOworfSBfX3BhY2tlZDsKKy8qOCovCisKKy8qIDQuMTYuMi4xIE9TRCBlcnJvciBpZGVudGlmaWNhdGlvbiBzZW5zZSBkYXRhIGRlc2NyaXB0b3IgLSB0YWJsZSA1MiAqLworLyogTm90ZTogdGhlc2UgYml0cyBhcmUgZGVmaW5lZCBMRSBvcmRlciBmb3IgZWFzeSBkZWZpbml0aW9uLCB0aGlzIHdheSB0aGUgQklUKCkKKyAqIG51bWJlciBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gQmVsb3cgbWVtYmVycyBhdAorICogb3NkX3NlbnNlX2lkZW50aWZpY2F0aW9uX2RhdGFfZGVzY3JpcHRvciBhcmUgdGhlcmVmb3JlIGRlZmluZWQgX19sZTMyLgorICovCitlbnVtIG9zZF9jb21tYW5kX2Z1bmN0aW9uc19iaXRzIHsKKwlPU0RfQ0ZCX0NPTU1BTkQJCSA9IEJJVCg0KSwKKwlPU0RfQ0ZCX0NNRF9DQVBfVkVSSUZJRUQgPSBCSVQoNSksCisJT1NEX0NGQl9WQUxJREFUSU9OCSA9IEJJVCg3KSwKKwlPU0RfQ0ZCX0lNUF9TVF9BVFQJID0gQklUKDEyKSwKKwlPU0RfQ0ZCX1NFVF9BVFQJCSA9IEJJVCgyMCksCisJT1NEX0NGQl9TQV9DQVBfVkVSSUZJRUQJID0gQklUKDIxKSwKKwlPU0RfQ0ZCX0dFVF9BVFQJCSA9IEJJVCgyOCksCisJT1NEX0NGQl9HQV9DQVBfVkVSSUZJRUQJID0gQklUKDI5KSwKK307CisKK3N0cnVjdCBvc2Rfc2Vuc2VfaWRlbnRpZmljYXRpb25fZGF0YV9kZXNjcmlwdG9yIHsKKy8qMCovCXU4CWRlc2NyaXB0b3JfdHlwZTsgLyogKDA2aCkgKi8KKy8qMSovCXU4CWFkZGl0aW9uYWxfbGVuZ3RoOyAvKiAoMUVoKSAqLworLyoyKi8JdTgJUmVzZXJ2ZWRbNl07CisvKjgqLwlfX2xlMzIJbm90X2luaXRpYXRlZF9mdW5jdGlvbnM7IC8qb3NkX2NvbW1hbmRfZnVuY3Rpb25zX2JpdHMqLworLyoxMiovCV9fbGUzMgljb21wbGV0ZWRfZnVuY3Rpb25zOyAvKm9zZF9jb21tYW5kX2Z1bmN0aW9uc19iaXRzKi8KKy8qMTYqLyAJX19iZTY0CXBhcnRpdGlvbl9pZDsKKy8qMjQqLwlfX2JlNjQJb2JqZWN0X2lkOworfSBfX3BhY2tlZDsKKy8qMzIqLworCitzdHJ1Y3Qgb3NkX3NlbnNlX3Jlc3BvbnNlX2ludGVncml0eV9jaGVja19kZXNjcmlwdG9yIHsKKy8qMCovCXU4CWRlc2NyaXB0b3JfdHlwZTsgLyogKDA3aCkgKi8KKy8qMSovCXU4CWFkZGl0aW9uYWxfbGVuZ3RoOyAvKiAoMjBoKSAqLworLyoyKi8JdTgJaW50ZWdyaXR5X2NoZWNrX3ZhbHVlWzMyXTsgLypGSVhNRTogT1NEdjJfQ1JZUFRPX0tFWUlEX1NJWkUqLworfSBfX3BhY2tlZDsKKy8qMzQqLworCitzdHJ1Y3Qgb3NkX3NlbnNlX2F0dHJpYnV0ZXNfZGF0YV9kZXNjcmlwdG9yIHsKKy8qMCovCXU4CWRlc2NyaXB0b3JfdHlwZTsgLyogKDA4aCkgKi8KKy8qMSovCXU4CWFkZGl0aW9uYWxfbGVuZ3RoOyAvKiAobi0yKSAqLworLyoyKi8JdTgJUmVzZXJ2ZWRbNl07CisJc3RydWN0IG9zZF9zZW5zZV9hdHRyIHsKKy8qOCovCQlfX2JlMzIJYXR0cl9wYWdlOworLyoxMiovCQlfX2JlMzIJYXR0cl9pZDsKKy8qMTYqLwl9IHNlbnNlX2F0dHJzWzBdOyAvKiAxIG9yIG1vcmUgKi8KK30gX19wYWNrZWQ7CisvKnZhcmlhYmxlKi8KKworLyogRGlnIGludG8gc2NzaV9za19pbGxlZ2FsX3JlcXVlc3Qvc2NzaV9pbnZhbGlkX2ZpZWxkX2luX2NkYiBlcnJvcnMgKi8KKworLypGSVhNRTogU3VwcG9ydCBhbHNvIGZpZWxkIGluIENBUFMqLworI2RlZmluZSBPU0RfQ0RCX09GRlNFVChGKSBvZmZzZXRvZihzdHJ1Y3Qgb3NkX2NkYl9oZWFkLCBGKQorCitlbnVtIG9zZHYyX2NkYl9maWVsZF9vZmZzZXQgeworCU9TRHYxX0NGT19TVEFSVElOR19CWVRFCT0gT1NEX0NEQl9PRkZTRVQodjEuc3RhcnRfYWRkcmVzcyksCisJT1NEX0NGT19TVEFSVElOR19CWVRFCT0gT1NEX0NEQl9PRkZTRVQodjIuc3RhcnRfYWRkcmVzcyksCisJT1NEX0NGT19QQVJUSVRJT05fSUQJPSBPU0RfQ0RCX09GRlNFVChwYXJ0aXRpb24pLAorCU9TRF9DRk9fT0JKRUNUX0lECT0gT1NEX0NEQl9PRkZTRVQob2JqZWN0KSwKK307CisKKyNlbmRpZiAvKiBuZGVmIF9fT1NEX1NFTlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL29zZF90eXBlcy5oIGIvaW5jbHVkZS9zY3NpL29zZF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWU4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvb3NkX3R5cGVzLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIG9zZF90eXBlcy5oIC0gVHlwZXMgYW5kIGNvbnN0YW50cyB3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczoKKyAqICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqICAgQmVubnkgSGFsZXZ5IDxiaGFsZXZ5QHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICoKKyAqIENvbnRhaW5zIHR5cGVzIGFuZCBjb25zdGFudHMgdGhhdCBhcmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgYW5kIGFyZQorICogdXNlZCBieSBtb3JlIHRoYW4gb25lIHBhcnQgb2YgdGhlIG9zZCBsaWJyYXJ5LgorICogICAgIChFZyBpbml0aWF0b3IvdGFyZ2V0L3NlY3VyaXR5X21hbmFnZXIvLi4uKQorICovCisjaWZuZGVmIF9fT1NEX1RZUEVTX0hfXworI2RlZmluZSBfX09TRF9UWVBFU19IX18KKworc3RydWN0IG9zZF9zeXN0ZW1pZCB7CisJdTggZGF0YVtPU0RfU1lTVEVNSURfTEVOXTsKK307CisKK3R5cGVkZWYgdTY0IF9fYml0d2lzZSBvc2RfaWQ7CisKK3N0cnVjdCBvc2Rfb2JqX2lkIHsKKwlvc2RfaWQgcGFydGl0aW9uOworCW9zZF9pZCBpZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX193ZWFrIG9zZF9vYmpfaWQgb3NkX3Jvb3Rfb2JqZWN0ID0gezAsIDB9OworCitzdHJ1Y3Qgb3NkX2F0dHIgeworCXUzMiBhdHRyX3BhZ2U7CisJdTMyIGF0dHJfaWQ7CisJdTE2IGxlbjsJCS8qIGJ5dGUgY291bnQgb2Ygb3BlcmFuZCAqLworCXZvaWQgKnZhbF9wdHI7CQkvKiBpbiBuZXR3b3JrIG9yZGVyICovCit9OworCisjZW5kaWYgLyogbmRlZiBfX09TRF9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IGExMDkxNjUuLjA4NDQ3OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtOSw3ICs5LDggQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKK3N0cnVjdCBzY3NpX2NtbmQ7CiAKIC8qCiAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgU0cgc2VnbWVudHMgdGhhdCB3ZSB3aWxsIHB1dCBpbnNpZGUgYQpAQCAtMjYzLDYgKzI2NCw3IEBACiAjZGVmaW5lIFRZUEVfUkFJRCAgICAgICAgICAgMHgwYwogI2RlZmluZSBUWVBFX0VOQ0xPU1VSRSAgICAgIDB4MGQgICAgLyogRW5jbG9zdXJlIFNlcnZpY2VzIERldmljZSAqLwogI2RlZmluZSBUWVBFX1JCQwkgICAgMHgwZQorI2RlZmluZSBUWVBFX09TRCAgICAgICAgICAgIDB4MTEKICNkZWZpbmUgVFlQRV9OT19MVU4gICAgICAgICAweDdmCiAKIC8qIFNDU0kgcHJvdG9jb2xzOyB0aGVzZSBhcmUgdGFrZW4gZnJvbSBTUEMtMyBzZWN0aW9uIDcuNSAqLwpAQCAtNDAyLDE2ICs0MDQsNiBAQAogI2RlZmluZSBEUklWRVJfSEFSRCAgICAgICAgIDB4MDcKICNkZWZpbmUgRFJJVkVSX1NFTlNFCSAgICAweDA4CiAKLSNkZWZpbmUgU1VHR0VTVF9SRVRSWSAgICAgICAweDEwCi0jZGVmaW5lIFNVR0dFU1RfQUJPUlQgICAgICAgMHgyMAotI2RlZmluZSBTVUdHRVNUX1JFTUFQICAgICAgIDB4MzAKLSNkZWZpbmUgU1VHR0VTVF9ESUUgICAgICAgICAweDQwCi0jZGVmaW5lIFNVR0dFU1RfU0VOU0UgICAgICAgMHg4MAotI2RlZmluZSBTVUdHRVNUX0lTX09LICAgICAgIDB4ZmYKLQotI2RlZmluZSBEUklWRVJfTUFTSyAgICAgICAgIDB4MGYKLSNkZWZpbmUgU1VHR0VTVF9NQVNLICAgICAgICAweGYwCi0KIC8qCiAgKiBJbnRlcm5hbCByZXR1cm4gdmFsdWVzLgogICovCkBAIC00NDcsMjMgKzQzOSw2IEBACiAjZGVmaW5lIG1zZ19ieXRlKHJlc3VsdCkgICAgKCgocmVzdWx0KSA+PiA4KSAmIDB4ZmYpCiAjZGVmaW5lIGhvc3RfYnl0ZShyZXN1bHQpICAgKCgocmVzdWx0KSA+PiAxNikgJiAweGZmKQogI2RlZmluZSBkcml2ZXJfYnl0ZShyZXN1bHQpICgoKHJlc3VsdCkgPj4gMjQpICYgMHhmZikKLSNkZWZpbmUgc3VnZ2VzdGlvbihyZXN1bHQpICAoZHJpdmVyX2J5dGUocmVzdWx0KSAmIFNVR0dFU1RfTUFTSykKLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9tc2dfYnl0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGNoYXIgc3RhdHVzKQotewotCWNtZC0+cmVzdWx0IHw9IHN0YXR1cyA8PCA4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hvc3RfYnl0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGNoYXIgc3RhdHVzKQotewotCWNtZC0+cmVzdWx0IHw9IHN0YXR1cyA8PCAxNjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9kcml2ZXJfYnl0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGNoYXIgc3RhdHVzKQotewotCWNtZC0+cmVzdWx0IHw9IHN0YXR1cyA8PCAyNDsKLX0KLQogCiAjZGVmaW5lIHNlbnNlX2NsYXNzKHNlbnNlKSAgKCgoc2Vuc2UpID4+IDQpICYgMHg3KQogI2RlZmluZSBzZW5zZV9lcnJvcihzZW5zZSkgICgoc2Vuc2UpICYgMHhmKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCmluZGV4IDg1NWJmOTUuLjQzYjUwZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTI5MSw0ICsyOTEsMTkgQEAKICNkZWZpbmUgc2NzaV9mb3JfZWFjaF9wcm90X3NnKGNtZCwgc2csIG5zZWcsIF9faSkJCVwKIAlmb3JfZWFjaF9zZyhzY3NpX3Byb3Rfc2dsaXN0KGNtZCksIHNnLCBuc2VnLCBfX2kpCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXNnX2J5dGUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyIHN0YXR1cykKK3sKKwljbWQtPnJlc3VsdCB8PSBzdGF0dXMgPDwgODsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9ob3N0X2J5dGUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyIHN0YXR1cykKK3sKKwljbWQtPnJlc3VsdCB8PSBzdGF0dXMgPDwgMTY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZHJpdmVyX2J5dGUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyIHN0YXR1cykKK3sKKwljbWQtPnJlc3VsdCB8PSBzdGF0dXMgPDwgMjQ7Cit9CisKICNlbmRpZiAvKiBfU0NTSV9TQ1NJX0NNTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAwMWE0YzU4Li4zZjU2NmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMzQwLDYgKzM0MCw3IEBACiAJCQkgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwogZXh0ZXJuIGludCBzY3NpX3Rlc3RfdW5pdF9yZWFkeShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0aW1lb3V0LAogCQkJCWludCByZXRyaWVzLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICpzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgdTggcGFnZSk7CiBleHRlcm4gaW50IHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCiAJCQkJIGVudW0gc2NzaV9kZXZpY2Vfc3RhdGUgc3RhdGUpOwogZXh0ZXJuIHN0cnVjdCBzY3NpX2V2ZW50ICpzZGV2X2V2dF9hbGxvYyhlbnVtIHNjc2lfZGV2aWNlX2V2ZW50IGV2dF90eXBlLApAQCAtMzcwLDEyICszNzEsNiBAQAogCQkJICAgIGludCBkYXRhX2RpcmVjdGlvbiwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBidWZmbGVuLAogCQkJICAgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsCiAJCQkgICAgaW50ICpyZXNpZCk7Ci1leHRlcm4gaW50IHNjc2lfZXhlY3V0ZV9hc3luYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbWQsIGludCBjbWRfbGVuLCBpbnQgZGF0YV9kaXJlY3Rpb24sCi0JCQkgICAgICB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sIGludCB1c2Vfc2csCi0JCQkgICAgICBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsIHZvaWQgKnByaXZkYXRhLAotCQkJICAgICAgdm9pZCAoKmRvbmUpKHZvaWQgKiwgY2hhciAqLCBpbnQsIGludCksCi0JCQkgICAgICBnZnBfdCBnZnApOwogCiBzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2NzaV9kZXZpY2VfcmVwcm9iZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CkBAIC00MDAsNyArMzk1LDggQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgc2NzaV9kZXZpY2Vfb25saW5lKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlyZXR1cm4gc2Rldi0+c2Rldl9zdGF0ZSAhPSBTREVWX09GRkxJTkU7CisJcmV0dXJuIChzZGV2LT5zZGV2X3N0YXRlICE9IFNERVZfT0ZGTElORSAmJgorCQlzZGV2LT5zZGV2X3N0YXRlICE9IFNERVZfREVMKTsKIH0KIHN0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGV2aWNlX2Jsb2NrZWQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAppbmRleCBiNTBhYWJlLi40NTc1ODhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaApAQCAtODgsNyArODgsNyBAQAogCXVpbnQ2NF90IGhvc3RfcGFyYW1fbWFzazsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKigqY3JlYXRlX3Nlc3Npb24pIChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAogCQkJCQl1aW50MTZfdCBjbWRzX21heCwgdWludDE2X3QgcWRlcHRoLAotCQkJCQl1aW50MzJfdCBzbiwgdWludDMyX3QgKmhuKTsKKwkJCQkJdWludDMyX3Qgc24pOwogCXZvaWQgKCpkZXN0cm95X3Nlc3Npb24pIChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pOwogCXN0cnVjdCBpc2NzaV9jbHNfY29ubiAqKCpjcmVhdGVfY29ubikgKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2VzcywKIAkJCQl1aW50MzJfdCBjaWQpOwpAQCAtMjA2LDggKzIwNiw2IEBACiBzdHJ1Y3QgaXNjc2lfY2xzX2hvc3QgewogCWF0b21pY190IG5yX3NjYW5zOwogCXN0cnVjdCBtdXRleCBtdXRleDsKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2Nhbl93b3JrcTsKLQljaGFyIHNjYW5fd29ya3FfbmFtZVsyMF07CiB9OwogCiBleHRlcm4gdm9pZCBpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaCBiL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCmluZGV4IGIzYWE2MmUuLmQwMTA4NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCisrKyBiL2luY2x1ZGUvc291bmQvYWQxODE2YS5oCkBAIC0xNjksNSArMTY5LDcgQEAKIAogZXh0ZXJuIGludCBzbmRfYWQxODE2YV9wY20oc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwogZXh0ZXJuIGludCBzbmRfYWQxODE2YV9taXhlcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXApOworZXh0ZXJuIGludCBzbmRfYWQxODE2YV90aW1lcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsCisJCQkgICAgIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpOwogCiAjZW5kaWYJLyogX19TT1VORF9BRDE4MTZBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDFjMDJlZDEuLjZhZGQ4MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaApAQCAtMjMsOSArMjMsMTAgQEAKICNpZm5kZWYgX19TT1VORF9BU09VTkRfSAogI2RlZmluZSBfX1NPVU5EX0FTT1VORF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC0xMjYsMTIgKzEyNywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CS8qIFc6IGRyaXZlci1zcGVjaWZpYyBkYXRhICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9IV0RFUF9JT0NUTF9QVkVSU0lPTiA9IF9JT1IgKCdIJywgMHgwMCwgaW50KSwKLQlTTkRSVl9IV0RFUF9JT0NUTF9JTkZPID0gX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pLAotCVNORFJWX0hXREVQX0lPQ1RMX0RTUF9TVEFUVVMgPSBfSU9SKCdIJywgMHgwMiwgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzKSwKLQlTTkRSVl9IV0RFUF9JT0NUTF9EU1BfTE9BRCAgID0gX0lPVygnSCcsIDB4MDMsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlKQotfTsKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfUFZFUlNJT04JX0lPUiAoJ0gnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0lORk8JCV9JT1IgKCdIJywgMHgwMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9EU1BfU1RBVFVTCV9JT1IoJ0gnLCAweDAyLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMpCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0RTUF9MT0FECV9JT1coJ0gnLCAweDAzLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTM0Miw3ICszNDEsNyBAQAogI2RlZmluZSBTTkRSVl9NQVNLX01BWAkyNTYKIAogc3RydWN0IHNuZF9tYXNrIHsKLQl1X2ludDMyX3QgYml0c1soU05EUlZfTUFTS19NQVgrMzEpLzMyXTsKKwlfX3UzMiBiaXRzWyhTTkRSVl9NQVNLX01BWCszMSkvMzJdOwogfTsKIAogc3RydWN0IHNuZF9wY21faHdfcGFyYW1zIHsKQEAgLTM4NSw3ICszODQsNyBAQAogCiBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8gewogCXVuc2lnbmVkIGludCBjaGFubmVsOwotCW9mZl90IG9mZnNldDsJCQkvKiBtbWFwIG9mZnNldCAqLworCV9fa2VybmVsX29mZl90IG9mZnNldDsJCS8qIG1tYXAgb2Zmc2V0ICovCiAJdW5zaWduZWQgaW50IGZpcnN0OwkJLyogb2Zmc2V0IHRvIGZpcnN0IHNhbXBsZSBpbiBiaXRzICovCiAJdW5zaWduZWQgaW50IHN0ZXA7CQkvKiBzYW1wbGVzIGRpc3RhbmNlIGluIGJpdHMgKi8KIH07CkBAIC00NTEsNDAgKzQ1MCwzNSBAQAogCVNORFJWX1BDTV9UU1RBTVBfVFlQRV9MQVNUID0gU05EUlZfUENNX1RTVEFNUF9UWVBFX01PTk9UT05JQywKIH07CiAKLWVudW0gewotCVNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ0EnLCAweDAwLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9JTkZPID0gX0lPUignQScsIDB4MDEsIHN0cnVjdCBzbmRfcGNtX2luZm8pLAotCVNORFJWX1BDTV9JT0NUTF9UU1RBTVAgPSBfSU9XKCdBJywgMHgwMiwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfVFRTVEFNUCA9IF9JT1coJ0EnLCAweDAzLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9IV19SRUZJTkUgPSBfSU9XUignQScsIDB4MTAsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyksCi0JU05EUlZfUENNX0lPQ1RMX0hXX1BBUkFNUyA9IF9JT1dSKCdBJywgMHgxMSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKSwKLQlTTkRSVl9QQ01fSU9DVExfSFdfRlJFRSA9IF9JTygnQScsIDB4MTIpLAotCVNORFJWX1BDTV9JT0NUTF9TV19QQVJBTVMgPSBfSU9XUignQScsIDB4MTMsIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcyksCi0JU05EUlZfUENNX0lPQ1RMX1NUQVRVUyA9IF9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpLAotCVNORFJWX1BDTV9JT0NUTF9ERUxBWSA9IF9JT1IoJ0EnLCAweDIxLCBzbmRfcGNtX3NmcmFtZXNfdCksCi0JU05EUlZfUENNX0lPQ1RMX0hXU1lOQyA9IF9JTygnQScsIDB4MjIpLAotCVNORFJWX1BDTV9JT0NUTF9TWU5DX1BUUiA9IF9JT1dSKCdBJywgMHgyMywgc3RydWN0IHNuZF9wY21fc3luY19wdHIpLAotCVNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8gPSBfSU9SKCdBJywgMHgzMiwgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvKSwKLQlTTkRSVl9QQ01fSU9DVExfUFJFUEFSRSA9IF9JTygnQScsIDB4NDApLAotCVNORFJWX1BDTV9JT0NUTF9SRVNFVCA9IF9JTygnQScsIDB4NDEpLAotCVNORFJWX1BDTV9JT0NUTF9TVEFSVCA9IF9JTygnQScsIDB4NDIpLAotCVNORFJWX1BDTV9JT0NUTF9EUk9QID0gX0lPKCdBJywgMHg0MyksCi0JU05EUlZfUENNX0lPQ1RMX0RSQUlOID0gX0lPKCdBJywgMHg0NCksCi0JU05EUlZfUENNX0lPQ1RMX1BBVVNFID0gX0lPVygnQScsIDB4NDUsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX1JFV0lORCA9IF9JT1coJ0EnLCAweDQ2LCBzbmRfcGNtX3VmcmFtZXNfdCksCi0JU05EUlZfUENNX0lPQ1RMX1JFU1VNRSA9IF9JTygnQScsIDB4NDcpLAotCVNORFJWX1BDTV9JT0NUTF9YUlVOID0gX0lPKCdBJywgMHg0OCksCi0JU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQgPSBfSU9XKCdBJywgMHg0OSwgc25kX3BjbV91ZnJhbWVzX3QpLAotCVNORFJWX1BDTV9JT0NUTF9XUklURUlfRlJBTUVTID0gX0lPVygnQScsIDB4NTAsIHN0cnVjdCBzbmRfeGZlcmkpLAotCVNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMgPSBfSU9SKCdBJywgMHg1MSwgc3RydWN0IHNuZF94ZmVyaSksCi0JU05EUlZfUENNX0lPQ1RMX1dSSVRFTl9GUkFNRVMgPSBfSU9XKCdBJywgMHg1Miwgc3RydWN0IHNuZF94ZmVybiksCi0JU05EUlZfUENNX0lPQ1RMX1JFQUROX0ZSQU1FUyA9IF9JT1IoJ0EnLCAweDUzLCBzdHJ1Y3Qgc25kX3hmZXJuKSwKLQlTTkRSVl9QQ01fSU9DVExfTElOSyA9IF9JT1coJ0EnLCAweDYwLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9VTkxJTksgPSBfSU8oJ0EnLCAweDYxKSwKLX07Ci0KLS8qIFRyaWNrIHRvIG1ha2UgYWxzYS1saWIvYWNpbmNsdWRlLm00IGhhcHB5ICovCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQgU05EUlZfUENNX0lPQ1RMX1JFV0lORAorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFZFUlNJT04JX0lPUignQScsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0lORk8JCV9JT1IoJ0EnLCAweDAxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFNUQU1QCQlfSU9XKCdBJywgMHgwMiwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFRTVEFNUAkJX0lPVygnQScsIDB4MDMsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORQlfSU9XUignQScsIDB4MTAsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1BBUkFNUwlfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX0ZSRUUJCV9JTygnQScsIDB4MTIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TV19QQVJBTVMJX0lPV1IoJ0EnLCAweDEzLCBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TVEFUVVMJCV9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9ERUxBWQkJX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdTWU5DCQlfSU8oJ0EnLCAweDIyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1lOQ19QVFIJX0lPV1IoJ0EnLCAweDIzLCBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0cikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0NIQU5ORUxfSU5GTwlfSU9SKCdBJywgMHgzMiwgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFJFUEFSRQkJX0lPKCdBJywgMHg0MCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU0VUCQlfSU8oJ0EnLCAweDQxKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBUlQJCV9JTygnQScsIDB4NDIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUk9QCQlfSU8oJ0EnLCAweDQzKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRFJBSU4JCV9JTygnQScsIDB4NDQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QQVVTRQkJX0lPVygnQScsIDB4NDUsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFV0lORAkJX0lPVygnQScsIDB4NDYsIHNuZF9wY21fdWZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVTVU1FCQlfSU8oJ0EnLCAweDQ3KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfWFJVTgkJX0lPKCdBJywgMHg0OCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQJCV9JT1coJ0EnLCAweDQ5LCBzbmRfcGNtX3VmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1dSSVRFSV9GUkFNRVMJX0lPVygnQScsIDB4NTAsIHN0cnVjdCBzbmRfeGZlcmkpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMJX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTCV9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTCV9JT1IoJ0EnLCAweDUzLCBzdHJ1Y3Qgc25kX3hmZXJuKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfTElOSwkJX0lPVygnQScsIDB4NjAsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1VOTElOSwkJX0lPKCdBJywgMHg2MSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTUzOCwxNCArNTMyLDEyIEBACiAJdW5zaWduZWQgY2hhciByZXNlcnZlZFsxNl07CS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVycsIDB4MDAsIGludCksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9JTkZPID0gX0lPUignVycsIDB4MDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX1BBUkFNUyA9IF9JT1dSKCdXJywgMHgxMCwgc3RydWN0IHNuZF9yYXdtaWRpX3BhcmFtcyksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9TVEFUVVMgPSBfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpLAotCVNORFJWX1JBV01JRElfSU9DVExfRFJPUCA9IF9JT1coJ1cnLCAweDMwLCBpbnQpLAotCVNORFJWX1JBV01JRElfSU9DVExfRFJBSU4gPSBfSU9XKCdXJywgMHgzMSwgaW50KSwKLX07CisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfUFZFUlNJT04JX0lPUignVycsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9JTkZPCV9JT1IoJ1cnLCAweDAxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9QQVJBTVMJX0lPV1IoJ1cnLCAweDEwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUwlfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJPUAlfSU9XKCdXJywgMHgzMCwgaW50KQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0RSQUlOCV9JT1coJ1cnLCAweDMxLCBpbnQpCiAKIC8qCiAgKiAgVGltZXIgc2VjdGlvbiAtIC9kZXYvc25kL3RpbWVyCkBAIC02NTQsMjMgKzY0NiwyMSBAQAogCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwkvKiByZXNlcnZlZCAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfVElNRVJfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdUJywgMHgwMCwgaW50KSwKLQlTTkRSVl9USU1FUl9JT0NUTF9ORVhUX0RFVklDRSA9IF9JT1dSKCdUJywgMHgwMSwgc3RydWN0IHNuZF90aW1lcl9pZCksCi0JU05EUlZfVElNRVJfSU9DVExfVFJFQUQgPSBfSU9XKCdUJywgMHgwMiwgaW50KSwKLQlTTkRSVl9USU1FUl9JT0NUTF9HSU5GTyA9IF9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZF90aW1lcl9naW5mbyksCi0JU05EUlZfVElNRVJfSU9DVExfR1BBUkFNUyA9IF9JT1coJ1QnLCAweDA0LCBzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0dTVEFUVVMgPSBfSU9XUignVCcsIDB4MDUsIHN0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cyksCi0JU05EUlZfVElNRVJfSU9DVExfU0VMRUNUID0gX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0KSwKLQlTTkRSVl9USU1FUl9JT0NUTF9JTkZPID0gX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbyksCi0JU05EUlZfVElNRVJfSU9DVExfUEFSQU1TID0gX0lPVygnVCcsIDB4MTIsIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9TVEFUVVMgPSBfSU9SKCdUJywgMHgxNCwgc3RydWN0IHNuZF90aW1lcl9zdGF0dXMpLAotCS8qIFRoZSBmb2xsb3dpbmcgZm91ciBpb2N0bHMgYXJlIGNoYW5nZWQgc2luY2UgMS4wLjkgZHVlIHRvIGNvbmZsaWN0aW9uICovCi0JU05EUlZfVElNRVJfSU9DVExfU1RBUlQgPSBfSU8oJ1QnLCAweGEwKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9TVE9QID0gX0lPKCdUJywgMHhhMSksCi0JU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUgPSBfSU8oJ1QnLCAweGEyKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9QQVVTRSA9IF9JTygnVCcsIDB4YTMpLAotfTsKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUFZFUlNJT04JX0lPUignVCcsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfTkVYVF9ERVZJQ0UJX0lPV1IoJ1QnLCAweDAxLCBzdHJ1Y3Qgc25kX3RpbWVyX2lkKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9UUkVBRAkJX0lPVygnVCcsIDB4MDIsIGludCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR0lORk8JCV9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZF90aW1lcl9naW5mbykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR1BBUkFNUwlfSU9XKCdUJywgMHgwNCwgc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTCV9JT1dSKCdUJywgMHgwNSwgc3RydWN0IHNuZF90aW1lcl9nc3RhdHVzKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TRUxFQ1QJX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0KQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9JTkZPCQlfSU9SKCdUJywgMHgxMSwgc3RydWN0IHNuZF90aW1lcl9pbmZvKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVJBTVMJX0lPVygnVCcsIDB4MTIsIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVEFUVVMJX0lPUignVCcsIDB4MTQsIHN0cnVjdCBzbmRfdGltZXJfc3RhdHVzKQorLyogVGhlIGZvbGxvd2luZyBmb3VyIGlvY3RscyBhcmUgY2hhbmdlZCBzaW5jZSAxLjAuOSBkdWUgdG8gY29uZmxpY3Rpb24gKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBUlQJCV9JTygnVCcsIDB4YTApCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUT1AJCV9JTygnVCcsIDB4YTEpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0NPTlRJTlVFCV9JTygnVCcsIDB4YTIpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BBVVNFCQlfSU8oJ1QnLCAweGEzKQogCiBzdHJ1Y3Qgc25kX3RpbWVyX3JlYWQgewogCXVuc2lnbmVkIGludCByZXNvbHV0aW9uOwpAQCAtNzg5LDcgKzc3OSw3IEBACiAJc25kX2N0bF9lbGVtX3R5cGVfdCB0eXBlOwkvKiBSOiB2YWx1ZSB0eXBlIC0gU05EUlZfQ1RMX0VMRU1fVFlQRV8qICovCiAJdW5zaWduZWQgaW50IGFjY2VzczsJCS8qIFI6IHZhbHVlIGFjY2VzcyAoYml0bWFzaykgLSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfKiAqLwogCXVuc2lnbmVkIGludCBjb3VudDsJCS8qIGNvdW50IG9mIHZhbHVlcyAqLwotCXBpZF90IG93bmVyOwkJCS8qIG93bmVyJ3MgUElEIG9mIHRoaXMgY29udHJvbCAqLworCV9fa2VybmVsX3BpZF90IG93bmVyOwkJLyogb3duZXIncyBQSUQgb2YgdGhpcyBjb250cm9sICovCiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJbG9uZyBtaW47CQkvKiBSOiBtaW5pbXVtIHZhbHVlICovCkBAIC04NDcsMzMgKzgzNywzMSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgdGx2WzBdOwkvKiBmaXJzdCBUTFYgKi8KIH07CiAKLWVudW0gewotCVNORFJWX0NUTF9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1UnLCAweDAwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9DQVJEX0lORk8gPSBfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9MSVNUID0gX0lPV1IoJ1UnLCAweDEwLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2xpc3QpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0lORk8gPSBfSU9XUignVScsIDB4MTEsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVBRCA9IF9JT1dSKCdVJywgMHgxMiwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fV1JJVEUgPSBfSU9XUignVScsIDB4MTMsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0xPQ0sgPSBfSU9XKCdVJywgMHgxNCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fVU5MT0NLID0gX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpLAotCVNORFJWX0NUTF9JT0NUTF9TVUJTQ1JJQkVfRVZFTlRTID0gX0lPV1IoJ1UnLCAweDE2LCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0FERCA9IF9JT1dSKCdVJywgMHgxNywgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9SRVBMQUNFID0gX0lPV1IoJ1UnLCAweDE4LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFTU9WRSA9IF9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCksCi0JU05EUlZfQ1RMX0lPQ1RMX1RMVl9SRUFEID0gX0lPV1IoJ1UnLCAweDFhLCBzdHJ1Y3Qgc25kX2N0bF90bHYpLAotCVNORFJWX0NUTF9JT0NUTF9UTFZfV1JJVEUgPSBfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdiksCi0JU05EUlZfQ1RMX0lPQ1RMX1RMVl9DT01NQU5EID0gX0lPV1IoJ1UnLCAweDFjLCBzdHJ1Y3Qgc25kX2N0bF90bHYpLAotCVNORFJWX0NUTF9JT0NUTF9IV0RFUF9ORVhUX0RFVklDRSA9IF9JT1dSKCdVJywgMHgyMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfSFdERVBfSU5GTyA9IF9JT1IoJ1UnLCAweDIxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9QQ01fTkVYVF9ERVZJQ0UgPSBfSU9SKCdVJywgMHgzMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUENNX0lORk8gPSBfSU9XUignVScsIDB4MzEsIHN0cnVjdCBzbmRfcGNtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9QQ01fUFJFRkVSX1NVQkRFVklDRSA9IF9JT1coJ1UnLCAweDMyLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9SQVdNSURJX05FWFRfREVWSUNFID0gX0lPV1IoJ1UnLCAweDQwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9SQVdNSURJX0lORk8gPSBfSU9XUignVScsIDB4NDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfUkFXTUlESV9QUkVGRVJfU1VCREVWSUNFID0gX0lPVygnVScsIDB4NDIsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1BPV0VSID0gX0lPV1IoJ1UnLCAweGQwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9QT1dFUl9TVEFURSA9IF9JT1IoJ1UnLCAweGQxLCBpbnQpLAotfTsKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1UnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9DQVJEX0lORk8JX0lPUignVScsIDB4MDEsIHN0cnVjdCBzbmRfY3RsX2NhcmRfaW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTElTVAlfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fSU5GTwlfSU9XUignVScsIDB4MTEsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVBRAlfSU9XUignVScsIDB4MTIsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1dSSVRFCV9JT1dSKCdVJywgMHgxMywgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTE9DSwlfSU9XKCdVJywgMHgxNCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fVU5MT0NLCV9JT1coJ1UnLCAweDE1LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfU1VCU0NSSUJFX0VWRU5UUyBfSU9XUignVScsIDB4MTYsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQURECV9JT1dSKCdVJywgMHgxNywgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRVBMQUNFCV9JT1dSKCdVJywgMHgxOCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRU1PVkUJX0lPV1IoJ1UnLCAweDE5LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX1JFQUQJX0lPV1IoJ1UnLCAweDFhLCBzdHJ1Y3Qgc25kX2N0bF90bHYpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfV1JJVEUJX0lPV1IoJ1UnLCAweDFiLCBzdHJ1Y3Qgc25kX2N0bF90bHYpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfQ09NTUFORAlfSU9XUignVScsIDB4MWMsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHgyMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfSU5GTwlfSU9SKCdVJywgMHgyMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX05FWFRfREVWSUNFCV9JT1IoJ1UnLCAweDMwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fSU5GTwlfSU9XUignVScsIDB4MzEsIHN0cnVjdCBzbmRfcGNtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fUFJFRkVSX1NVQkRFVklDRSBfSU9XKCdVJywgMHgzMiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9ORVhUX0RFVklDRSBfSU9XUignVScsIDB4NDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTwlfSU9XUignVScsIDB4NDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDQyLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QT1dFUgkJX0lPV1IoJ1UnLCAweGQwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QT1dFUl9TVEFURQlfSU9SKCdVJywgMHhkMSwgaW50KQogCiAvKgogICogIFJlYWQgaW50ZXJmYWNlLgpAQCAtOTE5LDE4ICs5MDcsNCBAQAogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfUENNX1NUUkVBTQkJIlBDTSBTdHJlYW0iCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OChleHBsLGRpcmVjdGlvbix3aGF0KQkiSUVDOTU4ICIgZXhwbCBTTkRSVl9DVExfTkFNRV8jI2RpcmVjdGlvbiBTTkRSVl9DVExfTkFNRV9JRUM5NThfIyN3aGF0CiAKLS8qCi0gKgotICovCi0KLXN0cnVjdCBzbmRfeGZlcnYgewotCWNvbnN0IHN0cnVjdCBpb3ZlYyAqdmVjdG9yOwotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci19OwotCi1lbnVtIHsKLQlTTkRSVl9JT0NUTF9SRUFEViA9IF9JT1coJ0snLCAweDAwLCBzdHJ1Y3Qgc25kX3hmZXJ2KSwKLQlTTkRSVl9JT0NUTF9XUklURVYgPSBfSU9XKCdLJywgMHgwMSwgc3RydWN0IHNuZF94ZmVydiksCi19OwotCiAjZW5kaWYgLyogX19TT1VORF9BU09VTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYmRhYy5oIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYmRhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmY2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFiZGFjLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FCREFDX0gKKyNkZWZpbmUgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FCREFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworLyoqCisgKiBzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgLSBib2FyZCBzcGVjaWZpYyBBQkRBQyBjb25maWd1cmF0aW9uCisgKiBAZHdzOiBETUEgc2xhdmUgaW50ZXJmYWNlIHRvIHVzZSBmb3Igc291bmQgcGxheWJhY2suCisgKi8KK3N0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSB7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQlkd3M7Cit9OworCisjZW5kaWYgLyogX19JTkNMVURFX1NPVU5EX0FUTUVMX0FCREFDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXRtZWwtYWM5N2MuaCBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWM5N2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFhYmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYzk3Yy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQzk3Q19ICisjZGVmaW5lIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQzk3Q19ICisKKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisKKyNkZWZpbmUgQUM5N0NfQ0FQVFVSRQkweDAxCisjZGVmaW5lIEFDOTdDX1BMQVlCQUNLCTB4MDIKKyNkZWZpbmUgQUM5N0NfQk9USAkoQUM5N0NfQ0FQVFVSRSB8IEFDOTdDX1BMQVlCQUNLKQorCisvKioKKyAqIHN0cnVjdCBhdG1lbF9hYzk3Y19wZGF0YSAtIGJvYXJkIHNwZWNpZmljIEFDOTdDIGNvbmZpZ3VyYXRpb24KKyAqIEByeF9kd3M6IERNQSBzbGF2ZSBpbnRlcmZhY2UgdG8gdXNlIGZvciBzb3VuZCBjYXB0dXJlLgorICogQHR4X2R3czogRE1BIHNsYXZlIGludGVyZmFjZSB0byB1c2UgZm9yIHNvdW5kIHBsYXliYWNrLgorICogQHJlc2V0X3BpbjogR1BJTyBwaW4gd2lyZWQgdG8gdGhlIHJlc2V0IGlucHV0IG9uIHRoZSBleHRlcm5hbCBBQzk3IGNvZGVjLAorICogICAgICAgICAgICAgb3B0aW9uYWwgdG8gdXNlLCBzZXQgdG8gLUVOT0RFViBpZiBub3QgaW4gdXNlLiBBQzk3IGxheWVyIHdpbGwKKyAqICAgICAgICAgICAgIHRyeSB0byBkbyBhIHNvZnR3YXJlIHJlc2V0IG9mIHRoZSBleHRlcm5hbCBjb2RlYyBhbnl3YXkuCisgKiBAZmxhZ3M6IEZsYWdzIGZvciB3aGljaCBkaXJlY3Rpb25zIHNob3VsZCBiZSBlbmFibGVkLgorICoKKyAqIElmIHRoZSB1c2VyIGRvIG5vdCB3YW50IHRvIHVzZSBhIERNQSBjaGFubmVsIGZvciBwbGF5YmFjayBvciBjYXB0dXJlLCBpLmUuCisgKiBvbmx5IG9uZSBmZWF0dXJlIGlzIHJlcXVpcmVkIG9uIHRoZSBib2FyZC4gVGhlIHNsYXZlIGZvciBwbGF5YmFjayBvciBjYXB0dXJlCisgKiBjYW4gYmUgc2V0IHRvIE5VTEwuIFRoZSBBQzk3QyBkcml2ZXIgd2lsbCB0YWtlIHVzZSBvZiB0aGlzIHdoZW4gc2V0dGluZyB1cAorICogdGhlIHNvdW5kIHN0cmVhbXMuCisgKi8KK3N0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCXJ4X2R3czsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCXR4X2R3czsKKwl1bnNpZ25lZCBpbnQgCQlmbGFnczsKKwlpbnQJCQlyZXNldF9waW47Cit9OworCisjZW5kaWYgLyogX19JTkNMVURFX1NPVU5EX0FUTUVMX0FDOTdDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oIGIvaW5jbHVkZS9zb3VuZC9jb250cm9sLmgKaW5kZXggNDcyMWI0Yi4uZWY5NmYwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb250cm9sLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb250cm9sLmgKQEAgLTE3MSw2ICsxNzEsNTQgQEAKICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKGNoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgdW5zaWduZWQgaW50ICp0bHYpOwotaW50IHNuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpOwotCQkgICAgICAKK2ludCBfc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisvKiBvcHRpb25hbCBmbGFncyBmb3Igc2xhdmUgKi8KKyNkZWZpbmUgU05EX0NUTF9TTEFWRV9ORUVEX1VQREFURQkoMSA8PCAwKQorCisvKioKKyAqIHNuZF9jdGxfYWRkX3NsYXZlIC0gQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sCisgKiBAbWFzdGVyOiB2bWFzdGVyIGVsZW1lbnQKKyAqIEBzbGF2ZTogc2xhdmUgZWxlbWVudCB0byBhZGQKKyAqCisgKiBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wgdG8gdGhlIGdpdmVuIG1hc3RlciBlbGVtZW50IGNyZWF0ZWQgdmlhCisgKiBzbmRfY3RsX2NyZWF0ZV92aXJ0dWFsX21hc3RlcigpIGJlZm9yZWhhbmQuCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKgorICogQWxsIHNsYXZlcyBtdXN0IGJlIHRoZSBzYW1lIHR5cGUgKHJldHVybmluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbgorICogdmlhIGluZm8gY2FsbGJhY2spLiAgVGhlIGZ1Y250aW9uIGRvZXNuJ3QgY2hlY2sgaXQsIHNvIGl0J3MgeW91cgorICogcmVzcG9uc2liaWxpdHkuCisgKgorICogQWxzbywgc29tZSBhZGRpdGlvbmFsIGxpbWl0YXRpb25zOgorICogYXQgbW9zdCB0d28gY2hhbm5lbHMsCisgKiBsb2dhcml0aG1pYyB2b2x1bWUgY29udHJvbCAoZEIgbGV2ZWwpIHRodXMgbm8gbGluZWFyIHZvbHVtZSwKKyAqIG1hc3RlciBjYW4gb25seSBhdHRlbnVhdGUgdGhlIHZvbHVtZSB3aXRob3V0IGdhaW4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpCit7CisJcmV0dXJuIF9zbmRfY3RsX2FkZF9zbGF2ZShtYXN0ZXIsIHNsYXZlLCAwKTsKK30KKworLyoqCisgKiBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCAtIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbAorICogQG1hc3Rlcjogdm1hc3RlciBlbGVtZW50CisgKiBAc2xhdmU6IHNsYXZlIGVsZW1lbnQgdG8gYWRkCisgKgorICogQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sIHRvIHRoZSBnaXZlbiBtYXN0ZXIuCisgKiBVbmxpa2Ugc25kX2N0bF9hZGRfc2xhdmUoKSwgdGhlIGVsZW1lbnQgYWRkZWQgdmlhIHRoaXMgZnVuY3Rpb24KKyAqIGlzIHN1cHBvc2VkIHRvIGhhdmUgdm9sYXRpbGUgdmFsdWVzLCBhbmQgZ2V0IGNhbGxiYWNrIGlzIGNhbGxlZAorICogYXQgZWFjaCB0aW1lIHF1cmllZCBmcm9tIHRoZSBtYXN0ZXIuCisgKgorICogV2hlbiB0aGUgY29udHJvbCBwZWVrcyB0aGUgaGFyZHdhcmUgdmFsdWVzIGRpcmVjdGx5IGFuZCB0aGUgdmFsdWUKKyAqIGNhbiBiZSBjaGFuZ2VkIGJ5IG90aGVyIG1lYW5zIHRoYW4gdGhlIHB1dCBjYWxsYmFjayBvZiB0aGUgZWxlbWVudCwKKyAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8ga2VlcCB0aGUgdmFsdWUgYWx3YXlzIHVwLXRvLWRhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZChzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsCisJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK3sKKwlyZXR1cm4gX3NuZF9jdGxfYWRkX3NsYXZlKG1hc3Rlciwgc2xhdmUsIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUpOworfQorCiAjZW5kaWYJLyogX19TT1VORF9DT05UUk9MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29yZS5oIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKaW5kZXggZjYzMjQ4NC4uM2RlYTc5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb3JlLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKQEAgLTk3LDkgKzk3LDkgQEAKIAogc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgewogCXN0cnVjdCBmaWxlICpmaWxlOwotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICpuZXh0OwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmRpc2Nvbm5lY3RlZF9mX29wOwotCXN0cnVjdCBsaXN0X2hlYWQgc2h1dGRvd25fbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNodXRkb3duX2xpc3Q7CS8qIHN0aWxsIG5lZWQgdG8gc2h1dGRvd24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIGxpbmsgb2YgbW9uaXRvciBmaWxlcyAqLwogfTsKIAogLyogbWFpbiBzdHJ1Y3R1cmUgZm9yIHNvdW5kY2FyZCAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2lkOwkvKiB0aGUgY2FyZCBpZCAqLwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2xpbms7CS8qIG51bWJlciBsaW5rIHRvIHJlYWwgaWQgKi8KIAotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICpmaWxlczsgLyogYWxsIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhpcyBjYXJkICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxlc19saXN0OwkvKiBhbGwgZmlsZXMgYXNzb2NpYXRlZCB0byB0aGlzIGNhcmQgKi8KIAlzdHJ1Y3Qgc25kX3NodXRkb3duX2Zfb3BzICpzX2Zfb3BzOyAvKiBmaWxlIG9wZXJhdGlvbnMgaW4gdGhlIHNodXRkb3duCiAJCQkJCQkJCXN0YXRlICovCiAJc3BpbmxvY2tfdCBmaWxlc19sb2NrOwkJLyogbG9jayB0aGUgZmlsZXMgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMjk2LDggKzI5NiwyMCBAQAogZXh0ZXJuIGludCAoKnNuZF9taXhlcl9vc3Nfbm90aWZ5X2NhbGxiYWNrKShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBjbWQpOwogI2VuZGlmCiAKK2ludCBzbmRfY2FyZF9jcmVhdGUoaW50IGlkeCwgY29uc3QgY2hhciAqaWQsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplLAorCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZF9yZXQpOworCitzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZAogc3RydWN0IHNuZF9jYXJkICpzbmRfY2FyZF9uZXcoaW50IGlkeCwgY29uc3QgY2hhciAqaWQsCi0JCQkgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSk7CisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpZiAoc25kX2NhcmRfY3JlYXRlKGlkeCwgaWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSwgJmNhcmQpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNhcmQ7Cit9CisKIGludCBzbmRfY2FyZF9kaXNjb25uZWN0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CiBpbnQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwogaW50IHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKQEAgLTQ0NiwyMSArNDU4LDMzIEBACiBzdHJ1Y3Qgc25kX3BjaV9xdWlyayB7CiAJdW5zaWduZWQgc2hvcnQgc3VidmVuZG9yOwkvKiBQQ0kgc3VidmVuZG9yIElEICovCiAJdW5zaWduZWQgc2hvcnQgc3ViZGV2aWNlOwkvKiBQQ0kgc3ViZGV2aWNlIElEICovCisJdW5zaWduZWQgc2hvcnQgc3ViZGV2aWNlX21hc2s7CS8qIGJpdG1hc2sgdG8gbWF0Y2ggKi8KIAlpbnQgdmFsdWU7CQkJLyogdmFsdWUgKi8KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKIAljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgZGV2aWNlIChvcHRpb25hbCkgKi8KICNlbmRpZgogfTsKIAotI2RlZmluZSBfU05EX1BDSV9RVUlSS19JRCh2ZW5kLGRldikgXAotCS5zdWJ2ZW5kb3IgPSAodmVuZCksIC5zdWJkZXZpY2UgPSAoZGV2KQorI2RlZmluZSBfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIG1hc2ssIGRldikJXAorCS5zdWJ2ZW5kb3IgPSAodmVuZCksIC5zdWJkZXZpY2UgPSAoZGV2KSwgLnN1YmRldmljZV9tYXNrID0gKG1hc2spCisjZGVmaW5lIF9TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldikgXAorCV9TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgMHhmZmZmLCBkZXYpCiAjZGVmaW5lIFNORF9QQ0lfUVVJUktfSUQodmVuZCxkZXYpIHtfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpfQogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogI2RlZmluZSBTTkRfUENJX1FVSVJLKHZlbmQsZGV2LHhuYW1lLHZhbCkgXAogCXtfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpLCAudmFsdWUgPSAodmFsKSwgLm5hbWUgPSAoeG5hbWUpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX1ZFTkRPUih2ZW5kLCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCAwLCAwKSwgLnZhbHVlID0gKHZhbCksIC5uYW1lID0gKHhuYW1lKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19NQVNLKHZlbmQsIG1hc2ssIGRldiwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgbWFzaywgZGV2KSwJCQlcCisJCQkudmFsdWUgPSAodmFsKSwgLm5hbWUgPSAoeG5hbWUpfQogI2Vsc2UKICNkZWZpbmUgU05EX1BDSV9RVUlSSyh2ZW5kLGRldix4bmFtZSx2YWwpIFwKIAl7X1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KSwgLnZhbHVlID0gKHZhbCl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfTUFTSyh2ZW5kLCBtYXNrLCBkZXYsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIG1hc2ssIGRldiksIC52YWx1ZSA9ICh2YWwpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX1ZFTkRPUih2ZW5kLCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCAwLCAwKSwgLnZhbHVlID0gKHZhbCl9CiAjZW5kaWYKIAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmggYi9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaAppbmRleCAxMGVlMjhlLi42YTY2NGMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaAorKysgYi9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19TT1VORF9FTVUxMEsxX0gKICNkZWZpbmUgX19TT1VORF9FTVUxMEsxX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKiAgQ29weXJpZ2h0IChjKSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiwKICAqCQkgICAgIENyZWF0aXZlIExhYnMsIEluYy4KQEAgLTM0LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBERUZJTkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMTcxLDcgKzIxNzQsNyBAQAogCWNoYXIgbmFtZVsxMjhdOwogCiAJREVDTEFSRV9CSVRNQVAoZ3ByX3ZhbGlkLCAweDIwMCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5pdGlhbGl6ZXJzICovCi0JdV9pbnQzMl90IF9fdXNlciAqZ3ByX21hcDsJICAvKiBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiBfX3VzZXIgKmdwcl9tYXA7CQkvKiBpbml0aWFsaXplcnMgKi8KIAogCXVuc2lnbmVkIGludCBncHJfYWRkX2NvbnRyb2xfY291bnQ7IC8qIGNvdW50IG9mIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLwogCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHIgX191c2VyICpncHJfYWRkX2NvbnRyb2xzOyAvKiBHUFIgY29udHJvbHMgdG8gYWRkL3JlcGxhY2UgKi8KQEAgLTIxODQsMTEgKzIxODcsMTEgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByIF9fdXNlciAqZ3ByX2xpc3RfY29udHJvbHM7IC8qIGxpc3RlZCBHUFIgY29udHJvbHMgKi8KIAogCURFQ0xBUkVfQklUTUFQKHRyYW1fdmFsaWQsIDB4MTAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KLQl1X2ludDMyX3QgX191c2VyICp0cmFtX2RhdGFfbWFwOyAgLyogZGF0YSBpbml0aWFsaXplcnMgKi8KLQl1X2ludDMyX3QgX191c2VyICp0cmFtX2FkZHJfbWFwOyAgLyogbWFwIGluaXRpYWxpemVycyAqLworCV9fdTMyIF9fdXNlciAqdHJhbV9kYXRhX21hcDsJICAvKiBkYXRhIGluaXRpYWxpemVycyAqLworCV9fdTMyIF9fdXNlciAqdHJhbV9hZGRyX21hcDsJICAvKiBtYXAgaW5pdGlhbGl6ZXJzICovCiAKIAlERUNMQVJFX0JJVE1BUChjb2RlX3ZhbGlkLCAxMDI0KTsgLyogYml0bWFzayBvZiB2YWxpZCBpbnN0cnVjdGlvbnMgKi8KLQl1X2ludDMyX3QgX191c2VyICpjb2RlOwkJICAvKiBvbmUgaW5zdHJ1Y3Rpb24gLSA2NCBiaXRzICovCisJX191MzIgX191c2VyICpjb2RlOwkJICAvKiBvbmUgaW5zdHJ1Y3Rpb24gLSA2NCBiaXRzICovCiB9OwogCiBzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3RyYW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9od2RlcC5oIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCmluZGV4IGQ5ZWVhMDEuLjhjMDVlNDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCkBAIC0yNywxOCArMjcsMjggQEAKIAogc3RydWN0IHNuZF9od2RlcDsKIAorLyogaHdkZXAgZmlsZSBvcHM7IGFsbCBvcHMgY2FuIGJlIE5VTEwgKi8KIHN0cnVjdCBzbmRfaHdkZXBfb3BzIHsKLQlsb25nIGxvbmcgKCpsbHNlZWspIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgb3JpZyk7Ci0JbG9uZyAoKnJlYWQpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOwotCWxvbmcgKCp3cml0ZSkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7Ci0JaW50ICgqb3BlbikgKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKLQlpbnQgKCpyZWxlYXNlKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7Ci0JdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KTsKLQlpbnQgKCppb2N0bCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQlpbnQgKCppb2N0bF9jb21wYXQpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0JaW50ICgqbW1hcCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7Ci0JaW50ICgqZHNwX3N0YXR1cykgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKnN0YXR1cyk7Ci0JaW50ICgqZHNwX2xvYWQpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgKmltYWdlKTsKKwlsb25nIGxvbmcgKCpsbHNlZWspKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgb3JpZyk7CisJbG9uZyAoKnJlYWQpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKKwlsb25nICgqd3JpdGUpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgICBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7CisJaW50ICgqb3Blbikoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7CisJaW50ICgqcmVsZWFzZSkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7CisJdW5zaWduZWQgaW50ICgqcG9sbCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICBwb2xsX3RhYmxlICp3YWl0KTsKKwlpbnQgKCppb2N0bCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQgKCppb2N0bF9jb21wYXQpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqbW1hcCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCWludCAoKmRzcF9zdGF0dXMpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAorCQkJICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKnN0YXR1cyk7CisJaW50ICgqZHNwX2xvYWQpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAorCQkJc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgKmltYWdlKTsKIH07CiAKIHN0cnVjdCBzbmRfaHdkZXAgewpAQCAtNjEsOSArNzEsOSBAQAogCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCk7CiAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKLQlpbnQgdXNlZDsKLQl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsKLQl1bnNpZ25lZCBpbnQgZXhjbHVzaXZlOiAxOworCWludCB1c2VkOwkJCS8qIHJlZmVyZW5jZSBjb3VudGVyICovCisJdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7CS8qIGJpdCBmaWVsZHMgb2YgbG9hZGVkIGRzcCBpbmRpY2VzICovCisJdW5zaWduZWQgaW50IGV4Y2x1c2l2ZToxOwkvKiBleGNsdXNpdmUgYWNjZXNzIG1vZGUgKi8KIH07CiAKIGV4dGVybiBpbnQgc25kX2h3ZGVwX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNoYXIgKmlkLCBpbnQgZGV2aWNlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9qYWNrLmggYi9pbmNsdWRlL3NvdW5kL2phY2suaAppbmRleCAyZTAzMTVjLi42YjAxM2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2phY2suaAorKysgYi9pbmNsdWRlL3NvdW5kL2phY2suaApAQCAtMzAsNiArMzAsOSBAQAogLyoqCiAgKiBKYWNrIHR5cGVzIHdoaWNoIGNhbiBiZSByZXBvcnRlZC4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBhcyBhCiAgKiBiaXRtYXNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGxvb2t1cCB0YWJsZSBpbgorICogc291bmQvY29yZS9qYWNrLmMuCiAgKi8KIGVudW0gc25kX2phY2tfdHlwZXMgewogCVNORF9KQUNLX0hFQURQSE9ORQk9IDB4MDAwMSwKQEAgLTM3LDYgKzQwLDggQEAKIAlTTkRfSkFDS19IRUFEU0VUCT0gU05EX0pBQ0tfSEVBRFBIT05FIHwgU05EX0pBQ0tfTUlDUk9QSE9ORSwKIAlTTkRfSkFDS19MSU5FT1VUCT0gMHgwMDA0LAogCVNORF9KQUNLX01FQ0hBTklDQUwJPSAweDAwMDgsIC8qIElmIGRldGVjdGVkIHNlcGFyYXRlbHkgKi8KKwlTTkRfSkFDS19WSURFT09VVAk9IDB4MDAxMCwKKwlTTkRfSkFDS19BVk9VVAkJPSBTTkRfSkFDS19MSU5FT1VUIHwgU05EX0pBQ0tfVklERU9PVVQsCiB9OwogCiBzdHJ1Y3Qgc25kX2phY2sgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggNDBjNWE2Zi4uODkwNGIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICAgICAgLyogLS0gdGltZXIgc2VjdGlvbiAtLSAqLwogCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOwkJLyogdGltZXIgKi8KIAl1bnNpZ25lZCB0aW1lcl9ydW5uaW5nOiAxOwkvKiB0aW1lIGlzIHJ1bm5pbmcgKi8KLQlzcGlubG9ja190IHRpbWVyX2xvY2s7CiAJLyogLS0gbmV4dCBzdWJzdHJlYW0gLS0gKi8KIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKm5leHQ7CiAJLyogLS0gbGlua2VkIHN1YnN0cmVhbXMgLS0gKi8KQEAgLTQ1MSw3ICs0NTAsNyBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbmRfcGNtX2Zfb3BzWzJdOwogCi1pbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKK2ludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZGV2aWNlLAogCQlpbnQgcGxheWJhY2tfY291bnQsIGludCBjYXB0dXJlX2NvdW50LAogCQlzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwogaW50IHNuZF9wY21fbmV3X3N0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLCBpbnQgc3Vic3RyZWFtX2NvdW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oIGIvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmgKaW5kZXggMmZkM2QyNS4uMmM4OTRiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmgKQEAgLTQyLDQgKzQyLDE5IEBACiBleHRlcm4gaW50IHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBweGEyeHhfYWM5N19od19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAorLyogQUM5NyBwbGF0Zm9ybV9kYXRhICovCisvKioKKyAqIHN0cnVjdCBweGEyeHhfYWM5N19wbGF0Zm9ybV9kYXRhIC0gcHhhIGFjOTcgcGxhdGZvcm0gZGF0YQorICogQHJlc2V0X2dwaW86IEFDOTcgcmVzZXQgZ3BpbyAobm9ybWFsbHkgZ3BpbzExMyBvciBncGlvOTUpCisgKiAgICAgICAgICAgICAgYSAtMSB2YWx1ZSBtZWFucyBubyBncGlvIHdpbGwgYmUgdXNlZCBmb3IgcmVzZXQKKyAqCisgKiBQbGF0Zm9ybSBkYXRhIHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCBmb3IgcHhhMjd4IENQVXMgd2hlcmUgYSBzaWxpY29uIGJ1ZworICogcHJldmVudHMgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHJlc2V0IGxpbmUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0CisgKiBiZWhhdmlvdXIgaXMgdG8gY29uc2lkZXIgZ3BpbyAxMTMgYXMgdGhlIEFDOTcgcmVzZXQgbGluZSwgd2hpY2ggaXMgdGhlCisgKiBkZWZhdWx0IG9uIG1vc3QgYm9hcmRzLgorICovCitzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSB7CisJaW50IHJlc2V0X2dwaW87Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oIGIvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKaW5kZXggYjU1MGE0MS4uYzIzYzI2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmgKQEAgLTQyLDcgKzQyLDYgQEAKICNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUCSgxPDwxKQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfT1BFTgkJKDM8PDApCiAjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQJKDE8PDIpCi0jZGVmaW5lCVNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLCSgxPDwzKQogCiBzdHJ1Y3Qgc25kX3Jhd21pZGk7CiBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zYi5oIGIvaW5jbHVkZS9zb3VuZC9zYi5oCmluZGV4IDg1ZjkzYzUuLjRlNjJlZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2IuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NiLmgKQEAgLTI0OSw2ICsyNDksNyBAQAogI2RlZmluZSBTQl9BTFM0MDAwXzNEX0FVVE9fTVVURQkweDUyCiAjZGVmaW5lIFNCX0FMUzQwMDBfQU5BTE9HX0JMT0NLX0NUUkwgMHg1MwogI2RlZmluZSBTQl9BTFM0MDAwXzNEX0RFTEFZTElORV9QQVRURVJOIDB4NTQKKyNkZWZpbmUgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTgkweGMzIC8qIGJpdCA3IGlzIERpZ2l0YWwgTG9vcCBFbmFibGUgKi8KICNkZWZpbmUgU0JfQUxTNDAwMF9RU09VTkQJMHhkYgogCiAvKiBJUlEgc2V0dGluZyBiaXRtYXAgKi8KQEAgLTMzMCw3ICszMzEsOCBAQAogCVNCX01JWF9ET1VCTEUsCiAJU0JfTUlYX0lOUFVUX1NXLAogCVNCX01JWF9DQVBUVVJFX1BSTywKLQlTQl9NSVhfQ0FQVFVSRV9EVDAxOVgKKwlTQl9NSVhfQ0FQVFVSRV9EVDAxOVgsCisJU0JfTUlYX01PTk9fQ0FQVFVSRV9BTFM0SwogfTsKIAogI2RlZmluZSBTQl9NSVhWQUxfRE9VQkxFKGxlZnRfcmVnLCByaWdodF9yZWcsIGxlZnRfc2hpZnQsIHJpZ2h0X3NoaWZ0LCBtYXNrKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oIGIvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaAppbmRleCA1ZDFhYjljLi4xYmNlN2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCisrKyBiL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKQEAgLTIwMiwxMyArMjAyLDExIEBACiAJaW50IHZhbHVlMjsJLyogcmVzZXJ2ZWQgKi8KIH07CiAKLWVudW0gewotCVNORFJWX0VNVVhfSU9DVExfVkVSU0lPTiA9IF9JT1IoJ0gnLCAweDgwLCB1bnNpZ25lZCBpbnQpLAotCVNORFJWX0VNVVhfSU9DVExfTE9BRF9QQVRDSCA9IF9JT1dSKCdIJywgMHg4MSwgc3RydWN0IHNvdW5kZm9udF9wYXRjaF9pbmZvKSwKLQlTTkRSVl9FTVVYX0lPQ1RMX1JFU0VUX1NBTVBMRVMgPSBfSU8oJ0gnLCAweDgyKSwKLQlTTkRSVl9FTVVYX0lPQ1RMX1JFTU9WRV9MQVNUX1NBTVBMRVMgPSBfSU8oJ0gnLCAweDgzKSwKLQlTTkRSVl9FTVVYX0lPQ1RMX01FTV9BVkFJTCA9IF9JT1coJ0gnLCAweDg0LCBpbnQpLAotCVNORFJWX0VNVVhfSU9DVExfTUlTQ19NT0RFID0gX0lPV1IoJ0gnLCAweDg0LCBzdHJ1Y3Qgc25kX2VtdXhfbWlzY19tb2RlKSwKLX07CisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfVkVSU0lPTglfSU9SKCdIJywgMHg4MCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX0xPQURfUEFUQ0gJX0lPV1IoJ0gnLCAweDgxLCBzdHJ1Y3Qgc291bmRmb250X3BhdGNoX2luZm8pCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfUkVTRVRfU0FNUExFUwlfSU8oJ0gnLCAweDgyKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1JFTU9WRV9MQVNUX1NBTVBMRVMgX0lPKCdIJywgMHg4MykKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9NRU1fQVZBSUwJX0lPVygnSCcsIDB4ODQsIGludCkKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9NSVNDX01PREUJX0lPV1IoJ0gnLCAweDg0LCBzdHJ1Y3Qgc25kX2VtdXhfbWlzY19tb2RlKQogCiAjZW5kaWYgLyogX19TT1VORF9TRk5UX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaAppbmRleCAyNDI0N2Y3Li4xMzY3NjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaApAQCAtMjAzLDcgKzIwMyw3IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSk7CiAKIAkvKiBvcHMgKi8KLQlzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG9wczsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzICpvcHM7CiAKIAkvKiBEQUkgY2FwYWJpbGl0aWVzICovCiAJc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbSBjYXB0dXJlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IGRmYTgwNDkuLmE3ZGVmNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTc2LDYgKzc2LDExIEBACiAJIHdjb250cm9scywgd25jb250cm9scylcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CisjZGVmaW5lIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCSB3Y29udHJvbHMsIHduY29udHJvbHMpXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgXAorCS5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSUNCSUFTKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21pY2JpYXMsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMH0KQEAgLTEwMSw2ICsxMDYsMTEgQEAKIHsJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQorI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCXdjb250cm9scywgd25jb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKK3sgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkubnVtX2tjb250cm9scyA9IHduY29udHJvbHMsIC5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlDQklBU19FKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdldmVudCwgd2ZsYWdzKSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taWNiaWFzLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSBOVUxMLCAubnVtX2tjb250cm9scyA9IDAsIFwKQEAgLTE4Miw2ICsxOTIsMTIgQEAKIAkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF92YWx1ZV9lbnVtX2RvdWJsZSwgXAogCS5wdXQgPSBzbmRfc29jX2RhcG1fcHV0X3ZhbHVlX2VudW1fZG91YmxlLCBcCiAJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZykmeGVudW0gfQorI2RlZmluZSBTT0NfREFQTV9QSU5fU1dJVENIKHhuYW1lKSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lICIgU3dpdGNoIiwgXAorCS5pbmZvID0gc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCwgXAorCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2gsIFwKKwkucHV0ID0gc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoLCBcCisJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZyl4bmFtZSB9CiAKIC8qIGRhcG0gc3RyZWFtIG9wZXJhdGlvbnMgKi8KICNkZWZpbmUgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1AJCQkweDAKQEAgLTIyOCw2ICsyNDQsMTIgQEAKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CiBpbnQgc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CitpbnQgc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKTsKK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdW5jb250cm9sKTsKK2ludCBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdW5jb250cm9sKTsKIGludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQpOwogaW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLApAQCAtMjUwLDEwICsyNzIsMTAgQEAKIGludCBzbmRfc29jX2RhcG1fc3lzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKiBkYXBtIGF1ZGlvIHBpbiBjb250cm9sIGFuZCBzdGF0dXMgKi8KLWludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CiBpbnQgc25kX3NvY19kYXBtX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKIAogLyogZGFwbSB3aWRnZXQgdHlwZXMgKi8KQEAgLTI2Myw2ICsyODUsNyBAQAogCXNuZF9zb2NfZGFwbV9tdXgsCQkJLyogc2VsZWN0cyAxIGFuYWxvZyBzaWduYWwgZnJvbSBtYW55IGlucHV0cyAqLwogCXNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsCQkJLyogc2VsZWN0cyAxIGFuYWxvZyBzaWduYWwgZnJvbSBtYW55IGlucHV0cyAqLwogCXNuZF9zb2NfZGFwbV9taXhlciwJCQkvKiBtaXhlcyBzZXZlcmFsIGFuYWxvZyBzaWduYWxzIHRvZ2V0aGVyICovCisJc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwJCS8qIG1peGVyIHdpdGggbmFtZWQgY29udHJvbHMgKi8KIAlzbmRfc29jX2RhcG1fcGdhLAkJCS8qIHByb2dyYW1tYWJsZSBnYWluL2F0dGVudWF0aW9uICh2b2x1bWUpICovCiAJc25kX3NvY19kYXBtX2FkYywJCQkvKiBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIgKi8KIAlzbmRfc29jX2RhcG1fZGFjLAkJCS8qIGRpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggMjQ1OTNhYy4uYTQwYmM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMTU0LDYgKzE1Niw4IEBACiAJU05EX1NPQ19CSUFTX09GRiwKIH07CiAKK3N0cnVjdCBzbmRfamFjazsKK3N0cnVjdCBzbmRfc29jX2NhcmQ7CiBzdHJ1Y3Qgc25kX3NvY19kZXZpY2U7CiBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtOwogc3RydWN0IHNuZF9zb2Nfb3BzOwpAQCAtMTY0LDYgKzE2OCwxMSBAQAogc3RydWN0IHNuZF9zb2NfY29kZWM7CiBzdHJ1Y3Qgc29jX2VudW07CiBzdHJ1Y3Qgc25kX3NvY19hYzk3X29wczsKK3N0cnVjdCBzbmRfc29jX2phY2s7CitzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbjsKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorc3RydWN0IHNuZF9zb2NfamFja19ncGlvOworI2VuZGlmCiAKIHR5cGVkZWYgaW50ICgqaHdfd3JpdGVfdCkodm9pZCAqLGNvbnN0IGNoYXIqICxpbnQpOwogdHlwZWRlZiBpbnQgKCpod19yZWFkX3QpKHZvaWQgKixjaGFyKiAsaW50KTsKQEAgLTE4NCw2ICsxOTMsMTkgQEAKIGludCBzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCWNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpodyk7CiAKKy8qIEphY2sgcmVwb3J0aW5nICovCitpbnQgc25kX3NvY19qYWNrX25ldyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IHR5cGUsCisJCSAgICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjayk7Cit2b2lkIHNuZF9zb2NfamFja19yZXBvcnQoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHN0YXR1cywgaW50IG1hc2spOworaW50IHNuZF9zb2NfamFja19hZGRfcGlucyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2tfcGluICpwaW5zKTsKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgoraW50IHNuZF9zb2NfamFja19hZGRfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcyk7Cit2b2lkIHNuZF9zb2NfamFja19mcmVlX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpOworI2VuZGlmCisKIC8qIGNvZGVjIElPICovCiAjZGVmaW5lIHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKSBjb2RlYy0+cmVhZChjb2RlYywgcmVnKQogI2RlZmluZSBzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKSBjb2RlYy0+d3JpdGUoY29kZWMsIHJlZywgdmFsdWUpCkBAIC0yMDMsNiArMjI1LDggQEAKICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX3NvY19jbmV3KGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpfdGVtcGxhdGUsCiAJdm9pZCAqZGF0YSwgY2hhciAqbG9uZ19uYW1lKTsKK2ludCBzbmRfc29jX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNvbnRyb2xzLCBpbnQgbnVtX2NvbnRyb2xzKTsKIGludCBzbmRfc29jX2luZm9fZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CiBpbnQgc25kX3NvY19pbmZvX2VudW1fZXh0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMjM3LDYgKzI2MSw0OCBAQAogaW50IHNuZF9zb2NfcHV0X3ZvbHN3X3M4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIAorLyoqCisgKiBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAtIERlc2NyaWJlcyBhIHBpbiB0byB1cGRhdGUgYmFzZWQgb24gamFjayBkZXRlY3Rpb24KKyAqCisgKiBAcGluOiAgICBuYW1lIG9mIHRoZSBwaW4gdG8gdXBkYXRlCisgKiBAbWFzazogICBiaXRzIHRvIGNoZWNrIGZvciBpbiByZXBvcnRlZCBqYWNrIHN0YXR1cworICogQGludmVydDogaWYgbm9uLXplcm8gdGhlbiBwaW4gaXMgZW5hYmxlZCB3aGVuIHN0YXR1cyBpcyBub3QgcmVwb3J0ZWQKKyAqLworc3RydWN0IHNuZF9zb2NfamFja19waW4geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBjaGFyICpwaW47CisJaW50IG1hc2s7CisJYm9vbCBpbnZlcnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAtIERlc2NyaWJlcyBhIGdwaW8gcGluIGZvciBqYWNrIGRldGVjdGlvbgorICoKKyAqIEBncGlvOiAgICAgICAgIGdwaW8gbnVtYmVyCisgKiBAbmFtZTogICAgICAgICBncGlvIG5hbWUKKyAqIEByZXBvcnQ6ICAgICAgIHZhbHVlIHRvIHJlcG9ydCB3aGVuIGphY2sgZGV0ZWN0ZWQKKyAqIEBpbnZlcnQ6ICAgICAgIHJlcG9ydCBwcmVzZW5jZSBpbiBsb3cgc3RhdGUKKyAqIEBkZWJvdWNlX3RpbWU6IGRlYm91Y2UgdGltZSBpbiBtcworICovCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK3N0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyB7CisJdW5zaWduZWQgaW50IGdwaW87CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmVwb3J0OworCWludCBpbnZlcnQ7CisJaW50IGRlYm91bmNlX3RpbWU7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisjZW5kaWYKKworc3RydWN0IHNuZF9zb2NfamFjayB7CisJc3RydWN0IHNuZF9qYWNrICpqYWNrOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQ7CisJc3RydWN0IGxpc3RfaGVhZCBwaW5zOworCWludCBzdGF0dXM7Cit9OworCiAvKiBTb0MgUENNIHN0cmVhbSBpbmZvcm1hdGlvbiAqLwogc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbSB7CiAJY2hhciAqc3RyZWFtX25hbWU7CkBAIC0zODQsNiArNDUwLDggQEAKIAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2OwogCisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgZGVsYXllZF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkZWZlcnJlZF9yZXN1bWVfd29yazsKQEAgLTM5Myw3ICs0NjEsNiBAQAogc3RydWN0IHNuZF9zb2NfZGV2aWNlIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXY7CiAJdm9pZCAqY29kZWNfZGF0YTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaCBiL2luY2x1ZGUvc291bmQvdWRhMTM0MS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBkNWRjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvc291bmQvdWRhMTM0MS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9saW51eC9sMy91ZGExMzQxLmgKLSAqCi0gKiBQaGlsaXBzIFVEQTEzNDEgbWl4ZXIgZGV2aWNlIGRyaXZlciBmb3IgQUxTQQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyBUb21hcyBLYXNwYXJlayBJbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiB1ZGExMzQxLmggZnJvbSBPU1MKLSAqIDIwMDItMDMtMzAgVG9tYXMgS2FzcGFyZWsgUHJvYyBmaWxlc3lzdGVtIHN1cHBvcnQsIGNvbXBsZXRlIG1peGVyIGFuZCBEU1AKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3VwcG9ydAotICovCi0KLSNkZWZpbmUgVURBMTM0MV9BTFNBX05BTUUgInNuZC11ZGExMzQxIgotCi0vKgotICogRGVmYXVsdCByYXRlIHNldCBhZnRlciBpbmljaWFsaXphdGlvbgotICovCi0jZGVmaW5lIEFVRElPX1JBVEVfREVGQVVMVAk0NDEwMAotCi0vKgotICogVURBMTM0MSBMMyBhZGRyZXNzIGFuZCBjb21tYW5kIHR5cGVzCi0gKi8KLSNkZWZpbmUgVURBMTM0MV9MM0FERFIJCTUKLSNkZWZpbmUgVURBMTM0MV9EQVRBMAkJKFVEQTEzNDFfTDNBRERSIDw8IDIgfCAwKQotI2RlZmluZSBVREExMzQxX0RBVEExCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDEpCi0jZGVmaW5lIFVEQTEzNDFfU1RBVFVTCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDIpCi0KLWVudW0gdWRhMTM0MV9vbm9mZiB7Ci0JT0ZGPTAsCi0JT04sCi19OwotCi1lbnVtIHVkYTEzNDFfZm9ybWF0IHsKLQlJMlM9MCwKLQlMU0IxNiwKLQlMU0IxOCwKLQlMU0IyMCwKLQlNU0IsCi0JTFNCMTZNU0IsCi0JTFNCMThNU0IsCi0JTFNCMjBNU0IsICAgICAgICAKLX07Ci0KLWVudW0gdWRhMTM0MV9mcyB7Ci0JRjUxMj0wLAotCUYzODQsCi0JRjI1NiwKLQlGdW51c2VkLAotfTsKLQotZW51bSB1ZGExMzQxX3BlYWsgewotCUJFRk9SRT0wLAotCUFGVEVSLAotfTsKLQotZW51bSB1ZGExMzQxX2ZpbHRlciB7Ci0JRkxBVD0wLAotCU1JTiwKLQlNSU4yLAotCU1BWCwKLX07Ci0KLWVudW0gdWRhMTM0MV9taXhlciB7Ci0JRE9VQkxFLAotCUxJTkUsCi0JTUlDLAotCU1JWEVSLAotfTsKLQotZW51bSB1ZGExMzQxX2RlZW1wIHsKLQlOT05FLAotCUQzMiwKLQlENDQsCi0JRDQ4LAotfTsKLQotZW51bSB1ZGExMzQxX2NvbmZpZyB7Ci0JQ01EX1JFQURfUkVHID0gMCwKLQlDTURfUkVTRVQsCi0JQ01EX0ZTLAotCUNNRF9GT1JNQVQsCi0JQ01EX09HQUlOLAotCUNNRF9JR0FJTiwKLQlDTURfREFDLAotCUNNRF9BREMsCi0JQ01EX1ZPTFVNRSwKLQlDTURfQkFTUywKLQlDTURfVFJFQkJMRSwKLQlDTURfUEVBSywKLQlDTURfREVFTVAsCi0JQ01EX01VVEUsICAgICAgICAKLQlDTURfRklMVEVSLAotCUNNRF9DSDEsCi0JQ01EX0NIMiwKLQlDTURfTUlDLCAgICAgICAKLQlDTURfTUlYRVIsCi0JQ01EX0FHQywKLQlDTURfSUcsCi0JQ01EX0FHQ19USU1FLAotCUNNRF9BR0NfTEVWRUwsCi0jaWZkZWYgQ09ORklHX1BNCi0JQ01EX1NVU1BFTkQsCi0JQ01EX1JFU1VNRSwKLSNlbmRpZgotCUNNRF9MQVNULAotfTsKLQotZW51bSB3cml0ZV90aHJvdWdoIHsKLQkvL3VzZWQgaW4gdXBkYXRlX2JpdHMgKHdyaXRlX2NmZykgdG8gYXZvaWQgbDNfd3JpdGUgLSBqdXN0IHVwZGF0ZSBsb2NhbCBjb3B5IG9mIHJlZ3MuCi0JUkVHU19PTkxZPTAsCi0JLy91cGRhdGUgbG9jYWwgcmVncyBhbmQgd3JpdGUgdmFsdWUgdG8gdWRhMTM0MSAtIGRvIGwzX3dyaXRlCi0JRkxVU0gsCi19OwotCi1pbnQgX19pbml0IHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqKmNsbnQpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IDJiNDgyMzcuLmE3ZTc0ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmggKi8KLSNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMThhIgorI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xOSIKICNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dzcy5oIGIvaW5jbHVkZS9zb3VuZC93c3MuaAppbmRleCBmZDAxZjIyLi42ZDY1ZjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3dzcy5oCisrKyBiL2luY2x1ZGUvc291bmQvd3NzLmgKQEAgLTE1NCw2ICsxNTQsNyBAQAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZSwKIAkJICAgICAgdW5zaWduZWQgc2hvcnQgaHdzaGFyZSwKIAkJICAgICAgc3RydWN0IHNuZF93c3MgKipyY2hpcCk7CitpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKTsKIGludCBzbmRfd3NzX3BjbShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfd3NzX3RpbWVyKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKTsKIGludCBzbmRfd3NzX21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc2tiLmggYi9pbmNsdWRlL3RyYWNlL3NrYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjYxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3NrYi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX1RSQUNFX1NLQl9IXworI2RlZmluZSBfVFJBQ0VfU0tCX0hfCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK0RFQ0xBUkVfVFJBQ0Uoa2ZyZWVfc2tiLAorCVRQUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pLAorCVRQQVJHUyhza2IsIGxvY2F0aW9uKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDZhNWM1ZmUuLjE0YzQ4M2QgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTEwMSw2ICsxMDEsNjYgQEAKIAogCSAgd2hpY2ggaXMgZG9uZSB3aXRoaW4gdGhlIHNjcmlwdCAic2NyaXB0cy9zZXRsb2NhbHZlcnNpb24iLikKIAorY29uZmlnIEhBVkVfS0VSTkVMX0daSVAKKwlib29sCisKK2NvbmZpZyBIQVZFX0tFUk5FTF9CWklQMgorCWJvb2wKKworY29uZmlnIEhBVkVfS0VSTkVMX0xaTUEKKwlib29sCisKK2Nob2ljZQorCXByb21wdCAiS2VybmVsIGNvbXByZXNzaW9uIG1vZGUiCisJZGVmYXVsdCBLRVJORUxfR1pJUAorCWRlcGVuZHMgb24gSEFWRV9LRVJORUxfR1pJUCB8fCBIQVZFX0tFUk5FTF9CWklQMiB8fCBIQVZFX0tFUk5FTF9MWk1BCisJaGVscAorCSAgVGhlIGxpbnV4IGtlcm5lbCBpcyBhIGtpbmQgb2Ygc2VsZi1leHRyYWN0aW5nIGV4ZWN1dGFibGUuCisJICBTZXZlcmFsIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZGlmZmVyCisJICBpbiBlZmZpY2llbmN5LCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZC4KKwkgIENvbXByZXNzaW9uIHNwZWVkIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBidWlsZGluZyBhIGtlcm5lbC4KKwkgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgcmVsZXZhbnQgYXQgZWFjaCBib290LgorCisJICBJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgd2l0aCBiemlwMiBvciBsem1hIGNvbXByZXNzZWQKKwkgIGtlcm5lbHMsIG1haWwgbWUgKEFsYWluIEtuYWZmKSA8YWxhaW5Aa25hZmYubHU+LiAoQW4gb2xkZXIKKwkgIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbmFsaXR5IChiemlwMiBvbmx5KSwgZm9yIDIuNCwgd2FzCisJICBzdXBwbGllZCBieSBDaHJpc3RpYW4gTHVkd2lnKQorCisJICBIaWdoIGNvbXByZXNzaW9uIG9wdGlvbnMgYXJlIG1vc3RseSB1c2VmdWwgZm9yIHVzZXJzLCB3aG8KKwkgIGFyZSBsb3cgb24gZGlzayBzcGFjZSAoZW1iZWRkZWQgc3lzdGVtcyksIGJ1dCBmb3Igd2hvbSByYW0KKwkgIHNpemUgbWF0dGVycyBsZXNzLgorCisJICBJZiBpbiBkb3VidCwgc2VsZWN0ICdnemlwJworCitjb25maWcgS0VSTkVMX0daSVAKKwlib29sICJHemlwIgorCWRlcGVuZHMgb24gSEFWRV9LRVJORUxfR1pJUAorCWhlbHAKKwkgIFRoZSBvbGQgYW5kIHRyaWVkIGd6aXAgY29tcHJlc3Npb24uIEl0cyBjb21wcmVzc2lvbiByYXRpbyBpcworCSAgdGhlIHBvb3Jlc3QgYW1vbmcgdGhlIDMgY2hvaWNlczsgaG93ZXZlciBpdHMgc3BlZWQgKGJvdGgKKwkgIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uKSBpcyB0aGUgZmFzdGVzdC4KKworY29uZmlnIEtFUk5FTF9CWklQMgorCWJvb2wgIkJ6aXAyIgorCWRlcGVuZHMgb24gSEFWRV9LRVJORUxfQlpJUDIKKwloZWxwCisJICBJdHMgY29tcHJlc3Npb24gcmF0aW8gYW5kIHNwZWVkIGlzIGludGVybWVkaWF0ZS4KKwkgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgc2xvd2VzdCBhbW9uZyB0aGUgdGhyZWUuICBUaGUga2VybmVsCisJICBzaXplIGlzIGFib3V0IDEwJSBzbWFsbGVyIHdpdGggYnppcDIsIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KKwkgIEJ6aXAyIHVzZXMgYSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5LiBGb3IgbW9kZXJuIGtlcm5lbHMgeW91CisJICB3aWxsIG5lZWQgYXQgbGVhc3QgOE1CIFJBTSBvciBtb3JlIGZvciBib290aW5nLgorCitjb25maWcgS0VSTkVMX0xaTUEKKwlib29sICJMWk1BIgorCWRlcGVuZHMgb24gSEFWRV9LRVJORUxfTFpNQQorCWhlbHAKKwkgIFRoZSBtb3N0IHJlY2VudCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCisJICBJdHMgcmF0aW8gaXMgYmVzdCwgZGVjb21wcmVzc2lvbiBzcGVlZCBpcyBiZXR3ZWVuIHRoZSBvdGhlcgorCSAgdHdvLiBDb21wcmVzc2lvbiBpcyBzbG93ZXN0LglUaGUga2VybmVsIHNpemUgaXMgYWJvdXQgMzMlCisJICBzbWFsbGVyIHdpdGggTFpNQSBpbiBjb21wYXJpc29uIHRvIGd6aXAuCisKK2VuZGNob2ljZQorCiBjb25maWcgU1dBUAogCWJvb2wgIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKSIKIAlkZXBlbmRzIG9uIE1NVSAmJiBCTE9DSwpAQCAtOTY2LDcgKzEwMjYsNiBAQAogCiBjb25maWcgUlRfTVVURVhFUwogCWJvb2xlYW4KLQlzZWxlY3QgUExJU1QKIAogY29uZmlnIEJBU0VfU01BTEwKIAlpbnQKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzX3JkLmMgYi9pbml0L2RvX21vdW50c19yZC5jCmluZGV4IDBmMGYwY2YuLjAyN2E0MDIgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzX3JkLmMKKysrIGIvaW5pdC9kb19tb3VudHNfcmQuYwpAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgImRvX21vdW50cy5oIgogI2luY2x1ZGUgIi4uL2ZzL3NxdWFzaGZzL3NxdWFzaGZzX2ZzLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2dlbmVyaWMuaD4KKworCiBpbnQgX19pbml0ZGF0YSByZF9wcm9tcHQgPSAxOy8qIDEgPSBwcm9tcHQgZm9yIFJBTSBkaXNrLCAwID0gZG9uJ3QgcHJvbXB0ICovCiAKIHN0YXRpYyBpbnQgX19pbml0IHByb21wdF9yYW1kaXNrKGNoYXIgKnN0cikKQEAgLTI5LDcgKzMyLDcgQEAKIH0KIF9fc2V0dXAoInJhbWRpc2tfc3RhcnQ9IiwgcmFtZGlza19zdGFydF9zZXR1cCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGNyZF9sb2FkKGludCBpbl9mZCwgaW50IG91dF9mZCk7CitzdGF0aWMgaW50IF9faW5pdCBjcmRfbG9hZChpbnQgaW5fZmQsIGludCBvdXRfZmQsIGRlY29tcHJlc3NfZm4gZGVjbyk7CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgdHJpZXMgdG8gZmluZCBhIFJBTSBkaXNrIGltYWdlIHRvIGxvYWQsIGFuZCByZXR1cm5zIHRoZQpAQCAtMzgsMTUgKzQxLDE1IEBACiAgKiBudW1iZXJzIGNvdWxkIG5vdCBiZSBmb3VuZC4KICAqCiAgKiBXZSBjdXJyZW50bHkgY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgbWFnaWMgbnVtYmVyczoKLSAqIAltaW5peAotICogCWV4dDIKKyAqCW1pbml4CisgKglleHQyCiAgKglyb21mcwogICoJY3JhbWZzCiAgKglzcXVhc2hmcwotICogCWd6aXAKKyAqCWd6aXAKICAqLwotc3RhdGljIGludCBfX2luaXQgCi1pZGVudGlmeV9yYW1kaXNrX2ltYWdlKGludCBmZCwgaW50IHN0YXJ0X2Jsb2NrKQorc3RhdGljIGludCBfX2luaXQKK2lkZW50aWZ5X3JhbWRpc2tfaW1hZ2UoaW50IGZkLCBpbnQgc3RhcnRfYmxvY2ssIGRlY29tcHJlc3NfZm4gKmRlY29tcHJlc3NvcikKIHsKIAljb25zdCBpbnQgc2l6ZSA9IDUxMjsKIAlzdHJ1Y3QgbWluaXhfc3VwZXJfYmxvY2sgKm1pbml4c2I7CkBAIC01Niw2ICs1OSw3IEBACiAJc3RydWN0IHNxdWFzaGZzX3N1cGVyX2Jsb2NrICpzcXVhc2hmc2I7CiAJaW50IG5ibG9ja3MgPSAtMTsKIAl1bnNpZ25lZCBjaGFyICpidWY7CisJY29uc3QgY2hhciAqY29tcHJlc3NfbmFtZTsKIAogCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCkBAIC02OSwxOCArNzMsMTkgQEAKIAltZW1zZXQoYnVmLCAweGU1LCBzaXplKTsKIAogCS8qCi0JICogUmVhZCBibG9jayAwIHRvIHRlc3QgZm9yIGd6aXBwZWQga2VybmVsCisJICogUmVhZCBibG9jayAwIHRvIHRlc3QgZm9yIGNvbXByZXNzZWQga2VybmVsCiAJICovCiAJc3lzX2xzZWVrKGZkLCBzdGFydF9ibG9jayAqIEJMT0NLX1NJWkUsIDApOwogCXN5c19yZWFkKGZkLCBidWYsIHNpemUpOwogCi0JLyoKLQkgKiBJZiBpdCBtYXRjaGVzIHRoZSBnemlwIG1hZ2ljIG51bWJlcnMsIHJldHVybiAwCi0JICovCi0JaWYgKGJ1ZlswXSA9PSAwMzcgJiYgKChidWZbMV0gPT0gMDIxMykgfHwgKGJ1ZlsxXSA9PSAwMjM2KSkpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCSAgICAgICAiUkFNRElTSzogQ29tcHJlc3NlZCBpbWFnZSBmb3VuZCBhdCBibG9jayAlZFxuIiwKLQkJICAgICAgIHN0YXJ0X2Jsb2NrKTsKKwkqZGVjb21wcmVzc29yID0gZGVjb21wcmVzc19tZXRob2QoYnVmLCBzaXplLCAmY29tcHJlc3NfbmFtZSk7CisJaWYgKGNvbXByZXNzX25hbWUpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSQU1ESVNLOiAlcyBpbWFnZSBmb3VuZCBhdCBibG9jayAlZFxuIiwKKwkJICAgICAgIGNvbXByZXNzX25hbWUsIHN0YXJ0X2Jsb2NrKTsKKwkJaWYgKCEqZGVjb21wcmVzc29yKQorCQkJcHJpbnRrKEtFUk5fRU1FUkcKKwkJCSAgICAgICAiUkFNRElTSzogJXMgZGVjb21wcmVzc29yIG5vdCBjb25maWd1cmVkIVxuIiwKKwkJCSAgICAgICBjb21wcmVzc19uYW1lKTsKIAkJbmJsb2NrcyA9IDA7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNDIsNyArMTQ3LDcgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UKIAkgICAgICAgIlJBTURJU0s6IENvdWxkbid0IGZpbmQgdmFsaWQgUkFNIGRpc2sgaW1hZ2Ugc3RhcnRpbmcgYXQgJWQuXG4iLAogCSAgICAgICBzdGFydF9ibG9jayk7Ci0JCisKIGRvbmU6CiAJc3lzX2xzZWVrKGZkLCBzdGFydF9ibG9jayAqIEJMT0NLX1NJWkUsIDApOwogCWtmcmVlKGJ1Zik7CkBAIC0xNTcsNiArMTYyLDcgQEAKIAlpbnQgbmJsb2NrcywgaSwgZGlzazsKIAljaGFyICpidWYgPSBOVUxMOwogCXVuc2lnbmVkIHNob3J0IHJvdGF0ZSA9IDA7CisJZGVjb21wcmVzc19mbiBkZWNvbXByZXNzb3IgPSBOVUxMOwogI2lmICFkZWZpbmVkKENPTkZJR19TMzkwKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpCiAJY2hhciByb3RhdG9yWzRdID0geyAnfCcgLCAnLycgLCAnLScgLCAnXFwnIH07CiAjZW5kaWYKQEAgLTE2OSwxMiArMTc1LDEyIEBACiAJaWYgKGluX2ZkIDwgMCkKIAkJZ290byBub2Nsb3NlX2lucHV0OwogCi0JbmJsb2NrcyA9IGlkZW50aWZ5X3JhbWRpc2tfaW1hZ2UoaW5fZmQsIHJkX2ltYWdlX3N0YXJ0KTsKKwluYmxvY2tzID0gaWRlbnRpZnlfcmFtZGlza19pbWFnZShpbl9mZCwgcmRfaW1hZ2Vfc3RhcnQsICZkZWNvbXByZXNzb3IpOwogCWlmIChuYmxvY2tzIDwgMCkKIAkJZ290byBkb25lOwogCiAJaWYgKG5ibG9ja3MgPT0gMCkgewotCQlpZiAoY3JkX2xvYWQoaW5fZmQsIG91dF9mZCkgPT0gMCkKKwkJaWYgKGNyZF9sb2FkKGluX2ZkLCBvdXRfZmQsIGRlY29tcHJlc3NvcikgPT0gMCkKIAkJCWdvdG8gc3VjY2Vzc2Z1bF9sb2FkOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjAwLDcgKzIwNiw3IEBACiAJCSAgICAgICBuYmxvY2tzLCByZF9ibG9ja3MpOwogCQlnb3RvIGRvbmU7CiAJfQotCQkKKwogCS8qCiAJICogT0ssIHRpbWUgdG8gY29weSBpbiB0aGUgZGF0YQogCSAqLwpAQCAtMjczLDEzOCArMjc5LDQ4IEBACiAJcmV0dXJuIHJkX2xvYWRfaW1hZ2UoIi9kZXYvcm9vdCIpOwogfQogCi0vKgotICogZ3ppcCBkZWNsYXJhdGlvbnMKLSAqLwotCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCi0KLSNpZm5kZWYgbWVtemVybwotI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQotI2VuZGlmCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgdWNoOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2g7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKLQotI2RlZmluZSBJTkJVRlNJWiA0MDk2Ci0jZGVmaW5lIFdTSVpFIDB4ODAwMCAgICAvKiB3aW5kb3cgc2l6ZS0tbXVzdCBiZSBhIHBvd2VyIG9mIHR3bywgYW5kICovCi0JCQkvKiAgYXQgbGVhc3QgMzJLIGZvciB6aXAncyBkZWZsYXRlIG1ldGhvZCAqLwotCi1zdGF0aWMgdWNoICppbmJ1ZjsKLXN0YXRpYyB1Y2ggKndpbmRvdzsKLQotc3RhdGljIHVuc2lnbmVkIGluc2l6ZTsgIC8qIHZhbGlkIGJ5dGVzIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgaW5wdHI7ICAgLyogaW5kZXggb2YgbmV4dCBieXRlIHRvIGJlIHByb2Nlc3NlZCBpbiBpbmJ1ZiAqLwotc3RhdGljIHVuc2lnbmVkIG91dGNudDsgIC8qIGJ5dGVzIGluIG91dHB1dCBidWZmZXIgKi8KIHN0YXRpYyBpbnQgZXhpdF9jb2RlOwotc3RhdGljIGludCB1bnppcF9lcnJvcjsKLXN0YXRpYyBsb25nIGJ5dGVzX291dDsKK3N0YXRpYyBpbnQgZGVjb21wcmVzc19lcnJvcjsKIHN0YXRpYyBpbnQgY3JkX2luZmQsIGNyZF9vdXRmZDsKIAotI2RlZmluZSBnZXRfYnl0ZSgpICAoaW5wdHIgPCBpbnNpemUgPyBpbmJ1ZltpbnB0cisrXSA6IGZpbGxfaW5idWYoKSkKLQkJCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAoc3R1YmJlZCBvdXQpICovCi0jZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSNkZWZpbmUgVHJhY2UoeCkKLSNkZWZpbmUgVHJhY2V2KHgpCi0jZGVmaW5lIFRyYWNldnYoeCkKLSNkZWZpbmUgVHJhY2VjKGMseCkKLSNkZWZpbmUgVHJhY2VjdihjLHgpCi0KLSNkZWZpbmUgU1RBVElDIHN0YXRpYwotI2RlZmluZSBJTklUIF9faW5pdAotCi1zdGF0aWMgaW50ICBfX2luaXQgZmlsbF9pbmJ1Zih2b2lkKTsKLXN0YXRpYyB2b2lkIF9faW5pdCBmbHVzaF93aW5kb3codm9pZCk7Ci1zdGF0aWMgdm9pZCBfX2luaXQgZXJyb3IoY2hhciAqbSk7Ci0KLSNkZWZpbmUgTk9fSU5GTEFURV9NQUxMT0MKLQotI2luY2x1ZGUgIi4uL2xpYi9pbmZsYXRlLmMiCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlsbCB0aGUgaW5wdXQgYnVmZmVyLiBUaGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eQotICogYW5kIGF0IGxlYXN0IG9uZSBieXRlIGlzIHJlYWxseSBuZWVkZWQuCi0gKiBSZXR1cm5pbmcgLTEgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgZ3VuemlwKCkgd2lsbCBldmVyIHJldHVybi4KLSAqLwotc3RhdGljIGludCBfX2luaXQgZmlsbF9pbmJ1Zih2b2lkKQorc3RhdGljIGludCBfX2luaXQgY29tcHJfZmlsbCh2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaWYgKGV4aXRfY29kZSkgcmV0dXJuIC0xOwotCQotCWluc2l6ZSA9IHN5c19yZWFkKGNyZF9pbmZkLCBpbmJ1ZiwgSU5CVUZTSVopOwotCWlmIChpbnNpemUgPT0gMCkgewotCQllcnJvcigiUkFNRElTSzogcmFuIG91dCBvZiBjb21wcmVzc2VkIGRhdGEiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlucHRyID0gMTsKLQotCXJldHVybiBpbmJ1ZlswXTsKKwlpbnQgciA9IHN5c19yZWFkKGNyZF9pbmZkLCBidWYsIGxlbik7CisJaWYgKHIgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIlJBTURJU0s6IGVycm9yIHdoaWxlIHJlYWRpbmcgY29tcHJlc3NlZCBkYXRhIik7CisJZWxzZSBpZiAociA9PSAwKQorCQlwcmludGsoS0VSTl9FUlIgIlJBTURJU0s6IEVPRiB3aGlsZSByZWFkaW5nIGNvbXByZXNzZWQgZGF0YSIpOworCXJldHVybiByOwogfQogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFdyaXRlIHRoZSBvdXRwdXQgd2luZG93IHdpbmRvd1swLi5vdXRjbnQtMV0gYW5kIHVwZGF0ZSBjcmMgYW5kIGJ5dGVzX291dC4KLSAqIChVc2VkIGZvciB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb25seS4pCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBmbHVzaF93aW5kb3codm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNvbXByX2ZsdXNoKHZvaWQgKndpbmRvdywgdW5zaWduZWQgaW50IG91dGNudCkKIHsKLSAgICB1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLSAgICB1bnNpZ25lZCBuLCB3cml0dGVuOwotICAgIHVjaCAqaW4sIGNoOwotICAgIAotICAgIHdyaXR0ZW4gPSBzeXNfd3JpdGUoY3JkX291dGZkLCB3aW5kb3csIG91dGNudCk7Ci0gICAgaWYgKHdyaXR0ZW4gIT0gb3V0Y250ICYmIHVuemlwX2Vycm9yID09IDApIHsKLQlwcmludGsoS0VSTl9FUlIgIlJBTURJU0s6IGluY29tcGxldGUgd3JpdGUgKCVkICE9ICVkKSAlbGRcbiIsCi0JICAgICAgIHdyaXR0ZW4sIG91dGNudCwgYnl0ZXNfb3V0KTsKLQl1bnppcF9lcnJvciA9IDE7Ci0gICAgfQotICAgIGluID0gd2luZG93OwotICAgIGZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCSAgICBjaCA9ICppbisrOwotCSAgICBjID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICB9Ci0gICAgY3JjID0gYzsKLSAgICBieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0Y250ID0gMDsKKwlpbnQgd3JpdHRlbiA9IHN5c193cml0ZShjcmRfb3V0ZmQsIHdpbmRvdywgb3V0Y250KTsKKwlpZiAod3JpdHRlbiAhPSBvdXRjbnQpIHsKKwkJaWYgKGRlY29tcHJlc3NfZXJyb3IgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJSQU1ESVNLOiBpbmNvbXBsZXRlIHdyaXRlICglZCAhPSAlZClcbiIsCisJCQkgICAgICAgd3JpdHRlbiwgb3V0Y250KTsKKwkJZGVjb21wcmVzc19lcnJvciA9IDE7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIG91dGNudDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGVycm9yKGNoYXIgKngpCiB7CiAJcHJpbnRrKEtFUk5fRVJSICIlc1xuIiwgeCk7CiAJZXhpdF9jb2RlID0gMTsKLQl1bnppcF9lcnJvciA9IDE7CisJZGVjb21wcmVzc19lcnJvciA9IDE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNyZF9sb2FkKGludCBpbl9mZCwgaW50IG91dF9mZCkKK3N0YXRpYyBpbnQgX19pbml0IGNyZF9sb2FkKGludCBpbl9mZCwgaW50IG91dF9mZCwgZGVjb21wcmVzc19mbiBkZWNvKQogewogCWludCByZXN1bHQ7Ci0KLQlpbnNpemUgPSAwOwkJLyogdmFsaWQgYnl0ZXMgaW4gaW5idWYgKi8KLQlpbnB0ciA9IDA7CQkvKiBpbmRleCBvZiBuZXh0IGJ5dGUgdG8gYmUgcHJvY2Vzc2VkIGluIGluYnVmICovCi0Jb3V0Y250ID0gMDsJCS8qIGJ5dGVzIGluIG91dHB1dCBidWZmZXIgKi8KLQlleGl0X2NvZGUgPSAwOwotCWJ5dGVzX291dCA9IDA7Ci0JY3JjID0gKHVsZykweGZmZmZmZmZmTDsgLyogc2hpZnQgcmVnaXN0ZXIgY29udGVudHMgKi8KLQogCWNyZF9pbmZkID0gaW5fZmQ7CiAJY3JkX291dGZkID0gb3V0X2ZkOwotCWluYnVmID0ga21hbGxvYyhJTkJVRlNJWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmJ1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIlJBTURJU0s6IENvdWxkbid0IGFsbG9jYXRlIGd6aXAgYnVmZmVyXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQl3aW5kb3cgPSBrbWFsbG9jKFdTSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdpbmRvdykgewotCQlwcmludGsoS0VSTl9FUlIgIlJBTURJU0s6IENvdWxkbid0IGFsbG9jYXRlIGd6aXAgd2luZG93XG4iKTsKLQkJa2ZyZWUoaW5idWYpOwotCQlyZXR1cm4gLTE7Ci0JfQotCW1ha2VjcmMoKTsKLQlyZXN1bHQgPSBndW56aXAoKTsKLQlpZiAodW56aXBfZXJyb3IpCisJcmVzdWx0ID0gZGVjbyhOVUxMLCAwLCBjb21wcl9maWxsLCBjb21wcl9mbHVzaCwgTlVMTCwgTlVMTCwgZXJyb3IpOworCWlmIChkZWNvbXByZXNzX2Vycm9yKQogCQlyZXN1bHQgPSAxOwotCWtmcmVlKGluYnVmKTsKLQlrZnJlZSh3aW5kb3cpOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9pbml0L2luaXRyYW1mcy5jIGIvaW5pdC9pbml0cmFtZnMuYwppbmRleCBkOWM5NDFjLi43ZGNkZTdlIDEwMDY0NAotLS0gYS9pbml0L2luaXRyYW1mcy5jCisrKyBiL2luaXQvaW5pdHJhbWZzLmMKQEAgLTM5MCwxMSArMzkwLDEzIEBACiAJcmV0dXJuIGxlbiAtIGNvdW50OwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmx1c2hfYnVmZmVyKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQorc3RhdGljIGludCBfX2luaXQgZmx1c2hfYnVmZmVyKHZvaWQgKmJ1ZnYsIHVuc2lnbmVkIGxlbikKIHsKKwljaGFyICpidWYgPSAoY2hhciAqKSBidWZ2OwogCWludCB3cml0dGVuOworCWludCBvcmlnTGVuID0gbGVuOwogCWlmIChtZXNzYWdlKQotCQlyZXR1cm47CisJCXJldHVybiAtMTsKIAl3aGlsZSAoKHdyaXR0ZW4gPSB3cml0ZV9idWZmZXIoYnVmLCBsZW4pKSA8IGxlbiAmJiAhbWVzc2FnZSkgewogCQljaGFyIGMgPSBidWZbd3JpdHRlbl07CiAJCWlmIChjID09ICcwJykgewpAQCAtNDA4LDg0ICs0MTAsMjggQEAKIAkJfSBlbHNlCiAJCQllcnJvcigianVuayBpbiBjb21wcmVzc2VkIGFyY2hpdmUiKTsKIAl9CisJcmV0dXJuIG9yaWdMZW47CiB9CiAKLS8qCi0gKiBnemlwIGRlY2xhcmF0aW9ucwotICovCitzdGF0aWMgdW5zaWduZWQgbXlfaW5wdHI7ICAgLyogaW5kZXggb2YgbmV4dCBieXRlIHRvIGJlIHByb2Nlc3NlZCBpbiBpbmJ1ZiAqLwogCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCi0KLSNpZm5kZWYgbWVtemVybwotI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQotI2VuZGlmCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgdWNoOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2g7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKLQotI2RlZmluZSBXU0laRSAweDgwMDAgICAgLyogd2luZG93IHNpemUtLW11c3QgYmUgYSBwb3dlciBvZiB0d28sIGFuZCAqLwotCQkJLyogIGF0IGxlYXN0IDMySyBmb3IgemlwJ3MgZGVmbGF0ZSBtZXRob2QgKi8KLQotc3RhdGljIHVjaCAqaW5idWY7Ci1zdGF0aWMgdWNoICp3aW5kb3c7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnNpemU7ICAvKiB2YWxpZCBieXRlcyBpbiBpbmJ1ZiAqLwotc3RhdGljIHVuc2lnbmVkIGlucHRyOyAgIC8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQ7ICAvKiBieXRlcyBpbiBvdXRwdXQgYnVmZmVyICovCi1zdGF0aWMgbG9uZyBieXRlc19vdXQ7Ci0KLSNkZWZpbmUgZ2V0X2J5dGUoKSAgKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiAtMSkKLQkJCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAoc3R1YmJlZCBvdXQpICovCi0jZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSNkZWZpbmUgVHJhY2UoeCkKLSNkZWZpbmUgVHJhY2V2KHgpCi0jZGVmaW5lIFRyYWNldnYoeCkKLSNkZWZpbmUgVHJhY2VjKGMseCkKLSNkZWZpbmUgVHJhY2VjdihjLHgpCi0KLSNkZWZpbmUgU1RBVElDIHN0YXRpYwotI2RlZmluZSBJTklUIF9faW5pdAotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmx1c2hfd2luZG93KHZvaWQpOwotc3RhdGljIHZvaWQgX19pbml0IGVycm9yKGNoYXIgKm0pOwotCi0jZGVmaW5lIE5PX0lORkxBVEVfTUFMTE9DCi0KLSNpbmNsdWRlICIuLi9saWIvaW5mbGF0ZS5jIgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFdyaXRlIHRoZSBvdXRwdXQgd2luZG93IHdpbmRvd1swLi5vdXRjbnQtMV0gYW5kIHVwZGF0ZSBjcmMgYW5kIGJ5dGVzX291dC4KLSAqIChVc2VkIGZvciB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb25seS4pCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBmbHVzaF93aW5kb3codm9pZCkKLXsKLQl1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLQl1bnNpZ25lZCBuOwotCXVjaCAqaW4sIGNoOwotCi0JZmx1c2hfYnVmZmVyKHdpbmRvdywgb3V0Y250KTsKLQlpbiA9IHdpbmRvdzsKLQlmb3IgKG4gPSAwOyBuIDwgb3V0Y250OyBuKyspIHsKLQkJY2ggPSAqaW4rKzsKLQkJYyA9IGNyY18zMl90YWJbKChpbnQpYyBeIGNoKSAmIDB4ZmZdIF4gKGMgPj4gOCk7Ci0JfQotCWNyYyA9IGM7Ci0JYnl0ZXNfb3V0ICs9ICh1bGcpb3V0Y250OwotCW91dGNudCA9IDA7Ci19CisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9nZW5lcmljLmg+CiAKIHN0YXRpYyBjaGFyICogX19pbml0IHVucGFja190b19yb290ZnMoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIGludCBjaGVja19vbmx5KQogewogCWludCB3cml0dGVuOworCWRlY29tcHJlc3NfZm4gZGVjb21wcmVzczsKKwljb25zdCBjaGFyICpjb21wcmVzc19uYW1lOworCXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgbXNnX2J1Zls2NF07CisKIAlkcnlfcnVuID0gY2hlY2tfb25seTsKIAloZWFkZXJfYnVmID0ga21hbGxvYygxMTAsIEdGUF9LRVJORUwpOwogCXN5bWxpbmtfYnVmID0ga21hbGxvYyhQQVRIX01BWCArIE5fQUxJR04oUEFUSF9NQVgpICsgMSwgR0ZQX0tFUk5FTCk7CiAJbmFtZV9idWYgPSBrbWFsbG9jKE5fQUxJR04oUEFUSF9NQVgpLCBHRlBfS0VSTkVMKTsKLQl3aW5kb3cgPSBrbWFsbG9jKFdTSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdpbmRvdyB8fCAhaGVhZGVyX2J1ZiB8fCAhc3ltbGlua19idWYgfHwgIW5hbWVfYnVmKQorCisJaWYgKCFoZWFkZXJfYnVmIHx8ICFzeW1saW5rX2J1ZiB8fCAhbmFtZV9idWYpCiAJCXBhbmljKCJjYW4ndCBhbGxvY2F0ZSBidWZmZXJzIik7CisKIAlzdGF0ZSA9IFN0YXJ0OwogCXRoaXNfaGVhZGVyID0gMDsKIAltZXNzYWdlID0gTlVMTDsKQEAgLTUwNSwyMiArNDUxLDI1IEBACiAJCQljb250aW51ZTsKIAkJfQogCQl0aGlzX2hlYWRlciA9IDA7Ci0JCWluc2l6ZSA9IGxlbjsKLQkJaW5idWYgPSBidWY7Ci0JCWlucHRyID0gMDsKLQkJb3V0Y250ID0gMDsJCS8qIGJ5dGVzIGluIG91dHB1dCBidWZmZXIgKi8KLQkJYnl0ZXNfb3V0ID0gMDsKLQkJY3JjID0gKHVsZykweGZmZmZmZmZmTDsgLyogc2hpZnQgcmVnaXN0ZXIgY29udGVudHMgKi8KLQkJbWFrZWNyYygpOwotCQlndW56aXAoKTsKKwkJZGVjb21wcmVzcyA9IGRlY29tcHJlc3NfbWV0aG9kKGJ1ZiwgbGVuLCAmY29tcHJlc3NfbmFtZSk7CisJCWlmIChkZWNvbXByZXNzKQorCQkJZGVjb21wcmVzcyhidWYsIGxlbiwgTlVMTCwgZmx1c2hfYnVmZmVyLCBOVUxMLAorCQkJCSAgICZteV9pbnB0ciwgZXJyb3IpOworCQllbHNlIGlmIChjb21wcmVzc19uYW1lKSB7CisJCQlpZiAoIW1lc3NhZ2UpIHsKKwkJCQlzbnByaW50Zihtc2dfYnVmLCBzaXplb2YgbXNnX2J1ZiwKKwkJCQkJICJjb21wcmVzc2lvbiBtZXRob2QgJXMgbm90IGNvbmZpZ3VyZWQiLAorCQkJCQkgY29tcHJlc3NfbmFtZSk7CisJCQkJbWVzc2FnZSA9IG1zZ19idWY7CisJCQl9CisJCX0KIAkJaWYgKHN0YXRlICE9IFJlc2V0KQotCQkJZXJyb3IoImp1bmsgaW4gZ3ppcHBlZCBhcmNoaXZlIik7Ci0JCXRoaXNfaGVhZGVyID0gc2F2ZWRfb2Zmc2V0ICsgaW5wdHI7Ci0JCWJ1ZiArPSBpbnB0cjsKLQkJbGVuIC09IGlucHRyOworCQkJZXJyb3IoImp1bmsgaW4gY29tcHJlc3NlZCBhcmNoaXZlIik7CisJCXRoaXNfaGVhZGVyID0gc2F2ZWRfb2Zmc2V0ICsgbXlfaW5wdHI7CisJCWJ1ZiArPSBteV9pbnB0cjsKKwkJbGVuIC09IG15X2lucHRyOwogCX0KIAlkaXJfdXRpbWUoKTsKLQlrZnJlZSh3aW5kb3cpOwogCWtmcmVlKG5hbWVfYnVmKTsKIAlrZnJlZShzeW1saW5rX2J1Zik7CiAJa2ZyZWUoaGVhZGVyX2J1Zik7CkBAIC01NzksNyArNTI4LDcgQEAKIAljaGFyICplcnIgPSB1bnBhY2tfdG9fcm9vdGZzKF9faW5pdHJhbWZzX3N0YXJ0LAogCQkJIF9faW5pdHJhbWZzX2VuZCAtIF9faW5pdHJhbWZzX3N0YXJ0LCAwKTsKIAlpZiAoZXJyKQotCQlwYW5pYyhlcnIpOworCQlwYW5pYyhlcnIpOwkvKiBGYWlsZWQgdG8gZGVjb21wcmVzcyBJTlRFUk5BTCBpbml0cmFtZnMgKi8KIAlpZiAoaW5pdHJkX3N0YXJ0KSB7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfUkFNCiAJCWludCBmZDsKQEAgLTYwNSw5ICs1NTQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5wYWNraW5nIGluaXRyYW1mcy4uLiIpOwogCQllcnIgPSB1bnBhY2tfdG9fcm9vdGZzKChjaGFyICopaW5pdHJkX3N0YXJ0LAogCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgMCk7Ci0JCWlmIChlcnIpCi0JCQlwYW5pYyhlcnIpOwotCQlwcmludGsoIiBkb25lXG4iKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKCIgZmFpbGVkIVxuIik7CisJCQlwcmludGsoS0VSTl9FTUVSRyAiJXNcbiIsIGVycik7CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiBkb25lXG4iKTsKKwkJfQogCQlmcmVlX2luaXRyZCgpOwogI2VuZGlmCiAJfQpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA4MzY5N2UxLi42YmY4M2FmIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrcHJvdGVjdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMTM1LDE0ICsxMzYsMTQgQEAKICAqIGdyZWF0ZXIgdGhhbiAwLCBsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgYWN0aXZhdGVkIGluCiAgKiBTTVAgbW9kZSB0byA8TlVNPi4KICAqLwotI2lmbmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2lvYXBpY19zZXR1cCh2b2lkKSB7fTsKLSNlbmRpZgorCit2b2lkIF9fd2VhayBhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQodm9pZCkgeyB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vc21wKGNoYXIgKnN0cikKIHsKIAlzZXR1cF9tYXhfY3B1cyA9IDA7Ci0JZGlzYWJsZV9pb2FwaWNfc2V0dXAoKTsKKwlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTIsMTQgKzE1MywxNCBAQAogewogCWdldF9vcHRpb24oJnN0ciwgJnNldHVwX21heF9jcHVzKTsKIAlpZiAoc2V0dXBfbWF4X2NwdXMgPT0gMCkKLQkJZGlzYWJsZV9pb2FwaWNfc2V0dXAoKTsKKwkJYXJjaF9kaXNhYmxlX3NtcF9zdXBwb3J0KCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogZWFybHlfcGFyYW0oIm1heGNwdXMiLCBtYXhjcHVzKTsKICNlbHNlCi0jZGVmaW5lIHNldHVwX21heF9jcHVzIE5SX0NQVVMKK2NvbnN0IHVuc2lnbmVkIGludCBzZXR1cF9tYXhfY3B1cyA9IE5SX0NQVVM7CiAjZW5kaWYKIAogLyoKQEAgLTU0MCw2ICs1NDEsMTIgQEAKIAkgKi8KIAlsb2NrZGVwX2luaXQoKTsKIAlkZWJ1Z19vYmplY3RzX2Vhcmx5X2luaXQoKTsKKworCS8qCisJICogU2V0IHVwIHRoZSB0aGUgaW5pdGlhbCBjYW5hcnkgQVNBUDoKKwkgKi8KKwlib290X2luaXRfc3RhY2tfY2FuYXJ5KCk7CisKIAljZ3JvdXBfaW5pdF9lYXJseSgpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCA1NGI0MDc3Li5hOGRkYWRiIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC0xMTU2LDEwICsxMTU2LDEyIEBACiAJb21xc3RhdC5tcV9mbGFncyA9IGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCWlmICh1X21xc3RhdCkgewogCQlhdWRpdF9tcV9nZXRzZXRhdHRyKG1xZGVzLCAmbXFzdGF0KTsKKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCQlpZiAobXFzdGF0Lm1xX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCWZpbHAtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAkJZWxzZQogCQkJZmlscC0+Zl9mbGFncyAmPSB+T19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAl9CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggMDVkNTFkMi4uZjIzOWQ4NyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwY19uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTM4Myw2ICszODQsNyBAQAogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQogCQlnb3RvIG5vX2ZpbGU7CisJaW1hX3NobV9jaGVjayhmaWxlKTsKIAogCWlkID0gaXBjX2FkZGlkKCZzaG1faWRzKG5zKSwgJnNocC0+c2htX3Blcm0sIG5zLT5zaG1fY3RsbW5pKTsKIAlpZiAoaWQgPCAwKSB7CkBAIC04ODcsNiArODg5LDcgQEAKIAlmaWxlID0gYWxsb2NfZmlsZShwYXRoLm1udCwgcGF0aC5kZW50cnksIGZfbW9kZSwgJnNobV9maWxlX29wZXJhdGlvbnMpOwogCWlmICghZmlsZSkKIAkJZ290byBvdXRfZnJlZTsKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2ZkOwogCWZpbGUtPmZfbWFwcGluZyA9IHNocC0+c2htX2ZpbGUtPmZfbWFwcGluZzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA5ZWRiNWM0Li5jNTAwY2E3IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xMDcxLDcgKzEwNzEsOCBAQAogCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CiAJfQogCi0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogCiAgZnJlZV9jZ19saW5rczoKIAlmcmVlX2NnX2xpbmtzKCZ0bXBfY2dfbGlua3MpOwpAQCAtMTYyNyw3ICsxNjI4LDcgQEAKIHN0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNncm91cF9kb3BzID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2dyb3VwX2RvcHMgPSB7CiAJCS5kX2lwdXQgPSBjZ3JvdXBfZGlwdXQsCiAJfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggZWZkMzBjYy4uMTY3ZTFlMyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC05ODAsMTIgKzk4MCw5IEBACiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhsb3dfd2F0ZXJfbG9jayk7CiAJc3RhdGljIGludCBsb3dlc3RfdG9fZGF0ZSA9IFRIUkVBRF9TSVpFOwotCXVuc2lnbmVkIGxvbmcgKm4gPSBlbmRfb2Zfc3RhY2soY3VycmVudCk7CiAJdW5zaWduZWQgbG9uZyBmcmVlOwogCi0Jd2hpbGUgKCpuID09IDApCi0JCW4rKzsKLQlmcmVlID0gKHVuc2lnbmVkIGxvbmcpbiAtICh1bnNpZ25lZCBsb25nKWVuZF9vZl9zdGFjayhjdXJyZW50KTsKKwlmcmVlID0gc3RhY2tfbm90X3VzZWQoY3VycmVudCk7CiAKIAlpZiAoZnJlZSA+PSBsb3dlc3RfdG9fZGF0ZSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNDg1NGMyYy4uNjcxNWViYyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KQEAgLTIxMiw2ICsyMTMsOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJdW5zaWduZWQgbG9uZyAqc3RhY2tlbmQ7CisKIAlpbnQgZXJyOwogCiAJcHJlcGFyZV90b19jb3B5KG9yaWcpOwpAQCAtMjM3LDYgKzI0MCw4IEBACiAJCWdvdG8gb3V0OwogCiAJc2V0dXBfdGhyZWFkX3N0YWNrKHRzaywgb3JpZyk7CisJc3RhY2tlbmQgPSBlbmRfb2Zfc3RhY2sodHNrKTsKKwkqc3RhY2tlbmQgPSBTVEFDS19FTkRfTUFHSUM7CS8qIGZvciBvdmVyZmxvdyBkZXRlY3Rpb24gKi8KIAogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgogCXRzay0+c3RhY2tfY2FuYXJ5ID0gZ2V0X3JhbmRvbV9pbnQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggN2RlMTFiZC4uYzY4N2JhNCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTQ2LDcgKzQ2LDEwIEBACiAJZGVzYy0+aXJxX2NvdW50ID0gMDsKIAlkZXNjLT5pcnFzX3VuaGFuZGxlZCA9IDA7CiAjaWZkZWYgQ09ORklHX1NNUAotCWNwdW1hc2tfc2V0YWxsKCZkZXNjLT5hZmZpbml0eSk7CisJY3B1bWFza19zZXRhbGwoZGVzYy0+YWZmaW5pdHkpOworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOworI2VuZGlmCiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CkBAIC03OCw2ICs4MSw3IEBACiAJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9iYWRfaXJxOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJZGVzYy0+bmFtZSA9IE5VTEw7CisJY2xlYXJfa3N0YXRfaXJxcyhkZXNjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI5MCw3ICsyOTQsOCBAQAogCQlkZXNjLT5jaGlwLT5tYXNrX2FjayhpcnEpOwogCWVsc2UgewogCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7Ci0JCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJfQogfQogCkBAIC00NzYsNyArNDgxLDggQEAKIAlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIFN0YXJ0IGhhbmRsaW5nIHRoZSBpcnEgKi8KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIAlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKIAogCS8qIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDNhYmE4ZDEuLjllYmY3NzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKIApAQCAtNjksNiArNzAsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobnJfaXJxcyk7CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorCiBzdGF0aWMgc3RydWN0IGlycV9kZXNjIGlycV9kZXNjX2luaXQgPSB7CiAJLmlycQkgICAgPSAtMSwKIAkuc3RhdHVzCSAgICA9IElSUV9ESVNBQkxFRCwKQEAgLTc2LDI2ICs3OCwyNSBAQAogCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJLmRlcHRoICAgICAgPSAxLAogCS5sb2NrICAgICAgID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaXJxX2Rlc2NfaW5pdC5sb2NrKSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLmFmZmluaXR5ICAgPSBDUFVfTUFTS19BTEwKLSNlbmRpZgogfTsKIAogdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpCiB7Ci0JdW5zaWduZWQgbG9uZyBieXRlczsKLQljaGFyICpwdHI7CiAJaW50IG5vZGU7Ci0KLQkvKiBDb21wdXRlIGhvdyBtYW55IGJ5dGVzIHdlIG5lZWQgcGVyIGlycSBhbmQgYWxsb2NhdGUgdGhlbSAqLwotCWJ5dGVzID0gbnIgKiBzaXplb2YodW5zaWduZWQgaW50KTsKKwl2b2lkICpwdHI7CiAKIAlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlwdHIgPSBremFsbG9jX25vZGUoYnl0ZXMsIEdGUF9BVE9NSUMsIG5vZGUpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGtzdGF0X2lycXMgb24gY3B1ICVkIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7CisJcHRyID0ga3phbGxvY19ub2RlKG5yICogc2l6ZW9mKCpkZXNjLT5rc3RhdF9pcnFzKSwgR0ZQX0FUT01JQywgbm9kZSk7CiAKLQlpZiAocHRyKQotCQlkZXNjLT5rc3RhdF9pcnFzID0gKHVuc2lnbmVkIGludCAqKXB0cjsKKwkvKgorCSAqIGRvbid0IG92ZXJ3aXRlIGlmIGNhbiBub3QgZ2V0IG5ldyBvbmUKKwkgKiBpbml0X2NvcHlfa3N0YXRfaXJxcygpIGNvdWxkIHN0aWxsIHVzZSBvbGQgb25lCisJICovCisJaWYgKHB0cikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiICBhbGxvYyBrc3RhdF9pcnFzIG9uIGNwdSAlZCBub2RlICVkXG4iLAorCQkJIGNwdSwgbm9kZSk7CisJCWRlc2MtPmtzdGF0X2lycXMgPSBwdHI7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uZV9pcnFfZGVzYyhpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUpCkBAIC0xMTMsNiArMTE0LDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBrc3RhdF9pcnFzXG4iKTsKIAkJQlVHX09OKDEpOwogCX0KKwlpZiAoIWluaXRfYWxsb2NfZGVzY19tYXNrcyhkZXNjLCBjcHUsIGZhbHNlKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2MgaXJxX2Rlc2MgY3B1bWFza3NcbiIpOworCQlCVUdfT04oMSk7CisJfQogCWFyY2hfaW5pdF9jaGlwX2RhdGEoZGVzYywgY3B1KTsKIH0KIApAQCAtMTIxLDcgKzEyNiw3IEBACiAgKi8KIERFRklORV9TUElOTE9DSyhzcGFyc2VfaXJxX2xvY2spOwogCi1zdHJ1Y3QgaXJxX2Rlc2MgKmlycV9kZXNjX3B0cnNbTlJfSVJRU10gX19yZWFkX21vc3RseTsKK3N0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY19sZWdhY3lbTlJfSVJRU19MRUdBQ1ldIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0gewogCVswIC4uLiBOUl9JUlFTX0xFR0FDWS0xXSA9IHsKQEAgLTEzMSwxNCArMTM2LDEwIEBACiAJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJCS5kZXB0aAkgICAgPSAxLAogCQkubG9jawkgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzY19pbml0LmxvY2spLAotI2lmZGVmIENPTkZJR19TTVAKLQkJLmFmZmluaXR5ICAgPSBDUFVfTUFTS19BTEwKLSNlbmRpZgogCX0KIH07CiAKLS8qIEZJWE1FOiB1c2UgYm9vdG1lbSBhbGxvYyAuLi4qLwotc3RhdGljIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2xlZ2FjeVtOUl9JUlFTX0xFR0FDWV1bTlJfQ1BVU107CitzdGF0aWMgdW5zaWduZWQgaW50ICprc3RhdF9pcnFzX2xlZ2FjeTsKIAogaW50IF9faW5pdCBlYXJseV9pcnFfaW5pdCh2b2lkKQogewpAQCAtMTQ4LDE4ICsxNDksMzAgQEAKIAogCWluaXRfaXJxX2RlZmF1bHRfYWZmaW5pdHkoKTsKIAorCSAvKiBpbml0aWFsaXplIG5yX2lycXMgYmFzZWQgb24gbnJfY3B1X2lkcyAqLworCWFyY2hfcHJvYmVfbnJfaXJxcygpOworCXByaW50ayhLRVJOX0lORk8gIk5SX0lSUVM6JWQgbnJfaXJxczolZFxuIiwgTlJfSVJRUywgbnJfaXJxcyk7CisKIAlkZXNjID0gaXJxX2Rlc2NfbGVnYWN5OwogCWxlZ2FjeV9jb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2NfbGVnYWN5KTsKIAorCS8qIGFsbG9jYXRlIGlycV9kZXNjX3B0cnMgYXJyYXkgYmFzZWQgb24gbnJfaXJxcyAqLworCWlycV9kZXNjX3B0cnMgPSBhbGxvY19ib290bWVtKG5yX2lycXMgKiBzaXplb2Yodm9pZCAqKSk7CisKKwkvKiBhbGxvY2F0ZSBiYXNlZCBvbiBucl9jcHVfaWRzICovCisJLyogRklYTUU6IGludmVydCBrc3RhdF9pcmdzLCBhbmQgaXQnZCBiZSBhIHBlcl9jcHVfYWxsb2MnZCB0aGluZyAqLworCWtzdGF0X2lycXNfbGVnYWN5ID0gYWxsb2NfYm9vdG1lbShOUl9JUlFTX0xFR0FDWSAqIG5yX2NwdV9pZHMgKgorCQkJCQkgIHNpemVvZihpbnQpKTsKKwogCWZvciAoaSA9IDA7IGkgPCBsZWdhY3lfY291bnQ7IGkrKykgewogCQlkZXNjW2ldLmlycSA9IGk7Ci0JCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfbGVnYWN5W2ldOworCQlkZXNjW2ldLmtzdGF0X2lycXMgPSBrc3RhdF9pcnFzX2xlZ2FjeSArIGkgKiBucl9jcHVfaWRzOwogCQlsb2NrZGVwX3NldF9jbGFzcygmZGVzY1tpXS5sb2NrLCAmaXJxX2Rlc2NfbG9ja19jbGFzcyk7Ci0KKwkJaW5pdF9hbGxvY19kZXNjX21hc2tzKCZkZXNjW2ldLCAwLCB0cnVlKTsKIAkJaXJxX2Rlc2NfcHRyc1tpXSA9IGRlc2MgKyBpOwogCX0KIAotCWZvciAoaSA9IGxlZ2FjeV9jb3VudDsgaSA8IE5SX0lSUVM7IGkrKykKKwlmb3IgKGkgPSBsZWdhY3lfY291bnQ7IGkgPCBucl9pcnFzOyBpKyspCiAJCWlycV9kZXNjX3B0cnNbaV0gPSBOVUxMOwogCiAJcmV0dXJuIGFyY2hfZWFybHlfaXJxX2luaXQoKTsKQEAgLTE2Nyw3ICsxODAsMTAgQEAKIAogc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzYyh1bnNpZ25lZCBpbnQgaXJxKQogewotCXJldHVybiAoaXJxIDwgTlJfSVJRUykgPyBpcnFfZGVzY19wdHJzW2lycV0gOiBOVUxMOworCWlmIChpcnFfZGVzY19wdHJzICYmIGlycSA8IG5yX2lycXMpCisJCXJldHVybiBpcnFfZGVzY19wdHJzW2lycV07CisKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzY19hbGxvY19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKQEAgLTE3NiwxMCArMTkyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBub2RlOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlycSA+PSBOUl9JUlFTIGluIGlycV90b19kZXNjX2FsbG9jOiAlZCAlZFxuIiwKLQkJCQlpcnEsIE5SX0lSUVMpOwotCQlXQVJOX09OKDEpOworCWlmIChpcnEgPj0gbnJfaXJxcykgeworCQlXQVJOKDEsICJpcnEgKCVkKSA+PSBucl9pcnFzICglZCkgaW4gaXJxX3RvX2Rlc2NfYWxsb2NcbiIsCisJCQlpcnEsIG5yX2lycXMpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTIyMSwxMiArMjM2LDEwIEBACiAJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJCS5kZXB0aCA9IDEsCiAJCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaXJxX2Rlc2MtPmxvY2spLAotI2lmZGVmIENPTkZJR19TTVAKLQkJLmFmZmluaXR5ID0gQ1BVX01BU0tfQUxMCi0jZW5kaWYKIAl9CiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfYWxsW05SX0lSUVNdW05SX0NQVVNdOwogaW50IF9faW5pdCBlYXJseV9pcnFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKQEAgLTIzNSwxMiArMjQ4LDE2IEBACiAKIAlpbml0X2lycV9kZWZhdWx0X2FmZmluaXR5KCk7CiAKKwlwcmludGsoS0VSTl9JTkZPICJOUl9JUlFTOiVkXG4iLCBOUl9JUlFTKTsKKwogCWRlc2MgPSBpcnFfZGVzYzsKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2MpOwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGVzY1tpXS5pcnEgPSBpOwotCisJCWluaXRfYWxsb2NfZGVzY19tYXNrcygmZGVzY1tpXSwgMCwgdHJ1ZSk7CisJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfYWxsW2ldOworCX0KIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQogCkBAIC0yNTUsNiArMjcyLDExIEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19TUEFSU0VfSVJRICovCiAKK3ZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MtPmtzdGF0X2lycXMsIDAsIG5yX2NwdV9pZHMgKiBzaXplb2YoKihkZXNjLT5rc3RhdF9pcnFzKSkpOworfQorCiAvKgogICogV2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yPwogICogRWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWxmLgpAQCAtMzI4LDYgKzM1MCw4IEBACiAJaXJxcmV0dXJuX3QgcmV0LCByZXR2YWwgPSBJUlFfTk9ORTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAorCVdBUk5fT05DRSghaW5faXJxKCksICJCVUc6IElSUSBoYW5kbGVyIGNhbGxlZCBmcm9tIG5vbi1oYXJkaXJxIGNvbnRleHQhIik7CisKIAlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCkBAIC0zNDcsNiArMzcxLDExIEBACiB9CiAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQKKyMgd2FybmluZyBfX2RvX0lSUSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgY29udmVydCB0byBwcm9wZXIgZmxvdyBoYW5kbGVycworI2VuZGlmCisKIC8qKgogICogX19kb19JUlEgLSBvcmlnaW5hbCBhbGwgaW4gb25lIGhpZ2hsZXZlbCBJUlEgaGFuZGxlcgogICogQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKQEAgLTQ2NywxMiArNDk2LDEwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJcmV0dXJuIGRlc2MgPyBkZXNjLT5rc3RhdF9pcnFzW2NwdV0gOiAwOwogfQotI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGtzdGF0X2lycXNfY3B1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggZTZkMGE0My4uZWUxYWE5ZiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0xNSw4ICsxNSwxNiBAQAogCiBleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CiBleHRlcm4gdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpOworZXh0ZXJuIHZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHNwaW5sb2NrX3Qgc3BhcnNlX2lycV9sb2NrOworCisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKy8qIGlycV9kZXNjX3B0cnMgYWxsb2NhdGVkIGF0IGJvb3QgdGltZSAqLworZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnM7CisjZWxzZQorLyogaXJxX2Rlc2NfcHRycyBpcyBhIGZpeGVkIHNpemUgYXJyYXkgKi8KIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgKmlycV9kZXNjX3B0cnNbTlJfSVJRU107CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMjkxZjAzNi4uNjQ1OGU5OSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC05MCwxNCArOTAsMTQgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BDTlRYVCB8fCBkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKLQkJY3B1bWFza19jb3B5KCZkZXNjLT5hZmZpbml0eSwgY3B1bWFzayk7CisJCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgY3B1bWFzayk7CiAJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2spOwogCX0gZWxzZSB7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCQljcHVtYXNrX2NvcHkoJmRlc2MtPnBlbmRpbmdfbWFzaywgY3B1bWFzayk7CisJCWNwdW1hc2tfY29weShkZXNjLT5wZW5kaW5nX21hc2ssIGNwdW1hc2spOwogCX0KICNlbHNlCi0JY3B1bWFza19jb3B5KCZkZXNjLT5hZmZpbml0eSwgY3B1bWFzayk7CisJY3B1bWFza19jb3B5KGRlc2MtPmFmZmluaXR5LCBjcHVtYXNrKTsKIAlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBjcHVtYXNrKTsKICNlbmRpZgogCWRlc2MtPnN0YXR1cyB8PSBJUlFfQUZGSU5JVFlfU0VUOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAvKgogICogR2VuZXJpYyB2ZXJzaW9uIG9mIHRoZSBhZmZpbml0eSBhdXRvc2VsZWN0b3IuCiAgKi8KLWludCBkb19pcnFfc2VsZWN0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3N0YXRpYyBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCWlmICghaXJxX2Nhbl9zZXRfYWZmaW5pdHkoaXJxKSkKIAkJcmV0dXJuIDA7CkBAIC0xMTksMjEgKzExOSwyMSBAQAogCSAqIG9uZSBvZiB0aGUgdGFyZ2V0cyBpcyBvbmxpbmUuCiAJICovCiAJaWYgKGRlc2MtPnN0YXR1cyAmIChJUlFfQUZGSU5JVFlfU0VUIHwgSVJRX05PX0JBTEFOQ0lORykpIHsKLQkJaWYgKGNwdW1hc2tfYW55X2FuZCgmZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykKKwkJaWYgKGNwdW1hc2tfYW55X2FuZChkZXNjLT5hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKQogCQkgICAgPCBucl9jcHVfaWRzKQogCQkJZ290byBzZXRfYWZmaW5pdHk7CiAJCWVsc2UKIAkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0FGRklOSVRZX1NFVDsKIAl9CiAKLQljcHVtYXNrX2FuZCgmZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaywgaXJxX2RlZmF1bHRfYWZmaW5pdHkpOworCWNwdW1hc2tfYW5kKGRlc2MtPmFmZmluaXR5LCBjcHVfb25saW5lX21hc2ssIGlycV9kZWZhdWx0X2FmZmluaXR5KTsKIHNldF9hZmZpbml0eToKLQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCAmZGVzYy0+YWZmaW5pdHkpOworCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGRlc2MtPmFmZmluaXR5KTsKIAogCXJldHVybiAwOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQorc3RhdGljIGlubGluZSBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQogewogCXJldHVybiBpcnFfc2VsZWN0X2FmZmluaXR5KGlycSk7CiB9CkBAIC0xNDksMTQgKzE0OSwxNCBAQAogCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkoaXJxLCBkZXNjKTsKKwlyZXQgPSBzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBkb19pcnFfc2VsZWN0X2FmZmluaXR5KGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3N0YXRpYyBpbmxpbmUgaW50IHNldHVwX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSw5ICszODksOSBAQAogICogYWxsb2NhdGUgc3BlY2lhbCBpbnRlcnJ1cHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZS4KICAqLwogc3RhdGljIGludAotX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICogZGVzYywgc3RydWN0IGlycWFjdGlvbiAqbmV3KQorX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpCiB7Ci0Jc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKnA7CisJc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKm9sZF9wdHI7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNoYXJlZCA9IDA7CkBAIC00MjMsOCArNDIzLDggQEAKIAkgKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGNvZGUgaGFzIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHkKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXAgPSAmZGVzYy0+YWN0aW9uOwotCW9sZCA9ICpwOworCW9sZF9wdHIgPSAmZGVzYy0+YWN0aW9uOworCW9sZCA9ICpvbGRfcHRyOwogCWlmIChvbGQpIHsKIAkJLyoKIAkJICogQ2FuJ3Qgc2hhcmUgaW50ZXJydXB0cyB1bmxlc3MgYm90aCBhZ3JlZSB0byBhbmQgYXJlCkBAIC00NDcsOCArNDQ3LDggQEAKIAogCQkvKiBhZGQgbmV3IGludGVycnVwdCBhdCBlbmQgb2YgaXJxIHF1ZXVlICovCiAJCWRvIHsKLQkJCXAgPSAmb2xkLT5uZXh0OwotCQkJb2xkID0gKnA7CisJCQlvbGRfcHRyID0gJm9sZC0+bmV4dDsKKwkJCW9sZCA9ICpvbGRfcHRyOwogCQl9IHdoaWxlIChvbGQpOwogCQlzaGFyZWQgPSAxOwogCX0KQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT19CQUxBTkNJTkc7CiAKIAkJLyogU2V0IGRlZmF1bHQgYWZmaW5pdHkgbWFzayBvbmNlIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgKi8KLQkJZG9faXJxX3NlbGVjdF9hZmZpbml0eShpcnEsIGRlc2MpOworCQlzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCiAJfSBlbHNlIGlmICgobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQogCQkJJiYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQkJCShpbnQpKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykpOwogCX0KIAotCSpwID0gbmV3OworCSpvbGRfcHRyID0gbmV3OwogCiAJLyogUmVzZXQgYnJva2VuIGlycSBkZXRlY3Rpb24gd2hlbiBpbnN0YWxsaW5nIG5ldyBoYW5kbGVyICovCiAJZGVzYy0+aXJxX2NvdW50ID0gMDsKQEAgLTU0OSw5ICs1NDksMTAyIEBACiAKIAlyZXR1cm4gX19zZXR1cF9pcnEoaXJxLCBkZXNjLCBhY3QpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2V0dXBfaXJxKTsKKworIC8qCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIGFuIGlycWFjdGlvbiAtIHVzZWQgdG8gZnJlZQorICogcmVndWxhciBhbmQgc3BlY2lhbCBpbnRlcnJ1cHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gKl9fZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCAqKmFjdGlvbl9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk4oaW5faW50ZXJydXB0KCksICJUcnlpbmcgdG8gZnJlZSBJUlEgJWQgZnJvbSBJUlEgY29udGV4dCFcbiIsIGlycSk7CisKKwlpZiAoIWRlc2MpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGFjdGlvbnMgcGVyIElSUSBkZXNjcmlwdG9yLCBmaW5kIHRoZSByaWdodAorCSAqIG9uZSBiYXNlZCBvbiB0aGUgZGV2X2lkOgorCSAqLworCWFjdGlvbl9wdHIgPSAmZGVzYy0+YWN0aW9uOworCWZvciAoOzspIHsKKwkJYWN0aW9uID0gKmFjdGlvbl9wdHI7CisKKwkJaWYgKCFhY3Rpb24pIHsKKwkJCVdBUk4oMSwgIlRyeWluZyB0byBmcmVlIGFscmVhZHktZnJlZSBJUlEgJWRcbiIsIGlycSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKGFjdGlvbi0+ZGV2X2lkID09IGRldl9pZCkKKwkJCWJyZWFrOworCQlhY3Rpb25fcHRyID0gJmFjdGlvbi0+bmV4dDsKKwl9CisKKwkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzOiAqLworCSphY3Rpb25fcHRyID0gYWN0aW9uLT5uZXh0OworCisJLyogQ3VycmVudGx5IHVzZWQgb25seSBieSBVTUwsIG1pZ2h0IGRpc2FwcGVhciBvbmUgZGF5OiAqLworI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKKwlpZiAoZGVzYy0+Y2hpcC0+cmVsZWFzZSkKKwkJZGVzYy0+Y2hpcC0+cmVsZWFzZShpcnEsIGRldl9pZCk7CisjZW5kaWYKKworCS8qIElmIHRoaXMgd2FzIHRoZSBsYXN0IGhhbmRsZXIsIHNodXQgZG93biB0aGUgSVJRIGxpbmU6ICovCisJaWYgKCFkZXNjLT5hY3Rpb24pIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKKwkJaWYgKGRlc2MtPmNoaXAtPnNodXRkb3duKQorCQkJZGVzYy0+Y2hpcC0+c2h1dGRvd24oaXJxKTsKKwkJZWxzZQorCQkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7CisKKwkvKiBNYWtlIHN1cmUgaXQncyBub3QgYmVpbmcgdXNlZCBvbiBhbm90aGVyIENQVTogKi8KKwlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQorCS8qCisJICogSXQncyBhIHNoYXJlZCBJUlEgLS0gdGhlIGRyaXZlciBvdWdodCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gSVJRCisJICogZXZlbnQgdG8gaGFwcGVuIGV2ZW4gbm93IGl0J3MgYmVpbmcgZnJlZWQsIHNvIGxldCdzIG1ha2Ugc3VyZSB0aGF0CisJICogaXMgc28gYnkgZG9pbmcgYW4gZXh0cmEgY2FsbCB0byB0aGUgaGFuZGxlciAuLi4uCisJICoKKwkgKiAoIFdlIGRvIHRoaXMgYWZ0ZXIgYWN0dWFsbHkgZGVyZWdpc3RlcmluZyBpdCwgdG8gbWFrZSBzdXJlIHRoYXQgYQorCSAqICAgJ3JlYWwnIElSUSBkb2Vzbid0IHJ1biBpbiAqIHBhcmFsbGVsIHdpdGggb3VyIGZha2UuICkKKwkgKi8KKwlpZiAoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJYWN0aW9uLT5oYW5kbGVyKGlycSwgZGV2X2lkKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKyNlbmRpZgorCXJldHVybiBhY3Rpb247Cit9CiAKIC8qKgotICoJZnJlZV9pcnEgLSBmcmVlIGFuIGludGVycnVwdAorICoJcmVtb3ZlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CisgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCisgKglAYWN0OiBpcnFhY3Rpb24gZm9yIHRoZSBpbnRlcnJ1cHQKKyAqCisgKiBVc2VkIHRvIHJlbW92ZSBpbnRlcnJ1cHRzIHN0YXRpY2FsbHkgc2V0dXAgYnkgdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcy4KKyAqLwordm9pZCByZW1vdmVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdCkKK3sKKwlfX2ZyZWVfaXJxKGlycSwgYWN0LT5kZXZfaWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX2lycSk7CisKKy8qKgorICoJZnJlZV9pcnEgLSBmcmVlIGFuIGludGVycnVwdCBhbGxvY2F0ZWQgd2l0aCByZXF1ZXN0X2lycQogICoJQGlycTogSW50ZXJydXB0IGxpbmUgdG8gZnJlZQogICoJQGRldl9pZDogRGV2aWNlIGlkZW50aXR5IHRvIGZyZWUKICAqCkBAIC01NjYsNzMgKzY1OSw3IEBACiAgKi8KIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0Jc3RydWN0IGlycWFjdGlvbiAqKnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOwotCi0JaWYgKCFkZXNjKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXAgPSAmZGVzYy0+YWN0aW9uOwotCWZvciAoOzspIHsKLQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uID0gKnA7Ci0KLQkJaWYgKGFjdGlvbikgewotCQkJc3RydWN0IGlycWFjdGlvbiAqKnBwID0gcDsKLQotCQkJcCA9ICZhY3Rpb24tPm5leHQ7Ci0JCQlpZiAoYWN0aW9uLT5kZXZfaWQgIT0gZGV2X2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzICovCi0JCQkqcHAgPSBhY3Rpb24tPm5leHQ7Ci0KLQkJCS8qIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgVU1MLCBtaWdodCBkaXNhcHBlYXIgb25lIGRheS4qLwotI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKLQkJCWlmIChkZXNjLT5jaGlwLT5yZWxlYXNlKQotCQkJCWRlc2MtPmNoaXAtPnJlbGVhc2UoaXJxLCBkZXZfaWQpOwotI2VuZGlmCi0KLQkJCWlmICghZGVzYy0+YWN0aW9uKSB7Ci0JCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJCQlpZiAoZGVzYy0+Y2hpcC0+c2h1dGRvd24pCi0JCQkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGlycSk7Ci0JCQkJZWxzZQotCQkJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7Ci0KLQkJCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyB1c2VkIG9uIGFub3RoZXIgQ1BVICovCi0JCQlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlEKLQkJCS8qCi0JCQkgKiBJdCdzIGEgc2hhcmVkIElSUSAtLSB0aGUgZHJpdmVyIG91Z2h0IHRvIGJlCi0JCQkgKiBwcmVwYXJlZCBmb3IgaXQgdG8gaGFwcGVuIGV2ZW4gbm93IGl0J3MKLQkJCSAqIGJlaW5nIGZyZWVkLCBzbyBsZXQncyBtYWtlIHN1cmUuLi4uICBXZSBkbwotCQkJICogdGhpcyBhZnRlciBhY3R1YWxseSBkZXJlZ2lzdGVyaW5nIGl0LCB0bwotCQkJICogbWFrZSBzdXJlIHRoYXQgYSAncmVhbCcgSVJRIGRvZXNuJ3QgcnVuIGluCi0JCQkgKiBwYXJhbGxlbCB3aXRoIG91ciBmYWtlCi0JCQkgKi8KLQkJCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKLQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQkJYWN0aW9uLT5oYW5kbGVyKGlycSwgZGV2X2lkKTsKLQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQl9Ci0jZW5kaWYKLQkJCWtmcmVlKGFjdGlvbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBhbHJlYWR5LWZyZWUgSVJRICVkXG4iLCBpcnEpOwotI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQotCQlkdW1wX3N0YWNrKCk7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCWtmcmVlKF9fZnJlZV9pcnEoaXJxLCBkZXZfaWQpKTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9pcnEpOwogCkBAIC02NzksMTEgKzcwNiwxMiBAQAogCSAqIHRoZSBiZWhhdmlvciBpcyBjbGFzc2lmaWVkIGFzICJ3aWxsIG5vdCBmaXgiIHNvIHdlIG5lZWQgdG8KIAkgKiBzdGFydCBudWRnaW5nIGRyaXZlcnMgYXdheSBmcm9tIHVzaW5nIHRoYXQgaWRpb20uCiAJICovCi0JaWYgKChpcnFmbGFncyAmIChJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkKLQkJCT09IChJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkKLQkJcHJfd2FybmluZygiSVJRICVkLyVzOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCAiCi0JCQkJImd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXNcbiIsCi0JCQkJaXJxLCBkZXZuYW1lKTsKKwlpZiAoKGlycWZsYWdzICYgKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKSA9PQorCQkJCQkoSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCkpIHsKKwkJcHJfd2FybmluZygKKwkJICAiSVJRICVkLyVzOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCBndWFyYW50ZWVkIG9uIHNoYXJlZCBJUlFzXG4iLAorCQkJaXJxLCBkZXZuYW1lKTsKKwl9CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCS8qCkBAIC03MDksMTUgKzczNywxMyBAQAogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwgR0ZQX0FUT01JQyk7CisJYWN0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksIEdGUF9LRVJORUwpOwogCWlmICghYWN0aW9uKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWFjdGlvbi0+aGFuZGxlciA9IGhhbmRsZXI7CiAJYWN0aW9uLT5mbGFncyA9IGlycWZsYWdzOwotCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKIAlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwotCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CiAKIAlyZXR2YWwgPSBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdGlvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwppbmRleCBiZDcyMzI5Li5lMDVhZDliIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCisrKyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKIAotCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KCZkZXNjLT5wZW5kaW5nX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShkZXNjLT5wZW5kaW5nX21hc2spKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCkBAIC0zOCwxMyArMzgsMTMgQEAKIAkgKiBGb3IgY29ycmVjdCBvcGVyYXRpb24gdGhpcyBkZXBlbmRzIG9uIHRoZSBjYWxsZXIKIAkgKiBtYXNraW5nIHRoZSBpcnFzLgogCSAqLwotCWlmIChsaWtlbHkoY3B1bWFza19hbnlfYW5kKCZkZXNjLT5wZW5kaW5nX21hc2ssIGNwdV9vbmxpbmVfbWFzaykKKwlpZiAobGlrZWx5KGNwdW1hc2tfYW55X2FuZChkZXNjLT5wZW5kaW5nX21hc2ssIGNwdV9vbmxpbmVfbWFzaykKIAkJICAgPCBucl9jcHVfaWRzKSkgewotCQljcHVtYXNrX2FuZCgmZGVzYy0+YWZmaW5pdHksCi0JCQkgICAgJmRlc2MtPnBlbmRpbmdfbWFzaywgY3B1X29ubGluZV9tYXNrKTsKLQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgJmRlc2MtPmFmZmluaXR5KTsKKwkJY3B1bWFza19hbmQoZGVzYy0+YWZmaW5pdHksCisJCQkgICAgZGVzYy0+cGVuZGluZ19tYXNrLCBjcHVfb25saW5lX21hc2spOworCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5hZmZpbml0eSk7CiAJfQotCWNwdW1hc2tfY2xlYXIoJmRlc2MtPnBlbmRpbmdfbWFzayk7CisJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOwogfQogCiB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKaW5kZXggYWNkODgzNS4uMjQzZDYxMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYworKysgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCkBAIC0xNywxNiArMTcsMTEgQEAKIAkJCQkgc3RydWN0IGlycV9kZXNjICpkZXNjLAogCQkJCSBpbnQgY3B1LCBpbnQgbnIpCiB7Ci0JdW5zaWduZWQgbG9uZyBieXRlczsKLQogCWluaXRfa3N0YXRfaXJxcyhkZXNjLCBjcHUsIG5yKTsKIAotCWlmIChkZXNjLT5rc3RhdF9pcnFzICE9IG9sZF9kZXNjLT5rc3RhdF9pcnFzKSB7Ci0JCS8qIENvbXB1dGUgaG93IG1hbnkgYnl0ZXMgd2UgbmVlZCBwZXIgaXJxIGFuZCBhbGxvY2F0ZSB0aGVtICovCi0JCWJ5dGVzID0gbnIgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQotCQltZW1jcHkoZGVzYy0+a3N0YXRfaXJxcywgb2xkX2Rlc2MtPmtzdGF0X2lycXMsIGJ5dGVzKTsKLQl9CisJaWYgKGRlc2MtPmtzdGF0X2lycXMgIT0gb2xkX2Rlc2MtPmtzdGF0X2lycXMpCisJCW1lbWNweShkZXNjLT5rc3RhdF9pcnFzLCBvbGRfZGVzYy0+a3N0YXRfaXJxcywKKwkJCSBuciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcykpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpvbGRfZGVzYywgc3RydWN0IGlycV9kZXNjICpkZXNjKQpAQCAtMzgsMTUgKzMzLDIyIEBACiAJb2xkX2Rlc2MtPmtzdGF0X2lycXMgPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X2NvcHlfb25lX2lycV9kZXNjKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCitzdGF0aWMgYm9vbCBpbml0X2NvcHlfb25lX2lycV9kZXNjKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCiAJCSBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUpCiB7CiAJbWVtY3B5KGRlc2MsIG9sZF9kZXNjLCBzaXplb2Yoc3RydWN0IGlycV9kZXNjKSk7CisJaWYgKCFpbml0X2FsbG9jX2Rlc2NfbWFza3MoZGVzYywgY3B1LCBmYWxzZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpcnEgJWQ6IGNhbiBub3QgZ2V0IG5ldyBpcnFfZGVzYyBjcHVtYXNrICIKKwkJCQkiZm9yIG1pZ3JhdGlvbi5cbiIsIGlycSk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAJc3Bpbl9sb2NrX2luaXQoJmRlc2MtPmxvY2spOwogCWRlc2MtPmNwdSA9IGNwdTsKIAlsb2NrZGVwX3NldF9jbGFzcygmZGVzYy0+bG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwogCWluaXRfY29weV9rc3RhdF9pcnFzKG9sZF9kZXNjLCBkZXNjLCBjcHUsIG5yX2NwdV9pZHMpOworCWluaXRfY29weV9kZXNjX21hc2tzKG9sZF9kZXNjLCBkZXNjKTsKIAlhcmNoX2luaXRfY29weV9jaGlwX2RhdGEob2xkX2Rlc2MsIGRlc2MsIGNwdSk7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfb25lX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKQEAgLTc2LDEyICs3OCwxOCBAQAogCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwogCWRlc2MgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpkZXNjKSwgR0ZQX0FUT01JQywgbm9kZSk7CiAJaWYgKCFkZXNjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXJxICVkOiBjYW4gbm90IGdldCBuZXcgaXJxX2Rlc2MgZm9yIG1pZ3JhdGlvbi5cbiIsIGlycSk7CisJCXByaW50ayhLRVJOX0VSUiAiaXJxICVkOiBjYW4gbm90IGdldCBuZXcgaXJxX2Rlc2MgIgorCQkJCSJmb3IgbWlncmF0aW9uLlxuIiwgaXJxKTsKIAkJLyogc3RpbGwgdXNlIG9sZCBvbmUgKi8KIAkJZGVzYyA9IG9sZF9kZXNjOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWluaXRfY29weV9vbmVfaXJxX2Rlc2MoaXJxLCBvbGRfZGVzYywgZGVzYywgY3B1KTsKKwlpZiAoIWluaXRfY29weV9vbmVfaXJxX2Rlc2MoaXJxLCBvbGRfZGVzYywgZGVzYywgY3B1KSkgeworCQkvKiBzdGlsbCB1c2Ugb2xkIG9uZSAqLworCQlrZnJlZShkZXNjKTsKKwkJZGVzYyA9IG9sZF9kZXNjOworCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJaXJxX2Rlc2NfcHRyc1tpcnFdID0gZGVzYzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggYWFlM2Y3NC4uNjkyMzYzZCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTIwLDExICsyMCwxMSBAQAogc3RhdGljIGludCBpcnFfYWZmaW5pdHlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYygobG9uZyltLT5wcml2YXRlKTsKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9ICZkZXNjLT5hZmZpbml0eTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGRlc2MtPmFmZmluaXR5OwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykKLQkJbWFzayA9ICZkZXNjLT5wZW5kaW5nX21hc2s7CisJCW1hc2sgPSBkZXNjLT5wZW5kaW5nX21hc2s7CiAjZW5kaWYKIAlzZXFfY3B1bWFzayhtLCBtYXNrKTsKIAlzZXFfcHV0YyhtLCAnXG4nKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBkZDM2NGMxLi40ZDU2ODI5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlyZXR1cm4gb2s7CiB9CiAKLXN0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQorc3RhdGljIHZvaWQgcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CkBAIC0xMjMsMTEgKzEyMywyMyBAQAogCiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOwogCX0KK30KKworc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJcG9sbF9hbGxfc2hhcmVkX2lycXMoKTsKIAogCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCiAJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQordm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKQoreworCXBvbGxfYWxsX3NoYXJlZF9pcnFzKCk7Cit9CisjZW5kaWYKKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCA0ODM4OTk1Li5jN2ZkNjY5IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtMTEzMCw3ICsxMTMwLDcgQEAKIAkJcmV0dXJuOwogCW1lbXNldCgmcHJzdGF0dXMsIDAsIHNpemVvZihwcnN0YXR1cykpOwogCXByc3RhdHVzLnByX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLnByX3JlZywgcmVncyk7CisJZWxmX2NvcmVfY29weV9rZXJuZWxfcmVncygmcHJzdGF0dXMucHJfcmVnLCByZWdzKTsKIAlidWYgPSBhcHBlbmRfZWxmX25vdGUoYnVmLCBLRVhFQ19DT1JFX05PVEVfTkFNRSwgTlRfUFJTVEFUVVMsCiAJCSAgICAgIAkgICAgICAmcHJzdGF0dXMsIHNpemVvZihwcnN0YXR1cykpOwogCWZpbmFsX25vdGUoYnVmKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sYXRlbmN5dG9wLmMgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCmluZGV4IDQ0OWRiNDYuLmNhMDdjNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sYXRlbmN5dG9wLmMKKysrIGIva2VybmVsL2xhdGVuY3l0b3AuYwpAQCAtOSw2ICs5LDQ0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLworCisvKgorICogQ09ORklHX0xBVEVOQ1lUT1AgZW5hYmxlcyBhIGtlcm5lbCBsYXRlbmN5IHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHRoYXQgaXMKKyAqIHVzZWQgYnkgdGhlICJsYXRlbmN5dG9wIiB1c2Vyc3BhY2UgdG9vbC4gVGhlIGxhdGVuY3kgdGhhdCBpcyB0cmFja2VkIGlzIG5vdAorICogdGhlICd0cmFkaXRpb25hbCcgaW50ZXJydXB0IGxhdGVuY3kgKHdoaWNoIGlzIHByaW1hcmlseSBjYXVzZWQgYnkgc29tZXRoaW5nCisgKiBlbHNlIGNvbnN1bWluZyBDUFUpLCBidXQgaW5zdGVhZCwgaXQgaXMgdGhlIGxhdGVuY3kgYW4gYXBwbGljYXRpb24gZW5jb3VudGVycworICogYmVjYXVzZSB0aGUga2VybmVsIHNsZWVwcyBvbiBpdHMgYmVoYWxmIGZvciB2YXJpb3VzIHJlYXNvbnMuCisgKgorICogVGhpcyBjb2RlIHRyYWNrcyAyIGxldmVscyBvZiBzdGF0aXN0aWNzOgorICogMSkgU3lzdGVtIGxldmVsIGxhdGVuY3kKKyAqIDIpIFBlciBwcm9jZXNzIGxhdGVuY3kKKyAqCisgKiBUaGUgbGF0ZW5jeSBpcyBzdG9yZWQgaW4gZml4ZWQgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGluIGFuIGFjY3VtdWxhdGVkIGZvcm07CisgKiBpZiB0aGUgInNhbWUiIGxhdGVuY3kgY2F1c2UgaXMgaGl0IHR3aWNlLCB0aGlzIHdpbGwgYmUgdHJhY2tlZCBhcyBvbmUgZW50cnkKKyAqIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gQm90aCB0aGUgY291bnQsIHRvdGFsIGFjY3VtdWxhdGVkIGxhdGVuY3kgYW5kIG1heGltdW0KKyAqIGxhdGVuY3kgYXJlIHRyYWNrZWQgaW4gdGhpcyBkYXRhIHN0cnVjdHVyZS4gV2hlbiB0aGUgZml4ZWQgc2l6ZSBzdHJ1Y3R1cmUgaXMKKyAqIGZ1bGwsIG5vIG5ldyBjYXVzZXMgYXJlIHRyYWNrZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmbHVzaGVkIGJ5IHdyaXRpbmcgdG8KKyAqIHRoZSAvcHJvYyBmaWxlOyB0aGUgdXNlcnNwYWNlIHRvb2wgZG9lcyB0aGlzIG9uIGEgcmVndWxhciBiYXNpcy4KKyAqCisgKiBBIGxhdGVuY3kgY2F1c2UgaXMgaWRlbnRpZmllZCBieSBhIHN0cmluZ2lmaWVkIGJhY2t0cmFjZSBhdCB0aGUgcG9pbnQgdGhhdAorICogdGhlIHNjaGVkdWxlciBnZXRzIGludm9rZWQuIFRoZSB1c2VybGFuZCB0b29sIHdpbGwgdXNlIHRoaXMgc3RyaW5nIHRvCisgKiBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGxhdGVuY3kgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS4KKyAqCisgKiBUaGUgaW5mb3JtYXRpb24gaXMgZXhwb3J0ZWQgdmlhIC9wcm9jL2xhdGVuY3lfc3RhdHMgYW5kIC9wcm9jLzxwaWQ+L2xhdGVuY3kuCisgKiBUaGVzZSBmaWxlcyBsb29rIGxpa2UgdGhpczoKKyAqCisgKiBMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMQorICogNzAgNTk0MzMgNDg5NyBpOTE1X2lycV93YWl0IGRybV9pb2N0bCB2ZnNfaW9jdGwgZG9fdmZzX2lvY3RsIHN5c19pb2N0bAorICogfCAgICB8ICAgIHwgICAgfAorICogfCAgICB8ICAgIHwgICAgKy0tLS0+IHRoZSBzdHJpbmdpZmllZCBiYWNrdHJhY2UKKyAqIHwgICAgfCAgICArLS0tLS0tLS0tPiBUaGUgbWF4aW11bSBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IGluIG1pY3Jvc2Vjb25kcworICogfCAgICArLS0tLS0tLS0tLS0tLS0+IFRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IChtaWNyb3NlY29uZHMpCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLT4gVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGVudHJ5IGlzIGhpdAorICoKKyAqIChub3RlOiB0aGUgYXZlcmFnZSBsYXRlbmN5IGlzIHRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGRpdmlkZWQgYnkgdGhlIG51bWJlcgorICogb2YgdGltZXMpCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3l0b3AuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC03Miw3ICsxMTAsNyBAQAogCQkJCWZpcnN0bm9ubnVsbCA9IGk7CiAJCQljb250aW51ZTsKIAkJfQotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC0+YmFja3RyYWNlW3FdOwogCiAJCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTAxLDMxICsxMzksNTIgQEAKIAltZW1jcHkoJmxhdGVuY3lfcmVjb3JkW2ldLCBsYXQsIHNpemVvZihzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX3N0YWNrdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbGF0KQorLyoKKyAqIEl0ZXJhdG9yIHRvIHN0b3JlIGEgYmFja3RyYWNlIGludG8gYSBsYXRlbmN5IHJlY29yZCBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfc3RhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsYXQpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCiAJbWVtc2V0KCZ0cmFjZSwgMCwgc2l6ZW9mKHRyYWNlKSk7CiAJdHJhY2UubWF4X2VudHJpZXMgPSBMVF9CQUNLVFJBQ0VERVBUSDsKIAl0cmFjZS5lbnRyaWVzID0gJmxhdC0+YmFja3RyYWNlWzBdOwotCXRyYWNlLnNraXAgPSAwOwogCXNhdmVfc3RhY2tfdHJhY2VfdHNrKHRzaywgJnRyYWNlKTsKIH0KIAorLyoqCisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBAdHNrIC0gdGhlIHRhc2sgc3RydWN0IG9mIHRoZSB0YXNrIGhpdHRpbmcgdGhlIGxhdGVuY3kKKyAqIEB1c2VjcyAtIHRoZSBkdXJhdGlvbiBvZiB0aGUgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKKyAqIEBpbnRlciAtIDEgaWYgdGhlIHNsZWVwIHdhcyBpbnRlcnJ1cHRpYmxlLCAwIGlmIHVuaW50ZXJydXB0aWJsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY29yZGluZyBsYXRlbmN5IGVudHJpZXMKKyAqIGFzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGEgZmV3IHNwZWNpYWwgY2FzZXMgdG8gZGVhbCB3aXRoIG5vcm1hbCAnbm9uLWxhdGVuY3knCisgKiBzbGVlcHM6IHNwZWNpZmljYWxseSwgaW50ZXJydXB0aWJsZSBzbGVlcCBsb25nZXIgdGhhbiA1IG1zZWMgaXMgc2tpcHBlZAorICogc2luY2UgdGhpcyB1c3VhbGx5IGlzIGNhdXNlZCBieSB3YWl0aW5nIGZvciBldmVudHMgdmlhIHNlbGVjdCgpIGFuZCBjby4KKyAqCisgKiBOZWdhdGl2ZSBsYXRlbmNpZXMgKGNhdXNlZCBieSB0aW1lIGdvaW5nIGJhY2t3YXJkcykgYXJlIGFsc28gZXhwbGljaXRseQorICogc2tpcHBlZC4KKyAqLwogdm9pZCBfX3NjaGVkCi1hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK19fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcTsKIAlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgbGF0OwogCi0JaWYgKCFsYXRlbmN5dG9wX2VuYWJsZWQpCi0JCXJldHVybjsKLQogCS8qIExvbmcgaW50ZXJydXB0aWJsZSB3YWl0cyBhcmUgZ2VuZXJhbGx5IHVzZXIgcmVxdWVzdGVkLi4uICovCiAJaWYgKGludGVyICYmIHVzZWNzID4gNTAwMCkKIAkJcmV0dXJuOwogCisJLyogTmVnYXRpdmUgc2xlZXBzIGFyZSB0aW1lIGdvaW5nIGJhY2t3YXJkcyAqLworCS8qIFplcm8tdGltZSBzbGVlcHMgYXJlIG5vbi1pbnRlcmVzdGluZyAqLworCWlmICh1c2VjcyA8PSAwKQorCQlyZXR1cm47CisKIAltZW1zZXQoJmxhdCwgMCwgc2l6ZW9mKGxhdCkpOwogCWxhdC5jb3VudCA9IDE7CiAJbGF0LnRpbWUgPSB1c2VjczsKQEAgLTE0MywxMiArMjAyLDEyIEBACiAJaWYgKHRzay0+bGF0ZW5jeV9yZWNvcmRfY291bnQgPj0gTFRfU0FWRUNPVU5UKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTFRfU0FWRUNPVU5UIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExUX1NBVkVDT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbXlsYXQ7CiAJCWludCBzYW1lID0gMTsKIAogCQlteWxhdCA9ICZ0c2stPmxhdGVuY3lfcmVjb3JkW2ldOwotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC5iYWNrdHJhY2VbcV07CiAKIAkJCWlmIChteWxhdC0+YmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTg2LDcgKzI0NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWExSOyBpKyspIHsKIAkJaWYgKGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVswXSkgewogCQkJaW50IHE7Ci0JCQlzZXFfcHJpbnRmKG0sICIlaSAlbGkgJWxpICIsCisJCQlzZXFfcHJpbnRmKG0sICIlaSAlbHUgJWx1ICIsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0uY291bnQsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0udGltZSwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS5tYXgpOwpAQCAtMjIzLDcgKzI4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIGxzdGF0c19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHN0YXRzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsc3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSBsc3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gbHN0YXRzX3dyaXRlLApAQCAtMjM2LDQgKzI5NSw0IEBACiAJcHJvY19jcmVhdGUoImxhdGVuY3lfc3RhdHMiLCAwNjQ0LCBOVUxMLCAmbHN0YXRzX2ZvcHMpOwogCXJldHVybiAwOwogfQotX19pbml0Y2FsbChpbml0X2xzdGF0c19wcm9jZnMpOworZGV2aWNlX2luaXRjYWxsKGluaXRfbHN0YXRzX3Byb2Nmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYmEyMjQ4NC4uZjc3YWMzMiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCkBAIC0zNjYsNiArMzY3LDM0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU01QCisKKyNpZmRlZiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQQorCitzdGF0aWMgdm9pZCAqcGVyY3B1X21vZGFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl2b2lkICpwdHI7CisKKwlpZiAoYWxpZ24gPiBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBlci1jcHUgYWxpZ25tZW50ICVsaSA+ICVsaVxuIiwKKwkJICAgICAgIG5hbWUsIGFsaWduLCBQQUdFX1NJWkUpOworCQlhbGlnbiA9IFBBR0VfU0laRTsKKwl9CisKKwlwdHIgPSBfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplLCBhbGlnbik7CisJaWYgKCFwdHIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgJWx1IGJ5dGVzIHBlcmNwdSBkYXRhXG4iLCBzaXplKTsKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCBwZXJjcHVfbW9kZnJlZSh2b2lkICpmcmVlbWUpCit7CisJZnJlZV9wZXJjcHUoZnJlZW1lKTsKK30KKworI2Vsc2UgLyogLi4uICFDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQSAqLworCiAvKiBOdW1iZXIgb2YgYmxvY2tzIHVzZWQgYW5kIGFsbG9jYXRlZC4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNwdV9udW1fdXNlZCwgcGNwdV9udW1fYWxsb2NhdGVkOwogLyogU2l6ZSBvZiBlYWNoIGJsb2NrLiAgLXZlIG1lYW5zIHVzZWQuICovCkBAIC00ODAsMjEgKzUwOSw2IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfcGNwdXNlYyhFbGZfRWhkciAqaGRyLAotCQkJCSBFbGZfU2hkciAqc2VjaGRycywKLQkJCQkgY29uc3QgY2hhciAqc2Vjc3RyaW5ncykKLXsKLQlyZXR1cm4gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiLmRhdGEucGVyY3B1Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmNwdV9tb2Rjb3B5KHZvaWQgKnBjcHVkZXN0LCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCW1lbWNweShwY3B1ZGVzdCArIHBlcl9jcHVfb2Zmc2V0KGNwdSksIGZyb20sIHNpemUpOwotfQotCiBzdGF0aWMgaW50IHBlcmNwdV9tb2Rpbml0KHZvaWQpCiB7CiAJcGNwdV9udW1fdXNlZCA9IDI7CkBAIC01MTMsNyArNTI3LDI2IEBACiAJcmV0dXJuIDA7CiB9CiBfX2luaXRjYWxsKHBlcmNwdV9tb2Rpbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9wY3B1c2VjKEVsZl9FaGRyICpoZHIsCisJCQkJIEVsZl9TaGRyICpzZWNoZHJzLAorCQkJCSBjb25zdCBjaGFyICpzZWNzdHJpbmdzKQoreworCXJldHVybiBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICIuZGF0YS5wZXJjcHUiKTsKK30KKworc3RhdGljIHZvaWQgcGVyY3B1X21vZGNvcHkodm9pZCAqcGNwdWRlc3QsIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJbWVtY3B5KHBjcHVkZXN0ICsgcGVyX2NwdV9vZmZzZXQoY3B1KSwgZnJvbSwgc2l6ZSk7Cit9CisKICNlbHNlIC8qIC4uLiAhQ09ORklHX1NNUCAqLworCiBzdGF0aWMgaW5saW5lIHZvaWQgKnBlcmNwdV9tb2RhbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01MzUsNiArNTY4LDcgQEAKIAkvKiBwY3B1c2VjIHNob3VsZCBiZSAwLCBhbmQgc2l6ZSBvZiB0aGF0IHNlY3Rpb24gc2hvdWxkIGJlIDAuICovCiAJQlVHX09OKHNpemUgIT0gMCk7CiB9CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKICNkZWZpbmUgTU9ESU5GT19BVFRSKGZpZWxkKQlcCkBAIC04MjIsNyArODU2LDcgQEAKIAltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCS8qIFN0b3JlIHRoZSBuYW1lIG9mIHRoZSBsYXN0IHVubG9hZGVkIG1vZHVsZSBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyAqLwogCXN0cmxjcHkobGFzdF91bmxvYWRlZF9tb2R1bGUsIG1vZC0+bmFtZSwgc2l6ZW9mKGxhc3RfdW5sb2FkZWRfbW9kdWxlKSk7Ci0JdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShtb2QtPm5hbWUpOworCWRkZWJ1Z19yZW1vdmVfbW9kdWxlKG1vZC0+bmFtZSk7CiAJZnJlZV9tb2R1bGUobW9kKTsKIAogIG91dDoKQEAgLTE4MjcsMTkgKzE4NjEsMTMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAotc3RhdGljIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgdm9pZCBkeW5hbWljX2RlYnVnX3NldHVwKHN0cnVjdCBfZGRlYnVnICpkZWJ1ZywgdW5zaWduZWQgaW50IG51bSkKIHsKLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShkZWJ1Z1tpXS5tb2RuYW1lLAotCQkJCQkgICAgICBkZWJ1Z1tpXS50eXBlLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5sb2dpY2FsX21vZG5hbWUsCi0JCQkJCSAgICAgIGRlYnVnW2ldLmZsYWdfbmFtZXMsCi0JCQkJCSAgICAgIGRlYnVnW2ldLmhhc2gsIGRlYnVnW2ldLmhhc2gyKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHICovCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfREVCVUcKKwlpZiAoZGRlYnVnX2FkZF9tb2R1bGUoZGVidWcsIG51bSwgZGVidWctPm1vZG5hbWUpKQorCQlwcmludGsoS0VSTl9FUlIgImR5bmFtaWMgZGVidWcgZXJyb3IgYWRkaW5nIG1vZHVsZTogJXNcbiIsCisJCQkJCWRlYnVnLT5tb2RuYW1lKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCAqbW9kdWxlX2FsbG9jX3VwZGF0ZV9ib3VuZHModW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMjAxNSwxNCArMjA0Myw2IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZnJlZV9tb2Q7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0JbW9kLT5yZWZwdHIgPSBwZXJjcHVfbW9kYWxsb2Moc2l6ZW9mKGxvY2FsX3QpLCBfX2FsaWdub2ZfXyhsb2NhbF90KSwKLQkJCQkgICAgICBtb2QtPm5hbWUpOwotCWlmICghbW9kLT5yZWZwdHIpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmcmVlX21vZDsKLQl9Ci0jZW5kaWYKIAlpZiAocGNwdWluZGV4KSB7CiAJCS8qIFdlIGhhdmUgYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHRoaXMgc2VjdGlvbi4gKi8KIAkJcGVyY3B1ID0gcGVyY3B1X21vZGFsbG9jKHNlY2hkcnNbcGNwdWluZGV4XS5zaF9zaXplLApAQCAtMjAzMCw3ICsyMDUwLDcgQEAKIAkJCQkJIG1vZC0+bmFtZSk7CiAJCWlmICghcGVyY3B1KSB7CiAJCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBmcmVlX3BlcmNwdTsKKwkJCWdvdG8gZnJlZV9tb2Q7CiAJCX0KIAkJc2VjaGRyc1twY3B1aW5kZXhdLnNoX2ZsYWdzICY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7CiAJCW1vZC0+cGVyY3B1ID0gcGVyY3B1OwpAQCAtMjA4Miw2ICsyMTAyLDE0IEBACiAJLyogTW9kdWxlIGhhcyBiZWVuIG1vdmVkLiAqLwogCW1vZCA9ICh2b2lkICopc2VjaGRyc1ttb2RpbmRleF0uc2hfYWRkcjsKIAorI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9VTkxPQUQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwltb2QtPnJlZnB0ciA9IHBlcmNwdV9tb2RhbGxvYyhzaXplb2YobG9jYWxfdCksIF9fYWxpZ25vZl9fKGxvY2FsX3QpLAorCQkJCSAgICAgIG1vZC0+bmFtZSk7CisJaWYgKCFtb2QtPnJlZnB0cikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaW5pdDsKKwl9CisjZW5kaWYKIAkvKiBOb3cgd2UndmUgbW92ZWQgbW9kdWxlLCBpbml0aWFsaXplIGxpbmtlZCBsaXN0cywgZXRjLiAqLwogCW1vZHVsZV91bmxvYWRfaW5pdChtb2QpOwogCkBAIC0yMjEzLDEyICsyMjQxLDEzIEBACiAJYWRkX2thbGxzeW1zKG1vZCwgc2VjaGRycywgc3ltaW5kZXgsIHN0cmluZGV4LCBzZWNzdHJpbmdzKTsKIAogCWlmICghbW9kLT50YWludHMpIHsKLQkJc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWc7CisJCXN0cnVjdCBfZGRlYnVnICpkZWJ1ZzsKIAkJdW5zaWduZWQgaW50IG51bV9kZWJ1ZzsKIAogCQlkZWJ1ZyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3ZlcmJvc2UiLAogCQkJCSAgICAgc2l6ZW9mKCpkZWJ1ZyksICZudW1fZGVidWcpOwotCQlkeW5hbWljX3ByaW50a19zZXR1cChkZWJ1ZywgbnVtX2RlYnVnKTsKKwkJaWYgKGRlYnVnKQorCQkJZHluYW1pY19kZWJ1Z19zZXR1cChkZWJ1ZywgbnVtX2RlYnVnKTsKIAl9CiAKIAkvKiBzZWNoZHJzWzBdLnNoX3NpemUgaXMgYWx3YXlzIHplcm8gKi8KQEAgLTIyODgsMTUgKzIzMTcsMTcgQEAKIAlmdHJhY2VfcmVsZWFzZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CiAgZnJlZV91bmxvYWQ6CiAJbW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7Ci0JbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKLSBmcmVlX2NvcmU6Ci0JbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9jb3JlKTsKLSBmcmVlX3BlcmNwdToKLQlpZiAocGVyY3B1KQotCQlwZXJjcHVfbW9kZnJlZShwZXJjcHUpOworIGZyZWVfaW5pdDoKICNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJcGVyY3B1X21vZGZyZWUobW9kLT5yZWZwdHIpOwogI2VuZGlmCisJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKKyBmcmVlX2NvcmU6CisJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9jb3JlKTsKKwkvKiBtb2Qgd2lsbCBiZSBmcmVlZCB3aXRoIGNvcmUuIERvbid0IGFjY2VzcyBpdCBiZXlvbmQgdGhpcyBsaW5lISAqLworIGZyZWVfcGVyY3B1OgorCWlmIChwZXJjcHUpCisJCXBlcmNwdV9tb2RmcmVlKHBlcmNwdSk7CiAgZnJlZV9tb2Q6CiAJa2ZyZWUoYXJncyk7CiAgZnJlZV9oZHI6CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDJhMmZmMzYuLjMyZmU0ZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC03NCw2ICs3NCw5IEBACiAJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCXByaW50ayhLRVJOX0VNRVJHICJLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogJXNcbiIsYnVmKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQorCWR1bXBfc3RhY2soKTsKKyNlbmRpZgogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCiAJLyoKQEAgLTM1NSwxNSArMzU4LDE4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgorCiAvKgogICogQ2FsbGVkIHdoZW4gZ2NjJ3MgLWZzdGFjay1wcm90ZWN0b3IgZmVhdHVyZSBpcyB1c2VkLCBhbmQKICAqIGdjYyBkZXRlY3RzIGNvcnJ1cHRpb24gb2YgdGhlIG9uLXN0YWNrIGNhbmFyeSB2YWx1ZQogICovCiB2b2lkIF9fc3RhY2tfY2hrX2ZhaWwodm9pZCkKIHsKLQlwYW5pYygic3RhY2stcHJvdGVjdG9yOiBLZXJuZWwgc3RhY2sgaXMgY29ycnVwdGVkIik7CisJcGFuaWMoInN0YWNrLXByb3RlY3RvcjogS2VybmVsIHN0YWNrIGlzIGNvcnJ1cHRlZCBpbjogJXBcbiIsCisJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fc3RhY2tfY2hrX2ZhaWwpOworCiAjZW5kaWYKIAogY29yZV9wYXJhbShwYW5pYywgcGFuaWNfdGltZW91dCwgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IGU5NzZlNTAuLjhlNWQ5YTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtMTM3MCw3ICsxMzcwLDggQEAKIAkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZncm91cF9zYW1wbGUsICZzaWctPmNwdXRpbWVfZXhwaXJlcykpCiAJCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDlkNzliNzguLjhmMjE3OWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAkJCSAqIGZyb20gdGhlIHNjaGVkdWxlciAodHJ5aW5nIHRvIHJlLWdyYWIKIAkJCSAqIHJxLT5sb2NrKSwgc28gZGVmZXIgaXQuCiAJCQkgKi8KLQkJCV9fbW9kX3RpbWVyKCZidWYtPnRpbWVyLCBqaWZmaWVzICsgMSk7CisJCQltb2RfdGltZXIoJmJ1Zi0+dGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKIAlvbGQgPSBidWYtPmRhdGE7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDhlMjU1OGMuLmY0YzQxM2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zMzEsNiArMzMxLDEzIEBACiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19ncm91cF9sb2NrKTsKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgcm9vdF90YXNrX2dyb3VwX2VtcHR5KHZvaWQpCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJnJvb3RfdGFza19ncm91cC5jaGlsZHJlbik7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQpAQCAtMzkxLDYgKzM5OCwxMyBAQAogCiAjZWxzZQogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKnRhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtNDY3LDExICs0ODEsMTcgQEAKIAlzdHJ1Y3QgcnRfcHJpb19hcnJheSBhY3RpdmU7CiAJdW5zaWduZWQgbG9uZyBydF9ucl9ydW5uaW5nOwogI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWludCBoaWdoZXN0X3ByaW87IC8qIGhpZ2hlc3QgcXVldWVkIHJ0IHRhc2sgcHJpbyAqLworCXN0cnVjdCB7CisJCWludCBjdXJyOyAvKiBoaWdoZXN0IHF1ZXVlZCBydCB0YXNrIHByaW8gKi8KKyNpZmRlZiBDT05GSUdfU01QCisJCWludCBuZXh0OyAvKiBuZXh0IGhpZ2hlc3QgKi8KKyNlbmRpZgorCX0gaGlnaGVzdF9wcmlvOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGxvbmcgcnRfbnJfbWlncmF0b3J5OwogCWludCBvdmVybG9hZGVkOworCXN0cnVjdCBwbGlzdF9oZWFkIHB1c2hhYmxlX3Rhc2tzOwogI2VuZGlmCiAJaW50IHJ0X3Rocm90dGxlZDsKIAl1NjQgcnRfdGltZTsKQEAgLTU0OSw3ICs1NjksNiBAQAogCXVuc2lnbmVkIGxvbmcgbnJfcnVubmluZzsKIAkjZGVmaW5lIENQVV9MT0FEX0lEWF9NQVggNQogCXVuc2lnbmVkIGxvbmcgY3B1X2xvYWRbQ1BVX0xPQURfSURYX01BWF07Ci0JdW5zaWduZWQgY2hhciBpZGxlX2F0X3RpY2s7CiAjaWZkZWYgQ09ORklHX05PX0haCiAJdW5zaWduZWQgbG9uZyBsYXN0X3RpY2tfc2VlbjsKIAl1bnNpZ25lZCBjaGFyIGluX25vaHpfcmVjZW50bHk7CkBAIC01OTAsNiArNjA5LDcgQEAKIAlzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCisJdW5zaWduZWQgY2hhciBpZGxlX2F0X3RpY2s7CiAJLyogRm9yIGFjdGl2ZSBiYWxhbmNpbmcgKi8KIAlpbnQgYWN0aXZlX2JhbGFuY2U7CiAJaW50IHB1c2hfY3B1OwpAQCAtNjE4LDkgKzYzOCw2IEBACiAJLyogY291bGQgYWJvdmUgYmUgcnEtPmNmc19ycS5leGVjX2Nsb2NrICsgcnEtPnJ0X3JxLnJ0X3J1bnRpbWUgPyAqLwogCiAJLyogc3lzX3NjaGVkX3lpZWxkKCkgc3RhdHMgKi8KLQl1bnNpZ25lZCBpbnQgeWxkX2V4cF9lbXB0eTsKLQl1bnNpZ25lZCBpbnQgeWxkX2FjdF9lbXB0eTsKLQl1bnNpZ25lZCBpbnQgeWxkX2JvdGhfZW1wdHk7CiAJdW5zaWduZWQgaW50IHlsZF9jb3VudDsKIAogCS8qIHNjaGVkdWxlKCkgc3RhdHMgKi8KQEAgLTExODMsMTAgKzEyMDAsMTAgQEAKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmdGFza19ycShwKS0+bG9jayk7CiAKLQlpZiAodW5saWtlbHkodGVzdF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX05FRURfUkVTQ0hFRCkpKQorCWlmICh0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocCkpCiAJCXJldHVybjsKIAotCXNldF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX05FRURfUkVTQ0hFRCk7CisJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CiAKIAljcHUgPSB0YXNrX2NwdShwKTsKIAlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKQEAgLTEyNDIsNyArMTI1OSw3IEBACiAJICogbG9ja2xlc3MuIFRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgdGhlIG90aGVyIENQVSBydW5zIHRoZQogCSAqIGlkbGUgdGFzayB0aHJvdWdoIGFuIGFkZGl0aW9uYWwgTk9PUCBzY2hlZHVsZSgpCiAJICovCi0Jc2V0X3Rza190aHJlYWRfZmxhZyhycS0+aWRsZSwgVElGX05FRURfUkVTQ0hFRCk7CisJc2V0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmlkbGUpOwogCiAJLyogTkVFRF9SRVNDSEVEIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdCBwb2xsaW5nICovCiAJc21wX21iKCk7CkBAIC0xNjEwLDIxICsxNjI3LDQyIEBACiAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwogLyoKLSAqIGRvdWJsZV9sb2NrX2JhbGFuY2UgLSBsb2NrIHRoZSBidXNpZXN0IHJ1bnF1ZXVlLCB0aGlzX3JxIGlzIGxvY2tlZCBhbHJlYWR5LgorICogZmFpciBkb3VibGVfbG9ja19iYWxhbmNlOiBTYWZlbHkgYWNxdWlyZXMgYm90aCBycS0+bG9ja3MgaW4gYSBmYWlyCisgKiB3YXkgYXQgdGhlIGV4cGVuc2Ugb2YgZm9yY2luZyBleHRyYSBhdG9taWMgb3BlcmF0aW9ucyBpbiBhbGwKKyAqIGludm9jYXRpb25zLiAgVGhpcyBhc3N1cmVzIHRoYXQgdGhlIGRvdWJsZV9sb2NrIGlzIGFjcXVpcmVkIHVzaW5nIHRoZQorICogc2FtZSB1bmRlcmx5aW5nIHBvbGljeSBhcyB0aGUgc3BpbmxvY2tfdCBvbiB0aGlzIGFyY2hpdGVjdHVyZSwgd2hpY2gKKyAqIHJlZHVjZXMgbGF0ZW5jeSBjb21wYXJlZCB0byB0aGUgdW5mYWlyIHZhcmlhbnQgYmVsb3cuICBIb3dldmVyLCBpdAorICogYWxzbyBhZGRzIG1vcmUgb3ZlcmhlYWQgYW5kIHRoZXJlZm9yZSBtYXkgcmVkdWNlIHRocm91Z2hwdXQuCiAgKi8KLXN0YXRpYyBpbnQgZG91YmxlX2xvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKK3N0YXRpYyBpbmxpbmUgaW50IF9kb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQorCV9fcmVsZWFzZXModGhpc19ycS0+bG9jaykKKwlfX2FjcXVpcmVzKGJ1c2llc3QtPmxvY2spCisJX19hY3F1aXJlcyh0aGlzX3JxLT5sb2NrKQoreworCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKKworCXJldHVybiAxOworfQorCisjZWxzZQorLyoKKyAqIFVuZmFpciBkb3VibGVfbG9ja19iYWxhbmNlOiBPcHRpbWl6ZXMgdGhyb3VnaHB1dCBhdCB0aGUgZXhwZW5zZSBvZgorICogbGF0ZW5jeSBieSBlbGltaW5hdGluZyBleHRyYSBhdG9taWMgb3BlcmF0aW9ucyB3aGVuIHRoZSBsb2NrcyBhcmUKKyAqIGFscmVhZHkgaW4gcHJvcGVyIG9yZGVyIG9uIGVudHJ5LiAgVGhpcyBmYXZvcnMgbG93ZXIgY3B1LWlkcyBhbmQgd2lsbAorICogZ3JhbnQgdGhlIGRvdWJsZSBsb2NrIHRvIGxvd2VyIGNwdXMgb3ZlciBoaWdoZXIgaWRzIHVuZGVyIGNvbnRlbnRpb24sCisgKiByZWdhcmRsZXNzIG9mIGVudHJ5IG9yZGVyIGludG8gdGhlIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IF9kb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQogCV9fcmVsZWFzZXModGhpc19ycS0+bG9jaykKIAlfX2FjcXVpcmVzKGJ1c2llc3QtPmxvY2spCiAJX19hY3F1aXJlcyh0aGlzX3JxLT5sb2NrKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKHVubGlrZWx5KCFpcnFzX2Rpc2FibGVkKCkpKSB7Ci0JCS8qIHByaW50aygpIGRvZXNuJ3Qgd29yayBnb29kIHVuZGVyIHJxLT5sb2NrICovCi0JCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKLQkJQlVHX09OKDEpOwotCX0KIAlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9jaygmYnVzaWVzdC0+bG9jaykpKSB7CiAJCWlmIChidXNpZXN0IDwgdGhpc19ycSkgewogCQkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwpAQCAtMTYzNyw2ICsxNjc1LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKKy8qCisgKiBkb3VibGVfbG9ja19iYWxhbmNlIC0gbG9jayB0aGUgYnVzaWVzdCBydW5xdWV1ZSwgdGhpc19ycSBpcyBsb2NrZWQgYWxyZWFkeS4KKyAqLworc3RhdGljIGludCBkb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQoreworCWlmICh1bmxpa2VseSghaXJxc19kaXNhYmxlZCgpKSkgeworCQkvKiBwcmludGsoKSBkb2Vzbid0IHdvcmsgZ29vZCB1bmRlciBycS0+bG9jayAqLworCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CisJCUJVR19PTigxKTsKKwl9CisKKwlyZXR1cm4gX2RvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfdW5sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCiAJX19yZWxlYXNlcyhidXNpZXN0LT5sb2NrKQogewpAQCAtMTcwNSw2ICsxNzU5LDkgQEAKIAogc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKIHsKKwlpZiAod2FrZXVwKQorCQlwLT5zZS5zdGFydF9ydW50aW1lID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwogCXNjaGVkX2luZm9fcXVldWVkKHApOwogCXAtPnNjaGVkX2NsYXNzLT5lbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCk7CiAJcC0+c2Uub25fcnEgPSAxOwpAQCAtMTcxMiwxMCArMTc2OSwxNSBAQAogCiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCiB7Ci0JaWYgKHNsZWVwICYmIHAtPnNlLmxhc3Rfd2FrZXVwKSB7Ci0JCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z19vdmVybGFwLAotCQkJICAgcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSAtIHAtPnNlLmxhc3Rfd2FrZXVwKTsKLQkJcC0+c2UubGFzdF93YWtldXAgPSAwOworCWlmIChzbGVlcCkgeworCQlpZiAocC0+c2UubGFzdF93YWtldXApIHsKKwkJCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z19vdmVybGFwLAorCQkJCXAtPnNlLnN1bV9leGVjX3J1bnRpbWUgLSBwLT5zZS5sYXN0X3dha2V1cCk7CisJCQlwLT5zZS5sYXN0X3dha2V1cCA9IDA7CisJCX0gZWxzZSB7CisJCQl1cGRhdGVfYXZnKCZwLT5zZS5hdmdfd2FrZXVwLAorCQkJCXN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOworCQl9CiAJfQogCiAJc2NoZWRfaW5mb19kZXF1ZXVlZChwKTsKQEAgLTIwMTcsNyArMjA3OSw3IEBACiAJCSAqIGl0IG11c3QgYmUgb2ZmIHRoZSBydW5xdWV1ZSBfZW50aXJlbHlfLCBhbmQgbm90CiAJCSAqIHByZWVtcHRlZCEKIAkJICoKLQkJICogU28gaWYgaXQgd2Egc3RpbGwgcnVubmFibGUgKGJ1dCBqdXN0IG5vdCBhY3RpdmVseQorCQkgKiBTbyBpZiBpdCB3YXMgc3RpbGwgcnVubmFibGUgKGJ1dCBqdXN0IG5vdCBhY3RpdmVseQogCQkgKiBydW5uaW5nIHJpZ2h0IG5vdyksIGl0J3MgcHJlZW1wdGVkLCBhbmQgd2Ugc2hvdWxkCiAJCSAqIHlpZWxkIC0gaXQgY291bGQgYmUgYSB3aGlsZS4KIAkJICovCkBAIC0yMjY3LDcgKzIzMjksNyBAQAogCQlzeW5jID0gMDsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoc2NoZWRfZmVhdChMQl9XQUtFVVBfVVBEQVRFKSkgeworCWlmIChzY2hlZF9mZWF0KExCX1dBS0VVUF9VUERBVEUpICYmICFyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkgewogCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAogCQl0aGlzX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yMzQ1LDYgKzI0MDcsMjIgQEAKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAxKTsKIAlzdWNjZXNzID0gMTsKIAorCS8qCisJICogT25seSBhdHRyaWJ1dGUgYWN0dWFsIHdha2V1cHMgZG9uZSBieSB0aGlzIHRhc2suCisJICovCisJaWYgKCFpbl9pbnRlcnJ1cHQoKSkgeworCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZjdXJyZW50LT5zZTsKKwkJdTY0IHNhbXBsZSA9IHNlLT5zdW1fZXhlY19ydW50aW1lOworCisJCWlmIChzZS0+bGFzdF93YWtldXApCisJCQlzYW1wbGUgLT0gc2UtPmxhc3Rfd2FrZXVwOworCQllbHNlCisJCQlzYW1wbGUgLT0gc2UtPnN0YXJ0X3J1bnRpbWU7CisJCXVwZGF0ZV9hdmcoJnNlLT5hdmdfd2FrZXVwLCBzYW1wbGUpOworCisJCXNlLT5sYXN0X3dha2V1cCA9IHNlLT5zdW1fZXhlY19ydW50aW1lOworCX0KKwogb3V0X3J1bm5pbmc6CiAJdHJhY2Vfc2NoZWRfd2FrZXVwKHJxLCBwLCBzdWNjZXNzKTsKIAljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIHN5bmMpOwpAQCAtMjM1NSw4ICsyNDMzLDYgQEAKIAkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FrZV91cChycSwgcCk7CiAjZW5kaWYKIG91dDoKLQljdXJyZW50LT5zZS5sYXN0X3dha2V1cCA9IGN1cnJlbnQtPnNlLnN1bV9leGVjX3J1bnRpbWU7Ci0KIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAogCXJldHVybiBzdWNjZXNzOwpAQCAtMjM4Niw2ICsyNDYyLDggQEAKIAlwLT5zZS5wcmV2X3N1bV9leGVjX3J1bnRpbWUJPSAwOwogCXAtPnNlLmxhc3Rfd2FrZXVwCQk9IDA7CiAJcC0+c2UuYXZnX292ZXJsYXAJCT0gMDsKKwlwLT5zZS5zdGFydF9ydW50aW1lCQk9IDA7CisJcC0+c2UuYXZnX3dha2V1cAkJPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwogCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAlwLT5zZS53YWl0X3N0YXJ0CQk9IDA7CkBAIC0yNDQ4LDYgKzI1MjYsOCBAQAogCS8qIFdhbnQgdG8gc3RhcnQgd2l0aCBrZXJuZWwgcHJlZW1wdGlvbiBkaXNhYmxlZC4gKi8KIAl0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ID0gMTsKICNlbmRpZgorCXBsaXN0X25vZGVfaW5pdCgmcC0+cHVzaGFibGVfdGFza3MsIE1BWF9QUklPKTsKKwogCXB1dF9jcHUoKTsKIH0KIApAQCAtMjQ5MSw3ICsyNTcxLDcgQEAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKIAogLyoqCi0gKiBwcmVlbXB0X25vdGlmaWVyX3JlZ2lzdGVyIC0gdGVsbCBtZSB3aGVuIGN1cnJlbnQgaXMgYmVpbmcgYmVpbmcgcHJlZW1wdGVkICYgcmVzY2hlZHVsZWQKKyAqIHByZWVtcHRfbm90aWZpZXJfcmVnaXN0ZXIgLSB0ZWxsIG1lIHdoZW4gY3VycmVudCBpcyBiZWluZyBwcmVlbXB0ZWQgJiByZXNjaGVkdWxlZAogICogQG5vdGlmaWVyOiBub3RpZmllciBzdHJ1Y3QgdG8gcmVnaXN0ZXIKICAqLwogdm9pZCBwcmVlbXB0X25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBwcmVlbXB0X25vdGlmaWVyICpub3RpZmllcikKQEAgLTI1ODgsNiArMjY2OCwxMiBAQAogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcnEtPnByZXZfbW07CiAJbG9uZyBwcmV2X3N0YXRlOworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgcG9zdF9zY2hlZHVsZSA9IDA7CisKKwlpZiAoY3VycmVudC0+c2NoZWRfY2xhc3MtPm5lZWRzX3Bvc3Rfc2NoZWR1bGUpCisJCXBvc3Rfc2NoZWR1bGUgPSBjdXJyZW50LT5zY2hlZF9jbGFzcy0+bmVlZHNfcG9zdF9zY2hlZHVsZShycSk7CisjZW5kaWYKIAogCXJxLT5wcmV2X21tID0gTlVMTDsKIApAQCAtMjYwNiw3ICsyNjkyLDcgQEAKIAlmaW5pc2hfYXJjaF9zd2l0Y2gocHJldik7CiAJZmluaXNoX2xvY2tfc3dpdGNoKHJxLCBwcmV2KTsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5wb3N0X3NjaGVkdWxlKQorCWlmIChwb3N0X3NjaGVkdWxlKQogCQljdXJyZW50LT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZShycSk7CiAjZW5kaWYKIApAQCAtMjkxMyw2ICsyOTk5LDcgQEAKIAkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCiAJCSAgICAgaW50ICphbGxfcGlubmVkKQogeworCWludCB0c2tfY2FjaGVfaG90ID0gMDsKIAkvKgogCSAqIFdlIGRvIG5vdCBtaWdyYXRlIHRhc2tzIHRoYXQgYXJlOgogCSAqIDEpIHJ1bm5pbmcgKG9idmlvdXNseSksIG9yCkBAIC0yOTM2LDEwICszMDIzLDExIEBACiAJICogMikgdG9vIG1hbnkgYmFsYW5jZSBhdHRlbXB0cyBoYXZlIGZhaWxlZC4KIAkgKi8KIAotCWlmICghdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCkgfHwKLQkJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CisJdHNrX2NhY2hlX2hvdCA9IHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpOworCWlmICghdHNrX2NhY2hlX2hvdCB8fAorCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcykgewogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCi0JCWlmICh0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKSkgeworCQlpZiAodHNrX2NhY2hlX2hvdCkgewogCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfaG90X2dhaW5lZFtpZGxlXSk7CiAJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZF9taWdyYXRpb25zKTsKIAkJfQpAQCAtMjk0Nyw3ICszMDM1LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpKSB7CisJaWYgKHRza19jYWNoZV9ob3QpIHsKIAkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yOTg3LDYgKzMwNzUsMTYgQEAKIAlwdWxsZWQrKzsKIAlyZW1fbG9hZF9tb3ZlIC09IHAtPnNlLmxvYWQud2VpZ2h0OwogCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwkvKgorCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlIGtlcm5lbHMKKwkgKiB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplIHRoZSBjcml0aWNhbAorCSAqIHNlY3Rpb24uCisJICovCisJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCisJCWdvdG8gb3V0OworI2VuZGlmCisKIAkvKgogCSAqIFdlIG9ubHkgd2FudCB0byBzdGVhbCB1cCB0byB0aGUgcHJlc2NyaWJlZCBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZC4KIAkgKi8KQEAgLTMwMzMsOSArMzEzMSwxNSBAQAogCQkJCXNkLCBpZGxlLCBhbGxfcGlubmVkLCAmdGhpc19iZXN0X3ByaW8pOwogCQljbGFzcyA9IGNsYXNzLT5uZXh0OwogCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwkJLyoKKwkJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUKKwkJICoga2VybmVscyB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplCisJCSAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorCQkgKi8KIAkJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUgJiYgdGhpc19ycS0+bnJfcnVubmluZykKIAkJCWJyZWFrOwotCisjZW5kaWYKIAl9IHdoaWxlIChjbGFzcyAmJiBtYXhfbG9hZF9tb3ZlID4gdG90YWxfbG9hZF9tb3ZlZCk7CiAKIAlyZXR1cm4gdG90YWxfbG9hZF9tb3ZlZCA+IDA7CkBAIC0zMDg1LDIxNSArMzE4OSw1NjUgQEAKIAogCXJldHVybiAwOwogfQorLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogc2RfbGJfc3RhdHMgLSBTdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIHN0YXRpc3RpY3Mgb2YgYSBzY2hlZF9kb21haW4KKyAqIAkJZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgorICovCitzdHJ1Y3Qgc2RfbGJfc3RhdHMgeworCXN0cnVjdCBzY2hlZF9ncm91cCAqYnVzaWVzdDsgLyogQnVzaWVzdCBncm91cCBpbiB0aGlzIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICp0aGlzOyAgLyogTG9jYWwgZ3JvdXAgaW4gdGhpcyBzZCAqLworCXVuc2lnbmVkIGxvbmcgdG90YWxfbG9hZDsgIC8qIFRvdGFsIGxvYWQgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgdG90YWxfcHdyOyAgIC8qCVRvdGFsIHBvd2VyIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOwkgICAvKiBBdmVyYWdlIGxvYWQgYWNyb3NzIGFsbCBncm91cHMgaW4gc2QgKi8KIAotLyoKLSAqIGZpbmRfYnVzaWVzdF9ncm91cCBmaW5kcyBhbmQgcmV0dXJucyB0aGUgYnVzaWVzdCBDUFUgZ3JvdXAgd2l0aGluIHRoZQotICogZG9tYWluLiBJdCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaAotICogc2hvdWxkIGJlIG1vdmVkIHRvIHJlc3RvcmUgYmFsYW5jZSB2aWEgdGhlIGltYmFsYW5jZSBwYXJhbWV0ZXIuCisJLyoqIFN0YXRpc3RpY3Mgb2YgdGhpcyBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkOworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgdGhpc19ucl9ydW5uaW5nOworCisJLyogU3RhdGlzdGljcyBvZiB0aGUgYnVzaWVzdCBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQ7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X25yX3J1bm5pbmc7CisKKwlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBpbWJhbGFuY2UgaW4gdGhpcyBzZCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCisJaW50IHBvd2VyX3NhdmluZ3NfYmFsYW5jZTsgLyogSXMgcG93ZXJzYXZlIGJhbGFuY2UgbmVlZGVkIGZvciB0aGlzIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9taW47IC8qIExlYXN0IGxvYWRlZCBncm91cCBpbiBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbGVhZGVyOyAvKiBHcm91cCB3aGljaCByZWxpZXZlcyBncm91cF9taW4gKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9sb2FkX3Blcl90YXNrOyAvKiBsb2FkX3Blcl90YXNrIGluIGdyb3VwX21pbiAqLworCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbGVhZGVyICovCisJdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9taW4gKi8KKyNlbmRpZgorfTsKKworLyoqCisgKiBzZ19sYl9zdGF0cyAtIHN0YXRzIG9mIGEgc2NoZWRfZ3JvdXAgcmVxdWlyZWQgZm9yIGxvYWRfYmFsYW5jaW5nCisgKi8KK3N0cnVjdCBzZ19sYl9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsgLypBdmcgbG9hZCBhY3Jvc3MgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBncm91cF9sb2FkOyAvKiBUb3RhbCBsb2FkIG92ZXIgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzdW1fbnJfcnVubmluZzsgLyogTnIgdGFza3MgcnVubmluZyBpbiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV93ZWlnaHRlZF9sb2FkOyAvKiBXZWlnaHRlZCBsb2FkIG9mIGdyb3VwJ3MgdGFza3MgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2NhcGFjaXR5OworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGFuIGltYmFsYW5jZSBpbiB0aGUgZ3JvdXAgPyAqLworfTsKKworLyoqCisgKiBncm91cF9maXJzdF9jcHUgLSBSZXR1cm5zIHRoZSBmaXJzdCBjcHUgaW4gdGhlIGNwdW1hc2sgb2YgYSBzY2hlZF9ncm91cC4KKyAqIEBncm91cDogVGhlIGdyb3VwIHdob3NlIGZpcnN0IGNwdSBpcyB0byBiZSByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3JvdXBfZmlyc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCit7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworfQorCisvKioKKyAqIGdldF9zZF9sb2FkX2lkeCAtIE9idGFpbiB0aGUgbG9hZCBpbmRleCBmb3IgYSBnaXZlbiBzY2hlZCBkb21haW4uCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgbG9hZF9pZHggaXMgdG8gYmUgb2J0YWluZWQuCisgKiBAaWRsZTogVGhlIElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgZm9yIHdob3NlIHNkIGxvYWRfaWN4IGlzIG9idGFpbmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfc2RfbG9hZF9pZHgoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCWludCBsb2FkX2lkeDsKKworCXN3aXRjaCAoaWRsZSkgeworCWNhc2UgQ1BVX05PVF9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5idXN5X2lkeDsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9ORVdMWV9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5uZXdpZGxlX2lkeDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsb2FkX2lkeDsKK30KKworCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKy8qKgorICogaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gSW5pdGlhbGl6ZSBwb3dlciBzYXZpbmdzIHN0YXRpc3RpY3MgZm9yCisgKiB0aGUgZ2l2ZW4gc2NoZWRfZG9tYWluLCBkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQHNkOiBTY2hlZCBkb21haW4gd2hvc2UgcG93ZXItc2F2aW5ncyBzdGF0aXN0aWNzIGFyZSB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3MgZm9yIHNkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgYXQgd2hpY2ggd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJLyoKKwkgKiBCdXN5IHByb2Nlc3NvcnMgd2lsbCBub3QgcGFydGljaXBhdGUgaW4gcG93ZXIgc2F2aW5ncworCSAqIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8ICEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisJZWxzZSB7CisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMTsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IDA7CisJfQorfQorCisvKioKKyAqIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gVXBkYXRlIHRoZSBwb3dlciBzYXZpbmcgc3RhdHMgZm9yIGEKKyAqIHNjaGVkX2RvbWFpbiB3aGlsZSBwZXJmb3JtaW5nIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEBncm91cDogc2NoZWRfZ3JvdXAgYmVsb25naW5nIHRvIHRoZSBzY2hlZF9kb21haW4gdW5kZXIgY29uc2lkZXJhdGlvbi4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhlIENQVSBmb3Igd2hpY2ggd2UncmUgcGVyZm9ybWluZworICogCQlsb2FkIGJhbGFuY2luZyA/CisgKiBAc2dzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBncm91cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCisJICogbm8gbmVlZCB0byBkbyBwb3dlciBzYXZpbmdzIGJhbGFuY2UgYXQgdGhpcyBkb21haW4KKwkgKi8KKwlpZiAobG9jYWxfZ3JvdXAgJiYgKHNkcy0+dGhpc19ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKKwkJCQkhc2RzLT50aGlzX25yX3J1bm5pbmcpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisKKwkvKgorCSAqIElmIGEgZ3JvdXAgaXMgYWxyZWFkeSBydW5uaW5nIGF0IGZ1bGwgY2FwYWNpdHkgb3IgaWRsZSwKKwkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKKwkgKi8KKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8CisJCXNncy0+c3VtX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkhc2dzLT5zdW1fbnJfcnVubmluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGhhcyB0aGUgbGVhc3Qgbm9uLWlkbGUgbG9hZC4KKwkgKiBUaGlzIGlzIHRoZSBncm91cCBmcm9tIHdoZXJlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgbG9hZAorCSAqIGZvciBzYXZpbmcgcG93ZXIKKwkgKi8KKwlpZiAoKHNncy0+c3VtX25yX3J1bm5pbmcgPCBzZHMtPm1pbl9ucl9ydW5uaW5nKSB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPm1pbl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApID4gZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbWluKSkpIHsKKwkJc2RzLT5ncm91cF9taW4gPSBncm91cDsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJCXNkcy0+bWluX2xvYWRfcGVyX3Rhc2sgPSBzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkIC8KKwkJCQkJCXNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGlzIGFsbW9zdCBuZWFyIGl0cworCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAorCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgorCSAqLworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2dzLT5ncm91cF9jYXBhY2l0eSAtIDEpCisJCXJldHVybjsKKworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2RzLT5sZWFkZXJfbnJfcnVubmluZyB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApIDwgZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbGVhZGVyKSkpIHsKKwkJc2RzLT5ncm91cF9sZWFkZXIgPSBncm91cDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorfQorCisvKioKKyAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIENoZWNrIGlmIHdlIGhhdmUgcG90ZW50aWFsIHRvIHBlcmZvcm0KKyAqCXNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLiBJZiB5ZXMsIHNldCB0aGUgYnVzaWVzdCBncm91cCB0byBiZQorICoJdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUgc2NoZWRfZG9tYWluLCBzbyB0aGF0IGl0J3MgQ1BVcyBjYW4KKyAqCWJlIHB1dCB0byBpZGxlLgorICoKKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgorICoJdW5kZXIgY29uc2lkZXJhdGlvbi4KKyAqIEB0aGlzX2NwdTogQ3B1IGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgorICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlcmUgaXMgcG90ZW50aWFsIHRvIHBlcmZvcm0gcG93ZXItc2F2aW5ncyBiYWxhbmNlLgorICogRWxzZSByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2RzLT50aGlzICE9IHNkcy0+Z3JvdXBfbGVhZGVyIHx8CisJCQlzZHMtPmdyb3VwX2xlYWRlciA9PSBzZHMtPmdyb3VwX21pbikKKwkJcmV0dXJuIDA7CisKKwkqaW1iYWxhbmNlID0gc2RzLT5taW5fbG9hZF9wZXJfdGFzazsKKwlzZHMtPmJ1c2llc3QgPSBzZHMtPmdyb3VwX21pbjsKKworCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzID49IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkgeworCQljcHVfcnEodGhpc19jcHUpLT5yZC0+c2NoZWRfbWNfcHJlZmVycmVkX3dha2V1cF9jcHUgPQorCQkJZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbGVhZGVyKTsKKwl9CisKKwlyZXR1cm4gMTsKKworfQorI2Vsc2UgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCisKKworLyoqCisgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBncm91cDogc2NoZWRfZ3JvdXAgd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQorICogQGxvYWRfaWR4OiBMb2FkIGluZGV4IG9mIHNjaGVkX2RvbWFpbiBvZiB0aGlzX2NwdSBmb3IgbG9hZCBjYWxjLgorICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KKyAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoaXNfY3B1LgorICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgorICogQHNnczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBncm91cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBpbnQgdGhpc19jcHUsCisJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50IGxvYWRfaWR4LCBpbnQgKnNkX2lkbGUsCisJCQlpbnQgbG9jYWxfZ3JvdXAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAorCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKwl1bnNpZ25lZCBsb25nIGxvYWQsIG1heF9jcHVfbG9hZCwgbWluX2NwdV9sb2FkOworCWludCBpOworCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7CisJdW5zaWduZWQgbG9uZyBzdW1fYXZnX2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZF9wZXJfdGFzazsKKworCWlmIChsb2NhbF9ncm91cCkKKwkJYmFsYW5jZV9jcHUgPSBncm91cF9maXJzdF9jcHUoZ3JvdXApOworCisJLyogVGFsbHkgdXAgdGhlIGxvYWQgb2YgYWxsIENQVXMgaW4gdGhlIGdyb3VwICovCisJc3VtX2F2Z19sb2FkX3Blcl90YXNrID0gYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOworCW1heF9jcHVfbG9hZCA9IDA7CisJbWluX2NwdV9sb2FkID0gfjBVTDsKKworCWZvcl9lYWNoX2NwdV9hbmQoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCksIGNwdXMpIHsKKwkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKKworCQlpZiAoKnNkX2lkbGUgJiYgcnEtPm5yX3J1bm5pbmcpCisJCQkqc2RfaWRsZSA9IDA7CisKKwkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLworCQlpZiAobG9jYWxfZ3JvdXApIHsKKwkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKKwkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7CisJCQkJYmFsYW5jZV9jcHUgPSBpOworCQkJfQorCisJCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOworCQl9IGVsc2UgeworCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKKwkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQorCQkJCW1heF9jcHVfbG9hZCA9IGxvYWQ7CisJCQlpZiAobWluX2NwdV9sb2FkID4gbG9hZCkKKwkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOworCQl9CisKKwkJc2dzLT5ncm91cF9sb2FkICs9IGxvYWQ7CisJCXNncy0+c3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7CisJCXNncy0+c3VtX3dlaWdodGVkX2xvYWQgKz0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKKworCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKz0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKGkpOworCX0KKworCS8qCisJICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCisJICogaXMgZWxpZ2libGUgZm9yIGRvaW5nIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXMgYW5kIGFib3ZlCisJICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCisJICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgorCSAqLworCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCisJICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1ICYmIGJhbGFuY2UpIHsKKwkJKmJhbGFuY2UgPSAwOworCQlyZXR1cm47CisJfQorCisJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KKwlzZ3MtPmF2Z19sb2FkID0gc2dfZGl2X2NwdV9wb3dlcihncm91cCwKKwkJCXNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpOworCisKKwkvKgorCSAqIENvbnNpZGVyIHRoZSBncm91cCB1bmJhbGFuY2VkIHdoZW4gdGhlIGltYmFsYW5jZSBpcyBsYXJnZXIKKwkgKiB0aGFuIHRoZSBhdmVyYWdlIHdlaWdodCBvZiB0d28gdGFza3MuCisJICoKKwkgKiBBUFo6IHdpdGggY2dyb3VwIHRoZSBhdmcgdGFzayB3ZWlnaHQgY2FuIHZhcnkgd2lsZGx5IGFuZAorCSAqICAgICAgbWlnaHQgbm90IGJlIGEgc3VpdGFibGUgbnVtYmVyIC0gc2hvdWxkIHdlIGtlZXAgYQorCSAqICAgICAgbm9ybWFsaXplZCBucl9ydW5uaW5nIG51bWJlciBzb21ld2hlcmUgdGhhdCBuZWdhdGVzCisJICogICAgICB0aGUgaGllcmFyY2h5PworCSAqLworCWF2Z19sb2FkX3Blcl90YXNrID0gc2dfZGl2X2NwdV9wb3dlcihncm91cCwKKwkJCXN1bV9hdmdfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOworCisJaWYgKChtYXhfY3B1X2xvYWQgLSBtaW5fY3B1X2xvYWQpID4gMiphdmdfbG9hZF9wZXJfdGFzaykKKwkJc2dzLT5ncm91cF9pbWIgPSAxOworCisJc2dzLT5ncm91cF9jYXBhY2l0eSA9IGdyb3VwLT5fX2NwdV9wb3dlciAvIFNDSEVEX0xPQURfU0NBTEU7CisKK30KKworLyoqCisgKiB1cGRhdGVfc2RfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBzZDogc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKKyAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCisgKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCisgKiBAc2RzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIHNjaGVkX2RvbWFpbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAorCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqc2RfaWRsZSwKKwkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UsCisJCQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcykKK3sKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwID0gc2QtPmdyb3VwczsKKwlzdHJ1Y3Qgc2dfbGJfc3RhdHMgc2dzOworCWludCBsb2FkX2lkeDsKKworCWluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzZCwgc2RzLCBpZGxlKTsKKwlsb2FkX2lkeCA9IGdldF9zZF9sb2FkX2lkeChzZCwgaWRsZSk7CisKKwlkbyB7CisJCWludCBsb2NhbF9ncm91cDsKKworCQlsb2NhbF9ncm91cCA9IGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCisJCQkJCSAgICAgICBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7CisJCW1lbXNldCgmc2dzLCAwLCBzaXplb2Yoc2dzKSk7CisJCXVwZGF0ZV9zZ19sYl9zdGF0cyhncm91cCwgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAorCQkJCWxvY2FsX2dyb3VwLCBjcHVzLCBiYWxhbmNlLCAmc2dzKTsKKworCQlpZiAobG9jYWxfZ3JvdXAgJiYgYmFsYW5jZSAmJiAhKCpiYWxhbmNlKSkKKwkJCXJldHVybjsKKworCQlzZHMtPnRvdGFsX2xvYWQgKz0gc2dzLmdyb3VwX2xvYWQ7CisJCXNkcy0+dG90YWxfcHdyICs9IGdyb3VwLT5fX2NwdV9wb3dlcjsKKworCQlpZiAobG9jYWxfZ3JvdXApIHsKKwkJCXNkcy0+dGhpc19sb2FkID0gc2dzLmF2Z19sb2FkOworCQkJc2RzLT50aGlzID0gZ3JvdXA7CisJCQlzZHMtPnRoaXNfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKKwkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOworCQl9IGVsc2UgaWYgKHNncy5hdmdfbG9hZCA+IHNkcy0+bWF4X2xvYWQgJiYKKwkJCSAgIChzZ3Muc3VtX25yX3J1bm5pbmcgPiBzZ3MuZ3JvdXBfY2FwYWNpdHkgfHwKKwkJCQlzZ3MuZ3JvdXBfaW1iKSkgeworCQkJc2RzLT5tYXhfbG9hZCA9IHNncy5hdmdfbG9hZDsKKwkJCXNkcy0+YnVzaWVzdCA9IGdyb3VwOworCQkJc2RzLT5idXNpZXN0X25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7CisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKKwkJCXNkcy0+Z3JvdXBfaW1iID0gc2dzLmdyb3VwX2ltYjsKKwkJfQorCisJCXVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKGdyb3VwLCBzZHMsIGxvY2FsX2dyb3VwLCAmc2dzKTsKKwkJZ3JvdXAgPSBncm91cC0+bmV4dDsKKwl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKKworfQorCisvKioKKyAqIGZpeF9zbWFsbF9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIG1pbm9yIGltYmFsYW5jZSB0aGF0IGV4aXN0cworICoJCQlhbW9uZ3N0IHRoZSBncm91cHMgb2YgYSBzY2hlZF9kb21haW4sIGR1cmluZworICoJCQlsb2FkIGJhbGFuY2luZy4KKyAqIEBzZHM6IFN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBhdCB3aG9zZSBzY2hlZF9kb21haW4gd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2UuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZml4X3NtYWxsX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgcHdyX25vdyA9IDAsIHB3cl9tb3ZlID0gMDsKKwl1bnNpZ25lZCBpbnQgaW1ibiA9IDI7CisKKwlpZiAoc2RzLT50aGlzX25yX3J1bm5pbmcpIHsKKwkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgLz0gc2RzLT50aGlzX25yX3J1bm5pbmc7CisJCWlmIChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA+CisJCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2spCisJCQlpbWJuID0gMTsKKwl9IGVsc2UKKwkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPQorCQkJY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKKworCWlmIChzZHMtPm1heF9sb2FkIC0gc2RzLT50aGlzX2xvYWQgKyBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA+PQorCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBpbWJuKSB7CisJCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKKwkgKiBob3dldmVyIHdlIG1heSBiZSBhYmxlIHRvIGluY3JlYXNlIHRvdGFsIENQVSBwb3dlciB1c2VkIGJ5CisJICogbW92aW5nIHRoZW0uCisJICovCisKKwlwd3Jfbm93ICs9IHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkKTsKKwlwd3Jfbm93ICs9IHNkcy0+dGhpcy0+X19jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCk7CisJcHdyX25vdyAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLworCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIoc2RzLT5idXNpZXN0LAorCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKwlpZiAoc2RzLT5tYXhfbG9hZCA+IHRtcCkKKwkJcHdyX21vdmUgKz0gc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciAqCisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQgLSB0bXApOworCisJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KKwlpZiAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIgPAorCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCisJCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIoc2RzLT50aGlzLAorCQkJc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIpOworCWVsc2UKKwkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcihzZHMtPnRoaXMsCisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOworCXB3cl9tb3ZlICs9IHNkcy0+dGhpcy0+X19jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCArIHRtcCk7CisJcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKKworCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCisJaWYgKHB3cl9tb3ZlID4gcHdyX25vdykKKwkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOworfQorCisvKioKKyAqIGNhbGN1bGF0ZV9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBpbWJhbGFuY2UgcHJlc2VudCB3aXRoaW4gdGhlCisgKgkJCSBncm91cHMgb2YgYSBnaXZlbiBzY2hlZF9kb21haW4gZHVyaW5nIGxvYWQgYmFsYW5jZS4KKyAqIEBzZHM6IHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBjdXJyZW50bHkgbG9hZCBiYWxhbmNlIGlzIGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBpbWJhbGFuY2U6IFRoZSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IHRoaXNfY3B1LAorCQl1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJdW5zaWduZWQgbG9uZyBtYXhfcHVsbDsKKwkvKgorCSAqIEluIHRoZSBwcmVzZW5jZSBvZiBzbXAgbmljZSBiYWxhbmNpbmcsIGNlcnRhaW4gc2NlbmFyaW9zIGNhbiBoYXZlCisJICogbWF4IGxvYWQgbGVzcyB0aGFuIGF2ZyBsb2FkKGFzIHdlIHNraXAgdGhlIGdyb3VwcyBhdCBvciBiZWxvdworCSAqIGl0cyBjcHVfcG93ZXIsIHdoaWxlIGNhbGN1bGF0aW5nIG1heF9sb2FkLi4pCisJICovCisJaWYgKHNkcy0+bWF4X2xvYWQgPCBzZHMtPmF2Z19sb2FkKSB7CisJCSppbWJhbGFuY2UgPSAwOworCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCX0KKworCS8qIERvbid0IHdhbnQgdG8gcHVsbCBzbyBtYW55IHRhc2tzIHRoYXQgYSBncm91cCB3b3VsZCBnbyBpZGxlICovCisJbWF4X3B1bGwgPSBtaW4oc2RzLT5tYXhfbG9hZCAtIHNkcy0+YXZnX2xvYWQsCisJCQlzZHMtPm1heF9sb2FkIC0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spOworCisJLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KKwkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciwKKwkJKHNkcy0+YXZnX2xvYWQgLSBzZHMtPnRoaXNfbG9hZCkgKiBzZHMtPnRoaXMtPl9fY3B1X3Bvd2VyKQorCQkJLyBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyoKKwkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCisJICogdGhlcmUgaXMgbm8gZ2F1cmFudGVlIHRoYXQgYW55IHRhc2tzIHdpbGwgYmUgbW92ZWQgc28gd2UnbGwgaGF2ZQorCSAqIGEgdGhpbmsgYWJvdXQgYnVtcGluZyBpdHMgdmFsdWUgdG8gZm9yY2UgYXQgbGVhc3Qgb25lIHRhc2sgdG8gYmUKKwkgKiBtb3ZlZAorCSAqLworCWlmICgqaW1iYWxhbmNlIDwgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spCisJCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisKK30KKy8qKioqKioqIGZpbmRfYnVzaWVzdF9ncm91cCgpIGhlbHBlcnMgZW5kIGhlcmUgKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIGZpbmRfYnVzaWVzdF9ncm91cCAtIFJldHVybnMgdGhlIGJ1c2llc3QgZ3JvdXAgd2l0aGluIHRoZSBzY2hlZF9kb21haW4KKyAqIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gSWYgdGhlcmUgaXNuJ3QgYW4gaW1iYWxhbmNlLCBhbmQKKyAqIHRoZSB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncywgaXQgcmV0dXJucyBhIGdyb3VwIHdob3NlCisgKiBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyB0aG9zZSB0YXNrcyBlbHNld2hlcmUsIGlmCisgKiBzdWNoIGEgZ3JvdXAgZXhpc3RzLgorICoKKyAqIEFsc28gY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkIGJlIG1vdmVkCisgKiB0byByZXN0b3JlIGJhbGFuY2UuCisgKgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGJ1c2llc3QgZ3JvdXAgaXMgdG8gYmUgcmV0dXJuZWQuCisgKiBAdGhpc19jcHU6IFRoZSBjcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jaW5nIGlzIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB3aGljaCBzdG9yZXMgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkCisgKgkJYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlL3B1dCBhIGdyb3VwIHRvIGlkbGUuCisgKiBAaWRsZTogVGhlIGlkbGUgc3RhdHVzIG9mIHRoaXNfY3B1LgorICogQHNkX2lkbGU6IFRoZSBpZGxlbmVzcyBvZiBzZAorICogQGNwdXM6IFRoZSBzZXQgb2YgQ1BVcyB1bmRlciBjb25zaWRlcmF0aW9uIGZvciBsb2FkLWJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgaW5kaWNhdGluZyBpZiB0aGlzX2NwdQorICoJaXMgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXNfbGV2ZWwuCisgKgorICogUmV0dXJuczoJLSB0aGUgYnVzaWVzdCBncm91cCBpZiBpbWJhbGFuY2UgZXhpc3RzLgorICoJCS0gSWYgbm8gaW1iYWxhbmNlIGFuZCB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncyBiYWxhbmNlLAorICoJCSAgIHJldHVybiB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIHdob3NlIENQVXMgY2FuIGJlCisgKgkJICAgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgaXRzIHRhc2tzIG9udG8gb3VyIGdyb3VwLgogICovCiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoKIGZpbmRfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAogCQkgICB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAogCQkgICBpbnQgKnNkX2lkbGUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UpCiB7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0ID0gTlVMTCwgKnRoaXMgPSBOVUxMLCAqZ3JvdXAgPSBzZC0+Z3JvdXBzOwotCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQsIGF2Z19sb2FkLCB0b3RhbF9sb2FkLCB0aGlzX2xvYWQsIHRvdGFsX3B3cjsKLQl1bnNpZ25lZCBsb25nIG1heF9wdWxsOwotCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBidXNpZXN0X25yX3J1bm5pbmc7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWRfcGVyX3Rhc2ssIHRoaXNfbnJfcnVubmluZzsKLQlpbnQgbG9hZF9pZHgsIGdyb3VwX2ltYiA9IDA7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQlpbnQgcG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMTsKLQl1bnNpZ25lZCBsb25nIGxlYWRlcl9ucl9ydW5uaW5nID0gMCwgbWluX2xvYWRfcGVyX3Rhc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbWluX25yX3J1bm5pbmcgPSBVTE9OR19NQVg7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9taW4gPSBOVUxMLCAqZ3JvdXBfbGVhZGVyID0gTlVMTDsKLSNlbmRpZgorCXN0cnVjdCBzZF9sYl9zdGF0cyBzZHM7CiAKLQltYXhfbG9hZCA9IHRoaXNfbG9hZCA9IHRvdGFsX2xvYWQgPSB0b3RhbF9wd3IgPSAwOwotCWJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IGJ1c2llc3RfbnJfcnVubmluZyA9IDA7Ci0JdGhpc19sb2FkX3Blcl90YXNrID0gdGhpc19ucl9ydW5uaW5nID0gMDsKKwltZW1zZXQoJnNkcywgMCwgc2l6ZW9mKHNkcykpOwogCi0JaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFKQotCQlsb2FkX2lkeCA9IHNkLT5idXN5X2lkeDsKLQllbHNlIGlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKQotCQlsb2FkX2lkeCA9IHNkLT5uZXdpZGxlX2lkeDsKLQllbHNlCi0JCWxvYWRfaWR4ID0gc2QtPmlkbGVfaWR4OworCS8qCisJICogQ29tcHV0ZSB0aGUgdmFyaW91cyBzdGF0aXN0aWNzIHJlbGF2ZW50IGZvciBsb2FkIGJhbGFuY2luZyBhdAorCSAqIHRoaXMgbGV2ZWwuCisJICovCisJdXBkYXRlX3NkX2xiX3N0YXRzKHNkLCB0aGlzX2NwdSwgaWRsZSwgc2RfaWRsZSwgY3B1cywKKwkJCQkJYmFsYW5jZSwgJnNkcyk7CiAKLQlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9hZCwgZ3JvdXBfY2FwYWNpdHksIG1heF9jcHVfbG9hZCwgbWluX2NwdV9sb2FkOwotCQlpbnQgbG9jYWxfZ3JvdXA7Ci0JCWludCBpOwotCQlpbnQgX19ncm91cF9pbWIgPSAwOwotCQl1bnNpZ25lZCBpbnQgYmFsYW5jZV9jcHUgPSAtMSwgZmlyc3RfaWRsZV9jcHUgPSAwOwotCQl1bnNpZ25lZCBsb25nIHN1bV9ucl9ydW5uaW5nLCBzdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJdW5zaWduZWQgbG9uZyBzdW1fYXZnX2xvYWRfcGVyX3Rhc2s7Ci0JCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWRfcGVyX3Rhc2s7CisJLyogQ2FzZXMgd2hlcmUgaW1iYWxhbmNlIGRvZXMgbm90IGV4aXN0IGZyb20gUE9WIG9mIHRoaXNfY3B1ICovCisJLyogMSkgdGhpc19jcHUgaXMgbm90IHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZworCSAqICAgIGF0IHRoaXMgbGV2ZWwuCisJICogMikgVGhlcmUgaXMgbm8gYnVzeSBzaWJsaW5nIGdyb3VwIHRvIHB1bGwgZnJvbS4KKwkgKiAzKSBUaGlzIGdyb3VwIGlzIHRoZSBidXNpZXN0IGdyb3VwLgorCSAqIDQpIFRoaXMgZ3JvdXAgaXMgbW9yZSBidXN5IHRoYW4gdGhlIGF2ZyBidXNpZW5lc3MgYXQgdGhpcworCSAqICAgIHNjaGVkX2RvbWFpbi4KKwkgKiA1KSBUaGUgaW1iYWxhbmNlIGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGxpbWl0LgorCSAqIDYpIEFueSByZWJhbGFuY2Ugd291bGQgbGVhZCB0byBwaW5nLXBvbmcKKwkgKi8KKwlpZiAoYmFsYW5jZSAmJiAhKCpiYWxhbmNlKSkKKwkJZ290byByZXQ7CiAKLQkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAotCQkJCQkgICAgICAgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOwotCi0JCWlmIChsb2NhbF9ncm91cCkKLQkJCWJhbGFuY2VfY3B1ID0gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Ci0KLQkJLyogVGFsbHkgdXAgdGhlIGxvYWQgb2YgYWxsIENQVXMgaW4gdGhlIGdyb3VwICovCi0JCXN1bV93ZWlnaHRlZF9sb2FkID0gc3VtX25yX3J1bm5pbmcgPSBhdmdfbG9hZCA9IDA7Ci0JCXN1bV9hdmdfbG9hZF9wZXJfdGFzayA9IGF2Z19sb2FkX3Blcl90YXNrID0gMDsKLQotCQltYXhfY3B1X2xvYWQgPSAwOwotCQltaW5fY3B1X2xvYWQgPSB+MFVMOwotCi0JCWZvcl9lYWNoX2NwdV9hbmQoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCksIGNwdXMpIHsKLQkJCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoaSk7Ci0KLQkJCWlmICgqc2RfaWRsZSAmJiBycS0+bnJfcnVubmluZykKLQkJCQkqc2RfaWRsZSA9IDA7Ci0KLQkJCS8qIEJpYXMgYmFsYW5jaW5nIHRvd2FyZCBjcHVzIG9mIG91ciBkb21haW4gKi8KLQkJCWlmIChsb2NhbF9ncm91cCkgewotCQkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKLQkJCQkJZmlyc3RfaWRsZV9jcHUgPSAxOwotCQkJCQliYWxhbmNlX2NwdSA9IGk7Ci0JCQkJfQotCi0JCQkJbG9hZCA9IHRhcmdldF9sb2FkKGksIGxvYWRfaWR4KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKLQkJCQlpZiAobG9hZCA+IG1heF9jcHVfbG9hZCkKLQkJCQkJbWF4X2NwdV9sb2FkID0gbG9hZDsKLQkJCQlpZiAobWluX2NwdV9sb2FkID4gbG9hZCkKLQkJCQkJbWluX2NwdV9sb2FkID0gbG9hZDsKLQkJCX0KLQotCQkJYXZnX2xvYWQgKz0gbG9hZDsKLQkJCXN1bV9ucl9ydW5uaW5nICs9IHJxLT5ucl9ydW5uaW5nOwotCQkJc3VtX3dlaWdodGVkX2xvYWQgKz0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKLQotCQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICs9IGNwdV9hdmdfbG9hZF9wZXJfdGFzayhpKTsKLQkJfQotCi0JCS8qCi0JCSAqIEZpcnN0IGlkbGUgY3B1IG9yIHRoZSBmaXJzdCBjcHUoYnVzaWVzdCkgaW4gdGhpcyBzY2hlZCBncm91cAotCQkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKLQkJICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCi0JCSAqIHRvIGRvIHRoZSBuZXdseSBpZGxlIGxvYWQgYmFsYW5jZS4KLQkJICovCi0JCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCi0JCSAgICBiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSAmJiBiYWxhbmNlKSB7Ci0JCQkqYmFsYW5jZSA9IDA7Ci0JCQlnb3RvIHJldDsKLQkJfQotCi0JCXRvdGFsX2xvYWQgKz0gYXZnX2xvYWQ7Ci0JCXRvdGFsX3B3ciArPSBncm91cC0+X19jcHVfcG93ZXI7Ci0KLQkJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KLQkJYXZnX2xvYWQgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAotCQkJCWF2Z19sb2FkICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0KLQotCQkvKgotCQkgKiBDb25zaWRlciB0aGUgZ3JvdXAgdW5iYWxhbmNlZCB3aGVuIHRoZSBpbWJhbGFuY2UgaXMgbGFyZ2VyCi0JCSAqIHRoYW4gdGhlIGF2ZXJhZ2Ugd2VpZ2h0IG9mIHR3byB0YXNrcy4KLQkJICoKLQkJICogQVBaOiB3aXRoIGNncm91cCB0aGUgYXZnIHRhc2sgd2VpZ2h0IGNhbiB2YXJ5IHdpbGRseSBhbmQKLQkJICogICAgICBtaWdodCBub3QgYmUgYSBzdWl0YWJsZSBudW1iZXIgLSBzaG91bGQgd2Uga2VlcCBhCi0JCSAqICAgICAgbm9ybWFsaXplZCBucl9ydW5uaW5nIG51bWJlciBzb21ld2hlcmUgdGhhdCBuZWdhdGVzCi0JCSAqICAgICAgdGhlIGhpZXJhcmNoeT8KLQkJICovCi0JCWF2Z19sb2FkX3Blcl90YXNrID0gc2dfZGl2X2NwdV9wb3dlcihncm91cCwKLQkJCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKLQotCQlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQotCQkJX19ncm91cF9pbWIgPSAxOwotCi0JCWdyb3VwX2NhcGFjaXR5ID0gZ3JvdXAtPl9fY3B1X3Bvd2VyIC8gU0NIRURfTE9BRF9TQ0FMRTsKLQotCQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJCXRoaXNfbG9hZCA9IGF2Z19sb2FkOwotCQkJdGhpcyA9IGdyb3VwOwotCQkJdGhpc19ucl9ydW5uaW5nID0gc3VtX25yX3J1bm5pbmc7Ci0JCQl0aGlzX2xvYWRfcGVyX3Rhc2sgPSBzdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJfSBlbHNlIGlmIChhdmdfbG9hZCA+IG1heF9sb2FkICYmCi0JCQkgICAoc3VtX25yX3J1bm5pbmcgPiBncm91cF9jYXBhY2l0eSB8fCBfX2dyb3VwX2ltYikpIHsKLQkJCW1heF9sb2FkID0gYXZnX2xvYWQ7Ci0JCQlidXNpZXN0ID0gZ3JvdXA7Ci0JCQlidXNpZXN0X25yX3J1bm5pbmcgPSBzdW1fbnJfcnVubmluZzsKLQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IHN1bV93ZWlnaHRlZF9sb2FkOwotCQkJZ3JvdXBfaW1iID0gX19ncm91cF9pbWI7Ci0JCX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JCS8qCi0JCSAqIEJ1c3kgcHJvY2Vzc29ycyB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwb3dlciBzYXZpbmdzCi0JCSAqIGJhbGFuY2UuCi0JCSAqLwotCQlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwKLQkJCQkhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJCWdvdG8gZ3JvdXBfbmV4dDsKLQotCQkvKgotCQkgKiBJZiB0aGUgbG9jYWwgZ3JvdXAgaXMgaWRsZSBvciBjb21wbGV0ZWx5IGxvYWRlZAotCQkgKiBubyBuZWVkIHRvIGRvIHBvd2VyIHNhdmluZ3MgYmFsYW5jZSBhdCB0aGlzIGRvbWFpbgotCQkgKi8KLQkJaWYgKGxvY2FsX2dyb3VwICYmICh0aGlzX25yX3J1bm5pbmcgPj0gZ3JvdXBfY2FwYWNpdHkgfHwKLQkJCQkgICAgIXRoaXNfbnJfcnVubmluZykpCi0JCQlwb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOwotCi0JCS8qCi0JCSAqIElmIGEgZ3JvdXAgaXMgYWxyZWFkeSBydW5uaW5nIGF0IGZ1bGwgY2FwYWNpdHkgb3IgaWRsZSwKLQkJICogZG9uJ3QgaW5jbHVkZSB0aGF0IGdyb3VwIGluIHBvd2VyIHNhdmluZ3MgY2FsY3VsYXRpb25zCi0JCSAqLwotCQlpZiAoIXBvd2VyX3NhdmluZ3NfYmFsYW5jZSB8fCBzdW1fbnJfcnVubmluZyA+PSBncm91cF9jYXBhY2l0eQotCQkgICAgfHwgIXN1bV9ucl9ydW5uaW5nKQotCQkJZ290byBncm91cF9uZXh0OwotCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaGFzIHRoZSBsZWFzdCBub24taWRsZSBsb2FkLgotCQkgKiBUaGlzIGlzIHRoZSBncm91cCBmcm9tIHdoZXJlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgbG9hZAotCQkgKiBmb3Igc2F2aW5nIHBvd2VyCi0JCSAqLwotCQlpZiAoKHN1bV9ucl9ydW5uaW5nIDwgbWluX25yX3J1bm5pbmcpIHx8Ci0JCSAgICAoc3VtX25yX3J1bm5pbmcgPT0gbWluX25yX3J1bm5pbmcgJiYKLQkJICAgICBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKSA+Ci0JCSAgICAgY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwX21pbikpKSkgewotCQkJZ3JvdXBfbWluID0gZ3JvdXA7Ci0JCQltaW5fbnJfcnVubmluZyA9IHN1bV9ucl9ydW5uaW5nOwotCQkJbWluX2xvYWRfcGVyX3Rhc2sgPSBzdW1fd2VpZ2h0ZWRfbG9hZCAvCi0JCQkJCQlzdW1fbnJfcnVubmluZzsKLQkJfQotCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaXMgYWxtb3N0IG5lYXIgaXRzCi0JCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAotCQkgKiBmcm9tIG90aGVyIGdyb3VwIGFuZCBzYXZlIG1vcmUgcG93ZXIKLQkJICovCi0JCWlmIChzdW1fbnJfcnVubmluZyA8PSBncm91cF9jYXBhY2l0eSAtIDEpIHsKLQkJCWlmIChzdW1fbnJfcnVubmluZyA+IGxlYWRlcl9ucl9ydW5uaW5nIHx8Ci0JCQkgICAgKHN1bV9ucl9ydW5uaW5nID09IGxlYWRlcl9ucl9ydW5uaW5nICYmCi0JCQkgICAgIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpIDwKLQkJCSAgICAgY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwX2xlYWRlcikpKSkgewotCQkJCWdyb3VwX2xlYWRlciA9IGdyb3VwOwotCQkJCWxlYWRlcl9ucl9ydW5uaW5nID0gc3VtX25yX3J1bm5pbmc7Ci0JCQl9Ci0JCX0KLWdyb3VwX25leHQ6Ci0jZW5kaWYKLQkJZ3JvdXAgPSBncm91cC0+bmV4dDsKLQl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKLQotCWlmICghYnVzaWVzdCB8fCB0aGlzX2xvYWQgPj0gbWF4X2xvYWQgfHwgYnVzaWVzdF9ucl9ydW5uaW5nID09IDApCisJaWYgKCFzZHMuYnVzaWVzdCB8fCBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nID09IDApCiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCi0JYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHRvdGFsX2xvYWQpIC8gdG90YWxfcHdyOwotCi0JaWYgKHRoaXNfbG9hZCA+PSBhdmdfbG9hZCB8fAotCQkJMTAwKm1heF9sb2FkIDw9IHNkLT5pbWJhbGFuY2VfcGN0KnRoaXNfbG9hZCkKKwlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMubWF4X2xvYWQpCiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCi0JYnVzaWVzdF9sb2FkX3Blcl90YXNrIC89IGJ1c2llc3RfbnJfcnVubmluZzsKLQlpZiAoZ3JvdXBfaW1iKQotCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBtaW4oYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBhdmdfbG9hZCk7CisJc2RzLmF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOworCisJaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLmF2Z19sb2FkKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCWlmICgxMDAgKiBzZHMubWF4X2xvYWQgPD0gc2QtPmltYmFsYW5jZV9wY3QgKiBzZHMudGhpc19sb2FkKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCXNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgLz0gc2RzLmJ1c2llc3RfbnJfcnVubmluZzsKKwlpZiAoc2RzLmdyb3VwX2ltYikKKwkJc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9CisJCQltaW4oc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLmF2Z19sb2FkKTsKIAogCS8qCiAJICogV2UncmUgdHJ5aW5nIHRvIGdldCBhbGwgdGhlIGNwdXMgdG8gdGhlIGF2ZXJhZ2VfbG9hZCwgc28gd2UgZG9uJ3QKQEAgLTMzMDYsMTA1ICszNzYwLDIwIEBACiAJICogYnkgcHVsbGluZyB0YXNrcyB0byB1cy4gQmUgY2FyZWZ1bCBvZiBuZWdhdGl2ZSBudW1iZXJzIGFzIHRoZXknbGwKIAkgKiBhcHBlYXIgYXMgdmVyeSBsYXJnZSB2YWx1ZXMgd2l0aCB1bnNpZ25lZCBsb25ncy4KIAkgKi8KLQlpZiAobWF4X2xvYWQgPD0gYnVzaWVzdF9sb2FkX3Blcl90YXNrKQorCWlmIChzZHMubWF4X2xvYWQgPD0gc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKLQkvKgotCSAqIEluIHRoZSBwcmVzZW5jZSBvZiBzbXAgbmljZSBiYWxhbmNpbmcsIGNlcnRhaW4gc2NlbmFyaW9zIGNhbiBoYXZlCi0JICogbWF4IGxvYWQgbGVzcyB0aGFuIGF2ZyBsb2FkKGFzIHdlIHNraXAgdGhlIGdyb3VwcyBhdCBvciBiZWxvdwotCSAqIGl0cyBjcHVfcG93ZXIsIHdoaWxlIGNhbGN1bGF0aW5nIG1heF9sb2FkLi4pCi0JICovCi0JaWYgKG1heF9sb2FkIDwgYXZnX2xvYWQpIHsKLQkJKmltYmFsYW5jZSA9IDA7Ci0JCWdvdG8gc21hbGxfaW1iYWxhbmNlOwotCX0KLQotCS8qIERvbid0IHdhbnQgdG8gcHVsbCBzbyBtYW55IHRhc2tzIHRoYXQgYSBncm91cCB3b3VsZCBnbyBpZGxlICovCi0JbWF4X3B1bGwgPSBtaW4obWF4X2xvYWQgLSBhdmdfbG9hZCwgbWF4X2xvYWQgLSBidXNpZXN0X2xvYWRfcGVyX3Rhc2spOwotCi0JLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KLQkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogYnVzaWVzdC0+X19jcHVfcG93ZXIsCi0JCQkJKGF2Z19sb2FkIC0gdGhpc19sb2FkKSAqIHRoaXMtPl9fY3B1X3Bvd2VyKQotCQkJLyBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JLyoKLQkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCi0JICogdGhlcmUgaXMgbm8gZ2F1cmFudGVlIHRoYXQgYW55IHRhc2tzIHdpbGwgYmUgbW92ZWQgc28gd2UnbGwgaGF2ZQotCSAqIGEgdGhpbmsgYWJvdXQgYnVtcGluZyBpdHMgdmFsdWUgdG8gZm9yY2UgYXQgbGVhc3Qgb25lIHRhc2sgdG8gYmUKLQkgKiBtb3ZlZAotCSAqLwotCWlmICgqaW1iYWxhbmNlIDwgYnVzaWVzdF9sb2FkX3Blcl90YXNrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wLCBwd3Jfbm93LCBwd3JfbW92ZTsKLQkJdW5zaWduZWQgaW50IGltYm47Ci0KLXNtYWxsX2ltYmFsYW5jZToKLQkJcHdyX21vdmUgPSBwd3Jfbm93ID0gMDsKLQkJaW1ibiA9IDI7Ci0JCWlmICh0aGlzX25yX3J1bm5pbmcpIHsKLQkJCXRoaXNfbG9hZF9wZXJfdGFzayAvPSB0aGlzX25yX3J1bm5pbmc7Ci0JCQlpZiAoYnVzaWVzdF9sb2FkX3Blcl90YXNrID4gdGhpc19sb2FkX3Blcl90YXNrKQotCQkJCWltYm4gPSAxOwotCQl9IGVsc2UKLQkJCXRoaXNfbG9hZF9wZXJfdGFzayA9IGNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7Ci0KLQkJaWYgKG1heF9sb2FkIC0gdGhpc19sb2FkICsgYnVzaWVzdF9sb2FkX3Blcl90YXNrID49Ci0JCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIGltYm4pIHsKLQkJCSppbWJhbGFuY2UgPSBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci0JCQlyZXR1cm4gYnVzaWVzdDsKLQkJfQotCi0JCS8qCi0JCSAqIE9LLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbWJhbGFuY2UgdG8ganVzdGlmeSBtb3ZpbmcgdGFza3MsCi0JCSAqIGhvd2V2ZXIgd2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdG90YWwgQ1BVIHBvd2VyIHVzZWQgYnkKLQkJICogbW92aW5nIHRoZW0uCi0JCSAqLwotCi0JCXB3cl9ub3cgKz0gYnVzaWVzdC0+X19jcHVfcG93ZXIgKgotCQkJCW1pbihidXNpZXN0X2xvYWRfcGVyX3Rhc2ssIG1heF9sb2FkKTsKLQkJcHdyX25vdyArPSB0aGlzLT5fX2NwdV9wb3dlciAqCi0JCQkJbWluKHRoaXNfbG9hZF9wZXJfdGFzaywgdGhpc19sb2FkKTsKLQkJcHdyX25vdyAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2Qgc3VidHJhY3QgKi8KLQkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcihidXNpZXN0LAotCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOwotCQlpZiAobWF4X2xvYWQgPiB0bXApCi0JCQlwd3JfbW92ZSArPSBidXNpZXN0LT5fX2NwdV9wb3dlciAqCi0JCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQgLSB0bXApOwotCi0JCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCi0JCWlmIChtYXhfbG9hZCAqIGJ1c2llc3QtPl9fY3B1X3Bvd2VyIDwKLQkJCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQotCQkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcih0aGlzLAotCQkJCQltYXhfbG9hZCAqIGJ1c2llc3QtPl9fY3B1X3Bvd2VyKTsKLQkJZWxzZQotCQkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcih0aGlzLAotCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOwotCQlwd3JfbW92ZSArPSB0aGlzLT5fX2NwdV9wb3dlciAqCi0JCQkJbWluKHRoaXNfbG9hZF9wZXJfdGFzaywgdGhpc19sb2FkICsgdG1wKTsKLQkJcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCQkvKiBNb3ZlIGlmIHdlIGdhaW4gdGhyb3VnaHB1dCAqLwotCQlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQotCQkJKmltYmFsYW5jZSA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQl9Ci0KLQlyZXR1cm4gYnVzaWVzdDsKKwkvKiBMb29rcyBsaWtlIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gQ29tcHV0ZSBpdCAqLworCWNhbGN1bGF0ZV9pbWJhbGFuY2UoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisJcmV0dXJuIHNkcy5idXNpZXN0OwogCiBvdXRfYmFsYW5jZWQ6Ci0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwgIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCWdvdG8gcmV0OwotCi0JaWYgKHRoaXMgPT0gZ3JvdXBfbGVhZGVyICYmIGdyb3VwX2xlYWRlciAhPSBncm91cF9taW4pIHsKLQkJKmltYmFsYW5jZSA9IG1pbl9sb2FkX3Blcl90YXNrOwotCQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyA+PSBQT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVApIHsKLQkJCWNwdV9ycSh0aGlzX2NwdSktPnJkLT5zY2hlZF9tY19wcmVmZXJyZWRfd2FrZXVwX2NwdSA9Ci0JCQkJY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwX2xlYWRlcikpOwotCQl9Ci0JCXJldHVybiBncm91cF9taW47Ci0JfQotI2VuZGlmCisJLyoKKwkgKiBUaGVyZSBpcyBubyBvYnZpb3VzIGltYmFsYW5jZS4gQnV0IGNoZWNrIGlmIHdlIGNhbiBkbyBzb21lIGJhbGFuY2luZworCSAqIHRvIHNhdmUgcG93ZXIuCisJICovCisJaWYgKGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKSkKKwkJcmV0dXJuIHNkcy5idXNpZXN0OwogcmV0OgogCSppbWJhbGFuY2UgPSAwOwogCXJldHVybiBOVUxMOwpAQCAtNDA1Nyw2ICs0NDI2LDExIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb25fbnVsbF9kb21haW4oaW50IGNwdSkKK3sKKwlyZXR1cm4gIXJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOworfQorCiAvKgogICogVHJpZ2dlciB0aGUgU0NIRURfU09GVElSUSBpZiBpdCBpcyB0aW1lIHRvIGRvIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLgogICoKQEAgLTQxMTQsNyArNDQ4OCw5IEBACiAJICAgIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKIAkJcmV0dXJuOwogI2VuZGlmCi0JaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnEtPm5leHRfYmFsYW5jZSkpCisJLyogRG9uJ3QgbmVlZCB0byByZWJhbGFuY2Ugd2hpbGUgYXR0YWNoZWQgdG8gTlVMTCBkb21haW4gKi8KKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSAmJgorCSAgICBsaWtlbHkoIW9uX251bGxfZG9tYWluKGNwdSkpKQogCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOwogfQogCkBAIC00NTA4LDExICs0ODg0LDMzIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIHZvaWQgcHV0X3ByZXZfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCit7CisJaWYgKHByZXYtPnN0YXRlID09IFRBU0tfUlVOTklORykgeworCQl1NjQgcnVudGltZSA9IHByZXYtPnNlLnN1bV9leGVjX3J1bnRpbWU7CisKKwkJcnVudGltZSAtPSBwcmV2LT5zZS5wcmV2X3N1bV9leGVjX3J1bnRpbWU7CisJCXJ1bnRpbWUgPSBtaW5fdCh1NjQsIHJ1bnRpbWUsIDIqc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KTsKKworCQkvKgorCQkgKiBJbiBvcmRlciB0byBhdm9pZCBhdmdfb3ZlcmxhcCBncm93aW5nIHN0YWxlIHdoZW4gd2UgYXJlCisJCSAqIGluZGVlZCBvdmVybGFwcGluZyBhbmQgaGVuY2Ugbm90IGdldHRpbmcgcHV0IHRvIHNsZWVwLCBncm93CisJCSAqIHRoZSBhdmdfb3ZlcmxhcCBvbiBwcmVlbXB0aW9uLgorCQkgKgorCQkgKiBXZSB1c2UgdGhlIGF2ZXJhZ2UgcHJlZW1wdGlvbiBydW50aW1lIGJlY2F1c2UgdGhhdAorCQkgKiBjb3JyZWxhdGVzIHRvIHRoZSBhbW91bnQgb2YgY2FjaGUgZm9vdHByaW50IGEgdGFzayBjYW4KKwkJICogYnVpbGQgdXAuCisJCSAqLworCQl1cGRhdGVfYXZnKCZwcmV2LT5zZS5hdmdfb3ZlcmxhcCwgcnVudGltZSk7CisJfQorCXByZXYtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwcmV2KTsKK30KKwogLyoKICAqIFBpY2sgdXAgdGhlIGhpZ2hlc3QtcHJpbyB0YXNrOgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqCi1waWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCitwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxKQogewogCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3M7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtNDU4Niw4ICs0OTg0LDggQEAKIAlpZiAodW5saWtlbHkoIXJxLT5ucl9ydW5uaW5nKSkKIAkJaWRsZV9iYWxhbmNlKGNwdSwgcnEpOwogCi0JcHJldi0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHByZXYpOwotCW5leHQgPSBwaWNrX25leHRfdGFzayhycSwgcHJldik7CisJcHV0X3ByZXZfdGFzayhycSwgcHJldik7CisJbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxKTsKIAogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewogCQlzY2hlZF9pbmZvX3N3aXRjaChwcmV2LCBuZXh0KTsKQEAgLTQ2NDIsNyArNTA0MCw3IEBACiAJCSAqIGJldHdlZW4gc2NoZWR1bGUgYW5kIG5vdy4KIAkJICovCiAJCWJhcnJpZXIoKTsKLQl9IHdoaWxlICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpKSk7CisJfSB3aGlsZSAobmVlZF9yZXNjaGVkKCkpOwogfQogRVhQT1JUX1NZTUJPTChwcmVlbXB0X3NjaGVkdWxlKTsKIApAQCAtNDY3MSw3ICs1MDY5LDcgQEAKIAkJICogYmV0d2VlbiBzY2hlZHVsZSBhbmQgbm93LgogCQkgKi8KIAkJYmFycmllcigpOwotCX0gd2hpbGUgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKTsKKwl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLwpAQCAtNTE0NSw3ICs1NTQzLDcgQEAKIAlpZiAoaW5jcmVtZW50ID4gNDApCiAJCWluY3JlbWVudCA9IDQwOwogCi0JbmljZSA9IFBSSU9fVE9fTklDRShjdXJyZW50LT5zdGF0aWNfcHJpbykgKyBpbmNyZW1lbnQ7CisJbmljZSA9IFRBU0tfTklDRShjdXJyZW50KSArIGluY3JlbWVudDsKIAlpZiAobmljZSA8IC0yMCkKIAkJbmljZSA9IC0yMDsKIAlpZiAobmljZSA+IDE5KQpAQCAtNTk0NCwxMiArNjM0Miw3IEBACiAJCXByaW50ayhLRVJOX0NPTlQgIiAlMDE2bHggIiwgdGhyZWFkX3NhdmVkX3BjKHApKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQotCXsKLQkJdW5zaWduZWQgbG9uZyAqbiA9IGVuZF9vZl9zdGFjayhwKTsKLQkJd2hpbGUgKCEqbikKLQkJCW4rKzsKLQkJZnJlZSA9ICh1bnNpZ25lZCBsb25nKW4gLSAodW5zaWduZWQgbG9uZyllbmRfb2Zfc3RhY2socCk7Ci0JfQorCWZyZWUgPSBzdGFja19ub3RfdXNlZChwKTsKICNlbmRpZgogCXByaW50ayhLRVJOX0NPTlQgIiU1bHUgJTVkICU2ZFxuIiwgZnJlZSwKIAkJdGFza19waWRfbnIocCksIHRhc2tfcGlkX25yKHAtPnJlYWxfcGFyZW50KSk7CkBAIC02NDIzLDcgKzY4MTYsNyBAQAogCQlpZiAoIXJxLT5ucl9ydW5uaW5nKQogCQkJYnJlYWs7CiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0JCW5leHQgPSBwaWNrX25leHRfdGFzayhycSwgcnEtPmN1cnIpOworCQluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwogCQlpZiAoIW5leHQpCiAJCQlicmVhazsKIAkJbmV4dC0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIG5leHQpOwpAQCAtODIxOCwxMSArODYxMSwxNSBAQAogCV9fc2V0X2JpdChNQVhfUlRfUFJJTywgYXJyYXktPmJpdG1hcCk7CiAKICNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlydF9ycS0+aGlnaGVzdF9wcmlvID0gTUFYX1JUX1BSSU87CisJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gTUFYX1JUX1BSSU87CisjaWZkZWYgQ09ORklHX1NNUAorCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IE1BWF9SVF9QUklPOworI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSA9IDA7CiAJcnRfcnEtPm92ZXJsb2FkZWQgPSAwOworCXBsaXN0X2hlYWRfaW5pdCgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzLCAmcnEtPmxvY2spOwogI2VuZGlmCiAKIAlydF9ycS0+cnRfdGltZSA9IDA7CkBAIC05NDkwLDcgKzk4ODcsNyBAQAogCiBzdGF0aWMgdTY0IGNwdWFjY3RfY3B1dXNhZ2VfcmVhZChzdHJ1Y3QgY3B1YWNjdCAqY2EsIGludCBjcHUpCiB7Ci0JdTY0ICpjcHV1c2FnZSA9IHBlcmNwdV9wdHIoY2EtPmNwdXVzYWdlLCBjcHUpOworCXU2NCAqY3B1dXNhZ2UgPSBwZXJfY3B1X3B0cihjYS0+Y3B1dXNhZ2UsIGNwdSk7CiAJdTY0IGRhdGE7CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCkBAIC05NTA5LDcgKzk5MDYsNyBAQAogCiBzdGF0aWMgdm9pZCBjcHVhY2N0X2NwdXVzYWdlX3dyaXRlKHN0cnVjdCBjcHVhY2N0ICpjYSwgaW50IGNwdSwgdTY0IHZhbCkKIHsKLQl1NjQgKmNwdXVzYWdlID0gcGVyY3B1X3B0cihjYS0+Y3B1dXNhZ2UsIGNwdSk7CisJdTY0ICpjcHV1c2FnZSA9IHBlcl9jcHVfcHRyKGNhLT5jcHV1c2FnZSwgY3B1KTsKIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKIAkvKgpAQCAtOTU5OCwxNCArOTk5NSwxNCBAQAogCXN0cnVjdCBjcHVhY2N0ICpjYTsKIAlpbnQgY3B1OwogCi0JaWYgKCFjcHVhY2N0X3N1YnN5cy5hY3RpdmUpCisJaWYgKHVubGlrZWx5KCFjcHVhY2N0X3N1YnN5cy5hY3RpdmUpKQogCQlyZXR1cm47CiAKIAljcHUgPSB0YXNrX2NwdSh0c2spOwogCWNhID0gdGFza19jYSh0c2spOwogCiAJZm9yICg7IGNhOyBjYSA9IGNhLT5wYXJlbnQpIHsKLQkJdTY0ICpjcHV1c2FnZSA9IHBlcmNwdV9wdHIoY2EtPmNwdXVzYWdlLCBjcHUpOworCQl1NjQgKmNwdXVzYWdlID0gcGVyX2NwdV9wdHIoY2EtPmNwdXVzYWdlLCBjcHUpOwogCQkqY3B1dXNhZ2UgKz0gY3B1dGltZTsKIAl9CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGEwYjA4NTIuLjM5MGYzMzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqIFRoZSBjbG9jazogc2NoZWRfY2xvY2tfY3B1KCkgaXMgbW9ub3RvbmljIHBlciBjcHUsIGFuZCBzaG91bGQgYmUgc29tZXdoYXQKICAqIGNvbnNpc3RlbnQgYmV0d2VlbiBjcHVzIChuZXZlciBtb3JlIHRoYW4gMiBqaWZmaWVzIGRpZmZlcmVuY2UpLgogICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KQEAgLTQzLDYgKzQzLDcgQEAKIHN0YXRpYyBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKK19fcmVhZF9tb3N0bHkgaW50IHNjaGVkX2Nsb2NrX3N0YWJsZTsKIAogc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgewogCS8qCkBAIC04Nyw3ICs4OCw3IEBACiB9CiAKIC8qCi0gKiBtaW4sbWF4IGV4Y2VwdCB0aGV5IHRha2Ugd3JhcHBpbmcgaW50byBhY2NvdW50CisgKiBtaW4sIG1heCBleGNlcHQgdGhleSB0YWtlIHdyYXBwaW5nIGludG8gYWNjb3VudAogICovCiAKIHN0YXRpYyBpbmxpbmUgdTY0IHdyYXBfbWluKHU2NCB4LCB1NjQgeSkKQEAgLTExMSwxNSArMTEyLDEzIEBACiAJczY0IGRlbHRhID0gbm93IC0gc2NkLT50aWNrX3JhdzsKIAl1NjQgY2xvY2ssIG1pbl9jbG9jaywgbWF4X2Nsb2NrOwogCi0JV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwotCiAJaWYgKHVubGlrZWx5KGRlbHRhIDwgMCkpCiAJCWRlbHRhID0gMDsKIAogCS8qCiAJICogc2NkLT5jbG9jayA9IGNsYW1wKHNjZC0+dGlja19ndG9kICsgZGVsdGEsCi0JICogCQkgICAgICBtYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spLAotCSAqIAkJICAgICAgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOworCSAqCQkgICAgICBtYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spLAorCSAqCQkgICAgICBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CiAJICovCiAKIAljbG9jayA9IHNjZC0+dGlja19ndG9kICsgZGVsdGE7CkBAIC0xNDgsMTIgKzE0NywxMyBAQAogCiB1NjQgc2NoZWRfY2xvY2tfY3B1KGludCBjcHUpCiB7Ci0Jc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZCA9IGNwdV9zZGMoY3B1KTsKIAl1NjQgbm93LCBjbG9jaywgdGhpc19jbG9jaywgcmVtb3RlX2Nsb2NrOworCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2Q7CiAKLQlpZiAodW5saWtlbHkoIXNjaGVkX2Nsb2NrX3J1bm5pbmcpKQotCQlyZXR1cm4gMHVsbDsKKwlpZiAoc2NoZWRfY2xvY2tfc3RhYmxlKQorCQlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIAorCXNjZCA9IGNwdV9zZGMoY3B1KTsKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIApAQCAtMTk1LDE0ICsxOTUsMTggQEAKIAogdm9pZCBzY2hlZF9jbG9ja190aWNrKHZvaWQpCiB7Ci0Jc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZCA9IHRoaXNfc2NkKCk7CisJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZDsKIAl1NjQgbm93LCBub3dfZ3RvZDsKIAorCWlmIChzY2hlZF9jbG9ja19zdGFibGUpCisJCXJldHVybjsKKwogCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCiAJCXJldHVybjsKIAogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAorCXNjZCA9IHRoaXNfc2NkKCk7CiAJbm93X2d0b2QgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIApAQCAtMjUwLDcgKzI1NCw3IEBACiAJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHVfY2xvY2soaW50IGNwdSkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggMTZlZWJhNGUuLjQ2N2NhNzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0yNzIsNyArMjcyLDYgQEAKIAlQKG5yX3N3aXRjaGVzKTsKIAlQKG5yX2xvYWRfdXBkYXRlcyk7CiAJUChucl91bmludGVycnVwdGlibGUpOwotCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbHVcbiIsICJqaWZmaWVzIiwgamlmZmllcyk7CiAJUE4obmV4dF9iYWxhbmNlKTsKIAlQKGN1cnItPnBpZCk7CiAJUE4oY2xvY2spOwpAQCAtMjg3LDkgKzI4Niw2IEBACiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKICNkZWZpbmUgUChuKSBTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWRcbiIsICNuLCBycS0+bik7CiAKLQlQKHlsZF9leHBfZW1wdHkpOwotCVAoeWxkX2FjdF9lbXB0eSk7Ci0JUCh5bGRfYm90aF9lbXB0eSk7CiAJUCh5bGRfY291bnQpOwogCiAJUChzY2hlZF9zd2l0Y2gpOwpAQCAtMzE0LDcgKzMxMCw3IEBACiAJdTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlpbnQgY3B1OwogCi0JU0VRX3ByaW50ZihtLCAiU2NoZWQgRGVidWcgVmVyc2lvbjogdjAuMDgsICVzICUuKnNcbiIsCisJU0VRX3ByaW50ZihtLCAiU2NoZWQgRGVidWcgVmVyc2lvbjogdjAuMDksICVzICUuKnNcbiIsCiAJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCiAJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKQEAgLTMyNSw2ICszMjEsNyBAQAogCVNFUV9wcmludGYobSwgIiAgLiUtNDBzOiAlTGRcbiIsICN4LCAobG9uZyBsb25nKSh4KSkKICNkZWZpbmUgUE4oeCkgXAogCVNFUV9wcmludGYobSwgIiAgLiUtNDBzOiAlTGQuJTA2bGRcbiIsICN4LCBTUExJVF9OUyh4KSkKKwlQKGppZmZpZXMpOwogCVBOKHN5c2N0bF9zY2hlZF9sYXRlbmN5KTsKIAlQTihzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5KTsKIAlQTihzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5KTsKQEAgLTM5Nyw2ICszOTQsNyBAQAogCVBOKHNlLnZydW50aW1lKTsKIAlQTihzZS5zdW1fZXhlY19ydW50aW1lKTsKIAlQTihzZS5hdmdfb3ZlcmxhcCk7CisJUE4oc2UuYXZnX3dha2V1cCk7CiAKIAlucl9zd2l0Y2hlcyA9IHAtPm52Y3N3ICsgcC0+bml2Y3N3OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCAwNTY2ZjJhLi4zODE2ZjIxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTEzMTQsMTYgKzEzMTQsNjMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdha2V1cF9ncmFuKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQorLyoKKyAqIEFkYXB0aXZlIGdyYW51bGFyaXR5CisgKgorICogc2UtPmF2Z193YWtldXAgZ2l2ZXMgdGhlIGF2ZXJhZ2UgdGltZSBhIHRhc2sgcnVucyB1bnRpbCBpdCBkb2VzIGEgd2FrZXVwLAorICogd2l0aCB0aGUgbGltaXQgb2Ygd2FrZXVwX2dyYW4gLS0gd2hlbiBpdCBuZXZlciBkb2VzIGEgd2FrZXVwLgorICoKKyAqIFNvIHRoZSBzbWFsbGVyIGF2Z193YWtldXAgaXMgdGhlIGZhc3RlciB3ZSB3YW50IHRoaXMgdGFzayB0byBwcmVlbXB0LAorICogYnV0IHdlIGRvbid0IHdhbnQgdG8gdHJlYXQgdGhlIHByZWVtcHRlZSB1bmZhaXJseSBhbmQgdGhlcmVmb3JlIGFsbG93IGl0CisgKiB0byBydW4gZm9yIGF0IGxlYXN0IHRoZSBhbW91bnQgb2YgdGltZSB3ZSdkIGxpa2UgdG8gcnVuLgorICoKKyAqIE5PVEU6IHdlIHVzZSAyKmF2Z193YWtldXAgdG8gaW5jcmVhc2UgdGhlIHByb2JhYmlsaXR5IG9mIGFjdHVhbGx5IGRvaW5nIG9uZQorICoKKyAqIE5PVEU6IHdlIHVzZSAqbnJfcnVubmluZyB0byBzY2FsZSB3aXRoIGxvYWQsIHRoaXMgbmljZWx5IG1hdGNoZXMgdGhlCisgKiAgICAgICBkZWdyYWRpbmcgbGF0ZW5jeSBvbiBsb2FkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworYWRhcHRpdmVfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwl1NjQgdGhpc19ydW4gPSBjdXJyLT5zdW1fZXhlY19ydW50aW1lIC0gY3Vyci0+cHJldl9zdW1fZXhlY19ydW50aW1lOworCXU2NCBleHBlY3RlZF93YWtldXAgPSAyKnNlLT5hdmdfd2FrZXVwICogY2ZzX3JxX29mKHNlKS0+bnJfcnVubmluZzsKKwl1NjQgZ3JhbiA9IDA7CisKKwlpZiAodGhpc19ydW4gPCBleHBlY3RlZF93YWtldXApCisJCWdyYW4gPSBleHBlY3RlZF93YWtldXAgLSB0aGlzX3J1bjsKKworCXJldHVybiBtaW5fdChzNjQsIGdyYW4sIHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZword2FrZXVwX2dyYW4oc3RydWN0IHNjaGVkX2VudGl0eSAqY3Vyciwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiB7CiAJdW5zaWduZWQgbG9uZyBncmFuID0gc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eTsKIAorCWlmIChjZnNfcnFfb2YoY3VyciktPmN1cnIgJiYgc2NoZWRfZmVhdChBREFQVElWRV9HUkFOKSkKKwkJZ3JhbiA9IGFkYXB0aXZlX2dyYW4oY3Vyciwgc2UpOworCiAJLyoKLQkgKiBNb3JlIGVhc2lseSBwcmVlbXB0IC0gbmljZSB0YXNrcywgd2hpbGUgbm90IG1ha2luZyBpdCBoYXJkZXIgZm9yCi0JICogKyBuaWNlIHRhc2tzLgorCSAqIFNpbmNlIGl0cyBjdXJyIHJ1bm5pbmcgbm93LCBjb252ZXJ0IHRoZSBncmFuIGZyb20gcmVhbC10aW1lCisJICogdG8gdmlydHVhbC10aW1lIGluIGhpcyB1bml0cy4KIAkgKi8KLQlpZiAoIXNjaGVkX2ZlYXQoQVNZTV9HUkFOKSB8fCBzZS0+bG9hZC53ZWlnaHQgPiBOSUNFXzBfTE9BRCkKLQkJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5LCBzZSk7CisJaWYgKHNjaGVkX2ZlYXQoQVNZTV9HUkFOKSkgeworCQkvKgorCQkgKiBCeSB1c2luZyAnc2UnIGluc3RlYWQgb2YgJ2N1cnInIHdlIHBlbmFsaXplIGxpZ2h0IHRhc2tzLCBzbworCQkgKiB0aGV5IGdldCBwcmVlbXB0ZWQgZWFzaWVyLiBUaGF0IGlzLCBpZiAnc2UnIDwgJ2N1cnInIHRoZW4KKwkJICogdGhlIHJlc3VsdGluZyBncmFuIHdpbGwgYmUgbGFyZ2VyLCB0aGVyZWZvcmUgcGVuYWxpemluZyB0aGUKKwkJICogbGlnaHRlciwgaWYgb3RvaCAnc2UnID4gJ2N1cnInIHRoZW4gdGhlIHJlc3VsdGluZyBncmFuIHdpbGwKKwkJICogYmUgc21hbGxlciwgYWdhaW4gcGVuYWxpemluZyB0aGUgbGlnaHRlciB0YXNrLgorCQkgKgorCQkgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBidWRkaWVzIHdoZW4gdGhlIGxlZnRtb3N0CisJCSAqIHRhc2sgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGJ1ZGR5LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHNlLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCisJCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKGdyYW4sIHNlKTsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoY3Vyci0+bG9hZC53ZWlnaHQgIT0gTklDRV8wX0xPQUQpKQorCQkJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihncmFuLCBjdXJyKTsKKwl9CiAKIAlyZXR1cm4gZ3JhbjsKIH0KQEAgLTEzNTAsNyArMTM5Nyw3IEBACiAJaWYgKHZkaWZmIDw9IDApCiAJCXJldHVybiAtMTsKIAotCWdyYW4gPSB3YWtldXBfZ3JhbihjdXJyKTsKKwlncmFuID0gd2FrZXVwX2dyYW4oY3Vyciwgc2UpOwogCWlmICh2ZGlmZiA+IGdyYW4pCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaCBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCmluZGV4IGRhNWQ5M2IuLjc2ZjYxNzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCisrKyBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCkBAIC0xLDUgKzEsNiBAQAogU0NIRURfRkVBVChORVdfRkFJUl9TTEVFUEVSUywgMSkKLVNDSEVEX0ZFQVQoTk9STUFMSVpFRF9TTEVFUEVSLCAxKQorU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDApCitTQ0hFRF9GRUFUKEFEQVBUSVZFX0dSQU4sIDEpCiBTQ0hFRF9GRUFUKFdBS0VVUF9QUkVFTVBULCAxKQogU0NIRURfRkVBVChTVEFSVF9ERUJJVCwgMSkKIFNDSEVEX0ZFQVQoQUZGSU5FX1dBS0VVUFMsIDEpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGJhYzEwNjEuLjI5OWQwMTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0zLDYgKzMsNDAgQEAKICAqIHBvbGljaWVzKQogICovCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpydF90YXNrX29mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpOworfQorCisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCXJldHVybiBydF9ycS0+cnE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlyZXR1cm4gcnRfc2UtPnJ0X3JxOworfQorCisjZWxzZSAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9ycSwgc3RydWN0IHJxLCBydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBydF90YXNrX29mKHJ0X3NlKTsKKwlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKworCXJldHVybiAmcnEtPnJ0OworfQorCisjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKICNpZmRlZiBDT05GSUdfU01QCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0X292ZXJsb2FkZWQoc3RydWN0IHJxICpycSkKQEAgLTM3LDI1ICs3MSw2OSBAQAogCWNwdW1hc2tfY2xlYXJfY3B1KHJxLT5jcHUsIHJxLT5yZC0+cnRvX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcnRfbWlncmF0aW9uKHN0cnVjdCBycSAqcnEpCitzdGF0aWMgdm9pZCB1cGRhdGVfcnRfbWlncmF0aW9uKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0JaWYgKHJxLT5ydC5ydF9ucl9taWdyYXRvcnkgJiYgKHJxLT5ydC5ydF9ucl9ydW5uaW5nID4gMSkpIHsKLQkJaWYgKCFycS0+cnQub3ZlcmxvYWRlZCkgewotCQkJcnRfc2V0X292ZXJsb2FkKHJxKTsKLQkJCXJxLT5ydC5vdmVybG9hZGVkID0gMTsKKwlpZiAocnRfcnEtPnJ0X25yX21pZ3JhdG9yeSAmJiAocnRfcnEtPnJ0X25yX3J1bm5pbmcgPiAxKSkgeworCQlpZiAoIXJ0X3JxLT5vdmVybG9hZGVkKSB7CisJCQlydF9zZXRfb3ZlcmxvYWQocnFfb2ZfcnRfcnEocnRfcnEpKTsKKwkJCXJ0X3JxLT5vdmVybG9hZGVkID0gMTsKIAkJfQotCX0gZWxzZSBpZiAocnEtPnJ0Lm92ZXJsb2FkZWQpIHsKLQkJcnRfY2xlYXJfb3ZlcmxvYWQocnEpOwotCQlycS0+cnQub3ZlcmxvYWRlZCA9IDA7CisJfSBlbHNlIGlmIChydF9ycS0+b3ZlcmxvYWRlZCkgeworCQlydF9jbGVhcl9vdmVybG9hZChycV9vZl9ydF9ycShydF9ycSkpOworCQlydF9ycS0+b3ZlcmxvYWRlZCA9IDA7CiAJfQogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCitzdGF0aWMgdm9pZCBpbmNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotCXJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpOworCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkKKwkJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSsrOworCisJdXBkYXRlX3J0X21pZ3JhdGlvbihydF9ycSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRlY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQlydF9ycS0+cnRfbnJfbWlncmF0b3J5LS07CisKKwl1cGRhdGVfcnRfbWlncmF0aW9uKHJ0X3JxKTsKK30KKworc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlwbGlzdF9kZWwoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKKwlwbGlzdF9ub2RlX2luaXQoJnAtPnB1c2hhYmxlX3Rhc2tzLCBwLT5wcmlvKTsKKwlwbGlzdF9hZGQoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworc3RhdGljIHZvaWQgZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlwbGlzdF9kZWwoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGVucXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwogc3RhdGljIGlubGluZSBpbnQgb25fcnRfcnEoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7CiAJcmV0dXJuICFsaXN0X2VtcHR5KCZydF9zZS0+cnVuX2xpc3QpOwpAQCAtNzksMTYgKzE1Nyw2IEBACiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnRfcnEsICZycS0+bGVhZl9ydF9ycV9saXN0LCBsZWFmX3J0X3JxX2xpc3QpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQotewotCXJldHVybiBydF9ycS0+cnE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKLXsKLQlyZXR1cm4gcnRfc2UtPnJ0X3JxOwotfQotCiAjZGVmaW5lIGZvcl9lYWNoX3NjaGVkX3J0X2VudGl0eShydF9zZSkgXAogCWZvciAoOyBydF9zZTsgcnRfc2UgPSBydF9zZS0+cGFyZW50KQogCkBAIC0xMDgsNyArMTc2LDcgQEAKIAlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKIAkJaWYgKHJ0X3NlICYmICFvbl9ydF9ycShydF9zZSkpCiAJCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7Ci0JCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvIDwgY3Vyci0+cHJpbykKKwkJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA8IGN1cnItPnByaW8pCiAJCQlyZXNjaGVkX3Rhc2soY3Vycik7CiAJfQogfQpAQCAtMTc2LDE5ICsyNDQsNiBAQAogI2RlZmluZSBmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgXAogCWZvciAocnRfcnEgPSAmcnEtPnJ0OyBydF9ycTsgcnRfcnEgPSBOVUxMKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3JxLCBzdHJ1Y3QgcnEsIHJ0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJ0X3Rhc2tfb2YocnRfc2UpOwotCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwotCi0JcmV0dXJuICZycS0+cnQ7Ci19Ci0KICNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSBcCiAJZm9yICg7IHJ0X3NlOyBydF9zZSA9IE5VTEwpCiAKQEAgLTQ3Myw3ICs1MjgsNyBAQAogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBncm91cF9ydF9ycShydF9zZSk7CiAKIAlpZiAocnRfcnEpCi0JCXJldHVybiBydF9ycS0+aGlnaGVzdF9wcmlvOworCQlyZXR1cm4gcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyOwogI2VuZGlmCiAKIAlyZXR1cm4gcnRfdGFza19vZihydF9zZSktPnByaW87CkBAIC01NDcsOTEgKzYwMiwxNzQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQorI2lmIGRlZmluZWQgQ09ORklHX1NNUAorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHN0cnVjdCBycSAqcnEsIGludCBjcHUpOworCitzdGF0aWMgaW5saW5lIGludCBuZXh0X3ByaW8oc3RydWN0IHJxICpycSkKIHsKLQlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7Ci0JcnRfcnEtPnJ0X25yX3J1bm5pbmcrKzsKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpZiAocnRfc2VfcHJpbyhydF9zZSkgPCBydF9ycS0+aGlnaGVzdF9wcmlvKSB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwotI2VuZGlmCisJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0ID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgcnEtPmNwdSk7CiAKLQkJcnRfcnEtPmhpZ2hlc3RfcHJpbyA9IHJ0X3NlX3ByaW8ocnRfc2UpOwotI2lmZGVmIENPTkZJR19TTVAKKwlpZiAobmV4dCAmJiBydF9wcmlvKG5leHQtPnByaW8pKQorCQlyZXR1cm4gbmV4dC0+cHJpbzsKKwllbHNlCisJCXJldHVybiBNQVhfUlRfUFJJTzsKK30KKworc3RhdGljIHZvaWQKK2luY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCisJaWYgKHByaW8gPCBwcmV2X3ByaW8pIHsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHRhc2sgaXMgaGlnaGVyIGluIHByaW9yaXR5IHRoYW4gYW55dGhpbmcgb24gdGhlCisJCSAqIHJ1bi1xdWV1ZSwgd2Uga25vdyB0aGF0IHRoZSBwcmV2aW91cyBoaWdoIGJlY29tZXMgb3VyCisJCSAqIG5leHQtaGlnaGVzdC4KKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IHByZXZfcHJpbzsKKwogCQlpZiAocnEtPm9ubGluZSkKLQkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LAotCQkJCSAgIHJ0X3NlX3ByaW8ocnRfc2UpKTsKLSNlbmRpZgotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKwkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBwcmlvKTsKIAotCQlycS0+cnQucnRfbnJfbWlncmF0b3J5Kys7Ci0JfQorCX0gZWxzZSBpZiAocHJpbyA9PSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIpCisJCS8qCisJCSAqIElmIHRoZSBuZXh0IHRhc2sgaXMgZXF1YWwgaW4gcHJpb3JpdHkgdG8gdGhlIGhpZ2hlc3Qgb24KKwkJICogdGhlIHJ1bi1xdWV1ZSwgdGhlbiB3ZSBpbXBsaWNpdGx5IGtub3cgdGhhdCB0aGUgbmV4dCBoaWdoZXN0CisJCSAqIHRhc2sgY2Fubm90IGJlIGFueSBsb3dlciB0aGFuIGN1cnJlbnQKKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IHByaW87CisJZWxzZSBpZiAocHJpbyA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCkKKwkJLyoKKwkJICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIHJlY29tcHV0ZSBuZXh0LWhpZ2hlc3QKKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IG5leHRfcHJpbyhycSk7Cit9CiAKLQl1cGRhdGVfcnRfbWlncmF0aW9uKHJxX29mX3J0X3JxKHJ0X3JxKSk7Ci0jZW5kaWYKK3N0YXRpYyB2b2lkCitkZWNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pCit7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKworCWlmIChydF9ycS0+cnRfbnJfcnVubmluZyAmJiAocHJpbyA8PSBydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQpKQorCQlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBuZXh0X3ByaW8ocnEpOworCisJaWYgKHJxLT5vbmxpbmUgJiYgcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyICE9IHByZXZfcHJpbykKKwkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3Vycik7Cit9CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZQordm9pZCBpbmNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pIHt9CitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykge30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQKK2luY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQoreworCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CisKKwlpZiAocHJpbyA8IHByZXZfcHJpbykKKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gcHJpbzsKKworCWluY19ydF9wcmlvX3NtcChydF9ycSwgcHJpbywgcHJldl9wcmlvKTsKK30KKworc3RhdGljIHZvaWQKK2RlY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQoreworCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CisKKwlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKKworCQlXQVJOX09OKHByaW8gPCBwcmV2X3ByaW8pOworCisJCS8qCisJCSAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlCisJCSAqIHdlIG1heSBoYXZlIHNvbWUgcmVjb21wdXRhdGlvbiB0byBkbworCQkgKi8KKwkJaWYgKHByaW8gPT0gcHJldl9wcmlvKSB7CisJCQlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKKworCQkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0KKwkJCQlzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKKwkJfQorCisJfSBlbHNlCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA9IE1BWF9SVF9QUklPOworCisJZGVjX3J0X3ByaW9fc21wKHJ0X3JxLCBwcmlvLCBwcmV2X3ByaW8pOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QIHx8IENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisKK3N0YXRpYyB2b2lkCitpbmNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CiAJaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQogCQlydF9ycS0+cnRfbnJfYm9vc3RlZCsrOwogCiAJaWYgKHJ0X3JxLT50ZykKIAkJc3RhcnRfcnRfYmFuZHdpZHRoKCZydF9ycS0+dGctPnJ0X2JhbmR3aWR0aCk7Ci0jZWxzZQorfQorCitzdGF0aWMgdm9pZAorZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSkKKwkJcnRfcnEtPnJ0X25yX2Jvb3N0ZWQtLTsKKworCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIHJ0X3JxLT5ydF9ucl9ib29zdGVkKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKK3N0YXRpYyB2b2lkCitpbmNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CiAJc3RhcnRfcnRfYmFuZHdpZHRoKCZkZWZfcnRfYmFuZHdpZHRoKTsKLSNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkge30KKworI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlpbnQgcHJpbyA9IHJ0X3NlX3ByaW8ocnRfc2UpOworCisJV0FSTl9PTighcnRfcHJpbyhwcmlvKSk7CisJcnRfcnEtPnJ0X25yX3J1bm5pbmcrKzsKKworCWluY19ydF9wcmlvKHJ0X3JxLCBwcmlvKTsKKwlpbmNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CisJaW5jX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotI2lmZGVmIENPTkZJR19TTVAKLQlpbnQgaGlnaGVzdF9wcmlvID0gcnRfcnEtPmhpZ2hlc3RfcHJpbzsKLSNlbmRpZgotCiAJV0FSTl9PTighcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpOwogCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKTsKIAlydF9ycS0+cnRfbnJfcnVubmluZy0tOwotI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgewotCQlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXk7CiAKLQkJV0FSTl9PTihydF9zZV9wcmlvKHJ0X3NlKSA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8pOwotCQlpZiAocnRfc2VfcHJpbyhydF9zZSkgPT0gcnRfcnEtPmhpZ2hlc3RfcHJpbykgewotCQkJLyogcmVjYWxjdWxhdGUgKi8KLQkJCWFycmF5ID0gJnJ0X3JxLT5hY3RpdmU7Ci0JCQlydF9ycS0+aGlnaGVzdF9wcmlvID0KLQkJCQlzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKLQkJfSAvKiBvdGhlcndpc2UgbGVhdmUgcnEtPmhpZ2hlc3QgcHJpbyBhbG9uZSAqLwotCX0gZWxzZQotCQlydF9ycS0+aGlnaGVzdF9wcmlvID0gTUFYX1JUX1BSSU87Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSB7Ci0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7Ci0JCXJxLT5ydC5ydF9ucl9taWdyYXRvcnktLTsKLQl9Ci0KLQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpbyAhPSBoaWdoZXN0X3ByaW8pIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKLQotCQlpZiAocnEtPm9ubGluZSkKLQkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LAotCQkJCSAgIHJ0X3JxLT5oaWdoZXN0X3ByaW8pOwotCX0KLQotCXVwZGF0ZV9ydF9taWdyYXRpb24ocnFfb2ZfcnRfcnEocnRfcnEpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQotCQlydF9ycS0+cnRfbnJfYm9vc3RlZC0tOwotCi0JV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgcnRfcnEtPnJ0X25yX2Jvb3N0ZWQpOwotI2VuZGlmCisJZGVjX3J0X3ByaW8ocnRfcnEsIHJ0X3NlX3ByaW8ocnRfc2UpKTsKKwlkZWNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CisJZGVjX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCkBAIC03MTgsNiArODU2LDkgQEAKIAogCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAorCWlmICghdGFza19jdXJyZW50KHJxLCBwKSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJaW5jX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKQEAgLTcyOCw2ICs4NjksOCBAQAogCXVwZGF0ZV9jdXJyX3J0KHJxKTsKIAlkZXF1ZXVlX3J0X2VudGl0eShydF9zZSk7CiAKKwlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJZGVjX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKQEAgLTg3OCw3ICsxMDIxLDcgQEAKIAlyZXR1cm4gbmV4dDsKIH0KIAotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfcnQoc3RydWN0IHJxICpycSkKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9waWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQogewogCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTkwMCw2ICsxMDQzLDE4IEBACiAKIAlwID0gcnRfdGFza19vZihydF9zZSk7CiAJcC0+c2UuZXhlY19zdGFydCA9IHJxLT5jbG9jazsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IF9waWNrX25leHRfdGFza19ydChycSk7CisKKwkvKiBUaGUgcnVubmluZyB0YXNrIGlzIG5ldmVyIGVsaWdpYmxlIGZvciBwdXNoaW5nICovCisJaWYgKHApCisJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlyZXR1cm4gcDsKIH0KIApAQCAtOTA3LDYgKzEwNjIsMTMgQEAKIHsKIAl1cGRhdGVfY3Vycl9ydChycSk7CiAJcC0+c2UuZXhlY19zdGFydCA9IDA7CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyB0YXNrIG5lZWRzIHRvIGJlIG1hZGUgZWxpZ2libGUgZm9yIHB1c2hpbmcKKwkgKiBpZiBpdCBpcyBzdGlsbCBhY3RpdmUKKwkgKi8KKwlpZiAocC0+c2Uub25fcnEgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTk2MCwxMiArMTEyMiwxMyBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgbG9jYWxfY3B1X21hc2spOwogCi1zdGF0aWMgaW5saW5lIGludCBwaWNrX29wdGltYWxfY3B1KGludCB0aGlzX2NwdSwgY3B1bWFza190ICptYXNrKQorc3RhdGljIGlubGluZSBpbnQgcGlja19vcHRpbWFsX2NwdShpbnQgdGhpc19jcHUsCisJCQkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CiAJaW50IGZpcnN0OwogCiAJLyogInRoaXNfY3B1IiBpcyBjaGVhcGVyIHRvIHByZWVtcHQgdGhhbiBhIHJlbW90ZSBwcm9jZXNzb3IgKi8KLQlpZiAoKHRoaXNfY3B1ICE9IC0xKSAmJiBjcHVfaXNzZXQodGhpc19jcHUsICptYXNrKSkKKwlpZiAoKHRoaXNfY3B1ICE9IC0xKSAmJiBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCBtYXNrKSkKIAkJcmV0dXJuIHRoaXNfY3B1OwogCiAJZmlyc3QgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwpAQCAtOTgxLDYgKzExNDQsNyBAQAogCXN0cnVjdCBjcHVtYXNrICpsb3dlc3RfbWFzayA9IF9fZ2V0X2NwdV92YXIobG9jYWxfY3B1X21hc2spOwogCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgY3B1ICAgICAgPSB0YXNrX2NwdSh0YXNrKTsKKwljcHVtYXNrX3Zhcl90IGRvbWFpbl9tYXNrOwogCiAJaWYgKHRhc2stPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9PSAxKQogCQlyZXR1cm4gLTE7IC8qIE5vIG90aGVyIHRhcmdldHMgcG9zc2libGUgKi8KQEAgLTEwMTMsMTkgKzExNzcsMjUgQEAKIAlpZiAodGhpc19jcHUgPT0gY3B1KQogCQl0aGlzX2NwdSA9IC0xOyAvKiBTa2lwIHRoaXNfY3B1IG9wdCBpZiB0aGUgc2FtZSAqLwogCi0JZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKLQkJaWYgKHNkLT5mbGFncyAmIFNEX1dBS0VfQUZGSU5FKSB7Ci0JCQljcHVtYXNrX3QgZG9tYWluX21hc2s7Ci0JCQlpbnQgICAgICAgYmVzdF9jcHU7CisJaWYgKGFsbG9jX2NwdW1hc2tfdmFyKCZkb21haW5fbWFzaywgR0ZQX0FUT01JQykpIHsKKwkJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKKwkJCWlmIChzZC0+ZmxhZ3MgJiBTRF9XQUtFX0FGRklORSkgeworCQkJCWludCBiZXN0X2NwdTsKIAotCQkJY3B1bWFza19hbmQoJmRvbWFpbl9tYXNrLCBzY2hlZF9kb21haW5fc3BhbihzZCksCi0JCQkJICAgIGxvd2VzdF9tYXNrKTsKKwkJCQljcHVtYXNrX2FuZChkb21haW5fbWFzaywKKwkJCQkJICAgIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwKKwkJCQkJICAgIGxvd2VzdF9tYXNrKTsKIAotCQkJYmVzdF9jcHUgPSBwaWNrX29wdGltYWxfY3B1KHRoaXNfY3B1LAotCQkJCQkJICAgICZkb21haW5fbWFzayk7Ci0JCQlpZiAoYmVzdF9jcHUgIT0gLTEpCi0JCQkJcmV0dXJuIGJlc3RfY3B1OworCQkJCWJlc3RfY3B1ID0gcGlja19vcHRpbWFsX2NwdSh0aGlzX2NwdSwKKwkJCQkJCQkgICAgZG9tYWluX21hc2spOworCisJCQkJaWYgKGJlc3RfY3B1ICE9IC0xKSB7CisJCQkJCWZyZWVfY3B1bWFza192YXIoZG9tYWluX21hc2spOworCQkJCQlyZXR1cm4gYmVzdF9jcHU7CisJCQkJfQorCQkJfQogCQl9CisJCWZyZWVfY3B1bWFza192YXIoZG9tYWluX21hc2spOwogCX0KIAogCS8qCkBAIC0xMDcyLDcgKzEyNDIsNyBAQAogCQl9CiAKIAkJLyogSWYgdGhpcyBycSBpcyBzdGlsbCBzdWl0YWJsZSB1c2UgaXQuICovCi0JCWlmIChsb3dlc3RfcnEtPnJ0LmhpZ2hlc3RfcHJpbyA+IHRhc2stPnByaW8pCisJCWlmIChsb3dlc3RfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyID4gdGFzay0+cHJpbykKIAkJCWJyZWFrOwogCiAJCS8qIHRyeSBhZ2FpbiAqLwpAQCAtMTA4Myw2ICsxMjUzLDMxIEBACiAJcmV0dXJuIGxvd2VzdF9ycTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaGFzX3B1c2hhYmxlX3Rhc2tzKHN0cnVjdCBycSAqcnEpCit7CisJcmV0dXJuICFwbGlzdF9oZWFkX2VtcHR5KCZycS0+cnQucHVzaGFibGVfdGFza3MpOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKworCWlmICghaGFzX3B1c2hhYmxlX3Rhc2tzKHJxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwID0gcGxpc3RfZmlyc3RfZW50cnkoJnJxLT5ydC5wdXNoYWJsZV90YXNrcywKKwkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgcHVzaGFibGVfdGFza3MpOworCisJQlVHX09OKHJxLT5jcHUgIT0gdGFza19jcHUocCkpOworCUJVR19PTih0YXNrX2N1cnJlbnQocnEsIHApKTsKKwlCVUdfT04ocC0+cnQubnJfY3B1c19hbGxvd2VkIDw9IDEpOworCisJQlVHX09OKCFwLT5zZS5vbl9ycSk7CisJQlVHX09OKCFydF90YXNrKHApKTsKKworCXJldHVybiBwOworfQorCiAvKgogICogSWYgdGhlIGN1cnJlbnQgQ1BVIGhhcyBtb3JlIHRoYW4gb25lIFJUIHRhc2ssIHNlZSBpZiB0aGUgbm9uCiAgKiBydW5uaW5nIHRhc2sgY2FuIG1pZ3JhdGUgb3ZlciB0byBhIENQVSB0aGF0IGlzIHJ1bm5pbmcgYSB0YXNrCkBAIC0xMDkyLDEzICsxMjg3LDExIEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3Rhc2s7CiAJc3RydWN0IHJxICpsb3dlc3RfcnE7Ci0JaW50IHJldCA9IDA7Ci0JaW50IHBhcmFub2lkID0gUlRfTUFYX1RSSUVTOwogCiAJaWYgKCFycS0+cnQub3ZlcmxvYWRlZCkKIAkJcmV0dXJuIDA7CiAKLQluZXh0X3Rhc2sgPSBwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHJxLCAtMSk7CisJbmV4dF90YXNrID0gcGlja19uZXh0X3B1c2hhYmxlX3Rhc2socnEpOwogCWlmICghbmV4dF90YXNrKQogCQlyZXR1cm4gMDsKIApAQCAtMTEyNywxNiArMTMyMCwzNCBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJCS8qCiAJCSAqIGZpbmQgbG9ja19sb3dlc3RfcnEgcmVsZWFzZXMgcnEtPmxvY2sKLQkJICogc28gaXQgaXMgcG9zc2libGUgdGhhdCBuZXh0X3Rhc2sgaGFzIGNoYW5nZWQuCi0JCSAqIElmIGl0IGhhcywgdGhlbiB0cnkgYWdhaW4uCisJCSAqIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgbmV4dF90YXNrIGhhcyBtaWdyYXRlZC4KKwkJICoKKwkJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdGFzayBpcyBzdGlsbCBvbiB0aGUgc2FtZQorCQkgKiBydW4tcXVldWUgYW5kIGlzIGFsc28gc3RpbGwgdGhlIG5leHQgdGFzayBlbGlnaWJsZSBmb3IKKwkJICogcHVzaGluZy4KIAkJICovCi0JCXRhc2sgPSBwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHJxLCAtMSk7Ci0JCWlmICh1bmxpa2VseSh0YXNrICE9IG5leHRfdGFzaykgJiYgdGFzayAmJiBwYXJhbm9pZC0tKSB7Ci0JCQlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKLQkJCW5leHRfdGFzayA9IHRhc2s7Ci0JCQlnb3RvIHJldHJ5OworCQl0YXNrID0gcGlja19uZXh0X3B1c2hhYmxlX3Rhc2socnEpOworCQlpZiAodGFza19jcHUobmV4dF90YXNrKSA9PSBycS0+Y3B1ICYmIHRhc2sgPT0gbmV4dF90YXNrKSB7CisJCQkvKgorCQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZSB0YXNrIGhhc250IG1vdmVkIGF0IGFsbCwgYnV0CisJCQkgKiBpdCBoYXMgZmFpbGVkIHRvIHB1c2guICBXZSB3aWxsIG5vdCB0cnkgYWdhaW4sCisJCQkgKiBzaW5jZSB0aGUgb3RoZXIgY3B1cyB3aWxsIHB1bGwgZnJvbSB1cyB3aGVuIHRoZXkKKwkJCSAqIGFyZSByZWFkeS4KKwkJCSAqLworCQkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBuZXh0X3Rhc2spOworCQkJZ290byBvdXQ7CiAJCX0KLQkJZ290byBvdXQ7CisKKwkJaWYgKCF0YXNrKQorCQkJLyogTm8gbW9yZSB0YXNrcywganVzdCBleGl0ICovCisJCQlnb3RvIG91dDsKKworCQkvKgorCQkgKiBTb21ldGhpbmcgaGFzIHNoaWZ0ZWQsIHRyeSBhZ2Fpbi4KKwkJICovCisJCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOworCQluZXh0X3Rhc2sgPSB0YXNrOworCQlnb3RvIHJldHJ5OwogCX0KIAogCWRlYWN0aXZhdGVfdGFzayhycSwgbmV4dF90YXNrLCAwKTsKQEAgLTExNDcsMjMgKzEzNTgsMTIgQEAKIAogCWRvdWJsZV91bmxvY2tfYmFsYW5jZShycSwgbG93ZXN0X3JxKTsKIAotCXJldCA9IDE7CiBvdXQ6CiAJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAxOwogfQogCi0vKgotICogVE9ETzogQ3VycmVudGx5IHdlIGp1c3QgdXNlIHRoZSBzZWNvbmQgaGlnaGVzdCBwcmlvIHRhc2sgb24KLSAqICAgICAgIHRoZSBxdWV1ZSwgYW5kIHN0b3Agd2hlbiBpdCBjYW4ndCBtaWdyYXRlIChvciB0aGVyZSdzCi0gKiAgICAgICBubyBtb3JlIFJUIHRhc2tzKS4gIFRoZXJlIG1heSBiZSBhIGNhc2Ugd2hlcmUgYSBsb3dlcgotICogICAgICAgcHJpb3JpdHkgUlQgdGFzayBoYXMgYSBkaWZmZXJlbnQgYWZmaW5pdHkgdGhhbiB0aGUKLSAqICAgICAgIGhpZ2hlciBSVCB0YXNrLiBJbiB0aGlzIGNhc2UgdGhlIGxvd2VyIFJUIHRhc2sgY291bGQKLSAqICAgICAgIHBvc3NpYmx5IGJlIGFibGUgdG8gbWlncmF0ZSB3aGVyZSBhcyB0aGUgaGlnaGVyIHByaW9yaXR5Ci0gKiAgICAgICBSVCB0YXNrIGNvdWxkIG5vdC4gIFdlIGN1cnJlbnRseSBpZ25vcmUgdGhpcyBpc3N1ZS4KLSAqICAgICAgIEVuaGFuY2VtZW50cyBhcmUgd2VsY29tZSEKLSAqLwogc3RhdGljIHZvaWQgcHVzaF9ydF90YXNrcyhzdHJ1Y3QgcnEgKnJxKQogewogCS8qIHB1c2hfcnRfdGFzayB3aWxsIHJldHVybiB0cnVlIGlmIGl0IG1vdmVkIGFuIFJUICovCkBAIC0xMTc0LDMzICsxMzc0LDM1IEBACiBzdGF0aWMgaW50IHB1bGxfcnRfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEpCiB7CiAJaW50IHRoaXNfY3B1ID0gdGhpc19ycS0+Y3B1LCByZXQgPSAwLCBjcHU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbmV4dDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJc3RydWN0IHJxICpzcmNfcnE7CiAKIAlpZiAobGlrZWx5KCFydF9vdmVybG9hZGVkKHRoaXNfcnEpKSkKIAkJcmV0dXJuIDA7CiAKLQluZXh0ID0gcGlja19uZXh0X3Rhc2tfcnQodGhpc19ycSk7Ci0KIAlmb3JfZWFjaF9jcHUoY3B1LCB0aGlzX3JxLT5yZC0+cnRvX21hc2spIHsKIAkJaWYgKHRoaXNfY3B1ID09IGNwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXNyY19ycSA9IGNwdV9ycShjcHUpOworCisJCS8qCisJCSAqIERvbid0IGJvdGhlciB0YWtpbmcgdGhlIHNyY19ycS0+bG9jayBpZiB0aGUgbmV4dCBoaWdoZXN0CisJCSAqIHRhc2sgaXMga25vd24gdG8gYmUgbG93ZXItcHJpb3JpdHkgdGhhbiBvdXIgY3VycmVudCB0YXNrLgorCQkgKiBUaGlzIG1heSBsb29rIHJhY3ksIGJ1dCBpZiB0aGlzIHZhbHVlIGlzIGFib3V0IHRvIGdvCisJCSAqIGxvZ2ljYWxseSBoaWdoZXIsIHRoZSBzcmNfcnEgd2lsbCBwdXNoIHRoaXMgdGFzayBhd2F5LgorCQkgKiBBbmQgaWYgaXRzIGdvaW5nIGxvZ2ljYWxseSBsb3dlciwgd2UgZG8gbm90IGNhcmUKKwkJICovCisJCWlmIChzcmNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5uZXh0ID49CisJCSAgICB0aGlzX3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VycikKKwkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIFdlIGNhbiBwb3RlbnRpYWxseSBkcm9wIHRoaXNfcnEncyBsb2NrIGluCiAJCSAqIGRvdWJsZV9sb2NrX2JhbGFuY2UsIGFuZCBhbm90aGVyIENQVSBjb3VsZAotCQkgKiBzdGVhbCBvdXIgbmV4dCB0YXNrIC0gaGVuY2Ugd2UgbXVzdCBjYXVzZQotCQkgKiB0aGUgY2FsbGVyIHRvIHJlY2FsY3VsYXRlIHRoZSBuZXh0IHRhc2sKLQkJICogaW4gdGhhdCBjYXNlOgorCQkgKiBhbHRlciB0aGlzX3JxCiAJCSAqLwotCQlpZiAoZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpKSB7Ci0JCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZF9uZXh0ID0gbmV4dDsKLQotCQkJbmV4dCA9IHBpY2tfbmV4dF90YXNrX3J0KHRoaXNfcnEpOwotCQkJaWYgKG5leHQgIT0gb2xkX25leHQpCi0JCQkJcmV0ID0gMTsKLQkJfQorCQlkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSk7CiAKIAkJLyoKIAkJICogQXJlIHRoZXJlIHN0aWxsIHB1bGxhYmxlIFJUIHRhc2tzPwpAQCAtMTIxNCw3ICsxNDE2LDcgQEAKIAkJICogRG8gd2UgaGF2ZSBhbiBSVCB0YXNrIHRoYXQgcHJlZW1wdHMKIAkJICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrPwogCQkgKi8KLQkJaWYgKHAgJiYgKCFuZXh0IHx8IChwLT5wcmlvIDwgbmV4dC0+cHJpbykpKSB7CisJCWlmIChwICYmIChwLT5wcmlvIDwgdGhpc19ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIpKSB7CiAJCQlXQVJOX09OKHAgPT0gc3JjX3JxLT5jdXJyKTsKIAkJCVdBUk5fT04oIXAtPnNlLm9uX3JxKTsKIApAQCAtMTIyNCwxMiArMTQyNiw5IEBACiAJCQkgKiBUaGlzIGlzIGp1c3QgdGhhdCBwIGlzIHdha2VpbmcgdXAgYW5kIGhhc24ndAogCQkJICogaGFkIGEgY2hhbmNlIHRvIHNjaGVkdWxlLiBXZSBvbmx5IHB1bGwKIAkJCSAqIHAgaWYgaXQgaXMgbG93ZXIgaW4gcHJpb3JpdHkgdGhhbiB0aGUKLQkJCSAqIGN1cnJlbnQgdGFzayBvbiB0aGUgcnVuIHF1ZXVlIG9yCi0JCQkgKiB0aGlzX3JxIG5leHQgdGFzayBpcyBsb3dlciBpbiBwcmlvIHRoYW4KLQkJCSAqIHRoZSBjdXJyZW50IHRhc2sgb24gdGhhdCBycS4KKwkJCSAqIGN1cnJlbnQgdGFzayBvbiB0aGUgcnVuIHF1ZXVlCiAJCQkgKi8KLQkJCWlmIChwLT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvIHx8Ci0JCQkgICAgKG5leHQgJiYgbmV4dC0+cHJpbyA8IHNyY19ycS0+Y3Vyci0+cHJpbykpCisJCQlpZiAocC0+cHJpbyA8IHNyY19ycS0+Y3Vyci0+cHJpbykKIAkJCQlnb3RvIHNraXA7CiAKIAkJCXJldCA9IDE7CkBAIC0xMjQyLDEzICsxNDQxLDcgQEAKIAkJCSAqIGNhc2UgdGhlcmUncyBhbiBldmVuIGhpZ2hlciBwcmlvIHRhc2sKIAkJCSAqIGluIGFub3RoZXIgcnVucXVldWUuIChsb3cgbGlrZWx5aG9vZAogCQkJICogYnV0IHBvc3NpYmxlKQotCQkJICoKLQkJCSAqIFVwZGF0ZSBuZXh0IHNvIHRoYXQgd2Ugd29uJ3QgcGljayBhIHRhc2sKLQkJCSAqIG9uIGFub3RoZXIgY3B1IHdpdGggYSBwcmlvcml0eSBsb3dlciAob3IgZXF1YWwpCi0JCQkgKiB0aGFuIHRoZSBvbmUgd2UganVzdCBwaWNrZWQuCiAJCQkgKi8KLQkJCW5leHQgPSBwOwotCiAJCX0KICBza2lwOgogCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKTsKQEAgLTEyNjAsMjQgKzE0NTMsMjcgQEAKIHN0YXRpYyB2b2lkIHByZV9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCiB7CiAJLyogVHJ5IHRvIHB1bGwgUlQgdGFza3MgaGVyZSBpZiB3ZSBsb3dlciB0aGlzIHJxJ3MgcHJpbyAqLwotCWlmICh1bmxpa2VseShydF90YXNrKHByZXYpKSAmJiBycS0+cnQuaGlnaGVzdF9wcmlvID4gcHJldi0+cHJpbykKKwlpZiAodW5saWtlbHkocnRfdGFzayhwcmV2KSkgJiYgcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyID4gcHJldi0+cHJpbykKIAkJcHVsbF9ydF90YXNrKHJxKTsKIH0KIAorLyoKKyAqIGFzc3VtZXMgcnEtPmxvY2sgaXMgaGVsZAorICovCitzdGF0aWMgaW50IG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQoc3RydWN0IHJxICpycSkKK3sKKwlyZXR1cm4gaGFzX3B1c2hhYmxlX3Rhc2tzKHJxKTsKK30KKwogc3RhdGljIHZvaWQgcG9zdF9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxKQogewogCS8qCi0JICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHJ0X3Rhc2sgcXVldWVkLCB0aGVuCi0JICogc2VlIGlmIHdlIGNhbiBwdXNoIHRoZSBvdGhlciBydF90YXNrcyBvZmYgdG8gb3RoZXIgQ1BVUy4KLQkgKiBOb3RlIHdlIG1heSByZWxlYXNlIHRoZSBycSBsb2NrLCBhbmQgc2luY2UKLQkgKiB0aGUgbG9jayB3YXMgb3duZWQgYnkgcHJldiwgd2UgbmVlZCB0byByZWxlYXNlIGl0Ci0JICogZmlyc3QgdmlhIGZpbmlzaF9sb2NrX3N3aXRjaCBhbmQgdGhlbiByZWFxdWlyZSBpdCBoZXJlLgorCSAqIFRoaXMgaXMgb25seSBjYWxsZWQgaWYgbmVlZHNfcG9zdF9zY2hlZHVsZV9ydCgpIGluZGljYXRlcyB0aGF0CisJICogd2UgbmVlZCB0byBwdXNoIHRhc2tzIGF3YXkKIAkgKi8KLQlpZiAodW5saWtlbHkocnEtPnJ0Lm92ZXJsb2FkZWQpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKLQkJcHVzaF9ydF90YXNrcyhycSk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwotCX0KKwlzcGluX2xvY2tfaXJxKCZycS0+bG9jayk7CisJcHVzaF9ydF90YXNrcyhycSk7CisJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiB9CiAKIC8qCkBAIC0xMjg4LDcgKzE0ODQsOCBAQAogewogCWlmICghdGFza19ydW5uaW5nKHJxLCBwKSAmJgogCSAgICAhdGVzdF90c2tfbmVlZF9yZXNjaGVkKHJxLT5jdXJyKSAmJgotCSAgICBycS0+cnQub3ZlcmxvYWRlZCkKKwkgICAgaGFzX3B1c2hhYmxlX3Rhc2tzKHJxKSAmJgorCSAgICBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQogCQlwdXNoX3J0X3Rhc2tzKHJxKTsKIH0KIApAQCAtMTMyNCw2ICsxNTIxLDI0IEBACiAJaWYgKHAtPnNlLm9uX3JxICYmICh3ZWlnaHQgIT0gcC0+cnQubnJfY3B1c19hbGxvd2VkKSkgewogCQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKIAorCQlpZiAoIXRhc2tfY3VycmVudChycSwgcCkpIHsKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgd2UgZGVxdWV1ZSB0aGlzIHRhc2sgZnJvbSB0aGUgcHVzaGFibGUgbGlzdAorCQkJICogYmVmb3JlIGdvaW5nIGZ1cnRoZXIuICBJdCB3aWxsIGVpdGhlciByZW1haW4gb2ZmIG9mCisJCQkgKiB0aGUgbGlzdCBiZWNhdXNlIHdlIGFyZSBubyBsb25nZXIgcHVzaGFibGUsIG9yIGl0CisJCQkgKiB3aWxsIGJlIHJlcXVldWVkLgorCQkJICovCisJCQlpZiAocC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwkJCQlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCisJCQkvKgorCQkJICogUmVxdWV1ZSBpZiBvdXIgd2VpZ2h0IGlzIGNoYW5naW5nIGFuZCBzdGlsbCA+IDEKKwkJCSAqLworCQkJaWYgKHdlaWdodCA+IDEpCisJCQkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKworCQl9CisKIAkJaWYgKChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPD0gMSkgJiYgKHdlaWdodCA+IDEpKSB7CiAJCQlycS0+cnQucnRfbnJfbWlncmF0b3J5Kys7CiAJCX0gZWxzZSBpZiAoKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpICYmICh3ZWlnaHQgPD0gMSkpIHsKQEAgLTEzMzEsNyArMTU0Niw3IEBACiAJCQlycS0+cnQucnRfbnJfbWlncmF0b3J5LS07CiAJCX0KIAotCQl1cGRhdGVfcnRfbWlncmF0aW9uKHJxKTsKKwkJdXBkYXRlX3J0X21pZ3JhdGlvbigmcnEtPnJ0KTsKIAl9CiAKIAljcHVtYXNrX2NvcHkoJnAtPmNwdXNfYWxsb3dlZCwgbmV3X21hc2spOwpAQCAtMTM0Niw3ICsxNTYxLDcgQEAKIAogCV9fZW5hYmxlX3J1bnRpbWUocnEpOwogCi0JY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJxLT5ydC5oaWdoZXN0X3ByaW8pOworCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIpOwogfQogCiAvKiBBc3N1bWVzIHJxLT5sb2NrIGlzIGhlbGQgKi8KQEAgLTE0MzgsNyArMTY1Myw3IEBACiAJCSAqIGNhbiByZWxlYXNlIHRoZSBycSBsb2NrIGFuZCBwIGNvdWxkIG1pZ3JhdGUuCiAJCSAqIE9ubHkgcmVzY2hlZHVsZSBpZiBwIGlzIHN0aWxsIG9uIHRoZSBzYW1lIHJ1bnF1ZXVlLgogCQkgKi8KLQkJaWYgKHAtPnByaW8gPiBycS0+cnQuaGlnaGVzdF9wcmlvICYmIHJxLT5jdXJyID09IHApCisJCWlmIChwLT5wcmlvID4gcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyICYmIHJxLT5jdXJyID09IHApCiAJCQlyZXNjaGVkX3Rhc2socCk7CiAjZWxzZQogCQkvKiBGb3IgVVAgc2ltcGx5IHJlc2NoZWQgb24gZHJvcCBvZiBwcmlvICovCkBAIC0xNTA5LDYgKzE3MjQsOSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJxLT5jdXJyOwogCiAJcC0+c2UuZXhlY19zdGFydCA9IHJxLT5jbG9jazsKKworCS8qIFRoZSBydW5uaW5nIHRhc2sgaXMgbmV2ZXIgZWxpZ2libGUgZm9yIHB1c2hpbmcgKi8KKwlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzIHJ0X3NjaGVkX2NsYXNzID0gewpAQCAtMTUzMSw2ICsxNzQ5LDcgQEAKIAkucnFfb25saW5lICAgICAgICAgICAgICA9IHJxX29ubGluZV9ydCwKIAkucnFfb2ZmbGluZSAgICAgICAgICAgICA9IHJxX29mZmxpbmVfcnQsCiAJLnByZV9zY2hlZHVsZQkJPSBwcmVfc2NoZWR1bGVfcnQsCisJLm5lZWRzX3Bvc3Rfc2NoZWR1bGUJPSBuZWVkc19wb3N0X3NjaGVkdWxlX3J0LAogCS5wb3N0X3NjaGVkdWxlCQk9IHBvc3Rfc2NoZWR1bGVfcnQsCiAJLnRhc2tfd2FrZV91cAkJPSB0YXNrX3dha2VfdXBfcnQsCiAJLnN3aXRjaGVkX2Zyb20JCT0gc3dpdGNoZWRfZnJvbV9ydCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKaW5kZXggYThmOTNkZC4uMzJkMmJkNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3N0YXRzLmgKKysrIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKQEAgLTQsNyArNCw3IEBACiAgKiBidW1wIHRoaXMgdXAgd2hlbiBjaGFuZ2luZyB0aGUgb3V0cHV0IGZvcm1hdCBvciB0aGUgbWVhbmluZyBvZiBhbiBleGlzdGluZwogICogZm9ybWF0LCBzbyB0aGF0IHRvb2xzIGNhbiBhZGFwdCAob3IgYWJvcnQpCiAgKi8KLSNkZWZpbmUgU0NIRURTVEFUX1ZFUlNJT04gMTQKKyNkZWZpbmUgU0NIRURTVEFUX1ZFUlNJT04gMTUKIAogc3RhdGljIGludCBzaG93X3NjaGVkc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKQEAgLTI2LDkgKzI2LDggQEAKIAogCQkvKiBydW5xdWV1ZS1zcGVjaWZpYyBzdGF0cyAqLwogCQlzZXFfcHJpbnRmKHNlcSwKLQkJICAgICJjcHUlZCAldSAldSAldSAldSAldSAldSAldSAldSAldSAlbGx1ICVsbHUgJWx1IiwKLQkJICAgIGNwdSwgcnEtPnlsZF9ib3RoX2VtcHR5LAotCQkgICAgcnEtPnlsZF9hY3RfZW1wdHksIHJxLT55bGRfZXhwX2VtcHR5LCBycS0+eWxkX2NvdW50LAorCQkgICAgImNwdSVkICV1ICV1ICV1ICV1ICV1ICV1ICVsbHUgJWxsdSAlbHUiLAorCQkgICAgY3B1LCBycS0+eWxkX2NvdW50LAogCQkgICAgcnEtPnNjaGVkX3N3aXRjaCwgcnEtPnNjaGVkX2NvdW50LCBycS0+c2NoZWRfZ29pZGxlLAogCQkgICAgcnEtPnR0d3VfY291bnQsIHJxLT50dHd1X2xvY2FsLAogCQkgICAgcnEtPnJxX2NwdV90aW1lLApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDJhNzRmZTguLjFjODgxNDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTE1NzUsNyArMTU3NSwxNSBAQAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKG1heV9wdHJhY2Vfc3RvcCgpKSB7CiAJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBDTERfVFJBUFBFRCk7CisJCS8qCisJCSAqIERvbid0IHdhbnQgdG8gYWxsb3cgcHJlZW1wdGlvbiBoZXJlLCBiZWNhdXNlCisJCSAqIHN5c19wdHJhY2UoKSBuZWVkcyB0aGlzIHRhc2sgdG8gYmUgaW5hY3RpdmUuCisJCSAqCisJCSAqIFhYWDogaW1wbGVtZW50IHJlYWRfdW5sb2NrX25vX3Jlc2NoZWQoKS4KKwkJICovCisJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKIAl9IGVsc2UgewogCQkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggOTA0MWVhNy4uNTdkM2Y2NyAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC03OTYsNiArNzk2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2luaXQgX193ZWFrIGFyY2hfcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCXJldHVybiAwOworfQorCiBpbnQgX19pbml0IF9fd2VhayBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggMGNkNDE1ZS4uNzQ1NDFjYSAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJICogZG9lc24ndCBoaXQgdGhpcyBDUFUgdW50aWwgd2UncmUgcmVhZHkuICovCiAJZ2V0X2NwdSgpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlzbV93b3JrID0gcGVyY3B1X3B0cihzdG9wX21hY2hpbmVfd29yaywgaSk7CisJCXNtX3dvcmsgPSBwZXJfY3B1X3B0cihzdG9wX21hY2hpbmVfd29yaywgaSk7CiAJCUlOSVRfV09SSyhzbV93b3JrLCBzdG9wX2NwdSk7CiAJCXF1ZXVlX3dvcmtfb24oaSwgc3RvcF9tYWNoaW5lX3dxLCBzbV93b3JrKTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKaW5kZXggZmFmZWI0OC4uYjM4NDIzYyAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAJeyBORVRfSVBWNF9DT05GX0FSUF9JR05PUkUsCQkiYXJwX2lnbm9yZSIgfSwKIAl7IE5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUywJInByb21vdGVfc2Vjb25kYXJpZXMiIH0sCiAJeyBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQsCQkiYXJwX2FjY2VwdCIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfQVJQX05PVElGWSwJCSJhcnBfbm90aWZ5IiB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9NYWtlZmlsZSBiL2tlcm5lbC90aW1lL01ha2VmaWxlCmluZGV4IDkwNWIwYjUuLjBiMGE2MzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL01ha2VmaWxlCisrKyBiL2tlcm5lbC90aW1lL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLXkgKz0gdGltZWtlZXBpbmcubyBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8KK29iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vIHRpbWVjb21wYXJlLm8KIAogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQpCQkrPSBjbG9ja2V2ZW50cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUykJCSs9IHRpY2stY29tbW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IGVhMmY0OGEuLmQxM2JlMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtNjgsNiArNjgsMTcgQEAKIAlpZiAoZGV2LT5tb2RlICE9IG1vZGUpIHsKIAkJZGV2LT5zZXRfbW9kZShtb2RlLCBkZXYpOwogCQlkZXYtPm1vZGUgPSBtb2RlOworCisJCS8qCisJCSAqIEEgbnNlYzJjeWMgbXVsdGlwbGljYXRvciBvZiAwIGlzIGludmFsaWQgYW5kIHdlJ2QgY3Jhc2gKKwkJICogb24gaXQsIHNvIGZpeCBpdCB1cCBhbmQgZW1pdCBhIHdhcm5pbmc6CisJCSAqLworCQlpZiAobW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCQlpZiAodW5saWtlbHkoIWRldi0+bXVsdCkpIHsKKwkJCQlkZXYtPm11bHQgPSAxOworCQkJCVdBUk5fT04oMSk7CisJCQl9CisJCX0KIAl9CiB9CiAKQEAgLTE2OCwxNSArMTc5LDYgQEAKIAlCVUdfT04oZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1VOVVNFRCk7CiAJQlVHX09OKCFkZXYtPmNwdW1hc2spOwogCi0JLyoKLQkgKiBBIG5zZWMyY3ljIG11bHRpcGxpY2F0b3Igb2YgMCBpcyBpbnZhbGlkIGFuZCB3ZSdkIGNyYXNoCi0JICogb24gaXQsIHNvIGZpeCBpdCB1cCBhbmQgZW1pdCBhIHdhcm5pbmc6Ci0JICovCi0JaWYgKHVubGlrZWx5KCFkZXYtPm11bHQpKSB7Ci0JCWRldi0+bXVsdCA9IDE7Ci0JCVdBUk5fT04oMSk7Ci0JfQotCiAJc3Bpbl9sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKIAogCWxpc3RfYWRkKCZkZXYtPmxpc3QsICZjbG9ja2V2ZW50X2RldmljZXMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggY2E4OWUxNS4uYzQ2YzkzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zMSw2ICszMSw4MiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBzcGluX3VubG9ja19pcnEoKSB1c2luZyBwcmVlbXB0X2NvdW50KCkgbTY4ayAqLwogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KIAordm9pZCB0aW1lY291bnRlcl9pbml0KHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAorCQkgICAgICB1NjQgc3RhcnRfdHN0YW1wKQoreworCXRjLT5jYyA9IGNjOworCXRjLT5jeWNsZV9sYXN0ID0gY2MtPnJlYWQoY2MpOworCXRjLT5uc2VjID0gc3RhcnRfdHN0YW1wOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9pbml0KTsKKworLyoqCisgKiB0aW1lY291bnRlcl9yZWFkX2RlbHRhIC0gZ2V0IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uCisgKiBAdGM6ICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIKKyAqCisgKiBXaGVuIHRoZSB1bmRlcmx5aW5nIGN5Y2xlIGNvdW50ZXIgcnVucyBvdmVyLCB0aGlzIHdpbGwgYmUgaGFuZGxlZAorICogY29ycmVjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcyBub3QgcnVuIG92ZXIgbW9yZSB0aGFuIG9uY2UgYmV0d2VlbgorICogY2FsbHMuCisgKgorICogVGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYSBuZXcgdGltZSBjb3VudGVyIGluaXRpYWxpemVzCisgKiB0aGUgdGltZSB0cmFja2luZyBhbmQgcmV0dXJucyBhbiB1bmRlZmluZWQgcmVzdWx0LgorICovCitzdGF0aWMgdTY0IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisJdTY0IG5zX29mZnNldDsKKworCS8qIHJlYWQgY3ljbGUgY291bnRlcjogKi8KKwljeWNsZV9ub3cgPSB0Yy0+Y2MtPnJlYWQodGMtPmNjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdGltZWNvdW50ZXJfcmVhZF9kZWx0YSgpOiAqLworCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKworCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJbnNfb2Zmc2V0ID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKTsKKworCS8qIHVwZGF0ZSB0aW1lIHN0YW1wIG9mIHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoKSBjYWxsOiAqLworCXRjLT5jeWNsZV9sYXN0ID0gY3ljbGVfbm93OworCisJcmV0dXJuIG5zX29mZnNldDsKK30KKwordTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwl1NjQgbnNlYzsKKworCS8qIGluY3JlbWVudCB0aW1lIGJ5IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCAqLworCW5zZWMgPSB0aW1lY291bnRlcl9yZWFkX2RlbHRhKHRjKTsKKwluc2VjICs9IHRjLT5uc2VjOworCXRjLT5uc2VjID0gbnNlYzsKKworCXJldHVybiBuc2VjOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9yZWFkKTsKKwordTY0IHRpbWVjb3VudGVyX2N5YzJ0aW1lKHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCQkgY3ljbGVfdCBjeWNsZV90c3RhbXApCit7CisJdTY0IGN5Y2xlX2RlbHRhID0gKGN5Y2xlX3RzdGFtcCAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKwl1NjQgbnNlYzsKKworCS8qCisJICogSW5zdGVhZCBvZiBhbHdheXMgdHJlYXRpbmcgY3ljbGVfdHN0YW1wIGFzIG1vcmUgcmVjZW50CisJICogdGhhbiB0Yy0+Y3ljbGVfbGFzdCwgZGV0ZWN0IHdoZW4gaXQgaXMgdG9vIGZhciBpbiB0aGUKKwkgKiBmdXR1cmUgYW5kIHRyZWF0IGl0IGFzIG9sZCB0aW1lIHN0YW1wIGluc3RlYWQuCisJICovCisJaWYgKGN5Y2xlX2RlbHRhID4gdGMtPmNjLT5tYXNrIC8gMikgeworCQljeWNsZV9kZWx0YSA9ICh0Yy0+Y3ljbGVfbGFzdCAtIGN5Y2xlX3RzdGFtcCkgJiB0Yy0+Y2MtPm1hc2s7CisJCW5zZWMgPSB0Yy0+bnNlYyAtIGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSk7CisJfSBlbHNlIHsKKwkJbnNlYyA9IGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSkgKyB0Yy0+bnNlYzsKKwl9CisKKwlyZXR1cm4gbnNlYzsKK30KK0VYUE9SVF9TWU1CT0wodGltZWNvdW50ZXJfY3ljMnRpbWUpOworCiAvKiBYWFggLSBXb3VsZCBsaWtlIGEgYmV0dGVyIHdheSBmb3IgaW5pdGlhbGl6aW5nIGN1cnJfY2xvY2tzb3VyY2UgKi8KIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfamlmZmllczsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCBmNWY3OTNkLi43ZmM2NDM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMSw3MSArMSwxMjkgQEAKIC8qCi0gKiBsaW51eC9rZXJuZWwvdGltZS9udHAuYwotICoKICAqIE5UUCBzdGF0ZSBtYWNoaW5lIGludGVyZmFjZXMgYW5kIGxvZ2ljLgogICoKICAqIFRoaXMgY29kZSB3YXMgbWFpbmx5IG1vdmVkIGZyb20ga2VybmVsL3RpbWVyLmMgYW5kIGtlcm5lbC90aW1lLmMKICAqIFBsZWFzZSBzZWUgdGhvc2UgZmlsZXMgZm9yIHJlbGV2YW50IGNvcHlyaWdodCBpbmZvIGFuZCBoaXN0b3JpY2FsCiAgKiBjaGFuZ2Vsb2dzLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgotICogVGltZWtlZXBpbmcgdmFyaWFibGVzCisgKiBOVFAgdGltZWtlZXBpbmcgdmFyaWFibGVzOgogICovCi11bnNpZ25lZCBsb25nIHRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsgCQkvKiBVU0VSX0haIHBlcmlvZCAodXNlYykgKi8KLXVuc2lnbmVkIGxvbmcgdGlja19uc2VjOwkJCS8qIEFDVEhaIHBlcmlvZCAobnNlYykgKi8KLXU2NCB0aWNrX2xlbmd0aDsKLXN0YXRpYyB1NjQgdGlja19sZW5ndGhfYmFzZTsKIAotc3RhdGljIHN0cnVjdCBocnRpbWVyIGxlYXBfdGltZXI7CisvKiBVU0VSX0haIHBlcmlvZCAodXNlY3MpOiAqLwordW5zaWduZWQgbG9uZwkJCXRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsKIAotI2RlZmluZSBNQVhfVElDS0FESgkJNTAwCQkvKiBtaWNyb3NlY3MgKi8KLSNkZWZpbmUgTUFYX1RJQ0tBREpfU0NBTEVECSgoKHU2NCkoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBcCi0JCQkJICBOVFBfU0NBTEVfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCisvKiBBQ1RIWiBwZXJpb2QgKG5zZWNzKTogKi8KK3Vuc2lnbmVkIGxvbmcJCQl0aWNrX25zZWM7CisKK3U2NAkJCQl0aWNrX2xlbmd0aDsKK3N0YXRpYyB1NjQJCQl0aWNrX2xlbmd0aF9iYXNlOworCitzdGF0aWMgc3RydWN0IGhydGltZXIJCWxlYXBfdGltZXI7CisKKyNkZWZpbmUgTUFYX1RJQ0tBREoJCTUwMExMCQkvKiB1c2VjcyAqLworI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQgXAorCSgoKE1BWF9USUNLQURKICogTlNFQ19QRVJfVVNFQykgPDwgTlRQX1NDQUxFX1NISUZUKSAvIE5UUF9JTlRFUlZBTF9GUkVRKQogCiAvKgogICogcGhhc2UtbG9jayBsb29wIHZhcmlhYmxlcwogICovCi0vKiBUSU1FX0VSUk9SIHByZXZlbnRzIG92ZXJ3cml0aW5nIHRoZSBDTU9TIGNsb2NrICovCi1zdGF0aWMgaW50IHRpbWVfc3RhdGUgPSBUSU1FX09LOwkvKiBjbG9jayBzeW5jaHJvbml6YXRpb24gc3RhdHVzCSovCi1pbnQgdGltZV9zdGF0dXMgPSBTVEFfVU5TWU5DOwkJLyogY2xvY2sgc3RhdHVzIGJpdHMJCSovCi1zdGF0aWMgbG9uZyB0aW1lX3RhaTsJCQkvKiBUQUkgb2Zmc2V0IChzKQkJKi8KLXN0YXRpYyBzNjQgdGltZV9vZmZzZXQ7CQkJLyogdGltZSBhZGp1c3RtZW50IChucykJCSovCi1zdGF0aWMgbG9uZyB0aW1lX2NvbnN0YW50ID0gMjsJCS8qIHBsbCB0aW1lIGNvbnN0YW50CQkqLwotbG9uZyB0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwkvKiBtYXhpbXVtIGVycm9yICh1cykJCSovCi1sb25nIHRpbWVfZXN0ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIGVzdGltYXRlZCBlcnJvciAodXMpCQkqLwotc3RhdGljIHM2NCB0aW1lX2ZyZXE7CQkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zL3MpKi8KLXN0YXRpYyBsb25nIHRpbWVfcmVmdGltZTsJCS8qIHRpbWUgYXQgbGFzdCBhZGp1c3RtZW50IChzKQkqLwotbG9uZyB0aW1lX2FkanVzdDsKLXN0YXRpYyBsb25nIG50cF90aWNrX2FkajsKIAorLyoKKyAqIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMKKyAqCisgKiAoVElNRV9FUlJPUiBwcmV2ZW50cyBvdmVyd3JpdGluZyB0aGUgQ01PUyBjbG9jaykKKyAqLworc3RhdGljIGludAkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCisvKiBjbG9jayBzdGF0dXMgYml0czoJCQkJCQkJKi8KK2ludAkJCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CisKKy8qIFRBSSBvZmZzZXQgKHNlY3MpOgkJCQkJCQkqLworc3RhdGljIGxvbmcJCQl0aW1lX3RhaTsKKworLyogdGltZSBhZGp1c3RtZW50IChuc2Vjcyk6CQkJCQkJKi8KK3N0YXRpYyBzNjQJCQl0aW1lX29mZnNldDsKKworLyogcGxsIHRpbWUgY29uc3RhbnQ6CQkJCQkJCSovCitzdGF0aWMgbG9uZwkJCXRpbWVfY29uc3RhbnQgPSAyOworCisvKiBtYXhpbXVtIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KK2xvbmcJCQkJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKworLyogZXN0aW1hdGVkIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KK2xvbmcJCQkJdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKworLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zZWNzL3NlY3MpOgkJCQkqLworc3RhdGljIHM2NAkJCXRpbWVfZnJlcTsKKworLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHNlY3MpOgkJCQkJKi8KK3N0YXRpYyBsb25nCQkJdGltZV9yZWZ0aW1lOworCitsb25nCQkJCXRpbWVfYWRqdXN0OworCisvKiBjb25zdGFudCAoYm9vdC1wYXJhbSBjb25maWd1cmFibGUpIE5UUCB0aWNrIGFkanVzdG1lbnQgKHVwc2NhbGVkKQkqLworc3RhdGljIHM2NAkJCW50cF90aWNrX2FkajsKKworLyoKKyAqIE5UUCBtZXRob2RzOgorICovCisKKy8qCisgKiBVcGRhdGUgKHRpY2tfbGVuZ3RoLCB0aWNrX2xlbmd0aF9iYXNlLCB0aWNrX25zZWMpLCBiYXNlZAorICogb24gKHRpY2tfdXNlYywgbnRwX3RpY2tfYWRqLCB0aW1lX2ZyZXEpOgorICovCiBzdGF0aWMgdm9pZCBudHBfdXBkYXRlX2ZyZXF1ZW5jeSh2b2lkKQogewotCXU2NCBzZWNvbmRfbGVuZ3RoID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCi0JCQkJPDwgTlRQX1NDQUxFX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gKHM2NCludHBfdGlja19hZGogPDwgTlRQX1NDQUxFX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gdGltZV9mcmVxOworCXU2NCBzZWNvbmRfbGVuZ3RoOworCXU2NCBuZXdfYmFzZTsKIAotCXRpY2tfbGVuZ3RoX2Jhc2UgPSBzZWNvbmRfbGVuZ3RoOworCXNlY29uZF9sZW5ndGgJCSA9ICh1NjQpKHRpY2tfdXNlYyAqIE5TRUNfUEVSX1VTRUMgKiBVU0VSX0haKQorCQkJCQkJPDwgTlRQX1NDQUxFX1NISUZUOwogCi0JdGlja19uc2VjID0gZGl2X3U2NChzZWNvbmRfbGVuZ3RoLCBIWikgPj4gTlRQX1NDQUxFX1NISUZUOwotCXRpY2tfbGVuZ3RoX2Jhc2UgPSBkaXZfdTY0KHRpY2tfbGVuZ3RoX2Jhc2UsIE5UUF9JTlRFUlZBTF9GUkVRKTsKKwlzZWNvbmRfbGVuZ3RoCQkrPSBudHBfdGlja19hZGo7CisJc2Vjb25kX2xlbmd0aAkJKz0gdGltZV9mcmVxOworCisJdGlja19uc2VjCQkgPSBkaXZfdTY0KHNlY29uZF9sZW5ndGgsIEhaKSA+PiBOVFBfU0NBTEVfU0hJRlQ7CisJbmV3X2Jhc2UJCSA9IGRpdl91NjQoc2Vjb25kX2xlbmd0aCwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCisJLyoKKwkgKiBEb24ndCB3YWl0IGZvciB0aGUgbmV4dCBzZWNvbmRfb3ZlcmZsb3csIGFwcGx5CisJICogdGhlIGNoYW5nZSB0byB0aGUgdGljayBsZW5ndGggaW1tZWRpYXRlbHk6CisJICovCisJdGlja19sZW5ndGgJCSs9IG5ld19iYXNlIC0gdGlja19sZW5ndGhfYmFzZTsKKwl0aWNrX2xlbmd0aF9iYXNlCSA9IG5ld19iYXNlOworfQorCitzdGF0aWMgaW5saW5lIHM2NCBudHBfdXBkYXRlX29mZnNldF9mbGwoczY0IG9mZnNldDY0LCBsb25nIHNlY3MpCit7CisJdGltZV9zdGF0dXMgJj0gflNUQV9NT0RFOworCisJaWYgKHNlY3MgPCBNSU5TRUMpCisJCXJldHVybiAwOworCisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfRkxMKSAmJiAoc2VjcyA8PSBNQVhTRUMpKQorCQlyZXR1cm4gMDsKKworCXRpbWVfc3RhdHVzIHw9IFNUQV9NT0RFOworCisJcmV0dXJuIGRpdl9zNjQob2Zmc2V0NjQgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX0ZMTCksIHNlY3MpOwogfQogCiBzdGF0aWMgdm9pZCBudHBfdXBkYXRlX29mZnNldChsb25nIG9mZnNldCkKIHsKLQlsb25nIG10ZW1wOwogCXM2NCBmcmVxX2FkajsKKwlzNjQgb2Zmc2V0NjQ7CisJbG9uZyBzZWNzOwogCiAJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSkKIAkJcmV0dXJuOwpAQCAtODQsMjQgKzE0MiwyMyBAQAogCSAqIFNlbGVjdCBob3cgdGhlIGZyZXF1ZW5jeSBpcyB0byBiZSBjb250cm9sbGVkCiAJICogYW5kIGluIHdoaWNoIG1vZGUgKFBMTCBvciBGTEwpLgogCSAqLwotCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCB8fCB0aW1lX3JlZnRpbWUgPT0gMCkKLQkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOwotCW10ZW1wID0geHRpbWUudHZfc2VjIC0gdGltZV9yZWZ0aW1lOworCXNlY3MgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJaWYgKHVubGlrZWx5KHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEKSkKKwkJc2VjcyA9IDA7CisKIAl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CiAKLQlmcmVxX2FkaiA9IChzNjQpb2Zmc2V0ICogbXRlbXA7Ci0JZnJlcV9hZGogPDw9IE5UUF9TQ0FMRV9TSElGVCAtIDIgKiAoU0hJRlRfUExMICsgMiArIHRpbWVfY29uc3RhbnQpOwotCXRpbWVfc3RhdHVzICY9IH5TVEFfTU9ERTsKLQlpZiAobXRlbXAgPj0gTUlOU0VDICYmICh0aW1lX3N0YXR1cyAmIFNUQV9GTEwgfHwgbXRlbXAgPiBNQVhTRUMpKSB7Ci0JCWZyZXFfYWRqICs9IGRpdl9zNjQoKHM2NClvZmZzZXQgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX0ZMTCksCi0JCQkJICAgIG10ZW1wKTsKLQkJdGltZV9zdGF0dXMgfD0gU1RBX01PREU7Ci0JfQotCWZyZXFfYWRqICs9IHRpbWVfZnJlcTsKLQlmcmVxX2FkaiA9IG1pbihmcmVxX2FkaiwgTUFYRlJFUV9TQ0FMRUQpOwotCXRpbWVfZnJlcSA9IG1heChmcmVxX2FkaiwgLU1BWEZSRVFfU0NBTEVEKTsKKwlvZmZzZXQ2NCAgICA9IG9mZnNldDsKKwlmcmVxX2FkaiAgICA9IChvZmZzZXQ2NCAqIHNlY3MpIDw8CisJCQkoTlRQX1NDQUxFX1NISUZUIC0gMiAqIChTSElGVF9QTEwgKyAyICsgdGltZV9jb25zdGFudCkpOwogCi0JdGltZV9vZmZzZXQgPSBkaXZfczY0KChzNjQpb2Zmc2V0IDw8IE5UUF9TQ0FMRV9TSElGVCwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCWZyZXFfYWRqICAgICs9IG50cF91cGRhdGVfb2Zmc2V0X2ZsbChvZmZzZXQ2NCwgc2Vjcyk7CisKKwlmcmVxX2FkaiAgICA9IG1pbihmcmVxX2FkaiArIHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOworCisJdGltZV9mcmVxICAgPSBtYXgoZnJlcV9hZGosIC1NQVhGUkVRX1NDQUxFRCk7CisKKwl0aW1lX29mZnNldCA9IGRpdl9zNjQob2Zmc2V0NjQgPDwgTlRQX1NDQUxFX1NISUZULCBOVFBfSU5URVJWQUxfRlJFUSk7CiB9CiAKIC8qKgpAQCAtMTExLDE1ICsxNjgsMTUgQEAKICAqLwogdm9pZCBudHBfY2xlYXIodm9pZCkKIHsKLQl0aW1lX2FkanVzdCA9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KLQl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5DOwotCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7Ci0JdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2FkanVzdAk9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KKwl0aW1lX3N0YXR1cwl8PSBTVEFfVU5TWU5DOworCXRpbWVfbWF4ZXJyb3IJPSBOVFBfUEhBU0VfTElNSVQ7CisJdGltZV9lc3RlcnJvcgk9IE5UUF9QSEFTRV9MSU1JVDsKIAogCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAKLQl0aWNrX2xlbmd0aCA9IHRpY2tfbGVuZ3RoX2Jhc2U7Ci0JdGltZV9vZmZzZXQgPSAwOworCXRpY2tfbGVuZ3RoCT0gdGlja19sZW5ndGhfYmFzZTsKKwl0aW1lX29mZnNldAk9IDA7CiB9CiAKIC8qCkBAIC0xNDAsOCArMTk3LDggQEAKIAkJeHRpbWUudHZfc2VjLS07CiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYysrOwogCQl0aW1lX3N0YXRlID0gVElNRV9PT1A7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKLQkJICAgICAgICJpbnNlcnRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NjAgVVRDXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiQ2xvY2s6IGluc2VydGluZyBsZWFwIHNlY29uZCAyMzo1OTo2MCBVVENcbiIpOwogCQlocnRpbWVyX2FkZF9leHBpcmVzX25zKCZsZWFwX3RpbWVyLCBOU0VDX1BFUl9TRUMpOwogCQlyZXMgPSBIUlRJTUVSX1JFU1RBUlQ7CiAJCWJyZWFrOwpAQCAtMTUwLDggKzIwNyw4IEBACiAJCXRpbWVfdGFpLS07CiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYy0tOwogCQl0aW1lX3N0YXRlID0gVElNRV9XQUlUOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNsb2NrOiAiCi0JCSAgICAgICAiZGVsZXRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NTkgVVRDXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiQ2xvY2s6IGRlbGV0aW5nIGxlYXAgc2Vjb25kIDIzOjU5OjU5IFVUQ1xuIik7CiAJCWJyZWFrOwogCWNhc2UgVElNRV9PT1A6CiAJCXRpbWVfdGFpKys7CkBAIC0xNzksNyArMjM2LDcgQEAKICAqLwogdm9pZCBzZWNvbmRfb3ZlcmZsb3codm9pZCkKIHsKLQlzNjQgdGltZV9hZGo7CisJczY0IGRlbHRhOwogCiAJLyogQnVtcCB0aGUgbWF4ZXJyb3IgZmllbGQgKi8KIAl0aW1lX21heGVycm9yICs9IE1BWEZSRVEgLyBOU0VDX1BFUl9VU0VDOwpAQCAtMTkyLDI0ICsyNDksMzAgQEAKIAkgKiBDb21wdXRlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGZvciB0aGUgbmV4dCBzZWNvbmQuIFRoZSBvZmZzZXQgaXMKIAkgKiByZWR1Y2VkIGJ5IGEgZml4ZWQgZmFjdG9yIHRpbWVzIHRoZSB0aW1lIGNvbnN0YW50LgogCSAqLwotCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKLQl0aW1lX2FkaiA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKLQl0aW1lX29mZnNldCAtPSB0aW1lX2FkajsKLQl0aWNrX2xlbmd0aCArPSB0aW1lX2FkajsKKwl0aWNrX2xlbmd0aAkgPSB0aWNrX2xlbmd0aF9iYXNlOwogCi0JaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0KSkgewotCQlpZiAodGltZV9hZGp1c3QgPiBNQVhfVElDS0FESikgewotCQkJdGltZV9hZGp1c3QgLT0gTUFYX1RJQ0tBREo7Ci0JCQl0aWNrX2xlbmd0aCArPSBNQVhfVElDS0FESl9TQ0FMRUQ7Ci0JCX0gZWxzZSBpZiAodGltZV9hZGp1c3QgPCAtTUFYX1RJQ0tBREopIHsKLQkJCXRpbWVfYWRqdXN0ICs9IE1BWF9USUNLQURKOwotCQkJdGlja19sZW5ndGggLT0gTUFYX1RJQ0tBREpfU0NBTEVEOwotCQl9IGVsc2UgewotCQkJdGlja19sZW5ndGggKz0gKHM2NCkodGltZV9hZGp1c3QgKiBOU0VDX1BFUl9VU0VDIC8KLQkJCQkJTlRQX0lOVEVSVkFMX0ZSRVEpIDw8IE5UUF9TQ0FMRV9TSElGVDsKLQkJCXRpbWVfYWRqdXN0ID0gMDsKLQkJfQorCWRlbHRhCQkgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCwgU0hJRlRfUExMICsgdGltZV9jb25zdGFudCk7CisJdGltZV9vZmZzZXQJLT0gZGVsdGE7CisJdGlja19sZW5ndGgJKz0gZGVsdGE7CisKKwlpZiAoIXRpbWVfYWRqdXN0KQorCQlyZXR1cm47CisKKwlpZiAodGltZV9hZGp1c3QgPiBNQVhfVElDS0FESikgeworCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKKwkJdGlja19sZW5ndGggKz0gTUFYX1RJQ0tBREpfU0NBTEVEOworCQlyZXR1cm47CiAJfQorCisJaWYgKHRpbWVfYWRqdXN0IDwgLU1BWF9USUNLQURKKSB7CisJCXRpbWVfYWRqdXN0ICs9IE1BWF9USUNLQURKOworCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCXJldHVybjsKKwl9CisKKwl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLyBOVFBfSU5URVJWQUxfRlJFUSkKKwkJCQkJCQkgPDwgTlRQX1NDQUxFX1NISUZUOworCXRpbWVfYWRqdXN0ID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFCkBAIC0yMzMsMTIgKzI5NiwxMyBAQAogCSAqIFRoaXMgY29kZSBpcyBydW4gb24gYSB0aW1lci4gIElmIHRoZSBjbG9jayBpcyBzZXQsIHRoYXQgdGltZXIKIAkgKiBtYXkgbm90IGV4cGlyZSBhdCB0aGUgY29ycmVjdCB0aW1lLiAgVGh1cywgd2UgYWRqdXN0Li4uCiAJICovCi0JaWYgKCFudHBfc3luY2VkKCkpCisJaWYgKCFudHBfc3luY2VkKCkpIHsKIAkJLyoKIAkJICogTm90IHN5bmNlZCwgZXhpdCwgZG8gbm90IHJlc3RhcnQgYSB0aW1lciAoaWYgb25lIGlzCiAJCSAqIHJ1bm5pbmcsIGxldCBpdCBydW4gb3V0KS4KIAkJICovCiAJCXJldHVybjsKKwl9CiAKIAlnZXRuc3RpbWVvZmRheSgmbm93KTsKIAlpZiAoYWJzKG5vdy50dl9uc2VjIC0gKE5TRUNfUEVSX1NFQyAvIDIpKSA8PSB0aWNrX25zZWMgLyAyKQpAQCAtMjcwLDcgKzMzNCwxMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlfY21vc190aW1lcih2b2lkKSB7IH0KICNlbmRpZgogCi0vKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCisvKgorICogU3RhcnQgdGhlIGxlYXAgc2Vjb25kcyB0aW1lcjoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG50cF9zdGFydF9sZWFwX3RpbWVyKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJbG9uZyBub3cgPSB0cy0+dHZfc2VjOworCisJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0lOUykgeworCQl0aW1lX3N0YXRlID0gVElNRV9JTlM7CisJCW5vdyArPSA4NjQwMCAtIG5vdyAlIDg2NDAwOworCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQobm93LCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisKKwkJcmV0dXJuOworCX0KKworCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9ERUwpIHsKKwkJdGltZV9zdGF0ZSA9IFRJTUVfREVMOworCQlub3cgKz0gODY0MDAgLSAobm93ICsgMSkgJSA4NjQwMDsKKwkJaHJ0aW1lcl9zdGFydCgmbGVhcF90aW1lciwga3RpbWVfc2V0KG5vdywgMCksIEhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworLyoKKyAqIFByb3BhZ2F0ZSBhIG5ldyB0eGMtPnN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBOVFAgc3RhdGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2Fkal9zdGF0dXMoc3RydWN0IHRpbWV4ICp0eGMsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgeworCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKKwkJdGltZV9zdGF0dXMgPSBTVEFfVU5TWU5DOworCX0KKworCS8qCisJICogSWYgd2UgdHVybiBvbiBQTEwgYWRqdXN0bWVudHMgdGhlbiByZXNldCB0aGUKKwkgKiByZWZlcmVuY2UgdGltZSB0byBjdXJyZW50IHRpbWUuCisJICovCisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJiAodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkKKwkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCisJLyogb25seSBzZXQgYWxsb3dlZCBiaXRzICovCisJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOworCXRpbWVfc3RhdHVzIHw9IHR4Yy0+c3RhdHVzICYgflNUQV9ST05MWTsKKworCXN3aXRjaCAodGltZV9zdGF0ZSkgeworCWNhc2UgVElNRV9PSzoKKwkJbnRwX3N0YXJ0X2xlYXBfdGltZXIodHMpOworCQlicmVhazsKKwljYXNlIFRJTUVfSU5TOgorCWNhc2UgVElNRV9ERUw6CisJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQludHBfc3RhcnRfbGVhcF90aW1lcih0cyk7CisJY2FzZSBUSU1FX1dBSVQ6CisJCWlmICghKHRpbWVfc3RhdHVzICYgKFNUQV9JTlMgfCBTVEFfREVMKSkpCisJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKKwkJYnJlYWs7CisJY2FzZSBUSU1FX09PUDoKKwkJaHJ0aW1lcl9yZXN0YXJ0KCZsZWFwX3RpbWVyKTsKKwkJYnJlYWs7CisJfQorfQorLyoKKyAqIENhbGxlZCB3aXRoIHRoZSB4dGltZSBsb2NrIGhlbGQsIHNvIHdlIGNhbiBhY2Nlc3MgYW5kIG1vZGlmeQorICogYWxsIHRoZSBnbG9iYWwgTlRQIHN0YXRlOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19hZGp0aW1leF9tb2RlcyhzdHJ1Y3QgdGltZXggKnR4Yywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpCisJCXByb2Nlc3NfYWRqX3N0YXR1cyh0eGMsIHRzKTsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX05BTk8pCisJCXRpbWVfc3RhdHVzIHw9IFNUQV9OQU5POworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUlDUk8pCisJCXRpbWVfc3RhdHVzICY9IH5TVEFfTkFOTzsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgeworCQl0aW1lX2ZyZXEgPSB0eGMtPmZyZXEgKiBQUE1fU0NBTEU7CisJCXRpbWVfZnJlcSA9IG1pbih0aW1lX2ZyZXEsIE1BWEZSRVFfU0NBTEVEKTsKKwkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKKwl9CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9NQVhFUlJPUikKKwkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9FU1RFUlJPUikKKwkJdGltZV9lc3RlcnJvciA9IHR4Yy0+ZXN0ZXJyb3I7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9USU1FQ09OU1QpIHsKKwkJdGltZV9jb25zdGFudCA9IHR4Yy0+Y29uc3RhbnQ7CisJCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQorCQkJdGltZV9jb25zdGFudCArPSA0OworCQl0aW1lX2NvbnN0YW50ID0gbWluKHRpbWVfY29uc3RhbnQsIChsb25nKU1BWFRDKTsKKwkJdGltZV9jb25zdGFudCA9IG1heCh0aW1lX2NvbnN0YW50LCAwbCk7CisJfQorCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVEFJICYmIHR4Yy0+Y29uc3RhbnQgPiAwKQorCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCisJCW50cF91cGRhdGVfb2Zmc2V0KHR4Yy0+b2Zmc2V0KTsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCisJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKKworCWlmICh0eGMtPm1vZGVzICYgKEFESl9USUNLfEFESl9GUkVRVUVOQ1l8QURKX09GRlNFVCkpCisJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7Cit9CisKKy8qCisgKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCiAgKiBrZXJuZWwgdGltZS1rZWVwaW5nIHZhcmlhYmxlcy4gdXNlZCBieSB4bnRwZC4KICAqLwogaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqdHhjKQpAQCAtMjkxLDExICs0NjQsMTQgQEAKIAkJIGlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmchICovCisJCS8qCisJCSAqIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgdGhlbgorCQkgKiBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEKKwkJICovCiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0sgJiYKIAkJICAgICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKIAkJICAgICB0eGMtPnRpY2sgPiAxMTAwMDAwL1VTRVJfSFopKQotCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTICYmIHRpbWVfc3RhdGUgIT0gVElNRV9PSykKIAkJCWhydGltZXJfY2FuY2VsKCZsZWFwX3RpbWVyKTsKQEAgLTMwNSw3ICs0ODEsNiBAQAogCiAJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwogCi0JLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtICovCiAJaWYgKHR4Yy0+bW9kZXMgJiBBREpfQURKVElNRSkgewogCQlsb25nIHNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7CiAKQEAgLTMxNSw5OCArNDkwLDI0IEBACiAJCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwogCQl9CiAJCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7Ci0JCWdvdG8gYWRqX2RvbmU7Ci0JfQotCWlmICh0eGMtPm1vZGVzKSB7Ci0JCWxvbmcgc2VjOworCX0gZWxzZSB7CiAKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTKSB7Ci0JCQlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYKLQkJCSAgICAhKHR4Yy0+c3RhdHVzICYgU1RBX1BMTCkpIHsKLQkJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQkJCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7Ci0JCQl9Ci0JCQkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KLQkJCXRpbWVfc3RhdHVzICY9IFNUQV9ST05MWTsKLQkJCXRpbWVfc3RhdHVzIHw9IHR4Yy0+c3RhdHVzICYgflNUQV9ST05MWTsKKwkJLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtOiAqLworCQlpZiAodHhjLT5tb2RlcykKKwkJCXByb2Nlc3NfYWRqdGltZXhfbW9kZXModHhjLCAmdHMpOwogCi0JCQlzd2l0Y2ggKHRpbWVfc3RhdGUpIHsKLQkJCWNhc2UgVElNRV9PSzoKLQkJCXN0YXJ0X3RpbWVyOgotCQkJCXNlYyA9IHRzLnR2X3NlYzsKLQkJCQlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKSB7Ci0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKLQkJCQkJc2VjICs9IDg2NDAwIC0gc2VjICUgODY0MDA7Ci0JCQkJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChzZWMsIDApLCBIUlRJTUVSX01PREVfQUJTKTsKLQkJCQl9IGVsc2UgaWYgKHRpbWVfc3RhdHVzICYgU1RBX0RFTCkgewotCQkJCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7Ci0JCQkJCXNlYyArPSA4NjQwMCAtIChzZWMgKyAxKSAlIDg2NDAwOwotCQkJCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQoc2VjLCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX0lOUzoKLQkJCWNhc2UgVElNRV9ERUw6Ci0JCQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7Ci0JCQkJZ290byBzdGFydF90aW1lcjsKLQkJCQlicmVhazsKLQkJCWNhc2UgVElNRV9XQUlUOgotCQkJCWlmICghKHRpbWVfc3RhdHVzICYgKFNUQV9JTlMgfCBTVEFfREVMKSkpCi0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX09PUDoKLQkJCQlocnRpbWVyX3Jlc3RhcnQoJmxlYXBfdGltZXIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTkFOTykKLQkJCXRpbWVfc3RhdHVzIHw9IFNUQV9OQU5POwotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9NSUNSTykKLQkJCXRpbWVfc3RhdHVzICY9IH5TVEFfTkFOTzsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9GUkVRVUVOQ1kpIHsKLQkJCXRpbWVfZnJlcSA9IChzNjQpdHhjLT5mcmVxICogUFBNX1NDQUxFOwotCQkJdGltZV9mcmVxID0gbWluKHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOwotCQkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKLQkJfQotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQotCQkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX0VTVEVSUk9SKQotCQkJdGltZV9lc3RlcnJvciA9IHR4Yy0+ZXN0ZXJyb3I7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElNRUNPTlNUKSB7Ci0JCQl0aW1lX2NvbnN0YW50ID0gdHhjLT5jb25zdGFudDsKLQkJCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQkJCXRpbWVfY29uc3RhbnQgKz0gNDsKLQkJCXRpbWVfY29uc3RhbnQgPSBtaW4odGltZV9jb25zdGFudCwgKGxvbmcpTUFYVEMpOwotCQkJdGltZV9jb25zdGFudCA9IG1heCh0aW1lX2NvbnN0YW50LCAwbCk7Ci0JCX0KLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCi0JCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKQotCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKQotCQkJdGlja191c2VjID0gdHhjLT50aWNrOwotCi0JCWlmICh0eGMtPm1vZGVzICYgKEFESl9USUNLfEFESl9GUkVRVUVOQ1l8QURKX09GRlNFVCkpCi0JCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwotCX0KLQotCXR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQgKiBOVFBfSU5URVJWQUxfRlJFUSwKKwkJdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAogCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKLQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKLQkJdHhjLT5vZmZzZXQgLz0gTlNFQ19QRVJfVVNFQzsKKwkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCX0KIAotYWRqX2RvbmU6CiAJcmVzdWx0ID0gdGltZV9zdGF0ZTsJLyogbW9zdGx5IGBUSU1FX09LJyAqLwogCWlmICh0aW1lX3N0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUikpCiAJCXJlc3VsdCA9IFRJTUVfRVJST1I7CiAKIAl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgodGltZV9mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKLQkJCQkJIChzNjQpUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKKwkJCQkJIFBQTV9TQ0FMRV9JTlYsIE5UUF9TQ0FMRV9TSElGVCk7CiAJdHhjLT5tYXhlcnJvcgkgICA9IHRpbWVfbWF4ZXJyb3I7CiAJdHhjLT5lc3RlcnJvcgkgICA9IHRpbWVfZXN0ZXJyb3I7CiAJdHhjLT5zdGF0dXMJICAgPSB0aW1lX3N0YXR1czsKQEAgLTQyNSw2ICs1MjYsNyBAQAogCXR4Yy0+Y2FsY250CSAgID0gMDsKIAl0eGMtPmVycmNudAkgICA9IDA7CiAJdHhjLT5zdGJjbnQJICAgPSAwOworCiAJd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKIAl0eGMtPnRpbWUudHZfc2VjID0gdHMudHZfc2VjOwpAQCAtNDQwLDYgKzU0Miw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBudHBfdGlja19hZGpfc2V0dXAoY2hhciAqc3RyKQogewogCW50cF90aWNrX2FkaiA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKKwludHBfdGlja19hZGogPDw9IE5UUF9TQ0FMRV9TSElGVDsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU3ZjFhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aW1lY29tcGFyZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorCisvKgorICogZml4ZWQgcG9pbnQgYXJpdGhtZXRpYyBzY2FsZSBmYWN0b3IgZm9yIHNrZXcKKyAqCisgKiBVc3VhbGx5IG9uZSB3b3VsZCBtZWFzdXJlIHNrZXcgaW4gcHBiIChwYXJ0cyBwZXIgYmlsbGlvbiwgMWU5KSwgYnV0CisgKiB1c2luZyBhIGZhY3RvciBvZiAyIHNpbXBsaWZpZXMgdGhlIG1hdGguCisgKi8KKyNkZWZpbmUgVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OICgoKHM2NCkxKTw8MzApCisKK2t0aW1lX3QgdGltZWNvbXBhcmVfdHJhbnNmb3JtKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgICAgIHU2NCBzb3VyY2VfdHN0YW1wKQoreworCXU2NCBuc2VjOworCisJbnNlYyA9IHNvdXJjZV90c3RhbXAgKyBzeW5jLT5vZmZzZXQ7CisJbnNlYyArPSAoczY0KShzb3VyY2VfdHN0YW1wIC0gc3luYy0+bGFzdF91cGRhdGUpICogc3luYy0+c2tldyAvCisJCVRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTjsKKworCXJldHVybiBuc190b19rdGltZShuc2VjKTsKK30KK0VYUE9SVF9TWU1CT0wodGltZWNvbXBhcmVfdHJhbnNmb3JtKTsKKworaW50IHRpbWVjb21wYXJlX29mZnNldChzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCSAgICAgICBzNjQgKm9mZnNldCwKKwkJICAgICAgIHU2NCAqc291cmNlX3RzdGFtcCkKK3sKKwl1NjQgc3RhcnRfc291cmNlID0gMCwgZW5kX3NvdXJjZSA9IDA7CisJc3RydWN0IHsKKwkJczY0IG9mZnNldDsKKwkJczY0IGR1cmF0aW9uX3RhcmdldDsKKwl9IGJ1ZmZlclsxMF0sIHNhbXBsZSwgKnNhbXBsZXM7CisJaW50IGNvdW50ZXIgPSAwLCBpOworCWludCB1c2VkOworCWludCBpbmRleDsKKwlpbnQgbnVtX3NhbXBsZXMgPSBzeW5jLT5udW1fc2FtcGxlczsKKworCWlmIChudW1fc2FtcGxlcyA+IHNpemVvZihidWZmZXIpL3NpemVvZihidWZmZXJbMF0pKSB7CisJCXNhbXBsZXMgPSBrbWFsbG9jKHNpemVvZigqc2FtcGxlcykgKiBudW1fc2FtcGxlcywgR0ZQX0FUT01JQyk7CisJCWlmICghc2FtcGxlcykgeworCQkJc2FtcGxlcyA9IGJ1ZmZlcjsKKwkJCW51bV9zYW1wbGVzID0gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSk7CisJCX0KKwl9IGVsc2UgeworCQlzYW1wbGVzID0gYnVmZmVyOworCX0KKworCS8qIHJ1biB1bnRpbCB3ZSBoYXZlIGVub3VnaCB2YWxpZCBzYW1wbGVzLCBidXQgZG8gbm90IHRyeSBmb3JldmVyICovCisJaSA9IDA7CisJY291bnRlciA9IDA7CisJd2hpbGUgKDEpIHsKKwkJdTY0IHRzOworCQlrdGltZV90IHN0YXJ0LCBlbmQ7CisKKwkJc3RhcnQgPSBzeW5jLT50YXJnZXQoKTsKKwkJdHMgPSB0aW1lY291bnRlcl9yZWFkKHN5bmMtPnNvdXJjZSk7CisJCWVuZCA9IHN5bmMtPnRhcmdldCgpOworCisJCWlmICghaSkKKwkJCXN0YXJ0X3NvdXJjZSA9IHRzOworCisJCS8qIGlnbm9yZSBuZWdhdGl2ZSBkdXJhdGlvbnMgKi8KKwkJc2FtcGxlLmR1cmF0aW9uX3RhcmdldCA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihlbmQsIHN0YXJ0KSk7CisJCWlmIChzYW1wbGUuZHVyYXRpb25fdGFyZ2V0ID49IDApIHsKKwkJCS8qCisJCQkgKiBhc3N1bWUgc3ltZXRyaWMgZGVsYXkgdG8gYW5kIGZyb20gc291cmNlOgorCQkJICogYXZlcmFnZSB0YXJnZXQgdGltZSBjb3JyZXNwb25kcyB0byBtZWFzdXJlZAorCQkJICogc291cmNlIHRpbWUKKwkJCSAqLworCQkJc2FtcGxlLm9mZnNldCA9CisJCQkJa3RpbWVfdG9fbnMoa3RpbWVfYWRkKGVuZCwgc3RhcnQpKSAvIDIgLQorCQkJCXRzOworCisJCQkvKiBzaW1wbGUgaW5zZXJ0aW9uIHNvcnQgYmFzZWQgb24gZHVyYXRpb24gKi8KKwkJCWluZGV4ID0gY291bnRlciAtIDE7CisJCQl3aGlsZSAoaW5kZXggPj0gMCkgeworCQkJCWlmIChzYW1wbGVzW2luZGV4XS5kdXJhdGlvbl90YXJnZXQgPAorCQkJCSAgICBzYW1wbGUuZHVyYXRpb25fdGFyZ2V0KQorCQkJCQlicmVhazsKKwkJCQlzYW1wbGVzW2luZGV4ICsgMV0gPSBzYW1wbGVzW2luZGV4XTsKKwkJCQlpbmRleC0tOworCQkJfQorCQkJc2FtcGxlc1tpbmRleCArIDFdID0gc2FtcGxlOworCQkJY291bnRlcisrOworCQl9CisKKwkJaSsrOworCQlpZiAoY291bnRlciA+PSBudW1fc2FtcGxlcyB8fCBpID49IDEwMDAwMCkgeworCQkJZW5kX3NvdXJjZSA9IHRzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkqc291cmNlX3RzdGFtcCA9IChlbmRfc291cmNlICsgc3RhcnRfc291cmNlKSAvIDI7CisKKwkvKiByZW1vdmUgb3V0bGllcnMgYnkgb25seSB1c2luZyA3NSUgb2YgdGhlIHNhbXBsZXMgKi8KKwl1c2VkID0gY291bnRlciAqIDMgLyA0OworCWlmICghdXNlZCkKKwkJdXNlZCA9IGNvdW50ZXI7CisJaWYgKHVzZWQpIHsKKwkJLyogY2FsY3VsYXRlIGF2ZXJhZ2UgKi8KKwkJczY0IG9mZiA9IDA7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVzZWQ7IGluZGV4KyspCisJCQlvZmYgKz0gc2FtcGxlc1tpbmRleF0ub2Zmc2V0OworCQkqb2Zmc2V0ID0gZGl2X3M2NChvZmYsIHVzZWQpOworCX0KKworCWlmIChzYW1wbGVzICYmIHNhbXBsZXMgIT0gYnVmZmVyKQorCQlrZnJlZShzYW1wbGVzKTsKKworCXJldHVybiB1c2VkOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY29tcGFyZV9vZmZzZXQpOworCit2b2lkIF9fdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgdTY0IHNvdXJjZV90c3RhbXApCit7CisJczY0IG9mZnNldDsKKwl1NjQgYXZlcmFnZV90aW1lOworCisJaWYgKCF0aW1lY29tcGFyZV9vZmZzZXQoc3luYywgJm9mZnNldCwgJmF2ZXJhZ2VfdGltZSkpCisJCXJldHVybjsKKworCWlmICghc3luYy0+bGFzdF91cGRhdGUpIHsKKwkJc3luYy0+bGFzdF91cGRhdGUgPSBhdmVyYWdlX3RpbWU7CisJCXN5bmMtPm9mZnNldCA9IG9mZnNldDsKKwkJc3luYy0+c2tldyA9IDA7CisJfSBlbHNlIHsKKwkJczY0IGRlbHRhX25zZWMgPSBhdmVyYWdlX3RpbWUgLSBzeW5jLT5sYXN0X3VwZGF0ZTsKKworCQkvKiBhdm9pZCBkaXZpc2lvbiBieSBuZWdhdGl2ZSBvciBzbWFsbCBkZWx0YXMgKi8KKwkJaWYgKGRlbHRhX25zZWMgPj0gMTAwMDApIHsKKwkJCXM2NCBkZWx0YV9vZmZzZXRfbnNlYyA9IG9mZnNldCAtIHN5bmMtPm9mZnNldDsKKwkJCXM2NCBza2V3OyAvKiBkZWx0YV9vZmZzZXRfbnNlYyAqCisJCQkJICAgICBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04gLworCQkJCSAgICAgZGVsdGFfbnNlYyAqLworCQkJdTY0IGRpdmlzb3I7CisKKwkJCS8qIGRpdl9zNjQoKSBpcyBsaW1pdGVkIHRvIDMyIGJpdCBkaXZpc29yICovCisJCQlza2V3ID0gZGVsdGFfb2Zmc2V0X25zZWMgKiBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT047CisJCQlkaXZpc29yID0gZGVsdGFfbnNlYzsKKwkJCXdoaWxlICh1bmxpa2VseShkaXZpc29yID49ICgoczY0KTEpIDw8IDMyKSkgeworCQkJCS8qIGRpdmlkZSBib3RoIGJ5IDI7IGJld2FyZSwgcmlnaHQgc2hpZnQKKwkJCQkgICBvZiBuZWdhdGl2ZSB2YWx1ZSBoYXMgdW5kZWZpbmVkCisJCQkJICAgYmVoYXZpb3IgYW5kIGNhbiBvbmx5IGJlIHVzZWQgZm9yCisJCQkJICAgdGhlIHBvc2l0aXZlIGRpdmlzb3IgKi8KKwkJCQlza2V3ID0gZGl2X3M2NChza2V3LCAyKTsKKwkJCQlkaXZpc29yID4+PSAxOworCQkJfQorCQkJc2tldyA9IGRpdl9zNjQoc2tldywgZGl2aXNvcik7CisKKwkJCS8qCisJCQkgKiBDYWxjdWxhdGUgbmV3IG92ZXJhbGwgc2tldyBhcyA0LzE2IHRoZQorCQkJICogb2xkIHZhbHVlIGFuZCAxMi8xNiB0aGUgbmV3IG9uZS4gVGhpcyBpcworCQkJICogYSByYXRoZXIgYXJiaXRyYXJ5IHRyYWRlb2ZmIGJldHdlZW4KKwkJCSAqIG9ubHkgdXNpbmcgdGhlIGxhdGVzdCBtZWFzdXJlbWVudCAoMC8xNiBhbmQKKwkJCSAqIDE2LzE2KSBhbmQgZXZlbiBtb3JlIHdlaWdodCBvbiBwYXN0IG1lYXN1cmVtZW50cy4KKwkJCSAqLworI2RlZmluZSBUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYgMTIKKwkJCXN5bmMtPnNrZXcgPQorCQkJCWRpdl9zNjQoKDE2IC0gVElNRUNPTVBBUkVfTkVXX1NLRVdfUEVSXzE2KSAqCisJCQkJCXN5bmMtPnNrZXcgKworCQkJCQlUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYgKiBza2V3LAorCQkJCQkxNik7CisJCQlzeW5jLT5sYXN0X3VwZGF0ZSA9IGF2ZXJhZ2VfdGltZTsKKwkJCXN5bmMtPm9mZnNldCA9IG9mZnNldDsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woX190aW1lY29tcGFyZV91cGRhdGUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCAxM2RkNjRmLi45Yjc3ZmM5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNTg5LDExICs1ODksMTQgQEAKIAl9CiB9CiAKLWludCBfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3N0YXRpYyBpbmxpbmUgaW50CitfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcywgYm9vbCBwZW5kaW5nX29ubHkpCiB7CiAJc3RydWN0IHR2ZWNfYmFzZSAqYmFzZSwgKm5ld19iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKKworCXJldCA9IDA7CiAKIAl0aW1lcl9zdGF0c190aW1lcl9zZXRfc3RhcnRfaW5mbyh0aW1lcik7CiAJQlVHX09OKCF0aW1lci0+ZnVuY3Rpb24pOwpAQCAtNjAzLDYgKzYwNiw5IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcodGltZXIpKSB7CiAJCWRldGFjaF90aW1lcih0aW1lciwgMCk7CiAJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKHBlbmRpbmdfb25seSkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlkZWJ1Z190aW1lcl9hY3RpdmF0ZSh0aW1lcik7CkBAIC02MjksMTIgKzYzNSw4MyBAQAogCiAJdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOwogCWludGVybmFsX2FkZF90aW1lcihiYXNlLCB0aW1lcik7CisKK291dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTChfX21vZF90aW1lcik7CisvKioKKyAqIG1vZF90aW1lcl9wZW5kaW5nIC0gbW9kaWZ5IGEgcGVuZGluZyB0aW1lcidzIHRpbWVvdXQKKyAqIEB0aW1lcjogdGhlIHBlbmRpbmcgdGltZXIgdG8gYmUgbW9kaWZpZWQKKyAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCisgKgorICogbW9kX3RpbWVyX3BlbmRpbmcoKSBpcyB0aGUgc2FtZSBmb3IgcGVuZGluZyB0aW1lcnMgYXMgbW9kX3RpbWVyKCksCisgKiBidXQgd2lsbCBub3QgcmUtYWN0aXZhdGUgYW5kIG1vZGlmeSBhbHJlYWR5IGRlbGV0ZWQgdGltZXJzLgorICoKKyAqIEl0IGlzIHVzZWZ1bCBmb3IgdW5zZXJpYWxpemVkIHVzZSBvZiB0aW1lcnMuCisgKi8KK2ludCBtb2RfdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3sKKwlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChtb2RfdGltZXJfcGVuZGluZyk7CisKKy8qKgorICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0CisgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZAorICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKKyAqCisgKiBtb2RfdGltZXIoKSBpcyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byB1cGRhdGUgdGhlIGV4cGlyZSBmaWVsZCBvZiBhbgorICogYWN0aXZlIHRpbWVyIChpZiB0aGUgdGltZXIgaXMgaW5hY3RpdmUgaXQgd2lsbCBiZSBhY3RpdmF0ZWQpCisgKgorICogbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKSBpcyBlcXVpdmFsZW50IHRvOgorICoKKyAqICAgICBkZWxfdGltZXIodGltZXIpOyB0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7IGFkZF90aW1lcih0aW1lcik7CisgKgorICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB1bnNlcmlhbGl6ZWQgY29uY3VycmVudCB1c2VycyBvZiB0aGUKKyAqIHNhbWUgdGltZXIsIHRoZW4gbW9kX3RpbWVyKCkgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0LAorICogc2luY2UgYWRkX3RpbWVyKCkgY2Fubm90IG1vZGlmeSBhbiBhbHJlYWR5IHJ1bm5pbmcgdGltZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciBpdCBoYXMgbW9kaWZpZWQgYSBwZW5kaW5nIHRpbWVyIG9yIG5vdC4KKyAqIChpZS4gbW9kX3RpbWVyKCkgb2YgYW4gaW5hY3RpdmUgdGltZXIgcmV0dXJucyAwLCBtb2RfdGltZXIoKSBvZiBhbgorICogYWN0aXZlIHRpbWVyIHJldHVybnMgMS4pCisgKi8KK2ludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCit7CisJLyoKKwkgKiBUaGlzIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbiB0cmlnZ2VyZWQgYnkgdGhlCisJICogbmV0d29ya2luZyBjb2RlIC0gaWYgdGhlIHRpbWVyIGlzIHJlLW1vZGlmaWVkCisJICogdG8gYmUgdGhlIHNhbWUgdGhpbmcgdGhlbiBqdXN0IHJldHVybjoKKwkgKi8KKwlpZiAodGltZXItPmV4cGlyZXMgPT0gZXhwaXJlcyAmJiB0aW1lcl9wZW5kaW5nKHRpbWVyKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIGZhbHNlKTsKK30KK0VYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKKworLyoqCisgKiBhZGRfdGltZXIgLSBzdGFydCBhIHRpbWVyCisgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBhZGRlZAorICoKKyAqIFRoZSBrZXJuZWwgd2lsbCBkbyBhIC0+ZnVuY3Rpb24oLT5kYXRhKSBjYWxsYmFjayBmcm9tIHRoZQorICogdGltZXIgaW50ZXJydXB0IGF0IHRoZSAtPmV4cGlyZXMgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhlCisgKiBjdXJyZW50IHRpbWUgaXMgJ2ppZmZpZXMnLgorICoKKyAqIFRoZSB0aW1lcidzIC0+ZXhwaXJlcywgLT5mdW5jdGlvbiAoYW5kIGlmIHRoZSBoYW5kbGVyIHVzZXMgaXQsIC0+ZGF0YSkKKyAqIGZpZWxkcyBtdXN0IGJlIHNldCBwcmlvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGltZXJzIHdpdGggYW4gLT5leHBpcmVzIGZpZWxkIGluIHRoZSBwYXN0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG5leHQKKyAqIHRpbWVyIHRpY2suCisgKi8KK3ZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sKKwlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOworCW1vZF90aW1lcih0aW1lciwgdGltZXItPmV4cGlyZXMpOworfQorRVhQT1JUX1NZTUJPTChhZGRfdGltZXIpOwogCiAvKioKICAqIGFkZF90aW1lcl9vbiAtIHN0YXJ0IGEgdGltZXIgb24gYSBwYXJ0aWN1bGFyIENQVQpAQCAtNjY3LDQ0ICs3NDQsNiBAQAogfQogCiAvKioKLSAqIG1vZF90aW1lciAtIG1vZGlmeSBhIHRpbWVyJ3MgdGltZW91dAotICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgbW9kaWZpZWQKLSAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCi0gKgotICogbW9kX3RpbWVyKCkgaXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gdXBkYXRlIHRoZSBleHBpcmUgZmllbGQgb2YgYW4KLSAqIGFjdGl2ZSB0aW1lciAoaWYgdGhlIHRpbWVyIGlzIGluYWN0aXZlIGl0IHdpbGwgYmUgYWN0aXZhdGVkKQotICoKLSAqIG1vZF90aW1lcih0aW1lciwgZXhwaXJlcykgaXMgZXF1aXZhbGVudCB0bzoKLSAqCi0gKiAgICAgZGVsX3RpbWVyKHRpbWVyKTsgdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOyBhZGRfdGltZXIodGltZXIpOwotICoKLSAqIE5vdGUgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdW5zZXJpYWxpemVkIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlCi0gKiBzYW1lIHRpbWVyLCB0aGVuIG1vZF90aW1lcigpIGlzIHRoZSBvbmx5IHNhZmUgd2F5IHRvIG1vZGlmeSB0aGUgdGltZW91dCwKLSAqIHNpbmNlIGFkZF90aW1lcigpIGNhbm5vdCBtb2RpZnkgYW4gYWxyZWFkeSBydW5uaW5nIHRpbWVyLgotICoKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgaXQgaGFzIG1vZGlmaWVkIGEgcGVuZGluZyB0aW1lciBvciBub3QuCi0gKiAoaWUuIG1vZF90aW1lcigpIG9mIGFuIGluYWN0aXZlIHRpbWVyIHJldHVybnMgMCwgbW9kX3RpbWVyKCkgb2YgYW4KLSAqIGFjdGl2ZSB0aW1lciByZXR1cm5zIDEuKQotICovCi1pbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQotewotCUJVR19PTighdGltZXItPmZ1bmN0aW9uKTsKLQotCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKLQkvKgotCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKLQkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKLQkgKiB0byBiZSB0aGUgc2FtZSB0aGluZyB0aGVuIGp1c3QgcmV0dXJuOgotCSAqLwotCWlmICh0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzICYmIHRpbWVyX3BlbmRpbmcodGltZXIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKLQotLyoqCiAgKiBkZWxfdGltZXIgLSBkZWFjdGl2ZSBhIHRpbWVyLgogICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgZGVhY3RpdmF0ZWQKICAqCkBAIC03MzMsNyArNzcyLDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVsX3RpbWVyKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTc2Nyw3ICs4MDUsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTCh0cnlfdG9fZGVsX3RpbWVyX3N5bmMpOwogCiAvKioKQEAgLTc5Niw3ICs4MzMsNiBAQAogCQljcHVfcmVsYXgoKTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVsX3RpbWVyX3N5bmMpOwogI2VuZGlmCiAKQEAgLTEyNjgsNyArMTMwNCw3IEBACiAJZXhwaXJlID0gdGltZW91dCArIGppZmZpZXM7CiAKIAlzZXR1cF90aW1lcl9vbl9zdGFjaygmdGltZXIsIHByb2Nlc3NfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7Ci0JX19tb2RfdGltZXIoJnRpbWVyLCBleHBpcmUpOworCV9fbW9kX3RpbWVyKCZ0aW1lciwgZXhwaXJlLCBmYWxzZSk7CiAJc2NoZWR1bGUoKTsKIAlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZ0aW1lcik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IGZiYjMwMGUuLjg1MGUwYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMjAsNyArMjAsNyBAQAogCiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zID0gewogCS5rcmVmID0gewotCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgxKSwKKwkJLnJlZmNvdW50CT0gQVRPTUlDX0lOSVQoMiksCiAJfSwKIAkuY3JlYXRvciA9ICZyb290X3VzZXIsCiB9OwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAwM2MyYzI0Li4yYTljNjlmIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtOTgsNiArOTgsMjAgQEAKIAl0cmlzdGF0ZQogCiAjCisjIFRoZXNlIGFsbCBwcm92aWRlIGEgY29tbW9uIGludGVyZmFjZSAoaGVuY2UgdGhlIGFwcGFyZW50IGR1cGxpY2F0aW9uIHdpdGgKKyMgWkxJQl9JTkZMQVRFOyBERUNPTVBSRVNTX0daSVAgaXMganVzdCBhIHdyYXBwZXIuKQorIworY29uZmlnIERFQ09NUFJFU1NfR1pJUAorCXNlbGVjdCBaTElCX0lORkxBVEUKKwl0cmlzdGF0ZQorCitjb25maWcgREVDT01QUkVTU19CWklQMgorCXRyaXN0YXRlCisKK2NvbmZpZyBERUNPTVBSRVNTX0xaTUEKKwl0cmlzdGF0ZQorCisjCiAjIEdlbmVyaWMgYWxsb2NhdG9yIHN1cHBvcnQgaXMgc2VsZWN0ZWQgaWYgbmVlZGVkCiAjCiBjb25maWcgR0VORVJJQ19BTExPQ0FUT1IKQEAgLTEzNiwxMiArMTUwLDYgQEAKIGNvbmZpZyBURVhUU0VBUkNIX0ZTTQogCXRyaXN0YXRlCiAKLSMKLSMgcGxpc3Qgc3VwcG9ydCBpcyBzZWxlY3QjZWQgaWYgbmVlZGVkCi0jCi1jb25maWcgUExJU1QKLQlib29sZWFuCi0KIGNvbmZpZyBIQVNfSU9NRU0KIAlib29sZWFuCiAJZGVwZW5kcyBvbiAhTk9fSU9NRU0KQEAgLTE3NCw0ICsxODIsMTAgQEAKICAgICAgICBib29sICJEaXNhYmxlIG9ic29sZXRlIGNwdW1hc2sgZnVuY3Rpb25zIiBpZiBERUJVR19QRVJfQ1BVX01BUFMKICAgICAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBCUk9LRU4KIAorIworIyBOZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nIHN1cHBvcnQgaXMgc2VsZWN0J2VkIGlmIG5lZWRlZAorIworY29uZmlnIE5MQVRUUgorCWJvb2wKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAxYmNmOWNkLi44ZmVlMGExIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtODQ3LDYwICs4NDcsNzAgQEAKIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKLWNvbmZpZyBEWU5BTUlDX1BSSU5US19ERUJVRwotCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIGNhbGwgc3VwcG9ydCIKK2NvbmZpZyBEWU5BTUlDX0RFQlVHCisJYm9vbCAiRW5hYmxlIGR5bmFtaWMgcHJpbnRrKCkgc3VwcG9ydCIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIFBSSU5USworCWRlcGVuZHMgb24gREVCVUdfRlMKIAlzZWxlY3QgUFJJTlRLX0RFQlVHCiAJaGVscAogCiAJICBDb21waWxlcyBkZWJ1ZyBsZXZlbCBtZXNzYWdlcyBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIHdvdWxkIG5vdAogCSAgb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGVzZSBtZXNzYWdlcyBjYW4gdGhlbiBiZQotCSAgZW5hYmxlZC9kaXNhYmxlZCBvbiBhIHBlciBtb2R1bGUgYmFzaXMuIFRoaXMgbWVjaGFuaXNtIGltcGxpY2l0bHkKLQkgIGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZiB0aGlzCi0JICBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgorCSAgZW5hYmxlZC9kaXNhYmxlZCBiYXNlZCBvbiB2YXJpb3VzIGxldmVscyBvZiBzY29wZSAtIHBlciBzb3VyY2UgZmlsZSwKKwkgIGZ1bmN0aW9uLCBtb2R1bGUsIGZvcm1hdCBzdHJpbmcsIGFuZCBsaW5lIG51bWJlci4gVGhpcyBtZWNoYW5pc20KKwkgIGltcGxpY2l0bHkgZW5hYmxlcyBhbGwgcHJfZGVidWcoKSBhbmQgZGV2X2RiZygpIGNhbGxzLiBUaGUgaW1wYWN0IG9mCisJICB0aGlzIGNvbXBpbGUgb3B0aW9uIGlzIGEgbGFyZ2VyIGtlcm5lbCB0ZXh0IHNpemUgb2YgYWJvdXQgMiUuCiAKIAkgIFVzYWdlOgogCi0JICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBkZWJ1Z2ZzIGZpbGUsCi0JICBkeW5hbWljX3ByaW50ay9tb2R1bGVzLiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBtb2R1bGVzIHRoYXQKLQkgIGNhbiBiZSBlbmFibGVkLiBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGlzIHRoZSBtb2R1bGUgbmFtZSwgZm9sbG93ZWQKLQkgIGJ5IGEgc2V0IG9mIGZsYWdzIHRoYXQgY2FuIGJlIGVuYWJsZWQuIFRoZSBmaXJzdCBmbGFnIGlzIGFsd2F5cyB0aGUKLQkgICdlbmFibGVkJyBmbGFnLiBGb3IgZXhhbXBsZToKKwkgIER5bmFtaWMgZGVidWdnaW5nIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSAnZHluYW1pY19kZWJ1Zy9kZGVidWcnIGZpbGUsCisJICB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlICdkZWJ1Z2ZzJyBmaWxlc3lzdGVtLiBUaHVzLCB0aGUgZGVidWdmcworCSAgZmlsZXN5c3RlbSBtdXN0IGZpcnN0IGJlIG1vdW50ZWQgYmVmb3JlIG1ha2luZyB1c2Ugb2YgdGhpcyBmZWF0dXJlLgorCSAgV2UgcmVmZXIgdGhlIGNvbnRyb2wgZmlsZSBhczogPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnLiBUaGlzCisJICBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgZGVidWcgc3RhdGVtZW50cyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUKKwkgIGZvcm1hdCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBmaWxlIGlzOgogCi0JCTxtb2R1bGVfbmFtZT4gPGVuYWJsZWQ9MC8xPgotCQkJCS4KLQkJCQkuCi0JCQkJLgorCQlmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKIAotCSAgPG1vZHVsZV9uYW1lPiA6IE5hbWUgb2YgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZGVidWcgY2FsbCByZXNpZGVzCi0JICA8ZW5hYmxlZD0wLzE+IDogd2hldGhlciB0aGUgbWVzc2FnZXMgYXJlIGVuYWJsZWQgb3Igbm90CisJICBmaWxlbmFtZSA6IHNvdXJjZSBmaWxlIG9mIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKwkgIGxpbmVubyA6IGxpbmUgbnVtYmVyIG9mIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKwkgIG1vZHVsZSA6IG1vZHVsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQKKwkgIGZ1bmN0aW9uIDogZnVuY3Rpb24gdGhhdCBjb250YWlucyB0aGUgZGVidWcgc3RhdGVtZW50CisgICAgICAgICAgZmxhZ3MgOiAncCcgbWVhbnMgdGhlIGxpbmUgaXMgdHVybmVkICdvbicgZm9yIHByaW50aW5nCisgICAgICAgICAgZm9ybWF0IDogdGhlIGZvcm1hdCB1c2VkIGZvciB0aGUgZGVidWcgc3RhdGVtZW50CiAKIAkgIEZyb20gYSBsaXZlIHN5c3RlbToKIAotCQlzbmRfaGRhX2ludGVsIGVuYWJsZWQ9MAotCQlmaXh1cCBlbmFibGVkPTAKLQkJZHJpdmVyIGVuYWJsZWQ9MAorCQludWxsYXJib3I6fiAjIGNhdCA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKKwkJIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKwkJZnMvYWlvLmM6MjIyIFthaW9dX19wdXRfaW9jdHggLSAiX19wdXRfaW9jdHg6XDA0MGZyZWVpbmdcMDQwJXBcMDEyIgorCQlmcy9haW8uYzoyNDggW2Fpb11pb2N0eF9hbGxvYyAtICJFTk9NRU06XDA0MG5yX2V2ZW50c1wwNDB0b29cMDQwaGlnaFwwMTIiCisJCWZzL2Fpby5jOjE3NzAgW2Fpb11zeXNfaW9fY2FuY2VsIC0gImNhbGxpbmdcMDQwY2FuY2VsXDAxMiIKIAotCSAgRW5hYmxlIGEgbW9kdWxlOgorCSAgRXhhbXBsZSB1c2FnZToKIAotCSAgCSRlY2hvICJzZXQgZW5hYmxlZD0xIDxtb2R1bGVfbmFtZT4iID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCQkvLyBlbmFibGUgdGhlIG1lc3NhZ2UgYXQgbGluZSAxNjAzIG9mIGZpbGUgc3Zjc29jay5jCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRGlzYWJsZSBhIG1vZHVsZToKKwkJLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gZmlsZSBzdmNzb2NrLmMKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MCA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gdGhlIE5GUyBzZXJ2ZXIgbW9kdWxlCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnbW9kdWxlIG5mc2QgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICBFbmFibGUgYWxsIG1vZHVsZXM6CisJCS8vIGVuYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCQkkZWNobyAic2V0IGVuYWJsZWQ9MSBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCQkvLyBkaXNhYmxlIGFsbCAxMiBtZXNzYWdlcyBpbiB0aGUgZnVuY3Rpb24gc3ZjX3Byb2Nlc3MoKQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgLXAnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICBEaXNhYmxlIGFsbCBtb2R1bGVzOgotCi0JCSRlY2hvICJzZXQgZW5hYmxlZD0wIGFsbCIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCi0KLQkgIEZpbmFsbHksIHBhc3NpbmcgImR5bmFtaWNfcHJpbnRrIiBhdCB0aGUgY29tbWFuZCBsaW5lIGVuYWJsZXMKLQkgIGRlYnVnZ2luZyBmb3IgYWxsIG1vZHVsZXMuIFRoaXMgbW9kZSBjYW4gYmUgdHVybmVkIG9mZiB2aWEgdGhlIGFib3ZlCi0JICBkaXNhYmxlIGNvbW1hbmQuCisJICBTZWUgRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KIAogc291cmNlICJzYW1wbGVzL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCAzMmIwZTY0Li4wNTFhMzNhIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw4IEBACiAJIHJidHJlZS5vIHJhZGl4LXRyZWUubyBkdW1wX3N0YWNrLm8gXAogCSBpZHIubyBpbnRfc3FydC5vIGV4dGFibGUubyBwcmlvX3RyZWUubyBcCiAJIHNoYTEubyBpcnFfcmVncy5vIHJlY2lwcm9jYWxfZGl2Lm8gYXJndl9zcGxpdC5vIFwKLQkgcHJvcG9ydGlvbnMubyBwcmlvX2hlYXAubyByYXRlbGltaXQubyBzaG93X21lbS5vIGlzX3NpbmdsZV90aHJlYWRlZC5vCisJIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBcCisJIGlzX3NpbmdsZV90aHJlYWRlZC5vIHBsaXN0Lm8gZGVjb21wcmVzcy5vCiAKIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCkBAIC00MCw3ICs0MSw2IEBACiBsaWItJChDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUKSArPSBmaW5kX2xhc3RfYml0Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0hXRUlHSFQpICs9IGh3ZWlnaHQubwogb2JqLSQoQ09ORklHX0xPQ0tfS0VSTkVMKSArPSBrZXJuZWxfbG9jay5vCi1vYmotJChDT05GSUdfUExJU1QpICs9IHBsaXN0Lm8KIG9iai0kKENPTkZJR19ERUJVR19QUkVFTVBUKSArPSBzbXBfcHJvY2Vzc29yX2lkLm8KIG9iai0kKENPTkZJR19ERUJVR19MSVNUKSArPSBsaXN0X2RlYnVnLm8KIG9iai0kKENPTkZJR19ERUJVR19PQkpFQ1RTKSArPSBkZWJ1Z29iamVjdHMubwpAQCAtNjUsNiArNjUsMTAgQEAKIG9iai0kKENPTkZJR19MWk9fQ09NUFJFU1MpICs9IGx6by8KIG9iai0kKENPTkZJR19MWk9fREVDT01QUkVTUykgKz0gbHpvLwogCitsaWItJChDT05GSUdfREVDT01QUkVTU19HWklQKSArPSBkZWNvbXByZXNzX2luZmxhdGUubworbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfQlpJUDIpICs9IGRlY29tcHJlc3NfYnVuemlwMi5vCitsaWItJChDT05GSUdfREVDT01QUkVTU19MWk1BKSArPSBkZWNvbXByZXNzX3VubHptYS5vCisKIG9iai0kKENPTkZJR19URVhUU0VBUkNIKSArPSB0ZXh0c2VhcmNoLm8KIG9iai0kKENPTkZJR19URVhUU0VBUkNIX0tNUCkgKz0gdHNfa21wLm8KIG9iai0kKENPTkZJR19URVhUU0VBUkNIX0JNKSArPSB0c19ibS5vCkBAIC04Miw3ICs4Niw5IEBACiAKIG9iai0kKENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LKSArPSBzeXNjYWxsLm8KIAotb2JqLSQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKSArPSBkeW5hbWljX3ByaW50ay5vCitvYmotJChDT05GSUdfRFlOQU1JQ19ERUJVRykgKz0gZHluYW1pY19kZWJ1Zy5vCisKK29iai0kKENPTkZJR19OTEFUVFIpICs9IG5sYXR0ci5vCiAKIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCiBjbGVhbi1maWxlcwk6PSBjcmMzMnRhYmxlLmgKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCAxMzM4NDY5Li4zNWExZjdmIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC05NDgsMTUgKzk0OCwxNSBAQAogICovCiBpbnQgYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgYml0cywgaW50IG9yZGVyKQogewotCWludCBwb3M7CQkvKiBzY2FucyBiaXRtYXAgYnkgcmVnaW9ucyBvZiBzaXplIG9yZGVyICovCisJaW50IHBvcywgZW5kOwkJLyogc2NhbnMgYml0bWFwIGJ5IHJlZ2lvbnMgb2Ygc2l6ZSBvcmRlciAqLwogCi0JZm9yIChwb3MgPSAwOyBwb3MgPCBiaXRzOyBwb3MgKz0gKDEgPDwgb3JkZXIpKQotCQlpZiAoX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfSVNGUkVFKSkKLQkJCWJyZWFrOwotCWlmIChwb3MgPT0gYml0cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfQUxMT0MpOwotCXJldHVybiBwb3M7CisJZm9yIChwb3MgPSAwIDsgKGVuZCA9IHBvcyArICgxIDw8IG9yZGVyKSkgPD0gYml0czsgcG9zID0gZW5kKSB7CisJCWlmICghX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfSVNGUkVFKSkKKwkJCWNvbnRpbnVlOworCQlfX3JlZ19vcChiaXRtYXAsIHBvcywgb3JkZXIsIFJFR19PUF9BTExPQyk7CisJCXJldHVybiBwb3M7CisJfQorCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTChiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbik7CiAKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzLmMgYi9saWIvZGVjb21wcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODQyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVjb21wcmVzcy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBkZWNvbXByZXNzLmMKKyAqCisgKiBEZXRlY3QgdGhlIGRlY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIG1hZ2ljIG51bWJlcgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2dlbmVyaWMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvYnVuemlwMi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvdW5sem1hLmg+CisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9pbmZsYXRlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaWZuZGVmIENPTkZJR19ERUNPTVBSRVNTX0daSVAKKyMgZGVmaW5lIGd1bnppcCBOVUxMCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0RFQ09NUFJFU1NfQlpJUDIKKyMgZGVmaW5lIGJ1bnppcDIgTlVMTAorI2VuZGlmCisjaWZuZGVmIENPTkZJR19ERUNPTVBSRVNTX0xaTUEKKyMgZGVmaW5lIHVubHptYSBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wcmVzc19mb3JtYXQgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbMl07CisJY29uc3QgY2hhciAqbmFtZTsKKwlkZWNvbXByZXNzX2ZuIGRlY29tcHJlc3NvcjsKK30gY29tcHJlc3NlZF9mb3JtYXRzW10gPSB7CisJeyB7MDM3LCAwMjEzfSwgImd6aXAiLCBndW56aXAgfSwKKwl7IHswMzcsIDAyMzZ9LCAiZ3ppcCIsIGd1bnppcCB9LAorCXsgezB4NDIsIDB4NWF9LCAiYnppcDIiLCBidW56aXAyIH0sCisJeyB7MHg1ZCwgMHgwMH0sICJsem1hIiwgdW5sem1hIH0sCisJeyB7MCwgMH0sIE5VTEwsIE5VTEwgfQorfTsKKworZGVjb21wcmVzc19mbiBkZWNvbXByZXNzX21ldGhvZChjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwgaW50IGxlbiwKKwkJCQljb25zdCBjaGFyICoqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgY29tcHJlc3NfZm9ybWF0ICpjZjsKKworCWlmIChsZW4gPCAyKQorCQlyZXR1cm4gTlVMTDsJLyogTmVlZCBhdCBsZWFzdCB0aGlzIG11Y2guLi4gKi8KKworCWZvciAoY2YgPSBjb21wcmVzc2VkX2Zvcm1hdHM7IGNmLT5uYW1lOyBjZisrKSB7CisJCWlmICghbWVtY21wKGluYnVmLCBjZi0+bWFnaWMsIDIpKQorCQkJYnJlYWs7CisKKwl9CisJaWYgKG5hbWUpCisJCSpuYW1lID0gY2YtPm5hbWU7CisJcmV0dXJuIGNmLT5kZWNvbXByZXNzb3I7Cit9CmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzc19idW56aXAyLmMgYi9saWIvZGVjb21wcmVzc19idW56aXAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzZGRiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYwpAQCAtMCwwICsxLDczNSBAQAorLyogdmk6IHNldCBzdyA9IDQgdHMgPSA0OiAqLworLyoJU21hbGwgYnppcDIgZGVmbGF0ZSBpbXBsZW1lbnRhdGlvbiwgYnkgUm9iIExhbmRsZXkgKHJvYkBsYW5kbGV5Lm5ldCkuCisKKwlCYXNlZCBvbiBiemlwMiBkZWNvbXByZXNzaW9uIGNvZGUgYnkgSnVsaWFuIFIgU2V3YXJkIChqc2V3YXJkQGFjbS5vcmcpLAorCXdoaWNoIGFsc28gYWNrbm93bGVkZ2VzIGNvbnRyaWJ1dGlvbnMgYnkgTWlrZSBCdXJyb3dzLCBEYXZpZCBXaGVlbGVyLAorCVBldGVyIEZlbndpY2ssIEFsaXN0YWlyIE1vZmZhdCwgUmFkZm9yZCBOZWFsLCBJYW4gSC4gV2l0dGVuLAorCVJvYmVydCBTZWRnZXdpY2ssIGFuZCBKb24gTC4gQmVudGxleS4KKworCVRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTEdQTHYyOgorCQlMR1BMIChodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGdwbC5odG1sCisqLworCisvKgorCVNpemUgYW5kIHNwZWVkIG9wdGltaXphdGlvbnMgYnkgTWFudWVsIE5vdm9hIElJSSAgKG1qbjNAY29kZXBvZXQub3JnKS4KKworCU1vcmUgZWZmaWNpZW50IHJlYWRpbmcgb2YgSHVmZm1hbiBjb2RlcywgYSBzdHJlYW1saW5lZCByZWFkX2J1bnppcCgpCisJZnVuY3Rpb24sIGFuZCB2YXJpb3VzIG90aGVyIHR3ZWFrcy4gIEluIChsaW1pdGVkKSB0ZXN0cywgYXBwcm94aW1hdGVseQorCTIwJSBmYXN0ZXIgdGhhbiBiemNhdCBvbiB4ODYgYW5kIGFib3V0IDEwJSBmYXN0ZXIgb24gYXJtLgorCisJTm90ZSB0aGF0IGFib3V0IDIvMyBvZiB0aGUgdGltZSBpcyBzcGVudCBpbiByZWFkX3VuemlwKCkgcmV2ZXJzaW5nCisJdGhlIEJ1cnJvd3MtV2hlZWxlciB0cmFuc2Zvcm1hdGlvbi4gIE11Y2ggb2YgdGhhdCB0aW1lIGlzIGRlbGF5CisJcmVzdWx0aW5nIGZyb20gY2FjaGUgbWlzc2VzLgorCisJSSB3b3VsZCBhc2sgdGhhdCBhbnlvbmUgYmVuZWZpdGluZyBmcm9tIHRoaXMgd29yaywgZXNwZWNpYWxseSB0aG9zZQorCXVzaW5nIGl0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMsIGNvbnNpZGVyIG1ha2luZyBhIGRvbmF0aW9uIHRvIG15IGxvY2FsCisJbm9uLXByb2ZpdCBob3NwaWNlIG9yZ2FuaXphdGlvbiBpbiB0aGUgbmFtZSBvZiB0aGUgd29tYW4gSSBsb3ZlZCwgd2hvCisJcGFzc2VkIGF3YXkgRmViLiAxMiwgMjAwMy4KKworCQlJbiBtZW1vcnkgb2YgVG9uaSBXLiBIYWdhbgorCisJCUhvc3BpY2Ugb2YgQWNhZGlhbmEsIEluYy4KKwkJMjYwMCBKb2huc3RvbiBTdC4sIFN1aXRlIDIwMAorCQlMYWZheWV0dGUsIExBIDcwNTAzLTMyNDAKKworCQlQaG9uZSAoMzM3KSAyMzItMTIzNCBvciAxLTgwMC03MzgtMjIyNgorCQlGYXggICAoMzM3KSAyMzItMTI5NworCisJCWh0dHA6Ly93d3cuaG9zcGljZWFjYWRpYW5hLmNvbS8KKworCU1hbnVlbAorICovCisKKy8qCisJTWFkZSBpdCBmaXQgZm9yIHJ1bm5pbmcgaW4gTGludXggS2VybmVsIGJ5IEFsYWluIEtuYWZmIChhbGFpbkBrbmFmZi5sdSkKKyovCisKKworI2lmbmRlZiBTVEFUSUMKKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2J1bnppcDIuaD4KKyNlbmRpZiAvKiAhU1RBVElDICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL21tLmg+CisKKyNpZm5kZWYgSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIDB4N2ZmZmZmZmYKKyNlbmRpZgorCisvKiBDb25zdGFudHMgZm9yIEh1ZmZtYW4gY29kaW5nICovCisjZGVmaW5lIE1BWF9HUk9VUFMJCTYKKyNkZWZpbmUgR1JPVVBfU0laRSAgIAkJNTAJLyogNjQgd291bGQgaGF2ZSBiZWVuIG1vcmUgZWZmaWNpZW50ICovCisjZGVmaW5lIE1BWF9IVUZDT0RFX0JJVFMgCTIwCS8qIExvbmdlc3QgSHVmZm1hbiBjb2RlIGFsbG93ZWQgKi8KKyNkZWZpbmUgTUFYX1NZTUJPTFMgCQkyNTgJLyogMjU2IGxpdGVyYWxzICsgUlVOQSArIFJVTkIgKi8KKyNkZWZpbmUgU1lNQk9MX1JVTkEJCTAKKyNkZWZpbmUgU1lNQk9MX1JVTkIJCTEKKworLyogU3RhdHVzIHJldHVybiB2YWx1ZXMgKi8KKyNkZWZpbmUgUkVUVkFMX09LCQkJMAorI2RlZmluZSBSRVRWQUxfTEFTVF9CTE9DSwkJKC0xKQorI2RlZmluZSBSRVRWQUxfTk9UX0JaSVBfREFUQQkJKC0yKQorI2RlZmluZSBSRVRWQUxfVU5FWFBFQ1RFRF9JTlBVVF9FT0YJKC0zKQorI2RlZmluZSBSRVRWQUxfVU5FWFBFQ1RFRF9PVVRQVVRfRU9GCSgtNCkKKyNkZWZpbmUgUkVUVkFMX0RBVEFfRVJST1IJCSgtNSkKKyNkZWZpbmUgUkVUVkFMX09VVF9PRl9NRU1PUlkJCSgtNikKKyNkZWZpbmUgUkVUVkFMX09CU09MRVRFX0lOUFVUCQkoLTcpCisKKy8qIE90aGVyIGhvdXNla2VlcGluZyBjb25zdGFudHMgKi8KKyNkZWZpbmUgQlpJUDJfSU9CVUZfU0laRQkJNDA5NgorCisvKiBUaGlzIGlzIHdoYXQgd2Uga25vdyBhYm91dCBlYWNoIEh1ZmZtYW4gY29kaW5nIGdyb3VwICovCitzdHJ1Y3QgZ3JvdXBfZGF0YSB7CisJLyogV2UgaGF2ZSBhbiBleHRyYSBzbG90IGF0IHRoZSBlbmQgb2YgbGltaXRbXSBmb3IgYSBzZW50aW5hbCB2YWx1ZS4gKi8KKwlpbnQgbGltaXRbTUFYX0hVRkNPREVfQklUUysxXTsKKwlpbnQgYmFzZVtNQVhfSFVGQ09ERV9CSVRTXTsKKwlpbnQgcGVybXV0ZVtNQVhfU1lNQk9MU107CisJaW50IG1pbkxlbiwgbWF4TGVuOworfTsKKworLyogU3RydWN0dXJlIGhvbGRpbmcgYWxsIHRoZSBob3VzZWtlZXBpbmcgZGF0YSwgaW5jbHVkaW5nIElPIGJ1ZmZlcnMgYW5kCisgICBtZW1vcnkgdGhhdCBwZXJzaXN0cyBiZXR3ZWVuIGNhbGxzIHRvIGJ1bnppcCAqLworc3RydWN0IGJ1bnppcF9kYXRhIHsKKwkvKiBTdGF0ZSBmb3IgaW50ZXJydXB0aW5nIG91dHB1dCBsb29wICovCisJaW50IHdyaXRlQ29waWVzLCB3cml0ZVBvcywgd3JpdGVSdW5Db3VudGRvd24sIHdyaXRlQ291bnQsIHdyaXRlQ3VycmVudDsKKwkvKiBJL08gdHJhY2tpbmcgZGF0YSAoZmlsZSBoYW5kbGVzLCBidWZmZXJzLCBwb3NpdGlvbnMsIGV0Yy4pICovCisJaW50ICgqZmlsbCkodm9pZCosIHVuc2lnbmVkIGludCk7CisJaW50IGluYnVmQ291bnQsIGluYnVmUG9zIC8qLCBvdXRidWZQb3MqLzsKKwl1bnNpZ25lZCBjaGFyICppbmJ1ZiAvKiwqb3V0YnVmKi87CisJdW5zaWduZWQgaW50IGluYnVmQml0Q291bnQsIGluYnVmQml0czsKKwkvKiBUaGUgQ1JDIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGJsb2NrIGhlYWRlciBhbmQgY2FsY3VsYXRlZCBmcm9tIHRoZQorCWRhdGEgKi8KKwl1bnNpZ25lZCBpbnQgY3JjMzJUYWJsZVsyNTZdLCBoZWFkZXJDUkMsIHRvdGFsQ1JDLCB3cml0ZUNSQzsKKwkvKiBJbnRlcm1lZGlhdGUgYnVmZmVyIGFuZCBpdHMgc2l6ZSAoaW4gYnl0ZXMpICovCisJdW5zaWduZWQgaW50ICpkYnVmLCBkYnVmU2l6ZTsKKwkvKiBUaGVzZSB0aGluZ3MgYXJlIGEgYml0IHRvbyBiaWcgdG8gZ28gb24gdGhlIHN0YWNrICovCisJdW5zaWduZWQgY2hhciBzZWxlY3RvcnNbMzI3NjhdOwkJLyogblNlbGVjdG9ycyA9IDE1IGJpdHMgKi8KKwlzdHJ1Y3QgZ3JvdXBfZGF0YSBncm91cHNbTUFYX0dST1VQU107CS8qIEh1ZmZtYW4gY29kaW5nIHRhYmxlcyAqLworCWludCBpb19lcnJvcjsJCQkvKiBub24temVybyBpZiB3ZSBoYXZlIElPIGVycm9yICovCit9OworCisKKy8qIFJldHVybiB0aGUgbmV4dCBubm4gYml0cyBvZiBpbnB1dC4gIEFsbCByZWFkcyBmcm9tIHRoZSBjb21wcmVzc2VkIGlucHV0CisgICBhcmUgZG9uZSB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uICBBbGwgcmVhZHMgYXJlIGJpZyBlbmRpYW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgSU5JVCBnZXRfYml0cyhzdHJ1Y3QgYnVuemlwX2RhdGEgKmJkLCBjaGFyIGJpdHNfd2FudGVkKQoreworCXVuc2lnbmVkIGludCBiaXRzID0gMDsKKworCS8qIElmIHdlIG5lZWQgdG8gZ2V0IG1vcmUgZGF0YSBmcm9tIHRoZSBieXRlIGJ1ZmZlciwgZG8gc28uCisJICAgKExvb3AgZ2V0dGluZyBvbmUgYnl0ZSBhdCBhIHRpbWUgdG8gZW5mb3JjZSBlbmRpYW5uZXNzIGFuZCBhdm9pZAorCSAgIHVuYWxpZ25lZCBhY2Nlc3MuKSAqLworCXdoaWxlIChiZC0+aW5idWZCaXRDb3VudCA8IGJpdHNfd2FudGVkKSB7CisJCS8qIElmIHdlIG5lZWQgdG8gcmVhZCBtb3JlIGRhdGEgZnJvbSBmaWxlIGludG8gYnl0ZSBidWZmZXIsIGRvCisJCSAgIHNvICovCisJCWlmIChiZC0+aW5idWZQb3MgPT0gYmQtPmluYnVmQ291bnQpIHsKKwkJCWlmIChiZC0+aW9fZXJyb3IpCisJCQkJcmV0dXJuIDA7CisJCQliZC0+aW5idWZDb3VudCA9IGJkLT5maWxsKGJkLT5pbmJ1ZiwgQlpJUDJfSU9CVUZfU0laRSk7CisJCQlpZiAoYmQtPmluYnVmQ291bnQgPD0gMCkgeworCQkJCWJkLT5pb19lcnJvciA9IFJFVFZBTF9VTkVYUEVDVEVEX0lOUFVUX0VPRjsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWJkLT5pbmJ1ZlBvcyA9IDA7CisJCX0KKwkJLyogQXZvaWQgMzItYml0IG92ZXJmbG93IChkdW1wIGJpdCBidWZmZXIgdG8gdG9wIG9mIG91dHB1dCkgKi8KKwkJaWYgKGJkLT5pbmJ1ZkJpdENvdW50ID49IDI0KSB7CisJCQliaXRzID0gYmQtPmluYnVmQml0cyYoKDEgPDwgYmQtPmluYnVmQml0Q291bnQpLTEpOworCQkJYml0c193YW50ZWQgLT0gYmQtPmluYnVmQml0Q291bnQ7CisJCQliaXRzIDw8PSBiaXRzX3dhbnRlZDsKKwkJCWJkLT5pbmJ1ZkJpdENvdW50ID0gMDsKKwkJfQorCQkvKiBHcmFiIG5leHQgOCBiaXRzIG9mIGlucHV0IGZyb20gYnVmZmVyLiAqLworCQliZC0+aW5idWZCaXRzID0gKGJkLT5pbmJ1ZkJpdHMgPDwgOCl8YmQtPmluYnVmW2JkLT5pbmJ1ZlBvcysrXTsKKwkJYmQtPmluYnVmQml0Q291bnQgKz0gODsKKwl9CisJLyogQ2FsY3VsYXRlIHJlc3VsdCAqLworCWJkLT5pbmJ1ZkJpdENvdW50IC09IGJpdHNfd2FudGVkOworCWJpdHMgfD0gKGJkLT5pbmJ1ZkJpdHMgPj4gYmQtPmluYnVmQml0Q291bnQpJigoMSA8PCBiaXRzX3dhbnRlZCktMSk7CisKKwlyZXR1cm4gYml0czsKK30KKworLyogVW5wYWNrcyB0aGUgbmV4dCBibG9jayBhbmQgc2V0cyB1cCBmb3IgdGhlIGludmVyc2UgYnVycm93cy13aGVlbGVyIHN0ZXAuICovCisKK3N0YXRpYyBpbnQgSU5JVCBnZXRfbmV4dF9ibG9jayhzdHJ1Y3QgYnVuemlwX2RhdGEgKmJkKQoreworCXN0cnVjdCBncm91cF9kYXRhICpodWZHcm91cCA9IE5VTEw7CisJaW50ICpiYXNlID0gTlVMTDsKKwlpbnQgKmxpbWl0ID0gTlVMTDsKKwlpbnQgZGJ1ZkNvdW50LCBuZXh0U3ltLCBkYnVmU2l6ZSwgZ3JvdXBDb3VudCwgc2VsZWN0b3IsCisJCWksIGosIGssIHQsIHJ1blBvcywgc3ltQ291bnQsIHN5bVRvdGFsLCBuU2VsZWN0b3JzLAorCQlieXRlQ291bnRbMjU2XTsKKwl1bnNpZ25lZCBjaGFyIHVjLCBzeW1Ub0J5dGVbMjU2XSwgbXRmU3ltYm9sWzI1Nl0sICpzZWxlY3RvcnM7CisJdW5zaWduZWQgaW50ICpkYnVmLCBvcmlnUHRyOworCisJZGJ1ZiA9IGJkLT5kYnVmOworCWRidWZTaXplID0gYmQtPmRidWZTaXplOworCXNlbGVjdG9ycyA9IGJkLT5zZWxlY3RvcnM7CisKKwkvKiBSZWFkIGluIGhlYWRlciBzaWduYXR1cmUgYW5kIENSQywgdGhlbiB2YWxpZGF0ZSBzaWduYXR1cmUuCisJICAgKGxhc3QgYmxvY2sgc2lnbmF0dXJlIG1lYW5zIENSQyBpcyBmb3Igd2hvbGUgZmlsZSwgcmV0dXJuIG5vdykgKi8KKwlpID0gZ2V0X2JpdHMoYmQsIDI0KTsKKwlqID0gZ2V0X2JpdHMoYmQsIDI0KTsKKwliZC0+aGVhZGVyQ1JDID0gZ2V0X2JpdHMoYmQsIDMyKTsKKwlpZiAoKGkgPT0gMHgxNzcyNDUpICYmIChqID09IDB4Mzg1MDkwKSkKKwkJcmV0dXJuIFJFVFZBTF9MQVNUX0JMT0NLOworCWlmICgoaSAhPSAweDMxNDE1OSkgfHwgKGogIT0gMHgyNjUzNTkpKQorCQlyZXR1cm4gUkVUVkFMX05PVF9CWklQX0RBVEE7CisJLyogV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBibG9ja1JhbmRvbWlzZWQgaWYgYW55Ym9keSBjb21wbGFpbnMuCisJICAgVGhlcmUgd2FzIHNvbWUgY29kZSBmb3IgdGhpcyBpbiBidXN5Ym94IDEuMC4wLXByZTMsIGJ1dCBub2JvZHkgZXZlcgorCSAgIG5vdGljZWQgdGhhdCBpdCBkaWRuJ3QgYWN0dWFsbHkgd29yay4gKi8KKwlpZiAoZ2V0X2JpdHMoYmQsIDEpKQorCQlyZXR1cm4gUkVUVkFMX09CU09MRVRFX0lOUFVUOworCW9yaWdQdHIgPSBnZXRfYml0cyhiZCwgMjQpOworCWlmIChvcmlnUHRyID4gZGJ1ZlNpemUpCisJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwkvKiBtYXBwaW5nIHRhYmxlOiBpZiBzb21lIGJ5dGUgdmFsdWVzIGFyZSBuZXZlciB1c2VkIChlbmNvZGluZyB0aGluZ3MKKwkgICBsaWtlIGFzY2lpIHRleHQpLCB0aGUgY29tcHJlc3Npb24gY29kZSByZW1vdmVzIHRoZSBnYXBzIHRvIGhhdmUgZmV3ZXIKKwkgICBzeW1ib2xzIHRvIGRlYWwgd2l0aCwgYW5kIHdyaXRlcyBhIHNwYXJzZSBiaXRmaWVsZCBpbmRpY2F0aW5nIHdoaWNoCisJICAgdmFsdWVzIHdlcmUgcHJlc2VudC4gIFdlIG1ha2UgYSB0cmFuc2xhdGlvbiB0YWJsZSB0byBjb252ZXJ0IHRoZQorCSAgIHN5bWJvbHMgYmFjayB0byB0aGUgY29ycmVzcG9uZGluZyBieXRlcy4gKi8KKwl0ID0gZ2V0X2JpdHMoYmQsIDE2KTsKKwlzeW1Ub3RhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHQmKDEgPDwgKDE1LWkpKSkgeworCQkJayA9IGdldF9iaXRzKGJkLCAxNik7CisJCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKKwkJCQlpZiAoayYoMSA8PCAoMTUtaikpKQorCQkJCQlzeW1Ub0J5dGVbc3ltVG90YWwrK10gPSAoMTYqaSkrajsKKwkJfQorCX0KKwkvKiBIb3cgbWFueSBkaWZmZXJlbnQgSHVmZm1hbiBjb2RpbmcgZ3JvdXBzIGRvZXMgdGhpcyBibG9jayB1c2U/ICovCisJZ3JvdXBDb3VudCA9IGdldF9iaXRzKGJkLCAzKTsKKwlpZiAoZ3JvdXBDb3VudCA8IDIgfHwgZ3JvdXBDb3VudCA+IE1BWF9HUk9VUFMpCisJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwkvKiBuU2VsZWN0b3JzOiBFdmVyeSBHUk9VUF9TSVpFIG1hbnkgc3ltYm9scyB3ZSBzZWxlY3QgYSBuZXcKKwkgICBIdWZmbWFuIGNvZGluZyBncm91cC4gIFJlYWQgaW4gdGhlIGdyb3VwIHNlbGVjdG9yIGxpc3QsCisJICAgd2hpY2ggaXMgc3RvcmVkIGFzIE1URiBlbmNvZGVkIGJpdCBydW5zLiAgKE1URiA9IE1vdmUgVG8KKwkgICBGcm9udCwgYXMgZWFjaCB2YWx1ZSBpcyB1c2VkIGl0J3MgbW92ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZQorCSAgIGxpc3QuKSAqLworCW5TZWxlY3RvcnMgPSBnZXRfYml0cyhiZCwgMTUpOworCWlmICghblNlbGVjdG9ycykKKwkJcmV0dXJuIFJFVFZBTF9EQVRBX0VSUk9SOworCWZvciAoaSA9IDA7IGkgPCBncm91cENvdW50OyBpKyspCisJCW10ZlN5bWJvbFtpXSA9IGk7CisJZm9yIChpID0gMDsgaSA8IG5TZWxlY3RvcnM7IGkrKykgeworCQkvKiBHZXQgbmV4dCB2YWx1ZSAqLworCQlmb3IgKGogPSAwOyBnZXRfYml0cyhiZCwgMSk7IGorKykKKwkJCWlmIChqID49IGdyb3VwQ291bnQpCisJCQkJcmV0dXJuIFJFVFZBTF9EQVRBX0VSUk9SOworCQkvKiBEZWNvZGUgTVRGIHRvIGdldCB0aGUgbmV4dCBzZWxlY3RvciAqLworCQl1YyA9IG10ZlN5bWJvbFtqXTsKKwkJZm9yICg7IGo7IGotLSkKKwkJCW10ZlN5bWJvbFtqXSA9IG10ZlN5bWJvbFtqLTFdOworCQltdGZTeW1ib2xbMF0gPSBzZWxlY3RvcnNbaV0gPSB1YzsKKwl9CisJLyogUmVhZCB0aGUgSHVmZm1hbiBjb2RpbmcgdGFibGVzIGZvciBlYWNoIGdyb3VwLCB3aGljaCBjb2RlCisJICAgZm9yIHN5bVRvdGFsIGxpdGVyYWwgc3ltYm9scywgcGx1cyB0d28gcnVuIHN5bWJvbHMgKFJVTkEsCisJICAgUlVOQikgKi8KKwlzeW1Db3VudCA9IHN5bVRvdGFsKzI7CisJZm9yIChqID0gMDsgaiA8IGdyb3VwQ291bnQ7IGorKykgeworCQl1bnNpZ25lZCBjaGFyIGxlbmd0aFtNQVhfU1lNQk9MU10sIHRlbXBbTUFYX0hVRkNPREVfQklUUysxXTsKKwkJaW50CW1pbkxlbiwJbWF4TGVuLCBwcDsKKwkJLyogUmVhZCBIdWZmbWFuIGNvZGUgbGVuZ3RocyBmb3IgZWFjaCBzeW1ib2wuICBUaGV5J3JlCisJCSAgIHN0b3JlZCBpbiBhIHdheSBzaW1pbGFyIHRvIG10ZjsgcmVjb3JkIGEgc3RhcnRpbmcKKwkJICAgdmFsdWUgZm9yIHRoZSBmaXJzdCBzeW1ib2wsIGFuZCBhbiBvZmZzZXQgZnJvbSB0aGUKKwkJICAgcHJldmlvdXMgdmFsdWUgZm9yIGV2ZXJ5cyBzeW1ib2wgYWZ0ZXIgdGhhdC4KKwkJICAgKFN1YnRyYWN0aW5nIDEgYmVmb3JlIHRoZSBsb29wIGFuZCB0aGVuIGFkZGluZyBpdAorCQkgICBiYWNrIGF0IHRoZSBlbmQgaXMgYW4gb3B0aW1pemF0aW9uIHRoYXQgbWFrZXMgdGhlCisJCSAgIHRlc3QgaW5zaWRlIHRoZSBsb29wIHNpbXBsZXI6IHN5bWJvbCBsZW5ndGggMAorCQkgICBiZWNvbWVzIG5lZ2F0aXZlLCBzbyBhbiB1bnNpZ25lZCBpbmVxdWFsaXR5IGNhdGNoZXMKKwkJICAgaXQuKSAqLworCQl0ID0gZ2V0X2JpdHMoYmQsIDUpLTE7CisJCWZvciAoaSA9IDA7IGkgPCBzeW1Db3VudDsgaSsrKSB7CisJCQlmb3IgKDs7KSB7CisJCQkJaWYgKCgodW5zaWduZWQpdCkgPiAoTUFYX0hVRkNPREVfQklUUy0xKSkKKwkJCQkJcmV0dXJuIFJFVFZBTF9EQVRBX0VSUk9SOworCisJCQkJLyogSWYgZmlyc3QgYml0IGlzIDAsIHN0b3AuICBFbHNlCisJCQkJICAgc2Vjb25kIGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0bworCQkJCSAgIGluY3JlbWVudCBvciBkZWNyZW1lbnQgdGhlIHZhbHVlLgorCQkJCSAgIE9wdGltaXphdGlvbjogZ3JhYiAyIGJpdHMgYW5kIHVuZ2V0CisJCQkJICAgdGhlIHNlY29uZCBpZiB0aGUgZmlyc3Qgd2FzIDAuICovCisKKwkJCQlrID0gZ2V0X2JpdHMoYmQsIDIpOworCQkJCWlmIChrIDwgMikgeworCQkJCQliZC0+aW5idWZCaXRDb3VudCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogQWRkIG9uZSBpZiBzZWNvbmQgYml0IDEsIGVsc2UKKwkJCQkgKiBzdWJ0cmFjdCAxLiAgQXZvaWRzIGlmL2Vsc2UgKi8KKwkJCQl0ICs9ICgoKGsrMSkmMiktMSk7CisJCQl9CisJCQkvKiBDb3JyZWN0IGZvciB0aGUgaW5pdGlhbCAtMSwgdG8gZ2V0IHRoZQorCQkJICogZmluYWwgc3ltYm9sIGxlbmd0aCAqLworCQkJbGVuZ3RoW2ldID0gdCsxOworCQl9CisJCS8qIEZpbmQgbGFyZ2VzdCBhbmQgc21hbGxlc3QgbGVuZ3RocyBpbiB0aGlzIGdyb3VwICovCisJCW1pbkxlbiA9IG1heExlbiA9IGxlbmd0aFswXTsKKworCQlmb3IgKGkgPSAxOyBpIDwgc3ltQ291bnQ7IGkrKykgeworCQkJaWYgKGxlbmd0aFtpXSA+IG1heExlbikKKwkJCQltYXhMZW4gPSBsZW5ndGhbaV07CisJCQllbHNlIGlmIChsZW5ndGhbaV0gPCBtaW5MZW4pCisJCQkJbWluTGVuID0gbGVuZ3RoW2ldOworCQl9CisKKwkJLyogQ2FsY3VsYXRlIHBlcm11dGVbXSwgYmFzZVtdLCBhbmQgbGltaXRbXSB0YWJsZXMgZnJvbQorCQkgKiBsZW5ndGhbXS4KKwkJICoKKwkJICogcGVybXV0ZVtdIGlzIHRoZSBsb29rdXAgdGFibGUgZm9yIGNvbnZlcnRpbmcKKwkJICogSHVmZm1hbiBjb2RlZCBzeW1ib2xzIGludG8gZGVjb2RlZCBzeW1ib2xzLiAgYmFzZVtdCisJCSAqIGlzIHRoZSBhbW91bnQgdG8gc3VidHJhY3QgZnJvbSB0aGUgdmFsdWUgb2YgYQorCQkgKiBIdWZmbWFuIHN5bWJvbCBvZiBhIGdpdmVuIGxlbmd0aCB3aGVuIHVzaW5nCisJCSAqIHBlcm11dGVbXS4KKwkJICoKKwkJICogbGltaXRbXSBpbmRpY2F0ZXMgdGhlIGxhcmdlc3QgbnVtZXJpY2FsIHZhbHVlIGEKKwkJICogc3ltYm9sIHdpdGggYSBnaXZlbiBudW1iZXIgb2YgYml0cyBjYW4gaGF2ZS4gIFRoaXMKKwkJICogaXMgaG93IHRoZSBIdWZmbWFuIGNvZGVzIGNhbiB2YXJ5IGluIGxlbmd0aDogZWFjaAorCQkgKiBjb2RlIHdpdGggYSB2YWx1ZSA+IGxpbWl0W2xlbmd0aF0gbmVlZHMgYW5vdGhlcgorCQkgKiBiaXQuCisJCSAqLworCQlodWZHcm91cCA9IGJkLT5ncm91cHMrajsKKwkJaHVmR3JvdXAtPm1pbkxlbiA9IG1pbkxlbjsKKwkJaHVmR3JvdXAtPm1heExlbiA9IG1heExlbjsKKwkJLyogTm90ZSB0aGF0IG1pbkxlbiBjYW4ndCBiZSBzbWFsbGVyIHRoYW4gMSwgc28gd2UKKwkJICAgYWRqdXN0IHRoZSBiYXNlIGFuZCBsaW1pdCBhcnJheSBwb2ludGVycyBzbyB3ZSdyZQorCQkgICBub3QgYWx3YXlzIHdhc3RpbmcgdGhlIGZpcnN0IGVudHJ5LiAgV2UgZG8gdGhpcworCQkgICBhZ2FpbiB3aGVuIHVzaW5nIHRoZW0gKGR1cmluZyBzeW1ib2wgZGVjb2RpbmcpLiovCisJCWJhc2UgPSBodWZHcm91cC0+YmFzZS0xOworCQlsaW1pdCA9IGh1Zkdyb3VwLT5saW1pdC0xOworCQkvKiBDYWxjdWxhdGUgcGVybXV0ZVtdLiAgQ29uY3VyZW50bHksIGluaXRpYWxpemUKKwkJICogdGVtcFtdIGFuZCBsaW1pdFtdLiAqLworCQlwcCA9IDA7CisJCWZvciAoaSA9IG1pbkxlbjsgaSA8PSBtYXhMZW47IGkrKykgeworCQkJdGVtcFtpXSA9IGxpbWl0W2ldID0gMDsKKwkJCWZvciAodCA9IDA7IHQgPCBzeW1Db3VudDsgdCsrKQorCQkJCWlmIChsZW5ndGhbdF0gPT0gaSkKKwkJCQkJaHVmR3JvdXAtPnBlcm11dGVbcHArK10gPSB0OworCQl9CisJCS8qIENvdW50IHN5bWJvbHMgY29kZWQgZm9yIGF0IGVhY2ggYml0IGxlbmd0aCAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3ltQ291bnQ7IGkrKykKKwkJCXRlbXBbbGVuZ3RoW2ldXSsrOworCQkvKiBDYWxjdWxhdGUgbGltaXRbXSAodGhlIGxhcmdlc3Qgc3ltYm9sLWNvZGluZyB2YWx1ZQorCQkgKmF0IGVhY2ggYml0IGxlbmd0aCwgd2hpY2ggaXMgKHByZXZpb3VzIGxpbWl0IDw8CisJCSAqMSkrc3ltYm9scyBhdCB0aGlzIGxldmVsKSwgYW5kIGJhc2VbXSAobnVtYmVyIG9mCisJCSAqc3ltYm9scyB0byBpZ25vcmUgYXQgZWFjaCBiaXQgbGVuZ3RoLCB3aGljaCBpcyBsaW1pdAorCQkgKm1pbnVzIHRoZSBjdW11bGF0aXZlIGNvdW50IG9mIHN5bWJvbHMgY29kZWQgZm9yCisJCSAqYWxyZWFkeSkuICovCisJCXBwID0gdCA9IDA7CisJCWZvciAoaSA9IG1pbkxlbjsgaSA8IG1heExlbjsgaSsrKSB7CisJCQlwcCArPSB0ZW1wW2ldOworCQkJLyogV2UgcmVhZCB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzeW1ib2wgc2l6ZQorCQkJICAgYW5kIHRoZW4gdW5nZXQgYml0cyBhZnRlciBkZXRlcm1pbmluZyBob3cKKwkJCSAgIG1hbnkgd2UgbmVlZCwgYW5kIHRob3NlIGV4dHJhIGJpdHMgY291bGQgYmUKKwkJCSAgIHNldCB0byBhbnl0aGluZy4gIChUaGV5J3JlIG5vaXNlIGZyb20KKwkJCSAgIGZ1dHVyZSBzeW1ib2xzLikgIEF0IGVhY2ggbGV2ZWwgd2UncmUKKwkJCSAgIHJlYWxseSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IGZldworCQkJICAgYml0cywgc28gaGVyZSB3ZSBzZXQgYWxsIHRoZSB0cmFpbGluZworCQkJICAgdG8tYmUtaWdub3JlZCBiaXRzIHRvIDEgc28gdGhleSBkb24ndAorCQkJICAgYWZmZWN0IHRoZSB2YWx1ZSA+IGxpbWl0W2xlbmd0aF0KKwkJCSAgIGNvbXBhcmlzb24uICovCisJCQlsaW1pdFtpXSA9IChwcCA8PCAobWF4TGVuIC0gaSkpIC0gMTsKKwkJCXBwIDw8PSAxOworCQkJYmFzZVtpKzFdID0gcHAtKHQgKz0gdGVtcFtpXSk7CisJCX0KKwkJbGltaXRbbWF4TGVuKzFdID0gSU5UX01BWDsgLyogU2VudGluYWwgdmFsdWUgZm9yCisJCQkJCSAgICAqIHJlYWRpbmcgbmV4dCBzeW0uICovCisJCWxpbWl0W21heExlbl0gPSBwcCt0ZW1wW21heExlbl0tMTsKKwkJYmFzZVttaW5MZW5dID0gMDsKKwl9CisJLyogV2UndmUgZmluaXNoZWQgcmVhZGluZyBhbmQgZGlnZXN0aW5nIHRoZSBibG9jayBoZWFkZXIuICBOb3cKKwkgICByZWFkIHRoaXMgYmxvY2sncyBIdWZmbWFuIGNvZGVkIHN5bWJvbHMgZnJvbSB0aGUgZmlsZSBhbmQKKwkgICB1bmRvIHRoZSBIdWZmbWFuIGNvZGluZyBhbmQgcnVuIGxlbmd0aCBlbmNvZGluZywgc2F2aW5nIHRoZQorCSAgIHJlc3VsdCBpbnRvIGRidWZbZGJ1ZkNvdW50KytdID0gdWMgKi8KKworCS8qIEluaXRpYWxpemUgc3ltYm9sIG9jY3VycmVuY2UgY291bnRlcnMgYW5kIHN5bWJvbCBNb3ZlIFRvCisJICogRnJvbnQgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJYnl0ZUNvdW50W2ldID0gMDsKKwkJbXRmU3ltYm9sW2ldID0gKHVuc2lnbmVkIGNoYXIpaTsKKwl9CisJLyogTG9vcCB0aHJvdWdoIGNvbXByZXNzZWQgc3ltYm9scy4gKi8KKwlydW5Qb3MgPSBkYnVmQ291bnQgPSBzeW1Db3VudCA9IHNlbGVjdG9yID0gMDsKKwlmb3IgKDs7KSB7CisJCS8qIERldGVybWluZSB3aGljaCBIdWZmbWFuIGNvZGluZyBncm91cCB0byB1c2UuICovCisJCWlmICghKHN5bUNvdW50LS0pKSB7CisJCQlzeW1Db3VudCA9IEdST1VQX1NJWkUtMTsKKwkJCWlmIChzZWxlY3RvciA+PSBuU2VsZWN0b3JzKQorCQkJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwkJCWh1Zkdyb3VwID0gYmQtPmdyb3VwcytzZWxlY3RvcnNbc2VsZWN0b3IrK107CisJCQliYXNlID0gaHVmR3JvdXAtPmJhc2UtMTsKKwkJCWxpbWl0ID0gaHVmR3JvdXAtPmxpbWl0LTE7CisJCX0KKwkJLyogUmVhZCBuZXh0IEh1ZmZtYW4tY29kZWQgc3ltYm9sLiAqLworCQkvKiBOb3RlOiBJdCBpcyBmYXIgY2hlYXBlciB0byByZWFkIG1heExlbiBiaXRzIGFuZAorCQkgICBiYWNrIHVwIHRoYW4gaXQgaXMgdG8gcmVhZCBtaW5MZW4gYml0cyBhbmQgdGhlbiBhbgorCQkgICBhZGRpdGlvbmFsIGJpdCBhdCBhIHRpbWUsIHRlc3RpbmcgYXMgd2UgZ28uCisJCSAgIEJlY2F1c2UgdGhlcmUgaXMgYSB0cmFpbGluZyBsYXN0IGJsb2NrICh3aXRoIGZpbGUKKwkJICAgQ1JDKSwgdGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHRoZSBvdmVycmVhZCBjYXVzaW5nIGFuCisJCSAgIHVuZXhwZWN0ZWQgRU9GIGZvciBhIHZhbGlkIGNvbXByZXNzZWQgZmlsZS4gIEFzIGEKKwkJICAgZnVydGhlciBvcHRpbWl6YXRpb24sIHdlIGRvIHRoZSByZWFkIGlubGluZQorCQkgICAoZmFsbGluZyBiYWNrIHRvIGEgY2FsbCB0byBnZXRfYml0cyBpZiB0aGUgYnVmZmVyCisJCSAgIHJ1bnMgZHJ5KS4gIFRoZSBmb2xsb3dpbmcgKHVwIHRvIGdvdF9odWZmX2JpdHM6KSBpcworCQkgICBlcXVpdmFsZW50IHRvIGogPSBnZXRfYml0cyhiZCwgaHVmR3JvdXAtPm1heExlbik7CisJCSAqLworCQl3aGlsZSAoYmQtPmluYnVmQml0Q291bnQgPCBodWZHcm91cC0+bWF4TGVuKSB7CisJCQlpZiAoYmQtPmluYnVmUG9zID09IGJkLT5pbmJ1ZkNvdW50KSB7CisJCQkJaiA9IGdldF9iaXRzKGJkLCBodWZHcm91cC0+bWF4TGVuKTsKKwkJCQlnb3RvIGdvdF9odWZmX2JpdHM7CisJCQl9CisJCQliZC0+aW5idWZCaXRzID0KKwkJCQkoYmQtPmluYnVmQml0cyA8PCA4KXxiZC0+aW5idWZbYmQtPmluYnVmUG9zKytdOworCQkJYmQtPmluYnVmQml0Q291bnQgKz0gODsKKwkJfTsKKwkJYmQtPmluYnVmQml0Q291bnQgLT0gaHVmR3JvdXAtPm1heExlbjsKKwkJaiA9IChiZC0+aW5idWZCaXRzID4+IGJkLT5pbmJ1ZkJpdENvdW50KSYKKwkJCSgoMSA8PCBodWZHcm91cC0+bWF4TGVuKS0xKTsKK2dvdF9odWZmX2JpdHM6CisJCS8qIEZpZ3VyZSBob3cgaG93IG1hbnkgYml0cyBhcmUgaW4gbmV4dCBzeW1ib2wgYW5kCisJCSAqIHVuZ2V0IGV4dHJhcyAqLworCQlpID0gaHVmR3JvdXAtPm1pbkxlbjsKKwkJd2hpbGUgKGogPiBsaW1pdFtpXSkKKwkJCSsraTsKKwkJYmQtPmluYnVmQml0Q291bnQgKz0gKGh1Zkdyb3VwLT5tYXhMZW4gLSBpKTsKKwkJLyogSHVmZm1hbiBkZWNvZGUgdmFsdWUgdG8gZ2V0IG5leHRTeW0gKHdpdGggYm91bmRzIGNoZWNraW5nKSAqLworCQlpZiAoKGkgPiBodWZHcm91cC0+bWF4TGVuKQorCQkJfHwgKCgodW5zaWduZWQpKGogPSAoaj4+KGh1Zkdyb3VwLT5tYXhMZW4taSkpLWJhc2VbaV0pKQorCQkJCT49IE1BWF9TWU1CT0xTKSkKKwkJCXJldHVybiBSRVRWQUxfREFUQV9FUlJPUjsKKwkJbmV4dFN5bSA9IGh1Zkdyb3VwLT5wZXJtdXRlW2pdOworCQkvKiBXZSBoYXZlIG5vdyBkZWNvZGVkIHRoZSBzeW1ib2wsIHdoaWNoIGluZGljYXRlcworCQkgICBlaXRoZXIgYSBuZXcgbGl0ZXJhbCBieXRlLCBvciBhIHJlcGVhdGVkIHJ1biBvZiB0aGUKKwkJICAgbW9zdCByZWNlbnQgbGl0ZXJhbCBieXRlLiAgRmlyc3QsIGNoZWNrIGlmIG5leHRTeW0KKwkJICAgaW5kaWNhdGVzIGEgcmVwZWF0ZWQgcnVuLCBhbmQgaWYgc28gbG9vcCBjb2xsZWN0aW5nCisJCSAgIGhvdyBtYW55IHRpbWVzIHRvIHJlcGVhdCB0aGUgbGFzdCBsaXRlcmFsLiAqLworCQlpZiAoKCh1bnNpZ25lZCluZXh0U3ltKSA8PSBTWU1CT0xfUlVOQikgeyAvKiBSVU5BIG9yIFJVTkIgKi8KKwkJCS8qIElmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IHJ1biwgemVybyBvdXQKKwkJCSAqIGNvdW50ZXIgKi8KKwkJCWlmICghcnVuUG9zKSB7CisJCQkJcnVuUG9zID0gMTsKKwkJCQl0ID0gMDsKKwkJCX0KKwkJCS8qIE5lYXQgdHJpY2sgdGhhdCBzYXZlcyAxIHN5bWJvbDogaW5zdGVhZCBvZgorCQkJICAgb3ItaW5nIDAgb3IgMSBhdCBlYWNoIGJpdCBwb3NpdGlvbiwgYWRkIDEKKwkJCSAgIG9yIDIgaW5zdGVhZC4gIEZvciBleGFtcGxlLCAxMDExIGlzIDEgPDwgMAorCQkJICAgKyAxIDw8IDEgKyAyIDw8IDIuICAxMDEwIGlzIDIgPDwgMCArIDIgPDwgMQorCQkJICAgKyAxIDw8IDIuICBZb3UgY2FuIG1ha2UgYW55IGJpdCBwYXR0ZXJuCisJCQkgICB0aGF0IHdheSB1c2luZyAxIGxlc3Mgc3ltYm9sIHRoYW4gdGhlIGJhc2ljCisJCQkgICBvciAwLzEgbWV0aG9kIChleGNlcHQgYWxsIGJpdHMgMCwgd2hpY2gKKwkJCSAgIHdvdWxkIHVzZSBubyBzeW1ib2xzLCBidXQgYSBydW4gb2YgbGVuZ3RoIDAKKwkJCSAgIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBpbiB0aGlzIGNvbnRleHQpLgorCQkJICAgVGh1cyBzcGFjZSBpcyBzYXZlZC4gKi8KKwkJCXQgKz0gKHJ1blBvcyA8PCBuZXh0U3ltKTsKKwkJCS8qICtydW5Qb3MgaWYgUlVOQTsgKzIqcnVuUG9zIGlmIFJVTkIgKi8KKworCQkJcnVuUG9zIDw8PSAxOworCQkJY29udGludWU7CisJCX0KKwkJLyogV2hlbiB3ZSBoaXQgdGhlIGZpcnN0IG5vbi1ydW4gc3ltYm9sIGFmdGVyIGEgcnVuLAorCQkgICB3ZSBub3cga25vdyBob3cgbWFueSB0aW1lcyB0byByZXBlYXQgdGhlIGxhc3QKKwkJICAgbGl0ZXJhbCwgc28gYXBwZW5kIHRoYXQgbWFueSBjb3BpZXMgdG8gb3VyIGJ1ZmZlcgorCQkgICBvZiBkZWNvZGVkIHN5bWJvbHMgKGRidWYpIG5vdy4gIChUaGUgbGFzdCBsaXRlcmFsCisJCSAgIHVzZWQgaXMgdGhlIG9uZSBhdCB0aGUgaGVhZCBvZiB0aGUgbXRmU3ltYm9sCisJCSAgIGFycmF5LikgKi8KKwkJaWYgKHJ1blBvcykgeworCQkJcnVuUG9zID0gMDsKKwkJCWlmIChkYnVmQ291bnQrdCA+PSBkYnVmU2l6ZSkKKwkJCQlyZXR1cm4gUkVUVkFMX0RBVEFfRVJST1I7CisKKwkJCXVjID0gc3ltVG9CeXRlW210ZlN5bWJvbFswXV07CisJCQlieXRlQ291bnRbdWNdICs9IHQ7CisJCQl3aGlsZSAodC0tKQorCQkJCWRidWZbZGJ1ZkNvdW50KytdID0gdWM7CisJCX0KKwkJLyogSXMgdGhpcyB0aGUgdGVybWluYXRpbmcgc3ltYm9sPyAqLworCQlpZiAobmV4dFN5bSA+IHN5bVRvdGFsKQorCQkJYnJlYWs7CisJCS8qIEF0IHRoaXMgcG9pbnQsIG5leHRTeW0gaW5kaWNhdGVzIGEgbmV3IGxpdGVyYWwKKwkJICAgY2hhcmFjdGVyLiAgU3VidHJhY3Qgb25lIHRvIGdldCB0aGUgcG9zaXRpb24gaW4gdGhlCisJCSAgIE1URiBhcnJheSBhdCB3aGljaCB0aGlzIGxpdGVyYWwgaXMgY3VycmVudGx5IHRvIGJlCisJCSAgIGZvdW5kLiAgKE5vdGUgdGhhdCB0aGUgcmVzdWx0IGNhbid0IGJlIC0xIG9yIDAsCisJCSAgIGJlY2F1c2UgMCBhbmQgMSBhcmUgUlVOQSBhbmQgUlVOQi4gIEJ1dCBhbm90aGVyCisJCSAgIGluc3RhbmNlIG9mIHRoZSBmaXJzdCBzeW1ib2wgaW4gdGhlIG10ZiBhcnJheSwKKwkJICAgcG9zaXRpb24gMCwgd291bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYXMgcGFydCBvZiBhCisJCSAgIHJ1biBhYm92ZS4gIFRoZXJlZm9yZSAxIHVudXNlZCBtdGYgcG9zaXRpb24gbWludXMgMgorCQkgICBub24tbGl0ZXJhbCBuZXh0U3ltIHZhbHVlcyBlcXVhbHMgLTEuKSAqLworCQlpZiAoZGJ1ZkNvdW50ID49IGRidWZTaXplKQorCQkJcmV0dXJuIFJFVFZBTF9EQVRBX0VSUk9SOworCQlpID0gbmV4dFN5bSAtIDE7CisJCXVjID0gbXRmU3ltYm9sW2ldOworCQkvKiBBZGp1c3QgdGhlIE1URiBhcnJheS4gIFNpbmNlIHdlIHR5cGljYWxseSBleHBlY3QgdG8KKwkJICptb3ZlIG9ubHkgYSBzbWFsbCBudW1iZXIgb2Ygc3ltYm9scywgYW5kIGFyZSBib3VuZAorCQkgKmJ5IDI1NiBpbiBhbnkgY2FzZSwgdXNpbmcgbWVtbW92ZSBoZXJlIHdvdWxkCisJCSAqdHlwaWNhbGx5IGJlIGJpZ2dlciBhbmQgc2xvd2VyIGR1ZSB0byBmdW5jdGlvbiBjYWxsCisJCSAqb3ZlcmhlYWQgYW5kIG90aGVyIGFzc29ydGVkIHNldHVwIGNvc3RzLiAqLworCQlkbyB7CisJCQltdGZTeW1ib2xbaV0gPSBtdGZTeW1ib2xbaS0xXTsKKwkJfSB3aGlsZSAoLS1pKTsKKwkJbXRmU3ltYm9sWzBdID0gdWM7CisJCXVjID0gc3ltVG9CeXRlW3VjXTsKKwkJLyogV2UgaGF2ZSBvdXIgbGl0ZXJhbCBieXRlLiAgU2F2ZSBpdCBpbnRvIGRidWYuICovCisJCWJ5dGVDb3VudFt1Y10rKzsKKwkJZGJ1ZltkYnVmQ291bnQrK10gPSAodW5zaWduZWQgaW50KXVjOworCX0KKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSd2ZSByZWFkIGFsbCB0aGUgSHVmZm1hbi1jb2RlZCBzeW1ib2xzCisJICAgKGFuZCByZXBlYXRlZCBydW5zKSBmb3IgdGhpcyBibG9jayBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sCisJICAgYW5kIGRlY29kZWQgdGhlbSBpbnRvIHRoZSBpbnRlcm1lZGlhdGUgYnVmZmVyLiAgVGhlcmUgYXJlCisJICAgZGJ1ZkNvdW50IG1hbnkgZGVjb2RlZCBieXRlcyBpbiBkYnVmW10uICBOb3cgdW5kbyB0aGUKKwkgICBCdXJyb3dzLVdoZWVsZXIgdHJhbnNmb3JtIG9uIGRidWYuICBTZWUKKwkgICBodHRwOi8vZG9nbWEubmV0L21hcmtuL2FydGljbGVzL2J3dC9id3QuaHRtCisJICovCisJLyogVHVybiBieXRlQ291bnQgaW50byBjdW11bGF0aXZlIG9jY3VycmVuY2UgY291bnRzIG9mIDAgdG8gbi0xLiAqLworCWogPSAwOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlrID0gaitieXRlQ291bnRbaV07CisJCWJ5dGVDb3VudFtpXSA9IGo7CisJCWogPSBrOworCX0KKwkvKiBGaWd1cmUgb3V0IHdoYXQgb3JkZXIgZGJ1ZiB3b3VsZCBiZSBpbiBpZiB3ZSBzb3J0ZWQgaXQuICovCisJZm9yIChpID0gMDsgaSA8IGRidWZDb3VudDsgaSsrKSB7CisJCXVjID0gKHVuc2lnbmVkIGNoYXIpKGRidWZbaV0gJiAweGZmKTsKKwkJZGJ1ZltieXRlQ291bnRbdWNdXSB8PSAoaSA8PCA4KTsKKwkJYnl0ZUNvdW50W3VjXSsrOworCX0KKwkvKiBEZWNvZGUgZmlyc3QgYnl0ZSBieSBoYW5kIHRvIGluaXRpYWxpemUgInByZXZpb3VzIiBieXRlLgorCSAgIE5vdGUgdGhhdCBpdCBkb2Vzbid0IGdldCBvdXRwdXQsIGFuZCBpZiB0aGUgZmlyc3QgdGhyZWUKKwkgICBjaGFyYWN0ZXJzIGFyZSBpZGVudGljYWwgaXQgZG9lc24ndCBxdWFsaWZ5IGFzIGEgcnVuIChoZW5jZQorCSAgIHdyaXRlUnVuQ291bnRkb3duID0gNSkuICovCisJaWYgKGRidWZDb3VudCkgeworCQlpZiAob3JpZ1B0ciA+PSBkYnVmQ291bnQpCisJCQlyZXR1cm4gUkVUVkFMX0RBVEFfRVJST1I7CisJCWJkLT53cml0ZVBvcyA9IGRidWZbb3JpZ1B0cl07CisJCWJkLT53cml0ZUN1cnJlbnQgPSAodW5zaWduZWQgY2hhcikoYmQtPndyaXRlUG9zJjB4ZmYpOworCQliZC0+d3JpdGVQb3MgPj49IDg7CisJCWJkLT53cml0ZVJ1bkNvdW50ZG93biA9IDU7CisJfQorCWJkLT53cml0ZUNvdW50ID0gZGJ1ZkNvdW50OworCisJcmV0dXJuIFJFVFZBTF9PSzsKK30KKworLyogVW5kbyBidXJyb3dzLXdoZWVsZXIgdHJhbnNmb3JtIG9uIGludGVybWVkaWF0ZSBidWZmZXIgdG8gcHJvZHVjZSBvdXRwdXQuCisgICBJZiBzdGFydF9idW56aXAgd2FzIGluaXRpYWxpemVkIHdpdGggb3V0X2ZkID0tMSwgdGhlbiB1cCB0byBsZW4gYnl0ZXMgb2YKKyAgIGRhdGEgYXJlIHdyaXR0ZW4gdG8gb3V0YnVmLiAgUmV0dXJuIHZhbHVlIGlzIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yCisgICBlcnJvciAoYWxsIGVycm9ycyBhcmUgbmVnYXRpdmUgbnVtYmVycykuICBJZiBvdXRfZmQhPS0xLCBvdXRidWYgYW5kIGxlbgorICAgYXJlIGlnbm9yZWQsIGRhdGEgaXMgd3JpdHRlbiB0byBvdXRfZmQgYW5kIHJldHVybiBpcyBSRVRWQUxfT0sgb3IgZXJyb3IuCisqLworCitzdGF0aWMgaW50IElOSVQgcmVhZF9idW56aXAoc3RydWN0IGJ1bnppcF9kYXRhICpiZCwgY2hhciAqb3V0YnVmLCBpbnQgbGVuKQoreworCWNvbnN0IHVuc2lnbmVkIGludCAqZGJ1ZjsKKwlpbnQgcG9zLCB4Y3VycmVudCwgcHJldmlvdXMsIGdvdGNvdW50OworCisJLyogSWYgbGFzdCByZWFkIHdhcyBzaG9ydCBkdWUgdG8gZW5kIG9mIGZpbGUsIHJldHVybiBsYXN0IGJsb2NrIG5vdyAqLworCWlmIChiZC0+d3JpdGVDb3VudCA8IDApCisJCXJldHVybiBiZC0+d3JpdGVDb3VudDsKKworCWdvdGNvdW50ID0gMDsKKwlkYnVmID0gYmQtPmRidWY7CisJcG9zID0gYmQtPndyaXRlUG9zOworCXhjdXJyZW50ID0gYmQtPndyaXRlQ3VycmVudDsKKworCS8qIFdlIHdpbGwgYWx3YXlzIGhhdmUgcGVuZGluZyBkZWNvZGVkIGRhdGEgdG8gd3JpdGUgaW50byB0aGUgb3V0cHV0CisJICAgYnVmZmVyIHVubGVzcyB0aGlzIGlzIHRoZSB2ZXJ5IGZpcnN0IGNhbGwgKGluIHdoaWNoIGNhc2Ugd2UgaGF2ZW4ndAorCSAgIEh1ZmZtYW4tZGVjb2RlZCBhIGJsb2NrIGludG8gdGhlIGludGVybWVkaWF0ZSBidWZmZXIgeWV0KS4gKi8KKworCWlmIChiZC0+d3JpdGVDb3BpZXMpIHsKKwkJLyogSW5zaWRlIHRoZSBsb29wLCB3cml0ZUNvcGllcyBtZWFucyBleHRyYSBjb3BpZXMgKGJleW9uZCAxKSAqLworCQktLWJkLT53cml0ZUNvcGllczsKKwkJLyogTG9vcCBvdXRwdXR0aW5nIGJ5dGVzICovCisJCWZvciAoOzspIHsKKwkJCS8qIElmIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHNuYXBzaG90CisJCQkgKiBzdGF0ZSBhbmQgcmV0dXJuICovCisJCQlpZiAoZ290Y291bnQgPj0gbGVuKSB7CisJCQkJYmQtPndyaXRlUG9zID0gcG9zOworCQkJCWJkLT53cml0ZUN1cnJlbnQgPSB4Y3VycmVudDsKKwkJCQliZC0+d3JpdGVDb3BpZXMrKzsKKwkJCQlyZXR1cm4gbGVuOworCQkJfQorCQkJLyogV3JpdGUgbmV4dCBieXRlIGludG8gb3V0cHV0IGJ1ZmZlciwgdXBkYXRpbmcgQ1JDICovCisJCQlvdXRidWZbZ290Y291bnQrK10gPSB4Y3VycmVudDsKKwkJCWJkLT53cml0ZUNSQyA9ICgoKGJkLT53cml0ZUNSQykgPDwgOCkKKwkJCQleYmQtPmNyYzMyVGFibGVbKChiZC0+d3JpdGVDUkMpID4+IDI0KQorCQkJCV54Y3VycmVudF0pOworCQkJLyogTG9vcCBub3cgaWYgd2UncmUgb3V0cHV0dGluZyBtdWx0aXBsZQorCQkJICogY29waWVzIG9mIHRoaXMgYnl0ZSAqLworCQkJaWYgKGJkLT53cml0ZUNvcGllcykgeworCQkJCS0tYmQtPndyaXRlQ29waWVzOworCQkJCWNvbnRpbnVlOworCQkJfQorZGVjb2RlX25leHRfYnl0ZToKKwkJCWlmICghYmQtPndyaXRlQ291bnQtLSkKKwkJCQlicmVhazsKKwkJCS8qIEZvbGxvdyBzZXF1ZW5jZSB2ZWN0b3IgdG8gdW5kbworCQkJICogQnVycm93cy1XaGVlbGVyIHRyYW5zZm9ybSAqLworCQkJcHJldmlvdXMgPSB4Y3VycmVudDsKKwkJCXBvcyA9IGRidWZbcG9zXTsKKwkJCXhjdXJyZW50ID0gcG9zJjB4ZmY7CisJCQlwb3MgPj49IDg7CisJCQkvKiBBZnRlciAzIGNvbnNlY3V0aXZlIGNvcGllcyBvZiB0aGUgc2FtZQorCQkJICAgYnl0ZSwgdGhlIDR0aCBpcyBhIHJlcGVhdCBjb3VudC4gIFdlIGNvdW50CisJCQkgICBkb3duIGZyb20gNCBpbnN0ZWFkICpvZiBjb3VudGluZyB1cCBiZWNhdXNlCisJCQkgICB0ZXN0aW5nIGZvciBub24temVybyBpcyBmYXN0ZXIgKi8KKwkJCWlmICgtLWJkLT53cml0ZVJ1bkNvdW50ZG93bikgeworCQkJCWlmICh4Y3VycmVudCAhPSBwcmV2aW91cykKKwkJCQkJYmQtPndyaXRlUnVuQ291bnRkb3duID0gNDsKKwkJCX0gZWxzZSB7CisJCQkJLyogV2UgaGF2ZSBhIHJlcGVhdGVkIHJ1biwgdGhpcyBieXRlCisJCQkJICogaW5kaWNhdGVzIHRoZSBjb3VudCAqLworCQkJCWJkLT53cml0ZUNvcGllcyA9IHhjdXJyZW50OworCQkJCXhjdXJyZW50ID0gcHJldmlvdXM7CisJCQkJYmQtPndyaXRlUnVuQ291bnRkb3duID0gNTsKKwkJCQkvKiBTb21ldGltZXMgdGhlcmUgYXJlIGp1c3QgMyBieXRlcworCQkJCSAqIChydW4gbGVuZ3RoIDApICovCisJCQkJaWYgKCFiZC0+d3JpdGVDb3BpZXMpCisJCQkJCWdvdG8gZGVjb2RlX25leHRfYnl0ZTsKKwkJCQkvKiBTdWJ0cmFjdCB0aGUgMSBjb3B5IHdlJ2Qgb3V0cHV0CisJCQkJICogYW55d2F5IHRvIGdldCBleHRyYXMgKi8KKwkJCQktLWJkLT53cml0ZUNvcGllczsKKwkJCX0KKwkJfQorCQkvKiBEZWNvbXByZXNzaW9uIG9mIHRoaXMgYmxvY2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLworCQliZC0+d3JpdGVDUkMgPSB+YmQtPndyaXRlQ1JDOworCQliZC0+dG90YWxDUkMgPSAoKGJkLT50b3RhbENSQyA8PCAxKSB8CisJCQkJKGJkLT50b3RhbENSQyA+PiAzMSkpIF4gYmQtPndyaXRlQ1JDOworCQkvKiBJZiB0aGlzIGJsb2NrIGhhZCBhIENSQyBlcnJvciwgZm9yY2UgZmlsZSBsZXZlbCBDUkMgZXJyb3IuICovCisJCWlmIChiZC0+d3JpdGVDUkMgIT0gYmQtPmhlYWRlckNSQykgeworCQkJYmQtPnRvdGFsQ1JDID0gYmQtPmhlYWRlckNSQysxOworCQkJcmV0dXJuIFJFVFZBTF9MQVNUX0JMT0NLOworCQl9CisJfQorCisJLyogUmVmaWxsIHRoZSBpbnRlcm1lZGlhdGUgYnVmZmVyIGJ5IEh1ZmZtYW4tZGVjb2RpbmcgbmV4dAorCSAqIGJsb2NrIG9mIGlucHV0ICovCisJLyogKHByZXZpb3VzIGlzIGp1c3QgYSBjb252ZW5pZW50IHVudXNlZCB0ZW1wIHZhcmlhYmxlIGhlcmUpICovCisJcHJldmlvdXMgPSBnZXRfbmV4dF9ibG9jayhiZCk7CisJaWYgKHByZXZpb3VzKSB7CisJCWJkLT53cml0ZUNvdW50ID0gcHJldmlvdXM7CisJCXJldHVybiAocHJldmlvdXMgIT0gUkVUVkFMX0xBU1RfQkxPQ0spID8gcHJldmlvdXMgOiBnb3Rjb3VudDsKKwl9CisJYmQtPndyaXRlQ1JDID0gMHhmZmZmZmZmZlVMOworCXBvcyA9IGJkLT53cml0ZVBvczsKKwl4Y3VycmVudCA9IGJkLT53cml0ZUN1cnJlbnQ7CisJZ290byBkZWNvZGVfbmV4dF9ieXRlOworfQorCitzdGF0aWMgaW50IElOSVQgbm9maWxsKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gLTE7Cit9CisKKy8qIEFsbG9jYXRlIHRoZSBzdHJ1Y3R1cmUsIHJlYWQgZmlsZSBoZWFkZXIuICBJZiBpbl9mZCA9PS0xLCBpbmJ1ZiBtdXN0IGNvbnRhaW4KKyAgIGEgY29tcGxldGUgYnVuemlwIGZpbGUgKGxlbiBieXRlcyBsb25nKS4gIElmIGluX2ZkIT0tMSwgaW5idWYgYW5kIGxlbiBhcmUKKyAgIGlnbm9yZWQsIGFuZCBkYXRhIGlzIHJlYWQgZnJvbSBmaWxlIGhhbmRsZSBpbnRvIHRlbXBvcmFyeSBidWZmZXIuICovCitzdGF0aWMgaW50IElOSVQgc3RhcnRfYnVuemlwKHN0cnVjdCBidW56aXBfZGF0YSAqKmJkcCwgdm9pZCAqaW5idWYsIGludCBsZW4sCisJCQkgICAgIGludCAoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpKQoreworCXN0cnVjdCBidW56aXBfZGF0YSAqYmQ7CisJdW5zaWduZWQgaW50IGksIGosIGM7CisJY29uc3QgdW5zaWduZWQgaW50IEJaaDAgPQorCQkoKCh1bnNpZ25lZCBpbnQpJ0InKSA8PCAyNCkrKCgodW5zaWduZWQgaW50KSdaJykgPDwgMTYpCisJCSsoKCh1bnNpZ25lZCBpbnQpJ2gnKSA8PCA4KSsodW5zaWduZWQgaW50KScwJzsKKworCS8qIEZpZ3VyZSBvdXQgaG93IG11Y2ggZGF0YSB0byBhbGxvY2F0ZSAqLworCWkgPSBzaXplb2Yoc3RydWN0IGJ1bnppcF9kYXRhKTsKKworCS8qIEFsbG9jYXRlIGJ1bnppcF9kYXRhLiAgTW9zdCBmaWVsZHMgaW5pdGlhbGl6ZSB0byB6ZXJvLiAqLworCWJkID0gKmJkcCA9IG1hbGxvYyhpKTsKKwltZW1zZXQoYmQsIDAsIHNpemVvZihzdHJ1Y3QgYnVuemlwX2RhdGEpKTsKKwkvKiBTZXR1cCBpbnB1dCBidWZmZXIgKi8KKwliZC0+aW5idWYgPSBpbmJ1ZjsKKwliZC0+aW5idWZDb3VudCA9IGxlbjsKKwlpZiAoZmlsbCAhPSBOVUxMKQorCQliZC0+ZmlsbCA9IGZpbGw7CisJZWxzZQorCQliZC0+ZmlsbCA9IG5vZmlsbDsKKworCS8qIEluaXQgdGhlIENSQzMyIHRhYmxlIChiaWcgZW5kaWFuKSAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQljID0gaSA8PCAyNDsKKwkJZm9yIChqID0gODsgajsgai0tKQorCQkJYyA9IGMmMHg4MDAwMDAwMCA/IChjIDw8IDEpXjB4MDRjMTFkYjcgOiAoYyA8PCAxKTsKKwkJYmQtPmNyYzMyVGFibGVbaV0gPSBjOworCX0KKworCS8qIEVuc3VyZSB0aGF0IGZpbGUgc3RhcnRzIHdpdGggIkJaaFsnMSctJzknXS4iICovCisJaSA9IGdldF9iaXRzKGJkLCAzMik7CisJaWYgKCgodW5zaWduZWQgaW50KShpLUJaaDAtMSkpID49IDkpCisJCXJldHVybiBSRVRWQUxfTk9UX0JaSVBfREFUQTsKKworCS8qIEZvdXJ0aCBieXRlIChhc2NpaSAnMSctJzknKSwgaW5kaWNhdGVzIGJsb2NrIHNpemUgaW4gdW5pdHMgb2YgMTAwayBvZgorCSAgIHVuY29tcHJlc3NlZCBkYXRhLiAgQWxsb2NhdGUgaW50ZXJtZWRpYXRlIGJ1ZmZlciBmb3IgYmxvY2suICovCisJYmQtPmRidWZTaXplID0gMTAwMDAwKihpLUJaaDApOworCisJYmQtPmRidWYgPSBsYXJnZV9tYWxsb2MoYmQtPmRidWZTaXplICogc2l6ZW9mKGludCkpOworCXJldHVybiBSRVRWQUxfT0s7Cit9CisKKy8qIEV4YW1wbGUgdXNhZ2U6IGRlY29tcHJlc3Mgc3JjX2ZkIHRvIGRzdF9mZC4gIChTdG9wcyBhdCBlbmQgb2YgYnppcDIgZGF0YSwKKyAgIG5vdCBlbmQgb2YgZmlsZS4pICovCitTVEFUSUMgaW50IElOSVQgYnVuemlwMih1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCQlpbnQoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkJaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCisJCQl1bnNpZ25lZCBjaGFyICpvdXRidWYsCisJCQlpbnQgKnBvcywKKwkJCXZvaWQoKmVycm9yX2ZuKShjaGFyICp4KSkKK3sKKwlzdHJ1Y3QgYnVuemlwX2RhdGEgKmJkOworCWludCBpID0gLTE7CisJdW5zaWduZWQgY2hhciAqaW5idWY7CisKKwlzZXRfZXJyb3JfZm4oZXJyb3JfZm4pOworCWlmIChmbHVzaCkKKwkJb3V0YnVmID0gbWFsbG9jKEJaSVAyX0lPQlVGX1NJWkUpOworCWVsc2UKKwkJbGVuIC09IDQ7IC8qIFVuY29tcHJlc3NlZCBzaXplIGhhY2sgYWN0aXZlIGluIHByZS1ib290CisJCQkgICAgIGVudmlyb25tZW50ICovCisJaWYgKCFvdXRidWYpIHsKKwkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoYnVmKQorCQlpbmJ1ZiA9IGJ1ZjsKKwllbHNlCisJCWluYnVmID0gbWFsbG9jKEJaSVAyX0lPQlVGX1NJWkUpOworCWlmICghaW5idWYpIHsKKwkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnB1dCBidWZlciIpOworCQlnb3RvIGV4aXRfMDsKKwl9CisJaSA9IHN0YXJ0X2J1bnppcCgmYmQsIGluYnVmLCBsZW4sIGZpbGwpOworCWlmICghaSkgeworCQlmb3IgKDs7KSB7CisJCQlpID0gcmVhZF9idW56aXAoYmQsIG91dGJ1ZiwgQlpJUDJfSU9CVUZfU0laRSk7CisJCQlpZiAoaSA8PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKCFmbHVzaCkKKwkJCQlvdXRidWYgKz0gaTsKKwkJCWVsc2UKKwkJCQlpZiAoaSAhPSBmbHVzaChvdXRidWYsIGkpKSB7CisJCQkJCWkgPSBSRVRWQUxfVU5FWFBFQ1RFRF9PVVRQVVRfRU9GOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwl9CisJLyogQ2hlY2sgQ1JDIGFuZCByZWxlYXNlIG1lbW9yeSAqLworCWlmIChpID09IFJFVFZBTF9MQVNUX0JMT0NLKSB7CisJCWlmIChiZC0+aGVhZGVyQ1JDICE9IGJkLT50b3RhbENSQykKKwkJCWVycm9yKCJEYXRhIGludGVncml0eSBlcnJvciB3aGVuIGRlY29tcHJlc3NpbmcuIik7CisJCWVsc2UKKwkJCWkgPSBSRVRWQUxfT0s7CisJfSBlbHNlIGlmIChpID09IFJFVFZBTF9VTkVYUEVDVEVEX09VVFBVVF9FT0YpIHsKKwkJZXJyb3IoIkNvbXByZXNzZWQgZmlsZSBlbmRzIHVuZXhwZWN0ZWRseSIpOworCX0KKwlpZiAoYmQtPmRidWYpCisJCWxhcmdlX2ZyZWUoYmQtPmRidWYpOworCWlmIChwb3MpCisJCSpwb3MgPSBiZC0+aW5idWZQb3M7CisJZnJlZShiZCk7CisJaWYgKCFidWYpCisJCWZyZWUoaW5idWYpOworZXhpdF8wOgorCWlmIChmbHVzaCkKKwkJZnJlZShvdXRidWYpOworCXJldHVybiBpOworfQorCisjZGVmaW5lIGRlY29tcHJlc3MgYnVuemlwMgpkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIGIvbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOWEzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMKQEAgLTAsMCArMSwxNjcgQEAKKyNpZmRlZiBTVEFUSUMKKy8qIFByZS1ib290IGVudmlyb25tZW50OiBpbmNsdWRlZCAqLworCisvKiBwcmV2ZW50IGluY2x1c2lvbiBvZiBfTElOVVhfS0VSTkVMX0ggaW4gcHJlLWJvb3QgZW52aXJvbm1lbnQ6IGxvdHMKKyAqIGVycm9ycyBhYm91dCBjb25zb2xlX3ByaW50ayBldGMuLi4gb24gQVJNICovCisjZGVmaW5lIF9MSU5VWF9LRVJORUxfSAorCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZnRyZWVzLmMiCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZmZhc3QuYyIKKyNpbmNsdWRlICJ6bGliX2luZmxhdGUvaW5mbGF0ZS5jIgorCisjZWxzZSAvKiBTVEFUSUMgKi8KKy8qIGluaXRyYW1mcyBldCBhbDogbGlua2VkICovCisKKyNpbmNsdWRlIDxsaW51eC96dXRpbC5oPgorCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZnRyZWVzLmgiCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZmZhc3QuaCIKKyNpbmNsdWRlICJ6bGliX2luZmxhdGUvaW5mbGF0ZS5oIgorCisjaW5jbHVkZSAiemxpYl9pbmZsYXRlL2luZnV0aWwuaCIKKworI2VuZGlmIC8qIFNUQVRJQyAqLworCisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9tbS5oPgorCisjZGVmaW5lIElOQlVGX0xFTiAoMTYqMTAyNCkKKworLyogSW5jbHVkZWQgZnJvbSBpbml0cmFtZnMgZXQgYWwgY29kZSAqLworU1RBVElDIGludCBJTklUIGd1bnppcCh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCSAgICAgICBpbnQoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCQkgICAgICAgaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRfYnVmLAorCQkgICAgICAgaW50ICpwb3MsCisJCSAgICAgICB2b2lkKCplcnJvcl9mbikoY2hhciAqeCkpIHsKKwl1OCAqemJ1ZjsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RybTsKKwlpbnQgcmM7CisJc2l6ZV90IG91dF9sZW47CisKKwlzZXRfZXJyb3JfZm4oZXJyb3JfZm4pOworCXJjID0gLTE7CisJaWYgKGZsdXNoKSB7CisJCW91dF9sZW4gPSAweDgwMDA7IC8qIDMyIEsgKi8KKwkJb3V0X2J1ZiA9IG1hbGxvYyhvdXRfbGVuKTsKKwl9IGVsc2UgeworCQlvdXRfbGVuID0gMHg3ZmZmZmZmZjsgLyogbm8gbGltaXQgKi8KKwl9CisJaWYgKCFvdXRfYnVmKSB7CisJCWVycm9yKCJPdXQgb2YgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcgb3V0cHV0IGJ1ZmZlciIpOworCQlnb3RvIGd1bnppcF9ub21lbTE7CisJfQorCisJaWYgKGJ1ZikKKwkJemJ1ZiA9IGJ1ZjsKKwllbHNlIHsKKwkJemJ1ZiA9IG1hbGxvYyhJTkJVRl9MRU4pOworCQlsZW4gPSAwOworCX0KKwlpZiAoIXpidWYpIHsKKwkJZXJyb3IoIk91dCBvZiBtZW1vcnkgd2hpbGUgYWxsb2NhdGluZyBpbnB1dCBidWZmZXIiKTsKKwkJZ290byBndW56aXBfbm9tZW0yOworCX0KKworCXN0cm0gPSBtYWxsb2Moc2l6ZW9mKCpzdHJtKSk7CisJaWYgKHN0cm0gPT0gTlVMTCkgeworCQllcnJvcigiT3V0IG9mIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nIHpfc3RyZWFtIik7CisJCWdvdG8gZ3VuemlwX25vbWVtMzsKKwl9CisKKwlzdHJtLT53b3Jrc3BhY2UgPSBtYWxsb2MoZmx1c2ggPyB6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpIDoKKwkJCQkgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CisJaWYgKHN0cm0tPndvcmtzcGFjZSA9PSBOVUxMKSB7CisJCWVycm9yKCJPdXQgb2YgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcgd29ya3NwYWNlIik7CisJCWdvdG8gZ3VuemlwX25vbWVtNDsKKwl9CisKKwlpZiAobGVuID09IDApCisJCWxlbiA9IGZpbGwoemJ1ZiwgSU5CVUZfTEVOKTsKKworCS8qIHZlcmlmeSB0aGUgZ3ppcCBoZWFkZXIgKi8KKwlpZiAobGVuIDwgMTAgfHwKKwkgICB6YnVmWzBdICE9IDB4MWYgfHwgemJ1ZlsxXSAhPSAweDhiIHx8IHpidWZbMl0gIT0gMHgwOCkgeworCQlpZiAocG9zKQorCQkJKnBvcyA9IDA7CisJCWVycm9yKCJOb3QgYSBnemlwIGZpbGUiKTsKKwkJZ290byBndW56aXBfNTsKKwl9CisKKwkvKiBza2lwIG92ZXIgZ3ppcCBoZWFkZXIgKDFmLDhiLDA4Li4uIDEwIGJ5dGVzIHRvdGFsICsKKwkgKiBwb3NzaWJsZSBhc2NpeiBmaWxlbmFtZSkKKwkgKi8KKwlzdHJtLT5uZXh0X2luID0gemJ1ZiArIDEwOworCS8qIHNraXAgb3ZlciBhc2NpeiBmaWxlbmFtZSAqLworCWlmICh6YnVmWzNdICYgMHg4KSB7CisJCXdoaWxlIChzdHJtLT5uZXh0X2luWzBdKQorCQkJc3RybS0+bmV4dF9pbisrOworCQlzdHJtLT5uZXh0X2luKys7CisJfQorCXN0cm0tPmF2YWlsX2luID0gbGVuIC0gKHN0cm0tPm5leHRfaW4gLSB6YnVmKTsKKworCXN0cm0tPm5leHRfb3V0ID0gb3V0X2J1ZjsKKwlzdHJtLT5hdmFpbF9vdXQgPSBvdXRfbGVuOworCisJcmMgPSB6bGliX2luZmxhdGVJbml0MihzdHJtLCAtTUFYX1dCSVRTKTsKKworCWlmICghZmx1c2gpIHsKKwkJV1Moc3RybSktPmluZmxhdGVfc3RhdGUud3NpemUgPSAwOworCQlXUyhzdHJtKS0+aW5mbGF0ZV9zdGF0ZS53aW5kb3cgPSBOVUxMOworCX0KKworCXdoaWxlIChyYyA9PSBaX09LKSB7CisJCWlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisJCQkvKiBUT0RPOiBoYW5kbGUgY2FzZSB3aGVyZSBib3RoIHBvcyBhbmQgZmlsbCBhcmUgc2V0ICovCisJCQlsZW4gPSBmaWxsKHpidWYsIElOQlVGX0xFTik7CisJCQlpZiAobGVuIDwgMCkgeworCQkJCXJjID0gLTE7CisJCQkJZXJyb3IoInJlYWQgZXJyb3IiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cm0tPm5leHRfaW4gPSB6YnVmOworCQkJc3RybS0+YXZhaWxfaW4gPSBsZW47CisJCX0KKwkJcmMgPSB6bGliX2luZmxhdGUoc3RybSwgMCk7CisKKwkJLyogV3JpdGUgYW55IGRhdGEgZ2VuZXJhdGVkICovCisJCWlmIChmbHVzaCAmJiBzdHJtLT5uZXh0X291dCA+IG91dF9idWYpIHsKKwkJCWludCBsID0gc3RybS0+bmV4dF9vdXQgLSBvdXRfYnVmOworCQkJaWYgKGwgIT0gZmx1c2gob3V0X2J1ZiwgbCkpIHsKKwkJCQlyYyA9IC0xOworCQkJCWVycm9yKCJ3cml0ZSBlcnJvciIpOworCQkJCWJyZWFrOworCQkJfQorCQkJc3RybS0+bmV4dF9vdXQgPSBvdXRfYnVmOworCQkJc3RybS0+YXZhaWxfb3V0ID0gb3V0X2xlbjsKKwkJfQorCisJCS8qIGFmdGVyIFpfRklOSVNILCBvbmx5IFpfU1RSRUFNX0VORCBpcyAid2UgdW5wYWNrZWQgaXQgYWxsIiAqLworCQlpZiAocmMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChyYyAhPSBaX09LKSB7CisJCQllcnJvcigidW5jb21wcmVzc2lvbiBlcnJvciIpOworCQkJcmMgPSAtMTsKKwkJfQorCX0KKworCXpsaWJfaW5mbGF0ZUVuZChzdHJtKTsKKwlpZiAocG9zKQorCQkvKiBhZGQgKyA4IHRvIHNraXAgb3ZlciB0cmFpbGVyICovCisJCSpwb3MgPSBzdHJtLT5uZXh0X2luIC0gemJ1Zis4OworCitndW56aXBfNToKKwlmcmVlKHN0cm0tPndvcmtzcGFjZSk7CitndW56aXBfbm9tZW00OgorCWZyZWUoc3RybSk7CitndW56aXBfbm9tZW0zOgorCWlmICghYnVmKQorCQlmcmVlKHpidWYpOworZ3VuemlwX25vbWVtMjoKKwlpZiAoZmx1c2gpCisJCWZyZWUob3V0X2J1Zik7CitndW56aXBfbm9tZW0xOgorCXJldHVybiByYzsgLyogcmV0dXJucyBaX09LICgwKSBpZiBzdWNjZXNzZnVsICovCit9CisKKyNkZWZpbmUgZGVjb21wcmVzcyBndW56aXAKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIGIvbGliL2RlY29tcHJlc3NfdW5sem1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2ZjJmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kZWNvbXByZXNzX3VubHptYS5jCkBAIC0wLDAgKzEsNjQ3IEBACisvKiBMem1hIGRlY29tcHJlc3NvciBmb3IgTGludXgga2VybmVsLiBTaGFtZWxlc3NseSBzbmFyZmVkCisgKmZyb20gYnVzeWJveCAxLjEuMQorICoKKyAqTGludXgga2VybmVsIGFkYXB0YXRpb24KKyAqQ29weXJpZ2h0IChDKSAyMDA2ICBBbGFpbiA8IGFsYWluQGtuYWZmLmx1ID4KKyAqCisgKkJhc2VkIG9uIHNtYWxsIGx6bWEgZGVmbGF0ZSBpbXBsZW1lbnRhdGlvbi9TbWFsbCByYW5nZSBjb2RlcgorICppbXBsZW1lbnRhdGlvbiBmb3IgbHptYS4KKyAqQ29weXJpZ2h0IChDKSAyMDA2ICBBdXJlbGllbiBKYWNvYnMgPCBhdXJlbEBnbnVhZ2Uub3JnID4KKyAqCisgKkJhc2VkIG9uIEx6bWFEZWNvZGUuYyBmcm9tIHRoZSBMWk1BIFNESyA0LjIyIChodHRwOi8vd3d3LjctemlwLm9yZy8pCisgKkNvcHlyaWdodCAoQykgMTk5OS0yMDA1ICBJZ29yIFBhdmxvdgorICoKKyAqQ29weXJpZ2h0cyBvZiB0aGUgcGFydHMsIHNlZSBoZWFkZXJzIGJlbG93LgorICoKKyAqCisgKlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICpMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICpGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgU1RBVElDCisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy91bmx6bWEuaD4KKyNlbmRpZiAvKiBTVEFUSUMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvbW0uaD4KKworI2RlZmluZQlNSU4oYSwgYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorCitzdGF0aWMgbG9uZyBsb25nIElOSVQgcmVhZF9pbnQodW5zaWduZWQgY2hhciAqcHRyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlsb25nIGxvbmcgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCXJldCA9IChyZXQgPDwgOCkgfCBwdHJbc2l6ZS1pLTFdOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgRU5ESUFOX0NPTlZFUlQoeCkgXAorICB4ID0gKHR5cGVvZih4KSlyZWFkX2ludCgodW5zaWduZWQgY2hhciAqKSZ4LCBzaXplb2YoeCkpCisKKworLyogU21hbGwgcmFuZ2UgY29kZXIgaW1wbGVtZW50YXRpb24gZm9yIGx6bWEuCisgKkNvcHlyaWdodCAoQykgMjAwNiAgQXVyZWxpZW4gSmFjb2JzIDwgYXVyZWxAZ251YWdlLm9yZyA+CisgKgorICpCYXNlZCBvbiBMem1hRGVjb2RlLmMgZnJvbSB0aGUgTFpNQSBTREsgNC4yMiAoaHR0cDovL3d3dy43LXppcC5vcmcvKQorICpDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSAgSWdvciBQYXZsb3YKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBMWk1BX0lPQlVGX1NJWkUJMHgxMDAwMAorCitzdHJ1Y3QgcmMgeworCWludCAoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpOworCXVpbnQ4X3QgKnB0cjsKKwl1aW50OF90ICpidWZmZXI7CisJdWludDhfdCAqYnVmZmVyX2VuZDsKKwlpbnQgYnVmZmVyX3NpemU7CisJdWludDMyX3QgY29kZTsKKwl1aW50MzJfdCByYW5nZTsKKwl1aW50MzJfdCBib3VuZDsKK307CisKKworI2RlZmluZSBSQ19UT1BfQklUUyAyNAorI2RlZmluZSBSQ19NT1ZFX0JJVFMgNQorI2RlZmluZSBSQ19NT0RFTF9UT1RBTF9CSVRTIDExCisKKworLyogQ2FsbGVkIHR3aWNlOiBvbmNlIGF0IHN0YXJ0dXAgYW5kIG9uY2UgaW4gcmNfbm9ybWFsaXplKCkgKi8KK3N0YXRpYyB2b2lkIElOSVQgcmNfcmVhZChzdHJ1Y3QgcmMgKnJjKQoreworCXJjLT5idWZmZXJfc2l6ZSA9IHJjLT5maWxsKChjaGFyICopcmMtPmJ1ZmZlciwgTFpNQV9JT0JVRl9TSVpFKTsKKwlpZiAocmMtPmJ1ZmZlcl9zaXplIDw9IDApCisJCWVycm9yKCJ1bmV4cGVjdGVkIEVPRiIpOworCXJjLT5wdHIgPSByYy0+YnVmZmVyOworCXJjLT5idWZmZXJfZW5kID0gcmMtPmJ1ZmZlciArIHJjLT5idWZmZXJfc2l6ZTsKK30KKworLyogQ2FsbGVkIG9uY2UgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIHJjX2luaXQoc3RydWN0IHJjICpyYywKKwkJCQkgICAgICAgaW50ICgqZmlsbCkodm9pZCosIHVuc2lnbmVkIGludCksCisJCQkJICAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQoreworCXJjLT5maWxsID0gZmlsbDsKKwlyYy0+YnVmZmVyID0gKHVpbnQ4X3QgKilidWZmZXI7CisJcmMtPmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemU7CisJcmMtPmJ1ZmZlcl9lbmQgPSByYy0+YnVmZmVyICsgcmMtPmJ1ZmZlcl9zaXplOworCXJjLT5wdHIgPSByYy0+YnVmZmVyOworCisJcmMtPmNvZGUgPSAwOworCXJjLT5yYW5nZSA9IDB4RkZGRkZGRkY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIHJjX2luaXRfY29kZShzdHJ1Y3QgcmMgKnJjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAocmMtPnB0ciA+PSByYy0+YnVmZmVyX2VuZCkKKwkJCXJjX3JlYWQocmMpOworCQlyYy0+Y29kZSA9IChyYy0+Y29kZSA8PCA4KSB8ICpyYy0+cHRyKys7CisJfQorfQorCisKKy8qIENhbGxlZCBvbmNlLiBUT0RPOiBiYl9tYXliZV9mcmVlKCkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJTklUIHJjX2ZyZWUoc3RydWN0IHJjICpyYykKK3sKKwlmcmVlKHJjLT5idWZmZXIpOworfQorCisvKiBDYWxsZWQgdHdpY2UsIGJ1dCBvbmUgY2FsbHNpdGUgaXMgaW4gaW5saW5lJ2QgcmNfaXNfYml0XzBfaGVscGVyKCkgKi8KK3N0YXRpYyB2b2lkIElOSVQgcmNfZG9fbm9ybWFsaXplKHN0cnVjdCByYyAqcmMpCit7CisJaWYgKHJjLT5wdHIgPj0gcmMtPmJ1ZmZlcl9lbmQpCisJCXJjX3JlYWQocmMpOworCXJjLT5yYW5nZSA8PD0gODsKKwlyYy0+Y29kZSA9IChyYy0+Y29kZSA8PCA4KSB8ICpyYy0+cHRyKys7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVCByY19ub3JtYWxpemUoc3RydWN0IHJjICpyYykKK3sKKwlpZiAocmMtPnJhbmdlIDwgKDEgPDwgUkNfVE9QX0JJVFMpKQorCQlyY19kb19ub3JtYWxpemUocmMpOworfQorCisvKiBDYWxsZWQgOSB0aW1lcyAqLworLyogV2h5IHJjX2lzX2JpdF8wX2hlbHBlciBleGlzdHM/CisgKkJlY2F1c2Ugd2Ugd2FudCB0byBhbHdheXMgZXhwb3NlIChyYy0+Y29kZSA8IHJjLT5ib3VuZCkgdG8gb3B0aW1pemVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgSU5JVCByY19pc19iaXRfMF9oZWxwZXIoc3RydWN0IHJjICpyYywgdWludDE2X3QgKnApCit7CisJcmNfbm9ybWFsaXplKHJjKTsKKwlyYy0+Ym91bmQgPSAqcCAqIChyYy0+cmFuZ2UgPj4gUkNfTU9ERUxfVE9UQUxfQklUUyk7CisJcmV0dXJuIHJjLT5ib3VuZDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IElOSVQgcmNfaXNfYml0XzAoc3RydWN0IHJjICpyYywgdWludDE2X3QgKnApCit7CisJdWludDMyX3QgdCA9IHJjX2lzX2JpdF8wX2hlbHBlcihyYywgcCk7CisJcmV0dXJuIHJjLT5jb2RlIDwgdDsKK30KKworLyogQ2FsbGVkIH4xMCB0aW1lcywgYnV0IHZlcnkgc21hbGwsIHRodXMgaW5saW5lZCAqLworc3RhdGljIGlubGluZSB2b2lkIElOSVQgcmNfdXBkYXRlX2JpdF8wKHN0cnVjdCByYyAqcmMsIHVpbnQxNl90ICpwKQoreworCXJjLT5yYW5nZSA9IHJjLT5ib3VuZDsKKwkqcCArPSAoKDEgPDwgUkNfTU9ERUxfVE9UQUxfQklUUykgLSAqcCkgPj4gUkNfTU9WRV9CSVRTOworfQorc3RhdGljIGlubGluZSB2b2lkIHJjX3VwZGF0ZV9iaXRfMShzdHJ1Y3QgcmMgKnJjLCB1aW50MTZfdCAqcCkKK3sKKwlyYy0+cmFuZ2UgLT0gcmMtPmJvdW5kOworCXJjLT5jb2RlIC09IHJjLT5ib3VuZDsKKwkqcCAtPSAqcCA+PiBSQ19NT1ZFX0JJVFM7Cit9CisKKy8qIENhbGxlZCA0IHRpbWVzIGluIHVubHptYSBsb29wICovCitzdGF0aWMgaW50IElOSVQgcmNfZ2V0X2JpdChzdHJ1Y3QgcmMgKnJjLCB1aW50MTZfdCAqcCwgaW50ICpzeW1ib2wpCit7CisJaWYgKHJjX2lzX2JpdF8wKHJjLCBwKSkgeworCQlyY191cGRhdGVfYml0XzAocmMsIHApOworCQkqc3ltYm9sICo9IDI7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJjX3VwZGF0ZV9iaXRfMShyYywgcCk7CisJCSpzeW1ib2wgPSAqc3ltYm9sICogMiArIDE7CisJCXJldHVybiAxOworCX0KK30KKworLyogQ2FsbGVkIG9uY2UgKi8KK3N0YXRpYyBpbmxpbmUgaW50IElOSVQgcmNfZGlyZWN0X2JpdChzdHJ1Y3QgcmMgKnJjKQoreworCXJjX25vcm1hbGl6ZShyYyk7CisJcmMtPnJhbmdlID4+PSAxOworCWlmIChyYy0+Y29kZSA+PSByYy0+cmFuZ2UpIHsKKwkJcmMtPmNvZGUgLT0gcmMtPnJhbmdlOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCB0d2ljZSAqLworc3RhdGljIGlubGluZSB2b2lkIElOSVQKK3JjX2JpdF90cmVlX2RlY29kZShzdHJ1Y3QgcmMgKnJjLCB1aW50MTZfdCAqcCwgaW50IG51bV9sZXZlbHMsIGludCAqc3ltYm9sKQoreworCWludCBpID0gbnVtX2xldmVsczsKKworCSpzeW1ib2wgPSAxOworCXdoaWxlIChpLS0pCisJCXJjX2dldF9iaXQocmMsIHAgKyAqc3ltYm9sLCBzeW1ib2wpOworCSpzeW1ib2wgLT0gMSA8PCBudW1fbGV2ZWxzOworfQorCisKKy8qCisgKiBTbWFsbCBsem1hIGRlZmxhdGUgaW1wbGVtZW50YXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEF1cmVsaWVuIEphY29icyA8IGF1cmVsQGdudWFnZS5vcmcgPgorICoKKyAqIEJhc2VkIG9uIEx6bWFEZWNvZGUuYyBmcm9tIHRoZSBMWk1BIFNESyA0LjIyIChodHRwOi8vd3d3LjctemlwLm9yZy8pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSAgSWdvciBQYXZsb3YKKyAqLworCisKK3N0cnVjdCBsem1hX2hlYWRlciB7CisJdWludDhfdCBwb3M7CisJdWludDMyX3QgZGljdF9zaXplOworCXVpbnQ2NF90IGRzdF9zaXplOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworCisKKyNkZWZpbmUgTFpNQV9CQVNFX1NJWkUgMTg0NgorI2RlZmluZSBMWk1BX0xJVF9TSVpFIDc2OAorCisjZGVmaW5lIExaTUFfTlVNX1BPU19CSVRTX01BWCA0CisKKyNkZWZpbmUgTFpNQV9MRU5fTlVNX0xPV19CSVRTIDMKKyNkZWZpbmUgTFpNQV9MRU5fTlVNX01JRF9CSVRTIDMKKyNkZWZpbmUgTFpNQV9MRU5fTlVNX0hJR0hfQklUUyA4CisKKyNkZWZpbmUgTFpNQV9MRU5fQ0hPSUNFIDAKKyNkZWZpbmUgTFpNQV9MRU5fQ0hPSUNFXzIgKExaTUFfTEVOX0NIT0lDRSArIDEpCisjZGVmaW5lIExaTUFfTEVOX0xPVyAoTFpNQV9MRU5fQ0hPSUNFXzIgKyAxKQorI2RlZmluZSBMWk1BX0xFTl9NSUQgKExaTUFfTEVOX0xPVyBcCisJCSAgICAgICsgKDEgPDwgKExaTUFfTlVNX1BPU19CSVRTX01BWCArIExaTUFfTEVOX05VTV9MT1dfQklUUykpKQorI2RlZmluZSBMWk1BX0xFTl9ISUdIIChMWk1BX0xFTl9NSUQgXAorCQkgICAgICAgKygxIDw8IChMWk1BX05VTV9QT1NfQklUU19NQVggKyBMWk1BX0xFTl9OVU1fTUlEX0JJVFMpKSkKKyNkZWZpbmUgTFpNQV9OVU1fTEVOX1BST0JTIChMWk1BX0xFTl9ISUdIICsgKDEgPDwgTFpNQV9MRU5fTlVNX0hJR0hfQklUUykpCisKKyNkZWZpbmUgTFpNQV9OVU1fU1RBVEVTIDEyCisjZGVmaW5lIExaTUFfTlVNX0xJVF9TVEFURVMgNworCisjZGVmaW5lIExaTUFfU1RBUlRfUE9TX01PREVMX0lOREVYIDQKKyNkZWZpbmUgTFpNQV9FTkRfUE9TX01PREVMX0lOREVYIDE0CisjZGVmaW5lIExaTUFfTlVNX0ZVTExfRElTVEFOQ0VTICgxIDw8IChMWk1BX0VORF9QT1NfTU9ERUxfSU5ERVggPj4gMSkpCisKKyNkZWZpbmUgTFpNQV9OVU1fUE9TX1NMT1RfQklUUyA2CisjZGVmaW5lIExaTUFfTlVNX0xFTl9UT19QT1NfU1RBVEVTIDQKKworI2RlZmluZSBMWk1BX05VTV9BTElHTl9CSVRTIDQKKworI2RlZmluZSBMWk1BX01BVENIX01JTl9MRU4gMgorCisjZGVmaW5lIExaTUFfSVNfTUFUQ0ggMAorI2RlZmluZSBMWk1BX0lTX1JFUCAoTFpNQV9JU19NQVRDSCArIChMWk1BX05VTV9TVEFURVMgPDwgTFpNQV9OVU1fUE9TX0JJVFNfTUFYKSkKKyNkZWZpbmUgTFpNQV9JU19SRVBfRzAgKExaTUFfSVNfUkVQICsgTFpNQV9OVU1fU1RBVEVTKQorI2RlZmluZSBMWk1BX0lTX1JFUF9HMSAoTFpNQV9JU19SRVBfRzAgKyBMWk1BX05VTV9TVEFURVMpCisjZGVmaW5lIExaTUFfSVNfUkVQX0cyIChMWk1BX0lTX1JFUF9HMSArIExaTUFfTlVNX1NUQVRFUykKKyNkZWZpbmUgTFpNQV9JU19SRVBfMF9MT05HIChMWk1BX0lTX1JFUF9HMiArIExaTUFfTlVNX1NUQVRFUykKKyNkZWZpbmUgTFpNQV9QT1NfU0xPVCAoTFpNQV9JU19SRVBfMF9MT05HIFwKKwkJICAgICAgICsgKExaTUFfTlVNX1NUQVRFUyA8PCBMWk1BX05VTV9QT1NfQklUU19NQVgpKQorI2RlZmluZSBMWk1BX1NQRUNfUE9TIChMWk1BX1BPU19TTE9UIFwKKwkJICAgICAgICsoTFpNQV9OVU1fTEVOX1RPX1BPU19TVEFURVMgPDwgTFpNQV9OVU1fUE9TX1NMT1RfQklUUykpCisjZGVmaW5lIExaTUFfQUxJR04gKExaTUFfU1BFQ19QT1MgXAorCQkgICAgKyBMWk1BX05VTV9GVUxMX0RJU1RBTkNFUyAtIExaTUFfRU5EX1BPU19NT0RFTF9JTkRFWCkKKyNkZWZpbmUgTFpNQV9MRU5fQ09ERVIgKExaTUFfQUxJR04gKyAoMSA8PCBMWk1BX05VTV9BTElHTl9CSVRTKSkKKyNkZWZpbmUgTFpNQV9SRVBfTEVOX0NPREVSIChMWk1BX0xFTl9DT0RFUiArIExaTUFfTlVNX0xFTl9QUk9CUykKKyNkZWZpbmUgTFpNQV9MSVRFUkFMIChMWk1BX1JFUF9MRU5fQ09ERVIgKyBMWk1BX05VTV9MRU5fUFJPQlMpCisKKworc3RydWN0IHdyaXRlciB7CisJdWludDhfdCAqYnVmZmVyOworCXVpbnQ4X3QgcHJldmlvdXNfYnl0ZTsKKwlzaXplX3QgYnVmZmVyX3BvczsKKwlpbnQgYnVmc2l6ZTsKKwlzaXplX3QgZ2xvYmFsX3BvczsKKwlpbnQoKmZsdXNoKSh2b2lkKiwgdW5zaWduZWQgaW50KTsKKwlzdHJ1Y3QgbHptYV9oZWFkZXIgKmhlYWRlcjsKK307CisKK3N0cnVjdCBjc3RhdGUgeworCWludCBzdGF0ZTsKKwl1aW50MzJfdCByZXAwLCByZXAxLCByZXAyLCByZXAzOworfTsKKworc3RhdGljIGlubGluZSBzaXplX3QgSU5JVCBnZXRfcG9zKHN0cnVjdCB3cml0ZXIgKndyKQoreworCXJldHVybgorCQl3ci0+Z2xvYmFsX3BvcyArIHdyLT5idWZmZXJfcG9zOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgSU5JVCBwZWVrX29sZF9ieXRlKHN0cnVjdCB3cml0ZXIgKndyLAorCQkJCQkJdWludDMyX3Qgb2ZmcykKK3sKKwlpZiAoIXdyLT5mbHVzaCkgeworCQlpbnQzMl90IHBvczsKKwkJd2hpbGUgKG9mZnMgPiB3ci0+aGVhZGVyLT5kaWN0X3NpemUpCisJCQlvZmZzIC09IHdyLT5oZWFkZXItPmRpY3Rfc2l6ZTsKKwkJcG9zID0gd3ItPmJ1ZmZlcl9wb3MgLSBvZmZzOworCQlyZXR1cm4gd3ItPmJ1ZmZlcltwb3NdOworCX0gZWxzZSB7CisJCXVpbnQzMl90IHBvcyA9IHdyLT5idWZmZXJfcG9zIC0gb2ZmczsKKwkJd2hpbGUgKHBvcyA+PSB3ci0+aGVhZGVyLT5kaWN0X3NpemUpCisJCQlwb3MgKz0gd3ItPmhlYWRlci0+ZGljdF9zaXplOworCQlyZXR1cm4gd3ItPmJ1ZmZlcltwb3NdOworCX0KKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVCB3cml0ZV9ieXRlKHN0cnVjdCB3cml0ZXIgKndyLCB1aW50OF90IGJ5dGUpCit7CisJd3ItPmJ1ZmZlclt3ci0+YnVmZmVyX3BvcysrXSA9IHdyLT5wcmV2aW91c19ieXRlID0gYnl0ZTsKKwlpZiAod3ItPmZsdXNoICYmIHdyLT5idWZmZXJfcG9zID09IHdyLT5oZWFkZXItPmRpY3Rfc2l6ZSkgeworCQl3ci0+YnVmZmVyX3BvcyA9IDA7CisJCXdyLT5nbG9iYWxfcG9zICs9IHdyLT5oZWFkZXItPmRpY3Rfc2l6ZTsKKwkJd3ItPmZsdXNoKChjaGFyICopd3ItPmJ1ZmZlciwgd3ItPmhlYWRlci0+ZGljdF9zaXplKTsKKwl9Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIElOSVQgY29weV9ieXRlKHN0cnVjdCB3cml0ZXIgKndyLCB1aW50MzJfdCBvZmZzKQoreworCXdyaXRlX2J5dGUod3IsIHBlZWtfb2xkX2J5dGUod3IsIG9mZnMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIElOSVQgY29weV9ieXRlcyhzdHJ1Y3Qgd3JpdGVyICp3ciwKKwkJCQkJIHVpbnQzMl90IHJlcDAsIGludCBsZW4pCit7CisJZG8geworCQljb3B5X2J5dGUod3IsIHJlcDApOworCQlsZW4tLTsKKwl9IHdoaWxlIChsZW4gIT0gMCAmJiB3ci0+YnVmZmVyX3BvcyA8IHdyLT5oZWFkZXItPmRzdF9zaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIElOSVQgcHJvY2Vzc19iaXQwKHN0cnVjdCB3cml0ZXIgKndyLCBzdHJ1Y3QgcmMgKnJjLAorCQkJCSAgICAgc3RydWN0IGNzdGF0ZSAqY3N0LCB1aW50MTZfdCAqcCwKKwkJCQkgICAgIGludCBwb3Nfc3RhdGUsIHVpbnQxNl90ICpwcm9iLAorCQkJCSAgICAgaW50IGxjLCB1aW50MzJfdCBsaXRlcmFsX3Bvc19tYXNrKSB7CisJaW50IG1pID0gMTsKKwlyY191cGRhdGVfYml0XzAocmMsIHByb2IpOworCXByb2IgPSAocCArIExaTUFfTElURVJBTCArCisJCShMWk1BX0xJVF9TSVpFCisJCSAqICgoKGdldF9wb3Mod3IpICYgbGl0ZXJhbF9wb3NfbWFzaykgPDwgbGMpCisJCSAgICArICh3ci0+cHJldmlvdXNfYnl0ZSA+PiAoOCAtIGxjKSkpKQorCQkpOworCisJaWYgKGNzdC0+c3RhdGUgPj0gTFpNQV9OVU1fTElUX1NUQVRFUykgeworCQlpbnQgbWF0Y2hfYnl0ZSA9IHBlZWtfb2xkX2J5dGUod3IsIGNzdC0+cmVwMCk7CisJCWRvIHsKKwkJCWludCBiaXQ7CisJCQl1aW50MTZfdCAqcHJvYl9saXQ7CisKKwkJCW1hdGNoX2J5dGUgPDw9IDE7CisJCQliaXQgPSBtYXRjaF9ieXRlICYgMHgxMDA7CisJCQlwcm9iX2xpdCA9IHByb2IgKyAweDEwMCArIGJpdCArIG1pOworCQkJaWYgKHJjX2dldF9iaXQocmMsIHByb2JfbGl0LCAmbWkpKSB7CisJCQkJaWYgKCFiaXQpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoYml0KQorCQkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAobWkgPCAweDEwMCk7CisJfQorCXdoaWxlIChtaSA8IDB4MTAwKSB7CisJCXVpbnQxNl90ICpwcm9iX2xpdCA9IHByb2IgKyBtaTsKKwkJcmNfZ2V0X2JpdChyYywgcHJvYl9saXQsICZtaSk7CisJfQorCXdyaXRlX2J5dGUod3IsIG1pKTsKKwlpZiAoY3N0LT5zdGF0ZSA8IDQpCisJCWNzdC0+c3RhdGUgPSAwOworCWVsc2UgaWYgKGNzdC0+c3RhdGUgPCAxMCkKKwkJY3N0LT5zdGF0ZSAtPSAzOworCWVsc2UKKwkJY3N0LT5zdGF0ZSAtPSA2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVCBwcm9jZXNzX2JpdDEoc3RydWN0IHdyaXRlciAqd3IsIHN0cnVjdCByYyAqcmMsCisJCQkJCSAgICBzdHJ1Y3QgY3N0YXRlICpjc3QsIHVpbnQxNl90ICpwLAorCQkJCQkgICAgaW50IHBvc19zdGF0ZSwgdWludDE2X3QgKnByb2IpIHsKKyAgaW50IG9mZnNldDsKKwl1aW50MTZfdCAqcHJvYl9sZW47CisJaW50IG51bV9iaXRzOworCWludCBsZW47CisKKwlyY191cGRhdGVfYml0XzEocmMsIHByb2IpOworCXByb2IgPSBwICsgTFpNQV9JU19SRVAgKyBjc3QtPnN0YXRlOworCWlmIChyY19pc19iaXRfMChyYywgcHJvYikpIHsKKwkJcmNfdXBkYXRlX2JpdF8wKHJjLCBwcm9iKTsKKwkJY3N0LT5yZXAzID0gY3N0LT5yZXAyOworCQljc3QtPnJlcDIgPSBjc3QtPnJlcDE7CisJCWNzdC0+cmVwMSA9IGNzdC0+cmVwMDsKKwkJY3N0LT5zdGF0ZSA9IGNzdC0+c3RhdGUgPCBMWk1BX05VTV9MSVRfU1RBVEVTID8gMCA6IDM7CisJCXByb2IgPSBwICsgTFpNQV9MRU5fQ09ERVI7CisJfSBlbHNlIHsKKwkJcmNfdXBkYXRlX2JpdF8xKHJjLCBwcm9iKTsKKwkJcHJvYiA9IHAgKyBMWk1BX0lTX1JFUF9HMCArIGNzdC0+c3RhdGU7CisJCWlmIChyY19pc19iaXRfMChyYywgcHJvYikpIHsKKwkJCXJjX3VwZGF0ZV9iaXRfMChyYywgcHJvYik7CisJCQlwcm9iID0gKHAgKyBMWk1BX0lTX1JFUF8wX0xPTkcKKwkJCQkrIChjc3QtPnN0YXRlIDw8CisJCQkJICAgTFpNQV9OVU1fUE9TX0JJVFNfTUFYKSArCisJCQkJcG9zX3N0YXRlKTsKKwkJCWlmIChyY19pc19iaXRfMChyYywgcHJvYikpIHsKKwkJCQlyY191cGRhdGVfYml0XzAocmMsIHByb2IpOworCisJCQkJY3N0LT5zdGF0ZSA9IGNzdC0+c3RhdGUgPCBMWk1BX05VTV9MSVRfU1RBVEVTID8KKwkJCQkJOSA6IDExOworCQkJCWNvcHlfYnl0ZSh3ciwgY3N0LT5yZXAwKTsKKwkJCQlyZXR1cm47CisJCQl9IGVsc2UgeworCQkJCXJjX3VwZGF0ZV9iaXRfMShyYywgcHJvYik7CisJCQl9CisJCX0gZWxzZSB7CisJCQl1aW50MzJfdCBkaXN0YW5jZTsKKworCQkJcmNfdXBkYXRlX2JpdF8xKHJjLCBwcm9iKTsKKwkJCXByb2IgPSBwICsgTFpNQV9JU19SRVBfRzEgKyBjc3QtPnN0YXRlOworCQkJaWYgKHJjX2lzX2JpdF8wKHJjLCBwcm9iKSkgeworCQkJCXJjX3VwZGF0ZV9iaXRfMChyYywgcHJvYik7CisJCQkJZGlzdGFuY2UgPSBjc3QtPnJlcDE7CisJCQl9IGVsc2UgeworCQkJCXJjX3VwZGF0ZV9iaXRfMShyYywgcHJvYik7CisJCQkJcHJvYiA9IHAgKyBMWk1BX0lTX1JFUF9HMiArIGNzdC0+c3RhdGU7CisJCQkJaWYgKHJjX2lzX2JpdF8wKHJjLCBwcm9iKSkgeworCQkJCQlyY191cGRhdGVfYml0XzAocmMsIHByb2IpOworCQkJCQlkaXN0YW5jZSA9IGNzdC0+cmVwMjsKKwkJCQl9IGVsc2UgeworCQkJCQlyY191cGRhdGVfYml0XzEocmMsIHByb2IpOworCQkJCQlkaXN0YW5jZSA9IGNzdC0+cmVwMzsKKwkJCQkJY3N0LT5yZXAzID0gY3N0LT5yZXAyOworCQkJCX0KKwkJCQljc3QtPnJlcDIgPSBjc3QtPnJlcDE7CisJCQl9CisJCQljc3QtPnJlcDEgPSBjc3QtPnJlcDA7CisJCQljc3QtPnJlcDAgPSBkaXN0YW5jZTsKKwkJfQorCQljc3QtPnN0YXRlID0gY3N0LT5zdGF0ZSA8IExaTUFfTlVNX0xJVF9TVEFURVMgPyA4IDogMTE7CisJCXByb2IgPSBwICsgTFpNQV9SRVBfTEVOX0NPREVSOworCX0KKworCXByb2JfbGVuID0gcHJvYiArIExaTUFfTEVOX0NIT0lDRTsKKwlpZiAocmNfaXNfYml0XzAocmMsIHByb2JfbGVuKSkgeworCQlyY191cGRhdGVfYml0XzAocmMsIHByb2JfbGVuKTsKKwkJcHJvYl9sZW4gPSAocHJvYiArIExaTUFfTEVOX0xPVworCQkJICAgICsgKHBvc19zdGF0ZSA8PAorCQkJICAgICAgIExaTUFfTEVOX05VTV9MT1dfQklUUykpOworCQlvZmZzZXQgPSAwOworCQludW1fYml0cyA9IExaTUFfTEVOX05VTV9MT1dfQklUUzsKKwl9IGVsc2UgeworCQlyY191cGRhdGVfYml0XzEocmMsIHByb2JfbGVuKTsKKwkJcHJvYl9sZW4gPSBwcm9iICsgTFpNQV9MRU5fQ0hPSUNFXzI7CisJCWlmIChyY19pc19iaXRfMChyYywgcHJvYl9sZW4pKSB7CisJCQlyY191cGRhdGVfYml0XzAocmMsIHByb2JfbGVuKTsKKwkJCXByb2JfbGVuID0gKHByb2IgKyBMWk1BX0xFTl9NSUQKKwkJCQkgICAgKyAocG9zX3N0YXRlIDw8CisJCQkJICAgICAgIExaTUFfTEVOX05VTV9NSURfQklUUykpOworCQkJb2Zmc2V0ID0gMSA8PCBMWk1BX0xFTl9OVU1fTE9XX0JJVFM7CisJCQludW1fYml0cyA9IExaTUFfTEVOX05VTV9NSURfQklUUzsKKwkJfSBlbHNlIHsKKwkJCXJjX3VwZGF0ZV9iaXRfMShyYywgcHJvYl9sZW4pOworCQkJcHJvYl9sZW4gPSBwcm9iICsgTFpNQV9MRU5fSElHSDsKKwkJCW9mZnNldCA9ICgoMSA8PCBMWk1BX0xFTl9OVU1fTE9XX0JJVFMpCisJCQkJICArICgxIDw8IExaTUFfTEVOX05VTV9NSURfQklUUykpOworCQkJbnVtX2JpdHMgPSBMWk1BX0xFTl9OVU1fSElHSF9CSVRTOworCQl9CisJfQorCisJcmNfYml0X3RyZWVfZGVjb2RlKHJjLCBwcm9iX2xlbiwgbnVtX2JpdHMsICZsZW4pOworCWxlbiArPSBvZmZzZXQ7CisKKwlpZiAoY3N0LT5zdGF0ZSA8IDQpIHsKKwkJaW50IHBvc19zbG90OworCisJCWNzdC0+c3RhdGUgKz0gTFpNQV9OVU1fTElUX1NUQVRFUzsKKwkJcHJvYiA9CisJCQlwICsgTFpNQV9QT1NfU0xPVCArCisJCQkoKGxlbiA8CisJCQkgIExaTUFfTlVNX0xFTl9UT19QT1NfU1RBVEVTID8gbGVuIDoKKwkJCSAgTFpNQV9OVU1fTEVOX1RPX1BPU19TVEFURVMgLSAxKQorCQkJIDw8IExaTUFfTlVNX1BPU19TTE9UX0JJVFMpOworCQlyY19iaXRfdHJlZV9kZWNvZGUocmMsIHByb2IsCisJCQkJICAgTFpNQV9OVU1fUE9TX1NMT1RfQklUUywKKwkJCQkgICAmcG9zX3Nsb3QpOworCQlpZiAocG9zX3Nsb3QgPj0gTFpNQV9TVEFSVF9QT1NfTU9ERUxfSU5ERVgpIHsKKwkJCWludCBpLCBtaTsKKwkJCW51bV9iaXRzID0gKHBvc19zbG90ID4+IDEpIC0gMTsKKwkJCWNzdC0+cmVwMCA9IDIgfCAocG9zX3Nsb3QgJiAxKTsKKwkJCWlmIChwb3Nfc2xvdCA8IExaTUFfRU5EX1BPU19NT0RFTF9JTkRFWCkgeworCQkJCWNzdC0+cmVwMCA8PD0gbnVtX2JpdHM7CisJCQkJcHJvYiA9IHAgKyBMWk1BX1NQRUNfUE9TICsKKwkJCQkJY3N0LT5yZXAwIC0gcG9zX3Nsb3QgLSAxOworCQkJfSBlbHNlIHsKKwkJCQludW1fYml0cyAtPSBMWk1BX05VTV9BTElHTl9CSVRTOworCQkJCXdoaWxlIChudW1fYml0cy0tKQorCQkJCQljc3QtPnJlcDAgPSAoY3N0LT5yZXAwIDw8IDEpIHwKKwkJCQkJCXJjX2RpcmVjdF9iaXQocmMpOworCQkJCXByb2IgPSBwICsgTFpNQV9BTElHTjsKKwkJCQljc3QtPnJlcDAgPDw9IExaTUFfTlVNX0FMSUdOX0JJVFM7CisJCQkJbnVtX2JpdHMgPSBMWk1BX05VTV9BTElHTl9CSVRTOworCQkJfQorCQkJaSA9IDE7CisJCQltaSA9IDE7CisJCQl3aGlsZSAobnVtX2JpdHMtLSkgeworCQkJCWlmIChyY19nZXRfYml0KHJjLCBwcm9iICsgbWksICZtaSkpCisJCQkJCWNzdC0+cmVwMCB8PSBpOworCQkJCWkgPDw9IDE7CisJCQl9CisJCX0gZWxzZQorCQkJY3N0LT5yZXAwID0gcG9zX3Nsb3Q7CisJCWlmICgrKyhjc3QtPnJlcDApID09IDApCisJCQlyZXR1cm47CisJfQorCisJbGVuICs9IExaTUFfTUFUQ0hfTUlOX0xFTjsKKworCWNvcHlfYnl0ZXMod3IsIGNzdC0+cmVwMCwgbGVuKTsKK30KKworCisKK1NUQVRJQyBpbmxpbmUgaW50IElOSVQgdW5sem1hKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgICAgIGludCgqZmlsbCkodm9pZCosIHVuc2lnbmVkIGludCksCisJCQkgICAgICBpbnQoKmZsdXNoKSh2b2lkKiwgdW5zaWduZWQgaW50KSwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwkJCSAgICAgIGludCAqcG9zcCwKKwkJCSAgICAgIHZvaWQoKmVycm9yX2ZuKShjaGFyICp4KQorCSkKK3sKKwlzdHJ1Y3QgbHptYV9oZWFkZXIgaGVhZGVyOworCWludCBsYywgcGIsIGxwOworCXVpbnQzMl90IHBvc19zdGF0ZV9tYXNrOworCXVpbnQzMl90IGxpdGVyYWxfcG9zX21hc2s7CisJdWludDE2X3QgKnA7CisJaW50IG51bV9wcm9iczsKKwlzdHJ1Y3QgcmMgcmM7CisJaW50IGksIG1pOworCXN0cnVjdCB3cml0ZXIgd3I7CisJc3RydWN0IGNzdGF0ZSBjc3Q7CisJdW5zaWduZWQgY2hhciAqaW5idWY7CisJaW50IHJldCA9IC0xOworCisJc2V0X2Vycm9yX2ZuKGVycm9yX2ZuKTsKKwlpZiAoIWZsdXNoKQorCQlpbl9sZW4gLT0gNDsgLyogVW5jb21wcmVzc2VkIHNpemUgaGFjayBhY3RpdmUgaW4gcHJlLWJvb3QKKwkJCQllbnZpcm9ubWVudCAqLworCWlmIChidWYpCisJCWluYnVmID0gYnVmOworCWVsc2UKKwkJaW5idWYgPSBtYWxsb2MoTFpNQV9JT0JVRl9TSVpFKTsKKwlpZiAoIWluYnVmKSB7CisJCWVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgaW5wdXQgYnVmZXIiKTsKKwkJZ290byBleGl0XzA7CisJfQorCisJY3N0LnN0YXRlID0gMDsKKwljc3QucmVwMCA9IGNzdC5yZXAxID0gY3N0LnJlcDIgPSBjc3QucmVwMyA9IDE7CisKKwl3ci5oZWFkZXIgPSAmaGVhZGVyOworCXdyLmZsdXNoID0gZmx1c2g7CisJd3IuZ2xvYmFsX3BvcyA9IDA7CisJd3IucHJldmlvdXNfYnl0ZSA9IDA7CisJd3IuYnVmZmVyX3BvcyA9IDA7CisKKwlyY19pbml0KCZyYywgZmlsbCwgaW5idWYsIGluX2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGhlYWRlcik7IGkrKykgeworCQlpZiAocmMucHRyID49IHJjLmJ1ZmZlcl9lbmQpCisJCQlyY19yZWFkKCZyYyk7CisJCSgodW5zaWduZWQgY2hhciAqKSZoZWFkZXIpW2ldID0gKnJjLnB0cisrOworCX0KKworCWlmIChoZWFkZXIucG9zID49ICg5ICogNSAqIDUpKQorCQllcnJvcigiYmFkIGhlYWRlciIpOworCisJbWkgPSAwOworCWxjID0gaGVhZGVyLnBvczsKKwl3aGlsZSAobGMgPj0gOSkgeworCQltaSsrOworCQlsYyAtPSA5OworCX0KKwlwYiA9IDA7CisJbHAgPSBtaTsKKwl3aGlsZSAobHAgPj0gNSkgeworCQlwYisrOworCQlscCAtPSA1OworCX0KKwlwb3Nfc3RhdGVfbWFzayA9ICgxIDw8IHBiKSAtIDE7CisJbGl0ZXJhbF9wb3NfbWFzayA9ICgxIDw8IGxwKSAtIDE7CisKKwlFTkRJQU5fQ09OVkVSVChoZWFkZXIuZGljdF9zaXplKTsKKwlFTkRJQU5fQ09OVkVSVChoZWFkZXIuZHN0X3NpemUpOworCisJaWYgKGhlYWRlci5kaWN0X3NpemUgPT0gMCkKKwkJaGVhZGVyLmRpY3Rfc2l6ZSA9IDE7CisKKwlpZiAob3V0cHV0KQorCQl3ci5idWZmZXIgPSBvdXRwdXQ7CisJZWxzZSB7CisJCXdyLmJ1ZnNpemUgPSBNSU4oaGVhZGVyLmRzdF9zaXplLCBoZWFkZXIuZGljdF9zaXplKTsKKwkJd3IuYnVmZmVyID0gbGFyZ2VfbWFsbG9jKHdyLmJ1ZnNpemUpOworCX0KKwlpZiAod3IuYnVmZmVyID09IE5VTEwpCisJCWdvdG8gZXhpdF8xOworCisJbnVtX3Byb2JzID0gTFpNQV9CQVNFX1NJWkUgKyAoTFpNQV9MSVRfU0laRSA8PCAobGMgKyBscCkpOworCXAgPSAodWludDE2X3QgKikgbGFyZ2VfbWFsbG9jKG51bV9wcm9icyAqIHNpemVvZigqcCkpOworCWlmIChwID09IDApCisJCWdvdG8gZXhpdF8yOworCW51bV9wcm9icyA9IExaTUFfTElURVJBTCArIChMWk1BX0xJVF9TSVpFIDw8IChsYyArIGxwKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wcm9iczsgaSsrKQorCQlwW2ldID0gKDEgPDwgUkNfTU9ERUxfVE9UQUxfQklUUykgPj4gMTsKKworCXJjX2luaXRfY29kZSgmcmMpOworCisJd2hpbGUgKGdldF9wb3MoJndyKSA8IGhlYWRlci5kc3Rfc2l6ZSkgeworCQlpbnQgcG9zX3N0YXRlID0JZ2V0X3Bvcygmd3IpICYgcG9zX3N0YXRlX21hc2s7CisJCXVpbnQxNl90ICpwcm9iID0gcCArIExaTUFfSVNfTUFUQ0ggKworCQkJKGNzdC5zdGF0ZSA8PCBMWk1BX05VTV9QT1NfQklUU19NQVgpICsgcG9zX3N0YXRlOworCQlpZiAocmNfaXNfYml0XzAoJnJjLCBwcm9iKSkKKwkJCXByb2Nlc3NfYml0MCgmd3IsICZyYywgJmNzdCwgcCwgcG9zX3N0YXRlLCBwcm9iLAorCQkJCSAgICAgbGMsIGxpdGVyYWxfcG9zX21hc2spOworCQllbHNlIHsKKwkJCXByb2Nlc3NfYml0MSgmd3IsICZyYywgJmNzdCwgcCwgcG9zX3N0YXRlLCBwcm9iKTsKKwkJCWlmIChjc3QucmVwMCA9PSAwKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHBvc3ApCisJCSpwb3NwID0gcmMucHRyLXJjLmJ1ZmZlcjsKKwlpZiAod3IuZmx1c2gpCisJCXdyLmZsdXNoKHdyLmJ1ZmZlciwgd3IuYnVmZmVyX3Bvcyk7CisJcmV0ID0gMDsKKwlsYXJnZV9mcmVlKHApOworZXhpdF8yOgorCWlmICghb3V0cHV0KQorCQlsYXJnZV9mcmVlKHdyLmJ1ZmZlcik7CitleGl0XzE6CisJaWYgKCFidWYpCisJCWZyZWUoaW5idWYpOworZXhpdF8wOgorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgZGVjb21wcmVzcyB1bmx6bWEKZGlmZiAtLWdpdCBhL2xpYi9keW5hbWljX2RlYnVnLmMgYi9saWIvZHluYW1pY19kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzEzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZHluYW1pY19kZWJ1Zy5jCkBAIC0wLDAgKzEsNzY5IEBACisvKgorICogbGliL2R5bmFtaWNfZGVidWcuYworICoKKyAqIG1ha2UgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgcnVudGltZSBjb25maWd1cmFibGUgYmFzZWQgdXBvbiB0aGVpcgorICogc291cmNlIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgorICogQnkgR3JlZyBCYW5rcyA8Z25iQG1lbGJvdXJuZS5zZ2kuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKK2V4dGVybiBzdHJ1Y3QgX2RkZWJ1ZyBfX3N0YXJ0X19fdmVyYm9zZVtdOworZXh0ZXJuIHN0cnVjdCBfZGRlYnVnIF9fc3RvcF9fX3ZlcmJvc2VbXTsKKworLyogZHluYW1pY19kZWJ1Z19lbmFibGVkLCBhbmQgZHluYW1pY19kZWJ1Z19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKKyAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKKyAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgorICovCitsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkOworRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19kZWJ1Z19lbmFibGVkKTsKK2xvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQyOworRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19kZWJ1Z19lbmFibGVkMik7CisKK3N0cnVjdCBkZGVidWdfdGFibGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwljaGFyICptb2RfbmFtZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2RkZWJ1Z3M7CisJdW5zaWduZWQgaW50IG51bV9lbmFibGVkOworCXN0cnVjdCBfZGRlYnVnICpkZGVidWdzOworfTsKKworc3RydWN0IGRkZWJ1Z19xdWVyeSB7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3QgY2hhciAqbW9kdWxlOworCWNvbnN0IGNoYXIgKmZ1bmN0aW9uOworCWNvbnN0IGNoYXIgKmZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgZmlyc3RfbGluZW5vLCBsYXN0X2xpbmVubzsKK307CisKK3N0cnVjdCBkZGVidWdfaXRlciB7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqdGFibGU7CisJdW5zaWduZWQgaW50IGlkeDsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGRlYnVnX2xvY2spOworc3RhdGljIExJU1RfSEVBRChkZGVidWdfdGFibGVzKTsKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IDA7CisKKy8qIFJldHVybiB0aGUgbGFzdCBwYXJ0IG9mIGEgcGF0aG5hbWUgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICp0YWlsID0gc3RycmNocihwYXRoLCAnLycpOworCXJldHVybiB0YWlsID8gdGFpbCsxIDogcGF0aDsKK30KKworLyogZm9ybWF0IGEgc3RyaW5nIGludG8gYnVmW10gd2hpY2ggZGVzY3JpYmVzIHRoZSBfZGRlYnVnJ3MgZmxhZ3MgKi8KK3N0YXRpYyBjaGFyICpkZGVidWdfZGVzY3JpYmVfZmxhZ3Moc3RydWN0IF9kZGVidWcgKmRwLCBjaGFyICpidWYsCisJCQkJICAgIHNpemVfdCBtYXhsZW4pCit7CisJY2hhciAqcCA9IGJ1ZjsKKworCUJVR19PTihtYXhsZW4gPCA0KTsKKwlpZiAoZHAtPmZsYWdzICYgX0RQUklOVEtfRkxBR1NfUFJJTlQpCisJCSpwKysgPSAncCc7CisJaWYgKHAgPT0gYnVmKQorCQkqcCsrID0gJy0nOworCSpwID0gJ1wwJzsKKworCXJldHVybiBidWY7Cit9CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGRkZWJ1Z19sb2NrIGhlbGQKKyAqLworCitzdGF0aWMgaW50IGRpc2FibGVkX2hhc2goY2hhciBoYXNoLCBib29sIGZpcnN0X3RhYmxlKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0OworCWNoYXIgdGFibGVfaGFzaF92YWx1ZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisJCWlmIChmaXJzdF90YWJsZSkKKwkJCXRhYmxlX2hhc2hfdmFsdWUgPSBkdC0+ZGRlYnVncy0+cHJpbWFyeV9oYXNoOworCQllbHNlCisJCQl0YWJsZV9oYXNoX3ZhbHVlID0gZHQtPmRkZWJ1Z3MtPnNlY29uZGFyeV9oYXNoOworCQlpZiAoZHQtPm51bV9lbmFibGVkICYmIChoYXNoID09IHRhYmxlX2hhc2hfdmFsdWUpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogU2VhcmNoIHRoZSB0YWJsZXMgZm9yIF9kZGVidWcncyB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4KKyAqIGBxdWVyeScgYW5kIGFwcGx5IHRoZSBgZmxhZ3MnIGFuZCBgbWFzaycgdG8gdGhlbS4gIFRlbGxzCisgKiB0aGUgdXNlciB3aGljaCBkZGVidWcncyB3ZXJlIGNoYW5nZWQsIG9yIHdoZXRoZXIgbm9uZQorICogd2VyZSBtYXRjaGVkLgorICovCitzdGF0aWMgdm9pZCBkZGVidWdfY2hhbmdlKGNvbnN0IHN0cnVjdCBkZGVidWdfcXVlcnkgKnF1ZXJ5LAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwl1bnNpZ25lZCBpbnQgbmV3ZmxhZ3M7CisJdW5zaWduZWQgaW50IG5mb3VuZCA9IDA7CisJY2hhciBmbGFnYnVmWzhdOworCisJLyogc2VhcmNoIGZvciBtYXRjaGluZyBkZGVidWdzICovCisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisKKwkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgbW9kdWxlIG5hbWUgKi8KKwkJaWYgKHF1ZXJ5LT5tb2R1bGUgIT0gTlVMTCAmJgorCQkgICAgc3RyY21wKHF1ZXJ5LT5tb2R1bGUsIGR0LT5tb2RfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwIDsgaSA8IGR0LT5udW1fZGRlYnVncyA7IGkrKykgeworCQkJc3RydWN0IF9kZGVidWcgKmRwID0gJmR0LT5kZGVidWdzW2ldOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBzb3VyY2UgZmlsZW5hbWUgKi8KKwkJCWlmIChxdWVyeS0+ZmlsZW5hbWUgIT0gTlVMTCAmJgorCQkJICAgIHN0cmNtcChxdWVyeS0+ZmlsZW5hbWUsIGRwLT5maWxlbmFtZSkgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZpbGVuYW1lLCBiYXNlbmFtZShkcC0+ZmlsZW5hbWUpKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgZnVuY3Rpb24gKi8KKwkJCWlmIChxdWVyeS0+ZnVuY3Rpb24gIT0gTlVMTCAmJgorCQkJICAgIHN0cmNtcChxdWVyeS0+ZnVuY3Rpb24sIGRwLT5mdW5jdGlvbikpCisJCQkJY29udGludWU7CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIGZvcm1hdCAqLworCQkJaWYgKHF1ZXJ5LT5mb3JtYXQgIT0gTlVMTCAmJgorCQkJICAgIHN0cnN0cihkcC0+Zm9ybWF0LCBxdWVyeS0+Zm9ybWF0KSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBsaW5lIG51bWJlciByYW5nZSAqLworCQkJaWYgKHF1ZXJ5LT5maXJzdF9saW5lbm8gJiYKKwkJCSAgICBkcC0+bGluZW5vIDwgcXVlcnktPmZpcnN0X2xpbmVubykKKwkJCQljb250aW51ZTsKKwkJCWlmIChxdWVyeS0+bGFzdF9saW5lbm8gJiYKKwkJCSAgICBkcC0+bGluZW5vID4gcXVlcnktPmxhc3RfbGluZW5vKQorCQkJCWNvbnRpbnVlOworCisJCQluZm91bmQrKzsKKworCQkJbmV3ZmxhZ3MgPSAoZHAtPmZsYWdzICYgbWFzaykgfCBmbGFnczsKKwkJCWlmIChuZXdmbGFncyA9PSBkcC0+ZmxhZ3MpCisJCQkJY29udGludWU7CisKKwkJCWlmICghbmV3ZmxhZ3MpCisJCQkJZHQtPm51bV9lbmFibGVkLS07CisJCQllbHNlIGlmICghZHAtZmxhZ3MpCisJCQkJZHQtPm51bV9lbmFibGVkKys7CisJCQlkcC0+ZmxhZ3MgPSBuZXdmbGFnczsKKwkJCWlmIChuZXdmbGFncykgeworCQkJCWR5bmFtaWNfZGVidWdfZW5hYmxlZCB8PQorCQkJCQkJKDFMTCA8PCBkcC0+cHJpbWFyeV9oYXNoKTsKKwkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQyIHw9CisJCQkJCQkoMUxMIDw8IGRwLT5zZWNvbmRhcnlfaGFzaCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChkaXNhYmxlZF9oYXNoKGRwLT5wcmltYXJ5X2hhc2gsIHRydWUpKQorCQkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQgJj0KKwkJCQkJCX4oMUxMIDw8IGRwLT5wcmltYXJ5X2hhc2gpOworCQkJCWlmIChkaXNhYmxlZF9oYXNoKGRwLT5zZWNvbmRhcnlfaGFzaCwgZmFsc2UpKQorCQkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQyICY9CisJCQkJCQl+KDFMTCA8PCBkcC0+c2Vjb25kYXJ5X2hhc2gpOworCQkJfQorCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiZGRlYnVnOiBjaGFuZ2VkICVzOiVkIFslc10lcyAlc1xuIiwKKwkJCQkJZHAtPmZpbGVuYW1lLCBkcC0+bGluZW5vLAorCQkJCQlkdC0+bW9kX25hbWUsIGRwLT5mdW5jdGlvbiwKKwkJCQkJZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKGRwLCBmbGFnYnVmLAorCQkJCQkJCXNpemVvZihmbGFnYnVmKSkpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCisJaWYgKCFuZm91bmQgJiYgdmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGRlYnVnOiBubyBtYXRjaGVzIGZvciBxdWVyeVxuIik7Cit9CisKKy8qCisgKiBTcGxpdCB0aGUgYnVmZmVyIGBidWYnIGludG8gc3BhY2Utc2VwYXJhdGVkIHdvcmRzLgorICogSGFuZGxlcyBzaW1wbGUgIiBhbmQgJyBxdW90aW5nLCBpLmUuIHdpdGhvdXQgbmVzdGVkLAorICogZW1iZWRkZWQgb3IgZXNjYXBlZCBcIi4gIFJldHVybiB0aGUgbnVtYmVyIG9mIHdvcmRzCisgKiBvciA8MCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBkZGVidWdfdG9rZW5pemUoY2hhciAqYnVmLCBjaGFyICp3b3Jkc1tdLCBpbnQgbWF4d29yZHMpCit7CisJaW50IG53b3JkcyA9IDA7CisKKwl3aGlsZSAoKmJ1ZikgeworCQljaGFyICplbmQ7CisKKwkJLyogU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwkJd2hpbGUgKCpidWYgJiYgaXNzcGFjZSgqYnVmKSkKKwkJCWJ1ZisrOworCQlpZiAoISpidWYpCisJCQlicmVhazsJLyogb2gsIGl0IHdhcyB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisKKwkJLyogUnVuIGBlbmQnIG92ZXIgYSB3b3JkLCBlaXRoZXIgd2hpdGVzcGFjZSBzZXBhcmF0ZWQgb3IgcXVvdGVkICovCisJCWlmICgqYnVmID09ICciJyB8fCAqYnVmID09ICdcJycpIHsKKwkJCWludCBxdW90ZSA9ICpidWYrKzsKKwkJCWZvciAoZW5kID0gYnVmIDsgKmVuZCAmJiAqZW5kICE9IHF1b3RlIDsgZW5kKyspCisJCQkJOworCQkJaWYgKCEqZW5kKQorCQkJCXJldHVybiAtRUlOVkFMOwkvKiB1bmNsb3NlZCBxdW90ZSAqLworCQl9IGVsc2UgeworCQkJZm9yIChlbmQgPSBidWYgOyAqZW5kICYmICFpc3NwYWNlKCplbmQpIDsgZW5kKyspCisJCQkJOworCQkJQlVHX09OKGVuZCA9PSBidWYpOworCQl9CisJCS8qIEhlcmUgYGJ1ZicgaXMgdGhlIHN0YXJ0IG9mIHRoZSB3b3JkLCBgZW5kJyBpcyBvbmUgcGFzdCB0aGUgZW5kICovCisKKwkJaWYgKG53b3JkcyA9PSBtYXh3b3JkcykKKwkJCXJldHVybiAtRUlOVkFMOwkvKiByYW4gb3V0IG9mIHdvcmRzW10gYmVmb3JlIGJ5dGVzICovCisJCWlmICgqZW5kKQorCQkJKmVuZCsrID0gJ1wwJzsJLyogdGVybWluYXRlIHRoZSB3b3JkICovCisJCXdvcmRzW253b3JkcysrXSA9IGJ1ZjsKKwkJYnVmID0gZW5kOworCX0KKworCWlmICh2ZXJib3NlKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogc3BsaXQgaW50byB3b3JkczoiLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDAgOyBpIDwgbndvcmRzIDsgaSsrKQorCQkJcHJpbnRrKCIgXCIlc1wiIiwgd29yZHNbaV0pOworCQlwcmludGsoIlxuIik7CisJfQorCisJcmV0dXJuIG53b3JkczsKK30KKworLyoKKyAqIFBhcnNlIGEgc2luZ2xlIGxpbmUgbnVtYmVyLiAgTm90ZSB0aGF0IHRoZSBlbXB0eSBzdHJpbmcgIiIKKyAqIGlzIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UgYW5kIGNvbnZlcnRlZCB0byB6ZXJvLCB3aGljaAorICogaXMgbGF0ZXIgdHJlYXRlZCBhcyBhICJkb24ndCBjYXJlIiB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbGluZW5vKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50ICp2YWwpCit7CisJY2hhciAqZW5kID0gTlVMTDsKKwlCVUdfT04oc3RyID09IE5VTEwpOworCWlmICgqc3RyID09ICdcMCcpIHsKKwkJKnZhbCA9IDA7CisJCXJldHVybiAwOworCX0KKwkqdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kLCAxMCk7CisJcmV0dXJuIGVuZCA9PSBOVUxMIHx8IGVuZCA9PSBzdHIgfHwgKmVuZCAhPSAnXDAnID8gLUVJTlZBTCA6IDA7Cit9CisKKy8qCisgKiBVbmRvIG9jdGFsIGVzY2FwaW5nIGluIGEgc3RyaW5nLCBpbnBsYWNlLiAgVGhpcyBpcyB1c2VmdWwgdG8KKyAqIGFsbG93IHRoZSB1c2VyIHRvIGV4cHJlc3MgYSBxdWVyeSB3aGljaCBtYXRjaGVzIGEgZm9ybWF0CisgKiBjb250YWluaW5nIGVtYmVkZGVkIHNwYWNlcy4KKyAqLworI2RlZmluZSBpc29kaWdpdChjKQkJKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc3JykKK3N0YXRpYyBjaGFyICp1bmVzY2FwZShjaGFyICpzdHIpCit7CisJY2hhciAqaW4gPSBzdHI7CisJY2hhciAqb3V0ID0gc3RyOworCisJd2hpbGUgKCppbikgeworCQlpZiAoKmluID09ICdcXCcpIHsKKwkJCWlmIChpblsxXSA9PSAnXFwnKSB7CisJCQkJKm91dCsrID0gJ1xcJzsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChpblsxXSA9PSAndCcpIHsKKwkJCQkqb3V0KysgPSAnXHQnOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGluWzFdID09ICduJykgeworCQkJCSpvdXQrKyA9ICdcbic7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoaXNvZGlnaXQoaW5bMV0pICYmCisJCQkgICAgICAgICBpc29kaWdpdChpblsyXSkgJiYKKwkJCSAgICAgICAgIGlzb2RpZ2l0KGluWzNdKSkgeworCQkJCSpvdXQrKyA9ICgoaW5bMV0gLSAnMCcpPDw2KSB8CisJCQkJICAgICAgICAgICgoaW5bMl0gLSAnMCcpPDwzKSB8CisJCQkJICAgICAgICAgIChpblszXSAtICcwJyk7CisJCQkJaW4gKz0gNDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQkqb3V0KysgPSAqaW4rKzsKKwl9CisJKm91dCA9ICdcMCc7CisKKwlyZXR1cm4gc3RyOworfQorCisvKgorICogUGFyc2Ugd29yZHNbXSBhcyBhIGRkZWJ1ZyBxdWVyeSBzcGVjaWZpY2F0aW9uLCB3aGljaCBpcyBhIHNlcmllcworICogb2YgKGtleXdvcmQsIHZhbHVlKSBwYWlycyBjaG9zZW4gZnJvbSB0aGVzZSBwb3NzaWJpbGl0aWVzOgorICoKKyAqIGZ1bmMgPGZ1bmN0aW9uLW5hbWU+CisgKiBmaWxlIDxmdWxsLXBhdGhuYW1lPgorICogZmlsZSA8YmFzZS1maWxlbmFtZT4KKyAqIG1vZHVsZSA8bW9kdWxlLW5hbWU+CisgKiBmb3JtYXQgPGVzY2FwZWQtc3RyaW5nLXRvLWZpbmQtaW4tZm9ybWF0PgorICogbGluZSA8bGluZW5vPgorICogbGluZSA8Zmlyc3QtbGluZW5vPi08bGFzdC1saW5lbm8+IC8vIHdoZXJlIGVpdGhlciBtYXkgYmUgZW1wdHkKKyAqLworc3RhdGljIGludCBkZGVidWdfcGFyc2VfcXVlcnkoY2hhciAqd29yZHNbXSwgaW50IG53b3JkcywKKwkJCSAgICAgICBzdHJ1Y3QgZGRlYnVnX3F1ZXJ5ICpxdWVyeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIGNoZWNrIHdlIGhhdmUgYW4gZXZlbiBudW1iZXIgb2Ygd29yZHMgKi8KKwlpZiAobndvcmRzICUgMiAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQocXVlcnksIDAsIHNpemVvZigqcXVlcnkpKTsKKworCWZvciAoaSA9IDAgOyBpIDwgbndvcmRzIDsgaSArPSAyKSB7CisJCWlmICghc3RyY21wKHdvcmRzW2ldLCAiZnVuYyIpKQorCQkJcXVlcnktPmZ1bmN0aW9uID0gd29yZHNbaSsxXTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZpbGUiKSkKKwkJCXF1ZXJ5LT5maWxlbmFtZSA9IHdvcmRzW2krMV07CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJtb2R1bGUiKSkKKwkJCXF1ZXJ5LT5tb2R1bGUgPSB3b3Jkc1tpKzFdOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAiZm9ybWF0IikpCisJCQlxdWVyeS0+Zm9ybWF0ID0gdW5lc2NhcGUod29yZHNbaSsxXSk7CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJsaW5lIikpIHsKKwkJCWNoYXIgKmZpcnN0ID0gd29yZHNbaSsxXTsKKwkJCWNoYXIgKmxhc3QgPSBzdHJjaHIoZmlyc3QsICctJyk7CisJCQlpZiAobGFzdCkKKwkJCQkqbGFzdCsrID0gJ1wwJzsKKwkJCWlmIChwYXJzZV9saW5lbm8oZmlyc3QsICZxdWVyeS0+Zmlyc3RfbGluZW5vKSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAobGFzdCAhPSBOVUxMKSB7CisJCQkJLyogcmFuZ2UgPGZpcnN0Pi08bGFzdD4gKi8KKwkJCQlpZiAocGFyc2VfbGluZW5vKGxhc3QsICZxdWVyeS0+bGFzdF9saW5lbm8pIDwgMCkKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9IGVsc2UgeworCQkJCXF1ZXJ5LT5sYXN0X2xpbmVubyA9IHF1ZXJ5LT5maXJzdF9saW5lbm87CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGtleXdvcmQgXCIlc1wiXG4iLAorCQkJCQlfX2Z1bmNfXywgd29yZHNbaV0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHEtPmZ1bmN0aW9uPVwiJXNcIiBxLT5maWxlbmFtZT1cIiVzXCIgIgorCQkgICAgICAgInEtPm1vZHVsZT1cIiVzXCIgcS0+Zm9ybWF0PVwiJXNcIiBxLT5saW5lbm89JXUtJXVcbiIsCisJCQlfX2Z1bmNfXywgcXVlcnktPmZ1bmN0aW9uLCBxdWVyeS0+ZmlsZW5hbWUsCisJCQlxdWVyeS0+bW9kdWxlLCBxdWVyeS0+Zm9ybWF0LCBxdWVyeS0+Zmlyc3RfbGluZW5vLAorCQkJcXVlcnktPmxhc3RfbGluZW5vKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUGFyc2UgYHN0cicgYXMgYSBmbGFncyBzcGVjaWZpY2F0aW9uLCBmb3JtYXQgWy0rPV1bcF0rLgorICogU2V0cyB1cCAqbWFza3AgYW5kICpmbGFnc3AgdG8gYmUgdXNlZCB3aGVuIGNoYW5naW5nIHRoZQorICogZmxhZ3MgZmllbGRzIG9mIG1hdGNoZWQgX2RkZWJ1ZydzLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAqIG9yIDwwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wYXJzZV9mbGFncyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqZmxhZ3NwLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqbWFza3ApCit7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCWludCBvcCA9ICc9JzsKKworCXN3aXRjaCAoKnN0cikgeworCWNhc2UgJysnOgorCWNhc2UgJy0nOgorCWNhc2UgJz0nOgorCQlvcCA9ICpzdHIrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogb3A9JyVjJ1xuIiwgX19mdW5jX18sIG9wKTsKKworCWZvciAoIDsgKnN0ciA7ICsrc3RyKSB7CisJCXN3aXRjaCAoKnN0cikgeworCQljYXNlICdwJzoKKwkJCWZsYWdzIHw9IF9EUFJJTlRLX0ZMQUdTX1BSSU5UOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAoZmxhZ3MgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmbGFncz0weCV4XG4iLCBfX2Z1bmNfXywgZmxhZ3MpOworCisJLyogY2FsY3VsYXRlIGZpbmFsICpmbGFnc3AsICptYXNrcCBhY2NvcmRpbmcgdG8gbWFzayBhbmQgb3AgKi8KKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSAnPSc6CisJCSptYXNrcCA9IDA7CisJCSpmbGFnc3AgPSBmbGFnczsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCSptYXNrcCA9IH4wVTsKKwkJKmZsYWdzcCA9IGZsYWdzOworCQlicmVhazsKKwljYXNlICctJzoKKwkJKm1hc2twID0gfmZsYWdzOworCQkqZmxhZ3NwID0gMDsKKwkJYnJlYWs7CisJfQorCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogKmZsYWdzcD0weCV4ICptYXNrcD0weCV4XG4iLAorCQkJX19mdW5jX18sICpmbGFnc3AsICptYXNrcCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaWxlX29wcy0+d3JpdGUgbWV0aG9kIGZvciA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb25yb2wuICBHYXRoZXJzIHRoZQorICogY29tbWFuZCB0ZXh0IGZyb20gdXNlcnNwYWNlLCBwYXJzZXMgYW5kIGV4ZWN1dGVzIGl0LgorICovCitzdGF0aWMgc3NpemVfdCBkZGVidWdfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMCwgbWFzayA9IDA7CisJc3RydWN0IGRkZWJ1Z19xdWVyeSBxdWVyeTsKKyNkZWZpbmUgTUFYV09SRFMgOQorCWludCBud29yZHM7CisJY2hhciAqd29yZHNbTUFYV09SRFNdOworCWNoYXIgdG1wYnVmWzI1Nl07CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCS8qIHdlIGRvbid0IGNoZWNrICpvZmZwIC0tIG11bHRpcGxlIHdyaXRlcygpIGFyZSBhbGxvd2VkICovCisJaWYgKGxlbiA+IHNpemVvZih0bXBidWYpLTEpCisJCXJldHVybiAtRTJCSUc7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcGJ1ZiwgdWJ1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJdG1wYnVmW2xlbl0gPSAnXDAnOworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVhZCAlZCBieXRlcyBmcm9tIHVzZXJzcGFjZVxuIiwKKwkJCV9fZnVuY19fLCAoaW50KWxlbik7CisKKwlud29yZHMgPSBkZGVidWdfdG9rZW5pemUodG1wYnVmLCB3b3JkcywgTUFYV09SRFMpOworCWlmIChud29yZHMgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGRlYnVnX3BhcnNlX3F1ZXJ5KHdvcmRzLCBud29yZHMtMSwgJnF1ZXJ5KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRkZWJ1Z19wYXJzZV9mbGFncyh3b3Jkc1tud29yZHMtMV0sICZmbGFncywgJm1hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGFjdHVhbGx5IGdvIGFuZCBpbXBsZW1lbnQgdGhlIGNoYW5nZSAqLworCWRkZWJ1Z19jaGFuZ2UoJnF1ZXJ5LCBmbGFncywgbWFzayk7CisKKwkqb2ZmcCArPSBsZW47CisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFNldCB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IF9kZGVidWcgb2JqZWN0CisgKiBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGF0IGZpcnN0IG9iamVjdC4gIFJldHVybnMKKyAqIE5VTEwgaWYgdGhlcmUgYXJlIG5vIF9kZGVidWdzIGF0IGFsbC4KKyAqLworc3RhdGljIHN0cnVjdCBfZGRlYnVnICpkZGVidWdfaXRlcl9maXJzdChzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIpCit7CisJaWYgKGxpc3RfZW1wdHkoJmRkZWJ1Z190YWJsZXMpKSB7CisJCWl0ZXItPnRhYmxlID0gTlVMTDsKKwkJaXRlci0+aWR4ID0gMDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWl0ZXItPnRhYmxlID0gbGlzdF9lbnRyeShkZGVidWdfdGFibGVzLm5leHQsCisJCQkJIHN0cnVjdCBkZGVidWdfdGFibGUsIGxpbmspOworCWl0ZXItPmlkeCA9IDA7CisJcmV0dXJuICZpdGVyLT50YWJsZS0+ZGRlYnVnc1tpdGVyLT5pZHhdOworfQorCisvKgorICogQWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIG5leHQgX2RkZWJ1ZworICogb2JqZWN0IGZyb20gdGhlIG9uZSB0aGUgaXRlcmF0b3IgY3VycmVudGx5IHBvaW50cyBhdCwKKyAqIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3IF9kZGVidWcuICBSZXR1cm5zCisgKiBOVUxMIGlmIHRoZSBpdGVyYXRvciBoYXMgc2VlbiBhbGwgdGhlIF9kZGVidWdzLgorICovCitzdGF0aWMgc3RydWN0IF9kZGVidWcgKmRkZWJ1Z19pdGVyX25leHQoc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyKQoreworCWlmIChpdGVyLT50YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoKytpdGVyLT5pZHggPT0gaXRlci0+dGFibGUtPm51bV9kZGVidWdzKSB7CisJCS8qIGl0ZXJhdGUgdG8gbmV4dCB0YWJsZSAqLworCQlpdGVyLT5pZHggPSAwOworCQlpZiAobGlzdF9pc19sYXN0KCZpdGVyLT50YWJsZS0+bGluaywgJmRkZWJ1Z190YWJsZXMpKSB7CisJCQlpdGVyLT50YWJsZSA9IE5VTEw7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpdGVyLT50YWJsZSA9IGxpc3RfZW50cnkoaXRlci0+dGFibGUtPmxpbmsubmV4dCwKKwkJCQkJIHN0cnVjdCBkZGVidWdfdGFibGUsIGxpbmspOworCX0KKwlyZXR1cm4gJml0ZXItPnRhYmxlLT5kZGVidWdzW2l0ZXItPmlkeF07Cit9CisKKy8qCisgKiBTZXFfb3BzIHN0YXJ0IG1ldGhvZC4gIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkKKyAqIHJlYWQoKSBjYWxsIGZyb20gdXNlcnNwYWNlLiAgVGFrZXMgdGhlIGRkZWJ1Z19sb2NrIGFuZAorICogc2Vla3MgdGhlIHNlcV9maWxlJ3MgaXRlcmF0b3IgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLgorICovCitzdGF0aWMgdm9pZCAqZGRlYnVnX3Byb2Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcDsKKwlpbnQgbiA9ICpwb3M7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwICpwb3M9JWxsZFxuIiwKKwkJCV9fZnVuY19fLCBtLCAodW5zaWduZWQgbG9uZyBsb25nKSpwb3MpOworCisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCisJaWYgKCFuKQorCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOworCWlmIChuIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJZHAgPSBkZGVidWdfaXRlcl9maXJzdChpdGVyKTsKKwl3aGlsZSAoZHAgIT0gTlVMTCAmJiAtLW4gPiAwKQorCQlkcCA9IGRkZWJ1Z19pdGVyX25leHQoaXRlcik7CisJcmV0dXJuIGRwOworfQorCisvKgorICogU2VxX29wcyBuZXh0IG1ldGhvZC4gIENhbGxlZCBzZXZlcmFsIHRpbWVzIHdpdGhpbiBhIHJlYWQoKQorICogY2FsbCBmcm9tIHVzZXJzcGFjZSwgd2l0aCBkZGVidWdfbG9jayBoZWxkLiAgV2Fsa3MgdG8gdGhlCisgKiBuZXh0IF9kZGVidWcgb2JqZWN0IHdpdGggYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBoZWFkZXIgbGluZS4KKyAqLworc3RhdGljIHZvaWQgKmRkZWJ1Z19wcm9jX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcDsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcCAqcG9zPSVsbGRcbiIsCisJCQlfX2Z1bmNfXywgbSwgcCwgKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zKTsKKworCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikKKwkJZHAgPSBkZGVidWdfaXRlcl9maXJzdChpdGVyKTsKKwllbHNlCisJCWRwID0gZGRlYnVnX2l0ZXJfbmV4dChpdGVyKTsKKwkrKypwb3M7CisJcmV0dXJuIGRwOworfQorCisvKgorICogU2VxX29wcyBzaG93IG1ldGhvZC4gIENhbGxlZCBzZXZlcmFsIHRpbWVzIHdpdGhpbiBhIHJlYWQoKQorICogY2FsbCBmcm9tIHVzZXJzcGFjZSwgd2l0aCBkZGVidWdfbG9jayBoZWxkLiAgRm9ybWF0cyB0aGUKKyAqIGN1cnJlbnQgX2RkZWJ1ZyBhcyBhIHNpbmdsZSBodW1hbi1yZWFkYWJsZSBsaW5lLCB3aXRoIGEKKyAqIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGhlYWRlciBsaW5lLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXN0cnVjdCBkZGVidWdfaXRlciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IF9kZGVidWcgKmRwID0gcDsKKwljaGFyIGZsYWdzYnVmWzhdOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCBwPSVwXG4iLAorCQkJX19mdW5jX18sIG0sIHApOworCisJaWYgKHAgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJCXNlcV9wdXRzKG0sCisJCQkiIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKG0sICIlczoldSBbJXNdJXMgJXMgXCIiLAorCQkgICBkcC0+ZmlsZW5hbWUsIGRwLT5saW5lbm8sCisJCSAgIGl0ZXItPnRhYmxlLT5tb2RfbmFtZSwgZHAtPmZ1bmN0aW9uLAorCQkgICBkZGVidWdfZGVzY3JpYmVfZmxhZ3MoZHAsIGZsYWdzYnVmLCBzaXplb2YoZmxhZ3NidWYpKSk7CisJc2VxX2VzY2FwZShtLCBkcC0+Zm9ybWF0LCAiXHRcclxuXCIiKTsKKwlzZXFfcHV0cyhtLCAiXCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXFfb3BzIHN0b3AgbWV0aG9kLiAgQ2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UuICBEcm9wcyBkZGVidWdfbG9jay4KKyAqLworc3RhdGljIHZvaWQgZGRlYnVnX3Byb2Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCBwPSVwXG4iLAorCQkJX19mdW5jX18sIG0sIHApOworCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRkZWJ1Z19wcm9jX3NlcW9wcyA9IHsKKwkuc3RhcnQgPSBkZGVidWdfcHJvY19zdGFydCwKKwkubmV4dCA9IGRkZWJ1Z19wcm9jX25leHQsCisJLnNob3cgPSBkZGVidWdfcHJvY19zaG93LAorCS5zdG9wID0gZGRlYnVnX3Byb2Nfc3RvcAorfTsKKworLyoKKyAqIEZpbGVfb3BzLT5vcGVuIG1ldGhvZCBmb3IgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbC4gIERvZXMgdGhlIHNlcV9maWxlCisgKiBzZXR1cCBkYW5jZSwgYW5kIGFsc28gY3JlYXRlcyBhbiBpdGVyYXRvciB0byB3YWxrIHRoZSBfZGRlYnVncy4KKyAqIE5vdGUgdGhhdCB3ZSBjcmVhdGUgYSBzZXFfZmlsZSBhbHdheXMsIGV2ZW4gZm9yIE9fV1JPTkxZIGZpbGVzCisgKiB3aGVyZSBpdCdzIG5vdCBuZWVkZWQsIGFzIGRvaW5nIHNvIHNpbXBsaWZpZXMgdGhlIC0+cmVsZWFzZSBtZXRob2QuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXI7CisJaW50IGVycjsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpdGVyID0ga3phbGxvYyhzaXplb2YoKml0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaXRlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IHNlcV9vcGVuKGZpbGUsICZkZGVidWdfcHJvY19zZXFvcHMpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoaXRlcik7CisJCXJldHVybiBlcnI7CisJfQorCSgoc3RydWN0IHNlcV9maWxlICopIGZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGUgPSBpdGVyOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZGVidWdfcHJvY19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZGRlYnVnX3Byb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS53cml0ZSA9IGRkZWJ1Z19wcm9jX3dyaXRlCit9OworCisvKgorICogQWxsb2NhdGUgYSBuZXcgZGRlYnVnX3RhYmxlIGZvciB0aGUgZ2l2ZW4gbW9kdWxlCisgKiBhbmQgYWRkIGl0IHRvIHRoZSBnbG9iYWwgbGlzdC4KKyAqLworaW50IGRkZWJ1Z19hZGRfbW9kdWxlKHN0cnVjdCBfZGRlYnVnICp0YWIsIHVuc2lnbmVkIGludCBuLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0OworCWNoYXIgKm5ld19uYW1lOworCisJZHQgPSBremFsbG9jKHNpemVvZigqZHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbmV3X25hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOworCWlmIChuZXdfbmFtZSA9PSBOVUxMKSB7CisJCWtmcmVlKGR0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWR0LT5tb2RfbmFtZSA9IG5ld19uYW1lOworCWR0LT5udW1fZGRlYnVncyA9IG47CisJZHQtPm51bV9lbmFibGVkID0gMDsKKwlkdC0+ZGRlYnVncyA9IHRhYjsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZkdC0+bGluaywgJmRkZWJ1Z190YWJsZXMpOworCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiV1IGRlYnVnIHByaW50cyBpbiBtb2R1bGUgJXNcbiIsCisJCQkJIG4sIGR0LT5tb2RfbmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZGVidWdfYWRkX21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIGRkZWJ1Z190YWJsZV9mcmVlKHN0cnVjdCBkZGVidWdfdGFibGUgKmR0KQoreworCWxpc3RfZGVsX2luaXQoJmR0LT5saW5rKTsKKwlrZnJlZShkdC0+bW9kX25hbWUpOworCWtmcmVlKGR0KTsKK30KKworLyoKKyAqIENhbGxlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZyB1bmxvYWRlZC4gIFJlbW92ZXMKKyAqIGFueSBkZGVidWdfdGFibGUncyB3aGljaCBwb2ludCBhdCB0aGUgbW9kdWxlLgorICovCitpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kX25hbWUpCit7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQsICpuZXh0ZHQ7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW92aW5nIG1vZHVsZSBcIiVzXCJcbiIsCisJCQkJX19mdW5jX18sIG1vZF9uYW1lKTsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHQsIG5leHRkdCwgJmRkZWJ1Z190YWJsZXMsIGxpbmspIHsKKwkJaWYgKCFzdHJjbXAoZHQtPm1vZF9uYW1lLCBtb2RfbmFtZSkpIHsKKwkJCWRkZWJ1Z190YWJsZV9mcmVlKGR0KTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRkZWJ1Z19yZW1vdmVfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgZGRlYnVnX3JlbW92ZV9hbGxfdGFibGVzKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmZGRlYnVnX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmZGRlYnVnX3RhYmxlcykpIHsKKwkJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQgPSBsaXN0X2VudHJ5KGRkZWJ1Z190YWJsZXMubmV4dCwKKwkJCQkJCSAgICAgIHN0cnVjdCBkZGVidWdfdGFibGUsCisJCQkJCQkgICAgICBsaW5rKTsKKwkJZGRlYnVnX3RhYmxlX2ZyZWUoZHQpOworCX0KKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHluYW1pY19kZWJ1Z19pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqaXRlciwgKml0ZXJfc3RhcnQ7CisJY29uc3QgY2hhciAqbW9kbmFtZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IG4gPSAwOworCisJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkeW5hbWljX2RlYnVnIiwgTlVMTCk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtRU5PTUVNOworCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb250cm9sIiwgMDY0NCwgZGlyLCBOVUxMLAorCQkJCQkmZGRlYnVnX3Byb2NfZm9wcyk7CisJaWYgKCFmaWxlKSB7CisJCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoX19zdGFydF9fX3ZlcmJvc2UgIT0gX19zdG9wX19fdmVyYm9zZSkgeworCQlpdGVyID0gX19zdGFydF9fX3ZlcmJvc2U7CisJCW1vZG5hbWUgPSBpdGVyLT5tb2RuYW1lOworCQlpdGVyX3N0YXJ0ID0gaXRlcjsKKwkJZm9yICg7IGl0ZXIgPCBfX3N0b3BfX192ZXJib3NlOyBpdGVyKyspIHsKKwkJCWlmIChzdHJjbXAobW9kbmFtZSwgaXRlci0+bW9kbmFtZSkpIHsKKwkJCQlyZXQgPSBkZGVidWdfYWRkX21vZHVsZShpdGVyX3N0YXJ0LCBuLCBtb2RuYW1lKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dF9mcmVlOworCQkJCW4gPSAwOworCQkJCW1vZG5hbWUgPSBpdGVyLT5tb2RuYW1lOworCQkJCWl0ZXJfc3RhcnQgPSBpdGVyOworCQkJfQorCQkJbisrOworCQl9CisJCXJldCA9IGRkZWJ1Z19hZGRfbW9kdWxlKGl0ZXJfc3RhcnQsIG4sIG1vZG5hbWUpOworCX0KK291dF9mcmVlOgorCWlmIChyZXQpIHsKKwkJZGRlYnVnX3JlbW92ZV9hbGxfdGFibGVzKCk7CisJCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJCWRlYnVnZnNfcmVtb3ZlKGZpbGUpOworCX0KKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGR5bmFtaWNfZGVidWdfaW5pdCk7CmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19wcmludGsuYyBiL2xpYi9keW5hbWljX3ByaW50ay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjVhMTk3Li4wMDAwMDAwCi0tLSBhL2xpYi9keW5hbWljX3ByaW50ay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLS8qCi0gKiBsaWIvZHluYW1pY19wcmludGsuYwotICoKLSAqIG1ha2UgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgcnVudGltZSBjb25maWd1cmFibGUgYmFzZWQgdXBvbiB0aGVpcgotICogdGhlaXIgc291cmNlIG1vZHVsZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLQotZXh0ZXJuIHN0cnVjdCBtb2RfZGVidWcgX19zdGFydF9fX3ZlcmJvc2VbXTsKLWV4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RvcF9fX3ZlcmJvc2VbXTsKLQotc3RydWN0IGRlYnVnX25hbWUgewotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OwotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0MjsKLQlpbnQgaGFzaDE7Ci0JaW50IGhhc2gyOwotCWNoYXIgKm5hbWU7Ci0JaW50IGVuYWJsZTsKLQlpbnQgdHlwZTsKLX07Ci0KLXN0YXRpYyBpbnQgbnJfZW50cmllczsKLXN0YXRpYyBpbnQgbnVtX2VuYWJsZWQ7Ci1pbnQgZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7Ci1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbW9kdWxlX3RhYmxlW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQotCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Owotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZTJbREVCVUdfSEFTSF9UQUJMRV9TSVpFXSA9Ci0JeyBbMCAuLi4gREVCVUdfSEFTSF9UQUJMRV9TSVpFLTFdID0gSExJU1RfSEVBRF9JTklUIH07Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChkZWJ1Z19saXN0X211dGV4KTsKLQotLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAotICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQotICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCi0gKi8KLWxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkOwotRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZCk7Ci1sb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDI7Ci1FWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX3ByaW50a19lbmFibGVkMik7Ci0KLS8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLwotc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZShjaGFyICptb2R1bGVfbmFtZSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKLQotCWVsZW1lbnQgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgewotCQloZWFkID0gJm1vZHVsZV90YWJsZVtpXTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW1lbnQsIG5vZGUsIGhlYWQsIGhsaXN0KQotCQkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQotCQkJCXJldHVybiBlbGVtZW50OwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogcmV0dXJucyB0aGUgZGVidWcgbW9kdWxlIHBvaW50ZXIuICovCi1zdGF0aWMgc3RydWN0IGRlYnVnX25hbWUgKmZpbmRfZGVidWdfbW9kdWxlX2hhc2goY2hhciAqbW9kdWxlX25hbWUsIGludCBoYXNoKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OwotCi0JZWxlbWVudCA9IE5VTEw7Ci0JaGVhZCA9ICZtb2R1bGVfdGFibGVbaGFzaF07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW1lbnQsIG5vZGUsIGhlYWQsIGhsaXN0KQotCQlpZiAoIXN0cmNtcChlbGVtZW50LT5uYW1lLCBtb2R1bGVfbmFtZSkpCi0JCQlyZXR1cm4gZWxlbWVudDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCovCi1zdGF0aWMgaW50IF9fYWRkX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IGhhc2gsIGludCBoYXNoMikKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqbmV3OwotCWNoYXIgKm1vZHVsZV9uYW1lOwotCWludCByZXQgPSAwOwotCi0JaWYgKGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JbW9kdWxlX25hbWUgPSBrbWFsbG9jKHN0cmxlbihtb2RfbmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vZHVsZV9uYW1lKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQltb2R1bGVfbmFtZSA9IHN0cmNweShtb2R1bGVfbmFtZSwgbW9kX25hbWUpOwotCW1vZHVsZV9uYW1lW3N0cmxlbihtb2RfbmFtZSldID0gJ1wwJzsKLQluZXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGVidWdfbmFtZSksIEdGUF9LRVJORUwpOwotCWlmICghbmV3KSB7Ci0JCWtmcmVlKG1vZHVsZV9uYW1lKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdCk7Ci0JSU5JVF9ITElTVF9OT0RFKCZuZXctPmhsaXN0Mik7Ci0JbmV3LT5uYW1lID0gbW9kdWxlX25hbWU7Ci0JbmV3LT5oYXNoMSA9IGhhc2g7Ci0JbmV3LT5oYXNoMiA9IGhhc2gyOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdCwgJm1vZHVsZV90YWJsZVtoYXNoXSk7Ci0JaGxpc3RfYWRkX2hlYWRfcmN1KCZuZXctPmhsaXN0MiwgJm1vZHVsZV90YWJsZTJbaGFzaDJdKTsKLQlucl9lbnRyaWVzKys7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKLQllbGVtZW50ID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOwotCWlmICghZWxlbWVudCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaGxpc3RfZGVsX3JjdSgmZWxlbWVudC0+aGxpc3QpOwotCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0Mik7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUoZWxlbWVudC0+bmFtZSk7Ci0JaWYgKGVsZW1lbnQtPmVuYWJsZSkKLQkJbnVtX2VuYWJsZWQtLTsKLQlrZnJlZShlbGVtZW50KTsKLQlucl9lbnRyaWVzLS07Ci1vdXQ6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKTsKLQotaW50IHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgY2hhciAqc2hhcmVfbmFtZSwKLQkJCQkJY2hhciAqZmxhZ3MsIGludCBoYXNoLCBpbnQgaGFzaDIpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW07Ci0JaW50IHJldCA9IDA7Ci0KLQlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKLQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOwotCWlmICghZWxlbSkgewotCQlpZiAoX19hZGRfZGVidWdfbW9kdWxlKG1vZF9uYW1lLCBoYXNoLCBoYXNoMikpCi0JCQlnb3RvIG91dDsKLQkJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQkJaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMICYmCi0JCQkJIXN0cmNtcChtb2RfbmFtZSwgc2hhcmVfbmFtZSkpIHsKLQkJCWVsZW0tPmVuYWJsZSA9IHRydWU7Ci0JCQludW1fZW5hYmxlZCsrOwotCQl9Ci0JfQotCWVsZW0tPnR5cGUgfD0gdHlwZTsKLW91dDoKLQl1cCgmZGVidWdfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKTsKLQotaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBpbnQgdmFsdWUsIGludCBoYXNoKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOwotCWludCByZXQgPSAwOwotCi0JaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMKQotCQlyZXR1cm4gMTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlX2hhc2gobW9kX25hbWUsIGhhc2gpOwotCWlmIChlbGVtICYmIGVsZW0tPmVuYWJsZSkKLQkJcmV0ID0gMTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcik7Ci0KLXN0YXRpYyB2b2lkIHNldF9hbGwoYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGk7Ci0JbG9uZyBsb25nIGVuYWJsZV9tYXNrOwotCi0JZm9yIChpID0gMDsgaSA8IERFQlVHX0hBU0hfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWlmIChtb2R1bGVfdGFibGVbaV0uZmlyc3QgIT0gTlVMTCkgewotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZVtpXSwgaGxpc3QpIHsKLQkJCQllLT5lbmFibGUgPSBlbmFibGU7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGVuYWJsZSkKLQkJZW5hYmxlX21hc2sgPSBVTExPTkdfTUFYOwotCWVsc2UKLQkJZW5hYmxlX21hc2sgPSAwOwotCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgPSBlbmFibGVfbWFzazsKLQlkeW5hbWljX3ByaW50a19lbmFibGVkMiA9IGVuYWJsZV9tYXNrOwotfQotCi1zdGF0aWMgaW50IGRpc2FibGVkX2hhc2goaW50IGksIGJvb2wgZmlyc3RfdGFibGUpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KLQlpZiAoZmlyc3RfdGFibGUpIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZVtpXSwgaGxpc3QpIHsKLQkJCWlmIChlLT5lbmFibGUpCi0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlMltpXSwgaGxpc3QyKSB7Ci0JCQlpZiAoZS0+ZW5hYmxlKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3NpemVfdCBwcl9kZWJ1Z193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQlzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciAqYnVmZmVyLCAqcywgKnZhbHVlX3N0ciwgKnNldHRpbmdfc3RyOwotCWludCBlcnIsIHZhbHVlOwotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtID0gTlVMTDsKLQlpbnQgYWxsID0gMDsKLQotCWlmIChsZW5ndGggPiBQQUdFX1NJWkUgfHwgbGVuZ3RoIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmZXIgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnIgPSAtRUZBVUxUOwotCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgbGVuZ3RoKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmIChsZW5ndGggPCBQQUdFX1NJWkUpCi0JCWJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKLQllbHNlIGlmIChidWZmZXJbUEFHRV9TSVpFLTFdKQotCQlnb3RvIG91dDsKLQotCWVyciA9IC1FSU5WQUw7Ci0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0KLQlpZiAoc3RybmNtcCgic2V0IiwgYnVmZmVyLCAzKSkKLQkJZ290byBvdXRfdXA7Ci0JcyA9IGJ1ZmZlciArIDM7Ci0Jc2V0dGluZ19zdHIgPSBzdHJzZXAoJnMsICI9Iik7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJZ290byBvdXRfdXA7Ci0Jc2V0dGluZ19zdHIgPSBzdHJzdHJpcChzZXR0aW5nX3N0cik7Ci0JdmFsdWVfc3RyID0gc3Ryc2VwKCZzLCAiICIpOwotCWlmIChzID09IE5VTEwpCi0JCWdvdG8gb3V0X3VwOwotCXMgPSBzdHJzdHJpcChzKTsKLQlpZiAoIXN0cm5jbXAocywgImFsbCIsIDMpKQotCQlhbGwgPSAxOwotCWVsc2UKLQkJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKHMpOwotCWlmICghc3RybmNtcChzZXR0aW5nX3N0ciwgImVuYWJsZSIsIDYpKSB7Ci0JCXZhbHVlID0gISFzaW1wbGVfc3RydG9sKHZhbHVlX3N0ciwgTlVMTCwgMTApOwotCQlpZiAoYWxsKSB7Ci0JCQlpZiAodmFsdWUpIHsKLQkJCQlzZXRfYWxsKHRydWUpOwotCQkJCW51bV9lbmFibGVkID0gbnJfZW50cmllczsKLQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOwotCQkJfSBlbHNlIHsKLQkJCQlzZXRfYWxsKGZhbHNlKTsKLQkJCQludW1fZW5hYmxlZCA9IDA7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7Ci0JCQl9Ci0JCQllcnIgPSAwOwotCQl9IGVsc2UgaWYgKGVsZW0pIHsKLQkJCWlmICh2YWx1ZSAmJiAoZWxlbS0+ZW5hYmxlID09IDApKSB7Ci0JCQkJZHluYW1pY19wcmludGtfZW5hYmxlZCB8PSAoMUxMIDw8IGVsZW0tPmhhc2gxKTsKLQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkMiB8PSAoMUxMIDw8IGVsZW0tPmhhc2gyKTsKLQkJCQllbGVtLT5lbmFibGUgPSAxOwotCQkJCW51bV9lbmFibGVkKys7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX1NPTUU7Ci0JCQkJZXJyID0gMDsKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkiZGVidWdnaW5nIGVuYWJsZWQgZm9yIG1vZHVsZSAlc1xuIiwKLQkJCQkJZWxlbS0+bmFtZSk7Ci0JCQl9IGVsc2UgaWYgKCF2YWx1ZSAmJiAoZWxlbS0+ZW5hYmxlID09IDEpKSB7Ci0JCQkJZWxlbS0+ZW5hYmxlID0gMDsKLQkJCQludW1fZW5hYmxlZC0tOwotCQkJCWlmIChkaXNhYmxlZF9oYXNoKGVsZW0tPmhhc2gxLCB0cnVlKSkKLQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZCAmPQotCQkJCQkJCX4oMUxMIDw8IGVsZW0tPmhhc2gxKTsKLQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMiwgZmFsc2UpKQotCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkMiAmPQotCQkJCQkJCX4oMUxMIDw8IGVsZW0tPmhhc2gyKTsKLQkJCQlpZiAobnVtX2VuYWJsZWQpCi0JCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9TT01FOwotCQkJCWVsc2UKLQkJCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7Ci0JCQkJZXJyID0gMDsKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkiZGVidWdnaW5nIGRpc2FibGVkIGZvciBtb2R1bGUgJXNcbiIsCi0JCQkJCWVsZW0tPm5hbWUpOwotCQkJfQotCQl9Ci0JfQotCWlmICghZXJyKQotCQllcnIgPSBsZW5ndGg7Ci1vdXRfdXA6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotb3V0OgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gKCpwb3MgPCBERUJVR19IQVNIX1RBQkxFX1NJWkUpID8gcG9zIDogTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKnByX2RlYnVnX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JKCpwb3MpKys7Ci0JaWYgKCpwb3MgPj0gREVCVUdfSEFTSF9UQUJMRV9TSVpFKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgdm9pZCBwcl9kZWJ1Z19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0JLyogTm90aGluZyB0byBkbyAqLwotfQotCi1zdGF0aWMgaW50IHByX2RlYnVnX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKLQl1bnNpZ25lZCBpbnQgaSA9ICoobG9mZl90ICopIHY7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG5vZGUsIGhlYWQsIGhsaXN0KSB7Ci0JCXNlcV9wcmludGYocywgIiVzIGVuYWJsZWQ9JWQiLCBlbGVtLT5uYW1lLCBlbGVtLT5lbmFibGUpOwotCQlzZXFfcHJpbnRmKHMsICJcbiIpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcl9kZWJ1Z19zZXFfb3BzID0gewotCS5zdGFydCA9IHByX2RlYnVnX3NlcV9zdGFydCwKLQkubmV4dCAgPSBwcl9kZWJ1Z19zZXFfbmV4dCwKLQkuc3RvcCAgPSBwcl9kZWJ1Z19zZXFfc3RvcCwKLQkuc2hvdyAgPSBwcl9kZWJ1Z19zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBwcl9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXJldHVybiBzZXFfb3BlbihmaWxwLCAmcHJfZGVidWdfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByX2RlYnVnX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gcHJfZGVidWdfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gcHJfZGVidWdfd3JpdGUsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpmaWxlOwotCXN0cnVjdCBtb2RfZGVidWcgKml0ZXI7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHluYW1pY19wcmludGsiLCBOVUxMKTsKLQlpZiAoIWRpcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1vZHVsZXMiLCAwNjQ0LCBkaXIsIE5VTEwsCi0JCQkJCSZwcl9kZWJ1Z19vcGVyYXRpb25zKTsKLQlpZiAoIWZpbGUpIHsKLQkJZGVidWdmc19yZW1vdmUoZGlyKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWZvciAodmFsdWUgPSAodW5zaWduZWQgbG9uZylfX3N0YXJ0X19fdmVyYm9zZTsKLQkJdmFsdWUgPCAodW5zaWduZWQgbG9uZylfX3N0b3BfX192ZXJib3NlOwotCQl2YWx1ZSArPSBzaXplb2Yoc3RydWN0IG1vZF9kZWJ1ZykpIHsKLQkJCWl0ZXIgPSAoc3RydWN0IG1vZF9kZWJ1ZyAqKXZhbHVlOwotCQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoaXRlci0+bW9kbmFtZSwKLQkJCQlpdGVyLT50eXBlLAotCQkJCWl0ZXItPmxvZ2ljYWxfbW9kbmFtZSwKLQkJCQlpdGVyLT5mbGFnX25hbWVzLCBpdGVyLT5oYXNoLCBpdGVyLT5oYXNoMik7Ci0JfQotCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCkKLQkJc2V0X2FsbCh0cnVlKTsKLQlyZXR1cm4gMDsKLX0KLW1vZHVsZV9pbml0KGR5bmFtaWNfcHJpbnRrX2luaXQpOwotLyogbWF5IHdhbnQgdG8gbW92ZSB0aGlzIGVhcmxpZXIgc28gd2UgY2FuIGdldCB0cmFjZXMgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KLQotc3RhdGljIGludCBfX2luaXQgZHluYW1pY19wcmludGtfc2V0dXAoY2hhciAqc3RyKQotewotCWlmIChzdHIpCi0JCXJldHVybiAtRU5PRU5UOwotCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9BTEw7Ci0JcmV0dXJuIDA7Ci19Ci0vKiBVc2UgZWFybHlfcGFyYW0oKSwgc28gd2UgY2FuIGdldCBkZWJ1ZyBvdXRwdXQgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KLWVhcmx5X3BhcmFtKCJkeW5hbWljX3ByaW50ayIsIGR5bmFtaWNfcHJpbnRrX3NldHVwKTsKZGlmZiAtLWdpdCBhL2xpYi9rZXJuZWxfbG9jay5jIGIvbGliL2tlcm5lbF9sb2NrLmMKaW5kZXggMDFhM2MyMi4uMzlmMTAyOSAxMDA2NDQKLS0tIGEvbGliL2tlcm5lbF9sb2NrLmMKKysrIGIvbGliL2tlcm5lbF9sb2NrLmMKQEAgLTM5LDcgKzM5LDcgQEAKIGludCBfX2xvY2tmdW5jIF9fcmVhY3F1aXJlX2tlcm5lbF9sb2NrKHZvaWQpCiB7CiAJd2hpbGUgKCFfcmF3X3NwaW5fdHJ5bG9jaygma2VybmVsX2ZsYWcpKSB7Ci0JCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpKQorCQlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJY3B1X3JlbGF4KCk7CiAJfQpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3QuYyBiL2xpYi9rb2JqZWN0LmMKaW5kZXggMDQ4N2QxZi4uYTZkZWMzMiAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3QuYworKysgYi9saWIva29iamVjdC5jCkBAIC0yMTIsNyArMjEyLDcgQEAKICAqIEBmbXQ6IGZvcm1hdCBzdHJpbmcgdXNlZCB0byBidWlsZCB0aGUgbmFtZQogICogQHZhcmdzOiB2YXJncyB0byBmb3JtYXQgdGhlIHN0cmluZy4KICAqLwotc3RhdGljIGludCBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpmbXQsCitpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAogCQkJCSAgdmFfbGlzdCB2YXJncykKIHsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IGtvYmotPm5hbWU7CmRpZmYgLS1naXQgYS9saWIva29iamVjdF91ZXZlbnQuYyBiL2xpYi9rb2JqZWN0X3VldmVudC5jCmluZGV4IDMxODMyOGRkLi45N2E3NzdhIDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtMTE4LDYgKzExOCwxMyBAQAogCWtzZXQgPSB0b3Bfa29iai0+a3NldDsKIAl1ZXZlbnRfb3BzID0ga3NldC0+dWV2ZW50X29wczsKIAorCS8qIHNraXAgdGhlIGV2ZW50LCBpZiB1ZXZlbnRfc3VwcHJlc3MgaXMgc2V0Ki8KKwlpZiAoa29iai0+dWV2ZW50X3N1cHByZXNzKSB7CisJCXByX2RlYnVnKCJrb2JqZWN0OiAnJXMnICglcCk6ICVzOiB1ZXZlbnRfc3VwcHJlc3MgIgorCQkJCSAiY2F1c2VkIHRoZSBldmVudCB0byBkcm9wIVxuIiwKKwkJCQkga29iamVjdF9uYW1lKGtvYmopLCBrb2JqLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KIAkvKiBza2lwIHRoZSBldmVudCwgaWYgdGhlIGZpbHRlciByZXR1cm5zIHplcm8uICovCiAJaWYgKHVldmVudF9vcHMgJiYgdWV2ZW50X29wcy0+ZmlsdGVyKQogCQlpZiAoIXVldmVudF9vcHMtPmZpbHRlcihrc2V0LCBrb2JqKSkgewpAQCAtMjI3LDYgKzIzNCw5IEBACiAJCQlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gMTsKIAkJCXJldHZhbCA9IG5ldGxpbmtfYnJvYWRjYXN0KHVldmVudF9zb2NrLCBza2IsIDAsIDEsCiAJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJCS8qIEVOT0JVRlMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdXNlcnNwYWNlICovCisJCQlpZiAocmV0dmFsID09IC1FTk9CVUZTKQorCQkJCXJldHZhbCA9IDA7CiAJCX0gZWxzZQogCQkJcmV0dmFsID0gLUVOT01FTTsKIAl9CkBAIC0yNDgsNyArMjU4LDcgQEAKIAkJCWdvdG8gZXhpdDsKIAogCQlyZXR2YWwgPSBjYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsCi0JCQkJCSAgICAgZW52LT5lbnZwLCBVTUhfV0FJVF9FWEVDKTsKKwkJCQkJICAgICBlbnYtPmVudnAsIFVNSF9OT19XQUlUKTsKIAl9CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hdHRyLmMgYi9saWIvbmxhdHRyLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gbmV0L25ldGxpbmsvYXR0ci5jCnJlbmFtZSB0byBsaWIvbmxhdHRyLmMKaW5kZXggNTZjM2NlNy4uYzQ3MDZlYiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYXR0ci5jCisrKyBiL2xpYi9ubGF0dHIuYwpAQCAtMTMzLDYgKzEzMywzMiBAQAogfQogCiAvKioKKyAqIG5sYV9wb2xpY3lfbGVuIC0gRGV0ZXJtaW4gdGhlIG1heC4gbGVuZ3RoIG9mIGEgcG9saWN5CisgKiBAcG9saWN5OiBwb2xpY3kgdG8gdXNlCisgKiBAbjogbnVtYmVyIG9mIHBvbGljaWVzCisgKgorICogRGV0ZXJtaW5lcyB0aGUgbWF4LiBsZW5ndGggb2YgdGhlIHBvbGljeS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkCisgKiB0byBhbGxvY2F0ZWQgTmV0bGluayBidWZmZXJzIHJvdWdobHkgdGhlIHNpemUgb2YgdGhlIGFjdHVhbAorICogbWVzc2FnZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludAorbmxhX3BvbGljeV9sZW4oY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnAsIGludCBuKQoreworCWludCBpLCBsZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAocC0+bGVuKQorCQkJbGVuICs9IG5sYV90b3RhbF9zaXplKHAtPmxlbik7CisJCWVsc2UgaWYgKG5sYV9hdHRyX21pbmxlbltwLT50eXBlXSkKKwkJCWxlbiArPSBubGFfdG90YWxfc2l6ZShubGFfYXR0cl9taW5sZW5bcC0+dHlwZV0pOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qKgogICogbmxhX3BhcnNlIC0gUGFyc2UgYSBzdHJlYW0gb2YgYXR0cmlidXRlcyBpbnRvIGEgdGIgYnVmZmVyCiAgKiBAdGI6IGRlc3RpbmF0aW9uIGFycmF5IHdpdGggbWF4dHlwZSsxIGVsZW1lbnRzCiAgKiBAbWF4dHlwZTogbWF4aW11bSBhdHRyaWJ1dGUgdHlwZSB0byBiZSBleHBlY3RlZApAQCAtMjgxLDYgKzMwNyw3IEBACiAJcmV0dXJuIGQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUCiAvKioKICAqIF9fbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgpAQCAtMzA1LDYgKzMzMiw3IEBACiAKIAlyZXR1cm4gbmxhOwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKIAogLyoqCiAgKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTMyNSw2ICszNTMsNyBAQAogCiAJcmV0dXJuIHN0YXJ0OwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlX25vaGRyKTsKIAogLyoqCiAgKiBubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKQEAgLTM0NSw2ICszNzQsNyBAQAogCiAJcmV0dXJuIF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlKTsKIAogLyoqCiAgKiBubGFfcmVzZXJ2ZV9ub2hkciAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC0zNjMsNiArMzkzLDcgQEAKIAogCXJldHVybiBfX25sYV9yZXNlcnZlX25vaGRyKHNrYiwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlX25vaGRyKTsKIAogLyoqCiAgKiBfX25sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKQEAgLTM4Miw2ICs0MTMsNyBAQAogCW5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7CiAJbWVtY3B5KG5sYV9kYXRhKG5sYSksIGRhdGEsIGF0dHJsZW4pOwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOwogCiAvKioKICAqIF9fbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC0zOTksNiArNDMxLDcgQEAKIAlzdGFydCA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKIAltZW1jcHkoc3RhcnQsIGRhdGEsIGF0dHJsZW4pOwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOwogCiAvKioKICAqIG5sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKQEAgLTQxOCw2ICs0NTEsNyBAQAogCV9fbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3B1dCk7CiAKIC8qKgogICogbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC00MzYsNiArNDcwLDcgQEAKIAlfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7CiAKIC8qKgogICogbmxhX2FwcGVuZCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyIG9yIHBhZGRpbmcKQEAgLTQ1NCwyMCArNDg5LDE0IEBACiAJbWVtY3B5KHNrYl9wdXQoc2tiLCBhdHRybGVuKSwgZGF0YSwgYXR0cmxlbik7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9hcHBlbmQpOworI2VuZGlmCiAKIEVYUE9SVF9TWU1CT0wobmxhX3ZhbGlkYXRlKTsKK0VYUE9SVF9TWU1CT0wobmxhX3BvbGljeV9sZW4pOwogRVhQT1JUX1NZTUJPTChubGFfcGFyc2UpOwogRVhQT1JUX1NZTUJPTChubGFfZmluZCk7CiBFWFBPUlRfU1lNQk9MKG5sYV9zdHJsY3B5KTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZSk7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmVfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZSk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlX25vaGRyKTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcHV0KTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcHV0X25vaGRyKTsKLUVYUE9SVF9TWU1CT0wobmxhX3B1dCk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9wdXRfbm9oZHIpOwogRVhQT1JUX1NZTUJPTChubGFfbWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobmxhX21lbWNtcCk7CiBFWFBPUlRfU1lNQk9MKG5sYV9zdHJjbXApOwotRVhQT1JUX1NZTUJPTChubGFfYXBwZW5kKTsKZGlmZiAtLWdpdCBhL2xpYi96bGliX2luZmxhdGUvaW5mbGF0ZS5oIGIvbGliL3psaWJfaW5mbGF0ZS9pbmZsYXRlLmgKaW5kZXggZGY4YTZjOS4uM2QxN2IzZCAxMDA2NDQKLS0tIGEvbGliL3psaWJfaW5mbGF0ZS9pbmZsYXRlLmgKKysrIGIvbGliL3psaWJfaW5mbGF0ZS9pbmZsYXRlLmgKQEAgLTEsMyArMSw2IEBACisjaWZuZGVmIElORkxBVEVfSAorI2RlZmluZSBJTkZMQVRFX0gKKwogLyogaW5mbGF0ZS5oIC0tIGludGVybmFsIGluZmxhdGUgc3RhdGUgZGVmaW5pdGlvbgogICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaApAQCAtMTA1LDMgKzEwOCw0IEBACiAgICAgdW5zaWduZWQgc2hvcnQgd29ya1syODhdOyAgIC8qIHdvcmsgYXJlYSBmb3IgY29kZSB0YWJsZSBidWlsZGluZyAqLwogICAgIGNvZGUgY29kZXNbRU5PVUdIXTsgICAgICAgICAvKiBzcGFjZSBmb3IgY29kZSB0YWJsZXMgKi8KIH07CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi96bGliX2luZmxhdGUvaW5mdHJlZXMuaCBiL2xpYi96bGliX2luZmxhdGUvaW5mdHJlZXMuaAppbmRleCA1ZjUyMTliLi5iNzBiNDczIDEwMDY0NAotLS0gYS9saWIvemxpYl9pbmZsYXRlL2luZnRyZWVzLmgKKysrIGIvbGliL3psaWJfaW5mbGF0ZS9pbmZ0cmVlcy5oCkBAIC0xLDMgKzEsNiBAQAorI2lmbmRlZiBJTkZUUkVFU19ICisjZGVmaW5lIElORlRSRUVTX0gKKwogLyogaW5mdHJlZXMuaCAtLSBoZWFkZXIgdG8gdXNlIGluZnRyZWVzLmMKICAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKQEAgLTUzLDMgKzU2LDQgQEAKIGV4dGVybiBpbnQgemxpYl9pbmZsYXRlX3RhYmxlIChjb2RldHlwZSB0eXBlLCB1bnNpZ25lZCBzaG9ydCAqbGVucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29kZXMsIGNvZGUgKip0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmJpdHMsIHVuc2lnbmVkIHNob3J0ICp3b3JrKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCA3MjI1NWJlLi44MTg1NjliNiAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDEwIEBACiBvYmotJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm8KIG9iai0kKENPTkZJR19GU19YSVApICs9IGZpbGVtYXBfeGlwLm8KIG9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUubworaWZkZWYgQ09ORklHX0hBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEKK29iai0kKENPTkZJR19TTVApICs9IHBlcmNwdS5vCitlbHNlCiBvYmotJChDT05GSUdfU01QKSArPSBhbGxvY3BlcmNwdS5vCitlbmRpZgogb2JqLSQoQ09ORklHX1FVSUNLTElTVCkgKz0gcXVpY2tsaXN0Lm8KIG9iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8gcGFnZV9jZ3JvdXAubwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NwZXJjcHUuYyBiL21tL2FsbG9jcGVyY3B1LmMKaW5kZXggNDI5N2JjNC4uMTg4MjkyMyAxMDA2NDQKLS0tIGEvbW0vYWxsb2NwZXJjcHUuYworKysgYi9tbS9hbGxvY3BlcmNwdS5jCkBAIC05OSw0NSArOTksNTEgQEAKIAlfX3BlcmNwdV9wb3B1bGF0ZV9tYXNrKChfX3BkYXRhKSwgKHNpemUpLCAoZ2ZwKSwgJihtYXNrKSkKIAogLyoqCi0gKiBwZXJjcHVfYWxsb2NfbWFzayAtIGluaXRpYWwgc2V0dXAgb2YgcGVyLWNwdSBkYXRhCisgKiBhbGxvY19wZXJjcHUgLSBpbml0aWFsIHNldHVwIG9mIHBlci1jcHUgZGF0YQogICogQHNpemU6IHNpemUgb2YgcGVyLWNwdSBvYmplY3QKLSAqIEBnZnA6IG1heSBzbGVlcCBvciBub3QgZXRjLgotICogQG1hc2s6IHBvcHVsYXRlIHBlci1kYXRhIGZvciBjcHUncyBzZWxlY3RlZCB0aHJvdWdoIG1hc2sgYml0cworICogQGFsaWduOiBhbGlnbm1lbnQKICAqCi0gKiBQb3B1bGF0aW5nIHBlci1jcHUgZGF0YSBmb3IgYWxsIG9ubGluZSBjcHUncyB3b3VsZCBiZSBhIHR5cGljYWwgdXNlIGNhc2UsCi0gKiB3aGljaCBpcyBzaW1wbGlmaWVkIGJ5IHRoZSBwZXJjcHVfYWxsb2MoKSB3cmFwcGVyLgotICogUGVyLWNwdSBvYmplY3RzIGFyZSBwb3B1bGF0ZWQgd2l0aCB6ZXJvZWQgYnVmZmVycy4KKyAqIEFsbG9jYXRlIGR5bmFtaWMgcGVyY3B1IGFyZWEuICBQZXJjcHUgb2JqZWN0cyBhcmUgcG9wdWxhdGVkIHdpdGgKKyAqIHplcm9lZCBidWZmZXJzLgogICovCi12b2lkICpfX3BlcmNwdV9hbGxvY19tYXNrKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGNwdW1hc2tfdCAqbWFzaykKK3ZvaWQgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCiB7CiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSB3aG9sZSBjYWNoZSBsaW5lcyB0byBhdm9pZCBmYWxzZSBzaGFyaW5nCiAJICovCiAJc2l6ZV90IHN6ID0gcm91bmR1cChucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiksIGNhY2hlX2xpbmVfc2l6ZSgpKTsKLQl2b2lkICpwZGF0YSA9IGt6YWxsb2Moc3osIGdmcCk7CisJdm9pZCAqcGRhdGEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAl2b2lkICpfX3BkYXRhID0gX19wZXJjcHVfZGlzZ3Vpc2UocGRhdGEpOwogCisJLyoKKwkgKiBDYW4ndCBlYXNpbHkgbWFrZSBsYXJnZXIgYWxpZ25tZW50IHdvcmsgd2l0aCBrbWFsbG9jLiAgV0FSTgorCSAqIG9uIGl0LiAgTGFyZ2VyIGFsaWdubWVudCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBtb2R1bGUKKwkgKiBwZXJjcHUgc2VjdGlvbnMgb24gU01QIGZvciB3aGljaCB0aGlzIHBhdGggaXNuJ3QgdXNlZC4KKwkgKi8KKwlXQVJOX09OX09OQ0UoYWxpZ24gPiBTTVBfQ0FDSEVfQllURVMpOworCiAJaWYgKHVubGlrZWx5KCFwZGF0YSkpCiAJCXJldHVybiBOVUxMOwotCWlmIChsaWtlbHkoIV9fcGVyY3B1X3BvcHVsYXRlX21hc2soX19wZGF0YSwgc2l6ZSwgZ2ZwLCBtYXNrKSkpCisJaWYgKGxpa2VseSghX19wZXJjcHVfcG9wdWxhdGVfbWFzayhfX3BkYXRhLCBzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkgICAmY3B1X3Bvc3NpYmxlX21hcCkpKQogCQlyZXR1cm4gX19wZGF0YTsKIAlrZnJlZShwZGF0YSk7CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX3BlcmNwdV9hbGxvY19tYXNrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fYWxsb2NfcGVyY3B1KTsKIAogLyoqCi0gKiBwZXJjcHVfZnJlZSAtIGZpbmFsIGNsZWFudXAgb2YgcGVyLWNwdSBkYXRhCisgKiBmcmVlX3BlcmNwdSAtIGZpbmFsIGNsZWFudXAgb2YgcGVyLWNwdSBkYXRhCiAgKiBAX19wZGF0YTogb2JqZWN0IHRvIGNsZWFuIHVwCiAgKgogICogV2Ugc2ltcGx5IGNsZWFuIHVwIGFueSBwZXItY3B1IG9iamVjdCBsZWZ0LiBObyBuZWVkIGZvciB0aGUgY2xpZW50IHRvCiAgKiB0cmFjayBhbmQgc3BlY2lmeSB0aHJvdWdoIGEgYmlzIG1hc2sgd2hpY2ggcGVyLWNwdSBvYmplY3RzIGFyZSB0byBmcmVlLgogICovCi12b2lkIHBlcmNwdV9mcmVlKHZvaWQgKl9fcGRhdGEpCit2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKl9fcGRhdGEpCiB7CiAJaWYgKHVubGlrZWx5KCFfX3BkYXRhKSkKIAkJcmV0dXJuOwogCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCAmY3B1X3Bvc3NpYmxlX21hcCk7CiAJa2ZyZWUoX19wZXJjcHVfZGlzZ3Vpc2UoX19wZGF0YSkpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocGVyY3B1X2ZyZWUpOworRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOwpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggOGU4NTg3NC4uYmU2OGM5NSAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC0yLDExICsyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAordm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKK30KK0VYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLnJhX3BhZ2VzCT0gVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQgLyBQQUdFX0NBQ0hFX1NJWkUsCisJLnN0YXRlCQk9IDAsCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTUFQX0NPUFksCisJLnVucGx1Z19pb19mbgk9IGRlZmF1bHRfdW5wbHVnX2lvX2ZuLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJkaV9jbGFzczsKIApAQCAtMTY2LDkgKzE3OSwyMCBAQAogCWJkaV9kZWJ1Z19pbml0KCk7CiAJcmV0dXJuIDA7CiB9Ci0KIHBvc3Rjb3JlX2luaXRjYWxsKGJkaV9jbGFzc19pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgZGVmYXVsdF9iZGlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKKwlpZiAoIWVycikKKwkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7CisKKwlyZXR1cm4gZXJyOworfQorc3Vic3lzX2luaXRjYWxsKGRlZmF1bHRfYmRpX2luaXQpOworCiBpbnQgYmRpX3JlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CmRpZmYgLS1naXQgYS9tbS9ib290bWVtLmMgYi9tbS9ib290bWVtLmMKaW5kZXggNTFhMGNjZi4uZGFmOTI3MSAxMDA2NDQKLS0tIGEvbW0vYm9vdG1lbS5jCisrKyBiL21tL2Jvb3RtZW0uYwpAQCAtMzgyLDcgKzM4Miw2IEBACiAJcmV0dXJuIG1hcmtfYm9vdG1lbV9ub2RlKHBnZGF0LT5iZGF0YSwgc3RhcnQsIGVuZCwgMSwgZmxhZ3MpOwogfQogCi0jaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCiAvKioKICAqIHJlc2VydmVfYm9vdG1lbSAtIG1hcmsgYSBwYWdlIHJhbmdlIGFzIHVzYWJsZQogICogQGFkZHI6IHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHJhbmdlCkBAIC00MDMsNyArNDAyLDYgQEAKIAogCXJldHVybiBtYXJrX2Jvb3RtZW0oc3RhcnQsIGVuZCwgMSwgZmxhZ3MpOwogfQotI2VuZGlmIC8qICFDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU1fTk9ERSAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGlnbl9pZHgoc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGEsIHVuc2lnbmVkIGxvbmcgaWR4LAogCQkJdW5zaWduZWQgbG9uZyBzdGVwKQpAQCAtNDI5LDggKzQyNyw4IEBACiB9CiAKIHN0YXRpYyB2b2lkICogX19pbml0IGFsbG9jX2Jvb3RtZW1fY29yZShzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YSwKLQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkJdW5zaWduZWQgbG9uZyBnb2FsLCB1bnNpZ25lZCBsb25nIGxpbWl0KQorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCwgdW5zaWduZWQgbG9uZyBsaW1pdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZhbGxiYWNrID0gMDsKIAl1bnNpZ25lZCBsb25nIG1pbiwgbWF4LCBzdGFydCwgc2lkeCwgbWlkeCwgc3RlcDsKQEAgLTUzMCwxNyArNTI4LDM0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkICogX19pbml0IGFsbG9jX2FyY2hfcHJlZmVycmVkX2Jvb3RtZW0oYm9vdG1lbV9kYXRhX3QgKmJkYXRhLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCwgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3sKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU0KKwlib290bWVtX2RhdGFfdCAqcF9iZGF0YTsKKworCXBfYmRhdGEgPSBib290bWVtX2FyY2hfcHJlZmVycmVkX25vZGUoYmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CisJaWYgKHBfYmRhdGEpCisJCXJldHVybiBhbGxvY19ib290bWVtX2NvcmUocF9iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIGxpbWl0KTsKKyNlbmRpZgorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCAqIF9faW5pdCBfX19hbGxvY19ib290bWVtX25vcGFuaWModW5zaWduZWQgbG9uZyBzaXplLAogCQkJCQl1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCQl1bnNpZ25lZCBsb25nIGdvYWwsCiAJCQkJCXVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CiAJYm9vdG1lbV9kYXRhX3QgKmJkYXRhOworCXZvaWQgKnJlZ2lvbjsKIAogcmVzdGFydDoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkgewotCQl2b2lkICpyZWdpb247CisJcmVnaW9uID0gYWxsb2NfYXJjaF9wcmVmZXJyZWRfYm9vdG1lbShOVUxMLCBzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOworCWlmIChyZWdpb24pCisJCXJldHVybiByZWdpb247CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkgewogCQlpZiAoZ29hbCAmJiBiZGF0YS0+bm9kZV9sb3dfcGZuIDw9IFBGTl9ET1dOKGdvYWwpKQogCQkJY29udGludWU7CiAJCWlmIChsaW1pdCAmJiBiZGF0YS0+bm9kZV9taW5fcGZuID49IFBGTl9ET1dOKGxpbWl0KSkKQEAgLTYxOCw2ICs2MzMsMTAgQEAKIHsKIAl2b2lkICpwdHI7CiAKKwlwdHIgPSBhbGxvY19hcmNoX3ByZWZlcnJlZF9ib290bWVtKGJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOworCWlmIChwdHIpCisJCXJldHVybiBwdHI7CisKIAlwdHIgPSBhbGxvY19ib290bWVtX2NvcmUoYmRhdGEsIHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CiAJaWYgKHB0cikKIAkJcmV0dXJuIHB0cjsKQEAgLTY3NCw2ICs2OTMsMTAgQEAKIHsKIAl2b2lkICpwdHI7CiAKKwlwdHIgPSBhbGxvY19hcmNoX3ByZWZlcnJlZF9ib290bWVtKHBnZGF0LT5iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIDApOworCWlmIChwdHIpCisJCXJldHVybiBwdHI7CisKIAlwdHIgPSBhbGxvY19ib290bWVtX2NvcmUocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgMCk7CiAJaWYgKHB0cikKIAkJcmV0dXJuIHB0cjsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAyM2FjZWZlLi4xMjZkMzk3IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0xODIzLDcgKzE4MjMsNyBAQAogCQlpbnQgY29weSA9IG1pbihieXRlcywgaW92LT5pb3ZfbGVuIC0gYmFzZSk7CiAKIAkJYmFzZSA9IDA7Ci0JCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodmFkZHIsIGJ1ZiwgY29weSk7CisJCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyLCBidWYsIGNvcHkpOwogCQljb3BpZWQgKz0gY29weTsKIAkJYnl0ZXMgLT0gY29weTsKIAkJdmFkZHIgKz0gY29weTsKQEAgLTE4NTEsOCArMTg1MSw3IEBACiAJaWYgKGxpa2VseShpLT5ucl9zZWdzID09IDEpKSB7CiAJCWludCBsZWZ0OwogCQljaGFyIF9fdXNlciAqYnVmID0gaS0+aW92LT5pb3ZfYmFzZSArIGktPmlvdl9vZmZzZXQ7Ci0JCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUoa2FkZHIgKyBvZmZzZXQsCi0JCQkJCQkJYnVmLCBieXRlcyk7CisJCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKGthZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTsKIAkJY29waWVkID0gYnl0ZXMgLSBsZWZ0OwogCX0gZWxzZSB7CiAJCWNvcGllZCA9IF9faW92ZWNfY29weV9mcm9tX3VzZXJfaW5hdG9taWMoa2FkZHIgKyBvZmZzZXQsCkBAIC0xODgwLDcgKzE4NzksNyBAQAogCWlmIChsaWtlbHkoaS0+bnJfc2VncyA9PSAxKSkgewogCQlpbnQgbGVmdDsKIAkJY2hhciBfX3VzZXIgKmJ1ZiA9IGktPmlvdi0+aW92X2Jhc2UgKyBpLT5pb3Zfb2Zmc2V0OwotCQlsZWZ0ID0gX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKGthZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTsKKwkJbGVmdCA9IF9fY29weV9mcm9tX3VzZXIoa2FkZHIgKyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpOwogCQljb3BpZWQgPSBieXRlcyAtIGxlZnQ7CiAJfSBlbHNlIHsKIAkJY29waWVkID0gX19pb3ZlY19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhrYWRkciArIG9mZnNldCwKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAwMGNlZDNlLi4xYWJiOTE4IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNDksNiArMTA1MCw5IEBACiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX21tYXAoZmlsZSwgcmVxcHJvdCwgcHJvdCwgZmxhZ3MsIGFkZHIsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCWVycm9yID0gaW1hX2ZpbGVfbW1hcChmaWxlLCBwcm90KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXJldHVybiBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIGZsYWdzLCB2bV9mbGFncywgcGdvZmYpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNzRkYzU3Yy4uNDBjYTdjZCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC02Niw3ICs2Niw3IEBACiAvKgogICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSA1OworaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSAxMDsKIAogLyoKICAqIGRpcnR5X2JhY2tncm91bmRfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVuY3Rpb24gb2YKQEAgLTgzLDcgKzgzLDcgQEAKIC8qCiAgKiBUaGUgZ2VuZXJhdG9yIG9mIGRpcnR5IGRhdGEgc3RhcnRzIHdyaXRlYmFjayBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IHZtX2RpcnR5X3JhdGlvID0gMTA7CitpbnQgdm1fZGlydHlfcmF0aW8gPSAyMDsKIAogLyoKICAqIHZtX2RpcnR5X2J5dGVzIHN0YXJ0cyBhdCAwIChkaXNhYmxlZCkgc28gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uIG9mCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTVkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9wZXJjcHUuYwpAQCAtMCwwICsxLDEzMjYgQEAKKy8qCisgKiBsaW51eC9tbS9wZXJjcHUuYyAtIHBlcmNwdSBtZW1vcnkgYWxsb2NhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5CQlTVVNFIExpbnV4IFByb2R1Y3RzIEdtYkgKKyAqIENvcHlyaWdodCAoQykgMjAwOQkJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICogVGhpcyBpcyBwZXJjcHUgYWxsb2NhdG9yIHdoaWNoIGNhbiBoYW5kbGUgYm90aCBzdGF0aWMgYW5kIGR5bmFtaWMKKyAqIGFyZWFzLiAgUGVyY3B1IGFyZWFzIGFyZSBhbGxvY2F0ZWQgaW4gY2h1bmtzIGluIHZtYWxsb2MgYXJlYS4gIEVhY2gKKyAqIGNodW5rIGlzIGNvbnNpc3RlZCBvZiBudW1fcG9zc2libGVfY3B1cygpIHVuaXRzIGFuZCB0aGUgZmlyc3QgY2h1bmsKKyAqIGlzIHVzZWQgZm9yIHN0YXRpYyBwZXJjcHUgdmFyaWFibGVzIGluIHRoZSBrZXJuZWwgaW1hZ2UgKHNwZWNpYWwKKyAqIGJvb3QgdGltZSBhbGxvYy9pbml0IGhhbmRsaW5nIG5lY2Vzc2FyeSBhcyB0aGVzZSBhcmVhcyBuZWVkIHRvIGJlCisgKiBicm91Z2h0IHVwIGJlZm9yZSBhbGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBydW5uaW5nKS4gIFVuaXQgZ3Jvd3MgYXMKKyAqIG5lY2Vzc2FyeSBhbmQgYWxsIHVuaXRzIGdyb3cgb3Igc2hyaW5rIGluIHVuaXNvbi4gIFdoZW4gYSBjaHVuayBpcworICogZmlsbGVkIHVwLCBhbm90aGVyIGNodW5rIGlzIGFsbG9jYXRlZC4gIGllLiBpbiB2bWFsbG9jIGFyZWEKKyAqCisgKiAgYzAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSAgICAgICAgICAgICAgICAgICAgICAgICBjMgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgLS0tLS0tLS0tLS0tCisgKiB8IHUwIHwgdTEgfCB1MiB8IHUzIHwgICAgICAgIHwgdTAgfCB1MSB8IHUyIHwgdTMgfCAgICAgIHwgdTAgfCB1MSB8IHUKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tICAuLi4uLi4gIC0tLS0tLS0tLS0tLS0tLS0tLS0gIC4uLi4gIC0tLS0tLS0tLS0tLQorICoKKyAqIEFsbG9jYXRpb24gaXMgZG9uZSBpbiBvZmZzZXQtc2l6ZSBhcmVhcyBvZiBzaW5nbGUgdW5pdCBzcGFjZS4gIEllLAorICogYW4gYXJlYSBvZiA1MTIgYnl0ZXMgYXQgNmsgaW4gYzEgb2NjdXBpZXMgNTEyIGJ5dGVzIGF0IDZrIG9mIGMxOnUwLAorICogYzE6dTEsIGMxOnUyIGFuZCBjMTp1My4gIFBlcmNwdSBhY2Nlc3MgY2FuIGJlIGRvbmUgYnkgY29uZmlndXJpbmcKKyAqIHBlcmNwdSBiYXNlIHJlZ2lzdGVycyBVTklUX1NJWkUgYXBhcnQuCisgKgorICogVGhlcmUgYXJlIHVzdWFsbHkgbWFueSBzbWFsbCBwZXJjcHUgYWxsb2NhdGlvbnMgbWFueSBvZiB0aGVtIGFzCisgKiBzbWFsbCBhcyA0IGJ5dGVzLiAgVGhlIGFsbG9jYXRvciBvcmdhbml6ZXMgY2h1bmtzIGludG8gbGlzdHMKKyAqIGFjY29yZGluZyB0byBmcmVlIHNpemUgYW5kIHRyaWVzIHRvIGFsbG9jYXRlIGZyb20gdGhlIGZ1bGxlc3Qgb25lLgorICogRWFjaCBjaHVuayBrZWVwcyB0aGUgbWF4aW11bSBjb250aWd1b3VzIGFyZWEgc2l6ZSBoaW50IHdoaWNoIGlzCisgKiBndWFyYW50ZWVkIHRvIGJlIGVxYXVsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIGNvbnRpZ3VvdXMKKyAqIGFyZWEgaW4gdGhlIGNodW5rLiAgVGhpcyBoZWxwcyB0aGUgYWxsb2NhdG9yIG5vdCB0byBpdGVyYXRlIHRoZQorICogY2h1bmsgbWFwcyB1bm5lY2Vzc2FyaWx5LgorICoKKyAqIEFsbG9jYXRpb24gc3RhdGUgaW4gZWFjaCBjaHVuayBpcyBrZXB0IHVzaW5nIGFuIGFycmF5IG9mIGludGVnZXJzCisgKiBvbiBjaHVuay0+bWFwLiAgQSBwb3NpdGl2ZSB2YWx1ZSBpbiB0aGUgbWFwIHJlcHJlc2VudHMgYSBmcmVlCisgKiByZWdpb24gYW5kIG5lZ2F0aXZlIGFsbG9jYXRlZC4gIEFsbG9jYXRpb24gaW5zaWRlIGEgY2h1bmsgaXMgZG9uZQorICogYnkgc2Nhbm5pbmcgdGhpcyBtYXAgc2VxdWVudGlhbGx5IGFuZCBzZXJ2aW5nIHRoZSBmaXJzdCBtYXRjaGluZworICogZW50cnkuICBUaGlzIGlzIG1vc3RseSBjb3BpZWQgZnJvbSB0aGUgcGVyY3B1X21vZGFsbG9jKCkgYWxsb2NhdG9yLgorICogQ2h1bmtzIGFyZSBhbHNvIGxpbmtlZCBpbnRvIGEgcmIgdHJlZSB0byBlYXNlIGFkZHJlc3MgdG8gY2h1bmsKKyAqIG1hcHBpbmcgZHVyaW5nIGZyZWUuCisgKgorICogVG8gdXNlIHRoaXMgYWxsb2NhdG9yLCBhcmNoIGNvZGUgc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmdzLgorICoKKyAqIC0gZGVmaW5lIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBCisgKgorICogLSBkZWZpbmUgX19hZGRyX3RvX3BjcHVfcHRyKCkgYW5kIF9fcGNwdV9wdHJfdG9fYWRkcigpIHRvIHRyYW5zbGF0ZQorICogICByZWd1bGFyIGFkZHJlc3MgdG8gcGVyY3B1IHBvaW50ZXIgYW5kIGJhY2sgaWYgdGhleSBuZWVkIHRvIGJlCisgKiAgIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0CisgKgorICogLSB1c2UgcGNwdV9zZXR1cF9maXJzdF9jaHVuaygpIGR1cmluZyBwZXJjcHUgYXJlYSBpbml0aWFsaXphdGlvbiB0bworICogICBzZXR1cCB0aGUgZmlyc3QgY2h1bmsgY29udGFpbmluZyB0aGUga2VybmVsIHN0YXRpYyBwZXJjcHUgYXJlYQorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjZGVmaW5lIFBDUFVfU0xPVF9CQVNFX1NISUZUCQk1CS8qIDEtMzEgc2hhcmVzIHRoZSBzYW1lIHNsb3QgKi8KKyNkZWZpbmUgUENQVV9ERkxfTUFQX0FMTE9DCQkxNgkvKiBzdGFydCBhIG1hcCB3aXRoIDE2IGVudHMgKi8KKworLyogZGVmYXVsdCBhZGRyIDwtPiBwY3B1X3B0ciBtYXBwaW5nLCBvdmVycmlkZSBpbiBhc20vcGVyY3B1LmggaWYgbmVjZXNzYXJ5ICovCisjaWZuZGVmIF9fYWRkcl90b19wY3B1X3B0cgorI2RlZmluZSBfX2FkZHJfdG9fcGNwdV9wdHIoYWRkcikJCQkJCVwKKwkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYWRkcikgLSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcglcCisJCSArICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCkKKyNlbmRpZgorI2lmbmRlZiBfX3BjcHVfcHRyX3RvX2FkZHIKKyNkZWZpbmUgX19wY3B1X3B0cl90b19hZGRyKHB0cikJCQkJCQlcCisJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgKyAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcglcCisJCSAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCkKKyNlbmRpZgorCitzdHJ1Y3QgcGNwdV9jaHVuayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogbGlua2VkIHRvIHBjcHVfc2xvdCBsaXN0cyAqLworCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwkvKiBrZXkgaXMgY2h1bmstPnZtLT5hZGRyICovCisJaW50CQkJZnJlZV9zaXplOwkvKiBmcmVlIGJ5dGVzIGluIHRoZSBjaHVuayAqLworCWludAkJCWNvbnRpZ19oaW50OwkvKiBtYXggY29udGlndW91cyBzaXplIGhpbnQgKi8KKwlzdHJ1Y3Qgdm1fc3RydWN0CSp2bTsJCS8qIG1hcHBlZCB2bWFsbG9jIHJlZ2lvbiAqLworCWludAkJCW1hcF91c2VkOwkvKiAjIG9mIG1hcCBlbnRyaWVzIHVzZWQgKi8KKwlpbnQJCQltYXBfYWxsb2M7CS8qICMgb2YgbWFwIGVudHJpZXMgYWxsb2NhdGVkICovCisJaW50CQkJKm1hcDsJCS8qIGFsbG9jYXRpb24gbWFwICovCisJYm9vbAkJCWltbXV0YWJsZTsJLyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqLworCXN0cnVjdCBwYWdlCQkqKnBhZ2U7CQkvKiBwb2ludHMgdG8gcGFnZSBhcnJheSAqLworCXN0cnVjdCBwYWdlCQkqcGFnZV9hcltdOwkvKiAjY3B1cyAqIFVOSVRfUEFHRVMgKi8KK307CisKK3N0YXRpYyBpbnQgcGNwdV91bml0X3BhZ2VzIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IHBjcHVfdW5pdF9zaXplIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IHBjcHVfY2h1bmtfc2l6ZSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGludCBwY3B1X25yX3Nsb3RzIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc2l6ZV90IHBjcHVfY2h1bmtfc3RydWN0X3NpemUgX19yZWFkX21vc3RseTsKKworLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNodW5rIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBrZXJuZWwgc3RhdGljIGFyZWEgKi8KK3ZvaWQgKnBjcHVfYmFzZV9hZGRyIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChwY3B1X2Jhc2VfYWRkcik7CisKKy8qIG9wdGlvbmFsIHJlc2VydmVkIGNodW5rLCBvbmx5IGFjY2Vzc2libGUgZm9yIHJlc2VydmVkIGFsbG9jYXRpb25zICovCitzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfcmVzZXJ2ZWRfY2h1bms7CisvKiBvZmZzZXQgbGltaXQgb2YgdGhlIHJlc2VydmVkIGNodW5rICovCitzdGF0aWMgaW50IHBjcHVfcmVzZXJ2ZWRfY2h1bmtfbGltaXQ7CisKKy8qCisgKiBTeW5jaHJvbml6YXRpb24gcnVsZXMuCisgKgorICogVGhlcmUgYXJlIHR3byBsb2NrcyAtIHBjcHVfYWxsb2NfbXV0ZXggYW5kIHBjcHVfbG9jay4gIFRoZSBmb3JtZXIKKyAqIHByb3RlY3RzIGFsbG9jYXRpb24vcmVjbGFpbSBwYXRocywgY2h1bmtzIGFuZCBjaHVuay0+cGFnZSBhcnJheXMuCisgKiBUaGUgbGF0dGVyIGlzIGEgc3BpbmxvY2sgYW5kIHByb3RlY3RzIHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMgLQorICogY2h1bmsgc2xvdHMsIHJidHJlZSwgY2h1bmtzIGFuZCBhcmVhIG1hcHMgaW4gY2h1bmtzLgorICoKKyAqIER1cmluZyBhbGxvY2F0aW9uLCBwY3B1X2FsbG9jX211dGV4IGlzIGtlcHQgbG9ja2VkIGFsbCB0aGUgdGltZSBhbmQKKyAqIHBjcHVfbG9jayBpcyBncmFiYmVkIGFuZCByZWxlYXNlZCBhcyBuZWNlc3NhcnkuICBBbGwgYWN0dWFsIG1lbW9yeQorICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4KKyAqCisgKiBGcmVlIHBhdGggYWNjZXNzZXMgYW5kIGFsdGVycyBvbmx5IHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMsIHNvIGl0CisgKiBjYW4gYmUgc2FmZWx5IGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LiAgV2hlbiBtZW1vcnkgbmVlZHMgdG8gYmUKKyAqIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0sIGZyZWUgcGF0aCBzY2hlZHVsZXMgcmVjbGFpbV93b3JrIHdoaWNoCisgKiBncmFicyBib3RoIHBjcHVfYWxsb2NfbXV0ZXggYW5kIHBjcHVfbG9jaywgdW5saW5rcyBjaHVua3MgdG8gYmUKKyAqIHJlY2xhaW1lZCwgcmVsZWFzZSBib3RoIGxvY2tzIGFuZCBmcmVlcyB0aGUgY2h1bmtzLiAgTm90ZSB0aGF0IGl0J3MKKyAqIG5lY2Vzc2FyeSB0byBncmFiIGJvdGggbG9ja3MgdG8gcmVtb3ZlIGEgY2h1bmsgZnJvbSBjaXJjdWxhdGlvbiBhcworICogYWxsb2NhdGlvbiBwYXRoIG1pZ2h0IGJlIHJlZmVyZW5jaW5nIHRoZSBjaHVuayB3aXRoIG9ubHkKKyAqIHBjcHVfYWxsb2NfbXV0ZXggbG9ja2VkLgorICovCitzdGF0aWMgREVGSU5FX01VVEVYKHBjcHVfYWxsb2NfbXV0ZXgpOwkvKiBwcm90ZWN0cyB3aG9sZSBhbGxvYyBhbmQgcmVjbGFpbSAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhwY3B1X2xvY2spOwkvKiBwcm90ZWN0cyBpbmRleCBkYXRhIHN0cnVjdHVyZXMgKi8KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnBjcHVfc2xvdCBfX3JlYWRfbW9zdGx5OyAvKiBjaHVuayBsaXN0IHNsb3RzICovCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgcGNwdV9hZGRyX3Jvb3QgPSBSQl9ST09UOwkvKiBjaHVua3MgYnkgYWRkcmVzcyAqLworCisvKiByZWNsYWltIHdvcmsgdG8gcmVsZWFzZSBmdWxseSBmcmVlIGNodW5rcywgc2NoZWR1bGVkIGZyb20gZnJlZSBwYXRoICovCitzdGF0aWMgdm9pZCBwY3B1X3JlY2xhaW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX1dPUksocGNwdV9yZWNsYWltX3dvcmssIHBjcHVfcmVjbGFpbSk7CisKK3N0YXRpYyBpbnQgX19wY3B1X3NpemVfdG9fc2xvdChpbnQgc2l6ZSkKK3sKKwlpbnQgaGlnaGJpdCA9IGZscyhzaXplKTsJLyogc2l6ZSBpcyBpbiBieXRlcyAqLworCXJldHVybiBtYXgoaGlnaGJpdCAtIFBDUFVfU0xPVF9CQVNFX1NISUZUICsgMiwgMSk7Cit9CisKK3N0YXRpYyBpbnQgcGNwdV9zaXplX3RvX3Nsb3QoaW50IHNpemUpCit7CisJaWYgKHNpemUgPT0gcGNwdV91bml0X3NpemUpCisJCXJldHVybiBwY3B1X25yX3Nsb3RzIC0gMTsKKwlyZXR1cm4gX19wY3B1X3NpemVfdG9fc2xvdChzaXplKTsKK30KKworc3RhdGljIGludCBwY3B1X2NodW5rX3Nsb3QoY29uc3Qgc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQoreworCWlmIChjaHVuay0+ZnJlZV9zaXplIDwgc2l6ZW9mKGludCkgfHwgY2h1bmstPmNvbnRpZ19oaW50IDwgc2l6ZW9mKGludCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHBjcHVfc2l6ZV90b19zbG90KGNodW5rLT5mcmVlX3NpemUpOworfQorCitzdGF0aWMgaW50IHBjcHVfcGFnZV9pZHgodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQoreworCXJldHVybiBjcHUgKiBwY3B1X3VuaXRfcGFnZXMgKyBwYWdlX2lkeDsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICoqcGNwdV9jaHVua19wYWdlcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQoreworCXJldHVybiAmY2h1bmstPnBhZ2VbcGNwdV9wYWdlX2lkeChjcHUsIHBhZ2VfaWR4KV07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjcHVfY2h1bmtfYWRkcihzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1LCBpbnQgcGFnZV9pZHgpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWNodW5rLT52bS0+YWRkciArCisJCShwY3B1X3BhZ2VfaWR4KGNwdSwgcGFnZV9pZHgpIDw8IFBBR0VfU0hJRlQpOworfQorCitzdGF0aWMgYm9vbCBwY3B1X2NodW5rX3BhZ2Vfb2NjdXBpZWQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJCSAgICAgaW50IHBhZ2VfaWR4KQoreworCXJldHVybiAqcGNwdV9jaHVua19wYWdlcChjaHVuaywgMCwgcGFnZV9pZHgpICE9IE5VTEw7Cit9CisKKy8qKgorICogcGNwdV9tZW1fYWxsb2MgLSBhbGxvY2F0ZSBtZW1vcnkKKyAqIEBzaXplOiBieXRlcyB0byBhbGxvY2F0ZQorICoKKyAqIEFsbG9jYXRlIEBzaXplIGJ5dGVzLiAgSWYgQHNpemUgaXMgc21hbGxlciB0aGFuIFBBR0VfU0laRSwKKyAqIGt6YWxsb2MoKSBpcyB1c2VkOyBvdGhlcndpc2UsIHZtYWxsb2MoKSBpcyB1c2VkLiAgVGhlIHJldHVybmVkCisgKiBtZW1vcnkgaXMgYWx3YXlzIHplcm9lZC4KKyAqCisgKiBDT05URVhUOgorICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQgKnBjcHVfbWVtX2FsbG9jKHNpemVfdCBzaXplKQoreworCWlmIChzaXplIDw9IFBBR0VfU0laRSkKKwkJcmV0dXJuIGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZWxzZSB7CisJCXZvaWQgKnB0ciA9IHZtYWxsb2Moc2l6ZSk7CisJCWlmIChwdHIpCisJCQltZW1zZXQocHRyLCAwLCBzaXplKTsKKwkJcmV0dXJuIHB0cjsKKwl9Cit9CisKKy8qKgorICogcGNwdV9tZW1fZnJlZSAtIGZyZWUgbWVtb3J5CisgKiBAcHRyOiBtZW1vcnkgdG8gZnJlZQorICogQHNpemU6IHNpemUgb2YgdGhlIGFyZWEKKyAqCisgKiBGcmVlIEBwdHIuICBAcHRyIHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIHVzaW5nIHBjcHVfbWVtX2FsbG9jKCkuCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfbWVtX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCisJCWtmcmVlKHB0cik7CisJZWxzZQorCQl2ZnJlZShwdHIpOworfQorCisvKioKKyAqIHBjcHVfY2h1bmtfcmVsb2NhdGUgLSBwdXQgY2h1bmsgaW4gdGhlIGFwcHJvcHJpYXRlIGNodW5rIHNsb3QKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBvc2xvdDogdGhlIHByZXZpb3VzIHNsb3QgaXQgd2FzIG9uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYW4gYWxsb2NhdGlvbiBvciBmcmVlIGNoYW5nZWQgQGNodW5rLgorICogTmV3IHNsb3QgYWNjb3JkaW5nIHRvIHRoZSBjaGFuZ2VkIHN0YXRlIGlzIGRldGVybWluZWQgYW5kIEBjaHVuayBpcworICogbW92ZWQgdG8gdGhlIHNsb3QuICBOb3RlIHRoYXQgdGhlIHJlc2VydmVkIGNodW5rIGlzIG5ldmVyIHB1dCBvbgorICogY2h1bmsgc2xvdHMuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfbG9jay4KKyAqLworc3RhdGljIHZvaWQgcGNwdV9jaHVua19yZWxvY2F0ZShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvc2xvdCkKK3sKKwlpbnQgbnNsb3QgPSBwY3B1X2NodW5rX3Nsb3QoY2h1bmspOworCisJaWYgKGNodW5rICE9IHBjcHVfcmVzZXJ2ZWRfY2h1bmsgJiYgb3Nsb3QgIT0gbnNsb3QpIHsKKwkJaWYgKG9zbG90IDwgbnNsb3QpCisJCQlsaXN0X21vdmUoJmNodW5rLT5saXN0LCAmcGNwdV9zbG90W25zbG90XSk7CisJCWVsc2UKKwkJCWxpc3RfbW92ZV90YWlsKCZjaHVuay0+bGlzdCwgJnBjcHVfc2xvdFtuc2xvdF0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICoqcGNwdV9jaHVua19yYl9zZWFyY2godm9pZCAqYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgcmJfbm9kZSAqKnBhcmVudHApCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnBjcHVfYWRkcl9yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQljaHVuayA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHBjcHVfY2h1bmssIHJiX25vZGUpOworCisJCWlmIChhZGRyIDwgY2h1bmstPnZtLT5hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gY2h1bmstPnZtLT5hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKHBhcmVudHApCisJCSpwYXJlbnRwID0gcGFyZW50OworCXJldHVybiBwOworfQorCisvKioKKyAqIHBjcHVfY2h1bmtfYWRkcl9zZWFyY2ggLSBzZWFyY2ggZm9yIGNodW5rIGNvbnRhaW5pbmcgc3BlY2lmaWVkIGFkZHJlc3MKKyAqIEBhZGRyOiBhZGRyZXNzIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBMb29rIGZvciBjaHVuayB3aGljaCBtaWdodCBjb250YWluIEBhZGRyLiAgTW9yZSBzcGVjaWZpY2FsbHksIGl0CisgKiBzZWFyY2hzIGZvciB0aGUgY2h1bmsgd2l0aCB0aGUgaGlnaGVzdCBzdGFydCBhZGRyZXNzIHdoaWNoIGlzbid0CisgKiBiZXlvbmQgQGFkZHIuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfbG9jay4KKyAqCisgKiBSRVRVUk5TOgorICogVGhlIGFkZHJlc3Mgb2YgdGhlIGZvdW5kIGNodW5rLgorICovCitzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY2h1bmtfYWRkcl9zZWFyY2godm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiwgKnBhcmVudDsKKwlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7CisKKwkvKiBpcyBpdCBpbiB0aGUgcmVzZXJ2ZWQgY2h1bms/ICovCisJaWYgKHBjcHVfcmVzZXJ2ZWRfY2h1bmspIHsKKwkJdm9pZCAqc3RhcnQgPSBwY3B1X3Jlc2VydmVkX2NodW5rLT52bS0+YWRkcjsKKworCQlpZiAoYWRkciA+PSBzdGFydCAmJiBhZGRyIDwgc3RhcnQgKyBwY3B1X3Jlc2VydmVkX2NodW5rX2xpbWl0KQorCQkJcmV0dXJuIHBjcHVfcmVzZXJ2ZWRfY2h1bms7CisJfQorCisJLyogbmFoLi4uIHNlYXJjaCB0aGUgcmVndWxhciBvbmVzICovCisJbiA9ICpwY3B1X2NodW5rX3JiX3NlYXJjaChhZGRyLCAmcGFyZW50KTsKKwlpZiAoIW4pIHsKKwkJLyogbm8gZXhhY3RseSBtYXRjaGluZyBjaHVuaywgdGhlIHBhcmVudCBpcyB0aGUgY2xvc2VzdCAqLworCQluID0gcGFyZW50OworCQlCVUdfT04oIW4pOworCX0KKwljaHVuayA9IHJiX2VudHJ5KG4sIHN0cnVjdCBwY3B1X2NodW5rLCByYl9ub2RlKTsKKworCWlmIChhZGRyIDwgY2h1bmstPnZtLT5hZGRyKSB7CisJCS8qIHRoZSBwYXJlbnQgd2FzIHRoZSBuZXh0IG9uZSwgbG9vayBmb3IgdGhlIHByZXZpb3VzIG9uZSAqLworCQluID0gcmJfcHJldihuKTsKKwkJQlVHX09OKCFuKTsKKwkJY2h1bmsgPSByYl9lbnRyeShuLCBzdHJ1Y3QgcGNwdV9jaHVuaywgcmJfbm9kZSk7CisJfQorCisJcmV0dXJuIGNodW5rOworfQorCisvKioKKyAqIHBjcHVfY2h1bmtfYWRkcl9pbnNlcnQgLSBpbnNlcnQgY2h1bmsgaW50byBhZGRyZXNzIHJiIHRyZWUKKyAqIEBuZXc6IGNodW5rIHRvIGluc2VydAorICoKKyAqIEluc2VydCBAbmV3IGludG8gYWRkcmVzcyByYiB0cmVlLgorICoKKyAqIENPTlRFWFQ6CisgKiBwY3B1X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfY2h1bmtfYWRkcl9pbnNlcnQoc3RydWN0IHBjcHVfY2h1bmsgKm5ldykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7CisKKwlwID0gcGNwdV9jaHVua19yYl9zZWFyY2gobmV3LT52bS0+YWRkciwgJnBhcmVudCk7CisJQlVHX09OKCpwKTsKKwlyYl9saW5rX25vZGUoJm5ldy0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJm5ldy0+cmJfbm9kZSwgJnBjcHVfYWRkcl9yb290KTsKK30KKworLyoqCisgKiBwY3B1X2V4dGVuZF9hcmVhX21hcCAtIGV4dGVuZCBhcmVhIG1hcCBmb3IgYWxsb2NhdGlvbgorICogQGNodW5rOiB0YXJnZXQgY2h1bmsKKyAqCisgKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHNvIHRoYXQgaXQgY2FuIGFjY29tb2RhdGUgYW4gYWxsb2NhdGlvbi4KKyAqIEEgc2luZ2xlIGFsbG9jYXRpb24gY2FuIHNwbGl0IGFuIGFyZWEgaW50byB0aHJlZSBhcmVhcywgc28gdGhpcworICogZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IEBjaHVuay0+bWFwIGhhcyBhdCBsZWFzdCB0d28gZXh0cmEgc2xvdHMuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfYWxsb2NfbXV0ZXgsIHBjcHVfbG9jay4gIHBjcHVfbG9jayBpcyByZWxlYXNlZCBhbmQgcmVhY3F1aXJlZAorICogaWYgYXJlYSBtYXAgaXMgZXh0ZW5kZWQuCisgKgorICogUkVUVVJOUzoKKyAqIDAgaWYgbm9vcCwgMSBpZiBzdWNjZXNzZnVsbHkgZXh0ZW5kZWQsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKK3sKKwlpbnQgbmV3X2FsbG9jOworCWludCAqbmV3OworCXNpemVfdCBzaXplOworCisJLyogaGFzIGVub3VnaD8gKi8KKwlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBjaHVuay0+bWFwX3VzZWQgKyAyKQorCQlyZXR1cm4gMDsKKworCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKworCW5ld19hbGxvYyA9IFBDUFVfREZMX01BUF9BTExPQzsKKwl3aGlsZSAobmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMikKKwkJbmV3X2FsbG9jICo9IDI7CisKKwluZXcgPSBwY3B1X21lbV9hbGxvYyhuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKSk7CisJaWYgKCFuZXcpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBBY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcC4gIE9ubHkgZnJlZQorCSAqIGNvdWxkIGhhdmUgaGFwcGVuZWQgaW5iZXR3ZWVuLCBzbyBtYXBfdXNlZCBjb3VsZG4ndCBoYXZlCisJICogZ3Jvd24uCisJICovCisJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlCVUdfT04obmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMik7CisKKwlzaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKKwltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBzaXplKTsKKworCS8qCisJICogbWFwX2FsbG9jIDwgUENQVV9ERkxfTUFQX0FMTE9DIGluZGljYXRlcyB0aGF0IHRoZSBjaHVuayBpcworCSAqIG9uZSBvZiB0aGUgZmlyc3QgY2h1bmtzIGFuZCBzdGlsbCB1c2luZyBzdGF0aWMgbWFwLgorCSAqLworCWlmIChjaHVuay0+bWFwX2FsbG9jID49IFBDUFVfREZMX01BUF9BTExPQykKKwkJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBzaXplKTsKKworCWNodW5rLT5tYXBfYWxsb2MgPSBuZXdfYWxsb2M7CisJY2h1bmstPm1hcCA9IG5ldzsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY3B1X3NwbGl0X2Jsb2NrIC0gc3BsaXQgYSBtYXAgYmxvY2sKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBpOiBpbmRleCBvZiBtYXAgYmxvY2sgdG8gc3BsaXQKKyAqIEBoZWFkOiBoZWFkIHNpemUgaW4gYnl0ZXMgKGNhbiBiZSAwKQorICogQHRhaWw6IHRhaWwgc2l6ZSBpbiBieXRlcyAoY2FuIGJlIDApCisgKgorICogU3BsaXQgdGhlIEBpJ3RoIG1hcCBibG9jayBpbnRvIHR3byBvciB0aHJlZSBibG9ja3MuICBJZiBAaGVhZCBpcworICogbm9uLXplcm8sIEBoZWFkIGJ5dGVzIGJsb2NrIGlzIGluc2VydGVkIGJlZm9yZSBibG9jayBAaSBtb3ZpbmcgaXQKKyAqIHRvIEBpKzEgYW5kIHJlZHVjaW5nIGl0cyBzaXplIGJ5IEBoZWFkIGJ5dGVzLgorICoKKyAqIElmIEB0YWlsIGlzIG5vbi16ZXJvLCB0aGUgdGFyZ2V0IGJsb2NrLCB3aGljaCBjYW4gYmUgQGkgb3IgQGkrMQorICogZGVwZW5kaW5nIG9uIEBoZWFkLCBpcyByZWR1Y2VkIGJ5IEB0YWlsIGJ5dGVzIGFuZCBAdGFpbCBieXRlIGJsb2NrCisgKiBpcyBpbnNlcnRlZCBhZnRlciB0aGUgdGFyZ2V0IGJsb2NrLgorICoKKyAqIEBjaHVuay0+bWFwIG11c3QgaGF2ZSBlbm91Z2ggZnJlZSBzbG90cyB0byBhY2NvbW9kYXRlIHRoZSBzcGxpdC4KKyAqCisgKiBDT05URVhUOgorICogcGNwdV9sb2NrLgorICovCitzdGF0aWMgdm9pZCBwY3B1X3NwbGl0X2Jsb2NrKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IGksCisJCQkgICAgIGludCBoZWFkLCBpbnQgdGFpbCkKK3sKKwlpbnQgbnJfZXh0cmEgPSAhIWhlYWQgKyAhIXRhaWw7CisKKwlCVUdfT04oY2h1bmstPm1hcF9hbGxvYyA8IGNodW5rLT5tYXBfdXNlZCArIG5yX2V4dHJhKTsKKworCS8qIGluc2VydCBuZXcgc3ViYmxvY2tzICovCisJbWVtbW92ZSgmY2h1bmstPm1hcFtpICsgbnJfZXh0cmFdLCAmY2h1bmstPm1hcFtpXSwKKwkJc2l6ZW9mKGNodW5rLT5tYXBbMF0pICogKGNodW5rLT5tYXBfdXNlZCAtIGkpKTsKKwljaHVuay0+bWFwX3VzZWQgKz0gbnJfZXh0cmE7CisKKwlpZiAoaGVhZCkgeworCQljaHVuay0+bWFwW2kgKyAxXSA9IGNodW5rLT5tYXBbaV0gLSBoZWFkOworCQljaHVuay0+bWFwW2krK10gPSBoZWFkOworCX0KKwlpZiAodGFpbCkgeworCQljaHVuay0+bWFwW2krK10gLT0gdGFpbDsKKwkJY2h1bmstPm1hcFtpXSA9IHRhaWw7CisJfQorfQorCisvKioKKyAqIHBjcHVfYWxsb2NfYXJlYSAtIGFsbG9jYXRlIGFyZWEgZnJvbSBhIHBjcHVfY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBzaXplOiB3YW50ZWQgc2l6ZSBpbiBieXRlcworICogQGFsaWduOiB3YW50ZWQgYWxpZ24KKyAqCisgKiBUcnkgdG8gYWxsb2NhdGUgQHNpemUgYnl0ZXMgYXJlYSBhbGlnbmVkIGF0IEBhbGlnbiBmcm9tIEBjaHVuay4KKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgYWxsb2NhdGVzIHRoZSBvZmZzZXQuICBJdCBkb2Vzbid0CisgKiBwb3B1bGF0ZSBvciBtYXAgdGhlIGFyZWEuCisgKgorICogQGNodW5rLT5tYXAgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBmcmVlIHNsb3RzLgorICoKKyAqIENPTlRFWFQ6CisgKiBwY3B1X2xvY2suCisgKgorICogUkVUVVJOUzoKKyAqIEFsbG9jYXRlZCBvZmZzZXQgaW4gQGNodW5rIG9uIHN1Y2Nlc3MsIC0xIGlmIG5vIG1hdGNoaW5nIGFyZWEgaXMKKyAqIGZvdW5kLgorICovCitzdGF0aWMgaW50IHBjcHVfYWxsb2NfYXJlYShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBzaXplLCBpbnQgYWxpZ24pCit7CisJaW50IG9zbG90ID0gcGNwdV9jaHVua19zbG90KGNodW5rKTsKKwlpbnQgbWF4X2NvbnRpZyA9IDA7CisJaW50IGksIG9mZjsKKworCWZvciAoaSA9IDAsIG9mZiA9IDA7IGkgPCBjaHVuay0+bWFwX3VzZWQ7IG9mZiArPSBhYnMoY2h1bmstPm1hcFtpKytdKSkgeworCQlib29sIGlzX2xhc3QgPSBpICsgMSA9PSBjaHVuay0+bWFwX3VzZWQ7CisJCWludCBoZWFkLCB0YWlsOworCisJCS8qIGV4dHJhIGZvciBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgKi8KKwkJaGVhZCA9IEFMSUdOKG9mZiwgYWxpZ24pIC0gb2ZmOworCQlCVUdfT04oaSA9PSAwICYmIGhlYWQgIT0gMCk7CisKKwkJaWYgKGNodW5rLT5tYXBbaV0gPCAwKQorCQkJY29udGludWU7CisJCWlmIChjaHVuay0+bWFwW2ldIDwgaGVhZCArIHNpemUpIHsKKwkJCW1heF9jb250aWcgPSBtYXgoY2h1bmstPm1hcFtpXSwgbWF4X2NvbnRpZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIElmIGhlYWQgaXMgc21hbGwgb3IgdGhlIHByZXZpb3VzIGJsb2NrIGlzIGZyZWUsCisJCSAqIG1lcmdlJ2VtLiAgTm90ZSB0aGF0ICdzbWFsbCcgaXMgZGVmaW5lZCBhcyBzbWFsbGVyCisJCSAqIHRoYW4gc2l6ZW9mKGludCksIHdoaWNoIGlzIHZlcnkgc21hbGwgYnV0IGlzbid0IHRvbworCQkgKiB1bmNvbW1vbiBmb3IgcGVyY3B1IGFsbG9jYXRpb25zLgorCQkgKi8KKwkJaWYgKGhlYWQgJiYgKGhlYWQgPCBzaXplb2YoaW50KSB8fCBjaHVuay0+bWFwW2kgLSAxXSA+IDApKSB7CisJCQlpZiAoY2h1bmstPm1hcFtpIC0gMV0gPiAwKQorCQkJCWNodW5rLT5tYXBbaSAtIDFdICs9IGhlYWQ7CisJCQllbHNlIHsKKwkJCQljaHVuay0+bWFwW2kgLSAxXSAtPSBoZWFkOworCQkJCWNodW5rLT5mcmVlX3NpemUgLT0gaGVhZDsKKwkJCX0KKwkJCWNodW5rLT5tYXBbaV0gLT0gaGVhZDsKKwkJCW9mZiArPSBoZWFkOworCQkJaGVhZCA9IDA7CisJCX0KKworCQkvKiBpZiB0YWlsIGlzIHNtYWxsLCBqdXN0IGtlZXAgaXQgYXJvdW5kICovCisJCXRhaWwgPSBjaHVuay0+bWFwW2ldIC0gaGVhZCAtIHNpemU7CisJCWlmICh0YWlsIDwgc2l6ZW9mKGludCkpCisJCQl0YWlsID0gMDsKKworCQkvKiBzcGxpdCBpZiB3YXJyYW50ZWQgKi8KKwkJaWYgKGhlYWQgfHwgdGFpbCkgeworCQkJcGNwdV9zcGxpdF9ibG9jayhjaHVuaywgaSwgaGVhZCwgdGFpbCk7CisJCQlpZiAoaGVhZCkgeworCQkJCWkrKzsKKwkJCQlvZmYgKz0gaGVhZDsKKwkJCQltYXhfY29udGlnID0gbWF4KGNodW5rLT5tYXBbaSAtIDFdLCBtYXhfY29udGlnKTsKKwkJCX0KKwkJCWlmICh0YWlsKQorCQkJCW1heF9jb250aWcgPSBtYXgoY2h1bmstPm1hcFtpICsgMV0sIG1heF9jb250aWcpOworCQl9CisKKwkJLyogdXBkYXRlIGhpbnQgYW5kIG1hcmsgYWxsb2NhdGVkICovCisJCWlmIChpc19sYXN0KQorCQkJY2h1bmstPmNvbnRpZ19oaW50ID0gbWF4X2NvbnRpZzsgLyogZnVsbHkgc2Nhbm5lZCAqLworCQllbHNlCisJCQljaHVuay0+Y29udGlnX2hpbnQgPSBtYXgoY2h1bmstPmNvbnRpZ19oaW50LAorCQkJCQkJIG1heF9jb250aWcpOworCisJCWNodW5rLT5mcmVlX3NpemUgLT0gY2h1bmstPm1hcFtpXTsKKwkJY2h1bmstPm1hcFtpXSA9IC1jaHVuay0+bWFwW2ldOworCisJCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIG9zbG90KTsKKwkJcmV0dXJuIG9mZjsKKwl9CisKKwljaHVuay0+Y29udGlnX2hpbnQgPSBtYXhfY29udGlnOwkvKiBmdWxseSBzY2FubmVkICovCisJcGNwdV9jaHVua19yZWxvY2F0ZShjaHVuaywgb3Nsb3QpOworCisJLyogdGVsbCB0aGUgdXBwZXIgbGF5ZXIgdGhhdCB0aGlzIGNodW5rIGhhcyBubyBtYXRjaGluZyBhcmVhICovCisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIHBjcHVfZnJlZV9hcmVhIC0gZnJlZSBhcmVhIHRvIGEgcGNwdV9jaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQGZyZWVtZTogb2Zmc2V0IG9mIGFyZWEgdG8gZnJlZQorICoKKyAqIEZyZWUgYXJlYSBzdGFydGluZyBmcm9tIEBmcmVlbWUgdG8gQGNodW5rLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIG9ubHkgbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gbWFwLiAgSXQgZG9lc24ndCBkZXBvcHVsYXRlIG9yIHVubWFwCisgKiB0aGUgYXJlYS4KKyAqCisgKiBDT05URVhUOgorICogcGNwdV9sb2NrLgorICovCitzdGF0aWMgdm9pZCBwY3B1X2ZyZWVfYXJlYShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBmcmVlbWUpCit7CisJaW50IG9zbG90ID0gcGNwdV9jaHVua19zbG90KGNodW5rKTsKKwlpbnQgaSwgb2ZmOworCisJZm9yIChpID0gMCwgb2ZmID0gMDsgaSA8IGNodW5rLT5tYXBfdXNlZDsgb2ZmICs9IGFicyhjaHVuay0+bWFwW2krK10pKQorCQlpZiAob2ZmID09IGZyZWVtZSkKKwkJCWJyZWFrOworCUJVR19PTihvZmYgIT0gZnJlZW1lKTsKKwlCVUdfT04oY2h1bmstPm1hcFtpXSA+IDApOworCisJY2h1bmstPm1hcFtpXSA9IC1jaHVuay0+bWFwW2ldOworCWNodW5rLT5mcmVlX3NpemUgKz0gY2h1bmstPm1hcFtpXTsKKworCS8qIG1lcmdlIHdpdGggcHJldmlvdXM/ICovCisJaWYgKGkgPiAwICYmIGNodW5rLT5tYXBbaSAtIDFdID49IDApIHsKKwkJY2h1bmstPm1hcFtpIC0gMV0gKz0gY2h1bmstPm1hcFtpXTsKKwkJY2h1bmstPm1hcF91c2VkLS07CisJCW1lbW1vdmUoJmNodW5rLT5tYXBbaV0sICZjaHVuay0+bWFwW2kgKyAxXSwKKwkJCShjaHVuay0+bWFwX3VzZWQgLSBpKSAqIHNpemVvZihjaHVuay0+bWFwWzBdKSk7CisJCWktLTsKKwl9CisJLyogbWVyZ2Ugd2l0aCBuZXh0PyAqLworCWlmIChpICsgMSA8IGNodW5rLT5tYXBfdXNlZCAmJiBjaHVuay0+bWFwW2kgKyAxXSA+PSAwKSB7CisJCWNodW5rLT5tYXBbaV0gKz0gY2h1bmstPm1hcFtpICsgMV07CisJCWNodW5rLT5tYXBfdXNlZC0tOworCQltZW1tb3ZlKCZjaHVuay0+bWFwW2kgKyAxXSwgJmNodW5rLT5tYXBbaSArIDJdLAorCQkJKGNodW5rLT5tYXBfdXNlZCAtIChpICsgMSkpICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pKTsKKwl9CisKKwljaHVuay0+Y29udGlnX2hpbnQgPSBtYXgoY2h1bmstPm1hcFtpXSwgY2h1bmstPmNvbnRpZ19oaW50KTsKKwlwY3B1X2NodW5rX3JlbG9jYXRlKGNodW5rLCBvc2xvdCk7Cit9CisKKy8qKgorICogcGNwdV91bm1hcCAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIHVubWFwCisgKiBAcGFnZV9lbmQ6IHBhZ2UgaW5kZXggb2YgdGhlIGxhc3QgcGFnZSB0byB1bm1hcCArIDEKKyAqIEBmbHVzaDogd2hldGhlciB0byBmbHVzaCBjYWNoZSBhbmQgdGxiIG9yIG5vdAorICoKKyAqIEZvciBlYWNoIGNwdSwgdW5tYXAgcGFnZXMgW0BwYWdlX3N0YXJ0LEBwYWdlX2VuZCkgb3V0IG9mIEBjaHVuay4KKyAqIElmIEBmbHVzaCBpcyB0cnVlLCB2Y2FjaGUgaXMgZmx1c2hlZCBiZWZvcmUgdW5tYXBwaW5nIGFuZCB0bGIKKyAqIGFmdGVyLgorICovCitzdGF0aWMgdm9pZCBwY3B1X3VubWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IHBhZ2Vfc3RhcnQsIGludCBwYWdlX2VuZCwKKwkJICAgICAgIGJvb2wgZmx1c2gpCit7CisJdW5zaWduZWQgaW50IGxhc3QgPSBudW1fcG9zc2libGVfY3B1cygpIC0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJLyogdW5tYXAgbXVzdCBub3QgYmUgZG9uZSBvbiBpbW11dGFibGUgY2h1bmsgKi8KKwlXQVJOX09OKGNodW5rLT5pbW11dGFibGUpOworCisJLyoKKwkgKiBFYWNoIGZsdXNoaW5nIHRyaWFsIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgaXNzdWUgZmx1c2ggb24KKwkgKiB0aGUgd2hvbGUgcmVnaW9uIGF0IG9uY2UgcmF0aGVyIHRoYW4gZG9pbmcgaXQgZm9yIGVhY2ggY3B1LgorCSAqIFRoaXMgY291bGQgYmUgYW4gb3ZlcmtpbGwgYnV0IGlzIG1vcmUgc2NhbGFibGUuCisJICovCisJaWYgKGZsdXNoKQorCQlmbHVzaF9jYWNoZV92dW5tYXAocGNwdV9jaHVua19hZGRyKGNodW5rLCAwLCBwYWdlX3N0YXJ0KSwKKwkJCQkgICBwY3B1X2NodW5rX2FkZHIoY2h1bmssIGxhc3QsIHBhZ2VfZW5kKSk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQl1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCgKKwkJCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksCisJCQkJKHBhZ2VfZW5kIC0gcGFnZV9zdGFydCkgPDwgUEFHRV9TSElGVCk7CisKKwkvKiBkaXR0byBhcyBmbHVzaF9jYWNoZV92dW5tYXAoKSAqLworCWlmIChmbHVzaCkKKwkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShwY3B1X2NodW5rX2FkZHIoY2h1bmssIDAsIHBhZ2Vfc3RhcnQpLAorCQkJCSAgICAgICBwY3B1X2NodW5rX2FkZHIoY2h1bmssIGxhc3QsIHBhZ2VfZW5kKSk7Cit9CisKKy8qKgorICogcGNwdV9kZXBvcHVsYXRlX2NodW5rIC0gZGVwb3B1bGF0ZSBhbmQgdW5tYXAgYW4gYXJlYSBvZiBhIHBjcHVfY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgdG8gZGVwb3B1bGF0ZQorICogQG9mZjogb2Zmc2V0IHRvIHRoZSBhcmVhIHRvIGRlcG9wdWxhdGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBhcmVhIHRvIGRlcG9wdWxhdGUgaW4gYnl0ZXMKKyAqIEBmbHVzaDogd2hldGhlciB0byBmbHVzaCBjYWNoZSBhbmQgdGxiIG9yIG5vdAorICoKKyAqIEZvciBlYWNoIGNwdSwgZGVwb3B1bGF0ZSBhbmQgdW5tYXAgcGFnZXMgW0BwYWdlX3N0YXJ0LEBwYWdlX2VuZCkKKyAqIGZyb20gQGNodW5rLiAgSWYgQGZsdXNoIGlzIHRydWUsIHZjYWNoZSBpcyBmbHVzaGVkIGJlZm9yZSB1bm1hcHBpbmcKKyAqIGFuZCB0bGIgYWZ0ZXIuCisgKgorICogQ09OVEVYVDoKKyAqIHBjcHVfYWxsb2NfbXV0ZXguCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfZGVwb3B1bGF0ZV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIGludCBzaXplLAorCQkJCSAgYm9vbCBmbHVzaCkKK3sKKwlpbnQgcGFnZV9zdGFydCA9IFBGTl9ET1dOKG9mZik7CisJaW50IHBhZ2VfZW5kID0gUEZOX1VQKG9mZiArIHNpemUpOworCWludCB1bm1hcF9zdGFydCA9IC0xOworCWludCB1bmluaXRpYWxpemVkX3Zhcih1bm1hcF9lbmQpOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGk7CisKKwlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIDwgcGFnZV9lbmQ7IGkrKykgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwID0gcGNwdV9jaHVua19wYWdlcChjaHVuaywgY3B1LCBpKTsKKworCQkJaWYgKCEqcGFnZXApCisJCQkJY29udGludWU7CisKKwkJCV9fZnJlZV9wYWdlKCpwYWdlcCk7CisKKwkJCS8qCisJCQkgKiBJZiBpdCdzIHBhcnRpYWwgZGVwb3B1bGF0aW9uLCBpdCBtaWdodCBnZXQKKwkJCSAqIHBvcHVsYXRlZCBvciBkZXBvcHVsYXRlZCBhZ2Fpbi4gIE1hcmsgdGhlCisJCQkgKiBwYWdlIGdvbmUuCisJCQkgKi8KKwkJCSpwYWdlcCA9IE5VTEw7CisKKwkJCXVubWFwX3N0YXJ0ID0gdW5tYXBfc3RhcnQgPCAwID8gaSA6IHVubWFwX3N0YXJ0OworCQkJdW5tYXBfZW5kID0gaSArIDE7CisJCX0KKwl9CisKKwlpZiAodW5tYXBfc3RhcnQgPj0gMCkKKwkJcGNwdV91bm1hcChjaHVuaywgdW5tYXBfc3RhcnQsIHVubWFwX2VuZCwgZmx1c2gpOworfQorCisvKioKKyAqIHBjcHVfbWFwIC0gbWFwIHBhZ2VzIGludG8gYSBwY3B1X2NodW5rCisgKiBAY2h1bms6IGNodW5rIG9mIGludGVyZXN0CisgKiBAcGFnZV9zdGFydDogcGFnZSBpbmRleCBvZiB0aGUgZmlyc3QgcGFnZSB0byBtYXAKKyAqIEBwYWdlX2VuZDogcGFnZSBpbmRleCBvZiB0aGUgbGFzdCBwYWdlIHRvIG1hcCArIDEKKyAqCisgKiBGb3IgZWFjaCBjcHUsIG1hcCBwYWdlcyBbQHBhZ2Vfc3RhcnQsQHBhZ2VfZW5kKSBpbnRvIEBjaHVuay4KKyAqIHZjYWNoZSBpcyBmbHVzaGVkIGFmdGVyd2FyZHMuCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgcGFnZV9zdGFydCwgaW50IHBhZ2VfZW5kKQoreworCXVuc2lnbmVkIGludCBsYXN0ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAtIDE7CisJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgZXJyOworCisJLyogbWFwIG11c3Qgbm90IGJlIGRvbmUgb24gaW1tdXRhYmxlIGNodW5rICovCisJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJZXJyID0gbWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKAorCQkJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgY3B1LCBwYWdlX3N0YXJ0KSwKKwkJCQkocGFnZV9lbmQgLSBwYWdlX3N0YXJ0KSA8PCBQQUdFX1NISUZULAorCQkJCVBBR0VfS0VSTkVMLAorCQkJCXBjcHVfY2h1bmtfcGFnZXAoY2h1bmssIGNwdSwgcGFnZV9zdGFydCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogZmx1c2ggYXQgb25jZSwgcGxlYXNlIHJlYWQgY29tbWVudHMgaW4gcGNwdV91bm1hcCgpICovCisJZmx1c2hfY2FjaGVfdm1hcChwY3B1X2NodW5rX2FkZHIoY2h1bmssIDAsIHBhZ2Vfc3RhcnQpLAorCQkJIHBjcHVfY2h1bmtfYWRkcihjaHVuaywgbGFzdCwgcGFnZV9lbmQpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY3B1X3BvcHVsYXRlX2NodW5rIC0gcG9wdWxhdGUgYW5kIG1hcCBhbiBhcmVhIG9mIGEgcGNwdV9jaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQG9mZjogb2Zmc2V0IHRvIHRoZSBhcmVhIHRvIHBvcHVsYXRlCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYXJlYSB0byBwb3B1bGF0ZSBpbiBieXRlcworICoKKyAqIEZvciBlYWNoIGNwdSwgcG9wdWxhdGUgYW5kIG1hcCBwYWdlcyBbQHBhZ2Vfc3RhcnQsQHBhZ2VfZW5kKSBpbnRvCisgKiBAY2h1bmsuICBUaGUgYXJlYSBpcyBjbGVhcmVkIG9uIHJldHVybi4KKyAqCisgKiBDT05URVhUOgorICogcGNwdV9hbGxvY19tdXRleCwgZG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9wb3B1bGF0ZV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIGludCBzaXplKQoreworCWNvbnN0IGdmcF90IGFsbG9jX21hc2sgPSBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0NPTEQ7CisJaW50IHBhZ2Vfc3RhcnQgPSBQRk5fRE9XTihvZmYpOworCWludCBwYWdlX2VuZCA9IFBGTl9VUChvZmYgKyBzaXplKTsKKwlpbnQgbWFwX3N0YXJ0ID0gLTE7CisJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKG1hcF9lbmQpOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGk7CisKKwlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIDwgcGFnZV9lbmQ7IGkrKykgeworCQlpZiAocGNwdV9jaHVua19wYWdlX29jY3VwaWVkKGNodW5rLCBpKSkgeworCQkJaWYgKG1hcF9zdGFydCA+PSAwKSB7CisJCQkJaWYgKHBjcHVfbWFwKGNodW5rLCBtYXBfc3RhcnQsIG1hcF9lbmQpKQorCQkJCQlnb3RvIGVycjsKKwkJCQltYXBfc3RhcnQgPSAtMTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbWFwX3N0YXJ0ID0gbWFwX3N0YXJ0IDwgMCA/IGkgOiBtYXBfc3RhcnQ7CisJCW1hcF9lbmQgPSBpICsgMTsKKworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwID0gcGNwdV9jaHVua19wYWdlcChjaHVuaywgY3B1LCBpKTsKKworCQkJKnBhZ2VwID0gYWxsb2NfcGFnZXNfbm9kZShjcHVfdG9fbm9kZShjcHUpLAorCQkJCQkJICBhbGxvY19tYXNrLCAwKTsKKwkJCWlmICghKnBhZ2VwKQorCQkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKG1hcF9zdGFydCA+PSAwICYmIHBjcHVfbWFwKGNodW5rLCBtYXBfc3RhcnQsIG1hcF9lbmQpKQorCQlnb3RvIGVycjsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCW1lbXNldChjaHVuay0+dm0tPmFkZHIgKyBjcHUgKiBwY3B1X3VuaXRfc2l6ZSArIG9mZiwgMCwKKwkJICAgICAgIHNpemUpOworCisJcmV0dXJuIDA7CitlcnI6CisJLyogbGlrZWx5IHVuZGVyIGhlYXZ5IG1lbW9yeSBwcmVzc3VyZSwgZ2l2ZSBtZW1vcnkgYmFjayAqLworCXBjcHVfZGVwb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplLCB0cnVlKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wY3B1X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKK3sKKwlpZiAoIWNodW5rKQorCQlyZXR1cm47CisJaWYgKGNodW5rLT52bSkKKwkJZnJlZV92bV9hcmVhKGNodW5rLT52bSk7CisJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pKTsKKwlrZnJlZShjaHVuayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqYWxsb2NfcGNwdV9jaHVuayh2b2lkKQoreworCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKKworCWNodW5rID0ga3phbGxvYyhwY3B1X2NodW5rX3N0cnVjdF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNodW5rKQorCQlyZXR1cm4gTlVMTDsKKworCWNodW5rLT5tYXAgPSBwY3B1X21lbV9hbGxvYyhQQ1BVX0RGTF9NQVBfQUxMT0MgKiBzaXplb2YoY2h1bmstPm1hcFswXSkpOworCWNodW5rLT5tYXBfYWxsb2MgPSBQQ1BVX0RGTF9NQVBfQUxMT0M7CisJY2h1bmstPm1hcFtjaHVuay0+bWFwX3VzZWQrK10gPSBwY3B1X3VuaXRfc2l6ZTsKKwljaHVuay0+cGFnZSA9IGNodW5rLT5wYWdlX2FyOworCisJY2h1bmstPnZtID0gZ2V0X3ZtX2FyZWEocGNwdV9jaHVua19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNodW5rLT52bSkgeworCQlmcmVlX3BjcHVfY2h1bmsoY2h1bmspOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmY2h1bmstPmxpc3QpOworCWNodW5rLT5mcmVlX3NpemUgPSBwY3B1X3VuaXRfc2l6ZTsKKwljaHVuay0+Y29udGlnX2hpbnQgPSBwY3B1X3VuaXRfc2l6ZTsKKworCXJldHVybiBjaHVuazsKK30KKworLyoqCisgKiBwY3B1X2FsbG9jIC0gdGhlIHBlcmNwdSBhbGxvY2F0b3IKKyAqIEBzaXplOiBzaXplIG9mIGFyZWEgdG8gYWxsb2NhdGUgaW4gYnl0ZXMKKyAqIEBhbGlnbjogYWxpZ25tZW50IG9mIGFyZWEgKG1heCBQQUdFX1NJWkUpCisgKiBAcmVzZXJ2ZWQ6IGFsbG9jYXRlIGZyb20gdGhlIHJlc2VydmVkIGNodW5rIGlmIGF2YWlsYWJsZQorICoKKyAqIEFsbG9jYXRlIHBlcmNwdSBhcmVhIG9mIEBzaXplIGJ5dGVzIGFsaWduZWQgYXQgQGFsaWduLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogUGVyY3B1IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQgKnBjcHVfYWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCkKK3sKKwlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7CisJaW50IHNsb3QsIG9mZjsKKworCWlmICh1bmxpa2VseSghc2l6ZSB8fCBzaXplID4gUENQVV9NSU5fVU5JVF9TSVpFIHx8IGFsaWduID4gUEFHRV9TSVpFKSkgeworCQlXQVJOKHRydWUsICJpbGxlZ2FsIHNpemUgKCV6dSkgb3IgYWxpZ24gKCV6dSkgZm9yICIKKwkJICAgICAicGVyY3B1IGFsbG9jYXRpb25cbiIsIHNpemUsIGFsaWduKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbXV0ZXhfbG9jaygmcGNwdV9hbGxvY19tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKworCS8qIHNlcnZlIHJlc2VydmVkIGFsbG9jYXRpb25zIGZyb20gdGhlIHJlc2VydmVkIGNodW5rIGlmIGF2YWlsYWJsZSAqLworCWlmIChyZXNlcnZlZCAmJiBwY3B1X3Jlc2VydmVkX2NodW5rKSB7CisJCWNodW5rID0gcGNwdV9yZXNlcnZlZF9jaHVuazsKKwkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQgfHwKKwkJICAgIHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rKSA8IDApCisJCQlnb3RvIGZhaWxfdW5sb2NrOworCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKKwkJaWYgKG9mZiA+PSAwKQorCQkJZ290byBhcmVhX2ZvdW5kOworCQlnb3RvIGZhaWxfdW5sb2NrOworCX0KKworcmVzdGFydDoKKwkvKiBzZWFyY2ggdGhyb3VnaCBub3JtYWwgY2h1bmtzICovCisJZm9yIChzbG90ID0gcGNwdV9zaXplX3RvX3Nsb3Qoc2l6ZSk7IHNsb3QgPCBwY3B1X25yX3Nsb3RzOyBzbG90KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnBjcHVfc2xvdFtzbG90XSwgbGlzdCkgeworCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCisJCQkJY29udGludWU7CisKKwkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7CisJCQljYXNlIDA6CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJZ290byByZXN0YXJ0OwkvKiBwY3B1X2xvY2sgZHJvcHBlZCwgcmVzdGFydCAqLworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJfQorCisJCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKKwkJCWlmIChvZmYgPj0gMCkKKwkJCQlnb3RvIGFyZWFfZm91bmQ7CisJCX0KKwl9CisKKwkvKiBobW1tLi4uIG5vIHNwYWNlIGxlZnQsIGNyZWF0ZSBhIG5ldyBjaHVuayAqLworCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKworCWNodW5rID0gYWxsb2NfcGNwdV9jaHVuaygpOworCWlmICghY2h1bmspCisJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisKKwlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIC0xKTsKKwlwY3B1X2NodW5rX2FkZHJfaW5zZXJ0KGNodW5rKTsKKwlnb3RvIHJlc3RhcnQ7CisKK2FyZWFfZm91bmQ6CisJc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCisJLyogcG9wdWxhdGUsIG1hcCBhbmQgY2xlYXIgdGhlIGFyZWEgKi8KKwlpZiAocGNwdV9wb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplKSkgeworCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCQlwY3B1X2ZyZWVfYXJlYShjaHVuaywgb2ZmKTsKKwkJZ290byBmYWlsX3VubG9jazsKKwl9CisKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCisJcmV0dXJuIF9fYWRkcl90b19wY3B1X3B0cihjaHVuay0+dm0tPmFkZHIgKyBvZmYpOworCitmYWlsX3VubG9jazoKKwlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CitmYWlsX3VubG9ja19tdXRleDoKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIF9fYWxsb2NfcGVyY3B1IC0gYWxsb2NhdGUgZHluYW1pYyBwZXJjcHUgYXJlYQorICogQHNpemU6IHNpemUgb2YgYXJlYSB0byBhbGxvY2F0ZSBpbiBieXRlcworICogQGFsaWduOiBhbGlnbm1lbnQgb2YgYXJlYSAobWF4IFBBR0VfU0laRSkKKyAqCisgKiBBbGxvY2F0ZSBwZXJjcHUgYXJlYSBvZiBAc2l6ZSBieXRlcyBhbGlnbmVkIGF0IEBhbGlnbi4gIE1pZ2h0CisgKiBzbGVlcC4gIE1pZ2h0IHRyaWdnZXIgd3JpdGVvdXRzLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogUGVyY3B1IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLwordm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKK3sKKwlyZXR1cm4gcGNwdV9hbGxvYyhzaXplLCBhbGlnbiwgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19hbGxvY19wZXJjcHUpOworCisvKioKKyAqIF9fYWxsb2NfcmVzZXJ2ZWRfcGVyY3B1IC0gYWxsb2NhdGUgcmVzZXJ2ZWQgcGVyY3B1IGFyZWEKKyAqIEBzaXplOiBzaXplIG9mIGFyZWEgdG8gYWxsb2NhdGUgaW4gYnl0ZXMKKyAqIEBhbGlnbjogYWxpZ25tZW50IG9mIGFyZWEgKG1heCBQQUdFX1NJWkUpCisgKgorICogQWxsb2NhdGUgcGVyY3B1IGFyZWEgb2YgQHNpemUgYnl0ZXMgYWxpZ25lZCBhdCBAYWxpZ24gZnJvbSByZXNlcnZlZAorICogcGVyY3B1IGFyZWEgaWYgYXJjaCBoYXMgc2V0IGl0IHVwOyBvdGhlcndpc2UsIGFsbG9jYXRpb24gaXMgc2VydmVkCisgKiBmcm9tIHRoZSBzYW1lIGR5bmFtaWMgYXJlYS4gIE1pZ2h0IHNsZWVwLiAgTWlnaHQgdHJpZ2dlciB3cml0ZW91dHMuCisgKgorICogQ09OVEVYVDoKKyAqIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLgorICoKKyAqIFJFVFVSTlM6CisgKiBQZXJjcHUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCit2b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQoreworCXJldHVybiBwY3B1X2FsbG9jKHNpemUsIGFsaWduLCB0cnVlKTsKK30KKworLyoqCisgKiBwY3B1X3JlY2xhaW0gLSByZWNsYWltIGZ1bGx5IGZyZWUgY2h1bmtzLCB3b3JrcXVldWUgZnVuY3Rpb24KKyAqIEB3b3JrOiB1bnVzZWQKKyAqCisgKiBSZWNsYWltIGFsbCBmdWxseSBmcmVlIGNodW5rcyBleGNlcHQgZm9yIHRoZSBmaXJzdCBvbmUuCisgKgorICogQ09OVEVYVDoKKyAqIHdvcmtxdWV1ZSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBwY3B1X3JlY2xhaW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCUxJU1RfSEVBRCh0b2RvKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnBjcHVfc2xvdFtwY3B1X25yX3Nsb3RzIC0gMV07CisJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCAqbmV4dDsKKworCW11dGV4X2xvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2h1bmssIG5leHQsIGhlYWQsIGxpc3QpIHsKKwkJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKKworCQkvKiBzcGFyZSB0aGUgZmlyc3Qgb25lICovCisJCWlmIChjaHVuayA9PSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBwY3B1X2NodW5rLCBsaXN0KSkKKwkJCWNvbnRpbnVlOworCisJCXJiX2VyYXNlKCZjaHVuay0+cmJfbm9kZSwgJnBjcHVfYWRkcl9yb290KTsKKwkJbGlzdF9tb3ZlKCZjaHVuay0+bGlzdCwgJnRvZG8pOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNodW5rLCBuZXh0LCAmdG9kbywgbGlzdCkgeworCQlwY3B1X2RlcG9wdWxhdGVfY2h1bmsoY2h1bmssIDAsIHBjcHVfdW5pdF9zaXplLCBmYWxzZSk7CisJCWZyZWVfcGNwdV9jaHVuayhjaHVuayk7CisJfQorfQorCisvKioKKyAqIGZyZWVfcGVyY3B1IC0gZnJlZSBwZXJjcHUgYXJlYQorICogQHB0cjogcG9pbnRlciB0byBhcmVhIHRvIGZyZWUKKyAqCisgKiBGcmVlIHBlcmNwdSBhcmVhIEBwdHIuCisgKgorICogQ09OVEVYVDoKKyAqIENhbiBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4KKyAqLwordm9pZCBmcmVlX3BlcmNwdSh2b2lkICpwdHIpCit7CisJdm9pZCAqYWRkciA9IF9fcGNwdV9wdHJfdG9fYWRkcihwdHIpOworCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBvZmY7CisKKwlpZiAoIXB0cikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCisJY2h1bmsgPSBwY3B1X2NodW5rX2FkZHJfc2VhcmNoKGFkZHIpOworCW9mZiA9IGFkZHIgLSBjaHVuay0+dm0tPmFkZHI7CisKKwlwY3B1X2ZyZWVfYXJlYShjaHVuaywgb2ZmKTsKKworCS8qIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGZ1bGx5IGZyZWUgY2h1bmtzLCB3YWtlIHVwIGdyaW0gcmVhcGVyICovCisJaWYgKGNodW5rLT5mcmVlX3NpemUgPT0gcGNwdV91bml0X3NpemUpIHsKKwkJc3RydWN0IHBjcHVfY2h1bmsgKnBvczsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnBjcHVfc2xvdFtwY3B1X25yX3Nsb3RzIC0gMV0sIGxpc3QpCisJCQlpZiAocG9zICE9IGNodW5rKSB7CisJCQkJc2NoZWR1bGVfd29yaygmcGNwdV9yZWNsYWltX3dvcmspOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOworCisvKioKKyAqIHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsgLSBpbml0aWFsaXplIHRoZSBmaXJzdCBwZXJjcHUgY2h1bmsKKyAqIEBnZXRfcGFnZV9mbjogY2FsbGJhY2sgdG8gZmV0Y2ggcGFnZSBwb2ludGVyCisgKiBAc3RhdGljX3NpemU6IHRoZSBzaXplIG9mIHN0YXRpYyBwZXJjcHUgYXJlYSBpbiBieXRlcworICogQHJlc2VydmVkX3NpemU6IHRoZSBzaXplIG9mIHJlc2VydmVkIHBlcmNwdSBhcmVhIGluIGJ5dGVzCisgKiBAZHluX3NpemU6IGZyZWUgc2l6ZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGluIGJ5dGVzLCAtMSBmb3IgYXV0bworICogQHVuaXRfc2l6ZTogdW5pdCBzaXplIGluIGJ5dGVzLCBtdXN0IGJlIG11bHRpcGxlIG9mIFBBR0VfU0laRSwgLTEgZm9yIGF1dG8KKyAqIEBiYXNlX2FkZHI6IG1hcHBlZCBhZGRyZXNzLCBOVUxMIGZvciBhdXRvCisgKiBAcG9wdWxhdGVfcHRlX2ZuOiBjYWxsYmFjayB0byBhbGxvY2F0ZSBwYWdldGFibGUsIE5VTEwgaWYgdW5uZWNlc3NhcnkKKyAqCisgKiBJbml0aWFsaXplIHRoZSBmaXJzdCBwZXJjcHUgY2h1bmsgd2hpY2ggY29udGFpbnMgdGhlIGtlcm5lbCBzdGF0aWMKKyAqIHBlcnBjdSBhcmVhLiAgVGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgZnJvbSBhcmNoIHBlcmNwdSBhcmVhCisgKiBzZXR1cCBwYXRoLiAgVGhlIGZpcnN0IHR3byBwYXJhbWV0ZXJzIGFyZSBtYW5kYXRvcnkuICBUaGUgcmVzdCBhcmUKKyAqIG9wdGlvbmFsLgorICoKKyAqIEBnZXRfcGFnZV9mbigpIHNob3VsZCByZXR1cm4gcG9pbnRlciB0byBwZXJjcHUgcGFnZSBnaXZlbiBjcHUKKyAqIG51bWJlciBhbmQgcGFnZSBudW1iZXIuICBJdCBzaG91bGQgYXQgbGVhc3QgcmV0dXJuIGVub3VnaCBwYWdlcyB0bworICogY292ZXIgdGhlIHN0YXRpYyBhcmVhLiAgVGhlIHJldHVybmVkIHBhZ2VzIGZvciBzdGF0aWMgYXJlYSBzaG91bGQKKyAqIGhhdmUgYmVlbiBpbml0aWFsaXplZCB3aXRoIHZhbGlkIGRhdGEuICBJZiBAdW5pdF9zaXplIGlzIHNwZWNpZmllZCwKKyAqIGl0IGNhbiBhbHNvIHJldHVybiBwYWdlcyBhZnRlciB0aGUgc3RhdGljIGFyZWEuICBOVUxMIHJldHVybgorICogaW5kaWNhdGVzIGVuZCBvZiBwYWdlcyBmb3IgdGhlIGNwdS4gIE5vdGUgdGhhdCBAZ2V0X3BhZ2VfZm4oKSBtdXN0CisgKiByZXR1cm4gdGhlIHNhbWUgbnVtYmVyIG9mIHBhZ2VzIGZvciBhbGwgY3B1cy4KKyAqCisgKiBAcmVzZXJ2ZWRfc2l6ZSwgaWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvCisgKiByZXNlcnZlIGFmdGVyIHRoZSBzdGF0aWMgYXJlYSBpbiB0aGUgZmlyc3QgY2h1bmsuICBUaGlzIHJlc2VydmVzCisgKiB0aGUgZmlyc3QgY2h1bmsgc3VjaCB0aGF0IGl0J3MgYXZhaWxhYmxlIG9ubHkgdGhyb3VnaCByZXNlcnZlZAorICogcGVyY3B1IGFsbG9jYXRpb24uICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHNlcnZlIG1vZHVsZSBwZXJjcHUKKyAqIHN0YXRpYyBhcmVhcyBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSBhZGRyZXNzaW5nIG1vZGVsIGhhcworICogbGltaXRlZCBvZmZzZXQgcmFuZ2UgZm9yIHN5bWJvbCByZWxvY2F0aW9ucyB0byBndWFyYW50ZWUgbW9kdWxlCisgKiBwZXJjcHUgc3ltYm9scyBmYWxsIGluc2lkZSB0aGUgcmVsb2NhdGFibGUgcmFuZ2UuCisgKgorICogQGR5bl9zaXplLCBpZiBub24tbmVnYXRpdmUsIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBieXRlcworICogYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gaW4gdGhlIGZpcnN0IGNodW5rLiAgU3BlY2lmeWluZworICogbm9uLW5lZ2F0aXZlIHZhbHVlIG1ha2VzIHBlcmNwdSBsZWF2ZSBhbG9uZSB0aGUgYXJlYSBiZXlvbmQKKyAqIEBzdGF0aWNfc2l6ZSArIEByZXNlcnZlZF9zaXplICsgQGR5bl9zaXplLgorICoKKyAqIEB1bml0X3NpemUsIGlmIG5vbi1uZWdhdGl2ZSwgc3BlY2lmaWVzIHVuaXQgc2l6ZSBhbmQgbXVzdCBiZQorICogYWxpZ25lZCB0byBQQUdFX1NJWkUgYW5kIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIEBzdGF0aWNfc2l6ZSArCisgKiBAcmVzZXJ2ZWRfc2l6ZSArIGlmIG5vbi1uZWdhdGl2ZSwgQGR5bl9zaXplLgorICoKKyAqIE5vbi1udWxsIEBiYXNlX2FkZHIgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGFscmVhZHkgYWxsb2NhdGVkIHZpcnR1YWwKKyAqIHJlZ2lvbiBmb3IgdGhlIGZpcnN0IGNodW5rIGFuZCBtYXBwZWQgaXQuICBwZXJjcHUgbXVzdCBub3QgbWVzcworICogd2l0aCB0aGUgY2h1bmsuICBOb3RlIHRoYXQgQGJhc2VfYWRkciB3aXRoIDAgQHVuaXRfc2l6ZSBvciBub24tTlVMTAorICogQHBvcHVsYXRlX3B0ZV9mbiBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLgorICoKKyAqIEBwb3B1bGF0ZV9wdGVfZm4gaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgcGFnZXRhYmxlLiAgTlVMTCBtZWFucyB0aGUKKyAqIGNhbGxlciBhbHJlYWR5IHBvcHVsYXRlZCB0aGUgcGFnZXRhYmxlLgorICoKKyAqIElmIHRoZSBmaXJzdCBjaHVuayBlbmRzIHVwIHdpdGggYm90aCByZXNlcnZlZCBhbmQgZHluYW1pYyBhcmVhcywgaXQKKyAqIGlzIHNlcnZlZCBieSB0d28gY2h1bmtzIC0gb25lIHRvIHNlcnZlIHRoZSBjb3JlIHN0YXRpYyBhbmQgcmVzZXJ2ZWQKKyAqIGFyZWFzIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBkeW5hbWljIGFyZWEuICBUaGV5IHNoYXJlIHRoZSBzYW1lIHZtCisgKiBhbmQgcGFnZSBtYXAgYnV0IHVzZXMgZGlmZmVyZW50IGFyZWEgYWxsb2NhdGlvbiBtYXAgdG8gc3RheSBhd2F5CisgKiBmcm9tIGVhY2ggb3RoZXIuICBUaGUgbGF0dGVyIGNodW5rIGlzIGNpcmN1bGF0ZWQgaW4gdGhlIGNodW5rIHNsb3RzCisgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmtzLgorICoKKyAqIFJFVFVSTlM6CisgKiBUaGUgZGV0ZXJtaW5lZCBwY3B1X3VuaXRfc2l6ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplCisgKiBwZXJjcHUgYWNjZXNzLgorICovCitzaXplX3QgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsocGNwdV9nZXRfcGFnZV9mbl90IGdldF9wYWdlX2ZuLAorCQkJCSAgICAgc2l6ZV90IHN0YXRpY19zaXplLCBzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwKKwkJCQkgICAgIHNzaXplX3QgZHluX3NpemUsIHNzaXplX3QgdW5pdF9zaXplLAorCQkJCSAgICAgdm9pZCAqYmFzZV9hZGRyLAorCQkJCSAgICAgcGNwdV9wb3B1bGF0ZV9wdGVfZm5fdCBwb3B1bGF0ZV9wdGVfZm4pCit7CisJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgZmlyc3Rfdm07CisJc3RhdGljIGludCBzbWFwWzJdLCBkbWFwWzJdOworCXNpemVfdCBzaXplX3N1bSA9IHN0YXRpY19zaXplICsgcmVzZXJ2ZWRfc2l6ZSArCisJCQkgIChkeW5fc2l6ZSA+PSAwID8gZHluX3NpemUgOiAwKTsKKwlzdHJ1Y3QgcGNwdV9jaHVuayAqc2NodW5rLCAqZGNodW5rID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCWludCBucl9wYWdlczsKKwlpbnQgZXJyLCBpOworCisJLyogc2FudGl5IGNoZWNrcyAqLworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNtYXApID49IFBDUFVfREZMX01BUF9BTExPQyB8fAorCQkgICAgIEFSUkFZX1NJWkUoZG1hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DKTsKKwlCVUdfT04oIXN0YXRpY19zaXplKTsKKwlpZiAodW5pdF9zaXplID49IDApIHsKKwkJQlVHX09OKHVuaXRfc2l6ZSA8IHNpemVfc3VtKTsKKwkJQlVHX09OKHVuaXRfc2l6ZSAmIH5QQUdFX01BU0spOworCQlCVUdfT04odW5pdF9zaXplIDwgUENQVV9NSU5fVU5JVF9TSVpFKTsKKwl9IGVsc2UKKwkJQlVHX09OKGJhc2VfYWRkcik7CisJQlVHX09OKGJhc2VfYWRkciAmJiBwb3B1bGF0ZV9wdGVfZm4pOworCisJaWYgKHVuaXRfc2l6ZSA+PSAwKQorCQlwY3B1X3VuaXRfcGFnZXMgPSB1bml0X3NpemUgPj4gUEFHRV9TSElGVDsKKwllbHNlCisJCXBjcHVfdW5pdF9wYWdlcyA9IG1heF90KGludCwgUENQVV9NSU5fVU5JVF9TSVpFID4+IFBBR0VfU0hJRlQsCisJCQkJCVBGTl9VUChzaXplX3N1bSkpOworCisJcGNwdV91bml0X3NpemUgPSBwY3B1X3VuaXRfcGFnZXMgPDwgUEFHRV9TSElGVDsKKwlwY3B1X2NodW5rX3NpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogcGNwdV91bml0X3NpemU7CisJcGNwdV9jaHVua19zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGNwdV9jaHVuaykKKwkJKyBudW1fcG9zc2libGVfY3B1cygpICogcGNwdV91bml0X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopOworCisJaWYgKGR5bl9zaXplIDwgMCkKKwkJZHluX3NpemUgPSBwY3B1X3VuaXRfc2l6ZSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTsKKworCS8qCisJICogQWxsb2NhdGUgY2h1bmsgc2xvdHMuICBUaGUgYWRkaXRpb25hbCBsYXN0IHNsb3QgaXMgZm9yCisJICogZW1wdHkgY2h1bmtzLgorCSAqLworCXBjcHVfbnJfc2xvdHMgPSBfX3BjcHVfc2l6ZV90b19zbG90KHBjcHVfdW5pdF9zaXplKSArIDI7CisJcGNwdV9zbG90ID0gYWxsb2NfYm9vdG1lbShwY3B1X25yX3Nsb3RzICogc2l6ZW9mKHBjcHVfc2xvdFswXSkpOworCWZvciAoaSA9IDA7IGkgPCBwY3B1X25yX3Nsb3RzOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZwY3B1X3Nsb3RbaV0pOworCisJLyoKKwkgKiBJbml0aWFsaXplIHN0YXRpYyBjaHVuay4gIElmIHJlc2VydmVkX3NpemUgaXMgemVybywgdGhlCisJICogc3RhdGljIGNodW5rIGNvdmVycyBzdGF0aWMgYXJlYSArIGR5bmFtaWMgYWxsb2NhdGlvbiBhcmVhCisJICogaW4gdGhlIGZpcnN0IGNodW5rLiAgSWYgcmVzZXJ2ZWRfc2l6ZSBpcyBub3QgemVybywgaXQKKwkgKiBjb3ZlcnMgc3RhdGljIGFyZWEgKyByZXNlcnZlZCBhcmVhIChtb3N0bHkgdXNlZCBmb3IgbW9kdWxlCisJICogc3RhdGljIHBlcmNwdSBhbGxvY2F0aW9uKS4KKwkgKi8KKwlzY2h1bmsgPSBhbGxvY19ib290bWVtKHBjcHVfY2h1bmtfc3RydWN0X3NpemUpOworCUlOSVRfTElTVF9IRUFEKCZzY2h1bmstPmxpc3QpOworCXNjaHVuay0+dm0gPSAmZmlyc3Rfdm07CisJc2NodW5rLT5tYXAgPSBzbWFwOworCXNjaHVuay0+bWFwX2FsbG9jID0gQVJSQVlfU0laRShzbWFwKTsKKwlzY2h1bmstPnBhZ2UgPSBzY2h1bmstPnBhZ2VfYXI7CisKKwlpZiAocmVzZXJ2ZWRfc2l6ZSkgeworCQlzY2h1bmstPmZyZWVfc2l6ZSA9IHJlc2VydmVkX3NpemU7CisJCXBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBzY2h1bms7CS8qIG5vdCBmb3IgZHluYW1pYyBhbGxvYyAqLworCX0gZWxzZSB7CisJCXNjaHVuay0+ZnJlZV9zaXplID0gZHluX3NpemU7CisJCWR5bl9zaXplID0gMDsJCQkvKiBkeW5hbWljIGFyZWEgY292ZXJlZCAqLworCX0KKwlzY2h1bmstPmNvbnRpZ19oaW50ID0gc2NodW5rLT5mcmVlX3NpemU7CisKKwlzY2h1bmstPm1hcFtzY2h1bmstPm1hcF91c2VkKytdID0gLXN0YXRpY19zaXplOworCWlmIChzY2h1bmstPmZyZWVfc2l6ZSkKKwkJc2NodW5rLT5tYXBbc2NodW5rLT5tYXBfdXNlZCsrXSA9IHNjaHVuay0+ZnJlZV9zaXplOworCisJcGNwdV9yZXNlcnZlZF9jaHVua19saW1pdCA9IHN0YXRpY19zaXplICsgc2NodW5rLT5mcmVlX3NpemU7CisKKwkvKiBpbml0IGR5bmFtaWMgY2h1bmsgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGR5bl9zaXplKSB7CisJCWRjaHVuayA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBwY3B1X2NodW5rKSk7CisJCUlOSVRfTElTVF9IRUFEKCZkY2h1bmstPmxpc3QpOworCQlkY2h1bmstPnZtID0gJmZpcnN0X3ZtOworCQlkY2h1bmstPm1hcCA9IGRtYXA7CisJCWRjaHVuay0+bWFwX2FsbG9jID0gQVJSQVlfU0laRShkbWFwKTsKKwkJZGNodW5rLT5wYWdlID0gc2NodW5rLT5wYWdlX2FyOwkvKiBzaGFyZSBwYWdlIG1hcCB3aXRoIHNjaHVuayAqLworCisJCWRjaHVuay0+Y29udGlnX2hpbnQgPSBkY2h1bmstPmZyZWVfc2l6ZSA9IGR5bl9zaXplOworCQlkY2h1bmstPm1hcFtkY2h1bmstPm1hcF91c2VkKytdID0gLXBjcHVfcmVzZXJ2ZWRfY2h1bmtfbGltaXQ7CisJCWRjaHVuay0+bWFwW2RjaHVuay0+bWFwX3VzZWQrK10gPSBkY2h1bmstPmZyZWVfc2l6ZTsKKwl9CisKKwkvKiBhbGxvY2F0ZSB2bSBhZGRyZXNzICovCisJZmlyc3Rfdm0uZmxhZ3MgPSBWTV9BTExPQzsKKwlmaXJzdF92bS5zaXplID0gcGNwdV9jaHVua19zaXplOworCisJaWYgKCFiYXNlX2FkZHIpCisJCXZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoJmZpcnN0X3ZtLCBQQUdFX1NJWkUpOworCWVsc2UgeworCQkvKgorCQkgKiBQYWdlcyBhbHJlYWR5IG1hcHBlZC4gIE5vIG5lZWQgdG8gcmVtYXAgaW50bworCQkgKiB2bWFsbG9jIGFyZWEuICBJbiB0aGlzIGNhc2UgdGhlIGZpcnN0IGNodW5rcyBjYW4ndAorCQkgKiBiZSBtYXBwZWQgb3IgdW5tYXBwZWQgYnkgcGVyY3B1IGFuZCBhcmUgbWFya2VkCisJCSAqIGltbXV0YWJsZS4KKwkJICovCisJCWZpcnN0X3ZtLmFkZHIgPSBiYXNlX2FkZHI7CisJCXNjaHVuay0+aW1tdXRhYmxlID0gdHJ1ZTsKKwkJaWYgKGRjaHVuaykKKwkJCWRjaHVuay0+aW1tdXRhYmxlID0gdHJ1ZTsKKwl9CisKKwkvKiBhc3NpZ24gcGFnZXMgKi8KKwlucl9wYWdlcyA9IC0xOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBjcHVfdW5pdF9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF9wYWdlX2ZuKGNwdSwgaSk7CisKKwkJCWlmICghcGFnZSkKKwkJCQlicmVhazsKKwkJCSpwY3B1X2NodW5rX3BhZ2VwKHNjaHVuaywgY3B1LCBpKSA9IHBhZ2U7CisJCX0KKworCQlCVUdfT04oaSA8IFBGTl9VUChzdGF0aWNfc2l6ZSkpOworCisJCWlmIChucl9wYWdlcyA8IDApCisJCQlucl9wYWdlcyA9IGk7CisJCWVsc2UKKwkJCUJVR19PTihucl9wYWdlcyAhPSBpKTsKKwl9CisKKwkvKiBtYXAgdGhlbSAqLworCWlmIChwb3B1bGF0ZV9wdGVfZm4pIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQorCQkJCXBvcHVsYXRlX3B0ZV9mbihwY3B1X2NodW5rX2FkZHIoc2NodW5rLAorCQkJCQkJCQljcHUsIGkpKTsKKworCQllcnIgPSBwY3B1X21hcChzY2h1bmssIDAsIG5yX3BhZ2VzKTsKKwkJaWYgKGVycikKKwkJCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgc3RhdGljIHBlcmNwdSBhcmVhLCBlcnI9JWRcbiIsCisJCQkgICAgICBlcnIpOworCX0KKworCS8qIGxpbmsgdGhlIGZpcnN0IGNodW5rIGluICovCisJaWYgKCFkY2h1bmspIHsKKwkJcGNwdV9jaHVua19yZWxvY2F0ZShzY2h1bmssIC0xKTsKKwkJcGNwdV9jaHVua19hZGRyX2luc2VydChzY2h1bmspOworCX0gZWxzZSB7CisJCXBjcHVfY2h1bmtfcmVsb2NhdGUoZGNodW5rLCAtMSk7CisJCXBjcHVfY2h1bmtfYWRkcl9pbnNlcnQoZGNodW5rKTsKKwl9CisKKwkvKiB3ZSdyZSBkb25lICovCisJcGNwdV9iYXNlX2FkZHIgPSAodm9pZCAqKXBjcHVfY2h1bmtfYWRkcihzY2h1bmssIDAsIDApOworCXJldHVybiBwY3B1X3VuaXRfc2l6ZTsKK30KKworLyoKKyAqIEVtYmVkZGluZyBmaXJzdCBjaHVuayBzZXR1cCBoZWxwZXIuCisgKi8KK3N0YXRpYyB2b2lkICpwY3B1ZV9wdHIgX19pbml0ZGF0YTsKK3N0YXRpYyBzaXplX3QgcGNwdWVfc2l6ZSBfX2luaXRkYXRhOworc3RhdGljIHNpemVfdCBwY3B1ZV91bml0X3NpemUgX19pbml0ZGF0YTsKKworc3RhdGljIHN0cnVjdCBwYWdlICogX19pbml0IHBjcHVlX2dldF9wYWdlKHVuc2lnbmVkIGludCBjcHUsIGludCBwYWdlbm8pCit7CisJc2l6ZV90IG9mZiA9IChzaXplX3QpcGFnZW5vIDw8IFBBR0VfU0hJRlQ7CisKKwlpZiAob2ZmID49IHBjcHVlX3NpemUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZpcnRfdG9fcGFnZShwY3B1ZV9wdHIgKyBjcHUgKiBwY3B1ZV91bml0X3NpemUgKyBvZmYpOworfQorCisvKioKKyAqIHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsgLSBlbWJlZCB0aGUgZmlyc3QgcGVyY3B1IGNodW5rIGludG8gYm9vdG1lbQorICogQHN0YXRpY19zaXplOiB0aGUgc2l6ZSBvZiBzdGF0aWMgcGVyY3B1IGFyZWEgaW4gYnl0ZXMKKyAqIEByZXNlcnZlZF9zaXplOiB0aGUgc2l6ZSBvZiByZXNlcnZlZCBwZXJjcHUgYXJlYSBpbiBieXRlcworICogQGR5bl9zaXplOiBmcmVlIHNpemUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBpbiBieXRlcywgLTEgZm9yIGF1dG8KKyAqIEB1bml0X3NpemU6IHVuaXQgc2l6ZSBpbiBieXRlcywgbXVzdCBiZSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUsIC0xIGZvciBhdXRvCisgKgorICogVGhpcyBpcyBhIGhlbHBlciB0byBlYXNlIHNldHRpbmcgdXAgZW1iZWRkZWQgZmlyc3QgcGVyY3B1IGNodW5rIGFuZAorICogY2FuIGJlIGNhbGxlZCB3aGVyZSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKCkgaXMgZXhwZWN0ZWQuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldHVwIHRoZSBmaXJzdCBjaHVuaywgaXQgaXMgYWxsb2NhdGVkCisgKiBhcyBhIGNvbnRpZ3VvdXMgYXJlYSB1c2luZyBib290bWVtIGFsbG9jYXRvciBhbmQgdXNlZCBhcy1pcyB3aXRob3V0CisgKiBiZWluZyBtYXBwZWQgaW50byB2bWFsbG9jIGFyZWEuICBUaGlzIGVuYWJsZXMgdGhlIGZpcnN0IGNodW5rIHRvCisgKiBwaWdneSBiYWNrIG9uIHRoZSBsaW5lYXIgcGh5c2ljYWwgbWFwcGluZyB3aGljaCBvZnRlbiB1c2VzIGxhcmdlcgorICogcGFnZSBzaXplLgorICoKKyAqIFdoZW4gQGR5bl9zaXplIGlzIHBvc2l0aXZlLCBkeW5hbWljIGFyZWEgbWlnaHQgYmUgbGFyZ2VyIHRoYW4KKyAqIHNwZWNpZmllZCB0byBmaWxsIHBhZ2UgYWxpZ25tZW50LiAgQWxzbywgd2hlbiBAZHluX3NpemUgaXMgYXV0bywKKyAqIEBkeW5fc2l6ZSBkb2VzIG5vdCBmaWxsIHRoZSB3aG9sZSBmaXJzdCBjaHVuayBidXQgb25seSB3aGF0J3MKKyAqIG5lY2Vzc2FyeSBmb3IgcGFnZSBhbGlnbm1lbnQgYWZ0ZXIgc3RhdGljIGFuZCByZXNlcnZlZCBhcmVhcy4KKyAqCisgKiBJZiB0aGUgbmVlZGVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIG9yIHNwZWNpZmllZCB1bml0CisgKiBzaXplLCB0aGUgbGVmdG92ZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgorICoKKyAqIFJFVFVSTlM6CisgKiBUaGUgZGV0ZXJtaW5lZCBwY3B1X3VuaXRfc2l6ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplCisgKiBwZXJjcHUgYWNjZXNzIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitzc2l6ZV90IF9faW5pdCBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKHNpemVfdCBzdGF0aWNfc2l6ZSwgc2l6ZV90IHJlc2VydmVkX3NpemUsCisJCQkJICAgICAgc3NpemVfdCBkeW5fc2l6ZSwgc3NpemVfdCB1bml0X3NpemUpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCS8qIGRldGVybWluZSBwYXJhbWV0ZXJzIGFuZCBhbGxvY2F0ZSAqLworCXBjcHVlX3NpemUgPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplICsKKwkJCSAgICAgICAoZHluX3NpemUgPj0gMCA/IGR5bl9zaXplIDogMCkpOworCWlmIChkeW5fc2l6ZSAhPSAwKQorCQlkeW5fc2l6ZSA9IHBjcHVlX3NpemUgLSBzdGF0aWNfc2l6ZSAtIHJlc2VydmVkX3NpemU7CisKKwlpZiAodW5pdF9zaXplID49IDApIHsKKwkJQlVHX09OKHVuaXRfc2l6ZSA8IHBjcHVlX3NpemUpOworCQlwY3B1ZV91bml0X3NpemUgPSB1bml0X3NpemU7CisJfSBlbHNlCisJCXBjcHVlX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgcGNwdWVfc2l6ZSwgUENQVV9NSU5fVU5JVF9TSVpFKTsKKworCXBjcHVlX3B0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKAorCQkJCQludW1fcG9zc2libGVfY3B1cygpICogcGNwdWVfdW5pdF9zaXplLAorCQkJCQlQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKCFwY3B1ZV9wdHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcmV0dXJuIHRoZSBsZWZ0b3ZlciBhbmQgY29weSAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJdm9pZCAqcHRyID0gcGNwdWVfcHRyICsgY3B1ICogcGNwdWVfdW5pdF9zaXplOworCisJCWZyZWVfYm9vdG1lbShfX3BhKHB0ciArIHBjcHVlX3NpemUpLAorCQkJICAgICBwY3B1ZV91bml0X3NpemUgLSBwY3B1ZV9zaXplKTsKKwkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X2xvYWQsIHN0YXRpY19zaXplKTsKKwl9CisKKwkvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovCisJcHJfaW5mbygiUEVSQ1BVOiBFbWJlZGRlZCAlenUgcGFnZXMgYXQgJXAsIHN0YXRpYyBkYXRhICV6dSBieXRlc1xuIiwKKwkJcGNwdWVfc2l6ZSA+PiBQQUdFX1NISUZULCBwY3B1ZV9wdHIsIHN0YXRpY19zaXplKTsKKworCXJldHVybiBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVlX2dldF9wYWdlLCBzdGF0aWNfc2l6ZSwKKwkJCQkgICAgICByZXNlcnZlZF9zaXplLCBkeW5fc2l6ZSwKKwkJCQkgICAgICBwY3B1ZV91bml0X3NpemUsIHBjcHVlX3B0ciwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IGJlYzgzYzEuLjljZTMwM2QgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0xNywxOSArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKLXZvaWQgZGVmYXVsdF91bnBsdWdfaW9fZm4oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGRlZmF1bHRfdW5wbHVnX2lvX2ZuKTsKLQotc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvID0gewotCS5yYV9wYWdlcwk9IFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0IC8gUEFHRV9DQUNIRV9TSVpFLAotCS5zdGF0ZQkJPSAwLAotCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX01BUF9DT1BZLAotCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOwotCiAvKgogICogSW5pdGlhbGlzZSBhIHN0cnVjdCBmaWxlJ3MgcmVhZGFoZWFkIHN0YXRlLiAgQXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaGFzCiAgKiBtZW1zZXQgKnJhIHRvIHplcm8uCkBAIC0yMzMsMTggKzIyMCw2IEBACiAJCSsgbm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9GUkVFX1BBR0VTKSkgLyAyKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcmVhZGFoZWFkX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gYmRpX2luaXQoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7Ci0JaWYgKCFlcnIpCi0JCWJkaV9yZWdpc3RlcigmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLCBOVUxMLCAiZGVmYXVsdCIpOwotCi0JcmV0dXJuIGVycjsKLX0KLXN1YnN5c19pbml0Y2FsbChyZWFkYWhlYWRfaW5pdCk7Ci0KIC8qCiAgKiBTdWJtaXQgSU8gZm9yIHRoZSByZWFkLWFoZWFkIHJlcXVlc3QgaW4gZmlsZV9yYV9zdGF0ZS4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNDEwM2EyMy4uN2VjNzhlMiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQ7CiAKQEAgLTI2NjUsNiArMjY2Niw3IEBACiAJaWYgKElTX0VSUihmaWxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiAKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCWlmICh2bWEtPnZtX2ZpbGUpCiAJCWZwdXQodm1hLT52bV9maWxlKTsKIAl2bWEtPnZtX2ZpbGUgPSBmaWxlOwpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDUyYmM4YTIuLjBiZmE2ODAgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTEyNiw5ICsxMjYsOSBAQAogc3RhdGljIExJU1RfSEVBRChmcmVlX3Nsb2JfbGFyZ2UpOwogCiAvKgotICogc2xvYl9wYWdlOiBUcnVlIGZvciBhbGwgc2xvYiBwYWdlcyAoZmFsc2UgZm9yIGJpZ2Jsb2NrIHBhZ2VzKQorICogaXNfc2xvYl9wYWdlOiBUcnVlIGZvciBhbGwgc2xvYiBwYWdlcyAoZmFsc2UgZm9yIGJpZ2Jsb2NrIHBhZ2VzKQogICovCi1zdGF0aWMgaW5saW5lIGludCBzbG9iX3BhZ2Uoc3RydWN0IHNsb2JfcGFnZSAqc3ApCitzdGF0aWMgaW5saW5lIGludCBpc19zbG9iX3BhZ2Uoc3RydWN0IHNsb2JfcGFnZSAqc3ApCiB7CiAJcmV0dXJuIFBhZ2VTbG9iUGFnZSgoc3RydWN0IHBhZ2UgKilzcCk7CiB9CkBAIC0xNDMsNiArMTQzLDExIEBACiAJX19DbGVhclBhZ2VTbG9iUGFnZSgoc3RydWN0IHBhZ2UgKilzcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsb2JfcGFnZSAqc2xvYl9wYWdlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGFkZHIpOworfQorCiAvKgogICogc2xvYl9wYWdlX2ZyZWU6IHRydWUgZm9yIHBhZ2VzIG9uIGZyZWVfc2xvYl9wYWdlcyBsaXN0LgogICovCkBAIC0yMzAsNyArMjM1LDcgQEAKIAlyZXR1cm4gISgodW5zaWduZWQgbG9uZylzbG9iX25leHQocykgJiB+UEFHRV9NQVNLKTsKIH0KIAotc3RhdGljIHZvaWQgKnNsb2JfbmV3X3BhZ2UoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIGludCBub2RlKQorc3RhdGljIHZvaWQgKnNsb2JfbmV3X3BhZ2VzKGdmcF90IGdmcCwgaW50IG9yZGVyLCBpbnQgbm9kZSkKIHsKIAl2b2lkICpwYWdlOwogCkBAIC0yNDcsMTIgKzI1MiwxNyBAQAogCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb2JfZnJlZV9wYWdlcyh2b2lkICpiLCBpbnQgb3JkZXIpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyliLCBvcmRlcik7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhIHNsb2IgYmxvY2sgd2l0aGluIGEgZ2l2ZW4gc2xvYl9wYWdlIHNwLgogICovCiBzdGF0aWMgdm9pZCAqc2xvYl9wYWdlX2FsbG9jKHN0cnVjdCBzbG9iX3BhZ2UgKnNwLCBzaXplX3Qgc2l6ZSwgaW50IGFsaWduKQogewotCXNsb2JfdCAqcHJldiwgKmN1ciwgKmFsaWduZWQgPSAwOworCXNsb2JfdCAqcHJldiwgKmN1ciwgKmFsaWduZWQgPSBOVUxMOwogCWludCBkZWx0YSA9IDAsIHVuaXRzID0gU0xPQl9VTklUUyhzaXplKTsKIAogCWZvciAocHJldiA9IE5VTEwsIGN1ciA9IHNwLT5mcmVlOyA7IHByZXYgPSBjdXIsIGN1ciA9IHNsb2JfbmV4dChjdXIpKSB7CkBAIC0zNDksMTAgKzM1OSwxMCBAQAogCiAJLyogTm90IGVub3VnaCBzcGFjZTogbXVzdCBhbGxvY2F0ZSBhIG5ldyBwYWdlICovCiAJaWYgKCFiKSB7Ci0JCWIgPSBzbG9iX25ld19wYWdlKGdmcCAmIH5fX0dGUF9aRVJPLCAwLCBub2RlKTsKKwkJYiA9IHNsb2JfbmV3X3BhZ2VzKGdmcCAmIH5fX0dGUF9aRVJPLCAwLCBub2RlKTsKIAkJaWYgKCFiKQotCQkJcmV0dXJuIDA7Ci0JCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYik7CisJCQlyZXR1cm4gTlVMTDsKKwkJc3AgPSBzbG9iX3BhZ2UoYik7CiAJCXNldF9zbG9iX3BhZ2Uoc3ApOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzbG9iX2xvY2ssIGZsYWdzKTsKQEAgLTM4NCw3ICszOTQsNyBAQAogCQlyZXR1cm47CiAJQlVHX09OKCFzaXplKTsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKIAl1bml0cyA9IFNMT0JfVU5JVFMoc2l6ZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvYl9sb2NrLCBmbGFncyk7CkBAIC0zOTMsMTAgKzQwMywxMSBAQAogCQkvKiBHbyBkaXJlY3RseSB0byBwYWdlIGFsbG9jYXRvci4gRG8gbm90IHBhc3Mgc2xvYiBhbGxvY2F0b3IgKi8KIAkJaWYgKHNsb2JfcGFnZV9mcmVlKHNwKSkKIAkJCWNsZWFyX3Nsb2JfcGFnZV9mcmVlKHNwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvYl9sb2NrLCBmbGFncyk7CiAJCWNsZWFyX3Nsb2JfcGFnZShzcCk7CiAJCWZyZWVfc2xvYl9wYWdlKHNwKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCWlmICghc2xvYl9wYWdlX2ZyZWUoc3ApKSB7CkBAIC00NzYsNyArNDg3LDcgQEAKIAl9IGVsc2UgewogCQl2b2lkICpyZXQ7CiAKLQkJcmV0ID0gc2xvYl9uZXdfcGFnZShnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOworCQlyZXQgPSBzbG9iX25ld19wYWdlcyhnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOwogCQlpZiAocmV0KSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocmV0KTsKQEAgLTQ5NCw4ICs1MDUsOCBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGJsb2NrKSkpCiAJCXJldHVybjsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOwotCWlmIChzbG9iX3BhZ2Uoc3ApKSB7CisJc3AgPSBzbG9iX3BhZ2UoYmxvY2spOworCWlmIChpc19zbG9iX3BhZ2Uoc3ApKSB7CiAJCWludCBhbGlnbiA9IG1heChBUkNIX0tNQUxMT0NfTUlOQUxJR04sIEFSQ0hfU0xBQl9NSU5BTElHTik7CiAJCXVuc2lnbmVkIGludCAqbSA9ICh1bnNpZ25lZCBpbnQgKikoYmxvY2sgLSBhbGlnbik7CiAJCXNsb2JfZnJlZShtLCAqbSArIGFsaWduKTsKQEAgLTUxMyw4ICs1MjQsOCBAQAogCWlmICh1bmxpa2VseShibG9jayA9PSBaRVJPX1NJWkVfUFRSKSkKIAkJcmV0dXJuIDA7CiAKLQlzcCA9IChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGJsb2NrKTsKLQlpZiAoc2xvYl9wYWdlKHNwKSkgeworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKKwlpZiAoaXNfc2xvYl9wYWdlKHNwKSkgewogCQlpbnQgYWxpZ24gPSBtYXgoQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBBUkNIX1NMQUJfTUlOQUxJR04pOwogCQl1bnNpZ25lZCBpbnQgKm0gPSAodW5zaWduZWQgaW50ICopKGJsb2NrIC0gYWxpZ24pOwogCQlyZXR1cm4gU0xPQl9VTklUUygqbSkgKiBTTE9CX1VOSVQ7CkBAIC01NzMsNyArNTg0LDcgQEAKIAlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkKIAkJYiA9IHNsb2JfYWxsb2MoYy0+c2l6ZSwgZmxhZ3MsIGMtPmFsaWduLCBub2RlKTsKIAllbHNlCi0JCWIgPSBzbG9iX25ld19wYWdlKGZsYWdzLCBnZXRfb3JkZXIoYy0+c2l6ZSksIG5vZGUpOworCQliID0gc2xvYl9uZXdfcGFnZXMoZmxhZ3MsIGdldF9vcmRlcihjLT5zaXplKSwgbm9kZSk7CiAKIAlpZiAoYy0+Y3RvcikKIAkJYy0+Y3RvcihiKTsKQEAgLTU4Nyw3ICs1OTgsNyBAQAogCWlmIChzaXplIDwgUEFHRV9TSVpFKQogCQlzbG9iX2ZyZWUoYiwgc2l6ZSk7CiAJZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWIsIGdldF9vcmRlcihzaXplKSk7CisJCXNsb2JfZnJlZV9wYWdlcyhiLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBrbWVtX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCAwMjgwZWVlLi5jNjVhNGVkIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0zNzQsMTQgKzM3NCw4IEBACiBzdGF0aWMgdm9pZCBzZXRfdHJhY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwKIAkJCWVudW0gdHJhY2tfaXRlbSBhbGxvYywgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB0cmFjayAqcDsKKwlzdHJ1Y3QgdHJhY2sgKnAgPSBnZXRfdHJhY2socywgb2JqZWN0LCBhbGxvYyk7CiAKLQlpZiAocy0+b2Zmc2V0KQotCQlwID0gb2JqZWN0ICsgcy0+b2Zmc2V0ICsgc2l6ZW9mKHZvaWQgKik7Ci0JZWxzZQotCQlwID0gb2JqZWN0ICsgcy0+aW51c2U7Ci0KLQlwICs9IGFsbG9jOwogCWlmIChhZGRyKSB7CiAJCXAtPmFkZHIgPSBhZGRyOwogCQlwLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0xMzM1LDcgKzEzMjksNyBAQAogCQluID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpOwogCiAJCWlmIChuICYmIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgZmxhZ3MpICYmCi0JCQkJbi0+bnJfcGFydGlhbCA+IG4tPm1pbl9wYXJ0aWFsKSB7CisJCQkJbi0+bnJfcGFydGlhbCA+IHMtPm1pbl9wYXJ0aWFsKSB7CiAJCQlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShuKTsKIAkJCWlmIChwYWdlKQogCQkJCXJldHVybiBwYWdlOwpAQCAtMTM4Nyw3ICsxMzgxLDcgQEAKIAkJc2xhYl91bmxvY2socGFnZSk7CiAJfSBlbHNlIHsKIAkJc3RhdChjLCBERUFDVElWQVRFX0VNUFRZKTsKLQkJaWYgKG4tPm5yX3BhcnRpYWwgPCBuLT5taW5fcGFydGlhbCkgeworCQlpZiAobi0+bnJfcGFydGlhbCA8IHMtPm1pbl9wYXJ0aWFsKSB7CiAJCQkvKgogCQkJICogQWRkaW5nIGFuIGVtcHR5IHNsYWIgdG8gdGhlIHBhcnRpYWwgc2xhYnMgaW4gb3JkZXIKIAkJCSAqIHRvIGF2b2lkIHBhZ2UgYWxsb2NhdG9yIG92ZXJoZWFkLiBUaGlzIHNsYWIgbmVlZHMKQEAgLTE3MjQsNyArMTcxOCw3IEBACiAJYyA9IGdldF9jcHVfc2xhYihzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CiAJaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX0RFQlVHX09CSkVDVFMpKQotCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKKwkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CiAJaWYgKGxpa2VseShwYWdlID09IGMtPnBhZ2UgJiYgYy0+bm9kZSA+PSAwKSkgewogCQlvYmplY3RbYy0+b2Zmc2V0XSA9IGMtPmZyZWVsaXN0OwogCQljLT5mcmVlbGlzdCA9IG9iamVjdDsKQEAgLTE4NDQsNiArMTgzOCw3IEBACiAJaW50IG9yZGVyOwogCWludCBtaW5fb2JqZWN0czsKIAlpbnQgZnJhY3Rpb247CisJaW50IG1heF9vYmplY3RzOwogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGZpbmQgYmVzdCBjb25maWd1cmF0aW9uIGZvciBhIHNsYWIuIFRoaXMKQEAgLTE4NTYsNiArMTg1MSw5IEBACiAJbWluX29iamVjdHMgPSBzbHViX21pbl9vYmplY3RzOwogCWlmICghbWluX29iamVjdHMpCiAJCW1pbl9vYmplY3RzID0gNCAqIChmbHMobnJfY3B1X2lkcykgKyAxKTsKKwltYXhfb2JqZWN0cyA9IChQQUdFX1NJWkUgPDwgc2x1Yl9tYXhfb3JkZXIpL3NpemU7CisJbWluX29iamVjdHMgPSBtaW4obWluX29iamVjdHMsIG1heF9vYmplY3RzKTsKKwogCXdoaWxlIChtaW5fb2JqZWN0cyA+IDEpIHsKIAkJZnJhY3Rpb24gPSAxNjsKIAkJd2hpbGUgKGZyYWN0aW9uID49IDQpIHsKQEAgLTE4NjUsNyArMTg2Myw3IEBACiAJCQkJcmV0dXJuIG9yZGVyOwogCQkJZnJhY3Rpb24gLz0gMjsKIAkJfQotCQltaW5fb2JqZWN0cyAvPSAyOworCQltaW5fb2JqZWN0cyAtLTsKIAl9CiAKIAkvKgpAQCAtMTkyOCwxNyArMTkyNiw2IEBACiBpbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKIAluLT5ucl9wYXJ0aWFsID0gMDsKLQotCS8qCi0JICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKLQkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KLQkgKi8KLQluLT5taW5fcGFydGlhbCA9IGlsb2cyKHMtPnNpemUpOwotCWlmIChuLT5taW5fcGFydGlhbCA8IE1JTl9QQVJUSUFMKQotCQluLT5taW5fcGFydGlhbCA9IE1JTl9QQVJUSUFMOwotCWVsc2UgaWYgKG4tPm1pbl9wYXJ0aWFsID4gTUFYX1BBUlRJQUwpCi0JCW4tPm1pbl9wYXJ0aWFsID0gTUFYX1BBUlRJQUw7Ci0KIAlzcGluX2xvY2tfaW5pdCgmbi0+bGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbi0+cGFydGlhbCk7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKQEAgLTIxODEsNiArMjE2OCwxNSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNldF9taW5fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdW5zaWduZWQgbG9uZyBtaW4pCit7CisJaWYgKG1pbiA8IE1JTl9QQVJUSUFMKQorCQltaW4gPSBNSU5fUEFSVElBTDsKKwllbHNlIGlmIChtaW4gPiBNQVhfUEFSVElBTCkKKwkJbWluID0gTUFYX1BBUlRJQUw7CisJcy0+bWluX3BhcnRpYWwgPSBtaW47Cit9CisKIC8qCiAgKiBjYWxjdWxhdGVfc2l6ZXMoKSBkZXRlcm1pbmVzIHRoZSBvcmRlciBhbmQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkYXRhIHdpdGhpbgogICogYSBzbGFiIG9iamVjdC4KQEAgLTIzMTksNiArMjMxNSwxMSBAQAogCWlmICghY2FsY3VsYXRlX3NpemVzKHMsIC0xKSkKIAkJZ290byBlcnJvcjsKIAorCS8qCisJICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKKwkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KKwkgKi8KKwlzZXRfbWluX3BhcnRpYWwocywgaWxvZzIocy0+c2l6ZSkpOwogCXMtPnJlZmNvdW50ID0gMTsKICNpZmRlZiBDT05GSUdfTlVNQQogCXMtPnJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyA9IDEwMDA7CkBAIC0yNDc1LDcgKzI0NzYsNyBAQAogICoJCUttYWxsb2Mgc3Vic3lzdGVtCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbUEFHRV9TSElGVCArIDFdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tTTFVCX1BBR0VfU0hJRlRdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBFWFBPUlRfU1lNQk9MKGttYWxsb2NfY2FjaGVzKTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9taW5fb3JkZXIoY2hhciAqc3RyKQpAQCAtMjUzNyw3ICsyNTM4LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RNQQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWFsbG9jX2NhY2hlc19kbWFbUEFHRV9TSElGVCArIDFdOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWFsbG9jX2NhY2hlc19kbWFbU0xVQl9QQUdFX1NISUZUXTsKIAogc3RhdGljIHZvaWQgc3lzZnNfYWRkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewpAQCAtMjY1OCw3ICsyNjU5LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBmbGFncyk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwpAQCAtMjY4Niw3ICsyNjg3LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBmbGFncyk7CkBAIC0yOTg2LDcgKzI5ODcsNyBAQAogCQljYWNoZXMrKzsKIAl9CiAKLQlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8PSBQQUdFX1NISUZUOyBpKyspIHsKKwlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKSB7CiAJCWNyZWF0ZV9rbWFsbG9jX2NhY2hlKCZrbWFsbG9jX2NhY2hlc1tpXSwKIAkJCSJrbWFsbG9jIiwgMSA8PCBpLCBHRlBfS0VSTkVMKTsKIAkJY2FjaGVzKys7CkBAIC0zMDIzLDcgKzMwMjQsNyBAQAogCXNsYWJfc3RhdGUgPSBVUDsKIAogCS8qIFByb3ZpZGUgdGhlIGNvcnJlY3Qga21hbGxvYyBuYW1lcyBub3cgdGhhdCB0aGUgY2FjaGVzIGFyZSB1cCAqLwotCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDw9IFBBR0VfU0hJRlQ7IGkrKykKKwlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKQogCQlrbWFsbG9jX2NhY2hlc1tpXS4gbmFtZSA9CiAJCQlrYXNwcmludGYoR0ZQX0tFUk5FTCwgImttYWxsb2MtJWQiLCAxIDw8IGkpOwogCkBAIC0zMjIzLDcgKzMyMjQsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGdmcGZsYWdzKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBnZnBmbGFncyk7CkBAIC0zMjM5LDcgKzMyNDAsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlX25vZGUoc2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKQEAgLTM4MzYsNiArMzgzNywyNiBAQAogfQogU0xBQl9BVFRSKG9yZGVyKTsKIAorc3RhdGljIHNzaXplX3QgbWluX3BhcnRpYWxfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgcy0+bWluX3BhcnRpYWwpOworfQorCitzdGF0aWMgc3NpemVfdCBtaW5fcGFydGlhbF9zdG9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgbWluOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbWluKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X21pbl9wYXJ0aWFsKHMsIG1pbik7CisJcmV0dXJuIGxlbmd0aDsKK30KK1NMQUJfQVRUUihtaW5fcGFydGlhbCk7CisKIHN0YXRpYyBzc2l6ZV90IGN0b3Jfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQogewogCWlmIChzLT5jdG9yKSB7CkBAIC00MTUxLDYgKzQxNzIsNyBAQAogCSZvYmplY3Rfc2l6ZV9hdHRyLmF0dHIsCiAJJm9ianNfcGVyX3NsYWJfYXR0ci5hdHRyLAogCSZvcmRlcl9hdHRyLmF0dHIsCisJJm1pbl9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmb2JqZWN0c19hdHRyLmF0dHIsCiAJJm9iamVjdHNfcGFydGlhbF9hdHRyLmF0dHIsCiAJJnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLApkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IDUyMGE3NTkuLmFmNTgzMjQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTE1Miw4ICsxNTMsOCBAQAogICoKICAqIEllLiBwdGUgYXQgYWRkcitOKlBBR0VfU0laRSBzaGFsbCBwb2ludCB0byBwZm4gY29ycmVzcG9uZGluZyB0byBwYWdlc1tOXQogICovCi1zdGF0aWMgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3BhZ2VfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXBnZF90ICpwZ2Q7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTY5LDEzICsxNzAsMjIgQEAKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCWZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCk7CiAKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gbnI7CiB9CiAKK3N0YXRpYyBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdm1hcF9wYWdlX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCwgcHJvdCwgcGFnZXMpOworCWZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KQogewogCS8qCkBAIC05OTAsNiArMTAwMCwzMiBAQAogfQogRVhQT1JUX1NZTUJPTCh2bV9tYXBfcmFtKTsKIAorLyoqCisgKiB2bV9hcmVhX3JlZ2lzdGVyX2Vhcmx5IC0gcmVnaXN0ZXIgdm1hcCBhcmVhIGVhcmx5IGR1cmluZyBib290CisgKiBAdm06IHZtX3N0cnVjdCB0byByZWdpc3RlcgorICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlZ2lzdGVyIGtlcm5lbCB2bSBhcmVhIGJlZm9yZQorICogdm1hbGxvY19pbml0KCkgaXMgY2FsbGVkLiAgQHZtLT5zaXplIGFuZCBAdm0tPmZsYWdzIHNob3VsZCBjb250YWluCisgKiBwcm9wZXIgdmFsdWVzIG9uIGVudHJ5IGFuZCBvdGhlciBmaWVsZHMgc2hvdWxkIGJlIHplcm8uICBPbiByZXR1cm4sCisgKiB2bS0+YWRkciBjb250YWlucyB0aGUgYWxsb2NhdGVkIGFkZHJlc3MuCisgKgorICogRE8gTk9UIFVTRSBUSElTIEZVTkNUSU9OIFVOTEVTUyBZT1UgS05PVyBXSEFUIFlPVSdSRSBET0lORy4KKyAqLwordm9pZCBfX2luaXQgdm1fYXJlYV9yZWdpc3Rlcl9lYXJseShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgc2l6ZV90IGFsaWduKQoreworCXN0YXRpYyBzaXplX3Qgdm1faW5pdF9vZmYgX19pbml0ZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gQUxJR04oVk1BTExPQ19TVEFSVCArIHZtX2luaXRfb2ZmLCBhbGlnbik7CisJdm1faW5pdF9vZmYgPSBQRk5fQUxJR04oYWRkciArIHZtLT5zaXplKSAtIFZNQUxMT0NfU1RBUlQ7CisKKwl2bS0+YWRkciA9ICh2b2lkICopYWRkcjsKKworCXZtLT5uZXh0ID0gdm1saXN0OworCXZtbGlzdCA9IHZtOworfQorCiB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKQEAgLTEwMTcsNiArMTA1Myw1OCBAQAogCXZtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlOwogfQogCisvKioKKyAqIG1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCAtIG1hcCBrZXJuZWwgVk0gYXJlYSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFnZXMKKyAqIEBhZGRyOiBzdGFydCBvZiB0aGUgVk0gYXJlYSB0byBtYXAKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBWTSBhcmVhIHRvIG1hcAorICogQHByb3Q6IHBhZ2UgcHJvdGVjdGlvbiBmbGFncyB0byB1c2UKKyAqIEBwYWdlczogcGFnZXMgdG8gbWFwCisgKgorICogTWFwIFBGTl9VUChAc2l6ZSkgcGFnZXMgYXQgQGFkZHIuICBUaGUgVk0gYXJlYSBAYWRkciBhbmQgQHNpemUKKyAqIHNwZWNpZnkgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgdXNpbmcgZ2V0X3ZtX2FyZWEoKSBhbmQgaXRzCisgKiBmcmllbmRzLgorICoKKyAqIE5PVEU6CisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGRvIGFueSBjYWNoZSBmbHVzaGluZy4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGZsdXNoX2NhY2hlX3ZtYXAoKSBvbiB0by1iZS1tYXBwZWQgYXJlYXMKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUkVUVVJOUzoKKyAqIFRoZSBudW1iZXIgb2YgcGFnZXMgbWFwcGVkIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgbWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCXJldHVybiB2bWFwX3BhZ2VfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgc2l6ZSwgcHJvdCwgcGFnZXMpOworfQorCisvKioKKyAqIHVubWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoIC0gdW5tYXAga2VybmVsIFZNIGFyZWEKKyAqIEBhZGRyOiBzdGFydCBvZiB0aGUgVk0gYXJlYSB0byB1bm1hcAorICogQHNpemU6IHNpemUgb2YgdGhlIFZNIGFyZWEgdG8gdW5tYXAKKyAqCisgKiBVbm1hcCBQRk5fVVAoQHNpemUpIHBhZ2VzIGF0IEBhZGRyLiAgVGhlIFZNIGFyZWEgQGFkZHIgYW5kIEBzaXplCisgKiBzcGVjaWZ5IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIHVzaW5nIGdldF92bV9hcmVhKCkgYW5kIGl0cworICogZnJpZW5kcy4KKyAqCisgKiBOT1RFOgorICogVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBkbyBhbnkgY2FjaGUgZmx1c2hpbmcuICBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmbHVzaF9jYWNoZV92dW5tYXAoKSBvbiB0by1iZS1tYXBwZWQgYXJlYXMKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoKSBhZnRlci4KKyAqLwordm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2dW5tYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7Cit9CisKKy8qKgorICogdW5tYXBfa2VybmVsX3JhbmdlIC0gdW5tYXAga2VybmVsIFZNIGFyZWEgYW5kIGZsdXNoIGNhY2hlIGFuZCBUTEIKKyAqIEBhZGRyOiBzdGFydCBvZiB0aGUgVk0gYXJlYSB0byB1bm1hcAorICogQHNpemU6IHNpemUgb2YgdGhlIFZNIGFyZWEgdG8gdW5tYXAKKyAqCisgKiBTaW1pbGFyIHRvIHVubWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKCkgYnV0IGZsdXNoZXMgdmNhY2hlIGJlZm9yZQorICogdGhlIHVubWFwcGluZyBhbmQgdGxiIGFmdGVyLgorICovCiB2b2lkIHVubWFwX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgKyBzaXplOwpAQCAtMTI2Nyw2ICsxMzU1LDcgQEAKIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpCiB7CiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKKwltaWdodF9zbGVlcCgpOwogCV9fdnVubWFwKGFkZHIsIDApOwogfQogRVhQT1JUX1NZTUJPTCh2dW5tYXApOwpAQCAtMTI4Niw2ICsxMzc1LDggQEAKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChjb3VudCA+IG51bV9waHlzcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDYxNzdlM2IuLjU2ZGRmNDEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjYyLDcgKzEyNjIsNiBAQAogCSAqIE1vdmUgdGhlIHBhZ2VzIHRvIHRoZSBbZmlsZSBvciBhbm9uXSBpbmFjdGl2ZSBsaXN0LgogCSAqLwogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMSk7Ci0JcGdtb3ZlZCA9IDA7CiAJbHJ1ID0gTFJVX0JBU0UgKyBmaWxlICogTFJVX0ZJTEU7CiAKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CkBAIC0xMjc0LDYgKzEyNzMsNyBAQAogCSAqLwogCXJlY2xhaW1fc3RhdC0+cmVjZW50X3JvdGF0ZWRbISFmaWxlXSArPSBwZ21vdmVkOwogCisJcGdtb3ZlZCA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsX2luYWN0aXZlKSkgewogCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJmxfaW5hY3RpdmUpOwogCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCAmbF9pbmFjdGl2ZSwgZmxhZ3MpOwpAQCAtMTQ2OSw3ICsxNDY5LDcgQEAKIAkJaW50IGZpbGUgPSBpc19maWxlX2xydShsKTsKIAkJaW50IHNjYW47CiAKLQkJc2NhbiA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGwpOworCQlzY2FuID0gem9uZV9ucl9wYWdlcyh6b25lLCBzYywgbCk7CiAJCWlmIChwcmlvcml0eSkgewogCQkJc2NhbiA+Pj0gcHJpb3JpdHk7CiAJCQlzY2FuID0gKHNjYW4gKiBwZXJjZW50W2ZpbGVdKSAvIDEwMDsKZGlmZiAtLWdpdCBhL25ldC84MDIvcHNuYXAuYyBiL25ldC84MDIvcHNuYXAuYwppbmRleCA3MDk4MGJhLi42ZmVhMDc1IDEwMDY0NAotLS0gYS9uZXQvODAyL3BzbmFwLmMKKysrIGIvbmV0LzgwMi9wc25hcC5jCkBAIC0yOSw3ICsyOSw3IEBACiAvKgogICoJRmluZCBhIHNuYXAgY2xpZW50IGJ5IG1hdGNoaW5nIHRoZSA1IGJ5dGVzLgogICovCi1zdGF0aWMgc3RydWN0IGRhdGFsaW5rX3Byb3RvICpmaW5kX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MpCitzdGF0aWMgc3RydWN0IGRhdGFsaW5rX3Byb3RvICpmaW5kX3NuYXBfY2xpZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc2MpCiB7CiAJc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90byA9IE5VTEwsICpwOwogCkBAIC01MSw3ICs1MSw3IEBACiAJaW50IHJjID0gMTsKIAlzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvOwogCXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgc25hcF9wYWNrZXRfdHlwZSA9IHsKLQkJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1NOQVApLAorCQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1NOQVApLAogCX07CiAKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCA1KSkpCkBAIC05NSwxNSArOTUsMTYgQEAKIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfc25hcF9jbGllbnQpOwogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3NuYXBfY2xpZW50KTsKIAotc3RhdGljIGNoYXIgc25hcF9lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBzbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJTTkFQIC0gdW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggODAyLjJcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNuYXBfaW5pdCh2b2lkKQogewogCXNuYXBfc2FwID0gbGxjX3NhcF9vcGVuKDB4QUEsIHNuYXBfcmN2KTsKLQotCWlmICghc25hcF9zYXApCisJaWYgKCFzbmFwX3NhcCkgewogCQlwcmludGsoc25hcF9lcnJfbXNnKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMSw3ICsxMjIsNyBAQAogLyoKICAqCVJlZ2lzdGVyIFNOQVAgY2xpZW50cy4gV2UgZG9uJ3QgeWV0IHVzZSB0aGlzIGZvciBJUC4KICAqLwotc3RydWN0IGRhdGFsaW5rX3Byb3RvICpyZWdpc3Rlcl9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjLAorc3RydWN0IGRhdGFsaW5rX3Byb3RvICpyZWdpc3Rlcl9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjLAogCQkJCQkgICAgaW50ICgqcmN2ZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwKIAkJCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCQkJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqLApAQCAtMTM2LDcgKzEzNyw3IEBACiAKIAlwcm90byA9IGttYWxsb2Moc2l6ZW9mKCpwcm90byksIEdGUF9BVE9NSUMpOwogCWlmIChwcm90bykgewotCQltZW1jcHkocHJvdG8tPnR5cGUsIGRlc2MsNSk7CisJCW1lbWNweShwcm90by0+dHlwZSwgZGVzYywgNSk7CiAJCXByb3RvLT5yY3ZmdW5jCQk9IHJjdmZ1bmM7CiAJCXByb3RvLT5oZWFkZXJfbGVuZ3RoCT0gNSArIDM7IC8qIHNuYXAgKyA4MDIuMiAqLwogCQlwcm90by0+cmVxdWVzdAkJPSBzbmFwX3JlcXVlc3Q7CmRpZmYgLS1naXQgYS9uZXQvODAyL3RyLmMgYi9uZXQvODAyL3RyLmMKaW5kZXggZjQ3YWUyOC4uZTdlYjEzMCAxMDA2NDQKLS0tIGEvbmV0LzgwMi90ci5jCisrKyBiL25ldC84MDIvdHIuYwpAQCAtNDg2LDYgKzQ4Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpyaWZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKCZyaWZfbG9jaykKIHsKIAlzcGluX2xvY2tfaXJxKCZyaWZfbG9jayk7CiAKQEAgLTUxNyw2ICs1MTgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByaWZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmcmlmX2xvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxKCZyaWZfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCA0MWU4ZjY1Li4yYjczOTBlIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTUxLDggKzUxLDggQEAKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fY29weXJpZ2h0W10gPSAiQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+IjsKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fYnVnZ3lyaWdodFtdID0gIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdmxhbl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpLAogCS5mdW5jID0gdmxhbl9za2JfcmVjdiwgLyogVkxBTiByZWNlaXZlIG1ldGhvZCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IDI4ODZkMmYuLjY1NGU0NWYgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTg5LDM4ICs4OSwyNyBAQAogCQlnb3RvIGRyb3A7CiAKIAlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IHAtPmRldiA9PSBza2ItPmRldjsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9CisJCQlwLT5kZXYgPT0gc2tiLT5kZXYgJiYgIWNvbXBhcmVfZXRoZXJfaGVhZGVyKAorCQkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCiBkcm9wOgotCXJldHVybiAyOworCXJldHVybiBHUk9fRFJPUDsKIH0KIAogaW50IHZsYW5fZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAogCQkgICAgIHVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CisJaWYgKG5ldHBvbGxfcnhfb24oc2tiKSkKKwkJcmV0dXJuIHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGdycCwgdmxhbl90Y2kpOwogCi0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CiAKLQlzd2l0Y2ggKHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDI6Ci0JCWVyciA9IE5FVF9SWF9EUk9QOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgMToKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIG5hcGlfc2tiX2ZpbmlzaCh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSwgc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0wodmxhbl9ncm9fcmVjZWl2ZSk7CiAKQEAgLTEyOCwzMCArMTE3LDE0IEBACiAJCSAgIHVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpX2ZyYWdpbmZvX3NrYihuYXBpLCBpbmZvKTsKLQlpbnQgZXJyID0gTkVUX1JYX0RST1A7CiAKIAlpZiAoIXNrYikKLQkJZ290byBvdXQ7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCWdvdG8gb3V0OworCWlmIChuZXRwb2xsX3J4X29uKHNrYikpCisJCXJldHVybiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBncnAsIHZsYW5fdGNpKTsKIAotCWVyciA9IE5FVF9SWF9TVUNDRVNTOwotCi0Jc3dpdGNoICh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSkgewotCWNhc2UgLTE6Ci0JCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCi0JY2FzZSAyOgotCQllcnIgPSBORVRfUlhfRFJPUDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIDE6Ci0JCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7Ci0JCWJyZWFrOwotCX0KLQotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIG5hcGlfZnJhZ3NfZmluaXNoKG5hcGksIHNrYiwKKwkJCQkgdmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYikpOwogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2dyb19mcmFncyk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IDFkZjAzNTYuLmM2MTNlZDA4IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfZmQuYworKysgYi9uZXQvOXAvdHJhbnNfZmQuYwpAQCAtNDE3LDcgKzQxNyw3IEBACiAJb2xkZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoZ2V0X2RzKCkpOwogCS8qIFRoZSBjYXN0IHRvIGEgdXNlciBwb2ludGVyIGlzIHZhbGlkIGR1ZSB0byB0aGUgc2V0X2ZzKCkgKi8KLQlyZXQgPSB2ZnNfd3JpdGUodHMtPndyLCAodm9pZCBfX3VzZXIgKil2LCBsZW4sICZ0cy0+d3ItPmZfcG9zKTsKKwlyZXQgPSB2ZnNfd3JpdGUodHMtPndyLCAoX19mb3JjZSB2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOwogCXNldF9mcyhvbGRmcyk7CiAKIAlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKZGlmZiAtLWdpdCBhL25ldC9LY29uZmlnIGIvbmV0L0tjb25maWcKaW5kZXggY2RiOGZkZS4uZWM5M2U3ZSAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIG1lbnVjb25maWcgTkVUCiAJYm9vbCAiTmV0d29ya2luZyBzdXBwb3J0IgorCXNlbGVjdCBOTEFUVFIKIAktLS1oZWxwLS0tCiAJICBVbmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZCBzYXkgWSBoZXJlLgogCSAgVGhlIHJlYXNvbiBpcyB0aGF0IHNvbWUgcHJvZ3JhbXMgbmVlZCBrZXJuZWwgbmV0d29ya2luZyBzdXBwb3J0IGV2ZW4KQEAgLTI0LDkgKzI1LDYgQEAKIAogbWVudSAiTmV0d29ya2luZyBvcHRpb25zIgogCi1jb25maWcgQ09NUEFUX05FVF9ERVZfT1BTCi0gICAgICAgZGVmX2Jvb2wgeQotCiBzb3VyY2UgIm5ldC9wYWNrZXQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3VuaXgvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3hmcm0vS2NvbmZpZyIKQEAgLTE3MSw2ICsxNjksNyBAQAogCiBzb3VyY2UgIm5ldC9kY2NwL0tjb25maWciCiBzb3VyY2UgIm5ldC9zY3RwL0tjb25maWciCitzb3VyY2UgIm5ldC9yZHMvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3RpcGMvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2F0bS9LY29uZmlnIgogc291cmNlICJuZXQvODAyL0tjb25maWciCkBAIC0xODUsNiArMTg0LDcgQEAKIHNvdXJjZSAibmV0L2xhcGIvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2Vjb25ldC9LY29uZmlnIgogc291cmNlICJuZXQvd2Fucm91dGVyL0tjb25maWciCitzb3VyY2UgIm5ldC9waG9uZXQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3NjaGVkL0tjb25maWciCiBzb3VyY2UgIm5ldC9kY2IvS2NvbmZpZyIKIApAQCAtMjIwLDYgKzIyMCwxNyBAQAogCVRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAltb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGNwX3Byb2JlLgogCitjb25maWcgTkVUX0RST1BfTU9OSVRPUgorCWJvb2xlYW4gIk5ldHdvcmsgcGFja2V0IGRyb3AgYWxlcnRpbmcgc2VydmljZSIKKwlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMICYmIFRSQUNFUE9JTlRTCisJLS0taGVscC0tLQorCVRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBhbGVydGluZyBzZXJ2aWNlIHRvIHVzZXJzcGFjZSBpbiB0aGUKKwlldmVudCB0aGF0IHBhY2tldHMgYXJlIGRpc2NhcmRlZCBpbiB0aGUgbmV0d29yayBzdGFjay4gIEFsZXJ0cworCWFyZSBicm9hZGNhc3QgdmlhIG5ldGxpbmsgc29ja2V0IHRvIGFueSBsaXN0ZW5pbmcgdXNlciBzcGFjZQorCXByb2Nlc3MuICBJZiB5b3UgZG9uJ3QgbmVlZCBuZXR3b3JrIGRyb3AgYWxlcnRzLCBvciBpZiB5b3UgYXJlIG9rCisJanVzdCBjaGVja2luZyB0aGUgdmFyaW91cyBwcm9jIGZpbGVzIGFuZCBvdGhlciB1dGlsaXRpZXMgZm9yCisJZHJvcCBzdGF0aXN0aWNzLCBzYXkgTiBoZXJlLgorCiBlbmRtZW51CiAKIGVuZG1lbnUKQEAgLTIyOSw3ICsyNDAsNiBAQAogc291cmNlICJuZXQvaXJkYS9LY29uZmlnIgogc291cmNlICJuZXQvYmx1ZXRvb3RoL0tjb25maWciCiBzb3VyY2UgIm5ldC9yeHJwYy9LY29uZmlnIgotc291cmNlICJuZXQvcGhvbmV0L0tjb25maWciCiAKIGNvbmZpZyBGSUJfUlVMRVMKIAlib29sCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggMGZjY2U4OS4uOWUwMGE1NSAxMDA2NDQKLS0tIGEvbmV0L01ha2VmaWxlCisrKyBiL25ldC9NYWtlZmlsZQpAQCAtNDksNiArNDksNyBAQAogZW5kaWYKIG9iai0kKENPTkZJR19JUF9EQ0NQKQkJKz0gZGNjcC8KIG9iai0kKENPTkZJR19JUF9TQ1RQKQkJKz0gc2N0cC8KK29iai0kKENPTkZJR19SRFMpCQkrPSByZHMvCiBvYmoteQkJCQkrPSB3aXJlbGVzcy8KIG9iai0kKENPTkZJR19NQUM4MDIxMSkJCSs9IG1hYzgwMjExLwogb2JqLSQoQ09ORklHX1RJUEMpCQkrPSB0aXBjLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9kZHAuYyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKaW5kZXggNWFiY2UwNy4uZDZhOTI0MyAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9kZHAuYworKysgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCkBAIC0xNTcxLDE0ICsxNTcxLDEwIEBACiAJCSAgICB1c2F0LT5zYXRfZmFtaWx5ICE9IEFGX0FQUExFVEFMSykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIG5ldGF0YWxrIGRvZXNuJ3QgaW1wbGVtZW50IHRoaXMgY2hlY2sgKi8KKwkJLyogbmV0YXRhbGsgZGlkbid0IGltcGxlbWVudCB0aGlzIGNoZWNrICovCiAJCWlmICh1c2F0LT5zYXRfYWRkci5zX25vZGUgPT0gQVRBRERSX0JDQVNUICYmCiAJCSAgICAhc29ja19mbGFnKHNrLCBTT0NLX0JST0FEQ0FTVCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIlNPX0JST0FEQ0FTVDogRml4IHlvdXIgbmV0YXRhbGsgYXMgIgotCQkJCQkgIml0IHdpbGwgYnJlYWsgYmVmb3JlIDIuMlxuIik7Ci0jaWYgMAogCQkJcmV0dXJuIC1FUEVSTTsKLSNlbmRpZgogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCkBAIC0xODYwLDEzICsxODU2LDEzIEBACiAJLm5vdGlmaWVyX2NhbGwJPSBkZHBfZGV2aWNlX2V2ZW50LAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsdGFsa19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0xPQ0FMVEFMSyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGx0YWxrX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfTE9DQUxUQUxLKSwKIAkuZnVuYwkJPSBsdGFsa19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcHRhbGtfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBUQUxLKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwdGFsa19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCQk9IGNwdV90b19iZTE2KEVUSF9QX1BQUFRBTEspLAogCS5mdW5jCQk9IGF0YWxrX3JjdiwKIH07CiAKQEAgLTE4NzcsNyArMTg3Myw3IEBACiBFWFBPUlRfU1lNQk9MKGF0cnRyX2dldF9kZXYpOwogRVhQT1JUX1NZTUJPTChhdGFsa19maW5kX2Rldl9hZGRyKTsKIAotc3RhdGljIGNoYXIgYXRhbGtfZXJyX3NuYXBbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGF0YWxrX2Vycl9zbmFwW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiVW5hYmxlIHRvIHJlZ2lzdGVyIEREUCB3aXRoIFNOQVAuXG4iOwogCiAvKiBDYWxsZWQgYnkgcHJvdG8uYyBvbiBrZXJuZWwgc3RhcnQgdXAgKi8KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGV2LmMgYi9uZXQvYXBwbGV0YWxrL2Rldi5jCmluZGV4IGQ4NTZhNjIuLjcyMjc3ZDcgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGV2LmMKKysrIGIvbmV0L2FwcGxldGFsay9kZXYuYwpAQCAtOSwyMiArOSwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2x0YWxrLmg+CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiBzdGF0aWMgaW50IGx0YWxrX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLQotc3RhdGljIGludCBsdGFsa19tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQotewotCXJldHVybiAtRUlOVkFMOwotfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGx0YWxrX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHdpdGggbG9jYWx0YWxrLWdlbmVyaWMgdmFsdWVzLiAqLwogCisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogCWRldi0+Y2hhbmdlX210dQkJPSBsdGFsa19jaGFuZ2VfbXR1OwotCWRldi0+c2V0X21hY19hZGRyZXNzIAk9IGx0YWxrX21hY19hZGRyOworI2VuZGlmCiAKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX0xPQ0FMVExLOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuIAk9IExUQUxLX0hMRU47CmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCBlYTk0MzhmYy4uMzM0ZmNkNCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9icjI2ODQuYworKysgYi9uZXQvYXRtL2JyMjY4NC5jCkBAIC04Myw3ICs4Myw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBicjI2ODRfZGV2czsKIAlpbnQgbnVtYmVyOwogCXN0cnVjdCBsaXN0X2hlYWQgYnJ2Y2NzOwkvKiBvbmUgZGV2aWNlIDw9PiBvbmUgdmNjIChiZWZvcmUgeG1hcykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlpbnQgbWFjX3dhc19zZXQ7CiAJZW51bSBicjI2ODRfcGF5bG9hZCBwYXlsb2FkOwogfTsKQEAgLTE0OCw5ICsxNDcsMTAgQEAKICAqIHRoZSB3YXkgZm9yIG11bHRpcGxlIHZjYydzIHBlciBpdGYuICBSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHNlbmQsCiAgKiBvdGhlcndpc2UgZmFsc2UKICAqLwotc3RhdGljIGludCBicjI2ODRfeG1pdF92Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2LAorc3RhdGljIGludCBicjI2ODRfeG1pdF92Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBicjI2ODRfdmNjICpicnZjYykKIHsKKwlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYoZGV2KTsKIAlzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjOwogCWludCBtaW5oZWFkcm9vbSA9IChicnZjYy0+ZW5jYXBzID09IGVfbGxjKSA/IDEwIDogMjsKIApAQCAtMjExLDggKzIxMSw4IEBACiAJfQogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrX2F0bShhdG12Y2MpLT5za193bWVtX2FsbG9jKTsKIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gYXRtdmNjLT5hdG1fb3B0aW9uczsKLQlicmRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCWJyZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWF0bXZjYy0+c2VuZChhdG12Y2MsIHNrYik7CiAJcmV0dXJuIDE7CiB9CkBAIC0yMzMsMTQgKzIzMywxNCBAQAogCWJydmNjID0gcGlja19vdXRnb2luZ192Y2Moc2tiLCBicmRldik7CiAJaWYgKGJydmNjID09IE5VTEwpIHsKIAkJcHJfZGVidWcoIm5vIHZjYyBhdHRhY2hlZCB0byBkZXYgJXNcbiIsIGRldi0+bmFtZSk7Ci0JCWJyZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJYnJkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJLyogbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKCFicjI2ODRfeG1pdF92Y2Moc2tiLCBicmRldiwgYnJ2Y2MpKSB7CisJaWYgKCFicjI2ODRfeG1pdF92Y2Moc2tiLCBkZXYsIGJydmNjKSkgewogCQkvKgogCQkgKiBXZSBzaG91bGQgcHJvYmFibHkgdXNlIG5ldGlmXypfcXVldWUoKSBoZXJlLCBidXQgdGhhdAogCQkgKiBpbnZvbHZlcyBhZGRlZCBjb21wbGljYXRpb24uICBXZSBuZWVkIHRvIHdhbGsgYmVmb3JlCkBAIC0yNDgsMjcgKzI0OCwyMCBAQAogCQkgKgogCQkgKiBEb24ndCBmcmVlIGhlcmUhIHRoaXMgcG9pbnRlciBtaWdodCBiZSBubyBsb25nZXIgdmFsaWQhCiAJCSAqLwotCQlicmRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWJyZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJfQogCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJyMjY4NF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcl9kZWJ1ZygiYnIyNjg0X2dldF9zdGF0c1xuIik7Ci0JcmV0dXJuICZCUlBSSVYoZGV2KS0+c3RhdHM7Ci19Ci0KIC8qCiAgKiBXZSByZW1lbWJlciB3aGVuIHRoZSBNQUMgZ2V0cyBzZXQsIHNvIHdlIGRvbid0IG92ZXJyaWRlIGl0IGxhdGVyIHdpdGgKICAqIHRoZSBFU0kgb2YgdGhlIEFUTSBjYXJkIG9mIHRoZSBmaXJzdCBWQwogICovCi1zdGF0aWMgaW50ICgqbXlfZXRoX21hY19hZGRyKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqKTsKIHN0YXRpYyBpbnQgYnIyNjg0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7Ci0JaW50IGVyciA9IG15X2V0aF9tYWNfYWRkcihkZXYsIHApOworCWludCBlcnIgPSBldGhfbWFjX2FkZHIoZGV2LCBwKTsKIAlpZiAoIWVycikKIAkJQlJQUklWKGRldiktPm1hY193YXNfc2V0ID0gMTsKIAlyZXR1cm4gZXJyOwpAQCAtNDMwLDE3ICs0MjMsMTcgQEAKIAkvKiBzaWdoLCBpbnRlcmZhY2UgaXMgZG93bj8gKi8KIAlpZiAodW5saWtlbHkoIShuZXRfZGV2LT5mbGFncyAmIElGRl9VUCkpKQogCQlnb3RvIGRyb3BwZWQ7Ci0JYnJkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlicmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJbmV0X2Rldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldF9kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCW1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7CiAJbmV0aWZfcngoc2tiKTsKIAlyZXR1cm47CiAKIGRyb3BwZWQ6Ci0JYnJkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJZ290byBmcmVlX3NrYjsKIGVycm9yOgotCWJyZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwluZXRfZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIGZyZWVfc2tiOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm47CkBAIC01MzEsOCArNTI0LDggQEAKIAogCQlza2ItPm5leHQgPSBza2ItPnByZXYgPSBOVUxMOwogCQlicjI2ODRfcHVzaChhdG12Y2MsIHNrYik7Ci0JCUJSUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzIC09IHNrYi0+bGVuOwotCQlCUlBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07CisJCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyAtPSBza2ItPmxlbjsKKwkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMtLTsKIAogCQlza2IgPSBuZXh0OwogCX0KQEAgLTU0NCwxNyArNTM3LDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicjI2ODRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgCT0gYnIyNjg0X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBicjI2ODRfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgYnIyNjg0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2ID0gQlJQUklWKG5ldGRldik7CiAKIAlldGhlcl9zZXR1cChuZXRkZXYpOwotCWJyZGV2LT5uZXRfZGV2ID0gbmV0ZGV2OwogCi0JbXlfZXRoX21hY19hZGRyID0gbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBicjI2ODRfbWFjX2FkZHI7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBicjI2ODRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGJyMjY4NF9nZXRfc3RhdHM7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmJyMjY4NF9uZXRkZXZfb3BzOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJyZGV2LT5icnZjY3MpOwogfQpAQCAtNTY1LDEwICs1NjEsOCBAQAogCWJyZGV2LT5uZXRfZGV2ID0gbmV0ZGV2OwogCiAJbmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwotCW15X2V0aF9tYWNfYWRkciA9IG5ldGRldi0+c2V0X21hY19hZGRyZXNzOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gYnIyNjg0X21hY19hZGRyOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYnIyNjg0X3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBicjI2ODRfZ2V0X3N0YXRzOworCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmJyMjY4NF9uZXRkZXZfb3BzOwogCW5ldGRldi0+YWRkcl9sZW4gPSAwOwogCW5ldGRldi0+bXR1ID0gMTUwMDsKIAluZXRkZXYtPnR5cGUgPSBBUlBIUkRfUFBQOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCAyZDMzYTgzLi4zZGMwYTNhIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtMjE0LDE1ICsyMTQsMTUgQEAKIAkJc2tiLT5wcm90b2NvbCA9ICgoX19iZTE2ICopIHNrYi0+ZGF0YSlbM107CiAJCXNrYl9wdWxsKHNrYiwgUkZDMTQ4M0xMQ19MRU4pOwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKSB7Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCWNsaXBfYXJwX3Jjdihza2IpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCWNsaXBfdmNjLT5sYXN0X3VzZSA9IGppZmZpZXM7Ci0JUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtMzcyLDcgKzM3Miw3IEBACiAJaWYgKCFza2ItPmRzdCkgewogCQlwcmludGsoS0VSTl9FUlIgImNsaXBfc3RhcnRfeG1pdDogc2tiLT5kc3QgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFza2ItPmRzdC0+bmVpZ2hib3VyKSB7CkBAIC0zODAsMTMgKzM4MCwxMyBAQAogCQlza2ItPmRzdC0+bmVpZ2hib3VyID0gY2xpcF9maW5kX25laWdoYm91cihza2ItPmRzdCwgMSk7CiAJCWlmICghc2tiLT5kc3QtPm5laWdoYm91cikgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwkvKiBsb3N0IHRoYXQgb25lICovCi0JCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0KICNlbmRpZgogCQlwcmludGsoS0VSTl9FUlIgImNsaXBfc3RhcnRfeG1pdDogTk8gTkVJR0hCT1VSICFcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCWVudHJ5ID0gTkVJR0gyRU5UUlkoc2tiLT5kc3QtPm5laWdoYm91cik7CkBAIC00MDAsNyArNDAwLDcgQEAKIAkJCXNrYl9xdWV1ZV90YWlsKCZlbnRyeS0+bmVpZ2gtPmFycF9xdWV1ZSwgc2tiKTsKIAkJZWxzZSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTQyMyw4ICs0MjMsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX3N0YXJ0X3htaXQ6IFhPRkYtPlhPRkYgdHJhbnNpdGlvblxuIik7CiAJCXJldHVybiAwOwogCX0KLQljbGlwX3ByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQljbGlwX3ByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJdmNjLT5zZW5kKHZjYywgc2tiKTsKIAlpZiAoYXRtX21heV9zZW5kKHZjYywgMCkpIHsKIAkJZW50cnktPnZjY3MtPnhvZmYgPSAwOwpAQCAtNDQzLDExICs0NDMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNsaXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZQUklWKGRldiktPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGNsaXBfbWtpcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgdGltZW91dCkKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjOwpAQCAtNTAxLDggKzQ5Niw4IEBACiAKIAkJCXNrYl9nZXQoc2tiKTsKIAkJCWNsaXBfcHVzaCh2Y2MsIHNrYik7Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cy0tOwotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzIC09IGxlbjsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzLS07CisJCQlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0KIApAQCAtNTU3LDExICs1NTIsMTMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2xpcF9uZXRkZXZfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGNsaXBfc3RhcnRfeG1pdCwKK307CisKIHN0YXRpYyB2b2lkIGNsaXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNsaXBfc3RhcnRfeG1pdDsKLQkvKiBzZ194bWl0IC4uLiAqLwotCWRldi0+Z2V0X3N0YXRzID0gY2xpcF9nZXRfc3RhdHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJmNsaXBfbmV0ZGV2X29wczsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVRNOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gUkZDMTQ4M0xMQ19MRU47CiAJZGV2LT5tdHUgPSBSRkMxNjI2X01UVTsKQEAgLTYyMSw3ICs2MTgsNyBAQAogCX0KIAogCS8qIGlnbm9yZSBub24tQ0xJUCBkZXZpY2VzICovCi0JaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+aGFyZF9zdGFydF94bWl0ICE9IGNsaXBfc3RhcnRfeG1pdCkKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9BVE0gfHwgZGV2LT5uZXRkZXZfb3BzICE9ICZjbGlwX25ldGRldl9vcHMpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmMgYi9uZXQvYXRtL2xlYy5jCmluZGV4IGU1ZTMwMTUuLjE5OWI2YmIgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmMKKysrIGIvbmV0L2F0bS9sZWMuYwpAQCAtNjIsNyArNjIsNiBAQAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxlY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGVjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBsZWNfYXJwX3RhYmxlICpsZWNfYXJwX2ZpbmQoc3RydWN0IGxlY19wcml2ICpwcml2LAogCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKTsKQEAgLTIxOCwyOCArMjE3LDI4IEBACiAKIHN0YXRpYyBpbnQgbGVjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQltZW1zZXQoJnByaXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoJmRldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWxlY19zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkCitsZWNfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwogCUFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSB2Y2MtPmF0bV9vcHRpb25zOwogCiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpOwogCWlmICh2Y2MtPnNlbmQodmNjLCBza2IpIDwgMCkgewotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCi0JcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiB9CiAKIHN0YXRpYyB2b2lkIGxlY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNzAsNyArMjY5LDcgQEAKIAlwcl9kZWJ1ZygibGVjX3N0YXJ0X3htaXQgY2FsbGVkXG4iKTsKIAlpZiAoIXByaXYtPmxlY2QpIHsKIAkJcHJpbnRrKCIlczpObyBsZWNkIGF0dGFjaGVkXG4iLCBkZXYtPm5hbWUpOwotCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlyZXR1cm4gLUVVTkFUQ0g7CiAJfQpAQCAtMzQ1LDcgKzM0NCw3IEBACiAJCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWlmIChza2IyID09IE5VTEwpIHsKLQkJCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlza2IgPSBza2IyOwpAQCAtMzgwLDcgKzM3OSw3IEBACiAJCQkgICAgKCIlczpsZWNfc3RhcnRfeG1pdDogdHggcXVldWUgZnVsbCBvciBubyBhcnAgZW50cnksIGRyb3BwaW5nLCAiLAogCQkJICAgICBkZXYtPm5hbWUpOwogCQkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7Ci0JCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJfQogCQlnb3RvIG91dDsKQEAgLTM5MiwxMCArMzkxLDEwIEBACiAJd2hpbGUgKGVudHJ5ICYmIChza2IyID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkpIHsKIAkJcHJfZGVidWcoImxlYy5jOiBlbXB0eWluZyB0eCBxdWV1ZSwgIik7CiAJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOwotCQlsZWNfc2VuZCh2Y2MsIHNrYjIsIHByaXYpOworCQlsZWNfc2VuZCh2Y2MsIHNrYjIpOwogCX0KIAotCWxlY19zZW5kKHZjYywgc2tiLCBwcml2KTsKKwlsZWNfc2VuZCh2Y2MsIHNrYik7CiAKIAlpZiAoIWF0bV9tYXlfc2VuZCh2Y2MsIDApKSB7CiAJCXN0cnVjdCBsZWNfdmNjX3ByaXYgKnZwcml2ID0gTEVDX1ZDQ19QUklWKHZjYyk7CkBAIC00MjcsMTUgKzQyNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IgY2xvc2VkLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxlY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigoc3RydWN0IGxlY19wcml2ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGxlY19hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MTIsNyArNTAyLDcgQEAKIAkJcHJpdi0+bGFuZTJfb3BzID0gTlVMTDsKIAkJaWYgKHByaXYtPmxhbmVfdmVyc2lvbiA+IDEpCiAJCQlwcml2LT5sYW5lMl9vcHMgPSAmbGFuZTJfb3BzOwotCQlpZiAoZGV2LT5jaGFuZ2VfbXR1KGRldiwgbWVzZy0+Y29udGVudC5jb25maWcubXR1KSkKKwkJaWYgKGRldl9zZXRfbXR1KGRldiwgbWVzZy0+Y29udGVudC5jb25maWcubXR1KSkKIAkJCXByaW50aygiJXM6IGNoYW5nZV9tdHUgdG8gJWQgZmFpbGVkXG4iLCBkZXYtPm5hbWUsCiAJCQkgICAgICAgbWVzZy0+Y29udGVudC5jb25maWcubXR1KTsKIAkJcHJpdi0+aXNfcHJveHkgPSBtZXNnLT5jb250ZW50LmNvbmZpZy5pc19wcm94eTsKQEAgLTY3NywxNyArNjY3LDE5IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxlY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsZWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gbGVjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsZWNfc3RhcnRfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbGVjX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9IGxlY190eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbGVjX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKKwogc3RhdGljIHZvaWQgbGVjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmNoYW5nZV9tdHUgPSBsZWNfY2hhbmdlX210dTsKLQlkZXYtPm9wZW4gPSBsZWNfb3BlbjsKLQlkZXYtPnN0b3AgPSBsZWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsZWNfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBsZWNfdHhfdGltZW91dDsKLQotCWRldi0+Z2V0X3N0YXRzID0gbGVjX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxlY19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5kb19pb2N0bCA9IE5VTEw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmxlY19uZXRkZXZfb3BzOwogCXByaW50aygiJXM6IEluaXRpYWxpemVkIVxuIiwgZGV2LT5uYW1lKTsKIH0KIApAQCAtODEwLDggKzgwMiw4IEBACiAJCWVsc2UKICNlbmRpZgogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7CiAJCW5ldGlmX3J4KHNrYik7CiAJfQpAQCAtMTg4Nyw3ICsxODc5LDcgQEAKIAkJCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKLQkJCQkJCWxlY19zZW5kKHZjYywgc2tiLCBlbnRyeS0+cHJpdik7CisJCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYik7CiAJCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCQkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwogCQkJCQlsZWNfYXJwX3B1dChlbnRyeSk7CkBAIC0yMzA1LDcgKzIyOTcsNyBAQAogCQkJCWxlY19hcnBfaG9sZChlbnRyeSk7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSAhPSBOVUxMKQotCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYiwgZW50cnktPnByaXYpOworCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYik7CiAJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAJCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKIAkJCQlsZWNfYXJwX3B1dChlbnRyeSk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5oIGIvbmV0L2F0bS9sZWMuaAppbmRleCAwZDM3NjY4Li45ZDE0ZDE5IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5oCisrKyBiL25ldC9hdG0vbGVjLmgKQEAgLTY5LDcgKzY5LDYgQEAKICNkZWZpbmUgTEVDX0FSUF9UQUJMRV9TSVpFIDE2CiAKIHN0cnVjdCBsZWNfcHJpdiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgc2hvcnQgbGVjaWQ7CQkJLyogTGVjaWQgb2YgdGhpcyBjbGllbnQgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZCBsZWNfYXJwX2VtcHR5X29uZXM7CiAJCQkJCQkvKiBVc2VkIGZvciBzdG9yaW5nIFZDQydzIHRoYXQgZG9uJ3QgaGF2ZSBhIE1BQyBhZGRyZXNzIGF0dGFjaGVkIHlldCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuYyBiL25ldC9hdG0vbXBjLmMKaW5kZXggMDM5ZDVjYy4uZTViZjExNCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuYworKysgYi9uZXQvYXRtL21wYy5jCkBAIC0yODYsMzMgKzI4NiwzMiBAQAogewogCiAJZHByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGM6XG4iLCBtcGMtPmRldi0+bmFtZSk7Ci0JaWYgKGRldi0+aGFyZF9zdGFydF94bWl0ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYzogZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gTlVMTCwgbm90IHN0YXJ0aW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuOworCWlmICghZGV2LT5uZXRkZXZfb3BzKQorCQlwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjICBub3Qgc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CisJZWxzZSB7CisJCW1wYy0+b2xkX29wcyA9IGRldi0+bmV0ZGV2X29wczsKKwkJbXBjLT5uZXdfb3BzID0gKm1wYy0+b2xkX29wczsKKwkJbXBjLT5uZXdfb3BzLm5kb19zdGFydF94bWl0ID0gbXBjX3NlbmRfcGFja2V0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmbXBjLT5uZXdfb3BzOwogCX0KLQltcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQgPSBkZXYtPmhhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1wY19zZW5kX3BhY2tldDsKLQotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc3RvcF9tcGMoc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7Ci0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbXBjLT5kZXY7CiAJZHByaW50aygibXBvYTogKCVzKSBzdG9wX21wYzoiLCBtcGMtPmRldi0+bmFtZSk7CiAKIAkvKiBMZXRzIG5vdCBudWxsaWZ5IGxlYyBkZXZpY2UncyBkZXYtPmhhcmRfc3RhcnRfeG1pdCAqLwotCWlmIChtcGMtPmRldi0+aGFyZF9zdGFydF94bWl0ICE9IG1wY19zZW5kX3BhY2tldCkgeworCWlmIChkZXYtPm5ldGRldl9vcHMgIT0gJm1wYy0+bmV3X29wcykgewogCQlkcHJpbnRrKCIgbXBjIGFscmVhZHkgc3RvcHBlZCwgbm90IGZhdGFsXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlkcHJpbnRrKCJcbiIpOwotCW1wYy0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQ7Ci0JbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0ID0gTlVMTDsKLQkvKiBjbG9zZV9zaG9ydGN1dHMobXBjKTsgICAgPz8/IEZJWE1FICovCiAKLQlyZXR1cm47CisJZGV2LT5uZXRkZXZfb3BzID0gbXBjLT5vbGRfb3BzOworCW1wYy0+b2xkX29wcyA9IE5VTEw7CisKKwkvKiBjbG9zZV9zaG9ydGN1dHMobXBjKTsgICAgPz8/IEZJWE1FICovCiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICptcG9hX2RldmljZV90eXBlX3N0cmluZyhjaGFyIHR5cGUpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKQEAgLTUzMSw3ICs1MzAsNiBAQAogICovCiBzdGF0aWMgaW50IG1wY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCByZXR2YWw7CiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGM7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCWludCBpID0gMDsKQEAgLTU2MSw5ICs1NTksNyBAQAogCX0KIAogIG5vbl9pcDoKLQlyZXR2YWwgPSBtcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQoc2tiLGRldik7Ci0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBtcGMtPm9sZF9vcHMtPm5kb19zdGFydF94bWl0KHNrYixkZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bV9tcG9hX3ZjY19hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgdm9pZCBfX3VzZXIgKmFyZykKZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBjLmggYi9uZXQvYXRtL21wYy5oCmluZGV4IDI0YzM4NmMuLjA5MTlhODhiIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5oCisrKyBiL25ldC9hdG0vbXBjLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm5leHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgICAgICAvKiBsZWMgaW4gcXVlc3Rpb24gICAgICAgICAgICAgICAgICAgICAqLwogCWludCBkZXZfbnVtOyAgICAgICAgICAgICAgICAgLyogZS5nLiAyIGZvciBsZWMyICAgICAgICAgICAgICAgICAgICAgKi8KLQlpbnQgKCpvbGRfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogCXN0cnVjdCBhdG1fdmNjICptcG9hZF92Y2M7ICAgLyogY29udHJvbCBjaGFubmVsIHRvIG1wb2FkICAgICAgICAgICAgKi8KIAl1aW50OF90IG1wc19jdHJsX2FkZHJbQVRNX0VTQV9MRU5dOyAgLyogTVBTIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAgICovCiAJdWludDhfdCBvdXJfY3RybF9hZGRyW0FUTV9FU0FfTEVOXTsgIC8qIE1QQydzIGNvbnRyb2wgQVRNIGFkZHJlc3MgICAqLwpAQCAtMzEsNiArMzEsOSBAQAogCXVpbnQ4X3QgKm1wc19tYWNzOyAgICAgICAgICAgLyogYXJyYXkgb2YgTVBTIE1BQyBhZGRyZXNzZXMsID49MSAgICAgKi8KIAlpbnQgbnVtYmVyX29mX21wc19tYWNzOyAgICAgIC8qIG51bWJlciBvZiB0aGUgYWJvdmUgTUFDIGFkZHJlc3NlcyAgICovCiAJc3RydWN0IG1wY19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7ICAvKiBwYXJhbWV0ZXJzIGZvciB0aGlzIGNsaWVudCAgICAqLworCisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvbGRfb3BzOworCXN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXdfb3BzOwogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggMDBkOWU1ZS4uZmQ5ZDA2ZiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTUyOSwxMCArMTUyOSw4IEBACiAJCWRwID0gYXgyNS0+ZGlnaXBlYXQ7CiAJfQogCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC5cbiIpOwotCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KLQlTT0NLX0RFQlVHKHNrLCAiQVguMjU6IHNlbmR0bzogYnVpbGRpbmcgcGFja2V0LlxuIik7CisJU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC4gQnVpbGRpbmcgcGFja2V0LlxuIik7CiAKIAkvKiBBc3N1bWUgdGhlIHdvcnN0IGNhc2UgKi8KIAlzaXplID0gbGVuICsgYXgyNS0+YXgyNV9kZXYtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwpAQCAtMTk4NSw5ICsxOTgzLDggQEAKIC8qCiAgKglDYWxsZWQgYnkgc29ja2V0LmMgb24ga2VybmVsIHN0YXJ0IHVwCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXgyNV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVgyNSksCi0JLmRldgk9CU5VTEwsCQkJCS8qIEFsbCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9CWNwdV90b19iZTE2KEVUSF9QX0FYMjUpLAogCS5mdW5jCT0JYXgyNV9raXNzX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfaWZhY2UuYyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwppbmRleCA4NDQzYWY1Li43MTMzOGYxIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCkBAIC02MSwyNyArNjEsMjQgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7CiAJcHJvdG9jb2wgPSBwcm90b2NvbF9saXN0OwotCWlmIChwcm90b2NvbCA9PSBOVUxMKSB7Ci0JCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAocHJvdG9jb2wgPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAKIAlpZiAocHJvdG9jb2wtPnBpZCA9PSBwaWQpIHsKIAkJcHJvdG9jb2xfbGlzdCA9IHByb3RvY29sLT5uZXh0OwotCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJd2hpbGUgKHByb3RvY29sICE9IE5VTEwgJiYgcHJvdG9jb2wtPm5leHQgIT0gTlVMTCkgewogCQlpZiAocHJvdG9jb2wtPm5leHQtPnBpZCA9PSBwaWQpIHsKIAkJCXMgPSBwcm90b2NvbC0+bmV4dDsKIAkJCXByb3RvY29sLT5uZXh0ID0gcHJvdG9jb2wtPm5leHQtPm5leHQ7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXByb3RvY29sID0gcHJvdG9jb2wtPm5leHQ7CiAJfQorb3V0OgogCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggNzQ0ZWQzZi4uMDJiOWJhYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC00MSwxNCArNDEsMTMgQEAKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xNCIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xNSIKIAogLyogQmx1ZXRvb3RoIHNvY2tldHMgKi8KICNkZWZpbmUgQlRfTUFYX1BST1RPCTgKIHN0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqYnRfcHJvdG9bQlRfTUFYX1BST1RPXTsKIHN0YXRpYyBERUZJTkVfUldMT0NLKGJ0X3Byb3RvX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnRfbG9ja19rZXlbQlRfTUFYX1BST1RPXTsKIHN0YXRpYyBjb25zdCBjaGFyICpidF9rZXlfc3RyaW5nc1tCVF9NQVhfUFJPVE9dID0gewogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0wyQ0FQIiwKQEAgLTg2LDExICs4NSw2IEBACiAJCQlidF9zbG9ja19rZXlfc3RyaW5nc1twcm90b10sICZidF9zbG9ja19rZXlbcHJvdG9dLAogCQkJCWJ0X2tleV9zdHJpbmdzW3Byb3RvXSwgJmJ0X2xvY2tfa2V5W3Byb3RvXSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGJ0X3NvY2tfcmVjbGFzc2lmeV9sb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bykKLXsKLX0KLSNlbmRpZgogCiBpbnQgYnRfc29ja19yZWdpc3RlcihpbnQgcHJvdG8sIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpCiB7CkBAIC0yMTcsNyArMjExLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgIW5ld3NvY2spIHsKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgIW5ld3NvY2sgfHwKKwkJCQkJCWJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwKSB7CiAJCQlidF9hY2NlcHRfdW5saW5rKHNrKTsKIAkJCWlmIChuZXdzb2NrKQogCQkJCXNvY2tfZ3JhZnQoc2ssIG5ld3NvY2spOwpAQCAtMjMyLDcgKzIyNyw3IEBACiBFWFBPUlRfU1lNQk9MKGJ0X2FjY2VwdF9kZXF1ZXVlKTsKIAogaW50IGJ0X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0Jc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCisJCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJaW50IG5vYmxvY2sgPSBmbGFncyAmIE1TR19ET05UV0FJVDsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTI3Nyw3ICsyNzIsOSBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZidF9zayhwYXJlbnQpLT5hY2NlcHRfcSkgewogCQlzayA9IChzdHJ1Y3Qgc29jayAqKSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidF9zb2NrLCBhY2NlcHRfcSk7Ci0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEKQorCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAorCQkJCQkoYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXAgJiYKKwkJCQkJCXNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikpCiAJCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IGM5Y2FjNzcuLjAwNzNlYzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtMTI2LDggKzEyNiw3IEBACiAKIAlzZXNzaW9uLT5yZWFzc2VtYmx5W2lkXSA9IG5za2I7CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY210cF9yZWN2X2ZyYW1lKHN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggYTRhNzg5Zi4uMTE4MWRiMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMTIzLDYgKzEyMyw4IEBACiAJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNUOwogCWNvbm4tPm91dCA9IDE7CiAKKwljb25uLT5hdHRlbXB0Kys7CisKIAljcC5oYW5kbGUgICA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihjb25uLT5wa3RfdHlwZSk7CiAKQEAgLTEzOSw2ICsxNDEsOCBAQAogCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVDsKIAljb25uLT5vdXQgPSAxOwogCisJY29ubi0+YXR0ZW1wdCsrOworCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoY29ubi0+cGt0X3R5cGUpOwogCkBAIC0xNTUsNiArMTU5LDcgQEAKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLT5oZGV2OworCV9fdTggcmVhc29uOwogCiAJQlRfREJHKCJjb25uICVwIHN0YXRlICVkIiwgY29ubiwgY29ubi0+c3RhdGUpOwogCkBAIC0xNzMsNyArMTc4LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBCVF9DT05GSUc6CiAJY2FzZSBCVF9DT05ORUNURUQ6Ci0JCWhjaV9hY2xfZGlzY29ubihjb25uLCAweDEzKTsKKwkJcmVhc29uID0gaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGNvbm4pOworCQloY2lfYWNsX2Rpc2Nvbm4oY29ubiwgcmVhc29uKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CkBAIC0yMTYsMTIgKzIyMiwxMyBAQAogCQlicmVhazsKIAljYXNlIFNDT19MSU5LOgogCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKLQkJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSzsKKwkJCWNvbm4tPnBrdF90eXBlID0gKGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0spIHwKKwkJCQkJKGhkZXYtPmVzY29fdHlwZSAmIEVEUl9FU0NPX01BU0spOwogCQllbHNlCiAJCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPnBrdF90eXBlICYgU0NPX1BUWVBFX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgRVNDT19MSU5LOgotCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPmVzY29fdHlwZTsKKwkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGUgJiB+RURSX0VTQ09fTUFTSzsKIAkJYnJlYWs7CiAJfQogCkBAIC0yODAsNiArMjg3LDggQEAKIAogCXNrYl9xdWV1ZV9wdXJnZSgmY29ubi0+ZGF0YV9xKTsKIAorCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMjUsNyArMzM0LDcgQEAKIAogLyogQ3JlYXRlIFNDTyBvciBBQ0wgY29ubmVjdGlvbi4KICAqIERldmljZSBfbXVzdF8gYmUgbG9ja2VkICovCi1zdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBhdXRoX3R5cGUpCitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCXN0cnVjdCBoY2lfY29ubiAqYWNsOwogCXN0cnVjdCBoY2lfY29ubiAqc2NvOwpAQCAtMzQwLDYgKzM0OSw3IEBACiAJaGNpX2Nvbm5faG9sZChhY2wpOwogCiAJaWYgKGFjbC0+c3RhdGUgPT0gQlRfT1BFTiB8fCBhY2wtPnN0YXRlID09IEJUX0NMT1NFRCkgeworCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKIAkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJCWhjaV9hY2xfY29ubmVjdChhY2wpOwogCX0KQEAgLTM4NSw1MSArMzk1LDU5IEBACiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZSk7CiAKIC8qIEF1dGhlbnRpY2F0ZSByZW1vdGUgZGV2aWNlICovCi1pbnQgaGNpX2Nvbm5fYXV0aChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCitzdGF0aWMgaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQlpZiAoY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPmhkZXYtPnNzcF9tb2RlID4gMCkgewotCQlpZiAoIShjb25uLT5hdXRoX3R5cGUgJiAweDAxKSkgewotCQkJY29ubi0+YXV0aF90eXBlIHw9IDB4MDE7Ci0JCQljb25uLT5saW5rX21vZGUgJj0gfkhDSV9MTV9BVVRIOwotCQl9Ci0JfQotCi0JaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9BVVRIKQorCWlmIChzZWNfbGV2ZWwgPiBjb25uLT5zZWNfbGV2ZWwpCisJCWNvbm4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwllbHNlIGlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKIAkJcmV0dXJuIDE7CiAKKwljb25uLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CisKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKIAkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJY3AuaGFuZGxlID0gY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoY2lfY29ubl9hdXRoKTsKIAotLyogRW5hYmxlIGVuY3J5cHRpb24gKi8KLWludCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubikKKy8qIEVuYWJsZSBzZWN1cml0eSAqLworaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJaWYgKHNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJCXJldHVybiAxOworCisJaWYgKHNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpIHsKKwkJaWYgKGNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5oZGV2LT5zc3BfbW9kZSA+IDApCisJCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKwogCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkKLQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubik7CisJCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChoY2lfY29ubl9hdXRoKGNvbm4pKSB7CisJaWYgKGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpKSB7CiAJCXN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCBjcDsKIAkJY3AuaGFuZGxlICA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWNwLmVuY3J5cHQgPSAxOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQsCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fZW5jcnlwdCk7CitFWFBPUlRfU1lNQk9MKGhjaV9jb25uX3NlY3VyaXR5KTsKIAogLyogQ2hhbmdlIGxpbmsga2V5ICovCiBpbnQgaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KHN0cnVjdCBoY2lfY29ubiAqY29ubikKQEAgLTQ0MiwxMiArNDYwLDEzIEBACiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQ0hBTkdFX0NPTk5fTElOS19LRVksCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KTsKIAogLyogU3dpdGNoIHJvbGUgKi8KLWludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSkKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSkKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIApAQCAtNDYwLDYgKzQ3OSw3IEBACiAJCWNwLnJvbGUgPSByb2xlOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NXSVRDSF9ST0xFLCBzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9zd2l0Y2hfcm9sZSk7CkBAIC01NDIsOSArNTYyLDcgQEAKIAogCQljLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAotCQloY2lfY29ubl9kZWxfc3lzZnMoYyk7Ci0KLQkJaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGMsIDB4MTYpOworCQloY2lfcHJvdG9fZGlzY29ubl9jZm0oYywgMHgxNik7CiAJCWhjaV9jb25uX2RlbChjKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggYmE3OGNjMS4uY2QwNjE1MSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMTU2NSw4ICsxNTY1LDcgQEAKIAogCS8qIFNlbmQgcXVldWVkIGNvbW1hbmRzICovCiAJaWYgKGF0b21pY19yZWFkKCZoZGV2LT5jbWRfY250KSAmJiAoc2tiID0gc2tiX2RlcXVldWUoJmhkZXYtPmNtZF9xKSkpIHsKLQkJaWYgKGhkZXYtPnNlbnRfY21kKQotCQkJa2ZyZWVfc2tiKGhkZXYtPnNlbnRfY21kKTsKKwkJa2ZyZWVfc2tiKGhkZXYtPnNlbnRfY21kKTsKIAogCQlpZiAoKGhkZXYtPnNlbnRfY21kID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpKSB7CiAJCQlhdG9taWNfZGVjKCZoZGV2LT5jbWRfY250KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IGY5MWJhNjkuLjU1NTM0MjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNDg0LDYgKzQ4NCwxNSBAQAogCWlmIChoZGV2LT5mZWF0dXJlc1s0XSAmIExNUF9FVjUpCiAJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT19FVjUpOwogCisJaWYgKGhkZXYtPmZlYXR1cmVzWzVdICYgTE1QX0VEUl9FU0NPXzJNKQorCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fMkVWMyk7CisKKwlpZiAoaGRldi0+ZmVhdHVyZXNbNV0gJiBMTVBfRURSX0VTQ09fM00pCisJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT18zRVYzKTsKKworCWlmIChoZGV2LT5mZWF0dXJlc1s1XSAmIExNUF9FRFJfM1NfRVNDTykKKwkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPXzJFVjUgfCBFU0NPXzNFVjUpOworCiAJQlRfREJHKCIlcyBmZWF0dXJlcyAweCUuMnglLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4IiwgaGRldi0+bmFtZSwKIAkJCQkJaGRldi0+ZmVhdHVyZXNbMF0sIGhkZXYtPmZlYXR1cmVzWzFdLAogCQkJCQloZGV2LT5mZWF0dXJlc1syXSwgaGRldi0+ZmVhdHVyZXNbM10sCkBAIC05MTQsNyArOTIzLDggQEAKIAlpZiAoZXYtPnN0YXR1cykgewogCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAJCWhjaV9jb25uX2RlbChjb25uKTsKLQl9CisJfSBlbHNlIGlmIChldi0+bGlua190eXBlICE9IEFDTF9MSU5LKQorCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CiAKIHVubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTEwMDksOSArMTAxOSw3IEBACiAJaWYgKGNvbm4pIHsKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAKLQkJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOwotCi0JCWhjaV9wcm90b19kaXNjb25uX2luZChjb25uLCBldi0+cmVhc29uKTsKKwkJaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKGNvbm4sIGV2LT5yZWFzb24pOwogCQloY2lfY29ubl9kZWwoY29ubik7CiAJfQogCkBAIC0xNjAwLDcgKzE2MDgsOCBAQAogCiAJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKIAkJCWlmICghZXYtPnN0YXR1cyAmJiBoZGV2LT5zc3BfbW9kZSA+IDAgJiYKLQkJCQkJY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPm91dCkgeworCQkJCQljb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+b3V0ICYmCisJCQkJCWNvbm4tPnNlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9TRFApIHsKIAkJCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwogCQkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CiAJCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKQEAgLTE2MzcsNiArMTY0NiwxMyBAQAogCQljb25uLT50eXBlID0gU0NPX0xJTks7CiAJfQogCisJaWYgKGNvbm4tPm91dCAmJiBldi0+c3RhdHVzID09IDB4MWMgJiYgY29ubi0+YXR0ZW1wdCA8IDIpIHsKKwkJY29ubi0+cGt0X3R5cGUgPSAoaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSykgfAorCQkJCQkoaGRldi0+ZXNjb190eXBlICYgRURSX0VTQ09fTUFTSyk7CisJCWhjaV9zZXR1cF9zeW5jKGNvbm4sIGNvbm4tPmxpbmstPmhhbmRsZSk7CisJCWdvdG8gdW5sb2NrOworCX0KKwogCWlmICghZXYtPnN0YXR1cykgewogCQljb25uLT5oYW5kbGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpOwogCQljb25uLT5zdGF0ZSAgPSBCVF9DT05ORUNURUQ7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCAxYTFmOTE2Li5lZDgyNzk2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQlkZXYgPSBkZXZpY2VfZmluZF9jaGlsZCgmY29ubi0+ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7Ci0JCWRldmljZV9tb3ZlKGRldiwgTlVMTCk7CisJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKIAkJcHV0X2RldmljZShkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGI5Mzc0OGUuLmNhNGQzYjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTUwLDkgKzUwLDEwIEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KIAotI2RlZmluZSBWRVJTSU9OICIyLjExIgorI2RlZmluZSBWRVJTSU9OICIyLjEzIgogCi1zdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IDB4MDAwMDsKK3N0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gMHgwMDgwOworc3RhdGljIHU4IGwyY2FwX2ZpeGVkX2NoYW5bOF0gPSB7IDB4MDIsIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGwyY2FwX3NvY2tfb3BzOwogCkBAIC03Nyw5ICs3OCwxMCBAQAogCiAJYmhfbG9ja19zb2NrKHNrKTsKIAotCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgotCQkJKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0FVVEggfAotCQkJCQlMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkpCisJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwgc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykKKwkJcmVhc29uID0gRUNPTk5SRUZVU0VEOworCWVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUICYmCisJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfU0RQKQogCQlyZWFzb24gPSBFQ09OTlJFRlVTRUQ7CiAJZWxzZQogCQlyZWFzb24gPSBFVElNRURPVVQ7CkBAIC0yMDQsNiArMjA2LDggQEAKIAogCUJUX0RCRygiY29ubiAlcCwgcHNtIDB4JTIuMngsIGRjaWQgMHglNC40eCIsIGNvbm4sIGwyY2FwX3BpKHNrKS0+cHNtLCBsMmNhcF9waShzayktPmRjaWQpOwogCisJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOworCiAJbDJjYXBfcGkoc2spLT5jb25uID0gY29ubjsKIAogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewpAQCAtMjU5LDE4ICsyNjMsMzUgQEAKIH0KIAogLyogU2VydmljZSBsZXZlbCBzZWN1cml0eSAqLwotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfY2hlY2tfbGlua19tb2RlKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlfX3U4IGF1dGhfdHlwZTsKIAotCWlmICgobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUKSB8fAotCQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkpCi0JCXJldHVybiBoY2lfY29ubl9lbmNyeXB0KGNvbm4tPmhjb24pOworCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKKwkJZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9BVVRIKQotCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLT5oY29uKTsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOworCX0gZWxzZSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCQlicmVhazsKKwkJfQorCX0KIAotCXJldHVybiAxOworCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBsMmNhcF9waShzayktPnNlY19sZXZlbCwKKwkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBsMmNhcF9nZXRfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pCkBAIC0zMTIsNyArMzMzLDEwIEBACiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAKIAlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSB7Ci0JCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCWlmICghKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkpCisJCQlyZXR1cm47CisKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CkBAIC0zNTYsNyArMzgwLDcgQEAKIAkJfQogCiAJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkgewotCQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKIAkJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwogCQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAkJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwpAQCAtMzcxLDEwICszOTUsMTggQEAKIAkJCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKIAkJCXJzcC5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKIAotCQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOwotCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQkJCQlzdHJ1Y3Qgc29jayAqcGFyZW50ID0gYnRfc2soc2spLT5wYXJlbnQ7CisJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKKwkJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX0FVVEhPUl9QRU5EKTsKKwkJCQkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CisKKwkJCQl9IGVsc2UgeworCQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwkJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1BFTkQpOwogCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19BVVRIRU5fUEVORCk7CkBAIC00MjYsNyArNDU4LDcgQEAKIAlyZWFkX2xvY2soJmwtPmxvY2spOwogCiAJZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7Ci0JCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1JFTElBQkxFKQorCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKIAkJCXNrLT5za19lcnIgPSBlcnI7CiAJfQogCkBAIC00MzcsNiArNDY5LDcgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9ICh2b2lkICopIGFyZzsKIAorCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CiAJY29ubi0+aW5mb19pZGVudCA9IDA7CiAKIAlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOwpAQCAtNDcwLDYgKzUwMyw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmxvY2spOwogCXJ3bG9ja19pbml0KCZjb25uLT5jaGFuX2xpc3QubG9jayk7CiAKKwljb25uLT5kaXNjX3JlYXNvbiA9IDB4MTM7CisKIAlyZXR1cm4gY29ubjsKIH0KIApAQCAtNDgzLDggKzUxOCw3IEBACiAKIAlCVF9EQkcoImhjb24gJXAgY29ubiAlcCwgZXJyICVkIiwgaGNvbiwgY29ubiwgZXJyKTsKIAotCWlmIChjb25uLT5yeF9za2IpCi0JCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOworCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOwogCiAJLyogS2lsbCBjaGFubmVscyAqLwogCXdoaWxlICgoc2sgPSBjb25uLT5jaGFuX2xpc3QuaGVhZCkpIHsKQEAgLTYwOCw3ICs2NDIsNiBAQAogCiAJY2FzZSBCVF9DT05ORUNURUQ6CiAJY2FzZSBCVF9DT05GSUc6Ci0JY2FzZSBCVF9DT05ORUNUMjoKIAkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAkJCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CkBAIC02MjQsNiArNjU3LDI3IEBACiAJCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKIAkJYnJlYWs7CiAKKwljYXNlIEJUX0NPTk5FQ1QyOgorCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKKwkJCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwkJCV9fdTE2IHJlc3VsdDsKKworCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApCisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX0JBRF9QU007CisKKwkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKKwkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisJCX0gZWxzZQorCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CisJCWJyZWFrOworCiAJY2FzZSBCVF9DT05ORUNUOgogCWNhc2UgQlRfRElTQ09OTjoKIAkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CkBAIC02NTMsMTMgKzcwNywxOSBAQAogCiAJaWYgKHBhcmVudCkgewogCQlzay0+c2tfdHlwZSA9IHBhcmVudC0+c2tfdHlwZTsKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwOworCiAJCXBpLT5pbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+aW10dTsKIAkJcGktPm9tdHUgPSBsMmNhcF9waShwYXJlbnQpLT5vbXR1OwotCQlwaS0+bGlua19tb2RlID0gbDJjYXBfcGkocGFyZW50KS0+bGlua19tb2RlOworCQlwaS0+c2VjX2xldmVsID0gbDJjYXBfcGkocGFyZW50KS0+c2VjX2xldmVsOworCQlwaS0+cm9sZV9zd2l0Y2ggPSBsMmNhcF9waShwYXJlbnQpLT5yb2xlX3N3aXRjaDsKKwkJcGktPmZvcmNlX3JlbGlhYmxlID0gbDJjYXBfcGkocGFyZW50KS0+Zm9yY2VfcmVsaWFibGU7CiAJfSBlbHNlIHsKIAkJcGktPmltdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAkJcGktPm9tdHUgPSAwOwotCQlwaS0+bGlua19tb2RlID0gMDsKKwkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJcGktPnJvbGVfc3dpdGNoID0gMDsKKwkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKIAl9CiAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCkBAIC03MjMsMTcgKzc4MywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRyX2xlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFsZW4pCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29ja2FkZHJfbDIgbGE7CisJaW50IGxlbiwgZXJyID0gMDsKIAotCUJUX0RCRygic2sgJXAsICVzICVkIiwgc2ssIGJhdG9zdHIoJmxhLT5sMl9iZGFkZHIpLCBsYS0+bDJfcHNtKTsKKwlCVF9EQkcoInNrICVwIiwgc2spOwogCiAJaWYgKCFhZGRyIHx8IGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEgpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtc2V0KCZsYSwgMCwgc2l6ZW9mKGxhKSk7CisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YobGEpLCBhbGVuKTsKKwltZW1jcHkoJmxhLCBhZGRyLCBsZW4pOworCisJaWYgKGxhLmwyX2NpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlsb2NrX3NvY2soc2spOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9PUEVOKSB7CkBAIC03NDEsNyArODA4LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChsYS0+bDJfcHNtICYmIGJ0b2hzKGxhLT5sMl9wc20pIDwgMHgxMDAxICYmCisJaWYgKGxhLmwyX3BzbSAmJiBidG9ocyhsYS5sMl9wc20pIDwgMHgxMDAxICYmCiAJCQkJIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKSB7CiAJCWVyciA9IC1FQUNDRVM7CiAJCWdvdG8gZG9uZTsKQEAgLTc0OSwxNCArODE2LDE3IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwogCi0JaWYgKGxhLT5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLT5sMl9wc20sICZsYS0+bDJfYmRhZGRyKSkgeworCWlmIChsYS5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLmwyX3BzbSwgJmxhLmwyX2JkYWRkcikpIHsKIAkJZXJyID0gLUVBRERSSU5VU0U7CiAJfSBlbHNlIHsKIAkJLyogU2F2ZSBzb3VyY2UgYWRkcmVzcyAqLwotCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS0+bDJfYmRhZGRyKTsKLQkJbDJjYXBfcGkoc2spLT5wc20gICA9IGxhLT5sMl9wc207Ci0JCWwyY2FwX3BpKHNrKS0+c3BvcnQgPSBsYS0+bDJfcHNtOworCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS5sMl9iZGFkZHIpOworCQlsMmNhcF9waShzayktPnBzbSAgID0gbGEubDJfcHNtOworCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEubDJfcHNtOwogCQlzay0+c2tfc3RhdGUgPSBCVF9CT1VORDsKKworCQlpZiAoYnRvaHMobGEubDJfcHNtKSA9PSAweDAwMDEgfHwgYnRvaHMobGEubDJfcHNtKSA9PSAweDAwMDMpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKIAl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CkBAIC03NzYsNyArODQ2LDggQEAKIAlfX3U4IGF1dGhfdHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCUJUX0RCRygiJXMgLT4gJXMgcHNtIDB4JTIuMngiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSwgbDJjYXBfcGkoc2spLT5wc20pOworCUJUX0RCRygiJXMgLT4gJXMgcHNtIDB4JTIuMngiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSwKKwkJCQkJCQlsMmNhcF9waShzayktPnBzbSk7CiAKIAlpZiAoIShoZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYykpKQogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKQEAgLTc4NSwyMSArODU2LDQyIEBACiAKIAllcnIgPSAtRU5PTUVNOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fQVVUSCB8fAotCQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9FTkNSWVBUIHx8Ci0JCQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpCisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfUkFXKSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HX01JVE07CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOwogCQllbHNlCi0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07Ci0JfSBlbHNlIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpCiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKLQkJZWxzZQorCisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKIAkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KIAl9CiAKLQloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwgYXV0aF90eXBlKTsKKwloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwKKwkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiAJaWYgKCFoY29uKQogCQlnb3RvIGRvbmU7CiAKQEAgLTgzNSwyMCArOTI3LDI1IEBACiAKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFsZW4sIGludCBmbGFncykKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbDIgKmxhID0gKHN0cnVjdCBzb2NrYWRkcl9sMiAqKSBhZGRyOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAwOwotCi0JbG9ja19zb2NrKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfbDIgbGE7CisJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKLQlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCB8fCBhbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sMikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KKwlpZiAoIWFkZHIgfHwgYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgJiYgIWxhLT5sMl9wc20pIHsKKwltZW1zZXQoJmxhLCAwLCBzaXplb2YobGEpKTsKKwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihsYSksIGFsZW4pOworCW1lbWNweSgmbGEsIGFkZHIsIGxlbik7CisKKwlpZiAobGEubDJfY2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgJiYgIWxhLmwyX3BzbSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtODc1LDggKzk3Miw4IEBACiAJfQogCiAJLyogU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIHBzbSAqLwotCWJhY3B5KCZidF9zayhzayktPmRzdCwgJmxhLT5sMl9iZGFkZHIpOwotCWwyY2FwX3BpKHNrKS0+cHNtID0gbGEtPmwyX3BzbTsKKwliYWNweSgmYnRfc2soc2spLT5kc3QsICZsYS5sMl9iZGFkZHIpOworCWwyY2FwX3BpKHNrKS0+cHNtID0gbGEubDJfcHNtOwogCiAJaWYgKChlcnIgPSBsMmNhcF9kb19jb25uZWN0KHNrKSkpCiAJCWdvdG8gZG9uZTsKQEAgLTEwMDAsMTIgKzEwOTcsMTYgQEAKIAlhZGRyLT5zYV9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJKmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpOwogCi0JaWYgKHBlZXIpCisJaWYgKHBlZXIpIHsKKwkJbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+ZHN0KTsKLQllbHNlCisJCWxhLT5sMl9jaWQgPSBodG9icyhsMmNhcF9waShzayktPmRjaWQpOworCX0gZWxzZSB7CisJCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnNwb3J0OwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+c3JjKTsKKwkJbGEtPmwyX2NpZCA9IGh0b2JzKGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJfQogCi0JbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOwogCXJldHVybiAwOwogfQogCkBAIC0xMTA2LDExICsxMjA3LDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMiAmJiBidF9zayhzayktPmRlZmVyX3NldHVwKSB7CisJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisKKwkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCisJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOworCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCWwyY2FwX3NlbmRfY21kKGwyY2FwX3BpKHNrKS0+Y29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKworCQlyZWxlYXNlX3NvY2soc2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCisJcmV0dXJuIGJ0X3NvY2tfcmVjdm1zZyhpb2NiLCBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKLQlpbnQgZXJyID0gMCwgbGVuOworCWludCBsZW4sIGVyciA9IDA7CiAJdTMyIG9wdDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CkBAIC0xMTQwLDcgKzEyNjgsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5saW5rX21vZGUgPSBvcHQ7CisJCWlmIChvcHQgJiBMMkNBUF9MTV9BVVRIKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWlmIChvcHQgJiBMMkNBUF9MTV9FTkNSWVBUKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CisJCWlmIChvcHQgJiBMMkNBUF9MTV9TRUNVUkUpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0hJR0g7CisKKwkJbDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCAgICA9IChvcHQgJiBMMkNBUF9MTV9NQVNURVIpOworCQlsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlID0gKG9wdCAmIEwyQ0FQX0xNX1JFTElBQkxFKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTE1MiwxMiArMTI4OCw3NyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9MMkNBUCkKKwkJcmV0dXJuIGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yoc2VjKSwgb3B0bGVuKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopICZzZWMsIG9wdHZhbCwgbGVuKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlYy5sZXZlbCA8IEJUX1NFQ1VSSVRZX0xPVyB8fAorCQkJCQlzZWMubGV2ZWwgPiBCVF9TRUNVUklUWV9ISUdIKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChnZXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBvcHQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBsMmNhcF9vcHRpb25zIG9wdHM7CiAJc3RydWN0IGwyY2FwX2Nvbm5pbmZvIGNpbmZvOwogCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKQEAgLTExODAsMTIgKzEzODEsMzYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0xNOgotCQlpZiAocHV0X3VzZXIobDJjYXBfcGkoc2spLT5saW5rX21vZGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CisJCQlvcHQgPSBMMkNBUF9MTV9BVVRIOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSCB8IEwyQ0FQX0xNX0VOQ1JZUFQ7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSCB8IEwyQ0FQX0xNX0VOQ1JZUFQgfAorCQkJCQkJCUwyQ0FQX0xNX1NFQ1VSRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQlvcHQgfD0gTDJDQVBfTE1fTUFTVEVSOworCisJCWlmIChsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlKQorCQkJb3B0IHw9IEwyQ0FQX0xNX1JFTElBQkxFOworCisJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ09OTklORk86Ci0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKSB7CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmCisJCQkJCSEoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyICYmCisJCQkJCQlidF9zayhzayktPmRlZmVyX3NldHVwKSkgewogCQkJZXJyID0gLUVOT1RDT05OOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyMDgsNiArMTQzMyw2MCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOworCWludCBsZW4sIGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9MMkNBUCkKKwkJcmV0dXJuIGwyY2FwX3NvY2tfZ2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYgc2stPnNrX3R5cGUgIT0gU09DS19SQVcpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yoc2VjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmc2VjLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKKworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB1dF91c2VyKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCQllcnIgPSAtRUZBVUxUOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTI3MCwxMSArMTU0OSw2IEBACiAJCSAqLwogCQlwYXJlbnQtPnNrX2RhdGFfcmVhZHkocGFyZW50LCAwKTsKIAl9Ci0KLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpIHsKLQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47Ci0JCWhjaV9jb25uX2NoYW5nZV9saW5rX2tleShjb25uLT5oY29uKTsKLQl9CiB9CiAKIC8qIENvcHkgZnJhbWUgdG8gYWxsIHJhdyBzb2NrZXRzIG9uIHRoYXQgY29ubmVjdGlvbiAqLwpAQCAtMTU0OSw4ICsxODIzLDExIEBACiAKIAlpZiAoKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgJiYKIAkJCQkJY21kLT5pZGVudCA9PSBjb25uLT5pbmZvX2lkZW50KSB7Ci0JCWNvbm4tPmluZm9faWRlbnQgPSAwOwogCQlkZWxfdGltZXIoJmNvbm4tPmluZm9fdGltZXIpOworCisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCiAJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CiAJfQogCkBAIC0xNTgwLDYgKzE4NTcsNyBAQAogCS8qIENoZWNrIGlmIHRoZSBBQ0wgaXMgc2VjdXJlIGVub3VnaCAoaWYgbm90IFNEUCkgKi8KIAlpZiAocHNtICE9IGNwdV90b19sZTE2KDB4MDAwMSkgJiYKIAkJCQkhaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKGNvbm4tPmhjb24pKSB7CisJCWNvbm4tPmRpc2NfcmVhc29uID0gMHgwNTsKIAkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOwogCQlnb3RvIHJlc3BvbnNlOwogCX0KQEAgLTE2MjEsMTEgKzE4OTksMTggQEAKIAogCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBjbWQtPmlkZW50OwogCi0JaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgewotCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgewotCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKLQkJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CisJaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkgeworCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CisJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CisJCQkJc3RhdHVzID0gTDJDQVBfQ1NfQVVUSE9SX1BFTkQ7CisJCQkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CisJCQl9IGVsc2UgeworCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TVUNDRVNTOworCQkJCXN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNUMjsKIAkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CkBAIC0xNjk1LDExICsxOTgwLDE0IEBACiAJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IGRjaWQ7CiAJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwogCisJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CisKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKIAkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9DUl9QRU5EOgorCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE5MDgsNiArMjE5NiwxNCBAQAogCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKGwyY2FwX2ZlYXRfbWFzayksIChfX2xlMzIgKikgcnNwLT5kYXRhKTsKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwKIAkJCQkJTDJDQVBfSU5GT19SU1AsIHNpemVvZihidWYpLCBidWYpOworCX0gZWxzZSBpZiAodHlwZSA9PSBMMkNBUF9JVF9GSVhFRF9DSEFOKSB7CisJCXU4IGJ1ZlsxMl07CisJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqKSBidWY7CisJCXJzcC0+dHlwZSAgID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRklYRURfQ0hBTik7CisJCXJzcC0+cmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfSVJfU1VDQ0VTUyk7CisJCW1lbWNweShidWYgKyA0LCBsMmNhcF9maXhlZF9jaGFuLCA4KTsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwKKwkJCQkJTDJDQVBfSU5GT19SU1AsIHNpemVvZihidWYpLCBidWYpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCByc3A7CiAJCXJzcC50eXBlICAgPSBjcHVfdG9fbGUxNih0eXBlKTsKQEAgLTE5MjksMTQgKzIyMjUsMzEgQEAKIAogCUJUX0RCRygidHlwZSAweCU0LjR4IHJlc3VsdCAweCUyLjJ4IiwgdHlwZSwgcmVzdWx0KTsKIAotCWNvbm4tPmluZm9faWRlbnQgPSAwOwotCiAJZGVsX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyKTsKIAotCWlmICh0eXBlID09IEwyQ0FQX0lUX0ZFQVRfTUFTSykKKwlpZiAodHlwZSA9PSBMMkNBUF9JVF9GRUFUX01BU0spIHsKIAkJY29ubi0+ZmVhdF9tYXNrID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHJzcC0+ZGF0YSk7CiAKLQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOworCQlpZiAoY29ubi0+ZmVhdF9tYXNrICYgMHgwMDgwKSB7CisJCQlzdHJ1Y3QgbDJjYXBfaW5mb19yZXEgcmVxOworCQkJcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihMMkNBUF9JVF9GSVhFRF9DSEFOKTsKKworCQkJY29ubi0+aW5mb19pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKKworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY29ubi0+aW5mb19pZGVudCwKKwkJCQkJTDJDQVBfSU5GT19SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwkJfSBlbHNlIHsKKwkJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKworCQkJbDJjYXBfY29ubl9zdGFydChjb25uKTsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBMMkNBUF9JVF9GSVhFRF9DSEFOKSB7CisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCisJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTQzLDEwICsyNDU2LDE1IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgJmhkZXYtPmJkYWRkcikpIHsKLQkJCWxtMSB8PSAoSENJX0xNX0FDQ0VQVCB8IGwyY2FwX3BpKHNrKS0+bGlua19tb2RlKTsKKwkJCWxtMSB8PSBIQ0lfTE1fQUNDRVBUOworCQkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQkJbG0xIHw9IEhDSV9MTV9NQVNURVI7CiAJCQlleGFjdCsrOwotCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKQotCQkJbG0yIHw9IChIQ0lfTE1fQUNDRVBUIHwgbDJjYXBfcGkoc2spLT5saW5rX21vZGUpOworCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CisJCQlsbTIgfD0gSENJX0xNX0FDQ0VQVDsKKwkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJCWxtMiB8PSBIQ0lfTE1fTUFTVEVSOworCQl9CiAJfQogCXJlYWRfdW5sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOwogCkBAIC0yMTcyLDcgKzI0OTAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHJlYXNvbikKK3N0YXRpYyBpbnQgbDJjYXBfZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKKworCUJUX0RCRygiaGNvbiAlcCIsIGhjb24pOworCisJaWYgKGhjb24tPnR5cGUgIT0gQUNMX0xJTksgfHwgIWNvbm4pCisJCXJldHVybiAweDEzOworCisJcmV0dXJuIGNvbm4tPmRpc2NfcmVhc29uOworfQorCitzdGF0aWMgaW50IGwyY2FwX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggcmVhc29uKQogewogCUJUX0RCRygiaGNvbiAlcCByZWFzb24gJWQiLCBoY29uLCByZWFzb24pOwogCkBAIC0yMTg0LDcgKzI1MTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBzb2NrICpzaywgdTggZW5jcnlwdCkKK3sKKwlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQpCisJCXJldHVybjsKKworCWlmIChlbmNyeXB0ID09IDB4MDApIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkgeworCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogKiA1KTsKKwkJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCBFQ09OTlJFRlVTRUQpOworCX0gZWxzZSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pCisJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc2VjdXJpdHlfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQogewogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOwpAQCAtMjIwMCw4NSArMjU0NywxNiBAQAogCXJlYWRfbG9jaygmbC0+bG9jayk7CiAKIAlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKLQogCQliaF9sb2NrX3NvY2soc2spOwogCi0JCWlmICgocGktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkgJiYKLQkJCQkJIShoY29uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgJiYKLQkJCQkJCQkJIXN0YXR1cykgeworCQlpZiAobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQpIHsKIAkJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7Ci0JCQlpZiAoIXN0YXR1cykgewotCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207Ci0KLQkJCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCi0JCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOwotCQkJfQotCQl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMikgewotCQkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKLQkJCV9fdTE2IHJlc3VsdDsKLQotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKLQkJCX0gZWxzZSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKLQkJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogLyAxMCk7Ci0JCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU0VDX0JMT0NLOwotCQkJfQotCi0JCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKLQkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7Ci0JCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7Ci0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOwotCQl9Ci0KLQkJYmhfdW5sb2NrX3NvY2soc2spOwotCX0KLQotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGwyY2FwX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQotewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOwotCXN0cnVjdCBzb2NrICpzazsKLQotCWlmICghY29ubikKLQkJcmV0dXJuIDA7Ci0KLQlsID0gJmNvbm4tPmNoYW5fbGlzdDsKLQotCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwotCi0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKLQotCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCi0JCWJoX2xvY2tfc29jayhzayk7Ci0KLQkJaWYgKChwaS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9TRUNVUkUpKSAmJgotCQkJCQkoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAotCQkJCQkJc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykgJiYKLQkJCQkJCSFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7Ci0JCQlfX2wyY2FwX3NvY2tfY2xvc2Uoc2ssIEVDT05OUkVGVVNFRCk7CisJCWlmICghc3RhdHVzICYmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSkgeworCQkJbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzaywgZW5jcnlwdCk7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjM3Niw3ICsyNjU0LDcgQEAKIAkJCWdvdG8gZHJvcDsKIAogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgc2tiX3B1dChjb25uLT5yeF9za2IsIHNrYi0+bGVuKSwKLQkJCSAgICAgIHNrYi0+bGVuKTsKKwkJCQkJCQkJc2tiLT5sZW4pOwogCQljb25uLT5yeF9sZW4gPSBsZW4gLSBza2ItPmxlbjsKIAl9IGVsc2UgewogCQlCVF9EQkcoIkNvbnQ6IGZyYWcgbGVuICVkIChleHBlY3RpbmcgJWQpIiwgc2tiLT5sZW4sIGNvbm4tPnJ4X2xlbik7CkBAIC0yMzk4LDcgKzI2NzYsNyBAQAogCQl9CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQoY29ubi0+cnhfc2tiLCBza2ItPmxlbiksCi0JCQkgICAgICBza2ItPmxlbik7CisJCQkJCQkJCXNrYi0+bGVuKTsKIAkJY29ubi0+cnhfbGVuIC09IHNrYi0+bGVuOwogCiAJCWlmICghY29ubi0+cnhfbGVuKSB7CkBAIC0yNDI0LDEwICsyNzAyLDEwIEBACiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZsMmNhcF9za19saXN0LmhlYWQpIHsKIAkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAotCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgMHgleFxuIiwKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWQgJWQgMHglNC40eCAweCU0LjR4ICVkICVkICVkXG4iLAogCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAogCQkJCXNrLT5za19zdGF0ZSwgYnRvaHMocGktPnBzbSksIHBpLT5zY2lkLCBwaS0+ZGNpZCwKLQkJCQlwaS0+aW10dSwgcGktPm9tdHUsIHBpLT5saW5rX21vZGUpOworCQkJCXBpLT5pbXR1LCBwaS0+b210dSwgcGktPnNlY19sZXZlbCk7CiAJfQogCiAJcmVhZF91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CkBAIC0yNDQ3LDcgKzI3MjUsNyBAQAogCS5hY2NlcHQJCT0gbDJjYXBfc29ja19hY2NlcHQsCiAJLmdldG5hbWUJPSBsMmNhcF9zb2NrX2dldG5hbWUsCiAJLnNlbmRtc2cJPSBsMmNhcF9zb2NrX3NlbmRtc2csCi0JLnJlY3Ztc2cJPSBidF9zb2NrX3JlY3Ztc2csCisJLnJlY3Ztc2cJPSBsMmNhcF9zb2NrX3JlY3Ztc2csCiAJLnBvbGwJCT0gYnRfc29ja19wb2xsLAogCS5pb2N0bAkJPSBidF9zb2NrX2lvY3RsLAogCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKQEAgLTI0NjksOCArMjc0Nyw4IEBACiAJLmNvbm5lY3RfaW5kCT0gbDJjYXBfY29ubmVjdF9pbmQsCiAJLmNvbm5lY3RfY2ZtCT0gbDJjYXBfY29ubmVjdF9jZm0sCiAJLmRpc2Nvbm5faW5kCT0gbDJjYXBfZGlzY29ubl9pbmQsCi0JLmF1dGhfY2ZtCT0gbDJjYXBfYXV0aF9jZm0sCi0JLmVuY3J5cHRfY2ZtCT0gbDJjYXBfZW5jcnlwdF9jZm0sCisJLmRpc2Nvbm5fY2ZtCT0gbDJjYXBfZGlzY29ubl9jZm0sCisJLnNlY3VyaXR5X2NmbQk9IGwyY2FwX3NlY3VyaXR5X2NmbSwKIAkucmVjdl9hY2xkYXRhCT0gbDJjYXBfcmVjdl9hY2xkYXRhCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggYWNkODRmZC4uMWQwZmIwZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL3JmY29tbS5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjEuMTAiCisjZGVmaW5lIFZFUlNJT04gIjEuMTEiCiAKIHN0YXRpYyBpbnQgZGlzYWJsZV9jZmMgPSAwOwogc3RhdGljIGludCBjaGFubmVsX210dSA9IC0xOwpAQCAtMjIzLDE5ICsyMjMsMjUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByZmNvbW1fY2hlY2tfbGlua19tb2RlKHN0cnVjdCByZmNvbW1fZGxjICpkKQorc3RhdGljIGlubGluZSBpbnQgcmZjb21tX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCByZmNvbW1fZGxjICpkKQogewogCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOworCV9fdTggYXV0aF90eXBlOwogCi0JaWYgKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSB7Ci0JCWlmICghaGNpX2Nvbm5fZW5jcnlwdChsMmNhcF9waShzayktPmNvbm4tPmhjb24pKQotCQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fQVVUSCkgewotCQlpZiAoIWhjaV9jb25uX2F1dGgobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKSkKLQkJCXJldHVybiAxOworCXN3aXRjaCAoZC0+c2VjX2xldmVsKSB7CisJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCWJyZWFrOworCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbiwgZC0+c2VjX2xldmVsLAorCQkJCQkJCQlhdXRoX3R5cGUpOwogfQogCiAvKiAtLS0tIFJGQ09NTSBETENzIC0tLS0gKi8KQEAgLTM4OCwxMCArMzk0LDEwIEBACiAJZC0+Y2ZjID0gKHMtPmNmYyA9PSBSRkNPTU1fQ0ZDX1VOS05PV04pID8gMCA6IHMtPmNmYzsKIAogCWlmIChzLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQpIHsKLQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCWVsc2UKKwkJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkKIAkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQllbHNlCisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJfQogCiAJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0NPTk5fVElNRU9VVCk7CkBAIC00MjEsOSArNDI3LDE2IEBACiAJCQlkLCBkLT5zdGF0ZSwgZC0+ZGxjaSwgZXJyLCBzKTsKIAogCXN3aXRjaCAoZC0+c3RhdGUpIHsKLQljYXNlIEJUX0NPTk5FQ1RFRDoKLQljYXNlIEJUX0NPTkZJRzoKIAljYXNlIEJUX0NPTk5FQ1Q6CisJY2FzZSBCVF9DT05GSUc6CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9zY2hlZHVsZShSRkNPTU1fU0NIRURfQVVUSCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgQlRfQ09OTkVDVEVEOgogCQlkLT5zdGF0ZSA9IEJUX0RJU0NPTk47CiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmQtPnR4X3F1ZXVlKSkgewogCQkJcmZjb21tX3NlbmRfZGlzYyhzLCBkLT5kbGNpKTsKQEAgLTQzNCw2ICs0NDcsMTUgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgQlRfT1BFTjoKKwljYXNlIEJUX0NPTk5FQ1QyOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbCB0aHJvdWdoICovCisKIAlkZWZhdWx0OgogCQlyZmNvbW1fZGxjX2NsZWFyX3RpbWVyKGQpOwogCkBAIC02MzYsNiArNjU4LDcgQEAKIAliYWNweSgmYWRkci5sMl9iZGFkZHIsIHNyYyk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSAwOworCWFkZHIubDJfY2lkICAgID0gMDsKIAkqZXJyID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoKmVyciA8IDApCiAJCWdvdG8gZmFpbGVkOwpAQCAtNjU3LDYgKzY4MCw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBkc3QpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gaHRvYnMoUkZDT01NX1BTTSk7CisJYWRkci5sMl9jaWQgICAgPSAwOwogCSplcnIgPSBrZXJuZWxfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkciksIE9fTk9OQkxPQ0spOwogCWlmICgqZXJyID09IDAgfHwgKmVyciA9PSAtRUlOUFJPR1JFU1MpCiAJCXJldHVybiBzOwpAQCAtMTE2Miw3ICsxMTg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCit2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQogewogCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOwogCkBAIC0xMTc1LDEyICsxMTk5LDMxIEBACiAJZC0+c3RhdGVfY2hhbmdlKGQsIDApOwogCXJmY29tbV9kbGNfdW5sb2NrKGQpOwogCi0JaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9NQVNURVIpCisJaWYgKGQtPnJvbGVfc3dpdGNoKQogCQloY2lfY29ubl9zd2l0Y2hfcm9sZShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIDB4MDApOwogCiAJcmZjb21tX3NlbmRfbXNjKGQtPnNlc3Npb24sIDEsIGQtPmRsY2ksIGQtPnYyNF9zaWcpOwogfQogCitzdGF0aWMgdm9pZCByZmNvbW1fY2hlY2tfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQoreworCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpIHsKKwkJaWYgKGQtPmRlZmVyX3NldHVwKSB7CisJCQlzZXRfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCisJCQlyZmNvbW1fZGxjX2xvY2soZCk7CisJCQlkLT5zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJZC0+c3RhdGVfY2hhbmdlKGQsIDApOworCQkJcmZjb21tX2RsY191bmxvY2soZCk7CisJCX0gZWxzZQorCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOworCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgcmZjb21tX3JlY3Zfc2FibShzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMsIHU4IGRsY2kpCiB7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQ7CkBAIC0xMjAzLDExICsxMjQ2LDcgQEAKIAlpZiAoZCkgewogCQlpZiAoZC0+c3RhdGUgPT0gQlRfT1BFTikgewogCQkJLyogRExDIHdhcyBwcmV2aW91c2x5IG9wZW5lZCBieSBQTiByZXF1ZXN0ICovCi0JCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgewotCQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQkJcmZjb21tX2NoZWNrX2FjY2VwdChkKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjE5LDExICsxMjU4LDcgQEAKIAkJZC0+YWRkciA9IF9fYWRkcihzLT5pbml0aWF0b3IsIGRsY2kpOwogCQlyZmNvbW1fZGxjX2xpbmsocywgZCk7CiAKLQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOwotCQl9IGVsc2UKLQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQlyZmNvbW1fY2hlY2tfYWNjZXB0KGQpOwogCX0gZWxzZSB7CiAJCXJmY29tbV9zZW5kX2RtKHMsIGRsY2kpOwogCX0KQEAgLTE2MzcsMTEgKzE2NzIsMTIgQEAKIAkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCQlpZiAoZC0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CiAJCQlkLT5tdHUgPSBzLT5tdHU7Ci0JCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgeworCQkJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkgeworCQkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQkJfSBlbHNlIHsKIAkJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CiAJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTE3MTcsMTEgKzE3NTMsMTcgQEAKIAkJCWlmIChkLT5vdXQpIHsKIAkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKIAkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQ09OTl9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwotCQkJaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9TRUNVUkUpIHsKLQkJCQlzdHJ1Y3Qgc29jayAqc2sgPSBzLT5zb2NrLT5zazsKLQkJCQloY2lfY29ubl9jaGFuZ2VfbGlua19rZXkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGQtPmRlZmVyX3NldHVwKSB7CisJCQkJCXNldF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpOworCQkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKworCQkJCQlyZmNvbW1fZGxjX2xvY2soZCk7CisJCQkJCWQtPnN0YXRlID0gQlRfQ09OTkVDVDI7CisJCQkJCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKKwkJCQkJcmZjb21tX2RsY191bmxvY2soZCk7CisJCQkJfSBlbHNlCisJCQkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOwogCQkJfQogCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKSkgewpAQCAtMTczNCw2ICsxNzc2LDkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKHRlc3RfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICh0ZXN0X2JpdChSRkNPTU1fVFhfVEhST1RUTEVELCAmcy0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKQEAgLTE4NzYsNiArMTkyMSw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBiYSk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSBodG9icyhSRkNPTU1fUFNNKTsKKwlhZGRyLmwyX2NpZCAgICA9IDA7CiAJZXJyID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoZXJyIDwgMCkgewogCQlCVF9FUlIoIkJpbmQgZmFpbGVkICVkIiwgZXJyKTsKQEAgLTE5NDcsNDIgKzE5OTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByZmNvbW1fYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMpCi17Ci0Jc3RydWN0IHJmY29tbV9zZXNzaW9uICpzOwotCXN0cnVjdCByZmNvbW1fZGxjICpkOwotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuOwotCi0JQlRfREJHKCJjb25uICVwIHN0YXR1cyAweCUwMngiLCBjb25uLCBzdGF0dXMpOwotCi0JcyA9IHJmY29tbV9zZXNzaW9uX2dldCgmY29ubi0+aGRldi0+YmRhZGRyLCAmY29ubi0+ZHN0KTsKLQlpZiAoIXMpCi0JCXJldHVybjsKLQotCXJmY29tbV9zZXNzaW9uX2hvbGQocyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnMtPmRsY3MpIHsKLQkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwotCi0JCWlmICgoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpICYmCi0JCQkJIShjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgJiYgIXN0YXR1cykKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXN0YXR1cykKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfQUNDRVBULCAmZC0+ZmxhZ3MpOwotCQllbHNlCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKLQl9Ci0KLQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7Ci0KLQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOwotfQotCi1zdGF0aWMgdm9pZCByZmNvbW1fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCitzdGF0aWMgdm9pZCByZmNvbW1fc2VjdXJpdHlfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQogewogCXN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqczsKIAlzdHJ1Y3QgcmZjb21tX2RsYyAqZDsKQEAgLTE5OTksMTggKzIwMTAsMjkgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJnMtPmRsY3MpIHsKIAkJZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCi0JCWlmICgoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpICYmCi0JCQkJCShkLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKLQkJCQkJCWQtPnN0YXRlID09IEJUX0NPTkZJRykgJiYKLQkJCQkJCSFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7Ci0JCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKLQkJCWNvbnRpbnVlOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKSkgeworCQkJcmZjb21tX2RsY19jbGVhcl90aW1lcihkKTsKKwkJCWlmIChzdGF0dXMgfHwgZW5jcnlwdCA9PSAweDAwKSB7CisJCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoZC0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEICYmICFzdGF0dXMgJiYgZW5jcnlwdCA9PSAweDAwKSB7CisJCQlpZiAoZC0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkgeworCQkJCXNldF9iaXQoUkZDT01NX1NFQ19QRU5ESU5HLCAmZC0+ZmxhZ3MpOworCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChkLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJCV9fcmZjb21tX2RsY19jbG9zZShkLCBFQ09OTlJFRlVTRUQpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQl9CiAKIAkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghc3RhdHVzICYmIGVuY3J5cHQpCisJCWlmICghc3RhdHVzKQogCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9BQ0NFUFQsICZkLT5mbGFncyk7CiAJCWVsc2UKIAkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOwpAQCAtMjAyMyw4ICsyMDQ1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBoY2lfY2IgcmZjb21tX2NiID0gewogCS5uYW1lCQk9ICJSRkNPTU0iLAotCS5hdXRoX2NmbQk9IHJmY29tbV9hdXRoX2NmbSwKLQkuZW5jcnlwdF9jZm0JPSByZmNvbW1fZW5jcnlwdF9jZm0KKwkuc2VjdXJpdHlfY2ZtCT0gcmZjb21tX3NlY3VyaXR5X2NmbQogfTsKIAogc3RhdGljIHNzaXplX3QgcmZjb21tX2RsY19zeXNmc19zaG93KHN0cnVjdCBjbGFzcyAqZGV2LCBjaGFyICpidWYpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggZDNmYzZmYy4uN2Y0ODI3OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtMjYxLDEyICsyNjEsMTkgQEAKIAogCWlmIChwYXJlbnQpIHsKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7Ci0JCXBpLT5saW5rX21vZGUgPSByZmNvbW1fcGkocGFyZW50KS0+bGlua19tb2RlOworCQlwaS0+ZGxjLT5kZWZlcl9zZXR1cCA9IGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwOworCisJCXBpLT5zZWNfbGV2ZWwgPSByZmNvbW1fcGkocGFyZW50KS0+c2VjX2xldmVsOworCQlwaS0+cm9sZV9zd2l0Y2ggPSByZmNvbW1fcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CiAJfSBlbHNlIHsKLQkJcGktPmxpbmtfbW9kZSA9IDA7CisJCXBpLT5kbGMtPmRlZmVyX3NldHVwID0gMDsKKworCQlwaS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlwaS0+cm9sZV9zd2l0Y2ggPSAwOwogCX0KIAotCXBpLT5kbGMtPmxpbmtfbW9kZSA9IHBpLT5saW5rX21vZGU7CisJcGktPmRsYy0+c2VjX2xldmVsID0gcGktPnNlY19sZXZlbDsKKwlwaS0+ZGxjLT5yb2xlX3N3aXRjaCA9IHBpLT5yb2xlX3N3aXRjaDsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byByZmNvbW1fcHJvdG8gPSB7CkBAIC00MDYsNyArNDEzLDggQEAKIAliYWNweSgmYnRfc2soc2spLT5kc3QsICZzYS0+cmNfYmRhZGRyKTsKIAlyZmNvbW1fcGkoc2spLT5jaGFubmVsID0gc2EtPnJjX2NoYW5uZWw7CiAKLQlkLT5saW5rX21vZGUgPSByZmNvbW1fcGkoc2spLT5saW5rX21vZGU7CisJZC0+c2VjX2xldmVsID0gcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsOworCWQtPnJvbGVfc3dpdGNoID0gcmZjb21tX3BpKHNrKS0+cm9sZV9zd2l0Y2g7CiAKIAllcnIgPSByZmNvbW1fZGxjX29wZW4oZCwgJmJ0X3NrKHNrKS0+c3JjLCAmc2EtPnJjX2JkYWRkciwgc2EtPnJjX2NoYW5uZWwpOwogCWlmICghZXJyKQpAQCAtNTU0LDYgKzU2Miw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgc2VudCA9IDA7CiAKKwlpZiAodGVzdF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVOT1RDT05OOworCiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC01NzAsOCArNTgxLDExIEBACiAKIAkJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgc2l6ZSArIFJGQ09NTV9TS0JfUkVTRVJWRSwKIAkJCQltc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7Ci0JCWlmICghc2tiKQorCQlpZiAoIXNrYikgeworCQkJaWYgKHNlbnQgPT0gMCkKKwkJCQlzZW50ID0gZXJyOwogCQkJYnJlYWs7CisJCX0KIAkJc2tiX3Jlc2VydmUoc2tiLCBSRkNPTU1fU0tCX0hFQURfUkVTRVJWRSk7CiAKIAkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZy0+bXNnX2lvdiwgc2l6ZSk7CkBAIC02MzAsMTAgKzY0NCwxNiBAQAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmZjb21tX2RsYyAqZCA9IHJmY29tbV9waShzayktPmRsYzsKIAlpbnQgZXJyID0gMDsKIAlzaXplX3QgdGFyZ2V0LCBjb3BpZWQgPSAwOwogCWxvbmcgdGltZW87CiAKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC03MTAsNyArNzMwLDcgQEAKIAlyZXR1cm4gY29waWVkID8gOiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQorc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlpbnQgZXJyID0gMDsKQEAgLTcyNyw3ICs3NDcsMTQ0IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJmY29tbV9waShzayktPmxpbmtfbW9kZSA9IG9wdDsKKwkJaWYgKG9wdCAmIFJGQ09NTV9MTV9BVVRIKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlpZiAob3B0ICYgUkZDT01NX0xNX0VOQ1JZUFQpCisJCQlyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CisJCWlmIChvcHQgJiBSRkNPTU1fTE1fU0VDVVJFKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfSElHSDsKKworCQlyZmNvbW1fcGkoc2spLT5yb2xlX3N3aXRjaCA9IChvcHQgJiBSRkNPTU1fTE1fTUFTVEVSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9SRkNPTU0pCisJCXJldHVybiByZmNvbW1fc29ja19zZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihzZWMpLCBvcHRsZW4pOworCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikgJnNlYywgb3B0dmFsLCBsZW4pKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2VjLmxldmVsID4gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gc2VjLmxldmVsOworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGdldF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IG9wdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZmNvbW1fc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrICpsMmNhcF9zazsKKwlzdHJ1Y3QgcmZjb21tX2Nvbm5pbmZvIGNpbmZvOworCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJGQ09NTV9MTToKKwkJc3dpdGNoIChyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CisJCQlvcHQgPSBSRkNPTU1fTE1fQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCW9wdCA9IFJGQ09NTV9MTV9BVVRIIHwgUkZDT01NX0xNX0VOQ1JZUFQ7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJb3B0ID0gUkZDT01NX0xNX0FVVEggfCBSRkNPTU1fTE1fRU5DUllQVCB8CisJCQkJCQkJUkZDT01NX0xNX1NFQ1VSRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJmY29tbV9waShzayktPnJvbGVfc3dpdGNoKQorCQkJb3B0IHw9IFJGQ09NTV9MTV9NQVNURVI7CisKKwkJaWYgKHB1dF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBSRkNPTU1fQ09OTklORk86CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmCisJCQkJCSFyZmNvbW1fcGkoc2spLT5kbGMtPmRlZmVyX3NldHVwKSB7CisJCQllcnIgPSAtRU5PVENPTk47CisJCQlicmVhazsKKwkJfQorCisJCWwyY2FwX3NrID0gcmZjb21tX3BpKHNrKS0+ZGxjLT5zZXNzaW9uLT5zb2NrLT5zazsKKworCQljaW5mby5oY2lfaGFuZGxlID0gbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+ZGV2X2NsYXNzLCAzKTsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGNpbmZvKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmY2luZm8sIGxlbikpCisJCQllcnIgPSAtRUZBVUxUOworCiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTc0MiwzNiArODk5LDQ0IEBACiBzdGF0aWMgaW50IHJmY29tbV9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBzb2NrICpsMmNhcF9zazsKLQlzdHJ1Y3QgcmZjb21tX2Nvbm5pbmZvIGNpbmZvOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CiAJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKKwlpZiAobGV2ZWwgPT0gU09MX1JGQ09NTSkKKwkJcmV0dXJuIHJmY29tbV9zb2NrX2dldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlsb2NrX3NvY2soc2spOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2FzZSBSRkNPTU1fTE06Ci0JCWlmIChwdXRfdXNlcihyZmNvbW1fcGkoc2spLT5saW5rX21vZGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCi0JCQllcnIgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgUkZDT01NX0NPTk5JTkZPOgotCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkgewotCQkJZXJyID0gLUVOT1RDT05OOworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfc2sgPSByZmNvbW1fcGkoc2spLT5kbGMtPnNlc3Npb24tPnNvY2stPnNrOworCQlzZWMubGV2ZWwgPSByZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWw7CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yoc2VjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmc2VjLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKIAotCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGNpbmZvKSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmY2luZm8sIGxlbikpCisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHV0X3VzZXIoYnRfc2soc2spLT5kZWZlcl9zZXR1cCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKIAkJCWVyciA9IC1FRkFVTFQ7CiAKIAkJYnJlYWs7CkBAIC04ODgsNiArMTA1MywxMCBAQAogCiBkb25lOgogCWJoX3VubG9ja19zb2NrKHBhcmVudCk7CisKKwlpZiAoYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXApCisJCXBhcmVudC0+c2tfc3RhdGVfY2hhbmdlKHBhcmVudCk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGQwMzBjNjkuLmFiZGM3MDMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC03MzEsNyArNzMxLDggQEAKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2LT53YWl0LCAmd2FpdCk7CiAKIAlpZiAoZXJyID09IDApCi0JCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSk7CisJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSwKKwkJCSAgICBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVCk7CiAKIAlyZmNvbW1fdHR5X2NvcHlfcGVuZGluZyhkZXYpOwogCkBAIC03NTEsNyArNzUyLDcgQEAKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPm9wZW5lZCkpIHsKIAkJaWYgKGRldi0+dHR5X2Rldi0+cGFyZW50KQotCQkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCBOVUxMKTsKKwkJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKIAogCQkvKiBDbG9zZSBETEMgYW5kIGRldHRhY2ggVFRZICovCiAJCXJmY29tbV9kbGNfY2xvc2UoZGV2LT5kbGMsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggNDZmZDhiZi4uNTFhZTBjMyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAllbHNlCiAJCXR5cGUgPSBTQ09fTElOSzsKIAotCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCB0eXBlLCBkc3QsIEhDSV9BVF9OT19CT05ESU5HKTsKKwloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgdHlwZSwgZHN0LCBCVF9TRUNVUklUWV9MT1csIEhDSV9BVF9OT19CT05ESU5HKTsKIAlpZiAoIWhjb24pCiAJCWdvdG8gZG9uZTsKIApAQCAtNjY4LDcgKzY2OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzY29fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgc2NvX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc2NvX29wdGlvbnMgb3B0czsKQEAgLTcyMyw2ICs3MjMsMzEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHNjb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBsZW4sIGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGxldmVsID09IFNPTF9TQ08pCisJCXJldHVybiBzY29fc29ja19nZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBzY29fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC04MzIsMTAgKzg1NywzMCBAQAogLyogLS0tLS0gU0NPIGludGVyZmFjZSB3aXRoIGxvd2VyIGxheWVyIChIQ0kpIC0tLS0tICovCiBzdGF0aWMgaW50IHNjb19jb25uZWN0X2luZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKQogeworCXJlZ2lzdGVyIHN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlpbnQgbG0gPSAwOworCisJaWYgKHR5cGUgIT0gU0NPX0xJTksgJiYgdHlwZSAhPSBFU0NPX0xJTkspCisJCXJldHVybiAwOworCiAJQlRfREJHKCJoZGV2ICVzLCBiZGFkZHIgJXMiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGJkYWRkcikpOwogCi0JLyogQWx3YXlzIGFjY2VwdCBjb25uZWN0aW9uICovCi0JcmV0dXJuIEhDSV9MTV9BQ0NFUFQ7CisJLyogRmluZCBsaXN0ZW5pbmcgc29ja2V0cyAqLworCXJlYWRfbG9jaygmc2NvX3NrX2xpc3QubG9jayk7CisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzY29fc2tfbGlzdC5oZWFkKSB7CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKQorCQkJY29udGludWU7CisKKwkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsICZoZGV2LT5iZGFkZHIpIHx8CisJCQkJIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpIHsKKwkJCWxtIHw9IEhDSV9MTV9BQ0NFUFQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmc2NvX3NrX2xpc3QubG9jayk7CisKKwlyZXR1cm4gbG07CiB9CiAKIHN0YXRpYyBpbnQgc2NvX2Nvbm5lY3RfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCBzdGF0dXMpCkBAIC04NTcsNyArOTAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY29fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uLCBfX3U4IHJlYXNvbikKK3N0YXRpYyBpbnQgc2NvX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCByZWFzb24pCiB7CiAJQlRfREJHKCJoY29uICVwIHJlYXNvbiAlZCIsIGhjb24sIHJlYXNvbik7CiAKQEAgLTk0MCw3ICs5ODUsNyBAQAogCS5pZAkJPSBIQ0lfUFJPVE9fU0NPLAogCS5jb25uZWN0X2luZAk9IHNjb19jb25uZWN0X2luZCwKIAkuY29ubmVjdF9jZm0JPSBzY29fY29ubmVjdF9jZm0sCi0JLmRpc2Nvbm5faW5kCT0gc2NvX2Rpc2Nvbm5faW5kLAorCS5kaXNjb25uX2NmbQk9IHNjb19kaXNjb25uX2NmbSwKIAkucmVjdl9zY29kYXRhCT0gc2NvX3JlY3Zfc2NvZGF0YQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jCmluZGV4IDcyN2M1YzUuLjhhOTY2NzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX2lmLmMKQEAgLTQyNiw3ICs0MjYsNiBAQAogZXJyMToKIAlrb2JqZWN0X2RlbCgmcC0+a29iaik7CiBlcnIwOgotCWtvYmplY3RfcHV0KCZwLT5rb2JqKTsKIAlkZXZfc2V0X3Byb21pc2N1aXR5KGRldiwgLTEpOwogcHV0X2JhY2s6CiAJZGV2X3B1dChkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggY2Y3NTRhYy4uMzk1M2FjNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGZha2VfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLnVwZGF0ZV9wbXR1ID0JCWZha2VfdXBkYXRlX3BtdHUsCiAJLmVudHJpZXMgPQkJQVRPTUlDX0lOSVQoMCksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBiYTdiZTE5Li5mY2ZmYjNmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtOTgsNyArOTgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9MSU5LLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCmluZGV4IGQ0NGNiZjguLmE5NGYzY2MgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgZWJ0X2xvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAJCT0gImVidF9sb2ciLAogCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKaW5kZXggMmM2ZDY4Mi4uMTMzZWVhZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCkBAIC0yNzksMjEgKzI3OSwyMSBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF91bG9nX2xvZ2dlciA9IHsKLQkubmFtZQkJPSAidWxvZyIsCitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBlYnRfdWxvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiZWJ0X3Vsb2ciLAogCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZWJ0X3Vsb2dfaW5pdCh2b2lkKQogewotCWJvb2wgcmV0ID0gdHJ1ZTsKKwlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKG5sYnVmc2l6ID49IDEyOCoxMDI0KSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiZWJ0X3Vsb2c6IE5ldGxpbmsgYnVmZmVyIGhhcyB0byBiZSA8PSAxMjhrQiwiCiAJCSAgICAgICAiIHBsZWFzZSB0cnkgYSBzbWFsbGVyIG5sYnVmc2l6IHBhcmFtZXRlci5cbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGluaXRpYWxpemUgdWxvZ19idWZmZXJzICovCkBAIC0zMDgsMTIgKzMwOCwxMiBAQAogCWlmICghZWJ0dWxvZ25sKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUgIjogb3V0IG9mIG1lbW9yeSB0cnlpbmcgdG8gIgogCQkgICAgICAgImNhbGwgbmV0bGlua19rZXJuZWxfY3JlYXRlXG4iKTsKLQkJcmV0ID0gZmFsc2U7Ci0JfSBlbHNlIGlmICh4dF9yZWdpc3Rlcl90YXJnZXQoJmVidF91bG9nX3RnX3JlZykgIT0gMCkgeworCQlyZXQgPSAtRU5PTUVNOworCX0gZWxzZSBpZiAoKHJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmZWJ0X3Vsb2dfdGdfcmVnKSkgIT0gMCkgewogCQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGVidHVsb2dubCk7CiAJfQogCi0JaWYgKHJldCkKKwlpZiAocmV0ID09IDApCiAJCW5mX2xvZ19yZWdpc3RlcihORlBST1RPX0JSSURHRSwgJmVidF91bG9nX2xvZ2dlcik7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKaW5kZXggODYwNGRmYy4uYzc1MTExMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCkBAIC00Niw3ICs0Niw2IEBACiAJLm5hbWUJCT0gImJyb3V0ZSIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IDEgPDwgTkZfQlJfQlJPVVRJTkcsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGJyb3V0ZV90YWJsZS5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCmluZGV4IDJiMmU4MDQuLmE1ZWVhNzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX2ZpbHRlci5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCmluZGV4IDNmZTFhZTguLjYwMjRjNTUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJuYXQiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX25hdC5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IGZhNDE3Y2EuLjU0N2JhZmMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtMjczLDggKzI3Myw3IEBACiAJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAKIAlpZiAoZXJyKSB7Ci0JCWlmIChuZXdza2IpCi0JCQlrZnJlZV9za2IobmV3c2tiKTsKKwkJa2ZyZWVfc2tiKG5ld3NrYik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC04MjgsNyArODI3LDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGNhbl9wYWNrZXQgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQ0FOKSwKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NBTiksCiAJLmRldiAgPSBOVUxMLAogCS5mdW5jID0gY2FuX3JjdiwKIH07CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCAwNzAzY2JhLi42YWExNTRlIDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTY0OCw2ICs2NDgsOSBAQAogCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIHNpemUpLCBtc2ctPm1zZ19pb3YsIHNpemUpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGZyZWVfc2tiOworCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssIHNrYl90eChza2IpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmcmVlX3NrYjsKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnNrICA9IHNrOwogCmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmMKaW5kZXggYTNhMmJhMC4uOGQ3MzkwNSAxMDA2NDQKLS0tIGEvbmV0L2NvbXBhdC5jCisrKyBiL25ldC9jb21wYXQuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiBpbnQgcHV0X2Ntc2dfY29tcGF0KHN0cnVjdCBtc2doZHIgKmttc2csIGludCBsZXZlbCwgaW50IHR5cGUsIGludCBsZW4sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNvbXBhdF90aW1ldmFsIGN0djsKLQlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGN0czsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIGN0c1szXTsKIAlzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgX191c2VyICpjbSA9IChzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgX191c2VyICopIGttc2ctPm1zZ19jb250cm9sOwogCXN0cnVjdCBjb21wYXRfY21zZ2hkciBjbWhkcjsKIAlpbnQgY21sZW47CkBAIC0yMzMsMTIgKzIzMywxNyBAQAogCQlkYXRhID0gJmN0djsKIAkJbGVuID0gc2l6ZW9mKGN0dik7CiAJfQotCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUICYmIHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TKSB7CisJaWYgKGxldmVsID09IFNPTF9TT0NLRVQgJiYKKwkgICAgKHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TIHx8IHR5cGUgPT0gU0NNX1RJTUVTVEFNUElORykpIHsKKwkJaW50IGNvdW50ID0gdHlwZSA9PSBTQ01fVElNRVNUQU1QTlMgPyAxIDogMzsKKwkJaW50IGk7CiAJCXN0cnVjdCB0aW1lc3BlYyAqdHMgPSAoc3RydWN0IHRpbWVzcGVjICopZGF0YTsKLQkJY3RzLnR2X3NlYyA9IHRzLT50dl9zZWM7Ci0JCWN0cy50dl9uc2VjID0gdHMtPnR2X25zZWM7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQljdHNbaV0udHZfc2VjID0gdHNbaV0udHZfc2VjOworCQkJY3RzW2ldLnR2X25zZWMgPSB0c1tpXS50dl9uc2VjOworCQl9CiAJCWRhdGEgPSAmY3RzOwotCQlsZW4gPSBzaXplb2YoY3RzKTsKKwkJbGVuID0gc2l6ZW9mKGN0c1swXSkgKiBjb3VudDsKIAl9CiAKIAljbWxlbiA9IENNU0dfQ09NUEFUX0xFTihsZW4pOwpAQCAtNDU1LDcgKzQ2MCw3IEBACiAJc3RydWN0IHRpbWV2YWwgdHY7CiAKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2stPnNrX3N0YW1wKTsKIAlpZiAodHYudHZfc2VjID09IC0xKQogCQlyZXR1cm4gZXJyOwpAQCAtNDc5LDcgKzQ4NCw3IEBACiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHMgPSBrdGltZV90b190aW1lc3BlYyhzay0+c2tfc3RhbXApOwogCWlmICh0cy50dl9zZWMgPT0gLTEpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDI2YTM3Y2IuLjc5NmY0NmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xNywzICsxNyw2IEBACiBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gdXNlcl9kbWEubwogb2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgKz0gZmliX3J1bGVzLm8KK29iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gbmV0LXRyYWNlcy5vCitvYmotJChDT05GSUdfTkVUX0RST1BfTU9OSVRPUikgKz0gZHJvcF9tb25pdG9yLm8KKwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggNWUyYWMwYy4uZDBkZTY0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlza19tZW1fcmVjbGFpbV9wYXJ0aWFsKHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBmMTEyOTcwLi41MmZlYTViIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTQ1Nyw3ICsxNDU3LDkgQEAKIAkJKChmZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgJiYKIAkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgfHwKIAkJKChmZWF0dXJlcyAmIE5FVElGX0ZfSVBWNl9DU1VNKSAmJgotCQkgcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKTsKKwkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB8fAorCQkoKGZlYXR1cmVzICYgTkVUSUZfRl9GQ09FX0NSQykgJiYKKwkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0ZDT0UpKSk7CiB9CiAKIHN0YXRpYyBib29sIGRldl9jYW5fY2hlY2tzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE2NjgsOCArMTY3MCw4IEBACiAJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisJaW50IHJjOwogCi0JcHJlZmV0Y2goJmRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQpOwogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQogCQkJZGV2X3F1ZXVlX3htaXRfbml0KHNrYiwgZGV2KTsKQEAgLTE2ODEsMTMgKzE2ODMsMjcgQEAKIAkJCQlnb3RvIGdzbzsKIAkJfQogCi0JCXJldHVybiBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJLyoKKwkJICogVE9ETzogaWYgc2tiX29ycGhhbigpIHdhcyBjYWxsZWQgYnkKKwkJICogZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSAoZm9yIGV4YW1wbGUsIHRoZSB1bm1vZGlmaWVkCisJCSAqIGlnYiBkcml2ZXIgZG9lcyB0aGF0OyBibngyIGRvZXNuJ3QpLCB0aGVuCisJCSAqIHNrYl90eF9zb2Z0d2FyZV90aW1lc3RhbXAoKSB3aWxsIGJlIHVuYWJsZSB0byBzZW5kCisJCSAqIGJhY2sgdGhlIHRpbWUgc3RhbXAuCisJCSAqCisJCSAqIEhvdyBjYW4gdGhpcyBiZSBwcmV2ZW50ZWQ/IEFsd2F5cyBjcmVhdGUgYW5vdGhlcgorCQkgKiByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCBiZWZvcmUgY2FsbGluZworCQkgKiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpPyBQcmV2ZW50IHRoYXQgc2tiX29ycGhhbigpCisJCSAqIGRvZXMgYW55dGhpbmcgaW4gZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSBieSBjbGVhcmluZworCQkgKiB0aGUgc2tiIGRlc3RydWN0b3IgYmVmb3JlIHRoZSBjYWxsIGFuZCByZXN0b3JpbmcgaXQKKwkJICogYWZ0ZXJ3YXJkcywgdGhlbiBkb2luZyB0aGUgc2tiX29ycGhhbigpIG91cnNlbHZlcz8KKwkJICovCisJCXJldHVybiByYzsKIAl9CiAKIGdzbzoKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiLT5uZXh0OwotCQlpbnQgcmM7CiAKIAkJc2tiLT5uZXh0ID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CkBAIC0xNzA4LDU5ICsxNzI0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgc2ltcGxlX3R4X2hhc2hybmQ7Ci1zdGF0aWMgaW50IHNpbXBsZV90eF9oYXNocm5kX2luaXRpYWxpemVkID0gMDsKK3N0YXRpYyB1MzIgc2tiX3R4X2hhc2hybmQ7CiAKLXN0YXRpYyB1MTYgc2ltcGxlX3R4X2hhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3UxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiBhZGRyMSwgYWRkcjIsIHBvcnRzOwotCXUzMiBoYXNoLCBpaGw7Ci0JdTggaXBfcHJvdG8gPSAwOworCXUzMiBoYXNoOwogCi0JaWYgKHVubGlrZWx5KCFzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmc2ltcGxlX3R4X2hhc2hybmQsIDQpOwotCQlzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDE7Ci0JfQorCWlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkgeworCQloYXNoID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOworCX0gZWxzZSBpZiAoc2tiLT5zayAmJiBza2ItPnNrLT5za19oYXNoKSB7CisJCWhhc2ggPSBza2ItPnNrLT5za19oYXNoOworCX0gZWxzZQorCQloYXNoID0gc2tiLT5wcm90b2NvbDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlpZiAoIShpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRiB8IElQX09GRlNFVCkpKQotCQkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7Ci0JCWFkZHIxID0gaXBfaGRyKHNrYiktPnNhZGRyOwotCQlhZGRyMiA9IGlwX2hkcihza2IpLT5kYWRkcjsKLQkJaWhsID0gaXBfaGRyKHNrYiktPmlobDsKLQkJYnJlYWs7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKLQkJaXBfcHJvdG8gPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOwotCQlhZGRyMSA9IGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIzMlszXTsKLQkJYWRkcjIgPSBpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzJbM107Ci0JCWlobCA9ICg0MCA+PiAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlzd2l0Y2ggKGlwX3Byb3RvKSB7Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19EQ0NQOgotCWNhc2UgSVBQUk9UT19FU1A6Ci0JY2FzZSBJUFBST1RPX0FIOgotCWNhc2UgSVBQUk9UT19TQ1RQOgotCWNhc2UgSVBQUk9UT19VRFBMSVRFOgotCQlwb3J0cyA9ICooKHUzMiAqKSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyAoaWhsICogNCkpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwb3J0cyA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWhhc2ggPSBqaGFzaF8zd29yZHMoYWRkcjEsIGFkZHIyLCBwb3J0cywgc2ltcGxlX3R4X2hhc2hybmQpOworCWhhc2ggPSBqaGFzaF8xd29yZChoYXNoLCBza2JfdHhfaGFzaHJuZCk7CiAKIAlyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+IDMyKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3R4X2hhc2gpOwogCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3BpY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3NzEsNyArMTc1Miw3IEBACiAJaWYgKG9wcy0+bmRvX3NlbGVjdF9xdWV1ZSkKIAkJcXVldWVfaW5kZXggPSBvcHMtPm5kb19zZWxlY3RfcXVldWUoZGV2LCBza2IpOwogCWVsc2UgaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKLQkJcXVldWVfaW5kZXggPSBzaW1wbGVfdHhfaGFzaChkZXYsIHNrYik7CisJCXF1ZXVlX2luZGV4ID0gc2tiX3R4X2hhc2goZGV2LCBza2IpOwogCiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWVfaW5kZXgpOwogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcXVldWVfaW5kZXgpOwpAQCAtMjI5Nyw2ICsyMjc4LDggQEAKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKKwlza2Jfb3JwaGFuKHNrYik7CisKIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKIAkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewpAQCAtMjM2Niw3ICsyMzQ5LDYgQEAKIAogb3V0OgogCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSAwOwotCV9fc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCkBAIC0yMzgwLDIwICsyMzYyLDQwIEBACiAJCW5hcGlfZ3JvX2NvbXBsZXRlKHNrYik7CiAJfQogCisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX2ZsdXNoKTsKIAordm9pZCAqc2tiX2dyb19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7CisKKwlobGVuICs9IG9mZnNldDsKKwlpZiAoaGxlbiA8PSBza2JfaGVhZGxlbihza2IpKQorCQlyZXR1cm4gc2tiLT5kYXRhICsgb2Zmc2V0OworCisJaWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIHx8CisJCSAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIDw9CisJCSAgICAgaGxlbiAtIHNrYl9oZWFkbGVuKHNrYikgfHwKKwkJICAgICBQYWdlSGlnaE1lbShza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpKSkKKwkJcmV0dXJuIHBza2JfbWF5X3B1bGwoc2tiLCBobGVuKSA/IHNrYi0+ZGF0YSArIG9mZnNldCA6IE5VTEw7CisKKwlyZXR1cm4gcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSkgKworCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICsKKwkgICAgICAgb2Zmc2V0IC0gc2tiX2hlYWRsZW4oc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX2dyb19oZWFkZXIpOworCiBpbnQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnBwID0gTlVMTDsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlOwogCV9fYmUxNiB0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdOwotCWludCBjb3VudCA9IDA7CiAJaW50IHNhbWVfZmxvdzsKIAlpbnQgbWFjX2xlbjsKLQlpbnQgZnJlZTsKKwlpbnQgcmV0OwogCiAJaWYgKCEoc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pKQogCQlnb3RvIG5vcm1hbDsKQEAgLTI0MDMsMzAgKzI0MDUsMTYgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgaGVhZCwgbGlzdCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqcDsKLQogCQlpZiAocHR5cGUtPnR5cGUgIT0gdHlwZSB8fCBwdHlwZS0+ZGV2IHx8ICFwdHlwZS0+Z3JvX3JlY2VpdmUpCiAJCQljb250aW51ZTsKIAotCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCQltYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKIAkJc2tiLT5tYWNfbGVuID0gbWFjX2xlbjsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+c2FtZV9mbG93ID0gMDsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggPSAwOwogCQlOQVBJX0dST19DQihza2IpLT5mcmVlID0gMDsKIAotCQlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCWNvdW50Kys7Ci0KLQkJCWlmICghTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHAtPm1hY19sZW4gIT0gbWFjX2xlbiB8fAotCQkJICAgIG1lbWNtcChza2JfbWFjX2hlYWRlcihwKSwgc2tiX21hY19oZWFkZXIoc2tiKSwKLQkJCQkgICBtYWNfbGVuKSkKLQkJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKLQkJfQotCiAJCXBwID0gcHR5cGUtPmdyb19yZWNlaXZlKCZuYXBpLT5ncm9fbGlzdCwgc2tiKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjQzNiw3ICsyNDI0LDcgQEAKIAkJZ290byBub3JtYWw7CiAKIAlzYW1lX2Zsb3cgPSBOQVBJX0dST19DQihza2IpLT5zYW1lX2Zsb3c7Ci0JZnJlZSA9IE5BUElfR1JPX0NCKHNrYiktPmZyZWU7CisJcmV0ID0gTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZSA/IEdST19NRVJHRURfRlJFRSA6IEdST19NRVJHRUQ7CiAKIAlpZiAocHApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSAqcHA7CkBAIC0yNDQ0LDI3ICsyNDMyLDM1IEBACiAJCSpwcCA9IG5za2ItPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOwogCQluYXBpX2dyb19jb21wbGV0ZShuc2tiKTsKLQkJY291bnQtLTsKKwkJbmFwaS0+Z3JvX2NvdW50LS07CiAJfQogCiAJaWYgKHNhbWVfZmxvdykKIAkJZ290byBvazsKIAotCWlmIChOQVBJX0dST19DQihza2IpLT5mbHVzaCB8fCBjb3VudCA+PSBNQVhfR1JPX1NLQlMpIHsKLQkJX19za2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CisJaWYgKE5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHx8IG5hcGktPmdyb19jb3VudCA+PSBNQVhfR1JPX1NLQlMpCiAJCWdvdG8gbm9ybWFsOwotCX0KIAorCW5hcGktPmdyb19jb3VudCsrOwogCU5BUElfR1JPX0NCKHNrYiktPmNvdW50ID0gMTsKLQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gc2tiLT5sZW47CisJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHNrYl9ncm9fbGVuKHNrYik7CiAJc2tiLT5uZXh0ID0gbmFwaS0+Z3JvX2xpc3Q7CiAJbmFwaS0+Z3JvX2xpc3QgPSBza2I7CisJcmV0ID0gR1JPX0hFTEQ7CisKK3B1bGw6CisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpKSB7CisJCWlmIChuYXBpLT5ncm9fbGlzdCA9PSBza2IpCisJCQluYXBpLT5ncm9fbGlzdCA9IHNrYi0+bmV4dDsKKwkJcmV0ID0gR1JPX0RST1A7CisJfQogCiBvazoKLQlyZXR1cm4gZnJlZTsKKwlyZXR1cm4gcmV0OwogCiBub3JtYWw6Ci0JcmV0dXJuIC0xOworCXJldCA9IEdST19OT1JNQUw7CisJZ290byBwdWxsOwogfQogRVhQT1JUX1NZTUJPTChkZXZfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNDcyLDI5ICsyNDY4LDQ0IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnA7CiAKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gR1JPX05PUk1BTDsKKwogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMTsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9ICFjb21wYXJlX2V0aGVyX2hlYWRlcigKKwkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogfQogCi1pbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgbmFwaV9za2JfZmluaXNoKGludCByZXQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKIAotCXN3aXRjaCAoX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYikpIHsKLQljYXNlIC0xOgorCXN3aXRjaCAocmV0KSB7CisJY2FzZSBHUk9fTk9STUFMOgogCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAotCWNhc2UgMToKKwljYXNlIEdST19EUk9QOgorCQllcnIgPSBORVRfUlhfRFJPUDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEdST19NRVJHRURfRlJFRToKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChuYXBpX3NrYl9maW5pc2gpOworCitpbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKworCXJldHVybiBuYXBpX3NrYl9maW5pc2goX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYiksIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNTEyLDYgKzI1MjMsOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGktPnNrYjsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgaTsKIAogCW5hcGktPnNrYiA9IE5VTEw7CiAKQEAgLTI1MjQsMjAgKzI1MzgsMzYgQEAKIAl9CiAKIAlCVUdfT04oaW5mby0+bnJfZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKTsKKwlmcmFnID0gJmluZm8tPmZyYWdzW2luZm8tPm5yX2ZyYWdzIC0gMV07CisKKwlmb3IgKGkgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpIDwgaW5mby0+bnJfZnJhZ3M7IGkrKykgeworCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkgICBmcmFnLT5zaXplKTsKKwkJZnJhZysrOworCX0KIAlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gaW5mby0+bnJfZnJhZ3M7Ci0JbWVtY3B5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsIGluZm8tPmZyYWdzLCBzaXplb2YoaW5mby0+ZnJhZ3MpKTsKIAogCXNrYi0+ZGF0YV9sZW4gPSBpbmZvLT5sZW47CiAJc2tiLT5sZW4gKz0gaW5mby0+bGVuOwogCXNrYi0+dHJ1ZXNpemUgKz0gaW5mby0+bGVuOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOworCisJZXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmV0aCkpOworCWlmICghZXRoKSB7CiAJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CiAJCXNrYiA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTsKKworCS8qCisJICogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBvbmx5IHByb3RvY29scyB3ZSBjYXJlIGFib3V0IGRvbid0IHJlcXVpcmUKKwkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UnbGwgZml4IGl0IHVwIHByb3Blcmx5IGF0IHRoZSBlbmQuCisJICovCisJc2tiLT5wcm90b2NvbCA9IGV0aC0+aF9wcm90bzsKIAogCXNrYi0+aXBfc3VtbWVkID0gaW5mby0+aXBfc3VtbWVkOwogCXNrYi0+Y3N1bSA9IGluZm8tPmNzdW07CkBAIC0yNTQ3LDMxICsyNTc3LDQyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ2luZm9fc2tiKTsKIAoraW50IG5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJldCkKK3sKKwlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgR1JPX05PUk1BTDoKKwljYXNlIEdST19IRUxEOgorCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuYXBpLT5kZXYpOworCisJCWlmIChyZXQgPT0gR1JPX05PUk1BTCkKKwkJCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCXNrYl9ncm9fcHVsbChza2IsIC1FVEhfSExFTik7CisJCWJyZWFrOworCisJY2FzZSBHUk9fRFJPUDoKKwkJZXJyID0gTkVUX1JYX0RST1A7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHUk9fTUVSR0VEX0ZSRUU6CisJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ3NfZmluaXNoKTsKKwogaW50IG5hcGlfZ3JvX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpX2ZyYWdpbmZvX3NrYihuYXBpLCBpbmZvKTsKLQlpbnQgZXJyID0gTkVUX1JYX0RST1A7CiAKIAlpZiAoIXNrYikKLQkJZ290byBvdXQ7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLQlzd2l0Y2ggKF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDA6Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX2ZyYWdzX2ZpbmlzaChuYXBpLCBza2IsIF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9ncm9fZnJhZ3MpOwogCkBAIC0yNTk0LDExICsyNjM1LDkgQEAKIAkJfQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOworCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0gd2hpbGUgKCsrd29yayA8IHF1b3RhICYmIGppZmZpZXMgPT0gc3RhcnRfdGltZSk7CiAKLQluYXBpX2dyb19mbHVzaChuYXBpKTsKLQogCXJldHVybiB3b3JrOwogfQogCkBAIC0yNjUyLDYgKzI2OTEsNyBAQAogCQkgICAgaW50ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCksIGludCB3ZWlnaHQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJm5hcGktPnBvbGxfbGlzdCk7CisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiAJbmFwaS0+c2tiID0gTlVMTDsKIAluYXBpLT5wb2xsID0gcG9sbDsKQEAgLTI2NzEsNyArMjcxMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHQ7CiAKIAlsaXN0X2RlbF9pbml0KCZuYXBpLT5kZXZfbGlzdCk7Ci0Ja2ZyZWUobmFwaS0+c2tiKTsKKwlrZnJlZV9za2IobmFwaS0+c2tiKTsKIAogCWZvciAoc2tiID0gbmFwaS0+Z3JvX2xpc3Q7IHNrYjsgc2tiID0gbmV4dCkgewogCQluZXh0ID0gc2tiLT5uZXh0OwpAQCAtMjY4MCw2ICsyNzIwLDcgQEAKIAl9CiAKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOwogCkBAIC0zOTQ4LDYgKzM5ODksNyBAQAogCQkJICAgIGNtZCA9PSBTSU9DU01JSVJFRyB8fAogCQkJICAgIGNtZCA9PSBTSU9DQlJBRERJRiB8fAogCQkJICAgIGNtZCA9PSBTSU9DQlJERUxJRiB8fAorCQkJICAgIGNtZCA9PSBTSU9DU0hXVFNUQU1QIHx8CiAJCQkgICAgY21kID09IFNJT0NXQU5ERVYpIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCQlpZiAob3BzLT5uZG9fZG9faW9jdGwpIHsKQEAgLTQxMDIsNiArNDE0NCw3IEBACiAJCWNhc2UgU0lPQ0JPTkRDSEFOR0VBQ1RJVkU6CiAJCWNhc2UgU0lPQ0JSQURESUY6CiAJCWNhc2UgU0lPQ0JSREVMSUY6CisJCWNhc2UgU0lPQ1NIV1RTVEFNUDoKIAkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC01MTk4LDYgKzUyNDEsNyBAQAogCQlxdWV1ZS0+YmFja2xvZy5wb2xsID0gcHJvY2Vzc19iYWNrbG9nOwogCQlxdWV1ZS0+YmFja2xvZy53ZWlnaHQgPSB3ZWlnaHRfcDsKIAkJcXVldWUtPmJhY2tsb2cuZ3JvX2xpc3QgPSBOVUxMOworCQlxdWV1ZS0+YmFja2xvZy5ncm9fY291bnQgPSAwOwogCX0KIAogCWRldl9ib290X3BoYXNlID0gMDsKQEAgLTUyMzAsNiArNTI3NCwxNCBAQAogCiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgaW5pdGlhbGl6ZV9oYXNocm5kKHZvaWQpCit7CisJZ2V0X3JhbmRvbV9ieXRlcygmc2tiX3R4X2hhc2hybmQsIHNpemVvZihza2JfdHhfaGFzaHJuZCkpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsX3N5bmMoaW5pdGlhbGl6ZV9oYXNocm5kKTsKKwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfaW5kZXgpOwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X3JlbW92ZV9wYWNrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogTW9uaXRvcmluZyBjb2RlIGZvciBuZXR3b3JrIGRyb3BwZWQgcGFja2V0IGFsZXJ0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorCisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNkZWZpbmUgVFJBQ0VfT04gMQorI2RlZmluZSBUUkFDRV9PRkYgMAorCitzdGF0aWMgdm9pZCBzZW5kX2RtX2FsZXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKTsKKworCisvKgorICogR2xvYmFscywgb3VyIG5ldGxpbmsgc29ja2V0IHBvaW50ZXIKKyAqIGFuZCB0aGUgd29yayBoYW5kbGUgdGhhdCB3aWxsIHNlbmQgdXAKKyAqIG5ldGxpbmsgYWxlcnRzCisgKi8KK3N0cnVjdCBzb2NrICpkbV9zb2NrOworCitzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZG1fYWxlcnRfd29yazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWF0b21pY190IGRtX2hpdF9jb3VudDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzZW5kX3RpbWVyOworfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSA9IHsKKwkuaWQgICAgICAgICAgICAgPSBHRU5MX0lEX0dFTkVSQVRFLAorCS5oZHJzaXplICAgICAgICA9IDAsCisJLm5hbWUgICAgICAgICAgID0gIk5FVF9ETSIsCisJLnZlcnNpb24gICAgICAgID0gMSwKKwkubWF4YXR0ciAgICAgICAgPSBORVRfRE1fQ01EX01BWCwKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhLCBkbV9jcHVfZGF0YSk7CisKK3N0YXRpYyBpbnQgZG1faGl0X2xpbWl0ID0gNjQ7CitzdGF0aWMgaW50IGRtX2RlbGF5ID0gMTsKKworCitzdGF0aWMgdm9pZCByZXNldF9wZXJfY3B1X2RhdGEoc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSkKK3sKKwlzaXplX3QgYWw7CisJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgKm1zZzsKKworCWFsID0gc2l6ZW9mKHN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnKTsKKwlhbCArPSBkbV9oaXRfbGltaXQgKiBzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KTsKKwlkYXRhLT5za2IgPSBnZW5sbXNnX25ldyhhbCwgR0ZQX0tFUk5FTCk7CisJZ2VubG1zZ19wdXQoZGF0YS0+c2tiLCAwLCAwLCAmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHksCisJCQkwLCBORVRfRE1fQ01EX0FMRVJUKTsKKwltc2cgPSBfX25sYV9yZXNlcnZlX25vaGRyKGRhdGEtPnNrYiwgc2l6ZW9mKHN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnKSk7CisJbWVtc2V0KG1zZywgMCwgYWwpOworCWF0b21pY19zZXQoJmRhdGEtPmRtX2hpdF9jb3VudCwgZG1faGl0X2xpbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9kbV9hbGVydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKwkvKgorCSAqIEdyYWIgdGhlIHNrYiB3ZSdyZSBhYm91dCB0byBzZW5kCisJICovCisJc2tiID0gZGF0YS0+c2tiOworCisJLyoKKwkgKiBSZXBsYWNlIGl0IHdpdGggYSBuZXcgb25lCisJICovCisJcmVzZXRfcGVyX2NwdV9kYXRhKGRhdGEpOworCisJLyoKKwkgKiBTaGlwIGl0IQorCSAqLworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgTkVUX0RNX0dSUF9BTEVSVCwgR0ZQX0tFUk5FTCk7CisKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHRpbWVyIGZ1bmN0aW9uIHRvIGRlbGF5IHRoZSBzZW5kaW5nIG9mIGFuIGFsZXJ0CisgKiBpbiB0aGUgZXZlbnQgdGhhdCBtb3JlIGRyb3BzIHdpbGwgYXJyaXZlIGR1cmluZyB0aGUKKyAqIGh5c3RlcmVzaXMgcGVyaW9kLiAgTm90ZSB0aGF0IGl0IG9wZXJhdGVzIHVuZGVyIHRoZSB0aW1lciBpbnRlcnJ1cHQKKyAqIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGhlcmUKKyAqLworc3RhdGljIHZvaWQgc2NoZWRfc2VuZF93b3JrKHVuc2lnbmVkIGxvbmcgdW51c2VkKQoreworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAgJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisJc2NoZWR1bGVfd29yaygmZGF0YS0+ZG1fYWxlcnRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX2tmcmVlX3NrYl9oaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pCit7CisJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgKm1zZzsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlpbnQgaTsKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhID0gJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisKKwlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZkYXRhLT5kbV9oaXRfY291bnQsIC0xLCAwKSkgeworCQkvKgorCQkgKiB3ZSdyZSBhbHJlYWR5IGF0IHplcm8sIGRpc2NhcmQgdGhpcyBoaXQKKwkJICovCisJCWdvdG8gb3V0OworCX0KKworCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilkYXRhLT5za2ItPmRhdGE7CisJbXNnID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEobmxoKSk7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+ZW50cmllczsgaSsrKSB7CisJCWlmICghbWVtY21wKCZsb2NhdGlvbiwgbXNnLT5wb2ludHNbaV0ucGMsIHNpemVvZih2b2lkICopKSkgeworCQkJbXNnLT5wb2ludHNbaV0uY291bnQrKzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBlbnRyeQorCSAqLworCV9fbmxhX3Jlc2VydmVfbm9oZHIoZGF0YS0+c2tiLCBzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KSk7CisJbWVtY3B5KG1zZy0+cG9pbnRzW21zZy0+ZW50cmllc10ucGMsICZsb2NhdGlvbiwgc2l6ZW9mKHZvaWQgKikpOworCW1zZy0+cG9pbnRzW21zZy0+ZW50cmllc10uY291bnQgPSAxOworCW1zZy0+ZW50cmllcysrOworCisJaWYgKCF0aW1lcl9wZW5kaW5nKCZkYXRhLT5zZW5kX3RpbWVyKSkgeworCQlkYXRhLT5zZW5kX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgZG1fZGVsYXkgKiBIWjsKKwkJYWRkX3RpbWVyX29uKCZkYXRhLT5zZW5kX3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIGludCBzZXRfYWxsX21vbml0b3JfdHJhY2VzKGludCBzdGF0ZSkKK3sKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVFJBQ0VfT046CisJCXJjIHw9IHJlZ2lzdGVyX3RyYWNlX2tmcmVlX3NrYih0cmFjZV9rZnJlZV9za2JfaGl0KTsKKwkJYnJlYWs7CisJY2FzZSBUUkFDRV9PRkY6CisJCXJjIHw9IHVucmVnaXN0ZXJfdHJhY2Vfa2ZyZWVfc2tiKHRyYWNlX2tmcmVlX3NrYl9oaXQpOworCisJCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IDE7CisJCWJyZWFrOworCX0KKworCWlmIChyYykKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBuZXRfZG1fY21kX2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IG5ldF9kbV9jbWRfdHJhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3dpdGNoIChpbmZvLT5nZW5saGRyLT5jbWQpIHsKKwljYXNlIE5FVF9ETV9DTURfU1RBUlQ6CisJCXJldHVybiBzZXRfYWxsX21vbml0b3JfdHJhY2VzKFRSQUNFX09OKTsKKwkJYnJlYWs7CisJY2FzZSBORVRfRE1fQ01EX1NUT1A6CisJCXJldHVybiBzZXRfYWxsX21vbml0b3JfdHJhY2VzKFRSQUNFX09GRik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKworc3RhdGljIHN0cnVjdCBnZW5sX29wcyBkcm9wbW9uX29wc1tdID0geworCXsKKwkJLmNtZCA9IE5FVF9ETV9DTURfQ09ORklHLAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfY29uZmlnLAorCX0sCisJeworCQkuY21kID0gTkVUX0RNX0NNRF9TVEFSVCwKKwkJLmRvaXQgPSBuZXRfZG1fY21kX3RyYWNlLAorCX0sCisJeworCQkuY21kID0gTkVUX0RNX0NNRF9TVE9QLAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfdHJhY2UsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0X2Ryb3BfbW9uaXRvcih2b2lkKQoreworCWludCBjcHU7CisJaW50IHJjLCBpLCByZXQ7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YTsKKwlwcmludGsoS0VSTl9JTkZPICJJbml0YWxpemluZyBuZXR3b3JrIGRyb3AgbW9uaXRvciBzZXJ2aWNlXG4iKTsKKworCWlmIChzaXplb2Yodm9pZCAqKSA+IDgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RvcmUgcHJvZ3JhbSBjb3VudGVycyBvbiB0aGlzIGFyY2gsIERyb3AgbW9uaXRvciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgY3JlYXRlIGRyb3AgbW9uaXRvciBuZXRsaW5rIGZhbWlseVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJjID0gLUVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRyb3Btb25fb3BzKTsgaSsrKSB7CisJCXJldCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSwKKwkJCQkJJmRyb3Btb25fb3BzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG9wZXJhdGlvbiAlZFxuIiwKKwkJCQlkcm9wbW9uX29wc1tpXS5jbWQpOworCQkJZ290byBvdXRfdW5yZWc7CisJCX0KKwl9CisKKwlyYyA9IDA7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJZGF0YSA9ICZwZXJfY3B1KGRtX2NwdV9kYXRhLCBjcHUpOworCQlyZXNldF9wZXJfY3B1X2RhdGEoZGF0YSk7CisJCUlOSVRfV09SSygmZGF0YS0+ZG1fYWxlcnRfd29yaywgc2VuZF9kbV9hbGVydCk7CisJCWluaXRfdGltZXIoJmRhdGEtPnNlbmRfdGltZXIpOworCQlkYXRhLT5zZW5kX3RpbWVyLmRhdGEgPSBjcHU7CisJCWRhdGEtPnNlbmRfdGltZXIuZnVuY3Rpb24gPSBzY2hlZF9zZW5kX3dvcms7CisJfQorCWdvdG8gb3V0OworCitvdXRfdW5yZWc6CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHkpOworb3V0OgorCXJldHVybiByYzsKK30KKworbGF0ZV9pbml0Y2FsbChpbml0X25ldF9kcm9wX21vbml0b3IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDk0NzcxMGEuLjI0NGNhNTYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTIwOSwzNCArMjA5LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3N0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGNtZDsKIAotCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4aGFzaCkKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9yeG5mYykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJhZGRyLCBzaXplb2YoY21kKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9yeGhhc2goZGV2LCAmY21kKTsKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4bmZjKGRldiwgJmNtZCk7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhoYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGluZm87CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCWludCByZXQ7CisJdm9pZCAqcnVsZV9idWYgPSBOVUxMOwogCi0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhoYXNoKQorCWlmICghb3BzLT5nZXRfcnhuZmMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgdXNlcmFkZHIsIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4aGFzaChkZXYsICZpbmZvKTsKKwlpZiAoaW5mby5jbWQgPT0gRVRIVE9PTF9HUlhDTFNSTEFMTCkgeworCQlpZiAoaW5mby5ydWxlX2NudCA+IDApIHsKKwkJCXJ1bGVfYnVmID0ga21hbGxvYyhpbmZvLnJ1bGVfY250ICogc2l6ZW9mKHUzMiksCisJCQkJCSAgIEdGUF9VU0VSKTsKKwkJCWlmICghcnVsZV9idWYpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKKwlyZXQgPSBvcHMtPmdldF9yeG5mYyhkZXYsICZpbmZvLCBydWxlX2J1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX291dDsKKworCXJldCA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOworCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAocnVsZV9idWYpIHsKKwkJdXNlcmFkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMsIHJ1bGVfbG9jcyk7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIHJ1bGVfYnVmLAorCQkJCSBpbmZvLnJ1bGVfY250ICogc2l6ZW9mKHUzMikpKQorCQkJZ290byBlcnJfb3V0OworCX0KKwlyZXQgPSAwOworCitlcnJfb3V0OgorCWlmIChydWxlX2J1ZikKKwkJa2ZyZWUocnVsZV9idWYpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBldGh0b29sX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKQEAgLTkwMSw2ICs5MjksMTAgQEAKIAljYXNlIEVUSFRPT0xfR0ZMQUdTOgogCWNhc2UgRVRIVE9PTF9HUEZMQUdTOgogCWNhc2UgRVRIVE9PTF9HUlhGSDoKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSVUxFOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQpAQCAtMTA1MiwxMCArMTA4NCwxNiBAQAogCQkJCSAgICAgICBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcHJpdl9mbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9HUlhGSDoKLQkJcmMgPSBldGh0b29sX2dldF9yeGhhc2goZGV2LCB1c2VyYWRkcik7CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCXJjID0gZXRodG9vbF9nZXRfcnhuZmMoZGV2LCB1c2VyYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TUlhGSDoKLQkJcmMgPSBldGh0b29sX3NldF9yeGhhc2goZGV2LCB1c2VyYWRkcik7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMREVMOgorCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmMgPSBldGh0b29sX3NldF9yeG5mYyhkZXYsIHVzZXJhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX0dHUk86CiAJCXJjID0gZXRodG9vbF9nZXRfZ3JvKGRldiwgdXNlcmFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmliX3J1bGVzLmMgYi9uZXQvY29yZS9maWJfcnVsZXMuYwppbmRleCAzMmIzYTAxLi45ODY5MWUxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuYworKysgYi9uZXQvY29yZS9maWJfcnVsZXMuYwpAQCAtNTg4LDcgKzU4OCw4IEBACiAJCWdvdG8gZXJyb3V0OwogCX0KIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIG9wcy0+bmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtPm5sZ3JvdXAsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBvcHMtPm5sZ3JvdXAsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDI3OGExNDIuLmExY2JjZTcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC04NzEsOCArODcxLDcgQEAKIAkJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CiAJCW5laWdoLT5vcHMtPnNvbGljaXQobmVpZ2gsIHNrYik7CiAJCWF0b21pY19pbmMoJm5laWdoLT5wcm9iZXMpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCX0gZWxzZSB7CiBvdXQ6CiAJCXdyaXRlX3VubG9jaygmbmVpZ2gtPmxvY2spOwpAQCAtOTA4LDggKzkwNyw3IEBACiAJCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAotCQkJaWYgKHNrYikKLQkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UgaWYgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfU1RBTEUpIHsKQEAgLTE2NTYsNyArMTY1NCwxMSBAQAogCQkJCWZsYWdzICY9IH5ORUlHSF9VUERBVEVfRl9PVkVSUklERTsKIAkJfQogCi0JCWVyciA9IG5laWdoX3VwZGF0ZShuZWlnaCwgbGxhZGRyLCBuZG0tPm5kbV9zdGF0ZSwgZmxhZ3MpOworCQlpZiAobmRtLT5uZG1fZmxhZ3MgJiBOVEZfVVNFKSB7CisJCQluZWlnaF9ldmVudF9zZW5kKG5laWdoLCBOVUxMKTsKKwkJCWVyciA9IDA7CisJCX0gZWxzZQorCQkJZXJyID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGFkZHIsIG5kbS0+bmRtX3N0YXRlLCBmbGFncyk7CiAJCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogCQlnb3RvIG91dF9kZXZfcHV0OwogCX0KQEAgLTI1MzQsNyArMjUzNiw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05FSUdILCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTkVJR0gsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDQ4NGY1ODcuLjJkYTU5YTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAlkZXYtPmdyb3VwcyA9IGdyb3VwczsKIAogCUJVSUxEX0JVR19PTihCVVNfSURfU0laRSA8IElGTkFNU0laKTsKLQlkZXZfc2V0X25hbWUoZGV2LCBuZXQtPm5hbWUpOworCWRldl9zZXRfbmFtZShkZXYsICIlcyIsIG5ldC0+bmFtZSk7CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKIAkqZ3JvdXBzKysgPSAmbmV0c3RhdF9ncm91cDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC10cmFjZXMuYyBiL25ldC9jb3JlL25ldC10cmFjZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZiNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvbmV0LXRyYWNlcy5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBjb25zb2xpZGF0ZXMgdHJhY2UgcG9pbnQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmVpbCBIb3JtYW4gPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworCitERUZJTkVfVFJBQ0Uoa2ZyZWVfc2tiKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoa2ZyZWVfc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNjU0OTg0OC4uMzJkNDE5ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTMyNzUsOCArMzI3NSw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KSB7CiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAogCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KQEAgLTMzMDMsOCArMzMwMiw3IEBACiAJCWlmICghY3VyLT5yZW1vdmFsX21hcmspCiAJCQljb250aW51ZTsKIAotCQlpZiAoY3VyLT5za2IpCi0JCQlrZnJlZV9za2IoY3VyLT5za2IpOworCQlrZnJlZV9za2IoY3VyLT5za2IpOwogCQljdXItPnNrYiA9IE5VTEw7CiAKIAkJcGt0Z2VuX3JlbW92ZV9kZXZpY2UodCwgY3VyKTsKQEAgLTMzMjgsOCArMzMyNiw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHEsIG4sICZ0LT5pZl9saXN0KSB7CiAJCWN1ciA9IGxpc3RfZW50cnkocSwgc3RydWN0IHBrdGdlbl9kZXYsIGxpc3QpOwogCi0JCWlmIChjdXItPnNrYikKLQkJCWtmcmVlX3NrYihjdXItPnNrYik7CisJCWtmcmVlX3NrYihjdXItPnNrYik7CiAJCWN1ci0+c2tiID0gTlVMTDsKIAogCQlwa3RnZW5fcmVtb3ZlX2RldmljZSh0LCBjdXIpOwpAQCAtMzM5Myw4ICszMzkwLDcgQEAKIAogCQlpZiAoIW5ldGlmX3J1bm5pbmcob2RldikpIHsKIAkJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJCWlmIChwa3RfZGV2LT5za2IpCi0JCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAkJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzQxNSw4ICszNDExLDcgQEAKIAkJaWYgKCgrK3BrdF9kZXYtPmNsb25lX2NvdW50ID49IHBrdF9kZXYtPmNsb25lX3NrYikKIAkJICAgIHx8ICghcGt0X2Rldi0+c2tiKSkgewogCQkJLyogYnVpbGQgYSBuZXcgcGt0ICovCi0JCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKIAkJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOwogCQkJaWYgKHBrdF9kZXYtPnNrYiA9PSBOVUxMKSB7CkBAIC0zNDk4LDggKzM0OTMsNyBAQAogCiAJCS8qIERvbmUgd2l0aCB0aGlzICovCiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAl9CiBvdXQ6OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3OTBkZDIwLi5kNzgwMzBmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU1LDggKzQ1NSw4IEBACiAJcmV0dXJuIG5sbXNnX3VuaWNhc3QocnRubCwgc2tiLCBwaWQpOwogfQogCi1pbnQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCi0JCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncykKK3ZvaWQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCisJCSBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnJ0bmwgPSBuZXQtPnJ0bmw7CiAJaW50IHJlcG9ydCA9IDA7CkBAIC00NjQsNyArNDY0LDcgQEAKIAlpZiAobmxoKQogCQlyZXBvcnQgPSBubG1zZ19yZXBvcnQobmxoKTsKIAotCXJldHVybiBubG1zZ19ub3RpZnkocnRubCwgc2tiLCBwaWQsIGdyb3VwLCByZXBvcnQsIGZsYWdzKTsKKwlubG1zZ19ub3RpZnkocnRubCwgc2tiLCBwaWQsIGdyb3VwLCByZXBvcnQsIGZsYWdzKTsKIH0KIAogdm9pZCBydG5sX3NldF9za19lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgZ3JvdXAsIGludCBlcnJvcikKQEAgLTEyNDYsNyArMTI0Niw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0xJTkssIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGM2YTZiMTYuLjZhY2JmOWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KIAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KQEAgLTY0LDYgKzY1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgogCiAjaW5jbHVkZSAia21hcF9za2IuaCIKIApAQCAtMTIzLDYgKzEyNSw3IEBACiAJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9vdmVyX3BhbmljKTsKIAogLyoqCiAgKglza2JfdW5kZXJfcGFuaWMJLSAJcHJpdmF0ZSBmdW5jdGlvbgpAQCAtMTQyLDYgKzE0NSw3IEBACiAJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7CiAKIC8qIAlBbGxvY2F0ZSBhIG5ldyBza2J1ZmYuIFdlIGRvIHRoaXMgb3Vyc2VsdmVzIHNvIHdlIGNhbiBmaWxsIGluIGEgZmV3CiAgKgkncHJpdmF0ZScgZmllbGRzIGFuZCBhbHNvIGRvIG1lbW9yeSBzdGF0aXN0aWNzIHRvIGZpbmQgYWxsIHRoZQpAQCAtMjA1LDcgKzIwOSw5IEBACiAJc2hpbmZvLT5nc29fc2VncyA9IDA7CiAJc2hpbmZvLT5nc29fdHlwZSA9IDA7CiAJc2hpbmZvLT5pcDZfZnJhZ19pZCA9IDA7CisJc2hpbmZvLT50eF9mbGFncy5mbGFncyA9IDA7CiAJc2hpbmZvLT5mcmFnX2xpc3QgPSBOVUxMOworCW1lbXNldCgmc2hpbmZvLT5od3RzdGFtcHMsIDAsIHNpemVvZihzaGluZm8tPmh3dHN0YW1wcykpOwogCiAJaWYgKGZjbG9uZSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQgPSBza2IgKyAxOwpAQCAtMjIzLDYgKzIyOSw3IEBACiAJc2tiID0gTlVMTDsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0woX19hbGxvY19za2IpOwogCiAvKioKICAqCV9fbmV0ZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igcnggb24gYSBzcGVjaWZpYyBkZXZpY2UKQEAgLTI1MCw2ICsyNTcsNyBAQAogCX0KIAlyZXR1cm4gc2tiOwogfQorRVhQT1JUX1NZTUJPTChfX25ldGRldl9hbGxvY19za2IpOwogCiBzdHJ1Y3QgcGFnZSAqX19uZXRkZXZfYWxsb2NfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTQxOCw2ICs0MjYsNyBAQAogCXNrYl9yZWxlYXNlX2FsbChza2IpOwogCWtmcmVlX3NrYm1lbShza2IpOwogfQorRVhQT1JUX1NZTUJPTChfX2tmcmVlX3NrYik7CiAKIC8qKgogICoJa2ZyZWVfc2tiIC0gZnJlZSBhbiBza19idWZmCkBAIC00MzQsOCArNDQzLDMwIEBACiAJCXNtcF9ybWIoKTsKIAllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKIAkJcmV0dXJuOworCXRyYWNlX2tmcmVlX3NrYihza2IsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJX19rZnJlZV9za2Ioc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKKworLyoqCisgKgljb25zdW1lX3NrYiAtIGZyZWUgYW4gc2tidWZmCisgKglAc2tiOiBidWZmZXIgdG8gZnJlZQorICoKKyAqCURyb3AgYSByZWYgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdCB6ZXJvCisgKglGdW5jdGlvbnMgaWRlbnRpY2FsbHkgdG8ga2ZyZWVfc2tiLCBidXQga2ZyZWVfc2tiIGFzc3VtZXMgdGhhdCB0aGUgZnJhbWUKKyAqCWlzIGJlaW5nIGRyb3BwZWQgYWZ0ZXIgYSBmYWlsdXJlIGFuZCBub3RlcyB0aGF0CisgKi8KK3ZvaWQgY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybjsKKwlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZza2ItPnVzZXJzKSA9PSAxKSkKKwkJc21wX3JtYigpOworCWVsc2UgaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpKQorCQlyZXR1cm47CisJX19rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woY29uc3VtZV9za2IpOwogCiAvKioKICAqCXNrYl9yZWN5Y2xlX2NoZWNrIC0gY2hlY2sgaWYgc2tiIGNhbiBiZSByZXVzZWQgZm9yIHJlY2VpdmUKQEAgLTYwNSw2ICs2MzYsNyBAQAogCiAJcmV0dXJuIF9fc2tiX2Nsb25lKG4sIHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jbG9uZSk7CiAKIHN0YXRpYyB2b2lkIGNvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKQogewpAQCAtNjcxLDcgKzcwMyw3IEBACiAJY29weV9za2JfaGVhZGVyKG4sIHNrYik7CiAJcmV0dXJuIG47CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHkpOwogCiAvKioKICAqCXBza2JfY29weQktCWNyZWF0ZSBjb3B5IG9mIGFuIHNrX2J1ZmYgd2l0aCBwcml2YXRlIGhlYWQuCkBAIC03MzAsNiArNzYyLDcgQEAKIG91dDoKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKIAogLyoqCiAgKglwc2tiX2V4cGFuZF9oZWFkIC0gcmVhbGxvY2F0ZSBoZWFkZXIgb2YgJnNrX2J1ZmYKQEAgLTgxMyw2ICs4NDYsNyBAQAogbm9kYXRhOgogCXJldHVybiAtRU5PTUVNOwogfQorRVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTsKIAogLyogTWFrZSBwcml2YXRlIGNvcHkgb2Ygc2tiIHdpdGggd3JpdGFibGUgaGVhZCBhbmQgc29tZSBoZWFkcm9vbSAqLwogCkBAIC04MzMsNyArODY3LDcgQEAKIAl9CiAJcmV0dXJuIHNrYjI7CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX3JlYWxsb2NfaGVhZHJvb20pOwogCiAvKioKICAqCXNrYl9jb3B5X2V4cGFuZAktCWNvcHkgYW5kIGV4cGFuZCBza19idWZmCkBAIC04OTgsNiArOTMyLDcgQEAKIAogCXJldHVybiBuOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpOwogCiAvKioKICAqCXNrYl9wYWQJCQktCXplcm8gcGFkIHRoZSB0YWlsIG9mIGFuIHNrYgpAQCAtOTQzLDYgKzk3OCw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3BhZCk7CiAKIC8qKgogICoJc2tiX3B1dCAtIGFkZCBkYXRhIHRvIGEgYnVmZmVyCkBAIC0xMTAwLDYgKzExMzYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7CiAKIC8qKgogICoJX19wc2tiX3B1bGxfdGFpbCAtIGFkdmFuY2UgdGFpbCBvZiBza2IgaGVhZGVyCkBAIC0xMTkzLDggKzEyMzAsNyBAQAogCQkJCQlpbnNwID0gbGlzdDsKIAkJCQl9CiAJCQkJaWYgKCFwc2tiX3B1bGwobGlzdCwgZWF0KSkgewotCQkJCQlpZiAoY2xvbmUpCi0JCQkJCQlrZnJlZV9za2IoY2xvbmUpOworCQkJCQlrZnJlZV9za2IoY2xvbmUpOwogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0xMjM4LDYgKzEyNzQsNyBAQAogCiAJcmV0dXJuIHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7CiAKIC8qIENvcHkgc29tZSBkYXRhIGJpdHMgZnJvbSBza2IgdG8ga2VybmVsIGJ1ZmZlci4gKi8KIApAQCAtMTMxNSw2ICsxMzUyLDcgQEAKIGZhdWx0OgogCXJldHVybiAtRUZBVUxUOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9iaXRzKTsKIAogLyoKICAqIENhbGxiYWNrIGZyb20gc3BsaWNlX3RvX3BpcGUoKSwgaWYgd2UgbmVlZCB0byByZWxlYXNlIHNvbWUgcGFnZXMKQEAgLTEzMjUsMTQgKzEzNjMsMzkgQEAKIAlwdXRfcGFnZShzcGQtPnBhZ2VzW2ldKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbGluZWFyX3RvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmxpbmVhcl90b19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgKmxlbiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgKm9mZnNldCwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKKwlzdHJ1Y3QgcGFnZSAqcCA9IHNrLT5za19zbmRtc2dfcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2ZmOwogCi0JaWYgKCFwKQotCQlyZXR1cm4gTlVMTDsKLQltZW1jcHkocGFnZV9hZGRyZXNzKHApICsgb2Zmc2V0LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIGxlbik7CisJaWYgKCFwKSB7CituZXdfcGFnZToKKwkJcCA9IHNrLT5za19zbmRtc2dfcGFnZSA9IGFsbG9jX3BhZ2VzKHNrLT5za19hbGxvY2F0aW9uLCAwKTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJb2ZmID0gc2stPnNrX3NuZG1zZ19vZmYgPSAwOworCQkvKiBob2xkIG9uZSByZWYgdG8gdGhpcyBwYWdlIHVudGlsIGl0J3MgZnVsbCAqLworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBtbGVuOworCisJCW9mZiA9IHNrLT5za19zbmRtc2dfb2ZmOworCQltbGVuID0gUEFHRV9TSVpFIC0gb2ZmOworCQlpZiAobWxlbiA8IDY0ICYmIG1sZW4gPCAqbGVuKSB7CisJCQlwdXRfcGFnZShwKTsKKwkJCWdvdG8gbmV3X3BhZ2U7CisJCX0KKworCQkqbGVuID0gbWluX3QodW5zaWduZWQgaW50LCAqbGVuLCBtbGVuKTsKKwl9CisKKwltZW1jcHkocGFnZV9hZGRyZXNzKHApICsgb2ZmLCBwYWdlX2FkZHJlc3MocGFnZSkgKyAqb2Zmc2V0LCAqbGVuKTsKKwlzay0+c2tfc25kbXNnX29mZiArPSAqbGVuOworCSpvZmZzZXQgPSBvZmY7CisJZ2V0X3BhZ2UocCk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTEzNDEsMjEgKzE0MDQsMjEgQEAKICAqIEZpbGwgcGFnZS9vZmZzZXQvbGVuZ3RoIGludG8gc3BkLCBpZiBpdCBjYW4gaG9sZCBtb3JlIHBhZ2VzLgogICovCiBzdGF0aWMgaW5saW5lIGludCBzcGRfZmlsbF9wYWdlKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCXVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJdW5zaWduZWQgaW50ICpsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxpbmVhcikKIHsKIAlpZiAodW5saWtlbHkoc3BkLT5ucl9wYWdlcyA9PSBQSVBFX0JVRkZFUlMpKQogCQlyZXR1cm4gMTsKIAogCWlmIChsaW5lYXIpIHsKLQkJcGFnZSA9IGxpbmVhcl90b19wYWdlKHBhZ2UsIGxlbiwgb2Zmc2V0KTsKKwkJcGFnZSA9IGxpbmVhcl90b19wYWdlKHBhZ2UsIGxlbiwgJm9mZnNldCwgc2tiKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCWdldF9wYWdlKHBhZ2UpOwogCiAJc3BkLT5wYWdlc1tzcGQtPm5yX3BhZ2VzXSA9IHBhZ2U7Ci0Jc3BkLT5wYXJ0aWFsW3NwZC0+bnJfcGFnZXNdLmxlbiA9IGxlbjsKKwlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ubGVuID0gKmxlbjsKIAlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ub2Zmc2V0ID0gb2Zmc2V0OwogCXNwZC0+bnJfcGFnZXMrKzsKIApAQCAtMTM2NSw4ICsxNDI4LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZWdtZW50X3NlZWsoc3RydWN0IHBhZ2UgKipwYWdlLCB1bnNpZ25lZCBpbnQgKnBvZmYsCiAJCQkJICB1bnNpZ25lZCBpbnQgKnBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7CisJdW5zaWduZWQgbG9uZyBuOworCiAJKnBvZmYgKz0gb2ZmOwotCSpwYWdlICs9ICpwb2ZmIC8gUEFHRV9TSVpFOworCW4gPSAqcG9mZiAvIFBBR0VfU0laRTsKKwlpZiAobikKKwkJKnBhZ2UgPSBudGhfcGFnZSgqcGFnZSwgbik7CisKIAkqcG9mZiA9ICpwb2ZmICUgUEFHRV9TSVpFOwogCSpwbGVuIC09IG9mZjsKIH0KQEAgLTEzOTcsNyArMTQ2NSw3IEBACiAJCS8qIHRoZSBsaW5lYXIgcmVnaW9uIG1heSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgcGFnZXMgICovCiAJCWZsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZsZW4sIFBBR0VfU0laRSAtIHBvZmYpOwogCi0JCWlmIChzcGRfZmlsbF9wYWdlKHNwZCwgcGFnZSwgZmxlbiwgcG9mZiwgc2tiLCBsaW5lYXIpKQorCQlpZiAoc3BkX2ZpbGxfcGFnZShzcGQsIHBhZ2UsICZmbGVuLCBwb2ZmLCBza2IsIGxpbmVhcikpCiAJCQlyZXR1cm4gMTsKIAogCQlfX3NlZ21lbnRfc2VlaygmcGFnZSwgJnBvZmYsICZwbGVuLCBmbGVuKTsKQEAgLTE1OTAsNyArMTY1OCw2IEBACiBmYXVsdDoKIAlyZXR1cm4gLUVGQVVMVDsKIH0KLQogRVhQT1JUX1NZTUJPTChza2Jfc3RvcmVfYml0cyk7CiAKIC8qIENoZWNrc3VtIHNrYiBkYXRhLiAqLwpAQCAtMTY2Nyw2ICsxNzM0LDcgQEAKIAogCXJldHVybiBjc3VtOwogfQorRVhQT1JUX1NZTUJPTChza2JfY2hlY2tzdW0pOwogCiAvKiBCb3RoIG9mIGFib3ZlIGluIG9uZSBib3R0bGUuICovCiAKQEAgLTE3NDgsNiArMTgxNiw3IEBACiAJQlVHX09OKGxlbik7CiAJcmV0dXJuIGNzdW07CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMpOwogCiB2b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pCiB7CkBAIC0xNzc0LDYgKzE4NDMsNyBAQAogCQkqKChfX3N1bTE2ICopKHRvICsgY3NzdHVmZikpID0gY3N1bV9mb2xkKGNzdW0pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fZGV2KTsKIAogLyoqCiAgKglza2JfZGVxdWV1ZSAtIHJlbW92ZSBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZQpAQCAtMTc5NCw2ICsxODY0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2RlcXVldWUpOwogCiAvKioKICAqCXNrYl9kZXF1ZXVlX3RhaWwgLSByZW1vdmUgZnJvbSB0aGUgdGFpbCBvZiB0aGUgcXVldWUKQEAgLTE4MTMsNiArMTg4NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlX3RhaWwpOwogCiAvKioKICAqCXNrYl9xdWV1ZV9wdXJnZSAtIGVtcHR5IGEgbGlzdApAQCAtMTgyOCw2ICsxOTAwLDcgQEAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKQogCQlrZnJlZV9za2Ioc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3B1cmdlKTsKIAogLyoqCiAgKglza2JfcXVldWVfaGVhZCAtIHF1ZXVlIGEgYnVmZmVyIGF0IHRoZSBsaXN0IGhlYWQKQEAgLTE4NDgsNiArMTkyMSw3IEBACiAJX19za2JfcXVldWVfaGVhZChsaXN0LCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfaGVhZCk7CiAKIC8qKgogICoJc2tiX3F1ZXVlX3RhaWwgLSBxdWV1ZSBhIGJ1ZmZlciBhdCB0aGUgbGlzdCB0YWlsCkBAIC0xODY4LDYgKzE5NDIsNyBAQAogCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3RhaWwpOwogCiAvKioKICAqCXNrYl91bmxpbmsJLQlyZW1vdmUgYSBidWZmZXIgZnJvbSBhIGxpc3QKQEAgLTE4ODcsNiArMTk2Miw3IEBACiAJX19za2JfdW5saW5rKHNrYiwgbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfdW5saW5rKTsKIAogLyoqCiAgKglza2JfYXBwZW5kCS0JYXBwZW5kIGEgYnVmZmVyCkBAIC0xOTA2LDcgKzE5ODIsNyBAQAogCV9fc2tiX3F1ZXVlX2FmdGVyKGxpc3QsIG9sZCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kKTsKIAogLyoqCiAgKglza2JfaW5zZXJ0CS0JaW5zZXJ0IGEgYnVmZmVyCkBAIC0xOTI4LDYgKzIwMDQsNyBAQAogCV9fc2tiX2luc2VydChuZXdzaywgb2xkLT5wcmV2LCBvbGQsIGxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2luc2VydCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc3BsaXRfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiogc2tiMSwKQEAgLTIwMDYsNiArMjA4Myw3IEBACiAJZWxzZQkJLyogU2Vjb25kIGNodW5rIGhhcyBubyBoZWFkZXIsIG5vdGhpbmcgdG8gY29weS4gKi8KIAkJc2tiX3NwbGl0X25vX2hlYWRlcihza2IsIHNrYjEsIGxlbiwgcG9zKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3NwbGl0KTsKIAogLyogU2hpZnRpbmcgZnJvbS90byBhIGNsb25lZCBza2IgaXMgYSBuby1nby4KICAqCkBAIC0yMTY4LDYgKzIyNDYsNyBAQAogCXN0LT5mcmFnX2lkeCA9IHN0LT5zdGVwcGVkX29mZnNldCA9IDA7CiAJc3QtPmZyYWdfZGF0YSA9IE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9wcmVwYXJlX3NlcV9yZWFkKTsKIAogLyoqCiAgKiBza2Jfc2VxX3JlYWQgLSBTZXF1ZW50aWFsbHkgcmVhZCBza2IgZGF0YQpAQCAtMjI1NSw2ICsyMzM0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChza2Jfc2VxX3JlYWQpOwogCiAvKioKICAqIHNrYl9hYm9ydF9zZXFfcmVhZCAtIEFib3J0IGEgc2VxdWVudGlhbCByZWFkIG9mIHNrYiBkYXRhCkBAIC0yMjY4LDYgKzIzNDgsNyBAQAogCWlmIChzdC0+ZnJhZ19kYXRhKQogCQlrdW5tYXBfc2tiX2ZyYWcoc3QtPmZyYWdfZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7CiAKICNkZWZpbmUgVFNfU0tCX0NCKHN0YXRlKQkoKHN0cnVjdCBza2Jfc2VxX3N0YXRlICopICYoKHN0YXRlKS0+Y2IpKQogCkBAIC0yMzEwLDYgKzIzOTEsNyBAQAogCXJldCA9IHRleHRzZWFyY2hfZmluZChjb25maWcsIHN0YXRlKTsKIAlyZXR1cm4gKHJldCA8PSB0byAtIGZyb20gPyByZXQgOiBVSU5UX01BWCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwogCiAvKioKICAqIHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzOiAtIGFwcGVuZCB0aGUgdXNlciBkYXRhIHRvIGEgc2tiCkBAIC0yMzgyLDYgKzI0NjQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzKTsKIAogLyoqCiAgKglza2JfcHVsbF9yY3N1bSAtIHB1bGwgc2tiIGFuZCB1cGRhdGUgcmVjZWl2ZSBjaGVja3N1bQpAQCAtMjU2OSw3ICsyNjUyLDYgQEAKIAl9CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpOwogCiBpbnQgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI1NzcsMTcgKzI2NTksMjMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcCA9ICpoZWFkOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKLQl1bnNpZ25lZCBpbnQgaGxlbiA9IHAtPmRhdGEgLSBza2JfbWFjX2hlYWRlcihwKTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9ncm9fbGVuKHNrYik7CiAKLQlpZiAoaGxlbiArIHAtPmxlbiArIGxlbiA+PSA2NTUzNikKKwlpZiAocC0+bGVuICsgbGVuID49IDY1NTM2KQogCQlyZXR1cm4gLUUyQklHOwogCiAJaWYgKHNrYl9zaGluZm8ocCktPmZyYWdfbGlzdCkKIAkJZ290byBtZXJnZTsKLQllbHNlIGlmICghc2tiX2hlYWRsZW4ocCkgJiYgIXNrYl9oZWFkbGVuKHNrYikgJiYKLQkJIHNrYl9zaGluZm8ocCktPm5yX2ZyYWdzICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA8Ci0JCSBNQVhfU0tCX0ZSQUdTKSB7CisJZWxzZSBpZiAoc2tiX2hlYWRsZW4oc2tiKSA8PSBza2JfZ3JvX29mZnNldChza2IpKSB7CisJCWlmIChza2Jfc2hpbmZvKHApLT5ucl9mcmFncyArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPgorCQkgICAgTUFYX1NLQl9GUkFHUykKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisKIAkJbWVtY3B5KHNrYl9zaGluZm8ocCktPmZyYWdzICsgc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MsCiAJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzLAogCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAqIHNpemVvZihza2JfZnJhZ190KSk7CkBAIC0yNjA0LDcgKzI2OTIsNyBAQAogCX0KIAogCWhlYWRyb29tID0gc2tiX2hlYWRyb29tKHApOwotCW5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHAtPmRldiwgaGVhZHJvb20pOworCW5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHAtPmRldiwgaGVhZHJvb20gKyBza2JfZ3JvX29mZnNldChwKSk7CiAJaWYgKHVubGlrZWx5KCFuc2tiKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI2MTIsMTIgKzI3MDAsMTUgQEAKIAluc2tiLT5tYWNfbGVuID0gcC0+bWFjX2xlbjsKIAogCXNrYl9yZXNlcnZlKG5za2IsIGhlYWRyb29tKTsKKwlfX3NrYl9wdXQobnNrYiwgc2tiX2dyb19vZmZzZXQocCkpOwogCi0Jc2tiX3NldF9tYWNfaGVhZGVyKG5za2IsIC1obGVuKTsKKwlza2Jfc2V0X21hY19oZWFkZXIobnNrYiwgc2tiX21hY19oZWFkZXIocCkgLSBwLT5kYXRhKTsKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKG5za2IsIHNrYl9uZXR3b3JrX29mZnNldChwKSk7CiAJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKG5za2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHApKTsKIAotCW1lbWNweShza2JfbWFjX2hlYWRlcihuc2tiKSwgc2tiX21hY19oZWFkZXIocCksIGhsZW4pOworCV9fc2tiX3B1bGwocCwgc2tiX2dyb19vZmZzZXQocCkpOworCW1lbWNweShza2JfbWFjX2hlYWRlcihuc2tiKSwgc2tiX21hY19oZWFkZXIocCksCisJICAgICAgIHAtPmRhdGEgLSBza2JfbWFjX2hlYWRlcihwKSk7CiAKIAkqTkFQSV9HUk9fQ0IobnNrYikgPSAqTkFQSV9HUk9fQ0IocCk7CiAJc2tiX3NoaW5mbyhuc2tiKS0+ZnJhZ19saXN0ID0gcDsKQEAgLTI2MzYsNiArMjcyNywxNyBAQAogCXAgPSBuc2tiOwogCiBtZXJnZToKKwlpZiAoc2tiX2dyb19vZmZzZXQoc2tiKSA+IHNrYl9oZWFkbGVuKHNrYikpIHsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CisJCXNrYl9ncm9fcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOworCX0KKworCV9fc2tiX3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKwogCXAtPnByZXYtPm5leHQgPSBza2I7CiAJcC0+cHJldiA9IHNrYjsKIAlza2JfaGVhZGVyX3JlbGVhc2Uoc2tiKTsKQEAgLTI3NDcsNiArMjg0OSw3IEBACiAKIAlyZXR1cm4gbnNnOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RvX3NndmVjKTsKIAogLyoqCiAgKglza2JfY293X2RhdGEgLSBDaGVjayB0aGF0IGEgc29ja2V0IGJ1ZmZlcidzIGRhdGEgYnVmZmVycyBhcmUgd3JpdGFibGUKQEAgLTI4NTYsNiArMjk1OSw0NSBAQAogCiAJcmV0dXJuIGVsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3dfZGF0YSk7CisKK3ZvaWQgc2tiX3RzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsCisJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKQoreworCXN0cnVjdCBzb2NrICpzayA9IG9yaWdfc2tiLT5zazsKKwlzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVycjsKKworCWlmICghc2spCisJCXJldHVybjsKKworCXNrYiA9IHNrYl9jbG9uZShvcmlnX3NrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCWlmIChod3RzdGFtcHMpIHsKKwkJKnNrYl9od3RzdGFtcHMoc2tiKSA9CisJCQkqaHd0c3RhbXBzOworCX0gZWxzZSB7CisJCS8qCisJCSAqIG5vIGhhcmR3YXJlIHRpbWUgc3RhbXBzIGF2YWlsYWJsZSwKKwkJICogc28ga2VlcCB0aGUgc2tiX3NoYXJlZF90eCBhbmQgb25seQorCQkgKiBzdG9yZSBzb2Z0d2FyZSB0aW1lIHN0YW1wCisJCSAqLworCQlza2ItPnRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CisJfQorCisJc2VyciA9IFNLQl9FWFRfRVJSKHNrYik7CisJbWVtc2V0KHNlcnIsIDAsIHNpemVvZigqc2VycikpOworCXNlcnItPmVlLmVlX2Vycm5vID0gRU5PTVNHOworCXNlcnItPmVlLmVlX29yaWdpbiA9IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkc7CisJZXJyID0gc29ja19xdWV1ZV9lcnJfc2tiKHNrLCBza2IpOworCWlmIChlcnIpCisJCWtmcmVlX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RzdGFtcF90eCk7CisKIAogLyoqCiAgKiBza2JfcGFydGlhbF9jc3VtX3NldCAtIHNldCB1cCBhbmQgdmVyaWZ5IHBhcnRpYWwgY3N1bSB2YWx1ZXMgZm9yIHBhY2tldApAQCAtMjg4NCw2ICszMDI2LDcgQEAKIAlza2ItPmNzdW1fb2Zmc2V0ID0gb2ZmOwogCXJldHVybiB0cnVlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3BhcnRpYWxfY3N1bV9zZXQpOwogCiB2b2lkIF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI4OTEsNDIgKzMwMzQsNCBAQAogCQlwcl93YXJuaW5nKCIlczogcmVjZWl2ZWQgcGFja2V0cyBjYW5ub3QgYmUgZm9yd2FyZGVkIgogCQkJICAgIiB3aGlsZSBMUk8gaXMgZW5hYmxlZFxuIiwgc2tiLT5kZXYtPm5hbWUpOwogfQotCi1FWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7Ci1FWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTsKLUVYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKLUVYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTsKLUVYUE9SVF9TWU1CT0woX19uZXRkZXZfYWxsb2Nfc2tiKTsKLUVYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKLUVYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jaGVja3N1bSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jbG9uZSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5KTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fYml0cyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2Rldik7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2JpdHMpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpOwotRVhQT1JUX1NZTUJPTChza2Jfb3Zlcl9wYW5pYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9wYWQpOwotRVhQT1JUX1NZTUJPTChza2JfcmVhbGxvY19oZWFkcm9vbSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlKTsKLUVYUE9SVF9TWU1CT0woc2tiX2RlcXVldWVfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9pbnNlcnQpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfcHVyZ2UpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfaGVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV90YWlsKTsKLUVYUE9SVF9TWU1CT0woc2tiX3VubGluayk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmQpOwotRVhQT1JUX1NZTUJPTChza2Jfc3BsaXQpOwotRVhQT1JUX1NZTUJPTChza2JfcHJlcGFyZV9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwotRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kX2RhdGF0b19mcmFncyk7CiBFWFBPUlRfU1lNQk9MKF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcpOwotCi1FWFBPUlRfU1lNQk9MX0dQTChza2JfdG9fc2d2ZWMpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNrYl9wYXJ0aWFsX2NzdW1fc2V0KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA1Zjk3Y2FhLi4wNjIwMDQ2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0xMjAsNiArMTIwLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwc2VjLmg+CiAKQEAgLTE0OSw3ICsxNTAsNyBAQAogICAic2tfbG9jay1BRl9ERUNuZXQiLCAic2tfbG9jay1BRl9ORVRCRVVJIiAgLCAic2tfbG9jay1BRl9TRUNVUklUWSIgLAogICAic2tfbG9jay1BRl9LRVkiICAgLCAic2tfbG9jay1BRl9ORVRMSU5LIiAgLCAic2tfbG9jay1BRl9QQUNLRVQiICAgLAogICAic2tfbG9jay1BRl9BU0giICAgLCAic2tfbG9jay1BRl9FQ09ORVQiICAgLCAic2tfbG9jay1BRl9BVE1TVkMiICAgLAotICAic2tfbG9jay0yMSIgICAgICAgLCAic2tfbG9jay1BRl9TTkEiICAgICAgLCAic2tfbG9jay1BRl9JUkRBIiAgICAgLAorICAic2tfbG9jay1BRl9SRFMiICAgLCAic2tfbG9jay1BRl9TTkEiICAgICAgLCAic2tfbG9jay1BRl9JUkRBIiAgICAgLAogICAic2tfbG9jay1BRl9QUFBPWCIgLCAic2tfbG9jay1BRl9XQU5QSVBFIiAgLCAic2tfbG9jay1BRl9MTEMiICAgICAgLAogICAic2tfbG9jay0yNyIgICAgICAgLCAic2tfbG9jay0yOCIgICAgICAgICAgLCAic2tfbG9jay1BRl9DQU4iICAgICAgLAogICAic2tfbG9jay1BRl9USVBDIiAgLCAic2tfbG9jay1BRl9CTFVFVE9PVEgiLCAic2tfbG9jay1JVUNWIiAgICAgICAgLApAQCAtMTY0LDcgKzE2NSw3IEBACiAgICJzbG9jay1BRl9ERUNuZXQiLCAic2xvY2stQUZfTkVUQkVVSSIgICwgInNsb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJzbG9jay1BRl9LRVkiICAgLCAic2xvY2stQUZfTkVUTElOSyIgICwgInNsb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJzbG9jay1BRl9BU0giICAgLCAic2xvY2stQUZfRUNPTkVUIiAgICwgInNsb2NrLUFGX0FUTVNWQyIgICAsCi0gICJzbG9jay0yMSIgICAgICAgLCAic2xvY2stQUZfU05BIiAgICAgICwgInNsb2NrLUFGX0lSREEiICAgICAsCisgICJzbG9jay1BRl9SRFMiICAgLCAic2xvY2stQUZfU05BIiAgICAgICwgInNsb2NrLUFGX0lSREEiICAgICAsCiAgICJzbG9jay1BRl9QUFBPWCIgLCAic2xvY2stQUZfV0FOUElQRSIgICwgInNsb2NrLUFGX0xMQyIgICAgICAsCiAgICJzbG9jay0yNyIgICAgICAgLCAic2xvY2stMjgiICAgICAgICAgICwgInNsb2NrLUFGX0NBTiIgICAgICAsCiAgICJzbG9jay1BRl9USVBDIiAgLCAic2xvY2stQUZfQkxVRVRPT1RIIiwgInNsb2NrLUFGX0lVQ1YiICAgICAsCkBAIC0xNzksNyArMTgwLDcgQEAKICAgImNsb2NrLUFGX0RFQ25ldCIsICJjbG9jay1BRl9ORVRCRVVJIiAgLCAiY2xvY2stQUZfU0VDVVJJVFkiICwKICAgImNsb2NrLUFGX0tFWSIgICAsICJjbG9jay1BRl9ORVRMSU5LIiAgLCAiY2xvY2stQUZfUEFDS0VUIiAgICwKICAgImNsb2NrLUFGX0FTSCIgICAsICJjbG9jay1BRl9FQ09ORVQiICAgLCAiY2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgImNsb2NrLTIxIiAgICAgICAsICJjbG9jay1BRl9TTkEiICAgICAgLCAiY2xvY2stQUZfSVJEQSIgICAgICwKKyAgImNsb2NrLUFGX1JEUyIgICAsICJjbG9jay1BRl9TTkEiICAgICAgLCAiY2xvY2stQUZfSVJEQSIgICAgICwKICAgImNsb2NrLUFGX1BQUE9YIiAsICJjbG9jay1BRl9XQU5QSVBFIiAgLCAiY2xvY2stQUZfTExDIiAgICAgICwKICAgImNsb2NrLTI3IiAgICAgICAsICJjbG9jay0yOCIgICAgICAgICAgLCAiY2xvY2stQUZfQ0FOIiAgICAgICwKICAgImNsb2NrLUFGX1RJUEMiICAsICJjbG9jay1BRl9CTFVFVE9PVEgiLCAiY2xvY2stQUZfSVVDViIgICAgICwKQEAgLTI1NSwxMSArMjU2LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIHNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZykKIHsKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpIHsKLQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCk7Ci0JCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCgpOworCWlmIChzb2NrX2ZsYWcoc2ssIGZsYWcpKSB7CisJCXNvY2tfcmVzZXRfZmxhZyhzaywgZmxhZyk7CisJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkgJiYKKwkJICAgICFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSkgeworCQkJbmV0X2Rpc2FibGVfdGltZXN0YW1wKCk7CisJCX0KIAl9CiB9CiAKQEAgLTYxNCwxMyArNjE4LDM4IEBACiAJCQllbHNlCiAJCQkJc29ja19zZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7Ci0JCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJCX0gZWxzZSB7CiAJCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKIAkJCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFNPX1RJTUVTVEFNUElORzoKKwkJaWYgKHZhbCAmIH5TT0ZfVElNRVNUQU1QSU5HX01BU0spIHsKKwkJCXJldCA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSk7CisJCWlmICh2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKQorCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLAorCQkJCQkgICAgICBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CisJCWVsc2UKKwkJCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssCisJCQkJCSAgICAgICBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpOworCQlicmVhazsKKwogCWNhc2UgU09fUkNWTE9XQVQ6CiAJCWlmICh2YWwgPCAwKQogCQkJdmFsID0gSU5UX01BWDsKQEAgLTc2OCw2ICs3OTcsMjQgQEAKIAkJdi52YWwgPSBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpOwogCQlicmVhazsKIAorCWNhc2UgU09fVElNRVNUQU1QSU5HOgorCQl2LnZhbCA9IDA7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOworCQlicmVhazsKKwogCWNhc2UgU09fUkNWVElNRU86CiAJCWx2PXNpemVvZihzdHJ1Y3QgdGltZXZhbCk7CiAJCWlmIChzay0+c2tfcmN2dGltZW8gPT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQpIHsKQEAgLTk2OSw3ICsxMDE2LDggQEAKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwogCX0KIAotCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2spOworCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKKwlzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19vbWVtX2FsbG9jKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcHRtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwKQEAgLTEyNTUsMTAgKzEzMDMsOSBAQAogICoJR2VuZXJpYyBzZW5kL3JlY2VpdmUgYnVmZmVyIGhhbmRsZXJzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9sZW4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLAotCQkJCQkgICAgaW50IG5vYmxvY2ssIGludCAqZXJyY29kZSkKK3N0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sIGludCBub2Jsb2NrLAorCQkJCSAgICAgaW50ICplcnJjb2RlKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJZ2ZwX3QgZ2ZwX21hc2s7CkBAIC0xMzM4LDYgKzEzODUsNyBAQAogCSplcnJjb2RlID0gZXJyOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jX3NlbmRfcHNrYik7CiAKIHN0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfc2tiKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICBpbnQgbm9ibG9jaywgaW50ICplcnJjb2RlKQpAQCAtMTc4Niw3ICsxODM0LDcgQEAKIHsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2stPnNrX3N0YW1wKTsKIAlpZiAodHYudHZfc2VjID09IC0xKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE4MDIsNyArMTg1MCw3IEBACiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2stPnNrX3N0YW1wKTsKIAlpZiAodHMudHZfc2VjID09IC0xKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE4MTQsMTEgKzE4NjIsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29ja19nZXRfdGltZXN0YW1wbnMpOwogCi12b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spCit2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpIHsKLQkJc29ja19zZXRfZmxhZyhzaywgU09DS19USU1FU1RBTVApOwotCQluZXRfZW5hYmxlX3RpbWVzdGFtcCgpOworCWlmICghc29ja19mbGFnKHNrLCBmbGFnKSkgeworCQlzb2NrX3NldF9mbGFnKHNrLCBmbGFnKTsKKwkJLyoKKwkJICogd2UganVzdCBzZXQgb25lIG9mIHRoZSB0d28gZmxhZ3Mgd2hpY2ggcmVxdWlyZSBuZXQKKwkJICogdGltZSBzdGFtcGluZywgYnV0IHRpbWUgc3RhbXBpbmcgbWlnaHQgaGF2ZSBiZWVuIG9uCisJCSAqIGFscmVhZHkgYmVjYXVzZSBvZiB0aGUgb3RoZXIgb25lCisJCSAqLworCQlpZiAoIXNvY2tfZmxhZyhzaywKKwkJCQlmbGFnID09IFNPQ0tfVElNRVNUQU1QID8KKwkJCQlTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSA6CisJCQkJU09DS19USU1FU1RBTVApKQorCQkJbmV0X2VuYWJsZV90aW1lc3RhbXAoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggODNkMzM5OC4uN2RiMWRlMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDcyZTBlYmUuLjgzMjIxYWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IDQ1Zjk1ZTUuLjdlYTU1N2IgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0yMCw2ICsyMCw5IEBACiAvKiBXZSBjYW4gc3ByZWFkIGFuIGFjayB2ZWN0b3IgYWNyb3NzIG11bHRpcGxlIG9wdGlvbnMgKi8KICNkZWZpbmUgRENDUF9NQVhfQUNLVkVDX0xFTiAoRENDUF9TSU5HTEVfT1BUX01BWExFTiAqIDIpCiAKKy8qIEVzdGltYXRlZCBtaW5pbXVtIGF2ZXJhZ2UgQWNrIFZlY3RvciBsZW5ndGggLSB1c2VkIGZvciB1cGRhdGluZyBNUFMgKi8KKyNkZWZpbmUgRENDUEFWX01JTl9PUFRMRU4JMTYKKwogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRAkwCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX0VDTl9NQVJLRUQJKDEgPDwgNikKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVECSgzIDw8IDYpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggZjIyMzBmYy4uZDZiYzQ3MyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtNDIsOSArNDIsMTEgQEAKIGV4dGVybiBpbnQgZGNjcF9kZWJ1ZzsKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCSAgRENDUF9QUl9ERUJVRyhkY2NwX2RlYnVnLCBmb3JtYXQsICMjYSkKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Z19jYXQoZm9ybWF0LCBhLi4uKSAgIERDQ1BfUFJJTlRLKGRjY3BfZGVidWcsIGZvcm1hdCwgIyNhKQorI2RlZmluZSBkY2NwX2RlYnVnKGZtdCwgYS4uLikJCSAgZGNjcF9wcl9kZWJ1Z19jYXQoS0VSTl9ERUJVRyBmbXQsICMjYSkKICNlbHNlCiAjZGVmaW5lIGRjY3BfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQogI2RlZmluZSBkY2NwX3ByX2RlYnVnX2NhdChmb3JtYXQsIGEuLi4pCisjZGVmaW5lIGRjY3BfZGVidWcoZm9ybWF0LCBhLi4uKQogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbyBkY2NwX2hhc2hpbmZvOwpAQCAtNjEsMTEgKzYzLDE0IEBACiAgKiAgICAtIERDQ1AtUmVzZXQgICAgd2l0aCBBQ0sgU3ViaGVhZGVyIGFuZCA0IGJ5dGVzIG9mIFJlc2V0IENvZGUgZmllbGRzCiAgKiAgSGVuY2UgYSBzYWZlIHVwcGVyIGJvdW5kIGZvciB0aGUgbWF4aW11bSBvcHRpb24gbGVuZ3RoIGlzIDEwMjAtMjggPSA5OTIKICAqLwotI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZihpbnQpKQorI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZih1aW50MzJfdCkpCiAjZGVmaW5lIERDQ1BfTUFYX1BBQ0tFVF9IRFIgMjgKICNkZWZpbmUgRENDUF9NQVhfT1BUX0xFTiAoTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSIC0gRENDUF9NQVhfUEFDS0VUX0hEUikKICNkZWZpbmUgTUFYX0RDQ1BfSEVBREVSIChNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKyBNQVhfSEVBREVSKQogCisvKiBVcHBlciBib3VuZCBmb3IgaW5pdGlhbCBmZWF0dXJlLW5lZ290aWF0aW9uIG92ZXJoZWFkIChwYWRkZWQgdG8gMzIgYml0cykgKi8KKyNkZWZpbmUgRENDUF9GRUFUTkVHX09WRVJIRUFECSAoMzIgKiBzaXplb2YodWludDMyX3QpKQorCiAjZGVmaW5lIERDQ1BfVElNRVdBSVRfTEVOICg2MCAqIEhaKSAvKiBob3cgbG9uZyB0byB3YWl0IHRvIGRlc3Ryb3kgVElNRS1XQUlUCiAJCQkJICAgICAqIHN0YXRlLCBhYm91dCA2MCBzZWNvbmRzICovCiAKQEAgLTk1LDkgKzEwMCw2IEBACiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXM7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMTsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JldHJpZXMyOwotZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQ7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQ7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF90eF9xbGVuOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3Bfc3luY19yYXRlbGltaXQ7CiAKQEAgLTQwOSwyMyArNDExLDIxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF91cGRhdGVfZ3NyKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcSkKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCWNvbnN0IHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOwogCiAJZHAtPmRjY3BzX2dzciA9IHNlcTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX3N3bCwKLQkJICAgICAgIGRwLT5kY2Nwc19nc3IgKyAxIC0gKGRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgLyA0KSk7Ci0JZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19zd2gsCi0JCSAgICAgICBkcC0+ZGNjcHNfZ3NyICsgKDMgKiBkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93KSAvIDQpOworCS8qIFNlcXVlbmNlIHZhbGlkaXR5IHdpbmRvdyBkZXBlbmRzIG9uIHJlbW90ZSBTZXF1ZW5jZSBXaW5kb3cgKDcuNS4xKSAqLworCWRwLT5kY2Nwc19zd2wgPSBTVUI0OChBREQ0OChkcC0+ZGNjcHNfZ3NyLCAxKSwgZHAtPmRjY3BzX3Jfc2VxX3dpbiAvIDQpOworCWRwLT5kY2Nwc19zd2ggPSBBREQ0OChkcC0+ZGNjcHNfZ3NyLCAoMyAqIGRwLT5kY2Nwc19yX3NlcV93aW4pIC8gNCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3VwZGF0ZV9nc3Moc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKLQlkcC0+ZGNjcHNfYXdoID0gZHAtPmRjY3BzX2dzcyA9IHNlcTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX2F3bCwKLQkJICAgICAgIChkcC0+ZGNjcHNfZ3NzIC0KLQkJCWRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyArIDEpKTsKKwlkcC0+ZGNjcHNfZ3NzID0gc2VxOworCS8qIEFjayB2YWxpZGl0eSB3aW5kb3cgZGVwZW5kcyBvbiBsb2NhbCBTZXF1ZW5jZSBXaW5kb3cgdmFsdWUgKDcuNS4xKSAqLworCWRwLT5kY2Nwc19hd2wgPSBTVUI0OChBREQ0OChkcC0+ZGNjcHNfZ3NzLCAxKSwgZHAtPmRjY3BzX2xfc2VxX3dpbik7CisJZHAtPmRjY3BzX2F3aCA9IGRwLT5kY2Nwc19nc3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrX3BlbmRpbmcoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZmVhdC5jIGIvbmV0L2RjY3AvZmVhdC5jCmluZGV4IDQxNTIzMDguLmIwNDE2MGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2ZlYXQuYworKysgYi9uZXQvZGNjcC9mZWF0LmMKQEAgLTI1LDYgKzI1LDExIEBACiAjaW5jbHVkZSAiY2NpZC5oIgogI2luY2x1ZGUgImZlYXQuaCIKIAorLyogZmVhdHVyZS1zcGVjaWZpYyBzeXNjdGxzIC0gaW5pdGlhbGlzZWQgdG8gdGhlIGRlZmF1bHRzIGZyb20gUkZDIDQzNDAsIDYuNCAqLwordW5zaWduZWQgbG9uZwlzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3cgX19yZWFkX21vc3RseSA9IDEwMDsKK2ludAkJc3lzY3RsX2RjY3BfcnhfY2NpZAkgICAgX19yZWFkX21vc3RseSA9IDIsCisJCXN5c2N0bF9kY2NwX3R4X2NjaWQJICAgIF9fcmVhZF9tb3N0bHkgPSAyOworCiAvKgogICogRmVhdHVyZSBhY3RpdmF0aW9uIGhhbmRsZXJzLgogICoKQEAgLTUxLDggKzU2LDE3IEBACiAKIHN0YXRpYyBpbnQgZGNjcF9oZGxyX3NlcV93aW4oc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxX3dpbiwgYm9vbCByeCkKIHsKLQlpZiAoIXJ4KQotCQlkY2NwX21zayhzayktPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSBzZXFfd2luOworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisKKwlpZiAocngpIHsKKwkJZHAtPmRjY3BzX3Jfc2VxX3dpbiA9IHNlcV93aW47CisJCS8qIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSBTV0wvU1dIICovCisJCWRjY3BfdXBkYXRlX2dzcihzaywgZHAtPmRjY3BzX2dzcik7CisJfSBlbHNlIHsKKwkJZHAtPmRjY3BzX2xfc2VxX3dpbiA9IHNlcV93aW47CisJCS8qIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSBBV0wgKi8KKwkJZGNjcF91cGRhdGVfZ3NzKHNrLCBkcC0+ZGNjcHNfZ3NzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NCw2ICsyMDgsMTAwIEBACiAJcmV0dXJuIGlkeCA8IDAgPyAwIDogZGNjcF9mZWF0X3RhYmxlW2lkeF0uZGVmYXVsdF92YWx1ZTsKIH0KIAorLyoKKyAqCURlYnVnZ2luZyBhbmQgdmVyYm9zZS1wcmludGluZyBzZWN0aW9uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfZm5hbWUoY29uc3QgdTggZmVhdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZV9uYW1lc1tdID0geworCQlbRENDUEZfUkVTRVJWRURdCT0gIlJlc2VydmVkIiwKKwkJW0RDQ1BGX0NDSURdCQk9ICJDQ0lEIiwKKwkJW0RDQ1BGX1NIT1JUX1NFUU5PU10JPSAiQWxsb3cgU2hvcnQgU2Vxbm9zIiwKKwkJW0RDQ1BGX1NFUVVFTkNFX1dJTkRPV10JPSAiU2VxdWVuY2UgV2luZG93IiwKKwkJW0RDQ1BGX0VDTl9JTkNBUEFCTEVdCT0gIkVDTiBJbmNhcGFibGUiLAorCQlbRENDUEZfQUNLX1JBVElPXQk9ICJBY2sgUmF0aW8iLAorCQlbRENDUEZfU0VORF9BQ0tfVkVDVE9SXQk9ICJTZW5kIEFDSyBWZWN0b3IiLAorCQlbRENDUEZfU0VORF9ORFBfQ09VTlRdCT0gIlNlbmQgTkRQIENvdW50IiwKKwkJW0RDQ1BGX01JTl9DU1VNX0NPVkVSXQk9ICJNaW4uIENzdW0gQ292ZXJhZ2UiLAorCQlbRENDUEZfREFUQV9DSEVDS1NVTV0JPSAiU2VuZCBEYXRhIENoZWNrc3VtIiwKKwl9OworCWlmIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJiBmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCisJCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKKworCWlmIChmZWF0ID09ICBEQ0NQRl9TRU5EX0xFVl9SQVRFKQorCQlyZXR1cm4gIlNlbmQgTG9zcyBFdmVudCBSYXRlIjsKKwlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKKwkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKKworCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9mZWF0X3NuYW1lW10gPSB7ICJERUZBVUxUIiwgIklOSVRJQUxJU0lORyIsICJDSEFOR0lORyIsCisJCQkJCSAiVU5TVEFCTEUiLCAiU1RBQkxFIiB9OworCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfb25hbWUoY29uc3QgdTggb3B0KQoreworCXN3aXRjaCAob3B0KSB7CisJY2FzZSBEQ0NQT19DSEFOR0VfTDogIHJldHVybiAiQ2hhbmdlX0wiOworCWNhc2UgRENDUE9fQ09ORklSTV9MOiByZXR1cm4gIkNvbmZpcm1fTCI7CisJY2FzZSBEQ0NQT19DSEFOR0VfUjogIHJldHVybiAiQ2hhbmdlX1IiOworCWNhc2UgRENDUE9fQ09ORklSTV9SOiByZXR1cm4gIkNvbmZpcm1fUiI7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnR2YWwodTggZmVhdF9udW0sIGRjY3BfZmVhdF92YWwgY29uc3QgKnZhbCkKK3sKKwl1OCBpLCB0eXBlID0gZGNjcF9mZWF0X3R5cGUoZmVhdF9udW0pOworCisJaWYgKHZhbCA9PSBOVUxMIHx8ICh0eXBlID09IEZFQVRfU1AgJiYgdmFsLT5zcC52ZWMgPT0gTlVMTCkpCisJCWRjY3BfcHJfZGVidWdfY2F0KCIoTlVMTCkiKTsKKwllbHNlIGlmICh0eXBlID09IEZFQVRfU1ApCisJCWZvciAoaSA9IDA7IGkgPCB2YWwtPnNwLmxlbjsgaSsrKQorCQkJZGNjcF9wcl9kZWJ1Z19jYXQoIiVzJXUiLCBpID8gIiAiIDogIiIsIHZhbC0+c3AudmVjW2ldKTsKKwllbHNlIGlmICh0eXBlID09IEZFQVRfTk4pCisJCWRjY3BfcHJfZGVidWdfY2F0KCIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwtPm5uKTsKKwllbHNlCisJCWRjY3BfcHJfZGVidWdfY2F0KCJ1bmtub3duIHR5cGUgJXUiLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50dmFscyh1OCBmZWF0X251bSwgdTggKmxpc3QsIHU4IGxlbikKK3sKKwl1OCB0eXBlID0gZGNjcF9mZWF0X3R5cGUoZmVhdF9udW0pOworCWRjY3BfZmVhdF92YWwgZnZhbCA9IHsgLnNwLnZlYyA9IGxpc3QsIC5zcC5sZW4gPSBsZW4gfTsKKworCWlmICh0eXBlID09IEZFQVRfTk4pCisJCWZ2YWwubm4gPSBkY2NwX2RlY29kZV92YWx1ZV92YXIobGlzdCwgbGVuKTsKKwlkY2NwX2ZlYXRfcHJpbnR2YWwoZmVhdF9udW0sICZmdmFsKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50X2VudHJ5KHN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgY29uc3QgKmVudHJ5KQoreworCWRjY3BfZGVidWcoIiAgICogJXMgJXMgPSAiLCBlbnRyeS0+aXNfbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisJCQkJICAgIGRjY3BfZmVhdF9mbmFtZShlbnRyeS0+ZmVhdF9udW0pKTsKKwlkY2NwX2ZlYXRfcHJpbnR2YWwoZW50cnktPmZlYXRfbnVtLCAmZW50cnktPnZhbCk7CisJZGNjcF9wcl9kZWJ1Z19jYXQoIiwgc3RhdGU9JXMgJXNcbiIsIGRjY3BfZmVhdF9zbmFtZVtlbnRyeS0+c3RhdGVdLAorCQkJICBlbnRyeS0+bmVlZHNfY29uZmlybSA/ICIoQ29uZmlybSBwZW5kaW5nKSIgOiAiIik7Cit9CisKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBtYW5kYXRvcnkpCWRvIHsJICAgICAgXAorCWRjY3BfcHJfZGVidWcoIiVzKCVzLCAiLCBkY2NwX2ZlYXRfb25hbWUob3B0KSwgZGNjcF9mZWF0X2ZuYW1lKGZlYXQpKTtcCisJZGNjcF9mZWF0X3ByaW50dmFscyhmZWF0LCB2YWwsIGxlbik7CQkJCSAgICAgIFwKKwlkY2NwX3ByX2RlYnVnX2NhdCgiKSAlc1xuIiwgbWFuZGF0b3J5ID8gIiEiIDogIiIpOwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9mbmxpc3QoZm5fbGlzdCkgIHsJCVwKKwljb25zdCBzdHJ1Y3QgZGNjcF9mZWF0X2VudHJ5ICpfX19lbnRyeTsJCVwKKwkJCQkJCQlcCisJZGNjcF9wcl9kZWJ1ZygiTGlzdCBEdW1wOlxuIik7CQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoX19fZW50cnksIGZuX2xpc3QsIG5vZGUpCVwKKwkJZGNjcF9mZWF0X3ByaW50X2VudHJ5KF9fX2VudHJ5KTsJXAorfQorI2Vsc2UJLyogISBDT05GSUdfSVBfRENDUF9ERUJVRyAqLworI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIG1hbmRhdG9yeSkKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbl9saXN0KQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kY2NwX2ZlYXRfYWN0aXZhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgaWR4LAogCQkJCWNvbnN0IGJvb2wgaXNfbG9jYWwsIGRjY3BfZmVhdF92YWwgY29uc3QgKmZ2YWwpCiB7CkBAIC0yMjYsNiArMzM0LDEwIEBACiAJLyogTG9jYXRpb24gaXMgUlggaWYgdGhpcyBpcyBhIGxvY2FsLVJYIG9yIHJlbW90ZS1UWCBmZWF0dXJlICovCiAJcnggPSAoaXNfbG9jYWwgPT0gKGRjY3BfZmVhdF90YWJsZVtpZHhdLnJ4dHggPT0gRkVBVF9BVF9SWCkpOwogCisJZGNjcF9kZWJ1ZygiICAgLT4gYWN0aXZhdGluZyAlcyAlcywgJXN2YWw9JWxsdVxuIiwgcnggPyAiUlgiIDogIlRYIiwKKwkJICAgZGNjcF9mZWF0X2ZuYW1lKGRjY3BfZmVhdF90YWJsZVtpZHhdLmZlYXRfbnVtKSwKKwkJICAgZnZhbCA/ICIiIDogImRlZmF1bHQgIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsKTsKKwogCXJldHVybiBkY2NwX2ZlYXRfdGFibGVbaWR4XS5hY3RpdmF0aW9uX2hkbHIoc2ssIHZhbCwgcngpOwogfQogCkBAIC01MzAsNiArNjQyLDcgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0KKwkJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIHBvcy0+ZmVhdF9udW0sIHB0ciwgbGVuLCAwKTsKIAogCQlpZiAoZGNjcF9pbnNlcnRfZm5fb3B0KHNrYiwgb3B0LCBwb3MtPmZlYXRfbnVtLCBwdHIsIGxlbiwgcnB0KSkKIAkJCXJldHVybiAtMTsKQEAgLTc4Myw2ICs4OTYsNyBAQAogCXdoaWxlIChpLS0pCiAJCWlmIChjY2lkc1tpXSA+IDAgJiYgZGNjcF9mZWF0X3Byb3BhZ2F0ZV9jY2lkKGZuLCBjY2lkc1tpXSwgaSkpCiAJCQlyZXR1cm4gLTE7CisJZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMSw2ICsxMDE1LDggQEAKIAlpZiAobGVuID09IDAgfHwgdHlwZSA9PSBGRUFUX1VOS05PV04pCQkvKiA2LjEgYW5kIDYuNi44ICovCiAJCWdvdG8gdW5rbm93bl9mZWF0dXJlX29yX3ZhbHVlOwogCisJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBpc19tYW5kYXRvcnkpOworCiAJLyoKIAkgKglOZWdvdGlhdGlvbiBvZiBOTiBmZWF0dXJlczogQ2hhbmdlIFIgaXMgaW52YWxpZCwgc28gdGhlcmUgaXMgbm8KIAkgKglzaW11bHRhbmVvdXMgbmVnb3RpYXRpb247IGhlbmNlIHdlIGRvIG5vdCBsb29rIHVwIGluIHRoZSBsaXN0LgpAQCAtMTAwNiw2ICsxMTIyLDggQEAKIAljb25zdCBib29sIGxvY2FsID0gKG9wdCA9PSBEQ0NQT19DT05GSVJNX1IpOwogCXN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgKmVudHJ5ID0gZGNjcF9mZWF0X2xpc3RfbG9va3VwKGZuLCBmZWF0LCBsb2NhbCk7CiAKKwlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIGlzX21hbmRhdG9yeSk7CisKIAlpZiAoZW50cnkgPT0gTlVMTCkgewkvKiBub3RoaW5nIHF1ZXVlZDogaWdub3JlIG9yIGhhbmRsZSBlcnJvciAqLwogCQlpZiAoaXNfbWFuZGF0b3J5ICYmIHR5cGUgPT0gRkVBVF9VTktOT1dOKQogCQkJcmV0dXJuIERDQ1BfUkVTRVRfQ09ERV9NQU5EQVRPUllfRVJST1I7CkBAIC0xMTE1LDIzICsxMjMzLDcwIEBACiAJcmV0dXJuIDA7CS8qIGlnbm9yZSBGTiBvcHRpb25zIGluIGFsbCBvdGhlciBzdGF0ZXMgKi8KIH0KIAorLyoqCisgKiBkY2NwX2ZlYXRfaW5pdCAgLSAgU2VlZCBmZWF0dXJlIG5lZ290aWF0aW9uIHdpdGggaG9zdC1zcGVjaWZpYyBkZWZhdWx0cworICogVGhpcyBpbml0aWFsaXNlcyBnbG9iYWwgZGVmYXVsdHMsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHN5c2N0bHMuCisgKiBUaGVzZSBjYW4gbGF0ZXIgYmUgb3ZlcnJpZGRlbiBieSByZWdpc3RlcmluZyBjaGFuZ2VzIHZpYSBzZXRzb2Nrb3B0IGNhbGxzLgorICogVGhlIGxhc3QgbGluayBpbiB0aGUgY2hhaW4gaXMgZmluYWxpc2Vfc2V0dGluZ3MsIHRvIG1ha2Ugc3VyZSB0aGF0IGJldHdlZW4KKyAqIGhlcmUgYW5kIHRoZSBzdGFydCBvZiBhY3R1YWwgZmVhdHVyZSBuZWdvdGlhdGlvbiBubyBpbmNvbnNpc3RlbmNpZXMgZW50ZXIuCisgKgorICogQWxsIGZlYXR1cmVzIG5vdCBhcHBlYXJpbmcgYmVsb3cgdXNlIGVpdGhlciBkZWZhdWx0cyBvciBhcmUgb3RoZXJ3aXNlCisgKiBsYXRlciBhZGp1c3RlZCB0aHJvdWdoIGRjY3BfZmVhdF9maW5hbGlzZV9zZXR0aW5ncygpLgorICovCiBpbnQgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0Jc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CisJc3RydWN0IGxpc3RfaGVhZCAqZm4gPSAmZGNjcF9zayhzayktPmRjY3BzX2ZlYXRuZWc7CisJdTggb24gPSAxLCBvZmYgPSAwOwogCWludCByYzsKKwlzdHJ1Y3QgeworCQl1OCAqdmFsOworCQl1OCBsZW47CisJfSB0eCwgcng7CiAKLQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX3BlbmRpbmcpOwkvKiBYWFggbm8gbG9uZ2VyIHVzZWQgKi8KLQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX2NvbmYpOwkvKiBYWFggbm8gbG9uZ2VyIHVzZWQgKi8KKwkvKiBOb24tbmVnb3RpYWJsZSAoTk4pIGZlYXR1cmVzICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfbm4oZm4sIERDQ1BGX1NFUVVFTkNFX1dJTkRPVywgMCwKKwkJCQkgICAgc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCS8qIEFjayByYXRpbyAqLwotCXJjID0gX19mZWF0X3JlZ2lzdGVyX25uKCZkcC0+ZGNjcHNfZmVhdG5lZywgRENDUEZfQUNLX1JBVElPLCAwLAotCQkJCWRwLT5kY2Nwc19sX2Fja19yYXRpbyk7CisJLyogU2VydmVyLXByaW9yaXR5IChTUCkgZmVhdHVyZXMgKi8KKworCS8qIEFkdmVydGlzZSB0aGF0IHNob3J0IHNlcW5vcyBhcmUgbm90IHN1cHBvcnRlZCAoNy42LjEpICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX1NIT1JUX1NFUU5PUywgdHJ1ZSwgdHJ1ZSwgJm9mZiwgMSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBSRkMgNDM0MCAxMi4xOiAiSWYgYSBEQ0NQIGlzIG5vdCBFQ04gY2FwYWJsZSwgLi4uIiAqLworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9FQ05fSU5DQVBBQkxFLCB0cnVlLCB0cnVlLCAmb24sIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyoKKwkgKiBXZSBhZHZlcnRpc2UgdGhlIGF2YWlsYWJsZSBsaXN0IG9mIENDSURzIGFuZCByZW9yZGVyIGFjY29yZGluZyB0bworCSAqIHByZWZlcmVuY2VzLCB0byBhdm9pZCBmYWlsdXJlIHJlc3VsdGluZyBmcm9tIG5lZ290aWF0aW5nIGRpZmZlcmVudAorCSAqIHNpbmdsZXRvbiB2YWx1ZXMgKHdoaWNoIGFsd2F5cyBsZWFkcyB0byBmYWlsdXJlKS4KKwkgKiBUaGVzZSBzZXR0aW5ncyBjYW4gc3RpbGwgKGxhdGVyKSBiZSBvdmVycmlkZGVuIHZpYSBzb2Nrb3B0cy4KKwkgKi8KKwlpZiAoY2NpZF9nZXRfYnVpbHRpbl9jY2lkcygmdHgudmFsLCAmdHgubGVuKSB8fAorCSAgICBjY2lkX2dldF9idWlsdGluX2NjaWRzKCZyeC52YWwsICZyeC5sZW4pKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlpZiAoIWRjY3BfZmVhdF9wcmVmZXIoc3lzY3RsX2RjY3BfdHhfY2NpZCwgdHgudmFsLCB0eC5sZW4pIHx8CisJICAgICFkY2NwX2ZlYXRfcHJlZmVyKHN5c2N0bF9kY2NwX3J4X2NjaWQsIHJ4LnZhbCwgcngubGVuKSkKKwkJZ290byBmcmVlX2NjaWRfbGlzdHM7CisKKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfQ0NJRCwgdHJ1ZSwgZmFsc2UsIHR4LnZhbCwgdHgubGVuKTsKKwlpZiAocmMpCisJCWdvdG8gZnJlZV9jY2lkX2xpc3RzOworCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX0NDSUQsIGZhbHNlLCBmYWxzZSwgcngudmFsLCByeC5sZW4pOworCitmcmVlX2NjaWRfbGlzdHM6CisJa2ZyZWUodHgudmFsKTsKKwlrZnJlZShyeC52YWwpOwogCXJldHVybiByYzsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9mZWF0X2luaXQpOwotCiBpbnQgZGNjcF9mZWF0X2FjdGl2YXRlX3ZhbHVlcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKmZuX2xpc3QpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTExNTYsOSArMTMyMSwxMCBAQAogCQkJZ290byBhY3RpdmF0aW9uX2ZhaWxlZDsKIAkJfQogCQlpZiAoY3VyLT5zdGF0ZSAhPSBGRUFUX1NUQUJMRSkgewotCQkJRENDUF9DUklUKCJOZWdvdGlhdGlvbiBvZiAlcyAldSBmYWlsZWQgaW4gc3RhdGUgJXUiLAorCQkJRENDUF9DUklUKCJOZWdvdGlhdGlvbiBvZiAlcyAlcyBmYWlsZWQgaW4gc3RhdGUgJXMiLAogCQkJCSAgY3VyLT5pc19sb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLQkJCQkgIGN1ci0+ZmVhdF9udW0sIGN1ci0+c3RhdGUpOworCQkJCSAgZGNjcF9mZWF0X2ZuYW1lKGN1ci0+ZmVhdF9udW0pLAorCQkJCSAgZGNjcF9mZWF0X3NuYW1lW2N1ci0+c3RhdGVdKTsKIAkJCWdvdG8gYWN0aXZhdGlvbl9mYWlsZWQ7CiAJCX0KIAkJZnZhbHNbaWR4XVtjdXItPmlzX2xvY2FsXSA9ICZjdXItPnZhbDsKQEAgLTExOTksNDMgKzEzNjUsMyBAQAogCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBOVUxMOwogCXJldHVybiAtMTsKIH0KLQotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi1jb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSkKLXsKLQlzd2l0Y2godHlwZSkgewotCWNhc2UgRENDUE9fQ0hBTkdFX0w6ICByZXR1cm4oIkNoYW5nZUwiKTsKLQljYXNlIERDQ1BPX0NPTkZJUk1fTDogcmV0dXJuKCJDb25maXJtTCIpOwotCWNhc2UgRENDUE9fQ0hBTkdFX1I6ICByZXR1cm4oIkNoYW5nZVIiKTsKLQljYXNlIERDQ1BPX0NPTkZJUk1fUjogcmV0dXJuKCJDb25maXJtUiIpOwotCS8qIHRoZSBmb2xsb3dpbmcgY2FzZSBtdXN0IG5vdCBhcHBlYXIgaW4gZmVhdHVyZSBuZWdvdGF0aW9uICAqLwotCWRlZmF1bHQ6CSAgICAgIGRjY3BfcHJfZGVidWcoInVua25vd24gdHlwZSAlZCBbQlVHIV1cbiIsIHR5cGUpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgY2hhciAqZGNjcF9mZWF0X25hbWUoY29uc3QgdTggZmVhdCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZV9uYW1lc1tdID0gewotCQlbRENDUEZfUkVTRVJWRURdCT0gIlJlc2VydmVkIiwKLQkJW0RDQ1BGX0NDSURdCQk9ICJDQ0lEIiwKLQkJW0RDQ1BGX1NIT1JUX1NFUU5PU10JPSAiQWxsb3cgU2hvcnQgU2Vxbm9zIiwKLQkJW0RDQ1BGX1NFUVVFTkNFX1dJTkRPV10JPSAiU2VxdWVuY2UgV2luZG93IiwKLQkJW0RDQ1BGX0VDTl9JTkNBUEFCTEVdCT0gIkVDTiBJbmNhcGFibGUiLAotCQlbRENDUEZfQUNLX1JBVElPXQk9ICJBY2sgUmF0aW8iLAotCQlbRENDUEZfU0VORF9BQ0tfVkVDVE9SXQk9ICJTZW5kIEFDSyBWZWN0b3IiLAotCQlbRENDUEZfU0VORF9ORFBfQ09VTlRdCT0gIlNlbmQgTkRQIENvdW50IiwKLQkJW0RDQ1BGX01JTl9DU1VNX0NPVkVSXQk9ICJNaW4uIENzdW0gQ292ZXJhZ2UiLAotCQlbRENDUEZfREFUQV9DSEVDS1NVTV0JPSAiU2VuZCBEYXRhIENoZWNrc3VtIiwKLQl9OwotCWlmIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJiBmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCi0JCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKLQotCWlmIChmZWF0ID09ICBEQ0NQRl9TRU5EX0xFVl9SQVRFKQotCQlyZXR1cm4gIlNlbmQgTG9zcyBFdmVudCBSYXRlIjsKLQlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKLQkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKLQotCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOwotfQotI2VuZGlmIC8qIENPTkZJR19JUF9EQ0NQX0RFQlVHICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmggYi9uZXQvZGNjcC9mZWF0LmgKaW5kZXggOWI0NmUyYS4uZjk2NzIxNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5oCisrKyBiL25ldC9kY2NwL2ZlYXQuaApAQCAtMTAwLDI2ICsxMDAsMjEgQEAKIAl1OAl2YWw7CiB9OwogCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLWV4dGVybiBjb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSk7Ci1leHRlcm4gY29uc3QgY2hhciAqZGNjcF9mZWF0X25hbWUoY29uc3QgdTggZmVhdCk7CisvKgorICogU3lzY3RscyB0byBzZWVkIGRlZmF1bHRzIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdzsKK2V4dGVybiBpbnQJICAgICBzeXNjdGxfZGNjcF9yeF9jY2lkOworZXh0ZXJuIGludAkgICAgIHN5c2N0bF9kY2NwX3R4X2NjaWQ7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2ZlYXRfZGVidWcoY29uc3QgdTggdHlwZSwgY29uc3QgdTggZmVhdCwgY29uc3QgdTggdmFsKQotewotCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksICVkKVxuIiwgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAotCQkJCQkgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgdmFsKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGRjY3BfZmVhdF9kZWJ1Zyh0eXBlLCBmZWF0LCB2YWwpCi0jZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KLQorZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRjY3BfZmVhdF9pbml0aWFsaXNlX3N5c2N0bHModm9pZCk7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcmVnaXN0ZXJfc3Aoc3RydWN0IHNvY2sgKnNrLCB1OCBmZWF0LCB1OCBpc19sb2NhbCwKIAkJCQkgIHU4IGNvbnN0ICpsaXN0LCB1OCBsZW4pOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X3JlZ2lzdGVyX25uKHN0cnVjdCBzb2NrICpzaywgdTggZmVhdCwgdTY0IHZhbCk7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKiwKIAkJCQkgICAgdTggbWFuZCwgdTggb3B0LCB1OCBmZWF0LCB1OCAqdmFsLCB1OCBsZW4pOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X2Nsb25lX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCBjb25zdCAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopOwotZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKTsKIAogLyoKICAqIEVuY29kaW5nIHZhcmlhYmxlLWxlbmd0aCBvcHRpb25zIGFuZCB0aGVpciBtYXhpbXVtIGxlbmd0aC4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL21pbmlzb2Nrcy5jIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKaW5kZXggNjgyMWFlMy4uNWNhNDljZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTQyLDExICs0Miw2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZGVhdGhfcm93KTsKIAotdm9pZCBkY2NwX21pbmlzb2NrX2luaXQoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2spCi17Ci0JZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwotfQotCiB2b2lkIGRjY3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOwpAQCAtMTEwLDcgKzEwNSw2IEBACiAJCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzayA9IGluZXRfY3NrKG5ld3NrKTsKIAkJc3RydWN0IGRjY3Bfc29jayAqbmV3ZHAgPSBkY2NwX3NrKG5ld3NrKTsKLQkJc3RydWN0IGRjY3BfbWluaXNvY2sgKm5ld2Rtc2sgPSBkY2NwX21zayhuZXdzayk7CiAKIAkJbmV3ZHAtPmRjY3BzX3JvbGUJICAgID0gRENDUF9ST0xFX1NFUlZFUjsKIAkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAgID0gTlVMTDsKQEAgLTEyOCwxMCArMTIyLDYgQEAKIAkJICogICAgSW5pdGlhbGl6ZSBTLkdBUiA6PSBTLklTUwogCQkgKiAgICBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdCBDb29raWVzCiAJCSAqLwotCi0JCS8qIFNlZSBkY2NwX3Y0X2Nvbm5fcmVxdWVzdCAqLwotCQluZXdkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gcmVxLT5yY3Zfd25kOwotCiAJCW5ld2RwLT5kY2Nwc19nYXIgPSBuZXdkcC0+ZGNjcHNfaXNzID0gZHJlcS0+ZHJlcV9pc3M7CiAJCWRjY3BfdXBkYXRlX2dzcyhuZXdzaywgZHJlcS0+ZHJlcV9pc3MpOwogCkBAIC0yOTAsNyArMjgwLDYgQEAKIAlpbmV0X3JzayhyZXEpLT5ybXRfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQ7CiAJaW5ldF9yc2socmVxKS0+bG9jX3BvcnQJICA9IGRjY3BfaGRyKHNrYiktPmRjY3BoX2Rwb3J0OwogCWluZXRfcnNrKHJlcSktPmFja2VkCSAgPSAwOwotCXJlcS0+cmN2X3duZAkJICA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwogCWRyZXEtPmRyZXFfdGltZXN0YW1wX2VjaG8gPSAwOwogCiAJLyogaW5oZXJpdCBmZWF0dXJlIG5lZ290aWF0aW9uIG9wdGlvbnMgZnJvbSBsaXN0ZW5pbmcgc29ja2V0ICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggN2IxMTY1Yy4uMWIwOGNhZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMjMsMTAgKzIzLDYgQEAKICNpbmNsdWRlICJkY2NwLmgiCiAjaW5jbHVkZSAiZmVhdC5oIgogCi1pbnQgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3cgPSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVzsKLWludCBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7Ci1pbnQgc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkCSAgICAgID0gRENDUEZfSU5JVElBTF9DQ0lEOwotCiB1NjQgZGNjcF9kZWNvZGVfdmFsdWVfdmFyKGNvbnN0IHU4ICpiZiwgY29uc3QgdTggbGVuKQogewogCXU2NCB2YWx1ZSA9IDA7CkBAIC01MDIsMTAgKzQ5OCw2IEBACiAJCSp0bysrID0gKnZhbDsKIAlpZiAobGVuKQogCQltZW1jcHkodG8sIHZhbCwgbGVuKTsKLQotCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksIC4uLiksIGxlbmd0aCAlZFxuIiwKLQkJICAgICAgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAotCQkgICAgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCAyMmE2MThhLi4zNmJjYzAwIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMTYxLDIxICsxNjEsMjcgQEAKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAl1MzIgY2NtcHMgPSBkY2NwX2RldGVybWluZV9jY21wcyhkcCk7Ci0JaW50IGN1cl9tcHMgPSBjY21wcyA/IG1pbihwbXR1LCBjY21wcykgOiBwbXR1OworCXUzMiBjdXJfbXBzID0gY2NtcHMgPyBtaW4ocG10dSwgY2NtcHMpIDogcG10dTsKIAogCS8qIEFjY291bnQgZm9yIGhlYWRlciBsZW5ndGhzIGFuZCBJUHY0L3Y2IG9wdGlvbiBvdmVyaGVhZCAqLwogCWN1cl9tcHMgLT0gKGljc2stPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiArIGljc2stPmljc2tfZXh0X2hkcl9sZW4gKwogCQkgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKyBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkpOwogCiAJLyoKLQkgKiBGSVhNRTogdGhpcyBzaG91bGQgY29tZSBmcm9tIHRoZSBDQ0lEIGluZnJhc3RydWN0dXJlLCB3aGVyZSwgc2F5LAotCSAqIFRGUkMgd2lsbCBzYXkgaXQgd2FudHMgVElNRVNUQU1QUywgRUxBUFNFRCB0aW1lLCBldGMsIGZvciBub3cgbGV0cwotCSAqIHB1dCBhIHJvdWdoIGVzdGltYXRlIGZvciBORFAgKyBUSU1FU1RBTVAgKyBUSU1FU1RBTVBfRUNITyArIEVMQVBTRUQKLQkgKiBUSU1FICsgVEZSQ19PUFRfTE9TU19FVkVOVF9SQVRFICsgVEZSQ19PUFRfUkVDRUlWRV9SQVRFICsgcGFkZGluZyB0bwotCSAqIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiA0CisJICogTGVhdmUgZW5vdWdoIGhlYWRyb29tIGZvciBjb21tb24gRENDUCBoZWFkZXIgb3B0aW9ucy4KKwkgKiBUaGlzIG9ubHkgY29uc2lkZXJzIG9wdGlvbnMgd2hpY2ggbWF5IGFwcGVhciBvbiBEQ0NQLURhdGEgcGFja2V0cywgYXMKKwkgKiBwZXIgdGFibGUgMyBpbiBSRkMgNDM0MCwgNS44LiBXaGVuIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIGZvciBvdGhlcgorCSAqIG9wdGlvbnMgKGVnLiBBY2sgVmVjdG9yIHdoaWNoIGNhbiB0YWtlIHVwIHRvIDI1NSBieXRlcyksIGl0IGlzIGJldHRlcgorCSAqIHRvIHNjaGVkdWxlIGEgc2VwYXJhdGUgQWNrLiBUaHVzIHdlIGxlYXZlIGhlYWRyb29tIGZvciB0aGUgZm9sbG93aW5nOgorCSAqICAtIDEgYnl0ZSBmb3IgU2xvdyBSZWNlaXZlciAoMTEuNikKKwkgKiAgLSA2IGJ5dGVzIGZvciBUaW1lc3RhbXAgKDEzLjEpCisJICogIC0gMTAgYnl0ZXMgZm9yIFRpbWVzdGFtcCBFY2hvICgxMy4zKQorCSAqICAtIDggYnl0ZXMgZm9yIE5EUCBjb3VudCAoNy43LCB3aGVuIGFjdGl2YXRlZCkKKwkgKiAgLSA2IGJ5dGVzIGZvciBEYXRhIENoZWNrc3VtICg5LjMpCisJICogIC0gJURDQ1BBVl9NSU5fT1BUTEVOIGJ5dGVzIGZvciBBY2sgVmVjdG9yIHNpemUgKDExLjQsIHdoZW4gZW5hYmxlZCkKIAkgKi8KLQotCWN1cl9tcHMgLT0gcm91bmR1cCg1ICsgNiArIDEwICsgNiArIDYgKyA2LCA0KTsKKwljdXJfbXBzIC09IHJvdW5kdXAoMSArIDYgKyAxMCArIGRwLT5kY2Nwc19zZW5kX25kcF9jb3VudCAqIDggKyA2ICsKKwkJCSAgIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID8gRENDUEFWX01JTl9PUFRMRU4gOiAwKSwgNCk7CiAKIAkvKiBBbmQgc3RvcmUgY2FjaGVkIHJlc3VsdHMgKi8KIAlpY3NrLT5pY3NrX3BtdHVfY29va2llID0gcG10dTsKQEAgLTI3MCw3ICsyNzYsMjAgQEAKIAkJCWNvbnN0IGludCBsZW4gPSBza2ItPmxlbjsKIAogCQkJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKSB7Ci0JCQkJLyogU2VlIDguMS41LiAgSGFuZHNoYWtlIENvbXBsZXRpb24gKi8KKwkJCQljb25zdCB1MzIgY3VyX21wcyA9IGRwLT5kY2Nwc19tc3NfY2FjaGUgLSBEQ0NQX0ZFQVRORUdfT1ZFUkhFQUQ7CisJCQkJLyoKKwkJCQkgKiBTZWUgOC4xLjUgLSBIYW5kc2hha2UgQ29tcGxldGlvbi4KKwkJCQkgKgorCQkJCSAqIEZvciByb2J1c3RuZXNzIHdlIHJlc2VuZCBDb25maXJtIG9wdGlvbnMgdW50aWwgdGhlIGNsaWVudCBoYXMKKwkJCQkgKiBlbnRlcmVkIE9QRU4uIER1cmluZyB0aGUgaW5pdGlhbCBmZWF0dXJlIG5lZ290aWF0aW9uLCB0aGUgTVBTCisJCQkJICogaXMgc21hbGxlciB0aGFuIHVzdWFsLCByZWR1Y2VkIGJ5IHRoZSBDaGFuZ2UvQ29uZmlybSBvcHRpb25zLgorCQkJCSAqLworCQkJCWlmICghbGlzdF9lbXB0eSgmZHAtPmRjY3BzX2ZlYXRuZWcpICYmIGxlbiA+IGN1cl9tcHMpIHsKKwkJCQkJRENDUF9XQVJOKCJQYXlsb2FkIHRvbyBsYXJnZSAoJWQpIGZvciBmZWF0bmVnLlxuIiwgbGVuKTsKKwkJCQkJZGNjcF9zZW5kX2Fjayhzayk7CisJCQkJCWRjY3BfZmVhdF9saXN0X3B1cmdlKCZkcC0+ZGNjcHNfZmVhdG5lZyk7CisJCQkJfQorCiAJCQkJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNrKTsKIAkJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfREFDSywKIAkJCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX3J0bywKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDk0NWI0ZDUuLjMxNGExYjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtMTc0LDggKzE3NCw2IEBACiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKLQlkY2NwX21pbmlzb2NrX2luaXQoJmRwLT5kY2Nwc19taW5pc29jayk7Ci0KIAlpY3NrLT5pY3NrX3J0bwkJPSBEQ0NQX1RJTUVPVVRfSU5JVDsKIAlpY3NrLT5pY3NrX3N5bl9yZXRyaWVzCT0gc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOwogCXNrLT5za19zdGF0ZQkJPSBEQ0NQX0NMT1NFRDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3N5c2N0bC5jIGIvbmV0L2RjY3Avc3lzY3RsLmMKaW5kZXggMDE4ZTIxMC4uYTVhMTg1NiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avc3lzY3RsLmMKKysrIGIvbmV0L2RjY3Avc3lzY3RsLmMKQEAgLTE4LDU1ICsxOCw3MiBAQAogI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGNvbXBpbGVkIHdpdGhvdXQgQ09ORklHX1NZU0NUTCBkZWZpbmVkCiAjZW5kaWYKIAorLyogQm91bmRhcnkgdmFsdWVzICovCitzdGF0aWMgaW50CQl6ZXJvICAgICA9IDAsCisJCQl1OF9tYXggICA9IDB4RkY7CitzdGF0aWMgdW5zaWduZWQgbG9uZwlzZXF3X21pbiA9IDMyOworCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX2RlZmF1bHRfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICJzZXFfd2luZG93IiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93LAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdyksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3csCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmc2Vxd19taW4sCQkvKiBSRkMgNDM0MCwgNy41LjIgKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJ4X2NjaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcnhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcnhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwJCS8qIFJGQyA0MzQwLCAxMC4gKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInR4X2NjaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwJCS8qIFJGQyA0MzQwLCAxMC4gKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJlcXVlc3RfcmV0cmllcyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXMsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJldHJpZXMxIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JldHJpZXMxLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXRyaWVzMSksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJldHJpZXMyIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JldHJpZXMyLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXRyaWVzMiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInR4X3FsZW4iLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfcWxlbiwKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfcWxlbiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJzeW5jX3JhdGVsaW1pdCIsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCBjZjBlMTg0Li45NjQ3ZDkxIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTEyNDYsMTEgKzEyNDYsMTIgQEAKIAogCWNhc2UgVElPQ0lOUToKIAkJbG9ja19zb2NrKHNrKTsKLQkJaWYgKChza2IgPSBza2JfcGVlaygmc2NwLT5vdGhlcl9yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgeworCQlza2IgPSBza2JfcGVlaygmc2NwLT5vdGhlcl9yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKHNrYikgewogCQkJYW1vdW50ID0gc2tiLT5sZW47CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2stPnNrX3JlY2VpdmVfcXVldWUubmV4dDsKLQkJCWZvcig7OykgeworCQkJc2tiID0gc2stPnNrX3JlY2VpdmVfcXVldWUubmV4dDsKKwkJCWZvciAoOzspIHsKIAkJCQlpZiAoc2tiID09CiAJCQkJICAgIChzdHJ1Y3Qgc2tfYnVmZiAqKSZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkKIAkJCQkJYnJlYWs7CkBAIC0xNTc5LDE2ICsxNTgwLDE2IEBACiAJCWRlZmF1bHQ6CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCQl7Ci0JCQlpbnQgdmFsLCBsZW47CisJCQlpbnQgcmV0LCBsZW47CiAKIAkJCWlmKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJdmFsID0gbmZfZ2V0c29ja29wdChzaywgUEZfREVDbmV0LCBvcHRuYW1lLAorCQkJcmV0ID0gbmZfZ2V0c29ja29wdChzaywgUEZfREVDbmV0LCBvcHRuYW1lLAogCQkJCQkJCW9wdHZhbCwgJmxlbik7Ci0JCQlpZiAodmFsID49IDApCi0JCQkJdmFsID0gcHV0X3VzZXIobGVuLCBvcHRsZW4pOwotCQkJcmV0dXJuIHZhbDsKKwkJCWlmIChyZXQgPj0gMCkKKwkJCQlyZXQgPSBwdXRfdXNlcihsZW4sIG9wdGxlbik7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAjZW5kaWYKIAkJY2FzZSBEU09fU1RSRUFNOgpAQCAtMjA3MSw4ICsyMDcyLDcgQEAKIAl9CiBvdXQ6CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJlbGVhc2Vfc29jayhzayk7CiAKQEAgLTIxMTIsOSArMjExMiw4IEBACiAKIGV4dGVybiBpbnQgZG5fcm91dGVfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkbl9kaXhfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9ETkFfUlQpLAotCS5kZXYgPQkJTlVMTCwJCS8qIEFsbCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRuX2RpeF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JCWNwdV90b19iZTE2KEVUSF9QX0ROQV9SVCksCiAJLmZ1bmMgPQkJZG5fcm91dGVfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9kZXYuYyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKaW5kZXggZGFmMmI5OC4uMWM2YTViYiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9kZXYuYworKysgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCkBAIC02ODQsNyArNjg0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKGRuX2RiID0gZGV2LT5kbl9wdHIpID09IE5VTEwpIHsKLQkJaW50IGVycjsKIAkJZG5fZGIgPSBkbl9kZXZfY3JlYXRlKGRldiwgJmVycik7CiAJCWlmICghZG5fZGIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtNzY5LDcgKzc2OCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9JRkFERFIsIGVycik7CkBAIC0xMzIyLDYgKzEzMjIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqZG5fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTM2NCw2ICsxMzY1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZG5fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmRldl9iYXNlX2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IGM3NTQ2NzAuLjBjYzQzOTQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgZG5fZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCVBGX0RFQ25ldCwKLQkucHJvdG9jb2wgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9ETkFfUlQpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9ETkFfUlQpLAogCS5nY190aHJlc2ggPQkJMTI4LAogCS5nYyA9CQkJZG5fZHN0X2djLAogCS5jaGVjayA9CQlkbl9kc3RfY2hlY2ssCkBAIC0zODAsNyArMzgwLDYgQEAKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAJX19sZTE2ICpzcmM7CiAJX19sZTE2ICpkc3Q7Ci0JX19sZTE2IHRtcDsKIAogCS8qIEFkZCBiYWNrIGhlYWRlcnMgKi8KIAlza2JfcHVzaChza2IsIHNrYi0+ZGF0YSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTsKQEAgLTM5OSwxMCArMzk4LDcgQEAKIAlwdHIgKz0gMjsKIAkqcHRyID0gMDsgLyogWmVybyBob3AgY291bnQgKi8KIAotCS8qIFN3YXAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAqLwotCXRtcCAgPSAqc3JjOwotCSpzcmMgPSAqZHN0OwotCSpkc3QgPSB0bXA7CisJc3dhcCgqc3JjLCAqZHN0KTsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1VUR09JTkc7CiAJZG5fcnRfZmluaXNoX291dHB1dChza2IsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl90YWJsZS5jIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCmluZGV4IDY5YWQ5MjguLjY3MDU0YjAgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fdGFibGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKQEAgLTM3NSw3ICszNzUsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKCZpbml0X25ldCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKaW5kZXggOTY1Mzk3YS4uNWJjZDU5MiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJfQogCiAJaWYgKHdyaXRlKSB7Ci0JCWludCBsZW4gPSAoKmxlbnAgPCBETl9BU0NCVUZfTEVOKSA/ICpsZW5wIDogKEROX0FTQ0JVRl9MRU4tMSk7CisJCWxlbiA9ICgqbGVucCA8IEROX0FTQ0JVRl9MRU4pID8gKmxlbnAgOiAoRE5fQVNDQlVGX0xFTi0xKTsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoYWRkciwgYnVmZmVyLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggNDkyMTFiMy4uYzUxYjU1NCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtNDEsMTMgKzQxLDEzIEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEzMQotCWJvb2wgIk1hcnZlbGwgODhFNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgorCWJvb2wgIk1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVCiAJc2VsZWN0IE5FVF9EU0FfVEFHX0RTQQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MTMxIGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEKKwkgIGV0aGVybmV0IHN3aXRjaCBjaGlwcy4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTIzXzYxXzY1CiAJYm9vbCAiTWFydmVsbCA4OEU2MTIzLzYxNjEvNjE2NSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2EuYyBiL25ldC9kc2EvZHNhLmMKaW5kZXggMzNlOTk0Ni4uNzE0ODlmNiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2EuYworKysgYi9uZXQvZHNhL2RzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvZHNhLmMgLSBIYXJkd2FyZSBzd2l0Y2ggaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjcsMTIgKzY3LDEzIEBACiAKIC8qIGJhc2ljIHN3aXRjaCBvcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBkc2Ffc3dpdGNoICoKLWRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKnBkLAotCQkgc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2RzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LCBpbnQgaW5kZXgsCisJCSBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBtaWlfYnVzICpidXMpCiB7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEgKnBkID0gZHN0LT5wZC0+Y2hpcCArIGluZGV4OworCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciAqZHJ2OwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAlpbnQgcmV0OwotCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciAqZHJ2OwogCWNoYXIgKm5hbWU7CiAJaW50IGk7CiAKQEAgLTgxLDExICs4MiwxMiBAQAogCSAqLwogCWRydiA9IGRzYV9zd2l0Y2hfcHJvYmUoYnVzLCBwZC0+c3dfYWRkciwgJm5hbWUpOwogCWlmIChkcnYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgZGV0ZWN0IGF0dGFjaGVkIHN3aXRjaFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjb3VsZCBub3QgZGV0ZWN0IGF0dGFjaGVkIHN3aXRjaFxuIiwKKwkJICAgICAgIGRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwgaW5kZXgpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRldGVjdGVkIGEgJXMgc3dpdGNoXG4iLCBkZXYtPm5hbWUsIG5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzWyVkXTogZGV0ZWN0ZWQgYSAlcyBzd2l0Y2hcbiIsCisJCWRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwgaW5kZXgsIG5hbWUpOwogCiAKIAkvKgpAQCAtOTUsMTggKzk3LDE2IEBACiAJaWYgKGRzID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZHMtPnBkID0gcGQ7Ci0JZHMtPm1hc3Rlcl9uZXRkZXYgPSBkZXY7Ci0JZHMtPm1hc3Rlcl9taWlfYnVzID0gYnVzOwotCisJZHMtPmRzdCA9IGRzdDsKKwlkcy0+aW5kZXggPSBpbmRleDsKKwlkcy0+cGQgPSBkc3QtPnBkLT5jaGlwICsgaW5kZXg7CiAJZHMtPmRydiA9IGRydjsKLQlkcy0+dGFnX3Byb3RvY29sID0gZHJ2LT50YWdfcHJvdG9jb2w7CisJZHMtPm1hc3Rlcl9taWlfYnVzID0gYnVzOwogCiAKIAkvKgogCSAqIFZhbGlkYXRlIHN1cHBsaWVkIHN3aXRjaCBjb25maWd1cmF0aW9uLgogCSAqLwotCWRzLT5jcHVfcG9ydCA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBEU0FfTUFYX1BPUlRTOyBpKyspIHsKIAkJY2hhciAqbmFtZTsKIApAQCAtMTE1LDMyICsxMTUsMjggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghc3RyY21wKG5hbWUsICJjcHUiKSkgewotCQkJaWYgKGRzLT5jcHVfcG9ydCAhPSAtMSkgeworCQkJaWYgKGRzdC0+Y3B1X3N3aXRjaCAhPSAtMSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAibXVsdGlwbGUgY3B1IHBvcnRzPyFcbiIpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlkcy0+Y3B1X3BvcnQgPSBpOworCQkJZHN0LT5jcHVfc3dpdGNoID0gaW5kZXg7CisJCQlkc3QtPmNwdV9wb3J0ID0gaTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJkc2EiKSkgeworCQkJZHMtPmRzYV9wb3J0X21hc2sgfD0gMSA8PCBpOwogCQl9IGVsc2UgewotCQkJZHMtPnZhbGlkX3BvcnRfbWFzayB8PSAxIDw8IGk7CisJCQlkcy0+cGh5c19wb3J0X21hc2sgfD0gMSA8PCBpOwogCQl9CiAJfQogCi0JaWYgKGRzLT5jcHVfcG9ydCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vIGNwdSBwb3J0PyFcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAogCS8qCi0JICogSWYgd2UgdXNlIGEgdGFnZ2luZyBmb3JtYXQgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXRoZXJ0eXBlCi0JICogZmllbGQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwYWNrZXRzIGZyb20gdGhpcyBwb2ludCBvbiBnZXQKLQkgKiBzZW50IHRvIHRoZSB0YWcgZm9ybWF0J3MgcmVjZWl2ZSBmdW5jdGlvbi4gIChXaGljaCB3aWxsCi0JICogZGlzY2FyZCByZWNlaXZlZCBwYWNrZXRzIHVudGlsIHdlIHNldCBkcy0+cG9ydHNbXSBiZWxvdy4pCisJICogSWYgdGhlIENQVSBjb25uZWN0cyB0byB0aGlzIHN3aXRjaCwgc2V0IHRoZSBzd2l0Y2ggdHJlZQorCSAqIHRhZ2dpbmcgcHJvdG9jb2wgdG8gdGhlIHByZWZlcnJlZCB0YWdnaW5nIGZvcm1hdCBvZiB0aGlzCisJICogc3dpdGNoLgogCSAqLwotCXdtYigpOwotCWRldi0+ZHNhX3B0ciA9ICh2b2lkICopZHM7CisJaWYgKGRzLT5kc3QtPmNwdV9zd2l0Y2ggPT0gaW5kZXgpCisJCWRzLT5kc3QtPnRhZ19wcm90b2NvbCA9IGRydi0+dGFnX3Byb3RvY29sOwogCiAKIAkvKgpAQCAtMTUwLDcgKzE0Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gZHJ2LT5zZXRfYWRkcihkcywgZGV2LT5kZXZfYWRkcik7CisJcmV0ID0gZHJ2LT5zZXRfYWRkcihkcywgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5kZXZfYWRkcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xNjksMTggKzE2NSwxOCBAQAogCS8qCiAJICogQ3JlYXRlIG5ldHdvcmsgZGV2aWNlcyBmb3IgcGh5c2ljYWwgc3dpdGNoIHBvcnRzLgogCSAqLwotCXdtYigpOwogCWZvciAoaSA9IDA7IGkgPCBEU0FfTUFYX1BPUlRTOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldjsKIAotCQlpZiAoIShkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgaSkpKQorCQlpZiAoIShkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAogCQlzbGF2ZV9kZXYgPSBkc2Ffc2xhdmVfY3JlYXRlKGRzLCBwYXJlbnQsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKIAkJaWYgKHNsYXZlX2RldiA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBjcmVhdGUgZHNhIHNsYXZlICIKLQkJCSAgICAgICAiZGV2aWNlIGZvciBwb3J0ICVkKCVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjYW4ndCBjcmVhdGUgZHNhICIKKwkJCSAgICAgICAic2xhdmUgZGV2aWNlIGZvciBwb3J0ICVkKCVzKVxuIiwKKwkJCSAgICAgICBkc3QtPm1hc3Rlcl9uZXRkZXYtPm5hbWUsCisJCQkgICAgICAgaW5kZXgsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE5Miw3ICsxODgsNiBAQAogb3V0X2ZyZWU6CiAJbWRpb2J1c19mcmVlKGRzLT5zbGF2ZV9taWlfYnVzKTsKIG91dDoKLQlkZXYtPmRzYV9wdHIgPSBOVUxMOwogCWtmcmVlKGRzKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQpAQCAtMjEyLDM1ICsyMDcsNDIgQEAKICAqLwogYm9vbCBkc2FfdXNlc19kc2FfdGFncyh2b2lkICpkc2FfcHRyKQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHNhX3B0cjsKIAotCXJldHVybiAhIShkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpOworCXJldHVybiAhIShkc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKTsKIH0KIAogYm9vbCBkc2FfdXNlc190cmFpbGVyX3RhZ3Modm9pZCAqZHNhX3B0cikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzYV9wdHI7CiAKLQlyZXR1cm4gISEoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9UUkFJTEVSKSk7CisJcmV0dXJuICEhKGRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX1RSQUlMRVIpKTsKIH0KIAogCiAvKiBsaW5rIHBvbGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVnbHkpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDsKKwlpbnQgaTsKIAotCWRzID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBkc2Ffc3dpdGNoLCBsaW5rX3BvbGxfd29yayk7CisJZHN0ID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUsIGxpbmtfcG9sbF93b3JrKTsKIAotCWRzLT5kcnYtPnBvbGxfbGluayhkcyk7Ci0JbW9kX3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWikpOworCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CisKKwkJaWYgKGRzICE9IE5VTEwgJiYgZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCisJCQlkcy0+ZHJ2LT5wb2xsX2xpbmsoZHMpOworCX0KKworCW1vZF90aW1lcigmZHN0LT5saW5rX3BvbGxfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfdGltZXIodW5zaWduZWQgbG9uZyBfZHMpCitzdGF0aWMgdm9pZCBkc2FfbGlua19wb2xsX3RpbWVyKHVuc2lnbmVkIGxvbmcgX2RzdCkKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAodm9pZCAqKV9kczsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSAodm9pZCAqKV9kc3Q7CiAKLQlzY2hlZHVsZV93b3JrKCZkcy0+bGlua19wb2xsX3dvcmspOworCXNjaGVkdWxlX3dvcmsoJmRzdC0+bGlua19wb2xsX3dvcmspOwogfQogCiAKQEAgLTMwMywxOCArMzA1LDE0IEBACiAJc3RhdGljIGludCBkc2FfdmVyc2lvbl9wcmludGVkOwogCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDsKKwlpbnQgaTsKIAogCWlmICghZHNhX3ZlcnNpb25fcHJpbnRlZCsrKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgIgogCQkJImRyaXZlciB2ZXJzaW9uICVzXG4iLCBkc2FfZHJpdmVyX3ZlcnNpb24pOwogCi0JaWYgKHBkID09IE5VTEwgfHwgcGQtPm1paV9idXMgPT0gTlVMTCB8fCBwZC0+bmV0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVzID0gZGV2X3RvX21paV9idXMocGQtPm1paV9idXMpOwotCWlmIChidXMgPT0gTlVMTCkKKwlpZiAocGQgPT0gTlVMTCB8fCBwZC0+bmV0ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGV2ID0gZGV2X3RvX25ldF9kZXZpY2UocGQtPm5ldGRldik7CkBAIC0zMjYsMzYgKzMyNCw3OSBAQAogCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKLQlkcyA9IGRzYV9zd2l0Y2hfc2V0dXAoJnBkZXYtPmRldiwgcGQsIGJ1cywgZGV2KTsKLQlpZiAoSVNfRVJSKGRzKSkgeworCWRzdCA9IGt6YWxsb2Moc2l6ZW9mKCpkc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHN0ID09IE5VTEwpIHsKIAkJZGV2X3B1dChkZXYpOwotCQlyZXR1cm4gUFRSX0VSUihkcyk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkgewotCQlJTklUX1dPUksoJmRzLT5saW5rX3BvbGxfd29yaywgZHNhX2xpbmtfcG9sbF93b3JrKTsKLQkJaW5pdF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lcik7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRzOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZHNhX2xpbmtfcG9sbF90aW1lcjsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopOwotCQlhZGRfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzdCk7CisKKwlkc3QtPnBkID0gcGQ7CisJZHN0LT5tYXN0ZXJfbmV0ZGV2ID0gZGV2OworCWRzdC0+Y3B1X3N3aXRjaCA9IC0xOworCWRzdC0+Y3B1X3BvcnQgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBwZC0+bnJfY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgbWlpX2J1cyAqYnVzOworCQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisKKwkJYnVzID0gZGV2X3RvX21paV9idXMocGQtPmNoaXBbaV0ubWlpX2J1cyk7CisJCWlmIChidXMgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IG5vIG1paSBidXMgZm91bmQgZm9yICIKKwkJCQkiZHNhIHN3aXRjaFxuIiwgZGV2LT5uYW1lLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHMgPSBkc2Ffc3dpdGNoX3NldHVwKGRzdCwgaSwgJnBkZXYtPmRldiwgYnVzKTsKKwkJaWYgKElTX0VSUihkcykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjb3VsZG4ndCBjcmVhdGUgZHNhIHN3aXRjaCAiCisJCQkJImluc3RhbmNlIChlcnJvciAlbGQpXG4iLCBkZXYtPm5hbWUsIGksCisJCQkJUFRSX0VSUihkcykpOworCQkJY29udGludWU7CisJCX0KKworCQlkc3QtPmRzW2ldID0gZHM7CisJCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKKwkJCWRzdC0+bGlua19wb2xsX25lZWRlZCA9IDE7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHMpOworCS8qCisJICogSWYgd2UgdXNlIGEgdGFnZ2luZyBmb3JtYXQgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXRoZXJ0eXBlCisJICogZmllbGQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwYWNrZXRzIGZyb20gdGhpcyBwb2ludCBvbiBnZXQKKwkgKiBzZW50IHRvIHRoZSB0YWcgZm9ybWF0J3MgcmVjZWl2ZSBmdW5jdGlvbi4KKwkgKi8KKwl3bWIoKTsKKwlkZXYtPmRzYV9wdHIgPSAodm9pZCAqKWRzdDsKKworCWlmIChkc3QtPmxpbmtfcG9sbF9uZWVkZWQpIHsKKwkJSU5JVF9XT1JLKCZkc3QtPmxpbmtfcG9sbF93b3JrLCBkc2FfbGlua19wb2xsX3dvcmspOworCQlpbml0X3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkc3Q7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZHNhX2xpbmtfcG9sbF90aW1lcjsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKTsKKwkJYWRkX3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZHNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOwogCi0JaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQotCQlkZWxfdGltZXJfc3luYygmZHMtPmxpbmtfcG9sbF90aW1lcik7CisJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkKKwkJZGVsX3RpbWVyX3N5bmMoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQlkc2Ffc3dpdGNoX2Rlc3Ryb3koZHMpOworCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CisKKwkJaWYgKGRzICE9IE5VTEwpCisJCQlkc2Ffc3dpdGNoX2Rlc3Ryb3koZHMpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2FfcHJpdi5oIGIvbmV0L2RzYS9kc2FfcHJpdi5oCmluZGV4IDcwNjMzNzguLjQxMDU1ZjMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhX3ByaXYuaAorKysgYi9uZXQvZHNhL2RzYV9wcml2LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9kc2FfcHJpdi5oIC0gSGFyZHdhcmUgc3dpdGNoIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDQyICsxOSwxMDcgQEAKIAogc3RydWN0IGRzYV9zd2l0Y2ggewogCS8qCi0JICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgb3ducwotCSAqIHRoaXMgZHNhIHN3aXRjaCBpbnN0YW5jZS4KKwkgKiBQYXJlbnQgc3dpdGNoIHRyZWUsIGFuZCBzd2l0Y2ggaW5kZXguCiAJICovCi0Jc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhCSpwZDsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlCSpkc3Q7CisJaW50CQkJaW5kZXg7CiAKIAkvKgotCSAqIFJlZmVyZW5jZXMgdG8gbmV0d29yayBkZXZpY2UgYW5kIG1paSBidXMgdG8gdXNlLgorCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhpcyBzd2l0Y2guCiAJICovCi0Jc3RydWN0IG5ldF9kZXZpY2UJCSptYXN0ZXJfbmV0ZGV2OwotCXN0cnVjdCBtaWlfYnVzCQkJKm1hc3Rlcl9taWlfYnVzOworCXN0cnVjdCBkc2FfY2hpcF9kYXRhCSpwZDsKIAogCS8qCi0JICogVGhlIHVzZWQgc3dpdGNoIGRyaXZlciBhbmQgZnJhbWUgdGFnZ2luZyB0eXBlLgorCSAqIFRoZSB1c2VkIHN3aXRjaCBkcml2ZXIuCiAJICovCiAJc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyCSpkcnY7Ci0JX19iZTE2CQkJCXRhZ19wcm90b2NvbDsKKworCS8qCisJICogUmVmZXJlbmNlIHRvIG1paSBidXMgdG8gdXNlLgorCSAqLworCXN0cnVjdCBtaWlfYnVzCQkqbWFzdGVyX21paV9idXM7CiAKIAkvKgogCSAqIFNsYXZlIG1paV9idXMgYW5kIGRldmljZXMgZm9yIHRoZSBpbmRpdmlkdWFsIHBvcnRzLgogCSAqLwotCWludAkJCQljcHVfcG9ydDsKLQl1MzIJCQkJdmFsaWRfcG9ydF9tYXNrOwotCXN0cnVjdCBtaWlfYnVzCQkJKnNsYXZlX21paV9idXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJCSpwb3J0c1tEU0FfTUFYX1BPUlRTXTsKKwl1MzIJCQlkc2FfcG9ydF9tYXNrOworCXUzMgkJCXBoeXNfcG9ydF9tYXNrOworCXN0cnVjdCBtaWlfYnVzCQkqc2xhdmVfbWlpX2J1czsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqcG9ydHNbRFNBX01BWF9QT1JUU107Cit9OworCitzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHsKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIHBsYXRmb3JtIGRldmljZSB0aGF0IG93bnMKKwkgKiB0aGlzIGRzYSBzd2l0Y2ggdHJlZSBpbnN0YW5jZS4KKwkgKi8KKwlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEJKnBkOworCisJLyoKKwkgKiBSZWZlcmVuY2UgdG8gbmV0d29yayBkZXZpY2UgdG8gdXNlLCBhbmQgd2hpY2ggdGFnZ2luZworCSAqIHByb3RvY29sIHRvIHVzZS4KKwkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZQkqbWFzdGVyX25ldGRldjsKKwlfX2JlMTYJCQl0YWdfcHJvdG9jb2w7CisKKwkvKgorCSAqIFRoZSBzd2l0Y2ggYW5kIHBvcnQgdG8gd2hpY2ggdGhlIENQVSBpcyBhdHRhY2hlZC4KKwkgKi8KKwlzOAkJCWNwdV9zd2l0Y2g7CisJczgJCQljcHVfcG9ydDsKIAogCS8qCiAJICogTGluayBzdGF0ZSBwb2xsaW5nLgogCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJbGlua19wb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJCWxpbmtfcG9sbF90aW1lcjsKKwlpbnQJCQlsaW5rX3BvbGxfbmVlZGVkOworCXN0cnVjdCB3b3JrX3N0cnVjdAlsaW5rX3BvbGxfd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlsaW5rX3BvbGxfdGltZXI7CisKKwkvKgorCSAqIERhdGEgZm9yIHRoZSBpbmRpdmlkdWFsIHN3aXRjaCBjaGlwcy4KKwkgKi8KKwlzdHJ1Y3QgZHNhX3N3aXRjaAkqZHNbRFNBX01BWF9TV0lUQ0hFU107CiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgZHNhX2lzX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCit7CisJcmV0dXJuICEhKGRzLT5pbmRleCA9PSBkcy0+ZHN0LT5jcHVfc3dpdGNoICYmIHAgPT0gZHMtPmRzdC0+Y3B1X3BvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGRzYV91cHN0cmVhbV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKK3sKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy0+ZHN0OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSByb290IHN3aXRjaCAoaS5lLiB0aGUgc3dpdGNoIHRoYXQgY29ubmVjdHMKKwkgKiB0byB0aGUgQ1BVKSwgcmV0dXJuIHRoZSBjcHUgcG9ydCBudW1iZXIgb24gdGhpcyBzd2l0Y2guCisJICogRWxzZSByZXR1cm4gdGhlIChEU0EpIHBvcnQgbnVtYmVyIHRoYXQgY29ubmVjdHMgdG8gdGhlCisJICogc3dpdGNoIHRoYXQgaXMgb25lIGhvcCBjbG9zZXIgdG8gdGhlIGNwdS4KKwkgKi8KKwlpZiAoZHN0LT5jcHVfc3dpdGNoID09IGRzLT5pbmRleCkKKwkJcmV0dXJuIGRzdC0+Y3B1X3BvcnQ7CisJZWxzZQorCQlyZXR1cm4gZHMtPnBkLT5ydGFibGVbZHN0LT5jcHVfc3dpdGNoXTsKK30KKwogc3RydWN0IGRzYV9zbGF2ZV9wcml2IHsKKwkvKgorCSAqIFRoZSBsaW51eCBuZXR3b3JrIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMKKwkgKiBzd2l0Y2ggcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCisJLyoKKwkgKiBXaGljaCBzd2l0Y2ggdGhpcyBwb3J0IGlzIGEgcGFydCBvZiwgYW5kIHRoZSBwb3J0IGluZGV4CisJICogZm9yIHRoaXMgcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgZHNhX3N3aXRjaAkqcGFyZW50OwotCWludAkJCXBvcnQ7CisJdTgJCQlwb3J0OworCisJLyoKKwkgKiBUaGUgcGh5bGliIHBoeV9kZXZpY2UgcG9pbnRlciBmb3IgdGhlIFBIWSBjb25uZWN0ZWQKKwkgKiB0byB0aGlzIHBvcnQuCisJICovCiAJc3RydWN0IHBoeV9kZXZpY2UJKnBoeTsKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MDYwLmMgYi9uZXQvZHNhL212ODhlNjA2MC5jCmluZGV4IDg1MDgxYWUuLjgzMjc3ZjQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MDYwLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYwNjAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL212ODhlNjA2MC5jIC0gRHJpdmVyIGZvciBNYXJ2ZWxsIDg4ZTYwNjAgc3dpdGNoIGNoaXBzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTgxLDcgKzgxLDcgQEAKIAkvKgogCSAqIFJlc2V0IHRoZSBzd2l0Y2guCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MEEsIDB4YTEzMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MGEsIDB4YTEzMCk7CiAKIAkvKgogCSAqIFdhaXQgdXAgdG8gb25lIHNlY29uZCBmb3IgcmVzZXQgdG8gY29tcGxldGUuCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgQWRkaXRpb25hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUKIAkgKiBwb3J0LCBlbmFibGUgSW5ncmVzcyBhbmQgRWdyZXNzIFRyYWlsZXIgdGFnZ2luZyBtb2RlLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg0MTAzIDogMHgwMDAzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/ICAweDQxMDMgOiAweDAwMDMpOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKQEAgLTEzOCw5ICsxMzgsOSBAQAogCSAqLwogCVJFR19XUklURShhZGRyLCAweDA2LAogCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJCQkgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgPworCQkJCWRzLT5waHlzX3BvcnRfbWFzayA6CisJCQkJKDEgPDwgZHMtPmRzdC0+Y3B1X3BvcnQpKSk7CiAKIAkvKgogCSAqIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yOiB3aGVuIGxlYXJuaW5nIHNvdXJjZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMgYi9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCmluZGV4IGVjOGM2YTAuLjUyZmFhYTIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL212ODhlNjEyM182MV82NS5jIC0gTWFydmVsbCA4OGU2MTIzLzYxNjEvNjE2NSBzd2l0Y2ggY2hpcCBzdXBwb3J0Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTk4LDE3ICs5OCwxNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyoKLQkgKiBDb25maWd1cmUgdGhlIGNwdSBwb3J0LCBhbmQgY29uZmlndXJlIHRoZSBjcHUgcG9ydCBhcyB0aGUKLQkgKiBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8gYmUKLQkgKiBzZW50LgorCSAqIENvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCwgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0KKwkgKiBwb3J0IGFzIHRoZSBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcworCSAqIGFyZSB0byBiZSBzZW50LgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHMtPmNwdV9wb3J0ICogMHgxMTEwKSk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkc2FfdXBzdHJlYW1fcG9ydChkcykgKiAweDExMTApKTsKIAogCS8qCiAJICogRGlzYWJsZSByZW1vdGUgbWFuYWdlbWVudCBmb3Igbm93LCBhbmQgc2V0IHRoZSBzd2l0Y2gncwotCSAqIERTQSBkZXZpY2UgbnVtYmVyIHRvIHplcm8uCisJICogRFNBIGRldmljZSBudW1iZXIuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4MDAwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIGRzLT5pbmRleCAmIDB4MWYpOwogCiAJLyoKIAkgKiBTZW5kIGFsbCBmcmFtZXMgd2l0aCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgbWF0Y2hpbmcKQEAgLTEzMywxMCArMTMzLDE3IEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA1LCAweDAwZmYpOwogCiAJLyoKLQkgKiBNYXAgYWxsIERTQSBkZXZpY2UgSURzIHRvIHRoZSBDUFUgcG9ydC4KKwkgKiBQcm9ncmFtIHRoZSBEU0Egcm91dGluZyB0YWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IGRzLT5jcHVfcG9ydCk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaW50IG5leHRob3A7CisKKwkJbmV4dGhvcCA9IDB4MWY7CisJCWlmIChpICE9IGRzLT5pbmRleCAmJiBpIDwgZHMtPmRzdC0+cGQtPm5yX2NoaXBzKQorCQkJbmV4dGhvcCA9IGRzLT5wZC0+cnRhYmxlW2ldICYgMHgxZjsKKworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgbmV4dGhvcCk7CisJfQogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFza3MuCkBAIC0xNzYsMTIgKzE4MywxOCBAQAogc3RhdGljIGludCBtdjg4ZTYxMjNfNjFfNjVfc2V0dXBfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQogewogCWludCBhZGRyID0gUkVHX1BPUlQocCk7CisJdTE2IHZhbDsKIAogCS8qCiAJICogTUFDIEZvcmNpbmcgcmVnaXN0ZXI6IGRvbid0IGZvcmNlIGxpbmssIHNwZWVkLCBkdXBsZXgKLQkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzLgorCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMgb24gcGh5c2ljYWwKKwkgKiBwb3J0cywgYnV0IGZvcmNlIHRoZSBDUFUgcG9ydCBhbmQgYWxsIERTQSBwb3J0cyB0byAxMDAwIE1iL3MKKwkgKiBmdWxsIGR1cGxleC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSB8fCBkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsKKwllbHNlCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOwogCiAJLyoKIAkgKiBEbyBub3QgbGltaXQgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhpcyBwb3J0IGNhbiBiZQpAQCAtMTkyLDM3ICsyMDUsNTAgQEAKIAogCS8qCiAJICogUG9ydCBDb250cm9sOiBkaXNhYmxlIERyb3Atb24tVW5sb2NrLCBkaXNhYmxlIERyb3Atb24tTG9jaywKLQkgKiBjb25maWd1cmUgdGhlIHJlcXVlc3RlZCAoRFNBL0VEU0EpIHRhZ2dpbmcgbW9kZSBpZiB0aGlzIGlzCi0JICogdGhlIENQVSBwb3J0LCBkaXNhYmxlIEhlYWRlciBtb2RlLCBlbmFibGUgSUdNUC9NTEQgc25vb3BpbmcsCi0JICogZGlzYWJsZSBWTEFOIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQKLQkgKiA4MDIuMXAgYW5kIElQIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZAotCSAqIHNldCBTVFAgc3RhdGUgdG8gRm9yd2FyZGluZy4gIEZpbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVQotCSAqIHBvcnQsIGFkZGl0aW9uYWxseSBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3QgYW5kCi0JICogbXVsdGljYXN0IGFkZHJlc3Nlcy4KKwkgKiBkaXNhYmxlIEhlYWRlciBtb2RlLCBlbmFibGUgSUdNUC9NTEQgc25vb3BpbmcsIGRpc2FibGUgVkxBTgorCSAqIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQgODAyLjFwIGFuZCBJUAorCSAqIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZCBzZXQgU1RQIHN0YXRlCisJICogdG8gRm9yd2FyZGluZy4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIENQVSBsaW5rLCB1c2UgRFNBIG9yIEVEU0EgdGFnZ2luZyBkZXBlbmRpbmcKKwkgKiBvbiB3aGljaCB0YWdnaW5nIG1vZGUgd2FzIGNvbmZpZ3VyZWQuCisJICoKKwkgKiBJZiB0aGlzIGlzIGEgbGluayB0byBhbm90aGVyIHN3aXRjaCwgdXNlIERTQSB0YWdnaW5nIG1vZGUuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzIGFuZCBtdWx0aWNhc3RzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LAotCQkJKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkgKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSkgPwotCQkJICAweDA1M2YgOiAweDM3M2YgOgotCQkJIDB4MDQzMyk7CisJdmFsID0gMHgwNDMzOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKSB7CisJCWlmIChkcy0+ZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRURTQSkpCisJCQl2YWwgfD0gMHgzMzAwOworCQllbHNlCisJCQl2YWwgfD0gMHgwMTAwOworCX0KKwlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJdmFsIHw9IDB4MDEwMDsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAwMGM7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIHZhbCk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbCAxOiBkaXNhYmxlIHRydW5raW5nLiAgQWxzbywgaWYgdGhpcyBpcyB0aGUKIAkgKiBDUFUgcG9ydCwgZW5hYmxlIGxlYXJuIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhpcyBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA1LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg4MDAwIDogMHgwMDAwKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNSwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/IDB4ODAwMCA6IDB4MDAwMCk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwogCSAqIGRhdGFiYXNlLCBhbGxvdyB0aGUgQ1BVIHBvcnQgdG8gdGFsayB0byBlYWNoIG9mIHRoZSAncmVhbCcKIAkgKiBwb3J0cywgYW5kIGFsbG93IGVhY2ggb2YgdGhlICdyZWFsJyBwb3J0cyB0byBvbmx5IHRhbGsgdG8KLQkgKiB0aGUgQ1BVIHBvcnQuCisJICogdGhlIHVwc3RyZWFtIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDYsCi0JCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwl2YWwgPSAocCAmIDB4ZikgPDwgMTI7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpCisJCXZhbCB8PSBkcy0+cGh5c19wb3J0X21hc2s7CisJZWxzZQorCQl2YWwgfD0gMSA8PCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDYsIHZhbCk7CiAKIAkvKgogCSAqIERlZmF1bHQgVkxBTiBJRCBhbmQgcHJpb3JpdHk6IGRvbid0IHNldCBhIGRlZmF1bHQgVkxBTgpAQCAtMzk0LDcgKzQyMCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgbXY4OGU2MTIzXzYxXzY1X3N3aXRjaF9kcml2ZXIgPSB7Ci0JLnRhZ19wcm90b2NvbAkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VEU0EpLAorCS50YWdfcHJvdG9jb2wJCT0gY3B1X3RvX2JlMTYoRVRIX1BfRURTQSksCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IG12ODhlNnh4eF9wcml2X3N0YXRlKSwKIAkucHJvYmUJCQk9IG12ODhlNjEyM182MV82NV9wcm9iZSwKIAkuc2V0dXAJCQk9IG12ODhlNjEyM182MV82NV9zZXR1cCwKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTMxLmMgYi9uZXQvZHNhL212ODhlNjEzMS5jCmluZGV4IDM3NGQ0NmEuLmJiMmI0MWIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTMxLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBuZXQvZHNhL212ODhlNjEzMS5jIC0gTWFydmVsbCA4OGU2MTMxIHN3aXRjaCBjaGlwIHN1cHBvcnQKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIG5ldC9kc2EvbXY4OGU2MTMxLmMgLSBNYXJ2ZWxsIDg4ZTYwOTUvNjA5NWYvNjEzMSBzd2l0Y2ggY2hpcCBzdXBwb3J0CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxLDYgKzIxLDggQEAKIAlyZXQgPSBfX212ODhlNnh4eF9yZWdfcmVhZChidXMsIHN3X2FkZHIsIFJFR19QT1JUKDApLCAweDAzKTsKIAlpZiAocmV0ID49IDApIHsKIAkJcmV0ICY9IDB4ZmZmMDsKKwkJaWYgKHJldCA9PSAweDA5NTApCisJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjA5NS84OEU2MDk1RiI7CiAJCWlmIChyZXQgPT0gMHgxMDYwKQogCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYxMzEiOwogCX0KQEAgLTM2LDcgKzM4LDcgQEAKIAkvKgogCSAqIFNldCBhbGwgcG9ydHMgdG8gdGhlIGRpc2FibGVkIHN0YXRlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewogCQlyZXQgPSBSRUdfUkVBRChSRUdfUE9SVChpKSwgMHgwNCk7CiAJCVJFR19XUklURShSRUdfUE9SVChpKSwgMHgwNCwgcmV0ICYgMHhmZmZjKTsKIAl9CkBAIC0xMDAsMTcgKzEwMiwxNyBAQAogCVJFR19XUklURShSRUdfR0xPQkFMLCAweDE5LCAweDgxMDApOwogCiAJLyoKLQkgKiBEaXNhYmxlIEFSUCBtaXJyb3JpbmcsIGFuZCBjb25maWd1cmUgdGhlIGNwdSBwb3J0IGFzIHRoZQotCSAqIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0byBiZQotCSAqIHNlbnQuCisJICogRGlzYWJsZSBBUlAgbWlycm9yaW5nLCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0IGFzCisJICogdGhlIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0bworCSAqIGJlIHNlbnQuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkcy0+Y3B1X3BvcnQgKiAweDExMDApIHwgMHgwMGYwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzYV91cHN0cmVhbV9wb3J0KGRzKSAqIDB4MTEwMCkgfCAweDAwZjApOwogCiAJLyoKIAkgKiBEaXNhYmxlIGNhc2NhZGUgcG9ydCBmdW5jdGlvbmFsaXR5LCBhbmQgc2V0IHRoZSBzd2l0Y2gncwotCSAqIERTQSBkZXZpY2UgbnVtYmVyIHRvIHplcm8uCisJICogRFNBIGRldmljZSBudW1iZXIuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4ZTAwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4ZTAwMCB8IChkcy0+aW5kZXggJiAweDFmKSk7CiAKIAkvKgogCSAqIFNlbmQgYWxsIGZyYW1lcyB3aXRoIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtYXRjaGluZwpAQCAtMTI3LDE2ICsxMjksMjMgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKIAkvKgotCSAqIE1hcCBhbGwgRFNBIGRldmljZSBJRHMgdG8gdGhlIENQVSBwb3J0LgorCSAqIFByb2dyYW0gdGhlIERTQSByb3V0aW5nIHRhYmxlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgZHMtPmNwdV9wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpbnQgbmV4dGhvcDsKKworCQluZXh0aG9wID0gMHgxZjsKKwkJaWYgKGkgIT0gZHMtPmluZGV4ICYmIGkgPCBkcy0+ZHN0LT5wZC0+bnJfY2hpcHMpCisJCQluZXh0aG9wID0gZHMtPnBkLT5ydGFibGVbaV0gJiAweDFmOworCisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBuZXh0aG9wKTsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXNrcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDcsIDB4ODAwMCB8IChpIDw8IDEyKSB8IDB4ZmYpOworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDcsIDB4ODAwMCB8IChpIDw8IDEyKSB8IDB4N2ZmKTsKIAogCS8qCiAJICogQ2xlYXIgYWxsIHRydW5rIG1hcHBpbmdzLgpAQCAtMTU2LDEyICsxNjUsMTggQEAKIHN0YXRpYyBpbnQgbXY4OGU2MTMxX3NldHVwX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKIHsKIAlpbnQgYWRkciA9IFJFR19QT1JUKHApOworCXUxNiB2YWw7CiAKIAkvKgogCSAqIE1BQyBGb3JjaW5nIHJlZ2lzdGVyOiBkb24ndCBmb3JjZSBsaW5rLCBzcGVlZCwgZHVwbGV4Ci0JICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcy4KKwkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzIG9uIHBoeXNpY2FsCisJICogcG9ydHMsIGJ1dCBmb3JjZSB0aGUgQ1BVIHBvcnQgYW5kIGFsbCBEU0EgcG9ydHMgdG8gMTAwMCBNYi9zCisJICogZnVsbCBkdXBsZXguCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgfHwgZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAzZSk7CisJZWxzZQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sOiBkaXNhYmxlIENvcmUgVGFnLCBkaXNhYmxlIERyb3Atb24tTG9jaywKQEAgLTE2OSwyOSArMTg0LDQwIEBACiAJICogZW5hYmxlIElHTVAvTUxEIHNub29wLCBkaXNhYmxlIERvdWJsZVRhZywgZGlzYWJsZSBWTEFOCiAJICogdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdCA4MDIuMXAgYW5kCiAJICogSVAgcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kIHNldCBTVFAKLQkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgRmluYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVIHBvcnQsCi0JICogYWRkaXRpb25hbGx5IGVuYWJsZSBEU0EgdGFnZ2luZyBhbmQgZm9yd2FyZGluZyBvZiB1bmtub3duCi0JICogdW5pY2FzdCBhZGRyZXNzZXMuCisJICogc3RhdGUgdG8gRm9yd2FyZGluZy4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMsIGFuZCBlbmFibGUgRFNBIHRhZ2dpbmcKKwkgKiBtb2RlLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgbGluayB0byBhbm90aGVyIHN3aXRjaCwgdXNlIERTQSB0YWdnaW5nCisJICogbW9kZSwgYnV0IGRvIG5vdCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHgwNTM3IDogMHgwNDMzKTsKKwl2YWwgPSAweDA0MzM7CisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQl2YWwgfD0gMHgwMTA0OworCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQl2YWwgfD0gMHgwMTAwOworCVJFR19XUklURShhZGRyLCAweDA0LCB2YWwpOwogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2wgMTogZGlzYWJsZSB0cnVua2luZy4gIEFsc28sIGlmIHRoaXMgaXMgdGhlCiAJICogQ1BVIHBvcnQsIGVuYWJsZSBsZWFybiBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoaXMgcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNSwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4ODAwMCA6IDB4MDAwMCk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDUsIGRzYV9pc19jcHVfcG9ydChkcywgcCkgPyAweDgwMDAgOiAweDAwMDApOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKIAkgKiBkYXRhYmFzZSwgYWxsb3cgdGhlIENQVSBwb3J0IHRvIHRhbGsgdG8gZWFjaCBvZiB0aGUgJ3JlYWwnCiAJICogcG9ydHMsIGFuZCBhbGxvdyBlYWNoIG9mIHRoZSAncmVhbCcgcG9ydHMgdG8gb25seSB0YWxrIHRvCi0JICogdGhlIENQVSBwb3J0LgorCSAqIHRoZSB1cHN0cmVhbSBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA2LAotCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJdmFsID0gKHAgJiAweGYpIDw8IDEyOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKQorCQl2YWwgfD0gZHMtPnBoeXNfcG9ydF9tYXNrOworCWVsc2UKKwkJdmFsIHw9IDEgPDwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCVJFR19XUklURShhZGRyLCAweDA2LCB2YWwpOwogCiAJLyoKIAkgKiBEZWZhdWx0IFZMQU4gSUQgYW5kIHByaW9yaXR5OiBkb24ndCBzZXQgYSBkZWZhdWx0IFZMQU4KQEAgLTIwNywxMyArMjMzLDE1IEBACiAJICogdW50YWdnZWQgZnJhbWVzIG9uIHRoaXMgcG9ydCwgZG8gYSBkZXN0aW5hdGlvbiBhZGRyZXNzCiAJICogbG9va3VwIG9uIHJlY2VpdmVkIHBhY2tldHMgYXMgdXN1YWwsIGRvbid0IHNlbmQgYSBjb3B5CiAJICogb2YgYWxsIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZyYW1lcyBvbiB0aGlzIHBvcnQgdG8gdGhlCi0JICogQ1BVLCBhbmQgY29uZmlndXJlIHRoZSBDUFUgcG9ydCBudW1iZXIuICBBbHNvLCBpZiB0aGlzCi0JICogaXMgdGhlIENQVSBwb3J0LCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIG11bHRpY2FzdAotCSAqIGFkZHJlc3Nlcy4KKwkgKiBDUFUsIGFuZCBjb25maWd1cmUgdGhlIHVwc3RyZWFtIHBvcnQgbnVtYmVyLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQorCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QgYWRkcmVzc2VzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA4LAotCQkJKChwID09IGRzLT5jcHVfcG9ydCkgPyAweDAwYzAgOiAweDAwODApIHwKLQkJCSBkcy0+Y3B1X3BvcnQpOworCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAwNDA7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CiAKIAkvKgogCSAqIFJhdGUgQ29udHJvbDogZGlzYWJsZSBpbmdyZXNzIHJhdGUgbGltaXRpbmcuCkBAIC0yNjgsNyArMjk2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewogCQlyZXQgPSBtdjg4ZTYxMzFfc2V0dXBfcG9ydChkcywgaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTI3OSw3ICszMDcsNyBAQAogCiBzdGF0aWMgaW50IG12ODhlNjEzMV9wb3J0X3RvX3BoeV9hZGRyKGludCBwb3J0KQogewotCWlmIChwb3J0ID49IDAgJiYgcG9ydCAhPSAzICYmIHBvcnQgPD0gNykKKwlpZiAocG9ydCA+PSAwICYmIHBvcnQgPD0gMTEpCiAJCXJldHVybiBwb3J0OwogCXJldHVybiAtMTsKIH0KQEAgLTM1Myw3ICszODEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyIG12ODhlNjEzMV9zd2l0Y2hfZHJpdmVyID0gewotCS50YWdfcHJvdG9jb2wJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9EU0EpLAorCS50YWdfcHJvdG9jb2wJCT0gY3B1X3RvX2JlMTYoRVRIX1BfRFNBKSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbXY4OGU2eHh4X3ByaXZfc3RhdGUpLAogCS5wcm9iZQkJCT0gbXY4OGU2MTMxX3Byb2JlLAogCS5zZXR1cAkJCT0gbXY4OGU2MTMxX3NldHVwLApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IGE2OGZkNzkuLmVkMTMxMTggMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9zbGF2ZS5jIC0gU2xhdmUgZGV2aWNlIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDcgKzE5LDcgQEAKIHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBidXMtPnByaXY7CiAKLQlpZiAoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQorCWlmIChkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKIAkJcmV0dXJuIGRzLT5kcnYtPnBoeV9yZWFkKGRzLCBhZGRyLCByZWcpOwogCiAJcmV0dXJuIDB4ZmZmZjsKQEAgLTI5LDcgKzI5LDcgQEAKIHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBidXMtPnByaXY7CiAKLQlpZiAoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQorCWlmIChkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKIAkJcmV0dXJuIGRzLT5kcnYtPnBoeV93cml0ZShkcywgYWRkciwgcmVnLCB2YWwpOwogCiAJcmV0dXJuIDA7CkBAIC00MywxNSArNDMsMjQgQEAKIAlkcy0+c2xhdmVfbWlpX2J1cy0+d3JpdGUgPSBkc2Ffc2xhdmVfcGh5X3dyaXRlOwogCXNucHJpbnRmKGRzLT5zbGF2ZV9taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXM6JS4yeCIsCiAJCQlkcy0+bWFzdGVyX21paV9idXMtPmlkLCBkcy0+cGQtPnN3X2FkZHIpOwotCWRzLT5zbGF2ZV9taWlfYnVzLT5wYXJlbnQgPSAmKGRzLT5tYXN0ZXJfbWlpX2J1cy0+ZGV2KTsKKwlkcy0+c2xhdmVfbWlpX2J1cy0+cGFyZW50ID0gJmRzLT5tYXN0ZXJfbWlpX2J1cy0+ZGV2OwogfQogCiAKIC8qIHNsYXZlIGRldmljZSBoYW5kbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBkc2Ffc2xhdmVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXYtPmlmbGluayA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2LT5pZmluZGV4OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWludCBlcnI7CiAKIAlpZiAoIShtYXN0ZXItPmZsYWdzICYgSUZGX1VQKSkKQEAgLTg5LDcgKzk4LDcgQEAKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAogCWRldl9tY191bnN5bmMobWFzdGVyLCBkZXYpOwogCWRldl91bmljYXN0X3Vuc3luYyhtYXN0ZXIsIGRldik7CkBAIC0xMDcsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9jaGFuZ2VfcnhfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5nZSkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJaWYgKGNoYW5nZSAmIElGRl9BTExNVUxUSSkKIAkJZGV2X3NldF9hbGxtdWx0aShtYXN0ZXIsIGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgPyAxIDogLTEpOwpAQCAtMTE4LDcgKzEyNyw3IEBACiBzdGF0aWMgdm9pZCBkc2Ffc2xhdmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJZGV2X21jX3N5bmMobWFzdGVyLCBkZXYpOwogCWRldl91bmljYXN0X3N5bmMobWFzdGVyLCBkZXYpOwpAQCAtMTI3LDcgKzEzNiw3IEBACiBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYSkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IGE7CiAJaW50IGVycjsKIApAQCAtMjg4LDYgKzI5Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRFNBCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBkc2Ffc2xhdmVfaW5pdCwKIAkubmRvX29wZW4JIAk9IGRzYV9zbGF2ZV9vcGVuLAogCS5uZG9fc3RvcAkJPSBkc2Ffc2xhdmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGRzYV94bWl0LApAQCAtMzAwLDYgKzMxMCw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRURTQQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlZHNhX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gZWRzYV94bWl0LApAQCAtMzEyLDYgKzMyMyw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUgogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0cmFpbGVyX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHJhaWxlcl94bWl0LApAQCAtMzI4LDcgKzM0MCw3IEBACiBkc2Ffc2xhdmVfY3JlYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkgaW50IHBvcnQsIGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IGRzLT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBkcy0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXY7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwOwogCWludCByZXQ7CkBAIC0zNDMsNyArMzU1LDcgQEAKIAltZW1jcHkoc2xhdmVfZGV2LT5kZXZfYWRkciwgbWFzdGVyLT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCXNsYXZlX2Rldi0+dHhfcXVldWVfbGVuID0gMDsKIAotCXN3aXRjaCAoZHMtPnRhZ19wcm90b2NvbCkgeworCXN3aXRjaCAoZHMtPmRzdC0+dGFnX3Byb3RvY29sKSB7CiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX0RTQQogCWNhc2UgaHRvbnMoRVRIX1BfRFNBKToKIAkJc2xhdmVfZGV2LT5uZXRkZXZfb3BzID0gJmRzYV9uZXRkZXZfb3BzOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfZHNhLmMgYi9uZXQvZHNhL3RhZ19kc2EuYwppbmRleCBmOTlhMDE5Li44ZmEyNWJhIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19kc2EuYworKysgYi9uZXQvZHNhL3RhZ19kc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19kc2EuYyAtIChOb24tZXRoZXJ0eXBlKSBEU0EgdGFnZ2luZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNiw3ICszNiw3IEBACiAJCSAqIENvbnN0cnVjdCB0YWdnZWQgRlJPTV9DUFUgRFNBIHRhZyBmcm9tIDgwMi4xcSB0YWcuCiAJCSAqLwogCQlkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMiAqIEVUSF9BTEVOOwotCQlkc2FfaGVhZGVyWzBdID0gMHg2MDsKKwkJZHNhX2hlYWRlclswXSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQlkc2FfaGVhZGVyWzFdID0gcC0+cG9ydCA8PCAzOwogCiAJCS8qCkBAIC01Nyw3ICs1Nyw3IEBACiAJCSAqIENvbnN0cnVjdCB1bnRhZ2dlZCBGUk9NX0NQVSBEU0EgdGFnLgogCQkgKi8KIAkJZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSArIDIgKiBFVEhfQUxFTjsKLQkJZHNhX2hlYWRlclswXSA9IDB4NDA7CisJCWRzYV9oZWFkZXJbMF0gPSAweDQwIHwgcC0+cGFyZW50LT5pbmRleDsKIAkJZHNhX2hlYWRlclsxXSA9IHAtPnBvcnQgPDwgMzsKIAkJZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWRzYV9oZWFkZXJbM10gPSAweDAwOwpAQCAtNjUsNyArNjUsNyBAQAogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0RTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNzgsMTEgKzc4LDEzIEBACiBzdGF0aWMgaW50IGRzYV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCXU4ICpkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTk4LDE2ICsxMDAsMjQgQEAKIAlkc2FfaGVhZGVyID0gc2tiLT5kYXRhIC0gMjsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRCwgYW5kCi0JICogdGhhdCB0aGUgc291cmNlIGRldmljZSBpcyB6ZXJvLgorCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQuCiAJICovCi0JaWYgKChkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4YzApCisJaWYgKChkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHgwMCAmJiAoZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZHNhX2hlYWRlclswXSAmIDB4MWY7CiAJc291cmNlX3BvcnQgPSAoZHNhX2hlYWRlclsxXSA+PiAzKSAmIDB4MWY7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgZXhpc3RzIGFuZCB0aGF0IHRoZSBzb3VyY2UKKwkgKiBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKi8KKwlpZiAoc291cmNlX2RldmljZSA+PSBkc3QtPnBkLT5ucl9jaGlwcykKKwkJZ290byBvdXRfZHJvcDsKKwlkcyA9IGRzdC0+ZHNbc291cmNlX2RldmljZV07CiAJaWYgKHNvdXJjZV9wb3J0ID49IERTQV9NQVhfUE9SVFMgfHwgZHMtPnBvcnRzW3NvdXJjZV9wb3J0XSA9PSBOVUxMKQogCQlnb3RvIG91dF9kcm9wOwogCkBAIC0xNzUsOCArMTg1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkc2FfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0RTQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRzYV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfRFNBKSwKIAkuZnVuYwk9IGRzYV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19lZHNhLmMgYi9uZXQvZHNhL3RhZ19lZHNhLmMKaW5kZXggMzI4ZWM5NS4uODE1NjA3YiAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfZWRzYS5jCisrKyBiL25ldC9kc2EvdGFnX2Vkc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19lZHNhLmMgLSBFdGhlcnR5cGUgRFNBIHRhZ2dpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDUsNyArNDUsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDYwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAogCQkvKgpAQCAtNzAsNyArNzAsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDQwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAkJZWRzYV9oZWFkZXJbNl0gPSAweDAwOwogCQllZHNhX2hlYWRlcls3XSA9IDB4MDA7CkBAIC03OCw3ICs3OCw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRURTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtOTEsMTEgKzkxLDEzIEBACiBzdGF0aWMgaW50IGVkc2FfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmVkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTExMSwxNiArMTEzLDI0IEBACiAJZWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGVkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZWRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweGMwKQorCWlmICgoZWRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChlZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZWRzYV9oZWFkZXJbMF0gJiAweDFmOwogCXNvdXJjZV9wb3J0ID0gKGVkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE5NCw4ICsyMDQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VEU0EpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlZHNhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9FRFNBKSwKIAkuZnVuYwk9IGVkc2FfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfdHJhaWxlci5jIGIvbmV0L2RzYS90YWdfdHJhaWxlci5jCmluZGV4IGI1OTEzMjguLjFjM2UzMGMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX3RyYWlsZXIuYworKysgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS90YWdfdHJhaWxlci5jIC0gVHJhaWxlciB0YWcgZm9ybWF0IGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTU5LDcgKzU5LDcgQEAKIAogCW5za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfVFJBSUxFUik7CiAKLQluc2tiLT5kZXYgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJbnNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQobnNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNjgsMTIgKzY4LDE0IEBACiBzdGF0aWMgaW50IHRyYWlsZXJfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKnRyYWlsZXI7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzWzBdOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC0xMTEsOCArMTEzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUkFJTEVSKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdHJhaWxlcl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfVFJBSUxFUiksCiAJLmZ1bmMJPSB0cmFpbGVyX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDg3ODlkMmIuLjZmNDc5ZmEgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtMTEwMiw4ICsxMTAyLDggQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlID0gewotCS50eXBlID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRUNPTkVUKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQkJY3B1X3RvX2JlMTYoRVRIX1BfRUNPTkVUKSwKIAkuZnVuYyA9CQllY29uZXRfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggNjkxMjY4Zi4uYjJjZjkxZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC0zNSw3ICszNSw3IEBACiAKIAkgIGF0IGJvb3QgdGltZSBhZnRlciB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZC4KIAotCSAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHdpbGwgYWxzbyBnZXQgdGhlIHJwX2ZpbHRlciwgd2hpY2gKKwkgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHJwX2ZpbHRlciwgd2hpY2gKIAkgIGF1dG9tYXRpY2FsbHkgcmVqZWN0cyBpbmNvbWluZyBwYWNrZXRzIGlmIHRoZSByb3V0aW5nIHRhYmxlIGVudHJ5CiAJICBmb3IgdGhlaXIgc291cmNlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhleSdyZQogCSAgYXJyaXZpbmcgb24uIFRoaXMgaGFzIHNlY3VyaXR5IGFkdmFudGFnZXMgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUKQEAgLTQ2LDEyICs0NiwxNiBAQAogCSAgcnBfZmlsdGVyIG9uIHVzZToKIAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvPGRldmljZT4vcnBfZmlsdGVyCi0JICBvcgorCSAgIGFuZAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlcgogCisJICBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdCBpbiBzdGFydHVwIHNjcmlwdHMuCisJICBGb3IgZGV0YWlscyBhYm91dCBycF9maWx0ZXIgc3RyaWN0IGFuZCBsb29zZSBtb2RlIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0Pi4KKwogCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgogCi1jaG9pY2UgCitjaG9pY2UKIAlwcm9tcHQgIkNob29zZSBJUDogRklCIGxvb2t1cCBhbGdvcml0aG0gKGNob29zZSBGSUJfSEFTSCBpZiB1bnN1cmUpIgogCWRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSCiAJZGVmYXVsdCBBU0tfSVBfRklCX0hBU0gKQEAgLTU5LDI3ICs2MywyOSBAQAogY29uZmlnIEFTS19JUF9GSUJfSEFTSAogCWJvb2wgIkZJQl9IQVNIIgogCS0tLWhlbHAtLS0KLQlDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCisJICBDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCiAKIGNvbmZpZyBJUF9GSUJfVFJJRQogCWJvb2wgIkZJQl9UUklFIgogCS0tLWhlbHAtLS0KLQlVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLiAKLSAgICAgICAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQotCW51bWJlciBvZiByb3V0ZXMuCisJICBVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLgorCSAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQorCSAgbnVtYmVyIG9mIHJvdXRlcy4KIAotCUxDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCi0JcGVyZm9ybXMgYmV0dGVyIHRoYW4gRklCX0hBU0ggZm9yIGxhcmdlIHJvdXRpbmcgdGFibGVzLgotCUJ1dCwgaXQgY29uc3VtZXMgbW9yZSBtZW1vcnkgYW5kIGlzIG1vcmUgY29tcGxleC4KLQkKLQlMQy10cmllIGlzIGRlc2NyaWJlZCBpbjoKLQkKLSAJSVAtYWRkcmVzcyBsb29rdXAgdXNpbmcgTEMtdHJpZXMuIFN0ZWZhbiBOaWxzc29uIGFuZCBHdW5uYXIgS2FybHNzb24KLSAJSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsIEp1bmUgMTk5OQotCUFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCi0gCVN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KLSAJaHR0cDovL3d3dy5uYWRhLmt0aC5zZS9+c25pbHNzb24vcHVibGljL3BhcGVycy9keW50cmllMi8KLSAgICAgICAKKwkgIExDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCisJICBwZXJmb3JtcyBiZXR0ZXIgdGhhbiBGSUJfSEFTSCBmb3IgbGFyZ2Ugcm91dGluZyB0YWJsZXMuCisJICBCdXQsIGl0IGNvbnN1bWVzIG1vcmUgbWVtb3J5IGFuZCBpcyBtb3JlIGNvbXBsZXguCisKKwkgIExDLXRyaWUgaXMgZGVzY3JpYmVkIGluOgorCisJICBJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgorCSAgSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsCisJICBKdW5lIDE5OTkKKworCSAgQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKKwkgIFN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KKwkgIGh0dHA6Ly93d3cubmFkYS5rdGguc2UvfnNuaWxzc29uL3B1YmxpYy9wYXBlcnMvZHludHJpZTIvCisKIGVuZGNob2ljZQogCiBjb25maWcgSVBfRklCX0hBU0gKQEAgLTE5MSw3ICsxOTcsNyBAQAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKICMgbm90IHlldCByZWFkeS4uCi0jICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAJCQorIyAgIGJvb2wgJyAgICBJUDogQVJQIHN1cHBvcnQnIENPTkZJR19JUF9QTlBfQVJQCiBjb25maWcgTkVUX0lQSVAKIAl0cmlzdGF0ZSAiSVA6IHR1bm5lbGluZyIKIAlzZWxlY3QgSU5FVF9UVU5ORUwKQEAgLTM2MSw3ICszNjcsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wgKElQQ29tcCkgKFJGQzMxNzMpLAogCSAgdHlwaWNhbGx5IG5lZWRlZCBmb3IgSVBzZWMuCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfWEZSTV9UVU5ORUwKQEAgLTQxNSw3ICs0MjEsNyBAQAogCSAgU3VwcG9ydCBmb3IgSU5FVCAoVENQLCBEQ0NQLCBldGMpIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5CiAJICBuYXRpdmUgTGludXggdG9vbHMgc3VjaCBhcyBzcy4gc3MgaXMgaW5jbHVkZWQgaW4gaXByb3V0ZTIsIGN1cnJlbnRseQogCSAgZG93bmxvYWRhYmxlIGF0IDxodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9JcHJvdXRlMj4uCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfVENQX0RJQUcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCA3NDNmNTU0Li43ZjAzMzczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0zNjksNyArMzY5LDYgQEAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKIAlzay0+c2tfZGVzdHJ1Y3QJICAgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0Jc2stPnNrX2ZhbWlseQkgICA9IFBGX0lORVQ7CiAJc2stPnNrX3Byb3RvY29sCSAgID0gcHJvdG9jb2w7CiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OwogCkBAIC0xMjUzLDEwICsxMjUyLDEwIEBACiAJaW50IHByb3RvOwogCWludCBpZDsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQorCWlwaCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlpZiAodW5saWtlbHkoIWlwaCkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gaXBfaGRyKHNrYik7CiAJcHJvdG8gPSBpcGgtPnByb3RvY29sICYgKE1BWF9JTkVUX1BST1RPUyAtIDEpOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTI2NCwxMyArMTI2MywxMyBAQAogCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAoaXBoLT52ZXJzaW9uICE9IDQgfHwgaXBoLT5paGwgIT0gNSkKKwlpZiAoKih1OCAqKWlwaCAhPSAweDQ1KQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAodW5saWtlbHkoaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZmx1c2ggPSBudG9ocyhpcGgtPnRvdF9sZW4pICE9IHNrYi0+bGVuIHx8CisJZmx1c2ggPSBudG9ocyhpcGgtPnRvdF9sZW4pICE9IHNrYl9ncm9fbGVuKHNrYikgfHwKIAkJaXBoLT5mcmFnX29mZiAhPSBodG9ucyhJUF9ERik7CiAJaWQgPSBudG9ocyhpcGgtPmlkKTsKIApAQCAtMTI4MiwyNCArMTI4MSwyNSBAQAogCiAJCWlwaDIgPSBpcF9oZHIocCk7CiAKLQkJaWYgKGlwaC0+cHJvdG9jb2wgIT0gaXBoMi0+cHJvdG9jb2wgfHwKLQkJICAgIGlwaC0+dG9zICE9IGlwaDItPnRvcyB8fAotCQkgICAgbWVtY21wKCZpcGgtPnNhZGRyLCAmaXBoMi0+c2FkZHIsIDgpKSB7CisJCWlmICgoaXBoLT5wcm90b2NvbCBeIGlwaDItPnByb3RvY29sKSB8CisJCSAgICAoaXBoLT50b3MgXiBpcGgyLT50b3MpIHwKKwkJICAgIChpcGgtPnNhZGRyIF4gaXBoMi0+c2FkZHIpIHwKKwkJICAgIChpcGgtPmRhZGRyIF4gaXBoMi0+ZGFkZHIpKSB7CiAJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogQWxsIGZpZWxkcyBtdXN0IG1hdGNoIGV4Y2VwdCBsZW5ndGggYW5kIGNoZWNrc3VtLiAqLwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggfD0KLQkJCW1lbWNtcCgmaXBoLT5mcmFnX29mZiwgJmlwaDItPmZyYWdfb2ZmLCA0KSB8fAotCQkJKHUxNikobnRvaHMoaXBoMi0+aWQpICsgTkFQSV9HUk9fQ0IocCktPmNvdW50KSAhPSBpZDsKKwkJCShpcGgtPnR0bCBeIGlwaDItPnR0bCkgfAorCQkJKCh1MTYpKG50b2hzKGlwaDItPmlkKSArIE5BUElfR1JPX0NCKHApLT5jb3VudCkgXiBpZCk7CiAKIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoIHw9IGZsdXNoOwogCX0KIAogCU5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHw9IGZsdXNoOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOwotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKIAogCXBwID0gb3BzLT5ncm9fcmVjZWl2ZShoZWFkLCBza2IpOwogCkBAIC0xMzc1LDEwICsxMzc1LDEwIEBACiBpbnQgc25tcF9taWJfaW5pdCh2b2lkICpwdHJbMl0sIHNpemVfdCBtaWJzaXplKQogewogCUJVR19PTihwdHIgPT0gTlVMTCk7Ci0JcHRyWzBdID0gX19hbGxvY19wZXJjcHUobWlic2l6ZSk7CisJcHRyWzBdID0gX19hbGxvY19wZXJjcHUobWlic2l6ZSwgX19hbGlnbm9mX18odW5zaWduZWQgbG9uZyBsb25nKSk7CiAJaWYgKCFwdHJbMF0pCiAJCWdvdG8gZXJyMDsKLQlwdHJbMV0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplKTsKKwlwdHJbMV0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplLCBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpKTsKIAlpZiAoIXB0clsxXSkKIAkJZ290byBlcnIxOwogCXJldHVybiAwOwpAQCAtMTUwMCw4ICsxNTAwLDggQEAKICAqCUlQIHByb3RvY29sIGxheWVyIGluaXRpYWxpc2VyCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5mdW5jID0gaXBfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGluZXRfZ3NvX3NlbmRfY2hlY2ssCiAJLmdzb19zZWdtZW50ID0gaW5ldF9nc29fc2VnbWVudCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggMjlhNzRjMC4uZjExOTMxYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTgwMSw4ICs4MDEsMTEgQEAKICAqICBjYWNoZS4KICAqLwogCi0JLyogU3BlY2lhbCBjYXNlOiBJUHY0IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGlvbiBwYWNrZXQgKFJGQzIxMzEpICovCi0JaWYgKHNpcCA9PSAwKSB7CisJLyoKKwkgKiAgU3BlY2lhbCBjYXNlOiBJUHY0IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGlvbiBwYWNrZXQgKFJGQzIxMzEpCisJICogIGFuZCBHcmF0dWl0b3VzIEFSUC9BUlAgQW5ub3VuY2UuIChSRkMzOTI3LCBTZWN0aW9uIDIuNCkKKwkgKi8KKwlpZiAoc2lwID09IDAgfHwgdGlwID09IHNpcCkgewogCQlpZiAoYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSAmJgogCQkgICAgaW5ldF9hZGRyX3R5cGUobmV0LCB0aXApID09IFJUTl9MT0NBTCAmJgogCQkgICAgIWFycF9pZ25vcmUoaW5fZGV2LCBzaXAsIHRpcCkpCkBAIC04OTIsNyArODk1LDcgQEAKIG91dDoKIAlpZiAoaW5fZGV2KQogCQlpbl9kZXZfcHV0KGluX2Rldik7Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIyNSw4ICsxMjI4LDggQEAKICAqCUNhbGxlZCBvbmNlIG9uIHN0YXJ0dXAuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhcnBfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSUCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFycF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSwKIAkuZnVuYyA9CWFycF9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMzA5OTk3ZS4uMTI2YmI5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTA3NSw2ICsxMDc1LDE0IEBACiAJCQl9CiAJCX0KIAkJaXBfbWNfdXAoaW5fZGV2KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKKwkJaWYgKElOX0RFVl9BUlBfTk9USUZZKGluX2RldikpCisJCQlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsCisJCQkJIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzLAorCQkJCSBkZXYsCisJCQkJIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzLAorCQkJCSBOVUxMLCBkZXYtPmRldl9hZGRyLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfRE9XTjoKIAkJaXBfbWNfZG93bihpbl9kZXYpOwpAQCAtMTIwOCw3ICsxMjE2LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBSVE5MR1JQX0lQVjRfSUZBRERSLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjRfSUZBRERSLCBlcnIpOwpAQCAtMTQzOSw2ICsxNDQ4LDcgQEAKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0FOTk9VTkNFLCAiYXJwX2Fubm91bmNlIiksCiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9JR05PUkUsICJhcnBfaWdub3JlIiksCiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9BQ0NFUFQsICJhcnBfYWNjZXB0IiksCisJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9OT1RJRlksICJhcnBfbm90aWZ5IiksCiAKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9YRlJNLCAiZGlzYWJsZV94ZnJtIiksCiAJCURFVklORVRfU1lTQ1RMX0ZMVVNISU5HX0VOVFJZKE5PUE9MSUNZLCAiZGlzYWJsZV9wb2xpY3kiKSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggNzQxZTRmYS4uY2FmY2M0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCWZpYl9yZXNfcHV0KCZyZXMpOwogCWlmIChub19hZGRyKQogCQlnb3RvIGxhc3RfcmVzb3J0OwotCWlmIChycGYpCisJaWYgKHJwZiA9PSAxKQogCQlnb3RvIGVfaW52YWw7CiAJZmwub2lmID0gZGV2LT5pZmluZGV4OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggNDgxN2RlYS4uZjgzMWRmNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMzIyLDggKzMyMiw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBpbmZvLT5ubF9uZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY0X1JPVVRFLAotCQkJICBpbmZvLT5ubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgaW5mby0+bmxfbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNF9ST1VURSwKKwkJICAgIGluZm8tPm5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoaW5mby0+bmxfbmV0LCBSVE5MR1JQX0lQVjRfUk9VVEUsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggZmM1NjJkMi4uM2Y1MDgwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMzc1LDYgKzM3NSw3IEBACiAJaW5ldC0+dG9zID0gaXBfaGRyKHNrYiktPnRvczsKIAlkYWRkciA9IGlwYy5hZGRyID0gcnQtPnJ0X3NyYzsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAJaWYgKGljbXBfcGFyYW0tPnJlcGx5b3B0cy5vcHRsZW4pIHsKIAkJaXBjLm9wdCA9ICZpY21wX3BhcmFtLT5yZXBseW9wdHM7CiAJCWlmIChpcGMub3B0LT5zcnIpCkBAIC01MzIsNiArNTMzLDcgQEAKIAlpbmV0X3NrKHNrKS0+dG9zID0gdG9zOwogCWlwYy5hZGRyID0gaXBoLT5zYWRkcjsKIAlpcGMub3B0ID0gJmljbXBfcGFyYW0ucmVwbHlvcHRzOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCXsKIAkJc3RydWN0IGZsb3dpIGZsID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggZjI2YWIzOC4uMjJjZDE5ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC05MywyNCArOTMsNDAgQEAKIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmhlYWQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiOwotCWludCByZXQ7CisJaW50IHJldCwgYXR0ZW1wdHMgPSA1OwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlpbnQgc21hbGxlc3Rfc2l6ZSA9IC0xLCBzbWFsbGVzdF9yb3ZlcjsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZiAoIXNudW0pIHsKIAkJaW50IHJlbWFpbmluZywgcm92ZXIsIGxvdywgaGlnaDsKIAorYWdhaW46CiAJCWluZXRfZ2V0X2xvY2FsX3BvcnRfcmFuZ2UoJmxvdywgJmhpZ2gpOwogCQlyZW1haW5pbmcgPSAoaGlnaCAtIGxvdykgKyAxOwotCQlyb3ZlciA9IG5ldF9yYW5kb20oKSAlIHJlbWFpbmluZyArIGxvdzsKKwkJc21hbGxlc3Rfcm92ZXIgPSByb3ZlciA9IG5ldF9yYW5kb20oKSAlIHJlbWFpbmluZyArIGxvdzsKIAorCQlzbWFsbGVzdF9zaXplID0gLTE7CiAJCWRvIHsKIAkJCWhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihuZXQsIHJvdmVyLAogCQkJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKIAkJCWluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIsIG5vZGUsICZoZWFkLT5jaGFpbikKLQkJCQlpZiAoaWJfbmV0KHRiKSA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcm92ZXIpCisJCQkJaWYgKGliX25ldCh0YikgPT0gbmV0ICYmIHRiLT5wb3J0ID09IHJvdmVyKSB7CisJCQkJCWlmICh0Yi0+ZmFzdHJldXNlID4gMCAmJgorCQkJCQkgICAgc2stPnNrX3JldXNlICYmCisJCQkJCSAgICBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgorCQkJCQkgICAgKHRiLT5udW1fb3duZXJzIDwgc21hbGxlc3Rfc2l6ZSB8fCBzbWFsbGVzdF9zaXplID09IC0xKSkgeworCQkJCQkJc21hbGxlc3Rfc2l6ZSA9IHRiLT5udW1fb3duZXJzOworCQkJCQkJc21hbGxlc3Rfcm92ZXIgPSByb3ZlcjsKKwkJCQkJCWlmIChhdG9taWNfcmVhZCgmaGFzaGluZm8tPmJzb2NrZXRzKSA+IChoaWdoIC0gbG93KSArIDEpIHsKKwkJCQkJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CisJCQkJCQkJc251bSA9IHNtYWxsZXN0X3JvdmVyOworCQkJCQkJCWdvdG8gaGF2ZV9zbnVtOworCQkJCQkJfQorCQkJCQl9CiAJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CiAJCQlicmVhazsKIAkJbmV4dDoKIAkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKQEAgLTEyNSwxNCArMTQxLDE5IEBACiAJCSAqIHRoZSB0b3AgbGV2ZWwsIG5vdCBmcm9tIHRoZSAnYnJlYWs7JyBzdGF0ZW1lbnQuCiAJCSAqLwogCQlyZXQgPSAxOwotCQlpZiAocmVtYWluaW5nIDw9IDApCisJCWlmIChyZW1haW5pbmcgPD0gMCkgeworCQkJaWYgKHNtYWxsZXN0X3NpemUgIT0gLTEpIHsKKwkJCQlzbnVtID0gc21hbGxlc3Rfcm92ZXI7CisJCQkJZ290byBoYXZlX3NudW07CisJCQl9CiAJCQlnb3RvIGZhaWw7Ci0KKwkJfQogCQkvKiBPSywgaGVyZSBpcyB0aGUgb25lIHdlIHdpbGwgdXNlLiAgSEVBRCBpcwogCQkgKiBub24tTlVMTCBhbmQgd2UgaG9sZCBpdCdzIG11dGV4LgogCQkgKi8KIAkJc251bSA9IHJvdmVyOwogCX0gZWxzZSB7CitoYXZlX3NudW06CiAJCWhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihuZXQsIHNudW0sCiAJCQkJaGFzaGluZm8tPmJoYXNoX3NpemUpXTsKIAkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKQEAgLTE0NSwxMiArMTY2LDE5IEBACiB0Yl9mb3VuZDoKIAlpZiAoIWhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSkgewogCQlpZiAodGItPmZhc3RyZXVzZSA+IDAgJiYKLQkJICAgIHNrLT5za19yZXVzZSAmJiBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikgeworCQkgICAgc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOICYmCisJCSAgICBzbWFsbGVzdF9zaXplID09IC0xKSB7CiAJCQlnb3RvIHN1Y2Nlc3M7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSAxOwotCQkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmJpbmRfY29uZmxpY3Qoc2ssIHRiKSkKKwkJCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5iaW5kX2NvbmZsaWN0KHNrLCB0YikpIHsKKwkJCQlpZiAoc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOICYmCisJCQkJICAgIHNtYWxsZXN0X3NpemUgIT0gLTEgJiYgLS1hdHRlbXB0cyA+PSAwKSB7CisJCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwkJCQkJZ290byBhZ2FpbjsKKwkJCQl9CiAJCQkJZ290byBmYWlsX3VubG9jazsKKwkJCX0KIAkJfQogCX0KIHRiX25vdF9mb3VuZDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYwppbmRleCA2YzUyZTA4Li5lYWYzZTJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCkBAIC0yNjcsNiArMjY3LDcgQEAKIAogc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqaW5ldF9mcmFnX2ZpbmQoc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwKIAkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIHZvaWQgKmtleSwgdW5zaWduZWQgaW50IGhhc2gpCisJX19yZWxlYXNlcygmZi0+bG9jaykKIHsKIAlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwppbmRleCA2YTEwNDVkLi42MjVjYzVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwpAQCAtMzgsNiArMzgsNyBAQAogCQl3cml0ZV9wbmV0KCZ0Yi0+aWJfbmV0LCBob2xkX25ldChuZXQpKTsKIAkJdGItPnBvcnQgICAgICA9IHNudW07CiAJCXRiLT5mYXN0cmV1c2UgPSAwOworCQl0Yi0+bnVtX293bmVycyA9IDA7CiAJCUlOSVRfSExJU1RfSEVBRCgmdGItPm93bmVycyk7CiAJCWhsaXN0X2FkZF9oZWFkKCZ0Yi0+bm9kZSwgJmhlYWQtPmNoYWluKTsKIAl9CkBAIC01OSw4ICs2MCwxMyBAQAogdm9pZCBpbmV0X2JpbmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YiwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNudW0pCiB7CisJc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvID0gc2stPnNrX3Byb3QtPmguaGFzaGluZm87CisKKwlhdG9taWNfaW5jKCZoYXNoaW5mby0+YnNvY2tldHMpOworCiAJaW5ldF9zayhzayktPm51bSA9IHNudW07CiAJc2tfYWRkX2JpbmRfbm9kZShzaywgJnRiLT5vd25lcnMpOworCXRiLT5udW1fb3duZXJzKys7CiAJaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCA9IHRiOwogfQogCkBAIC03NSw5ICs4MSwxMiBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbYmhhc2hdOwogCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKIAorCWF0b21pY19kZWMoJmhhc2hpbmZvLT5ic29ja2V0cyk7CisKIAlzcGluX2xvY2soJmhlYWQtPmxvY2spOwogCXRiID0gaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaDsKIAlfX3NrX2RlbF9iaW5kX25vZGUoc2spOworCXRiLT5udW1fb3duZXJzLS07CiAJaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCA9IE5VTEw7CiAJaW5ldF9zayhzayktPm51bSA9IDA7CiAJaW5ldF9iaW5kX2J1Y2tldF9kZXN0cm95KGhhc2hpbmZvLT5iaW5kX2J1Y2tldF9jYWNoZXAsIHRiKTsKQEAgLTQ0NCw5ICs0NTMsOSBAQAogCQkJICovCiAJCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKIAkJCQlpZiAoaWJfbmV0KHRiKSA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcG9ydCkgewotCQkJCQlXQVJOX09OKGhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSk7CiAJCQkJCWlmICh0Yi0+ZmFzdHJldXNlID49IDApCiAJCQkJCQlnb3RvIG5leHRfcG9ydDsKKwkJCQkJV0FSTl9PTihobGlzdF9lbXB0eSgmdGItPm93bmVycykpOwogCQkJCQlpZiAoIWNoZWNrX2VzdGFibGlzaGVkKGRlYXRoX3Jvdywgc2ssCiAJCQkJCQkJCXBvcnQsICZ0dykpCiAJCQkJCQlnb3RvIG9rOwpAQCAtNTIzLDYgKzUzMiw3IEBACiB7CiAJaW50IGk7CiAKKwlhdG9taWNfc2V0KCZoLT5ic29ja2V0cywgMCk7CiAJZm9yIChpID0gMDsgaSA8IElORVRfTEhUQUJMRV9TSVpFOyBpKyspIHsKIAkJc3Bpbl9sb2NrX2luaXQoJmgtPmxpc3RlbmluZ19oYXNoW2ldLmxvY2spOwogCQlJTklUX0hMSVNUX05VTExTX0hFQUQoJmgtPmxpc3RlbmluZ19oYXNoW2ldLmhlYWQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCA2NjU5YWMwLi43OTg1MzQ2NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC00NjMsNiArNDYzLDcgQEAKIHN0YXRpYyBpbnQgaXBfZnJhZ19yZWFzbShzdHJ1Y3QgaXBxICpxcCwgc3RydWN0IHNrX2J1ZmYgKnByZXYsCiAJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBjb250YWluZXJfb2YocXAtPnEubmV0LCBzdHJ1Y3QgbmV0LCBpcHY0LmZyYWdzKTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnAsICpoZWFkID0gcXAtPnEuZnJhZ21lbnRzOwogCWludCBsZW47CkBAIC01NDgsNyArNTQ5LDcgQEAKIAlpcGggPSBpcF9oZHIoaGVhZCk7CiAJaXBoLT5mcmFnX29mZiA9IDA7CiAJaXBoLT50b3RfbGVuID0gaHRvbnMobGVuKTsKLQlJUF9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CisJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01PS1MpOwogCXFwLT5xLmZyYWdtZW50cyA9IE5VTEw7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggMDEwMTUyMS4uZTYyNTEwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTE2NCw2NyArMTY0LDEyNCBAQAogCiAvKiBHaXZlbiBzcmMsIGRzdCBhbmQga2V5LCBmaW5kIGFwcHJvcHJpYXRlIGZvciBpbnB1dCB0dW5uZWwuICovCiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBncmVfdHVubmVsX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCitzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwZ3JlX3R1bm5lbF9sb29rdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgX19iZTMyIHJlbW90ZSwgX19iZTMyIGxvY2FsLAogCQkJCQkgICAgICBfX2JlMzIga2V5LCBfX2JlMTYgZ3JlX3Byb3RvKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlpbnQgbGluayA9IGRldi0+aWZpbmRleDsKIAl1bnNpZ25lZCBoMCA9IEhBU0gocmVtb3RlKTsKIAl1bnNpZ25lZCBoMSA9IEhBU0goa2V5KTsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0OwotCXN0cnVjdCBpcF90dW5uZWwgKnQyID0gTlVMTDsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0LCAqY2FuZCA9IE5VTEw7CiAJc3RydWN0IGlwZ3JlX25ldCAqaWduID0gbmV0X2dlbmVyaWMobmV0LCBpcGdyZV9uZXRfaWQpOwogCWludCBkZXZfdHlwZSA9IChncmVfcHJvdG8gPT0gaHRvbnMoRVRIX1BfVEVCKSkgPwogCQkgICAgICAgQVJQSFJEX0VUSEVSIDogQVJQSFJEX0lQR1JFOworCWludCBzY29yZSwgY2FuZF9zY29yZSA9IDQ7CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfcl9sW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJiByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKSB7Ci0JCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCQlyZXR1cm4gdDsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJCXQyID0gdDsKLQkJCX0KKwkJaWYgKGxvY2FsICE9IHQtPnBhcm1zLmlwaC5zYWRkciB8fAorCQkgICAgcmVtb3RlICE9IHQtPnBhcm1zLmlwaC5kYWRkciB8fAorCQkgICAga2V5ICE9IHQtPnBhcm1zLmlfa2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX3JbaDBeaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAocmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkcikgewotCQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBkZXZfdHlwZSkKLQkJCQkJcmV0dXJuIHQ7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCQl0MiA9IHQ7Ci0JCQl9CisJCWlmIChyZW1vdGUgIT0gdC0+cGFybXMuaXBoLmRhZGRyIHx8CisJCSAgICBrZXkgIT0gdC0+cGFybXMuaV9rZXkgfHwKKwkJICAgICEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+ZGV2LT50eXBlICE9IEFSUEhSRF9JUEdSRSAmJgorCQkgICAgdC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJY29udGludWU7CisKKwkJc2NvcmUgPSAwOworCQlpZiAodC0+cGFybXMubGluayAhPSBsaW5rKQorCQkJc2NvcmUgfD0gMTsKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCXNjb3JlIHw9IDI7CisJCWlmIChzY29yZSA9PSAwKQorCQkJcmV0dXJuIHQ7CisKKwkJaWYgKHNjb3JlIDwgY2FuZF9zY29yZSkgeworCQkJY2FuZCA9IHQ7CisJCQljYW5kX3Njb3JlID0gc2NvcmU7CiAJCX0KIAl9CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfbFtoMV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgfHwKLQkJICAgICAobG9jYWwgPT0gdC0+cGFybXMuaXBoLmRhZGRyICYmCi0JCSAgICAgIGlwdjRfaXNfbXVsdGljYXN0KGxvY2FsKSkpIHsKLQkJCWlmICh0LT5wYXJtcy5pX2tleSA9PSBrZXkgJiYgdC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJCXJldHVybiB0OwotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFICYmICF0MikKLQkJCQkJdDIgPSB0OwotCQkJfQorCQlpZiAoKGxvY2FsICE9IHQtPnBhcm1zLmlwaC5zYWRkciAmJgorCQkgICAgIChsb2NhbCAhPSB0LT5wYXJtcy5pcGguZGFkZHIgfHwKKwkJICAgICAgIWlwdjRfaXNfbXVsdGljYXN0KGxvY2FsKSkpIHx8CisJCSAgICBrZXkgIT0gdC0+cGFybXMuaV9rZXkgfHwKKwkJICAgICEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+ZGV2LT50eXBlICE9IEFSUEhSRF9JUEdSRSAmJgorCQkgICAgdC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJY29udGludWU7CisKKwkJc2NvcmUgPSAwOworCQlpZiAodC0+cGFybXMubGluayAhPSBsaW5rKQorCQkJc2NvcmUgfD0gMTsKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCXNjb3JlIHw9IDI7CisJCWlmIChzY29yZSA9PSAwKQorCQkJcmV0dXJuIHQ7CisKKwkJaWYgKHNjb3JlIDwgY2FuZF9zY29yZSkgeworCQkJY2FuZCA9IHQ7CisJCQljYW5kX3Njb3JlID0gc2NvcmU7CiAJCX0KIAl9CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfd2NbaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJcmV0dXJuIHQ7Ci0JCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJdDIgPSB0OworCQlpZiAodC0+cGFybXMuaV9rZXkgIT0ga2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCi0JaWYgKHQyKQotCQlyZXR1cm4gdDI7CisJaWYgKGNhbmQgIT0gTlVMTCkKKwkJcmV0dXJuIGNhbmQ7CiAKLQlpZiAoaWduLT5mYl90dW5uZWxfZGV2LT5mbGFncyZJRkZfVVApCisJaWYgKGlnbi0+ZmJfdHVubmVsX2Rldi0+ZmxhZ3MgJiBJRkZfVVApCiAJCXJldHVybiBuZXRkZXZfcHJpdihpZ24tPmZiX3R1bm5lbF9kZXYpOworCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI4NCw2ICszNDEsNyBAQAogCV9fYmUzMiByZW1vdGUgPSBwYXJtcy0+aXBoLmRhZGRyOwogCV9fYmUzMiBsb2NhbCA9IHBhcm1zLT5pcGguc2FkZHI7CiAJX19iZTMyIGtleSA9IHBhcm1zLT5pX2tleTsKKwlpbnQgbGluayA9IHBhcm1zLT5saW5rOwogCXN0cnVjdCBpcF90dW5uZWwgKnQsICoqdHA7CiAJc3RydWN0IGlwZ3JlX25ldCAqaWduID0gbmV0X2dlbmVyaWMobmV0LCBpcGdyZV9uZXRfaWQpOwogCkBAIC0yOTEsNiArMzQ5LDcgQEAKIAkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJgogCQkgICAgcmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkciAmJgogCQkgICAga2V5ID09IHQtPnBhcm1zLmlfa2V5ICYmCisJCSAgICBsaW5rID09IHQtPnBhcm1zLmxpbmsgJiYKIAkJICAgIHR5cGUgPT0gdC0+ZGV2LT50eXBlKQogCQkJYnJlYWs7CiAKQEAgLTQyMSw3ICs0ODAsNyBAQAogCX0KIAogCXJlYWRfbG9jaygmaXBncmVfbG9jayk7Ci0JdCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoZGV2X25ldChza2ItPmRldiksIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCisJdCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoc2tiLT5kZXYsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCiAJCQkJZmxhZ3MgJiBHUkVfS0VZID8KIAkJCQkqKCgoX19iZTMyICopcCkgKyAoZ3JlaGxlbiAvIDQpIC0gMSkgOiAwLAogCQkJCXBbMV0pOwpAQCAtNDMyLDcgKzQ5MSw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTUxOCw3ICs1NzcsNyBAQAogCWdyZV9wcm90byA9ICooX19iZTE2ICopKGggKyAyKTsKIAogCXJlYWRfbG9jaygmaXBncmVfbG9jayk7Ci0JaWYgKCh0dW5uZWwgPSBpcGdyZV90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLAorCWlmICgodHVubmVsID0gaXBncmVfdHVubmVsX2xvb2t1cChza2ItPmRldiwKIAkJCQkJICBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCBrZXksCiAJCQkJCSAgZ3JlX3Byb3RvKSkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+ZGV2LT5zdGF0czsKQEAgLTc0NCw3ICs4MDMsOCBAQAogI2VuZGlmCiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCA4ZWJlODZkZC4uM2U3ZTkxMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTkzNSw2ICs5MzUsMTAgQEAKIAkJCQkJCQkgICBzay0+c2tfYWxsb2NhdGlvbik7CiAJCQkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKIAkJCQkJZXJyID0gLUVOT0JVRlM7CisJCQkJZWxzZQorCQkJCQkvKiBvbmx5IHRoZSBpbml0aWFsIGZyYWdtZW50IGlzCisJCQkJCSAgIHRpbWUgc3RhbXBlZCAqLworCQkJCQlpcGMtPnNodHguZmxhZ3MgPSAwOwogCQkJfQogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWdvdG8gZXJyb3I7CkBAIC05NDUsNiArOTQ5LDcgQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gY3N1bW1vZGU7CiAJCQlza2ItPmNzdW0gPSAwOwogCQkJc2tiX3Jlc2VydmUoc2tiLCBoaF9sZW4pOworCQkJKnNrYl90eChza2IpID0gaXBjLT5zaHR4OwogCiAJCQkvKgogCQkJICoJRmluZCB3aGVyZSB0byBzdGFydCBwdXR0aW5nIGJ5dGVzLgpAQCAtMTM2NCw2ICsxMzY5LDcgQEAKIAogCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfc3JjOwogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCWlmIChyZXBseW9wdHMub3B0Lm9wdGxlbikgewogCQlpcGMub3B0ID0gJnJlcGx5b3B0cy5vcHQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbmZpZy5jIGIvbmV0L2lwdjQvaXBjb25maWcuYwppbmRleCBkNzIyMDEzLi45MGQyMmFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbmZpZy5jCisrKyBiL25ldC9pcHY0L2lwY29uZmlnLmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogI2RlZmluZSBDT05GX05BTUVTRVJWRVJTX01BWCAgIDMgICAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgbmFtZXNlcnZlcnMKIAkJCQkJICAgLSAnMycgZnJvbSByZXNvbHYuaCAqLwogCi0jZGVmaW5lIE5PTkUgX19jb25zdGFudF9odG9ubChJTkFERFJfTk9ORSkKLSNkZWZpbmUgQU5ZIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX0FOWSkKKyNkZWZpbmUgTk9ORSBjcHVfdG9fYmUzMihJTkFERFJfTk9ORSkKKyNkZWZpbmUgQU5ZIGNwdV90b19iZTMyKElOQUREUl9BTlkpCiAKIC8qCiAgKiBQdWJsaWMgSVAgY29uZmlndXJhdGlvbgpAQCAtNDA2LDcgKzQwNiw3IEBACiBzdGF0aWMgaW50IGljX3JhcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHJhcnBfcGFja2V0X3R5cGUgX19pbml0ZGF0YSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUkFSUCksCisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9SQVJQKSwKIAkuZnVuYyA9CWljX3JhcnBfcmVjdiwKIH07CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogc3RhdGljIGludCBpY19ib290cF9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYm9vdHBfcGFja2V0X3R5cGUgX19pbml0ZGF0YSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5mdW5jID0JaWNfYm9vdHBfcmVjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCA1MDc5ZGZiLi45MDU0MTM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlpZiAodC0+cGFybXMuaXBoLnR0bCA9PSAwICYmIHR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEKQogCQlnb3RvIG91dDsKIAotCWlmIChqaWZmaWVzIC0gdC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHQtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkKIAkJdC0+ZXJyX2NvdW50Kys7CiAJZWxzZQogCQl0LT5lcnJfY291bnQgPSAxOwpAQCAtNDY2LDcgKzQ2Niw4IEBACiAJfQogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewotCQlpZiAoamlmZmllcyAtIHR1bm5lbC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJdHVubmVsLT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpIHsKIAkJCXR1bm5lbC0+ZXJyX2NvdW50LS07CiAJCQlkc3RfbGlua19mYWlsdXJlKHNrYik7CiAJCX0gZWxzZQpAQCAtNzUwLDcgKzc1MSw3IEBACiAJLnByaW9yaXR5CT0JMSwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0Y29uc3QgPQogCUtFUk5fSU5GTyAiSVB2NCBvdmVyIElQdjQgdHVubmVsaW5nIGRyaXZlclxuIjsKIAogc3RhdGljIHZvaWQgaXBpcF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IGlwaXBfbmV0ICppcG4pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggMTQ2NjY0NC4uMTNlOWRkMzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTY3LDkgKzY3LDYgQEAKICNkZWZpbmUgQ09ORklHX0lQX1BJTVNNCTEKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNvY2sgKm1yb3V0ZV9zb2NrZXQ7Ci0KLQogLyogQmlnIGxvY2ssIHByb3RlY3RpbmcgdmlmIHRhYmxlLCBtcnQgY2FjaGUgYW5kIG1yb3V0ZSBzb2NrZXQgc3RhdGUuCiAgICBOb3RlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNlbWFwaG9yZWQgdmlhIHJ0bmxfbG9jay4KICAqLwpAQCAtODAsMTggKzc3LDkgQEAKICAqCU11bHRpY2FzdCByb3V0ZXIgY29udHJvbCB2YXJpYWJsZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IHZpZl9kZXZpY2UgdmlmX3RhYmxlW01BWFZJRlNdOwkJLyogRGV2aWNlcyAJCSovCi1zdGF0aWMgaW50IG1heHZpZjsKLQotI2RlZmluZSBWSUZfRVhJU1RTKGlkeCkgKHZpZl90YWJsZVtpZHhdLmRldiAhPSBOVUxMKQotCi1zdGF0aWMgaW50IG1yb3V0ZV9kb19hc3NlcnQ7CQkJCS8qIFNldCBpbiBQSU0gYXNzZXJ0CSovCi1zdGF0aWMgaW50IG1yb3V0ZV9kb19waW07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICptZmNfY2FjaGVfYXJyYXlbTUZDX0xJTkVTXTsJLyogRm9yd2FyZGluZyBjYWNoZQkqLworI2RlZmluZSBWSUZfRVhJU1RTKF9uZXQsIF9pZHgpICgoX25ldCktPmlwdjQudmlmX3RhYmxlW19pZHhdLmRldiAhPSBOVUxMKQogCiBzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqbWZjX3VucmVzX3F1ZXVlOwkJLyogUXVldWUgb2YgdW5yZXNvbHZlZCBlbnRyaWVzICovCi1zdGF0aWMgYXRvbWljX3QgY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW47CQkvKiBTaXplIG9mIHVucmVzb2x2ZWQJKi8KIAogLyogU3BlY2lhbCBzcGlubG9jayBmb3IgcXVldWUgb2YgdW5yZXNvbHZlZCBlbnRyaWVzICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTsKQEAgLTEwNyw3ICs5NSw4IEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlLCBpbnQgbG9jYWwpOwotc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7CitzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpOwogc3RhdGljIGludCBpcG1yX2ZpbGxfbXJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmNfY2FjaGUgKmMsIHN0cnVjdCBydG1zZyAqcnRtKTsKIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMgpAQCAtMTIwLDkgKzEwOSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpcG1yX2RlbF90dW5uZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZpZmN0bCAqdikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisKIAlkZXZfY2xvc2UoZGV2KTsKIAotCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgInR1bmwwIik7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCAidHVubDAiKTsKIAlpZiAoZGV2KSB7CiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOwogCQlzdHJ1Y3QgaWZyZXEgaWZyOwpAQCAtMTQ4LDExICsxMzksMTEgQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCB2aWZjdGwgKnYpCitzdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKIAotCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgInR1bmwwIik7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCAidHVubDAiKTsKIAogCWlmIChkZXYpIHsKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CkBAIC0xODEsNyArMTcyLDggQEAKIAogCQlkZXYgPSBOVUxMOwogCi0JCWlmIChlcnIgPT0gMCAmJiAoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBwLm5hbWUpKSAhPSBOVUxMKSB7CisJCWlmIChlcnIgPT0gMCAmJgorCQkgICAgKGRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgcC5uYW1lKSkgIT0gTlVMTCkgewogCQkJZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCiAJCQlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOwpAQCAtMjA5LDE0ICsyMDEsMTUgQEAKIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCi1zdGF0aWMgaW50IHJlZ192aWZfbnVtID0gLTE7Ci0KIHN0YXRpYyBpbnQgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHJlZ192aWZfbnVtLCBJR01QTVNHX1dIT0xFUEtUKTsKKwlpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSwKKwkJCSAgSUdNUE1TR19XSE9MRVBLVCk7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKQEAgLTI4MywxNiArMjc2LDE2IEBACiAgKglAbm90aWZ5OiBTZXQgdG8gMSwgaWYgdGhlIGNhbGxlciBpcyBhIG5vdGlmaWVyX2NhbGwKICAqLwogCi1zdGF0aWMgaW50IHZpZl9kZWxldGUoaW50IHZpZmksIGludCBub3RpZnkpCitzdGF0aWMgaW50IHZpZl9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSkKIHsKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAotCWlmICh2aWZpIDwgMCB8fCB2aWZpID49IG1heHZpZikKKwlpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBuZXQtPmlwdjQubWF4dmlmKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKLQl2ID0gJnZpZl90YWJsZVt2aWZpXTsKKwl2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdmlmaV07CiAKIAl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7CiAJZGV2ID0gdi0+ZGV2OwpAQCAtMzA0LDE3ICsyOTcsMTcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVBfUElNU00KLQlpZiAodmlmaSA9PSByZWdfdmlmX251bSkKLQkJcmVnX3ZpZl9udW0gPSAtMTsKKwlpZiAodmlmaSA9PSBuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtKQorCQluZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID0gLTE7CiAjZW5kaWYKIAotCWlmICh2aWZpKzEgPT0gbWF4dmlmKSB7CisJaWYgKHZpZmkrMSA9PSBuZXQtPmlwdjQubWF4dmlmKSB7CiAJCWludCB0bXA7CiAJCWZvciAodG1wPXZpZmktMTsgdG1wPj0wOyB0bXAtLSkgewotCQkJaWYgKFZJRl9FWElTVFModG1wKSkKKwkJCWlmIChWSUZfRVhJU1RTKG5ldCwgdG1wKSkKIAkJCQlicmVhazsKIAkJfQotCQltYXh2aWYgPSB0bXArMTsKKwkJbmV0LT5pcHY0Lm1heHZpZiA9IHRtcCsxOwogCX0KIAogCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwpAQCAtMzMzLDYgKzMyNiwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXBtcl9jYWNoZV9mcmVlKHN0cnVjdCBtZmNfY2FjaGUgKmMpCit7CisJcmVsZWFzZV9uZXQobWZjX25ldChjKSk7CisJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworfQorCiAvKiBEZXN0cm95IGFuIHVucmVzb2x2ZWQgY2FjaGUgZW50cnksIGtpbGxpbmcgcXVldWVkIHNrYnMKICAgIGFuZCByZXBvcnRpbmcgZXJyb3IgdG8gbmV0bGluayByZWFkZXJzLgogICovCkBAIC0zNDEsOCArMzQwLDkgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBubG1zZ2VyciAqZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGMpOwogCi0JYXRvbWljX2RlYygmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOworCWF0b21pY19kZWMoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjLT5tZmNfdW4udW5yZXMudW5yZXNvbHZlZCkpKSB7CiAJCWlmIChpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSAwKSB7CkBAIC0zNTQsMTIgKzM1NCwxMiBAQAogCQkJZS0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCQkJbWVtc2V0KCZlLT5tc2csIDAsIHNpemVvZihlLT5tc2cpKTsKIAotCQkJcnRubF91bmljYXN0KHNrYiwgJmluaXRfbmV0LCBORVRMSU5LX0NCKHNrYikucGlkKTsKKwkJCXJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihza2IpLnBpZCk7CiAJCX0gZWxzZQogCQkJa2ZyZWVfc2tiKHNrYik7CiAJfQogCi0Ja21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCWlwbXJfY2FjaGVfZnJlZShjKTsKIH0KIAogCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pID09IDApCisJaWYgKG1mY191bnJlc19xdWV1ZSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAogCW5vdyA9IGppZmZpZXM7CkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJaXBtcl9kZXN0cm95X3VucmVzKGMpOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pKQorCWlmIChtZmNfdW5yZXNfcXVldWUgIT0gTlVMTCkKIAkJbW9kX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lciwgamlmZmllcyArIGV4cGlyZXMpOwogCiBvdXQ6CkBAIC00MDksMTMgKzQwOSwxNSBAQAogc3RhdGljIHZvaWQgaXBtcl91cGRhdGVfdGhyZXNob2xkcyhzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZSwgdW5zaWduZWQgY2hhciAqdHRscykKIHsKIAlpbnQgdmlmaTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGNhY2hlKTsKIAogCWNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZiA9IE1BWFZJRlM7CiAJY2FjaGUtPm1mY191bi5yZXMubWF4dmlmID0gMDsKIAltZW1zZXQoY2FjaGUtPm1mY191bi5yZXMudHRscywgMjU1LCBNQVhWSUZTKTsKIAotCWZvciAodmlmaT0wOyB2aWZpPG1heHZpZjsgdmlmaSsrKSB7Ci0JCWlmIChWSUZfRVhJU1RTKHZpZmkpICYmIHR0bHNbdmlmaV0gJiYgdHRsc1t2aWZpXSA8IDI1NSkgeworCWZvciAodmlmaSA9IDA7IHZpZmkgPCBuZXQtPmlwdjQubWF4dmlmOyB2aWZpKyspIHsKKwkJaWYgKFZJRl9FWElTVFMobmV0LCB2aWZpKSAmJgorCQkgICAgdHRsc1t2aWZpXSAmJiB0dGxzW3ZpZmldIDwgMjU1KSB7CiAJCQljYWNoZS0+bWZjX3VuLnJlcy50dGxzW3ZpZmldID0gdHRsc1t2aWZpXTsKIAkJCWlmIChjYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPiB2aWZpKQogCQkJCWNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZiA9IHZpZmk7CkBAIC00MjUsMTYgKzQyNywxNiBAQAogCX0KIH0KIAotc3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCB2aWZjdGwgKnZpZmMsIGludCBtcnRzb2NrKQorc3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdmlmYywgaW50IG1ydHNvY2spCiB7CiAJaW50IHZpZmkgPSB2aWZjLT52aWZjX3ZpZmk7Ci0Jc3RydWN0IHZpZl9kZXZpY2UgKnYgPSAmdmlmX3RhYmxlW3ZpZmldOworCXN0cnVjdCB2aWZfZGV2aWNlICp2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdmlmaV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJaW50IGVycjsKIAogCS8qIElzIHZpZiBidXN5ID8gKi8KLQlpZiAoVklGX0VYSVNUUyh2aWZpKSkKKwlpZiAoVklGX0VYSVNUUyhuZXQsIHZpZmkpKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAKIAlzd2l0Y2ggKHZpZmMtPnZpZmNfZmxhZ3MpIHsKQEAgLTQ0NCw3ICs0NDYsNyBAQAogCQkgKiBTcGVjaWFsIFB1cnBvc2UgVklGIGluIFBJTQogCQkgKiBBbGwgdGhlIHBhY2tldHMgd2lsbCBiZSBzZW50IHRvIHRoZSBkYWVtb24KIAkJICovCi0JCWlmIChyZWdfdmlmX251bSA+PSAwKQorCQlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA+PSAwKQogCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQlkZXYgPSBpcG1yX3JlZ192aWYoKTsKIAkJaWYgKCFkZXYpCkBAIC00NTgsNyArNDYwLDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAljYXNlIFZJRkZfVFVOTkVMOgotCQlkZXYgPSBpcG1yX25ld190dW5uZWwodmlmYyk7CisJCWRldiA9IGlwbXJfbmV3X3R1bm5lbChuZXQsIHZpZmMpOwogCQlpZiAoIWRldikKIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShkZXYsIDEpOwpAQCAtNDY5LDcgKzQ3MSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAwOgotCQlkZXYgPSBpcF9kZXZfZmluZCgmaW5pdF9uZXQsIHZpZmMtPnZpZmNfbGNsX2FkZHIuc19hZGRyKTsKKwkJZGV2ID0gaXBfZGV2X2ZpbmQobmV0LCB2aWZjLT52aWZjX2xjbF9hZGRyLnNfYWRkcik7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCQllcnIgPSBkZXZfc2V0X2FsbG11bHRpKGRldiwgMSk7CkBAIC01MTAsMjAgKzUxMiwyMiBAQAogCXYtPmRldiA9IGRldjsKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAlpZiAodi0+ZmxhZ3MmVklGRl9SRUdJU1RFUikKLQkJcmVnX3ZpZl9udW0gPSB2aWZpOworCQluZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID0gdmlmaTsKICNlbmRpZgotCWlmICh2aWZpKzEgPiBtYXh2aWYpCi0JCW1heHZpZiA9IHZpZmkrMTsKKwlpZiAodmlmaSsxID4gbmV0LT5pcHY0Lm1heHZpZikKKwkJbmV0LT5pcHY0Lm1heHZpZiA9IHZpZmkrMTsKIAl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfZmluZChfX2JlMzIgb3JpZ2luLCBfX2JlMzIgbWNhc3RncnApCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJIF9fYmUzMiBvcmlnaW4sCisJCQkJCSBfX2JlMzIgbWNhc3RncnApCiB7CiAJaW50IGxpbmUgPSBNRkNfSEFTSChtY2FzdGdycCwgb3JpZ2luKTsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjOwogCi0JZm9yIChjPW1mY19jYWNoZV9hcnJheVtsaW5lXTsgYzsgYyA9IGMtPm5leHQpIHsKKwlmb3IgKGMgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOyBjOyBjID0gYy0+bmV4dCkgewogCQlpZiAoYy0+bWZjX29yaWdpbj09b3JpZ2luICYmIGMtPm1mY19tY2FzdGdycD09bWNhc3RncnApCiAJCQlicmVhazsKIAl9CkBAIC01MzMsMjIgKzUzNywyNCBAQAogLyoKICAqCUFsbG9jYXRlIGEgbXVsdGljYXN0IGNhY2hlIGVudHJ5CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmIChjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCWMtPm1mY191bi5yZXMubWludmlmID0gTUFYVklGUzsKKwltZmNfbmV0X3NldChjLCBuZXQpOwogCXJldHVybiBjOwogfQogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2NfdW5yZXMoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTsKIAlpZiAoYyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZjLT5tZmNfdW4udW5yZXMudW5yZXNvbHZlZCk7CiAJYy0+bWZjX3VuLnVucmVzLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAqSFo7CisJbWZjX25ldF9zZXQoYywgbmV0KTsKIAlyZXR1cm4gYzsKIH0KIApAQCAtNTgxLDcgKzU4Nyw3IEBACiAJCQkJbWVtc2V0KCZlLT5tc2csIDAsIHNpemVvZihlLT5tc2cpKTsKIAkJCX0KIAotCQkJcnRubF91bmljYXN0KHNrYiwgJmluaXRfbmV0LCBORVRMSU5LX0NCKHNrYikucGlkKTsKKwkJCXJ0bmxfdW5pY2FzdChza2IsIG1mY19uZXQoYyksIE5FVExJTktfQ0Ioc2tiKS5waWQpOwogCQl9IGVsc2UKIAkJCWlwX21yX2ZvcndhcmQoc2tiLCBjLCAwKTsKIAl9CkBAIC01OTQsNyArNjAwLDggQEAKICAqCUNhbGxlZCB1bmRlciBtcnRfbG9jay4KICAqLwogCi1zdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KQorc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJY29uc3QgaW50IGlobCA9IGlwX2hkcmxlbihwa3QpOwpAQCAtNjI2LDcgKzYzMyw3IEBACiAJCW1lbWNweShtc2csIHNrYl9uZXR3b3JrX2hlYWRlcihwa3QpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CiAJCW1zZy0+aW1fbXNndHlwZSA9IElHTVBNU0dfV0hPTEVQS1Q7CiAJCW1zZy0+aW1fbWJ6ID0gMDsKLQkJbXNnLT5pbV92aWYgPSByZWdfdmlmX251bTsKKwkJbXNnLT5pbV92aWYgPSBuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtOwogCQlpcF9oZHIoc2tiKS0+aWhsID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgPj4gMjsKIAkJaXBfaGRyKHNrYiktPnRvdF9sZW4gPSBodG9ucyhudG9ocyhpcF9oZHIocGt0KS0+dG90X2xlbikgKwogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKQEAgLTY1OCw3ICs2NjUsNyBAQAogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXI7CiAJfQogCi0JaWYgKG1yb3V0ZV9zb2NrZXQgPT0gTlVMTCkgeworCWlmIChuZXQtPmlwdjQubXJvdXRlX3NrID09IE5VTEwpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTY2Niw3ICs2NzMsOCBAQAogCS8qCiAJICoJRGVsaXZlciB0byBtcm91dGVkCiAJICovCi0JaWYgKChyZXQgPSBzb2NrX3F1ZXVlX3Jjdl9za2IobXJvdXRlX3NvY2tldCwgc2tiKSk8MCkgeworCXJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihuZXQtPmlwdjQubXJvdXRlX3NrLCBza2IpOworCWlmIChyZXQgPCAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcm91dGU6IHBlbmRpbmcgcXVldWUgZnVsbCwgZHJvcHBpbmcgZW50cmllcy5cbiIpOwogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTY4MCw3ICs2ODgsNyBAQAogICovCiAKIHN0YXRpYyBpbnQKLWlwbXJfY2FjaGVfdW5yZXNvbHZlZCh2aWZpX3QgdmlmaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2lwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbmV0ICpuZXQsIHZpZmlfdCB2aWZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBlcnI7CiAJc3RydWN0IG1mY19jYWNoZSAqYzsKQEAgLTY4OCw3ICs2OTYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJZm9yIChjPW1mY191bnJlc19xdWV1ZTsgYzsgYz1jLT5uZXh0KSB7Ci0JCWlmIChjLT5tZmNfbWNhc3RncnAgPT0gaXBoLT5kYWRkciAmJgorCQlpZiAobmV0X2VxKG1mY19uZXQoYyksIG5ldCkgJiYKKwkJICAgIGMtPm1mY19tY2FzdGdycCA9PSBpcGgtPmRhZGRyICYmCiAJCSAgICBjLT5tZmNfb3JpZ2luID09IGlwaC0+c2FkZHIpCiAJCQlicmVhazsKIAl9CkBAIC02OTgsOCArNzA3LDggQEAKIAkJICoJQ3JlYXRlIGEgbmV3IGVudHJ5IGlmIGFsbG93YWJsZQogCQkgKi8KIAotCQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSA+PSAxMCB8fAotCQkgICAgKGM9aXBtcl9jYWNoZV9hbGxvY191bnJlcygpKT09TlVMTCkgeworCQlpZiAoYXRvbWljX3JlYWQoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPj0gMTAgfHwKKwkJICAgIChjID0gaXBtcl9jYWNoZV9hbGxvY191bnJlcyhuZXQpKSA9PSBOVUxMKSB7CiAJCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTcxNiwxOCArNzI1LDE5IEBACiAJCS8qCiAJCSAqCVJlZmxlY3QgZmlyc3QgcXVlcnkgYXQgbXJvdXRlZC4KIAkJICovCi0JCWlmICgoZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCB2aWZpLCBJR01QTVNHX05PQ0FDSEUpKTwwKSB7CisJCWVyciA9IGlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCB2aWZpLCBJR01QTVNHX05PQ0FDSEUpOworCQlpZiAoZXJyIDwgMCkgewogCQkJLyogSWYgdGhlIHJlcG9ydCBmYWlsZWQgdGhyb3cgdGhlIGNhY2hlIGVudHJ5CiAJCQkgICBvdXQgLSBCcmFkIFBhcmtlcgogCQkJICovCiAJCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCi0JCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlpcG1yX2NhY2hlX2ZyZWUoYyk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlhdG9taWNfaW5jKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CisJCWF0b21pY19pbmMoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CiAJCWMtPm5leHQgPSBtZmNfdW5yZXNfcXVldWU7CiAJCW1mY191bnJlc19xdWV1ZSA9IGM7CiAKQEAgLTc1MywzNSArNzYzLDM3IEBACiAgKglNRkMgY2FjaGUgbWFuaXB1bGF0aW9uIGJ5IHVzZXIgc3BhY2UgbXJvdXRlIGRhZW1vbgogICovCiAKLXN0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBtZmNjdGwgKm1mYykKK3N0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1mY2N0bCAqbWZjKQogewogCWludCBsaW5lOwogCXN0cnVjdCBtZmNfY2FjaGUgKmMsICoqY3A7CiAKIAlsaW5lID0gTUZDX0hBU0gobWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkciwgbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIpOwogCi0JZm9yIChjcD0mbWZjX2NhY2hlX2FycmF5W2xpbmVdOyAoYz0qY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKKwlmb3IgKGNwID0gJm5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07CisJICAgICAoYyA9ICpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgewogCQlpZiAoYy0+bWZjX29yaWdpbiA9PSBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkciAmJgogCQkgICAgYy0+bWZjX21jYXN0Z3JwID09IG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIpIHsKIAkJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKIAkJCSpjcCA9IGMtPm5leHQ7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJaXBtcl9jYWNoZV9mcmVlKGMpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKLXN0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBtZmNjdGwgKm1mYywgaW50IG1ydHNvY2spCitzdGF0aWMgaW50IGlwbXJfbWZjX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtZmNjdGwgKm1mYywgaW50IG1ydHNvY2spCiB7CiAJaW50IGxpbmU7CiAJc3RydWN0IG1mY19jYWNoZSAqdWMsICpjLCAqKmNwOwogCiAJbGluZSA9IE1GQ19IQVNIKG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIsIG1mYy0+bWZjY19vcmlnaW4uc19hZGRyKTsKIAotCWZvciAoY3A9Jm1mY19jYWNoZV9hcnJheVtsaW5lXTsgKGM9KmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CisJZm9yIChjcCA9ICZuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOworCSAgICAgKGMgPSAqY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKIAkJaWYgKGMtPm1mY19vcmlnaW4gPT0gbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIgJiYKIAkJICAgIGMtPm1mY19tY2FzdGdycCA9PSBtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyKQogCQkJYnJlYWs7CkBAIC04MDAsNyArODEyLDcgQEAKIAlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWMgPSBpcG1yX2NhY2hlX2FsbG9jKCk7CisJYyA9IGlwbXJfY2FjaGVfYWxsb2MobmV0KTsKIAlpZiAoYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODEyLDggKzgyNCw4IEBACiAJCWMtPm1mY19mbGFncyB8PSBNRkNfU1RBVElDOwogCiAJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCWMtPm5leHQgPSBtZmNfY2FjaGVfYXJyYXlbbGluZV07Ci0JbWZjX2NhY2hlX2FycmF5W2xpbmVdID0gYzsKKwljLT5uZXh0ID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsKKwluZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdID0gYzsKIAl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAogCS8qCkBAIC04MjMsMTkgKzgzNSwyMSBAQAogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCWZvciAoY3AgPSAmbWZjX3VucmVzX3F1ZXVlOyAodWM9KmNwKSAhPSBOVUxMOwogCSAgICAgY3AgPSAmdWMtPm5leHQpIHsKLQkJaWYgKHVjLT5tZmNfb3JpZ2luID09IGMtPm1mY19vcmlnaW4gJiYKKwkJaWYgKG5ldF9lcShtZmNfbmV0KHVjKSwgbmV0KSAmJgorCQkgICAgdWMtPm1mY19vcmlnaW4gPT0gYy0+bWZjX29yaWdpbiAmJgogCQkgICAgdWMtPm1mY19tY2FzdGdycCA9PSBjLT5tZmNfbWNhc3RncnApIHsKIAkJCSpjcCA9IHVjLT5uZXh0OwotCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKLQkJCQlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKKwkJCWF0b21pY19kZWMoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAobWZjX3VucmVzX3F1ZXVlID09IE5VTEwpCisJCWRlbF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIpOwogCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKIAlpZiAodWMpIHsKIAkJaXBtcl9jYWNoZV9yZXNvbHZlKHVjLCBjKTsKLQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIHVjKTsKKwkJaXBtcl9jYWNoZV9mcmVlKHVjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04NDQsMTYgKzg1OCwxNiBAQAogICoJQ2xvc2UgdGhlIG11bHRpY2FzdCBzb2NrZXQsIGFuZCBjbGVhciB0aGUgdmlmIHRhYmxlcyBldGMKICAqLwogCi1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG5ldCAqbmV0KQogewogCWludCBpOwogCiAJLyoKIAkgKglTaHV0IGRvd24gYWxsIGFjdGl2ZSB2aWYgZW50cmllcwogCSAqLwotCWZvciAoaT0wOyBpPG1heHZpZjsgaSsrKSB7Ci0JCWlmICghKHZpZl90YWJsZVtpXS5mbGFncyZWSUZGX1NUQVRJQykpCi0JCQl2aWZfZGVsZXRlKGksIDApOworCWZvciAoaSA9IDA7IGkgPCBuZXQtPmlwdjQubWF4dmlmOyBpKyspIHsKKwkJaWYgKCEobmV0LT5pcHY0LnZpZl90YWJsZVtpXS5mbGFncyZWSUZGX1NUQVRJQykpCisJCQl2aWZfZGVsZXRlKG5ldCwgaSwgMCk7CiAJfQogCiAJLyoKQEAgLTg2Miw3ICs4NzYsNyBAQAogCWZvciAoaT0wOyBpPE1GQ19MSU5FUzsgaSsrKSB7CiAJCXN0cnVjdCBtZmNfY2FjaGUgKmMsICoqY3A7CiAKLQkJY3AgPSAmbWZjX2NhY2hlX2FycmF5W2ldOworCQljcCA9ICZuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2ldOwogCQl3aGlsZSAoKGMgPSAqY3ApICE9IE5VTEwpIHsKIAkJCWlmIChjLT5tZmNfZmxhZ3MmTUZDX1NUQVRJQykgewogCQkJCWNwID0gJmMtPm5leHQ7CkBAIC04NzIsMjIgKzg4NiwyMyBAQAogCQkJKmNwID0gYy0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlpcG1yX2NhY2hlX2ZyZWUoYyk7CiAJCX0KIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSAhPSAwKSB7Ci0JCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pICE9IDApIHsKKwkJc3RydWN0IG1mY19jYWNoZSAqYywgKipjcDsKIAogCQlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKLQkJd2hpbGUgKG1mY191bnJlc19xdWV1ZSAhPSBOVUxMKSB7Ci0JCQljID0gbWZjX3VucmVzX3F1ZXVlOwotCQkJbWZjX3VucmVzX3F1ZXVlID0gYy0+bmV4dDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CisJCWNwID0gJm1mY191bnJlc19xdWV1ZTsKKwkJd2hpbGUgKChjID0gKmNwKSAhPSBOVUxMKSB7CisJCQlpZiAoIW5ldF9lcShtZmNfbmV0KGMpLCBuZXQpKSB7CisJCQkJY3AgPSAmYy0+bmV4dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSpjcCA9IGMtPm5leHQ7CiAKIAkJCWlwbXJfZGVzdHJveV91bnJlcyhjKTsKLQotCQkJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAl9CkBAIC04OTUsMTUgKzkxMCwxNyBAQAogCiBzdGF0aWMgdm9pZCBtcnRzb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisKIAlydG5sX2xvY2soKTsKLQlpZiAoc2sgPT0gbXJvdXRlX3NvY2tldCkgewotCQlJUFY0X0RFVkNPTkZfQUxMKHNvY2tfbmV0KHNrKSwgTUNfRk9SV0FSRElORyktLTsKKwlpZiAoc2sgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9zaykgeworCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORyktLTsKIAogCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7Ci0JCW1yb3V0ZV9zb2NrZXQgPSBOVUxMOworCQluZXQtPmlwdjQubXJvdXRlX3NrID0gTlVMTDsKIAkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJbXJvdXRlX2NsZWFuX3RhYmxlcyhzayk7CisJCW1yb3V0ZV9jbGVhbl90YWJsZXMobmV0KTsKIAl9CiAJcnRubF91bmxvY2soKTsKIH0KQEAgLTkyMCw5ICs5MzcsMTAgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCB2aWZjdGwgdmlmOwogCXN0cnVjdCBtZmNjdGwgbWZjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCWlmIChvcHRuYW1lICE9IE1SVF9JTklUKSB7Ci0JCWlmIChzayAhPSBtcm91dGVfc29ja2V0ICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlpZiAoc2sgIT0gbmV0LT5pcHY0Lm1yb3V0ZV9zayAmJiAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtOTM1LDcgKzk1Myw3IEBACiAJCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCiAJCXJ0bmxfbG9jaygpOwotCQlpZiAobXJvdXRlX3NvY2tldCkgeworCQlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9zaykgewogCQkJcnRubF91bmxvY2soKTsKIAkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJfQpAQCAtOTQzLDE1ICs5NjEsMTUgQEAKIAkJcmV0ID0gaXBfcmFfY29udHJvbChzaywgMSwgbXJ0c29ja19kZXN0cnVjdCk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCQkJbXJvdXRlX3NvY2tldCA9IHNrOworCQkJbmV0LT5pcHY0Lm1yb3V0ZV9zayA9IHNrOwogCQkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJCUlQVjRfREVWQ09ORl9BTEwoc29ja19uZXQoc2spLCBNQ19GT1JXQVJESU5HKSsrOworCQkJSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpKys7CiAJCX0KIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKIAljYXNlIE1SVF9ET05FOgotCQlpZiAoc2sgIT0gbXJvdXRlX3NvY2tldCkKKwkJaWYgKHNrICE9IG5ldC0+aXB2NC5tcm91dGVfc2spCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJcmV0dXJuIGlwX3JhX2NvbnRyb2woc2ssIDAsIE5VTEwpOwogCWNhc2UgTVJUX0FERF9WSUY6CkBAIC05NjQsOSArOTgyLDkgQEAKIAkJCXJldHVybiAtRU5GSUxFOwogCQlydG5sX2xvY2soKTsKIAkJaWYgKG9wdG5hbWUgPT0gTVJUX0FERF9WSUYpIHsKLQkJCXJldCA9IHZpZl9hZGQoJnZpZiwgc2s9PW1yb3V0ZV9zb2NrZXQpOworCQkJcmV0ID0gdmlmX2FkZChuZXQsICZ2aWYsIHNrID09IG5ldC0+aXB2NC5tcm91dGVfc2spOwogCQl9IGVsc2UgewotCQkJcmV0ID0gdmlmX2RlbGV0ZSh2aWYudmlmY192aWZpLCAwKTsKKwkJCXJldCA9IHZpZl9kZWxldGUobmV0LCB2aWYudmlmY192aWZpLCAwKTsKIAkJfQogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwpAQCAtOTgzLDkgKzEwMDEsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJ0bmxfbG9jaygpOwogCQlpZiAob3B0bmFtZSA9PSBNUlRfREVMX01GQykKLQkJCXJldCA9IGlwbXJfbWZjX2RlbGV0ZSgmbWZjKTsKKwkJCXJldCA9IGlwbXJfbWZjX2RlbGV0ZShuZXQsICZtZmMpOwogCQllbHNlCi0JCQlyZXQgPSBpcG1yX21mY19hZGQoJm1mYywgc2s9PW1yb3V0ZV9zb2NrZXQpOworCQkJcmV0ID0gaXBtcl9tZmNfYWRkKG5ldCwgJm1mYywgc2sgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9zayk7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7CiAJCS8qCkBAIC05OTYsNyArMTAxNCw3IEBACiAJCWludCB2OwogCQlpZiAoZ2V0X3VzZXIodiwoaW50IF9fdXNlciAqKW9wdHZhbCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJbXJvdXRlX2RvX2Fzc2VydD0odik/MTowOworCQluZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydCA9ICh2KSA/IDEgOiAwOwogCQlyZXR1cm4gMDsKIAl9CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCkBAIC0xMDEwLDExICsxMDI4LDExIEBACiAKIAkJcnRubF9sb2NrKCk7CiAJCXJldCA9IDA7Ci0JCWlmICh2ICE9IG1yb3V0ZV9kb19waW0pIHsKLQkJCW1yb3V0ZV9kb19waW0gPSB2OwotCQkJbXJvdXRlX2RvX2Fzc2VydCA9IHY7CisJCWlmICh2ICE9IG5ldC0+aXB2NC5tcm91dGVfZG9fcGltKSB7CisJCQluZXQtPmlwdjQubXJvdXRlX2RvX3BpbSA9IHY7CisJCQluZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydCA9IHY7CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyCi0JCQlpZiAobXJvdXRlX2RvX3BpbSkKKwkJCWlmIChuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSkKIAkJCQlyZXQgPSBpbmV0X2FkZF9wcm90b2NvbCgmcGltX3Byb3RvY29sLAogCQkJCQkJCUlQUFJPVE9fUElNKTsKIAkJCWVsc2UKQEAgLTEwNDUsNiArMTA2Myw3IEBACiB7CiAJaW50IG9scjsKIAlpbnQgdmFsOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCWlmIChvcHRuYW1lICE9IE1SVF9WRVJTSU9OICYmCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCkBAIC0xMDY2LDEwICsxMDg1LDEwIEBACiAJCXZhbCA9IDB4MDMwNTsKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAllbHNlIGlmIChvcHRuYW1lID09IE1SVF9QSU0pCi0JCXZhbCA9IG1yb3V0ZV9kb19waW07CisJCXZhbCA9IG5ldC0+aXB2NC5tcm91dGVfZG9fcGltOwogI2VuZGlmCiAJZWxzZQotCQl2YWwgPSBtcm91dGVfZG9fYXNzZXJ0OworCQl2YWwgPSBuZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydDsKIAlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnZhbCwgb2xyKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC0xMDg1LDE2ICsxMTA0LDE3IEBACiAJc3RydWN0IHNpb2NfdmlmX3JlcSB2cjsKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHRVRWSUZDTlQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdnIsIGFyZywgc2l6ZW9mKHZyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZyLnZpZmkgPj0gbWF4dmlmKQorCQlpZiAodnIudmlmaSA+PSBuZXQtPmlwdjQubWF4dmlmKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCQl2aWY9JnZpZl90YWJsZVt2ci52aWZpXTsKLQkJaWYgKFZJRl9FWElTVFModnIudmlmaSkpCXsKKwkJdmlmID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdnIudmlmaV07CisJCWlmIChWSUZfRVhJU1RTKG5ldCwgdnIudmlmaSkpIHsKIAkJCXZyLmljb3VudCA9IHZpZi0+cGt0X2luOwogCQkJdnIub2NvdW50ID0gdmlmLT5wa3Rfb3V0OwogCQkJdnIuaWJ5dGVzID0gdmlmLT5ieXRlc19pbjsKQEAgLTExMTIsNyArMTEzMiw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkJYyA9IGlwbXJfY2FjaGVfZmluZChzci5zcmMuc19hZGRyLCBzci5ncnAuc19hZGRyKTsKKwkJYyA9IGlwbXJfY2FjaGVfZmluZChuZXQsIHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOwogCQlpZiAoYykgewogCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CiAJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKQEAgLTExMzQsMTggKzExNTQsMTkgQEAKIHN0YXRpYyBpbnQgaXBtcl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJc3RydWN0IHZpZl9kZXZpY2UgKnY7CiAJaW50IGN0OwogCi0JaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ICE9IE5FVERFVl9VTlJFR0lTVEVSKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0Jdj0mdmlmX3RhYmxlWzBdOwotCWZvciAoY3Q9MDsgY3Q8bWF4dmlmOyBjdCsrLHYrKykgeworCXYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVswXTsKKwlmb3IgKGN0ID0gMDsgY3QgPCBuZXQtPmlwdjQubWF4dmlmOyBjdCsrLCB2KyspIHsKIAkJaWYgKHYtPmRldiA9PSBkZXYpCi0JCQl2aWZfZGVsZXRlKGN0LCAxKTsKKwkJCXZpZl9kZWxldGUobmV0LCBjdCwgMSk7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTEyMDUsOCArMTIyNiw5IEBACiAKIHN0YXRpYyB2b2lkIGlwbXJfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjX2NhY2hlICpjLCBpbnQgdmlmaSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGMpOwogCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7Ci0Jc3RydWN0IHZpZl9kZXZpY2UgKnZpZiA9ICZ2aWZfdGFibGVbdmlmaV07CisJc3RydWN0IHZpZl9kZXZpY2UgKnZpZiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJaW50ICAgIGVuY2FwID0gMDsKQEAgLTEyMjAsOSArMTI0Miw4IEBACiAJCXZpZi0+Ynl0ZXNfb3V0ICs9IHNrYi0+bGVuOwogCQl2aWYtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXZpZi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgdmlmaSwgSUdNUE1TR19XSE9MRVBLVCk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47CisJCWlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAjZW5kaWYKIApAQCAtMTIzMyw3ICsxMjU0LDcgQEAKIAkJCQkJCS5zYWRkciA9IHZpZi0+bG9jYWwsCiAJCQkJCQkudG9zID0gUlRfVE9TKGlwaC0+dG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBJUCB9OwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpCiAJCQlnb3RvIG91dF9mcmVlOwogCQllbmNhcCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCX0gZWxzZSB7CkBAIC0xMjQyLDcgKzEyNjMsNyBAQAogCQkJCQkgICAgICB7IC5kYWRkciA9IGlwaC0+ZGFkZHIsCiAJCQkJCQkudG9zID0gUlRfVE9TKGlwaC0+dG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBJUCB9OwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMTMwNiw5ICsxMzI3LDEwIEBACiAKIHN0YXRpYyBpbnQgaXBtcl9maW5kX3ZpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlpbnQgY3Q7Ci0JZm9yIChjdD1tYXh2aWYtMTsgY3Q+PTA7IGN0LS0pIHsKLQkJaWYgKHZpZl90YWJsZVtjdF0uZGV2ID09IGRldikKKwlmb3IgKGN0ID0gbmV0LT5pcHY0Lm1heHZpZi0xOyBjdCA+PSAwOyBjdC0tKSB7CisJCWlmIChuZXQtPmlwdjQudmlmX3RhYmxlW2N0XS5kZXYgPT0gZGV2KQogCQkJYnJlYWs7CiAJfQogCXJldHVybiBjdDsKQEAgLTEzMjAsNiArMTM0Miw3IEBACiB7CiAJaW50IHBzZW5kID0gLTE7CiAJaW50IHZpZiwgY3Q7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjYWNoZSk7CiAKIAl2aWYgPSBjYWNoZS0+bWZjX3BhcmVudDsKIAljYWNoZS0+bWZjX3VuLnJlcy5wa3QrKzsKQEAgLTEzMjgsNyArMTM1MSw3IEBACiAJLyoKIAkgKiBXcm9uZyBpbnRlcmZhY2U6IGRyb3AgcGFja2V0IGFuZCAobWF5YmUpIHNlbmQgUElNIGFzc2VydC4KIAkgKi8KLQlpZiAodmlmX3RhYmxlW3ZpZl0uZGV2ICE9IHNrYi0+ZGV2KSB7CisJaWYgKG5ldC0+aXB2NC52aWZfdGFibGVbdmlmXS5kZXYgIT0gc2tiLT5kZXYpIHsKIAkJaW50IHRydWVfdmlmaTsKIAogCQlpZiAoc2tiLT5ydGFibGUtPmZsLmlpZiA9PSAwKSB7CkBAIC0xMzQ5LDIzICsxMzcyLDI0IEBACiAJCWNhY2hlLT5tZmNfdW4ucmVzLndyb25nX2lmKys7CiAJCXRydWVfdmlmaSA9IGlwbXJfZmluZF92aWYoc2tiLT5kZXYpOwogCi0JCWlmICh0cnVlX3ZpZmkgPj0gMCAmJiBtcm91dGVfZG9fYXNzZXJ0ICYmCisJCWlmICh0cnVlX3ZpZmkgPj0gMCAmJiBuZXQtPmlwdjQubXJvdXRlX2RvX2Fzc2VydCAmJgogCQkgICAgLyogcGltc20gdXNlcyBhc3NlcnRzLCB3aGVuIHN3aXRjaGluZyBmcm9tIFJQVCB0byBTUFQsCiAJCSAgICAgICBzbyB0aGF0IHdlIGNhbm5vdCBjaGVjayB0aGF0IHBhY2tldCBhcnJpdmVkIG9uIGFuIG9pZi4KIAkJICAgICAgIEl0IGlzIGJhZCwgYnV0IG90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkIHRvIG1vdmUgcHJldHR5CiAJCSAgICAgICBsYXJnZSBjaHVuayBvZiBwaW1kIHRvIGtlcm5lbC4gT3VnaC4uLiAtLUFOSwogCQkgICAgICovCi0JCSAgICAobXJvdXRlX2RvX3BpbSB8fCBjYWNoZS0+bWZjX3VuLnJlcy50dGxzW3RydWVfdmlmaV0gPCAyNTUpICYmCisJCSAgICAobmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0gfHwKKwkJICAgICBjYWNoZS0+bWZjX3VuLnJlcy50dGxzW3RydWVfdmlmaV0gPCAyNTUpICYmCiAJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsCiAJCQkgICAgICAgY2FjaGUtPm1mY191bi5yZXMubGFzdF9hc3NlcnQgKyBNRkNfQVNTRVJUX1RIUkVTSCkpIHsKIAkJCWNhY2hlLT5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllczsKLQkJCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTsKKwkJCWlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCB0cnVlX3ZpZmksIElHTVBNU0dfV1JPTkdWSUYpOwogCQl9CiAJCWdvdG8gZG9udF9mb3J3YXJkOwogCX0KIAotCXZpZl90YWJsZVt2aWZdLnBrdF9pbisrOwotCXZpZl90YWJsZVt2aWZdLmJ5dGVzX2luICs9IHNrYi0+bGVuOworCW5ldC0+aXB2NC52aWZfdGFibGVbdmlmXS5wa3RfaW4rKzsKKwluZXQtPmlwdjQudmlmX3RhYmxlW3ZpZl0uYnl0ZXNfaW4gKz0gc2tiLT5sZW47CiAKIAkvKgogCSAqCUZvcndhcmQgdGhlIGZyYW1lCkBAIC0xNDA1LDYgKzE0MjksNyBAQAogaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqY2FjaGU7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJaW50IGxvY2FsID0gc2tiLT5ydGFibGUtPnJ0X2ZsYWdzJlJUQ0ZfTE9DQUw7CiAKIAkvKiBQYWNrZXQgaXMgbG9vcGVkIGJhY2sgYWZ0ZXIgZm9yd2FyZCwgaXQgc2hvdWxkIG5vdCBiZQpAQCAtMTQyNSw5ICsxNDUwLDkgQEAKIAkJCSAgICAgICB0aGF0IHdlIGNhbiBmb3J3YXJkIE5PIElHTVAgbWVzc2FnZXMuCiAJCQkgICAgICovCiAJCQkgICAgcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JCQkgICAgaWYgKG1yb3V0ZV9zb2NrZXQpIHsKKwkJCSAgICBpZiAobmV0LT5pcHY0Lm1yb3V0ZV9zaykgewogCQkJCSAgICBuZl9yZXNldChza2IpOwotCQkJCSAgICByYXdfcmN2KG1yb3V0ZV9zb2NrZXQsIHNrYik7CisJCQkJICAgIHJhd19yY3YobmV0LT5pcHY0Lm1yb3V0ZV9zaywgc2tiKTsKIAkJCQkgICAgcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAkJCQkgICAgcmV0dXJuIDA7CiAJCQkgICAgfQpAQCAtMTQzNiw3ICsxNDYxLDcgQEAKIAl9CiAKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChpcF9oZHIoc2tiKS0+c2FkZHIsIGlwX2hkcihza2IpLT5kYWRkcik7CisJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobmV0LCBpcF9oZHIoc2tiKS0+c2FkZHIsIGlwX2hkcihza2IpLT5kYWRkcik7CiAKIAkvKgogCSAqCU5vIHVzYWJsZSBjYWNoZSBlbnRyeQpAQCAtMTQ1Niw3ICsxNDgxLDcgQEAKIAogCQl2aWYgPSBpcG1yX2ZpbmRfdmlmKHNrYi0+ZGV2KTsKIAkJaWYgKHZpZiA+PSAwKSB7Ci0JCQlpbnQgZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKHZpZiwgc2tiKTsKKwkJCWludCBlcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobmV0LCB2aWYsIHNrYik7CiAJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTQ4Nyw2ICsxNTEyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVnX2RldiA9IE5VTEw7CiAJc3RydWN0IGlwaGRyICplbmNhcDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAogCWVuY2FwID0gKHN0cnVjdCBpcGhkciAqKShza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgcGltbGVuKTsKIAkvKgpAQCAtMTUwMSw4ICsxNTI3LDggQEAKIAkJcmV0dXJuIDE7CiAKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQlpZiAocmVnX3ZpZl9udW0gPj0gMCkKLQkJcmVnX2RldiA9IHZpZl90YWJsZVtyZWdfdmlmX251bV0uZGV2OworCWlmIChuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID49IDApCisJCXJlZ19kZXYgPSBuZXQtPmlwdjQudmlmX3RhYmxlW25ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW1dLmRldjsKIAlpZiAocmVnX2RldikKIAkJZGV2X2hvbGQocmVnX2Rldik7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKQEAgLTE1MzcsMTMgKzE1NjMsMTQgQEAKIGludCBwaW1fcmN2X3YxKHN0cnVjdCBza19idWZmICogc2tiKQogewogCXN0cnVjdCBpZ21waGRyICpwaW07CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnBpbSkgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiAJCWdvdG8gZHJvcDsKIAogCXBpbSA9IGlnbXBfaGRyKHNrYik7CiAKLQlpZiAoIW1yb3V0ZV9kb19waW0gfHwKKwlpZiAoIW5ldC0+aXB2NC5tcm91dGVfZG9fcGltIHx8CiAJICAgIHBpbS0+Z3JvdXAgIT0gUElNX1YxX1ZFUlNJT04gfHwgcGltLT5jb2RlICE9IFBJTV9WMV9SRUdJU1RFUikKIAkJZ290byBkcm9wOwogCkBAIC0xNTgzLDcgKzE2MTAsOCBAQAogewogCWludCBjdDsKIAlzdHJ1Y3QgcnRuZXh0aG9wICpuaHA7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZpZl90YWJsZVtjLT5tZmNfcGFyZW50XS5kZXY7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0LT5pcHY0LnZpZl90YWJsZVtjLT5tZmNfcGFyZW50XS5kZXY7CiAJdTggKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CiAJc3RydWN0IHJ0YXR0ciAqbXBfaGVhZDsKIApAQCAtMTU5OSw3ICsxNjI3LDcgQEAKIAkJCW5ocCA9IChzdHJ1Y3QgcnRuZXh0aG9wICopc2tiX3B1dChza2IsIFJUQV9BTElHTihzaXplb2YoKm5ocCkpKTsKIAkJCW5ocC0+cnRuaF9mbGFncyA9IDA7CiAJCQluaHAtPnJ0bmhfaG9wcyA9IGMtPm1mY191bi5yZXMudHRsc1tjdF07Ci0JCQluaHAtPnJ0bmhfaWZpbmRleCA9IHZpZl90YWJsZVtjdF0uZGV2LT5pZmluZGV4OworCQkJbmhwLT5ydG5oX2lmaW5kZXggPSBuZXQtPmlwdjQudmlmX3RhYmxlW2N0XS5kZXYtPmlmaW5kZXg7CiAJCQluaHAtPnJ0bmhfbGVuID0gc2l6ZW9mKCpuaHApOwogCQl9CiAJfQpAQCAtMTYxMywxNCArMTY0MSwxNSBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKLWludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCkKK2ludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsCisJCSAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KQogewogCWludCBlcnI7CiAJc3RydWN0IG1mY19jYWNoZSAqY2FjaGU7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKHJ0LT5ydF9zcmMsIHJ0LT5ydF9kc3QpOworCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKG5ldCwgcnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CiAKIAlpZiAoY2FjaGUgPT0gTlVMTCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKQEAgLTE2NTEsNyArMTY4MCw3IEBACiAJCWlwaC0+c2FkZHIgPSBydC0+cnRfc3JjOwogCQlpcGgtPmRhZGRyID0gcnQtPnJ0X2RzdDsKIAkJaXBoLT52ZXJzaW9uID0gMDsKLQkJZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKHZpZiwgc2tiMik7CisJCWVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChuZXQsIHZpZiwgc2tiMik7CiAJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTY2OCwxNyArMTY5NywxOSBAQAogICoJVGhlIC9wcm9jIGludGVyZmFjZXMgdG8gbXVsdGljYXN0IHJvdXRpbmcgL3Byb2MvaXBfbXJfY2FjaGUgL3Byb2MvaXBfbXJfdmlmCiAgKi8KIHN0cnVjdCBpcG1yX3ZpZl9pdGVyIHsKKwlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7CiAJaW50IGN0OwogfTsKIAotc3RhdGljIHN0cnVjdCB2aWZfZGV2aWNlICppcG1yX3ZpZl9zZXFfaWR4KHN0cnVjdCBpcG1yX3ZpZl9pdGVyICppdGVyLAorc3RhdGljIHN0cnVjdCB2aWZfZGV2aWNlICppcG1yX3ZpZl9zZXFfaWR4KHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIsCiAJCQkJCSAgIGxvZmZfdCBwb3MpCiB7Ci0JZm9yIChpdGVyLT5jdCA9IDA7IGl0ZXItPmN0IDwgbWF4dmlmOyArK2l0ZXItPmN0KSB7Ci0JCWlmICghVklGX0VYSVNUUyhpdGVyLT5jdCkpCisJZm9yIChpdGVyLT5jdCA9IDA7IGl0ZXItPmN0IDwgbmV0LT5pcHY0Lm1heHZpZjsgKytpdGVyLT5jdCkgeworCQlpZiAoIVZJRl9FWElTVFMobmV0LCBpdGVyLT5jdCkpCiAJCQljb250aW51ZTsKIAkJaWYgKHBvcy0tID09IDApCi0JCQlyZXR1cm4gJnZpZl90YWJsZVtpdGVyLT5jdF07CisJCQlyZXR1cm4gJm5ldC0+aXB2NC52aWZfdGFibGVbaXRlci0+Y3RdOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE2ODYsMjMgKzE3MTcsMjYgQEAKIHN0YXRpYyB2b2lkICppcG1yX3ZpZl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMobXJ0X2xvY2spCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQlyZXR1cm4gKnBvcyA/IGlwbXJfdmlmX3NlcV9pZHgoc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKKwlyZXR1cm4gKnBvcyA/IGlwbXJfdmlmX3NlcV9pZHgobmV0LCBzZXEtPnByaXZhdGUsICpwb3MgLSAxKQogCQk6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIAogc3RhdGljIHZvaWQgKmlwbXJfdmlmX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaXBtcl92aWZfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCSsrKnBvczsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXJldHVybiBpcG1yX3ZpZl9zZXFfaWR4KGl0ZXIsIDApOworCQlyZXR1cm4gaXBtcl92aWZfc2VxX2lkeChuZXQsIGl0ZXIsIDApOwogCi0Jd2hpbGUgKCsraXRlci0+Y3QgPCBtYXh2aWYpIHsKLQkJaWYgKCFWSUZfRVhJU1RTKGl0ZXItPmN0KSkKKwl3aGlsZSAoKytpdGVyLT5jdCA8IG5ldC0+aXB2NC5tYXh2aWYpIHsKKwkJaWYgKCFWSUZfRVhJU1RTKG5ldCwgaXRlci0+Y3QpKQogCQkJY29udGludWU7Ci0JCXJldHVybiAmdmlmX3RhYmxlW2l0ZXItPmN0XTsKKwkJcmV0dXJuICZuZXQtPmlwdjQudmlmX3RhYmxlW2l0ZXItPmN0XTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNzE1LDYgKzE3NDksOCBAQAogCiBzdGF0aWMgaW50IGlwbXJfdmlmX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAiSW50ZXJmYWNlICAgICAgQnl0ZXNJbiAgUGt0c0luICBCeXRlc091dCBQa3RzT3V0IEZsYWdzIExvY2FsICAgIFJlbW90ZVxuIik7CkBAIC0xNzI0LDcgKzE3NjAsNyBAQAogCiAJCXNlcV9wcmludGYoc2VxLAogCQkJICAgIiUyWmQgJS0xMHMgJThsZCAlN2xkICAlOGxkICU3bGQgJTA1WCAlMDhYICUwOFhcbiIsCi0JCQkgICB2aWYgLSB2aWZfdGFibGUsCisJCQkgICB2aWYgLSBuZXQtPmlwdjQudmlmX3RhYmxlLAogCQkJICAgbmFtZSwgdmlmLT5ieXRlc19pbiwgdmlmLT5wa3RfaW4sCiAJCQkgICB2aWYtPmJ5dGVzX291dCwgdmlmLT5wa3Rfb3V0LAogCQkJICAgdmlmLT5mbGFncywgdmlmLT5sb2NhbCwgdmlmLT5yZW1vdGUpOwpAQCAtMTc0MSw4ICsxNzc3LDggQEAKIAogc3RhdGljIGludCBpcG1yX3ZpZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZpcG1yX3ZpZl9zZXFfb3BzLAotCQkJc2l6ZW9mKHN0cnVjdCBpcG1yX3ZpZl9pdGVyKSk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmlwbXJfdmlmX3NlcV9vcHMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcG1yX3ZpZl9pdGVyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwbXJfdmlmX2ZvcHMgPSB7CkBAIC0xNzUwLDIzICsxNzg2LDI2IEBACiAJLm9wZW4gICAgPSBpcG1yX3ZpZl9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogc3RydWN0IGlwbXJfbWZjX2l0ZXIgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlzdHJ1Y3QgbWZjX2NhY2hlICoqY2FjaGU7CiAJaW50IGN0OwogfTsKIAogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9tZmNfc2VxX2lkeChzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9tZmNfc2VxX2lkeChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0LCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBtZmNfY2FjaGUgKm1mYzsKIAotCWl0LT5jYWNoZSA9IG1mY19jYWNoZV9hcnJheTsKKwlpdC0+Y2FjaGUgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5OwogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwogCWZvciAoaXQtPmN0ID0gMDsgaXQtPmN0IDwgTUZDX0xJTkVTOyBpdC0+Y3QrKykKLQkJZm9yIChtZmMgPSBtZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsgbWZjOyBtZmMgPSBtZmMtPm5leHQpCisJCWZvciAobWZjID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOworCQkgICAgIG1mYzsgbWZjID0gbWZjLT5uZXh0KQogCQkJaWYgKHBvcy0tID09IDApCiAJCQkJcmV0dXJuIG1mYzsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwpAQCAtMTc3NCw3ICsxODEzLDggQEAKIAlpdC0+Y2FjaGUgPSAmbWZjX3VucmVzX3F1ZXVlOwogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCWZvciAobWZjID0gbWZjX3VucmVzX3F1ZXVlOyBtZmM7IG1mYyA9IG1mYy0+bmV4dCkKLQkJaWYgKHBvcy0tID09IDApCisJCWlmIChuZXRfZXEobWZjX25ldChtZmMpLCBuZXQpICYmCisJCSAgICBwb3MtLSA9PSAwKQogCQkJcmV0dXJuIG1mYzsKIAlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCkBAIC0xNzg2LDkgKzE4MjYsMTEgQEAKIHN0YXRpYyB2b2lkICppcG1yX21mY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKwogCWl0LT5jYWNoZSA9IE5VTEw7CiAJaXQtPmN0ID0gMDsKLQlyZXR1cm4gKnBvcyA/IGlwbXJfbWZjX3NlcV9pZHgoc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKKwlyZXR1cm4gKnBvcyA/IGlwbXJfbWZjX3NlcV9pZHgobmV0LCBzZXEtPnByaXZhdGUsICpwb3MgLSAxKQogCQk6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIApAQCAtMTc5NiwxMSArMTgzOCwxMiBAQAogewogCXN0cnVjdCBtZmNfY2FjaGUgKm1mYyA9IHY7CiAJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJKysqcG9zOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gaXBtcl9tZmNfc2VxX2lkeChzZXEtPnByaXZhdGUsIDApOworCQlyZXR1cm4gaXBtcl9tZmNfc2VxX2lkeChuZXQsIHNlcS0+cHJpdmF0ZSwgMCk7CiAKIAlpZiAobWZjLT5uZXh0KQogCQlyZXR1cm4gbWZjLT5uZXh0OwpAQCAtMTgwOCwxMCArMTg1MSwxMCBAQAogCWlmIChpdC0+Y2FjaGUgPT0gJm1mY191bnJlc19xdWV1ZSkKIAkJZ290byBlbmRfb2ZfbGlzdDsKIAotCUJVR19PTihpdC0+Y2FjaGUgIT0gbWZjX2NhY2hlX2FycmF5KTsKKwlCVUdfT04oaXQtPmNhY2hlICE9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpOwogCiAJd2hpbGUgKCsraXQtPmN0IDwgTUZDX0xJTkVTKSB7Ci0JCW1mYyA9IG1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOworCQltZmMgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2l0LT5jdF07CiAJCWlmIChtZmMpCiAJCQlyZXR1cm4gbWZjOwogCX0KQEAgLTE4MjMsNiArMTg2Niw4IEBACiAKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAltZmMgPSBtZmNfdW5yZXNfcXVldWU7CisJd2hpbGUgKG1mYyAmJiAhbmV0X2VxKG1mY19uZXQobWZjKSwgbmV0KSkKKwkJbWZjID0gbWZjLT5uZXh0OwogCWlmIChtZmMpCiAJCXJldHVybiBtZmM7CiAKQEAgLTE4MzYsMTYgKzE4ODEsMTggQEAKIHN0YXRpYyB2b2lkIGlwbXJfbWZjX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCWlmIChpdC0+Y2FjaGUgPT0gJm1mY191bnJlc19xdWV1ZSkKIAkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKLQllbHNlIGlmIChpdC0+Y2FjaGUgPT0gbWZjX2NhY2hlX2FycmF5KQorCWVsc2UgaWYgKGl0LT5jYWNoZSA9PSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KQogCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogfQogCiBzdGF0aWMgaW50IGlwbXJfbWZjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCWludCBuOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCXNlcV9wdXRzKHNlcSwKQEAgLTE4NjYsOSArMTkxMyw5IEBACiAJCQkJICAgbWZjLT5tZmNfdW4ucmVzLndyb25nX2lmKTsKIAkJCWZvciAobiA9IG1mYy0+bWZjX3VuLnJlcy5taW52aWY7CiAJCQkgICAgIG4gPCBtZmMtPm1mY191bi5yZXMubWF4dmlmOyBuKysgKSB7Ci0JCQkJaWYgKFZJRl9FWElTVFMobikKLQkJCQkgICAmJiBtZmMtPm1mY191bi5yZXMudHRsc1tuXSA8IDI1NSkKLQkJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQlpZiAoVklGX0VYSVNUUyhuZXQsIG4pICYmCisJCQkJICAgIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dIDwgMjU1KQorCQkJCQlzZXFfcHJpbnRmKHNlcSwKIAkJCQkJICAgIiAlMmQ6JS0zZCIsCiAJCQkJCSAgIG4sIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dKTsKIAkJCX0KQEAgLTE4OTIsOCArMTkzOSw4IEBACiAKIHN0YXRpYyBpbnQgaXBtcl9tZmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmaXBtcl9tZmNfc2VxX29wcywKLQkJCXNpemVvZihzdHJ1Y3QgaXBtcl9tZmNfaXRlcikpOworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZpcG1yX21mY19zZXFfb3BzLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBtcl9tZmNfaXRlcikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG1yX21mY19mb3BzID0gewpAQCAtMTkwMSw3ICsxOTQ4LDcgQEAKIAkub3BlbiAgICA9IGlwbXJfbWZjX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogI2VuZGlmCiAKQEAgLTE5MTUsNiArMTk2Miw2NSBAQAogLyoKICAqCVNldHVwIGZvciBJUCBtdWx0aWNhc3Qgcm91dGluZwogICovCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXBtcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IGVyciA9IDA7CisKKwluZXQtPmlwdjQudmlmX3RhYmxlID0ga2NhbGxvYyhNQVhWSUZTLCBzaXplb2Yoc3RydWN0IHZpZl9kZXZpY2UpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY0LnZpZl90YWJsZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogRm9yd2FyZGluZyBjYWNoZSAqLworCW5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkgPSBrY2FsbG9jKE1GQ19MSU5FUywKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbWZjX2NhY2hlICopLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9tZmNfY2FjaGU7CisJfQorCisjaWZkZWYgQ09ORklHX0lQX1BJTVNNCisJbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA9IC0xOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWVyciA9IC1FTk9NRU07CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcF9tcl92aWYiLCAwLCAmaXBtcl92aWZfZm9wcykpCisJCWdvdG8gcHJvY192aWZfZmFpbDsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlwX21yX2NhY2hlIiwgMCwgJmlwbXJfbWZjX2ZvcHMpKQorCQlnb3RvIHByb2NfY2FjaGVfZmFpbDsKKyNlbmRpZgorCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3Byb2NfY2FjaGVfZmFpbDoKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfbXJfdmlmIik7Citwcm9jX3ZpZl9mYWlsOgorCWtmcmVlKG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpOworI2VuZGlmCitmYWlsX21mY19jYWNoZToKKwlrZnJlZShuZXQtPmlwdjQudmlmX3RhYmxlKTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcG1yX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF9tcl9jYWNoZSIpOworCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF9tcl92aWYiKTsKKyNlbmRpZgorCWtmcmVlKG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpOworCWtmcmVlKG5ldC0+aXB2NC52aWZfdGFibGUpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwbXJfbmV0X29wcyA9IHsKKwkuaW5pdCA9IGlwbXJfbmV0X2luaXQsCisJLmV4aXQgPSBpcG1yX25ldF9leGl0LAorfTsKIAogaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpCiB7CkBAIC0xOTI3LDI2ICsyMDMzLDIwIEBACiAJaWYgKCFtcnRfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwbXJfbmV0X29wcyk7CisJaWYgKGVycikKKwkJZ290byByZWdfcGVybmV0X2ZhaWw7CisKIAlzZXR1cF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIsIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIDApOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfbXJfbm90aWZpZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVnX25vdGlmX2ZhaWw7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQllcnIgPSAtRU5PTUVNOwotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAiaXBfbXJfdmlmIiwgMCwgJmlwbXJfdmlmX2ZvcHMpKQotCQlnb3RvIHByb2NfdmlmX2ZhaWw7Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcF9tcl9jYWNoZSIsIDAsICZpcG1yX21mY19mb3BzKSkKLQkJZ290byBwcm9jX2NhY2hlX2ZhaWw7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotcHJvY19jYWNoZV9mYWlsOgotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJpcF9tcl92aWYiKTsKLXByb2NfdmlmX2ZhaWw6Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwX21yX25vdGlmaWVyKTsKLSNlbmRpZgorCiByZWdfbm90aWZfZmFpbDoKIAlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwbXJfbmV0X29wcyk7CityZWdfcGVybmV0X2ZhaWw6CiAJa21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDM4MTZlMWQuLjE4MzNiZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC0zMSw3ICszMSw3IEBACiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyAvcHJvYyBhbmQgc3lzY3RsIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkCi0JICBsYXllciAzIGRlcGVuZGFudCBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwCisJICBsYXllciAzIGRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwCiAJICBvbGQgcHJvZ3JhbXMgdGhhdCBoYXZlIG5vdCBiZWVuIGFkYXB0ZWQgdG8gdGhlIG5ldyBuYW1lcyB3b3JraW5nLgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgpAQCAtOTUsMTEgKzk1LDExIEBACiBjb25maWcgSVBfTkZfTUFUQ0hfVFRMCiAJdHJpc3RhdGUgJyJ0dGwiIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBUaGlzIGFkZHMgQ09ORklHX0lQX05GX01BVENIX1RUTCBvcHRpb24sIHdoaWNoIGVuYWJsZWQgdGhlIHVzZXIKLQkgIHRvIG1hdGNoIHBhY2tldHMgYnkgdGhlaXIgVFRMIHZhbHVlLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwlzZWxlY3QgTkVURklMVEVSX1hUX01BVENIX0hMCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQorCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCisJQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC4KIAogIyBgZmlsdGVyJywgZ2VuZXJpYyBhbmQgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX0ZJTFRFUgpAQCAtMzIzLDE5ICszMjMsMTMgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVBfTkZfVEFSR0VUX1RUTAotCXRyaXN0YXRlICAnVFRMIHRhcmdldCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVBfTkZfTUFOR0xFCisJdHJpc3RhdGUgJyJUVEwiIHRhcmdldCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBUVEwnIHRhcmdldCwgd2hpY2ggZW5hYmxlcyB0aGUgdXNlciB0byBtb2RpZnkKLQkgIHRoZSBUVEwgdmFsdWUgb2YgdGhlIElQIGhlYWRlci4KLQotCSAgV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQvbG93ZXIgdGhlIFRUTCwgdGhpcyB0YXJnZXQgYWxzbyBlbmFibGVzCi0JICBmdW5jdGlvbmFsaXR5IHRvIGluY3JlbWVudCBhbmQgc2V0IHRoZSBUVEwgdmFsdWUgb2YgdGhlIElQIGhlYWRlciB0bwotCSAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUyBzaW5jZSB5b3UgY2FuIGVhc2lseQotCSAgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wIGZvcmV2ZXIgb24gdGhlIG5ldHdvcmsuCi0KLQkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCXNlbGVjdCBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQorCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCisJQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwuCiAKICMgcmF3ICsgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX1JBVwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDVmOWI2NTAuLjQ4MTExNTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTUxLDcgKzUxLDYgQEAKIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSkgKz0gaXB0X2FkZHJ0eXBlLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BSCkgKz0gaXB0X2FoLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9FQ04pICs9IGlwdF9lY24ubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX1RUTCkgKz0gaXB0X3R0bC5vCiAKICMgdGFyZ2V0cwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVApICs9IGlwdF9DTFVTVEVSSVAubwpAQCAtNjEsNyArNjAsNiBAQAogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVApICs9IGlwdF9ORVRNQVAubwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVCkgKz0gaXB0X1JFRElSRUNULm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUKSArPSBpcHRfUkVKRUNULm8KLW9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfVFRMKSArPSBpcHRfVFRMLm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRykgKz0gaXB0X1VMT0cubwogCiAjIGdlbmVyaWMgQVJQIHRhYmxlcwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggN2VhODhiNi4uMzVjNWY2YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC03Myw2ICs3MywyOCBAQAogCXJldHVybiAocmV0ICE9IDApOwogfQogCisvKgorICogVW5mb3J0dW5hdGx5LCBfYiBhbmQgX21hc2sgYXJlIG5vdCBhbGlnbmVkIHRvIGFuIGludCAob3IgbG9uZyBpbnQpCisgKiBTb21lIGFyY2hlcyBkb250IGNhcmUsIHVucm9sbGluZyB0aGUgbG9vcCBpcyBhIHdpbiBvbiB0aGVtLgorICogRm9yIG90aGVyIGFyY2hlcywgd2Ugb25seSBoYXZlIGEgMTZiaXQgYWxpZ25lbWVudC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaWZuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqX2EsIGNvbnN0IGNoYXIgKl9iLCBjb25zdCBjaGFyICpfbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUworCXVuc2lnbmVkIGxvbmcgcmV0ID0gaWZuYW1lX2NvbXBhcmVfYWxpZ25lZChfYSwgX2IsIF9tYXNrKTsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyByZXQgPSAwOworCWNvbnN0IHUxNiAqYSA9IChjb25zdCB1MTYgKilfYTsKKwljb25zdCB1MTYgKmIgPSAoY29uc3QgdTE2ICopX2I7CisJY29uc3QgdTE2ICptYXNrID0gKGNvbnN0IHUxNiAqKV9tYXNrOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1MTYpOyBpKyspCisJCXJldCB8PSAoYVtpXSBeIGJbaV0pICYgbWFza1tpXTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKIC8qIFJldHVybnMgd2hldGhlciBwYWNrZXQgbWF0Y2hlcyBydWxlIG9yIG5vdC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFycF9wYWNrZXRfbWF0Y2goY29uc3Qgc3RydWN0IGFycGhkciAqYXJwaGRyLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC04Myw3ICsxMDUsNyBAQAogCWNvbnN0IGNoYXIgKmFycHB0ciA9IChjaGFyICopKGFycGhkciArIDEpOwogCWNvbnN0IGNoYXIgKnNyY19kZXZhZGRyLCAqdGd0X2RldmFkZHI7CiAJX19iZTMyIHNyY19pcGFkZHIsIHRndF9pcGFkZHI7Ci0JaW50IGksIHJldDsKKwlsb25nIHJldDsKIAogI2RlZmluZSBGV0lOVihib29sLCBpbnZmbGcpICgoYm9vbCkgXiAhIShhcnBpbmZvLT5pbnZmbGFncyAmIChpbnZmbGcpKSkKIApAQCAtMTU2LDEwICsxNzgsNyBAQAogCX0KIAogCS8qIExvb2sgZm9yIGlmbmFtZSBtYXRjaGVzLiAgKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVo7IGkrKykgewotCQlyZXQgfD0gKGluZGV2W2ldIF4gYXJwaW5mby0+aW5pZmFjZVtpXSkKLQkJCSYgYXJwaW5mby0+aW5pZmFjZV9tYXNrW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShpbmRldiwgYXJwaW5mby0+aW5pZmFjZSwgYXJwaW5mby0+aW5pZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgQVJQVF9JTlZfVklBX0lOKSkgewogCQlkcHJpbnRmKCJWSUEgaW4gbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTE2OCwxMCArMTg3LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laOyBpKyspIHsKLQkJcmV0IHw9IChvdXRkZXZbaV0gXiBhcnBpbmZvLT5vdXRpZmFjZVtpXSkKLQkJCSYgYXJwaW5mby0+b3V0aWZhY2VfbWFza1tpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUob3V0ZGV2LCBhcnBpbmZvLT5vdXRpZmFjZSwgYXJwaW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIEFSUFRfSU5WX1ZJQV9PVVQpKSB7CiAJCWRwcmludGYoIlZJQSBvdXQgbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTIyMSw3ICsyMzcsNyBAQAogCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdOworCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7CiAJY29uc3Qgc3RydWN0IGFycGhkciAqYXJwOwogCWJvb2wgaG90ZHJvcCA9IGZhbHNlOwpAQCAtMjM3LDkgKzI1MywxMCBAQAogCWluZGV2ID0gaW4gPyBpbi0+bmFtZSA6IG51bGxkZXZuYW1lOwogCW91dGRldiA9IG91dCA/IG91dC0+bmFtZSA6IG51bGxkZXZuYW1lOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7Ci0JcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwotCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CisJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCiAJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAliYWNrID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPnVuZGVyZmxvd1tob29rXSk7CiAKQEAgLTMxMSw3ICszMjgsOCBAQAogCQkJZSA9ICh2b2lkICopZSArIGUtPm5leHRfb2Zmc2V0OwogCQl9CiAJfSB3aGlsZSAoIWhvdGRyb3ApOwotCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChob3Rkcm9wKQogCQlyZXR1cm4gTkZfRFJPUDsKQEAgLTM3NCw3ICszOTIsOSBAQAogCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmFycCkpIHx8IHZpc2l0ZWQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgb2xkcG9zLCBzaXplOwogCi0JCQkJaWYgKHQtPnZlcmRpY3QgPCAtTkZfTUFYX1ZFUkRJQ1QgLSAxKSB7CisJCQkJaWYgKChzdHJjbXAodC0+dGFyZ2V0LnUudXNlci5uYW1lLAorCQkJCQkgICAgQVJQVF9TVEFOREFSRF9UQVJHRVQpID09IDApICYmCisJCQkJICAgIHQtPnZlcmRpY3QgPCAtTkZfTUFYX1ZFUkRJQ1QgLSAxKSB7CiAJCQkJCWR1cHJpbnRmKCJtYXJrX3NvdXJjZV9jaGFpbnM6IGJhZCAiCiAJCQkJCQkibmVnYXRpdmUgdmVyZGljdCAoJWkpXG4iLAogCQkJCQkJCQl0LT52ZXJkaWN0KTsKQEAgLTcxNCwxMSArNzM0LDY1IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKKworLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCisgKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KK3N0YXRpYyBpbnQKK2FkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAorCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKworLyogVGFrZSB2YWx1ZXMgZnJvbSBjb3VudGVycyBhbmQgYWRkIHRoZW0gYmFjayBvbnRvIHRoZSBjdXJyZW50IGNwdSAqLworc3RhdGljIHZvaWQgcHV0X2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICp0LAorCQkJIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1tdKQoreworCXVuc2lnbmVkIGludCBpLCBjcHU7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWkgPSAwOworCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCisJCQkgIHQtPnNpemUsCisJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICBjb3VudGVycywKKwkJCSAgJmkpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludAoremVyb19lbnRyeV9jb3VudGVyKHN0cnVjdCBhcnB0X2VudHJ5ICplLCB2b2lkICphcmcpCit7CisJZS0+Y291bnRlcnMuYmNudCA9IDA7CisJZS0+Y291bnRlcnMucGNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9uZV9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSk7CisJCUFSUFRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPnNpemUsCisJCQkJICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAqIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC03MjgsMTQgKzgwMiwzMCBAQAogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CiAKIAlpZiAoY291bnRlcnMgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gbm9tZW07CiAKLQkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0Jd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCWdldF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJaW5mbyA9IHh0X2FsbG9jX3RhYmxlX2luZm8ocHJpdmF0ZS0+c2l6ZSk7CisJaWYgKCFpbmZvKQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOwogCiAJcmV0dXJuIGNvdW50ZXJzOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCkBAIC0xMDc1LDIwICsxMTY1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQotCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkJICAgaW50IGNvbXBhdCkKIHsKQEAgLTExNDgsMTMgKzEyMjQsMTQgQEAKIAkJZ290byBmcmVlOwogCX0KIAotCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X2xvY2soJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwogCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaSA9IDA7CiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMTE2Myw4ICsxMjQwLDEwIEBACiAJCQkgICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgIHBhZGRjLAogCQkJICAgJmkpOworCXByZWVtcHRfZW5hYmxlKCk7CiAgdW5sb2NrX3VwX2ZyZWU6Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOworCiAJeHRfdGFibGVfdW5sb2NrKHQpOwogCW1vZHVsZV9wdXQodC0+bWUpOwogIGZyZWU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKaW5kZXggZTA5MTE4Ny4uNmVjZmRhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwpAQCAtNDgsOCArNDgsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKLQkucHJpdmF0ZQk9IE5VTEwsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBORlBST1RPX0FSUCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCmluZGV4IDQzMmNlOWQuLjVmMjJjOTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KQEAgLTY0MCw2ICs2NDEsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY0IHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CiBNT0RVTEVfQVVUSE9SKCJKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19ORVRfUEZfUFJPVE8oUEZfTkVUTElOSywgTkVUTElOS19GSVJFV0FMTCk7CiAKIG1vZHVsZV9pbml0KGlwX3F1ZXVlX2luaXQpOwogbW9kdWxlX2V4aXQoaXBfcXVldWVfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggZWY4YjZjYS4uODJlZTdjOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtODMsNyArODMsNiBAQAogCQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcGluZm8sCiAJCWludCBpc2ZyYWcpCiB7Ci0Jc2l6ZV90IGk7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKICNkZWZpbmUgRldJTlYoYm9vbCwgaW52ZmxnKSAoKGJvb2wpIF4gISEoaXBpbmZvLT5pbnZmbGFncyAmIChpbnZmbGcpKSkKQEAgLTEwMywxMiArMTAyLDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIExvb2sgZm9yIGlmbmFtZSBtYXRjaGVzOyB0aGlzIHNob3VsZCB1bnJvbGwgbmljZWx5LiAqLwotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykgewotCQlyZXQgfD0gKCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWluZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPmluaWZhY2UpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPmluaWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoaW5kZXYsIGlwaW5mby0+aW5pZmFjZSwgaXBpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUFRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMTcsMTEgKzExMSw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+b3V0aWZhY2UpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPm91dGlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKG91dGRldiwgaXBpbmZvLT5vdXRpZmFjZSwgaXBpbmZvLT5vdXRpZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgSVBUX0lOVl9WSUFfT1VUKSkgewogCQlkcHJpbnRmKCJWSUEgb3V0IG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0zNDcsMTAgKzMzNywxMiBAQAogCW10cGFyLmZhbWlseSAgPSB0Z3Bhci5mYW1pbHkgPSBORlBST1RPX0lQVjQ7CiAJdGdwYXIuaG9va251bSA9IGhvb2s7CiAKLQlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKIAlJUF9ORl9BU1NFUlQodGFibGUtPnZhbGlkX2hvb2tzICYgKDEgPDwgaG9vaykpOwotCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKilwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CisJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCiAJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAogCS8qIEZvciByZXR1cm4gZnJvbSBidWlsdGluIGNoYWluICovCkBAIC00NDUsNyArNDM3LDcgQEAKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKIAotCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKICNpZmRlZiBERUJVR19BTExPV19BTEwKIAlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtNDk2LDcgKzQ4OCw5IEBACiAJCQkgICAgJiYgdW5jb25kaXRpb25hbCgmZS0+aXApKSB8fCB2aXNpdGVkKSB7CiAJCQkJdW5zaWduZWQgaW50IG9sZHBvcywgc2l6ZTsKIAotCQkJCWlmICh0LT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgeworCQkJCWlmICgoc3RyY21wKHQtPnRhcmdldC51LnVzZXIubmFtZSwKKwkJCSAgICAJCSAgICBJUFRfU1RBTkRBUkRfVEFSR0VUKSA9PSAwKSAmJgorCQkJCSAgICB0LT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgewogCQkJCQlkdXByaW50ZigibWFya19zb3VyY2VfY2hhaW5zOiBiYWQgIgogCQkJCQkJIm5lZ2F0aXZlIHZlcmRpY3QgKCVpKVxuIiwKIAkJCQkJCQkJdC0+dmVyZGljdCk7CkBAIC05MjQsMTMgKzkxOCw2OCBAQAogCQkJCSAgY291bnRlcnMsCiAJCQkJICAmaSk7CiAJfQorCit9CisKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAorCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKworLyogVGFrZSB2YWx1ZXMgZnJvbSBjb3VudGVycyBhbmQgYWRkIHRoZW0gYmFjayBvbnRvIHRoZSBjdXJyZW50IGNwdSAqLworc3RhdGljIHZvaWQgcHV0X2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICp0LAorCQkJIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1tdKQoreworCXVuc2lnbmVkIGludCBpLCBjcHU7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWkgPSAwOworCUlQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKKwkJCSAgdC0+c2l6ZSwKKwkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCisJCQkgIGNvdW50ZXJzLAorCQkJICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQKK3plcm9fZW50cnlfY291bnRlcihzdHJ1Y3QgaXB0X2VudHJ5ICplLCB2b2lkICphcmcpCit7CisJZS0+Y291bnRlcnMuYmNudCA9IDA7CisJZS0+Y291bnRlcnMucGNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9uZV9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSk7CisJCUlQVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgIHplcm9fZW50cnlfY291bnRlciwgTlVMTCk7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHh0X2NvdW50ZXJzICogYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05MzksMTQgKzk4OCwzMCBAQAogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CiAKIAlpZiAoY291bnRlcnMgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gbm9tZW07CiAKLQkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0Jd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCWdldF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJaW5mbyA9IHh0X2FsbG9jX3RhYmxlX2luZm8ocHJpdmF0ZS0+c2l6ZSk7CisJaWYgKCFpbmZvKQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOwogCiAJcmV0dXJuIGNvdW50ZXJzOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzMTIsMjcgKzEzNzcsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCi1zdGF0aWMgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLAotCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLSNpZiAwCi0JZHVwcmludGYoImFkZF9jb3VudGVyOiBFbnRyeSAldSAlbHUvJWx1ICsgJWx1LyVsdVxuIiwKLQkJICppLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpZS0+Y291bnRlcnMuYmNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRtZVsqaV0ucGNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRtZVsqaV0uYmNudCk7Ci0jZW5kaWYKLQotCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW50CiBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKQEAgLTEzOTMsMTMgKzE0MzcsMTQgQEAKIAkJZ290byBmcmVlOwogCX0KIAotCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X2xvY2soJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwogCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaSA9IDA7CiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTE0MDgsOCArMTQ1Myw5IEBACiAJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICBwYWRkYywKIAkJCSAgJmkpOworCXByZWVtcHRfZW5hYmxlKCk7CiAgdW5sb2NrX3VwX2ZyZWU6Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOwogCXh0X3RhYmxlX3VubG9jayh0KTsKIAltb2R1bGVfcHV0KHQtPm1lKTsKICBmcmVlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKaW5kZXggMjdhNzhmYi4uYWNjNDRjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBpcHRfbG9nX2xvZ2dlciA9eworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X2xvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXB0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcHRfbG9nX3BhY2tldCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3NmFhZS4uMDAwMDAwMAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogVFRMIG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIElQIHRhYmxlcwotICogKEMpIDIwMDAsMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UVEwuaD4KLQotTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjQgVFRMIGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotdHRsX3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQljb25zdCBzdHJ1Y3QgaXB0X1RUTF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X3R0bDsKLQotCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCi0JCXJldHVybiBORl9EUk9QOwotCi0JaXBoID0gaXBfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUFRfVFRMX1NFVDoKLQkJCW5ld190dGwgPSBpbmZvLT50dGw7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFRfVFRMX0lOQzoKLQkJCW5ld190dGwgPSBpcGgtPnR0bCArIGluZm8tPnR0bDsKLQkJCWlmIChuZXdfdHRsID4gMjU1KQotCQkJCW5ld190dGwgPSAyNTU7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFRfVFRMX0RFQzoKLQkJCW5ld190dGwgPSBpcGgtPnR0bCAtIGluZm8tPnR0bDsKLQkJCWlmIChuZXdfdHRsIDwgMCkKLQkJCQluZXdfdHRsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X3R0bCA9IGlwaC0+dHRsOwotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKG5ld190dGwgIT0gaXBoLT50dGwpIHsKLQkJY3N1bV9yZXBsYWNlMigmaXBoLT5jaGVjaywgaHRvbnMoaXBoLT50dGwgPDwgOCksCi0JCQkJCSAgIGh0b25zKG5ld190dGwgPDwgOCkpOwotCQlpcGgtPnR0bCA9IG5ld190dGw7Ci0JfQotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCB0dGxfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQVF9UVExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfVFRMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQVF9UVExfU0VUICYmIGluZm8tPnR0bCA9PSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IHR0bF90Z19yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIlRUTCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjQsCi0JLnRhcmdldCAJPSB0dGxfdGcsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9UVExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5IAk9IHR0bF90Z19jaGVjaywKLQkubWUgCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHRsX3RnX2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZ0dGxfdGdfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHR0bF90Z19leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJnR0bF90Z19yZWcpOwotfQotCi1tb2R1bGVfaW5pdCh0dGxfdGdfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dGxfdGdfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDE4YTI4MjYuLmQzMmNjNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC0zNzksNyArMzc5LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcHRfdWxvZ19sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcHRfdWxvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXB0X1VMT0ciLAogCS5sb2dmbgkJPSBpcHRfbG9nZm4sCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5N2YxY2IuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVFRMCi0gKgotICogKEMpIDIwMDAsMjAwMSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3R0bC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSVB2NCBUVEwgZmllbGQgbWF0Y2giKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGJvb2wgdHRsX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfdHRsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCB1OCB0dGwgPSBpcF9oZHIoc2tiKS0+dHRsOwotCi0Jc3dpdGNoIChpbmZvLT5tb2RlKSB7Ci0JCWNhc2UgSVBUX1RUTF9FUToKLQkJCXJldHVybiB0dGwgPT0gaW5mby0+dHRsOwotCQljYXNlIElQVF9UVExfTkU6Ci0JCQlyZXR1cm4gdHRsICE9IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX0xUOgotCQkJcmV0dXJuIHR0bCA8IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX0dUOgotCQkJcmV0dXJuIHR0bCA+IGluZm8tPnR0bDsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF90dGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggdHRsX210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJ0dGwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCS5tYXRjaAkJPSB0dGxfbXQsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X3R0bF9pbmZvKSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0dGxfbXRfaW5pdCh2b2lkKQotewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmdHRsX210X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dGxfbXRfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnR0bF9tdF9yZWcpOwotfQotCi1tb2R1bGVfaW5pdCh0dGxfbXRfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dGxfbXRfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCmluZGV4IDUyY2I2OTMuLmMzMGE5NjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCkBAIC01Niw3ICs1Niw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IDM5MjlkMjAuLjQwODc2MTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC02Nyw3ICs2Nyw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X21hbmdsZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKaW5kZXggN2Y2NWQxOC4uZTUzNTZkYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKQEAgLTM5LDcgKzM5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKIAkubmFtZSA9ICJyYXciLAogCS52YWxpZF9ob29rcyA9ICBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCmluZGV4IGE1MmEzNWYuLjI5YWI2MzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwpAQCAtNjAsNyArNjAsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChzZWN1cml0eV90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNGJlYjA0Zi4uN2QyZWFkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xMjAsOCArMTIwLDEwIEBACiAJCXR5cGVvZihuZl9uYXRfc2VxX2FkanVzdF9ob29rKSBzZXFfYWRqdXN0OwogCiAJCXNlcV9hZGp1c3QgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NlcV9hZGp1c3RfaG9vayk7Ci0JCWlmICghc2VxX2FkanVzdCB8fCAhc2VxX2FkanVzdChza2IsIGN0LCBjdGluZm8pKQorCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkgeworCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5mX2N0X25ldChjdCksIGRyb3ApOwogCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KIAl9CiBvdXQ6CiAJLyogV2UndmUgc2VlbiBpdCBjb21pbmcgb3V0IHRoZSBvdGhlciBzaWRlOiBjb25maXJtIGl0ICovCkBAIC0zMjYsNiArMzI4LDExIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpcHY0X25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKGlwdjRfbmxhX3BvbGljeSwgQ1RBX0lQX01BWCArIDEpOworfQogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgc29fZ2V0b3JpZ2RzdCA9IHsKQEAgLTM0NSw2ICszNTIsNyBAQAogCS5nZXRfbDRwcm90bwkgPSBpcHY0X2dldF9sNHByb3RvLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIgPSBpcHY0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUgPSBpcHY0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUgPSBpcHY0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkgPSBpcHY0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMKaW5kZXggNmJhNWM1NS4uODY2OGEzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMKQEAgLTI1LDQwICsyNSw0MiBAQAogCXVuc2lnbmVkIGludCBidWNrZXQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IGhsaXN0X25vZGUgKmN0X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAogCWZvciAoc3QtPmJ1Y2tldCA9IDA7CiAJICAgICBzdC0+YnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogCSAgICAgc3QtPmJ1Y2tldCsrKSB7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKLQkJaWYgKG4pCisJCWlmICghaXNfYV9udWxscyhuKSkKIAkJCXJldHVybiBuOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpjdF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQkJCQkgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGVhZCkKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJICAgICAgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmhlYWQpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOwogCiAJaGVhZCA9IHJjdV9kZXJlZmVyZW5jZShoZWFkLT5uZXh0KTsKLQl3aGlsZSAoaGVhZCA9PSBOVUxMKSB7Ci0JCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQotCQkJcmV0dXJuIE5VTEw7CisJd2hpbGUgKGlzX2FfbnVsbHMoaGVhZCkpIHsKKwkJaWYgKGxpa2VseShnZXRfbnVsbHNfdmFsdWUoaGVhZCkgPT0gc3QtPmJ1Y2tldCkpIHsKKwkJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJCXJldHVybiBOVUxMOworCQl9CiAJCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKIAl9CiAJcmV0dXJuIGhlYWQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqY3RfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpoZWFkID0gY3RfZ2V0X2ZpcnN0KHNlcSk7CiAKIAlpZiAoaGVhZCkKIAkJd2hpbGUgKHBvcyAmJiAoaGVhZCA9IGN0X2dldF9uZXh0KHNlcSwgaGVhZCkpKQpAQCAtODcsNjkgKzg5LDc2IEBACiAKIHN0YXRpYyBpbnQgY3Rfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQogewotCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaGFzaCA9IHY7Ci0JY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoYXNoKTsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmhhc2ggPSB2OworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaGFzaCk7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvOwogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKKwlpbnQgcmV0ID0gMDsKIAogCU5GX0NUX0FTU0VSVChjdCk7CisJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKSkKKwkJcmV0dXJuIDA7CisKIAogCS8qIHdlIG9ubHkgd2FudCB0byBwcmludCBESVJfT1JJR0lOQUwgKi8KIAlpZiAoTkZfQ1RfRElSRUNUSU9OKGhhc2gpKQotCQlyZXR1cm4gMDsKKwkJZ290byByZWxlYXNlOwogCWlmIChuZl9jdF9sM251bShjdCkgIT0gQUZfSU5FVCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gcmVsZWFzZTsKIAogCWwzcHJvdG8gPSBfX25mX2N0X2wzcHJvdG9fZmluZChuZl9jdF9sM251bShjdCkpOwogCU5GX0NUX0FTU0VSVChsM3Byb3RvKTsKIAlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCU5GX0NUX0FTU0VSVChsNHByb3RvKTsKIAorCXJldCA9IC1FTk9TUEM7CiAJaWYgKHNlcV9wcmludGYocywgIiUtOHMgJXUgJWxkICIsCiAJCSAgICAgIGw0cHJvdG8tPm5hbWUsIG5mX2N0X3Byb3RvbnVtKGN0KSwKIAkJICAgICAgdGltZXJfcGVuZGluZygmY3QtPnRpbWVvdXQpCiAJCSAgICAgID8gKGxvbmcpKGN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApICE9IDApCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAobDRwcm90by0+cHJpbnRfY29ubnRyYWNrICYmIGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayhzLCBjdCkpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAocHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKCEodGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY3QtPnN0YXR1cykpKQogCQlpZiAoc2VxX3ByaW50ZihzLCAiW1VOUkVQTElFRF0gIikpCi0JCQlyZXR1cm4gLUVOT1NQQzsKKwkJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAogCQkJbDNwcm90bywgbDRwcm90bykpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAoc2VxX3ByaW50X2FjY3QocywgY3QsIElQX0NUX0RJUl9SRVBMWSkpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cykpCiAJCWlmIChzZXFfcHJpbnRmKHMsICJbQVNTVVJFRF0gIikpCi0JCQlyZXR1cm4gLUVOT1NQQzsKKwkJCWdvdG8gcmVsZWFzZTsKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSwogCWlmIChzZXFfcHJpbnRmKHMsICJtYXJrPSV1ICIsIGN0LT5tYXJrKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCiAJaWYgKHNlcV9wcmludGYocywgInNlY21hcms9JXUgIiwgY3QtPnNlY21hcmspKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogI2VuZGlmCiAKIAlpZiAoc2VxX3ByaW50ZihzLCAidXNlPSV1XG4iLCBhdG9taWNfcmVhZCgmY3QtPmN0X2dlbmVyYWwudXNlKSkpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JcmV0dXJuIDA7CisJCWdvdG8gcmVsZWFzZTsKKwlyZXQgPSAwOworcmVsZWFzZToKKwluZl9jdF9wdXQoY3QpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3Rfc2VxX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggMmE4YmVlMi4uMjNiMmMyZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTI2Miw2ICsyNjIsMTEgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGljbXBfbmxhdHRyX3R1cGxlX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3BvbGljeV9sZW4oaWNtcF9ubGFfcG9saWN5LCBDVEFfUFJPVE9fTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTMwOSw2ICszMTQsNyBAQAogCS5tZQkJCT0gTlVMTCwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyCT0gaWNtcF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplCT0gaWNtcF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gaWNtcF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gaWNtcF9ubGFfcG9saWN5LAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IGE2NWNmNjkuLmZlNjUxODcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC02NzksNyArNjc5LDcgQEAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9uYXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCW5ldC0+aXB2NC5uYXRfYnlzb3VyY2UgPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX25hdF9odGFibGVfc2l6ZSwKLQkJCQkJCSAgICAgICZuZXQtPmlwdjQubmF0X3ZtYWxsb2NlZCk7CisJCQkJCQkgICAgICAmbmV0LT5pcHY0Lm5hdF92bWFsbG9jZWQsIDApOwogCWlmICghbmV0LT5pcHY0Lm5hdF9ieXNvdXJjZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCmluZGV4IGE3ZWIwNDcuLjYzNDhhNzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKG5hdF90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwppbmRleCAxODJmODQ1Li5kOTUyMWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpLAorCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFNOTVBfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogfTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAKIAkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcF90cmFwIiwKIAkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFNOTVBfVFJBUF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihTTk1QX1RSQVBfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvYy5jIGIvbmV0L2lwdjQvcHJvYy5jCmluZGV4IGViNjJlNTguLmNmMGNkZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Byb2MuYworKysgYi9uZXQvaXB2NC9wcm9jLmMKQEAgLTU0LDggKzU0LDggQEAKIAlpbnQgb3JwaGFucywgc29ja2V0czsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KSwKLQlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAorCW9ycGhhbnMgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnRjcF9vcnBoYW5fY291bnQpOworCXNvY2tldHMgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnRjcF9zb2NrZXRzX2FsbG9jYXRlZCk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiAKIAlzb2NrZXRfc2VxX3Nob3coc2VxKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggZGZmOGJjNC4uZjc3NDY1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTQ5Myw2ICs0OTMsNyBAQAogCiAJaXBjLmFkZHIgPSBpbmV0LT5zYWRkcjsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTdmNzExNS4uYzQwZGViZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmdjID0JCQlydF9nYXJiYWdlX2NvbGxlY3QsCiAJLmNoZWNrID0JCWlwdjRfZHN0X2NoZWNrLAogCS5kZXN0cm95ID0JCWlwdjRfZHN0X2Rlc3Ryb3ksCkBAIC0yNjk2LDcgKzI2OTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVULAotCS5wcm90b2NvbAkJPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcHY0X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCkBAIC0yNzc5LDcgKzI3NzksOCBAQAogCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIHJwLCBmbHAsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCitzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCiAJCQlpbnQgbm93YWl0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKQEAgLTI4NDQsOCArMjg0NSw4IEBACiAJCV9fYmUzMiBkc3QgPSBydC0+cnRfZHN0OwogCiAJCWlmIChpcHY0X2lzX211bHRpY2FzdChkc3QpICYmICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChkc3QpICYmCi0JCSAgICBJUFY0X0RFVkNPTkZfQUxMKCZpbml0X25ldCwgTUNfRk9SV0FSRElORykpIHsKLQkJCWludCBlcnIgPSBpcG1yX2dldF9yb3V0ZShza2IsIHIsIG5vd2FpdCk7CisJCSAgICBJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORykpIHsKKwkJCWludCBlcnIgPSBpcG1yX2dldF9yb3V0ZShuZXQsIHNrYiwgciwgbm93YWl0KTsKIAkJCWlmIChlcnIgPD0gMCkgewogCQkJCWlmICghbm93YWl0KSB7CiAJCQkJCWlmIChlcnIgPT0gMCkKQEAgLTI5NTAsNyArMjk1MSw3IEBACiAJaWYgKHJ0bS0+cnRtX2ZsYWdzICYgUlRNX0ZfTk9USUZZKQogCQlydC0+cnRfZmxhZ3MgfD0gUlRDRl9OT1RJRlk7CiAKLQllcnIgPSBydF9maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwKKwllcnIgPSBydF9maWxsX2luZm8obmV0LCBza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLAogCQkJICAgUlRNX05FV1JPVVRFLCAwLCAwKTsKIAlpZiAoZXJyIDw9IDApCiAJCWdvdG8gZXJyb3V0X2ZyZWU7CkBAIC0yOTg4LDcgKzI5ODksNyBAQAogCQkJaWYgKHJ0X2lzX2V4cGlyZWQocnQpKQogCQkJCWNvbnRpbnVlOwogCQkJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7Ci0JCQlpZiAocnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQlpZiAocnRfZmlsbF9pbmZvKG5ldCwgc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJIGNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFLAogCQkJCQkgMSwgTkxNX0ZfTVVMVEkpIDw9IDApIHsKIAkJCQlkc3RfcmVsZWFzZSh4Y2hnKCZza2ItPmRzdCwgTlVMTCkpOwpAQCAtMzM3Niw3ICszMzc3LDcgQEAKIAlpbnQgcmMgPSAwOwogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKLQlpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSk7CisJaXBfcnRfYWNjdCA9IF9fYWxsb2NfcGVyY3B1KDI1NiAqIHNpemVvZihzdHJ1Y3QgaXBfcnRfYWNjdCksIF9fYWxpZ25vZl9fKHN0cnVjdCBpcF9ydF9hY2N0KSk7CiAJaWYgKCFpcF9ydF9hY2N0KQogCQlwYW5pYygiSVA6IGZhaWxlZCB0byBhbGxvY2F0ZSBpcF9ydF9hY2N0XG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA3NmIxNDhiLi4yNDUxYWViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtNjYxLDYgKzY2MSw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94bWl0X3NpemVfZ29hbChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93LAorCQkJCSAgICAgICBpbnQgbGFyZ2VfYWxsb3dlZCkKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwl1MzIgeG1pdF9zaXplX2dvYWwsIG9sZF9zaXplX2dvYWw7CisKKwl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7CisKKwlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkgeworCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KKwkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KKwkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCisJCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOworCisJCXhtaXRfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCB4bWl0X3NpemVfZ29hbCk7CisKKwkJLyogV2UgdHJ5IGhhcmQgdG8gYXZvaWQgZGl2aWRlcyBoZXJlICovCisJCW9sZF9zaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWxfc2VncyAqIG1zc19ub3c7CisKKwkJaWYgKGxpa2VseShvbGRfc2l6ZV9nb2FsIDw9IHhtaXRfc2l6ZV9nb2FsICYmCisJCQkgICBvbGRfc2l6ZV9nb2FsICsgbXNzX25vdyA+IHhtaXRfc2l6ZV9nb2FsKSkgeworCQkJeG1pdF9zaXplX2dvYWwgPSBvbGRfc2l6ZV9nb2FsOworCQl9IGVsc2UgeworCQkJdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgPSB4bWl0X3NpemVfZ29hbCAvIG1zc19ub3c7CisJCQl4bWl0X3NpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbF9zZWdzICogbXNzX25vdzsKKwkJfQorCX0KKworCXJldHVybiBtYXgoeG1pdF9zaXplX2dvYWwsIG1zc19ub3cpOworfQorCitzdGF0aWMgaW50IHRjcF9zZW5kX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZV9nb2FsLCBpbnQgZmxhZ3MpCit7CisJaW50IG1zc19ub3c7CisKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKKwkqc2l6ZV9nb2FsID0gdGNwX3htaXRfc2l6ZV9nb2FsKHNrLCBtc3Nfbm93LCAhKGZsYWdzICYgTVNHX09PQikpOworCisJcmV0dXJuIG1zc19ub3c7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGRvX3RjcF9zZW5kcGFnZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgcG9mZnNldCwKIAkJCSBzaXplX3QgcHNpemUsIGludCBmbGFncykKIHsKQEAgLTY3NywxMyArNzE4LDEyIEBACiAKIAljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwogCi0JbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0Jc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAljb3BpZWQgPSAwOwogCiAJZXJyID0gLUVQSVBFOwogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJZ290byBkb19lcnJvcjsKKwkJZ290byBvdXRfZXJyOwogCiAJd2hpbGUgKHBzaXplID4gMCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spOwpAQCAtNzYxLDggKzgwMSw3IEBACiAJCWlmICgoZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCAmdGltZW8pKSAhPSAwKQogCQkJZ290byBkb19lcnJvcjsKIAotCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQkJc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJfQogCiBvdXQ6CkBAIC04NDQsOCArODgzLDcgQEAKIAkvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAKIAkvKiBPayBjb21tZW5jZSBzZW5kaW5nLiAqLwogCWlvdmxlbiA9IG1zZy0+bXNnX2lvdmxlbjsKQEAgLTg1NCw3ICs4OTIsNyBAQAogCiAJZXJyID0gLUVQSVBFOwogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJZ290byBkb19lcnJvcjsKKwkJZ290byBvdXRfZXJyOwogCiAJd2hpbGUgKC0taW92bGVuID49IDApIHsKIAkJaW50IHNlZ2xlbiA9IGlvdi0+aW92X2xlbjsKQEAgLTEwMDcsOCArMTA0NSw3IEBACiAJCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKIAkJCQlnb3RvIGRvX2Vycm9yOwogCi0JCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQkJCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwkJCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAkJfQogCX0KIApAQCAtMTA0NSw4ICsxMDgyLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHRjcF9yZWN2X3VyZyhzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8sCi0JCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncywKLQkJCWludCAqYWRkcl9sZW4pCisJCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIApAQCAtMTY2MSw3ICsxNjk3LDcgQEAKIAlyZXR1cm4gZXJyOwogCiByZWN2X3VyZzoKLQllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MsIGFkZHJfbGVuKTsKKwllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MpOwogCWdvdG8gb3V0OwogfQogCkBAIC0yNDc4LDIzICsyNTE0LDIzIEBACiAJc3RydWN0IHRjcGhkciAqdGgyOwogCXVuc2lnbmVkIGludCB0aGxlbjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHRvdGFsOwogCXVuc2lnbmVkIGludCBtc3MgPSAxOwogCWludCBmbHVzaCA9IDE7CisJaW50IGk7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnRoKSkpCisJdGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHNpemVvZigqdGgpKTsKKwlpZiAodW5saWtlbHkoIXRoKSkKIAkJZ290byBvdXQ7CiAKLQl0aCA9IHRjcF9oZHIoc2tiKTsKIAl0aGxlbiA9IHRoLT5kb2ZmICogNDsKIAlpZiAodGhsZW4gPCBzaXplb2YoKnRoKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aGxlbikpCisJdGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHRobGVuKTsKKwlpZiAodW5saWtlbHkoIXRoKSkKIAkJZ290byBvdXQ7CiAKLQl0aCA9IHRjcF9oZHIoc2tiKTsKLQlfX3NrYl9wdWxsKHNrYiwgdGhsZW4pOworCXNrYl9ncm9fcHVsbChza2IsIHRobGVuKTsKIAogCWZsYWdzID0gdGNwX2ZsYWdfd29yZCh0aCk7CiAKQEAgLTI1MDQsNyArMjU0MCw3IEBACiAKIAkJdGgyID0gdGNwX2hkcihwKTsKIAotCQlpZiAodGgtPnNvdXJjZSAhPSB0aDItPnNvdXJjZSB8fCB0aC0+ZGVzdCAhPSB0aDItPmRlc3QpIHsKKwkJaWYgKCh0aC0+c291cmNlIF4gdGgyLT5zb3VyY2UpIHwgKHRoLT5kZXN0IF4gdGgyLT5kZXN0KSkgewogCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDA7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjUxOSwxNCArMjU1NSwxNSBAQAogCWZsdXNoIHw9IGZsYWdzICYgVENQX0ZMQUdfQ1dSOwogCWZsdXNoIHw9IChmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSkgJgogCQkgIH4oVENQX0ZMQUdfQ1dSIHwgVENQX0ZMQUdfRklOIHwgVENQX0ZMQUdfUFNIKTsKLQlmbHVzaCB8PSB0aC0+YWNrX3NlcSAhPSB0aDItPmFja19zZXEgfHwgdGgtPndpbmRvdyAhPSB0aDItPndpbmRvdzsKLQlmbHVzaCB8PSBtZW1jbXAodGggKyAxLCB0aDIgKyAxLCB0aGxlbiAtIHNpemVvZigqdGgpKTsKKwlmbHVzaCB8PSAodGgtPmFja19zZXEgXiB0aDItPmFja19zZXEpIHwgKHRoLT53aW5kb3cgXiB0aDItPndpbmRvdyk7CisJZm9yIChpID0gc2l6ZW9mKCp0aCk7ICFmbHVzaCAmJiBpIDwgdGhsZW47IGkgKz0gNCkKKwkJZmx1c2ggfD0gKih1MzIgKikoKHU4ICopdGggKyBpKSBeCisJCQkgKih1MzIgKikoKHU4ICopdGgyICsgaSk7CiAKLQl0b3RhbCA9IHAtPmxlbjsKIAltc3MgPSBza2Jfc2hpbmZvKHApLT5nc29fc2l6ZTsKIAotCWZsdXNoIHw9IHNrYi0+bGVuID4gbXNzIHx8IHNrYi0+bGVuIDw9IDA7Ci0JZmx1c2ggfD0gbnRvaGwodGgyLT5zZXEpICsgdG90YWwgIT0gbnRvaGwodGgtPnNlcSk7CisJZmx1c2ggfD0gKHNrYl9ncm9fbGVuKHNrYikgPiBtc3MpIHwgIXNrYl9ncm9fbGVuKHNrYik7CisJZmx1c2ggfD0gKG50b2hsKHRoMi0+c2VxKSArIHNrYl9ncm9fbGVuKHApKSBeIG50b2hsKHRoLT5zZXEpOwogCiAJaWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZShoZWFkLCBza2IpKSB7CiAJCW1zcyA9IDE7CkBAIC0yNTM4LDcgKzI1NzUsNyBAQAogCXRjcF9mbGFnX3dvcmQodGgyKSB8PSBmbGFncyAmIChUQ1BfRkxBR19GSU4gfCBUQ1BfRkxBR19QU0gpOwogCiBvdXRfY2hlY2tfZmluYWw6Ci0JZmx1c2ggPSBza2ItPmxlbiA8IG1zczsKKwlmbHVzaCA9IHNrYl9ncm9fbGVuKHNrYikgPCBtc3M7CiAJZmx1c2ggfD0gZmxhZ3MgJiAoVENQX0ZMQUdfVVJHIHwgVENQX0ZMQUdfUFNIIHwgVENQX0ZMQUdfUlNUIHwKIAkJCSAgVENQX0ZMQUdfU1lOIHwgVENQX0ZMQUdfRklOKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IDdlYjc2MzYuLjNiNTNmZDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTE0OSwxNiArMTQ5LDcgQEAKIAkJdGNwX3Nsb3dfc3RhcnQodHApOwogCWVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA0ZWM1YjRlLi5lOTJiZWI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTMzNiw2ICszMzYsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zbG93X3N0YXJ0KTsKIAorLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKG9yIGFsdGVybmF0aXZlIHcpICovCit2b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3KQoreworCWlmICh0cC0+c25kX2N3bmRfY250ID49IHcpIHsKKwkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCXRwLT5zbmRfY3duZCsrOworCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl9IGVsc2UgeworCQl0cC0+c25kX2N3bmRfY250Kys7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodGNwX2NvbmdfYXZvaWRfYWkpOworCiAvKgogICogVENQIFJlbm8gY29uZ2VzdGlvbiBjb250cm9sCiAgKiBUaGlzIGlzIHNwZWNpYWwgY2FzZSB1c2VkIGZvciBmYWxsYmFjayBhcyB3ZWxsLgpAQCAtMzY1LDEzICszNzgsNyBAQAogCQkJCXRwLT5zbmRfY3duZCsrOwogCQl9CiAJfSBlbHNlIHsKLQkJLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19jb25nX2F2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggZWU0NjdlYy4uNzFkNWYyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTI5NCwxNiArMjk0LDcgQEAKIAkJdGNwX3Nsb3dfc3RhcnQodHApOwogCX0gZWxzZSB7CiAJCWJpY3RjcF91cGRhdGUoY2EsIHRwLT5zbmRfY3duZCk7Ci0KLQkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KLQkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKLQkJICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IGNhLT5jbnQpIHsKLQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJdHAtPnNuZF9jd25kKys7Ci0JCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfSBlbHNlCi0JCQl0cC0+c25kX2N3bmRfY250Kys7CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBjYS0+Y250KTsKIAl9CiAKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9odGNwLmMgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCmluZGV4IDkzNzU0OWIuLjI2ZDVjN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9odGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwpAQCAtMTE1LDggKzExNSw3IEBACiAJCXJldHVybjsKIAogCS8qIGFjaGlldmVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb25zICovCi0JaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gJiYKLQkgICAgaWNzay0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfRGlzb3JkZXIpIHsKKwlpZiAoISgoMSA8PCBpY3NrLT5pY3NrX2NhX3N0YXRlKSAmIChUQ1BGX0NBX09wZW4gfCBUQ1BGX0NBX0Rpc29yZGVyKSkpIHsKIAkJY2EtPnBhY2tldGNvdW50ID0gMDsKIAkJY2EtPmxhc3R0aW1lID0gbm93OwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGMyODk3NmE3Li4yYmM4ZTI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KQEAgLTExNzgsMTAgKzExNzksMTggQEAKIAkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYWZ0ZXIocmVjZWl2ZWRfdXB0bywgYWNrX3NlcSkgJiYKLQkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwKLQkJICAgICAhYmVmb3JlKHJlY2VpdmVkX3VwdG8sCi0JCQkgICAgIGFja19zZXEgKyB0cC0+cmVvcmRlcmluZyAqIHRwLT5tc3NfY2FjaGUpKSkgeworCQkvKiBUT0RPOiBXZSB3b3VsZCBsaWtlIHRvIGdldCByaWQgb2YgdGNwX2lzX2ZhY2sodHApIG9ubHkKKwkJICogY29uc3RyYWludCBoZXJlIChzZWUgYWJvdmUpIGJ1dCBmaWd1cmluZyBvdXQgdGhhdCBhdAorCQkgKiBsZWFzdCB0cC0+cmVvcmRlcmluZyBTQUNLIGJsb2NrcyByZXNpZGUgYmV0d2VlbiBhY2tfc2VxCisJCSAqIGFuZCByZWNlaXZlZF91cHRvIGlzIG5vdCBlYXN5IHRhc2sgdG8gZG8gY2hlYXBseSB3aXRoCisJCSAqIHRoZSBhdmFpbGFibGUgZGF0YXN0cnVjdHVyZXMuCisJCSAqCisJCSAqIFdoZXRoZXIgRkFDSyBzaG91bGQgY2hlY2sgaGVyZSBmb3IgdHAtPnJlb3JkZXJpbmcgc2VncworCQkgKiBpbi1iZXR3ZWVuIG9uZSBjb3VsZCBhcmd1ZSBmb3IgZWl0aGVyIHdheSAoaXQgd291bGQgYmUKKwkJICogcmF0aGVyIHNpbXBsZSB0byBpbXBsZW1lbnQgYXMgd2UgY291bGQgY291bnQgZmFja19jb3VudAorCQkgKiBkdXJpbmcgdGhlIHdhbGsgYW5kIGRvIHRwLT5mYWNrZXRzX291dCAtIGZhY2tfY291bnQpLgorCQkgKi8KKwkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIApAQCAtMTc5NCwxMSArMTgwMyw3IEBACiAJZm9yIChpID0gdXNlZF9zYWNrcyAtIDE7IGkgPiAwOyBpLS0pIHsKIAkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewogCQkJaWYgKGFmdGVyKHNwW2pdLnN0YXJ0X3NlcSwgc3BbaiArIDFdLnN0YXJ0X3NlcSkpIHsKLQkJCQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgdG1wOwotCi0JCQkJdG1wID0gc3Bbal07Ci0JCQkJc3Bbal0gPSBzcFtqICsgMV07Ci0JCQkJc3BbaiArIDFdID0gdG1wOworCQkJCXN3YXAoc3Bbal0sIHNwW2ogKyAxXSk7CiAKIAkJCQkvKiBUcmFjayB3aGVyZSB0aGUgZmlyc3QgU0FDSyBibG9jayBnb2VzIHRvICovCiAJCQkJaWYgKGogPT0gZmlyc3Rfc2Fja19pbmRleCkKQEAgLTI0NTMsNiArMjQ1OCw0NCBAQAogCXJldHVybiAwOwogfQogCisvKiBOZXcgaGV1cmlzdGljczogaXQgaXMgcG9zc2libGUgb25seSBhZnRlciB3ZSBzd2l0Y2hlZCB0byByZXN0YXJ0IHRpbWVyCisgKiBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuIEhlbmNlLCB3ZSBjYW4gZGV0ZWN0IHRpbWVkIG91dCBwYWNrZXRzCisgKiBkdXJpbmcgZmFzdCByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgorICoKKyAqIFVzZWZ1bG5lc3Mgb2YgdGhpcyBhcyBpcyB2ZXJ5IHF1ZXN0aW9uYWJsZSwgc2luY2Ugd2Ugc2hvdWxkIGtub3cgd2hpY2ggb2YKKyAqIHRoZSBzZWdtZW50cyBpcyB0aGUgbmV4dCB0byB0aW1lb3V0IHdoaWNoIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIHRvIGZpbmQKKyAqIGluIGdlbmVyYWwgY2FzZSB1bmxlc3Mgd2UgYWRkIHNvbWUgZGF0YSBzdHJ1Y3R1cmUganVzdCBmb3IgdGhhdC4gVGhlCisgKiBjdXJyZW50IGFwcHJvYWNoIGNlcnRhaW5seSB3b24ndCBmaW5kIHRoZSByaWdodCBvbmUgdG9vIG9mdGVuIGFuZCB3aGVuIGl0CisgKiBmaW5hbGx5IGRvZXMgZmluZCBfc29tZXRoaW5nXyBpdCB1c3VhbGx5IG1hcmtzIGxhcmdlIHBhcnQgb2YgdGhlIHdpbmRvdworICogcmlnaHQgYXdheSAoYmVjYXVzZSBhIHJldHJhbnNtaXNzaW9uIHdpdGggYSBsYXJnZXIgdGltZXN0YW1wIGJsb2NrcyB0aGUKKyAqIGxvb3AgZnJvbSBhZHZhbmNpbmcpLiAtaWoKKyAqLworc3RhdGljIHZvaWQgdGNwX3RpbWVvdXRfc2ticyhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghdGNwX2lzX2ZhY2sodHApIHx8ICF0Y3BfaGVhZF90aW1lZG91dChzaykpCisJCXJldHVybjsKKworCXNrYiA9IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50OworCWlmICh0cC0+c2NvcmVib2FyZF9za2JfaGludCA9PSBOVUxMKQorCQlza2IgPSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7CisKKwl0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQlpZiAoc2tiID09IHRjcF9zZW5kX2hlYWQoc2spKQorCQkJYnJlYWs7CisJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKKwkJCWJyZWFrOworCisJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOworCX0KKworCXRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID0gc2tiOworCisJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Cit9CisKIC8qIE1hcmsgaGVhZCBvZiBxdWV1ZSB1cCBhcyBsb3N0LiBXaXRoIFJGQzM1MTcgU0FDSywgdGhlIHBhY2tldHMgaXMKICAqIGlzIGFnYWluc3Qgc2Fja2VkICJjbnQiLCBvdGhlcndpc2UgaXQncyBhZ2FpbnN0IGZhY2tlZCAiY250IgogICovCkBAIC0yNTI1LDMwICsyNTY4LDcgQEAKIAkJdGNwX21hcmtfaGVhZF9sb3N0KHNrLCBzYWNrZWRfdXB0byk7CiAJfQogCi0JLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQKLQkgKiB0byByZXN0YXJ0IHRpbWVyIGVhY2ggdGltZSB3aGVuIHNvbWV0aGluZyBpcyBBQ0tlZC4KLQkgKiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cyBkdXJpbmcgZmFzdAotCSAqIHJldHJhbnNtaXQgd2l0aG91dCBmYWxsaW5nIHRvIHNsb3cgc3RhcnQuCi0JICovCi0JaWYgKHRjcF9pc19mYWNrKHRwKSAmJiB0Y3BfaGVhZF90aW1lZG91dChzaykpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50Ci0JCQk6IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKTsKLQotCQl0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb20oc2tiLCBzaykgewotCQkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCQlicmVhazsKLQkJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKLQkJCQlicmVhazsKLQotCQkJdGNwX3NrYl9tYXJrX2xvc3QodHAsIHNrYik7Ci0JCX0KLQotCQl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKLQotCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKLQl9CisJdGNwX3RpbWVvdXRfc2ticyhzayk7CiB9CiAKIC8qIENXTkQgbW9kZXJhdGlvbiwgcHJldmVudGluZyBidXJzdHMgZHVlIHRvIHRvbyBiaWcgQUNLcwpAQCAtMjgxMyw3ICsyODMzLDcgQEAKIAlpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgdGNwX210dXBfcHJvYmVfc3VjY2VzcyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwpAQCAtMjg0MSw3ICsyODYxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAl1MzIgcHJpb3JfbG9zdCA9IHRwLT5sb3N0X291dDsKIAogCXRjcF9mb3Jfd3JpdGVfcXVldWUoc2tiLCBzaykgewpAQCAtMzE3OCw3ICszMTk4LDYgQEAKIAogCXdoaWxlICgoc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spKSAmJiBza2IgIT0gdGNwX3NlbmRfaGVhZChzaykpIHsKIAkJc3RydWN0IHRjcF9za2JfY2IgKnNjYiA9IFRDUF9TS0JfQ0Ioc2tiKTsKLQkJdTMyIGVuZF9zZXE7CiAJCXUzMiBhY2tlZF9wY291bnQ7CiAJCXU4IHNhY2tlZCA9IHNjYi0+c2Fja2VkOwogCkBAIC0zMTkzLDE2ICszMjEyLDggQEAKIAkJCQlicmVhazsKIAogCQkJZnVsbHlfYWNrZWQgPSAwOwotCQkJZW5kX3NlcSA9IHRwLT5zbmRfdW5hOwogCQl9IGVsc2UgewogCQkJYWNrZWRfcGNvdW50ID0gdGNwX3NrYl9wY291bnQoc2tiKTsKLQkJCWVuZF9zZXEgPSBzY2ItPmVuZF9zZXE7Ci0JCX0KLQotCQkvKiBNVFUgcHJvYmluZyBjaGVja3MgKi8KLQkJaWYgKGZ1bGx5X2Fja2VkICYmIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplICYmCi0JCSAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCBzY2ItPmVuZF9zZXEpKSB7Ci0JCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrLCBza2IpOwogCQl9CiAKIAkJaWYgKHNhY2tlZCAmIFRDUENCX1JFVFJBTlMpIHsKQEAgLTMyNjcsMjQgKzMyNzgsMjYgQEAKIAkJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzCiAJCQk9IGluZXRfY3NrKHNrKS0+aWNza19jYV9vcHM7CiAKKwkJaWYgKHVubGlrZWx5KGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplICYmCisJCQkgICAgICFhZnRlcih0cC0+bXR1X3Byb2JlLnByb2JlX3NlcV9lbmQsIHRwLT5zbmRfdW5hKSkpIHsKKwkJCXRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc2spOworCQl9CisKIAkJdGNwX2Fja191cGRhdGVfcnR0KHNrLCBmbGFnLCBzZXFfcnR0KTsKIAkJdGNwX3JlYXJtX3J0byhzayk7CiAKIAkJaWYgKHRjcF9pc19yZW5vKHRwKSkgewogCQkJdGNwX3JlbW92ZV9yZW5vX3NhY2tzKHNrLCBwa3RzX2Fja2VkKTsKIAkJfSBlbHNlIHsKKwkJCWludCBkZWx0YTsKKwogCQkJLyogTm9uLXJldHJhbnNtaXR0ZWQgaG9sZSBnb3QgZmlsbGVkPyBUaGF0J3MgcmVvcmRlcmluZyAqLwogCQkJaWYgKHJlb3JkIDwgcHJpb3JfZmFja2V0cykKIAkJCQl0Y3BfdXBkYXRlX3Jlb3JkZXJpbmcoc2ssIHRwLT5mYWNrZXRzX291dCAtIHJlb3JkLCAwKTsKIAotCQkJLyogTm8gbmVlZCB0byBjYXJlIGZvciB1bmRlcmZsb3dzIGhlcmUgYmVjYXVzZQotCQkJICogdGhlIGxvc3Rfc2tiX2hpbnQgZ2V0cyBOVUxMZWQgaWYgd2UncmUgcGFzdCBpdAotCQkJICogKG9yIHNvbWV0aGluZyBub24tdHJpdmlhbCBoYXBwZW5lZCkKLQkJCSAqLwotCQkJaWYgKHRjcF9pc19mYWNrKHRwKSkKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwa3RzX2Fja2VkOwotCQkJZWxzZQotCQkJCXRwLT5sb3N0X2NudF9oaW50IC09IHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJZGVsdGEgPSB0Y3BfaXNfZmFjayh0cCkgPyBwa3RzX2Fja2VkIDoKKwkJCQkJCSAgcHJpb3Jfc2Fja2VkIC0gdHAtPnNhY2tlZF9vdXQ7CisJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBtaW4odHAtPmxvc3RfY250X2hpbnQsIGRlbHRhKTsKIAkJfQogCiAJCXRwLT5mYWNrZXRzX291dCAtPSBtaW4ocGt0c19hY2tlZCwgdHAtPmZhY2tldHNfb3V0KTsKQEAgLTMzOTYsNyArMzQwOSw3IEBACiAKIAlpZiAodGNwX21heV91cGRhdGVfd2luZG93KHRwLCBhY2ssIGFja19zZXEsIG53aW4pKSB7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAogCQlpZiAodHAtPnNuZF93bmQgIT0gbndpbikgewogCQkJdHAtPnNuZF93bmQgPSBud2luOwpAQCAtMzU3MiwxNSArMzU4NSwxOCBAQAogCWludCBwcmlvcl9wYWNrZXRzOwogCWludCBmcnRvX2N3bmQgPSAwOwogCi0JLyogSWYgdGhlIGFjayBpcyBuZXdlciB0aGFuIHNlbnQgb3Igb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCisJLyogSWYgdGhlIGFjayBpcyBvbGRlciB0aGFuIHByZXZpb3VzIGFja3MKIAkgKiB0aGVuIHdlIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQuCiAJICovCi0JaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQotCQlnb3RvIHVuaW50ZXJlc3RpbmdfYWNrOwotCiAJaWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEpKQogCQlnb3RvIG9sZF9hY2s7CiAKKwkvKiBJZiB0aGUgYWNrIGluY2x1ZGVzIGRhdGEgd2UgaGF2ZW4ndCBzZW50IHlldCwgZGlzY2FyZAorCSAqIHRoaXMgc2VnbWVudCAoUkZDNzkzIFNlY3Rpb24gMy45KS4KKwkgKi8KKwlpZiAoYWZ0ZXIoYWNrLCB0cC0+c25kX254dCkpCisJCWdvdG8gaW52YWxpZF9hY2s7CisKIAlpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZmxhZyB8PSBGTEFHX1NORF9VTkFfQURWQU5DRUQ7CiAKQEAgLTM2MDEsNyArMzYxNyw3IEBACiAJCSAqIE5vIG1vcmUgY2hlY2tzIGFyZSByZXF1aXJlZC4KIAkJICogTm90ZSwgd2UgdXNlIHRoZSBmYWN0IHRoYXQgU05ELlVOQT49U05ELldMMi4KIAkJICovCi0JCXRjcF91cGRhdGVfd2wodHAsIGFjaywgYWNrX3NlcSk7CisJCXRjcF91cGRhdGVfd2wodHAsIGFja19zZXEpOwogCQl0cC0+c25kX3VuYSA9IGFjazsKIAkJZmxhZyB8PSBGTEFHX1dJTl9VUERBVEU7CiAKQEAgLTM2NzAsNiArMzY4NiwxMCBAQAogCQl0Y3BfYWNrX3Byb2JlKHNrKTsKIAlyZXR1cm4gMTsKIAoraW52YWxpZF9hY2s6CisJU09DS19ERUJVRyhzaywgIkFjayAldSBhZnRlciAldToldVxuIiwgYWNrLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOworCXJldHVybiAtMTsKKwogb2xkX2FjazoKIAlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQpIHsKIAkJdGNwX3NhY2t0YWdfd3JpdGVfcXVldWUoc2ssIHNrYiwgcHJpb3Jfc25kX3VuYSk7CkBAIC0zNjc3LDggKzM2OTcsNyBAQAogCQkJdGNwX3RyeV9rZWVwX29wZW4oc2spOwogCX0KIAotdW5pbnRlcmVzdGluZ19hY2s6Ci0JU09DS19ERUJVRyhzaywgIkFjayAldSBvdXQgb2YgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlTT0NLX0RFQlVHKHNrLCAiQWNrICV1IGJlZm9yZSAldToldVxuIiwgYWNrLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOwogCXJldHVybiAwOwogfQogCkBAIC0zODY2LDggKzM4ODUsNyBAQAogCQkgKiBOb3Qgb25seSwgYWxzbyBpdCBvY2N1cnMgZm9yIGV4cGlyZWQgdGltZXN0YW1wcy4KIAkJICovCiAKLQkJaWYgKChzMzIpKHRwLT5yeF9vcHQucmN2X3RzdmFsIC0gdHAtPnJ4X29wdC50c19yZWNlbnQpID49IDAgfHwKLQkJICAgZ2V0X3NlY29uZHMoKSA+PSB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykKKwkJaWYgKHRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCAwKSkKIAkJCXRjcF9zdG9yZV90c19yZWNlbnQodHApOwogCX0KIH0KQEAgLTM5MTksOSArMzkzNyw5IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlyZXR1cm4gKChzMzIpKHRwLT5yeF9vcHQudHNfcmVjZW50IC0gdHAtPnJ4X29wdC5yY3ZfdHN2YWwpID4gVENQX1BBV1NfV0lORE9XICYmCi0JCWdldF9zZWNvbmRzKCkgPCB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUyAmJgotCQkhdGNwX2Rpc29yZGVyZWRfYWNrKHNrLCBza2IpKTsKKworCXJldHVybiAhdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIFRDUF9QQVdTX1dJTkRPVykgJiYKKwkgICAgICAgIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKTsKIH0KIAogLyogQ2hlY2sgc2VnbWVudCBzZXF1ZW5jZSBudW1iZXIgZm9yIHZhbGlkaXR5LgpAQCAtNDA3OSw3ICs0MDk3LDYgQEAKIAkJdHAtPnJ4X29wdC5kc2FjayA9IDE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5zdGFydF9zZXEgPSBzZXE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5lbmRfc2VxID0gZW5kX3NlcTsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIDE7CiAJfQogfQogCkBAIC00MTM0LDggKzQxNTEsNiBAQAogCQkJICogRGVjcmVhc2UgbnVtX3NhY2tzLgogCQkJICovCiAJCQl0cC0+cnhfb3B0Lm51bV9zYWNrcy0tOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJCSAgICAgICB0cC0+cnhfb3B0LmRzYWNrOwogCQkJZm9yIChpID0gdGhpc19zYWNrOyBpIDwgdHAtPnJ4X29wdC5udW1fc2Fja3M7IGkrKykKIAkJCQlzcFtpXSA9IHNwW2kgKyAxXTsKIAkJCWNvbnRpbnVlOwpAQCAtNDE0NCwyMCArNDE1OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NhY2tfc3dhcChzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2sxLAotCQkJCSBzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2syKQotewotCV9fdTMyIHRtcDsKLQotCXRtcCA9IHNhY2sxLT5zdGFydF9zZXE7Ci0Jc2FjazEtPnN0YXJ0X3NlcSA9IHNhY2syLT5zdGFydF9zZXE7Ci0Jc2FjazItPnN0YXJ0X3NlcSA9IHRtcDsKLQotCXRtcCA9IHNhY2sxLT5lbmRfc2VxOwotCXNhY2sxLT5lbmRfc2VxID0gc2FjazItPmVuZF9zZXE7Ci0Jc2FjazItPmVuZF9zZXEgPSB0bXA7Ci19Ci0KIHN0YXRpYyB2b2lkIHRjcF9zYWNrX25ld19vZm9fc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC00MTcyLDcgKzQxNzMsNyBAQAogCQlpZiAodGNwX3NhY2tfZXh0ZW5kKHNwLCBzZXEsIGVuZF9zZXEpKSB7CiAJCQkvKiBSb3RhdGUgdGhpc19zYWNrIHRvIHRoZSBmaXJzdCBvbmUuICovCiAJCQlmb3IgKDsgdGhpc19zYWNrID4gMDsgdGhpc19zYWNrLS0sIHNwLS0pCi0JCQkJdGNwX3NhY2tfc3dhcChzcCwgc3AgLSAxKTsKKwkJCQlzd2FwKCpzcCwgKihzcCAtIDEpKTsKIAkJCWlmIChjdXJfc2Fja3MgPiAxKQogCQkJCXRjcF9zYWNrX21heWJlX2NvYWxlc2NlKHRwKTsKIAkJCXJldHVybjsKQEAgLTQxOTgsNyArNDE5OSw2IEBACiAJc3AtPnN0YXJ0X3NlcSA9IHNlcTsKIAlzcC0+ZW5kX3NlcSA9IGVuZF9zZXE7CiAJdHAtPnJ4X29wdC5udW1fc2Fja3MrKzsKLQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKIH0KIAogLyogUkNWLk5YVCBhZHZhbmNlcywgc29tZSBTQUNLcyBzaG91bGQgYmUgZWF0ZW4uICovCkBAIC00MjEyLDcgKzQyMTIsNiBAQAogCS8qIEVtcHR5IG9mbyBxdWV1ZSwgaGVuY2UsIGFsbCB0aGUgU0FDS3MgYXJlIGVhdGVuLiBDbGVhci4gKi8KIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkgewogCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5kc2FjazsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDIzMywxMSArNDIzMiw3IEBACiAJCXRoaXNfc2FjaysrOwogCQlzcCsrOwogCX0KLQlpZiAobnVtX3NhY2tzICE9IHRwLT5yeF9vcHQubnVtX3NhY2tzKSB7Ci0JCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsKLQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKLQl9CisJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSBudW1fc2Fja3M7CiB9CiAKIC8qIFRoaXMgb25lIGNoZWNrcyB0byBzZWUgaWYgd2UgY2FuIHB1dCBkYXRhIGZyb20gdGhlCkBAIC00MzEzLDEwICs0MzA4LDcgQEAKIAogCVRDUF9FQ05fYWNjZXB0X2N3cih0cCwgc2tiKTsKIAotCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzOwotCX0KKwl0cC0+cnhfb3B0LmRzYWNrID0gMDsKIAogCS8qICBRdWV1ZSBkYXRhIGZvciBkZWxpdmVyeSB0byB0aGUgdXNlci4KIAkgKiAgUGFja2V0cyBpbiBzZXF1ZW5jZSBnbyB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4KQEAgLTQ0MzUsOCArNDQyNyw2IEBACiAJCS8qIEluaXRpYWwgb3V0IG9mIG9yZGVyIHNlZ21lbnQsIGJ1aWxkIDEgU0FDSy4gKi8KIAkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAxOwotCQkJdHAtPnJ4X29wdC5kc2FjayAgICAgPSAwOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAxOwogCQkJdHAtPnNlbGVjdGl2ZV9hY2tzWzBdLnN0YXJ0X3NlcSA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQkJdHAtPnNlbGVjdGl2ZV9hY2tzWzBdLmVuZF9zZXEgPQogCQkJCQkJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOwpAQCAtNTE1Nyw3ICs1MTQ3LDggQEAKIAkgKi8KIAogCWlmICgodGNwX2ZsYWdfd29yZCh0aCkgJiBUQ1BfSFBfQklUUykgPT0gdHAtPnByZWRfZmxhZ3MgJiYKLQkgICAgVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQpIHsKKwkgICAgVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQgJiYKKwkgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwgdHAtPnNuZF9ueHQpKSB7CiAJCWludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLT50Y3BfaGVhZGVyX2xlbjsKIAogCQkvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuCkBAIC01MzEwLDggKzUzMDEsOCBAQAogCQlyZXR1cm4gLXJlczsKIAogc3RlcDU6Ci0JaWYgKHRoLT5hY2spCi0JCXRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCk7CisJaWYgKHRoLT5hY2sgJiYgdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKSA8IDApCisJCWdvdG8gZGlzY2FyZDsKIAogCXRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7CiAKQEAgLTU0MDksNyArNTQwMCw3IEBACiAJCSAqIG5ldmVyIHNjYWxlZC4KIAkJICovCiAJCXRwLT5zbmRfd25kID0gbnRvaHModGgtPndpbmRvdyk7Ci0JCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKIAogCQlpZiAoIXRwLT5yeF9vcHQud3NjYWxlX29rKSB7CiAJCQl0cC0+cnhfb3B0LnNuZF93c2NhbGUgPSB0cC0+cnhfb3B0LnJjdl93c2NhbGUgPSAwOwpAQCAtNTUxMCw3ICs1NTAxLDcgQEAKIAogCS8qIFBBV1MgY2hlY2suICovCiAJaWYgKHRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wICYmIHRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJgotCSAgICB0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCisJICAgIHRjcF9wYXdzX3JlamVjdCgmdHAtPnJ4X29wdCwgMCkpCiAJCWdvdG8gZGlzY2FyZF9hbmRfdW5kbzsKIAogCWlmICh0aC0+c3luKSB7CkBAIC01NjQ4LDcgKzU2MzksNyBAQAogCiAJLyogc3RlcCA1OiBjaGVjayB0aGUgQUNLIGZpZWxkICovCiAJaWYgKHRoLT5hY2spIHsKLQkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCQlpbnQgYWNjZXB0YWJsZSA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPiAwOwogCiAJCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJCWNhc2UgVENQX1NZTl9SRUNWOgpAQCAtNTY3MCw4ICs1NjYxLDcgQEAKIAkJCQl0cC0+c25kX3VuYSA9IFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcTsKIAkJCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpIDw8CiAJCQkJCSAgICAgIHRwLT5yeF9vcHQuc25kX3dzY2FsZTsKLQkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLAotCQkJCQkgICAgVENQX1NLQl9DQihza2IpLT5zZXEpOworCQkJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJCQkvKiB0Y3BfYWNrIGNvbnNpZGVycyB0aGlzIEFDSyBhcyBkdXBsaWNhdGUKIAkJCQkgKiBhbmQgZG9lcyBub3QgY2FsY3VsYXRlIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IGNmNzRjNDEuLmQwYTMxNDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTIyNiwxNSArMTIyNiw2IEBACiAJaWYgKHdhbnRfY29va2llICYmICF0bXBfb3B0LnNhd190c3RhbXApCiAJCXRjcF9jbGVhcl9vcHRpb25zKCZ0bXBfb3B0KTsKIAotCWlmICh0bXBfb3B0LnNhd190c3RhbXAgJiYgIXRtcF9vcHQucmN2X3RzdmFsKSB7Ci0JCS8qIFNvbWUgT1NlcyAodW5rbm93biBvbmVzLCBidXQgSSBzZWUgdGhlbSBvbiB3ZWIgc2VydmVyLCB3aGljaAotCQkgKiBjb250YWlucyBpbmZvcm1hdGlvbiBpbnRlcmVzdGluZyBvbmx5IGZvciB3aW5kb3dzJwotCQkgKiB1c2VycykgZG8gbm90IHNlbmQgdGhlaXIgc3RhbXAgaW4gU1lOLiBJdCBpcyBlYXN5IGNhc2UuCi0JCSAqIFdlIHNpbXBseSBkbyBub3QgYWR2ZXJ0aXNlIFRTIHN1cHBvcnQuCi0JCSAqLwotCQl0bXBfb3B0LnNhd190c3RhbXAgPSAwOwotCQl0bXBfb3B0LnRzdGFtcF9vayAgPSAwOwotCX0KIAl0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDsKIAogCXRjcF9vcGVucmVxX2luaXQocmVxLCAmdG1wX29wdCwgc2tiKTsKQEAgLTIzNTUsNyArMjM0Niw3IEBACiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLQkJaWYgKCF0Y3BfdjRfY2hlY2soc2tiLT5sZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCWlmICghdGNwX3Y0X2NoZWNrKHNrYl9ncm9fbGVuKHNrYiksIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjY3ZWZmYi4uNDNiYmJhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWlmICh0bXBfb3B0LnNhd190c3RhbXApIHsKIAkJCXRtcF9vcHQudHNfcmVjZW50CT0gdGNwdHctPnR3X3RzX3JlY2VudDsKIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wCT0gdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcDsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCkBAIC0zOTksNyArMzk5LDcgQEAKIAogCQl0Y3BfcHJlcXVldWVfaW5pdChuZXd0cCk7CiAKLQkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnNudF9pc24sIHRyZXEtPnJjdl9pc24pOworCQl0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS0+cmN2X2lzbik7CiAKIAkJbmV3dHAtPnNydHQgPSAwOwogCQluZXd0cC0+bWRldiA9IFRDUF9USU1FT1VUX0lOSVQ7CkBAIC00MzQsOSArNDM0LDggQEAKIAkJbmV3dHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKIAogCQluZXd0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJbmV3dHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAwOwotCiAJCW5ld3RwLT5yeF9vcHQubnVtX3NhY2tzID0gMDsKKwogCQluZXd0cC0+dXJnX2RhdGEgPSAwOwogCiAJCWlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKQpAQCAtNTEyLDcgKzUxMSw3IEBACiAJCQkgKiBmcm9tIGFub3RoZXIgZGF0YS4KIAkJCSAqLwogCQkJdG1wX29wdC50c19yZWNlbnRfc3RhbXAgPSBnZXRfc2Vjb25kcygpIC0gKChUQ1BfVElNRU9VVF9JTklUL0haKTw8cmVxLT5yZXRyYW5zKTsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZGEyYzNiOC4uYzFmMjU5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDQxLDEwICs0NDEsNyBAQAogCQkJKnB0cisrID0gaHRvbmwoc3BbdGhpc19zYWNrXS5lbmRfc2VxKTsKIAkJfQogCi0JCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3M7Ci0JCX0KKwkJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAJfQogfQogCkBAIC01NTAsNiArNTQ3LDcgQEAKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiID0gc2tiID8gVENQX1NLQl9DQihza2IpIDogTlVMTDsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1bnNpZ25lZCBzaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgZWZmX3NhY2tzOwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAkqbWQ1ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzayk7CkBAIC01NjgsMTAgKzU2NiwxMSBAQAogCQlzaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KHRwLT5yeF9vcHQuZWZmX3NhY2tzKSkgeworCWVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKKwlpZiAodW5saWtlbHkoZWZmX3NhY2tzKSkgewogCQljb25zdCB1bnNpZ25lZCByZW1haW5pbmcgPSBNQVhfVENQX09QVElPTl9TUEFDRSAtIHNpemU7CiAJCW9wdHMtPm51bV9zYWNrX2Jsb2NrcyA9Ci0JCQltaW5fdCh1bnNpZ25lZCwgdHAtPnJ4X29wdC5lZmZfc2Fja3MsCisJCQltaW5fdCh1bnNpZ25lZCwgZWZmX3NhY2tzLAogCQkJICAgICAgKHJlbWFpbmluZyAtIFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQpIC8KIAkJCSAgICAgIFRDUE9MRU5fU0FDS19QRVJCTE9DSyk7CiAJCXNpemUgKz0gVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCArCkBAIC02NjMsMTAgKzY2MiwxNCBAQAogCXRoLT51cmdfcHRyCQk9IDA7CiAKIAkvKiBUaGUgdXJnX21vZGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGR1cmluZyBhIGJlbG93IHNuZF91bmEgd2luIHByb2JlICovCi0JaWYgKHVubGlrZWx5KHRjcF91cmdfbW9kZSh0cCkgJiYKLQkJICAgICBiZXR3ZWVuKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMSwgdGNiLT5zZXEgKyAweEZGRkYpKSkgewotCQl0aC0+dXJnX3B0cgkJPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOwotCQl0aC0+dXJnCQkJPSAxOworCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmIGJlZm9yZSh0Y2ItPnNlcSwgdHAtPnNuZF91cCkpKSB7CisJCWlmIChiZWZvcmUodHAtPnNuZF91cCwgdGNiLT5zZXEgKyAweDEwMDAwKSkgeworCQkJdGgtPnVyZ19wdHIgPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOworCQkJdGgtPnVyZyA9IDE7CisJCX0gZWxzZSBpZiAoYWZ0ZXIodGNiLT5zZXEgKyAweEZGRkYsIHRwLT5zbmRfbnh0KSkgeworCQkJdGgtPnVyZ19wdHIgPSAweEZGRkY7CisJCQl0aC0+dXJnID0gMTsKKwkJfQogCX0KIAogCXRjcF9vcHRpb25zX3dyaXRlKChfX2JlMzIgKikodGggKyAxKSwgdHAsICZvcHRzLCAmbWQ1X2hhc2hfbG9jYXRpb24pOwpAQCAtNzYzLDExICs3NjYsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbnNpemUsIG9sZF9mYWN0b3I7CiAJaW50IG5sZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKIAotCXRjcF9jbGVhcl9yZXRyYW5zX2hpbnRzX3BhcnRpYWwodHApOwogCW5zaXplID0gc2tiX2hlYWRsZW4oc2tiKSAtIGxlbjsKIAlpZiAobnNpemUgPCAwKQogCQluc2l6ZSA9IDA7CkBAIC04NTAsNiArODUyLDEyIEBACiAJCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKIAkJfQogCQl0Y3BfYWRqdXN0X2ZhY2tldHNfb3V0KHNrLCBza2IsIGRpZmYpOworCisJCWlmICh0cC0+bG9zdF9za2JfaGludCAmJgorCQkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJICAgVENQX1NLQl9DQih0cC0+bG9zdF9za2JfaGludCktPnNlcSkgJiYKKwkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwgVENQX1NLQl9DQihza2IpLT5zYWNrZWQpKQorCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gZGlmZjsKIAl9CiAKIAkvKiBMaW5rIEJVRkYgaW50byB0aGUgc2VuZCBxdWV1ZS4gKi8KQEAgLTkxMyw3ICs5MjEsNyBAQAogCSAqIGZhY3RvciBhbmQgbXNzLgogCSAqLwogCWlmICh0Y3Bfc2tiX3Bjb3VudChza2IpID4gMSkKLQkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSk7CisJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaykpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsMTUgKzk4Miw2IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi0vKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCi1zdGF0aWMgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKLXsKLQlpZiAodHAtPm1heF93aW5kb3cgJiYgcGt0c2l6ZSA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkKLQkJcmV0dXJuIG1heCh0cC0+bWF4X3dpbmRvdyA+PiAxLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCWVsc2UKLQkJcmV0dXJuIHBrdHNpemU7Ci19Ci0KIC8qIFRoaXMgZnVuY3Rpb24gc3luY2hyb25pemUgc25kIG1zcyB0byBjdXJyZW50IHBtdHUvZXh0aGRyIHNldC4KIAogICAgdHAtPnJ4X29wdC51c2VyX21zcyBpcyBtc3Mgc2V0IGJ5IHVzZXIgYnkgVENQX01BWFNFRy4gSXQgZG9lcyBOT1QgY291bnRzCkBAIC0xMDI5LDIyICsxMDI4LDE3IEBACiAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBNU1MsIHRha2luZyBTQUNLcyBhbmQgSVAgb3B0aW9ucywKICAqIGFuZCBldmVuIFBNVFUgZGlzY292ZXJ5IGV2ZW50cyBpbnRvIGFjY291bnQuCiAgKi8KLXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFyZ2VfYWxsb3dlZCkKK3Vuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7CiAJdTMyIG1zc19ub3c7Ci0JdTE2IHhtaXRfc2l6ZV9nb2FsOwotCWludCBkb2luZ190c28gPSAwOwogCXVuc2lnbmVkIGhlYWRlcl9sZW47CiAJc3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1OwogCiAJbXNzX25vdyA9IHRwLT5tc3NfY2FjaGU7CiAKLQlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkKLQkJZG9pbmdfdHNvID0gMTsKLQogCWlmIChkc3QpIHsKIAkJdTMyIG10dSA9IGRzdF9tdHUoZHN0KTsKIAkJaWYgKG10dSAhPSBpbmV0X2NzayhzayktPmljc2tfcG10dV9jb29raWUpCkBAIC0xMDYyLDE5ICsxMDU2LDYgQEAKIAkJbXNzX25vdyAtPSBkZWx0YTsKIAl9CiAKLQl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7Ci0KLQlpZiAoZG9pbmdfdHNvKSB7Ci0JCXhtaXRfc2l6ZV9nb2FsID0gKChzay0+c2tfZ3NvX21heF9zaXplIC0gMSkgLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuIC0KLQkJCQkgIHRwLT50Y3BfaGVhZGVyX2xlbik7Ci0KLQkJeG1pdF9zaXplX2dvYWwgPSB0Y3BfYm91bmRfdG9faGFsZl93bmQodHAsIHhtaXRfc2l6ZV9nb2FsKTsKLQkJeG1pdF9zaXplX2dvYWwgLT0gKHhtaXRfc2l6ZV9nb2FsICUgbXNzX25vdyk7Ci0JfQotCXRwLT54bWl0X3NpemVfZ29hbCA9IHhtaXRfc2l6ZV9nb2FsOwotCiAJcmV0dXJuIG1zc19ub3c7CiB9CiAKQEAgLTEyNTYsNyArMTIzNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF9zZW5kX2hlYWQoc2spOwogCiAJcmV0dXJuIChza2IgJiYKLQkJdGNwX3NuZF90ZXN0KHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSksCisJCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spLAogCQkJICAgICAodGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8KIAkJCSAgICAgIHRwLT5ub25hZ2xlIDogVENQX05BR0xFX1BVU0gpKSk7CiB9CkBAIC0xMjczLDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCBza19idWZmICpidWZmOwogCWludCBubGVuID0gc2tiLT5sZW4gLSBsZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJLyogQWxsIG9mIGEgVFNPIGZyYW1lIG11c3QgYmUgY29tcG9zZWQgb2YgcGFnZWQgZGF0YS4gICovCiAJaWYgKHNrYi0+bGVuICE9IHNrYi0+ZGF0YV9sZW4pCkBAIC0xMzUyLDYgKzEzMzMsMTAgQEAKIAlpZiAobGltaXQgPj0gc2stPnNrX2dzb19tYXhfc2l6ZSkKIAkJZ290byBzZW5kX25vdzsKIAorCS8qIE1pZGRsZSBpbiBxdWV1ZSB3b24ndCBnZXQgYW55IG1vcmUgZGF0YSwgZnVsbCBzZW5kYWJsZSBhbHJlYWR5PyAqLworCWlmICgoc2tiICE9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKSkgJiYgKGxpbWl0ID49IHNrYi0+bGVuKSkKKwkJZ290byBzZW5kX25vdzsKKwogCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikgewogCQl1MzIgY2h1bmsgPSBtaW4odHAtPnNuZF93bmQsIHRwLT5zbmRfY3duZCAqIHRwLT5tc3NfY2FjaGUpOwogCkBAIC0xNDA1LDExICsxMzkwLDExIEBACiAJICAgIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplIHx8CiAJICAgIGluZXRfY3NrKHNrKS0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfT3BlbiB8fAogCSAgICB0cC0+c25kX2N3bmQgPCAxMSB8fAotCSAgICB0cC0+cnhfb3B0LmVmZl9zYWNrcykKKwkgICAgdHAtPnJ4X29wdC5udW1fc2Fja3MgfHwgdHAtPnJ4X29wdC5kc2FjaykKIAkJcmV0dXJuIC0xOwogCiAJLyogVmVyeSBzaW1wbGUgc2VhcmNoIHN0cmF0ZWd5OiBqdXN0IGRvdWJsZSB0aGUgTVNTLiAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCXByb2JlX3NpemUgPSAyICogdHAtPm1zc19jYWNoZTsKIAlzaXplX25lZWRlZCA9IHByb2JlX3NpemUgKyAodHAtPnJlb3JkZXJpbmcgKyAxKSAqIHRwLT5tc3NfY2FjaGU7CiAJaWYgKHByb2JlX3NpemUgPiB0Y3BfbXR1X3RvX21zcyhzaywgaWNzay0+aWNza19tdHVwLnNlYXJjaF9oaWdoKSkgewpAQCAtMTc1NCwxMSArMTczOSw5IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiID0gdGNwX3dyaXRlX3F1ZXVlX25leHQoc2ssIHNrYik7CiAJaW50IHNrYl9zaXplLCBuZXh0X3NrYl9zaXplOwotCXUxNiBmbGFnczsKIAogCXNrYl9zaXplID0gc2tiLT5sZW47CiAJbmV4dF9za2Jfc2l6ZSA9IG5leHRfc2tiLT5sZW47Ci0JZmxhZ3MgPSBUQ1BfU0tCX0NCKHNrYiktPmZsYWdzOwogCiAJQlVHX09OKHRjcF9za2JfcGNvdW50KHNrYikgIT0gMSB8fCB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikgIT0gMSk7CiAKQEAgLTE3NzgsOSArMTc2MSw4IEBACiAJLyogVXBkYXRlIHNlcXVlbmNlIHJhbmdlIG9uIG9yaWdpbmFsIHNrYi4gKi8KIAlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZW5kX3NlcTsKIAotCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gKi8KLQlmbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7IC8qIFRoaXMgbW92ZXMgUFNIL0ZJTiBldGMuIG92ZXIgKi8KLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3M7CisJLyogTWVyZ2Ugb3ZlciBjb250cm9sIGluZm9ybWF0aW9uLiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCisJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7CiAKIAkvKiBBbGwgZG9uZSwgZ2V0IHJpZCBvZiBzZWNvbmQgU0tCIGFuZCBhY2NvdW50IGZvciBpdCBzbwogCSAqIHBhY2tldCBjb3VudGluZyBkb2VzIG5vdCBicmVhay4KQEAgLTE4OTQsNyArMTg3Niw3IEBACiAJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnJlYnVpbGRfaGVhZGVyKHNrKSkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7IC8qIFJvdXRpbmcgZmFpbHVyZSBvciBzaW1pbGFyLiAqLwogCi0JY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAKIAkvKiBJZiByZWNlaXZlciBoYXMgc2hydW5rIGhpcyB3aW5kb3csIGFuZCBza2IgaXMgb3V0IG9mCiAJICogbmV3IHdpbmRvdywgZG8gbm90IHJldHJhbnNtaXQgaXQuIFRoZSBleGNlcHRpb24gaXMgdGhlCkBAIC0xOTA4LDYgKzE4OTAsOCBAQAogCWlmIChza2ItPmxlbiA+IGN1cl9tc3MpIHsKIAkJaWYgKHRjcF9mcmFnbWVudChzaywgc2tiLCBjdXJfbXNzLCBjdXJfbXNzKSkKIAkJCXJldHVybiAtRU5PTUVNOyAvKiBXZSdsbCB0cnkgYWdhaW4gbGF0ZXIuICovCisJfSBlbHNlIHsKKwkJdGNwX2luaXRfdHNvX3NlZ3Moc2ssIHNrYiwgY3VyX21zcyk7CiAJfQogCiAJdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHNrLCBza2IsIGN1cl9tc3MpOwpAQCAtMjA2MSw3ICsyMDQ1LDcgQEAKIAkJCWdvdG8gYmVnaW5fZndkOwogCiAJCX0gZWxzZSBpZiAoIShzYWNrZWQgJiBUQ1BDQl9MT1NUKSkgewotCQkJaWYgKGhvbGUgPT0gTlVMTCAmJiAhKHNhY2tlZCAmIFRDUENCX1NBQ0tFRF9SRVRSQU5TKSkKKwkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiAoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfU0FDS0VEX0FDS0VEKSkpCiAJCQkJaG9sZSA9IHNrYjsKIAkJCWNvbnRpbnVlOwogCkBAIC0yMTAwLDcgKzIwODQsNyBAQAogCSAqIHVuc2VudCBmcmFtZXMuICBCdXQgYmUgY2FyZWZ1bCBhYm91dCBvdXRnb2luZyBTQUNLUwogCSAqIGFuZCBJUCBvcHRpb25zLgogCSAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDEpOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJaWYgKHRjcF9zZW5kX2hlYWQoc2spICE9IE5VTEwpIHsKIAkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX0ZJTjsKQEAgLTIzMjUsNyArMjMwOSw3IEBACiAJc2stPnNrX2VyciA9IDA7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX0RPTkUpOwogCXRwLT5zbmRfd25kID0gMDsKLQl0Y3BfaW5pdF93bCh0cCwgdHAtPndyaXRlX3NlcSwgMCk7CisJdGNwX2luaXRfd2wodHAsIDApOwogCXRwLT5zbmRfdW5hID0gdHAtPndyaXRlX3NlcTsKIAl0cC0+c25kX3NtbCA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC0yNTEyLDcgKzI0OTYsNyBAQAogCWlmICgoc2tiID0gdGNwX3NlbmRfaGVhZChzaykpICE9IE5VTEwgJiYKIAkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCB0Y3Bfd25kX2VuZCh0cCkpKSB7CiAJCWludCBlcnI7Ci0JCXVuc2lnbmVkIGludCBtc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAkJdW5zaWduZWQgaW50IHNlZ19zaXplID0gdGNwX3duZF9lbmQodHApIC0gVENQX1NLQl9DQihza2IpLT5zZXE7CiAKIAkJaWYgKGJlZm9yZSh0cC0+cHVzaGVkX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9wcm9iZS5jIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKaW5kZXggMjU1MjRkNC4uNTlmNWI1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKQEAgLTE2NSw5ICsxNjUsMTAgQEAKIHN0YXRpYyBzc2l6ZV90IHRjcHByb2JlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgZXJyb3IgPSAwLCBjbnQgPSAwOworCWludCBlcnJvciA9IDA7CisJc2l6ZV90IGNudCA9IDA7CiAKLQlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQorCWlmICghYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdoaWxlIChjbnQgPCBsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggNDY2MGIwOC4uYTc2NTEzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTI0LDE0ICsyNCw4IEBACiAKIAlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKLQllbHNlIHsKLQkJdHAtPnNuZF9jd25kX2NudCsrOwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+IG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpKXsKLQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJdHAtPnNuZF9jd25kKys7Ci0JCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfQotCX0KKwllbHNlCisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSk7CiB9CiAKIHN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKaW5kZXggMDE3MGU5MS4uYjE0NGEyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTMyOCwxOSArMzI4LDE2IEBACiAJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPT0gMCkgewogCQlpbnQgbWliX2lkeDsKIAotCQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfRGlzb3JkZXIgfHwKLQkJICAgIGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7Ci0JCQlpZiAodGNwX2lzX3NhY2sodHApKSB7Ci0JCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7Ci0JCQkJZWxzZQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUw7Ci0JCQkJZWxzZQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKLQkJCX0KKwkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyKSB7CisJCQlpZiAodGNwX2lzX3NhY2sodHApKQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQU0FDS0ZBSUxVUkVTOworCQkJZWxzZQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQUkVOT0ZBSUxVUkVTOworCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7CisJCQlpZiAodGNwX2lzX3NhY2sodHApKQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQU0FDS1JFQ09WRVJZRkFJTDsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUw7CiAJCX0gZWxzZSBpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykgewogCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BMT1NTRkFJTFVSRVM7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVuby5jIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwppbmRleCBkMDhiMmU4Li5lOWJiZmY3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdmVuby5jCisrKyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKQEAgLTE1OSwxMiArMTU5LDcgQEAKIAkJCQkvKiBJbiB0aGUgIm5vbi1jb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqICBldmVyeSBydHQuCiAJCQkJICovCi0JCQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCQkJfSBlbHNlCi0JCQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogSW4gdGhlICJjb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqIGV2ZXJ5IG90aGVyIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF95ZWFoLmMgYi9uZXQvaXB2NC90Y3BfeWVhaC5jCmluZGV4IDllYzg0M2EuLjY2YjY4MjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF95ZWFoLmMKKysrIGIvbmV0L2lwdjQvdGNwX3llYWguYwpAQCAtOTQsMTQgKzk0LDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIFJlbm8gKi8KLQotCQlpZiAodHAtPnNuZF9jd25kX2NudCA8IHRwLT5zbmRfY3duZCkKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKLQotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKLQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogCiAJLyogVGhlIGtleSBwbGF5ZXJzIGFyZSB2X3ZlZ2FzLmJlZ19zbmRfdW5hIGFuZCB2X2JlZ19zbmRfbnh0LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBjNDdjOTg5Li5iZGEwOGEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCitpbnQgaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0MSA9IGluZXRfc2soc2sxKSwgKmluZXQyID0gaW5ldF9zayhzazIpOwogCkBAIC01OTYsNiArNTk2LDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCiAJaWYgKHVwLT5wZW5kaW5nKSB7CiAJCS8qCkBAIC02NDMsNiArNjQ0LDkgQEAKIAlpcGMuYWRkciA9IGluZXQtPnNhZGRyOwogCiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJZXJyID0gc29ja190eF90aW1lc3RhbXAobXNnLCBzaywgJmlwYy5zaHR4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuKSB7CiAJCWVyciA9IGlwX2Ntc2dfc2VuZChzb2NrX25ldChzayksIG1zZywgJmlwYyk7CiAJCWlmIChlcnIpCkBAIC0xMTgwLDcgKzExODQsNyBAQAogCQkJc2sgPSBza25leHQ7CiAJCX0gd2hpbGUgKHNrbmV4dCk7CiAJfSBlbHNlCi0JCWtmcmVlX3NrYihza2IpOworCQljb25zdW1lX3NrYihza2IpOwogCXNwaW5fdW5sb2NrKCZoc2xvdC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjE0LDcgKzE2MTgsOCBAQAogCX0gd2hpbGUgKHNrICYmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSB8fCBzay0+c2tfZmFtaWx5ICE9IHN0YXRlLT5mYW1pbHkpKTsKIAogCWlmICghc2spIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT51ZHBfdGFibGUtPmhhc2hbc3RhdGUtPmJ1Y2tldF0ubG9jayk7CisJCWlmIChzdGF0ZS0+YnVja2V0IDwgVURQX0hUQUJMRV9TSVpFKQorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT51ZHBfdGFibGUtPmhhc2hbc3RhdGUtPmJ1Y2tldF0ubG9jayk7CiAJCXJldHVybiB1ZHBfZ2V0X2ZpcnN0KHNlcSwgc3RhdGUtPmJ1Y2tldCArIDEpOwogCX0KIAlyZXR1cm4gc2s7CkBAIC0xNjMyLDYgKzE2MzcsOSBAQAogCiBzdGF0aWMgdm9pZCAqdWRwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CisJc3RydWN0IHVkcF9pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdGF0ZS0+YnVja2V0ID0gVURQX0hUQUJMRV9TSVpFOworCiAJcmV0dXJuICpwb3MgPyB1ZHBfZ2V0X2lkeChzZXEsICpwb3MtMSkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTE4MTUsNiArMTgyMyw3IEBACiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfc2V0c29ja29wdCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9wb2xsKTsKIEVYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRfcG9ydCk7CitFWFBPUlRfU1lNQk9MKGlwdjRfcmN2X3NhZGRyX2VxdWFsKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBFWFBPUlRfU1lNQk9MKHVkcF9wcm9jX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggMmFkMjRiYS4uNjBkOTE4YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmdjID0JCQl4ZnJtNF9nYXJiYWdlX2NvbGxlY3QsCiAJLnVwZGF0ZV9wbXR1ID0JCXhmcm00X3VwZGF0ZV9wbXR1LAogCS5kZXN0cm95ID0JCXhmcm00X2RzdF9kZXN0cm95LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMTIyMGUyYy4uYTgyMThiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC00MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpAQCAtNTkwLDYgKzU5MSw3IEBACiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhID0gTlVMTDsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAlpbnQgaGFzaDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoYWRkcik7CkBAIC02MDYsNiArNjA4LDExIEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKKwlpZiAoaWRldi0+Y25mLmRpc2FibGVfaXB2NiB8fCBuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmRpc2FibGVfaXB2NikgeworCQllcnIgPSAtRUFDQ0VTOworCQlnb3RvIG91dDI7CisJfQorCiAJd3JpdGVfbG9jaygmYWRkcmNvbmZfaGFzaF9sb2NrKTsKIAogCS8qIElnbm9yZSBhZGRpbmcgZHVwbGljYXRlIGFkZHJlc3NlcyBvbiBhbiBpbnRlcmZhY2UgKi8KQEAgLTEyMDksMTYgKzEyMTYsMTIgQEAKIAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9IGVsc2UgaWYgKG1pbmloaXNjb3JlIDwgbWluaXNjb3JlKSB7Ci0JCQkJCXN0cnVjdCBpcHY2X3NhZGRyX3Njb3JlICp0bXA7Ci0KIAkJCQkJaWYgKGhpc2NvcmUtPmlmYSkKIAkJCQkJCWluNl9pZmFfcHV0KGhpc2NvcmUtPmlmYSk7CiAKIAkJCQkJaW42X2lmYV9ob2xkKHNjb3JlLT5pZmEpOwogCi0JCQkJCXRtcCA9IGhpc2NvcmU7Ci0JCQkJCWhpc2NvcmUgPSBzY29yZTsKLQkJCQkJc2NvcmUgPSB0bXA7CisJCQkJCXN3YXAoaGlzY29yZSwgc2NvcmUpOwogCiAJCQkJCS8qIHJlc3RvcmUgb3VyIGl0ZXJhdG9yICovCiAJCQkJCXNjb3JlLT5pZmEgPSBoaXNjb3JlLT5pZmE7CkBAIC0xMzY3LDQwICsxMzcwLDYgQEAKIAlyZXR1cm4gaWZwOwogfQogCi1pbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQotewotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7Ci0JX19iZTMyIHNrX3Jjdl9zYWRkciA9IGluZXRfc2soc2spLT5yY3Zfc2FkZHI7Ci0JX19iZTMyIHNrMl9yY3Zfc2FkZHIgPSBpbmV0X3Jjdl9zYWRkcihzazIpOwotCWludCBza19pcHY2b25seSA9IGlwdjZfb25seV9zb2NrKHNrKTsKLQlpbnQgc2syX2lwdjZvbmx5ID0gaW5ldF92Nl9pcHY2b25seShzazIpOwotCWludCBhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZShza19yY3Zfc2FkZHI2KTsKLQlpbnQgYWRkcl90eXBlMiA9IHNrMl9yY3Zfc2FkZHI2ID8gaXB2Nl9hZGRyX3R5cGUoc2syX3Jjdl9zYWRkcjYpIDogSVBWNl9BRERSX01BUFBFRDsKLQotCWlmICghc2syX3Jjdl9zYWRkciAmJiAhc2tfaXB2Nm9ubHkpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCi0JICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKLQkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQgJiYKLQkgICAgIXNrMl9pcHY2b25seSAmJgotCSAgICAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkciB8fCBza19yY3Zfc2FkZHIgPT0gc2syX3Jjdl9zYWRkcikpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIEdldHMgcmVmZXJlbmNlZCBhZGRyZXNzLCBkZXN0cm95cyBpZmFkZHIgKi8KIAogc3RhdGljIHZvaWQgYWRkcmNvbmZfZGFkX3N0b3Aoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwKQpAQCAtMTQzMyw2ICsxNDAyLDExIEBACiB2b2lkIGFkZHJjb25mX2RhZF9mYWlsdXJlKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaWZwLT5pZGV2OworCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElQdjYgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLAorCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOworCiAJaWYgKGlkZXYtPmNuZi5hY2NlcHRfZGFkID4gMSAmJiAhaWRldi0+Y25mLmRpc2FibGVfaXB2NikgewogCQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKIApAQCAtMTQ0MywxMSArMTQxNywxMiBAQAogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsICZhZGRyKSkgewogCQkJLyogREFEIGZhaWxlZCBmb3IgbGluay1sb2NhbCBiYXNlZCBvbiBNQUMgYWRkcmVzcyAqLwogCQkJaWRldi0+Y25mLmRpc2FibGVfaXB2NiA9IDE7CisKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGJlaW5nIGRpc2FibGVkIVxuIiwKKwkJCQlpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJCX0KIAl9CiAKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLCBpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJYWRkcmNvbmZfZGFkX3N0b3AoaWZwKTsKIH0KIApAQCAtMjIyNywxMCArMjIwMiwyNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGFkZF9hZGRyKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJICAgICBpbnQgcGxlbiwgaW50IHNjb3BlKQoreworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDsKKworCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgYWRkciwgcGxlbiwgc2NvcGUsIElGQV9GX1BFUk1BTkVOVCk7CisJaWYgKCFJU19FUlIoaWZwKSkgeworCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKKwkJaW42X2lmYV9wdXQoaWZwKTsKKwl9Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X1NJVCkgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9TSVRfTU9EVUxFKQogc3RhdGljIHZvaWQgc2l0X2FkZF92NF9hZGRycyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewotCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKiBpZnA7CiAJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CkBAIC0yMjQ5LDE0ICsyMjM4LDcgQEAKIAl9CiAKIAlpZiAoYWRkci5zNl9hZGRyMzJbM10pIHsKLQkJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmYWRkciwgMTI4LCBzY29wZSwgSUZBX0ZfUEVSTUFORU5UKTsKLQkJaWYgKCFJU19FUlIoaWZwKSkgewotCQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJaWZwLT5mbGFncyAmPSB+SUZBX0ZfVEVOVEFUSVZFOwotCQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7Ci0JCQlpbjZfaWZhX3B1dChpZnApOwotCQl9CisJCWFkZF9hZGRyKGlkZXYsICZhZGRyLCAxMjgsIHNjb3BlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI4NCwxNSArMjI2Niw3IEBACiAJCQkJZWxzZQogCQkJCQlwbGVuID0gOTY7CiAKLQkJCQlpZnAgPSBpcHY2X2FkZF9hZGRyKGlkZXYsICZhZGRyLCBwbGVuLCBmbGFnLAotCQkJCQkJICAgIElGQV9GX1BFUk1BTkVOVCk7Ci0JCQkJaWYgKCFJU19FUlIoaWZwKSkgewotCQkJCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQkJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJCQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQkJCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKLQkJCQkJaW42X2lmYV9wdXQoaWZwKTsKLQkJCQl9CisJCQkJYWRkX2FkZHIoaWRldiwgJmFkZHIsIHBsZW4sIGZsYWcpOwogCQkJfQogCQl9CiAJfQpAQCAtMjMwMiw3ICsyMjc2LDYgQEAKIHN0YXRpYyB2b2lkIGluaXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICAqaWRldjsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwogCiAJLyogOjoxICovCiAKQEAgLTIzMTMsMTQgKzIyODYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCwgSUZBX0ZfUEVSTUFORU5UKTsKLQlpZiAoIUlTX0VSUihpZnApKSB7Ci0JCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJaWZwLT5mbGFncyAmPSB+SUZBX0ZfVEVOVEFUSVZFOwotCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJaXB2Nl9pZmFfbm90aWZ5KFJUTV9ORVdBRERSLCBpZnApOwotCQlpbjZfaWZhX3B1dChpZnApOwotCX0KKwlhZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtMjgzMiwxMSArMjc5OCw2IEBACiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgaWRldi0+Y25mLmRpc2FibGVfaXB2NikgewotCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCWFkZHJjb25mX2RhZF9mYWlsdXJlKGlmcCk7Ci0JCXJldHVybjsKLQl9CiAJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwogCWlmIChpZnAtPnByb2JlcyA9PSAwKSB7CiAJCS8qCkBAIC0zNjQ3LDcgKzM2MDgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOwpAQCAtMzg1OCw3ICszODIwLDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X0lGQUREUiwgZXJyKTsKQEAgLTM5MjgsNyArMzg5MSw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBkYTk0NGVjLi42MWY1NTM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTI3NiwxMSArMjc2LDI2IEBACiAKIAkvKiBDaGVjayBpZiB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBob3N0LiAqLwogCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkgewotCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOwotCQlpZiAoaW5ldF9hZGRyX3R5cGUobmV0LCB2NGFkZHIpICE9IFJUTl9MT0NBTCkgewotCQkJZXJyID0gLUVBRERSTk9UQVZBSUw7CisJCWludCBjaGtfYWRkcl9yZXQ7CisKKwkJLyogQmluZGluZyB0byB2NC1tYXBwZWQgYWRkcmVzcyBvbiBhIHY2LW9ubHkgc29ja2V0CisJCSAqIG1ha2VzIG5vIHNlbnNlCisJCSAqLworCQlpZiAobnAtPmlwdjZvbmx5KSB7CisJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KKworCQkvKiBSZXByb2R1Y2UgQUZfSU5FVCBjaGVja3MgdG8gbWFrZSB0aGUgYmluZGluZ3MgY29uc2l0YW50ICovCisJCXY0YWRkciA9IGFkZHItPnNpbjZfYWRkci5zNl9hZGRyMzJbM107CisJCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKG5ldCwgdjRhZGRyKTsKKwkJaWYgKCFzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCAmJgorCQkgICAgIShpbmV0LT5mcmVlYmluZCB8fCBpbmV0LT50cmFuc3BhcmVudCkgJiYKKwkJICAgIHY0YWRkciAhPSBodG9ubChJTkFERFJfQU5ZKSAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9MT0NBTCAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9NVUxUSUNBU1QgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fQlJPQURDQVNUKQorCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKSB7CiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKQEAgLTMzOSw4ICszNTQsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKQorCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkgewogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklOREFERFJfTE9DSzsKKwkJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfTUFQUEVEKQorCQkJbnAtPmlwdjZvbmx5ID0gMTsKKwl9CiAJaWYgKHNudW0pCiAJCXNrLT5za191c2VybG9ja3MgfD0gU09DS19CSU5EUE9SVF9MT0NLOwogCWluZXQtPnNwb3J0ID0gaHRvbnMoaW5ldC0+bnVtKTsKQEAgLTgwMywyNCArODIxLDM0IEBACiAJaW50IHByb3RvOwogCV9fd3N1bSBjc3VtOwogCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkpCisJaXBoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmlwaCkpOworCWlmICh1bmxpa2VseSghaXBoKSkKIAkJZ290byBvdXQ7CiAKLQlpcGggPSBpcHY2X2hkcihza2IpOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9ncm9fcHVsbChza2IsIHNpemVvZigqaXBoKSk7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CiAKLQlmbHVzaCArPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAhPSBza2ItPmxlbjsKKwlmbHVzaCArPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAhPSBza2JfZ3JvX2xlbihza2IpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgaXBoLT5uZXh0aGRyKTsKLQlpcGggPSBpcHY2X2hkcihza2IpOwotCUlQVjZfR1JPX0NCKHNrYiktPnByb3RvID0gcHJvdG87CisJcHJvdG8gPSBpcGgtPm5leHRoZHI7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X3Byb3Rvc1twcm90b10pOwotCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQotCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKCFvcHMgfHwgIW9wcy0+Z3JvX3JlY2VpdmUpIHsKKwkJX19wc2tiX3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKwkJcHJvdG8gPSBpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBwcm90byk7CisJCXNrYl9ncm9fcHVsbChza2IsIC1za2JfdHJhbnNwb3J0X29mZnNldChza2IpKTsKKwkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwkJX19za2JfcHVzaChza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOworCisJCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCWlwaCA9IGlwdjZfaGRyKHNrYik7CisJfQorCisJSVBWNl9HUk9fQ0Ioc2tiKS0+cHJvdG8gPSBwcm90bzsKIAogCWZsdXNoLS07Ci0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlubGVuID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwogCiAJZm9yIChwID0gKmhlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CkBAIC04ODMsOCArOTExLDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwdjZfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZnVuYyA9IGlwdjZfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGlwdjZfZ3NvX3NlbmRfY2hlY2ssCiAJLmdzb19zZWdtZW50ID0gaXB2Nl9nc29fc2VnbWVudCwKQEAgLTExOTIsNiArMTIyMCw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpbmV0Nl9leGl0KHZvaWQpCiB7CisJaWYgKGRpc2FibGVfaXB2NikKKwkJcmV0dXJuOworCiAJLyogRmlyc3Qgb2YgYWxsIGRpc2FsbG93IG5ldyBzb2NrZXRzIGNyZWF0aW9uLiAqLwogCXNvY2tfdW5yZWdpc3RlcihQRl9JTkVUNik7CiAJLyogRGlzYWxsb3cgYW55IGZ1cnRoZXIgbmV0bGluayBtZXNzYWdlcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCBmMTcxZThkLi44ZjA0YmQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtNzUsOCArNzUsNyBAQAogCWlmICgoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwgfHwKIAkgICAgIWlkZXYgfHwgdW5saWtlbHkoaWRldi0+Y25mLmRpc2FibGVfaXB2NikpIHsKIAkJSVA2X0lOQ19TVEFUU19CSChuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZHJvcDsKIAl9CiAKIAltZW1zZXQoSVA2Q0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0Nl9za2JfcGFybSkpOwpAQCAtMTQ3LDcgKzE0Niw2IEBACiBkcm9wOgogCXJjdV9yZWFkX3VubG9jaygpOwogCWtmcmVlX3NrYihza2IpOwotb3V0OgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggNDBmMzI0Ni4uZDMxZGYwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMjE4LDggKzIxOCw3IEBACiAJCQlpZiAob3B0KQogCQkJCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOwogCQkJcGt0b3B0ID0geGNoZygmbnAtPnBrdG9wdGlvbnMsIE5VTEwpOwotCQkJaWYgKHBrdG9wdCkKLQkJCQlrZnJlZV9za2IocGt0b3B0KTsKKwkJCWtmcmVlX3NrYihwa3RvcHQpOwogCiAJCQlzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggM2UyOTcwOC4uOWYwNjFkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xMDk1LDExICsxMDk1LDcgQEAKIAkJJmlwdjZfaGRyKHJhKS0+c2FkZHIpOwogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORF9VU0VST1BULCBOVUxMLAotCQkJICBHRlBfQVRPTUlDKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvdXQ7Ci0KKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORF9VU0VST1BULCBOVUxMLCBHRlBfQVRPTUlDKTsKIAlyZXR1cm47CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTE1MzgsMTMgKzE1MzQsMTAgQEAKIAlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfR0FURVdBWSkgewogCQlORF9QUklOVEsyKEtFUk5fV0FSTklORwogCQkJICAgIklDTVB2NiBSZWRpcmVjdDogZGVzdGluYXRpb24gaXMgbm90IGEgbmVpZ2hib3VyLlxuIik7Ci0JCWRzdF9yZWxlYXNlKGRzdCk7Ci0JCXJldHVybjsKKwkJZ290byByZWxlYXNlOwogCX0KLQlpZiAoIXhybGltX2FsbG93KGRzdCwgMSpIWikpIHsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIXhybGltX2FsbG93KGRzdCwgMSpIWikpCisJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChkZXYtPmFkZHJfbGVuKSB7CiAJCXJlYWRfbG9ja19iaCgmbmVpZ2gtPmxvY2spOwpAQCAtMTU3MCw4ICsxNTYzLDcgQEAKIAkJTkRfUFJJTlRLMChLRVJOX0VSUgogCQkJICAgIklDTVB2NiBSZWRpcmVjdDogJXMoKSBmYWlsZWQgdG8gYWxsb2NhdGUgYW4gc2tiLlxuIiwKIAkJCSAgIF9fZnVuY19fKTsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOworCQlnb3RvIHJlbGVhc2U7CiAJfQogCiAJc2tiX3Jlc2VydmUoYnVmZiwgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSk7CkBAIC0xNjMxLDYgKzE2MjMsMTAgQEAKIAogCWlmIChsaWtlbHkoaWRldiAhPSBOVUxMKSkKIAkJaW42X2Rldl9wdXQoaWRldik7CisJcmV0dXJuOworCityZWxlYXNlOgorCWRzdF9yZWxlYXNlKGRzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBuZGlzY19yZWRvKHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDUzZWE1MTIuLjI5ZDY0M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCkBAIC05NSwxMyArOTUsMTMgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVA2X05GX01BVENIX0hMCi0JdHJpc3RhdGUgJyJobCIgbWF0Y2ggc3VwcG9ydCcKKwl0cmlzdGF0ZSAnImhsIiBob3BsaW1pdCBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgSEwgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3AKLQkgIGxpbWl0IG9mIHRoZSBwYWNrZXQuCi0KLQkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCXNlbGVjdCBORVRGSUxURVJfWFRfTUFUQ0hfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMLgogCiBjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVIKIAl0cmlzdGF0ZSAnImlwdjZoZWFkZXIiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnCkBAIC0xMzAsNiArMTMwLDE1IEBACiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogIyBUaGUgdGFyZ2V0cworY29uZmlnIElQNl9ORl9UQVJHRVRfSEwKKwl0cmlzdGF0ZSAnIkhMIiBob3BsaW1pdCB0YXJnZXQgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCXNlbGVjdCBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXIncyBjb252ZW5pZW5jZQorCShlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzCisJQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwuCisKIGNvbmZpZyBJUDZfTkZfVEFSR0VUX0xPRwogCXRyaXN0YXRlICJMT0cgdGFyZ2V0IHN1cHBvcnQiCiAJZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uCkBAIC0xNzAsMjMgKzE3OSw2IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgSVA2X05GX1RBUkdFVF9ITAotCXRyaXN0YXRlICAnSEwgKGhvcGxpbWl0KSB0YXJnZXQgc3VwcG9ydCcKLQlkZXBlbmRzIG9uIElQNl9ORl9NQU5HTEUKLQlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgSEwnIHRhcmdldCwgd2hpY2ggZW5hYmxlcyB0aGUgdXNlciB0byBkZWNyZW1lbnQKLQkgIHRoZSBob3BsaW1pdCB2YWx1ZSBvZiB0aGUgSVB2NiBoZWFkZXIgb3Igc2V0IGl0IHRvIGEgZ2l2ZW4gKGxvd2VyKQotCSAgdmFsdWUuCi0KLQkgIFdoaWxlIGl0IGlzIHNhZmUgdG8gZGVjcmVtZW50IHRoZSBob3BsaW1pdCB2YWx1ZSwgdGhpcyBvcHRpb24gYWxzbwotCSAgZW5hYmxlcyBmdW5jdGlvbmFsaXR5IHRvIGluY3JlbWVudCBhbmQgc2V0IHRoZSBob3BsaW1pdCB2YWx1ZSBvZiB0aGUKLQkgIElQdjYgaGVhZGVyIHRvIGFyYml0cmFyeSB2YWx1ZXMuICBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMgc2luY2UKLQkgIHlvdSBjYW4gZWFzaWx5IGNyZWF0ZSBpbW1vcnRhbCBwYWNrZXRzIHRoYXQgbG9vcCBmb3JldmVyIG9uIHRoZQotCSAgbmV0d29yay4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBJUDZfTkZfUkFXCiAJdHJpc3RhdGUgICdyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIFRSQUNFKScKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDNmMTdjOTQuLmFhZmJiYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTIwLDEzICsyMCwxMSBAQAogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSCkgKz0gaXA2dF9haC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0VVSTY0KSArPSBpcDZ0X2V1aTY0Lm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRykgKz0gaXA2dF9mcmFnLm8KLW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfSEwpICs9IGlwNnRfaGwubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgKz0gaXA2dF9taC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX09QVFMpICs9IGlwNnRfaGJoLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfUlQpICs9IGlwNnRfcnQubwogCiAjIHRhcmdldHMKLW9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX0hMKSArPSBpcDZ0X0hMLm8KIG9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRykgKz0gaXA2dF9MT0cubwogb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUKSArPSBpcDZ0X1JFSkVDVC5vCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKaW5kZXggNTg1OWMwNC4uYjY5M2Y4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwpAQCAtNjQzLDYgKzY0Myw3IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NiBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UTyhQRl9ORVRMSU5LLCBORVRMSU5LX0lQNl9GVyk7CiAKIG1vZHVsZV9pbml0KGlwNl9xdWV1ZV9pbml0KTsKIG1vZHVsZV9leGl0KGlwNl9xdWV1ZV9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IGEzMzQ4NWQuLmU4OWNmYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtOTksNyArOTksNiBAQAogCQkgdW5zaWduZWQgaW50ICpwcm90b2ZmLAogCQkgaW50ICpmcmFnb2ZmLCBib29sICpob3Rkcm9wKQogewotCXNpemVfdCBpOwogCXVuc2lnbmVkIGxvbmcgcmV0OwogCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2ID0gaXB2Nl9oZHIoc2tiKTsKIApAQCAtMTIwLDEyICsxMTksNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogTG9vayBmb3IgaWZuYW1lIG1hdGNoZXM7IHRoaXMgc2hvdWxkIHVucm9sbCBuaWNlbHkuICovCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopaW5kZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPmluaWZhY2UpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcDZpbmZvLT5pbmlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKGluZGV2LCBpcDZpbmZvLT5pbmlmYWNlLCBpcDZpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUDZUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTM0LDExICsxMjgsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopb3V0ZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcDZpbmZvLT5vdXRpZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPm91dGlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKG91dGRldiwgaXA2aW5mby0+b3V0aWZhY2UsIGlwNmluZm8tPm91dGlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUDZUX0lOVl9WSUFfT1VUKSkgewogCQlkcHJpbnRmKCJWSUEgb3V0IG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0zNzMsMTAgKzM2MywxMiBAQAogCW10cGFyLmZhbWlseSAgPSB0Z3Bhci5mYW1pbHkgPSBORlBST1RPX0lQVjY7CiAJdGdwYXIuaG9va251bSA9IGhvb2s7CiAKLQlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKIAlJUF9ORl9BU1NFUlQodGFibGUtPnZhbGlkX2hvb2tzICYgKDEgPDwgaG9vaykpOwotCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKilwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CisJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCiAJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAogCS8qIEZvciByZXR1cm4gZnJvbSBidWlsdGluIGNoYWluICovCkBAIC00NzQsNyArNDY2LDcgQEAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAJKChzdHJ1Y3QgaXA2dF9lbnRyeSAqKXRhYmxlX2Jhc2UpLT5jb21lZnJvbSA9IE5FVEZJTFRFUl9MSU5LX1BPSVNPTjsKICNlbmRpZgotCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKICNpZmRlZiBERUJVR19BTExPV19BTEwKIAlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtNTI1LDcgKzUxNyw5IEBACiAJCQkgICAgJiYgdW5jb25kaXRpb25hbCgmZS0+aXB2NikpIHx8IHZpc2l0ZWQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgb2xkcG9zLCBzaXplOwogCi0JCQkJaWYgKHQtPnZlcmRpY3QgPCAtTkZfTUFYX1ZFUkRJQ1QgLSAxKSB7CisJCQkJaWYgKChzdHJjbXAodC0+dGFyZ2V0LnUudXNlci5uYW1lLAorCQkJCQkgICAgSVA2VF9TVEFOREFSRF9UQVJHRVQpID09IDApICYmCisJCQkJICAgIHQtPnZlcmRpY3QgPCAtTkZfTUFYX1ZFUkRJQ1QgLSAxKSB7CiAJCQkJCWR1cHJpbnRmKCJtYXJrX3NvdXJjZV9jaGFpbnM6IGJhZCAiCiAJCQkJCQkibmVnYXRpdmUgdmVyZGljdCAoJWkpXG4iLAogCQkJCQkJCQl0LT52ZXJkaWN0KTsKQEAgLTk1NSwxMSArOTQ5LDY0IEBACiAJfQogfQogCisvKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKKyAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLworc3RhdGljIGludAorYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCisJCSAgICAgdW5zaWduZWQgaW50ICppKQoreworCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCisvKiBUYWtlIHZhbHVlcyBmcm9tIGNvdW50ZXJzIGFuZCBhZGQgdGhlbSBiYWNrIG9udG8gdGhlIGN1cnJlbnQgY3B1ICovCitzdGF0aWMgdm9pZCBwdXRfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCisJCQkgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCit7CisJdW5zaWduZWQgaW50IGksIGNwdTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaSA9IDA7CisJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKKwkJCSAgIHQtPnNpemUsCisJCQkgICBhZGRfY291bnRlcl90b19lbnRyeSwKKwkJCSAgIGNvdW50ZXJzLAorCQkJICAgJmkpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludAoremVyb19lbnRyeV9jb3VudGVyKHN0cnVjdCBpcDZ0X2VudHJ5ICplLCB2b2lkICphcmcpCit7CisJZS0+Y291bnRlcnMuYmNudCA9IDA7CisJZS0+Y291bnRlcnMucGNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9uZV9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSk7CisJCUlQNlRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPnNpemUsCisJCQkJICAgemVyb19lbnRyeV9jb3VudGVyLCBOVUxMKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0JY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtOTY4LDE0ICsxMDE1LDI4IEBACiAJY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBub21lbTsKIAotCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7Ci0JZ2V0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlpbmZvID0geHRfYWxsb2NfdGFibGVfaW5mbyhwcml2YXRlLT5zaXplKTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZnJlZV9jb3VudGVyczsKIAotCXJldHVybiBjb3VudGVyczsKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzNDIsMjggKzE0MDMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCi1zdGF0aWMgaW5saW5lIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsCi0JCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCi0JCSAgICAgdW5zaWduZWQgaW50ICppKQotewotI2lmIDAKLQlkdXByaW50ZigiYWRkX2NvdW50ZXI6IEVudHJ5ICV1ICVsdS8lbHUgKyAlbHUvJWx1XG4iLAotCQkgKmksCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpZS0+Y291bnRlcnMucGNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5iY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZG1lWyppXS5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZG1lWyppXS5iY250KTsKLSNlbmRpZgotCi0JQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQKIGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLAogCQlpbnQgY29tcGF0KQpAQCAtMTQyNCwxMyArMTQ2MywxNCBAQAogCQlnb3RvIGZyZWU7CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdC0+bG9jayk7CiAJcHJpdmF0ZSA9IHQtPnByaXZhdGU7CiAJaWYgKHByaXZhdGUtPm51bWJlciAhPSBudW1fY291bnRlcnMpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2tfdXBfZnJlZTsKIAl9CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpID0gMDsKIAkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLwogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMTQzOSw4ICsxNDc5LDkgQEAKIAkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCiAJCQkgIHBhZGRjLAogCQkJICAmaSk7CisJcHJlZW1wdF9lbmFibGUoKTsKICB1bmxvY2tfdXBfZnJlZToKLQl3cml0ZV91bmxvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X3VubG9jaygmdC0+bG9jayk7CiAJeHRfdGFibGVfdW5sb2NrKHQpOwogCW1vZHVsZV9wdXQodC0+bWUpOwogIGZyZWU6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfSEwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdiNWFkZi4uMDAwMDAwMAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIEhvcCBMaW1pdCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBpcDZ0YWJsZXMKLSAqIE1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Ci0gKiBCYXNlZCBvbiBIVydzIFRUTCBtb2R1bGUKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHTlUgR1BMCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oPgotCi1NT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY2IEhvcCBMaW1pdCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWhsX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmg7Ci0JY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0JaW50IG5ld19obDsKLQotCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCi0JCXJldHVybiBORl9EUk9QOwotCi0JaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUDZUX0hMX1NFVDoKLQkJCW5ld19obCA9IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfSU5DOgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0ICsgaW5mby0+aG9wX2xpbWl0OwotCQkJaWYgKG5ld19obCA+IDI1NSkKLQkJCQluZXdfaGwgPSAyNTU7Ci0JCQlicmVhazsKLQkJY2FzZSBJUDZUX0hMX0RFQzoKLQkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdCAtIGluZm8tPmhvcF9saW1pdDsKLQkJCWlmIChuZXdfaGwgPCAwKQotCQkJCW5ld19obCA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCX0KLQotCWlwNmgtPmhvcF9saW1pdCA9IG5ld19obDsKLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgaGxfdGc2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X0hMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKGluZm8tPm1vZGUgPiBJUDZUX0hMX01BWE1PREUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9ITDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCi0JCQlpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoaW5mby0+bW9kZSAhPSBJUDZUX0hMX1NFVCAmJiBpbmZvLT5ob3BfbGltaXQgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbmNyZW1lbnQvZGVjcmVtZW50IGRvZXNuJ3QgIgotCQkJIm1ha2Ugc2Vuc2Ugd2l0aCB2YWx1ZSAwXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaGxfdGc2X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSEwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY2LAotCS50YXJnZXQJCT0gaGxfdGc2LAotCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X0hMX2luZm8pLAotCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkuY2hlY2tlbnRyeQk9IGhsX3RnNl9jaGVjaywKLQkubWUJCT0gVEhJU19NT0RVTEUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhsX3RnNl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmaGxfdGc2X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBobF90ZzZfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZobF90ZzZfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQoaGxfdGc2X2luaXQpOwotbW9kdWxlX2V4aXQoaGxfdGc2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwppbmRleCAzN2FkZjVhLi43MDE4Y2FjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJLm1lIAkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyIGlwNnRfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXA2dF9sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXA2dF9MT0ciLAogCS5sb2dmbgkJPSAmaXA2dF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9obC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTY0ZGNhLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKiBIb3AgTGltaXQgbWF0Y2hpbmcgbW9kdWxlICovCi0KLS8qIChDKSAyMDAxLTIwMDIgTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KLSAqIEJhc2VkIG9uIEhXJ3MgdHRsIG1vZHVsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQotTU9EVUxFX0FVVEhPUigiTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSVB2NiBIb3AgTGltaXQgZmllbGQgbWF0Y2giKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGJvb2wgaGxfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X2hsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUDZUX0hMX0VROgotCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA9PSBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJY2FzZSBJUDZUX0hMX05FOgotCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCAhPSBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJY2FzZSBJUDZUX0hMX0xUOgotCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA8IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfR1Q6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID4gaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X2hsOiB1bmtub3duIG1vZGUgJWRcbiIsCi0JCQkJaW5mby0+bW9kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X21hdGNoIGhsX210Nl9yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAiaGwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY2LAotCS5tYXRjaAkJPSBobF9tdDYsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBobF9tdDZfaW5pdCh2b2lkKQotewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmaGxfbXQ2X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBobF9tdDZfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmhsX210Nl9yZWcpOwotfQotCi1tb2R1bGVfaW5pdChobF9tdDZfaW5pdCk7Ci1tb2R1bGVfZXhpdChobF9tdDZfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKaW5kZXggNDBkMmUzNi4uZWY1YTBhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwpAQCAtNTQsNyArNTQsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBkMGIzMWIyLi5hYjBkMzk4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC02MCw3ICs2MCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X21hbmdsZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKaW5kZXggMTA5ZmFiNi4uNGI3OTJiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwpAQCAtMzgsNyArMzgsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfcmF3ID0gewogCS5uYW1lID0gInJhdyIsCiAJLnZhbGlkX2hvb2tzID0gUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9yYXcubG9jayksCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwppbmRleCAyMGJjNTJmLi4wZWEzN2ZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwpAQCAtNTksNyArNTksNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChzZWN1cml0eV90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDcyN2I5NTMuLjJhMTVjMmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiBzdGF0aWMgYm9vbCBpcHY2X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCiAJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKQEAgLTM0MSw2ICszNDIsMTEgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGlwdjZfbmxhdHRyX3R1cGxlX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3BvbGljeV9sZW4oaXB2Nl9ubGFfcG9saWN5LCBDVEFfSVBfTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvIG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYgX19yZWFkX21vc3RseSA9IHsKQEAgLTM1Miw2ICszNTgsNyBAQAogCS5nZXRfbDRwcm90bwkJPSBpcHY2X2dldF9sNHByb3RvLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIJPSBpcHY2X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBpcHY2X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBpcHY2X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBpcHY2X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDcyZGJiNmQuLjk5MDMyMjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMTI2LDYgKzEyNiwxMCBAQAogCQlwcl9kZWJ1ZygiaWNtcHY2OiBjYW4ndCBjcmVhdGUgbmV3IGNvbm4gd2l0aCB0eXBlICV1XG4iLAogCQkJIHR5cGUgKyAxMjgpOwogCQluZl9jdF9kdW1wX3R1cGxlX2lwdjYoJmN0LT50dXBsZWhhc2hbMF0udHVwbGUpOworCQlpZiAoTE9HX0lOVkFMSUQobmZfY3RfbmV0KGN0KSwgSVBQUk9UT19JQ01QVjYpKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVUNiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgICJuZl9jdF9pY21wdjY6IGludmFsaWQgbmV3IHdpdGggdHlwZSAlZCAiLAorCQkJCSAgICAgIHR5cGUgKyAxMjgpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWF0b21pY19zZXQoJmN0LT5wcm90by5pY21wLmNvdW50LCAwKTsKQEAgLTI2NSw2ICsyNjksMTEgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGljbXB2Nl9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihpY21wdjZfbmxhX3BvbGljeSwgQ1RBX1BST1RPX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0yOTYsNiArMzA1LDcgQEAKIAkuZXJyb3IJCQk9IGljbXB2Nl9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyCT0gaWNtcHY2X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBpY21wdjZfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IGljbXB2Nl9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gaWNtcHY2X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCBlZDRkNzlhLi4wNThhNWU0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC01MjgsMTQgKzUyOCwxNCBAQAogCQlpZiAoIWlwdjZfZXh0X2hkcihuZXh0aGRyKSkgewogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmIChsZW4gPCAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkgewotCQkJcHJfZGVidWcoInRvbyBzaG9ydFxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KIAkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9OT05FKSB7CiAJCQlwcl9kZWJ1ZygibmV4dCBoZWFkZXIgaXMgbm9uZVxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KKwkJaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKSB7CisJCQlwcl9kZWJ1ZygidG9vIHNob3J0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIHN0YXJ0LCAmaGRyLCBzaXplb2YoaGRyKSkpCiAJCQlCVUcoKTsKIAkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCmluZGV4IDNjNTc1MTEuLmU5YWM3YTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYworKysgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKQEAgLTQ1Miw2ICs0NTIsNyBAQAogc3RhdGljIGludCBpcDZfZnJhZ19yZWFzbShzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnEsIHN0cnVjdCBza19idWZmICpwcmV2LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZihmcS0+cS5uZXQsIHN0cnVjdCBuZXQsIGlwdjYuZnJhZ3MpOwogCXN0cnVjdCBza19idWZmICpmcCwgKmhlYWQgPSBmcS0+cS5mcmFnbWVudHM7CiAJaW50ICAgIHBheWxvYWRfbGVuOwogCXVuc2lnbmVkIGludCBuaG9mZjsKQEAgLTU1MSw4ICs1NTIsNyBAQAogCQkJCQkgIGhlYWQtPmNzdW0pOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCUlQNl9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLAotCQkJIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01PS1MpOworCUlQNl9JTkNfU1RBVFNfQkgobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlmcS0+cS5mcmFnbWVudHMgPSBOVUxMOwogCXJldHVybiAxOwpAQCAtNTY2LDggKzU2Niw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJpcDZfZnJhZ19yZWFzbTogbm8gbWVtb3J5IGZvciByZWFzc2VtYmx5XG4iKTsKIG91dF9mYWlsOgogCXJjdV9yZWFkX2xvY2soKTsKLQlJUDZfSU5DX1NUQVRTX0JIKGRldl9uZXQoZGV2KSwKLQkJCSBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOworCUlQNl9JTkNfU1RBVFNfQkgobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDljNTc0MjMuLjEzOTRkZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtOTgsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVDYsCi0JLnByb3RvY29sCQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNiksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQVjYpLAogCS5nYwkJCT0JaXA2X2RzdF9nYywKIAkuZ2NfdGhyZXNoCQk9CTEwMjQsCiAJLmNoZWNrCQkJPQlpcDZfZHN0X2NoZWNrLApAQCAtMTE3LDcgKzExNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVDYsCi0JLnByb3RvY29sCQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNiksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQVjYpLAogCS5kZXN0cm95CQk9CWlwNl9kc3RfZGVzdHJveSwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCkBAIC0yNDAwLDggKzI0MDAsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNl9ST1VURSwKLQkJCSAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNl9ST1VURSwKKwkJICAgIGluZm8tPm5saCwgZ2ZwX2FueSgpKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggZDM0NjdlNS4uNjY0YWI4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTE4OCw5ICsxODgsOSBAQAogCX0KIAogCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpcGlwNl90dW5uZWxfaW5pdChkZXYpOwogCiAJbnQtPnBhcm1zID0gKnBhcm1zOworCWlwaXA2X3R1bm5lbF9pbml0KGRldik7CiAKIAlpZiAocGFybXMtPmlfZmxhZ3MgJiBTSVRfSVNBVEFQKQogCQlkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX0lTQVRBUDsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC02NTgsNyArNjU4LDggQEAKIAl9CiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBlNWI4NWQ0Li40YjVhYTE4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTUzMyw4ICs1MzMsNyBAQAogCiBzdGF0aWMgdm9pZCB0Y3BfdjZfcmVxc2tfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7Ci0JaWYgKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKQotCQlrZnJlZV9za2IoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpOworCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpAQCAtOTQ4LDcgKzk0Nyw3IEBACiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLQkJaWYgKCF0Y3BfdjZfY2hlY2soc2tiLT5sZW4sICZpcGgtPnNhZGRyLCAmaXBoLT5kYWRkciwKKwkJaWYgKCF0Y3BfdjZfY2hlY2soc2tiX2dyb19sZW4oc2tiKSwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAogCQkJCSAgc2tiLT5jc3VtKSkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCWJyZWFrOwpAQCAtMTYxMSw4ICsxNjEwLDcgQEAKIAkJfQogCX0KIAotCWlmIChvcHRfc2tiKQotCQlrZnJlZV9za2Iob3B0X3NrYik7CisJa2ZyZWVfc2tiKG9wdF9za2IpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDg0YjFhMjkuLjY4NDJkZDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC00OSw2ICs0OSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAidWRwX2ltcGwuaCIKIAoraW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKK3sKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOworCWludCBza19pcHY2b25seSA9IGlwdjZfb25seV9zb2NrKHNrKTsKKwlpbnQgc2syX2lwdjZvbmx5ID0gaW5ldF92Nl9pcHY2b25seShzazIpOworCWludCBhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZShza19yY3Zfc2FkZHI2KTsKKwlpbnQgYWRkcl90eXBlMiA9IHNrMl9yY3Zfc2FkZHI2ID8gaXB2Nl9hZGRyX3R5cGUoc2syX3Jjdl9zYWRkcjYpIDogSVBWNl9BRERSX01BUFBFRDsKKworCS8qIGlmIGJvdGggYXJlIG1hcHBlZCwgdHJlYXQgYXMgSVB2NCAqLworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCAmJiBhZGRyX3R5cGUyID09IElQVjZfQUREUl9NQVBQRUQpCisJCXJldHVybiBpcHY0X3Jjdl9zYWRkcl9lcXVhbChzaywgc2syKTsKKworCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKKwkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQorCQlyZXR1cm4gMTsKKworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIGludCB1ZHBfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewogCXJldHVybiB1ZHBfbGliX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY2X3Jjdl9zYWRkcl9lcXVhbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDk3YWIwNjguLmI0YjE2YTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIHhmcm02X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVUNiwKLQkucHJvdG9jb2wgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmdjID0JCQl4ZnJtNl9nYXJiYWdlX2NvbGxlY3QsCiAJLnVwZGF0ZV9wbXR1ID0JCXhmcm02X3VwZGF0ZV9wbXR1LAogCS5kZXN0cm95ID0JCXhmcm02X2RzdF9kZXN0cm95LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfc3RhdGUuYyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKaW5kZXggMGU2ODViMC4uZjQxN2I3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfc3RhdGUuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCWRzdFtjb3VudFtjbGFzc1tpXSAtIDFdKytdID0gc3JjW2ldOwotCQlzcmNbaV0gPSAwOworCQlzcmNbaV0gPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lweC9hZl9pcHguYyBiL25ldC9pcHgvYWZfaXB4LmMKaW5kZXggYjZlNzBmOS4uMTYyNzA1MCAxMDA2NDQKLS0tIGEvbmV0L2lweC9hZl9pcHguYworKysgYi9uZXQvaXB4L2FmX2lweC5jCkBAIC0xOTU4LDEzICsxOTU4LDEzIEBACiAKIFNPQ0tPUFNfV1JBUChpcHhfZGdyYW0sIFBGX0lQWCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF84MDIzX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpLAogCS5mdW5jCQk9IGlweF9yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF9kaXhfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFgpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfZGl4X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBYKSwKIAkuZnVuYwkJPSBpcHhfcmN2LAogfTsKIApAQCAtMTk3NSwxNSArMTk3NSwxNSBAQAogZXh0ZXJuIHN0cnVjdCBkYXRhbGlua19wcm90byAqbWFrZV9FSUlfY2xpZW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgZGVzdHJveV9FSUlfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqKTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaXB4XzgwMjJfdHlwZSA9IDB4RTA7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfc25hcF9pZFs1XSA9IHsgMHgwLCAweDAsIDB4MCwgMHg4MSwgMHgzNyB9Owotc3RhdGljIGNoYXIgaXB4X0VJSV9lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07CitzdGF0aWMgY29uc3QgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIEV0aGVybmV0IElJXG4iOwotc3RhdGljIGNoYXIgaXB4XzgwMjNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4XzgwMjNfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggODAyLjNcbiI7Ci1zdGF0aWMgY2hhciBpcHhfbGxjX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggODAyLjJcbiI7Ci1zdGF0aWMgY2hhciBpcHhfc25hcF9lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfc25hcF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBTTkFQXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBpcHhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKaW5kZXggZWEzMTllMy4uYmY5MmUxNCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYworKysgYi9uZXQvaXJkYS9pcmRhX2RldmljZS5jCkBAIC0xNDksMTMgKzE0OSwxNCBAQAogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaWYgKCFkZXYtPmRvX2lvY3RsKSB7CisJaWYgKCFkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bCkgewogCQlJUkRBX0VSUk9SKCIlczogZG9faW9jdGwgbm90IGltcGwuIGJ5IGRldmljZSBkcml2ZXJcbiIsCiAJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlyZXQgPSBkZXYtPmRvX2lvY3RsKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLCBTSU9DR1JFQ0VJVklORyk7CisJcmV0ID0gKGRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKShkZXYsIChzdHJ1Y3QgaWZyZXEgKikgJnJlcSwKKwkJCQkJICAgICAgU0lPQ0dSRUNFSVZJTkcpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IDA1MTEyYmUuLjcyNGJjZjkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC00NSw2ICs0NSwxNiBAQAogc3RhdGljIHZvaWQgaXJsYW5fZXRoX3NldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlybGFuX2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXJsYW5fZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBpcmxhbl9ldGhfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICAgICA9IGlybGFuX2V0aF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgCT0gaXJsYW5fZXRoX3htaXQsCisJLm5kb19nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBpcmxhbl9ldGhfc2V0dXAgKGRldikKICAqCkBAIC01MywxNCArNjMsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgaXJsYW5fZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBpcmxhbl9ldGhfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICAgICA9IGlybGFuX2V0aF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IGlybGFuX2V0aF94bWl0OwotCWRldi0+Z2V0X3N0YXRzCSAgICAgICAgPSBpcmxhbl9ldGhfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaXJsYW5fZXRoX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlldGhlcl9zZXR1cChkZXYpOworCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZpcmxhbl9ldGhfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKLQlldGhlcl9zZXR1cChkZXYpOwogCiAJLyoKIAkgKiBMZXRzIGRvIGFsbCBxdWV1ZWluZyBpbiBJclRUUCBpbnN0ZWFkIG9mIHRoaXMgZGV2aWNlIGRyaXZlci4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybW9kLmMgYi9uZXQvaXJkYS9pcm1vZC5jCmluZGV4IDRjNDg3YTguLjMwM2E2OGQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybW9kLmMKKysrIGIvbmV0L2lyZGEvaXJtb2QuYwpAQCAtNTUsOCArNTUsOCBAQAogLyogUGFja2V0IHR5cGUgaGFuZGxlci4KICAqIFRlbGwgdGhlIGtlcm5lbCBob3cgSXJEQSBwYWNrZXRzIHNob3VsZCBiZSBoYW5kbGVkLgogICovCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lSREEpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcmRhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9JUkRBKSwKIAkuZnVuYwk9IGlybGFwX2RyaXZlcl9yY3YsCS8qIFBhY2tldCB0eXBlIGhhbmRsZXIgaXJsYXBfZnJhbWUuYyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGViOGEyYTAuLjQ5ZTc4NjUgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYworKysgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTExNzEsOCArMTE3MSw3IEBACiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogCi0JCWlmICh0aGlzKQotCQkJa2ZyZWVfc2tiKHRoaXMpOworCQlrZnJlZV9za2IodGhpcyk7CiAJfQogCUJVR19PTighdGhpcyk7CiAKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDdkY2JkZTMuLjY0M2MxYmUgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMzEzLDggKzMxMyw3IEBACiAJaWYgKG9uZV9zayAhPSBOVUxMKQogCQllcnIgPSBwZmtleV9icm9hZGNhc3Rfb25lKHNrYiwgJnNrYjIsIGFsbG9jYXRpb24sIG9uZV9zayk7CiAKLQlpZiAoc2tiMikKLQkJa2ZyZWVfc2tiKHNrYjIpOworCWtmcmVlX3NrYihza2IyKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzU3Myw4ICszNTcyLDcgQEAKIG91dDoKIAlpZiAoZXJyICYmIGhkciAmJiBwZmtleV9lcnJvcihoZHIsIGVyciwgc2spID09IDApCiAJCWVyciA9IDA7Ci0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAKIAlyZXR1cm4gZXJyID8gOiBsZW47CiB9CmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCA1NmZkODVhLi5mZWJhZTcwIDEwMDY0NAotLS0gYS9uZXQvbGxjL2FmX2xsYy5jCisrKyBiL25ldC9sbGMvYWZfbGxjLmMKQEAgLTExMTgsMTEgKzExMTgsMTEgQEAKIAkuc2VuZHBhZ2UgICAgPSBzb2NrX25vX3NlbmRwYWdlLAogfTsKIAotc3RhdGljIGNoYXIgbGxjX3Byb2NfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3Byb2NfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBwcm9jX2ZzIGVudHJpZXNcbiI7Ci1zdGF0aWMgY2hhciBsbGNfc3lzY3RsX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBzeXNjdGwgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zb2NrX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGxsY19zb2NrX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJMTEM6IFVuYWJsZSB0byByZWdpc3RlciB0aGUgbmV0d29yayBmYW1pbHlcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDVjNmQ4OWMuLjM0Nzc2MjQgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYworKysgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMzMiw4ICszMzIsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBkdV9wb3MgJiYgaSA8IHFfbGVuOyBpKyspIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmxsYy0+cGR1X3VuYWNrX3EpOwotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCQluYnJfYWNrZWQrKzsKIAl9CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggNTBkNWIxMC4uZmY0YzBhYiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtMTQ3LDEzICsxNDcsMTMgQEAKIAlrZnJlZShzYXApOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzIpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsbGNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKSwKIAkuZnVuYyA9IGxsY19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfVFJfODAyXzIpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsbGNfdHJfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1RSXzgwMl8yKSwKIAkuZnVuYyA9IGxsY19yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUgYi9uZXQvbWFjODAyMTEvTWFrZWZpbGUKaW5kZXggN2Q0OTcxYS4uMGUzYWI4OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL01ha2VmaWxlCisrKyBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQpAQCAtOCwxMyArOCwxNSBAQAogCXdlcC5vIFwKIAl3cGEubyBcCiAJc2Nhbi5vIFwKLQlodC5vIFwKKwlodC5vIGFnZy10eC5vIGFnZy1yeC5vIFwKKwlpYnNzLm8gXAogCW1sbWUubyBcCiAJaWZhY2UubyBcCiAJcmF0ZS5vIFwKIAltaWNoYWVsLm8gXAogCXRraXAubyBcCiAJYWVzX2NjbS5vIFwKKwlhZXNfY21hYy5vIFwKIAljZmcubyBcCiAJcngubyBcCiAJc3BlY3RtZ210Lm8gXApAQCAtMzcsNiArMzksOCBAQAogCW1lc2hfcGxpbmsubyBcCiAJbWVzaF9od21wLm8KIAorbWFjODAyMTEtJChDT05GSUdfUE0pICs9IHBtLm8KKwogIyBvYmplY3RzIGZvciBQSUQgYWxnb3JpdGhtCiByYzgwMjExX3BpZC15IDo9IHJjODAyMTFfcGlkX2FsZ28ubwogcmM4MDIxMV9waWQtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgKz0gcmM4MDIxMV9waWRfZGVidWdmcy5vCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDk3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIEFFUy0xMjgtQ01BQyB3aXRoIFRMZW4gMTYgZm9yIElFRUUgODAyLjExdyBCSVAKKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJrZXkuaCIKKyNpbmNsdWRlICJhZXNfY21hYy5oIgorCisjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisjZGVmaW5lIEFFU19DTUFDX0tFWV9MRU4gMTYKKyNkZWZpbmUgQ01BQ19UTEVOIDggLyogQ01BQyBUTGVuID0gNjQgYml0cyAoOCBvY3RldHMpICovCisjZGVmaW5lIEFBRF9MRU4gMjAKKworCitzdGF0aWMgdm9pZCBnZl9tdWx4KHU4ICpwYWQpCit7CisJaW50IGksIGNhcnJ5OworCisJY2FycnkgPSBwYWRbMF0gJiAweDgwOworCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRSAtIDE7IGkrKykKKwkJcGFkW2ldID0gKHBhZFtpXSA8PCAxKSB8IChwYWRbaSArIDFdID4+IDcpOworCXBhZFtBRVNfQkxPQ0tfU0laRSAtIDFdIDw8PSAxOworCWlmIChjYXJyeSkKKwkJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gXj0gMHg4NzsKK30KKworCitzdGF0aWMgdm9pZCBhZXNfMTI4X2NtYWNfdmVjdG9yKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLAorCQkJCXNpemVfdCBudW1fZWxlbSwKKwkJCQljb25zdCB1OCAqYWRkcltdLCBjb25zdCBzaXplX3QgKmxlbiwgdTggKm1hYykKK3sKKwl1OCAqY2JjLCAqcGFkOworCWNvbnN0IHU4ICpwb3MsICplbmQ7CisJc2l6ZV90IGksIGUsIGxlZnQsIHRvdGFsX2xlbjsKKworCWNiYyA9IHNjcmF0Y2g7CisJcGFkID0gc2NyYXRjaCArIEFFU19CTE9DS19TSVpFOworCisJbWVtc2V0KGNiYywgMCwgQUVTX0JMT0NLX1NJWkUpOworCisJdG90YWxfbGVuID0gMDsKKwlmb3IgKGUgPSAwOyBlIDwgbnVtX2VsZW07IGUrKykKKwkJdG90YWxfbGVuICs9IGxlbltlXTsKKwlsZWZ0ID0gdG90YWxfbGVuOworCisJZSA9IDA7CisJcG9zID0gYWRkclswXTsKKwllbmQgPSBwb3MgKyBsZW5bMF07CisKKwl3aGlsZSAobGVmdCA+PSBBRVNfQkxPQ0tfU0laRSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7IGkrKykgeworCQkJY2JjW2ldIF49ICpwb3MrKzsKKwkJCWlmIChwb3MgPj0gZW5kKSB7CisJCQkJZSsrOworCQkJCXBvcyA9IGFkZHJbZV07CisJCQkJZW5kID0gcG9zICsgbGVuW2VdOworCQkJfQorCQl9CisJCWlmIChsZWZ0ID4gQUVTX0JMT0NLX1NJWkUpCisJCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgY2JjLCBjYmMpOworCQlsZWZ0IC09IEFFU19CTE9DS19TSVpFOworCX0KKworCW1lbXNldChwYWQsIDAsIEFFU19CTE9DS19TSVpFKTsKKwljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgcGFkLCBwYWQpOworCWdmX211bHgocGFkKTsKKworCWlmIChsZWZ0IHx8IHRvdGFsX2xlbiA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZWZ0OyBpKyspIHsKKwkJCWNiY1tpXSBePSAqcG9zKys7CisJCQlpZiAocG9zID49IGVuZCkgeworCQkJCWUrKzsKKwkJCQlwb3MgPSBhZGRyW2VdOworCQkJCWVuZCA9IHBvcyArIGxlbltlXTsKKwkJCX0KKwkJfQorCQljYmNbbGVmdF0gXj0gMHg4MDsKKwkJZ2ZfbXVseChwYWQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKQorCQlwYWRbaV0gXj0gY2JjW2ldOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7CisJbWVtY3B5KG1hYywgcGFkLCBDTUFDX1RMRU4pOworfQorCisKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLCBjb25zdCB1OCAqYWFkLAorCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYykKK3sKKwljb25zdCB1OCAqYWRkclszXTsKKwlzaXplX3QgbGVuWzNdOworCXU4IHplcm9bQ01BQ19UTEVOXTsKKworCW1lbXNldCh6ZXJvLCAwLCBDTUFDX1RMRU4pOworCWFkZHJbMF0gPSBhYWQ7CisJbGVuWzBdID0gQUFEX0xFTjsKKwlhZGRyWzFdID0gZGF0YTsKKwlsZW5bMV0gPSBkYXRhX2xlbiAtIENNQUNfVExFTjsKKwlhZGRyWzJdID0gemVybzsKKwlsZW5bMl0gPSBDTUFDX1RMRU47CisKKwlhZXNfMTI4X2NtYWNfdmVjdG9yKHRmbSwgc2NyYXRjaCwgMywgYWRkciwgbGVuLCBtaWMpOworfQorCisKK3N0cnVjdCBjcnlwdG9fY2lwaGVyICogaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChjb25zdCB1OCBrZXlbXSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCisJdGZtID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gTlVMTDsKKworCWNyeXB0b19jaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBBRVNfQ01BQ19LRVlfTEVOKTsKKworCXJldHVybiB0Zm07Cit9CisKKwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X2ZyZWUoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSkKK3sKKwlpZiAodGZtKQorCQljcnlwdG9fZnJlZV9jaXBoZXIodGZtKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5oIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViOWE0OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQUVTX0NNQUNfSAorI2RlZmluZSBBRVNfQ01BQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworc3RydWN0IGNyeXB0b19jaXBoZXIgKiBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpzY3JhdGNoLCBjb25zdCB1OCAqYWFkLAorCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYyk7Cit2b2lkIGllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKTsKKworI2VuZGlmIC8qIEFFU19DTUFDX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzY1NmQ4MzBiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogSFQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorCit2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OworCWludCBpOworCisJLyogY2hlY2sgaWYgVElEIGlzIGluIG9wZXJhdGlvbmFsIHN0YXRlICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0KKwkJSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUnggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKKwkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAorCQkJCSAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiSFcgcHJvYmxlbSAtIGNhbiBub3Qgc3RvcCByeCAiCisJCQkJImFnZ3JlZ2F0aW9uIGZvciB0aWQgJWRcbiIsIHRpZCk7CisKKwkvKiBzaHV0ZG93biB0aW1lciBoYXMgbm90IGV4cGlyZWQgKi8KKwlpZiAoaW5pdGlhdG9yICE9IFdMQU5fQkFDS19USU1FUikKKwkJZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7CisKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEgc2VsZiBnZW5lcmF0ZWQgYWdncmVnYXRpb24gaGFsdCAqLworCWlmIChpbml0aWF0b3IgPT0gV0xBTl9CQUNLX1JFQ0lQSUVOVCB8fCBpbml0aWF0b3IgPT0gV0xBTl9CQUNLX1RJTUVSKQorCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLAorCQkJCSAgICAgdGlkLCAwLCByZWFzb24pOworCisJLyogZnJlZSB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5idWZfc2l6ZTsgaSsrKSB7CisJCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKSB7CisJCQkvKiByZWxlYXNlIHRoZSByZW9yZGVyZWQgZnJhbWVzICovCisJCQlkZXZfa2ZyZWVfc2tiKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pOworCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zdG9yZWRfbXBkdV9udW0tLTsKKwkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0gPSBOVUxMOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCS8qIGZyZWUgcmVzb3VyY2VzICovCisJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1Zik7CisKKwlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2h1dGRvd24pIHsKKwkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwl9CisKKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfSURMRTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KKwordm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLAorCQkJCQl1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJLyogc3RvcCBIVyBSeCBhZ2dyZWdhdGlvbi4gYW1wZHVfYWN0aW9uIGV4aXN0ZW5jZQorCSAqIGFscmVhZHkgdmVyaWZpZWQgaW4gc2Vzc2lvbiBpbml0IHNvIHdlIGFkZCB0aGUgQlVHX09OICovCisJQlVHX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvciwgcmVhc29uKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCisvKgorICogQWZ0ZXIgYWNjZXB0aW5nIHRoZSBBZGRCQSBSZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyLAorICogcmVzZXR0aW5nIGl0IGFmdGVyIGVhY2ggZnJhbWUgdGhhdCBhcnJpdmVzIGZyb20gdGhlIG9yaWdpbmF0b3IuCisgKiBpZiB0aGlzIHRpbWVyIGV4cGlyZXMgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24gd2lsbCBiZSBleGVjdXRlZC4KKyAqLworc3RhdGljIHZvaWQgc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCB2YXJpb3VzIHN0YV9pbmZvIGFyZSBuZWVkZWQgaGVyZSwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXU4ICpwdGlkID0gKHU4ICopZGF0YTsKKwl1OCAqdGltZXJfdG9faWQgPSBwdGlkIC0gKnB0aWQ7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodGltZXJfdG9faWQsIHN0cnVjdCBzdGFfaW5mbywKKwkJCQkJIHRpbWVyX3RvX3RpZFswXSk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAicnggc2Vzc2lvbiB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgKHUxNikqcHRpZCk7CisjZW5kaWYKKwlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLAorCQkJCQkgKHUxNikqcHRpZCwgV0xBTl9CQUNLX1RJTUVSLAorCQkJCQkgV0xBTl9SRUFTT05fUVNUQV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRhLCB1MTYgdGlkLAorCQkJCSAgICAgIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXR1cywgdTE2IHBvbGljeSwKKwkJCQkgICAgICB1MTYgYnVmX3NpemUsIHUxNiB0aW1lb3V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBjYXBhYjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSk7CisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVTUDsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCisJY2FwYWIgPSAodTE2KShwb2xpY3kgPDwgMSk7CS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLworCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLworCWNhcGFiIHw9ICh1MTYpKGJ1Zl9zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dyZWdhdGlvbiAqLworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOworfQorCit2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3Qoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OworCXUxNiBjYXBhYiwgdGlkLCB0aW1lb3V0LCBiYV9wb2xpY3ksIGJ1Zl9zaXplLCBzdGFydF9zZXFfbnVtLCBzdGF0dXM7CisJdTggZGlhbG9nX3Rva2VuOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCS8qIGV4dHJhY3Qgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gYWRkYmEgcmVxdWVzdCBmcmFtZSAqLworCWRpYWxvZ190b2tlbiA9IG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmRpYWxvZ190b2tlbjsKKwl0aW1lb3V0ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEudGltZW91dCk7CisJc3RhcnRfc2VxX251bSA9CisJCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnN0YXJ0X3NlcV9udW0pID4+IDQ7CisKKwljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKKwliYV9wb2xpY3kgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0spID4+IDE7CisJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCWJ1Zl9zaXplID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spID4+IDY7CisKKwlzdGF0dXMgPSBXTEFOX1NUQVRVU19SRVFVRVNUX0RFQ0xJTkVEOworCisJaWYgKHRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfU1VTUEVORCkpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN1c3BlbmQgaW4gcHJvZ3Jlc3MuICIKKwkJICAgICAgICJEZW55aW5nIEFEREJBIHJlcXVlc3RcbiIpOworI2VuZGlmCisJCWdvdG8gZW5kX25vX2xvY2s7CisJfQorCisJLyogc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYXJhbWV0ZXJzOgorCSAqIGNoZWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FuIHN1cHBvcnQgdGhlIEJBIHBvbGljeQorCSAqIGFuZCBpZiBidWZmZXIgc2l6ZSBkb2VzIG5vdCBleGNlZWRzIG1heCB2YWx1ZSAqLworCS8qIFhYWDogY2hlY2sgb3duIGh0IGRlbGF5ZWQgQkEgY2FwYWJpbGl0eT8/ICovCisJaWYgKCgoYmFfcG9saWN5ICE9IDEpCisJCSYmICghKHN0YS0+c3RhLmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBKSkpCisJCXx8IChidWZfc2l6ZSA+IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGKSkgeworCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1FPU19QQVJBTTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJBZGRCQSBSZXEgd2l0aCBiYWQgcGFyYW1zIGZyb20gIgorCQkJCSIlcE0gb24gdGlkICV1LiBwb2xpY3kgJWQsIGJ1ZmZlciBzaXplICVkXG4iLAorCQkJCW1nbXQtPnNhLCB0aWQsIGJhX3BvbGljeSwKKwkJCQlidWZfc2l6ZSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kX25vX2xvY2s7CisJfQorCS8qIGRldGVybWluZSBkZWZhdWx0IGJ1ZmZlciBzaXplICovCisJaWYgKGJ1Zl9zaXplID09IDApIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOworCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOworCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCX0KKworCisJLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgQWRkQkEgUmVxIGZyb20gIgorCQkJCSIlcE0gb24gdGlkICV1XG4iLAorCQkJCW1nbXQtPnNhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBSeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3J4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgcnggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworI2VuZGlmCisJCWdvdG8gZW5kOworCX0KKwkvKiByeCB0aW1lciAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9CisJCQkJc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQ7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmRhdGEgPQorCQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOworCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7CisKKwl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOworCisJLyogcHJlcGFyZSByZW9yZGVyaW5nIGJ1ZmZlciAqLworCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmID0KKwkJa2NhbGxvYyhidWZfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBza19idWZmICopLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2NhdGUgcmVvcmRlcmluZyBidWZmZXIgIgorCQkJICAgICAgICJ0byB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKKwkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKKwkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCisJCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSeCBBLU1QRFUgcmVxdWVzdCBvbiB0aWQgJWQgcmVzdWx0ICVkXG4iLCB0aWQsIHJldCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisKKwlpZiAocmV0KSB7CisJCWtmcmVlKHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKTsKKwkJa2ZyZWUodGlkX2FnZ19yeCk7CisJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9IE5VTEw7CisJCWdvdG8gZW5kOworCX0KKworCS8qIGNoYW5nZSBzdGF0ZSBhbmQgc2VuZCBhZGRiYSByZXNwICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOworCXRpZF9hZ2dfcngtPmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKKwl0aWRfYWdnX3J4LT5zc24gPSBzdGFydF9zZXFfbnVtOworCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+YnVmX3NpemUgPSBidWZfc2l6ZTsKKwl0aWRfYWdnX3J4LT50aW1lb3V0ID0gdGltZW91dDsKKwl0aWRfYWdnX3J4LT5zdG9yZWRfbXBkdV9udW0gPSAwOworCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7CitlbmQ6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKK2VuZF9ub19sb2NrOgorCWllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RhLT5zZGF0YSwgc3RhLT5zdGEuYWRkciwgdGlkLAorCQkJCSAgZGlhbG9nX3Rva2VuLCBzdGF0dXMsIDEsIGJ1Zl9zaXplLCB0aW1lb3V0KTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDdhYWFhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC0wLDAgKzEsNjk1IEBACisvKgorICogSFQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgIndtZS5oIgorCisvKioKKyAqIERPQzogVFggYWdncmVnYXRpb24KKyAqCisgKiBBZ2dyZWdhdGlvbiBvbiB0aGUgVFggc2lkZSByZXF1aXJlcyBzZXR0aW5nIHRoZSBoYXJkd2FyZSBmbGFnCisgKiAlSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIGFzIHdlbGwgYXMsIGlmIHByZXNlbnQsIHRoZSBAYW1wZHVfcXVldWVzCisgKiBoYXJkd2FyZSBwYXJhbWV0ZXIgdG8gdGhlIG51bWJlciBvZiBoYXJkd2FyZSBBTVBEVSBxdWV1ZXMuIElmIHRoZXJlIGFyZSBubworICogaGFyZHdhcmUgcXVldWVzIHRoZW4gdGhlIGRyaXZlciB3aWxsIChjdXJyZW50bHkpIGhhdmUgdG8gZG8gYWxsIGZyYW1lCisgKiBidWZmZXJpbmcuCisgKgorICogV2hlbiBUWCBhZ2dyZWdhdGlvbiBpcyBzdGFydGVkIGJ5IHNvbWUgc3Vic3lzdGVtICh1c3VhbGx5IHRoZSByYXRlIGNvbnRyb2wKKyAqIGFsZ29yaXRobSB3b3VsZCBiZSBhcHByb3ByaWF0ZSkgYnkgY2FsbGluZyB0aGUKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKCkgZnVuY3Rpb24sIHRoZSBkcml2ZXIgd2lsbCBiZSBub3RpZmllZCB2aWEKKyAqIGl0cyBAYW1wZHVfYWN0aW9uIGZ1bmN0aW9uLCB3aXRoIHRoZSAlSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUIGFjdGlvbi4KKyAqCisgKiBJbiByZXNwb25zZSB0byB0aGF0LCB0aGUgZHJpdmVyIGlzIGxhdGVyIHJlcXVpcmVkIHRvIGNhbGwgdGhlCisgKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IoKSAob3IgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoKSkKKyAqIGZ1bmN0aW9uLCB3aGljaCB3aWxsIHN0YXJ0IHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uLgorICoKKyAqIFNpbWlsYXJseSwgd2hlbiB0aGUgYWdncmVnYXRpb24gc2Vzc2lvbiBpcyBzdG9wcGVkIGJ5CisgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCksIHRoZSBkcml2ZXIncyBAYW1wZHVfYWN0aW9uIGZ1bmN0aW9uIHdpbGwKKyAqIGJlIGNhbGxlZCB3aXRoIHRoZSBhY3Rpb24gJUlFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLiBJbiB0aGlzIGNhc2UsIHRoZQorICogY2FsbCBtdXN0IG5vdCBmYWlsLCBhbmQgdGhlIGRyaXZlciBtdXN0IGxhdGVyIGNhbGwgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IoKQorICogKG9yIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoKSkuCisgKi8KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKKwkJCQkJIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXJ0X3NlcV9udW0sCisJCQkJCSB1MTYgYWdnX3NpemUsIHUxNiB0aW1lb3V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBjYXBhYjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKKwkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKKworCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVROworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCWNhcGFiID0gKHUxNikoMSA8PCAxKTsJCS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLworCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLworCWNhcGFiIHw9ICh1MTYpKGFnZ19zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dlcmdhdGlvbiAqLworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSA9CisJCQkJCWNwdV90b19sZTE2KHN0YXJ0X3NlcV9udW0gPDwgNCk7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9iYXIgKmJhcjsKKwl1MTYgYmFyX2NvbnRyb2wgPSAwOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKmJhcikgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKKwkJCSJiYXIgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwliYXIgPSAoc3RydWN0IGllZWU4MDIxMV9iYXIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpiYXIpKTsKKwltZW1zZXQoYmFyLCAwLCBzaXplb2YoKmJhcikpOworCWJhci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfAorCQkJCQkgSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKTsKKwltZW1jcHkoYmFyLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwltZW1jcHkoYmFyLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9BQ0tfUE9MSUNZX05PUk1BTDsKKwliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9DQk1USURfQ09NUFJFU1NFRF9CQTsKKwliYXJfY29udHJvbCB8PSAodTE2KSh0aWQgPDwgMTIpOworCWJhci0+Y29udHJvbCA9IGNwdV90b19sZTE2KGJhcl9jb250cm9sKTsKKwliYXItPnN0YXJ0X3NlcV9udW0gPSBjcHVfdG9fbGUxNihzc24pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKworc3RhdGljIGludCBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlpbnQgcmV0OworCXU4ICpzdGF0ZTsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAorCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOworCisJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKCZsb2NhbC0+aHcsIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLAorCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7CisKKwkvKiBIVyBzaGFsbCBub3QgZGVueSBnb2luZyBiYWNrIHRvIGxlZ2FjeSAqLworCWlmIChXQVJOX09OKHJldCkpIHsKKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOworCQkvKgorCQkgKiBXZSBtYXkgaGF2ZSBwZW5kaW5nIHBhY2tldHMgZ2V0IHN0dWNrIGluIHRoaXMgY2FzZS4uLgorCQkgKiBOb3QgYm90aGVyaW5nIHdpdGggYSB3b3JrYXJvdW5kIGZvciBub3cuCisJCSAqLworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBZnRlciBzZW5kaW5nIGFkZCBCbG9jayBBY2sgcmVxdWVzdCB3ZSBhY3RpdmF0ZWQgYSB0aW1lciB1bnRpbAorICogYWRkIEJsb2NrIEFjayByZXNwb25zZSB3aWxsIGFycml2ZSBmcm9tIHRoZSByZWNpcGllbnQuCisgKiBJZiB0aGlzIHRpbWVyIGV4cGlyZXMgc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZCB3aWxsIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgdm9pZCBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcworCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgYm90aCBzdGFfaW5mbyBhbmQgVElEIGFyZSBuZWVkZWQsIHNvIGluaXQKKwkgKiBmbG93IGluIHN0YV9pbmZvX2NyZWF0ZSBnaXZlcyB0aGUgVElEIGFzIGRhdGEsIHdoaWxlIHRoZSB0aW1lcl90b19pZAorCSAqIGFycmF5IGdpdmVzIHRoZSBzdGEgdGhyb3VnaCBjb250YWluZXJfb2YgKi8KKwl1MTYgdGlkID0gKih1OCAqKWRhdGE7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YoKHZvaWQgKilkYXRhLAorCQlzdHJ1Y3Qgc3RhX2luZm8sIHRpbWVyX3RvX3RpZFt0aWRdKTsKKwl1OCAqc3RhdGU7CisKKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisKKwkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lciBleHBpcmVkIG9uIHRpZCAlZCBidXQgd2UgYXJlIG5vdCAiCisJCQkJImV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZSIsIHRpZCk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSByZXNwb25zZSB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCisJX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9hY19mcm9tX3RpZChpbnQgdGlkKQoreworCXJldHVybiBpZWVlODAyXzFkX3RvX2FjW3RpZCAmIDddOworfQorCitpbnQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwl1OCAqc3RhdGU7CisJaW50IHJldCA9IDA7CisJdTE2IHN0YXJ0X3NlcV9udW07CisKKwlpZiAoV0FSTl9PTighbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHRpZCA+PSBTVEFfVElEX05VTSkgfHwgIShody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJPcGVuIEJBIHNlc3Npb24gcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICByYSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJjdV9yZWFkX2xvY2soKTsKKworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCB0aGUgc3RhdGlvblxuIik7CisjZW5kaWYKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJLyoKKwkgKiBUaGUgYWdncmVnYXRpb24gY29kZSBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlCisJICogYW55dGhpbmcgYnV0IFNUQS9BUCBkdWUgdG8gdGhlIEJTU0lEIGhhbmRsaW5nLgorCSAqIElCU1MgY291bGQgd29yayBpbiB0aGUgY29kZSBidXQgaXNuJ3Qgc3VwcG9ydGVkCisJICogYnkgZHJpdmVycyBvciB0aGUgc3RhbmRhcmQuCisJICovCisJaWYgKHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgc3RhLT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCSAgICBzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9TVVNQRU5EKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiU3VzcGVuZCBpbiBwcm9ncmVzcy4gIgorCQkgICAgICAgIkRlbnlpbmcgQkEgc2Vzc2lvbiByZXF1ZXN0XG4iKTsKKyNlbmRpZgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJc3Bpbl9sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisKKwlzZGF0YSA9IHN0YS0+c2RhdGE7CisKKwkvKiB3ZSBoYXZlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCByZWNlaXZlciBkb2VzIG5vdCB3YW50IEEtTVBEVSAqLworCWlmIChzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID4gSFRfQUdHX01BWF9SRVRSSUVTKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfdW5sb2NrX3N0YTsKKwl9CisKKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisJLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBub3QgaW4gYWdncmVnYXRpb24gZmxvdyBhbHJlYWR5ICovCisJaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBzZXNzaW9uIGlzIG5vdCAiCisJCQkJICJpZGxlIG9uIHRpZCAldVxuIiwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBlcnJfdW5sb2NrX3N0YTsKKwl9CisKKwkvKgorCSAqIFdoaWxlIHdlJ3JlIGFza2luZyB0aGUgZHJpdmVyIGFib3V0IHRoZSBhZ2dyZWdhdGlvbiwKKwkgKiBzdG9wIHRoZSBBQyBxdWV1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkKKwkgKiBhYm91dCBmcmFtZXMgdGhhdCBjYW1lIGluIHdoaWxlIHdlIHdlcmUgZG9pbmcgdGhhdCwKKwkgKiB3aGljaCB3b3VsZCByZXF1aXJlIHVzIHRvIHB1dCB0aGVtIHRvIHRoZSBBQyBwZW5kaW5nCisJICogYWZ0ZXJ3YXJkcyB3aGljaCBqdXN0IG1ha2VzIHRoZSBjb2RlIG1vcmUgY29tcGxleC4KKwkgKi8KKwlpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oCisJCSZsb2NhbC0+aHcsIGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpLAorCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCisJLyogcHJlcGFyZSBBLU1QRFUgTUxNRSBmb3IgVHggYWdncmVnYXRpb24gKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV90eCksIEdGUF9BVE9NSUMpOworCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlIHR4IG1sbWUgdG8gdGlkICVkIGZhaWxlZFxuIiwKKwkJCQkJdGlkKTsKKyNlbmRpZgorCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl93YWtlX3F1ZXVlOworCX0KKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+cGVuZGluZyk7CisKKwkvKiBUeCB0aW1lciAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5mdW5jdGlvbiA9CisJCQlzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5kYXRhID0KKwkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOworCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisKKwkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKKwkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KKwkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKKworCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworCisJaWYgKHJldCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBIVyB1bmF2YWlsYWJsZSBmb3IiCisJCQkJCSIgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwkvKiBEcml2ZXIgdmV0b2VkIG9yIE9LZWQsIGJ1dCB3ZSBjYW4gdGFrZSBwYWNrZXRzIGFnYWluIG5vdyAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbigKKwkJJmxvY2FsLT5odywgaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCksCisJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisKKwlzcGluX3VubG9jaygmbG9jYWwtPmFtcGR1X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCisJLyogc2VuZCBhbiBhZGRCQSByZXF1ZXN0ICovCisJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IrKzsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiA9CisJCQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiA9IHN0YXJ0X3NlcV9udW07CisKKwlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0YS0+c2RhdGEsIHJhLCB0aWQsCisJCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4sCisJCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24sCisJCQkgMHg0MCwgNTAwMCk7CisJLyogYWN0aXZhdGUgdGhlIHRpbWVyIGZvciB0aGUgcmVjaXBpZW50J3MgYWRkQkEgcmVzcG9uc2UgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZXhwaXJlcyA9CisJCQkJamlmZmllcyArIEFEREJBX1JFU1BfSU5URVJWQUw7CisJYWRkX3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOworI2VuZGlmCisJZ290byB1bmxvY2s7CisKKyBlcnJfZnJlZToKKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7CisgZXJyX3dha2VfcXVldWU6CisJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKAorCQkmbG9jYWwtPmh3LCBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKSwKKwkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKyBlcnJfdW5sb2NrX3N0YToKKwlzcGluX3VubG9jaygmbG9jYWwtPmFtcGR1X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworIHVubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbik7CisKKy8qCisgKiBzcGxpY2UgcGFja2V0cyBmcm9tIHRoZSBTVEEncyBwZW5kaW5nIHRvIHRoZSBsb2NhbCBwZW5kaW5nLAorICogcmVxdWlyZXMgYSBjYWxsIHRvIGllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaCBhbmQgaG9sZGluZworICogbG9jYWwtPmFtcGR1X2xvY2sgYWNyb3NzIGJvdGggY2FsbHMuCisgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBxdWV1ZSA9IGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpOworCisJaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKAorCQkmbG9jYWwtPmh3LCBxdWV1ZSwKKwkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnBlbmRpbmcpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCQkvKiBtYXJrIHF1ZXVlIGFzIHBlbmRpbmcsIGl0IGlzIHN0b3BwZWQgYWxyZWFkeSAqLworCQlfX3NldF9iaXQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcsCisJCQkgICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisJCS8qIGNvcHkgb3ZlciByZW1haW5pbmcgcGFja2V0cyAqLworCQlza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCgKKwkJCSZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnBlbmRpbmcsCisJCQkmbG9jYWwtPnBlbmRpbmdbcXVldWVdKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCit7CisJdTE2IHF1ZXVlID0gaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oCisJCSZsb2NhbC0+aHcsIHF1ZXVlLAorCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHN0YS0+bG9jayAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX2FnZ190eF9vcGVyYXRpb25hbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkKQoreworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhsb2NhbCwgc3RhLCB0aWQpOworCS8qCisJICogTkI6IHdlIHJlbHkgb24gc3RhLT5sb2NrIGJlaW5nIHRha2VuIGluIHRoZSBUWAorCSAqIHByb2Nlc3NpbmcgaGVyZSB3aGVuIGFkZGluZyB0byB0aGUgcGVuZGluZyBxdWV1ZSwKKwkgKiBvdGhlcndpc2Ugd2UgY291bGQgb25seSBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZQorCSAqIHNlc3Npb24gdG8gT1BFUkFUSU9OQUwgX2hlcmVfLgorCSAqLworCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgc3RhLCB0aWQpOworCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisKKwlsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMLAorCQkJCSAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdTggKnN0YXRlOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKKwkJCQl0aWQsIFNUQV9USURfTlVNKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoV0FSTl9PTighKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQkqc3RhdGUpOworI2VuZGlmCisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChXQVJOX09OKCpzdGF0ZSAmIEhUX0FEREJBX0RSVl9SRUFEWV9NU0spKQorCQlnb3RvIG91dDsKKworCSpzdGF0ZSB8PSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLOworCisJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCisJCWllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwobG9jYWwsIHN0YSwgdGlkKTsKKworIG91dDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKTsKKwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKworCWlmICh1bmxpa2VseSghc2tiKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCisJCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7CisJbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOworCXJhX3RpZC0+dGlkID0gdGlkOworCisJc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9BRERCQV9NU0c7CisJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7CisJdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSk7CisKK2ludCBfX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJICAgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcikKK3sKKwl1OCAqc3RhdGU7CisJaW50IHJldDsKKworCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgaW4gYWdncmVnYXRpb24gKi8KKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byB1bmxvY2s7CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlR4IEJBIHNlc3Npb24gc3RvcCByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCisJICAgICAgIHN0YS0+c3RhLmFkZHIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisKKwlyZXQgPSBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBpbml0aWF0b3IpOworCisgdW5sb2NrOgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSB1OCAqcmEsIHUxNiB0aWQsCisJCQkJIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IHJldCA9IDA7CisKKwlpZiAoV0FSTl9PTighbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodGlkID49IFNUQV9USURfTlVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmV0ID0gX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBpbml0aWF0b3IpOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24pOworCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHU4IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCAqc3RhdGU7CisKKwlpZiAodGlkID49IFNUQV9USURfTlVNKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAorCQkJCXRpZCwgU1RBX1RJRF9OVU0pOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiU3RvcHBpbmcgVHggQkEgc2Vzc2lvbiBmb3IgJXBNIHRpZCAlZFxuIiwKKwkgICAgICAgcmEsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOworI2VuZGlmCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCS8qIE5PVEU6IG5vIG5lZWQgdG8gdXNlIHN0YS0+bG9jayBpbiB0aGlzIHN0YXRlIGNoZWNrLCBhcworCSAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24gd2lsbCBsZXQgb25seSBvbmUgc3RvcCBjYWxsIHRvCisJICogcGFzcyB0aHJvdWdoIHBlciBzdGEvdGlkCisJICovCisJaWYgKCgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLKSA9PSAwKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJ1bmV4cGVjdGVkIGNhbGxiYWNrIHRvIEEtTVBEVSBzdG9wXG4iKTsKKyNlbmRpZgorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSykKKwkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RhLT5zZGF0YSwgcmEsIHRpZCwKKwkJCVdMQU5fQkFDS19JTklUSUFUT1IsIFdMQU5fUkVBU09OX1FTVEFfTk9UX1VTRSk7CisKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJc3Bpbl9sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9wYWNrZXRzKGxvY2FsLCBzdGEsIHRpZCk7CisKKwkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKwkvKiBmcm9tIG5vdyBvbiBwYWNrZXRzIGFyZSBubyBsb25nZXIgcHV0IG9udG8gc3RhLT5wZW5kaW5nICovCisJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7CisJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOworCisJaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKGxvY2FsLCBzdGEsIHRpZCk7CisKKwlzcGluX3VubG9jaygmbG9jYWwtPmFtcGR1X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKTsKKwordm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgY29uc3QgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICpyYV90aWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7CisKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgorCQkJICAgICAgICJkcm9wcGluZyBzdG9wIEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7CisJbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOworCXJhX3RpZC0+dGlkID0gdGlkOworCisJc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9ERUxCQV9NU0c7CisJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7CisJdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKTsKKworCit2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgIHNpemVfdCBsZW4pCit7CisJdTE2IGNhcGFiLCB0aWQ7CisJdTggKnN0YXRlOworCisJY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIpOworCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJ3cm9uZyBhZGRCQSByZXNwb25zZSB0b2tlbiwgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlyZXR1cm47CisJfQorCisJZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKKwkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJdTggY3Vyc3RhdGUgPSAqc3RhdGU7CisKKwkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKKworCQlpZiAoKnN0YXRlICE9IGN1cnN0YXRlICYmICpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCisJCQlpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKGxvY2FsLCBzdGEsIHRpZCk7CisKKwkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7CisJfSBlbHNlIHsKKwkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSsrOworCQlfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggOWQ0ZTRkOC4uZTY3N2I3NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTMzLDYgKzEzMyw5IEBACiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQlhbGcgPSBBTEdfQ0NNUDsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwkJYWxnID0gQUxHX0FFU19DTUFDOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNzUsNiArMjc4LDE3IEBACiAJCWVsc2UKIAkJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlwYXJhbXMuY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM7CisJCXNlcVswXSA9IGtleS0+dS5hZXNfY21hYy50eF9wbls1XTsKKwkJc2VxWzFdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzRdOworCQlzZXFbMl0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bM107CisJCXNlcVszXSA9IGtleS0+dS5hZXNfY21hYy50eF9wblsyXTsKKwkJc2VxWzRdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzFdOworCQlzZXFbNV0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bMF07CisJCXBhcmFtcy5zZXEgPSBzZXE7CisJCXBhcmFtcy5zZXFfbGVuID0gNjsKKwkJYnJlYWs7CiAJfQogCiAJcGFyYW1zLmtleSA9IGtleS0+Y29uZi5rZXk7CkBAIC0zMDQsNiArMzE4LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICB1OCBrZXlfaWR4KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwga2V5X2lkeCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CkBAIC0zMTEsMTEgKzM0MSwxNSBAQAogCXNpbmZvLT5maWxsZWQgPSBTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRSB8CiAJCQlTVEFUSU9OX0lORk9fUlhfQllURVMgfAogCQkJU1RBVElPTl9JTkZPX1RYX0JZVEVTIHwKKwkJCVNUQVRJT05fSU5GT19SWF9QQUNLRVRTIHwKKwkJCVNUQVRJT05fSU5GT19UWF9QQUNLRVRTIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFOwogCiAJc2luZm8tPmluYWN0aXZlX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGEtPmxhc3RfcngpOwogCXNpbmZvLT5yeF9ieXRlcyA9IHN0YS0+cnhfYnl0ZXM7CiAJc2luZm8tPnR4X2J5dGVzID0gc3RhLT50eF9ieXRlczsKKwlzaW5mby0+cnhfcGFja2V0cyA9IHN0YS0+cnhfcGFja2V0czsKKwlzaW5mby0+dHhfcGFja2V0cyA9IHN0YS0+dHhfcGFja2V0czsKIAogCWlmIChzdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSB7CiAJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKQEAgLTQxNyw3ICs0NTEsOCBAQAogCSAqIFRoaXMgaXMgYSBrbHVkZ2UuIGJlYWNvbiBpbnRlcnZhbCBzaG91bGQgcmVhbGx5IGJlIHBhcnQKIAkgKiBvZiB0aGUgYmVhY29uIGluZm9ybWF0aW9uLgogCSAqLwotCWlmIChwYXJhbXMtPmludGVydmFsKSB7CisJaWYgKHBhcmFtcy0+aW50ZXJ2YWwgJiYgKHNkYXRhLT5sb2NhbC0+aHcuY29uZi5iZWFjb25faW50ICE9CisJCQkJIHBhcmFtcy0+aW50ZXJ2YWwpKSB7CiAJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gcGFyYW1zLT5pbnRlcnZhbDsKIAkJZXJyID0gaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsCiAJCQkJCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpOwpAQCAtNDkzLDcgKzUyOCw4IEBACiAKIAlrZnJlZShvbGQpOwogCi0JcmV0dXJuIGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7CisJcmV0dXJuIGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTiB8CisJCQkJCSAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01MDQsOSArNTQwLDYgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJldHVybiAtRUlOVkFMOwotCiAJb2xkID0gc2RhdGEtPnUuYXAuYmVhY29uOwogCiAJaWYgKG9sZCkKQEAgLTUyMyw5ICs1NTYsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlvbGQgPSBzZGF0YS0+dS5hcC5iZWFjb247CiAKIAlpZiAoIW9sZCkKQEAgLTU0MSw5ICs1NzEsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlvbGQgPSBzZGF0YS0+dS5hcC5iZWFjb247CiAKIAlpZiAoIW9sZCkKQEAgLTU1Myw3ICs1ODAsNyBAQAogCXN5bmNocm9uaXplX3JjdSgpOwogCWtmcmVlKG9sZCk7CiAKLQlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwogfQogCiAvKiBMYXllciAyIFVwZGF0ZSBmcmFtZSAoODAyLjIgVHlwZSAxIExMQyBYSUQgVXBkYXRlIHJlc3BvbnNlKSAqLwpAQCAtNjMwLDYgKzY1NywxMCBAQAogCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9XTUU7CiAJCWlmIChwYXJhbXMtPnN0YXRpb25fZmxhZ3MgJiBTVEFUSU9OX0ZMQUdfV01FKQogCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9XTUU7CisKKwkJc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfTUZQOworCQlpZiAocGFyYW1zLT5zdGF0aW9uX2ZsYWdzICYgU1RBVElPTl9GTEFHX01GUCkKKwkJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfTUZQOwogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAl9CiAKQEAgLTY4OCwxMCArNzE5LDYgQEAKIAlpbnQgZXJyOwogCWludCBsYXllcjJfdXBkYXRlOwogCi0JLyogUHJldmVudCBhIHJhY2Ugd2l0aCBjaGFuZ2luZyB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSAqLwotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOwotCiAJaWYgKHBhcmFtcy0+dmxhbikgewogCQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHBhcmFtcy0+dmxhbik7CiAKQEAgLTgyMCwxNCArODQ3LDggQEAKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlpbnQgZXJyOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBuZXh0X2hvcCk7CiAJaWYgKCFzdGEpIHsKQEAgLTg3MywxNCArODk0LDggQEAKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOwotCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQlyZXR1cm4gLUVOT1RTVVBQOwotCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBuZXh0X2hvcCk7CkBAIC05NDksOSArOTY0LDYgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0LCBzZGF0YSk7CiAJaWYgKCFtcGF0aCkgewpAQCAtOTczLDkgKzk4NSw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwX2J5X2lkeChpZHgsIHNkYXRhKTsKIAlpZiAoIW1wYXRoKSB7CkBAIC05OTUsOCArMTAwNCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQlyZXR1cm4gLUVOT1RTVVBQOwogCW1lbWNweShjb25mLCAmKHNkYXRhLT51Lm1lc2gubXNoY2ZnKSwgc2l6ZW9mKHN0cnVjdCBtZXNoX2NvbmZpZykpOwogCXJldHVybiAwOwogfQpAQCAtMTAxNCw5ICsxMDIxLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAkvKiBTZXQgdGhlIGNvbmZpZyBvcHRpb25zIHdoaWNoIHdlIGFyZSBpbnRlcmVzdGVkIGluIHNldHRpbmcgKi8KIAljb25mID0gJihzZGF0YS0+dS5tZXNoLm1zaGNmZyk7CiAJaWYgKF9jaGdfbWVzaF9hdHRyKE5MODAyMTFfTUVTSENPTkZfUkVUUllfVElNRU9VVCwgbWFzaykpCkBAIC0xMDY0LDkgKzEwNjgsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAocGFyYW1zLT51c2VfY3RzX3Byb3QgPj0gMCkgewogCQlzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCA9IHBhcmFtcy0+dXNlX2N0c19wcm90OwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVDsKQEAgLTExNDEsNiArMTE0MiwxNTAgQEAKIAlyZXR1cm4gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJcmV0dXJuIF9faWVlZTgwMjExX3N1c3BlbmQod2lwaHlfcHJpdih3aXBoeSkpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9yZXN1bWUoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfcmVzdW1lKHdpcGh5X3ByaXYod2lwaHkpKTsKK30KKyNlbHNlCisjZGVmaW5lIGllZWU4MDIxMV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgaWVlZTgwMjExX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBpZWVlODAyMTFfc2NhbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgcmVxKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlzd2l0Y2ggKHJlcS0+YXV0aF90eXBlKSB7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOgorCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX09QRU47CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOgorCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9GVDoKKwkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19GVDsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQOgorCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX0xFQVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwltZW1jcHkoc2RhdGEtPnUubWdkLmJzc2lkLCByZXEtPnBlZXJfYWRkciwgRVRIX0FMRU4pOworCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7CisKKwkvKiBUT0RPOiByZXEtPmNoYW4gKi8KKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOworCisJaWYgKHJlcS0+c3NpZCkgeworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKKwkJbWVtY3B5KHNkYXRhLT51Lm1nZC5zc2lkLCByZXEtPnNzaWQsIHJlcS0+c3NpZF9sZW4pOworCQlzZGF0YS0+dS5tZ2Quc3NpZF9sZW4gPSByZXEtPnNzaWRfbGVuOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwl9CisKKwlrZnJlZShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUpOworCXNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSA9IE5VTEw7CisJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llX2xlbiA9IDA7CisJaWYgKHJlcS0+aWUpIHsKKwkJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llID0ga21hbGxvYyhyZXEtPmllX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1jcHkoc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llLCByZXEtPmllLCByZXEtPmllX2xlbik7CisJCXNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZV9sZW4gPSByZXEtPmllX2xlbjsKKwl9CisKKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9FWFRfU01FOworCXNkYXRhLT51Lm1nZC5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2Fzc29jKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCWludCByZXQ7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZiAobWVtY21wKHNkYXRhLT51Lm1nZC5ic3NpZCwgcmVxLT5wZWVyX2FkZHIsIEVUSF9BTEVOKSAhPSAwIHx8CisJICAgICEoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKSkKKwkJcmV0dXJuIC1FTk9MSU5LOyAvKiBub3QgYXV0aGVudGljYXRlZCAqLworCisJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKworCS8qIFRPRE86IHJlcS0+Y2hhbiAqLworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CisKKwlpZiAocmVxLT5zc2lkKSB7CisJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCQltZW1jcHkoc2RhdGEtPnUubWdkLnNzaWQsIHJlcS0+c3NpZCwgcmVxLT5zc2lkX2xlbik7CisJCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IHJlcS0+c3NpZF9sZW47CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCX0gZWxzZQorCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCisJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfRVhUX1NNRTsKKwlzZGF0YS0+dS5tZ2Quc3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOworCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9kZWF1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCS8qIFRPRE86IHJlcS0+aWUgKi8KKwlyZXR1cm4gaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwgcmVxLT5yZWFzb25fY29kZSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2Rpc2Fzc29jKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJLyogVE9ETzogcmVxLT5pZSAqLworCXJldHVybiBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzZGF0YSwgcmVxLT5yZWFzb25fY29kZSk7Cit9CisKIHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHsKIAkuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsCiAJLmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLApAQCAtMTE0OSw2ICsxMjk0LDcgQEAKIAkuZGVsX2tleSA9IGllZWU4MDIxMV9kZWxfa2V5LAogCS5nZXRfa2V5ID0gaWVlZTgwMjExX2dldF9rZXksCiAJLnNldF9kZWZhdWx0X2tleSA9IGllZWU4MDIxMV9jb25maWdfZGVmYXVsdF9rZXksCisJLnNldF9kZWZhdWx0X21nbXRfa2V5ID0gaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X21nbXRfa2V5LAogCS5hZGRfYmVhY29uID0gaWVlZTgwMjExX2FkZF9iZWFjb24sCiAJLnNldF9iZWFjb24gPSBpZWVlODAyMTFfc2V0X2JlYWNvbiwKIAkuZGVsX2JlYWNvbiA9IGllZWU4MDIxMV9kZWxfYmVhY29uLApAQCAtMTE2OSw0ICsxMzE1LDExIEBACiAJLmNoYW5nZV9ic3MgPSBpZWVlODAyMTFfY2hhbmdlX2JzcywKIAkuc2V0X3R4cV9wYXJhbXMgPSBpZWVlODAyMTFfc2V0X3R4cV9wYXJhbXMsCiAJLnNldF9jaGFubmVsID0gaWVlZTgwMjExX3NldF9jaGFubmVsLAorCS5zdXNwZW5kID0gaWVlZTgwMjExX3N1c3BlbmQsCisJLnJlc3VtZSA9IGllZWU4MDIxMV9yZXN1bWUsCisJLnNjYW4gPSBpZWVlODAyMTFfc2NhbiwKKwkuYXV0aCA9IGllZWU4MDIxMV9hdXRoLAorCS5hc3NvYyA9IGllZWU4MDIxMV9hc3NvYywKKwkuZGVhdXRoID0gaWVlZTgwMjExX2RlYXV0aCwKKwkuZGlzYXNzb2MgPSBpZWVlODAyMTFfZGlzYXNzb2MsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggMjY5N2EyZi4uMjEwYjliNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC00MCw2ICs0MCwxMCBAQAogCWxvY2FsLT5kZWJ1Z2ZzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLCBwaHlkLAlcCiAJCQkJCQkgIGxvY2FsLCAmbmFtZSMjIF9vcHMpOwogCisjZGVmaW5lIERFQlVHRlNfQUREX01PREUobmFtZSwgbW9kZSkJCQkJCVwKKwlsb2NhbC0+ZGVidWdmcy5uYW1lID0gZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgbW9kZSwgcGh5ZCwJXAorCQkJCQkJICBsb2NhbCwgJm5hbWUjIyBfb3BzKTsKKwogI2RlZmluZSBERUJVR0ZTX0RFTChuYW1lKQkJCQkJCVwKIAlkZWJ1Z2ZzX3JlbW92ZShsb2NhbC0+ZGVidWdmcy5uYW1lKTsJCQkJXAogCWxvY2FsLT5kZWJ1Z2ZzLm5hbWUgPSBOVUxMOwpAQCAtNTcsMTEgKzYxLDgwIEBACiAJCSAgICAgIGxvY2FsLT5ody5jb25mLmxvbmdfZnJhbWVfbWF4X3R4X2NvdW50KTsKIERFQlVHRlNfUkVBRE9OTFlfRklMRSh0b3RhbF9wc19idWZmZXJlZCwgMjAsICIlZCIsCiAJCSAgICAgIGxvY2FsLT50b3RhbF9wc19idWZmZXJlZCk7Ci1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUod2VwX2l2LCAyMCwgIiUjMDZ4IiwKK0RFQlVHRlNfUkVBRE9OTFlfRklMRSh3ZXBfaXYsIDIwLCAiJSMwOHgiLAogCQkgICAgICBsb2NhbC0+d2VwX2l2ICYgMHhmZmZmZmYpOwogREVCVUdGU19SRUFET05MWV9GSUxFKHJhdGVfY3RybF9hbGcsIDEwMCwgIiVzIiwKIAkJICAgICAgbG9jYWwtPnJhdGVfY3RybCA/IGxvY2FsLT5yYXRlX2N0cmwtPm9wcy0+bmFtZSA6ICI8dW5zZXQ+Iik7CiAKK3N0YXRpYyBzc2l6ZV90IHRzZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXU2NCB0c2YgPSAwOworCWNoYXIgYnVmWzEwMF07CisKKwlpZiAobG9jYWwtPm9wcy0+Z2V0X3RzZikKKwkJdHNmID0gbG9jYWwtPm9wcy0+Z2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JTAxNmxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMTkpOworfQorCitzdGF0aWMgc3NpemVfdCB0c2Zfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0c2Y7CisJY2hhciBidWZbMTAwXTsKKwlzaXplX3QgbGVuOworCisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlpZiAoc3RybmNtcChidWYsICJyZXNldCIsIDUpID09IDApIHsKKwkJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgeworCQkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZGVidWdmcyByZXNldCBUU0ZcbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CisJCX0KKwl9IGVsc2UgeworCQl0c2YgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCQlpZiAobG9jYWwtPm9wcy0+c2V0X3RzZikgeworCQkJbG9jYWwtPm9wcy0+c2V0X3RzZihsb2NhbF90b19odyhsb2NhbCksIHRzZik7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZGVidWdmcyBzZXQgVFNGIHRvICUjMDE4bGx4XG4iLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHRzZik7CisJCX0KKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzZl9vcHMgPSB7CisJLnJlYWQgPSB0c2ZfcmVhZCwKKwkud3JpdGUgPSB0c2Zfd3JpdGUsCisJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYworfTsKKworc3RhdGljIHNzaXplX3QgcmVzZXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcnRubF9sb2NrKCk7CisJX19pZWVlODAyMTFfc3VzcGVuZCgmbG9jYWwtPmh3KTsKKwlfX2llZWU4MDIxMV9yZXN1bWUoJmxvY2FsLT5odyk7CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVzZXRfb3BzID0geworCS53cml0ZSA9IHJlc2V0X3dyaXRlLAorCS5vcGVuID0gbWFjODAyMTFfb3Blbl9maWxlX2dlbmVyaWMsCit9OworCiAvKiBzdGF0aXN0aWNzIHN0dWZmICovCiAKICNkZWZpbmUgREVCVUdGU19TVEFUU19GSUxFKG5hbWUsIGJ1ZmxlbiwgZm10LCB2YWx1ZS4uLikJCQlcCkBAIC0xMzYsOCArMjA5LDYgQEAKIAkJICAgbG9jYWwtPmRvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50KTsKIERFQlVHRlNfU1RBVFNfRklMRSh0cmFuc21pdHRlZF9mcmFtZV9jb3VudCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT5kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudCk7Ci1ERUJVR0ZTX1NUQVRTX0ZJTEUod2VwX3VuZGVjcnlwdGFibGVfY291bnQsIDIwLCAiJXUiLAotCQkgICBsb2NhbC0+ZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUwogREVCVUdGU19TVEFUU19GSUxFKHR4X2hhbmRsZXJzX2Ryb3AsIDIwLCAiJXUiLAogCQkgICBsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7CkBAIC0yMDQsNiArMjc1LDggQEAKIAlERUJVR0ZTX0FERChsb25nX3JldHJ5X2xpbWl0KTsKIAlERUJVR0ZTX0FERCh0b3RhbF9wc19idWZmZXJlZCk7CiAJREVCVUdGU19BREQod2VwX2l2KTsKKwlERUJVR0ZTX0FERCh0c2YpOworCURFQlVHRlNfQUREX01PREUocmVzZXQsIDAyMDApOwogCiAJc3RhdHNkID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdGF0aXN0aWNzIiwgcGh5ZCk7CiAJbG9jYWwtPmRlYnVnZnMuc3RhdGlzdGljcyA9IHN0YXRzZDsKQEAgLTIyMSw3ICsyOTQsNiBAQAogCURFQlVHRlNfU1RBVFNfQUREKHJlY2VpdmVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0FERChtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQpOwogCURFQlVHRlNfU1RBVFNfQUREKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0FERCh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfZHJvcCk7CiAJREVCVUdGU19TVEFUU19BREQodHhfaGFuZGxlcnNfcXVldWVkKTsKQEAgLTI1OCw2ICszMzAsOCBAQAogCURFQlVHRlNfREVMKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfREVMKHRvdGFsX3BzX2J1ZmZlcmVkKTsKIAlERUJVR0ZTX0RFTCh3ZXBfaXYpOworCURFQlVHRlNfREVMKHRzZik7CisJREVCVUdGU19ERUwocmVzZXQpOwogCiAJREVCVUdGU19TVEFUU19ERUwodHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKG11bHRpY2FzdF90cmFuc21pdHRlZF9mcmFtZV9jb3VudCk7CkBAIC0yNjgsNyArMzQyLDYgQEAKIAlERUJVR0ZTX1NUQVRTX0RFTChyZWNlaXZlZF9mcmFnbWVudF9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobXVsdGljYXN0X3JlY2VpdmVkX2ZyYW1lX2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTCh0cmFuc21pdHRlZF9mcmFtZV9jb3VudCk7Ci0JREVCVUdGU19TVEFUU19ERUwod2VwX3VuZGVjcnlwdGFibGVfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKG51bV9zY2Fucyk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJREVCVUdGU19TVEFUU19ERUwodHhfaGFuZGxlcnNfZHJvcCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCmluZGV4IDY0MjRhYzUuLjk5Yzc1MjUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCkBAIC03Niw2ICs3Niw5IEBACiAJY2FzZSBBTEdfQ0NNUDoKIAkJYWxnID0gIkNDTVBcbiI7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlhbGcgPSAiQUVTLTEyOC1DTUFDXG4iOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMDUsNiArMTA4LDEyIEBACiAJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAogCQkJCXRwblswXSwgdHBuWzFdLCB0cG5bMl0sIHRwblszXSwgdHBuWzRdLCB0cG5bNV0pOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJdHBuID0ga2V5LT51LmFlc19jbWFjLnR4X3BuOworCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQl0cG5bMF0sIHRwblsxXSwgdHBuWzJdLCB0cG5bM10sIHRwbls0XSwKKwkJCQl0cG5bNV0pOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDIsNiArMTUxLDE0IEBACiAJCX0KIAkJbGVuID0gcCAtIGJ1ZjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXJwbiA9IGtleS0+dS5hZXNfY21hYy5yeF9wbjsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsCisJCQkgICAgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCSAgICAgICBycG5bMF0sIHJwblsxXSwgcnBuWzJdLAorCQkJICAgICAgIHJwblszXSwgcnBuWzRdLCBycG5bNV0pOworCQlsZW4gPSBwIC0gYnVmOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNTYsMTMgKzE3Myw0MCBAQAogCWNoYXIgYnVmWzIwXTsKIAlpbnQgbGVuOwogCi0JaWYgKGtleS0+Y29uZi5hbGcgIT0gQUxHX0NDTVApCisJc3dpdGNoIChrZXktPmNvbmYuYWxnKSB7CisJY2FzZSBBTEdfQ0NNUDoKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwga2V5LT51LmNjbXAucmVwbGF5cyk7CisJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLAorCQkJCWtleS0+dS5hZXNfY21hYy5yZXBsYXlzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIDA7Ci0JbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwga2V5LT51LmNjbXAucmVwbGF5cyk7CisJfQogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQogS0VZX09QUyhyZXBsYXlzKTsKIAorc3RhdGljIHNzaXplX3Qga2V5X2ljdmVycm9yc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMjBdOworCWludCBsZW47CisKKwlzd2l0Y2ggKGtleS0+Y29uZi5hbGcpIHsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwKKwkJCQlrZXktPnUuYWVzX2NtYWMuaWN2ZXJyb3JzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorS0VZX09QUyhpY3ZlcnJvcnMpOworCiBzdGF0aWMgc3NpemVfdCBrZXlfa2V5X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewpAQCAtMjIyLDYgKzI2Niw3IEBACiAJREVCVUdGU19BREQodHhfc3BlYyk7CiAJREVCVUdGU19BREQocnhfc3BlYyk7CiAJREVCVUdGU19BREQocmVwbGF5cyk7CisJREVCVUdGU19BREQoaWN2ZXJyb3JzKTsKIAlERUJVR0ZTX0FERChrZXkpOwogCURFQlVHRlNfQUREKGlmaW5kZXgpOwogfTsKQEAgLTI0Myw2ICsyODgsNyBAQAogCURFQlVHRlNfREVMKHR4X3NwZWMpOwogCURFQlVHRlNfREVMKHJ4X3NwZWMpOwogCURFQlVHRlNfREVMKHJlcGxheXMpOworCURFQlVHRlNfREVMKGljdmVycm9ycyk7CiAJREVCVUdGU19ERUwoa2V5KTsKIAlERUJVR0ZTX0RFTChpZmluZGV4KTsKIApAQCAtMjgwLDYgKzMyNiwzNSBAQAogCXNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X2tleSA9IE5VTEw7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJY2hhciBidWZbNTBdOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CisKKwlpZiAoIXNkYXRhLT5kZWJ1Z2ZzZGlyKQorCQlyZXR1cm47CisKKwkvKiB0aGlzIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIGtleSBsb2NrICovCisKKwlrZXkgPSBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleTsKKwlpZiAoa2V5KSB7CisJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOworCQlzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9tZ210X2tleSA9CisJCQlkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKCJkZWZhdWx0X21nbXRfa2V5IiwKKwkJCQkJICAgICAgIHNkYXRhLT5kZWJ1Z2ZzZGlyLCBidWYpOworCX0gZWxzZQorCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzZGF0YSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJaWYgKCFzZGF0YSkKKwkJcmV0dXJuOworCisJZGVidWdmc19yZW1vdmUoc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfbWdtdF9rZXkpOworCXNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5ID0gTlVMTDsKK30KKwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfc3RhX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmggYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaAppbmRleCBiMWEzNzU0Li41NDcxN2I0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaAorKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaApAQCAtNiw2ICs2LDEwIEBACiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfc3RhX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKICNlbHNlCkBAIC0xOSw2ICsyMywxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdCgKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7fQorc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQore30KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfc3RhX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoge30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggYzU0MjE5My4uZTM0MjAzMiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTk0LDMxICs5NCwzMSBAQAogSUVFRTgwMjExX0lGX0ZJTEUoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBmb3JjZV91bmljYXN0X3JhdGVpZHgsIERFQyk7CiBJRUVFODAyMTFfSUZfRklMRShtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgbWF4X3JhdGVjdHJsX3JhdGVpZHgsIERFQyk7CiAKLS8qIFNUQS9JQlNTIGF0dHJpYnV0ZXMgKi8KLUlFRUU4MDIxMV9JRl9GSUxFKHN0YXRlLCB1LnN0YS5zdGF0ZSwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGJzc2lkLCB1LnN0YS5ic3NpZCwgTUFDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKHByZXZfYnNzaWQsIHUuc3RhLnByZXZfYnNzaWQsIE1BQyk7Ci1JRUVFODAyMTFfSUZfRklMRShzc2lkX2xlbiwgdS5zdGEuc3NpZF9sZW4sIFNJWkUpOwotSUVFRTgwMjExX0lGX0ZJTEUoYWlkLCB1LnN0YS5haWQsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhcF9jYXBhYiwgdS5zdGEuYXBfY2FwYWIsIEhFWCk7Ci1JRUVFODAyMTFfSUZfRklMRShjYXBhYiwgdS5zdGEuY2FwYWIsIEhFWCk7Ci1JRUVFODAyMTFfSUZfRklMRShleHRyYV9pZV9sZW4sIHUuc3RhLmV4dHJhX2llX2xlbiwgU0laRSk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX3RyaWVzLCB1LnN0YS5hdXRoX3RyaWVzLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXNzb2NfdHJpZXMsIHUuc3RhLmFzc29jX3RyaWVzLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGdzLCB1LnN0YS5hdXRoX2FsZ3MsIEhFWCk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZywgdS5zdGEuYXV0aF9hbGcsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX3RyYW5zYWN0aW9uLCB1LnN0YS5hdXRoX3RyYW5zYWN0aW9uLCBERUMpOworLyogU1RBIGF0dHJpYnV0ZXMgKi8KK0lFRUU4MDIxMV9JRl9GSUxFKHN0YXRlLCB1Lm1nZC5zdGF0ZSwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGJzc2lkLCB1Lm1nZC5ic3NpZCwgTUFDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHByZXZfYnNzaWQsIHUubWdkLnByZXZfYnNzaWQsIE1BQyk7CitJRUVFODAyMTFfSUZfRklMRShzc2lkX2xlbiwgdS5tZ2Quc3NpZF9sZW4sIFNJWkUpOworSUVFRTgwMjExX0lGX0ZJTEUoYWlkLCB1Lm1nZC5haWQsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhcF9jYXBhYiwgdS5tZ2QuYXBfY2FwYWIsIEhFWCk7CitJRUVFODAyMTFfSUZfRklMRShjYXBhYiwgdS5tZ2QuY2FwYWIsIEhFWCk7CitJRUVFODAyMTFfSUZfRklMRShleHRyYV9pZV9sZW4sIHUubWdkLmV4dHJhX2llX2xlbiwgU0laRSk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX3RyaWVzLCB1Lm1nZC5hdXRoX3RyaWVzLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYXNzb2NfdHJpZXMsIHUubWdkLmFzc29jX3RyaWVzLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGdzLCB1Lm1nZC5hdXRoX2FsZ3MsIEhFWCk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZywgdS5tZ2QuYXV0aF9hbGcsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX3RyYW5zYWN0aW9uLCB1Lm1nZC5hdXRoX3RyYW5zYWN0aW9uLCBERUMpOwogCiBzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfZm10X2ZsYWdzKAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpidWYsIGludCBidWZsZW4pCiB7CiAJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzJXMlcyVzJXMlcyVzXG4iLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCA/ICJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCA/ICJCU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCA/ICJwcmV2IEJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQgPyAiQVVUSFxuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEID8gIkFTU09DXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwgPyAiUFJPQkVSRVEgUE9MTFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCA/ICJTU0lEXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCA/ICJCU1NJRFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCA/ICJwcmV2IEJTU0lEXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQgPyAiQVVUSFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEID8gIkFTU09DXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwgPyAiUFJPQkVSRVEgUE9MTFxuIiA6ICIiLAogCQkgc2RhdGEtPnZpZi5ic3NfY29uZi51c2VfY3RzX3Byb3QgPyAiQ1RTIHByb3RcbiIgOiAiIik7CiB9CiBfX0lFRUU4MDIxMV9JRl9GSUxFKGZsYWdzKTsKQEAgLTI4Myw5ICsyODMsMTEgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJYWRkX3N0YV9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCS8qIFhYWCAqLworCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlhZGRfYXBfZmlsZXMoc2RhdGEpOwogCQlicmVhazsKQEAgLTQxOCw5ICs0MjAsMTEgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJZGVsX3N0YV9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCS8qIFhYWCAqLworCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlkZWxfYXBfZmlsZXMoc2RhdGEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggYTJmYmUwMS4uOTAyMzBjNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTY3LDE0ICs2NywxNSBAQAogCWNoYXIgYnVmWzEwMF07CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdTMyIHN0YWZsYWdzID0gZ2V0X3N0YV9mbGFncyhzdGEpOwotCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMlcyVzJXMlcyVzIiwKKwlpbnQgcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzJXMlcyVzJXMlcyVzIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9BVVRIID8gIkFVVEhcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9BU1NPQyA/ICJBU1NPQ1xuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX1BTID8gIlBTXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVVUSE9SSVpFRCA/ICJBVVRIT1JJWkVEXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfU0hPUlRfUFJFQU1CTEUgPyAiU0hPUlQgUFJFQU1CTEVcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9XTUUgPyAiV01FXG4iIDogIiIsCi0JCXN0YWZsYWdzICYgV0xBTl9TVEFfV0RTID8gIldEU1xuIiA6ICIiKTsKKwkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9XRFMgPyAiV0RTXG4iIDogIiIsCisJCXN0YWZsYWdzICYgV0xBTl9TVEFfTUZQID8gIk1GUFxuIiA6ICIiKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKIH0KIFNUQV9PUFMoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2h0LmMgYi9uZXQvbWFjODAyMTEvaHQuYwppbmRleCBjNWMwYzUyLi40ZTNjNzJmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaHQuYworKysgYi9uZXQvbWFjODAyMTEvaHQuYwpAQCAtMTcsOCArMTcsNyBAQAogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0jaW5jbHVkZSAic3RhX2luZm8uaCIKLSNpbmNsdWRlICJ3bWUuaCIKKyNpbmNsdWRlICJyYXRlLmgiCiAKIHZvaWQgaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwX2llLApAQCAtOTUsNyArOTQsOSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2h0X2NvbmYgaHQ7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTMyIGNoYW5nZWQgPSAwOwogCWJvb2wgZW5hYmxlX2h0ID0gdHJ1ZSwgaHRfY2hhbmdlZDsKIAllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSA9IE5MODAyMTFfQ0hBTl9OT19IVDsKQEAgLTEzMCwxNCArMTMxLDI1IEBACiAJCX0KIAl9CiAKLQlodF9jaGFuZ2VkID0gbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCAhPSBlbmFibGVfaHQgfHwKLQkJICAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuaHQuY2hhbm5lbF90eXBlOworCWh0X2NoYW5nZWQgPSBjb25mX2lzX2h0KCZsb2NhbC0+aHcuY29uZikgIT0gZW5hYmxlX2h0IHx8CisJCSAgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWxfdHlwZTsKIAogCWxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKLQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gZW5hYmxlX2h0OwogCi0JaWYgKGh0X2NoYW5nZWQpCi0JCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVCk7CisJaWYgKGh0X2NoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICAvKiBjaGFubmVsX3R5cGUgY2hhbmdlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgKi8KKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKKwkJaWYgKHN0YSkKKwkJCXJhdGVfY29udHJvbF9yYXRlX3VwZGF0ZShsb2NhbCwgc2JhbmQsIHN0YSwKKwkJCQkJCSBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKyAgICAgICAgfQogCiAJLyogZGlzYWJsZSBIVCAqLwogCWlmICghZW5hYmxlX2h0KQpAQCAtMTU0LDEwOCArMTY2LDIyIEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCi0JCQkJCSB1OCBkaWFsb2dfdG9rZW4sIHUxNiBzdGFydF9zZXFfbnVtLAotCQkJCQkgdTE2IGFnZ19zaXplLCB1MTYgdGltZW91dCkKK3ZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgY2FwYWI7CisJaW50IGk7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCQkJImZvciBhZGRiYSByZXF1ZXN0IGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCAgU1RBX1RJRF9OVU07IGkrKykgeworCQlfX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCBpLCBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKKwkJX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YSwgaSwgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKKwkJCQkJICAgICAgIFdMQU5fUkVBU09OX1FTVEFfTEVBVkVfUUJTUyk7CiAJfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKLQotCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxKSk7Ci0KLQltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSA9IFdMQU5fQUNUSU9OX0FEREJBX1JFUTsKLQotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKLQljYXBhYiA9ICh1MTYpKDEgPDwgMSk7CQkvKiBiaXQgMSBhZ2dyZWdhdGlvbiBwb2xpY3kgKi8KLQljYXBhYiB8PSAodTE2KSh0aWQgPDwgMik7IAkvKiBiaXQgNToyIFRJRCBudW1iZXIgKi8KLQljYXBhYiB8PSAodTE2KShhZ2dfc2l6ZSA8PCA2KTsJLyogYml0IDE1OjYgbWF4IHNpemUgb2YgYWdnZXJnYXRpb24gKi8KLQotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEudGltZW91dCA9IGNwdV90b19sZTE2KHRpbWVvdXQpOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnN0YXJ0X3NlcV9udW0gPQotCQkJCQljcHVfdG9fbGUxNihzdGFydF9zZXFfbnVtIDw8IDQpOwotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRhLCB1MTYgdGlkLAotCQkJCSAgICAgIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXR1cywgdTE2IHBvbGljeSwKLQkJCQkgICAgICB1MTYgYnVmX3NpemUsIHUxNiB0aW1lb3V0KQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTE2IGNhcGFiOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKLQotCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcCkpOwotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5hY3Rpb25fY29kZSA9IFdMQU5fQUNUSU9OX0FEREJBX1JFU1A7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKLQotCWNhcGFiID0gKHUxNikocG9saWN5IDw8IDEpOwkvKiBiaXQgMSBhZ2dyZWdhdGlvbiBwb2xpY3kgKi8KLQljYXBhYiB8PSAodTE2KSh0aWQgPDwgMik7IAkvKiBiaXQgNToyIFRJRCBudW1iZXIgKi8KLQljYXBhYiB8PSAodTE2KShidWZfc2l6ZSA8PCA2KTsJLyogYml0IDE1OjYgbWF4IHNpemUgb2YgYWdncmVnYXRpb24gKi8KLQotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AudGltZW91dCA9IGNwdV90b19sZTE2KHRpbWVvdXQpOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihzdGF0dXMpOwotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKLQkJCQkgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbl9jb2RlKQordm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgcGFyYW1zOwpAQCAtMjczLDEwICsxOTksMTIgQEAKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIApAQCAtMjkwLDc3MCArMjE4LDcgQEAKIAltZ210LT51LmFjdGlvbi51LmRlbGJhLnBhcmFtcyA9IGNwdV90b19sZTE2KHBhcmFtcyk7CiAJbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbl9jb2RlKTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOwotCXUxNiBiYXJfY29udHJvbCA9IDA7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgotCQkJImJhciBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCWJhciA9IChzdHJ1Y3QgaWVlZTgwMjExX2JhciAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmJhcikpOwotCW1lbXNldChiYXIsIDAsIHNpemVvZigqYmFyKSk7Ci0JYmFyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8Ci0JCQkJCSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOwotCW1lbWNweShiYXItPnJhLCByYSwgRVRIX0FMRU4pOwotCW1lbWNweShiYXItPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOwotCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOwotCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7Ci0JYmFyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoYmFyX2NvbnRyb2wpOwotCWJhci0+c3RhcnRfc2VxX251bSA9IGNwdV90b19sZTE2KHNzbik7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsCi0JCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCByZXQsIGk7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNoZWNrIGlmIFRJRCBpcyBpbiBvcGVyYXRpb25hbCBzdGF0ZSAqLwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdCi0JCQkJIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPQotCQlIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKLQkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCS8qIHN0b3AgSFcgUnggYWdncmVnYXRpb24uIGFtcGR1X2FjdGlvbiBleGlzdGVuY2UKLQkgKiBhbHJlYWR5IHZlcmlmaWVkIGluIHNlc3Npb24gaW5pdCBzbyB3ZSBhZGQgdGhlIEJVR19PTiAqLwotCUJVR19PTighbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJSeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCi0JCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9ERUJVRyAiSFcgcHJvYmxlbSAtIGNhbiBub3Qgc3RvcCByeCAiCi0JCQkJImFnZ3JlZ2F0aW9uIGZvciB0aWQgJWRcbiIsIHRpZCk7Ci0KLQkvKiBzaHV0ZG93biB0aW1lciBoYXMgbm90IGV4cGlyZWQgKi8KLQlpZiAoaW5pdGlhdG9yICE9IFdMQU5fQkFDS19USU1FUikKLQkJZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7Ci0KLQkvKiBjaGVjayBpZiB0aGlzIGlzIGEgc2VsZiBnZW5lcmF0ZWQgYWdncmVnYXRpb24gaGFsdCAqLwotCWlmIChpbml0aWF0b3IgPT0gV0xBTl9CQUNLX1JFQ0lQSUVOVCB8fCBpbml0aWF0b3IgPT0gV0xBTl9CQUNLX1RJTUVSKQotCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzZGF0YSwgcmEsIHRpZCwgMCwgcmVhc29uKTsKLQotCS8qIGZyZWUgdGhlIHJlb3JkZXJpbmcgYnVmZmVyICovCi0JZm9yIChpID0gMDsgaSA8IHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+YnVmX3NpemU7IGkrKykgewotCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSkgewotCQkJLyogcmVsZWFzZSB0aGUgcmVvcmRlcmVkIGZyYW1lcyAqLwotCQkJZGV2X2tmcmVlX3NrYihzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKTsKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c3RvcmVkX21wZHVfbnVtLS07Ci0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldID0gTlVMTDsKLQkJfQotCX0KLQkvKiBmcmVlIHJlc291cmNlcyAqLwotCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWYpOwotCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfSURMRTsKLQotCXJjdV9yZWFkX3VubG9jaygpOwotfQotCi0KLS8qCi0gKiBBZnRlciBzZW5kaW5nIGFkZCBCbG9jayBBY2sgcmVxdWVzdCB3ZSBhY3RpdmF0ZWQgYSB0aW1lciB1bnRpbAotICogYWRkIEJsb2NrIEFjayByZXNwb25zZSB3aWxsIGFycml2ZSBmcm9tIHRoZSByZWNpcGllbnQuCi0gKiBJZiB0aGlzIHRpbWVyIGV4cGlyZXMgc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZCB3aWxsIGJlIGV4ZWN1dGVkLgotICovCi1zdGF0aWMgdm9pZCBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcwotCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgYm90aCBzdGFfaW5mbyBhbmQgVElEIGFyZSBuZWVkZWQsIHNvIGluaXQKLQkgKiBmbG93IGluIHN0YV9pbmZvX2NyZWF0ZSBnaXZlcyB0aGUgVElEIGFzIGRhdGEsIHdoaWxlIHRoZSB0aW1lcl90b19pZAotCSAqIGFycmF5IGdpdmVzIHRoZSBzdGEgdGhyb3VnaCBjb250YWluZXJfb2YgKi8KLQl1MTYgdGlkID0gKih1OCAqKWRhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICp0ZW1wX3N0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAqKWRhdGEsCi0JCXN0cnVjdCBzdGFfaW5mbywgdGltZXJfdG9fdGlkW3RpZF0pOwotCi0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB0ZW1wX3N0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgdGVtcF9zdGEtPnN0YS5hZGRyKTsKLQlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lciBleHBpcmVkIG9uIHRpZCAlZCBidXQgd2UgYXJlIG5vdCAiCi0JCQkJImV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZSIsIHRpZCk7Ci0jZW5kaWYKLQkJZ290byB0aW1lcl9leHBpcmVkX2V4aXQ7Ci0JfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHJlc3BvbnNlIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0KLQkvKiBnbyB0aHJvdWdoIHRoZSBzdGF0ZSBjaGVjayBpbiBzdG9wX0JBX3Nlc3Npb24gKi8KLQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihodywgdGVtcF9zdGEtPnN0YS5hZGRyLCB0aWQsCi0JCQkJICAgICBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKLQotdGltZXJfZXhwaXJlZF9leGl0OgotCXJjdV9yZWFkX3VubG9jaygpOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYWRkcikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAgU1RBX1RJRF9OVU07IGkrKykgewotCQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCZsb2NhbC0+aHcsIGFkZHIsIGksCi0JCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0JCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHNkYXRhLCBhZGRyLCBpLAotCQkJCQkJIFdMQU5fQkFDS19SRUNJUElFTlQsCi0JCQkJCQkgV0xBTl9SRUFTT05fUVNUQV9MRUFWRV9RQlNTKTsKLQl9Ci19Ci0KLWludCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXUxNiBzdGFydF9zZXFfbnVtOwotCXU4ICpzdGF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICgodGlkID49IFNUQV9USURfTlVNKSB8fCAhKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIk9wZW4gQkEgc2Vzc2lvbiByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKLSNlbmRpZgotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JLyogd2UgaGF2ZSB0cmllZCB0b28gbWFueSB0aW1lcywgcmVjZWl2ZXIgZG9lcyBub3Qgd2FudCBBLU1QRFUgKi8KLQlpZiAoc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA+IEhUX0FHR19NQVhfUkVUUklFUykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX3VubG9ja19zdGE7Ci0JfQotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgbm90IGluIGFnZ3JlZ2F0aW9uIGZsb3cgYWxyZWFkeSAqLwotCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gc2Vzc2lvbiBpcyBub3QgIgotCQkJCSAiaWRsZSBvbiB0aWQgJXVcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gZXJyX3VubG9ja19zdGE7Ci0JfQotCi0JLyogcHJlcGFyZSBBLU1QRFUgTUxNRSBmb3IgVHggYWdncmVnYXRpb24gKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV90eCksIEdGUF9BVE9NSUMpOwotCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlIHR4IG1sbWUgdG8gdGlkICVkIGZhaWxlZFxuIiwKLQkJCQkJdGlkKTsKLSNlbmRpZgotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bmxvY2tfc3RhOwotCX0KLQkvKiBUeCB0aW1lciAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5mdW5jdGlvbiA9Ci0JCQlzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5kYXRhID0KLQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOwotCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7Ci0KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykgewotCQkvKiBjcmVhdGUgYSBuZXcgcXVldWUgZm9yIHRoaXMgYWdncmVnYXRpb24gKi8KLQkJcmV0ID0gaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQobG9jYWwsIHN0YSwgdGlkKTsKLQotCQkvKiBjYXNlIG5vIHF1ZXVlIGlzIGF2YWlsYWJsZSB0byBhZ2dyZWdhdGlvbgotCQkgKiBkb24ndCBzd2l0Y2ggdG8gYWdncmVnYXRpb24gKi8KLQkJaWYgKHJldCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gIgotCQkJICAgICAgICJxdWV1ZSB1bmF2YWlsYWJsZSBmb3IgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQkJZ290byBlcnJfdW5sb2NrX3F1ZXVlOwotCQl9Ci0JfQotCXNkYXRhID0gc3RhLT5zZGF0YTsKLQotCS8qIE9rLCB0aGUgQWRkYmEgZnJhbWUgaGFzbid0IGJlZW4gc2VudCB5ZXQsIGJ1dCBpZiB0aGUgZHJpdmVyIGNhbGxzIHRoZQotCSAqIGNhbGwgYmFjayByaWdodCBhd2F5LCBpdCBtdXN0IHNlZSB0aGF0IHRoZSBmbG93IGhhcyBiZWd1biAqLwotCSpzdGF0ZSB8PSBIVF9BRERCQV9SRVFVRVNURURfTVNLOwotCi0JLyogVGhpcyBpcyBzbGlnaHRseSByYWN5IGJlY2F1c2UgdGhlIHF1ZXVlIGlzbid0IHN0b3BwZWQgKi8KLQlzdGFydF9zZXFfbnVtID0gc3RhLT50aWRfc2VxW3RpZF07Ci0KLQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVCwKLQkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7Ci0KLQlpZiAocmV0KSB7Ci0JCS8qIE5vIG5lZWQgdG8gcmVxdWV1ZSB0aGUgcGFja2V0cyBpbiB0aGUgYWdnIHF1ZXVlLCBzaW5jZSB3ZQotCQkgKiBoZWxkIHRoZSB0eCBsb2NrOiBubyBwYWNrZXQgY291bGQgYmUgZW5xdWV1ZWQgdG8gdGhlIG5ld2x5Ci0JCSAqIGFsbG9jYXRlZCBxdWV1ZSAqLwotCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMCk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKLQkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotCQlnb3RvIGVycl91bmxvY2tfcXVldWU7Ci0JfQotCi0JLyogV2lsbCBwdXQgYWxsIHRoZSBwYWNrZXRzIGluIHRoZSBuZXcgU1cgcXVldWUgKi8KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJaWVlZTgwMjExX3JlcXVldWUobG9jYWwsIGllZWU4MDJfMWRfdG9fYWNbdGlkXSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiBzZW5kIGFuIGFkZEJBIHJlcXVlc3QgKi8KLQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcisrOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuID0KLQkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuID0gc3RhcnRfc2VxX251bTsKLQotCi0JaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdGEtPnNkYXRhLCByYSwgdGlkLAotCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuLAotCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuLAotCQkJIDB4NDAsIDUwMDApOwotCS8qIGFjdGl2YXRlIHRoZSB0aW1lciBmb3IgdGhlIHJlY2lwaWVudCdzIGFkZEJBIHJlc3BvbnNlICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyBBRERCQV9SRVNQX0lOVEVSVkFMOwotCWFkZF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYWN0aXZhdGVkIGFkZEJBIHJlc3BvbnNlIHRpbWVyIG9uIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZgotCWdvdG8gZXhpdDsKLQotZXJyX3VubG9ja19xdWV1ZToKLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7Ci0JcmV0ID0gLUVCVVNZOwotZXJyX3VubG9ja19zdGE6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci1leGl0OgotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKTsKLQotaW50IGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHU4ICpyYSwgdTE2IHRpZCwKLQkJCQkgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAodGlkID49IFNUQV9USURfTlVNKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBpbiBhZ2dyZWdhdGlvbiAqLwotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHN0b3BfQkFfZXhpdDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiVHggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0KLQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKLQkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7Ci0KLQkvKiBjYXNlIEhXIGRlbmllZCBnb2luZyBiYWNrIHRvIGxlZ2FjeSAqLwotCWlmIChyZXQpIHsKLQkJV0FSTl9PTihyZXQgIT0gLUVCVVNZKTsKLQkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCQlnb3RvIHN0b3BfQkFfZXhpdDsKLQl9Ci0KLXN0b3BfQkFfZXhpdDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKTsKLQotdm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7Ci0KLQlpZiAodGlkID49IFNUQV9USURfTlVNKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAotCQkJCXRpZCwgU1RBX1RJRF9OVU0pOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSB3YXMgbm90IHJlcXVlc3RlZCB5ZXQsIHN0YXRlIGlzICVkXG4iLAotCQkJCSpzdGF0ZSk7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JV0FSTl9PTl9PTkNFKCpzdGF0ZSAmIEhUX0FEREJBX0RSVl9SRUFEWV9NU0spOwotCi0JKnN0YXRlIHw9IEhUX0FEREJBX0RSVl9SRUFEWV9NU0s7Ci0KLQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQWdncmVnYXRpb24gaXMgb24gZm9yIHRpZCAlZCBcbiIsIHRpZCk7Ci0jZW5kaWYKLQkJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYik7Ci0KLXZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTggdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQlpbnQgYWdnX3F1ZXVlOwotCi0JaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKLQkJCQl0aWQsIFNUQV9USURfTlVNKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlN0b3BwaW5nIFR4IEJBIHNlc3Npb24gZm9yICVwTSB0aWQgJWRcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKLSNlbmRpZgotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0KLQkvKiBOT1RFOiBubyBuZWVkIHRvIHVzZSBzdGEtPmxvY2sgaW4gdGhpcyBzdGF0ZSBjaGVjaywgYXMKLQkgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uIHdpbGwgbGV0IG9ubHkgb25lIHN0b3AgY2FsbCB0bwotCSAqIHBhc3MgdGhyb3VnaCBwZXIgc3RhL3RpZAotCSAqLwotCWlmICgoKnN0YXRlICYgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSykgPT0gMCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBjYWxsYmFjayB0byBBLU1QRFUgc3RvcFxuIik7Ci0jZW5kaWYKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKnN0YXRlICYgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9NU0spCi0JCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHJhLCB0aWQsCi0JCQlXTEFOX0JBQ0tfSU5JVElBVE9SLCBXTEFOX1JFQVNPTl9RU1RBX05PVF9VU0UpOwotCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKLQkJYWdnX3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCQlpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShsb2NhbCwgc3RhLCB0aWQsIDEpOwotCi0JCS8qIFdlIGp1c3QgcmVxdWV1ZWQgdGhlIGFsbCB0aGUgZnJhbWVzIHRoYXQgd2VyZSBpbiB0aGUKLQkJICogcmVtb3ZlZCBxdWV1ZSwgYW5kIHNpbmNlIHdlIG1pZ2h0IG1pc3MgYSBzb2Z0aXJxIHdlIGRvCi0JCSAqIG5ldGlmX3NjaGVkdWxlX3F1ZXVlLiAgaWVlZTgwMjExX3dha2VfcXVldWUgaXMgbm90IHVzZWQKLQkJICogaGVyZSBhcyB0aGlzIHF1ZXVlIGlzIG5vdCBuZWNlc3NhcmlseSBzdG9wcGVkCi0JCSAqLwotCQluZXRpZl9zY2hlZHVsZV9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LAotCQkJCQkJCSBhZ2dfcXVldWUpKTsKLQl9Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOwotCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCXJjdV9yZWFkX3VubG9jaygpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYik7Ci0KLXZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgY29uc3QgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICpyYV90aWQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7Ci0KLQlpZiAodW5saWtlbHkoIXNrYikpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgotCQkJICAgICAgICJkcm9wcGluZyBzdGFydCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwotCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKLQlyYV90aWQtPnRpZCA9IHRpZDsKLQotCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfQUREQkFfTVNHOwotCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUpOwotCi12b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKLQotCWlmICh1bmxpa2VseSghc2tiKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKLQltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JcmFfdGlkLT50aWQgPSB0aWQ7Ci0KLQlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0RFTEJBX01TRzsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUpOwotCi0vKgotICogQWZ0ZXIgYWNjZXB0aW5nIHRoZSBBZGRCQSBSZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyLAotICogcmVzZXR0aW5nIGl0IGFmdGVyIGVhY2ggZnJhbWUgdGhhdCBhcnJpdmVzIGZyb20gdGhlIG9yaWdpbmF0b3IuCi0gKiBpZiB0aGlzIHRpbWVyIGV4cGlyZXMgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24gd2lsbCBiZSBleGVjdXRlZC4KLSAqLwotc3RhdGljIHZvaWQgc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCi0JICogb25seSBvbmUgYXJndW1lbnQsIGFuZCB2YXJpb3VzIHN0YV9pbmZvIGFyZSBuZWVkZWQgaGVyZSwgc28gaW5pdAotCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCi0JICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLwotCXU4ICpwdGlkID0gKHU4ICopZGF0YTsKLQl1OCAqdGltZXJfdG9faWQgPSBwdGlkIC0gKnB0aWQ7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodGltZXJfdG9faWQsIHN0cnVjdCBzdGFfaW5mbywKLQkJCQkJIHRpbWVyX3RvX3RpZFswXSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAicnggc2Vzc2lvbiB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgKHUxNikqcHRpZCk7Ci0jZW5kaWYKLQlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLAotCQkJCQkgKHUxNikqcHRpZCwgV0xBTl9CQUNLX1RJTUVSLAotCQkJCQkgV0xBTl9SRUFTT05fUVNUQV9USU1FT1VUKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICAgICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0Jc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDsKLQl1MTYgY2FwYWIsIHRpZCwgdGltZW91dCwgYmFfcG9saWN5LCBidWZfc2l6ZSwgc3RhcnRfc2VxX251bSwgc3RhdHVzOwotCXU4IGRpYWxvZ190b2tlbjsKLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Ci0KLQkvKiBleHRyYWN0IHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIGFkZGJhIHJlcXVlc3QgZnJhbWUgKi8KLQlkaWFsb2dfdG9rZW4gPSBtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW47Ci0JdGltZW91dCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQpOwotCXN0YXJ0X3NlcV9udW0gPQotCQlsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtKSA+PiA0OwotCi0JY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYik7Ci0JYmFfcG9saWN5ID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1BPTElDWV9NQVNLKSA+PiAxOwotCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKLQlidWZfc2l6ZSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLKSA+PiA2OwotCi0Jc3RhdHVzID0gV0xBTl9TVEFUVVNfUkVRVUVTVF9ERUNMSU5FRDsKLQotCS8qIHNhbml0eSBjaGVjayBmb3IgaW5jb21pbmcgcGFyYW1ldGVyczoKLQkgKiBjaGVjayBpZiBjb25maWd1cmF0aW9uIGNhbiBzdXBwb3J0IHRoZSBCQSBwb2xpY3kKLQkgKiBhbmQgaWYgYnVmZmVyIHNpemUgZG9lcyBub3QgZXhjZWVkcyBtYXggdmFsdWUgKi8KLQkvKiBYWFg6IGNoZWNrIG93biBodCBkZWxheWVkIEJBIGNhcGFiaWxpdHk/PyAqLwotCWlmICgoKGJhX3BvbGljeSAhPSAxKQotCQkmJiAoIShzdGEtPnN0YS5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQSkpKQotCQl8fCAoYnVmX3NpemUgPiBJRUVFODAyMTFfTUFYX0FNUERVX0JVRikpIHsKLQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfSU5WQUxJRF9RT1NfUEFSQU07Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiQWRkQkEgUmVxIHdpdGggYmFkIHBhcmFtcyBmcm9tICIKLQkJCQkiJXBNIG9uIHRpZCAldS4gcG9saWN5ICVkLCBidWZmZXIgc2l6ZSAlZFxuIiwKLQkJCQltZ210LT5zYSwgdGlkLCBiYV9wb2xpY3ksCi0JCQkJYnVmX3NpemUpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlnb3RvIGVuZF9ub19sb2NrOwotCX0KLQkvKiBkZXRlcm1pbmUgZGVmYXVsdCBidWZmZXIgc2l6ZSAqLwotCWlmIChidWZfc2l6ZSA9PSAwKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCi0JCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tjb25mLT5jaGFubmVsLT5iYW5kXTsKLQkJYnVmX3NpemUgPSBJRUVFODAyMTFfTUlOX0FNUERVX0JVRjsKLQkJYnVmX3NpemUgPSBidWZfc2l6ZSA8PCBzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKLQl9Ci0KLQotCS8qIGV4YW1pbmUgc3RhdGUgbWFjaGluZSAqLwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJ1bmV4cGVjdGVkIEFkZEJBIFJlcSBmcm9tICIKLQkJCQkiJXBNIG9uIHRpZCAldVxuIiwKLQkJCQltZ210LT5zYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJZ290byBlbmQ7Ci0JfQotCi0JLyogcHJlcGFyZSBBLU1QRFUgTUxNRSBmb3IgUnggYWdncmVnYXRpb24gKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV9yeCksIEdGUF9BVE9NSUMpOwotCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlIHJ4IG1sbWUgdG8gdGlkICVkIGZhaWxlZFxuIiwKLQkJCQkJdGlkKTsKLSNlbmRpZgotCQlnb3RvIGVuZDsKLQl9Ci0JLyogcnggdGltZXIgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZnVuY3Rpb24gPQotCQkJCXN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5kYXRhID0KLQkJCQkodW5zaWduZWQgbG9uZykmc3RhLT50aW1lcl90b190aWRbdGlkXTsKLQlpbml0X3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIpOwotCi0JdGlkX2FnZ19yeCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXTsKLQotCS8qIHByZXBhcmUgcmVvcmRlcmluZyBidWZmZXIgKi8KLQl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZiA9Ci0JCWttYWxsb2MoYnVmX3NpemUgKiBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOwotCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCi0JCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZgotCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOwotCQlnb3RvIGVuZDsKLQl9Ci0JbWVtc2V0KHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmLCAwLAotCQlidWZfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSk7Ci0KLQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKLQkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCWlmIChyZXQpIHsKLQkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOwotCQlrZnJlZSh0aWRfYWdnX3J4KTsKLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07Ci0JdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKLQl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOwotCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OwotCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7Ci0Jc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKLWVuZDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQotZW5kX25vX2xvY2s6Ci0JaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCi0JCQkJICBkaWFsb2dfdG9rZW4sIHN0YXR1cywgMSwgYnVmX3NpemUsIHRpbWVvdXQpOwotfQotCi12b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXUxNiBjYXBhYjsKLQl1MTYgdGlkLCBzdGFydF9zZXFfbnVtOwotCXU4ICpzdGF0ZTsKLQotCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiKTsKLQl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuICE9Ci0JCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAid3JvbmcgYWRkQkEgcmVzcG9uc2UgdG9rZW4sIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJcmV0dXJuOwotCX0KLQotCWRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzd2l0Y2hlZCBvZmYgYWRkQkEgdGltZXIgZm9yIHRpZCAlZCBcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JaWYgKGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5zdGF0dXMpCi0JCQk9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7Ci0JCSpzdGF0ZSB8PSBIVF9BRERCQV9SRUNFSVZFRF9NU0s7Ci0JCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOwotCi0JCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMICYmCi0JCSAgICBsb2NhbC0+aHcuYW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0KLQkJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikgewotCQkJKHZvaWQpbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LAotCQkJCQkgICAgICAgSUVFRTgwMjExX0FNUERVX1RYX1JFU1VNRSwKLQkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7Ci0JCX0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlc3VtaW5nIFRYIGFnZ3JlZ2F0aW9uIGZvciB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCX0gZWxzZSB7Ci0JCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0rKzsKLQkJLyogdGhpcyB3aWxsIGFsbG93IHRoZSBzdGF0ZSBjaGVjayBpbiBzdG9wX0JBX3Nlc3Npb24gKi8KLQkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihodywgc3RhLT5zdGEuYWRkciwgdGlkLAotCQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwotCX0KKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogfQogCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwMWUxZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTAsMCArMSw5MDggQEAKKy8qCisgKiBJQlNTIG1vZGUgaW1wbGVtZW50YXRpb24KKyAqIENvcHlyaWdodCAyMDAzLTIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KKyAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAicmF0ZS5oIgorCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMICgyICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1cgKDE1ICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCAoNyAqIEhaKQorCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMICgzMCAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfSUJTU19NRVJHRV9ERUxBWSAweDQwMDAwMAorI2RlZmluZSBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUICg2MCAqIEhaKQorCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUyAxMjgKKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOworCisJaWYgKGxlbiA8IDI0ICsgNikKKwkJcmV0dXJuOworCisJYXV0aF9hbGcgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOworCWF1dGhfdHJhbnNhY3Rpb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbik7CisJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOworCisJLyoKKwkgKiBJRUVFIDgwMi4xMSBzdGFuZGFyZCBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGluIElCU1MKKwkgKiBuZXR3b3JrcyBhbmQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHNlZW0gdG8gdXNlIGl0LgorCSAqIEhvd2V2ZXIsIHRyeSB0byByZXBseSB0byBhdXRoZW50aWNhdGlvbiBhdHRlbXB0cyBpZiBzb21lb25lCisJICogaGFzIGFjdHVhbGx5IGltcGxlbWVudGVkIHRoaXMuCisJICovCisJaWYgKGF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOICYmIGF1dGhfdHJhbnNhY3Rpb24gPT0gMSkKKwkJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMiwgV0xBTl9BVVRIX09QRU4sIE5VTEwsIDAsCisJCQkJICAgIHNkYXRhLT51Lmlic3MuYnNzaWQsIDApOworfQorCitzdGF0aWMgaW50IF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IGludCBiZWFjb25faW50LAorCQkJCSAgICAgY29uc3QgaW50IGZyZXEsCisJCQkJICAgICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCisJCQkJICAgICBjb25zdCB1OCAqc3VwcF9yYXRlcywKKwkJCQkgICAgIGNvbnN0IHUxNiBjYXBhYmlsaXR5LCB1NjQgdHNmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IHJlcyA9IDAsIHJhdGVzLCBpLCBqOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3M7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgeworCQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCisJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCX0KKworCWlmICgoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSAmJgorCSAgIG1lbWNtcChpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pID09IDApCisJCXJldHVybiByZXM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCisJCSAgICAgICAicmVzcG9uc2VcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpKSB7CisJCS8qIFJlbW92ZSBwb3NzaWJsZSBTVEEgZW50cmllcyBmcm9tIG90aGVyIElCU1MgbmV0d29ya3MuICovCisJCXN0YV9pbmZvX2ZsdXNoX2RlbGF5ZWQoc2RhdGEpOworCX0KKworCW1lbWNweShpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IGJlYWNvbl9pbnQgPj0gMTAgPyBiZWFjb25faW50IDogMTA7CisKKwlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IGNhcGFiaWxpdHkgJgorCQlXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/IDEgOiAwOworCisJcmVzID0gaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBmcmVxKTsKKworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwkvKiBCdWlsZCBJQlNTIHByb2JlIHJlc3BvbnNlICovCisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQorCQlza2JfcHV0KHNrYiwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKKwltZW1zZXQobWdtdCwgMCwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKKwltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9CisJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQpOworCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHRzZik7CisJbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiaWxpdHkpOworCisJcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZmlic3MtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IGlmaWJzcy0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKTsKKworCXJhdGVzID0gc3VwcF9yYXRlc19sZW47CisJaWYgKHJhdGVzID4gOCkKKwkJcmF0ZXMgPSA4OworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOworCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJKnBvcysrID0gcmF0ZXM7CisJbWVtY3B5KHBvcywgc3VwcF9yYXRlcywgcmF0ZXMpOworCisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyAxKTsKKwkJKnBvcysrID0gV0xBTl9FSURfRFNfUEFSQU1TOworCQkqcG9zKysgPSAxOworCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoZnJlcSk7CisJfQorCisJcG9zID0gc2tiX3B1dChza2IsIDIgKyAyKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9JQlNTX1BBUkFNUzsKKwkqcG9zKysgPSAyOworCS8qIEZJWDogc2V0IEFUSU0gd2luZG93IGJhc2VkIG9uIHNjYW4gcmVzdWx0cyAqLworCSpwb3MrKyA9IDA7CisJKnBvcysrID0gMDsKKworCWlmIChzdXBwX3JhdGVzX2xlbiA+IDgpIHsKKwkJcmF0ZXMgPSBzdXBwX3JhdGVzX2xlbiAtIDg7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOworCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKKwkJKnBvcysrID0gcmF0ZXM7CisJCW1lbWNweShwb3MsICZzdXBwX3JhdGVzWzhdLCByYXRlcyk7CisJfQorCisJaWZpYnNzLT5wcm9iZV9yZXNwID0gc2tiOworCisJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CisKKworCXJhdGVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykgeworCQlpbnQgYml0cmF0ZSA9IChzdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1OworCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSBiaXRyYXRlKQorCQkJCXJhdGVzIHw9IEJJVChqKTsKKwl9CisKKwlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBzdXBwX3JhdGVzX2xlbiwgc3VwcF9yYXRlcyk7CisKKwlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUOworCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRDsKKwltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7CisKKwltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOworCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCit7CisJcmV0dXJuIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsCisJCQkJCSBic3MtPmNic3MuYnNzaWQsCisJCQkJCSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsLAorCQkJCQkgYnNzLT5jYnNzLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgYnNzLT5zdXBwX3JhdGVzX2xlbiwgYnNzLT5zdXBwX3JhdGVzLAorCQkJCQkgYnNzLT5jYnNzLmNhcGFiaWxpdHksCisJCQkJCSBic3MtPmNic3MudHNmKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgc2l6ZV90IGxlbiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkJICBib29sIGJlYWNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgZnJlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwl1NjQgYmVhY29uX3RpbWVzdGFtcCwgcnhfdGltZXN0YW1wOworCXUzMiBzdXBwX3JhdGVzID0gMDsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7CisKKwlpZiAoZWxlbXMtPmRzX3BhcmFtcyAmJiBlbGVtcy0+ZHNfcGFyYW1zX2xlbiA9PSAxKQorCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLT5kc19wYXJhbXNbMF0pOworCWVsc2UKKwkJZnJlcSA9IHJ4X3N0YXR1cy0+ZnJlcTsKKworCWNoYW5uZWwgPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwobG9jYWwtPmh3LndpcGh5LCBmcmVxKTsKKworCWlmICghY2hhbm5lbCB8fCBjaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm47CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmIGVsZW1zLT5zdXBwX3JhdGVzICYmCisJICAgIG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKKwkJc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCBlbGVtcywgYmFuZCk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpOworCQlpZiAoc3RhKSB7CisJCQl1MzIgcHJldl9yYXRlczsKKworCQkJcHJldl9yYXRlcyA9IHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF07CisJCQkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KKwkJCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKKwkJCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCQlpZiAoc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSAhPSBwcmV2X3JhdGVzKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdXBkYXRlZCBzdXBwX3JhdGVzIHNldCAiCisJCQkJICAgICJmb3IgJXBNIGJhc2VkIG9uIGJlYWNvbiBpbmZvICgweCVsbHggfCAiCisJCQkJICAgICIweCVsbHggLT4gMHglbGx4KVxuIiwKKwkJCQkgICAgc2RhdGEtPmRldi0+bmFtZSwKKwkJCQkgICAgc3RhLT5zdGEuYWRkciwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJldl9yYXRlcywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3VwcF9yYXRlcywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSk7CisjZW5kaWYKKwkJfSBlbHNlCisJCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUobG9jYWwsIHJ4X3N0YXR1cywgbWdtdCwgbGVuLCBlbGVtcywKKwkJCQkJY2hhbm5lbCwgYmVhY29uKTsKKwlpZiAoIWJzcykKKwkJcmV0dXJuOworCisJLyogd2FzIGp1c3QgdXBkYXRlZCBpbiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlICovCisJYmVhY29uX3RpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7CisKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KKworCS8qIG1lcmdlIG9ubHkgb24gYmVhY29ucyAoPz8/KSAqLworCWlmICghYmVhY29uKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiB3ZSB1c2UgYSBmaXhlZCBCU1NJRCAqLworCWlmIChzZGF0YS0+dS5pYnNzLmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBub3QgYW4gSUJTUyAqLworCWlmICghKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBkaWZmZXJlbnQgY2hhbm5lbCAqLworCWlmIChic3MtPmNic3MuY2hhbm5lbCAhPSBsb2NhbC0+b3Blcl9jaGFubmVsKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBkaWZmZXJlbnQgU1NJRCAqLworCWlmIChlbGVtcy0+c3NpZF9sZW4gIT0gc2RhdGEtPnUuaWJzcy5zc2lkX2xlbiB8fAorCSAgICBtZW1jbXAoZWxlbXMtPnNzaWQsIHNkYXRhLT51Lmlic3Muc3NpZCwKKwkJCQlzZGF0YS0+dS5pYnNzLnNzaWRfbGVuKSkKKwkJZ290byBwdXRfYnNzOworCisJLyogc2FtZSBCU1NJRCAqLworCWlmIChtZW1jbXAoYnNzLT5jYnNzLmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJZ290byBwdXRfYnNzOworCisJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkgeworCQkvKgorCQkgKiBGb3IgY29ycmVjdCBJQlNTIG1lcmdpbmcgd2UgbmVlZCBtYWN0aW1lOyBzaW5jZSBtYWN0aW1lIGlzCisJCSAqIGRlZmluZWQgYXMgdGhlIHRpbWUgdGhlIGZpcnN0IGRhdGEgc3ltYm9sIG9mIHRoZSBmcmFtZSBoaXRzCisJCSAqIHRoZSBQSFksIGFuZCB0aGUgdGltZXN0YW1wIG9mIHRoZSBiZWFjb24gaXMgZGVmaW5lZCBhcyAidGhlCisJCSAqIHRpbWUgdGhhdCB0aGUgZGF0YSBzeW1ib2wgY29udGFpbmluZyB0aGUgZmlyc3QgYml0IG9mIHRoZQorCQkgKiB0aW1lc3RhbXAgaXMgdHJhbnNtaXR0ZWQgdG8gdGhlIFBIWSBwbHVzIHRoZSB0cmFuc21pdHRpbmcKKwkJICogU1RBJ3MgZGVsYXlzIHRocm91Z2ggaXRzIGxvY2FsIFBIWSBmcm9tIHRoZSBNQUMtUEhZCisJCSAqIGludGVyZmFjZSB0byBpdHMgaW50ZXJmYWNlIHdpdGggdGhlIFdNIiAoODAyLjExIDExLjEuMikKKwkJICogLSBlcXVhbHMgdGhlIHRpbWUgdGhpcyBiaXQgYXJyaXZlcyBhdCB0aGUgcmVjZWl2ZXIgLSB3ZSBoYXZlCisJCSAqIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBvZmZzZXQgYmV0d2VlbiB0aGUgdHdvLgorCQkgKgorCQkgKiBFLmcuIGF0IDEgTUJpdCB0aGF0IG1lYW5zIG1hY3RpbWUgaXMgMTkyIHVzZWMgZWFybGllcgorCQkgKiAoPTI0IGJ5dGVzICogOCB1c2Vjcy9ieXRlKSB0aGFuIHRoZSBiZWFjb24gdGltZXN0YW1wLgorCQkgKi8KKwkJaW50IHJhdGU7CisKKwkJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpCisJCQlyYXRlID0gNjU7IC8qIFRPRE86IEhUIHJhdGVzICovCisJCWVsc2UKKwkJCXJhdGUgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdLT4KKwkJCQliaXRyYXRlc1tyeF9zdGF0dXMtPnJhdGVfaWR4XS5iaXRyYXRlOworCisJCXJ4X3RpbWVzdGFtcCA9IHJ4X3N0YXR1cy0+bWFjdGltZSArICgyNCAqIDggKiAxMCAvIHJhdGUpOworCX0gZWxzZSBpZiAobG9jYWwgJiYgbG9jYWwtPm9wcyAmJiBsb2NhbC0+b3BzLT5nZXRfdHNmKQorCQkvKiBzZWNvbmQgYmVzdCBvcHRpb246IGdldCBjdXJyZW50IFRTRiAqLworCQlyeF90aW1lc3RhbXAgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJZWxzZQorCQkvKiBjYW4ndCBtZXJnZSB3aXRob3V0IGtub3dpbmcgdGhlIFRTRiAqLworCQlyeF90aW1lc3RhbXAgPSAtMUxMVTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJYIGJlYWNvbiBTQT0lcE0gQlNTSUQ9IgorCSAgICAgICAiJXBNIFRTRj0weCVsbHggQkNOPTB4JWxseCBkaWZmPSVsbGQgQCVsdVxuIiwKKwkgICAgICAgbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJ4X3RpbWVzdGFtcCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZWFjb25fdGltZXN0YW1wLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShyeF90aW1lc3RhbXAgLSBiZWFjb25fdGltZXN0YW1wKSwKKwkgICAgICAgamlmZmllcyk7CisjZW5kaWYKKworCS8qIGdpdmUgc2xvdyBoYXJkd2FyZSBzb21lIHRpbWUgdG8gZG8gdGhlIFRTRiBzeW5jICovCisJaWYgKHJ4X3RpbWVzdGFtcCA8IElFRUU4MDIxMV9JQlNTX01FUkdFX0RFTEFZKQorCQlnb3RvIHB1dF9ic3M7CisKKwlpZiAoYmVhY29uX3RpbWVzdGFtcCA+IHJ4X3RpbWVzdGFtcCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIFRTRiBoaWdoZXIgdGhhbiAiCisJCSAgICAgICAibG9jYWwgVFNGIC0gSUJTUyBtZXJnZSB3aXRoIEJTU0lEICVwTVxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPmJzc2lkKTsKKyNlbmRpZgorCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKKwkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKKwl9CisKKyBwdXRfYnNzOgorCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworfQorCisvKgorICogQWRkIGEgbmV3IElCU1Mgc3RhdGlvbiwgd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuLAorICogaW4gSUJTUyBtb2RlLCByZWNlaXZpbmcgYSBmcmFtZSBmcm9tIGEgeWV0LXVua25vd24gc3RhdGlvbiwgaGVuY2UKKyAqIG11c3QgYmUgY2FsbGFibGUgaW4gYXRvbWljIGNvbnRleHQuCisgKi8KK3N0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJdTggKmJzc2lkLHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7CisKKwkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKKwkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLworCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyByb29tIGZvciBhIG5ldyBJQlNTIFNUQSAiCisJCQkgICAgICAgImVudHJ5ICVwTVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWRkcik7CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCkpCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkZGluZyBuZXcgSUJTUyBzdGF0aW9uICVwTSAoZGV2PSVzKVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCisJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9BVE9NSUMpOworCWlmICghc3RhKQorCQlyZXR1cm4gTlVMTDsKKworCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKKworCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLworCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKKwkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOworCisJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOworCisJaWYgKHN0YV9pbmZvX2luc2VydChzdGEpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzdGE7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgYWN0aXZlID0gMDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQlpZiAoc3RhLT5zZGF0YSA9PSBzZGF0YSAmJgorCQkgICAgdGltZV9hZnRlcihzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCwKKwkJCSAgICAgICBqaWZmaWVzKSkgeworCQkJYWN0aXZlKys7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIGFjdGl2ZTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKKwlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCisJCXJldHVybjsKKworCWlmICgoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkgJiYKKwkgICAgKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUwpKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKKwkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisKKwkvKiBYWFggbWF5YmUgcmFjeT8gKi8KKwlpZiAoc2RhdGEtPmxvY2FsLT5zY2FuX3JlcSkKKwkJcmV0dXJuOworCisJbWVtY3B5KHNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJICAgICAgIGlmaWJzcy0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsICZzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXU4ICpwb3M7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKKwl1MTYgY2FwYWJpbGl0eTsKKwlpbnQgaTsKKworCWlmIChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKSB7CisJCW1lbWNweShic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCS8qIEdlbmVyYXRlIHJhbmRvbSwgbm90IGJyb2FkY2FzdCwgbG9jYWxseSBhZG1pbmlzdGVyZWQgQlNTSUQuIE1peCBpbgorCQkgKiBvd24gTUFDIGFkZHJlc3MgdG8gbWFrZSBzdXJlIHRoYXQgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIHByb3BlcgorCQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLworCQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7CisJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07CisJCWJzc2lkWzBdICY9IH4weDAxOworCQlic3NpZFswXSB8PSAweDAyOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9PSAwKQorCQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gMTAwOworCisJY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOworCisJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKKwkJY2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwllbHNlCisJCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKKworCXBvcyA9IHN1cHBfcmF0ZXM7CisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKKwkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCX0KKworCXJldHVybiBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLAorCQkJCQkgYnNzaWQsIGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQsCisJCQkJCSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQkJIHNiYW5kLT5uX2JpdHJhdGVzLCBzdXBwX3JhdGVzLAorCQkJCQkgY2FwYWJpbGl0eSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CisJaW50IGFjdGl2ZV9pYnNzOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKGFjdGl2ZV9pYnNzKQorCQlyZXR1cm4gMDsKKworCWlmIChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKQorCQlic3NpZCA9IGlmaWJzcy0+YnNzaWQ7CisJYnNzID0gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgTlVMTCwgYnNzaWQsCisJCQkJICAgICAgIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbiwKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MsCisJCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJaWYgKGJzcykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIHN0YV9maW5kX2lic3M6IHNlbGVjdGVkICVwTSBjdXJyZW50ICIKKwkJICAgICAgICIlcE1cbiIsIGJzcy0+Y2Jzcy5ic3NpZCwgaWZpYnNzLT5ic3NpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmIChic3MgJiYKKwkgICAgKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSB8fAorCSAgICAgbWVtY21wKGlmaWJzcy0+YnNzaWQsIGJzcy0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pKSkgeworCQlpbnQgcmV0OworCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VsZWN0ZWQgSUJTUyBCU1NJRCAlcE0iCisJCSAgICAgICAiIGJhc2VkIG9uIGNvbmZpZ3VyZWQgU1NJRFxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzcy0+Y2Jzcy5ic3NpZCk7CisKKwkJcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAoYnNzKQorCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgIGRpZCBub3QgdHJ5IHRvIGpvaW4gaWJzc1xuIik7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCS8qIFNlbGVjdGVkIElCU1Mgbm90IGZvdW5kIGluIGN1cnJlbnQgc2NhbiByZXN1bHRzIC0gdHJ5IHRvIHNjYW4gKi8KKwlpZiAoaWZpYnNzLT5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCAmJgorCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpIHsKKwkJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsKKwkJCQkJICBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7CisJfSBlbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkICsKKwkJCQkJSUVFRTgwMjExX1NDQU5fSU5URVJWQUwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJpZ2dlciBuZXcgc2NhbiB0byBmaW5kIGFuIElCU1MgdG8gIgorCQkgICAgICAgImpvaW5cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCisJCS8qIFhYWCBtYXliZSByYWN5PyAqLworCQlpZiAobG9jYWwtPnNjYW5fcmVxKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQltZW1jcHkobG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLAorCQkgICAgICAgaWZpYnNzLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisJCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCAmbG9jYWwtPmludF9zY2FuX3JlcSk7CisJfSBlbHNlIGlmIChpZmlic3MtPnN0YXRlICE9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEKSB7CisJCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmaWJzcy0+aWJzc19qb2luX3JlcSArCisJCQkgICAgICAgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUKSkgeworCQkJaWYgKCEobG9jYWwtPm9wZXJfY2hhbm5lbC0+ZmxhZ3MgJgorCQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUykpCisJCQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc2RhdGEpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgorCQkJICAgICAgICIgJWQgTUh6XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAorCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCisJCQkgKiBzY2FubmluZy4gKi8KKwkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKKwkJfQorCisJCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKKwkJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgdHhfbGFzdF9iZWFjb247CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisJdTggKnBvcywgKmVuZDsKKworCWlmIChpZmlic3MtPnN0YXRlICE9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEIHx8CisJICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZpYnNzLT5wcm9iZV9yZXNwKQorCQlyZXR1cm47CisKKwlpZiAobG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24pCisJCXR4X2xhc3RfYmVhY29uID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24obG9jYWxfdG9faHcobG9jYWwpKTsKKwllbHNlCisJCXR4X2xhc3RfYmVhY29uID0gMTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBQcm9iZVJlcSBTQT0lcE0gREE9JXBNIEJTU0lEPSVwTSIKKwkgICAgICAgIiAodHhfbGFzdF9iZWFjb249JWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCisJICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmICghdHhfbGFzdF9iZWFjb24pCisJCXJldHVybjsKKworCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwICYmCisJICAgIG1lbWNtcChtZ210LT5ic3NpZCwgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIsIEVUSF9BTEVOKSAhPSAwKQorCQlyZXR1cm47CisKKwllbmQgPSAoKHU4ICopIG1nbXQpICsgbGVuOworCXBvcyA9IG1nbXQtPnUucHJvYmVfcmVxLnZhcmlhYmxlOworCWlmIChwb3NbMF0gIT0gV0xBTl9FSURfU1NJRCB8fAorCSAgICBwb3MgKyAyICsgcG9zWzFdID4gZW5kKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgorCQkgICAgICAgImZyb20gJXBNXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJaWYgKHBvc1sxXSAhPSAwICYmCisJICAgIChwb3NbMV0gIT0gaWZpYnNzLT5zc2lkX2xlbiB8fAorCSAgICAgbWVtY21wKHBvcyArIDIsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbikgIT0gMCkpIHsKKwkJLyogSWdub3JlIFByb2JlUmVxIGZvciBmb3JlaWduIFNTSUQgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIFJlcGx5IHdpdGggUHJvYmVSZXNwICovCisJc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXBNXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXNwLT5kYSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQkgc2l6ZV90IGxlbiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CisKKwlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCisKKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKQorCQlyZXR1cm47CisKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwKKwkJCQkmZWxlbXMpOworCisJaWVlZTgwMjExX3J4X2Jzc19pbmZvKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4sCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXNpemVfdCBiYXNlbGVuOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZlbGVtcyk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBmYzsKKworCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aF9pYnNzKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CisJCWJyZWFrOworCX0KKworCWtmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lmlic3Mud29yayk7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGxvY2FsLT5zd19zY2FubmluZyB8fCBsb2NhbC0+aHdfc2Nhbm5pbmcpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJCXJldHVybjsKKwlpZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmaWJzcy0+c2tiX3F1ZXVlKSkpCisJCWllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCkpCisJCXJldHVybjsKKworCXN3aXRjaCAoaWZpYnNzLT5zdGF0ZSkgeworCWNhc2UgSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g6CisJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRDoKKwkJaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHNkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlzZXRfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmaWJzcy0+d29yayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCUlOSVRfV09SSygmaWZpYnNzLT53b3JrLCBpZWVlODAyMTFfaWJzc193b3JrKTsKKwlzZXR1cF90aW1lcigmaWZpYnNzLT50aW1lciwgaWVlZTgwMjExX2lic3NfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmaWJzcy0+c2tiX3F1ZXVlKTsKKworCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwgfAorCQkJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX2NvbW1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQ7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbikKKwkJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19TU0lEX1NFVDsKKwllbHNlCisJCWlmaWJzcy0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX1NTSURfU0VUOworCisJaWZpYnNzLT5pYnNzX2pvaW5fcmVxID0gamlmZmllczsKKwlpZmlic3MtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CisJc2V0X2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KTsKKworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX2lic3Nfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZpYnNzLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKKwkJbWVtc2V0KGlmaWJzcy0+c3NpZCwgMCwgc2l6ZW9mKGlmaWJzcy0+c3NpZCkpOworCQltZW1jcHkoaWZpYnNzLT5zc2lkLCBzc2lkLCBsZW4pOworCQlpZmlic3MtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfaWJzc19jb21taXQoc2RhdGEpOworfQorCitpbnQgaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwltZW1jcHkoc3NpZCwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX2lic3Nfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkgeworCQltZW1jcHkoaWZpYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQ7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGlmaWJzcy0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfQlNTSURfU0VUOworCX0KKworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCWlmIChpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZyBuZXcgQlNTSUQgdG8gIgorCQkJICAgICAgICJ0aGUgbG93LWxldmVsIGRyaXZlclxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX2lic3NfY29tbWl0KHNkYXRhKTsKK30KKworLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi8KK3ZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3M7CisKKwlpZiAoc2RhdGEgJiYgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCQlpZiAoKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSkgfHwKKwkJICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkKKwkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhKTsKKwl9Cit9CisKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgZmM7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCW1lbWNweShza2ItPmNiLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSwgc2tiKTsKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKKwl9CisKKwlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBmM2VlYzk4OS4uZTZlZDc4YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTQzLDcgKzQzLDcgQEAKIAogLyogUmVxdWlyZWQgZW5jcnlwdGlvbiBoZWFkIGFuZCB0YWlscm9vbSAqLwogI2RlZmluZSBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTSA4Ci0jZGVmaW5lIElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NIDEyCisjZGVmaW5lIElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NIDE4CiAKIC8qIElFRUUgODAyLjExIChDaC4gOS41IERlZnJhZ21lbnRhdGlvbikgcmVxdWlyZXMgc3VwcG9ydCBmb3IgY29uY3VycmVudAogICogcmVjZXB0aW9uIG9mIGF0IGxlYXN0IHRocmVlIGZyYWdtZW50ZWQgZnJhbWVzLiBUaGlzIGxpbWl0IGNhbiBiZSBpbmNyZWFzZWQKQEAgLTU3LDYgKzU3LDggQEAKICAqLwogI2RlZmluZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgxMCAqIEhaKQogCisjZGVmaW5lIFRVX1RPX0VYUF9USU1FKHgpCShqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygoeCkgKiAxMDI0KSkKKwogc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9lbnRyeSB7CiAJdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7CiAJdW5zaWduZWQgaW50IHNlcTsKQEAgLTcwLDQzICs3MiwzNiBAQAogCiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmhuZXh0OworCS8qIFllcywgdGhpcyBpcyBhIGhhY2sgKi8KKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzIGNic3M7CisKKwkvKiBkb24ndCB3YW50IHRvIGxvb2sgdXAgYWxsIHRoZSB0aW1lICovCiAJc2l6ZV90IHNzaWRfbGVuOwotCi0JYXRvbWljX3QgdXNlcnM7Ci0KLQl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwogCXU4IGR0aW1fcGVyaW9kOwotCXUxNiBjYXBhYmlsaXR5OyAvKiBob3N0IGJ5dGUgb3JkZXIgKi8KLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JaW50IGZyZXE7Ci0JaW50IHNpZ25hbCwgbm9pc2UsIHF1YWw7Ci0JdTggKmllczsgLyogYWxsIGluZm9ybWF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIGxhc3QgQmVhY29uIG9yIFByb2JlCi0JCSAgKiBSZXNwb25zZSBmcmFtZXM7IG5vdGUgQmVhY29uIGZyYW1lIGlzIG5vdCBhbGxvd2VkIHRvCi0JCSAgKiBvdmVycmlkZSB2YWx1ZXMgZnJvbSBQcm9iZSBSZXNwb25zZSAqLwotCXNpemVfdCBpZXNfbGVuOworCiAJYm9vbCB3bW1fdXNlZDsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9wcm9iZV9yZXNwOworCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAl1OCAqbWVzaF9pZDsKIAlzaXplX3QgbWVzaF9pZF9sZW47CiAJdTggKm1lc2hfY2ZnOwogI2VuZGlmCisKICNkZWZpbmUgSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTIDMyCiAJdTggc3VwcF9yYXRlc1tJRUVFODAyMTFfTUFYX1NVUFBfUkFURVNdOwogCXNpemVfdCBzdXBwX3JhdGVzX2xlbjsKLQl1NjQgdGltZXN0YW1wOwotCWludCBiZWFjb25faW50OwogCi0JdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlX3Jlc3A7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZTsKLQotCS8qIGR1cmluZyBhc3NvY2F0aW9uLCB3ZSBzYXZlIGFuIEVSUCB2YWx1ZSBmcm9tIGEgcHJvYmUgcmVzcG9uc2Ugc28KKwkvKgorCSAqIER1cmluZyBhc3NvY2F0aW9uLCB3ZSBzYXZlIGFuIEVSUCB2YWx1ZSBmcm9tIGEgcHJvYmUgcmVzcG9uc2Ugc28KIAkgKiB0aGF0IHdlIGNhbiBmZWVkIEVSUCBpbmZvIHRvIHRoZSBkcml2ZXIgd2hlbiBoYW5kbGluZyB0aGUKIAkgKiBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIHRoZXNlIGZpZWxkcyBwcm9iYWJseSB3b24ndCBiZSB1cC10by1kYXRlCi0JICogb3RoZXJ3aXNlLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhlbS4gKi8KLQlpbnQgaGFzX2VycF92YWx1ZTsKKwkgKiBvdGhlcndpc2UsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGVtLgorCSAqLworCWJvb2wgaGFzX2VycF92YWx1ZTsKIAl1OCBlcnBfdmFsdWU7CiB9OwogCkBAIC0xNTQsMTEgKzE0OSw2IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiAKLQkvKiBFeHRyYSBmcmFnbWVudHMgKGluIGFkZGl0aW9uIHRvIHRoZSBmaXJzdCBmcmFnbWVudAotCSAqIGluIHNrYikgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqKmV4dHJhX2ZyYWc7Ci0JaW50IG51bV9leHRyYV9mcmFnOwotCiAJdTE2IGV0aGVydHlwZTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwpAQCAtMTk0LDEyICsxODQsNiBAQAogCXUxNiB0a2lwX2l2MTY7CiB9OwogCi1zdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHNrX2J1ZmYgKipleHRyYV9mcmFnOwotCWludCBudW1fZXh0cmFfZnJhZzsKLX07Ci0KIHN0cnVjdCBiZWFjb25fZGF0YSB7CiAJdTggKmhlYWQsICp0YWlsOwogCWludCBoZWFkX2xlbiwgdGFpbF9sZW47CkBAIC0yNDQsNyArMjI4LDcgQEAKIAl1OCBmbGFnczsKIH07CiAKLS8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9zdGEuZmxhZ3MgKi8KKy8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQJCUJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVAkJQklUKDEpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQJQklUKDIpCkBAIC0yNTIsNDMgKzIzNiw0OSBAQAogI2RlZmluZSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQJQklUKDQpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTAlCSVQoNSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUwlCSVQoNikKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMCUJJVCg3KQorLyogaG9sZSBhdCA3LCBwbGVhc2UgcmUtdXNlICovCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQJQklUKDgpCisvKiBob2xlIGF0IDksIHBsZWFzZSByZS11c2UgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMCUJJVCgxMCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTAlCSVQoMTEpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTAlCSVQoMTIpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VECUJJVCgxMykKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VECUJJVCgxNCkKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQJQklUKDE1KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVECUJJVCgxNikKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9FWFRfU01FCQlCSVQoMTcpCiAvKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX1NDQU4gMAogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUgMQogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9BVVRIIDIKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfUlVOICAzCiAKLS8qIFNUQS9JQlNTIE1MTUUgc3RhdGVzICovCi1lbnVtIGllZWU4MDIxMV9zdGFfbWxtZV9zdGF0ZSB7Ci0JSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVELAotCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVELAotCUlFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSCwKLQlJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQsCi19OwotCiAvKiBiaXRmaWVsZCBvZiBhbGxvd2VkIGF1dGggYWxncyAqLwogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiBCSVQoMCkKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkgQklUKDEpCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQIEJJVCgyKQorI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfRlQgQklUKDMpCiAKLXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhIHsKK3N0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgY2hzd2l0Y2hfdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGNoc3dpdGNoX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl9sb3NzX3dvcms7CisKIAl1OCBic3NpZFtFVEhfQUxFTl0sIHByZXZfYnNzaWRbRVRIX0FMRU5dOworCiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQllbnVtIGllZWU4MDIxMV9zdGFfbWxtZV9zdGF0ZSBzdGF0ZTsKIAlzaXplX3Qgc3NpZF9sZW47Ci0JdTggc2Nhbl9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzY2FuX3NzaWRfbGVuOworCisJZW51bSB7CisJCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCisJfSBzdGF0ZTsKKwogCXUxNiBhaWQ7CiAJdTE2IGFwX2NhcGFiLCBjYXBhYjsKIAl1OCAqZXh0cmFfaWU7IC8qIHRvIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgQXNzb2NSZXEgKi8KQEAgLTMwOCw2ICsyOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKIAogCXVuc2lnbmVkIGxvbmcgbGFzdF9wcm9iZTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYmVhY29uOwogCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCkBAIC0zMTUsMTEgKzMwNiw1MyBAQAogCWludCBhdXRoX2FsZzsgLyogY3VycmVudGx5IHVzZWQgSUVFRSA4MDIuMTEgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtICovCiAJaW50IGF1dGhfdHJhbnNhY3Rpb247CiAKLQl1bnNpZ25lZCBsb25nIGlic3Nfam9pbl9yZXE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnByb2JlX3Jlc3A7IC8qIFByb2JlUmVzcCB0ZW1wbGF0ZSBmb3IgSUJTUyAqLwotCXUzMiBzdXBwX3JhdGVzX2JpdHNbSUVFRTgwMjExX05VTV9CQU5EU107CisJZW51bSB7CisJCUlFRUU4MDIxMV9NRlBfRElTQUJMRUQsCisJCUlFRUU4MDIxMV9NRlBfT1BUSU9OQUwsCisJCUlFRUU4MDIxMV9NRlBfUkVRVUlSRUQKKwl9IG1mcDsgLyogbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uICovCiAKIAlpbnQgd21tX2xhc3RfcGFyYW1fc2V0OworCisJLyogRXh0cmEgSUUgZGF0YSBmb3IgbWFuYWdlbWVudCBmcmFtZXMgKi8KKwl1OCAqc21lX2F1dGhfaWU7CisJc2l6ZV90IHNtZV9hdXRoX2llX2xlbjsKK307CisKK2VudW0gaWVlZTgwMjExX2lic3NfZmxhZ3MgeworCUlFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUwJCT0gQklUKDApLAorCUlFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMCQk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQJCT0gQklUKDIpLAorCUlFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUCQk9IEJJVCgzKSwKKwlJRUVFODAyMTFfSUJTU19TU0lEX1NFVAkJCT0gQklUKDQpLAorfTsKKworZW51bSBpZWVlODAyMTFfaWJzc19yZXF1ZXN0IHsKKwlJRUVFODAyMTFfSUJTU19SRVFfUlVOCT0gMCwKK307CisKK3N0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyB7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKKworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJdTggc3NpZF9sZW47CisKKwl1MzIgZmxhZ3M7CisKKwl1OCBic3NpZFtFVEhfQUxFTl07CisKKwl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CisKKwl1bnNpZ25lZCBsb25nIGlic3Nfam9pbl9yZXE7CisJc3RydWN0IHNrX2J1ZmYgKnByb2JlX3Jlc3A7IC8qIFByb2JlUmVzcCB0ZW1wbGF0ZSBmb3IgSUJTUyAqLworCisJZW51bSB7CisJCUlFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNILAorCQlJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCwKKwl9IHN0YXRlOwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHsKQEAgLTM3MCw3ICs0MDMsNiBAQAogICoKICAqIEBJRUVFODAyMTFfU0RBVEFfQUxMTVVMVEk6IGludGVyZmFjZSB3YW50cyBhbGwgbXVsdGljYXN0IHBhY2tldHMKICAqIEBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQzogaW50ZXJmYWNlIGlzIHByb21pc2MKLSAqIEBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUU6IHVzZXJzcGFjZSBNTE1FIGlzIGFjdGl2ZQogICogQElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU6IG9wZXJhdGluZyBpbiBHLW9ubHkgbW9kZQogICogQElFRUU4MDIxMV9TREFUQV9ET05UX0JSSURHRV9QQUNLRVRTOiBicmlkZ2UgcGFja2V0cyBiZXR3ZWVuCiAgKglhc3NvY2lhdGVkIHN0YXRpb25zIGFuZCBkZWxpdmVyIG11bHRpY2FzdCBmcmFtZXMgYm90aApAQCAtMzc5LDkgKzQxMSw4IEBACiBlbnVtIGllZWU4MDIxMV9zdWJfaWZfZGF0YV9mbGFncyB7CiAJSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJCQk9IEJJVCgwKSwKIAlJRUVFODAyMTFfU0RBVEFfUFJPTUlTQwkJCT0gQklUKDEpLAotCUlFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRQkJPSBCSVQoMiksCi0JSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERQkJPSBCSVQoMyksCi0JSUVFRTgwMjExX1NEQVRBX0RPTlRfQlJJREdFX1BBQ0tFVFMJPSBCSVQoNCksCisJSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERQkJPSBCSVQoMiksCisJSUVFRTgwMjExX1NEQVRBX0RPTlRfQlJJREdFX1BBQ0tFVFMJPSBCSVQoMyksCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhIHsKQEAgLTQwNCw4ICs0MzUsMTAgQEAKIAl1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbmV4dDsKIAogI2RlZmluZSBOVU1fREVGQVVMVF9LRVlTIDQKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5c1tOVU1fREVGQVVMVF9LRVlTXTsKKyNkZWZpbmUgTlVNX0RFRkFVTFRfTUdNVF9LRVlTIDIKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5c1tOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9rZXk7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmRlZmF1bHRfbWdtdF9rZXk7CiAKIAl1MTYgc2VxdWVuY2VfbnVtYmVyOwogCkBAIC00MjMsNyArNDU2LDggQEAKIAkJc3RydWN0IGllZWU4MDIxMV9pZl9hcCBhcDsKIAkJc3RydWN0IGllZWU4MDIxMV9pZl93ZHMgd2RzOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3ZsYW4gdmxhbjsKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgc3RhOworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgbWdkOworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgaWJzczsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggbWVzaDsKICNlbmRpZgpAQCAtNDc3LDYgKzUxMSw3IEBACiAJfSBkZWJ1Z2ZzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfa2V5OworCQlzdHJ1Y3QgZGVudHJ5ICpkZWZhdWx0X21nbXRfa2V5OwogCX0gY29tbW9uX2RlYnVnZnM7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSApAQCAtNTQxLDExICs1NzYsMTIgQEAKIGVudW0gcXVldWVfc3RvcF9yZWFzb24gewogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9EUklWRVIsCiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTLAorCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OLAorCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TVVNQRU5ELAorCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAogfTsKIAotLyogbWF4aW11bSBudW1iZXIgb2YgaGFyZHdhcmUgcXVldWVzIHdlIHN1cHBvcnQuICovCi0jZGVmaW5lIFFEX01BWF9RVUVVRVMgKElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTICsgSUVFRTgwMjExX01BWF9RVUVVRVMpCi0KIHN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogfTsKQEAgLTU1OCw5ICs1OTQsMTAgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CiAKLQl1bnNpZ25lZCBsb25nIHF1ZXVlX3Bvb2xbQklUU19UT19MT05HUyhRRF9NQVhfUVVFVUVTKV07CiAJdW5zaWduZWQgbG9uZyBxdWV1ZV9zdG9wX3JlYXNvbnNbSUVFRTgwMjExX01BWF9RVUVVRVNdOworCS8qIGFsc28gdXNlZCB0byBwcm90ZWN0IGFtcGR1X2FjX3F1ZXVlIGFuZCBhbWRwdV9hY19zdG9wX3JlZmNudCAqLwogCXNwaW5sb2NrX3QgcXVldWVfc3RvcF9yZWFzb25fbG9jazsKKwogCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OyAvKiB3bWFzdGVyIyAtICJtYXN0ZXIiIDgwMi4xMSBkZXZpY2UgKi8KIAlpbnQgb3Blbl9jb3VudDsKIAlpbnQgbW9uaXRvcnMsIGNvb2tlZF9tbnRyczsKQEAgLTU2OCw3ICs2MDUsNiBAQAogCWludCBmaWZfZmNzZmFpbCwgZmlmX3BsY3BmYWlsLCBmaWZfY29udHJvbCwgZmlmX290aGVyX2JzczsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzOyAvKiBGSUZfKiAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKLQl1OCB3c3RhdHNfZmxhZ3M7CiAJYm9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIApAQCAtNTk1LDExICs2MzEsMTcgQEAKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9oYXNoW1NUQV9IQVNIX1NJWkVdOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YV9jbGVhbnVwOwogCi0JdW5zaWduZWQgbG9uZyBxdWV1ZXNfcGVuZGluZ1tCSVRTX1RPX0xPTkdTKElFRUU4MDIxMV9NQVhfUVVFVUVTKV07Ci0JdW5zaWduZWQgbG9uZyBxdWV1ZXNfcGVuZGluZ19ydW5bQklUU19UT19MT05HUyhJRUVFODAyMTFfTUFYX1FVRVVFUyldOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCBwZW5kaW5nX3BhY2tldFtJRUVFODAyMTFfTUFYX1FVRVVFU107CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBwZW5kaW5nW0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcGVuZGluZ190YXNrbGV0OwogCisJLyoKKwkgKiBUaGlzIGxvY2sgaXMgdXNlZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgQS1NUERVCisJICogc2Vzc2lvbiBzdGFydC9zdG9wIHByb2Nlc3NpbmcsIHRoaXMgdGh1cyBhbHNvCisJICogc3luY2hyb25pc2VzIHRoZSAtPmFtcGR1X2FjdGlvbigpIGNhbGxiYWNrIHRvCisJICogZHJpdmVycyBhbmQgbGltaXRzIGl0IHRvIG9uZSBhdCBhIHRpbWUuCisJICovCisJc3BpbmxvY2tfdCBhbXBkdV9sb2NrOworCiAJLyogbnVtYmVyIG9mIGludGVyZmFjZXMgd2l0aCBjb3JyZXNwb25kaW5nIElGRl8gZmxhZ3MgKi8KIAlhdG9taWNfdCBpZmZfYWxsbXVsdGlzLCBpZmZfcHJvbWlzY3M7CiAKQEAgLTYxMiw3ICs2NTQsOSBAQAogCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp3ZXBfcnhfdGZtOwogCXUzMiB3ZXBfaXY7CiAKKwkvKiBzZWUgaWZhY2UuYyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaW50ZXJmYWNlczsKKwlzdHJ1Y3QgbXV0ZXggaWZsaXN0X210eDsKIAogCS8qCiAJICogS2V5IGxvY2ssIHByb3RlY3RzIHNkYXRhJ3Mga2V5X2xpc3QgYW5kIHN0YV9pbmZvJ3MKQEAgLTYyMywyMCArNjY3LDE4IEBACiAKIAkvKiBTY2FubmluZyBhbmQgQlNTIGxpc3QgKi8KIAlib29sIHN3X3NjYW5uaW5nLCBod19zY2FubmluZzsKKwlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCBzY2FuX3NzaWQ7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCBpbnRfc2Nhbl9yZXE7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpzY2FuX2NoYW5uZWw7CiAJaW50IHNjYW5fY2hhbm5lbF9pZHg7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBzY2FuX2JhbmQ7CiAKIAllbnVtIHsgU0NBTl9TRVRfQ0hBTk5FTCwgU0NBTl9TRU5EX1BST0JFIH0gc2Nhbl9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9jb21wbGV0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX3dvcms7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9wZXJfY2hhbm5lbCwgKnNjYW5fY2hhbm5lbDsKIAllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbm5lbF90eXBlOwotCXU4IHNjYW5fc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQlzaXplX3Qgc2Nhbl9zc2lkX2xlbjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19saXN0OwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3NfaGFzaFtTVEFfSEFTSF9TSVpFXTsKLQlzcGlubG9ja190IGJzc19sb2NrOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqY3NhX2NoYW5uZWw7CiAKIAkvKiBTTk1QIGNvdW50ZXJzICovCiAJLyogZG90MTFDb3VudGVyc1RhYmxlICovCkBAIC02NDksNyArNjkxLDYgQEAKIAl1MzIgZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQ7CiAJdTMyIGRvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OwogCXUzMiBkb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudDsKLQl1MzIgZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUwogCWludCB0eF9sZWRfY291bnRlciwgcnhfbGVkX2NvdW50ZXI7CkBAIC02OTYsMTEgKzczNywxNCBAQAogCXVuc2lnbmVkIGludCB3bW1fYWNtOyAvKiBiaXQgZmllbGQgb2YgQUNNIGJpdHMgKEJJVCg4MDIuMUQgdGFnKSkgKi8KIAogCWJvb2wgcG93ZXJzYXZlOwotCWludCBkeW5hbWljX3BzX3RpbWVvdXQ7CisJYm9vbCBwc3BvbGxpbmc7CiAJc3RydWN0IHdvcmtfc3RydWN0IGR5bmFtaWNfcHNfZW5hYmxlX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGR5bmFtaWNfcHNfZGlzYWJsZV93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IGR5bmFtaWNfcHNfdGltZXI7CiAKKwlpbnQgdXNlcl9wb3dlcl9sZXZlbDsgLyogaW4gZEJtICovCisJaW50IHBvd2VyX2NvbnN0cl9sZXZlbDsgLyogaW4gZEJtICovCisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogCXN0cnVjdCBsb2NhbF9kZWJ1Z2ZzZGVudHJpZXMgewogCQlzdHJ1Y3QgZGVudHJ5ICpyY2RpcjsKQEAgLTcxMiw2ICs3NTYsOCBAQAogCQlzdHJ1Y3QgZGVudHJ5ICpsb25nX3JldHJ5X2xpbWl0OwogCQlzdHJ1Y3QgZGVudHJ5ICp0b3RhbF9wc19idWZmZXJlZDsKIAkJc3RydWN0IGRlbnRyeSAqd2VwX2l2OworCQlzdHJ1Y3QgZGVudHJ5ICp0c2Y7CisJCXN0cnVjdCBkZW50cnkgKnJlc2V0OwogCQlzdHJ1Y3QgZGVudHJ5ICpzdGF0aXN0aWNzOwogCQlzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzX3N0YXRzZGVudHJpZXMgewogCQkJc3RydWN0IGRlbnRyeSAqdHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQ7CkBAIC04MDUsNiArODUxLDcgQEAKIAl1OCAqY291bnRyeV9lbGVtOwogCXU4ICpwd3JfY29uc3RyX2VsZW07CiAJdTggKnF1aWV0X2VsZW07IAkvKiBmaXJzdCBxdWl0ZSBlbGVtZW50ICovCisJdTggKnRpbWVvdXRfaW50OwogCiAJLyogbGVuZ3RoIG9mIHRoZW0sIHJlc3BlY3RpdmVseSAqLwogCXU4IHNzaWRfbGVuOwpAQCAtODMyLDYgKzg3OSw3IEBACiAJdTggcHdyX2NvbnN0cl9lbGVtX2xlbjsKIAl1OCBxdWlldF9lbGVtX2xlbjsKIAl1OCBudW1fb2ZfcXVpZXRfZWxlbTsJLyogY2FuIGJlIG1vcmUgdGhlIG9uZSAqLworCXU4IHRpbWVvdXRfaW50X2xlbjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqaHdfdG9fbG9jYWwoCkBAIC04NjAsMzQgKzkwOCw0MyBAQAogdm9pZCBpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgICB1MzIgY2hhbmdlZCk7CiB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3UzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCiAvKiB3aXJlbGVzcyBleHRlbnNpb25zICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGllZWU4MDIxMV9pd19oYW5kbGVyX2RlZjsKIAotLyogU1RBL0lCU1MgY29kZSAqLworLyogU1RBIGNvZGUgKi8KIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci12b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKTsKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbik7CiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCk7Ci12b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKTsKLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLCB1OCAqYWRkciwgdTY0IHN1cHBfcmF0ZXMpOwordm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKTsKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbik7Ci11MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXU2NCBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKLXZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAotCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7Cit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKKworLyogSUJTUyBjb2RlICovCitpbnQgaWVlZTgwMjExX2lic3NfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbik7CitpbnQgaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCk7Cit2b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK3N0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJdTggKmJzc2lkLCB1OCAqYWRkciwgdTMyIHN1cHBfcmF0ZXMpOwogCiAvKiBzY2FuL0JTUyBoYW5kbGluZyAqLwordm9pZCBpZWVlODAyMTFfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CkBAIC04OTUsMjkgKzk1MiwyOCBAQAogaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICAgICBjaGFyICppZSwgc2l6ZV90IGxlbik7CisJCQkgICAgICAgY29uc3QgY2hhciAqaWUsIHNpemVfdCBsZW4pOwogCiB2b2lkIGllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9zY2FuX2ZhaWxlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiBpbnQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2Nhbl9zZGF0YSwKLQkJCSB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJICBzaXplX3QgbGVuLAogCQkJICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgIGludCBmcmVxLCBib29sIGJlYWNvbik7Ci1zdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmJzc2lkLCBpbnQgZnJlcSwKLQkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOworCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgIGJvb2wgYmVhY29uKTsKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAogCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCwKKwkJCSAgICAgaW50IGZyZXEsIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CiAKIC8qIGludGVyZmFjZSBoYW5kbGluZyAqLwogaW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC05NDMsMTAgKzk5OSwxNSBAQAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodGksCiAJCQl1MTYgYXBfaHRfY2FwX2ZsYWdzKTsKIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pOwordm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsCiAJCQkJdTE2IHRpZCwgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Ci12b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYWRkcik7Cit2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pOwpAQCAtOTU5LDEwICsxMDIwLDM2IEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKTsKIAoraW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKKwogLyogU3BlY3RydW0gbWFuYWdlbWVudCAqLwogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgICAgc2l6ZV90IGxlbik7Cit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyk7Cit2b2lkIGllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTE2IGNhcGFiX2luZm8sIHU4ICpwd3JfY29uc3RyX2VsZW0sCisJCQkJIHU4IHB3cl9jb25zdHJfZWxlbV9sZW4pOworCisvKiBTdXNwZW5kL3Jlc3VtZSAqLworI2lmZGVmIENPTkZJR19QTQoraW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IF9faWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IF9faWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucy9jb25zdGFudHMgKi8KIGV4dGVybiB2b2lkICptYWM4MDIxMV93aXBoeV9wcml2aWQ7IC8qIGZvciB3aXBoeSBwcml2aWQgKi8KQEAgLTk4MCwxNyArMTA2Nyw0MiBAQAogdm9pZCBpZWVlODAyXzExX3BhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMpOwogaW50IGllZWU4MDIxMV9zZXRfZnJlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGZyZXEpOwotdTY0IGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCit1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CiAKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfZW5hYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfZGlzYWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGllZWU4MDIxMV9keW5hbWljX3BzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSk7Cit2b2lkIGllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKTsKK3ZvaWQgaWVlZTgwMjExX2JlYWNvbl9sb3NzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwogdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKKwkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKKwkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOworCit2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsCisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAorCQkJIGNvbnN0IHU4ICpic3NpZCwgaW50IGVuY3J5cHQpOwordm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCisJCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJICAgICAgdTggKmllLCBzaXplX3QgaWVfbGVuKTsKKwordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpOwordTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX05PSU5MSU5FCiAjZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGI5MDc0ODIuLjkxZThlMWIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0yMSw2ICsyMSwyMyBAQAogI2luY2x1ZGUgIm1lc2guaCIKICNpbmNsdWRlICJsZWQuaCIKIAorLyoqCisgKiBET0M6IEludGVyZmFjZSBsaXN0IGxvY2tpbmcKKyAqCisgKiBUaGUgaW50ZXJmYWNlIGxpc3QgaW4gZWFjaCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIGlzIHByb3RlY3RlZAorICogdGhyZWUtZm9sZDoKKyAqCisgKiAoMSkgbW9kaWZpY2F0aW9ucyBtYXkgb25seSBiZSBkb25lIHVuZGVyIHRoZSBSVE5MCisgKiAoMikgbW9kaWZpY2F0aW9ucyBhbmQgcmVhZGVycyBhcmUgcHJvdGVjdGVkIGFnYWluc3QgZWFjaCBvdGhlciBieQorICogICAgIHRoZSBpZmxpc3RfbXR4LgorICogKDMpIG1vZGlmaWNhdGlvbnMgYXJlIGRvbmUgaW4gYW4gUkNVIG1hbm5lciBzbyBhdG9taWMgcmVhZGVycworICogICAgIGNhbiB0cmF2ZXJzZSB0aGUgbGlzdCBpbiBSQ1Utc2FmZSBibG9ja3MuCisgKgorICogQXMgYSBjb25zZXF1ZW5jZSwgcmVhZHMgKHRyYXZlcnNhbHMpIG9mIHRoZSBsaXN0IGNhbiBiZSBwcm90ZWN0ZWQKKyAqIGJ5IGVpdGhlciB0aGUgUlROTCwgdGhlIGlmbGlzdF9tdHggb3IgUkNVLgorICovCisKKwogc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpbnQgbWVzaGhkcmxlbjsKQEAgLTIxOSw3ICsyMzYsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQllbHNlCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKQEAgLTI0MSw4ICsyNjEsNyBAQAogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CiAJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CiAKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCSAgICAhKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkpCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCWVsc2UKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKQEAgLTMwNCwxMSArMzIzLDEwIEBACiAJICogeWV0IGJlIGVmZmVjdGl2ZS4gVHJpZ2dlciBleGVjdXRpb24gb2YgaWVlZTgwMjExX3N0YV93b3JrCiAJICogdG8gZml4IHRoaXMuCiAJICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JfQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIApAQCAtMzQ1LDEzICszNjMsMjQgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewogCQlpZiAoc3RhLT5zZGF0YSA9PSBzZGF0YSkKLQkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHNkYXRhLAotCQkJCQkJCSAgICBzdGEtPnN0YS5hZGRyKTsKKwkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKgorCSAqIEFubm91bmNlIHRoYXQgd2UgYXJlIGxlYXZpbmcgdGhlIG5ldHdvcmssIGluIGNhc2Ugd2UgYXJlIGEKKwkgKiBzdGF0aW9uIGludGVyZmFjZSB0eXBlLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcmVtb3ZpbmcKKwkgKiBhbGwgc3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHN0YV9pbmZvX2ZsdXNoLCBvdGhlcndpc2UgU1RBCisJICogaW5mb3JtYXRpb24gd2lsbCBiZSBnb25lIGFuZCBubyBhbm5vdW5jZSBiZWluZyBkb25lLgorCSAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKKwkJCWllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc2RhdGEsCisJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCX0KKworCS8qCiAJICogUmVtb3ZlIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRlcmZhY2UuCiAJICoKIAkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtPnJlbW92ZV9pbnRlcmZhY2UoKQpAQCAtMzgzLDYgKzQxMiw4IEBACiAJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOwogCiAJZGV2X21jX3Vuc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAogCS8qIEFQcyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50ICovCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewpAQCAtNDM0LDE0ICs0NjUsOSBAQAogCQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQkvKiBBbm5vdW5jZSB0aGF0IHdlIGFyZSBsZWF2aW5nIHRoZSBuZXR3b3JrLiAqLwotCQlpZiAoc2RhdGEtPnUuc3RhLnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKLQkJCWllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc2RhdGEsCi0JCQkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJbWVtc2V0KHNkYXRhLT51LnN0YS5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUuc3RhLnRpbWVyKTsKKwkJbWVtc2V0KHNkYXRhLT51Lm1nZC5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLmNoc3dpdGNoX3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC50aW1lcik7CiAJCS8qCiAJCSAqIElmIHRoZSB0aW1lciBmaXJlZCB3aGlsZSB3ZSB3YWl0ZWQgZm9yIGl0LCBpdCB3aWxsIGhhdmUKIAkJICogcmVxdWV1ZWQgdGhlIHdvcmsuIE5vdyB0aGUgd29yayB3aWxsIGJlIHJ1bm5pbmcgYWdhaW4KQEAgLTQ0OSw3ICs0NzUsMTEgQEAKIAkJICogd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcsIHdoaWNoLCBhdCB0aGlzIHBvaW50LAogCQkgKiBpdCBubyBsb25nZXIgaXMuCiAJCSAqLwotCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5zdGEud29yayk7CisJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmNoc3dpdGNoX3dvcmspOworCisJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC5iZWFjb25fbG9zc193b3JrKTsKKwogCQkvKgogCQkgKiBXaGVuIHdlIGdldCBoZXJlLCB0aGUgaW50ZXJmYWNlIGlzIG1hcmtlZCBkb3duLgogCQkgKiBDYWxsIHN5bmNocm9uaXplX3JjdSgpIHRvIHdhaXQgZm9yIHRoZSBSWCBwYXRoCkBAIC00NTcsMTIgKzQ4NywyMiBAQAogCQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCiAJCSAqLwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5zdGEuc2tiX3F1ZXVlKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlKTsKIAotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlzZGF0YS0+dS5zdGEuZXh0cmFfaWUgPSBOVUxMOwotCQlzZGF0YS0+dS5zdGEuZXh0cmFfaWVfbGVuID0gMDsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQgfAorCQkJCQlJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOworCQlzZGF0YS0+dS5tZ2QuZXh0cmFfaWUgPSBOVUxMOworCQlzZGF0YS0+dS5tZ2QuZXh0cmFfaWVfbGVuID0gMDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJbWVtc2V0KHNkYXRhLT51Lmlic3MuYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5pYnNzLnRpbWVyKTsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lmlic3Mud29yayk7CisJCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPnUuaWJzcy5za2JfcXVldWUpOworCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKQEAgLTUwMSw3ICs1NDEsNyBAQAogCQkJICogc2NhbiBldmVudCB0byB1c2Vyc3BhY2UgLS0gdGhlIHNjYW4gaXMgaW5jb21wbGV0ZS4KIAkJCSAqLwogCQkJaWYgKGxvY2FsLT5zd19zY2FubmluZykKLQkJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odyk7CisJCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCZsb2NhbC0+aHcsIHRydWUpOwogCQl9CiAKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKQEAgLTU2OSwxOSArNjA5LDYgQEAKIAlkZXZfbWNfc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZXRoZXJfc2V0dXAoZGV2KTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpZWVlODAyMTFfY2hhbmdlX210dTsKLQlkZXYtPm9wZW4gPSBpZWVlODAyMTFfb3BlbjsKLQlkZXYtPnN0b3AgPSBpZWVlODAyMTFfc3RvcDsKLQlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKLQkvKiB3ZSB3aWxsIHZhbGlkYXRlIHRoZSBhZGRyZXNzIG91cnNlbHZlcyBpbiAtPm9wZW4gKi8KLQlkZXYtPnZhbGlkYXRlX2FkZHIgPSBOVUxMOwotfQogLyoKICAqIENhbGxlZCB3aGVuIHRoZSBuZXRkZXYgaXMgcmVtb3ZlZCBvciwgYnkgdGhlIGNvZGUgYmVsb3csIGJlZm9yZQogICogdGhlIGludGVyZmFjZSB0eXBlIGNoYW5nZXMuCkBAIC02MjEsMTIgKzY0OCwxNCBAQAogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCW1lc2hfcm1jX2ZyZWUoc2RhdGEpOwogCQlicmVhazsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVxX2llcyk7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5hc3NvY3Jlc3BfaWVzKTsKLQkJa2ZyZWVfc2tiKHNkYXRhLT51LnN0YS5wcm9iZV9yZXNwKTsKKwkJa2ZyZWVfc2tiKHNkYXRhLT51Lmlic3MucHJvYmVfcmVzcCk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmV4dHJhX2llKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVxX2llcyk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5hc3NvY3Jlc3BfaWVzKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgpAQCAtNjQyLDYgKzY3MSwzNCBAQAogCVdBUk5fT04oZmx1c2hlZCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGllZWU4MDIxMV9vcGVuLAorCS5uZG9fc3RvcAkJPSBpZWVlODAyMTFfc3RvcCwKKwkubmRvX3VuaW5pdAkJPSBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEsCisJLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHsKKwkubmRvX29wZW4JCT0gaWVlZTgwMjExX29wZW4sCisJLm5kb19zdG9wCQk9IGllZWU4MDIxMV9zdG9wLAorCS5uZG9fdW5pbml0CQk9IGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKK307CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWV0aGVyX3NldHVwKGRldik7CisJZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9kYXRhaWZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOworCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OworfQorCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGluaXRpYWxpc2UgYW4gaW50ZXJmYWNlIHRvIGEgc3BlY2lmaWMgdHlwZS4KICAqLwpAQCAtNjUzLDcgKzcxMCw3IEBACiAKIAkvKiBhbmQgc2V0IHNvbWUgdHlwZS1kZXBlbmRlbnQgdmFsdWVzICovCiAJc2RhdGEtPnZpZi50eXBlID0gdHlwZTsKLQlzZGF0YS0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdDsKKwlzZGF0YS0+ZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9kYXRhaWZfb3BzOwogCXNkYXRhLT53ZGV2LmlmdHlwZSA9IHR5cGU7CiAKIAkvKiBvbmx5IG1vbml0b3IgZGlmZmVycyAqLwpAQCAtNjY1LDE2ICs3MjIsMTggQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT51LmFwLnZsYW5zKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCQlpZWVlODAyMTFfbWVzaF9pbml0X3NkYXRhKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgogCQlzZGF0YS0+ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQkJc2RhdGEtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdDsKKwkJc2RhdGEtPmRldi0+bmV0ZGV2X29wcyA9ICZpZWVlODAyMTFfbW9uaXRvcmlmX29wczsKIAkJc2RhdGEtPnUubW50cl9mbGFncyA9IE1PTklUT1JfRkxBR19DT05UUk9MIHwKIAkJCQkgICAgICBNT05JVE9SX0ZMQUdfT1RIRVJfQlNTOwogCQlicmVhazsKQEAgLTc1NSw2ICs4MTQsNyBAQAogCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogCiAJLyogZG9uJ3QgdXNlIElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNoICovCiAJc2RhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTc4MCwxNSArODQwLDE1IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCi0JbmRldi0+dW5pbml0ID0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhOwotCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikgJiYKIAkgICAgcGFyYW1zICYmIHBhcmFtcy0+bWVzaF9pZF9sZW4pCiAJCWllZWU4MDIxMV9zZGF0YV9zZXRfbWVzaF9pZChzZGF0YSwKIAkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZF9sZW4sCiAJCQkJCSAgICBwYXJhbXMtPm1lc2hfaWQpOwogCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWxpc3RfYWRkX3RhaWxfcmN1KCZzZGF0YS0+bGlzdCwgJmxvY2FsLT5pbnRlcmZhY2VzKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCWlmIChuZXdfZGV2KQogCQkqbmV3X2RldiA9IG5kZXY7CkBAIC04MDQsNyArODY0LDEwIEBACiB7CiAJQVNTRVJUX1JUTkwoKTsKIAorCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9kZWxfcmN1KCZzZGF0YS0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOworCiAJc3luY2hyb25pemVfcmN1KCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc2RhdGEtPmRldik7CiB9CkBAIC04MjAsNyArODgzLDE2IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZGF0YSwgdG1wLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJLyoKKwkJICogd2UgY2Fubm90IGhvbGQgdGhlIGlmbGlzdF9tdHggYWNyb3NzIHVucmVnaXN0ZXJfbmV0ZGV2aWNlLAorCQkgKiBidXQgd2Ugb25seSBuZWVkIHRvIGhvbGQgaXQgZm9yIGxpc3QgbW9kaWZpY2F0aW9ucyB0byBsb2NrCisJCSAqIG91dCByZWFkZXJzIHNpbmNlIHdlJ3JlIHVuZGVyIHRoZSBSVE5MIGhlcmUgYXMgYWxsIG90aGVyCisJCSAqIHdyaXRlcnMuCisJCSAqLworCQltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJCWxpc3RfZGVsKCZzZGF0YS0+bGlzdCk7CisJCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHNkYXRhLT5kZXYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCA5OTlmN2FhLi42ODdhY2YyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzX2tleS5oIgogI2luY2x1ZGUgImFlc19jY20uaCIKKyNpbmNsdWRlICJhZXNfY21hYy5oIgogCiAKIC8qKgpAQCAtNDcsNyArNDgsNiBAQAogICovCiAKIHN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9Owotc3RhdGljIGNvbnN0IHU4IHplcm9fYWRkcltFVEhfQUxFTl07CiAKIC8qIGtleSBtdXRleDogdXNlZCB0byBzeW5jaHJvbmlzZSB0b2RvIHJ1bm5lcnMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoa2V5X211dGV4KTsKQEAgLTEwOCwyOSArMTA4LDE4IEBACiAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZrZXlfbXV0ZXgpKTsKIH0KIAotc3RhdGljIGNvbnN0IHU4ICpnZXRfbWFjX2Zvcl9rZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqZ2V0X3N0YV9mb3Jfa2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHIgPSBiY2FzdF9hZGRyOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSBhbiBBUCB3ZSB3b24ndCBldmVyIHJlY2VpdmUgZnJhbWVzIHdpdGggYSBub24tV0VQCi0JICogZ3JvdXAga2V5IHNvIHdlIHRlbGwgdGhlIGRyaXZlciB0aGF0IGJ5IHVzaW5nIHRoZSB6ZXJvIE1BQwotCSAqIGFkZHJlc3MgdG8gaW5kaWNhdGUgYSB0cmFuc21pdC1vbmx5IGtleS4KLQkgKi8KLQlpZiAoa2V5LT5jb25mLmFsZyAhPSBBTEdfV0VQICYmCi0JICAgIChrZXktPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCSAgICAga2V5LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikpCi0JCWFkZHIgPSB6ZXJvX2FkZHI7Ci0KIAlpZiAoa2V5LT5zdGEpCi0JCWFkZHIgPSBrZXktPnN0YS0+c3RhLmFkZHI7CisJCXJldHVybiAma2V5LT5zdGEtPnN0YTsKIAotCXJldHVybiBhZGRyOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewotCWNvbnN0IHU4ICphZGRyOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiAJaW50IHJldDsKIAogCWFzc2VydF9rZXlfbG9jaygpOwpAQCAtMTM5LDExICsxMjgsMTYgQEAKIAlpZiAoIWtleS0+bG9jYWwtPm9wcy0+c2V0X2tleSkKIAkJcmV0dXJuOwogCi0JYWRkciA9IGdldF9tYWNfZm9yX2tleShrZXkpOworCXN0YSA9IGdldF9zdGFfZm9yX2tleShrZXkpOworCisJc2RhdGEgPSBrZXktPnNkYXRhOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKIAogCXJldCA9IGtleS0+bG9jYWwtPm9wcy0+c2V0X2tleShsb2NhbF90b19odyhrZXktPmxvY2FsKSwgU0VUX0tFWSwKLQkJCQkgICAgICAga2V5LT5zZGF0YS0+ZGV2LT5kZXZfYWRkciwgYWRkciwKLQkJCQkgICAgICAgJmtleS0+Y29uZik7CisJCQkJICAgICAgICZzZGF0YS0+dmlmLCBzdGEsICZrZXktPmNvbmYpOwogCiAJaWYgKCFyZXQpIHsKIAkJc3Bpbl9sb2NrKCZ0b2RvX2xvY2spOwpAQCAtMTU1LDEyICsxNDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJtYWM4MDIxMS0lczogZmFpbGVkIHRvIHNldCBrZXkgIgogCQkgICAgICAgIiglZCwgJXBNKSB0byBoYXJkd2FyZSAoJWQpXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShrZXktPmxvY2FsLT5ody53aXBoeSksCi0JCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBhZGRyLCByZXQpOworCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2tleV9kaXNhYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHI7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCiAJYXNzZXJ0X2tleV9sb2NrKCk7CkBAIC0xNzYsMTcgKzE3MSwyMiBAQAogCX0KIAlzcGluX3VubG9jaygmdG9kb19sb2NrKTsKIAotCWFkZHIgPSBnZXRfbWFjX2Zvcl9rZXkoa2V5KTsKKwlzdGEgPSBnZXRfc3RhX2Zvcl9rZXkoa2V5KTsKKwlzZGF0YSA9IGtleS0+c2RhdGE7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCSAgICAgdS5hcCk7CiAKIAlyZXQgPSBrZXktPmxvY2FsLT5vcHMtPnNldF9rZXkobG9jYWxfdG9faHcoa2V5LT5sb2NhbCksIERJU0FCTEVfS0VZLAotCQkJCSAgICAgICBrZXktPnNkYXRhLT5kZXYtPmRldl9hZGRyLCBhZGRyLAotCQkJCSAgICAgICAma2V5LT5jb25mKTsKKwkJCQkgICAgICAgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gcmVtb3ZlIGtleSAiCiAJCSAgICAgICAiKCVkLCAlcE0pIGZyb20gaGFyZHdhcmUgKCVkKVxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUoa2V5LT5sb2NhbC0+aHcud2lwaHkpLAotCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgYWRkciwgcmV0KTsKKwkJICAgICAgIGtleS0+Y29uZi5rZXlpZHgsIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIsIHJldCk7CiAKIAlzcGluX2xvY2soJnRvZG9fbG9jayk7CiAJa2V5LT5mbGFncyAmPSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CkBAIC0yMTYsMTMgKzIxNiwzOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQKK19faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KQoreworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSBOVUxMOworCisJaWYgKGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICYmCisJICAgIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCisJCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXksIGtleSk7CisKKwlpZiAoa2V5KQorCQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBpZHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKK30KKwogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICpvbGQsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpCiB7Ci0JaW50IGlkeCwgZGVma2V5OworCWludCBpZHgsIGRlZmtleSwgZGVmbWdtdGtleTsKIAogCWlmIChuZXcpCiAJCWxpc3RfYWRkKCZuZXctPmxpc3QsICZzZGF0YS0+a2V5X2xpc3QpOwpAQCAtMjM4LDEzICsyNjMsMTkgQEAKIAkJCWlkeCA9IG5ldy0+Y29uZi5rZXlpZHg7CiAKIAkJZGVma2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X2tleSA9PSBvbGQ7CisJCWRlZm1nbXRrZXkgPSBvbGQgJiYgc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkgPT0gb2xkOwogCiAJCWlmIChkZWZrZXkgJiYgIW5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgLTEpOworCQlpZiAoZGVmbWdtdGtleSAmJiAhbmV3KQorCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIC0xKTsKIAogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPmtleXNbaWR4XSwgbmV3KTsKIAkJaWYgKGRlZmtleSAmJiBuZXcpCiAJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIG5ldy0+Y29uZi5rZXlpZHgpOworCQlpZiAoZGVmbWdtdGtleSAmJiBuZXcpCisJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwKKwkJCQkJCQkgbmV3LT5jb25mLmtleWlkeCk7CiAJfQogCiAJaWYgKG9sZCkgewpAQCAtMjYzLDcgKzI5NCw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKIAotCUJVR19PTihpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKTsKKwlCVUdfT04oaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUyk7CiAKIAlrZXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2tleSkgKyBrZXlfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtleSkKQEAgLTI5Miw2ICszMjMsMTAgQEAKIAkJa2V5LT5jb25mLml2X2xlbiA9IENDTVBfSERSX0xFTjsKIAkJa2V5LT5jb25mLmljdl9sZW4gPSBDQ01QX01JQ19MRU47CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlrZXktPmNvbmYuaXZfbGVuID0gMDsKKwkJa2V5LT5jb25mLmljdl9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tbWllKTsKKwkJYnJlYWs7CiAJfQogCW1lbWNweShrZXktPmNvbmYua2V5LCBrZXlfZGF0YSwga2V5X2xlbik7CiAJSU5JVF9MSVNUX0hFQUQoJmtleS0+bGlzdCk7CkBAIC0zMDksNiArMzQ0LDE5IEBACiAJCX0KIAl9CiAKKwlpZiAoYWxnID09IEFMR19BRVNfQ01BQykgeworCQkvKgorCQkgKiBJbml0aWFsaXplIEFFUyBrZXkgc3RhdGUgaGVyZSBhcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdAorCQkgKiBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBldmVyeSBwYWNrZXQuCisJCSAqLworCQlrZXktPnUuYWVzX2NtYWMudGZtID0KKwkJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoa2V5X2RhdGEpOworCQlpZiAoIWtleS0+dS5hZXNfY21hYy50Zm0pIHsKKwkJCWtmcmVlKGtleSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwogCXJldHVybiBrZXk7CiB9CiAKQEAgLTM1Miw3ICs0MDAsNyBAQAogCQkJICovCiAKIAkJCS8qIHNhbWUgaGVyZSwgdGhlIEFQIGNvdWxkIGJlIHVzaW5nIFFvUyAqLwotCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5zdGEuYnNzaWQpOworCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5tZ2QuYnNzaWQpOwogCQkJaWYgKGFwKSB7CiAJCQkJaWYgKHRlc3Rfc3RhX2ZsYWdzKGFwLCBXTEFOX1NUQV9XTUUpKQogCQkJCQlrZXktPmNvbmYuZmxhZ3MgfD0KQEAgLTQ2Miw2ICs1MTAsOCBAQAogCiAJaWYgKGtleS0+Y29uZi5hbGcgPT0gQUxHX0NDTVApCiAJCWllZWU4MDIxMV9hZXNfa2V5X2ZyZWUoa2V5LT51LmNjbXAudGZtKTsKKwlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQUVTX0NNQUMpCisJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShrZXktPnUuYWVzX2NtYWMudGZtKTsKIAlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKGtleSk7CiAKIAlrZnJlZShrZXkpOwpAQCAtNDg0LDYgKzUzNCw3IEBACiAJCWxpc3RfZGVsX2luaXQoJmtleS0+dG9kbyk7CiAJCXRvZG9mbGFncyA9IGtleS0+ZmxhZ3MgJiAoS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUyB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUZLRVkgfAorCQkJCQkgIEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWSB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRSB8CiAJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUxFVEUpOwpAQCAtNTAxLDYgKzU1MiwxMSBAQAogCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KGtleS0+c2RhdGEpOwogCQkJd29ya19kb25lID0gdHJ1ZTsKIAkJfQorCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZKSB7CisJCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChrZXktPnNkYXRhKTsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KGtleS0+c2RhdGEpOworCQkJd29ya19kb25lID0gdHJ1ZTsKKwkJfQogCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCkgewogCQkJaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKIAkJCXdvcmtfZG9uZSA9IHRydWU7CkBAIC01MzYsNiArNTkyLDcgQEAKIAlpZWVlODAyMTFfa2V5X2xvY2soKTsKIAogCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChzZGF0YSk7CisJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoc2RhdGEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmgKaW5kZXggNDI1ODE2ZS4uMjE1ZDNlZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtNDYsNiArNDYsOCBAQAogICoJYWNjZWxlcmF0aW9uLgogICogQEtFWV9GTEFHX1RPRE9fREVGS0VZOiBLZXkgaXMgZGVmYXVsdCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMgdG8gYmUgdXBkYXRlZC4KICAqIEBLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTOiBLZXkgbmVlZHMgdG8gYmUgYWRkZWQgdG8gZGVidWdmcy4KKyAqIEBLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVk6IEtleSBpcyBkZWZhdWx0IG1hbmFnZW1lbnQga2V5IGFuZCBkZWJ1Z2ZzIG5lZWRzCisgKgl0byBiZSB1cGRhdGVkLgogICovCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3MgewogCUtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFCT0gQklUKDApLApAQCAtNTQsNiArNTYsNyBAQAogCUtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9SRU1PVkUJPSBCSVQoMyksCiAJS0VZX0ZMQUdfVE9ET19ERUZLRVkJCT0gQklUKDQpLAogCUtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlMJPSBCSVQoNSksCisJS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZCT0gQklUKDYpLAogfTsKIAogc3RydWN0IHRraXBfY3R4IHsKQEAgLTk2LDYgKzk5LDE2IEBACiAJCQl1OCB0eF9jcnlwdG9fYnVmWzYgKiBBRVNfQkxPQ0tfTEVOXTsKIAkJCXU4IHJ4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwogCQl9IGNjbXA7CisJCXN0cnVjdCB7CisJCQl1OCB0eF9wbls2XTsKKwkJCXU4IHJ4X3BuWzZdOworCQkJc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbTsKKwkJCXUzMiByZXBsYXlzOyAvKiBkb3QxMVJTTkFTdGF0c0NNQUNSZXBsYXlzICovCisJCQl1MzIgaWN2ZXJyb3JzOyAvKiBkb3QxMVJTTkFTdGF0c0NNQUNJQ1ZFcnJvcnMgKi8KKwkJCS8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgdmlydF90b19wYWdlKCkgKGNyeXB0byBBUEkpICovCisJCQl1OCB0eF9jcnlwdG9fYnVmWzIgKiBBRVNfQkxPQ0tfTEVOXTsKKwkJCXU4IHJ4X2NyeXB0b19idWZbMiAqIEFFU19CTE9DS19MRU5dOworCQl9IGFlc19jbWFjOwogCX0gdTsKIAogCS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIGtleSBoYXMgYmVlbiB1c2VkICovCkBAIC0xMTQsNiArMTI3LDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqdHhfc3BlYzsKIAkJc3RydWN0IGRlbnRyeSAqcnhfc3BlYzsKIAkJc3RydWN0IGRlbnRyeSAqcmVwbGF5czsKKwkJc3RydWN0IGRlbnRyeSAqaWN2ZXJyb3JzOwogCQlzdHJ1Y3QgZGVudHJ5ICprZXk7CiAJCXN0cnVjdCBkZW50cnkgKmlmaW5kZXg7CiAJCWludCBjbnQ7CkBAIC0xNDAsNiArMTU0LDggQEAKIAkJCXN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KTsKK3ZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICBpbnQgaWR4KTsKIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggMjRiMTQzNi4uYTZmMWQ4YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC0xNjEsMzAgKzE2MSw2NyBAQAogCWlmIChXQVJOX09OKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlKQotCQlyZXR1cm4gMDsKLQogCW1lbXNldCgmY29uZiwgMCwgc2l6ZW9mKGNvbmYpKTsKLQljb25mLmNoYW5nZWQgPSBjaGFuZ2VkOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJY29uZi5ic3NpZCA9IHNkYXRhLT51LnN0YS5ic3NpZDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5tZ2QuYnNzaWQ7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQljb25mLmJzc2lkID0gc2RhdGEtPnUuaWJzcy5ic3NpZDsKIAllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCWNvbmYuYnNzaWQgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKIAllbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7Ci0JCXU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CisJCXN0YXRpYyBjb25zdCB1OCB6ZXJvW0VUSF9BTEVOXSA9IHsgMCB9OwogCQljb25mLmJzc2lkID0gemVybzsKIAl9IGVsc2UgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoV0FSTl9PTighY29uZi5ic3NpZCAmJiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGRvIG5vdCB3YXJuIHRvIHNpbXBsaWZ5IGNhbGxlciBpbiBzY2FuLmMgKi8KKwkJY2hhbmdlZCAmPSB+SUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQ7CisJCWlmIChXQVJOX09OKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoYW5nZWQgJj0gfklFRUU4MDIxMV9JRkNDX0JFQUNPTjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCkgeworCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKSB7CisJCQljb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBCZWFjb24gc2hvdWxkIGJlIGVuYWJsZWQsIGJ1dCBBUCBtb2RlIG11c3QKKwkJCSAqIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBiZWFjb24gY29uZmlndXJlZC4KKwkJCSAqLworCQkJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0KKwkJCQkJISFyY3VfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0gISFzZGF0YS0+dS5pYnNzLnByb2JlX3Jlc3A7CisJCQkJYnJlYWs7CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCQkJY29uZi5lbmFibGVfYmVhY29uID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogbm90IHJlYWNoZWQgKi8KKwkJCQlXQVJOX09OKDEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJY29uZi5jaGFuZ2VkID0gY2hhbmdlZDsKIAogCXJldHVybiBsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlKGxvY2FsX3RvX2h3KGxvY2FsKSwKIAkJCQkJICAgICZzZGF0YS0+dmlmLCAmY29uZik7CkBAIC0yMDgsMjYgKzI0NSwyMiBAQAogCX0KIAogCWlmIChjaGFuICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwgfHwKLQkgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZSkgeworCSAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlKSB7CiAJCWxvY2FsLT5ody5jb25mLmNoYW5uZWwgPSBjaGFuOwotCQlsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7Ci0JCXN3aXRjaCAoY2hhbm5lbF90eXBlKSB7Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgotCQkJbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM6Ci0JCQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9CisJCWxvY2FsLT5ody5jb25mLmNoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDsKIAl9CiAKLQlpZiAoIWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsKQorCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpCiAJCXBvd2VyID0gY2hhbi0+bWF4X3Bvd2VyOwogCWVsc2UKLQkJcG93ZXIgPSBtaW4oY2hhbi0+bWF4X3Bvd2VyLCBsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCk7CisJCXBvd2VyID0gbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA/CisJCQkoY2hhbi0+bWF4X3Bvd2VyIC0gbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCkgOgorCQkJY2hhbi0+bWF4X3Bvd2VyOworCisJaWYgKGxvY2FsLT51c2VyX3Bvd2VyX2xldmVsKQorCQlwb3dlciA9IG1pbihwb3dlciwgbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwpOworCiAJaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IHBvd2VyKSB7CiAJCWNoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSOwogCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IHBvd2VyOwpAQCAtNjY3LDcgKzcwMCw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7Ci0JaW50IHByaXZfc2l6ZTsKKwlpbnQgcHJpdl9zaXplLCBpOwogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAKIAkvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLgpAQCAtNjk1LDYgKzcyOCwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXdpcGh5LT5wcml2aWQgPSBtYWM4MDIxMV93aXBoeV9wcml2aWQ7CisJd2lwaHktPm1heF9zY2FuX3NzaWRzID0gNDsKKwkvKiBZZXMsIHB1dHRpbmcgY2ZnODAyMTFfYnNzIGludG8gaWVlZTgwMjExX2JzcyBpcyBhIGhhY2sgKi8KKwl3aXBoeS0+YnNzX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JzcykgLQorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfYnNzKTsKIAogCWxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJbG9jYWwtPmh3LndpcGh5ID0gd2lwaHk7CkBAIC03MjIsNiArNzU5LDcgQEAKIAlsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkID0gdHJ1ZTsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5rZXlfbG9jayk7CiAKQEAgLTczOCw2ICs3NzYsOCBAQAogCiAJc3RhX2luZm9faW5pdChsb2NhbCk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX01BWF9RVUVVRVM7IGkrKykKKwkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnBlbmRpbmdbaV0pOwogCXRhc2tsZXRfaW5pdCgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCwgaWVlZTgwMjExX3R4X3BlbmRpbmcsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpbG9jYWwpOwogCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7CkBAIC03NTAsMTAgKzc5MCwyOSBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5za2JfcXVldWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CiAKKwlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmFtcGR1X2xvY2spOworCiAJcmV0dXJuIGxvY2FsX3RvX2h3KGxvY2FsKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2FsbG9jX2h3KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbWFzdGVyX29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbWFzdGVyX3N0YXJ0X3htaXQsCisJLm5kb19vcGVuID0gaWVlZTgwMjExX21hc3Rlcl9vcGVuLAorCS5uZG9fc3RvcCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RvcCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2VsZWN0X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZSwKK307CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm1kZXYpCit7CisJbWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJbWRldi0+bmV0ZGV2X29wcyA9ICZpZWVlODAyMTFfbWFzdGVyX29wczsKKwltZGV2LT5oZWFkZXJfb3BzID0gJmllZWU4MDIxMV9oZWFkZXJfb3BzOworCW1kZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDA7CisJbWRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKK30KKwogaW50IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKQEAgLTc2MSwyNSArODIwLDMzIEBACiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2OworCWludCBjaGFubmVscywgaSwgajsKIAogCS8qCiAJICogZ2VuZXJpYyBjb2RlIGd1YXJhbnRlZXMgYXQgbGVhc3Qgb25lIGJhbmQsCiAJICogc2V0IHRoaXMgdmVyeSBlYXJseSBiZWNhdXNlIG11Y2ggY29kZSBhc3N1bWVzCiAJICogdGhhdCBody5jb25mLmNoYW5uZWwgaXMgYXNzaWduZWQKIAkgKi8KKwljaGFubmVscyA9IDA7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAogCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07Ci0JCWlmIChzYmFuZCkgeworCQlpZiAoc2JhbmQgJiYgIWxvY2FsLT5vcGVyX2NoYW5uZWwpIHsKIAkJCS8qIGluaXQgY2hhbm5lbCB3ZSdyZSBvbiAqLwogCQkJbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCA9CiAJCQlsb2NhbC0+b3Blcl9jaGFubmVsID0KIAkJCWxvY2FsLT5zY2FuX2NoYW5uZWwgPSAmc2JhbmQtPmNoYW5uZWxzWzBdOwotCQkJYnJlYWs7CiAJCX0KKwkJaWYgKHNiYW5kKQorCQkJY2hhbm5lbHMgKz0gc2JhbmQtPm5fY2hhbm5lbHM7CiAJfQogCisJbG9jYWwtPmludF9zY2FuX3JlcS5uX2NoYW5uZWxzID0gY2hhbm5lbHM7CisJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBjaGFubmVscywgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qIGlmIGxvdy1sZXZlbCBkcml2ZXIgc3VwcG9ydHMgQVAsIHdlIGFsc28gc3VwcG9ydCBWTEFOICovCiAJaWYgKGxvY2FsLT5ody53aXBoeS0+aW50ZXJmYWNlX21vZGVzICYgQklUKE5MODAyMTFfSUZUWVBFX0FQKSkKIAkJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pOwpAQCAtNzg3LDkgKzg1NCwxNCBAQAogCS8qIG1hYzgwMjExIGFsd2F5cyBzdXBwb3J0cyBtb25pdG9yICovCiAJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOwogCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlsb2NhbC0+aHcud2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOworCWVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKQorCQlsb2NhbC0+aHcud2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOworCiAJcmVzdWx0ID0gd2lwaHlfcmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKKwkJZ290byBmYWlsX3dpcGh5X3JlZ2lzdGVyOwogCiAJLyoKIAkgKiBXZSB1c2UgdGhlIG51bWJlciBvZiBxdWV1ZXMgZm9yIGZlYXR1cmUgdGVzdHMgKFFvUywgSFQpIGludGVybmFsbHkKQEAgLTc5NywxNCArODY5LDEwIEBACiAJICovCiAJaWYgKGh3LT5xdWV1ZXMgPiBJRUVFODAyMTFfTUFYX1FVRVVFUykKIAkJaHctPnF1ZXVlcyA9IElFRUU4MDIxMV9NQVhfUVVFVUVTOwotCWlmIChody0+YW1wZHVfcXVldWVzID4gSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMpCi0JCWh3LT5hbXBkdV9xdWV1ZXMgPSBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzsKLQlpZiAoaHctPnF1ZXVlcyA8IDQpCi0JCWh3LT5hbXBkdV9xdWV1ZXMgPSAwOwogCiAJbWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiksCi0JCQkgICAgICAgIndtYXN0ZXIlZCIsIGV0aGVyX3NldHVwLAotCQkJICAgICAgIGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSk7CisJCQkgICAgICAgIndtYXN0ZXIlZCIsIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAsCisJCQkgICAgICAgaHctPnF1ZXVlcyk7CiAJaWYgKCFtZGV2KQogCQlnb3RvIGZhaWxfbWRldl9hbGxvYzsKIApAQCAtODEyLDE3ICs4ODAsOCBAQAogCW1wcml2LT5sb2NhbCA9IGxvY2FsOwogCWxvY2FsLT5tZGV2ID0gbWRldjsKIAotCWllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KGxvY2FsKTsKLQotCW1kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdDsKLQltZGV2LT5vcGVuID0gaWVlZTgwMjExX21hc3Rlcl9vcGVuOwotCW1kZXYtPnN0b3AgPSBpZWVlODAyMTFfbWFzdGVyX3N0b3A7Ci0JbWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JbWRldi0+aGVhZGVyX29wcyA9ICZpZWVlODAyMTFfaGVhZGVyX29wczsKLQltZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfbWFzdGVyX3NldF9tdWx0aWNhc3RfbGlzdDsKLQogCWxvY2FsLT5ody53b3JrcXVldWUgPQotCQljcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKIAlpZiAoIWxvY2FsLT5ody53b3JrcXVldWUpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsX3dvcmtxdWV1ZTsKQEAgLTg0NiwxNSArOTA1LDYgQEAKIAogCWxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCA9IGxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsOwogCi0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiAoSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfAotCQkJCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHwKLQkJCQkJCSAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pID8KLQkJCSAgICAgICBJV19RVUFMX1FVQUxfVVBEQVRFRCA6IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSA/Ci0JCQkgICAgICAgSVdfUVVBTF9OT0lTRV9VUERBVEVEIDogSVdfUVVBTF9OT0lTRV9JTlZBTElEOwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKLQkJbG9jYWwtPndzdGF0c19mbGFncyB8PSBJV19RVUFMX0RCTTsKLQogCXJlc3VsdCA9IHN0YV9pbmZvX3N0YXJ0KGxvY2FsKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBmYWlsX3N0YV9pbmZvOwpAQCAtODY2LDYgKzkxNiw3IEBACiAKIAltZW1jcHkobG9jYWwtPm1kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKGxvY2FsLT5tZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7CisJbG9jYWwtPm1kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwogCWlmIChyZXN1bHQgPCAwKQpAQCAtODg3LDggKzkzOCw2IEBACiAJCWdvdG8gZmFpbF93ZXA7CiAJfQogCi0JbG9jYWwtPm1kZXYtPnNlbGVjdF9xdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWU7Ci0KIAkvKiBhZGQgb25lIGRlZmF1bHQgU1RBIGludGVyZmFjZSBpZiBzdXBwb3J0ZWQgKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpIHsKIAkJcmVzdWx0ID0gaWVlZTgwMjExX2lmX2FkZChsb2NhbCwgIndsYW4lZCIsIE5VTEwsCkBAIC05MDIsNiArOTUxLDIwIEBACiAKIAlpZWVlODAyMTFfbGVkX2luaXQobG9jYWwpOwogCisJLyogYWxsb2MgaW50ZXJuYWwgc2NhbiByZXF1ZXN0ICovCisJaSA9IDA7CisJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkcyA9ICZsb2NhbC0+c2Nhbl9zc2lkOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEubl9zc2lkcyA9IDE7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAoIWh3LT53aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVsc1tpXSA9CisJCQkJJmh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJaSsrOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGZhaWxfd2VwOgpAQCAtOTIwLDYgKzk4Myw4IEBACiAJCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKIGZhaWxfbWRldl9hbGxvYzoKIAl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CitmYWlsX3dpcGh5X3JlZ2lzdGVyOgorCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpOwogCXJldHVybiByZXN1bHQ7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9odyk7CkBAIC05NDcsNyArMTAxMiw2IEBACiAKIAlydG5sX3VubG9jaygpOwogCi0JaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChsb2NhbCk7CiAJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwogCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwpAQCAtOTY1LDYgKzEwMjksNyBAQAogCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7CiAJaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKIAlmcmVlX25ldGRldihsb2NhbC0+bWRldik7CisJa2ZyZWUobG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KTsKIApAQCAtOTcyLDYgKzEwMzcsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCisJbXV0ZXhfZGVzdHJveSgmbG9jYWwtPmlmbGlzdF9tdHgpOworCiAJd2lwaHlfZnJlZShsb2NhbC0+aHcud2lwaHkpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZnJlZV9odyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCA4MmY1NjhlLi45YTNlNWRlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTI3NSwxNiArMjc1LDYgQEAKIAkJJiB0YmwtPmhhc2hfbWFzazsKIH0KIAotdTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pCi17Ci0JaWYgKCFtZXNoX2lkX2xlbikKLQkJcmV0dXJuIDE7Ci0JZWxzZSBpZiAobWVzaF9pZF9sZW4gPT0gMSkKLQkJcmV0dXJuICh1OCkgbWVzaF9pZFswXTsKLQllbHNlCi0JCXJldHVybiAodTgpIChtZXNoX2lkWzBdICsgMiAqIG1lc2hfaWRbMV0pOwotfQotCiBzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9hbGxvYyhpbnQgc2l6ZV9vcmRlcikKIHsKIAlpbnQgaTsKQEAgLTQ0Miw3ICs0MzIsOCBAQAogCiAJaWZtc2gtPmhvdXNla2VlcGluZyA9IHRydWU7CiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtc2gtPndvcmspOwotCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7CisJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0b3BfbWVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTQ3Niw3ICs0NjcsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQl1NjQgc3VwcF9yYXRlcyA9IDA7CisJdTMyIHN1cHBfcmF0ZXMgPSAwOwogCXNpemVfdCBiYXNlbGVuOwogCWludCBmcmVxOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGMxOTdhYjUuLmQ4OTFkN2QgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtMjQsMTUgKzI0LDE1IEBACiAgKgogICoKICAqCi0gKiBATUVTSF9QQVRIX0FDVElWRTogdGhlIG1lc2ggcGF0aCBpcyBjYW4gYmUgdXNlZCBmb3IgZm9yd2FyZGluZwotICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHJ1bm5pbmcgZm9yIHRoaXMgbWVzaCBwYXRoCisgKiBATUVTSF9QQVRIX0FDVElWRTogdGhlIG1lc2ggcGF0aCBjYW4gYmUgdXNlZCBmb3IgZm9yd2FyZGluZworICogQE1FU0hfUEFUSF9SRVNPTFZJTkc6IHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBydW5uaW5nIGZvciB0aGlzIG1lc2ggcGF0aAogICogQE1FU0hfUEFUSF9EU05fVkFMSUQ6IHRoZSBtZXNoIHBhdGggY29udGFpbnMgYSB2YWxpZCBkZXN0aW5hdGlvbiBzZXF1ZW5jZQogICogCW51bWJlcgogICogQE1FU0hfUEFUSF9GSVhFRDogdGhlIG1lc2ggcGF0aCBoYXMgYmVlbiBtYW51YWxseSBzZXQgYW5kIHNob3VsZCBub3QgYmUKICAqIAltb2RpZmllZAogICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIG1lc2ggcGF0aCBjYW4gaGFzIGJlZW4gcmVzb2x2ZWQKICAqCi0gKiBNRVNIX1BBVEhfUkVTT0xWRUQgYW5kIE1FU0hfUEFUSF9ERUxFVEUgYXJlIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bworICogTUVTSF9QQVRIX1JFU09MVkVEIGlzIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bwogICogZGVjaWRlIHdoZW4gdG8gc3RvcCBvciBjYW5jZWwgdGhlIG1lc2ggcGF0aCBkaXNjb3ZlcnkuCiAgKi8KIGVudW0gbWVzaF9wYXRoX2ZsYWdzIHsKQEAgLTE5Niw3ICsxOTYsNiBAQAogCiAvKiBQdWJsaWMgaW50ZXJmYWNlcyAqLwogLyogVmFyaW91cyAqLwotdTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pOwogaW50IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyKTsKIGludCBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkciwKIAkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpAQCAtMjM2LDE0ICsyMzUsMTMgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKTsKIGludCBtZXNoX3BhdGhfYWRkKHU4ICpkc3QsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIC8qIE1lc2ggcGxpbmtzICovCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTY0IHJhdGVzLAordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywKIAkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgYWRkKTsKIGJvb2wgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICppZSk7CiB2b2lkIG1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jyb2tlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBpbnQgbWVzaF9wbGlua19vcGVuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLWludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9wbGlua19ibG9jayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IDcxZmU2MDkuLjYwYjM1YWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTU4LDcgKzU4LDYgQEAKICNkZWZpbmUgUEVSUl9JRV9EU1RfQUREUih4KQkoeCArIDIpCiAjZGVmaW5lIFBFUlJfSUVfRFNUX0RTTih4KQl1MzJfZmllbGRfZ2V0KHgsIDgsIDApOwogCi0jZGVmaW5lIFRVX1RPX0VYUF9USU1FKHgpIChqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh4ICogMTAyNCAvIDEwMDApKQogI2RlZmluZSBNU0VDX1RPX1RVKHgpICh4KjEwMDAvMTAyNCkKICNkZWZpbmUgRFNOX0dUKHgsIHkpICgobG9uZykgKHkpIC0gKGxvbmcpICh4KSA8IDApCiAjZGVmaW5lIERTTl9MVCh4LCB5KSAoKGxvbmcpICh4KSAtIChsb25nKSAoeSkgPCAwKQpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJcG9zICs9IEVUSF9BTEVOOwogCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBACiAJcG9zICs9IEVUSF9BTEVOOwogCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU5LDcgKzc1OCw3IEBACiB9CiAKIC8qKgotICogaWVlZTgwMjExc19sb29rdXBfbmV4dGhvcCAtIHB1dCB0aGUgYXBwcm9wcmlhdGUgbmV4dCBob3Agb24gYSBtZXNoIGZyYW1lCisgKiBtZXNoX25leHRob3BfbG9va3VwIC0gcHV0IHRoZSBhcHByb3ByaWF0ZSBuZXh0IGhvcCBvbiBhIG1lc2ggZnJhbWUKICAqCiAgKiBAc2tiOiA4MDIuMTEgZnJhbWUgdG8gYmUgc2VudAogICogQHNkYXRhOiBuZXR3b3JrIHN1YmlmIHRoZSBmcmFtZSB3aWxsIGJlIHNlbnQgdGhyb3VnaApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggMTE1OWJkYi4uYThiYmRlY2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpAQCAtOTMsNyArOTMsNyBAQAogICogICAgICAgb24gaXQgaW4gdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHNlY3Rpb24hCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKm1lc2hfcGxpbmtfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSB1OCAqaHdfYWRkciwgdTY0IHJhdGVzKQorCQkJCQkgdTggKmh3X2FkZHIsIHUzMiByYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTIxOCwxMSArMjE4LDExIEBACiAJCW1lbWNweShwb3MsICZyZWFzb24sIDIpOwogCX0KIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHU2NCByYXRlcywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCit2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgIGJvb2wgcGVlcl9hY2NlcHRpbmdfcGxpbmtzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwpAQCAtMzYxLDM2ICszNjEsNiBAQAogCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogfQogCi1pbnQgbWVzaF9wbGlua19jbG9zZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7Ci0JX19sZTE2IGxsaWQsIHBsaWQsIHJlYXNvbjsKLQotCW1wbF9kYmcoIk1lc2ggcGxpbms6IGNsb3NpbmcgbGluayB3aXRoICVwTVxuIiwgc3RhLT5zdGEuYWRkcik7Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCXN0YS0+cmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9MSU5LX0NBTkNFTExFRCk7Ci0JcmVhc29uID0gc3RhLT5yZWFzb247Ci0KLQlpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19MSVNURU4gfHwKLQkgICAgc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19CTE9DS0VEKSB7Ci0JCW1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RhKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19FU1RBQikgewotCQlfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotCQkvKiBUaGUgdGltZXIgc2hvdWxkIG5vdCBiZSBydW5uaW5nICovCi0JCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7Ci0JfSBlbHNlIGlmICghbW9kX3BsaW5rX3RpbWVyKHN0YSwgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKSkKLQkJc3RhLT5pZ25vcmVfcGxpbmtfdGltZXIgPSB0cnVlOwotCi0Jc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7Ci0JbGxpZCA9IHN0YS0+bGxpZDsKLQlwbGlkID0gc3RhLT5wbGlkOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCW1lc2hfcGxpbmtfZnJhbWVfdHgoc3RhLT5zZGF0YSwgUExJTktfQ0xPU0UsIHN0YS0+c3RhLmFkZHIsIGxsaWQsCi0JCQkgICAgcGxpZCwgcmVhc29uKTsKLQlyZXR1cm4gMDsKLX0KIAogdm9pZCBtZXNoX3J4X3BsaW5rX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgc2l6ZV90IGxlbiwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTQ3Nyw3ICs0NDcsNyBAQAogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJfSBlbHNlIGlmICghc3RhKSB7CiAJCS8qIGZ0eXBlID09IFBMSU5LX09QRU4gKi8KLQkJdTY0IHJhdGVzOworCQl1MzIgcmF0ZXM7CiAJCWlmICghbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSkgewogCQkJbXBsX2RiZygiTWVzaCBwbGluayBlcnJvcjogbm8gbW9yZSBmcmVlIHBsaW5rc1xuIik7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDJiODkwYWYuLjdlY2RhOWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBCU1MgY2xpZW50IG1vZGUgaW1wbGVtZW50YXRpb24KLSAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMy0yMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgogICogQ29weXJpZ2h0IDIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CkBAIC0xNSwxMSArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCkBAIC0zMywxNyArMzAsOCBAQAogI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCAoSFogLyA1KQogI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTIDMKICNkZWZpbmUgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lOVEVSVkFMICg2MCAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfUFJPQkVfSURMRV9USU1FICg2MCAqIEhaKQogI2RlZmluZSBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCAoMSAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCAoMiAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XICgxNSAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQgKDcgKiBIWikKLQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCAoMzAgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCAoNjAgKiBIWikKLQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMgMTI4Ci0KIAogLyogdXRpbHMgKi8KIHN0YXRpYyBpbnQgZWN3MmN3KGludCBlY3cpCkBAIC01NSwxMCArNDMsMTAgQEAKIHsKIAl1OCAqZW5kLCAqcG9zOwogCi0JcG9zID0gYnNzLT5pZXM7CisJcG9zID0gYnNzLT5jYnNzLmluZm9ybWF0aW9uX2VsZW1lbnRzOwogCWlmIChwb3MgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JZW5kID0gcG9zICsgYnNzLT5pZXNfbGVuOworCWVuZCA9IHBvcyArIGJzcy0+Y2Jzcy5sZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CiAKIAl3aGlsZSAocG9zICsgMSA8IGVuZCkgewogCQlpZiAocG9zICsgMiArIHBvc1sxXSA+IGVuZCkKQEAgLTczLDcgKzYxLDcgQEAKIAogc3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAotCQkJCSAgICAgIHU2NCAqcmF0ZXMpCisJCQkJICAgICAgdTMyICpyYXRlcykKIHsKIAlpbnQgaSwgaiwgY291bnQ7CiAJKnJhdGVzID0gMDsKQEAgLTkyLDE0NiArODAsMTEgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLS8qIGFsc28gdXNlZCBieSBtZXNoIGNvZGUgKi8KLXU2NCBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXM7Ci0Jc2l6ZV90IG51bV9yYXRlczsKLQl1NjQgc3VwcF9yYXRlczsKLQlpbnQgaSwgajsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07Ci0KLQlpZiAoIXNiYW5kKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQl9Ci0KLQliaXRyYXRlcyA9IHNiYW5kLT5iaXRyYXRlczsKLQludW1fcmF0ZXMgPSBzYmFuZC0+bl9iaXRyYXRlczsKLQlzdXBwX3JhdGVzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuICsKLQkJICAgICBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJdTggcmF0ZSA9IDA7Ci0JCWludCBvd25fcmF0ZTsKLQkJaWYgKGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4pCi0JCQlyYXRlID0gZWxlbXMtPnN1cHBfcmF0ZXNbaV07Ci0JCWVsc2UgaWYgKGVsZW1zLT5leHRfc3VwcF9yYXRlcykKLQkJCXJhdGUgPSBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMKLQkJCQlbaSAtIGVsZW1zLT5zdXBwX3JhdGVzX2xlbl07Ci0JCW93bl9yYXRlID0gNSAqIChyYXRlICYgMHg3Zik7Ci0JCWZvciAoaiA9IDA7IGogPCBudW1fcmF0ZXM7IGorKykKLQkJCWlmIChiaXRyYXRlc1tqXS5iaXRyYXRlID09IG93bl9yYXRlKQotCQkJCXN1cHBfcmF0ZXMgfD0gQklUKGopOwotCX0KLQlyZXR1cm4gc3VwcF9yYXRlczsKLX0KLQogLyogZnJhbWUgc2VuZGluZyBmdW5jdGlvbnMgKi8KIAotLyogYWxzbyB1c2VkIGJ5IHNjYW5uaW5nIGNvZGUgKi8KLXZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAotCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMOwotCWludCBpOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKGRzdCkgewotCQltZW1jcHkobWdtdC0+ZGEsIGRzdCwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+YnNzaWQsIGRzdCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1zZXQobWdtdC0+YnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKLQl9Ci0JcG9zID0gc2tiX3B1dChza2IsIDIgKyBzc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBzc2lkX2xlbjsKLQltZW1jcHkocG9zLCBzc2lkLCBzc2lkX2xlbik7Ci0KLQlzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDIpOwotCXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCXN1cHBfcmF0ZXNbMV0gPSAwOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWlmIChlc3VwcF9yYXRlcykgewotCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOwotCQkJZXN1cHBfcmF0ZXNbMV0rKzsKLQkJfSBlbHNlIGlmIChzdXBwX3JhdGVzWzFdID09IDgpIHsKLQkJCWVzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDMpOwotCQkJZXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJCWVzdXBwX3JhdGVzWzFdID0gMTsKLQkJCXBvcyA9ICZlc3VwcF9yYXRlc1syXTsKLQkJfSBlbHNlIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCXN1cHBfcmF0ZXNbMV0rKzsKLQkJfQotCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7Ci0JfQotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJaW50IHRyYW5zYWN0aW9uLCB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCi0JCQkJaW50IGVuY3J5cHQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXV0aCAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCArIDYpOwotCW1lbXNldChtZ210LCAwLCAyNCArIDYpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOwotCWlmIChlbmNyeXB0KQotCQltZ210LT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihpZnN0YS0+YXV0aF9hbGcpOwotCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOwotCWlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24gKyAxOwotCW1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSA9IGNwdV90b19sZTE2KDApOwotCWlmIChleHRyYSkKLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBleHRyYV9sZW4pLCBleHRyYSwgZXh0cmFfbGVuKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgZW5jcnlwdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CkBAIC0yNDEsMTEgKzk0LDExIEBACiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgd21tID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1NjQgcmF0ZXMgPSAwOworCXUzMiByYXRlcyA9IDA7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIGlmc3RhLT5leHRyYV9pZV9sZW4gKwotCQkJICAgIGlmc3RhLT5zc2lkX2xlbik7CisJCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIGlmbWdkLT5leHRyYV9pZV9sZW4gKworCQkJICAgIGlmbWdkLT5zc2lkX2xlbik7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhc3NvYyAiCiAJCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwpAQCAtMjU1LDcgKzEwOCw3IEBACiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CiAKLQljYXBhYiA9IGlmc3RhLT5jYXBhYjsKKwljYXBhYiA9IGlmbWdkLT5jYXBhYjsKIAogCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUpKQpAQCAtMjY0LDExICsxMTcsMTEgQEAKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKIAl9CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAorCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCiAJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJaWYgKGJzcykgewotCQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWlmIChic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAJCWlmIChic3MtPndtbV91c2VkKQogCQkJd21tID0gMTsKQEAgLTI3OSw3ICsxMzIsNyBAQAogCQkgKiBiLW9ubHkgbW9kZSkgKi8KIAkJcmF0ZXNfbGVuID0gaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoYnNzLCBzYmFuZCwgJnJhdGVzKTsKIAotCQlpZiAoKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgorCQlpZiAoKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpICYmCiAJCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQpKQogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7CiAKQEAgLTI5MSwxOCArMTQ0LDE4IEBACiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgeworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUKSB7CiAJCXNrYl9wdXQoc2tiLCAxMCk7CiAJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKIAkJbWdtdC0+dS5yZWFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQogCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7Ci0JCW1lbWNweShtZ210LT51LnJlYXNzb2NfcmVxLmN1cnJlbnRfYXAsIGlmc3RhLT5wcmV2X2Jzc2lkLAorCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZm1nZC0+cHJldl9ic3NpZCwKIAkJICAgICAgIEVUSF9BTEVOKTsKIAl9IGVsc2UgewogCQlza2JfcHV0KHNrYiwgNCk7CkBAIC0zMTQsMTAgKzE2NywxMCBAQAogCX0KIAogCS8qIFNTSUQgKi8KLQlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmc3RhLT5zc2lkX2xlbik7CisJaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZm1nZC0+c3NpZF9sZW4pOwogCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gaWZzdGEtPnNzaWRfbGVuOwotCW1lbWNweShwb3MsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCSpwb3MrKyA9IGlmbWdkLT5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAogCS8qIGFkZCBhbGwgcmF0ZXMgd2hpY2ggd2VyZSBtYXJrZWQgdG8gYmUgdXNlZCBhYm92ZSAqLwogCXN1cHBfcmF0ZXNfbGVuID0gcmF0ZXNfbGVuOwpAQCAtMzcyLDEyICsyMjUsMTIgQEAKIAkJfQogCX0KIAotCWlmIChpZnN0YS0+ZXh0cmFfaWUpIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIGlmc3RhLT5leHRyYV9pZV9sZW4pOwotCQltZW1jcHkocG9zLCBpZnN0YS0+ZXh0cmFfaWUsIGlmc3RhLT5leHRyYV9pZV9sZW4pOworCWlmIChpZm1nZC0+ZXh0cmFfaWUpIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIGlmbWdkLT5leHRyYV9pZV9sZW4pOworCQltZW1jcHkocG9zLCBpZm1nZC0+ZXh0cmFfaWUsIGlmbWdkLT5leHRyYV9pZV9sZW4pOwogCX0KIAotCWlmICh3bW0gJiYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CisJaWYgKHdtbSAmJiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpIHsKIAkJcG9zID0gc2tiX3B1dChza2IsIDkpOwogCQkqcG9zKysgPSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM7CiAJCSpwb3MrKyA9IDc7IC8qIGxlbiAqLwpAQCAtMzkxLDEwICsyNDQsMTcgQEAKIAl9CiAKIAkvKiB3bW0gc3VwcG9ydCBpcyBhIG11c3QgdG8gSFQgKi8KLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgorCS8qCisJICogSUVFRTgwMi4xMW4gZG9lcyBub3QgYWxsb3cgVEtJUC9XRVAgYXMgcGFpcndpc2UKKwkgKiBjaXBoZXJzIGluIEhUIG1vZGUuIFdlIHN0aWxsIGFzc29jaWF0ZSBpbiBub24taHQKKwkgKiBtb2RlICgxMWEvYi9nKSBpZiBhbnkgb25lIG9mIHRoZXNlIGNpcGhlcnMgaXMKKwkgKiBjb25maWd1cmVkIGFzIHBhaXJ3aXNlLgorCSAqLworCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpICYmCiAJICAgIHNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCiAJICAgIChodF9pZSA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfSFRfSU5GT1JNQVRJT04pKSAmJgotCSAgICBodF9pZVsxXSA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSkgeworCSAgICBodF9pZVsxXSA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSAmJgorCSAgICAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8gPQogCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pZSArIDIpOwogCQl1MTYgY2FwID0gc2JhbmQtPmh0X2NhcC5jYXA7CkBAIC00MjksMTEgKzI4OSwxMSBAQAogCQltZW1jcHkocG9zLCAmc2JhbmQtPmh0X2NhcC5tY3MsIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOwogCX0KIAotCWtmcmVlKGlmc3RhLT5hc3NvY3JlcV9pZXMpOwotCWlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuID0gKHNrYi0+ZGF0YSArIHNrYi0+bGVuKSAtIGllczsKLQlpZnN0YS0+YXNzb2NyZXFfaWVzID0ga21hbGxvYyhpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpCi0JCW1lbWNweShpZnN0YS0+YXNzb2NyZXFfaWVzLCBpZXMsIGlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuKTsKKwlrZnJlZShpZm1nZC0+YXNzb2NyZXFfaWVzKTsKKwlpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7CisJaWZtZ2QtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZtZ2QtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOworCWlmIChpZm1nZC0+YXNzb2NyZXFfaWVzKQorCQltZW1jcHkoaWZtZ2QtPmFzc29jcmVxX2llcywgaWVzLCBpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbik7CiAKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQpAQCAtNDQzLDcgKzMwMyw3IEBACiAJCQkJCSAgIHUxNiBzdHlwZSwgdTE2IHJlYXNvbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCkBAIC00NTcsNDAgKzMxNyw1MSBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IHN0eXBlKTsKIAlza2JfcHV0KHNrYiwgMik7CiAJLyogdS5kZWF1dGgucmVhc29uX2NvZGUgPT0gdS5kaXNhc3NvYy5yZWFzb25fY29kZSAqLwogCW1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uKTsKIAorCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfcHNwb2xsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKnBzcG9sbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiBmYzsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCpwc3BvbGwpKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKKwkJICAgICAgICJwc3BvbGwgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCXBzcG9sbCA9IChzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpwc3BvbGwpKTsKKwltZW1zZXQocHNwb2xsLCAwLCBzaXplb2YoKnBzcG9sbCkpOworCWZjID0gSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwgfCBJRUVFODAyMTFfRkNUTF9QTTsKKwlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJcHNwb2xsLT5haWQgPSBjcHVfdG9fbGUxNihpZm1nZC0+YWlkKTsKKworCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLworCXBzcG9sbC0+YWlkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUgfCAxIDw8IDE0KTsKKworCW1lbWNweShwc3BvbGwtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkocHNwb2xsLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CiB9CiAKIC8qIE1MTUUgKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBpLCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDA7Ci0KLQkvKiBjZi4gSUVFRSA4MDIuMTEgOS4yLjEyICovCi0JZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykKLQkJaWYgKChic3MtPnN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDUgPiAxMTApCi0JCQloYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDE7Ci0KLQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haICYmCi0JICAgIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0KQotCQlzZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKLQllbHNlCi0JCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKLQotCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOwotfQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkLAogCQkJCSAgICAgdTggKndtbV9wYXJhbSwgc2l6ZV90IHdtbV9wYXJhbV9sZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcGFyYW1zOwpAQCAtNDk4LDcgKzM2OSw3IEBACiAJaW50IGNvdW50OwogCXU4ICpwb3M7CiAKLQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCiAJaWYgKCF3bW1fcGFyYW0pCkBAIC01MDcsMTggKzM3OCwxNSBAQAogCWlmICh3bW1fcGFyYW1fbGVuIDwgOCB8fCB3bW1fcGFyYW1bNV0gLyogdmVyc2lvbiAqLyAhPSAxKQogCQlyZXR1cm47CiAJY291bnQgPSB3bW1fcGFyYW1bNl0gJiAweDBmOwotCWlmIChjb3VudCA9PSBpZnN0YS0+d21tX2xhc3RfcGFyYW1fc2V0KQorCWlmIChjb3VudCA9PSBpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0KQogCQlyZXR1cm47Ci0JaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCA9IGNvdW50OworCWlmbWdkLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKIAogCXBvcyA9IHdtbV9wYXJhbSArIDg7CiAJbGVmdCA9IHdtbV9wYXJhbV9sZW4gLSA4OwogCiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAotCWlmICghbG9jYWwtPm9wcy0+Y29uZl90eCkKLQkJcmV0dXJuOwotCiAJbG9jYWwtPndtbV9hY20gPSAwOwogCWZvciAoOyBsZWZ0ID49IDQ7IGxlZnQgLT0gNCwgcG9zICs9IDQpIHsKIAkJaW50IGFjaSA9IChwb3NbMF0gPj4gNSkgJiAweDAzOwpAQCAtNTI2LDI2ICszOTQsMjYgQEAKIAkJaW50IHF1ZXVlOwogCiAJCXN3aXRjaCAoYWNpKSB7Ci0JCWNhc2UgMToKKwkJY2FzZSAxOiAvKiBBQ19CSyAqLwogCQkJcXVldWUgPSAzOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMCkgfCBCSVQoMyk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDEpIHwgQklUKDIpOyAvKiBCSy8tICovCiAJCQlicmVhazsKLQkJY2FzZSAyOgorCQljYXNlIDI6IC8qIEFDX1ZJICovCiAJCQlxdWV1ZSA9IDE7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg0KSB8IEJJVCg1KTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7IC8qIENML1ZJICovCiAJCQlicmVhazsKLQkJY2FzZSAzOgorCQljYXNlIDM6IC8qIEFDX1ZPICovCiAJCQlxdWV1ZSA9IDA7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg2KSB8IEJJVCg3KTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7IC8qIFZPL05DICovCiAJCQlicmVhazsKLQkJY2FzZSAwOgorCQljYXNlIDA6IC8qIEFDX0JFICovCiAJCWRlZmF1bHQ6CiAJCQlxdWV1ZSA9IDI7CiAJCQlpZiAoYWNtKQotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMCkgfCBCSVQoMyk7IC8qIEJFL0VFICovCiAJCQlicmVhazsKIAkJfQogCkBAIC01NTksMjEgKzQyNyw0MSBAQAogCQkgICAgICAgbG9jYWwtPm1kZXYtPm5hbWUsIHF1ZXVlLCBhY2ksIGFjbSwgcGFyYW1zLmFpZnMsIHBhcmFtcy5jd19taW4sCiAJCSAgICAgICBwYXJhbXMuY3dfbWF4LCBwYXJhbXMudHhvcCk7CiAjZW5kaWYKLQkJLyogVE9ETzogaGFuZGxlIEFDTSAoYmxvY2sgVFgsIGZhbGxiYWNrIHRvIG5leHQgbG93ZXN0IGFsbG93ZWQKLQkJICogQUMgZm9yIG5vdykgKi8KLQkJaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLCBxdWV1ZSwgJnBhcmFtcykpIHsKKwkJaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHggJiYKKwkJICAgIGxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLCBxdWV1ZSwgJnBhcmFtcykpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNldCBUWCBxdWV1ZSAiCiAJCQkgICAgICAgInBhcmFtZXRlcnMgZm9yIHF1ZXVlICVkXG4iLCBsb2NhbC0+bWRldi0+bmFtZSwgcXVldWUpOwogCQl9CiAJfQogfQogCitzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfdGltKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywgdTE2IGFpZCkKK3sKKwl1OCBtYXNrOworCXU4IGluZGV4LCBpbmRleG4xLCBpbmRleG4yOworCXN0cnVjdCBpZWVlODAyMTFfdGltX2llICp0aW0gPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgZWxlbXMtPnRpbTsKKworCWFpZCAmPSAweDNmZmY7CisJaW5kZXggPSBhaWQgLyA4OworCW1hc2sgID0gMSA8PCAoYWlkICYgNyk7CisKKwlpbmRleG4xID0gdGltLT5iaXRtYXBfY3RybCAmIDB4ZmU7CisJaW5kZXhuMiA9IGVsZW1zLT50aW1fbGVuICsgaW5kZXhuMSAtIDQ7CisKKwlpZiAoaW5kZXggPCBpbmRleG4xIHx8IGluZGV4ID4gaW5kZXhuMikKKwkJcmV0dXJuIGZhbHNlOworCisJaW5kZXggLT0gaW5kZXhuMTsKKworCXJldHVybiAhISh0aW0tPnZpcnR1YWxfbWFwW2luZGV4XSAmIG1hc2spOworfQorCiBzdGF0aWMgdTMyIGllZWU4MDIxMV9oYW5kbGVfYnNzX2NhcGFiaWxpdHkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSAgIHUxNiBjYXBhYiwgYm9vbCBlcnBfdmFsaWQsIHU4IGVycCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKICNlbmRpZgogCXUzMiBjaGFuZ2VkID0gMDsKIAlib29sIHVzZV9wcm90ZWN0aW9uOwpAQCAtNTk2LDcgKzQ4NCw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENUUyBwcm90ZWN0aW9uICVzIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Byb3RlY3Rpb24gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotCQkJICAgICAgIGlmc3RhLT5ic3NpZCk7CisJCQkgICAgICAgaWZtZ2QtPmJzc2lkKTsKIAkJfQogI2VuZGlmCiAJCWJzc19jb25mLT51c2VfY3RzX3Byb3QgPSB1c2VfcHJvdGVjdGlvbjsKQEAgLTYxMCw3ICs0OTgsNyBAQAogCQkJICAgICAgICIgKEJTU0lEPSVwTSlcbiIsCiAJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKIAkJCSAgICAgICB1c2Vfc2hvcnRfcHJlYW1ibGUgPyAic2hvcnQiIDogImxvbmciLAotCQkJICAgICAgIGlmc3RhLT5ic3NpZCk7CisJCQkgICAgICAgaWZtZ2QtPmJzc2lkKTsKIAkJfQogI2VuZGlmCiAJCWJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUgPSB1c2Vfc2hvcnRfcHJlYW1ibGU7CkBAIC02MjQsNyArNTEyLDcgQEAKIAkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Nob3J0X3Nsb3QgPyAic2hvcnQiIDogImxvbmciLAotCQkJICAgICAgIGlmc3RhLT5ic3NpZCk7CisJCQkgICAgICAgaWZtZ2QtPmJzc2lkKTsKIAkJfQogI2VuZGlmCiAJCWJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCA9IHVzZV9zaG9ydF9zbG90OwpAQCAtNjM0LDU3ICs1MjIsNTcgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKIAltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKLQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQorCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwogCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJY2hhciAqYnVmOwogCXNpemVfdCBsZW47CiAJaW50IGk7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogCi0JaWYgKCFpZnN0YS0+YXNzb2NyZXFfaWVzICYmICFpZnN0YS0+YXNzb2NyZXNwX2llcykKKwlpZiAoIWlmbWdkLT5hc3NvY3JlcV9pZXMgJiYgIWlmbWdkLT5hc3NvY3Jlc3BfaWVzKQogCQlyZXR1cm47CiAKLQlidWYgPSBrbWFsbG9jKDUwICsgMiAqIChpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiArCi0JCQkJaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuKSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gKworCQkJCWlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQogCQlyZXR1cm47CiAKIAlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DSU5GTygiKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykgeworCWlmIChpZm1nZC0+YXNzb2NyZXFfaWVzKSB7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlcUlFcz0iKTsKLQkJZm9yIChpID0gMDsgaSA8IGlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXFfaWVzW2ldKTsKKwkJCQkgICAgICAgaWZtZ2QtPmFzc29jcmVxX2llc1tpXSk7CiAJCX0KIAl9Ci0JaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKSB7Ci0JCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQorCWlmIChpZm1nZC0+YXNzb2NyZXNwX2llcykgeworCQlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiAiKTsKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiUmVzcElFcz0iKTsKLQkJZm9yIChpID0gMDsgaSA8IGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgewogCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCi0JCQkJICAgICAgIGlmc3RhLT5hc3NvY3Jlc3BfaWVzW2ldKTsKKwkJCQkgICAgICAgaWZtZ2QtPmFzc29jcmVzcF9pZXNbaV0pOwogCQl9CiAJfQogCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIikiKTsKIAogCWlmIChsZW4gPiBJV19DVVNUT01fTUFYKSB7CiAJCWxlbiA9IHNwcmludGYoYnVmLCAiQVNTT0NSRVNQSUU9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKIAkJfQogCX0KIApAQCAtNjk5LDQwICs1ODcsMzkgQEAKIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICB1MzIgYnNzX2luZm9fY2hhbmdlZCkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWxfdG9faHcobG9jYWwpLT5jb25mOwogCiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAogCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm47Ci0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAorCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCiAJCQkJICAgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJaWYgKGJzcykgewogCQkvKiBzZXQgdGltaW5nIGluZm9ybWF0aW9uICovCi0JCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJzcy0+YmVhY29uX2ludDsKLQkJc2RhdGEtPnZpZi5ic3NfY29uZi50aW1lc3RhbXAgPSBic3MtPnRpbWVzdGFtcDsKKwkJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKKwkJc2RhdGEtPnZpZi5ic3NfY29uZi50aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOwogCQlzZGF0YS0+dmlmLmJzc19jb25mLmR0aW1fcGVyaW9kID0gYnNzLT5kdGltX3BlcmlvZDsKIAogCQlic3NfaW5mb19jaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfYnNzX2NhcGFiaWxpdHkoc2RhdGEsCi0JCQlic3MtPmNhcGFiaWxpdHksIGJzcy0+aGFzX2VycF92YWx1ZSwgYnNzLT5lcnBfdmFsdWUpOworCQkJYnNzLT5jYnNzLmNhcGFiaWxpdHksIGJzcy0+aGFzX2VycF92YWx1ZSwgYnNzLT5lcnBfdmFsdWUpOworCisJCWNmZzgwMjExX2hvbGRfYnNzKCZic3MtPmNic3MpOwogCiAJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCX0KIAotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCW1lbWNweShpZnN0YS0+cHJldl9ic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzZGF0YSwgaWZzdGEpOworCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCW1lbWNweShpZm1nZC0+cHJldl9ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzZGF0YSk7CiAKLQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7CisJaWZtZ2QtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOwogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDEpOwogCiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IDE7CkBAIC03NDUsNzIgKzYzMiwxMTUgQEAKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgYnNzX2luZm9fY2hhbmdlZCk7CiAKIAlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkgewotCQlpZiAobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApCisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSAmJgorCQkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgewogCQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQkJZWxzZSB7CisJCQkJICBtc2Vjc190b19qaWZmaWVzKAorCQkJCQlsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwotCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKLQkJCQkJICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCQl9CiAJfQogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29uKHNkYXRhLT5kZXYpOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcysrOwotCWlmIChpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKys7CisJaWYgKGlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKworCQkvKgorCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKKwkJICogYnNzIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlIEFQCisJCSAqLworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKworCQkvKgorCQkgKiBXZSBtaWdodCBoYXZlIGEgcGVuZGluZyBzY2FuIHdoaWNoIGhhZCBubyBjaGFuY2UgdG8gcnVuIHlldAorCQkgKiBkdWUgdG8gc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRS4KKwkJICogSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsgYWdhaW4KKwkJICovCisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0cnkgJWRcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQsCi0JCQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKKwkJCXNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCwKKwkJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMpOwogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsICZpZnN0YS0+cmVxdWVzdCk7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsICZpZm1nZC0+cmVxdWVzdCk7CiAKIAkvKiBEaXJlY3QgcHJvYmUgaXMgc2VudCB0byBicm9hZGNhc3QgYWRkcmVzcyBhcyBzb21lIEFQcwogCSAqIHdpbGwgbm90IGFuc3dlciB0byBkaXJlY3QgcGFja2V0IGluIHVuYXNzb2NpYXRlZCBzdGF0ZS4KIAkgKi8KIAlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsCi0JCQkJIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmF1dGhfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmF1dGhfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwl1OCAqaWVzOworCXNpemVfdCBpZXNfbGVuOworCisJaWZtZ2QtPmF1dGhfdHJpZXMrKzsKKwlpZiAoaWZtZ2QtPmF1dGhfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGlvbiB3aXRoIEFQICVwTSIKIAkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhLCBpZnN0YSk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKworCQkvKgorCQkgKiBXZSBtaWdodCBoYXZlIGEgcGVuZGluZyBzY2FuIHdoaWNoIGhhZCBubyBjaGFuY2UgdG8gcnVuIHlldAorCQkgKiBkdWUgdG8gc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURS4KKwkJICogSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsgYWdhaW4KKwkJICovCisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZSB3aXRoIEFQICVwTVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKIAotCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIGlmc3RhLCAxLCBOVUxMLCAwLCAwKTsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSB7CisJCWllcyA9IGlmbWdkLT5zbWVfYXV0aF9pZTsKKwkJaWVzX2xlbiA9IGlmbWdkLT5zbWVfYXV0aF9pZV9sZW47CisJfSBlbHNlIHsKKwkJaWVzID0gTlVMTDsKKwkJaWVzX2xlbiA9IDA7CisJfQorCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDEsIGlmbWdkLT5hdXRoX2FsZywgaWVzLCBpZXNfbGVuLAorCQkJICAgIGlmbWdkLT5ic3NpZCwgMCk7CisJaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPSAyOwogCi0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOwogfQogCiAvKgpAQCAtODE4LDMyICs3NDgsNDQgQEAKICAqIGlmIHNlbGYgZGlzY29ubmVjdGVkIG9yIGEgcmVhc29uIGNvZGUgZnJvbSB0aGUgQVAuCiAgKi8KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLCBib29sIGRlYXV0aCwKLQkJCQkgICBib29sIHNlbGZfZGlzY29ubmVjdGVkLCB1MTYgcmVhc29uKQorCQkJCSAgIGJvb2wgZGVhdXRoLCBib29sIHNlbGZfZGlzY29ubmVjdGVkLAorCQkJCSAgIHUxNiByZWFzb24pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsX3RvX2h3KGxvY2FsKS0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUzMiBjaGFuZ2VkID0gMCwgY29uZmlnX2NoYW5nZWQgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChkZWF1dGgpIHsKLQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JCWlmc3RhLT5hdXRoX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKIAl9Ci0JaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY190cmllcyA9IDA7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CiAKLQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzZGF0YSwgc3RhLT5zdGEuYWRkcik7CisJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKKworCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCisJCQkJICAgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisKKwlpZiAoYnNzKSB7CisJCWNmZzgwMjExX3VuaG9sZF9ic3MoJmJzcy0+Y2Jzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCX0KIAogCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCkgewogCQlpZiAoZGVhdXRoKQpAQCAtODU0LDIzICs3OTYsMjggQEAKIAkJCQlJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MsIHJlYXNvbik7CiAJfQogCi0JaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CiAJY2hhbmdlZCB8PSBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc2RhdGEpOwogCiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMCk7CiAJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9BU1NPQzsKIAlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gZmFsc2U7CiAKLQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhLCBpZnN0YSk7CisJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CiAKLQlpZiAoc2VsZl9kaXNjb25uZWN0ZWQgfHwgcmVhc29uID09IFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCkKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCB8fCByZWFzb24gPT0gV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKSB7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gZmFsc2U7CisJLyogY2hhbm5lbChfdHlwZSkgY2hhbmdlcyBhcmUgaGFuZGxlZCBieSBpZWVlODAyMTFfaHdfY29uZmlnICovCiAJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCWNvbmZpZ19jaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVDsKKworCWxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwgPSAwOwogCiAJZGVsX3RpbWVyX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CkBAIC04ODUsNyArODMyLDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKQEAgLTkwNiwyNyArODUzLDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBic3NfcHJpdmFjeTsKIAlpbnQgd2VwX3ByaXZhY3k7CiAJaW50IHByaXZhY3lfaW52b2tlZDsKIAotCWlmICghaWZzdGEgfHwgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUlYRURfQ0VMTCkpCisJaWYgKCFpZm1nZCB8fCAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSkKIAkJcmV0dXJuIDA7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAorCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCiAJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJaWYgKCFic3MpCiAJCXJldHVybiAwOwogCi0JYnNzX3ByaXZhY3kgPSAhIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CisJYnNzX3ByaXZhY3kgPSAhIShic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKIAl3ZXBfcHJpdmFjeSA9ICEhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzZGF0YSk7Ci0JcHJpdmFjeV9pbnZva2VkID0gISEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQpOworCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKIAogCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwogCkBAIC05MzYsMTA1ICs4ODMsMTczIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpZnN0YS0+YXNzb2NfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWZtZ2QtPmFzc29jX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hc3NvY190cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoIEFQICVwTSIKIAkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhLCBpZnN0YSk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwkJLyoKKwkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKKwkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUuCisJCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqLworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAJCXJldHVybjsKIAl9CiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhLCBpZnN0YSkpIHsKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbWlzbWF0Y2ggaW4gcHJpdmFjeSBjb25maWd1cmF0aW9uIGFuZCAiCiAJCSAgICAgICAibWl4ZWQtY2VsbCBkaXNhYmxlZCAtIGFib3J0IGFzc29jaWF0aW9uXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CiAKLQlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhKTsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpOworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpOwogfQogCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit2b2lkIGllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogeworCS8qCisJICogV2UgY2FuIHBvc3Rwb25lIHRoZSBtZ2QudGltZXIgd2hlbmV2ZXIgcmVjZWl2aW5nIHVuaWNhc3QgZnJhbWVzCisJICogZnJvbSBBUCBiZWNhdXNlIHdlIGtub3cgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyB3b3JraW5nIGJvdGggd2F5cworCSAqIGF0IHRoYXQgdGltZS4gQnV0IG11bHRpY2FzdCBmcmFtZXMgKGFuZCBoZW5jZSBhbHNvIGJlYWNvbnMpIG11c3QKKwkgKiBiZSBpZ25vcmVkIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byB0cmlnZ2VyIHRoZSB0aW1lciBkdXJpbmcKKwkgKiBkYXRhIGlkbGUgcGVyaW9kcyBmb3Igc2VuZGluZyB0aGUgcGVyaW9kaWNhbCBwcm9iZSByZXF1ZXN0IHRvCisJICogdGhlIEFQLgorCSAqLworCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCW1vZF90aW1lcigmc2RhdGEtPnUubWdkLnRpbWVyLAorCQkJICBqaWZmaWVzICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOworfQorCit2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJICAgICB1Lm1nZC5iZWFjb25fbG9zc193b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJpdmVyIHJlcG9ydHMgYmVhY29uIGxvc3MgZnJvbSBBUCAlcE0gIgorCSAgICAgICAiLSBzZW5kaW5nIHByb2JlIHJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCisJICAgICAgIHNkYXRhLT51Lm1nZC5ic3NpZCk7CisKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmJzc2lkLCBpZm1nZC0+c3NpZCwKKwkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKKworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOworfQorCit2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CisKKwlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAorCQkgICAmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYmVhY29uX2xvc3MpOworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgZGlzYXNzb2M7CisJYm9vbCBkaXNhc3NvYyA9IGZhbHNlOwogCiAJLyogVE9ETzogc3RhcnQgbW9uaXRvcmluZyBjdXJyZW50IEFQIHNpZ25hbCBxdWFsaXR5IGFuZCBudW1iZXIgb2YKIAkgKiBtaXNzZWQgYmVhY29ucy4gU2NhbiBvdGhlciBjaGFubmVscyBldmVyeSBub3cgYW5kIHRoZW4gYW5kIHNlYXJjaAogCSAqIGZvciBiZXR0ZXIgQVBzLiAqLwogCS8qIFRPRE86IHJlbW92ZSBleHBpcmVkIEJTU2VzICovCiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBTVEEgZW50cnkgZm9yIG93biBBUCAlcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlkaXNhc3NvYyA9IDE7Ci0JfSBlbHNlIHsKLQkJZGlzYXNzb2MgPSAwOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkJICAgICAgIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgewotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gUHJvYmVSZXNwIGZyb20gIgotCQkJCSAgICAgICAiY3VycmVudCBBUCAlcE0gLSBhc3N1bWUgb3V0IG9mICIKLQkJCQkgICAgICAgInJhbmdlXG4iLAotCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQkJCWRpc2Fzc29jID0gMTsKLQkJCX0gZWxzZQotCQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZzdGEtPmJzc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKLQkJCWlmc3RhLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCX0gZWxzZSB7Ci0JCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5sYXN0X3Byb2JlICsKLQkJCQkgICAgICAgSUVFRTgwMjExX1BST0JFX0lOVEVSVkFMKSkgewotCQkJCWlmc3RhLT5sYXN0X3Byb2JlID0gamlmZmllczsKLQkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmc3RhLT5ic3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQl9Ci0JCX0KKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWRpc2Fzc29jID0gdHJ1ZTsKKwkJZ290byB1bmxvY2s7CiAJfQogCisJaWYgKChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpICYmCisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhLT5sYXN0X3J4ICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gcHJvYmUgcmVzcG9uc2UgZnJvbSBBUCAlcE0gIgorCQkgICAgICAgIi0gZGlzYXNzb2NpYXRpbmdcbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlkaXNhc3NvYyA9IHRydWU7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKgorCSAqIEJlYWNvbiBmaWx0ZXJpbmcgaXMgb25seSBlbmFibGVkIHdpdGggcG93ZXIgc2F2ZSBhbmQgdGhlbiB0aGUKKwkgKiBzdGFjayBzaG91bGQgbm90IGNoZWNrIGZvciBiZWFjb24gbG9zcy4KKwkgKi8KKwlpZiAoISgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIpICYmCisJICAgICAgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpKSAmJgorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsCisJCSAgICAgICBpZm1nZC0+bGFzdF9iZWFjb24gKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gbG9zcyBmcm9tIEFQICVwTSAiCisJCSAgICAgICAiLSBzZW5kaW5nIHByb2JlIHJlcXVlc3RcbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCisJCQkJCSBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOworCQlnb3RvIHVubG9jazsKKworCX0KKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9QUk9CRV9JRExFX1RJTUUpKSB7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmJzc2lkLCBpZm1nZC0+c3NpZCwKKwkJCQkJIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CisJfQorCisgdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGRpc2Fzc29jKQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgdHJ1ZSwKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSwKIAkJCQkJV0xBTl9SRUFTT05fUFJFVl9BVVRIX05PVF9WQUxJRCk7CiAJZWxzZQotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsKIAkJCQkgICAgICBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOwotCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEsIGlmc3RhKTsKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpIHsKKwkJLyogV2FpdCBmb3IgU01FIHRvIHJlcXVlc3QgYXNzb2NpYXRpb24gKi8KKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCX0gZWxzZQorCQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogewpAQCAtMTA0NSw1MCArMTA2MCwzNyBAQAogCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwogCWlmICghZWxlbXMuY2hhbGxlbmdlKQogCQlyZXR1cm47Ci0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgaWZzdGEsIDMsIGVsZW1zLmNoYWxsZW5nZSAtIDIsCi0JCQkgICAgZWxlbXMuY2hhbGxlbmdlX2xlbiArIDIsIDEpOworCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDMsIHNkYXRhLT51Lm1nZC5hdXRoX2FsZywKKwkJCSAgICBlbGVtcy5jaGFsbGVuZ2UgLSAyLCBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwKKwkJCSAgICBzZGF0YS0+dS5tZ2QuYnNzaWQsIDEpOworCXNkYXRhLT51Lm1nZC5hdXRoX3RyYW5zYWN0aW9uID0gNDsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKIAlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CiAJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKIAlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCS8qCi0JCSAqIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUwotCQkgKiBuZXR3b3JrcyBhbmQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHNlZW0gdG8gdXNlIGl0LgotCQkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQotCQkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KLQkJICovCi0JCWlmIChhdXRoX2FsZyAhPSBXTEFOX0FVVEhfT1BFTiB8fCBhdXRoX3RyYW5zYWN0aW9uICE9IDEpCi0JCQlyZXR1cm47Ci0JCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIGlmc3RhLCAyLCBOVUxMLCAwLCAwKTsKLQl9Ci0KLQlpZiAoYXV0aF9hbGcgIT0gaWZzdGEtPmF1dGhfYWxnIHx8Ci0JICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24pCisJaWYgKGF1dGhfYWxnICE9IGlmbWdkLT5hdXRoX2FsZyB8fAorCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uKQogCQlyZXR1cm47CiAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewpAQCAtMTA5NywxNSArMTA5OSwxNSBAQAogCQkJY29uc3QgaW50IG51bV9hbGdzID0gQVJSQVlfU0laRShhbGdzKTsKIAkJCWludCBpLCBwb3M7CiAJCQlhbGdzWzBdID0gYWxnc1sxXSA9IGFsZ3NbMl0gPSAweGZmOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCiAJCQkJYWxnc1swXSA9IFdMQU5fQVVUSF9PUEVOOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCiAJCQkJYWxnc1sxXSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCiAJCQkJYWxnc1syXSA9IFdMQU5fQVVUSF9MRUFQOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTikKKwkJCWlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCiAJCQkJcG9zID0gMDsKLQkJCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKKwkJCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKIAkJCQlwb3MgPSAxOwogCQkJZWxzZQogCQkJCXBvcyA9IDI7CkBAIC0xMTEzLDEwNSArMTExNSwxMTIgQEAKIAkJCQlwb3MrKzsKIAkJCQlpZiAocG9zID49IG51bV9hbGdzKQogCQkJCQlwb3MgPSAwOwotCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZzdGEtPmF1dGhfYWxnIHx8CisJCQkJaWYgKGFsZ3NbcG9zXSA9PSBpZm1nZC0+YXV0aF9hbGcgfHwKIAkJCQkgICAgYWxnc1twb3NdID09IDB4ZmYpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChhbGdzW3Bvc10gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkgJiYKIAkJCQkgICAgIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc2RhdGEpKQogCQkJCQljb250aW51ZTsKLQkJCQlpZnN0YS0+YXV0aF9hbGcgPSBhbGdzW3Bvc107CisJCQkJaWZtZ2QtPmF1dGhfYWxnID0gYWxnc1twb3NdOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCXN3aXRjaCAoaWZtZ2QtPmF1dGhfYWxnKSB7CiAJY2FzZSBXTEFOX0FVVEhfT1BFTjoKIAljYXNlIFdMQU5fQVVUSF9MRUFQOgotCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIGlmc3RhKTsKKwljYXNlIFdMQU5fQVVUSF9GVDoKKwkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhKTsKKwkJY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOwogCQlicmVhazsKIAljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgotCQlpZiAoaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgaWZzdGEpOwotCQllbHNlCi0JCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIGlmc3RhLCBtZ210LCBsZW4pOworCQlpZiAoaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkgeworCQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhKTsKKwkJCWNmZzgwMjExX3NlbmRfcnhfYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKKwkJfSBlbHNlCisJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIG1nbXQsIGxlbik7CiAJCWJyZWFrOwogCX0KIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiByZWFzb25fY29kZTsKIAogCWlmIChsZW4gPCAyNCArIDIpCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQogCQlyZXR1cm47CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0ZWQgKFJlYXNvbjogJXUpXG4iLAogCQkJCXNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAotCSAgICBpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAotCSAgICBpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgJiYKKwkgICAgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFIHx8CisJICAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAorCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCBmYWxzZSwgMCk7Ci0JaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQ7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgZmFsc2UsIDApOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOworCWNmZzgwMjExX3NlbmRfcnhfZGVhdXRoKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOwogfQogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgcmVhc29uX2NvZGU7CiAKIAlpZiAobGVuIDwgMjQgKyAyKQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRpc2Fzc29jLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGVkIChSZWFzb246ICV1KVxuIiwKIAkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpICYmCisJICAgIGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKKwljZmc4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOwogfQogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJCSBzaXplX3QgbGVuLAogCQkJCQkgaW50IHJlYXNzb2MpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTY0IHJhdGVzLCBiYXNpY19yYXRlczsKKwl1MzIgcmF0ZXMsIGJhc2ljX3JhdGVzOwogCXUxNiBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgYWlkOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnNkYXRhLT52aWYuYnNzX2NvbmY7CkBAIC0xMjI0LDEzICsxMjMzLDEzIEBACiAJLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAogCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4gKi8KIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCiAJCXJldHVybjsKIAogCWlmIChsZW4gPCAyNCArIDYpCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCiAJY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKQEAgLTEyNDIsMTMgKzEyNTEsMzEgQEAKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc3NvYyA/ICJSZWEiIDogIkEiLCBtZ210LT5zYSwKIAkgICAgICAgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsICh1MTYpKGFpZCAmIH4oQklUKDE1KSB8IEJJVCgxNCkpKSk7CiAKKwlwb3MgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CisKKwlpZiAoc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfQVNTT0NfUkVKRUNURURfVEVNUE9SQVJJTFkgJiYKKwkgICAgZWxlbXMudGltZW91dF9pbnQgJiYgZWxlbXMudGltZW91dF9pbnRfbGVuID09IDUgJiYKKwkgICAgZWxlbXMudGltZW91dF9pbnRbMF0gPT0gV0xBTl9USU1FT1VUX0FTU09DX0NPTUVCQUNLKSB7CisJCXUzMiB0dSwgbXM7CisJCXR1ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGVsZW1zLnRpbWVvdXRfaW50ICsgMSk7CisJCW1zID0gdHUgKiAxMDI0IC8gMTAwMDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCByZWplY3RlZCBhc3NvY2lhdGlvbiB0ZW1wb3JhcmlseTsgIgorCQkgICAgICAgImNvbWViYWNrIGR1cmF0aW9uICV1IFRVICgldSBtcylcbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB0dSwgbXMpOworCQlpZiAobXMgPiBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCkKKwkJCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLAorCQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKIAkJLyogaWYgdGhpcyB3YXMgYSByZWFzc29jaWF0aW9uLCBlbnN1cmUgd2UgdHJ5IGEgImZ1bGwiCiAJCSAqIGFzc29jaWF0aW9uIG5leHQgdGltZS4gVGhpcyB3b3JrcyBhcm91bmQgc29tZSBicm9rZW4gQVBzCiAJCSAqIHdoaWNoIGRvIG5vdCBjb3JyZWN0bHkgcmVqZWN0IHJlYXNzb2NpYXRpb24gcmVxdWVzdHMuICovCi0JCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjU3LDkgKzEyODQsNiBAQAogCQkgICAgICAgInNldFxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWlkKTsKIAlhaWQgJj0gfihCSVQoMTUpIHwgQklUKDE0KSk7CiAKLQlwb3MgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7Ci0JaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7Ci0KIAlpZiAoIWVsZW1zLnN1cHBfcmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBTdXBwUmF0ZXMgZWxlbWVudCBpbiBBc3NvY1Jlc3BcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTEyNjcsNDAgKzEyOTEsMjkgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWlmc3RhLT5haWQgPSBhaWQ7Ci0JaWZzdGEtPmFwX2NhcGFiID0gY2FwYWJfaW5mbzsKKwlpZm1nZC0+YWlkID0gYWlkOworCWlmbWdkLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87CiAKLQlrZnJlZShpZnN0YS0+YXNzb2NyZXNwX2llcyk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKLQlpZnN0YS0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVzcF9pZXMpCi0JCW1lbWNweShpZnN0YS0+YXNzb2NyZXNwX2llcywgcG9zLCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4pOworCWtmcmVlKGlmbWdkLT5hc3NvY3Jlc3BfaWVzKTsKKwlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4gPSBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpOworCWlmbWdkLT5hc3NvY3Jlc3BfaWVzID0ga21hbGxvYyhpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4sIEdGUF9LRVJORUwpOworCWlmIChpZm1nZC0+YXNzb2NyZXNwX2llcykKKwkJbWVtY3B5KGlmbWdkLT5hc3NvY3Jlc3BfaWVzLCBwb3MsIGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAkvKiBBZGQgU1RBIGVudHJ5IGZvciB0aGUgQVAgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KIAkJbmV3c3RhID0gdHJ1ZTsKIAotCQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaWZzdGEtPmJzc2lkLCBHRlBfQVRPTUlDKTsKKwkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmbWdkLT5ic3NpZCwgR0ZQX0FUT01JQyk7CiAJCWlmICghc3RhKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvYyBTVEEgZW50cnkgZm9yIgogCQkJICAgICAgICIgdGhlIEFQXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCi0JCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkJaWYgKGJzcykgewotCQkJc3RhLT5sYXN0X3NpZ25hbCA9IGJzcy0+c2lnbmFsOwotCQkJc3RhLT5sYXN0X3F1YWwgPSBic3MtPnF1YWw7Ci0JCQlzdGEtPmxhc3Rfbm9pc2UgPSBic3MtPm5vaXNlOwotCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCX0KIAogCQkvKiB1cGRhdGUgbmV3IHN0YSB3aXRoIGl0cyBsYXN0IHJ4IGFjdGl2aXR5ICovCiAJCXN0YS0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC0xMzY3LDcgKzEzODAsOCBAQAogCWVsc2UKIAkJc2RhdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOwogCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtKQorCS8qIElmIFRLSVAvV0VQIGlzIHVzZWQsIG5vIG5lZWQgdG8gcGFyc2UgQVAncyBIVCBjYXBhYmlsaXRpZXMgKi8KKwlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKQogCQlpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc2JhbmQsCiAJCQkJZWxlbXMuaHRfY2FwX2VsZW0sICZzdGEtPnN0YS5odF9jYXApOwogCkBAIC0xMzc1LDYgKzEzODksOSBAQAogCiAJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOwogCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpCisJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9NRlApOworCiAJaWYgKGVsZW1zLndtbV9wYXJhbSkKIAkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1dNRSk7CiAKQEAgLTEzOTEsMTEgKzE0MDgsMTIgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChlbGVtcy53bW1fcGFyYW0pCi0JCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZzdGEsIGVsZW1zLndtbV9wYXJhbSwKKwkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAKIAlpZiAoZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSAmJgotCSAgICAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCisJICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgorCSAgICAhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpCiAJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2VuYWJsZV9odChzZGF0YSwgZWxlbXMuaHRfaW5mb19lbGVtLAogCQkJCQkgICAgICAgYXBfaHRfY2FwX2ZsYWdzKTsKIApAQCAtMTQwMywxMzYgKzE0MjEsMTkgQEAKIAkgKiBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoKSB3aWxsIHRlbGwgdGhlIGRyaXZlciAqLwogCWJzc19jb25mLT5haWQgPSBhaWQ7CiAJYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHkgPSBjYXBhYl9pbmZvOwotCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzZGF0YSwgaWZzdGEsIGNoYW5nZWQpOworCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzZGF0YSwgY2hhbmdlZCk7CiAKLQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSwgaWZzdGEpOworCS8qCisJICogaW5pdGlhbGlzZSB0aGUgdGltZSBvZiBsYXN0IGJlYWNvbiB0byBiZSB0aGUgYXNzb2NpYXRpb24gdGltZSwKKwkgKiBvdGhlcndpc2UgYmVhY29uIGxvc3MgY2hlY2sgd2lsbCB0cmlnZ2VyIGltbWVkaWF0ZWx5CisJICovCisJaWZtZ2QtPmxhc3RfYmVhY29uID0gamlmZmllczsKKworCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhKTsKKwljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOwogfQogCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IHJlcywgcmF0ZXMsIGksIGo7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTggKnBvczsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCi0JCSAgICAgICAicmVzcG9uc2VcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQkvKiBSZW1vdmUgcG9zc2libGUgU1RBIGVudHJpZXMgZnJvbSBvdGhlciBJQlNTIG5ldHdvcmtzLiAqLwotCXN0YV9pbmZvX2ZsdXNoX2RlbGF5ZWQoc2RhdGEpOwotCi0JaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgewotCQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCi0JCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwotCX0KLQltZW1jcHkoaWZzdGEtPmJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYnNzLT5iZWFjb25faW50ID49IDEwID8gYnNzLT5iZWFjb25faW50IDogMTA7Ci0KLQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IGJzcy0+Y2FwYWJpbGl0eSAmCi0JCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7Ci0KLQlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGJzcy0+ZnJlcSk7Ci0KLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JLyogQnVpbGQgSUJTUyBwcm9iZSByZXNwb25zZSAqLwotCi0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKLQkJc2tiX3B1dChza2IsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJCUlFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKLQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0KLQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7Ci0JbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQoYnNzLT50aW1lc3RhbXApOwotCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihic3MtPmNhcGFiaWxpdHkpOwotCi0JcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gaWZzdGEtPnNzaWRfbGVuOwotCW1lbWNweShwb3MsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCi0JcmF0ZXMgPSBic3MtPnN1cHBfcmF0ZXNfbGVuOwotCWlmIChyYXRlcyA+IDgpCi0JCXJhdGVzID0gODsKLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCSpwb3MrKyA9IHJhdGVzOwotCW1lbWNweShwb3MsIGJzcy0+c3VwcF9yYXRlcywgcmF0ZXMpOwotCi0JaWYgKGJzcy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMSk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKLQkJKnBvcysrID0gMTsKLQkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJzcy0+ZnJlcSk7Ci0JfQotCi0JcG9zID0gc2tiX3B1dChza2IsIDIgKyAyKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9JQlNTX1BBUkFNUzsKLQkqcG9zKysgPSAyOwotCS8qIEZJWDogc2V0IEFUSU0gd2luZG93IGJhc2VkIG9uIHNjYW4gcmVzdWx0cyAqLwotCSpwb3MrKyA9IDA7Ci0JKnBvcysrID0gMDsKLQotCWlmIChic3MtPnN1cHBfcmF0ZXNfbGVuID4gOCkgewotCQlyYXRlcyA9IGJzcy0+c3VwcF9yYXRlc19sZW4gLSA4OwotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCSpwb3MrKyA9IHJhdGVzOwotCQltZW1jcHkocG9zLCAmYnNzLT5zdXBwX3JhdGVzWzhdLCByYXRlcyk7Ci0JfQotCi0JaWZzdGEtPnByb2JlX3Jlc3AgPSBza2I7Ci0KLQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOwotCi0KLQlyYXRlcyA9IDA7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJaW50IGJpdHJhdGUgPSAoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1OwotCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKLQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSBiaXRyYXRlKQotCQkJCXJhdGVzIHw9IEJJVChqKTsKLQl9Ci0JaWZzdGEtPnN1cHBfcmF0ZXNfYml0c1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOwotCi0JaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgYnNzKTsKLQotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRDsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIHRydWUpOwotCi0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICBzaXplX3QgbGVuLApAQCAtMTU0MywxMSArMTQ0NCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IGZyZXE7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JdTY0IGJlYWNvbl90aW1lc3RhbXAsIHJ4X3RpbWVzdGFtcDsKLQl1NjQgc3VwcF9yYXRlcyA9IDA7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOwogCiAJaWYgKGVsZW1zLT5kc19wYXJhbXMgJiYgZWxlbXMtPmRzX3BhcmFtc19sZW4gPT0gMSkKIAkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShlbGVtcy0+ZHNfcGFyYW1zWzBdKTsKQEAgLTE1NTksMTEyICsxNDU2LDE2IEBACiAJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgZWxlbXMtPnN1cHBfcmF0ZXMgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCXN1cHBfcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgZWxlbXMsIGJhbmQpOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKLQkJaWYgKHN0YSkgewotCQkJdTY0IHByZXZfcmF0ZXM7Ci0KLQkJCXByZXZfcmF0ZXMgPSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdOwotCQkJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0JCQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8Ci0JCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQkJaWYgKHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gIT0gcHJldl9yYXRlcykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgotCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgotCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCi0JCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkJICAgIHN0YS0+c3RhLmFkZHIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHByZXZfcmF0ZXMsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN1cHBfcmF0ZXMsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0pOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOwotCQl9Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQotCiAJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShsb2NhbCwgcnhfc3RhdHVzLCBtZ210LCBsZW4sIGVsZW1zLAotCQkJCQlmcmVxLCBiZWFjb24pOworCQkJCQljaGFubmVsLCBiZWFjb24pOwogCWlmICghYnNzKQogCQlyZXR1cm47CiAKLQkvKiB3YXMganVzdCB1cGRhdGVkIGluIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUgKi8KLQliZWFjb25fdGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7Ci0KLQkvKgotCSAqIEluIFNUQSBtb2RlLCB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgc2hvdWxkIG5vdCBiZSBvdmVycmlkZGVuCi0JICogYnkgYmVhY29ucyBiZWNhdXNlIHRoZXkncmUgbm90IG5lY2Vzc2FyaWx5IGFjY3VyYXRlIHRoZXJlLgotCSAqLwotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgYnNzLT5sYXN0X3Byb2JlX3Jlc3AgJiYgYmVhY29uKSB7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2hlY2sgaWYgd2UgbmVlZCB0byBtZXJnZSBJQlNTICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBiZWFjb24gJiYKLQkgICAgYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MgJiYKLQkgICAgYnNzLT5mcmVxID09IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxICYmCi0JICAgIGVsZW1zLT5zc2lkX2xlbiA9PSBzZGF0YS0+dS5zdGEuc3NpZF9sZW4gJiYKLQkgICAgbWVtY21wKGVsZW1zLT5zc2lkLCBzZGF0YS0+dS5zdGEuc3NpZCwKLQkJCQlzZGF0YS0+dS5zdGEuc3NpZF9sZW4pID09IDApIHsKLQkJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkgewotCQkJLyogaW4gb3JkZXIgZm9yIGNvcnJlY3QgSUJTUyBtZXJnaW5nIHdlIG5lZWQgbWFjdGltZQotCQkJICoKLQkJCSAqIHNpbmNlIG1hY3RpbWUgaXMgZGVmaW5lZCBhcyB0aGUgdGltZSB0aGUgZmlyc3QgZGF0YQotCQkJICogc3ltYm9sIG9mIHRoZSBmcmFtZSBoaXRzIHRoZSBQSFksIGFuZCB0aGUgdGltZXN0YW1wCi0JCQkgKiBvZiB0aGUgYmVhY29uIGlzIGRlZmluZWQgYXMgInRoZSB0aW1lIHRoYXQgdGhlIGRhdGEKLQkJCSAqIHN5bWJvbCBjb250YWluaW5nIHRoZSBmaXJzdCBiaXQgb2YgdGhlIHRpbWVzdGFtcCBpcwotCQkJICogdHJhbnNtaXR0ZWQgdG8gdGhlIFBIWSBwbHVzIHRoZSB0cmFuc21pdHRpbmcgU1RB4oCZcwotCQkJICogZGVsYXlzIHRocm91Z2ggaXRzIGxvY2FsIFBIWSBmcm9tIHRoZSBNQUMtUEhZCi0JCQkgKiBpbnRlcmZhY2UgdG8gaXRzIGludGVyZmFjZSB3aXRoIHRoZSBXTSIKLQkJCSAqICg4MDIuMTEgMTEuMS4yKSAtIGVxdWFscyB0aGUgdGltZSB0aGlzIGJpdCBhcnJpdmVzIGF0Ci0JCQkgKiB0aGUgcmVjZWl2ZXIgLSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IHRoZQotCQkJICogb2Zmc2V0IGJldHdlZW4gdGhlIHR3by4KLQkJCSAqIGUuZzogYXQgMSBNQml0IHRoYXQgbWVhbnMgbWFjdGltZSBpcyAxOTIgdXNlYyBlYXJsaWVyCi0JCQkgKiAoPTI0IGJ5dGVzICogOCB1c2Vjcy9ieXRlKSB0aGFuIHRoZSBiZWFjb24gdGltZXN0YW1wLgotCQkJICovCi0JCQlpbnQgcmF0ZTsKLQkJCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSB7Ci0JCQkJcmF0ZSA9IDY1OyAvKiBUT0RPOiBIVCByYXRlcyAqLwotCQkJfSBlbHNlIHsKLQkJCQlyYXRlID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXS0+Ci0JCQkJCWJpdHJhdGVzW3J4X3N0YXR1cy0+cmF0ZV9pZHhdLmJpdHJhdGU7Ci0JCQl9Ci0JCQlyeF90aW1lc3RhbXAgPSByeF9zdGF0dXMtPm1hY3RpbWUgKyAoMjQgKiA4ICogMTAgLyByYXRlKTsKLQkJfSBlbHNlIGlmIChsb2NhbCAmJiBsb2NhbC0+b3BzICYmIGxvY2FsLT5vcHMtPmdldF90c2YpCi0JCQkvKiBzZWNvbmQgYmVzdCBvcHRpb246IGdldCBjdXJyZW50IFRTRiAqLwotCQkJcnhfdGltZXN0YW1wID0gbG9jYWwtPm9wcy0+Z2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwotCQllbHNlCi0JCQkvKiBjYW4ndCBtZXJnZSB3aXRob3V0IGtub3dpbmcgdGhlIFRTRiAqLwotCQkJcnhfdGltZXN0YW1wID0gLTFMTFU7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJYIGJlYWNvbiBTQT0lcE0gQlNTSUQ9IgotCQkgICAgICAgIiVwTSBUU0Y9MHglbGx4IEJDTj0weCVsbHggZGlmZj0lbGxkIEAlbHVcbiIsCi0JCSAgICAgICBtZ210LT5zYSwgbWdtdC0+YnNzaWQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJ4X3RpbWVzdGFtcCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmVhY29uX3RpbWVzdGFtcCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHJ4X3RpbWVzdGFtcCAtIGJlYWNvbl90aW1lc3RhbXApLAotCQkgICAgICAgamlmZmllcyk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQkJaWYgKGJlYWNvbl90aW1lc3RhbXAgPiByeF90aW1lc3RhbXApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKLQkJCSAgICAgICAibG9jYWwgVFNGIC0gSUJTUyBtZXJnZSB3aXRoIEJTU0lEICVwTVxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5ic3NpZCk7Ci0jZW5kaWYKLQkJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCAmc2RhdGEtPnUuc3RhLCBic3MpOwotCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKLQkJfQorCWlmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW0gJiYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbV9sZW4gPT0gMykgJiYKKwkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtID0KKwkJCShzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKillbGVtcy0+Y2hfc3dpdGNoX2VsZW07CisJCWllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsIHN3X2VsZW0sIGJzcyk7CiAJfQogCiAJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CkBAIC0xNjc2LDkgKzE0NzcsMTEgQEAKIAkJCQkJIHNpemVfdCBsZW4sCiAJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CiAJc2l6ZV90IGJhc2VsZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAogCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCiAJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KQEAgLTE2OTQsMjUgKzE0OTcsMjcgQEAKIAogCS8qIGRpcmVjdCBwcm9iZSBtYXkgYmUgcGFydCBvZiB0aGUgYXNzb2NpYXRpb24gZmxvdyAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLAotCQkJCQkJCSZpZnN0YS0+cmVxdWVzdCkpIHsKKwkJCSAgICAgICAmaWZtZ2QtPnJlcXVlc3QpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSk7CiAJfQotfQogCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Cit9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgIHNpemVfdCBsZW4sCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXNpemVfdCBiYXNlbGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXUzMiBjaGFuZ2VkID0gMDsKLQlib29sIGVycF92YWxpZDsKKwlib29sIGVycF92YWxpZCwgZGlyZWN0ZWRfdGltOwogCXU4IGVycF92YWx1ZSA9IDA7CiAKIAkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLwpAQCAtMTcyNiwxNSArMTUzMSw0MyBAQAogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm47Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB8fAotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB8fAorCSAgICBtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZzdGEsIGVsZW1zLndtbV9wYXJhbSwKKwlpZiAocnhfc3RhdHVzLT5mcmVxICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmbWdkLCBlbGVtcy53bW1fcGFyYW0sCiAJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykgeworCQlkaXJlY3RlZF90aW0gPSBpZWVlODAyMTFfY2hlY2tfdGltKCZlbGVtcywgaWZtZ2QtPmFpZCk7CisKKwkJaWYgKGRpcmVjdGVkX3RpbSkgeworCQkJaWYgKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKKwkJCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJCSAgICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJCQl9IGVsc2UgeworCQkJCWxvY2FsLT5wc3BvbGxpbmcgPSB0cnVlOworCisJCQkJLyoKKwkJCQkgKiBIZXJlIGlzIGFzc3VtZWQgdGhhdCB0aGUgZHJpdmVyIHdpbGwgYmUKKwkJCQkgKiBhYmxlIHRvIHNlbmQgcHMtcG9sbCBmcmFtZSBhbmQgcmVjZWl2ZSBhCisJCQkJICogcmVzcG9uc2UgZXZlbiB0aG91Z2ggcG93ZXIgc2F2ZSBtb2RlIGlzCisJCQkJICogZW5hYmxlZCwgYnV0IHNvbWUgZHJpdmVycyBtaWdodCByZXF1aXJlCisJCQkJICogdG8gZGlzYWJsZSBwb3dlciBzYXZlIGhlcmUuIFRoaXMgbmVlZHMKKwkJCQkgKiB0byBiZSBpbnZlc3RpZ2F0ZWQuCisJCQkJICovCisJCQkJaWVlZTgwMjExX3NlbmRfcHNwb2xsKGxvY2FsLCBzZGF0YSk7CisJCQl9CisJCX0KKwl9CiAKIAlpZiAoZWxlbXMuZXJwX2luZm8gJiYgZWxlbXMuZXJwX2luZm9fbGVuID49IDEpIHsKIAkJZXJwX3ZhbGlkID0gdHJ1ZTsKQEAgLTE3NDcsMTQgKzE1ODAsMTUgQEAKIAkJCWVycF92YWxpZCwgZXJwX3ZhbHVlKTsKIAogCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0pIHsKKwlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSAmJgorCSAgICAhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpIHsKIAkJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCQl1MTYgYXBfaHRfY2FwX2ZsYWdzOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAkJaWYgKCFzdGEpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuOwpAQCAtMTc3OCw5MiArMTYxMiwyOCBAQAogCQkgKiBmb3IgdGhlIEJTU0lEIHdlIGFyZSBhc3NvY2lhdGVkIHRvICovCiAJCXJlZ3VsYXRvcnlfaGludF8xMWQobG9jYWwtPmh3LndpcGh5LAogCQkJZWxlbXMuY291bnRyeV9lbGVtLCBlbGVtcy5jb3VudHJ5X2VsZW1fbGVuKTsKKworCQkvKiBUT0RPOiBJQlNTIGFsc28gbmVlZHMgdGhpcyAqLworCQlpZiAoZWxlbXMucHdyX2NvbnN0cl9lbGVtKQorCQkJaWVlZTgwMjExX2hhbmRsZV9wd3JfY29uc3RyKHNkYXRhLAorCQkJCWxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvKSwKKwkJCQllbGVtcy5wd3JfY29uc3RyX2VsZW0sCisJCQkJZWxlbXMucHdyX2NvbnN0cl9lbGVtX2xlbik7CiAJfQogCiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwogfQogCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJCXNpemVfdCBsZW4sCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IHR4X2xhc3RfYmVhY29uOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOwotCXU4ICpwb3MsICplbmQ7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8Ci0JICAgIGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQgfHwKLQkgICAgbGVuIDwgMjQgKyAyIHx8ICFpZnN0YS0+cHJvYmVfcmVzcCkKLQkJcmV0dXJuOwotCi0JaWYgKGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKQotCQl0eF9sYXN0X2JlYWNvbiA9IGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKGxvY2FsX3RvX2h3KGxvY2FsKSk7Ci0JZWxzZQotCQl0eF9sYXN0X2JlYWNvbiA9IDE7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggUHJvYmVSZXEgU0E9JXBNIERBPSVwTSBCU1NJRD0lcE0iCi0JICAgICAgICIgKHR4X2xhc3RfYmVhY29uPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EsIG1nbXQtPmRhLAotCSAgICAgICBtZ210LT5ic3NpZCwgdHhfbGFzdF9iZWFjb24pOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0KLQlpZiAoIXR4X2xhc3RfYmVhY29uKQotCQlyZXR1cm47Ci0KLQlpZiAobWVtY21wKG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwICYmCi0JICAgIG1lbWNtcChtZ210LT5ic3NpZCwgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm47Ci0KLQllbmQgPSAoKHU4ICopIG1nbXQpICsgbGVuOwotCXBvcyA9IG1nbXQtPnUucHJvYmVfcmVxLnZhcmlhYmxlOwotCWlmIChwb3NbMF0gIT0gV0xBTl9FSURfU1NJRCB8fAotCSAgICBwb3MgKyAyICsgcG9zWzFdID4gZW5kKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgotCQkgICAgICAgImZyb20gJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JaWYgKHBvc1sxXSAhPSAwICYmCi0JICAgIChwb3NbMV0gIT0gaWZzdGEtPnNzaWRfbGVuIHx8Ci0JICAgICBtZW1jbXAocG9zICsgMiwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbikgIT0gMCkpIHsKLQkJLyogSWdub3JlIFByb2JlUmVxIGZvciBmb3JlaWduIFNTSUQgKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIFJlcGx5IHdpdGggUHJvYmVSZXNwICovCi0Jc2tiID0gc2tiX2NvcHkoaWZzdGEtPnByb2JlX3Jlc3AsIEdGUF9LRVJORUwpOwotCWlmICghc2tiKQotCQlyZXR1cm47Ci0KLQlyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7Ci0JbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZW5kaW5nIFByb2JlUmVzcCB0byAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlc3AtPmRhKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBmYzsKIAogCWlmIChza2ItPmxlbiA8IDI0KQotCQlnb3RvIGZhaWw7Ci0KLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKQEAgLTE4NzgsMTEzICsxNjQ4LDY4IEBACiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQkJc2tiX3F1ZXVlX3RhaWwoJmlmc3RhLT5za2JfcXVldWUsIHNrYik7Ci0JCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKLQkJcmV0dXJuOworCQlza2JfcXVldWVfdGFpbCgmc2RhdGEtPnUubWdkLnNrYl9xdWV1ZSwgc2tiKTsKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KIAotIGZhaWw6Ci0Ja2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBmYzsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQogCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOwogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwogCiAJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbiwKLQkJCQkJICAgIHJ4X3N0YXR1cyk7Ci0JCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6Ci0JCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJICAgICByeF9zdGF0dXMpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIHJ4X3N0YXR1cyk7CisJCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSByeF9zdGF0dXMpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbiwgMCk7CisJCWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOworCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwogCQlicmVhazsKIAl9CiAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IGFjdGl2ZSA9IDA7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHN0YS0+c2RhdGEgPT0gc2RhdGEgJiYKLQkJICAgIHRpbWVfYWZ0ZXIoc3RhLT5sYXN0X3J4ICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwsCi0JCQkgICAgICAgamlmZmllcykpIHsKLQkJCWFjdGl2ZSsrOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiBhY3RpdmU7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCi0JaWVlZTgwMjExX3N0YV9leHBpcmUoc2RhdGEsIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQpOwotCWlmIChpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKLQkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci19Ci0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQogCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCk7CisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKIAlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CkBAIC0xOTkyLDI5OCArMTcxNywxMTIgQEAKIAkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CiAJfQogCi0JaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCA9IC0xOyAvKiBhbGxvdyBhbnkgV01NIHVwZGF0ZSAqLworCWlmbWdkLT53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsgLyogYWxsb3cgYW55IFdNTSB1cGRhdGUgKi8KIAogCi0JaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47Ci0JZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKLQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9MRUFQOworCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOworCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7CisJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0ZUKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfRlQ7CiAJZWxzZQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IC0xOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwotCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQlpZnN0YS0+YXV0aF90cmllcyA9IDA7Ci0JaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7CisJaWZtZ2QtPmF1dGhfdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY190cmllcyA9IDA7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLT5kZXYpOwogfQogCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9tYXRjaF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICAgY29uc3QgY2hhciAqc3NpZCwgaW50IHNzaWRfbGVuKQorc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWludCB0bXAsIGhpZGRlbl9zc2lkOwotCi0JaWYgKHNzaWRfbGVuID09IGlmc3RhLT5zc2lkX2xlbiAmJgotCSAgICAhbWVtY21wKGlmc3RhLT5zc2lkLCBzc2lkLCBzc2lkX2xlbikpCi0JCXJldHVybiAxOwotCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpCi0JCXJldHVybiAwOwotCi0JaGlkZGVuX3NzaWQgPSAxOwotCXRtcCA9IHNzaWRfbGVuOwotCXdoaWxlICh0bXAtLSkgewotCQlpZiAoc3NpZFt0bXBdICE9ICdcMCcpIHsKLQkJCWhpZGRlbl9zc2lkID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGhpZGRlbl9zc2lkICYmIChpZnN0YS0+c3NpZF9sZW4gPT0gc3NpZF9sZW4gfHwgc3NpZF9sZW4gPT0gMCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNzaWRfbGVuID09IDEgJiYgc3NpZFswXSA9PSAnICcpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXU4IGJzc2lkW0VUSF9BTEVOXSwgKnBvczsKLQlpbnQgaTsKLQlpbnQgcmV0OworCXU4ICpic3NpZCA9IGlmbWdkLT5ic3NpZCwgKnNzaWQgPSBpZm1nZC0+c3NpZDsKKwl1OCBzc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKKwl1MTYgY2FwYV9tYXNrID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwl1MTYgY2FwYV92YWwgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7CiAKLSNpZiAwCi0JLyogRWFzaWVyIHRlc3RpbmcsIHVzZSBmaXhlZCBCU1NJRC4gKi8KLQltZW1zZXQoYnNzaWQsIDB4ZmUsIEVUSF9BTEVOKTsKLSNlbHNlCi0JLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCi0JICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKLQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwotCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07Ci0JYnNzaWRbMF0gJj0gfjB4MDE7Ci0JYnNzaWRbMF0gfD0gMHgwMjsKLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKLQotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfYWRkKGxvY2FsLCBic3NpZCwKLQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBzZGF0YS0+dS5zdGEuc3NpZCwgc2RhdGEtPnUuc3RhLnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlic3MtPmJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tic3MtPmJhbmRdOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPT0gMCkKLQkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlic3MtPmJlYWNvbl9pbnQgPSBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50OwotCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwotCWJzcy0+Y2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwotCi0JaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKLQkJYnNzLT5jYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCWVsc2UKLQkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOwotCi0JYnNzLT5zdXBwX3JhdGVzX2xlbiA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXBvcyA9IGJzcy0+c3VwcF9yYXRlczsKLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOwotCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSAmJgorCSAgICBpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMIHwKKwkJCSAgICBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKKwkJCSAgICBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpKSB7CisJCWNhcGFfbWFzayB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKKwkJCWNhcGFfdmFsIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCX0KIAotCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBpZnN0YSwgYnNzKTsKLQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQlyZXR1cm4gcmV0OwotfQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpCisJCWNoYW4gPSBOVUxMOwogCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpCisJCWJzc2lkID0gTlVMTDsKIAotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlpbnQgZm91bmQgPSAwOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQlpbnQgYWN0aXZlX2lic3M7Ci0KLQlpZiAoaWZzdGEtPnNzaWRfbGVuID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhX2ZpbmRfaWJzcyAoYWN0aXZlX2lic3M9JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBhY3RpdmVfaWJzcyk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGlmc3RhLT5zc2lkX2xlbiAhPSBic3MtPnNzaWRfbGVuIHx8Ci0JCSAgICBtZW1jbXAoaWZzdGEtPnNzaWQsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikgIT0gMAotCQkgICAgfHwgIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCi0JCQljb250aW51ZTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgYnNzaWQ9JXBNIGZvdW5kXG4iLCBic3MtPmJzc2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCQltZW1jcHkoYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJZm91bmQgPSAxOwotCQlpZiAoYWN0aXZlX2lic3MgfHwgbWVtY21wKGJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQkJYnJlYWs7CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgeworCQlzc2lkID0gTlVMTDsKKwkJc3NpZF9sZW4gPSAwOwogCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JaWYgKGZvdW5kKQotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgotCQkgICAgICAgIiVwTVxuIiwgYnNzaWQsIGlmc3RhLT5ic3NpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBjaGFuLAorCQkJCSAgICAgICBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJICAgICAgIGNhcGFfbWFzaywgY2FwYV92YWwpOwogCi0JaWYgKGZvdW5kICYmIG1lbWNtcChpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgIT0gMCkgewotCQlpbnQgcmV0OwotCQlpbnQgc2VhcmNoX2ZyZXE7Ci0KLQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKLQkJCXNlYXJjaF9mcmVxID0gYnNzLT5mcmVxOworCWlmIChic3MpIHsKKwkJaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBic3MtPmNic3MuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKKwkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIGJzcy0+c3NpZCwKKwkJCQkJICAgICAgIGJzcy0+c3NpZF9sZW4pOworCQlpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgYnNzLT5jYnNzLmJzc2lkKTsKKwkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgYnNzLT5zdXBwX3JhdGVzX2xlbiwKKwkJCQkJCSAgICBic3MtPnN1cHBfcmF0ZXMpOworCQlpZiAoc2RhdGEtPnUubWdkLm1mcCA9PSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CiAJCWVsc2UKLQkJCXNlYXJjaF9mcmVxID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0KLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGJzc2lkLCBzZWFyY2hfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmICghYnNzKQotCQkJZ290byBkb250X2pvaW47Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVwTSIKLQkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQpOwotCQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgaWZzdGEsIGJzcyk7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotZG9udF9qb2luOgotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiAgIGRpZCBub3QgdHJ5IHRvIGpvaW4gaWJzc1xuIik7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQotCS8qIFNlbGVjdGVkIElCU1Mgbm90IGZvdW5kIGluIGN1cnJlbnQgc2NhbiByZXN1bHRzIC0gdHJ5IHRvIHNjYW4gKi8KLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCAmJgotCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpIHsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKwotCQkJCSAgICAgIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKwotCQkJICAgICAgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJpZ2dlciBuZXcgc2NhbiB0byBmaW5kIGFuIElCU1MgdG8gIgotCQkgICAgICAgImpvaW5cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgaWZzdGEtPnNzaWQsCi0JCQkJCSAgICAgIGlmc3RhLT5zc2lkX2xlbik7Ci0JfSBlbHNlIGlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSB7Ci0JCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOwotCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5pYnNzX2pvaW5fcmVxICsKLQkJCSAgICAgICBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQpKSB7Ci0JCQlpZiAoKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MpICYmCi0JCQkgICAgKCEobG9jYWwtPm9wZXJfY2hhbm5lbC0+ZmxhZ3MgJgotCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkpCi0JCQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc2RhdGEsIGlmc3RhKTsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgotCQkJCSAgICAgICAiICVkIE1IelxuIiwgc2RhdGEtPmRldi0+bmFtZSwKLQkJCQkgICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCQkJfQotCi0JCQkvKiBObyBJQlNTIGZvdW5kIC0gZGVjcmVhc2Ugc2NhbiBpbnRlcnZhbCBhbmQgY29udGludWUKLQkJCSAqIHNjYW5uaW5nLiAqLwotCQkJaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XOwotCQl9Ci0KLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIGludGVydmFsKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsICpzZWxlY3RlZCA9IE5VTEw7Ci0JaW50IHRvcF9yc3NpID0gMCwgZnJlcTsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlmcmVxID0gbG9jYWwtPm9wZXJfY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAotCQkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpKSAmJgotCQkgICAgKCEhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSBeCi0JCSAgICAgISFzZGF0YS0+ZGVmYXVsdF9rZXkpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSAmJgotCQkgICAgYnNzLT5mcmVxICE9IGZyZXEpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSAmJgotCQkgICAgbWVtY21wKGJzcy0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChpZnN0YSwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghc2VsZWN0ZWQgfHwgdG9wX3Jzc2kgPCBic3MtPnNpZ25hbCkgewotCQkJc2VsZWN0ZWQgPSBic3M7Ci0JCQl0b3BfcnNzaSA9IGJzcy0+c2lnbmFsOwotCQl9Ci0JfQotCWlmIChzZWxlY3RlZCkKLQkJYXRvbWljX2luYygmc2VsZWN0ZWQtPnVzZXJzKTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQotCWlmIChzZWxlY3RlZCkgewotCQlpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIHNlbGVjdGVkLT5mcmVxKTsKLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCkpCi0JCQlpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBzZWxlY3RlZC0+c3NpZCwKLQkJCQkJICAgICAgIHNlbGVjdGVkLT5zc2lkX2xlbik7Ci0JCWllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHNkYXRhLCBzZWxlY3RlZC0+YnNzaWQpOwotCQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBzZWxlY3RlZCk7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CiAKIAkJLyogU2VuZCBvdXQgZGlyZWN0IHByb2JlIGlmIG5vIHByb2JlIHJlc3Agd2FzIHJlY2VpdmVkIG9yCiAJCSAqIHRoZSBvbmUgd2UgaGF2ZSBpcyBvdXRkYXRlZAogCQkgKi8KLQkJaWYgKCFzZWxlY3RlZC0+bGFzdF9wcm9iZV9yZXNwIHx8Ci0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHNlbGVjdGVkLT5sYXN0X3Byb2JlX3Jlc3AKKwkJaWYgKCFic3MtPmxhc3RfcHJvYmVfcmVzcCB8fAorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3RfcHJvYmVfcmVzcAogCQkJCQkrIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CiAJCWVsc2UKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwogCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBzZWxlY3RlZCk7Ci0JCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKLQkJaWYgKGlmc3RhLT5hc3NvY19zY2FuX3RyaWVzIDwgSUVFRTgwMjExX0FTU09DX1NDQU5TX01BWF9UUklFUykgewotCQkJaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMrKzsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpCi0JCQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIE5VTEwsIDApOworCQlpZiAoaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPCBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTKSB7CisJCQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcysrOworCQkJLyogWFhYIG1heWJlIHJhY3k/ICovCisJCQlpZiAobG9jYWwtPnNjYW5fcmVxKQorCQkJCXJldHVybiAtMTsKKwkJCW1lbWNweShsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJCQkgICAgICAgaWZtZ2QtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkKKwkJCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gMDsKIAkJCWVsc2UKLQkJCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOwotCQl9IGVsc2UKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZtZ2QtPnNzaWRfbGVuOworCisJCQlpZiAoaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsICZsb2NhbC0+aW50X3NjYW5fcmVxKSkKKwkJCQlpZWVlODAyMTFfc2Nhbl9mYWlsZWQobG9jYWwpOworCisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQl9CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTIyOTIsOSArMTgzMSw5IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUuc3RhLndvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2Qud29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKQEAgLTIzMDMsNjEgKzE4NDIsNjAgQEAKIAlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKIAkJcmV0dXJuOwogCi0JaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmc3RhLT5za2JfcXVldWUpKSkKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZm1nZC0+c2tiX3F1ZXVlKSkpCiAJCWllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUgJiYKLQkgICAgaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKLQkgICAgaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgJiYKLQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZnN0YS0+cmVxdWVzdCkpIHsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGlmc3RhLT5zY2FuX3NzaWQsCi0JCQkJICAgICBpZnN0YS0+c2Nhbl9zc2lkX2xlbik7CisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFICYmCisJICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCisJICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpKSB7CisJCS8qCisJCSAqIFRoZSBjYWxsIHRvIGllZWU4MDIxMV9zdGFydF9zY2FuIGNhbiBmYWlsIGJ1dCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuCisJCSAqICh3aGljaCBxdWV1ZWQgaWVlZTgwMjExX3N0YV93b3JrKSBkaWQgbm90IHJldHVybiBhbiBlcnJvci4gVGh1cywgY2FsbAorCQkgKiBpZWVlODAyMTFfc2Nhbl9mYWlsZWQgaGVyZSBpZiBpZWVlODAyMTFfc3RhcnRfc2NhbiBmYWlscyBpbiBvcmRlciB0bworCQkgKiBub3RpZnkgdGhlIHNjYW4gcmVxdWVzdGVyLgorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBsb2NhbC0+c2Nhbl9yZXEpKQorCQkJaWVlZTgwMjExX3NjYW5fZmFpbGVkKGxvY2FsKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KSkgewotCQlpZiAoaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzZGF0YSwgaWZzdGEpKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KSkgeworCQlpZiAoaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzZGF0YSkpCiAJCQlyZXR1cm47Ci0JCWNsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JfSBlbHNlIGlmICghdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KSkKKwkJY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKGlmc3RhLT5zdGF0ZSkgeworCXN3aXRjaCAoaWZtZ2QtPnN0YXRlKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRToKLQkJaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOgotCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU6Ci0JCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQ6Ci0JCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhLCBpZnN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOgotCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSwgaWZzdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRDoKLQkJaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhLCBpZnN0YSkpIHsKKwlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogcHJpdmFjeSBjb25maWd1cmF0aW9uIG1pc21hdGNoIGFuZCAiCiAJCSAgICAgICAibWl4ZWQtY2VsbCBkaXNhYmxlZCAtIGRpc2Fzc29jaWF0ZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIGZhbHNlLCB0cnVlLAorCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwKIAkJCQkJV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOwogCX0KIH0KQEAgLTIzNjYsMjA4ICsxOTA0LDE2MSBAQAogewogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwKLQkJCSAgICZzZGF0YS0+dS5zdGEud29yayk7CisJCQkgICAmc2RhdGEtPnUubWdkLndvcmspOwogfQogCiAvKiBpbnRlcmZhY2Ugc2V0dXAgKi8KIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlJTklUX1dPUksoJmlmc3RhLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOwotCXNldHVwX3RpbWVyKCZpZnN0YS0+dGltZXIsIGllZWU4MDIxMV9zdGFfdGltZXIsCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCUlOSVRfV09SSygmaWZtZ2QtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7CisJSU5JVF9XT1JLKCZpZm1nZC0+Y2hzd2l0Y2hfd29yaywgaWVlZTgwMjExX2Noc3dpdGNoX3dvcmspOworCUlOSVRfV09SSygmaWZtZ2QtPmJlYWNvbl9sb3NzX3dvcmssIGllZWU4MDIxMV9iZWFjb25fbG9zc193b3JrKTsKKwlzZXR1cF90aW1lcigmaWZtZ2QtPnRpbWVyLCBpZWVlODAyMTFfc3RhX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZpZnN0YS0+c2tiX3F1ZXVlKTsKKwlzZXR1cF90aW1lcigmaWZtZ2QtPmNoc3dpdGNoX3RpbWVyLCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmbWdkLT5za2JfcXVldWUpOwogCi0JaWZzdGEtPmNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKLQlpZnN0YS0+YXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX09QRU4gfAorCWlmbWdkLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJaWZtZ2QtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKIAkJSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MgfAorCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKIAkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CiAJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKLQlpZiAoaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmc2RhdGEtPmxvY2FsLT5odykgPj0gNCkKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQ7Ci19Ci0KLS8qCi0gKiBBZGQgYSBuZXcgSUJTUyBzdGF0aW9uLCB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4sCi0gKiBpbiBJQlNTIG1vZGUsIHJlY2VpdmluZyBhIGZyYW1lIGZyb20gYSB5ZXQtdW5rbm93biBzdGF0aW9uLCBoZW5jZQotICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KLSAqLwotc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHU2NCBzdXBwX3JhdGVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKLQotCS8qIFRPRE86IENvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5IGFuZAotCSAqIGFsbG93IG5ldyBvbmUgdG8gYmUgYWRkZWQuICovCi0JaWYgKGxvY2FsLT5udW1fc3RhID49IElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUykgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHJvb20gZm9yIGEgbmV3IElCU1MgU1RBICIKLQkJCSAgICAgICAiZW50cnkgJXBNXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBhZGRyKTsKLQkJfQotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKQotCQlyZXR1cm4gTlVMTDsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRpbmcgbmV3IElCU1Mgc3RhdGlvbiAlcE0gKGRldj0lcylcbiIsCi0JICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgYWRkciwgc2RhdGEtPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQotCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7Ci0KLQkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KLQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8Ci0JCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKLQotCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKLQotCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc3RhOworCWlmIChzZGF0YS0+bG9jYWwtPmh3LnF1ZXVlcyA+PSA0KQorCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKIH0KIAogLyogY29uZmlndXJhdGlvbiBob29rcyAqLwotdm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3ZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybjsKIAotCWlmICgoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQlNTSURfU0VUIHwKKwlpZiAoKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8CiAJCQkgICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpKSAmJgotCSAgICAoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgfAorCSAgICAoaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgfAogCQkJICAgICBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpKSkgewogCi0JCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCi0JCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgdHJ1ZSwKKwkJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CiAKLQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgfHwKKwkJICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKQorCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpOworCQllbHNlIGlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpCisJCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogCX0KIH0KIAotaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCitpbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0JaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0JaWYgKGlmc3RhLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmc3RhLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKLQkJbWVtc2V0KGlmc3RhLT5zc2lkLCAwLCBzaXplb2YoaWZzdGEtPnNzaWQpKTsKLQkJbWVtY3B5KGlmc3RhLT5zc2lkLCBzc2lkLCBsZW4pOwotCQlpZnN0YS0+c3NpZF9sZW4gPSBsZW47Ci0JCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQl9Ci0KLQlpZiAobGVuKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKKwlpZiAoaWZtZ2QtPnNzaWRfbGVuKQorCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKIAllbHNlCi0JCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCkpIHsKLQkJaWZzdGEtPmlic3Nfam9pbl9yZXEgPSBqaWZmaWVzOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g7Ci0JCXJldHVybiBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSwgaWZzdGEpOwotCX0KKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOwogCiAJcmV0dXJuIDA7CiB9CiAKK2ludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CisKKwlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZiAoaWZtZ2QtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZtZ2QtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgeworCQkvKgorCQkgKiBEbyBub3QgdXNlIHJlYXNzb2NpYXRpb24gaWYgU1NJRCBpcyBjaGFuZ2VkIChkaWZmZXJlbnQgRVNTKS4KKwkJICovCisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJbWVtc2V0KGlmbWdkLT5zc2lkLCAwLCBzaXplb2YoaWZtZ2QtPnNzaWQpKTsKKwkJbWVtY3B5KGlmbWdkLT5zc2lkLCBzc2lkLCBsZW4pOworCQlpZm1nZC0+c3NpZF9sZW4gPSBsZW47CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9zdGFfY29tbWl0KHNkYXRhKTsKK30KKwogaW50IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JbWVtY3B5KHNzaWQsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCSpsZW4gPSBpZnN0YS0+c3NpZF9sZW47CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJbWVtY3B5KHNzaWQsIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCSpsZW4gPSBpZm1nZC0+c3NpZF9sZW47CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKLQlpbnQgcmVzOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkgeworCQltZW1jcHkoaWZtZ2QtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGlmbWdkLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCX0KIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICE9IDApIHsKLQkJbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQkJcmVzID0gMDsKLQkJLyoKLQkJICogSGFjayEgU2VlIGFsc28gaWVlZTgwMjExX3N0YV9zZXRfc3NpZC4KLQkJICovCi0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOwotCQlpZiAocmVzKSB7CisJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJaWYgKGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gY29uZmlnIG5ldyBCU1NJRCB0byAiCiAJCQkgICAgICAgInRoZSBsb3ctbGV2ZWwgZHJpdmVyXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJCXJldHVybiByZXM7CiAJCX0KIAl9CiAKLQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKLQllbHNlCi0JCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaWVlZTgwMjExX3N0YV9jb21taXQoc2RhdGEpOwogfQogCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmllLCBzaXplX3QgbGVuKQoraW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmllLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQlrZnJlZShpZnN0YS0+ZXh0cmFfaWUpOworCWtmcmVlKGlmbWdkLT5leHRyYV9pZSk7CiAJaWYgKGxlbiA9PSAwKSB7Ci0JCWlmc3RhLT5leHRyYV9pZSA9IE5VTEw7Ci0JCWlmc3RhLT5leHRyYV9pZV9sZW4gPSAwOworCQlpZm1nZC0+ZXh0cmFfaWUgPSBOVUxMOworCQlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gMDsKIAkJcmV0dXJuIDA7CiAJfQotCWlmc3RhLT5leHRyYV9pZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlmc3RhLT5leHRyYV9pZSkgewotCQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gMDsKKwlpZm1nZC0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZm1nZC0+ZXh0cmFfaWUpIHsKKwkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1jcHkoaWZzdGEtPmV4dHJhX2llLCBpZSwgbGVuKTsKLQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gbGVuOworCW1lbWNweShpZm1nZC0+ZXh0cmFfaWUsIGllLCBsZW4pOworCWlmbWdkLT5leHRyYV9pZV9sZW4gPSBsZW47CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAogCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb24pOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsIHJlYXNvbik7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSwgcmVhc29uKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uKTsKQEAgLTI1NzUsMTAgKzIwNjYsMTAgQEAKIAlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSkKLQkJcmV0dXJuIC0xOworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJCXJldHVybiAtRU5PTElOSzsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgdHJ1ZSwgcmVhc29uKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwgcmVhc29uKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU4NiwxNSArMjA3Nyw2IEBACiB2b2lkIGllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKLQotCWlmIChzZGF0YSAmJiBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCkgfHwKLQkJICAgICghKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQpICYmCi0JCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpKQotCQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEsIGlmc3RhKTsKLQl9CiAKIAkvKiBSZXN0YXJ0IFNUQSB0aW1lcnMgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0yNjIzLDEyICsyMTA1LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwKIAkJCSAgICAgZHluYW1pY19wc19lbmFibGVfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKIAogCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQogCQlyZXR1cm47CiAKLQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOwogCisJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CiAJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIH0KIApAQCAtMjYzOCwzICsyMTIzLDM2IEBACiAKIAlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiB9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBpbnQgcG93ZXJzYXZlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOworCV9fbGUxNiBmYzsKKworCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAyNCk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsZnVuYyAiCisJCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7CisJZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisJaWYgKHBvd2Vyc2F2ZSkKKwkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gZmM7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzMwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvcG0uYwpAQCAtMCwwICsxLDE3OSBAQAorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KKworI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAibGVkLmgiCisKK2ludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oaHcsCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU1VTUEVORCk7CisKKwlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisKKwkvKiBkaXNhYmxlIGtleXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCisJCWllZWU4MDIxMV9kaXNhYmxlX2tleXMoc2RhdGEpOworCisJLyogVGVhciBkb3duIGFnZ3JlZ2F0aW9uIHNlc3Npb25zICovCisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1NVU1BFTkQpOworCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCisJLyogcmVtb3ZlIFNUQXMgKi8KKwlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCQkgICAgIHUuYXApOworCisJCQlsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KGh3LCAmc2RhdGEtPnZpZiwKKwkJCQlTVEFfTk9USUZZX1JFTU9WRSwgJnN0YS0+c3RhKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiByZW1vdmUgYWxsIGludGVyZmFjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiAmJgorCQkgICAgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKKwkJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKKwkJCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwkJCWxvY2FsLT5vcHMtPnJlbW92ZV9pbnRlcmZhY2UoaHcsICZjb25mKTsKKwkJfQorCX0KKworCS8qIGZsdXNoIGFnYWluLCBpbiBjYXNlIGRyaXZlciBxdWV1ZWQgd29yayAqLworCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKworCS8qIHN0b3AgaGFyZHdhcmUgKi8KKwlpZiAobG9jYWwtPm9wZW5fY291bnQpIHsKKwkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgZmFsc2UpOworCQlsb2NhbC0+b3BzLT5zdG9wKGh3KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2llZWU4MDIxMV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXM7CisKKwkvKiByZXN0YXJ0IGhhcmR3YXJlICovCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7CisJCXJlcyA9IGxvY2FsLT5vcHMtPnN0YXJ0KGh3KTsKKworCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwl9CisKKwkvKiBhZGQgaW50ZXJmYWNlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmCisJCSAgICBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOworCQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOworCQkJY29uZi5tYWNfYWRkciA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOworCQkJcmVzID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZShodywgJmNvbmYpOworCQl9CisJfQorCisJLyogYWRkIFNUQXMgYmFjayAqLworCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJCSAgICAgdS5hcCk7CisKKwkJCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkoaHcsICZzZGF0YS0+dmlmLAorCQkJCVNUQV9OT1RJRllfQURELCAmc3RhLT5zdGEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCX0KKworCS8qIENsZWFyIFN1c3BlbmQgc3RhdGUgc28gdGhhdCBBRERCQSByZXF1ZXN0cyBjYW4gYmUgcHJvY2Vzc2VkICovCisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQkJY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfU1VTUEVORCk7CisJCX0KKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIGFkZCBiYWNrIGtleXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCisJCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKKworCS8qIHNldHVwIFJUUyB0aHJlc2hvbGQgKi8KKwlpZiAobG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQpCisJCWxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKGh3LCBsb2NhbC0+cnRzX3RocmVzaG9sZCk7CisKKwkvKiByZWNvbmZpZ3VyZSBoYXJkd2FyZSAqLworCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIH4wKTsKKworCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CisJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOworCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKworCS8qIEZpbmFsbHkgYWxzbyByZWNvbmZpZ3VyZSBhbGwgdGhlIEJTUyBpbmZvcm1hdGlvbiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQl1MzIgY2hhbmdlZCA9IH4wOworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQkJLyogZGlzYWJsZSBiZWFjb24gY2hhbmdlIGJpdHMgKi8KKwkJCWNoYW5nZWQgJj0gfklFRUU4MDIxMV9JRkNDX0JFQUNPTjsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCQlXQVJOX09OKGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIGNoYW5nZWQpKTsKKwkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCB+MCk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCQkvKiBpZ25vcmUgdmlydHVhbCAqLworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJCWNhc2UgX19OTDgwMjExX0lGVFlQRV9BRlRFUl9MQVNUOgorCQkJV0FSTl9PTigxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbihodywKKwkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TVVNQRU5EKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKaW5kZXggM2ZhN2FiMi4uNDY0MWYwMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuYworKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCkBAIC0yMTksMTAgKzIxOSwxMiBAQAogCQlpbmZvLT5jb250cm9sLnJhdGVzW2ldLmNvdW50ID0gMTsKIAl9CiAKLQlpZiAoc3RhICYmIHNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPiAtMSkKKwlpZiAoc3RhICYmIHNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPiAtMSkgewogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHg7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCXJlZi0+b3BzLT5nZXRfcmF0ZShyZWYtPnByaXYsIGlzdGEsIHByaXZfc3RhLCB0eHJjKTsKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTzsKKwl9CiAKIAkvKgogCSAqIHRyeSB0byBlbmZvcmNlIHRoZSBtYXhpbXVtIHJhdGUgdGhlIHVzZXIgd2FudGVkCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5oIGIvbmV0L21hYzgwMjExL3JhdGUuaAppbmRleCA5MjhkYTYyLi4yYWI1YWQ5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5oCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmgKQEAgLTQ0LDggKzQ0LDEwIEBACiAJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKmlzdGEgPSAmc3RhLT5zdGE7CiAJdm9pZCAqcHJpdl9zdGEgPSBzdGEtPnJhdGVfY3RybF9wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCXJlZi0+b3BzLT50eF9zdGF0dXMocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwgcHJpdl9zdGEsIHNrYik7CisJaWYgKGxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR08pKQorCQlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhLCBza2IpOwogfQogCiAKQEAgLTYyLDYgKzY0LDE4IEBACiAJcmVmLT5vcHMtPnJhdGVfaW5pdChyZWYtPnByaXYsIHNiYW5kLCBpc3RhLCBwcml2X3N0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKmlzdGEgPSAmc3RhLT5zdGE7CisJdm9pZCAqcHJpdl9zdGEgPSBzdGEtPnJhdGVfY3RybF9wcml2OworCisJaWYgKHJlZi0+b3BzLT5yYXRlX3VwZGF0ZSkKKwkJcmVmLT5vcHMtPnJhdGVfdXBkYXRlKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsCisJCQkJICAgICAgcHJpdl9zdGEsIGNoYW5nZWQpOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnJhdGVfY29udHJvbF9hbGxvY19zdGEoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiwKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggNzE3NWFlOC4uNjRlYmU2NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTg2LDggKzg2LDcgQEAKIAogCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpCiAJCWxlbiArPSA4OwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHx8Ci0JICAgIGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKIAkJbGVuICs9IDE7CiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pCiAJCWxlbiArPSAxOwpAQCAtMTAyLDcgKzEwMSw3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotLyoqCisvKgogICogaWVlZTgwMjExX2FkZF9yeF9yYWRpb3RhcF9oZWFkZXIgLSBhZGQgcmFkaW90YXAgaGVhZGVyCiAgKgogICogYWRkIGEgcmFkaW90YXAgaGVhZGVyIGNvbnRhaW5pbmcgYWxsIHRoZSBmaWVsZHMgd2hpY2ggdGhlIGhhcmR3YXJlIHByb3ZpZGVkLgpAQCAtMTQzLDYgKzE0Miw4IEBACiAJLyogSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTICovCiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MpCiAJCSpwb3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTOworCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19GQUlMRURfRkNTX0NSQyB8IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDKSkKKwkJKnBvcyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9CQURGQ1M7CiAJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfU0hPUlRQUkUpCiAJCSpwb3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkU7CiAJcG9zKys7CkBAIC0xNTgsNyArMTU5LDcgQEAKIAkJICovCiAJCSpwb3MgPSAwOwogCX0gZWxzZSB7Ci0JCXJ0aGRyLT5pdF9wcmVzZW50IHw9ICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKTsKKwkJcnRoZHItPml0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSk7CiAJCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKIAl9CiAJcG9zKys7CkBAIC0xOTksMjMgKzIwMCwxNCBAQAogCSpwb3MgPSBzdGF0dXMtPmFudGVubmE7CiAJcG9zKys7CiAKLQkvKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMICovCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREIpIHsKLQkJKnBvcyA9IHN0YXR1cy0+c2lnbmFsOwotCQlydGhkci0+aXRfcHJlc2VudCB8PQotCQkJY3B1X3RvX2xlMzIoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMKTsKLQkJcG9zKys7Ci0JfQotCiAJLyogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFIGlzIG5vdCB1c2VkICovCiAKIAkvKiBJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1MgKi8KIAkvKiBlbnN1cmUgMiBieXRlIGFsaWdubWVudCBmb3IgdGhlIDIgYnl0ZSBmaWVsZCBhcyByZXF1aXJlZCAqLwogCWlmICgocG9zIC0gKHVuc2lnbmVkIGNoYXIgKilydGhkcikgJiAxKQogCQlwb3MrKzsKLQkvKiBGSVhNRTogd2hlbiByYWRpb3RhcCBnZXRzIGEgJ2JhZCBQTENQJyBmbGFnIHVzZSBpdCBoZXJlICovCi0JaWYgKHN0YXR1cy0+ZmxhZyAmIChSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDIHwgUlhfRkxBR19GQUlMRURfUExDUF9DUkMpKQotCQkqKF9fbGUxNiAqKXBvcyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURGQ1MpOworCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQykKKwkJKihfX2xlMTYgKilwb3MgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFEUExDUCk7CiAJcG9zICs9IDI7CiB9CiAKQEAgLTM3MSwzOSArMzYzLDUwIEBACiAJcngtPnNrYi0+cHJpb3JpdHkgPSAodGlkID4gNykgPyAwIDogdGlkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2lwX2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQorLyoqCisgKiBET0M6IFBhY2tldCBhbGlnbm1lbnQKKyAqCisgKiBEcml2ZXJzIGFsd2F5cyBuZWVkIHRvIHBhc3MgcGFja2V0cyB0aGF0IGFyZSBhbGlnbmVkIHRvIHR3by1ieXRlIGJvdW5kYXJpZXMKKyAqIHRvIHRoZSBzdGFjay4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHNob3VsZCwgaWYgcG9zc2libGUsIGFsaWduIHRoZSBwYXlsb2FkIGRhdGEgaW4gYSB3YXkgdGhhdAorICogZ3VhcmFudGVlcyB0aGF0IHRoZSBjb250YWluZWQgSVAgaGVhZGVyIGlzIGFsaWduZWQgdG8gYSBmb3VyLWJ5dGUKKyAqIGJvdW5kYXJ5LiBJbiB0aGUgY2FzZSBvZiByZWd1bGFyIGZyYW1lcywgdGhpcyBzaW1wbHkgbWVhbnMgYWxpZ25pbmcgdGhlCisgKiBwYXlsb2FkIHRvIGEgZm91ci1ieXRlIGJvdW5kYXJ5IChiZWNhdXNlIGVpdGhlciB0aGUgSVAgaGVhZGVyIGlzIGRpcmVjdGx5CisgKiBjb250YWluZWQsIG9yIElWL1JGQzEwNDIgaGVhZGVycyB0aGF0IGhhdmUgYSBsZW5ndGggZGl2aXNpYmxlIGJ5IGZvdXIgYXJlCisgKiBpbiBmcm9udCBvZiBpdCkuCisgKgorICogV2l0aCBBLU1TRFUgZnJhbWVzLCBob3dldmVyLCB0aGUgcGF5bG9hZCBkYXRhIGFkZHJlc3MgbXVzdCB5aWVsZCB0d28gbW9kdWxvCisgKiBmb3VyIGJlY2F1c2UgdGhlcmUgYXJlIDE0LWJ5dGUgODAyLjMgaGVhZGVycyB3aXRoaW4gdGhlIEEtTVNEVSBmcmFtZXMgdGhhdAorICogcHVzaCB0aGUgSVAgaGVhZGVyIGZ1cnRoZXIgYmFjayB0byBhIG11bHRpcGxlIG9mIGZvdXIgYWdhaW4uIFRoYW5rZnVsbHksIHRoZQorICogc3BlY3Mgd2VyZSBzYW5lIGVub3VnaCB0aGlzIHRpbWUgYXJvdW5kIHRvIHJlcXVpcmUgcGFkZGluZyBlYWNoIEEtTVNEVQorICogc3ViZnJhbWUgdG8gYSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIGZvdXIuCisgKgorICogUGFkZGluZyBsaWtlIEF0aGVyb3MgaGFyZHdhcmUgYWRkcyB3aGljaCBpcyBpbmJldHdlZW4gdGhlIDgwMi4xMSBoZWFkZXIgYW5kCisgKiB0aGUgcGF5bG9hZCBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIG1vdmUgdGhlIDgwMi4xMQorICogaGVhZGVyIHRvIGJlIGRpcmVjdGx5IGluIGZyb250IG9mIHRoZSBwYXlsb2FkIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX3ZlcmlmeV9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCWludCBoZHJsZW47CiAKKyNpZm5kZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKKwlyZXR1cm47CisjZW5kaWYKKworCWlmIChXQVJOX09OQ0UoKHVuc2lnbmVkIGxvbmcpcngtPnNrYi0+ZGF0YSAmIDEsCisJCSAgICAgICJ1bmFsaWduZWQgcGFja2V0IGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEpKQorCQlyZXR1cm47CisKIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBEcml2ZXJzIGFyZSByZXF1aXJlZCB0byBhbGlnbiB0aGUgcGF5bG9hZCBkYXRhIGluIGEgd2F5IHRoYXQKLQkgKiBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgaXMgYWxpZ25lZCB0byBhIGZvdXItCi0JICogYnl0ZSBib3VuZGFyeS4gSW4gdGhlIGNhc2Ugb2YgcmVndWxhciBmcmFtZXMsIHRoaXMgc2ltcGx5IG1lYW5zCi0JICogYWxpZ25pbmcgdGhlIHBheWxvYWQgdG8gYSBmb3VyLWJ5dGUgYm91bmRhcnkgKGJlY2F1c2UgZWl0aGVyCi0JICogdGhlIElQIGhlYWRlciBpcyBkaXJlY3RseSBjb250YWluZWQsIG9yIElWL1JGQzEwNDIgaGVhZGVycyB0aGF0Ci0JICogaGF2ZSBhIGxlbmd0aCBkaXZpc2libGUgYnkgZm91ciBhcmUgaW4gZnJvbnQgb2YgaXQuCi0JICoKLQkgKiBXaXRoIEEtTVNEVSBmcmFtZXMsIGhvd2V2ZXIsIHRoZSBwYXlsb2FkIGRhdGEgYWRkcmVzcyBtdXN0Ci0JICogeWllbGQgdHdvIG1vZHVsbyBmb3VyIGJlY2F1c2UgdGhlcmUgYXJlIDE0LWJ5dGUgODAyLjMgaGVhZGVycwotCSAqIHdpdGhpbiB0aGUgQS1NU0RVIGZyYW1lcyB0aGF0IHB1c2ggdGhlIElQIGhlYWRlciBmdXJ0aGVyIGJhY2sKLQkgKiB0byBhIG11bHRpcGxlIG9mIGZvdXIgYWdhaW4uIFRoYW5rZnVsbHksIHRoZSBzcGVjcyB3ZXJlIHNhbmUKLQkgKiBlbm91Z2ggdGhpcyB0aW1lIGFyb3VuZCB0byByZXF1aXJlIHBhZGRpbmcgZWFjaCBBLU1TRFUgc3ViZnJhbWUKLQkgKiB0byBhIGxlbmd0aCB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgZm91ci4KLQkgKgotCSAqIFBhZGRpbmcgbGlrZSBhdGhlcm9zIGhhcmR3YXJlIGFkZHMgd2hpY2ggaXMgaW5iZXR3ZWVuIHRoZSA4MDIuMTEKLQkgKiBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQKLQkgKiB0byBtb3ZlIHRoZSA4MDIuMTEgaGVhZGVyIGZ1cnRoZXIgYmFjayBpbiB0aGF0IGNhc2UuCi0JICovCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCWlmIChyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfQU1TRFUpCiAJCWhkcmxlbiArPSBFVEhfSExFTjsKLQlXQVJOX09OX09OQ0UoKCh1bnNpZ25lZCBsb25nKShyeC0+c2tiLT5kYXRhICsgaGRybGVuKSkgJiAzKTsKLSNlbmRpZgorCVdBUk5fT05DRSgoKHVuc2lnbmVkIGxvbmcpKHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pKSAmIDMsCisJCSAgInVuYWxpZ25lZCBJUCBwYXlsb2FkIGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pOwogfQogCiAKQEAgLTQzNSw2ICs0MzgsNTIgQEAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKKworc3RhdGljIGludCBpZWVlODAyMTFfaXNfdW5pY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKHNrYi0+bGVuIDwgMjQgfHwgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKHNrYi0+bGVuIDwgMjQgfHwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKTsKK30KKworCisvKiBHZXQgdGhlIEJJUCBrZXkgaW5kZXggZnJvbSBNTUlFOyByZXR1cm4gLTEgaWYgdGhpcyBpcyBub3QgYSBCSVAgZnJhbWUgKi8KK3N0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9tbWllX2tleWlkeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCisJaWYgKHNrYi0+bGVuIDwgMjQgKyBzaXplb2YoKm1taWUpIHx8CisJICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmRhKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGhkcikpCisJCXJldHVybiAtMTsgLyogbm90IGEgcm9idXN0IG1hbmFnZW1lbnQgZnJhbWUgKi8KKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopCisJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCWlmIChtbWllLT5lbGVtZW50X2lkICE9IFdMQU5fRUlEX01NSUUgfHwKKwkgICAgbW1pZS0+bGVuZ3RoICE9IHNpemVvZigqbW1pZSkgLSAyKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gbGUxNl90b19jcHUobW1pZS0+a2V5X2lkKTsKK30KKworCiBzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAogaWVlZTgwMjExX3J4X21lc2hfY2hlY2soc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKQEAgLTU1MCwyMSArNTk5LDIzIEBACiAJaW50IGhkcmxlbjsKIAlpZWVlODAyMTFfcnhfcmVzdWx0IHJlc3VsdCA9IFJYX0RST1BfVU5VU0FCTEU7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKnN0YWtleSA9IE5VTEw7CisJaW50IG1taWVfa2V5aWR4ID0gLTE7CiAKIAkvKgogCSAqIEtleSBzZWxlY3Rpb24gMTAxCiAJICoKLQkgKiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2Yga2V5czoKKwkgKiBUaGVyZSBhcmUgZm91ciB0eXBlcyBvZiBrZXlzOgogCSAqICAtIEdUSyAoZ3JvdXAga2V5cykKKwkgKiAgLSBJR1RLIChncm91cCBrZXlzIGZvciBtYW5hZ2VtZW50IGZyYW1lcykKIAkgKiAgLSBQVEsgKHBhaXJ3aXNlIGtleXMpCiAJICogIC0gU1RLIChzdGF0aW9uLXRvLXN0YXRpb24gcGFpcndpc2Uga2V5cykKIAkgKgogCSAqIFdoZW4gc2VsZWN0aW5nIGEga2V5LCB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGljYXN0CiAJICogKGluY2x1ZGluZyBicm9hZGNhc3QpIGFuZCB1bmljYXN0IGZyYW1lcywgdGhlIGxhdHRlciBjYW4gb25seQotCSAqIHVzZSBQVEtzIGFuZCBTVEtzIHdoaWxlIHRoZSBmb3JtZXIgYWx3YXlzIHVzZSBHVEtzLiBVbmxlc3MsIG9mCi0JICogY291cnNlLCBhY3R1YWwgV0VQIGtleXMgKCJwcmUtUlNOQSIpIGFyZSB1c2VkLCB0aGVuIHVuaWNhc3QKLQkgKiBmcmFtZXMgY2FuIGFsc28gdXNlIGtleSBpbmRpemVzIGxpa2UgR1RLcy4gSGVuY2UsIGlmIHdlIGRvbid0Ci0JICogaGF2ZSBhIFBUSy9TVEsgd2UgY2hlY2sgdGhlIGtleSBpbmRleCBmb3IgYSBXRVAga2V5LgorCSAqIHVzZSBQVEtzIGFuZCBTVEtzIHdoaWxlIHRoZSBmb3JtZXIgYWx3YXlzIHVzZSBHVEtzIGFuZCBJR1RLcy4KKwkgKiBVbmxlc3MsIG9mIGNvdXJzZSwgYWN0dWFsIFdFUCBrZXlzICgicHJlLVJTTkEiKSBhcmUgdXNlZCwgdGhlbgorCSAqIHVuaWNhc3QgZnJhbWVzIGNhbiBhbHNvIHVzZSBrZXkgaW5kaWNlcyBsaWtlIEdUS3MuIEhlbmNlLCBpZiB3ZQorCSAqIGRvbid0IGhhdmUgYSBQVEsvU1RLIHdlIGNoZWNrIHRoZSBrZXkgaW5kZXggZm9yIGEgV0VQIGtleS4KIAkgKgogCSAqIE5vdGUgdGhhdCBpbiBhIHJlZ3VsYXIgQlNTLCBtdWx0aWNhc3QgZnJhbWVzIGFyZSBzZW50IGJ5IHRoZQogCSAqIEFQIG9ubHksIGFzc29jaWF0ZWQgc3RhdGlvbnMgdW5pY2FzdCB0aGUgZnJhbWUgdG8gdGhlIEFQIGZpcnN0CkBAIC01NzcsOCArNjI4LDE0IEBACiAJICogcG9zc2libGUuCiAJICovCiAKLQlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybiBSWF9DT05USU5VRTsKKwlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCSAgICByeC0+c3RhID09IE5VTEwgfHwgIXRlc3Rfc3RhX2ZsYWdzKHJ4LT5zdGEsIFdMQU5fU1RBX01GUCkpCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJCW1taWVfa2V5aWR4ID0gaWVlZTgwMjExX2dldF9tbWllX2tleWlkeChyeC0+c2tiKTsKKwkJaWYgKG1taWVfa2V5aWR4IDwgMCkKKwkJCXJldHVybiBSWF9DT05USU5VRTsKKwl9CiAKIAkvKgogCSAqIE5vIHBvaW50IGluIGZpbmRpbmcgYSBrZXkgYW5kIGRlY3J5cHRpbmcgaWYgdGhlIGZyYW1lIGlzIG5laXRoZXIKQEAgLTU5Miw2ICs2NDksMTYgQEAKIAogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYgc3Rha2V5KSB7CiAJCXJ4LT5rZXkgPSBzdGFrZXk7CisJfSBlbHNlIGlmIChtbWllX2tleWlkeCA+PSAwKSB7CisJCS8qIEJyb2FkY2FzdC9tdWx0aWNhc3Qgcm9idXN0IG1hbmFnZW1lbnQgZnJhbWUgLyBCSVAgKi8KKwkJaWYgKChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJCWlmIChtbWllX2tleWlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgfHwKKwkJICAgIG1taWVfa2V5aWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOyAvKiB1bmV4cGVjdGVkIEJJUCBrZXlpZHggKi8KKwkJcngtPmtleSA9IHJjdV9kZXJlZmVyZW5jZShyeC0+c2RhdGEtPmtleXNbbW1pZV9rZXlpZHhdKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGUgZGV2aWNlIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUgSVYgc28gd2Ugd29uJ3QgYmUKQEAgLTY1NCw2ICs3MjEsOSBAQAogCWNhc2UgQUxHX0NDTVA6CiAJCXJlc3VsdCA9IGllZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHJ4KTsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXJlc3VsdCA9IGllZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZGVjcnlwdChyeCk7CisJCWJyZWFrOwogCX0KIAogCS8qIGVpdGhlciB0aGUgZnJhbWUgaGFzIGJlZW4gZGVjcnlwdGVkIG9yIHdpbGwgYmUgZHJvcHBlZCAqLwpAQCAtNjYyLDYgKzczMiwzOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfcnhfaF9jaGVja19tb3JlX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlsb2NhbCA9IHJ4LT5sb2NhbDsKKwlza2IgPSByeC0+c2tiOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoIWxvY2FsLT5wc3BvbGxpbmcpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICghaWVlZTgwMjExX2hhc19mcm9tZHMoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJLyogdGhpcyBpcyBub3QgZnJvbSBBUCAqLworCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICghaWVlZTgwMjExX2hhc19tb3JlZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCS8qIEFQIGhhcyBubyBtb3JlIGZyYW1lcyBidWZmZXJlZCBmb3IgdXMgKi8KKwkJbG9jYWwtPnBzcG9sbGluZyA9IGZhbHNlOworCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJfQorCisJLyogbW9yZSBkYXRhIGJpdCBpcyBzZXQsIGxldCdzIHJlcXVlc3QgYSBuZXcgZnJhbWUgZnJvbSB0aGUgQVAgKi8KKwlpZWVlODAyMTFfc2VuZF9wc3BvbGwobG9jYWwsIHJ4LT5zZGF0YSk7CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CisKIHN0YXRpYyB2b2lkIGFwX3N0YV9wc19zdGFydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CkBAIC03MzYsNyArODM5LDcgQEAKIAlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQl1OCAqYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgcngtPnNrYi0+bGVuLAogCQkJCQkJTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCByeC0+c2RhdGEtPnUuc3RhLmJzc2lkKSA9PSAwKQorCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCByeC0+c2RhdGEtPnUuaWJzcy5ic3NpZCkgPT0gMCkKIAkJCXN0YS0+bGFzdF9yeCA9IGppZmZpZXM7CiAJfSBlbHNlCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSB8fApAQCAtNzQ3LDEyICs4NTAsMTkgQEAKIAkJICogTWVzaCBiZWFjb25zIHdpbGwgdXBkYXRlIGxhc3Rfcnggd2hlbiBpZiB0aGV5IGFyZSBmb3VuZCB0bwogCQkgKiBtYXRjaCB0aGUgY3VycmVudCBsb2NhbCBjb25maWd1cmF0aW9uIHdoZW4gcHJvY2Vzc2VkLgogCQkgKi8KLQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKKwkJaWYgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQlyeC0+c2RhdGEtPnUubWdkLmxhc3RfYmVhY29uID0gamlmZmllczsKKwkJfSBlbHNlCisJCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0KIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAorCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHJ4LT5zZGF0YSwgaGRyKTsKKwogCXN0YS0+cnhfZnJhZ21lbnRzKys7CiAJc3RhLT5yeF9ieXRlcyArPSByeC0+c2tiLT5sZW47CiAJc3RhLT5sYXN0X3NpZ25hbCA9IHJ4LT5zdGF0dXMtPnNpZ25hbDsKQEAgLTExMDEsNiArMTIxMSwxNSBAQAogCS8qIERyb3AgdW5lbmNyeXB0ZWQgZnJhbWVzIGlmIGtleSBpcyBzZXQuICovCiAJaWYgKHVubGlrZWx5KCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChmYykgJiYKIAkJICAgICAhaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSAmJgorCQkgICAgICghaWVlZTgwMjExX2lzX21nbXQoZmMpIHx8CisJCSAgICAgIChpZWVlODAyMTFfaXNfdW5pY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgorCQkgICAgICAgcngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApKSkgJiYKKwkJICAgICAocngtPmtleSB8fCByeC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQpKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJLyogQklQIGRvZXMgbm90IHVzZSBQcm90ZWN0ZWQgZmllbGQsIHNvIG5lZWQgdG8gY2hlY2sgTU1JRSAqLworCWlmICh1bmxpa2VseShyeC0+c3RhICYmIHRlc3Rfc3RhX2ZsYWdzKHJ4LT5zdGEsIFdMQU5fU1RBX01GUCkgJiYKKwkJICAgICBpZWVlODAyMTFfaXNfbXVsdGljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHJ4LT5za2IpICYmCisJCSAgICAgaWVlZTgwMjExX2dldF9tbWllX2tleWlkeChyeC0+c2tiKSA8IDAgJiYKIAkJICAgICAocngtPmtleSB8fCByeC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQpKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKQEAgLTExMzgsMTIgKzEyNTcsMTIgQEAKIAogCXN3aXRjaCAoaGRyLT5mcmFtZV9jb250cm9sICYKIAkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpIHsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKToKIAkJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgogCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKToKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgogCQlpZiAodW5saWtlbHkoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUyAmJgogCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpCiAJCQlyZXR1cm4gLTE7CkBAIC0xMTU3LDEzICsxMjc2LDEzIEBACiAJCQl9CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKIAkJICAgIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkc3QpICYmCiAJCSAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihzcmMsIGRldi0+ZGV2X2FkZHIpKSkKIAkJCXJldHVybiAtMTsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApOgorCWNhc2UgY3B1X3RvX2xlMTYoMCk6CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwpAQCAtMTI2NywxMCArMTM4NiwzNyBAQAogCX0KIAogCWlmIChza2IpIHsKLQkJLyogZGVsaXZlciB0byBsb2NhbCBzdGFjayAqLwotCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKLQkJbmV0aWZfcngoc2tiKTsKKwkJaW50IGFsaWduIF9fbWF5YmVfdW51c2VkOworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVCkgfHwgIWRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpCisJCS8qCisJCSAqICdhbGlnbicgd2lsbCBvbmx5IHRha2UgdGhlIHZhbHVlcyAwIG9yIDIgaGVyZQorCQkgKiBzaW5jZSBhbGwgZnJhbWVzIGFyZSByZXF1aXJlZCB0byBiZSBhbGlnbmVkCisJCSAqIHRvIDItYnl0ZSBib3VuZGFyaWVzIHdoZW4gYmVpbmcgcGFzc2VkIHRvCisJCSAqIG1hYzgwMjExLiBUaGF0IGFsc28gZXhwbGFpbnMgdGhlIF9fc2tiX3B1c2goKQorCQkgKiBiZWxvdy4KKwkJICovCisJCWFsaWduID0gKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgNDsKKwkJaWYgKGFsaWduKSB7CisJCQlpZiAoV0FSTl9PTihza2JfaGVhZHJvb20oc2tiKSA8IDMpKSB7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCXNrYiA9IE5VTEw7CisJCQl9IGVsc2UgeworCQkJCXU4ICpkYXRhID0gc2tiLT5kYXRhOworCQkJCXNpemVfdCBsZW4gPSBza2ItPmxlbjsKKwkJCQl1OCAqbmV3ID0gX19za2JfcHVzaChza2IsIGFsaWduKTsKKwkJCQltZW1tb3ZlKG5ldywgZGF0YSwgbGVuKTsKKwkJCQlfX3NrYl90cmltKHNrYiwgbGVuKTsKKwkJCX0KKwkJfQorI2VuZGlmCisKKwkJaWYgKHNrYikgeworCQkJLyogZGVsaXZlciB0byBsb2NhbCBzdGFjayAqLworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOworCQkJbmV0aWZfcngoc2tiKTsKKwkJfQogCX0KIAogCWlmICh4bWl0X3NrYikgewpAQCAtMTMzOSwxNCArMTQ4NSwyMCBAQAogCQlpZiAocmVtYWluaW5nIDw9IHN1YmZyYW1lX2xlbiArIHBhZGRpbmcpCiAJCQlmcmFtZSA9IHNrYjsKIAkJZWxzZSB7Ci0JCQlmcmFtZSA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKLQkJCQkJICAgICAgc3ViZnJhbWVfbGVuKTsKKwkJCS8qCisJCQkgKiBBbGxvY2F0ZSBhbmQgcmVzZXJ2ZSB0d28gYnl0ZXMgbW9yZSBmb3IgcGF5bG9hZAorCQkJICogYWxpZ25tZW50IHNpbmNlIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSBpcyAxNC4KKwkJCSAqLworCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKAorCQkJCUFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKworCQkJCXN1YmZyYW1lX2xlbiArIDIpOwogCiAJCQlpZiAoZnJhbWUgPT0gTlVMTCkKIAkJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAotCQkJc2tiX3Jlc2VydmUoZnJhbWUsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJCQlza2JfcmVzZXJ2ZShmcmFtZSwKKwkJCQkgICAgQUxJR04obG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCA0KSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpOwogCQkJbWVtY3B5KHNrYl9wdXQoZnJhbWUsIG50b2hzKGxlbikpLCBza2ItPmRhdGEsCiAJCQkJbnRvaHMobGVuKSk7CiAKQEAgLTE1MjksMTEgKzE2ODEsOSBAQAogCQlzdGFydF9zZXFfbnVtID0gbGUxNl90b19jcHUoYmFyLT5zdGFydF9zZXFfbnVtKSA+PiA0OwogCiAJCS8qIHJlc2V0IHNlc3Npb24gdGltZXIgKi8KLQkJaWYgKHRpZF9hZ2dfcngtPnRpbWVvdXQpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9Ci0JCQkJamlmZmllcyArICh0aWRfYWdnX3J4LT50aW1lb3V0IC8gMTAwMCkgKiBIWjsKLQkJCW1vZF90aW1lcigmdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lciwgZXhwaXJlcyk7Ci0JCX0KKwkJaWYgKHRpZF9hZ2dfcngtPnRpbWVvdXQpCisJCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsCisJCQkJICBUVV9UT19FWFBfVElNRSh0aWRfYWdnX3J4LT50aW1lb3V0KSk7CiAKIAkJLyogbWFuYWdlIHJlb3JkZXJpbmcgYnVmZmVyIGFjY29yZGluZyB0byByZXF1ZXN0ZWQgKi8KIAkJLyogc2VxdWVuY2UgbnVtYmVyICovCkBAIC0xNTQ3LDEyICsxNjk3LDY0IEBACiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19zYV9xdWVyeV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKKworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyKSAhPSAwKSB7CisJCS8qIE5vdCB0byBvd24gdW5pY2FzdCBhZGRyZXNzICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPnNhLCBzZGF0YS0+dS5tZ2QuYnNzaWQpICE9IDAgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQpICE9IDApIHsKKwkJLyogTm90IGZyb20gdGhlIGN1cnJlbnQgQVAuICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpIHsKKwkJLyogQXNzb2NpYXRpb24gaW4gcHJvZ3Jlc3M7IGlnbm9yZSBTQSBRdWVyeSAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA8IDI0ICsgMSArIHNpemVvZihyZXNwLT51LmFjdGlvbi51LnNhX3F1ZXJ5KSkgeworCQkvKiBUb28gc2hvcnQgU0EgUXVlcnkgcmVxdWVzdCBmcmFtZSAqLworCQlyZXR1cm47CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKnJlc3ApICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwlpZiAoc2tiID09IE5VTEwpCisJCXJldHVybjsKKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwlyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChyZXNwLCAwLCAyNCk7CisJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOworCW1lbWNweShyZXNwLT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkocmVzcC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCXJlc3AtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpOworCXJlc3AtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9TQV9RVUVSWTsKKwlyZXNwLT51LmFjdGlvbi51LnNhX3F1ZXJ5LmFjdGlvbiA9IFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFOworCW1lbWNweShyZXNwLT51LmFjdGlvbi51LnNhX3F1ZXJ5LnRyYW5zX2lkLAorCSAgICAgICBtZ210LT51LmFjdGlvbi51LnNhX3F1ZXJ5LnRyYW5zX2lkLAorCSAgICAgICBXTEFOX1NBX1FVRVJZX1RSX0lEX0xFTik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOworfQorCiBzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihyeC0+ZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHJ4LT5za2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgbGVuID0gcngtPnNrYi0+bGVuOwogCiAJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtPmZyYW1lX2NvbnRyb2wpKQpAQCAtMTU2NCwxMiArMTc2NiwyNiBAQAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJLyogYWxsIGNhdGVnb3JpZXMgd2UgY3VycmVudGx5IGhhbmRsZSBoYXZlIGFjdGlvbl9jb2RlICovCiAJaWYgKGxlbiA8IElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKyAxKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJc3dpdGNoIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSkgewogCWNhc2UgV0xBTl9DQVRFR09SWV9CQUNLOgorCQkvKgorCQkgKiBUaGUgYWdncmVnYXRpb24gY29kZSBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlCisJCSAqIGFueXRoaW5nIGJ1dCBTVEEvQVAgZHVlIHRvIHRoZSBCU1NJRCBoYW5kbGluZzsKKwkJICogSUJTUyBjb3VsZCB3b3JrIGluIHRoZSBjb2RlIGJ1dCBpc24ndCBzdXBwb3J0ZWQKKwkJICogYnkgZHJpdmVycyBvciB0aGUgc3RhbmRhcmQuCisJCSAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUpIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVE6CiAJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwpAQCAtMTU5NCw2ICsxODEwLDEwIEBACiAJY2FzZSBXTEFOX0NBVEVHT1JZX1NQRUNUUlVNX01HTVQ6CiAJCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKIAkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50LmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9NU1JfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKQEAgLTE2MDEsNiArMTgyMSw0MyBAQAogCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAJCQlpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc2RhdGEsIG1nbXQsIGxlbik7CiAJCQlicmVhazsKKwkJY2FzZSBXTEFOX0FDVElPTl9TUENUX0NITF9TV0lUQ0g6CisJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKworCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoKSkpCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQkJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikpCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCwKKwkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSAgIHNkYXRhLT51Lm1nZC5zc2lkLAorCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZF9sZW4pOworCQkJaWYgKCFic3MpCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQkJaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzZGF0YSwKKwkJCQkgICAgICZtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoLnN3X2VsZW0sIGJzcyk7CisJCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgV0xBTl9DQVRFR09SWV9TQV9RVUVSWToKKwkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKKwkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LnNhX3F1ZXJ5KSkpCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuc2FfcXVlcnkuYWN0aW9uKSB7CisJCWNhc2UgV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVRVUVTVDoKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHNkYXRhLCBtZ210LCBsZW4pOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVTUE9OU0U6CisJCQkvKgorCQkJICogU0EgUXVlcnkgcmVzcG9uc2UgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBpbiBBUCBtb2RlCisJCQkgKiBhbmQgaXQgaXMgcHJvY2Vzc2VkIGluIHVzZXIgc3BhY2UuCisJCQkgKi8KKwkJCXJldHVybiBSWF9DT05USU5VRTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTYxNiwyMiArMTg3MywyNCBAQAogaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOwogCiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAorCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZChyeCwgbWdtdC0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJcmV0dXJuIGllZWU4MDIxMV9tZXNoX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm4gaWVlZTgwMjExX2lic3NfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CiAKLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CiAKLQlpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwotCXJldHVybiBSWF9RVUVVRUQ7CisJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTc4MCw2ICsyMDM5LDcgQEAKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4pCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2spCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGVjcnlwdCkKKwlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9jaGVja19tb3JlX2RhdGEpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfc3RhX3Byb2Nlc3MpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudCkKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9wc19wb2xsKQpAQCAtMTgyMywxNiArMjA4MywxNyBAQAogLyogbWFpbiByZWNlaXZlIHBhdGggKi8KIAogc3RhdGljIGludCBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQl1OCAqYnNzaWQsIHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCisJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogeworCXU4ICpic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCByeC0+c2tiLT5sZW4sIHNkYXRhLT52aWYudHlwZSk7CiAJaW50IG11bHRpY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOwogCiAJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWlmICghYnNzaWQpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpIHsKKwkJaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCkpIHsKIAkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMTg1MCw3ICsyMTExLDcgQEAKIAkJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQkJcmV0dXJuIDE7CiAJCX0KLQkJZWxzZSBpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgeworCQllbHNlIGlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwogCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CkBAIC0xOTI4LDcgKzIxODksNiBAQAogCWludCBwcmVwYXJlczsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldzsKLQl1OCAqYnNzaWQ7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJbWVtc2V0KCZyeCwgMCwgc2l6ZW9mKHJ4KSk7CkBAIC0xOTU2LDcgKzIyMTYsNyBAQAogCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfSU5fU0NBTjsKIAogCWllZWU4MDIxMV9wYXJzZV9xb3MoJnJ4KTsKLQlpZWVlODAyMTFfdmVyaWZ5X2lwX2FsaWdubWVudCgmcngpOworCWllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KCZyeCk7CiAKIAlza2IgPSByeC5za2I7CiAKQEAgLTE5NjcsOSArMjIyNyw4IEBACiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCWNvbnRpbnVlOwogCi0JCWJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHNrYi0+bGVuLCBzZGF0YS0+dmlmLnR5cGUpOwogCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7Ci0JCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMoc2RhdGEsIGJzc2lkLCAmcngsIGhkcik7CisJCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMoc2RhdGEsICZyeCwgaGRyKTsKIAogCQlpZiAoIXByZXBhcmVzKQogCQkJY29udGludWU7CkBAIC0yMTc0LDExICsyNDMzLDkgQEAKIAkvKiBuZXcgdW4tb3JkZXJlZCBhbXBkdSBmcmFtZSAtIHByb2Nlc3MgaXQgKi8KIAogCS8qIHJlc2V0IHNlc3Npb24gdGltZXIgKi8KLQlpZiAodGlkX2FnZ19yeC0+dGltZW91dCkgewotCQl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPQotCQkJamlmZmllcyArICh0aWRfYWdnX3J4LT50aW1lb3V0IC8gMTAwMCkgKiBIWjsKLQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLCBleHBpcmVzKTsKLQl9CisJaWYgKHRpZF9hZ2dfcngtPnRpbWVvdXQpCisJCW1vZF90aW1lcigmdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lciwKKwkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCiAJLyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqLwogCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCBmNWM3YzMzLi4zYmY5ODM5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTEyLDE0ICsxMiwxMSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotLyogVE9ETzoKLSAqIG9yZGVyIEJTUyBsaXN0IGJ5IFJTU0koPykgKCJxdWFsaXR5IG9mIEFQIikKLSAqIHNjYW4gcmVzdWx0IHRhYmxlIGZpbHRlcmluZyAoYnkgY2FwYWJpbGl0eSAocHJpdmFjeSwgSUJTUy9CU1MsIFdQQS9SU04gSUUsCi0gKiAgICBTU0lEKQotICovCisvKiBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBhdm9pZCB0aGF0IHRoZSAiY3VycmVudCBCU1MiIGV4cGlyZXMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIApAQCAtMzAsMTkyICsyNywyOSBAQAogI2RlZmluZSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FIChIWiAvIDMzKQogI2RlZmluZSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUUgKEhaIC8gNSkKIAotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmJzc19sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPmJzc19saXN0KTsKLX0KLQotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotfQotCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCiBpZWVlODAyMTFfcnhfYnNzX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmJzc2lkLCBpbnQgZnJlcSwKIAkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlic3MgPSBsb2NhbC0+YnNzX2hhc2hbU1RBX0hBU0goYnNzaWQpXTsKLQl3aGlsZSAoYnNzKSB7Ci0JCWlmICghYnNzX21lc2hfY2ZnKGJzcykgJiYKLQkJICAgICFtZW1jbXAoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAmJgotCQkgICAgYnNzLT5mcmVxID09IGZyZXEgJiYKLQkJICAgIGJzcy0+c3NpZF9sZW4gPT0gc3NpZF9sZW4gJiYKLQkJICAgIChzc2lkX2xlbiA9PSAwIHx8ICFtZW1jbXAoYnNzLT5zc2lkLCBzc2lkLCBzc2lkX2xlbikpKSB7Ci0JCQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJzcyA9IGJzcy0+aG5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7CisJcmV0dXJuICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksCisJCQkJCWllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksCisJCQkJCQkJICAgICAgZnJlcSksCisJCQkJCWJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkJMCwgMCk7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgbG9jYWwtPmJzc19sb2NrICovCi1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2ZyZWUoc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcykKIHsKLQl1OCBoYXNoX2lkeDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gKHZvaWQgKiljYnNzOwogCi0JaWYgKGJzc19tZXNoX2NmZyhic3MpKQotCQloYXNoX2lkeCA9IG1lc2hfaWRfaGFzaChic3NfbWVzaF9pZChic3MpLAotCQkJCQlic3NfbWVzaF9pZF9sZW4oYnNzKSk7Ci0JZWxzZQotCQloYXNoX2lkeCA9IFNUQV9IQVNIKGJzcy0+YnNzaWQpOwotCi0JYnNzLT5obmV4dCA9IGxvY2FsLT5ic3NfaGFzaFtoYXNoX2lkeF07Ci0JbG9jYWwtPmJzc19oYXNoW2hhc2hfaWR4XSA9IGJzczsKLX0KLQotLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+YnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYiwgKnByZXYgPSBOVUxMOwotCWIgPSBsb2NhbC0+YnNzX2hhc2hbU1RBX0hBU0goYnNzLT5ic3NpZCldOwotCXdoaWxlIChiKSB7Ci0JCWlmIChiID09IGJzcykgewotCQkJaWYgKCFwcmV2KQotCQkJCWxvY2FsLT5ic3NfaGFzaFtTVEFfSEFTSChic3MtPmJzc2lkKV0gPQotCQkJCQlic3MtPmhuZXh0OwotCQkJZWxzZQotCQkJCXByZXYtPmhuZXh0ID0gYnNzLT5obmV4dDsKLQkJCWJyZWFrOwotCQl9Ci0JCXByZXYgPSBiOwotCQliID0gYi0+aG5leHQ7Ci0JfQotfQotCi1zdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmJzc2lkLCBpbnQgZnJlcSwKLQkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCWJzcyA9IGt6YWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIE5VTEw7Ci0JYXRvbWljX3NldCgmYnNzLT51c2VycywgMik7Ci0JbWVtY3B5KGJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYnNzLT5mcmVxID0gZnJlcTsKLQlpZiAoc3NpZCAmJiBzc2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7Ci0JCW1lbWNweShic3MtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQkJYnNzLT5zc2lkX2xlbiA9IHNzaWRfbGVuOwotCX0KLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5ic3NfbGlzdCk7Ci0JX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKGxvY2FsLCBic3MpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9tZXNoX2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4sCi0JCQkgIHU4ICptZXNoX2NmZywgaW50IGZyZXEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlic3MgPSBsb2NhbC0+YnNzX2hhc2hbbWVzaF9pZF9oYXNoKG1lc2hfaWQsIG1lc2hfaWRfbGVuKV07Ci0Jd2hpbGUgKGJzcykgewotCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykgJiYKLQkJICAgICFtZW1jbXAoYnNzX21lc2hfY2ZnKGJzcyksIG1lc2hfY2ZnLCBNRVNIX0NGR19DTVBfTEVOKSAmJgotCQkgICAgYnNzLT5mcmVxID09IGZyZXEgJiYKLQkJICAgIG1lc2hfaWRfbGVuID09IGJzcy0+bWVzaF9pZF9sZW4gJiYKLQkJICAgIChtZXNoX2lkX2xlbiA9PSAwIHx8ICFtZW1jbXAoYnNzLT5tZXNoX2lkLCBtZXNoX2lkLAotCQkJCQkJIG1lc2hfaWRfbGVuKSkpIHsKLQkJCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnNzID0gYnNzLT5obmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9tZXNoX2Jzc19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4sCi0JCQkgIHU4ICptZXNoX2NmZywgaW50IG1lc2hfY29uZmlnX2xlbiwgaW50IGZyZXEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQotCWlmIChtZXNoX2NvbmZpZ19sZW4gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlic3MgPSBremFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFic3MpCi0JCXJldHVybiBOVUxMOwotCi0JYnNzLT5tZXNoX2NmZyA9IGttYWxsb2MoTUVTSF9DRkdfQ01QX0xFTiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFic3MtPm1lc2hfY2ZnKSB7Ci0JCWtmcmVlKGJzcyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChtZXNoX2lkX2xlbiAmJiBtZXNoX2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOKSB7Ci0JCWJzcy0+bWVzaF9pZCA9IGttYWxsb2MobWVzaF9pZF9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoIWJzcy0+bWVzaF9pZCkgewotCQkJa2ZyZWUoYnNzLT5tZXNoX2NmZyk7Ci0JCQlrZnJlZShic3MpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJbWVtY3B5KGJzcy0+bWVzaF9pZCwgbWVzaF9pZCwgbWVzaF9pZF9sZW4pOwotCX0KLQotCWF0b21pY19zZXQoJmJzcy0+dXNlcnMsIDIpOwotCW1lbWNweShic3MtPm1lc2hfY2ZnLCBtZXNoX2NmZywgTUVTSF9DRkdfQ01QX0xFTik7Ci0JYnNzLT5tZXNoX2lkX2xlbiA9IG1lc2hfaWRfbGVuOwotCWJzcy0+ZnJlcSA9IGZyZXE7Ci0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCS8qIFRPRE86IG9yZGVyIGJ5IFJTU0k/ICovCi0JbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmbG9jYWwtPmJzc19saXN0KTsKLQlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQobG9jYWwsIGJzcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlrZnJlZShic3MtPmllcyk7CiAJa2ZyZWUoYnNzX21lc2hfaWQoYnNzKSk7CiAJa2ZyZWUoYnNzX21lc2hfY2ZnKGJzcykpOwotCWtmcmVlKGJzcyk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmICghYXRvbWljX2RlY19hbmRfbG9jaygmYnNzLT51c2VycywgJmxvY2FsLT5ic3NfbG9jaykpIHsKLQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9kZWwobG9jYWwsIGJzcyk7Ci0JbGlzdF9kZWwoJmJzcy0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JaWVlZTgwMjExX3J4X2Jzc19mcmVlKGJzcyk7CisJY2ZnODAyMTFfcHV0X2Jzcygoc3RydWN0IGNmZzgwMjExX2JzcyAqKWJzcyk7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKQEAgLTIyNCwzOSArNTgsMjUgQEAKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJICBzaXplX3QgbGVuLAogCQkJICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgIGludCBmcmVxLCBib29sIGJlYWNvbikKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJICBib29sIGJlYWNvbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBjbGVuOworCXMzMiBzaWduYWwgPSAwOwogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQlpZiAoZWxlbXMtPm1lc2hfY29uZmlnKQotCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfZ2V0KGxvY2FsLCBlbGVtcy0+bWVzaF9pZCwKLQkJCQllbGVtcy0+bWVzaF9pZF9sZW4sIGVsZW1zLT5tZXNoX2NvbmZpZywgZnJlcSk7Ci0JZWxzZQotI2VuZGlmCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBtZ210LT5ic3NpZCwgZnJlcSwKLQkJCQkJICAgZWxlbXMtPnNzaWQsIGVsZW1zLT5zc2lkX2xlbik7Ci0JaWYgKCFic3MpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCQlpZiAoZWxlbXMtPm1lc2hfY29uZmlnKQotCQkJYnNzID0gaWVlZTgwMjExX3J4X21lc2hfYnNzX2FkZChsb2NhbCwgZWxlbXMtPm1lc2hfaWQsCi0JCQkJZWxlbXMtPm1lc2hfaWRfbGVuLCBlbGVtcy0+bWVzaF9jb25maWcsCi0JCQkJZWxlbXMtPm1lc2hfY29uZmlnX2xlbiwgZnJlcSk7Ci0JCWVsc2UKLSNlbmRpZgotCQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQobG9jYWwsIG1nbXQtPmJzc2lkLCBmcmVxLAotCQkJCQkJICBlbGVtcy0+c3NpZCwgZWxlbXMtPnNzaWRfbGVuKTsKLQkJaWYgKCFic3MpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotI2lmIDAKLQkJLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQkJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LCAmbG9jYWwtPmJzc19saXN0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0jZW5kaWYKLQl9CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQorCQlzaWduYWwgPSByeF9zdGF0dXMtPnNpZ25hbCAqIDEwMDsKKwllbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykKKwkJc2lnbmFsID0gKHJ4X3N0YXR1cy0+c2lnbmFsICogMTAwKSAvIGxvY2FsLT5ody5tYXhfc2lnbmFsOworCisJYnNzID0gKHZvaWQgKiljZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKGxvY2FsLT5ody53aXBoeSwgY2hhbm5lbCwKKwkJCQkJCW1nbXQsIGxlbiwgc2lnbmFsLCBHRlBfQVRPTUlDKTsKKworCWlmICghYnNzKQorCQlyZXR1cm4gTlVMTDsKKworCWJzcy0+Y2Jzcy5mcmVlX3ByaXYgPSBpZWVlODAyMTFfcnhfYnNzX2ZyZWU7CiAKIAkvKiBzYXZlIHRoZSBFUlAgdmFsdWUgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgYXQgYXNzb2NpYXRpb24gdGltZSAqLwogCWlmIChlbGVtcy0+ZXJwX2luZm8gJiYgZWxlbXMtPmVycF9pbmZvX2xlbiA+PSAxKSB7CkBAIC0yNjQsOSArODQsNiBAQAogCQlic3MtPmhhc19lcnBfdmFsdWUgPSAxOwogCX0KIAotCWJzcy0+YmVhY29uX2ludCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQpOwotCWJzcy0+Y2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pOwotCiAJaWYgKGVsZW1zLT50aW0pIHsKIAkJc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbV9pZSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKillbGVtcy0+dGltOwpAQCAtMjk1LDM3ICsxMTIsMjcgQEAKIAkJYnNzLT5zdXBwX3JhdGVzX2xlbiArPSBjbGVuOwogCX0KIAotCWJzcy0+YmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKLQotCWJzcy0+dGltZXN0YW1wID0gbGU2NF90b19jcHUobWdtdC0+dS5iZWFjb24udGltZXN0YW1wKTsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+c2lnbmFsOwotCWJzcy0+bm9pc2UgPSByeF9zdGF0dXMtPm5vaXNlOwotCWJzcy0+cXVhbCA9IHJ4X3N0YXR1cy0+cXVhbDsKIAlic3MtPndtbV91c2VkID0gZWxlbXMtPndtbV9wYXJhbSB8fCBlbGVtcy0+d21tX2luZm87CiAKIAlpZiAoIWJlYWNvbikKIAkJYnNzLT5sYXN0X3Byb2JlX3Jlc3AgPSBqaWZmaWVzOwogCi0JLyoKLQkgKiBGb3IgcHJvYmUgcmVzcG9uc2VzLCBvciBpZiB3ZSBkb24ndCBoYXZlIGFueSBpbmZvcm1hdGlvbiB5ZXQsCi0JICogdXNlIHRoZSBJRXMgZnJvbSB0aGUgYmVhY29uLgotCSAqLwotCWlmICghYnNzLT5pZXMgfHwgIWJlYWNvbikgewotCQlpZiAoYnNzLT5pZXMgPT0gTlVMTCB8fCBic3MtPmllc19sZW4gPCBlbGVtcy0+dG90YWxfbGVuKSB7Ci0JCQlrZnJlZShic3MtPmllcyk7Ci0JCQlic3MtPmllcyA9IGttYWxsb2MoZWxlbXMtPnRvdGFsX2xlbiwgR0ZQX0FUT01JQyk7Ci0JCX0KLQkJaWYgKGJzcy0+aWVzKSB7Ci0JCQltZW1jcHkoYnNzLT5pZXMsIGVsZW1zLT5pZV9zdGFydCwgZWxlbXMtPnRvdGFsX2xlbik7Ci0JCQlic3MtPmllc19sZW4gPSBlbGVtcy0+dG90YWxfbGVuOwotCQl9IGVsc2UKLQkJCWJzcy0+aWVzX2xlbiA9IDA7Ci0JfQotCiAJcmV0dXJuIGJzczsKIH0KIAordm9pZCBpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkLAorCQkJICAgICBpbnQgZnJlcSwgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgYnNzaWQsIGZyZXEsIHNzaWQsIHNzaWRfbGVuKTsKKwlpZiAoYnNzKSB7CisJCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAodm9pZCAqKWJzcyk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCX0KK30KKwogaWVlZTgwMjExX3J4X3Jlc3VsdAogaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTM4Nyw3ICsxOTQsNyBAQAogCiAJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzZGF0YS0+bG9jYWwsIHJ4X3N0YXR1cywKIAkJCQkJbWdtdCwgc2tiLT5sZW4sICZlbGVtcywKLQkJCQkJZnJlcSwgYmVhY29uKTsKKwkJCQkJY2hhbm5lbCwgYmVhY29uKTsKIAlpZiAoYnNzKQogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChzZGF0YS0+bG9jYWwsIGJzcyk7CiAKQEAgLTM5NSw1NiArMjAyLDk0IEBACiAJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICBpbnQgcG93ZXJzYXZlKQordm9pZCBpZWVlODAyMTFfc2Nhbl9mYWlsZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7Ci0JX19sZTE2IGZjOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAyNCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsZnVuYyAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCWlmIChXQVJOX09OKCFsb2NhbC0+c2Nhbl9yZXEpKQogCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAotCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7Ci0JZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8Ci0JCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7Ci0JaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwotCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gZmM7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkvKiBub3RpZnkgY2ZnODAyMTEgYWJvdXQgdGhlIGZhaWxlZCBzY2FuICovCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAhPSAmbG9jYWwtPmludF9zY2FuX3JlcSkKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKGxvY2FsLT5zY2FuX3JlcSwgdHJ1ZSk7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworCWxvY2FsLT5zY2FuX3JlcSA9IE5VTEw7CiB9CiAKLXZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorLyoKKyAqIGluZm9ybSBBUCB0aGF0IHdlIHdpbGwgZ28gdG8gc2xlZXAgc28gdGhhdCBpdCB3aWxsIGJ1ZmZlciB0aGUgZnJhbWVzCisgKiB3aGlsZSB3ZSBzY2FuCisgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3BzX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlib29sIHBzID0gZmFsc2U7CisKKwkvKiBGSVhNRTogd2hhdCB0byBkbyB3aGVuIGxvY2FsLT5wc3BvbGxpbmcgaXMgdHJ1ZT8gKi8KKworCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCisJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKKwkJcHMgPSB0cnVlOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJfQorCisJaWYgKCFwcyB8fCAhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykpCisJCS8qCisJCSAqIElmIHBvd2VyIHNhdmUgd2FzIGVuYWJsZWQsIG5vIG5lZWQgdG8gc2VuZCBhIG51bGxmdW5jCisJCSAqIGZyYW1lIGJlY2F1c2UgQVAga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcuIEJ1dCBpZiB0aGUKKwkJICogaGFyZHdhcmUgaXMgY3JlYXRpbmcgdGhlIG51bGxmdW5jIGZyYW1lIGZvciBwb3dlciBzYXZlCisJCSAqIHN0YXR1cyAoaWUuIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBpcyBub3QKKwkJICogZW5hYmxlZCkgYW5kIHBvd2VyIHNhdmUgd2FzIGVuYWJsZWQsIHRoZSBmaXJtd2FyZSBqdXN0CisJCSAqIHNlbnQgYSBudWxsIGZyYW1lIHdpdGggcG93ZXIgc2F2ZSBkaXNhYmxlZC4gU28gd2UgbmVlZAorCQkgKiB0byBzZW5kIGEgbmV3IG51bGxmdW5jIGZyYW1lIHRvIGluZm9ybSB0aGUgQVAgdGhhdCB3ZQorCQkgKiBhcmUgYWdhaW4gc2xlZXBpbmcuCisJCSAqLworCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworfQorCisvKiBpbmZvcm0gQVAgdGhhdCB3ZSBhcmUgYXdha2UgYWdhaW4sIHVubGVzcyBwb3dlciBzYXZlIGlzIGVuYWJsZWQgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3BzX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlpZiAoIWxvY2FsLT5wb3dlcnNhdmUpCisJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJZWxzZSB7CisJCS8qCisJCSAqIEluICFJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgY2FzZSB0aGUgaGFyZHdhcmUKKwkJICogd2lsbCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCB0aGUgcG93ZXJzYXZlIGJpdCBzZXQKKwkJICogZXZlbiB0aG91Z2ggdGhlIEFQIGFscmVhZHkga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcuCisJCSAqIFRoaXMgY291bGQgYmUgYXZvaWRlZCBieSBzZW5kaW5nIGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyCisJCSAqIHNhdmUgYml0IGRpc2FibGVkIGJlZm9yZSBlbmFibGluZyB0aGUgcG93ZXIgc2F2ZSwgYnV0CisJCSAqIHRoaXMgZG9lc24ndCBnYWluIGFueXRoaW5nLgorCQkgKgorCQkgKiBXaGVuIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBpcyBlbmFibGVkLCBubyBuZWVkCisJCSAqIHRvIHNlbmQgYSBudWxsZnVuYyBmcmFtZSBiZWNhdXNlIEFQIGFscmVhZHkga25vd3MgdGhhdAorCQkgKiB3ZSBhcmUgc2xlZXBpbmcsIGxldCdzIGp1c3QgZW5hYmxlIHBvd2VyIHNhdmUgbW9kZSBpbgorCQkgKiBoYXJkd2FyZS4KKwkJICovCisJCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCX0KK30KKwordm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAlpZiAoV0FSTl9PTighbG9jYWwtPmh3X3NjYW5uaW5nICYmICFsb2NhbC0+c3dfc2Nhbm5pbmcpKQogCQlyZXR1cm47CiAKLQlsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCA9IGppZmZpZXM7Ci0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCWlmIChXQVJOX09OKCFsb2NhbC0+c2Nhbl9yZXEpKQorCQlyZXR1cm47CiAKLQkvKgotCSAqIGxvY2FsLT5zY2FuX3NkYXRhIGNvdWxkIGhhdmUgYmVlbiBOVUxMZWQgYnkgdGhlIGludGVyZmFjZQotCSAqIGRvd24gY29kZSBpbiBjYXNlIHdlIHdlcmUgc2Nhbm5pbmcgb24gYW4gaW50ZXJmYWNlIHRoYXQgaXMKLQkgKiBiZWluZyB0YWtlbiBkb3duLgotCSAqLwotCXNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0JaWYgKHNkYXRhKQotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJaWYgKGxvY2FsLT5zY2FuX3JlcSAhPSAmbG9jYWwtPmludF9zY2FuX3JlcSkKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKGxvY2FsLT5zY2FuX3JlcSwgYWJvcnRlZCk7CisJbG9jYWwtPnNjYW5fcmVxID0gTlVMTDsKKworCWxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkID0gamlmZmllczsKIAogCWlmIChsb2NhbC0+aHdfc2Nhbm5pbmcpIHsKIAkJbG9jYWwtPmh3X3NjYW5uaW5nID0gZmFsc2U7CkBAIC00NzIsMzQgKzMxNyw0NiBAQAogCW5ldGlmX2FkZHJfdW5sb2NrKGxvY2FsLT5tZGV2KTsKIAluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9jb21wbGV0ZSkKKwkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9jb21wbGV0ZShsb2NhbF90b19odyhsb2NhbCkpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKwogCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7Ci0JCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKKwkJCQlpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHNkYXRhKTsKIAkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJCQl9CiAJCX0gZWxzZQogCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOworCisJCS8qIHJlLWVuYWJsZSBiZWFjb25pbmcgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsCisJCQkJCSAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAgZG9uZToKIAlpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOworCWllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CiAJaWVlZTgwMjExX21lc2hfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKTsKIAotCiB2b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHNjYW5fd29yay53b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKLQlpbnQgc2tpcDsKKwlpbnQgc2tpcCwgaTsKIAl1bnNpZ25lZCBsb25nIG5leHRfZGVsYXkgPSAwOwogCiAJLyoKQEAgLTUxMCwzMyArMzY3LDEzIEBACiAKIAlzd2l0Y2ggKGxvY2FsLT5zY2FuX3N0YXRlKSB7CiAJY2FzZSBTQ0FOX1NFVF9DSEFOTkVMOgotCQkvKgotCQkgKiBHZXQgY3VycmVudCBzY2FuIGJhbmQuIHNjYW5fYmFuZCBtYXkgYmUgSUVFRTgwMjExX05VTV9CQU5EUwotCQkgKiBhZnRlciB3ZSBzdWNjZXNzZnVsbHkgc2Nhbm5lZCB0aGUgbGFzdCBjaGFubmVsIG9mIHRoZSBsYXN0Ci0JCSAqIGJhbmQgKGFuZCB0aGUgbGFzdCBiYW5kIGlzIHN1cHBvcnRlZCBieSB0aGUgaHcpCi0JCSAqLwotCQlpZiAobG9jYWwtPnNjYW5fYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFMpCi0JCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPnNjYW5fYmFuZF07Ci0JCWVsc2UKLQkJCXNiYW5kID0gTlVMTDsKLQotCQkvKgotCQkgKiBJZiB3ZSBhcmUgYXQgYW4gdW5zdXBwb3J0ZWQgYmFuZCBhbmQgaGF2ZSBtb3JlIGJhbmRzCi0JCSAqIGxlZnQgdG8gc2NhbiwgYWR2YW5jZSB0byB0aGUgbmV4dCBzdXBwb3J0ZWQgb25lLgotCQkgKi8KLQkJd2hpbGUgKCFzYmFuZCAmJiBsb2NhbC0+c2Nhbl9iYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUyAtIDEpIHsKLQkJCWxvY2FsLT5zY2FuX2JhbmQrKzsKLQkJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+c2Nhbl9iYW5kXTsKLQkJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKLQkJfQotCiAJCS8qIGlmIG5vIG1vcmUgYmFuZHMvY2hhbm5lbHMgbGVmdCwgY29tcGxldGUgc2NhbiAqLwotCQlpZiAoIXNiYW5kIHx8IGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKSB7Ci0JCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IGxvY2FsLT5zY2FuX3JlcS0+bl9jaGFubmVscykgeworCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGxvY2FsX3RvX2h3KGxvY2FsKSwgZmFsc2UpOwogCQkJcmV0dXJuOwogCQl9CiAJCXNraXAgPSAwOwotCQljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeF07CisJCWNoYW4gPSBsb2NhbC0+c2Nhbl9yZXEtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKIAogCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCB8fAogCQkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgpAQCAtNTUyLDE1ICszODksNiBAQAogCiAJCS8qIGFkdmFuY2Ugc3RhdGUgbWFjaGluZSB0byBuZXh0IGNoYW5uZWwvYmFuZCAqLwogCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCsrOwotCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpIHsKLQkJCS8qCi0JCQkgKiBzY2FuX2JhbmQgbWF5IGVuZCB1cCA9PSBJRUVFODAyMTFfTlVNX0JBTkRTLCBidXQKLQkJCSAqIHdlJ2xsIGNhdGNoIHRoYXQgY2FzZSBhYm92ZSBhbmQgY29tcGxldGUgdGhlIHNjYW4KLQkJCSAqIGlmIHRoYXQgaXMgdGhlIGNhc2UuCi0JCQkgKi8KLQkJCWxvY2FsLT5zY2FuX2JhbmQrKzsKLQkJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKLQkJfQogCiAJCWlmIChza2lwKQogCQkJYnJlYWs7CkBAIC01NzMsMTAgKzQwMSwxNSBAQAogCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FOwogCQlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CiAKLQkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4gfHwKKwkJICAgICFsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHMpCiAJCQlicmVhazsKLQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLCBsb2NhbC0+c2Nhbl9zc2lkLAotCQkJCQkgbG9jYWwtPnNjYW5fc3NpZF9sZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzOyBpKyspCisJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoCisJCQkJc2RhdGEsIE5VTEwsCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkLAorCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZF9sZW4sCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOwogCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX0NIQU5ORUxfVElNRTsKIAkJYnJlYWs7CiAJfQpAQCAtNTg3LDE0ICs0MjAsMTkgQEAKIAogCiBpbnQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2Nhbl9zZGF0YSwKLQkJCSB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorCQkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNjYW5fc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCi0JaWYgKHNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwlpZiAoIXJlcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAobG9jYWwtPnNjYW5fcmVxICYmIGxvY2FsLT5zY2FuX3JlcSAhPSByZXEpCisJCXJldHVybiAtRUJVU1k7CisKKwlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CisKIAkvKiBNTE1FLVNDQU4ucmVxdWVzdCAocGFnZSAxMTgpICBwYWdlIDE0NCAoMTEuMS4zLjEpCiAJICogQlNTVHlwZTogSU5GUkFTVFJVQ1RVUkUsIElOREVQRU5ERU5ULCBBTllfQlNTCiAJICogQlNTSUQ6IE1BQ0FkZHJlc3MKQEAgLTYyMiw3ICs0NjAsNyBAQAogCQlpbnQgcmM7CiAKIAkJbG9jYWwtPmh3X3NjYW5uaW5nID0gdHJ1ZTsKLQkJcmMgPSBsb2NhbC0+b3BzLT5od19zY2FuKGxvY2FsX3RvX2h3KGxvY2FsKSwgc3NpZCwgc3NpZF9sZW4pOworCQlyYyA9IGxvY2FsLT5vcHMtPmh3X3NjYW4obG9jYWxfdG9faHcobG9jYWwpLCByZXEpOwogCQlpZiAocmMpIHsKIAkJCWxvY2FsLT5od19zY2FubmluZyA9IGZhbHNlOwogCQkJcmV0dXJuIHJjOwpAQCAtNjMxLDI5ICs0NjksNDkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBIYXJkd2FyZS9kcml2ZXIgZG9lc24ndCBzdXBwb3J0IGh3X3NjYW4sIHNvIHVzZSBzb2Z0d2FyZQorCSAqIHNjYW5uaW5nIGluc3RlYWQuIEZpcnN0IHNlbmQgYSBudWxsZnVuYyBmcmFtZSB3aXRoIHBvd2VyIHNhdmUKKwkgKiBiaXQgb24gc28gdGhhdCBBUCB3aWxsIGJ1ZmZlciB0aGUgZnJhbWVzIGZvciB1cyB3aGlsZSB3ZSBhcmUgbm90CisJICogbGlzdGVuaW5nLCB0aGVuIHNlbmQgcHJvYmUgcmVxdWVzdHMgdG8gZWFjaCBjaGFubmVsIGFuZCB3YWl0IGZvcgorCSAqIHRoZSByZXNwb25zZXMuIEFmdGVyIGFsbCBjaGFubmVscyBhcmUgc2Nhbm5lZCwgdHVuZSBiYWNrIHRvIHRoZQorCSAqIG9yaWdpbmFsIGNoYW5uZWwgYW5kIHNlbmQgYSBudWxsZnVuYyBmcmFtZSB3aXRoIHBvd2VyIHNhdmUgYml0CisJICogb2ZmIHRvIHRyaWdnZXIgdGhlIEFQIHRvIHNlbmQgdXMgYWxsIHRoZSBidWZmZXJlZCBmcmFtZXMuCisJICoKKwkgKiBOb3RlIHRoYXQgd2hpbGUgbG9jYWwtPnN3X3NjYW5uaW5nIGlzIHRydWUgZXZlcnl0aGluZyBlbHNlIGJ1dAorCSAqIG51bGxmdW5jIGZyYW1lcyBhbmQgcHJvYmUgcmVxdWVzdHMgd2lsbCBiZSBkcm9wcGVkIGluCisJICogaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKS4KKwkgKi8KIAlsb2NhbC0+c3dfc2Nhbm5pbmcgPSB0cnVlOworCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX3N0YXJ0KQorCQlsb2NhbC0+b3BzLT5zd19zY2FuX3N0YXJ0KGxvY2FsX3RvX2h3KGxvY2FsKSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKKwkJLyogZGlzYWJsZSBiZWFjb25pbmcgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsCisJCQkJCSAgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CisKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CiAJCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwotCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCi0JaWYgKHNzaWQpIHsKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQkJbWVtY3B5KGxvY2FsLT5zY2FuX3NzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQl9IGVsc2UKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSAwOwogCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRVRfQ0hBTk5FTDsKIAlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JbG9jYWwtPnNjYW5fYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzY2FuX3NkYXRhOworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAogCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJbG9jYWwtPmZpbHRlcl9mbGFncyB8PSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKQEAgLTY3MywxMyArNTMxLDIxIEBACiAKIAogaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCisJaWYgKCFyZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAmJiBsb2NhbC0+c2Nhbl9yZXEgIT0gcmVxKQorCQlyZXR1cm4gLUVCVVNZOworCisJbG9jYWwtPnNjYW5fcmVxID0gcmVxOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIHNzaWQsIHNzaWRfbGVuKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCByZXEpOwogCiAJLyoKIAkgKiBTVEEgaGFzIGEgc3RhdGUgbWFjaGluZSB0aGF0IG1pZ2h0IG5lZWQgdG8gZGVmZXIgc2Nhbm5pbmcKQEAgLTY5MywyNDIgKzU1OSw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0JaWZzdGEtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQlpZiAoc3NpZF9sZW4pCi0JCW1lbWNweShpZnN0YS0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZzdGEtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAogCXJldHVybiAwOwogfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX2FkZF9pZXMoc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAotCQkJCSAgIGNoYXIgKipjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQotewotCXU4ICpwb3MsICplbmQsICpuZXh0OwotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0KLQlpZiAoYnNzID09IE5VTEwgfHwgYnNzLT5pZXMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiBuZWVkZWQsIGZyYWdtZW50IHRoZSBJRXMgYnVmZmVyIChhdCBJRSBib3VuZGFyaWVzKSBpbnRvIHNob3J0Ci0JICogZW5vdWdoIGZyYWdtZW50cyB0byBmaXQgaW50byBJV19HRU5FUklDX0lFX01BWCBvY3RldCBtZXNzYWdlcy4KLQkgKi8KLQlwb3MgPSBic3MtPmllczsKLQllbmQgPSBwb3MgKyBic3MtPmllc19sZW47Ci0KLQl3aGlsZSAoZW5kIC0gcG9zID4gSVdfR0VORVJJQ19JRV9NQVgpIHsKLQkJbmV4dCA9IHBvcyArIDIgKyBwb3NbMV07Ci0JCXdoaWxlIChuZXh0ICsgMiArIG5leHRbMV0gLSBwb3MgPCBJV19HRU5FUklDX0lFX01BWCkKLQkJCW5leHQgPSBuZXh0ICsgMiArIG5leHRbMV07Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXh0IC0gcG9zOwotCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAotCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKLQotCQlwb3MgPSBuZXh0OwotCX0KLQotCWlmIChlbmQgPiBwb3MpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmQgLSBwb3M7Ci0JCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCi0JCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOwotCX0KLX0KLQotCi1zdGF0aWMgY2hhciAqCi1pZWVlODAyMTFfc2Nhbl9yZXN1bHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsCi0JCSAgICAgIGNoYXIgKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCi17Ci0Jc3RydWN0IGl3X2V2ZW50IGl3ZTsKLQljaGFyICpidWY7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkgICAgICAgYnNzLT5sYXN0X3VwZGF0ZSArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQotCQlyZXR1cm4gY3VycmVudF9ldjsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfQUREUl9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWlmIChic3NfbWVzaF9jZmcoYnNzKSkgewotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzc19tZXNoX2lkX2xlbihic3MpOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGJzc19tZXNoX2lkKGJzcykpOwotCX0gZWxzZSB7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5zc2lkX2xlbjsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBic3MtPnNzaWQpOwotCX0KLQotCWlmIChic3MtPmNhcGFiaWxpdHkgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKQotCSAgICB8fCBic3NfbWVzaF9jZmcoYnNzKSkgewotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCWlmIChic3NfbWVzaF9jZmcoYnNzKSkKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01FU0g7Ci0JCWVsc2UgaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPmZyZXEpOwotCWl3ZS51LmZyZXEuZSA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JaXdlLnUuZnJlcS5tID0gYnNzLT5mcmVxOwotCWl3ZS51LmZyZXEuZSA9IDY7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+cXVhbDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWw7Ci0JaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2U7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJICBJV19FVl9RVUFMX0xFTik7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgIiIpOwotCi0JaWVlZTgwMjExX3NjYW5fYWRkX2llcyhpbmZvLCBic3MsICZjdXJyZW50X2V2LCBlbmRfYnVmKTsKLQotCWlmIChic3MtPnN1cHBfcmF0ZXNfbGVuID4gMCkgewotCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCi0JCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwotCQlpbnQgaTsKLQotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoYnNzLT5zdXBwX3JhdGVzW2ldICYKLQkJCQkJCQkweDdmKSAqIDUwMDAwMCk7Ci0JCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKLQkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQkJfQotCQljdXJyZW50X2V2ID0gcDsKLQl9Ci0KLQlidWYgPSBrbWFsbG9jKDMwLCBHRlBfQVRPTUlDKTsKLQlpZiAoYnVmKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQlzcHJpbnRmKGJ1ZiwgInRzZj0lMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoYnNzLT50aW1lc3RhbXApKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQlzcHJpbnRmKGJ1ZiwgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gYnNzLT5sYXN0X3VwZGF0ZSkpOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKLQkJa2ZyZWUoYnVmKTsKLQl9Ci0KLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJdTggKmNmZyA9IGJzc19tZXNoX2NmZyhic3MpOwotCQlidWYgPSBrbWFsbG9jKDUwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJ1ZikgewotCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQkJc3ByaW50ZihidWYsICJNZXNoIG5ldHdvcmsgKHZlcnNpb24gJWQpIiwgY2ZnWzBdKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOwotCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBQcm90b2NvbCBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMV0sIGNmZ1syXSwgY2ZnWzNdLAotCQkJCQkJCWNmZ1s0XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gTWV0cmljIElEOiAiCi0JCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s1XSwgY2ZnWzZdLCBjZmdbN10sCi0JCQkJCQkJY2ZnWzhdKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOwotCQkJc3ByaW50ZihidWYsICJDb25nZXN0aW9uIENvbnRyb2wgTW9kZSBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbOV0sIGNmZ1sxMF0sCi0JCQkJCQkJY2ZnWzExXSwgY2ZnWzEyXSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiQ2hhbm5lbCBQcmVjZWRlbmNlOiAiCi0JCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxM10sIGNmZ1sxNF0sCi0JCQkJCQkJY2ZnWzE1XSwgY2ZnWzE2XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCWtmcmVlKGJ1Zik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotCi1pbnQgaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0JY2hhciAqY3VycmVudF9ldiA9IGJ1ZjsKLQljaGFyICplbmRfYnVmID0gYnVmICsgbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQotCQljdXJyZW50X2V2ID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0KGxvY2FsLCBpbmZvLCBic3MsCi0JCQkJCQkgICAgICAgY3VycmVudF9ldiwgZW5kX2J1Zik7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBjdXJyZW50X2V2IC0gYnVmOwotfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCmluZGV4IGY3MmJhZDYuLjVmN2EyNjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYworKysgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJCUlFRUU4MDIxMV9TUENUX01TUl9SUFJUX01PREVfUkVGVVNFRDsKIAltc3JfcmVwb3J0LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50Lm1zcl9lbGVtLnR5cGUgPSByZXF1ZXN0X2llLT50eXBlOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogfQogCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTg0LDMgKzg0LDEwNCBAQAogCQkJbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAogCQkJbWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5kaWFsb2dfdG9rZW4pOwogfQorCit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC5jaHN3aXRjaF93b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm47CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChzZGF0YS0+bG9jYWwsIGlmbWdkLT5ic3NpZCwKKwkJCQkgICBzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJaWYgKCFic3MpCisJCWdvdG8gZXhpdDsKKworCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5jc2FfY2hhbm5lbDsKKwkvKiBYWFg6IHNob3VsZG4ndCByZWFsbHkgbW9kaWZ5IGNmZzgwMjExLW93bmVkIGRhdGEhICovCisJaWYgKCFpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKQorCQlic3MtPmNic3MuY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsOworCisJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOworZXhpdDoKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOworfQorCit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm5ld19jaDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlpbnQgbmV3X2ZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koc3dfZWxlbS0+bmV3X2NoX251bSk7CisKKwkvKiBGSVhNRTogSGFuZGxlIEFESE9DIGxhdGVyICovCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQorCQlyZXR1cm47CisKKwlpZiAoc2RhdGEtPmxvY2FsLT5zd19zY2FubmluZyB8fCBzZGF0YS0+bG9jYWwtPmh3X3NjYW5uaW5nKQorCQlyZXR1cm47CisKKwkvKiBEaXNyZWdhcmQgc3Vic2VxdWVudCBiZWFjb25zIGlmIHdlIGFyZSBhbHJlYWR5IHJ1bm5pbmcgYSB0aW1lcgorCSAgIHByb2Nlc3NpbmcgYSBDU0EgKi8KKworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRCkKKwkJcmV0dXJuOworCisJbmV3X2NoID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHNkYXRhLT5sb2NhbC0+aHcud2lwaHksIG5ld19mcmVxKTsKKwlpZiAoIW5ld19jaCB8fCBuZXdfY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworCXNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWwgPSBuZXdfY2g7CisKKwlpZiAoc3dfZWxlbS0+Y291bnQgPD0gMSkgeworCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOworCX0gZWxzZSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCisJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCQltb2RfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwKKwkJCSAgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoc3dfZWxlbS0+Y291bnQgKgorCQkJCQkgICBic3MtPmNic3MuYmVhY29uX2ludGVydmFsKSk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTE2IGNhcGFiX2luZm8sIHU4ICpwd3JfY29uc3RyX2VsZW0sCisJCQkJIHU4IHB3cl9jb25zdHJfZWxlbV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnNkYXRhLT5sb2NhbC0+aHcuY29uZjsKKworCWlmICghKGNhcGFiX2luZm8gJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkpCisJCXJldHVybjsKKworCS8qIFBvd2VyIGNvbnN0cmFpbnQgSUUgbGVuZ3RoIHNob3VsZCBiZSAxIG9jdGV0ICovCisJaWYgKHB3cl9jb25zdHJfZWxlbV9sZW4gIT0gMSkKKwkJcmV0dXJuOworCisJaWYgKCgqcHdyX2NvbnN0cl9lbGVtIDw9IGNvbmYtPmNoYW5uZWwtPm1heF9wb3dlcikgJiYKKwkgICAgKCpwd3JfY29uc3RyX2VsZW0gIT0gc2RhdGEtPmxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwpKSB7CisJCXNkYXRhLT5sb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID0gKnB3cl9jb25zdHJfZWxlbTsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCAxMGM1NTM5Li5jNWYxNGU2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTk0LDEyICsxOTQsNDcgQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCWZvciAoaSA9IDA7IGkgPCAgU1RBX1RJRF9OVU07IGkrKykgeworCQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcng7CisJCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKKwogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldKQotCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zZXNzaW9uX3RpbWVyKTsKLQkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0pCi0JCSAgZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPmFkZGJhX3Jlc3BfdGltZXIpOworCQl0aWRfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldOworCQkvKiBNYWtlIHN1cmUgdGltZXIgd29uJ3QgZnJlZSB0aGUgdGlkX3J4IHN0cnVjdCwgc2VlIGJlbG93ICovCisJCWlmICh0aWRfcngpCisJCQl0aWRfcngtPnNodXRkb3duID0gdHJ1ZTsKKwogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCQkvKgorCQkgKiBPdXRzaWRlIHNwaW5sb2NrIC0gc2h1dGRvd24gaXMgdHJ1ZSBub3cgc28gdGhhdCB0aGUgdGltZXIKKwkJICogd29uJ3QgZnJlZSB0aWRfcngsIHdlIGhhdmUgdG8gZG8gdGhhdCBub3cuIENhbid0IGxldCB0aGUKKwkJICogdGltZXIgZG8gaXQgYmVjYXVzZSB3ZSBoYXZlIHRvIHN5bmMgdGhlIHRpbWVyIG91dHNpZGUgdGhlCisJCSAqIGxvY2sgdGhhdCBpdCB0YWtlcyBpdHNlbGYuCisJCSAqLworCQlpZiAodGlkX3J4KSB7CisJCQlkZWxfdGltZXJfc3luYygmdGlkX3J4LT5zZXNzaW9uX3RpbWVyKTsKKwkJCWtmcmVlKHRpZF9yeCk7CisJCX0KKworCQkvKgorCQkgKiBObyBuZWVkIHRvIGRvIHN1Y2ggY29tcGxpY2F0aW9ucyBmb3IgVFggYWdnIHNlc3Npb25zLCB0aGUKKwkJICogcGF0aCBsZWFkaW5nIHRvIGZyZWVpbmcgdGhlIHRpZF90eCBzdHJ1Y3QgZ29lcyB2aWEgYSBjYWxsCisJCSAqIGZyb20gdGhlIGRyaXZlciwgYW5kIHRodXMgbmVlZHMgdG8gbG9vayB1cCB0aGUgc3RhIHN0cnVjdAorCQkgKiBhZ2Fpbiwgd2hpY2ggY2Fubm90IGJlIGZvdW5kIHdoZW4gd2UgZ2V0IGhlcmUuIEhlbmNlLCB3ZQorCQkgKiBqdXN0IG5lZWQgdG8gZGVsZXRlIHRoZSB0aW1lciBhbmQgZnJlZSB0aGUgYWdncmVnYXRpb24KKwkJICogaW5mbzsgd2Ugd29uJ3QgYmUgdGVsbGluZyB0aGUgcGVlciBhYm91dCBpdCB0aGVuIGJ1dCB0aGF0CisJCSAqIGRvZXNuJ3QgbWF0dGVyIGlmIHdlJ3JlIG5vdCB0YWxraW5nIHRvIGl0IGFnYWluIGFueXdheS4KKwkJICovCisJCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV07CisJCWlmICh0aWRfdHgpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZ0aWRfdHgtPmFkZGJhX3Jlc3BfdGltZXIpOworCQkJLyoKKwkJCSAqIFNUQSByZW1vdmVkIHdoaWxlIGFnZ3JlZ2F0aW9uIHNlc3Npb24gYmVpbmcKKwkJCSAqIHN0YXJ0ZWQ/IEJpdCBvZGQsIGJ1dCBwdXJnZSBmcmFtZXMgYW55d2F5LgorCQkJICovCisJCQlza2JfcXVldWVfcHVyZ2UoJnRpZF90eC0+cGVuZGluZyk7CisJCQlrZnJlZSh0aWRfdHgpOworCQl9CiAJfQogCiAJX19zdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpOwpAQCAtMjQ2LDggKzI4MSw2IEBACiAJCSAqIGVuYWJsZSBzZXNzaW9uX3RpbWVyJ3MgZGF0YSBkaWZmZXJlbnRpYXRpb24uIHJlZmVyIHRvCiAJCSAqIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkIGZvciB1c2VhZ2UgKi8KIAkJc3RhLT50aW1lcl90b190aWRbaV0gPSBpOwotCQkvKiB0aWQgdG8gdHggcXVldWU6IGluaXRpYWxpemUgYWNjb3JkaW5nIHRvIEhXICgwIGlzIHZhbGlkKSAqLwotCQlzdGEtPnRpZF90b190eF9xW2ldID0gaWVlZTgwMjExX251bV9xdWV1ZXMoJmxvY2FsLT5odyk7CiAJCS8qIHJ4ICovCiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPSBIVF9BR0dfU1RBVEVfSURMRTsKIAkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IGU0OWE1YjkuLjU1MzRkNDggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC0zNCw2ICszNCw5IEBACiAgKiBAV0xBTl9TVEFfQ0xFQVJfUFNfRklMVDogQ2xlYXIgUFMgZmlsdGVyIGluIGhhcmR3YXJlICh1c2luZyB0aGUKICAqCUlFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCBjb250cm9sIGZsYWcpIHdoZW4gdGhlIG5leHQKICAqCWZyYW1lIHRvIHRoaXMgc3RhdGlvbiBpcyB0cmFuc21pdHRlZC4KKyAqIEBXTEFOX1NUQV9NRlA6IE1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiBpcyB1c2VkIHdpdGggdGhpcyBTVEEuCisgKiBAV0xBTl9TVEFfU1VTUEVORDogU2V0L2NsZWFyZWQgZHVyaW5nIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUuCisgKglVc2VkIHRvIGRlbnkgQUREQkEgcmVxdWVzdHMgKGJvdGggVFggYW5kIFJYKS4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewogCVdMQU5fU1RBX0FVVEgJCT0gMTw8MCwKQEAgLTQ2LDYgKzQ5LDggQEAKIAlXTEFOX1NUQV9XRFMJCT0gMTw8NywKIAlXTEFOX1NUQV9QU1BPTEwJCT0gMTw8OCwKIAlXTEFOX1NUQV9DTEVBUl9QU19GSUxUCT0gMTw8OSwKKwlXTEFOX1NUQV9NRlAJCT0gMTw8MTAsCisJV0xBTl9TVEFfU1VTUEVORAk9IDE8PDExCiB9OwogCiAjZGVmaW5lIFNUQV9USURfTlVNIDE2CkBAIC02MywxNyArNjgsMTggQEAKICNkZWZpbmUgSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMCShIVF9BRERCQV9SRVFVRVNURURfTVNLIHwJXAogCQkJCQkgSFRfQUREQkFfRFJWX1JFQURZX01TSyB8CVwKIAkJCQkJIEhUX0FEREJBX1JFQ0VJVkVEX01TSykKLSNkZWZpbmUgSFRfQUdHX1NUQVRFX0RFQlVHRlNfQ1RMCUJJVCg3KQogCiAvKioKICAqIHN0cnVjdCB0aWRfYW1wZHVfdHggLSBUSUQgYWdncmVnYXRpb24gaW5mb3JtYXRpb24gKFR4KS4KICAqCiAgKiBAYWRkYmFfcmVzcF90aW1lcjogdGltZXIgZm9yIHBlZXIncyByZXNwb25zZSB0byBhZGRiYSByZXF1ZXN0CisgKiBAcGVuZGluZzogcGVuZGluZyBmcmFtZXMgcXVldWUgLS0gdXNlIHN0YSdzIHNwaW5sb2NrIHRvIHByb3RlY3QKICAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfdHggewogCXN0cnVjdCB0aW1lcl9saXN0IGFkZGJhX3Jlc3BfdGltZXI7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBwZW5kaW5nOwogCXUxNiBzc247CiAJdTggZGlhbG9nX3Rva2VuOwogfTsKQEAgLTg3LDggKzkzLDkgQEAKICAqIEBzdG9yZWRfbXBkdV9udW06IG51bWJlciBvZiBNUERVcyBpbiByZW9yZGVyaW5nIGJ1ZmZlcgogICogQHNzbjogU3RhcnRpbmcgU2VxdWVuY2UgTnVtYmVyIGV4cGVjdGVkIHRvIGJlIGFnZ3JlZ2F0ZWQuCiAgKiBAYnVmX3NpemU6IGJ1ZmZlciBzaXplIGZvciBpbmNvbWluZyBBLU1QRFVzCi0gKiBAdGltZW91dDogcmVzZXQgdGltZXIgdmFsdWUuCisgKiBAdGltZW91dDogcmVzZXQgdGltZXIgdmFsdWUgKGluIFRVcykuCiAgKiBAZGlhbG9nX3Rva2VuOiBkaWFsb2cgdG9rZW4gZm9yIGFnZ3JlZ2F0aW9uIHNlc3Npb24KKyAqIEBzaHV0ZG93bjogdGhpcyBzZXNzaW9uIGlzIGJlaW5nIHNodXQgZG93biBkdWUgdG8gU1RBIHJlbW92YWwKICAqLwogc3RydWN0IHRpZF9hbXBkdV9yeCB7CiAJc3RydWN0IHNrX2J1ZmYgKipyZW9yZGVyX2J1ZjsKQEAgLTk5LDYgKzEwNiw3IEBACiAJdTE2IGJ1Zl9zaXplOwogCXUxNiB0aW1lb3V0OwogCXU4IGRpYWxvZ190b2tlbjsKKwlib29sIHNodXRkb3duOwogfTsKIAogLyoqCkBAIC0xOTgsNyArMjA2LDYgQEAKICAqIEB0aWRfc2VxOiBwZXItVElEIHNlcXVlbmNlIG51bWJlcnMgZm9yIHNlbmRpbmcgdG8gdGhpcyBTVEEKICAqIEBhbXBkdV9tbG1lOiBBLU1QRFUgc3RhdGUgbWFjaGluZSBzdGF0ZQogICogQHRpbWVyX3RvX3RpZDogaWRlbnRpdHkgbWFwcGluZyB0byBJRCB0aW1lcnMKLSAqIEB0aWRfdG9fdHhfcTogbWFwIHRpZCB0byB0eCBxdWV1ZQogICogQGxsaWQ6IExvY2FsIGxpbmsgSUQKICAqIEBwbGlkOiBQZWVyIGxpbmsgSUQKICAqIEByZWFzb246IENhbmNlbCByZWFzb24gb24gUExJTktfSE9MRElORyBzdGF0ZQpAQCAtMjczLDcgKzI4MCw2IEBACiAJICovCiAJc3RydWN0IHN0YV9hbXBkdV9tbG1lIGFtcGR1X21sbWU7CiAJdTggdGltZXJfdG9fdGlkW1NUQV9USURfTlVNXTsKLQl1OCB0aWRfdG9fdHhfcVtTVEFfVElEX05VTV07CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCS8qCkBAIC0zODIsOCArMzg4LDYgQEAKIH0KIAogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50bHkgcmVnaXN0ZXJlZCBzdGF0aW9ucyAqLwotI2RlZmluZSBNQVhfU1RBX0NPVU5UIDIwMDcKIAogI2RlZmluZSBTVEFfSEFTSF9TSVpFIDI1NgogI2RlZmluZSBTVEFfSEFTSChzdGEpIChzdGFbNV0pCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDk0ZGU1MDMuLjNmYjA0YTggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNkZWZpbmUgSUVFRTgwMjExX1RYX09LCQkwCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9BR0FJTgkxCi0jZGVmaW5lIElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOCTIKKyNkZWZpbmUgSUVFRTgwMjExX1RYX1BFTkRJTkcJMgogCiAvKiBtaXNjIHV0aWxzICovCiAKQEAgLTE5Miw3ICsxOTIsMTkgQEAKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAJaWYgKHVubGlrZWx5KHR4LT5sb2NhbC0+c3dfc2Nhbm5pbmcpICYmCi0JICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkpCisJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkvKgorCQkgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnkKKwkJICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlCisJCSAqIGFjdGl2ZSBzY2FuKSBhcmUgYWxsb3dlZCwgYWxsIG90aGVyIGZyYW1lcyBzaG91bGQgbm90IGJlCisJCSAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkbworCQkgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbQorCQkgKiBvZmYtY2hhbm5lbC4gU2VlIHRoZSBsaW5rIGJlbG93IGFuZAorCQkgKiBpZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLgorCQkgKgorCQkgKiBodHRwOi8vYXJ0aWNsZS5nbWFuZS5vcmcvZ21hbmUubGludXgua2VybmVsLndpcmVsZXNzLmdlbmVyYWwvMzAwODkKKwkJICovCiAJCXJldHVybiBUWF9EUk9QOwogCiAJaWYgKHR4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKQEAgLTMzMCw2ICszNDIsMjIgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3VzZV9tZnAoX19sZTE2IGZjLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoIWllZWU4MDIxMV9pc19tZ210KGZjKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhID09IE5VTEwgfHwgIXRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfTUZQKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZSgoc3RydWN0IGllZWU4MDIxMV9oZHIgKikKKwkJCQkJICAgIHNrYi0+ZGF0YSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CiBpZWVlODAyMTFfdHhfaF91bmljYXN0X3BzX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewpAQCAtNDA5LDExICs0MzcsMTcgQEAKIAkJdHgtPmtleSA9IE5VTEw7CiAJZWxzZSBpZiAodHgtPnN0YSAmJiAoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zdGEtPmtleSkpKQogCQl0eC0+a2V5ID0ga2V5OworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KSkpCisJCXR4LT5rZXkgPSBrZXk7CiAJZWxzZSBpZiAoKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfa2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CiAJZWxzZSBpZiAodHgtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkICYmCiAJCSAodHgtPnNrYi0+cHJvdG9jb2wgIT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkgJiYKLQkJICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkgeworCQkgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpICYmCisJCSAoIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpIHx8CisJCSAgKGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICB0eC0+c3RhICYmIHRlc3Rfc3RhX2ZsYWdzKHR4LT5zdGEsIFdMQU5fU1RBX01GUCkpKSkgewogCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3BfdW5lbmNyeXB0ZWQpOwogCQlyZXR1cm4gVFhfRFJPUDsKIAl9IGVsc2UKQEAgLTQyOCwxMCArNDYyLDE5IEBACiAJCQlpZiAoaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCQlicmVhazsKIAkJY2FzZSBBTEdfVEtJUDoKLQkJY2FzZSBBTEdfQ0NNUDoKIAkJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJCXR4LT5rZXkgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgQUxHX0NDTVA6CisJCQlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkJICAgICFpZWVlODAyMTFfdXNlX21mcChoZHItPmZyYW1lX2NvbnRyb2wsIHR4LT5zdGEsCisJCQkJCSAgICAgICB0eC0+c2tiKSkKKwkJCQl0eC0+a2V5ID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIEFMR19BRVNfQ01BQzoKKwkJCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCQl0eC0+a2V5ID0gTlVMTDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC02NTgsMTcgKzcwMSw2MiBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRybGVuLAorCQkJICAgICAgaW50IGZyYWdfdGhyZXNob2xkKQoreworCXN0cnVjdCBza19idWZmICp0YWlsID0gc2tiLCAqdG1wOworCWludCBwZXJfZnJhZ20gPSBmcmFnX3RocmVzaG9sZCAtIGhkcmxlbiAtIEZDU19MRU47CisJaW50IHBvcyA9IGhkcmxlbiArIHBlcl9mcmFnbTsKKwlpbnQgcmVtID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBwZXJfZnJhZ207CisKKwlpZiAoV0FSTl9PTihyZW0gPCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAocmVtKSB7CisJCWludCBmcmFnbGVuID0gcGVyX2ZyYWdtOworCisJCWlmIChmcmFnbGVuID4gcmVtKQorCQkJZnJhZ2xlbiA9IHJlbTsKKwkJcmVtIC09IGZyYWdsZW47CisJCXRtcCA9IGRldl9hbGxvY19za2IobG9jYWwtPnR4X2hlYWRyb29tICsKKwkJCQkgICAgZnJhZ190aHJlc2hvbGQgKworCQkJCSAgICBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTSArCisJCQkJICAgIElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NKTsKKwkJaWYgKCF0bXApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdGFpbC0+bmV4dCA9IHRtcDsKKwkJdGFpbCA9IHRtcDsKKwkJc2tiX3Jlc2VydmUodG1wLCBsb2NhbC0+dHhfaGVhZHJvb20gKworCQkJCSBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTSk7CisJCS8qIGNvcHkgY29udHJvbCBpbmZvcm1hdGlvbiAqLworCQltZW1jcHkodG1wLT5jYiwgc2tiLT5jYiwgc2l6ZW9mKHRtcC0+Y2IpKTsKKwkJc2tiX2NvcHlfcXVldWVfbWFwcGluZyh0bXAsIHNrYik7CisJCXRtcC0+cHJpb3JpdHkgPSBza2ItPnByaW9yaXR5OworCQl0bXAtPmRvX25vdF9lbmNyeXB0ID0gc2tiLT5kb19ub3RfZW5jcnlwdDsKKwkJdG1wLT5kZXYgPSBza2ItPmRldjsKKwkJdG1wLT5paWYgPSBza2ItPmlpZjsKKworCQkvKiBjb3B5IGhlYWRlciBhbmQgZGF0YSAqLworCQltZW1jcHkoc2tiX3B1dCh0bXAsIGhkcmxlbiksIHNrYi0+ZGF0YSwgaGRybGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQodG1wLCBmcmFnbGVuKSwgc2tiLT5kYXRhICsgcG9zLCBmcmFnbGVuKTsKKworCQlwb3MgKz0gZnJhZ2xlbjsKKwl9CisKKwlza2ItPmxlbiA9IGhkcmxlbiArIHBlcl9mcmFnbTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+c2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtPnNrYi0+ZGF0YTsKLQlzaXplX3QgaGRybGVuLCBwZXJfZnJhZ20sIG51bV9mcmFnbSwgcGF5bG9hZF9sZW4sIGxlZnQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKipmcmFncywgKmZpcnN0LCAqZnJhZzsKLQlpbnQgaTsKLQl1MTYgc2VxOwotCXU4ICpwb3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKIAlpbnQgZnJhZ190aHJlc2hvbGQgPSB0eC0+bG9jYWwtPmZyYWdtZW50YXRpb25fdGhyZXNob2xkOworCWludCBoZHJsZW47CisJaW50IGZyYWdudW07CiAKIAlpZiAoISh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfRlJBR01FTlRFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKQEAgLTY4MSw1OCArNzY5LDM1IEBACiAJaWYgKFdBUk5fT04oaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkKIAkJcmV0dXJuIFRYX0RST1A7CiAKLQlmaXJzdCA9IHR4LT5za2I7Ci0KIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JcGF5bG9hZF9sZW4gPSBmaXJzdC0+bGVuIC0gaGRybGVuOwotCXBlcl9mcmFnbSA9IGZyYWdfdGhyZXNob2xkIC0gaGRybGVuIC0gRkNTX0xFTjsKLQludW1fZnJhZ20gPSBESVZfUk9VTkRfVVAocGF5bG9hZF9sZW4sIHBlcl9mcmFnbSk7CiAKLQlmcmFncyA9IGt6YWxsb2MobnVtX2ZyYWdtICogc2l6ZW9mKHN0cnVjdCBza19idWZmICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWZyYWdzKQotCQlnb3RvIGZhaWw7CisJLyogaW50ZXJuYWwgZXJyb3IsIHdoeSBpcyBUWF9GUkFHTUVOVEVEIHNldD8gKi8KKwlpZiAoV0FSTl9PTihza2ItPmxlbiA8PSBmcmFnX3RocmVzaG9sZCkpCisJCXJldHVybiBUWF9EUk9QOwogCi0JaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUyk7Ci0Jc2VxID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgJiBJRUVFODAyMTFfU0NUTF9TRVE7Ci0JcG9zID0gZmlyc3QtPmRhdGEgKyBoZHJsZW4gKyBwZXJfZnJhZ207Ci0JbGVmdCA9IHBheWxvYWRfbGVuIC0gcGVyX2ZyYWdtOwotCWZvciAoaSA9IDA7IGkgPCBudW1fZnJhZ20gLSAxOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmZoZHI7Ci0JCXNpemVfdCBjb3B5bGVuOworCS8qCisJICogTm93IGZyYWdtZW50IHRoZSBmcmFtZS4gVGhpcyB3aWxsIGFsbG9jYXRlIGFsbCB0aGUgZnJhZ21lbnRzIGFuZAorCSAqIGNoYWluIHRoZW0gKHVzaW5nIHNrYiBhcyB0aGUgZmlyc3QgZnJhZ21lbnQpIHRvIHNrYi0+bmV4dC4KKwkgKiBEdXJpbmcgdHJhbnNtaXNzaW9uLCB3ZSB3aWxsIHJlbW92ZSB0aGUgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkCisJICogZnJhZ21lbnRzIGZyb20gdGhpcyBsaXN0LiBXaGVuIHRoZSBsb3ctbGV2ZWwgZHJpdmVyIHJlamVjdHMgb25lCisJICogb2YgdGhlIGZyYWdtZW50cyB0aGVuIHdlIHdpbGwgc2ltcGx5IHByZXRlbmQgdG8gYWNjZXB0IHRoZSBza2IKKwkgKiBidXQgc3RvcmUgaXQgYXdheSBhcyBwZW5kaW5nLgorCSAqLworCWlmIChpZWVlODAyMTFfZnJhZ21lbnQodHgtPmxvY2FsLCBza2IsIGhkcmxlbiwgZnJhZ190aHJlc2hvbGQpKQorCQlyZXR1cm4gVFhfRFJPUDsKIAotCQlpZiAobGVmdCA8PSAwKQotCQkJZ290byBmYWlsOworCS8qIHVwZGF0ZSBkdXJhdGlvbi9zZXEvZmxhZ3Mgb2YgZnJhZ21lbnRzICovCisJZnJhZ251bSA9IDA7CisJZG8geworCQlpbnQgbmV4dF9sZW47CisJCWNvbnN0IF9fbGUxNiBtb3JlZnJhZ3MgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpOwogCi0JCS8qIHJlc2VydmUgZW5vdWdoIGV4dHJhIGhlYWQgYW5kIHRhaWwgcm9vbSBmb3IgcG9zc2libGUKLQkJICogZW5jcnlwdGlvbiAqLwotCQlmcmFnID0gZnJhZ3NbaV0gPQotCQkJZGV2X2FsbG9jX3NrYih0eC0+bG9jYWwtPnR4X2hlYWRyb29tICsKLQkJCQkgICAgICBmcmFnX3RocmVzaG9sZCArCi0JCQkJICAgICAgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT00gKwotCQkJCSAgICAgIElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NKTsKLQkJaWYgKCFmcmFnKQotCQkJZ290byBmYWlsOworCQloZHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCQkvKiBNYWtlIHN1cmUgdGhhdCBhbGwgZnJhZ21lbnRzIHVzZSB0aGUgc2FtZSBwcmlvcml0eSBzbwotCQkgKiB0aGF0IHRoZXkgZW5kIHVwIHVzaW5nIHRoZSBzYW1lIFRYIHF1ZXVlICovCi0JCWZyYWctPnByaW9yaXR5ID0gZmlyc3QtPnByaW9yaXR5OwotCi0JCXNrYl9yZXNlcnZlKGZyYWcsIHR4LT5sb2NhbC0+dHhfaGVhZHJvb20gKwotCQkJCSAgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT00pOwotCi0JCS8qIGNvcHkgVFggaW5mb3JtYXRpb24gKi8KLQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZnJhZyk7Ci0JCW1lbWNweShpbmZvLCBmaXJzdC0+Y2IsIHNpemVvZihmcmFnLT5jYikpOwotCi0JCS8qIGNvcHkvZmlsbCBpbiA4MDIuMTEgaGVhZGVyICovCi0JCWZoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChmcmFnLCBoZHJsZW4pOwotCQltZW1jcHkoZmhkciwgZmlyc3QtPmRhdGEsIGhkcmxlbik7Ci0JCWZoZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxIHwgKChpICsgMSkgJiBJRUVFODAyMTFfU0NUTF9GUkFHKSk7Ci0KLQkJaWYgKGkgPT0gbnVtX2ZyYWdtIC0gMikgewotCQkJLyogY2xlYXIgTU9SRUZSQUdTIGJpdCBmb3IgdGhlIGxhc3QgZnJhZ21lbnQgKi8KLQkJCWZoZHItPmZyYW1lX2NvbnRyb2wgJj0gY3B1X3RvX2xlMTYofklFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUyk7Ci0JCX0gZWxzZSB7CisJCWlmIChza2ItPm5leHQpIHsKKwkJCWhkci0+ZnJhbWVfY29udHJvbCB8PSBtb3JlZnJhZ3M7CisJCQluZXh0X2xlbiA9IHNrYi0+bmV4dC0+bGVuOwogCQkJLyoKIAkJCSAqIE5vIG11bHRpLXJhdGUgcmV0cmllcyBmb3IgZnJhZ21lbnRlZCBmcmFtZXMsIHRoYXQKIAkJCSAqIHdvdWxkIGNvbXBsZXRlbHkgdGhyb3cgb2ZmIHRoZSBOQVYgYXQgb3RoZXIgU1RBcy4KQEAgLTc0MywzNSArODA4LDE2IEBACiAJCQlpbmZvLT5jb250cm9sLnJhdGVzWzRdLmlkeCA9IC0xOwogCQkJQlVJTERfQlVHX09OKElFRUU4MDIxMV9UWF9NQVhfUkFURVMgIT0gNSk7CiAJCQlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkU7CisJCX0gZWxzZSB7CisJCQloZHItPmZyYW1lX2NvbnRyb2wgJj0gfm1vcmVmcmFnczsKKwkJCW5leHRfbGVuID0gMDsKIAkJfQotCi0JCS8qIGNvcHkgZGF0YSAqLwotCQljb3B5bGVuID0gbGVmdCA+IHBlcl9mcmFnbSA/IHBlcl9mcmFnbSA6IGxlZnQ7Ci0JCW1lbWNweShza2JfcHV0KGZyYWcsIGNvcHlsZW4pLCBwb3MsIGNvcHlsZW4pOwotCi0JCXNrYl9jb3B5X3F1ZXVlX21hcHBpbmcoZnJhZywgZmlyc3QpOwotCi0JCWZyYWctPmRvX25vdF9lbmNyeXB0ID0gZmlyc3QtPmRvX25vdF9lbmNyeXB0OwotCi0JCXBvcyArPSBjb3B5bGVuOwotCQlsZWZ0IC09IGNvcHlsZW47Ci0JfQotCXNrYl90cmltKGZpcnN0LCBoZHJsZW4gKyBwZXJfZnJhZ20pOwotCi0JdHgtPm51bV9leHRyYV9mcmFnID0gbnVtX2ZyYWdtIC0gMTsKLQl0eC0+ZXh0cmFfZnJhZyA9IGZyYWdzOworCQloZHItPmR1cmF0aW9uX2lkID0gaWVlZTgwMjExX2R1cmF0aW9uKHR4LCAwLCBuZXh0X2xlbik7CisJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoZnJhZ251bSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCQlmcmFnbnVtKys7CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwotCi0gZmFpbDoKLQlpZiAoZnJhZ3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9mcmFnbSAtIDE7IGkrKykKLQkJCWlmIChmcmFnc1tpXSkKLQkJCQlkZXZfa2ZyZWVfc2tiKGZyYWdzW2ldKTsKLQkJa2ZyZWUoZnJhZ3MpOwotCX0KLQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3BfZnJhZ21lbnQpOwotCXJldHVybiBUWF9EUk9QOwogfQogCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQpAQCAtNzg3LDYgKzgzMyw4IEBACiAJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX3RraXBfZW5jcnlwdCh0eCk7CiAJY2FzZSBBTEdfQ0NNUDoKIAkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KHR4KTsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZW5jcnlwdCh0eCk7CiAJfQogCiAJLyogbm90IHJlYWNoZWQgKi8KQEAgLTc5NywyNyArODQ1LDE5IEBACiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7Ci0JaW50IG5leHRfbGVuLCBpOwotCWludCBncm91cF9hZGRyID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlpbnQgbmV4dF9sZW47CisJYm9vbCBncm91cF9hZGRyOwogCi0JaWYgKCEodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQpKSB7Ci0JCWhkci0+ZHVyYXRpb25faWQgPSBpZWVlODAyMTFfZHVyYXRpb24odHgsIGdyb3VwX2FkZHIsIDApOwotCQlyZXR1cm4gVFhfQ09OVElOVUU7Ci0JfQorCWRvIHsKKwkJaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhOworCQluZXh0X2xlbiA9IHNrYi0+bmV4dCA/IHNrYi0+bmV4dC0+bGVuIDogMDsKKwkJZ3JvdXBfYWRkciA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOwogCi0JaGRyLT5kdXJhdGlvbl9pZCA9IGllZWU4MDIxMV9kdXJhdGlvbih0eCwgZ3JvdXBfYWRkciwKLQkJCQkJICAgICAgdHgtPmV4dHJhX2ZyYWdbMF0tPmxlbik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJaWYgKGkgKyAxIDwgdHgtPm51bV9leHRyYV9mcmFnKQotCQkJbmV4dF9sZW4gPSB0eC0+ZXh0cmFfZnJhZ1tpICsgMV0tPmxlbjsKLQkJZWxzZQotCQkJbmV4dF9sZW4gPSAwOwotCi0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5leHRyYV9mcmFnW2ldLT5kYXRhOwotCQloZHItPmR1cmF0aW9uX2lkID0gaWVlZTgwMjExX2R1cmF0aW9uKHR4LCAwLCBuZXh0X2xlbik7Ci0JfQorCQloZHItPmR1cmF0aW9uX2lkID0KKwkJCWllZWU4MDIxMV9kdXJhdGlvbih0eCwgZ3JvdXBfYWRkciwgbmV4dF9sZW4pOworCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KQEAgLTgyNSwyNCArODY1LDIwIEBACiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfc3RhdHMoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKIAogCWlmICghdHgtPnN0YSkKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAJdHgtPnN0YS0+dHhfcGFja2V0cysrOwotCXR4LT5zdGEtPnR4X2ZyYWdtZW50cysrOwotCXR4LT5zdGEtPnR4X2J5dGVzICs9IHR4LT5za2ItPmxlbjsKLQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJdHgtPnN0YS0+dHhfZnJhZ21lbnRzICs9IHR4LT5udW1fZXh0cmFfZnJhZzsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKQotCQkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gdHgtPmV4dHJhX2ZyYWdbaV0tPmxlbjsKLQl9CisJZG8geworCQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKKwkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQogCi0KIC8qIGFjdHVhbCB0cmFuc21pdCBwYXRoICovCiAKIC8qCkBAIC05NDgsOSArOTg0LDkgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQogCWludCBoZHJsZW4sIHRpZDsKIAl1OCAqcWMsICpzdGF0ZTsKKwlib29sIHF1ZXVlZCA9IGZhbHNlOwogCiAJbWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7CiAJdHgtPnNrYiA9IHNrYjsKQEAgLTk3NywxNyArMTAxMyw1MyBAQAogCQkgKi8KIAl9CiAKKwkvKgorCSAqIElmIHRoaXMgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBhbnl3aGVyZSwgYW5kIHdlIGdldCBoZXJlLAorCSAqIHdlIGFyZSBkb2luZyB0aGUgbmVlZGVkIHByb2Nlc3NpbmcsIHNvIHJlbW92ZSB0aGUgZmxhZworCSAqIG5vdy4KKwkgKi8KKwlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOworCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXR4LT5zdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCi0JaWYgKHR4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwlpZiAodHgtPnN0YSAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gKnFjICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnR4LT5zdGEtPmxvY2ssIGZsYWdzKTsKKwkJLyoKKwkJICogWFhYOiBUaGlzIHNwaW5sb2NrIGNvdWxkIGJlIGZhaXJseSBleHBlbnNpdmUsIGJ1dCBzZWUgdGhlCisJCSAqCWNvbW1lbnQgaW4gYWdnLXR4LmM6aWVlZTgwMjExX2FnZ190eF9vcGVyYXRpb25hbCgpLgorCQkgKglPbmUgd2F5IHRvIHNvbHZlIHRoaXMgd291bGQgYmUgdG8gZG8gc29tZXRoaW5nIFJDVS1saWtlCisJCSAqCWZvciBtYW5hZ2luZyB0aGUgdGlkX3R4IHN0cnVjdCBhbmQgdXNpbmcgYXRvbWljIGJpdG9wcworCQkgKglmb3IgdGhlIGFjdHVhbCBzdGF0ZSAtLSBieSBpbnRyb2R1Y2luZyBhbiBhY3R1YWwKKwkJICoJJ29wZXJhdGlvbmFsJyBiaXQgdGhhdCB3b3VsZCBiZSBwb3NzaWJsZS4gSXQgd291bGQKKwkJICoJcmVxdWlyZSBjaGFuZ2luZyBpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKCkgdG8KKwkJICoJc2V0IHRoYXQgYml0LCBhbmQgY2hhbmdpbmcgdGhlIHdheSB0aWRfdHggaXMgbWFuYWdlZAorCQkgKglldmVyeXdoZXJlLCBpbmNsdWRpbmcgcmFjZXMgYmV0d2VlbiB0aGF0IGJpdCBhbmQKKwkJICoJdGlkX3R4IGdvaW5nIGF3YXkgKHRpZF90eCBiZWluZyBhZGRlZCBjYW4gYmUgZWFzaWx5CisJCSAqCWNvbW1pdHRlZCB0byBtZW1vcnkgYmVmb3JlIHRoZSAnb3BlcmF0aW9uYWwnIGJpdCkuCisJCSAqLworCQl0aWRfdHggPSB0eC0+c3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOwogCQlzdGF0ZSA9ICZ0eC0+c3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfQU1QRFU7CisJCX0gZWxzZSBpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisJCQkvKiBpbiBwcm9ncmVzcyAqLworCQkJcXVldWVkID0gdHJ1ZTsKKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKKwkJCV9fc2tiX3F1ZXVlX3RhaWwoJnRpZF90eC0+cGVuZGluZywgc2tiKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eC0+c3RhLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHVubGlrZWx5KHF1ZXVlZCkpCisJCQlyZXR1cm4gVFhfUVVFVUVEOwogCX0KIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewpAQCAtMTAzOCw1MSArMTExMCw1NSBAQAogCX0KIAlpZiAodW5saWtlbHkoIWRldikpCiAJCXJldHVybiAtRU5PREVWOwotCS8qIGluaXRpYWxpc2VzIHR4IHdpdGggY29udHJvbCAqLworCS8qCisJICogaW5pdGlhbGlzZXMgdHggd2l0aCBjb250cm9sCisJICoKKwkgKiByZXR1cm4gdmFsdWUgaXMgc2FmZSB0byBpZ25vcmUgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KKwkgKiBjYW4gb25seSBiZSBpbnZva2VkIGZvciBtdWx0aWNhc3QgZnJhbWVzCisJICoKKwkgKiBYWFg6IGNsZWFuIHVwCisJICovCiAJX19pZWVlODAyMTFfdHhfcHJlcGFyZSh0eCwgc2tiLCBkZXYpOwogCWRldl9wdXQoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2llZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3N0YXRpYyBpbnQgX19pZWVlODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgIHN0cnVjdCBza19idWZmICoqc2ticCwKKwkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwLCAqbmV4dDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0LCBsZW47CisJYm9vbCBmcmFnbSA9IGZhbHNlOwogCi0JaWYgKHNrYikgewotCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgc2tiKSkKLQkJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47Ci0JCWluZm8gPSAgSUVFRTgwMjExX1NLQl9DQihza2IpOworCWxvY2FsLT5tZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLCBza2IpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKLQkJbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7Ci0JfQotCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWlmICghdHgtPmV4dHJhX2ZyYWdbaV0pCi0JCQkJY29udGludWU7Ci0JCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+ZXh0cmFfZnJhZ1tpXSk7CisJd2hpbGUgKHNrYikgeworCQlpZiAoaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoJmxvY2FsLT5odywKKwkJCQkJICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKSkKKwkJCXJldHVybiBJRUVFODAyMTFfVFhfUEVORElORzsKKworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJCWlmIChmcmFnbSkKIAkJCWluZm8tPmZsYWdzICY9IH4oSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUIHwKIAkJCQkJIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpOwotCQkJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsCi0JCQkJCQkgICB0eC0+ZXh0cmFfZnJhZ1tpXSkpCi0JCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOOwogCi0JCQlyZXQgPSBsb2NhbC0+b3BzLT50eChsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgICB0eC0+ZXh0cmFfZnJhZ1tpXSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiBJRUVFODAyMTFfVFhfRlJBR19BR0FJTjsKLQkJCWxvY2FsLT5tZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCQlpZWVlODAyMTFfbGVkX3R4KGxvY2FsLCAxKTsKLQkJCXR4LT5leHRyYV9mcmFnW2ldID0gTlVMTDsKKwkJbmV4dCA9IHNrYi0+bmV4dDsKKwkJbGVuID0gc2tiLT5sZW47CisJCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwgc2tiKTsKKwkJaWYgKFdBUk5fT04ocmV0ICE9IE5FVERFVl9UWF9PSyAmJiBza2ItPmxlbiAhPSBsZW4pKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCX0KLQkJa2ZyZWUodHgtPmV4dHJhX2ZyYWcpOwotCQl0eC0+ZXh0cmFfZnJhZyA9IE5VTEw7CisJCWlmIChyZXQgIT0gTkVUREVWX1RYX09LKQorCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKKwkJKnNrYnAgPSBza2IgPSBuZXh0OworCQlpZWVlODAyMTFfbGVkX3R4KGxvY2FsLCAxKTsKKwkJZnJhZ20gPSB0cnVlOwogCX0KKwogCXJldHVybiBJRUVFODAyMTFfVFhfT0s7CiB9CiAKQEAgLTEwOTQsNyArMTE3MCw2IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CiAJaWVlZTgwMjExX3R4X3Jlc3VsdCByZXMgPSBUWF9EUk9QOwotCWludCBpOwogCiAjZGVmaW5lIENBTExfVFhIKHR4aCkJCVwKIAlyZXMgPSB0eGgodHgpOwkJXApAQCAtMTExOCwxMSArMTE5MywxMyBAQAogIHR4aF9kb25lOgogCWlmICh1bmxpa2VseShyZXMgPT0gVFhfRFJPUCkpIHsKIAkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19kcm9wKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspCi0JCQlpZiAodHgtPmV4dHJhX2ZyYWdbaV0pCi0JCQkJZGV2X2tmcmVlX3NrYih0eC0+ZXh0cmFfZnJhZ1tpXSk7Ci0JCWtmcmVlKHR4LT5leHRyYV9mcmFnKTsKKwkJd2hpbGUgKHNrYikgeworCQkJc3RydWN0IHNrX2J1ZmYgKm5leHQ7CisKKwkJCW5leHQgPSBza2ItPm5leHQ7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlza2IgPSBuZXh0OworCQl9CiAJCXJldHVybiAtMTsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9RVUVVRUQpKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfcXVldWVkKTsKQEAgLTExMzIsMjMgKzEyMDksMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIGJvb2wgdHhwZW5kaW5nKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwogCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzX3ByZXBhcmU7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWludCByZXQsIGk7CisJc3RydWN0IHNrX2J1ZmYgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0LCByZXRyaWVzOwogCXUxNiBxdWV1ZTsKIAogCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAKLQlXQVJOX09OKHRlc3RfYml0KHF1ZXVlLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpKTsKKwlXQVJOX09OKCF0eHBlbmRpbmcgJiYgIXNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbcXVldWVdKSk7CiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAxMCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTExNTYsMTAgKzEyMzYsMTMgQEAKIAkvKiBpbml0aWFsaXNlcyB0eCAqLwogCXJlc19wcmVwYXJlID0gX19pZWVlODAyMTFfdHhfcHJlcGFyZSgmdHgsIHNrYiwgZGV2KTsKIAotCWlmIChyZXNfcHJlcGFyZSA9PSBUWF9EUk9QKSB7CisJaWYgKHVubGlrZWx5KHJlc19wcmVwYXJlID09IFRYX0RST1ApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm47CisJfSBlbHNlIGlmICh1bmxpa2VseShyZXNfcHJlcGFyZSA9PSBUWF9RVUVVRUQpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CiAJfQogCiAJc3RhID0gdHguc3RhOwpAQCAtMTE2OSwxMSArMTI1MiwxMyBAQAogCWlmIChpbnZva2VfdHhfaGFuZGxlcnMoJnR4KSkKIAkJZ290byBvdXQ7CiAKLXJldHJ5OgotCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCBza2IsICZ0eCk7Ci0JaWYgKHJldCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgKnN0b3JlOwotCisJcmV0cmllcyA9IDA7CisgcmV0cnk6CisJcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsICZ0eC5za2IsIHR4LnN0YSk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIElFRUU4MDIxMV9UWF9PSzoKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfVFhfQUdBSU46CiAJCS8qCiAJCSAqIFNpbmNlIHRoZXJlIGFyZSBubyBmcmFnbWVudGVkIGZyYW1lcyBvbiBBLU1QRFUKIAkJICogcXVldWVzLCB0aGVyZSdzIG5vIHJlYXNvbiBmb3IgYSBkcml2ZXIgdG8gcmVqZWN0CkBAIC0xMTgxLDQ2ICsxMjY2LDU3IEBACiAJCSAqLwogCQlpZiAoV0FSTl9PTihpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKQogCQkJZ290byBkcm9wOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIElFRUU4MDIxMV9UWF9QRU5ESU5HOgorCQlza2IgPSB0eC5za2I7CiAKLQkJc3RvcmUgPSAmbG9jYWwtPnBlbmRpbmdfcGFja2V0W3F1ZXVlXTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHJldCA9PSBJRUVFODAyMTFfVFhfRlJBR19BR0FJTikKLQkJCXNrYiA9IE5VTEw7CisJCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIHF1ZXVlKSkgeworCQkJZG8geworCQkJCW5leHQgPSBza2ItPm5leHQ7CisJCQkJc2tiLT5uZXh0ID0gTlVMTDsKKwkJCQlpZiAodW5saWtlbHkodHhwZW5kaW5nKSkKKwkJCQkJc2tiX3F1ZXVlX2hlYWQoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwKKwkJCQkJCSAgICAgICBza2IpOworCQkJCWVsc2UKKwkJCQkJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwKKwkJCQkJCSAgICAgICBza2IpOworCQkJfSB3aGlsZSAoKHNrYiA9IG5leHQpKTsKIAotCQlzZXRfYml0KHF1ZXVlLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpOwotCQlzbXBfbWIoKTsKLQkJLyoKLQkJICogV2hlbiB0aGUgZHJpdmVyIGdldHMgb3V0IG9mIGJ1ZmZlcnMgZHVyaW5nIHNlbmRpbmcgb2YKLQkJICogZnJhZ21lbnRzIGFuZCBjYWxscyBpZWVlODAyMTFfc3RvcF9xdWV1ZSwgdGhlIG5ldGlmCi0JCSAqIHN1YnF1ZXVlIGlzIHN0b3BwZWQuIFRoZXJlIGlzLCBob3dldmVyLCBhIHNtYWxsIHdpbmRvdwotCQkgKiBpbiB3aGljaCB0aGUgUEVORElORyBiaXQgaXMgbm90IHlldCBzZXQuIElmIGEgYnVmZmVyCi0JCSAqIGdldHMgYXZhaWxhYmxlIGluIHRoYXQgd2luZG93IChpLmUuIGRyaXZlciBjYWxscwotCQkgKiBpZWVlODAyMTFfd2FrZV9xdWV1ZSksIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGllZWU4MDIxMV90eAotCQkgKiBjYWxsZWQgd2l0aCB0aGUgUEVORElORyBiaXQgc3RpbGwgc2V0LiBQcmV2ZW50IHRoaXMgYnkKLQkJICogY29udGludWluZyB0cmFuc21pdHRpbmcgaGVyZSB3aGVuIHRoYXQgc2l0dWF0aW9uIGlzCi0JCSAqIHBvc3NpYmxlIHRvIGhhdmUgaGFwcGVuZWQuCi0JCSAqLwotCQlpZiAoIV9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpKSB7Ci0JCQljbGVhcl9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZyk7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIG5vYm9keSB3aWxsIGVuYWJsZSB0aGUgcXVldWUgb24gdXMKKwkJCSAqICh3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHRhc2tsZXQpIG5vciBkaXNhYmxlIHRoZQorCQkJICogbmV0ZGV2IHF1ZXVlIHVuZGVybmVhdGggdGhlIHBlbmRpbmcgaGFuZGxpbmcgY29kZS4KKwkJCSAqLworCQkJX19zZXRfYml0KElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAorCQkJCSAgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKworCQkJcmV0cmllcysrOworCQkJaWYgKFdBUk4ocmV0cmllcyA+IDEwLCAidHggcmVmdXNlZCBidXQgcXVldWUgYWN0aXZlIikpCisJCQkJZ290byBkcm9wOwogCQkJZ290byByZXRyeTsKIAkJfQotCQlzdG9yZS0+c2tiID0gc2tiOwotCQlzdG9yZS0+ZXh0cmFfZnJhZyA9IHR4LmV4dHJhX2ZyYWc7Ci0JCXN0b3JlLT5udW1fZXh0cmFfZnJhZyA9IHR4Lm51bV9leHRyYV9mcmFnOwogCX0KICBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuOwogCiAgZHJvcDoKLQlpZiAoc2tiKQotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JZm9yIChpID0gMDsgaSA8IHR4Lm51bV9leHRyYV9mcmFnOyBpKyspCi0JCWlmICh0eC5leHRyYV9mcmFnW2ldKQotCQkJZGV2X2tmcmVlX3NrYih0eC5leHRyYV9mcmFnW2ldKTsKLQlrZnJlZSh0eC5leHRyYV9mcmFnKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gMDsKKworCXNrYiA9IHR4LnNrYjsKKwl3aGlsZSAoc2tiKSB7CisJCW5leHQgPSBza2ItPm5leHQ7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJc2tiID0gbmV4dDsKKwl9CiB9CiAKIC8qIGRldmljZSB4bWl0IGhhbmRsZXJzICovCkBAIC0xMjc5LDcgKzEzNzUsNiBAQAogCQlGT1VORF9TREFUQSwKIAkJVU5LTk9XTl9BRERSRVNTLAogCX0gbW9uaXRvcl9pZmFjZSA9IE5PVF9NT05JVE9SOwotCWludCByZXQ7CiAKIAlpZiAoc2tiLT5paWYpCiAJCW9kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOwpAQCAtMTI5Myw3ICsxMzg4LDIwIEBACiAJCSAgICAgICAib3JpZ2luYXRpbmcgZGV2aWNlXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJaWYgKChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spICYmCisJICAgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKKwkJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKKwkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTKTsKKwkJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwKKwkJCQkJJmxvY2FsLT5keW5hbWljX3BzX2Rpc2FibGVfd29yayk7CisJCX0KKworCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJICAgICAgICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOwogCX0KIAogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKQEAgLTEzMDksNyArMTQxNyw3IEBACiAJCWVsc2UKIAkJCWlmIChtZXNoX25leHRob3BfbG9va3VwKHNrYiwgb3NkYXRhKSkgewogCQkJCWRldl9wdXQob2Rldik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJaWYgKG1lbWNtcChvZGV2LT5kZXZfYWRkciwgaGRyLT5hZGRyNCwgRVRIX0FMRU4pICE9IDApCiAJCQlJRUVFODAyMTFfSUZTVEFfTUVTSF9DVFJfSU5DKCZvc2RhdGEtPnUubWVzaCwKQEAgLTEzNzEsNyArMTQ3OSw3IEBACiAJaWYgKGllZWU4MDIxMV9za2JfcmVzaXplKG9zZGF0YS0+bG9jYWwsIHNrYiwgaGVhZHJvb20sIG1heV9lbmNyeXB0KSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWRldl9wdXQob2Rldik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChvc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCkBAIC0xMzgwLDIwICsxNDg4LDQyIEBACiAJCQkJICAgICAgdS5hcCk7CiAJaWYgKGxpa2VseShtb25pdG9yX2lmYWNlICE9IFVOS05PV05fQUREUkVTUykpCiAJCWluZm8tPmNvbnRyb2wudmlmID0gJm9zZGF0YS0+dmlmOwotCXJldCA9IGllZWU4MDIxMV90eChvZGV2LCBza2IpOworCisJaWVlZTgwMjExX3R4KG9kZXYsIHNrYiwgZmFsc2UpOwogCWRldl9wdXQob2Rldik7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIGludCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpwcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKilza2ItPmRhdGE7CiAJdTE2IGxlbl9ydGhkcjsKIAorCS8qCisJICogRnJhbWUgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkIGlmIGJlYWNvbmluZyBpcyBub3QgYWxsb3dlZAorCSAqIG9yIGlmIHdlIG5lZWQgcmFkYXIgZGV0ZWN0aW9uLiBCZWFjb25pbmcgaXMgdXN1YWxseSBub3QgYWxsb3dlZCB3aGVuCisJICogdGhlIG1vZGUgb3Igb3BlcmF0aW9uIChBZGhvYywgQVAsIE1lc2gpIGRvZXMgbm90IHN1cHBvcnQgREZTLgorCSAqIFBhc3NpdmUgc2NhbiBpcyBhbHNvIHVzZWQgaW4gd29ybGQgcmVndWxhdG9yeSBkb21haW5zIHdoZXJlCisJICogeW91ciBjb3VudHJ5IGlzIG5vdCBrbm93biBhbmQgYXMgc3VjaCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcworCSAqIE5PIFRYIHVubGVzcyB0aGUgY2hhbm5lbCBpcyBleHBsaWNpdGx5IGFsbG93ZWQgaW4gd2hpY2ggY2FzZQorCSAqIHlvdXIgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiB3b3VsZCBub3QgaGF2ZSB0aGUgcGFzc2l2ZSBzY2FuCisJICogZmxhZy4KKwkgKgorCSAqIFNpbmNlIEFQIG1vZGUgdXNlcyBtb25pdG9yIGludGVyZmFjZXMgdG8gaW5qZWN0L1RYIG1hbmFnZW1lbnQKKwkgKiBmcmFtZXMgd2UgY2FuIG1ha2UgQVAgbW9kZSB0aGUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBvbmNlIGl0CisJICogc3VwcG9ydHMgcmFkYXIgZGV0ZWN0aW9uIGFzIGl0cyBpbXBsZW1lbnRhdGlvbiBjYW4gZGVhbCB3aXRoCisJICogcmFkYXIgZGV0ZWN0aW9uIGJ5IGl0c2VsZi4gV2UgY2FuIGRvIHRoYXQgbGF0ZXIgYnkgYWRkaW5nIGEKKwkgKiBtb25pdG9yIGZsYWcgaW50ZXJmYWNlcyB1c2VkIGZvciBBUCBzdXBwb3J0LgorCSAqLworCWlmICgoY2hhbi0+ZmxhZ3MgJiAoSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkgICAgIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpKQorCQlnb3RvIGZhaWw7CisKIAkvKiBjaGVjayBmb3Igbm90IGV2ZW4gaGF2aW5nIHRoZSBmaXhlZCByYWRpb3RhcCBoZWFkZXIgcGFydCAqLwogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlcikpKQogCQlnb3RvIGZhaWw7IC8qIHRvbyBzaG9ydCB0byBiZSBwb3NzaWJseSB2YWxpZCAqLwpAQCAtMTQ3NywxOSArMTYwNyw2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUykgJiYKLQkgICAgbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKLQkJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKLQkJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOwotCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLAotCQkJCSAgICZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOwotCQl9Ci0KLQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCkpOwotCX0KLQogCW5oX3BvcyA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhOwogCWhfcG9zID0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YTsKIApAQCAtMTU3MCw3ICsxNjg3LDcgQEAKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkvKiBCU1NJRCBTQSBEQSAqLwotCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKQEAgLTE1NzksNyArMTY5Niw3IEBACiAJCS8qIERBIFNBIEJTU0lEICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwotCQltZW1jcHkoaGRyLmFkZHIzLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMywgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE2MDEsOCArMTcxOCw3IEBACiAJfQogCiAJLyogcmVjZWl2ZXIgYW5kIHdlIGFyZSBRb1MgZW5hYmxlZCwgdXNlIGEgUW9TIHR5cGUgZnJhbWUgKi8KLQlpZiAoc3RhX2ZsYWdzICYgV0xBTl9TVEFfV01FICYmCi0JICAgIGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJmxvY2FsLT5odykgPj0gNCkgeworCWlmICgoc3RhX2ZsYWdzICYgV0xBTl9TVEFfV01FKSAmJiBsb2NhbC0+aHcucXVldWVzID49IDQpIHsKIAkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKTsKIAkJaGRybGVuICs9IDI7CiAJfQpAQCAtMTczNCwxOSArMTg1MCw1OCBAQAogICovCiB2b2lkIGllZWU4MDIxMV9jbGVhcl90eF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCWludCBpLCBqOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCAqc3RvcmU7CisJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcygmbG9jYWwtPmh3KTsgaSsrKSB7Ci0JCWlmICghdGVzdF9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKSkKLQkJCWNvbnRpbnVlOwotCQlzdG9yZSA9ICZsb2NhbC0+cGVuZGluZ19wYWNrZXRbaV07Ci0JCWtmcmVlX3NrYihzdG9yZS0+c2tiKTsKLQkJZm9yIChqID0gMDsgaiA8IHN0b3JlLT5udW1fZXh0cmFfZnJhZzsgaisrKQotCQkJa2ZyZWVfc2tiKHN0b3JlLT5leHRyYV9mcmFnW2pdKTsKLQkJa2ZyZWUoc3RvcmUtPmV4dHJhX2ZyYWcpOwotCQljbGVhcl9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LnF1ZXVlczsgaSsrKQorCQlza2JfcXVldWVfcHVyZ2UoJmxvY2FsLT5wZW5kaW5nW2ldKTsKK30KKworc3RhdGljIGJvb2wgaWVlZTgwMjExX3R4X3BlbmRpbmdfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCByZXQ7CisJYm9vbCByZXN1bHQgPSB0cnVlOworCisJLyogZG9lcyBpbnRlcmZhY2Ugc3RpbGwgZXhpc3Q/ICovCisJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHNrYi0+aWlmKTsKKwlpZiAoIWRldikgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiB0cnVlOwogCX0KKworCS8qIHZhbGlkYXRlIGluZm8tPmNvbnRyb2wudmlmIGFnYWluc3Qgc2tiLT5paWYgKi8KKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkgICAgIHUuYXApOworCisJaWYgKHVubGlrZWx5KGluZm8tPmNvbnRyb2wudmlmICYmIGluZm8tPmNvbnRyb2wudmlmICE9ICZzZGF0YS0+dmlmKSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJlc3VsdCA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORykgeworCQlpZWVlODAyMTFfdHgoZGV2LCBza2IsIHRydWUpOworCX0gZWxzZSB7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKworCQlyZXQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgJnNrYiwgc3RhKTsKKwkJaWYgKHJldCAhPSBJRUVFODAyMTFfVFhfT0spCisJCQlyZXN1bHQgPSBmYWxzZTsKKwl9CisKKyBvdXQ6CisJZGV2X3B1dChkZXYpOworCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoKQEAgLTE3NTcsNDAgKzE5MTIsNTMgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICopZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPm1kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0ICpzdG9yZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7Ci0JaW50IGksIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWJvb2wgbmV4dDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0JZm9yIChpID0gMDsgaSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJmxvY2FsLT5odyk7IGkrKykgewotCQkvKiBDaGVjayB0aGF0IHRoaXMgcXVldWUgaXMgb2sgKi8KLQkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgaSkgJiYKLQkJICAgICF0ZXN0X2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmdfcnVuKSkKKworCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+aHcucXVldWVzOyBpKyspIHsKKwkJLyoKKwkJICogSWYgcXVldWUgaXMgc3RvcHBlZCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBkdWUgdG8gcGVuZGluZworCQkgKiBmcmFtZXMsIG9yIHdlIGhhdmUgbm8gcGVuZGluZyBmcmFtZXMsIHByb2NlZWQgdG8gbmV4dCBxdWV1ZS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCQluZXh0ID0gZmFsc2U7CisJCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW2ldICE9CisJCQlCSVQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpIHx8CisJCSAgICBza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW2ldKSkKKwkJCW5leHQgPSB0cnVlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCisJCWlmIChuZXh0KQogCQkJY29udGludWU7CiAKLQkJaWYgKCF0ZXN0X2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpKSB7Ci0JCQljbGVhcl9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bik7Ci0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZSgmbG9jYWwtPmh3LCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJY2xlYXJfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZ19ydW4pOworCQkvKgorCQkgKiBzdGFydCB0aGUgcXVldWUgbm93IHRvIGFsbG93IHByb2Nlc3Npbmcgb3VyIHBhY2tldHMsCisJCSAqIHdlJ3JlIHVuZGVyIHRoZSB0eCBsb2NrIGhlcmUgYW55d2F5IHNvIG5vdGhpbmcgd2lsbAorCQkgKiBoYXBwZW4gYXMgYSByZXN1bHQgb2YgdGhpcworCQkgKi8KIAkJbmV0aWZfc3RhcnRfc3VicXVldWUobG9jYWwtPm1kZXYsIGkpOwogCi0JCXN0b3JlID0gJmxvY2FsLT5wZW5kaW5nX3BhY2tldFtpXTsKLQkJdHguZXh0cmFfZnJhZyA9IHN0b3JlLT5leHRyYV9mcmFnOwotCQl0eC5udW1fZXh0cmFfZnJhZyA9IHN0b3JlLT5udW1fZXh0cmFfZnJhZzsKLQkJdHguZmxhZ3MgPSAwOwotCQlyZXQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgc3RvcmUtPnNrYiwgJnR4KTsKLQkJaWYgKHJldCkgewotCQkJaWYgKHJldCA9PSBJRUVFODAyMTFfVFhfRlJBR19BR0FJTikKLQkJCQlzdG9yZS0+c2tiID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWNsZWFyX2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpOwotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoJmxvY2FsLT5odywgaSk7CisJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnBlbmRpbmdbaV0pOworCisJCQlpZiAoIWllZWU4MDIxMV90eF9wZW5kaW5nX3NrYihsb2NhbCwgc2tiKSkgeworCQkJCXNrYl9xdWV1ZV9oZWFkKCZsb2NhbC0+cGVuZGluZ1tpXSwgc2tiKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQorCisJCS8qIFN0YXJ0IHJlZ3VsYXIgcGFja2V0IHByb2Nlc3NpbmcgYWdhaW4uICovCisJCWlmIChza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW2ldKSkKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbigmbG9jYWwtPmh3LCBpLAorCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORyk7CiAJfQorCiAJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qIGZ1bmN0aW9ucyBmb3IgZHJpdmVycyB0byBnZXQgY2VydGFpbiBmcmFtZXMgKi8KQEAgLTE4NjUsNyArMjAzMyw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICphcCA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gTlVMTDsKIAlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwpAQCAtMTkxNywxMyArMjA4NCwxMyBAQAogCQl9IGVsc2UKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCQlpZiAoIWlmc3RhLT5wcm9iZV9yZXNwKQorCQlpZiAoIWlmaWJzcy0+cHJvYmVfcmVzcCkKIAkJCWdvdG8gb3V0OwogCi0JCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfQVRPTUlDKTsKKwkJc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcm9iZV9yZXNwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpCiAJCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZmI4OWUxZC4uZmRmNDMyZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC00MSw2ICs0MSwxNSBAQAogY29uc3QgdW5zaWduZWQgY2hhciBicmlkZ2VfdHVubmVsX2hlYWRlcltdIF9fYWxpZ25lZCgyKSA9CiAJeyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4IH07CiAKK3N0cnVjdCBpZWVlODAyMTFfaHcgKndpcGh5X3RvX2llZWU4MDIxMV9odyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCUJVR19PTighd2lwaHkpOworCisJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlyZXR1cm4gJmxvY2FsLT5odzsKK30KK0VYUE9SVF9TWU1CT0wod2lwaHlfdG9faWVlZTgwMjExX2h3KTsKIAogdTggKmllZWU4MDIxMV9nZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgc2l6ZV90IGxlbiwKIAkJCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKQEAgLTE1NywxOCArMTY2LDEzIEBACiAKIHZvaWQgaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHR4LT5za2ItPmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAotCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZmhkcjsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKQotCQkJCXR4LT5leHRyYV9mcmFnW2ldLT5kYXRhOwotCQkJZmhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCQl9Ci0JfQorCWRvIHsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogfQogCiBpbnQgaWVlZTgwMjExX2ZyYW1lX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzaXplX3QgbGVuLApAQCAtMzM1LDIxICszMzksMjEgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAotCS8qIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgYW1wZHUgcXVldWVzICovCi0JaWYgKHF1ZXVlIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcyhodykpIHsKLQkJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCWlmIChXQVJOX09OKHF1ZXVlID49IGh3LT5xdWV1ZXMpKQorCQlyZXR1cm47CiAKLQkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdICE9IDApCi0JCQkvKiBzb21lb25lIHN0aWxsIGhhcyB0aGlzIHF1ZXVlIHN0b3BwZWQgKi8KLQkJCXJldHVybjsKLQl9CisJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogCi0JaWYgKHRlc3RfYml0KHF1ZXVlLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpKSB7Ci0JCXNldF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZ19ydW4pOworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pICYmCisJICAgIGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdID09CisJCQkJQklUKElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKSkKIAkJdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7Ci0JfSBlbHNlIHsKLQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOwotCX0KKworCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSAhPSAwKQorCQkvKiBzb21lb25lIHN0aWxsIGhhcyB0aGlzIHF1ZXVlIHN0b3BwZWQgKi8KKwkJcmV0dXJuOworCisJbmV0aWZfd2FrZV9zdWJxdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOwogfQogCiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLApAQCAtMzc1LDExICszNzksMTggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAotCS8qIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgYW1wZHUgcXVldWVzICovCi0JaWYgKHF1ZXVlIDwgaWVlZTgwMjExX251bV9yZWd1bGFyX3F1ZXVlcyhodykpCi0JCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisJaWYgKFdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcykpCisJCXJldHVybjsKIAotCW5ldGlmX3N0b3Bfc3VicXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKKwkvKgorCSAqIE9ubHkgc3RvcCBpZiBpdCB3YXMgcHJldmlvdXNseSBydW5uaW5nLCB0aGlzIGlzIG5lY2Vzc2FyeQorCSAqIGZvciBjb3JyZWN0IHBlbmRpbmcgcGFja2V0cyBoYW5kbGluZyBiZWNhdXNlIHRoZXJlIHdlIG1heQorCSAqIHN0YXJ0IChidXQgbm90IHdha2UpIHRoZSBxdWV1ZSBhbmQgcmVseSBvbiB0aGF0LgorCSAqLworCWlmICghbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pCisJCW5ldGlmX3N0b3Bfc3VicXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKKworCV9fc2V0X2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUsCkBAIC00MDksNyArNDIwLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzOyBpKyspCiAJCV9faWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIGksIHJlYXNvbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwpAQCAtNDI1LDYgKzQzNiwxMCBAQAogaW50IGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisKKwlpZiAoV0FSTl9PTihxdWV1ZSA+PSBody0+cXVldWVzKSkKKwkJcmV0dXJuIHRydWU7CisKIAlyZXR1cm4gX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKTsKQEAgLTQzOCw3ICs0NTMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaHctPnF1ZXVlcyArIGh3LT5hbXBkdV9xdWV1ZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnF1ZXVlczsgaSsrKQogCQlfX2llZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpLCByZWFzb24pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKQEAgLTQ1OSw3ICs0NzQsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCi0JcnRubF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CkBAIC00ODAsNyArNDk1LDcgQEAKIAkJCQkgJnNkYXRhLT52aWYpOwogCX0KIAotCXJ0bmxfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyk7CiAKQEAgLTY1Myw2ICs2NjgsMTAgQEAKIAkJCWVsZW1zLT5wd3JfY29uc3RyX2VsZW0gPSBwb3M7CiAJCQllbGVtcy0+cHdyX2NvbnN0cl9lbGVtX2xlbiA9IGVsZW47CiAJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMOgorCQkJZWxlbXMtPnRpbWVvdXRfaW50ID0gcG9zOworCQkJZWxlbXMtPnRpbWVvdXRfaW50X2xlbiA9IGVsZW47CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC02ODgsNiArNzA3LDI3IEBACiAJCWxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLCBpLCAmcXBhcmFtKTsKIH0KIAordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGksIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMDsKKworCS8qIGNmLiBJRUVFIDgwMi4xMSA5LjIuMTIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykKKwkJaWYgKChzdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQorCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOworCisJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKKwkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisJZWxzZQorCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisKKwlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKK30KKwogdm9pZCBpZWVlODAyMTFfdHhfc2tiKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICBpbnQgZW5jcnlwdCkKIHsKQEAgLTcyNywxMiArNzY3LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdTY0IGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCit1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXU2NCBtYW5kYXRvcnlfcmF0ZXM7CisJdTMyIG1hbmRhdG9yeV9yYXRlczsKIAllbnVtIGllZWU4MDIxMV9yYXRlX2ZsYWdzIG1hbmRhdG9yeV9mbGFnOwogCWludCBpOwogCkBAIC03NTQsMyArNzk0LDE0MCBAQAogCQkJbWFuZGF0b3J5X3JhdGVzIHw9IEJJVChpKTsKIAlyZXR1cm4gbWFuZGF0b3J5X3JhdGVzOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsCisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAorCQkJIGNvbnN0IHU4ICpic3NpZCwgaW50IGVuY3J5cHQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCisJCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXV0aCAiCisJCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCArIDYpOworCW1lbXNldChtZ210LCAwLCAyNCArIDYpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOworCWlmIChlbmNyeXB0KQorCQltZ210LT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CisJbWVtY3B5KG1nbXQtPmRhLCBic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoYXV0aF9hbGcpOworCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOworCW1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSA9IGNwdV90b19sZTE2KDApOworCWlmIChleHRyYSkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBleHRyYV9sZW4pLCBleHRyYSwgZXh0cmFfbGVuKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgZW5jcnlwdCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAorCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJCSAgICAgIHU4ICppZSwgc2l6ZV90IGllX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1OCAqcG9zLCAqc3VwcF9yYXRlcywgKmVzdXBwX3JhdGVzID0gTlVMTDsKKwlpbnQgaTsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCArCisJCQkgICAgaWVfbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKKwkJICAgICAgICJyZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJaWYgKGRzdCkgeworCQltZW1jcHkobWdtdC0+ZGEsIGRzdCwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+YnNzaWQsIGRzdCwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOworCQltZW1zZXQobWdtdC0+YnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKwl9CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyBzc2lkX2xlbik7CisJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkqcG9zKysgPSBzc2lkX2xlbjsKKwltZW1jcHkocG9zLCBzc2lkLCBzc2lkX2xlbik7CisKKwlzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDIpOworCXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCXN1cHBfcmF0ZXNbMV0gPSAwOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07CisJCWlmIChlc3VwcF9yYXRlcykgeworCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOworCQkJZXN1cHBfcmF0ZXNbMV0rKzsKKwkJfSBlbHNlIGlmIChzdXBwX3JhdGVzWzFdID09IDgpIHsKKwkJCWVzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDMpOworCQkJZXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKKwkJCWVzdXBwX3JhdGVzWzFdID0gMTsKKwkJCXBvcyA9ICZlc3VwcF9yYXRlc1syXTsKKwkJfSBlbHNlIHsKKwkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKKwkJCXN1cHBfcmF0ZXNbMV0rKzsKKwkJfQorCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7CisJfQorCisJaWYgKGllKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGllX2xlbiksIGllLCBpZV9sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKwordTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKKwlzaXplX3QgbnVtX3JhdGVzOworCXUzMiBzdXBwX3JhdGVzOworCWludCBpLCBqOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKKworCWlmICghc2JhbmQpIHsKKwkJV0FSTl9PTigxKTsKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCX0KKworCWJpdHJhdGVzID0gc2JhbmQtPmJpdHJhdGVzOworCW51bV9yYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOworCXN1cHBfcmF0ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4gKworCQkgICAgIGVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW47IGkrKykgeworCQl1OCByYXRlID0gMDsKKwkJaW50IG93bl9yYXRlOworCQlpZiAoaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbikKKwkJCXJhdGUgPSBlbGVtcy0+c3VwcF9yYXRlc1tpXTsKKwkJZWxzZSBpZiAoZWxlbXMtPmV4dF9zdXBwX3JhdGVzKQorCQkJcmF0ZSA9IGVsZW1zLT5leHRfc3VwcF9yYXRlcworCQkJCVtpIC0gZWxlbXMtPnN1cHBfcmF0ZXNfbGVuXTsKKwkJb3duX3JhdGUgPSA1ICogKHJhdGUgJiAweDdmKTsKKwkJZm9yIChqID0gMDsgaiA8IG51bV9yYXRlczsgaisrKQorCQkJaWYgKGJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gb3duX3JhdGUpCisJCQkJc3VwcF9yYXRlcyB8PSBCSVQoaik7CisJfQorCXJldHVybiBzdXBwX3JhdGVzOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dlcC5jIGIvbmV0L21hYzgwMjExL3dlcC5jCmluZGV4IDcwNDNkZGMuLmVmNzMxMDUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXAuYworKysgYi9uZXQvbWFjODAyMTEvd2VwLmMKQEAgLTMyOSwyNCArMzI5LDE3IEBACiBpZWVlODAyMTFfdHhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX3dlcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0JaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWllZWU4MDIxMV90eF9zZXRfcHJvdGVjdGVkKHR4KTsKIAotCWlmICh3ZXBfZW5jcnlwdF9za2IodHgsIHR4LT5za2IpIDwgMCkgewotCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3Bfd2VwKTsKLQkJcmV0dXJuIFRYX0RST1A7Ci0JfQotCi0JaWYgKHR4LT5leHRyYV9mcmFnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaWYgKHdlcF9lbmNyeXB0X3NrYih0eCwgdHgtPmV4dHJhX2ZyYWdbaV0pKSB7Ci0JCQkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT4KLQkJCQkJICAgICAgIHR4X2hhbmRsZXJzX2Ryb3Bfd2VwKTsKLQkJCQlyZXR1cm4gVFhfRFJPUDsKLQkJCX0KKwlza2IgPSB0eC0+c2tiOworCWRvIHsKKwkJaWYgKHdlcF9lbmNyeXB0X3NrYih0eCwgc2tiKSA8IDApIHsKKwkJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF93ZXApOworCQkJcmV0dXJuIFRYX0RST1A7CiAJCX0KLQl9CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dleHQuYyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKaW5kZXggNzE2MmQ1OC4uZGViNGVjZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dleHQuYworKysgYi9uZXQvbWFjODAyMTEvd2V4dC5jCkBAIC0zNyw3ICszNywxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiAJaW50IGVycjsKIAotCWlmIChpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKSB7CisJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMpIHsKKwkJaWYgKGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgfHwKKwkJICAgIGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWQgIgorCQkJICAgICAgICIoQklQKVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgaWR4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0X2VuY3J5cHQgLSBpbnZhbGlkIGlkeD0lZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAzLDYgKzExMCw5IEBACiAKIAkJaWYgKHNldF90eF9rZXkgfHwgKCFzdGEgJiYgIXNkYXRhLT5kZWZhdWx0X2tleSAmJiBrZXkpKQogCQkJaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgaWR4KTsKKwkJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMgJiYKKwkJICAgIChzZXRfdHhfa2V5IHx8ICghc3RhICYmICFzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSAmJiBrZXkpKSkKKwkJCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgaWR4KTsKIAl9CiAKICBvdXRfdW5sb2NrOgpAQCAtMTE5LDEyNSArMTI5LDM4IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWludCByZXQgPSBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzZGF0YSwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEsICZzZGF0YS0+dS5zdGEpOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBjID0gMDsKLQotCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjE7Ci0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9ERUZBVUxUX0tFWVM7Ci0KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfHwKLQkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gbG9jYWwtPmh3Lm1heF9zaWduYWw7Ci0JZWxzZSBpZiAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKLQotCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7Ci0JLyogbm90IGFsd2F5cyB0cnVlIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nICovCi0JcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKLQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOwotCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAotCQkJICBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOwotCi0KLQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCArKykgewotCQlpbnQgaTsKLQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JCWlmICghc2JhbmQpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOwotCi0JCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgewotCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQotCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCi0JCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOwotCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OwotCQkJCWMrKzsKLQkJCX0KLQkJfQotCX0KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7Ci0KLQlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7Ci0KLQlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKLQotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCiAJLyogZnJlcS0+ZSA9PSAwOiBmcmVxLT5tID0gY2hhbm5lbDsgb3RoZXJ3aXNlIGZyZXEgPSBtICogMTBeZSAqLwogCWlmIChmcmVxLT5lID09IDApIHsKIAkJaWYgKGZyZXEtPm0gPCAwKSB7Ci0JCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwkJCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQogCQkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlCkBAIC0yNzQsMzIgKzE5NywyOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7CisJaW50IHJldDsKIAogCS8qIGl3Y29uZmlnIHVzZXMgbnVsIHRlcm1pbmF0aW9uIGluIFNTSUQuLiAqLwogCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKIAkJbGVuLS07CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpbnQgcmV0OwotCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7Ci0JCQlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweShzZGF0YS0+dS5zdGEuc3NpZCwgc3NpZCwgbGVuKTsKLQkJCXNkYXRhLT51LnN0YS5zc2lkX2xlbiA9IGxlbjsKLQkJCXJldHVybiAwOwotCQl9CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWlmIChkYXRhLT5mbGFncykKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CiAJCWVsc2UKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCiAJCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIHNzaWQsIGxlbik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRVhUX1NNRTsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwotCX0KKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHNkYXRhLCBzc2lkLCBsZW4pOwogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpAQCAtMzEzLDggKzIzMiw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmVzID0gaWVlZTgwMjExX3N0YV9nZXRfc3NpZChzZGF0YSwgc3NpZCwgJmxlbik7CiAJCWlmIChyZXMgPT0gMCkgewogCQkJZGF0YS0+bGVuZ3RoID0gbGVuOwpAQCAtMzIyLDYgKzI0MCwxNCBAQAogCQl9IGVsc2UKIAkJCWRhdGEtPmZsYWdzID0gMDsKIAkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpbnQgcmVzID0gaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc2RhdGEsIHNzaWQsICZsZW4pOworCQlpZiAocmVzID09IDApIHsKKwkJCWRhdGEtPmxlbmd0aCA9IGxlbjsKKwkJCWRhdGEtPmZsYWdzID0gMTsKKwkJfSBlbHNlCisJCQlkYXRhLT5mbGFncyA9IDA7CisJCXJldHVybiByZXM7CiAJfQogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMzM1LDI2ICsyNjEsMzIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWludCByZXQ7Ci0JCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpIHsKLQkJCW1lbWNweShzZGF0YS0+dS5zdGEuYnNzaWQsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSwKLQkJCSAgICAgICBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKIAkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwogCQllbHNlCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CiAJCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHNkYXRhLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTCB8CisJCQkJCSAgICAgICBJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTDsKKwkJZWxzZQorCQkJc2RhdGEtPnUuaWJzcy5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUw7CisKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzZGF0YSwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKTsKIAl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9XRFMpIHsKIAkJLyoKIAkJICogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHVwZGF0ZSB0aGUgV0RTIHBlZXIgYWRkcmVzcwpAQCAtMzgzLDE3ICszMTUsMjAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWlmIChzZGF0YS0+dS5zdGEuc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQgfHwKLQkJICAgIHNkYXRhLT51LnN0YS5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewogCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgeworCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwkJfSBlbHNlCiAJCQltZW1zZXQoJmFwX2FkZHItPnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzZGF0YS0+dS5pYnNzLnN0YXRlID09IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEKSB7CisJCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwkJfSBlbHNlCisJCQltZW1zZXQoJmFwX2FkZHItPnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKKwkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfV0RTKSB7CiAJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTQwNCw1OCArMzM5LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSBOVUxMOwotCXU4ICpzc2lkID0gTlVMTDsKLQlzaXplX3Qgc3NpZF9sZW4gPSAwOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkvKiBpZiBTU0lEIHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSB0aGVuIHVzZSB0aGF0ICovCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpICYmCi0JICAgIHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKLQkJcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWV4dHJhOwotCQlzc2lkID0gcmVxLT5lc3NpZDsKLQkJc3NpZF9sZW4gPSByZXEtPmVzc2lkX2xlbjsKLQl9Ci0KLQlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgc3NpZCwgc3NpZF9sZW4pOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0JaW50IHJlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKGxvY2FsLT5zd19zY2FubmluZyB8fCBsb2NhbC0+aHdfc2Nhbm5pbmcpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JcmVzID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhsb2NhbCwgaW5mbywgZXh0cmEsIGRhdGEtPmxlbmd0aCk7Ci0JaWYgKHJlcyA+PSAwKSB7Ci0JCWRhdGEtPmxlbmd0aCA9IHJlczsKLQkJcmV0dXJuIDA7Ci0JfQotCWRhdGEtPmxlbmd0aCA9IDA7Ci0JcmV0dXJuIHJlczsKLX0KLQotCiBzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKQEAgLTUxMSw3ICszOTQsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5zdGEuYnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKIAogCWlmIChzdGEgJiYgIShzdGEtPmxhc3RfdHhfcmF0ZS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQogCQlyYXRlLT52YWx1ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGEtPmxhc3RfdHhfcmF0ZS5pZHhdLmJpdHJhdGU7CkBAIC01NDksMTAgKzQzMiw5IEBACiAJZWxzZSAvKiBBdXRvbWF0aWMgcG93ZXIgbGV2ZWwgc2V0dGluZyAqLwogCQluZXdfcG93ZXJfbGV2ZWwgPSBjaGFuLT5tYXhfcG93ZXI7CiAKLQlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gbmV3X3Bvd2VyX2xldmVsKSB7Ci0JCWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsID0gbmV3X3Bvd2VyX2xldmVsOworCWxvY2FsLT51c2VyX3Bvd2VyX2xldmVsID0gbmV3X3Bvd2VyX2xldmVsOworCWlmIChsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCAhPSBuZXdfcG93ZXJfbGV2ZWwpCiAJCXJlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVI7Ci0JfQogCiAJaWYgKGxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgIT0gIShkYXRhLT50eHBvd2VyLmRpc2FibGVkKSkgewogCQlsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkID0gIShkYXRhLT50eHBvd2VyLmRpc2FibGVkKTsKQEAgLTcxMyw4ICs1OTUsNyBAQAogCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopIGV4dHJhOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKCEoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAobWxtZS0+Y21kKSB7CkBAIC03MzcsNyArNjE4LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlpbnQgaWR4LCBpLCBhbGcgPSBBTEdfV0VQOwogCXU4IGJjYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQlpbnQgcmVtb3ZlID0gMDsKKwlpbnQgcmVtb3ZlID0gMCwgcmV0OwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCkBAIC03NjMsMTEgKzY0NCwyMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKAorCXJldCA9IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbigKIAkJc2RhdGEsIGJjYWRkciwKIAkJaWR4LCBhbGcsIHJlbW92ZSwKIAkJIXNkYXRhLT5kZWZhdWx0X2tleSwKIAkJa2V5YnVmLCBlcnEtPmxlbmd0aCk7CisKKwlpZiAoIXJldCkgeworCQlpZiAocmVtb3ZlKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQ7CisJCWVsc2UKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQ7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC04MTAsOCArNzAwLDcgQEAKIAllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JCXN3aXRjaCAoaWZzdGEtPmF1dGhfYWxnKSB7CisJCXN3aXRjaCAoc2RhdGEtPnUubWdkLmF1dGhfYWxnKSB7CiAJCWNhc2UgV0xBTl9BVVRIX09QRU46CiAJCWNhc2UgV0xBTl9BVVRIX0xFQVA6CiAJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwpAQCAtODM2LDYgKzcyNSw5IEBACiAJaW50IHJldCA9IDAsIHRpbWVvdXQgPSAwOwogCWJvb2wgcHM7CiAKKwlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC04NTIsMzEgKzc0NCw0OSBAQAogCQlwcyA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB3ZSBpZ25vcmUgKi8KLQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICh3cnEtPmZsYWdzICYgfihJV19QT1dFUl9NT0RFIHwgSVdfUE9XRVJfVElNRU9VVCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHdycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKQogCQl0aW1lb3V0ID0gd3JxLT52YWx1ZSAvIDEwMDA7CiAKLXNldDoKLQlpZiAocHMgPT0gbG9jYWwtPnBvd2Vyc2F2ZSAmJiB0aW1lb3V0ID09IGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpCisgc2V0OgorCWlmIChwcyA9PSBsb2NhbC0+cG93ZXJzYXZlICYmIHRpbWVvdXQgPT0gY29uZi0+ZHluYW1pY19wc190aW1lb3V0KQogCQlyZXR1cm4gcmV0OwogCiAJbG9jYWwtPnBvd2Vyc2F2ZSA9IHBzOwotCWxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPSB0aW1lb3V0OworCWNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA9IHRpbWVvdXQ7CiAKLQlpZiAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7Ci0JCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTKSAmJgotCQkgICAgbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApCi0JCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKLQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCkpOwotCQllbHNlIHsKLQkJCWlmIChsb2NhbC0+cG93ZXJzYXZlKQotCQkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwotCQkJZWxzZQotCQkJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCisJCXJldCA9IGllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCSAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0RZTlBTX1RJTUVPVVQpOworCisJaWYgKCEoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwICYmCisJICAgICEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpKSB7CisJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkpOworCX0gZWxzZSB7CisJCWlmIChsb2NhbC0+cG93ZXJzYXZlKSB7CisJCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CisJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJCXJldCA9IGllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCX0gZWxzZSB7CisJCQljb25mLT5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCQkJZGVsX3RpbWVyX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyKTsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAkJfQotCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MDMsMTEgKzgxMywyMiBAQAogCiAJc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKIAljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKIAljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKIAljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CiAJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVBfTUdNVDoKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlpZiAoZGF0YS0+dmFsdWUgJiAoSVdfQVVUSF9DSVBIRVJfV0VQNDAgfAorCQkJICAgIElXX0FVVEhfQ0lQSEVSX1dFUDEwNCB8IElXX0FVVEhfQ0lQSEVSX1RLSVApKQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQ7CisJCQllbHNlCisJCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9CisJCQkJCX5JRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQ7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CiAJCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gISFkYXRhLT52YWx1ZTsKQEAgLTkxNiwyNCArODM3LDQ1IEBACiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJCXJldCA9IC1FSU5WQUw7CiAJCWVsc2UgewotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CiAJCQkvKgogCQkJICogUHJpdmFjeSBpbnZva2VkIGJ5IHdwYV9zdXBwbGljYW50LCBzdG9yZSB0aGUKIAkJCSAqIHZhbHVlIGFuZCBhbGxvdyBhc3NvY2lhdGluZyB0byBhIHByb3RlY3RlZAogCQkJICogbmV0d29yayB3aXRob3V0IGhhdmluZyBhIGtleSB1cCBmcm9udC4KIAkJCSAqLwogCQkJaWYgKGRhdGEtPnZhbHVlKQotCQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQogCQkJCQlJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKIAkJfQogCQlicmVhazsKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJc2RhdGEtPnUuc3RhLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gZGF0YS0+dmFsdWU7CiAJCWVsc2UKIAkJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKKwljYXNlIElXX0FVVEhfTUZQOgorCQlpZiAoIShzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFKSkgeworCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCXN3aXRjaCAoZGF0YS0+dmFsdWUpIHsKKwkJCWNhc2UgSVdfQVVUSF9NRlBfRElTQUJMRUQ6CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIElXX0FVVEhfTUZQX09QVElPTkFMOgorCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX09QVElPTkFMOworCQkJCWJyZWFrOworCQkJY2FzZSBJV19BVVRIX01GUF9SRVFVSVJFRDoKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9SRVFVSVJFRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOwpAQCAtOTUxLDkgKzg5Myw5IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCk7CisKIAlpZiAoIXN0YSkgewogCQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSAwOwogCQl3c3RhdHMtPmRpc2NhcmQubWlzYyA9IDA7CkBAIC05NjIsMTAgKzkwNCw0NSBAQAogCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwogCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX0lOVkFMSUQ7CiAJfSBlbHNlIHsKLQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3RfcXVhbDsKLQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOwotCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7CisJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gMDsKKwkJLyoKKwkJICogbWlycm9yIHdoYXQgY2ZnODAyMTEgZG9lcyBmb3IgaXdyYW5nZS9zY2FuIHJlc3VsdHMsCisJCSAqIG90aGVyd2lzZSB1c2Vyc3BhY2UgZ2V0cyBjb25mdXNlZC4KKwkJICovCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiAoSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfAorCQkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkpIHsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworCQl9IGVsc2UgeworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9JTlZBTElEOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX0lOVkFMSUQ7CisJCX0KKworCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpIHsKKwkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHN0YS0+bGFzdF9zaWduYWw7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IHN0YS0+bGFzdF9zaWduYWw7CisJCX0gZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pIHsKKwkJCWludCBzaWcgPSBzdGEtPmxhc3Rfc2lnbmFsOworCisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHNpZzsKKwkJCWlmIChzaWcgPCAtMTEwKQorCQkJCXNpZyA9IC0xMTA7CisJCQllbHNlIGlmIChzaWcgPiAtNDApCisJCQkJc2lnID0gLTQwOworCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzaWcgKyAxMTA7CisJCX0KKworCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSkgeworCQkJLyoKKwkJCSAqIFRoaXMgYXNzdW1lcyB0aGF0IGlmIGRyaXZlciByZXBvcnRzIG5vaXNlLCBpdCBhbHNvCisJCQkgKiByZXBvcnRzIHNpZ25hbCBpbiBkQm0uCisJCQkgKi8KKwkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHN0YS0+bGFzdF9ub2lzZTsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKKwkJfSBlbHNlIHsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKwkJfQogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtOTgyLDkgKzk1OSw4IEBACiAKIAlzd2l0Y2ggKGRhdGEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51LnN0YS5hdXRoX2FsZ3M7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCWRhdGEtPnZhbHVlID0gc2RhdGEtPnUubWdkLmF1dGhfYWxnczsKIAkJZWxzZQogCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOwpAQCAtMTAxNyw2ICs5OTMsOSBAQAogCWNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogCQlhbGcgPSBBTEdfQ0NNUDsKIAkJYnJlYWs7CisJY2FzZSBJV19FTkNPREVfQUxHX0FFU19DTUFDOgorCQlhbGcgPSBBTEdfQUVTX0NNQUM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMDI1LDIwICsxMDA0LDQxIEBACiAJCXJlbW92ZSA9IDE7CiAKIAlpZHggPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCWlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKLQkJaWR4ID0gLTE7Ci0JCWlmICghc2RhdGEtPmRlZmF1bHRfa2V5KQotCQkJaWR4ID0gMDsKLQkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7Ci0JCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKSB7Ci0JCQkJaWR4ID0gaTsKLQkJCQlicmVhazsKKwlpZiAoYWxnID09IEFMR19BRVNfQ01BQykgeworCQlpZiAoaWR4IDwgTlVNX0RFRkFVTFRfS0VZUyArIDEgfHwKKwkJICAgIGlkeCA+IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpIHsKKwkJCWlkeCA9IC0xOworCQkJaWYgKCFzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSkKKwkJCQlpZHggPSAwOworCQkJZWxzZSBmb3IgKGkgPSBOVU1fREVGQVVMVF9LRVlTOworCQkJCSAgaSA8IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVM7CisJCQkJICBpKyspIHsKKwkJCQlpZiAoc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkgPT0gc2RhdGEtPmtleXNbaV0pCisJCQkJeworCQkJCQlpZHggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9Ci0JCX0KLQkJaWYgKGlkeCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UKLQkJaWR4LS07CisJCQlpZiAoaWR4IDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlpZHgtLTsKKwl9IGVsc2UgeworCQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KSB7CisJCQlpZHggPSAtMTsKKwkJCWlmICghc2RhdGEtPmRlZmF1bHRfa2V5KQorCQkJCWlkeCA9IDA7CisJCQllbHNlIGZvciAoaSA9IDA7IGkgPCBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHsKKwkJCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKSB7CisJCQkJCWlkeCA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChpZHggPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCWlkeC0tOworCX0KIAogCXJldHVybiBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oc2RhdGEsIGV4dC0+YWRkci5zYV9kYXRhLCBpZHgsIGFsZywKIAkJCQkJcmVtb3ZlLApAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NFTlMgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1NFTlMgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdSQU5HRSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdyYW5nZSwJCS8qIFNJT0NHSVdSQU5HRSAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1BSSVYgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLywJCS8qIFNJT0NHSVdQUklWICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXU1RBVFMgKi8KQEAgLTEwNzYsOCArMTA3Niw4IEBACiAJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdhcCwJCS8qIFNJT0NHSVdBUCAqLwogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3bWxtZSwJCS8qIFNJT0NTSVdNTE1FICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdBUExJU1QgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3c2NhbiwJCS8qIFNJT0NHSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3c2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3c2NhbiwJCS8qIFNJT0NHSVdTQ0FOICovCiAJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdlc3NpZCwJCS8qIFNJT0NTSVdFU1NJRCAqLwogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3ZXNzaWQsCQkvKiBTSU9DR0lXRVNTSUQgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV05JQ0tOICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmMgYi9uZXQvbWFjODAyMTEvd21lLmMKaW5kZXggYWM3MWIzOC4uMGI4YWQxZjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93bWUuYworKysgYi9uZXQvbWFjODAyMTEvd21lLmMKQEAgLTk5LDEwICs5OSwxMyBAQAogCS8qIGluIGNhc2Ugd2UgYXJlIGEgY2xpZW50IHZlcmlmeSBhY20gaXMgbm90IHNldCBmb3IgdGhpcyBhYyAqLwogCXdoaWxlICh1bmxpa2VseShsb2NhbC0+d21tX2FjbSAmIEJJVChza2ItPnByaW9yaXR5KSkpIHsKIAkJaWYgKHdtZV9kb3duZ3JhZGVfYWMoc2tiKSkgewotCQkJLyogVGhlIG9sZCBjb2RlIHdvdWxkIGRyb3AgdGhlIHBhY2tldCBpbiB0aGlzCi0JCQkgKiBjYXNlLgorCQkJLyoKKwkJCSAqIFRoaXMgc2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuLiBUaGUgQVAgaGFzIG1hcmtlZCBhbGwKKwkJCSAqIGxvd2VyIEFDcyB0byByZXF1aXJlIGFkbWlzc2lvbiBjb250cm9sIHdoaWNoIGlzIG5vdAorCQkJICogYSByZWFzb25hYmxlIGNvbmZpZ3VyYXRpb24uIEFsbG93IHRoZSBmcmFtZSB0byBiZQorCQkJICogdHJhbnNtaXR0ZWQgdXNpbmcgQUNfQksgYXMgYSB3b3JrYXJvdW5kLgogCQkJICovCi0JCQlyZXR1cm4gMDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0xMTQsOSArMTE3LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2ICptcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBtcHJpdi0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUxNiBxdWV1ZTsKIAl1OCB0aWQ7CiAKQEAgLTEyNCwyOSArMTI1LDExIEBACiAJaWYgKHVubGlrZWx5KHF1ZXVlID49IGxvY2FsLT5ody5xdWV1ZXMpKQogCQlxdWV1ZSA9IGxvY2FsLT5ody5xdWV1ZXMgLSAxOwogCi0JaWYgKHNrYi0+cmVxdWV1ZSkgewotCQlpZiAoIWh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlyZXR1cm4gcXVldWU7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwotCQl0aWQgPSBza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FPU19DVExfVEFHMURfTUFTSzsKLQkJaWYgKHN0YSkgewotCQkJaW50IGFtcGR1X3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCi0JCQlpZiAoKGFtcGR1X3F1ZXVlIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpKSAmJgotCQkJICAgIHRlc3RfYml0KGFtcGR1X3F1ZXVlLCBsb2NhbC0+cXVldWVfcG9vbCkpCi0JCQkJcXVldWUgPSBhbXBkdV9xdWV1ZTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQlyZXR1cm4gcXVldWU7Ci0JfQotCi0JLyogTm93IHdlIGtub3cgdGhlIDFkIHByaW9yaXR5LCBmaWxsIGluIHRoZSBRb1MgaGVhZGVyIGlmCi0JICogdGhlcmUgaXMgb25lLgorCS8qCisJICogTm93IHdlIGtub3cgdGhlIDFkIHByaW9yaXR5LCBmaWxsIGluIHRoZSBRb1MgaGVhZGVyIGlmCisJICogdGhlcmUgaXMgb25lIChhbmQgd2UgaGF2ZW4ndCBkb25lIHRoaXMgYmVmb3JlKS4KIAkgKi8KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwlpZiAoIXNrYi0+cmVxdWV1ZSAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQl1OCAqcCA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl1OCBhY2tfcG9saWN5ID0gMDsKIAkJdGlkID0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0s7CkBAIC0xNTYsMTQwICsxMzksNyBAQAogCQkvKiBxb3MgaGVhZGVyIGlzIDIgYnl0ZXMsIHNlY29uZCByZXNlcnZlZCAqLwogCQkqcCsrID0gYWNrX3BvbGljeSB8IHRpZDsKIAkJKnAgPSAwOwotCi0JCWlmICghaHctPmFtcGR1X3F1ZXVlcykKLQkJCXJldHVybiBxdWV1ZTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKLQkJaWYgKHN0YSkgewotCQkJaW50IGFtcGR1X3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCi0JCQlpZiAoKGFtcGR1X3F1ZXVlIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpKSAmJgotCQkJICAgIHRlc3RfYml0KGFtcGR1X3F1ZXVlLCBsb2NhbC0+cXVldWVfcG9vbCkpCi0JCQkJcXVldWUgPSBhbXBkdV9xdWV1ZTsKLQkJfQotCi0JCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAogCXJldHVybiBxdWV1ZTsKIH0KLQotaW50IGllZWU4MDIxMV9odF9hZ2dfcXVldWVfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkKQotewotCWludCBpOwotCi0JLyogWFhYOiBjdXJyZW50bHkgYnJva2VuIGR1ZSB0byBjYi9yZXF1ZXVlIHVzZSAqLwotCXJldHVybiAtRVBFUk07Ci0KLQkvKiBwcmVwYXJlIHRoZSBmaWx0ZXIgYW5kIHNhdmUgaXQgZm9yIHRoZSBTVyBxdWV1ZQotCSAqIG1hdGNoaW5nIHRoZSByZWNlaXZlZCBIVyBxdWV1ZSAqLwotCi0JaWYgKCFsb2NhbC0+aHcuYW1wZHVfcXVldWVzKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogdHJ5IHRvIGdldCBhIFFkaXNjIGZyb20gdGhlIHBvb2wgKi8KLQlmb3IgKGkgPSBsb2NhbC0+aHcucXVldWVzOyBpIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoJmxvY2FsLT5odyk7IGkrKykKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksIGxvY2FsLT5xdWV1ZV9wb29sKSkgewotCQkJaWVlZTgwMjExX3N0b3BfcXVldWUobG9jYWxfdG9faHcobG9jYWwpLCBpKTsKLQkJCXN0YS0+dGlkX3RvX3R4X3FbdGlkXSA9IGk7Ci0KLQkJCS8qIElGIHRoZXJlIGFyZSBhbHJlYWR5IHBlbmRpbmcgcGFja2V0cwotCQkJICogb24gdGhpcyB0aWQgZmlyc3Qgd2UgbmVlZCB0byBkcmFpbiB0aGVtCi0JCQkgKiBvbiB0aGUgcHJldmlvdXMgcXVldWUKLQkJCSAqIHNpbmNlIEhUIGlzIHN0cmljdCBpbiBvcmRlciAqLwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiYWxsb2NhdGVkIGFnZ3JlZ2F0aW9uIHF1ZXVlIgotCQkJCQkiICVkIHRpZCAlZCBhZGRyICVwTSBwb29sPTB4JWxYXG4iLAotCQkJCQlpLCB0aWQsIHN0YS0+c3RhLmFkZHIsCi0JCQkJCWxvY2FsLT5xdWV1ZV9wb29sWzBdKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0KLQlyZXR1cm4gLUVBR0FJTjsKLX0KLQotLyoqCi0gKiB0aGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgWCktPmxvY2sKLSAqLwotdm9pZCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkgICB1OCByZXF1ZXVlKQotewotCWludCBhZ2dfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCi0JLyogcmV0dXJuIHRoZSBxZGlzYyB0byB0aGUgcG9vbCAqLwotCWNsZWFyX2JpdChhZ2dfcXVldWUsIGxvY2FsLT5xdWV1ZV9wb29sKTsKLQlzdGEtPnRpZF90b190eF9xW3RpZF0gPSBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodyk7Ci0KLQlpZiAocmVxdWV1ZSkgewotCQlpZWVlODAyMTFfcmVxdWV1ZShsb2NhbCwgYWdnX3F1ZXVlKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Ci0JCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKLQkJc3RydWN0IFFkaXNjICpxOwotCi0JCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIGFnZ19xdWV1ZSk7Ci0JCXEgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7Ci0JCXJvb3RfbG9jayA9IHFkaXNjX2xvY2socSk7Ci0KLQkJc3Bpbl9sb2NrX2JoKHJvb3RfbG9jayk7Ci0JCXFkaXNjX3Jlc2V0KHEpOwotCQlzcGluX3VubG9ja19iaChyb290X2xvY2spOwotCX0KLX0KLQotdm9pZCBpZWVlODAyMTFfcmVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHF1ZXVlKQotewotCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Q7Ci0Jc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwotCXN0cnVjdCBRZGlzYyAqcWRpc2M7Ci0JdTMyIGxlbjsKLQotCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQotCXFkaXNjID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOwotCWlmICghcWRpc2MgfHwgIXFkaXNjLT5kZXF1ZXVlKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlza2JfcXVldWVfaGVhZF9pbml0KCZsaXN0KTsKLQotCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3RfbG9jayhxZGlzYyk7Ci0Jc3Bpbl9sb2NrKHJvb3RfbG9jayk7Ci0JZm9yIChsZW4gPSBxZGlzYy0+cS5xbGVuOyBsZW4gPiAwOyBsZW4tLSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOwotCi0JCWlmIChza2IpCi0JCQlfX3NrYl9xdWV1ZV90YWlsKCZsaXN0LCBza2IpOwotCX0KLQlzcGluX3VubG9jayhyb290X2xvY2spOwotCi0JZm9yIChsZW4gPSBsaXN0LnFsZW47IGxlbiA+IDA7IGxlbi0tKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZsaXN0KTsKLQkJdTE2IG5ld19xdWV1ZTsKLQotCQlCVUdfT04oIXNrYik7Ci0JCW5ld19xdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUobG9jYWwtPm1kZXYsIHNrYik7Ci0JCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIG5ld19xdWV1ZSk7Ci0KLQkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwgbmV3X3F1ZXVlKTsKLQotCi0JCXFkaXNjID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOwotCQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socWRpc2MpOwotCi0JCXNwaW5fbG9jayhyb290X2xvY2spOwotCQlxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxZGlzYyk7Ci0JCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7Ci0JfQotCi1vdXRfdW5sb2NrOgotCXJjdV9yZWFkX3VubG9ja19iaCgpOwotfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5oIGIvbmV0L21hYzgwMjExL3dtZS5oCmluZGV4IGJjNjJmMjguLjc1MjBkMmUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93bWUuaAorKysgYi9uZXQvbWFjODAyMTEvd21lLmgKQEAgLTIxLDExICsyMSw1IEBACiBleHRlcm4gY29uc3QgaW50IGllZWU4MDJfMWRfdG9fYWNbOF07CiAKIHUxNiBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGllZWU4MDIxMV9odF9hZ2dfcXVldWVfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkKTsKLXZvaWQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCi0JCQkJICAgdTggcmVxdWV1ZSk7Ci12b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpOwogCiAjZW5kaWYgLyogX1dNRV9IICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd3BhLmMgYi9uZXQvbWFjODAyMTEvd3BhLmMKaW5kZXggN2FhNjNjYS4uNGY4YmZlYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dwYS5jCisrKyBiL25ldC9tYWM4MDIxMS93cGEuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE5LDYgKzIwLDcgQEAKICNpbmNsdWRlICJtaWNoYWVsLmgiCiAjaW5jbHVkZSAidGtpcC5oIgogI2luY2x1ZGUgImFlc19jY20uaCIKKyNpbmNsdWRlICJhZXNfY21hYy5oIgogI2luY2x1ZGUgIndwYS5oIgogCiBpZWVlODAyMTFfdHhfcmVzdWx0CkBAIC0xOTQsMTkgKzE5NiwxMyBAQAogaWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKLQlpbnQgaTsKIAogCWllZWU4MDIxMV90eF9zZXRfcHJvdGVjdGVkKHR4KTsKIAotCWlmICh0a2lwX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkKLQkJcmV0dXJuIFRYX0RST1A7Ci0KLQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlpZiAodGtpcF9lbmNyeXB0X3NrYih0eCwgdHgtPmV4dHJhX2ZyYWdbaV0pKQotCQkJCXJldHVybiBUWF9EUk9QOwotCQl9Ci0JfQorCWRvIHsKKwkJaWYgKHRraXBfZW5jcnlwdF9za2IodHgsIHNrYikgPCAwKQorCQkJcmV0dXJuIFRYX0RST1A7CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtMjY2LDcgKzI2Miw3IEBACiAJCQkJaW50IGVuY3J5cHRlZCkKIHsKIAlfX2xlMTYgbWFza19mYzsKLQlpbnQgYTRfaW5jbHVkZWQ7CisJaW50IGE0X2luY2x1ZGVkLCBtZ210OwogCXU4IHFvc190aWQ7CiAJdTggKmJfMCwgKmFhZDsKIAl1MTYgZGF0YV9sZW4sIGxlbl9hOwpAQCAtMjc3LDEyICsyNzMsMTUgQEAKIAlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47CiAKIAkvKgotCSAqIE1hc2sgRkM6IHplcm8gc3VidHlwZSBiNCBiNSBiNgorCSAqIE1hc2sgRkM6IHplcm8gc3VidHlwZSBiNCBiNSBiNiAoaWYgbm90IG1nbXQpCiAJICogUmV0cnksIFB3ck1ndCwgTW9yZURhdGE7IHNldCBQcm90ZWN0ZWQKIAkgKi8KKwltZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKIAltYXNrX2ZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCW1hc2tfZmMgJj0gfmNwdV90b19sZTE2KDB4MDA3MCB8IElFRUU4MDIxMV9GQ1RMX1JFVFJZIHwKKwltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSB8CiAJCQkJSUVFRTgwMjExX0ZDVExfUE0gfCBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CisJaWYgKCFtZ210KQorCQltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNigweDAwNzApOwogCW1hc2tfZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKQEAgLTMwMCw4ICsyOTksMTAgQEAKIAogCS8qIEZpcnN0IGJsb2NrLCBiXzAgKi8KIAliXzBbMF0gPSAweDU5OyAvKiBmbGFnczogQWRhdGE6IDEsIE06IDAxMSwgTDogMDAxICovCi0JLyogTm9uY2U6IFFvUyBQcmlvcml0eSB8IEEyIHwgUE4gKi8KLQliXzBbMV0gPSBxb3NfdGlkOworCS8qIE5vbmNlOiBOb25jZSBGbGFncyB8IEEyIHwgUE4KKwkgKiBOb25jZSBGbGFnczogUHJpb3JpdHkgKGIwLi5iMykgfCBNYW5hZ2VtZW50IChiNCkgfCBSZXNlcnZlZCAoYjUuLmI3KQorCSAqLworCWJfMFsxXSA9IHFvc190aWQgfCAobWdtdCA8PCA0KTsKIAltZW1jcHkoJmJfMFsyXSwgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOwogCW1lbWNweSgmYl8wWzhdLCBwbiwgQ0NNUF9QTl9MRU4pOwogCS8qIGwobSkgKi8KQEAgLTM2MCw5ICszNjEsMTQgQEAKIAlpbnQgaGRybGVuLCBsZW4sIHRhaWw7CiAJdTggKnBvcywgKnBuOwogCWludCBpOworCWJvb2wgc2tpcF9odzsKKworCXNraXBfaHcgPSAodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UKSAmJgorCQlpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgotCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSB7CisJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikgJiYKKwkgICAgIXNraXBfaHcpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAKIAkJICogaGVhZGVyIG9yIE1JQyBmaWVsZHMgKi8KIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKQEAgLTM5Nyw3ICs0MDMsNyBAQAogCiAJY2NtcF9wbjJoZHIocG9zLCBwbiwga2V5LT5jb25mLmtleWlkeCk7CiAKLQlpZiAoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CisJaWYgKChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmICFza2lwX2h3KSB7CiAJCS8qIGh3YWNjZWwgLSB3aXRoIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QIGhlYWRlciAqLwogCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOwogCQlyZXR1cm4gMDsKQEAgLTQxNiwxOSArNDIyLDEzIEBACiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwotCWludCBpOwogCiAJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOwogCi0JaWYgKGNjbXBfZW5jcnlwdF9za2IodHgsIHNrYikgPCAwKQotCQlyZXR1cm4gVFhfRFJPUDsKLQotCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWlmIChjY21wX2VuY3J5cHRfc2tiKHR4LCB0eC0+ZXh0cmFfZnJhZ1tpXSkpCi0JCQkJcmV0dXJuIFRYX0RST1A7Ci0JCX0KLQl9CisJZG8geworCQlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgc2tiKSA8IDApCisJCQlyZXR1cm4gVFhfRFJPUDsKKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CkBAIC00NDYsNyArNDQ2LDggQEAKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAotCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlkYXRhX2xlbiA9IHNrYi0+bGVuIC0gaGRybGVuIC0gQ0NNUF9IRFJfTEVOIC0gQ0NNUF9NSUNfTEVOOwpAQCAtNDg1LDMgKzQ4NiwxMjYgQEAKIAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KKworCitzdGF0aWMgdm9pZCBiaXBfYWFkKHN0cnVjdCBza19idWZmICpza2IsIHU4ICphYWQpCit7CisJLyogQklQIEFBRDogRkMobWFza2VkKSB8fCBBMSB8fCBBMiB8fCBBMyAqLworCisJLyogRkMgdHlwZS9zdWJ0eXBlICovCisJYWFkWzBdID0gc2tiLT5kYXRhWzBdOworCS8qIE1hc2sgRkMgUmV0cnksIFB3ck1ndCwgTW9yZURhdGEgZmxhZ3MgdG8gemVybyAqLworCWFhZFsxXSA9IHNrYi0+ZGF0YVsxXSAmIH4oQklUKDQpIHwgQklUKDUpIHwgQklUKDYpKTsKKwkvKiBBMSB8fCBBMiB8fCBBMyAqLworCW1lbWNweShhYWQgKyAyLCBza2ItPmRhdGEgKyA0LCAzICogRVRIX0FMRU4pOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXBfaXBuX3N3YXAodTggKmQsIGNvbnN0IHU4ICpzKQoreworCSpkKysgPSBzWzVdOworCSpkKysgPSBzWzRdOworCSpkKysgPSBzWzNdOworCSpkKysgPSBzWzJdOworCSpkKysgPSBzWzFdOworCSpkID0gc1swXTsKK30KKworCitpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHR4LT5rZXk7CisJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCXU4ICpwbiwgYWFkWzIwXTsKKwlpbnQgaTsKKworCWlmICh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CisJCS8qIGh3YWNjZWwgKi8KKwkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKFdBUk5fT04oc2tiX3RhaWxyb29tKHNrYikgPCBzaXplb2YoKm1taWUpKSkKKwkJcmV0dXJuIFRYX0RST1A7CisKKwltbWllID0gKHN0cnVjdCBpZWVlODAyMTFfbW1pZSAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCptbWllKSk7CisJbW1pZS0+ZWxlbWVudF9pZCA9IFdMQU5fRUlEX01NSUU7CisJbW1pZS0+bGVuZ3RoID0gc2l6ZW9mKCptbWllKSAtIDI7CisJbW1pZS0+a2V5X2lkID0gY3B1X3RvX2xlMTYoa2V5LT5jb25mLmtleWlkeCk7CisKKwkvKiBQTiA9IFBOICsgMSAqLworCXBuID0ga2V5LT51LmFlc19jbWFjLnR4X3BuOworCisJZm9yIChpID0gc2l6ZW9mKGtleS0+dS5hZXNfY21hYy50eF9wbikgLSAxOyBpID49IDA7IGktLSkgeworCQlwbltpXSsrOworCQlpZiAocG5baV0pCisJCQlicmVhazsKKwl9CisJYmlwX2lwbl9zd2FwKG1taWUtPnNlcXVlbmNlX251bWJlciwgcG4pOworCisJYmlwX2FhZChza2IsIGFhZCk7CisKKwkvKgorCSAqIE1JQyA9IEFFUy0xMjgtQ01BQyhJR1RLLCBBQUQgfHwgTWFuYWdlbWVudCBGcmFtZSBCb2R5IHx8IE1NSUUsIDY0KQorCSAqLworCWllZWU4MDIxMV9hZXNfY21hYyhrZXktPnUuYWVzX2NtYWMudGZtLCBrZXktPnUuYWVzX2NtYWMudHhfY3J5cHRvX2J1ZiwKKwkJCSAgIGFhZCwgc2tiLT5kYXRhICsgMjQsIHNrYi0+bGVuIC0gMjQsIG1taWUtPm1pYyk7CisKKwlyZXR1cm4gVFhfQ09OVElOVUU7Cit9CisKKworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHJ4LT5rZXk7CisJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCXU4IGFhZFsyMF0sIG1pY1s4XSwgaXBuWzZdOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgJiYKKwkgICAgKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKHNrYi0+bGVuIDwgMjQgKyBzaXplb2YoKm1taWUpKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopCisJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCWlmIChtbWllLT5lbGVtZW50X2lkICE9IFdMQU5fRUlEX01NSUUgfHwKKwkgICAgbW1pZS0+bGVuZ3RoICE9IHNpemVvZigqbW1pZSkgLSAyKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsgLyogSW52YWxpZCBNTUlFICovCisKKwliaXBfaXBuX3N3YXAoaXBuLCBtbWllLT5zZXF1ZW5jZV9udW1iZXIpOworCisJaWYgKG1lbWNtcChpcG4sIGtleS0+dS5hZXNfY21hYy5yeF9wbiwgNikgPD0gMCkgeworCQlrZXktPnUuYWVzX2NtYWMucmVwbGF5cysrOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwl9CisKKwlpZiAoIShyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpKSB7CisJCS8qIGhhcmR3YXJlIGRpZG4ndCBkZWNyeXB0L3ZlcmlmeSBNSUMgKi8KKwkJYmlwX2FhZChza2IsIGFhZCk7CisJCWllZWU4MDIxMV9hZXNfY21hYyhrZXktPnUuYWVzX2NtYWMudGZtLAorCQkJCSAgIGtleS0+dS5hZXNfY21hYy5yeF9jcnlwdG9fYnVmLCBhYWQsCisJCQkJICAgc2tiLT5kYXRhICsgMjQsIHNrYi0+bGVuIC0gMjQsIG1pYyk7CisJCWlmIChtZW1jbXAobWljLCBtbWllLT5taWMsIHNpemVvZihtbWllLT5taWMpKSAhPSAwKSB7CisJCQlrZXktPnUuYWVzX2NtYWMuaWN2ZXJyb3JzKys7CisJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwkJfQorCX0KKworCW1lbWNweShrZXktPnUuYWVzX2NtYWMucnhfcG4sIGlwbiwgNik7CisKKwkvKiBSZW1vdmUgTU1JRSAqLworCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBzaXplb2YoKm1taWUpKTsKKworCXJldHVybiBSWF9DT05USU5VRTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuaCBiL25ldC9tYWM4MDIxMS93cGEuaAppbmRleCBkNDJkMjIxLi5iYWJhMDYwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmgKKysrIGIvbmV0L21hYzgwMjExL3dwYS5oCkBAIC0yOCw0ICsyOCw5IEBACiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKIAoraWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOworCiAjZW5kaWYgLyogV1BBX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBjMmJhYzljLi4yYzk2N2U0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC0zNTcsNiArMzU3LDQ1IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9ITAorCXRyaXN0YXRlICciSEwiIGhvcGxpbWl0IHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gSVBfTkZfTUFOR0xFIHx8IElQNl9ORl9NQU5HTEUKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCS0tLWhlbHAtLS0KKwlUaGlzIG9wdGlvbiBhZGRzIHRoZSAiSEwiIChmb3IgSVB2NikgYW5kICJUVEwiIChmb3IgSVB2NCkKKwl0YXJnZXRzLCB3aGljaCBlbmFibGUgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZQorCWhvcGxpbWl0L3RpbWUtdG8tbGl2ZSB2YWx1ZSBvZiB0aGUgSVAgaGVhZGVyLgorCisJV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQgdGhlIGhvcGxpbWl0L1RUTCB2YWx1ZSwgdGhlCisJbW9kdWxlcyBhbHNvIGFsbG93IHRvIGluY3JlbWVudCBhbmQgc2V0IHRoZSBob3BsaW1pdCB2YWx1ZSBvZgorCXRoZSBoZWFkZXIgdG8gYXJiaXRyYXJ5IHZhbHVlcy4gVGhpcyBpcyBFWFRSRU1FTFkgREFOR0VST1VTCisJc2luY2UgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wCisJZm9yZXZlciBvbiB0aGUgbmV0d29yay4KKworY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfTEVECisJdHJpc3RhdGUgJyJMRUQiIHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBMRURfVFJJR0dFUlMKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgTEVEJyB0YXJnZXQsIHdoaWNoIGFsbG93cyB5b3UgdG8gYmxpbmsgTEVEcyBpbgorCSAgcmVzcG9uc2UgdG8gcGFydGljdWxhciBwYWNrZXRzIHBhc3NpbmcgdGhyb3VnaCB5b3VyIG1hY2hpbmUuCisKKwkgIFRoaXMgY2FuIGJlIHVzZWQgdG8gdHVybiBhIHNwYXJlIExFRCBpbnRvIGEgbmV0d29yayBhY3Rpdml0eSBMRUQsCisJICB3aGljaCBvbmx5IGZsYXNoZXMgaW4gcmVzcG9uc2UgdG8gRlRQIHRyYW5zZmVycywgZm9yIGV4YW1wbGUuICBPcgorCSAgeW91IGNvdWxkIGhhdmUgYW4gTEVEIHdoaWNoIGxpZ2h0cyB1cCBmb3IgYSBtaW51dGUgb3IgdHdvIGV2ZXJ5IHRpbWUKKwkgIHNvbWVib2R5IGNvbm5lY3RzIHRvIHlvdXIgbWFjaGluZSB2aWEgU1NILgorCisJICBZb3Ugd2lsbCBuZWVkIHN1cHBvcnQgZm9yIHRoZSAibGVkIiBjbGFzcyB0byBtYWtlIHRoaXMgd29yay4KKworCSAgVG8gY3JlYXRlIGFuIExFRCB0cmlnZ2VyIGZvciBpbmNvbWluZyBTU0ggdHJhZmZpYzoKKwkgICAgaXB0YWJsZXMgLUEgSU5QVVQgLXAgdGNwIC0tZHBvcnQgMjIgLWogTEVEIC0tbGVkLXRyaWdnZXItaWQgc3NoIC0tbGVkLWRlbGF5IDEwMDAKKworCSAgVGhlbiBhdHRhY2ggdGhlIG5ldyB0cmlnZ2VyIHRvIGFuIExFRCBvbiB5b3VyIHN5c3RlbToKKwkgICAgZWNobyBuZXRmaWx0ZXItc3NoID4gL3N5cy9jbGFzcy9sZWRzLzxsZWRuYW1lPi90cmlnZ2VyCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBMRURzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbSwgc2VlCisJICBEb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0CisKIGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX01BUksKIAl0cmlzdGF0ZSAnIk1BUksiIHRhcmdldCBzdXBwb3J0JwogCWRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9bgpAQCAtNDg4LDYgKzUyNywyMiBAQAogCSAgVGhpcyBvcHRpb24gYWRkcyBhICJUQ1BPUFRTVFJJUCIgdGFyZ2V0LCB3aGljaCBhbGxvd3MgeW91IHRvIHN0cmlwCiAJICBUQ1Agb3B0aW9ucyBmcm9tIFRDUCBwYWNrZXRzLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIKKwl0cmlzdGF0ZSAnImNsdXN0ZXIiIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gYnVpbGQgd29yay1sb2FkLXNoYXJpbmcgY2x1c3RlcnMgb2YKKwkgIG5ldHdvcmsgc2VydmVycy9zdGF0ZWZ1bCBmaXJld2FsbHMgd2l0aG91dCBoYXZpbmcgYSBkZWRpY2F0ZWQKKwkgIGxvYWQtYmFsYW5jaW5nIHJvdXRlci9zZXJ2ZXIvc3dpdGNoLiBCYXNpY2FsbHksIHRoaXMgbWF0Y2ggcmV0dXJucworCSAgdHJ1ZSB3aGVuIHRoZSBwYWNrZXQgbXVzdCBiZSBoYW5kbGVkIGJ5IHRoaXMgY2x1c3RlciBub2RlLiBUaHVzLAorCSAgYWxsIG5vZGVzIHNlZSBhbGwgcGFja2V0cyBhbmQgdGhpcyBtYXRjaCBkZWNpZGVzIHdoaWNoIG5vZGUgaGFuZGxlcworCSAgd2hhdCBwYWNrZXRzLiBUaGUgd29yay1sb2FkIHNoYXJpbmcgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIHNvdXJjZQorCSAgYWRkcmVzcyBoYXNoaW5nLgorCisJICBJZiB5b3Ugc2F5IFkgb3IgTSBoZXJlLCB0cnkgYGlwdGFibGVzIC1tIGNsdXN0ZXIgLS1oZWxwYCBmb3IKKwkgIG1vcmUgaW5mb3JtYXRpb24uCisKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVAogCXRyaXN0YXRlICAnImNvbW1lbnQiIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKQEAgLTYwNSw2ICs2NjAsMTQgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSEwKKwl0cmlzdGF0ZSAnImhsIiBob3BsaW1pdC9UVEwgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCS0tLWhlbHAtLS0KKwlITCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcGxpbWl0CisJaW4gdGhlIElQdjYgaGVhZGVyLCBvciB0aGUgdGltZS10by1saXZlIGZpZWxkIGluIHRoZSBJUHY0CisJaGVhZGVyIG9mIHRoZSBwYWNrZXQuCisKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRQogCXRyaXN0YXRlICciaXByYW5nZSIgYWRkcmVzcyByYW5nZSBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCBkYTNkOTA5Li42MjgyMDYwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDggQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLKSArPSB4dF9DT05OTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSykgKz0geHRfQ09OTlNFQ01BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCkgKz0geHRfRFNDUC5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITCkgKz0geHRfSEwubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEKSArPSB4dF9MRUQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSykgKz0geHRfTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRykgKz0geHRfTkZMT0cubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSkgKz0geHRfTkZRVUVVRS5vCkBAIC01Nyw2ICs1OSw3IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgKz0geHRfVFJBQ0UubwogCiAjIG1hdGNoZXMKK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUikgKz0geHRfY2x1c3Rlci5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQpICs9IHh0X2NvbW1lbnQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVMpICs9IHh0X2Nvbm5ieXRlcy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCkgKz0geHRfY29ubmxpbWl0Lm8KQEAgLTY3LDYgKzcwLDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQKSArPSB4dF9lc3Aubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQpICs9IHh0X2hhc2hsaW1pdC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUikgKz0geHRfaGVscGVyLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwpICs9IHh0X2hsLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSkgKz0geHRfaXByYW5nZS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCkgKz0geHRfbGVuZ3RoLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQpICs9IHh0X2xpbWl0Lm8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggYTkwYWM4My4uNWJiMzQ3MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKQEAgLTE3NCw3ICsxNzQsNiBAQAogCQkJICAgICBvdXRkZXYsICZlbGVtLCBva2ZuLCBob29rX3RocmVzaCk7CiAJaWYgKHZlcmRpY3QgPT0gTkZfQUNDRVBUIHx8IHZlcmRpY3QgPT0gTkZfU1RPUCkgewogCQlyZXQgPSAxOwotCQlnb3RvIHVubG9jazsKIAl9IGVsc2UgaWYgKHZlcmRpY3QgPT0gTkZfRFJPUCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0ID0gLUVQRVJNOwpAQCAtMTgzLDcgKzE4Miw2IEBACiAJCQkgICAgICB2ZXJkaWN0ID4+IE5GX1ZFUkRJQ1RfQklUUykpCiAJCQlnb3RvIG5leHRfaG9vazsKIAl9Ci11bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDZiZTVkNGUuLjVjNDgzNzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtMTQ5LDggKzE0OSw4IEBACiAvKiBtdWx0aWNhc3QgYWRkciAqLwogc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBtY2FzdF9hZGRyID0gewogCS5zaW5fZmFtaWx5CQk9IEFGX0lORVQsCi0JLnNpbl9wb3J0CQk9IF9fY29uc3RhbnRfaHRvbnMoSVBfVlNfU1lOQ19QT1JUKSwKLQkuc2luX2FkZHIuc19hZGRyCT0gX19jb25zdGFudF9odG9ubChJUF9WU19TWU5DX0dST1VQKSwKKwkuc2luX3BvcnQJCT0gY3B1X3RvX2JlMTYoSVBfVlNfU1lOQ19QT1JUKSwKKwkuc2luX2FkZHIuc19hZGRyCT0gY3B1X3RvX2JlMzIoSVBfVlNfU1lOQ19HUk9VUCksCiB9OwogCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKaW5kZXggNGY4ZmNmNC4uMDdkOWQ4OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkuaGVscAkJCT0gYW1hbmRhX2hlbHAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDEwMDgwKSwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoMTAwODApLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZhbWFuZGFfZXhwX3BvbGljeSwKIAl9LApAQCAtMTg2LDcgKzE4Niw3IEBACiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS5oZWxwCQkJPSBhbWFuZGFfaGVscCwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAotCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDEwMDgwKSwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoMTAwODApLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZhbWFuZGFfZXhwX3BvbGljeSwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDkwY2U5ZGQuLjgwMjBkYjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3RfbnVsbHMuaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgpAQCAtNTQsNyArNTUsNyBAQAogdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTsKIAotaW50IG5mX2Nvbm50cmFja19tYXggX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGludCBuZl9jb25udHJhY2tfbWF4IF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbWF4KTsKIAogc3RydWN0IG5mX2Nvbm4gbmZfY29ubnRyYWNrX3VudHJhY2tlZCBfX3JlYWRfbW9zdGx5OwpAQCAtMTYzLDggKzE2NCw4IEBACiBjbGVhbl9mcm9tX2xpc3RzKHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAlwcl9kZWJ1ZygiY2xlYW5fZnJvbV9saXN0cyglcClcbiIsIGN0KTsKLQlobGlzdF9kZWxfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5vZGUpOwotCWhsaXN0X2RlbF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS5obm9kZSk7CisJaGxpc3RfbnVsbHNfZGVsX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhubm9kZSk7CisJaGxpc3RfbnVsbHNfZGVsX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLmhubm9kZSk7CiAKIAkvKiBEZXN0cm95IGFsbCBwZW5kaW5nIGV4cGVjdGF0aW9ucyAqLwogCW5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoY3QpOwpAQCAtMjA0LDggKzIwNSw4IEBACiAKIAkvKiBXZSBvdmVybG9hZCBmaXJzdCB0dXBsZSB0byBsaW5rIGludG8gdW5jb25maXJtZWQgbGlzdC4gKi8KIAlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHsKLQkJQlVHX09OKGhsaXN0X3VuaGFzaGVkKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5vZGUpKTsKLQkJaGxpc3RfZGVsKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5vZGUpOworCQlCVUdfT04oaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm5vZGUpKTsKKwkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhubm9kZSk7CiAJfQogCiAJTkZfQ1RfU1RBVF9JTkMobmV0LCBkZWxldGUpOwpAQCAtMjQyLDE4ICsyNDMsMjYgQEAKIAluZl9jdF9wdXQoY3QpOwogfQogCisvKgorICogV2FybmluZyA6CisgKiAtIENhbGxlciBtdXN0IHRha2UgYSByZWZlcmVuY2Ugb24gcmV0dXJuZWQgb2JqZWN0CisgKiAgIGFuZCByZWNoZWNrIG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpCisgKiBPUgorICogLSBDYWxsZXIgbXVzdCBsb2NrIG5mX2Nvbm50cmFja19sb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqLwogc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICoKIF9fbmZfY29ubnRyYWNrX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayh0dXBsZSk7CiAKIAkvKiBEaXNhYmxlIEJIcyB0aGUgZW50aXJlIHRpbWUgc2luY2Ugd2Ugbm9ybWFsbHkgbmVlZCB0byBkaXNhYmxlIHRoZW0KIAkgKiBhdCBsZWFzdCBvbmNlIGZvciB0aGUgc3RhdHMgYW55d2F5LgogCSAqLwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5vZGUpIHsKK2JlZ2luOgorCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm5vZGUpIHsKIAkJaWYgKG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CiAJCQlORl9DVF9TVEFUX0lOQyhuZXQsIGZvdW5kKTsKIAkJCWxvY2FsX2JoX2VuYWJsZSgpOwpAQCAtMjYxLDYgKzI3MCwxMyBAQAogCQl9CiAJCU5GX0NUX1NUQVRfSU5DKG5ldCwgc2VhcmNoZWQpOwogCX0KKwkvKgorCSAqIGlmIHRoZSBudWxscyB2YWx1ZSB3ZSBnb3QgYXQgdGhlIGVuZCBvZiB0aGlzIGxvb2t1cCBpcworCSAqIG5vdCB0aGUgZXhwZWN0ZWQgb25lLCB3ZSBtdXN0IHJlc3RhcnQgbG9va3VwLgorCSAqIFdlIHByb2JhYmx5IG1ldCBhbiBpdGVtIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgY2hhaW4uCisJICovCisJaWYgKGdldF9udWxsc192YWx1ZShuKSAhPSBoYXNoKQorCQlnb3RvIGJlZ2luOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0yNzUsMTEgKzI5MSwxOCBAQAogCXN0cnVjdCBuZl9jb25uICpjdDsKIAogCXJjdV9yZWFkX2xvY2soKTsKK2JlZ2luOgogCWggPSBfX25mX2Nvbm50cmFja19maW5kKG5ldCwgdHVwbGUpOwogCWlmIChoKSB7CiAJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKSkKIAkJCWggPSBOVUxMOworCQllbHNlIHsKKwkJCWlmICh1bmxpa2VseSghbmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkpKSB7CisJCQkJbmZfY3RfcHV0KGN0KTsKKwkJCQlnb3RvIGJlZ2luOworCQkJfQorCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC0yOTMsOSArMzE2LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOwogCi0JaGxpc3RfYWRkX2hlYWRfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5vZGUsCisJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5ub2RlLAogCQkJICAgJm5ldC0+Y3QuaGFzaFtoYXNoXSk7Ci0JaGxpc3RfYWRkX2hlYWRfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0uaG5vZGUsCisJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0uaG5ub2RlLAogCQkJICAgJm5ldC0+Y3QuaGFzaFtyZXBsX2hhc2hdKTsKIH0KIApAQCAtMzE4LDcgKzM0MSw3IEBACiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZXQgKm5ldDsKIApAQCAtMzUwLDE3ICszNzMsMTcgQEAKIAkvKiBTZWUgaWYgdGhlcmUncyBvbmUgaW4gdGhlIGxpc3QgYWxyZWFkeSwgaW5jbHVkaW5nIHJldmVyc2U6CiAJICAgTkFUIGNvdWxkIGhhdmUgZ3JhYmJlZCBpdCB3aXRob3V0IHJlYWxpemluZywgc2luY2Ugd2UncmUKIAkgICBub3QgaW4gdGhlIGhhc2guICBJZiB0aGVyZSBpcywgd2UgbG9zdCByYWNlLiAqLwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sIGhub2RlKQorCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sIGhubm9kZSkKIAkJaWYgKG5mX2N0X3R1cGxlX2VxdWFsKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCiAJCQkJICAgICAgJmgtPnR1cGxlKSkKIAkJCWdvdG8gb3V0OwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbcmVwbF9oYXNoXSwgaG5vZGUpCisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtyZXBsX2hhc2hdLCBobm5vZGUpCiAJCWlmIChuZl9jdF90dXBsZV9lcXVhbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAogCQkJCSAgICAgICZoLT50dXBsZSkpCiAJCQlnb3RvIG91dDsKIAogCS8qIFJlbW92ZSBmcm9tIHVuY29uZmlybWVkIGxpc3QgKi8KLQlobGlzdF9kZWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm9kZSk7CisJaGxpc3RfbnVsbHNfZGVsX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhubm9kZSk7CiAKIAlfX25mX2Nvbm50cmFja19oYXNoX2luc2VydChjdCwgaGFzaCwgcmVwbF9oYXNoKTsKIAkvKiBUaW1lciByZWxhdGl2ZSB0byBjb25maXJtYXRpb24gdGltZSwgbm90IG9yaWdpbmFsCkBAIC0zOTksMTQgKzQyMiwxNCBAQAogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChpZ25vcmVkX2Nvbm50cmFjayk7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sodHVwbGUpOwogCiAJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGVtIGF0CiAJICogbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KIAkgKi8KIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sIGhub2RlKSB7CisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sIGhubm9kZSkgewogCQlpZiAobmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKSAhPSBpZ25vcmVkX2Nvbm50cmFjayAmJgogCQkgICAgbmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkpIHsKIAkJCU5GX0NUX1NUQVRfSU5DKG5ldCwgZm91bmQpOwpAQCAtNDMwLDE0ICs0NTMsMTQgQEAKIAkvKiBVc2Ugb2xkZXN0IGVudHJ5LCB3aGljaCBpcyByb3VnaGx5IExSVSAqLwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBOVUxMLCAqdG1wOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCXVuc2lnbmVkIGludCBpLCBjbnQgPSAwOwogCWludCBkcm9wcGVkID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sCi0JCQkJCSBobm9kZSkgeworCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwKKwkJCQkJIGhubm9kZSkgewogCQkJdG1wID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJCWlmICghdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmdG1wLT5zdGF0dXMpKQogCQkJCWN0ID0gdG1wOwpAQCAtNDcyLDcgKzQ5NSw4IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCiAJaWYgKHVubGlrZWx5KCFuZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY29ubnRyYWNrX2hhc2hfcm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY29ubnRyYWNrX2hhc2hfcm5kLAorCQkJCXNpemVvZihuZl9jb25udHJhY2tfaGFzaF9ybmQpKTsKIAkJbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQgPSAxOwogCX0KIApAQCAtNTA3LDI2ICs1MzEsMTkgQEAKICNpZmRlZiBDT05GSUdfTkVUX05TCiAJY3QtPmN0X25ldCA9IG5ldDsKICNlbmRpZgotCUlOSVRfUkNVX0hFQUQoJmN0LT5yY3UpOwogCiAJcmV0dXJuIGN0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2FsbG9jKTsKIAotc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5mX2Nvbm4sIHJjdSk7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKLQotCW5mX2N0X2V4dF9mcmVlKGN0KTsKLQlrbWVtX2NhY2hlX2ZyZWUobmZfY29ubnRyYWNrX2NhY2hlcCwgY3QpOwotCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwotfQotCiB2b2lkIG5mX2Nvbm50cmFja19mcmVlKHN0cnVjdCBuZl9jb25uICpjdCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCiAJbmZfY3RfZXh0X2Rlc3Ryb3koY3QpOwotCWNhbGxfcmN1KCZjdC0+cmN1LCBuZl9jb25udHJhY2tfZnJlZV9yY3UpOworCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOworCW5mX2N0X2V4dF9mcmVlKGN0KTsKKwlrbWVtX2NhY2hlX2ZyZWUobmZfY29ubnRyYWNrX2NhY2hlcCwgY3QpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZyZWUpOwogCkBAIC01OTIsNyArNjA5LDcgQEAKIAl9CiAKIAkvKiBPdmVybG9hZCB0dXBsZSBsaW5rZWQgbGlzdCB0byBwdXQgdXMgaW4gdW5jb25maXJtZWQgbGlzdC4gKi8KLQlobGlzdF9hZGRfaGVhZCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhub2RlLAorCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhubm9kZSwKIAkJICAgICAgICZuZXQtPmN0LnVuY29uZmlybWVkKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CkBAIC03MjYsMTMgKzc0MywxNSBAQAogCU5GX0NUX0FTU0VSVChza2ItPm5mY3QpOwogCiAJcmV0ID0gbDRwcm90by0+cGFja2V0KGN0LCBza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0pOwotCWlmIChyZXQgPCAwKSB7CisJaWYgKHJldCA8PSAwKSB7CiAJCS8qIEludmFsaWQ6IGludmVyc2Ugb2YgdGhlIHJldHVybiBjb2RlIHRlbGxzCiAJCSAqIHRoZSBuZXRmaWx0ZXIgY29yZSB3aGF0IHRvIGRvICovCiAJCXByX2RlYnVnKCJuZl9jb25udHJhY2tfaW46IENhbid0IHRyYWNrIHdpdGggcHJvdG8gbW9kdWxlXG4iKTsKIAkJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOwogCQlza2ItPm5mY3QgPSBOVUxMOwogCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBpbnZhbGlkKTsKKwkJaWYgKHJldCA9PSAtTkZfRFJPUCkKKwkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGRyb3ApOwogCQlyZXR1cm4gLXJldDsKIAl9CiAKQEAgLTkwMiw2ICs5MjEsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlKTsKKworaW50IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3BvbGljeV9sZW4obmZfY3RfcG9ydF9ubGFfcG9saWN5LCBDVEFfUFJPVE9fTUFYICsgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplKTsKICNlbmRpZgogCiAvKiBVc2VkIGJ5IGlwdF9SRUpFQ1QgYW5kIGlwNnRfUkVKRUNULiAqLwpAQCAtOTMwLDE3ICs5NTUsMTcgQEAKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCiAJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJZm9yICg7ICpidWNrZXQgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7ICgqYnVja2V0KSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbKmJ1Y2tldF0sIGhub2RlKSB7CisJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbKmJ1Y2tldF0sIGhubm9kZSkgewogCQkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQkJaWYgKGl0ZXIoY3QsIGRhdGEpKQogCQkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QudW5jb25maXJtZWQsIGhub2RlKSB7CisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QudW5jb25maXJtZWQsIGhubm9kZSkgewogCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCWlmIChpdGVyKGN0LCBkYXRhKSkKIAkJCXNldF9iaXQoSVBTX0RZSU5HX0JJVCwgJmN0LT5zdGF0dXMpOwpAQCAtOTg4LDcgKzEwMTMsNyBAQAogCXJldHVybiAxOwogfQogCi12b2lkIG5mX2N0X2ZyZWVfaGFzaHRhYmxlKHN0cnVjdCBobGlzdF9oZWFkICpoYXNoLCBpbnQgdm1hbGxvY2VkLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3ZvaWQgbmZfY3RfZnJlZV9oYXNodGFibGUodm9pZCAqaGFzaCwgaW50IHZtYWxsb2NlZCwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJaWYgKHZtYWxsb2NlZCkKIAkJdmZyZWUoaGFzaCk7CkBAIC0xMDU2LDI2ICsxMDgxLDI4IEBACiAJfQogfQogCi1zdHJ1Y3QgaGxpc3RfaGVhZCAqbmZfY3RfYWxsb2NfaGFzaHRhYmxlKHVuc2lnbmVkIGludCAqc2l6ZXAsIGludCAqdm1hbGxvY2VkKQordm9pZCAqbmZfY3RfYWxsb2NfaGFzaHRhYmxlKHVuc2lnbmVkIGludCAqc2l6ZXAsIGludCAqdm1hbGxvY2VkLCBpbnQgbnVsbHMpCiB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhhc2g7Ci0JdW5zaWduZWQgaW50IHNpemUsIGk7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhhc2g7CisJdW5zaWduZWQgaW50IG5yX3Nsb3RzLCBpOworCXNpemVfdCBzejsKIAogCSp2bWFsbG9jZWQgPSAwOwogCi0Jc2l6ZSA9ICpzaXplcCA9IHJvdW5kdXAoKnNpemVwLCBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKLQloYXNoID0gKHZvaWQqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4sCi0JCQkJICAgICAgIGdldF9vcmRlcihzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpCi0JCQkJCQkgKiBzaXplKSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCkgIT0gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7CisJbnJfc2xvdHMgPSAqc2l6ZXAgPSByb3VuZHVwKCpzaXplcCwgUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9udWxsc19oZWFkKSk7CisJc3ogPSBucl9zbG90cyAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCk7CisJaGFzaCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTywKKwkJCQkJZ2V0X29yZGVyKHN6KSk7CiAJaWYgKCFoYXNoKSB7CiAJCSp2bWFsbG9jZWQgPSAxOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJuZl9jb25udHJhY2s6IGZhbGxpbmcgYmFjayB0byB2bWFsbG9jLlxuIik7Ci0JCWhhc2ggPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgKiBzaXplKTsKKwkJaGFzaCA9IF9fdm1hbGxvYyhzeiwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKIAl9CiAKLQlpZiAoaGFzaCkKLQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKLQkJCUlOSVRfSExJU1RfSEVBRCgmaGFzaFtpXSk7CisJaWYgKGhhc2ggJiYgbnVsbHMpCisJCWZvciAoaSA9IDA7IGkgPCBucl9zbG90czsgaSsrKQorCQkJSU5JVF9ITElTVF9OVUxMU19IRUFEKCZoYXNoW2ldLCBpKTsKIAogCXJldHVybiBoYXNoOwogfQpAQCAtMTA4Niw3ICsxMTEzLDcgQEAKIAlpbnQgaSwgYnVja2V0LCB2bWFsbG9jZWQsIG9sZF92bWFsbG9jZWQ7CiAJdW5zaWduZWQgaW50IGhhc2hzaXplLCBvbGRfc2l6ZTsKIAlpbnQgcm5kOwotCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoLCAqb2xkX2hhc2g7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhhc2gsICpvbGRfaGFzaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAKIAkvKiBPbiBib290LCB3ZSBjYW4gc2V0IHRoaXMgd2l0aG91dCBhbnkgZmFuY3kgbG9ja2luZy4gKi8KQEAgLTEwOTcsMTMgKzExMjQsMTMgQEAKIAlpZiAoIWhhc2hzaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWhhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJmhhc2hzaXplLCAmdm1hbGxvY2VkKTsKKwloYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZoYXNoc2l6ZSwgJnZtYWxsb2NlZCwgMSk7CiAJaWYgKCFoYXNoKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIFdlIGhhdmUgdG8gcmVoYWhzIGZvciB0aGUgbmV3IHRhYmxlIGFueXdheSwgc28gd2UgYWxzbyBjYW4KIAkgKiB1c2UgYSBuZXdyYW5kb20gc2VlZCAqLwotCWdldF9yYW5kb21fYnl0ZXMoJnJuZCwgNCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCBzaXplb2Yocm5kKSk7CiAKIAkvKiBMb29rdXBzIGluIHRoZSBvbGQgaGFzaCBtaWdodCBoYXBwZW4gaW4gcGFyYWxsZWwsIHdoaWNoIG1lYW5zIHdlCiAJICogbWlnaHQgZ2V0IGZhbHNlIG5lZ2F0aXZlcyBkdXJpbmcgY29ubmVjdGlvbiBsb29rdXAuIE5ldyBjb25uZWN0aW9ucwpAQCAtMTExMiwxMiArMTEzOSwxMiBAQAogCSAqLwogCXNwaW5fbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgewotCQl3aGlsZSAoIWhsaXN0X2VtcHR5KCZpbml0X25ldC5jdC5oYXNoW2ldKSkgewotCQkJaCA9IGhsaXN0X2VudHJ5KGluaXRfbmV0LmN0Lmhhc2hbaV0uZmlyc3QsCi0JCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCwgaG5vZGUpOwotCQkJaGxpc3RfZGVsX3JjdSgmaC0+aG5vZGUpOworCQl3aGlsZSAoIWhsaXN0X251bGxzX2VtcHR5KCZpbml0X25ldC5jdC5oYXNoW2ldKSkgeworCQkJaCA9IGhsaXN0X251bGxzX2VudHJ5KGluaXRfbmV0LmN0Lmhhc2hbaV0uZmlyc3QsCisJCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCwgaG5ub2RlKTsKKwkJCWhsaXN0X251bGxzX2RlbF9yY3UoJmgtPmhubm9kZSk7CiAJCQlidWNrZXQgPSBfX2hhc2hfY29ubnRyYWNrKCZoLT50dXBsZSwgaGFzaHNpemUsIHJuZCk7Ci0JCQlobGlzdF9hZGRfaGVhZCgmaC0+aG5vZGUsICZoYXNoW2J1Y2tldF0pOworCQkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZoLT5obm5vZGUsICZoYXNoW2J1Y2tldF0pOwogCQl9CiAJfQogCW9sZF9zaXplID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwpAQCAtMTE2OCw3ICsxMTk1LDcgQEAKIAogCW5mX2Nvbm50cmFja19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibmZfY29ubnRyYWNrIiwKIAkJCQkJCXNpemVvZihzdHJ1Y3QgbmZfY29ubiksCi0JCQkJCQkwLCAwLCBOVUxMKTsKKwkJCQkJCTAsIFNMQUJfREVTVFJPWV9CWV9SQ1UsIE5VTEwpOwogCWlmICghbmZfY29ubnRyYWNrX2NhY2hlcCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgbmZfY29ubiBzbGFiIGNhY2hlXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTExOTgsNyArMTIyNSw3IEBACiAJaW50IHJldDsKIAogCWF0b21pY19zZXQoJm5ldC0+Y3QuY291bnQsIDApOwotCUlOSVRfSExJU1RfSEVBRCgmbmV0LT5jdC51bmNvbmZpcm1lZCk7CisJSU5JVF9ITElTVF9OVUxMU19IRUFEKCZuZXQtPmN0LnVuY29uZmlybWVkLCAwKTsKIAluZXQtPmN0LnN0YXQgPSBhbGxvY19wZXJjcHUoc3RydWN0IGlwX2Nvbm50cmFja19zdGF0KTsKIAlpZiAoIW5ldC0+Y3Quc3RhdCkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTIwOCw3ICsxMjM1LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZWNhY2hlOwogCW5ldC0+Y3QuaGFzaCA9IG5mX2N0X2FsbG9jX2hhc2h0YWJsZSgmbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAotCQkJCQkJICAmbmV0LT5jdC5oYXNoX3ZtYWxsb2MpOworCQkJCQkgICAgICZuZXQtPmN0Lmhhc2hfdm1hbGxvYywgMSk7CiAJaWYgKCFuZXQtPmN0Lmhhc2gpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIG5mX2Nvbm50cmFja19oYXNoXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKaW5kZXggM2E4YTM0YS4uMzk0MGY5OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTcyLDcgKzcyLDggQEAKIAl1bnNpZ25lZCBpbnQgaGFzaDsKIAogCWlmICh1bmxpa2VseSghbmZfY3RfZXhwZWN0X2hhc2hfcm5kX2luaXR0ZWQpKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJm5mX2N0X2V4cGVjdF9oYXNoX3JuZCwgNCk7CisJCWdldF9yYW5kb21fYnl0ZXMoJm5mX2N0X2V4cGVjdF9oYXNoX3JuZCwKKwkJCQkgc2l6ZW9mKG5mX2N0X2V4cGVjdF9oYXNoX3JuZCkpOwogCQluZl9jdF9leHBlY3RfaGFzaF9ybmRfaW5pdHRlZCA9IDE7CiAJfQogCkBAIC02MDMsNyArNjA0LDcgQEAKIAogCW5ldC0+Y3QuZXhwZWN0X2NvdW50ID0gMDsKIAluZXQtPmN0LmV4cGVjdF9oYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9jdF9leHBlY3RfaHNpemUsCi0JCQkJCQkgICZuZXQtPmN0LmV4cGVjdF92bWFsbG9jKTsKKwkJCQkJCSAgJm5ldC0+Y3QuZXhwZWN0X3ZtYWxsb2MsIDApOwogCWlmIChuZXQtPmN0LmV4cGVjdF9oYXNoID09IE5VTEwpCiAJCWdvdG8gZXJyMTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCA2ODdiZDYzLi42NjM2OTQ5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIAkJLm5hbWUJCQk9ICJRLjkzMSIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCisJCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFE5MzFfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkJLmhlbHAJCQk9IHE5MzFfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnE5MzFfZXhwX3BvbGljeSwKQEAgLTExNzYsNyArMTE3Niw3IEBACiAJCS5uYW1lCQkJPSAiUS45MzEiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCi0JCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gY3B1X3RvX2JlMTYoUTkzMV9QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVENQLAogCQkuaGVscAkJCT0gcTkzMV9oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcTkzMV9leHBfcG9saWN5LApAQCAtMTc0MSw3ICsxNzQxLDcgQEAKIAkJLm5hbWUJCQk9ICJSQVMiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFJBU19QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuaGVscAkJCT0gcmFzX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZyYXNfZXhwX3BvbGljeSwKQEAgLTE3NTAsNyArMTc1MCw3IEBACiAJCS5uYW1lCQkJPSAiUkFTIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAotCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFJBU19QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoUkFTX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJCS5oZWxwCQkJPSByYXNfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnJhc19leHBfcG9saWN5LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwppbmRleCBhNTFiZGFjLi4zMGI4ZTkwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtMTQyLDYgKzE0Miw3IEBACiAKIAlCVUdfT04obWUtPmV4cGVjdF9wb2xpY3kgPT0gTlVMTCk7CiAJQlVHX09OKG1lLT5leHBlY3RfY2xhc3NfbWF4ID49IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7CisJQlVHX09OKHN0cmxlbihtZS0+bmFtZSkgPiBORl9DVF9IRUxQRVJfTkFNRV9MRU4gLSAxKTsKIAogCW11dGV4X2xvY2soJm5mX2N0X2hlbHBlcl9tdXRleCk7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZtZS0+aG5vZGUsICZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7CkBAIC0xNTgsNiArMTU5LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CisJY29uc3Qgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5uOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogR2V0IHJpZCBvZiBleHBlY3RhdGlvbnMgKi8KQEAgLTE3NCwxMCArMTc2LDEwIEBACiAJfQogCiAJLyogR2V0IHJpZCBvZiBleHBlY3RlZHMsIHNldCBoZWxwZXJzIHRvIE5VTEwuICovCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QudW5jb25maXJtZWQsIGhub2RlKQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG5uLCAmbmV0LT5jdC51bmNvbmZpcm1lZCwgaG5ub2RlKQogCQl1bmhlbHAoaCwgbWUpOwogCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoW2ldLCBobm9kZSkKKwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbm4sICZuZXQtPmN0Lmhhc2hbaV0sIGhubm9kZSkKIAkJCXVuaGVscChoLCBtZSk7CiAJfQogfQpAQCAtMjE3LDcgKzIxOSw3IEBACiAKIAluZl9jdF9oZWxwZXJfaHNpemUgPSAxOyAvKiBnZXRzIHJvdW5kZWQgdXAgdG8gdXNlIG9uZSBwYWdlICovCiAJbmZfY3RfaGVscGVyX2hhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX2N0X2hlbHBlcl9oc2l6ZSwKLQkJCQkJCSAgJm5mX2N0X2hlbHBlcl92bWFsbG9jKTsKKwkJCQkJCSAgJm5mX2N0X2hlbHBlcl92bWFsbG9jLCAwKTsKIAlpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCmluZGV4IDVhZjQyNzMuLjhhMzg3NWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGhlbHBlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQkJPSAibmV0Ymlvcy1ucyIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhOTUJEX1BPUlQpLAorCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KE5NQkRfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJLmhlbHAJCQk9IGhlbHAsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggY2I3OGFhMC4uYzY0MzljNzcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTQwNCw2ICs0MDUsNzggQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCisvKgorICogVGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGEgY3RuZXRsaW5rIGV2ZW50IGlzCisgKgorICogIENUQV9UVVBMRV9PUklHCisgKiAgICA8bDMvbDQtcHJvdG8tYXR0cmlidXRlcz4KKyAqICBDVEFfVFVQTEVfUkVQTFkKKyAqICAgIDxsMy9sNC1wcm90by1hdHRyaWJ1dGVzPgorICogIENUQV9JRAorICogIC4uLgorICogIENUQV9QUk9UT0lORk8KKyAqICAgIDxsNC1wcm90by1hdHRyaWJ1dGVzPgorICogIENUQV9UVVBMRV9NQVNURVIKKyAqICAgIDxsMy9sNC1wcm90by1hdHRyaWJ1dGVzPgorICoKKyAqIFRoZXJlZm9yZSB0aGUgZm9ybXVsYXIgaXMKKyAqCisgKiAgIHNpemUgPSBzaXplb2YoaGVhZGVycykgKyBzaXplb2YoZ2VuZXJpY19ubGFzKSArIDMgKiBzaXplb2YodHVwbGVfbmxhcykKKyAqCQkrIHNpemVvZihwcm90b2luZm9fbmxhcykKKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2N0bmV0bGlua19hbGxvY19za2IoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CisJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOworCWludCBsZW47CisKKyNkZWZpbmUgTkxBX1RZUEVfU0laRSh0eXBlKQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHR5cGUpKQorCisJLyogcHJvdG8gaW5kZXBlbmRhbnQgcGFydCAqLworCWxlbiA9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQorCQkrIDMgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX1RVUExFX09SSUd8UkVQTHxNQVNURVIgKi8KKwkJKyAzICogbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9UVVBMRV9JUCAqLworCQkrIDMgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX1RVUExFX1BST1RPICovCisJCSsgMyAqIE5MQV9UWVBFX1NJWkUodV9pbnQ4X3QpCS8qIENUQV9QUk9UT19OVU0gKi8KKwkJKyBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX0lEICovCisJCSsgTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9TVEFUVVMgKi8KKyNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAorCQkrIDIgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX0NPVU5URVJTX09SSUd8UkVQTCAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVpbnQ2NF90KQkvKiBDVEFfQ09VTlRFUlNfUEFDS0VUUyAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVpbnQ2NF90KQkvKiBDVEFfQ09VTlRFUlNfQllURVMgKi8KKyNlbmRpZgorCQkrIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfVElNRU9VVCAqLworCQkrIG5sYV90b3RhbF9zaXplKDApCQkvKiBDVEFfUFJPVE9JTkZPICovCisJCSsgbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9IRUxQICovCisJCSsgbmxhX3RvdGFsX3NpemUoTkZfQ1RfSEVMUEVSX05BTUVfTEVOKQkvKiBDVEFfSEVMUF9OQU1FICovCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCisJCSsgTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9TRUNNQVJLICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorCQkrIDIgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX05BVF9TRVFfQURKX09SSUd8UkVQTCAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX05BVF9TRVFfQ09SUkVDVElPTl9QT1MgKi8KKwkJKyAyICogTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9OQVRfU0VRX0NPUlJFQ1RJT05fQkVGT1JFICovCisJCSsgMiAqIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfTkFUX1NFUV9DT1JSRUNUSU9OX0FGVEVSICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKKwkJKyBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX01BUksgKi8KKyNlbmRpZgorCQk7CisKKyN1bmRlZiBOTEFfVFlQRV9TSVpFCisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKHR1cGxlLT5zcmMubDNudW0pOworCWxlbiArPSBsM3Byb3RvLT5ubGFfc2l6ZTsKKworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKKwlsZW4gKz0gbDRwcm90by0+bmxhX3NpemU7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gYWxsb2Nfc2tiKGxlbiwgZ2ZwKTsKK30KKwogc3RhdGljIGludCBjdG5ldGxpbmtfY29ubnRyYWNrX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzLCB2b2lkICpwdHIpCiB7CkBAIC00MzcsNyArNTEwLDcgQEAKIAlpZiAoIWl0ZW0tPnJlcG9ydCAmJiAhbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoZ3JvdXApKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQlza2IgPSBhbGxvY19za2IoTkxNU0dfR09PRFNJWkUsIEdGUF9BVE9NSUMpOworCXNrYiA9IGN0bmV0bGlua19hbGxvY19za2IodHVwbGUoY3QsIElQX0NUX0RJUl9PUklHSU5BTCksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKQEAgLTUxOCw2ICs1OTEsNyBAQAogbmxhX3B1dF9mYWlsdXJlOgogCXJjdV9yZWFkX3VubG9jaygpOwogbmxtc2dfZmFpbHVyZToKKwluZm5ldGxpbmtfc2V0X2VycigwLCBncm91cCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTUzNSw3ICs2MDksNyBAQAogewogCXN0cnVjdCBuZl9jb25uICpjdCwgKmxhc3Q7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRBKGNiLT5ubGgpOwogCXVfaW50OF90IGwzcHJvdG8gPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwogCkBAIC01NDMsMjcgKzYxNywyNyBAQAogCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKIAlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmaW5pdF9uZXQuY3QuaGFzaFtjYi0+YXJnc1swXV0sCi0JCQkJCSBobm9kZSkgeworCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJmluaXRfbmV0LmN0Lmhhc2hbY2ItPmFyZ3NbMF1dLAorCQkJCQkgaG5ub2RlKSB7CiAJCQlpZiAoTkZfQ1RfRElSRUNUSU9OKGgpICE9IElQX0NUX0RJUl9PUklHSU5BTCkKIAkJCQljb250aW51ZTsKIAkJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKKwkJCWlmICghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkKKwkJCQljb250aW51ZTsKIAkJCS8qIER1bXAgZW50cmllcyBvZiBhIGdpdmVuIEwzIHByb3RvY29sIG51bWJlci4KIAkJCSAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIGllLiBsM3Byb3RvID09IDAsCiAJCQkgKiB0aGVuIGR1bXAgZXZlcnl0aGluZy4gKi8KIAkJCWlmIChsM3Byb3RvICYmIG5mX2N0X2wzbnVtKGN0KSAhPSBsM3Byb3RvKQotCQkJCWNvbnRpbnVlOworCQkJCWdvdG8gcmVsZWFzZWN0OwogCQkJaWYgKGNiLT5hcmdzWzFdKSB7CiAJCQkJaWYgKGN0ICE9IGxhc3QpCi0JCQkJCWNvbnRpbnVlOworCQkJCQlnb3RvIHJlbGVhc2VjdDsKIAkJCQljYi0+YXJnc1sxXSA9IDA7CiAJCQl9CiAJCQlpZiAoY3RuZXRsaW5rX2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCQkJY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkJSVBDVE5MX01TR19DVF9ORVcsCiAJCQkJCQkxLCBjdCkgPCAwKSB7Ci0JCQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKQotCQkJCQljb250aW51ZTsKIAkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtNTc2LDYgKzY1MCw4IEBACiAJCQkJaWYgKGFjY3QpCiAJCQkJCW1lbXNldChhY2N0LCAwLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fY291bnRlcltJUF9DVF9ESVJfTUFYXSkpOwogCQkJfQorcmVsZWFzZWN0OgorCQluZl9jdF9wdXQoY3QpOwogCQl9CiAJCWlmIChjYi0+YXJnc1sxXSkgewogCQkJY2ItPmFyZ3NbMV0gPSAwOwpAQCAtNTk5LDcgKzY3NSw4IEBACiAKIAlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfSVBfTUFYLCBhdHRyLCBOVUxMKTsKIAotCWwzcHJvdG8gPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSk7CiAKIAlpZiAobGlrZWx5KGwzcHJvdG8tPm5sYXR0cl90b190dXBsZSkpIHsKIAkJcmV0ID0gbmxhX3ZhbGlkYXRlX25lc3RlZChhdHRyLCBDVEFfSVBfTUFYLApAQCAtNjA4LDcgKzY4NSw3IEBACiAJCQlyZXQgPSBsM3Byb3RvLT5ubGF0dHJfdG9fdHVwbGUodGIsIHR1cGxlKTsKIAl9CiAKLQluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02MzMsNyArNzEwLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdHVwbGUtPmRzdC5wcm90b251bSA9IG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPX05VTV0pOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CisJcmN1X3JlYWRfbG9jaygpOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAogCWlmIChsaWtlbHkobDRwcm90by0+bmxhdHRyX3RvX3R1cGxlKSkgewogCQlyZXQgPSBubGFfdmFsaWRhdGVfbmVzdGVkKGF0dHIsIENUQV9QUk9UT19NQVgsCkBAIC02NDIsNyArNzIwLDcgQEAKIAkJCXJldCA9IGw0cHJvdG8tPm5sYXR0cl90b190dXBsZSh0YiwgdHVwbGUpOwogCX0KIAotCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk4OSwxMCArMTA2NywxMSBAQAogCiAJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPSU5GT19NQVgsIGF0dHIsIE5VTEwpOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOworCXJjdV9yZWFkX2xvY2soKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChsNHByb3RvLT5mcm9tX25sYXR0cikKIAkJZXJyID0gbDRwcm90by0+ZnJvbV9ubGF0dHIodGIsIGN0KTsKLQluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xMDYyLDYgKzExNDEsMTAgQEAKIHsKIAlpbnQgZXJyOwogCisJLyogb25seSBhbGxvdyBOQVQgY2hhbmdlcyBhbmQgbWFzdGVyIGFzc2lnbmF0aW9uIGZvciBuZXcgY29ubnRyYWNrcyAqLworCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0gfHwgY2RhW0NUQV9UVVBMRV9NQVNURVJdKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoY2RhW0NUQV9IRUxQXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMTI0LDEzICsxMjA3LDExIEBACiAJCQkJICByZXBvcnQpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgogY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5sYXR0ciAqY2RhW10sCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvdHVwbGUsCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpydHVwbGUsCi0JCQkgICBzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyX2N0LAotCQkJICAgdTMyIHBpZCwKLQkJCSAgIGludCByZXBvcnQpCisJCQkgICB1OCB1MykKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJaW50IGVyciA9IC1FSU5WQUw7CkBAIC0xMTM4LDEwICsxMjE5LDEwIEBACiAKIAljdCA9IG5mX2Nvbm50cmFja19hbGxvYygmaW5pdF9uZXQsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaWYgKCFjZGFbQ1RBX1RJTUVPVVRdKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnIxOwogCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9USU1FT1VUXSkpOwogCiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBjdC0+dGltZW91dC5leHBpcmVzICogSFo7CkBAIC0xMTUyLDEwICsxMjMzLDggQEAKICAJCWNoYXIgKmhlbHBuYW1lOwogIAogIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX2hlbHAoY2RhW0NUQV9IRUxQXSwgJmhlbHBuYW1lKTsKLSAJCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisgCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAogCQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOwogCQlpZiAoaGVscGVyID09IE5VTEwpIHsKQEAgLTExNjMsMjggKzEyNDIsMjYgQEAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQkJaWYgKHJlcXVlc3RfbW9kdWxlKCJuZmN0LWhlbHBlci0lcyIsIGhlbHBuYW1lKSA8IDApIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjE7CiAJCQl9CiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CiAJCQlpZiAoaGVscGVyKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjI7CiAJCQl9CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKICNlbmRpZgogCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyMTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CiAKIAkJCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoaGVscCA9PSBOVUxMKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjI7CiAJCQl9CiAKIAkJCS8qIG5vdCBpbiBoYXNoIHRhYmxlIHlldCBzbyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5ICovCkBAIC0xMTkzLDQ0ICsxMjcwLDM0IEBACiAJfSBlbHNlIHsKIAkJLyogdHJ5IGFuIGltcGxpY2l0IGhlbHBlciBhc3NpZ25hdGlvbiAqLwogCQllcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJaWYgKGNkYVtDVEFfU1RBVFVTXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdChjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpZiAoY2RhW0NUQV9OQVRfU0VRX0FESl9PUklHXSB8fCBjZGFbQ1RBX05BVF9TRVFfQURKX1JFUExZXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdF9zZXFfYWRqKGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAjZW5kaWYKIAogCWlmIChjZGFbQ1RBX1BST1RPSU5GT10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KIAogCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CkBAIC0xMjQxLDIzICsxMzA4LDM2IEBACiAjZW5kaWYKIAogCS8qIHNldHVwIG1hc3RlciBjb25udHJhY2s6IHRoaXMgaXMgYSBjb25maXJtZWQgZXhwZWN0YXRpb24gKi8KLQlpZiAobWFzdGVyX2N0KSB7CisJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgeworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3RlcjsKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICptYXN0ZXJfaDsKKwkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdDsKKworCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCAmbWFzdGVyLCBDVEFfVFVQTEVfTUFTVEVSLCB1Myk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOworCisJCW1hc3Rlcl9oID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJm1hc3Rlcik7CisJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBlcnIyOworCQl9CisJCW1hc3Rlcl9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2sobWFzdGVyX2gpOwogCQlfX3NldF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmN0LT5zdGF0dXMpOwogCQljdC0+bWFzdGVyID0gbWFzdGVyX2N0OwogCX0KIAotCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwogCXJjdV9yZWFkX3VubG9jaygpOwotCWN0bmV0bGlua19ldmVudF9yZXBvcnQoY3QsIHBpZCwgcmVwb3J0KTsKLQluZl9jdF9wdXQoY3QpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGN0OwogCi1lcnI6CitlcnIyOgorCXJjdV9yZWFkX3VubG9jaygpOworZXJyMToKIAluZl9jb25udHJhY2tfZnJlZShjdCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjg5LDM4ICsxMzY5LDI1IEBACiAJCWggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJnJ0dXBsZSk7CiAKIAlpZiAoaCA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyOwotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKm1hc3Rlcl9oID0gTlVMTDsKLQkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdCA9IE5VTEw7CisJCWVyciA9IC1FTk9FTlQ7CisJCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSB7CisJCQlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKLQkJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgewotCQkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwKLQkJCQkJCSAgICAmbWFzdGVyLAotCQkJCQkJICAgIENUQV9UVVBMRV9NQVNURVIsCi0JCQkJCQkgICAgdTMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCQltYXN0ZXJfaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmbWFzdGVyKTsKLQkJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7Ci0JCQkJZXJyID0gLUVOT0VOVDsKKwkJCWN0ID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soY2RhLCAmb3R1cGxlLAorCQkJCQkJCSZydHVwbGUsIHUzKTsKKwkJCWlmIChJU19FUlIoY3QpKSB7CisJCQkJZXJyID0gUFRSX0VSUihjdCk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQotCQkJbWFzdGVyX2N0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhtYXN0ZXJfaCk7Ci0JCQluZl9jb25udHJhY2tfZ2V0KCZtYXN0ZXJfY3QtPmN0X2dlbmVyYWwpOwotCQl9Ci0KLQkJZXJyID0gLUVOT0VOVDsKLQkJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9DUkVBVEUpCi0JCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjZGEsCi0JCQkJCQkJICZvdHVwbGUsCi0JCQkJCQkJICZydHVwbGUsCi0JCQkJCQkJIG1hc3Rlcl9jdCwKLQkJCQkJCQkgTkVUTElOS19DQihza2IpLnBpZCwKLQkJCQkJCQkgbmxtc2dfcmVwb3J0KG5saCkpOwotCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCQlpZiAoZXJyIDwgMCAmJiBtYXN0ZXJfY3QpCi0JCQluZl9jdF9wdXQobWFzdGVyX2N0KTsKKwkJCWVyciA9IDA7CisJCQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisJCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQkJY3RuZXRsaW5rX2V2ZW50X3JlcG9ydChjdCwKKwkJCQkJICAgICAgIE5FVExJTktfQ0Ioc2tiKS5waWQsCisJCQkJCSAgICAgICBubG1zZ19yZXBvcnQobmxoKSk7CisJCQluZl9jdF9wdXQoY3QpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMzMyLDE3ICsxMzk5LDYgQEAKIAlpZiAoIShubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRVhDTCkpIHsKIAkJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAotCQkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCi0JCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCS8qIGNhbid0IGxpbmsgYW4gZXhpc3RpbmcgY29ubnRyYWNrIHRvIGEgbWFzdGVyICovCi0JCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soY3QsIGNkYSk7CiAJCWlmIChlcnIgPT0gMCkgewogCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwpAQCAtMTUzMyw2ICsxNTg5LDcgQEAKIG5sYV9wdXRfZmFpbHVyZToKIAlyY3VfcmVhZF91bmxvY2soKTsKIG5sbXNnX2ZhaWx1cmU6CisJbmZuZXRsaW5rX3NldF9lcnIoMCwgMCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTE3ODAsNiArMTgzNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWV4cC0+Y2xhc3MgPSAwOwogCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOwogCWV4cC0+ZmxhZ3MgPSAwOwogCWV4cC0+bWFzdGVyID0gY3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggOWUxNjllZi4uMzgwN2FjNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNjYsNyArNjYsNyBAQAogCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CiAKLSNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQogLyogUHB0cENvbnRyb2xNZXNzYWdlVHlwZSBuYW1lcyAqLwogY29uc3QgY2hhciAqY29uc3QgcHB0cF9tc2dfbmFtZVtdID0gewogCSJVTktOT1dOX01FU1NBR0UiLApAQCAtNTkxLDcgKzU5MSw3IEBACiAJLm5hbWUJCQk9ICJwcHRwIiwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUFBUUF9DT05UUk9MX1BPUlQpLAorCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFBQVFBfQ09OVFJPTF9QT1JUKSwKIAkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJLmhlbHAJCQk9IGNvbm50cmFja19wcHRwX2hlbHAsCiAJLmRlc3Ryb3kJCT0gcHB0cF9kZXN0cm95X3NpYmxpbmdzLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKaW5kZXggNTkyZDczMy4uMWE0NTY4YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCkBAIC03NCwyNyArNzQsNiBAQAogCiAvKiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIHJldHVybiBhIHZhbGlkIHByb3RvY29sIGhlbHBlciwgc2luY2UKICAqIGl0IGZhbGxzIGJhY2sgdG8gZ2VuZXJpY19wcm90b2NvbCAqLwotc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoKLW5mX2N0X2w0cHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXAgPSBfX25mX2N0X2w0cHJvdG9fZmluZChsM3Byb3RvLCBsNHByb3RvKTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJcCA9ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KTsKLQotdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApCi17Ci0JbW9kdWxlX3B1dChwLT5tZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX3B1dCk7Ci0KIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqCiBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHVfaW50MTZfdCBsM3Byb3RvKQogewpAQCAtMTg4LDYgKzE2Nyw5IEBACiAJaWYgKHByb3RvLT5sM3Byb3RvID49IEFGX01BWCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChwcm90by0+dHVwbGVfdG9fbmxhdHRyICYmICFwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmbmZfY3RfcHJvdG9fbXV0ZXgpOwogCWlmIChuZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10gIT0gJm5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMpIHsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtMTk4LDYgKzE4MCw5IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCXByb3RvLT5ubGFfc2l6ZSA9IDMgKiBwcm90by0+bmxhdHRyX3R1cGxlX3NpemUoKTsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10sIHByb3RvKTsKIAogb3V0X3VubG9jazoKQEAgLTI4NCw2ICsyNjksMTAgQEAKIAlpZiAobDRwcm90by0+bDNwcm90byA+PSBQRl9NQVgpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAoKGw0cHJvdG8tPnRvX25sYXR0ciAmJiAhbDRwcm90by0+bmxhdHRyX3NpemUpCisJCXx8IChsNHByb3RvLT50dXBsZV90b19ubGF0dHIgJiYgIWw0cHJvdG8tPm5sYXR0cl90dXBsZV9zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZuZl9jdF9wcm90b19tdXRleCk7CiAJaWYgKCFuZl9jdF9wcm90b3NbbDRwcm90by0+bDNwcm90b10pIHsKIAkJLyogbDNwcm90byBtYXkgYmUgbG9hZGVkIGxhdHRlci4gKi8KQEAgLTMxMSw2ICszMDAsMTIgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJbDRwcm90by0+bmxhX3NpemUgPSAwOworCWlmIChsNHByb3RvLT5ubGF0dHJfc2l6ZSkKKwkJbDRwcm90by0+bmxhX3NpemUgKz0gbDRwcm90by0+bmxhdHRyX3NpemUoKTsKKwlpZiAobDRwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCWw0cHJvdG8tPm5sYV9zaXplICs9IDMgKiBsNHByb3RvLT5ubGF0dHJfdHVwbGVfc2l6ZSgpOworCiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2N0X3Byb3Rvc1tsNHByb3RvLT5sM3Byb3RvXVtsNHByb3RvLT5sNHByb3RvXSwKIAkJCSAgIGw0cHJvdG8pOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggOGZjZjE3Ni4uNTBkYWM4ZGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKQEAgLTE2LDYgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAKKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgpAQCAtMjMsOCArMjYsNiBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkY2NwX2xvY2spOwogCi1zdGF0aWMgaW50IG5mX2N0X2RjY3BfbG9vc2UgX19yZWFkX21vc3RseSA9IDE7Ci0KIC8qIFRpbWVvdXRzIGFyZSBiYXNlZCBvbiB2YWx1ZXMgZnJvbSBSRkM0MzQwOgogICoKICAqIC0gUkVRVUVTVDoKQEAgLTcyLDE2ICs3Myw2IEBACiAKICNkZWZpbmUgRENDUF9NU0wgKDIgKiA2MCAqIEhaKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JW0NUX0RDQ1BfUkVRVUVTVF0JPSAyICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUkVTUE9ORF0JPSA0ICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMLAotCVtDVF9EQ0NQX09QRU5dCQk9IDEyICogMzYwMCAqIEhaLAotCVtDVF9EQ0NQX0NMT1NFUkVRXQk9IDY0ICogSFosCi0JW0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaLAotCVtDVF9EQ0NQX1RJTUVXQUlUXQk9IDIgKiBEQ0NQX01TTCwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGNjcF9zdGF0ZV9uYW1lc1tdID0gewogCVtDVF9EQ0NQX05PTkVdCQk9ICJOT05FIiwKIAlbQ1RfRENDUF9SRVFVRVNUXQk9ICJSRVFVRVNUIiwKQEAgLTM5Myw2ICszODQsMjIgQEAKIAl9LAogfTsKIAorLyogdGhpcyBtb2R1bGUgcGVyLW5ldCBzcGVjaWZpY3MgKi8KK3N0YXRpYyBpbnQgZGNjcF9uZXRfaWQ7CitzdHJ1Y3QgZGNjcF9uZXQgeworCWludCBkY2NwX2xvb3NlOworCXVuc2lnbmVkIGludCBkY2NwX3RpbWVvdXRbQ1RfRENDUF9NQVggKyAxXTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7CisJc3RydWN0IGN0bF90YWJsZSAqc3lzY3RsX3RhYmxlOworI2VuZGlmCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX25ldCAqZGNjcF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIGRjY3BfbmV0X2lkKTsKK30KKwogc3RhdGljIGJvb2wgZGNjcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKQEAgLTQxOSw2ICs0MjYsNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJY29uc3QgY2hhciAqbXNnOwogCXVfaW50OF90IHN0YXRlOwpAQCAtNDI5LDcgKzQzNyw4IEBACiAJc3RhdGUgPSBkY2NwX3N0YXRlX3RhYmxlW0NUX0RDQ1BfUk9MRV9DTElFTlRdW2RoLT5kY2NwaF90eXBlXVtDVF9EQ0NQX05PTkVdOwogCXN3aXRjaCAoc3RhdGUpIHsKIAlkZWZhdWx0OgotCQlpZiAobmZfY3RfZGNjcF9sb29zZSA9PSAwKSB7CisJCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwkJaWYgKGRuLT5kY2NwX2xvb3NlID09IDApIHsKIAkJCW1zZyA9ICJuZl9jdF9kY2NwOiBub3QgcGlja2luZyB1cCBleGlzdGluZyBjb25uZWN0aW9uICI7CiAJCQlnb3RvIG91dF9pbnZhbGlkOwogCQl9CkBAIC00NjUsNiArNDc0LDcgQEAKIAkJICAgICAgIHVfaW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCXN0cnVjdCBkY2NwX25ldCAqZG47CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJdV9pbnQ4X3QgdHlwZSwgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CkBAIC01NDIsNyArNTUyLDkgQEAKIAljdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9IHR5cGU7CiAJY3QtPnByb3RvLmRjY3Auc3RhdGUgPSBuZXdfc3RhdGU7CiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwotCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRjY3BfdGltZW91dFtuZXdfc3RhdGVdKTsKKworCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBkbi0+ZGNjcF90aW1lb3V0W25ld19zdGF0ZV0pOwogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KQEAgLTY1NywxNiArNjY5LDIwIEBACiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGRjY3BfbmxhdHRyX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoMCkJLyogQ1RBX1BST1RPSU5GT19EQ0NQICovCisJCSsgbmxhX3BvbGljeV9sZW4oZGNjcF9ubGFfcG9saWN5LCBDVEFfUFJPVE9JTkZPX0RDQ1BfTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF9zeXNjdGxfdGFibGVfdXNlcnM7Ci1zdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmRjY3Bfc3lzY3RsX2hlYWRlcjsKLXN0YXRpYyBjdGxfdGFibGUgZGNjcF9zeXNjdGxfdGFibGVbXSA9IHsKKy8qIHRlbXBsYXRlLCBkYXRhIGFzc2lnbmVkIGxhdGVyICovCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3JlcXVlc3QiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVRVUVTVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02NzQsNyArNjkwLDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9yZXNwb25kIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFU1BPTkRdLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjgyLDcgKzY5Nyw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcGFydG9wZW4iLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjkwLDcgKzcwNCw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfb3BlbiIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTY5OCw3ICs3MTEsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NlcmVxIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcwNiw3ICs3MTgsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NpbmciLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MTQsNyArNzI1LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF90aW1ld2FpdCIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MjIsOCArNzMyLDcgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfbG9vc2UiLAotCQkuZGF0YQkJPSAmbmZfY3RfZGNjcF9sb29zZSwKLQkJLm1heGxlbgkJPSBzaXplb2YobmZfY3RfZGNjcF9sb29zZSksCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCkBAIC03NDYsMTYgKzc1NSwxMyBAQAogCS5wcmludF9jb25udHJhY2sJPSBkY2NwX3ByaW50X2Nvbm50cmFjaywKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmxhdHRyCQk9IGRjY3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSBkY2NwX25sYXR0cl9zaXplLAogCS5mcm9tX25sYXR0cgkJPSBubGF0dHJfdG9fZGNjcCwKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplCT0gbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzYgX19yZWFkX21vc3RseSA9IHsKQEAgLTc3MywzNyArNzc5LDExMSBAQAogCS50b19ubGF0dHIJCT0gZGNjcF90b19ubGF0dHIsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19kY2NwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKK307CisKK3N0YXRpYyBfX25ldF9pbml0IGludCBkY2NwX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOworCWludCBlcnI7CisKKwlkbiA9IGttYWxsb2Moc2l6ZW9mKCpkbiksIEdGUF9LRVJORUwpOworCWlmICghZG4pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwlkbi0+ZGNjcF9sb29zZSA9IDE7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdCT0gMiAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXQkJPSAxMiAqIDM2MDAgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0JPSAyICogRENDUF9NU0w7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgZG4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCisJZXJyID0gLUVOT01FTTsKKwlkbi0+c3lzY3RsX3RhYmxlID0ga21lbWR1cChkY2NwX3N5c2N0bF90YWJsZSwKKwkJCXNpemVvZihkY2NwX3N5c2N0bF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghZG4tPnN5c2N0bF90YWJsZSkKKwkJZ290byBvdXQ7CisKKwlkbi0+c3lzY3RsX3RhYmxlWzBdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdOworCWRuLT5zeXNjdGxfdGFibGVbMV0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF07CisJZG4tPnN5c2N0bF90YWJsZVsyXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl07CisJZG4tPnN5c2N0bF90YWJsZVszXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzRdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzVdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NJTkddOworCWRuLT5zeXNjdGxfdGFibGVbNl0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfVElNRVdBSVRdOworCWRuLT5zeXNjdGxfdGFibGVbN10uZGF0YSA9ICZkbi0+ZGNjcF9sb29zZTsKKworCWRuLT5zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCisJCQluZl9uZXRfbmV0ZmlsdGVyX3N5c2N0bF9wYXRoLCBkbi0+c3lzY3RsX3RhYmxlKTsKKwlpZiAoIWRuLT5zeXNjdGxfaGVhZGVyKSB7CisJCWtmcmVlKGRuLT5zeXNjdGxfdGFibGUpOworCQlnb3RvIG91dDsKKwl9CiAjZW5kaWYKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoZG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgZGNjcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGRjY3BfbmV0ICpkbiA9IGRjY3BfcGVybmV0KG5ldCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShkbi0+c3lzY3RsX2hlYWRlcik7CisJa2ZyZWUoZG4tPnN5c2N0bF90YWJsZSk7CisjZW5kaWYKKwlrZnJlZShkbik7CisKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZGNjcF9uZXRfb3BzID0geworCS5pbml0ID0gZGNjcF9uZXRfaW5pdCwKKwkuZXhpdCA9IGRjY3BfbmV0X2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoJmRjY3BfbmV0X2lkLCAmZGNjcF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIxOwogCi0JZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjI7CisKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjM7CiAJcmV0dXJuIDA7CiAKLWVycjI6CitlcnIzOgogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiBlcnIxOgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiAJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90bzYpOwogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA0YmU4MGQ3Li44MjkzNzRmNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMgX19yZWFkX21vc3RseSA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfVU5TUEVDLAotCS5sNHByb3RvCQk9IDAsCisJLmw0cHJvdG8JCT0gMjU1LAogCS5uYW1lCQkJPSAidW5rbm93biIsCiAJLnBrdF90b190dXBsZQkJPSBnZW5lcmljX3BrdF90b190dXBsZSwKIAkuaW52ZXJ0X3R1cGxlCQk9IGdlbmVyaWNfaW52ZXJ0X3R1cGxlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCAxYjI3OWY5ZC4uMTE3YjgwMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKQEAgLTI5Myw2ICsyOTMsNyBAQAogCS5tZSAJCSA9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIgPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUgPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUgPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkgPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA3NGUwMzc5Li4xMDFiNGFkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC01MzcsNiArNTM3LDEyIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBzY3RwX25sYXR0cl9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDApCS8qIENUQV9QUk9UT0lORk9fU0NUUCAqLworCQkrIG5sYV9wb2xpY3lfbGVuKHNjdHBfbmxhX3BvbGljeSwgQ1RBX1BST1RPSU5GT19TQ1RQX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC02NjgsOCArNjc0LDEwIEBACiAJLm1lIAkJCT0gVEhJU19NT0RVTEUsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSBzY3RwX3RvX25sYXR0ciwKKwkubmxhdHRyX3NpemUJCT0gc2N0cF9ubGF0dHJfc2l6ZSwKIAkuZnJvbV9ubGF0dHIJCT0gbmxhdHRyX3RvX3NjdHAsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgpAQCAtNjk2LDggKzcwNCwxMCBAQAogCS5tZSAJCQk9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50b19ubGF0dHIJCT0gc2N0cF90b19ubGF0dHIsCisJLm5sYXR0cl9zaXplCQk9IHNjdHBfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19zY3RwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggYTFlZGI5Yy4uYjVjY2YyYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIApAQCAtMjUsNiArMjYsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiAvKiBQcm90ZWN0cyBjdC0+cHJvdG8udGNwICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyh0Y3BfbG9jayk7CkBAIC00NjYsNyArNDY5LDcgQEAKIAkJCQlmb3IgKGkgPSAwOwogCQkJCSAgICAgaSA8IChvcHNpemUgLSBUQ1BPTEVOX1NBQ0tfQkFTRSk7CiAJCQkJICAgICBpICs9IFRDUE9MRU5fU0FDS19QRVJCTE9DSykgewotCQkJCQl0bXAgPSBudG9obCgqKChfX2JlMzIgKikocHRyK2kpKzEpKTsKKwkJCQkJdG1wID0gZ2V0X3VuYWxpZ25lZF9iZTMyKChfX2JlMzIgKikocHRyK2kpKzEpOwogCiAJCQkJCWlmIChhZnRlcih0bXAsICpzYWNrKSkKIAkJCQkJCSpzYWNrID0gdG1wOwpAQCAtODU5LDcgKzg2Miw3IEBACiAJCQkgKi8KIAkJCWlmIChuZl9jdF9raWxsKGN0KSkKIAkJCQlyZXR1cm4gLU5GX1JFUEVBVDsKLQkJCXJldHVybiAtTkZfRFJPUDsKKwkJCXJldHVybiBORl9EUk9QOwogCQl9CiAJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVENQX0NPTk5UUkFDS19JR05PUkU6CkBAIC04OTIsNyArODk1LDcgQEAKIAkJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgIm5mX2N0X3RjcDoga2lsbGluZyBvdXQgb2Ygc3luYyBzZXNzaW9uICIpOwogCQkJbmZfY3Rfa2lsbChjdCk7Ci0JCQlyZXR1cm4gLU5GX0RST1A7CisJCQlyZXR1cm4gTkZfRFJPUDsKIAkJfQogCQljdC0+cHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDsKIAkJY3QtPnByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjsKQEAgLTExODEsNiArMTE4NCwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgdGNwX25sYXR0cl9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDApCSAgIC8qIENUQV9QUk9UT0lORk9fVENQICovCisJCSsgbmxhX3BvbGljeV9sZW4odGNwX25sYV9wb2xpY3ksIENUQV9QUk9UT0lORk9fVENQX01BWCArIDEpOworfQorCitzdGF0aWMgaW50IHRjcF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihuZl9jdF9wb3J0X25sYV9wb2xpY3ksIENUQV9QUk9UT19NQVggKyAxKTsKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMTM5Niw5ICsxNDEwLDExIEBACiAJLmVycm9yCQkJPSB0Y3BfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSB0Y3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSB0Y3BfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b190Y3AsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSB0Y3BfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMTQyNiw5ICsxNDQyLDExIEBACiAJLmVycm9yCQkJPSB0Y3BfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSB0Y3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSB0Y3BfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b190Y3AsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSB0Y3BfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCAyYjhiMWY1Li43MDgwOWQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3VkcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtIF9fcmVhZF9tb3N0bHkgPSAxODAqSFo7CkBAIC0xOTMsNiArMTk1LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMjIwLDYgKzIyMyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYwppbmRleCA0NTc5ZDhkLi40NjE0Njk2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCkBAIC0xODAsNiArMTgwLDcgQEAKIAkuZXJyb3IJCQk9IHVkcGxpdGVfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDRkYTU0YjAuLjE5MzUxNTMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTQ0LDQwICs0NCw0MiBAQAogCXVuc2lnbmVkIGludCBidWNrZXQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IGhsaXN0X25vZGUgKmN0X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAogCWZvciAoc3QtPmJ1Y2tldCA9IDA7CiAJICAgICBzdC0+YnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogCSAgICAgc3QtPmJ1Y2tldCsrKSB7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKLQkJaWYgKG4pCisJCWlmICghaXNfYV9udWxscyhuKSkKIAkJCXJldHVybiBuOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpjdF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQkJCQkgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGVhZCkKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJICAgICAgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmhlYWQpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOwogCiAJaGVhZCA9IHJjdV9kZXJlZmVyZW5jZShoZWFkLT5uZXh0KTsKLQl3aGlsZSAoaGVhZCA9PSBOVUxMKSB7Ci0JCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQotCQkJcmV0dXJuIE5VTEw7CisJd2hpbGUgKGlzX2FfbnVsbHMoaGVhZCkpIHsKKwkJaWYgKGxpa2VseShnZXRfbnVsbHNfdmFsdWUoaGVhZCkgPT0gc3QtPmJ1Y2tldCkpIHsKKwkJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJCXJldHVybiBOVUxMOworCQl9CiAJCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKIAl9CiAJcmV0dXJuIGhlYWQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqY3RfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpoZWFkID0gY3RfZ2V0X2ZpcnN0KHNlcSk7CiAKIAlpZiAoaGVhZCkKIAkJd2hpbGUgKHBvcyAmJiAoaGVhZCA9IGN0X2dldF9uZXh0KHNlcSwgaGVhZCkpKQpAQCAtMTA3LDY3ICsxMDksNzQgQEAKIC8qIHJldHVybiAwIG9uIHN1Y2Nlc3MsIDEgaW4gY2FzZSBvZiBlcnJvciAqLwogc3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0JY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKLQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaGFzaCA9IHY7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoYXNoKTsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOworCWludCByZXQgPSAwOwogCiAJTkZfQ1RfQVNTRVJUKGN0KTsKKwlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQorCQlyZXR1cm4gMDsKIAogCS8qIHdlIG9ubHkgd2FudCB0byBwcmludCBESVJfT1JJR0lOQUwgKi8KIAlpZiAoTkZfQ1RfRElSRUNUSU9OKGhhc2gpKQotCQlyZXR1cm4gMDsKKwkJZ290byByZWxlYXNlOwogCiAJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSk7CiAJTkZfQ1RfQVNTRVJUKGwzcHJvdG8pOwogCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChuZl9jdF9sM251bShjdCksIG5mX2N0X3Byb3RvbnVtKGN0KSk7CiAJTkZfQ1RfQVNTRVJUKGw0cHJvdG8pOwogCisJcmV0ID0gLUVOT1NQQzsKIAlpZiAoc2VxX3ByaW50ZihzLCAiJS04cyAldSAlLThzICV1ICVsZCAiLAogCQkgICAgICAgbDNwcm90by0+bmFtZSwgbmZfY3RfbDNudW0oY3QpLAogCQkgICAgICAgbDRwcm90by0+bmFtZSwgbmZfY3RfcHJvdG9udW0oY3QpLAogCQkgICAgICAgdGltZXJfcGVuZGluZygmY3QtPnRpbWVvdXQpCiAJCSAgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayAmJiBsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCiAJCQlsM3Byb3RvLCBsNHByb3RvKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChzZXFfcHJpbnRfYWNjdChzLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKIAkJaWYgKHNlcV9wcmludGYocywgIltVTlJFUExJRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAocHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfUkVQTFkpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpKQogCQlpZiAoc2VxX3ByaW50ZihzLCAiW0FTU1VSRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKIAlpZiAoc2VxX3ByaW50ZihzLCAibWFyaz0ldSAiLCBjdC0+bWFyaykpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSwogCWlmIChzZXFfcHJpbnRmKHMsICJzZWNtYXJrPSV1ICIsIGN0LT5zZWNtYXJrKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCiAJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCisJcmV0ID0gMDsKK3JlbGVhc2U6CisJbmZfY3RfcHV0KGN0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggZmE4YWU1ZC4uOGJiOTk4ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xNCw1OCArMTQsNjMgQEAKICAgIExPRyB0YXJnZXQgbW9kdWxlcyAqLwogCiAjZGVmaW5lIE5GX0xPR19QUkVGSVhMRU4JCTEyOAorI2RlZmluZSBORkxPR0dFUl9OQU1FX0xFTgkJNjQKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKm5mX2xvZ2dlcnNbTkZQUk9UT19OVU1QUk9UT10gX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2xvZ2dlcnNfbFtORlBST1RPX05VTVBST1RPXSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIERFRklORV9NVVRFWChuZl9sb2dfbXV0ZXgpOwogCi0vKiByZXR1cm4gRUJVU1kgaWYgc29tZWJvZHkgZWxzZSBpcyByZWdpc3RlcmVkLCBFRVhJU1QgaWYgdGhlIHNhbWUgbG9nZ2VyCi0gKiBpcyByZWdpc3RyZWQsIDAgb24gc3VjY2Vzcy4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyICpfX2ZpbmRfbG9nZ2VyKGludCBwZiwgY29uc3QgY2hhciAqc3RyX2xvZ2dlcikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBuZl9sb2dnZXIgKnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbcGZdLCBsaXN0W3BmXSkgeworCQlpZiAoIXN0cm5pY21wKHN0cl9sb2dnZXIsIHQtPm5hbWUsIHN0cmxlbih0LT5uYW1lKSkpCisJCQlyZXR1cm4gdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIEVFWElTVCBpZiB0aGUgc2FtZSBsb2dnZXIgaXMgcmVnaXN0cmVkLCAwIG9uIHN1Y2Nlc3MuICovCitpbnQgbmZfbG9nX3JlZ2lzdGVyKHVfaW50OF90IHBmLCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCit7CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbGxvZzsKIAogCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFueSBzZXR1cCBvZiBsb2dnaW5nIG1lbWJlcnMgbXVzdCBiZSBkb25lIGJlZm9yZQotCSAqIHN1YnN0aXR1dGluZyBwb2ludGVyLiAqLwotCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmZfbG9nX211dGV4KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCi0JaWYgKCFuZl9sb2dnZXJzW3BmXSkKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOwotCWVsc2UgaWYgKG5mX2xvZ2dlcnNbcGZdID09IGxvZ2dlcikKLQkJcmV0ID0gLUVFWElTVDsKLQllbHNlCi0JCXJldCA9IC1FQlVTWTsKKwlpZiAocGYgPT0gTkZQUk9UT19VTlNQRUMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKQorCQkJbGlzdF9hZGRfdGFpbCgmKGxvZ2dlci0+bGlzdFtpXSksICYobmZfbG9nZ2Vyc19sW2ldKSk7CisJfSBlbHNlIHsKKwkJLyogcmVnaXN0ZXIgYXQgZW5kIG9mIGxpc3QgdG8gaG9ub3IgZmlyc3QgcmVnaXN0ZXIgd2luICovCisJCWxpc3RfYWRkX3RhaWwoJmxvZ2dlci0+bGlzdFtwZl0sICZuZl9sb2dnZXJzX2xbcGZdKTsKKwkJbGxvZyA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW3BmXSk7CisJCWlmIChsbG9nID09IE5VTEwpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmZfbG9nX3JlZ2lzdGVyKTsKIAotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcl9wZih1X2ludDhfdCBwZikKK3ZvaWQgbmZfbG9nX3VucmVnaXN0ZXIoc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQogewotCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQotCQlyZXR1cm47Ci0JbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOwotCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKLQotCS8qIEdpdmUgdGltZSB0byBjb25jdXJyZW50IHJlYWRlcnMuICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG5mX2xvZ191bnJlZ2lzdGVyX3BmKTsKLQotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCi17CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqY19sb2dnZXI7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpOyBpKyspIHsKLQkJaWYgKG5mX2xvZ2dlcnNbaV0gPT0gbG9nZ2VyKQorCQljX2xvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW2ldKTsKKwkJaWYgKGNfbG9nZ2VyID09IGxvZ2dlcikKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW2ldLCBOVUxMKTsKKwkJbGlzdF9kZWwoJmxvZ2dlci0+bGlzdFtpXSk7CiAJfQogCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIApAQCAtNzMsNiArNzgsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfbG9nX3VucmVnaXN0ZXIpOwogCitpbnQgbmZfbG9nX2JpbmRfcGYodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3sKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCWlmIChfX2ZpbmRfbG9nZ2VyKHBmLCBsb2dnZXItPm5hbWUpID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmZfbG9nX2JpbmRfcGYpOworCit2b2lkIG5mX2xvZ191bmJpbmRfcGYodV9pbnQ4X3QgcGYpCit7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0wobmZfbG9nX3VuYmluZF9wZik7CisKIHZvaWQgbmZfbG9nX3BhY2tldCh1X2ludDhfdCBwZiwKIAkJICAgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMjksMTMgKzE1NSwzNyBAQAogewogCWxvZmZfdCAqcG9zID0gdjsKIAljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXI7CisJc3RydWN0IG5mX2xvZ2dlciAqdDsKKwlpbnQgcmV0OwogCiAJbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbKnBvc10pOwogCiAJaWYgKCFsb2dnZXIpCi0JCXJldHVybiBzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FXG4iLCAqcG9zKTsKKwkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORSAoIiwgKnBvcyk7CisJZWxzZQorCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlMmxsZCAlcyAoIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKIAotCXJldHVybiBzZXFfcHJpbnRmKHMsICIlMmxsZCAlc1xuIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbmZfbG9nZ2Vyc19sWypwb3NdLCBsaXN0Wypwb3NdKSB7CisJCXJldCA9IHNlcV9wcmludGYocywgIiVzIiwgdC0+bmFtZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmICgmdC0+bGlzdFsqcG9zXSAhPSBuZl9sb2dnZXJzX2xbKnBvc10ucHJldikgeworCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAiKVxuIik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZsb2dfc2VxX29wcyA9IHsKQEAgLTE1OCwxNSArMjA4LDEwMiBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9OwogCisKICNlbmRpZiAvKiBQUk9DX0ZTICovCiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdHJ1Y3QgY3RsX3BhdGggbmZfbG9nX3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJuZXRmaWx0ZXIiLCAuY3RsX25hbWUgPSBORVRfTkVURklMVEVSLCB9LAorCXsgLnByb2NuYW1lID0gIm5mX2xvZyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKworc3RhdGljIGNoYXIgbmZfbG9nX3N5c2N0bF9mbmFtZXNbTkZQUk9UT19OVU1QUk9UTy1ORlBST1RPX1VOU1BFQ11bM107CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sb2dfc3lzY3RsX3RhYmxlW05GUFJPVE9fTlVNUFJPVE8rMV07CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2xvZ19kaXJfaGVhZGVyOworCitzdGF0aWMgaW50IG5mX2xvZ19wcm9jX2Rvc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXI7CisJaW50IHIgPSAwOworCWludCB0aW5kZXggPSAodW5zaWduZWQgbG9uZyl0YWJsZS0+ZXh0cmExOworCisJaWYgKHdyaXRlKSB7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgIk5PTkUiKSkgeworCQkJbmZfbG9nX3VuYmluZF9wZih0aW5kZXgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwkJbG9nZ2VyID0gX19maW5kX2xvZ2dlcih0aW5kZXgsIGJ1ZmZlcik7CisJCWlmIChsb2dnZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbdGluZGV4XSwgbG9nZ2VyKTsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbdGluZGV4XSk7CisJCWlmICghbG9nZ2VyKQorCQkJdGFibGUtPmRhdGEgPSAiTk9ORSI7CisJCWVsc2UKKwkJCXRhYmxlLT5kYXRhID0gbG9nZ2VyLT5uYW1lOworCQlyID0gcHJvY19kb3N0cmluZyh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCXJldHVybiByOworfQorCitzdGF0aWMgX19pbml0IGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykgeworCQlzbnByaW50ZihuZl9sb2dfc3lzY3RsX2ZuYW1lc1tpLU5GUFJPVE9fVU5TUEVDXSwgMywgIiVkIiwgaSk7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5wcm9jbmFtZQk9CisJCQluZl9sb2dfc3lzY3RsX2ZuYW1lc1tpLU5GUFJPVE9fVU5TUEVDXTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5kYXRhID0gTlVMTDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tYXhsZW4gPQorCQkJTkZMT0dHRVJfTkFNRV9MRU4gKiBzaXplb2YoY2hhcik7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ubW9kZSA9IDA2NDQ7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ucHJvY19oYW5kbGVyID0gbmZfbG9nX3Byb2NfZG9zdHJpbmc7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uZXh0cmExID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgaTsKKwl9CisKKwluZl9sb2dfZGlyX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhuZl9sb2dfc3lzY3RsX3BhdGgsCisJCQkJICAgICAgIG5mX2xvZ19zeXNjdGxfdGFibGUpOworCWlmICghbmZfbG9nX2Rpcl9oZWFkZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIF9faW5pdCBpbnQgbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAogaW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCkKIHsKKwlpbnQgaSwgcjsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19jcmVhdGUoIm5mX2xvZyIsIFNfSVJVR08sCiAJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZsb2dfZmlsZV9vcHMpKQogCQlyZXR1cm4gLTE7CiAjZW5kaWYKKworCS8qIEVycm9ycyB3aWxsIHRyaWdnZXIgcGFuaWMsIHVucm9sbCBvbiBlcnJvciBpcyB1bm5lY2Vzc2FyeS4gKi8KKwlyID0gbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCgpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJihuZl9sb2dnZXJzX2xbaV0pKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IGNkYzk3ZjMuLjU0OTBmYzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTcxLDYgKzcxLDcgQEAKIG5mX3Rwcm94eV9hc3NpZ25fc29jayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkgeworCQlza2Jfb3JwaGFuKHNrYik7CiAJCXNrYi0+c2sgPSBzazsKIAkJc2tiLT5kZXN0cnVjdG9yID0gbmZfdHByb3h5X2Rlc3RydWN0b3I7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggOWMwYmExNy4uMjc4NWQ2NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC0xMTMsNiArMTEzLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfc2VuZCk7CiAKK3ZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpCit7CisJbmV0bGlua19zZXRfZXJyKG5mbmwsIHBpZCwgZ3JvdXAsIGVycm9yKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZXRfZXJyKTsKKwogaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncykKIHsKIAlyZXR1cm4gbmV0bGlua191bmljYXN0KG5mbmwsIHNrYiwgcGlkLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IGM3MTJlOWYuLmZkMzI2YWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC02OTMsNyArNjkzLDcgQEAKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBuZnVsbmxfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgbmZ1bG5sX2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCT0gIm5mbmV0bGlua19sb2ciLAogCS5sb2dmbgk9ICZuZnVsbmxfbG9nX3BhY2tldCwKIAkubWUJPSBUSElTX01PRFVMRSwKQEAgLTcyNSw5ICs3MjUsOSBAQAogCQkvKiBDb21tYW5kcyB3aXRob3V0IHF1ZXVlIGNvbnRleHQgKi8KIAkJc3dpdGNoIChjbWQtPmNvbW1hbmQpIHsKIAkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9QRl9CSU5EOgotCQkJcmV0dXJuIG5mX2xvZ19yZWdpc3RlcihwZiwgJm5mdWxubF9sb2dnZXIpOworCQkJcmV0dXJuIG5mX2xvZ19iaW5kX3BmKHBmLCAmbmZ1bG5sX2xvZ2dlcik7CiAJCWNhc2UgTkZVTE5MX0NGR19DTURfUEZfVU5CSU5EOgotCQkJbmZfbG9nX3VucmVnaXN0ZXJfcGYocGYpOworCQkJbmZfbG9nX3VuYmluZF9wZihwZik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTk1MiwxNyArOTUyLDI1IEBACiAJCWdvdG8gY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOwogCX0KIAorCXN0YXR1cyA9IG5mX2xvZ19yZWdpc3RlcihORlBST1RPX1VOU1BFQywgJm5mdWxubF9sb2dnZXIpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibG9nOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbG9nZ2VyXG4iKTsKKwkJZ290byBjbGVhbnVwX3N1YnN5czsKKwl9CisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19jcmVhdGUoIm5mbmV0bGlua19sb2ciLCAwNDQwLAogCQkJIHByb2NfbmV0X25ldGZpbHRlciwgJm5mdWxfZmlsZV9vcHMpKQotCQlnb3RvIGNsZWFudXBfc3Vic3lzOworCQlnb3RvIGNsZWFudXBfbG9nZ2VyOwogI2VuZGlmCiAJcmV0dXJuIHN0YXR1czsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCitjbGVhbnVwX2xvZ2dlcjoKKwluZl9sb2dfdW5yZWdpc3RlcigmbmZ1bG5sX2xvZ2dlcik7CisjZW5kaWYKIGNsZWFudXBfc3Vic3lzOgogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZ1bG5sX3N1YnN5cyk7Ci0jZW5kaWYKIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjoKIAluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IDViYWNjZmEuLjUwOWE5NTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTYyNSw2ICs2MjUsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woeHRfZnJlZV90YWJsZV9pbmZvKTsKIAordm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbywKKwkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJdm9pZCAqcCA9IG9sZGluZm8tPmVudHJpZXNbY3B1XTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG9sZGluZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+ZW50cmllc1tjcHVdKTsKKwkJbmV3aW5mby0+ZW50cmllc1tjcHVdID0gcDsKKwl9CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KTsKKwogLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCAmIHJlZi4gIFJldHVybnMgRVJSX1BUUigpIG9uIGVycm9yLiAqLwogc3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZiwKIAkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKQEAgLTY3MSwyMSArNjg1LDIyIEBACiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm8sICpwcml2YXRlOwogCiAJLyogRG8gdGhlIHN1YnN0aXR1dGlvbi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOwogCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAkvKiBDaGVjayBpbnNpZGUgbG9jazogaXMgdGhlIG9sZCBudW1iZXIgY29ycmVjdD8gKi8KIAlpZiAobnVtX2NvdW50ZXJzICE9IHByaXZhdGUtPm51bWJlcikgewogCQlkdXByaW50ZigibnVtX2NvdW50ZXJzICE9IHRhYmxlLT5wcml2YXRlLT5udW1iZXIgKCV1LyV1KVxuIiwKIAkJCSBudW1fY291bnRlcnMsIHByaXZhdGUtPm51bWJlcik7Ci0JCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCQltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKIAkJKmVycm9yID0gLUVBR0FJTjsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW9sZGluZm8gPSBwcml2YXRlOwotCXRhYmxlLT5wcml2YXRlID0gbmV3aW5mbzsKKwlyY3VfYXNzaWduX3BvaW50ZXIodGFibGUtPnByaXZhdGUsIG5ld2luZm8pOwogCW5ld2luZm8tPmluaXRpYWxfZW50cmllcyA9IG9sZGluZm8tPmluaXRpYWxfZW50cmllczsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKIAorCXN5bmNocm9uaXplX25ldCgpOwogCXJldHVybiBvbGRpbmZvOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfcmVwbGFjZV90YWJsZSk7CkBAIC03MTksNyArNzM0LDggQEAKIAogCS8qIFNpbXBsaWZpZXMgcmVwbGFjZV90YWJsZSBjb2RlLiAqLwogCXRhYmxlLT5wcml2YXRlID0gYm9vdHN0cmFwOwotCXJ3bG9ja19pbml0KCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfaW5pdCgmdGFibGUtPmxvY2spOworCiAJaWYgKCF4dF9yZXBsYWNlX3RhYmxlKHRhYmxlLCAwLCBuZXdpbmZvLCAmcmV0KSkKIAkJZ290byB1bmxvY2s7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSEwuYyBiL25ldC9uZXRmaWx0ZXIveHRfSEwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3ODllCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9ITC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogVFRMIG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIElQIHRhYmxlcworICogKEMpIDIwMDAsMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBIb3AgTGltaXQgbW9kaWZpY2F0aW9uIHRhcmdldCBmb3IgaXA2dGFibGVzCisgKiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaD4KKworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBIb3BsaW1pdC9UVEwgTGltaXQgZmllbGQgbW9kaWZpY2F0aW9uIHRhcmdldCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0dGxfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCWludCBuZXdfdHRsOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlpcGggPSBpcF9oZHIoc2tiKTsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQVF9UVExfU0VUOgorCQkJbmV3X3R0bCA9IGluZm8tPnR0bDsKKwkJCWJyZWFrOworCQljYXNlIElQVF9UVExfSU5DOgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsICsgaW5mby0+dHRsOworCQkJaWYgKG5ld190dGwgPiAyNTUpCisJCQkJbmV3X3R0bCA9IDI1NTsKKwkJCWJyZWFrOworCQljYXNlIElQVF9UVExfREVDOgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsIC0gaW5mby0+dHRsOworCQkJaWYgKG5ld190dGwgPCAwKQorCQkJCW5ld190dGwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXdfdHRsID0gaXBoLT50dGw7CisJCQlicmVhazsKKwl9CisKKwlpZiAobmV3X3R0bCAhPSBpcGgtPnR0bCkgeworCQljc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhpcGgtPnR0bCA8PCA4KSwKKwkJCQkJICAgaHRvbnMobmV3X3R0bCA8PCA4KSk7CisJCWlwaC0+dHRsID0gbmV3X3R0bDsKKwl9CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2hsX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmg7CisJY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJaW50IG5ld19obDsKKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCisJCXJldHVybiBORl9EUk9QOworCisJaXA2aCA9IGlwdjZfaGRyKHNrYik7CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwkJY2FzZSBJUDZUX0hMX1NFVDoKKwkJCW5ld19obCA9IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfSU5DOgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0ICsgaW5mby0+aG9wX2xpbWl0OworCQkJaWYgKG5ld19obCA+IDI1NSkKKwkJCQluZXdfaGwgPSAyNTU7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0RFQzoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdCAtIGluZm8tPmhvcF9saW1pdDsKKwkJCWlmIChuZXdfaGwgPCAwKQorCQkJCW5ld19obCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCX0KKworCWlwNmgtPmhvcF9saW1pdCA9IG5ld19obDsKKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIGJvb2wgdHRsX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCisJaWYgKGluZm8tPm1vZGUgPiBJUFRfVFRMX01BWE1PREUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCisJCQlpbmZvLT5tb2RlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoaW5mby0+bW9kZSAhPSBJUFRfVFRMX1NFVCAmJiBpbmZvLT50dGwgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKKwkJCWluZm8tPm1vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCisJCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90Z19yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUgICAgICAgPSAiVFRMIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNCwKKwkJLnRhcmdldCAgICAgPSB0dGxfdGcsCisJCS50YXJnZXRzaXplID0gc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pLAorCQkudGFibGUgICAgICA9ICJtYW5nbGUiLAorCQkuY2hlY2tlbnRyeSA9IHR0bF90Z19jaGVjaywKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiSEwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY2LAorCQkudGFyZ2V0ICAgICA9IGhsX3RnNiwKKwkJLnRhcmdldHNpemUgPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCisJCS50YWJsZSAgICAgID0gIm1hbmdsZSIsCisJCS5jaGVja2VudHJ5ID0gaGxfdGc2X2NoZWNrLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBobF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMoaGxfdGdfcmVnLCBBUlJBWV9TSVpFKGhsX3RnX3JlZykpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGxfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0cyhobF90Z19yZWcsIEFSUkFZX1NJWkUoaGxfdGdfcmVnKSk7Cit9CisKK21vZHVsZV9pbml0KGhsX3RnX2luaXQpOworbW9kdWxlX2V4aXQoaGxfdGdfZXhpdCk7CitNT0RVTEVfQUxJQVMoImlwdF9UVEwiKTsKK01PRFVMRV9BTElBUygiaXA2dF9ITCIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmNzg0MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiB4dF9MRUQuYyAtIG5ldGZpbHRlciB0YXJnZXQgdG8gbWFrZSBMRURzIGJsaW5rIHVwb24gcGFja2V0IG1hdGNoZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWRhbSBOaWVsc2VuIDxhLm5pZWxzZW5Ac2hpa2FkaS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfTEVELmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkYW0gTmllbHNlbiA8YS5uaWVsc2VuQHNoaWthZGkubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiB0cmlnZ2VyIExFRCBkZXZpY2VzIG9uIHBhY2tldCBtYXRjaCIpOworCisvKgorICogVGhpcyBpcyBkZWNsYXJlZCBpbiBoZXJlICh0aGUga2VybmVsIG1vZHVsZSkgb25seSwgdG8gYXZvaWQgaGF2aW5nIHRoZXNlCisgKiBkZXBlbmRlbmNpZXMgaW4gdXNlcnNwYWNlIGNvZGUuICBUaGlzIGlzIHdoYXQgeHRfbGVkX2luZm8uaW50ZXJuYWxfZGF0YQorICogcG9pbnRzIHRvLgorICovCitzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgeworCXN0cnVjdCBsZWRfdHJpZ2dlciBuZXRmaWx0ZXJfbGVkX3RyaWdnZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50CitsZWRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwkvKgorCSAqIElmICJhbHdheXMgYmxpbmsiIGlzIGVuYWJsZWQsIGFuZCB0aGVyZSdzIHN0aWxsIHNvbWUgdGltZSB1bnRpbCB0aGUKKwkgKiBMRUQgd2lsbCBzd2l0Y2ggb2ZmLCBicmllZmx5IHN3aXRjaCBpdCBvZmYgbm93LgorCSAqLworCWlmICgobGVkaW5mby0+ZGVsYXkgPiAwKSAmJiBsZWRpbmZvLT5hbHdheXNfYmxpbmsgJiYKKwkgICAgdGltZXJfcGVuZGluZygmbGVkaW50ZXJuYWwtPnRpbWVyKSkKKwkJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsTEVEX09GRik7CisKKwlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX0ZVTEwpOworCisJLyogSWYgdGhlcmUncyBhIHBvc2l0aXZlIGRlbGF5LCBzdGFydC91cGRhdGUgdGhlIHRpbWVyICovCisJaWYgKGxlZGluZm8tPmRlbGF5ID4gMCkgeworCQltb2RfdGltZXIoJmxlZGludGVybmFsLT50aW1lciwKKwkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobGVkaW5mby0+ZGVsYXkpKTsKKworCS8qIE90aGVyd2lzZSBpZiB0aGVyZSB3YXMgbm8gZGVsYXkgZ2l2ZW4sIGJsaW5rIGFzIGZhc3QgYXMgcG9zc2libGUgKi8KKwl9IGVsc2UgaWYgKGxlZGluZm8tPmRlbGF5ID09IDApIHsKKwkJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9PRkYpOworCX0KKworCS8qIGVsc2UgdGhlIGRlbGF5IGlzIG5lZ2F0aXZlLCB3aGljaCBtZWFucyBzd2l0Y2ggb24gYW5kIHN0YXkgb24gKi8KKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIHZvaWQgbGVkX3RpbWVvdXRfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IChzdHJ1Y3QgeHRfbGVkX2luZm8gKilkYXRhOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWwgPSBsZWRpbmZvLT5pbnRlcm5hbF9kYXRhOworCisJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9PRkYpOworfQorCitzdGF0aWMgYm9vbCBsZWRfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsOworCWludCBlcnI7CisKKwlpZiAobGVkaW5mby0+aWRbMF0gPT0gJ1wwJykgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogTm8gJ2lkJyBwYXJhbWV0ZXIgZ2l2ZW4uXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxlZGludGVybmFsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZWRpbnRlcm5hbCkgeworCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlci5uYW1lID0gbGVkaW5mby0+aWQ7CisKKwllcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcigmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FCisJCQkiOiBsZWRfdHJpZ2dlcl9yZWdpc3RlcigpIGZhaWxlZFxuIik7CisJCWlmIChlcnIgPT0gLUVFWElTVCkKKwkJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkJCSI6IFRyaWdnZXIgbmFtZSBpcyBhbHJlYWR5IGluIHVzZS5cbiIpOworCQlnb3RvIGV4aXRfYWxsb2M7CisJfQorCisJLyogU2VlIGlmIHdlIG5lZWQgdG8gc2V0IHVwIGEgdGltZXIgKi8KKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKQorCQlzZXR1cF90aW1lcigmbGVkaW50ZXJuYWwtPnRpbWVyLCBsZWRfdGltZW91dF9jYWxsYmFjaywKKwkJCSAgICAodW5zaWduZWQgbG9uZylsZWRpbmZvKTsKKworCWxlZGluZm8tPmludGVybmFsX2RhdGEgPSBsZWRpbnRlcm5hbDsKKworCXJldHVybiB0cnVlOworCitleGl0X2FsbG9jOgorCWtmcmVlKGxlZGludGVybmFsKTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbGVkX3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKQorCQlkZWxfdGltZXJfc3luYygmbGVkaW50ZXJuYWwtPnRpbWVyKTsKKworCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIpOworCWtmcmVlKGxlZGludGVybmFsKTsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgbGVkX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJMRUQiLAorCS5yZXZpc2lvbgk9IDAsCisJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKKwkudGFyZ2V0CQk9IGxlZF90ZywKKwkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfbGVkX2luZm8pKSwKKwkuY2hlY2tlbnRyeQk9IGxlZF90Z19jaGVjaywKKwkuZGVzdHJveQk9IGxlZF90Z19kZXN0cm95LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmbGVkX3RnX3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZWRfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZsZWRfdGdfcmVnKTsKK30KKworbW9kdWxlX2luaXQobGVkX3RnX2luaXQpOworbW9kdWxlX2V4aXQobGVkX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDViZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAoQykgMjAwOC0yMDA5IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaD4KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QgbmZfY3Rfb3JpZ19pcHY0X3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqbmZfY3Rfb3JpZ19pcHY2X3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXA2OworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAoreHRfY2x1c3Rlcl9oYXNoX2lwdjQodV9pbnQzMl90IGlwLCBjb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXJldHVybiBqaGFzaF8xd29yZChpcCwgaW5mby0+aGFzaF9zZWVkKTsKK30KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3h0X2NsdXN0ZXJfaGFzaF9pcHY2KGNvbnN0IHZvaWQgKmlwLCBjb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXJldHVybiBqaGFzaDIoaXAsIE5GX0NUX1RVUExFX0wzU0laRSAvIHNpemVvZihfX3UzMiksIGluZm8tPmhhc2hfc2VlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Cit4dF9jbHVzdGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQljb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXVfaW50MzJfdCBoYXNoID0gMDsKKworCXN3aXRjaChuZl9jdF9sM251bShjdCkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2hfaXB2NChuZl9jdF9vcmlnX2lwdjRfc3JjKGN0KSwgaW5mbyk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2hfaXB2NihuZl9jdF9vcmlnX2lwdjZfc3JjKGN0KSwgaW5mbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKCgodTY0KWhhc2ggKiBpbmZvLT50b3RhbF9ub2RlcykgPj4gMzIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3h0X2NsdXN0ZXJfaXNfbXVsdGljYXN0X2FkZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQ4X3QgZmFtaWx5KQoreworCWJvb2wgaXNfbXVsdGljYXN0ID0gZmFsc2U7CisKKwlzd2l0Y2goZmFtaWx5KSB7CisJY2FzZSBORlBST1RPX0lQVjQ6CisJCWlzX211bHRpY2FzdCA9IGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLT5kYWRkcik7CisJCWJyZWFrOworCWNhc2UgTkZQUk9UT19JUFY2OgorCQlpc19tdWx0aWNhc3QgPSBpcHY2X2FkZHJfdHlwZSgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpICYKKwkJCQkJCUlQVjZfQUREUl9NVUxUSUNBU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gaXNfbXVsdGljYXN0OworfQorCitzdGF0aWMgYm9vbAoreHRfY2x1c3Rlcl9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYjsKKwljb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXVuc2lnbmVkIGxvbmcgaGFzaDsKKworCS8qIFRoaXMgbWF0Y2ggYXNzdW1lcyB0aGF0IGFsbCBub2RlcyBzZWUgdGhlIHNhbWUgcGFja2V0cy4gVGhpcyBjYW4gYmUKKwkgKiBhY2hpZXZlZCBpZiB0aGUgc3dpdGNoIHRoYXQgY29ubmVjdHMgdGhlIGNsdXN0ZXIgbm9kZXMgc3VwcG9ydCBzb21lCisJICogc29ydCBvZiAncG9ydCBtaXJyb3JpbmcnLiBIb3dldmVyLCBpZiB5b3VyIHN3aXRjaCBkb2VzIG5vdCBzdXBwb3J0CisJICogdGhpcywgeW91ciBjbHVzdGVyIG5vZGVzIGNhbiByZXBseSBBUlAgcmVxdWVzdCB1c2luZyBhIG11bHRpY2FzdCBNQUMKKwkgKiBhZGRyZXNzLiBUaHVzLCB5b3VyIHN3aXRjaCB3aWxsIGZsb29kIHRoZSBzYW1lIHBhY2tldHMgdG8gdGhlCisJICogY2x1c3RlciBub2RlcyB3aXRoIHRoZSBzYW1lIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4gVXNpbmcgYSBtdWx0aWNhc3QKKwkgKiBsaW5rIGFkZHJlc3MgaXMgYSBSRkMgMTgxMiAoc2VjdGlvbiAzLjMuMikgdmlvbGF0aW9uLCBidXQgdGhpcyB3b3JrcworCSAqIGZpbmUgaW4gcHJhY3Rpc2UuCisJICoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBpZiB5b3UgdXNlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MsIHRoZSBsaW5rIGxheWVyCisJICogc2V0cyBza2J1ZmYncyBwa3RfdHlwZSB0byBQQUNLRVRfTVVMVElDQVNULCB3aGljaCBpcyBub3QgYWNjZXB0ZWQKKwkgKiBieSBUQ1AgYW5kIG90aGVycyBmb3IgcGFja2V0cyBjb21pbmcgdG8gdGhpcyBub2RlLiBGb3IgdGhhdCByZWFzb24sCisJICogdGhpcyBtYXRjaCBtYW5nbGVzIHNrYnVmZidzIHBrdF90eXBlIGlmIGl0IGRldGVjdHMgYSBwYWNrZXQKKwkgKiBhZGRyZXNzZWQgdG8gYSB1bmljYXN0IGFkZHJlc3MgYnV0IHVzaW5nIFBBQ0tFVF9NVUxUSUNBU1QuIFllcywgSQorCSAqIGtub3csIG1hdGNoZXMgc2hvdWxkIG5vdCBhbHRlciBwYWNrZXRzLCBidXQgd2UgYXJlIGRvaW5nIHRoaXMgaGVyZQorCSAqIGJlY2F1c2Ugd2Ugd291bGQgbmVlZCB0byBhZGQgYSBQS1RUWVBFIHRhcmdldCBmb3IgdGhpcyBzb2xlIHB1cnBvc2UuCisJICovCisJaWYgKCF4dF9jbHVzdGVyX2lzX211bHRpY2FzdF9hZGRyKHNrYiwgcGFyLT5mYW1pbHkpICYmCisJICAgIHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkgeworCSAgICAJcHNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwl9CisKKwljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCWlmIChjdCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY3QgPT0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjdC0+bWFzdGVyKQorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoKGN0LT5tYXN0ZXIsIGluZm8pOworCWVsc2UKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaChjdCwgaW5mbyk7CisKKwlyZXR1cm4gISEoKDEgPDwgaGFzaCkgJiBpbmZvLT5ub2RlX21hc2spIF4KKwkgICAgICAgISEoaW5mby0+ZmxhZ3MgJiBYVF9DTFVTVEVSX0ZfSU5WKTsKK30KKworc3RhdGljIGJvb2wgeHRfY2x1c3Rlcl9tdF9jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQoreworCXN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWlmIChpbmZvLT5ub2RlX21hc2sgPj0gKDEgPDwgaW5mby0+dG90YWxfbm9kZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAieHRfY2x1c3RlcjogdGhpcyBub2RlIG1hc2sgY2Fubm90IGJlICIKKwkJCQkiaGlnaGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBub2Rlc1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggeHRfY2x1c3Rlcl9tYXRjaCBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJjbHVzdGVyIiwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaAkJPSB4dF9jbHVzdGVyX210LAorCS5jaGVja2VudHJ5CT0geHRfY2x1c3Rlcl9tdF9jaGVja2VudHJ5LAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfY2x1c3Rlcl9tdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZ4dF9jbHVzdGVyX21hdGNoKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X2NsdXN0ZXJfbXRfZmluaSh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnh0X2NsdXN0ZXJfbWF0Y2gpOworfQorCitNT0RVTEVfQVVUSE9SKCJQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogaGFzaC1iYXNlZCBjbHVzdGVyIG1hdGNoIik7CitNT0RVTEVfQUxJQVMoImlwdF9jbHVzdGVyIik7CitNT0RVTEVfQUxJQVMoImlwNnRfY2x1c3RlciIpOworbW9kdWxlX2luaXQoeHRfY2x1c3Rlcl9tdF9pbml0KTsKK21vZHVsZV9leGl0KHh0X2NsdXN0ZXJfbXRfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYwppbmRleCA3ZjQwNGNjLi42ODA5ODA5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqZm91bmQ7CiAJc3RydWN0IHh0X2Nvbm5saW1pdF9jb25uICpjb25uOwogCXN0cnVjdCB4dF9jb25ubGltaXRfY29ubiAqdG1wOwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpmb3VuZF9jdDsKKwlzdHJ1Y3QgbmZfY29ubiAqZm91bmRfY3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGFzaDsKIAlib29sIGFkZGl0ID0gdHJ1ZTsKIAlpbnQgbWF0Y2hlcyA9IDA7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAogCS8qIGNoZWNrIHRoZSBzYXZlZCBjb25uZWN0aW9ucyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCB0bXAsIGhhc2gsIGxpc3QpIHsKLQkJZm91bmQgICAgPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJmNvbm4tPnR1cGxlKTsKKwkJZm91bmQgICAgPSBuZl9jb25udHJhY2tfZmluZF9nZXQoJmluaXRfbmV0LCAmY29ubi0+dHVwbGUpOwogCQlmb3VuZF9jdCA9IE5VTEw7CiAKIAkJaWYgKGZvdW5kICE9IE5VTEwpCkBAIC0xNTEsNiArMTUxLDcgQEAKIAkJCSAqIHdlIGRvIG5vdCBjYXJlIGFib3V0IGNvbm5lY3Rpb25zIHdoaWNoIGFyZQogCQkJICogY2xvc2VkIGFscmVhZHkgLT4gZGl0Y2ggaXQKIAkJCSAqLworCQkJbmZfY3RfcHV0KGZvdW5kX2N0KTsKIAkJCWxpc3RfZGVsKCZjb25uLT5saXN0KTsKIAkJCWtmcmVlKGNvbm4pOwogCQkJY29udGludWU7CkBAIC0xNjAsNiArMTYxLDcgQEAKIAkJICAgIG1hdGNoLT5mYW1pbHkpKQogCQkJLyogc2FtZSBzb3VyY2UgbmV0d29yayAtPiBiZSBjb3VudGVkISAqLwogCQkJKyttYXRjaGVzOworCQluZl9jdF9wdXQoZm91bmRfY3QpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKaW5kZXggZjk3ZmRlZC4uYTViNTM2OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkvKiBpbml0aWFsaXplIGhhc2ggd2l0aCByYW5kb20gdmFsIGF0IHRoZSB0aW1lIHdlIGFsbG9jYXRlCiAJICogdGhlIGZpcnN0IGhhc2h0YWJsZSBlbnRyeSAqLwogCWlmICghaHQtPnJuZF9pbml0aWFsaXplZCkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgc2l6ZW9mKGh0LT5ybmQpKTsKIAkJaHQtPnJuZF9pbml0aWFsaXplZCA9IDE7CiAJfQogCkBAIC01NjUsOCArNTY1LDcgQEAKIHN0YXRpYyBib29sCiBoYXNobGltaXRfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0JY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICpyID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKilwYXItPm1hdGNoaW5mbyktPnUubWFzdGVyOworCWNvbnN0IHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9IHBhci0+bWF0Y2hpbmZvOwogCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbyA9IHItPmhpbmZvOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoOwpAQCAtNzAyLDggKzcwMSw2IEBACiAJfQogCW11dGV4X3VubG9jaygmaGxpbWl0X211dGV4KTsKIAotCS8qIFVnbHkgaGFjazogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0ICovCi0Jci0+dS5tYXN0ZXIgPSByOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjE1NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGwuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVFRMCisgKiAoQykgMjAwMCwyMDAxIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUKKyAqIChDKSAyMDAxLTIwMDIgTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmg+CisKK01PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IEhvcGxpbWl0L1RUTCBmaWVsZCBtYXRjaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcHRfdHRsIik7CitNT0RVTEVfQUxJQVMoImlwNnRfaGwiKTsKKworc3RhdGljIGJvb2wgdHRsX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcHRfdHRsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKwljb25zdCB1OCB0dGwgPSBpcF9oZHIoc2tiKS0+dHRsOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVBUX1RUTF9FUToKKwkJCXJldHVybiB0dGwgPT0gaW5mby0+dHRsOworCQljYXNlIElQVF9UVExfTkU6CisJCQlyZXR1cm4gdHRsICE9IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX0xUOgorCQkJcmV0dXJuIHR0bCA8IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX0dUOgorCQkJcmV0dXJuIHR0bCA+IGluZm8tPnR0bDsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF90dGw6IHVua25vd24gbW9kZSAlZFxuIiwKKwkJCQlpbmZvLT5tb2RlKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGhsX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9obF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVA2VF9ITF9FUToKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPT0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9ORToKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgIT0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9MVDoKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPCBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0dUOgorCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA+IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9obDogdW5rbm93biBtb2RlICVkXG4iLAorCQkJCWluZm8tPm1vZGUpOworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBobF9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUgICAgICAgPSAidHRsIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNCwKKwkJLm1hdGNoICAgICAgPSB0dGxfbXQsCisJCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCBpcHRfdHRsX2luZm8pLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICJobCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCisJCS5tYXRjaCAgICAgID0gaGxfbXQ2LAorCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSwKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGxfbXRfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKGhsX210X3JlZywgQVJSQVlfU0laRShobF9tdF9yZWcpKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhsX210X2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoZXMoaGxfbXRfcmVnLCBBUlJBWV9TSVpFKGhsX210X3JlZykpOworfQorCittb2R1bGVfaW5pdChobF9tdF9pbml0KTsKK21vZHVsZV9leGl0KGhsX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IGM5MDhkNjkuLjJlODA4OWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTE0LDYgKzE0LDExIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0Lmg+CiAKK3N0cnVjdCB4dF9saW1pdF9wcml2IHsKKwl1bnNpZ25lZCBsb25nIHByZXY7CisJdWludDMyX3QgY3JlZGl0OworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGVydmUgRXljaGVubmUgPHJ2QHdhbGxmaXJlLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogcmF0ZS1saW1pdCBtYXRjaCIpOwpAQCAtNjAsMTggKzY1LDE4IEBACiBzdGF0aWMgYm9vbAogbGltaXRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3JhdGVpbmZvICpyID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKilwYXItPm1hdGNoaW5mbyktPm1hc3RlcjsKKwljb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKnIgPSBwYXItPm1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqcHJpdiA9IHItPm1hc3RlcjsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKIAlzcGluX2xvY2tfYmgoJmxpbWl0X2xvY2spOwotCXItPmNyZWRpdCArPSAobm93IC0geGNoZygmci0+cHJldiwgbm93KSkgKiBDUkVESVRTX1BFUl9KSUZGWTsKLQlpZiAoci0+Y3JlZGl0ID4gci0+Y3JlZGl0X2NhcCkKLQkJci0+Y3JlZGl0ID0gci0+Y3JlZGl0X2NhcDsKKwlwcml2LT5jcmVkaXQgKz0gKG5vdyAtIHhjaGcoJnByaXYtPnByZXYsIG5vdykpICogQ1JFRElUU19QRVJfSklGRlk7CisJaWYgKHByaXYtPmNyZWRpdCA+IHItPmNyZWRpdF9jYXApCisJCXByaXYtPmNyZWRpdCA9IHItPmNyZWRpdF9jYXA7CiAKLQlpZiAoci0+Y3JlZGl0ID49IHItPmNvc3QpIHsKKwlpZiAocHJpdi0+Y3JlZGl0ID49IHItPmNvc3QpIHsKIAkJLyogV2UncmUgbm90IGxpbWl0ZWQuICovCi0JCXItPmNyZWRpdCAtPSByLT5jb3N0OworCQlwcml2LT5jcmVkaXQgLT0gci0+Y29zdDsKIAkJc3Bpbl91bmxvY2tfYmgoJmxpbWl0X2xvY2spOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC05NSw2ICsxMDAsNyBAQAogc3RhdGljIGJvb2wgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CiAJc3RydWN0IHh0X3JhdGVpbmZvICpyID0gcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X2xpbWl0X3ByaXYgKnByaXY7CiAKIAkvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovCiAJaWYgKHItPmJ1cnN0ID09IDAKQEAgLTEwNCwxOSArMTEwLDMwIEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2YgY291bnRlcnMuICovCi0Jci0+bWFzdGVyID0gcjsKKwlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBzdGF0ZS4gKi8KKwlyLT5tYXN0ZXIgPSBwcml2OwogCWlmIChyLT5jb3N0ID09IDApIHsKIAkJLyogVXNlciBhdmcgaW4gc2Vjb25kcyAqIFhUX0xJTUlUX1NDQUxFOiBjb252ZXJ0IHRvIGppZmZpZXMgKgogCQkgICAxMjguICovCi0JCXItPnByZXYgPSBqaWZmaWVzOwotCQlyLT5jcmVkaXQgPSB1c2VyMmNyZWRpdHMoci0+YXZnICogci0+YnVyc3QpOwkgLyogQ3JlZGl0cyBmdWxsLiAqLworCQlwcml2LT5wcmV2ID0gamlmZmllczsKKwkJcHJpdi0+Y3JlZGl0ID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsgLyogQ3JlZGl0cyBmdWxsLiAqLwogCQlyLT5jcmVkaXRfY2FwID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsgLyogQ3JlZGl0cyBmdWxsLiAqLwogCQlyLT5jb3N0ID0gdXNlcjJjcmVkaXRzKHItPmF2Zyk7CiAJfQogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBsaW1pdF9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWtmcmVlKGluZm8tPm1hc3Rlcik7Cit9CisKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvIHsKIAl1X2ludDMyX3QgYXZnOwpAQCAtMTY3LDYgKzE4NCw3IEBACiAJLmZhbWlseSAgICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICAgICAgICA9IGxpbWl0X210LAogCS5jaGVja2VudHJ5ICAgICAgID0gbGltaXRfbXRfY2hlY2ssCisJLmRlc3Ryb3kgICAgICAgICAgPSBsaW1pdF9tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9yYXRlaW5mbyksCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRzaXplICAgICAgID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8pLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwppbmRleCAxYmNkZmMxLi44ZDI4Y2E1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwpAQCAtMjAsMTMgKzIwLDEzIEBACiBNT0RVTEVfQUxJQVMoImlwdF9waHlzZGV2Iik7CiBNT0RVTEVfQUxJQVMoImlwNnRfcGh5c2RldiIpOwogCisKIHN0YXRpYyBib29sCiBwaHlzZGV2X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCWludCBpOwotCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXTsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJY29uc3Qgc3RydWN0IHh0X3BoeXNkZXZfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWJvb2wgcmV0OworCXVuc2lnbmVkIGxvbmcgcmV0OwogCWNvbnN0IGNoYXIgKmluZGV2LCAqb3V0ZGV2OwogCWNvbnN0IHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlOwogCkBAIC02OCwxMSArNjgsNyBAQAogCWlmICghKGluZm8tPmJpdG1hc2sgJiBYVF9QSFlTREVWX09QX0lOKSkKIAkJZ290byBtYXRjaF9vdXRkZXY7CiAJaW5kZXYgPSBuZl9icmlkZ2UtPnBoeXNpbmRldiA/IG5mX2JyaWRnZS0+cGh5c2luZGV2LT5uYW1lIDogbnVsbGRldm5hbWU7Ci0JZm9yIChpID0gMCwgcmV0ID0gZmFsc2U7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgaW50KTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5waHlzaW5kZXYpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPmluX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKGluZGV2LCBpbmZvLT5waHlzaW5kZXYsIGluZm8tPmluX21hc2spOwogCiAJaWYgKCFyZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfSU4pKQogCQlyZXR1cm4gZmFsc2U7CkBAIC04MiwxMyArNzgsOSBAQAogCQlyZXR1cm4gdHJ1ZTsKIAlvdXRkZXYgPSBuZl9icmlkZ2UtPnBoeXNvdXRkZXYgPwogCQkgbmZfYnJpZGdlLT5waHlzb3V0ZGV2LT5uYW1lIDogbnVsbGRldm5hbWU7Ci0JZm9yIChpID0gMCwgcmV0ID0gZmFsc2U7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgaW50KTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBpbnQgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+cGh5c291dGRldilbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+b3V0X21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKG91dGRldiwgaW5mby0+cGh5c291dGRldiwgaW5mby0+b3V0X21hc2spOwogCi0JcmV0dXJuIHJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9PVVQpOworCXJldHVybiAoISFyZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfT1VUKSk7CiB9CiAKIHN0YXRpYyBib29sIHBoeXNkZXZfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKaW5kZXggYzg0ZmNlNS4uMDFkZDA3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwpAQCAtOSw2ICs5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmg+CiAKK3N0cnVjdCB4dF9xdW90YV9wcml2IHsKKwl1aW50NjRfdCBxdW90YTsKK307CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlNhbSBKb2huc3RvbiA8c2FtakBzYW1qLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogY291bnRkb3duIHF1b3RhIG1hdGNoIik7CkBAIC0yMCwxOCArMjQsMjAgQEAKIHN0YXRpYyBib29sCiBxdW90YV9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9Ci0JCSgoY29uc3Qgc3RydWN0IHh0X3F1b3RhX2luZm8gKilwYXItPm1hdGNoaW5mbyktPm1hc3RlcjsKKwlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9ICh2b2lkICopcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X3F1b3RhX3ByaXYgKnByaXYgPSBxLT5tYXN0ZXI7CiAJYm9vbCByZXQgPSBxLT5mbGFncyAmIFhUX1FVT1RBX0lOVkVSVDsKIAogCXNwaW5fbG9ja19iaCgmcXVvdGFfbG9jayk7Ci0JaWYgKHEtPnF1b3RhID49IHNrYi0+bGVuKSB7Ci0JCXEtPnF1b3RhIC09IHNrYi0+bGVuOworCWlmIChwcml2LT5xdW90YSA+PSBza2ItPmxlbikgeworCQlwcml2LT5xdW90YSAtPSBza2ItPmxlbjsKIAkJcmV0ID0gIXJldDsKIAl9IGVsc2UgewogCQkvKiB3ZSBkbyBub3QgYWxsb3cgZXZlbiBzbWFsbCBwYWNrZXRzIGZyb20gbm93IG9uICovCi0JCXEtPnF1b3RhID0gMDsKKwkJcHJpdi0+cXVvdGEgPSAwOwogCX0KKwkvKiBDb3B5IHF1b3RhIGJhY2sgdG8gbWF0Y2hpbmZvIHNvIHRoYXQgaXB0YWJsZXMgY2FuIGRpc3BsYXkgaXQgKi8KKwlxLT5xdW90YSA9IHByaXYtPnF1b3RhOwogCXNwaW5fdW5sb2NrX2JoKCZxdW90YV9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC00MywxNyArNDksMjggQEAKIAogCWlmIChxLT5mbGFncyAmIH5YVF9RVU9UQV9NQVNLKQogCQlyZXR1cm4gZmFsc2U7Ci0JLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIGNvdW50ZXJzLiAqLwotCXEtPm1hc3RlciA9IHE7CisKKwlxLT5tYXN0ZXIgPSBrbWFsbG9jKHNpemVvZigqcS0+bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHEtPm1hc3RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBxdW90YV9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUocS0+bWFzdGVyKTsKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBxdW90YV9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAgICAgICA9ICJxdW90YSIsCiAJLnJldmlzaW9uICAgPSAwLAogCS5mYW1pbHkgICAgID0gTkZQUk9UT19VTlNQRUMsCiAJLm1hdGNoICAgICAgPSBxdW90YV9tdCwKIAkuY2hlY2tlbnRyeSA9IHF1b3RhX210X2NoZWNrLAorCS5kZXN0cm95ICAgID0gcXVvdGFfbXRfZGVzdHJveSwKIAkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfcXVvdGFfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwppbmRleCAwZDc1MTQxLi5kOGMwZjhmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKQEAgLTE2LDYgKzE2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogCitzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgeworCXVpbnQzMl90IGNvdW50OworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IHN0YXRpc3RpY3MtYmFzZWQgbWF0Y2hpbmcgKFwiTnRoXCIsIHJhbmRvbSkiKTsKQEAgLTI3LDcgKzMxLDcgQEAKIHN0YXRpYyBib29sCiBzdGF0aXN0aWNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gKHZvaWQgKilwYXItPm1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAlib29sIHJldCA9IGluZm8tPmZsYWdzICYgWFRfU1RBVElTVElDX0lOVkVSVDsKIAogCXN3aXRjaCAoaW5mby0+bW9kZSkgewpAQCAtMzYsMTAgKzQwLDkgQEAKIAkJCXJldCA9ICFyZXQ7CiAJCWJyZWFrOwogCWNhc2UgWFRfU1RBVElTVElDX01PREVfTlRIOgotCQlpbmZvID0gaW5mby0+bWFzdGVyOwogCQlzcGluX2xvY2tfYmgoJm50aF9sb2NrKTsKLQkJaWYgKGluZm8tPnUubnRoLmNvdW50KysgPT0gaW5mby0+dS5udGguZXZlcnkpIHsKLQkJCWluZm8tPnUubnRoLmNvdW50ID0gMDsKKwkJaWYgKGluZm8tPm1hc3Rlci0+Y291bnQrKyA9PSBpbmZvLT51Lm50aC5ldmVyeSkgeworCQkJaW5mby0+bWFzdGVyLT5jb3VudCA9IDA7CiAJCQlyZXQgPSAhcmV0OwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZudGhfbG9jayk7CkBAIC01NiwxNiArNTksMzEgQEAKIAlpZiAoaW5mby0+bW9kZSA+IFhUX1NUQVRJU1RJQ19NT0RFX01BWCB8fAogCSAgICBpbmZvLT5mbGFncyAmIH5YVF9TVEFUSVNUSUNfTUFTSykKIAkJcmV0dXJuIGZhbHNlOwotCWluZm8tPm1hc3RlciA9IGluZm87CisKKwlpbmZvLT5tYXN0ZXIgPSBremFsbG9jKHNpemVvZigqaW5mby0+bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8tPm1hc3RlciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpbmZvLT5tYXN0ZXItPmNvdW50ID0gaW5mby0+dS5udGguY291bnQ7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgc3RhdGlzdGljX210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUoaW5mby0+bWFzdGVyKTsKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB4dF9zdGF0aXN0aWNfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgICAgICAgPSAic3RhdGlzdGljIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICA9IHN0YXRpc3RpY19tdCwKIAkuY2hlY2tlbnRyeSA9IHN0YXRpc3RpY19tdF9jaGVjaywKKwkuZGVzdHJveSAgICA9IHN0YXRpc3RpY19tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9NYWtlZmlsZSBiL25ldC9uZXRsaW5rL01ha2VmaWxlCmluZGV4IGUzNTg5YzIuLmJkZDZkZGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL01ha2VmaWxlCisrKyBiL25ldC9uZXRsaW5rL01ha2VmaWxlCkBAIC0yLDQgKzIsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLgogIwogCi1vYmoteSAgCQkJCTo9IGFmX25ldGxpbmsubyBhdHRyLm8gZ2VuZXRsaW5rLm8KK29iai15ICAJCQkJOj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggM2FlM2NiOC4uOGI2YmJiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtODUsNiArODUsOCBAQAogCiAjZGVmaW5lIE5FVExJTktfS0VSTkVMX1NPQ0tFVAkweDEKICNkZWZpbmUgTkVUTElOS19SRUNWX1BLVElORk8JMHgyCisjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IJMHg0CisjZGVmaW5lIE5FVExJTktfUkVDVl9OT19FTk9CVUZTCTB4OAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sa19zayhzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC03MTYsMTAgKzcxOCwxNSBAQAogCiBzdGF0aWMgdm9pZCBuZXRsaW5rX292ZXJydW4oc3RydWN0IHNvY2sgKnNrKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbmxrX3NrKHNrKS0+c3RhdGUpKSB7Ci0JCXNrLT5za19lcnIgPSBFTk9CVUZTOwotCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOworCisJaWYgKCEobmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9OT19FTk9CVUZTKSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJm5sa19zayhzayktPnN0YXRlKSkgeworCQkJc2stPnNrX2VyciA9IEVOT0JVRlM7CisJCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwkJfQogCX0KKwlhdG9taWNfaW5jKCZzay0+c2tfZHJvcHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNvY2sgKm5ldGxpbmtfZ2V0c29ja2J5cGlkKHN0cnVjdCBzb2NrICpzc2ssIHUzMiBwaWQpCkBAIC05NTAsNiArOTU3LDcgQEAKIAl1MzIgcGlkOwogCXUzMiBncm91cDsKIAlpbnQgZmFpbHVyZTsKKwlpbnQgZGVsaXZlcnlfZmFpbHVyZTsKIAlpbnQgY29uZ2VzdGVkOwogCWludCBkZWxpdmVyZWQ7CiAJZ2ZwX3QgYWxsb2NhdGlvbjsKQEAgLTk5NCwxMSArMTAwMiwxNSBAQAogCQluZXRsaW5rX292ZXJydW4oc2spOwogCQkvKiBDbG9uZSBmYWlsZWQuIE5vdGlmeSBBTEwgbGlzdGVuZXJzLiAqLwogCQlwLT5mYWlsdXJlID0gMTsKKwkJaWYgKG5say0+ZmxhZ3MgJiBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SKQorCQkJcC0+ZGVsaXZlcnlfZmFpbHVyZSA9IDE7CiAJfSBlbHNlIGlmIChza19maWx0ZXIoc2ssIHAtPnNrYjIpKSB7CiAJCWtmcmVlX3NrYihwLT5za2IyKTsKIAkJcC0+c2tiMiA9IE5VTEw7CiAJfSBlbHNlIGlmICgodmFsID0gbmV0bGlua19icm9hZGNhc3RfZGVsaXZlcihzaywgcC0+c2tiMikpIDwgMCkgewogCQluZXRsaW5rX292ZXJydW4oc2spOworCQlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IpCisJCQlwLT5kZWxpdmVyeV9mYWlsdXJlID0gMTsKIAl9IGVsc2UgewogCQlwLT5jb25nZXN0ZWQgfD0gdmFsOwogCQlwLT5kZWxpdmVyZWQgPSAxOwpAQCAtMTAyNSw2ICsxMDM3LDcgQEAKIAlpbmZvLnBpZCA9IHBpZDsKIAlpbmZvLmdyb3VwID0gZ3JvdXA7CiAJaW5mby5mYWlsdXJlID0gMDsKKwlpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUgPSAwOwogCWluZm8uY29uZ2VzdGVkID0gMDsKIAlpbmZvLmRlbGl2ZXJlZCA9IDA7CiAJaW5mby5hbGxvY2F0aW9uID0gYWxsb2NhdGlvbjsKQEAgLTEwNDIsMTYgKzEwNTUsMTYgQEAKIAogCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAKLQlpZiAoaW5mby5za2IyKQotCQlrZnJlZV9za2IoaW5mby5za2IyKTsKKwlrZnJlZV9za2IoaW5mby5za2IyKTsKKworCWlmIChpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUpCisJCXJldHVybiAtRU5PQlVGUzsKIAogCWlmIChpbmZvLmRlbGl2ZXJlZCkgewogCQlpZiAoaW5mby5jb25nZXN0ZWQgJiYgKGFsbG9jYXRpb24gJiBfX0dGUF9XQUlUKSkKIAkJCXlpZWxkKCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoaW5mby5mYWlsdXJlKQotCQlyZXR1cm4gLUVOT0JVRlM7CiAJcmV0dXJuIC1FU1JDSDsKIH0KIEVYUE9SVF9TWU1CT0wobmV0bGlua19icm9hZGNhc3QpOwpAQCAtMTExMCw2ICsxMTIzLDcgQEAKIAogCXJlYWRfdW5sb2NrKCZubF90YWJsZV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0wobmV0bGlua19zZXRfZXJyKTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBuZXRsaW5rIHRhYmxlIGdyYWJiZWQgKi8KIHN0YXRpYyB2b2lkIG5ldGxpbmtfdXBkYXRlX3NvY2tldF9tYyhzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssCkBAIC0xMTY3LDYgKzExODEsMjIgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmICh2YWwpCisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVsc2UKKwkJCW5say0+ZmxhZ3MgJj0gfk5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAodmFsKSB7CisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfUkVDVl9OT19FTk9CVUZTOworCQkJY2xlYXJfYml0KDAsICZubGstPnN0YXRlKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbmxrLT53YWl0KTsKKwkJfSBlbHNlCisJCQlubGstPmZsYWdzICY9IH5ORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUzsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTExOTksNiArMTIyOSwyNiBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciA9IDA7CiAJCWJyZWFrOworCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJdmFsID0gbmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IgPyAxIDogMDsKKwkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fAorCQkgICAgcHV0X3VzZXIodmFsLCBvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUyA/IDEgOiAwOworCQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8CisJCSAgICBwdXRfdXNlcih2YWwsIG9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTE1MjUsOCArMTU3NSw3IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfZGVzdHJveV9jYWxsYmFjayhzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0JaWYgKGNiLT5za2IpCi0JCWtmcmVlX3NrYihjYi0+c2tiKTsKKwlrZnJlZV9za2IoY2ItPnNrYik7CiAJa2ZyZWUoY2IpOwogfQogCkBAIC0xNzQzLDEyICsxNzkyLDE4IEBACiAJCQlleGNsdWRlX3BpZCA9IHBpZDsKIAkJfQogCi0JCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciAqLwotCQlubG1zZ19tdWx0aWNhc3Qoc2ssIHNrYiwgZXhjbHVkZV9waWQsIGdyb3VwLCBmbGFncyk7CisJCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciwgYnV0IHByb3BhZ2F0ZQorCQkgKiBkZWxpdmVyeSBlcnJvcnMgaWYgTkVUTElOS19CUk9BRENBU1RfRVJST1IgZmxhZyBpcyBzZXQgKi8KKwkJZXJyID0gbmxtc2dfbXVsdGljYXN0KHNrLCBza2IsIGV4Y2x1ZGVfcGlkLCBncm91cCwgZmxhZ3MpOwogCX0KIAotCWlmIChyZXBvcnQpCi0JCWVyciA9IG5sbXNnX3VuaWNhc3Qoc2ssIHNrYiwgcGlkKTsKKwlpZiAocmVwb3J0KSB7CisJCWludCBlcnIyOworCisJCWVycjIgPSBubG1zZ191bmljYXN0KHNrLCBza2IsIHBpZCk7CisJCWlmICghZXJyIHx8IGVyciA9PSAtRVNSQ0gpCisJCQllcnIgPSBlcnIyOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODQ5LDEyICsxOTA0LDEyIEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsCiAJCQkgInNrICAgICAgIEV0aCBQaWQgICAgR3JvdXBzICAgIgotCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2Nrc1xuIik7CisJCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzICAgICBEcm9wc1xuIik7CiAJZWxzZSB7CiAJCXN0cnVjdCBzb2NrICpzID0gdjsKIAkJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHMpOwogCi0JCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICVkXG4iLAorCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlLThkICUtOGRcbiIsCiAJCQkgICBzLAogCQkJICAgcy0+c2tfcHJvdG9jb2wsCiAJCQkgICBubGstPnBpZCwKQEAgLTE4NjIsNyArMTkxNyw4IEBACiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcm1lbV9hbGxvYyksCiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfd21lbV9hbGxvYyksCiAJCQkgICBubGstPmNiLAotCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JlZmNudCkKKwkJCSAgIGF0b21pY19yZWFkKCZzLT5za19yZWZjbnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX2Ryb3BzKQogCQkJKTsKIAogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCmluZGV4IGU5YzA1YjhmLi40ZTcwNWY4IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTEwODIsNyArMTA4MiwxMSBAQAogCiAJU09DS19ERUJVRyhzaywgIk5FVC9ST006IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LlxuIik7CiAKLQkvKiBCdWlsZCBhIHBhY2tldCAqLworCS8qIEJ1aWxkIGEgcGFja2V0IC0gdGhlIGNvbnZlbnRpb25hbCB1c2VyIGxpbWl0IGlzIDIzNiBieXRlcy4gV2UgY2FuCisJICAgZG8gbHVkaWNyb3VzbHkgbGFyZ2UgTmV0Uk9NIGZyYW1lcyBidXQgbXVzdCBub3Qgb3ZlcmZsb3cgKi8KKwlpZiAobGVuID4gNjU1MzYpCisJCXJldHVybiAtRU1TR1NJWkU7CisKIAlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogc2VuZHRvOiBidWlsZGluZyBwYWNrZXQuXG4iKTsKIAlzaXplID0gbGVuICsgTlJfTkVUV09SS19MRU4gKyBOUl9UUkFOU1BPUlRfTEVOOwogCkBAIC0xNDMyLDcgKzE0MzYsNyBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJCXNwcmludGYobmFtZSwgIm5yJWQiLCBpKTsKLQkJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgbnJfcHJpdmF0ZSksIG5hbWUsIG5yX3NldHVwKTsKKwkJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsIG5hbWUsIG5yX3NldHVwKTsKIAkJaWYgKCFkZXYpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiTkVUL1JPTTogbnJfcHJvdG9faW5pdCAtIHVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2Ugc3RydWN0dXJlXG4iKTsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vbnJfZGV2LmMgYi9uZXQvbmV0cm9tL25yX2Rldi5jCmluZGV4IDZjYWY0NTkuLjM1MTM3MjQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vbnJfZGV2LmMKKysrIGIvbmV0L25ldHJvbS9ucl9kZXYuYwpAQCAtNDIsNyArNDIsNyBAQAogCiBpbnQgbnJfcnhfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKQEAgLTE3MSw4ICsxNzEsNyBAQAogCiBzdGF0aWMgaW50IG5yX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbnJfcHJpdmF0ZSAqbnIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZuci0+c3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCiAJaWYgKCFucl9yb3V0ZV9mcmFtZShza2IsIE5VTEwpKSB7CkBAIC0xODcsMzQgKzE4NiwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5yX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBucl9wcml2YXRlICpuciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJm5yLT5zdGF0czsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIG5yX2hlYWRlcl9vcHMgPSB7CiAJLmNyZWF0ZQk9IG5yX2hlYWRlciwKIAkucmVidWlsZD0gbnJfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5yX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5yX29wZW4sCisJLm5kb19zdG9wCQk9IG5yX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBucl94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gbnJfc2V0X21hY19hZGRyZXNzLAorfTsKIAogdm9pZCBucl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bXR1CQk9IE5SX01BWF9QQUNLRVRfU0laRTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG5yX3htaXQ7Ci0JZGV2LT5vcGVuCQk9IG5yX29wZW47Ci0JZGV2LT5zdG9wCQk9IG5yX2Nsb3NlOwotCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZucl9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJPSAmbnJfaGVhZGVyX29wczsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IE5SX05FVFdPUktfTEVOICsgTlJfVFJBTlNQT1JUX0xFTjsKIAlkZXYtPmFkZHJfbGVuCQk9IEFYMjVfQUREUl9MRU47CiAJZGV2LT50eXBlCQk9IEFSUEhSRF9ORVRST007Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBucl9zZXRfbWFjX2FkZHJlc3M7CiAKIAkvKiBOZXctc3R5bGUgZmxhZ3MuICovCiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlA7Ci0KLQlkZXYtPmdldF9zdGF0cyAJCT0gbnJfZ2V0X3N0YXRzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggMWZjNGE3OC4uNzQ3NzZkZSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC01ODQsNyArNTg0LDcgQEAKIAkJc2tiLT5sZW4gPSBza2JfbGVuOwogCX0KIGRyb3A6Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU2LDggKzc1Niw3IEBACiAJc3Bpbl91bmxvY2soJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwogCiAJc2stPnNrX2RhdGFfcmVhZHkoc2ssIDApOwotCWlmIChjb3B5X3NrYikKLQkJa2ZyZWVfc2tiKGNvcHlfc2tiKTsKKwlrZnJlZV9za2IoY29weV9za2IpOwogCWdvdG8gZHJvcF9uX3Jlc3RvcmU7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvYWZfcGhvbmV0LmMgYi9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCmluZGV4IDEzY2IzMjMuLmE2NjJlNjIgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKKysrIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwpAQCAtMjc1LDggKzI3NSw2IEBACiAJCXJldHVybiAwOwogCiAJcGggPSBwbl9oZHIoc2tiKTsKLQlpZiAocGhvbmV0X2FkZHJlc3NfZ2V0KHNrYi0+ZGV2LCBwaC0+cG5fcmRldikgIT0gcGgtPnBuX3JkZXYpCi0JCXJldHVybiAwOyAvKiB3ZSBhcmUgbm90IHRoZSBkZXN0aW5hdGlvbiAqLwogCWlmIChwaC0+cG5fcmVzID09IFBOX1BSRUZJWCAmJiAhcHNrYl9tYXlfcHVsbChza2IsIDUpKQogCQlyZXR1cm4gMDsKIAlpZiAocGgtPnBuX3JlcyA9PSBQTl9DT01NR1IpIC8qIGluZGljYXRpb25zICovCkBAIC0zNDQsOCArMzQyLDggQEAKIAkJCXN0cnVjdCBwYWNrZXRfdHlwZSAqcGt0dHlwZSwKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJc3RydWN0IHBob25ldGhkciAqcGg7Ci0Jc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBzb2NrYWRkcl9wbiBzYTsKIAl1MTYgbGVuOwogCkBAIC0zNjQsMjkgKzM2MiwyOCBAQAogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKIAlwbl9za2JfZ2V0X2RzdF9zb2NrYWRkcihza2IsICZzYSk7Ci0JaWYgKHBuX3NvY2thZGRyX2dldF9hZGRyKCZzYSkgPT0gMCkKLQkJZ290byBvdXQ7IC8qIGN1cnJlbnRseSwgd2UgY2Fubm90IGJlIGRldmljZSAwICovCiAKLQlzayA9IHBuX2ZpbmRfc29ja19ieV9zYShkZXZfbmV0KGRldiksICZzYSk7Ci0JaWYgKHNrID09IE5VTEwpIHsKKwkvKiBjaGVjayBpZiB3ZSBhcmUgdGhlIGRlc3RpbmF0aW9uICovCisJaWYgKHBob25ldF9hZGRyZXNzX2xvb2t1cChuZXQsIHBuX3NvY2thZGRyX2dldF9hZGRyKCZzYSkpID09IDApIHsKKwkJLyogUGhvbmV0IHBhY2tldCBpbnB1dCAqLworCQlzdHJ1Y3Qgc29jayAqc2sgPSBwbl9maW5kX3NvY2tfYnlfc2EobmV0LCAmc2EpOworCisJCWlmIChzaykKKwkJCXJldHVybiBza19yZWNlaXZlX3NrYihzaywgc2tiLCAwKTsKKwogCQlpZiAoY2FuX3Jlc3BvbmQoc2tiKSkgewogCQkJc2VuZF9vYmpfdW5yZWFjaGFibGUoc2tiKTsKIAkJCXNlbmRfcmVzZXRfaW5kaWNhdGlvbnMoc2tiKTsKIAkJfQotCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBQdXNoIGRhdGEgdG8gdGhlIHNvY2tldCAob3Igb3RoZXIgc29ja2V0cyBjb25uZWN0ZWQgdG8gaXQpLiAqLwotCXJldHVybiBza19yZWNlaXZlX3NrYihzaywgc2tiLCAwKTsKLQogb3V0OgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwaG9uZXRfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BIT05FVCksCi0JLmRldiA9IE5VTEwsCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBob25ldF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfUEhPTkVUKSwKIAkuZnVuYyA9IHBob25ldF9yY3YsCiB9OwogCkBAIC00MjgsMTYgKzQyNSwxOCBAQAogewogCWludCBlcnI7CiAKKwllcnIgPSBwaG9uZXRfZGV2aWNlX2luaXQoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gc29ja19yZWdpc3RlcigmcGhvbmV0X3Byb3RvX2ZhbWlseSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9BTEVSVAogCQkJInBob25ldCBwcm90b2NvbCBmYW1pbHkgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfc29jazsKIAl9CiAKLQlwaG9uZXRfZGV2aWNlX2luaXQoKTsKIAlkZXZfYWRkX3BhY2soJnBob25ldF9wYWNrZXRfdHlwZSk7Ci0JcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIoKTsKIAlwaG9uZXRfc3lzY3RsX2luaXQoKTsKIAogCWVyciA9IGlzaV9yZWdpc3RlcigpOwpAQCAtNDQ5LDYgKzQ0OCw3IEBACiAJcGhvbmV0X3N5c2N0bF9leGl0KCk7CiAJc29ja191bnJlZ2lzdGVyKFBGX1BIT05FVCk7CiAJZGV2X3JlbW92ZV9wYWNrKCZwaG9uZXRfcGFja2V0X3R5cGUpOworZXJyX3NvY2s6CiAJcGhvbmV0X2RldmljZV9leGl0KCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcG5fZGV2LmMgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCmluZGV4IDU0OTFiZjUuLjgwYTMyMmQgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fZGV2LmMKKysrIGIvbmV0L3Bob25ldC9wbl9kZXYuYwpAQCAtMjgsMzIgKzI4LDQxIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGhvbmV0Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPG5ldC9waG9uZXQvcG5fZGV2Lmg+CiAKLS8qIHdoZW4gYWNjZXNzaW5nLCByZW1lbWJlciB0byBsb2NrIHdpdGggc3Bpbl9sb2NrKCZwbmRldnMubG9jayk7ICovCi1zdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0IHBuZGV2cyA9IHsKLQkubGlzdCA9IExJU1RfSEVBRF9JTklUKHBuZGV2cy5saXN0KSwKLQkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHBuZGV2cy5sb2NrKSwKK3N0cnVjdCBwaG9uZXRfbmV0IHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0IHBuZGV2czsKIH07CiAKK2ludCBwaG9uZXRfbmV0X2lkOworCitzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwaG9uZXRfZGV2aWNlX2xpc3Qoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBwaG9uZXRfbmV0ICpwbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBob25ldF9uZXRfaWQpOworCXJldHVybiAmcG5uLT5wbmRldnM7Cit9CisKIC8qIEFsbG9jYXRlIG5ldyBQaG9uZXQgZGV2aWNlLiAqLwogc3RhdGljIHN0cnVjdCBwaG9uZXRfZGV2aWNlICpfX3Bob25ldF9kZXZpY2VfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kID0ga21hbGxvYyhzaXplb2YoKnBuZCksIEdGUF9BVE9NSUMpOwogCWlmIChwbmQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJcG5kLT5uZXRkZXYgPSBkZXY7CiAJYml0bWFwX3plcm8ocG5kLT5hZGRycywgNjQpOwogCi0JbGlzdF9hZGQoJnBuZC0+bGlzdCwgJnBuZGV2cy5saXN0KTsKKwlsaXN0X2FkZCgmcG5kLT5saXN0LCAmcG5kZXZzLT5saXN0KTsKIAlyZXR1cm4gcG5kOwogfQogCiBzdGF0aWMgc3RydWN0IHBob25ldF9kZXZpY2UgKl9fcGhvbmV0X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy5saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJaWYgKHBuZC0+bmV0ZGV2ID09IGRldikKIAkJCXJldHVybiBwbmQ7CiAJfQpAQCAtNjgsMzIgKzc3LDMzIEBACiAKIHN0cnVjdCBuZXRfZGV2aWNlICpwaG9uZXRfZGV2aWNlX2dldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KG5ldCk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgeworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQlkZXYgPSBwbmQtPm5ldGRldjsKIAkJQlVHX09OKCFkZXYpOwogCi0JCWlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpICYmCi0JCQkoZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpICYmCisJCWlmICgoZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpICYmCiAJCQkoKHBuZC0+bmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpID09IElGRl9VUCkKIAkJCWJyZWFrOwogCQlkZXYgPSBOVUxMOwogCX0KIAlpZiAoZGV2KQogCQlkZXZfaG9sZChkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGRldjsKIH0KIAogaW50IHBob25ldF9hZGRyZXNzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJLyogRmluZCBvciBjcmVhdGUgUGhvbmV0LXNwZWNpZmljIGRldmljZSBkYXRhICovCiAJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJaWYgKHBuZCA9PSBOVUxMKQpAQCAtMTAyLDMxICsxMTIsMzMgQEAKIAkJZXJyID0gLUVOT01FTTsKIAllbHNlIGlmICh0ZXN0X2FuZF9zZXRfYml0KGFkZHIgPj4gMiwgcG5kLT5hZGRycykpCiAJCWVyciA9IC1FRVhJU1Q7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCiBpbnQgcGhvbmV0X2FkZHJlc3NfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAlpZiAoIXBuZCB8fCAhdGVzdF9hbmRfY2xlYXJfYml0KGFkZHIgPj4gMiwgcG5kLT5hZGRycykpCiAJCWVyciA9IC1FQUREUk5PVEFWQUlMOwogCWVsc2UgaWYgKGJpdG1hcF9lbXB0eShwbmQtPmFkZHJzLCA2NCkpCiAJCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBHZXRzIGEgc291cmNlIGFkZHJlc3MgdG93YXJkIGEgZGVzdGluYXRpb24sIHRocm91Z2ggYSBpbnRlcmZhY2UuICovCiB1OCBwaG9uZXRfYWRkcmVzc19nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXBuZCA9IF9fcGhvbmV0X2dldChkZXYpOwogCWlmIChwbmQpIHsKIAkJQlVHX09OKGJpdG1hcF9lbXB0eShwbmQtPmFkZHJzLCA2NCkpOwpAQCAtMTM2LDMwICsxNDgsMzEgQEAKIAkJCWFkZHIgPSBmaW5kX2ZpcnN0X2JpdChwbmQtPmFkZHJzLCA2NCkgPDwgMjsKIAl9IGVsc2UKIAkJYWRkciA9IFBOX05PX0FERFI7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlyZXR1cm4gYWRkcjsKIH0KIAogaW50IHBob25ldF9hZGRyZXNzX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHU4IGFkZHIpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KG5ldCk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKKwlpbnQgZXJyID0gLUVBRERSTk9UQVZBSUw7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy5saXN0LCBsaXN0KSB7Ci0JCWlmICghbmV0X2VxKGRldl9uZXQocG5kLT5uZXRkZXYpLCBuZXQpKQotCQkJY29udGludWU7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCS8qIERvbid0IGFsbG93IHVucmVnaXN0ZXJpbmcgZGV2aWNlcyEgKi8KIAkJaWYgKChwbmQtPm5ldGRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKSB8fAogCQkJCSgocG5kLT5uZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkgIT0gSUZGX1VQKQogCQkJY29udGludWU7CiAKIAkJaWYgKHRlc3RfYml0KGFkZHIgPj4gMiwgcG5kLT5hZGRycykpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JCQlyZXR1cm4gMDsKKwkJCWVyciA9IDA7CisJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JcmV0dXJuIC1FQUREUk5PVEFWQUlMOworZm91bmQ6CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CisJcmV0dXJuIGVycjsKIH0KIAogLyogbm90aWZ5IFBob25ldCBvZiBkZXZpY2UgZXZlbnRzICovCkBAIC0xNjksMTQgKzE4MiwxNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CiAKIAlpZiAod2hhdCA9PSBORVRERVZfVU5SRUdJU1RFUikgeworCQlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnM7CiAJCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAKIAkJLyogRGVzdHJveSBwaG9uZXQtc3BlY2lmaWMgZGV2aWNlIGRhdGEgKi8KLQkJc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7CisJCXBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOworCQlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJCXBuZCA9IF9fcGhvbmV0X2dldChkZXYpOwogCQlpZiAocG5kKQogCQkJX19waG9uZXRfZGV2aWNlX2ZyZWUocG5kKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJfQogCXJldHVybiAwOwogCkBAIC0xODcsMjQgKzIwMiw1MiBAQAogCS5wcmlvcml0eSA9IDAsCiB9OwogCi0vKiBJbml0aWFsaXplIFBob25ldCBkZXZpY2VzIGxpc3QgKi8KLXZvaWQgcGhvbmV0X2RldmljZV9pbml0KHZvaWQpCisvKiBQZXItbmFtZXNwYWNlIFBob25ldCBkZXZpY2VzIGhhbmRsaW5nICovCitzdGF0aWMgaW50IHBob25ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CisJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IGttYWxsb2Moc2l6ZW9mKCpwbm4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBubikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcG5uLT5wbmRldnMubGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnBubi0+cG5kZXZzLmxvY2spOworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBob25ldF9uZXRfaWQsIHBubik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBob25ldF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IG5ldF9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCk7CisJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG5kLCBuLCAmcG5uLT5wbmRldnMubGlzdCwgbGlzdCkKKwkJX19waG9uZXRfZGV2aWNlX2ZyZWUocG5kKTsKKworCWtmcmVlKHBubik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcGhvbmV0X25ldF9vcHMgPSB7CisJLmluaXQgPSBwaG9uZXRfaW5pdF9uZXQsCisJLmV4aXQgPSBwaG9uZXRfZXhpdF9uZXQsCit9OworCisvKiBJbml0aWFsaXplIFBob25ldCBkZXZpY2VzIGxpc3QgKi8KK2ludCBfX2luaXQgcGhvbmV0X2RldmljZV9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwaG9uZXRfbmV0X2lkLCAmcGhvbmV0X25ldF9vcHMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBob25ldF9kZXZpY2Vfbm90aWZpZXIpOworCWVyciA9IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKCk7CisJaWYgKGVycikKKwkJcGhvbmV0X2RldmljZV9leGl0KCk7CisJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBwaG9uZXRfZGV2aWNlX2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kLCAqbjsKLQogCXJ0bmxfdW5yZWdpc3Rlcl9hbGwoUEZfUEhPTkVUKTsKLQlydG5sX2xvY2soKTsKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwbmQsIG4sICZwbmRldnMubGlzdCwgbGlzdCkKLQkJX19waG9uZXRfZGV2aWNlX2ZyZWUocG5kKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JcnRubF91bmxvY2soKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcGhvbmV0X2RldmljZV9ub3RpZmllcik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwaG9uZXRfbmV0X2lkLCAmcGhvbmV0X25ldF9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwppbmRleCAyNDJmZThmLi5jZWM0ZTU5IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYworKysgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwpAQCAtNDcsOCArNDcsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgZGV2X25ldChkZXYpLCAwLAotCQkJICBSVE5MR1JQX1BIT05FVF9JRkFERFIsIE5VTEwsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgZGV2X25ldChkZXYpLCAwLAorCQkgICAgUlROTEdSUF9QSE9ORVRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihkZXZfbmV0KGRldiksIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwgZXJyKTsKQEAgLTEyMywxNyArMTI0LDE2IEBACiAKIHN0YXRpYyBpbnQgZ2V0YWRkcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2czsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCWludCBkZXZfaWR4ID0gMCwgZGV2X3N0YXJ0X2lkeCA9IGNiLT5hcmdzWzBdOwogCWludCBhZGRyX2lkeCA9IDAsIGFkZHJfc3RhcnRfaWR4ID0gY2ItPmFyZ3NbMV07CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy5saXN0LCBsaXN0KSB7CisJcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KHNvY2tfbmV0KHNrYi0+c2spKTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJdTggYWRkcjsKIAotCQlpZiAoIW5ldF9lcShkZXZfbmV0KHBuZC0+bmV0ZGV2KSwgbmV0KSkKLQkJCWNvbnRpbnVlOwogCQlpZiAoZGV2X2lkeCA+IGRldl9zdGFydF9pZHgpCiAJCQlhZGRyX3N0YXJ0X2lkeCA9IDA7CiAJCWlmIChkZXZfaWR4KysgPCBkZXZfc3RhcnRfaWR4KQpAQCAtMTUzLDE2ICsxNTMsMjEgQEAKIAl9CiAKIG91dDoKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCWNiLT5hcmdzWzBdID0gZGV2X2lkeDsKIAljYi0+YXJnc1sxXSA9IGFkZHJfaWR4OwogCiAJcmV0dXJuIHNrYi0+bGVuOwogfQogCi12b2lkIF9faW5pdCBwaG9uZXRfbmV0bGlua19yZWdpc3Rlcih2b2lkKQoraW50IF9faW5pdCBwaG9uZXRfbmV0bGlua19yZWdpc3Rlcih2b2lkKQogewotCXJ0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fTkVXQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKLQlydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX0RFTEFERFIsIGFkZHJfZG9pdCwgTlVMTCk7Ci0JcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9HRVRBRERSLCBOVUxMLCBnZXRhZGRyX2R1bXBpdCk7CisJaW50IGVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ORVdBRERSLCBhZGRyX2RvaXQsIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBGdXJ0aGVyIF9fcnRubF9yZWdpc3RlcigpIGNhbm5vdCBmYWlsICovCisJX19ydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX0RFTEFERFIsIGFkZHJfZG9pdCwgTlVMTCk7CisJX19ydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX0dFVEFERFIsIE5VTEwsIGdldGFkZHJfZHVtcGl0KTsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9yZHMvS2NvbmZpZyBiL25ldC9yZHMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY3NzNiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKKworY29uZmlnIFJEUworCXRyaXN0YXRlICJSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSU5FVCAmJiBJTkZJTklCQU5EX0lQT0lCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSU5GSU5JQkFORCAmJiBJTkZJTklCQU5EX0FERFJfVFJBTlMKKwktLS1oZWxwLS0tCisJICBSRFMgcHJvdmlkZXMgcmVsaWFibGUsIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMKKwkgIG92ZXIgSW5maW5pYmFuZC4KKworY29uZmlnIFJEU19ERUJVRworICAgICAgICBib29sICJEZWJ1Z2dpbmcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBSRFMKKyAgICAgICAgZGVmYXVsdCBuCisKZGlmZiAtLWdpdCBhL25ldC9yZHMvTWFrZWZpbGUgYi9uZXQvcmRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjI3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK29iai0kKENPTkZJR19SRFMpICs9IHJkcy5vCityZHMteSA6PQlhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXAorCQkJcmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcCisJCQlsb29wLm8gcGFnZS5vIHJkbWEubyBcCisJCQlyZG1hX3RyYW5zcG9ydC5vIFwKKwkJCWliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFwKKwkJCWliX3N5c2N0bC5vIGliX3JkbWEubyBcCisJCQlpdy5vIGl3X2NtLm8gaXdfcmVjdi5vIGl3X3JpbmcubyBpd19zZW5kLm8gaXdfc3RhdHMubyBcCisJCQlpd19zeXNjdGwubyBpd19yZG1hLm8KKworaWZlcSAoJChDT05GSUdfUkRTX0RFQlVHKSwgeSkKK0VYVFJBX0NGTEFHUyArPSAtRERFQlVHCitlbmRpZgorCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGNmMTZmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9hZl9yZHMuYwpAQCAtMCwwICsxLDU4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgorCisvKiB0aGlzIGlzIGp1c3QgdXNlZCBmb3Igc3RhdHMgZ2F0aGVyaW5nIDovICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19zb2NrX2xvY2spOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX3NvY2tfY291bnQ7CitzdGF0aWMgTElTVF9IRUFEKHJkc19zb2NrX2xpc3QpOworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX3BvbGxfd2FpdHEpOworCisvKgorICogVGhpcyBpcyBjYWxsZWQgYXMgdGhlIGZpbmFsIGRlc2NyaXB0b3IgcmVmZXJlbmNpbmcgdGhpcyBzb2NrZXQgaXMgY2xvc2VkLgorICogV2UgaGF2ZSB0byB1bmJpbmQgdGhlIHNvY2tldCBzbyB0aGF0IGFub3RoZXIgc29ja2V0IGNhbiBiZSBib3VuZCB0byB0aGUKKyAqIGFkZHJlc3MgaXQgd2FzIHVzaW5nLgorICoKKyAqIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCByYWNpbmcgd2l0aCB0aGUgaW5jb21pbmcgcGF0aC4gIHNvY2tfb3JwaGFuKCkKKyAqIHNldHMgU09DS19ERUFEIGFuZCB3ZSB1c2UgdGhhdCBhcyBhbiBpbmRpY2F0b3IgdG8gdGhlIHJ4IHBhdGggdGhhdCBuZXcKKyAqIG1lc3NhZ2VzIHNob3VsZG4ndCBiZSBxdWV1ZWQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc2sgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlycyA9IHJkc19za190b19ycyhzayk7CisKKwlzb2NrX29ycGhhbihzayk7CisJLyogTm90ZSAtIHJkc19jbGVhcl9yZWN2X3F1ZXVlIGdyYWJzIHJzX3JlY3ZfbG9jaywgc28KKwkgKiB0aGF0IGVuc3VyZXMgdGhlIHJlY3YgcGF0aCBoYXMgY29tcGxldGVkIG1lc3NpbmcKKwkgKiB3aXRoIHRoZSBzb2NrZXQuICovCisJcmRzX2NsZWFyX3JlY3ZfcXVldWUocnMpOworCXJkc19jb25nX3JlbW92ZV9zb2NrZXQocnMpOworCXJkc19yZW1vdmVfYm91bmQocnMpOworCXJkc19zZW5kX2Ryb3BfdG8ocnMsIE5VTEwpOworCXJkc19yZG1hX2Ryb3Bfa2V5cyhycyk7CisJcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZycy0+cnNfaXRlbSk7CisJcmRzX3NvY2tfY291bnQtLTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlzb2NrLT5zayA9IE5VTEw7CisJc29ja19wdXQoc2spOworb3V0OgorCXJldHVybiAwOworfQorCisvKgorICogQ2FyZWZ1bCBub3QgdG8gcmFjZSB3aXRoIHJkc19yZWxlYXNlIC0+IHNvY2tfb3JwaGFuIHdoaWNoIGNsZWFycyBza19zbGVlcC4KKyAqIF9iaCgpIGlzbid0IE9LIGhlcmUsIHdlJ3JlIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVycy4gIEl0J3MgcHJvYmFibHkgT0sKKyAqIHRvIHdha2UgdGhlIHdhaXRxdWV1ZSBhZnRlciBza19zbGVlcCBpcyBjbGVhciBhcyB3ZSBob2xkIGEgc29jayByZWYsIGJ1dAorICogdGhpcyBzZWVtcyBtb3JlIGNvbnNlcnZhdGl2ZS4KKyAqIE5CIC0gbm9ybWFsbHksIG9uZSB3b3VsZCB1c2Ugc2tfY2FsbGJhY2tfbG9jayBmb3IgdGhpcywgYnV0IHdlIGNhbgorICogZ2V0IGhlcmUgZnJvbSBpbnRlcnJ1cHRzLCB3aGVyZWFzIHRoZSBuZXR3b3JrIGNvZGUgZ3JhYnMgc2tfY2FsbGJhY2tfbG9jaworICogd2l0aCBfbG9ja19iaCBvbmx5IC0gc28gcmVseWluZyBvbiBza19jYWxsYmFja19sb2NrIGludHJvZHVjZXMgbGl2ZWxvY2tzLgorICovCit2b2lkIHJkc193YWtlX3NrX3NsZWVwKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJX19yZHNfd2FrZV9za19zbGVlcChyZHNfcnNfdG9fc2socnMpKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJICAgICAgIGludCAqdWFkZHJfbGVuLCBpbnQgcGVlcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNvY2stPnNrKTsKKworCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOworCisJLyogcmFjZXksIGRvbid0IGNhcmUgKi8KKwlpZiAocGVlcikgeworCQlpZiAoIXJzLT5yc19jb25uX2FkZHIpCisJCQlyZXR1cm4gLUVOT1RDT05OOworCisJCXNpbi0+c2luX3BvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJzLT5yc19jb25uX2FkZHI7CisJfSBlbHNlIHsKKwkJc2luLT5zaW5fcG9ydCA9IHJzLT5yc19ib3VuZF9wb3J0OworCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJzLT5yc19ib3VuZF9hZGRyOworCX0KKworCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisKKwkqdWFkZHJfbGVuID0gc2l6ZW9mKCpzaW4pOworCXJldHVybiAwOworfQorCisvKgorICogUkRTJyBwb2xsIGlzIHdpdGhvdXQgYSBkb3VidCB0aGUgbGVhc3QgaW50dWl0aXZlIHBhcnQgb2YgdGhlIGludGVyZmFjZSwKKyAqIGFzIFBPTExJTiBhbmQgUE9MTE9VVCBkbyBub3QgYmVoYXZlIGVudGlyZWx5IGFzIHlvdSB3b3VsZCBleHBlY3QgZnJvbQorICogYSBuZXR3b3JrIHByb3RvY29sLgorICoKKyAqIFBPTExJTiBpcyBhc3NlcnRlZCBpZgorICogIC0JdGhlcmUgaXMgZGF0YSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZS4KKyAqICAtCXRvIHNpZ25hbCB0aGF0IGEgcHJldmlvdXNseSBjb25nZXN0ZWQgZGVzdGluYXRpb24gbWF5IGhhdmUgYmVjb21lCisgKgl1bmNvbmdlc3RlZAorICogIC0JQSBub3RpZmljYXRpb24gaGFzIGJlZW4gcXVldWVkIHRvIHRoZSBzb2NrZXQgKHRoaXMgY2FuIGJlIGEgY29uZ2VzdGlvbgorICoJdXBkYXRlLCBvciBhIFJETUEgY29tcGxldGlvbikuCisgKgorICogUE9MTE9VVCBpcyBhc3NlcnRlZCBpZiB0aGVyZSBpcyByb29tIG9uIHRoZSBzZW5kIHF1ZXVlLiBUaGlzIGRvZXMgbm90IG1lYW4KKyAqIGhvd2V2ZXIsIHRoYXQgdGhlIG5leHQgc2VuZG1zZygpIGNhbGwgd2lsbCBzdWNjZWVkLiBJZiB0aGUgYXBwbGljYXRpb24gdHJpZXMKKyAqIHRvIHNlbmQgdG8gYSBjb25nZXN0ZWQgZGVzdGluYXRpb24sIHRoZSBzeXN0ZW0gY2FsbCBtYXkgc3RpbGwgZmFpbCAoYW5kCisgKiByZXR1cm4gRU5PQlVGUykuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb2xsX3dhaXQoZmlsZSwgc2stPnNrX3NsZWVwLCB3YWl0KTsKKworCXBvbGxfd2FpdChmaWxlLCAmcmRzX3BvbGxfd2FpdHEsIHdhaXQpOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXJzLT5yc19jb25nX21vbml0b3IpIHsKKwkJLyogV2hlbiBhIGNvbmdlc3Rpb24gbWFwIHdhcyB1cGRhdGVkLCB3ZSBzaWduYWwgUE9MTElOIGZvcgorCQkgKiAiaGlzdG9yaWNhbCIgcmVhc29ucy4gQXBwbGljYXRpb25zIGNhbiBhbHNvIHBvbGwgZm9yCisJCSAqIFdSQkFORCBpbnN0ZWFkLiAqLworCQlpZiAocmRzX2NvbmdfdXBkYXRlZF9zaW5jZSgmcnMtPnJzX2NvbmdfdHJhY2spKQorCQkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExXUkJBTkQpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KQorCQkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJfQorCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX3JlY3ZfcXVldWUpCisJIHx8ICFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSkKKwkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPCByZHNfc2tfc25kYnVmKHJzKSkKKwkJbWFzayB8PSAoUE9MTE9VVCB8IFBPTExXUk5PUk0pOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHJkc19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHJkc19jYW5jZWxfc2VudF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJICAgICAgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCWludCByZXQgPSAwOworCisJLyogcmFjaW5nIHdpdGggYW5vdGhlciB0aHJlYWQgYmluZGluZyBzZWVtcyBvayBoZXJlICovCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcigmc2luLCBvcHR2YWwsIHNpemVvZihzaW4pKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfc2VuZF9kcm9wX3RvKHJzLCAmc2luKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19zZXRfYm9vbF9vcHRpb24odW5zaWduZWQgY2hhciAqb3B0dmFyLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJICAgICAgIGludCBvcHRsZW4pCit7CisJaW50IHZhbHVlOworCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZ2V0X3VzZXIodmFsdWUsIChpbnQgX191c2VyICopIG9wdHZhbCkpCisJCXJldHVybiAtRUZBVUxUOworCSpvcHR2YXIgPSAhIXZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJkc19jb25nX21vbml0b3Ioc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCSAgICBpbnQgb3B0bGVuKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZHNfc2V0X2Jvb2xfb3B0aW9uKCZycy0+cnNfY29uZ19tb25pdG9yLCBvcHR2YWwsIG9wdGxlbik7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChycy0+cnNfY29uZ19tb25pdG9yKSB7CisJCQlyZHNfY29uZ19hZGRfc29ja2V0KHJzKTsKKwkJfSBlbHNlIHsKKwkJCXJkc19jb25nX3JlbW92ZV9zb2NrZXQocnMpOworCQkJcnMtPnJzX2NvbmdfbWFzayA9IDA7CisJCQlycy0+cnNfY29uZ19ub3RpZnkgPSAwOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNvY2stPnNrKTsKKwlpbnQgcmV0OworCisJaWYgKGxldmVsICE9IFNPTF9SRFMpIHsKKwkJcmV0ID0gLUVOT1BST1RPT1BUOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJEU19DQU5DRUxfU0VOVF9UTzoKKwkJcmV0ID0gcmRzX2NhbmNlbF9zZW50X3RvKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX0dFVF9NUjoKKwkJcmV0ID0gcmRzX2dldF9tcihycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19GUkVFX01SOgorCQlyZXQgPSByZHNfZnJlZV9tcihycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19SRUNWRVJSOgorCQlyZXQgPSByZHNfc2V0X2Jvb2xfb3B0aW9uKCZycy0+cnNfcmVjdmVyciwgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19DT05HX01PTklUT1I6CisJCXJldCA9IHJkc19jb25nX21vbml0b3IocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1BST1RPT1BUOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNvY2stPnNrKTsKKwlpbnQgcmV0ID0gLUVOT1BST1RPT1BULCBsZW47CisKKwlpZiAobGV2ZWwgIT0gU09MX1JEUykKKwkJZ290byBvdXQ7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgUkRTX0lORk9fRklSU1QgLi4uIFJEU19JTkZPX0xBU1Q6CisJCXJldCA9IHJkc19pbmZvX2dldHNvY2tvcHQoc29jaywgb3B0bmFtZSwgb3B0dmFsLAorCQkJCQkgIG9wdGxlbik7CisJCWJyZWFrOworCisJY2FzZSBSRFNfUkVDVkVSUjoKKwkJaWYgKGxlbiA8IHNpemVvZihpbnQpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZQorCQlpZiAocHV0X3VzZXIocnMtPnJzX3JlY3ZlcnIsIChpbnQgX191c2VyICopIG9wdHZhbCkKKwkJIHx8IHB1dF91c2VyKHNpemVvZihpbnQpLCBvcHRsZW4pKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IHJkc19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCSAgICAgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlpbnQgcmV0ID0gMDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCXJldCA9IC1FQUZOT1NVUFBPUlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKSkgeworCQlyZXQgPSAtRURFU1RBRERSUkVROworCQlnb3RvIG91dDsKKwl9CisKKwlycy0+cnNfY29ubl9hZGRyID0gc2luLT5zaW5fYWRkci5zX2FkZHI7CisJcnMtPnJzX2Nvbm5fcG9ydCA9IHNpbi0+c2luX3BvcnQ7CisKK291dDoKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG8gcmRzX3Byb3RvID0geworCS5uYW1lCSAgPSAiUkRTIiwKKwkub3duZXIJICA9IFRISVNfTU9EVUxFLAorCS5vYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmRzX3NvY2spLAorfTsKKworc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcmRzX3Byb3RvX29wcyA9IHsKKwkuZmFtaWx5ID0JQUZfUkRTLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5yZWxlYXNlID0JcmRzX3JlbGVhc2UsCisJLmJpbmQgPQkJcmRzX2JpbmQsCisJLmNvbm5lY3QgPQlyZHNfY29ubmVjdCwKKwkuc29ja2V0cGFpciA9CXNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0ID0Jc29ja19ub19hY2NlcHQsCisJLmdldG5hbWUgPQlyZHNfZ2V0bmFtZSwKKwkucG9sbCA9CQlyZHNfcG9sbCwKKwkuaW9jdGwgPQlyZHNfaW9jdGwsCisJLmxpc3RlbiA9CXNvY2tfbm9fbGlzdGVuLAorCS5zaHV0ZG93biA9CXNvY2tfbm9fc2h1dGRvd24sCisJLnNldHNvY2tvcHQgPQlyZHNfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdCA9CXJkc19nZXRzb2Nrb3B0LAorCS5zZW5kbXNnID0JcmRzX3NlbmRtc2csCisJLnJlY3Ztc2cgPQlyZHNfcmVjdm1zZywKKwkubW1hcCA9CQlzb2NrX25vX21tYXAsCisJLnNlbmRwYWdlID0Jc29ja19ub19zZW5kcGFnZSwKK307CisKK3N0YXRpYyBpbnQgX19yZHNfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrICpzaywgaW50IHByb3RvY29sKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJkc19zb2NrICpyczsKKworCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKKwlzb2NrLT5vcHMJCT0gJnJkc19wcm90b19vcHM7CisJc2stPnNrX3Byb3RvY29sCQk9IHByb3RvY29sOworCisJcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXNwaW5fbG9ja19pbml0KCZycy0+cnNfbG9jayk7CisJcndsb2NrX2luaXQoJnJzLT5yc19yZWN2X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfc2VuZF9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19yZWN2X3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19jb25nX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZycy0+cnNfcmRtYV9sb2NrKTsKKwlycy0+cnNfcmRtYV9rZXlzID0gUkJfUk9PVDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcnMtPnJzX2l0ZW0sICZyZHNfc29ja19saXN0KTsKKwlyZHNfc29ja19jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJkc19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpCit7CisJc3RydWN0IHNvY2sgKnNrOworCisJaWYgKHNvY2stPnR5cGUgIT0gU09DS19TRVFQQUNLRVQgfHwgcHJvdG9jb2wpCisJCXJldHVybiAtRVNPQ0tUTk9TVVBQT1JUOworCisJc2sgPSBza19hbGxvYyhuZXQsIEFGX1JEUywgR0ZQX0FUT01JQywgJnJkc19wcm90byk7CisJaWYgKCFzaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gX19yZHNfY3JlYXRlKHNvY2ssIHNrLCBwcm90b2NvbCk7Cit9CisKK3ZvaWQgcmRzX3NvY2tfYWRkcmVmKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworfQorCit2b2lkIHJkc19zb2NrX3B1dChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgcmRzX2ZhbWlseV9vcHMgPSB7CisJLmZhbWlseSA9CUFGX1JEUywKKwkuY3JlYXRlID0JcmRzX2NyZWF0ZSwKKwkub3duZXIJPQlUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyB2b2lkIHJkc19zb2NrX2luY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCisJbGVuIC89IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShycywgJnJkc19zb2NrX2xpc3QsIHJzX2l0ZW0pIHsKKwkJc2sgPSByZHNfcnNfdG9fc2socnMpOworCQlyZWFkX2xvY2soJnJzLT5yc19yZWN2X2xvY2spOworCisJCS8qIFhYWCB0b28gbGF6eSB0byBtYWludGFpbiBjb3VudHMuLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluYywgJnJzLT5yc19yZWN2X3F1ZXVlLCBpX2l0ZW0pIHsKKwkJCXRvdGFsKys7CisJCQlpZiAodG90YWwgPD0gbGVuKQorCQkJCXJkc19pbmNfaW5mb19jb3B5KGluYywgaXRlciwgaW5jLT5pX3NhZGRyLAorCQkJCQkJICBycy0+cnNfYm91bmRfYWRkciwgMSk7CisJCX0KKworCQlyZWFkX3VubG9jaygmcnMtPnJzX3JlY3ZfbG9jayk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJbGVucy0+bnIgPSB0b3RhbDsKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgcmRzX3NvY2tfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXN0cnVjdCByZHNfaW5mb19zb2NrZXQgc2luZm87CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGVuIC89IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fc29ja2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlpZiAobGVuIDwgcmRzX3NvY2tfY291bnQpCisJCWdvdG8gb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShycywgJnJkc19zb2NrX2xpc3QsIHJzX2l0ZW0pIHsKKwkJc2luZm8uc25kYnVmID0gcmRzX3NrX3NuZGJ1Zihycyk7CisJCXNpbmZvLnJjdmJ1ZiA9IHJkc19za19yY3ZidWYocnMpOworCQlzaW5mby5ib3VuZF9hZGRyID0gcnMtPnJzX2JvdW5kX2FkZHI7CisJCXNpbmZvLmNvbm5lY3RlZF9hZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwkJc2luZm8uYm91bmRfcG9ydCA9IHJzLT5yc19ib3VuZF9wb3J0OworCQlzaW5mby5jb25uZWN0ZWRfcG9ydCA9IHJzLT5yc19jb25uX3BvcnQ7CisJCXNpbmZvLmludW0gPSBzb2NrX2lfaW5vKHJkc19yc190b19zayhycykpOworCisJCXJkc19pbmZvX2NvcHkoaXRlciwgJnNpbmZvLCBzaXplb2Yoc2luZm8pKTsKKwl9CisKK291dDoKKwlsZW5zLT5uciA9IHJkc19zb2NrX2NvdW50OworCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX3NvY2tldCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByZHNfZXhpdCh2b2lkKQoreworCXJkc19yZG1hX2V4aXQoKTsKKwlzb2NrX3VucmVnaXN0ZXIocmRzX2ZhbWlseV9vcHMuZmFtaWx5KTsKKwlwcm90b191bnJlZ2lzdGVyKCZyZHNfcHJvdG8pOworCXJkc19jb25uX2V4aXQoKTsKKwlyZHNfY29uZ19leGl0KCk7CisJcmRzX3N5c2N0bF9leGl0KCk7CisJcmRzX3RocmVhZHNfZXhpdCgpOworCXJkc19zdGF0c19leGl0KCk7CisJcmRzX3BhZ2VfZXhpdCgpOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TT0NLRVRTLCByZHNfc29ja19pbmZvKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVDVl9NRVNTQUdFUywgcmRzX3NvY2tfaW5jX2luZm8pOworfQorbW9kdWxlX2V4aXQocmRzX2V4aXQpOworCitzdGF0aWMgaW50IF9faW5pdCByZHNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZHNfY29ubl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0ID0gcmRzX3RocmVhZHNfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Nvbm47CisJcmV0ID0gcmRzX3N5c2N0bF9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdGhyZWFkczsKKwlyZXQgPSByZHNfc3RhdHNfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N5c2N0bDsKKwlyZXQgPSBwcm90b19yZWdpc3RlcigmcmRzX3Byb3RvLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zdGF0czsKKwlyZXQgPSBzb2NrX3JlZ2lzdGVyKCZyZHNfZmFtaWx5X29wcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcHJvdG87CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NPQ0tFVFMsIHJkc19zb2NrX2luZm8pOworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVDVl9NRVNTQUdFUywgcmRzX3NvY2tfaW5jX2luZm8pOworCisJLyogaWIvaXdhcnAgdHJhbnNwb3J0cyBjdXJyZW50bHkgY29tcGlsZWQtaW4gKi8KKwlyZXQgPSByZHNfcmRtYV9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc29jazsKKwlnb3RvIG91dDsKKworb3V0X3NvY2s6CisJc29ja191bnJlZ2lzdGVyKHJkc19mYW1pbHlfb3BzLmZhbWlseSk7CitvdXRfcHJvdG86CisJcHJvdG9fdW5yZWdpc3RlcigmcmRzX3Byb3RvKTsKK291dF9zdGF0czoKKwlyZHNfc3RhdHNfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfc3lzY3RsX2V4aXQoKTsKK291dF90aHJlYWRzOgorCXJkc190aHJlYWRzX2V4aXQoKTsKK291dF9jb25uOgorCXJkc19jb25uX2V4aXQoKTsKKwlyZHNfY29uZ19leGl0KCk7CisJcmRzX3BhZ2VfZXhpdCgpOworb3V0OgorCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChyZHNfaW5pdCk7CisKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICI0LjAiCisjZGVmaW5lIERSVl9SRUxEQVRFICAgICAiRmViIDEyLCAyMDA5IgorCitNT0RVTEVfQVVUSE9SKCJPcmFjbGUgQ29ycG9yYXRpb24gPHJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkRTOiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIgorCQkgICAiIHYiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIikiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9BTElBU19ORVRQUk9UTyhQRl9SRFMpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9iaW5kLmMgYi9uZXQvcmRzL2JpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdjYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9iaW5kLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFhYWCB0aGlzIHByb2JhYmx5IHN0aWxsIG5lZWRzIG1vcmUgd29yay4uIG5vIElOQUREUl9BTlksIGFuZCByYnRyZWVzIGFyZW4ndAorICogcGFydGljdWxhcmx5IHppcHB5LgorICoKKyAqIFRoaXMgaXMgbm93IGNhbGxlZCBmb3IgZXZlcnkgaW5jb21pbmcgZnJhbWUgc28gd2UgYXJndWFibHkgY2FyZSBtdWNoIG1vcmUKKyAqIGFib3V0IGl0IHRoYW4gd2UgdXNlZCB0by4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfYmluZF9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByZHNfYmluZF90cmVlID0gUkJfUk9PVDsKKworc3RhdGljIHN0cnVjdCByZHNfc29jayAqcmRzX2JpbmRfdHJlZV93YWxrKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydCwKKwkJCQkJICAgc3RydWN0IHJkc19zb2NrICppbnNlcnQpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJkc19iaW5kX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXU2NCBjbXA7CisJdTY0IG5lZWRsZSA9ICgodTY0KWJlMzJfdG9fY3B1KGFkZHIpIDw8IDMyKSB8IGJlMTZfdG9fY3B1KHBvcnQpOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQlycyA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHJkc19zb2NrLCByc19ib3VuZF9ub2RlKTsKKworCQljbXAgPSAoKHU2NCliZTMyX3RvX2NwdShycy0+cnNfYm91bmRfYWRkcikgPDwgMzIpIHwKKwkJICAgICAgYmUxNl90b19jcHUocnMtPnJzX2JvdW5kX3BvcnQpOworCisJCWlmIChuZWVkbGUgPCBjbXApCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG5lZWRsZSA+IGNtcCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiByczsKKwl9CisKKwlpZiAoaW5zZXJ0KSB7CisJCXJiX2xpbmtfbm9kZSgmaW5zZXJ0LT5yc19ib3VuZF9ub2RlLCBwYXJlbnQsIHApOworCQlyYl9pbnNlcnRfY29sb3IoJmluc2VydC0+cnNfYm91bmRfbm9kZSwgJnJkc19iaW5kX3RyZWUpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcmRzX3NvY2sgYm91bmQgYXQgdGhlIGdpdmVuIGxvY2FsIGFkZHJlc3MuCisgKgorICogVGhlIHJ4IHBhdGggY2FuIHJhY2Ugd2l0aCByZHNfcmVsZWFzZS4gIFdlIG5vdGljZSBpZiByZHNfcmVsZWFzZSgpIGhhcworICogbWFya2VkIHRoaXMgc29ja2V0IGFuZCBkb24ndCByZXR1cm4gYSBycyByZWYgdG8gdGhlIHJ4IHBhdGguCisgKi8KK3N0cnVjdCByZHNfc29jayAqcmRzX2ZpbmRfYm91bmQoX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KQoreworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisJcnMgPSByZHNfYmluZF90cmVlX3dhbGsoYWRkciwgcG9ydCwgTlVMTCk7CisJaWYgKHJzICYmICFzb2NrX2ZsYWcocmRzX3JzX3RvX3NrKHJzKSwgU09DS19ERUFEKSkKKwkJcmRzX3NvY2tfYWRkcmVmKHJzKTsKKwllbHNlCisJCXJzID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlyZHNkZWJ1ZygicmV0dXJuaW5nIHJzICVwIGZvciAlcEk0OiV1XG4iLCBycywgJmFkZHIsCisJCW50b2hzKHBvcnQpKTsKKwlyZXR1cm4gcnM7Cit9CisKKy8qIHJldHVybnMgLXZlIGVycm5vIG9yICt2ZSBwb3J0ICovCitzdGF0aWMgaW50IHJkc19hZGRfYm91bmQoc3RydWN0IHJkc19zb2NrICpycywgX19iZTMyIGFkZHIsIF9fYmUxNiAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUFERFJJTlVTRTsKKwl1MTYgcm92ZXIsIGxhc3Q7CisKKwlpZiAoKnBvcnQgIT0gMCkgeworCQlyb3ZlciA9IGJlMTZfdG9fY3B1KCpwb3J0KTsKKwkJbGFzdCA9IHJvdmVyOworCX0gZWxzZSB7CisJCXJvdmVyID0gbWF4X3QodTE2LCBuZXRfcmFuZG9tKCksIDIpOworCQlsYXN0ID0gcm92ZXIgLSAxOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlkbyB7CisJCWlmIChyb3ZlciA9PSAwKQorCQkJcm92ZXIrKzsKKwkJaWYgKHJkc19iaW5kX3RyZWVfd2FsayhhZGRyLCBjcHVfdG9fYmUxNihyb3ZlciksIHJzKSA9PSBOVUxMKSB7CisJCQkqcG9ydCA9IGNwdV90b19iZTE2KHJvdmVyKTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHJvdmVyKysgIT0gbGFzdCk7CisKKwlpZiAocmV0ID09IDApICB7CisJCXJzLT5yc19ib3VuZF9hZGRyID0gYWRkcjsKKwkJcnMtPnJzX2JvdW5kX3BvcnQgPSAqcG9ydDsKKwkJcmRzX3NvY2tfYWRkcmVmKHJzKTsKKworCQlyZHNkZWJ1ZygicnMgJXAgYmluZGluZyB0byAlcEk0OiVkXG4iLAorCQkgIHJzLCAmYWRkciwgKGludCludG9ocygqcG9ydCkpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX3JlbW92ZV9ib3VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyKSB7CisJCXJkc2RlYnVnKCJycyAlcCB1bmJpbmRpbmcgZnJvbSAlcEk0OiVkXG4iLAorCQkgIHJzLCAmcnMtPnJzX2JvdW5kX2FkZHIsCisJCSAgbnRvaHMocnMtPnJzX2JvdW5kX3BvcnQpKTsKKworCQlyYl9lcmFzZSgmcnMtPnJzX2JvdW5kX25vZGUsICZyZHNfYmluZF90cmVlKTsKKwkJcmRzX3NvY2tfcHV0KHJzKTsKKwkJcnMtPnJzX2JvdW5kX2FkZHIgPSAwOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKK30KKworaW50IHJkc19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJaW50IHJldCA9IDA7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKGFkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIHx8CisJICAgIHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUIHx8CisJICAgIHJzLT5yc19ib3VuZF9hZGRyIHx8CisJICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHJkc19hZGRfYm91bmQocnMsIHNpbi0+c2luX2FkZHIuc19hZGRyLCAmc2luLT5zaW5fcG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwl0cmFucyA9IHJkc190cmFuc19nZXRfcHJlZmVycmVkKHNpbi0+c2luX2FkZHIuc19hZGRyKTsKKwlpZiAodHJhbnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRUFERFJOT1RBVkFJTDsKKwkJcmRzX3JlbW92ZV9ib3VuZChycyk7CisJCWdvdG8gb3V0OworCX0KKworCXJzLT5yc190cmFuc3BvcnQgPSB0cmFuczsKKwlyZXQgPSAwOworCitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25nLmMgYi9uZXQvcmRzL2NvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBlNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9jb25nLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCisvKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgc2lkZSBvZiB0aGUgdW5jb252ZW50aW9uYWwgY29uZ2VzdGlvbgorICogbWFuYWdlbWVudCBpbiBSRFMuCisgKgorICogTWVzc2FnZXMgd2FpdGluZyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBvbiB0aGUgcmVjZWl2aW5nIHNvY2tldCBhcmUgYWNjb3VudGVkCisgKiBhZ2FpbnN0IHRoZSBzb2NrZXRzIFNPX1JDVkJVRiBvcHRpb24gdmFsdWUuICBPbmx5IHRoZSBwYXlsb2FkIGJ5dGVzIGluIHRoZQorICogbWVzc2FnZSBhcmUgYWNjb3VudGVkIGZvci4gIElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgcXVldWVkIGVxdWFscyBvciBleGNlZWRzCisgKiByY3ZidWYgdGhlbiB0aGUgc29ja2V0IGlzIGNvbmdlc3RlZC4gIEFsbCBzZW5kcyBhdHRlbXB0ZWQgdG8gdGhpcyBzb2NrZXQncworICogYWRkcmVzcyBzaG91bGQgcmV0dXJuIGJsb2NrIG9yIHJldHVybiAtRVdPVUxEQkxPQ0suCisgKgorICogQXBwbGljYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSByZWFzb25hYmx5IHR1bmVkIHN1Y2ggdGhhdCB0aGlzIHNpdHVhdGlvbgorICogdmVyeSByYXJlbHkgb2NjdXJzLiAgQW4gYXBwbGljYXRpb24gZW5jb3VudGVyaW5nIHRoaXMgImJhY2stcHJlc3N1cmUiIGlzCisgKiBjb25zaWRlcmVkIGEgYnVnLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2aW5nIGVhY2ggbm9kZSBtYWludGFpbiBiaXRtYXBzIHdoaWNoIGluZGljYXRlCisgKiB3aGljaCBwb3J0cyBvbiBib3VuZCBhZGRyZXNzZXMgYXJlIGNvbmdlc3RlZC4gIEFzIHRoZSBiaXRtYXAgY2hhbmdlcyBpdCBpcworICogc2VudCB0aHJvdWdoIGFsbCB0aGUgY29ubmVjdGlvbnMgd2hpY2ggdGVybWluYXRlIGluIHRoZSBsb2NhbCBhZGRyZXNzIG9mIHRoZQorICogYml0bWFwIHdoaWNoIGNoYW5nZWQuCisgKgorICogVGhlIGJpdG1hcHMgYXJlIGFsbG9jYXRlZCBhcyBjb25uZWN0aW9ucyBhcmUgYnJvdWdodCB1cC4gIFRoaXMgYXZvaWRzCisgKiBhbGxvY2F0aW9uIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aCB3aGljaCBxdWV1ZXMgbWVzc2FnZXMgb24gc29ja2V0cy4KKyAqIFRoZSBkZW5zZSBiaXRtYXBzIGxldCB0cmFuc3BvcnRzIHNlbmQgdGhlIGVudGlyZSBiaXRtYXAgb24gYW55IGJpdG1hcCBjaGFuZ2UKKyAqIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuICBUaGlzIGlzIG11Y2ggZWFzaWVyIHRvIGltcGxlbWVudCB0aGFuIHNvbWUKKyAqIGZpbmVyLWdyYWluZWQgY29tbXVuaWNhdGlvbiBvZiBwZXItcG9ydCBjb25nZXN0aW9uLiAgVGhlIHNlbmRlciBkb2VzIGEgdmVyeQorICogaW5leHBlbnNpdmUgYml0IHRlc3QgdG8gdGVzdCBpZiB0aGUgcG9ydCBpdCdzIGFib3V0IHRvIHNlbmQgdG8gaXMgY29uZ2VzdGVkCisgKiBvciBub3QuCisgKi8KKworLyoKKyAqIEludGVyYWN0aW9uIHdpdGggcG9sbCBpcyBhIHRhZCB0cmlja3kuIFdlIHdhbnQgYWxsIHByb2Nlc3NlcyBzdHVjayBpbgorICogcG9sbCB0byB3YWtlIHVwIGFuZCBjaGVjayB3aGV0aGVyIGEgY29uZ2VzdGVkIGRlc3RpbmF0aW9uIGJlY2FtZSB1bmNvbmdlc3RlZC4KKyAqIFRoZSByZWFsbHkgc2FkIHRoaW5nIGlzIHdlIGhhdmUgbm8gaWRlYSB3aGljaCBkZXN0aW5hdGlvbnMgdGhlIGFwcGxpY2F0aW9uCisgKiB3YW50cyB0byBzZW5kIHRvIC0gd2UgZG9uJ3QgZXZlbiBrbm93IHdoaWNoIHJkc19jb25uZWN0aW9ucyBhcmUgaW52b2x2ZWQuCisgKiBTbyB1bnRpbCB3ZSBpbXBsZW1lbnQgYSBtb3JlIGZsZXhpYmxlIHJkcyBwb2xsIGludGVyZmFjZSwgd2UgaGF2ZSB0byBtYWtlCisgKiBkbyB3aXRoIHRoaXM6CisgKiBXZSBtYWludGFpbiBhIGdsb2JhbCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgY29uZ2VzdGlvbiBtYXAKKyAqIHVwZGF0ZSBpcyByZWNlaXZlZC4gRWFjaCByZHMgc29ja2V0IHRyYWNrcyB0aGlzIHZhbHVlLCBhbmQgaWYgcmRzX3BvbGwKKyAqIGZpbmRzIHRoYXQgdGhlIHNhdmVkIGdlbmVyYXRpb24gbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgZ2xvYmFsIGdlbmVyYXRpb24KKyAqIG51bWJlciwgaXQgd2FrZXMgdXAgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyBhdG9taWNfdAkJcmRzX2NvbmdfZ2VuZXJhdGlvbiA9IEFUT01JQ19JTklUKDApOworCisvKgorICogQ29uZ2VzdGlvbiBtb25pdG9yaW5nCisgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmRzX2NvbmdfbW9uaXRvcik7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhyZHNfY29uZ19tb25pdG9yX2xvY2spOworCisvKgorICogWWVzLCBhIGdsb2JhbCBsb2NrLiAgSXQncyB1c2VkIHNvIGluZnJlcXVlbnRseSB0aGF0IGl0J3Mgd29ydGgga2VlcGluZyBpdAorICogZ2xvYmFsIHRvIHNpbXBsaWZ5IHRoZSBsb2NraW5nLiAgSXQncyBvbmx5IHVzZWQgaW4gdGhlIGZvbGxvd2luZworICogY2lyY3Vtc3RhbmNlczoKKyAqCisgKiAgLSBvbiBjb25uZWN0aW9uIGJ1aWxkdXAgdG8gYXNzb2NpYXRlIGEgY29ubiB3aXRoIGl0cyBtYXBzCisgKiAgLSBvbiBtYXAgY2hhbmdlcyB0byBpbmZvcm0gY29ubnMgb2YgYSBuZXcgbWFwIHRvIHNlbmQKKyAqCisgKiAgSXQncyBzYWRseSBvcmRlcmVkIHVuZGVyIHRoZSBzb2NrZXQgY2FsbGJhY2sgbG9jayBhbmQgdGhlIGNvbm5lY3Rpb24gbG9jay4KKyAqICBSZWNlaXZlIHBhdGhzIGNhbiBtYXJrIHBvcnRzIGNvbmdlc3RlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IHNvIHRoZQorICogIGxvY2sgbWFza3MgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfY29uZ19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByZHNfY29uZ190cmVlID0gUkJfUk9PVDsKKworc3RhdGljIHN0cnVjdCByZHNfY29uZ19tYXAgKnJkc19jb25nX3RyZWVfd2FsayhfX2JlMzIgYWRkciwKKwkJCQkJICAgICAgIHN0cnVjdCByZHNfY29uZ19tYXAgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcmRzX2NvbmdfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJbWFwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcmRzX2NvbmdfbWFwLCBtX3JiX25vZGUpOworCisJCWlmIChhZGRyIDwgbWFwLT5tX2FkZHIpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGFkZHIgPiBtYXAtPm1fYWRkcikKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBtYXA7CisJfQorCisJaWYgKGluc2VydCkgeworCQlyYl9saW5rX25vZGUoJmluc2VydC0+bV9yYl9ub2RlLCBwYXJlbnQsIHApOworCQlyYl9pbnNlcnRfY29sb3IoJmluc2VydC0+bV9yYl9ub2RlLCAmcmRzX2NvbmdfdHJlZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhlcmUgaXMgb25seSBldmVyIG9uZSBiaXRtYXAgZm9yIGFueSBhZGRyZXNzLiAgQ29ubmVjdGlvbnMgdHJ5IGFuZCBhbGxvY2F0ZQorICogdGhlc2UgYml0bWFwcyBpbiB0aGUgcHJvY2VzcyBnZXR0aW5nIHBvaW50ZXJzIHRvIHRoZW0uICBUaGUgYml0bWFwcyBhcmUgb25seQorICogZXZlciBmcmVlZCBhcyB0aGUgbW9kdWxlIGlzIHJlbW92ZWQgYWZ0ZXIgYWxsIGNvbm5lY3Rpb25zIGhhdmUgYmVlbiBmcmVlZC4KKyAqLworc3RhdGljIHN0cnVjdCByZHNfY29uZ19tYXAgKnJkc19jb25nX2Zyb21fYWRkcihfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJc3RydWN0IHJkc19jb25nX21hcCAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHpwOworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19jb25nX21hcCksIEdGUF9LRVJORUwpOworCWlmIChtYXAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltYXAtPm1fYWRkciA9IGFkZHI7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFwLT5tX3dhaXRxKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFwLT5tX2Nvbm5fbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTOyBpKyspIHsKKwkJenAgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICh6cCA9PSAwKQorCQkJZ290byBvdXQ7CisJCW1hcC0+bV9wYWdlX2FkZHJzW2ldID0genA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSByZHNfY29uZ190cmVlX3dhbGsoYWRkciwgbWFwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJcmV0ID0gbWFwOworCQltYXAgPSBOVUxMOworCX0KKworb3V0OgorCWlmIChtYXApIHsKKwkJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUyAmJiBtYXAtPm1fcGFnZV9hZGRyc1tpXTsgaSsrKQorCQkJZnJlZV9wYWdlKG1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKKwkJa2ZyZWUobWFwKTsKKwl9CisKKwlyZHNkZWJ1ZygibWFwICVwIGZvciBhZGRyICV4XG4iLCByZXQsIGJlMzJfdG9fY3B1KGFkZHIpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdXQgdGhlIGNvbm4gb24gaXRzIGxvY2FsIG1hcCdzIGxpc3QuICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uIGlzCisgKiByZWFsbHkgYWRkZWQgdG8gdGhlIGhhc2guICBJdCdzIG5lc3RlZCB1bmRlciB0aGUgcmRzX2Nvbm5fbG9jaywgc2FkbHkuCisgKi8KK3ZvaWQgcmRzX2NvbmdfYWRkX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBub3cgb24gbWFwICVwXG4iLCBjb25uLCBjb25uLT5jX2xjb25nKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNvbm4tPmNfbWFwX2l0ZW0sICZjb25uLT5jX2xjb25nLT5tX2Nvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJkc19jb25nX3JlbW92ZV9jb25uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoInJlbW92aW5nIGNvbm4gJXAgZnJvbSBtYXAgJXBcbiIsIGNvbm4sIGNvbm4tPmNfbGNvbmcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmY29ubi0+Y19tYXBfaXRlbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworfQorCitpbnQgcmRzX2NvbmdfZ2V0X21hcHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWNvbm4tPmNfbGNvbmcgPSByZHNfY29uZ19mcm9tX2FkZHIoY29ubi0+Y19sYWRkcik7CisJY29ubi0+Y19mY29uZyA9IHJkc19jb25nX2Zyb21fYWRkcihjb25uLT5jX2ZhZGRyKTsKKworCWlmIChjb25uLT5jX2xjb25nID09IE5VTEwgfHwgY29ubi0+Y19mY29uZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJm1hcC0+bV9jb25uX2xpc3QsIGNfbWFwX2l0ZW0pIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfbWFwX3VwZGF0ZWQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCB1aW50NjRfdCBwb3J0bWFzaykKK3sKKwlyZHNkZWJ1Zygid2FraW5nIG1hcCAlcCBmb3IgJXBJNFxuIiwKKwkgIG1hcCwgJm1hcC0+bV9hZGRyKTsKKwlyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcmVjZWl2ZWQpOworCWF0b21pY19pbmMoJnJkc19jb25nX2dlbmVyYXRpb24pOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZtYXAtPm1fd2FpdHEpKQorCQl3YWtlX3VwKCZtYXAtPm1fd2FpdHEpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyZHNfcG9sbF93YWl0cSkpCisJCXdha2VfdXBfYWxsKCZyZHNfcG9sbF93YWl0cSk7CisKKwlpZiAocG9ydG1hc2sgJiYgIWxpc3RfZW1wdHkoJnJkc19jb25nX21vbml0b3IpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCByZHNfc29jayAqcnM7CisKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzLCAmcmRzX2NvbmdfbW9uaXRvciwgcnNfY29uZ19saXN0KSB7CisJCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJCXJzLT5yc19jb25nX25vdGlmeSB8PSAocnMtPnJzX2NvbmdfbWFzayAmIHBvcnRtYXNrKTsKKwkJCXJzLT5yc19jb25nX21hc2sgJj0gfnBvcnRtYXNrOworCQkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwkJCWlmIChycy0+cnNfY29uZ19ub3RpZnkpCisJCQkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQl9CisJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCX0KK30KKworaW50IHJkc19jb25nX3VwZGF0ZWRfc2luY2UodW5zaWduZWQgbG9uZyAqcmVjZW50KQoreworCXVuc2lnbmVkIGxvbmcgZ2VuID0gYXRvbWljX3JlYWQoJnJkc19jb25nX2dlbmVyYXRpb24pOworCisJaWYgKGxpa2VseSgqcmVjZW50ID09IGdlbikpCisJCXJldHVybiAwOworCSpyZWNlbnQgPSBnZW47CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBXZSdyZSBjYWxsZWQgdW5kZXIgdGhlIGxvY2tpbmcgdGhhdCBwcm90ZWN0cyB0aGUgc29ja2V0cyByZWNlaXZlIGJ1ZmZlcgorICogY29uc3VtcHRpb24uICBUaGlzIG1ha2VzIGl0IGEgbG90IGVhc2llciBmb3IgdGhlIGNhbGxlciB0byBvbmx5IGNhbGwgdXMKKyAqIHdoZW4gaXQga25vd3MgdGhhdCBhbiBleGlzdGluZyBzZXQgYml0IG5lZWRzIHRvIGJlIGNsZWFyZWQsIGFuZCB2aWNlIHZlcnNhLgorICogV2UgY2FuJ3QgYmxvY2sgYW5kIHdlIG5lZWQgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgc29ja2V0cyB3b3JraW5nIGFnYWluc3QKKyAqIHRoZSBzYW1lIHBlci1hZGRyZXNzIG1hcC4KKyAqLwordm9pZCByZHNfY29uZ19zZXRfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJcmRzZGVidWcoInNldHRpbmcgY29uZ2VzdGlvbiBmb3IgJXBJNDoldSBpbiBtYXAgJXBcbiIsCisJICAmbWFwLT5tX2FkZHIsIG50b2hzKHBvcnQpLCBtYXApOworCisJaSA9IGJlMTZfdG9fY3B1KHBvcnQpIC8gUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKwlvZmYgPSBiZTE2X3RvX2NwdShwb3J0KSAlIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisKKwlnZW5lcmljX19fc2V0X2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworfQorCit2b2lkIHJkc19jb25nX2NsZWFyX2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCXJkc2RlYnVnKCJjbGVhcmluZyBjb25nZXN0aW9uIGZvciAlcEk0OiV1IGluIG1hcCAlcFxuIiwKKwkgICZtYXAtPm1fYWRkciwgbnRvaHMocG9ydCksIG1hcCk7CisKKwlpID0gYmUxNl90b19jcHUocG9ydCkgLyBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCW9mZiA9IGJlMTZfdG9fY3B1KHBvcnQpICUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKworCWdlbmVyaWNfX19jbGVhcl9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKK30KKworc3RhdGljIGludCByZHNfY29uZ190ZXN0X2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCisJcmV0dXJuIGdlbmVyaWNfdGVzdF9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKK30KKwordm9pZCByZHNfY29uZ19hZGRfc29ja2V0KHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJnJzLT5yc19jb25nX2xpc3QpKQorCQlsaXN0X2FkZCgmcnMtPnJzX2NvbmdfbGlzdCwgJnJkc19jb25nX21vbml0b3IpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCByZHNfY29uZ19yZW1vdmVfc29ja2V0KHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJnJzLT5yc19jb25nX2xpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKworCS8qIHVwZGF0ZSBjb25nZXN0aW9uIG1hcCBmb3Igbm93LWNsb3NlZCBwb3J0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwltYXAgPSByZHNfY29uZ190cmVlX3dhbGsocnMtPnJzX2JvdW5kX2FkZHIsIE5VTEwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKworCWlmIChtYXAgJiYgcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBycy0+cnNfYm91bmRfcG9ydCkpIHsKKwkJcmRzX2NvbmdfY2xlYXJfYml0KG1hcCwgcnMtPnJzX2JvdW5kX3BvcnQpOworCQlyZHNfY29uZ19xdWV1ZV91cGRhdGVzKG1hcCk7CisJfQorfQorCitpbnQgcmRzX2Nvbmdfd2FpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0LCBpbnQgbm9uYmxvY2ssCisJCSAgc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlpZiAoIXJkc19jb25nX3Rlc3RfYml0KG1hcCwgcG9ydCkpCisJCXJldHVybiAwOworCWlmIChub25ibG9jaykgeworCQlpZiAocnMgJiYgcnMtPnJzX2NvbmdfbW9uaXRvcikgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJLyogSXQgd291bGQgaGF2ZSBiZWVuIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWMgc2V0X2JpdCBvbgorCQkJICogYSB1aW50NjRfdC4gKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCQkJcnMtPnJzX2NvbmdfbWFzayB8PSBSRFNfQ09OR19NT05JVE9SX01BU0sobnRvaHMocG9ydCkpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCQkJLyogVGVzdCBhZ2FpbiAtIGEgY29uZ2VzdGlvbiB1cGRhdGUgbWF5IGhhdmUgYXJyaXZlZCBpbgorCQkJICogdGhlIG1lYW50aW1lLiAqLworCQkJaWYgKCFyZHNfY29uZ190ZXN0X2JpdChtYXAsIHBvcnQpKQorCQkJCXJldHVybiAwOworCQl9CisJCXJkc19zdGF0c19pbmMoc19jb25nX3NlbmRfZXJyb3IpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJcmRzX3N0YXRzX2luYyhzX2Nvbmdfc2VuZF9ibG9ja2VkKTsKKwlyZHNkZWJ1Zygid2FpdGluZyBvbiBtYXAgJXAgZm9yIHBvcnQgJXVcbiIsIG1hcCwgYmUxNl90b19jcHUocG9ydCkpOworCisJcmV0dXJuIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShtYXAtPm1fd2FpdHEsCisJCQkJCSFyZHNfY29uZ190ZXN0X2JpdChtYXAsIHBvcnQpKTsKK30KKwordm9pZCByZHNfY29uZ19leGl0KHZvaWQpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCXdoaWxlICgobm9kZSA9IHJiX2ZpcnN0KCZyZHNfY29uZ190cmVlKSkpIHsKKwkJbWFwID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHJkc19jb25nX21hcCwgbV9yYl9ub2RlKTsKKwkJcmRzZGVidWcoImZyZWVpbmcgbWFwICVwXG4iLCBtYXApOworCQlyYl9lcmFzZSgmbWFwLT5tX3JiX25vZGUsICZyZHNfY29uZ190cmVlKTsKKwkJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUyAmJiBtYXAtPm1fcGFnZV9hZGRyc1tpXTsgaSsrKQorCQkJZnJlZV9wYWdlKG1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKKwkJa2ZyZWUobWFwKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIFJEUyBtZXNzYWdlIGNvbnRhaW5pbmcgYSBjb25nZXN0aW9uIHVwZGF0ZS4KKyAqLworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfY29uZ191cGRhdGVfYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCA9IGNvbm4tPmNfbGNvbmc7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCXJtID0gcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKG1hcC0+bV9wYWdlX2FkZHJzLCBSRFNfQ09OR19NQVBfQllURVMpOworCWlmICghSVNfRVJSKHJtKSkKKwkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgPSBSRFNfRkxBR19DT05HX0JJVE1BUDsKKworCXJldHVybiBybTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvY29ubmVjdGlvbi5jIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczZjA2NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfaGFzaHRhYmxlcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAibG9vcC5oIgorI2luY2x1ZGUgInJkbWEuaCIKKworI2RlZmluZSBSRFNfQ09OTkVDVElPTl9IQVNIX0JJVFMgMTIKKyNkZWZpbmUgUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTICgxIDw8IFJEU19DT05ORUNUSU9OX0hBU0hfQklUUykKKyNkZWZpbmUgUkRTX0NPTk5FQ1RJT05fSEFTSF9NQVNLIChSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVMgLSAxKQorCisvKiBjb252ZXJ0aW5nIHRoaXMgdG8gUkNVIGlzIGEgY2hvcmUgZm9yIGFub3RoZXIgZGF5Li4gKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2Nvbm5fbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfY29ubl9jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByZHNfY29ubl9oYXNoW1JEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFU107CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19jb25uX3NsYWI7CisKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyKQoreworCS8qIFBhc3MgTlVMTCwgZG9uJ3QgbmVlZCBzdHJ1Y3QgbmV0IGZvciBoYXNoICovCisJdW5zaWduZWQgbG9uZyBoYXNoID0gaW5ldF9laGFzaGZuKE5VTEwsCisJCQkJCSAgYmUzMl90b19jcHUobGFkZHIpLCAwLAorCQkJCQkgIGJlMzJfdG9fY3B1KGZhZGRyKSwgMCk7CisJcmV0dXJuICZyZHNfY29ubl9oYXNoW2hhc2ggJiBSRFNfQ09OTkVDVElPTl9IQVNIX01BU0tdOworfQorCisjZGVmaW5lIHJkc19jb25uX2luZm9fc2V0KHZhciwgdGVzdCwgc3VmZml4KSBkbyB7CQlcCisJaWYgKHRlc3QpCQkJCQkJXAorCQl2YXIgfD0gUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHXyMjc3VmZml4OwlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGludCByZHNfY29ubl9pc19zZW5kaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbXV0ZXhfdHJ5bG9jaygmY29ubi0+Y19zZW5kX2xvY2spKQorCQlyZXQgPSAxOworCWVsc2UKKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCisJCQkJCSAgICAgIF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCQkgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgcG9zLCBoZWFkLCBjX2hhc2hfbm9kZSkgeworCQlpZiAoY29ubi0+Y19mYWRkciA9PSBmYWRkciAmJiBjb25uLT5jX2xhZGRyID09IGxhZGRyICYmCisJCQkJY29ubi0+Y190cmFucyA9PSB0cmFucykgeworCQkJcmV0ID0gY29ubjsKKwkJCWJyZWFrOworCQl9CisJfQorCXJkc2RlYnVnKCJyZXR1cm5pbmcgY29ubiAlcCBmb3IgJXBJNCAtPiAlcEk0XG4iLCByZXQsCisJCSAmbGFkZHIsICZmYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRyYW5zcG9ydHMgYXMgdGhleSdyZSBicmluZ2luZyBkb3duIGEgY29ubmVjdGlvbi4KKyAqIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0IGNhbiBzdGFydCBzZW5kaW5nCisgKiBhbmQgcmVjZWl2aW5nIG92ZXIgdGhpcyBjb25uZWN0aW9uIGFnYWluIGluIHRoZSBmdXR1cmUuICBJdCBpcyB1cCB0bworICogdGhlIHRyYW5zcG9ydCB0byBoYXZlIHNlcmlhbGl6ZWQgdGhpcyBjYWxsIHdpdGggaXRzIHNlbmQgYW5kIHJlY3YuCisgKi8KK3ZvaWQgcmRzX2Nvbm5fcmVzZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJkc2RlYnVnKCJjb25uZWN0aW9uICVwSTQgdG8gJXBJNCByZXNldFxuIiwKKwkgICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisKKwlyZHNfc3RhdHNfaW5jKHNfY29ubl9yZXNldCk7CisJcmRzX3NlbmRfcmVzZXQoY29ubik7CisJY29ubi0+Y19mbGFncyA9IDA7CisKKwkvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2gKKwkgKiByZXRyYW5zbWl0dGVkIHBhY2tldHMgZnJvbSBuZXcgcGFja2V0cywgYW5kIHdpbGwgaGFuZCBhbGwKKwkgKiBvZiB0aGVtIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhhdCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZQorCSAqIHJlbGlhYmlsaXR5IGd1YXJhbnRlZXMgb2YgUkRTLiAqLworfQorCisvKgorICogVGhlcmUgaXMgb25seSBldmVyeSBvbmUgJ2Nvbm4nIGZvciBhIGdpdmVuIHBhaXIgb2YgYWRkcmVzc2VzIGluIHRoZQorICogc3lzdGVtIGF0IGEgdGltZS4gIFRoZXkgY29udGFpbiBtZXNzYWdlcyB0byBiZSByZXRyYW5zbWl0dGVkIGFuZCBzbworICogc3BhbiB0aGUgbGlmZXRpbWUgb2YgdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9ucy4KKyAqCisgKiBGb3Igbm93IHRoZXkgYXJlIG5vdCBnYXJiYWdlIGNvbGxlY3RlZCBvbmNlIHRoZXkncmUgY3JlYXRlZC4gIFRoZXkKKyAqIGFyZSB0b3JuIGRvd24gYXMgdGhlIG1vZHVsZSBpcyByZW1vdmVkLCBpZiBldmVyLgorICovCitzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnAsCisJCQkJICAgICAgIGludCBpc19vdXRnb2luZykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sICp0bXAsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gcmRzX2Nvbm5fYnVja2V0KGxhZGRyLCBmYWRkcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKwljb25uID0gcmRzX2Nvbm5fbG9va3VwKGhlYWQsIGxhZGRyLCBmYWRkciwgdHJhbnMpOworCWlmIChjb25uCisJICYmIGNvbm4tPmNfbG9vcGJhY2sKKwkgJiYgY29ubi0+Y190cmFucyAhPSAmcmRzX2xvb3BfdHJhbnNwb3J0CisJICYmICFpc19vdXRnb2luZykgeworCQkvKiBUaGlzIGlzIGEgbG9vcGVkIGJhY2sgSUIgY29ubmVjdGlvbiwgYW5kIHdlJ3JlCisJCSAqIGNhbGxlZCBieSB0aGUgY29kZSBoYW5kbGluZyB0aGUgaW5jb21pbmcgY29ubmVjdC4KKwkJICogV2UgbmVlZCBhIHNlY29uZCBjb25uZWN0aW9uIG9iamVjdCBpbnRvIHdoaWNoIHdlCisJCSAqIGNhbiBzdGljayB0aGUgb3RoZXIgUVAuICovCisJCXBhcmVudCA9IGNvbm47CisJCWNvbm4gPSBwYXJlbnQtPmNfcGFzc2l2ZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCWlmIChjb25uKQorCQlnb3RvIG91dDsKKworCWNvbm4gPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19jb25uX3NsYWIsIGdmcCk7CisJaWYgKGNvbm4gPT0gTlVMTCkgeworCQljb25uID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtc2V0KGNvbm4sIDAsIHNpemVvZigqY29ubikpOworCisJSU5JVF9ITElTVF9OT0RFKCZjb25uLT5jX2hhc2hfbm9kZSk7CisJY29ubi0+Y192ZXJzaW9uID0gUkRTX1BST1RPQ09MXzNfMDsKKwljb25uLT5jX2xhZGRyID0gbGFkZHI7CisJY29ubi0+Y19mYWRkciA9IGZhZGRyOworCXNwaW5fbG9ja19pbml0KCZjb25uLT5jX2xvY2spOworCWNvbm4tPmNfbmV4dF90eF9zZXEgPSAxOworCisJbXV0ZXhfaW5pdCgmY29ubi0+Y19zZW5kX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjb25uLT5jX3NlbmRfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZjb25uLT5jX3JldHJhbnMpOworCisJcmV0ID0gcmRzX2NvbmdfZ2V0X21hcHMoY29ubik7CisJaWYgKHJldCkgeworCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCWNvbm4gPSBFUlJfUFRSKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhpcyBpcyB3aGVyZSBhIGNvbm5lY3Rpb24gYmVjb21lcyBsb29wYmFjay4gIElmICphbnkqIFJEUyBzb2NrZXRzCisJICogY2FuIGJpbmQgdG8gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgdGhlbiB3ZSdkIHJhdGhlciB0aGUgbWVzc2FnZXMKKwkgKiBmbG93IHRocm91Z2ggbG9vcGJhY2sgcmF0aGVyIHRoYW4gZWl0aGVyIHRyYW5zcG9ydC4KKwkgKi8KKwlpZiAocmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoZmFkZHIpKSB7CisJCWNvbm4tPmNfbG9vcGJhY2sgPSAxOworCQlpZiAoaXNfb3V0Z29pbmcgJiYgdHJhbnMtPnRfcHJlZmVyX2xvb3BiYWNrKSB7CisJCQkvKiAib3V0Z29pbmciIGNvbm5lY3Rpb24gLSBhbmQgdGhlIHRyYW5zcG9ydAorCQkJICogc2F5cyBpdCB3YW50cyB0aGUgY29ubmVjdGlvbiBoYW5kbGVkIGJ5IHRoZQorCQkJICogbG9vcGJhY2sgdHJhbnNwb3J0LiBUaGlzIGlzIHdoYXQgVENQIGRvZXMuCisJCQkgKi8KKwkJCXRyYW5zID0gJnJkc19sb29wX3RyYW5zcG9ydDsKKwkJfQorCX0KKworCWNvbm4tPmNfdHJhbnMgPSB0cmFuczsKKworCXJldCA9IHRyYW5zLT5jb25uX2FsbG9jKGNvbm4sIGdmcCk7CisJaWYgKHJldCkgeworCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCWNvbm4gPSBFUlJfUFRSKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0RPV04pOworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSAwOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb25uLT5jX3NlbmRfdywgcmRzX3NlbmRfd29ya2VyKTsKKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+Y19yZWN2X3csIHJkc19yZWN2X3dvcmtlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvbm4tPmNfY29ubl93LCByZHNfY29ubmVjdF93b3JrZXIpOworCUlOSVRfV09SSygmY29ubi0+Y19kb3duX3csIHJkc19zaHV0ZG93bl93b3JrZXIpOworCW11dGV4X2luaXQoJmNvbm4tPmNfY21fbG9jayk7CisJY29ubi0+Y19mbGFncyA9IDA7CisKKwlyZHNkZWJ1ZygiYWxsb2NhdGVkIGNvbm4gJXAgZm9yICVwSTQgLT4gJXBJNCBvdmVyICVzICVzXG4iLAorCSAgY29ubiwgJmxhZGRyLCAmZmFkZHIsCisJICB0cmFucy0+dF9uYW1lID8gdHJhbnMtPnRfbmFtZSA6ICJbdW5rbm93bl0iLAorCSAgaXNfb3V0Z29pbmcgPyAiKG91dGdvaW5nKSIgOiAiIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCWlmIChwYXJlbnQgPT0gTlVMTCkgeworCQl0bXAgPSByZHNfY29ubl9sb29rdXAoaGVhZCwgbGFkZHIsIGZhZGRyLCB0cmFucyk7CisJCWlmICh0bXAgPT0gTlVMTCkKKwkJCWhsaXN0X2FkZF9oZWFkKCZjb25uLT5jX2hhc2hfbm9kZSwgaGVhZCk7CisJfSBlbHNlIHsKKwkJdG1wID0gcGFyZW50LT5jX3Bhc3NpdmU7CisJCWlmICghdG1wKQorCQkJcGFyZW50LT5jX3Bhc3NpdmUgPSBjb25uOworCX0KKworCWlmICh0bXApIHsKKwkJdHJhbnMtPmNvbm5fZnJlZShjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQljb25uID0gdG1wOworCX0gZWxzZSB7CisJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOworCQlyZHNfY29ubl9jb3VudCsrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworb3V0OgorCXJldHVybiBjb25uOworfQorCitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIF9fcmRzX2Nvbm5fY3JlYXRlKGxhZGRyLCBmYWRkciwgdHJhbnMsIGdmcCwgMCk7Cit9CisKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gX19yZHNfY29ubl9jcmVhdGUobGFkZHIsIGZhZGRyLCB0cmFucywgZ2ZwLCAxKTsKK30KKwordm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqcnRtcDsKKworCXJkc2RlYnVnKCJmcmVlaW5nIGNvbm4gJXAgZm9yICVwSTQgLT4gIgorCQkgIiVwSTRcbiIsIGNvbm4sICZjb25uLT5jX2xhZGRyLAorCQkgJmNvbm4tPmNfZmFkZHIpOworCisJaGxpc3RfZGVsX2luaXQoJmNvbm4tPmNfaGFzaF9ub2RlKTsKKworCS8qIHdhaXQgZm9yIHRoZSByZHMgdGhyZWFkIHRvIHNodXQgaXQgZG93biAqLworCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZjb25uLT5jX2Nvbm5fdyk7CisJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7CisJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CisKKwkvKiB0ZWFyIGRvd24gcXVldWVkIG1lc3NhZ2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCBydG1wLAorCQkJCSAmY29ubi0+Y19zZW5kX3F1ZXVlLAorCQkJCSBtX2Nvbm5faXRlbSkgeworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9jb25uX2l0ZW0pOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnJtLT5tX3NvY2tfaXRlbSkpOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KKwlpZiAoY29ubi0+Y194bWl0X3JtKQorCQlyZHNfbWVzc2FnZV9wdXQoY29ubi0+Y194bWl0X3JtKTsKKworCWNvbm4tPmNfdHJhbnMtPmNvbm5fZnJlZShjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKworCS8qCisJICogVGhlIGNvbmdlc3Rpb24gbWFwcyBhcmVuJ3QgZnJlZWQgdXAgaGVyZS4gIFRoZXkncmUKKwkgKiBmcmVlZCBieSByZHNfY29uZ19leGl0KCkgYWZ0ZXIgYWxsIHRoZSBjb25uZWN0aW9ucworCSAqIGhhdmUgYmVlbiBmcmVlZC4KKwkgKi8KKwlyZHNfY29uZ19yZW1vdmVfY29ubihjb25uKTsKKworCUJVR19PTighbGlzdF9lbXB0eSgmY29ubi0+Y19yZXRyYW5zKSk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCisJcmRzX2Nvbm5fY291bnQtLTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucywKKwkJCQkgIGludCB3YW50X3NlbmQpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKwlzaXplX3QgaTsKKworCWxlbiAvPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDAsIGhlYWQgPSByZHNfY29ubl9oYXNoOyBpIDwgQVJSQVlfU0laRShyZHNfY29ubl9oYXNoKTsKKwkgICAgIGkrKywgaGVhZCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sIHBvcywgaGVhZCwgY19oYXNoX25vZGUpIHsKKwkJCWlmICh3YW50X3NlbmQpCisJCQkJbGlzdCA9ICZjb25uLT5jX3NlbmRfcXVldWU7CisJCQllbHNlCisJCQkJbGlzdCA9ICZjb25uLT5jX3JldHJhbnM7CisKKwkJCXNwaW5fbG9jaygmY29ubi0+Y19sb2NrKTsKKworCQkJLyogWFhYIHRvbyBsYXp5IHRvIG1haW50YWluIGNvdW50cy4uICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCBsaXN0LCBtX2Nvbm5faXRlbSkgeworCQkJCXRvdGFsKys7CisJCQkJaWYgKHRvdGFsIDw9IGxlbikKKwkJCQkJcmRzX2luY19pbmZvX2NvcHkoJnJtLT5tX2luYywgaXRlciwKKwkJCQkJCQkgIGNvbm4tPmNfbGFkZHIsCisJCQkJCQkJICBjb25uLT5jX2ZhZGRyLCAwKTsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKKwlsZW5zLT5uciA9IHRvdGFsOworCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9tZXNzYWdlX2luZm9fc2VuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19jb25uX21lc3NhZ2VfaW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsIDEpOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9tZXNzYWdlX2luZm9fcmV0cmFucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCQkgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19jb25uX21lc3NhZ2VfaW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsIDApOworfQorCit2b2lkIHJkc19mb3JfZWFjaF9jb25uX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucywKKwkJCSAgaW50ICgqdmlzaXRvcikoc3RydWN0IHJkc19jb25uZWN0aW9uICosIHZvaWQgKiksCisJCQkgIHNpemVfdCBpdGVtX2xlbikKK3sKKwl1aW50NjRfdCBidWZmZXJbKGl0ZW1fbGVuICsgNykgLyA4XTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc2l6ZV90IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCisJbGVucy0+bnIgPSAwOworCWxlbnMtPmVhY2ggPSBpdGVtX2xlbjsKKworCWZvciAoaSA9IDAsIGhlYWQgPSByZHNfY29ubl9oYXNoOyBpIDwgQVJSQVlfU0laRShyZHNfY29ubl9oYXNoKTsKKwkgICAgIGkrKywgaGVhZCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgcG9zLCB0bXAsIGhlYWQsIGNfaGFzaF9ub2RlKSB7CisKKwkJCS8qIFhYWCBubyBjX2xvY2sgdXNhZ2UuLiAqLworCQkJaWYgKCF2aXNpdG9yKGNvbm4sIGJ1ZmZlcikpCisJCQkJY29udGludWU7CisKKwkJCS8qIFdlIGNvcHkgYXMgbXVjaCBhcyB3ZSBjYW4gZml0IGluIHRoZSBidWZmZXIsCisJCQkgKiBidXQgd2UgY291bnQgYWxsIGl0ZW1zIHNvIHRoYXQgdGhlIGNhbGxlcgorCQkJICogY2FuIHJlc2l6ZSB0aGUgYnVmZmVyLiAqLworCQkJaWYgKGxlbiA+PSBpdGVtX2xlbikgeworCQkJCXJkc19pbmZvX2NvcHkoaXRlciwgYnVmZmVyLCBpdGVtX2xlbik7CisJCQkJbGVuIC09IGl0ZW1fbGVuOworCQkJfQorCQkJbGVucy0+bnIrKzsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCByZHNfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uICpjaW5mbyA9IGJ1ZmZlcjsKKworCWNpbmZvLT5uZXh0X3R4X3NlcSA9IGNvbm4tPmNfbmV4dF90eF9zZXE7CisJY2luZm8tPm5leHRfcnhfc2VxID0gY29ubi0+Y19uZXh0X3J4X3NlcTsKKwljaW5mby0+bGFkZHIgPSBjb25uLT5jX2xhZGRyOworCWNpbmZvLT5mYWRkciA9IGNvbm4tPmNfZmFkZHI7CisJc3RybmNweShjaW5mby0+dHJhbnNwb3J0LCBjb25uLT5jX3RyYW5zLT50X25hbWUsCisJCXNpemVvZihjaW5mby0+dHJhbnNwb3J0KSk7CisJY2luZm8tPmZsYWdzID0gMDsKKworCXJkc19jb25uX2luZm9fc2V0KGNpbmZvLT5mbGFncywKKwkJCSAgcmRzX2Nvbm5faXNfc2VuZGluZyhjb25uKSwgU0VORElORyk7CisJLyogWFhYIEZ1dHVyZTogcmV0dXJuIHRoZSBzdGF0ZSByYXRoZXIgdGhhbiB0aGVzZSBmdW5reSBiaXRzICovCisJcmRzX2Nvbm5faW5mb19zZXQoY2luZm8tPmZsYWdzLAorCQkJICBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fQ09OTkVDVElORywKKwkJCSAgQ09OTkVDVElORyk7CisJcmRzX2Nvbm5faW5mb19zZXQoY2luZm8tPmZsYWdzLAorCQkJICBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fVVAsCisJCQkgIENPTk5FQ1RFRCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uKSk7Cit9CisKK2ludCBfX2luaXQgcmRzX2Nvbm5faW5pdCh2b2lkKQoreworCXJkc19jb25uX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2Nvbm5lY3Rpb24iLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24pLAorCQkJCQkgIDAsIDAsIE5VTEwpOworCWlmIChyZHNfY29ubl9zbGFiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19DT05ORUNUSU9OUywgcmRzX2Nvbm5faW5mbyk7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TRU5EX01FU1NBR0VTLAorCQkJICAgICAgIHJkc19jb25uX21lc3NhZ2VfaW5mb19zZW5kKTsKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFVFJBTlNfTUVTU0FHRVMsCisJCQkgICAgICAgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3JldHJhbnMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2Nvbm5fZXhpdCh2b2lkKQoreworCXJkc19sb29wX2V4aXQoKTsKKworCVdBUk5fT04oIWhsaXN0X2VtcHR5KHJkc19jb25uX2hhc2gpKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfY29ubl9zbGFiKTsKKworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19DT05ORUNUSU9OUywgcmRzX2Nvbm5faW5mbyk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NFTkRfTUVTU0FHRVMsCisJCQkJIHJkc19jb25uX21lc3NhZ2VfaW5mb19zZW5kKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVUUkFOU19NRVNTQUdFUywKKwkJCQkgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3JldHJhbnMpOworfQorCisvKgorICogRm9yY2UgYSBkaXNjb25uZWN0CisgKi8KK3ZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRVJST1IpOworCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOworfQorCisvKgorICogQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAqLwordm9pZAorX19yZHNfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZHNfY29ubl9kcm9wKGNvbm4pOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTdiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liLmMKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK3Vuc2lnbmVkIGludCBmbXJfcG9vbF9zaXplID0gUkRTX0ZNUl9QT09MX1NJWkU7Cit1bnNpZ25lZCBpbnQgZm1yX21lc3NhZ2Vfc2l6ZSA9IFJEU19GTVJfU0laRSArIDE7IC8qICsxIGFsbG93cyBmb3IgdW5hbGlnbmVkIE1ScyAqLworCittb2R1bGVfcGFyYW0oZm1yX3Bvb2xfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1yX3Bvb2xfc2l6ZSwgIiBNYXggbnVtYmVyIG9mIGZtciBwZXIgSENBIik7Cittb2R1bGVfcGFyYW0oZm1yX21lc3NhZ2Vfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1yX21lc3NhZ2Vfc2l6ZSwgIiBNYXggc2l6ZSBvZiBhIFJETUEgdHJhbnNmZXIiKTsKKworc3RydWN0IGxpc3RfaGVhZCByZHNfaWJfZGV2aWNlczsKKworREVGSU5FX1NQSU5MT0NLKGliX25vZGV2X2Nvbm5zX2xvY2spOworTElTVF9IRUFEKGliX25vZGV2X2Nvbm5zKTsKKwordm9pZCByZHNfaWJfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldl9hdHRyOworCisJLyogT25seSBoYW5kbGUgSUIgKG5vIGlXQVJQKSBkZXZpY2VzICovCisJaWYgKGRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9DQSkKKwkJcmV0dXJuOworCisJZGV2X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2X2F0dHIpCisJCXJldHVybjsKKworCWlmIChpYl9xdWVyeV9kZXZpY2UoZGV2aWNlLCBkZXZfYXR0cikpIHsKKwkJcmRzZGVidWcoIlF1ZXJ5IGRldmljZSBmYWlsZWQgZm9yICVzXG4iLCBkZXZpY2UtPm5hbWUpOworCQlnb3RvIGZyZWVfYXR0cjsKKwl9CisKKwlyZHNfaWJkZXYgPSBrbWFsbG9jKHNpemVvZiAqcmRzX2liZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkc19pYmRldikKKwkJZ290byBmcmVlX2F0dHI7CisKKwlzcGluX2xvY2tfaW5pdCgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlyZHNfaWJkZXYtPm1heF93cnMgPSBkZXZfYXR0ci0+bWF4X3FwX3dyOworCXJkc19pYmRldi0+bWF4X3NnZSA9IG1pbihkZXZfYXR0ci0+bWF4X3NnZSwgUkRTX0lCX01BWF9TR0UpOworCisJcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdCA9IG1heCg5LCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7CisJcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplICA9IDEgPDwgcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlyZHNfaWJkZXYtPmZtcl9wYWdlX21hc2sgID0gfigodTY0KSByZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUgLSAxKTsKKwlyZHNfaWJkZXYtPmZtcl9tYXhfcmVtYXBzID0gZGV2X2F0dHItPm1heF9tYXBfcGVyX2Ztcj86IDMyOworCXJkc19pYmRldi0+bWF4X2ZtcnMgPSBkZXZfYXR0ci0+bWF4X2ZtciA/CisJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGRldl9hdHRyLT5tYXhfZm1yLCBmbXJfcG9vbF9zaXplKSA6CisJCQlmbXJfcG9vbF9zaXplOworCisJcmRzX2liZGV2LT5kZXYgPSBkZXZpY2U7CisJcmRzX2liZGV2LT5wZCA9IGliX2FsbG9jX3BkKGRldmljZSk7CisJaWYgKElTX0VSUihyZHNfaWJkZXYtPnBkKSkKKwkJZ290byBmcmVlX2RldjsKKworCXJkc19pYmRldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pYmRldi0+cGQsCisJCQkJICAgICAgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKKwlpZiAoSVNfRVJSKHJkc19pYmRldi0+bXIpKQorCQlnb3RvIGVycl9wZDsKKworCXJkc19pYmRldi0+bXJfcG9vbCA9IHJkc19pYl9jcmVhdGVfbXJfcG9vbChyZHNfaWJkZXYpOworCWlmIChJU19FUlIocmRzX2liZGV2LT5tcl9wb29sKSkgeworCQlyZHNfaWJkZXYtPm1yX3Bvb2wgPSBOVUxMOworCQlnb3RvIGVycl9tcjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+Y29ubl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZyZHNfaWJkZXYtPmxpc3QsICZyZHNfaWJfZGV2aWNlcyk7CisKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2liX2NsaWVudCwgcmRzX2liZGV2KTsKKworCWdvdG8gZnJlZV9hdHRyOworCitlcnJfbXI6CisJaWJfZGVyZWdfbXIocmRzX2liZGV2LT5tcik7CitlcnJfcGQ6CisJaWJfZGVhbGxvY19wZChyZHNfaWJkZXYtPnBkKTsKK2ZyZWVfZGV2OgorCWtmcmVlKHJkc19pYmRldik7CitmcmVlX2F0dHI6CisJa2ZyZWUoZGV2X2F0dHIpOworfQorCit2b2lkIHJkc19pYl9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkciwgKmlfbmV4dDsKKworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKwlpZiAoIXJkc19pYmRldikKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfaXBhZGRyLCBpX25leHQsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZpX2lwYWRkci0+bGlzdCk7CisJCWtmcmVlKGlfaXBhZGRyKTsKKwl9CisKKwlyZHNfaWJfcmVtb3ZlX2Nvbm5zKHJkc19pYmRldik7CisKKwlpZiAocmRzX2liZGV2LT5tcl9wb29sKQorCQlyZHNfaWJfZGVzdHJveV9tcl9wb29sKHJkc19pYmRldi0+bXJfcG9vbCk7CisKKwlpYl9kZXJlZ19tcihyZHNfaWJkZXYtPm1yKTsKKworCXdoaWxlIChpYl9kZWFsbG9jX3BkKHJkc19pYmRldi0+cGQpKSB7CisJCXJkc2RlYnVnKCJGYWlsZWQgdG8gZGVhbGxvYyBwZCAlcFxuIiwgcmRzX2liZGV2LT5wZCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlsaXN0X2RlbCgmcmRzX2liZGV2LT5saXN0KTsKKwlrZnJlZShyZHNfaWJkZXYpOworfQorCitzdHJ1Y3QgaWJfY2xpZW50IHJkc19pYl9jbGllbnQgPSB7CisJLm5hbWUgICA9ICJyZHNfaWIiLAorCS5hZGQgICAgPSByZHNfaWJfYWRkX29uZSwKKwkucmVtb3ZlID0gcmRzX2liX3JlbW92ZV9vbmUKK307CisKK3N0YXRpYyBpbnQgcmRzX2liX2Nvbm5faW5mb192aXNpdG9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgICAgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvID0gYnVmZmVyOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWM7CisKKwkvKiBXZSB3aWxsIG9ubHkgZXZlciBsb29rIGF0IElCIHRyYW5zcG9ydHMgKi8KKwlpZiAoY29ubi0+Y190cmFucyAhPSAmcmRzX2liX3RyYW5zcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpaW5mby0+c3JjX2FkZHIgPSBjb25uLT5jX2xhZGRyOworCWlpbmZvLT5kc3RfYWRkciA9IGNvbm4tPmNfZmFkZHI7CisKKwltZW1zZXQoJmlpbmZvLT5zcmNfZ2lkLCAwLCBzaXplb2YoaWluZm8tPnNyY19naWQpKTsKKwltZW1zZXQoJmlpbmZvLT5kc3RfZ2lkLCAwLCBzaXplb2YoaWluZm8tPmRzdF9naWQpKTsKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwkJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCisJCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwkJZGV2X2FkZHIgPSAmaWMtPmlfY21faWQtPnJvdXRlLmFkZHIuZGV2X2FkZHI7CisKKwkJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPnNyY19naWQpOworCQlpYl9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+ZHN0X2dpZCk7CisKKwkJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKwkJaWluZm8tPm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfcmVjdl93ciA9IGljLT5pX3JlY3ZfcmluZy53X25yOworCQlpaW5mby0+bWF4X3NlbmRfc2dlID0gcmRzX2liZGV2LT5tYXhfc2dlOworCQlyZHNfaWJfZ2V0X21yX2luZm8ocmRzX2liZGV2LCBpaW5mbyk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfaWNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsCisJCQkJcmRzX2liX2Nvbm5faW5mb192aXNpdG9yLAorCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uKSk7Cit9CisKKworLyoKKyAqIEVhcmx5IFJEUy9JQiB3YXMgYnVpbHQgdG8gb25seSBiaW5kIHRvIGFuIGFkZHJlc3MgaWYgdGhlcmUgaXMgYW4gSVBvSUIKKyAqIGRldmljZSB3aXRoIHRoYXQgYWRkcmVzcyBzZXQuCisgKgorICogSWYgaXQgd2VyZSBtZSwgSSdkIGFkdm9jYXRlIGZvciBzb21ldGhpbmcgbW9yZSBmbGV4aWJsZS4gIFNlbmRpbmcgYW5kCisgKiByZWNlaXZpbmcgc2hvdWxkIGJlIGRldmljZS1hZ25vc3RpYy4gIFRyYW5zcG9ydHMgd291bGQgdHJ5IGFuZCBtYWludGFpbgorICogY29ubmVjdGlvbnMgYmV0d2VlbiBwZWVycyB3aG8gaGF2ZSBtZXNzYWdlcyBxdWV1ZWQuICBVc2Vyc3BhY2Ugd291bGQgYmUKKyAqIGFsbG93ZWQgdG8gaW5mbHVlbmNlIHdoaWNoIHBhdGhzIGhhdmUgcHJpb3JpdHkuICBXZSBjb3VsZCBjYWxsIHVzZXJzcGFjZQorICogYXNzZXJ0aW5nIHRoaXMgcG9saWN5ICJyb3V0aW5nIi4KKyAqLworc3RhdGljIGludCByZHNfaWJfbGFkZHJfY2hlY2soX19iZTMyIGFkZHIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKworCS8qIENyZWF0ZSBhIENNQSBJRCBhbmQgdHJ5IHRvIGJpbmQgaXQuIFRoaXMgY2F0Y2hlcyBib3RoCisJICogSUIgYW5kIGlXQVJQIGNhcGFibGUgTklDcy4KKwkgKi8KKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKE5VTEwsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoIWNtX2lkKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHNpbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gYWRkcjsKKworCS8qIHJkbWFfYmluZF9hZGRyIHdpbGwgb25seSBzdWNjZWVkIGZvciBJQiAmIGlXQVJQIGRldmljZXMgKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihjbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOworCS8qIGR1ZSB0byB0aGlzLCB3ZSB3aWxsIGNsYWltIHRvIHN1cHBvcnQgaVdBUlAgZGV2aWNlcyB1bmxlc3Mgd2UKKwkgICBjaGVjayBub2RlX3R5cGUuICovCisJaWYgKHJldCB8fCBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX0lCX0NBKQorCQlyZXQgPSAtRUFERFJOT1RBVkFJTDsKKworCXJkc2RlYnVnKCJhZGRyICVwSTQgcmV0ICVkIG5vZGUgdHlwZSAlZFxuIiwKKwkJJmFkZHIsIHJldCwKKwkJY21faWQtPmRldmljZSA/IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSA6IC0xKTsKKworCXJkbWFfZGVzdHJveV9pZChjbV9pZCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9leGl0KHZvaWQpCit7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TLCByZHNfaWJfaWNfaW5mbyk7CisJcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucygpOworCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKKwlyZHNfaWJfc3lzY3RsX2V4aXQoKTsKKwlyZHNfaWJfcmVjdl9leGl0KCk7CisJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJnJkc19pYl90cmFuc3BvcnQpOworfQorCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0ID0geworCS5sYWRkcl9jaGVjawkJPSByZHNfaWJfbGFkZHJfY2hlY2ssCisJLnhtaXRfY29tcGxldGUJCT0gcmRzX2liX3htaXRfY29tcGxldGUsCisJLnhtaXQJCQk9IHJkc19pYl94bWl0LAorCS54bWl0X2NvbmdfbWFwCQk9IE5VTEwsCisJLnhtaXRfcmRtYQkJPSByZHNfaWJfeG1pdF9yZG1hLAorCS5yZWN2CQkJPSByZHNfaWJfcmVjdiwKKwkuY29ubl9hbGxvYwkJPSByZHNfaWJfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc19pYl9jb25uX2ZyZWUsCisJLmNvbm5fY29ubmVjdAkJPSByZHNfaWJfY29ubl9jb25uZWN0LAorCS5jb25uX3NodXRkb3duCQk9IHJkc19pYl9jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX2liX2luY19jb3B5X3RvX3VzZXIsCisJLmluY19wdXJnZQkJPSByZHNfaWJfaW5jX3B1cmdlLAorCS5pbmNfZnJlZQkJPSByZHNfaWJfaW5jX2ZyZWUsCisJLmNtX2luaXRpYXRlX2Nvbm5lY3QJPSByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdCwKKwkuY21faGFuZGxlX2Nvbm5lY3QJPSByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3QsCisJLmNtX2Nvbm5lY3RfY29tcGxldGUJPSByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZSwKKwkuc3RhdHNfaW5mb19jb3B5CT0gcmRzX2liX3N0YXRzX2luZm9fY29weSwKKwkuZXhpdAkJCT0gcmRzX2liX2V4aXQsCisJLmdldF9tcgkJCT0gcmRzX2liX2dldF9tciwKKwkuc3luY19tcgkJPSByZHNfaWJfc3luY19tciwKKwkuZnJlZV9tcgkJPSByZHNfaWJfZnJlZV9tciwKKwkuZmx1c2hfbXJzCQk9IHJkc19pYl9mbHVzaF9tcnMsCisJLnRfb3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnRfbmFtZQkJCT0gImluZmluaWJhbmQiLAorfTsKKworaW50IF9faW5pdCByZHNfaWJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liX2RldmljZXMpOworCisJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJkc19pYl9zeXNjdGxfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2licmVnOworCisJcmV0ID0gcmRzX2liX3JlY3ZfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N5c2N0bDsKKworCXJldCA9IHJkc190cmFuc19yZWdpc3RlcigmcmRzX2liX3RyYW5zcG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVjdjsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSUJfQ09OTkVDVElPTlMsIHJkc19pYl9pY19pbmZvKTsKKworCWdvdG8gb3V0OworCitvdXRfcmVjdjoKKwlyZHNfaWJfcmVjdl9leGl0KCk7CitvdXRfc3lzY3RsOgorCXJkc19pYl9zeXNjdGxfZXhpdCgpOworb3V0X2licmVnOgorCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuaCBiL25ldC9yZHMvaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU1NjNhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYi5oCkBAIC0wLDAgKzEsMzY3IEBACisjaWZuZGVmIF9SRFNfSUJfSAorI2RlZmluZSBfUkRTX0lCX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgorCisjZGVmaW5lIFJEU19GTVJfU0laRQkJCTI1NgorI2RlZmluZSBSRFNfRk1SX1BPT0xfU0laRQkJNDA5NgorCisjZGVmaW5lIFJEU19JQl9NQVhfU0dFCQkJOAorI2RlZmluZSBSRFNfSUJfUkVDVl9TR0UgCQkyCisKKyNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfUkVDVl9XUgkJMTAyNAorI2RlZmluZSBSRFNfSUJfREVGQVVMVF9TRU5EX1dSCQkyNTYKKworI2RlZmluZSBSRFNfSUJfU1VQUE9SVEVEX1BST1RPQ09MUwkweDAwMDAwMDAzCS8qIG1pbm9yIHZlcnNpb25zIHN1cHBvcnRlZCAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCByZHNfaWJfZGV2aWNlczsKKworLyoKKyAqIElCIHBvc3RzIFJEU19GUkFHX1NJWkUgZnJhZ21lbnRzIG9mIHBhZ2VzIHRvIHRoZSByZWNlaXZlIHF1ZXVlcyB0bworICogdHJ5IGFuZCBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aWVkIHVwIGJvdGggdGhlIGRldmljZSBhbmQKKyAqIHNvY2tldCByZWNlaXZlIHF1ZXVlcy4KKyAqLworLyogcGFnZSBvZmZzZXQgb2YgdGhlIGZpbmFsIGZ1bGwgZnJhZyB0aGF0IGZpdHMgaW4gdGhlIHBhZ2UgKi8KKyNkZWZpbmUgUkRTX1BBR0VfTEFTVF9PRkYgKCgoUEFHRV9TSVpFICAvIFJEU19GUkFHX1NJWkUpIC0gMSkgKiBSRFNfRlJBR19TSVpFKQorc3RydWN0IHJkc19wYWdlX2ZyYWcgeworCXN0cnVjdCBsaXN0X2hlYWQJZl9pdGVtOworCXN0cnVjdCBwYWdlCQkqZl9wYWdlOworCXVuc2lnbmVkIGxvbmcJCWZfb2Zmc2V0OworCWRtYV9hZGRyX3QgCQlmX21hcHBlZDsKK307CisKK3N0cnVjdCByZHNfaWJfaW5jb21pbmcgeworCXN0cnVjdCBsaXN0X2hlYWQJaWlfZnJhZ3M7CisJc3RydWN0IHJkc19pbmNvbWluZwlpaV9pbmM7Cit9OworCitzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSB7CisJLyogQWRkIG5ldyBmaWVsZHMgYXQgdGhlIGVuZCwgYW5kIGRvbid0IHBlcm11dGUgZXhpc3RpbmcgZmllbGRzLiAqLworCV9fYmUzMgkJCWRwX3NhZGRyOworCV9fYmUzMgkJCWRwX2RhZGRyOworCXU4CQkJZHBfcHJvdG9jb2xfbWFqb3I7CisJdTgJCQlkcF9wcm90b2NvbF9taW5vcjsKKwlfX2JlMTYJCQlkcF9wcm90b2NvbF9taW5vcl9tYXNrOyAvKiBiaXRtYXNrICovCisJX19iZTMyCQkJZHBfcmVzZXJ2ZWQxOworCV9fYmU2NAkJCWRwX2Fja19zZXE7CisJX19iZTMyCQkJZHBfY3JlZGl0OwkJLyogbm9uLXplcm8gZW5hYmxlcyBmbG93IGN0bCAqLworfTsKKworc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgeworCXN0cnVjdCByZHNfbWVzc2FnZQkqc19ybTsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AJKnNfb3A7CisJc3RydWN0IGliX3NlbmRfd3IJc193cjsKKwlzdHJ1Y3QgaWJfc2dlCQlzX3NnZVtSRFNfSUJfTUFYX1NHRV07CisJdW5zaWduZWQgbG9uZwkJc19xdWV1ZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayB7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAJKnJfaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJKnJfZnJhZzsKKwlzdHJ1Y3QgaWJfcmVjdl93cglyX3dyOworCXN0cnVjdCBpYl9zZ2UJCXJfc2dlWzJdOworfTsKKworc3RydWN0IHJkc19pYl93b3JrX3JpbmcgeworCXUzMgkJd19ucjsKKwl1MzIJCXdfYWxsb2NfcHRyOworCXUzMgkJd19hbGxvY19jdHI7CisJdTMyCQl3X2ZyZWVfcHRyOworCWF0b21pY190CXdfZnJlZV9jdHI7Cit9OworCitzdHJ1Y3QgcmRzX2liX2RldmljZTsKKworc3RydWN0IHJkc19pYl9jb25uZWN0aW9uIHsKKworCXN0cnVjdCBsaXN0X2hlYWQJaWJfbm9kZTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZQkqcmRzX2liZGV2OworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqY29ubjsKKworCS8qIGFscGhhYmV0IHNvdXAsIElCVEEgc3R5bGUgKi8KKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqaV9jbV9pZDsKKwlzdHJ1Y3QgaWJfcGQJCSppX3BkOworCXN0cnVjdCBpYl9tcgkJKmlfbXI7CisJc3RydWN0IGliX2NxCQkqaV9zZW5kX2NxOworCXN0cnVjdCBpYl9jcQkJKmlfcmVjdl9jcTsKKworCS8qIHR4ICovCisJc3RydWN0IHJkc19pYl93b3JrX3JpbmcJaV9zZW5kX3Jpbmc7CisJc3RydWN0IHJkc19tZXNzYWdlCSppX3JtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3NlbmRfaGRyczsKKwl1NjQJCQlpX3NlbmRfaGRyc19kbWE7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmlfc2VuZHM7CisKKwkvKiByeCAqLworCXN0cnVjdCBtdXRleAkJaV9yZWN2X211dGV4OworCXN0cnVjdCByZHNfaWJfd29ya19yaW5nCWlfcmVjdl9yaW5nOworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcJKmlfaWJpbmM7CisJdTMyCQkJaV9yZWN2X2RhdGFfcmVtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3JlY3ZfaGRyczsKKwl1NjQJCQlpX3JlY3ZfaGRyc19kbWE7CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKmlfcmVjdnM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJaV9mcmFnOworCXU2NAkJCWlfYWNrX3JlY3Y7CS8qIGxhc3QgQUNLIHJlY2VpdmVkICovCisKKwkvKiBzZW5kaW5nIGFja3MgKi8KKwl1bnNpZ25lZCBsb25nCQlpX2Fja19mbGFnczsKKwl1NjQJCQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisJc3RydWN0IHJkc19oZWFkZXIJKmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyCWlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UJCWlfYWNrX3NnZTsKKwl1NjQJCQlpX2Fja19kbWE7CisJdW5zaWduZWQgbG9uZwkJaV9hY2tfcXVldWVkOworCisJLyogRmxvdyBjb250cm9sIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkgKgorCSAqIE91ciBhbGdvcml0aG0gdXNlcyBhIHBhaXIgdmFyaWFibGVzIHRoYXQgd2UgbmVlZCB0byBhY2Nlc3MKKwkgKiBhdG9taWNhbGx5IC0gb25lIGZvciB0aGUgc2VuZCBjcmVkaXRzLCBhbmQgb25lIHBvc3RlZAorCSAqIHJlY3YgY3JlZGl0cyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRvIHJlbW90ZS4KKwkgKiBSYXRoZXIgdGhhbiBwcm90ZWN0IHRoZW0gdXNpbmcgYSBzbG93IHNwaW5sb2NrLCB3ZSBwdXQgYm90aCBpbnRvCisJICogYSBzaW5nbGUgYXRvbWljX3QgYW5kIHVwZGF0ZSBpdCB1c2luZyBjbXB4Y2hnCisJICovCisJYXRvbWljX3QJCWlfY3JlZGl0czsKKworCS8qIFByb3RvY29sIHZlcnNpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWlfZmxvd2N0bDoxOwkvKiBlbmFibGUvZGlzYWJsZSBmbG93IGN0bCAqLworCisJLyogQmF0Y2hlZCBjb21wbGV0aW9ucyAqLworCXVuc2lnbmVkIGludAkJaV91bnNpZ25hbGVkX3dyczsKKwlsb25nCQkJaV91bnNpZ25hbGVkX2J5dGVzOworfTsKKworLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaXMgYXQgbGVhc3QgMzIgYml0cyAqLworI2RlZmluZSBJQl9HRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX0dFVF9QT1NUX0NSRURJVFModikJKCh2KSA+PiAxNikKKyNkZWZpbmUgSUJfU0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9TRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPDwgMTYpCisKK3N0cnVjdCByZHNfaWJfaXBhZGRyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJX19iZTMyCQkJaXBhZGRyOworfTsKKworc3RydWN0IHJkc19pYl9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlwYWRkcl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJY29ubl9saXN0OworCXN0cnVjdCBpYl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgaWJfcGQJCSpwZDsKKwlzdHJ1Y3QgaWJfbXIJCSptcjsKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wJKm1yX3Bvb2w7CisJaW50CQkJZm1yX3BhZ2Vfc2hpZnQ7CisJaW50CQkJZm1yX3BhZ2Vfc2l6ZTsKKwl1NjQJCQlmbXJfcGFnZV9tYXNrOworCXVuc2lnbmVkIGludAkJZm1yX21heF9yZW1hcHM7CisJdW5zaWduZWQgaW50CQltYXhfZm1yczsKKwlpbnQJCQltYXhfc2dlOworCXVuc2lnbmVkIGludAkJbWF4X3dyczsKKwlzcGlubG9ja190CQlzcGlubG9jazsJLyogcHJvdGVjdCB0aGUgYWJvdmUgKi8KK307CisKKy8qIGJpdHMgZm9yIGlfYWNrX2ZsYWdzICovCisjZGVmaW5lIElCX0FDS19JTl9GTElHSFQJMAorI2RlZmluZSBJQl9BQ0tfUkVRVUVTVEVECTEKKworLyogTWFnaWMgV1JfSUQgZm9yIEFDS3MgKi8KKyNkZWZpbmUgUkRTX0lCX0FDS19XUl9JRAkofih1NjQpIDApCisKK3N0cnVjdCByZHNfaWJfc3RhdGlzdGljcyB7CisJdWludDY0X3QJc19pYl9jb25uZWN0X3JhY2VkOworCXVpbnQ2NF90CXNfaWJfbGlzdGVuX2Nsb3NlZF9zdGFsZTsKKwl1aW50NjRfdAlzX2liX3R4X2NxX2NhbGw7CisJdWludDY0X3QJc19pYl90eF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2liX3R4X3JpbmdfZnVsbDsKKwl1aW50NjRfdAlzX2liX3R4X3Rocm90dGxlOworCXVpbnQ2NF90CXNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlOworCXVpbnQ2NF90CXNfaWJfdHhfc3RhbGxlZDsKKwl1aW50NjRfdAlzX2liX3R4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaWJfcnhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2liX3J4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaWJfcnhfcmluZ19lbXB0eTsKKwl1aW50NjRfdAlzX2liX3J4X3JlZmlsbF9mcm9tX2NxOworCXVpbnQ2NF90CXNfaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkOworCXVpbnQ2NF90CXNfaWJfcnhfYWxsb2NfbGltaXQ7CisJdWludDY0X3QJc19pYl9yeF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2liX2Fja19zZW50OworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbmRfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2liX2Fja19zZW5kX2RlbGF5ZWQ7CisJdWludDY0X3QJc19pYl9hY2tfc2VuZF9waWdneWJhY2tlZDsKKwl1aW50NjRfdAlzX2liX2Fja19yZWNlaXZlZDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfYWxsb2M7CisJdWludDY0X3QJc19pYl9yZG1hX21yX2ZyZWU7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3VzZWQ7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3Bvb2xfZmx1c2g7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3Bvb2xfd2FpdDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfcG9vbF9kZXBsZXRlZDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX2liX3dxOworCisvKgorICogRmFrZSBpYl9kbWFfc3luY19zZ19mb3Jfe2NwdSxkZXZpY2V9IGFzIGxvbmcgYXMgaWJfdmVyYnMuaAorICogZG9lc24ndCBkZWZpbmUgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ19kbWFfbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2dbaV0pLAorCQkJCWliX3NnX2RtYV9sZW4oZGV2LCAmc2dbaV0pLAorCQkJCWRpcmVjdGlvbik7CisJfQorfQorI2RlZmluZSBpYl9kbWFfc3luY19zZ19mb3JfY3B1CXJkc19pYl9kbWFfc3luY19zZ19mb3JfY3B1CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ19kbWFfbGVuLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2dbaV0pLAorCQkJCWliX3NnX2RtYV9sZW4oZGV2LCAmc2dbaV0pLAorCQkJCWRpcmVjdGlvbik7CisJfQorfQorI2RlZmluZSBpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXJkc19pYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCisKKworLyogaWIuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQ7CitleHRlcm4gdm9pZCByZHNfaWJfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgcmRzX2liX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiBzdHJ1Y3QgaWJfY2xpZW50IHJkc19pYl9jbGllbnQ7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZm1yX3Bvb2xfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZm1yX21lc3NhZ2Vfc2l6ZTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgaWJfbm9kZXZfY29ubnNfbG9jazsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGliX25vZGV2X2Nvbm5zOworCisvKiBpYl9jbS5jICovCitpbnQgcmRzX2liX2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApOwordm9pZCByZHNfaWJfY29ubl9mcmVlKHZvaWQgKmFyZyk7CitpbnQgcmRzX2liX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzayk7CitpbnQgX19pbml0IHJkc19pYl9saXN0ZW5faW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX2xpc3Rlbl9zdG9wKHZvaWQpOwordm9pZCBfX3Jkc19pYl9jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CitpbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKK3ZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKworI2RlZmluZSByZHNfaWJfY29ubl9lcnJvcihjb25uLCBmbXQuLi4pIFwKKwlfX3Jkc19pYl9jb25uX2Vycm9yKGNvbm4sIEtFUk5fV0FSTklORyAiUkRTL0lCOiAiIGZtdCkKKworLyogaWJfcmRtYS5jICovCitpbnQgcmRzX2liX3VwZGF0ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcik7CitpbnQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnModm9pZCk7Cit2b2lkIHJkc19pYl9yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldik7CitzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnJkc19pYl9jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX2RldmljZSAqKTsKK3ZvaWQgcmRzX2liX2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKTsKK3ZvaWQgcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKik7Cit2b2lkICpyZHNfaWJfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOwordm9pZCByZHNfaWJfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyKTsKK3ZvaWQgcmRzX2liX2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOwordm9pZCByZHNfaWJfZmx1c2hfbXJzKHZvaWQpOworCisvKiBpYl9yZWN2LmMgKi8KK2ludCBfX2luaXQgcmRzX2liX3JlY3ZfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX3JlY3ZfZXhpdCh2b2lkKTsKK2ludCByZHNfaWJfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKTsKK3ZvaWQgcmRzX2liX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfaWJfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK2ludCByZHNfaWJfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgICBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfcmVjdl9pbml0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfYWNrX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit1NjQgcmRzX2liX3BpZ2d5Yl9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7CisKKy8qIGliX3JpbmcuYyAqLwordm9pZCByZHNfaWJfcmluZ19pbml0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordm9pZCByZHNfaWJfcmluZ19yZXNpemUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit1MzIgcmRzX2liX3JpbmdfYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKTsKK3ZvaWQgcmRzX2liX3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7Cit2b2lkIHJkc19pYl9yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOworaW50IHJkc19pYl9yaW5nX2VtcHR5KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKTsKK2ludCByZHNfaWJfcmluZ19sb3coc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pYl9yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2liX3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpOworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHJkc19pYl9yaW5nX2VtcHR5X3dhaXQ7CisKKy8qIGliX3NlbmQuYyAqLwordm9pZCByZHNfaWJfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19pYl94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZik7Cit2b2lkIHJkc19pYl9zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcmRzX2liX3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOworaW50IHJkc19pYl94bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKTsKK3ZvaWQgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cyk7Cit2b2lkIHJkc19pYl9hZHZlcnRpc2VfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBwb3N0ZWQpOworaW50IHJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1MzIgd2FudGVkLAorCQkJICAgICB1MzIgKmFkdl9jcmVkaXRzLCBpbnQgbmVlZF9wb3N0ZWQpOworCisvKiBpYl9zdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzLCByZHNfaWJfc3RhdHMpOworI2RlZmluZSByZHNfaWJfc3RhdHNfaW5jKG1lbWJlcikgcmRzX3N0YXRzX2luY193aGljaChyZHNfaWJfc3RhdHMsIG1lbWJlcikKK3Vuc2lnbmVkIGludCByZHNfaWJfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKKworLyogaWJfc3lzY3RsLmMgKi8KK2ludCBfX2luaXQgcmRzX2liX3N5c2N0bF9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfc3lzY3RsX2V4aXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uOworZXh0ZXJuIHVuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDsKK2V4dGVybiBjdGxfdGFibGUgcmRzX2liX3N5c2N0bF90YWJsZVtdOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRoZSBoZWFkZXIgYW5kIGRhdGEgU0dFcyBpbgorICogUkRTIHBhY2tldHMgKG5vdCBSRE1BKQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgorcmRzX2liX2hlYWRlcl9zZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzBdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgorcmRzX2liX2RhdGFfc2dlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVsxXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9zZXRfNjRiaXQodTY0ICpwdHIsIHU2NCB2YWwpCit7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCSpwdHIgPSB2YWw7CisjZWxzZQorCXNldF82NGJpdChwdHIsIHZhbCk7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzMjIzNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfY20uYwpAQCAtMCwwICsxLDcyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCisvKgorICogU2V0IHRoZSBzZWxlY3RlZCBwcm90b2NvbCB2ZXJzaW9uCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfcHJvdG9jb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgdmVyc2lvbikKK3sKKwljb25uLT5jX3ZlcnNpb24gPSB2ZXJzaW9uOworfQorCisvKgorICogU2V0IHVwIGZsb3cgY29udHJvbAorICovCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHUzMiBjcmVkaXRzKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sICYmIGNyZWRpdHMgIT0gMCkgeworCQkvKiBXZSdyZSBkb2luZyBmbG93IGNvbnRyb2wgKi8KKwkJaWMtPmlfZmxvd2N0bCA9IDE7CisJCXJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGNyZWRpdHMpOworCX0gZWxzZSB7CisJCWljLT5pX2Zsb3djdGwgPSAwOworCX0KK30KKworLyoKKyAqIFR1bmUgUk5SIGJlaGF2aW9yLiBXaXRob3V0IGZsb3cgY29udHJvbCwgd2UgdXNlIGEgcmF0aGVyCisgKiBsb3cgdGltZW91dCwgYnV0IG5vdCB0aGUgYWJzb2x1dGUgbWluaW11bSAtIHRoaXMgc2hvdWxkCisgKiBiZSB0dW5hYmxlLgorICoKKyAqIFdlIGFscmVhZHkgc2V0IHRoZSBSTlIgcmV0cnkgY291bnQgdG8gNyAod2hpY2ggaXMgdGhlCisgKiBzbWFsbGVzdCBpbmZpbml0ZSBudW1iZXIgOi0pIGFib3ZlLgorICogSWYgZmxvdyBjb250cm9sIGlzIG9mZiwgd2Ugd2FudCB0byBjaGFuZ2UgdGhpcyBiYWNrIHRvIDAKKyAqIHNvIHRoYXQgd2UgbGVhcm4gcXVpY2tseSB3aGVuIG91ciBjcmVkaXQgYWNjb3VudGluZyBpcworICogYnVnZ3kuCisgKgorICogQ2FsbGVyIHBhc3NlcyBpbiBhIHFwX2F0dHIgcG9pbnRlciAtIGRvbid0IHdhc3RlIHN0YWNrIHNwYWN2CisgKiBieSBhbGxvY2F0aW9uIHRoaXMgdHdpY2UuCisgKi8KK3N0YXRpYyB2b2lkCityZHNfaWJfdHVuZV9ybnIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIpCit7CisJaW50IHJldDsKKworCWF0dHItPm1pbl9ybnJfdGltZXIgPSBJQl9STlJfVElNRVJfMDAwXzMyOworCXJldCA9IGliX21vZGlmeV9xcChpYy0+aV9jbV9pZC0+cXAsIGF0dHIsIElCX1FQX01JTl9STlJfVElNRVIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX05PVElDRSAiaWJfbW9kaWZ5X3FwKElCX1FQX01JTl9STlJfVElNRVIpOiBlcnI9JWRcbiIsIC1yZXQpOworfQorCisvKgorICogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4KKyAqIFdlIGdldCBoZXJlIGZvciBib3RoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCWludCBlcnI7CisKKwlpZiAoZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCQlkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKworCQlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sCisJCQkJUkRTX1BST1RPQ09MKGRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7CisJCXJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwl9CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JQjogY29ubmVjdGVkIHRvICVwSTQgdmVyc2lvbiAldS4ldSVzXG4iLAorCQkJJmNvbm4tPmNfbGFkZHIsCisJCQlSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCVJEU19QUk9UT0NPTF9NSU5PUihjb25uLT5jX3ZlcnNpb24pLAorCQkJaWMtPmlfZmxvd2N0bCA/ICIsIGZsb3cgY29udHJvbCIgOiAiIik7CisKKwkvKiBUdW5lIFJOUiBiZWhhdmlvciAqLworCXJkc19pYl90dW5lX3JucihpYywgJnFwX2F0dHIpOworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19SVFM7CisJZXJyID0gaWJfbW9kaWZ5X3FwKGljLT5pX2NtX2lkLT5xcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgImliX21vZGlmeV9xcChJQl9RUF9TVEFURSwgUlRTKTogZXJyPSVkXG4iLCBlcnIpOworCisJLyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICYgY29ubiAqLworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisJZXJyID0gcmRzX2liX3VwZGF0ZV9pcGFkZHIocmRzX2liZGV2LCBjb25uLT5jX2xhZGRyKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pYl91cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCWVyciA9IHJkc19pYl9hZGRfY29ubihyZHNfaWJkZXYsIGNvbm4pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2liX2FkZF9jb25uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAgJiYgZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0sCisJCQlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAsCisJCQl1MzIgcHJvdG9jb2xfdmVyc2lvbikKK3sKKwltZW1zZXQoY29ubl9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0pKTsKKwkvKiBYWFggdHVuZSB0aGVzZT8gKi8KKwljb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzID0gMTsKKwljb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGggPSAxOworCWNvbm5fcGFyYW0tPnJldHJ5X2NvdW50ID0gNzsKKwljb25uX3BhcmFtLT5ybnJfcmV0cnlfY291bnQgPSA3OworCisJaWYgKGRwKSB7CisJCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJCW1lbXNldChkcCwgMCwgc2l6ZW9mKCpkcCkpOworCQlkcC0+ZHBfc2FkZHIgPSBjb25uLT5jX2xhZGRyOworCQlkcC0+ZHBfZGFkZHIgPSBjb25uLT5jX2ZhZGRyOworCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPSBSRFNfUFJPVE9DT0xfTUFKT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vciA9IFJEU19QUk9UT0NPTF9NSU5PUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2sgPSBjcHVfdG9fYmUxNihSRFNfSUJfU1VQUE9SVEVEX1BST1RPQ09MUyk7CisJCWRwLT5kcF9hY2tfc2VxID0gcmRzX2liX3BpZ2d5Yl9hY2soaWMpOworCisJCS8qIEFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJCXVuc2lnbmVkIGludCBjcmVkaXRzOworCisJCQljcmVkaXRzID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpOworCQkJZHAtPmRwX2NyZWRpdCA9IGNwdV90b19iZTMyKGNyZWRpdHMpOworCQkJYXRvbWljX3N1YihJQl9TRVRfUE9TVF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJCX0KKworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgPSBkcDsKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiA9IHNpemVvZigqZHApOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlyZHNkZWJ1ZygiZXZlbnQgJXUgZGF0YSAlcFxuIiwgZXZlbnQtPmV2ZW50LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBkYXRhOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzZGVidWcoImNvbm4gJXAgaWMgJXAgZXZlbnQgJXVcbiIsIGNvbm4sIGljLCBldmVudC0+ZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0VWRU5UX0NPTU1fRVNUOgorCQlyZG1hX25vdGlmeShpYy0+aV9jbV9pZCwgSUJfRVZFTlRfQ09NTV9FU1QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvaWI6IHVuaGFuZGxlZCBRUCBldmVudCAldSAiCisJCSAgICAgICAib24gY29ubmVjdGlvbiB0byAlcEk0XG4iLCBldmVudC0+ZXZlbnQsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIG5vdCBsZWF2ZSBJU19FUlIgcG9pbnRlcnMgYXJvdW5kIGZvcgorICogY2xlYW51cCB0byB0cmlwIG92ZXIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2liX3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCWludCByZXQ7CisKKwkvKiByZHNfaWJfYWRkX29uZSBjcmVhdGVzIGEgcmRzX2liX2RldmljZSBvYmplY3QgcGVyIElCIGRldmljZSwKKwkgKiBhbmQgYWxsb2NhdGVzIGEgcHJvdGVjdGlvbiBkb21haW4sIG1lbW9yeSByYW5nZSBhbmQgRk1SIHBvb2wKKwkgKiBmb3IgZWFjaC4gIElmIHRoYXQgZmFpbHMgZm9yIGFueSByZWFzb24sIGl0IHdpbGwgbm90IHJlZ2lzdGVyCisJICogdGhlIHJkc19pYmRldiBhdCBhbGwuCisJICovCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldiwgJnJkc19pYl9jbGllbnQpOworCWlmIChyZHNfaWJkZXYgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSUI6IE5vIGNsaWVudF9kYXRhIGZvciBkZXZpY2UgJXNcbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAocmRzX2liZGV2LT5tYXhfd3JzIDwgaWMtPmlfc2VuZF9yaW5nLndfbnIgKyAxKQorCQlyZHNfaWJfcmluZ19yZXNpemUoJmljLT5pX3NlbmRfcmluZywgcmRzX2liZGV2LT5tYXhfd3JzIC0gMSk7CisJaWYgKHJkc19pYmRldi0+bWF4X3dycyA8IGljLT5pX3JlY3ZfcmluZy53X25yICsgMSkKKwkJcmRzX2liX3JpbmdfcmVzaXplKCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pYmRldi0+bWF4X3dycyAtIDEpOworCisJLyogUHJvdGVjdGlvbiBkb21haW4gYW5kIG1lbW9yeSByYW5nZSAqLworCWljLT5pX3BkID0gcmRzX2liZGV2LT5wZDsKKwlpYy0+aV9tciA9IHJkc19pYmRldi0+bXI7CisKKwlpYy0+aV9zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX3NlbmRfY3FfY29tcF9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBpYy0+aV9zZW5kX3Jpbmcud19uciArIDEsIDApOworCWlmIChJU19FUlIoaWMtPmlfc2VuZF9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9zZW5kX2NxKTsKKwkJaWMtPmlfc2VuZF9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2liX2NxX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBpYy0+aV9yZWN2X3Jpbmcud19uciwgMCk7CisJaWYgKElTX0VSUihpYy0+aV9yZWN2X2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX3JlY3ZfY3EpOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJcmRzZGVidWcoImliX2NyZWF0ZV9jcSByZWN2IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoaWMtPmlfc2VuZF9jcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShpYy0+aV9yZWN2X2NxLCBJQl9DUV9TT0xJQ0lURUQpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3EgcmVjdiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBYWFggbmVnb3RpYXRlIG1heCBzZW5kL3JlY3Ygd2l0aCByZW1vdGU/ICovCisJbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOworCWF0dHIuZXZlbnRfaGFuZGxlciA9IHJkc19pYl9xcF9ldmVudF9oYW5kbGVyOworCWF0dHIucXBfY29udGV4dCA9IGNvbm47CisJLyogKyAxIHRvIGFsbG93IGZvciB0aGUgc2luZ2xlIGFjayBtZXNzYWdlICovCisJYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19uciArIDE7CisJYXR0ci5jYXAubWF4X3JlY3Zfd3IgPSBpYy0+aV9yZWN2X3Jpbmcud19uciArIDE7CisJYXR0ci5jYXAubWF4X3NlbmRfc2dlID0gcmRzX2liZGV2LT5tYXhfc2dlOworCWF0dHIuY2FwLm1heF9yZWN2X3NnZSA9IFJEU19JQl9SRUNWX1NHRTsKKwlhdHRyLnNxX3NpZ190eXBlID0gSUJfU0lHTkFMX1JFUV9XUjsKKwlhdHRyLnFwX3R5cGUgPSBJQl9RUFRfUkM7CisJYXR0ci5zZW5kX2NxID0gaWMtPmlfc2VuZF9jcTsKKwlhdHRyLnJlY3ZfY3EgPSBpYy0+aV9yZWN2X2NxOworCisJLyoKKwkgKiBYWFggdGhpcyBjYW4gZmFpbCBpZiBtYXhfKl93ciBpcyB0b28gbGFyZ2U/ICBBcmUgd2Ugc3VwcG9zZWQKKwkgKiB0byBiYWNrIG9mZiB1bnRpbCB3ZSBnZXQgYSB2YWx1ZSB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gc3VwcG9ydD8KKwkgKi8KKwlyZXQgPSByZG1hX2NyZWF0ZV9xcChpYy0+aV9jbV9pZCwgaWMtPmlfcGQsICZhdHRyKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJyZG1hX2NyZWF0ZV9xcCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kX2hkcnMgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAmaWMtPmlfc2VuZF9oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX3NlbmRfaGRycyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgc2VuZCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9yZWN2X2hkcnMgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAmaWMtPmlfcmVjdl9oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX3JlY3ZfaGRycyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgcmVjdiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9hY2sgPSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCSAgICAgICAmaWMtPmlfYWNrX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljLT5pX2FjayA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJpYl9kbWFfYWxsb2NfY29oZXJlbnQgYWNrIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRzID0gdm1hbGxvYyhpYy0+aV9zZW5kX3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2liX3NlbmRfd29yaykpOworCWlmIChpYy0+aV9zZW5kcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJzZW5kIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7CisKKwlpYy0+aV9yZWN2cyA9IHZtYWxsb2MoaWMtPmlfcmVjdl9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pYl9yZWN2X3dvcmspKTsKKwlpZiAoaWMtPmlfcmVjdnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygicmVjdiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pYl9yZWN2X2luaXRfcmluZyhpYyk7CisJcmRzX2liX3JlY3ZfaW5pdF9hY2soaWMpOworCisJLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlCisJICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovCisJcmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMSk7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBwZCAlcCBtciAlcCBjcSAlcCAlcFxuIiwgY29ubiwgaWMtPmlfcGQsIGljLT5pX21yLAorCQkgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCkKK3sKKwl1MTYgY29tbW9uOworCXUzMiB2ZXJzaW9uID0gMDsKKworCS8qIHJkbWFfY20gcHJpdmF0ZSBkYXRhIGlzIG9kZCAtIHdoZW4gdGhlcmUgaXMgYW55IHByaXZhdGUgZGF0YSBpbiB0aGUKKwkgKiByZXF1ZXN0LCB3ZSB3aWxsIGJlIGdpdmVuIGEgcHJldHR5IGxhcmdlIGJ1ZmZlciB3aXRob3V0IHRlbGxpbmcgdXMgdGhlCisJICogb3JpZ2luYWwgc2l6ZS4gVGhlIG9ubHkgd2F5IHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgaXMgYnkgbG9va2luZyBhdAorCSAqIHRoZSBjb250ZW50cywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uCisJICogSWYgdGhlIHByb3RvY29sIHZlcnNpb24gZmllbGRzIGFyZW4ndCBzZXQsIHRoaXMgaXMgYSBjb25uZWN0aW9uIGF0dGVtcHQKKwkgKiBmcm9tIGFuIG9sZGVyIHZlcnNpb24uIFRoaXMgY291bGQgY291bGQgYmUgMy4wIG9yIDIuMCAtIHdlIGNhbid0IHRlbGwuCisJICogV2UgcmVhbGx5IHNob3VsZCBoYXZlIGNoYW5nZWQgdGhpcyBmb3IgT0ZFRCAxLjMgOi0oICovCisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAwKQorCQlyZXR1cm4gUkRTX1BST1RPQ09MXzNfMDsKKworCWNvbW1vbiA9IGJlMTZfdG9fY3B1KGRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrKSAmIFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTOworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMyAmJiBjb21tb24pIHsKKwkJdmVyc2lvbiA9IFJEU19QUk9UT0NPTF8zXzA7CisJCXdoaWxlICgoY29tbW9uID4+PSAxKSAhPSAwKQorCQkJdmVyc2lvbisrOworCX0gZWxzZSBpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkRTOiBDb25uZWN0aW9uIGZyb20gJXBJNCB1c2luZyAiCisJCQkiaW5jb21wYXRpYmxlIHByb3RvY29sIHZlcnNpb24gJXUuJXVcbiIsCisJCQkmZHAtPmRwX3NhZGRyLAorCQkJZHAtPmRwX3Byb3RvY29sX21ham9yLAorCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKTsKKwl9CisJcmV0dXJuIHZlcnNpb247Cit9CisKK2ludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJCSAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJX19iZTY0IGxndWlkID0gY21faWQtPnJvdXRlLnBhdGhfcmVjLT5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQ7CisJX19iZTY0IGZndWlkID0gY21faWQtPnJvdXRlLnBhdGhfcmVjLT5kZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQ7CisJY29uc3Qgc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOworCXN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlIGRwX3JlcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBOVUxMOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwl1MzIgdmVyc2lvbjsKKwlpbnQgZXJyLCBkZXN0cm95ID0gMTsKKworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBwcm90b2NvbCB2ZXJzaW9uIG1hdGNoZXMgb3Vycy4gKi8KKwl2ZXJzaW9uID0gcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoZHApOworCWlmICghdmVyc2lvbikKKwkJZ290byBvdXQ7CisKKwlyZHNkZWJ1Zygic2FkZHIgJXBJNCBkYWRkciAlcEk0IFJEU3YldS4ldSBsZ3VpZCAweCVsbHggZmd1aWQgIgorCQkgIjB4JWxseFxuIiwgJmRwLT5kcF9zYWRkciwgJmRwLT5kcF9kYWRkciwKKwkJIFJEU19QUk9UT0NPTF9NQUpPUih2ZXJzaW9uKSwgUkRTX1BST1RPQ09MX01JTk9SKHZlcnNpb24pLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShsZ3VpZCksCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGZndWlkKSk7CisKKwljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGRwLT5kcF9kYWRkciwgZHAtPmRwX3NhZGRyLCAmcmRzX2liX3RyYW5zcG9ydCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCXJkc2RlYnVnKCJyZHNfY29ubl9jcmVhdGUgZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGNvbm4pKTsKKwkJY29ubiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBtYXkgb2NjdXIgd2hpbGUgdGhlCisJICogcHJldmlvdXMgY29ubmVjdGlvbiBleGlzdCwgZS5nLiBpbiBjYXNlIG9mIGZhaWxvdmVyLgorCSAqIEJ1dCBhcyBjb25uZWN0aW9ucyBtYXkgYmUgaW5pdGlhdGVkIHNpbXVsdGFuZW91c2x5CisJICogYnkgYm90aCBob3N0cywgd2UgaGF2ZSBhIHJhbmRvbSBiYWNrb2ZmIG1lY2hhbmlzbSAtCisJICogc2VlIHRoZSBjb21tZW50IGFib3ZlIHJkc19xdWV1ZV9yZWNvbm5lY3QoKQorCSAqLworCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0NPTk5FQ1RJTkcpKSB7CisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQkJcmRzZGVidWcoImluY29taW5nIGNvbm5lY3Qgd2hpbGUgY29ubmVjdGluZ1xuIik7CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX2xpc3Rlbl9jbG9zZWRfc3RhbGUpOworCQl9IGVsc2UKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFdhaXQgYW5kIHNlZSAtIG91ciBjb25uZWN0IG1heSBzdGlsbCBiZSBzdWNjZWVkaW5nICovCisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfY29ubmVjdF9yYWNlZCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIHZlcnNpb24pOworCXJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlCVUdfT04oY21faWQtPmNvbnRleHQpOworCUJVR19PTihpYy0+aV9jbV9pZCk7CisKKwlpYy0+aV9jbV9pZCA9IGNtX2lkOworCWNtX2lkLT5jb250ZXh0ID0gY29ubjsKKworCS8qIFdlIGdvdCBoYWxmd2F5IHRocm91Z2ggc2V0dGluZyB1cCB0aGUgaWJfY29ubmVjdGlvbiwgaWYgd2UKKwkgKiBmYWlsIG5vdywgd2UgaGF2ZSB0byB0YWtlIHRoZSBsb25nIHJvdXRlIG91dCBvZiB0aGlzIG1lc3MuICovCisJZGVzdHJveSA9IDA7CisKKwllcnIgPSByZHNfaWJfc2V0dXBfcXAoY29ubik7CisJaWYgKGVycikgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRzX2liX3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHBfcmVwLCB2ZXJzaW9uKTsKKworCS8qIHJkbWFfYWNjZXB0KCkgY2FsbHMgcmRtYV9yZWplY3QoKSBpbnRlcm5hbGx5IGlmIGl0IGZhaWxzICovCisJZXJyID0gcmRtYV9hY2NlcHQoY21faWQsICZjb25uX3BhcmFtKTsKKwltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKGVycikgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRtYV9hY2NlcHQgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiAwOworCitvdXQ6CisJcmRtYV9yZWplY3QoY21faWQsIE5VTEwsIDApOworCXJldHVybiBkZXN0cm95OworfQorCisKK2ludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlIGRwOworCWludCByZXQ7CisKKwkvKiBJZiB0aGUgcGVlciBkb2Vzbid0IGRvIHByb3RvY29sIG5lZ290aWF0aW9uLCB3ZSBtdXN0CisJICogZGVmYXVsdCB0byBSRFN2My4wICovCisJcmRzX2liX3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfM18wKTsKKwlpYy0+aV9mbG93Y3RsID0gcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2w7CS8qIGFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKworCXJldCA9IHJkc19pYl9zZXR1cF9xcChjb25uKTsKKwlpZiAocmV0KSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZHNfaWJfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcCwgUkRTX1BST1RPQ09MX1ZFUlNJT04pOworCisJcmV0ID0gcmRtYV9jb25uZWN0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfY29ubmVjdCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKworb3V0OgorCS8qIEJld2FyZSAtIHJldHVybmluZyBub24temVybyB0ZWxscyB0aGUgcmRtYV9jbSB0byBkZXN0cm95CisJICogdGhlIGNtX2lkLiBXZSBzaG91bGQgY2VydGFpbmx5IG5vdCBkbyBpdCBhcyBsb25nIGFzIHdlIHN0aWxsCisJICogIm93biIgdGhlIGNtX2lkLiAqLworCWlmIChyZXQpIHsKKwkJaWYgKGljLT5pX2NtX2lkID09IGNtX2lkKQorCQkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19pYl9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRlc3Q7CisJaW50IHJldDsKKworCS8qIFhYWCBJIHdvbmRlciB3aGF0IGFmZmVjdCB0aGUgcG9ydCBzcGFjZSBoYXMgKi8KKwkvKiBkZWxlZ2F0ZSBjbSBldmVudCBoYW5kbGVyIHRvIHJkbWFfdHJhbnNwb3J0ICovCisJaWMtPmlfY21faWQgPSByZG1hX2NyZWF0ZV9pZChyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgUkRNQV9QU19UQ1ApOworCWlmIChJU19FUlIoaWMtPmlfY21faWQpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCXJkc2RlYnVnKCJyZG1hX2NyZWF0ZV9pZCgpIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJjcmVhdGVkIGNtIGlkICVwIGZvciBjb25uICVwXG4iLCBpYy0+aV9jbV9pZCwgY29ubik7CisKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc3JjLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2xhZGRyOworCXNyYy5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucygwKTsKKworCWRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJZGVzdC5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19mYWRkcjsKKwlkZXN0LnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKFJEU19QT1JUKTsKKworCXJldCA9IHJkbWFfcmVzb2x2ZV9hZGRyKGljLT5pX2NtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNyYywKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJmRlc3QsCisJCQkJUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJhZGRyIHJlc29sdmUgZmFpbGVkIGZvciBjbSBpZCAlcDogJWRcbiIsIGljLT5pX2NtX2lkLAorCQkJIHJldCk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBzbyBjYXJlZnVsIGFib3V0IG9ubHkgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHRoYXQgd2VyZSBidWlsdCB1cAorICogc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGF0IGFueSBwb2ludCBkdXJpbmcgc3RhcnR1cC4gIEluIGZhY3QgaXQKKyAqIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaWJfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IGVyciA9IDA7CisKKwlyZHNkZWJ1ZygiY20gJXAgcGQgJXAgY3EgJXAgJXAgcXAgJXBcbiIsIGljLT5pX2NtX2lkLAorCQkgaWMtPmlfcGQsIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EsCisJCSBpYy0+aV9jbV9pZCA/IGljLT5pX2NtX2lkLT5xcCA6IE5VTEwpOworCisJaWYgKGljLT5pX2NtX2lkKSB7CisJCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisKKwkJcmRzZGVidWcoImRpc2Nvbm5lY3RpbmcgY20gJXBcbiIsIGljLT5pX2NtX2lkKTsKKwkJZXJyID0gcmRtYV9kaXNjb25uZWN0KGljLT5pX2NtX2lkKTsKKwkJaWYgKGVycikgeworCQkJLyogQWN0dWFsbHkgdGhpcyBtYXkgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHksIHdoZW4KKwkJCSAqIGFuIG91dGdvaW5nIGNvbm5lY3QgcmFjZWQgd2l0aCBhbiBpbmNvbWluZyBjb25uZWN0LgorCQkJICovCisJCQlyZHNkZWJ1ZygiZmFpbGVkIHRvIGRpc2Nvbm5lY3QsIGNtOiAlcCBlcnIgJWRcbiIsCisJCQkJaWMtPmlfY21faWQsIGVycik7CisJCX0KKworCQl3YWl0X2V2ZW50KHJkc19pYl9yaW5nX2VtcHR5X3dhaXQsCisJCQlyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfc2VuZF9yaW5nKSAmJgorCQkJcmRzX2liX3JpbmdfZW1wdHkoJmljLT5pX3JlY3ZfcmluZykpOworCisJCWlmIChpYy0+aV9zZW5kX2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3NlbmRfaGRycywKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX3JlY3ZfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfYWNrKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICAgIGljLT5pX2FjaywgaWMtPmlfYWNrX2RtYSk7CisKKwkJaWYgKGljLT5pX3NlbmRzKQorCQkJcmRzX2liX3NlbmRfY2xlYXJfcmluZyhpYyk7CisJCWlmIChpYy0+aV9yZWN2cykKKwkJCXJkc19pYl9yZWN2X2NsZWFyX3JpbmcoaWMpOworCisJCWlmIChpYy0+aV9jbV9pZC0+cXApCisJCQlyZG1hX2Rlc3Ryb3lfcXAoaWMtPmlfY21faWQpOworCQlpZiAoaWMtPmlfc2VuZF9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfc2VuZF9jcSk7CisJCWlmIChpYy0+aV9yZWN2X2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9yZWN2X2NxKTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKworCQkvKgorCQkgKiBNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KKwkJICovCisJCWlmIChpYy0+cmRzX2liZGV2KSB7CisKKwkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOworCQkJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pYmRldi0+c3BpbmxvY2spOworCisJCQlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmaWJfbm9kZXZfY29ubnMpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwkJCWljLT5yZHNfaWJkZXYgPSBOVUxMOworCQl9CisKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlpYy0+aV9wZCA9IE5VTEw7CisJCWljLT5pX21yID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9jcSA9IE5VTEw7CisJCWljLT5pX3JlY3ZfY3EgPSBOVUxMOworCQlpYy0+aV9zZW5kX2hkcnMgPSBOVUxMOworCQlpYy0+aV9yZWN2X2hkcnMgPSBOVUxMOworCQlpYy0+aV9hY2sgPSBOVUxMOworCX0KKwlCVUdfT04oaWMtPnJkc19pYmRldik7CisKKwkvKiBDbGVhciBwZW5kaW5nIHRyYW5zbWl0ICovCisJaWYgKGljLT5pX3JtKSB7CisJCXJkc19tZXNzYWdlX3B1dChpYy0+aV9ybSk7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwkvKiBDbGVhciB0aGUgQUNLIHN0YXRlICovCisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pYl9zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKwlpYy0+aV9hY2tfcmVjdiA9IDA7CisKKwkvKiBDbGVhciBmbG93IGNvbnRyb2wgc3RhdGUgKi8KKwlpYy0+aV9mbG93Y3RsID0gMDsKKwlhdG9taWNfc2V0KCZpYy0+aV9jcmVkaXRzLCAwKTsKKworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWlmIChpYy0+aV9pYmluYykgeworCQlyZHNfaW5jX3B1dCgmaWMtPmlfaWJpbmMtPmlpX2luYyk7CisJCWljLT5pX2liaW5jID0gTlVMTDsKKwl9CisKKwl2ZnJlZShpYy0+aV9zZW5kcyk7CisJaWMtPmlfc2VuZHMgPSBOVUxMOworCXZmcmVlKGljLT5pX3JlY3ZzKTsKKwlpYy0+aV9yZWN2cyA9IE5VTEw7Cit9CisKK2ludCByZHNfaWJfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBYWFggdG9vIGxhenk/ICovCisJaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmaWMtPmliX25vZGUpOworCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJLyoKKwkgKiByZHNfaWJfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKKwkgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLgorCSAqLworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWljLT5jb25uID0gY29ubjsKKwljb25uLT5jX3RyYW5zcG9ydF9kYXRhID0gaWM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWJfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmaWJfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmliX25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCisJcmRzZGVidWcoImNvbm4gJXAgY29ubiBpYyAlcFxuIiwgY29ubiwgY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGFyZzsKKwlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKwlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCWtmcmVlKGljKTsKK30KKworCisvKgorICogQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAqLwordm9pZAorX19yZHNfaWJfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlyZHNfY29ubl9kcm9wKGNvbm4pOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnByaW50ayhmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZG1hLmMgYi9uZXQvcmRzL2liX3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE2Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yZG1hLmMKQEAgLTAsMCArMSw2NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgImliLmgiCisKKworLyoKKyAqIFRoaXMgaXMgc3RvcmVkIGFzIG1yLT5yX3RyYW5zX3ByaXZhdGUuCisgKi8KK3N0cnVjdCByZHNfaWJfbXIgeworCXN0cnVjdCByZHNfaWJfZGV2aWNlCSpkZXZpY2U7CisJc3RydWN0IHJkc19pYl9tcl9wb29sCSpwb29sOworCXN0cnVjdCBpYl9mbXIJCSpmbXI7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGludAkJcmVtYXBfY291bnQ7CisKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworCXVuc2lnbmVkIGludAkJc2dfbGVuOworCXU2NAkJCSpkbWE7CisJaW50CQkJc2dfZG1hX2xlbjsKK307CisKKy8qCisgKiBPdXIgb3duIGxpdHRsZSBGTVIgcG9vbAorICovCitzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgeworCXN0cnVjdCBtdXRleAkJZmx1c2hfbG9jazsJCS8qIHNlcmlhbGl6ZSBmbXIgaW52YWxpZGF0ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlmbHVzaF93b3JrZXI7CQkvKiBmbHVzaCB3b3JrZXIgKi8KKworCXNwaW5sb2NrX3QJCWxpc3RfbG9jazsJCS8qIHByb3RlY3QgdmFyaWFibGVzIGJlbG93ICovCisJYXRvbWljX3QJCWl0ZW1fY291bnQ7CQkvKiB0b3RhbCAjIG9mIE1ScyAqLworCWF0b21pY190CQlkaXJ0eV9jb3VudDsJCS8qICMgZGlydHkgb2YgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAlkcm9wX2xpc3Q7CQkvKiBNUnMgdGhhdCBoYXZlIHJlYWNoZWQgdGhlaXIgbWF4X21hcHMgbGltaXQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsJCS8qIHVudXNlZCBNUnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFuX2xpc3Q7CQkvKiB1bnVzZWQgJiB1bmFtYXBwZWQgTVJzICovCisJYXRvbWljX3QJCWZyZWVfcGlubmVkOwkJLyogbWVtb3J5IHBpbm5lZCBieSBmcmVlIE1ScyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtczsKKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXNfc29mdDsKKwl1bnNpZ25lZCBsb25nCQltYXhfZnJlZV9waW5uZWQ7CisJc3RydWN0IGliX2Ztcl9hdHRyCWZtcl9hdHRyOworfTsKKworc3RhdGljIGludCByZHNfaWJfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCk7CitzdGF0aWMgdm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcik7CitzdGF0aWMgdm9pZCByZHNfaWJfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJfZ2V0X2RldmljZShfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZHNfaWJkZXYsICZyZHNfaWJfZGV2aWNlcywgbGlzdCkgeworCQlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpX2lwYWRkciwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChpX2lwYWRkci0+aXBhZGRyID09IGlwYWRkcikgeworCQkJCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJCQkJcmV0dXJuIHJkc19pYmRldjsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJkc19pYl9hZGRfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyOworCisJaV9pcGFkZHIgPSBrbWFsbG9jKHNpemVvZiAqaV9pcGFkZHIsIEdGUF9LRVJORUwpOworCWlmICghaV9pcGFkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaV9pcGFkZHItPmlwYWRkciA9IGlwYWRkcjsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmlfaXBhZGRyLT5saXN0LCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfcmVtb3ZlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkciwgKm5leHQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9pcGFkZHIsIG5leHQsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0LCBsaXN0KSB7CisJCWlmIChpX2lwYWRkci0+aXBhZGRyID09IGlwYWRkcikgeworCQkJbGlzdF9kZWwoJmlfaXBhZGRyLT5saXN0KTsKKwkJCWtmcmVlKGlfaXBhZGRyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7Cit9CisKK2ludCByZHNfaWJfdXBkYXRlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXZfb2xkOworCisJcmRzX2liZGV2X29sZCA9IHJkc19pYl9nZXRfZGV2aWNlKGlwYWRkcik7CisJaWYgKHJkc19pYmRldl9vbGQpCisJCXJkc19pYl9yZW1vdmVfaXBhZGRyKHJkc19pYmRldl9vbGQsIGlwYWRkcik7CisKKwlyZXR1cm4gcmRzX2liX2FkZF9pcGFkZHIocmRzX2liZGV2LCBpcGFkZHIpOworfQorCitpbnQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIGNvbm4gd2FzIHByZXZpb3VzbHkgb24gdGhlIG5vZGV2X2Nvbm5zX2xpc3QgKi8KKwlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWJfbm9kZXZfY29ubnMpKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKKwlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJnJkc19pYmRldi0+Y29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJaWMtPnJkc19pYmRldiA9IHJkc19pYmRldjsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJbGlzdF9zcGxpY2UoJmliX25vZGV2X2Nvbm5zLCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpYl9ub2Rldl9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGliX25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2liX3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X3NwbGljZSgmcmRzX2liZGV2LT5jb25uX2xpc3QsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+Y29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaWJfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKworc3RydWN0IHJkc19pYl9tcl9wb29sICpyZHNfaWJfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2w7CisKKwlwb29sID0ga3phbGxvYyhzaXplb2YoKnBvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmZyZWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmRyb3BfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmNsZWFuX2xpc3QpOworCW11dGV4X2luaXQoJnBvb2wtPmZsdXNoX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwb29sLT5saXN0X2xvY2spOworCUlOSVRfV09SSygmcG9vbC0+Zmx1c2hfd29ya2VyLCByZHNfaWJfbXJfcG9vbF9mbHVzaF93b3JrZXIpOworCisJcG9vbC0+Zm1yX2F0dHIubWF4X3BhZ2VzID0gZm1yX21lc3NhZ2Vfc2l6ZTsKKwlwb29sLT5mbXJfYXR0ci5tYXhfbWFwcyA9IHJkc19pYmRldi0+Zm1yX21heF9yZW1hcHM7CisJcG9vbC0+Zm1yX2F0dHIucGFnZV9zaGlmdCA9IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJcG9vbC0+bWF4X2ZyZWVfcGlubmVkID0gcmRzX2liZGV2LT5tYXhfZm1ycyAqIGZtcl9tZXNzYWdlX3NpemUgLyA0OworCisJLyogV2UgbmV2ZXIgYWxsb3cgbW9yZSB0aGFuIG1heF9pdGVtcyBNUnMgdG8gYmUgYWxsb2NhdGVkLgorCSAqIFdoZW4gd2UgZXhjZWVkIG1vcmUgdGhhbiBtYXhfaXRlbXNfc29mdCwgd2Ugc3RhcnQgZnJlZWluZworCSAqIGl0ZW1zIG1vcmUgYWdncmVzc2l2ZWx5LgorCSAqIE1ha2Ugc3VyZSB0aGF0IG1heF9pdGVtcyA+IG1heF9pdGVtc19zb2Z0ID4gbWF4X2l0ZW1zIC8gMgorCSAqLworCXBvb2wtPm1heF9pdGVtc19zb2Z0ID0gcmRzX2liZGV2LT5tYXhfZm1ycyAqIDMgLyA0OworCXBvb2wtPm1heF9pdGVtcyA9IHJkc19pYmRldi0+bWF4X2ZtcnM7CisKKwlyZXR1cm4gcG9vbDsKK30KKwordm9pZCByZHNfaWJfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCisJaWluZm8tPnJkbWFfbXJfbWF4ID0gcG9vbC0+bWF4X2l0ZW1zOworCWlpbmZvLT5yZG1hX21yX3NpemUgPSBwb29sLT5mbXJfYXR0ci5tYXhfcGFnZXM7Cit9CisKK3ZvaWQgcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wpCit7CisJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CisJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkpOworCWtmcmVlKHBvb2wpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfaWJfbXIgKnJkc19pYl9yZXVzZV9mbXIoc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwb29sLT5jbGVhbl9saXN0KSkgeworCQlpYm1yID0gbGlzdF9lbnRyeShwb29sLT5jbGVhbl9saXN0Lm5leHQsIHN0cnVjdCByZHNfaWJfbXIsIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZpYm1yLT5saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaWJtcjsKK30KKworc3RhdGljIHN0cnVjdCByZHNfaWJfbXIgKnJkc19pYl9hbGxvY19mbXIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IE5VTEw7CisJaW50IGVyciA9IDAsIGl0ZXIgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWJtciA9IHJkc19pYl9yZXVzZV9mbXIocG9vbCk7CisJCWlmIChpYm1yKQorCQkJcmV0dXJuIGlibXI7CisKKwkJLyogTm8gY2xlYW4gTVJzIC0gbm93IHdlIGhhdmUgdGhlIGNob2ljZSBvZiBlaXRoZXIKKwkJICogYWxsb2NhdGluZyBhIGZyZXNoIE1SIHVwIHRvIHRoZSBsaW1pdCBpbXBvc2VkIGJ5IHRoZQorCQkgKiBkcml2ZXIsIG9yIGZsdXNoIGFueSBkaXJ0eSB1bnVzZWQgTVJzLgorCQkgKiBXZSB0cnkgdG8gYXZvaWQgc3RhbGxpbmcgaW4gdGhlIHNlbmQgcGF0aCBpZiBwb3NzaWJsZSwKKwkJICogc28gd2UgYWxsb2NhdGUgYXMgbG9uZyBhcyB3ZSdyZSBhbGxvd2VkIHRvLgorCQkgKgorCQkgKiBXZSdyZSBmdXNzeSB3aXRoIGVuZm9yY2luZyB0aGUgRk1SIGxpbWl0LCB0aG91Z2guIElmIHRoZSBkcml2ZXIKKwkJICogdGVsbHMgdXMgd2UgY2FuJ3QgdXNlIG1vcmUgdGhhbiBOIGZtcnMsIHdlIHNob3VsZG4ndCBzdGFydAorCQkgKiBhcmd1aW5nIHdpdGggaXQgKi8KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwb29sLT5pdGVtX2NvdW50KSA8PSBwb29sLT5tYXhfaXRlbXMpCisJCQlicmVhazsKKworCQlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKworCQlpZiAoKytpdGVyID4gMikgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfcG9vbF9kZXBsZXRlZCk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwkJfQorCisJCS8qIFdlIGRvIGhhdmUgc29tZSBlbXB0eSBNUnMuIEZsdXNoIHRoZW0gb3V0LiAqLworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9wb29sX3dhaXQpOworCQlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9CisKKwlpYm1yID0ga3phbGxvYyhzaXplb2YoKmlibXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlibXIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJaWJtci0+Zm1yID0gaWJfYWxsb2NfZm1yKHJkc19pYmRldi0+cGQsCisJCQkoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCSBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpLAorCQkJJnBvb2wtPmZtcl9hdHRyKTsKKwlpZiAoSVNfRVJSKGlibXItPmZtcikpIHsKKwkJZXJyID0gUFRSX0VSUihpYm1yLT5mbXIpOworCQlpYm1yLT5mbXIgPSBOVUxMOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX2FsbG9jX2ZtciBmYWlsZWQgKGVycj0lZClcbiIsIGVycik7CisJCWdvdG8gb3V0X25vX2NpZ2FyOworCX0KKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX2FsbG9jKTsKKwlyZXR1cm4gaWJtcjsKKworb3V0X25vX2NpZ2FyOgorCWlmIChpYm1yKSB7CisJCWlmIChpYm1yLT5mbXIpCisJCQlpYl9kZWFsbG9jX2ZtcihpYm1yLT5mbXIpOworCQlrZnJlZShpYm1yKTsKKwl9CisJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCByZHNfaWJfbWFwX2ZtcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2liX21yICppYm1yLAorCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMpCit7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gcmRzX2liZGV2LT5kZXY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0ID0gc2c7CisJdTY0IGlvX2FkZHIgPSAwOworCXU2NCAqZG1hX3BhZ2VzOworCXUzMiBsZW47CisJaW50IHBhZ2VfY250LCBzZ19kbWFfbGVuOworCWludCBpLCBqOworCWludCByZXQ7CisKKwlzZ19kbWFfbGVuID0gaWJfZG1hX21hcF9zZyhkZXYsIHNnLCBuZW50cywKKwkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICh1bmxpa2VseSghc2dfZG1hX2xlbikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBkbWFfbWFwX3NnIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWxlbiA9IDA7CisJcGFnZV9jbnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2NhdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNjYXRbaV0pOworCisJCWlmIChkbWFfYWRkciAmIH5yZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJCWlmIChpID4gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQkrK3BhZ2VfY250OworCQl9CisJCWlmICgoZG1hX2FkZHIgKyBkbWFfbGVuKSAmIH5yZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJCWlmIChpIDwgc2dfZG1hX2xlbiAtIDEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJKytwYWdlX2NudDsKKwkJfQorCisJCWxlbiArPSBkbWFfbGVuOworCX0KKworCXBhZ2VfY250ICs9IGxlbiA+PiByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCWlmIChwYWdlX2NudCA+IGZtcl9tZXNzYWdlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJZG1hX3BhZ2VzID0ga21hbGxvYyhzaXplb2YodTY0KSAqIHBhZ2VfY250LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRtYV9wYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYWdlX2NudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNnX2RtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2NhdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNjYXRbaV0pOworCisJCWZvciAoaiA9IDA7IGogPCBkbWFfbGVuOyBqICs9IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSkKKwkJCWRtYV9wYWdlc1twYWdlX2NudCsrXSA9CisJCQkJKGRtYV9hZGRyICYgcmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSArIGo7CisJfQorCisJcmV0ID0gaWJfbWFwX3BoeXNfZm1yKGlibXItPmZtciwKKwkJCQkgICBkbWFfcGFnZXMsIHBhZ2VfY250LCBpb19hZGRyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIFN1Y2Nlc3MgLSB3ZSBzdWNjZXNzZnVsbHkgcmVtYXBwZWQgdGhlIE1SLCBzbyB3ZSBjYW4KKwkgKiBzYWZlbHkgdGVhciBkb3duIHRoZSBvbGQgbWFwcGluZy4gKi8KKwlyZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7CisKKwlpYm1yLT5zZyA9IHNjYXQ7CisJaWJtci0+c2dfbGVuID0gbmVudHM7CisJaWJtci0+c2dfZG1hX2xlbiA9IHNnX2RtYV9sZW47CisJaWJtci0+cmVtYXBfY291bnQrKzsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3VzZWQpOworCXJldCA9IDA7CisKK291dDoKKwlrZnJlZShkbWFfcGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisKKwlzd2l0Y2ggKGRpcmVjdGlvbikgeworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfY3B1KHJkc19pYmRldi0+ZGV2LCBpYm1yLT5zZywKKwkJCWlibXItPnNnX2RtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHJkc19pYmRldi0+ZGV2LCBpYm1yLT5zZywKKwkJCWlibXItPnNnX2RtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisKKwlpZiAoaWJtci0+c2dfZG1hX2xlbikgeworCQlpYl9kbWFfdW5tYXBfc2cocmRzX2liZGV2LT5kZXYsCisJCQkJaWJtci0+c2csIGlibXItPnNnX2xlbiwKKwkJCQlETUFfQklESVJFQ1RJT05BTCk7CisJCWlibXItPnNnX2RtYV9sZW4gPSAwOworCX0KKworCS8qIFJlbGVhc2UgdGhlIHMvZyBsaXN0ICovCisJaWYgKGlibXItPnNnX2xlbikgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaWJtci0+c2dfbGVuOyArK2kpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmaWJtci0+c2dbaV0pOworCisJCQkvKiBGSVhNRSB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgYSByL3cgTVIKKwkJCSAqIGZyb20gYSByL28gTVIgKi8KKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQkJcHV0X3BhZ2UocGFnZSk7CisJCX0KKwkJa2ZyZWUoaWJtci0+c2cpOworCisJCWlibXItPnNnID0gTlVMTDsKKwkJaWJtci0+c2dfbGVuID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKQoreworCXVuc2lnbmVkIGludCBwaW5uZWQgPSBpYm1yLT5zZ19sZW47CisKKwlfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTsKKwlpZiAocGlubmVkKSB7CisJCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisJCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKworCQlhdG9taWNfc3ViKHBpbm5lZCwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJkc19pYl9mbHVzaF9nb2FsKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKQoreworCXVuc2lnbmVkIGludCBpdGVtX2NvdW50OworCisJaXRlbV9jb3VudCA9IGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KTsKKwlpZiAoZnJlZV9hbGwpCisJCXJldHVybiBpdGVtX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGbHVzaCBvdXIgcG9vbCBvZiBNUnMuCisgKiBBdCBhIG1pbmltdW0sIGFsbCBjdXJyZW50bHkgdW51c2VkIE1ScyBhcmUgdW5tYXBwZWQuCisgKiBJZiB0aGUgbnVtYmVyIG9mIE1ScyBhbGxvY2F0ZWQgZXhjZWVkcyB0aGUgbGltaXQsIHdlIGFsc28gdHJ5CisgKiB0byBmcmVlIGFzIG1hbnkgTVJzIGFzIG5lZWRlZCB0byBnZXQgYmFjayB0byB0aGlzIGxpbWl0LgorICovCitzdGF0aWMgaW50IHJkc19pYl9mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIsICpuZXh0OworCUxJU1RfSEVBRCh1bm1hcF9saXN0KTsKKwlMSVNUX0hFQUQoZm1yX2xpc3QpOworCXVuc2lnbmVkIGxvbmcgdW5waW5uZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5mcmVlZCA9IDAsIG5jbGVhbmVkID0gMCwgZnJlZV9nb2FsOworCWludCByZXQgPSAwOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfcG9vbF9mbHVzaCk7CisKKwltdXRleF9sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgYWxsIE1ScyB0byBiZSBkcm9wcGVkLiBPcmRlcmluZyBtYXR0ZXJzIC0KKwkgKiB3ZSB3YW50IHRvIHB1dCBkcm9wX2xpc3QgYWhlYWQgb2YgZnJlZV9saXN0LiAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmZyZWVfbGlzdCwgJnVubWFwX2xpc3QpOworCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmRyb3BfbGlzdCwgJnVubWFwX2xpc3QpOworCWlmIChmcmVlX2FsbCkKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+Y2xlYW5fbGlzdCwgJnVubWFwX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJZnJlZV9nb2FsID0gcmRzX2liX2ZsdXNoX2dvYWwocG9vbCwgZnJlZV9hbGwpOworCisJaWYgKGxpc3RfZW1wdHkoJnVubWFwX2xpc3QpKQorCQlnb3RvIG91dDsKKworCS8qIFN0cmluZyBhbGwgaWJfbXIncyBvbnRvIG9uZSBsaXN0IGFuZCBoYW5kIHRoZW0gdG8gaWJfdW5tYXBfZm1yICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpYm1yLCAmdW5tYXBfbGlzdCwgbGlzdCkKKwkJbGlzdF9hZGQoJmlibXItPmZtci0+bGlzdCwgJmZtcl9saXN0KTsKKwlyZXQgPSBpYl91bm1hcF9mbXIoJmZtcl9saXN0KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3VubWFwX2ZtciBmYWlsZWQgKGVycj0lZClcbiIsIHJldCk7CisKKwkvKiBOb3cgd2UgY2FuIGRlc3Ryb3kgdGhlIERNQSBtYXBwaW5nIGFuZCB1bnBpbiBhbnkgcGFnZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWJtciwgbmV4dCwgJnVubWFwX2xpc3QsIGxpc3QpIHsKKwkJdW5waW5uZWQgKz0gaWJtci0+c2dfbGVuOworCQlfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTsKKwkJaWYgKG5mcmVlZCA8IGZyZWVfZ29hbCB8fCBpYm1yLT5yZW1hcF9jb3VudCA+PSBwb29sLT5mbXJfYXR0ci5tYXhfbWFwcykgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfZnJlZSk7CisJCQlsaXN0X2RlbCgmaWJtci0+bGlzdCk7CisJCQlpYl9kZWFsbG9jX2ZtcihpYm1yLT5mbXIpOworCQkJa2ZyZWUoaWJtcik7CisJCQluZnJlZWQrKzsKKwkJfQorCQluY2xlYW5lZCsrOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZSgmdW5tYXBfbGlzdCwgJnBvb2wtPmNsZWFuX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJYXRvbWljX3N1Yih1bnBpbm5lZCwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwlhdG9taWNfc3ViKG5jbGVhbmVkLCAmcG9vbC0+ZGlydHlfY291bnQpOworCWF0b21pY19zdWIobmZyZWVkLCAmcG9vbC0+aXRlbV9jb3VudCk7CisKK291dDoKKwltdXRleF91bmxvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfaWJfbXJfcG9vbCwgZmx1c2hfd29ya2VyKTsKKworCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworfQorCit2b2lkIHJkc19pYl9mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKQoreworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYgPSBpYm1yLT5kZXZpY2U7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygiUkRTL0lCOiBmcmVlX21yIG5lbnRzICV1XG4iLCBpYm1yLT5zZ19sZW4pOworCisJLyogUmV0dXJuIGl0IHRvIHRoZSBwb29sJ3MgZnJlZSBsaXN0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWlmIChpYm1yLT5yZW1hcF9jb3VudCA+PSBwb29sLT5mbXJfYXR0ci5tYXhfbWFwcykKKwkJbGlzdF9hZGQoJmlibXItPmxpc3QsICZwb29sLT5kcm9wX2xpc3QpOworCWVsc2UKKwkJbGlzdF9hZGQoJmlibXItPmxpc3QsICZwb29sLT5mcmVlX2xpc3QpOworCisJYXRvbWljX2FkZChpYm1yLT5zZ19sZW4sICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX2luYygmcG9vbC0+ZGlydHlfY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJLyogSWYgd2UndmUgcGlubmVkIHRvbyBtYW55IHBhZ2VzLCByZXF1ZXN0IGEgZmx1c2ggKi8KKwlpZiAoYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSA+PSBwb29sLT5tYXhfZnJlZV9waW5uZWQKKwkgfHwgYXRvbWljX3JlYWQoJnBvb2wtPmRpcnR5X2NvdW50KSA+PSBwb29sLT5tYXhfaXRlbXMgLyAxMCkKKwkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCisJaWYgKGludmFsaWRhdGUpIHsKKwkJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkpKSB7CisJCQlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNyZWF0ZWQgYSBNUiBtYXJrZWQKKwkJCSAqIGFzIHVzZV9vbmNlIGFuZCBpbnZhbGlkYXRlIGF0IHRoZSBzYW1lIHRpbWUuICovCisJCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2liX2ZsdXNoX21ycyh2b2lkKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pYmRldiwgJnJkc19pYl9kZXZpY2VzLCBsaXN0KSB7CisJCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKworCQlpZiAocG9vbCkKKwkJCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KK30KKwordm9pZCAqcmRzX2liX2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IE5VTEw7CisJaW50IHJldDsKKworCXJkc19pYmRldiA9IHJkc19pYl9nZXRfZGV2aWNlKHJzLT5yc19ib3VuZF9hZGRyKTsKKwlpZiAoIXJkc19pYmRldikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJkc19pYmRldi0+bXJfcG9vbCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpYm1yID0gcmRzX2liX2FsbG9jX2ZtcihyZHNfaWJkZXYpOworCWlmIChJU19FUlIoaWJtcikpCisJCXJldHVybiBpYm1yOworCisJcmV0ID0gcmRzX2liX21hcF9mbXIocmRzX2liZGV2LCBpYm1yLCBzZywgbmVudHMpOworCWlmIChyZXQgPT0gMCkKKwkJKmtleV9yZXQgPSBpYm1yLT5mbXItPnJrZXk7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IG1hcF9mbXIgZmFpbGVkIChlcnJubz0lZClcbiIsIHJldCk7CisKKwlpYm1yLT5kZXZpY2UgPSByZHNfaWJkZXY7CisKKyBvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoaWJtcikKKwkJCXJkc19pYl9mcmVlX21yKGlibXIsIDApOworCQlpYm1yID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gaWJtcjsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmVjdi5jIGIvbmV0L3Jkcy9pYl9yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2MWI1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2liX2luY29taW5nX3NsYWI7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pYl9mcmFnX3NsYWI7CitzdGF0aWMgYXRvbWljX3QJcmRzX2liX2FsbG9jYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIHZvaWQgcmRzX2liX2ZyYWdfZHJvcF9wYWdlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJX19mcmVlX3BhZ2UoZnJhZy0+Zl9wYWdlKTsKKwlmcmFnLT5mX3BhZ2UgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfZnJhZ19mcmVlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJQlVHX09OKGZyYWctPmZfcGFnZSAhPSBOVUxMKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2liX2ZyYWdfc2xhYiwgZnJhZyk7Cit9CisKKy8qCisgKiBXZSBtYXAgYSBwYWdlIGF0IGEgdGltZS4gIEl0cyBmcmFnbWVudHMgYXJlIHBvc3RlZCBpbiBvcmRlci4gIFRoaXMKKyAqIGlzIGNhbGxlZCBpbiBmcmFnbWVudCBvcmRlciBhcyB0aGUgZnJhZ21lbnRzIGdldCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgorICogT25seSB0aGUgbGFzdCBmcmFnIGluIHRoZSBwYWdlIHBlcmZvcm1zIHRoZSB1bm1hcHBpbmcuCisgKgorICogSXQncyBPSyBmb3IgcmluZyBjbGVhbnVwIHRvIGNhbGwgdGhpcyBpbiB3aGF0ZXZlciBvcmRlciBpdCBsaWtlcyBiZWNhdXNlCisgKiBETUEgaXMgbm90IGluIGZsaWdodCBhbmQgc28gd2UgY2FuIHVubWFwIHdoaWxlIG90aGVyIHJpbmcgZW50cmllcyBzdGlsbAorICogaG9sZCBwYWdlIHJlZmVyZW5jZXMgaW4gdGhlaXIgZnJhZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9yZWN2X3VubWFwX3BhZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdikKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZyA9IHJlY3YtPnJfZnJhZzsKKworCXJkc2RlYnVnKCJyZWN2ICVwIGZyYWcgJXAgcGFnZSAlcFxuIiwgcmVjdiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlpZiAoZnJhZy0+Zl9tYXBwZWQpCisJCWliX2RtYV91bm1hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkgICAgICAgZnJhZy0+Zl9tYXBwZWQsCisJCQkgICAgICAgUkRTX0ZSQUdfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlmcmFnLT5mX21hcHBlZCA9IDA7Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCByZWN2ID0gaWMtPmlfcmVjdnM7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrLCByZWN2KyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXJlY3YtPnJfaWJpbmMgPSBOVUxMOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJCXJlY3YtPnJfd3IubmV4dCA9IE5VTEw7CisJCXJlY3YtPnJfd3Iud3JfaWQgPSBpOworCQlyZWN2LT5yX3dyLnNnX2xpc3QgPSByZWN2LT5yX3NnZTsKKwkJcmVjdi0+cl93ci5udW1fc2dlID0gUkRTX0lCX1JFQ1ZfU0dFOworCisJCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSAwOworCQlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3JlY3ZfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX3JlY3ZfY2xlYXJfb25lKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdikKK3sKKwlpZiAocmVjdi0+cl9pYmluYykgeworCQlyZHNfaW5jX3B1dCgmcmVjdi0+cl9pYmluYy0+aWlfaW5jKTsKKwkJcmVjdi0+cl9pYmluYyA9IE5VTEw7CisJfQorCWlmIChyZWN2LT5yX2ZyYWcpIHsKKwkJcmRzX2liX3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisJCWlmIChyZWN2LT5yX2ZyYWctPmZfcGFnZSkKKwkJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZHNfaWJfZnJhZ19mcmVlKHJlY3YtPnJfZnJhZyk7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHJkc19pYl9yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrKQorCQlyZHNfaWJfcmVjdl9jbGVhcl9vbmUoaWMsICZpYy0+aV9yZWN2c1tpXSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UpCisJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZSgmaWMtPmlfZnJhZyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX3JlY3ZfcmVmaWxsX29uZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwKKwkJCQkgIGdmcF90IGtwdHJfZ2ZwLCBnZnBfdCBwYWdlX2dmcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChyZWN2LT5yX2liaW5jID09IE5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZyZHNfaWJfYWxsb2NhdGlvbikgPj0gcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfYWxsb2NfbGltaXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVjdi0+cl9pYmluYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2liX2luY29taW5nX3NsYWIsCisJCQkJCQkga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9pYmluYyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWF0b21pY19pbmMoJnJkc19pYl9hbGxvY2F0aW9uKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfaWJpbmMtPmlpX2ZyYWdzKTsKKwkJcmRzX2luY19pbml0KCZyZWN2LT5yX2liaW5jLT5paV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCX0KKworCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkgeworCQlyZWN2LT5yX2ZyYWcgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pYl9mcmFnX3NsYWIsIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSk7CisJCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gTlVMTDsKKwl9CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkgeworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IGFsbG9jX3BhZ2UocGFnZV9nZnApOworCQlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlkbWFfYWRkciA9IGliX2RtYV9tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCSAgaWMtPmlfZnJhZy5mX3BhZ2UsCisJCQkJICBpYy0+aV9mcmFnLmZfb2Zmc2V0LAorCQkJCSAgUkRTX0ZSQUdfU0laRSwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGljLT5pX2NtX2lkLT5kZXZpY2UsIGRtYV9hZGRyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE9uY2Ugd2UgZ2V0IHRoZSBSRFNfUEFHRV9MQVNUX09GRiBmcmFnIHRoZW4gcmRzX2liX2ZyYWdfdW5tYXAoKQorCSAqIG11c3QgYmUgY2FsbGVkIG9uIHRoaXMgcmVjdi4gIFRoaXMgaGFwcGVucyBhcyBjb21wbGV0aW9ucyBoaXQKKwkgKiBpbiBvcmRlciBvciBvbiBjb25uZWN0aW9uIHNodXRkb3duLgorCSAqLworCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gaWMtPmlfZnJhZy5mX3BhZ2U7CisJcmVjdi0+cl9mcmFnLT5mX29mZnNldCA9IGljLT5pX2ZyYWcuZl9vZmZzZXQ7CisJcmVjdi0+cl9mcmFnLT5mX21hcHBlZCA9IGRtYV9hZGRyOworCisJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gZG1hX2FkZHI7CisJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCisJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKHJlY3YgLSBpYy0+aV9yZWN2cykgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWdldF9wYWdlKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKTsKKworCWlmIChpYy0+aV9mcmFnLmZfb2Zmc2V0IDwgUkRTX1BBR0VfTEFTVF9PRkYpIHsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCArPSBSRFNfRlJBR19TSVpFOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKGljLT5pX2ZyYWcuZl9wYWdlKTsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBOVUxMOworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHRyaWVzIHRvIGFsbG9jYXRlIGFuZCBwb3N0IHVudXNlZCB3b3JrIHJlcXVlc3RzIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQKKyAqIHRoZXkgaGF2ZSBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXkgbmVlZCB0byBxdWV1ZSByZWNlaXZlZCBmcmFnbWVudHMgaW50bworICogc29ja2V0cy4gIFRoZSBpX3JlY3ZfbXV0ZXggaXMgaGVsZCBoZXJlIHNvIHRoYXQgcmluZ19hbGxvYyBhbmQgX3VuYWxsb2MKKyAqIHBhaXJzIGRvbid0IGdvIHVubWF0Y2hlZC4KKyAqCisgKiAtMSBpcyByZXR1cm5lZCBpZiBwb3N0aW5nIGZhaWxzIGR1ZSB0byB0ZW1wb3JhcnkgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKyAqLworaW50IHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCXN0cnVjdCBpYl9yZWN2X3dyICpmYWlsZWRfd3I7CisJdW5zaWduZWQgaW50IHBvc3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisJdTMyIHBvczsKKworCXdoaWxlICgocHJlZmlsbCB8fCByZHNfY29ubl91cChjb25uKSkKKwkJCSYmIHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEsICZwb3MpKSB7CisJCWlmIChwb3MgPj0gaWMtPmlfcmVjdl9yaW5nLndfbnIpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiQXJnaCAtIHJpbmcgYWxsb2MgcmV0dXJuZWQgcG9zPSV1XG4iLAorCQkJCQlwb3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1twb3NdOworCQlyZXQgPSByZHNfaWJfcmVjdl9yZWZpbGxfb25lKGNvbm4sIHJlY3YsIGtwdHJfZ2ZwLCBwYWdlX2dmcCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBYWFggd2hlbiBjYW4gdGhpcyBmYWlsPyAqLworCQlyZXQgPSBpYl9wb3N0X3JlY3YoaWMtPmlfY21faWQtPnFwLCAmcmVjdi0+cl93ciwgJmZhaWxlZF93cik7CisJCXJkc2RlYnVnKCJyZWN2ICVwIGliaW5jICVwIHBhZ2UgJXAgYWRkciAlbHUgcmV0ICVkXG4iLCByZWN2LAorCQkJIHJlY3YtPnJfaWJpbmMsIHJlY3YtPnJfZnJhZy0+Zl9wYWdlLAorCQkJIChsb25nKSByZWN2LT5yX2ZyYWctPmZfbWFwcGVkLCByZXQpOworCQlpZiAocmV0KSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmVjdiBwb3N0IG9uICIKKwkJCSAgICAgICAiJXBJNCByZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJICAgICAgIHJldCk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9zdGVkKys7CisJfQorCisJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sIC0gdXBkYXRlIHRoZSB3aW5kb3cuICovCisJaWYgKGljLT5pX2Zsb3djdGwgJiYgcG9zdGVkKQorCQlyZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoY29ubiwgcG9zdGVkKTsKKworCWlmIChyZXQpCisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqcG9zOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCXJkc2RlYnVnKCJwdXJnaW5nIGliaW5jICVwIGluYyAlcFxuIiwgaWJpbmMsIGluYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgcG9zLCAmaWJpbmMtPmlpX2ZyYWdzLCBmX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmZnJhZy0+Zl9pdGVtKTsKKwkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKGZyYWcpOworCQlyZHNfaWJfZnJhZ19mcmVlKGZyYWcpOworCX0KK30KKwordm9pZCByZHNfaWJfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCisJcmRzX2liX2luY19wdXJnZShpbmMpOworCXJkc2RlYnVnKCJmcmVlaW5nIGliaW5jICVwIGluYyAlcFxuIiwgaWJpbmMsIGluYyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZpYmluYy0+aWlfZnJhZ3MpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2liX2luY29taW5nX3NsYWIsIGliaW5jKTsKKwlhdG9taWNfZGVjKCZyZHNfaWJfYWxsb2NhdGlvbik7CisJQlVHX09OKGF0b21pY19yZWFkKCZyZHNfaWJfYWxsb2NhdGlvbikgPCAwKTsKK30KKworaW50IHJkc19pYl9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGlvdmVjICppb3YgPSBmaXJzdF9pb3Y7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmYgPSAwOworCXVuc2lnbmVkIGxvbmcgaW92X29mZiA9IDA7CisJaW50IGNvcGllZCA9IDA7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCWZyYWcgPSBsaXN0X2VudHJ5KGliaW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoIiVsdSBieXRlcyB0byB1c2VyIFslcCwgJXp1XSArICVsdSBmcm9tIGZyYWcgIgorCQkJICJbJXAsICVsdV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIGZyYWctPmZfcGFnZSwgZnJhZy0+Zl9vZmZzZXQsIGZyYWdfb2ZmKTsKKworCQkvKiBYWFggbmVlZHMgKyBvZmZzZXQgZm9yIG11bHRpcGxlIHJlY3ZzIHBlciBwYWdlICovCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihmcmFnLT5mX3BhZ2UsCisJCQkJCSAgICBmcmFnLT5mX29mZnNldCArIGZyYWdfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qIGljIHN0YXJ0cyBvdXQga3phbGxvYygpZWQgKi8KK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqd3IgPSAmaWMtPmlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UgKnNnZSA9ICZpYy0+aV9hY2tfc2dlOworCisJc2dlLT5hZGRyID0gaWMtPmlfYWNrX2RtYTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwl3ci0+c2dfbGlzdCA9IHNnZTsKKwl3ci0+bnVtX3NnZSA9IDE7CisJd3ItPm9wY29kZSA9IElCX1dSX1NFTkQ7CisJd3ItPndyX2lkID0gUkRTX0lCX0FDS19XUl9JRDsKKwl3ci0+c2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKK30KKworLyoKKyAqIFlvdSdkIHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZCB0byBhY2sKKyAqIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQiBoYXJkd2FyZSBnZW5lcmF0ZXMKKyAqIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYQorICogcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdAorICogc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYQorICogcG90ZW50aWFsIGlzc3VlIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorICoKKyAqIFdoZW4gdGhlIHJlbW90ZSBob3N0IHJlY2VpdmVzIG91ciBhY2sgdGhleSdsbCBmcmVlIHRoZSBzZW50IG1lc3NhZ2UgZnJvbQorICogdGhlaXIgc2VuZCBxdWV1ZS4gIFRvIGRlY3JlYXNlIHRoZSBsYXRlbmN5IG9mIHRoaXMgd2UgYWx3YXlzIHNlbmQgYW4gYWNrCisgKiBpbW1lZGlhdGVseSBhZnRlciB3ZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBoYXZlIG9uZSBhY2sgaW4gZmxpZ2h0IGF0IGEgdGltZS4gIFRoaXMgcHV0cworICogcHJlc3N1cmUgb24gc2VuZGVycyB0byBoYXZlIGRlZXAgZW5vdWdoIHNlbmQgcXVldWVzIHRvIGFic29yYiB0aGUgbGF0ZW5jeSBvZgorICogYSBzaW5nbGUgYWNrIGZyYW1lIGJlaW5nIGluIGZsaWdodC4gIFRoaXMgbWlnaHQgbm90IGJlIGdvb2QgZW5vdWdoLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2ZSBhIGxvbmctbGl2ZWQgc2VuZF93ciBhbmQgc2dlIHdoaWNoIHBvaW50IHRvIGEKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFjayBmcmFtZS4gIFRoaXMgYWNrIHdyIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJpbmcKKyAqIGFjY291bnRpbmcgdGhhdCB0aGUgdHggYW5kIHJ4IHdycyBkby4gIFRoZSBRUCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IG1ha2VzCisgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCisgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwlpZiAoYWNrX3JlcXVpcmVkKSB7CisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHU2NCByZHNfaWJfZ2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJcmV0dXJuIGljLT5pX2Fja19uZXh0OworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSBpYy0+aV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwl1NjQgc2VxOworCWludCByZXQ7CisKKwlzZXEgPSByZHNfaWJfZ2V0X2FjayhpYyk7CisKKwlyZHNkZWJ1Zygic2VuZF9hY2s6IGljICVwIGFjayAlbGx1XG4iLCBpYywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VxKTsKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoaGRyLCAwLCAwLCAwKTsKKwloZHItPmhfYWNrID0gY3B1X3RvX2JlNjQoc2VxKTsKKwloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCWljLT5pX2Fja19xdWV1ZWQgPSBqaWZmaWVzOworCisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmljLT5pX2Fja193ciwgJmZhaWxlZF93cik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJLyogRmFpbGVkIHRvIHNlbmQuIFJlbGVhc2UgdGhlIFdSLCBhbmQKKwkJICogZm9yY2UgYW5vdGhlciBBQ0suCisJCSAqLworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX2ZhaWx1cmUpOworCQkvKiBOZWVkIHRvIGZpbmVzc2UgdGhpcyBsYXRlci4gKi8KKwkJQlVHKCk7CisJfSBlbHNlCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VudCk7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgMyB3YXlzIG9mIGdldHRpbmcgYWNrbm93bGVkZ2VtZW50cyB0byB0aGUgcGVlcjoKKyAqICAxLglXZSBjYWxsIHJkc19pYl9hdHRlbXB0X2FjayBmcm9tIHRoZSByZWN2IGNvbXBsZXRpb24gaGFuZGxlcgorICoJdG8gc2VuZCBhbiBBQ0stb25seSBmcmFtZS4KKyAqCUhvd2V2ZXIsIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoIGZyYW1lIGluIHRoZSBzZW5kIHF1ZXVlCisgKglhdCBhbnkgdGltZSwgc28gd2UgbWF5IGhhdmUgdG8gcG9zdHBvbmUgaXQuCisgKiAgMi4JV2hlbiBhbm90aGVyIChkYXRhKSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQgd2hpbGUgdGhlcmUncworICoJYW4gQUNLIGluIHRoZSBxdWV1ZSwgd2UgcGlnZ3liYWNrIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyCisgKglvbiB0aGUgZGF0YSBwYWNrZXQuCisgKiAgMy4JSWYgdGhlIEFDSyBXUiBpcyBkb25lIHNlbmRpbmcsIHdlIGdldCBjYWxsZWQgZnJvbSB0aGUKKyAqCXNlbmQgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSdzCisgKglhbm90aGVyIEFDSyBwZW5kaW5nIChwb3N0cG9uZWQgYmVjYXVzZSB0aGUgV1Igd2FzIG9uIHRoZQorICoJcXVldWUpLiBJZiBzbywgd2UgdHJhbnNtaXQgaXQuCisgKgorICogV2UgbWFpbnRhaW4gMiB2YXJpYWJsZXM6CisgKiAgLQlpX2Fja19mbGFncywgd2hpY2gga2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgQUNLIFdSCisgKglpcyBjdXJyZW50bHkgaW4gdGhlIHNlbmQgcXVldWUgb3Igbm90IChJQl9BQ0tfSU5fRkxJR0hUKQorICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCisgKgorICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKgorICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCisgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCisgKiBpcyByZXRyYW5zbWl0dGluZyB0aGVtLCBiZWNhdXNlIGl0IGhhc24ndCBzZWVuIGFuIEFDSyBmb3IKKyAqIHRoZW0uIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIEFDSyB0aGVzZS4KKyAqCisgKiBBQ0sgbWl0aWdhdGlvbiBhZGRzIGEgaGVhZGVyIGZsYWcgIkFDS19SRVFVSVJFRCI7IGFueSBwYWNrZXQgd2l0aAorICogdGhpcyBmbGFnIHNldCAqTVVTVCogYmUgYWNrbm93bGVkZ2VkIGltbWVkaWF0ZWx5LgorICovCisKKy8qCisgKiBXaGVuIHdlIGdldCBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSB0aGUgcmVjdiBxdWV1ZSBoYW5kbGVyLgorICogQ2hlY2sgd2hldGhlciB3ZSBvdWdodCB0byB0cmFuc21pdCBhbiBBQ0suCisgKi8KK3ZvaWQgcmRzX2liX2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzOworCisJaWYgKCF0ZXN0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncykpIHsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX2RlbGF5ZWQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2FuIHdlIGdldCBhIHNlbmQgY3JlZGl0PyAqLworCWlmICghcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAxLCAmYWR2X2NyZWRpdHMsIDApKSB7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF90aHJvdHRsZSk7CisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfc2VuZF9hY2soaWMsIGFkdl9jcmVkaXRzKTsKK30KKworLyoKKyAqIFdlIGdldCBoZXJlIGZyb20gdGhlIHNlbmQgY29tcGxldGlvbiBoYW5kbGVyLCB3aGVuIHRoZQorICogYWRhcHRlciB0ZWxscyB1cyB0aGUgQUNLIGZyYW1lIHdhcyBzZW50LgorICovCit2b2lkIHJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlZ3VsYXIgeG1pdCBjb2RlIHdoZW4gaXQgd2FudHMgdG8gcGlnZ3liYWNrCisgKiBhbiBBQ0sgb24gYW4gb3V0Z29pbmcgZnJhbWUuCisgKi8KK3U2NCByZHNfaWJfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9waWdneWJhY2tlZCk7CisJcmV0dXJuIHJkc19pYl9nZXRfYWNrKGljKTsKK30KKworLyoKKyAqIEl0J3Mga2luZCBvZiBsYW1lIHRoYXQgd2UncmUgY29weWluZyBmcm9tIHRoZSBwb3N0ZWQgcmVjZWl2ZSBwYWdlcyBpbnRvCisgKiBsb25nLWxpdmVkIGJpdG1hcHMuICBXZSBjb3VsZCBoYXZlIHBvc3RlZCB0aGUgYml0bWFwcyBhbmQgcmRtYSB3cml0dGVuIGludG8KKyAqIHRoZW0uICBCdXQgcmVjZWl2aW5nIG5ldyBjb25nZXN0aW9uIGJpdG1hcHMgc2hvdWxkIGJlIGEgKnJhcmUqIGV2ZW50LCBzbworICogaG9wZWZ1bGx5IHdlIHdvbid0IG5lZWQgdG8gaW52ZXN0IHRoYXQgY29tcGxleGl0eSBpbiBtYWtpbmcgaXQgbW9yZQorICogZWZmaWNpZW50LiAgQnkgY29weWluZyB3ZSBjYW4gc2hhcmUgYSBzaW1wbGVyIGNvcmUgd2l0aCBUQ1Agd2hpY2ggaGFzIHRvCisgKiBjb3B5LgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfY29uZ19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbWFwX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX3BhZ2U7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBjb3BpZWQ7CisJdWludDY0X3QgdW5jb25nZXN0ZWQgPSAwOworCXZvaWQgKmFkZHI7CisKKwkvKiBjYXRjaCBjb21wbGV0ZWx5IGNvcnJ1cHQgcGFja2V0cyAqLworCWlmIChiZTMyX3RvX2NwdShpYmluYy0+aWlfaW5jLmlfaGRyLmhfbGVuKSAhPSBSRFNfQ09OR19NQVBfQllURVMpCisJCXJldHVybjsKKworCW1hcCA9IGNvbm4tPmNfZmNvbmc7CisJbWFwX3BhZ2UgPSAwOworCW1hcF9vZmYgPSAwOworCisJZnJhZyA9IGxpc3RfZW50cnkoaWJpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWZyYWdfb2ZmID0gMDsKKworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgUkRTX0NPTkdfTUFQX0JZVEVTKSB7CisJCXVpbnQ2NF90ICpzcmMsICpkc3Q7CisJCXVuc2lnbmVkIGludCBrOworCisJCXRvX2NvcHkgPSBtaW4oUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmLCBQQUdFX1NJWkUgLSBtYXBfb2ZmKTsKKwkJQlVHX09OKHRvX2NvcHkgJiA3KTsgLyogTXVzdCBiZSA2NGJpdCBhbGlnbmVkLiAqLworCisJCWFkZHIgPSBrbWFwX2F0b21pYyhmcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKworCQlzcmMgPSBhZGRyICsgZnJhZ19vZmY7CisJCWRzdCA9ICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbbWFwX3BhZ2VdICsgbWFwX29mZjsKKwkJZm9yIChrID0gMDsgayA8IHRvX2NvcHk7IGsgKz0gOCkgeworCQkJLyogUmVjb3JkIHBvcnRzIHRoYXQgYmVjYW1lIHVuY29uZ2VzdGVkLCBpZQorCQkJICogYml0cyB0aGF0IGNoYW5nZWQgZnJvbSAwIHRvIDEuICovCisJCQl1bmNvbmdlc3RlZCB8PSB+KCpzcmMpICYgKmRzdDsKKwkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJfQorCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKworCQljb3BpZWQgKz0gdG9fY29weTsKKworCQltYXBfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChtYXBfb2ZmID09IFBBR0VfU0laRSkgeworCQkJbWFwX29mZiA9IDA7CisJCQltYXBfcGFnZSsrOworCQl9CisKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJfQorCisJLyogdGhlIGNvbmdlc3Rpb24gbWFwIGlzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIgKi8KKwl1bmNvbmdlc3RlZCA9IGxlNjRfdG9fY3B1KHVuY29uZ2VzdGVkKTsKKworCXJkc19jb25nX21hcF91cGRhdGVkKG1hcCwgdW5jb25nZXN0ZWQpOworfQorCisvKgorICogUmluZ3MgYXJlIHBvc3RlZCB3aXRoIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSdsbCBuZWVkIHRvIHF1ZXVlIHRoZQorICogaW5jb21pbmcgbWVzc2FnZSB0byB0aGUgcmVjZWl2aW5nIHNvY2tldCBzbyB0aGlzIGNhbid0IGZhaWwuCisgKiBBbGwgZnJhZ21lbnRzIHN0YXJ0IHdpdGggYSBoZWFkZXIsIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UncmUgbm90IHJlY2VpdmluZworICogZ2FyYmFnZSwgYW5kIHdlIGNhbiB0ZWxsIGEgc21hbGwgOCBieXRlIGZyYWdtZW50IGZyb20gYW4gQUNLIGZyYW1lLgorICovCitzdHJ1Y3QgcmRzX2liX2Fja19zdGF0ZSB7CisJdTY0CQlhY2tfbmV4dDsKKwl1NjQJCWFja19yZWN2OworCXVuc2lnbmVkIGludAlhY2tfcmVxdWlyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX25leHRfdmFsaWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlY3ZfdmFsaWQ6MTsKK307CisKK3N0YXRpYyB2b2lkIHJkc19pYl9wcm9jZXNzX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2LCB1MzIgYnl0ZV9sZW4sCisJCQkJc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jID0gaWMtPmlfaWJpbmM7CisJc3RydWN0IHJkc19oZWFkZXIgKmloZHIsICpoZHI7CisKKwkvKiBYWFggc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uIGlmIHBvcnQgMCwwIGFyZSBzZWVuPyAqLworCisJcmRzZGVidWcoImljICVwIGliaW5jICVwIHJlY3YgJXAgYnl0ZSBsZW4gJXVcbiIsIGljLCBpYmluYywgcmVjdiwKKwkJIGJ5dGVfbGVuKTsKKworCWlmIChieXRlX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBkaWRuJ3QgaW5jbHVlIGEgIgorCQkgICAgICAgImhlYWRlciwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmV0dXJuOworCX0KKwlieXRlX2xlbiAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJaWhkciA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKworCS8qIFZhbGlkYXRlIHRoZSBjaGVja3N1bS4gKi8KKwlpZiAoIXJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShpaGRyKSkgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGhhcyBjb3JydXB0ZWQgaGVhZGVyIC0gIgorCQkgICAgICAgImZvcmNpbmcgYSByZWNvbm5lY3RcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgdGhlIEFDSyBzZXF1ZW5jZSB3aGljaCBjb21lcyB3aXRoIGV2ZXJ5IHBhY2tldCAqLworCXN0YXRlLT5hY2tfcmVjdiA9IGJlNjRfdG9fY3B1KGloZHItPmhfYWNrKTsKKwlzdGF0ZS0+YWNrX3JlY3ZfdmFsaWQgPSAxOworCisJLyogUHJvY2VzcyB0aGUgY3JlZGl0cyB1cGRhdGUgaWYgdGhlcmUgd2FzIG9uZSAqLworCWlmIChpaGRyLT5oX2NyZWRpdCkKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgaWhkci0+aF9jcmVkaXQpOworCisJaWYgKGloZHItPmhfc3BvcnQgPT0gMCAmJiBpaGRyLT5oX2Rwb3J0ID09IDAgJiYgYnl0ZV9sZW4gPT0gMCkgeworCQkvKiBUaGlzIGlzIGFuIEFDSy1vbmx5IHBhY2tldC4gVGhlIGZhY3QgdGhhdCBpdCBnZXRzCisJCSAqIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUgaXMgdGhhdCBoaXN0b3JpY2FsbHksIEFDS3MKKwkJICogd2VyZSByYXRoZXIgc3BlY2lhbCBiZWFzdHMuCisJCSAqLworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3JlY2VpdmVkKTsKKworCQkvKgorCQkgKiBVc3VhbGx5IHRoZSBmcmFncyBtYWtlIHRoZWlyIHdheSBvbiB0byBpbmNzIGFuZCBhcmUgdGhlbiBmcmVlZCBhcworCQkgKiB0aGUgaW5jIGlzIGZyZWVkLiAgV2UgZG9uJ3QgZ28gdGhhdCByb3V0ZSwgc28gd2UgaGF2ZSB0byBkcm9wIHRoZQorCQkgKiBwYWdlIHJlZiBvdXJzZWx2ZXMuICBXZSBjYW4ndCBqdXN0IGxlYXZlIHRoZSBwYWdlIG9uIHRoZSByZWN2CisJCSAqIGJlY2F1c2UgdGhhdCBjb25mdXNlcyB0aGUgZG1hIG1hcHBpbmcgb2YgcGFnZXMgYW5kIGVhY2ggcmVjdidzIHVzZQorCQkgKiBvZiBhIHBhcnRpYWwgcGFnZS4gIFdlIGNhbiBsZWF2ZSB0aGUgZnJhZywgdGhvdWdoLCBpdCB3aWxsIGJlCisJCSAqIHJldXNlZC4KKwkJICoKKwkJICogRklYTUU6IEZvbGQgdGhpcyBpbnRvIHRoZSBjb2RlIHBhdGggYmVsb3cuCisJCSAqLworCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGluYyBvbiB0aGUgY29ubmVjdGlvbiB0aGVuIHRoaXMKKwkgKiBmcmFnbWVudCBoYXMgYSBoZWFkZXIgYW5kIHN0YXJ0cyBhIG1lc3NhZ2UuLiBjb3B5IGl0cyBoZWFkZXIKKwkgKiBpbnRvIHRoZSBpbmMgYW5kIHNhdmUgdGhlIGluYyBzbyB3ZSBjYW4gaGFuZyB1cGNvbWluZyBmcmFnbWVudHMKKwkgKiBvZmYgaXRzIGxpc3QuCisJICovCisJaWYgKGliaW5jID09IE5VTEwpIHsKKwkJaWJpbmMgPSByZWN2LT5yX2liaW5jOworCQlyZWN2LT5yX2liaW5jID0gTlVMTDsKKwkJaWMtPmlfaWJpbmMgPSBpYmluYzsKKworCQloZHIgPSAmaWJpbmMtPmlpX2luYy5pX2hkcjsKKwkJbWVtY3B5KGhkciwgaWhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IGJlMzJfdG9fY3B1KGhkci0+aF9sZW4pOworCisJCXJkc2RlYnVnKCJpYyAlcCBpYmluYyAlcCByZW0gJXUgZmxhZyAweCV4XG4iLCBpYywgaWJpbmMsCisJCQkgaWMtPmlfcmVjdl9kYXRhX3JlbSwgaGRyLT5oX2ZsYWdzKTsKKwl9IGVsc2UgeworCQloZHIgPSAmaWJpbmMtPmlpX2luYy5pX2hkcjsKKwkJLyogV2UgY2FuJ3QganVzdCB1c2UgbWVtY21wIGhlcmU7IGZyYWdtZW50cyBvZiBhCisJCSAqIHNpbmdsZSBtZXNzYWdlIG1heSBjYXJyeSBkaWZmZXJlbnQgQUNLcyAqLworCQlpZiAoaGRyLT5oX3NlcXVlbmNlICE9IGloZHItPmhfc2VxdWVuY2UKKwkJIHx8IGhkci0+aF9sZW4gIT0gaWhkci0+aF9sZW4KKwkJIHx8IGhkci0+aF9zcG9ydCAhPSBpaGRyLT5oX3Nwb3J0CisJCSB8fCBoZHItPmhfZHBvcnQgIT0gaWhkci0+aF9kcG9ydCkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiZnJhZ21lbnQgaGVhZGVyIG1pc21hdGNoOyBmb3JjaW5nIHJlY29ubmVjdFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSwgJmliaW5jLT5paV9mcmFncyk7CisJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCWlmIChpYy0+aV9yZWN2X2RhdGFfcmVtID4gUkRTX0ZSQUdfU0laRSkKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSAtPSBSRFNfRlJBR19TSVpFOworCWVsc2UgeworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gMDsKKwkJaWMtPmlfaWJpbmMgPSBOVUxMOworCisJCWlmIChpYmluYy0+aWlfaW5jLmlfaGRyLmhfZmxhZ3MgPT0gUkRTX0ZMQUdfQ09OR19CSVRNQVApCisJCQlyZHNfaWJfY29uZ19yZWN2KGNvbm4sIGliaW5jKTsKKwkJZWxzZSB7CisJCQlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2ZhZGRyLCBjb25uLT5jX2xhZGRyLAorCQkJCQkgICZpYmluYy0+aWlfaW5jLCBHRlBfQVRPTUlDLAorCQkJCQkgIEtNX1NPRlRJUlEwKTsKKwkJCXN0YXRlLT5hY2tfbmV4dCA9IGJlNjRfdG9fY3B1KGhkci0+aF9zZXF1ZW5jZSk7CisJCQlzdGF0ZS0+YWNrX25leHRfdmFsaWQgPSAxOworCQl9CisKKwkJLyogRXZhbHVhdGUgdGhlIEFDS19SRVFVSVJFRCBmbGFnICphZnRlciogd2UgcmVjZWl2ZWQKKwkJICogdGhlIGNvbXBsZXRlIGZyYW1lLCBhbmQgYWZ0ZXIgYnVtcGluZyB0aGUgbmV4dF9yeAorCQkgKiBzZXF1ZW5jZS4gKi8KKwkJaWYgKGhkci0+aF9mbGFncyAmIFJEU19GTEFHX0FDS19SRVFVSVJFRCkgeworCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfYWNrX3JlcXVpcmVkKTsKKwkJCXN0YXRlLT5hY2tfcmVxdWlyZWQgPSAxOworCQl9CisKKwkJcmRzX2luY19wdXQoJmliaW5jLT5paV9pbmMpOworCX0KK30KKworLyoKKyAqIFBsdWNraW5nIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgcmluZyBjYW4gYmUgZG9uZSBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIHRocmVhZCByZWZpbGxpbmcgdGhlIHJpbmcuICBFYWNoIHJpbmcgb3BlcmF0aW9uIGlzIHByb3RlY3RlZCBieQorICogc3BpbmxvY2tzIGFuZCB0aGUgdHJhbnNpZW50IHN0YXRlIG9mIHJlZmlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAqIHJlY29yZGluZyBvZiB3aGljaCBlbnRyeSBpcyBvbGRlc3QuCisgKgorICogVGhpcyByZWxpZXMgb24gSUIgb25seSBjYWxsaW5nIG9uZSBjcSBjb21wX2hhbmRsZXIgZm9yIGVhY2ggY3Egc28gdGhhdAorICogdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSBjYWxsZXIgb2YgcmRzX3JlY3ZfaW5jb21pbmcoKSBwZXIgUkRTIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgc3RhdGUgPSB7IDAsIH07CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjcSAlcFxuIiwgY29ubiwgY3EpOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NxX2NhbGwpOworCisJaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfU09MSUNJVEVEKTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcV9ldmVudCk7CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1tyZHNfaWJfcmluZ19vbGRlc3QoJmljLT5pX3JlY3ZfcmluZyldOworCisJCXJkc19pYl9yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCisJCS8qCisJCSAqIEFsc28gcHJvY2VzcyByZWN2cyBpbiBjb25uZWN0aW5nIHN0YXRlIGJlY2F1c2UgaXQgaXMgcG9zc2libGUKKwkJICogdG8gZ2V0IGEgcmVjdiBjb21wbGV0aW9uIF9iZWZvcmVfIHRoZSByZG1hY20gRVNUQUJMSVNIRUQKKwkJICogZXZlbnQgaXMgcHJvY2Vzc2VkLgorCQkgKi8KKwkJaWYgKHJkc19jb25uX3VwKGNvbm4pIHx8IHJkc19jb25uX2Nvbm5lY3RpbmcoY29ubikpIHsKKwkJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKKwkJCQlyZHNfaWJfcHJvY2Vzc19yZWN2KGNvbm4sIHJlY3YsIHdjLmJ5dGVfbGVuLCAmc3RhdGUpOworCQkJfSBlbHNlIHsKKwkJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmVjdiBjb21wbGV0aW9uIG9uICIKKwkJCQkgICAgICAgIiVwSTQgaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCQkgICAgICAgd2Muc3RhdHVzKTsKKwkJCX0KKwkJfQorCisJCXJkc19pYl9yaW5nX2ZyZWUoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJfQorCisJaWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKQorCQlyZHNfaWJfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7CisJaWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkICYmIHN0YXRlLmFja19yZWN2ID4gaWMtPmlfYWNrX3JlY3YpIHsKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBzdGF0ZS5hY2tfcmVjdiwgTlVMTCk7CisJCWljLT5pX2Fja19yZWN2ID0gc3RhdGUuYWNrX3JlY3Y7CisJfQorCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKKworCS8qIElmIHdlIGV2ZXIgZW5kIHVwIHdpdGggYSByZWFsbHkgZW1wdHkgcmVjZWl2ZSByaW5nLCB3ZSdyZQorCSAqIGluIGRlZXAgdHJvdWJsZSwgYXMgdGhlIHNlbmRlciB3aWxsIGRlZmluaXRlbHkgc2VlIFJOUgorCSAqIHRpbWVvdXRzLiAqLworCWlmIChyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X3JpbmdfZW1wdHkpOworCisJLyoKKwkgKiBJZiB0aGUgcmluZyBpcyBydW5uaW5nIGxvdywgdGhlbiBzY2hlZHVsZSB0aGUgdGhyZWFkIHRvIHJlZmlsbC4KKwkgKi8KKwlpZiAocmRzX2liX3JpbmdfbG93KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCitpbnQgcmRzX2liX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXBcbiIsIGNvbm4pOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgYSB0ZW1wb3JhcnkgcG9zdGluZyBmYWlsdXJlIGluIHRoaXMgY29udGV4dCB0aGVuCisJICogd2UncmUgcmVhbGx5IGxvdyBhbmQgd2Ugd2FudCB0aGUgY2FsbGVyIHRvIGJhY2sgb2ZmIGZvciBhIGJpdC4KKwkgKi8KKwltdXRleF9sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKwlpZiAocmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMCkpCisJCXJldCA9IC1FTk9NRU07CisJZWxzZQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkKTsKKwltdXRleF91bmxvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCByZHNfaWJfcmVjdl9pbml0KHZvaWQpCit7CisJc3RydWN0IHN5c2luZm8gc2k7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwkvKiBEZWZhdWx0IHRvIDMwJSBvZiBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgcmVjdiBtZW1vcnkgKi8KKwlzaV9tZW1pbmZvKCZzaSk7CisJcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gc2kudG90YWxyYW0gLyAzICogUEFHRV9TSVpFIC8gUkRTX0ZSQUdfU0laRTsKKworCXJkc19pYl9pbmNvbWluZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pYl9pbmNvbWluZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2liX2luY29taW5nKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pYl9pbmNvbWluZ19zbGFiID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmRzX2liX2ZyYWdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaWJfZnJhZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaWJfZnJhZ19zbGFiID09IE5VTEwpCisJCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfaW5jb21pbmdfc2xhYik7CisJZWxzZQorCQlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfaW5jb21pbmdfc2xhYik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pYl9mcmFnX3NsYWIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yaW5nLmMgYi9uZXQvcmRzL2liX3JpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE2Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yaW5nLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworLyoKKyAqIExvY2tpbmcgZm9yIElCIHJpbmdzLgorICogV2UgYXNzdW1lIHRoYXQgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvdGVjdGVkIGJ5IGEgbXV0ZXgKKyAqIGluIHRoZSBjYWxsZXIgKHRoaXMgaXMgYSB2YWxpZCBhc3N1bXB0aW9uIGZvciB0aGUgY3VycmVudAorICogaW1wbGVtZW50YXRpb24pLgorICoKKyAqIEZyZWVpbmcgYWx3YXlzIGhhcHBlbnMgaW4gYW4gaW50ZXJydXB0LCBhbmQgaGVuY2Ugb25seQorICogcmFjZXMgd2l0aCBhbGxvY2F0aW9ucywgYnV0IG5vdCB3aXRoIG90aGVyIGZyZWUoKXMuCisgKgorICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpcyB0aGF0CisgKiB0aGUgYWxsb2MgY29kZSBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZnJlZSBlbnRyaWVzLgorICogVG8gdGhpcyBlbmQsIHdlIG1haW50YWluIHR3byBjb3VudGVyczsgYW4gYWxsb2NhdGlvbiBjb3VudGVyCisgKiBhbmQgYSBmcmVlIGNvdW50ZXIuIEJvdGggYXJlIGFsbG93ZWQgdG8gcnVuIGZyZWVseSwgYW5kIHdyYXAKKyAqIGFyb3VuZC4KKyAqIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIGFsd2F5cyAoYWxsb2NfY3RyIC0gZnJlZV9jdHIpICUgTlIuCisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgZnJlZV9jdHIgYXRvbWljLiBXaGVuIHRoZQorICogY2FsbGVyIGZpbmRzIGFuIGFsbG9jYXRpb24gZmFpbHMsIGl0IHNob3VsZCBzZXQgYW4gImFsbG9jIGZhaWwiCisgKiBiaXQgYW5kIHJldHJ5IHRoZSBhbGxvY2F0aW9uLiBUaGUgImFsbG9jIGZhaWwiIGJpdCBlc3NlbnRpYWxseSB0ZWxscworICogdGhlIENRIGNvbXBsZXRpb24gaGFuZGxlcnMgdG8gd2FrZSBpdCB1cCBhZnRlciBmcmVlaW5nIHNvbWUKKyAqIG1vcmUgZW50cmllcy4KKyAqLworCisvKgorICogVGhpcyBvbmx5IGhhcHBlbnMgb24gc2h1dGRvd24uCisgKi8KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19pYl9yaW5nX2VtcHR5X3dhaXQpOworCit2b2lkIHJkc19pYl9yaW5nX2luaXQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwltZW1zZXQocmluZywgMCwgc2l6ZW9mKCpyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworCXJkc2RlYnVnKCJyaW5nICVwIG5yICV1XG4iLCByaW5nLCByaW5nLT53X25yKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yZHNfaWJfcmluZ191c2VkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXUzMiBkaWZmOworCisJLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaGFzIGF0IGxlYXN0IGFzIG1hbnkgYml0cyBhcyB1MzIgKi8KKwlkaWZmID0gcmluZy0+d19hbGxvY19jdHIgLSAodTMyKSBhdG9taWNfcmVhZCgmcmluZy0+d19mcmVlX2N0cik7CisJQlVHX09OKGRpZmYgPiByaW5nLT53X25yKTsKKworCXJldHVybiBkaWZmOworfQorCit2b2lkIHJkc19pYl9yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCS8qIFdlIG9ubHkgZXZlciBnZXQgY2FsbGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gc2V0dXAgY29kZSwKKwkgKiBwcmlvciB0byBjcmVhdGluZyB0aGUgUVAuICovCisJQlVHX09OKF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworfQorCitzdGF0aWMgaW50IF9fcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSA9PSAwOworfQorCit1MzIgcmRzX2liX3JpbmdfYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKQoreworCXUzMiByZXQgPSAwLCBhdmFpbDsKKworCWF2YWlsID0gcmluZy0+d19uciAtIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHZhbCAldSBuZXh0ICV1IGZyZWUgJXVcbiIsIHJpbmcsIHZhbCwKKwkJIHJpbmctPndfYWxsb2NfcHRyLCBhdmFpbCk7CisKKwlpZiAodmFsICYmIGF2YWlsKSB7CisJCXJldCA9IG1pbih2YWwsIGF2YWlsKTsKKwkJKnBvcyA9IHJpbmctPndfYWxsb2NfcHRyOworCisJCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyICsgcmV0KSAlIHJpbmctPndfbnI7CisJCXJpbmctPndfYWxsb2NfY3RyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9yaW5nX2ZyZWUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19mcmVlX3B0ciA9IChyaW5nLT53X2ZyZWVfcHRyICsgdmFsKSAlIHJpbmctPndfbnI7CisJYXRvbWljX2FkZCh2YWwsICZyaW5nLT53X2ZyZWVfY3RyKTsKKworCWlmIChfX3Jkc19pYl9yaW5nX2VtcHR5KHJpbmcpICYmCisJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19pYl9yaW5nX2VtcHR5X3dhaXQpKQorCQl3YWtlX3VwKCZyZHNfaWJfcmluZ19lbXB0eV93YWl0KTsKK30KKwordm9pZCByZHNfaWJfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyIC0gdmFsKSAlIHJpbmctPndfbnI7CisJcmluZy0+d19hbGxvY19jdHIgLT0gdmFsOworfQorCitpbnQgcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfZW1wdHkocmluZyk7Cit9CisKK2ludCByZHNfaWJfcmluZ19sb3coc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSA8PSAocmluZy0+d19uciA+PiAyKTsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG9sZGVzdCBhbGxvY2VkIHJpbmcgZW50cnkuICBUaGlzIHdpbGwgYmUgdGhlIG5leHQgb25lCisgKiBmcmVlZC4gIFRoaXMgY2FuJ3QgYmUgY2FsbGVkIGlmIHRoZXJlIGFyZSBub25lIGFsbG9jYXRlZC4KKyAqLwordTMyIHJkc19pYl9yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gcmluZy0+d19mcmVlX3B0cjsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgd29yayByZXF1ZXN0cy4KKyAqLworCit1MzIgcmRzX2liX3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpCit7CisJdTMyIHJldDsKKworCWlmIChvbGRlc3QgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCkKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCAtIG9sZGVzdCArIDE7CisJZWxzZQorCQlyZXQgPSByaW5nLT53X25yIC0gb2xkZXN0ICsgKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCArIDE7CisKKwlyZHNkZWJ1ZygicmluZyAlcCByZXQgJXUgd3JfaWQgJXUgb2xkZXN0ICV1XG4iLCByaW5nLCByZXQsCisJCSB3cl9pZCwgb2xkZXN0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9zZW5kLmMgYi9uZXQvcmRzL2liX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZjNTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zZW5kLmMKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCQkgICAgICBpbnQgd2Nfc3RhdHVzKQoreworCWludCBub3RpZnlfc3RhdHVzOworCisJc3dpdGNoICh3Y19zdGF0dXMpIHsKKwljYXNlIElCX1dDX1dSX0ZMVVNIX0VSUjoKKwkJcmV0dXJuOworCisJY2FzZSBJQl9XQ19TVUNDRVNTOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfU1VDQ0VTUzsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dDX1JFTV9BQ0NFU1NfRVJSOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfUkVNT1RFX0VSUk9SOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9PVEhFUl9FUlJPUjsKKwkJYnJlYWs7CisJfQorCXJkc19yZG1hX3NlbmRfY29tcGxldGUocm0sIG5vdGlmeV9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF91bm1hcF9yZG1hKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlpZiAob3AtPnJfbWFwcGVkKSB7CisJCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLAorCQkJb3AtPnJfd3JpdGUgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJb3AtPnJfbWFwcGVkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3VubWFwX3JtKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkgIHN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kLAorCQkJICBpbnQgd2Nfc3RhdHVzKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBzZW5kLT5zX3JtOworCisJcmRzZGVidWcoImljICVwIHNlbmQgJXAgcm0gJXBcbiIsIGljLCBzZW5kLCBybSk7CisKKwlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJICAgICBybS0+bV9zZywgcm0tPm1fbmVudHMsCisJCSAgICAgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAocm0tPm1fcmRtYV9vcCAhPSBOVUxMKSB7CisJCXJkc19pYl9zZW5kX3VubWFwX3JkbWEoaWMsIHJtLT5tX3JkbWFfb3ApOworCisJCS8qIElmIHRoZSB1c2VyIGFza2VkIGZvciBhIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIG9uIHRoaXMKKwkJICogbWVzc2FnZSwgd2UgY2FuIGltcGxlbWVudCB0aHJlZSBkaWZmZXJlbnQgc2VtYW50aWNzOgorCQkgKiAgMS4JTm90aWZ5IHdoZW4gd2UgcmVjZWl2ZWQgdGhlIEFDSyBvbiB0aGUgUkRTIG1lc3NhZ2UKKwkJICoJdGhhdCB3YXMgcXVldWVkIHdpdGggdGhlIFJETUEuIFRoaXMgcHJvdmlkZXMgcmVsaWFibGUKKwkJICoJbm90aWZpY2F0aW9uIG9mIFJETUEgc3RhdHVzIGF0IHRoZSBleHBlbnNlIG9mIGEgb25lLXdheQorCQkgKglwYWNrZXQgZGVsYXkuCisJCSAqICAyLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBSRE1BIG9wZXJhdGlvbi4KKwkJICogIDMuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIGFjY29tcGFueWluZyBSRFMgbWVzc2FnZXMuCisJCSAqIEhlcmUsIHdlIGltcGxlbWVudCBhcHByb2FjaCAjMy4gVG8gaW1wbGVtZW50IGFwcHJvYWNoICMyLAorCQkgKiBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgZnJvbSB0aGUgY3FfaGFuZGxlci4gVG8gaW1wbGVtZW50ICMxLAorCQkgKiBkb24ndCBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgYXQgYWxsLCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3RpZnkKKwkJICogaGFuZGxpbmcgaW4gdGhlIEFDSyBwcm9jZXNzaW5nIGNvZGUuCisJCSAqCisJCSAqIE5vdGU6IFRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHN5bmMgYW55IFJETUEgYnVmZmVycyB1c2luZworCQkgKiBpYl9kbWFfc3luY19zZ19mb3JfY3B1IC0gdGhlIGNvbXBsZXRpb24gZm9yIHRoZSBSRE1BCisJCSAqIG9wZXJhdGlvbiBpdHNlbGYgdW5tYXBwZWQgdGhlIFJETUEgYnVmZmVycywgd2hpY2ggdGFrZXMgY2FyZQorCQkgKiBvZiBzeW5jaGluZy4KKwkJICovCisJCXJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjX3N0YXR1cyk7CisKKwkJaWYgKHJtLT5tX3JkbWFfb3AtPnJfd3JpdGUpCisJCQlyZHNfc3RhdHNfYWRkKHNfc2VuZF9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwkJZWxzZQorCQkJcmRzX3N0YXRzX2FkZChzX3JlY3ZfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJfQorCisJLyogSWYgYW55b25lIHdhaXRlZCBmb3IgdGhpcyBtZXNzYWdlIHRvIGdldCBmbHVzaGVkIG91dCwgd2FrZQorCSAqIHRoZW0gdXAgbm93ICovCisJcmRzX21lc3NhZ2VfdW5tYXBwZWQocm0pOworCisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlzZW5kLT5zX3JtID0gTlVMTDsKK30KKwordm9pZCByZHNfaWJfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJc2VuZC0+c19ybSA9IE5VTEw7CisJCXNlbmQtPnNfb3AgPSBOVUxMOworCisJCXNlbmQtPnNfd3Iud3JfaWQgPSBpOworCQlzZW5kLT5zX3dyLnNnX2xpc3QgPSBzZW5kLT5zX3NnZTsKKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3dyLmV4LmltbV9kYXRhID0gMDsKKworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisJfQorfQorCit2b2lkIHJkc19pYl9zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gMHhkZWFkKQorCQkJY29udGludWU7CisJCWlmIChzZW5kLT5zX3JtKQorCQkJcmRzX2liX3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIElCX1dDX1dSX0ZMVVNIX0VSUik7CisJCWlmIChzZW5kLT5zX29wKQorCQkJcmRzX2liX3NlbmRfdW5tYXBfcmRtYShpYywgc2VuZC0+c19vcCk7CisJfQorfQorCisvKgorICogVGhlIF9vbGRlc3QvX2ZyZWUgcmluZyBvcGVyYXRpb25zIGhlcmUgcmFjZSBjbGVhbmx5IHdpdGggdGhlIGFsbG9jL3VuYWxsb2MKKyAqIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGluIHRoZSBzZW5kIHBhdGguICBBcyB0aGUgc2VuZGVyIGFsbG9jcyBhbmQgcG90ZW50aWFsbHkKKyAqIHVuYWxsb2NzIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIHJpbmcgaXQgZG9lc24ndCBhbHRlciB3aGljaCBpcworICogdGhlIG5leHQgdG8gYmUgZnJlZWQsIHdoaWNoIGlzIHdoYXQgdGhpcyBpcyBjb25jZXJuZWQgd2l0aC4KKyAqLwordm9pZCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBvbGRlc3Q7CisJdTMyIGkgPSAwOworCWludCByZXQ7CisKKwlyZHNkZWJ1ZygiY3EgJXAgY29ubiAlcFxuIiwgY3EsIGNvbm4pOworCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcV9jYWxsKTsKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpCisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcV9ldmVudCk7CisKKwkJaWYgKHdjLndyX2lkID09IFJEU19JQl9BQ0tfV1JfSUQpIHsKKwkJCWlmIChpYy0+aV9hY2tfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3N0YWxsZWQpOworCQkJcmRzX2liX2Fja19zZW5kX2NvbXBsZXRlKGljKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkZXN0ID0gcmRzX2liX3Jpbmdfb2xkZXN0KCZpYy0+aV9zZW5kX3JpbmcpOworCisJCWNvbXBsZXRlZCA9IHJkc19pYl9yaW5nX2NvbXBsZXRlZCgmaWMtPmlfc2VuZF9yaW5nLCB3Yy53cl9pZCwgb2xkZXN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29tcGxldGVkOyBpKyspIHsKKwkJCXNlbmQgPSAmaWMtPmlfc2VuZHNbb2xkZXN0XTsKKworCQkJLyogSW4gdGhlIGVycm9yIGNhc2UsIHdjLm9wY29kZSBzb21ldGltZXMgY29udGFpbnMgZ2FyYmFnZSAqLworCQkJc3dpdGNoIChzZW5kLT5zX3dyLm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9TRU5EOgorCQkJCWlmIChzZW5kLT5zX3JtKQorCQkJCQlyZHNfaWJfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgd2Muc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSAtIHRoZSBTRyBsaXN0IHdpbGwgYmUgdW5tYXBwZWQKKwkJCQkgKiB3aGVuIHRoZSBTRU5EIGNvbXBsZXRlcy4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCQkiUkRTL0lCOiAlczogdW5leHBlY3RlZCBvcGNvZGUgMHgleCBpbiBXUiFcbiIsCisJCQkJCQlfX2Z1bmNfXywgc2VuZC0+c193ci5vcGNvZGUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IDB4ZGVhZDsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlpZiAoc2VuZC0+c19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc3RhbGxlZCk7CisKKwkJCS8qIElmIGEgUkRNQSBvcGVyYXRpb24gcHJvZHVjZWQgYW4gZXJyb3IsIHNpZ25hbCB0aGlzIHJpZ2h0CisJCQkgKiBhd2F5LiBJZiB3ZSBkb24ndCwgdGhlIHN1YnNlcXVlbnQgU0VORCB0aGF0IGdvZXMgd2l0aCB0aGlzCisJCQkgKiBSRE1BIHdpbGwgYmUgY2FuY2VsZWQgd2l0aCBFUlJfV0ZMVVNILCBhbmQgdGhlIGFwcGxpY2F0aW9uCisJCQkgKiBuZXZlciBsZWFybiB0aGF0IHRoZSBSRE1BIGZhaWxlZC4gKi8KKwkJCWlmICh1bmxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfUkVNX0FDQ0VTU19FUlIgJiYgc2VuZC0+c19vcCkpIHsKKwkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJCQkJcm0gPSByZHNfc2VuZF9nZXRfbWVzc2FnZShjb25uLCBzZW5kLT5zX29wKTsKKwkJCQlpZiAocm0pCisJCQkJCXJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjLnN0YXR1cyk7CisJCQl9CisKKwkJCW9sZGVzdCA9IChvbGRlc3QgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCQl9CisKKwkJcmRzX2liX3JpbmdfZnJlZSgmaWMtPmlfc2VuZF9yaW5nLCBjb21wbGV0ZWQpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpCisJCSB8fCB0ZXN0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTICYmIHJkc19jb25uX3VwKGNvbm4pKSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLAorCQkJCSJzZW5kIGNvbXBsZXRpb24gb24gJXBJNCAiCisJCQkJImhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCQkmY29ubi0+Y19mYWRkciwgd2Muc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgY3JlZGl0cyB3aGVuIHNlbmRpbmcKKyAqIG1lc3NhZ2VzLgorICoKKyAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CisgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KKyAqCisgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKKyAqCXBvc3RlZCB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4gVGhpcyB2YWx1ZSBpcyB0cmFuc2ZlcnJlZAorICoJdG8gdGhlIHBlZXIgYXMgYSAiY3JlZGl0IHVwZGF0ZSIgaW4gYSBSRFMgaGVhZGVyIGZpZWxkLgorICoJRXZlcnkgdGltZSB3ZSB0cmFuc21pdCBjcmVkaXRzIHRvIHRoZSBwZWVyLCB3ZSBzdWJ0cmFjdAorICoJdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBjcmVkaXRzIGZyb20gdGhpcyBjb3VudGVyLgorICoKKyAqIEl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgYm90aCBzaWRlcyBoYXZlCisgKiBleGhhdXN0ZWQgdGhlaXIgc2VuZCBjcmVkaXRzLCBhbmQgYXJlIHVuYWJsZSB0byBzZW5kIG5ldyBjcmVkaXRzCisgKiB0byB0aGUgcGVlci4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHJlcXVpcmluZyB0aGF0IHdlIHNlbmQgYXQgbGVhc3QKKyAqIG9uZSBjcmVkaXQgdXBkYXRlIHRvIHRoZSBwZWVyIGJlZm9yZSBleGhhdXN0aW5nIG91ciBjcmVkaXRzLgorICogV2hlbiBuZXcgY3JlZGl0cyBhcnJpdmUsIHdlIHN1YnRyYWN0IG9uZSBjcmVkaXQgdGhhdCBpcyB3aXRoaGVsZAorICogdW50aWwgd2UndmUgcG9zdGVkIG5ldyBidWZmZXJzIGFuZCBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlc2UKKyAqIGNyZWRpdHMgKHNlZSByZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyBiZWxvdykuCisgKgorICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0CisgKiBncmFicyBjX3NlbmRfbG9jayB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLgorICogSG93ZXZlciwgdGhlIEFDSyBzZW5kaW5nIGNvZGUgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbiByYWNlIHdpdGgKKyAqIG1lc3NhZ2UgU0VORHMuCisgKgorICogSW4gdGhlIHNlbmQgcGF0aCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGZvciBzZW5kIGNyZWRpdHMKKyAqIGFuZCB0aGUgY291bnRlciBvZiBwb3N0ZWQgYnVmZmVycyBhdG9taWNhbGx5IC0gd2hlbiB3ZSB1c2UgdGhlCisgKiBsYXN0IGF2YWlsYWJsZSBjcmVkaXQsIHdlIGNhbm5vdCBhbGxvdyBhbm90aGVyIHRocmVhZCB0byByYWNlIHVzCisgKiBhbmQgZ3JhYiB0aGUgcG9zdGVkIGNyZWRpdHMgY291bnRlci4gIEhlbmNlLCB3ZSBoYXZlIHRvIHVzZSBhCisgKiBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcmVkaXQgY291bnRlciwgb3IgdXNlIGF0b21pY3MuCisgKgorICogU3BpbmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGFyZSBiYWQsCisgKiBiZWNhdXNlIHRoZXkgY3JlYXRlIHVubmVjZXNzYXJ5IGRlbGF5cy4gQW4gZWFybHkgaW1wbGVtZW50YXRpb24KKyAqIHVzaW5nIGEgc3BpbmxvY2sgc2hvd2VkIGEgNSUgZGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBhdCBzb21lCisgKiBsb2Fkcy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBzcGlubG9ja3MgY29tcGxldGVseSwgcHV0dGluZyBib3RoCisgKiBjb3VudGVycyBpbnRvIGEgc2luZ2xlIGF0b21pYywgYW5kIHVwZGF0aW5nIHRoYXQgYXRvbWljIHVzaW5nCisgKiBhdG9taWNfYWRkIChpbiB0aGUgcmVjZWl2ZSBwYXRoLCB3aGVuIHJlY2VpdmluZyBmcmVzaCBjcmVkaXRzKSwKKyAqIGFuZCB1c2luZyBhdG9taWNfY21weGNoZyB3aGVuIHVwZGF0aW5nIHRoZSB0d28gY291bnRlcnMuCisgKi8KK2ludCByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCSAgICAgdTMyIHdhbnRlZCwgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKQoreworCXVuc2lnbmVkIGludCBhdmFpbCwgcG9zdGVkLCBnb3QgPSAwLCBhZHZlcnRpc2U7CisJbG9uZyBvbGR2YWwsIG5ld3ZhbDsKKworCSphZHZfY3JlZGl0cyA9IDA7CisJaWYgKCFpYy0+aV9mbG93Y3RsKQorCQlyZXR1cm4gd2FudGVkOworCit0cnlfYWdhaW46CisJYWR2ZXJ0aXNlID0gMDsKKwlvbGR2YWwgPSBuZXd2YWwgPSBhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cyk7CisJcG9zdGVkID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhvbGR2YWwpOworCWF2YWlsID0gSUJfR0VUX1NFTkRfQ1JFRElUUyhvbGR2YWwpOworCisJcmRzZGVidWcoInJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cygldSk6IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAorCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKKworCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCisJaWYgKGF2YWlsICYmICFwb3N0ZWQpCisJCWF2YWlsLS07CisKKwlpZiAoYXZhaWwgPCB3YW50ZWQpIHsKKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtPmlfY21faWQtPmNvbnRleHQ7CisKKwkJLyogT29wcywgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBjcmVkaXRzIGxlZnQhICovCisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlnb3QgPSBhdmFpbDsKKwl9IGVsc2UgeworCQkvKiBTb21ldGltZXMgeW91IGdldCB3aGF0IHlvdSB3YW50LCBsYWxhbGEuICovCisJCWdvdCA9IHdhbnRlZDsKKwl9CisJbmV3dmFsIC09IElCX1NFVF9TRU5EX0NSRURJVFMoZ290KTsKKworCS8qCisJICogSWYgbmVlZF9wb3N0ZWQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGNhbGxlciB3YW50cworCSAqIHRoZSBwb3N0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBzZW5kIGNyZWRpdHMgYXJlCisJICogYXZhaWxhYmxlLgorCSAqLworCWlmIChwb3N0ZWQgJiYgKGdvdCB8fCBuZWVkX3Bvc3RlZCkpIHsKKwkJYWR2ZXJ0aXNlID0gbWluX3QodW5zaWduZWQgaW50LCBwb3N0ZWQsIFJEU19NQVhfQURWX0NSRURJVCk7CisJCW5ld3ZhbCAtPSBJQl9TRVRfUE9TVF9DUkVESVRTKGFkdmVydGlzZSk7CisJfQorCisJLyogRmluYWxseSBiaWxsIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoYXRvbWljX2NtcHhjaGcoJmljLT5pX2NyZWRpdHMsIG9sZHZhbCwgbmV3dmFsKSAhPSBvbGR2YWwpCisJCWdvdG8gdHJ5X2FnYWluOworCisJKmFkdl9jcmVkaXRzID0gYWR2ZXJ0aXNlOworCXJldHVybiBnb3Q7Cit9CisKK3ZvaWQgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChjcmVkaXRzID09IDApCisJCXJldHVybjsKKworCXJkc2RlYnVnKCJyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cygldSk6IGN1cnJlbnQ9JXUlc1xuIiwKKwkJCWNyZWRpdHMsCisJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCisJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOworCisJYXRvbWljX2FkZChJQl9TRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwlXQVJOX09OKElCX0dFVF9TRU5EX0NSRURJVFMoY3JlZGl0cykgPj0gMTYzODQpOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NyZWRpdF91cGRhdGVzKTsKK30KKwordm9pZCByZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHBvc3RlZCA9PSAwKQorCQlyZXR1cm47CisKKwlhdG9taWNfYWRkKElCX1NFVF9QT1NUX0NSRURJVFMocG9zdGVkKSwgJmljLT5pX2NyZWRpdHMpOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIHBlZXIgbm93LgorCSAqIElmIHdlIHdvdWxkIHNlbmQgYSBjcmVkaXQgdXBkYXRlIGZvciBldmVyeSBzaW5nbGUgYnVmZmVyIHdlCisJICogcG9zdCwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gQUNLIHN0b3JtIChBQ0sgYXJyaXZlcywKKwkgKiBjb25zdW1lcyBidWZmZXIsIHdlIHJlZmlsbCB0aGUgcmluZywgc2VuZCBBQ0sgdG8gcmVtb3RlCisJICogYWR2ZXJ0aXNpbmcgdGhlIG5ld2x5IHBvc3RlZCBidWZmZXIuLi4gYWQgaW5mKQorCSAqCisJICogUGVyZm9ybWFuY2UgcHJldHR5IG11Y2ggZGVwZW5kcyBvbiBob3cgb2Z0ZW4gd2Ugc2VuZAorCSAqIGNyZWRpdCB1cGRhdGVzIC0gdG9vIGZyZXF1ZW50IHVwZGF0ZXMgbWVhbiBsb3RzIG9mIEFDS3MuCisJICogVG9vIGluZnJlcXVlbnQgdXBkYXRlcywgYW5kIHRoZSBwZWVyIHdpbGwgcnVuIG91dCBvZgorCSAqIGNyZWRpdHMgYW5kIGhhcyB0byB0aHJvdHRsZS4KKwkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIDE2IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorCSAqLworCWlmIChJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSkgPj0gMTYpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmRzX2liX3htaXRfcG9wdWxhdGVfd3Ioc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGxvbmcgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQlpbnQgc2VuZF9mbGFncykKK3sKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwlXQVJOX09OKHBvcyAhPSBzZW5kIC0gaWMtPmlfc2VuZHMpOworCisJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gc2VuZF9mbGFnczsKKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJc2VuZC0+c193ci5udW1fc2dlID0gMjsKKwlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwlzZW5kLT5zX29wID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gMCkgeworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gYnVmZmVyOworCQlzZ2UtPmxlbmd0aCA9IGxlbmd0aDsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwl9IGVsc2UgeworCQkvKiBXZSdyZSBzZW5kaW5nIGEgcGFja2V0IHdpdGggbm8gcGF5bG9hZC4gVGhlcmUgaXMgb25seQorCQkgKiBvbmUgU0dFICovCisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNnZSA9ICZzZW5kLT5zX3NnZVswXTsKKwl9CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKHBvcyAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKK30KKworLyoKKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBtZXNzYWdlLiAgVGhlIGZpcnN0IHRpbWUKKyAqIHdlIHNlZSBhIG1lc3NhZ2Ugd2UgbWFwIGl0cyBzY2F0dGVybGlzdCBpbnRvIHRoZSBJQiBkZXZpY2Ugc28gdGhhdAorICogd2UgY2FuIHByb3ZpZGUgdGhhdCBtYXBwZWQgYWRkcmVzcyB0byB0aGUgSUIgc2NhdHRlciBnYXRoZXIgZW50cmllcworICogaW4gdGhlIElCIHdvcmsgcmVxdWVzdHMuICBXZSB0cmFuc2xhdGUgdGhlIHNjYXR0ZXJsaXN0IGludG8gYSBzZXJpZXMKKyAqIG9mIHdvcmsgcmVxdWVzdHMgdGhhdCBmcmFnbWVudCB0aGUgbWVzc2FnZS4gIFRoZXNlIHdvcmsgcmVxdWVzdHMgY29tcGxldGUKKyAqIGluIG9yZGVyIHNvIHdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIG9uY2Ugd2Ugc2VuZCB0aGUgZmluYWwgZnJhZ21lbnQuCisgKgorICogVGhlIFJEUyBjb3JlIHVzZXMgdGhlIGNfc2VuZF9sb2NrIHRvIG9ubHkgZW50ZXIgdGhpcyBmdW5jdGlvbiBvbmNlCisgKiBwZXIgY29ubmVjdGlvbi4gIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB0eCByaW5nIGFsbG9jL3VuYWxsb2MgcGFpcnMKKyAqIGRvbid0IGdldCBvdXQgb2Ygc3luYyBhbmQgY29uZnVzZSB0aGUgcmluZy4KKyAqLworaW50IHJkc19pYl94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdTMyIHBvczsKKwl1MzIgaTsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgY3JlZGl0X2FsbG9jOworCXUzMiBwb3N0ZWQ7CisJdTMyIGFkdl9jcmVkaXRzID0gMDsKKwlpbnQgc2VuZF9mbGFncyA9IDA7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgZmxvd19jb250cm9sbGVkID0gMDsKKworCUJVR19PTihvZmYgJSBSRFNfRlJBR19TSVpFKTsKKwlCVUdfT04oaGRyX29mZiAhPSAwICYmIGhkcl9vZmYgIT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkvKiBGSVhNRSB3ZSBtYXkgb3ZlcmFsbG9jYXRlIGhlcmUgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKQorCQlpID0gMTsKKwllbHNlCisJCWkgPSBjZWlsKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbiksIFJEU19GUkFHX1NJWkUpOworCisJd29ya19hbGxvYyA9IHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRfYWxsb2MgPSB3b3JrX2FsbG9jOworCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCWNyZWRpdF9hbGxvYyA9IHJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgd29ya19hbGxvYywgJnBvc3RlZCwgMCk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJaWYgKGNyZWRpdF9hbGxvYyA8IHdvcmtfYWxsb2MpIHsKKwkJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGNyZWRpdF9hbGxvYyk7CisJCQl3b3JrX2FsbG9jID0gY3JlZGl0X2FsbG9jOworCQkJZmxvd19jb250cm9sbGVkKys7CisJCX0KKwkJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF90aHJvdHRsZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKGljLT5pX3JtID09IE5VTEwpIHsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyZHNfaWJfeG1pdCBwcmVwIG1zZyBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCksCisJCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSk7CisJCSAgICovCisJCWlmIChybS0+bV9uZW50cykgeworCQkJcm0tPm1fY291bnQgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJIHJtLT5tX3NnLCBybS0+bV9uZW50cywgRE1BX1RPX0RFVklDRSk7CisJCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBybSAlcDogJWRcbiIsIGljLCBybSwgcm0tPm1fY291bnQpOworCQkJaWYgKHJtLT5tX2NvdW50ID09IDApIHsKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlybS0+bV9jb3VudCA9IDA7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlpYy0+aV9ybSA9IHJtOworCisJCS8qIEZpbmFsaXplIHRoZSBoZWFkZXIgKi8KKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfQUNLX1JFUVVJUkVEOworCQlpZiAodGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfUkVUUkFOU01JVFRFRDsKKworCQkvKiBJZiBpdCBoYXMgYSBSRE1BIG9wLCB0ZWxsIHRoZSBwZWVyIHdlIGRpZCBpdC4gVGhpcyBpcworCQkgKiB1c2VkIGJ5IHRoZSBwZWVyIHRvIHJlbGVhc2UgdXNlLW9uY2UgUkRNQSBNUnMuICovCisJCWlmIChybS0+bV9yZG1hX29wKSB7CisJCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSBleHRfaGRyOworCisJCQlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocm0tPm1fcmRtYV9vcC0+cl9rZXkpOworCQkJcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlSRFNfRVhUSERSX1JETUEsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworCQl9CisJCWlmIChybS0+bV9yZG1hX2Nvb2tpZSkgeworCQkJcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocm0tPm1fcmRtYV9jb29raWUpKTsKKwkJfQorCisJCS8qIE5vdGUgLSByZHNfaWJfcGlnZ3liX2FjayBjbGVhcnMgdGhlIEFDS19SRVFVSVJFRCBiaXQsIHNvCisJCSAqIHdlIHNob3VsZCBub3QgZG8gdGhpcyB1bmxlc3Mgd2UgaGF2ZSBhIGNoYW5jZSBvZiBhdCBsZWFzdAorCQkgKiBzdGlja2luZyB0aGUgaGVhZGVyIGludG8gdGhlIHNlbmQgcmluZy4gV2hpY2ggaXMgd2h5IHdlCisJCSAqIHNob3VsZCBjYWxsIHJkc19pYl9yaW5nX2FsbG9jIGZpcnN0LiAqLworCQlybS0+bV9pbmMuaV9oZHIuaF9hY2sgPSBjcHVfdG9fYmU2NChyZHNfaWJfcGlnZ3liX2FjayhpYykpOworCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKCZybS0+bV9pbmMuaV9oZHIpOworCisJCS8qCisJCSAqIFVwZGF0ZSBhZHZfY3JlZGl0cyBzaW5jZSB3ZSByZXNldCB0aGUgQUNLX1JFUVVJUkVEIGJpdC4KKwkJICovCisJCXJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgMCwgJnBvc3RlZCwgMSk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJQlVHX09OKGFkdl9jcmVkaXRzID4gMjU1KTsKKwl9IGVsc2UgaWYgKGljLT5pX3JtICE9IHJtKQorCQlCVUcoKTsKKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZybS0+bV9zZ1tzZ107CisJc2VudCA9IDA7CisJaSA9IDA7CisKKwkvKiBTb21ldGltZXMgeW91IHdhbnQgdG8gcHV0IGEgZmVuY2UgYmV0d2VlbiBhbiBSRE1BCisJICogUkVBRCBhbmQgdGhlIGZvbGxvd2luZyBTRU5ELgorCSAqIFdlIGNvdWxkIGVpdGhlciBkbyB0aGlzIGFsbCB0aGUgdGltZQorCSAqIG9yIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBSaWdodCBub3csIHdlIGxldAorCSAqIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2UuCisJICovCisJaWYgKHJtLT5tX3JkbWFfb3AgJiYgcm0tPm1fcmRtYV9vcC0+cl9mZW5jZSkKKwkJc2VuZF9mbGFncyA9IElCX1NFTkRfRkVOQ0U7CisKKwkvKgorCSAqIFdlIGNvdWxkIGJlIGNvcHlpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSB1bnVzZWQgdGFpbCBvZiB0aGUgcGFnZS4KKwkgKiBUaGF0IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhvc2UgcGFnZXMgbWlnaHQKKwkgKiBiZSBtYXBwZWQgdXNlcnNwYWNlIHBhZ2VzIG9yIHBhZ2UgY2FjaGUgcGFnZXMuICBTbyBpbnN0ZWFkIHdlIGFsd2F5cworCSAqIHVzZSBhIHNlY29uZCBzZ2UgYW5kIG91ciBsb25nLWxpdmVkIHJpbmcgb2YgbWFwcGVkIGhlYWRlcnMuICBXZSBzZW5kCisJICogdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkYXRhIHBheWxvYWQgY2FuIGJlIGFsaWduZWQgb24KKwkgKiB0aGUgcmVjZWl2ZXIuCisJICovCisKKwkvKiBoYW5kbGUgYSAwLWxlbiBtZXNzYWdlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkgeworCQlyZHNfaWJfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLCAwLCAwLCBzZW5kX2ZsYWdzKTsKKwkJZ290byBhZGRfaGVhZGVyOworCX0KKworCS8qIGlmIHRoZXJlJ3MgZGF0YSByZWZlcmVuY2UgaXQgd2l0aCBhIGNoYWluIG9mIHdvcmsgcmVxcyAqLworCWZvciAoOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZybS0+bV9zZ1tybS0+bV9jb3VudF07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKworCQlsZW4gPSBtaW4oUkRTX0ZSQUdfU0laRSwgaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpIC0gb2ZmKTsKKwkJcmRzX2liX3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsIHNjYXQpICsgb2ZmLCBsZW4sCisJCQkJc2VuZF9mbGFncyk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lCisJCSAqIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyAtPSBsZW47CisJCWlmIChpYy0+aV91bnNpZ25hbGVkX2J5dGVzIDw9IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgc2lnbmFsIHRoZSBsYXN0IG9uZSBpZiB3ZSdyZSBzdG9wcGluZyBkdWUgdG8gZmxvdyBjb250cm9sLgorCQkgKi8KKwkJaWYgKGZsb3dfY29udHJvbGxlZCAmJiBpID09ICh3b3JrX2FsbG9jLTEpKQorCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkgJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlzZW50ICs9IGxlbjsKKwkJb2ZmICs9IGxlbjsKKwkJaWYgKG9mZiA9PSBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkpIHsKKwkJCXNjYXQrKzsKKwkJCW9mZiA9IDA7CisJCX0KKworYWRkX2hlYWRlcjoKKwkJLyogVGFjayBvbiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhLiBUaGUgaGVhZGVyIFNHRSBzaG91bGQgYWxyZWFkeQorCQkgKiBoYXZlIGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSByaWdodCBoZWFkZXIgYnVmZmVyLiAqLworCQltZW1jcHkoJmljLT5pX3NlbmRfaGRyc1twb3NdLCAmcm0tPm1faW5jLmlfaGRyLCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCQlpZiAoMCkgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZW5kIFdSIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KGhkci0+aF9kcG9ydCksCisJCQkJaGRyLT5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KGhkci0+aF9sZW4pKTsKKwkJfQorCQlpZiAoYWR2X2NyZWRpdHMpIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCS8qIGFkZCBjcmVkaXQgYW5kIHJlZG8gdGhlIGhlYWRlciBjaGVja3N1bSAqLworCQkJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCQkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCQkJYWR2X2NyZWRpdHMgPSAwOworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X2NyZWRpdF91cGRhdGVzKTsKKwkJfQorCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisJCXByZXYgPSBzZW5kOworCisJCXBvcyA9IChwb3MgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCX0KKworCS8qIEFjY291bnQgdGhlIFJEUyBoZWFkZXIgaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBzZW50LCBidXQganVzdCBvbmNlLgorCSAqIFRoZSBjYWxsZXIgaGFzIG5vIGNvbmNlcHQgb2YgZnJhZ21lbnRhdGlvbi4gKi8KKwlpZiAoaGRyX29mZiA9PSAwKQorCQlzZW50ICs9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XSkgeworCQlwcmV2LT5zX3JtID0gaWMtPmlfcm07CisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBpIDwgY3JlZGl0X2FsbG9jKQorCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRfYWxsb2MgLSBpKTsKKworCS8qIFhYWCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZhaWxlZF93ciBhbmQgcGFydGlhbCBzZW5kcy4gKi8KKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJaWYgKHByZXYtPnNfcm0pIHsKKwkJCWljLT5pX3JtID0gcHJldi0+c19ybTsKKwkJCXByZXYtPnNfcm0gPSBOVUxMOworCQl9CisJCS8qIEZpbmVzc2UgdGhpcyBsYXRlciAqLworCQlCVUcoKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gc2VudDsKK291dDoKKwlCVUdfT04oYWR2X2NyZWRpdHMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfaWJfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTY0IHJlbW90ZV9hZGRyID0gb3AtPnJfcmVtb3RlX2FkZHI7CisJdTMyIHBvczsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgaTsKKwl1MzIgajsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBudW1fc2dlOworCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKworCS8qIG1hcCB0aGUgbWVzc2FnZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgaXQgKi8KKwlpZiAoIW9wLT5yX21hcHBlZCkgeworCQlvcC0+cl9jb3VudCA9IGliX2RtYV9tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLCAob3AtPnJfd3JpdGUpID8KKwkJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCXJkc2RlYnVnKCJpYyAlcCBtYXBwaW5nIG9wICVwOiAlZFxuIiwgaWMsIG9wLCBvcC0+cl9jb3VudCk7CisJCWlmIChvcC0+cl9jb3VudCA9PSAwKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9wLT5yX21hcHBlZCA9IDE7CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGtub3dpbmcgaG93IHRvIHJldHVybiBhIHBhcnRpYWwgcmRtYSByZWFkL3dyaXRlIHdlIGluc2lzdCB0aGF0IHRoZXJlCisJICogYmUgZW5vdWdoIHdvcmsgcmVxdWVzdHMgdG8gc2VuZCB0aGUgZW50aXJlIG1lc3NhZ2UuCisJICovCisJaSA9IGNlaWwob3AtPnJfY291bnQsIHJkc19pYmRldi0+bWF4X3NnZSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2liX3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgIT0gaSkgeworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWZpcnN0ID0gc2VuZDsKKwlwcmV2ID0gTlVMTDsKKwlzY2F0ID0gJm9wLT5yX3NnWzBdOworCXNlbnQgPSAwOworCW51bV9zZ2UgPSBvcC0+cl9jb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JrX2FsbG9jICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaSsrKSB7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQl9CisKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBvcC0+cl93cml0ZSA/IElCX1dSX1JETUFfV1JJVEUgOiBJQl9XUl9SRE1BX1JFQUQ7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5yZW1vdGVfYWRkciA9IHJlbW90ZV9hZGRyOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmtleSA9IG9wLT5yX2tleTsKKwkJc2VuZC0+c19vcCA9IG9wOworCisJCWlmIChudW1fc2dlID4gcmRzX2liZGV2LT5tYXhfc2dlKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCQludW1fc2dlIC09IHJkc19pYmRldi0+bWF4X3NnZTsKKwkJfSBlbHNlIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IG51bV9zZ2U7CisJCX0KKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisKKwkJZm9yIChqID0gMDsgaiA8IHNlbmQtPnNfd3IubnVtX3NnZSAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGorKykgeworCQkJbGVuID0gaWJfc2dfZG1hX2xlbihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCXNlbmQtPnNfc2dlW2pdLmFkZHIgPQorCQkJCSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCXNlbmQtPnNfc2dlW2pdLmxlbmd0aCA9IGxlbjsKKwkJCXNlbmQtPnNfc2dlW2pdLmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQkJc2VudCArPSBsZW47CisJCQlyZHNkZWJ1ZygiaWMgJXAgc2VudCAlZCByZW1vdGVfYWRkciAlbGx1XG4iLCBpYywgc2VudCwgcmVtb3RlX2FkZHIpOworCisJCQlyZW1vdGVfYWRkciArPSBsZW47CisJCQlzY2F0Kys7CisJCX0KKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXByZXYgPSBzZW5kOworCQlpZiAoKytzZW5kID09ICZpYy0+aV9zZW5kc1tpYy0+aV9zZW5kX3Jpbmcud19ucl0pCisJCQlzZW5kID0gaWMtPmlfc2VuZHM7CisJfQorCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF0pCisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiByZG1hIGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseShmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3Bvc3Rfc2VuZCgpIHJjPSVkLCBidXQgZmFpbGVkX3dxZSB1cGRhdGVkIVxuIiwgcmV0KTsKKwkJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCX0KKworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBXZSBtYXkgaGF2ZSBhIHBlbmRpbmcgQUNLIG9yIHdpbmRvdyB1cGRhdGUgd2Ugd2VyZSB1bmFibGUKKwkgKiB0byBzZW5kIHByZXZpb3VzbHkgKGR1ZSB0byBmbG93IGNvbnRyb2wpLiBUcnkgYWdhaW4uICovCisJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3RhdHMuYyBiL25ldC9yZHMvaWJfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmUzZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zdGF0cy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzLCByZHNfaWJfc3RhdHMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGNoYXIgKnJkc19pYl9zdGF0X25hbWVzW10gPSB7CisJImliX2Nvbm5lY3RfcmFjZWQiLAorCSJpYl9saXN0ZW5fY2xvc2VkX3N0YWxlIiwKKwkiaWJfdHhfY3FfY2FsbCIsCisJImliX3R4X2NxX2V2ZW50IiwKKwkiaWJfdHhfcmluZ19mdWxsIiwKKwkiaWJfdHhfdGhyb3R0bGUiLAorCSJpYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmUiLAorCSJpYl90eF9zdGFsbGVkIiwKKwkiaWJfdHhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpYl9yeF9jcV9jYWxsIiwKKwkiaWJfcnhfY3FfZXZlbnQiLAorCSJpYl9yeF9yaW5nX2VtcHR5IiwKKwkiaWJfcnhfcmVmaWxsX2Zyb21fY3EiLAorCSJpYl9yeF9yZWZpbGxfZnJvbV90aHJlYWQiLAorCSJpYl9yeF9hbGxvY19saW1pdCIsCisJImliX3J4X2NyZWRpdF91cGRhdGVzIiwKKwkiaWJfYWNrX3NlbnQiLAorCSJpYl9hY2tfc2VuZF9mYWlsdXJlIiwKKwkiaWJfYWNrX3NlbmRfZGVsYXllZCIsCisJImliX2Fja19zZW5kX3BpZ2d5YmFja2VkIiwKKwkiaWJfYWNrX3JlY2VpdmVkIiwKKwkiaWJfcmRtYV9tcl9hbGxvYyIsCisJImliX3JkbWFfbXJfZnJlZSIsCisJImliX3JkbWFfbXJfdXNlZCIsCisJImliX3JkbWFfbXJfcG9vbF9mbHVzaCIsCisJImliX3JkbWFfbXJfcG9vbF93YWl0IiwKKwkiaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfaWJfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfaWJfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcykpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19pYl9zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX2liX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcykpOworb3V0OgorCXJldHVybiBBUlJBWV9TSVpFKHJkc19pYl9zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3lzY3RsLmMgYi9uZXQvcmRzL2liX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzgzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3N5c2N0bC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19pYl9zeXNjdGxfaGRyOworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IgPSBSRFNfSUJfREVGQVVMVF9TRU5EX1dSOwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyID0gUkRTX0lCX0RFRkFVTFRfUkVDVl9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gKDEyOCAqIDEwMjQgKiAxMDI0KSAvIFJEU19GUkFHX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF93cl9taW4gPSAxOworLyogaGFyZHdhcmUgd2lsbCBmYWlsIENRIGNyZWF0aW9uIGxvbmcgYmVmb3JlIHRoaXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3dyX21heCA9ICh1MzIpfjA7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzID0gMTY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMgPSAoMTYgPDwgMjApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisKK2N0bF90YWJsZSByZHNfaWJfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9zZW5kX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dycywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X2FsbG9jYXRpb24iLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImZsb3dfY29udHJvbCIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCwKKwkJLm1heGxlbgkJPSBzaXplb2YocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19pYl9zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyAucHJvY25hbWUgPSAiaWIiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3ZvaWQgcmRzX2liX3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19pYl9zeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfaWJfc3lzY3RsX2hkcik7Cit9CisKK2ludCBfX2luaXQgcmRzX2liX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX2liX3N5c2N0bF9oZHIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX2liX3N5c2N0bF9wYXRoLCByZHNfaWJfc3lzY3RsX3RhYmxlKTsKKwlpZiAocmRzX2liX3N5c2N0bF9oZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2luZm8uYyBiL25ldC9yZHMvaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODg1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2luZm8uYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgZ2V0c29ja29wdCgpIGNhbGwgd2hpY2ggY29waWVzIGEgc2V0IG9mIGZpeGVkCisgKiBzaXplZCBzdHJ1Y3RzIGludG8gYSB1c2VyLXNwZWNpZmllZCBidWZmZXIgYXMgYSBtZWFucyBvZiBwcm92aWRpbmcKKyAqIHJlYWQtb25seSBpbmZvcm1hdGlvbiBhYm91dCBSRFMuCisgKgorICogRm9yIGEgZ2l2ZW4gaW5mb3JtYXRpb24gc291cmNlIHRoZXJlIGFyZSBhIGdpdmVuIG51bWJlciBvZiBmaXhlZCBzaXplZAorICogc3RydWN0cyBhdCBhIGdpdmVuIHRpbWUuICBUaGUgc3RydWN0cyBhcmUgb25seSBjb3BpZWQgaWYgdGhlIHVzZXItc3BlY2lmaWVkCisgKiBidWZmZXIgaXMgYmlnIGVub3VnaC4gIFRoZSBkZXN0aW5hdGlvbiBwYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGJ1ZmZlcgorICogYXJlIHBpbm5lZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5LgorICoKKyAqIFRoaXMgZ2l2ZXMgdXMgdGhlIGZvbGxvd2luZyBiZW5lZml0czoKKyAqCisgKiAtIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiwgbm8gY29weSAicG9zaXRpb24iIGFjcm9zcyBtdWx0aXBsZSBjYWxscworICogLSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIGFuIGluZm8gc291cmNlCisgKiAtIGF0b21pYyBjb3B5IHdvcmtzIHdlbGwgd2l0aCB3aGF0ZXZlciBsb2NraW5nIGluZm8gc291cmNlIGhhcworICogLSBvbmUgcG9ydGFibGUgdG9vbCB0byBnZXQgcmRzIGluZm8gYWNyb3NzIGltcGxlbWVudGF0aW9ucworICogLSBsb25nLWxpdmVkIHRvb2wgY2FuIGdldCBpbmZvIHdpdGhvdXQgYWxsb2NhdGluZworICoKKyAqIGF0IHRoZSBmb2xsb3dpbmcgY29zdHM6CisgKgorICogLSBpbmZvIHNvdXJjZSBjb3B5IG11c3QgYmUgcGlubmVkLCBtYXkgYmUgImxhcmdlIgorICovCisKK3N0cnVjdCByZHNfaW5mb19pdGVyYXRvciB7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICphZGRyOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfaW5mb19sb2NrKTsKK3N0YXRpYyByZHNfaW5mb19mdW5jIHJkc19pbmZvX2Z1bmNzW1JEU19JTkZPX0xBU1QgLSBSRFNfSU5GT19GSVJTVCArIDFdOworCit2b2lkIHJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKK3sKKwlpbnQgb2Zmc2V0ID0gb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUOworCisJQlVHX09OKG9wdG5hbWUgPCBSRFNfSU5GT19GSVJTVCB8fCBvcHRuYW1lID4gUkRTX0lORk9fTEFTVCk7CisKKwlzcGluX2xvY2soJnJkc19pbmZvX2xvY2spOworCUJVR19PTihyZHNfaW5mb19mdW5jc1tvZmZzZXRdICE9IE5VTEwpOworCXJkc19pbmZvX2Z1bmNzW29mZnNldF0gPSBmdW5jOworCXNwaW5fdW5sb2NrKCZyZHNfaW5mb19sb2NrKTsKK30KKwordm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKK3sKKwlpbnQgb2Zmc2V0ID0gb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUOworCisJQlVHX09OKG9wdG5hbWUgPCBSRFNfSU5GT19GSVJTVCB8fCBvcHRuYW1lID4gUkRTX0lORk9fTEFTVCk7CisKKwlzcGluX2xvY2soJnJkc19pbmZvX2xvY2spOworCUJVR19PTihyZHNfaW5mb19mdW5jc1tvZmZzZXRdICE9IGZ1bmMpOworCXJkc19pbmZvX2Z1bmNzW29mZnNldF0gPSBOVUxMOworCXNwaW5fdW5sb2NrKCZyZHNfaW5mb19sb2NrKTsKK30KKworLyoKKyAqIFR5cGljYWxseSB3ZSBob2xkIGFuIGF0b21pYyBrbWFwIGFjcm9zcyBtdWx0aXBsZSByZHNfaW5mb19jb3B5KCkgY2FsbHMKKyAqIGJlY2F1c2UgdGhlIGttYXAgaXMgc28gZXhwZW5zaXZlLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYmxvY2tpbmcKKyAqIG9wZXJhdGlvbnMgd2hpbGUgaG9sZGluZyB0aGUgbWFwcGluZyBhbmQgYXMgdGhlIGl0ZXJhdG9yIGlzIHRvcm4gZG93bi4KKyAqLwordm9pZCByZHNfaW5mb19pdGVyX3VubWFwKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlcikKK3sKKwlpZiAoaXRlci0+YWRkciAhPSBOVUxMKSB7CisJCWt1bm1hcF9hdG9taWMoaXRlci0+YWRkciwgS01fVVNFUjApOworCQlpdGVyLT5hZGRyID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBnZXRfdXNlcl9wYWdlcygpIGNhbGxlZCBmbHVzaF9kY2FjaGVfcGFnZSgpIG9uIHRoZSBwYWdlcyBmb3IgdXMuCisgKi8KK3ZvaWQgcmRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsIHZvaWQgKmRhdGEsCisJCSAgIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJdW5zaWduZWQgbG9uZyB0aGlzOworCisJd2hpbGUgKGJ5dGVzKSB7CisJCWlmIChpdGVyLT5hZGRyID09IE5VTEwpCisJCQlpdGVyLT5hZGRyID0ga21hcF9hdG9taWMoKml0ZXItPnBhZ2VzLCBLTV9VU0VSMCk7CisKKwkJdGhpcyA9IG1pbihieXRlcywgUEFHRV9TSVpFIC0gaXRlci0+b2Zmc2V0KTsKKworCQlyZHNkZWJ1ZygicGFnZSAlcCBhZGRyICVwIG9mZnNldCAlbHUgdGhpcyAlbHUgZGF0YSAlcCAiCisJCQkgICJieXRlcyAlbHVcbiIsICppdGVyLT5wYWdlcywgaXRlci0+YWRkciwKKwkJCSAgaXRlci0+b2Zmc2V0LCB0aGlzLCBkYXRhLCBieXRlcyk7CisKKwkJbWVtY3B5KGl0ZXItPmFkZHIgKyBpdGVyLT5vZmZzZXQsIGRhdGEsIHRoaXMpOworCisJCWRhdGEgKz0gdGhpczsKKwkJYnl0ZXMgLT0gdGhpczsKKwkJaXRlci0+b2Zmc2V0ICs9IHRoaXM7CisKKwkJaWYgKGl0ZXItPm9mZnNldCA9PSBQQUdFX1NJWkUpIHsKKwkJCWt1bm1hcF9hdG9taWMoaXRlci0+YWRkciwgS01fVVNFUjApOworCQkJaXRlci0+YWRkciA9IE5VTEw7CisJCQlpdGVyLT5vZmZzZXQgPSAwOworCQkJaXRlci0+cGFnZXMrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIEBvcHR2YWwgcG9pbnRzIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIHRoYXQgdGhlIGluZm9ybWF0aW9uIHNuYXBzaG90CisgKiB3aWxsIGJlIGNvcGllZCBpbnRvLgorICoKKyAqIEBvcHRsZW4gb24gaW5wdXQgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiB1c2Vyc3BhY2UuICBAb3B0bGVuCisgKiBvbiBvdXRwdXQgaXMgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3RlZCBzbmFwc2hvdCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLWVycm5vIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSwgcGFydGljdWxhcmx5IC1FTk9TUEMKKyAqIGlmIHRoZSBnaXZlbiB1c2Vyc3BhY2UgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGZpdCB0aGUgc25hcHNob3QuCisgKiBPbiBzdWNjZXNzIGl0IHJldHVybnMgdGhlIHBvc2l0aXZlIG51bWJlciBvZiBieXRlcyBvZiBlYWNoIGFycmF5IGVsZW1lbnQKKyAqIGluIHRoZSBzbmFwc2hvdC4KKyAqLworaW50IHJkc19pbmZvX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQlpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yIGl0ZXI7CisJc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgbGVuczsKKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgaTsKKwlyZHNfaW5mb19mdW5jIGZ1bmM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgbGVuOworCWludCB0b3RhbDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgZm9yIGFsbCBraW5kcyBvZiB3cmFwcGluZyBhbmQgdGhlIGxpa2UgKi8KKwlzdGFydCA9ICh1bnNpZ25lZCBsb25nKW9wdHZhbDsKKwlpZiAobGVuIDwgMCB8fCBsZW4gKyBQQUdFX1NJWkUgLSAxIDwgbGVuIHx8IHN0YXJ0ICsgbGVuIDwgc3RhcnQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogYSAwIGxlbiBjYWxsIGlzIGp1c3QgdHJ5aW5nIHRvIHByb2JlIGl0cyBsZW5ndGggKi8KKwlpZiAobGVuID09IDApCisJCWdvdG8gY2FsbF9mdW5jOworCisJbnJfcGFnZXMgPSAoUEFHRV9BTElHTihzdGFydCArIGxlbikgLSAoc3RhcnQgJiBQQUdFX01BU0spKQorCQkJPj4gUEFHRV9TSElGVDsKKworCXBhZ2VzID0ga21hbGxvYyhucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgc3RhcnQsIG5yX3BhZ2VzLCAxLCAwLAorCQkJICAgICBwYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAocmV0ICE9IG5yX3BhZ2VzKSB7CisJCWlmIChyZXQgPiAwKQorCQkJbnJfcGFnZXMgPSByZXQ7CisJCWVsc2UKKwkJCW5yX3BhZ2VzID0gMDsKKwkJcmV0ID0gLUVBR0FJTjsgLyogWFhYID8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImxlbiAlZCBucl9wYWdlcyAlbHVcbiIsIGxlbiwgbnJfcGFnZXMpOworCitjYWxsX2Z1bmM6CisJZnVuYyA9IHJkc19pbmZvX2Z1bmNzW29wdG5hbWUgLSBSRFNfSU5GT19GSVJTVF07CisJaWYgKGZ1bmMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCWdvdG8gb3V0OworCX0KKworCWl0ZXIucGFnZXMgPSBwYWdlczsKKwlpdGVyLmFkZHIgPSBOVUxMOworCWl0ZXIub2Zmc2V0ID0gc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSk7CisKKwlmdW5jKHNvY2ssIGxlbiwgJml0ZXIsICZsZW5zKTsKKwlCVUdfT04obGVucy5lYWNoID09IDApOworCisJdG90YWwgPSBsZW5zLm5yICogbGVucy5lYWNoOworCisJcmRzX2luZm9faXRlcl91bm1hcCgmaXRlcik7CisKKwlpZiAodG90YWwgPiBsZW4pIHsKKwkJbGVuID0gdG90YWw7CisJCXJldCA9IC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJbGVuID0gdG90YWw7CisJCXJldCA9IGxlbnMuZWFjaDsKKwl9CisKKwlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXQ6CisJZm9yIChpID0gMDsgcGFnZXMgIT0gTlVMTCAmJiBpIDwgbnJfcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHBhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2luZm8uaCBiL25ldC9yZHMvaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzA1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2luZm8uaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9SRFNfSU5GT19ICisjZGVmaW5lIF9SRFNfSU5GT19ICisKK3N0cnVjdCByZHNfaW5mb19sZW5ndGhzIHsKKwl1bnNpZ25lZCBpbnQJbnI7CisJdW5zaWduZWQgaW50CWVhY2g7Cit9OworCitzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3I7CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBmaWxsIGluIHRoZSBmaWVsZHMgb2YgQGxlbnMgdG8gcmVmbGVjdCB0aGUgc2l6ZQorICogb2YgdGhlIGF2YWlsYWJsZSBpbmZvIHNvdXJjZS4gIElmIHRoZSBzbmFwc2hvdCBmaXRzIGluIEBsZW4gdGhlbiBpdAorICogc2hvdWxkIGJlIGNvcGllZCB1c2luZyBAaXRlci4gIFRoZSBjYWxsZXIgd2lsbCBkZWR1Y2UgaWYgaXQgd2FzIGNvcGllZAorICogb3Igbm90IGJ5IGNvbXBhcmluZyB0aGUgbGVuZ3Rocy4KKyAqLwordHlwZWRlZiB2b2lkICgqcmRzX2luZm9fZnVuYykoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKTsKKwordm9pZCByZHNfaW5mb19yZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpOwordm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYyk7CitpbnQgcmRzX2luZm9fZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCWludCBfX3VzZXIgKm9wdGxlbik7Cit2b2lkIHJkc19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLCB2b2lkICpkYXRhLAorCQkgICB1bnNpZ25lZCBsb25nIGJ5dGVzKTsKK3ZvaWQgcmRzX2luZm9faXRlcl91bm1hcChzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5jIGIvbmV0L3Jkcy9pdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTY5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3LmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK3Vuc2lnbmVkIGludCBmYXN0cmVnX3Bvb2xfc2l6ZSA9IFJEU19GQVNUUkVHX1BPT0xfU0laRTsKK3Vuc2lnbmVkIGludCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSA9IFJEU19GQVNUUkVHX1NJWkUgKyAxOyAvKiArMSBhbGxvd3MgZm9yIHVuYWxpZ25lZCBNUnMgKi8KKworbW9kdWxlX3BhcmFtKGZhc3RyZWdfcG9vbF9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmYXN0cmVnX3Bvb2xfc2l6ZSwgIiBNYXggbnVtYmVyIG9mIGZhc3RyZWcgTVJzIHBlciBkZXZpY2UiKTsKK21vZHVsZV9wYXJhbShmYXN0cmVnX21lc3NhZ2Vfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdHJlZ19tZXNzYWdlX3NpemUsICIgTWF4IHNpemUgb2YgYSBSRE1BIHRyYW5zZmVyIChmYXN0cmVnIE1ScykiKTsKKworc3RydWN0IGxpc3RfaGVhZCByZHNfaXdfZGV2aWNlczsKKworREVGSU5FX1NQSU5MT0NLKGl3X25vZGV2X2Nvbm5zX2xvY2spOworTElTVF9IRUFEKGl3X25vZGV2X2Nvbm5zKTsKKwordm9pZCByZHNfaXdfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldl9hdHRyOworCisJLyogT25seSBoYW5kbGUgaXdhcnAgZGV2aWNlcyAqLworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykKKwkJcmV0dXJuOworCisJZGV2X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2X2F0dHIpCisJCXJldHVybjsKKworCWlmIChpYl9xdWVyeV9kZXZpY2UoZGV2aWNlLCBkZXZfYXR0cikpIHsKKwkJcmRzZGVidWcoIlF1ZXJ5IGRldmljZSBmYWlsZWQgZm9yICVzXG4iLCBkZXZpY2UtPm5hbWUpOworCQlnb3RvIGZyZWVfYXR0cjsKKwl9CisKKwlyZHNfaXdkZXYgPSBrbWFsbG9jKHNpemVvZiAqcmRzX2l3ZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkc19pd2RldikKKwkJZ290byBmcmVlX2F0dHI7CisKKwlzcGluX2xvY2tfaW5pdCgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlyZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5ID0gISEoZGV2X2F0dHItPmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTE9DQUxfRE1BX0xLRVkpOworCXJkc19pd2Rldi0+bWF4X3dycyA9IGRldl9hdHRyLT5tYXhfcXBfd3I7CisJcmRzX2l3ZGV2LT5tYXhfc2dlID0gbWluKGRldl9hdHRyLT5tYXhfc2dlLCBSRFNfSVdfTUFYX1NHRSk7CisKKwlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQgPSBtYXgoUEFHRV9TSElGVCwgZmZzKGRldl9hdHRyLT5wYWdlX3NpemVfY2FwKSAtIDEpOworCisJcmRzX2l3ZGV2LT5kZXYgPSBkZXZpY2U7CisJcmRzX2l3ZGV2LT5wZCA9IGliX2FsbG9jX3BkKGRldmljZSk7CisJaWYgKElTX0VSUihyZHNfaXdkZXYtPnBkKSkKKwkJZ290byBmcmVlX2RldjsKKworCWlmICghcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleSkgeworCQlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpIHsKKwkJCXJkc19pd2Rldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pd2Rldi0+cGQsCisJCQkJCQlJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCQl9IGVsc2UgeworCQkJcmRzX2l3ZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2l3ZGV2LT5wZCwKKwkJCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkJCUlCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJCX0KKwkJaWYgKElTX0VSUihyZHNfaXdkZXYtPm1yKSkKKwkJCWdvdG8gZXJyX3BkOworCX0gZWxzZQorCQlyZHNfaXdkZXYtPm1yID0gTlVMTDsKKworCXJkc19pd2Rldi0+bXJfcG9vbCA9IHJkc19pd19jcmVhdGVfbXJfcG9vbChyZHNfaXdkZXYpOworCWlmIChJU19FUlIocmRzX2l3ZGV2LT5tcl9wb29sKSkgeworCQlyZHNfaXdkZXYtPm1yX3Bvb2wgPSBOVUxMOworCQlnb3RvIGVycl9tcjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jbV9pZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnJkc19pd2Rldi0+bGlzdCwgJnJkc19pd19kZXZpY2VzKTsKKworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaXdfY2xpZW50LCByZHNfaXdkZXYpOworCisJZ290byBmcmVlX2F0dHI7CisKK2Vycl9tcjoKKwlpZiAocmRzX2l3ZGV2LT5tcikKKwkJaWJfZGVyZWdfbXIocmRzX2l3ZGV2LT5tcik7CitlcnJfcGQ6CisJaWJfZGVhbGxvY19wZChyZHNfaXdkZXYtPnBkKTsKK2ZyZWVfZGV2OgorCWtmcmVlKHJkc19pd2Rldik7CitmcmVlX2F0dHI6CisJa2ZyZWUoZGV2X2F0dHIpOworfQorCit2b2lkIHJkc19pd19yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQsICpuZXh0OworCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pd19jbGllbnQpOworCWlmICghcmRzX2l3ZGV2KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9jbV9pZCwgbmV4dCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmaV9jbV9pZC0+bGlzdCk7CisJCWtmcmVlKGlfY21faWQpOworCX0KKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmRzX2l3X3JlbW92ZV9jb25ucyhyZHNfaXdkZXYpOworCisJaWYgKHJkc19pd2Rldi0+bXJfcG9vbCkKKwkJcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChyZHNfaXdkZXYtPm1yX3Bvb2wpOworCisJaWYgKHJkc19pd2Rldi0+bXIpCisJCWliX2RlcmVnX21yKHJkc19pd2Rldi0+bXIpOworCisJd2hpbGUgKGliX2RlYWxsb2NfcGQocmRzX2l3ZGV2LT5wZCkpIHsKKwkJcmRzZGVidWcoIkZhaWxlZCB0byBkZWFsbG9jIHBkICVwXG4iLCByZHNfaXdkZXYtPnBkKTsKKwkJbXNsZWVwKDEpOworCX0KKworCWxpc3RfZGVsKCZyZHNfaXdkZXYtPmxpc3QpOworCWtmcmVlKHJkc19pd2Rldik7Cit9CisKK3N0cnVjdCBpYl9jbGllbnQgcmRzX2l3X2NsaWVudCA9IHsKKwkubmFtZSAgID0gInJkc19pdyIsCisJLmFkZCAgICA9IHJkc19pd19hZGRfb25lLAorCS5yZW1vdmUgPSByZHNfaXdfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIGludCByZHNfaXdfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8gPSBidWZmZXI7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYzsKKworCS8qIFdlIHdpbGwgb25seSBldmVyIGxvb2sgYXQgSUIgdHJhbnNwb3J0cyAqLworCWlmIChjb25uLT5jX3RyYW5zICE9ICZyZHNfaXdfdHJhbnNwb3J0KQorCQlyZXR1cm4gMDsKKworCWlpbmZvLT5zcmNfYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJaWluZm8tPmRzdF9hZGRyID0gY29ubi0+Y19mYWRkcjsKKworCW1lbXNldCgmaWluZm8tPnNyY19naWQsIDAsIHNpemVvZihpaW5mby0+c3JjX2dpZCkpOworCW1lbXNldCgmaWluZm8tPmRzdF9naWQsIDAsIHNpemVvZihpaW5mby0+ZHN0X2dpZCkpOworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCQlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwkJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCQlkZXZfYWRkciA9ICZpYy0+aV9jbV9pZC0+cm91dGUuYWRkci5kZXZfYWRkcjsKKworCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+c3JjX2dpZCk7CisJCWliX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5kc3RfZ2lkKTsKKworCQlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCQlpaW5mby0+bWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfc2VuZF9zZ2UgPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJCXJkc19pd19nZXRfbXJfaW5mbyhyZHNfaXdkZXYsIGlpbmZvKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19pY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfaXdfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24pKTsKK30KKworCisvKgorICogRWFybHkgUkRTL0lCIHdhcyBidWlsdCB0byBvbmx5IGJpbmQgdG8gYW4gYWRkcmVzcyBpZiB0aGVyZSBpcyBhbiBJUG9JQgorICogZGV2aWNlIHdpdGggdGhhdCBhZGRyZXNzIHNldC4KKyAqCisgKiBJZiBpdCB3ZXJlIG1lLCBJJ2QgYWR2b2NhdGUgZm9yIHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiAgU2VuZGluZyBhbmQKKyAqIHJlY2VpdmluZyBzaG91bGQgYmUgZGV2aWNlLWFnbm9zdGljLiAgVHJhbnNwb3J0cyB3b3VsZCB0cnkgYW5kIG1haW50YWluCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHBlZXJzIHdobyBoYXZlIG1lc3NhZ2VzIHF1ZXVlZC4gIFVzZXJzcGFjZSB3b3VsZCBiZQorICogYWxsb3dlZCB0byBpbmZsdWVuY2Ugd2hpY2ggcGF0aHMgaGF2ZSBwcmlvcml0eS4gIFdlIGNvdWxkIGNhbGwgdXNlcnNwYWNlCisgKiBhc3NlcnRpbmcgdGhpcyBwb2xpY3kgInJvdXRpbmciLgorICovCitzdGF0aWMgaW50IHJkc19pd19sYWRkcl9jaGVjayhfX2JlMzIgYWRkcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCisJLyogQ3JlYXRlIGEgQ01BIElEIGFuZCB0cnkgdG8gYmluZCBpdC4gVGhpcyBjYXRjaGVzIGJvdGgKKwkgKiBJQiBhbmQgaVdBUlAgY2FwYWJsZSBOSUNzLgorCSAqLworCWNtX2lkID0gcmRtYV9jcmVhdGVfaWQoTlVMTCwgTlVMTCwgUkRNQV9QU19UQ1ApOworCWlmICghY21faWQpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworCisJLyogcmRtYV9iaW5kX2FkZHIgd2lsbCBvbmx5IHN1Y2NlZWQgZm9yIElCICYgaVdBUlAgZGV2aWNlcyAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJLyogZHVlIHRvIHRoaXMsIHdlIHdpbGwgY2xhaW0gdG8gc3VwcG9ydCBJQiBkZXZpY2VzIHVubGVzcyB3ZQorCSAgIGNoZWNrIG5vZGVfdHlwZS4gKi8KKwlpZiAocmV0IHx8IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisKKwlyZHNkZWJ1ZygiYWRkciAlcEk0IHJldCAlZCBub2RlIHR5cGUgJWRcbiIsCisJCSZhZGRyLCByZXQsCisJCWNtX2lkLT5kZXZpY2UgPyBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgOiAtMSk7CisKKwlyZG1hX2Rlc3Ryb3lfaWQoY21faWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUywgcmRzX2l3X2ljX2luZm8pOworCXJkc19pd19yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CisJcmRzX2l3X3N5c2N0bF9leGl0KCk7CisJcmRzX2l3X3JlY3ZfZXhpdCgpOworCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfaXdfdHJhbnNwb3J0KTsKK30KKworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydCA9IHsKKwkubGFkZHJfY2hlY2sJCT0gcmRzX2l3X2xhZGRyX2NoZWNrLAorCS54bWl0X2NvbXBsZXRlCQk9IHJkc19pd194bWl0X2NvbXBsZXRlLAorCS54bWl0CQkJPSByZHNfaXdfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSBOVUxMLAorCS54bWl0X3JkbWEJCT0gcmRzX2l3X3htaXRfcmRtYSwKKwkucmVjdgkJCT0gcmRzX2l3X3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2l3X2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfaXdfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX2l3X2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfaXdfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19pd19pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX2l3X2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX2l3X2luY19mcmVlLAorCS5jbV9pbml0aWF0ZV9jb25uZWN0CT0gcmRzX2l3X2NtX2luaXRpYXRlX2Nvbm5lY3QsCisJLmNtX2hhbmRsZV9jb25uZWN0CT0gcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0LAorCS5jbV9jb25uZWN0X2NvbXBsZXRlCT0gcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUsCisJLnN0YXRzX2luZm9fY29weQk9IHJkc19pd19zdGF0c19pbmZvX2NvcHksCisJLmV4aXQJCQk9IHJkc19pd19leGl0LAorCS5nZXRfbXIJCQk9IHJkc19pd19nZXRfbXIsCisJLnN5bmNfbXIJCT0gcmRzX2l3X3N5bmNfbXIsCisJLmZyZWVfbXIJCT0gcmRzX2l3X2ZyZWVfbXIsCisJLmZsdXNoX21ycwkJPSByZHNfaXdfZmx1c2hfbXJzLAorCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAorCS50X25hbWUJCQk9ICJpd2FycCIsCisJLnRfcHJlZmVyX2xvb3BiYWNrCT0gMSwKK307CisKK2ludCBfX2luaXQgcmRzX2l3X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd19kZXZpY2VzKTsKKworCXJldCA9IGliX3JlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaXdfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pYnJlZzsKKworCXJldCA9IHJkc19pd19yZWN2X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisKKwlyZXQgPSByZHNfdHJhbnNfcmVnaXN0ZXIoJnJkc19pd190cmFuc3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlY3Y7CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TLCByZHNfaXdfaWNfaW5mbyk7CisKKwlnb3RvIG91dDsKKworb3V0X3JlY3Y6CisJcmRzX2l3X3JlY3ZfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfaXdfc3lzY3RsX2V4aXQoKTsKK291dF9pYnJlZzoKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmggYi9uZXQvcmRzL2l3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZGEzNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXcuaApAQCAtMCwwICsxLDM5NSBAQAorI2lmbmRlZiBfUkRTX0lXX0gKKyNkZWZpbmUgX1JEU19JV19ICisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworI2RlZmluZSBSRFNfRkFTVFJFR19TSVpFCQkyMAorI2RlZmluZSBSRFNfRkFTVFJFR19QT09MX1NJWkUJCTIwNDgKKworI2RlZmluZSBSRFNfSVdfTUFYX1NHRQkJCTgKKyNkZWZpbmUgUkRTX0lXX1JFQ1ZfU0dFIAkJMgorCisjZGVmaW5lIFJEU19JV19ERUZBVUxUX1JFQ1ZfV1IJCTEwMjQKKyNkZWZpbmUgUkRTX0lXX0RFRkFVTFRfU0VORF9XUgkJMjU2CisKKyNkZWZpbmUgUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFMJMHgwMDAwMDAwMwkvKiBtaW5vciB2ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2l3X2RldmljZXM7CisKKy8qCisgKiBJQiBwb3N0cyBSRFNfRlJBR19TSVpFIGZyYWdtZW50cyBvZiBwYWdlcyB0byB0aGUgcmVjZWl2ZSBxdWV1ZXMgdG8KKyAqIHRyeSBhbmQgbWluaW1pemUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGllZCB1cCBib3RoIHRoZSBkZXZpY2UgYW5kCisgKiBzb2NrZXQgcmVjZWl2ZSBxdWV1ZXMuCisgKi8KKy8qIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmaW5hbCBmdWxsIGZyYWcgdGhhdCBmaXRzIGluIHRoZSBwYWdlICovCisjZGVmaW5lIFJEU19QQUdFX0xBU1RfT0ZGICgoKFBBR0VfU0laRSAgLyBSRFNfRlJBR19TSVpFKSAtIDEpICogUkRTX0ZSQUdfU0laRSkKK3N0cnVjdCByZHNfcGFnZV9mcmFnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZfaXRlbTsKKwlzdHJ1Y3QgcGFnZQkJKmZfcGFnZTsKKwl1bnNpZ25lZCBsb25nCQlmX29mZnNldDsKKwlkbWFfYWRkcl90IAkJZl9tYXBwZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2l3X2luY29taW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlpX2ZyYWdzOworCXN0cnVjdCByZHNfaW5jb21pbmcJaWlfaW5jOworfTsKKworc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgeworCS8qIEFkZCBuZXcgZmllbGRzIGF0IHRoZSBlbmQsIGFuZCBkb24ndCBwZXJtdXRlIGV4aXN0aW5nIGZpZWxkcy4gKi8KKwlfX2JlMzIJCQlkcF9zYWRkcjsKKwlfX2JlMzIJCQlkcF9kYWRkcjsKKwl1OAkJCWRwX3Byb3RvY29sX21ham9yOworCXU4CQkJZHBfcHJvdG9jb2xfbWlub3I7CisJX19iZTE2CQkJZHBfcHJvdG9jb2xfbWlub3JfbWFzazsgLyogYml0bWFzayAqLworCV9fYmUzMgkJCWRwX3Jlc2VydmVkMTsKKwlfX2JlNjQJCQlkcF9hY2tfc2VxOworCV9fYmUzMgkJCWRwX2NyZWRpdDsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZmxvdyBjdGwgKi8KK307CisKK3N0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgeworCXN0cnVjdCBzY2F0dGVybGlzdAkqbGlzdDsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKKwlpbnQJCQlkbWFfbGVuOworCXVuc2lnbmVkIGludAkJZG1hX25wYWdlczsKKwl1bnNpZ25lZCBpbnQJCWJ5dGVzOworfTsKKworc3RydWN0IHJkc19pd19tYXBwaW5nIHsKKwlzcGlubG9ja190CQltX2xvY2s7CS8qIHByb3RlY3QgdGhlIG1hcHBpbmcgc3RydWN0ICovCisJc3RydWN0IGxpc3RfaGVhZAltX2xpc3Q7CisJc3RydWN0IHJkc19pd19tcgkqbV9tcjsKKwl1aW50MzJfdAkJbV9ya2V5OworCXN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgbV9zZzsKK307CisKK3N0cnVjdCByZHNfaXdfc2VuZF93b3JrIHsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKnNfcm07CisKKwkvKiBXZSBzaG91bGQgcmVhbGx5IHB1dCB0aGVzZSBpbnRvIGEgdW5pb246ICovCisJc3RydWN0IHJkc19yZG1hX29wCSpzX29wOworCXN0cnVjdCByZHNfaXdfbWFwcGluZwkqc19tYXBwaW5nOworCXN0cnVjdCBpYl9tcgkJKnNfbXI7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqc19wYWdlX2xpc3Q7CisJdW5zaWduZWQgY2hhcgkJc19yZW1hcF9jb3VudDsKKworCXN0cnVjdCBpYl9zZW5kX3dyCXNfd3I7CisJc3RydWN0IGliX3NnZQkJc19zZ2VbUkRTX0lXX01BWF9TR0VdOworCXVuc2lnbmVkIGxvbmcJCXNfcXVldWVkOworfTsKKworc3RydWN0IHJkc19pd19yZWN2X3dvcmsgeworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgCSpyX2l3aW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCSpyX2ZyYWc7CisJc3RydWN0IGliX3JlY3Zfd3IJcl93cjsKKwlzdHJ1Y3QgaWJfc2dlCQlyX3NnZVsyXTsKK307CisKK3N0cnVjdCByZHNfaXdfd29ya19yaW5nIHsKKwl1MzIJCXdfbnI7CisJdTMyCQl3X2FsbG9jX3B0cjsKKwl1MzIJCXdfYWxsb2NfY3RyOworCXUzMgkJd19mcmVlX3B0cjsKKwlhdG9taWNfdAl3X2ZyZWVfY3RyOworfTsKKworc3RydWN0IHJkc19pd19kZXZpY2U7CisKK3N0cnVjdCByZHNfaXdfY29ubmVjdGlvbiB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWl3X25vZGU7CisJc3RydWN0IHJkc19pd19kZXZpY2UgCSpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjb25uOworCisJLyogYWxwaGFiZXQgc291cCwgSUJUQSBzdHlsZSAqLworCXN0cnVjdCByZG1hX2NtX2lkCSppX2NtX2lkOworCXN0cnVjdCBpYl9wZAkJKmlfcGQ7CisJc3RydWN0IGliX21yCQkqaV9tcjsKKwlzdHJ1Y3QgaWJfY3EJCSppX3NlbmRfY3E7CisJc3RydWN0IGliX2NxCQkqaV9yZWN2X2NxOworCisJLyogdHggKi8KKwlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZwlpX3NlbmRfcmluZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmlfcm07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfc2VuZF9oZHJzOworCXU2NAkJCWlfc2VuZF9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqaV9zZW5kczsKKworCS8qIHJ4ICovCisJc3RydWN0IG11dGV4CQlpX3JlY3ZfbXV0ZXg7CisJc3RydWN0IHJkc19pd193b3JrX3JpbmcJaV9yZWN2X3Jpbmc7CisJc3RydWN0IHJkc19pd19pbmNvbWluZwkqaV9pd2luYzsKKwl1MzIJCQlpX3JlY3ZfZGF0YV9yZW07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfcmVjdl9oZHJzOworCXU2NAkJCWlfcmVjdl9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqaV9yZWN2czsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwlpX2ZyYWc7CisJdTY0CQkJaV9hY2tfcmVjdjsJLyogbGFzdCBBQ0sgcmVjZWl2ZWQgKi8KKworCS8qIHNlbmRpbmcgYWNrcyAqLworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CisJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOworCXU2NAkJCWlfYWNrX2RtYTsKKwl1bnNpZ25lZCBsb25nCQlpX2Fja19xdWV1ZWQ7CisKKwkvKiBGbG93IGNvbnRyb2wgcmVsYXRlZCBpbmZvcm1hdGlvbgorCSAqCisJICogT3VyIGFsZ29yaXRobSB1c2VzIGEgcGFpciB2YXJpYWJsZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY2VzcworCSAqIGF0b21pY2FsbHkgLSBvbmUgZm9yIHRoZSBzZW5kIGNyZWRpdHMsIGFuZCBvbmUgcG9zdGVkCisJICogcmVjdiBjcmVkaXRzIHdlIG5lZWQgdG8gdHJhbnNmZXIgdG8gcmVtb3RlLgorCSAqIFJhdGhlciB0aGFuIHByb3RlY3QgdGhlbSB1c2luZyBhIHNsb3cgc3BpbmxvY2ssIHdlIHB1dCBib3RoIGludG8KKwkgKiBhIHNpbmdsZSBhdG9taWNfdCBhbmQgdXBkYXRlIGl0IHVzaW5nIGNtcHhjaGcKKwkgKi8KKwlhdG9taWNfdAkJaV9jcmVkaXRzOworCisJLyogUHJvdG9jb2wgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGludAkJaV9mbG93Y3RsOjE7CS8qIGVuYWJsZS9kaXNhYmxlIGZsb3cgY3RsICovCisJdW5zaWduZWQgaW50CQlpX2RtYV9sb2NhbF9sa2V5OjE7CisJdW5zaWduZWQgaW50CQlpX2Zhc3RyZWdfcG9zdGVkOjE7IC8qIGZhc3RyZWcgcG9zdGVkIG9uIHRoaXMgY29ubmVjdGlvbiAqLworCS8qIEJhdGNoZWQgY29tcGxldGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQJCWlfdW5zaWduYWxlZF93cnM7CisJbG9uZwkJCWlfdW5zaWduYWxlZF9ieXRlczsKK307CisKKy8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNkZWZpbmUgSUJfR0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9HRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPj4gMTYpCisjZGVmaW5lIElCX1NFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfU0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpIDw8IDE2KQorCitzdHJ1Y3QgcmRzX2l3X2NtX2lkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHJkbWFfY21faWQJKmNtX2lkOworfTsKKworc3RydWN0IHJkc19pd19kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNtX2lkX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljb25uX2xpc3Q7CisJc3RydWN0IGliX2RldmljZQkqZGV2OworCXN0cnVjdCBpYl9wZAkJKnBkOworCXN0cnVjdCBpYl9tcgkJKm1yOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbAkqbXJfcG9vbDsKKwlpbnQJCQlwYWdlX3NoaWZ0OworCWludAkJCW1heF9zZ2U7CisJdW5zaWduZWQgaW50CQltYXhfd3JzOworCXVuc2lnbmVkIGludAkJZG1hX2xvY2FsX2xrZXk6MTsKKwlzcGlubG9ja190CQlzcGlubG9jazsJLyogcHJvdGVjdCB0aGUgYWJvdmUgKi8KK307CisKKy8qIGJpdHMgZm9yIGlfYWNrX2ZsYWdzICovCisjZGVmaW5lIElCX0FDS19JTl9GTElHSFQJMAorI2RlZmluZSBJQl9BQ0tfUkVRVUVTVEVECTEKKworLyogTWFnaWMgV1JfSUQgZm9yIEFDS3MgKi8KKyNkZWZpbmUgUkRTX0lXX0FDS19XUl9JRAkoKHU2NCkweGZmZmZmZmZmZmZmZmZmZmZVTEwpCisjZGVmaW5lIFJEU19JV19GQVNUX1JFR19XUl9JRAkoKHU2NCkweGVmZWZlZmVmZWZlZmVmZWZVTEwpCisjZGVmaW5lIFJEU19JV19MT0NBTF9JTlZfV1JfSUQJKCh1NjQpMHhkZmRmZGZkZmRmZGZkZmRmVUxMKQorCitzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfaXdfY29ubmVjdF9yYWNlZDsKKwl1aW50NjRfdAlzX2l3X2xpc3Rlbl9jbG9zZWRfc3RhbGU7CisJdWludDY0X3QJc19pd190eF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaXdfdHhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pd190eF9yaW5nX2Z1bGw7CisJdWludDY0X3QJc19pd190eF90aHJvdHRsZTsKKwl1aW50NjRfdAlzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2l3X3R4X3N0YWxsZWQ7CisJdWludDY0X3QJc19pd190eF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2l3X3J4X2NxX2NhbGw7CisJdWludDY0X3QJc19pd19yeF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2l3X3J4X3JpbmdfZW1wdHk7CisJdWludDY0X3QJc19pd19yeF9yZWZpbGxfZnJvbV9jcTsKKwl1aW50NjRfdAlzX2l3X3J4X3JlZmlsbF9mcm9tX3RocmVhZDsKKwl1aW50NjRfdAlzX2l3X3J4X2FsbG9jX2xpbWl0OworCXVpbnQ2NF90CXNfaXdfcnhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pd19hY2tfc2VudDsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW5kX2ZhaWx1cmU7CisJdWludDY0X3QJc19pd19hY2tfc2VuZF9kZWxheWVkOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbmRfcGlnZ3liYWNrZWQ7CisJdWludDY0X3QJc19pd19hY2tfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX2FsbG9jOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9mcmVlOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl91c2VkOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX2ZsdXNoOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX3dhaXQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX3Bvb2xfZGVwbGV0ZWQ7Cit9OworCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc19pd193cTsKKworLyoKKyAqIEZha2UgaWJfZG1hX3N5bmNfc2dfZm9yX3tjcHUsZGV2aWNlfSBhcyBsb25nIGFzIGliX3ZlcmJzLmgKKyAqIGRvZXNuJ3QgZGVmaW5lIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQlyZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlyZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2RldmljZQorCitzdGF0aWMgaW5saW5lIHUzMiByZHNfaXdfbG9jYWxfZG1hX2xrZXkoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlyZXR1cm4gaWMtPmlfZG1hX2xvY2FsX2xrZXkgPyBpYy0+aV9jbV9pZC0+ZGV2aWNlLT5sb2NhbF9kbWFfbGtleSA6IGljLT5pX21yLT5sa2V5OworfQorCisvKiBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydDsKK2V4dGVybiB2b2lkIHJkc19pd19hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gdm9pZCByZHNfaXdfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHN0cnVjdCBpYl9jbGllbnQgcmRzX2l3X2NsaWVudDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBmYXN0cmVnX3Bvb2xfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZmFzdHJlZ19tZXNzYWdlX3NpemU7CisKK2V4dGVybiBzcGlubG9ja190IGl3X25vZGV2X2Nvbm5zX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpd19ub2Rldl9jb25uczsKKworLyogaWJfY20uYyAqLworaW50IHJkc19pd19jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpOworaW50IHJkc19pd19jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spOworaW50IF9faW5pdCByZHNfaXdfbGlzdGVuX2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19saXN0ZW5fc3RvcCh2b2lkKTsKK3ZvaWQgX19yZHNfaXdfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludCByZHNfaXdfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworaW50IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7Cit2b2lkIHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisKKyNkZWZpbmUgcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfaXdfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUy9JVzogIiBmbXQpCisKKy8qIGliX3JkbWEuYyAqLworaW50IHJkc19pd191cGRhdGVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKK2ludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KTsKK3N0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICopOwordm9pZCByZHNfaXdfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwordm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqKTsKK3ZvaWQgKnJkc19pd19nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCk7Cit2b2lkIHJkc19pd19zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXIpOwordm9pZCByZHNfaXdfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSk7Cit2b2lkIHJkc19pd19mbHVzaF9tcnModm9pZCk7Cit2b2lkIHJkc19pd19yZW1vdmVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKKworLyogaWJfcmVjdi5jICovCitpbnQgX19pbml0IHJkc19pd19yZWN2X2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19yZWN2X2V4aXQodm9pZCk7CitpbnQgcmRzX2l3X3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaXdfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCk7Cit2b2lkIHJkc19pd19pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2l3X2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CitpbnQgcmRzX2l3X2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpOwordm9pZCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pd19yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordTY0IHJkc19pd19waWdneWJfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOworCisvKiBpYl9yaW5nLmMgKi8KK3ZvaWQgcmRzX2l3X3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3ZvaWQgcmRzX2l3X3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordTMyIHJkc19pd19yaW5nX2FsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcyk7Cit2b2lkIHJkc19pd19yaW5nX2ZyZWUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOwordm9pZCByZHNfaXdfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK2ludCByZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZyk7CitpbnQgcmRzX2l3X3JpbmdfbG93KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaXdfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pd19yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KTsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfaXdfcmluZ19lbXB0eV93YWl0OworCisvKiBpYl9zZW5kLmMgKi8KK3ZvaWQgcmRzX2l3X3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaXdfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOwordm9pZCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pd19zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK2ludCByZHNfaXdfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7Cit2b2lkIHJkc19pd19zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpOwordm9pZCByZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKTsKK2ludCByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTMyIHdhbnRlZCwKKwkJCSAgICAgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKTsKKworLyogaWJfc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfaXdfc3RhdGlzdGljcywgcmRzX2l3X3N0YXRzKTsKKyNkZWZpbmUgcmRzX2l3X3N0YXRzX2luYyhtZW1iZXIpIHJkc19zdGF0c19pbmNfd2hpY2gocmRzX2l3X3N0YXRzLCBtZW1iZXIpCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CisKKy8qIGliX3N5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19pd19zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2w7CitleHRlcm4gY3RsX3RhYmxlIHJkc19pd19zeXNjdGxfdGFibGVbXTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgaGVhZGVyIGFuZCBkYXRhIFNHRXMgaW4KKyAqIFJEUyBwYWNrZXRzIChub3QgUkRNQSkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pd19oZWFkZXJfc2dlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVswXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pd19kYXRhX3NnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQoreworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKwkqcHRyID0gdmFsOworI2Vsc2UKKwlzZXRfNjRiaXQocHRyLCB2YWwpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19jbS5jIGIvbmV0L3Jkcy9pd19jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWNiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X2NtLmMKQEAgLTAsMCArMSw3NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworLyoKKyAqIFNldCB0aGUgc2VsZWN0ZWQgcHJvdG9jb2wgdmVyc2lvbgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJY29ubi0+Y192ZXJzaW9uID0gdmVyc2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBmbG93IGNvbnRyb2wKKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCAmJiBjcmVkaXRzICE9IDApIHsKKwkJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sICovCisJCWljLT5pX2Zsb3djdGwgPSAxOworCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRzKTsKKwl9IGVsc2UgeworCQlpYy0+aV9mbG93Y3RsID0gMDsKKwl9Cit9CisKKy8qCisgKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLgorICogV2UgZ2V0IGhlcmUgZm9yIGJvdGggb3V0Z29pbmcgYW5kIGluY29taW5nIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCWludCBlcnI7CisKKwlpZiAoZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCQlkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKworCQlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sCisJCQkJUkRTX1BST1RPQ09MKGRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7CisJCXJkc19pd19zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwl9CisKKwkvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgJiBjb25uICovCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwllcnIgPSByZHNfaXdfdXBkYXRlX2NtX2lkKHJkc19pd2RldiwgaWMtPmlfY21faWQpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7CisJZXJyID0gcmRzX2l3X2FkZF9jb25uKHJkc19pd2RldiwgY29ubik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaXdfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcCAmJiBkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSVc6IGNvbm5lY3RlZCB0byAlcEk0PC0+JXBJNCB2ZXJzaW9uICV1LiV1JXNcbiIsCisJCQkmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIsCisJCQlSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCVJEU19QUk9UT0NPTF9NSU5PUihjb25uLT5jX3ZlcnNpb24pLAorCQkJaWMtPmlfZmxvd2N0bCA/ICIsIGZsb3cgY29udHJvbCIgOiAiIik7CisKKwlyZHNfY29ubmVjdF9jb21wbGV0ZShjb25uKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLAorCQkJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwLAorCQkJdTMyIHByb3RvY29sX3ZlcnNpb24pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwltZW1zZXQoY29ubl9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0pKTsKKwkvKiBYWFggdHVuZSB0aGVzZT8gKi8KKwljb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzID0gMTsKKwljb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGggPSAxOworCisJaWYgKGRwKSB7CisJCW1lbXNldChkcCwgMCwgc2l6ZW9mKCpkcCkpOworCQlkcC0+ZHBfc2FkZHIgPSBjb25uLT5jX2xhZGRyOworCQlkcC0+ZHBfZGFkZHIgPSBjb25uLT5jX2ZhZGRyOworCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPSBSRFNfUFJPVE9DT0xfTUFKT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vciA9IFJEU19QUk9UT0NPTF9NSU5PUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2sgPSBjcHVfdG9fYmUxNihSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUyk7CisJCWRwLT5kcF9hY2tfc2VxID0gcmRzX2l3X3BpZ2d5Yl9hY2soaWMpOworCisJCS8qIEFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJCXVuc2lnbmVkIGludCBjcmVkaXRzOworCisJCQljcmVkaXRzID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpOworCQkJZHAtPmRwX2NyZWRpdCA9IGNwdV90b19iZTMyKGNyZWRpdHMpOworCQkJYXRvbWljX3N1YihJQl9TRVRfUE9TVF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJCX0KKworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgPSBkcDsKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiA9IHNpemVvZigqZHApOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlyZHNkZWJ1ZygiZXZlbnQgJXUgZGF0YSAlcFxuIiwgZXZlbnQtPmV2ZW50LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBkYXRhOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzZGVidWcoImNvbm4gJXAgaWMgJXAgZXZlbnQgJXVcbiIsIGNvbm4sIGljLCBldmVudC0+ZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0VWRU5UX0NPTU1fRVNUOgorCQlyZG1hX25vdGlmeShpYy0+aV9jbV9pZCwgSUJfRVZFTlRfQ09NTV9FU1QpOworCQlicmVhazsKKwljYXNlIElCX0VWRU5UX1FQX1JFUV9FUlI6CisJY2FzZSBJQl9FVkVOVF9RUF9GQVRBTDoKKwlkZWZhdWx0OgorCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiUkRTL0lXOiBGYXRhbCBRUCBFdmVudCAldSAtIGNvbm5lY3Rpb24gJXBJNC0+JXBJNC4uLnJlY29ubmVjdGluZ1xuIiwKKwkJCWV2ZW50LT5ldmVudCwgJmNvbm4tPmNfbGFkZHIsCisJCQkmY29ubi0+Y19mYWRkcik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIFFQCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfcXBfYXR0cnMoc3RydWN0IGliX3FwX2luaXRfYXR0ciAqYXR0ciwKKwkJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiwKKwkJc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnNlbmRfcmluZywKKwkJdm9pZCAoKnNlbmRfY3FfaGFuZGxlcikoc3RydWN0IGliX2NxICosIHZvaWQgKiksCisJCXN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyZWN2X3JpbmcsCisJCXZvaWQgKCpyZWN2X2NxX2hhbmRsZXIpKHN0cnVjdCBpYl9jcSAqLCB2b2lkICopLAorCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pd2Rldi0+ZGV2OworCXVuc2lnbmVkIGludCBzZW5kX3NpemUsIHJlY3Zfc2l6ZTsKKwlpbnQgcmV0OworCisJLyogVGhlIG9mZnNldCBvZiAxIGlzIHRvIGFjY29tb2RhdGUgdGhlIGFkZGl0aW9uYWwgQUNLIFdSLiAqLworCXNlbmRfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2l3ZGV2LT5tYXhfd3JzLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyICsgMSk7CisJcmVjdl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaXdkZXYtPm1heF93cnMsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IgKyAxKTsKKwlyZHNfaXdfcmluZ19yZXNpemUoc2VuZF9yaW5nLCBzZW5kX3NpemUgLSAxKTsKKwlyZHNfaXdfcmluZ19yZXNpemUocmVjdl9yaW5nLCByZWN2X3NpemUgLSAxKTsKKworCW1lbXNldChhdHRyLCAwLCBzaXplb2YoKmF0dHIpKTsKKwlhdHRyLT5ldmVudF9oYW5kbGVyID0gcmRzX2l3X3FwX2V2ZW50X2hhbmRsZXI7CisJYXR0ci0+cXBfY29udGV4dCA9IGNvbnRleHQ7CisJYXR0ci0+Y2FwLm1heF9zZW5kX3dyID0gc2VuZF9zaXplOworCWF0dHItPmNhcC5tYXhfcmVjdl93ciA9IHJlY3Zfc2l6ZTsKKwlhdHRyLT5jYXAubWF4X3NlbmRfc2dlID0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCWF0dHItPmNhcC5tYXhfcmVjdl9zZ2UgPSBSRFNfSVdfUkVDVl9TR0U7CisJYXR0ci0+c3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfUkVRX1dSOworCWF0dHItPnFwX3R5cGUgPSBJQl9RUFRfUkM7CisKKwlhdHRyLT5zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgc2VuZF9jcV9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBjb250ZXh0LCBzZW5kX3NpemUsIDApOworCWlmIChJU19FUlIoYXR0ci0+c2VuZF9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRyLT5zZW5kX2NxKTsKKwkJYXR0ci0+c2VuZF9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdHRyLT5yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmVjdl9jcV9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBjb250ZXh0LCByZWN2X3NpemUsIDApOworCWlmIChJU19FUlIoYXR0ci0+cmVjdl9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRyLT5yZWN2X2NxKTsKKwkJYXR0ci0+cmVjdl9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGF0dHItPnNlbmRfY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoYXR0ci0+cmVjdl9jcSwgSUJfQ1FfU09MSUNJVEVEKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoYXR0ci0+c2VuZF9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoYXR0ci0+c2VuZF9jcSk7CisJCWlmIChhdHRyLT5yZWN2X2NxKQorCQkJaWJfZGVzdHJveV9jcShhdHRyLT5yZWN2X2NxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIG5vdCBsZWF2ZSBJU19FUlIgcG9pbnRlcnMgYXJvdW5kIGZvcgorICogY2xlYW51cCB0byB0cmlwIG92ZXIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCWludCByZXQ7CisKKwkvKiByZHNfaXdfYWRkX29uZSBjcmVhdGVzIGEgcmRzX2l3X2RldmljZSBvYmplY3QgcGVyIElCIGRldmljZSwKKwkgKiBhbmQgYWxsb2NhdGVzIGEgcHJvdGVjdGlvbiBkb21haW4sIG1lbW9yeSByYW5nZSBhbmQgTVIgcG9vbAorCSAqIGZvciBlYWNoLiAgSWYgdGhhdCBmYWlscyBmb3IgYW55IHJlYXNvbiwgaXQgd2lsbCBub3QgcmVnaXN0ZXIKKwkgKiB0aGUgcmRzX2l3ZGV2IGF0IGFsbC4KKwkgKi8KKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2LCAmcmRzX2l3X2NsaWVudCk7CisJaWYgKHJkc19pd2RldiA9PSBOVUxMKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JVzogTm8gY2xpZW50X2RhdGEgZm9yIGRldmljZSAlc1xuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIFByb3RlY3Rpb24gZG9tYWluIGFuZCBtZW1vcnkgcmFuZ2UgKi8KKwlpYy0+aV9wZCA9IHJkc19pd2Rldi0+cGQ7CisJaWMtPmlfbXIgPSByZHNfaXdkZXYtPm1yOworCisJcmV0ID0gcmRzX2l3X2luaXRfcXBfYXR0cnMoJmF0dHIsIHJkc19pd2RldiwKKwkJCSZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlciwKKwkJCSZpYy0+aV9yZWN2X3JpbmcsIHJkc19pd19yZWN2X2NxX2NvbXBfaGFuZGxlciwKKwkJCWNvbm4pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWljLT5pX3NlbmRfY3EgPSBhdHRyLnNlbmRfY3E7CisJaWMtPmlfcmVjdl9jcSA9IGF0dHIucmVjdl9jcTsKKworCS8qCisJICogWFhYIHRoaXMgY2FuIGZhaWwgaWYgbWF4Xypfd3IgaXMgdG9vIGxhcmdlPyAgQXJlIHdlIHN1cHBvc2VkCisJICogdG8gYmFjayBvZmYgdW50aWwgd2UgZ2V0IGEgdmFsdWUgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQ/CisJICovCisJcmV0ID0gcmRtYV9jcmVhdGVfcXAoaWMtPmlfY21faWQsIGljLT5pX3BkLCAmYXR0cik7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfcXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZF9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3NlbmRfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9zZW5kX2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHNlbmQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3JlY3ZfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9yZWN2X2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHJlY3YgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfYWNrID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkgICAgICAgJmljLT5pX2Fja19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9hY2sgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IGFjayBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kcyA9IHZtYWxsb2MoaWMtPmlfc2VuZF9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pd19zZW5kX3dvcmspKTsKKwlpZiAoaWMtPmlfc2VuZHMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1Zygic2VuZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlyZHNfaXdfc2VuZF9pbml0X3JpbmcoaWMpOworCisJaWMtPmlfcmVjdnMgPSB2bWFsbG9jKGljLT5pX3JlY3ZfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaXdfcmVjdl93b3JrKSk7CisJaWYgKGljLT5pX3JlY3ZzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInJlY3YgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdfcmVjdl9pbml0X3JpbmcoaWMpOworCXJkc19pd19yZWN2X2luaXRfYWNrKGljKTsKKworCS8qIFBvc3QgcmVjZWl2ZSBidWZmZXJzIC0gYXMgYSBzaWRlIGVmZmVjdCwgdGhpcyB3aWxsIHVwZGF0ZQorCSAqIHRoZSBwb3N0ZWQgY3JlZGl0IGNvdW50LiAqLworCXJkc19pd19yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDEpOworCisJcmRzZGVidWcoImNvbm4gJXAgcGQgJXAgbXIgJXAgY3EgJXAgJXBcbiIsIGNvbm4sIGljLT5pX3BkLCBpYy0+aV9tciwKKwkJIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiByZHNfaXdfcHJvdG9jb2xfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHApCit7CisJdTE2IGNvbW1vbjsKKwl1MzIgdmVyc2lvbiA9IDA7CisKKwkvKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCisJICogcmVxdWVzdCwgd2Ugd2lsbCBiZSBnaXZlbiBhIHByZXR0eSBsYXJnZSBidWZmZXIgd2l0aG91dCB0ZWxsaW5nIHVzIHRoZQorCSAqIG9yaWdpbmFsIHNpemUuIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGlzIGJ5IGxvb2tpbmcgYXQKKwkgKiB0aGUgY29udGVudHMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqIElmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkcyBhcmVuJ3Qgc2V0LCB0aGlzIGlzIGEgY29ubmVjdGlvbiBhdHRlbXB0CisJICogZnJvbSBhbiBvbGRlciB2ZXJzaW9uLiBUaGlzIGNvdWxkIGNvdWxkIGJlIDMuMCBvciAyLjAgLSB3ZSBjYW4ndCB0ZWxsLgorCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKCAqLworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMCkKKwkJcmV0dXJuIFJEU19QUk9UT0NPTF8zXzA7CisKKwljb21tb24gPSBiZTE2X3RvX2NwdShkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzaykgJiBSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUzsKKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDMgJiYgY29tbW9uKSB7CisJCXZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCQl3aGlsZSAoKGNvbW1vbiA+Pj0gMSkgIT0gMCkKKwkJCXZlcnNpb24rKzsKKwl9IGVsc2UgaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUzogQ29ubmVjdGlvbiBmcm9tICVwSTQgdXNpbmcgIgorCQkJImluY29tcGF0aWJsZSBwcm90b2NvbCB2ZXJzaW9uICV1LiV1XG4iLAorCQkJJmRwLT5kcF9zYWRkciwKKwkJCWRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCWRwLT5kcF9wcm90b2NvbF9taW5vcik7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCitpbnQgcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSBkcF9yZXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gTlVMTDsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwl1MzIgdmVyc2lvbjsKKwlpbnQgZXJyLCBkZXN0cm95ID0gMTsKKworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBwcm90b2NvbCB2ZXJzaW9uIG1hdGNoZXMgb3Vycy4gKi8KKwl2ZXJzaW9uID0gcmRzX2l3X3Byb3RvY29sX2NvbXBhdGlibGUoZHApOworCWlmICghdmVyc2lvbikKKwkJZ290byBvdXQ7CisKKwlyZHNkZWJ1Zygic2FkZHIgJXBJNCBkYWRkciAlcEk0IFJEU3YldS4ldVxuIiwKKwkJICZkcC0+ZHBfc2FkZHIsICZkcC0+ZHBfZGFkZHIsCisJCSBSRFNfUFJPVE9DT0xfTUFKT1IodmVyc2lvbiksIFJEU19QUk9UT0NPTF9NSU5PUih2ZXJzaW9uKSk7CisKKwljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGRwLT5kcF9kYWRkciwgZHAtPmRwX3NhZGRyLCAmcmRzX2l3X3RyYW5zcG9ydCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCXJkc2RlYnVnKCJyZHNfY29ubl9jcmVhdGUgZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGNvbm4pKTsKKwkJY29ubiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBtYXkgb2NjdXIgd2hpbGUgdGhlCisJICogcHJldmlvdXMgY29ubmVjdGlvbiBleGlzdCwgZS5nLiBpbiBjYXNlIG9mIGZhaWxvdmVyLgorCSAqIEJ1dCBhcyBjb25uZWN0aW9ucyBtYXkgYmUgaW5pdGlhdGVkIHNpbXVsdGFuZW91c2x5CisJICogYnkgYm90aCBob3N0cywgd2UgaGF2ZSBhIHJhbmRvbSBiYWNrb2ZmIG1lY2hhbmlzbSAtCisJICogc2VlIHRoZSBjb21tZW50IGFib3ZlIHJkc19xdWV1ZV9yZWNvbm5lY3QoKQorCSAqLworCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0NPTk5FQ1RJTkcpKSB7CisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQkJcmRzZGVidWcoImluY29taW5nIGNvbm5lY3Qgd2hpbGUgY29ubmVjdGluZ1xuIik7CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2xpc3Rlbl9jbG9zZWRfc3RhbGUpOworCQl9IGVsc2UKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFdhaXQgYW5kIHNlZSAtIG91ciBjb25uZWN0IG1heSBzdGlsbCBiZSBzdWNjZWVkaW5nICovCisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfY29ubmVjdF9yYWNlZCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sIHZlcnNpb24pOworCXJkc19pd19zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlCVUdfT04oY21faWQtPmNvbnRleHQpOworCUJVR19PTihpYy0+aV9jbV9pZCk7CisKKwlpYy0+aV9jbV9pZCA9IGNtX2lkOworCWNtX2lkLT5jb250ZXh0ID0gY29ubjsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShjbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJaWMtPmlfZG1hX2xvY2FsX2xrZXkgPSByZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5OworCisJLyogV2UgZ290IGhhbGZ3YXkgdGhyb3VnaCBzZXR0aW5nIHVwIHRoZSBpYl9jb25uZWN0aW9uLCBpZiB3ZQorCSAqIGZhaWwgbm93LCB3ZSBoYXZlIHRvIHRha2UgdGhlIGxvbmcgcm91dGUgb3V0IG9mIHRoaXMgbWVzcy4gKi8KKwlkZXN0cm95ID0gMDsKKworCWVyciA9IHJkc19pd19zZXR1cF9xcChjb25uKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZHNfaXdfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcF9yZXAsIHZlcnNpb24pOworCisJLyogcmRtYV9hY2NlcHQoKSBjYWxscyByZG1hX3JlamVjdCgpIGludGVybmFsbHkgaWYgaXQgZmFpbHMgKi8KKwllcnIgPSByZG1hX2FjY2VwdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZG1hX2FjY2VwdCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK291dDoKKwlyZG1hX3JlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJcmV0dXJuIGRlc3Ryb3k7Cit9CisKKworaW50IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgZHA7CisJaW50IHJldDsKKworCS8qIElmIHRoZSBwZWVyIGRvZXNuJ3QgZG8gcHJvdG9jb2wgbmVnb3RpYXRpb24sIHdlIG11c3QKKwkgKiBkZWZhdWx0IHRvIFJEU3YzLjAgKi8KKwlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTF8zXzApOworCWljLT5pX2Zsb3djdGwgPSByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbDsJLyogYWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCisJcmV0ID0gcmRzX2l3X3NldHVwX3FwKGNvbm4pOworCWlmIChyZXQpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkc19pd19zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwLCBSRFNfUFJPVE9DT0xfVkVSU0lPTik7CisKKwlyZXQgPSByZG1hX2Nvbm5lY3QoY21faWQsICZjb25uX3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRtYV9jb25uZWN0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCitvdXQ6CisJLyogQmV3YXJlIC0gcmV0dXJuaW5nIG5vbi16ZXJvIHRlbGxzIHRoZSByZG1hX2NtIHRvIGRlc3Ryb3kKKwkgKiB0aGUgY21faWQuIFdlIHNob3VsZCBjZXJ0YWlubHkgbm90IGRvIGl0IGFzIGxvbmcgYXMgd2Ugc3RpbGwKKwkgKiAib3duIiB0aGUgY21faWQuICovCisJaWYgKHJldCkgeworCQlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCQlpZiAoaWMtPmlfY21faWQgPT0gY21faWQpCisJCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2l3X2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkZXN0OworCWludCByZXQ7CisKKwkvKiBYWFggSSB3b25kZXIgd2hhdCBhZmZlY3QgdGhlIHBvcnQgc3BhY2UgaGFzICovCisJLyogZGVsZWdhdGUgY20gZXZlbnQgaGFuZGxlciB0byByZG1hX3RyYW5zcG9ydCAqLworCWljLT5pX2NtX2lkID0gcmRtYV9jcmVhdGVfaWQocmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGljLT5pX2NtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfaWQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY3JlYXRlZCBjbSBpZCAlcCBmb3IgY29ubiAlcFxuIiwgaWMtPmlfY21faWQsIGNvbm4pOworCisJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNyYy5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19sYWRkcjsKKwlzcmMuc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoMCk7CisKKwkvKiBGaXJzdCwgYmluZCB0byB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgZGV2aWNlLiAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGljLT5pX2NtX2lkLCAoc3RydWN0IHNvY2thZGRyICopICZzcmMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfYmluZF9hZGRyKCVwSTQpIGZhaWxlZDogJWRcbiIsCisJCQkJJmNvbm4tPmNfbGFkZHIsIHJldCk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwlpYy0+aV9kbWFfbG9jYWxfbGtleSA9IHJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXk7CisKKwlkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWRlc3Quc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfZmFkZHI7CisJZGVzdC5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwlyZXQgPSByZG1hX3Jlc29sdmVfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LAorCQkJCVJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiYWRkciByZXNvbHZlIGZhaWxlZCBmb3IgY20gaWQgJXA6ICVkXG4iLCBpYy0+aV9jbV9pZCwKKwkJCSByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgc28gY2FyZWZ1bCBhYm91dCBvbmx5IGNsZWFuaW5nIHVwIHJlc291cmNlcyB0aGF0IHdlcmUgYnVpbHQgdXAKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHN0YXJ0dXAuICBJbiBmYWN0IGl0CisgKiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisKKwlyZHNkZWJ1ZygiY20gJXAgcGQgJXAgY3EgJXAgJXAgcXAgJXBcbiIsIGljLT5pX2NtX2lkLAorCQkgaWMtPmlfcGQsIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EsCisJCSBpYy0+aV9jbV9pZCA/IGljLT5pX2NtX2lkLT5xcCA6IE5VTEwpOworCisJaWYgKGljLT5pX2NtX2lkKSB7CisJCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisKKwkJcmRzZGVidWcoImRpc2Nvbm5lY3RpbmcgY20gJXBcbiIsIGljLT5pX2NtX2lkKTsKKwkJZXJyID0gcmRtYV9kaXNjb25uZWN0KGljLT5pX2NtX2lkKTsKKwkJaWYgKGVycikgeworCQkJLyogQWN0dWFsbHkgdGhpcyBtYXkgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHksIHdoZW4KKwkJCSAqIGFuIG91dGdvaW5nIGNvbm5lY3QgcmFjZWQgd2l0aCBhbiBpbmNvbWluZyBjb25uZWN0LgorCQkJICovCisJCQlyZHNkZWJ1ZygicmRzX2l3X2Nvbm5fc2h1dGRvd246IGZhaWxlZCB0byBkaXNjb25uZWN0LCIKKwkJCQkgICAiIGNtOiAlcCBlcnIgJWRcbiIsIGljLT5pX2NtX2lkLCBlcnIpOworCQl9CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkgeworCQkJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUpOworCQl9CisKKwkJd2FpdF9ldmVudChyZHNfaXdfcmluZ19lbXB0eV93YWl0LAorCQkJcmRzX2l3X3JpbmdfZW1wdHkoJmljLT5pX3NlbmRfcmluZykgJiYKKwkJCXJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKTsKKworCQlpZiAoaWMtPmlfc2VuZF9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnMsCisJCQkJCSAgIGljLT5pX3NlbmRfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9yZWN2X2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRycywKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX2FjaykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgICBpYy0+aV9hY2ssIGljLT5pX2Fja19kbWEpOworCisJCWlmIChpYy0+aV9zZW5kcykKKwkJCXJkc19pd19zZW5kX2NsZWFyX3JpbmcoaWMpOworCQlpZiAoaWMtPmlfcmVjdnMpCisJCQlyZHNfaXdfcmVjdl9jbGVhcl9yaW5nKGljKTsKKworCQlpZiAoaWMtPmlfY21faWQtPnFwKQorCQkJcmRtYV9kZXN0cm95X3FwKGljLT5pX2NtX2lkKTsKKwkJaWYgKGljLT5pX3NlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3NlbmRfY3EpOworCQlpZiAoaWMtPmlfcmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfcmVjdl9jcSk7CisKKwkJLyoKKwkJICogSWYgYXNzb2NpYXRlZCB3aXRoIGFuIHJkc19pd19kZXZpY2U6CisJCSAqIAlNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KKwkJICogCVJlbW92ZSBjbV9pZCBmcm9tIHRoZSBkZXZpY2UgY21faWQgbGlzdC4KKwkJICovCisJCWlmIChpYy0+cmRzX2l3ZGV2KSB7CisKKwkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOworCQkJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJCQlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwkJCXJkc19pd19yZW1vdmVfY21faWQoaWMtPnJkc19pd2RldiwgaWMtPmlfY21faWQpOworCQkJaWMtPnJkc19pd2RldiA9IE5VTEw7CisJCX0KKworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJaWMtPmlfcGQgPSBOVUxMOworCQlpYy0+aV9tciA9IE5VTEw7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9oZHJzID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9oZHJzID0gTlVMTDsKKwkJaWMtPmlfYWNrID0gTlVMTDsKKwl9CisJQlVHX09OKGljLT5yZHNfaXdkZXYpOworCisJLyogQ2xlYXIgcGVuZGluZyB0cmFuc21pdCAqLworCWlmIChpYy0+aV9ybSkgeworCQlyZHNfbWVzc2FnZV9wdXQoaWMtPmlfcm0pOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisJaWMtPmlfYWNrX3JlY3YgPSAwOworCisJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCisJaWMtPmlfZmxvd2N0bCA9IDA7CisJYXRvbWljX3NldCgmaWMtPmlfY3JlZGl0cywgMCk7CisKKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpZiAoaWMtPmlfaXdpbmMpIHsKKwkJcmRzX2luY19wdXQoJmljLT5pX2l3aW5jLT5paV9pbmMpOworCQlpYy0+aV9pd2luYyA9IE5VTEw7CisJfQorCisJdmZyZWUoaWMtPmlfc2VuZHMpOworCWljLT5pX3NlbmRzID0gTlVMTDsKKwl2ZnJlZShpYy0+aV9yZWN2cyk7CisJaWMtPmlfcmVjdnMgPSBOVUxMOworCXJkc2RlYnVnKCJzaHV0ZG93biBjb21wbGV0ZVxuIik7Cit9CisKK2ludCByZHNfaXdfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBYWFggdG9vIGxhenk/ICovCisJaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmaWMtPml3X25vZGUpOworCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJLyoKKwkgKiByZHNfaXdfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKKwkgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLgorCSAqLworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWljLT5jb25uID0gY29ubjsKKwljb25uLT5jX3RyYW5zcG9ydF9kYXRhID0gaWM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXdfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml3X25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCisJcmRzZGVidWcoImNvbm4gJXAgY29ubiBpYyAlcFxuIiwgY29ubiwgY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGFyZzsKKwlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKwlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCWtmcmVlKGljKTsKK30KKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2l3X2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmRtYS5jIGIvbmV0L3Jkcy9pd19yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmRtYS5jCkBAIC0wLDAgKzEsODg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpdy5oIgorCisKKy8qCisgKiBUaGlzIGlzIHN0b3JlZCBhcyBtci0+cl90cmFuc19wcml2YXRlLgorICovCitzdHJ1Y3QgcmRzX2l3X21yIHsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZQkqZGV2aWNlOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbAkqcG9vbDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqY21faWQ7CisKKwlzdHJ1Y3QgaWJfbXIJKm1yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCXN0cnVjdCByZHNfaXdfbWFwcGluZwltYXBwaW5nOworCXVuc2lnbmVkIGNoYXIJCXJlbWFwX2NvdW50OworfTsKKworLyoKKyAqIE91ciBvd24gbGl0dGxlIE1SIHBvb2wKKyAqLworc3RydWN0IHJkc19pd19tcl9wb29sIHsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZQkqZGV2aWNlOwkJLyogYmFjayBwdHIgdG8gdGhlIGRldmljZSB0aGF0IG93bnMgdXMgKi8KKworCXN0cnVjdCBtdXRleAkJZmx1c2hfbG9jazsJCS8qIHNlcmlhbGl6ZSBmbXIgaW52YWxpZGF0ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlmbHVzaF93b3JrZXI7CQkvKiBmbHVzaCB3b3JrZXIgKi8KKworCXNwaW5sb2NrX3QJCWxpc3RfbG9jazsJCS8qIHByb3RlY3QgdmFyaWFibGVzIGJlbG93ICovCisJYXRvbWljX3QJCWl0ZW1fY291bnQ7CQkvKiB0b3RhbCAjIG9mIE1ScyAqLworCWF0b21pY190CQlkaXJ0eV9jb3VudDsJCS8qICMgZGlydHkgb2YgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eV9saXN0OwkJLyogZGlydHkgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFuX2xpc3Q7CQkvKiB1bnVzZWQgJiB1bmFtYXBwZWQgTVJzICovCisJYXRvbWljX3QJCWZyZWVfcGlubmVkOwkJLyogbWVtb3J5IHBpbm5lZCBieSBmcmVlIE1ScyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9tZXNzYWdlX3NpemU7CS8qIGluIHBhZ2VzICovCisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zOworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtc19zb2Z0OworCXVuc2lnbmVkIGxvbmcJCW1heF9mcmVlX3Bpbm5lZDsKKwlpbnQJCQltYXhfcGFnZXM7Cit9OworCitzdGF0aWMgaW50IHJkc19pd19mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKTsKK3N0YXRpYyB2b2lkIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCByZHNfaXdfaW5pdF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CitzdGF0aWMgaW50IHJkc19pd19tYXBfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkgIHN0cnVjdCByZHNfaXdfbXIgKmlibXIsCisJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cyk7CitzdGF0aWMgdm9pZCByZHNfaXdfZnJlZV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3Qoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBfbGlzdCwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmtpbGxfbGlzdCk7CitzdGF0aWMgdm9pZCByZHNfaXdfZGVzdHJveV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CisKK3N0YXRpYyBpbnQgcmRzX2l3X2dldF9kZXZpY2Uoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19pd19kZXZpY2UgKipyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICoqY21faWQpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKml3ZGV2OworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwkqcmRzX2l3ZGV2ID0gTlVMTDsKKwkqY21faWQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpd2RldiwgJnJkc19pd19kZXZpY2VzLCBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9jbV9pZCwgJml3ZGV2LT5jbV9pZF9saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19hZGRyLCAqZHN0X2FkZHI7CisKKwkJCXNyY19hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpX2NtX2lkLT5jbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwkJCWRzdF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpX2NtX2lkLT5jbV9pZC0+cm91dGUuYWRkci5kc3RfYWRkcjsKKworCQkJcmRzZGVidWcoImxvY2FsIGlwYWRkciA9ICV4IHBvcnQgJWQsICIKKwkJCQkgInJlbW90ZSBpcGFkZHIgPSAleCBwb3J0ICVkIgorCQkJCSAiLi5sb29raW5nIGZvciAleCBwb3J0ICVkLCAiCisJCQkJICJyZW1vdGUgaXBhZGRyID0gJXggcG9ydCAlZFxuIiwKKwkJCQlzcmNfYWRkci0+c2luX2FkZHIuc19hZGRyLAorCQkJCXNyY19hZGRyLT5zaW5fcG9ydCwKKwkJCQlkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyLAorCQkJCWRzdF9hZGRyLT5zaW5fcG9ydCwKKwkJCQlycy0+cnNfYm91bmRfYWRkciwKKwkJCQlycy0+cnNfYm91bmRfcG9ydCwKKwkJCQlycy0+cnNfY29ubl9hZGRyLAorCQkJCXJzLT5yc19jb25uX3BvcnQpOworI2lmZGVmIFdPUktJTkdfVFVQTEVfREVURUNUSU9OCisJCQlpZiAoc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfYm91bmRfYWRkciAmJgorCQkJICAgIHNyY19hZGRyLT5zaW5fcG9ydCA9PSBycy0+cnNfYm91bmRfcG9ydCAmJgorCQkJICAgIGRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2Nvbm5fYWRkciAmJgorCQkJICAgIGRzdF9hZGRyLT5zaW5fcG9ydCA9PSBycy0+cnNfY29ubl9wb3J0KSB7CisjZWxzZQorCQkJLyogRklYTUUgLSBuZWVkcyB0byBjb21wYXJlIHRoZSBsb2NhbCBhbmQgcmVtb3RlCisJCQkgKiBpcGFkZHIvcG9ydCB0dXBsZSwgYnV0IHRoZSBpcGFkZHIgaXMgdGhlIG9ubHkKKwkJCSAqIGF2YWlsYWJsZSBpbmZvbWF0aW9uIGluIHRoZSByZHNfc29jayAoYXMgdGhlIHJlc3QgYXJlCisJCQkgKiB6ZXJvJ2VkLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgcHJvcGVybHkgcG9wdWxhdGVkCisJCQkgKiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4uLgorCQkJICovCisJCQlpZiAoc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfYm91bmRfYWRkcikgeworI2VuZGlmCisJCQkJc3Bpbl91bmxvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCQkJCSpyZHNfaXdkZXYgPSBpd2RldjsKKwkJCQkqY21faWQgPSBpX2NtX2lkLT5jbV9pZDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X2FkZF9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCWlfY21faWQgPSBrbWFsbG9jKHNpemVvZiAqaV9jbV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpX2NtX2lkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlfY21faWQtPmNtX2lkID0gY21faWQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpX2NtX2lkLT5saXN0LCAmcmRzX2l3ZGV2LT5jbV9pZF9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9jbV9pZCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQlpZiAoaV9jbV9pZC0+Y21faWQgPT0gY21faWQpIHsKKwkJCWxpc3RfZGVsKCZpX2NtX2lkLT5saXN0KTsKKwkJCWtmcmVlKGlfY21faWQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKK30KKworCitpbnQgcmRzX2l3X3VwZGF0ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmNfYWRkciwgKmRzdF9hZGRyOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXZfb2xkOworCXN0cnVjdCByZHNfc29jayByczsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqcGNtX2lkOworCWludCByYzsKKworCXNyY19hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZjbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwlkc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY21faWQtPnJvdXRlLmFkZHIuZHN0X2FkZHI7CisKKwlycy5yc19ib3VuZF9hZGRyID0gc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKwlycy5yc19ib3VuZF9wb3J0ID0gc3JjX2FkZHItPnNpbl9wb3J0OworCXJzLnJzX2Nvbm5fYWRkciA9IGRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisJcnMucnNfY29ubl9wb3J0ID0gZHN0X2FkZHItPnNpbl9wb3J0OworCisJcmMgPSByZHNfaXdfZ2V0X2RldmljZSgmcnMsICZyZHNfaXdkZXZfb2xkLCAmcGNtX2lkKTsKKwlpZiAocmMpCisJCXJkc19pd19yZW1vdmVfY21faWQocmRzX2l3ZGV2LCBjbV9pZCk7CisKKwlyZXR1cm4gcmRzX2l3X2FkZF9jbV9pZChyZHNfaXdkZXYsIGNtX2lkKTsKK30KKworaW50IHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBjb25uIHdhcyBwcmV2aW91c2x5IG9uIHRoZSBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJml3X25vZGV2X2Nvbm5zKSk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWljLT5yZHNfaXdkZXYgPSByZHNfaXdkZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZpd19ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaXdfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCit2b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9zcGxpY2UoJnJkc19pd2Rldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGl3X25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfc2NhdHRlcmxpc3Qoc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCAqc2csCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IHNnX2xlbikKK3sKKwlzZy0+bGlzdCA9IGxpc3Q7CisJc2ctPmxlbiA9IHNnX2xlbjsKKwlzZy0+ZG1hX2xlbiA9IDA7CisJc2ctPmRtYV9ucGFnZXMgPSAwOworCXNnLT5ieXRlcyA9IDA7Cit9CisKK3N0YXRpYyB1NjQgKnJkc19pd19tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiwKKwkJCXN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgKnNnLAorCQkJdW5zaWduZWQgaW50IGRtYV9wYWdlX3NoaWZ0KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pd2Rldi0+ZGV2OworCXU2NCAqZG1hX3BhZ2VzID0gTlVMTDsKKwl1NjQgZG1hX21hc2s7CisJdW5zaWduZWQgaW50IGRtYV9wYWdlX3NpemU7CisJaW50IGksIGosIHJldDsKKworCWRtYV9wYWdlX3NpemUgPSAxIDw8IGRtYV9wYWdlX3NoaWZ0OworCWRtYV9tYXNrID0gZG1hX3BhZ2Vfc2l6ZSAtIDE7CisKKwlXQVJOX09OKHNnLT5kbWFfbGVuKTsKKworCXNnLT5kbWFfbGVuID0gaWJfZG1hX21hcF9zZyhkZXYsIHNnLT5saXN0LCBzZy0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KCFzZy0+ZG1hX2xlbikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBkbWFfbWFwX3NnIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCX0KKworCXNnLT5ieXRlcyA9IDA7CisJc2ctPmRtYV9ucGFnZXMgPSAwOworCisJcmV0ID0gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgc2ctPmRtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBlbmRfYWRkcjsKKworCQlzZy0+Ynl0ZXMgKz0gZG1hX2xlbjsKKworCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKKwkJaWYgKGRtYV9hZGRyICYgZG1hX21hc2spIHsKKwkJCWlmIChpID4gMCkKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJCWRtYV9hZGRyICY9IH5kbWFfbWFzazsKKwkJfQorCQlpZiAoZW5kX2FkZHIgJiBkbWFfbWFzaykgeworCQkJaWYgKGkgPCBzZy0+ZG1hX2xlbiAtIDEpCisJCQkJZ290byBvdXRfdW5tYXA7CisJCQllbmRfYWRkciA9IChlbmRfYWRkciArIGRtYV9tYXNrKSAmIH5kbWFfbWFzazsKKwkJfQorCisJCXNnLT5kbWFfbnBhZ2VzICs9IChlbmRfYWRkciAtIGRtYV9hZGRyKSA+PiBkbWFfcGFnZV9zaGlmdDsKKwl9CisKKwkvKiBOb3cgZ2F0aGVyIHRoZSBkbWEgYWRkcnMgaW50byBvbmUgbGlzdCAqLworCWlmIChzZy0+ZG1hX25wYWdlcyA+IGZhc3RyZWdfbWVzc2FnZV9zaXplKQorCQlnb3RvIG91dF91bm1hcDsKKworCWRtYV9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiBzZy0+ZG1hX25wYWdlcywgR0ZQX0FUT01JQyk7CisJaWYgKCFkbWFfcGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJZm9yIChpID0gaiA9IDA7IGkgPCBzZy0+ZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGVuZF9hZGRyOworCisJCWVuZF9hZGRyID0gZG1hX2FkZHIgKyBkbWFfbGVuOworCQlkbWFfYWRkciAmPSB+ZG1hX21hc2s7CisJCWZvciAoOyBkbWFfYWRkciA8IGVuZF9hZGRyOyBkbWFfYWRkciArPSBkbWFfcGFnZV9zaXplKQorCQkJZG1hX3BhZ2VzW2orK10gPSBkbWFfYWRkcjsKKwkJQlVHX09OKGogPiBzZy0+ZG1hX25wYWdlcyk7CisJfQorCisJcmV0dXJuIGRtYV9wYWdlczsKKworb3V0X3VubWFwOgorCWliX2RtYV91bm1hcF9zZyhyZHNfaXdkZXYtPmRldiwgc2ctPmxpc3QsIHNnLT5sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwlzZy0+ZG1hX2xlbiA9IDA7CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCisKK3N0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sOworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogcmRzX2l3X2NyZWF0ZV9tcl9wb29sIGFsbG9jIGVycm9yXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcG9vbC0+ZGV2aWNlID0gcmRzX2l3ZGV2OworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5kaXJ0eV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+Y2xlYW5fbGlzdCk7CisJbXV0ZXhfaW5pdCgmcG9vbC0+Zmx1c2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxpc3RfbG9jayk7CisJSU5JVF9XT1JLKCZwb29sLT5mbHVzaF93b3JrZXIsIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcik7CisKKwlwb29sLT5tYXhfbWVzc2FnZV9zaXplID0gZmFzdHJlZ19tZXNzYWdlX3NpemU7CisJcG9vbC0+bWF4X2l0ZW1zID0gZmFzdHJlZ19wb29sX3NpemU7CisJcG9vbC0+bWF4X2ZyZWVfcGlubmVkID0gcG9vbC0+bWF4X2l0ZW1zICogcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSAvIDQ7CisJcG9vbC0+bWF4X3BhZ2VzID0gZmFzdHJlZ19tZXNzYWdlX3NpemU7CisKKwkvKiBXZSBuZXZlciBhbGxvdyBtb3JlIHRoYW4gbWF4X2l0ZW1zIE1ScyB0byBiZSBhbGxvY2F0ZWQuCisJICogV2hlbiB3ZSBleGNlZWQgbW9yZSB0aGFuIG1heF9pdGVtc19zb2Z0LCB3ZSBzdGFydCBmcmVlaW5nCisJICogaXRlbXMgbW9yZSBhZ2dyZXNzaXZlbHkuCisJICogTWFrZSBzdXJlIHRoYXQgbWF4X2l0ZW1zID4gbWF4X2l0ZW1zX3NvZnQgPiBtYXhfaXRlbXMgLyAyCisJICovCisJcG9vbC0+bWF4X2l0ZW1zX3NvZnQgPSBwb29sLT5tYXhfaXRlbXMgKiAzIC8gNDsKKworCXJldHVybiBwb29sOworfQorCit2b2lkIHJkc19pd19nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisKKwlpaW5mby0+cmRtYV9tcl9tYXggPSBwb29sLT5tYXhfaXRlbXM7CisJaWluZm8tPnJkbWFfbXJfc2l6ZSA9IHBvb2wtPm1heF9wYWdlczsKK30KKwordm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCkKK3sKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKwlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAxKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSk7CisJa2ZyZWUocG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJkc19pd19tciAqcmRzX2l3X3JldXNlX2ZtcihzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnBvb2wtPmNsZWFuX2xpc3QpKSB7CisJCWlibXIgPSBsaXN0X2VudHJ5KHBvb2wtPmNsZWFuX2xpc3QubmV4dCwgc3RydWN0IHJkc19pd19tciwgbWFwcGluZy5tX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGlibXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2l3X21yICpyZHNfaXdfYWxsb2NfbXIoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJaW50IGVyciA9IDAsIGl0ZXIgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWJtciA9IHJkc19pd19yZXVzZV9mbXIocG9vbCk7CisJCWlmIChpYm1yKQorCQkJcmV0dXJuIGlibXI7CisKKwkJLyogTm8gY2xlYW4gTVJzIC0gbm93IHdlIGhhdmUgdGhlIGNob2ljZSBvZiBlaXRoZXIKKwkJICogYWxsb2NhdGluZyBhIGZyZXNoIE1SIHVwIHRvIHRoZSBsaW1pdCBpbXBvc2VkIGJ5IHRoZQorCQkgKiBkcml2ZXIsIG9yIGZsdXNoIGFueSBkaXJ0eSB1bnVzZWQgTVJzLgorCQkgKiBXZSB0cnkgdG8gYXZvaWQgc3RhbGxpbmcgaW4gdGhlIHNlbmQgcGF0aCBpZiBwb3NzaWJsZSwKKwkJICogc28gd2UgYWxsb2NhdGUgYXMgbG9uZyBhcyB3ZSdyZSBhbGxvd2VkIHRvLgorCQkgKgorCQkgKiBXZSdyZSBmdXNzeSB3aXRoIGVuZm9yY2luZyB0aGUgRk1SIGxpbWl0LCB0aG91Z2guIElmIHRoZSBkcml2ZXIKKwkJICogdGVsbHMgdXMgd2UgY2FuJ3QgdXNlIG1vcmUgdGhhbiBOIGZtcnMsIHdlIHNob3VsZG4ndCBzdGFydAorCQkgKiBhcmd1aW5nIHdpdGggaXQgKi8KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwb29sLT5pdGVtX2NvdW50KSA8PSBwb29sLT5tYXhfaXRlbXMpCisJCQlicmVhazsKKworCQlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKworCQlpZiAoKytpdGVyID4gMikgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF9kZXBsZXRlZCk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwkJfQorCisJCS8qIFdlIGRvIGhhdmUgc29tZSBlbXB0eSBNUnMuIEZsdXNoIHRoZW0gb3V0LiAqLworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX3dhaXQpOworCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9CisKKwlpYm1yID0ga3phbGxvYyhzaXplb2YoKmlibXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlibXIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmlibXItPm1hcHBpbmcubV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCWlibXItPm1hcHBpbmcubV9tciA9IGlibXI7CisKKwllcnIgPSByZHNfaXdfaW5pdF9mYXN0cmVnKHBvb2wsIGlibXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X25vX2NpZ2FyOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfYWxsb2MpOworCXJldHVybiBpYm1yOworCitvdXRfbm9fY2lnYXI6CisJaWYgKGlibXIpIHsKKwkJcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhwb29sLCBpYm1yKTsKKwkJa2ZyZWUoaWJtcik7CisJfQorCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3ZvaWQgcmRzX2l3X3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gaWJtci0+ZGV2aWNlOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShyZHNfaXdkZXYtPmRldiwgaWJtci0+bWFwcGluZy5tX3NnLmxpc3QsCisJCQlpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocmRzX2l3ZGV2LT5kZXYsIGlibXItPm1hcHBpbmcubV9zZy5saXN0LAorCQkJaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZHNfaXdfZmx1c2hfZ29hbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwl1bnNpZ25lZCBpbnQgaXRlbV9jb3VudDsKKworCWl0ZW1fY291bnQgPSBhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCk7CisJaWYgKGZyZWVfYWxsKQorCQlyZXR1cm4gaXRlbV9jb3VudDsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggb3VyIHBvb2wgb2YgTVJzLgorICogQXQgYSBtaW5pbXVtLCBhbGwgY3VycmVudGx5IHVudXNlZCBNUnMgYXJlIHVubWFwcGVkLgorICogSWYgdGhlIG51bWJlciBvZiBNUnMgYWxsb2NhdGVkIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSBhbHNvIHRyeQorICogdG8gZnJlZSBhcyBtYW55IE1ScyBhcyBuZWVkZWQgdG8gZ2V0IGJhY2sgdG8gdGhpcyBsaW1pdC4KKyAqLworc3RhdGljIGludCByZHNfaXdfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yLCAqbmV4dDsKKwlMSVNUX0hFQUQodW5tYXBfbGlzdCk7CisJTElTVF9IRUFEKGtpbGxfbGlzdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmZyZWVkID0gMCwgbmNsZWFuZWQgPSAwLCBmcmVlX2dvYWw7CisJaW50IHJldCA9IDA7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX2ZsdXNoKTsKKworCW11dGV4X2xvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCS8qIEdldCB0aGUgbGlzdCBvZiBhbGwgbWFwcGluZ3MgdG8gYmUgZGVzdHJveWVkICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZGlydHlfbGlzdCwgJnVubWFwX2xpc3QpOworCWlmIChmcmVlX2FsbCkKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+Y2xlYW5fbGlzdCwgJmtpbGxfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlmcmVlX2dvYWwgPSByZHNfaXdfZmx1c2hfZ29hbChwb29sLCBmcmVlX2FsbCk7CisKKwkvKiBCYXRjaGVkIGludmFsaWRhdGUgb2YgZGlydHkgTVJzLgorCSAqIEZvciBGTVIgYmFzZWQgTVJzLCB0aGUgbWFwcGluZ3Mgb24gdGhlIHVubWFwIGxpc3QgYXJlCisJICogYWN0dWFsbHkgbWVtYmVycyBvZiBhbiBpYm1yIChpYm1yLT5tYXBwaW5nKS4gVGhleSBlaXRoZXIKKwkgKiBtaWdyYXRlIHRvIHRoZSBraWxsX2xpc3QsIG9yIGhhdmUgYmVlbiBjbGVhbmVkIGFuZCBzaG91bGQgYmUKKwkgKiBtb3ZlZCB0byB0aGUgY2xlYW5fbGlzdC4KKwkgKiBGb3IgZmFzdHJlZ3MsIHRoZXkgd2lsbCBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGFuZAorCSAqIHdpbGwgYmUgZGVzdHJveWVkIGJ5IHRoZSB1bm1hcCBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnVubWFwX2xpc3QpKSB7CisJCW5jbGVhbmVkID0gcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChwb29sLCAmdW5tYXBfbGlzdCwgJmtpbGxfbGlzdCk7CisJCS8qIElmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gZGVzdHJveSBhbGwgTVJzLCBtb3ZlIHRob3NlCisJCSAqIHRoYXQgd2VyZSBzaW1wbHkgY2xlYW5lZCB0byB0aGUga2lsbCBsaXN0ICovCisJCWlmIChmcmVlX2FsbCkKKwkJCWxpc3Rfc3BsaWNlX2luaXQoJnVubWFwX2xpc3QsICZraWxsX2xpc3QpOworCX0KKworCS8qIERlc3Ryb3kgYW55IE1ScyB0aGF0IGFyZSBwYXN0IHRoZWlyIGJlc3QgYmVmb3JlIGRhdGUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWJtciwgbmV4dCwgJmtpbGxfbGlzdCwgbWFwcGluZy5tX2xpc3QpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfZnJlZSk7CisJCWxpc3RfZGVsKCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJCXJkc19pd19kZXN0cm95X2Zhc3RyZWcocG9vbCwgaWJtcik7CisJCWtmcmVlKGlibXIpOworCQluZnJlZWQrKzsKKwl9CisKKwkvKiBBbnl0aGluZyB0aGF0IHJlbWFpbnMgYXJlIGxhdW5kZXJlZCBpYm1ycywgd2hpY2ggd2UgY2FuIGFkZAorCSAqIGJhY2sgdG8gdGhlIGNsZWFuIGxpc3QuICovCisJaWYgKCFsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3Rfc3BsaWNlKCZ1bm1hcF9saXN0LCAmcG9vbC0+Y2xlYW5fbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCX0KKworCWF0b21pY19zdWIobmNsZWFuZWQsICZwb29sLT5kaXJ0eV9jb3VudCk7CisJYXRvbWljX3N1YihuZnJlZWQsICZwb29sLT5pdGVtX2NvdW50KTsKKworCW11dGV4X3VubG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19pd19tcl9wb29sLCBmbHVzaF93b3JrZXIpOworCisJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7Cit9CisKK3ZvaWQgcmRzX2l3X2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gaWJtci0+ZGV2aWNlLT5tcl9wb29sOworCisJcmRzZGVidWcoIlJEUy9JVzogZnJlZV9tciBuZW50cyAldVxuIiwgaWJtci0+bWFwcGluZy5tX3NnLmxlbik7CisJaWYgKCFwb29sKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gaXQgdG8gdGhlIHBvb2wncyBmcmVlIGxpc3QgKi8KKwlyZHNfaXdfZnJlZV9mYXN0cmVnKHBvb2wsIGlibXIpOworCisJLyogSWYgd2UndmUgcGlubmVkIHRvbyBtYW55IHBhZ2VzLCByZXF1ZXN0IGEgZmx1c2ggKi8KKwlpZiAoYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSA+PSBwb29sLT5tYXhfZnJlZV9waW5uZWQKKwkgfHwgYXRvbWljX3JlYWQoJnBvb2wtPmRpcnR5X2NvdW50KSA+PSBwb29sLT5tYXhfaXRlbXMgLyAxMCkKKwkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCisJaWYgKGludmFsaWRhdGUpIHsKKwkJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkpKSB7CisJCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNyZWF0ZWQgYSBNUiBtYXJrZWQKKwkJCSAqIGFzIHVzZV9vbmNlIGFuZCBpbnZhbGlkYXRlIGF0IHRoZSBzYW1lIHRpbWUuICovCisJCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2l3X2ZsdXNoX21ycyh2b2lkKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pd2RldiwgJnJkc19pd19kZXZpY2VzLCBsaXN0KSB7CisJCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IHJkc19pd2Rldi0+bXJfcG9vbDsKKworCQlpZiAocG9vbCkKKwkJCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KK30KKwordm9pZCAqcmRzX2l3X2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCWludCByZXQ7CisKKwlyZXQgPSByZHNfaXdfZ2V0X2RldmljZShycywgJnJkc19pd2RldiwgJmNtX2lkKTsKKwlpZiAocmV0IHx8ICFjbV9pZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJkc19pd2Rldi0+bXJfcG9vbCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpYm1yID0gcmRzX2l3X2FsbG9jX21yKHJkc19pd2Rldik7CisJaWYgKElTX0VSUihpYm1yKSkKKwkJcmV0dXJuIGlibXI7CisKKwlpYm1yLT5jbV9pZCA9IGNtX2lkOworCWlibXItPmRldmljZSA9IHJkc19pd2RldjsKKworCXJldCA9IHJkc19pd19tYXBfZmFzdHJlZyhyZHNfaXdkZXYtPm1yX3Bvb2wsIGlibXIsIHNnLCBuZW50cyk7CisJaWYgKHJldCA9PSAwKQorCQkqa2V5X3JldCA9IGlibXItPm1yLT5ya2V5OworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBmYWlsZWQgdG8gbWFwIG1yIChlcnJubz0lZClcbiIsIHJldCk7CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmIChpYm1yKQorCQkJcmRzX2l3X2ZyZWVfbXIoaWJtciwgMCk7CisJCWlibXIgPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBpYm1yOworfQorCisvKgorICogaVdBUlAgZmFzdHJlZyBoYW5kbGluZworICoKKyAqIFRoZSBsaWZlIGN5Y2xlIG9mIGEgZmFzdHJlZyByZWdpc3RyYXRpb24gaXMgYSBiaXQgZGlmZmVyZW50IGZyb20KKyAqIEZNUnMuCisgKiBUaGUgaWRlYSBiZWhpbmQgZmFzdHJlZyBpcyB0byBoYXZlIG9uZSBNUiwgdG8gd2hpY2ggd2UgYmluZCBkaWZmZXJlbnQKKyAqIG1hcHBpbmdzIG92ZXIgdGltZS4gVG8gYXZvaWQgc3RhbGxpbmcgb24gdGhlIGV4cGVuc2l2ZSBtYXAgYW5kIGludmFsaWRhdGUKKyAqIG9wZXJhdGlvbnMsIHRoZXNlIG9wZXJhdGlvbnMgYXJlIHBpcGVsaW5lZCBvbiB0aGUgc2FtZSBzZW5kIHF1ZXVlIG9uCisgKiB3aGljaCB3ZSB3YW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcl9rZXkuCisgKgorICogVGhpcyBjcmVhdGVzIGEgYml0IG9mIGEgcHJvYmxlbSBmb3IgdXMsIGFzIHdlIGRvIG5vdCBoYXZlIHRoZSBkZXN0aW5hdGlvbgorICogSVAgaW4gR0VUX01SLCBzbyB0aGUgY29ubmVjdGlvbiBtdXN0IGJlIHNldHVwIHByaW9yIHRvIHRoZSBHRVRfTVIgY2FsbCBmb3IKKyAqIFJETUEgdG8gYmUgY29ycmVjdGx5IHNldHVwLiAgSWYgYSBmYXN0cmVnIHJlcXVlc3QgaXMgcHJlc2VudCwgcmRzX2l3X3htaXQKKyAqIHdpbGwgdHJ5IHRvIHF1ZXVlIGEgTE9DQUxfSU5WIChpZiBuZWVkZWQpIGFuZCBhIEZBU1RfUkVHX01SIHdvcmsgcmVxdWVzdAorICogYmVmb3JlIHF1ZXVpbmcgdGhlIFNFTkQuIFdoZW4gY29tcGxldGlvbnMgZm9yIHRoZXNlIGFycml2ZSwgdGhleSBhcmUKKyAqIGRpc3BhdGNoZWQgdG8gdGhlIE1SIGhhcyBhIGJpdCBzZXQgc2hvd2luZyB0aGF0IFJETWEgY2FuIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBUaGVyZSBpcyBhbm90aGVyIGludGVyZXN0aW5nIGFzcGVjdCB0aGF0J3MgcmVsYXRlZCB0byBpbnZhbGlkYXRpb24uCisgKiBUaGUgYXBwbGljYXRpb24gY2FuIHJlcXVlc3QgdGhhdCBhIG1hcHBpbmcgaXMgaW52YWxpZGF0ZWQgaW4gRlJFRV9NUi4KKyAqIFRoZSBleHBlY3RhdGlvbiB0aGVyZSBpcyB0aGF0IHRoaXMgaW52YWxpZGF0aW9uIHN0ZXAgaW5jbHVkZXMgQUxMCisgKiBQUkVWSU9VU0xZIEZSRUVEIE1Scy4KKyAqLworc3RhdGljIGludCByZHNfaXdfaW5pdF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYgPSBwb29sLT5kZXZpY2U7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGFnZV9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgaWJfbXIgKm1yOworCWludCBlcnI7CisKKwltciA9IGliX2FsbG9jX2Zhc3RfcmVnX21yKHJkc19pd2Rldi0+cGQsIHBvb2wtPm1heF9tZXNzYWdlX3NpemUpOworCWlmIChJU19FUlIobXIpKSB7CisJCWVyciA9IFBUUl9FUlIobXIpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfbXIgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEZJWE1FIC0gdGhpcyBpcyBvdmVya2lsbCwgYnV0IG1hcHBpbmctPm1fc2cuZG1hX2xlbi9tYXBwaW5nLT5tX3NnLmRtYV9ucGFnZXMKKwkgKiBpcyBub3QgZmlsbGVkIGluLgorCSAqLworCXBhZ2VfbGlzdCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdChyZHNfaXdkZXYtPmRldiwgcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSk7CisJaWYgKElTX0VSUihwYWdlX2xpc3QpKSB7CisJCWVyciA9IFBUUl9FUlIocGFnZV9saXN0KTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCBmYWlsZWQgKGVycj0lZClcbiIsIGVycik7CisJCWliX2RlcmVnX21yKG1yKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpYm1yLT5wYWdlX2xpc3QgPSBwYWdlX2xpc3Q7CisJaWJtci0+bXIgPSBtcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfaXdfcmRtYV9idWlsZF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gbWFwcGluZy0+bV9tcjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciBmX3dyLCAqZmFpbGVkX3dyOworCWludCByZXQ7CisKKwkvKgorCSAqIFBlcmZvcm0gYSBXUiBmb3IgdGhlIGZhc3RfcmVnX21yLiBFYWNoIGluZGl2aWR1YWwgcGFnZQorCSAqIGluIHRoZSBzZyBsaXN0IGlzIGFkZGVkIHRvIHRoZSBmYXN0IHJlZyBwYWdlIGxpc3QgYW5kIHBsYWNlZAorCSAqIGluc2lkZSB0aGUgZmFzdF9yZWdfbXIgV1IuICBUaGUga2V5IHVzZWQgaXMgYSByb2xsaW5nIDhiaXQKKwkgKiBjb3VudGVyLCB3aGljaCBzaG91bGQgZ3VhcmFudGVlIHVuaXF1ZW5lc3MuCisJICovCisJaWJfdXBkYXRlX2Zhc3RfcmVnX2tleShpYm1yLT5tciwgaWJtci0+cmVtYXBfY291bnQrKyk7CisJbWFwcGluZy0+bV9ya2V5ID0gaWJtci0+bXItPnJrZXk7CisKKwltZW1zZXQoJmZfd3IsIDAsIHNpemVvZihmX3dyKSk7CisJZl93ci53cl9pZCA9IFJEU19JV19GQVNUX1JFR19XUl9JRDsKKwlmX3dyLm9wY29kZSA9IElCX1dSX0ZBU1RfUkVHX01SOworCWZfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gbWFwcGluZy0+bV9zZy5ieXRlczsKKwlmX3dyLndyLmZhc3RfcmVnLnJrZXkgPSBtYXBwaW5nLT5tX3JrZXk7CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBpYm1yLT5wYWdlX2xpc3Q7CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gbWFwcGluZy0+bV9zZy5kbWFfbGVuOworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IGlibXItPmRldmljZS0+cGFnZV9zaGlmdDsKKwlmX3dyLndyLmZhc3RfcmVnLmFjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCWZfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9IDA7CisJZl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWZhaWxlZF93ciA9ICZmX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYm1yLT5jbV9pZC0+cXAsICZmX3dyLCAmZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmX3dyKTsKKwlpZiAocmV0ICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiAlczolZCBpYl9wb3N0X3NlbmQgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfaXdfcmRtYV9mYXN0cmVnX2ludihzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXN0cnVjdCBpYl9zZW5kX3dyIHNfd3IsICpmYWlsZWRfd3I7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWlibXItPmNtX2lkLT5xcCB8fCAhaWJtci0+bXIpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KCZzX3dyLCAwLCBzaXplb2Yoc193cikpOworCXNfd3Iud3JfaWQgPSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lEOworCXNfd3Iub3Bjb2RlID0gSUJfV1JfTE9DQUxfSU5WOworCXNfd3IuZXguaW52YWxpZGF0ZV9ya2V5ID0gaWJtci0+bXItPnJrZXk7CisJc193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWZhaWxlZF93ciA9ICZzX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYm1yLT5jbV9pZC0+cXAsICZzX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAocmV0ICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6ICVzOiVkIGliX3Bvc3Rfc2VuZCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X21hcF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIsCisJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJdW5zaWduZWQgaW50IHNnX2xlbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gcG9vbC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZyA9ICZpYm1yLT5tYXBwaW5nOworCXU2NCAqZG1hX3BhZ2VzOworCWludCBpLCByZXQgPSAwOworCisJcmRzX2l3X3NldF9zY2F0dGVybGlzdCgmbWFwcGluZy0+bV9zZywgc2csIHNnX2xlbik7CisKKwlkbWFfcGFnZXMgPSByZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHJkc19pd2RldiwKKwkJCQkmbWFwcGluZy0+bV9zZywKKwkJCQlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQpOworCWlmIChJU19FUlIoZG1hX3BhZ2VzKSkgeworCQlyZXQgPSBQVFJfRVJSKGRtYV9wYWdlcyk7CisJCWRtYV9wYWdlcyA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtYXBwaW5nLT5tX3NnLmRtYV9sZW4gPiBwb29sLT5tYXhfbWVzc2FnZV9zaXplKSB7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1hcHBpbmctPm1fc2cuZG1hX25wYWdlczsgKytpKQorCQlpYm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtpXSA9IGRtYV9wYWdlc1tpXTsKKworCXJldCA9IHJkc19pd19yZG1hX2J1aWxkX2Zhc3RyZWcobWFwcGluZyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl91c2VkKTsKKworb3V0OgorCWtmcmVlKGRtYV9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogIkZyZWUiIGEgZmFzdHJlZyBNUi4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X2ZyZWVfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCFpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbikKKwkJcmV0dXJuOworCisJcmV0ID0gcmRzX2l3X3JkbWFfZmFzdHJlZ19pbnYoaWJtcik7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJLyogVHJ5IHRvIHBvc3QgdGhlIExPQ0FMX0lOViBXUiB0byB0aGUgcXVldWUuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJbGlzdF9hZGRfdGFpbCgmaWJtci0+bWFwcGluZy5tX2xpc3QsICZwb29sLT5kaXJ0eV9saXN0KTsKKwlhdG9taWNfYWRkKGlibXItPm1hcHBpbmcubV9zZy5sZW4sICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX2luYygmcG9vbC0+ZGlydHlfY291bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBfbGlzdCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpraWxsX2xpc3QpCit7CisJc3RydWN0IHJkc19pd19tYXBwaW5nICptYXBwaW5nLCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgbmNsZWFuZWQgPSAwOworCUxJU1RfSEVBRChsYXVuZGVyZWQpOworCisJLyogQmF0Y2hlZCBpbnZhbGlkYXRpb24gb2YgZmFzdHJlZyBNUnMuCisJICogV2h5IGRvIHdlIGRvIGl0IHRoaXMgd2F5LCBldmVuIHRob3VnaCB3ZSBjb3VsZCBwaXBlbGluZSB1bm1hcAorCSAqIGFuZCByZW1hcD8gVGhlIHJlYXNvbiBpcyB0aGUgYXBwbGljYXRpb24gc2VtYW50aWNzIC0gd2hlbiB0aGUKKwkgKiBhcHBsaWNhdGlvbiByZXF1ZXN0cyBhbiBpbnZhbGlkYXRpb24gb2YgTVJzLCBpdCBleHBlY3RzIGFsbAorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgUl9LZXlzIHRvIGJlY29tZSBpbnZhbGlkLgorCSAqCisJICogSWYgd2UgaW1wbGVtZW50IE1SIHJldXNlIG5haXZlbHksIHdlIHJpc2sgbWVtb3J5IGNvcnJ1cHRpb24KKwkgKiAodGhpcyBoYXMgYWN0dWFsbHkgYmVlbiBvYnNlcnZlZCkuIFNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yCisJICogcmVxdWlyZXMgdGhhdCBhIE1SIGdvZXMgdGhyb3VnaCBhbiBleHBsaWNpdCB1bm1hcCBvcGVyYXRpb24gYmVmb3JlCisJICogd2UgY2FuIHJldXNlIGl0IGFnYWluLgorCSAqCisJICogV2UgY291bGQgcHJvYmFibHkgaW1wcm92ZSBvbiB0aGlzIGEgbGl0dGxlLCBieSBhbGxvd2luZyBpbW1lZGlhdGUKKwkgKiByZXVzZSBvZiBhIE1SIG9uIHRoZSBzYW1lIHNvY2tldCAoZWcgeW91IGNvdWxkIGFkZCBzbWFsbAorCSAqIGNhY2hlIG9mIHVudXNlZCBNUnMgdG8gc3RyY3QgcmRzX3NvY2tldCAtIEdFVF9NUiBjb3VsZCBncmFiIG9uZQorCSAqIG9mIHRoZXNlIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IGludmFsaWRhdGUpLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSh1bm1hcF9saXN0KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcHBpbmcsIG5leHQsIHVubWFwX2xpc3QsIG1fbGlzdCkgeworCQkJbGlzdF9tb3ZlKCZtYXBwaW5nLT5tX2xpc3QsICZsYXVuZGVyZWQpOworCQkJbmNsZWFuZWQrKzsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBNb3ZlIGFsbCBsYXVuZGVyZWQgbWFwcGluZ3MgYmFjayB0byB0aGUgdW5tYXAgbGlzdC4KKwkgKiBXZSBkbyBub3Qga2lsbCBhbnkgV1JzIHJpZ2h0IG5vdyAtIGl0IGRvZXNuJ3Qgc2VlbSB0aGUKKwkgKiBmYXN0cmVnIEFQSSBoYXMgYSBtYXhfcmVtYXAgbGltaXQuICovCisJbGlzdF9zcGxpY2VfaW5pdCgmbGF1bmRlcmVkLCB1bm1hcF9saXN0KTsKKworCXJldHVybiBuY2xlYW5lZDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJaWYgKGlibXItPnBhZ2VfbGlzdCkKKwkJaWJfZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3QoaWJtci0+cGFnZV9saXN0KTsKKwlpZiAoaWJtci0+bXIpCisJCWliX2RlcmVnX21yKGlibXItPm1yKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmVjdi5jIGIvbmV0L3Jkcy9pd19yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MzFmMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmVjdi5jCkBAIC0wLDAgKzEsODY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaXdfaW5jb21pbmdfc2xhYjsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2l3X2ZyYWdfc2xhYjsKK3N0YXRpYyBhdG9taWNfdAlyZHNfaXdfYWxsb2NhdGlvbiA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgdm9pZCByZHNfaXdfZnJhZ19kcm9wX3BhZ2Uoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlfX2ZyZWVfcGFnZShmcmFnLT5mX3BhZ2UpOworCWZyYWctPmZfcGFnZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19mcmFnX2ZyZWUoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlCVUdfT04oZnJhZy0+Zl9wYWdlICE9IE5VTEwpOworCWttZW1fY2FjaGVfZnJlZShyZHNfaXdfZnJhZ19zbGFiLCBmcmFnKTsKK30KKworLyoKKyAqIFdlIG1hcCBhIHBhZ2UgYXQgYSB0aW1lLiAgSXRzIGZyYWdtZW50cyBhcmUgcG9zdGVkIGluIG9yZGVyLiAgVGhpcworICogaXMgY2FsbGVkIGluIGZyYWdtZW50IG9yZGVyIGFzIHRoZSBmcmFnbWVudHMgZ2V0IHNlbmQgY29tcGxldGlvbiBldmVudHMuCisgKiBPbmx5IHRoZSBsYXN0IGZyYWcgaW4gdGhlIHBhZ2UgcGVyZm9ybXMgdGhlIHVubWFwcGluZy4KKyAqCisgKiBJdCdzIE9LIGZvciByaW5nIGNsZWFudXAgdG8gY2FsbCB0aGlzIGluIHdoYXRldmVyIG9yZGVyIGl0IGxpa2VzIGJlY2F1c2UKKyAqIERNQSBpcyBub3QgaW4gZmxpZ2h0IGFuZCBzbyB3ZSBjYW4gdW5tYXAgd2hpbGUgb3RoZXIgcmluZyBlbnRyaWVzIHN0aWxsCisgKiBob2xkIHBhZ2UgcmVmZXJlbmNlcyBpbiB0aGVpciBmcmFncy4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2KQoreworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnID0gcmVjdi0+cl9mcmFnOworCisJcmRzZGVidWcoInJlY3YgJXAgZnJhZyAlcCBwYWdlICVwXG4iLCByZWN2LCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCWlmIChmcmFnLT5mX21hcHBlZCkKKwkJaWJfZG1hX3VubWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCSAgICAgICBmcmFnLT5mX21hcHBlZCwKKwkJCSAgICAgICBSRFNfRlJBR19TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWZyYWctPmZfbWFwcGVkID0gMDsKK30KKwordm9pZCByZHNfaXdfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHJlY3YgPSBpYy0+aV9yZWN2czsgaSA8IGljLT5pX3JlY3ZfcmluZy53X25yOyBpKyssIHJlY3YrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwkJcmVjdi0+cl93ci5uZXh0ID0gTlVMTDsKKwkJcmVjdi0+cl93ci53cl9pZCA9IGk7CisJCXJlY3YtPnJfd3Iuc2dfbGlzdCA9IHJlY3YtPnJfc2dlOworCQlyZWN2LT5yX3dyLm51bV9zZ2UgPSBSRFNfSVdfUkVDVl9TR0U7CisKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IDA7CisJCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfb25lKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkJICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdikKK3sKKwlpZiAocmVjdi0+cl9pd2luYykgeworCQlyZHNfaW5jX3B1dCgmcmVjdi0+cl9pd2luYy0+aWlfaW5jKTsKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJfQorCWlmIChyZWN2LT5yX2ZyYWcpIHsKKwkJcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisJCWlmIChyZWN2LT5yX2ZyYWctPmZfcGFnZSkKKwkJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZHNfaXdfZnJhZ19mcmVlKHJlY3YtPnJfZnJhZyk7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHJkc19pd19yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrKQorCQlyZHNfaXdfcmVjdl9jbGVhcl9vbmUoaWMsICZpYy0+aV9yZWN2c1tpXSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UpCisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZSgmaWMtPmlfZnJhZyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JlY3ZfcmVmaWxsX29uZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdiwKKwkJCQkgIGdmcF90IGtwdHJfZ2ZwLCBnZnBfdCBwYWdlX2dmcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChyZWN2LT5yX2l3aW5jID09IE5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZyZHNfaXdfYWxsb2NhdGlvbikgPj0gcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uKSB7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfYWxsb2NfbGltaXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVjdi0+cl9pd2luYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2l3X2luY29taW5nX3NsYWIsCisJCQkJCQkga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9pd2luYyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWF0b21pY19pbmMoJnJkc19pd19hbGxvY2F0aW9uKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfaXdpbmMtPmlpX2ZyYWdzKTsKKwkJcmRzX2luY19pbml0KCZyZWN2LT5yX2l3aW5jLT5paV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCX0KKworCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkgeworCQlyZWN2LT5yX2ZyYWcgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pd19mcmFnX3NsYWIsIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSk7CisJCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gTlVMTDsKKwl9CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkgeworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IGFsbG9jX3BhZ2UocGFnZV9nZnApOworCQlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlkbWFfYWRkciA9IGliX2RtYV9tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCSAgaWMtPmlfZnJhZy5mX3BhZ2UsCisJCQkJICBpYy0+aV9mcmFnLmZfb2Zmc2V0LAorCQkJCSAgUkRTX0ZSQUdfU0laRSwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGljLT5pX2NtX2lkLT5kZXZpY2UsIGRtYV9hZGRyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE9uY2Ugd2UgZ2V0IHRoZSBSRFNfUEFHRV9MQVNUX09GRiBmcmFnIHRoZW4gcmRzX2l3X2ZyYWdfdW5tYXAoKQorCSAqIG11c3QgYmUgY2FsbGVkIG9uIHRoaXMgcmVjdi4gIFRoaXMgaGFwcGVucyBhcyBjb21wbGV0aW9ucyBoaXQKKwkgKiBpbiBvcmRlciBvciBvbiBjb25uZWN0aW9uIHNodXRkb3duLgorCSAqLworCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gaWMtPmlfZnJhZy5mX3BhZ2U7CisJcmVjdi0+cl9mcmFnLT5mX29mZnNldCA9IGljLT5pX2ZyYWcuZl9vZmZzZXQ7CisJcmVjdi0+cl9mcmFnLT5mX21hcHBlZCA9IGRtYV9hZGRyOworCisJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gZG1hX2FkZHI7CisJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCisJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKHJlY3YgLSBpYy0+aV9yZWN2cykgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWdldF9wYWdlKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKTsKKworCWlmIChpYy0+aV9mcmFnLmZfb2Zmc2V0IDwgUkRTX1BBR0VfTEFTVF9PRkYpIHsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCArPSBSRFNfRlJBR19TSVpFOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKGljLT5pX2ZyYWcuZl9wYWdlKTsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBOVUxMOworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHRyaWVzIHRvIGFsbG9jYXRlIGFuZCBwb3N0IHVudXNlZCB3b3JrIHJlcXVlc3RzIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQKKyAqIHRoZXkgaGF2ZSBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXkgbmVlZCB0byBxdWV1ZSByZWNlaXZlZCBmcmFnbWVudHMgaW50bworICogc29ja2V0cy4gIFRoZSBpX3JlY3ZfbXV0ZXggaXMgaGVsZCBoZXJlIHNvIHRoYXQgcmluZ19hbGxvYyBhbmQgX3VuYWxsb2MKKyAqIHBhaXJzIGRvbid0IGdvIHVubWF0Y2hlZC4KKyAqCisgKiAtMSBpcyByZXR1cm5lZCBpZiBwb3N0aW5nIGZhaWxzIGR1ZSB0byB0ZW1wb3JhcnkgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKyAqLworaW50IHJkc19pd19yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2OworCXN0cnVjdCBpYl9yZWN2X3dyICpmYWlsZWRfd3I7CisJdW5zaWduZWQgaW50IHBvc3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisJdTMyIHBvczsKKworCXdoaWxlICgocHJlZmlsbCB8fCByZHNfY29ubl91cChjb25uKSkKKwkJCSYmIHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEsICZwb3MpKSB7CisJCWlmIChwb3MgPj0gaWMtPmlfcmVjdl9yaW5nLndfbnIpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiQXJnaCAtIHJpbmcgYWxsb2MgcmV0dXJuZWQgcG9zPSV1XG4iLAorCQkJCQlwb3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1twb3NdOworCQlyZXQgPSByZHNfaXdfcmVjdl9yZWZpbGxfb25lKGNvbm4sIHJlY3YsIGtwdHJfZ2ZwLCBwYWdlX2dmcCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBYWFggd2hlbiBjYW4gdGhpcyBmYWlsPyAqLworCQlyZXQgPSBpYl9wb3N0X3JlY3YoaWMtPmlfY21faWQtPnFwLCAmcmVjdi0+cl93ciwgJmZhaWxlZF93cik7CisJCXJkc2RlYnVnKCJyZWN2ICVwIGl3aW5jICVwIHBhZ2UgJXAgYWRkciAlbHUgcmV0ICVkXG4iLCByZWN2LAorCQkJIHJlY3YtPnJfaXdpbmMsIHJlY3YtPnJfZnJhZy0+Zl9wYWdlLAorCQkJIChsb25nKSByZWN2LT5yX2ZyYWctPmZfbWFwcGVkLCByZXQpOworCQlpZiAocmV0KSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmVjdiBwb3N0IG9uICIKKwkJCSAgICAgICAiJXBJNCByZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJICAgICAgIHJldCk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9zdGVkKys7CisJfQorCisJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sIC0gdXBkYXRlIHRoZSB3aW5kb3cuICovCisJaWYgKGljLT5pX2Zsb3djdGwgJiYgcG9zdGVkKQorCQlyZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoY29ubiwgcG9zdGVkKTsKKworCWlmIChyZXQpCisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqcG9zOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCXJkc2RlYnVnKCJwdXJnaW5nIGl3aW5jICVwIGluYyAlcFxuIiwgaXdpbmMsIGluYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgcG9zLCAmaXdpbmMtPmlpX2ZyYWdzLCBmX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmZnJhZy0+Zl9pdGVtKTsKKwkJcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKGZyYWcpOworCQlyZHNfaXdfZnJhZ19mcmVlKGZyYWcpOworCX0KK30KKwordm9pZCByZHNfaXdfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCisJcmRzX2l3X2luY19wdXJnZShpbmMpOworCXJkc2RlYnVnKCJmcmVlaW5nIGl3aW5jICVwIGluYyAlcFxuIiwgaXdpbmMsIGluYyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZpd2luYy0+aWlfZnJhZ3MpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2l3X2luY29taW5nX3NsYWIsIGl3aW5jKTsKKwlhdG9taWNfZGVjKCZyZHNfaXdfYWxsb2NhdGlvbik7CisJQlVHX09OKGF0b21pY19yZWFkKCZyZHNfaXdfYWxsb2NhdGlvbikgPCAwKTsKK30KKworaW50IHJkc19pd19pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGlvdmVjICppb3YgPSBmaXJzdF9pb3Y7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmYgPSAwOworCXVuc2lnbmVkIGxvbmcgaW92X29mZiA9IDA7CisJaW50IGNvcGllZCA9IDA7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCWZyYWcgPSBsaXN0X2VudHJ5KGl3aW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoIiVsdSBieXRlcyB0byB1c2VyIFslcCwgJXp1XSArICVsdSBmcm9tIGZyYWcgIgorCQkJICJbJXAsICVsdV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIGZyYWctPmZfcGFnZSwgZnJhZy0+Zl9vZmZzZXQsIGZyYWdfb2ZmKTsKKworCQkvKiBYWFggbmVlZHMgKyBvZmZzZXQgZm9yIG11bHRpcGxlIHJlY3ZzIHBlciBwYWdlICovCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihmcmFnLT5mX3BhZ2UsCisJCQkJCSAgICBmcmFnLT5mX29mZnNldCArIGZyYWdfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qIGljIHN0YXJ0cyBvdXQga3phbGxvYygpZWQgKi8KK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqd3IgPSAmaWMtPmlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UgKnNnZSA9ICZpYy0+aV9hY2tfc2dlOworCisJc2dlLT5hZGRyID0gaWMtPmlfYWNrX2RtYTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKworCXdyLT5zZ19saXN0ID0gc2dlOworCXdyLT5udW1fc2dlID0gMTsKKwl3ci0+b3Bjb2RlID0gSUJfV1JfU0VORDsKKwl3ci0+d3JfaWQgPSBSRFNfSVdfQUNLX1dSX0lEOworCXdyLT5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworfQorCisvKgorICogWW91J2QgdGhpbmsgdGhhdCB3aXRoIHJlbGlhYmxlIElCIGNvbm5lY3Rpb25zIHlvdSB3b3VsZG4ndCBuZWVkIHRvIGFjaworICogbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IElCIGhhcmR3YXJlIGdlbmVyYXRlcworICogYW4gYWNrIG1lc3NhZ2UgYmVmb3JlIGl0IGhhcyBETUFlZCB0aGUgbWVzc2FnZSBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhCisgKiBwb3RlbnRpYWwgbWVzc2FnZSBsb3NzIGlmIHRoZSBIQ0EgaXMgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0CisgKiBzZW5kcyB0aGUgYWNrIGFuZCBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhCisgKiBwb3RlbnRpYWwgaXNzdWUgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisgKgorICogV2hlbiB0aGUgcmVtb3RlIGhvc3QgcmVjZWl2ZXMgb3VyIGFjayB0aGV5J2xsIGZyZWUgdGhlIHNlbnQgbWVzc2FnZSBmcm9tCisgKiB0aGVpciBzZW5kIHF1ZXVlLiAgVG8gZGVjcmVhc2UgdGhlIGxhdGVuY3kgb2YgdGhpcyB3ZSBhbHdheXMgc2VuZCBhbiBhY2sKKyAqIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3ZlIHJlY2VpdmVkIG1lc3NhZ2VzLgorICoKKyAqIEZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGhhdmUgb25lIGFjayBpbiBmbGlnaHQgYXQgYSB0aW1lLiAgVGhpcyBwdXRzCisgKiBwcmVzc3VyZSBvbiBzZW5kZXJzIHRvIGhhdmUgZGVlcCBlbm91Z2ggc2VuZCBxdWV1ZXMgdG8gYWJzb3JiIHRoZSBsYXRlbmN5IG9mCisgKiBhIHNpbmdsZSBhY2sgZnJhbWUgYmVpbmcgaW4gZmxpZ2h0LiAgVGhpcyBtaWdodCBub3QgYmUgZ29vZCBlbm91Z2guCisgKgorICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZlIGEgbG9uZy1saXZlZCBzZW5kX3dyIGFuZCBzZ2Ugd2hpY2ggcG9pbnQgdG8gYQorICogc3RhdGljYWxseSBhbGxvY2F0ZWQgYWNrIGZyYW1lLiAgVGhpcyBhY2sgd3IgZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgcmluZworICogYWNjb3VudGluZyB0aGF0IHRoZSB0eCBhbmQgcnggd3JzIGRvLiAgVGhlIFFQIGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgbWFrZXMKKyAqIHJvb20gZm9yIGl0IGJleW9uZCB0aGUgcmluZyBzaXplLiAgU2VuZCBjb21wbGV0aW9uIG5vdGljZXMgaXRzIHNwZWNpYWwKKyAqIHdyX2lkIGFuZCBhdm9pZHMgd29ya2luZyB3aXRoIHRoZSByaW5nIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTY0IHNlcSwKKwkJCQlpbnQgYWNrX3JlcXVpcmVkKQoreworCXJkc19pd19zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOworCWlmIChhY2tfcmVxdWlyZWQpIHsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJfQorfQorCitzdGF0aWMgdTY0IHJkc19pd19nZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlyZXR1cm4gaWMtPmlfYWNrX25leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHMpCit7CisJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9IGljLT5pX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXU2NCBzZXE7CisJaW50IHJldDsKKworCXNlcSA9IHJkc19pd19nZXRfYWNrKGljKTsKKworCXJkc2RlYnVnKCJzZW5kX2FjazogaWMgJXAgYWNrICVsbHVcbiIsIGljLCAodW5zaWduZWQgbG9uZyBsb25nKSBzZXEpOworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihoZHIsIDAsIDAsIDApOworCWhkci0+aF9hY2sgPSBjcHVfdG9fYmU2NChzZXEpOworCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKGhkcik7CisJaWMtPmlfYWNrX3F1ZXVlZCA9IGppZmZpZXM7CisKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmaWMtPmlfYWNrX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQkvKiBGYWlsZWQgdG8gc2VuZC4gUmVsZWFzZSB0aGUgV1IsIGFuZAorCQkgKiBmb3JjZSBhbm90aGVyIEFDSy4KKwkJICovCisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfZmFpbHVyZSk7CisJCS8qIE5lZWQgdG8gZmluZXNzZSB0aGlzIGxhdGVyLiAqLworCQlCVUcoKTsKKwl9IGVsc2UKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW50KTsKK30KKworLyoKKyAqIFRoZXJlIGFyZSAzIHdheXMgb2YgZ2V0dGluZyBhY2tub3dsZWRnZW1lbnRzIHRvIHRoZSBwZWVyOgorICogIDEuCVdlIGNhbGwgcmRzX2l3X2F0dGVtcHRfYWNrIGZyb20gdGhlIHJlY3YgY29tcGxldGlvbiBoYW5kbGVyCisgKgl0byBzZW5kIGFuIEFDSy1vbmx5IGZyYW1lLgorICoJSG93ZXZlciwgdGhlcmUgY2FuIGJlIG9ubHkgb25lIHN1Y2ggZnJhbWUgaW4gdGhlIHNlbmQgcXVldWUKKyAqCWF0IGFueSB0aW1lLCBzbyB3ZSBtYXkgaGF2ZSB0byBwb3N0cG9uZSBpdC4KKyAqICAyLglXaGVuIGFub3RoZXIgKGRhdGEpIHBhY2tldCBpcyB0cmFuc21pdHRlZCB3aGlsZSB0aGVyZSdzCisgKglhbiBBQ0sgaW4gdGhlIHF1ZXVlLCB3ZSBwaWdneWJhY2sgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIKKyAqCW9uIHRoZSBkYXRhIHBhY2tldC4KKyAqICAzLglJZiB0aGUgQUNLIFdSIGlzIGRvbmUgc2VuZGluZywgd2UgZ2V0IGNhbGxlZCBmcm9tIHRoZQorICoJc2VuZCBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlJ3MKKyAqCWFub3RoZXIgQUNLIHBlbmRpbmcgKHBvc3Rwb25lZCBiZWNhdXNlIHRoZSBXUiB3YXMgb24gdGhlCisgKglxdWV1ZSkuIElmIHNvLCB3ZSB0cmFuc21pdCBpdC4KKyAqCisgKiBXZSBtYWludGFpbiAyIHZhcmlhYmxlczoKKyAqICAtCWlfYWNrX2ZsYWdzLCB3aGljaCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBBQ0sgV1IKKyAqCWlzIGN1cnJlbnRseSBpbiB0aGUgc2VuZCBxdWV1ZSBvciBub3QgKElCX0FDS19JTl9GTElHSFQpCisgKiAgLQlpX2Fja19uZXh0LCB3aGljaCBpcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgd2UgcmVjZWl2ZWQKKyAqCisgKiBQb3RlbnRpYWxseSwgc2VuZCBxdWV1ZSBhbmQgcmVjZWl2ZSBxdWV1ZSBoYW5kbGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKyAqCisgKiBSZWNvbm5lY3RpbmcgY29tcGxpY2F0ZXMgdGhpcyBwaWN0dXJlIGp1c3Qgc2xpZ2h0bHkuIFdoZW4gd2UKKyAqIHJlY29ubmVjdCwgd2UgbWF5IGJlIHNlZWluZyBkdXBsaWNhdGUgcGFja2V0cy4gVGhlIHBlZXIKKyAqIGlzIHJldHJhbnNtaXR0aW5nIHRoZW0sIGJlY2F1c2UgaXQgaGFzbid0IHNlZW4gYW4gQUNLIGZvcgorICogdGhlbS4gSXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgQUNLIHRoZXNlLgorICoKKyAqIEFDSyBtaXRpZ2F0aW9uIGFkZHMgYSBoZWFkZXIgZmxhZyAiQUNLX1JFUVVJUkVEIjsgYW55IHBhY2tldCB3aXRoCisgKiB0aGlzIGZsYWcgc2V0ICpNVVNUKiBiZSBhY2tub3dsZWRnZWQgaW1tZWRpYXRlbHkuCisgKi8KKworLyoKKyAqIFdoZW4gd2UgZ2V0IGhlcmUsIHdlJ3JlIGNhbGxlZCBmcm9tIHRoZSByZWN2IHF1ZXVlIGhhbmRsZXIuCisgKiBDaGVjayB3aGV0aGVyIHdlIG91Z2h0IHRvIHRyYW5zbWl0IGFuIEFDSy4KKyAqLwordm9pZCByZHNfaXdfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHM7CisKKwlpZiAoIXRlc3RfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKSkgeworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfZGVsYXllZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDYW4gd2UgZ2V0IGEgc2VuZCBjcmVkaXQ/ICovCisJaWYgKCFyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDEsICZhZHZfY3JlZGl0cywgMCkpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3Rocm90dGxlKTsKKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19zZW5kX2FjayhpYywgYWR2X2NyZWRpdHMpOworfQorCisvKgorICogV2UgZ2V0IGhlcmUgZnJvbSB0aGUgc2VuZCBjb21wbGV0aW9uIGhhbmRsZXIsIHdoZW4gdGhlCisgKiBhZGFwdGVyIHRlbGxzIHVzIHRoZSBBQ0sgZnJhbWUgd2FzIHNlbnQuCisgKi8KK3ZvaWQgcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19hdHRlbXB0X2FjayhpYyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgcmVndWxhciB4bWl0IGNvZGUgd2hlbiBpdCB3YW50cyB0byBwaWdneWJhY2sKKyAqIGFuIEFDSyBvbiBhbiBvdXRnb2luZyBmcmFtZS4KKyAqLwordTY0IHJkc19pd19waWdneWJfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX3BpZ2d5YmFja2VkKTsKKwlyZXR1cm4gcmRzX2l3X2dldF9hY2soaWMpOworfQorCisvKgorICogSXQncyBraW5kIG9mIGxhbWUgdGhhdCB3ZSdyZSBjb3B5aW5nIGZyb20gdGhlIHBvc3RlZCByZWNlaXZlIHBhZ2VzIGludG8KKyAqIGxvbmctbGl2ZWQgYml0bWFwcy4gIFdlIGNvdWxkIGhhdmUgcG9zdGVkIHRoZSBiaXRtYXBzIGFuZCByZG1hIHdyaXR0ZW4gaW50bworICogdGhlbS4gIEJ1dCByZWNlaXZpbmcgbmV3IGNvbmdlc3Rpb24gYml0bWFwcyBzaG91bGQgYmUgYSAqcmFyZSogZXZlbnQsIHNvCisgKiBob3BlZnVsbHkgd2Ugd29uJ3QgbmVlZCB0byBpbnZlc3QgdGhhdCBjb21wbGV4aXR5IGluIG1ha2luZyBpdCBtb3JlCisgKiBlZmZpY2llbnQuICBCeSBjb3B5aW5nIHdlIGNhbiBzaGFyZSBhIHNpbXBsZXIgY29yZSB3aXRoIFRDUCB3aGljaCBoYXMgdG8KKyAqIGNvcHkuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19jb25nX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICAgc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmMpCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXVuc2lnbmVkIGludCBtYXBfb2ZmOworCXVuc2lnbmVkIGludCBtYXBfcGFnZTsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGNvcGllZDsKKwl1aW50NjRfdCB1bmNvbmdlc3RlZCA9IDA7CisJdm9pZCAqYWRkcjsKKworCS8qIGNhdGNoIGNvbXBsZXRlbHkgY29ycnVwdCBwYWNrZXRzICovCisJaWYgKGJlMzJfdG9fY3B1KGl3aW5jLT5paV9pbmMuaV9oZHIuaF9sZW4pICE9IFJEU19DT05HX01BUF9CWVRFUykKKwkJcmV0dXJuOworCisJbWFwID0gY29ubi0+Y19mY29uZzsKKwltYXBfcGFnZSA9IDA7CisJbWFwX29mZiA9IDA7CisKKwlmcmFnID0gbGlzdF9lbnRyeShpd2luYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJZnJhZ19vZmYgPSAwOworCisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBSRFNfQ09OR19NQVBfQllURVMpIHsKKwkJdWludDY0X3QgKnNyYywgKmRzdDsKKwkJdW5zaWduZWQgaW50IGs7CisKKwkJdG9fY29weSA9IG1pbihSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYsIFBBR0VfU0laRSAtIG1hcF9vZmYpOworCQlCVUdfT04odG9fY29weSAmIDcpOyAvKiBNdXN0IGJlIDY0Yml0IGFsaWduZWQuICovCisKKwkJYWRkciA9IGttYXBfYXRvbWljKGZyYWctPmZfcGFnZSwgS01fU09GVElSUTApOworCisJCXNyYyA9IGFkZHIgKyBmcmFnX29mZjsKKwkJZHN0ID0gKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1ttYXBfcGFnZV0gKyBtYXBfb2ZmOworCQlmb3IgKGsgPSAwOyBrIDwgdG9fY29weTsgayArPSA4KSB7CisJCQkvKiBSZWNvcmQgcG9ydHMgdGhhdCBiZWNhbWUgdW5jb25nZXN0ZWQsIGllCisJCQkgKiBiaXRzIHRoYXQgY2hhbmdlZCBmcm9tIDAgdG8gMS4gKi8KKwkJCXVuY29uZ2VzdGVkIHw9IH4oKnNyYykgJiAqZHN0OworCQkJKmRzdCsrID0gKnNyYysrOworCQl9CisJCWt1bm1hcF9hdG9taWMoYWRkciwgS01fU09GVElSUTApOworCisJCWNvcGllZCArPSB0b19jb3B5OworCisJCW1hcF9vZmYgKz0gdG9fY29weTsKKwkJaWYgKG1hcF9vZmYgPT0gUEFHRV9TSVpFKSB7CisJCQltYXBfb2ZmID0gMDsKKwkJCW1hcF9wYWdlKys7CisJCX0KKworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwl9CisKKwkvKiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgaW4gbGl0dGxlIGVuZGlhbiBvcmRlciAqLworCXVuY29uZ2VzdGVkID0gbGU2NF90b19jcHUodW5jb25nZXN0ZWQpOworCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQobWFwLCB1bmNvbmdlc3RlZCk7Cit9CisKKy8qCisgKiBSaW5ncyBhcmUgcG9zdGVkIHdpdGggYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5J2xsIG5lZWQgdG8gcXVldWUgdGhlCisgKiBpbmNvbWluZyBtZXNzYWdlIHRvIHRoZSByZWNlaXZpbmcgc29ja2V0IHNvIHRoaXMgY2FuJ3QgZmFpbC4KKyAqIEFsbCBmcmFnbWVudHMgc3RhcnQgd2l0aCBhIGhlYWRlciwgc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVjZWl2aW5nCisgKiBnYXJiYWdlLCBhbmQgd2UgY2FuIHRlbGwgYSBzbWFsbCA4IGJ5dGUgZnJhZ21lbnQgZnJvbSBhbiBBQ0sgZnJhbWUuCisgKi8KK3N0cnVjdCByZHNfaXdfYWNrX3N0YXRlIHsKKwl1NjQJCWFja19uZXh0OworCXU2NAkJYWNrX3JlY3Y7CisJdW5zaWduZWQgaW50CWFja19yZXF1aXJlZDoxOworCXVuc2lnbmVkIGludAlhY2tfbmV4dF92YWxpZDoxOworCXVuc2lnbmVkIGludAlhY2tfcmVjdl92YWxpZDoxOworfTsKKworc3RhdGljIHZvaWQgcmRzX2l3X3Byb2Nlc3NfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YsIHUzMiBieXRlX2xlbiwKKwkJCQlzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmMgPSBpYy0+aV9pd2luYzsKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaWhkciwgKmhkcjsKKworCS8qIFhYWCBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gaWYgcG9ydCAwLDAgYXJlIHNlZW4/ICovCisKKwlyZHNkZWJ1ZygiaWMgJXAgaXdpbmMgJXAgcmVjdiAlcCBieXRlIGxlbiAldVxuIiwgaWMsIGl3aW5jLCByZWN2LAorCQkgYnl0ZV9sZW4pOworCisJaWYgKGJ5dGVfbGVuIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGRpZG4ndCBpbmNsdWUgYSAiCisJCSAgICAgICAiaGVhZGVyLCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZXR1cm47CisJfQorCWJ5dGVfbGVuIC09IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlpaGRyID0gJmljLT5pX3JlY3ZfaGRyc1tyZWN2IC0gaWMtPmlfcmVjdnNdOworCisJLyogVmFsaWRhdGUgdGhlIGNoZWNrc3VtLiAqLworCWlmICghcmRzX21lc3NhZ2VfdmVyaWZ5X2NoZWNrc3VtKGloZHIpKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgaGFzIGNvcnJ1cHRlZCBoZWFkZXIgLSAiCisJCSAgICAgICAiZm9yY2luZyBhIHJlY29ubmVjdFxuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9iYWRfY2hlY2tzdW0pOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyB0aGUgQUNLIHNlcXVlbmNlIHdoaWNoIGNvbWVzIHdpdGggZXZlcnkgcGFja2V0ICovCisJc3RhdGUtPmFja19yZWN2ID0gYmU2NF90b19jcHUoaWhkci0+aF9hY2spOworCXN0YXRlLT5hY2tfcmVjdl92YWxpZCA9IDE7CisKKwkvKiBQcm9jZXNzIHRoZSBjcmVkaXRzIHVwZGF0ZSBpZiB0aGVyZSB3YXMgb25lICovCisJaWYgKGloZHItPmhfY3JlZGl0KQorCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBpaGRyLT5oX2NyZWRpdCk7CisKKwlpZiAoaWhkci0+aF9zcG9ydCA9PSAwICYmIGloZHItPmhfZHBvcnQgPT0gMCAmJiBieXRlX2xlbiA9PSAwKSB7CisJCS8qIFRoaXMgaXMgYW4gQUNLLW9ubHkgcGFja2V0LiBUaGUgZmFjdCB0aGF0IGl0IGdldHMKKwkJICogc3BlY2lhbCB0cmVhdG1lbnQgaGVyZSBpcyB0aGF0IGhpc3RvcmljYWxseSwgQUNLcworCQkgKiB3ZXJlIHJhdGhlciBzcGVjaWFsIGJlYXN0cy4KKwkJICovCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfcmVjZWl2ZWQpOworCisJCS8qCisJCSAqIFVzdWFsbHkgdGhlIGZyYWdzIG1ha2UgdGhlaXIgd2F5IG9uIHRvIGluY3MgYW5kIGFyZSB0aGVuIGZyZWVkIGFzCisJCSAqIHRoZSBpbmMgaXMgZnJlZWQuICBXZSBkb24ndCBnbyB0aGF0IHJvdXRlLCBzbyB3ZSBoYXZlIHRvIGRyb3AgdGhlCisJCSAqIHBhZ2UgcmVmIG91cnNlbHZlcy4gIFdlIGNhbid0IGp1c3QgbGVhdmUgdGhlIHBhZ2Ugb24gdGhlIHJlY3YKKwkJICogYmVjYXVzZSB0aGF0IGNvbmZ1c2VzIHRoZSBkbWEgbWFwcGluZyBvZiBwYWdlcyBhbmQgZWFjaCByZWN2J3MgdXNlCisJCSAqIG9mIGEgcGFydGlhbCBwYWdlLiAgV2UgY2FuIGxlYXZlIHRoZSBmcmFnLCB0aG91Z2gsIGl0IHdpbGwgYmUKKwkJICogcmV1c2VkLgorCQkgKgorCQkgKiBGSVhNRTogRm9sZCB0aGlzIGludG8gdGhlIGNvZGUgcGF0aCBiZWxvdy4KKwkJICovCisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gaW5jIG9uIHRoZSBjb25uZWN0aW9uIHRoZW4gdGhpcworCSAqIGZyYWdtZW50IGhhcyBhIGhlYWRlciBhbmQgc3RhcnRzIGEgbWVzc2FnZS4uIGNvcHkgaXRzIGhlYWRlcgorCSAqIGludG8gdGhlIGluYyBhbmQgc2F2ZSB0aGUgaW5jIHNvIHdlIGNhbiBoYW5nIHVwY29taW5nIGZyYWdtZW50cworCSAqIG9mZiBpdHMgbGlzdC4KKwkgKi8KKwlpZiAoaXdpbmMgPT0gTlVMTCkgeworCQlpd2luYyA9IHJlY3YtPnJfaXdpbmM7CisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCQlpYy0+aV9pd2luYyA9IGl3aW5jOworCisJCWhkciA9ICZpd2luYy0+aWlfaW5jLmlfaGRyOworCQltZW1jcHkoaGRyLCBpaGRyLCBzaXplb2YoKmhkcikpOworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gYmUzMl90b19jcHUoaGRyLT5oX2xlbik7CisKKwkJcmRzZGVidWcoImljICVwIGl3aW5jICVwIHJlbSAldSBmbGFnIDB4JXhcbiIsIGljLCBpd2luYywKKwkJCSBpYy0+aV9yZWN2X2RhdGFfcmVtLCBoZHItPmhfZmxhZ3MpOworCX0gZWxzZSB7CisJCWhkciA9ICZpd2luYy0+aWlfaW5jLmlfaGRyOworCQkvKiBXZSBjYW4ndCBqdXN0IHVzZSBtZW1jbXAgaGVyZTsgZnJhZ21lbnRzIG9mIGEKKwkJICogc2luZ2xlIG1lc3NhZ2UgbWF5IGNhcnJ5IGRpZmZlcmVudCBBQ0tzICovCisJCWlmIChoZHItPmhfc2VxdWVuY2UgIT0gaWhkci0+aF9zZXF1ZW5jZQorCQkgfHwgaGRyLT5oX2xlbiAhPSBpaGRyLT5oX2xlbgorCQkgfHwgaGRyLT5oX3Nwb3J0ICE9IGloZHItPmhfc3BvcnQKKwkJIHx8IGhkci0+aF9kcG9ydCAhPSBpaGRyLT5oX2Rwb3J0KSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLAorCQkJCSJmcmFnbWVudCBoZWFkZXIgbWlzbWF0Y2g7IGZvcmNpbmcgcmVjb25uZWN0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWxpc3RfYWRkX3RhaWwoJnJlY3YtPnJfZnJhZy0+Zl9pdGVtLCAmaXdpbmMtPmlpX2ZyYWdzKTsKKwlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJaWYgKGljLT5pX3JlY3ZfZGF0YV9yZW0gPiBSRFNfRlJBR19TSVpFKQorCQlpYy0+aV9yZWN2X2RhdGFfcmVtIC09IFJEU19GUkFHX1NJWkU7CisJZWxzZSB7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSAwOworCQlpYy0+aV9pd2luYyA9IE5VTEw7CisKKwkJaWYgKGl3aW5jLT5paV9pbmMuaV9oZHIuaF9mbGFncyA9PSBSRFNfRkxBR19DT05HX0JJVE1BUCkKKwkJCXJkc19pd19jb25nX3JlY3YoY29ubiwgaXdpbmMpOworCQllbHNlIHsKKwkJCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfZmFkZHIsIGNvbm4tPmNfbGFkZHIsCisJCQkJCSAgJml3aW5jLT5paV9pbmMsIEdGUF9BVE9NSUMsCisJCQkJCSAgS01fU09GVElSUTApOworCQkJc3RhdGUtPmFja19uZXh0ID0gYmU2NF90b19jcHUoaGRyLT5oX3NlcXVlbmNlKTsKKwkJCXN0YXRlLT5hY2tfbmV4dF92YWxpZCA9IDE7CisJCX0KKworCQkvKiBFdmFsdWF0ZSB0aGUgQUNLX1JFUVVJUkVEIGZsYWcgKmFmdGVyKiB3ZSByZWNlaXZlZAorCQkgKiB0aGUgY29tcGxldGUgZnJhbWUsIGFuZCBhZnRlciBidW1waW5nIHRoZSBuZXh0X3J4CisJCSAqIHNlcXVlbmNlLiAqLworCQlpZiAoaGRyLT5oX2ZsYWdzICYgUkRTX0ZMQUdfQUNLX1JFUVVJUkVEKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9hY2tfcmVxdWlyZWQpOworCQkJc3RhdGUtPmFja19yZXF1aXJlZCA9IDE7CisJCX0KKworCQlyZHNfaW5jX3B1dCgmaXdpbmMtPmlpX2luYyk7CisJfQorfQorCisvKgorICogUGx1Y2tpbmcgdGhlIG9sZGVzdCBlbnRyeSBmcm9tIHRoZSByaW5nIGNhbiBiZSBkb25lIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgdGhyZWFkIHJlZmlsbGluZyB0aGUgcmluZy4gIEVhY2ggcmluZyBvcGVyYXRpb24gaXMgcHJvdGVjdGVkIGJ5CisgKiBzcGlubG9ja3MgYW5kIHRoZSB0cmFuc2llbnQgc3RhdGUgb2YgcmVmaWxsaW5nIGRvZXNuJ3QgY2hhbmdlIHRoZQorICogcmVjb3JkaW5nIG9mIHdoaWNoIGVudHJ5IGlzIG9sZGVzdC4KKyAqCisgKiBUaGlzIHJlbGllcyBvbiBJQiBvbmx5IGNhbGxpbmcgb25lIGNxIGNvbXBfaGFuZGxlciBmb3IgZWFjaCBjcSBzbyB0aGF0CisgKiB0aGVyZSB3aWxsIG9ubHkgYmUgb25lIGNhbGxlciBvZiByZHNfcmVjdl9pbmNvbWluZygpIHBlciBSRFMgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSBzdGF0ZSA9IHsgMCwgfTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKworCXJkc2RlYnVnKCJjb25uICVwIGNxICVwXG4iLCBjb25uLCBjcSk7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfY3FfY2FsbCk7CisKKwlpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9TT0xJQ0lURUQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NxX2V2ZW50KTsKKworCQlyZWN2ID0gJmljLT5pX3JlY3ZzW3Jkc19pd19yaW5nX29sZGVzdCgmaWMtPmlfcmVjdl9yaW5nKV07CisKKwkJcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisKKwkJLyoKKwkJICogQWxzbyBwcm9jZXNzIHJlY3ZzIGluIGNvbm5lY3Rpbmcgc3RhdGUgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZQorCQkgKiB0byBnZXQgYSByZWN2IGNvbXBsZXRpb24gX2JlZm9yZV8gdGhlIHJkbWFjbSBFU1RBQkxJU0hFRAorCQkgKiBldmVudCBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlpZiAocmRzX2Nvbm5fdXAoY29ubikgfHwgcmRzX2Nvbm5fY29ubmVjdGluZyhjb25uKSkgeworCQkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJCWlmICh3Yy5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykgeworCQkJCXJkc19pd19wcm9jZXNzX3JlY3YoY29ubiwgcmVjdiwgd2MuYnl0ZV9sZW4sICZzdGF0ZSk7CisJCQl9IGVsc2UgeworCQkJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZWN2IGNvbXBsZXRpb24gb24gIgorCQkJCSAgICAgICAiJXBJNCBoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJCSAgICAgICB3Yy5zdGF0dXMpOworCQkJfQorCQl9CisKKwkJcmRzX2l3X3JpbmdfZnJlZSgmaWMtPmlfcmVjdl9yaW5nLCAxKTsKKwl9CisKKwlpZiAoc3RhdGUuYWNrX25leHRfdmFsaWQpCisJCXJkc19pd19zZXRfYWNrKGljLCBzdGF0ZS5hY2tfbmV4dCwgc3RhdGUuYWNrX3JlcXVpcmVkKTsKKwlpZiAoc3RhdGUuYWNrX3JlY3ZfdmFsaWQgJiYgc3RhdGUuYWNrX3JlY3YgPiBpYy0+aV9hY2tfcmVjdikgeworCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIHN0YXRlLmFja19yZWN2LCBOVUxMKTsKKwkJaWMtPmlfYWNrX3JlY3YgPSBzdGF0ZS5hY2tfcmVjdjsKKwl9CisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworCisJLyogSWYgd2UgZXZlciBlbmQgdXAgd2l0aCBhIHJlYWxseSBlbXB0eSByZWNlaXZlIHJpbmcsIHdlJ3JlCisJICogaW4gZGVlcCB0cm91YmxlLCBhcyB0aGUgc2VuZGVyIHdpbGwgZGVmaW5pdGVseSBzZWUgUk5SCisJICogdGltZW91dHMuICovCisJaWYgKHJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfcmluZ19lbXB0eSk7CisKKwkvKgorCSAqIElmIHRoZSByaW5nIGlzIHJ1bm5pbmcgbG93LCB0aGVuIHNjaGVkdWxlIHRoZSB0aHJlYWQgdG8gcmVmaWxsLgorCSAqLworCWlmIChyZHNfaXdfcmluZ19sb3coJmljLT5pX3JlY3ZfcmluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7Cit9CisKK2ludCByZHNfaXdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcFxuIiwgY29ubik7CisKKwkvKgorCSAqIElmIHdlIGdldCBhIHRlbXBvcmFyeSBwb3N0aW5nIGZhaWx1cmUgaW4gdGhpcyBjb250ZXh0IHRoZW4KKwkgKiB3ZSdyZSByZWFsbHkgbG93IGFuZCB3ZSB3YW50IHRoZSBjYWxsZXIgdG8gYmFjayBvZmYgZm9yIGEgYml0LgorCSAqLworCW11dGV4X2xvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCWlmIChyZHNfaXdfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAwKSkKKwkJcmV0ID0gLUVOT01FTTsKKwllbHNlCisJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9yZWZpbGxfZnJvbV90aHJlYWQpOworCW11dGV4X3VubG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisKKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pd19hdHRlbXB0X2FjayhpYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pbml0IHJkc19pd19yZWN2X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzaW5mbyBzaTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCS8qIERlZmF1bHQgdG8gMzAlIG9mIGFsbCBhdmFpbGFibGUgUkFNIGZvciByZWN2IG1lbW9yeSAqLworCXNpX21lbWluZm8oJnNpKTsKKwlyZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24gPSBzaS50b3RhbHJhbSAvIDMgKiBQQUdFX1NJWkUgLyBSRFNfRlJBR19TSVpFOworCisJcmRzX2l3X2luY29taW5nX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2l3X2luY29taW5nIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaXdfaW5jb21pbmcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2l3X2luY29taW5nX3NsYWIgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaXdfZnJhZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pd19mcmFnIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfcGFnZV9mcmFnKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pd19mcmFnX3NsYWIgPT0gTlVMTCkKKwkJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19pbmNvbWluZ19zbGFiKTsKKwllbHNlCisJCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfcmVjdl9leGl0KHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19pbmNvbWluZ19zbGFiKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2l3X2ZyYWdfc2xhYik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JpbmcuYyBiL25ldC9yZHMvaXdfcmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjJkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JpbmcuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCisvKgorICogTG9ja2luZyBmb3IgSUIgcmluZ3MuCisgKiBXZSBhc3N1bWUgdGhhdCBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm90ZWN0ZWQgYnkgYSBtdXRleAorICogaW4gdGhlIGNhbGxlciAodGhpcyBpcyBhIHZhbGlkIGFzc3VtcHRpb24gZm9yIHRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRhdGlvbikuCisgKgorICogRnJlZWluZyBhbHdheXMgaGFwcGVucyBpbiBhbiBpbnRlcnJ1cHQsIGFuZCBoZW5jZSBvbmx5CisgKiByYWNlcyB3aXRoIGFsbG9jYXRpb25zLCBidXQgbm90IHdpdGggb3RoZXIgZnJlZSgpcy4KKyAqCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGlzIHRoYXQKKyAqIHRoZSBhbGxvYyBjb2RlIGhhcyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmcmVlIGVudHJpZXMuCisgKiBUbyB0aGlzIGVuZCwgd2UgbWFpbnRhaW4gdHdvIGNvdW50ZXJzOyBhbiBhbGxvY2F0aW9uIGNvdW50ZXIKKyAqIGFuZCBhIGZyZWUgY291bnRlci4gQm90aCBhcmUgYWxsb3dlZCB0byBydW4gZnJlZWx5LCBhbmQgd3JhcAorICogYXJvdW5kLgorICogVGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaXMgYWx3YXlzIChhbGxvY19jdHIgLSBmcmVlX2N0cikgJSBOUi4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWtlcyBmcmVlX2N0ciBhdG9taWMuIFdoZW4gdGhlCisgKiBjYWxsZXIgZmluZHMgYW4gYWxsb2NhdGlvbiBmYWlscywgaXQgc2hvdWxkIHNldCBhbiAiYWxsb2MgZmFpbCIKKyAqIGJpdCBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uIFRoZSAiYWxsb2MgZmFpbCIgYml0IGVzc2VudGlhbGx5IHRlbGxzCisgKiB0aGUgQ1EgY29tcGxldGlvbiBoYW5kbGVycyB0byB3YWtlIGl0IHVwIGFmdGVyIGZyZWVpbmcgc29tZQorICogbW9yZSBlbnRyaWVzLgorICovCisKKy8qCisgKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBzaHV0ZG93bi4KKyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2l3X3JpbmdfZW1wdHlfd2FpdCk7CisKK3ZvaWQgcmRzX2l3X3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCW1lbXNldChyaW5nLCAwLCBzaXplb2YoKnJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7CisJcmRzZGVidWcoInJpbmcgJXAgbnIgJXVcbiIsIHJpbmcsIHJpbmctPndfbnIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX3Jkc19pd19yaW5nX3VzZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJdTMyIGRpZmY7CisKKwkvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBoYXMgYXQgbGVhc3QgYXMgbWFueSBiaXRzIGFzIHUzMiAqLworCWRpZmYgPSByaW5nLT53X2FsbG9jX2N0ciAtICh1MzIpIGF0b21pY19yZWFkKCZyaW5nLT53X2ZyZWVfY3RyKTsKKwlCVUdfT04oZGlmZiA+IHJpbmctPndfbnIpOworCisJcmV0dXJuIGRpZmY7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJLyogV2Ugb25seSBldmVyIGdldCBjYWxsZWQgZnJvbSB0aGUgY29ubmVjdGlvbiBzZXR1cCBjb2RlLAorCSAqIHByaW9yIHRvIGNyZWF0aW5nIHRoZSBRUC4gKi8KKwlCVUdfT04oX19yZHNfaXdfcmluZ191c2VkKHJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpID09IDA7Cit9CisKK3UzMiByZHNfaXdfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpCit7CisJdTMyIHJldCA9IDAsIGF2YWlsOworCisJYXZhaWwgPSByaW5nLT53X25yIC0gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpOworCisJcmRzZGVidWcoInJpbmcgJXAgdmFsICV1IG5leHQgJXUgZnJlZSAldVxuIiwgcmluZywgdmFsLAorCQkgcmluZy0+d19hbGxvY19wdHIsIGF2YWlsKTsKKworCWlmICh2YWwgJiYgYXZhaWwpIHsKKwkJcmV0ID0gbWluKHZhbCwgYXZhaWwpOworCQkqcG9zID0gcmluZy0+d19hbGxvY19wdHI7CisKKwkJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgKyByZXQpICUgcmluZy0+d19ucjsKKwkJcmluZy0+d19hbGxvY19jdHIgKz0gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2ZyZWVfcHRyID0gKHJpbmctPndfZnJlZV9wdHIgKyB2YWwpICUgcmluZy0+d19ucjsKKwlhdG9taWNfYWRkKHZhbCwgJnJpbmctPndfZnJlZV9jdHIpOworCisJaWYgKF9fcmRzX2l3X3JpbmdfZW1wdHkocmluZykgJiYKKwkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX2l3X3JpbmdfZW1wdHlfd2FpdCkpCisJCXdha2VfdXAoJnJkc19pd19yaW5nX2VtcHR5X3dhaXQpOworfQorCit2b2lkIHJkc19pd19yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgLSB2YWwpICUgcmluZy0+d19ucjsKKwlyaW5nLT53X2FsbG9jX2N0ciAtPSB2YWw7Cit9CisKK2ludCByZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ19lbXB0eShyaW5nKTsKK30KKworaW50IHJkc19pd19yaW5nX2xvdyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpIDw9IChyaW5nLT53X25yID4+IDIpOworfQorCisKKy8qCisgKiByZXR1cm5zIHRoZSBvbGRlc3QgYWxsb2NlZCByaW5nIGVudHJ5LiAgVGhpcyB3aWxsIGJlIHRoZSBuZXh0IG9uZQorICogZnJlZWQuICBUaGlzIGNhbid0IGJlIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm9uZSBhbGxvY2F0ZWQuCisgKi8KK3UzMiByZHNfaXdfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIHJpbmctPndfZnJlZV9wdHI7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHdvcmsgcmVxdWVzdHMuCisgKi8KKwordTMyIHJkc19pd19yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KQoreworCXUzMiByZXQ7CisKKwlpZiAob2xkZXN0IDw9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQpCisJCXJldCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgLSBvbGRlc3QgKyAxOworCWVsc2UKKwkJcmV0ID0gcmluZy0+d19uciAtIG9sZGVzdCArICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgKyAxOworCisJcmRzZGVidWcoInJpbmcgJXAgcmV0ICV1IHdyX2lkICV1IG9sZGVzdCAldVxuIiwgcmluZywgcmV0LAorCQkgd3JfaWQsIG9sZGVzdCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkZDM4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfc2VuZC5jCkBAIC0wLDAgKzEsOTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkJICAgICAgaW50IHdjX3N0YXR1cykKK3sKKwlpbnQgbm90aWZ5X3N0YXR1czsKKworCXN3aXRjaCAod2Nfc3RhdHVzKSB7CisJY2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6CisJCXJldHVybjsKKworCWNhc2UgSUJfV0NfU1VDQ0VTUzoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJCWJyZWFrOworCisJY2FzZSBJQl9XQ19SRU1fQUNDRVNTX0VSUjoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1JFTU9URV9FUlJPUjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfT1RIRVJfRVJST1I7CisJCWJyZWFrOworCX0KKwlyZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHJtLCBub3RpZnlfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJaWYgKG9wLT5yX21hcHBlZCkgeworCQlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywKKwkJCW9wLT5yX3dyaXRlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCW9wLT5yX21hcHBlZCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF91bm1hcF9ybShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJICBzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCwKKwkJCSAgaW50IHdjX3N0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gc2VuZC0+c19ybTsKKworCXJkc2RlYnVnKCJpYyAlcCBzZW5kICVwIHJtICVwXG4iLCBpYywgc2VuZCwgcm0pOworCisJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCSAgICAgcm0tPm1fc2csIHJtLT5tX25lbnRzLAorCQkgICAgIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkgeworCQlyZHNfaXdfc2VuZF91bm1hcF9yZG1hKGljLCBybS0+bV9yZG1hX29wKTsKKworCQkvKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgYSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBvbiB0aGlzCisJCSAqIG1lc3NhZ2UsIHdlIGNhbiBpbXBsZW1lbnQgdGhyZWUgZGlmZmVyZW50IHNlbWFudGljczoKKwkJICogIDEuCU5vdGlmeSB3aGVuIHdlIHJlY2VpdmVkIHRoZSBBQ0sgb24gdGhlIFJEUyBtZXNzYWdlCisJCSAqCXRoYXQgd2FzIHF1ZXVlZCB3aXRoIHRoZSBSRE1BLiBUaGlzIHByb3ZpZGVzIHJlbGlhYmxlCisJCSAqCW5vdGlmaWNhdGlvbiBvZiBSRE1BIHN0YXR1cyBhdCB0aGUgZXhwZW5zZSBvZiBhIG9uZS13YXkKKwkJICoJcGFja2V0IGRlbGF5LgorCQkgKiAgMi4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgUkRNQSBvcGVyYXRpb24uCisJCSAqICAzLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBhY2NvbXBhbnlpbmcgUkRTIG1lc3NhZ2VzLgorCQkgKiBIZXJlLCB3ZSBpbXBsZW1lbnQgYXBwcm9hY2ggIzMuIFRvIGltcGxlbWVudCBhcHByb2FjaCAjMiwKKwkJICogY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGZyb20gdGhlIGNxX2hhbmRsZXIuIFRvIGltcGxlbWVudCAjMSwKKwkJICogZG9uJ3QgY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGF0IGFsbCwgYW5kIGZhbGwgYmFjayB0byB0aGUgbm90aWZ5CisJCSAqIGhhbmRsaW5nIGluIHRoZSBBQ0sgcHJvY2Vzc2luZyBjb2RlLgorCQkgKgorCQkgKiBOb3RlOiBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzeW5jIGFueSBSRE1BIGJ1ZmZlcnMgdXNpbmcKKwkJICogaWJfZG1hX3N5bmNfc2dfZm9yX2NwdSAtIHRoZSBjb21wbGV0aW9uIGZvciB0aGUgUkRNQQorCQkgKiBvcGVyYXRpb24gaXRzZWxmIHVubWFwcGVkIHRoZSBSRE1BIGJ1ZmZlcnMsIHdoaWNoIHRha2VzIGNhcmUKKwkJICogb2Ygc3luY2hpbmcuCisJCSAqLworCQlyZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Y19zdGF0dXMpOworCisJCWlmIChybS0+bV9yZG1hX29wLT5yX3dyaXRlKQorCQkJcmRzX3N0YXRzX2FkZChzX3NlbmRfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJCWVsc2UKKwkJCXJkc19zdGF0c19hZGQoc19yZWN2X3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCX0KKworCS8qIElmIGFueW9uZSB3YWl0ZWQgZm9yIHRoaXMgbWVzc2FnZSB0byBnZXQgZmx1c2hlZCBvdXQsIHdha2UKKwkgKiB0aGVtIHVwIG5vdyAqLworCXJkc19tZXNzYWdlX3VubWFwcGVkKHJtKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJc2VuZC0+c19ybSA9IE5VTEw7Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXNlbmQtPnNfcm0gPSBOVUxMOworCQlzZW5kLT5zX29wID0gTlVMTDsKKwkJc2VuZC0+c19tYXBwaW5nID0gTlVMTDsKKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCQlzZW5kLT5zX3dyLndyX2lkID0gaTsKKwkJc2VuZC0+c193ci5zZ19saXN0ID0gc2VuZC0+c19zZ2U7CisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c193ci5leC5pbW1fZGF0YSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZW5kLT5zX21yID0gaWJfYWxsb2NfZmFzdF9yZWdfbXIoaWMtPmlfcGQsIGZhc3RyZWdfbWVzc2FnZV9zaXplKTsKKwkJaWYgKElTX0VSUihzZW5kLT5zX21yKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19tciBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlzZW5kLT5zX3BhZ2VfbGlzdCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCgKKwkJCWljLT5pX2NtX2lkLT5kZXZpY2UsIGZhc3RyZWdfbWVzc2FnZV9zaXplKTsKKwkJaWYgKElTX0VSUihzZW5kLT5zX3BhZ2VfbGlzdCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0IGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfaXdfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJQlVHX09OKCFzZW5kLT5zX21yKTsKKwkJaWJfZGVyZWdfbXIoc2VuZC0+c19tcik7CisJCUJVR19PTighc2VuZC0+c19wYWdlX2xpc3QpOworCQlpYl9mcmVlX2Zhc3RfcmVnX3BhZ2VfbGlzdChzZW5kLT5zX3BhZ2VfbGlzdCk7CisJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSAweGRlYWQpCisJCQljb250aW51ZTsKKwkJaWYgKHNlbmQtPnNfcm0pCisJCQlyZHNfaXdfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgSUJfV0NfV1JfRkxVU0hfRVJSKTsKKwkJaWYgKHNlbmQtPnNfb3ApCisJCQlyZHNfaXdfc2VuZF91bm1hcF9yZG1hKGljLCBzZW5kLT5zX29wKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgX29sZGVzdC9fZnJlZSByaW5nIG9wZXJhdGlvbnMgaGVyZSByYWNlIGNsZWFubHkgd2l0aCB0aGUgYWxsb2MvdW5hbGxvYworICogb3BlcmF0aW9ucyBwZXJmb3JtZWQgaW4gdGhlIHNlbmQgcGF0aC4gIEFzIHRoZSBzZW5kZXIgYWxsb2NzIGFuZCBwb3RlbnRpYWxseQorICogdW5hbGxvY3MgdGhlIG5leHQgZnJlZSBlbnRyeSBpbiB0aGUgcmluZyBpdCBkb2Vzbid0IGFsdGVyIHdoaWNoIGlzCisgKiB0aGUgbmV4dCB0byBiZSBmcmVlZCwgd2hpY2ggaXMgd2hhdCB0aGlzIGlzIGNvbmNlcm5lZCB3aXRoLgorICovCit2b2lkIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBjb21wbGV0ZWQ7CisJdTMyIG9sZGVzdDsKKwl1MzIgaTsKKwlpbnQgcmV0OworCisJcmRzZGVidWcoImNxICVwIGNvbm4gJXBcbiIsIGNxLCBjb25uKTsKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3FfY2FsbCk7CisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KQorCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3FfZXZlbnQpOworCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJXQyBFcnJvcjogIHN0YXR1cyA9ICVkIG9wY29kZSA9ICVkXG4iLCB3Yy5zdGF0dXMsIHdjLm9wY29kZSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3Yy5vcGNvZGUgPT0gSUJfV0NfTE9DQUxfSU5WICYmIHdjLndyX2lkID09IFJEU19JV19MT0NBTF9JTlZfV1JfSUQpIHsKKwkJCWljLT5pX2Zhc3RyZWdfcG9zdGVkID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdjLm9wY29kZSA9PSBJQl9XQ19GQVNUX1JFR19NUiAmJiB3Yy53cl9pZCA9PSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQpIHsKKwkJCWljLT5pX2Zhc3RyZWdfcG9zdGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdjLndyX2lkID09IFJEU19JV19BQ0tfV1JfSUQpIHsKKwkJCWlmIChpYy0+aV9hY2tfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3N0YWxsZWQpOworCQkJcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKGljKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkZXN0ID0gcmRzX2l3X3Jpbmdfb2xkZXN0KCZpYy0+aV9zZW5kX3JpbmcpOworCisJCWNvbXBsZXRlZCA9IHJkc19pd19yaW5nX2NvbXBsZXRlZCgmaWMtPmlfc2VuZF9yaW5nLCB3Yy53cl9pZCwgb2xkZXN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29tcGxldGVkOyBpKyspIHsKKwkJCXNlbmQgPSAmaWMtPmlfc2VuZHNbb2xkZXN0XTsKKworCQkJLyogSW4gdGhlIGVycm9yIGNhc2UsIHdjLm9wY29kZSBzb21ldGltZXMgY29udGFpbnMgZ2FyYmFnZSAqLworCQkJc3dpdGNoIChzZW5kLT5zX3dyLm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9TRU5EOgorCQkJCWlmIChzZW5kLT5zX3JtKQorCQkJCQlyZHNfaXdfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgd2Muc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfRkFTVF9SRUdfTVI6CisJCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOgorCQkJCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSAtIHRoZSBTRyBsaXN0IHdpbGwgYmUgdW5tYXBwZWQKKwkJCQkgKiB3aGVuIHRoZSBTRU5EIGNvbXBsZXRlcy4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCQkiUkRTL0lXOiAlczogdW5leHBlY3RlZCBvcGNvZGUgMHgleCBpbiBXUiFcbiIsCisJCQkJCQlfX2Z1bmNfXywgc2VuZC0+c193ci5vcGNvZGUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IDB4ZGVhZDsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlpZiAoc2VuZC0+c19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc3RhbGxlZCk7CisKKwkJCS8qIElmIGEgUkRNQSBvcGVyYXRpb24gcHJvZHVjZWQgYW4gZXJyb3IsIHNpZ25hbCB0aGlzIHJpZ2h0CisJCQkgKiBhd2F5LiBJZiB3ZSBkb24ndCwgdGhlIHN1YnNlcXVlbnQgU0VORCB0aGF0IGdvZXMgd2l0aCB0aGlzCisJCQkgKiBSRE1BIHdpbGwgYmUgY2FuY2VsZWQgd2l0aCBFUlJfV0ZMVVNILCBhbmQgdGhlIGFwcGxpY2F0aW9uCisJCQkgKiBuZXZlciBsZWFybiB0aGF0IHRoZSBSRE1BIGZhaWxlZC4gKi8KKwkJCWlmICh1bmxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfUkVNX0FDQ0VTU19FUlIgJiYgc2VuZC0+c19vcCkpIHsKKwkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJCQkJcm0gPSByZHNfc2VuZF9nZXRfbWVzc2FnZShjb25uLCBzZW5kLT5zX29wKTsKKwkJCQlpZiAocm0pCisJCQkJCXJkc19pd19zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjLnN0YXR1cyk7CisJCQl9CisKKwkJCW9sZGVzdCA9IChvbGRlc3QgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCQl9CisKKwkJcmRzX2l3X3JpbmdfZnJlZSgmaWMtPmlfc2VuZF9yaW5nLCBjb21wbGV0ZWQpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpCisJCSB8fCB0ZXN0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTICYmIHJkc19jb25uX3VwKGNvbm4pKSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLAorCQkJCSJzZW5kIGNvbXBsZXRpb24gb24gJXBJNCAiCisJCQkJImhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCQkmY29ubi0+Y19mYWRkciwgd2Muc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgY3JlZGl0cyB3aGVuIHNlbmRpbmcKKyAqIG1lc3NhZ2VzLgorICoKKyAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CisgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KKyAqCisgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKKyAqCXBvc3RlZCB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4gVGhpcyB2YWx1ZSBpcyB0cmFuc2ZlcnJlZAorICoJdG8gdGhlIHBlZXIgYXMgYSAiY3JlZGl0IHVwZGF0ZSIgaW4gYSBSRFMgaGVhZGVyIGZpZWxkLgorICoJRXZlcnkgdGltZSB3ZSB0cmFuc21pdCBjcmVkaXRzIHRvIHRoZSBwZWVyLCB3ZSBzdWJ0cmFjdAorICoJdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBjcmVkaXRzIGZyb20gdGhpcyBjb3VudGVyLgorICoKKyAqIEl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgYm90aCBzaWRlcyBoYXZlCisgKiBleGhhdXN0ZWQgdGhlaXIgc2VuZCBjcmVkaXRzLCBhbmQgYXJlIHVuYWJsZSB0byBzZW5kIG5ldyBjcmVkaXRzCisgKiB0byB0aGUgcGVlci4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHJlcXVpcmluZyB0aGF0IHdlIHNlbmQgYXQgbGVhc3QKKyAqIG9uZSBjcmVkaXQgdXBkYXRlIHRvIHRoZSBwZWVyIGJlZm9yZSBleGhhdXN0aW5nIG91ciBjcmVkaXRzLgorICogV2hlbiBuZXcgY3JlZGl0cyBhcnJpdmUsIHdlIHN1YnRyYWN0IG9uZSBjcmVkaXQgdGhhdCBpcyB3aXRoaGVsZAorICogdW50aWwgd2UndmUgcG9zdGVkIG5ldyBidWZmZXJzIGFuZCBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlc2UKKyAqIGNyZWRpdHMgKHNlZSByZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyBiZWxvdykuCisgKgorICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0CisgKiBncmFicyBjX3NlbmRfbG9jayB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLgorICogSG93ZXZlciwgdGhlIEFDSyBzZW5kaW5nIGNvZGUgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbiByYWNlIHdpdGgKKyAqIG1lc3NhZ2UgU0VORHMuCisgKgorICogSW4gdGhlIHNlbmQgcGF0aCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGZvciBzZW5kIGNyZWRpdHMKKyAqIGFuZCB0aGUgY291bnRlciBvZiBwb3N0ZWQgYnVmZmVycyBhdG9taWNhbGx5IC0gd2hlbiB3ZSB1c2UgdGhlCisgKiBsYXN0IGF2YWlsYWJsZSBjcmVkaXQsIHdlIGNhbm5vdCBhbGxvdyBhbm90aGVyIHRocmVhZCB0byByYWNlIHVzCisgKiBhbmQgZ3JhYiB0aGUgcG9zdGVkIGNyZWRpdHMgY291bnRlci4gIEhlbmNlLCB3ZSBoYXZlIHRvIHVzZSBhCisgKiBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcmVkaXQgY291bnRlciwgb3IgdXNlIGF0b21pY3MuCisgKgorICogU3BpbmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGFyZSBiYWQsCisgKiBiZWNhdXNlIHRoZXkgY3JlYXRlIHVubmVjZXNzYXJ5IGRlbGF5cy4gQW4gZWFybHkgaW1wbGVtZW50YXRpb24KKyAqIHVzaW5nIGEgc3BpbmxvY2sgc2hvd2VkIGEgNSUgZGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBhdCBzb21lCisgKiBsb2Fkcy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBzcGlubG9ja3MgY29tcGxldGVseSwgcHV0dGluZyBib3RoCisgKiBjb3VudGVycyBpbnRvIGEgc2luZ2xlIGF0b21pYywgYW5kIHVwZGF0aW5nIHRoYXQgYXRvbWljIHVzaW5nCisgKiBhdG9taWNfYWRkIChpbiB0aGUgcmVjZWl2ZSBwYXRoLCB3aGVuIHJlY2VpdmluZyBmcmVzaCBjcmVkaXRzKSwKKyAqIGFuZCB1c2luZyBhdG9taWNfY21weGNoZyB3aGVuIHVwZGF0aW5nIHRoZSB0d28gY291bnRlcnMuCisgKi8KK2ludCByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCSAgICAgdTMyIHdhbnRlZCwgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKQoreworCXVuc2lnbmVkIGludCBhdmFpbCwgcG9zdGVkLCBnb3QgPSAwLCBhZHZlcnRpc2U7CisJbG9uZyBvbGR2YWwsIG5ld3ZhbDsKKworCSphZHZfY3JlZGl0cyA9IDA7CisJaWYgKCFpYy0+aV9mbG93Y3RsKQorCQlyZXR1cm4gd2FudGVkOworCit0cnlfYWdhaW46CisJYWR2ZXJ0aXNlID0gMDsKKwlvbGR2YWwgPSBuZXd2YWwgPSBhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cyk7CisJcG9zdGVkID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhvbGR2YWwpOworCWF2YWlsID0gSUJfR0VUX1NFTkRfQ1JFRElUUyhvbGR2YWwpOworCisJcmRzZGVidWcoInJkc19pd19zZW5kX2dyYWJfY3JlZGl0cygldSk6IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAorCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKKworCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCisJaWYgKGF2YWlsICYmICFwb3N0ZWQpCisJCWF2YWlsLS07CisKKwlpZiAoYXZhaWwgPCB3YW50ZWQpIHsKKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtPmlfY21faWQtPmNvbnRleHQ7CisKKwkJLyogT29wcywgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBjcmVkaXRzIGxlZnQhICovCisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlnb3QgPSBhdmFpbDsKKwl9IGVsc2UgeworCQkvKiBTb21ldGltZXMgeW91IGdldCB3aGF0IHlvdSB3YW50LCBsYWxhbGEuICovCisJCWdvdCA9IHdhbnRlZDsKKwl9CisJbmV3dmFsIC09IElCX1NFVF9TRU5EX0NSRURJVFMoZ290KTsKKworCS8qCisJICogSWYgbmVlZF9wb3N0ZWQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGNhbGxlciB3YW50cworCSAqIHRoZSBwb3N0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBzZW5kIGNyZWRpdHMgYXJlCisJICogYXZhaWxhYmxlLgorCSAqLworCWlmIChwb3N0ZWQgJiYgKGdvdCB8fCBuZWVkX3Bvc3RlZCkpIHsKKwkJYWR2ZXJ0aXNlID0gbWluX3QodW5zaWduZWQgaW50LCBwb3N0ZWQsIFJEU19NQVhfQURWX0NSRURJVCk7CisJCW5ld3ZhbCAtPSBJQl9TRVRfUE9TVF9DUkVESVRTKGFkdmVydGlzZSk7CisJfQorCisJLyogRmluYWxseSBiaWxsIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoYXRvbWljX2NtcHhjaGcoJmljLT5pX2NyZWRpdHMsIG9sZHZhbCwgbmV3dmFsKSAhPSBvbGR2YWwpCisJCWdvdG8gdHJ5X2FnYWluOworCisJKmFkdl9jcmVkaXRzID0gYWR2ZXJ0aXNlOworCXJldHVybiBnb3Q7Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChjcmVkaXRzID09IDApCisJCXJldHVybjsKKworCXJkc2RlYnVnKCJyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cygldSk6IGN1cnJlbnQ9JXUlc1xuIiwKKwkJCWNyZWRpdHMsCisJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCisJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOworCisJYXRvbWljX2FkZChJQl9TRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwlXQVJOX09OKElCX0dFVF9TRU5EX0NSRURJVFMoY3JlZGl0cykgPj0gMTYzODQpOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NyZWRpdF91cGRhdGVzKTsKK30KKwordm9pZCByZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHBvc3RlZCA9PSAwKQorCQlyZXR1cm47CisKKwlhdG9taWNfYWRkKElCX1NFVF9QT1NUX0NSRURJVFMocG9zdGVkKSwgJmljLT5pX2NyZWRpdHMpOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIHBlZXIgbm93LgorCSAqIElmIHdlIHdvdWxkIHNlbmQgYSBjcmVkaXQgdXBkYXRlIGZvciBldmVyeSBzaW5nbGUgYnVmZmVyIHdlCisJICogcG9zdCwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gQUNLIHN0b3JtIChBQ0sgYXJyaXZlcywKKwkgKiBjb25zdW1lcyBidWZmZXIsIHdlIHJlZmlsbCB0aGUgcmluZywgc2VuZCBBQ0sgdG8gcmVtb3RlCisJICogYWR2ZXJ0aXNpbmcgdGhlIG5ld2x5IHBvc3RlZCBidWZmZXIuLi4gYWQgaW5mKQorCSAqCisJICogUGVyZm9ybWFuY2UgcHJldHR5IG11Y2ggZGVwZW5kcyBvbiBob3cgb2Z0ZW4gd2Ugc2VuZAorCSAqIGNyZWRpdCB1cGRhdGVzIC0gdG9vIGZyZXF1ZW50IHVwZGF0ZXMgbWVhbiBsb3RzIG9mIEFDS3MuCisJICogVG9vIGluZnJlcXVlbnQgdXBkYXRlcywgYW5kIHRoZSBwZWVyIHdpbGwgcnVuIG91dCBvZgorCSAqIGNyZWRpdHMgYW5kIGhhcyB0byB0aHJvdHRsZS4KKwkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIDE2IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorCSAqLworCWlmIChJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSkgPj0gMTYpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmRzX2l3X3htaXRfcG9wdWxhdGVfd3Ioc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGxvbmcgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQlpbnQgc2VuZF9mbGFncykKK3sKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwlXQVJOX09OKHBvcyAhPSBzZW5kIC0gaWMtPmlfc2VuZHMpOworCisJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gc2VuZF9mbGFnczsKKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJc2VuZC0+c193ci5udW1fc2dlID0gMjsKKwlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwlzZW5kLT5zX29wID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gMCkgeworCQlzZ2UgPSByZHNfaXdfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gYnVmZmVyOworCQlzZ2UtPmxlbmd0aCA9IGxlbmd0aDsKKwkJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgc2VuZC0+c19zZ2UpOworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIHNlbmRpbmcgYSBwYWNrZXQgd2l0aCBubyBwYXlsb2FkLiBUaGVyZSBpcyBvbmx5CisJCSAqIG9uZSBTR0UgKi8KKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2dlID0gJnNlbmQtPnNfc2dlWzBdOworCX0KKworCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAocG9zICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7Cit9CisKKy8qCisgKiBUaGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gbWVzc2FnZS4gIFRoZSBmaXJzdCB0aW1lCisgKiB3ZSBzZWUgYSBtZXNzYWdlIHdlIG1hcCBpdHMgc2NhdHRlcmxpc3QgaW50byB0aGUgSUIgZGV2aWNlIHNvIHRoYXQKKyAqIHdlIGNhbiBwcm92aWRlIHRoYXQgbWFwcGVkIGFkZHJlc3MgdG8gdGhlIElCIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMKKyAqIGluIHRoZSBJQiB3b3JrIHJlcXVlc3RzLiAgV2UgdHJhbnNsYXRlIHRoZSBzY2F0dGVybGlzdCBpbnRvIGEgc2VyaWVzCisgKiBvZiB3b3JrIHJlcXVlc3RzIHRoYXQgZnJhZ21lbnQgdGhlIG1lc3NhZ2UuICBUaGVzZSB3b3JrIHJlcXVlc3RzIGNvbXBsZXRlCisgKiBpbiBvcmRlciBzbyB3ZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyCisgKiBvbmNlIHdlIHNlbmQgdGhlIGZpbmFsIGZyYWdtZW50LgorICoKKyAqIFRoZSBSRFMgY29yZSB1c2VzIHRoZSBjX3NlbmRfbG9jayB0byBvbmx5IGVudGVyIHRoaXMgZnVuY3Rpb24gb25jZQorICogcGVyIGNvbm5lY3Rpb24uICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgdHggcmluZyBhbGxvYy91bmFsbG9jIHBhaXJzCisgKiBkb24ndCBnZXQgb3V0IG9mIHN5bmMgYW5kIGNvbmZ1c2UgdGhlIHJpbmcuCisgKi8KK2ludCByZHNfaXdfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXUzMiBwb3M7CisJdTMyIGk7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGNyZWRpdF9hbGxvYzsKKwl1MzIgcG9zdGVkOworCXUzMiBhZHZfY3JlZGl0cyA9IDA7CisJaW50IHNlbmRfZmxhZ3MgPSAwOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IGZsb3dfY29udHJvbGxlZCA9IDA7CisKKwlCVUdfT04ob2ZmICUgUkRTX0ZSQUdfU0laRSk7CisJQlVHX09OKGhkcl9vZmYgIT0gMCAmJiBoZHJfb2ZmICE9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJLyogRmFzdHJlZyBzdXBwb3J0ICovCisJaWYgKHJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpCisJICYmICFpYy0+aV9mYXN0cmVnX3Bvc3RlZCkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRSB3ZSBtYXkgb3ZlcmFsbG9jYXRlIGhlcmUgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKQorCQlpID0gMTsKKwllbHNlCisJCWkgPSBjZWlsKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbiksIFJEU19GUkFHX1NJWkUpOworCisJd29ya19hbGxvYyA9IHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRfYWxsb2MgPSB3b3JrX2FsbG9jOworCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCWNyZWRpdF9hbGxvYyA9IHJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgd29ya19hbGxvYywgJnBvc3RlZCwgMCk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJaWYgKGNyZWRpdF9hbGxvYyA8IHdvcmtfYWxsb2MpIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGNyZWRpdF9hbGxvYyk7CisJCQl3b3JrX2FsbG9jID0gY3JlZGl0X2FsbG9jOworCQkJZmxvd19jb250cm9sbGVkKys7CisJCX0KKwkJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF90aHJvdHRsZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKGljLT5pX3JtID09IE5VTEwpIHsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyZHNfaXdfeG1pdCBwcmVwIG1zZyBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCksCisJCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSk7CisJCSAgICovCisJCWlmIChybS0+bV9uZW50cykgeworCQkJcm0tPm1fY291bnQgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJIHJtLT5tX3NnLCBybS0+bV9uZW50cywgRE1BX1RPX0RFVklDRSk7CisJCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBybSAlcDogJWRcbiIsIGljLCBybSwgcm0tPm1fY291bnQpOworCQkJaWYgKHJtLT5tX2NvdW50ID09IDApIHsKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlybS0+bV9jb3VudCA9IDA7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlpYy0+aV9ybSA9IHJtOworCisJCS8qIEZpbmFsaXplIHRoZSBoZWFkZXIgKi8KKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfQUNLX1JFUVVJUkVEOworCQlpZiAodGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfUkVUUkFOU01JVFRFRDsKKworCQkvKiBJZiBpdCBoYXMgYSBSRE1BIG9wLCB0ZWxsIHRoZSBwZWVyIHdlIGRpZCBpdC4gVGhpcyBpcworCQkgKiB1c2VkIGJ5IHRoZSBwZWVyIHRvIHJlbGVhc2UgdXNlLW9uY2UgUkRNQSBNUnMuICovCisJCWlmIChybS0+bV9yZG1hX29wKSB7CisJCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSBleHRfaGRyOworCisJCQlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocm0tPm1fcmRtYV9vcC0+cl9rZXkpOworCQkJcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlSRFNfRVhUSERSX1JETUEsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworCQl9CisJCWlmIChybS0+bV9yZG1hX2Nvb2tpZSkgeworCQkJcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocm0tPm1fcmRtYV9jb29raWUpKTsKKwkJfQorCisJCS8qIE5vdGUgLSByZHNfaXdfcGlnZ3liX2FjayBjbGVhcnMgdGhlIEFDS19SRVFVSVJFRCBiaXQsIHNvCisJCSAqIHdlIHNob3VsZCBub3QgZG8gdGhpcyB1bmxlc3Mgd2UgaGF2ZSBhIGNoYW5jZSBvZiBhdCBsZWFzdAorCQkgKiBzdGlja2luZyB0aGUgaGVhZGVyIGludG8gdGhlIHNlbmQgcmluZy4gV2hpY2ggaXMgd2h5IHdlCisJCSAqIHNob3VsZCBjYWxsIHJkc19pd19yaW5nX2FsbG9jIGZpcnN0LiAqLworCQlybS0+bV9pbmMuaV9oZHIuaF9hY2sgPSBjcHVfdG9fYmU2NChyZHNfaXdfcGlnZ3liX2FjayhpYykpOworCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKCZybS0+bV9pbmMuaV9oZHIpOworCisJCS8qCisJCSAqIFVwZGF0ZSBhZHZfY3JlZGl0cyBzaW5jZSB3ZSByZXNldCB0aGUgQUNLX1JFUVVJUkVEIGJpdC4KKwkJICovCisJCXJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgMCwgJnBvc3RlZCwgMSk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJQlVHX09OKGFkdl9jcmVkaXRzID4gMjU1KTsKKwl9IGVsc2UgaWYgKGljLT5pX3JtICE9IHJtKQorCQlCVUcoKTsKKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZybS0+bV9zZ1tzZ107CisJc2VudCA9IDA7CisJaSA9IDA7CisKKwkvKiBTb21ldGltZXMgeW91IHdhbnQgdG8gcHV0IGEgZmVuY2UgYmV0d2VlbiBhbiBSRE1BCisJICogUkVBRCBhbmQgdGhlIGZvbGxvd2luZyBTRU5ELgorCSAqIFdlIGNvdWxkIGVpdGhlciBkbyB0aGlzIGFsbCB0aGUgdGltZQorCSAqIG9yIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBSaWdodCBub3csIHdlIGxldAorCSAqIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2UuCisJICovCisJaWYgKHJtLT5tX3JkbWFfb3AgJiYgcm0tPm1fcmRtYV9vcC0+cl9mZW5jZSkKKwkJc2VuZF9mbGFncyA9IElCX1NFTkRfRkVOQ0U7CisKKwkvKgorCSAqIFdlIGNvdWxkIGJlIGNvcHlpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSB1bnVzZWQgdGFpbCBvZiB0aGUgcGFnZS4KKwkgKiBUaGF0IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhvc2UgcGFnZXMgbWlnaHQKKwkgKiBiZSBtYXBwZWQgdXNlcnNwYWNlIHBhZ2VzIG9yIHBhZ2UgY2FjaGUgcGFnZXMuICBTbyBpbnN0ZWFkIHdlIGFsd2F5cworCSAqIHVzZSBhIHNlY29uZCBzZ2UgYW5kIG91ciBsb25nLWxpdmVkIHJpbmcgb2YgbWFwcGVkIGhlYWRlcnMuICBXZSBzZW5kCisJICogdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkYXRhIHBheWxvYWQgY2FuIGJlIGFsaWduZWQgb24KKwkgKiB0aGUgcmVjZWl2ZXIuCisJICovCisKKwkvKiBoYW5kbGUgYSAwLWxlbiBtZXNzYWdlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkgeworCQlyZHNfaXdfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLCAwLCAwLCBzZW5kX2ZsYWdzKTsKKwkJZ290byBhZGRfaGVhZGVyOworCX0KKworCS8qIGlmIHRoZXJlJ3MgZGF0YSByZWZlcmVuY2UgaXQgd2l0aCBhIGNoYWluIG9mIHdvcmsgcmVxcyAqLworCWZvciAoOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZybS0+bV9zZ1tybS0+bV9jb3VudF07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKworCQlsZW4gPSBtaW4oUkRTX0ZSQUdfU0laRSwgaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpIC0gb2ZmKTsKKwkJcmRzX2l3X3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsIHNjYXQpICsgb2ZmLCBsZW4sCisJCQkJc2VuZF9mbGFncyk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lCisJCSAqIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyAtPSBsZW47CisJCWlmIChpYy0+aV91bnNpZ25hbGVkX2J5dGVzIDw9IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgc2lnbmFsIHRoZSBsYXN0IG9uZSBpZiB3ZSdyZSBzdG9wcGluZyBkdWUgdG8gZmxvdyBjb250cm9sLgorCQkgKi8KKwkJaWYgKGZsb3dfY29udHJvbGxlZCAmJiBpID09ICh3b3JrX2FsbG9jLTEpKQorCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkgJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlzZW50ICs9IGxlbjsKKwkJb2ZmICs9IGxlbjsKKwkJaWYgKG9mZiA9PSBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkpIHsKKwkJCXNjYXQrKzsKKwkJCW9mZiA9IDA7CisJCX0KKworYWRkX2hlYWRlcjoKKwkJLyogVGFjayBvbiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhLiBUaGUgaGVhZGVyIFNHRSBzaG91bGQgYWxyZWFkeQorCQkgKiBoYXZlIGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSByaWdodCBoZWFkZXIgYnVmZmVyLiAqLworCQltZW1jcHkoJmljLT5pX3NlbmRfaGRyc1twb3NdLCAmcm0tPm1faW5jLmlfaGRyLCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCQlpZiAoMCkgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZW5kIFdSIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KGhkci0+aF9kcG9ydCksCisJCQkJaGRyLT5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KGhkci0+aF9sZW4pKTsKKwkJfQorCQlpZiAoYWR2X2NyZWRpdHMpIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCS8qIGFkZCBjcmVkaXQgYW5kIHJlZG8gdGhlIGhlYWRlciBjaGVja3N1bSAqLworCQkJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCQkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCQkJYWR2X2NyZWRpdHMgPSAwOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NyZWRpdF91cGRhdGVzKTsKKwkJfQorCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisJCXByZXYgPSBzZW5kOworCisJCXBvcyA9IChwb3MgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCX0KKworCS8qIEFjY291bnQgdGhlIFJEUyBoZWFkZXIgaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBzZW50LCBidXQganVzdCBvbmNlLgorCSAqIFRoZSBjYWxsZXIgaGFzIG5vIGNvbmNlcHQgb2YgZnJhZ21lbnRhdGlvbi4gKi8KKwlpZiAoaGRyX29mZiA9PSAwKQorCQlzZW50ICs9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XSkgeworCQlwcmV2LT5zX3JtID0gaWMtPmlfcm07CisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBpIDwgY3JlZGl0X2FsbG9jKQorCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRfYWxsb2MgLSBpKTsKKworCS8qIFhYWCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZhaWxlZF93ciBhbmQgcGFydGlhbCBzZW5kcy4gKi8KKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJaWYgKHByZXYtPnNfcm0pIHsKKwkJCWljLT5pX3JtID0gcHJldi0+c19ybTsKKwkJCXByZXYtPnNfcm0gPSBOVUxMOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNlbnQ7CitvdXQ6CisJQlVHX09OKGFkdl9jcmVkaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfYnVpbGRfc2VuZF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kLCBpbnQgbmVudCwgaW50IGxlbiwgdTY0IHNnX2FkZHIpCit7CisJQlVHX09OKG5lbnQgPiBzZW5kLT5zX3BhZ2VfbGlzdC0+bWF4X3BhZ2VfbGlzdF9sZW4pOworCS8qCisJICogUGVyZm9ybSBhIFdSIGZvciB0aGUgZmFzdF9yZWdfbXIuIEVhY2ggaW5kaXZpZHVhbCBwYWdlCisJICogaW4gdGhlIHNnIGxpc3QgaXMgYWRkZWQgdG8gdGhlIGZhc3QgcmVnIHBhZ2UgbGlzdCBhbmQgcGxhY2VkCisJICogaW5zaWRlIHRoZSBmYXN0X3JlZ19tciBXUi4KKwkgKi8KKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX0ZBU1RfUkVHX01SOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gbGVuOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlbmQtPnNfbXItPnJrZXk7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBzZW5kLT5zX3BhZ2VfbGlzdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBuZW50OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IHJkc19pd2Rldi0+cGFnZV9zaGlmdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmFjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19SRU1PVEVfV1JJVEU7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gc2dfYWRkcjsKKworCWliX3VwZGF0ZV9mYXN0X3JlZ19rZXkoc2VuZC0+c19tciwgc2VuZC0+c19yZW1hcF9jb3VudCsrKTsKK30KKworaW50IHJkc19pd194bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1NjQgcmVtb3RlX2FkZHIgPSBvcC0+cl9yZW1vdGVfYWRkcjsKKwl1MzIgcG9zLCBmcl9wb3M7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGk7CisJdTMyIGo7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgbnVtX3NnZTsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKCFvcC0+cl9tYXBwZWQpIHsKKwkJb3AtPnJfY291bnQgPSBpYl9kbWFfbWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywgKG9wLT5yX3dyaXRlKSA/CisJCQkJCURNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBvcCAlcDogJWRcbiIsIGljLCBvcCwgb3AtPnJfY291bnQpOworCQlpZiAob3AtPnJfY291bnQgPT0gMCkgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJZ290byBvdXQ7CisJCX0KKworCQlvcC0+cl9tYXBwZWQgPSAxOworCX0KKworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJLyogQWxsb2Mgc3BhY2Ugb24gdGhlIHNlbmQgcXVldWUgZm9yIHRoZSBmYXN0cmVnICovCisJCXdvcmtfYWxsb2MgPSByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCAxLCAmZnJfcG9zKTsKKwkJaWYgKHdvcmtfYWxsb2MgIT0gMSkgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGtub3dpbmcgaG93IHRvIHJldHVybiBhIHBhcnRpYWwgcmRtYSByZWFkL3dyaXRlIHdlIGluc2lzdCB0aGF0IHRoZXJlCisJICogYmUgZW5vdWdoIHdvcmsgcmVxdWVzdHMgdG8gc2VuZCB0aGUgZW50aXJlIG1lc3NhZ2UuCisJICovCisJaSA9IGNlaWwob3AtPnJfY291bnQsIHJkc19pd2Rldi0+bWF4X3NnZSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgIT0gaSkgeworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJZmlyc3QgPSBwcmV2ID0gJmljLT5pX3NlbmRzW2ZyX3Bvc107CisJfSBlbHNlIHsKKwkJZmlyc3QgPSBzZW5kOworCQlwcmV2ID0gTlVMTDsKKwl9CisJc2NhdCA9ICZvcC0+cl9zZ1swXTsKKwlzZW50ID0gMDsKKwludW1fc2dlID0gb3AtPnJfY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGkrKykgeworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQl9CisKKwkJLyogVG8gYXZvaWQgdGhlIG5lZWQgdG8gaGF2ZSB0aGUgcGx1bWJpbmcgdG8gaW52YWxpZGF0ZSB0aGUgZmFzdHJlZ19tciB1c2VkCisJCSAqIGZvciBsb2NhbCBhY2Nlc3MgYWZ0ZXIgUkRTIGlzIGZpbmlzaGVkIHdpdGggaXQsIHVzaW5nCisJCSAqIElCX1dSX1JETUFfUkVBRF9XSVRIX0lOViB3aWxsIGludmFsaWRhdGUgaXQgYWZ0ZXIgdGhlIHJlYWQgaGFzIGNvbXBsZXRlZC4KKwkJICovCisJCWlmIChvcC0+cl93cml0ZSkKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfUkRNQV9XUklURTsKKwkJZWxzZQorCQkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY7CisKKwkJc2VuZC0+c193ci53ci5yZG1hLnJlbW90ZV9hZGRyID0gcmVtb3RlX2FkZHI7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5ya2V5ID0gb3AtPnJfa2V5OworCQlzZW5kLT5zX29wID0gb3A7CisKKwkJaWYgKG51bV9zZ2UgPiByZHNfaXdkZXYtPm1heF9zZ2UpIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IHJkc19pd2Rldi0+bWF4X3NnZTsKKwkJCW51bV9zZ2UgLT0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCQl9IGVsc2UKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IG51bV9zZ2U7CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCisJCWZvciAoaiA9IDA7IGogPCBzZW5kLT5zX3dyLm51bV9zZ2UgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBqKyspIHsKKwkJCWxlbiA9IGliX3NnX2RtYV9sZW4oaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisKKwkJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlYpCisJCQkJc2VuZC0+c19wYWdlX2xpc3QtPnBhZ2VfbGlzdFtqXSA9IGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJZWxzZSB7CisJCQkJc2VuZC0+c19zZ2Vbal0uYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJCXNlbmQtPnNfc2dlW2pdLmxlbmd0aCA9IGxlbjsKKwkJCQlzZW5kLT5zX3NnZVtqXS5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKwkJCX0KKworCQkJc2VudCArPSBsZW47CisJCQlyZHNkZWJ1ZygiaWMgJXAgc2VudCAlZCByZW1vdGVfYWRkciAlbGx1XG4iLCBpYywgc2VudCwgcmVtb3RlX2FkZHIpOworCQkJcmVtb3RlX2FkZHIgKz0gbGVuOworCisJCQlzY2F0Kys7CisJCX0KKworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJc2VuZC0+c19zZ2VbMF0uYWRkciA9IGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9hZGRyOworCQkJc2VuZC0+c19zZ2VbMF0ubGVuZ3RoID0gY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2J5dGVzOworCQkJc2VuZC0+c19zZ2VbMF0ubGtleSA9IGljLT5pX3NlbmRzW2ZyX3Bvc10uc19tci0+bGtleTsKKwkJfQorCisJCXJkc2RlYnVnKCJzZW5kICVwIHdyICVwIG51bV9zZ2UgJXUgbmV4dCAlcFxuIiwgc2VuZCwKKwkJCSZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJcHJldiA9IHNlbmQ7CisJCWlmICgrK3NlbmQgPT0gJmljLT5pX3NlbmRzW2ljLT5pX3NlbmRfcmluZy53X25yXSkKKwkJCXNlbmQgPSBpYy0+aV9zZW5kczsKKwl9CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XSkKKwkJZmlyc3QtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKworCS8qIE9uIGlXQVJQLCBsb2NhbCBtZW1vcnkgYWNjZXNzIGJ5IGEgcmVtb3RlIHN5c3RlbSAoaWUsIFJETUEgUmVhZCkgaXMgbm90CisJICogcmVjb21tZW5kZWQuICBQdXR0aW5nIHRoZSBsa2V5IG9uIHRoZSB3aXJlIGlzIGEgc2VjdXJpdHkgaG9sZSwgYXMgaXQgY2FuCisJICogYWxsb3cgZm9yIG1lbW9yeSBhY2Nlc3MgdG8gYWxsIG9mIG1lbW9yeSBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIFNvbWUKKwkgKiBhZGFwdGVycyBkbyBub3QgYWxsb3cgdXNpbmcgdGhlIGxrZXkgZm9yIHRoaXMgYXQgYWxsLiAgVG8gYnlwYXNzIHRoaXMgdXNlIGEKKwkgKiBmYXN0cmVnX21yIChvciBwb3NzaWJseSBhIGRtYV9tcikKKwkgKi8KKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCXJkc19pd19idWlsZF9zZW5kX2Zhc3RyZWcocmRzX2l3ZGV2LCBpYywgJmljLT5pX3NlbmRzW2ZyX3Bvc10sCisJCQlvcC0+cl9jb3VudCwgc2VudCwgY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2FkZHIpOworCQl3b3JrX2FsbG9jKys7CisJfQorCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IHJkbWEgaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBXZSBtYXkgaGF2ZSBhIHBlbmRpbmcgQUNLIG9yIHdpbmRvdyB1cGRhdGUgd2Ugd2VyZSB1bmFibGUKKwkgKiB0byBzZW5kIHByZXZpb3VzbHkgKGR1ZSB0byBmbG93IGNvbnRyb2wpLiBUcnkgYWdhaW4uICovCisJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc3RhdHMuYyBiL25ldC9yZHMvaXdfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M3ZThmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19zdGF0cy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19pd19zdGF0aXN0aWNzLCByZHNfaXdfc3RhdHMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGNoYXIgKnJkc19pd19zdGF0X25hbWVzW10gPSB7CisJIml3X2Nvbm5lY3RfcmFjZWQiLAorCSJpd19saXN0ZW5fY2xvc2VkX3N0YWxlIiwKKwkiaXdfdHhfY3FfY2FsbCIsCisJIml3X3R4X2NxX2V2ZW50IiwKKwkiaXdfdHhfcmluZ19mdWxsIiwKKwkiaXdfdHhfdGhyb3R0bGUiLAorCSJpd190eF9zZ19tYXBwaW5nX2ZhaWx1cmUiLAorCSJpd190eF9zdGFsbGVkIiwKKwkiaXdfdHhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpd19yeF9jcV9jYWxsIiwKKwkiaXdfcnhfY3FfZXZlbnQiLAorCSJpd19yeF9yaW5nX2VtcHR5IiwKKwkiaXdfcnhfcmVmaWxsX2Zyb21fY3EiLAorCSJpd19yeF9yZWZpbGxfZnJvbV90aHJlYWQiLAorCSJpd19yeF9hbGxvY19saW1pdCIsCisJIml3X3J4X2NyZWRpdF91cGRhdGVzIiwKKwkiaXdfYWNrX3NlbnQiLAorCSJpd19hY2tfc2VuZF9mYWlsdXJlIiwKKwkiaXdfYWNrX3NlbmRfZGVsYXllZCIsCisJIml3X2Fja19zZW5kX3BpZ2d5YmFja2VkIiwKKwkiaXdfYWNrX3JlY2VpdmVkIiwKKwkiaXdfcmRtYV9tcl9hbGxvYyIsCisJIml3X3JkbWFfbXJfZnJlZSIsCisJIml3X3JkbWFfbXJfdXNlZCIsCisJIml3X3JkbWFfbXJfcG9vbF9mbHVzaCIsCisJIml3X3JkbWFfbXJfcG9vbF93YWl0IiwKKwkiaXdfcmRtYV9tcl9wb29sX2RlcGxldGVkIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfaXdfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfaXdfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcykpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19pd19zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX2l3X3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcykpOworb3V0OgorCXJldHVybiBBUlJBWV9TSVpFKHJkc19pd19zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc3lzY3RsLmMgYi9uZXQvcmRzL2l3X3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTA2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3N5c2N0bC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19pd19zeXNjdGxfaGRyOworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IgPSBSRFNfSVdfREVGQVVMVF9TRU5EX1dSOwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyID0gUkRTX0lXX0RFRkFVTFRfUkVDVl9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gKDEyOCAqIDEwMjQgKiAxMDI0KSAvIFJEU19GUkFHX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF93cl9taW4gPSAxOworLyogaGFyZHdhcmUgd2lsbCBmYWlsIENRIGNyZWF0aW9uIGxvbmcgYmVmb3JlIHRoaXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3dyX21heCA9ICh1MzIpfjA7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzID0gMTY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMgPSAoMTYgPDwgMjApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGludCByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisKK2N0bF90YWJsZSByZHNfaXdfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9zZW5kX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dycywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X2FsbG9jYXRpb24iLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImZsb3dfY29udHJvbCIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCwKKwkJLm1heGxlbgkJPSBzaXplb2YocmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19pd19zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyAucHJvY25hbWUgPSAiaXciLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3ZvaWQgcmRzX2l3X3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19pd19zeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfaXdfc3lzY3RsX2hkcik7Cit9CisKK2ludCBfX2luaXQgcmRzX2l3X3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX2l3X3N5c2N0bF9oZHIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX2l3X3N5c2N0bF9wYXRoLCByZHNfaXdfc3lzY3RsX3RhYmxlKTsKKwlpZiAocmRzX2l3X3N5c2N0bF9oZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjE5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2xvb3AuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImxvb3AuaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyhsb29wX2Nvbm5zX2xvY2spOworc3RhdGljIExJU1RfSEVBRChsb29wX2Nvbm5zKTsKKworLyoKKyAqIFRoaXMgJ2xvb3BiYWNrJyB0cmFuc3BvcnQgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGZsb3dzIHRoYXQgb3JpZ2luYXRlCisgKiBhbmQgdGVybWluYXRlIG9uIHRoZSBzYW1lIG1hY2hpbmUuCisgKgorICogQ29ubmVjdGlvbiBidWlsZC11cCBub3RpY2VzIGlmIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHRob3VnaHQgb2YKKyAqIGFzIGEgbG9jYWwgYWRkcmVzcyBieSBhIHRyYW5zcG9ydC4gIEF0IHRoYXQgdGltZSBpdCBkZWNpZGVzIHRvIHVzZSB0aGUKKyAqIGxvb3BiYWNrIHRyYW5zcG9ydCBpbnN0ZWFkIG9mIHRoZSBib3VuZCB0cmFuc3BvcnQgb2YgdGhlIHNlbmRpbmcgc29ja2V0LgorICoKKyAqIFRoZSBsb29wYmFjayB0cmFuc3BvcnQncyBzZW5kaW5nIHBhdGgganVzdCBoYW5kcyB0aGUgc2VudCByZHNfbWVzc2FnZQorICogc3RyYWlnaHQgdG8gdGhlIHJlY2VpdmluZyBwYXRoIHZpYSBhbiBlbWJlZGRlZCByZHNfaW5jb21pbmcuCisgKi8KKworLyoKKyAqIFVzdWFsbHkgYSBtZXNzYWdlIHRyYW5zaXRzIGJvdGggdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIncyBjb25ucyBhcyBpdAorICogZmxvd3MgdG8gdGhlIHJlY2VpdmVyLiAgSW4gdGhlIGxvb3BiYWNrIGNhc2UsIHRob3VnaCwgdGhlIHJlY2VpdmUgcGF0aAorICogaXMgaGFuZGVkIHRoZSBzZW5kaW5nIGNvbm4gc28gdGhlIHNlbnNlIG9mIHRoZSBhZGRyZXNzZXMgaXMgcmV2ZXJzZWQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2xvb3BfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywKKwkJCSB1bnNpZ25lZCBpbnQgb2ZmKQoreworCUJVR19PTihoZHJfb2ZmIHx8IHNnIHx8IG9mZik7CisKKwlyZHNfaW5jX2luaXQoJnJtLT5tX2luYywgY29ubiwgY29ubi0+Y19sYWRkcik7CisJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsgLyogZm9yIHRoZSBpbmMgKi8KKworCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfbGFkZHIsIGNvbm4tPmNfZmFkZHIsICZybS0+bV9pbmMsCisJCQkgIEdGUF9LRVJORUwsIEtNX1VTRVIwKTsKKworCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpLAorCQkJICAgIE5VTEwpOworCisJcmRzX2luY19wdXQoJnJtLT5tX2luYyk7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArIGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2xvb3BfeG1pdF9jb25nX21hcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlCVUdfT04ob2Zmc2V0KTsKKwlCVUdfT04obWFwICE9IGNvbm4tPmNfbGNvbmcpOworCisJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUzsgaSsrKSB7CisJCW1lbWNweSgodm9pZCAqKWNvbm4tPmNfZmNvbmctPm1fcGFnZV9hZGRyc1tpXSwKKwkJICAgICAgICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0sIFBBR0VfU0laRSk7CisJfQorCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQoY29ubi0+Y19mY29uZywgfih1NjQpIDApOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKyBSRFNfQ09OR19NQVBfQllURVM7Cit9CisKKy8qIHdlIG5lZWQgdG8gYXQgbGVhc3QgZ2l2ZSB0aGUgdGhyZWFkIHNvbWV0aGluZyB0byBzdWNjZWVkICovCitzdGF0aWMgaW50IHJkc19sb29wX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsb29wX25vZGU7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworfTsKKworLyoKKyAqIEV2ZW4gdGhlIGxvb3BiYWNrIHRyYW5zcG9ydCBuZWVkcyB0byBrZWVwIHRyYWNrIG9mIGl0cyBjb25uZWN0aW9ucywKKyAqIHNvIGl0IGNhbiBjYWxsIHJkc19jb25uX2Rlc3Ryb3koKSBvbiB0aGVtIG9uIGV4aXQuIE4uQi4gdGhlcmUgYXJlCisgKiAxKyBsb29wYmFjayBhZGRyZXNzZXMgKDEyNy4qLiouKikgc28gaXQncyBub3QgYSBidWcgdG8gaGF2ZQorICogbXVsdGlwbGUgbG9vcGJhY2sgY29ubnMgYWxsb2NhdGVkLCBhbHRob3VnaCByYXRoZXIgdXNlbGVzcy4KKyAqLworc3RhdGljIGludCByZHNfbG9vcF9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChsYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZsYy0+bG9vcF9ub2RlKTsKKwlsYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGxjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvb3BfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmxjLT5sb29wX25vZGUsICZsb29wX2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb29wX2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfbG9vcF9jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYyA9IGFyZzsKKwlyZHNkZWJ1ZygibGMgJXBcbiIsIGxjKTsKKwlsaXN0X2RlbCgmbGMtPmxvb3Bfbm9kZSk7CisJa2ZyZWUobGMpOworfQorCitzdGF0aWMgaW50IHJkc19sb29wX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19sb29wX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworfQorCit2b2lkIHJkc19sb29wX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGMsICpfbGM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZsb29wX2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZsb29wX2Nvbm5zLCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsb29wX2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJmxvb3BfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGMsIF9sYywgJnRtcF9saXN0LCBsb29wX25vZGUpIHsKKwkJV0FSTl9PTihsYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShsYy0+Y29ubik7CisJfQorfQorCisvKgorICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJ3QgZ28gdGhyb3VnaCBnZW5lcmljCisgKiByZHNfc2VuZF94bWl0KCkgYW5kIGRvZXNuJ3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZAorICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXIKKyAqIHJkc19sb29wX3RyYW5zcG9ydC4KKyAqLworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2xvb3BfdHJhbnNwb3J0ID0geworCS54bWl0CQkJPSByZHNfbG9vcF94bWl0LAorCS54bWl0X2NvbmdfbWFwCQk9IHJkc19sb29wX3htaXRfY29uZ19tYXAsCisJLnJlY3YJCQk9IHJkc19sb29wX3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2xvb3BfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc19sb29wX2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19sb29wX2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfbG9vcF9jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX21lc3NhZ2VfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19tZXNzYWdlX2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX21lc3NhZ2VfaW5jX2ZyZWUsCisJLnRfbmFtZQkJCT0gImxvb3BiYWNrIiwKK307CmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuaCBiL25ldC9yZHMvbG9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmIwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2xvb3AuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX1JEU19MT09QX0gKKyNkZWZpbmUgX1JEU19MT09QX0gKKworLyogbG9vcC5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2xvb3BfdHJhbnNwb3J0OworCit2b2lkIHJkc19sb29wX2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE1ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpOworCitzdGF0aWMgdW5zaWduZWQgaW50CXJkc19leHRoZHJfc2l6ZVtfX1JEU19FWFRIRFJfTUFYXSA9IHsKK1tSRFNfRVhUSERSX05PTkVdCT0gMCwKK1tSRFNfRVhUSERSX1ZFUlNJT05dCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uKSwKK1tSRFNfRVhUSERSX1JETUFdCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hKSwKK1tSRFNfRVhUSERSX1JETUFfREVTVF0JPSBzaXplb2Yoc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCksCit9OworCisKK3ZvaWQgcmRzX21lc3NhZ2VfYWRkcmVmKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJcmRzZGVidWcoImFkZHJlZiBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKKwlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7Cit9CisKKy8qCisgKiBUaGlzIHJlbGllcyBvbiBkbWFfbWFwX3NnKCkgbm90IHRvdWNoaW5nIHNnW10ucGFnZSBkdXJpbmcgbWVyZ2luZy4KKyAqLworc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoUkRTX01TR19QQUdFVkVDLCAmcm0tPm1fZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJtLT5tX25lbnRzOyBpKyspIHsKKwkJcmRzZGVidWcoInB1dHRpbmcgZGF0YSBwYWdlICVwXG4iLCAodm9pZCAqKXNnX3BhZ2UoJnJtLT5tX3NnW2ldKSk7CisJCS8qIFhYWCB3aWxsIGhhdmUgdG8gcHV0X3BhZ2UgZm9yIHBhZ2UgcmVmcyAqLworCQlfX2ZyZWVfcGFnZShzZ19wYWdlKCZybS0+bV9zZ1tpXSkpOworCX0KKwlybS0+bV9uZW50cyA9IDA7CisKKwlpZiAocm0tPm1fcmRtYV9vcCkKKwkJcmRzX3JkbWFfZnJlZV9vcChybS0+bV9yZG1hX29wKTsKKwlpZiAocm0tPm1fcmRtYV9tcikKKwkJcmRzX21yX3B1dChybS0+bV9yZG1hX21yKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlyZHNfbWVzc2FnZV9wdXJnZShybSk7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJcmRzZGVidWcoInB1dCBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZybS0+bV9yZWZjb3VudCkpIHsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9zb2NrX2l0ZW0pKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9jb25uX2l0ZW0pKTsKKwkJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOworCisJCWtmcmVlKHJtKTsKKwl9Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworfQorCit2b2lkIHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJIF9fYmUxNiBkcG9ydCwgdTY0IHNlcSkKK3sKKwloZHItPmhfZmxhZ3MgPSAwOworCWhkci0+aF9zcG9ydCA9IHNwb3J0OworCWhkci0+aF9kcG9ydCA9IGRwb3J0OworCWhkci0+aF9zZXF1ZW5jZSA9IGNwdV90b19iZTY0KHNlcSk7CisJaGRyLT5oX2V4dGhkclswXSA9IFJEU19FWFRIRFJfTk9ORTsKK30KKworaW50IHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGV4dF9sZW4gPSBzaXplb2YodTgpICsgbGVuOworCXVuc2lnbmVkIGNoYXIgKmRzdDsKKworCS8qIEZvciBub3csIHJlZnVzZSB0byBhZGQgbW9yZSB0aGFuIG9uZSBleHRlbnNpb24gaGVhZGVyICovCisJaWYgKGhkci0+aF9leHRoZHJbMF0gIT0gUkRTX0VYVEhEUl9OT05FKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID49IF9fUkRTX0VYVEhEUl9NQVgKKwkgfHwgbGVuICE9IHJkc19leHRoZHJfc2l6ZVt0eXBlXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXh0X2xlbiA+PSBSRFNfSEVBREVSX0VYVF9TUEFDRSkKKwkJcmV0dXJuIDA7CisJZHN0ID0gaGRyLT5oX2V4dGhkcjsKKworCSpkc3QrKyA9IHR5cGU7CisJbWVtY3B5KGRzdCwgZGF0YSwgbGVuKTsKKworCWRzdFtsZW5dID0gUkRTX0VYVEhEUl9OT05FOworCXJldHVybiAxOworfQorCisvKgorICogSWYgYSBtZXNzYWdlIGhhcyBleHRlbnNpb24gaGVhZGVycywgcmV0cmlldmUgdGhlbSBoZXJlLgorICogQ2FsbCBsaWtlIHRoaXM6CisgKgorICogdW5zaWduZWQgaW50IHBvcyA9IDA7CisgKgorICogd2hpbGUgKDEpIHsKKyAqCWJ1ZmxlbiA9IHNpemVvZihidWZmZXIpOworICoJdHlwZSA9IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgYnVmZmVyLCAmYnVmbGVuKTsKKyAqCWlmICh0eXBlID09IFJEU19FWFRIRFJfTk9ORSkKKyAqCQlicmVhazsKKyAqCS4uLgorICogfQorICovCitpbnQgcmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJdW5zaWduZWQgaW50ICpwb3MsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50ICpidWZsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCwgZXh0X3R5cGUsIGV4dF9sZW47CisJdTggKnNyYyA9IGhkci0+aF9leHRoZHI7CisKKwlvZmZzZXQgPSAqcG9zOworCWlmIChvZmZzZXQgPj0gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCWdvdG8gbm9uZTsKKworCS8qIEdldCB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kIGxlbmd0aC4gRm9yIG5vdywgdGhlCisJICogbGVuZ3RoIGlzIGltcGxpZWQgYnkgdGhlIGV4dGVuc2lvbiB0eXBlLiAqLworCWV4dF90eXBlID0gc3JjW29mZnNldCsrXTsKKworCWlmIChleHRfdHlwZSA9PSBSRFNfRVhUSERSX05PTkUgfHwgZXh0X3R5cGUgPj0gX19SRFNfRVhUSERSX01BWCkKKwkJZ290byBub25lOworCWV4dF9sZW4gPSByZHNfZXh0aGRyX3NpemVbZXh0X3R5cGVdOworCWlmIChvZmZzZXQgKyBleHRfbGVuID4gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCWdvdG8gbm9uZTsKKworCSpwb3MgPSBvZmZzZXQgKyBleHRfbGVuOworCWlmIChleHRfbGVuIDwgKmJ1ZmxlbikKKwkJKmJ1ZmxlbiA9IGV4dF9sZW47CisJbWVtY3B5KGJ1Ziwgc3JjICsgb2Zmc2V0LCAqYnVmbGVuKTsKKwlyZXR1cm4gZXh0X3R5cGU7CisKK25vbmU6CisJKnBvcyA9IFJEU19IRUFERVJfRVhUX1NQQUNFOworCSpidWZsZW4gPSAwOworCXJldHVybiBSRFNfRVhUSERSX05PTkU7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gZXh0X2hkcjsKKworCWV4dF9oZHIuaF92ZXJzaW9uID0gY3B1X3RvX2JlMzIodmVyc2lvbik7CisJcmV0dXJuIHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oaGRyLCBSRFNfRVhUSERSX1ZFUlNJT04sICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworfQorCitpbnQgcmRzX21lc3NhZ2VfZ2V0X3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCAqdmVyc2lvbikKK3sKKwlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiBleHRfaGRyOworCXVuc2lnbmVkIGludCBwb3MgPSAwLCBsZW4gPSBzaXplb2YoZXh0X2hkcik7CisKKwkvKiBXZSBhc3N1bWUgdGhlIHZlcnNpb24gZXh0ZW5zaW9uIGlzIHRoZSBvbmx5IG9uZSBwcmVzZW50ICovCisJaWYgKHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgJmV4dF9oZHIsICZsZW4pICE9IFJEU19FWFRIRFJfVkVSU0lPTikKKwkJcmV0dXJuIDA7CisJKnZlcnNpb24gPSBiZTMyX3RvX2NwdShleHRfaGRyLmhfdmVyc2lvbik7CisJcmV0dXJuIDE7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1MzIgcl9rZXksIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCBleHRfaGRyOworCisJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJfa2V5KTsKKwlleHRfaGRyLmhfcmRtYV9vZmZzZXQgPSBjcHVfdG9fYmUzMihvZmZzZXQpOworCXJldHVybiByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKGhkciwgUkRTX0VYVEhEUl9SRE1BX0RFU1QsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2FsbG9jKHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlybSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbWVzc2FnZSkgKworCQkgICAgIChuZW50cyAqIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpKSwgZ2ZwKTsKKwlpZiAoIXJtKQorCQlnb3RvIG91dDsKKworCWlmIChuZW50cykKKwkJc2dfaW5pdF90YWJsZShybS0+bV9zZywgbmVudHMpOworCWF0b21pY19zZXQoJnJtLT5tX3JlZmNvdW50LCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmcm0tPm1fc29ja19pdGVtKTsKKwlJTklUX0xJU1RfSEVBRCgmcm0tPm1fY29ubl9pdGVtKTsKKwlzcGluX2xvY2tfaW5pdCgmcm0tPm1fcnNfbG9jayk7CisKK291dDoKKwlyZXR1cm4gcm07Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcnMsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJtID0gcmRzX21lc3NhZ2VfYWxsb2MoY2VpbCh0b3RhbF9sZW4sIFBBR0VfU0laRSksIEdGUF9LRVJORUwpOworCWlmIChybSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNldF9iaXQoUkRTX01TR19QQUdFVkVDLCAmcm0tPm1fZmxhZ3MpOworCXJtLT5tX2luYy5pX2hkci5oX2xlbiA9IGNwdV90b19iZTMyKHRvdGFsX2xlbik7CisJcm0tPm1fbmVudHMgPSBjZWlsKHRvdGFsX2xlbiwgUEFHRV9TSVpFKTsKKworCWZvciAoaSA9IDA7IGkgPCBybS0+bV9uZW50czsgKytpKSB7CisJCXNnX3NldF9wYWdlKCZybS0+bV9zZ1tpXSwKKwkJCQl2aXJ0X3RvX3BhZ2UocGFnZV9hZGRyc1tpXSksCisJCQkJUEFHRV9TSVpFLCAwKTsKKwl9CisKKwlyZXR1cm4gcm07Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIoc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmY7CisJdW5zaWduZWQgbG9uZyBzZ19vZmY7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCByZXQ7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKGNlaWwodG90YWxfbGVuLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocm0gPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9pbmMuaV9oZHIuaF9sZW4gPSBjcHVfdG9fYmUzMih0b3RhbF9sZW4pOworCisJLyoKKwkgKiBub3cgYWxsb2NhdGUgYW5kIGNvcHkgaW4gdGhlIGRhdGEgcGF5bG9hZC4KKwkgKi8KKwlzZyA9IHJtLT5tX3NnOworCWlvdiA9IGZpcnN0X2lvdjsKKwlpb3Zfb2ZmID0gMDsKKwlzZ19vZmYgPSAwOyAvKiBEZWFyIGdjYywgc2ctPnBhZ2Ugd2lsbCBiZSBudWxsIGZyb20ga3phbGxvYy4gKi8KKworCXdoaWxlICh0b3RhbF9sZW4pIHsKKwkJaWYgKHNnX3BhZ2Uoc2cpID09IE5VTEwpIHsKKwkJCXJldCA9IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzZywgdG90YWxfbGVuLAorCQkJCQkJICAgICAgIEdGUF9ISUdIVVNFUik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQkJcm0tPm1fbmVudHMrKzsKKwkJCXNnX29mZiA9IDA7CisJCX0KKworCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIHNnLT5sZW5ndGggLSBzZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCB0b3RhbF9sZW4pOworCisJCXJkc2RlYnVnKCJjb3B5aW5nICVsdSBieXRlcyBmcm9tIHVzZXIgaW92IFslcCwgJXp1XSArICVsdSB0byAiCisJCQkgInNnIFslcCwgJXUsICV1XSArICVsdVxuIiwKKwkJCSB0b19jb3B5LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sIGlvdl9vZmYsCisJCQkgKHZvaWQgKilzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgc2dfb2ZmKTsKKworCQlyZXQgPSByZHNfcGFnZV9jb3B5X2Zyb21fdXNlcihzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCArIHNnX29mZiwKKwkJCQkJICAgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICAgIHRvX2NvcHkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQl0b3RhbF9sZW4gLT0gdG9fY29weTsKKwkJc2dfb2ZmICs9IHRvX2NvcHk7CisKKwkJaWYgKHNnX29mZiA9PSBzZy0+bGVuZ3RoKQorCQkJc2crKzsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKHJtKQorCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJcm0gPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBybTsKK30KKworaW50IHJkc19tZXNzYWdlX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkJCSBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmY7CisJdW5zaWduZWQgbG9uZyB2ZWNfb2ZmOworCWludCBjb3BpZWQ7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJaW92ID0gZmlyc3RfaW92OworCWlvdl9vZmYgPSAwOworCXNnID0gcm0tPm1fc2c7CisJdmVjX29mZiA9IDA7CisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIHNnLT5sZW5ndGggLSB2ZWNfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCJjb3B5aW5nICVsdSBieXRlcyB0byB1c2VyIGlvdiBbJXAsICV6dV0gKyAlbHUgdG8gIgorCQkJICJzZyBbJXAsICV1LCAldV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCB2ZWNfb2ZmKTsKKworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQgKyB2ZWNfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCXZlY19vZmYgKz0gdG9fY29weTsKKwkJY29waWVkICs9IHRvX2NvcHk7CisKKwkJaWYgKHZlY19vZmYgPT0gc2ctPmxlbmd0aCkgeworCQkJdmVjX29mZiA9IDA7CisJCQlzZysrOworCQl9CisJfQorCisJcmV0dXJuIGNvcGllZDsKK30KKworLyoKKyAqIElmIHRoZSBtZXNzYWdlIGlzIHN0aWxsIG9uIHRoZSBzZW5kIHF1ZXVlLCB3YWl0IHVudGlsIHRoZSB0cmFuc3BvcnQKKyAqIGlzIGRvbmUgd2l0aCBpdC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBSRE1BIG9wZXJhdGlvbnMuCisgKi8KK3ZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXdhaXRfZXZlbnQocmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEsCisJCQkhdGVzdF9iaXQoUkRTX01TR19NQVBQRUQsICZybS0+bV9mbGFncykpOworfQorCit2b2lkIHJkc19tZXNzYWdlX3VubWFwcGVkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJY2xlYXJfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSkpCisJCXdha2VfdXAoJnJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9wYWdlLmMgYi9uZXQvcmRzL3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYwNzQzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9wYWdlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyIHsKKwlzdHJ1Y3QgcGFnZQkqcl9wYWdlOworCXVuc2lnbmVkIGxvbmcJcl9vZmZzZXQ7Cit9OworCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyLCByZHNfcGFnZV9yZW1haW5kZXJzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtZXJybm8gb24gZmFpbHVyZS4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZsdXNoX2RjYWNoZV9wYWdlKCkgYXMgdGhpcyBvbmx5IHdvcmtzCisgKiB3aXRoIHByaXZhdGUgcGFnZXMuICBJZiwgc2F5LCB3ZSB3ZXJlIHRvIGRvIGRpcmVjdGVkIHJlY2VpdmUgdG8gcGlubmVkCisgKiB1c2VyIHBhZ2VzIHdlJ2QgaGF2ZSB0byB3b3JyeSBtb3JlIGFib3V0IGNhY2hlIGNvaGVyZW5jZS4gIChUaG91Z2gKKyAqIHRoZSBmbHVzaF9kY2FjaGVfcGFnZSgpIGluIGdldF91c2VyX3BhZ2VzKCkgd291bGQgcHJvYmFibHkgYmUgZW5vdWdoKS4KKyAqLworaW50IHJkc19wYWdlX2NvcHlfdXNlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkgICAgICAgaW50IHRvX3VzZXIpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdm9pZCAqYWRkcjsKKworCWlmICh0b191c2VyKQorCQlyZHNfc3RhdHNfYWRkKHNfY29weV90b191c2VyLCBieXRlcyk7CisJZWxzZQorCQlyZHNfc3RhdHNfYWRkKHNfY29weV9mcm9tX3VzZXIsIGJ5dGVzKTsKKworCWFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJaWYgKHRvX3VzZXIpCisJCXJldCA9IF9fY29weV90b191c2VyX2luYXRvbWljKHB0ciwgYWRkciArIG9mZnNldCwgYnl0ZXMpOworCWVsc2UKKwkJcmV0ID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhhZGRyICsgb2Zmc2V0LCBwdHIsIGJ5dGVzKTsKKwlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1VTRVIwKTsKKworCWlmIChyZXQpIHsKKwkJYWRkciA9IGttYXAocGFnZSk7CisJCWlmICh0b191c2VyKQorCQkJcmV0ID0gY29weV90b191c2VyKHB0ciwgYWRkciArIG9mZnNldCwgYnl0ZXMpOworCQllbHNlCisJCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihhZGRyICsgb2Zmc2V0LCBwdHIsIGJ5dGVzKTsKKwkJa3VubWFwKHBhZ2UpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNZXNzYWdlIGFsbG9jYXRpb24gdXNlcyB0aGlzIHRvIGJ1aWxkIHVwIHJlZ2lvbnMgb2YgYSBtZXNzYWdlLgorICoKKyAqIEBieXRlcyAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkLgorICogQGdmcCAtIHRoZSB3YWl0aW5nIGJlaGF2aW91ciBvZiB0aGUgYWxsb2NhdGlvbgorICoKKyAqIEBnZnAgaXMgYWx3YXlzIG9yZWQgd2l0aCBfX0dGUF9ISUdITUVNLiAgQ2FsbGVycyBtdXN0IGJlIHByZXBhcmVkIHRvCisgKiBrbWFwIHRoZSBwYWdlcywgZXRjLgorICoKKyAqIElmIEBieXRlcyBpcyBhdCBsZWFzdCBhIGZ1bGwgcGFnZSB0aGVuIHRoaXMganVzdCByZXR1cm5zIGEgcGFnZSBmcm9tCisgKiBhbGxvY19wYWdlKCkuCisgKgorICogSWYgQGJ5dGVzIGlzIGEgcGFydGlhbCBwYWdlIHRoZW4gdGhpcyBzdG9yZXMgdGhlIHVudXNlZCByZWdpb24gb2YgdGhlCisgKiBwYWdlIGluIGEgcGVyLWNwdSBzdHJ1Y3R1cmUuICBGdXR1cmUgcGFydGlhbC1wYWdlIGFsbG9jYXRpb25zIG1heSBiZQorICogc2F0aXNmaWVkIGZyb20gdGhhdCBjYWNoZWQgcmVnaW9uLiAgVGhpcyBsZXRzIHVzIHdhc3RlIGxlc3MgbWVtb3J5IG9uCisgKiBzbWFsbCBhbGxvY2F0aW9ucyB3aXRoIG1pbmltYWwgY29tcGxleGl0eS4gIEl0IHdvcmtzIGJlY2F1c2UgdGhlIHRyYW5zbWl0CisgKiBwYXRoIHBhc3NlcyByZWFkLW9ubHkgcGFnZSByZWdpb25zIGRvd24gdG8gZGV2aWNlcy4gIFRoZXkgaG9sZCBhIHBhZ2UKKyAqIHJlZmVyZW5jZSB1bnRpbCB0aGV5IGFyZSBkb25lIHdpdGggdGhlIHJlZ2lvbi4KKyAqLworaW50IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCQkgICAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyICpyZW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmV0OworCisJZ2ZwIHw9IF9fR0ZQX0hJR0hNRU07CisKKwkvKiBqdW1wIHN0cmFpZ2h0IHRvIGFsbG9jYXRpb24gaWYgd2UncmUgdHJ5aW5nIGZvciBhIGh1Z2UgcGFnZSAqLworCWlmIChieXRlcyA+PSBQQUdFX1NJWkUpIHsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwKTsKKwkJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCXNnX3NldF9wYWdlKHNjYXQsIHBhZ2UsIFBBR0VfU0laRSwgMCk7CisJCQlyZXQgPSAwOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXJlbSA9ICZwZXJfY3B1KHJkc19wYWdlX3JlbWFpbmRlcnMsIGdldF9jcHUoKSk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJd2hpbGUgKDEpIHsKKwkJLyogYXZvaWQgYSB0aW55IHJlZ2lvbiBnZXR0aW5nIHN0dWNrIGJ5IHRvc3NpbmcgaXQgKi8KKwkJaWYgKHJlbS0+cl9wYWdlICYmIGJ5dGVzID4gKFBBR0VfU0laRSAtIHJlbS0+cl9vZmZzZXQpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcGFnZV9yZW1haW5kZXJfbWlzcyk7CisJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCX0KKworCQkvKiBoYW5kIG91dCBhIGZyYWdtZW50IGZyb20gdGhlIGNhY2hlZCBwYWdlICovCisJCWlmIChyZW0tPnJfcGFnZSAmJiBieXRlcyA8PSAoUEFHRV9TSVpFIC0gcmVtLT5yX29mZnNldCkpIHsKKwkJCXNnX3NldF9wYWdlKHNjYXQsIHJlbS0+cl9wYWdlLCBieXRlcywgcmVtLT5yX29mZnNldCk7CisJCQlnZXRfcGFnZShzZ19wYWdlKHNjYXQpKTsKKworCQkJaWYgKHJlbS0+cl9vZmZzZXQgIT0gMCkKKwkJCQlyZHNfc3RhdHNfaW5jKHNfcGFnZV9yZW1haW5kZXJfaGl0KTsKKworCQkJcmVtLT5yX29mZnNldCArPSBieXRlczsKKwkJCWlmIChyZW0tPnJfb2Zmc2V0ID09IFBBR0VfU0laRSkgeworCQkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCQl9CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhbGxvYyBpZiB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byB1c2UgKi8KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlwdXRfY3B1KCk7CisKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwKTsKKworCQlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBnZXRfY3B1KCkpOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZGlkIHNvbWVvbmUgcmFjZSB0byBmaWxsIHRoZSByZW1haW5kZXIgYmVmb3JlIHVzPyAqLworCQlpZiAocmVtLT5yX3BhZ2UpIHsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBvdGhlcndpc2UgaW5zdGFsbCBvdXIgcGFnZSBhbmQgbG9vcCBhcm91bmQgdG8gYWxsb2MgKi8KKwkJcmVtLT5yX3BhZ2UgPSBwYWdlOworCQlyZW0tPnJfb2Zmc2V0ID0gMDsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHV0X2NwdSgpOworb3V0OgorCXJkc2RlYnVnKCJieXRlcyAlbHUgcmV0ICVkICVwICV1ICV1XG4iLCBieXRlcywgcmV0LAorCQkgcmV0ID8gTlVMTCA6IHNnX3BhZ2Uoc2NhdCksIHJldCA/IDAgOiBzY2F0LT5vZmZzZXQsCisJCSByZXQgPyAwIDogc2NhdC0+bGVuZ3RoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXN0cnVjdCByZHNfcGFnZV9yZW1haW5kZXIgKnJlbTsKKwlsb25nIGNwdSA9IChsb25nKWhjcHU7CisKKwlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBjcHUpOworCisJcmRzZGVidWcoImNwdSAlbGQgYWN0aW9uIDB4JWx4XG4iLCBjcHUsIGFjdGlvbik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX0RFQUQ6CisJCWlmIChyZW0tPnJfcGFnZSkKKwkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayByZHNfcGFnZV9yZW1haW5kZXJfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSByZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeSwKK307CisKK3ZvaWQgcmRzX3BhZ2VfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCXJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5KCZyZHNfcGFnZV9yZW1haW5kZXJfbmIsCisJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKUNQVV9ERUFELAorCQkJCQkgICAgICAodm9pZCAqKShsb25nKWkpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWVlYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPiAvKiBmb3IgRE1BXypfREVWSUNFICovCisKKyNpbmNsdWRlICJyZG1hLmgiCisKKy8qCisgKiBYWFgKKyAqICAtIGJ1aWxkIHdpdGggc3BhcnNlCisgKiAgLSBzaG91bGQgd2UgbGltaXQgdGhlIHNpemUgb2YgYSBtciByZWdpb24/ICBsZXQgdHJhbnNwb3J0IHJldHVybiBmYWlsdXJlPworICogIC0gc2hvdWxkIHdlIGRldGVjdCBkdXBsaWNhdGUga2V5cyBvbiBhIHNvY2tldD8gIGhtbS4KKyAqICAtIGFuIHJkbWEgaXMgYW4gbWxvY2ssIGFwcGx5IHJsaW1pdD8KKyAqLworCisvKgorICogZ2V0IHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgbG9va2luZyBhdCB0aGUgcGFnZSBpbmRpY2VzIHRoYXQgdGhlIHN0YXJ0IGFuZAorICogZW5kIGFkZHJlc3NlcyBmYWxsIGluLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgdmVjIGlzIGludmFsaWQuICBJdCBpcyBpbnZhbGlkIGlmIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIGNhdXNlcyB0aGUgYWRkcmVzcyB0byB3cmFwIG9yIG92ZXJmbG93cyBhbiB1bnNpZ25lZCBpbnQuICBUaGlzIGNvbWVzCisgKiBmcm9tIGJlaW5nIHN0b3JlZCBpbiB0aGUgJ2xlbmd0aCcgbWVtYmVyIG9mICdzdHJ1Y3Qgc2NhdHRlcmxpc3QnLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19wYWdlc19pbl92ZWMoc3RydWN0IHJkc19pb3ZlYyAqdmVjKQoreworCWlmICgodmVjLT5hZGRyICsgdmVjLT5ieXRlcyA8PSB2ZWMtPmFkZHIpIHx8CisJICAgICh2ZWMtPmJ5dGVzID4gKHU2NClVSU5UX01BWCkpCisJCXJldHVybiAwOworCisJcmV0dXJuICgodmVjLT5hZGRyICsgdmVjLT5ieXRlcyArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpIC0KKwkJKHZlYy0+YWRkciA+PiBQQUdFX1NISUZUKTsKK30KKworc3RhdGljIHN0cnVjdCByZHNfbXIgKnJkc19tcl90cmVlX3dhbGsoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHU2NCBrZXksCisJCQkJICAgICAgIHN0cnVjdCByZHNfbXIgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX21yICptcjsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJbXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7CisKKwkJaWYgKGtleSA8IG1yLT5yX2tleSkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoa2V5ID4gbXItPnJfa2V5KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIG1yOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPnJfcmJfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPnJfcmJfbm9kZSwgcm9vdCk7CisJCWF0b21pY19pbmMoJmluc2VydC0+cl9yZWZjb3VudCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogRGVzdHJveSB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIHBhcnQgb2YgYSBNUi4KKyAqLworc3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IG1yLT5yX3NvY2s7CisJdm9pZCAqdHJhbnNfcHJpdmF0ZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJSRFM6IGRlc3Ryb3kgbXIga2V5IGlzICV4IHJlZmNudCAldVxuIiwKKwkJCW1yLT5yX2tleSwgYXRvbWljX3JlYWQoJm1yLT5yX3JlZmNvdW50KSk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChSRFNfTVJfREVBRCwgJm1yLT5yX3N0YXRlKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwlpZiAoIVJCX0VNUFRZX05PREUoJm1yLT5yX3JiX25vZGUpKQorCQlyYl9lcmFzZSgmbXItPnJfcmJfbm9kZSwgJnJzLT5yc19yZG1hX2tleXMpOworCXRyYW5zX3ByaXZhdGUgPSBtci0+cl90cmFuc19wcml2YXRlOworCW1yLT5yX3RyYW5zX3ByaXZhdGUgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cmFuc19wcml2YXRlKQorCQltci0+cl90cmFucy0+ZnJlZV9tcih0cmFuc19wcml2YXRlLCBtci0+cl9pbnZhbGlkYXRlKTsKK30KKwordm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IHJkc19tciAqbXIpCit7CisJcmRzX2Rlc3Ryb3lfbXIobXIpOworCWtmcmVlKG1yKTsKK30KKworLyoKKyAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbid0IGhhdmUgYW55IG1vcmUgaW9jdGxzIGNhbGxlZCBvbgorICogdGhlIHNvY2tldCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy4KKyAqLwordm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCS8qIFJlbGVhc2UgYW55IE1ScyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb2NrZXQgKi8KKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmcnMtPnJzX3JkbWFfa2V5cykpKSB7CisJCW1yID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7CisJCWlmIChtci0+cl90cmFucyA9PSBycy0+cnNfdHJhbnNwb3J0KQorCQkJbXItPnJfaW52YWxpZGF0ZSA9IDA7CisJCXJkc19tcl9wdXQobXIpOworCX0KKworCWlmIChycy0+cnNfdHJhbnNwb3J0ICYmIHJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycykKKwkJcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKCk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGluIHVzZXIgcGFnZXMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLAorCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHdyaXRlKQoreworCWludCByZXQ7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHVzZXJfYWRkciwKKwkJCSAgICAgbnJfcGFnZXMsIHdyaXRlLCAwLCBwYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCWlmICgwIDw9IHJldCAmJiAodW5zaWduZWQpIHJldCA8IG5yX3BhZ2VzKSB7CisJCXdoaWxlIChyZXQtLSkKKwkJCXB1dF9wYWdlKHBhZ2VzW3JldF0pOworCQlyZXQgPSAtRUZBVUxUOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncywKKwkJCQl1NjQgKmNvb2tpZV9yZXQsIHN0cnVjdCByZHNfbXIgKiptcl9yZXQpCit7CisJc3RydWN0IHJkc19tciAqbXIgPSBOVUxMLCAqZm91bmQ7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdm9pZCAqdHJhbnNfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBpbnQgbmVudHM7CisJbG9uZyBpOworCWludCByZXQ7CisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnMtPnJzX3RyYW5zcG9ydC0+Z2V0X21yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCW5yX3BhZ2VzID0gcmRzX3BhZ2VzX2luX3ZlYygmYXJncy0+dmVjKTsKKwlpZiAobnJfcGFnZXMgPT0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiUkRTOiBnZXRfbXIgYWRkciAlbGx4IGxlbiAlbGx1IG5yX3BhZ2VzICV1XG4iLAorCQlhcmdzLT52ZWMuYWRkciwgYXJncy0+dmVjLmJ5dGVzLCBucl9wYWdlcyk7CisKKwkvKiBYWFggY2xhbXAgbnJfcGFnZXMgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhpcyBhbGxvYz8gKi8KKwlwYWdlcyA9IGtjYWxsb2MobnJfcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX21yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX3NldCgmbXItPnJfcmVmY291bnQsIDEpOworCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCW1yLT5yX3RyYW5zID0gcnMtPnJzX3RyYW5zcG9ydDsKKwltci0+cl9zb2NrID0gcnM7CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9VU0VfT05DRSkKKwkJbXItPnJfdXNlX29uY2UgPSAxOworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX0lOVkFMSURBVEUpCisJCW1yLT5yX2ludmFsaWRhdGUgPSAxOworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX1JFQURXUklURSkKKwkJbXItPnJfd3JpdGUgPSAxOworCisJLyoKKwkgKiBQaW4gdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCB0aGUgdXNlciBidWZmZXIgYW5kIHRyYW5zZmVyIHRoZSBwYWdlCisJICogcG9pbnRlcnMgdG8gdGhlIG1yJ3Mgc2cgYXJyYXkuICBXZSBjaGVjayB0byBzZWUgaWYgd2UndmUgbWFwcGVkCisJICogdGhlIHdob2xlIHJlZ2lvbiBhZnRlciB0cmFuc2ZlcnJpbmcgdGhlIHBhcnRpYWwgcGFnZSByZWZlcmVuY2VzCisJICogdG8gdGhlIHNnIGFycmF5IHNvIHRoYXQgd2UgY2FuIGhhdmUgb25lIHBhZ2UgcmVmIGNsZWFudXAgcGF0aC4KKwkgKgorCSAqIEZvciBub3cgd2UgaGF2ZSBubyBmbGFnIHRoYXQgdGVsbHMgdXMgd2hldGhlciB0aGUgbWFwcGluZyBpcworCSAqIHIvbyBvciByL3cuIFdlIG5lZWQgdG8gYXNzdW1lIHIvdywgb3Igd2UnbGwgZG8gYSBsb3Qgb2YgUkRNQSB0bworCSAqIHRoZSB6ZXJvIHBhZ2UuCisJICovCisJcmV0ID0gcmRzX3Bpbl9wYWdlcyhhcmdzLT52ZWMuYWRkciAmIFBBR0VfTUFTSywgbnJfcGFnZXMsIHBhZ2VzLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwluZW50cyA9IHJldDsKKwlzZyA9IGtjYWxsb2MobmVudHMsIHNpemVvZigqc2cpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2cgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJV0FSTl9PTighbmVudHMpOworCXNnX2luaXRfdGFibGUoc2csIG5lbnRzKTsKKworCS8qIFN0aWNrIGFsbCBwYWdlcyBpbnRvIHRoZSBzY2F0dGVybGlzdCAqLworCWZvciAoaSA9IDAgOyBpIDwgbmVudHM7IGkrKykKKwkJc2dfc2V0X3BhZ2UoJnNnW2ldLCBwYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTsKKworCXJkc2RlYnVnKCJSRFM6IHRyYW5zX3ByaXZhdGUgbmVudHMgaXMgJXVcbiIsIG5lbnRzKTsKKworCS8qIE9idGFpbiBhIHRyYW5zcG9ydCBzcGVjaWZpYyBNUi4gSWYgdGhpcyBzdWNjZWVkcywgdGhlCisJICogcy9nIGxpc3QgaXMgbm93IG93bmVkIGJ5IHRoZSBNUi4KKwkgKiBOb3RlIHRoYXQgZG1hX21hcCgpIGltcGxpZXMgdGhhdCBwZW5kaW5nIHdyaXRlcyBhcmUKKwkgKiBmbHVzaGVkIHRvIFJBTSwgc28gbm8gZG1hX3N5bmMgaXMgbmVlZGVkIGhlcmUuICovCisJdHJhbnNfcHJpdmF0ZSA9IHJzLT5yc190cmFuc3BvcnQtPmdldF9tcihzZywgbmVudHMsIHJzLAorCQkJCQkJICZtci0+cl9rZXkpOworCisJaWYgKElTX0VSUih0cmFuc19wcml2YXRlKSkgeworCQlmb3IgKGkgPSAwIDsgaSA8IG5lbnRzOyBpKyspCisJCQlwdXRfcGFnZShzZ19wYWdlKCZzZ1tpXSkpOworCQlrZnJlZShzZyk7CisJCXJldCA9IFBUUl9FUlIodHJhbnNfcHJpdmF0ZSk7CisJCWdvdG8gb3V0OworCX0KKworCW1yLT5yX3RyYW5zX3ByaXZhdGUgPSB0cmFuc19wcml2YXRlOworCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIHB1dF91c2VyIGtleSBpcyAleCBjb29raWVfYWRkciAlcFxuIiwKKwkgICAgICAgbXItPnJfa2V5LCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBhcmdzLT5jb29raWVfYWRkcik7CisKKwkvKiBUaGUgdXNlciBtYXkgcGFzcyB1cyBhbiB1bmFsaWduZWQgYWRkcmVzcywgYnV0IHdlIGNhbiBvbmx5CisJICogbWFwIHBhZ2UgYWxpZ25lZCByZWdpb25zLiBTbyB3ZSBrZWVwIHRoZSBvZmZzZXQsIGFuZCBidWlsZAorCSAqIGEgNjRiaXQgY29va2llIGNvbnRhaW5pbmcgPFJfS2V5LCBvZmZzZXQ+IGFuZCBwYXNzIHRoYXQKKwkgKiBhcm91bmQuICovCisJY29va2llID0gcmRzX3JkbWFfbWFrZV9jb29raWUobXItPnJfa2V5LCBhcmdzLT52ZWMuYWRkciAmIH5QQUdFX01BU0spOworCWlmIChjb29raWVfcmV0KQorCQkqY29va2llX3JldCA9IGNvb2tpZTsKKworCWlmIChhcmdzLT5jb29raWVfYWRkciAmJiBwdXRfdXNlcihjb29raWUsICh1NjQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPmNvb2tpZV9hZGRyKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbnNlcnRpbmcgdGhlIG5ldyBNUiBpbnRvIHRoZSByYnRyZWUgYnVtcHMgaXRzCisJICogcmVmZXJlbmNlIGNvdW50LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJZm91bmQgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCBtci0+cl9rZXksIG1yKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlCVUdfT04oZm91bmQgJiYgZm91bmQgIT0gbXIpOworCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIGtleSBpcyAleFxuIiwgbXItPnJfa2V5KTsKKwlpZiAobXJfcmV0KSB7CisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwkJKm1yX3JldCA9IG1yOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocGFnZXMpOworCWlmIChtcikKKwkJcmRzX21yX3B1dChtcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIGFyZ3M7CisKKwlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIF9fdXNlciAqKW9wdHZhbCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCAmYXJncywgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBNUiBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIFJfS2V5CisgKi8KK2ludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCByZHNfZnJlZV9tcl9hcmdzIGFyZ3M7CisJc3RydWN0IHJkc19tciAqbXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCByZHNfZnJlZV9tcl9hcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyBfX3VzZXIgKilvcHR2YWwsCisJCQkgICBzaXplb2Yoc3RydWN0IHJkc19mcmVlX21yX2FyZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBTcGVjaWFsIGNhc2UgLSBhIG51bGwgY29va2llIG1lYW5zIGZsdXNoIGFsbCB1bnVzZWQgTVJzICovCisJaWYgKGFyZ3MuY29va2llID09IDApIHsKKwkJaWYgKCFycy0+cnNfdHJhbnNwb3J0IHx8ICFycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKCk7CisJCXJldHVybiAwOworCX0KKworCS8qIExvb2sgdXAgdGhlIE1SIGdpdmVuIGl0cyBSX2tleSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHJidHJlZQorCSAqIHNvIG5vYm9keSBlbHNlIGZpbmRzIGl0LgorCSAqIFRoaXMgc2hvdWxkIGFsc28gcHJldmVudCByYWNlcyB3aXRoIHJkc19yZG1hX3VudXNlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByZHNfcmRtYV9jb29raWVfa2V5KGFyZ3MuY29va2llKSwgTlVMTCk7CisJaWYgKG1yKSB7CisJCXJiX2VyYXNlKCZtci0+cl9yYl9ub2RlLCAmcnMtPnJzX3JkbWFfa2V5cyk7CisJCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCQlpZiAoYXJncy5mbGFncyAmIFJEU19SRE1BX0lOVkFMSURBVEUpCisJCQltci0+cl9pbnZhbGlkYXRlID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKCFtcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGNhbGwgcmRzX2Rlc3Ryb3lfbXIoKSBvdXJzZWx2ZXMgc28gdGhhdCB3ZSdyZSBzdXJlIGl0J3MgZG9uZSBieSB0aGUgdGltZQorCSAqIHdlIHJldHVybi4gIElmIHdlIGxldCByZHNfbXJfcHV0KCkgZG8gaXQgaXQgbWlnaHQgbm90IGhhcHBlbiB1bnRpbAorCSAqIHNvbWVvbmUgZWxzZSBkcm9wcyB0aGVpciByZWYuCisJICovCisJcmRzX2Rlc3Ryb3lfbXIobXIpOworCXJkc19tcl9wdXQobXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIGFuIGV4dGVuc2lvbiBoZWFkZXIgdGhhdAorICogdGVsbHMgdXMgdGhpcyBNUiB3YXMgdXNlZC4gSXQgYWxsb3dzIHVzIHRvIGltcGxlbWVudAorICogdXNlX29uY2Ugc2VtYW50aWNzCisgKi8KK3ZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpCit7CisJc3RydWN0IHJkc19tciAqbXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgem90X21lID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByX2tleSwgTlVMTCk7CisJaWYgKG1yICYmIChtci0+cl91c2Vfb25jZSB8fCBmb3JjZSkpIHsKKwkJcmJfZXJhc2UoJm1yLT5yX3JiX25vZGUsICZycy0+cnNfcmRtYV9rZXlzKTsKKwkJUkJfQ0xFQVJfTk9ERSgmbXItPnJfcmJfbm9kZSk7CisJCXpvdF9tZSA9IDE7CisJfSBlbHNlIGlmIChtcikKKwkJYXRvbWljX2luYygmbXItPnJfcmVmY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCS8qIE1heSBoYXZlIHRvIGlzc3VlIGEgZG1hX3N5bmMgb24gdGhpcyBtZW1vcnkgcmVnaW9uLgorCSAqIE5vdGUgd2UgY291bGQgYXZvaWQgdGhpcyBpZiB0aGUgb3BlcmF0aW9uIHdhcyBhIFJETUEgUkVBRCwKKwkgKiBidXQgYXQgdGhpcyBwb2ludCB3ZSBjYW4ndCB0ZWxsLiAqLworCWlmIChtciAhPSBOVUxMKSB7CisJCWlmIChtci0+cl90cmFucy0+c3luY19tcikKKwkJCW1yLT5yX3RyYW5zLT5zeW5jX21yKG1yLT5yX3RyYW5zX3ByaXZhdGUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogSWYgdGhlIE1SIHdhcyBtYXJrZWQgYXMgaW52YWxpZGF0ZSwgdGhpcyB3aWxsCisJCSAqIHRyaWdnZXIgYW4gYXN5bmMgZmx1c2guICovCisJCWlmICh6b3RfbWUpCisJCQlyZHNfZGVzdHJveV9tcihtcik7CisJCXJkc19tcl9wdXQobXIpOworCX0KK30KKwordm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCByZHNfcmRtYV9vcCAqcm8pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm8tPnJfbmVudHM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoJnJvLT5yX3NnW2ldKTsKKworCQkvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCisJCSAqIHRvIGxvY2FsIG1lbW9yeSAqLworCQlpZiAoIXJvLT5yX3dyaXRlKQorCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCXB1dF9wYWdlKHBhZ2UpOworCX0KKworCWtmcmVlKHJvLT5yX25vdGlmaWVyKTsKKwlrZnJlZShybyk7Cit9CisKKy8qCisgKiBhcmdzIGlzIGEgcG9pbnRlciB0byBhbiBpbi1rZXJuZWwgY29weSBpbiB0aGUgc2VuZG1zZyBjbXNnLgorICovCitzdGF0aWMgc3RydWN0IHJkc19yZG1hX29wICpyZHNfcmRtYV9wcmVwYXJlKHN0cnVjdCByZHNfc29jayAqcnMsCisJCQkJCSAgICBzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgcmRzX2lvdmVjIHZlYzsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisJdW5zaWduZWQgaW50IG1heF9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnJfYnl0ZXM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJc3RydWN0IHJkc19pb3ZlYyBfX3VzZXIgKmxvY2FsX3ZlYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBucjsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgcmV0OworCisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXJncy0+bnJfbG9jYWwgPiAodTY0KVVJTlRfTUFYKSB7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCisJbnJfcGFnZXMgPSAwOworCW1heF9wYWdlcyA9IDA7CisKKwlsb2NhbF92ZWMgPSAoc3RydWN0IHJkc19pb3ZlYyBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgYXJncy0+bG9jYWxfdmVjX2FkZHI7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHZlY3RvciAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5ucl9sb2NhbDsgaSsrKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmVjLCAmbG9jYWxfdmVjW2ldLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2lvdmVjKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5yID0gcmRzX3BhZ2VzX2luX3ZlYygmdmVjKTsKKwkJaWYgKG5yID09IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW1heF9wYWdlcyA9IG1heChuciwgbWF4X3BhZ2VzKTsKKwkJbnJfcGFnZXMgKz0gbnI7CisJfQorCisJcGFnZXMgPSBrY2FsbG9jKG1heF9wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlvcCA9IGt6YWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHJkc19yZG1hX29wLCByX3NnW25yX3BhZ2VzXSksIEdGUF9LRVJORUwpOworCWlmIChvcCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW9wLT5yX3dyaXRlID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9SRUFEV1JJVEUpOworCW9wLT5yX2ZlbmNlID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9GRU5DRSk7CisJb3AtPnJfbm90aWZ5ID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9OT1RJRllfTUUpOworCW9wLT5yX3JlY3ZlcnIgPSBycy0+cnNfcmVjdmVycjsKKwlXQVJOX09OKCFucl9wYWdlcyk7CisJc2dfaW5pdF90YWJsZShvcC0+cl9zZywgbnJfcGFnZXMpOworCisJaWYgKG9wLT5yX25vdGlmeSB8fCBvcC0+cl9yZWN2ZXJyKSB7CisJCS8qIFdlIGFsbG9jYXRlIGFuIHVuaW5pdGlhbGl6ZWQgbm90aWZpZXIgaGVyZSwgYmVjYXVzZQorCQkgKiB3ZSBkb24ndCB3YW50IHRvIGRvIHRoYXQgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlci4gV2UKKwkJICogd291bGQgaGF2ZSB0byB1c2UgR0ZQX0FUT01JQyB0aGVyZSwgYW5kIGRvbid0IHdhbnQgdG8gZGVhbAorCQkgKiB3aXRoIGZhaWxlZCBhbGxvY2F0aW9ucy4KKwkJICovCisJCW9wLT5yX25vdGlmaWVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJkc19ub3RpZmllciksIEdGUF9LRVJORUwpOworCQlpZiAoIW9wLT5yX25vdGlmaWVyKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJb3AtPnJfbm90aWZpZXItPm5fdXNlcl90b2tlbiA9IGFyZ3MtPnVzZXJfdG9rZW47CisJCW9wLT5yX25vdGlmaWVyLT5uX3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJfQorCisJLyogVGhlIGNvb2tpZSBjb250YWlucyB0aGUgUl9LZXkgb2YgdGhlIHJlbW90ZSBtZW1vcnkgcmVnaW9uLCBhbmQKKwkgKiBvcHRpb25hbGx5IGFuIG9mZnNldCBpbnRvIGl0LiBUaGlzIGlzIGhvdyB3ZSBpbXBsZW1lbnQgUkRNQSBpbnRvCisJICogdW5hbGlnbmVkIG1lbW9yeS4KKwkgKiBXaGVuIHNldHRpbmcgdXAgdGhlIFJETUEsIHdlIG5lZWQgdG8gYWRkIHRoYXQgb2Zmc2V0IHRvIHRoZQorCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgKHdoaWNoIGlzIHJlYWxseSBhbiBvZmZzZXQgaW50byB0aGUgTVIpCisJICogRklYTUU6IFdlIG1heSB3YW50IHRvIG1vdmUgdGhpcyBpbnRvIGliX3JkbWEuYworCSAqLworCW9wLT5yX2tleSA9IHJkc19yZG1hX2Nvb2tpZV9rZXkoYXJncy0+Y29va2llKTsKKwlvcC0+cl9yZW1vdGVfYWRkciA9IGFyZ3MtPnJlbW90ZV92ZWMuYWRkciArIHJkc19yZG1hX2Nvb2tpZV9vZmZzZXQoYXJncy0+Y29va2llKTsKKworCW5yX2J5dGVzID0gMDsKKworCXJkc2RlYnVnKCJSRFM6IHJkbWEgcHJlcGFyZSBucl9sb2NhbCAlbGx1IHJ2YSAlbGx4IHJrZXkgJXhcbiIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXJncy0+bnJfbG9jYWwsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXJncy0+cmVtb3RlX3ZlYy5hZGRyLAorCSAgICAgICBvcC0+cl9rZXkpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm5yX2xvY2FsOyBpKyspIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ZWMsICZsb2NhbF92ZWNbaV0sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfaW92ZWMpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbnIgPSByZHNfcGFnZXNfaW5fdmVjKCZ2ZWMpOworCQlpZiAobnIgPT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcnMtPnJzX3VzZXJfYWRkciA9IHZlYy5hZGRyOworCQlycy0+cnNfdXNlcl9ieXRlcyA9IHZlYy5ieXRlczsKKworCQkvKiBkaWQgdGhlIHVzZXIgY2hhbmdlIHRoZSB2ZWMgdW5kZXIgdXM/ICovCisJCWlmIChuciA+IG1heF9wYWdlcyB8fCBvcC0+cl9uZW50cyArIG5yID4gbnJfcGFnZXMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBJZiBpdCdzIGEgV1JJVEUgb3BlcmF0aW9uLCB3ZSB3YW50IHRvIHBpbiB0aGUgcGFnZXMgZm9yIHJlYWRpbmcuCisJCSAqIElmIGl0J3MgYSBSRUFEIG9wZXJhdGlvbiwgd2UgbmVlZCB0byBwaW4gdGhlIHBhZ2VzIGZvciB3cml0aW5nLgorCQkgKi8KKwkJcmV0ID0gcmRzX3Bpbl9wYWdlcyh2ZWMuYWRkciAmIFBBR0VfTUFTSywgbnIsIHBhZ2VzLCAhb3AtPnJfd3JpdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXJkc2RlYnVnKCJSRFM6IG5yX2J5dGVzICV1IG5yICV1IHZlYy5ieXRlcyAlbGx1IHZlYy5hZGRyICVsbHhcbiIsCisJCSAgICAgICBucl9ieXRlcywgbnIsIHZlYy5ieXRlcywgdmVjLmFkZHIpOworCisJCW5yX2J5dGVzICs9IHZlYy5ieXRlczsKKworCQlmb3IgKGogPSAwOyBqIDwgbnI7IGorKykgeworCQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHZlYy5hZGRyICYgflBBR0VfTUFTSzsKKworCQkJc2cgPSAmb3AtPnJfc2dbb3AtPnJfbmVudHMgKyBqXTsKKwkJCXNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSwKKwkJCQkJbWluX3QodW5zaWduZWQgaW50LCB2ZWMuYnl0ZXMsIFBBR0VfU0laRSAtIG9mZnNldCksCisJCQkJCW9mZnNldCk7CisKKwkJCXJkc2RlYnVnKCJSRFM6IHNnLT5vZmZzZXQgJXggc2ctPmxlbiAleCB2ZWMuYWRkciAlbGx4IHZlYy5ieXRlcyAlbGx1XG4iLAorCQkJICAgICAgIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIHZlYy5hZGRyLCB2ZWMuYnl0ZXMpOworCisJCQl2ZWMuYWRkciArPSBzZy0+bGVuZ3RoOworCQkJdmVjLmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCX0KKworCQlvcC0+cl9uZW50cyArPSBucjsKKwl9CisKKworCWlmIChucl9ieXRlcyA+IGFyZ3MtPnJlbW90ZV92ZWMuYnl0ZXMpIHsKKwkJcmRzZGVidWcoIlJEUyBucl9ieXRlcyAldSByZW1vdGVfYnl0ZXMgJXUgZG8gbm90IG1hdGNoXG4iLAorCQkJCW5yX2J5dGVzLAorCQkJCSh1bnNpZ25lZCBpbnQpIGFyZ3MtPnJlbW90ZV92ZWMuYnl0ZXMpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJb3AtPnJfYnl0ZXMgPSBucl9ieXRlczsKKworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocGFnZXMpOworCWlmIChyZXQpIHsKKwkJaWYgKG9wKQorCQkJcmRzX3JkbWFfZnJlZV9vcChvcCk7CisJCW9wID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gb3A7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gYXNrcyBmb3IgYSBSRE1BIHRyYW5zZmVyLgorICogRXh0cmFjdCBhbGwgYXJndW1lbnRzIGFuZCBzZXQgdXAgdGhlIHJkbWFfb3AKKyAqLworaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wOworCisJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfcmRtYV9hcmdzKSkKKwkgfHwgcm0tPm1fcmRtYV9vcCAhPSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9wID0gcmRzX3JkbWFfcHJlcGFyZShycywgQ01TR19EQVRBKGNtc2cpKTsKKwlpZiAoSVNfRVJSKG9wKSkKKwkJcmV0dXJuIFBUUl9FUlIob3ApOworCXJkc19zdGF0c19pbmMoc19zZW5kX3JkbWEpOworCXJtLT5tX3JkbWFfb3AgPSBvcDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiB3YW50cyB1cyB0byBwYXNzIGFuIFJETUEgZGVzdGluYXRpb24gKGFrYSBNUikKKyAqIHRvIHRoZSByZW1vdGUKKyAqLworaW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfbXIgKm1yOworCXUzMiByX2tleTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZihyZHNfcmRtYV9jb29raWVfdCkpCisJIHx8IHJtLT5tX3JkbWFfY29va2llICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZybS0+bV9yZG1hX2Nvb2tpZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2Yocm0tPm1fcmRtYV9jb29raWUpKTsKKworCS8qIFdlIGFyZSByZXVzaW5nIGEgcHJldmlvdXNseSBtYXBwZWQgTVIgaGVyZS4gTW9zdCBsaWtlbHksIHRoZQorCSAqIGFwcGxpY2F0aW9uIGhhcyB3cml0dGVuIHRvIHRoZSBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseQorCSAqIGZsdXNoIHRob3NlIHdyaXRlcyB0byBSQU0uIE90aGVyd2lzZSB0aGUgSENBIG1heSBub3Qgc2VlIHRoZW0KKwkgKiB3aGVuIGRvaW5nIGEgRE1BIGZyb20gdGhhdCBidWZmZXIuCisJICovCisJcl9rZXkgPSByZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByX2tleSwgTlVMTCk7CisJaWYgKG1yID09IE5VTEwpCisJCWVyciA9IC1FSU5WQUw7CS8qIGludmFsaWQgcl9rZXkgKi8KKwllbHNlCisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAobXIpIHsKKwkJbXItPnJfdHJhbnMtPnN5bmNfbXIobXItPnJfdHJhbnNfcHJpdmF0ZSwgRE1BX1RPX0RFVklDRSk7CisJCXJtLT5tX3JkbWFfbXIgPSBtcjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiBwYXNzZXMgdXMgYW4gYWRkcmVzcyByYW5nZSBpdCB3YW50cyB0byBlbmFibGUgUkRNQQorICogdG8vZnJvbS4gV2UgbWFwIHRoZSBhcmVhLCBhbmQgc2F2ZSB0aGUgPFJfS2V5LG9mZnNldD4gcGFpcgorICogaW4gcm0tPm1fcmRtYV9jb29raWUuIFRoaXMgY2F1c2VzIGl0IHRvIGJlIHNlbnQgYWxvbmcgdG8gdGhlIHBlZXIKKyAqIGluIGFuIGV4dGVuc2lvbiBoZWFkZXIuCisgKi8KK2ludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpCisJIHx8IHJtLT5tX3JkbWFfY29va2llICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBDTVNHX0RBVEEoY21zZyksICZybS0+bV9yZG1hX2Nvb2tpZSwgJnJtLT5tX3JkbWFfbXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmggYi9uZXQvcmRzL3JkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjU1MTIwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hLmgKQEAgLTAsMCArMSw4NCBAQAorI2lmbmRlZiBfUkRTX1JETUFfSAorI2RlZmluZSBfUkRTX1JETUFfSAorCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK3N0cnVjdCByZHNfbXIgeworCXN0cnVjdCByYl9ub2RlCQlyX3JiX25vZGU7CisJYXRvbWljX3QJCXJfcmVmY291bnQ7CisJdTMyCQkJcl9rZXk7CisKKwkvKiBBIGNvcHkgb2YgdGhlIGNyZWF0aW9uIGZsYWdzICovCisJdW5zaWduZWQgaW50CQlyX3VzZV9vbmNlOjE7CisJdW5zaWduZWQgaW50CQlyX2ludmFsaWRhdGU6MTsKKwl1bnNpZ25lZCBpbnQJCXJfd3JpdGU6MTsKKworCS8qIFRoaXMgaXMgZm9yIFJEU19NUl9ERUFELgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgJiBjb25zaXN0ZW50IHRvIG1ha2UgdGhpcyBwYXJ0IG9mIHRoZSBhYm92ZQorCSAqIGJpdCBmaWVsZCBoZXJlLCBidXQgd2UgbmVlZCB0byB1c2UgdGVzdF9hbmRfc2V0X2JpdC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlyX3N0YXRlOworCXN0cnVjdCByZHNfc29jawkJKnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovCisJc3RydWN0IHJkc190cmFuc3BvcnQJKnJfdHJhbnM7CisJdm9pZAkJCSpyX3RyYW5zX3ByaXZhdGU7Cit9OworCisvKiBGbGFncyBmb3IgbXItPnJfc3RhdGUgKi8KKyNkZWZpbmUgUkRTX01SX0RFQUQJCTAKKworc3RydWN0IHJkc19yZG1hX29wIHsKKwl1MzIJCQlyX2tleTsKKwl1NjQJCQlyX3JlbW90ZV9hZGRyOworCXVuc2lnbmVkIGludAkJcl93cml0ZToxOworCXVuc2lnbmVkIGludAkJcl9mZW5jZToxOworCXVuc2lnbmVkIGludAkJcl9ub3RpZnk6MTsKKwl1bnNpZ25lZCBpbnQJCXJfcmVjdmVycjoxOworCXVuc2lnbmVkIGludAkJcl9tYXBwZWQ6MTsKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyCSpyX25vdGlmaWVyOworCXVuc2lnbmVkIGludAkJcl9ieXRlczsKKwl1bnNpZ25lZCBpbnQJCXJfbmVudHM7CisJdW5zaWduZWQgaW50CQlyX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdAlyX3NnWzBdOworfTsKKworc3RhdGljIGlubGluZSByZHNfcmRtYV9jb29raWVfdCByZHNfcmRtYV9tYWtlX2Nvb2tpZSh1MzIgcl9rZXksIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIHJfa2V5IHwgKCgodTY0KSBvZmZzZXQpIDw8IDMyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmRzX3JkbWFfY29va2llX2tleShyZHNfcmRtYV9jb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIGNvb2tpZTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmRzX3JkbWFfY29va2llX29mZnNldChyZHNfcmRtYV9jb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIGNvb2tpZSA+PiAzMjsKK30KKworaW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CitpbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7Cit2b2lkIHJkc19yZG1hX2Ryb3Bfa2V5cyhzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK2ludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOworaW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK2ludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7Cit2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJkc19yZG1hX29wICpybyk7Cit2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50KTsKKworZXh0ZXJuIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCByZHNfbXIgKm1yKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfbXJfcHV0KHN0cnVjdCByZHNfbXIgKm1yKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtci0+cl9yZWZjb3VudCkpCisJCV9fcmRzX3B1dF9tcl9maW5hbChtcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTkwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworc3RhdGljIHN0cnVjdCByZG1hX2NtX2lkICpyZHNfaXdfbGlzdGVuX2lkOworCitpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJLyogdGhpcyBjYW4gYmUgbnVsbCBpbiB0aGUgbGlzdGVuaW5nIHBhdGggKi8KKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBpZCAlcCBoYW5kbGluZyBldmVudCAldVxuIiwgY29ubiwgY21faWQsCisJCSBldmVudC0+ZXZlbnQpOworCisJaWYgKGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfUk5JQykKKwkJdHJhbnMgPSAmcmRzX2l3X3RyYW5zcG9ydDsKKwllbHNlCisJCXRyYW5zID0gJnJkc19pYl90cmFuc3BvcnQ7CisKKwkvKiBQcmV2ZW50IHNodXRkb3duIGZyb20gdGVhcmluZyBkb3duIHRoZSBjb25uZWN0aW9uCisJICogd2hpbGUgd2UncmUgZXhlY3V0aW5nLiAqLworCWlmIChjb25uKSB7CisJCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwkJLyogSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgc2h1dCBkb3duLCBiYWlsIG91dAorCQkgKiByaWdodCBhd2F5LiBXZSByZXR1cm4gMCBzbyBjbV9pZCBkb2Vzbid0IGdldAorCQkgKiBkZXN0cm95ZWQgcHJlbWF0dXJlbHkgKi8KKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFJlamVjdCBpbmNvbWluZyBjb25uZWN0aW9ucyB3aGlsZSB3ZSdyZSB0ZWFyaW5nCisJCQkgKiBkb3duIGFuIGV4aXN0aW5nIG9uZS4gKi8KKwkJCWlmIChldmVudC0+ZXZlbnQgPT0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QpCisJCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUOgorCQlyZXQgPSB0cmFucy0+Y21faGFuZGxlX2Nvbm5lY3QoY21faWQsIGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDoKKwkJLyogWFhYIGRvIHdlIG5lZWQgdG8gY2xlYW4gdXAgaWYgdGhpcyBmYWlscz8gKi8KKwkJcmV0ID0gcmRtYV9yZXNvbHZlX3JvdXRlKGNtX2lkLAorCQkJCQkgUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TKTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQ6CisJCS8qIFhYWCB3b3JyeSBhYm91dCByYWNpbmcgd2l0aCBsaXN0ZW4gYWNjZXB0YW5jZSAqLworCQlyZXQgPSB0cmFucy0+Y21faW5pdGlhdGVfY29ubmVjdChjbV9pZCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOgorCQl0cmFucy0+Y21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1JPVVRFX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRToKKwljYXNlIFJETUFfQ01fRVZFTlRfUkVKRUNURUQ6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0RFVklDRV9SRU1PVkFMOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0NIQU5HRToKKwkJaWYgKGNvbm4pCisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogRElTQ09OTkVDVCBldmVudCAtIGRyb3BwaW5nIGNvbm5lY3Rpb24gIgorCQkJIiVwSTQtPiVwSTRcbiIsICZjb25uLT5jX2xhZGRyLAorCQkJICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiB0aGluZ3MgbGlrZSBkZXZpY2UgZGlzY29ubmVjdD8gKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGV2ZW50ICV1XG4iLCBldmVudC0+ZXZlbnQpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJaWYgKGNvbm4pCisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCXJkc2RlYnVnKCJpZCAlcCBldmVudCAldSBoYW5kbGluZyByZXQgJWRcbiIsIGNtX2lkLCBldmVudC0+ZXZlbnQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCByZHNfcmRtYV9saXN0ZW5faW5pdCh2b2lkKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCWludCByZXQ7CisKKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGNtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGNtX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQkgICAgICAgInJkbWFfY3JlYXRlX2lkKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXNpbi5zaW5fZmFtaWx5ID0gUEZfSU5FVCwKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWh0b25sKElOQUREUl9BTlkpOworCXNpbi5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwkvKgorCSAqIFhYWCBJIGJldCB0aGlzIGJpbmRzIHRoZSBjbV9pZCB0byBhIGRldmljZS4gIElmIHdlIHdhbnQgdG8gc3VwcG9ydAorCSAqIGZhaWwtb3ZlciB3ZSdsbCBoYXZlIHRvIHRha2UgdGhpcyBpbnRvIGNvbnNpZGVyYXRpb24uCisJICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2JpbmRfYWRkcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZG1hX2xpc3RlbihjbV9pZCwgMTI4KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2xpc3RlbigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY20gJXAgbGlzdGVuaW5nIG9uIHBvcnQgJXVcbiIsIGNtX2lkLCBSRFNfUE9SVCk7CisKKwlyZHNfaXdfbGlzdGVuX2lkID0gY21faWQ7CisJY21faWQgPSBOVUxMOworb3V0OgorCWlmIChjbV9pZCkKKwkJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfcmRtYV9saXN0ZW5fc3RvcCh2b2lkKQoreworCWlmIChyZHNfaXdfbGlzdGVuX2lkKSB7CisJCXJkc2RlYnVnKCJjbSAlcFxuIiwgcmRzX2l3X2xpc3Rlbl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZChyZHNfaXdfbGlzdGVuX2lkKTsKKwkJcmRzX2l3X2xpc3Rlbl9pZCA9IE5VTEw7CisJfQorfQorCitpbnQgX19pbml0IHJkc19yZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX3JkbWFfbGlzdGVuX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJkc19pd19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaXdfaW5pdDsKKworCXJldCA9IHJkc19pYl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaWJfaW5pdDsKKworCWdvdG8gb3V0OworCitlcnJfaWJfaW5pdDoKKwlyZHNfaXdfZXhpdCgpOworZXJyX2l3X2luaXQ6CisJcmRzX3JkbWFfbGlzdGVuX3N0b3AoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19yZG1hX2V4aXQodm9pZCkKK3sKKwkvKiBzdG9wIGxpc3RlbmluZyBmaXJzdCB0byBlbnN1cmUgbm8gbmV3IGNvbm5lY3Rpb25zIGFyZSBhdHRlbXB0ZWQgKi8KKwlyZHNfcmRtYV9saXN0ZW5fc3RvcCgpOworCXJkc19pYl9leGl0KCk7CisJcmRzX2l3X2V4aXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfUkRNQV9UUkFOU1BPUlRfSAorI2RlZmluZSBfUkRNQV9UUkFOU1BPUlRfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorCisjZGVmaW5lIFJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyAgICAgNTAwMAorCitpbnQgcmRzX3JkbWFfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisvKiBmcm9tIHJkbWFfdHJhbnNwb3J0LmMgKi8KK2ludCByZHNfcmRtYV9pbml0KHZvaWQpOwordm9pZCByZHNfcmRtYV9leGl0KHZvaWQpOworCisvKiBmcm9tIGliLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0OworaW50IHJkc19pYl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfZXhpdCh2b2lkKTsKKworLyogZnJvbSBpdy5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydDsKK2ludCByZHNfaXdfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwNDAwNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRzLmgKQEAgLTAsMCArMSw2ODYgQEAKKyNpZm5kZWYgX1JEU19SRFNfSAorI2RlZmluZSBfUkRTX1JEU19ICisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmRzLmg+CisKKyNpbmNsdWRlICJpbmZvLmgiCisKKy8qCisgKiBSRFMgTmV0d29yayBwcm90b2NvbCB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgUkRTX1BST1RPQ09MXzNfMAkweDAzMDAKKyNkZWZpbmUgUkRTX1BST1RPQ09MXzNfMQkweDAzMDEKKyNkZWZpbmUgUkRTX1BST1RPQ09MX1ZFUlNJT04JUkRTX1BST1RPQ09MXzNfMQorI2RlZmluZSBSRFNfUFJPVE9DT0xfTUFKT1IodikJKCh2KSA+PiA4KQorI2RlZmluZSBSRFNfUFJPVE9DT0xfTUlOT1IodikJKCh2KSAmIDI1NSkKKyNkZWZpbmUgUkRTX1BST1RPQ09MKG1haiwgbWluKQkoKChtYWopIDw8IDgpIHwgbWluKQorCisvKgorICogWFhYIHJhbmRvbWx5IGNob3NlbiwgYnV0IGF0IGxlYXN0IHNlZW1zIHRvIGJlIHVudXNlZDoKKyAqICMgICAgICAgICAgICAgICAxODQ2NC0xODc2OCBVbmFzc2lnbmVkCisgKiBXZSBzaG91bGQgZG8gYmV0dGVyLiAgV2Ugd2FudCBhIHJlc2VydmVkIHBvcnQgdG8gZGlzY291cmFnZSB1bnByaXYnZWQKKyAqIHVzZXJzcGFjZSBmcm9tIGxpc3RlbmluZy4KKyAqLworI2RlZmluZSBSRFNfUE9SVAkxODYzNAorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgcmRzZGVidWcoZm10LCBhcmdzLi4uKSBwcl9kZWJ1ZygiJXMoKTogIiBmbXQsIF9fZnVuY19fICwgIyNhcmdzKQorI2Vsc2UKKy8qIHNpZ2gsIHByX2RlYnVnKCkgY2F1c2VzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5ncyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorcmRzZGVidWcoY2hhciAqZm10LCAuLi4pCit7Cit9CisjZW5kaWYKKworLyogWFhYIGlzIHRoZXJlIG9uZSBvZiB0aGVzZSBzb21ld2hlcmU/ICovCisjZGVmaW5lIGNlaWwoeCwgeSkgXAorCSh7IHVuc2lnbmVkIGxvbmcgX194ID0gKHgpLCBfX3kgPSAoeSk7IChfX3ggKyBfX3kgLSAxKSAvIF9feTsgfSkKKworI2RlZmluZSBSRFNfRlJBR19TSElGVAkxMgorI2RlZmluZSBSRFNfRlJBR19TSVpFCSgodW5zaWduZWQgaW50KSgxIDw8IFJEU19GUkFHX1NISUZUKSkKKworI2RlZmluZSBSRFNfQ09OR19NQVBfQllURVMJKDY1NTM2IC8gOCkKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX0xPTkdTCShSRFNfQ09OR19NQVBfQllURVMgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIFJEU19DT05HX01BUF9QQUdFUwkoUEFHRV9BTElHTihSRFNfQ09OR19NQVBfQllURVMpIC8gUEFHRV9TSVpFKQorI2RlZmluZSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTCShQQUdFX1NJWkUgKiA4KQorCitzdHJ1Y3QgcmRzX2NvbmdfbWFwIHsKKwlzdHJ1Y3QgcmJfbm9kZQkJbV9yYl9ub2RlOworCV9fYmUzMgkJCW1fYWRkcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAltX3dhaXRxOworCXN0cnVjdCBsaXN0X2hlYWQJbV9jb25uX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJbV9wYWdlX2FkZHJzW1JEU19DT05HX01BUF9QQUdFU107Cit9OworCisKKy8qCisgKiBUaGlzIGlzIGhvdyB3ZSB3aWxsIHRyYWNrIHRoZSBjb25uZWN0aW9uIHN0YXRlOgorICogQSBjb25uZWN0aW9uIGlzIGFsd2F5cyBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZworICogc3RhdGVzLiBVcGRhdGVzIHRvIHRoZSBzdGF0ZSBhcmUgYXRvbWljIGFuZCBpbXBseQorICogYSBtZW1vcnkgYmFycmllci4KKyAqLworZW51bSB7CisJUkRTX0NPTk5fRE9XTiA9IDAsCisJUkRTX0NPTk5fQ09OTkVDVElORywKKwlSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAorCVJEU19DT05OX1VQLAorCVJEU19DT05OX0VSUk9SLAorfTsKKworLyogQml0cyBmb3IgY19mbGFncyAqLworI2RlZmluZSBSRFNfTExfU0VORF9GVUxMCTAKKyNkZWZpbmUgUkRTX1JFQ09OTkVDVF9QRU5ESU5HCTEKKworc3RydWN0IHJkc19jb25uZWN0aW9uIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKKwlfX2JlMzIJCQljX2xhZGRyOworCV9fYmUzMgkJCWNfZmFkZHI7CisJdW5zaWduZWQgaW50CQljX2xvb3BiYWNrOjE7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CisKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwCSpjX2xjb25nOworCXN0cnVjdCByZHNfY29uZ19tYXAJKmNfZmNvbmc7CisKKwlzdHJ1Y3QgbXV0ZXgJCWNfc2VuZF9sb2NrOwkvKiBwcm90ZWN0IHNlbmQgcmluZyAqLworCXN0cnVjdCByZHNfbWVzc2FnZQkqY194bWl0X3JtOworCXVuc2lnbmVkIGxvbmcJCWNfeG1pdF9zZzsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9oZHJfb2ZmOworCXVuc2lnbmVkIGludAkJY194bWl0X2RhdGFfb2ZmOworCXVuc2lnbmVkIGludAkJY194bWl0X3JkbWFfc2VudDsKKworCXNwaW5sb2NrX3QJCWNfbG9jazsJCS8qIHByb3RlY3QgbXNnIHF1ZXVlcyAqLworCXU2NAkJCWNfbmV4dF90eF9zZXE7CisJc3RydWN0IGxpc3RfaGVhZAljX3NlbmRfcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZAljX3JldHJhbnM7CisKKwl1NjQJCQljX25leHRfcnhfc2VxOworCisJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CisJdm9pZAkJCSpjX3RyYW5zcG9ydF9kYXRhOworCisJYXRvbWljX3QJCWNfc3RhdGU7CisJdW5zaWduZWQgbG9uZwkJY19mbGFnczsKKwl1bnNpZ25lZCBsb25nCQljX3JlY29ubmVjdF9qaWZmaWVzOworCXN0cnVjdCBkZWxheWVkX3dvcmsJY19zZW5kX3c7CisJc3RydWN0IGRlbGF5ZWRfd29yawljX3JlY3ZfdzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWNfY29ubl93OworCXN0cnVjdCB3b3JrX3N0cnVjdAljX2Rvd25fdzsKKwlzdHJ1Y3QgbXV0ZXgJCWNfY21fbG9jazsJLyogcHJvdGVjdCBjb25uIHN0YXRlICYgY20gKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJY19tYXBfaXRlbTsKKwl1bnNpZ25lZCBsb25nCQljX21hcF9xdWV1ZWQ7CisJdW5zaWduZWQgbG9uZwkJY19tYXBfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcJCWNfbWFwX2J5dGVzOworCisJdW5zaWduZWQgaW50CQljX3VuYWNrZWRfcGFja2V0czsKKwl1bnNpZ25lZCBpbnQJCWNfdW5hY2tlZF9ieXRlczsKKworCS8qIFByb3RvY29sIHZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWNfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgUkRTX0ZMQUdfQ09OR19CSVRNQVAJMHgwMQorI2RlZmluZSBSRFNfRkxBR19BQ0tfUkVRVUlSRUQJMHgwMgorI2RlZmluZSBSRFNfRkxBR19SRVRSQU5TTUlUVEVECTB4MDQKKyNkZWZpbmUgUkRTX01BWF9BRFZfQ1JFRElUCTEyNworCisvKgorICogTWF4aW11bSBzcGFjZSBhdmFpbGFibGUgZm9yIGV4dGVuc2lvbiBoZWFkZXJzLgorICovCisjZGVmaW5lIFJEU19IRUFERVJfRVhUX1NQQUNFCTE2CisKK3N0cnVjdCByZHNfaGVhZGVyIHsKKwlfX2JlNjQJaF9zZXF1ZW5jZTsKKwlfX2JlNjQJaF9hY2s7CisJX19iZTMyCWhfbGVuOworCV9fYmUxNgloX3Nwb3J0OworCV9fYmUxNgloX2Rwb3J0OworCXU4CWhfZmxhZ3M7CisJdTgJaF9jcmVkaXQ7CisJdTgJaF9wYWRkaW5nWzRdOworCV9fc3VtMTYJaF9jc3VtOworCisJdTgJaF9leHRoZHJbUkRTX0hFQURFUl9FWFRfU1BBQ0VdOworfTsKKworLyoKKyAqIFJlc2VydmVkIC0gaW5kaWNhdGVzIGVuZCBvZiBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9OT05FCQkwCisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHZlcnkKKyAqIGZpcnN0IG1lc3NhZ2UgdGhhdCBpcyBzZW50IG9uIGEgbmV3IGNvbm5lY3Rpb24sCisgKiBhbmQgaWRlbnRpZmllcyB0aGUgcHJvdG9jb2wgbGV2ZWwuIFRoaXMgd2lsbCBoZWxwCisgKiByb2xsaW5nIHVwZGF0ZXMgaWYgYSBmdXR1cmUgY2hhbmdlIHJlcXVpcmVzIGJyZWFraW5nCisgKiB0aGUgcHJvdG9jb2wuCisgKiBOQjogVGhpcyBpcyBubyBsb25nZXIgdHJ1ZSBmb3IgSUIsIHdoZXJlIHdlIGRvIGEgdmVyc2lvbgorICogbmVnb3RpYXRpb24gZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHBoYXNlIChwcm90b2NvbAorICogdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgUkRNQSBDTSBwcml2YXRlIGRhdGEpLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfVkVSU0lPTgkxCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiB7CisJX19iZTMyCQkJaF92ZXJzaW9uOworfTsKKworLyoKKyAqIFRoaXMgZXh0ZW5zaW9uIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgUkRTIG1lc3NhZ2UKKyAqIGNoYXNpbmcgYW4gUkRNQSBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9SRE1BCQkyCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSB7CisJX19iZTMyCQkJaF9yZG1hX3JrZXk7Cit9OworCisvKgorICogVGhpcyBleHRlbnNpb24gaGVhZGVyIHRlbGxzIHRoZSBwZWVyIGFib3V0IHRoZQorICogZGVzdGluYXRpb24gPFJfS2V5LG9mZnNldD4gb2YgdGhlIHJlcXVlc3RlZCBSRE1BCisgKiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9SRE1BX0RFU1QJMworc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCB7CisJX19iZTMyCQkJaF9yZG1hX3JrZXk7CisJX19iZTMyCQkJaF9yZG1hX29mZnNldDsKK307CisKKyNkZWZpbmUgX19SRFNfRVhUSERSX01BWAkxNiAvKiBmb3Igbm93ICovCisKK3N0cnVjdCByZHNfaW5jb21pbmcgeworCWF0b21pY190CQlpX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJaV9pdGVtOworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqaV9jb25uOworCXN0cnVjdCByZHNfaGVhZGVyCWlfaGRyOworCXVuc2lnbmVkIGxvbmcJCWlfcnhfamlmZmllczsKKwlfX2JlMzIJCQlpX3NhZGRyOworCisJcmRzX3JkbWFfY29va2llX3QJaV9yZG1hX2Nvb2tpZTsKK307CisKKy8qCisgKiBtX3NvY2tfaXRlbSBhbmQgbV9jb25uX2l0ZW0gYXJlIG9uIGxpc3RzIHRoYXQgYXJlIHNlcmlhbGl6ZWQgdW5kZXIKKyAqIGNvbm4tPmNfbG9jay4gIG1fc29ja19pdGVtIGhhcyBhZGRpdGlvbmFsIG1lYW5pbmcgaW4gdGhhdCBvbmNlIGl0IGlzIGVtcHR5CisgKiB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZSBwdXQgYmFjayBvbiB0aGUgcmV0cmFuc21pdCBsaXN0IGFmdGVyIGJlaW5nIHNlbnQuCisgKiBtZXNzYWdlcyB0aGF0IGFyZSBjYW5jZWxlZCB3aGlsZSBiZWluZyBzZW50IHJlbHkgb24gdGhpcy4KKyAqCisgKiBtX2luYyBpcyB1c2VkIGJ5IGxvb3BiYWNrIHNvIHRoYXQgaXQgY2FuIHBhc3MgYW4gaW5jb21pbmcgbWVzc2FnZSBzdHJhaWdodAorICogYmFjayB1cCBpbnRvIHRoZSByeCBwYXRoLiAgSXQgZW1iZWRzIGEgd2lyZSBoZWFkZXIgd2hpY2ggaXMgYWxzbyB1c2VkIGJ5CisgKiB0aGUgc2VuZCBwYXRoLCB3aGljaCBpcyBraW5kIG9mIGF3a3dhcmQuCisgKgorICogbV9zb2NrX2l0ZW0gaW5kaWNhdGVzIHRoZSBtZXNzYWdlJ3MgcHJlc2VuY2Ugb24gYSBzb2NrZXQncyBzZW5kIG9yIHJlY2VpdmUKKyAqIHF1ZXVlLiAgbV9ycyB3aWxsIHBvaW50IHRvIHRoYXQgc29ja2V0LgorICoKKyAqIG1fZGFkZHIgaXMgdXNlZCBieSBjYW5jZWxsYXRpb24gdG8gcHJ1bmUgbWVzc2FnZXMgdG8gYSBnaXZlbiBkZXN0aW5hdGlvbi4KKyAqCisgKiBUaGUgUkRTX01TR19PTl9TT0NLIGFuZCBSRFNfTVNHX09OX0NPTk4gZmxhZ3MgYXJlIHVzZWQgdG8gYXZvaWQgbG9jaworICogbmVzdGluZy4gIEFzIHBhdGhzIGl0ZXJhdGUgb3ZlciBtZXNzYWdlcyBvbiBhIHNvY2ssIG9yIGNvbm4sIHRoZXkgbXVzdAorICogYWxzbyBsb2NrIHRoZSBjb25uLCBvciBzb2NrLCB0byByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aG9zZSBsaXN0cyB0b28uCisgKiBUZXN0aW5nIHRoZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgbWVzc2FnZSBpcyBzdGlsbCBvbiB0aGUgbGlzdHMgbGV0cworICogdXMgYXZvaWQgdGVzdGluZyB0aGUgbGlzdF9oZWFkIGRpcmVjdGx5LiAgVGhhdCBtZWFucyBlYWNoIHBhdGggY2FuIHVzZQorICogdGhlIG1lc3NhZ2UncyBsaXN0X2hlYWQgdG8ga2VlcCBpdCBvbiBhIGxvY2FsIGxpc3Qgd2hpbGUganVnZ2xpbmcgbG9ja3MKKyAqIHdpdGhvdXQgY29uZnVzaW5nIHRoZSBvdGhlciBwYXRoLgorICoKKyAqIG1fYWNrX3NlcSBpcyBhbiBvcHRpb25hbCBmaWVsZCBzZXQgYnkgdHJhbnNwb3J0cyB3aG8gbmVlZCBhIGRpZmZlcmVudAorICogc2VxdWVuY2UgbnVtYmVyIHJhbmdlIHRvIGludmFsaWRhdGUuICBUaGV5IGNhbiB1c2UgdGhpcyBpbiBhIGNhbGxiYWNrCisgKiB0aGF0IHRoZXkgcGFzcyB0byByZHNfc2VuZF9kcm9wX2Fja2VkKCkgdG8gc2VlIGlmIGVhY2ggbWVzc2FnZSBoYXMgYmVlbgorICogYWNrZWQuICBUaGUgSEFTX0FDS19TRVEgZmxhZyBjYW4gYmUgdXNlZCB0byBkZXRlY3QgbWVzc2FnZXMgd2hpY2ggaGF2ZW4ndAorICogaGFkIGFja19zZXEgc2V0IHlldC4KKyAqLworI2RlZmluZSBSRFNfTVNHX09OX1NPQ0sJCTEKKyNkZWZpbmUgUkRTX01TR19PTl9DT05OCQkyCisjZGVmaW5lIFJEU19NU0dfSEFTX0FDS19TRVEJMworI2RlZmluZSBSRFNfTVNHX0FDS19SRVFVSVJFRAk0CisjZGVmaW5lIFJEU19NU0dfUkVUUkFOU01JVFRFRAk1CisjZGVmaW5lIFJEU19NU0dfTUFQUEVECQk2CisjZGVmaW5lIFJEU19NU0dfUEFHRVZFQwkJNworCitzdHJ1Y3QgcmRzX21lc3NhZ2UgeworCWF0b21pY190CQltX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJbV9zb2NrX2l0ZW07CisJc3RydWN0IGxpc3RfaGVhZAltX2Nvbm5faXRlbTsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCW1faW5jOworCXU2NAkJCW1fYWNrX3NlcTsKKwlfX2JlMzIJCQltX2RhZGRyOworCXVuc2lnbmVkIGxvbmcJCW1fZmxhZ3M7CisKKwkvKiBOZXZlciBhY2Nlc3MgbV9ycyB3aXRob3V0IGhvbGRpbmcgbV9yc19sb2NrLgorCSAqIExvY2sgbmVzdGluZyBpcworCSAqICBybS0+bV9yc19sb2NrCisJICogICAtPiBycy0+cnNfbG9jaworCSAqLworCXNwaW5sb2NrX3QJCW1fcnNfbG9jazsKKwlzdHJ1Y3QgcmRzX3NvY2sJCSptX3JzOworCXN0cnVjdCByZHNfcmRtYV9vcAkqbV9yZG1hX29wOworCXJkc19yZG1hX2Nvb2tpZV90CW1fcmRtYV9jb29raWU7CisJc3RydWN0IHJkc19tcgkJKm1fcmRtYV9tcjsKKwl1bnNpZ25lZCBpbnQJCW1fbmVudHM7CisJdW5zaWduZWQgaW50CQltX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdAltX3NnWzBdOworfTsKKworLyoKKyAqIFRoZSBSRFMgbm90aWZpZXIgaXMgdXNlZCAob3B0aW9uYWxseSkgdG8gdGVsbCB0aGUgYXBwbGljYXRpb24gYWJvdXQKKyAqIGNvbXBsZXRlZCBSRE1BIG9wZXJhdGlvbnMuIFJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIHdob2xlIHJkcyBtZXNzYWdlCisgKiBhcm91bmQgb24gdGhlIHF1ZXVlLCB3ZSBhbGxvY2F0ZSBhIHNtYWxsIG5vdGlmaWVyIHRoYXQgaXMgcHV0IG9uIHRoZQorICogc29ja2V0J3Mgbm90aWZpZXJfbGlzdC4gTm90aWZpY2F0aW9ucyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogdGhyb3VnaCBjb250cm9sIG1lc3NhZ2VzLgorICovCitzdHJ1Y3QgcmRzX25vdGlmaWVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsKKwl1aW50NjRfdAkJbl91c2VyX3Rva2VuOworCWludAkJCW5fc3RhdHVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAtICB0cmFuc3BvcnQgc3BlY2lmaWMgYmVoYXZpb3VyYWwgaG9va3MKKyAqCisgKiBAeG1pdDogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZAorICogICAgICAgIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzCisgKiAgICAgICAgZG9lc24ndCBuZWVkIHRvIGJlIHJlZW50cmFudCBmb3IgYSBnaXZlbiBjb25uLiAgVGhlIGhlYWRlciBtdXN0IGJlCisgKiAgICAgICAgc2VudCBiZWZvcmUgdGhlIGRhdGEgcGF5bG9hZC4gIC54bWl0IG11c3QgYmUgcHJlcGFyZWQgdG8gc2VuZCBhCisgKiAgICAgICAgbWVzc2FnZSB3aXRoIG5vIGRhdGEgcGF5bG9hZC4gIC54bWl0IHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZgorICogICAgICAgIGJ5dGVzIHRoYXQgd2VyZSBzZW50IGRvd24gdGhlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyBoZWFkZXIgYnl0ZXMuCisgKiAgICAgICAgUmV0dXJuaW5nIDAgdGVsbHMgdGhlIGNhbGxlciB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwZXJmb3JtIGFueQorICogICAgICAgIGFkZGl0aW9uYWwgd29yayBub3cuICBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbnNwb3J0IGhhcworICogICAgICAgIGZpbGxlZCB0aGUgc2VuZGluZyBxdWV1ZSBmb3IgaXRzIGNvbm5lY3Rpb24gYW5kIHdpbGwgaGFuZGxlCisgKiAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmRzIHRocmVhZCB0byBjb250aW51ZSB0aGUgc2VuZCB3aGVuIHNwYWNlIGJlY29tZXMKKyAqICAgICAgICBhdmFpbGFibGUuICBSZXR1cm5pbmcgLUVBR0FJTiB0ZWxscyB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBzZW5kCisgKiAgICAgICAgaW1tZWRpYXRlbHkuICBSZXR1cm5pbmcgLUVOT01FTSB0ZWxscyB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBzZW5kIGF0CisgKiAgICAgICAgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIEBjb25uX3NodXRkb3duOiBjb25uX3NodXRkb3duIHN0b3BzIHRyYWZmaWMgb24gdGhlIGdpdmVuIGNvbm5lY3Rpb24uICBPbmNlCisgKiAgICAgICAgICAgICAgICAgaXQgcmV0dXJucyB0aGUgY29ubmVjdGlvbiBjYW4gbm90IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4KKyAqICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgb25seSBiZSBjYWxsZWQgb25jZSBhZnRlciBjb25uX2Nvbm5lY3QgcmV0dXJucworICogICAgICAgICAgICAgICAgIG5vbi16ZXJvIHN1Y2Nlc3MgYW5kIHdpbGwgVGhlIGNhbGxlciBzZXJpYWxpemVzIHRoaXMgd2l0aAorICogICAgICAgICAgICAgICAgIHRoZSBzZW5kIGFuZCBjb25uZWN0aW5nIHBhdGhzICh4bWl0XyogYW5kIGNvbm5fKikuICBUaGUKKyAqICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgaXMgcmVzcG9uc2libGUgZm9yIG90aGVyIHNlcmlhbGl6YXRpb24sIGluY2x1ZGluZworICogICAgICAgICAgICAgICAgIHJkc19yZWN2X2luY29taW5nKCkuICBUaGlzIGlzIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgYnV0CisgKiAgICAgICAgICAgICAgICAgc2hvdWxkIHRyeSBoYXJkIG5vdCB0byBibG9jay4KKyAqCisgKiBAeG1pdF9jb25nX21hcDogVGhpcyBhc2tzIHRoZSB0cmFuc3BvcnQgdG8gc2VuZCB0aGUgbG9jYWwgYml0bWFwIGRvd24gdGhlCisgKiAJCSAgIGdpdmVuIGNvbm5lY3Rpb24uICBYWFggZ2V0IGEgYmV0dGVyIHN0b3J5IGFib3V0IHRoZSBiaXRtYXAKKyAqIAkJICAgZmxhZyBhbmQgaGVhZGVyLgorICovCisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHsKKwljaGFyCQkJdF9uYW1lW1RSQU5TTkFNU0laXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfaXRlbTsKKwlzdHJ1Y3QgbW9kdWxlCQkqdF9vd25lcjsKKwl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjE7CisKKwlpbnQgKCpsYWRkcl9jaGVjaykoX19iZTMyIGFkZHIpOworCWludCAoKmNvbm5fYWxsb2MpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKKwl2b2lkICgqY29ubl9mcmVlKSh2b2lkICpkYXRhKTsKKwlpbnQgKCpjb25uX2Nvbm5lY3QpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKmNvbm5fc2h1dGRvd24pKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKnhtaXRfcHJlcGFyZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwl2b2lkICgqeG1pdF9jb21wbGV0ZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwlpbnQgKCp4bWl0KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCSAgICB1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKKwlpbnQgKCp4bWl0X2NvbmdfbWFwKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworCWludCAoKnhtaXRfcmRtYSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKTsKKwlpbnQgKCpyZWN2KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCWludCAoKmluY19jb3B5X3RvX3VzZXIpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkJc2l6ZV90IHNpemUpOworCXZvaWQgKCppbmNfcHVyZ2UpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CisJdm9pZCAoKmluY19mcmVlKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworCisJaW50ICgqY21faGFuZGxlX2Nvbm5lY3QpKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKwlpbnQgKCpjbV9pbml0aWF0ZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOworCXZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKwl1bnNpZ25lZCBpbnQgKCpzdGF0c19pbmZvX2NvcHkpKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkJdW5zaWduZWQgaW50IGF2YWlsKTsKKwl2b2lkICgqZXhpdCkodm9pZCk7CisJdm9pZCAqKCpnZXRfbXIpKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbnJfc2csCisJCQlzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOworCXZvaWQgKCpzeW5jX21yKSh2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICgqZnJlZV9tcikodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOworCXZvaWQgKCpmbHVzaF9tcnMpKHZvaWQpOworfTsKKworc3RydWN0IHJkc19zb2NrIHsKKwlzdHJ1Y3Qgc29jawkJcnNfc2s7CisKKwl1NjQJCQlyc191c2VyX2FkZHI7CisJdTY0CQkJcnNfdXNlcl9ieXRlczsKKworCS8qCisJICogYm91bmRfYWRkciB1c2VkIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZywgbm8gSU5BRERSX0FOWQorCSAqIHN1cHBvcnQuCisJICovCisJc3RydWN0IHJiX25vZGUJCXJzX2JvdW5kX25vZGU7CisJX19iZTMyCQkJcnNfYm91bmRfYWRkcjsKKwlfX2JlMzIJCQlyc19jb25uX2FkZHI7CisJX19iZTE2CQkJcnNfYm91bmRfcG9ydDsKKwlfX2JlMTYJCQlyc19jb25uX3BvcnQ7CisKKwkvKgorCSAqIFRoaXMgaXMgb25seSB1c2VkIHRvIGNvbW11bmljYXRlIHRoZSB0cmFuc3BvcnQgYmV0d2VlbiBiaW5kIGFuZAorCSAqIGluaXRpYXRpbmcgY29ubmVjdGlvbnMuICBBbGwgb3RoZXIgdHJhbnMgdXNlIGlzIHJlZmVyZW5jZWQgdGhyb3VnaAorCSAqIHRoZSBjb25uZWN0aW9uLgorCSAqLworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICAgICpyc190cmFuc3BvcnQ7CisKKwkvKgorCSAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLgorCSAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuCisJICovCisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpyc19jb25uOworCisJLyogZmxhZyBpbmRpY2F0aW5nIHdlIHdlcmUgY29uZ2VzdGVkIG9yIG5vdCAqLworCWludAkJCXJzX2Nvbmdlc3RlZDsKKworCS8qIHJzX2xvY2sgcHJvdGVjdHMgYWxsIHRoZXNlIGFkamFjZW50IG1lbWJlcnMgYmVmb3JlIHRoZSBuZXdsaW5lICovCisJc3BpbmxvY2tfdAkJcnNfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX3NlbmRfcXVldWU7CisJdTMyCQkJcnNfc25kX2J5dGVzOworCWludAkJCXJzX3Jjdl9ieXRlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX25vdGlmeV9xdWV1ZTsJLyogY3VycmVudGx5IHVzZWQgZm9yIGZhaWxlZCBSRE1BcyAqLworCisJLyogQ29uZ2VzdGlvbiB3YWtlX3VwLiBJZiByc19jb25nX21vbml0b3IgaXMgc2V0LCB3ZSB1c2UgY29uZ19tYXNrCisJICogdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSB3b2tlbiB1cC4KKwkgKiBJZiBub3Qgc2V0LCB3ZSB1c2UgcnNfY29uZ190cmFjayB0byBmaW5kIG91dCB3aGV0aGVyIGEgY29uZyBtYXAKKwkgKiB1cGRhdGUgYXJyaXZlZC4KKwkgKi8KKwl1aW50NjRfdAkJcnNfY29uZ19tYXNrOworCXVpbnQ2NF90CQlyc19jb25nX25vdGlmeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX2NvbmdfbGlzdDsKKwl1bnNpZ25lZCBsb25nCQlyc19jb25nX3RyYWNrOworCisJLyoKKwkgKiByc19yZWN2X2xvY2sgcHJvdGVjdHMgdGhlIHJlY2VpdmUgcXVldWUsIGFuZCBpcworCSAqIHVzZWQgdG8gc2VyaWFsaXplIHdpdGggcmRzX3JlbGVhc2UuCisJICovCisJcndsb2NrX3QJCXJzX3JlY3ZfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX3JlY3ZfcXVldWU7CisKKwkvKiBqdXN0IGZvciBzdGF0cyByZXBvcnRpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX2l0ZW07CisKKwkvKiB0aGVzZSBoYXZlIHRoZWlyIG93biBsb2NrICovCisJc3BpbmxvY2tfdAkJcnNfcmRtYV9sb2NrOworCXN0cnVjdCByYl9yb290CQlyc19yZG1hX2tleXM7CisKKwkvKiBTb2NrZXQgb3B0aW9ucyAtIGluIGNhc2UgdGhlcmUgd2lsbCBiZSBtb3JlICovCisJdW5zaWduZWQgY2hhcgkJcnNfcmVjdmVyciwKKwkJCQlyc19jb25nX21vbml0b3I7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfc29jayAqcmRzX3NrX3RvX3JzKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgcmRzX3NvY2ssIHJzX3NrKTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnJkc19yc190b19zayhzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXJldHVybiAmcnMtPnJzX3NrOworfQorCisvKgorICogVGhlIHN0YWNrIGFzc2lnbnMgc2tfc25kYnVmIGFuZCBza19yY3ZidWYgdG8gdHdpY2UgdGhlIHNwZWNpZmllZCB2YWx1ZQorICogdG8gYWNjb3VudCBmb3Igb3ZlcmhlYWQuICBXZSBkb24ndCBhY2NvdW50IGZvciBvdmVyaGVhZCwgd2UganVzdCBhcHBseQorICogdGhlIG51bWJlciBvZiBwYXlsb2FkIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJkc19za19zbmRidWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gcmRzX3JzX3RvX3NrKHJzKS0+c2tfc25kYnVmIC8gMjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHJkc19za19yY3ZidWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gcmRzX3JzX3RvX3NrKHJzKS0+c2tfcmN2YnVmIC8gMjsKK30KKworc3RydWN0IHJkc19zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2Nvbm5fcmVzZXQ7CisJdWludDY0X3QJc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtOworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX29sZF9zZXE7CisJdWludDY0X3QJc19yZWN2X2Ryb3Bfbm9fc29jazsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9kZWFkX3NvY2s7CisJdWludDY0X3QJc19yZWN2X2RlbGl2ZXJfcmFjZWQ7CisJdWludDY0X3QJc19yZWN2X2RlbGl2ZXJlZDsKKwl1aW50NjRfdAlzX3JlY3ZfcXVldWVkOworCXVpbnQ2NF90CXNfcmVjdl9pbW1lZGlhdGVfcmV0cnk7CisJdWludDY0X3QJc19yZWN2X2RlbGF5ZWRfcmV0cnk7CisJdWludDY0X3QJc19yZWN2X2Fja19yZXF1aXJlZDsKKwl1aW50NjRfdAlzX3JlY3ZfcmRtYV9ieXRlczsKKwl1aW50NjRfdAlzX3JlY3ZfcGluZzsKKwl1aW50NjRfdAlzX3NlbmRfcXVldWVfZW1wdHk7CisJdWludDY0X3QJc19zZW5kX3F1ZXVlX2Z1bGw7CisJdWludDY0X3QJc19zZW5kX3NlbV9jb250ZW50aW9uOworCXVpbnQ2NF90CXNfc2VuZF9zZW1fcXVldWVfcmFjZWQ7CisJdWludDY0X3QJc19zZW5kX2ltbWVkaWF0ZV9yZXRyeTsKKwl1aW50NjRfdAlzX3NlbmRfZGVsYXllZF9yZXRyeTsKKwl1aW50NjRfdAlzX3NlbmRfZHJvcF9hY2tlZDsKKwl1aW50NjRfdAlzX3NlbmRfYWNrX3JlcXVpcmVkOworCXVpbnQ2NF90CXNfc2VuZF9xdWV1ZWQ7CisJdWludDY0X3QJc19zZW5kX3JkbWE7CisJdWludDY0X3QJc19zZW5kX3JkbWFfYnl0ZXM7CisJdWludDY0X3QJc19zZW5kX3Bvbmc7CisJdWludDY0X3QJc19wYWdlX3JlbWFpbmRlcl9oaXQ7CisJdWludDY0X3QJc19wYWdlX3JlbWFpbmRlcl9taXNzOworCXVpbnQ2NF90CXNfY29weV90b191c2VyOworCXVpbnQ2NF90CXNfY29weV9mcm9tX3VzZXI7CisJdWludDY0X3QJc19jb25nX3VwZGF0ZV9xdWV1ZWQ7CisJdWludDY0X3QJc19jb25nX3VwZGF0ZV9yZWNlaXZlZDsKKwl1aW50NjRfdAlzX2Nvbmdfc2VuZF9lcnJvcjsKKwl1aW50NjRfdAlzX2Nvbmdfc2VuZF9ibG9ja2VkOworfTsKKworLyogYWZfcmRzLmMgKi8KK3ZvaWQgcmRzX3NvY2tfYWRkcmVmKHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfc29ja19wdXQoc3RydWN0IHJkc19zb2NrICpycyk7Cit2b2lkIHJkc193YWtlX3NrX3NsZWVwKHN0cnVjdCByZHNfc29jayAqcnMpOworc3RhdGljIGlubGluZSB2b2lkIF9fcmRzX3dha2Vfc2tfc2xlZXAoc3RydWN0IHNvY2sgKnNrKQoreworCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0cSA9IHNrLT5za19zbGVlcDsKKworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpICYmIHdhaXRxKQorCQl3YWtlX3VwKHdhaXRxKTsKK30KK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfcG9sbF93YWl0cTsKKworCisvKiBiaW5kLmMgKi8KK2ludCByZHNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pOwordm9pZCByZHNfcmVtb3ZlX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMpOworc3RydWN0IHJkc19zb2NrICpyZHNfZmluZF9ib3VuZChfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQpOworCisvKiBjb25nLmMgKi8KK2ludCByZHNfY29uZ19nZXRfbWFwcyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19hZGRfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19zZXRfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpOwordm9pZCByZHNfY29uZ19jbGVhcl9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCk7CitpbnQgcmRzX2Nvbmdfd2FpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0LCBpbnQgbm9uYmxvY2ssIHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCk7Cit2b2lkIHJkc19jb25nX21hcF91cGRhdGVkKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdWludDY0X3QpOworaW50IHJkc19jb25nX3VwZGF0ZWRfc2luY2UodW5zaWduZWQgbG9uZyAqcmVjZW50KTsKK3ZvaWQgcmRzX2NvbmdfYWRkX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKik7Cit2b2lkIHJkc19jb25nX3JlbW92ZV9zb2NrZXQoc3RydWN0IHJkc19zb2NrICopOwordm9pZCByZHNfY29uZ19leGl0KHZvaWQpOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfY29uZ191cGRhdGVfYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKworLyogY29ubi5jICovCitpbnQgX19pbml0IHJkc19jb25uX2luaXQodm9pZCk7Cit2b2lkIHJkc19jb25uX2V4aXQodm9pZCk7CitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApOworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApOwordm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25uX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJICBpbnQgKCp2aXNpdG9yKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwgdm9pZCAqKSwKKwkJCSAgc2l6ZV90IGl0ZW1fbGVuKTsKK3ZvaWQgX19yZHNfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKQorCQkJCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKyNkZWZpbmUgcmRzX2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUzogIiBmbXQpCisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl90cmFuc2l0aW9uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IG9sZCwgaW50IG5ldykKK3sKKwlyZXR1cm4gYXRvbWljX2NtcHhjaGcoJmNvbm4tPmNfc3RhdGUsIG9sZCwgbmV3KSA9PSBvbGQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl9zdGF0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX3VwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX1VQOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fY29ubmVjdGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HOworfQorCisvKiBtZXNzYWdlLmMgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfYWxsb2ModW5zaWduZWQgaW50IG5lbnRzLCBnZnBfdCBnZnApOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyAqcGFnZV9hZGRycywgdW5zaWduZWQgaW50IHRvdGFsX2xlbik7Cit2b2lkIHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJIF9fYmUxNiBkcG9ydCwgdTY0IHNlcSk7CitpbnQgcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICpwb3MsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50ICpidWZsZW4pOworaW50IHJkc19tZXNzYWdlX2FkZF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgdmVyc2lvbik7CitpbnQgcmRzX21lc3NhZ2VfZ2V0X3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCAqdmVyc2lvbik7CitpbnQgcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdTMyIHJfa2V5LCB1MzIgb2Zmc2V0KTsKK2ludCByZHNfbWVzc2FnZV9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJCQkgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19tZXNzYWdlX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV93YWl0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV91bm1hcHBlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oc3RydWN0IHJkc19oZWFkZXIgKmhkcikKK3sKKwloZHItPmhfY3N1bSA9IDA7CisJaGRyLT5oX2NzdW0gPSBpcF9mYXN0X2NzdW0oKHZvaWQgKikgaGRyLCBzaXplb2YoKmhkcikgPj4gMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShjb25zdCBzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyKQoreworCXJldHVybiAhaGRyLT5oX2NzdW0gfHwgaXBfZmFzdF9jc3VtKCh2b2lkICopIGhkciwgc2l6ZW9mKCpoZHIpID4+IDIpID09IDA7Cit9CisKKworLyogcGFnZS5jICovCitpbnQgcmRzX3BhZ2VfcmVtYWluZGVyX2FsbG9jKHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJCSAgICAgZ2ZwX3QgZ2ZwKTsKK2ludCByZHNfcGFnZV9jb3B5X3VzZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJICAgICAgIGludCB0b191c2VyKTsKKyNkZWZpbmUgcmRzX3BhZ2VfY29weV90b191c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcykgXAorCXJkc19wYWdlX2NvcHlfdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMsIDEpCisjZGVmaW5lIHJkc19wYWdlX2NvcHlfZnJvbV91c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcykgXAorCXJkc19wYWdlX2NvcHlfdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMsIDApCit2b2lkIHJkc19wYWdlX2V4aXQodm9pZCk7CisKKy8qIHJlY3YuYyAqLwordm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgX19iZTMyIHNhZGRyKTsKK3ZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgICAgIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pOworaW50IHJkc19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3Qgc2l6ZSwgaW50IG1zZ19mbGFncyk7Cit2b2lkIHJkc19jbGVhcl9yZWN2X3F1ZXVlKHN0cnVjdCByZHNfc29jayAqcnMpOworaW50IHJkc19ub3RpZnlfcXVldWVfZ2V0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZyk7Cit2b2lkIHJkc19pbmNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJICAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJICAgICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBpbnQgZmxpcCk7CisKKy8qIHNlbmQuYyAqLworaW50IHJkc19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3QgcGF5bG9hZF9sZW4pOwordm9pZCByZHNfc2VuZF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3N0cnVjdCBzb2NrYWRkcl9pbjsKK3ZvaWQgcmRzX3NlbmRfZHJvcF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRlc3QpOwordHlwZWRlZiBpbnQgKCppc19hY2tlZF9mdW5jKShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCB1aW50NjRfdCBhY2spOwordm9pZCByZHNfc2VuZF9kcm9wX2Fja2VkKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IGFjaywKKwkJCSBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKTsKK2ludCByZHNfc2VuZF9hY2tlZF9iZWZvcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgc2VxKTsKK3ZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cyk7CitpbnQgcmRzX3NlbmRfcG9uZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUxNiBkcG9ydCk7CitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19zZW5kX2dldF9tZXNzYWdlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqLAorCQkJCQkgc3RydWN0IHJkc19yZG1hX29wICopOworCisvKiByZG1hLmMgKi8KK3ZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpOworCisvKiBzdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc19zdGF0aXN0aWNzLCByZHNfc3RhdHMpOworI2RlZmluZSByZHNfc3RhdHNfaW5jX3doaWNoKHdoaWNoLCBtZW1iZXIpIGRvIHsJCVwKKwlwZXJfY3B1KHdoaWNoLCBnZXRfY3B1KCkpLm1lbWJlcisrOwkJXAorCXB1dF9jcHUoKTsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIHJkc19zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19zdGF0cywgbWVtYmVyKQorI2RlZmluZSByZHNfc3RhdHNfYWRkX3doaWNoKHdoaWNoLCBtZW1iZXIsIGNvdW50KSBkbyB7CQlcCisJcGVyX2NwdSh3aGljaCwgZ2V0X2NwdSgpKS5tZW1iZXIgKz0gY291bnQ7CVwKKwlwdXRfY3B1KCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByZHNfc3RhdHNfYWRkKG1lbWJlciwgY291bnQpIHJkc19zdGF0c19hZGRfd2hpY2gocmRzX3N0YXRzLCBtZW1iZXIsIGNvdW50KQoraW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCk7Cit2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKTsKKworLyogc3lzY3RsLmMgKi8KK2ludCBfX2luaXQgcmRzX3N5c2N0bF9pbml0KHZvaWQpOwordm9pZCByZHNfc3lzY3RsX2V4aXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9taW47CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9kZWZhdWx0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfbWF4OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0czsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX3BpbmdfZW5hYmxlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF90cmFjZV9mbGFnczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfdHJhY2VfbGV2ZWw7CisKKy8qIHRocmVhZHMuYyAqLworaW50IF9faW5pdCByZHNfdGhyZWFkc19pbml0KHZvaWQpOwordm9pZCByZHNfdGhyZWFkc19leGl0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfd3E7Cit2b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIHJkc19zaHV0ZG93bl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfcmVjdl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCisvKiB0cmFuc3BvcnQuYyAqLworaW50IHJkc190cmFuc19yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwordm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOworc3RydWN0IHJkc190cmFuc3BvcnQgKnJkc190cmFuc19nZXRfcHJlZmVycmVkKF9fYmUzMiBhZGRyKTsKK3Vuc2lnbmVkIGludCByZHNfdHJhbnNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKK2ludCBfX2luaXQgcmRzX3RyYW5zX2luaXQodm9pZCk7Cit2b2lkIHJkc190cmFuc19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmVjdi5jIGIvbmV0L3Jkcy9yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxMThjNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmVjdi5jCkBAIC0wLDAgKzEsNTQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKK3ZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkgIF9fYmUzMiBzYWRkcikKK3sKKwlhdG9taWNfc2V0KCZpbmMtPmlfcmVmY291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZpbmMtPmlfaXRlbSk7CisJaW5jLT5pX2Nvbm4gPSBjb25uOworCWluYy0+aV9zYWRkciA9IHNhZGRyOworCWluYy0+aV9yZG1hX2Nvb2tpZSA9IDA7Cit9CisKK3ZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXJkc2RlYnVnKCJhZGRyZWYgaW5jICVwIHJlZiAlZFxuIiwgaW5jLCBhdG9taWNfcmVhZCgmaW5jLT5pX3JlZmNvdW50KSk7CisJYXRvbWljX2luYygmaW5jLT5pX3JlZmNvdW50KTsKK30KKwordm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJcmRzZGVidWcoInB1dCBpbmMgJXAgcmVmICVkXG4iLCBpbmMsIGF0b21pY19yZWFkKCZpbmMtPmlfcmVmY291bnQpKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW5jLT5pX3JlZmNvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmluYy0+aV9pdGVtKSk7CisKKwkJaW5jLT5pX2Nvbm4tPmNfdHJhbnMtPmluY19mcmVlKGluYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfcmVjdl9yY3ZidWZfZGVsdGEoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLAorCQkJCSAgaW50IGRlbHRhLCBfX2JlMTYgcG9ydCkKK3sKKwlpbnQgbm93X2Nvbmdlc3RlZDsKKworCWlmIChkZWx0YSA9PSAwKQorCQlyZXR1cm47CisKKwlycy0+cnNfcmN2X2J5dGVzICs9IGRlbHRhOworCW5vd19jb25nZXN0ZWQgPSBycy0+cnNfcmN2X2J5dGVzID4gcmRzX3NrX3JjdmJ1Zihycyk7CisKKwlyZHNkZWJ1ZygicnMgJXAgKCVwSTQ6JXUpIHJlY3YgYnl0ZXMgJWQgYnVmICVkICIKKwkgICJub3dfY29uZyAlZCBkZWx0YSAlZFxuIiwKKwkgIHJzLCAmcnMtPnJzX2JvdW5kX2FkZHIsCisJICBudG9ocyhycy0+cnNfYm91bmRfcG9ydCksIHJzLT5yc19yY3ZfYnl0ZXMsCisJICByZHNfc2tfcmN2YnVmKHJzKSwgbm93X2Nvbmdlc3RlZCwgZGVsdGEpOworCisJLyogd2Fzbid0IC0+IGFtIGNvbmdlc3RlZCAqLworCWlmICghcnMtPnJzX2Nvbmdlc3RlZCAmJiBub3dfY29uZ2VzdGVkKSB7CisJCXJzLT5yc19jb25nZXN0ZWQgPSAxOworCQlyZHNfY29uZ19zZXRfYml0KG1hcCwgcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9CisJLyogd2FzIC0+IGFyZW4ndCBjb25nZXN0ZWQgKi8KKwkvKiBSZXF1aXJlIG1vcmUgZnJlZSBzcGFjZSBiZWZvcmUgcmVwb3J0aW5nIHVuY29uZ2VzdGVkIHRvIHByZXZlbnQKKwkgICBib3VuY2luZyBjb25nL3VuY29uZyBzdGF0ZSB0b28gb2Z0ZW4gKi8KKwllbHNlIGlmIChycy0+cnNfY29uZ2VzdGVkICYmIChycy0+cnNfcmN2X2J5dGVzIDwgKHJkc19za19yY3ZidWYocnMpLzIpKSkgeworCQlycy0+cnNfY29uZ2VzdGVkID0gMDsKKwkJcmRzX2NvbmdfY2xlYXJfYml0KG1hcCwgcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9CisKKwkvKiBkbyBub3RoaW5nIGlmIG5vIGNoYW5nZSBpbiBjb25nIHN0YXRlICovCit9CisKKy8qCisgKiBQcm9jZXNzIGFsbCBleHRlbnNpb24gaGVhZGVycyB0aGF0IGNvbWUgd2l0aCB0aGlzIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19yZWN2X2luY29taW5nX2V4dGhkcnMoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaW5jLT5pX2hkcjsKKwl1bnNpZ25lZCBpbnQgcG9zID0gMCwgdHlwZSwgbGVuOworCXVuaW9uIHsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gdmVyc2lvbjsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgcmRtYTsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCByZG1hX2Rlc3Q7CisJfSBidWZmZXI7CisKKwl3aGlsZSAoMSkgeworCQlsZW4gPSBzaXplb2YoYnVmZmVyKTsKKwkJdHlwZSA9IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgJmJ1ZmZlciwgJmxlbik7CisJCWlmICh0eXBlID09IFJEU19FWFRIRFJfTk9ORSkKKwkJCWJyZWFrOworCQkvKiBQcm9jZXNzIGV4dGVuc2lvbiBoZWFkZXIgaGVyZSAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBSRFNfRVhUSERSX1JETUE6CisJCQlyZHNfcmRtYV91bnVzZShycywgYmUzMl90b19jcHUoYnVmZmVyLnJkbWEuaF9yZG1hX3JrZXkpLCAwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkRTX0VYVEhEUl9SRE1BX0RFU1Q6CisJCQkvKiBXZSBpZ25vcmUgdGhlIHNpemUgZm9yIG5vdy4gV2UgY291bGQgc3Rhc2ggaXQKKwkJCSAqIHNvbWV3aGVyZSBhbmQgdXNlIGl0IGZvciBlcnJvciBjaGVja2luZy4gKi8KKwkJCWluYy0+aV9yZG1hX2Nvb2tpZSA9IHJkc19yZG1hX21ha2VfY29va2llKAorCQkJCQliZTMyX3RvX2NwdShidWZmZXIucmRtYV9kZXN0LmhfcmRtYV9ya2V5KSwKKwkJCQkJYmUzMl90b19jcHUoYnVmZmVyLnJkbWFfZGVzdC5oX3JkbWFfb2Zmc2V0KSk7CisKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogVGhlIHRyYW5zcG9ydCBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyCisgKiByeCBhbmQgY29ubiByZXNldCBvbiB0aGlzIHNwZWNpZmljIGNvbm4uCisgKgorICogV2UgY3VycmVudGx5IGFzc2VydCB0aGF0IG9ubHkgb25lIGZyYWdtZW50ZWQgbWVzc2FnZSB3aWxsIGJlIHNlbnQKKyAqIGRvd24gYSBjb25uZWN0aW9uIGF0IGEgdGltZS4gIFRoaXMgbGV0cyB1cyByZWFzc2VtYmxlIGluIHRoZSBjb25uCisgKiBpbnN0ZWFkIG9mIHBlci1mbG93IHdoaWNoIG1lYW5zIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBnbyBkaWdnaW5nIHRocm91Z2gKKyAqIGZsb3dzIHRvIHRlYXIgZG93biBwYXJ0aWFsIHJlYXNzZW1ibHkgcHJvZ3Jlc3Mgb24gY29ubiBmYWlsdXJlIGFuZAorICogd2Ugc2F2ZSBmbG93IGxvb2t1cCBhbmQgbG9ja2luZyBmb3IgZWFjaCBmcmFnIGFycml2YWwuICBJdCBkb2VzIG1lYW4KKyAqIHRoYXQgc21hbGwgbWVzc2FnZXMgd2lsbCB3YWl0IGJlaGluZCBsYXJnZSBvbmVzLiAgRnJhZ21lbnRpbmcgYXQgYWxsCisgKiBpcyBvbmx5IHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIHByZS1wb3N0ZWQgYnVmZmVycy4KKyAqCisgKiBUaGUgY2FsbGVyIHBhc3NlcyBpbiBzYWRkciBhbmQgZGFkZHIgaW5zdGVhZCBvZiB1cyBnZXR0aW5nIGl0IGZyb20gdGhlCisgKiBjb25uLiAgVGhpcyBsZXRzIGxvb3BiYWNrLCB3aG8gb25seSBoYXMgb25lIGNvbm4gZm9yIGJvdGggZGlyZWN0aW9ucywKKyAqIHRlbGwgdXMgd2hpY2ggcm9sZXMgdGhlIGFkZHJzIGluIHRoZSBjb25uIGFyZSBwbGF5aW5nIGZvciB0aGlzIG1lc3NhZ2UuCisgKi8KK3ZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgICAgIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHNvY2sgKnNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbmMtPmlfY29ubiA9IGNvbm47CisJaW5jLT5pX3J4X2ppZmZpZXMgPSBqaWZmaWVzOworCisJcmRzZGVidWcoImNvbm4gJXAgbmV4dCAlbGx1IGluYyAlcCBzZXEgJWxsdSBsZW4gJXUgc3BvcnQgJXUgZHBvcnQgJXUgIgorCQkgImZsYWdzIDB4JXggcnhfamlmZmllcyAlbHVcbiIsIGNvbm4sCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWNvbm4tPmNfbmV4dF9yeF9zZXEsCisJCSBpbmMsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSksCisJCSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJIGJlMTZfdG9fY3B1KGluYy0+aV9oZHIuaF9zcG9ydCksCisJCSBiZTE2X3RvX2NwdShpbmMtPmlfaGRyLmhfZHBvcnQpLAorCQkgaW5jLT5pX2hkci5oX2ZsYWdzLAorCQkgaW5jLT5pX3J4X2ppZmZpZXMpOworCisJLyoKKwkgKiBTZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBvbmx5IGluY3JlYXNlLiAgTWVzc2FnZXMgZ2V0IHRoZWlyCisJICogc2VxdWVuY2UgbnVtYmVyIGFzIHRoZXkncmUgcXVldWVkIGluIGEgc2VuZGluZyBjb25uLiAgVGhleQorCSAqIGNhbiBiZSBkcm9wcGVkLCB0aG91Z2gsIGlmIHRoZSBzZW5kaW5nIHNvY2tldCBpcyBjbG9zZWQgYmVmb3JlCisJICogdGhleSBoaXQgdGhlIHdpcmUuICBTbyBzZXF1ZW5jZSBudW1iZXJzIGNhbiBza2lwIGZvcndhcmQKKwkgKiB1bmRlciBub3JtYWwgb3BlcmF0aW9uLiAgVGhleSBjYW4gYWxzbyBkcm9wIGJhY2sgaW4gdGhlIGNvbm4KKwkgKiBmYWlsb3ZlciBjYXNlIGFzIHByZXZpb3VzbHkgc2VudCBtZXNzYWdlcyBhcmUgcmVzZW50IGRvd24gdGhlCisJICogbmV3IGluc3RhbmNlIG9mIGEgY29ubi4gIFdlIGRyb3AgdGhvc2UsIG90aGVyd2lzZSB3ZSBoYXZlCisJICogdG8gYXNzdW1lIHRoYXQgdGhlIG5leHQgdmFsaWQgc2VxIGRvZXMgbm90IGNvbWUgYWZ0ZXIgYQorCSAqIGhvbGUgaW4gdGhlIGZyYWdtZW50IHN0cmVhbS4KKwkgKgorCSAqIFRoZSBoZWFkZXJzIGRvbid0IGdpdmUgdXMgYSB3YXkgdG8gcmVhbGl6ZSBpZiBmcmFnbWVudHMgb2YKKwkgKiBhIG1lc3NhZ2UgaGF2ZSBiZWVuIGRyb3BwZWQuICBXZSBhc3N1bWUgdGhhdCBmcmFncyB0aGF0IGFycml2ZQorCSAqIHRvIGEgZmxvdyBhcmUgcGFydCBvZiB0aGUgY3VycmVudCBtZXNzYWdlIG9uIHRoZSBmbG93IHRoYXQgaXMKKwkgKiBiZWluZyByZWFzc2VtYmxlZC4gIFRoaXMgbWVhbnMgdGhhdCBzZW5kZXJzIGNhbid0IGRyb3AgbWVzc2FnZXMKKwkgKiBmcm9tIHRoZSBzZW5kaW5nIGNvbm4gdW50aWwgYWxsIHRoZWlyIGZyYWdzIGFyZSBzZW50LgorCSAqCisJICogWFhYIHdlIGNvdWxkIHNwZW5kIG1vcmUgb24gdGhlIHdpcmUgdG8gZ2V0IG1vcmUgcm9idXN0IGZhaWx1cmUKKwkgKiBkZXRlY3Rpb24sIGFyZ3VhYmx5IHdvcnRoIGl0IHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbi4KKwkgKi8KKwlpZiAoYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSA8IGNvbm4tPmNfbmV4dF9yeF9zZXEKKwkgJiYgKGluYy0+aV9oZHIuaF9mbGFncyAmIFJEU19GTEFHX1JFVFJBTlNNSVRURUQpKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3Bfb2xkX3NlcSk7CisJCWdvdG8gb3V0OworCX0KKwljb25uLT5jX25leHRfcnhfc2VxID0gYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSArIDE7CisKKwlpZiAocmRzX3N5c2N0bF9waW5nX2VuYWJsZSAmJiBpbmMtPmlfaGRyLmhfZHBvcnQgPT0gMCkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9waW5nKTsKKwkJcmRzX3NlbmRfcG9uZyhjb25uLCBpbmMtPmlfaGRyLmhfc3BvcnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlycyA9IHJkc19maW5kX2JvdW5kKGRhZGRyLCBpbmMtPmlfaGRyLmhfZHBvcnQpOworCWlmIChycyA9PSBOVUxMKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3Bfbm9fc29jayk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFByb2Nlc3MgZXh0ZW5zaW9uIGhlYWRlcnMgKi8KKwlyZHNfcmVjdl9pbmNvbWluZ19leHRoZHJzKGluYywgcnMpOworCisJLyogV2UgY2FuIGJlIHJhY2luZyB3aXRoIHJkc19yZWxlYXNlKCkgd2hpY2ggbWFya3MgdGhlIHNvY2tldCBkZWFkLiAqLworCXNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKworCS8qIHNlcmlhbGl6ZSB3aXRoIHJkc19yZWxlYXNlIC0+IHNvY2tfb3JwaGFuICovCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKKwkJcmRzZGVidWcoImFkZGluZyBpbmMgJXAgdG8gcnMgJXAncyByZWN2IHF1ZXVlXG4iLCBpbmMsIHJzKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfcXVldWVkKTsKKwkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJICAgICAgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJICAgICAgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwkJcmRzX2luY19hZGRyZWYoaW5jKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW5jLT5pX2l0ZW0sICZycy0+cnNfcmVjdl9xdWV1ZSk7CisJCV9fcmRzX3dha2Vfc2tfc2xlZXAoc2spOworCX0gZWxzZSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfZGVhZF9zb2NrKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChycykKKwkJcmRzX3NvY2tfcHV0KHJzKTsKK30KKworLyoKKyAqIGJlIHZlcnkgY2FyZWZ1bCBoZXJlLiAgVGhpcyBpcyBiZWluZyBjYWxsZWQgYXMgdGhlIGNvbmRpdGlvbiBpbgorICogd2FpdF9ldmVudF8qKCkgbmVlZHMgdG8gY29wZSB3aXRoIGJlaW5nIGNhbGxlZCBtYW55IHRpbWVzLgorICovCitzdGF0aWMgaW50IHJkc19uZXh0X2luY29taW5nKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfaW5jb21pbmcgKippbmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgqaW5jID09IE5VTEwpIHsKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfcmVjdl9xdWV1ZSkpIHsKKwkJCSppbmMgPSBsaXN0X2VudHJ5KHJzLT5yc19yZWN2X3F1ZXVlLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19pbmNvbWluZywKKwkJCQkJICBpX2l0ZW0pOworCQkJcmRzX2luY19hZGRyZWYoKmluYyk7CisJCX0KKwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiAqaW5jICE9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3N0aWxsX3F1ZXVlZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCQkgICAgaW50IGRyb3ApCit7CisJc3RydWN0IHNvY2sgKnNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZpbmMtPmlfaXRlbSkpIHsKKwkJcmV0ID0gMTsKKwkJaWYgKGRyb3ApIHsKKwkJCS8qIFhYWCBtYWtlIHN1cmUgdGhpcyBpX2Nvbm4gaXMgcmVsaWFibGUgKi8KKwkJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCQkgICAgICAtYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCQlsaXN0X2RlbF9pbml0KCZpbmMtPmlfaXRlbSk7CisJCQlyZHNfaW5jX3B1dChpbmMpOworCQl9CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKKwlyZHNkZWJ1ZygiaW5jICVwIHJzICVwIHN0aWxsICVkIGRyb3BwZWQgJWRcbiIsIGluYywgcnMsIHJldCwgZHJvcCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1bGwgZXJyb3JzIG9mZiB0aGUgZXJyb3IgcXVldWUuCisgKiBJZiBtc2doZHIgaXMgTlVMTCwgd2Ugd2lsbCBqdXN0IHB1cmdlIHRoZSBlcnJvciBxdWV1ZS4KKyAqLworaW50IHJkc19ub3RpZnlfcXVldWVfZ2V0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZ2hkcikKK3sKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKwlzdHJ1Y3QgcmRzX3JkbWFfbm90aWZ5IGNtc2c7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgbWF4X21lc3NhZ2VzID0gfjBVOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGNvcHkpOworCWludCBlcnIgPSAwOworCisKKwkvKiBwdXRfY21zZyBjb3BpZXMgdG8gdXNlciBzcGFjZSBhbmQgdGh1cyBtYXkgc2xlZXAuIFdlIGNhbid0IGRvIHRoaXMKKwkgKiB3aXRoIHJzX2xvY2sgaGVsZCwgc28gZmlyc3QgZ3JhYiBhcyBtYW55IG5vdGlmaWNhdGlvbnMgYXMgd2UgY2FuIHN0dWZmCisJICogaW4gdGhlIHVzZXIgcHJvdmlkZWQgY21zZyBidWZmZXIuIFdlIGRvbid0IHRyeSB0byBjb3B5IG1vcmUsIHRvIGF2b2lkCisJICogbG9zaW5nIG5vdGlmaWNhdGlvbnMgLSBleGNlcHQgd2hlbiB0aGUgYnVmZmVyIGlzIHNvIHNtYWxsIHRoYXQgaXQgd291bGRuJ3QKKwkgKiBldmVuIGhvbGQgYSBzaW5nbGUgbm90aWZpY2F0aW9uLiBUaGVuIHdlIGdpdmUgaGltIGFzIG11Y2ggb2YgdGhpcyBzaW5nbGUKKwkgKiBtc2cgYXMgd2UgY2FuIHNxdWVlemUgaW4sIGFuZCBzZXQgTVNHX0NUUlVOQy4KKwkgKi8KKwlpZiAobXNnaGRyKSB7CisJCW1heF9tZXNzYWdlcyA9IG1zZ2hkci0+bXNnX2NvbnRyb2xsZW4gLyBDTVNHX1NQQUNFKHNpemVvZihjbXNnKSk7CisJCWlmICghbWF4X21lc3NhZ2VzKQorCQkJbWF4X21lc3NhZ2VzID0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpICYmIGNvdW50IDwgbWF4X21lc3NhZ2VzKSB7CisJCW5vdGlmaWVyID0gbGlzdF9lbnRyeShycy0+cnNfbm90aWZ5X3F1ZXVlLm5leHQsCisJCQkJc3RydWN0IHJkc19ub3RpZmllciwgbl9saXN0KTsKKwkJbGlzdF9tb3ZlKCZub3RpZmllci0+bl9saXN0LCAmY29weSk7CisJCWNvdW50Kys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY29weSkpIHsKKwkJbm90aWZpZXIgPSBsaXN0X2VudHJ5KGNvcHkubmV4dCwgc3RydWN0IHJkc19ub3RpZmllciwgbl9saXN0KTsKKworCQlpZiAobXNnaGRyKSB7CisJCQljbXNnLnVzZXJfdG9rZW4gPSBub3RpZmllci0+bl91c2VyX3Rva2VuOworCQkJY21zZy5zdGF0dXMgID0gbm90aWZpZXItPm5fc3RhdHVzOworCisJCQllcnIgPSBwdXRfY21zZyhtc2doZHIsIFNPTF9SRFMsIFJEU19DTVNHX1JETUFfU1RBVFVTLAorCQkJCQlzaXplb2YoY21zZyksICZjbXNnKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisJCX0KKworCQlsaXN0X2RlbF9pbml0KCZub3RpZmllci0+bl9saXN0KTsKKwkJa2ZyZWUobm90aWZpZXIpOworCX0KKworCS8qIElmIHdlIGJhaWxlZCBvdXQgYmVjYXVzZSBvZiBhbiBlcnJvciBpbiBwdXRfY21zZywKKwkgKiB3ZSBtYXkgYmUgbGVmdCB3aXRoIG9uZSBvciBtb3JlIG5vdGlmaWNhdGlvbnMgdGhhdCB3ZQorCSAqIGRpZG4ndCBwcm9jZXNzLiBSZXR1cm4gdGhlbSB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmNvcHkpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCQlsaXN0X3NwbGljZSgmY29weSwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBRdWV1ZSBhIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyBpbnQgcmRzX25vdGlmeV9jb25nKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZ2hkcikKK3sKKwl1aW50NjRfdCBub3RpZnkgPSBycy0+cnNfY29uZ19ub3RpZnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJZXJyID0gcHV0X2Ntc2cobXNnaGRyLCBTT0xfUkRTLCBSRFNfQ01TR19DT05HX1VQREFURSwKKwkJCXNpemVvZihub3RpZnkpLCAmbm90aWZ5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJcnMtPnJzX2Nvbmdfbm90aWZ5ICY9IH5ub3RpZnk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVjZWl2ZSBhbnkgY29udHJvbCBtZXNzYWdlcy4KKyAqLworc3RhdGljIGludCByZHNfY21zZ19yZWN2KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IG1zZ2hkciAqbXNnKQoreworCWludCByZXQgPSAwOworCisJaWYgKGluYy0+aV9yZG1hX2Nvb2tpZSkgeworCQlyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SRFMsIFJEU19DTVNHX1JETUFfREVTVCwKKwkJCQlzaXplb2YoaW5jLT5pX3JkbWFfY29va2llKSwgJmluYy0+aV9yZG1hX2Nvb2tpZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcmRzX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBzaXplLCBpbnQgbXNnX2ZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCWxvbmcgdGltZW87CisJaW50IHJldCA9IDAsIG5vbmJsb2NrID0gbXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCByZHNfaW5jb21pbmcgKmluYyA9IE5VTEw7CisKKwkvKiB1ZHBfcmVjdm1zZygpLT5zb2NrX3JlY3Z0aW1lbygpIGdldHMgYXdheSB3aXRob3V0IGxvY2tpbmcgdG9vLi4gKi8KKwl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTsKKworCXJkc2RlYnVnKCJzaXplICV6dSBmbGFncyAweCV4IHRpbWVvICVsZFxuIiwgc2l6ZSwgbXNnX2ZsYWdzLCB0aW1lbyk7CisKKwlpZiAobXNnX2ZsYWdzICYgTVNHX09PQikKKwkJZ290byBvdXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBub3RpZmljYXRpb25zLCBkbyB0aG9zZSAtIGFuZCBub3RoaW5nIGVsc2UgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpKSB7CisJCXJldCA9IHJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBtc2cpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KSB7CisJCXJldCA9IHJkc19ub3RpZnlfY29uZyhycywgbXNnKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJaWYgKCFyZHNfbmV4dF9pbmNvbWluZyhycywgJmluYykpIHsKKwkJCWlmIChub25ibG9jaykgeworCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRpbWVvID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnNrLT5za19zbGVlcCwKKwkJCQkJCXJkc19uZXh0X2luY29taW5nKHJzLCAmaW5jKSwKKwkJCQkJCXRpbWVvKTsKKwkJCXJkc2RlYnVnKCJyZWN2bXNnIHdva2UgaW5jICVwIHRpbWVvICVsZFxuIiwgaW5jLAorCQkJCSB0aW1lbyk7CisJCQlpZiAodGltZW8gPiAwIHx8IHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSB0aW1lbzsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKworCQlyZHNkZWJ1ZygiY29weWluZyBpbmMgJXAgZnJvbSAlcEk0OiV1IHRvIHVzZXJcbiIsIGluYywKKwkJCSAmaW5jLT5pX2Nvbm4tPmNfZmFkZHIsCisJCQkgbnRvaHMoaW5jLT5pX2hkci5oX3Nwb3J0KSk7CisJCXJldCA9IGluYy0+aV9jb25uLT5jX3RyYW5zLT5pbmNfY29weV90b191c2VyKGluYywgbXNnLT5tc2dfaW92LAorCQkJCQkJCSAgICAgc2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogaWYgdGhlIG1lc3NhZ2Ugd2UganVzdCBjb3BpZWQgaXNuJ3QgYXQgdGhlIGhlYWQgb2YgdGhlCisJCSAqIHJlY3YgcXVldWUgdGhlbiBzb21lb25lIGVsc2UgcmFjZWQgdXMgdG8gcmV0dXJuIGl0LCB0cnkKKwkJICogdG8gZ2V0IHRoZSBuZXh0IG1lc3NhZ2UuCisJCSAqLworCQlpZiAoIXJkc19zdGlsbF9xdWV1ZWQocnMsIGluYywgIShtc2dfZmxhZ3MgJiBNU0dfUEVFSykpKSB7CisJCQlyZHNfaW5jX3B1dChpbmMpOworCQkJaW5jID0gTlVMTDsKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGl2ZXJfcmFjZWQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmV0IDwgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbikpIHsKKwkJCWlmIChtc2dfZmxhZ3MgJiBNU0dfVFJVTkMpCisJCQkJcmV0ID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisJCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CisJCX0KKworCQlpZiAocmRzX2Ntc2dfcmVjdihpbmMsIG1zZykpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGl2ZXJlZCk7CisKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJCWlmIChzaW4pIHsKKwkJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJCQlzaW4tPnNpbl9wb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmMtPmlfc2FkZHI7CisJCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoaW5jKQorCQlyZHNfaW5jX3B1dChpbmMpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoZSBzb2NrZXQgaXMgYmVpbmcgc2h1dCBkb3duIGFuZCB3ZSdyZSBhc2tlZCB0byBkcm9wIG1lc3NhZ2VzIHRoYXQgd2VyZQorICogcXVldWVkIGZvciByZWN2bXNnLiAgVGhlIGNhbGxlciBoYXMgdW5ib3VuZCB0aGUgc29ja2V0IHNvIHRoZSByZWNlaXZlIHBhdGgKKyAqIHdvbid0IHF1ZXVlIGFueSBtb3JlIGluY29taW5nIGZyYWdtZW50cyBvciBtZXNzYWdlcyBvbiB0aGUgc29ja2V0LgorICovCit2b2lkIHJkc19jbGVhcl9yZWN2X3F1ZXVlKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc3RydWN0IHNvY2sgKnNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmMsIHRtcCwgJnJzLT5yc19yZWN2X3F1ZXVlLCBpX2l0ZW0pIHsKKwkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJICAgICAgLWJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCWxpc3RfZGVsX2luaXQoJmluYy0+aV9pdGVtKTsKKwkJcmRzX2luY19wdXQoaW5jKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIGluYy0+aV9zYWRkciBpc24ndCB1c2VkIGhlcmUgYmVjYXVzZSBpdCBpcyBvbmx5IHNldCBpbiB0aGUgcmVjZWl2ZQorICogcGF0aC4KKyAqLwordm9pZCByZHNfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCSAgICAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgaW50IGZsaXApCit7CisJc3RydWN0IHJkc19pbmZvX21lc3NhZ2UgbWluZm87CisKKwltaW5mby5zZXEgPSBiZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpOworCW1pbmZvLmxlbiA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCisJaWYgKGZsaXApIHsKKwkJbWluZm8ubGFkZHIgPSBkYWRkcjsKKwkJbWluZm8uZmFkZHIgPSBzYWRkcjsKKwkJbWluZm8ubHBvcnQgPSBpbmMtPmlfaGRyLmhfZHBvcnQ7CisJCW1pbmZvLmZwb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCX0gZWxzZSB7CisJCW1pbmZvLmxhZGRyID0gc2FkZHI7CisJCW1pbmZvLmZhZGRyID0gZGFkZHI7CisJCW1pbmZvLmxwb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCQltaW5mby5mcG9ydCA9IGluYy0+aV9oZHIuaF9kcG9ydDsKKwl9CisKKwlyZHNfaW5mb19jb3B5KGl0ZXIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzczNjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMCwwICsxLDEwMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKKy8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb20KKyAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2cKKyAqIHdpbGwga2ljayBvdXIgc2hpbi4KKyAqIEFsc28sIGl0IHNlZW1zIGZhaXJlciB0byBub3QgbGV0IG9uZSBidXN5IGNvbm5lY3Rpb24gc3RhbGwgYWxsIHRoZQorICogb3RoZXJzLgorICoKKyAqIHNlbmRfYmF0Y2hfY291bnQgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSdsbCBsb29wIGluIHNlbmRfeG1pdC4gU2V0dGluZworICogaXQgdG8gMCB3aWxsIHJlc3RvcmUgdGhlIG9sZCBiZWhhdmlvciAod2hlcmUgd2UgbG9vcGVkIHVudGlsIHdlIGhhZAorICogZHJhaW5lZCB0aGUgcXVldWUpLgorICovCitzdGF0aWMgaW50IHNlbmRfYmF0Y2hfY291bnQgPSA2NDsKK21vZHVsZV9wYXJhbShzZW5kX2JhdGNoX2NvdW50LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzZW5kX2JhdGNoX2NvdW50LCAiIGJhdGNoIGZhY3RvciB3aGVuIHdvcmtpbmcgdGhlIHNlbmQgcXVldWUiKTsKKworLyoKKyAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiBDYWxsZXIgbXVzdCBob2xkIGNfc2VuZF9sb2NrIHdoZW4gY2FsbGluZyBoZXJlLgorICovCit2b2lkIHJkc19zZW5kX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoY29ubi0+Y194bWl0X3JtKSB7CisJCS8qIFRlbGwgdGhlIHVzZXIgdGhlIFJETUEgb3AgaXMgbm8gbG9uZ2VyIG1hcHBlZCBieSB0aGUKKwkJICogdHJhbnNwb3J0LiBUaGlzIGlzbid0IGVudGlyZWx5IHRydWUgKGl0J3MgZmx1c2hlZCBvdXQKKwkJICogaW5kZXBlbmRlbnRseSkgYnV0IGFzIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRoZXJlJ3MKKwkJICogbm8gb25nb2luZyBSRE1BIHRvL2Zyb20gdGhhdCBtZW1vcnkgKi8KKwkJcmRzX21lc3NhZ2VfdW5tYXBwZWQoY29ubi0+Y194bWl0X3JtKTsKKwkJcmRzX21lc3NhZ2VfcHV0KGNvbm4tPmNfeG1pdF9ybSk7CisJCWNvbm4tPmNfeG1pdF9ybSA9IE5VTEw7CisJfQorCWNvbm4tPmNfeG1pdF9zZyA9IDA7CisJY29ubi0+Y194bWl0X2hkcl9vZmYgPSAwOworCWNvbm4tPmNfeG1pdF9kYXRhX29mZiA9IDA7CisJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDA7CisKKwljb25uLT5jX21hcF9xdWV1ZWQgPSAwOworCisJY29ubi0+Y191bmFja2VkX3BhY2tldHMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CisJY29ubi0+Y191bmFja2VkX2J5dGVzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKKworCS8qIE1hcmsgbWVzc2FnZXMgYXMgcmV0cmFuc21pc3Npb25zLCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBzZW5kIHEgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCXNldF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncyk7CisJCXNldF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpOworCX0KKwlsaXN0X3NwbGljZV9pbml0KCZjb25uLT5jX3JldHJhbnMsICZjb25uLT5jX3NlbmRfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogV2UncmUgbWFraW5nIHRoZSBjb25jaW91cyB0cmFkZS1vZmYgaGVyZSB0byBvbmx5IHNlbmQgb25lIG1lc3NhZ2UKKyAqIGRvd24gdGhlIGNvbm5lY3Rpb24gYXQgYSB0aW1lLgorICogICBQcm86CisgKiAgICAgIC0gdHggcXVldWVpbmcgaXMgYSBzaW1wbGUgZmlmbyBsaXN0CisgKiAgIAktIHJlYXNzZW1ibHkgaXMgb3B0aW9uYWwgYW5kIGVhc2lseSBkb25lIGJ5IHRyYW5zcG9ydHMgcGVyIGNvbm4KKyAqICAgICAgLSBubyBwZXIgZmxvdyByeCBsb29rdXAgYXQgYWxsLCBzdHJhaWdodCB0byB0aGUgc29ja2V0CisgKiAgIAktIGxlc3MgcGVyLWZyYWcgbWVtb3J5IGFuZCB3aXJlIG92ZXJoZWFkCisgKiAgIENvbjoKKyAqICAgICAgLSBxdWV1ZWQgYWNrcyBjYW4gYmUgZGVsYXllZCBiZWhpbmQgbGFyZ2UgbWVzc2FnZXMKKyAqICAgRGVwZW5kczoKKyAqICAgICAgLSBzbWFsbCBtZXNzYWdlIGxhdGVuY3kgaXMgaGlnaGVyIGJlaGluZCBxdWV1ZWQgbGFyZ2UgbWVzc2FnZXMKKyAqICAgICAgLSBsYXJnZSBtZXNzYWdlIGxhdGVuY3kgaXNuJ3Qgc3RhcnZlZCBieSBpbnRlcnZlbmluZyBzbWFsbCBzZW5kcworICovCitpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0bXA7CisJdW5zaWduZWQgaW50IHNlbmRfcXVvdGEgPSBzZW5kX2JhdGNoX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IHJldCA9IDA7CisJaW50IHdhc19lbXB0eSA9IDA7CisJTElTVF9IRUFEKHRvX2JlX2Ryb3BwZWQpOworCisJLyoKKwkgKiBzZW5kbXNnIGNhbGxzIGhlcmUgYWZ0ZXIgaGF2aW5nIHF1ZXVlZCBpdHMgbWVzc2FnZSBvbiB0aGUgc2VuZAorCSAqIHF1ZXVlLiAgV2Ugb25seSBoYXZlIG9uZSB0YXNrIGZlZWRpbmcgdGhlIGNvbm5lY3Rpb24gYXQgYSB0aW1lLiAgSWYKKwkgKiBhbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGZlZWRpbmcgdGhlIHF1ZXVlIHRoZW4gd2UgYmFjayBvZmYuICBUaGlzCisJICogYXZvaWRzIGJsb2NraW5nIHRoZSBjYWxsZXIgYW5kIHRyYWRpbmcgcGVyLWNvbm5lY3Rpb24gZGF0YSBiZXR3ZWVuCisJICogY2FjaGVzIHBlciBtZXNzYWdlLgorCSAqCisJICogVGhlIHNlbSBob2xkZXIgd2lsbCBpc3N1ZSBhIHJldHJ5IGlmIHRoZXkgbm90aWNlIHRoYXQgc29tZW9uZSBxdWV1ZWQKKwkgKiBhIG1lc3NhZ2UgYWZ0ZXIgdGhleSBzdG9wcGVkIHdhbGtpbmcgdGhlIHNlbmQgcXVldWUgYnV0IGJlZm9yZSB0aGV5CisJICogZHJvcHBlZCB0aGUgc2VtLgorCSAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmY29ubi0+Y19zZW5kX2xvY2spKSB7CisJCXJkc19zdGF0c19pbmMoc19zZW5kX3NlbV9jb250ZW50aW9uKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvbm4tPmNfdHJhbnMtPnhtaXRfcHJlcGFyZSkKKwkJY29ubi0+Y190cmFucy0+eG1pdF9wcmVwYXJlKGNvbm4pOworCisJLyoKKwkgKiBzcGluIHRyeWluZyB0byBwdXNoIGhlYWRlcnMgYW5kIGRhdGEgZG93biB0aGUgY29ubmVjdGlvbiB1bnRpbAorCSAqIHRoZSBjb25uZWN0aW9uIGRvZW5zJ3QgbWFrZSBmb3J3YXJkIHByb2dyZXNzLgorCSAqLworCXdoaWxlICgtLXNlbmRfcXVvdGEpIHsKKwkJLyoKKwkJICogU2VlIGlmIG5lZWQgdG8gc2VuZCBhIGNvbmdlc3Rpb24gbWFwIHVwZGF0ZSBpZiB3ZSdyZQorCQkgKiBiZXR3ZWVuIHNlbmRpbmcgbWVzc2FnZXMuICBUaGUgc2VuZF9zZW0gcHJvdGVjdHMgb3VyIHNvbGUKKwkJICogdXNlIG9mIGNfbWFwX29mZnNldCBhbmQgX2J5dGVzLgorCQkgKiBOb3RlIHRoaXMgaXMgdXNlZCBvbmx5IGJ5IHRyYW5zcG9ydHMgdGhhdCBkZWZpbmUgYSBzcGVjaWFsCisJCSAqIHhtaXRfY29uZ19tYXAgZnVuY3Rpb24uIEZvciBhbGwgb3RoZXJzLCB3ZSBjcmVhdGUgYWxsb2NhdGUKKwkJICogYSBjb25nX21hcCBtZXNzYWdlIGFuZCB0cmVhdCBpdCBqdXN0IGxpa2UgYW55IG90aGVyIHNlbmQuCisJCSAqLworCQlpZiAoY29ubi0+Y19tYXBfYnl0ZXMpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXRfY29uZ19tYXAoY29ubiwgY29ubi0+Y19sY29uZywKKwkJCQkJCWNvbm4tPmNfbWFwX29mZnNldCk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWNvbm4tPmNfbWFwX29mZnNldCArPSByZXQ7CisJCQljb25uLT5jX21hcF9ieXRlcyAtPSByZXQ7CisJCQlpZiAoY29ubi0+Y19tYXBfYnl0ZXMpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiB3ZSdyZSBkb25lIHNlbmRpbmcgdGhlIGN1cnJlbnQgbWVzc2FnZSwgY2xlYXIgdGhlCisJCSAqIG9mZnNldCBhbmQgUy9HIHRlbXBvcmFyaWVzLgorCQkgKi8KKwkJcm0gPSBjb25uLT5jX3htaXRfcm07CisJCWlmIChybSAhPSBOVUxMICYmCisJCSAgICBjb25uLT5jX3htaXRfaGRyX29mZiA9PSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICYmCisJCSAgICBjb25uLT5jX3htaXRfc2cgPT0gcm0tPm1fbmVudHMpIHsKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IE5VTEw7CisJCQljb25uLT5jX3htaXRfc2cgPSAwOworCQkJY29ubi0+Y194bWl0X2hkcl9vZmYgPSAwOworCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAwOworCisJCQkvKiBSZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIG1lc3NhZ2UuICovCisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJcm0gPSBOVUxMOworCQl9CisKKwkJLyogSWYgd2UncmUgYXNrZWQgdG8gc2VuZCBhIGNvbmcgbWFwIHVwZGF0ZSwgZG8gc28uCisJCSAqLworCQlpZiAocm0gPT0gTlVMTCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpIHsKKwkJCWlmIChjb25uLT5jX3RyYW5zLT54bWl0X2NvbmdfbWFwICE9IE5VTEwpIHsKKwkJCQljb25uLT5jX21hcF9vZmZzZXQgPSAwOworCQkJCWNvbm4tPmNfbWFwX2J5dGVzID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArCisJCQkJCVJEU19DT05HX01BUF9CWVRFUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcm0gPSByZHNfY29uZ191cGRhdGVfYWxsb2MoY29ubik7CisJCQlpZiAoSVNfRVJSKHJtKSkgeworCQkJCXJldCA9IFBUUl9FUlIocm0pOworCQkJCWJyZWFrOworCQkJfQorCisJCQljb25uLT5jX3htaXRfcm0gPSBybTsKKwkJfQorCisJCS8qCisJCSAqIEdyYWIgdGhlIG5leHQgbWVzc2FnZSBmcm9tIHRoZSBzZW5kIHF1ZXVlLCBpZiB0aGVyZSBpcyBvbmUuCisJCSAqCisJCSAqIGNfeG1pdF9ybSBob2xkcyBhIHJlZiB3aGlsZSB3ZSdyZSBzZW5kaW5nIHRoaXMgbWVzc2FnZSBkb3duCisJCSAqIHRoZSBjb25uY3Rpb24uICBXZSBjYW4gdXNlIHRoaXMgcmVmIHdoaWxlIGhvbGRpbmcgdGhlCisJCSAqIHNlbmRfc2VtLi4gcmRzX3NlbmRfcmVzZXQoKSBpcyBzZXJpYWxpemVkIHdpdGggaXQuCisJCSAqLworCQlpZiAocm0gPT0gTlVMTCkgeworCQkJdW5zaWduZWQgaW50IGxlbjsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJCQlpZiAoIWxpc3RfZW1wdHkoJmNvbm4tPmNfc2VuZF9xdWV1ZSkpIHsKKwkJCQlybSA9IGxpc3RfZW50cnkoY29ubi0+Y19zZW5kX3F1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UsCisJCQkJCQltX2Nvbm5faXRlbSk7CisJCQkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKworCQkJCS8qCisJCQkJICogTW92ZSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzZW5kIHF1ZXVlIHRvIHRoZSByZXRyYW5zbWl0CisJCQkJICogbGlzdCByaWdodCBhd2F5LgorCQkJCSAqLworCQkJCWxpc3RfbW92ZV90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3JldHJhbnMpOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHJtID09IE5VTEwpIHsKKwkJCQl3YXNfZW1wdHkgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBVbmZvcnR1bmF0ZWx5LCB0aGUgd2F5IEluZmluaWJhbmQgZGVhbHMgd2l0aAorCQkJICogUkRNQSB0byBhIGJhZCBNUiBrZXkgaXMgYnkgbW92aW5nIHRoZSBlbnRpcmUKKwkJCSAqIHF1ZXVlIHBhaXIgdG8gZXJyb3Igc3RhdGUuIFdlIGNvbGQgcG9zc2libHkKKwkJCSAqIHJlY292ZXIgZnJvbSB0aGF0LCBidXQgcmlnaHQgbm93IHdlIGRyb3AgdGhlCisJCQkgKiBjb25uZWN0aW9uLgorCQkJICogVGhlcmVmb3JlLCB3ZSBuZXZlciByZXRyYW5zbWl0IG1lc3NhZ2VzIHdpdGggUkRNQSBvcHMuCisJCQkgKi8KKwkJCWlmIChybS0+bV9yZG1hX29wCisJCQkgJiYgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpKQorCQkJCQlsaXN0X21vdmUoJnJtLT5tX2Nvbm5faXRlbSwgJnRvX2JlX2Ryb3BwZWQpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFJlcXVpcmUgYW4gQUNLIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSAqLworCQkJbGVuID0gbnRvaGwocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKwkJCWlmIChjb25uLT5jX3VuYWNrZWRfcGFja2V0cyA9PSAwCisJCQkgfHwgY29ubi0+Y191bmFja2VkX2J5dGVzIDwgbGVuKSB7CisJCQkJX19zZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCisJCQkJY29ubi0+Y191bmFja2VkX3BhY2tldHMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CisJCQkJY29ubi0+Y191bmFja2VkX2J5dGVzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKKwkJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9hY2tfcmVxdWlyZWQpOworCQkJfSBlbHNlIHsKKwkJCQljb25uLT5jX3VuYWNrZWRfYnl0ZXMgLT0gbGVuOworCQkJCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzLS07CisJCQl9CisKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IHJtOworCQl9CisKKwkJLyoKKwkJICogVHJ5IGFuZCBzZW5kIGFuIHJkbWEgbWVzc2FnZS4gIExldCdzIHNlZSBpZiB3ZSBjYW4KKwkJICoga2VlcCB0aGlzIHNpbXBsZSBhbmQgcmVxdWlyZSB0aGF0IHRoZSB0cmFuc3BvcnQgZWl0aGVyCisJCSAqIHNlbmQgdGhlIHdob2xlIHJkbWEgb3Igbm9uZSBvZiBpdC4KKwkJICovCisJCWlmIChybS0+bV9yZG1hX29wICYmICFjb25uLT5jX3htaXRfcmRtYV9zZW50KSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEoY29ubiwgcm0tPm1fcmRtYV9vcCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDE7CisJCQkvKiBUaGUgdHJhbnNwb3J0IG93bnMgdGhlIG1hcHBlZCBtZW1vcnkgZm9yIG5vdy4KKwkJCSAqIFlvdSBjYW4ndCB1bm1hcCBpdCB3aGlsZSBpdCdzIG9uIHRoZSBzZW5kIHF1ZXVlICovCisJCQlzZXRfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpOworCQl9CisKKwkJaWYgKGNvbm4tPmNfeG1pdF9oZHJfb2ZmIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSB8fAorCQkgICAgY29ubi0+Y194bWl0X3NnIDwgcm0tPm1fbmVudHMpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXQoY29ubiwgcm0sCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9oZHJfb2ZmLAorCQkJCQkJICBjb25uLT5jX3htaXRfc2csCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9kYXRhX29mZik7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWlmIChjb25uLT5jX3htaXRfaGRyX29mZiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJCQl0bXAgPSBtaW5fdChpbnQsIHJldCwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgLQorCQkJCQkgICAgY29ubi0+Y194bWl0X2hkcl9vZmYpOworCQkJCWNvbm4tPmNfeG1pdF9oZHJfb2ZmICs9IHRtcDsKKwkJCQlyZXQgLT0gdG1wOworCQkJfQorCisJCQlzZyA9ICZybS0+bV9zZ1tjb25uLT5jX3htaXRfc2ddOworCQkJd2hpbGUgKHJldCkgeworCQkJCXRtcCA9IG1pbl90KGludCwgcmV0LCBzZy0+bGVuZ3RoIC0KKwkJCQkJCSAgICAgIGNvbm4tPmNfeG1pdF9kYXRhX29mZik7CisJCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmICs9IHRtcDsKKwkJCQlyZXQgLT0gdG1wOworCQkJCWlmIChjb25uLT5jX3htaXRfZGF0YV9vZmYgPT0gc2ctPmxlbmd0aCkgeworCQkJCQljb25uLT5jX3htaXRfZGF0YV9vZmYgPSAwOworCQkJCQlzZysrOworCQkJCQljb25uLT5jX3htaXRfc2crKzsKKwkJCQkJQlVHX09OKHJldCAhPSAwICYmCisJCQkJCSAgICAgICBjb25uLT5jX3htaXRfc2cgPT0gcm0tPm1fbmVudHMpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIE51a2UgYW55IG1lc3NhZ2VzIHdlIGRlY2lkZWQgbm90IHRvIHJldHJhbnNtaXQuICovCisJaWYgKCFsaXN0X2VtcHR5KCZ0b19iZV9kcm9wcGVkKSkKKwkJcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jaygmdG9fYmVfZHJvcHBlZCwgUkRTX1JETUFfRFJPUFBFRCk7CisKKwlpZiAoY29ubi0+Y190cmFucy0+eG1pdF9jb21wbGV0ZSkKKwkJY29ubi0+Y190cmFucy0+eG1pdF9jb21wbGV0ZShjb25uKTsKKworCS8qCisJICogV2UgbWlnaHQgYmUgcmFjaW5nIHdpdGggYW5vdGhlciBzZW5kZXIgd2hvIHF1ZXVlZCBhIG1lc3NhZ2UgYnV0CisJICogYmFja2VkIG9mZiBvbiBub3RpY2luZyB0aGF0IHdlIGhlbGQgdGhlIGNfc2VuZF9sb2NrLiAgSWYgd2UgY2hlY2sKKwkgKiBmb3IgcXVldWVkIG1lc3NhZ2VzIGFmdGVyIGRyb3BwaW5nIHRoZSBzZW0gdGhlbiBlaXRoZXIgd2UnbGwKKwkgKiBzZWUgdGhlIHF1ZXVlZCBtZXNzYWdlIG9yIHRoZSBxdWV1ZXIgd2lsbCBnZXQgdGhlIHNlbS4gIElmIHdlCisJICogbm90aWNlIHRoZSBxdWV1ZWQgbWVzc2FnZSB0aGVuIHdlIHRyaWdnZXIgYW4gaW1tZWRpYXRlIHJldHJ5LgorCSAqCisJICogV2UgbmVlZCB0byBiZSBjYXJlZnVsIG9ubHkgdG8gZG8gdGhpcyB3aGVuIHdlIHN0b3BwZWQgcHJvY2Vzc2luZworCSAqIHRoZSBzZW5kIHF1ZXVlIGJlY2F1c2UgaXQgd2FzIGVtcHR5LiAgSXQncyB0aGUgb25seSB3YXkgd2UKKwkgKiBzdG9wIHByb2Nlc3NpbmcgdGhlIGxvb3Agd2hlbiB0aGUgdHJhbnNwb3J0IGhhc24ndCB0YWtlbgorCSAqIHJlc3BvbnNpYmlsaXR5IGZvciBmb3J3YXJkIHByb2dyZXNzLgorCSAqLworCW11dGV4X3VubG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCisJaWYgKGNvbm4tPmNfbWFwX2J5dGVzIHx8IChzZW5kX3F1b3RhID09IDAgJiYgIXdhc19lbXB0eSkpIHsKKwkJLyogV2UgZXhoYXVzdGVkIHRoZSBzZW5kIHF1b3RhLCBidXQgdGhlcmUncyB3b3JrIGxlZnQgdG8KKwkJICogZG8uIFJldHVybiBhbmQgKHJlLSlzY2hlZHVsZSB0aGUgc2VuZCB3b3JrZXIuCisJCSAqLworCQlyZXQgPSAtRUFHQUlOOworCX0KKworCWlmIChyZXQgPT0gMCAmJiB3YXNfZW1wdHkpIHsKKwkJLyogQSBzaW1wbGUgYml0IHRlc3Qgd291bGQgYmUgd2F5IGZhc3RlciB0aGFuIHRha2luZyB0aGUKKwkJICogc3BpbiBsb2NrICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZjb25uLT5jX3NlbmRfcXVldWUpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9zZW1fcXVldWVfcmFjZWQpOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX3NlbmRfc25kYnVmX3JlbW92ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZycy0+cnNfbG9jayk7CisKKwlCVUdfT04ocnMtPnJzX3NuZF9ieXRlcyA8IGxlbik7CisJcnMtPnJzX3NuZF9ieXRlcyAtPSBsZW47CisKKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA9PSAwKQorCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZV9lbXB0eSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19zZW5kX2lzX2Fja2VkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIHU2NCBhY2ssCisJCQkJICAgIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpCit7CisJaWYgKGlzX2Fja2VkKQorCQlyZXR1cm4gaXNfYWNrZWQocm0sIGFjayk7CisJcmV0dXJuIGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8PSBhY2s7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIG9uIHRoZSBzZW5kIGFuZCByZXRyYW5zbWl0IHF1ZXVlcworICogd2hpY2ggaGF2ZSBhIHNlcXVlbmNlIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHNlcXVlbmNlCisgKiBudW1iZXIuCisgKi8KK2ludCByZHNfc2VuZF9hY2tlZF9iZWZvcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgc2VxKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJaW50IHJldCA9IDE7CisKKwlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8IHNlcSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19zZW5kX3F1ZXVlLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpIDwgc2VxKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBwcmV0dHkgc2ltaWxhciB0byB3aGF0IGhhcHBlbnMgYmVsb3cgaW4gdGhlIEFDSworICogaGFuZGxpbmcgY29kZSAtIGV4Y2VwdCB0aGF0IHdlIGNhbGwgaGVyZSBhcyBzb29uIGFzIHdlIGdldAorICogdGhlIElCIHNlbmQgY29tcGxldGlvbiBvbiB0aGUgUkRNQSBvcCBhbmQgdGhlIGFjY29tcGFueWluZworICogbWVzc2FnZS4KKyAqLwordm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHJkc19yZG1hX29wICpybzsKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKworCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwlybyA9IHJtLT5tX3JkbWFfb3A7CisJaWYgKHRlc3RfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKQorCSAmJiBybyAmJiByby0+cl9ub3RpZnkgJiYgcm8tPnJfbm90aWZpZXIpIHsKKwkJbm90aWZpZXIgPSByby0+cl9ub3RpZmllcjsKKwkJcnMgPSBybS0+bV9yczsKKwkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworCisJCW5vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJm5vdGlmaWVyLT5uX2xpc3QsICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKworCQlyby0+cl9ub3RpZmllciA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCisJaWYgKHJzKSB7CisJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGV4Y2VwdCB3ZQorICogZG9uJ3QgZG8gYW55IGxvY2tpbmcgLSB3ZSBoYXZlIGFsbCB0aGUgaW5ncmVkaWVudHMgKG1lc3NhZ2UsCisgKiBzb2NrZXQsIHNvY2tldCBsb2NrKSBhbmQgY2FuIGp1c3QgbW92ZSB0aGUgbm90aWZpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19yZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHJkc19yZG1hX29wICpybzsKKworCXJvID0gcm0tPm1fcmRtYV9vcDsKKwlpZiAocm8gJiYgcm8tPnJfbm90aWZ5ICYmIHJvLT5yX25vdGlmaWVyKSB7CisJCXJvLT5yX25vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJbGlzdF9hZGRfdGFpbCgmcm8tPnJfbm90aWZpZXItPm5fbGlzdCwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlyby0+cl9ub3RpZmllciA9IE5VTEw7CisJfQorCisJLyogTm8gbmVlZCB0byB3YWtlIHRoZSBhcHAgLSBjYWxsZXIgZG9lcyB0aGlzICovCit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBJQiBzZW5kIGNvbXBsZXRpb24gd2hlbiB3ZSBkZXRlY3QKKyAqIGEgUkRNQSBvcGVyYXRpb24gdGhhdCBmYWlsZWQgd2l0aCByZW1vdGUgYWNjZXNzIGVycm9yLgorICogU28gc3BlZWQgaXMgbm90IGFuIGlzc3VlIGhlcmUuCisgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX3NlbmRfZ2V0X21lc3NhZ2Uoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCQkgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wLCAqZm91bmQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKHJtLT5tX3JkbWFfb3AgPT0gb3ApIHsKKwkJCWF0b21pY19pbmMoJnJtLT5tX3JlZmNvdW50KTsKKwkJCWZvdW5kID0gcm07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19zZW5kX3F1ZXVlLCBtX2Nvbm5faXRlbSkgeworCQlpZiAocm0tPm1fcmRtYV9vcCA9PSBvcCkgeworCQkJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOworCQkJZm91bmQgPSBybTsKKwkJCWJyZWFrOworCQl9CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBUaGlzIHJlbW92ZXMgbWVzc2FnZXMgZnJvbSB0aGUgc29ja2V0J3MgbGlzdCBpZiB0aGV5J3JlIG9uIGl0LiAgVGhlIGxpc3QKKyAqIGFyZ3VtZW50IG11c3QgYmUgcHJpdmF0ZSB0byB0aGUgY2FsbGVyLCB3ZSBtdXN0IGJlIGFibGUgdG8gbW9kaWZ5IGl0CisgKiB3aXRob3V0IGxvY2tzLiAgVGhlIG1lc3NhZ2VzIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSBoZWxkIGZvciB0aGVpcgorICogcG9zaXRpb24gb24gdGhlIGxpc3QuICBUaGlzIGZ1bmN0aW9uIHdpbGwgZHJvcCB0aGF0IHJlZmVyZW5jZSBhZnRlcgorICogcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIGZyb20gdGhlICdtZXNzYWdlcycgbGlzdCByZWdhcmRsZXNzIG9mIGlmIGl0IGZvdW5kCisgKiB0aGUgbWVzc2FnZXMgb24gdGhlIHNvY2tldCBsaXN0IG9yIG5vdC4KKyAqLwordm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOyAvKiBzaWxlbmNlIGdjYyA6UCAqLworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KG1lc3NhZ2VzKSkgeworCQlybSA9IGxpc3RfZW50cnkobWVzc2FnZXMtPm5leHQsIHN0cnVjdCByZHNfbWVzc2FnZSwKKwkJCQltX2Nvbm5faXRlbSk7CisJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisKKwkJLyoKKwkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQorCQkgKiBlbHNlIGJlYXQgdXMgdG8gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc29jay4gIElmIHdlIHJhY2UKKwkJICogd2l0aCB0aGVpciBmbGFnIHVwZGF0ZSB3ZSdsbCBnZXQgdGhlIGxvY2sgYW5kIHRoZW4gcmVhbGx5CisJCSAqIHNlZSB0aGF0IHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisJCSAqCisJCSAqIFRoZSBtZXNzYWdlIHNwaW5sb2NrIG1ha2VzIHN1cmUgbm9ib2R5IGNsZWFycyBybS0+bV9ycworCQkgKiB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdpdGggaXQuIEl0IGRvZXMgbm90IHByZXZlbnQgdGhlCisJCSAqIG1lc3NhZ2UgZnJvbSBiZWluZyByZW1vdmVkIGZyb20gdGhlIHNvY2tldCwgdGhvdWdoLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJaWYgKCF0ZXN0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykpCisJCQlnb3RvIHVubG9ja19hbmRfZHJvcDsKKworCQlpZiAocnMgIT0gcm0tPm1fcnMpIHsKKwkJCWlmIChycykgeworCQkJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJCQkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQkJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCQkJfQorCQkJcnMgPSBybS0+bV9yczsKKwkJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworCQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykpIHsKKwkJCXN0cnVjdCByZHNfcmRtYV9vcCAqcm8gPSBybS0+bV9yZG1hX29wOworCQkJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisKKwkJCWxpc3RfZGVsX2luaXQoJnJtLT5tX3NvY2tfaXRlbSk7CisJCQlyZHNfc2VuZF9zbmRidWZfcmVtb3ZlKHJzLCBybSk7CisKKwkJCWlmIChybyAmJiByby0+cl9ub3RpZmllcgorCQkJICAgJiYgKHN0YXR1cyB8fCByby0+cl9ub3RpZnkpKSB7CisJCQkJbm90aWZpZXIgPSByby0+cl9ub3RpZmllcjsKKwkJCQlsaXN0X2FkZF90YWlsKCZub3RpZmllci0+bl9saXN0LAorCQkJCQkJJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQkJCWlmICghbm90aWZpZXItPm5fc3RhdHVzKQorCQkJCQlub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCQkJcm0tPm1fcmRtYV9vcC0+cl9ub3RpZmllciA9IE5VTEw7CisJCQl9CisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJcm0tPm1fcnMgPSBOVUxMOworCQl9CisKK3VubG9ja19hbmRfZHJvcDoKKwkJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KKworCWlmIChycykgeworCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUcmFuc3BvcnRzIGNhbGwgaGVyZSB3aGVuIHRoZXkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZWNlaXZlciBxdWV1ZWQKKyAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlCisgKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmQKKyAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlbgorICogYXNzaWduZWQgdGhlIG1fYWNrX3NlcSB5ZXQgLSBidXQgdGhhdCdzIGZpbmUgYXMgbG9uZyBhcyB0Y3BfaXNfYWNrZWQKKyAqIGNoZWNrcyB0aGUgUkRTX01TR19IQVNfQUNLX1NFUSBiaXQuCisgKgorICogWFhYIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGhvdyB0aGlzIGlzIHNhZmVseSBzZXJpYWxpemVkIHdpdGggc29ja2V0CisgKiBkZXN0cnVjdGlvbi4gIE1heWJlIGl0IHNob3VsZCBiYWlsIGlmIGl0IHNlZXMgU09DS19ERUFELgorICovCit2b2lkIHJkc19zZW5kX2Ryb3BfYWNrZWQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgYWNrLAorCQkJIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoIXJkc19zZW5kX2lzX2Fja2VkKHJtLCBhY2ssIGlzX2Fja2VkKSkKKwkJCWJyZWFrOworCisJCWxpc3RfbW92ZSgmcm0tPm1fY29ubl9pdGVtLCAmbGlzdCk7CisJCWNsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJfQorCisJLyogb3JkZXIgZmxhZyB1cGRhdGVzIHdpdGggc3BpbiBsb2NrcyAqLworCWlmICghbGlzdF9lbXB0eSgmbGlzdCkpCisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCS8qIG5vdyByZW1vdmUgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIHNvY2sgbGlzdCBhcyBuZWVkZWQgKi8KKwlyZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKCZsaXN0LCBSRFNfUkRNQV9TVUNDRVNTKTsKK30KKwordm9pZCByZHNfc2VuZF9kcm9wX3RvKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrYWRkcl9pbiAqZGVzdCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKwlpbnQgd2FrZSA9IDA7CisKKwkvKiBnZXQgYWxsIHRoZSBtZXNzYWdlcyB3ZSdyZSBkcm9wcGluZyB1bmRlciB0aGUgcnMgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZycy0+cnNfc2VuZF9xdWV1ZSwgbV9zb2NrX2l0ZW0pIHsKKwkJaWYgKGRlc3QgJiYgKGRlc3QtPnNpbl9hZGRyLnNfYWRkciAhPSBybS0+bV9kYWRkciB8fAorCQkJICAgICBkZXN0LT5zaW5fcG9ydCAhPSBybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCkpCisJCQljb250aW51ZTsKKworCQl3YWtlID0gMTsKKwkJbGlzdF9tb3ZlKCZybS0+bV9zb2NrX2l0ZW0sICZsaXN0KTsKKwkJcmRzX3NlbmRfc25kYnVmX3JlbW92ZShycywgcm0pOworCQljbGVhcl9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpOworCisJCS8qIElmIHRoaXMgaXMgYSBSRE1BIG9wZXJhdGlvbiwgbm90aWZ5IHRoZSBhcHAuICovCisJCV9fcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShycywgcm0sIFJEU19SRE1BX0NBTkNFTEVEKTsKKwl9CisKKwkvKiBvcmRlciBmbGFnIHVwZGF0ZXMgd2l0aCB0aGUgcnMgbG9jayAqLworCWlmICh3YWtlKQorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCWlmICh3YWtlKQorCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisKKwljb25uID0gTlVMTDsKKworCS8qIG5vdyByZW1vdmUgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGNvbm4gbGlzdCBhcyBuZWVkZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCAmbGlzdCwgbV9zb2NrX2l0ZW0pIHsKKwkJLyogV2UgZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBsb29wIGFib3ZlLCBzbyB0aGF0CisJCSAqIHdlIGRvbid0IGhhdmUgdG8gbmVzdCBtX3JzX2xvY2sgdW5kZXIgcnMtPnJzX2xvY2sgKi8KKwkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJcm0tPm1fcnMgPSBOVUxMOworCQlzcGluX3VubG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwkJLyoKKwkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQorCQkgKiBlbHNlIGJlYXQgdXMgdG8gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY29ubi4gIElmIHdlIHJhY2UKKwkJICogd2l0aCB0aGVpciBmbGFnIHVwZGF0ZSB3ZSdsbCBnZXQgdGhlIGxvY2sgYW5kIHRoZW4gcmVhbGx5CisJCSAqIHNlZSB0aGF0IHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisJCSAqLworCQlpZiAoIXRlc3RfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb25uICE9IHJtLT5tX2luYy5pX2Nvbm4pIHsKKwkJCWlmIChjb25uKQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJY29ubiA9IHJtLT5tX2luYy5pX2Nvbm47CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fY29ubl9pdGVtKTsKKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCX0KKwl9CisKKwlpZiAoY29ubikKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CisJCXJtID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCByZHNfbWVzc2FnZSwgbV9zb2NrX2l0ZW0pOworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9zb2NrX2l0ZW0pOworCisJCXJkc19tZXNzYWdlX3dhaXQocm0pOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KK30KKworLyoKKyAqIHdlIG9ubHkgd2FudCB0aGlzIHRvIGZpcmUgb25jZSBzbyB3ZSB1c2UgdGhlIGNhbGxlcnMgJ3F1ZXVlZCcuICBJdCdzCisgKiBwb3NzaWJsZSB0aGF0IGFub3RoZXIgdGhyZWFkIGNhbiByYWNlIHdpdGggdXMgYW5kIHJlbW92ZSB0aGUKKyAqIG1lc3NhZ2UgZnJvbSB0aGUgZmxvdyB3aXRoIFJEU19DQU5DRUxfU0VOVF9UTy4KKyAqLworc3RhdGljIGludCByZHNfc2VuZF9xdWV1ZV9ybShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIF9fYmUxNiBzcG9ydCwKKwkJCSAgICAgX19iZTE2IGRwb3J0LCBpbnQgKnF1ZXVlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsZW47CisKKwlpZiAoKnF1ZXVlZCkKKwkJZ290byBvdXQ7CisKKwlsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJLyogdGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGljaCBob2xkcyBib3RoIHRoZSBzb2NrZXQncyByc19sb2NrCisJICogYW5kIHRoZSBjb25uZWN0aW9uJ3MgY19sb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgbGl0dGxlIHNwYWNlIGluIHNuZGJ1Ziwgd2UgZG9uJ3QgcXVldWUgYW55dGhpbmcsCisJICogYW5kIHVzZXJzcGFjZSBnZXRzIC1FQUdBSU4uIEJ1dCBwb2xsKCkgaW5kaWNhdGVzIHRoZXJlJ3Mgc2VuZAorCSAqIHJvb20uIFRoaXMgY2FuIGxlYWQgdG8gYmFkIGJlaGF2aW9yIChzcGlubmluZykgaWYgc25kX2J5dGVzIGlzbid0CisJICogZnJlZWQgdXAgYnkgaW5jb21pbmcgYWNrcy4gU28gd2UgY2hlY2sgdGhlICpvbGQqIHZhbHVlIG9mCisJICogcnNfc25kX2J5dGVzIGhlcmUgdG8gYWxsb3cgdGhlIGxhc3QgbXNnIHRvIGV4Y2VlZCB0aGUgYnVmZmVyLAorCSAqIGFuZCBwb2xsKCkgbm93IGtub3dzIG5vIG1vcmUgZGF0YSBjYW4gYmUgc2VudC4KKwkgKi8KKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA8IHJkc19za19zbmRidWYocnMpKSB7CisJCXJzLT5yc19zbmRfYnl0ZXMgKz0gbGVuOworCisJCS8qIGxldCByZWN2IHNpZGUga25vdyB3ZSBhcmUgY2xvc2UgdG8gc2VuZCBzcGFjZSBleGhhdXN0aW9uLgorCQkgKiBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgb3B0aW1hbCB3YXkgdG8gZG8gaXQsIGFzIHRoaXMKKwkJICogbWVhbnMgd2Ugc2V0IHRoZSBmbGFnIG9uICphbGwqIG1lc3NhZ2VzIGFzIHNvb24gYXMgb3VyCisJCSAqIHRocm91Z2hwdXQgaGl0cyBhIGNlcnRhaW4gdGhyZXNob2xkLgorCQkgKi8KKwkJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPj0gcmRzX3NrX3NuZGJ1ZihycykgLyAyKQorCQkJX19zZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCisJCWxpc3RfYWRkX3RhaWwoJnJtLT5tX3NvY2tfaXRlbSwgJnJzLT5yc19zZW5kX3F1ZXVlKTsKKwkJc2V0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncyk7CisJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJCXJtLT5tX3JzID0gcnM7CisKKwkJLyogVGhlIGNvZGUgb3JkZXJpbmcgaXMgYSBsaXR0bGUgd2VpcmQsIGJ1dCB3ZSdyZQorCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KKwkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZybS0+bV9pbmMuaV9oZHIsIHNwb3J0LCBkcG9ydCwgMCk7CisJCXJtLT5tX2luYy5pX2Nvbm4gPSBjb25uOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCisJCXNwaW5fbG9jaygmY29ubi0+Y19sb2NrKTsKKwkJcm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChjb25uLT5jX25leHRfdHhfc2VxKyspOworCQlsaXN0X2FkZF90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3NlbmRfcXVldWUpOworCQlzZXRfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisKKwkJcmRzZGVidWcoInF1ZXVlZCBtc2cgJXAgbGVuICVkLCBycyAlcCBieXRlcyAlZCBzZXEgJWxsdVxuIiwKKwkJCSBybSwgbGVuLCBycywgcnMtPnJzX3NuZF9ieXRlcywKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSk7CisKKwkJKnF1ZXVlZCA9IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gKnF1ZXVlZDsKK30KKworc3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmFsbG9jYXRlZF9tcikKK3sKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsgY21zZzsgY21zZyA9IENNU0dfTlhUSERSKG1zZywgY21zZykpIHsKKwkJaWYgKCFDTVNHX09LKG1zZywgY21zZykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY21zZy0+Y21zZ19sZXZlbCAhPSBTT0xfUkRTKQorCQkJY29udGludWU7CisKKwkJLyogQXMgYSBzaWRlIGVmZmVjdCwgUkRNQV9ERVNUIGFuZCBSRE1BX01BUCB3aWxsIHNldAorCQkgKiBybS0+bV9yZG1hX2Nvb2tpZSBhbmQgcm0tPm1fcmRtYV9tci4KKwkJICovCisJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCWNhc2UgUkRTX0NNU0dfUkRNQV9BUkdTOgorCQkJcmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZyk7CisJCQlicmVhazsKKworCQljYXNlIFJEU19DTVNHX1JETUFfREVTVDoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfZGVzdChycywgcm0sIGNtc2cpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRFNfQ01TR19SRE1BX01BUDoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfbWFwKHJzLCBybSwgY21zZyk7CisJCQlpZiAoIXJldCkKKwkJCQkqYWxsb2NhdGVkX21yID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBwYXlsb2FkX2xlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKKwlfX2JlMzIgZGFkZHI7CisJX19iZTE2IGRwb3J0OworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcXVldWVkID0gMCwgYWxsb2NhdGVkX21yID0gMDsKKwlpbnQgbm9uYmxvY2sgPSBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVDsKKwlsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spOworCisJLyogTWlycm9yIExpbnV4IFVEUCBtaXJyb3Igb2YgQlNEIGVycm9yIG1lc3NhZ2UgY29tcGF0aWJpbGl0eSAqLworCS8qIFhYWDogUGVyaGFwcyBNU0dfTU9SRSBzb21lZGF5ICovCisJaWYgKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVQgfCBNU0dfQ01TR19DT01QQVQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zZ19mbGFncyAweCUwOFhcbiIsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtc2ctPm1zZ19uYW1lbGVuKSB7CisJCS8qIFhYWCBmYWlsIG5vbi11bmljYXN0IGRlc3RpbmF0aW9uIElQcz8gKi8KKwkJaWYgKG1zZy0+bXNnX25hbWVsZW4gPCBzaXplb2YoKnVzaW4pIHx8IHVzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRhZGRyID0gdXNpbi0+c2luX2FkZHIuc19hZGRyOworCQlkcG9ydCA9IHVzaW4tPnNpbl9wb3J0OworCX0gZWxzZSB7CisJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCBjb25zaXN0ZW5jeSB3aXRoIC0+Y29ubmVjdCgpICovCisJCWxvY2tfc29jayhzayk7CisJCWRhZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwkJZHBvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlyZWxlYXNlX3NvY2soc2spOworCX0KKworCS8qIHJhY2luZyB3aXRoIGFub3RoZXIgdGhyZWFkIGJpbmRpbmcgc2VlbXMgb2sgaGVyZSAqLworCWlmIChkYWRkciA9PSAwIHx8IHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJcm0gPSByZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihtc2ctPm1zZ19pb3YsIHBheWxvYWRfbGVuKTsKKwlpZiAoSVNfRVJSKHJtKSkgeworCQlyZXQgPSBQVFJfRVJSKHJtKTsKKwkJcm0gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9kYWRkciA9IGRhZGRyOworCisJLyogUGFyc2UgYW55IGNvbnRyb2wgbWVzc2FnZXMgdGhlIHVzZXIgbWF5IGhhdmUgaW5jbHVkZWQuICovCisJcmV0ID0gcmRzX2Ntc2dfc2VuZChycywgcm0sIG1zZywgJmFsbG9jYXRlZF9tcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KKwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCisJaWYgKHJzLT5yc19jb25uICYmIHJzLT5yc19jb25uLT5jX2ZhZGRyID09IGRhZGRyKQorCQljb25uID0gcnMtPnJzX2Nvbm47CisJZWxzZSB7CisJCWNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcocnMtPnJzX2JvdW5kX2FkZHIsIGRhZGRyLAorCQkJCQlycy0+cnNfdHJhbnNwb3J0LAorCQkJCQlzb2NrLT5zay0+c2tfYWxsb2NhdGlvbik7CisJCWlmIChJU19FUlIoY29ubikpIHsKKwkJCXJldCA9IFBUUl9FUlIoY29ubik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlycy0+cnNfY29ubiA9IGNvbm47CisJfQorCisJaWYgKChybS0+bV9yZG1hX2Nvb2tpZSB8fCBybS0+bV9yZG1hX29wKQorCSAmJiBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJyZG1hX29wICVwIGNvbm4geG1pdF9yZG1hICVwXG4iLAorCQkJCXJtLT5tX3JkbWFfb3AsIGNvbm4tPmNfdHJhbnMtPnhtaXRfcmRtYSk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5CisJICogaGF2ZSBzY2hlZHVsZWQgYSBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlCisJICogd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuCisJICovCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RPV04KKwkgJiYgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisKKwlyZXQgPSByZHNfY29uZ193YWl0KGNvbm4tPmNfZmNvbmcsIGRwb3J0LCBub25ibG9jaywgcnMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKCFyZHNfc2VuZF9xdWV1ZV9ybShycywgY29ubiwgcm0sIHJzLT5yc19ib3VuZF9wb3J0LAorCQkJCSAgZHBvcnQsICZxdWV1ZWQpKSB7CisJCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlX2Z1bGwpOworCQkvKiBYWFggbWFrZSBzdXJlIHRoaXMgaXMgcmVhc29uYWJsZSAqLworCQlpZiAocGF5bG9hZF9sZW4gPiByZHNfc2tfc25kYnVmKHJzKSkgeworCQkJcmV0ID0gLUVNU0dTSVpFOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKG5vbmJsb2NrKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKworCQl0aW1lbyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpzay0+c2tfc2xlZXAsCisJCQkJCXJkc19zZW5kX3F1ZXVlX3JtKHJzLCBjb25uLCBybSwKKwkJCQkJCQkgIHJzLT5yc19ib3VuZF9wb3J0LAorCQkJCQkJCSAgZHBvcnQsCisJCQkJCQkJICAmcXVldWVkKSwKKwkJCQkJdGltZW8pOworCQlyZHNkZWJ1Zygic2VuZG1zZyB3b2tlIHF1ZXVlZCAlZCB0aW1lbyAlbGRcbiIsIHF1ZXVlZCwgdGltZW8pOworCQlpZiAodGltZW8gPiAwIHx8IHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdGltZW87CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQnkgbm93IHdlJ3ZlIGNvbW1pdHRlZCB0byB0aGUgc2VuZC4gIFdlIHJldXNlIHJkc19zZW5kX3dvcmtlcigpCisJICogdG8gcmV0cnkgc2VuZHMgaW4gdGhlIHJkcyB0aHJlYWQgaWYgdGhlIHRyYW5zcG9ydCBhc2tzIHVzIHRvLgorCSAqLworCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlZCk7CisKKwlpZiAoIXRlc3RfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSkKKwkJcmRzX3NlbmRfd29ya2VyKCZjb25uLT5jX3NlbmRfdy53b3JrKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHBheWxvYWRfbGVuOworCitvdXQ6CisJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgorCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCisJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLworCWlmIChhbGxvY2F0ZWRfbXIpCisJCXJkc19yZG1hX3VudXNlKHJzLCByZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKSwgMSk7CisKKwlpZiAocm0pCisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlcGx5IHRvIGEgcGluZyBwYWNrZXQuCisgKi8KK2ludAorcmRzX3NlbmRfcG9uZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUxNiBkcG9ydCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKDAsIEdGUF9BVE9NSUMpOworCWlmIChybSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJtLT5tX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKworCS8qIElmIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRyaWdnZXIgYSBjb25uZWN0LiBXZSBtYXkKKwkgKiBoYXZlIHNjaGVkdWxlZCBhIGRlbGF5ZWQgcmVjb25uZWN0IGhvd2V2ZXIgLSBpbiB0aGlzIGNhc2UKKwkgKiB3ZSBzaG91bGQgbm90IGludGVyZmVyZS4KKwkgKi8KKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fRE9XTgorCSAmJiAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKworCXJldCA9IHJkc19jb25nX3dhaXQoY29ubi0+Y19mY29uZywgZHBvcnQsIDEsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJtLT5tX2Nvbm5faXRlbSwgJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJc2V0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwlybS0+bV9pbmMuaV9jb25uID0gY29ubjsKKworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcigmcm0tPm1faW5jLmlfaGRyLCAwLCBkcG9ydCwKKwkJCQkgICAgY29ubi0+Y19uZXh0X3R4X3NlcSk7CisJY29ubi0+Y19uZXh0X3R4X3NlcSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVkKTsKKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9wb25nKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChybSkKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zdGF0cy5jIGIvbmV0L3Jkcy9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzE0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3N0YXRzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCByZHNfc3RhdGlzdGljcywgcmRzX3N0YXRzKTsKKworLyogOi4sJHMvdW5zaWduZWQgbG9uZ1w+LipcPHNfXCguKlwpOy8iXDEiLC9nICovCisKK3N0YXRpYyBjaGFyICpyZHNfc3RhdF9uYW1lc1tdID0geworCSJjb25uX3Jlc2V0IiwKKwkicmVjdl9kcm9wX2JhZF9jaGVja3N1bSIsCisJInJlY3ZfZHJvcF9vbGRfc2VxIiwKKwkicmVjdl9kcm9wX25vX3NvY2siLAorCSJyZWN2X2Ryb3BfZGVhZF9zb2NrIiwKKwkicmVjdl9kZWxpdmVyX3JhY2VkIiwKKwkicmVjdl9kZWxpdmVyZWQiLAorCSJyZWN2X3F1ZXVlZCIsCisJInJlY3ZfaW1tZWRpYXRlX3JldHJ5IiwKKwkicmVjdl9kZWxheWVkX3JldHJ5IiwKKwkicmVjdl9hY2tfcmVxdWlyZWQiLAorCSJyZWN2X3JkbWFfYnl0ZXMiLAorCSJyZWN2X3BpbmciLAorCSJzZW5kX3F1ZXVlX2VtcHR5IiwKKwkic2VuZF9xdWV1ZV9mdWxsIiwKKwkic2VuZF9zZW1fY29udGVudGlvbiIsCisJInNlbmRfc2VtX3F1ZXVlX3JhY2VkIiwKKwkic2VuZF9pbW1lZGlhdGVfcmV0cnkiLAorCSJzZW5kX2RlbGF5ZWRfcmV0cnkiLAorCSJzZW5kX2Ryb3BfYWNrZWQiLAorCSJzZW5kX2Fja19yZXF1aXJlZCIsCisJInNlbmRfcXVldWVkIiwKKwkic2VuZF9yZG1hIiwKKwkic2VuZF9yZG1hX2J5dGVzIiwKKwkic2VuZF9wb25nIiwKKwkicGFnZV9yZW1haW5kZXJfaGl0IiwKKwkicGFnZV9yZW1haW5kZXJfbWlzcyIsCisJImNvcHlfdG9fdXNlciIsCisJImNvcHlfZnJvbV91c2VyIiwKKwkiY29uZ191cGRhdGVfcXVldWVkIiwKKwkiY29uZ191cGRhdGVfcmVjZWl2ZWQiLAorCSJjb25nX3NlbmRfZXJyb3IiLAorCSJjb25nX3NlbmRfYmxvY2tlZCIsCit9OworCit2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKQoreworCXN0cnVjdCByZHNfaW5mb19jb3VudGVyIGN0cjsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCUJVR19PTihzdHJsZW4obmFtZXNbaV0pID49IHNpemVvZihjdHIubmFtZSkpOworCQlzdHJuY3B5KGN0ci5uYW1lLCBuYW1lc1tpXSwgc2l6ZW9mKGN0ci5uYW1lKSAtIDEpOworCQljdHIudmFsdWUgPSB2YWx1ZXNbaV07CisKKwkJcmRzX2luZm9fY29weShpdGVyLCAmY3RyLCBzaXplb2YoY3RyKSk7CisJfQorfQorCisvKgorICogVGhpcyBnaXZlcyBnbG9iYWwgY291bnRlcnMgYWNyb3NzIGFsbCB0aGUgdHJhbnNwb3J0cy4gIFRoZSBzdHJpbmdzCisgKiBhcmUgY29waWVkIGluIHNvIHRoYXQgdGhlIHRvb2wgZG9lc24ndCBuZWVkIGtub3dsZWRnZSBvZiB0aGUgc3BlY2lmaWMKKyAqIHN0YXRzIHRoYXQgd2UncmUgZXhwb3J0aW5nLiAgU29tZSBhcmUgcHJldHR5IGltcGxlbWVudGF0aW9uIGRlcGVuZGVudAorICogYW5kIG1heSBjaGFuZ2Ugb3ZlciB0aW1lLiAgVGhhdCBkb2Vzbid0IHN0b3AgdGhlbSBmcm9tIGJlaW5nIHVzZWZ1bC4KKyAqCisgKiBUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGtub3dzIGFib3V0IHRoZSBieXRlIGdyYW51bGFyCisgKiBsZW5ndGggaW4gdXNlcnNwYWNlLiAgSXQgY29udmVydHMgaXQgdG8gbnVtYmVyIG9mIHN0YXQgZW50cmllcyB0aGF0IHRoZQorICogcmVzdCBvZiB0aGUgZnVuY3Rpb25zIG9wZXJhdGUgaW4uCisgKi8KK3N0YXRpYyB2b2lkIHJkc19zdGF0c19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgYXZhaWw7CisKKwlhdmFpbCA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY291bnRlcik7CisKKwlpZiAoYXZhaWwgPCBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKSkgeworCQlhdmFpbCA9IDA7CisJCWdvdG8gdHJhbnM7CisJfQorCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcykpOworCWF2YWlsIC09IEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpOworCit0cmFuczoKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19jb3VudGVyKTsKKwlsZW5zLT5uciA9IHJkc190cmFuc19zdGF0c19pbmZvX2NvcHkoaXRlciwgYXZhaWwpICsKKwkJICAgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcyk7Cit9CisKK3ZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09VTlRFUlMsIHJkc19zdGF0c19pbmZvKTsKK30KKworaW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKQoreworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09VTlRFUlMsIHJkc19zdGF0c19pbmZvKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvc3lzY3RsLmMgYi9uZXQvcmRzL3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2RjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3N5c2N0bC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfc3lzY3RsX3JlZ190YWJsZTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7Cit1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzID0gSFo7CisKK3Vuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzID0gODsKK3Vuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlcyA9ICgxNiA8PCAyMCk7CisKK3Vuc2lnbmVkIGludCByZHNfc3lzY3RsX3BpbmdfZW5hYmxlID0gMTsKKworc3RhdGljIGN0bF90YWJsZSByZHNfc3lzY3RsX3Jkc190YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJyZWNvbm5lY3RfbWluX2RlbGF5X21zIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAicmVjb25uZWN0X21heF9kZWxheV9tcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllcywKKwkJLmV4dHJhMgkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX3BhY2tldHMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAicGluZ19lbmFibGUiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9waW5nX2VuYWJsZSwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKGludCksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKworCit2b2lkIHJkc19zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfc3lzY3RsX3JlZ190YWJsZSkKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX3N5c2N0bF9yZWdfdGFibGUpOworfQorCitpbnQgX19pbml0IHJkc19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19zeXNjdGxfcmVjb25uZWN0X21pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CisJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXMgPSByZHNfc3lzY3RsX3JlY29ubmVjdF9taW47CisKKwlyZHNfc3lzY3RsX3JlZ190YWJsZSA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhyZHNfc3lzY3RsX3BhdGgsIHJkc19zeXNjdGxfcmRzX3RhYmxlKTsKKwlpZiAocmRzX3N5c2N0bF9yZWdfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RocmVhZHMuYyBiL25ldC9yZHMvdGhyZWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGExYmYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RocmVhZHMuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIEFsbCBvZiBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaXMgc2ltcGxpZmllZCBieSBzZXJpYWxpemluZyBpdCB0aHJvdWdoCisgKiB3b3JrIHF1ZXVlcyB0aGF0IGV4ZWN1dGUgaW4gYSBjb25uZWN0aW9uIG1hbmFnaW5nIHRocmVhZC4KKyAqCisgKiBUQ1Agd2FudHMgdG8gc2VuZCBhY2tzIHRocm91Z2ggc2VuZHBhZ2UoKSBpbiByZXNwb25zZSB0byBkYXRhX3JlYWR5KCksCisgKiBidXQgaXQgbmVlZHMgYSBwcm9jZXNzIGNvbnRleHQgdG8gZG8gc28uCisgKgorICogVGhlIHJlY2VpdmUgcGF0aHMgbmVlZCB0byBhbGxvY2F0ZSBidXQgY2FuJ3QgZHJvcCBwYWNrZXRzICghKSBzbyB3ZSBoYXZlCisgKiBhIHRocmVhZCBhcm91bmQgdG8gYmxvY2sgYWxsb2NhdGluZyBpZiB0aGUgcmVjZWl2ZSBmYXN0IHBhdGggc2VlcyBhbgorICogYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCisKKy8qIEdyYW5kIFVuaWZpZWQgVGhlb3J5IG9mIGNvbm5lY3Rpb24gbGlmZSBjeWNsZToKKyAqIEF0IGFueSBwb2ludCBpbiB0aW1lLCB0aGUgY29ubmVjdGlvbiBjYW4gYmUgaW4gb25lIG9mIHRoZXNlIHN0YXRlczoKKyAqIERPV04sIENPTk5FQ1RJTkcsIFVQLCBESVNDT05ORUNUSU5HLCBFUlJPUgorICoKKyAqIFRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIHBvc3NpYmxlOgorICogIEFOWQkJICAtPiBFUlJPUgorICogIFVQCQkgIC0+IERJU0NPTk5FQ1RJTkcKKyAqICBFUlJPUgkgIC0+IERJU0NPTk5FQ1RJTkcKKyAqICBESVNDT05ORUNUSU5HIC0+IERPV04KKyAqICBET1dOCSAgLT4gQ09OTkVDVElORworICogIENPTk5FQ1RJTkcJICAtPiBVUAorICoKKyAqIFRyYW5zaXRpb24gdG8gc3RhdGUgRElTQ09OTkVDVElORy9ET1dOOgorICogIC0JSW5zaWRlIHRoZSBzaHV0ZG93biB3b3JrZXI7IHN5bmNocm9uaXplcyB3aXRoIHhtaXQgcGF0aAorICoJdGhyb3VnaCBjX3NlbmRfbG9jaywgYW5kIHdpdGggY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNhbGxiYWNrcworICoJdmlhIGNfY21fbG9jay4KKyAqCisgKglGb3IgcmVjZWl2ZSBjYWxsYmFja3MsIHdlIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0CisgKgkoVENQLCBJQi9SRE1BKSB0byBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgc3luY2hyb25pc2F0aW9uLgorICovCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX3dxOworCit2b2lkIHJkc19jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fQ09OTkVDVElORywgUkRTX0NPTk5fVVApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgdHJhbnNpdGlvbiB0byBzdGF0ZSBVUCwgIgorCQkJCSJjdXJyZW50IHN0YXRlIGlzICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwkJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7CisJCXJldHVybjsKKwl9CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IGNvbXBsZXRlXG4iLAorCSAgY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKKworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSAwOworCXNldF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCk7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCisvKgorICogVGhpcyByYW5kb20gZXhwb25lbnRpYWwgYmFja29mZiBpcyByZWxpZWQgb24gdG8gZXZlbnR1YWxseSByZXNvbHZlIHJhY2luZworICogY29ubmVjdHMuCisgKgorICogSWYgY29ubmVjdCBhdHRlbXB0cyByYWNlIHRoZW4gYm90aCBwYXJ0aWVzIGRyb3AgYm90aCBjb25uZWN0aW9ucyBhbmQgY29tZQorICogaGVyZSB0byB3YWl0IGZvciBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdHJ5aW5nIGFnYWluLiAgRXZlbnR1YWxseQorICogdGhlIGJhY2tvZmYgcmFuZ2Ugd2lsbCBiZSBzbyBtdWNoIGdyZWF0ZXIgdGhhbiB0aGUgdGltZSBpdCB0YWtlcyB0bworICogZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0aGF0IG9uZSBvZiB0aGUgcGFpciB3aWxsIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbgorICogYmVmb3JlIHRoZSBvdGhlcidzIHJhbmRvbSBkZWxheSBmaXJlcy4KKyAqCisgKiBDb25uZWN0aW9uIGF0dGVtcHRzIHRoYXQgYXJyaXZlIHdoaWxlIGEgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGVzdGFibGlzaGVkCisgKiBhcmUgYWxzbyBjb25zaWRlcmVkIHRvIGJlIHJhY2luZyBjb25uZWN0cy4gIFRoaXMgbGV0cyBhIGNvbm5lY3Rpb24gZnJvbQorICogYSByZWJvb3RlZCBtYWNoaW5lIHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3RhbGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHRyYW5zcG9ydAorICogbm90aWNlcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBmYWlsZWQuCisgKgorICogV2Ugc2hvdWxkICphbHdheXMqIHN0YXJ0IHdpdGggYSByYW5kb20gYmFja29mZjsgb3RoZXJ3aXNlIGEgYnJva2VuIGNvbm5lY3Rpb24KKyAqIHdpbGwgYWx3YXlzIHRha2Ugc2V2ZXJhbCBpdGVyYXRpb25zIHRvIGJlIHJlLWVzdGFibGlzaGVkLgorICovCitzdGF0aWMgdm9pZCByZHNfcXVldWVfcmVjb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIHJhbmQ7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IHJlY29ubmVjdCBqaWZmaWVzICVsdVxuIiwKKwkgIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkciwKKwkgIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMpOworCisJc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKTsKKwlpZiAoY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9PSAwKSB7CisJCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSByZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllczsKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKwkJcmV0dXJuOworCX0KKworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmQsIHNpemVvZihyYW5kKSk7CisJcmRzZGVidWcoIiVsdSBkZWxheSAlbHUgY2VpbCBjb25uICVwIGZvciAlcEk0IC0+ICVwSTRcbiIsCisJCSByYW5kICUgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcywgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcywKKwkJIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LAorCQkJICAgcmFuZCAlIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMpOworCisJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IG1pbihjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzICogMiwKKwkJCQkJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMpOworfQorCit2b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfY29ubmVjdGlvbiwgY19jb25uX3cud29yayk7CisJaW50IHJldDsKKworCWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKTsKKwlpZiAocmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlyZXQgPSBjb25uLT5jX3RyYW5zLT5jb25uX2Nvbm5lY3QoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIGZvciAlcEk0IHRvICVwSTQgZGlzcGF0Y2hlZCwgcmV0ICVkXG4iLAorCQkJY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCisJCWlmIChyZXQpIHsKKwkJCWlmIChyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0NPTk5FQ1RJTkcsIFJEU19DT05OX0RPV04pKQorCQkJCXJkc19xdWV1ZV9yZWNvbm5lY3QoY29ubik7CisJCQllbHNlCisJCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwgIlJEUzogY29ubmVjdCBmYWlsZWRcbiIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19zaHV0ZG93bl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfZG93bl93KTsKKworCS8qIHNodXQgaXQgZG93biB1bmxlc3MgaXQncyBkb3duIGFscmVhZHkgKi8KKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fRE9XTikpIHsKKwkJLyoKKwkJICogUXVpZXNjZSB0aGUgY29ubmVjdGlvbiBtZ210IGhhbmRsZXJzIGJlZm9yZSB3ZSBzdGFydCB0ZWFyaW5nCisJCSAqIHRoaW5ncyBkb3duLiBXZSBkb24ndCBob2xkIHRoZSBtdXRleCBmb3IgdGhlIGVudGlyZQorCQkgKiBkdXJhdGlvbiBvZiB0aGUgc2h1dGRvd24gb3BlcmF0aW9uLCBlbHNlIHdlIG1heSBiZQorCQkgKiBkZWFkbG9ja2luZyB3aXRoIHRoZSBDTSBoYW5kbGVyLiBJbnN0ZWFkLCB0aGUgQ00gZXZlbnQKKwkJICogaGFuZGxlciBpcyBzdXBwb3NlZCB0byBjaGVjayBmb3Igc3RhdGUgRElTQ09OTkVDVElORworCQkgKi8KKwkJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX1VQLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKQorCQkgJiYgIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRVJST1IsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpKSB7CisJCQlyZHNfY29ubl9lcnJvcihjb25uLCAic2h1dGRvd24gY2FsbGVkIGluIHN0YXRlICVkXG4iLAorCQkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQkJcmV0dXJuOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCQltdXRleF9sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisJCWNvbm4tPmNfdHJhbnMtPmNvbm5fc2h1dGRvd24oY29ubik7CisJCXJkc19jb25uX3Jlc2V0KGNvbm4pOworCQltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCQlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRElTQ09OTkVDVElORywgUkRTX0NPTk5fRE9XTikpIHsKKwkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nCisJCQkgKiBkb3duIHRoZSBjb25uZWN0aW9uLCBhbmQgc29tZW9uZSB1bmxvYWRzIHRoZSByZHMgbW9kdWxlLgorCQkJICogUXVpdGUgcmVwcm9kdWNlYWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgorCQkJICogTW9zdGx5IGhhcm1sZXNzLgorCQkJICovCisJCQlyZHNfY29ubl9lcnJvcihjb25uLAorCQkJCSIlczogZmFpbGVkIHRvIHRyYW5zaXRpb24gdG8gc3RhdGUgRE9XTiwgIgorCQkJCSJjdXJyZW50IHN0YXRlIGlzICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBUaGVuIHJlY29ubmVjdCBpZiBpdCdzIHN0aWxsIGxpdmUuCisJICogVGhlIHBhc3NpdmUgc2lkZSBvZiBhbiBJQiBsb29wYmFjayBjb25uZWN0aW9uIGlzIG5ldmVyIGFkZGVkCisJICogdG8gdGhlIGNvbm4gaGFzaCwgc28gd2UgbmV2ZXIgdHJpZ2dlciBhIHJlY29ubmVjdCBvbiB0aGlzCisJICogY29ubiAtIHRoZSByZWNvbm5lY3QgaXMgYWx3YXlzIHRyaWdnZXJlZCBieSB0aGUgYWN0aXZlIHBlZXIuICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29ubi0+Y19jb25uX3cpOworCWlmICghaGxpc3RfdW5oYXNoZWQoJmNvbm4tPmNfaGFzaF9ub2RlKSkKKwkJcmRzX3F1ZXVlX3JlY29ubmVjdChjb25uKTsKK30KKwordm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfc2VuZF93LndvcmspOworCWludCByZXQ7CisKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJcmV0ID0gcmRzX3NlbmRfeG1pdChjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgcmV0ICVkXG4iLCBjb25uLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FQUdBSU46CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9pbW1lZGlhdGVfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9kZWxheWVkX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMik7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfcmVjdl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfcmVjdl93LndvcmspOworCWludCByZXQ7CisKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJcmV0ID0gY29ubi0+Y190cmFucy0+cmVjdihjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgcmV0ICVkXG4iLCBjb25uLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FQUdBSU46CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9pbW1lZGlhdGVfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxheWVkX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMik7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfdGhyZWFkc19leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUocmRzX3dxKTsKK30KKworaW50IF9faW5pdCByZHNfdGhyZWFkc19pbml0KHZvaWQpCit7CisJcmRzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtyZHNkIik7CisJaWYgKHJkc193cSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90cmFuc3BvcnQuYyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3ZGE2MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQocmRzX3RyYW5zcG9ydHMpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocmRzX3RyYW5zX3NlbSk7CisKK2ludCByZHNfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCUJVR19PTihzdHJsZW4odHJhbnMtPnRfbmFtZSkgKyAxID4gVFJBTlNOQU1TSVopOworCisJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2FkZF90YWlsKCZ0cmFucy0+dF9pdGVtLCAmcmRzX3RyYW5zcG9ydHMpOworCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisKKwl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2RlbF9pbml0KCZ0cmFucy0+dF9pdGVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJVbnJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisKKwl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0ICpyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnJldCA9IE5VTEw7CisKKwlpZiAoSU5fTE9PUEJBQ0sobnRvaGwoYWRkcikpKQorCQlyZXR1cm4gJnJkc19sb29wX3RyYW5zcG9ydDsKKworCWRvd25fcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKKwkJaWYgKHRyYW5zLT5sYWRkcl9jaGVjayhhZGRyKSA9PSAwKSB7CisJCQlyZXQgPSB0cmFuczsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0YXRzIGVudHJpZXMgaW4gdGhlIHNuYXBzaG90IGFuZCBvbmx5CisgKiBjb3BpZXMgdGhlbSB1c2luZyB0aGUgaXRlciBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZW0uICBUaGUKKyAqIGNhbGxlciBwYXNzZXMgaW4gdGhlIGdsb2JhbCBzdGF0cyBzbyB0aGF0IHdlIGNhbiBzaXplIGFuZCBjb3B5IHdoaWxlCisgKiBob2xkaW5nIHRoZSBsb2NrLgorICovCit1bnNpZ25lZCBpbnQgcmRzX3RyYW5zX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBhdmFpbCkKKworeworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCXVuc2lnbmVkIGludCBwYXJ0OworCisJcmRzX2luZm9faXRlcl91bm1hcChpdGVyKTsKKwlkb3duX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKKwkJaWYgKHRyYW5zLT5zdGF0c19pbmZvX2NvcHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXBhcnQgPSB0cmFucy0+c3RhdHNfaW5mb19jb3B5KGl0ZXIsIGF2YWlsKTsKKwkJYXZhaWwgLT0gbWluKGF2YWlsLCBwYXJ0KTsKKwkJdG90YWwgKz0gcGFydDsKKwl9CisKKwl1cF9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCXJldHVybiB0b3RhbDsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2UvYWZfcm9zZS5jIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCmluZGV4IDAxMzkyNjQuLjBmMzZlOGQgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL2FmX3Jvc2UuYworKysgYi9uZXQvcm9zZS9hZl9yb3NlLmMKQEAgLTExMjQsNiArMTEyNCwxMCBAQAogCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KIAlTT0NLX0RFQlVHKHNrLCAiUk9TRTogc2VuZHRvOiBidWlsZGluZyBwYWNrZXQuXG4iKTsKKwkvKiBTYW5pdHkgY2hlY2sgdGhlIHBhY2tldCBzaXplICovCisJaWYgKGxlbiA+IDY1NTM1KQorCQlyZXR1cm4gLUVNU0dTSVpFOworCiAJc2l6ZSA9IGxlbiArIEFYMjVfQlBRX0hFQURFUl9MRU4gKyBBWDI1X01BWF9IRUFERVJfTEVOICsgUk9TRV9NSU5fTEVOOwogCiAJaWYgKChza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBzaXplLCBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycikpID09IE5VTEwpCkBAIC0xNTg3LDggKzE1OTEsNyBAQAogCQljaGFyIG5hbWVbSUZOQU1TSVpdOwogCiAJCXNwcmludGYobmFtZSwgInJvc2UlZCIsIGkpOwotCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSwKLQkJCQkgICBuYW1lLCByb3NlX3NldHVwKTsKKwkJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsIG5hbWUsIHJvc2Vfc2V0dXApOwogCQlpZiAoIWRldikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJST1NFOiByb3NlX3Byb3RvX2luaXQgLSB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKIAkJCXJjID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2VfZGV2LmMgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCmluZGV4IDEyY2ZjZjAuLjdkY2YyNTYgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2VfZGV2LmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwpAQCAtNTcsNyArNTcsNyBAQAogewogI2lmZGVmIENPTkZJR19JTkVUCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tibjsKIAl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIHN0YXRpYyBpbnQgcm9zZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUk9TRTogcm9zZV94bWl0IC0gY2FsbGVkIHdoZW4gaWZhY2UgaXMgZG93blxuIik7CkBAIC0xNDQsMzAgKzE0NCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJvc2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIG5ldGRldl9wcml2KGRldik7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyByb3NlX2hlYWRlcl9vcHMgPSB7CiAJLmNyZWF0ZQk9IHJvc2VfaGVhZGVyLAogCS5yZWJ1aWxkPSByb3NlX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByb3NlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHJvc2Vfb3BlbiwKKwkubmRvX3N0b3AJCT0gcm9zZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcm9zZV94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gcm9zZV9zZXRfbWFjX2FkZHJlc3MsCit9OworCiB2b2lkIHJvc2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm10dQkJPSBST1NFX01BWF9QQUNLRVRfU0laRSAtIDI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSByb3NlX3htaXQ7Ci0JZGV2LT5vcGVuCQk9IHJvc2Vfb3BlbjsKLQlkZXYtPnN0b3AJCT0gcm9zZV9jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJnJvc2VfbmV0ZGV2X29wczsKIAogCWRldi0+aGVhZGVyX29wcwkJPSAmcm9zZV9oZWFkZXJfb3BzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gQVgyNV9CUFFfSEVBREVSX0xFTiArIEFYMjVfTUFYX0hFQURFUl9MRU4gKyBST1NFX01JTl9MRU47CiAJZGV2LT5hZGRyX2xlbgkJPSBST1NFX0FERFJfTEVOOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfUk9TRTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IHJvc2Vfc2V0X21hY19hZGRyZXNzOwogCiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOwotCWRldi0+Z2V0X3N0YXRzID0gcm9zZV9nZXRfc3RhdHM7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCAwZmM0YTE4Li4zMjAwOTc5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTQ0NCw2ICs0NDQsMTcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4pOwogCit2b2lkIHFkaXNjX3dhcm5fbm9ud2MoY2hhciAqdHh0LCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKQoreworCWlmICghKHFkaXNjLT5mbGFncyAmIFRDUV9GX1dBUk5fTk9OV0MpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICIlczogJXMgcWRpc2MgJVg6IGlzIG5vbi13b3JrLWNvbnNlcnZpbmc/XG4iLAorCQkgICAgICAgdHh0LCBxZGlzYy0+b3BzLT5pZCwgcWRpc2MtPmhhbmRsZSA+PiAxNik7CisJCXFkaXNjLT5mbGFncyB8PSBUQ1FfRl9XQVJOX05PTldDOworCX0KK30KK0VYUE9SVF9TWU1CT0wocWRpc2Nfd2Fybl9ub253Yyk7CisKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBxZGlzY193YXRjaGRvZyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHFkaXNjX3dhdGNoZG9nICp3ZCA9IGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHFkaXNjX3dhdGNoZG9nLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggOWU0M2VkOS4uZDcyOGQ4MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0xOTYwLDggKzE5NjAsMTEgQEAKIAljYnFfcm1wcmlvKHEsIGNsKTsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAotCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkKLQkJY2JxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggZTM2ZTk0YS4uNzU5N2ZlMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYworKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC0xNTUsOCArMTU1LDExIEBACiAJZHJyX3B1cmdlX3F1ZXVlKGNsKTsKIAlxZGlzY19jbGFzc19oYXNoX3JlbW92ZSgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWRycl9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggNDVjMzFiMS4uNTAyMmY5YyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTg4Nyw4ICs4ODcsNyBAQAogCiAJc2tiID0gc2NoLT5vcHMtPnBlZWsoc2NoKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50aygicWRpc2NfcGVla19sZW46IG5vbiB3b3JrLWNvbnNlcnZpbmcgcWRpc2MgP1xuIik7CisJCXFkaXNjX3dhcm5fbm9ud2MoInFkaXNjX3BlZWtfbGVuIiwgc2NoKTsKIAkJcmV0dXJuIDA7CiAJfQogCWxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKQEAgLTExNDAsOCArMTEzOSwxMSBAQAogCWhmc2NfcHVyZ2VfcXVldWUoc2NoLCBjbCk7CiAJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJmNsLT5jbF9jb21tb24pOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQloZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCXJldHVybiAwOwpAQCAtMTY0Miw4ICsxNjQ0LDcgQEAKIAogCXNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLT5xZGlzYyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoIkhGU0M6IE5vbi13b3JrLWNvbnNlcnZpbmcgcWRpc2MgP1xuIik7CisJCXFkaXNjX3dhcm5fbm9ud2MoIkhGU0MiLCBjbC0+cWRpc2MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDJmMGYwYjAuLjg4Y2QwMjYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogCkBAIC0xMTQsOCArMTE1LDYgQEAKIAlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKIAlpbnQgZmlsdGVyX2NudDsKIAotCWludCB3YXJuZWQ7CQkvKiBvbmx5IG9uZSB3YXJuaW5nIGFib3V0IG5vbiB3b3JrIGNvbnNlcnZpbmcgLi4gKi8KLQogCS8qIHRva2VuIGJ1Y2tldCBwYXJhbWV0ZXJzICovCiAJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnJhdGU7CS8qIHJhdGUgdGFibGUgb2YgdGhlIGNsYXNzIGl0c2VsZiAqLwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpjZWlsOwkvKiBjZWlsaW5nIHJhdGUgKGxpbWl0cyBib3Jyb3dzIHRvbykgKi8KQEAgLTE1NSw2ICsxNTQsMTAgQEAKIAlpbnQgZGlyZWN0X3FsZW47CS8qIG1heCBxbGVuIG9mIGFib3ZlICovCiAKIAlsb25nIGRpcmVjdF9wa3RzOworCisjZGVmaW5lIEhUQl9XQVJOX1RPT01BTllFVkVOVFMJMHgxCisJdW5zaWduZWQgaW50IHdhcm5lZDsJLyogb25seSBvbmUgd2FybmluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIAogLyogZmluZCBjbGFzcyBpbiBnbG9iYWwgaGFzaCB0YWJsZSB1c2luZyBnaXZlbiBoYW5kbGUgKi8KQEAgLTY1OCw3ICs2NjEsNyBAQAogICogaHRiX2RvX2V2ZW50cyAtIG1ha2UgbW9kZSBjaGFuZ2VzIHRvIGNsYXNzZXMgYXQgdGhlIGxldmVsCiAgKgogICogU2NhbnMgZXZlbnQgcXVldWUgZm9yIHBlbmRpbmcgZXZlbnRzIGFuZCBhcHBsaWVzIHRoZW0uIFJldHVybnMgdGltZSBvZgotICogbmV4dCBwZW5kaW5nIGV2ZW50ICgwIGZvciBubyBldmVudCBpbiBwcSkuCisgKiBuZXh0IHBlbmRpbmcgZXZlbnQgKDAgZm9yIG5vIGV2ZW50IGluIHBxLCBxLT5ub3cgZm9yIHRvbyBtYW55IGV2ZW50cykuCiAgKiBOb3RlOiBBcHBsaWVkIGFyZSBldmVudHMgd2hvc2UgaGF2ZSBjbC0+cHFfa2V5IDw9IHEtPm5vdy4KICAqLwogc3RhdGljIHBzY2hlZF90aW1lX3QgaHRiX2RvX2V2ZW50cyhzdHJ1Y3QgaHRiX3NjaGVkICpxLCBpbnQgbGV2ZWwsCkBAIC02ODYsOCArNjg5LDE0IEBACiAJCWlmIChjbC0+Y21vZGUgIT0gSFRCX0NBTl9TRU5EKQogCQkJaHRiX2FkZF90b193YWl0X3RyZWUocSwgY2wsIGRpZmYpOwogCX0KLQkvKiB0b28gbXVjaCBsb2FkIC0gbGV0J3MgY29udGludWUgb24gbmV4dCBqaWZmaWUgKGluY2x1ZGluZyBhYm92ZSkgKi8KLQlyZXR1cm4gcS0+bm93ICsgMiAqIFBTQ0hFRF9USUNLU19QRVJfU0VDIC8gSFo7CisKKwkvKiB0b28gbXVjaCBsb2FkIC0gbGV0J3MgY29udGludWUgYWZ0ZXIgYSBicmVhayBmb3Igc2NoZWR1bGluZyAqLworCWlmICghKHEtPndhcm5lZCAmIEhUQl9XQVJOX1RPT01BTllFVkVOVFMpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh0YjogdG9vIG1hbnkgZXZlbnRzIVxuIik7CisJCXEtPndhcm5lZCB8PSBIVEJfV0FSTl9UT09NQU5ZRVZFTlRTOworCX0KKworCXJldHVybiBxLT5ub3c7CiB9CiAKIC8qIFJldHVybnMgY2xhc3MtPm5vZGUrcHJpbyBmcm9tIGlkLXRyZWUgd2hlcmUgY2xhc3NlJ3MgaWQgaXMgPj0gaWQuIE5VTEwKQEAgLTgwOSwxMyArODE4LDggQEAKIAkJc2tiID0gY2wtPnVuLmxlYWYucS0+ZGVxdWV1ZShjbC0+dW4ubGVhZi5xKTsKIAkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpCiAJCQlicmVhazsKLQkJaWYgKCFjbC0+d2FybmVkKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImh0YjogY2xhc3MgJVggaXNuJ3Qgd29yayBjb25zZXJ2aW5nID8hXG4iLAotCQkJICAgICAgIGNsLT5jb21tb24uY2xhc3NpZCk7Ci0JCQljbC0+d2FybmVkID0gMTsKLQkJfQogCisJCXFkaXNjX3dhcm5fbm9ud2MoImh0YiIsIGNsLT51bi5sZWFmLnEpOwogCQlodGJfbmV4dF9yYl9ub2RlKChsZXZlbCA/IGNsLT5wYXJlbnQtPnVuLmlubmVyLnB0ciA6IHEtPgogCQkJCSAgcHRyWzBdKSArIHByaW8pOwogCQljbCA9IGh0Yl9sb29rdXBfbGVhZihxLT5yb3dbbGV2ZWxdICsgcHJpbywgcHJpbywKQEAgLTg5Miw3ICs4OTYsMTAgQEAKIAkJfQogCX0KIAlzY2gtPnFzdGF0cy5vdmVybGltaXRzKys7Ci0JcWRpc2Nfd2F0Y2hkb2dfc2NoZWR1bGUoJnEtPndhdGNoZG9nLCBuZXh0X2V2ZW50KTsKKwlpZiAobGlrZWx5KG5leHRfZXZlbnQgPiBxLT5ub3cpKQorCQlxZGlzY193YXRjaGRvZ19zY2hlZHVsZSgmcS0+d2F0Y2hkb2csIG5leHRfZXZlbnQpOworCWVsc2UKKwkJc2NoZWR1bGVfd29yaygmcS0+d29yayk7CiBmaW46CiAJcmV0dXJuIHNrYjsKIH0KQEAgLTk2Miw2ICs5NjksMTQgQEAKIAlbVENBX0hUQl9SVEFCXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCAubGVuID0gVENfUlRBQl9TSVpFIH0sCiB9OwogCitzdGF0aWMgdm9pZCBodGJfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBodGJfc2NoZWQsIHdvcmspOworCXN0cnVjdCBRZGlzYyAqc2NoID0gcS0+d2F0Y2hkb2cucWRpc2M7CisKKwlfX25ldGlmX3NjaGVkdWxlKHFkaXNjX3Jvb3Qoc2NoKSk7Cit9CisKIHN0YXRpYyBpbnQgaHRiX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCkKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwpAQCAtOTk2LDYgKzEwMTEsNyBAQAogCQlJTklUX0xJU1RfSEVBRChxLT5kcm9wcyArIGkpOwogCiAJcWRpc2Nfd2F0Y2hkb2dfaW5pdCgmcS0+d2F0Y2hkb2csIHNjaCk7CisJSU5JVF9XT1JLKCZxLT53b3JrLCBodGJfd29ya19mdW5jKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZxLT5kaXJlY3RfcXVldWUpOwogCiAJcS0+ZGlyZWN0X3FsZW4gPSBxZGlzY19kZXYoc2NoKS0+dHhfcXVldWVfbGVuOwpAQCAtMTE4OCw3ICsxMjA0LDYgQEAKIAlrZnJlZShjbCk7CiB9CiAKLS8qIGFsd2F5cyBjYWxlZCB1bmRlciBCSCAmIHF1ZXVlIGxvY2sgKi8KIHN0YXRpYyB2b2lkIGh0Yl9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CkBAIC0xMTk2LDYgKzEyMTEsNyBAQAogCXN0cnVjdCBodGJfY2xhc3MgKmNsOwogCXVuc2lnbmVkIGludCBpOwogCisJY2FuY2VsX3dvcmtfc3luYygmcS0+d29yayk7CiAJcWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKCZxLT53YXRjaGRvZyk7CiAJLyogVGhpcyBsaW5lIHVzZWQgdG8gYmUgYWZ0ZXIgaHRiX2Rlc3Ryb3lfY2xhc3MgY2FsbCBiZWxvdwogCSAgIGFuZCBzdXJwcmlzaW5nbHkgaXQgd29ya2VkIGluIDIuNC4gQnV0IGl0IG11c3QgcHJlY2VkZSBpdApAQCAtMTI1OSw4ICsxMjc1LDExIEBACiAJaWYgKGxhc3RfY2hpbGQpCiAJCWh0Yl9wYXJlbnRfdG9fbGVhZihxLCBjbCwgbmV3X3EpOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQlodGJfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCA3ZTE1MTg2Li45MTI3MzEyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCWludCBpOwogCiAJaWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKHFkaXNjX2RldihzY2gpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAobmxhX2xlbihvcHQpIDwgc2l6ZW9mKCpxb3B0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IGEyZjkzYzAuLmUyMmRmZTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJc3RydWN0IHRjX3RiZl9xb3B0ICpxb3B0OwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpydGFiID0gTlVMTDsKIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcHRhYiA9IE5VTEw7Ci0Jc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRtcDsKIAlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gTlVMTDsKIAlpbnQgbWF4X3NpemUsbjsKIApAQCAtMjk1LDEzICsyOTQsOSBAQAogCXEtPnRva2VucyA9IHEtPmJ1ZmZlcjsKIAlxLT5wdG9rZW5zID0gcS0+bXR1OwogCi0JdG1wID0gcS0+Ul90YWI7Ci0JcS0+Ul90YWIgPSBydGFiOwotCXJ0YWIgPSB0bXA7CisJc3dhcChxLT5SX3RhYiwgcnRhYik7CisJc3dhcChxLT5QX3RhYiwgcHRhYik7CiAKLQl0bXAgPSBxLT5QX3RhYjsKLQlxLT5QX3RhYiA9IHB0YWI7Ci0JcHRhYiA9IHRtcDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAllcnIgPSAwOwogZG9uZToKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RlYnVnLmMgYi9uZXQvc2N0cC9kZWJ1Zy5jCmluZGV4IDY3NzE1ZjQuLjdmZjU0OGEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2RlYnVnLmMKKysrIGIvbmV0L3NjdHAvZGVidWcuYwpAQCAtODYsNiArODYsOSBAQAogCWNhc2UgU0NUUF9DSURfRldEX1RTTjoKIAkJcmV0dXJuICJGV0RfVFNOIjsKIAorCWNhc2UgU0NUUF9DSURfQVVUSDoKKwkJcmV0dXJuICJBVVRIIjsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTEzNSw2ICsxMzgsNyBAQAogCSJQUklNSVRJVkVfQUJPUlQiLAogCSJQUklNSVRJVkVfU0VORCIsCiAJIlBSSU1JVElWRV9SRVFVRVNUSEVBUlRCRUFUIiwKKwkiUFJJTUlUSVZFX0FTQ09ORiIsCiB9OwogCiAvKiBMb29rdXAgcHJpbWl0aXZlIGRlYnVnIG5hbWUuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jIGIvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYwppbmRleCA0YzhkOWY0Li45MDVmZGE1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCisrKyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKQEAgLTExMSw3ICsxMTEsOCBAQAogCQlpZiAoc2N0cF9hZGRpcF9lbmFibGUpIHsKIAkJCWF1dGhfY2h1bmtzLT5jaHVua3NbMF0gPSBTQ1RQX0NJRF9BU0NPTkY7CiAJCQlhdXRoX2NodW5rcy0+Y2h1bmtzWzFdID0gU0NUUF9DSURfQVNDT05GX0FDSzsKLQkJCWF1dGhfY2h1bmtzLT5wYXJhbV9oZHIubGVuZ3RoICs9IGh0b25zKDIpOworCQkJYXV0aF9jaHVua3MtPnBhcmFtX2hkci5sZW5ndGggPQorCQkJCQlodG9ucyhzaXplb2Yoc2N0cF9wYXJhbWhkcl90KSArIDIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCAyZTRhODY0Li5kMmU5ODgwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTgzLDE0ICs4MywxNSBAQAogewogCXN0cnVjdCBza19idWZmICpsaXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CiAJc3RydWN0IHNjdHBoZHIgKnNoID0gc2N0cF9oZHIoc2tiKTsKLQlfX2JlMzIgY21wID0gc2gtPmNoZWNrc3VtOwotCV9fYmUzMiB2YWwgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOworCV9fbGUzMiBjbXAgPSBzaC0+Y2hlY2tzdW07CisJX19sZTMyIHZhbDsKKwlfX3UzMiB0bXAgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNrYl9oZWFkbGVuKHNrYikpOwogCiAJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQotCQl2YWwgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLAotCQkJCQl2YWwpOworCQl0bXAgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKWxpc3QtPmRhdGEsIHNrYl9oZWFkbGVuKGxpc3QpLAorCQkJCQl0bXApOwogCi0JdmFsID0gc2N0cF9lbmRfY2tzdW0odmFsKTsKKwl2YWwgPSBzY3RwX2VuZF9ja3N1bSh0bXApOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCkBAIC0xNDIsNyArMTQzLDggQEAKIAlfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7CiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKIAkJZ290byBkaXNjYXJkX2l0OwotCWlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmJiBzY3RwX3Jjdl9jaGVja3N1bShza2IpIDwgMCkKKwlpZiAoIXNjdHBfY2hlY2tzdW1fZGlzYWJsZSAmJiAhc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmJgorCQkgIHNjdHBfcmN2X2NoZWNrc3VtKHNrYikgPCAwKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IGNlYWE0YWEuLmE2M2RlM2YgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTk3LDggKzk3LDcgQEAKIAkJaWYgKGFkZHIpIHsKIAkJCWFkZHItPmEudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJCWFkZHItPmEudjYuc2luNl9wb3J0ID0gMDsKLQkJCW1lbWNweSgmYWRkci0+YS52Ni5zaW42X2FkZHIsICZpZmEtPmFkZHIsCi0JCQkJIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCWlwdjZfYWRkcl9jb3B5KCZhZGRyLT5hLnY2LnNpbjZfYWRkciwgJmlmYS0+YWRkcik7CiAJCQlhZGRyLT5hLnY2LnNpbjZfc2NvcGVfaWQgPSBpZmEtPmlkZXYtPmRldi0+aWZpbmRleDsKIAkJCWFkZHItPnZhbGlkID0gMTsKIAkJCXNwaW5fbG9ja19iaCgmc2N0cF9sb2NhbF9hZGRyX2xvY2spOwpAQCAtNjI4LDkgKzYyNyw3IEBACiBzdGF0aWMgc3RydWN0IHNvY2sgKnNjdHBfdjZfY3JlYXRlX2FjY2VwdF9zayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrICpuZXdzazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCBpcHY2X3BpbmZvICpuZXducCwgKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzY3RwNl9zb2NrICpuZXdzY3RwNnNrOwogCkBAIC02NDAsMTcgKzYzNyw3IEBACiAKIAlzb2NrX2luaXRfZGF0YShOVUxMLCBuZXdzayk7CiAKLQluZXdzay0+c2tfdHlwZSA9IFNPQ0tfU1RSRUFNOwotCi0JbmV3c2stPnNrX3Byb3QgPSBzay0+c2tfcHJvdDsKLQluZXdzay0+c2tfbm9fY2hlY2sgPSBzay0+c2tfbm9fY2hlY2s7Ci0JbmV3c2stPnNrX3JldXNlID0gc2stPnNrX3JldXNlOwotCi0JbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCW5ld3NrLT5za19mYW1pbHkgPSBQRl9JTkVUNjsKLQluZXdzay0+c2tfcHJvdG9jb2wgPSBJUFBST1RPX1NDVFA7Ci0JbmV3c2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OwotCW5ld3NrLT5za19zaHV0ZG93biA9IHNrLT5za19zaHV0ZG93bjsKKwlzY3RwX2NvcHlfc29jayhuZXdzaywgc2ssIGFzb2MpOwogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpOwogCiAJbmV3c2N0cDZzayA9IChzdHJ1Y3Qgc2N0cDZfc29jayAqKW5ld3NrOwpAQCAtNjU4LDcgKzY0NSw2IEBACiAKIAlzY3RwX3NrKG5ld3NrKS0+djRtYXBwZWQgPSBzY3RwX3NrKHNrKS0+djRtYXBwZWQ7CiAKLQluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CiAJbmV3bnAgPSBpbmV0Nl9zayhuZXdzayk7CiAKIAltZW1jcHkobmV3bnAsIG5wLCBzaXplb2Yoc3RydWN0IGlwdjZfcGluZm8pKTsKQEAgLTY2NiwyNiArNjUyLDggQEAKIAkvKiBJbml0aWFsaXplIHNrJ3Mgc3BvcnQsIGRwb3J0LCByY3Zfc2FkZHIgYW5kIGRhZGRyIGZvciBnZXRzb2NrbmFtZSgpCiAJICogYW5kIGdldHBlZXJuYW1lKCkuCiAJICovCi0JbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKLQluZXducC0+c2FkZHIgPSBucC0+c2FkZHI7Ci0JbmV3bnAtPnJjdl9zYWRkciA9IG5wLT5yY3Zfc2FkZHI7Ci0JbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCXNjdHBfdjZfdG9fc2tfZGFkZHIoJmFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLCBuZXdzayk7CiAKLQkvKiBJbml0IHRoZSBpcHY0IHBhcnQgb2YgdGhlIHNvY2tldCBzaW5jZSB3ZSBjYW4gaGF2ZSBzb2NrZXRzCi0JICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LgotCSAqLwotCW5ld2luZXQtPnVjX3R0bCA9IC0xOwotCW5ld2luZXQtPm1jX2xvb3AgPSAxOwotCW5ld2luZXQtPm1jX3R0bCA9IDE7Ci0JbmV3aW5ldC0+bWNfaW5kZXggPSAwOwotCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOwotCi0JaWYgKGlwdjRfY29uZmlnLm5vX3BtdHVfZGlzYykKLQkJbmV3aW5ldC0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19ET05UOwotCWVsc2UKLQkJbmV3aW5ldC0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UOwotCiAJc2tfcmVmY250X2RlYnVnX2luYyhuZXdzayk7CiAKIAlpZiAobmV3c2stPnNrX3Byb3QtPmluaXQobmV3c2spKSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDczNjM5MzUuLjdkMDhmNTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC00OSwxMyArNDksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAotI2lmbmRlZiBURVNUX0ZSQU1FCi0jaW5jbHVkZSA8bmV0L3RjcC5oPgotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKG5vdCBkZWZpbmVkKSAqLwotCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+IC8qIGZvciBzYV9mYW1pbHlfdCAqLwogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKQEAgLTM2Nyw3ICszNjQsNiBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHAgPSBwYWNrZXQtPnRyYW5zcG9ydDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHRwLT5hc29jOwogCXN0cnVjdCBzY3RwaGRyICpzaDsKLQlfX2JlMzIgY3JjMzIgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC01MzEsMTcgKzUyNywxNiBAQAogCSAqIE5vdGU6IEFkbGVyLTMyIGlzIG5vIGxvbmdlciBhcHBsaWNhYmxlLCBhcyBoYXMgYmVlbiByZXBsYWNlZAogCSAqIGJ5IENSQzMyLUMgYXMgZGVzY3JpYmVkIGluIDxkcmFmdC1pZXRmLXRzdndnLXNjdHBjc3VtLTAyLnR4dD4uCiAJICovCi0JaWYgKCEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkgewotCQljcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgY2tzdW1fYnVmX2xlbik7Ci0JCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOworCWlmICghc2N0cF9jaGVja3N1bV9kaXNhYmxlICYmICEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkgeworCQlfX3UzMiBjcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgY2tzdW1fYnVmX2xlbik7CisKKwkJLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCisJCSAqICAgIGNvbW1vbiBoZWFkZXIsIGFuZCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgYml0cyB1bmNoYW5nZWQuCisJCSAqLworCQlzaC0+Y2hlY2tzdW0gPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CiAJfSBlbHNlCiAJCW5za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0JLyogMykgUHV0IHRoZSByZXN1bHRhbnQgdmFsdWUgaW50byB0aGUgY2hlY2tzdW0gZmllbGQgaW4gdGhlCi0JICogICAgY29tbW9uIGhlYWRlciwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVuY2hhbmdlZC4KLQkgKi8KLQlzaC0+Y2hlY2tzdW0gPSBjcmMzMjsKLQogCS8qIElQIGxheWVyIEVDTiBzdXBwb3J0CiAJICogRnJvbSBSRkMgMjQ4MQogCSAqICAiVGhlIEVDTi1DYXBhYmxlIFRyYW5zcG9ydCAoRUNUKSBiaXQgd291bGQgYmUgc2V0IGJ5IHRoZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cXVldWUuYyBiL25ldC9zY3RwL291dHF1ZXVlLmMKaW5kZXggYmM0MTFjOC4uZDc2NWZjNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cXVldWUuYworKysgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCkBAIC00MjgsNyArNDI4LDggQEAKIAkJCSAqIHJldHJhbnNtaXR0aW5nIGR1ZSB0byBUMyB0aW1lb3V0LgogCQkJICovCiAJCQlpZiAocmVhc29uID09IFNDVFBfUlRYUl9UM19SVFggJiYKLQkJCSAgICAoamlmZmllcyAtIGNodW5rLT5zZW50X2F0KSA8IHRyYW5zcG9ydC0+bGFzdF9ydG8pCisJCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgY2h1bmstPnNlbnRfYXQgKworCQkJCQkJIHRyYW5zcG9ydC0+bGFzdF9ydG8pKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBSRkMgMjk2MCA2LjIuMSBQcm9jZXNzaW5nIGEgUmVjZWl2ZWQgU0FDSwpAQCAtMTc1Nyw2ICsxNzU4LDkgQEAKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGNodW5rLCAqdGVtcDsKIAorCWlmICghYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKKwkJcmV0dXJuOworCiAJLyogUFItU0NUUCBDMSkgTGV0IFNhY2tDdW1BY2sgYmUgdGhlIEN1bXVsYXRpdmUgVFNOIEFDSyBjYXJyaWVkIGluIHRoZQogCSAqIHJlY2VpdmVkIFNBQ0suCiAJICoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGM0OTg2ZDAuLmNiMTk4YWYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtNTg5LDQ2ICs1ODksMjEgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF92NF9jcmVhdGVfYWNjZXB0X3NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19hbGxvYyhzb2NrX25ldChzayksIFBGX0lORVQsIEdGUF9LRVJORUwsCiAJCQlzay0+c2tfcHJvdCk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAogCWlmICghbmV3c2spCiAJCWdvdG8gb3V0OwogCiAJc29ja19pbml0X2RhdGEoTlVMTCwgbmV3c2spOwogCi0JbmV3c2stPnNrX3R5cGUgPSBTT0NLX1NUUkVBTTsKLQotCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKLQluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7Ci0JbmV3c2stPnNrX3NodXRkb3duID0gc2stPnNrX3NodXRkb3duOwotCi0JbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCW5ld3NrLT5za19mYW1pbHkgPSBQRl9JTkVUOwotCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKLQluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CisJc2N0cF9jb3B5X3NvY2sobmV3c2ssIHNrLCBhc29jKTsKIAlzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTsKIAogCW5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKIAotCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yCi0JICogZ2V0c29ja25hbWUoKSBhbmQgZ2V0cGVlcm5hbWUoKQotCSAqLwotCW5ld2luZXQtPnNwb3J0ID0gaW5ldC0+c3BvcnQ7Ci0JbmV3aW5ldC0+c2FkZHIgPSBpbmV0LT5zYWRkcjsKLQluZXdpbmV0LT5yY3Zfc2FkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7Ci0JbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCW5ld2luZXQtPmRhZGRyID0gYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIudjQuc2luX2FkZHIuc19hZGRyOwotCW5ld2luZXQtPnBtdHVkaXNjID0gaW5ldC0+cG10dWRpc2M7Ci0JbmV3aW5ldC0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7Ci0KLQluZXdpbmV0LT51Y190dGwgPSAtMTsKLQluZXdpbmV0LT5tY19sb29wID0gMTsKLQluZXdpbmV0LT5tY190dGwgPSAxOwotCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKLQluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKIAogCXNrX3JlZmNudF9kZWJ1Z19pbmMobmV3c2spOwogCkBAIC0xNDEzLDQgKzEzODgsNiBAQAogTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUNikgIi1wcm90by0xMzIiKTsKIE1PRFVMRV9BVVRIT1IoIkxpbnV4IEtlcm5lbCBTQ1RQIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgdGhlIFNDVFAgcHJvdG9jb2wgKFJGQzI5NjApIik7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9fY2hlY2tzdW1zLCBzY3RwX2NoZWNrc3VtX2Rpc2FibGUsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhub19jaGVja3N1bXMsICJEaXNhYmxlIGNoZWNrc3VtcyBjb21wdXRpbmcgYW5kIHZlcmlmaWNhdGlvbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IGZkOGFjYjQuLjY4NTFlZTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTEwMCwxMSArMTAwLDExIEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBlY2FwX3BhcmFtID0gewogCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUsCi0JX19jb25zdGFudF9odG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKKwljcHVfdG9fYmUxNihzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjdHBfcGFyYW1oZHIgcHJzY3RwX3BhcmFtID0gewogCVNDVFBfUEFSQU1fRldEX1RTTl9TVVBQT1JULAotCV9fY29uc3RhbnRfaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCisJY3B1X3RvX2JlMTYoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCiB9OwogCiAvKiBBIGhlbHBlciB0byBpbml0aWFsaXplIHRvIGluaXRpYWxpemUgYW4gb3AgZXJyb3IgaW5zaWRlIGEKQEAgLTIyNCw3ICsyMjQsOSBAQAogCQludW1fZXh0ICs9IDI7CiAJfQogCi0JY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKQorCQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCiAJY2h1bmtzaXplICs9IHZwYXJhbV9sZW47CiAKIAkvKiBBY2NvdW50IGZvciBBVVRIIHJlbGF0ZWQgcGFyYW1ldGVycyAqLwpAQCAtMzA0LDEwICszMDYsMTIgQEAKIAlpZiAoc2N0cF9wcnNjdHBfZW5hYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7Ci0JYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKLQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkgeworCQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKKwkJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKKwkJYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7CisJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwl9CiAKIAkvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi8KIAlpZiAoc2N0cF9hdXRoX2VuYWJsZSkgewpAQCAtMzMyLDYgKzMzNiw3IEBACiAJc2N0cF9pbml0aGRyX3QgaW5pdGFjazsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOwogCXVuaW9uIHNjdHBfcGFyYW1zIGFkZHJzOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwOwogCWludCBhZGRyc19sZW47CiAJc2N0cF9jb29raWVfcGFyYW1fdCAqY29va2llOwogCWludCBjb29raWVfbGVuOwpAQCAtMzY2LDIyICszNzEsMjQgQEAKIAkvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgb2YgYWxsb2NhdGlvbiwgaW5jbHVkZSB0aGUgcmVzZXJ2ZWQKIAkgKiBzcGFjZSBmb3IgcmVwb3J0aW5nIHVua25vd24gcGFyYW1ldGVycyBpZiBpdCBpcyBzcGVjaWZpZWQuCiAJICovCisJc3AgPSBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spOwogCWNodW5rc2l6ZSA9IHNpemVvZihpbml0YWNrKSArIGFkZHJzX2xlbiArIGNvb2tpZV9sZW4gKyB1bmtwYXJhbV9sZW47CiAKIAkvKiBUZWxsIHBlZXIgdGhhdCB3ZSdsbCBkbyBFQ04gb25seSBpZiBwZWVyIGFkdmVydGlzZWQgc3VjaCBjYXAuICAqLwogCWlmIChhc29jLT5wZWVyLmVjbl9jYXBhYmxlKQogCQljaHVua3NpemUgKz0gc2l6ZW9mKGVjYXBfcGFyYW0pOwogCi0JaWYgKHNjdHBfcHJzY3RwX2VuYWJsZSkKKwlpZiAoYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJY2h1bmtzaXplICs9IHNpemVvZihwcnNjdHBfcGFyYW0pOwogCi0JaWYgKHNjdHBfYWRkaXBfZW5hYmxlKSB7CisJaWYgKGFzb2MtPnBlZXIuYXNjb25mX2NhcGFibGUpIHsKIAkJZXh0ZW5zaW9uc1tudW1fZXh0XSA9IFNDVFBfQ0lEX0FTQ09ORjsKIAkJZXh0ZW5zaW9uc1tudW1fZXh0KzFdID0gU0NUUF9DSURfQVNDT05GX0FDSzsKIAkJbnVtX2V4dCArPSAyOwogCX0KIAotCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkKKwkJY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKIAogCWlmIChhc29jLT5wZWVyLmF1dGhfY2FwYWJsZSkgewogCQlhdXRoX3JhbmRvbSA9IChzY3RwX3BhcmFtaGRyX3QgKilhc29jLT5jLmF1dGhfcmFuZG9tOwpAQCAtNDMyLDEwICs0MzksMTIgQEAKIAlpZiAoYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihwcnNjdHBfcGFyYW0pLCAmcHJzY3RwX3BhcmFtKTsKIAotCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOwotCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7Ci0JYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNjdHBfc2soYXNvYy0+YmFzZS5zayktPmFkYXB0YXRpb25faW5kKTsKLQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkgeworCQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKKwkJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKKwkJYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7CisJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwl9CiAKIAlpZiAoYXNvYy0+cGVlci5hdXRoX2NhcGFibGUpIHsKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfcmFuZG9tLT5sZW5ndGgpLApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IGI1NDk1YWUuLmUyMDIwZWIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTQzNCw3ICs0MzQsOCBAQAogICoKICAqLwogc3RhdGljIHZvaWQgc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkJIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQorCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCSBpbnQgaXNfaGIpCiB7CiAJLyogVGhlIGNoZWNrIGZvciBhc3NvY2lhdGlvbidzIG92ZXJhbGwgZXJyb3IgY291bnRlciBleGNlZWRpbmcgdGhlCiAJICogdGhyZXNob2xkIGlzIGRvbmUgaW4gdGhlIHN0YXRlIGZ1bmN0aW9uLgpAQCAtNDYxLDkgKzQ2MiwxNSBAQAogCSAqIGV4cGlyZXMsIHNldCBSVE8gPC0gUlRPICogMiAoImJhY2sgb2ZmIHRoZSB0aW1lciIpLiAgVGhlCiAJICogbWF4aW11bSB2YWx1ZSBkaXNjdXNzZWQgaW4gcnVsZSBDNyBhYm92ZSAoUlRPLm1heCkgbWF5IGJlCiAJICogdXNlZCB0byBwcm92aWRlIGFuIHVwcGVyIGJvdW5kIHRvIHRoaXMgZG91Ymxpbmcgb3BlcmF0aW9uLgorCSAqCisJICogU3BlY2lhbCBDYXNlOiAgdGhlIGZpcnN0IEhCIGRvZXNuJ3QgdHJpZ2dlciBleHBvbmVudGlhbCBiYWNrb2ZmLgorCSAqIFRoZSBmaXJzdCB1bmFja25vd2xlZ2VkIEhCIHRyaWdnZXJzIGl0LiAgV2UgZG8gdGhpcyB3aXRoIGEgZmxhZworCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBIQi4KIAkgKi8KLQl0cmFuc3BvcnQtPmxhc3RfcnRvID0gdHJhbnNwb3J0LT5ydG87Ci0JdHJhbnNwb3J0LT5ydG8gPSBtaW4oKHRyYW5zcG9ydC0+cnRvICogMiksIHRyYW5zcG9ydC0+YXNvYy0+cnRvX21heCk7CisJaWYgKCFpc19oYiB8fCB0cmFuc3BvcnQtPmhiX3NlbnQpIHsKKwkJdHJhbnNwb3J0LT5sYXN0X3J0byA9IHRyYW5zcG9ydC0+cnRvOworCQl0cmFuc3BvcnQtPnJ0byA9IG1pbigodHJhbnNwb3J0LT5ydG8gKiAyKSwgdHJhbnNwb3J0LT5hc29jLT5ydG9fbWF4KTsKKwl9CiB9CiAKIC8qIFdvcmtlciByb3V0aW5lIHRvIGhhbmRsZSBJTklUIGNvbW1hbmQgZmFpbHVyZS4gICovCkBAIC02MjEsNiArNjI4LDExIEBACiAJdC0+ZXJyb3JfY291bnQgPSAwOwogCXQtPmFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwogCisJLyogQ2xlYXIgdGhlIGhiX3NlbnQgZmxhZyB0byBzaWduYWwgdGhhdCB3ZSBoYWQgYSBnb29kCisJICogYWNrbm93bGVkZ2VtZW50LgorCSAqLworCXQtPmhiX3NlbnQgPSAwOworCiAJLyogTWFyayB0aGUgZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3MgYXMgYWN0aXZlIGlmIGl0IGlzIG5vdCBzbwogCSAqIG1hcmtlZC4KIAkgKi8KQEAgLTY0NiwxOCArNjU4LDYgQEAKIAkJc2N0cF90cmFuc3BvcnRfaG9sZCh0KTsKIH0KIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGRvIGEgdHJhbnNwb3J0IHJlc2V0IGF0IHRoZSBleHBpcnkgb2YgdGhlIGhlYXJiZWF0Ci0gKiB0aW1lci4KLSAqLwotc3RhdGljIHZvaWQgc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KHNjdHBfY21kX3NlcV90ICpjbWRzLAotCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJICAgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQpCi17Ci0Jc2N0cF90cmFuc3BvcnRfbG93ZXJfY3duZCh0LCBTQ1RQX0xPV0VSX0NXTkRfSU5BQ1RJVkUpOwotCi0JLyogTWFyayBvbmUgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLwotCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgdCk7Ci19CiAKIC8qIEhlbHBlciBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBwcm9jZXNzIFNBQ0sgY29tbWFuZC4gICovCiBzdGF0aWMgaW50IHNjdHBfY21kX3Byb2Nlc3Nfc2FjayhzY3RwX2NtZF9zZXFfdCAqY21kcywKQEAgLTE0NTgsMTIgKzE0NTgsMTkgQEAKIAogCQljYXNlIFNDVFBfQ01EX1NUUklLRToKIAkJCS8qIE1hcmsgb25lIHN0cmlrZSBhZ2FpbnN0IGEgdHJhbnNwb3J0LiAgKi8KLQkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0KTsKKwkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgY21kLT5vYmoudHJhbnNwb3J0LAorCQkJCQkJICAgIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQ6CisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0lETEU6CiAJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OwotCQkJc2N0cF9jbWRfdHJhbnNwb3J0X3Jlc2V0KGNvbW1hbmRzLCBhc29jLCB0KTsKKwkJCXNjdHBfdHJhbnNwb3J0X2xvd2VyX2N3bmQodCwgU0NUUF9MT1dFUl9DV05EX0lOQUNUSVZFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQ6CisJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OworCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0LCAxKTsKKwkJCXQtPmhiX3NlbnQgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfT046CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IGY4OGRmZGUuLjU1YTYxYWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC05ODgsNyArOTg4LDkgQEAKIAkJLyogU2V0IHRyYW5zcG9ydCBlcnJvciBjb3VudGVyIGFuZCBhc3NvY2lhdGlvbiBlcnJvciBjb3VudGVyCiAJCSAqIHdoZW4gc2VuZGluZyBoZWFydGJlYXQuCiAJCSAqLwotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVCwKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwKKwkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCQlTQ1RQX1RSQU5TUE9SVCh0cmFuc3BvcnQpKTsKIAl9CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsCkBAIC00OTU1LDcgKzQ5NTcsNyBAQAogCSAqICAgIHRvIHRoYXQgYWRkcmVzcyBhbmQgbm90IGFja25vd2xlZGdlZCB3aXRoaW4gb25lIFJUTy4KIAkgKgogCSAqLwotCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULAorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQsCiAJCQlTQ1RQX1RSQU5TUE9SVChhcmcpKTsKIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBmZjBhOGY4Li41ZmIzYThjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMzA2OSw5ICszMDY5LDYgQEAKIAlpbnQgdmFsOwogCWludCBhc3NvY19pZCA9IDA7CiAKLQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKG9wdGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwpAQCAtMzkzOSw3ICszOTM2LDYgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLT5iYXNlLnNrOwogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldHNrOwogCXN0cnVjdCBzY3RwX2FmICphZjsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzk1NCwxOCArMzk1MCwxOCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlCi0JICogYXNvYyB0byB0aGUgbmV3c2suCi0JICovCi0Jc2N0cF9zb2NrX21pZ3JhdGUoc2ssIHNvY2stPnNrLCBhc29jLCBTQ1RQX1NPQ0tFVF9VRFBfSElHSF9CQU5EV0lEVEgpOworCXNjdHBfY29weV9zb2NrKHNvY2stPnNrLCBzaywgYXNvYyk7CiAKIAkvKiBNYWtlIHBlZWxlZC1vZmYgc29ja2V0cyBtb3JlIGxpa2UgMS0xIGFjY2VwdGVkIHNvY2tldHMuCiAJICogU2V0IHRoZSBkYWRkciBhbmQgaW5pdGlhbGl6ZSBpZCB0byBzb21ldGhpbmcgbW9yZSByYW5kb20KIAkgKi8KIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLnNhLnNhX2ZhbWlseSk7CiAJYWYtPnRvX3NrX2RhZGRyKCZhc29jLT5wZWVyLnByaW1hcnlfYWRkciwgc2spOwotCWluZXRzayA9IGluZXRfc2soc29jay0+c2spOwotCWluZXRzay0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7CisKKwkvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUKKwkgKiBhc29jIHRvIHRoZSBuZXdzay4KKwkgKi8KKwlzY3RwX3NvY2tfbWlncmF0ZShzaywgc29jay0+c2ssIGFzb2MsIFNDVFBfU09DS0VUX1VEUF9ISUdIX0JBTkRXSURUSCk7CiAKIAkqc29ja3AgPSBzb2NrOwogCkBAIC01Mjg0LDE2ICs1MjgwLDE0IEBACiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CiAKLQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGxlbiA9PSBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICJTQ1RQOiBVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIik7CiAJCXBhcmFtcy5hc3NvY19pZCA9IDA7Ci0JfSBlbHNlIGlmIChsZW4gPT0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwl9IGVsc2UgaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UKQEAgLTU4NDksMTI3ICs1ODQzLDEzIEBACiB9CiAKIC8qCi0gKiAzLjEuMyBsaXN0ZW4oKSAtIFVEUCBTdHlsZSBTeW50YXgKLSAqCi0gKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCi0gKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCi0gKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBPbmx5IFVEUCBzdHlsZSBzb2NrZXRzIHRoYXQgYXJlIG5vdCBwZWVsZWQgb2ZmIGFyZSBhbGxvd2VkIHRvCi0JICogbGlzdGVuKCkuCi0JICovCi0JaWYgKCFzY3RwX3N0eWxlKHNrLCBVRFApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCi0JaWYgKCFiYWNrbG9nKSB7Ci0JCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKLQkJCXJldHVybiAwOwotCi0JCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKLQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFJldHVybiBpZiB3ZSBhcmUgYWxyZWFkeSBsaXN0ZW5pbmcuICovCi0JaWYgKHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgYSBiaW5kKCkgb3Igc2N0cF9iaW5keCgpIGlzIG5vdCBjYWxsZWQgcHJpb3IgdG8gYSBsaXN0ZW4oKQotCSAqIGNhbGwgdGhhdCBhbGxvd3MgbmV3IGFzc29jaWF0aW9ucyB0byBiZSBhY2NlcHRlZCwgdGhlIHN5c3RlbQotCSAqIHBpY2tzIGFuIGVwaGVtZXJhbCBwb3J0IGFuZCB3aWxsIGNob29zZSBhbiBhZGRyZXNzIHNldCBlcXVpdmFsZW50Ci0JICogdG8gYmluZGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkcmVzcy4KLQkgKgotCSAqIFRoaXMgaXMgbm90IGN1cnJlbnRseSBzcGVsbGVkIG91dCBpbiB0aGUgU0NUUCBzb2NrZXRzCi0JICogZXh0ZW5zaW9ucyBkcmFmdCwgYnV0IGZvbGxvd3MgdGhlIHByYWN0aWNlIGFzIHNlZW4gaW4gVENQCi0JICogc29ja2V0cy4KLQkgKgotCSAqIEFkZGl0aW9uYWxseSwgdHVybiBvZmYgZmFzdHJldXNlIGZsYWcgc2luY2Ugd2UgYXJlIG5vdCBsaXN0ZW5pbmcKLQkgKi8KLQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKLQlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7Ci0JCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCX0gZWxzZSB7Ci0JCWlmIChzY3RwX2dldF9wb3J0KHNrLCBpbmV0X3NrKHNrKS0+bnVtKSkgewotCQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCQlyZXR1cm4gLUVBRERSSU5VU0U7Ci0JCX0KLQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMDsKLQl9Ci0KLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgotICogNC4xLjMgbGlzdGVuKCkgLSBUQ1AgU3R5bGUgU3ludGF4Ci0gKgotICogICBBcHBsaWNhdGlvbnMgdXNlcyBsaXN0ZW4oKSB0byByZWFkeSB0aGUgU0NUUCBlbmRwb2ludCBmb3IgYWNjZXB0aW5nCi0gKiAgIGluYm91bmQgYXNzb2NpYXRpb25zLgotICovCi1TQ1RQX1NUQVRJQyBpbnQgc2N0cF9zdHJlYW1fbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCi17Ci0Jc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7Ci0KLQkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLwotCWlmICghYmFja2xvZykgewotCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCi0JCQlyZXR1cm4gMDsKLQotCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7Ci0JCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCi0JICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCi0JICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKLQkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgotCSAqCi0JICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKLQkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKLQkgKiBzb2NrZXRzLgotCSAqLwotCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOwotCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKLQkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlCi0JCXNjdHBfc2soc2spLT5iaW5kX2hhc2gtPmZhc3RyZXVzZSA9IDA7Ci0KLQlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKLQlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOwotCXJldHVybiAwOwotfQotCi0vKgogICogIE1vdmUgYSBzb2NrZXQgdG8gTElTVEVOSU5HIHN0YXRlLgogICovCi1pbnQgc2N0cF9pbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK1NDVFBfU1RBVElDIGludCBzY3RwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc3AtPmVwOwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtID0gTlVMTDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWlmICh1bmxpa2VseShiYWNrbG9nIDwgMCkpCi0JCWdvdG8gb3V0OwotCi0Jc2N0cF9sb2NrX3NvY2soc2spOwotCi0JaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQotCQlnb3RvIG91dDsKIAogCS8qIEFsbG9jYXRlIEhNQUMgZm9yIGdlbmVyYXRpbmcgY29va2llLiAqLwogCWlmICghc2N0cF9zayhzayktPmhtYWMgJiYgc2N0cF9obWFjX2FsZykgewpAQCAtNTk4MCwzNCArNTg2MCw5NiBAQAogCQkJCSAgICAgICAiU0NUUDogZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLAogCQkJCQlzY3RwX2htYWNfYWxnLCBQVFJfRVJSKHRmbSkpOwogCQkJfQotCQkJZXJyID0gLUVOT1NZUzsKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJfQorCisJLyoKKwkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCisJICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCisJICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKKwkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgorCSAqCisJICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKKwkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKKwkgKiBzb2NrZXRzLgorCSAqCisJICovCisJc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7CisJaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgeworCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwl9IGVsc2UgeworCQlpZiAoc2N0cF9nZXRfcG9ydChzaywgaW5ldF9zayhzayktPm51bSkpIHsKKwkJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQl9CiAJfQogCi0Jc3dpdGNoIChzb2NrLT50eXBlKSB7Ci0JY2FzZSBTT0NLX1NFUVBBQ0tFVDoKLQkJZXJyID0gc2N0cF9zZXFwYWNrZXRfbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT0NLX1NUUkVBTToKLQkJZXJyID0gc2N0cF9zdHJlYW1fbGlzdGVuKHNrLCBiYWNrbG9nKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7CisJc2N0cF9oYXNoX2VuZHBvaW50KGVwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIDQuMS4zIC8gNS4xLjMgbGlzdGVuKCkKKyAqCisgKiAgIEJ5IGRlZmF1bHQsIG5ldyBhc3NvY2lhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZCBmb3IgVURQIHN0eWxlIHNvY2tldHMuCisgKiAgIEFuIGFwcGxpY2F0aW9uIHVzZXMgbGlzdGVuKCkgdG8gbWFyayBhIHNvY2tldCBhcyBiZWluZyBhYmxlIHRvCisgKiAgIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLgorICoKKyAqICAgT24gVENQIHN0eWxlIHNvY2tldHMsIGFwcGxpY2F0aW9ucyB1c2UgbGlzdGVuKCkgdG8gcmVhZHkgdGhlIFNDVFAKKyAqICAgZW5kcG9pbnQgZm9yIGFjY2VwdGluZyBpbmJvdW5kIGFzc29jaWF0aW9ucy4KKyAqCisgKiAgIE9uIGJvdGggdHlwZXMgb2YgZW5kcG9pbnRzIGEgYmFja2xvZyBvZiAnMCcgZGlzYWJsZXMgbGlzdGVuaW5nLgorICoKKyAqICBNb3ZlIGEgc29ja2V0IHRvIExJU1RFTklORyBzdGF0ZS4KKyAqLworaW50IHNjdHBfaW5ldF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktPmVwOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGJhY2tsb2cgPCAwKSkKKwkJcmV0dXJuIGVycjsKKworCXNjdHBfbG9ja19zb2NrKHNrKTsKKworCS8qIFBlZWxlZC1vZmYgc29ja2V0cyBhcmUgbm90IGFsbG93ZWQgdG8gbGlzdGVuKCkuICAqLworCWlmIChzY3RwX3N0eWxlKHNrLCBVRFBfSElHSF9CQU5EV0lEVEgpKQorCQlnb3RvIG91dDsKKworCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKKwkJZ290byBvdXQ7CisKKwkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLworCWlmICghYmFja2xvZykgeworCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSAwOworCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7CisJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOworCQlpZiAoc2stPnNrX3JldXNlKQorCQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGVycikKLQkJZ290byBjbGVhbnVwOworCS8qIElmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZywganVzdCB1cGRhdGUgdGhlIGJhY2tsb2cgKi8KKwlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCisJCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOworCWVsc2UgeworCQllcnIgPSBzY3RwX2xpc3Rlbl9zdGFydChzaywgYmFja2xvZyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CiAKLQkvKiBTdG9yZSBhd2F5IHRoZSB0cmFuc2Zvcm0gcmVmZXJlbmNlLiAqLwotCWlmICghc2N0cF9zayhzayktPmhtYWMpCi0JCXNjdHBfc2soc2spLT5obWFjID0gdGZtOworCWVyciA9IDA7CiBvdXQ6CiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7Ci1jbGVhbnVwOgotCWNyeXB0b19mcmVlX2hhc2godGZtKTsKLQlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTY3MDAsNiArNjY0Miw0OCBAQAogCXNjdHBfc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwogfQogCit2b2lkIHNjdHBfY29weV9zb2NrKHN0cnVjdCBzb2NrICpuZXdzaywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKKworCW5ld3NrLT5za190eXBlID0gc2stPnNrX3R5cGU7CisJbmV3c2stPnNrX2JvdW5kX2Rldl9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJbmV3c2stPnNrX2ZsYWdzID0gc2stPnNrX2ZsYWdzOworCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKKwluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7CisKKwluZXdzay0+c2tfc2h1dGRvd24gPSBzay0+c2tfc2h1dGRvd247CisJbmV3c2stPnNrX2Rlc3RydWN0ID0gaW5ldF9zb2NrX2Rlc3RydWN0OworCW5ld3NrLT5za19mYW1pbHkgPSBzay0+c2tfZmFtaWx5OworCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKKwluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CisJbmV3c2stPnNrX3NuZGJ1ZiA9IHNrLT5za19zbmRidWY7CisJbmV3c2stPnNrX3JjdmJ1ZiA9IHNrLT5za19yY3ZidWY7CisJbmV3c2stPnNrX2xpbmdlcnRpbWUgPSBzay0+c2tfbGluZ2VydGltZTsKKwluZXdzay0+c2tfcmN2dGltZW8gPSBzay0+c2tfcmN2dGltZW87CisJbmV3c2stPnNrX3NuZHRpbWVvID0gc2stPnNrX3NuZHRpbWVvOworCisJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCisJLyogSW5pdGlhbGl6ZSBzaydzIHNwb3J0LCBkcG9ydCwgcmN2X3NhZGRyIGFuZCBkYWRkciBmb3IKKwkgKiBnZXRzb2NrbmFtZSgpIGFuZCBnZXRwZWVybmFtZSgpCisJICovCisJbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKKwluZXdpbmV0LT5zYWRkciA9IGluZXQtPnNhZGRyOworCW5ld2luZXQtPnJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CisJbmV3aW5ldC0+cG10dWRpc2MgPSBpbmV0LT5wbXR1ZGlzYzsKKwluZXdpbmV0LT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKKworCW5ld2luZXQtPnVjX3R0bCA9IGluZXQtPnVjX3R0bDsKKwluZXdpbmV0LT5tY19sb29wID0gMTsKKwluZXdpbmV0LT5tY190dGwgPSAxOworCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKKwluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKK30KKwogLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlIGFzc29jCiAgKiBhbmQgaXRzIG1lc3NhZ2VzIHRvIHRoZSBuZXdzay4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwppbmRleCBlNzQ1YzExLi5lNWRkZTQ1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC90cmFuc3BvcnQuYworKysgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwpAQCAtNzksNiArNzksNyBAQAogCXBlZXItPnJ0dHZhciA9IDA7CiAJcGVlci0+c3J0dCA9IDA7CiAJcGVlci0+cnRvX3BlbmRpbmcgPSAwOworCXBlZXItPmhiX3NlbnQgPSAwOwogCXBlZXItPmZhc3RfcmVjb3ZlcnkgPSAwOwogCiAJcGVlci0+bGFzdF90aW1lX2hlYXJkID0gamlmZmllczsKQEAgLTU0Miw4ICs1NDMsOCBAQAogCQkgKiBjb25nZXN0aW9uIGluZGljYXRpb25zIG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IHdpbmRvdyBvZgogCQkgKiBkYXRhIChvciBtb3JlIGxvb3NlbHkgbW9yZSB0aGFuIG9uY2UgZXZlcnkgcm91bmQtdHJpcCB0aW1lKS4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX2VjbmVfcmVkdWNlZCkgPgotCQkgICAgdHJhbnNwb3J0LT5ydHQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkICsKKwkJCQkJdHJhbnNwb3J0LT5ydHQpKSB7CiAJCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAogCQkJCQkJICA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPnNzdGhyZXNoOwpAQCAtNTYwLDcgKzU2MSw4IEBACiAJCSAqIHRvIGJlIGRvbmUgZXZlcnkgUlRPIGludGVydmFsLCB3ZSBkbyBpdCBldmVyeSBoZWFyYmVhdAogCQkgKiBpbnRlcnZhbC4KIAkJICovCi0JCWlmICgoamlmZmllcyAtIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQpID4gdHJhbnNwb3J0LT5ydG8pCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRyYW5zcG9ydC0+bGFzdF90aW1lX3VzZWQgKworCQkJCQl0cmFuc3BvcnQtPnJ0bykpCiAJCQl0cmFuc3BvcnQtPmN3bmQgPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCQkgNCp0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpOwogCQlicmVhazsKQEAgLTYwOCw2ICs2MTAsNyBAQAogCXQtPmZsaWdodF9zaXplID0gMDsKIAl0LT5lcnJvcl9jb3VudCA9IDA7CiAJdC0+cnRvX3BlbmRpbmcgPSAwOworCXQtPmhiX3NlbnQgPSAwOwogCXQtPmZhc3RfcmVjb3ZlcnkgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIFNGUi1DQUNDICovCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMzVkZDczNy4uMGIxNGI3OSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCQkJZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc29ja2ZzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gc29ja2ZzX2RlbGV0ZV9kZW50cnksCiAJLmRfZG5hbWUgID0gc29ja2ZzX2RuYW1lLAogfTsKQEAgLTU0NSw2ICs1NDUsMTggQEAKIAlzb2NrLT5maWxlID0gTlVMTDsKIH0KIAoraW50IHNvY2tfdHhfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgICB1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4KQoreworCXNodHgtPmZsYWdzID0gMDsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSkpCisJCXNodHgtPmhhcmR3YXJlID0gMTsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSkpCisJCXNodHgtPnNvZnR3YXJlID0gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc29ja190eF90aW1lc3RhbXApOworCiBzdGF0aWMgaW5saW5lIGludCBfX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiB7CkBAIC01OTUsMzMgKzYwNyw2NSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQga3RpbWUydHMoa3RpbWVfdCBrdCwgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAoa3QudHY2NCkgeworCQkqdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKwogLyoKICAqIGNhbGxlZCBmcm9tIHNvY2tfcmVjdl90aW1lc3RhbXAoKSBpZiBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKQogICovCiB2b2lkIF9fc29ja19yZWN2X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWt0aW1lX3Qga3QgPSBza2ItPnRzdGFtcDsKKwlpbnQgbmVlZF9zb2Z0d2FyZV90c3RhbXAgPSBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHNbM107CisJaW50IGVtcHR5ID0gMTsKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNoaHd0c3RhbXBzID0KKwkJc2tiX2h3dHN0YW1wcyhza2IpOwogCi0JaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpKSB7Ci0JCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKLQkJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCi0JCWlmIChrdC50djY0ID09IDApCi0JCQlrdCA9IGt0aW1lX2dldF9yZWFsKCk7Ci0JCXNrYi0+dHN0YW1wID0ga3Q7Ci0JCXR2ID0ga3RpbWVfdG9fdGltZXZhbChrdCk7Ci0JCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUCwgc2l6ZW9mKHR2KSwgJnR2KTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0JCS8qIFJhY2Ugb2NjdXJyZWQgYmV0d2VlbiB0aW1lc3RhbXAgZW5hYmxpbmcgYW5kIHBhY2tldAotCQkgICByZWNlaXZpbmcuICBGaWxsIGluIHRoZSBjdXJyZW50IHRpbWUgZm9yIG5vdy4gKi8KLQkJaWYgKGt0LnR2NjQgPT0gMCkKLQkJCWt0ID0ga3RpbWVfZ2V0X3JlYWwoKTsKLQkJc2tiLT50c3RhbXAgPSBrdDsKLQkJdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7Ci0JCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUE5TLCBzaXplb2YodHMpLCAmdHMpOworCS8qIFJhY2Ugb2NjdXJyZWQgYmV0d2VlbiB0aW1lc3RhbXAgZW5hYmxpbmcgYW5kIHBhY2tldAorCSAgIHJlY2VpdmluZy4gIEZpbGwgaW4gdGhlIGN1cnJlbnQgdGltZSBmb3Igbm93LiAqLworCWlmIChuZWVkX3NvZnR3YXJlX3RzdGFtcCAmJiBza2ItPnRzdGFtcC50djY0ID09IDApCisJCV9fbmV0X3RpbWVzdGFtcChza2IpOworCisJaWYgKG5lZWRfc29mdHdhcmVfdHN0YW1wKSB7CisJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKSkgeworCQkJc3RydWN0IHRpbWV2YWwgdHY7CisJCQlza2JfZ2V0X3RpbWVzdGFtcChza2IsICZ0dik7CisJCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVAsCisJCQkJIHNpemVvZih0diksICZ0dik7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJCQlza2JfZ2V0X3RpbWVzdGFtcG5zKHNrYiwgJnRzKTsKKwkJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1RJTUVTVEFNUE5TLAorCQkJCSBzaXplb2YodHMpLCAmdHMpOworCQl9CiAJfQorCisKKwltZW1zZXQodHMsIDAsIHNpemVvZih0cykpOworCWlmIChza2ItPnRzdGFtcC50djY0ICYmCisJICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpKSB7CisJCXNrYl9nZXRfdGltZXN0YW1wbnMoc2tiLCB0cyArIDApOworCQllbXB0eSA9IDA7CisJfQorCWlmIChzaGh3dHN0YW1wcykgeworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpICYmCisJCSAgICBrdGltZTJ0cyhzaGh3dHN0YW1wcy0+c3lzdHN0YW1wLCB0cyArIDEpKQorCQkJZW1wdHkgPSAwOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpICYmCisJCSAgICBrdGltZTJ0cyhzaGh3dHN0YW1wcy0+aHd0c3RhbXAsIHRzICsgMikpCisJCQllbXB0eSA9IDA7CisJfQorCWlmICghZW1wdHkpCisJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwKKwkJCSBTQ01fVElNRVNUQU1QSU5HLCBzaXplb2YodHMpLCAmdHMpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChfX3NvY2tfcmVjdl90aW1lc3RhbXApOwpAQCAtMTAzMCw2ICsxMDc0LDEzIEBACiAKIAlsb2NrX3NvY2soc2spOwogCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOworCWlmIChvbikKKwkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7CisJZWxzZQorCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CisKIAlwcmV2ID0gJihzb2NrLT5mYXN5bmNfbGlzdCk7CiAKIAlmb3IgKGZhID0gKnByZXY7IGZhICE9IE5VTEw7IHByZXYgPSAmZmEtPmZhX25leHQsIGZhID0gKnByZXYpCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggNTc3Mzg1YS4uOWNlZDA2MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcnBjX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBycGNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gcnBjX2RlbGV0ZV9kZW50cnksCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmMKaW5kZXggMzg1ZjQyNy4uZmY1MGEwNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zY2hlZC5jCisrKyBiL25ldC9zdW5ycGMvc2NoZWQuYwpAQCAtMjkzLDExICsyOTMsNiBAQAogCXJwY19jbGVhcl9xdWV1ZWQodGFzayk7CiAJaWYgKHJwY190ZXN0X2FuZF9zZXRfcnVubmluZyh0YXNrKSkKIAkJcmV0dXJuOwotCS8qIFdlIG1pZ2h0IGhhdmUgcmFjZWQgKi8KLQlpZiAoUlBDX0lTX1FVRVVFRCh0YXNrKSkgewotCQlycGNfY2xlYXJfcnVubmluZyh0YXNrKTsKLQkJcmV0dXJuOwotCX0KIAlpZiAoUlBDX0lTX0FTWU5DKHRhc2spKSB7CiAJCWludCBzdGF0dXM7CiAKQEAgLTYwNyw3ICs2MDIsOSBAQAogICovCiBzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQlpbnQJCXN0YXR1cyA9IDA7CisJc3RydWN0IHJwY193YWl0X3F1ZXVlICpxdWV1ZTsKKwlpbnQgdGFza19pc19hc3luYyA9IFJQQ19JU19BU1lOQyh0YXNrKTsKKwlpbnQgc3RhdHVzID0gMDsKIAogCWRwcmludGsoIlJQQzogJTV1IF9fcnBjX2V4ZWN1dGUgZmxhZ3M9MHgleFxuIiwKIAkJCXRhc2stPnRrX3BpZCwgdGFzay0+dGtfZmxhZ3MpOwpAQCAtNjQ3LDE1ICs2NDQsMjUgQEAKIAkJICovCiAJCWlmICghUlBDX0lTX1FVRVVFRCh0YXNrKSkKIAkJCWNvbnRpbnVlOwotCQlycGNfY2xlYXJfcnVubmluZyh0YXNrKTsKLQkJaWYgKFJQQ19JU19BU1lOQyh0YXNrKSkgewotCQkJLyogQ2FyZWZ1bCEgd2UgbWF5IGhhdmUgcmFjZWQuLi4gKi8KLQkJCWlmIChSUENfSVNfUVVFVUVEKHRhc2spKQotCQkJCXJldHVybjsKLQkJCWlmIChycGNfdGVzdF9hbmRfc2V0X3J1bm5pbmcodGFzaykpCi0JCQkJcmV0dXJuOworCQkvKgorCQkgKiBUaGUgcXVldWUtPmxvY2sgcHJvdGVjdHMgYWdhaW5zdCByYWNlcyB3aXRoCisJCSAqIHJwY19tYWtlX3J1bm5hYmxlKCkuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBvbmNlIHdlIGNsZWFyIFJQQ19UQVNLX1JVTk5JTkcgb24gYW4gYXN5bmNocm9ub3VzCisJCSAqIHJwY190YXNrLCBycGNfbWFrZV9ydW5uYWJsZSgpIGNhbiBhc3NpZ24gaXQgdG8gYQorCQkgKiBkaWZmZXJlbnQgd29ya3F1ZXVlLiBXZSB0aGVyZWZvcmUgY2Fubm90IGFzc3VtZSB0aGF0IHRoZQorCQkgKiBycGNfdGFzayBwb2ludGVyIG1heSBzdGlsbCBiZSBkZXJlZmVyZW5jZWQuCisJCSAqLworCQlxdWV1ZSA9IHRhc2stPnRrX3dhaXRxdWV1ZTsKKwkJc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+bG9jayk7CisJCWlmICghUlBDX0lTX1FVRVVFRCh0YXNrKSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlLT5sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCXJwY19jbGVhcl9ydW5uaW5nKHRhc2spOworCQlzcGluX3VubG9ja19iaCgmcXVldWUtPmxvY2spOworCQlpZiAodGFza19pc19hc3luYykKKwkJCXJldHVybjsKIAogCQkvKiBzeW5jIHRhc2s6IHNsZWVwIGhlcmUgKi8KIAkJZHByaW50aygiUlBDOiAlNXUgc3luYyB0YXNrIGdvaW5nIHRvIHNsZWVwXG4iLCB0YXNrLT50a19waWQpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCAyOWU0MDFiLi42MjA5OGQxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtNjYzLDcgKzY2Myw3IEBACiAJCQl4cHJ0LCAoeHBydF9jb25uZWN0ZWQoeHBydCkgPyAiaXMiIDogImlzIG5vdCIpKTsKIAogCWlmICgheHBydF9ib3VuZCh4cHJ0KSkgewotCQl0YXNrLT50a19zdGF0dXMgPSAtRUlPOworCQl0YXNrLT50a19zdGF0dXMgPSAtRUFHQUlOOwogCQlyZXR1cm47CiAJfQogCWlmICgheHBydF9sb2NrX3dyaXRlKHhwcnQsIHRhc2spKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDVjYmI0MDQuLjU2ODMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCWludCBlcnIsIHNlbnQgPSAwOwogCiAJaWYgKHVubGlrZWx5KCFzb2NrKSkKLQkJcmV0dXJuIC1FTk9UQ09OTjsKKwkJcmV0dXJuIC1FTk9UU09DSzsKIAogCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7CiAJaWYgKGJhc2UgIT0gMCkgewpAQCAtNTc3LDYgKzU3Nyw4IEBACiAJCQkJcmVxLT5ycV9zdmVjLT5pb3ZfYmFzZSwKIAkJCQlyZXEtPnJxX3N2ZWMtPmlvdl9sZW4pOwogCisJaWYgKCF4cHJ0X2JvdW5kKHhwcnQpKQorCQlyZXR1cm4gLUVOT1RDT05OOwogCXN0YXR1cyA9IHhzX3NlbmRwYWdlcyh0cmFuc3BvcnQtPnNvY2ssCiAJCQkgICAgICB4c19hZGRyKHhwcnQpLAogCQkJICAgICAgeHBydC0+YWRkcmxlbiwgeGRyLApAQCAtNTk0LDYgKzU5NiwxMCBAQAogCX0KIAogCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAtRU5PVFNPQ0s6CisJCXN0YXR1cyA9IC1FTk9UQ09OTjsKKwkJLyogU2hvdWxkIHdlIGNhbGwgeHNfY2xvc2UoKSBoZXJlPyAqLworCQlicmVhazsKIAljYXNlIC1FQUdBSU46CiAJCXhzX25vc3BhY2UodGFzayk7CiAJCWJyZWFrOwpAQCAtNjkzLDYgKzY5OSwxMCBAQAogCX0KIAogCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAtRU5PVFNPQ0s6CisJCXN0YXR1cyA9IC1FTk9UQ09OTjsKKwkJLyogU2hvdWxkIHdlIGNhbGwgeHNfY2xvc2UoKSBoZXJlPyAqLworCQlicmVhazsKIAljYXNlIC1FQUdBSU46CiAJCXhzX25vc3BhY2UodGFzayk7CiAJCWJyZWFrOwpAQCAtMTIxNSw2ICsxMjI1LDIzIEBACiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgeHNfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHJwY194cHJ0ICp4cHJ0OworCisJaWYgKHVubGlrZWx5KCEoc29jayA9IHNrLT5za19zb2NrZXQpKSkKKwkJcmV0dXJuOworCWNsZWFyX2JpdChTT0NLX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7CisKKwlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCisJCXJldHVybjsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQorCQlyZXR1cm47CisKKwl4cHJ0X3dyaXRlX3NwYWNlKHhwcnQpOworfQorCiAvKioKICAqIHhzX3VkcF93cml0ZV9zcGFjZSAtIGNhbGxiYWNrIGludm9rZWQgd2hlbiBzb2NrZXQgYnVmZmVyIHNwYWNlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lcyBhdmFpbGFibGUKQEAgLTEyMzAsMjMgKzEyNTcsOSBAQAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCiAJLyogZnJvbSBuZXQvY29yZS9zb2NrLmM6c29ja19kZWZfd3JpdGVfc3BhY2UgKi8KLQlpZiAoc29ja193cml0ZWFibGUoc2spKSB7Ci0JCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKwlpZiAoc29ja193cml0ZWFibGUoc2spKQorCQl4c193cml0ZV9zcGFjZShzayk7CiAKLQkJaWYgKHVubGlrZWx5KCEoc29jayA9IHNrLT5za19zb2NrZXQpKSkKLQkJCWdvdG8gb3V0OwotCQljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwotCi0JCWlmICh1bmxpa2VseSghKHhwcnQgPSB4cHJ0X2Zyb21fc29jayhzaykpKSkKLQkJCWdvdG8gb3V0OwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQotCQkJZ290byBvdXQ7Ci0KLQkJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKLQl9Ci0KLSBvdXQ6CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIApAQCAtMTI2NSwyMyArMTI3OCw5IEBACiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAKIAkvKiBmcm9tIG5ldC9jb3JlL3N0cmVhbS5jOnNrX3N0cmVhbV93cml0ZV9zcGFjZSAqLwotCWlmIChza19zdHJlYW1fd3NwYWNlKHNrKSA+PSBza19zdHJlYW1fbWluX3dzcGFjZShzaykpIHsKLQkJc3RydWN0IHNvY2tldCAqc29jazsKLQkJc3RydWN0IHJwY194cHJ0ICp4cHJ0OworCWlmIChza19zdHJlYW1fd3NwYWNlKHNrKSA+PSBza19zdHJlYW1fbWluX3dzcGFjZShzaykpCisJCXhzX3dyaXRlX3NwYWNlKHNrKTsKIAotCQlpZiAodW5saWtlbHkoIShzb2NrID0gc2stPnNrX3NvY2tldCkpKQotCQkJZ290byBvdXQ7Ci0JCWNsZWFyX2JpdChTT0NLX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7Ci0KLQkJaWYgKHVubGlrZWx5KCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpKQotCQkJZ290byBvdXQ7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpID09IDApCi0JCQlnb3RvIG91dDsKLQotCQl4cHJ0X3dyaXRlX3NwYWNlKHhwcnQpOwotCX0KLQotIG91dDoKIAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQogCkBAIC0xNTIzLDcgKzE1MjIsNyBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CiAJaW50IGVyciwgc3RhdHVzID0gLUVJTzsKIAotCWlmICh4cHJ0LT5zaHV0ZG93biB8fCAheHBydF9ib3VuZCh4cHJ0KSkKKwlpZiAoeHBydC0+c2h1dGRvd24pCiAJCWdvdG8gb3V0OwogCiAJLyogU3RhcnQgYnkgcmVzZXR0aW5nIGFueSBleGlzdGluZyBzdGF0ZSAqLwpAQCAtMTU2NCw3ICsxNTYzLDcgQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdHJhbnNwb3J0LT5zb2NrOwogCWludCBlcnIsIHN0YXR1cyA9IC1FSU87CiAKLQlpZiAoeHBydC0+c2h1dGRvd24gfHwgIXhwcnRfYm91bmQoeHBydCkpCisJaWYgKHhwcnQtPnNodXRkb3duKQogCQlnb3RvIG91dDsKIAogCS8qIFN0YXJ0IGJ5IHJlc2V0dGluZyBhbnkgZXhpc3Rpbmcgc3RhdGUgKi8KQEAgLTE2NDgsNiArMTY0Nyw5IEBACiAJCXdyaXRlX3VubG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCX0KIAorCWlmICgheHBydF9ib3VuZCh4cHJ0KSkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKwogCS8qIFRlbGwgdGhlIHNvY2tldCBsYXllciB0byBzdGFydCBjb25uZWN0aW5nLi4uICovCiAJeHBydC0+c3RhdC5jb25uZWN0X2NvdW50Kys7CiAJeHBydC0+c3RhdC5jb25uZWN0X3N0YXJ0ID0gamlmZmllczsKQEAgLTE2NjgsNyArMTY3MCw3IEBACiAJc3RydWN0IHNvY2tldCAqc29jayA9IHRyYW5zcG9ydC0+c29jazsKIAlpbnQgZXJyLCBzdGF0dXMgPSAtRUlPOwogCi0JaWYgKHhwcnQtPnNodXRkb3duIHx8ICF4cHJ0X2JvdW5kKHhwcnQpKQorCWlmICh4cHJ0LT5zaHV0ZG93bikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXNvY2spIHsKQEAgLTE3MjgsNyArMTczMCw3IEBACiAJc3RydWN0IHNvY2tldCAqc29jayA9IHRyYW5zcG9ydC0+c29jazsKIAlpbnQgZXJyLCBzdGF0dXMgPSAtRUlPOwogCi0JaWYgKHhwcnQtPnNodXRkb3duIHx8ICF4cHJ0X2JvdW5kKHhwcnQpKQorCWlmICh4cHJ0LT5zaHV0ZG93bikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXNvY2spIHsKZGlmZiAtLWdpdCBhL25ldC9zeXNjdGxfbmV0LmMgYi9uZXQvc3lzY3RsX25ldC5jCmluZGV4IDk3MjIwMWMuLjBiMTVkNzIgMTAwNjQ0Ci0tLSBhL25ldC9zeXNjdGxfbmV0LmMKKysrIGIvbmV0L3N5c2N0bF9uZXQuYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIGludCBuZXRfY3RsX3JvX2hlYWRlcl9wZXJtcyhzdHJ1Y3QgY3RsX3RhYmxlX3Jvb3QgKnJvb3QsCiAJCXN0cnVjdCBuc3Byb3h5ICpuYW1lc3BhY2VzLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKIHsKLQlpZiAobmFtZXNwYWNlcy0+bmV0X25zID09ICZpbml0X25ldCkKKwlpZiAobmV0X2VxKG5hbWVzcGFjZXMtPm5ldF9ucywgJmluaXRfbmV0KSkKIAkJcmV0dXJuIHRhYmxlLT5tb2RlOwogCWVsc2UKIAkJcmV0dXJuIHRhYmxlLT5tb2RlICYgfjAyMjI7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5jIGIvbmV0L3RpcGMvYmNhc3QuYwppbmRleCAzZGRhZmY0Li5hM2JmZDQwIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTExOSw3ICsxMTksNyBAQAogc3RhdGljIHN0cnVjdCBsaW5rICpiY2wgPSBOVUxMOwogc3RhdGljIERFRklORV9TUElOTE9DSyhiY19sb2NrKTsKIAotY2hhciB0aXBjX2JjbGlua19uYW1lW10gPSAibXVsdGljYXN0LWxpbmsiOworY29uc3QgY2hhciB0aXBjX2JjbGlua19uYW1lW10gPSAibXVsdGljYXN0LWxpbmsiOwogCiAKIHN0YXRpYyB1MzIgYnVmX3NlcW5vKHN0cnVjdCBza19idWZmICpidWYpCkBAIC04MDAsNyArODAwLDcgQEAKIAl0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhiY2wsIEJDTElOS19XSU5fREVGQVVMVCk7CiAJYmNsLT5iX3B0ciA9ICZiY2JlYXJlci0+YmVhcmVyOwogCWJjbC0+c3RhdGUgPSBXT1JLSU5HX1dPUktJTkc7Ci0Jc3ByaW50ZihiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUpOworCXN0cmxjcHkoYmNsLT5uYW1lLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCiAJaWYgKEJDTElOS19MT0dfQlVGX1NJWkUpIHsKIAkJY2hhciAqcGIgPSBrbWFsbG9jKEJDTElOS19MT0dfQlVGX1NJWkUsIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmNhc3QuaCBiL25ldC90aXBjL2JjYXN0LmgKaW5kZXggMmYyZDczMS4uNGMxNzcxZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmNhc3QuaAorKysgYi9uZXQvdGlwYy9iY2FzdC5oCkBAIC03MCw3ICs3MCw3IEBACiAKIHN0cnVjdCB0aXBjX25vZGU7CiAKLWV4dGVybiBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXTsKIAogCiAvKioKZGlmZiAtLWdpdCBhL25ldC90aXBjL2RiZy5jIGIvbmV0L3RpcGMvZGJnLmMKaW5kZXggMjllY2FlOC4uMTg4NWE3ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGJnLmMKKysrIGIvbmV0L3RpcGMvZGJnLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCX0KIAogCWlmIChwYi0+ZWNobykKLQkJcHJpbnRrKHByaW50X3N0cmluZyk7CisJCXByaW50aygiJXMiLCBwcmludF9zdHJpbmcpOwogCiAJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jCmluZGV4IDIwZDk4YzUuLjJjMjRlN2QgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuYworKysgYi9uZXQvdGlwYy9ub2RlLmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogCiAJbGlua19pbmZvLmRlc3QgPSBodG9ubCh0aXBjX293bl9hZGRyICYgMHhmZmZmZjAwKTsKIAlsaW5rX2luZm8udXAgPSBodG9ubCgxKTsKLQlzcHJpbnRmKGxpbmtfaW5mby5zdHIsIHRpcGNfYmNsaW5rX25hbWUpOworCXN0cmxjcHkobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSwgVElQQ19NQVhfTElOS19OQU1FKTsKIAl0aXBjX2NmZ19hcHBlbmRfdGx2KGJ1ZiwgVElQQ19UTFZfTElOS19JTkZPLCAmbGlua19pbmZvLCBzaXplb2YobGlua19pbmZvKSk7CiAKIAkvKiBBZGQgVExWcyBmb3IgYW55IG90aGVyIGxpbmtzIGluIHNjb3BlICovCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggZDFiODk4Mi4uYmFhYzkxMCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTE3OCw4ICsxMTc4LDcgQEAKIAkJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOwogCiBvdXQ6Ci0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAJaWYgKG5ld3NrKQogCQl1bml4X3JlbGVhc2Vfc29jayhuZXdzaywgMCk7CiAJaWYgKG90aGVyKQpkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwppbmRleCAzOTcwMWRlLi40NjZlMmQyIDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYworKysgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwpAQCAtODYsOCArODYsMTAgQEAKIAogc3RhdGljIHN0cnVjdCB3YW5fZGV2aWNlICp3YW5yb3V0ZXJfZmluZF9kZXZpY2UoY2hhciAqbmFtZSk7CiBzdGF0aWMgaW50IHdhbnJvdXRlcl9kZWxldGVfaW50ZXJmYWNlKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIGNoYXIgKm5hbWUpOwotc3RhdGljIHZvaWQgbG9ja19hZGFwdGVyX2lycShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7CitzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spOworc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spOwogCiAKIApAQCAtNzYzLDEyICs3NjUsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgbG9ja19hZGFwdGVyX2lycShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCisJX19hY3F1aXJlcyhsb2NrKQogewogCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssICpzbXBfZmxhZ3MpOwogfQogCiAKIHN0YXRpYyB2b2lkIHVubG9ja19hZGFwdGVyX2lycShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCisJX19yZWxlYXNlcyhsb2NrKQogewogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgKnNtcF9mbGFncyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCmluZGV4IDI2N2Y3ZmYuLmM0NGQ5NmIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCkBAIC04MCw2ICs4MCw3IEBACiAgKglJdGVyYXRvcgogICovCiBzdGF0aWMgdm9pZCAqcl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoa2VybmVsX2xvY2spCiB7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldjsKIAlsb2ZmX3QgbCA9ICpwb3M7CkBAIC0xMDEsNiArMTAyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcl9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKQogewogCXVubG9ja19rZXJuZWwoKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aW1heC9vcC1tc2cuYyBiL25ldC93aW1heC9vcC1tc2cuYwppbmRleCBjYjNiNGFkLi41ZDE0OWMxIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvb3AtbXNnLmMKKysrIGIvbmV0L3dpbWF4L29wLW1zZy5jCkBAIC0yNTgsNyArMjU4LDYgQEAKICAqLwogaW50IHdpbWF4X21zZ19zZW5kKHN0cnVjdCB3aW1heF9kZXYgKndpbWF4X2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmVzdWx0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHdpbWF4X2Rldi0+bmV0X2Rldi0+ZGV2LnBhcmVudDsKIAl2b2lkICptc2cgPSBza2ItPmRhdGE7CiAJc2l6ZV90IHNpemUgPSBza2ItPmxlbjsKQEAgLTI2NiwxMSArMjY1LDkgQEAKIAogCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogd2ltYXggbXNnLCAlenUgYnl0ZXNcbiIsIHNpemUpOwogCWRfZHVtcCgyLCBkZXYsIG1zZywgc2l6ZSk7Ci0JcmVzdWx0ID0gZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKLQlkX3ByaW50ZigxLCBkZXYsICJDVFg6IGdlbmwgbXVsdGljYXN0IHJlc3VsdCAlZFxuIiwgcmVzdWx0KTsKLQlpZiAocmVzdWx0ID09IC1FU1JDSCkJLyogTm9ib2R5IGNvbm5lY3RlZCwgaWdub3JlIGl0ICovCi0JCXJlc3VsdCA9IDA7CS8qIGJ0dywgdGhlIHNrYiBpcyBmcmVlZCBhbHJlYWR5ICovCi0JcmV0dXJuIHJlc3VsdDsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHdpbWF4X2dubF9tY2cuaWQsIEdGUF9LRVJORUwpOworCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogZ2VubCBtdWx0aWNhc3QgZG9uZVxuIik7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3aW1heF9tc2dfc2VuZCk7CiAKZGlmZiAtLWdpdCBhL25ldC93aW1heC9zdGFjay5jIGIvbmV0L3dpbWF4L3N0YWNrLmMKaW5kZXggMzg2OWMwMy4uYTBlZTc2YiAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L3N0YWNrLmMKKysrIGIvbmV0L3dpbWF4L3N0YWNrLmMKQEAgLTE2MywxNiArMTYzLDEyIEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2ltYXhfZGV2X3RvX2Rldih3aW1heF9kZXYpOwogCWRfZm5zdGFydCgzLCBkZXYsICIod2ltYXhfZGV2ICVwIHJlcG9ydF9za2IgJXApXG4iLAogCQkgIHdpbWF4X2RldiwgcmVwb3J0X3NrYik7Ci0JaWYgKHJlcG9ydF9za2IgPT0gTlVMTCkKKwlpZiAocmVwb3J0X3NrYiA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwotCWdlbmxtc2dfZW5kKHJlcG9ydF9za2IsIGhlYWRlcik7Ci0JcmVzdWx0ID0gZ2VubG1zZ19tdWx0aWNhc3QocmVwb3J0X3NrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCA9PSAtRVNSQ0gpCS8qIE5vYm9keSBjb25uZWN0ZWQsIGlnbm9yZSBpdCAqLwotCQlyZXN1bHQgPSAwOwkvKiBidHcsIHRoZSBza2IgaXMgZnJlZWQgYWxyZWFkeSAqLwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiUkVfU1RDSDogRXJyb3Igc2VuZGluZzogJWRcbiIsIHJlc3VsdCk7Ci0JCW5sbXNnX2ZyZWUocmVwb3J0X3NrYik7CiAJfQorCWdlbmxtc2dfZW5kKHJlcG9ydF9za2IsIGhlYWRlcik7CisJZ2VubG1zZ19tdWx0aWNhc3QocmVwb3J0X3NrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7CiBvdXQ6CiAJZF9mbmVuZCgzLCBkZXYsICIod2ltYXhfZGV2ICVwIHJlcG9ydF9za2IgJXApID0gJWRcbiIsCiAJCXdpbWF4X2RldiwgcmVwb3J0X3NrYiwgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9LY29uZmlnIGIvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggZTI4ZTJiOC4uM2MzYmM5ZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTEwLDUxICsxMCwxOSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgTkw4MDIxMQotCWJvb2wgIm5sODAyMTEgbmV3IG5ldGxpbmsgaW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDRkc4MDIxMQotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSBuZXcgbmV0bGluayBpbnRlcmZhY2UKLQkgIChubDgwMjExKSBzdXBwb3J0IGluIGNmZzgwMjExLgotCi0JICBJZiA9biwgZHJpdmVycyB1c2luZyBtYWM4MDIxMSB3aWxsIGJlIGNvbmZpZ3VyZWQgdmlhCi0JICB3aXJlbGVzcyBleHRlbnNpb24gc3VwcG9ydCBwcm92aWRlZCBieSB0aGF0IHN1YnN5c3RlbS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQogY29uZmlnIFdJUkVMRVNTX09MRF9SRUdVTEFUT1JZCiAJYm9vbCAiT2xkIHdpcmVsZXNzIHN0YXRpYyByZWd1bGF0b3J5IGRlZmluaXRpb25zIgotCWRlZmF1bHQgeQorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG9sZCBzdGF0aWMgcmVndWxhdG9yeSBpbmZvcm1hdGlvbgotCSAgYW5kIHVzZXMgaXQgd2l0aGluIHRoZSBuZXcgZnJhbWV3b3JrLiBUaGlzIGlzIGF2YWlsYWJsZQotCSAgdGVtcG9yYXJpbHkgYXMgYW4gb3B0aW9uIHRvIGhlbHAgcHJldmVudCBpbW1lZGlhdGUgaXNzdWVzCi0JICBkdWUgdG8gdGhlIHN3aXRjaCB0byB0aGUgbmV3IHJlZ3VsYXRvcnkgZnJhbWV3b3JrIHdoaWNoCi0JICBkb2VzIHJlcXVpcmUgYSBuZXcgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHdoaWNoIGhhcyB0aGUKLQkgIGRhdGFiYXNlIG9mIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gKENSREEpIGFuZCBhbm90aGVyIGZvcgotCSAgc2V0dGluZyByZWd1bGF0b3J5IGRvbWFpbnMgKGl3KS4KKwkgIGFuZCB1c2VzIGl0IHdpdGhpbiB0aGUgbmV3IGZyYW1ld29yay4gVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlCisJICBmb3IgaGlzdG9yaWNhbCByZWFzb25zIGFuZCBpdCBpcyBhZHZpc2VkIHRvIGxlYXZlIGl0IG9mZi4KIAotCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOgorCSAgRm9yIGRldGFpbHMgc2VlOgogCi0JICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL1JlZ3VsYXRvcnkvQ1JEQQotCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRG9jdW1lbnRhdGlvbi9pdworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9SZWd1bGF0b3J5CiAKLQkgIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRob3VnaCB0aGF0IGlmIHlvdSAqZG8qIGhhdmUgQ1JEQSBwcmVzZW50Ci0JICBhbmQgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBDUkRBICp3aWxsKiBiZSBjYWxsZWQgdG8gdXBkYXRlIHRoZQotCSAgcmVndWxhdG9yeSBkb21haW4gKGZvciBVUyBhbmQgSlAgb25seSkuIFN1cHBvcnQgZm9yIGxldHRpbmcgdGhlIHVzZXIKLQkgIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4gdGhyb3VnaCBpdyBpcyBhbHNvIHN1cHBvcnRlZC4gVGhpcyBvcHRpb24KLQkgIG1haW5seSBleGlzdHMgdG8gbGVhdmUgYXJvdW5kIGZvciBhIGtlcm5lbCByZWxlYXNlIHNvbWUgb2xkIHN0YXRpYwotCSAgcmVndWxhdG9yeSBkb21haW5zIHRoYXQgd2VyZSBkZWZpbmVkIGFuZCB0byBrZWVwIGFyb3VuZCB0aGUgb2xkCi0JICBpZWVlODAyMTFfcmVnZG9tIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgaXMgYmVpbmcgcGhhc2VkIG91dCBhbmQgeW91Ci0JICBzaG91bGQgc3RvcCB1c2luZyB0aGVtIEFTQVAuCi0KLQkgIE5vdGU6IFlvdSB3aWxsIG5lZWQgQ1JEQSBpZiB5b3Ugd2FudCA4MDIuMTFkIHN1cHBvcnQKLQotCSAgU2F5IFkgdW5sZXNzIHlvdSBoYXZlIGluc3RhbGxlZCBhIG5ldyB1c2Vyc3BhY2UgYXBwbGljYXRpb24uCi0JICBBbHNvIHNheSBZIGlmIGhhdmUgb25lIGN1cnJlbnRseSBkZXBlbmRpbmcgb24gdGhlIGllZWU4MDIxMV9yZWdkb20KLQkgIG1vZHVsZSBwYXJhbWV0ZXIgYW5kIGNhbm5vdCBwb3J0IGl0IHRvIHVzZSB0aGUgbmV3IHVzZXJzcGFjZQotCSAgaW50ZXJmYWNlcy4KKwkgIFNheSBOIGFuZCBpZiB5b3Ugc2F5IFksIHBsZWFzZSB0ZWxsIHVzIHdoeS4gVGhlIGRlZmF1bHQgaXMgTi4KIAogY29uZmlnIFdJUkVMRVNTX0VYVAogCWJvb2wgIldpcmVsZXNzIGV4dGVuc2lvbnMiCkBAIC0xMDIsMyArNzAsMTMgQEAKIAogY29uZmlnIExJQjgwMjExX0NSWVBUX1RLSVAKIAl0cmlzdGF0ZQorCitjb25maWcgTElCODAyMTFfREVCVUcKKwlib29sICJsaWI4MDIxMSBkZWJ1Z2dpbmcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBMSUI4MDIxMQorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFlvdSBjYW4gZW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMKKwkgIGZyb20gbGliODAyMTEuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKaW5kZXggOTM4YTMzNC4uNmQxZTdiMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL01ha2VmaWxlCisrKyBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtNSw4ICs1LDcgQEAKIG9iai0kKENPTkZJR19MSUI4MDIxMV9DUllQVF9DQ01QKSArPSBsaWI4MDIxMV9jcnlwdF9jY21wLm8KIG9iai0kKENPTkZJR19MSUI4MDIxMV9DUllQVF9US0lQKSArPSBsaWI4MDIxMV9jcnlwdF90a2lwLm8KIAotY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubworY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vIG1sbWUubwogY2ZnODAyMTEtJChDT05GSUdfV0lSRUxFU1NfRVhUKSArPSB3ZXh0LWNvbXBhdC5vCi1jZmc4MDIxMS0kKENPTkZJR19OTDgwMjExKSArPSBubDgwMjExLm8KIAogY2NmbGFncy15ICs9IC1EX19DSEVDS19FTkRJQU5fXwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggYjk2ZmMwYy4uZDFmNTU2NSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KQEAgLTMxLDE4ICszMCwyOSBAQAogICogb25seSByZWFkIHRoZSBsaXN0LCBhbmQgdGhhdCBjYW4gaGFwcGVuIHF1aXRlCiAgKiBvZnRlbiBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gaXQgZm9yIGVhY2ggY29tbWFuZCAqLwogTElTVF9IRUFEKGNmZzgwMjExX2Rydl9saXN0KTsKLURFRklORV9NVVRFWChjZmc4MDIxMV9kcnZfbXV0ZXgpOworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGNmZzgwMjExX2Rydl9saXN0LCBjZmc4MDIxMV9yZWdkb21haW4sCisgKiBjb3VudHJ5X2llX3JlZ2RvbWFpbiwgdGhlIHJlZ19iZWFjb25fbGlzdCBhbmQgdGhlIHRoZSBsYXN0IHJlZ3VsYXRvcnkKKyAqIHJlcXVlc3QgcmVjZWlwdCAobGFzdF9yZXF1ZXN0KS4KKyAqLworREVGSU5FX01VVEVYKGNmZzgwMjExX211dGV4KTsKIAogLyogZm9yIGRlYnVnZnMgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppZWVlODAyMTFfZGVidWdmc19kaXI7CiAKLS8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLwotc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5KGludCB3aXBoeSkKKy8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQhICovCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCkKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJlc3VsdCA9IE5VTEwsICpkcnY7CiAKKwlpZiAoIXdpcGh5X2lkeF92YWxpZCh3aXBoeV9pZHgpKQorCQlyZXR1cm4gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7Ci0JCWlmIChkcnYtPmlkeCA9PSB3aXBoeSkgeworCQlpZiAoZHJ2LT53aXBoeV9pZHggPT0gd2lwaHlfaWR4KSB7CiAJCQlyZXN1bHQgPSBkcnY7CiAJCQlicmVhazsKIAkJfQpAQCAtNTEsMTcgKzYxLDQ0IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAoraW50IGdldF93aXBoeV9pZHgoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlpZiAoIXdpcGh5KQorCQlyZXR1cm4gV0lQSFlfSURYX1NUQUxFOworCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJcmV0dXJuIGRydi0+d2lwaHlfaWR4OworfQorCiAvKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KLXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgorc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKworCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWRydiA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KTsKKwlpZiAoIWRydikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZkcnYtPndpcGh5OworfQorCisvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkISAqLworc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIF9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCWludCBpZmluZGV4OwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqYnl3aXBoeSA9IE5VTEwsICpieWlmaWR4ID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmJ5d2lwaHlpZHggPSBOVUxMLCAqYnlpZmlkeCA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAorCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkgewotCQlieXdpcGh5ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5KAorCQlieXdpcGh5aWR4ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKIAkJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFldKSk7CiAJCWVyciA9IC1FTk9ERVY7CiAJfQpAQCAtNzgsMTQgKzExNSwxNCBAQAogCQllcnIgPSAtRU5PREVWOwogCX0KIAotCWlmIChieXdpcGh5ICYmIGJ5aWZpZHgpIHsKLQkJaWYgKGJ5d2lwaHkgIT0gYnlpZmlkeCkKKwlpZiAoYnl3aXBoeWlkeCAmJiBieWlmaWR4KSB7CisJCWlmIChieXdpcGh5aWR4ICE9IGJ5aWZpZHgpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAkJZWxzZQotCQkJcmV0dXJuIGJ5d2lwaHk7IC8qID09IGJ5aWZpZHggKi8KKwkJCXJldHVybiBieXdpcGh5aWR4OyAvKiA9PSBieWlmaWR4ICovCiAJfQotCWlmIChieXdpcGh5KQotCQlyZXR1cm4gYnl3aXBoeTsKKwlpZiAoYnl3aXBoeWlkeCkKKwkJcmV0dXJuIGJ5d2lwaHlpZHg7CiAKIAlpZiAoYnlpZmlkeCkKIAkJcmV0dXJuIGJ5aWZpZHg7CkBAIC05OCw3ICsxMzUsNyBAQAogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJZHJ2ID0gX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKGluZm8pOwogCiAJLyogaWYgaXQgaXMgbm90IGFuIGVycm9yIHdlIGdyYWIgdGhlIGxvY2sgb24KQEAgLTEwNyw3ICsxNDQsNyBAQAogCWlmICghSVNfRVJSKGRydikpCiAJCW11dGV4X2xvY2soJmRydi0+bXR4KTsKIAotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAogCXJldHVybiBkcnY7CiB9CkBAIC0xMTgsNyArMTU1LDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7CkBAIC0xMjksNyArMTY2LDcgQEAKIAkJZHJ2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlkZXZfcHV0KGRldik7CiAgb3V0OgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAlyZXR1cm4gZHJ2OwogfQogCkBAIC0xMzksNDkgKzE3Niw0MyBAQAogCW11dGV4X3VubG9jaygmZHJ2LT5tdHgpOwogfQogCisvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkICovCiBpbnQgY2ZnODAyMTFfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQljaGFyICpuZXduYW1lKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwotCWludCBpZHgsIHRha2VuID0gLTEsIHJlc3VsdCwgZGlnaXRzOworCWludCB3aXBoeV9pZHgsIHRha2VuID0gLTEsIHJlc3VsdCwgZGlnaXRzOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOwogCiAJLyogcHJvaGliaXQgY2FsbGluZyB0aGUgdGhpbmcgcGh5JWQgd2hlbiAlZCBpcyBub3QgaXRzIG51bWJlciAqLwotCXNzY2FuZihuZXduYW1lLCBQSFlfTkFNRSAiJWQlbiIsICZpZHgsICZ0YWtlbik7Ci0JaWYgKHRha2VuID09IHN0cmxlbihuZXduYW1lKSAmJiBpZHggIT0gcmRldi0+aWR4KSB7Ci0JCS8qIGNvdW50IG51bWJlciBvZiBwbGFjZXMgbmVlZGVkIHRvIHByaW50IGlkeCAqLworCXNzY2FuZihuZXduYW1lLCBQSFlfTkFNRSAiJWQlbiIsICZ3aXBoeV9pZHgsICZ0YWtlbik7CisJaWYgKHRha2VuID09IHN0cmxlbihuZXduYW1lKSAmJiB3aXBoeV9pZHggIT0gcmRldi0+d2lwaHlfaWR4KSB7CisJCS8qIGNvdW50IG51bWJlciBvZiBwbGFjZXMgbmVlZGVkIHRvIHByaW50IHdpcGh5X2lkeCAqLwogCQlkaWdpdHMgPSAxOwotCQl3aGlsZSAoaWR4IC89IDEwKQorCQl3aGlsZSAod2lwaHlfaWR4IC89IDEwKQogCQkJZGlnaXRzKys7CiAJCS8qCiAJCSAqIGRlbnkgdGhlIG5hbWUgaWYgaXQgaXMgcGh5PGlkeD4gd2hlcmUgPGlkeD4gaXMgcHJpbnRlZAogCQkgKiB3aXRob3V0IGxlYWRpbmcgemVyb2VzLiB0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgaGVyZQogCQkgKi8KLQkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJaWYgKHRha2VuID09IHN0cmxlbihQSFlfTkFNRSkgKyBkaWdpdHMpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAogCS8qIElnbm9yZSBub3AgcmVuYW1lcyAqLwotCXJlc3VsdCA9IDA7CiAJaWYgKHN0cmNtcChuZXduYW1lLCBkZXZfbmFtZSgmcmRldi0+d2lwaHkuZGV2KSkgPT0gMCkKLQkJZ290byBvdXRfdW5sb2NrOworCQlyZXR1cm4gMDsKIAogCS8qIEVuc3VyZSBhbm90aGVyIGRldmljZSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgdGhpcyBuYW1lLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKLQkJcmVzdWx0ID0gLUVJTlZBTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQogCQlpZiAoc3RyY21wKG5ld25hbWUsIGRldl9uYW1lKCZkcnYtPndpcGh5LmRldikpID09IDApCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0JfQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiB0aGlzIHdpbGwgb25seSBjaGVjayBmb3IgY29sbGlzaW9ucyBpbiBzeXNmcwotCSAqIHdoaWNoIGlzIG5vdCBldmVuIGFsd2F5cyBjb21waWxlZCBpbi4KLQkgKi8KIAlyZXN1bHQgPSBkZXZpY2VfcmVuYW1lKCZyZGV2LT53aXBoeS5kZXYsIG5ld25hbWUpOwogCWlmIChyZXN1bHQpCi0JCWdvdG8gb3V0X3VubG9jazsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCWlmIChyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyICYmCiAJICAgICFkZWJ1Z2ZzX3JlbmFtZShyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyLT5kX3BhcmVudCwKQEAgLTE5MSwxMyArMjIyLDkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJjZmc4MDIxMTogZmFpbGVkIHRvIHJlbmFtZSBkZWJ1Z2ZzIGRpciB0byAlcyFcbiIsCiAJCSAgICAgICBuZXduYW1lKTsKIAotCXJlc3VsdCA9IDA7Ci1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlpZiAocmVzdWx0ID09IDApCi0JCW5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUocmRldik7CisJbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShyZGV2KTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qIGV4cG9ydGVkIGZ1bmN0aW9ucyAqLwpAQCAtMjIwLDI2ICsyNDcsMjggQEAKIAogCWRydi0+b3BzID0gb3BzOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlkcnYtPmlkeCA9IHdpcGh5X2NvdW50ZXIrKzsKKwlkcnYtPndpcGh5X2lkeCA9IHdpcGh5X2NvdW50ZXIrKzsKIAotCWlmICh1bmxpa2VseShkcnYtPmlkeCA8IDApKSB7CisJaWYgKHVubGlrZWx5KCF3aXBoeV9pZHhfdmFsaWQoZHJ2LT53aXBoeV9pZHgpKSkgewogCQl3aXBoeV9jb3VudGVyLS07Ci0JCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCS8qIHVnaCwgd3JhcHBlZCEgKi8KIAkJa2ZyZWUoZHJ2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogZ2l2ZSBpdCBhIHByb3BlciBuYW1lICovCi0JZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT5pZHgpOworCWRldl9zZXRfbmFtZSgmZHJ2LT53aXBoeS5kZXYsIFBIWV9OQU1FICIlZCIsIGRydi0+d2lwaHlfaWR4KTsKIAogCW11dGV4X2luaXQoJmRydi0+bXR4KTsKIAltdXRleF9pbml0KCZkcnYtPmRldmxpc3RfbXR4KTsKIAlJTklUX0xJU1RfSEVBRCgmZHJ2LT5uZXRkZXZfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmRydi0+YnNzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkcnYtPmJzc19saXN0KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZkcnYtPndpcGh5LmRldik7CiAJZHJ2LT53aXBoeS5kZXYuY2xhc3MgPSAmaWVlZTgwMjExX2NsYXNzOwpAQCAtMjU5LDYgKzI4OCw5IEBACiAJaW50IGk7CiAJdTE2IGlmbW9kZXMgPSB3aXBoeS0+aW50ZXJmYWNlX21vZGVzOwogCisJaWYgKFdBUk5fT04od2lwaHktPm1heF9zY2FuX3NzaWRzIDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogc2FuaXR5IGNoZWNrIGlmbW9kZXMgKi8KIAlXQVJOX09OKCFpZm1vZGVzKTsKIAlpZm1vZGVzICY9ICgoMSA8PCBfX05MODAyMTFfSUZUWVBFX0FGVEVSX0xBU1QpIC0gMSkgJiB+MTsKQEAgLTI3MywxMCArMzA1LDE2IEBACiAKIAkJc2JhbmQtPmJhbmQgPSBiYW5kOwogCi0JCWlmICghc2JhbmQtPm5fY2hhbm5lbHMgfHwgIXNiYW5kLT5uX2JpdHJhdGVzKSB7Ci0JCQlXQVJOX09OKDEpOworCQlpZiAoV0FSTl9PTighc2JhbmQtPm5fY2hhbm5lbHMgfHwgIXNiYW5kLT5uX2JpdHJhdGVzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CisKKwkJLyoKKwkJICogU2luY2Ugd2UgdXNlIGEgdTMyIGZvciByYXRlIGJpdG1hcHMgaW4KKwkJICogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlLCB3ZSBjYW5ub3QKKwkJICogaGF2ZSBtb3JlIHRoYW4gMzIgbGVnYWN5IHJhdGVzLgorCQkgKi8KKwkJaWYgKFdBUk5fT04oc2JhbmQtPm5fYml0cmF0ZXMgPiAzMikpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewogCQkJc2JhbmQtPmNoYW5uZWxzW2ldLm9yaWdfZmxhZ3MgPQpAQCAtMjk5LDEwICszMzcsMTAgQEAKIAkvKiBjaGVjayBhbmQgc2V0IHVwIGJpdHJhdGVzICovCiAJaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHdpcGh5KTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHJlZ3VsYXRvcnkgaW5mbyAqLwotCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBSRUdET01fU0VUX0JZX0NPUkUpOworCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSk7CiAKIAlyZXMgPSBkZXZpY2VfYWRkKCZkcnYtPndpcGh5LmRldik7CiAJaWYgKHJlcykKQEAgLTMxNyw5ICszNTUsMjAgQEAKIAlpZiAoSVNfRVJSKGRydi0+d2lwaHkuZGVidWdmc2RpcikpCiAJCWRydi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CiAKKwlpZiAod2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KSB7CisJCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgcmVxdWVzdDsKKworCQlyZXF1ZXN0LndpcGh5X2lkeCA9IGdldF93aXBoeV9pZHgod2lwaHkpOworCQlyZXF1ZXN0LmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisJCXJlcXVlc3QuYWxwaGEyWzBdID0gJzknOworCQlyZXF1ZXN0LmFscGhhMlsxXSA9ICc5JzsKKworCQlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudCgmcmVxdWVzdCk7CisJfQorCiAJcmVzID0gMDsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3JlZ2lzdGVyKTsKQEAgLTMyOSw3ICszNzgsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAogCS8qIHByb3RlY3QgdGhlIGRldmljZSBsaXN0ICovCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRydi0+bmV0ZGV2X2xpc3QpKTsKIApAQCAtMzU1LDE0ICs0MDQsMTcgQEAKIAlkZXZpY2VfZGVsKCZkcnYtPndpcGh5LmRldik7CiAJZGVidWdmc19yZW1vdmUoZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyKTsKIAotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfdW5yZWdpc3Rlcik7CiAKIHZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCiB7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqc2NhbiwgKnRtcDsKIAltdXRleF9kZXN0cm95KCZkcnYtPm10eCk7CiAJbXV0ZXhfZGVzdHJveSgmZHJ2LT5kZXZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYW4sIHRtcCwgJmRydi0+YnNzX2xpc3QsIGxpc3QpCisJCWNmZzgwMjExX3B1dF9ic3MoJnNjYW4tPnB1Yik7CiAJa2ZyZWUoZHJ2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggZjdmYjlmNC4uZDQzZGFhMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC04LDYgKzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KQEAgLTM1LDEyICszOCwyMCBAQAogCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudjsKIAogCS8qIHdpcGh5IGluZGV4LCBpbnRlcm5hbCBvbmx5ICovCi0JaW50IGlkeDsKKwlpbnQgd2lwaHlfaWR4OwogCiAJLyogYXNzb2NpYXRlIG5ldGRldiBsaXN0ICovCiAJc3RydWN0IG11dGV4IGRldmxpc3RfbXR4OwogCXN0cnVjdCBsaXN0X2hlYWQgbmV0ZGV2X2xpc3Q7CiAKKwkvKiBCU1Nlcy9zY2FubmluZyAqLworCXNwaW5sb2NrX3QgYnNzX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKKwlzdHJ1Y3QgcmJfcm9vdCBic3NfdHJlZTsKKwl1MzIgYnNzX2dlbmVyYXRpb247CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7IC8qIHByb3RlY3RlZCBieSBSVE5MICovCisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OworCiAJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyB3aXBoeV9wcml2KCksCiAJICogYW5kIGl0IHNob3VsZCBhdCBsZWFzdCBiZSBhbGlnbmVkIHRvIE5FVERFVl9BTElHTiAqLwogCXN0cnVjdCB3aXBoeSB3aXBoeSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhORVRERVZfQUxJR04pKSk7CkBAIC01Myw5ICs2NCw0NCBAQAogCXJldHVybiBjb250YWluZXJfb2Yod2lwaHksIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwgd2lwaHkpOwogfQogCi1leHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX2Rydl9tdXRleDsKKy8qIE5vdGUgMCBpcyB2YWxpZCwgaGVuY2UgcGh5MCAqLworc3RhdGljIGlubGluZQorYm9vbCB3aXBoeV9pZHhfdmFsaWQoaW50IHdpcGh5X2lkeCkKK3sKKwlyZXR1cm4gKHdpcGh5X2lkeCA+PSAwKTsKK30KKworZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9tdXRleDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNmZzgwMjExX2Rydl9saXN0OwogCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2NmZzgwMjExX2xvY2sodm9pZCkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmNmZzgwMjExX211dGV4KSk7Cit9CisKKy8qCisgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIG1hcmsgYSB3aXBoeV9pZHggYXMgbm90IGhhdmluZyBhbiBhc3NvY2lhdGVkIHdpcGh5LgorICogSXQgZ3VhcmFudGVlcyBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCkgd2lsbCByZXR1cm4gTlVMTAorICovCisjZGVmaW5lIFdJUEhZX0lEWF9TVEFMRSAtMQorCitzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJiX25vZGUgcmJuOworCXVuc2lnbmVkIGxvbmcgdHM7CisJc3RydWN0IGtyZWYgcmVmOworCWJvb2wgaG9sZDsKKworCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHByaXYgbWVtYmVyICovCisJc3RydWN0IGNmZzgwMjExX2JzcyBwdWI7Cit9OworCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCk7CitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKworc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKK19fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlcgogICogdGhhdCB0aGUgZ2VubF9pbmZvIGl0ZW0gdGhhdCBpcyBwYXNzZWQgcmVmZXJzIHRvLgpAQCAtNjMsMTMgKzEwOSwxMyBAQAogICogdGhlIGRyaXZlcidzIG11dGV4IQogICoKICAqIFRoaXMgbWVhbnMgdGhhdCB5b3UgbmVlZCB0byBjYWxsIGNmZzgwMjExX3B1dF9kZXYoKQotICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfZHJ2X211dGV4IQorICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfbXV0ZXghCiAgKgogICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRvIGxvY2sgdGhlIGdsb2JhbAogICogbXV0ZXggdG8gZ2V0IGFuIGl0ZW0gb2ZmIHRoZSBsaXN0IHNhZmVseSwgYW5kIHRoZW4KICAqIHdlIGxvY2sgdGhlIGRydiBtdXRleCBzbyBpdCBkb2Vzbid0IGdvIGF3YXkgdW5kZXIgdXMuCiAgKgotICogV2UgZG9uJ3Qgd2FudCB0byBrZWVwIGNmZzgwMjExX2Rydl9tdXRleCBsb2NrZWQKKyAqIFdlIGRvbid0IHdhbnQgdG8ga2VlcCBjZmc4MDIxMV9tdXRleCBsb2NrZWQKICAqIGZvciBhbGwgdGhlIHRpbWUgaW4gb3JkZXIgdG8gYWxsb3cgcmVxdWVzdHMgb24KICAqIG90aGVyIGludGVyZmFjZXMgdG8gZ28gdGhyb3VnaCBhdCB0aGUgc2FtZSB0aW1lLgogICoKQEAgLTc5LDYgKzEyNSw5IEBACiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCisvKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpOworCiAvKiBpZGVudGljYWwgdG8gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8gYnV0IG9ubHkgb3BlcmF0ZSBvbiBpZmluZGV4ICovCiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGludCBpZmluZGV4KTsKQEAgLTkyLDYgKzE0MSwxMSBAQAogCQkJICAgICAgIGNoYXIgKm5ld25hbWUpOwogCiB2b2lkIGllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKLXZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KTsKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3Igc2V0YnkpOworCit2b2lkIGNmZzgwMjExX2Jzc19leHBpcmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYpOwordm9pZCBjZmc4MDIxMV9ic3NfYWdlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfQ09SRV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYwppbmRleCBkYjQyODE5Li4yMzAxZGMxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jCisrKyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMKQEAgLTMzNyw2ICszMzcsNyBAQAogCXBvcyArPSA4OwogCiAJaWYgKGNjbXBfcmVwbGF5X2NoZWNrKHBuLCBrZXktPnJ4X3BuKSkgeworI2lmZGVmIENPTkZJR19MSUI4MDIxMV9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNICIKIAkJCQkgInByZXZpb3VzIFBOICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCkBAIC0zNDYsNiArMzQ3LDcgQEAKIAkJCQkga2V5LT5yeF9wblszXSwga2V5LT5yeF9wbls0XSwga2V5LT5yeF9wbls1XSwKIAkJCQkgcG5bMF0sIHBuWzFdLCBwblsyXSwgcG5bM10sIHBuWzRdLCBwbls1XSk7CiAJCX0KKyNlbmRpZgogCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMrKzsKIAkJcmV0dXJuIC00OwogCX0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDdlOGUyMmIuLmMzNjI4NzMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKKysrIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYwpAQCAtNDY1LDEyICs0NjUsMTQgQEAKIAlwb3MgKz0gODsKIAogCWlmICh0a2lwX3JlcGxheV9jaGVjayhpdjMyLCBpdjE2LCB0a2V5LT5yeF9pdjMyLCB0a2V5LT5yeF9pdjE2KSkgeworI2lmZGVmIENPTkZJR19MSUI4MDIxMV9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgogCQkJICAgICAgICIgcHJldmlvdXMgVFNDICUwOHglMDR4IHJlY2VpdmVkIFRTQyAiCiAJCQkgICAgICAgIiUwOHglMDR4XG4iLCBoZHItPmFkZHIyLAogCQkJICAgICAgIHRrZXktPnJ4X2l2MzIsIHRrZXktPnJ4X2l2MTYsIGl2MzIsIGl2MTYpOwogCQl9CisjZW5kaWYKIAkJdGtleS0+ZG90MTFSU05BU3RhdHNUS0lQUmVwbGF5cysrOwogCQlyZXR1cm4gLTQ7CiAJfQpAQCAtNTA1LDEwICs1MDcsMTIgQEAKIAkJCSAqIGl0IG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCBmb3IgdGhlIG5leHQgcGFja2V0LiAqLwogCQkJdGtleS0+cnhfcGhhc2UxX2RvbmUgPSAwOwogCQl9CisjaWZkZWYgQ09ORklHX0xJQjgwMjExX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0iCiAJCQkgICAgICAgIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCX0KKyNlbmRpZgogCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBJQ1ZFcnJvcnMrKzsKIAkJcmV0dXJuIC01OwogCX0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9tbG1lLmMgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzU3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBjZmc4MDIxMSBNTE1FIFNBUCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAibmw4MDIxMS5oIgorCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2F1dGgocmRldiwgZGV2LCBidWYsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfcnhfYXV0aCk7CisKK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2Fzc29jKHJkZXYsIGRldiwgYnVmLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2Fzc29jKTsKKwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2RlYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2RlYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9yeF9kZWF1dGgpOworCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJbmw4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHJkZXYsIGRldiwgYnVmLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDFlNzI4ZmYuLjM1M2UxYTQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtNywxMyArNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImNvcmUuaCIKQEAgLTEwNSw2ICsxMDUsMTcgQEAKIAogCVtOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKIAkJCQkJIC5sZW4gPSBOTDgwMjExX0hUX0NBUEFCSUxJVFlfTEVOIH0sCisKKwlbTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRV0gPSB7IC50eXBlID0gTkxBX1U4IH0sCisJW05MODAyMTFfQVRUUl9JRV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCSAgICAgIC5sZW4gPSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOIH0sCisJW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisKKwlbTkw4MDIxMV9BVFRSX1NTSURdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJLmxlbiA9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gfSwKKwlbTkw4MDIxMV9BVFRSX0FVVEhfVFlQRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKIH07CiAKIC8qIG1lc3NhZ2UgYnVpbGRpbmcgaGVscGVyICovCkBAIC0xMjUsNiArMTM2LDcgQEAKIAlzdHJ1Y3QgbmxhdHRyICpubF9mcmVxcywgKm5sX2ZyZXE7CiAJc3RydWN0IG5sYXR0ciAqbmxfcmF0ZXMsICpubF9yYXRlOwogCXN0cnVjdCBubGF0dHIgKm5sX21vZGVzOworCXN0cnVjdCBubGF0dHIgKm5sX2NtZHM7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CkBAIC0xMzUsOCArMTQ3LDEwIEBACiAJaWYgKCFoZHIpCiAJCXJldHVybiAtMTsKIAotCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCBkZXYtPmlkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+d2lwaHlfaWR4KTsKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLCB3aXBoeV9uYW1lKCZkZXYtPndpcGh5KSk7CisJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFMsCisJCSAgIGRldi0+d2lwaHkubWF4X3NjYW5fc3NpZHMpOwogCiAJbmxfbW9kZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUyk7CiAJaWYgKCFubF9tb2RlcykKQEAgLTIzNCw2ICsyNDgsMzUgQEAKIAl9CiAJbmxhX25lc3RfZW5kKG1zZywgbmxfYmFuZHMpOwogCisJbmxfY21kcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9DT01NQU5EUyk7CisJaWYgKCFubF9jbWRzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWkgPSAwOworI2RlZmluZSBDTUQob3AsIG4pCQkJCQkJXAorCSBkbyB7CQkJCQkJCVwKKwkJaWYgKGRldi0+b3BzLT5vcCkgewkJCQlcCisJCQlpKys7CQkJCQlcCisJCQlOTEFfUFVUX1UzMihtc2csIGksIE5MODAyMTFfQ01EXyAjIyBuKTsJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKwlDTUQoYWRkX3ZpcnR1YWxfaW50ZiwgTkVXX0lOVEVSRkFDRSk7CisJQ01EKGNoYW5nZV92aXJ0dWFsX2ludGYsIFNFVF9JTlRFUkZBQ0UpOworCUNNRChhZGRfa2V5LCBORVdfS0VZKTsKKwlDTUQoYWRkX2JlYWNvbiwgTkVXX0JFQUNPTik7CisJQ01EKGFkZF9zdGF0aW9uLCBORVdfU1RBVElPTik7CisJQ01EKGFkZF9tcGF0aCwgTkVXX01QQVRIKTsKKwlDTUQoc2V0X21lc2hfcGFyYW1zLCBTRVRfTUVTSF9QQVJBTVMpOworCUNNRChjaGFuZ2VfYnNzLCBTRVRfQlNTKTsKKwlDTUQoYXV0aCwgQVVUSEVOVElDQVRFKTsKKwlDTUQoYXNzb2MsIEFTU09DSUFURSk7CisJQ01EKGRlYXV0aCwgREVBVVRIRU5USUNBVEUpOworCUNNRChkaXNhc3NvYywgRElTQVNTT0NJQVRFKTsKKworI3VuZGVmIENNRAorCW5sYV9uZXN0X2VuZChtc2csIG5sX2NtZHMpOworCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTI0Nyw3ICsyOTAsNyBAQAogCWludCBzdGFydCA9IGNiLT5hcmdzWzBdOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewogCQlpZiAoKytpZHggPD0gc3RhcnQpCiAJCQljb250aW51ZTsKQEAgLTI1OCw3ICszMDEsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJY2ItPmFyZ3NbMF0gPSBpZHg7CiAKQEAgLTMyMywxNiArMzY2LDI2IEBACiAJaW50IHJlc3VsdCA9IDAsIHJlbV90eHFfcGFyYW1zID0gMDsKIAlzdHJ1Y3QgbmxhdHRyICpubF90eHFfcGFyYW1zOwogCi0JcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKGluZm8pOwotCWlmIChJU19FUlIocmRldikpCi0JCXJldHVybiBQVFJfRVJSKHJkZXYpOworCXJ0bmxfbG9jaygpOwogCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9OQU1FXSkgeworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCXJkZXYgPSBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlyZXN1bHQgPSBQVFJfRVJSKHJkZXYpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwltdXRleF9sb2NrKCZyZGV2LT5tdHgpOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9OQU1FXSkKIAkJcmVzdWx0ID0gY2ZnODAyMTFfZGV2X3JlbmFtZSgKIAkJCXJkZXYsIG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9OQU1FXSkpOwotCQlpZiAocmVzdWx0KQotCQkJZ290byBiYWRfcmVzOwotCX0KKworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJaWYgKHJlc3VsdCkKKwkJZ290byBiYWRfcmVzOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TXSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4cV9wYXJhbXMgdHhxX3BhcmFtczsKQEAgLTQyOCw3ICs0ODEsOSBAQAogCiAKICBiYWRfcmVzOgotCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdHgpOworIHVubG9jazoKKwlydG5sX3VubG9jaygpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ2MSw3ICs1MTYsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICh3cF9pZHggPCB3cF9zdGFydCkgewogCQkJd3BfaWR4Kys7CkBAIC00ODgsNyArNTQzLDcgQEAKIAkJd3BfaWR4Kys7CiAJfQogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IHdwX2lkeDsKIAljYi0+YXJnc1sxXSA9IGlmX2lkeDsKQEAgLTU2NCwyMSArNjE5LDMxIEBACiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTMyIF9mbGFncywgKmZsYWdzID0gTlVMTDsKKwlib29sIGNoYW5nZSA9IGZhbHNlOwogCiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHVubG9ja19ydG5sOworCiAJaWZpbmRleCA9IGRldi0+aWZpbmRleDsKIAl0eXBlID0gZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGU7CiAJZGV2X3B1dChkZXYpOwogCi0JZXJyID0gLUVJTlZBTDsKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGVFlQRV0pIHsKLQkJdHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRlRZUEVdKTsKLQkJaWYgKHR5cGUgPiBOTDgwMjExX0lGVFlQRV9NQVgpCisJCWVudW0gbmw4MDIxMV9pZnR5cGUgbnR5cGU7CisKKwkJbnR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZUWVBFXSk7CisJCWlmICh0eXBlICE9IG50eXBlKQorCQkJY2hhbmdlID0gdHJ1ZTsKKwkJdHlwZSA9IG50eXBlOworCQlpZiAodHlwZSA+IE5MODAyMTFfSUZUWVBFX01BWCkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gdW5sb2NrOworCQl9CiAJfQogCiAJaWYgKCFkcnYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZiB8fApAQCAtNTk0LDYgKzY1OSw3IEBACiAJCX0KIAkJcGFyYW1zLm1lc2hfaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pOwogCQlwYXJhbXMubWVzaF9pZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CisJCWNoYW5nZSA9IHRydWU7CiAJfQogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NTlRSX0ZMQUdTXSkgewpAQCAtNjAzLDIwICs2NjksMjYgQEAKIAkJfQogCQllcnIgPSBwYXJzZV9tb25pdG9yX2ZsYWdzKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NTlRSX0ZMQUdTXSwKIAkJCQkJICAmX2ZsYWdzKTsKLQkJaWYgKCFlcnIpCi0JCQlmbGFncyA9ICZfZmxhZ3M7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKworCQlmbGFncyA9ICZfZmxhZ3M7CisJCWNoYW5nZSA9IHRydWU7CiAJfQotCXJ0bmxfbG9jaygpOwotCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKCZkcnYtPndpcGh5LCBpZmluZGV4LAotCQkJCQkgICAgdHlwZSwgZmxhZ3MsICZwYXJhbXMpOworCisJaWYgKGNoYW5nZSkKKwkJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgsCisJCQkJCQkgICAgdHlwZSwgZmxhZ3MsICZwYXJhbXMpOworCWVsc2UKKwkJZXJyID0gMDsKIAogCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCVdBUk5fT04oIWRldiB8fCAoIWVyciAmJiBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSB0eXBlKSk7CiAKLQlydG5sX3VubG9jaygpOwotCiAgdW5sb2NrOgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTYzOSw5ICs3MTEsMTMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJ0bmxfbG9jaygpOworCiAJZHJ2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7Ci0JaWYgKElTX0VSUihkcnYpKQotCQlyZXR1cm4gUFRSX0VSUihkcnYpOworCWlmIChJU19FUlIoZHJ2KSkgeworCQllcnIgPSBQVFJfRVJSKGRydik7CisJCWdvdG8gdW5sb2NrX3J0bmw7CisJfQogCiAJaWYgKCFkcnYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZiB8fAogCSAgICAhKGRydi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzICYgKDEgPDwgdHlwZSkpKSB7CkBAIC02NTUsMTggKzczMSwxNyBAQAogCQlwYXJhbXMubWVzaF9pZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gcGFyc2VfbW9uaXRvcl9mbGFncyh0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgPwogCQkJCSAgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01OVFJfRkxBR1NdIDogTlVMTCwKIAkJCQkgICZmbGFncyk7CiAJZXJyID0gZHJ2LT5vcHMtPmFkZF92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksCiAJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRk5BTUVdKSwKIAkJdHlwZSwgZXJyID8gTlVMTCA6ICZmbGFncywgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKLQogCiAgdW5sb2NrOgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3Niw5ICs3NTEsMTEgQEAKIAlpbnQgaWZpbmRleCwgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAlpZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCWRldl9wdXQoZGV2KTsKIApAQCAtNjg3LDEyICs3NjQsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzM4LDE1ICs4MTUsMTcgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5nZXRfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwpAQCAtNzc0LDEwICs4NTMsOCBAQAogCWlmIChtYWNfYWRkcikKIAkJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcik7CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+Z2V0X2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkciwKIAkJCQkmY29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTsKLQlydG5sX3VubG9jaygpOwogCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC03OTUsNiArODcyLDkgQEAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODA0LDM1ICs4ODQsNTAgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgga2V5X2lkeDsKKwlpbnQgKCpmdW5jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgdTgga2V5X2luZGV4KTsKIAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkgeworCQlpZiAoa2V5X2lkeCA8IDQgfHwga2V5X2lkeCA+IDUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGtleV9pZHggPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgc2V0dGluZyBkZWZhdWx0IGtleSAqLwotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0gJiYKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleSkgeworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRdKQorCQlmdW5jID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleTsKKwllbHNlCisJCWZ1bmMgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXk7CisKKwlpZiAoIWZ1bmMpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwotCWVyciA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCk7Ci0JcnRubF91bmxvY2soKTsKKwllcnIgPSBmdW5jKCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7CisKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODYzLDcgKzk1OCw3IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoa2V5X2lkeCA+IDUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTg5NCwyNiArOTg5LDMzIEBACiAJCWlmIChwYXJhbXMua2V5X2xlbiAhPSAxMykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlpZiAocGFyYW1zLmtleV9sZW4gIT0gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5hZGRfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+YWRkX2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkciwgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05MjgsMjggKzEwMzAsMzIgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5kZWxfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+ZGVsX2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkcik7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworCisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTk2Myw5ICsxMDY5LDE2IEBACiAJc3RydWN0IGJlYWNvbl9wYXJhbWV0ZXJzIHBhcmFtczsKIAlpbnQgaGF2ZWluZm8gPSAwOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoaW5mby0+Z2VubGhkci0+Y21kKSB7CiAJY2FzZSBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOgpAQCAtMTAyNiwxMyArMTEzOSwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBjYWxsKCZkcnYtPndpcGh5LCBkZXYsICZwYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA0MiwyMiArMTE1NiwyOSBAQAogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHVubG9ja19ydG5sOwogCiAJaWYgKCFkcnYtPm9wcy0+ZGVsX2JlYWNvbikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF9iZWFjb24oJmRydi0+d2lwaHksIGRldik7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTgyLDYgKzEzMDMsMTIgQEAKIAogCQlubGFfbmVzdF9lbmQobXNnLCB0eHJhdGUpOwogCX0KKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19SWF9QQUNLRVRTKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwkJCSAgICBzaW5mby0+cnhfcGFja2V0cyk7CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfUEFDS0VUUykKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCisJCQkgICAgc2luZm8tPnR4X3BhY2tldHMpOwogCW5sYV9uZXN0X2VuZChtc2csIHNpbmZvYXR0cik7CiAKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwpAQCAtMTIxNywzMCArMTM0NCwzMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbmV0ZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKLQlpZiAoIW5ldGRldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJcnRubF9sb2NrKCk7CisKKwluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcnRubDsKKwl9CiAKIAlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CiAJaWYgKElTX0VSUihkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGV2KTsKLQkJZ290byBvdXRfcHV0X25ldGRldjsKKwkJZ290byBvdXRfcnRubDsKIAl9CiAKIAlpZiAoIWRldi0+b3BzLT5kdW1wX3N0YXRpb24pIHsKLQkJZXJyID0gLUVOT1NZUzsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKLQlydG5sX2xvY2soKTsKLQogCXdoaWxlICgxKSB7CiAJCWVyciA9IGRldi0+b3BzLT5kdW1wX3N0YXRpb24oJmRldi0+d2lwaHksIG5ldGRldiwgc3RhX2lkeCwKIAkJCQkJICAgICBtYWNfYWRkciwgJnNpbmZvKTsKIAkJaWYgKGVyciA9PSAtRU5PRU5UKQogCQkJYnJlYWs7CiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF9lcnJfcnRubDsKKwkJCWdvdG8gb3V0X2VycjsKIAogCQlpZiAobmw4MDIxMV9zZW5kX3N0YXRpb24oc2tiLAogCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLApAQCAtMTI1NiwxMiArMTM4NSwxMCBAQAogIG91dDoKIAljYi0+YXJnc1sxXSA9IHN0YV9pZHg7CiAJZXJyID0gc2tiLT5sZW47Ci0gb3V0X2Vycl9ydG5sOgotCXJ0bmxfdW5sb2NrKCk7CiAgb3V0X2VycjoKIAljZmc4MDIxMV9wdXRfZGV2KGRldik7Ci0gb3V0X3B1dF9uZXRkZXY6Ci0JZGV2X3B1dChuZXRkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTI4MiwxOSArMTQwOSwxOCBAQAogCiAJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmdldF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+Z2V0X3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZzaW5mbyk7Ci0JcnRubF91bmxvY2soKTsKLQogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMzExLDEwICsxNDM3LDEyIEBACiAKICBvdXRfZnJlZToKIAlubG1zZ19mcmVlKG1zZyk7Ci0KICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTM4Miw5ICsxNTEwLDExIEBACiAJCXBhcmFtcy5wbGlua19hY3Rpb24gPQogCQkgICAgbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTl0pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAllcnIgPSBnZXRfdmxhbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dLCBkcnYsICZwYXJhbXMudmxhbik7CiAJaWYgKGVycikKQEAgLTEzOTUsMTUgKzE1MjUsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyLCAmcGFyYW1zKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWlmIChwYXJhbXMudmxhbikKIAkJZGV2X3B1dChwYXJhbXMudmxhbik7CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQ0NSw5ICsxNTc2LDExIEBACiAJCQkJJnBhcmFtcy5zdGF0aW9uX2ZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWVyciA9IGdldF92bGFuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl0sIGRydiwgJnBhcmFtcy52bGFuKTsKIAlpZiAoZXJyKQpAQCAtMTQ1OCwxNSArMTU5MSwyMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5hZGRfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAlpZiAocGFyYW1zLnZsYW4pCiAJCWRldl9wdXQocGFyYW1zLnZsYW4pOwogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE0ODAsMjIgKzE2MTksMjUgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5kZWxfc3RhdGlvbikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1NzYsMjIgKzE3MTgsMjkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5ldGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7Ci0JaWYgKCFuZXRkZXYpCi0JCXJldHVybiAtRU5PREVWOworCXJ0bmxfbG9jaygpOworCisJbmV0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpZHgpOworCWlmICghbmV0ZGV2KSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3J0bmw7CisJfQogCiAJZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaWZpZHgpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRldik7Ci0JCWdvdG8gb3V0X3B1dF9uZXRkZXY7CisJCWdvdG8gb3V0X3J0bmw7CiAJfQogCiAJaWYgKCFkZXYtPm9wcy0+ZHVtcF9tcGF0aCkgewotCQllcnIgPSAtRU5PU1lTOworCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXRfZXJyOwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChuZXRkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAKIAl3aGlsZSAoMSkgewogCQllcnIgPSBkZXYtPm9wcy0+ZHVtcF9tcGF0aCgmZGV2LT53aXBoeSwgbmV0ZGV2LCBwYXRoX2lkeCwKQEAgLTE1OTksNyArMTc0OCw3IEBACiAJCWlmIChlcnIgPT0gLUVOT0VOVCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyKQotCQkJZ290byBvdXRfZXJyX3J0bmw7CisJCQlnb3RvIG91dF9lcnI7CiAKIAkJaWYgKG5sODAyMTFfc2VuZF9tcGF0aChza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCSAgICAgICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLApAQCAtMTYxNCwxMiArMTc2MywxMCBAQAogIG91dDoKIAljYi0+YXJnc1sxXSA9IHBhdGhfaWR4OwogCWVyciA9IHNrYi0+bGVuOwotIG91dF9lcnJfcnRubDoKLQlydG5sX3VubG9jaygpOwogIG91dF9lcnI6CiAJY2ZnODAyMTFfcHV0X2RldihkZXYpOwotIG91dF9wdXRfbmV0ZGV2OgotCWRldl9wdXQobmV0ZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NDEsMTkgKzE3ODgsMjMgQEAKIAogCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOwogCiAJaWYgKCFkcnYtPm9wcy0+Z2V0X21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKLQllcnIgPSBkcnYtPm9wcy0+Z2V0X21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3AsICZwaW5mbyk7Ci0JcnRubF91bmxvY2soKTsKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQogCisJZXJyID0gZHJ2LT5vcHMtPmdldF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wLCAmcGluZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjcwLDEwICsxODIxLDEyIEBACiAKICBvdXRfZnJlZToKIAlubG1zZ19mcmVlKG1zZyk7Ci0KICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTY5NCwyMiArMTg0NywzNSBAQAogCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAluZXh0X2hvcCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUF0pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfbXBhdGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogc3RhdGljIGludCBubDgwMjExX25ld19tcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQpAQCAtMTcyOSwyMiArMTg5NSwzNSBAQAogCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAluZXh0X2hvcCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUF0pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5hZGRfbXBhdGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5hZGRfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzU4LDIyICsxOTM3LDI1IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQlkc3QgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmRlbF9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmRlbF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTgwNiwyMiArMTk4OCwzMCBAQAogCQkJbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTXSk7CiAJfQogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfYnNzKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfYnNzKCZkcnYtPndpcGh5LCBkZXYsICZwYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTg3Niw2ICsyMDY2LDE5IEBACiAJaW50IHI7CiAJY2hhciAqZGF0YSA9IE5VTEw7CiAKKwkvKgorCSAqIFlvdSBzaG91bGQgb25seSBnZXQgdGhpcyB3aGVuIGNmZzgwMjExIGhhc24ndCB5ZXQgaW5pdGlhbGl6ZWQKKwkgKiBjb21wbGV0ZWx5IHdoZW4gYnVpbHQtaW4gdG8gdGhlIGtlcm5lbCByaWdodCBiZXR3ZWVuIHRoZSB0aW1lCisJICogd2luZG93IGJldHdlZW4gbmw4MDIxMV9pbml0KCkgYW5kIHJlZ3VsYXRvcnlfaW5pdCgpLCBpZiB0aGF0IGlzCisJICogZXZlbiBwb3NzaWJsZS4KKwkgKi8KKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJaWYgKHVubGlrZWx5KCFjZmc4MDIxMV9yZWdkb21haW4pKSB7CisJCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCX0KKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFR19BTFBIQTJdKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTg4Niw5ICsyMDg5LDkgQEAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKGRhdGEpKQogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7Ci0JciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfVVNFUiwgZGF0YSwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKworCXIgPSByZWd1bGF0b3J5X2hpbnRfdXNlcihkYXRhKTsKKwogCXJldHVybiByOwogfQogCkBAIC0xOTAzLDE1ICsyMTA2LDIwIEBACiAJc3RydWN0IG5sYXR0ciAqcGluZm9hdHRyOwogCXN0cnVjdCBza19idWZmICptc2c7CiAKKwlydG5sX2xvY2soKTsKKwogCS8qIExvb2sgdXAgb3VyIGRldmljZSAqLwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKKworCWlmICghZHJ2LT5vcHMtPmdldF9tZXNoX3BhcmFtcykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQogCiAJLyogR2V0IHRoZSBtZXNoIHBhcmFtcyAqLwotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5nZXRfbWVzaF9wYXJhbXMoJmRydi0+d2lwaHksIGRldiwgJmN1cl9wYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTE5NjAsMTMgKzIxNjgsMTYgQEAKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKIAlnb3RvIG91dDsKIAotbmxhX3B1dF9mYWlsdXJlOgorIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CiAJZXJyID0gLUVNU0dTSVpFOwotb3V0OgorIG91dDoKIAkvKiBDbGVhbnVwICovCiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjAxMyw5ICsyMjI0LDE2IEBACiAJCQlwYXJlbnRfYXR0ciwgbmw4MDIxMV9tZXNoY29uZl9wYXJhbXNfcG9saWN5KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKKworCWlmICghZHJ2LT5vcHMtPnNldF9tZXNoX3BhcmFtcykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQogCiAJLyogVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgYXJlbid0IG1vcmUgdGhhbiAzMiBtZXNoIGNvbmZpZwogCSAqIHBhcmFtZXRlcnMgKG90aGVyd2lzZSBvdXIgYml0ZmllbGQgc2NoZW1lIHdvdWxkIG5vdCB3b3JrLikgKi8KQEAgLTIwNTcsMTggKzIyNzUsOTUgQEAKIAkJCW5sYV9nZXRfdTE2KTsKIAogCS8qIEFwcGx5IGNoYW5nZXMgKi8KLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+c2V0X21lc2hfcGFyYW1zKCZkcnYtPndpcGh5LCBkZXYsICZjZmcsIG1hc2spOwotCXJ0bmxfdW5sb2NrKCk7CiAKKyBvdXQ6CiAJLyogY2xlYW51cCAqLwogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKICN1bmRlZiBGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUCiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHIgPSBOVUxMOworCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQorCQlnb3RvIG91dDsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1JFRyk7CisJaWYgKCFoZHIpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwKKwkJY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOworCisJbmxfcmVnX3J1bGVzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVTKTsKKwlpZiAoIW5sX3JlZ19ydWxlcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnODAyMTFfcmVnZG9tYWluLT5uX3JlZ19ydWxlczsgaSsrKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpyZWdfcnVsZTsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmcmVxX3JhbmdlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGU7CisKKwkJcmVnX3J1bGUgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CisJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CisKKwkJbmxfcmVnX3J1bGUgPSBubGFfbmVzdF9zdGFydChtc2csIGkpOworCQlpZiAoIW5sX3JlZ19ydWxlKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1MsCisJCQlyZWdfcnVsZS0+ZmxhZ3MpOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJULAorCQkJZnJlcV9yYW5nZS0+c3RhcnRfZnJlcV9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORCwKKwkJCWZyZXFfcmFuZ2UtPmVuZF9mcmVxX2toeik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfTUFYX0JXLAorCQkJZnJlcV9yYW5nZS0+bWF4X2JhbmR3aWR0aF9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTiwKKwkJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9FSVJQLAorCQkJcG93ZXJfcnVsZS0+bWF4X2VpcnApOworCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX3JlZ19ydWxlKTsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBubF9yZWdfcnVsZXMpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWdvdG8gb3V0OworCitubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCWVyciA9IC1FTVNHU0laRTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXTsKQEAgLTIxMjQsOSArMjQxOSw5IEBACiAKIAlCVUdfT04ocnVsZV9pZHggIT0gbnVtX3J1bGVzKTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXIgPSBzZXRfcmVnZG9tKHJkKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIHI7CiAKICBiYWRfcmVnOgpAQCAtMjEzNCw2ICsyNDI5LDU1MyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfdHJpZ2dlcl9zY2FuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgbmxhdHRyICphdHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVyciwgdG1wLCBuX3NzaWRzID0gMCwgbl9jaGFubmVscyA9IDAsIGk7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXNpemVfdCBpZV9sZW47CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcnRubDsKKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisKKwlpZiAoIWRydi0+b3BzLT5zY2FuKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkcnYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSkgeworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSwgdG1wKQorCQkJbl9jaGFubmVscysrOworCQlpZiAoIW5fY2hhbm5lbHMpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCisJCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCW5fY2hhbm5lbHMgKz0gd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApCisJCQluX3NzaWRzKys7CisKKwlpZiAobl9zc2lkcyA+IHdpcGh5LT5tYXhfc2Nhbl9zc2lkcykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwllbHNlCisJCWllX2xlbiA9IDA7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpCisJCQkrIHNpemVvZigqc3NpZCkgKiBuX3NzaWRzCisJCQkrIHNpemVvZihjaGFubmVsKSAqIG5fY2hhbm5lbHMKKwkJCSsgaWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVxdWVzdC0+Y2hhbm5lbHMgPSAodm9pZCAqKSgoY2hhciAqKXJlcXVlc3QgKyBzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwlpZiAobl9zc2lkcykKKwkJcmVxdWVzdC0+c3NpZHMgPSAodm9pZCAqKShyZXF1ZXN0LT5jaGFubmVscyArIG5fY2hhbm5lbHMpOworCXJlcXVlc3QtPm5fc3NpZHMgPSBuX3NzaWRzOworCWlmIChpZV9sZW4pIHsKKwkJaWYgKHJlcXVlc3QtPnNzaWRzKQorCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5zc2lkcyArIG5fc3NpZHMpOworCQllbHNlCisJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSkgeworCQkvKiB1c2VyIHNwZWNpZmllZCwgYmFpbCBvdXQgaWYgY2hhbm5lbCBub3QgZm91bmQgKi8KKwkJcmVxdWVzdC0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJCWkgPSAwOworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSwgdG1wKSB7CisJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgbmxhX2dldF91MzIoYXR0cikpOworCQkJaWYgKCFyZXF1ZXN0LT5jaGFubmVsc1tpXSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGFsbCBjaGFubmVscyAqLworCQlpID0gMDsKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJaW50IGo7CisJCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IDA7IGogPCB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJCXJlcXVlc3QtPmNoYW5uZWxzW2ldID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQkJaSsrOworCQkJfQorCQl9CisJfQorCisJaSA9IDA7CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkgeworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwgdG1wKSB7CisJCQlpZiAocmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQkJbWVtY3B5KHJlcXVlc3QtPnNzaWRzW2ldLnNzaWQsIG5sYV9kYXRhKGF0dHIpLCBubGFfbGVuKGF0dHIpKTsKKwkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcXVlc3QtPmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCW1lbWNweShyZXF1ZXN0LT5pZSwgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSksCisJCSAgICAgICByZXF1ZXN0LT5pZV9sZW4pOworCX0KKworCXJlcXVlc3QtPmlmaWR4ID0gZGV2LT5pZmluZGV4OworCXJlcXVlc3QtPndpcGh5ID0gJmRydi0+d2lwaHk7CisKKwlkcnYtPnNjYW5fcmVxID0gcmVxdWVzdDsKKwllcnIgPSBkcnYtPm9wcy0+c2NhbigmZHJ2LT53aXBoeSwgZGV2LCByZXF1ZXN0KTsKKworIG91dF9mcmVlOgorCWlmIChlcnIpIHsKKwkJZHJ2LT5zY2FuX3JlcSA9IE5VTEw7CisJCWtmcmVlKHJlcXVlc3QpOworCX0KKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX3NlbmRfYnNzKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMpCit7CisJdm9pZCAqaGRyOworCXN0cnVjdCBubGF0dHIgKmJzczsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLAorCQkJICAgICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTKTsKKwlpZiAoIWhkcikKKwkJcmV0dXJuIC0xOworCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OLAorCQkgICAgcmRldi0+YnNzX2dlbmVyYXRpb24pOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CisKKwlic3MgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9CU1MpOworCWlmICghYnNzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtPmJzc2lkKSkKKwkJTkxBX1BVVChtc2csIE5MODAyMTFfQlNTX0JTU0lELCBFVEhfQUxFTiwgcmVzLT5ic3NpZCk7CisJaWYgKHJlcy0+aW5mb3JtYXRpb25fZWxlbWVudHMgJiYgcmVzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKKwkJCXJlcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJcmVzLT5pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKHJlcy0+dHNmKQorCQlOTEFfUFVUX1U2NChtc2csIE5MODAyMTFfQlNTX1RTRiwgcmVzLT50c2YpOworCWlmIChyZXMtPmJlYWNvbl9pbnRlcnZhbCkKKwkJTkxBX1BVVF9VMTYobXNnLCBOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUwsIHJlcy0+YmVhY29uX2ludGVydmFsKTsKKwlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfQlNTX0NBUEFCSUxJVFksIHJlcy0+Y2FwYWJpbGl0eSk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19GUkVRVUVOQ1ksIHJlcy0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJc3dpdGNoIChyZGV2LT53aXBoeS5zaWduYWxfdHlwZSkgeworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQlNTX1NJR05BTF9NQk0sIHJlcy0+c2lnbmFsKTsKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDLCByZXMtPnNpZ25hbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW5sYV9uZXN0X2VuZChtc2csIGJzcyk7CisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfZHVtcF9zY2FuKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnNjYW47CisJaW50IGlmaWR4ID0gY2ItPmFyZ3NbMF07CisJaW50IHN0YXJ0ID0gY2ItPmFyZ3NbMV0sIGlkeCA9IDA7CisJaW50IGVycjsKKworCWlmICghaWZpZHgpIHsKKwkJZXJyID0gbmxtc2dfcGFyc2UoY2ItPm5saCwgR0VOTF9IRFJMRU4gKyBubDgwMjExX2ZhbS5oZHJzaXplLAorCQkJCSAgbmw4MDIxMV9mYW0uYXR0cmJ1Ziwgbmw4MDIxMV9mYW0ubWF4YXR0ciwKKwkJCQkgIG5sODAyMTFfcG9saWN5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKCFubDgwMjExX2ZhbS5hdHRyYnVmW05MODAyMTFfQVRUUl9JRklOREVYXSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmaWR4ID0gbmxhX2dldF91MzIobmw4MDIxMV9mYW0uYXR0cmJ1ZltOTDgwMjExX0FUVFJfSUZJTkRFWF0pOworCQlpZiAoIWlmaWR4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNiLT5hcmdzWzBdID0gaWZpZHg7CisJfQorCisJbmV0ZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CisJaWYgKElTX0VSUihkZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGV2KTsKKwkJZ290byBvdXRfcHV0X25ldGRldjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWNmZzgwMjExX2Jzc19leHBpcmUoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NhbiwgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCsraWR4IDw9IHN0YXJ0KQorCQkJY29udGludWU7CisJCWlmIChubDgwMjExX3NlbmRfYnNzKHNrYiwKKwkJCQlORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAorCQkJCWRldiwgbmV0ZGV2LCAmc2Nhbi0+cHViKSA8IDApIHsKKwkJCWlkeC0tOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJY2ItPmFyZ3NbMV0gPSBpZHg7CisJZXJyID0gc2tiLT5sZW47CisJY2ZnODAyMTFfcHV0X2RldihkZXYpOworIG91dF9wdXRfbmV0ZGV2OgorCWRldl9wdXQobmV0ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIG5sODAyMTFfdmFsaWRfYXV0aF90eXBlKGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlKQoreworCXJldHVybiBhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSB8fAorCQlhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZIHx8CisJCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0ZUIHx8CisJCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmICghZHJ2LT5vcHMtPmF1dGgpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmZHJ2LT53aXBoeTsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCisJcmVxLnBlZXJfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKKwkJcmVxLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoCisJCQl3aXBoeSwKKwkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkpOworCQlpZiAoIXJlcS5jaGFuKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKSB7CisJCXJlcS5zc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKwkJcmVxLnNzaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcS5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlyZXEuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FVVEhfVFlQRV0pIHsKKwkJcmVxLmF1dGhfdHlwZSA9CisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSk7CisJCWlmICghbmw4MDIxMV92YWxpZF9hdXRoX3R5cGUocmVxLmF1dGhfdHlwZSkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWVyciA9IGRydi0+b3BzLT5hdXRoKCZkcnYtPndpcGh5LCBkZXYsICZyZXEpOworCitvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKK3VubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgcmVxOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+YXNzb2MpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZkcnYtPndpcGh5OworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkgeworCQlyZXEuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgKKwkJCXdpcGh5LAorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7CisJCWlmICghcmVxLmNoYW4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJlcS5zc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKwlyZXEuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlyZXEuaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJcmVxLmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJfQorCisJZXJyID0gZHJ2LT5vcHMtPmFzc29jKCZkcnYtPndpcGh5LCBkZXYsICZyZXEpOworCitvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKK3VubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2RlYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgcmVxOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+ZGVhdXRoKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKworCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSkgeworCQlyZXEucmVhc29uX2NvZGUgPQorCQkJbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSk7CisJCWlmIChyZXEucmVhc29uX2NvZGUgPT0gMCkgeworCQkJLyogUmVhc29uIENvZGUgMCBpcyByZXNlcnZlZCAqLworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWVyciA9IGRydi0+b3BzLT5kZWF1dGgoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisKK291dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfZGlzYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCByZXE7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIWRydi0+b3BzLT5kaXNhc3NvYykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZkcnYtPndpcGh5OworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pIHsKKwkJcmVxLnJlYXNvbl9jb2RlID0KKwkJCW5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOworCQlpZiAocmVxLnJlYXNvbl9jb2RlID09IDApIHsKKwkJCS8qIFJlYXNvbiBDb2RlIDAgaXMgcmVzZXJ2ZWQgKi8KKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcS5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlyZXEuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwllcnIgPSBkcnYtPm9wcy0+ZGlzYXNzb2MoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisKK291dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtMjIyMCw3ICszMDYyLDYgQEAKIAkJLmRvaXQgPSBubDgwMjExX2dldF9zdGF0aW9uLAogCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX3N0YXRpb24sCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKLQkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1NUQVRJT04sCkBAIC0yMjcyLDYgKzMxMTMsMTIgQEAKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1JFRywKKwkJLmRvaXQgPSBubDgwMjExX2dldF9yZWcsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLyogY2FuIGJlIHJldHJpZXZlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMgKi8KKwl9LAorCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9SRUcsCiAJCS5kb2l0ID0gbmw4MDIxMV9zZXRfcmVnLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCkBAIC0yMjk1LDEyICszMTQyLDU2IEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAorCQkuZG9pdCA9IG5sODAyMTFfdHJpZ2dlcl9zY2FuLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5kdW1waXQgPSBubDgwMjExX2R1bXBfc2NhbiwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSwKKwkJLmRvaXQgPSBubDgwMjExX2F1dGhlbnRpY2F0ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9BU1NPQ0lBVEUsCisJCS5kb2l0ID0gbmw4MDIxMV9hc3NvY2lhdGUsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUsCisJCS5kb2l0ID0gbmw4MDIxMV9kZWF1dGhlbnRpY2F0ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsCisJCS5kb2l0ID0gbmw4MDIxMV9kaXNhc3NvY2lhdGUsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCit9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX21sbWVfbWNncnAgPSB7CisJLm5hbWUgPSAibWxtZSIsCiB9OwogCiAvKiBtdWx0aWNhc3QgZ3JvdXBzICovCiBzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfY29uZmlnX21jZ3JwID0gewogCS5uYW1lID0gImNvbmZpZyIsCiB9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3NjYW5fbWNncnAgPSB7CisJLm5hbWUgPSAic2NhbiIsCit9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAgPSB7CisJLm5hbWUgPSAicmVndWxhdG9yeSIsCit9OwogCiAvKiBub3RpZmljYXRpb24gZnVuY3Rpb25zICovCiAKQEAgLTIzMjAsNiArMzIxMSwxODYgQEAKIAlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfY29uZmlnX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKHN0cnVjdCBza19idWZmICptc2csCisJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAorCQkJCSAgICB1MzIgY21kKQoreworCXZvaWQgKmhkcjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBjbWQpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCisJLyogWFhYOiB3ZSBzaG91bGQgcHJvYmFibHkgYm91bmNlIGJhY2sgdGhlIHJlcXVlc3Q/ICovCisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJICAgICAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworfQorCisvKgorICogVGhpcyBjYW4gaGFwcGVuIG9uIGdsb2JhbCByZWd1bGF0b3J5IGNoYW5nZXMgb3IgZGV2aWNlIHNwZWNpZmljIHNldHRpbmdzCisgKiBiYXNlZCBvbiBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW5zLgorICovCit2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX1JFR19DSEFOR0UpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFVzZXJzcGFjZSBjYW4gYWx3YXlzIGNvdW50IHRoaXMgb25lIGFsd2F5cyBiZWluZyBzZXQgKi8KKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsIHJlcXVlc3QtPmluaXRpYXRvcik7CisKKwlpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICcwJyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzAnKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCk7CisJZWxzZSBpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICc5JyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzknKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQpOworCWVsc2UgaWYgKChyZXF1ZXN0LT5hbHBoYTJbMF0gPT0gJzknICYmIHJlcXVlc3QtPmFscGhhMlsxXSA9PSAnOCcpIHx8CisJCSByZXF1ZXN0LT5pbnRlcnNlY3QpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTik7CisJZWxzZSB7CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlkpOworCQlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9SRUdfQUxQSEEyLCByZXF1ZXN0LT5hbHBoYTIpOworCX0KKworCWlmICh3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm47CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCitzdGF0aWMgdm9pZCBubDgwMjExX3NlbmRfbWxtZV9ldmVudChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sCisJCQkJICAgIGVudW0gbmw4MDIxMV9jb21tYW5kcyBjbWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIGNtZCk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FLCBsZW4sIGJ1Zik7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfbWxtZV9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQoreworCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCisJCQkJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcnhfYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgIHNpemVfdCBsZW4pCit7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwgTkw4MDIxMV9DTURfQVNTT0NJQVRFKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLAorCQkJICAgIHNpemVfdCBsZW4pCit7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKKwkJCQlOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgICBzaXplX3QgbGVuKQoreworCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCisJCQkJTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFKTsKK30KKwogLyogaW5pdGlhbGlzYXRpb24vZXhpdCBmdW5jdGlvbnMgKi8KIAogaW50IG5sODAyMTFfaW5pdCh2b2lkKQpAQCAtMjM0MCw2ICszNDExLDE4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3NjYW5fbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGdlbmxfcmVnaXN0ZXJfbWNfZ3JvdXAoJm5sODAyMTFfZmFtLCAmbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZubDgwMjExX2ZhbSwgJm5sODAyMTFfbWxtZV9tY2dycCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCiAJcmV0dXJuIDA7CiAgZXJyX291dDoKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZubDgwMjExX2ZhbSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaAppbmRleCBmM2VhNWMwLi5iNzdhZjRhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKQEAgLTMsMjIgKzMsMjUgQEAKIAogI2luY2x1ZGUgImNvcmUuaCIKIAotI2lmZGVmIENPTkZJR19OTDgwMjExCiBleHRlcm4gaW50IG5sODAyMTFfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG5sODAyMTFfZXhpdCh2b2lkKTsKIGV4dGVybiB2b2lkIG5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBubDgwMjExX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBubDgwMjExX2V4aXQodm9pZCkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKAotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTkw4MDIxMSAqLworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKIAogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IGJkMGExNmMuLjYzMjdlMTYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTQxLDM4ICs0MSw3IEBACiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgotCi0vKioKLSAqIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgLSByZWNlaXB0IG9mIGxhc3QgcmVndWxhdG9yeSByZXF1ZXN0Ci0gKgotICogQHdpcGh5OiB0aGlzIGlzIHNldCBpZiB0aGlzIHJlcXVlc3QncyBpbml0aWF0b3IgaXMKLSAqIAklUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yICVSRUdET01fU0VUX0JZX0RSSVZFUi4gVGhpcwotICogCWNhbiBiZSB1c2VkIGJ5IHRoZSB3aXJlbGVzcyBjb3JlIHRvIGRlYWwgd2l0aCBjb25mbGljdHMKLSAqIAlhbmQgcG90ZW50aWFsbHkgaW5mb3JtIHVzZXJzIG9mIHdoaWNoIGRldmljZXMgc3BlY2lmaWNhbGx5Ci0gKiAJY2FzZWQgdGhlIGNvbmZsaWN0cy4KLSAqIEBpbml0aWF0b3I6IGluZGljYXRlcyB3aG8gc2VudCB0aGlzIHJlcXVlc3QsIGNvdWxkIGJlIGFueSBvZgotICogCW9mIHRob3NlIHNldCBpbiByZWdfc2V0X2J5LCAlUkVHRE9NX1NFVF9CWV8qCi0gKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCi0gKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKLSAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCi0gKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucwotICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAotICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5Ci0gKiAJZG9tYWluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKLSAqIAljb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKLSAqIAlpbmRvb3IsIG9yIGlmIGl0IGRvZXNuJ3QgbWF0dGVyCi0gKi8KLXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgewotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JZW51bSByZWdfc2V0X2J5IGluaXRpYXRvcjsKLQljaGFyIGFscGhhMlsyXTsKLQlib29sIGludGVyc2VjdDsKLQl1MzIgY291bnRyeV9pZV9jaGVja3N1bTsKLQllbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2VudjsKLX07CisjaW5jbHVkZSAibmw4MDIxMS5oIgogCiAvKiBSZWNlaXB0IG9mIGluZm9ybWF0aW9uIGZyb20gbGFzdCByZWd1bGF0b3J5IHJlcXVlc3QgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsYXN0X3JlcXVlc3Q7CkBAIC04NiwyMiArNTUsNjMgQEAKIAlNSFpfVE9fS0haKDIwKSwKIH07CiAKLS8qIENlbnRyYWwgd2lyZWxlc3MgY29yZSByZWd1bGF0b3J5IGRvbWFpbnMsIHdlIG9ubHkgbmVlZCB0d28sCisvKgorICogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKICAqIHRoZSBjdXJyZW50IG9uZSBhbmQgYSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIHdlIGhhdmUgbm8KLSAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3JlZ2RvbWFpbjsKKyAqIGluZm9ybWF0aW9uIHRvIGdpdmUgdXMgYW4gYWxwaGEyCisgKi8KK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CiAKLS8qIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKKy8qCisgKiBXZSB1c2UgdGhpcyBhcyBhIHBsYWNlIGZvciB0aGUgcmQgc3RydWN0dXJlIGJ1aWx0IGZyb20gdGhlCiAgKiBsYXN0IHBhcnNlZCBjb3VudHJ5IElFIHRvIHJlc3QgdW50aWwgQ1JEQSBnZXRzIGJhY2sgdG8gdXMgd2l0aAotICogd2hhdCBpdCB0aGlua3Mgc2hvdWxkIGFwcGx5IGZvciB0aGUgc2FtZSBjb3VudHJ5ICovCisgKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkKKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbjsKIAorLyogVXNlZCB0byBxdWV1ZSB1cCByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19yZXF1ZXN0c19saXN0KTsKK3N0YXRpYyBzcGlubG9ja190IHJlZ19yZXF1ZXN0c19sb2NrOworCisvKiBVc2VkIHRvIHF1ZXVlIHVwIGJlYWNvbiBoaW50cyBmb3IgcmV2aWV3ICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19wZW5kaW5nX2JlYWNvbnMpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrOworCisvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgcHJvY2Vzc2VkIGJlYWNvbiBoaW50cyAqLworc3RhdGljIExJU1RfSEVBRChyZWdfYmVhY29uX2xpc3QpOworCitzdHJ1Y3QgcmVnX2JlYWNvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFuOworfTsKKwogLyogV2Uga2VlcCBhIHN0YXRpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIG9mIHRoZSBhYnNlbmNlIG9mIENSREEgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB3b3JsZF9yZWdkb20gPSB7Ci0JLm5fcmVnX3J1bGVzID0gMSwKKwkubl9yZWdfcnVsZXMgPSA1LAogCS5hbHBoYTIgPSAgIjAwIiwKIAkucmVnX3J1bGVzID0gewotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsIDApLAorCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMTIuLjEzLiBObyBIVDQwCisJCSAqIGNoYW5uZWwgZml0cyBoZXJlLiAqLworCQlSRUdfUlVMRSgyNDY3LTEwLCAyNDcyKzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCisJCS8qIElFRUUgODAyLjExIGNoYW5uZWwgMTQgLSBPbmx5IEpQIGVuYWJsZXMKKwkJICogdGhpcyBhbmQgZm9yIDgwMi4xMWIgb25seSAqLworCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCAyMCwgNiwgMjAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyB8CisJCQlOTDgwMjExX1JSRl9OT19PRkRNKSwKKwkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVsIDM2Li40OCAqLworCQlSRUdfUlVMRSg1MTgwLTEwLCA1MjQwKzEwLCA0MCwgNiwgMjAsCisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAorICAgICAgICAgICAgICAgICAgICAgICAgTkw4MDIxMV9SUkZfTk9fSUJTUyksCisKKwkJLyogTkI6IDUyNjAgTUh6IC0gNTcwMCBNSHogcmVxdWllcyBERlMgKi8KKworCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMTQ5Li4xNjUgKi8KKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDYsIDIwLAogCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwKIAkJCU5MODAyMTFfUlJGX05PX0lCU1MpLAogCX0KQEAgLTExMiwxMiArMTIyLDE5IEBACiAKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIlVTIjsKKyNlbHNlCitzdGF0aWMgY2hhciAqaWVlZTgwMjExX3JlZ2RvbSA9ICIwMCI7CisjZW5kaWYKKwogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKIAotLyogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgorI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQorLyoKKyAqIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KICAqIFdlIG1ha2UgZW1waGFzaXMgd2UgYXJlIHVzaW5nIHRoZSBleGFjdCBzYW1lIGZyZXF1ZW5jaWVzCi0gKiBhcyBiZWZvcmUgKi8KKyAqIGFzIGJlZm9yZQorICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNiwKQEAgLTE1Niw4ICsxNzMsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGV1X3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA2LAotCS8qIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAotCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwkvKgorCSAqIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAorCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkgKi8KIAkuYWxwaGEyID0gICJFVSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjEzICovCkBAIC0yMjYsOCArMjQ1LDEwIEBACiAJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKIH0KIAotLyogRHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0ZWQgYnkgdGhlIHdpcmVsZXNzCi0gKiBjb3JlIHVwb24gaW5pdGlhbGl6YXRpb24gKi8KKy8qCisgKiBEeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3RlZCBieSB0aGUgd2lyZWxlc3MKKyAqIGNvcmUgdXBvbiBpbml0aWFsaXphdGlvbgorICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfd29ybGRfcmVnZG9tYWluKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlCVUdfT04oIWxhc3RfcmVxdWVzdCk7CkBAIC0yNjgsOCArMjg5LDEwIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gd2FzIGJ1aWx0IGJ5IGRyaXZlcgotCSAqIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAqLworCS8qCisJICogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBidWlsdCBieSBkcml2ZXIKKwkgKiBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKKwkgKi8KIAlpZiAoYWxwaGEyWzBdID09ICc5JyAmJiBhbHBoYTJbMV0gPT0gJzknKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNzksOSArMzAyLDExIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCisJLyoKKwkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCiAJICogcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbgotCSAqIHN0cnVjdHVyZXMgKi8KKwkgKiBzdHJ1Y3R1cmVzCisJICovCiAJaWYgKGFscGhhMlswXSA9PSAnOScgJiYgYWxwaGEyWzFdID09ICc4JykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMzA2LDggKzMzMSwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZWQoY29uc3QgY2hhciAqYWxwaGEyKQorc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZXMoY29uc3QgY2hhciAqYWxwaGEyKQogeworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwgYWxwaGEyKSkKQEAgLTMzNCw4ICszNjEsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQotICogYmFzaXMgaW4gdXNlcnNwYWNlLiAqLworLyoKKyAqIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQorICogYmFzaXMgaW4gdXNlcnNwYWNlLgorICovCiBzdGF0aWMgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpCiB7CiAJY2hhciBjb3VudHJ5X2Vudls5ICsgMl0gPSAiQ09VTlRSWT0iOwpAQCAtNDQ3LDEwICs0NzYsMTIgQEAKICN1bmRlZiBPTkVfR0haX0lOX0tIWgogfQogCi0vKiBDb252ZXJ0cyBhIGNvdW50cnkgSUUgdG8gYSByZWd1bGF0b3J5IGRvbWFpbi4gQSByZWd1bGF0b3J5IGRvbWFpbgorLyoKKyAqIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBzdHJ1Y3R1cmUgaGFzIGEgbG90IG9mIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBJRSBkb2Vzbid0IHlldCBoYXZlLAogICogc28gZm9yIHRoZSBvdGhlciB2YWx1ZXMgd2UgdXNlIHVwcGVyIG1heCB2YWx1ZXMgYXMgd2Ugd2lsbCBpbnRlcnNlY3QKLSAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuICovCisgKiB3aXRoIG91ciB1c2Vyc3BhY2UgcmVndWxhdG9yeSBhZ2VudCB0byBnZXQgbG93ZXIgYm91bmRzLgorICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfMl9yZCgKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbiwKQEAgLTQ5NSw5ICs1MjYsMTEgQEAKIAogCSpjaGVja3N1bSBePSAoKGZsYWdzIF4gYWxwaGEyWzBdIF4gYWxwaGEyWzFdKSA8PCA4KTsKIAotCS8qIFdlIG5lZWQgdG8gYnVpbGQgYSByZWcgcnVsZSBmb3IgZWFjaCB0cmlwbGV0LCBidXQgZmlyc3Qgd2UgbXVzdAorCS8qCisJICogV2UgbmVlZCB0byBidWlsZCBhIHJlZyBydWxlIGZvciBlYWNoIHRyaXBsZXQsIGJ1dCBmaXJzdCB3ZSBtdXN0CiAJICogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcmVnIHJ1bGVzIHdlIHdpbGwgbmVlZC4gV2Ugd2lsbCBuZWVkIG9uZQotCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZCAqLworCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZAorCSAqLwogCXdoaWxlIChjb3VudHJ5X2llX2xlbiA+PSAzKSB7CiAJCWludCBlbmRfY2hhbm5lbCA9IDA7CiAJCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0cmlwbGV0ID0KQEAgLTUzNSw5ICs1NjgsMTEgQEAKIAkJaWYgKGN1cl9zdWJfbWF4X2NoYW5uZWwgPCBjdXJfY2hhbm5lbCkKIAkJCXJldHVybiBOVUxMOwogCi0JCS8qIERvIG5vdCBhbGxvdyBvdmVybGFwcGluZyBjaGFubmVscy4gQWxzbyBjaGFubmVscworCQkvKgorCQkgKiBEbyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgY2hhbm5lbHMuIEFsc28gY2hhbm5lbHMKIAkJICogcGFzc2VkIGluIGVhY2ggc3ViYmFuZCBtdXN0IGJlIG1vbm90b25pY2FsbHkKLQkJICogaW5jcmVhc2luZyAqLworCQkgKiBpbmNyZWFzaW5nCisJCSAqLwogCQlpZiAobGFzdF9zdWJfbWF4X2NoYW5uZWwpIHsKIAkJCWlmIChjdXJfY2hhbm5lbCA8PSBsYXN0X3N1Yl9tYXhfY2hhbm5lbCkKIAkJCQlyZXR1cm4gTlVMTDsKQEAgLTU0NSwxMCArNTgwLDEyIEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQkvKiBXaGVuIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyBzdXBwb3J0ZWQKKwkJLyoKKwkJICogV2hlbiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgc3VwcG9ydGVkCiAJCSAqIHdlIGNhbiB0aHJvdyBleHQgdHJpcGxldHMgYXMgcGFydCBvZiB0aGlzIHNvdXAsCiAJCSAqIGZvciBub3cgd2UgZG9uJ3QgY2FyZSB3aGVuIHRob3NlIGNoYW5nZSBhcyB3ZQotCQkgKiBkb24ndCBzdXBwb3J0IHRoZW0gKi8KKwkJICogZG9uJ3Qgc3VwcG9ydCB0aGVtCisJCSAqLwogCQkqY2hlY2tzdW0gXj0gKChjdXJfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDgpIHwKIAkJICAoKGN1cl9zdWJfbWF4X2NoYW5uZWwgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAxNikgfAogCQkgICgodHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgMjQpOwpAQCAtNTU5LDggKzU5NiwxMCBAQAogCQljb3VudHJ5X2llX2xlbiAtPSAzOwogCQludW1fcnVsZXMrKzsKIAotCQkvKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0Ci0JCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudCAqLworCQkvKgorCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0CisJCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudAorCQkgKi8KIAkJaWYgKG51bV9ydWxlcyA+IE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTKQogCQkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTg4LDggKzYyNywxMCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2UgPSBOVUxMOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwogCi0JCS8qIE11c3QgcGFyc2UgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHRydWUsCi0JCSAqIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQgKi8KKwkJLyoKKwkJICogTXVzdCBwYXJzZSBpZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSwKKwkJICogd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldAorCQkgKi8KIAkJaWYgKHRyaXBsZXQtPmV4dC5yZWdfZXh0ZW5zaW9uX2lkID49CiAJCQkJSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEKSB7CiAJCQljb3VudHJ5X2llICs9IDM7CkBAIC02MTEsMTAgKzY1MiwxMiBAQAogCQkJZW5kX2NoYW5uZWwgPSAgdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCiAJCQkJKDQgKiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMSkpOwogCi0JCS8qIFRoZSArMTAgaXMgc2luY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGV4cGVjdHMKKwkJLyoKKwkJICogVGhlICsxMCBpcyBzaW5jZSB0aGUgcmVndWxhdG9yeSBkb21haW4gZXhwZWN0cwogCQkgKiB0aGUgYWN0dWFsIGJhbmQgZWRnZSwgbm90IHRoZSBjZW50ZXIgb2YgZnJlcSBmb3IKIAkJICogaXRzIHN0YXJ0IGFuZCBlbmQgZnJlcXMsIGFzc3VtaW5nIDIwIE1IeiBiYW5kd2lkdGggb24KLQkJICogdGhlIGNoYW5uZWxzIHBhc3NlZCAqLworCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkCisJCSAqLwogCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeiA9CiAJCQlNSFpfVE9fS0haKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgKIAkJCQl0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsKSAtIDEwKTsKQEAgLTYyMiw5ICs2NjUsMTEgQEAKIAkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAogCQkJCWVuZF9jaGFubmVsKSArIDEwKTsKIAotCQkvKiBMYXJnZSBhcmJpdHJhcnkgdmFsdWVzLCB3ZSBpbnRlcnNlY3QgbGF0ZXIgKi8KLQkJLyogSW5jcmVtZW50IHRoaXMgaWYgd2UgZXZlciBzdXBwb3J0ID49IDQwIE1IeiBjaGFubmVscwotCQkgKiBpbiBJRUVFIDgwMi4xMSAqLworCQkvKgorCQkgKiBUaGVzZSBhcmUgbGFyZ2UgYXJiaXRyYXJ5IHZhbHVlcyB3ZSB1c2UgdG8gaW50ZXJzZWN0IGxhdGVyLgorCQkgKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCisJCSAqIGluIElFRUUgODAyLjExCisJCSAqLwogCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA9IE1IWl9UT19LSFooNDApOwogCQlwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluID0gREJJX1RPX01CSSgxMDApOwogCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0oMTAwKTsKQEAgLTY0MCw4ICs2ODUsMTAgQEAKIH0KIAogCi0vKiBIZWxwZXIgZm9yIHJlZ2RvbV9pbnRlcnNlY3QoKSwgdGhpcyBkb2VzIHRoZSByZWFsCi0gKiBtYXRoZW1hdGljYWwgaW50ZXJzZWN0aW9uIGZ1biAqLworLyoKKyAqIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKKyAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuCisgKi8KIHN0YXRpYyBpbnQgcmVnX3J1bGVzX2ludGVyc2VjdCgKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMSwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMiwKQEAgLTcxOSwxMSArNzY2LDEzIEBACiAJaWYgKCFyZDEgfHwgIXJkMikKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBGaXJzdCB3ZSBnZXQgYSBjb3VudCBvZiB0aGUgcnVsZXMgd2UnbGwgbmVlZCwgdGhlbiB3ZSBhY3R1YWxseQorCS8qCisJICogRmlyc3Qgd2UgZ2V0IGEgY291bnQgb2YgdGhlIHJ1bGVzIHdlJ2xsIG5lZWQsIHRoZW4gd2UgYWN0dWFsbHkKIAkgKiBidWlsZCB0aGVtLiBUaGlzIGlzIHRvIHNvIHdlIGNhbiBtYWxsb2MoKSBhbmQgZnJlZSgpIGEKIAkgKiByZWdkb21haW4gb25jZS4gVGhlIHJlYXNvbiB3ZSB1c2UgcmVnX3J1bGVzX2ludGVyc2VjdCgpIGhlcmUKIAkgKiBpcyBpdCB3aWxsIHJldHVybiAtRUlOVkFMIGlmIHRoZSBydWxlIGNvbXB1dGVkIG1ha2VzIG5vIHNlbnNlLgotCSAqIEFsbCBydWxlcyB0aGF0IGRvIGNoZWNrIG91dCBPSyBhcmUgdmFsaWQuICovCisJICogQWxsIHJ1bGVzIHRoYXQgZG8gY2hlY2sgb3V0IE9LIGFyZSB2YWxpZC4KKwkgKi8KIAogCWZvciAoeCA9IDA7IHggPCByZDEtPm5fcmVnX3J1bGVzOyB4KyspIHsKIAkJcnVsZTEgPSAmcmQxLT5yZWdfcnVsZXNbeF07CkBAIC03NTEsMTQgKzgwMCwxOCBAQAogCQlydWxlMSA9ICZyZDEtPnJlZ19ydWxlc1t4XTsKIAkJZm9yICh5ID0gMDsgeSA8IHJkMi0+bl9yZWdfcnVsZXM7IHkrKykgewogCQkJcnVsZTIgPSAmcmQyLT5yZWdfcnVsZXNbeV07Ci0JCQkvKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKKwkJCS8qCisJCQkgKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKIAkJCSAqIHdyaXRlIHRvIHRoZSB0YXJnZXQgcnVsZSBkaXJlY3RseSBzYXZpbmcgb3Vyc2VsdmVzCi0JCQkgKiBhIG1lbWNweSgpICovCisJCQkgKiBhIG1lbWNweSgpCisJCQkgKi8KIAkJCWludGVyc2VjdGVkX3J1bGUgPSAmcmQtPnJlZ19ydWxlc1tydWxlX2lkeF07CiAJCQlyID0gcmVnX3J1bGVzX2ludGVyc2VjdChydWxlMSwgcnVsZTIsCiAJCQkJaW50ZXJzZWN0ZWRfcnVsZSk7Ci0JCQkvKiBObyBuZWVkIHRvIG1lbXNldCBoZXJlIHRoZSBpbnRlcnNlY3RlZCBydWxlIGhlcmUgYXMKLQkJCSAqIHdlJ3JlIG5vdCB1c2luZyB0aGUgc3RhY2sgYW55bW9yZSAqLworCQkJLyoKKwkJCSAqIE5vIG5lZWQgdG8gbWVtc2V0IGhlcmUgdGhlIGludGVyc2VjdGVkIHJ1bGUgaGVyZSBhcworCQkJICogd2UncmUgbm90IHVzaW5nIHRoZSBzdGFjayBhbnltb3JlCisJCQkgKi8KIAkJCWlmIChyKQogCQkJCWNvbnRpbnVlOwogCQkJcnVsZV9pZHgrKzsKQEAgLTc3Nyw4ICs4MzAsMTAgQEAKIAlyZXR1cm4gcmQ7CiB9CiAKLS8qIFhYWDogYWRkIHN1cHBvcnQgZm9yIHRoZSByZXN0IG9mIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncywgd2UgbWF5Ci0gKiB3YW50IHRvIGp1c3QgaGF2ZSB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUgdXNlIHRoZXNlICovCisvKgorICogWFhYOiBhZGQgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLCB3ZSBtYXkKKyAqIHdhbnQgdG8ganVzdCBoYXZlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSB1c2UgdGhlc2UKKyAqLwogc3RhdGljIHUzMiBtYXBfcmVnZG9tX2ZsYWdzKHUzMiByZF9mbGFncykKIHsKIAl1MzIgY2hhbm5lbF9mbGFncyA9IDA7CkBAIC03OTEsNDggKzg0Niw0NSBAQAogCXJldHVybiBjaGFubmVsX2ZsYWdzOwogfQogCi0vKioKLSAqIGZyZXFfcmVnX2luZm8gLSBnZXQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeQotICogQGNlbnRlcl9mcmVxOiBGcmVxdWVuY3kgaW4gS0h6IGZvciB3aGljaCB3ZSB3YW50IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yCi0gKiBAYmFuZHdpZHRoOiB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50IHlvdSBoYXZlIGluIEtIeiwgaWYgeW91IGRvIG5vdCBoYXZlIG9uZQotICogCXlvdSBjYW4gc2V0IHRoaXMgdG8gMC4gSWYgdGhpcyBmcmVxdWVuY3kgaXMgYWxsb3dlZCB3ZSB0aGVuIHNldAotICogCXRoaXMgdmFsdWUgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBiYW5kd2lkdGguCi0gKiBAcmVnX3J1bGU6IHRoZSByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggd2UgaGF2ZSBmb3IgdGhpcyBmcmVxdWVuY3kKLSAqCi0gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBzcGVjaWZpYyBmcmVxdWVuY3kgb24KLSAqIGEgZ2l2ZW4gd2lyZWxlc3MgZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBhIHNwZWNpZmljIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBpdCB3YW50cyB0byBmb2xsb3cgd2UgcmVzcGVjdCB0aGF0IHVubGVzcyBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQKLSAqIGFuZCBwcm9jZXNzZWQgYWxyZWFkeS4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBhIHZhbGlkIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCBkb2VzCi0gKiBhcHBseSB0byB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgb3RoZXJ3aXNlIGl0IHJldHVybnMgbm9uLXplcm8uIEl0IHdpbGwKLSAqIGFsc28gcmV0dXJuIC1FUkFOR0UgaWYgd2UgZGV0ZXJtaW5lIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBkb2VzIG5vdCBldmVuIGhhdmUKLSAqIGEgcmVndWxhdG9yeSBydWxlIGZvciBhIGZyZXF1ZW5jeSByYW5nZSBpbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLiBTZWUKLSAqIGZyZXFfaW5fcnVsZV9iYW5kKCkgZm9yIG91ciBjdXJyZW50IGRlZmluaXRpb24gb2YgYSBiYW5kIC0tIHRoaXMgaXMgcHVyZWx5Ci0gKiBzdWJqZWN0aXZlIGFuZCByaWdodCBub3cgaXRzIDgwMi4xMSBzcGVjaWZpYy4KLSAqLwotc3RhdGljIGludCBmcmVxX3JlZ19pbmZvKHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCi0JCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKQorc3RhdGljIGludCBmcmVxX3JlZ19pbmZvX3JlZ2Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHUzMiBjZW50ZXJfZnJlcSwKKwkJCSAgICAgIHUzMiAqYmFuZHdpZHRoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1c3RvbV9yZWdkKQogewogCWludCBpOwogCWJvb2wgYmFuZF9ydWxlX2ZvdW5kID0gZmFsc2U7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CiAJdTMyIG1heF9iYW5kd2lkdGggPSAwOwogCi0JaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCisJcmVnZCA9IGN1c3RvbV9yZWdkID8gY3VzdG9tX3JlZ2QgOiBjZmc4MDIxMV9yZWdkb21haW47CisKKwkvKgorCSAqIEZvbGxvdyB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIHByZXNlbnQsIHVubGVzcyBhIGNvdW50cnkKKwkgKiBJRSBoYXMgYmVlbiBwcm9jZXNzZWQgb3IgYSB1c2VyIHdhbnRzIHRvIGhlbHAgY29tcGxhaW5jZSBmdXJ0aGVyCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSICYmCisJICAgIHdpcGh5LT5yZWdkKQorCQlyZWdkID0gd2lwaHktPnJlZ2Q7CisKKwlpZiAoIXJlZ2QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZzgwMjExX3JlZ2RvbWFpbi0+bl9yZWdfcnVsZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZWdkLT5uX3JlZ19ydWxlczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJyOwogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyID0gTlVMTDsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwciA9IE5VTEw7CiAKLQkJcnIgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCXJyID0gJnJlZ2QtPnJlZ19ydWxlc1tpXTsKIAkJZnIgPSAmcnItPmZyZXFfcmFuZ2U7CiAJCXByID0gJnJyLT5wb3dlcl9ydWxlOwogCi0JCS8qIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKKwkJLyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgb25lIGZyZXF1ZW5jeSBydWxlIHdhcwogCQkgKiB3YXMgaW4gY2VudGVyX2ZyZXEncyBiYW5kLCB0aGF0J3MgZW5vdWdoLCBzbyBsZXRzCi0JCSAqIG5vdCBvdmVyd3JpdGUgaXQgb25jZSBmb3VuZCAqLworCQkgKiBub3Qgb3ZlcndyaXRlIGl0IG9uY2UgZm91bmQKKwkJICovCiAJCWlmICghYmFuZF9ydWxlX2ZvdW5kKQogCQkJYmFuZF9ydWxlX2ZvdW5kID0gZnJlcV9pbl9ydWxlX2JhbmQoZnIsIGNlbnRlcl9mcmVxKTsKIApAQCAtODUwLDYgKzkwMiwxNCBAQAogCiAJcmV0dXJuICFtYXhfYmFuZHdpZHRoOwogfQorRVhQT1JUX1NZTUJPTChmcmVxX3JlZ19pbmZvKTsKKworaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpCit7CisJcmV0dXJuIGZyZXFfcmVnX2luZm9fcmVnZCh3aXBoeSwgY2VudGVyX2ZyZXEsCisJCWJhbmR3aWR0aCwgcmVnX3J1bGUsIE5VTEwpOworfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgpCkBAIC04NjEsNiArOTIxLDExIEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5ID0gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAogCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOwogCUJVR19PTihjaGFuX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscyk7CkBAIC04NjgsMTEgKzkzMywxMiBAQAogCiAJZmxhZ3MgPSBjaGFuLT5vcmlnX2ZsYWdzOwogCi0JciA9IGZyZXFfcmVnX2luZm8oTUhaX1RPX0tIWihjaGFuLT5jZW50ZXJfZnJlcSksCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIE1IWl9UT19LSFooY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQkmbWF4X2JhbmR3aWR0aCwgJnJlZ19ydWxlKTsKIAogCWlmIChyKSB7Ci0JCS8qIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQorCQkvKgorCQkgKiBUaGlzIG1lYW5zIG5vIHJlZ3VsYXRvcnkgcnVsZSB3YXMgZm91bmQgaW4gdGhlIGNvdW50cnkgSUUKIAkJICogd2l0aCBhIGZyZXF1ZW5jeSByYW5nZSBvbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLCBzaW5jZQogCQkgKiBJRUVFLTgwMi4xMSBhbGxvd3MgZm9yIGEgY291bnRyeSBJRSB0byBoYXZlIGEgc3Vic2V0IG9mIHRoZQogCQkgKiByZWd1bGF0b3J5IGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGEgY291bnRyeSB3ZSBpZ25vcmUKQEAgLTg4Myw3ICs5NDksOCBAQAogCQkgKiBodHRwOi8vdGlueXVybC5jb20vMTFkLWNsYXJpZmljYXRpb24KIAkJICovCiAJCWlmIChyID09IC1FUkFOR0UgJiYKLQkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBMZWF2aW5nIGNoYW5uZWwgJWQgTUh6ICIKIAkJCQkiaW50YWN0IG9uICVzIC0gbm8gcnVsZSBmb3VuZCBpbiBiYW5kIG9uICIKQEAgLTg5MSwxMCArOTU4LDEzIEBACiAJCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKICNlbmRpZgogCQl9IGVsc2UgewotCQkvKiBJbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgY291bnRyeSBJRSBoYXMgYXQgbGVhc3Qgb25lIHJlZyBydWxlCi0JCSAqIGZvciB0aGUgYmFuZCBzbyB3ZSByZXNwZWN0IGl0cyBiYW5kIGRlZmluaXRpb25zICovCisJCS8qCisJCSAqIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKKwkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMKKwkJICovCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwotCQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKKwkJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRGlzYWJsaW5nICIKIAkJCQkJImNoYW5uZWwgJWQgTUh6IG9uICVzIGR1ZSB0byAiCiAJCQkJCSJDb3VudHJ5IElFXG4iLApAQCAtOTA4LDYgKzk3OCwyNCBAQAogCiAJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJICAgIHJlcXVlc3Rfd2lwaHkgJiYgcmVxdWVzdF93aXBoeSA9PSB3aXBoeSAmJgorCSAgICByZXF1ZXN0X3dpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSkgeworCQkvKgorCQkgKiBUaGlzIGdhdXJhbnRlZXMgdGhlIGRyaXZlcidzIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbgorCQkgKiB3aWxsIGFsd2F5cyBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgZnVydGhlciByZWd1bGF0b3J5CisJCSAqIHNldHRpbmdzCisJCSAqLworCQljaGFuLT5mbGFncyA9IGNoYW4tPm9yaWdfZmxhZ3MgPQorCQkJbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOworCQljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gY2hhbi0+b3JpZ19tYWcgPQorCQkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwkJY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFoobWF4X2JhbmR3aWR0aCk7CisJCWNoYW4tPm1heF9wb3dlciA9IGNoYW4tPm9yaWdfbXB3ciA9CisJCQkoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKKwkJcmV0dXJuOworCX0KKwogCWNoYW4tPmZsYWdzID0gZmxhZ3MgfCBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CiAJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IG1pbihjaGFuLT5vcmlnX21hZywKIAkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKSk7CkBAIC05MzEsMTE2ICsxMDE5LDUxMyBAQAogCQloYW5kbGVfY2hhbm5lbCh3aXBoeSwgYmFuZCwgaSk7CiB9CiAKLXN0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiB0cnVlOwotCWlmIChzZXRieSA9PSBSRUdET01fU0VUX0JZX0NPUkUgJiYKLQkJICB3aXBoeS0+ZndfaGFuZGxlc19yZWd1bGF0b3J5KQorCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgJiYKKwkJICB3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpCisJCXJldHVybiB0cnVlOworCS8qCisJICogd2lwaHktPnJlZ2Qgd2lsbCBiZSBzZXQgb25jZSB0aGUgZGV2aWNlIGhhcyBpdHMgb3duCisJICogZGVzaXJlZCByZWd1bGF0b3J5IGRvbWFpbiBzZXQKKwkgKi8KKwlpZiAod2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ICYmICF3aXBoeS0+cmVnZCAmJgorCSAgICAhaXNfd29ybGRfcmVnZG9tKGxhc3RfcmVxdWVzdC0+YWxwaGEyKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSByZWdfc2V0X2J5IHNldGJ5KQorc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCWlmICghaWdub3JlX3JlZ191cGRhdGUoJmRydi0+d2lwaHksIHNldGJ5KSkKLQkJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBzZXRieSk7CisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBpbml0aWF0b3IpOwogfQogCi12b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkgICAgICBzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbikKK3sKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisjZGVmaW5lIFJFR19ERUJVR19CRUFDT05fRkxBRyhkZXNjKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBFbmFibGluZyAiIGRlc2MgIiBvbiAiIFwKKwkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsIFwKKwkJcmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSwgXAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwocmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSksIFwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2Vsc2UKKyNkZWZpbmUgUkVHX0RFQlVHX0JFQUNPTl9GTEFHKGRlc2MpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbY2hhbl9pZHhdOworCisJaWYgKGxpa2VseShjaGFuLT5jZW50ZXJfZnJlcSAhPSByZWdfYmVhY29uLT5jaGFuLmNlbnRlcl9mcmVxKSkKKwkJcmV0dXJuOworCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSB7CisJCWNoYW4tPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCVJFR19ERUJVR19CRUFDT05fRkxBRygiYWN0aXZlIHNjYW5uaW5nIik7CisJfQorCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSUJTUykgeworCQljaGFuLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJUkVHX0RFQlVHX0JFQUNPTl9GTEFHKCJiZWFjb25pbmciKTsKKwl9CisKKwljaGFuLT5iZWFjb25fZm91bmQgPSB0cnVlOworI3VuZGVmIFJFR19ERUJVR19CRUFDT05fRkxBRworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYSBzY2FuIG9uIGEgd2lwaHkgZmluZHMgYSBiZWFjb24gb24KKyAqIG5ldyBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJaGFuZGxlX3JlZ19iZWFjb24od2lwaHksIGksIHJlZ19iZWFjb24pOworfQorCisvKgorICogQ2FsbGVkIHVwb24gcmVnIGNoYW5nZXMgb3IgYSBuZXcgd2lwaHkgaXMgYWRkZWQKKyAqLworc3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX2JlYWNvbl9yZWcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX2JlYWNvbl9saXN0KSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdfYmVhY29uLCAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCQljb250aW51ZTsKKwkJc2JhbmQgPSB3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXTsKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCQloYW5kbGVfcmVnX2JlYWNvbih3aXBoeSwgaSwgcmVnX2JlYWNvbik7CisJfQorfQorCitzdGF0aWMgYm9vbCByZWdfaXNfd29ybGRfcm9hbWluZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWlmIChpc193b3JsZF9yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpIHx8CisJICAgICh3aXBoeS0+cmVnZCAmJiBpc193b3JsZF9yZWdkb20od2lwaHktPnJlZ2QtPmFscGhhMikpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgd2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJlYXAgdGhlIGFkdmFudGFnZXMgb2YgcHJldmlvdXNseSBmb3VuZCBiZWFjb25zICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19iZWFjb25zKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJaWYgKCFyZWdfaXNfd29ybGRfcm9hbWluZyh3aXBoeSkpCisJCXJldHVybjsKKwl3aXBoeV91cGRhdGVfYmVhY29uX3JlZyh3aXBoeSk7Cit9CisKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCWlmIChpZ25vcmVfcmVnX3VwZGF0ZSh3aXBoeSwgaW5pdGlhdG9yKSkKKwkJZ290byBvdXQ7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJaGFuZGxlX2JhbmQod2lwaHksIGJhbmQpOworCX0KK291dDoKKwlyZWdfcHJvY2Vzc19iZWFjb25zKHdpcGh5KTsKKwlpZiAod2lwaHktPnJlZ19ub3RpZmllcikKKwkJd2lwaHktPnJlZ19ub3RpZmllcih3aXBoeSwgbGFzdF9yZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWxfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwlpbnQgcjsKKwl1MzIgbWF4X2JhbmR3aWR0aCA9IDA7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGUgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisJQlVHX09OKGNoYW5faWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKTsKKwljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tjaGFuX2lkeF07CisKKwlyID0gZnJlcV9yZWdfaW5mb19yZWdkKHdpcGh5LCBNSFpfVE9fS0haKGNoYW4tPmNlbnRlcl9mcmVxKSwKKwkJJm1heF9iYW5kd2lkdGgsICZyZWdfcnVsZSwgcmVnZCk7CisKKwlpZiAocikgeworCQljaGFuLT5mbGFncyA9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCQlyZXR1cm47CisJfQorCisJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKKworCWNoYW4tPmZsYWdzIHw9IG1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKKwljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihtYXhfYmFuZHdpZHRoKTsKKwljaGFuLT5tYXhfcG93ZXIgPSAoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JhbmRfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCUJVR19PTighd2lwaHktPmJhbmRzW2JhbmRdKTsKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQloYW5kbGVfY2hhbm5lbF9jdXN0b20od2lwaHksIGJhbmQsIGksIHJlZ2QpOworfQorCisvKiBVc2VkIGJ5IGRyaXZlcnMgcHJpb3IgdG8gd2lwaHkgcmVnaXN0cmF0aW9uICovCit2b2lkIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpCiB7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKIAkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKLQkJCWhhbmRsZV9iYW5kKHdpcGh5LCBiYW5kKTsKLQkJaWYgKHdpcGh5LT5yZWdfbm90aWZpZXIpCi0JCQl3aXBoeS0+cmVnX25vdGlmaWVyKHdpcGh5LCBzZXRieSk7CisJCQloYW5kbGVfYmFuZF9jdXN0b20od2lwaHksIGJhbmQsIHJlZ2QpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi0vKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQotICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMgKi8KK3N0YXRpYyBpbnQgcmVnX2NvcHlfcmVnZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqKmRzdF9yZWdkLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzcmNfcmVnZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwlpbnQgc2l6ZV9vZl9yZWdkID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNpemVfb2ZfcmVnZCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikgKworCSAgKChzcmNfcmVnZC0+bl9yZWdfcnVsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwlyZWdkID0ga3phbGxvYyhzaXplX29mX3JlZ2QsIEdGUF9LRVJORUwpOworCWlmICghcmVnZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocmVnZCwgc3JjX3JlZ2QsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikpOworCisJZm9yIChpID0gMDsgaSA8IHNyY19yZWdkLT5uX3JlZ19ydWxlczsgaSsrKQorCQltZW1jcHkoJnJlZ2QtPnJlZ19ydWxlc1tpXSwgJnNyY19yZWdkLT5yZWdfcnVsZXNbaV0sCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOworCisJKmRzdF9yZWdkID0gcmVnZDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCBieSBpZ25vcmVfcmVxdWVzdCgpIHRvIGluZGljYXRlCisgKiBpdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHdlIHNob3VsZCBpbnRlcnNlY3QgdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICovCiAjZGVmaW5lIFJFR19JTlRFUlNFQ1QJMQogCiAvKiBUaGlzIGhhcyB0aGUgbG9naWMgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIGEgbmV3IHJlcXVlc3QKICAqIHNob3VsZCBiZSBpZ25vcmVkLiAqLwotc3RhdGljIGludCBpZ25vcmVfcmVxdWVzdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICBjb25zdCBjaGFyICphbHBoYTIpCitzdGF0aWMgaW50IGlnbm9yZV9yZXF1ZXN0KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnBlbmRpbmdfcmVxdWVzdCkKIHsKKwlzdHJ1Y3Qgd2lwaHkgKmxhc3Rfd2lwaHkgPSBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCS8qIEFsbCBpbml0aWFsIHJlcXVlc3RzIGFyZSByZXNwZWN0ZWQgKi8KIAlpZiAoIWxhc3RfcmVxdWVzdCkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKHNldF9ieSkgewotCWNhc2UgUkVHRE9NX1NFVF9CWV9JTklUOgorCXN3aXRjaCAocGVuZGluZ19yZXF1ZXN0LT5pbml0aWF0b3IpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgogCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09SRToKLQkJLyoKLQkJICogQWx3YXlzIHJlc3BlY3QgbmV3IHdpcmVsZXNzIGNvcmUgaGludHMsIHNob3VsZCBvbmx5IGhhcHBlbgotCQkgKiB3aGVuIHVwZGF0aW5nIHRoZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBhdCBpbml0LgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6Ci0JCWlmICh1bmxpa2VseSghaXNfYW5fYWxwaGEyKGFscGhhMikpKQorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisKKwkJbGFzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwkJaWYgKHVubGlrZWx5KCFpc19hbl9hbHBoYTIocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkgeworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCQlpZiAobGFzdF93aXBoeSAhPSB3aXBoeSkgewogCQkJCS8qCiAJCQkJICogVHdvIGNhcmRzIHdpdGggdHdvIEFQcyBjbGFpbWluZyBkaWZmZXJlbnQKIAkJCQkgKiBkaWZmZXJlbnQgQ291bnRyeSBJRSBhbHBoYTJzLiBXZSBjb3VsZAogCQkJCSAqIGludGVyc2VjdCB0aGVtLCBidXQgdGhhdCBzZWVtcyB1bmxpa2VseQogCQkJCSAqIHRvIGJlIGNvcnJlY3QuIFJlamVjdCBzZWNvbmQgb25lIGZvciBub3cuCiAJCQkJICovCi0JCQkJaWYgKCFhbHBoYTJfZXF1YWwoYWxwaGEyLAotCQkJCQkJICBjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMikpCisJCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJCXJldHVybiAtRUFMUkVBRFk7CiAJCQl9Ci0JCQkvKiBUd28gY29uc2VjdXRpdmUgQ291bnRyeSBJRSBoaW50cyBvbiB0aGUgc2FtZSB3aXBoeS4KLQkJCSAqIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBlYXJseSBieSB0aGUgZHJpdmVyL3N0YWNrICovCi0JCQlpZiAoV0FSTl9PTighYWxwaGEyX2VxdWFsKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyLAotCQkJCSAgYWxwaGEyKSkpCisJCQkvKgorCQkJICogVHdvIGNvbnNlY3V0aXZlIENvdW50cnkgSUUgaGludHMgb24gdGhlIHNhbWUgd2lwaHkuCisJCQkgKiBUaGlzIHNob3VsZCBiZSBwaWNrZWQgdXAgZWFybHkgYnkgdGhlIGRyaXZlci9zdGFjaworCQkJICovCisJCQlpZiAoV0FSTl9PTihyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpKQogCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJfQogCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKLQljYXNlIFJFR0RPTV9TRVRfQllfRFJJVkVSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9EUklWRVIpCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOgorCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpIHsKKwkJCWlmIChpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pKQorCQkJCXJldHVybiAwOworCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCQlyZXR1cm4gMDsKIAkJCXJldHVybiAtRUFMUkVBRFk7Ci0JCXJldHVybiAwOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9VU0VSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCQl9CisKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gaWYgeW91IHVucGx1ZyBhbmQgcGx1ZyB5b3VyIGNhcmQKKwkJICogYmFjayBpbiBvciBpZiB5b3UgYWRkIGEgbmV3IGRldmljZSBmb3Igd2hpY2ggdGhlIHByZXZpb3VzbHkKKwkJICogbG9hZGVkIGNhcmQgYWxzbyBhZ3JlZXMgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCisJCXJldHVybiBSRUdfSU5URVJTRUNUOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKIAkJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCQkvKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCi0JCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAgKi8KLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfVVNFUiAmJgorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCisJCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiAmJgogCQkJICBsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJLyoKKwkJICogUHJvY2VzcyB1c2VyIHJlcXVlc3RzIG9ubHkgYWZ0ZXIgcHJldmlvdXMgdXNlci9kcml2ZXIvY29yZQorCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKSB7CisJCQlpZiAocmVnZG9tX2NoYW5nZXMobGFzdF9yZXF1ZXN0LT5hbHBoYTIpKQorCQkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQorCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfZHJ2X211dGV4ICovCi1pbnQgX19yZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldF9ieSwKLQkJCWNvbnN0IGNoYXIgKmFscGhhMiwKLQkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52KQorLyoqCisgKiBfX3JlZ3VsYXRvcnlfaGludCAtIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiBpZiB0aGUgaGludCBjb21lcyBmcm9tIGNvdW50cnkgaW5mb3JtYXRpb24gZnJvbSBhbiBBUCwgdGhpcworICoJaXMgcmVxdWlyZWQgdG8gYmUgc2V0IHRvIHRoZSB3aXBoeSB0aGF0IHJlY2VpdmVkIHRoZSBpbmZvcm1hdGlvbgorICogQHBlbmRpbmdfcmVxdWVzdDogdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisgKgorICogVGhlIFdpcmVsZXNzIHN1YnN5c3RlbSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZQorICogd2hhdCBpdCBiZWxpZXZlcyBzaG91bGQgYmUgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisgKgorICogUmV0dXJucyB6ZXJvIGlmIGFsbCB3ZW50IGZpbmUsICUtRUFMUkVBRFkgaWYgYSByZWd1bGF0b3J5IGRvbWFpbiBoYWQKKyAqIGFscmVhZHkgYmVlbiBzZXQgb3Igb3RoZXIgc3RhbmRhcmQgZXJyb3IgY29kZXMuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfbXV0ZXgKKyAqLworc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAlib29sIGludGVyc2VjdCA9IGZhbHNlOwogCWludCByID0gMDsKIAotCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgc2V0X2J5LCBhbHBoYTIpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKLQlpZiAociA9PSBSRUdfSU5URVJTRUNUKQorCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgcGVuZGluZ19yZXF1ZXN0KTsKKworCWlmIChyID09IFJFR19JTlRFUlNFQ1QpIHsKKwkJaWYgKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7CisJCQlpZiAocikgeworCQkJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KIAkJaW50ZXJzZWN0ID0gdHJ1ZTsKLQllbHNlIGlmIChyKQorCX0gZWxzZSBpZiAocikgeworCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yeSBkb21haW4gYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZQorCQkgKiBkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQganVzdCBjb3B5IGl0IHRvIHRoZQorCQkgKiB3aXBoeQorCQkgKi8KKwkJaWYgKHIgPT0gLUVBTFJFQURZICYmCisJCSAgICBwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJciA9IHJlZ19jb3B5X3JlZ2QoJndpcGh5LT5yZWdkLCBjZmc4MDIxMV9yZWdkb21haW4pOworCQkJaWYgKHIpIHsKKwkJCQlrZnJlZShwZW5kaW5nX3JlcXVlc3QpOworCQkJCXJldHVybiByOworCQkJfQorCQkJciA9IC1FQUxSRUFEWTsKKwkJCWdvdG8gbmV3X3JlcXVlc3Q7CisJCX0KKwkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKIAkJcmV0dXJuIHI7CisJfQorCituZXdfcmVxdWVzdDoKKwlrZnJlZShsYXN0X3JlcXVlc3QpOworCisJbGFzdF9yZXF1ZXN0ID0gcGVuZGluZ19yZXF1ZXN0OworCWxhc3RfcmVxdWVzdC0+aW50ZXJzZWN0ID0gaW50ZXJzZWN0OworCisJcGVuZGluZ19yZXF1ZXN0ID0gTlVMTDsKKworCS8qIFdoZW4gciA9PSBSRUdfSU5URVJTRUNUIHdlIGRvIG5lZWQgdG8gY2FsbCBDUkRBICovCisJaWYgKHIgPCAwKSB7CisJCS8qCisJCSAqIFNpbmNlIENSREEgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoaXMgY2FzZSBhcyB3ZSBhbHJlYWR5CisJCSAqIGhhdmUgYXBwbGllZCB0aGUgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluIGJlZm9yZSB3ZSBqdXN0CisJCSAqIGluZm9ybSB1c2Vyc3BhY2Ugd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIHJlcXVlc3QKKwkJICovCisJCWlmIChyID09IC1FQUxSRUFEWSkKKwkJCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiBjYWxsX2NyZGEobGFzdF9yZXF1ZXN0LT5hbHBoYTIpOworfQorCisvKiBUaGlzIGN1cnJlbnRseSBvbmx5IHByb2Nlc3NlcyB1c2VyIGFuZCBkcml2ZXIgcmVndWxhdG9yeSBoaW50cyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfaGludChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCkKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7CisKKwlCVUdfT04oIXJlZ19yZXF1ZXN0LT5hbHBoYTIpOworCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJaWYgKHdpcGh5X2lkeF92YWxpZChyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KSkKKwkJd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkocmVnX3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAocmVnX3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJICAgICF3aXBoeSkgeworCQlrZnJlZShyZWdfcmVxdWVzdCk7CisJCWdvdG8gb3V0OworCX0KKworCXIgPSBfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgcmVnX3JlcXVlc3QpOworCS8qIFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgb3JpZ18qIHBhcmFtZXRlcnMgYXJlIHNhdmVkICovCisJaWYgKHIgPT0gLUVBTFJFQURZICYmIHdpcGh5ICYmIHdpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSkKKwkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIHJlZ19yZXF1ZXN0LT5pbml0aWF0b3IpOworb3V0OgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworfQorCisvKiBQcm9jZXNzZXMgcmVndWxhdG9yeSBoaW50cywgdGhpcyBpcyBhbGwgdGhlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV8qICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19wZW5kaW5nX2hpbnRzKHZvaWQpCisJeworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0OworCisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyZWdfcmVxdWVzdHNfbGlzdCkpIHsKKwkJcmVnX3JlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZWdfcmVxdWVzdHNfbGlzdCwKKwkJCQkJICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QsCisJCQkJCSAgICAgICBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCisJCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJCXJlZ19wcm9jZXNzX2hpbnQocmVnX3JlcXVlc3QpOworCQlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKK30KKworLyogUHJvY2Vzc2VzIGJlYWNvbiBoaW50cyAtLSB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY291bnRyeSBJRXMgKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfYmVhY29uX2hpbnRzKHZvaWQpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IHJlZ19iZWFjb24gKnBlbmRpbmdfYmVhY29uLCAqdG1wOworCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJLyogVGhpcyBnb2VzIHRocm91Z2ggdGhlIF9wZW5kaW5nXyBiZWFjb24gbGlzdCAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKworCWlmIChsaXN0X2VtcHR5KCZyZWdfcGVuZGluZ19iZWFjb25zKSkgeworCQlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlbmRpbmdfYmVhY29uLCB0bXAsCisJCQkJICZyZWdfcGVuZGluZ19iZWFjb25zLCBsaXN0KSB7CisKKwkJbGlzdF9kZWxfaW5pdCgmcGVuZGluZ19iZWFjb24tPmxpc3QpOworCisJCS8qIEFwcGxpZXMgdGhlIGJlYWNvbiBoaW50IHRvIGN1cnJlbnQgd2lwaHlzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCisJCQl3aXBoeV91cGRhdGVfbmV3X2JlYWNvbigmZHJ2LT53aXBoeSwgcGVuZGluZ19iZWFjb24pOworCisJCS8qIFJlbWVtYmVycyB0aGUgYmVhY29uIGhpbnQgZm9yIG5ldyB3aXBoeXMgb3IgcmVnIGNoYW5nZXMgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcGVuZGluZ19iZWFjb24tPmxpc3QsICZyZWdfYmVhY29uX2xpc3QpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworb3V0OgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCByZWdfdG9kbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJcmVnX3Byb2Nlc3NfcGVuZGluZ19oaW50cygpOworCXJlZ19wcm9jZXNzX3BlbmRpbmdfYmVhY29uX2hpbnRzKCk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksocmVnX3dvcmssIHJlZ190b2RvKTsKKworc3RhdGljIHZvaWQgcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJnJlZ19yZXF1ZXN0c19saXN0KTsKKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOworfQorCisvKiBDb3JlIHJlZ3VsYXRvcnkgaGludCAtLSBoYXBwZW5zIG9uY2UgZHVyaW5nIGNmZzgwMjExX2luaXQoKSAqLworc3RhdGljIGludCByZWd1bGF0b3J5X2hpbnRfY29yZShjb25zdCBjaGFyICphbHBoYTIpCit7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKKworCUJVR19PTihsYXN0X3JlcXVlc3QpOwogCiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAogCQkJICBHRlBfS0VSTkVMKTsKQEAgLTEwNDksNDcgKzE1MzQsODQgQEAKIAogCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKIAlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07Ci0JcmVxdWVzdC0+aW5pdGlhdG9yID0gc2V0X2J5OwotCXJlcXVlc3QtPndpcGh5ID0gd2lwaHk7Ci0JcmVxdWVzdC0+aW50ZXJzZWN0ID0gaW50ZXJzZWN0OwotCXJlcXVlc3QtPmNvdW50cnlfaWVfY2hlY2tzdW0gPSBjb3VudHJ5X2llX2NoZWNrc3VtOwotCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOwogCi0Ja2ZyZWUobGFzdF9yZXF1ZXN0KTsKLQlsYXN0X3JlcXVlc3QgPSByZXF1ZXN0OwotCS8qCi0JICogTm90ZTogV2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgZW5hYmxlZAotCSAqIEFORCBpZiBDUkRBIGlzIE5PVCBwcmVzZW50IG5vdGhpbmcgd2lsbCBoYXBwZW4sIGlmIHNvbWVvbmUKLQkgKiB3YW50cyB0byBib3RoZXIgd2l0aCAxMWQgd2l0aCBPTERfUkVHIHlvdSBjYW4gYWRkIGEgdGltZXIuCi0JICogSWYgYWZ0ZXIgeCBhbW91bnQgb2YgdGltZSBub3RoaW5nIGhhcHBlbnMgeW91IGNhbiBjYWxsOgotCSAqCi0JICogcmV0dXJuIHNldF9yZWdkb20oY291bnRyeV9pZV9yZWdkb21haW4pOwotCSAqCi0JICogdG8gaW50ZXJzZWN0IHdpdGggdGhlIHN0YXRpYyByZAotCSAqLwotCXJldHVybiBjYWxsX2NyZGEoYWxwaGEyKTsKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQorLyogVXNlciBoaW50cyAqLworaW50IHJlZ3VsYXRvcnlfaGludF91c2VyKGNvbnN0IGNoYXIgKmFscGhhMikKIHsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCiAJQlVHX09OKCFhbHBoYTIpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9EUklWRVIsIGFscGhhMiwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CisJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04oIWFscGhhMik7CisJQlVHX09OKCF3aXBoeSk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKworCS8qIE11c3QgaGF2ZSByZWdpc3RlcmVkIHdpcGh5IGZpcnN0ICovCisJQlVHX09OKCF3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSk7CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50KTsKIAogc3RhdGljIGJvb2wgcmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmICh1bmxpa2VseShsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPQorCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAobGlrZWx5KGxhc3RfcmVxdWVzdC0+d2lwaHkgIT0gd2lwaHkpKQorCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAoIXJlcXVlc3Rfd2lwaHkpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChsaWtlbHkocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkpCiAJCXJldHVybiAhY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKTsKLQkvKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQorCS8qCisJICogV2Ugc2hvdWxkIG5vdCBoYXZlIGxldCB0aGVzZSB0aHJvdWdoIGF0IHRoaXMgcG9pbnQsIHRoZXkKIAkgKiBzaG91bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBlYXJsaWVyIGJ5IHRoZSBmaXJzdCBhbHBoYTIgY2hlY2sKLQkgKiBvbiB0aGUgZGV2aWNlICovCisJICogb24gdGhlIGRldmljZQorCSAqLwogCWlmIChXQVJOX09OKCFjb3VudHJ5X2llX2ludGVncml0eV9jaGFuZ2VzKGNvdW50cnlfaWVfY2hlY2tzdW0pKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTEwMywxMSArMTYyNSwxNCBAQAogCWNoYXIgYWxwaGEyWzJdOwogCXUzMiBjaGVja3N1bSA9IDA7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52ID0gRU5WSVJPTl9BTlk7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmICghbGFzdF9yZXF1ZXN0KQorCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0KSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwl9CiAKIAkvKiBJRSBsZW4gbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDIgKi8KIAlpZiAoY291bnRyeV9pZV9sZW4gJiAweDAxKQpAQCAtMTExNiw5ICsxNjQxLDExIEBACiAJaWYgKGNvdW50cnlfaWVfbGVuIDwgSUVFRTgwMjExX0NPVU5UUllfSUVfTUlOX0xFTikKIAkJZ290byBvdXQ7CiAKLQkvKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCisJLyoKKwkgKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCiAJICogY2FsbCBDUkRBIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlIGlmIGEgYmVhY29uIHdhcyByZWNlaXZlZCBiZWZvcmUKLQkgKiB3ZSB3ZXJlIGFibGUgdG8gcHJvY2VzcyB0aGUgbGFzdCByZWd1bGF0b3J5X2hpbnRfMTFkKCkgY2FsbCAqLworCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsCisJICovCiAJaWYgKGNvdW50cnlfaWVfcmVnZG9tYWluKQogCQlnb3RvIG91dDsKIApAQCAtMTEzMCwzMyArMTY1Nyw0NiBAQAogCWVsc2UgaWYgKGNvdW50cnlfaWVbMl0gPT0gJ08nKQogCQllbnYgPSBFTlZJUk9OX09VVERPT1I7CiAKLQkvKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KKwkvKgorCSAqIFdlIHdpbGwgcnVuIHRoaXMgZm9yICpldmVyeSogYmVhY29uIHByb2Nlc3NlZCBmb3IgdGhlIEJTU0lELCBzbwogCSAqIHdlIG9wdGltaXplIGFuIGVhcmx5IGNoZWNrIHRvIGV4aXQgb3V0IGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBkbyBhbnl0aGluZyAqLwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSkpIHsKKwkgKiBkbyBhbnl0aGluZworCSAqLworCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgd2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpIHsKIAkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnZfbGFzdF9pZTsKIAotCQlkcnZfbGFzdF9pZSA9IHdpcGh5X3RvX2RldihsYXN0X3JlcXVlc3QtPndpcGh5KTsKKwkJZHJ2X2xhc3RfaWUgPQorCQkJY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKLQkJLyogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAotCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBICovCi0JCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSA9PSB3aXBoeSkpIHsKLQkJCS8qIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAgKi8KKwkJLyoKKwkJICogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAorCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBCisJCSAqLworCQlpZiAobGlrZWx5KCZkcnZfbGFzdF9pZS0+d2lwaHkgPT0gd2lwaHkpKSB7CisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdGhpcyB3aXBoeSB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCS8qIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAorCQkJLyoKKwkJCSAqIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAogCQkJICogd2FzIHJlY29uZmlndXJlZC4gWFhYOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUKIAkJCSAqIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZHMgYW5kIGdvZXMgdG8gZ29lcwogCQkJICogdG8gYW5vdGhlciBjb3VudHJ5LCBhbmQgdGhlbiBnZXRzIElFcyBmcm9tIGFuCi0JCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyAqLworCQkJICogQVAgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MKKwkJCSAqLwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7Ci0JCQkvKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwICovCisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdHdvIHNlcGFyYXRlIHdpcGh5cyB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKQEAgLTExNzEsMjggKzE3MTEsOTcgQEAKIAlpZiAoIXJkKQogCQlnb3RvIG91dDsKIAotCS8qIFRoaXMgd2lsbCBub3QgaGFwcGVuIHJpZ2h0IG5vdyBidXQgd2UgbGVhdmUgaXQgaGVyZSBmb3IgdGhlCisJLyoKKwkgKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQogCSAqIHRoZSBmdXR1cmUgd2hlbiB3ZSB3YW50IHRvIGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0IGFuZCBoYXZpbmcKIAkgKiB0aGUgdXNlciBtb3ZlIHRvIGFub3RoZXIgY291bnRyeSBhZnRlciBkb2luZyBzbywgb3IgaGF2aW5nIHRoZSB1c2VyCi0JICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuIFRoaXMgaXMgd2h5Ci0JICogdGhpcyBpcyBtYXJrZWQgYXMgbGlrbGV5KCkuIElmIHdlIGhpdCB0aGlzIGJlZm9yZSB3ZSBhZGQgdGhpcyBzdXBwb3J0Ci0JICogd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZiBpdCBhcyBpdCB3b3VsZCBpbmRpY2F0ZSBhIG1pc3Rha2UgaW4gdGhlCi0JICogY3VycmVudCBkZXNpZ24gICovCi0JaWYgKGxpa2VseShXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkpCi0JCWdvdG8gb3V0OworCSAqIG1vdmUgdG8gYW5vdGhlciBBUC4gUmlnaHQgbm93IHdlIGp1c3QgdHJ1c3QgdGhlIGZpcnN0IEFQLgorCSAqCisJICogSWYgd2UgaGl0IHRoaXMgYmVmb3JlIHdlIGFkZCB0aGlzIHN1cHBvcnQgd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZgorCSAqIGl0IGFzIGl0IHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBpbiB0aGUgY3VycmVudCBkZXNpZ24KKwkgKi8KKwlpZiAoV0FSTl9PTihyZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQod2lwaHksIGNoZWNrc3VtKSkpCisJCWdvdG8gZnJlZV9yZF9vdXQ7CiAKLQkvKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KLQkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdCAqLworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlnb3RvIGZyZWVfcmRfb3V0OworCisJLyoKKwkgKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KKwkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdAorCSAqLwogCWNvdW50cnlfaWVfcmVnZG9tYWluID0gcmQ7CiAKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAotCQljb3VudHJ5X2llX3JlZ2RvbWFpbi0+YWxwaGEyLCBjaGVja3N1bSwgZW52KTsKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU7CisJcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOworCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm47CisKK2ZyZWVfcmRfb3V0OgorCWtmcmVlKHJkKTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludF8xMWQpOwogCitzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCit7CisJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fAorCSAgICBmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxMykgfHwKKwkgICAgZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTQpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWlmIChsaWtlbHkoKGJlYWNvbl9jaGFuLT5iZWFjb25fZm91bmQgfHwKKwkgICAgKGJlYWNvbl9jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSB8fAorCSAgICAoYmVhY29uX2NoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICAgIWZyZXFfaXNfY2hhbl8xMl8xM18xNChiZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEpKSkpKQorCQlyZXR1cm4gMDsKKworCXJlZ19iZWFjb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnX2JlYWNvbiksIGdmcCk7CisJaWYgKCFyZWdfYmVhY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IEZvdW5kIG5ldyBiZWFjb24gb24gIgorCQkiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwKKwkJYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxLAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2VuZGlmCisJbWVtY3B5KCZyZWdfYmVhY29uLT5jaGFuLCBiZWFjb25fY2hhbiwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCisKKwkvKgorCSAqIFNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBCSCBvciBhbmQgbm9uLUJIIGNvbnRleHQKKwkgKiB3ZSBtdXN0IHVzZSBzcGluX2xvY2tfYmgoKQorCSAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZWdfYmVhY29uLT5saXN0LCAmcmVnX3BlbmRpbmdfYmVhY29ucyk7CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcmRfcnVsZXMoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTIwOCw4ICsxODE3LDEwIEBACiAJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CiAJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAKLQkJLyogVGhlcmUgbWF5IG5vdCBiZSBkb2N1bWVudGF0aW9uIGZvciBtYXggYW50ZW5uYSBnYWluCi0JCSAqIGluIGNlcnRhaW4gcmVnaW9ucyAqLworCQkvKgorCQkgKiBUaGVyZSBtYXkgbm90IGJlIGRvY3VtZW50YXRpb24gZm9yIG1heCBhbnRlbm5hIGdhaW4KKwkJICogaW4gY2VydGFpbiByZWdpb25zCisJCSAqLwogCQlpZiAocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0KCVkIEtIeiAtICVkIEtIeiBAICVkIEtIeiksICIKIAkJCQkiKCVkIG1CaSwgJWQgbUJtKVxuIiwKQEAgLTEyMzIsMTMgKzE4NDMsMTMgQEAKIHsKIAogCWlmIChpc19pbnRlcnNlY3RlZF9hbHBoYTIocmQtPmFscGhhMikpIHsKLQkJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7Ci0JCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5KSB7Ci0JCQkJd2lwaHkgPSBsYXN0X3JlcXVlc3QtPndpcGh5OwotCQkJCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCQkJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKKwkJCQlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisJCQlpZiAoZHJ2KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCiAJCQkJCSJkb21haW4gdXBkYXRlZCBieSBBUCB0bzogJWMlY1xuIiwKIAkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKQEAgLTEyNDgsNyArMTg1OSw3IEBACiAJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgotCQkJCQkiaW50ZXJzZWN0ZWQ6IFxuIik7CisJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJfSBlbHNlIGlmIChpc193b3JsZF9yZWdkb20ocmQtPmFscGhhMikpCiAJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBXb3JsZCByZWd1bGF0b3J5ICIKIAkJCSJkb21haW4gdXBkYXRlZDpcbiIpOwpAQCAtMTMwNCw3ICsxOTE1LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQgPSBOVUxMOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gTlVMTDsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CiAJLyogU29tZSBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0ICovCiAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKHJkLT5hbHBoYTIpKSB7CkBAIC0xMzIxLDIzICsxOTMyLDI3IEBACiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAorCS8qCisJICogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAogCSAqIHJkIGlzIG5vbiBzdGF0aWMgKGl0IG1lYW5zIENSREEgd2FzIHByZXNlbnQgYW5kIHdhcyB1c2VkIGxhc3QpCi0JICogYW5kIHRoZSBwZW5kaW5nIHJlcXVlc3QgY2FtZSBpbiBmcm9tIGEgY291bnRyeSBJRSAqLwotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJLyogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgotCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQgKi8KKwkgKiBhbmQgdGhlIHBlbmRpbmcgcmVxdWVzdCBjYW1lIGluIGZyb20gYSBjb3VudHJ5IElFCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCS8qCisJCSAqIElmIHNvbWVvbmUgZWxzZSBhc2tlZCB1cyB0byBjaGFuZ2UgdGhlIHJkIGxldHMgb25seSBib3RoZXIKKwkJICogY2hlY2tpbmcgaWYgdGhlIGFscGhhMiBjaGFuZ2VzIGlmIENSREEgd2FzIGFscmVhZHkgY2FsbGVkCisJCSAqLwogCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKLQkJICAgICFyZWdkb21fY2hhbmdlZChyZC0+YWxwaGEyKSkKKwkJICAgICFyZWdkb21fY2hhbmdlcyhyZC0+YWxwaGEyKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdpcGh5ID0gbGFzdF9yZXF1ZXN0LT53aXBoeTsKLQotCS8qIE5vdyBsZXRzIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4sIHVwZGF0ZSBhbGwgZHJpdmVyIGNoYW5uZWxzCisJLyoKKwkgKiBOb3cgbGV0cyBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLCB1cGRhdGUgYWxsIGRyaXZlciBjaGFubmVscwogCSAqIGFuZCBmaW5hbGx5IGluZm9ybSB0aGVtIG9mIHdoYXQgd2UgaGF2ZSBkb25lLCBpbiBjYXNlIHRoZXkgd2FudAogCSAqIHRvIHJldmlldyBvciBhZGp1c3QgdGhlaXIgb3duIHNldHRpbmdzIGJhc2VkIG9uIHRoZWlyIG93bgotCSAqIGludGVybmFsIEVFUFJPTSBkYXRhICovCisJICogaW50ZXJuYWwgRUVQUk9NIGRhdGEKKwkgKi8KIAogCWlmIChXQVJOX09OKCFyZWdfaXNfdmFsaWRfcmVxdWVzdChyZC0+YWxwaGEyKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM0OSw3ICsxOTY0LDI4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCiAJaWYgKCFsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkgeworCQlpbnQgcjsKKworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJcmVzZXRfcmVnZG9tYWlucygpOworCQkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIEZvciBhIGRyaXZlciBoaW50LCBsZXRzIGNvcHkgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZQorCQkgKiBkcml2ZXIgd2FudGVkIHRvIHRoZSB3aXBoeSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisJCSAqLworCisJCUJVR19PTihyZXF1ZXN0X3dpcGh5LT5yZWdkKTsKKworCQlyID0gcmVnX2NvcHlfcmVnZCgmcmVxdWVzdF93aXBoeS0+cmVnZCwgcmQpOworCQlpZiAocikKKwkJCXJldHVybiByOworCiAJCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIAkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CiAJCXJldHVybiAwOwpAQCAtMTM1NywxNCArMTk5MywyMiBAQAogCiAJLyogSW50ZXJzZWN0aW9uIHJlcXVpcmVzIGEgYml0IG1vcmUgd29yayAqLwogCi0JaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewogCiAJCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKIAkJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFdlIGNhbiB0cmFzaCB3aGF0IENSREEgcHJvdmlkZWQgbm93ICovCi0JCWtmcmVlKHJkKTsKKwkJLyoKKwkJICogV2UgY2FuIHRyYXNoIHdoYXQgQ1JEQSBwcm92aWRlZCBub3cuCisJCSAqIEhvd2V2ZXIgaWYgYSBkcml2ZXIgcmVxdWVzdGVkIHRoaXMgc3BlY2lmaWMgcmVndWxhdG9yeQorCQkgKiBkb21haW4gd2Uga2VlcCBpdCBmb3IgaXRzIHByaXZhdGUgdXNlCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikKKwkJCXJlcXVlc3Rfd2lwaHktPnJlZ2QgPSByZDsKKwkJZWxzZQorCQkJa2ZyZWUocmQpOworCiAJCXJkID0gTlVMTDsKIAogCQlyZXNldF9yZWdkb21haW5zKCk7CkBAIC0xMzc5LDI5ICsyMDIzLDI2IEBACiAJICovCiAKIAlCVUdfT04oIWNvdW50cnlfaWVfcmVnZG9tYWluKTsKKwlCVUdfT04ocmQgPT0gY291bnRyeV9pZV9yZWdkb21haW4pOwogCi0JaWYgKHJkICE9IGNvdW50cnlfaWVfcmVnZG9tYWluKSB7Ci0JCS8qIEludGVyc2VjdCB3aGF0IENSREEgcmV0dXJuZWQgYW5kIG91ciB3aGF0IHdlCi0JCSAqIGhhZCBidWlsdCBmcm9tIHRoZSBDb3VudHJ5IElFIHJlY2VpdmVkICovCisJLyoKKwkgKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQorCSAqIGhhZCBidWlsdCBmcm9tIHRoZSBDb3VudHJ5IElFIHJlY2VpdmVkCisJICovCiAKLQkJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CisJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKLQkJcmVnX2NvdW50cnlfaWVfcHJvY2Vzc19kZWJ1ZyhyZCwgY291bnRyeV9pZV9yZWdkb21haW4sCi0JCQlpbnRlcnNlY3RlZF9yZCk7CisJcmVnX2NvdW50cnlfaWVfcHJvY2Vzc19kZWJ1ZyhyZCwKKwkJCQkgICAgIGNvdW50cnlfaWVfcmVnZG9tYWluLAorCQkJCSAgICAgaW50ZXJzZWN0ZWRfcmQpOwogCi0JCWtmcmVlKGNvdW50cnlfaWVfcmVnZG9tYWluKTsKLQkJY291bnRyeV9pZV9yZWdkb21haW4gPSBOVUxMOwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgd291bGQgaGFwcGVuIHdoZW4gQ1JEQSB3YXMgbm90IHByZXNlbnQgYW5kCi0JCSAqIE9MRF9SRUdVTEFUT1JZIHdhcyBlbmFibGVkLiBXZSBpbnRlcnNlY3Qgb3VyIENvdW50cnkKLQkJICogSUUgcmQgYW5kIHdoYXQgd2FzIHNldCBvbiBjZmc4MDIxMSBvcmlnaW5hbGx5ICovCi0JCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKLQl9CisJa2ZyZWUoY291bnRyeV9pZV9yZWdkb21haW4pOworCWNvdW50cnlfaWVfcmVnZG9tYWluID0gTlVMTDsKIAogCWlmICghaW50ZXJzZWN0ZWRfcmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlkcnYgPSB3aXBoeV90b19kZXYocmVxdWVzdF93aXBoeSk7CiAKIAlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzBdID0gcmQtPmFscGhhMlswXTsKIAlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzFdID0gcmQtPmFscGhhMlsxXTsKQEAgLTE0MTksMTMgKzIwNjAsMTcgQEAKIH0KIAogCi0vKiBVc2UgdGhpcyBjYWxsIHRvIHNldCB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4gQ29uZmxpY3RzIHdpdGgKKy8qCisgKiBVc2UgdGhpcyBjYWxsIHRvIHNldCB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4gQ29uZmxpY3RzIHdpdGgKICAqIG11bHRpcGxlIGRyaXZlcnMgY2FuIGJlIGlyb25lZCBvdXQgbGF0ZXIuIENhbGxlciBtdXN0J3ZlIGFscmVhZHkKLSAqIGttYWxsb2MnZCB0aGUgcmQgc3RydWN0dXJlLiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX2Rydl9tdXRleCAqLworICoga21hbGxvYydkIHRoZSByZCBzdHJ1Y3R1cmUuIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfbXV0ZXgKKyAqLwogaW50IHNldF9yZWdkb20oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCWludCByOwogCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCS8qIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgdXBkYXRlIHRoZSB3aXBoeXMsIHRoaXMgaXMgZG9uZSBiZWxvdyAqLwogCXIgPSBfX3NldF9yZWdkb20ocmQpOwogCWlmIChyKSB7CkBAIC0xNDQyLDU2ICsyMDg3LDkwIEBACiAKIAlwcmludF9yZWdkb21haW4oY2ZnODAyMTFfcmVnZG9tYWluKTsKIAorCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CisKIAlyZXR1cm4gcjsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9kcnZfbXV0ZXggKi8KKy8qIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfbXV0ZXggKi8KIHZvaWQgcmVnX2RldmljZV9yZW1vdmUoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdCB8fCAhbGFzdF9yZXF1ZXN0LT53aXBoeSkKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlrZnJlZSh3aXBoeS0+cmVnZCk7CisJaWYgKCFsYXN0X3JlcXVlc3QgfHwgIXJlcXVlc3Rfd2lwaHkpCiAJCXJldHVybjsKLQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkKKwlpZiAocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkKIAkJcmV0dXJuOwotCWxhc3RfcmVxdWVzdC0+d2lwaHkgPSBOVUxMOworCWxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4ID0gV0lQSFlfSURYX1NUQUxFOwogCWxhc3RfcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBFTlZJUk9OX0FOWTsKIH0KIAogaW50IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlyZWdfcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJlZ3VsYXRvcnkiLCAwLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKHJlZ19wZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmVnX3BkZXYpOwogCisJc3Bpbl9sb2NrX2luaXQoJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwogI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IHN0YXRpY19yZWdkb20oaWVlZTgwMjExX3JlZ2RvbSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogVXNpbmcgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9cbiIpOwogCXByaW50X3JlZ2RvbWFpbl9pbmZvKGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0JLyogVGhlIG9sZCBjb2RlIHN0aWxsIHJlcXVlc3RzIGZvciBhIG5ldyByZWdkb21haW4gYW5kIGlmCisJLyoKKwkgKiBUaGUgb2xkIGNvZGUgc3RpbGwgcmVxdWVzdHMgZm9yIGEgbmV3IHJlZ2RvbWFpbiBhbmQgaWYKIAkgKiB5b3UgaGF2ZSBDUkRBIHlvdSBnZXQgaXQgdXBkYXRlZCwgb3RoZXJ3aXNlIHlvdSBnZXQKLQkgKiBzdHVjayB3aXRoIHRoZSBzdGF0aWMgdmFsdWVzLiBXZSBpZ25vcmUgIkVVIiBjb2RlIGFzCi0JICogdGhhdCBpcyBub3QgYSB2YWxpZCBJU08gLyBJRUMgMzE2NiBhbHBoYTIgKi8KLQlpZiAoaWVlZTgwMjExX3JlZ2RvbVswXSAhPSAnRScgfHwgaWVlZTgwMjExX3JlZ2RvbVsxXSAhPSAnVScpCi0JCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwKLQkJCQkJaWVlZTgwMjExX3JlZ2RvbSwgMCwgRU5WSVJPTl9BTlkpOworCSAqIHN0dWNrIHdpdGggdGhlIHN0YXRpYyB2YWx1ZXMuIFNpbmNlICJFVSIgaXMgbm90IGEgdmFsaWQKKwkgKiBJU08gLyBJRUMgMzE2NiBhbHBoYTIgY29kZSB3ZSBjYW4ndCBleHBlY3QgdXNlcnBhY2UgdG8KKwkgKiBnaXZlIHVzIGEgcmVndWxhdG9yeSBkb21haW4gZm9yIGl0LiBXZSBuZWVkIGxhc3RfcmVxdWVzdAorCSAqIGluaWl0YWxpemVkIHRob3VnaCBzbyBsZXRzIGp1c3Qgc2VuZCBhIHJlcXVlc3Qgd2hpY2ggd2UKKwkgKiBrbm93IHdpbGwgYmUgaWdub3JlZC4uLiB0aGlzIGNyYXAgd2lsbCBiZSByZW1vdmVkIG9uY2UKKwkgKiBPTERfUkVHIGRpZXMuCisJICovCisJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoaWVlZTgwMjExX3JlZ2RvbSk7CiAjZWxzZQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKIAotCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwgIjAwIiwgMCwgRU5WSVJPTl9BTlkpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGNhbGxpbmcgQ1JEQSBmYWlsZWQgLSAiCi0JCSAgICAgICAidW5hYmxlIHRvIHVwZGF0ZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiwgIgotCQkgICAgICAgInVzaW5nIHN0YXRpYyBkZWZpbml0aW9uXG4iKTsKKwllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbmRpZgorCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJcmV0dXJuIGVycjsKKwkJLyoKKwkJICogTi5CLiBrb2JqZWN0X3VldmVudF9lbnYoKSBjYW4gZmFpbCBtYWlubHkgZm9yIHdoZW4gd2UncmUgb3V0CisJCSAqIG1lbW9yeSB3aGljaCBpcyBoYW5kbGVkIGFuZCBwcm9wYWdhdGVkIGFwcHJvcHJpYXRlbHkgYWJvdmUKKwkJICogYnV0IGl0IGNhbiBhbHNvIGZhaWwgZHVyaW5nIGEgbmV0bGlua19icm9hZGNhc3QoKSBvciBkdXJpbmcKKwkJICogZWFybHkgYm9vdCBmb3IgY2FsbF91c2VybW9kZWhlbHBlcigpLiBGb3Igbm93IHRyZWF0IHRoZXNlCisJCSAqIGVycm9ycyBhcyBub24tZmF0YWwuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBrb2JqZWN0X3VldmVudF9lbnYoKSB3YXMgdW5hYmxlICIKKwkJCSJ0byBjYWxsIENSREEgZHVyaW5nIGluaXQiKTsKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisJCS8qIFdlIHdhbnQgdG8gZmluZCBvdXQgZXhhY3RseSB3aHkgd2hlbiBkZWJ1Z2dpbmcgKi8KKwkJV0FSTl9PTihlcnIpOworI2VuZGlmCisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcmVndWxhdG9yeV9leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCwgKnRtcDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbiwgKmJ0bXA7CisKKwljYW5jZWxfd29ya19zeW5jKCZyZWdfd29yayk7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXNldF9yZWdkb21haW5zKCk7CiAKQEAgLTE1MDIsNSArMjE4MSwzMyBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocmVnX3BkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyZWdfYmVhY29uLT5saXN0KTsKKwkJCWtmcmVlKHJlZ19iZWFjb24pOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfYmVhY29uX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfYmVhY29uLCBidG1wLAorCQkJCQkgJnJlZ19iZWFjb25fbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX3JlcXVlc3QsIHRtcCwKKwkJCQkJICZyZWdfcmVxdWVzdHNfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKwkJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmgKaW5kZXggYTc2ZWEzZi4uZTM3ODI5YSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5oCisrKyBiL25ldC93aXJlbGVzcy9yZWcuaApAQCAtMSw5ICsxLDEzIEBACiAjaWZuZGVmIF9fTkVUX1dJUkVMRVNTX1JFR19ICiAjZGVmaW5lIF9fTkVUX1dJUkVMRVNTX1JFR19ICiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY2ZnODAyMTFfcmVnZG9tYWluOworCiBib29sIGlzX3dvcmxkX3JlZ2RvbShjb25zdCBjaGFyICphbHBoYTIpOwogYm9vbCByZWdfaXNfdmFsaWRfcmVxdWVzdChjb25zdCBjaGFyICphbHBoYTIpOwogCitpbnQgcmVndWxhdG9yeV9oaW50X3VzZXIoY29uc3QgY2hhciAqYWxwaGEyKTsKKwogdm9pZCByZWdfZGV2aWNlX3JlbW92ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKIAogaW50IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKTsKQEAgLTExLDM0ICsxNSwyNSBAQAogCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpOwogCi1lbnVtIGVudmlyb25tZW50X2NhcCB7Ci0JRU5WSVJPTl9BTlksCi0JRU5WSVJPTl9JTkRPT1IsCi0JRU5WSVJPTl9PVVRET09SLAotfTsKLQotCiAvKioKLSAqIF9fcmVndWxhdG9yeV9oaW50IC0gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAd2lwaHk6IGlmIHRoZSBoaW50IGNvbWVzIGZyb20gY291bnRyeSBpbmZvcm1hdGlvbiBmcm9tIGFuIEFQLCB0aGlzCi0gKglpcyByZXF1aXJlZCB0byBiZSBzZXQgdG8gdGhlIHdpcGh5IHRoYXQgcmVjZWl2ZWQgdGhlIGluZm9ybWF0aW9uCi0gKiBAYWxwaGEyOiB0aGUgSVNPL0lFQyAzMTY2IGFscGhhMiBiZWluZyBjbGFpbWVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgotICoJc2hvdWxkIGJlIGluLgotICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHByb2Nlc3NlZCBjb3VudHJ5IElFLCBzZXQgdGhpcyB0byAwCi0gKiAJaWYgdGhlIGhpbnQgZGlkIG5vdCBjb21lIGZyb20gYSBjb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9lbnY6IHRoZSBlbnZpcm9ubWVudCB0aGUgSUUgdG9sZCB1cyB3ZSBhcmUgaW4sICVFTlZJUk9OXyoKKyAqIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24gLSBoaW50cyBhIGJlYWNvbiB3YXMgZm91bmQgb24gYSBjaGFubmVsCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2hlcmUgdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBiZWFjb25fY2hhbjogdGhlIGNoYW5uZWwgb24gd2hpY2ggdGhlIGJlYWNvbiB3YXMgZm91bmQgb24KKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKICAqCi0gKiBUaGUgV2lyZWxlc3Mgc3Vic3lzdGVtIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlCi0gKiB3aGF0IGl0IGJlbGlldmVzIHNob3VsZCBiZSB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBieSBnaXZpbmcgaXQgYW4KLSAqIElTTy9JRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGl0IGtub3dzIGl0cyByZWd1bGF0b3J5IGRvbWFpbiBzaG91bGQgYmUKLSAqIGluLgorICogVGhpcyBpbmZvcm1zIHRoZSB3aXJlbGVzcyBjb3JlIHRoYXQgYSBiZWFjb24gZnJvbSBhbiBBUCB3YXMgZm91bmQgb24KKyAqIHRoZSBjaGFubmVsIHByb3ZpZGVkLiBUaGlzIGFsbG93cyB0aGUgd2lyZWxlc3MgY29yZSB0byBtYWtlIGVkdWNhdGVkCisgKiBndWVzc2VzIG9uIHJlZ3VsYXRvcnkgdG8gaGVscCB3aXRoIHdvcmxkIHJvYW1pbmcuIFRoaXMgaXMgb25seSB1c2VkIGZvcgorICogd29ybGQgcm9hbWluZyAtLSB3aGVuIHdlIGRvIG5vdCBrbm93IG91ciBjdXJyZW50IGxvY2F0aW9uLiBUaGlzIGlzCisgKiBvbmx5IHVzZWZ1bCBvbiBjaGFubmVscyAxMiwgMTMgYW5kIDE0IG9uIHRoZSAyIEdIeiBiYW5kIGFzIGNoYW5uZWxzCisgKiAxLTExIGFyZSBhbHJlYWR5IGVuYWJsZWQgYnkgdGhlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluOyBhbmQgb24KKyAqIG5vbi1yYWRhciA1IEdIeiBjaGFubmVscy4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgYWxsIHdlbnQgZmluZSwgJS1FQUxSRUFEWSBpZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGhhZAotICogYWxyZWFkeSBiZWVuIHNldCBvciBvdGhlciBzdGFuZGFyZCBlcnJvciBjb2Rlcy4KLSAqCisgKiBEcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcywgY2ZnODAyMTEgd2lsbCBkbyBpdCBmb3IgYWZ0ZXIgYSBzY2FuCisgKiBvbiBhIG5ld2x5IGZvdW5kIEJTUy4KICAqLwotZXh0ZXJuIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICAgICBjb25zdCBjaGFyICphbHBoYTIsIHUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJICAgICBlbnVtIGVudmlyb25tZW50X2NhcCBjb3VudHJ5X2llX2Vudik7CitpbnQgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmJlYWNvbl9jaGFuLAorCQkJCQlnZnBfdCBnZnApOwogCiAjZW5kaWYgIC8qIF9fTkVUX1dJUkVMRVNTX1JFR19IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTAwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMCwwICsxLDg5MSBAQAorLyoKKyAqIGNmZzgwMjExIHNjYW4gcmVzdWx0IGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IDIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgIm5sODAyMTEuaCIKKworI2RlZmluZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFCSgxMCAqIEhaKQorCit2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworI2VuZGlmCisKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcmVxdWVzdC0+aWZpZHgpOworCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCVdBUk5fT04ocmVxdWVzdCAhPSB3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSk7CisJd2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KS0+c2Nhbl9yZXEgPSBOVUxMOworCisJaWYgKGFib3J0ZWQpCisJCW5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKwllbHNlCisJCW5sODAyMTFfc2VuZF9zY2FuX2RvbmUod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwlpZiAoIWFib3J0ZWQpIHsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCX0KKyNlbmRpZgorCisJZGV2X3B1dChkZXYpOworCisgb3V0OgorCWtmcmVlKHJlcXVlc3QpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zY2FuX2RvbmUpOworCitzdGF0aWMgdm9pZCBic3NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJlZik7CisJaWYgKGJzcy0+cHViLmZyZWVfcHJpdikKKwkJYnNzLT5wdWIuZnJlZV9wcml2KCZic3MtPnB1Yik7CisJa2ZyZWUoYnNzKTsKK30KKworLyogbXVzdCBob2xkIGRldi0+YnNzX2xvY2shICovCit2b2lkIGNmZzgwMjExX2Jzc19hZ2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2VjcykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisJdW5zaWduZWQgbG9uZyBhZ2VfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoYWdlX3NlY3MgKiBNU0VDX1BFUl9TRUMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWJzcy0+dHMgLT0gYWdlX2ppZmZpZXM7CisJfQorfQorCisvKiBtdXN0IGhvbGQgZGV2LT5ic3NfbG9jayEgKi8KK3ZvaWQgY2ZnODAyMTFfYnNzX2V4cGlyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICp0bXA7CisJYm9vbCBleHBpcmVkID0gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmIChic3MtPmhvbGQgfHwKKwkJICAgICF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+dHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKKwkJcmJfZXJhc2UoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7CisJCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlleHBpcmVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoZXhwaXJlZCkKKwkJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOworfQorCitzdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4gPiAyICYmIGllc1swXSAhPSBudW0pIHsKKwkJbGVuIC09IGllc1sxXSArIDI7CisJCWllcyArPSBpZXNbMV0gKyAyOworCX0KKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGxlbiA8IDIgKyBpZXNbMV0pCisJCXJldHVybiBOVUxMOworCXJldHVybiBpZXM7Cit9CisKK3N0YXRpYyBpbnQgY21wX2llcyh1OCBudW0sIHU4ICppZXMxLCBzaXplX3QgbGVuMSwgdTggKmllczIsIHNpemVfdCBsZW4yKQoreworCWNvbnN0IHU4ICppZTEgPSBmaW5kX2llKG51bSwgaWVzMSwgbGVuMSk7CisJY29uc3QgdTggKmllMiA9IGZpbmRfaWUobnVtLCBpZXMyLCBsZW4yKTsKKwlpbnQgcjsKKworCWlmICghaWUxICYmICFpZTIpCisJCXJldHVybiAwOworCWlmICghaWUxKQorCQlyZXR1cm4gLTE7CisKKwlyID0gbWVtY21wKGllMSArIDIsIGllMiArIDIsIG1pbihpZTFbMV0sIGllMlsxXSkpOworCWlmIChyID09IDAgJiYgaWUxWzFdICE9IGllMlsxXSkKKwkJcmV0dXJuIGllMlsxXSAtIGllMVsxXTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGJvb2wgaXNfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsCisJCSAgIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3sKKwljb25zdCB1OCAqc3NpZGllOworCisJaWYgKGJzc2lkICYmIGNvbXBhcmVfZXRoZXJfYWRkcihhLT5ic3NpZCwgYnNzaWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXNzaWQpCisJCXJldHVybiB0cnVlOworCisJc3NpZGllID0gZmluZF9pZShXTEFOX0VJRF9TU0lELAorCQkJIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKCFzc2lkaWUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3NpZGllWzFdICE9IHNzaWRfbGVuKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIG1lbWNtcChzc2lkaWUgKyAyLCBzc2lkLCBzc2lkX2xlbikgPT0gMDsKK30KKworc3RhdGljIGJvb2wgaXNfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLAorCQkgICAgY29uc3QgdTggKm1lc2hpZCwgc2l6ZV90IG1lc2hpZGxlbiwKKwkJICAgIGNvbnN0IHU4ICptZXNoY2ZnKQoreworCWNvbnN0IHU4ICppZTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWUgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCisJCSAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoIWllKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGllWzFdICE9IG1lc2hpZGxlbikKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZW1jbXAoaWUgKyAyLCBtZXNoaWQsIG1lc2hpZGxlbikpCisJCXJldHVybiBmYWxzZTsKKworCWllID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChpZVsxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElnbm9yZSBtZXNoIGNhcGFiaWxpdHkgKGxhc3QgdHdvIGJ5dGVzIG9mIHRoZSBJRSkgd2hlbgorCSAqIGNvbXBhcmluZyBzaW5jZSB0aGF0IG1heSBkaWZmZXIgYmV0d2VlbiBzdGF0aW9ucyB0YWtpbmcKKwkgKiBwYXJ0IGluIHRoZSBzYW1lIG1lc2guCisJICovCisJcmV0dXJuIG1lbWNtcChpZSArIDIsIG1lc2hjZmcsIElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4gLSAyKSA9PSAwOworfQorCitzdGF0aWMgaW50IGNtcF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwKKwkJICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYikKK3sKKwlpbnQgcjsKKworCWlmIChhLT5jaGFubmVsICE9IGItPmNoYW5uZWwpCisJCXJldHVybiBiLT5jaGFubmVsLT5jZW50ZXJfZnJlcSAtIGEtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJciA9IG1lbWNtcChhLT5ic3NpZCwgYi0+YnNzaWQsIEVUSF9BTEVOKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkgeworCQlyID0gY21wX2llcyhXTEFOX0VJRF9NRVNIX0lELAorCQkJICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBiLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlyZXR1cm4gY21wX2llcyhXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCSAgICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYi0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYi0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwl9CisKKwlyZXR1cm4gY21wX2llcyhXTEFOX0VJRF9TU0lELAorCQkgICAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICAgIGItPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Cit9CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgY29uc3QgdTggKmJzc2lkLAorCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgdTE2IGNhcGFfbWFzaywgdTE2IGNhcGFfdmFsKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICpyZXMgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoKGJzcy0+cHViLmNhcGFiaWxpdHkgJiBjYXBhX21hc2spICE9IGNhcGFfdmFsKQorCQkJY29udGludWU7CisJCWlmIChjaGFubmVsICYmIGJzcy0+cHViLmNoYW5uZWwgIT0gY2hhbm5lbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfYnNzKCZic3MtPnB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgeworCQkJcmVzID0gYnNzOworCQkJa3JlZl9nZXQoJnJlcy0+cmVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9nZXRfYnNzKTsKKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X21lc2goc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGNmZykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNoYW5uZWwgJiYgYnNzLT5wdWIuY2hhbm5lbCAhPSBjaGFubmVsKQorCQkJY29udGludWU7CisJCWlmIChpc19tZXNoKCZic3MtPnB1YiwgbWVzaGlkLCBtZXNoaWRsZW4sIG1lc2hjZmcpKSB7CisJCQlyZXMgPSBic3M7CisJCQlrcmVmX2dldCgmcmVzLT5yZWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmcmVzLT5wdWI7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2dldF9tZXNoKTsKKworCitzdGF0aWMgdm9pZCByYl9pbnNlcnRfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJmRldi0+YnNzX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0YnNzOworCWludCBjbXA7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCXRic3MgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJibik7CisKKwkJY21wID0gY21wX2JzcygmYnNzLT5wdWIsICZ0YnNzLT5wdWIpOworCisJCWlmIChXQVJOX09OKCFjbXApKSB7CisJCQkvKiB3aWxsIHNvcnQgb2YgbGVhayB0aGlzIEJTUyAqLworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGNtcCA8IDApCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZic3MtPnJibiwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKK3JiX2ZpbmRfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSBkZXYtPmJzc190cmVlLnJiX25vZGU7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCWludCByOworCisJd2hpbGUgKG4pIHsKKwkJYnNzID0gcmJfZW50cnkobiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmJuKTsKKwkJciA9IGNtcF9ic3MoJnJlcy0+cHViLCAmYnNzLT5wdWIpOworCisJCWlmIChyID09IDApCisJCQlyZXR1cm4gYnNzOworCQllbHNlIGlmIChyIDwgMCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlCisJCQluID0gbi0+cmJfcmlnaHQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKK2NmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMsCisJCSAgICBib29sIG92ZXJ3cml0ZSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpmb3VuZCA9IE5VTEw7CisJY29uc3QgdTggKm1lc2hpZCwgKm1lc2hjZmc7CisKKwkvKgorCSAqIFRoZSByZWZlcmVuY2UgdG8gInJlcyIgaXMgZG9uYXRlZCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCisJaWYgKFdBUk5fT04oIXJlcy0+cHViLmNoYW5uZWwpKSB7CisJCWtyZWZfcHV0KCZyZXMtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXMtPnRzID0gamlmZmllczsKKworCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5wdWIuYnNzaWQpKSB7CisJCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCisJCW1lc2hpZCA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJCW1lc2hjZmcgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAorCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQlpZiAoIW1lc2hpZCB8fCAhbWVzaGNmZyB8fAorCQkgICAgbWVzaGNmZ1sxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKSB7CisJCQkvKiBib2d1cyBtZXNoICovCisJCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWZvdW5kID0gcmJfZmluZF9ic3MoZGV2LCByZXMpOworCisJaWYgKGZvdW5kICYmIG92ZXJ3cml0ZSkgeworCQlsaXN0X3JlcGxhY2UoJmZvdW5kLT5saXN0LCAmcmVzLT5saXN0KTsKKwkJcmJfcmVwbGFjZV9ub2RlKCZmb3VuZC0+cmJuLCAmcmVzLT5yYm4sCisJCQkJJmRldi0+YnNzX3RyZWUpOworCQlrcmVmX3B1dCgmZm91bmQtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlmb3VuZCA9IHJlczsKKwl9IGVsc2UgaWYgKGZvdW5kKSB7CisJCWtyZWZfZ2V0KCZmb3VuZC0+cmVmKTsKKwkJZm91bmQtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSByZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWw7CisJCWZvdW5kLT5wdWIudHNmID0gcmVzLT5wdWIudHNmOworCQlmb3VuZC0+cHViLnNpZ25hbCA9IHJlcy0+cHViLnNpZ25hbDsKKwkJZm91bmQtPnB1Yi5jYXBhYmlsaXR5ID0gcmVzLT5wdWIuY2FwYWJpbGl0eTsKKwkJZm91bmQtPnRzID0gcmVzLT50czsKKwkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7CisJfSBlbHNlIHsKKwkJLyogdGhpcyAiY29uc3VtZXMiIHRoZSByZWZlcmVuY2UgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcmVzLT5saXN0LCAmZGV2LT5ic3NfbGlzdCk7CisJCXJiX2luc2VydF9ic3MoZGV2LCByZXMpOworCQlmb3VuZCA9IHJlczsKKwl9CisKKwlkZXYtPmJzc19nZW5lcmF0aW9uKys7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJa3JlZl9nZXQoJmZvdW5kLT5yZWYpOworCXJldHVybiBmb3VuZDsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqCitjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzOworCXNpemVfdCBpZWxlbiA9IGxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkgICAgICB1LnByb2JlX3Jlc3AudmFyaWFibGUpOworCWJvb2wgb3ZlcndyaXRlOworCXNpemVfdCBwcml2c3ogPSB3aXBoeS0+YnNzX3ByaXZfc2l6ZTsKKworCWlmIChXQVJOX09OKHdpcGh5LT5zaWduYWxfdHlwZSA9PSBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDICYmCisJICAgICAgICAgICAgKHNpZ25hbCA8IDAgfHwgc2lnbmFsID4gMTAwKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKFdBUk5fT04oIW1nbXQgfHwgIXdpcGh5IHx8CisJCSAgICBsZW4gPCBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUucHJvYmVfcmVzcC52YXJpYWJsZSkpKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpICsgcHJpdnN6ICsgaWVsZW4sIGdmcCk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KHJlcy0+cHViLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pOworCXJlcy0+cHViLmNoYW5uZWwgPSBjaGFubmVsOworCXJlcy0+cHViLnNpZ25hbCA9IHNpZ25hbDsKKwlyZXMtPnB1Yi50c2YgPSBsZTY0X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AudGltZXN0YW1wKTsKKwlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuYmVhY29uX2ludCk7CisJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvKTsKKwkvKiBwb2ludCB0byBhZnRlciB0aGUgcHJpdmF0ZSBhcmVhICovCisJcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPSAodTggKilyZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJbWVtY3B5KHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGllbGVuKTsKKwlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKworCWtyZWZfaW5pdCgmcmVzLT5yZWYpOworCisJb3ZlcndyaXRlID0gaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcywgb3ZlcndyaXRlKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzLT5wdWIuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCisJCXJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24od2lwaHksIGNoYW5uZWwsIGdmcCk7CisKKwkvKiBjZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi8KKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKTsKKwordm9pZCBjZmc4MDIxMV9wdXRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoIXB1YikKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKwlrcmVmX3B1dCgmYnNzLT5yZWYsIGJzc19yZWxlYXNlKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfcHV0X2Jzcyk7CisKK3ZvaWQgY2ZnODAyMTFfdW5saW5rX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWlmIChXQVJOX09OKCFwdWIpKQorCQlyZXR1cm47CisKKwlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZGVsKCZic3MtPmxpc3QpOworCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOworCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJa3JlZl9wdXQoJmJzcy0+cmVmLCBic3NfcmVsZWFzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3VubGlua19ic3MpOworCit2b2lkIGNmZzgwMjExX2hvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoIXB1YikKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKwlic3MtPmhvbGQgPSB0cnVlOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9ob2xkX2Jzcyk7CisKK3ZvaWQgY2ZnODAyMTFfdW5ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJaWYgKCFwdWIpCisJCXJldHVybjsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihwdWIsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7CisJYnNzLT5ob2xkID0gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3VuaG9sZF9ic3MpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAoraW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXE7CisJaW50IGksIGVyciwgbl9jaGFubmVscyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKworCWlmIChJU19FUlIocmRldikpCisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCisJaWYgKHJkZXYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQorCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisKKwljcmVxID0ga3phbGxvYyhzaXplb2YoKmNyZXEpICsgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSArCisJCSAgICAgICBuX2NoYW5uZWxzICogc2l6ZW9mKHZvaWQgKiksCisJCSAgICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWNyZXEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlcS0+d2lwaHkgPSB3aXBoeTsKKwljcmVxLT5pZmlkeCA9IGRldi0+aWZpbmRleDsKKwljcmVxLT5zc2lkcyA9ICh2b2lkICopKGNyZXEgKyAxKTsKKwljcmVxLT5jaGFubmVscyA9ICh2b2lkICopKGNyZXEtPnNzaWRzICsgMSk7CisJY3JlcS0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJY3JlcS0+bl9zc2lkcyA9IDE7CisKKwkvKiBhbGwgY2hhbm5lbHMgKi8KKwlpID0gMDsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWludCBqOworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCWNyZXEtPmNoYW5uZWxzW2ldID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQlpKys7CisJCX0KKwl9CisKKwkvKiB0cmFuc2xhdGUgc2NhbiByZXF1ZXN0ICovCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSB7CisJCXdyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisKKwkJaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJCWlmICh3cmVxLT5lc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtY3B5KGNyZXEtPnNzaWRzWzBdLnNzaWQsIHdyZXEtPmVzc2lkLCB3cmVxLT5lc3NpZF9sZW4pOworCQkJY3JlcS0+c3NpZHNbMF0uc3NpZF9sZW4gPSB3cmVxLT5lc3NpZF9sZW47CisJCX0KKwkJaWYgKHdyZXEtPnNjYW5fdHlwZSA9PSBJV19TQ0FOX1RZUEVfUEFTU0lWRSkKKwkJCWNyZXEtPm5fc3NpZHMgPSAwOworCX0KKworCXJkZXYtPnNjYW5fcmVxID0gY3JlcTsKKwllcnIgPSByZGV2LT5vcHMtPnNjYW4od2lwaHksIGRldiwgY3JlcSk7CisJaWYgKGVycikgeworCQlyZGV2LT5zY2FuX3JlcSA9IE5VTEw7CisJCWtmcmVlKGNyZXEpOworCX0KKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihyZGV2KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X3Npd3NjYW4pOworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLAorCQkJCSAgIGNoYXIgKipjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQoreworCXU4ICpwb3MsICplbmQsICpuZXh0OworCXN0cnVjdCBpd19ldmVudCBpd2U7CisKKwlpZiAoIWJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHMgfHwKKwkgICAgIWJzcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIG5lZWRlZCwgZnJhZ21lbnQgdGhlIElFcyBidWZmZXIgKGF0IElFIGJvdW5kYXJpZXMpIGludG8gc2hvcnQKKwkgKiBlbm91Z2ggZnJhZ21lbnRzIHRvIGZpdCBpbnRvIElXX0dFTkVSSUNfSUVfTUFYIG9jdGV0IG1lc3NhZ2VzLgorCSAqLworCXBvcyA9IGJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHM7CisJZW5kID0gcG9zICsgYnNzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CisKKwl3aGlsZSAoZW5kIC0gcG9zID4gSVdfR0VORVJJQ19JRV9NQVgpIHsKKwkJbmV4dCA9IHBvcyArIDIgKyBwb3NbMV07CisJCXdoaWxlIChuZXh0ICsgMiArIG5leHRbMV0gLSBwb3MgPCBJV19HRU5FUklDX0lFX01BWCkKKwkJCW5leHQgPSBuZXh0ICsgMiArIG5leHRbMV07CisKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXh0IC0gcG9zOworCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAorCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKKworCQlwb3MgPSBuZXh0OworCX0KKworCWlmIChlbmQgPiBwb3MpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmQgLSBwb3M7CisJCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCisJCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZWxhcHNlZF9qaWZmaWVzX21zZWNzKHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzOworCisJaWYgKGVuZCA+PSBzdGFydCkKKwkJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kIC0gc3RhcnQpOworCisJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kICsgKE1BWF9KSUZGWV9PRkZTRVQgLSBzdGFydCkgKyAxKTsKK30KKworc3RhdGljIGNoYXIgKgoraWVlZTgwMjExX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgY2hhciAqY3VycmVudF9ldiwKKwkgICAgICBjaGFyICplbmRfYnVmKQoreworCXN0cnVjdCBpd19ldmVudCBpd2U7CisJdTggKmJ1ZiwgKmNmZywgKnA7CisJdTggKmllID0gYnNzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHM7CisJaW50IHJlbSA9IGJzcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywgaSwgc2lnOworCWJvb2wgaXNtZXNoID0gZmFsc2U7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5wdWIuYnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9BRERSX0xFTik7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5wdWIuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCWl3ZS51LmZyZXEuZSA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSAgSVdfRVZfRlJFUV9MRU4pOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJaXdlLnUuZnJlcS5tID0gYnNzLT5wdWIuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJaXdlLnUuZnJlcS5lID0gNjsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9GUkVRX0xFTik7CisKKwlpZiAod2lwaHktPnNpZ25hbF90eXBlICE9IENGRzgwMjExX1NJR05BTF9UWVBFX05PTkUpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZRVUFMOworCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQgfAorCQkJCSAgICAgSVdfUVVBTF9OT0lTRV9JTlZBTElEIHwKKwkJCQkgICAgIElXX1FVQUxfUVVBTF9VUERBVEVEOworCQlzd2l0Y2ggKHdpcGh5LT5zaWduYWxfdHlwZSkgeworCQljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKKwkJCXNpZyA9IGJzcy0+cHViLnNpZ25hbCAvIDEwMDsKKwkJCWl3ZS51LnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpd2UudS5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CisJCQlpZiAoc2lnIDwgLTExMCkJCS8qIHJhdGhlciBiYWQgKi8KKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQkvKiBwZXJmZWN0ICovCisJCQkJc2lnID0gLTQwOworCQkJLyogd2lsbCBnaXZlIGEgcmFuZ2Ugb2YgMCAuLiA3MCAqLworCQkJaXdlLnUucXVhbC5xdWFsID0gc2lnICsgMTEwOworCQkJYnJlYWs7CisJCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgorCQkJaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+cHViLnNpZ25hbDsKKwkJCS8qIHdpbGwgZ2l2ZSByYW5nZSAwIC4uIDEwMCAqLworCQkJaXdlLnUucXVhbC5xdWFsID0gYnNzLT5wdWIuc2lnbmFsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJYnJlYWs7CisJCX0KKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwl9CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsICIiKTsKKworCXdoaWxlIChyZW0gPj0gMikgeworCQkvKiBpbnZhbGlkIGRhdGEgKi8KKwkJaWYgKGllWzFdID4gcmVtIC0gMikKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoaWVbMF0pIHsKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgorCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGllICsgMik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0lEOgorCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGllICsgMik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0NPTkZJRzoKKwkJCWlzbWVzaCA9IHRydWU7CisJCQlpZiAoaWVbMV0gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikKKwkJCQlicmVhazsKKwkJCWJ1ZiA9IGttYWxsb2MoNTAsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFidWYpCisJCQkJYnJlYWs7CisJCQljZmcgPSBpZSArIDI7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCQlzcHJpbnRmKGJ1ZiwgIk1lc2ggbmV0d29yayAodmVyc2lvbiAlZCkiLCBjZmdbMF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIFByb3RvY29sIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxXSwgY2ZnWzJdLCBjZmdbM10sCisJCQkJCQkJY2ZnWzRdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBNZXRyaWMgSUQ6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzVdLCBjZmdbNl0sIGNmZ1s3XSwKKwkJCQkJCQljZmdbOF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIkNvbmdlc3Rpb24gQ29udHJvbCBNb2RlIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s5XSwgY2ZnWzEwXSwKKwkJCQkJCQljZmdbMTFdLCBjZmdbMTJdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJDaGFubmVsIFByZWNlZGVuY2U6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzEzXSwgY2ZnWzE0XSwKKwkJCQkJCQljZmdbMTVdLCBjZmdbMTZdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJa2ZyZWUoYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisJCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCisJCQlwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKworCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgaWVbMV07IGkrKykgeworCQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPQorCQkJCQkoKGllW2kgKyAyXSAmIDB4N2YpICogNTAwMDAwKTsKKwkJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKKwkJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJCQl9CisJCQljdXJyZW50X2V2ID0gcDsKKwkJCWJyZWFrOworCQl9CisJCXJlbSAtPSBpZVsxXSArIDI7CisJCWllICs9IGllWzFdICsgMjsKKwl9CisKKwlpZiAoYnNzLT5wdWIuY2FwYWJpbGl0eSAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpCisJICAgIHx8IGlzbWVzaCkgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmIChpc21lc2gpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOworCQllbHNlIGlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7CisJaWYgKGJ1ZikgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJc3ByaW50ZihidWYsICJ0c2Y9JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJzcy0+cHViLnRzZikpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCXNwcmludGYoYnVmLCAiIExhc3QgYmVhY29uOiAldW1zIGFnbyIsCisJCQllbGFwc2VkX2ppZmZpZXNfbXNlY3MoYnNzLT50cykpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKwkJa2ZyZWUoYnVmKTsKKwl9CisKKwlpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKGluZm8sICZic3MtPnB1YiwgJmN1cnJlbnRfZXYsIGVuZF9idWYpOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpjdXJyZW50X2V2ID0gYnVmOworCWNoYXIgKmVuZF9idWYgPSBidWYgKyBsZW47CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfZXhwaXJlKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwkJCXJldHVybiAtRTJCSUc7CisJCX0KKwkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9ic3MoJmRldi0+d2lwaHksIGluZm8sIGJzcywKKwkJCQkJICAgY3VycmVudF9ldiwgZW5kX2J1Zik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKK30KKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCWludCByZXM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTkVURE9XTjsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXYtPmlmaW5kZXgpOworCisJaWYgKElTX0VSUihyZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisKKwlpZiAocmRldi0+c2Nhbl9yZXEpIHsKKwkJcmVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhyZGV2LCBpbmZvLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKKwlkYXRhLT5sZW5ndGggPSAwOworCWlmIChyZXMgPj0gMCkgeworCQlkYXRhLT5sZW5ndGggPSByZXM7CisJCXJlcyA9IDA7CisJfQorCisgb3V0OgorCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdzY2FuKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwppbmRleCA3OWEzODI4Li5lZmUzYzVjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYworKysgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwpAQCAtMzEsNyArMzEsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10ICJcbiIsIGRldl90b19yZGV2KGRldiktPm1lbWJlcik7CVwKIH0KIAotU0hPV19GTVQoaW5kZXgsICIlZCIsIGlkeCk7CitTSE9XX0ZNVChpbmRleCwgIiVkIiwgd2lwaHlfaWR4KTsKIFNIT1dfRk1UKG1hY2FkZHJlc3MsICIlcE0iLCB3aXBoeS5wZXJtX2FkZHIpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaWVlZTgwMjExX2Rldl9hdHRyc1tdID0gewpAQCAtNTUsNiArNTUsNDEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHdpcGh5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gZGV2X3RvX3JkZXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXJkZXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCisJaWYgKHJkZXYtPm9wcy0+c3VzcGVuZCkgeworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gcmRldi0+b3BzLT5zdXNwZW5kKCZyZGV2LT53aXBoeSk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3aXBoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRldl90b19yZGV2KGRldik7CisJaW50IHJldCA9IDA7CisKKwkvKiBBZ2Ugc2NhbiByZXN1bHRzIHdpdGggdGltZSBzcGVudCBpbiBzdXNwZW5kICovCisJc3Bpbl9sb2NrX2JoKCZyZGV2LT5ic3NfbG9jayk7CisJY2ZnODAyMTFfYnNzX2FnZShyZGV2LCBnZXRfc2Vjb25kcygpIC0gcmRldi0+c3VzcGVuZF9hdCk7CisJc3Bpbl91bmxvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKworCWlmIChyZGV2LT5vcHMtPnJlc3VtZSkgeworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gcmRldi0+b3BzLT5yZXN1bWUoJnJkZXYtPndpcGh5KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdHJ1Y3QgY2xhc3MgaWVlZTgwMjExX2NsYXNzID0gewogCS5uYW1lID0gImllZWU4MDIxMSIsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC02Myw2ICs5OCw4IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAkuZGV2X3VldmVudCA9IHdpcGh5X3VldmVudCwKICNlbmRpZgorCS5zdXNwZW5kID0gd2lwaHlfc3VzcGVuZCwKKwkucmVzdW1lID0gd2lwaHlfcmVzdW1lLAogfTsKIAogaW50IHdpcGh5X3N5c2ZzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IGU3NmNjMjguLjQ4N2NkZDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtOSw3ICs5LDcgQEAKIAogc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCSAgICB1NjQgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKQorCQkJICAgIHUzMiBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyZXN1bHQgPSAmc2JhbmQtPmJpdHJhdGVzWzBdOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1OGU0ODlmLi4wZmQxZGI2IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtNjYsNiArNjYsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgdmlmX3BhcmFtcyB2aWZwYXJhbXM7CiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOworCWludCByZXQ7CiAKIAlpZiAoIXdkZXYpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTk2LDEwICs5NywxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAodHlwZSA9PSB3ZGV2LT5pZnR5cGUpCisJCXJldHVybiAwOworCiAJbWVtc2V0KCZ2aWZwYXJhbXMsIDAsIHNpemVvZih2aWZwYXJhbXMpKTsKIAotCXJldHVybiByZGV2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYod2Rldi0+d2lwaHksIGRldi0+aWZpbmRleCwgdHlwZSwKLQkJCQkJICAgICAgTlVMTCwgJnZpZnBhcmFtcyk7CisJcmV0ID0gcmRldi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKHdkZXYtPndpcGh5LCBkZXYtPmlmaW5kZXgsIHR5cGUsCisJCQkJCSAgICAgTlVMTCwgJnZpZnBhcmFtcyk7CisJV0FSTl9PTighcmV0ICYmIHdkZXYtPmlmdHlwZSAhPSB0eXBlKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfc2l3bW9kZSk7CiAKQEAgLTEzNywzICsxNDQsMTAwIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfZ2l3bW9kZSk7CisKKworaW50IGNmZzgwMjExX3dleHRfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCWludCBjID0gMDsKKworCWlmICghd2RldikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMTsKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gNDsKKworCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCisJc3dpdGNoICh3ZGV2LT53aXBoeS0+c2lnbmFsX3R5cGUpIHsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX05PTkU6CisJCWJyZWFrOworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgorCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDcwOworCQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDM1OworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDEwMDsKKwkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCWJyZWFrOworCX0KKworCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IHJhbmdlLT5tYXhfcXVhbC5sZXZlbCAvIDI7CisJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gcmFuZ2UtPm1heF9xdWFsLm5vaXNlIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IHJhbmdlLT5tYXhfcXVhbC51cGRhdGVkOworCisJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CisJCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7CisKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kICsrKSB7CisJCWludCBpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IHdkZXYtPndpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlpZiAoIXNiYW5kKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzICYmIGMgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5pID0KKwkJCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCQkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEpOworCQkJCXJhbmdlLT5mcmVxW2NdLm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5lID0gNjsKKwkJCQljKys7CisJCQl9CisJCX0KKwl9CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IGM7CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjOworCisJSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOworCisJcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdyYW5nZSk7CmRpZmYgLS1naXQgYS9uZXQveDI1L2FmX3gyNS5jIGIvbmV0L3gyNS9hZl94MjUuYwppbmRleCA5ZmM1YjAyLi5lZDgwYWY4IDEwMDY0NAotLS0gYS9uZXQveDI1L2FmX3gyNS5jCisrKyBiL25ldC94MjUvYWZfeDI1LmMKQEAgLTk1MSwxMCArOTUxLDggQEAKIAkvKgogCSAqCUluY29taW5nIENhbGwgVXNlciBEYXRhLgogCSAqLwotCWlmIChza2ItPmxlbiA+PSAwKSB7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBtYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkZGF0YSwgc2tiLT5sZW4pOwotCQltYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkbGVuZ3RoID0gc2tiLT5sZW47Ci0JfQorCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBtYWtleDI1LT5jYWxsdXNlcmRhdGEuY3VkZGF0YSwgc2tiLT5sZW4pOworCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKIAogCXNrLT5za19hY2tfYmFja2xvZysrOwogCkBAIC0xMDM3LDYgKzEwMzUsMTIgQEAKIAkJc3gyNS5zeDI1X2FkZHIgICA9IHgyNS0+ZGVzdF9hZGRyOwogCX0KIAorCS8qIFNhbml0eSBjaGVjayB0aGUgcGFja2V0IHNpemUgKi8KKwlpZiAobGVuID4gNjU1MzUpIHsKKwkJcmMgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKwogCVNPQ0tfREVCVUcoc2ssICJ4MjVfc2VuZG1zZzogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKIAogCS8qIEJ1aWxkIGEgcGFja2V0ICovCkBAIC0xMTIyLDggKzExMjYsOSBAQAogCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCiAJCXNrYl9xdWV1ZV90YWlsKCZ4MjUtPmludGVycnVwdF9vdXRfcXVldWUsIHNrYik7CiAJZWxzZSB7Ci0JCWxlbiA9IHgyNV9vdXRwdXQoc2ssIHNrYik7Ci0JCWlmIChsZW4gPCAwKQorCQlyYyA9IHgyNV9vdXRwdXQoc2ssIHNrYik7CisJCWxlbiA9IHJjOworCQlpZiAocmMgPCAwKQogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCWVsc2UgaWYgKHgyNS0+cWJpdGluY2wpCiAJCQlsZW4rKzsKQEAgLTE2MDgsOCArMTYxMyw4IEBACiAKIFNPQ0tPUFNfV1JBUCh4MjVfcHJvdG8sIEFGX1gyNSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgeDI1X3BhY2tldF90eXBlID0gewotCS50eXBlID0JX19jb25zdGFudF9odG9ucyhFVEhfUF9YMjUpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX1gyNSksCiAJLmZ1bmMgPQl4MjVfbGFwYl9yZWNlaXZlX2ZyYW1lLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGUyNWZmNjIuLjgyMjcxNzIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTc0OCwxMiArNzQ4LDUxIEBACiAJCXNjaGVkdWxlX3dvcmsoJm5ldC0+eGZybS5zdGF0ZV9oYXNoX3dvcmspOwogfQogCitzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2xvb2tfYXQoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LAorCQkJICAgICAgIHN0cnVjdCBmbG93aSAqZmwsIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKKwkJCSAgICAgICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqKmJlc3QsIGludCAqYWNxX2luX3Byb2dyZXNzLAorCQkJICAgICAgIGludCAqZXJyb3IpCit7CisJLyogUmVzb2x1dGlvbiBsb2dpYzoKKwkgKiAxLiBUaGVyZSBpcyBhIHZhbGlkIHN0YXRlIHdpdGggbWF0Y2hpbmcgc2VsZWN0b3IuIERvbmUuCisJICogMi4gVmFsaWQgc3RhdGUgd2l0aCBpbmFwcHJvcHJpYXRlIHNlbGVjdG9yLiBTa2lwLgorCSAqCisJICogRW50ZXJpbmcgYXJlYSBvZiAic3lzZGVwcyIuCisJICoKKwkgKiAzLiBJZiBzdGF0ZSBpcyBub3QgdmFsaWQsIHNlbGVjdG9yIGlzIHRlbXBvcmFyeSwgaXQgc2VsZWN0cworCSAqICAgIG9ubHkgc2Vzc2lvbiB3aGljaCB0cmlnZ2VyZWQgcHJldmlvdXMgcmVzb2x1dGlvbi4gS2V5CisJICogICAgbWFuYWdlciB3aWxsIGRvIHNvbWV0aGluZyB0byBpbnN0YWxsIGEgc3RhdGUgd2l0aCBwcm9wZXIKKwkgKiAgICBzZWxlY3Rvci4KKwkgKi8KKwlpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkgeworCQlpZiAoKHgtPnNlbC5mYW1pbHkgJiYKKwkJICAgICAheGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkpIHx8CisJCSAgICAhc2VjdXJpdHlfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCh4LCBwb2wsIGZsKSkKKwkJCXJldHVybjsKKworCQlpZiAoISpiZXN0IHx8CisJCSAgICAoKmJlc3QpLT5rbS5keWluZyA+IHgtPmttLmR5aW5nIHx8CisJCSAgICAoKCpiZXN0KS0+a20uZHlpbmcgPT0geC0+a20uZHlpbmcgJiYKKwkJICAgICAoKmJlc3QpLT5jdXJsZnQuYWRkX3RpbWUgPCB4LT5jdXJsZnQuYWRkX3RpbWUpKQorCQkJKmJlc3QgPSB4OworCX0gZWxzZSBpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpIHsKKwkJKmFjcV9pbl9wcm9ncmVzcyA9IDE7CisJfSBlbHNlIGlmICh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0VSUk9SIHx8CisJCSAgIHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfRVhQSVJFRCkgeworCQlpZiAoeGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkgJiYKKwkJICAgIHNlY3VyaXR5X3hmcm1fc3RhdGVfcG9sX2Zsb3dfbWF0Y2goeCwgcG9sLCBmbCkpCisJCQkqZXJyb3IgPSAtRVNSQ0g7CisJfQorfQorCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCiB4ZnJtX3N0YXRlX2ZpbmQoeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCXN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCB4ZnJtX3RtcGwgKnRtcGwsCiAJCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgKmVyciwKIAkJdW5zaWduZWQgc2hvcnQgZmFtaWx5KQogeworCXN0YXRpYyB4ZnJtX2FkZHJlc3NfdCBzYWRkcl93aWxkY2FyZCA9IHsgfTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB4cF9uZXQocG9sKTsKIAl1bnNpZ25lZCBpbnQgaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnk7CkBAIC03NzMsNDAgKzgxMiwyNyBAQAogCQkgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSAmJgogCQkgICAgdG1wbC0+bW9kZSA9PSB4LT5wcm9wcy5tb2RlICYmCiAJCSAgICB0bXBsLT5pZC5wcm90byA9PSB4LT5pZC5wcm90byAmJgotCQkgICAgKHRtcGwtPmlkLnNwaSA9PSB4LT5pZC5zcGkgfHwgIXRtcGwtPmlkLnNwaSkpIHsKLQkJCS8qIFJlc29sdXRpb24gbG9naWM6Ci0JCQkgICAxLiBUaGVyZSBpcyBhIHZhbGlkIHN0YXRlIHdpdGggbWF0Y2hpbmcgc2VsZWN0b3IuCi0JCQkgICAgICBEb25lLgotCQkJICAgMi4gVmFsaWQgc3RhdGUgd2l0aCBpbmFwcHJvcHJpYXRlIHNlbGVjdG9yLiBTa2lwLgorCQkgICAgKHRtcGwtPmlkLnNwaSA9PSB4LT5pZC5zcGkgfHwgIXRtcGwtPmlkLnNwaSkpCisJCQl4ZnJtX3N0YXRlX2xvb2tfYXQocG9sLCB4LCBmbCwgZmFtaWx5LCBkYWRkciwgc2FkZHIsCisJCQkJCSAgICZiZXN0LCAmYWNxdWlyZV9pbl9wcm9ncmVzcywgJmVycm9yKTsKKwl9CisJaWYgKGJlc3QpCisJCWdvdG8gZm91bmQ7CiAKLQkJCSAgIEVudGVyaW5nIGFyZWEgb2YgInN5c2RlcHMiLgotCi0JCQkgICAzLiBJZiBzdGF0ZSBpcyBub3QgdmFsaWQsIHNlbGVjdG9yIGlzIHRlbXBvcmFyeSwKLQkJCSAgICAgIGl0IHNlbGVjdHMgb25seSBzZXNzaW9uIHdoaWNoIHRyaWdnZXJlZAotCQkJICAgICAgcHJldmlvdXMgcmVzb2x1dGlvbi4gS2V5IG1hbmFnZXIgd2lsbCBkbwotCQkJICAgICAgc29tZXRoaW5nIHRvIGluc3RhbGwgYSBzdGF0ZSB3aXRoIHByb3BlcgotCQkJICAgICAgc2VsZWN0b3IuCi0JCQkgKi8KLQkJCWlmICh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKSB7Ci0JCQkJaWYgKCh4LT5zZWwuZmFtaWx5ICYmICF4ZnJtX3NlbGVjdG9yX21hdGNoKCZ4LT5zZWwsIGZsLCB4LT5zZWwuZmFtaWx5KSkgfHwKLQkJCQkgICAgIXNlY3VyaXR5X3hmcm1fc3RhdGVfcG9sX2Zsb3dfbWF0Y2goeCwgcG9sLCBmbCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICghYmVzdCB8fAotCQkJCSAgICBiZXN0LT5rbS5keWluZyA+IHgtPmttLmR5aW5nIHx8Ci0JCQkJICAgIChiZXN0LT5rbS5keWluZyA9PSB4LT5rbS5keWluZyAmJgotCQkJCSAgICAgYmVzdC0+Y3VybGZ0LmFkZF90aW1lIDwgeC0+Y3VybGZ0LmFkZF90aW1lKSkKLQkJCQkJYmVzdCA9IHg7Ci0JCQl9IGVsc2UgaWYgKHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfQUNRKSB7Ci0JCQkJYWNxdWlyZV9pbl9wcm9ncmVzcyA9IDE7Ci0JCQl9IGVsc2UgaWYgKHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfRVJST1IgfHwKLQkJCQkgICB4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0VYUElSRUQpIHsKLQkJCQlpZiAoeGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkgJiYKLQkJCQkgICAgc2VjdXJpdHlfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCh4LCBwb2wsIGZsKSkKLQkJCQkJZXJyb3IgPSAtRVNSQ0g7Ci0JCQl9Ci0JCX0KKwloID0geGZybV9kc3RfaGFzaChuZXQsIGRhZGRyLCAmc2FkZHJfd2lsZGNhcmQsIHRtcGwtPnJlcWlkLCBmYW1pbHkpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHgsIGVudHJ5LCBuZXQtPnhmcm0uc3RhdGVfYnlkc3QraCwgYnlkc3QpIHsKKwkJaWYgKHgtPnByb3BzLmZhbWlseSA9PSBmYW1pbHkgJiYKKwkJICAgIHgtPnByb3BzLnJlcWlkID09IHRtcGwtPnJlcWlkICYmCisJCSAgICAhKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9XSUxEUkVDVikgJiYKKwkJICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGZhbWlseSkgJiYKKwkJICAgIHRtcGwtPm1vZGUgPT0geC0+cHJvcHMubW9kZSAmJgorCQkgICAgdG1wbC0+aWQucHJvdG8gPT0geC0+aWQucHJvdG8gJiYKKwkJICAgICh0bXBsLT5pZC5zcGkgPT0geC0+aWQuc3BpIHx8ICF0bXBsLT5pZC5zcGkpKQorCQkJeGZybV9zdGF0ZV9sb29rX2F0KHBvbCwgeCwgZmwsIGZhbWlseSwgZGFkZHIsIHNhZGRyLAorCQkJCQkgICAmYmVzdCwgJmFjcXVpcmVfaW5fcHJvZ3Jlc3MsICZlcnJvcik7CiAJfQogCitmb3VuZDoKIAl4ID0gYmVzdDsKIAlpZiAoIXggJiYgIWVycm9yICYmICFhY3F1aXJlX2luX3Byb2dyZXNzKSB7CiAJCWlmICh0bXBsLT5pZC5zcGkgJiYKQEAgLTE1ODksNyArMTYxNSw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJbGlzdF9kZWwoJndhbGstPmFsbCk7Ci0Jc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGtfZG9uZSk7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZTA2MzY1NzcuLjk3OTYxOTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIC1EIktCVUlMRF9NT0ROQU1FPUtCVUlMRF9TVFIoJChjYWxsIG5hbWUtZml4LCQobW9kbmFtZSkpKSIpCiAKICNoYXNoIHZhbHVlcwotaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCitpZmRlZiBDT05GSUdfRFlOQU1JQ19ERUJVRwogZGVidWdfZmxhZ3MgPSAtRCJERUJVR19IQVNIPSQoc2hlbGwgLi9zY3JpcHRzL2Jhc2ljL2hhc2ggZGpiMiAkKEBEKSQobW9kbmFtZSkpIlwKICAgICAgICAgICAgICAgLUQiREVCVUdfSEFTSDI9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCByNSAkKEBEKSQobW9kbmFtZSkpIgogZWxzZQpAQCAtMTg2LDMgKzE4NiwxNyBAQAogY21kX2d6aXAgPSBnemlwIC1mIC05IDwgJDwgPiAkQAogCiAKKyMgQnppcDIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQnppcDIgZG9lcyBub3QgaW5jbHVkZSBzaXplIGluIGZpbGUuLi4gc28gd2UgaGF2ZSB0byBmYWtlIHRoYXQKK3NpemVfYXBwZW5kPSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvYmluX3NpemUKKworcXVpZXRfY21kX2J6aXAyID0gQlpJUDIgICAgJEAKK2NtZF9iemlwMiA9IChiemlwMiAtOSA8ICQ8ICYmICQoc2l6ZV9hcHBlbmQpICQ8KSA+ICRAIHx8IChybSAtZiAkQCA7IGZhbHNlKQorCisjIEx6bWEKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3F1aWV0X2NtZF9sem1hID0gTFpNQSAgICAkQAorY21kX2x6bWEgPSAobHptYSAtOSAtYyAkPCAmJiAkKHNpemVfYXBwZW5kKSAkPCkgPiRAIHx8IChybSAtZiAkQCA7IGZhbHNlKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iaW5fc2l6ZSBiL3NjcmlwdHMvYmluX3NpemUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlMWIzNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvYmluX3NpemUKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK2lmIFsgJCMgPSAwIF0gOyB0aGVuCisgICBlY2hvIFVzYWdlOiAkMCBmaWxlCitmaQorCitzaXplX2RlYz1gc3RhdCAtYyAiJXMiICQxYAorc2l6ZV9oZXhfZWNob19zdHJpbmc9YHByaW50ZiAiJTA4eCIgJHNpemVfZGVjIHwKKyAgICAgc2VkICdzL1woLi5cKVwoLi5cKVwoLi5cKVwoLi5cKS9cXFxceFw0XFxcXHhcM1xcXFx4XDJcXFxceFwxL2cnYAorL2Jpbi9lY2hvIC1uZSAkc2l6ZV9oZXhfZWNob19zdHJpbmcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2NjLXg4Nl8zMi1oYXMtc3RhY2stcHJvdGVjdG9yLnNoIGIvc2NyaXB0cy9nY2MteDg2XzMyLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0OTNkYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZ2NjLXg4Nl8zMi1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK2VjaG8gImludCBmb28odm9pZCkgeyBjaGFyIFhbMjAwXTsgcmV0dXJuIDM7IH0iIHwgJCogLVMgLXhjIC1jIC1PMCAtZnN0YWNrLXByb3RlY3RvciAtIC1vIC0gMj4gL2Rldi9udWxsIHwgZ3JlcCAtcSAiJWdzIgoraWYgWyAiJD8iIC1lcSAiMCIgXSA7IHRoZW4KKwllY2hvIHkKK2Vsc2UKKwllY2hvIG4KK2ZpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2djYy14ODZfNjQtaGFzLXN0YWNrLXByb3RlY3Rvci5zaCBiL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCmluZGV4IDMyNWMwYTEuLmFmYWVjNjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCisrKyBiL3NjcmlwdHMvZ2NjLXg4Nl82NC1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCkBAIC0xLDYgKzEsOCBAQAogIyEvYmluL3NoCiAKLWVjaG8gImludCBmb28odm9pZCkgeyBjaGFyIFhbMjAwXTsgcmV0dXJuIDM7IH0iIHwgJDEgLVMgLXhjIC1jIC1PMCAtbWNtb2RlbD1rZXJuZWwgLWZzdGFjay1wcm90ZWN0b3IgLSAtbyAtIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXEgIiVncyIKK2VjaG8gImludCBmb28odm9pZCkgeyBjaGFyIFhbMjAwXTsgcmV0dXJuIDM7IH0iIHwgJCogLVMgLXhjIC1jIC1PMCAtbWNtb2RlbD1rZXJuZWwgLWZzdGFjay1wcm90ZWN0b3IgLSAtbyAtIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXEgIiVncyIKIGlmIFsgIiQ/IiAtZXEgIjAiIF0gOyB0aGVuCi0JZWNobyAkMgorCWVjaG8geQorZWxzZQorCWVjaG8gbgogZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKaW5kZXggNWYzNDE1Zi4uM2VlYThmMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKKysrIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKQEAgLTUsNyArNSw3IEBACiAjIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTAogIwogIyBHZW5lcmF0ZSBhIGNwaW8gcGFja2VkIGluaXRyYW1mcy4gSXQgdXNlcyBnZW5faW5pdF9jcGlvIHRvIGdlbmVyYXRlCi0jIHRoZSBjcGlvIGFyY2hpdmUsIGFuZCBnemlwIHRvIHBhY2sgaXQuCisjIHRoZSBjcGlvIGFyY2hpdmUsIGFuZCB0aGVuIGNvbXByZXNzZXMgaXQuCiAjIFRoZSBzY3JpcHQgbWF5IGFsc28gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW5wdXRmaWxlIHVzZWQgZm9yIGdlbl9pbml0X2NwaW8KICMgVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGdlbl9pbml0X2NwaW8gaXMgbG9jYXRlZCBpbiB1c3IvIGRpcmVjdG9yeQogCkBAIC0xNiw4ICsxNiw4IEBACiBjYXQgPDwgRU9GCiBVc2FnZToKICQwIFstbyA8ZmlsZT5dIFstdSA8dWlkPl0gWy1nIDxnaWQ+XSB7LWQgfCA8Y3Bpb19zb3VyY2U+fSAuLi4KLQktbyA8ZmlsZT4gICAgICBDcmVhdGUgZ3ppcHBlZCBpbml0cmFtZnMgZmlsZSBuYW1lZCA8ZmlsZT4gdXNpbmcKLQkJICAgICAgIGdlbl9pbml0X2NwaW8gYW5kIGd6aXAKKwktbyA8ZmlsZT4gICAgICBDcmVhdGUgY29tcHJlc3NlZCBpbml0cmFtZnMgZmlsZSBuYW1lZCA8ZmlsZT4gdXNpbmcKKwkJICAgICAgIGdlbl9pbml0X2NwaW8gYW5kIGNvbXByZXNzb3IgZGVwZW5kaW5nIG9uIHRoZSBleHRlbnNpb24KIAktdSA8dWlkPiAgICAgICBVc2VyIElEIHRvIG1hcCB0byB1c2VyIElEIDAgKHJvb3QpLgogCQkgICAgICAgPHVpZD4gaXMgb25seSBtZWFuaW5nZnVsIGlmIDxjcGlvX3NvdXJjZT4gaXMgYQogCQkgICAgICAgZGlyZWN0b3J5LiAgInNxdWFzaCIgZm9yY2VzIGFsbCBmaWxlcyB0byB1aWQgMC4KQEAgLTIyNSw2ICsyMjUsNyBAQAogb3V0cHV0PSIvZGV2L3N0ZG91dCIKIG91dHB1dF9maWxlPSIiCiBpc19jcGlvX2NvbXByZXNzZWQ9Citjb21wcj0iZ3ppcCAtOSAtZiIKIAogYXJnPSIkMSIKIGNhc2UgIiRhcmciIGluCkBAIC0yMzMsMTEgKzIzNCwxNSBAQAogCQllY2hvICJkZXBzX2luaXRyYW1mcyA6PSBcXCIKIAkJc2hpZnQKIAkJOzsKLQkiLW8iKQkjIGdlbmVyYXRlIGd6aXBwZWQgY3BpbyBpbWFnZSBuYW1lZCAkMQorCSItbyIpCSMgZ2VuZXJhdGUgY29tcHJlc3NlZCBjcGlvIGltYWdlIG5hbWVkICQxCiAJCXNoaWZ0CiAJCW91dHB1dF9maWxlPSIkMSIKIAkJY3Bpb19saXN0PSIkKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3Bpb2xpc3QuWFhYWFhYKSIKIAkJb3V0cHV0PSR7Y3Bpb19saXN0fQorCQllY2hvICIkb3V0cHV0X2ZpbGUiIHwgZ3JlcCAtcSAiXC5neiQiICYmIGNvbXByPSJnemlwIC05IC1mIgorCQllY2hvICIkb3V0cHV0X2ZpbGUiIHwgZ3JlcCAtcSAiXC5iejIkIiAmJiBjb21wcj0iYnppcDIgLTkgLWYiCisJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmx6bWEkIiAmJiBjb21wcj0ibHptYSAtOSAtZiIKKwkJZWNobyAiJG91dHB1dF9maWxlIiB8IGdyZXAgLXEgIlwuY3BpbyQiICYmIGNvbXByPSJjYXQiCiAJCXNoaWZ0CiAJCTs7CiBlc2FjCkBAIC0yNzQsNyArMjc5LDcgQEAKIAllc2FjCiBkb25lCiAKLSMgSWYgb3V0cHV0X2ZpbGUgaXMgc2V0IHdlIHdpbGwgZ2VuZXJhdGUgY3BpbyBhcmNoaXZlIGFuZCBnemlwIGl0CisjIElmIG91dHB1dF9maWxlIGlzIHNldCB3ZSB3aWxsIGdlbmVyYXRlIGNwaW8gYXJjaGl2ZSBhbmQgY29tcHJlc3MgaXQKICMgd2UgYXJlIGNhcmVmdWxsIHRvIGRlbGV0ZSB0bXAgZmlsZXMKIGlmIFsgISAteiAke291dHB1dF9maWxlfSBdOyB0aGVuCiAJaWYgWyAteiAke2NwaW9fZmlsZX0gXTsgdGhlbgpAQCAtMjg3LDcgKzI5Miw4IEBACiAJaWYgWyAiJHtpc19jcGlvX2NvbXByZXNzZWR9IiA9ICJjb21wcmVzc2VkIiBdOyB0aGVuCiAJCWNhdCAke2NwaW9fdGZpbGV9ID4gJHtvdXRwdXRfZmlsZX0KIAllbHNlCi0JCWNhdCAke2NwaW9fdGZpbGV9IHwgZ3ppcCAtZiAtOSAtID4gJHtvdXRwdXRfZmlsZX0KKwkJKGNhdCAke2NwaW9fdGZpbGV9IHwgJHtjb21wcn0gIC0gPiAke291dHB1dF9maWxlfSkgXAorCQl8fCAocm0gLWYgJHtvdXRwdXRfZmlsZX0gOyBmYWxzZSkKIAlmaQogCVsgLXogJHtjcGlvX2ZpbGV9IF0gJiYgcm0gJHtjcGlvX3RmaWxlfQogZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbCBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbAppbmRleCBkYjMwZmFjMy4uNTZmOTBhNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbApAQCAtMzgsNyArMzgsNyBAQAogCQkmY2hlY2tfYXNtX3R5cGVzKCk7CiAJCSZjaGVja19zaXpldHlwZXMoKTsKIAkJJmNoZWNrX3Byb3RvdHlwZXMoKTsKLQkJJmNoZWNrX2NvbmZpZygpOworCQkjIERyb3BwZWQgZm9yIG5vdy4gVG9vIG11Y2ggbm9pc2UgJmNoZWNrX2NvbmZpZygpOwogCX0KIAljbG9zZSBGSDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDNlMTA1N2YuLmQxOTAwOTIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKICNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCiAjaW5jbHVkZSAibGtjLmgiCkBAIC00NjQsOSArNDY1LDIyIEBACiAJCQlpbnB1dF9tb2RlID0gc2V0X3llczsKIAkJCWJyZWFrOwogCQljYXNlICdyJzoKKwkJeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCQkJdW5zaWduZWQgaW50IHNlZWQ7CisKKwkJCS8qCisJCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRlcml2ZWQgc2VlZCwKKwkJCSAqIGNvbXBlbnNhdGUgZm9yIHN5c3RlbXMgd2hlcmUgaXQgbWF5IGJlIHplcm8KKwkJCSAqLworCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsKKwkJCXNyYW5kKHNlZWQpOworCiAJCQlpbnB1dF9tb2RlID0gc2V0X3JhbmRvbTsKLQkJCXNyYW5kKHRpbWUoTlVMTCkpOwogCQkJYnJlYWs7CisJCX0KIAkJY2FzZSAnaCc6CiAJCQlwcmludGYoXygiU2VlIFJFQURNRSBmb3IgdXNhZ2UgaW5mb1xuIikpOwogCQkJZXhpdCgwKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggODMwZDllYS4uMjczZDczOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTg0Myw3ICs4NDMsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pIHx8IG1vZGUgIT0gZGVmX3JhbmRvbSkKKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9yYW5kb20pKQogCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC04NTYsMjggKzg1Niw0OSBAQAogCiAJaWYgKG1vZGUgIT0gZGVmX3JhbmRvbSkKIAkJcmV0dXJuOwotCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJICogSWYgY3Vyci50cmkgZXF1YWwgdG8gbW9kIHRoZW4gd2UgY2FuIHNlbGVjdCBzZXZlcmFsCisJICogY2hvaWNlIHN5bWJvbHMgaW4gb25lIGJsb2NrLgorCSAqIEluIHRoaXMgY2FzZSB3ZSBkbyBub3RoaW5nLgorCSAqIElmIGN1cnIudHJpIGVxdWFsIHllcyB0aGVuIG9ubHkgb25lIHN5bWJvbCBjYW4gYmUKKwkgKiBzZWxlY3RlZCBpbiBhIGNob2ljZSBibG9jayBhbmQgd2Ugc2V0IGl0IHRvIHllcywKKwkgKiBhbmQgdGhlIHJlc3QgdG8gbm8uCisJICovCiAJZm9yX2FsbF9zeW1ib2xzKGksIGNzeW0pIHsKIAkJaWYgKHN5bV9oYXNfdmFsdWUoY3N5bSkgfHwgIXN5bV9pc19jaG9pY2UoY3N5bSkpCiAJCQljb250aW51ZTsKIAogCQlzeW1fY2FsY192YWx1ZShjc3ltKTsKKworCQlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQorCQkJY29udGludWU7CisKIAkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7Ci0JCWRlZiA9IC0xOwotCQl3aGlsZSAoMSkgewotCQkJY250ID0gMDsKLQkJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7Ci0JCQkJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKGRlZiA9PSBjbnQrKykgewotCQkJCQljc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOwotCQkJCQlicmVhazsKLQkJCQl9CisKKwkJLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KKwkJY250ID0gMDsKKwkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCQljbnQrKzsKKworCQkvKgorCQkgKiBmaW5kIGEgcmFuZG9tIHZhbHVlIGFuZCBzZXQgaXQgdG8geWVzLAorCQkgKiBzZXQgdGhlIHJlc3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKKwkJICovCisJCWRlZiA9IChyYW5kKCkgJSBjbnQpOworCisJCWNudCA9IDA7CisJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCQlpZiAoZGVmID09IGNudCsrKSB7CisJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWNzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CiAJCQl9Ci0JCQlpZiAoZGVmID49IDAgfHwgY250IDwgMikKLQkJCQlicmVhazsKLQkJCWRlZiA9IChyYW5kKCkgJSBjbnQpICsgMTsKKwkJCWVsc2UgeworCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCQkJfQogCQl9CiAJCWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwkJY3N5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA0ZWVhNjBiLi5hMzM0NDI4IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC03MTAsNiArNzEwLDE0IEBACiAJc3RyY2F0KGFsaWFzLCAiOiIpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IGRvX3BsYXRmb3JtX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCit7CisJc3ByaW50ZihhbGlhcywgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCAiJXMiLCBpZC0+bmFtZSk7CisJcmV0dXJuIDE7Cit9CisKIC8qIElnbm9yZSBhbnkgcHJlZml4LCBlZy4gc29tZSBhcmNoaXRlY3R1cmVzIHByZXBlbmQgXyAqLwogc3RhdGljIGlubGluZSBpbnQgc3ltX2lzKGNvbnN0IGNoYXIgKnN5bWJvbCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTg0OSw2ICs4NTcsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBkbWlfc3lzdGVtX2lkKSwgImRtaSIsCiAJCQkgZG9fZG1pX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcGxhdGZvcm1fZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkKSwgInBsYXRmb3JtIiwKKwkJCSBkb19wbGF0Zm9ybV9lbnRyeSwgbW9kKTsKIAlmcmVlKHplcm9zKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDg4OTIxNjEuLjdlNjIzMDMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTQxNSw4ICs0MTUsOSBAQAogCQljb25zdCBjaGFyICpzZWNzdHJpbmdzCiAJCQk9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKIAkJY29uc3QgY2hhciAqc2VjbmFtZTsKKwkJaW50IG5vYml0cyA9IHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfTk9CSVRTOwogCi0JCWlmIChzZWNoZHJzW2ldLnNoX29mZnNldCA+IGluZm8tPnNpemUpIHsKKwkJaWYgKCFub2JpdHMgJiYgc2VjaGRyc1tpXS5zaF9vZmZzZXQgPiBpbmZvLT5zaXplKSB7CiAJCQlmYXRhbCgiJXMgaXMgdHJ1bmNhdGVkLiBzZWNoZHJzW2ldLnNoX29mZnNldD0lbHUgPiAiCiAJCQkgICAgICAic2l6ZW9mKCpocmQpPSV6dVxuIiwgZmlsZW5hbWUsCiAJCQkgICAgICAodW5zaWduZWQgbG9uZylzZWNoZHJzW2ldLnNoX29mZnNldCwKQEAgLTQyNSw2ICs0MjYsOCBAQAogCQl9CiAJCXNlY25hbWUgPSBzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lOwogCQlpZiAoc3RyY21wKHNlY25hbWUsICIubW9kaW5mbyIpID09IDApIHsKKwkJCWlmIChub2JpdHMpCisJCQkJZmF0YWwoIiVzIGhhcyBOT0JJVFMgLm1vZGluZm9cbiIsIGZpbGVuYW1lKTsKIAkJCWluZm8tPm1vZGluZm8gPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OwogCQkJaW5mby0+bW9kaW5mb19sZW4gPSBzZWNoZHJzW2ldLnNoX3NpemU7CiAJCX0gZWxzZSBpZiAoc3RyY21wKHNlY25hbWUsICJfX2tzeW10YWIiKSA9PSAwKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCmluZGV4IDhjNmI3YjAuLmZhNGEwYTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQorKysgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKQEAgLTM1LDkgKzM1LDEwIEBACiBycG0tcGtnIHJwbTogJChvYmp0cmVlKS9rZXJuZWwuc3BlYyBGT1JDRQogCSQoTUFLRSkgY2xlYW4KIAkkKFBSRVYpIGxuIC1zZiAkKHNyY3RyZWUpICQoS0VSTkVMUEFUSCkKKwkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL3NldGxvY2FsdmVyc2lvbiA+ICQob2JqdHJlZSkvLnNjbXZlcnNpb24KIAkkKFBSRVYpIHRhciAtY3ogJChSQ1NfVEFSX0lHTk9SRSkgLWYgJChLRVJORUxQQVRIKS50YXIuZ3ogJChLRVJORUxQQVRIKS8uCiAJJChQUkVWKSBybSAkKEtFUk5FTFBBVEgpCi0KKwlybSAtZiAkKG9ianRyZWUpLy5zY212ZXJzaW9uCiAJc2V0IC1lOyBcCiAJJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9ta3ZlcnNpb24gPiAkKG9ianRyZWUpLy50bXBfdmVyc2lvbgogCXNldCAtZTsgXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKaW5kZXggZWU0NDhjZC4uM2Q5M2Y4YyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYworKysgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCkBAIC05Niw3ICs5Niw3IEBACiAKIGVjaG8gIiIKIGVjaG8gIiVjbGVhbiIKLWVjaG8gJyNlY2hvIC1yZiAkUlBNX0JVSUxEX1JPT1QnCitlY2hvICdybSAtcmYgJFJQTV9CVUlMRF9ST09UJwogZWNobyAiIgogZWNobyAiJWZpbGVzIgogZWNobyAnJWRlZmF0dHIgKC0sIHJvb3QsIHJvb3QpJwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy91bmlmZGVmLmMgYi9zY3JpcHRzL3VuaWZkZWYuYwppbmRleCA1NTIwMjVlLi4wNWEzMWE2IDEwMDY0NAotLS0gYS9zY3JpcHRzL3VuaWZkZWYuYworKysgYi9zY3JpcHRzL3VuaWZkZWYuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiBzdGF0aWMgdm9pZCAgICAgICAgICAgICBlcnJvcihjb25zdCBjaGFyICopOwogc3RhdGljIGludCAgICAgICAgICAgICAgZmluZHN5bShjb25zdCBjaGFyICopOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgZmx1c2hsaW5lKGJvb2wpOwotc3RhdGljIExpbmV0eXBlICAgICAgICAgZ2V0bGluZSh2b2lkKTsKK3N0YXRpYyBMaW5ldHlwZSAgICAgICAgIGdldF9saW5lKHZvaWQpOwogc3RhdGljIExpbmV0eXBlICAgICAgICAgaWZldmFsKGNvbnN0IGNoYXIgKiopOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgaWdub3Jlb2ZmKHZvaWQpOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgaWdub3Jlb24odm9pZCk7CkBAIC01MTIsNyArNTEyLDcgQEAKIAogCWZvciAoOzspIHsKIAkJbGluZW51bSsrOwotCQlsaW5ldmFsID0gZ2V0bGluZSgpOworCQlsaW5ldmFsID0gZ2V0X2xpbmUoKTsKIAkJdHJhbnNfdGFibGVbaWZzdGF0ZVtkZXB0aF1dW2xpbmV2YWxdKCk7CiAJCWRlYnVnKCJwcm9jZXNzICVzIC0+ICVzIGRlcHRoICVkIiwKIAkJICAgIGxpbmV0eXBlX25hbWVbbGluZXZhbF0sCkBAIC01MjYsNyArNTI2LDcgQEAKICAqIGhlbHAgZnJvbSBza2lwY29tbWVudCgpLgogICovCiBzdGF0aWMgTGluZXR5cGUKLWdldGxpbmUodm9pZCkKK2dldF9saW5lKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqY3A7CiAJaW50IGN1cnN5bTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L0tjb25maWcgYi9zZWN1cml0eS9LY29uZmlnCmluZGV4IDk0Mzg1MzUuLmJiMjQ0NzcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L0tjb25maWcKKysrIGIvc2VjdXJpdHkvS2NvbmZpZwpAQCAtNTUsNyArNTUsOCBAQAogCWJvb2wgIkVuYWJsZSB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtIgogCWhlbHAKIAkgIFRoaXMgd2lsbCBidWlsZCB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtLiAgSXQgaXMgY3VycmVudGx5IHVzZWQgYnkKLQkgIHRoZSBUUE0gYmlvcyBjaGFyYWN0ZXIgZHJpdmVyLiAgSXQgaXMgbm90IHVzZWQgYnkgU0VMaW51eCBvciBTTUFDSy4KKwkgIHRoZSBUUE0gYmlvcyBjaGFyYWN0ZXIgZHJpdmVyIGFuZCBJTUEsIGFuIGludGVncml0eSBwcm92aWRlci4gIEl0IGlzCisJICBub3QgdXNlZCBieSBTRUxpbnV4IG9yIFNNQUNLLgogCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgogCkBAIC0xMzQsNiArMTM1LDkgQEAKIAogc291cmNlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZwogc291cmNlIHNlY3VyaXR5L3NtYWNrL0tjb25maWcKK3NvdXJjZSBzZWN1cml0eS90b21veW8vS2NvbmZpZworCitzb3VyY2Ugc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCiAKIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvTWFrZWZpbGUgYi9zZWN1cml0eS9NYWtlZmlsZQppbmRleCBjMDVjMTI3Li5mYTc3MDIxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG9iai0kKENPTkZJR19LRVlTKQkJCSs9IGtleXMvCiBzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkJKz0gc2VsaW51eAogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLKQkJKz0gc21hY2sKK3N1YmRpci0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pICAgICAgICArPSB0b21veW8KIAogIyBhbHdheXMgZW5hYmxlIGRlZmF1bHQgY2FwYWJpbGl0aWVzCiBvYmoteQkJKz0gY29tbW9uY2FwLm8KQEAgLTE1LDUgKzE2LDEwIEBACiAjIE11c3QgcHJlY2VkZSBjYXBhYmlsaXR5Lm8gaW4gb3JkZXIgdG8gc3RhY2sgcHJvcGVybHkuCiBvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkJCSs9IHNlbGludXgvYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLKQkJKz0gc21hY2svYnVpbHQtaW4ubworb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTykJCSs9IHRvbW95by9idWlsdC1pbi5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcpCQkrPSByb290X3BsdWcubwogb2JqLSQoQ09ORklHX0NHUk9VUF9ERVZJQ0UpCQkrPSBkZXZpY2VfY2dyb3VwLm8KKworIyBPYmplY3QgaW50ZWdyaXR5IGZpbGUgbGlzdHMKK3N1YmRpci0kKENPTkZJR19JTUEpCQkJKz0gaW50ZWdyaXR5L2ltYQorb2JqLSQoQ09ORklHX0lNQSkJCQkrPSBpbnRlZ3JpdHkvaW1hL2J1aWx0LWluLm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lub2RlLmMgYi9zZWN1cml0eS9pbm9kZS5jCmluZGV4IDAwN2VmMjUuLmYzYjkxYmYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2lub2RlLmMKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtMjAyLDEyICsyMDIsMTEgQEAKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBkZW50cnkgaWYgaXQgc3VjY2VlZHMuICBUaGlzCiAgKiBwb2ludGVyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBzZWN1cml0eWZzX3JlbW92ZSgpIGZ1bmN0aW9uIHdoZW4gdGhlIGZpbGUgaXMKICAqIHRvIGJlIHJlbW92ZWQgKG5vIGF1dG9tYXRpYyBjbGVhbnVwIGhhcHBlbnMgaWYgeW91ciBtb2R1bGUgaXMgdW5sb2FkZWQsCi0gKiB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUpLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCAlTlVMTCBpcyByZXR1cm5lZC4KKyAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZSkuICBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybgorICogdGhlIGVyb3JyIHZhbHVlICh2aWEgRVJSX1BUUikuCiAgKgogICogSWYgc2VjdXJpdHlmcyBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCB0aGUgdmFsdWUgJS1FTk9ERVYgaXMKLSAqIHJldHVybmVkLiAgSXQgaXMgbm90IHdpc2UgdG8gY2hlY2sgZm9yIHRoaXMgdmFsdWUsIGJ1dCByYXRoZXIsIGNoZWNrIGZvcgotICogJU5VTEwgb3IgISVOVUxMIGluc3RlYWQgYXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciAjaWZkZWYgaW4gdGhlIGNhbGxpbmcKLSAqIGNvZGUuCisgKiByZXR1cm5lZC4KICAqLwogc3RydWN0IGRlbnRyeSAqc2VjdXJpdHlmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkOTc2NAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwpAQCAtMCwwICsxLDU1IEBACisjIElCTSBJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlCisjCitjb25maWcgSU1BCisJYm9vbCAiSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpIgorCWRlcGVuZHMgb24gQUNQSQorCXNlbGVjdCBTRUNVUklUWUZTCisJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fSE1BQworCXNlbGVjdCBDUllQVE9fTUQ1CisJc2VsZWN0IENSWVBUT19TSEExCisJc2VsZWN0IFRDR19UUE0KKwlzZWxlY3QgVENHX1RJUworCWhlbHAKKwkgIFRoZSBUcnVzdGVkIENvbXB1dGluZyBHcm91cChUQ0cpIHJ1bnRpbWUgSW50ZWdyaXR5CisJICBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKSBtYWludGFpbnMgYSBsaXN0IG9mIGhhc2gKKwkgIHZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcywKKwkgIGFzIHRoZXkgYXJlIHJlYWQgb3IgZXhlY3V0ZWQuIElmIGFuIGF0dGFja2VyIG1hbmFnZXMKKwkgIHRvIGNoYW5nZSB0aGUgY29udGVudHMgb2YgYW4gaW1wb3J0YW50IHN5c3RlbSBmaWxlCisJICBiZWluZyBtZWFzdXJlZCwgd2UgY2FuIHRlbGwuCisKKwkgIElmIHlvdXIgc3lzdGVtIGhhcyBhIFRQTSBjaGlwLCB0aGVuIElNQSBhbHNvIG1haW50YWlucworCSAgYW4gYWdncmVnYXRlIGludGVncml0eSB2YWx1ZSBvdmVyIHRoaXMgbGlzdCBpbnNpZGUgdGhlCisJICBUUE0gaGFyZHdhcmUsIHNvIHRoYXQgdGhlIFRQTSBjYW4gcHJvdmUgdG8gYSB0aGlyZCBwYXJ0eQorCSAgd2hldGhlciBvciBub3QgY3JpdGljYWwgc3lzdGVtIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZC4KKwkgIFJlYWQgPGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvc2VjMDQvdGVjaC9zYWlsZXIuaHRtbD4KKwkgIHRvIGxlYXJuIG1vcmUgYWJvdXQgSU1BLgorCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIElNQV9NRUFTVVJFX1BDUl9JRFgKKwlpbnQKKwlkZXBlbmRzIG9uIElNQQorCXJhbmdlIDggMTQKKwlkZWZhdWx0IDEwCisJaGVscAorCSAgSU1BX01FQVNVUkVfUENSX0lEWCBkZXRlcm1pbmVzIHRoZSBUUE0gUENSIHJlZ2lzdGVyIGluZGV4CisJICB0aGF0IElNQSB1c2VzIHRvIG1haW50YWluIHRoZSBpbnRlZ3JpdHkgYWdncmVnYXRlIG9mIHRoZQorCSAgbWVhc3VyZW1lbnQgbGlzdC4gIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IDEwLgorCitjb25maWcgSU1BX0FVRElUCisJYm9vbAorCWRlcGVuZHMgb24gSU1BCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGtlcm5lbCBwYXJhbWV0ZXIgJ2ltYV9hdWRpdCcsIHdoaWNoCisJICBhbGxvd3MgaW5mb3JtYXRpb25hbCBhdWRpdGluZyBtZXNzYWdlcyB0byBiZSBlbmFibGVkCisJICBhdCBib290LiAgSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIGluZm9ybWF0aW9uYWwgaW50ZWdyaXR5CisJICBhdWRpdGluZyBtZXNzYWdlcyBjYW4gYmUgZW5hYmxlZCB3aXRoICdpbWFfYXVkaXQ9MScgb24KKwkgIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCitjb25maWcgSU1BX0xTTV9SVUxFUworCWJvb2wKKwlkZXBlbmRzIG9uIElNQSAmJiBBVURJVCAmJiAoU0VDVVJJVFlfU0VMSU5VWCB8fCBTRUNVUklUWV9TTUFDSykKKwlkZWZhdWx0IHkKKwloZWxwCisJICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBkaXNyZWdhcmQgTFNNIGJhc2VkIHBvbGljeSBydWxlcy4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4N2M0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgVHJ1c3RlZCBDb21wdXRpbmcgR3JvdXAncyhUQ0cpIHJ1bnRpbWUgSW50ZWdyaXR5CisjIE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpLgorIworCitvYmotJChDT05GSUdfSU1BKSArPSBpbWEubworCitpbWEteSA6PSBpbWFfZnMubyBpbWFfcXVldWUubyBpbWFfaW5pdC5vIGltYV9tYWluLm8gaW1hX2NyeXB0by5vIGltYV9hcGkubyBcCisJIGltYV9wb2xpY3kubyBpbWFfaWludC5vIGltYV9hdWRpdC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjVlYjUzCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hLmgKKyAqCWludGVybmFsIEludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUgKElNQSkgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fTElOVVhfSU1BX0gKKyNkZWZpbmUgX19MSU5VWF9JTUFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC90cG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorCitlbnVtIGltYV9zaG93X3R5cGUgeyBJTUFfU0hPV19CSU5BUlksIElNQV9TSE9XX0FTQ0lJIH07CitlbnVtIHRwbV9wY3JzIHsgVFBNX1BDUjAgPSAwLCBUUE1fUENSOCA9IDggfTsKKworLyogZGlnZXN0IHNpemUgZm9yIElNQSwgZml0cyBTSEExIG9yIE1ENSAqLworI2RlZmluZSBJTUFfRElHRVNUX1NJWkUJCTIwCisjZGVmaW5lIElNQV9FVkVOVF9OQU1FX0xFTl9NQVgJMjU1CisKKyNkZWZpbmUgSU1BX0hBU0hfQklUUyA5CisjZGVmaW5lIElNQV9NRUFTVVJFX0hUQUJMRV9TSVpFICgxIDw8IElNQV9IQVNIX0JJVFMpCisKKy8qIHNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KK2V4dGVybiBpbnQgaW1hX2luaXRpYWxpemVkOworZXh0ZXJuIGludCBpbWFfdXNlZF9jaGlwOworZXh0ZXJuIGNoYXIgKmltYV9oYXNoOworCisvKiBJTUEgaW5vZGUgdGVtcGxhdGUgZGVmaW5pdGlvbiAqLworc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhIHsKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsJLyogc2hhMS9tZDUgbWVhc3VyZW1lbnQgaGFzaCAqLworCWNoYXIgZmlsZV9uYW1lW0lNQV9FVkVOVF9OQU1FX0xFTl9NQVggKyAxXTsJLyogbmFtZSArIFwwICovCit9OworCitzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5IHsKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsJLyogc2hhMSBvciBtZDUgbWVhc3VyZW1lbnQgaGFzaCAqLworCWNvbnN0IGNoYXIgKnRlbXBsYXRlX25hbWU7CisJaW50IHRlbXBsYXRlX2xlbjsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgdGVtcGxhdGU7Cit9OworCitzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobmV4dDsJLyogcGxhY2UgaW4gaGFzaCBjb2xsaXNpb24gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGF0ZXI7CQkvKiBwbGFjZSBpbiBpbWFfbWVhc3VyZW1lbnRzIGxpc3QgKi8KKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKK307CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpbWFfbWVhc3VyZW1lbnRzOwkvKiBsaXN0IG9mIGFsbCBtZWFzdXJlbWVudHMgKi8KKworLyogZGVjbGFyYXRpb25zICovCit2b2lkIGludGVncml0eV9hdWRpdF9tc2coaW50IGF1ZGl0X21zZ25vLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpvcCwKKwkJCSBjb25zdCBjaGFyICpjYXVzZSwgaW50IHJlc3VsdCwgaW50IGluZm8pOworCisvKiBJbnRlcm5hbCBJTUEgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KK3ZvaWQgaW1hX2lpbnRjYWNoZV9pbml0KHZvaWQpOworaW50IGltYV9pbml0KHZvaWQpOwordm9pZCBpbWFfY2xlYW51cCh2b2lkKTsKK2ludCBpbWFfZnNfaW5pdCh2b2lkKTsKK3ZvaWQgaW1hX2ZzX2NsZWFudXAodm9pZCk7CitpbnQgaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwgaW50IHZpb2xhdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKm9wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBpbWFfY2FsY19oYXNoKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpkaWdlc3QpOworaW50IGltYV9jYWxjX3RlbXBsYXRlX2hhc2goaW50IHRlbXBsYXRlX2xlbiwgdm9pZCAqdGVtcGxhdGUsIGNoYXIgKmRpZ2VzdCk7CitpbnQgaW1hX2NhbGNfYm9vdF9hZ2dyZWdhdGUoY2hhciAqZGlnZXN0KTsKK3ZvaWQgaW1hX2FkZF92aW9sYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpvcCwgY29uc3QgY2hhciAqY2F1c2UpOworCisvKgorICogdXNlZCB0byBwcm90ZWN0IGhfdGFibGUgYW5kIHNoYV90YWJsZQorICovCitleHRlcm4gc3BpbmxvY2tfdCBpbWFfcXVldWVfbG9jazsKKworc3RydWN0IGltYV9oX3RhYmxlIHsKKwlhdG9taWNfbG9uZ190IGxlbjsJLyogbnVtYmVyIG9mIHN0b3JlZCBtZWFzdXJlbWVudHMgaW4gdGhlIGxpc3QgKi8KKwlhdG9taWNfbG9uZ190IHZpb2xhdGlvbnM7CisJc3RydWN0IGhsaXN0X2hlYWQgcXVldWVbSU1BX01FQVNVUkVfSFRBQkxFX1NJWkVdOworfTsKK2V4dGVybiBzdHJ1Y3QgaW1hX2hfdGFibGUgaW1hX2h0YWJsZTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGltYV9oYXNoX2tleSh1OCAqZGlnZXN0KQoreworCXJldHVybiBoYXNoX2xvbmcoKmRpZ2VzdCwgSU1BX0hBU0hfQklUUyk7Cit9CisKKy8qIGlpbnQgY2FjaGUgZmxhZ3MgKi8KKyNkZWZpbmUgSU1BX01FQVNVUkVECQkxCisjZGVmaW5lIElNQV9JSU5UX0RVTVBfU1RBQ0sJNTEyCisKKy8qIGludGVncml0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZSAqLworc3RydWN0IGltYV9paW50X2NhY2hlIHsKKwl1NjQgdmVyc2lvbjsJCS8qIHRyYWNrIGlub2RlIGNoYW5nZXMgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOworCXN0cnVjdCBtdXRleCBtdXRleDsJLyogcHJvdGVjdHM6IHZlcnNpb24sIGZsYWdzLCBkaWdlc3QgKi8KKwlsb25nIHJlYWRjb3VudDsJCS8qIG1lYXN1cmVkIGZpbGVzIHJlYWRjb3VudCAqLworCWxvbmcgd3JpdGVjb3VudDsJLyogbWVhc3VyZWQgZmlsZXMgd3JpdGVjb3VudCAqLworCWxvbmcgb3BlbmNvdW50OwkJLyogb3BlbnMgcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IGtyZWYgcmVmY291bnQ7CS8qIGltYV9paW50X2NhY2hlIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCByY3VfaGVhZCByY3U7Cit9OworCisvKiBMSU0gQVBJIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCitpbnQgaW1hX211c3RfbWVhc3VyZShzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgaW50IG1hc2ssIGludCBmdW5jdGlvbik7CitpbnQgaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit2b2lkIGltYV9zdG9yZV9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpOworaW50IGltYV9zdG9yZV90ZW1wbGF0ZShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwgaW50IHZpb2xhdGlvbiwKKwkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpbWFfdGVtcGxhdGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmUsCisJCSAgICAgICBlbnVtIGltYV9zaG93X3R5cGUgc2hvdyk7CisKKy8qIHJhZGl4IHRyZWUgY2FsbHMgdG8gbG9va3VwLCBpbnNlcnQsIGRlbGV0ZQorICogaW50ZWdyaXR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlLgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2luc2VydChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9nZXQoc3RydWN0IGlub2RlICppbm9kZSk7CitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgaW1hX2lpbnRfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBpaW50X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwordm9pZCBpaW50X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTsKKworLyogSU1BIHBvbGljeSByZWxhdGVkIGZ1bmN0aW9ucyAqLworZW51bSBpbWFfaG9va3MgeyBQQVRIX0NIRUNLID0gMSwgRklMRV9NTUFQLCBCUFJNX0NIRUNLIH07CisKK2ludCBpbWFfbWF0Y2hfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKTsKK3ZvaWQgaW1hX2luaXRfcG9saWN5KHZvaWQpOwordm9pZCBpbWFfdXBkYXRlX3BvbGljeSh2b2lkKTsKK2ludCBpbWFfcGFyc2VfYWRkX3J1bGUoY2hhciAqKTsKK3ZvaWQgaW1hX2RlbGV0ZV9ydWxlcyh2b2lkKTsKKworLyogTFNNIGJhc2VkIHBvbGljeSBydWxlcyByZXF1aXJlIGF1ZGl0ICovCisjaWZkZWYgQ09ORklHX0lNQV9MU01fUlVMRVMKKworI2RlZmluZSBzZWN1cml0eV9maWx0ZXJfcnVsZV9pbml0IHNlY3VyaXR5X2F1ZGl0X3J1bGVfaW5pdAorI2RlZmluZSBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaCBzZWN1cml0eV9hdWRpdF9ydWxlX21hdGNoCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX2luaXQodTMyIGZpZWxkLCB1MzIgb3AsIGNoYXIgKnJ1bGVzdHIsCisJCQkJCSAgICB2b2lkICoqbHNtcnVsZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2godTMyIHNlY2lkLCB1MzIgZmllbGQsIHUzMiBvcCwKKwkJCQkJICAgICB2b2lkICpsc21ydWxlLAorCQkJCQkgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qIENPTkZJR19JTUFfTFNNX1JVTEVTICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNThiNgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2FwaS5jCisgKglJbXBsZW1lbnRzIG11c3RfbWVhc3VyZSwgY29sbGVjdF9tZWFzdXJlbWVudCwgc3RvcmVfbWVhc3VyZW1lbnQsCisgKglhbmQgc3RvcmVfdGVtcGxhdGUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImltYS5oIgorc3RhdGljIGNvbnN0IGNoYXIgKklNQV9URU1QTEFURV9OQU1FID0gImltYSI7CisKKy8qCisgKiBpbWFfc3RvcmVfdGVtcGxhdGUgLSBzdG9yZSBpbWEgdGVtcGxhdGUgbWVhc3VyZW1lbnRzCisgKgorICogQ2FsY3VsYXRlIHRoZSBoYXNoIG9mIGEgdGVtcGxhdGUgZW50cnksIGFkZCB0aGUgdGVtcGxhdGUgZW50cnkKKyAqIHRvIGFuIG9yZGVyZWQgbGlzdCBvZiBtZWFzdXJlbWVudCBlbnRyaWVzIG1haW50YWluZWQgaW5zaWRlIHRoZSBrZXJuZWwsCisgKiBhbmQgYWxzbyB1cGRhdGUgdGhlIGFnZ3JlZ2F0ZSBpbnRlZ3JpdHkgdmFsdWUgKG1haW50YWluZWQgaW5zaWRlIHRoZQorICogY29uZmlndXJlZCBUUE0gUENSKSBvdmVyIHRoZSBoYXNoZXMgb2YgdGhlIGN1cnJlbnQgbGlzdCBvZiBtZWFzdXJlbWVudAorICogZW50cmllcy4KKyAqCisgKiBBcHBsaWNhdGlvbnMgcmV0cmlldmUgdGhlIGN1cnJlbnQga2VybmVsLWhlbGQgbWVhc3VyZW1lbnQgbGlzdCB0aHJvdWdoCisgKiB0aGUgc2VjdXJpdHlmcyBlbnRyaWVzIGluIC9zeXMva2VybmVsL3NlY3VyaXR5L2ltYS4gVGhlIHNpZ25lZCBhZ2dyZWdhdGUKKyAqIFRQTSBQQ1IgKGNhbGxlZCBxdW90ZSkgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBhIFRQTSB1c2VyIHNwYWNlIGxpYnJhcnkKKyAqIGFuZCBpcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBtZWFzdXJlbWVudCBsaXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgaW1hX3N0b3JlX3RlbXBsYXRlKHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5LAorCQkgICAgICAgaW50IHZpb2xhdGlvbiwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJhZGRfdGVtcGxhdGVfbWVhc3VyZSI7CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiaGFzaGluZ19lcnJvciI7CisJaW50IHJlc3VsdDsKKworCW1lbXNldChlbnRyeS0+ZGlnZXN0LCAwLCBzaXplb2YoZW50cnktPmRpZ2VzdCkpOworCWVudHJ5LT50ZW1wbGF0ZV9uYW1lID0gSU1BX1RFTVBMQVRFX05BTUU7CisJZW50cnktPnRlbXBsYXRlX2xlbiA9IHNpemVvZihlbnRyeS0+dGVtcGxhdGUpOworCisJaWYgKCF2aW9sYXRpb24pIHsKKwkJcmVzdWx0ID0gaW1hX2NhbGNfdGVtcGxhdGVfaGFzaChlbnRyeS0+dGVtcGxhdGVfbGVuLAorCQkJCQkJJmVudHJ5LT50ZW1wbGF0ZSwKKwkJCQkJCWVudHJ5LT5kaWdlc3QpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwKKwkJCQkJICAgIGVudHJ5LT50ZW1wbGF0ZV9uYW1lLCBvcCwKKwkJCQkJICAgIGF1ZGl0X2NhdXNlLCByZXN1bHQsIDApOworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKwlyZXN1bHQgPSBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5KGVudHJ5LCB2aW9sYXRpb24sIG9wLCBpbm9kZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGltYV9hZGRfdmlvbGF0aW9uIC0gYWRkIHZpb2xhdGlvbiB0byBtZWFzdXJlbWVudCBsaXN0LgorICoKKyAqIFZpb2xhdGlvbnMgYXJlIGZsYWdnZWQgaW4gdGhlIG1lYXN1cmVtZW50IGxpc3Qgd2l0aCB6ZXJvIGhhc2ggdmFsdWVzLgorICogQnkgZXh0ZW5kaW5nIHRoZSBQQ1Igd2l0aCAweEZGJ3MgaW5zdGVhZCBvZiB3aXRoIHplcm9lcywgdGhlIFBDUgorICogdmFsdWUgaXMgaW52YWxpZGF0ZWQuCisgKi8KK3ZvaWQgaW1hX2FkZF92aW9sYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpvcCwgY29uc3QgY2hhciAqY2F1c2UpCit7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7CisJaW50IHZpb2xhdGlvbiA9IDE7CisJaW50IHJlc3VsdDsKKworCS8qIGNhbiBvdmVyZmxvdywgb25seSBpbmRpY2F0b3IgKi8KKwlhdG9taWNfbG9uZ19pbmMoJmltYV9odGFibGUudmlvbGF0aW9ucyk7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1zZXQoJmVudHJ5LT50ZW1wbGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSkpOworCXN0cm5jcHkoZW50cnktPnRlbXBsYXRlLmZpbGVfbmFtZSwgZmlsZW5hbWUsIElNQV9FVkVOVF9OQU1FX0xFTl9NQVgpOworCXJlc3VsdCA9IGltYV9zdG9yZV90ZW1wbGF0ZShlbnRyeSwgdmlvbGF0aW9uLCBpbm9kZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWtmcmVlKGVudHJ5KTsKK2Vycl9vdXQ6CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwgZmlsZW5hbWUsCisJCQkgICAgb3AsIGNhdXNlLCByZXN1bHQsIDApOworfQorCisvKioKKyAqIGltYV9tdXN0X21lYXN1cmUgLSBtZWFzdXJlIGRlY2lzaW9uIGJhc2VkIG9uIHBvbGljeS4KKyAqIEBpbm9kZTogcG9pbnRlciB0byBpbm9kZSB0byBtZWFzdXJlCisgKiBAbWFzazogY29udGFpbnMgdGhlIHBlcm1pc3Npb24gbWFzayAoTUFZX1JFQUQsIE1BWV9XUklURSwgTUFZX0VYRUNVVEUpCisgKiBAZnVuY3Rpb246IGNhbGxpbmcgZnVuY3Rpb24gKFBBVEhfQ0hFQ0ssIEJQUk1fQ0hFQ0ssIEZJTEVfTU1BUCkKKyAqCisgKiBUaGUgcG9saWN5IGlzIGRlZmluZWQgaW4gdGVybXMgb2Yga2V5cGFpcnM6CisgKiAJCXN1Ymo9LCBvYmo9LCB0eXBlPSwgZnVuYz0sIG1hc2s9LCBmc21hZ2ljPQorICoJc3ViaixvYmosIGFuZCB0eXBlOiBhcmUgTFNNIHNwZWNpZmljLgorICogCWZ1bmM6IFBBVEhfQ0hFQ0sgfCBCUFJNX0NIRUNLIHwgRklMRV9NTUFQCisgKiAJbWFzazogY29udGFpbnMgdGhlIHBlcm1pc3Npb24gbWFzaworICoJZnNtYWdpYzogaGV4IHZhbHVlCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpaW50LT5tdXRleCBoZWxkLgorICoKKyAqIFJldHVybiAwIHRvIG1lYXN1cmUuIFJldHVybiAxIGlmIGFscmVhZHkgbWVhc3VyZWQuCisgKiBGb3IgbWF0Y2hpbmcgYSBET05UX01FQVNVUkUgcG9saWN5LCBubyBwb2xpY3ksIG9yIG90aGVyCisgKiBlcnJvciwgcmV0dXJuIGFuIGVycm9yIGNvZGUuCisqLworaW50IGltYV9tdXN0X21lYXN1cmUoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pCit7CisJaW50IG11c3RfbWVhc3VyZTsKKworCWlmIChpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkKKwkJcmV0dXJuIDE7CisKKwltdXN0X21lYXN1cmUgPSBpbWFfbWF0Y2hfcG9saWN5KGlub2RlLCBmdW5jdGlvbiwgbWFzayk7CisJcmV0dXJuIG11c3RfbWVhc3VyZSA/IDAgOiAtRUFDQ0VTOworfQorCisvKgorICogaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQgLSBjb2xsZWN0IGZpbGUgbWVhc3VyZW1lbnQKKyAqCisgKiBDYWxjdWxhdGUgdGhlIGZpbGUgaGFzaCwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LAorICogc3RvcmluZyB0aGUgbWVhc3VyZW1lbnQgYW5kIGlfdmVyc2lvbiBpbiB0aGUgaWludC4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlpbnQtPm11dGV4IGhlbGQuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJlc3VsdCA9IC1FRVhJU1Q7CisKKwlpZiAoIShpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkpIHsKKwkJdTY0IGlfdmVyc2lvbiA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ZlcnNpb247CisKKwkJbWVtc2V0KGlpbnQtPmRpZ2VzdCwgMCwgSU1BX0RJR0VTVF9TSVpFKTsKKwkJcmVzdWx0ID0gaW1hX2NhbGNfaGFzaChmaWxlLCBpaW50LT5kaWdlc3QpOworCQlpZiAoIXJlc3VsdCkKKwkJCWlpbnQtPnZlcnNpb24gPSBpX3ZlcnNpb247CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpbWFfc3RvcmVfbWVhc3VyZW1lbnQgLSBzdG9yZSBmaWxlIG1lYXN1cmVtZW50CisgKgorICogQ3JlYXRlIGFuICJpbWEiIHRlbXBsYXRlIGFuZCB0aGVuIHN0b3JlIHRoZSB0ZW1wbGF0ZSBieSBjYWxsaW5nCisgKiBpbWFfc3RvcmVfdGVtcGxhdGUuCisgKgorICogV2Ugb25seSBnZXQgaGVyZSBpZiB0aGUgaW5vZGUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gbWVhc3VyZWQsCisgKiBidXQgdGhlIG1lYXN1cmVtZW50IGNvdWxkIGFscmVhZHkgZXhpc3Q6CisgKiAJLSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZmlsZSBvbiBlaXRoZXIgdGhlIHNhbWUgb3IKKyAqCSAgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorICoJLSB0aGUgaW5vZGUgd2FzIHByZXZpb3VzbHkgZmx1c2hlZCBhcyB3ZWxsIGFzIHRoZSBpaW50IGluZm8sCisgKgkgIGNvbnRhaW5pbmcgdGhlIGhhc2hpbmcgaW5mby4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlpbnQtPm11dGV4IGhlbGQuCisgKi8KK3ZvaWQgaW1hX3N0b3JlX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJhZGRfdGVtcGxhdGVfbWVhc3VyZSI7CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiRU5PTUVNIjsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7CisJaW50IHZpb2xhdGlvbiA9IDA7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwgZmlsZW5hbWUsCisJCQkJICAgIG9wLCBhdWRpdF9jYXVzZSwgcmVzdWx0LCAwKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoJmVudHJ5LT50ZW1wbGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT50ZW1wbGF0ZSkpOworCW1lbWNweShlbnRyeS0+dGVtcGxhdGUuZGlnZXN0LCBpaW50LT5kaWdlc3QsIElNQV9ESUdFU1RfU0laRSk7CisJc3RybmNweShlbnRyeS0+dGVtcGxhdGUuZmlsZV9uYW1lLCBmaWxlbmFtZSwgSU1BX0VWRU5UX05BTUVfTEVOX01BWCk7CisKKwlyZXN1bHQgPSBpbWFfc3RvcmVfdGVtcGxhdGUoZW50cnksIHZpb2xhdGlvbiwgaW5vZGUpOworCWlmICghcmVzdWx0KQorCQlpaW50LT5mbGFncyB8PSBJTUFfTUVBU1VSRUQ7CisJZWxzZQorCQlrZnJlZShlbnRyeSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hdWRpdC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA4MmJiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXVkaXQuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGludGVncml0eV9hdWRpdC5jCisgKiAJQXVkaXQgY2FsbHMgZm9yIHRoZSBpbnRlZ3JpdHkgc3Vic3lzdGVtCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworc3RhdGljIGludCBpbWFfYXVkaXQ7CisKKyNpZmRlZiBDT05GSUdfSU1BX0FVRElUCisKKy8qIGltYV9hdWRpdF9zZXR1cCAtIGVuYWJsZSBpbmZvcm1hdGlvbmFsIGF1ZGl0aW5nIG1lc3NhZ2VzICovCitzdGF0aWMgaW50IF9faW5pdCBpbWFfYXVkaXRfc2V0dXAoY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgYXVkaXQ7CisJaW50IHJjLCByZXN1bHQgPSAwOworCWNoYXIgKm9wID0gImltYV9hdWRpdCI7CisJY2hhciAqY2F1c2U7CisKKwlyYyA9IHN0cmljdF9zdHJ0b3VsKHN0ciwgMCwgJmF1ZGl0KTsKKwlpZiAocmMgfHwgYXVkaXQgPiAxKQorCQlyZXN1bHQgPSAxOworCWVsc2UKKwkJaW1hX2F1ZGl0ID0gYXVkaXQ7CisJY2F1c2UgPSBpbWFfYXVkaXQgPyAiZW5hYmxlZCIgOiAibm90X2VuYWJsZWQiOworCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwgTlVMTCwKKwkJCSAgICBvcCwgY2F1c2UsIHJlc3VsdCwgMCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJpbWFfYXVkaXQ9IiwgaW1hX2F1ZGl0X3NldHVwKTsKKyNlbmRpZgorCit2b2lkIGludGVncml0eV9hdWRpdF9tc2coaW50IGF1ZGl0X21zZ25vLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpvcCwKKwkJCSBjb25zdCBjaGFyICpjYXVzZSwgaW50IHJlc3VsdCwgaW50IGF1ZGl0X2luZm8pCit7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisKKwlpZiAoIWltYV9hdWRpdCAmJiBhdWRpdF9pbmZvID09IDEpIC8qIFNraXAgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLworCQlyZXR1cm47CisKKwlhYiA9IGF1ZGl0X2xvZ19zdGFydChjdXJyZW50LT5hdWRpdF9jb250ZXh0LCBHRlBfS0VSTkVMLCBhdWRpdF9tc2dubyk7CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImludGVncml0eTogcGlkPSVkIHVpZD0ldSBhdWlkPSV1IHNlcz0ldSIsCisJCQkgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jcmVkLT51aWQsCisJCQkgYXVkaXRfZ2V0X2xvZ2ludWlkKGN1cnJlbnQpLAorCQkJIGF1ZGl0X2dldF9zZXNzaW9uaWQoY3VycmVudCkpOworCWF1ZGl0X2xvZ190YXNrX2NvbnRleHQoYWIpOworCXN3aXRjaCAoYXVkaXRfbXNnbm8pIHsKKwljYXNlIEFVRElUX0lOVEVHUklUWV9EQVRBOgorCWNhc2UgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBOgorCWNhc2UgQVVESVRfSU5URUdSSVRZX1BDUjoKKwljYXNlIEFVRElUX0lOVEVHUklUWV9TVEFUVVM6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMgY2F1c2U9JXMiLCBvcCwgY2F1c2UpOworCQlicmVhazsKKwljYXNlIEFVRElUX0lOVEVHUklUWV9IQVNIOgorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wPSVzIGhhc2g9JXMiLCBvcCwgY2F1c2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wPSVzIiwgb3ApOworCX0KKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGNvbW09Iik7CisJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgY3VycmVudC0+Y29tbSk7CisJaWYgKGZuYW1lKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0iKTsKKwkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgZm5hbWUpOworCX0KKwlpZiAoaW5vZGUpCisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZGV2PSVzIGlubz0lbHUiLAorCQkJCSBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHJlcz0lZCIsICFyZXN1bHQgPyAwIDogMSk7CisJYXVkaXRfbG9nX2VuZChhYik7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9jcnlwdG8uYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDU3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9jcnlwdG8uYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfY3J5cHRvLmMKKyAqIAlDYWxjdWxhdGVzIG1kNS9zaGExIGZpbGUgaGFzaCwgdGVtcGxhdGUgaGFzaCwgYm9vdC1hZ2dyZWF0ZSBoYXNoCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgImltYS5oIgorCitzdGF0aWMgaW50IGluaXRfZGVzYyhzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjKQoreworCWludCByYzsKKworCWRlc2MtPnRmbSA9IGNyeXB0b19hbGxvY19oYXNoKGltYV9oYXNoLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKGRlc2MtPnRmbSkpIHsKKwkJcHJfaW5mbygiZmFpbGVkIHRvIGxvYWQgJXMgdHJhbnNmb3JtOiAlbGRcbiIsCisJCQlpbWFfaGFzaCwgUFRSX0VSUihkZXNjLT50Zm0pKTsKKwkJcmMgPSBQVFJfRVJSKGRlc2MtPnRmbSk7CisJCXJldHVybiByYzsKKwl9CisJZGVzYy0+ZmxhZ3MgPSAwOworCXJjID0gY3J5cHRvX2hhc2hfaW5pdChkZXNjKTsKKwlpZiAocmMpCisJCWNyeXB0b19mcmVlX2hhc2goZGVzYy0+dGZtKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIE1ENS9TSEExIGZpbGUgZGlnZXN0CisgKi8KK2ludCBpbWFfY2FsY19oYXNoKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpkaWdlc3QpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlsb2ZmX3QgaV9zaXplOworCWNoYXIgKnJidWY7CisJaW50IHJjLCBvZmZzZXQgPSAwOworCisJcmMgPSBpbml0X2Rlc2MoJmRlc2MpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlyYnVmID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghcmJ1ZikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpX3NpemUgPSBpX3NpemVfcmVhZChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJd2hpbGUgKG9mZnNldCA8IGlfc2l6ZSkgeworCQlpbnQgcmJ1Zl9sZW47CisKKwkJcmJ1Zl9sZW4gPSBrZXJuZWxfcmVhZChmaWxlLCBvZmZzZXQsIHJidWYsIFBBR0VfU0laRSk7CisJCWlmIChyYnVmX2xlbiA8IDApIHsKKwkJCXJjID0gcmJ1Zl9sZW47CisJCQlicmVhazsKKwkJfQorCQlvZmZzZXQgKz0gcmJ1Zl9sZW47CisJCXNnX2luaXRfb25lKHNnLCByYnVmLCByYnVmX2xlbik7CisKKwkJcmMgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsIHNnLCByYnVmX2xlbik7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKwlrZnJlZShyYnVmKTsKKwlpZiAoIXJjKQorCQlyYyA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOworb3V0OgorCWNyeXB0b19mcmVlX2hhc2goZGVzYy50Zm0pOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgaGFzaCBvZiBhIGdpdmVuIHRlbXBsYXRlCisgKi8KK2ludCBpbWFfY2FsY190ZW1wbGF0ZV9oYXNoKGludCB0ZW1wbGF0ZV9sZW4sIHZvaWQgKnRlbXBsYXRlLCBjaGFyICpkaWdlc3QpCit7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlpbnQgcmM7CisKKwlyYyA9IGluaXRfZGVzYygmZGVzYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXNnX2luaXRfb25lKHNnLCB0ZW1wbGF0ZSwgdGVtcGxhdGVfbGVuKTsKKwlyYyA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgc2csIHRlbXBsYXRlX2xlbik7CisJaWYgKCFyYykKKwkJcmMgPSBjcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZGlnZXN0KTsKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGltYV9wY3JyZWFkKGludCBpZHgsIHU4ICpwY3IpCit7CisJaWYgKCFpbWFfdXNlZF9jaGlwKQorCQlyZXR1cm47CisKKwlpZiAodHBtX3Bjcl9yZWFkKFRQTV9BTllfTlVNLCBpZHgsIHBjcikgIT0gMCkKKwkJcHJfZXJyKCJFcnJvciBDb21tdW5pY2F0aW5nIHRvIFRQTSBjaGlwXG4iKTsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgYm9vdCBhZ2dyZWdhdGUgaGFzaAorICovCitpbnQgaW1hX2NhbGNfYm9vdF9hZ2dyZWdhdGUoY2hhciAqZGlnZXN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJdTggcGNyX2lbSU1BX0RJR0VTVF9TSVpFXTsKKwlpbnQgcmMsIGk7CisKKwlyYyA9IGluaXRfZGVzYygmZGVzYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCS8qIGN1bXVsYXRpdmUgc2hhMSBvdmVyIHRwbSByZWdpc3RlcnMgMC03ICovCisJZm9yIChpID0gVFBNX1BDUjA7IGkgPCBUUE1fUENSODsgaSsrKSB7CisJCWltYV9wY3JyZWFkKGksIHBjcl9pKTsKKwkJLyogbm93IGFjY3VtdWxhdGUgd2l0aCBjdXJyZW50IGFnZ3JlZ2F0ZSAqLworCQlzZ19pbml0X29uZSgmc2csIHBjcl9pLCBJTUFfRElHRVNUX1NJWkUpOworCQlyYyA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgJnNnLCBJTUFfRElHRVNUX1NJWkUpOworCX0KKwlpZiAoIXJjKQorCQljcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZGlnZXN0KTsKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmJlMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHVzLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfZnMuYworICoJaW1wbGVtZW5lbnRzIHNlY3VyaXR5IGZpbGUgc3lzdGVtIGZvciByZXBvcnRpbmcKKyAqCWN1cnJlbnQgbWVhc3VyZW1lbnQgbGlzdCBhbmQgSU1BIHN0YXRpc3RpY3MKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKKworc3RhdGljIGludCB2YWxpZF9wb2xpY3kgPSAxOworI2RlZmluZSBUTVBCVUZMRU4gMTIKK3N0YXRpYyBzc2l6ZV90IGltYV9zaG93X2h0YWJsZV92YWx1ZShjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkJICAgICBsb2ZmX3QgKnBwb3MsIGF0b21pY19sb25nX3QgKnZhbCkKK3sKKwljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOworCXNzaXplX3QgbGVuOworCisJbGVuID0gc2NucHJpbnRmKHRtcGJ1ZiwgVE1QQlVGTEVOLCAiJWxpXG4iLCBhdG9taWNfbG9uZ19yZWFkKHZhbCkpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCB0bXBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGltYV9zaG93X2h0YWJsZV92aW9sYXRpb25zKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKKwkucmVhZCA9IGltYV9zaG93X2h0YWJsZV92aW9sYXRpb25zCit9OworCitzdGF0aWMgc3NpemVfdCBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCSAgIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBpbWFfc2hvd19odGFibGVfdmFsdWUoYnVmLCBjb3VudCwgcHBvcywgJmltYV9odGFibGUubGVuKTsKKworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZW1lbnRzX2NvdW50X29wcyA9IHsKKwkucmVhZCA9IGltYV9zaG93X21lYXN1cmVtZW50c19jb3VudAorfTsKKworLyogcmV0dXJucyBwb2ludGVyIHRvIGhsaXN0X25vZGUgKi8KK3N0YXRpYyB2b2lkICppbWFfbWVhc3VyZW1lbnRzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJbG9mZl90IGwgPSAqcG9zOworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlOworCisJLyogd2UgbmVlZCBhIGxvY2sgc2luY2UgcG9zIGNvdWxkIHBvaW50IGJleW9uZCBsYXN0IGVsZW1lbnQgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocWUsICZpbWFfbWVhc3VyZW1lbnRzLCBsYXRlcikgeworCQlpZiAoIWwtLSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gcWU7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICppbWFfbWVhc3VyZW1lbnRzX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSA9IHY7CisKKwkvKiBsb2NrIHByb3RlY3RzIHdoZW4gcmVhZGluZyBiZXlvbmQgbGFzdCBlbGVtZW50CisJICogYWdhaW5zdCBjb25jdXJyZW50IGxpc3QtZXh0ZW5zaW9uCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCXFlID0gbGlzdF9lbnRyeShyY3VfZGVyZWZlcmVuY2UocWUtPmxhdGVyLm5leHQpLAorCQkJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSwgbGF0ZXIpOworCXJjdV9yZWFkX3VubG9jaygpOworCSgqcG9zKSsrOworCisJcmV0dXJuICgmcWUtPmxhdGVyID09ICZpbWFfbWVhc3VyZW1lbnRzKSA/IE5VTEwgOiBxZTsKK30KKworc3RhdGljIHZvaWQgaW1hX21lYXN1cmVtZW50c19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIHZvaWQgaW1hX3B1dGMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbikKK3sKKwl3aGlsZSAoZGF0YWxlbi0tKQorCQlzZXFfcHV0YyhtLCAqKGNoYXIgKilkYXRhKyspOworfQorCisvKiBwcmludCBmb3JtYXQ6CisgKiAgICAgICAzMmJpdC1sZT1wY3IjCisgKiAgICAgICBjaGFyWzIwXT10ZW1wbGF0ZSBkaWdlc3QKKyAqICAgICAgIDMyYml0LWxlPXRlbXBsYXRlIG5hbWUgc2l6ZQorICogICAgICAgY2hhcltuXT10ZW1wbGF0ZSBuYW1lCisgKiAgICAgICBldmVudGRhdGFbbl09dGVtcGxhdGUgc3BlY2lmaWMgZGF0YQorICovCitzdGF0aWMgaW50IGltYV9tZWFzdXJlbWVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJLyogdGhlIGxpc3QgbmV2ZXIgc2hyaW5rcywgc28gd2UgZG9uJ3QgbmVlZCBhIGxvY2sgaGVyZSAqLworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlID0gdjsKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplOworCWludCBuYW1lbGVuOworCXUzMiBwY3IgPSBDT05GSUdfSU1BX01FQVNVUkVfUENSX0lEWDsKKworCS8qIGdldCBlbnRyeSAqLworCWUgPSBxZS0+ZW50cnk7CisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiAxc3Q6IFBDUkluZGV4CisJICogUENSIHVzZWQgaXMgYWx3YXlzIHRoZSBzYW1lIChjb25maWcgb3B0aW9uKSBpbgorCSAqIGxpdHRsZS1lbmRpYW4gZm9ybWF0CisJICovCisJaW1hX3B1dGMobSwgJnBjciwgc2l6ZW9mIHBjcik7CisKKwkvKiAybmQ6IHRlbXBsYXRlIGRpZ2VzdCAqLworCWltYV9wdXRjKG0sIGUtPmRpZ2VzdCwgSU1BX0RJR0VTVF9TSVpFKTsKKworCS8qIDNyZDogdGVtcGxhdGUgbmFtZSBzaXplICovCisJbmFtZWxlbiA9IHN0cmxlbihlLT50ZW1wbGF0ZV9uYW1lKTsKKwlpbWFfcHV0YyhtLCAmbmFtZWxlbiwgc2l6ZW9mIG5hbWVsZW4pOworCisJLyogNHRoOiAgdGVtcGxhdGUgbmFtZSAqLworCWltYV9wdXRjKG0sICh2b2lkICopZS0+dGVtcGxhdGVfbmFtZSwgbmFtZWxlbik7CisKKwkvKiA1dGg6ICB0ZW1wbGF0ZSBzcGVjaWZpYyBkYXRhICovCisJaW1hX3RlbXBsYXRlX3Nob3cobSwgKHN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSAqKSZlLT50ZW1wbGF0ZSwKKwkJCSAgSU1BX1NIT1dfQklOQVJZKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbWFfbWVhc3VybWVudHNfc2Vxb3BzID0geworCS5zdGFydCA9IGltYV9tZWFzdXJlbWVudHNfc3RhcnQsCisJLm5leHQgPSBpbWFfbWVhc3VyZW1lbnRzX25leHQsCisJLnN0b3AgPSBpbWFfbWVhc3VyZW1lbnRzX3N0b3AsCisJLnNob3cgPSBpbWFfbWVhc3VyZW1lbnRzX3Nob3cKK307CisKK3N0YXRpYyBpbnQgaW1hX21lYXN1cmVtZW50c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX21lYXN1cm1lbnRzX3NlcW9wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0geworCS5vcGVuID0gaW1hX21lYXN1cmVtZW50c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgaW1hX3ByaW50X2RpZ2VzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHU4ICpkaWdlc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSU1BX0RJR0VTVF9TSVpFOyBpKyspCisJCXNlcV9wcmludGYobSwgIiUwMngiLCAqKGRpZ2VzdCArIGkpKTsKK30KKwordm9pZCBpbWFfdGVtcGxhdGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmUsIGVudW0gaW1hX3Nob3dfdHlwZSBzaG93KQoreworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSAqZW50cnkgPSBlOworCWludCBuYW1lbGVuOworCisJc3dpdGNoIChzaG93KSB7CisJY2FzZSBJTUFfU0hPV19BU0NJSToKKwkJaW1hX3ByaW50X2RpZ2VzdChtLCBlbnRyeS0+ZGlnZXN0KTsKKwkJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBlbnRyeS0+ZmlsZV9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBJTUFfU0hPV19CSU5BUlk6CisJCWltYV9wdXRjKG0sIGVudHJ5LT5kaWdlc3QsIElNQV9ESUdFU1RfU0laRSk7CisKKwkJbmFtZWxlbiA9IHN0cmxlbihlbnRyeS0+ZmlsZV9uYW1lKTsKKwkJaW1hX3B1dGMobSwgJm5hbWVsZW4sIHNpemVvZiBuYW1lbGVuKTsKKwkJaW1hX3B1dGMobSwgZW50cnktPmZpbGVfbmFtZSwgbmFtZWxlbik7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBwcmludCBpbiBhc2NpaSAqLworc3RhdGljIGludCBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCS8qIHRoZSBsaXN0IG5ldmVyIHNocmlua3MsIHNvIHdlIGRvbid0IG5lZWQgYSBsb2NrIGhlcmUgKi8KKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSA9IHY7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZTsKKworCS8qIGdldCBlbnRyeSAqLworCWUgPSBxZS0+ZW50cnk7CisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJLyogMXN0OiBQQ1IgdXNlZCAoY29uZmlnIG9wdGlvbikgKi8KKwlzZXFfcHJpbnRmKG0sICIlMmQgIiwgQ09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFgpOworCisJLyogMm5kOiBTSEExIHRlbXBsYXRlIGhhc2ggKi8KKwlpbWFfcHJpbnRfZGlnZXN0KG0sIGUtPmRpZ2VzdCk7CisKKwkvKiAzdGg6ICB0ZW1wbGF0ZSBuYW1lICovCisJc2VxX3ByaW50ZihtLCAiICVzICIsIGUtPnRlbXBsYXRlX25hbWUpOworCisJLyogNHRoOiAgdGVtcGxhdGUgc3BlY2lmaWMgZGF0YSAqLworCWltYV90ZW1wbGF0ZV9zaG93KG0sIChzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgKikmZS0+dGVtcGxhdGUsCisJCQkgIElNQV9TSE9XX0FTQ0lJKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyA9IHsKKwkuc3RhcnQgPSBpbWFfbWVhc3VyZW1lbnRzX3N0YXJ0LAorCS5uZXh0ID0gaW1hX21lYXN1cmVtZW50c19uZXh0LAorCS5zdG9wID0gaW1hX21lYXN1cmVtZW50c19zdG9wLAorCS5zaG93ID0gaW1hX2FzY2lpX21lYXN1cmVtZW50c19zaG93Cit9OworCitzdGF0aWMgaW50IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2Vxb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMgPSB7CisJLm9wZW4gPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3NpemVfdCBpbWFfd3JpdGVfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBkYXRhbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqZGF0YTsKKwlpbnQgcmM7CisKKwlpZiAoZGF0YWxlbiA+PSBQQUdFX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCWlmICgqcHBvcyAhPSAwKSB7CisJCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGF0YSA9IGttYWxsb2MoZGF0YWxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgYnVmLCBkYXRhbGVuKSkgeworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCSooZGF0YSArIGRhdGFsZW4pID0gJ1wwJzsKKwlyYyA9IGltYV9wYXJzZV9hZGRfcnVsZShkYXRhKTsKKwlpZiAocmMgPCAwKSB7CisJCWRhdGFsZW4gPSAtRUlOVkFMOworCQl2YWxpZF9wb2xpY3kgPSAwOworCX0KKworCWtmcmVlKGRhdGEpOworCXJldHVybiBkYXRhbGVuOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaW1hX2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcnVudGltZV9tZWFzdXJlbWVudHNfY291bnQ7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmlvbGF0aW9uczsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppbWFfcG9saWN5OworCitzdGF0aWMgYXRvbWljX3QgcG9saWN5X29wZW5jb3VudCA9IEFUT01JQ19JTklUKDEpOworLyoKKyAqIGltYV9vcGVuX3BvbGljeTogc2VxdWVudGlhbGl6ZSBhY2Nlc3MgdG8gdGhlIHBvbGljeSBmaWxlCisgKi8KK2ludCBpbWFfb3Blbl9wb2xpY3koc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcG9saWN5X29wZW5jb3VudCkpCisJCXJldHVybiAwOworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKiBpbWFfcmVsZWFzZV9wb2xpY3kgLSBzdGFydCB1c2luZyB0aGUgbmV3IG1lYXN1cmUgcG9saWN5IHJ1bGVzLgorICoKKyAqIEluaXRpYWxseSwgaW1hX21lYXN1cmUgcG9pbnRzIHRvIHRoZSBkZWZhdWx0IHBvbGljeSBydWxlcywgbm93CisgKiBwb2ludCB0byB0aGUgbmV3IHBvbGljeSBydWxlcywgYW5kIHJlbW92ZSB0aGUgc2VjdXJpdHlmcyBwb2xpY3kgZmlsZSwKKyAqIGFzc3VtaW5nIGEgdmFsaWQgcG9saWN5LgorICovCitzdGF0aWMgaW50IGltYV9yZWxlYXNlX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoIXZhbGlkX3BvbGljeSkgeworCQlpbWFfZGVsZXRlX3J1bGVzKCk7CisJCXZhbGlkX3BvbGljeSA9IDE7CisJCWF0b21pY19zZXQoJnBvbGljeV9vcGVuY291bnQsIDEpOworCQlyZXR1cm4gMDsKKwl9CisJaW1hX3VwZGF0ZV9wb2xpY3koKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfcG9saWN5KTsKKwlpbWFfcG9saWN5ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVfcG9saWN5X29wcyA9IHsKKwkub3BlbiA9IGltYV9vcGVuX3BvbGljeSwKKwkud3JpdGUgPSBpbWFfd3JpdGVfcG9saWN5LAorCS5yZWxlYXNlID0gaW1hX3JlbGVhc2VfcG9saWN5Cit9OworCitpbnQgaW1hX2ZzX2luaXQodm9pZCkKK3sKKwlpbWFfZGlyID0gc2VjdXJpdHlmc19jcmVhdGVfZGlyKCJpbWEiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGltYV9kaXIpKQorCQlyZXR1cm4gLTE7CisKKwliaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMiLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lSR1JQLCBpbWFfZGlyLCBOVUxMLAorCQkJCSAgICZpbWFfbWVhc3VyZW1lbnRzX29wcyk7CisJaWYgKElTX0VSUihiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMpKQorCQlnb3RvIG91dDsKKworCWFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgiYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMiLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lSR1JQLCBpbWFfZGlyLCBOVUxMLAorCQkJCSAgICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wcyk7CisJaWYgKElTX0VSUihhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cykpCisJCWdvdG8gb3V0OworCisJcnVudGltZV9tZWFzdXJlbWVudHNfY291bnQgPQorCSAgICBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJydW50aW1lX21lYXN1cmVtZW50c19jb3VudCIsCisJCQkJICAgU19JUlVTUiB8IFNfSVJHUlAsIGltYV9kaXIsIE5VTEwsCisJCQkJICAgJmltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzKTsKKwlpZiAoSVNfRVJSKHJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50KSkKKwkJZ290byBvdXQ7CisKKwl2aW9sYXRpb25zID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgidmlvbGF0aW9ucyIsIFNfSVJVU1IgfCBTX0lSR1JQLAorCQkJCSAgIGltYV9kaXIsIE5VTEwsICZpbWFfaHRhYmxlX3Zpb2xhdGlvbnNfb3BzKTsKKwlpZiAoSVNfRVJSKHZpb2xhdGlvbnMpKQorCQlnb3RvIG91dDsKKworCWltYV9wb2xpY3kgPSBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKCJwb2xpY3kiLAorCQkJCQkgICAgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lXVVNSLAorCQkJCQkgICAgaW1hX2RpciwgTlVMTCwKKwkJCQkJICAgICZpbWFfbWVhc3VyZV9wb2xpY3lfb3BzKTsKKwlpZiAoSVNfRVJSKGltYV9wb2xpY3kpKQorCQlnb3RvIG91dDsKKworCXJldHVybiAwOworb3V0OgorCXNlY3VyaXR5ZnNfcmVtb3ZlKHJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50KTsKKwlzZWN1cml0eWZzX3JlbW92ZShhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfZGlyKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfcG9saWN5KTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19leGl0IGltYV9mc19jbGVhbnVwKHZvaWQpCit7CisJc2VjdXJpdHlmc19yZW1vdmUodmlvbGF0aW9ucyk7CisJc2VjdXJpdHlmc19yZW1vdmUocnVudGltZV9tZWFzdXJlbWVudHNfY291bnQpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShiaW5hcnlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9kaXIpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGltYV9wb2xpY3kpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzlmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9paW50LmMKKyAqIAktIGltcGxlbWVudHMgdGhlIElNQSBob29rczogaW1hX2lub2RlX2FsbG9jLCBpbWFfaW5vZGVfZnJlZQorICoJLSBjYWNoZSBpbnRlZ3JpdHkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKgkgIHVzaW5nIGEgcmFkaXggdHJlZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgorI2luY2x1ZGUgImltYS5oIgorCisjZGVmaW5lIGltYV9paW50X2RlbGV0ZSBpbWFfaW5vZGVfZnJlZQorCitSQURJWF9UUkVFKGltYV9paW50X3N0b3JlLCBHRlBfQVRPTUlDKTsKK0RFRklORV9TUElOTE9DSyhpbWFfaWludF9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppaW50X2NhY2hlIF9fcmVhZF9tb3N0bHk7CisKKy8qIGltYV9paW50X2ZpbmRfZ2V0IC0gcmV0dXJuIHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICoKKyAqIGltYV9paW50X2ZpbmRfZ2V0IGdldHMgYSByZWZlcmVuY2UgdG8gdGhlIGlpbnQuIENhbGxlciBtdXN0CisgKiByZW1lbWJlciB0byBwdXQgdGhlIGlpbnQgcmVmZXJlbmNlLgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJcmN1X3JlYWRfbG9jaygpOworCWlpbnQgPSByYWRpeF90cmVlX2xvb2t1cCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlKTsKKwlpZiAoIWlpbnQpCisJCWdvdG8gb3V0OworCWtyZWZfZ2V0KCZpaW50LT5yZWZjb3VudCk7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGlpbnQ7Cit9CisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZQorICogZnJvbSB0aGUgaWludF9jYWNoZSBzbGFiLCBpbml0aWFsaXplIHRoZSBpaW50LCBhbmQKKyAqIGluc2VydCBpdCBpbnRvIHRoZSByYWRpeCB0cmVlLgorICoKKyAqIE9uIHN1Y2Nlc3MgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaWludDsgb24gZmFpbHVyZSByZXR1cm4gTlVMTC4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBOVUxMOworCWludCByYyA9IDA7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIGlpbnQ7CisJaWludCA9IGttZW1fY2FjaGVfYWxsb2MoaWludF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gaWludDsKKworCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlyYyA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUsIGlpbnQpOworCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKK291dDoKKwlpZiAocmMgPCAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKKwkJaWYgKHJjID09IC1FRVhJU1QpIHsKKwkJCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CisJCQlpaW50ID0gcmFkaXhfdHJlZV9sb29rdXAoJmltYV9paW50X3N0b3JlLAorCQkJCQkJICh1bnNpZ25lZCBsb25nKWlub2RlKTsKKwkJCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKKwkJfSBlbHNlCisJCQlpaW50ID0gTlVMTDsKKwl9CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCXJldHVybiBpaW50OworfQorCisvKioKKyAqIGltYV9pbm9kZV9hbGxvYyAtIGFsbG9jYXRlIGFuIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gdGhlIGlub2RlCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgMSBvbiBmYWlsdXJlLgorICovCitpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJaWludCA9IGltYV9paW50X2luc2VydChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyogaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0IC0gZ2V0IHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICoKKyAqIE1vc3QgaW5zZXJ0aW9ucyBhcmUgZG9uZSBhdCBpbm9kZV9hbGxvYywgZXhjZXB0IHRob3NlIGFsbG9jYXRlZAorICogYmVmb3JlIGxhdGVfaW5pdGNhbGwuIFdoZW4gdGhlIGlpbnQgZG9lcyBub3QgZXhpc3QsIGFsbG9jYXRlIGl0LAorICogaW5pdGlhbGl6ZSBhbmQgaW5zZXJ0IGl0LCBhbmQgaW5jcmVtZW50IHRoZSBpaW50IHJlZmNvdW50LgorICoKKyAqIChDYW4ndCBpbml0aWFsaXplIGF0IHNlY3VyaXR5X2luaXRjYWxsIGJlZm9yZSBhbnkgaW5vZGVzIGFyZQorICogYWxsb2NhdGVkLCBnb3QgdG8gd2FpdCBhdCBsZWFzdCB1bnRpbCBwcm9jX2luaXQuKQorICoKKyAqICBSZXR1cm4gdGhlIGlpbnQuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gTlVMTDsKKworCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7CisJaWYgKGlpbnQpCisJCXJldHVybiBpaW50OworCisJaWludCA9IGltYV9paW50X2luc2VydChpbm9kZSk7CisJaWYgKGlpbnQpCisJCWtyZWZfZ2V0KCZpaW50LT5yZWZjb3VudCk7CisKKwlyZXR1cm4gaWludDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldCk7CisKKy8qIGlpbnRfZnJlZSAtIGNhbGxlZCB3aGVuIHRoZSBpaW50IHJlZmNvdW50IGdvZXMgdG8gemVybyAqLwordm9pZCBpaW50X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBpbWFfaWludF9jYWNoZSwKKwkJCQkJCSAgIHJlZmNvdW50KTsKKwlpaW50LT52ZXJzaW9uID0gMDsKKwlpaW50LT5mbGFncyA9IDBVTDsKKwlpZiAoaWludC0+cmVhZGNvdW50ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYWRjb3VudDogJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBpaW50LT5yZWFkY291bnQpOworCQlpaW50LT5yZWFkY291bnQgPSAwOworCX0KKwlpZiAoaWludC0+d3JpdGVjb3VudCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3cml0ZWNvdW50OiAlbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGlpbnQtPndyaXRlY291bnQpOworCQlpaW50LT53cml0ZWNvdW50ID0gMDsKKwl9CisJaWYgKGlpbnQtPm9wZW5jb3VudCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBvcGVuY291bnQ6ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgaWludC0+b3BlbmNvdW50KTsKKwkJaWludC0+b3BlbmNvdW50ID0gMDsKKwl9CisJa3JlZl9zZXQoJmlpbnQtPnJlZmNvdW50LCAxKTsKKwlrbWVtX2NhY2hlX2ZyZWUoaWludF9jYWNoZSwgaWludCk7Cit9CisKK3ZvaWQgaWludF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwKKwkJCQkJCSAgIHN0cnVjdCBpbWFfaWludF9jYWNoZSwgcmN1KTsKKwlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7Cit9CisKKy8qKgorICogaW1hX2lpbnRfZGVsZXRlIC0gY2FsbGVkIG9uIGludGVncml0eV9pbm9kZV9mcmVlCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gdGhlIGlub2RlCisgKgorICogRnJlZSB0aGUgaW50ZWdyaXR5IGluZm9ybWF0aW9uKGlpbnQpIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4KKyAqLwordm9pZCBpbWFfaWludF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CisJaWludCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOworCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlpZiAoaWludCkKKwkJY2FsbF9yY3UoJmlpbnQtPnJjdSwgaWludF9yY3VfZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gZm9vOworCisJbWVtc2V0KGlpbnQsIDAsIHNpemVvZiAqaWludCk7CisJaWludC0+dmVyc2lvbiA9IDA7CisJaWludC0+ZmxhZ3MgPSAwVUw7CisJbXV0ZXhfaW5pdCgmaWludC0+bXV0ZXgpOworCWlpbnQtPnJlYWRjb3VudCA9IDA7CisJaWludC0+d3JpdGVjb3VudCA9IDA7CisJaWludC0+b3BlbmNvdW50ID0gMDsKKwlrcmVmX3NldCgmaWludC0+cmVmY291bnQsIDEpOworfQorCit2b2lkIGltYV9paW50Y2FjaGVfaW5pdCh2b2lkKQoreworCWlpbnRfY2FjaGUgPQorCSAgICBrbWVtX2NhY2hlX2NyZWF0ZSgiaWludF9jYWNoZSIsIHNpemVvZihzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUpLCAwLAorCQkJICAgICAgU0xBQl9QQU5JQywgaW5pdF9vbmNlKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2luaXQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBiYjhjCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaW5pdC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFJlaW5lciBTYWlsZXIgICAgICA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogTGVlbmRlcnQgdmFuIERvb3JuIDxsZWVuZGVydEB3YXRzb24uaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgICAgICAgICA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2luaXQuYworICogICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgImltYS5oIgorCisvKiBuYW1lIGZvciBib290IGFnZ3JlZ2F0ZSBlbnRyeSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmJvb3RfYWdncmVnYXRlX25hbWUgPSAiYm9vdF9hZ2dyZWdhdGUiOworaW50IGltYV91c2VkX2NoaXA7CisKKy8qIEFkZCB0aGUgYm9vdCBhZ2dyZWdhdGUgdG8gdGhlIElNQSBtZWFzdXJlbWVudCBsaXN0IGFuZCBleHRlbmQKKyAqIHRoZSBQQ1IgcmVnaXN0ZXIuCisgKgorICogQ2FsY3VsYXRlIHRoZSBib290IGFnZ3JlZ2F0ZSwgYSBTSEExIG92ZXIgdHBtIHJlZ2lzdGVycyAwLTcsCisgKiBhc3N1bWluZyBhIFRQTSBjaGlwIGV4aXN0cywgYW5kIHplcm9lcyBpZiB0aGUgVFBNIGNoaXAgZG9lcyBub3QKKyAqIGV4aXN0LiAgQWRkIHRoZSBib290IGFnZ3JlZ2F0ZSBtZWFzdXJlbWVudCB0byB0aGUgbWVhc3VyZW1lbnQKKyAqIGxpc3QgYW5kIGV4dGVuZCB0aGUgUENSIHJlZ2lzdGVyLgorICoKKyAqIElmIGEgdHBtIGNoaXAgZG9lcyBub3QgZXhpc3QsIGluZGljYXRlIHRoZSBjb3JlIHJvb3Qgb2YgdHJ1c3QgaXMKKyAqIG5vdCBoYXJkd2FyZSBiYXNlZCBieSBpbnZhbGlkYXRpbmcgdGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUuCisgKiAoVGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUgaXMgaW52YWxpZGF0ZWQgYnkgYWRkaW5nIG9uZSB2YWx1ZSB0bworICogdGhlIG1lYXN1cmVtZW50IGxpc3QgYW5kIGV4dGVuZGluZyB0aGUgYWdncmVnYXRlIFBDUiB2YWx1ZSB3aXRoCisgKiBhIGRpZmZlcmVudCB2YWx1ZS4pIFZpb2xhdGlvbnMgYWRkIGEgemVybyBlbnRyeSB0byB0aGUgbWVhc3VyZW1lbnQKKyAqIGxpc3QgYW5kIGV4dGVuZCB0aGUgYWdncmVnYXRlIFBDUiB2YWx1ZSB3aXRoIGZmLi4uZmYncy4KKyAqLworc3RhdGljIHZvaWQgaW1hX2FkZF9ib290X2FnZ3JlZ2F0ZSh2b2lkKQoreworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworCWNvbnN0IGNoYXIgKm9wID0gImFkZF9ib290X2FnZ3JlZ2F0ZSI7CisJY29uc3QgY2hhciAqYXVkaXRfY2F1c2UgPSAiRU5PTUVNIjsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKwlpbnQgdmlvbGF0aW9uID0gMTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJZ290byBlcnJfb3V0OworCisJbWVtc2V0KCZlbnRyeS0+dGVtcGxhdGUsIDAsIHNpemVvZihlbnRyeS0+dGVtcGxhdGUpKTsKKwlzdHJuY3B5KGVudHJ5LT50ZW1wbGF0ZS5maWxlX25hbWUsIGJvb3RfYWdncmVnYXRlX25hbWUsCisJCUlNQV9FVkVOVF9OQU1FX0xFTl9NQVgpOworCWlmIChpbWFfdXNlZF9jaGlwKSB7CisJCXZpb2xhdGlvbiA9IDA7CisJCXJlc3VsdCA9IGltYV9jYWxjX2Jvb3RfYWdncmVnYXRlKGVudHJ5LT50ZW1wbGF0ZS5kaWdlc3QpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJYXVkaXRfY2F1c2UgPSAiaGFzaGluZ19lcnJvciI7CisJCQlrZnJlZShlbnRyeSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwl9CisJcmVzdWx0ID0gaW1hX3N0b3JlX3RlbXBsYXRlKGVudHJ5LCB2aW9sYXRpb24sIE5VTEwpOworCWlmIChyZXN1bHQgPCAwKQorCQlrZnJlZShlbnRyeSk7CisJcmV0dXJuOworZXJyX291dDoKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIE5VTEwsIGJvb3RfYWdncmVnYXRlX25hbWUsIG9wLAorCQkJICAgIGF1ZGl0X2NhdXNlLCByZXN1bHQsIDApOworfQorCitpbnQgaW1hX2luaXQodm9pZCkKK3sKKwl1OCBwY3JfaVtJTUFfRElHRVNUX1NJWkVdOworCWludCByYzsKKworCWltYV91c2VkX2NoaXAgPSAwOworCXJjID0gdHBtX3Bjcl9yZWFkKFRQTV9BTllfTlVNLCAwLCBwY3JfaSk7CisJaWYgKHJjID09IDApCisJCWltYV91c2VkX2NoaXAgPSAxOworCisJaWYgKCFpbWFfdXNlZF9jaGlwKQorCQlwcl9pbmZvKCJObyBUUE0gY2hpcCBmb3VuZCwgYWN0aXZhdGluZyBUUE0tYnlwYXNzIVxuIik7CisKKwlpbWFfYWRkX2Jvb3RfYWdncmVnYXRlKCk7CS8qIGJvb3QgYWdncmVnYXRlIG11c3QgYmUgZmlyc3QgZW50cnkgKi8KKwlpbWFfaW5pdF9wb2xpY3koKTsKKworCXJldHVybiBpbWFfZnNfaW5pdCgpOworfQorCit2b2lkIF9fZXhpdCBpbWFfY2xlYW51cCh2b2lkKQoreworCWltYV9mc19jbGVhbnVwKCk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNzI2NgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYwpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogU2VyZ2UgSGFsbHluIDxzZXJ1ZUB1cy5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGt5bGVuZUB1cy5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX21haW4uYworICogICAgICAgICAgICAgaW1wbGVtZW50cyB0aGUgSU1BIGhvb2tzOiBpbWFfYnBybV9jaGVjaywgaW1hX2ZpbGVfbW1hcCwKKyAqICAgICAgICAgICAgIGFuZCBpbWFfcGF0aF9jaGVjay4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKKworaW50IGltYV9pbml0aWFsaXplZDsKKworY2hhciAqaW1hX2hhc2ggPSAic2hhMSI7CitzdGF0aWMgaW50IF9faW5pdCBoYXNoX3NldHVwKGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpvcCA9ICJoYXNoX3NldHVwIjsKKwljb25zdCBjaGFyICpoYXNoID0gInNoYTEiOworCWludCByZXN1bHQgPSAwOworCWludCBhdWRpdF9pbmZvID0gMDsKKworCWlmIChzdHJuY21wKHN0ciwgIm1kNSIsIDMpID09IDApIHsKKwkJaGFzaCA9ICJtZDUiOworCQlpbWFfaGFzaCA9IHN0cjsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAic2hhMSIsIDQpICE9IDApIHsKKwkJaGFzaCA9ICJpbnZhbGlkX2hhc2hfdHlwZSI7CisJCXJlc3VsdCA9IDE7CisJfQorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX0hBU0gsIE5VTEwsIE5VTEwsIG9wLCBoYXNoLAorCQkJICAgIHJlc3VsdCwgYXVkaXRfaW5mbyk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJpbWFfaGFzaD0iLCBoYXNoX3NldHVwKTsKKworLyoqCisgKiBpbWFfZmlsZV9mcmVlIC0gY2FsbGVkIG9uIF9fZnB1dCgpCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZSBiZWluZyBmcmVlZAorICoKKyAqIEZsYWcgZmlsZXMgdGhhdCBjaGFuZ2VkLCBiYXNlZCBvbiBpX3ZlcnNpb247CisgKiBhbmQgZGVjcmVtZW50IHRoZSBpaW50IHJlYWRjb3VudC93cml0ZWNvdW50LgorICovCit2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm47CisJaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlpZiAoaWludC0+b3BlbmNvdW50IDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiAlcyBvcGVuL2ZyZWUgaW1iYWxhbmNlIChyOiVsZCB3OiVsZCBvOiVsZCBmOiVsZClcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJICAgICAgIGlpbnQtPnJlYWRjb3VudCwgaWludC0+d3JpdGVjb3VudCwKKwkJICAgICAgIGlpbnQtPm9wZW5jb3VudCwgYXRvbWljX2xvbmdfcmVhZCgmZmlsZS0+Zl9jb3VudCkpOworCQlpZiAoIShpaW50LT5mbGFncyAmIElNQV9JSU5UX0RVTVBfU1RBQ0spKSB7CisJCQlkdW1wX3N0YWNrKCk7CisJCQlpaW50LT5mbGFncyB8PSBJTUFfSUlOVF9EVU1QX1NUQUNLOworCQl9CisJfQorCWlpbnQtPm9wZW5jb3VudC0tOworCisJaWYgKChmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSkgPT0gRk1PREVfUkVBRCkKKwkJaWludC0+cmVhZGNvdW50LS07CisKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJaWludC0+d3JpdGVjb3VudC0tOworCQlpZiAoaWludC0+d3JpdGVjb3VudCA9PSAwKSB7CisJCQlpZiAoaWludC0+dmVyc2lvbiAhPSBpbm9kZS0+aV92ZXJzaW9uKQorCQkJCWlpbnQtPmZsYWdzICY9IH5JTUFfTUVBU1VSRUQ7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworfQorCisvKiBpbWFfcmVhZF93cml0ZV9jaGVjayAtIHJlZmxlY3QgcG9zc2libGUgcmVhZGluZy93cml0aW5nIGVycm9ycyBpbiB0aGUgUENSLgorICoKKyAqIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWQsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCisgKiB0aGUgZmlsZSBjb3VsZCBjaGFuZ2UsIHJlc3VsdGluZyBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCisgKgorICogT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlLCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHJlYWQsIHJlc3VsdHMKKyAqIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KKyAqCisgKiBJbiBlaXRoZXIgY2FzZSBpbnZhbGlkYXRlIHRoZSBQQ1IuCisgKi8KK2VudW0gaWludF9wY3JfZXJyb3IgeyBUT01UT1UsIE9QRU5fV1JJVEVSUyB9Oworc3RhdGljIHZvaWQgaW1hX3JlYWRfd3JpdGVfY2hlY2soZW51bSBpaW50X3Bjcl9lcnJvciBlcnJvciwKKwkJCQkgc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LAorCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSBUT01UT1U6CisJCWlmIChpaW50LT5yZWFkY291bnQgPiAwKQorCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAorCQkJCQkgICJUb01Ub1UiKTsKKwkJYnJlYWs7CisJY2FzZSBPUEVOX1dSSVRFUlM6CisJCWlmIChpaW50LT53cml0ZWNvdW50ID4gMCkKKwkJCWltYV9hZGRfdmlvbGF0aW9uKGlub2RlLCBmaWxlbmFtZSwgImludmFsaWRfcGNyIiwKKwkJCQkJICAib3Blbl93cml0ZXJzIik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBnZXRfcGF0aF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCWludCByYyA9IDA7CisKKwlpZiAoSVNfRVJSKGZpbGUpKSB7CisJCXByX2luZm8oIiVzIGRlbnRyeV9vcGVuIGZhaWxlZFxuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCWlpbnQtPm9wZW5jb3VudCsrOworCWlpbnQtPnJlYWRjb3VudCsrOworCisJcmMgPSBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChpaW50LCBmaWxlKTsKKwlpZiAoIXJjKQorCQlpbWFfc3RvcmVfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZmlsZW5hbWUpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBpbWFfcGF0aF9jaGVjayAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KKyAqIEBwYXRoOiBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHBhdGggdG8gYmUgbWVhc3VyZWQKKyAqIEBtYXNrOiBjb250YWlucyBNQVlfUkVBRCwgTUFZX1dSSVRFIG9yIE1BWV9FWEVDVVRFCisgKgorICogTWVhc3VyZSB0aGUgZmlsZSBiZWluZyBvcGVuIGZvciByZWFkb25seSwgYmFzZWQgb24gdGhlCisgKiBpbWFfbXVzdF9tZWFzdXJlKCkgcG9saWN5IGRlY2lzaW9uLgorICoKKyAqIEtlZXAgcmVhZC93cml0ZSBjb3VudGVycyBmb3IgYWxsIGZpbGVzLCBidXQgb25seQorICogaW52YWxpZGF0ZSB0aGUgUENSIGZvciBtZWFzdXJlZCBmaWxlczoKKyAqIAktIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSB3aGVuIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwKKyAqCSAgcmVzdWx0cyBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCisgKgktIE9wZW5pbmcgYSBmaWxlIGZvciByZWFkIHdoZW4gYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIAkgIGNvdWxkIHJlc3VsdCBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogKEJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIGFwcHJhaXNlX21lYXN1cmVtZW50KCkuKQorICovCitpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLT5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwlpbnQgcmM7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlpaW50LT5vcGVuY291bnQrKzsKKwlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpIHx8IChtYXNrID09IDApKQorCQlpaW50LT53cml0ZWNvdW50Kys7CisJZWxzZSBpZiAobWFzayAmIChNQVlfUkVBRCB8IE1BWV9FWEVDKSkKKwkJaWludC0+cmVhZGNvdW50Kys7CisKKwlyYyA9IGltYV9tdXN0X21lYXN1cmUoaWludCwgaW5vZGUsIE1BWV9SRUFELCBQQVRIX0NIRUNLKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgobWFzayAmIE1BWV9XUklURSkgfHwgKG1hc2sgPT0gMCkpCisJCWltYV9yZWFkX3dyaXRlX2NoZWNrKFRPTVRPVSwgaWludCwgaW5vZGUsCisJCQkJICAgICBwYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lKTsKKworCWlmICgobWFzayAmIChNQVlfV1JJVEUgfCBNQVlfUkVBRCB8IE1BWV9FWEVDKSkgIT0gTUFZX1JFQUQpCisJCWdvdG8gb3V0OworCisJaW1hX3JlYWRfd3JpdGVfY2hlY2soT1BFTl9XUklURVJTLCBpaW50LCBpbm9kZSwKKwkJCSAgICAgcGF0aC0+ZGVudHJ5LT5kX25hbWUubmFtZSk7CisJaWYgKCEoaWludC0+ZmxhZ3MgJiBJTUFfTUVBU1VSRUQpKSB7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGRnZXQocGF0aC0+ZGVudHJ5KTsKKwkJc3RydWN0IHZmc21vdW50ICptbnQgPSBtbnRnZXQocGF0aC0+bW50KTsKKworCQlmaWxlID0gZGVudHJ5X29wZW4oZGVudHJ5LCBtbnQsIE9fUkRPTkxZLCBjdXJyZW50LT5jcmVkKTsKKwkJcmMgPSBnZXRfcGF0aF9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7CisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfbWVhc3VyZW1lbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKwlpbnQgcmM7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlyYyA9IGltYV9tdXN0X21lYXN1cmUoaWludCwgaW5vZGUsIG1hc2ssIGZ1bmN0aW9uKTsKKwlpZiAocmMgIT0gMCkKKwkJZ290byBvdXQ7CisKKwlyYyA9IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KGlpbnQsIGZpbGUpOworCWlmICghcmMpCisJCWltYV9zdG9yZV9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBmaWxlbmFtZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgb3BlbmNvdW50X2dldChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybjsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJaWludC0+b3BlbmNvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7Cit9CisKKy8qKgorICogaW1hX2ZpbGVfbW1hcCAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KKyAqIEBmaWxlOiBwb2ludGVyIHRvIHRoZSBmaWxlIHRvIGJlIG1lYXN1cmVkIChNYXkgYmUgTlVMTCkKKyAqIEBwcm90OiBjb250YWlucyB0aGUgcHJvdGVjdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCBieSB0aGUga2VybmVsLgorICoKKyAqIE1lYXN1cmUgZmlsZXMgYmVpbmcgbW1hcHBlZCBleGVjdXRhYmxlIGJhc2VkIG9uIHRoZSBpbWFfbXVzdF9tZWFzdXJlKCkKKyAqIHBvbGljeSBkZWNpc2lvbi4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiAoQmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgYXBwcmFpc2VfbWVhc3VyZW1lbnQoKS4pCisgKi8KK2ludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJaW50IHJjOworCisJaWYgKCFmaWxlKQorCQlyZXR1cm4gMDsKKwlpZiAocHJvdCAmIFBST1RfRVhFQykKKwkJcmMgPSBwcm9jZXNzX21lYXN1cmVtZW50KGZpbGUsIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkJIE1BWV9FWEVDLCBGSUxFX01NQVApOworCXJldHVybiAwOworfQorCisvKgorICogaW1hX3NobV9jaGVjayAtIElQQyBzaG0gYW5kIHNobWF0IGNyZWF0ZS9mcHV0IGEgZmlsZQorICoKKyAqIE1haW50YWluIHRoZSBvcGVuY291bnQgZm9yIHRoZXNlIGZpbGVzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkKKyAqIGltYmFsYW5jZSBtZXNzYWdlcy4KKyAqLwordm9pZCBpbWFfc2htX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlKQoreworCW9wZW5jb3VudF9nZXQoZmlsZSk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGltYV9icHJtX2NoZWNrIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQGJwcm06IGNvbnRhaW5zIHRoZSBsaW51eF9iaW5wcm0gc3RydWN0dXJlCisgKgorICogVGhlIE9TIHByb3RlY3RzIGFnYWluc3QgYW4gZXhlY3V0YWJsZSBmaWxlLCBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogZnJvbSBiZWluZyBleGVjdXRlZCBpbiBkZW55X3dyaXRlX2FjY2VzcygpIGFuZCBhbiBleGVjdXRhYmxlIGZpbGUsCisgKiBhbHJlYWR5IG9wZW4gZm9yIGV4ZWN1dGUsIGZyb20gYmVpbmcgbW9kaWZpZWQgaW4gZ2V0X3dyaXRlX2FjY2VzcygpLgorICogU28gd2UgY2FuIGJlIGNlcnRhaW4gdGhhdCB3aGF0IHdlIHZlcmlmeSBhbmQgbWVhc3VyZSBoZXJlIGlzIGFjdHVhbGx5CisgKiB3aGF0IGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIChCYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiBhcHByYWlzZV9tZWFzdXJlbWVudCgpLikKKyAqLworaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJaW50IHJjOworCisJcmMgPSBwcm9jZXNzX21lYXN1cmVtZW50KGJwcm0tPmZpbGUsIGJwcm0tPmZpbGVuYW1lLAorCQkJCSBNQVlfRVhFQywgQlBSTV9DSEVDSyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfaW1hKHZvaWQpCit7CisJaW50IGVycm9yOworCisJaW1hX2lpbnRjYWNoZV9pbml0KCk7CisJZXJyb3IgPSBpbWFfaW5pdCgpOworCWltYV9pbml0aWFsaXplZCA9IDE7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9pbWEodm9pZCkKK3sKKwlpbWFfY2xlYW51cCgpOworfQorCitsYXRlX2luaXRjYWxsKGluaXRfaW1hKTsJLyogU3RhcnQgSU1BIGFmdGVyIHRoZSBUUE0gaXMgYXZhaWxhYmxlICovCisKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI5MWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogaW1hX3BvbGljeS5jCisgKiAJLSBpbml0aWFsaXplIGRlZmF1bHQgbWVhc3VyZSBwb2xpY3kgcnVsZXMKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorCisjaW5jbHVkZSAiaW1hLmgiCisKKy8qIGZsYWdzIGRlZmluaXRpb25zICovCisjZGVmaW5lIElNQV9GVU5DIAkweDAwMDEKKyNkZWZpbmUgSU1BX01BU0sgCTB4MDAwMgorI2RlZmluZSBJTUFfRlNNQUdJQwkweDAwMDQKKyNkZWZpbmUgSU1BX1VJRAkJMHgwMDA4CisKK2VudW0gaW1hX2FjdGlvbiB7IFVOS05PV04gPSAtMSwgRE9OVF9NRUFTVVJFID0gMCwgTUVBU1VSRSB9OworCisjZGVmaW5lIE1BWF9MU01fUlVMRVMgNgorZW51bSBsc21fcnVsZV90eXBlcyB7IExTTV9PQkpfVVNFUiwgTFNNX09CSl9ST0xFLCBMU01fT0JKX1RZUEUsCisJTFNNX1NVQkpfVVNFUiwgTFNNX1NVQkpfUk9MRSwgTFNNX1NVQkpfVFlQRQorfTsKKworc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwllbnVtIGltYV9hY3Rpb24gYWN0aW9uOworCXVuc2lnbmVkIGludCBmbGFnczsKKwllbnVtIGltYV9ob29rcyBmdW5jOworCWludCBtYXNrOworCXVuc2lnbmVkIGxvbmcgZnNtYWdpYzsKKwl1aWRfdCB1aWQ7CisJc3RydWN0IHsKKwkJdm9pZCAqcnVsZTsJLyogTFNNIGZpbGUgbWV0YWRhdGEgc3BlY2lmaWMgKi8KKwkJaW50IHR5cGU7CS8qIGF1ZGl0IHR5cGUgKi8KKwl9IGxzbVtNQVhfTFNNX1JVTEVTXTsKK307CisKKy8qIFdpdGhvdXQgTFNNIHNwZWNpZmljIGtub3dsZWRnZSwgdGhlIGRlZmF1bHQgcG9saWN5IGNhbiBvbmx5IGJlCisgKiB3cml0dGVuIGluIHRlcm1zIG9mIC5hY3Rpb24sIC5mdW5jLCAubWFzaywgLmZzbWFnaWMsIGFuZCAudWlkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSBkZWZhdWx0X3J1bGVzW10gPSB7CisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBQUk9DX1NVUEVSX01BR0lDLAorCSAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBTWVNGU19NQUdJQywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBERUJVR0ZTX01BR0lDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFRNUEZTX01BR0lDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IFNFQ1VSSVRZRlNfTUFHSUMsCisJIC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwuZnNtYWdpYyA9IDB4Rjk3Q0ZGOEMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IEZJTEVfTU1BUCwubWFzayA9IE1BWV9FWEVDLAorCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLfSwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBCUFJNX0NIRUNLLC5tYXNrID0gTUFZX0VYRUMsCisJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0t9LAorCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IFBBVEhfQ0hFQ0ssLm1hc2sgPSBNQVlfUkVBRCwudWlkID0gMCwKKwkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTSyB8IElNQV9VSUR9Cit9OworCitzdGF0aWMgTElTVF9IRUFEKG1lYXN1cmVfZGVmYXVsdF9ydWxlcyk7CitzdGF0aWMgTElTVF9IRUFEKG1lYXN1cmVfcG9saWN5X3J1bGVzKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICppbWFfbWVhc3VyZTsKKworc3RhdGljIERFRklORV9NVVRFWChpbWFfbWVhc3VyZV9tdXRleCk7CisKKy8qKgorICogaW1hX21hdGNoX3J1bGVzIC0gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaW5vZGUgbWF0Y2hlcyB0aGUgbWVhc3VyZSBydWxlLgorICogQHJ1bGU6IGEgcG9pbnRlciB0byBhIHJ1bGUKKyAqIEBpbm9kZTogYSBwb2ludGVyIHRvIGFuIGlub2RlCisgKiBAZnVuYzogTElNIGhvb2sgaWRlbnRpZmllcgorICogQG1hc2s6IHJlcXVlc3RlZCBhY3Rpb24gKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0FQUEVORCB8IE1BWV9FWEVDKQorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBydWxlIG1hdGNoLCBmYWxzZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgYm9vbCBpbWFfbWF0Y2hfcnVsZXMoc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKnJ1bGUsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBpbWFfaG9va3MgZnVuYywgaW50IG1hc2spCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCWludCBpOworCisJaWYgKChydWxlLT5mbGFncyAmIElNQV9GVU5DKSAmJiBydWxlLT5mdW5jICE9IGZ1bmMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX01BU0spICYmIHJ1bGUtPm1hc2sgIT0gbWFzaykKKwkJcmV0dXJuIGZhbHNlOworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfRlNNQUdJQykKKwkgICAgJiYgcnVsZS0+ZnNtYWdpYyAhPSBpbm9kZS0+aV9zYi0+c19tYWdpYykKKwkJcmV0dXJuIGZhbHNlOworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfVUlEKSAmJiBydWxlLT51aWQgIT0gdHNrLT5jcmVkLT51aWQpCisJCXJldHVybiBmYWxzZTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xTTV9SVUxFUzsgaSsrKSB7CisJCWludCByYzsKKwkJdTMyIG9zaWQsIHNpZDsKKworCQlpZiAoIXJ1bGUtPmxzbVtpXS5ydWxlKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgTFNNX09CSl9VU0VSOgorCQljYXNlIExTTV9PQkpfUk9MRToKKwkJY2FzZSBMU01fT0JKX1RZUEU6CisJCQlzZWN1cml0eV9pbm9kZV9nZXRzZWNpZChpbm9kZSwgJm9zaWQpOworCQkJcmMgPSBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaChvc2lkLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS50eXBlLAorCQkJCQkJCUFVRElUX0VRVUFMLAorCQkJCQkJCXJ1bGUtPmxzbVtpXS5ydWxlLAorCQkJCQkJCU5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgTFNNX1NVQkpfVVNFUjoKKwkJY2FzZSBMU01fU1VCSl9ST0xFOgorCQljYXNlIExTTV9TVUJKX1RZUEU6CisJCQlzZWN1cml0eV90YXNrX2dldHNlY2lkKHRzaywgJnNpZCk7CisJCQlyYyA9IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoKHNpZCwKKwkJCQkJCQlydWxlLT5sc21baV0udHlwZSwKKwkJCQkJCQlBVURJVF9FUVVBTCwKKwkJCQkJCQlydWxlLT5sc21baV0ucnVsZSwKKwkJCQkJCQlOVUxMKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWlmICghcmMpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGltYV9tYXRjaF9wb2xpY3kgLSBkZWNpc2lvbiBiYXNlZCBvbiBMU00gYW5kIG90aGVyIGNvbmRpdGlvbnMKKyAqIEBpbm9kZTogcG9pbnRlciB0byBhbiBpbm9kZSBmb3Igd2hpY2ggdGhlIHBvbGljeSBkZWNpc2lvbiBpcyBiZWluZyBtYWRlCisgKiBAZnVuYzogSU1BIGhvb2sgaWRlbnRpZmllcgorICogQG1hc2s6IHJlcXVlc3RlZCBhY3Rpb24gKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0FQUEVORCB8IE1BWV9FWEVDKQorICoKKyAqIE1lYXN1cmUgZGVjaXNpb24gYmFzZWQgb24gZnVuYy9tYXNrL2ZzbWFnaWMgYW5kIExTTShzdWJqL29iai90eXBlKQorICogY29uZGl0aW9ucy4KKyAqCisgKiAoVGhlcmUgaXMgbm8gbmVlZCBmb3IgbG9ja2luZyB3aGVuIHdhbGtpbmcgdGhlIHBvbGljeSBsaXN0LAorICogYXMgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJlIG5ldmVyIGRlbGV0ZWQsIG5vciBkb2VzIHRoZSBsaXN0CisgKiBjaGFuZ2UuKQorICovCitpbnQgaW1hX21hdGNoX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBpbWFfbWVhc3VyZSwgbGlzdCkgeworCQlib29sIHJjOworCisJCXJjID0gaW1hX21hdGNoX3J1bGVzKGVudHJ5LCBpbm9kZSwgZnVuYywgbWFzayk7CisJCWlmIChyYykKKwkJCXJldHVybiBlbnRyeS0+YWN0aW9uOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbWFfaW5pdF9wb2xpY3kgLSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IG1lYXN1cmUgcnVsZXMuCisgKgorICogaW1hX21lYXN1cmUgcG9pbnRzIHRvIGVpdGhlciB0aGUgbWVhc3VyZV9kZWZhdWx0X3J1bGVzIG9yIHRoZQorICogdGhlIG5ldyBtZWFzdXJlX3BvbGljeV9ydWxlcy4KKyAqLwordm9pZCBpbWFfaW5pdF9wb2xpY3kodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlZmF1bHRfcnVsZXMpOyBpKyspCisJCWxpc3RfYWRkX3RhaWwoJmRlZmF1bHRfcnVsZXNbaV0ubGlzdCwgJm1lYXN1cmVfZGVmYXVsdF9ydWxlcyk7CisJaW1hX21lYXN1cmUgPSAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzOworfQorCisvKioKKyAqIGltYV91cGRhdGVfcG9saWN5IC0gdXBkYXRlIGRlZmF1bHRfcnVsZXMgd2l0aCBuZXcgbWVhc3VyZSBydWxlcworICoKKyAqIENhbGxlZCBvbiBmaWxlIC5yZWxlYXNlIHRvIHVwZGF0ZSB0aGUgZGVmYXVsdCBydWxlcyB3aXRoIGEgY29tcGxldGUgbmV3CisgKiBwb2xpY3kuICBPbmNlIHVwZGF0ZWQsIHRoZSBwb2xpY3kgaXMgbG9ja2VkLCBubyBhZGRpdGlvbmFsIHJ1bGVzIGNhbiBiZQorICogYWRkZWQgdG8gdGhlIHBvbGljeS4KKyAqLwordm9pZCBpbWFfdXBkYXRlX3BvbGljeSh2b2lkKQoreworCWNvbnN0IGNoYXIgKm9wID0gInBvbGljeV91cGRhdGUiOworCWNvbnN0IGNoYXIgKmNhdXNlID0gImFscmVhZHkgZXhpc3RzIjsKKwlpbnQgcmVzdWx0ID0gMTsKKwlpbnQgYXVkaXRfaW5mbyA9IDA7CisKKwlpZiAoaW1hX21lYXN1cmUgPT0gJm1lYXN1cmVfZGVmYXVsdF9ydWxlcykgeworCQlpbWFfbWVhc3VyZSA9ICZtZWFzdXJlX3BvbGljeV9ydWxlczsKKwkJY2F1c2UgPSAiY29tcGxldGUiOworCQlyZXN1bHQgPSAwOworCX0KKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkgICAgTlVMTCwgb3AsIGNhdXNlLCByZXN1bHQsIGF1ZGl0X2luZm8pOworfQorCitlbnVtIHsKKwlPcHRfZXJyID0gLTEsCisJT3B0X21lYXN1cmUgPSAxLCBPcHRfZG9udF9tZWFzdXJlLAorCU9wdF9vYmpfdXNlciwgT3B0X29ial9yb2xlLCBPcHRfb2JqX3R5cGUsCisJT3B0X3N1YmpfdXNlciwgT3B0X3N1Ympfcm9sZSwgT3B0X3N1YmpfdHlwZSwKKwlPcHRfZnVuYywgT3B0X21hc2ssIE9wdF9mc21hZ2ljLCBPcHRfdWlkCit9OworCitzdGF0aWMgbWF0Y2hfdGFibGVfdCBwb2xpY3lfdG9rZW5zID0geworCXtPcHRfbWVhc3VyZSwgIm1lYXN1cmUifSwKKwl7T3B0X2RvbnRfbWVhc3VyZSwgImRvbnRfbWVhc3VyZSJ9LAorCXtPcHRfb2JqX3VzZXIsICJvYmpfdXNlcj0lcyJ9LAorCXtPcHRfb2JqX3JvbGUsICJvYmpfcm9sZT0lcyJ9LAorCXtPcHRfb2JqX3R5cGUsICJvYmpfdHlwZT0lcyJ9LAorCXtPcHRfc3Vial91c2VyLCAic3Vial91c2VyPSVzIn0sCisJe09wdF9zdWJqX3JvbGUsICJzdWJqX3JvbGU9JXMifSwKKwl7T3B0X3N1YmpfdHlwZSwgInN1YmpfdHlwZT0lcyJ9LAorCXtPcHRfZnVuYywgImZ1bmM9JXMifSwKKwl7T3B0X21hc2ssICJtYXNrPSVzIn0sCisJe09wdF9mc21hZ2ljLCAiZnNtYWdpYz0lcyJ9LAorCXtPcHRfdWlkLCAidWlkPSVzIn0sCisJe09wdF9lcnIsIE5VTEx9Cit9OworCitzdGF0aWMgaW50IGltYV9sc21fcnVsZV9pbml0KHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgY2hhciAqYXJncywgaW50IGxzbV9ydWxlLCBpbnQgYXVkaXRfdHlwZSkKK3sKKwlpbnQgcmVzdWx0OworCisJZW50cnktPmxzbVtsc21fcnVsZV0udHlwZSA9IGF1ZGl0X3R5cGU7CisJcmVzdWx0ID0gc2VjdXJpdHlfZmlsdGVyX3J1bGVfaW5pdChlbnRyeS0+bHNtW2xzbV9ydWxlXS50eXBlLAorCQkJCQkgICBBVURJVF9FUVVBTCwgYXJncywKKwkJCQkJICAgJmVudHJ5LT5sc21bbHNtX3J1bGVdLnJ1bGUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaW1hX3BhcnNlX3J1bGUoY2hhciAqcnVsZSwgc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCWNoYXIgKnA7CisJaW50IHJlc3VsdCA9IDA7CisKKwlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9JTlRFR1JJVFlfUlVMRSk7CisKKwllbnRyeS0+YWN0aW9uID0gLTE7CisJd2hpbGUgKChwID0gc3Ryc2VwKCZydWxlLCAiIFxuIikpICE9IE5VTEwpIHsKKwkJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW47CisJCXVuc2lnbmVkIGxvbmcgbG51bTsKKworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAoISpwKQorCQkJY29udGludWU7CisJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgcG9saWN5X3Rva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfbWVhc3VyZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIlcyAiLCAibWVhc3VyZSIpOworCQkJZW50cnktPmFjdGlvbiA9IE1FQVNVUkU7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZG9udF9tZWFzdXJlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiVzICIsICJkb250X21lYXN1cmUiKTsKKwkJCWVudHJ5LT5hY3Rpb24gPSBET05UX01FQVNVUkU7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZnVuYzoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJmdW5jPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIlBBVEhfQ0hFQ0siKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gUEFUSF9DSEVDSzsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJGSUxFX01NQVAiKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gRklMRV9NTUFQOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIkJQUk1fQ0hFQ0siKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gQlBSTV9DSEVDSzsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZW50cnktPmZsYWdzIHw9IElNQV9GVU5DOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X21hc2s6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibWFzaz0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJaWYgKChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX0VYRUMiKSkgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9FWEVDOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9XUklURSIpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfV1JJVEU7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX1JFQUQiKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX1JFQUQ7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiTUFZX0FQUEVORCIpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfQVBQRU5EOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlpZiAoIXJlc3VsdCkKKwkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX01BU0s7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZnNtYWdpYzoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJmc21hZ2ljPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBzdHJpY3Rfc3RydG91bChhcmdzWzBdLmZyb20sIDE2LAorCQkJCQkJJmVudHJ5LT5mc21hZ2ljKTsKKwkJCWlmICghcmVzdWx0KQorCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfRlNNQUdJQzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF91aWQ6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAidWlkPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBzdHJpY3Rfc3RydG91bChhcmdzWzBdLmZyb20sIDEwLCAmbG51bSk7CisJCQlpZiAoIXJlc3VsdCkgeworCQkJCWVudHJ5LT51aWQgPSAodWlkX3QpIGxudW07CisJCQkJaWYgKGVudHJ5LT51aWQgIT0gbG51bSkKKwkJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCQllbHNlCisJCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfVUlEOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT3B0X29ial91c2VyOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9ial91c2VyPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX09CSl9VU0VSLAorCQkJCQkJICAgQVVESVRfT0JKX1VTRVIpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X29ial9yb2xlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9ial9yb2xlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX09CSl9ST0xFLAorCQkJCQkJICAgQVVESVRfT0JKX1JPTEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X29ial90eXBlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9ial90eXBlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX09CSl9UWVBFLAorCQkJCQkJICAgQVVESVRfT0JKX1RZUEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1YmpfdXNlcjoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzdWJqX3VzZXI9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fU1VCSl9VU0VSLAorCQkJCQkJICAgQVVESVRfU1VCSl9VU0VSKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJqX3JvbGU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3Vial9yb2xlPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX1NVQkpfUk9MRSwKKwkJCQkJCSAgIEFVRElUX1NVQkpfUk9MRSk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vial90eXBlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInN1YmpfdHlwZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9TVUJKX1RZUEUsCisJCQkJCQkgICBBVURJVF9TVUJKX1RZUEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2VycjoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJVTktOT1dOPSVzICIsIHApOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGVudHJ5LT5hY3Rpb24gPT0gVU5LTk9XTikKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJyZXM9JWQiLCAhcmVzdWx0ID8gMCA6IDEpOworCWF1ZGl0X2xvZ19lbmQoYWIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogaW1hX3BhcnNlX2FkZF9ydWxlIC0gYWRkIGEgcnVsZSB0byBtZWFzdXJlX3BvbGljeV9ydWxlcworICogQHJ1bGUgLSBpbWEgbWVhc3VyZW1lbnQgcG9saWN5IHJ1bGUKKyAqCisgKiBVc2VzIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgcG9saWN5IGxpc3QgZnJvbSBtdWx0aXBsZSBjb25jdXJyZW50IHdyaXRlcnMuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaW1hX3BhcnNlX2FkZF9ydWxlKGNoYXIgKnJ1bGUpCit7CisJY29uc3QgY2hhciAqb3AgPSAidXBkYXRlX3BvbGljeSI7CisJc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5OworCWludCByZXN1bHQgPSAwOworCWludCBhdWRpdF9pbmZvID0gMDsKKworCS8qIFByZXZlbnQgaW5zdGFsbGVkIHBvbGljeSBmcm9tIGNoYW5naW5nICovCisJaWYgKGltYV9tZWFzdXJlICE9ICZtZWFzdXJlX2RlZmF1bHRfcnVsZXMpIHsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJCSAgICBOVUxMLCBvcCwgImFscmVhZHkgZXhpc3RzIiwKKwkJCQkgICAgLUVBQ0NFUywgYXVkaXRfaW5mbyk7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkgeworCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsCisJCQkJICAgIE5VTEwsIG9wLCAiLUVOT01FTSIsIC1FTk9NRU0sIGF1ZGl0X2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmZW50cnktPmxpc3QpOworCisJcmVzdWx0ID0gaW1hX3BhcnNlX3J1bGUocnVsZSwgZW50cnkpOworCWlmICghcmVzdWx0KSB7CisJCW11dGV4X2xvY2soJmltYV9tZWFzdXJlX211dGV4KTsKKwkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZtZWFzdXJlX3BvbGljeV9ydWxlcyk7CisJCW11dGV4X3VubG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworCX0gZWxzZSB7CisJCWtmcmVlKGVudHJ5KTsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJCSAgICBOVUxMLCBvcCwgImludmFsaWQgcG9saWN5IiwgcmVzdWx0LAorCQkJCSAgICBhdWRpdF9pbmZvKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogaW1hX2RlbGV0ZV9ydWxlcyBjYWxsZWQgdG8gY2xlYW51cCBpbnZhbGlkIHBvbGljeSAqLwordm9pZCBpbWFfZGVsZXRlX3J1bGVzKHZvaWQpCit7CisJc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5LCAqdG1wOworCisJbXV0ZXhfbG9jaygmaW1hX21lYXN1cmVfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAmbWVhc3VyZV9wb2xpY3lfcnVsZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKwltdXRleF91bmxvY2soJmltYV9tZWFzdXJlX211dGV4KTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3F1ZXVlLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzk0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9xdWV1ZS5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBTZXJnZSBIYWxseW4gPHNlcnVlQHVzLmlibS5jb20+CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfcXVldWUuYworICogICAgICAgSW1wbGVtZW50cyBxdWV1ZXMgdGhhdCBzdG9yZSB0ZW1wbGF0ZSBtZWFzdXJlbWVudHMgYW5kCisgKiAgICAgICBtYWludGFpbnMgYWdncmVnYXRlIG92ZXIgdGhlIHN0b3JlZCBtZWFzdXJlbWVudHMKKyAqICAgICAgIGluIHRoZSBwcmUtY29uZmlndXJlZCBUUE0gUENSIChpZiBhdmFpbGFibGUpLgorICogICAgICAgVGhlIG1lYXN1cmVtZW50IGxpc3QgaXMgYXBwZW5kLW9ubHkuIE5vIGVudHJ5IGlzCisgKiAgICAgICBldmVyIHJlbW92ZWQgb3IgY2hhbmdlZCBkdXJpbmcgdGhlIGJvb3QtY3ljbGUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSAiaW1hLmgiCisKK0xJU1RfSEVBRChpbWFfbWVhc3VyZW1lbnRzKTsJLyogbGlzdCBvZiBhbGwgbWVhc3VyZW1lbnRzICovCisKKy8qIGtleTogaW5vZGUgKGJlZm9yZSBzZWN1cmUtaGFzaGluZyBhIGZpbGUpICovCitzdHJ1Y3QgaW1hX2hfdGFibGUgaW1hX2h0YWJsZSA9IHsKKwkubGVuID0gQVRPTUlDX0xPTkdfSU5JVCgwKSwKKwkudmlvbGF0aW9ucyA9IEFUT01JQ19MT05HX0lOSVQoMCksCisJLnF1ZXVlWzAgLi4uIElNQV9NRUFTVVJFX0hUQUJMRV9TSVpFIC0gMV0gPSBITElTVF9IRUFEX0lOSVQKK307CisKKy8qIG11dGV4IHByb3RlY3RzIGF0b21pY2l0eSBvZiBleHRlbmRpbmcgbWVhc3VyZW1lbnQgbGlzdAorICogYW5kIGV4dGVuZGluZyB0aGUgVFBNIFBDUiBhZ2dyZWdhdGUuIFNpbmNlIHRwbV9leHRlbmQgY2FuIHRha2UKKyAqIGxvbmcgKGFuZCB0aGUgdHBtIGRyaXZlciB1c2VzIGEgbXV0ZXgpLCB3ZSBjYW4ndCB1c2UgdGhlIHNwaW5sb2NrLgorICovCitzdGF0aWMgREVGSU5FX01VVEVYKGltYV9leHRlbmRfbGlzdF9tdXRleCk7CisKKy8qIGxvb2t1cCB1cCB0aGUgZGlnZXN0IHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlLCBhbmQgcmV0dXJuIHRoZSBlbnRyeSAqLworc3RhdGljIHN0cnVjdCBpbWFfcXVldWVfZW50cnkgKmltYV9sb29rdXBfZGlnZXN0X2VudHJ5KHU4ICpkaWdlc3RfdmFsdWUpCit7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUsICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGludCBrZXk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlpbnQgcmM7CisKKwlrZXkgPSBpbWFfaGFzaF9rZXkoZGlnZXN0X3ZhbHVlKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHFlLCBwb3MsICZpbWFfaHRhYmxlLnF1ZXVlW2tleV0sIGhuZXh0KSB7CisJCXJjID0gbWVtY21wKHFlLT5lbnRyeS0+ZGlnZXN0LCBkaWdlc3RfdmFsdWUsIElNQV9ESUdFU1RfU0laRSk7CisJCWlmIChyYyA9PSAwKSB7CisJCQlyZXQgPSBxZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKKy8qIGltYV9hZGRfdGVtcGxhdGVfZW50cnkgaGVscGVyIGZ1bmN0aW9uOgorICogLSBBZGQgdGVtcGxhdGUgZW50cnkgdG8gbWVhc3VyZW1lbnQgbGlzdCBhbmQgaGFzaCB0YWJsZS4KKyAqCisgKiAoQ2FsbGVkIHdpdGggaW1hX2V4dGVuZF9saXN0X211dGV4IGhlbGQuKQorICovCitzdGF0aWMgaW50IGltYV9hZGRfZGlnZXN0X2VudHJ5KHN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlOworCXVuc2lnbmVkIGludCBrZXk7CisKKwlxZSA9IGttYWxsb2Moc2l6ZW9mKCpxZSksIEdGUF9LRVJORUwpOworCWlmIChxZSA9PSBOVUxMKSB7CisJCXByX2VycigiT1VUIE9GIE1FTU9SWSBFUlJPUiBjcmVhdGluZyBxdWV1ZSBlbnRyeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcWUtPmVudHJ5ID0gZW50cnk7CisKKwlJTklUX0xJU1RfSEVBRCgmcWUtPmxhdGVyKTsKKwlsaXN0X2FkZF90YWlsX3JjdSgmcWUtPmxhdGVyLCAmaW1hX21lYXN1cmVtZW50cyk7CisKKwlhdG9taWNfbG9uZ19pbmMoJmltYV9odGFibGUubGVuKTsKKwlrZXkgPSBpbWFfaGFzaF9rZXkoZW50cnktPmRpZ2VzdCk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZxZS0+aG5leHQsICZpbWFfaHRhYmxlLnF1ZXVlW2tleV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltYV9wY3JfZXh0ZW5kKGNvbnN0IHU4ICpoYXNoKQoreworCWludCByZXN1bHQgPSAwOworCisJaWYgKCFpbWFfdXNlZF9jaGlwKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdHBtX3Bjcl9leHRlbmQoVFBNX0FOWV9OVU0sIENPTkZJR19JTUFfTUVBU1VSRV9QQ1JfSURYLCBoYXNoKTsKKwlpZiAocmVzdWx0ICE9IDApCisJCXByX2VycigiRXJyb3IgQ29tbXVuaWNhdGluZyB0byBUUE0gY2hpcFxuIik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogQWRkIHRlbXBsYXRlIGVudHJ5IHRvIHRoZSBtZWFzdXJlbWVudCBsaXN0IGFuZCBoYXNoIHRhYmxlLAorICogYW5kIGV4dGVuZCB0aGUgcGNyLgorICovCitpbnQgaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwgaW50IHZpb2xhdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKm9wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXU4IGRpZ2VzdFtJTUFfRElHRVNUX1NJWkVdOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gImhhc2hfYWRkZWQiOworCWludCBhdWRpdF9pbmZvID0gMTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCW11dGV4X2xvY2soJmltYV9leHRlbmRfbGlzdF9tdXRleCk7CisJaWYgKCF2aW9sYXRpb24pIHsKKwkJbWVtY3B5KGRpZ2VzdCwgZW50cnktPmRpZ2VzdCwgc2l6ZW9mIGRpZ2VzdCk7CisJCWlmIChpbWFfbG9va3VwX2RpZ2VzdF9lbnRyeShkaWdlc3QpKSB7CisJCQlhdWRpdF9jYXVzZSA9ICJoYXNoX2V4aXN0cyI7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJlc3VsdCA9IGltYV9hZGRfZGlnZXN0X2VudHJ5KGVudHJ5KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlhdWRpdF9jYXVzZSA9ICJFTk9NRU0iOworCQlhdWRpdF9pbmZvID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZpb2xhdGlvbikJCS8qIGludmFsaWRhdGUgcGNyICovCisJCW1lbXNldChkaWdlc3QsIDB4ZmYsIHNpemVvZiBkaWdlc3QpOworCisJcmVzdWx0ID0gaW1hX3Bjcl9leHRlbmQoZGlnZXN0KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJYXVkaXRfY2F1c2UgPSAiVFBNIGVycm9yIjsKKwkJYXVkaXRfaW5mbyA9IDA7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmaW1hX2V4dGVuZF9saXN0X211dGV4KTsKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLCBlbnRyeS0+dGVtcGxhdGVfbmFtZSwKKwkJCSAgICBvcCwgYXVkaXRfY2F1c2UsIHJlc3VsdCwgYXVkaXRfaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaCBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAppbmRleCA4MTkzMmFiLi45ZmI2NzljIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKKysrIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCkBAIC01Myw2ICs1Myw3IEBACiAJYXRvbWljX3QJCW5rZXlzOwkJLyogbnVtYmVyIG9mIGtleXMgKi8KIAlhdG9taWNfdAkJbmlrZXlzOwkJLyogbnVtYmVyIG9mIGluc3RhbnRpYXRlZCBrZXlzICovCiAJdWlkX3QJCQl1aWQ7CisJc3RydWN0IHVzZXJfbmFtZXNwYWNlCSp1c2VyX25zOwogCWludAkJCXFua2V5czsJCS8qIG51bWJlciBvZiBrZXlzIGFsbG9jYXRlZCB0byB0aGlzIHVzZXIgKi8KIAlpbnQJCQlxbmJ5dGVzOwkvKiBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHRvIHRoaXMgdXNlciAqLwogfTsKQEAgLTYxLDcgKzYyLDggQEAKIGV4dGVybiBzcGlubG9ja190CWtleV91c2VyX2xvY2s7CiBleHRlcm4gc3RydWN0IGtleV91c2VyCXJvb3Rfa2V5X3VzZXI7CiAKLWV4dGVybiBzdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQpOworZXh0ZXJuIHN0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCwKKwkJCQkJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKTsKIGV4dGVybiB2b2lkIGtleV91c2VyX3B1dChzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmMKaW5kZXggZjc2YzhhNS4uNGExMjk3ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL2tleS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUJKmtleV9qYXI7CkBAIC02MCw3ICs2MSw3IEBACiAgKiBnZXQgdGhlIGtleSBxdW90YSByZWNvcmQgZm9yIGEgdXNlciwgYWxsb2NhdGluZyBhIG5ldyByZWNvcmQgaWYgb25lIGRvZXNuJ3QKICAqIGFscmVhZHkgZXhpc3QKICAqLwotc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkKQorc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiB7CiAJc3RydWN0IGtleV91c2VyICpjYW5kaWRhdGUgPSBOVUxMLCAqdXNlcjsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKQEAgLTc5LDYgKzgwLDEwIEBACiAJCQlwID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKHVpZCA+IHVzZXItPnVpZCkKIAkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKHVzZXJfbnMgPCB1c2VyLT51c2VyX25zKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmICh1c2VyX25zID4gdXNlci0+dXNlcl9ucykKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CiAJCWVsc2UKIAkJCWdvdG8gZm91bmQ7CiAJfQpAQCAtMTA2LDYgKzExMSw3IEBACiAJYXRvbWljX3NldCgmY2FuZGlkYXRlLT5ua2V5cywgMCk7CiAJYXRvbWljX3NldCgmY2FuZGlkYXRlLT5uaWtleXMsIDApOwogCWNhbmRpZGF0ZS0+dWlkID0gdWlkOworCWNhbmRpZGF0ZS0+dXNlcl9ucyA9IGdldF91c2VyX25zKHVzZXJfbnMpOwogCWNhbmRpZGF0ZS0+cW5rZXlzID0gMDsKIAljYW5kaWRhdGUtPnFuYnl0ZXMgPSAwOwogCXNwaW5fbG9ja19pbml0KCZjYW5kaWRhdGUtPmxvY2spOwpAQCAtMTM2LDYgKzE0Miw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnVzZXItPnVzYWdlLCAma2V5X3VzZXJfbG9jaykpIHsKIAkJcmJfZXJhc2UoJnVzZXItPm5vZGUsICZrZXlfdXNlcl90cmVlKTsKIAkJc3Bpbl91bmxvY2soJmtleV91c2VyX2xvY2spOworCQlwdXRfdXNlcl9ucyh1c2VyLT51c2VyX25zKTsKIAogCQlrZnJlZSh1c2VyKTsKIAl9CkBAIC0yMzQsNyArMjQxLDcgQEAKIAlxdW90YWxlbiA9IGRlc2NsZW4gKyB0eXBlLT5kZWZfZGF0YWxlbjsKIAogCS8qIGdldCBob2xkIG9mIHRoZSBrZXkgdHJhY2tpbmcgZm9yIHRoaXMgdXNlciAqLwotCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkKTsKKwl1c2VyID0ga2V5X3VzZXJfbG9va3VwKHVpZCwgY3JlZC0+dXNlci0+dXNlcl9ucyk7CiAJaWYgKCF1c2VyKQogCQlnb3RvIG5vX21lbW9yeV8xOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwppbmRleCBiMWVjM2I0Li43ZjA5ZmI4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTcyNiw3ICs3MjYsNyBAQAogCS8qIGNoYW5nZSB0aGUgVUlEICovCiAJaWYgKHVpZCAhPSAodWlkX3QpIC0xICYmIHVpZCAhPSBrZXktPnVpZCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQluZXdvd25lciA9IGtleV91c2VyX2xvb2t1cCh1aWQpOworCQluZXdvd25lciA9IGtleV91c2VyX2xvb2t1cCh1aWQsIGN1cnJlbnRfdXNlcl9ucygpKTsKIAkJaWYgKCFuZXdvd25lcikKIAkJCWdvdG8gZXJyb3JfcHV0OwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IGVkODUxNTcuLjNkYmE4MWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC01MzksNiArNTM5LDkgQEAKIAkJCQkgICAgJmtleXJpbmdfbmFtZV9oYXNoW2J1Y2tldF0sCiAJCQkJICAgIHR5cGVfZGF0YS5saW5rCiAJCQkJICAgICkgeworCQkJaWYgKGtleXJpbmctPnVzZXItPnVzZXJfbnMgIT0gY3VycmVudF91c2VyX25zKCkpCisJCQkJY29udGludWU7CisKIAkJCWlmICh0ZXN0X2JpdChLRVlfRkxBR19SRVZPS0VELCAma2V5cmluZy0+ZmxhZ3MpKQogCQkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYyBiL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jCmluZGV4IDVkOWZjN2IuLjBlZDgwMmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jCisrKyBiL3NlY3VyaXR5L2tleXMvcGVybWlzc2lvbi5jCkBAIC0zNSw2ICszNSw5IEBACiAKIAlrZXkgPSBrZXlfcmVmX3RvX3B0cihrZXlfcmVmKTsKIAorCWlmIChrZXktPnVzZXItPnVzZXJfbnMgIT0gY3JlZC0+dXNlci0+dXNlcl9ucykKKwkJZ290byB1c2Vfb3RoZXJfcGVybXM7CisKIAkvKiB1c2UgdGhlIHNlY29uZCA4LWJpdHMgb2YgcGVybWlzc2lvbnMgZm9yIGtleXMgdGhlIGNhbGxlciBvd25zICovCiAJaWYgKGtleS0+dWlkID09IGNyZWQtPmZzdWlkKSB7CiAJCWtwZXJtID0ga2V5LT5wZXJtID4+IDE2OwpAQCAtNTYsNiArNTksOCBAQAogCQl9CiAJfQogCit1c2Vfb3RoZXJfcGVybXM6CisKIAkvKiBvdGhlcndpc2UgdXNlIHRoZSBsZWFzdC1zaWduaWZpY2FudCA4LWJpdHMgKi8KIAlrcGVybSA9IGtleS0+cGVybTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jLmMgYi9zZWN1cml0eS9rZXlzL3Byb2MuYwppbmRleCA3ZjUwOGRlLi43NjlmOWJkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2MuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2MuYwpAQCAtOTEsNiArOTEsMjggQEAKICAqLwogI2lmZGVmIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUwogCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKl9fa2V5X3NlcmlhbF9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXdoaWxlIChuKSB7CisJCXN0cnVjdCBrZXkgKmtleSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBrZXksIHNlcmlhbF9ub2RlKTsKKwkJaWYgKGtleS0+dXNlci0+dXNlcl9ucyA9PSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJCWJyZWFrOworCQluID0gcmJfbmV4dChuKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3NlcmlhbF9uZXh0KHN0cnVjdCByYl9ub2RlICpuKQoreworCXJldHVybiBfX2tleV9zZXJpYWxfbmV4dChyYl9uZXh0KG4pKTsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfc2VyaWFsX2ZpcnN0KHN0cnVjdCByYl9yb290ICpyKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcmJfZmlyc3Qocik7CisJcmV0dXJuIF9fa2V5X3NlcmlhbF9uZXh0KG4pOworfQorCiBzdGF0aWMgaW50IHByb2Nfa2V5c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcHJvY19rZXlzX29wcyk7CkBAIC0xMDQsMTAgKzEyNiwxMCBAQAogCiAJc3Bpbl9sb2NrKCZrZXlfc2VyaWFsX2xvY2spOwogCi0JX3AgPSByYl9maXJzdCgma2V5X3NlcmlhbF90cmVlKTsKKwlfcCA9IGtleV9zZXJpYWxfZmlyc3QoJmtleV9zZXJpYWxfdHJlZSk7CiAJd2hpbGUgKHBvcyA+IDAgJiYgX3ApIHsKIAkJcG9zLS07Ci0JCV9wID0gcmJfbmV4dChfcCk7CisJCV9wID0ga2V5X3NlcmlhbF9uZXh0KF9wKTsKIAl9CiAKIAlyZXR1cm4gX3A7CkBAIC0xMTcsNyArMTM5LDcgQEAKIHN0YXRpYyB2b2lkICpwcm9jX2tleXNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYsIGxvZmZfdCAqX3BvcykKIHsKIAkoKl9wb3MpKys7Ci0JcmV0dXJuIHJiX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOworCXJldHVybiBrZXlfc2VyaWFsX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOwogCiB9CiAKQEAgLTIwMyw2ICsyMjUsMjcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUyAqLwogCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKl9fa2V5X3VzZXJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIgPSByYl9lbnRyeShuLCBzdHJ1Y3Qga2V5X3VzZXIsIG5vZGUpOworCQlpZiAodXNlci0+dXNlcl9ucyA9PSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJCWJyZWFrOworCQluID0gcmJfbmV4dChuKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3VzZXJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwlyZXR1cm4gX19rZXlfdXNlcl9uZXh0KHJiX25leHQobikpOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV91c2VyX2ZpcnN0KHN0cnVjdCByYl9yb290ICpyKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcmJfZmlyc3Qocik7CisJcmV0dXJuIF9fa2V5X3VzZXJfbmV4dChuKTsKK30KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBpbXBsZW1lbnQgIi9wcm9jL2tleS11c2VycyIgdG8gcHJvdmlkZXMgYSBsaXN0IG9mIHRoZSBrZXkgdXNlcnMKQEAgLTIyMCwxMCArMjYzLDEwIEBACiAKIAlzcGluX2xvY2soJmtleV91c2VyX2xvY2spOwogCi0JX3AgPSByYl9maXJzdCgma2V5X3VzZXJfdHJlZSk7CisJX3AgPSBrZXlfdXNlcl9maXJzdCgma2V5X3VzZXJfdHJlZSk7CiAJd2hpbGUgKHBvcyA+IDAgJiYgX3ApIHsKIAkJcG9zLS07Ci0JCV9wID0gcmJfbmV4dChfcCk7CisJCV9wID0ga2V5X3VzZXJfbmV4dChfcCk7CiAJfQogCiAJcmV0dXJuIF9wOwpAQCAtMjMzLDcgKzI3Niw3IEBACiBzdGF0aWMgdm9pZCAqcHJvY19rZXlfdXNlcnNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYsIGxvZmZfdCAqX3BvcykKIHsKIAkoKl9wb3MpKys7Ci0JcmV0dXJuIHJiX25leHQoKHN0cnVjdCByYl9ub2RlICopIHYpOworCXJldHVybiBrZXlfdXNlcl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKIAogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwppbmRleCAyZjVkODllLi4yNzZkMjc4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTM0LDYgKzM1LDcgQEAKIAkubmtleXMJCT0gQVRPTUlDX0lOSVQoMiksCiAJLm5pa2V5cwkJPSBBVE9NSUNfSU5JVCgyKSwKIAkudWlkCQk9IDAsCisJLnVzZXJfbnMJPSAmaW5pdF91c2VyX25zLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCmluZGV4IDBlMDRmNzIuLjIyYTMxNTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCiAJa2VudGVyKCIiKTsKIAotCXVzZXIgPSBrZXlfdXNlcl9sb29rdXAoY3VycmVudF9mc3VpZCgpKTsKKwl1c2VyID0ga2V5X3VzZXJfbG9va3VwKGN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF91c2VyX25zKCkpOwogCWlmICghdXNlcikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCmluZGV4IGViNDFmNDMuLjdmOWI1ZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwpAQCAtODgsMTcgKzg4LDE2IEBACiAJdTMyCQkJdHNpZDsKIAl1MTYJCQl0Y2xhc3M7CiAJc3RydWN0IGF2X2RlY2lzaW9uCWF2ZDsKLQlhdG9taWNfdAkJdXNlZDsJLyogdXNlZCByZWNlbnRseSAqLwogfTsKIAogc3RydWN0IGF2Y19ub2RlIHsKIAlzdHJ1Y3QgYXZjX2VudHJ5CWFlOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OyAvKiBhbmNob3JlZCBpbiBhdmNfY2FjaGUtPnNsb3RzW2ldICovCiAJc3RydWN0IHJjdV9oZWFkCQlyaGVhZDsKIH07CiAKIHN0cnVjdCBhdmNfY2FjaGUgewotCXN0cnVjdCBsaXN0X2hlYWQJc2xvdHNbQVZDX0NBQ0hFX1NMT1RTXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlzbG90c1tBVkNfQ0FDSEVfU0xPVFNdOyAvKiBoZWFkIGZvciBhdmNfbm9kZS0+bGlzdCAqLwogCXNwaW5sb2NrX3QJCXNsb3RzX2xvY2tbQVZDX0NBQ0hFX1NMT1RTXTsgLyogbG9jayBmb3Igd3JpdGVzICovCiAJYXRvbWljX3QJCWxydV9oaW50OwkvKiBMUlUgaGludCBmb3IgcmVjbGFpbSBzY2FuICovCiAJYXRvbWljX3QJCWFjdGl2ZV9ub2RlczsKQEAgLTIzNCw3ICsyMzMsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZhdmNfY2FjaGUuc2xvdHNbaV0pOworCQlJTklUX0hMSVNUX0hFQUQoJmF2Y19jYWNoZS5zbG90c1tpXSk7CiAJCXNwaW5fbG9ja19pbml0KCZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXSk7CiAJfQogCWF0b21pY19zZXQoJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMsIDApOwpAQCAtMjUwLDE2ICsyNDksMjAgQEAKIHsKIAlpbnQgaSwgY2hhaW5fbGVuLCBtYXhfY2hhaW5fbGVuLCBzbG90c191c2VkOwogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCXNsb3RzX3VzZWQgPSAwOwogCW1heF9jaGFpbl9sZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBBVkNfQ0FDSEVfU0xPVFM7IGkrKykgewotCQlpZiAoIWxpc3RfZW1wdHkoJmF2Y19jYWNoZS5zbG90c1tpXSkpIHsKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaV07CisJCWlmICghaGxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCiAJCQlzbG90c191c2VkKys7CiAJCQljaGFpbl9sZW4gPSAwOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgJmF2Y19jYWNoZS5zbG90c1tpXSwgbGlzdCkKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KQogCQkJCWNoYWluX2xlbisrOwogCQkJaWYgKGNoYWluX2xlbiA+IG1heF9jaGFpbl9sZW4pCiAJCQkJbWF4X2NoYWluX2xlbiA9IGNoYWluX2xlbjsKQEAgLTI4Myw3ICsyODYsNyBAQAogCiBzdGF0aWMgdm9pZCBhdmNfbm9kZV9kZWxldGUoc3RydWN0IGF2Y19ub2RlICpub2RlKQogewotCWxpc3RfZGVsX3JjdSgmbm9kZS0+bGlzdCk7CisJaGxpc3RfZGVsX3JjdSgmbm9kZS0+bGlzdCk7CiAJY2FsbF9yY3UoJm5vZGUtPnJoZWFkLCBhdmNfbm9kZV9mcmVlKTsKIAlhdG9taWNfZGVjKCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzKTsKIH0KQEAgLTI5Nyw3ICszMDAsNyBAQAogCiBzdGF0aWMgdm9pZCBhdmNfbm9kZV9yZXBsYWNlKHN0cnVjdCBhdmNfbm9kZSAqbmV3LCBzdHJ1Y3QgYXZjX25vZGUgKm9sZCkKIHsKLQlsaXN0X3JlcGxhY2VfcmN1KCZvbGQtPmxpc3QsICZuZXctPmxpc3QpOworCWhsaXN0X3JlcGxhY2VfcmN1KCZvbGQtPmxpc3QsICZuZXctPmxpc3QpOwogCWNhbGxfcmN1KCZvbGQtPnJoZWFkLCBhdmNfbm9kZV9mcmVlKTsKIAlhdG9taWNfZGVjKCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzKTsKIH0KQEAgLTMwNywyOSArMzEwLDMxIEBACiAJc3RydWN0IGF2Y19ub2RlICpub2RlOwogCWludCBodmFsdWUsIHRyeSwgZWN4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3BpbmxvY2tfdCAqbG9jazsKIAogCWZvciAodHJ5ID0gMCwgZWN4ID0gMDsgdHJ5IDwgQVZDX0NBQ0hFX1NMT1RTOyB0cnkrKykgewogCQlodmFsdWUgPSBhdG9taWNfaW5jX3JldHVybigmYXZjX2NhY2hlLmxydV9oaW50KSAmIChBVkNfQ0FDSEVfU0xPVFMgLSAxKTsKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwkJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdOwogCi0JCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWdzKSkKKwkJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykpCiAJCQljb250aW51ZTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7Ci0JCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbm9kZS0+YWUudXNlZCkpIHsKLQkJCQkvKiBSZWNlbnRseSBVbnVzZWQgKi8KLQkJCQlhdmNfbm9kZV9kZWxldGUobm9kZSk7Ci0JCQkJYXZjX2NhY2hlX3N0YXRzX2luY3IocmVjbGFpbXMpOwotCQkJCWVjeCsrOwotCQkJCWlmIChlY3ggPj0gQVZDX0NBQ0hFX1JFQ0xBSU0pIHsKLQkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWdzKTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQorCQlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KSB7CisJCQlhdmNfbm9kZV9kZWxldGUobm9kZSk7CisJCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihyZWNsYWltcyk7CisJCQllY3grKzsKKwkJCWlmIChlY3ggPj0gQVZDX0NBQ0hFX1JFQ0xBSU0pIHsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIGVjeDsKQEAgLTM0NCw4ICszNDksNyBAQAogCQlnb3RvIG91dDsKIAogCUlOSVRfUkNVX0hFQUQoJm5vZGUtPnJoZWFkKTsKLQlJTklUX0xJU1RfSEVBRCgmbm9kZS0+bGlzdCk7Ci0JYXRvbWljX3NldCgmbm9kZS0+YWUudXNlZCwgMSk7CisJSU5JVF9ITElTVF9OT0RFKCZub2RlLT5saXN0KTsKIAlhdmNfY2FjaGVfc3RhdHNfaW5jcihhbGxvY2F0aW9ucyk7CiAKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmF2Y19jYWNoZS5hY3RpdmVfbm9kZXMpID4gYXZjX2NhY2hlX3RocmVzaG9sZCkKQEAgLTM1NSwyMSArMzU5LDI0IEBACiAJcmV0dXJuIG5vZGU7CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y19ub2RlX3BvcHVsYXRlKHN0cnVjdCBhdmNfbm9kZSAqbm9kZSwgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZjX2VudHJ5ICphZSkKK3N0YXRpYyB2b2lkIGF2Y19ub2RlX3BvcHVsYXRlKHN0cnVjdCBhdmNfbm9kZSAqbm9kZSwgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKIAlub2RlLT5hZS5zc2lkID0gc3NpZDsKIAlub2RlLT5hZS50c2lkID0gdHNpZDsKIAlub2RlLT5hZS50Y2xhc3MgPSB0Y2xhc3M7Ci0JbWVtY3B5KCZub2RlLT5hZS5hdmQsICZhZS0+YXZkLCBzaXplb2Yobm9kZS0+YWUuYXZkKSk7CisJbWVtY3B5KCZub2RlLT5hZS5hdmQsIGF2ZCwgc2l6ZW9mKG5vZGUtPmFlLmF2ZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdmNfbm9kZSAqYXZjX3NlYXJjaF9ub2RlKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcykKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGUsICpyZXQgPSBOVUxMOwogCWludCBodmFsdWU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CiAKIAlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKHNzaWQgPT0gbm9kZS0+YWUuc3NpZCAmJgogCQkgICAgdGNsYXNzID09IG5vZGUtPmFlLnRjbGFzcyAmJgogCQkgICAgdHNpZCA9PSBub2RlLT5hZS50c2lkKSB7CkBAIC0zNzgsMTUgKzM4NSw2IEBACiAJCX0KIAl9CiAKLQlpZiAocmV0ID09IE5VTEwpIHsKLQkJLyogY2FjaGUgbWlzcyAqLwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBjYWNoZSBoaXQgKi8KLQlpZiAoYXRvbWljX3JlYWQoJnJldC0+YWUudXNlZCkgIT0gMSkKLQkJYXRvbWljX3NldCgmcmV0LT5hZS51c2VkLCAxKTsKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTUsMzAgKzM5MywyNSBAQAogICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdHNpZDogdGFyZ2V0IHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0Y2xhc3M6IHRhcmdldCBzZWN1cml0eSBjbGFzcwotICogQHJlcXVlc3RlZDogcmVxdWVzdGVkIHBlcm1pc3Npb25zLCBpbnRlcnByZXRlZCBiYXNlZCBvbiBAdGNsYXNzCiAgKgogICogTG9vayB1cCBhbiBBVkMgZW50cnkgdGhhdCBpcyB2YWxpZCBmb3IgdGhlCi0gKiBAcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJldHdlZW4gdGhlIFNJRCBwYWlyCiAgKiAoQHNzaWQsIEB0c2lkKSwgaW50ZXJwcmV0aW5nIHRoZSBwZXJtaXNzaW9ucwogICogYmFzZWQgb24gQHRjbGFzcy4gIElmIGEgdmFsaWQgQVZDIGVudHJ5IGV4aXN0cywKICAqIHRoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIGF2Y19ub2RlLgogICogT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KICAqLwotc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2xvb2t1cCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQpCitzdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfbG9va3VwKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcykKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CiAKIAlhdmNfY2FjaGVfc3RhdHNfaW5jcihsb29rdXBzKTsKIAlub2RlID0gYXZjX3NlYXJjaF9ub2RlKHNzaWQsIHRzaWQsIHRjbGFzcyk7CiAKLQlpZiAobm9kZSAmJiAoKG5vZGUtPmFlLmF2ZC5kZWNpZGVkICYgcmVxdWVzdGVkKSA9PSByZXF1ZXN0ZWQpKSB7CisJaWYgKG5vZGUpCiAJCWF2Y19jYWNoZV9zdGF0c19pbmNyKGhpdHMpOwotCQlnb3RvIG91dDsKLQl9CisJZWxzZQorCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihtaXNzZXMpOwogCi0Jbm9kZSA9IE5VTEw7Ci0JYXZjX2NhY2hlX3N0YXRzX2luY3IobWlzc2VzKTsKLW91dDoKIAlyZXR1cm4gbm9kZTsKIH0KIApAQCAtNDQ5LDM0ICs0NDIsNDEgQEAKICAqIEBzc2lkOiBzb3VyY2Ugc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKLSAqIEBhZTogQVZDIGVudHJ5CisgKiBAYXZkOiByZXN1bHRpbmcgYXYgZGVjaXNpb24KICAqCiAgKiBJbnNlcnQgYW4gQVZDIGVudHJ5IGZvciB0aGUgU0lEIHBhaXIKICAqIChAc3NpZCwgQHRzaWQpIGFuZCBjbGFzcyBAdGNsYXNzLgogICogVGhlIGFjY2VzcyB2ZWN0b3JzIGFuZCB0aGUgc2VxdWVuY2UgbnVtYmVyIGFyZQogICogbm9ybWFsbHkgcHJvdmlkZWQgYnkgdGhlIHNlY3VyaXR5IHNlcnZlciBpbgogICogcmVzcG9uc2UgdG8gYSBzZWN1cml0eV9jb21wdXRlX2F2KCkgY2FsbC4gIElmIHRoZQotICogc2VxdWVuY2UgbnVtYmVyIEBhZS0+YXZkLnNlcW5vIGlzIG5vdCBsZXNzIHRoYW4gdGhlIGxhdGVzdAorICogc2VxdWVuY2UgbnVtYmVyIEBhdmQtPnNlcW5vIGlzIG5vdCBsZXNzIHRoYW4gdGhlIGxhdGVzdAogICogcmV2b2NhdGlvbiBub3RpZmljYXRpb24sIHRoZW4gdGhlIGZ1bmN0aW9uIGNvcGllcwogICogdGhlIGFjY2VzcyB2ZWN0b3JzIGludG8gYSBjYWNoZSBlbnRyeSwgcmV0dXJucwogICogYXZjX25vZGUgaW5zZXJ0ZWQuIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19pbnNlcnQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZjX2VudHJ5ICphZSkKK3N0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19pbnNlcnQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKnBvcywgKm5vZGUgPSBOVUxMOwogCWludCBodmFsdWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCi0JaWYgKGF2Y19sYXRlc3Rfbm90aWZfdXBkYXRlKGFlLT5hdmQuc2Vxbm8sIDEpKQorCWlmIChhdmNfbGF0ZXN0X25vdGlmX3VwZGF0ZShhdmQtPnNlcW5vLCAxKSkKIAkJZ290byBvdXQ7CiAKIAlub2RlID0gYXZjX2FsbG9jX25vZGUoKTsKIAlpZiAobm9kZSkgewotCQlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCQlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsIGFlKTsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCQlzcGlubG9ja190ICpsb2NrOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCQlodmFsdWUgPSBhdmNfaGFzaChzc2lkLCB0c2lkLCB0Y2xhc3MpOworCQlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsIGF2ZCk7CisKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwkJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdOworCisJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWcpOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJCWlmIChwb3MtPmFlLnNzaWQgPT0gc3NpZCAmJgogCQkJICAgIHBvcy0+YWUudHNpZCA9PSB0c2lkICYmCiAJCQkgICAgcG9zLT5hZS50Y2xhc3MgPT0gdGNsYXNzKSB7CkBAIC00ODQsOSArNDg0LDkgQEAKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQogCQl9Ci0JCWxpc3RfYWRkX3JjdSgmbm9kZS0+bGlzdCwgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdKTsKKwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZub2RlLT5saXN0LCBoZWFkKTsKIGZvdW5kOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIG5vZGU7CkBAIC03NDIsMTcgKzc0MiwyMiBAQAogICogQGV2ZW50IDogVXBkYXRpbmcgZXZlbnQKICAqIEBwZXJtcyA6IFBlcm1pc3Npb24gbWFzayBiaXRzCiAgKiBAc3NpZCxAdHNpZCxAdGNsYXNzIDogaWRlbnRpZmllciBvZiBhbiBBVkMgZW50cnkKKyAqIEBzZXFubyA6IHNlcXVlbmNlIG51bWJlciB3aGVuIGRlY2lzaW9uIHdhcyBtYWRlCiAgKgogICogaWYgYSB2YWxpZCBBVkMgZW50cnkgZG9lc24ndCBleGlzdCx0aGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT0VOVC4KICAqIGlmIGttYWxsb2MoKSBjYWxsZWQgaW50ZXJuYWwgcmV0dXJucyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT01FTS4KICAqIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB1cGRhdGUgdGhlIEFWQyBlbnRyeS4gVGhlIG9yaWdpbmFsIEFWQy1lbnRyeSBvYmplY3QKICAqIHdpbGwgcmVsZWFzZSBsYXRlciBieSBSQ1UuCiAgKi8KLXN0YXRpYyBpbnQgYXZjX3VwZGF0ZV9ub2RlKHUzMiBldmVudCwgdTMyIHBlcm1zLCB1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MpCitzdGF0aWMgaW50IGF2Y191cGRhdGVfbm9kZSh1MzIgZXZlbnQsIHUzMiBwZXJtcywgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLAorCQkJICAgdTMyIHNlcW5vKQogewogCWludCBodmFsdWUsIHJjID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAJc3RydWN0IGF2Y19ub2RlICpwb3MsICpub2RlLCAqb3JpZyA9IE5VTEw7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3BpbmxvY2tfdCAqbG9jazsKIAogCW5vZGUgPSBhdmNfYWxsb2Nfbm9kZSgpOwogCWlmICghbm9kZSkgewpAQCAtNzYyLDEyICs3NjcsMTcgQEAKIAogCS8qIExvY2sgdGhlIHRhcmdldCBzbG90ICovCiAJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KSB7CisJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXTsKKwlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFnKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgbmV4dCwgaGVhZCwgbGlzdCkgewogCQlpZiAoc3NpZCA9PSBwb3MtPmFlLnNzaWQgJiYKIAkJICAgIHRzaWQgPT0gcG9zLT5hZS50c2lkICYmCi0JCSAgICB0Y2xhc3MgPT0gcG9zLT5hZS50Y2xhc3MpeworCQkgICAgdGNsYXNzID09IHBvcy0+YWUudGNsYXNzICYmCisJCSAgICBzZXFubyA9PSBwb3MtPmFlLmF2ZC5zZXFubyl7CiAJCQlvcmlnID0gcG9zOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc4Myw3ICs3OTMsNyBAQAogCSAqIENvcHkgYW5kIHJlcGxhY2Ugb3JpZ2luYWwgbm9kZS4KIAkgKi8KIAotCWF2Y19ub2RlX3BvcHVsYXRlKG5vZGUsIHNzaWQsIHRzaWQsIHRjbGFzcywgJm9yaWctPmFlKTsKKwlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsICZvcmlnLT5hZS5hdmQpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQVZDX0NBTExCQUNLX0dSQU5UOgpAQCAtODA4LDcgKzgxOCw3IEBACiAJfQogCWF2Y19ub2RlX3JlcGxhY2Uobm9kZSwgb3JpZyk7CiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZyk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtODIzLDE4ICs4MzMsMjQgQEAKIAlpbnQgaSwgcmMgPSAwLCB0bXByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCXNwaW5sb2NrX3QgKmxvY2s7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVZDX0NBQ0hFX1NMT1RTOyBpKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldLCBmbGFnKTsKKwkJaGVhZCA9ICZhdmNfY2FjaGUuc2xvdHNbaV07CisJCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZyk7CiAJCS8qCiAJCSAqIFdpdGggcHJlZW1wdGFibGUgUkNVLCB0aGUgb3V0ZXIgc3BpbmxvY2sgZG9lcyBub3QKIAkJICogcHJldmVudCBSQ1UgZ3JhY2UgcGVyaW9kcyBmcm9tIGVuZGluZy4KIAkJICovCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2ldLCBsaXN0KQorCQlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KQogCQkJYXZjX25vZGVfZGVsZXRlKG5vZGUpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV0sIGZsYWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWcpOwogCX0KIAogCWZvciAoYyA9IGF2Y19jYWxsYmFja3M7IGM7IGMgPSBjLT5uZXh0KSB7CkBAIC04NzUsMTAgKzg5MSwxMCBAQAogaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKIAkJCSB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAogCQkJIHVuc2lnbmVkIGZsYWdzLAotCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQorCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqaW5fYXZkKQogewogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgYXZjX2VudHJ5IGVudHJ5LCAqcF9hZTsKKwlzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkX2VudHJ5LCAqYXZkOwogCWludCByYyA9IDA7CiAJdTMyIGRlbmllZDsKIApAQCAtODg2LDI5ICs5MDIsMzQgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCW5vZGUgPSBhdmNfbG9va3VwKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkKTsKKwlub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MpOwogCWlmICghbm9kZSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmZW50cnkuYXZkKTsKKworCQlpZiAoaW5fYXZkKQorCQkJYXZkID0gaW5fYXZkOworCQllbHNlCisJCQlhdmQgPSAmYXZkX2VudHJ5OworCisJCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgYXZkKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJbm9kZSA9IGF2Y19pbnNlcnQoc3NpZCwgdHNpZCwgdGNsYXNzLCAmZW50cnkpOworCQlub2RlID0gYXZjX2luc2VydChzc2lkLCB0c2lkLCB0Y2xhc3MsIGF2ZCk7CisJfSBlbHNlIHsKKwkJaWYgKGluX2F2ZCkKKwkJCW1lbWNweShpbl9hdmQsICZub2RlLT5hZS5hdmQsIHNpemVvZigqaW5fYXZkKSk7CisJCWF2ZCA9ICZub2RlLT5hZS5hdmQ7CiAJfQogCi0JcF9hZSA9IG5vZGUgPyAmbm9kZS0+YWUgOiAmZW50cnk7Ci0KLQlpZiAoYXZkKQotCQltZW1jcHkoYXZkLCAmcF9hZS0+YXZkLCBzaXplb2YoKmF2ZCkpOwotCi0JZGVuaWVkID0gcmVxdWVzdGVkICYgfihwX2FlLT5hdmQuYWxsb3dlZCk7CisJZGVuaWVkID0gcmVxdWVzdGVkICYgfihhdmQtPmFsbG93ZWQpOwogCiAJaWYgKGRlbmllZCkgewogCQlpZiAoZmxhZ3MgJiBBVkNfU1RSSUNUKQogCQkJcmMgPSAtRUFDQ0VTOwogCQllbHNlIGlmICghc2VsaW51eF9lbmZvcmNpbmcgfHwgc2VjdXJpdHlfcGVybWlzc2l2ZV9zaWQoc3NpZCkpCiAJCQlhdmNfdXBkYXRlX25vZGUoQVZDX0NBTExCQUNLX0dSQU5ULCByZXF1ZXN0ZWQsIHNzaWQsCi0JCQkJCXRzaWQsIHRjbGFzcyk7CisJCQkJCXRzaWQsIHRjbGFzcywgYXZkLT5zZXFubyk7CiAJCWVsc2UKIAkJCXJjID0gLUVBQ0NFUzsKIAl9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDA4MTU5Ny4uN2M1MmJhMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtODksNyArODksNyBAQAogI2RlZmluZSBYQVRUUl9TRUxJTlVYX1NVRkZJWCAic2VsaW51eCIKICNkZWZpbmUgWEFUVFJfTkFNRV9TRUxJTlVYIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TRUxJTlVYX1NVRkZJWAogCi0jZGVmaW5lIE5VTV9TRUxfTU5UX09QVFMgNAorI2RlZmluZSBOVU1fU0VMX01OVF9PUFRTIDUKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwb2xpY3lkYl9sb2FkZWRfdmVyc2lvbjsKIGV4dGVybiBpbnQgc2VsaW51eF9ubG1zZ19sb29rdXAodTE2IHNjbGFzcywgdTE2IG5sbXNnX3R5cGUsIHUzMiAqcGVybSk7CkBAIC0zNTMsNiArMzUzLDcgQEAKIAlPcHRfZnNjb250ZXh0ID0gMiwKIAlPcHRfZGVmY29udGV4dCA9IDMsCiAJT3B0X3Jvb3Rjb250ZXh0ID0gNCwKKwlPcHRfbGFiZWxzdXBwb3J0ID0gNSwKIH07CiAKIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTM2MCw2ICszNjEsNyBAQAogCXtPcHRfZnNjb250ZXh0LCBGU0NPTlRFWFRfU1RSICIlcyJ9LAogCXtPcHRfZGVmY29udGV4dCwgREVGQ09OVEVYVF9TVFIgIiVzIn0sCiAJe09wdF9yb290Y29udGV4dCwgUk9PVENPTlRFWFRfU1RSICIlcyJ9LAorCXtPcHRfbGFiZWxzdXBwb3J0LCBMQUJFTFNVUFBfU1RSfSwKIAl7T3B0X2Vycm9yLCBOVUxMfSwKIH07CiAKQEAgLTQzMSw3ICs0MzMsNyBAQAogCQl9CiAJfQogCi0Jc2JzZWMtPmluaXRpYWxpemVkID0gMTsKKwlzYnNlYy0+ZmxhZ3MgfD0gKFNFX1NCSU5JVElBTElaRUQgfCBTRV9TQkxBQkVMU1VQUCk7CiAKIAlpZiAoc2JzZWMtPmJlaGF2aW9yID4gQVJSQVlfU0laRShsYWJlbGluZ19iZWhhdmlvcnMpKQogCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGluaXRpYWxpemVkIChkZXYgJXMsIHR5cGUgJXMpLCB1bmtub3duIGJlaGF2aW9yXG4iLApAQCAtNDQxLDYgKzQ0MywxMiBAQAogCQkgICAgICAgc2ItPnNfaWQsIHNiLT5zX3R5cGUtPm5hbWUsCiAJCSAgICAgICBsYWJlbGluZ19iZWhhdmlvcnNbc2JzZWMtPmJlaGF2aW9yLTFdKTsKIAorCWlmIChzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX0dFTkZTIHx8CisJICAgIHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQgfHwKKwkgICAgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9OT05FIHx8CisJICAgIHNic2VjLT5iZWhhdmlvciA+IEFSUkFZX1NJWkUobGFiZWxpbmdfYmVoYXZpb3JzKSkKKwkJc2JzZWMtPmZsYWdzICY9IH5TRV9TQkxBQkVMU1VQUDsKKwogCS8qIEluaXRpYWxpemUgdGhlIHJvb3QgaW5vZGUuICovCiAJcmMgPSBpbm9kZV9kb2luaXRfd2l0aF9kZW50cnkocm9vdF9pbm9kZSwgcm9vdCk7CiAKQEAgLTQ4NywyMyArNDk1LDIyIEBACiAKIAlzZWN1cml0eV9pbml0X21udF9vcHRzKG9wdHMpOwogCi0JaWYgKCFzYnNlYy0+aW5pdGlhbGl6ZWQpCisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzc19pbml0aWFsaXplZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIGlmIHdlIGV2ZXIgdXNlIHNic2VjIGZsYWdzIGZvciBhbnl0aGluZyBvdGhlciB0aGFuIHRyYWNraW5nIG1vdW50Ci0JICogc2V0dGluZ3MgdGhpcyBpcyBnb2luZyB0byBuZWVkIGEgbWFzawotCSAqLwotCXRtcCA9IHNic2VjLT5mbGFnczsKKwl0bXAgPSBzYnNlYy0+ZmxhZ3MgJiBTRV9NTlRNQVNLOwogCS8qIGNvdW50IHRoZSBudW1iZXIgb2YgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBzYiAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJaWYgKHRtcCAmIDB4MDEpCiAJCQlvcHRzLT5udW1fbW50X29wdHMrKzsKIAkJdG1wID4+PSAxOwogCX0KKwkvKiBDaGVjayBpZiB0aGUgTGFiZWwgc3VwcG9ydCBmbGFnIGlzIHNldCAqLworCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkKKwkJb3B0cy0+bnVtX21udF9vcHRzKys7CiAKIAlvcHRzLT5tbnRfb3B0cyA9IGtjYWxsb2Mob3B0cy0+bnVtX21udF9vcHRzLCBzaXplb2YoY2hhciAqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFvcHRzLT5tbnRfb3B0cykgewpAQCAtNTQ5LDYgKzU1NiwxMCBAQAogCQlvcHRzLT5tbnRfb3B0c1tpXSA9IGNvbnRleHQ7CiAJCW9wdHMtPm1udF9vcHRzX2ZsYWdzW2krK10gPSBST09UQ09OVEVYVF9NTlQ7CiAJfQorCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkgeworCQlvcHRzLT5tbnRfb3B0c1tpXSA9IE5VTEw7CisJCW9wdHMtPm1udF9vcHRzX2ZsYWdzW2krK10gPSBTRV9TQkxBQkVMU1VQUDsKKwl9CiAKIAlCVUdfT04oaSAhPSBvcHRzLT5udW1fbW50X29wdHMpOwogCkBAIC01NjIsOCArNTczLDEwIEBACiBzdGF0aWMgaW50IGJhZF9vcHRpb24oc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYywgY2hhciBmbGFnLAogCQkgICAgICB1MzIgb2xkX3NpZCwgdTMyIG5ld19zaWQpCiB7CisJY2hhciBtbnRfZmxhZ3MgPSBzYnNlYy0+ZmxhZ3MgJiBTRV9NTlRNQVNLOworCiAJLyogY2hlY2sgaWYgdGhlIG9sZCBtb3VudCBjb21tYW5kIGhhZCB0aGUgc2FtZSBvcHRpb25zICovCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCkKKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkKIAkJaWYgKCEoc2JzZWMtPmZsYWdzICYgZmxhZykgfHwKIAkJICAgIChvbGRfc2lkICE9IG5ld19zaWQpKQogCQkJcmV0dXJuIDE7CkBAIC01NzEsOCArNTg0LDggQEAKIAkvKiBjaGVjayBpZiB3ZSB3ZXJlIHBhc3NlZCB0aGUgc2FtZSBvcHRpb25zIHR3aWNlLAogCSAqIGFrYSBzb21lb25lIHBhc3NlZCBjb250ZXh0PWEsY29udGV4dD1iCiAJICovCi0JaWYgKCFzYnNlYy0+aW5pdGlhbGl6ZWQpCi0JCWlmIChzYnNlYy0+ZmxhZ3MgJiBmbGFnKQorCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKQorCQlpZiAobW50X2ZsYWdzICYgZmxhZykKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNjI2LDcgKzYzOSw3IEBACiAJICogdGhpcyBzYiBkb2VzIG5vdCBzZXQgYW55IHNlY3VyaXR5IG9wdGlvbnMuICAoVGhlIGZpcnN0IG9wdGlvbnMKIAkgKiB3aWxsIGJlIHVzZWQgZm9yIGJvdGggbW91bnRzKQogCSAqLwotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQgJiYgKHNiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSkKKwlpZiAoKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpICYmIChzYi0+c190eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpCiAJICAgICYmIChudW1fb3B0cyA9PSAwKSkKIAkJZ290byBvdXQ7CiAKQEAgLTYzNyw2ICs2NTAsOSBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fb3B0czsgaSsrKSB7CiAJCXUzMiBzaWQ7CisKKwkJaWYgKGZsYWdzW2ldID09IFNFX1NCTEFCRUxTVVBQKQorCQkJY29udGludWU7CiAJCXJjID0gc2VjdXJpdHlfY29udGV4dF90b19zaWQobW91bnRfb3B0aW9uc1tpXSwKIAkJCQkJICAgICBzdHJsZW4obW91bnRfb3B0aW9uc1tpXSksICZzaWQpOwogCQlpZiAocmMpIHsKQEAgLTY5MCwxOSArNzA2LDE5IEBACiAJCX0KIAl9CiAKLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpIHsKIAkJLyogcHJldmlvdXNseSBtb3VudGVkIHdpdGggb3B0aW9ucywgYnV0IG5vdCBvbiB0aGlzIGF0dGVtcHQ/ICovCi0JCWlmIChzYnNlYy0+ZmxhZ3MgJiYgIW51bV9vcHRzKQorCQlpZiAoKHNic2VjLT5mbGFncyAmIFNFX01OVE1BU0spICYmICFudW1fb3B0cykKIAkJCWdvdG8gb3V0X2RvdWJsZV9tb3VudDsKIAkJcmMgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoc3RyY21wKHNiLT5zX3R5cGUtPm5hbWUsICJwcm9jIikgPT0gMCkKLQkJc2JzZWMtPnByb2MgPSAxOworCQlzYnNlYy0+ZmxhZ3MgfD0gU0VfU0JQUk9DOwogCiAJLyogRGV0ZXJtaW5lIHRoZSBsYWJlbGluZyBiZWhhdmlvciB0byB1c2UgZm9yIHRoaXMgZmlsZXN5c3RlbSB0eXBlLiAqLwotCXJjID0gc2VjdXJpdHlfZnNfdXNlKHNic2VjLT5wcm9jID8gInByb2MiIDogc2ItPnNfdHlwZS0+bmFtZSwgJnNic2VjLT5iZWhhdmlvciwgJnNic2VjLT5zaWQpOworCXJjID0gc2VjdXJpdHlfZnNfdXNlKChzYnNlYy0+ZmxhZ3MgJiBTRV9TQlBST0MpID8gInByb2MiIDogc2ItPnNfdHlwZS0+bmFtZSwgJnNic2VjLT5iZWhhdmlvciwgJnNic2VjLT5zaWQpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc2VjdXJpdHlfZnNfdXNlKCVzKSByZXR1cm5lZCAlZFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBzYi0+c190eXBlLT5uYW1lLCByYyk7CkBAIC04MDYsMTAgKzgyMiwxMCBAQAogCX0KIAogCS8qIGhvdyBjYW4gd2UgY2xvbmUgaWYgdGhlIG9sZCBvbmUgd2Fzbid0IHNldCB1cD8/ICovCi0JQlVHX09OKCFvbGRzYnNlYy0+aW5pdGlhbGl6ZWQpOworCUJVR19PTighKG9sZHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKTsKIAogCS8qIGlmIGZzIGlzIHJldXNpbmcgYSBzYiwganVzdCBsZXQgaXRzIG9wdGlvbnMgc3RhbmQuLi4gKi8KLQlpZiAobmV3c2JzZWMtPmluaXRpYWxpemVkKQorCWlmIChuZXdzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZuZXdzYnNlYy0+bG9jayk7CkBAIC05MTcsNyArOTMzLDggQEAKIAkJCQlnb3RvIG91dF9lcnI7CiAJCQl9CiAJCQlicmVhazsKLQorCQljYXNlIE9wdF9sYWJlbHN1cHBvcnQ6CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJjID0gLUVJTlZBTDsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICB1bmtub3duIG1vdW50IG9wdGlvblxuIik7CkBAIC05OTksNyArMTAxNiwxMiBAQAogCWNoYXIgKnByZWZpeDsKIAogCWZvciAoaSA9IDA7IGkgPCBvcHRzLT5udW1fbW50X29wdHM7IGkrKykgewotCQljaGFyICpoYXNfY29tbWEgPSBzdHJjaHIob3B0cy0+bW50X29wdHNbaV0sICcsJyk7CisJCWNoYXIgKmhhc19jb21tYTsKKworCQlpZiAob3B0cy0+bW50X29wdHNbaV0pCisJCQloYXNfY29tbWEgPSBzdHJjaHIob3B0cy0+bW50X29wdHNbaV0sICcsJyk7CisJCWVsc2UKKwkJCWhhc19jb21tYSA9IE5VTEw7CiAKIAkJc3dpdGNoIChvcHRzLT5tbnRfb3B0c19mbGFnc1tpXSkgewogCQljYXNlIENPTlRFWFRfTU5UOgpAQCAtMTAxNCw2ICsxMDM2LDEwIEBACiAJCWNhc2UgREVGQ09OVEVYVF9NTlQ6CiAJCQlwcmVmaXggPSBERUZDT05URVhUX1NUUjsKIAkJCWJyZWFrOworCQljYXNlIFNFX1NCTEFCRUxTVVBQOgorCQkJc2VxX3B1dGMobSwgJywnKTsKKwkJCXNlcV9wdXRzKG0sIExBQkVMU1VQUF9TVFIpOworCQkJY29udGludWU7CiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKIAkJfTsKQEAgLTEyMDksNyArMTIzNSw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCXNic2VjID0gaW5vZGUtPmlfc2ItPnNfc2VjdXJpdHk7Ci0JaWYgKCFzYnNlYy0+aW5pdGlhbGl6ZWQpIHsKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSkgewogCQkvKiBEZWZlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzZWxpbnV4X2NvbXBsZXRlX2luaXQsCiAJCSAgIGFmdGVyIHRoZSBpbml0aWFsIHBvbGljeSBpcyBsb2FkZWQgYW5kIHRoZSBzZWN1cml0eQogCQkgICBzZXJ2ZXIgaXMgcmVhZHkgdG8gaGFuZGxlIGNhbGxzLiAqLwpAQCAtMTIzNywxOSArMTI2MywyNiBAQAogCQkJZGVudHJ5ID0gZF9maW5kX2FsaWFzKGlub2RlKTsKIAkJfQogCQlpZiAoIWRlbnRyeSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICBubyBkZW50cnkgZm9yIGRldj0lcyAiCi0JCQkgICAgICAgImlubz0lbGRcbiIsIF9fZnVuY19fLCBpbm9kZS0+aV9zYi0+c19pZCwKLQkJCSAgICAgICBpbm9kZS0+aV9pbm8pOworCQkJLyoKKwkJCSAqIHRoaXMgaXMgY2FuIGJlIGhpdCBvbiBib290IHdoZW4gYSBmaWxlIGlzIGFjY2Vzc2VkCisJCQkgKiBiZWZvcmUgdGhlIHBvbGljeSBpcyBsb2FkZWQuICBXaGVuIHdlIGxvYWQgcG9saWN5IHdlCisJCQkgKiBtYXkgZmluZCBpbm9kZXMgdGhhdCBoYXZlIG5vIGRlbnRyeSBvbiB0aGUKKwkJCSAqIHNic2VjLT5pc2VjX2hlYWQgbGlzdC4gIE5vIHJlYXNvbiB0byBjb21wbGFpbiBhcyB0aGVzZQorCQkJICogd2lsbCBnZXQgZml4ZWQgdXAgdGhlIG5leHQgdGltZSB3ZSBnbyB0aHJvdWdoCisJCQkgKiBpbm9kZV9kb2luaXQgd2l0aCBhIGRlbnRyeSwgYmVmb3JlIHRoZXNlIGlub2RlcyBjb3VsZAorCQkJICogYmUgdXNlZCBhZ2FpbiBieSB1c2Vyc3BhY2UuCisJCQkgKi8KIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCiAJCWxlbiA9IElOSVRDT05URVhUTEVOOwotCQljb250ZXh0ID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwkJY29udGV4dCA9IGttYWxsb2MobGVuKzEsIEdGUF9OT0ZTKTsKIAkJaWYgKCFjb250ZXh0KSB7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlkcHV0KGRlbnRyeSk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KKwkJY29udGV4dFtsZW5dID0gJ1wwJzsKIAkJcmMgPSBpbm9kZS0+aV9vcC0+Z2V0eGF0dHIoZGVudHJ5LCBYQVRUUl9OQU1FX1NFTElOVVgsCiAJCQkJCSAgIGNvbnRleHQsIGxlbik7CiAJCWlmIChyYyA9PSAtRVJBTkdFKSB7CkBAIC0xMjYyLDEyICsxMjk1LDEzIEBACiAJCQl9CiAJCQlrZnJlZShjb250ZXh0KTsKIAkJCWxlbiA9IHJjOwotCQkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CisJCQljb250ZXh0ID0ga21hbGxvYyhsZW4rMSwgR0ZQX05PRlMpOwogCQkJaWYgKCFjb250ZXh0KSB7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJCWRwdXQoZGVudHJ5KTsKIAkJCQlnb3RvIG91dF91bmxvY2s7CiAJCQl9CisJCQljb250ZXh0W2xlbl0gPSAnXDAnOwogCQkJcmMgPSBpbm9kZS0+aV9vcC0+Z2V0eGF0dHIoZGVudHJ5LAogCQkJCQkJICAgWEFUVFJfTkFNRV9TRUxJTlVYLAogCQkJCQkJICAgY29udGV4dCwgbGVuKTsKQEAgLTEyODksMTAgKzEzMjMsMTkgQEAKIAkJCQkJCQkgICAgIHNic2VjLT5kZWZfc2lkLAogCQkJCQkJCSAgICAgR0ZQX05PRlMpOwogCQkJaWYgKHJjKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICBjb250ZXh0X3RvX3NpZCglcykgIgotCQkJCSAgICAgICAicmV0dXJuZWQgJWQgZm9yIGRldj0lcyBpbm89JWxkXG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywgY29udGV4dCwgLXJjLAotCQkJCSAgICAgICBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKKwkJCQljaGFyICpkZXYgPSBpbm9kZS0+aV9zYi0+c19pZDsKKwkJCQl1bnNpZ25lZCBsb25nIGlubyA9IGlub2RlLT5pX2lubzsKKworCQkJCWlmIChyYyA9PSAtRUlOVkFMKSB7CisJCQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNFTGludXg6IGlub2RlPSVsdSBvbiBkZXY9JXMgd2FzIGZvdW5kIHRvIGhhdmUgYW4gaW52YWxpZCAiCisJCQkJCQkJImNvbnRleHQ9JXMuICBUaGlzIGluZGljYXRlcyB5b3UgbWF5IG5lZWQgdG8gcmVsYWJlbCB0aGUgaW5vZGUgb3IgdGhlICIKKwkJCQkJCQkiZmlsZXN5c3RlbSBpbiBxdWVzdGlvbi5cbiIsIGlubywgZGV2LCBjb250ZXh0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAlczogIGNvbnRleHRfdG9fc2lkKCVzKSAiCisJCQkJCSAgICAgICAicmV0dXJuZWQgJWQgZm9yIGRldj0lcyBpbm89JWxkXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18sIGNvbnRleHQsIC1yYywgZGV2LCBpbm8pOworCQkJCX0KIAkJCQlrZnJlZShjb250ZXh0KTsKIAkJCQkvKiBMZWF2ZSB3aXRoIHRoZSB1bmxhYmVsZWQgU0lEICovCiAJCQkJcmMgPSAwOwpAQCAtMTMyNiw3ICsxMzY5LDcgQEAKIAkJLyogRGVmYXVsdCB0byB0aGUgZnMgc3VwZXJibG9jayBTSUQuICovCiAJCWlzZWMtPnNpZCA9IHNic2VjLT5zaWQ7CiAKLQkJaWYgKHNic2VjLT5wcm9jICYmICFTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCWlmICgoc2JzZWMtPmZsYWdzICYgU0VfU0JQUk9DKSAmJiAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgewogCQkJc3RydWN0IHByb2NfaW5vZGUgKnByb2NpID0gUFJPQ19JKGlub2RlKTsKIAkJCWlmIChwcm9jaS0+cGRlKSB7CiAJCQkJaXNlYy0+c2NsYXNzID0gaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhpbm9kZS0+aV9tb2RlKTsKQEAgLTE1ODcsNyArMTYzMCw3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoIW5ld3NpZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKSB7CisJaWYgKCFuZXdzaWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpIHsKIAkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwgdGNsYXNzLCAmbmV3c2lkKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwpAQCAtMTgwMSw2ICsxODQ0LDggQEAKIAkJCWF2IHw9IEZJRk9fRklMRV9fT1BFTjsKIAkJZWxzZSBpZiAoU19JU0RJUihtb2RlKSkKIAkJCWF2IHw9IERJUl9fT1BFTjsKKwkJZWxzZSBpZiAoU19JU1NPQ0sobW9kZSkpCisJCQlhdiB8PSBTT0NLX0ZJTEVfX09QRU47CiAJCWVsc2UKIAkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogV0FSTklORzogaW5zaWRlICVzIHdpdGggIgogCQkJCSJ1bmtub3duIG1vZGU6JW9cbiIsIF9fZnVuY19fLCBtb2RlKTsKQEAgLTE4MTUsNyArMTg2MCw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5wdHJhY2VfbWF5X2FjY2VzcyhjaGlsZCwgbW9kZSk7CisJcmMgPSBjYXBfcHRyYWNlX21heV9hY2Nlc3MoY2hpbGQsIG1vZGUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xODMyLDcgKzE4NzcsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+cHRyYWNlX3RyYWNlbWUocGFyZW50KTsKKwlyYyA9IGNhcF9wdHJhY2VfdHJhY2VtZShwYXJlbnQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xODQ4LDcgKzE4OTMsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmNhcGdldCh0YXJnZXQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CisJcmV0dXJuIGNhcF9jYXBnZXQodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfY2Fwc2V0KHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCkBAIC0xODU4LDcgKzE5MDMsNyBAQAogewogCWludCBlcnJvcjsKIAotCWVycm9yID0gc2Vjb25kYXJ5X29wcy0+Y2Fwc2V0KG5ldywgb2xkLAorCWVycm9yID0gY2FwX2NhcHNldChuZXcsIG9sZCwKIAkJCQkgICAgICBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtMTg2NiwxMiArMTkxMSwyMiBAQAogCXJldHVybiBjcmVkX2hhc19wZXJtKG9sZCwgbmV3LCBQUk9DRVNTX19TRVRDQVApOwogfQogCisvKgorICogKFRoaXMgY29tbWVudCB1c2VkIHRvIGxpdmUgd2l0aCB0aGUgc2VsaW51eF90YXNrX3NldHVpZCBob29rLAorICogd2hpY2ggd2FzIHJlbW92ZWQpLgorICoKKyAqIFNpbmNlIHNldHVpZCBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgcHJvY2VzcywgYW5kIHNpbmNlIHRoZSBTRUxpbnV4CisgKiBjb250cm9scyBhcmUgbm90IGJhc2VkIG9uIHRoZSBMaW51eCBpZGVudGl0eSBhdHRyaWJ1dGVzLCBTRUxpbnV4IGRvZXMgbm90CisgKiBuZWVkIHRvIGNvbnRyb2wgdGhpcyBvcGVyYXRpb24uICBIb3dldmVyLCBTRUxpbnV4IGRvZXMgY29udHJvbCB0aGUgdXNlIG9mCisgKiB0aGUgQ0FQX1NFVFVJRCBhbmQgQ0FQX1NFVEdJRCBjYXBhYmlsaXRpZXMgdXNpbmcgdGhlIGNhcGFibGUgaG9vay4KKyAqLworCiBzdGF0aWMgaW50IHNlbGludXhfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkgICBpbnQgY2FwLCBpbnQgYXVkaXQpCiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5jYXBhYmxlKHRzaywgY3JlZCwgY2FwLCBhdWRpdCk7CisJcmMgPSBjYXBfY2FwYWJsZSh0c2ssIGNyZWQsIGNhcCwgYXVkaXQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xOTk3LDcgKzIwNTIsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+c3lzbG9nKHR5cGUpOworCXJjID0gY2FwX3N5c2xvZyh0eXBlKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjAyOCwxMCArMjA4Myw2IEBACiAgKiBtYXBwaW5nLiAwIG1lYW5zIHRoZXJlIGlzIGVub3VnaCBtZW1vcnkgZm9yIHRoZSBhbGxvY2F0aW9uIHRvCiAgKiBzdWNjZWVkIGFuZCAtRU5PTUVNIGltcGxpZXMgdGhlcmUgaXMgbm90LgogICoKLSAqIE5vdGUgdGhhdCBzZWNvbmRhcnlfb3BzLT5jYXBhYmxlIGFuZCB0YXNrX2hhc19wZXJtX25vYXVkaXQgcmV0dXJuIDAKLSAqIGlmIHRoZSBjYXBhYmlsaXR5IGlzIGdyYW50ZWQsIGJ1dCBfX3ZtX2Vub3VnaF9tZW1vcnkgcmVxdWlyZXMgMSBpZgotICogdGhlIGNhcGFiaWxpdHkgaXMgZ3JhbnRlZC4KLSAqCiAgKiBEbyBub3QgYXVkaXQgdGhlIHNlbGludXggcGVybWlzc2lvbiBjaGVjaywgYXMgdGhpcyBpcyBhcHBsaWVkIHRvIGFsbAogICogcHJvY2Vzc2VzIHRoYXQgYWxsb2NhdGUgbWFwcGluZ3MuCiAgKi8KQEAgLTIwNTgsNyArMjEwOSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGJwcm0tPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5icHJtX3NldF9jcmVkcyhicHJtKTsKKwlyYyA9IGNhcF9icHJtX3NldF9jcmVkcyhicHJtKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjE1NiwxMSArMjIwNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9icHJtX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmJwcm1fY2hlY2tfc2VjdXJpdHkoYnBybSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF9icHJtX3NlY3VyZWV4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwpAQCAtMjE4MCw3ICsyMjI2LDcgQEAKIAkJCQkJUFJPQ0VTU19fTk9BVFNFQ1VSRSwgTlVMTCk7CiAJfQogCi0JcmV0dXJuIChhdHNlY3VyZSB8fCBzZWNvbmRhcnlfb3BzLT5icHJtX3NlY3VyZWV4ZWMoYnBybSkpOworCXJldHVybiAoYXRzZWN1cmUgfHwgY2FwX2Jwcm1fc2VjdXJlZXhlYyhicHJtKSk7CiB9CiAKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKnNlbGludXhmc19tb3VudDsKQEAgLTIyOTAsOCArMjMzNiw2IEBACiAJc3RydWN0IHJsaW1pdCAqcmxpbSwgKmluaXRybGltOwogCWludCByYywgaTsKIAotCXNlY29uZGFyeV9vcHMtPmJwcm1fY29tbWl0dGluZ19jcmVkcyhicHJtKTsKLQogCW5ld190c2VjID0gYnBybS0+Y3JlZC0+c2VjdXJpdHk7CiAJaWYgKG5ld190c2VjLT5zaWQgPT0gbmV3X3RzZWMtPm9zaWQpCiAJCXJldHVybjsKQEAgLTIzMzcsOCArMjM4MSw2IEBACiAJaW50IHJjLCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzZWNvbmRhcnlfb3BzLT5icHJtX2NvbW1pdHRlZF9jcmVkcyhicHJtKTsKLQogCW9zaWQgPSB0c2VjLT5vc2lkOwogCXNpZCA9IHRzZWMtPnNpZDsKIApAQCAtMjQwMCw3ICsyNDQyLDggQEAKIAlyZXR1cm4gKG1hdGNoX3ByZWZpeChDT05URVhUX1NUUiwgc2l6ZW9mKENPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKIAkJbWF0Y2hfcHJlZml4KEZTQ09OVEVYVF9TVFIsIHNpemVvZihGU0NPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKIAkJbWF0Y2hfcHJlZml4KERFRkNPTlRFWFRfU1RSLCBzaXplb2YoREVGQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAotCQltYXRjaF9wcmVmaXgoUk9PVENPTlRFWFRfU1RSLCBzaXplb2YoUk9PVENPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikpOworCQltYXRjaF9wcmVmaXgoUk9PVENPTlRFWFRfU1RSLCBzaXplb2YoUk9PVENPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKKwkJbWF0Y2hfcHJlZml4KExBQkVMU1VQUF9TVFIsIHNpemVvZihMQUJFTFNVUFBfU1RSKS0xLCBvcHRpb24sIGxlbikpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGFrZV9vcHRpb24oY2hhciAqKnRvLCBjaGFyICpmcm9tLCBpbnQgKmZpcnN0LCBpbnQgbGVuKQpAQCAtMjUxMywxMSArMjU1Niw2IEBACiAJCQkgdm9pZCAqZGF0YSkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+c2JfbW91bnQoZGV2X25hbWUsIHBhdGgsIHR5cGUsIGZsYWdzLCBkYXRhKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChmbGFncyAmIE1TX1JFTU9VTlQpCiAJCXJldHVybiBzdXBlcmJsb2NrX2hhc19wZXJtKGNyZWQsIHBhdGgtPm1udC0+bW50X3NiLApAQCAtMjUzMCwxMSArMjU2OCw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfdW1vdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgZmxhZ3MpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNiX3Vtb3VudChtbnQsIGZsYWdzKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCXJldHVybiBzdXBlcmJsb2NrX2hhc19wZXJtKGNyZWQsIG1udC0+bW50X3NiLAogCQkJCSAgIEZJTEVTWVNURU1fX1VOTU9VTlQsIE5VTEwpOwpAQCAtMjU3MCw3ICsyNjAzLDcgQEAKIAlzaWQgPSB0c2VjLT5zaWQ7CiAJbmV3c2lkID0gdHNlYy0+Y3JlYXRlX3NpZDsKIAotCWlmICghbmV3c2lkIHx8IHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpIHsKKwlpZiAoIW5ld3NpZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkgewogCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLAogCQkJCQkgICAgIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MoaW5vZGUtPmlfbW9kZSksCiAJCQkJCSAgICAgJm5ld3NpZCk7CkBAIC0yNTg1LDE0ICsyNjE4LDE0IEBACiAJfQogCiAJLyogUG9zc2libHkgZGVmZXIgaW5pdGlhbGl6YXRpb24gdG8gc2VsaW51eF9jb21wbGV0ZV9pbml0LiAqLwotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQpIHsKKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkgewogCQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaW5vZGUtPmlfc2VjdXJpdHk7CiAJCWlzZWMtPnNjbGFzcyA9IGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MoaW5vZGUtPmlfbW9kZSk7CiAJCWlzZWMtPnNpZCA9IG5ld3NpZDsKIAkJaXNlYy0+aW5pdGlhbGl6ZWQgPSAxOwogCX0KIAotCWlmICghc3NfaW5pdGlhbGl6ZWQgfHwgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkKKwlpZiAoIXNzX2luaXRpYWxpemVkIHx8ICEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAobmFtZSkgewpAQCAtMjYyMiwyMSArMjY1NSwxMSBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX3VubGluayhkaXIsIGRlbnRyeSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIApAQCAtMjY1NywxMiArMjY4MCw2IEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7CiB9CiAKQEAgLTI2ODIsMjIgKzI2OTksMTMgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5hbWVpZGF0YSkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfZm9sbG93X2xpbmsoZGVudHJ5LCBuYW1laWRhdGEpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCXJldHVybiBkZW50cnlfaGFzX3Blcm0oY3JlZCwgTlVMTCwgZGVudHJ5LCBGSUxFX19SRUFEKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKCFtYXNrKSB7CiAJCS8qIE5vIHBlcm1pc3Npb24gdG8gY2hlY2suICBFeGlzdGVuY2UgdGVzdC4gKi8KQEAgLTI3MTEsMTEgKzI3MTksNiBAQAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9zZXRhdHRyKGRlbnRyeSwgaWF0dHIpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfRk9SQ0UpCiAJCXJldHVybiAwOwpAQCAtMjc2OSw3ICsyNzcyLDcgQEAKIAkJcmV0dXJuIHNlbGludXhfaW5vZGVfc2V0b3RoZXJ4YXR0cihkZW50cnksIG5hbWUpOwogCiAJc2JzZWMgPSBpbm9kZS0+aV9zYi0+c19zZWN1cml0eTsKLQlpZiAoc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKQEAgLTI5MzEsMTYgKzI5MzQsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9uZWVkX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+aW5vZGVfbmVlZF9raWxscHJpdihkZW50cnkpOwotfQotCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfa2lsbHByaXYoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5pbm9kZV9raWxscHJpdihkZW50cnkpOwotfQotCiBzdGF0aWMgdm9pZCBzZWxpbnV4X2lub2RlX2dldHNlY2lkKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqc2VjaWQpCiB7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwpAQCAtMzA3OCwxOCArMzA3MSwxMyBAQAogCQkJCSB1bnNpZ25lZCBsb25nIHByb3QpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmZpbGVfbXByb3RlY3Qodm1hLCByZXFwcm90LCBwcm90KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChzZWxpbnV4X2NoZWNrcmVxcHJvdCkKIAkJcHJvdCA9IHJlcXByb3Q7CiAKICNpZm5kZWYgQ09ORklHX1BQQzMyCiAJaWYgKChwcm90ICYgUFJPVF9FWEVDKSAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSkgewotCQlyYyA9IDA7CisJCWludCByYyA9IDA7CiAJCWlmICh2bWEtPnZtX3N0YXJ0ID49IHZtYS0+dm1fbW0tPnN0YXJ0X2JyayAmJgogCQkgICAgdm1hLT52bV9lbmQgPD0gdm1hLT52bV9tbS0+YnJrKSB7CiAJCQlyYyA9IGNyZWRfaGFzX3Blcm0oY3JlZCwgY3JlZCwgUFJPQ0VTU19fRVhFQ0hFQVApOwpAQCAtMzIzOSwxMiArMzIyNyw2IEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX2NyZWF0ZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzKQogewotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19jcmVhdGUoY2xvbmVfZmxhZ3MpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJcmV0dXJuIGN1cnJlbnRfaGFzX3Blcm0oY3VycmVudCwgUFJPQ0VTU19fRk9SSyk7CiB9CiAKQEAgLTMyNzgsMTQgKzMyNjAsNiBAQAogfQogCiAvKgotICogY29tbWl0IG5ldyBjcmVkZW50aWFscwotICovCi1zdGF0aWMgdm9pZCBzZWxpbnV4X2NyZWRfY29tbWl0KHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCi17Ci0Jc2Vjb25kYXJ5X29wcy0+Y3JlZF9jb21taXQobmV3LCBvbGQpOwotfQotCi0vKgogICogc2V0IHRoZSBzZWN1cml0eSBkYXRhIGZvciBhIGtlcm5lbCBzZXJ2aWNlCiAgKiAtIGFsbCB0aGUgY3JlYXRpb24gY29udGV4dHMgYXJlIHNldCB0byB1bmxhYmVsbGVkCiAgKi8KQEAgLTMzMjksMjkgKzMzMDMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19zZXR1aWQodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwgaW50IGZsYWdzKQotewotCS8qIFNpbmNlIHNldHVpZCBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgcHJvY2VzcywgYW5kCi0JICAgc2luY2UgdGhlIFNFTGludXggY29udHJvbHMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgTGludXgKLQkgICBpZGVudGl0eSBhdHRyaWJ1dGVzLCBTRUxpbnV4IGRvZXMgbm90IG5lZWQgdG8gY29udHJvbAotCSAgIHRoaXMgb3BlcmF0aW9uLiAgSG93ZXZlciwgU0VMaW51eCBkb2VzIGNvbnRyb2wgdGhlIHVzZQotCSAgIG9mIHRoZSBDQVBfU0VUVUlEIGFuZCBDQVBfU0VUR0lEIGNhcGFiaWxpdGllcyB1c2luZyB0aGUKLQkgICBjYXBhYmxlIGhvb2suICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX2ZpeF9zZXR1aWQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKLQkJCQkgICBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPnRhc2tfZml4X3NldHVpZChuZXcsIG9sZCwgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRnaWQoZ2lkX3QgaWQwLCBnaWRfdCBpZDEsIGdpZF90IGlkMiwgaW50IGZsYWdzKQotewotCS8qIFNlZSB0aGUgY29tbWVudCBmb3Igc2V0dWlkIGFib3ZlLiAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRwZ2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcGlkX3QgcGdpZCkKIHsKIAlyZXR1cm4gY3VycmVudF9oYXNfcGVybShwLCBQUk9DRVNTX19TRVRQR0lEKTsKQEAgLTMzNzIsMTcgKzMzMjMsMTEgQEAKIAkqc2VjaWQgPSB0YXNrX3NpZChwKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0Z3JvdXBzKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQotewotCS8qIFNlZSB0aGUgY29tbWVudCBmb3Igc2V0dWlkIGFib3ZlLiAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRuaWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2UpCiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldG5pY2UocCwgbmljZSk7CisJcmMgPSBjYXBfdGFza19zZXRuaWNlKHAsIG5pY2UpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zMzkzLDcgKzMzMzgsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRpb3ByaW8ocCwgaW9wcmlvKTsKKwlyYyA9IGNhcF90YXNrX3NldGlvcHJpbyhwLCBpb3ByaW8pOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zNDA4LDExICszMzUzLDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKm5ld19ybGltKQogewogCXN0cnVjdCBybGltaXQgKm9sZF9ybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltICsgcmVzb3VyY2U7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldHJsaW1pdChyZXNvdXJjZSwgbmV3X3JsaW0pOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJLyogQ29udHJvbCB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIGhhcmQgbGltaXQgKHdoZXRoZXIKIAkgICBsb3dlcmluZyBvciByYWlzaW5nIGl0KSwgc28gdGhhdCB0aGUgaGFyZCBsaW1pdCBjYW4KQEAgLTM0MjgsNyArMzM2OCw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksIGxwKTsKKwlyYyA9IGNhcF90YXNrX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksIGxwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzQ1MSwxMCArMzM5MSw2IEBACiAJdTMyIHBlcm07CiAJaW50IHJjOwogCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlpZiAoIXNpZykKIAkJcGVybSA9IFBST0NFU1NfX1NJR05VTEw7IC8qIG51bGwgc2lnbmFsOyBleGlzdGVuY2UgdGVzdCAqLwogCWVsc2UKQEAgLTM0NjcsMTggKzM0MDMsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfcHJjdGwoaW50IG9wdGlvbiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMywKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNSkKLXsKLQkvKiBUaGUgY3VycmVudCBwcmN0bCBvcGVyYXRpb25zIGRvIG5vdCBhcHBlYXIgdG8gcmVxdWlyZQotCSAgIGFueSBTRUxpbnV4IGNvbnRyb2xzIHNpbmNlIHRoZXkgbWVyZWx5IG9ic2VydmUgb3IgbW9kaWZ5Ci0JICAgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuICovCi0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPnRhc2tfcHJjdGwob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfd2FpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIHRhc2tfaGFzX3Blcm0ocCwgY3VycmVudCwgUFJPQ0VTU19fU0lHQ0hMRCk7CkBAIC00MDQ3LDEwICszOTcxLDYgQEAKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAJaW50IGVycjsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPnVuaXhfc3RyZWFtX2Nvbm5lY3Qoc29jaywgb3RoZXIsIG5ld3NrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7CiAJb3RoZXJfaXNlYyA9IFNPQ0tfSU5PREUob3RoZXIpLT5pX3NlY3VyaXR5OwogCkBAIC00ODQ0LDcgKzQ3NjQsNyBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT5uZXRsaW5rX3NlbmQoc2ssIHNrYik7CisJZXJyID0gY2FwX25ldGxpbmtfc2VuZChzaywgc2tiKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC00ODU5LDcgKzQ3NzksNyBAQAogCWludCBlcnI7CiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCi0JZXJyID0gc2Vjb25kYXJ5X29wcy0+bmV0bGlua19yZWN2KHNrYiwgY2FwYWJpbGl0eSk7CisJZXJyID0gY2FwX25ldGxpbmtfcmVjdihza2IsIGNhcGFiaWxpdHkpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTUxNjcsMTEgKzUwODcsNiBAQAogCQkJICAgICBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZykKIHsKIAl1MzIgcGVybXM7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zaG1fc2htYXQoc2hwLCBzaG1hZGRyLCBzaG1mbGcpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCiAJaWYgKHNobWZsZyAmIFNITV9SRE9OTFkpCiAJCXBlcm1zID0gU0hNX19SRUFEOwpAQCAtNTU4MSw3ICs1NDk2LDYgQEAKIAkubmV0bGlua19yZWN2ID0JCQlzZWxpbnV4X25ldGxpbmtfcmVjdiwKIAogCS5icHJtX3NldF9jcmVkcyA9CQlzZWxpbnV4X2Jwcm1fc2V0X2NyZWRzLAotCS5icHJtX2NoZWNrX3NlY3VyaXR5ID0JCXNlbGludXhfYnBybV9jaGVja19zZWN1cml0eSwKIAkuYnBybV9jb21taXR0aW5nX2NyZWRzID0Jc2VsaW51eF9icHJtX2NvbW1pdHRpbmdfY3JlZHMsCiAJLmJwcm1fY29tbWl0dGVkX2NyZWRzID0JCXNlbGludXhfYnBybV9jb21taXR0ZWRfY3JlZHMsCiAJLmJwcm1fc2VjdXJlZXhlYyA9CQlzZWxpbnV4X2Jwcm1fc2VjdXJlZXhlYywKQEAgLTU2MjMsOCArNTUzNyw2IEBACiAJLmlub2RlX2dldHNlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfZ2V0c2VjdXJpdHksCiAJLmlub2RlX3NldHNlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfc2V0c2VjdXJpdHksCiAJLmlub2RlX2xpc3RzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX2xpc3RzZWN1cml0eSwKLQkuaW5vZGVfbmVlZF9raWxscHJpdiA9CQlzZWxpbnV4X2lub2RlX25lZWRfa2lsbHByaXYsCi0JLmlub2RlX2tpbGxwcml2ID0JCXNlbGludXhfaW5vZGVfa2lsbHByaXYsCiAJLmlub2RlX2dldHNlY2lkID0JCXNlbGludXhfaW5vZGVfZ2V0c2VjaWQsCiAKIAkuZmlsZV9wZXJtaXNzaW9uID0JCXNlbGludXhfZmlsZV9wZXJtaXNzaW9uLApAQCAtNTY0NCwxNyArNTU1NiwxMiBAQAogCS50YXNrX2NyZWF0ZSA9CQkJc2VsaW51eF90YXNrX2NyZWF0ZSwKIAkuY3JlZF9mcmVlID0JCQlzZWxpbnV4X2NyZWRfZnJlZSwKIAkuY3JlZF9wcmVwYXJlID0JCQlzZWxpbnV4X2NyZWRfcHJlcGFyZSwKLQkuY3JlZF9jb21taXQgPQkJCXNlbGludXhfY3JlZF9jb21taXQsCiAJLmtlcm5lbF9hY3RfYXMgPQkJc2VsaW51eF9rZXJuZWxfYWN0X2FzLAogCS5rZXJuZWxfY3JlYXRlX2ZpbGVzX2FzID0Jc2VsaW51eF9rZXJuZWxfY3JlYXRlX2ZpbGVzX2FzLAotCS50YXNrX3NldHVpZCA9CQkJc2VsaW51eF90YXNrX3NldHVpZCwKLQkudGFza19maXhfc2V0dWlkID0JCXNlbGludXhfdGFza19maXhfc2V0dWlkLAotCS50YXNrX3NldGdpZCA9CQkJc2VsaW51eF90YXNrX3NldGdpZCwKIAkudGFza19zZXRwZ2lkID0JCQlzZWxpbnV4X3Rhc2tfc2V0cGdpZCwKIAkudGFza19nZXRwZ2lkID0JCQlzZWxpbnV4X3Rhc2tfZ2V0cGdpZCwKIAkudGFza19nZXRzaWQgPQkJCXNlbGludXhfdGFza19nZXRzaWQsCiAJLnRhc2tfZ2V0c2VjaWQgPQkJc2VsaW51eF90YXNrX2dldHNlY2lkLAotCS50YXNrX3NldGdyb3VwcyA9CQlzZWxpbnV4X3Rhc2tfc2V0Z3JvdXBzLAogCS50YXNrX3NldG5pY2UgPQkJCXNlbGludXhfdGFza19zZXRuaWNlLAogCS50YXNrX3NldGlvcHJpbyA9CQlzZWxpbnV4X3Rhc2tfc2V0aW9wcmlvLAogCS50YXNrX2dldGlvcHJpbyA9CQlzZWxpbnV4X3Rhc2tfZ2V0aW9wcmlvLApAQCAtNTY2NCw3ICs1NTcxLDYgQEAKIAkudGFza19tb3ZlbWVtb3J5ID0JCXNlbGludXhfdGFza19tb3ZlbWVtb3J5LAogCS50YXNrX2tpbGwgPQkJCXNlbGludXhfdGFza19raWxsLAogCS50YXNrX3dhaXQgPQkJCXNlbGludXhfdGFza193YWl0LAotCS50YXNrX3ByY3RsID0JCQlzZWxpbnV4X3Rhc2tfcHJjdGwsCiAJLnRhc2tfdG9faW5vZGUgPQkJc2VsaW51eF90YXNrX3RvX2lub2RlLAogCiAJLmlwY19wZXJtaXNzaW9uID0JCXNlbGludXhfaXBjX3Blcm1pc3Npb24sCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCmluZGV4IGMwYzg4NTQuLjMxZGYxZDcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCkBAIC0yNCw2ICsyNCw3IEBACiAgICBTXyhTRUNDTEFTU19DSFJfRklMRSwgQ0hSX0ZJTEVfX0VYRUNNT0QsICJleGVjbW9kIikKICAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfQkxLX0ZJTEUsIEJMS19GSUxFX19PUEVOLCAib3BlbiIpCisgICBTXyhTRUNDTEFTU19TT0NLX0ZJTEUsIFNPQ0tfRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfRklGT19GSUxFLCBGSUZPX0ZJTEVfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0ZELCBGRF9fVVNFLCAidXNlIikKICAgIFNfKFNFQ0NMQVNTX1RDUF9TT0NLRVQsIFRDUF9TT0NLRVRfX0NPTk5FQ1RUTywgImNvbm5lY3R0byIpCkBAIC0xNTIsNiArMTUzLDcgQEAKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFTEFZLCAibmxtc2dfcmVsYXkiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEUFJJViwgIm5sbXNnX3JlYWRwcml2IikKKyAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfVFRZX0FVRElULCAibmxtc2dfdHR5X2F1ZGl0IikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfSVA2RldfU09DS0VULCBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fTkxNU0dfUkVBRCwgIm5sbXNnX3JlYWQiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIE5FVExJTktfSVA2RldfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKICAgIFNfKFNFQ0NMQVNTX0FTU09DSUFUSU9OLCBBU1NPQ0lBVElPTl9fU0VORFRPLCAic2VuZHRvIikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKaW5kZXggMGJhNzlmZS4uZDY0NTE5MiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKQEAgLTE3NCw2ICsxNzQsNyBAQAogI2RlZmluZSBTT0NLX0ZJTEVfX1NXQVBPTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKICNkZWZpbmUgU09DS19GSUxFX19RVU9UQU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCiAjZGVmaW5lIFNPQ0tfRklMRV9fTU9VTlRPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAorI2RlZmluZSBTT0NLX0ZJTEVfX09QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKICNkZWZpbmUgRklGT19GSUxFX19JT0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAjZGVmaW5lIEZJRk9fRklMRV9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAogI2RlZmluZSBGSUZPX0ZJTEVfX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKQEAgLTcwNyw2ICs3MDgsNyBAQAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgICAgICAweDAwODAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFTEFZICAgICAgICAgMHgwMTAwMDAwMFVMCiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEUFJJViAgICAgIDB4MDIwMDAwMDBVTAorI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfVFRZX0FVRElUICAgICAweDA0MDAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAppbmRleCAzY2M0NTE2Li5jNGUwNjIzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCkBAIC02MCw5ICs2MCw3IEBACiAJdTMyIGRlZl9zaWQ7CQkJLyogZGVmYXVsdCBTSUQgZm9yIGxhYmVsaW5nICovCiAJdTMyIG1udHBvaW50X3NpZDsJCS8qIFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCBjb250ZXh0IGZvciBmaWxlcyAqLwogCXVuc2lnbmVkIGludCBiZWhhdmlvcjsJCS8qIGxhYmVsaW5nIGJlaGF2aW9yICovCi0JdW5zaWduZWQgY2hhciBpbml0aWFsaXplZDsJLyogaW5pdGlhbGl6YXRpb24gZmxhZyAqLwogCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CQkvKiB3aGljaCBtb3VudCBvcHRpb25zIHdlcmUgc3BlY2lmaWVkICovCi0JdW5zaWduZWQgY2hhciBwcm9jOwkJLyogcHJvYyBmcyAqLwogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgaXNlY19oZWFkOwogCXNwaW5sb2NrX3QgaXNlY19sb2NrOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaAppbmRleCA3MjQ0NzM3Li41YzM0MzRmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaApAQCAtMzcsMTUgKzM3LDIzIEBACiAjZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fTUFYCVBPTElDWURCX1ZFUlNJT05fQk9VTkRBUlkKICNlbmRpZgogCisvKiBNYXNrIGZvciBqdXN0IHRoZSBtb3VudCByZWxhdGVkIGZsYWdzICovCisjZGVmaW5lIFNFX01OVE1BU0sJMHgwZgorLyogU3VwZXIgYmxvY2sgc2VjdXJpdHkgc3RydWN0IGZsYWdzIGZvciBtb3VudCBvcHRpb25zICovCiAjZGVmaW5lIENPTlRFWFRfTU5UCTB4MDEKICNkZWZpbmUgRlNDT05URVhUX01OVAkweDAyCiAjZGVmaW5lIFJPT1RDT05URVhUX01OVAkweDA0CiAjZGVmaW5lIERFRkNPTlRFWFRfTU5UCTB4MDgKKy8qIE5vbi1tb3VudCByZWxhdGVkIGZsYWdzICovCisjZGVmaW5lIFNFX1NCSU5JVElBTElaRUQJMHgxMAorI2RlZmluZSBTRV9TQlBST0MJCTB4MjAKKyNkZWZpbmUgU0VfU0JMQUJFTFNVUFAJMHg0MAogCiAjZGVmaW5lIENPTlRFWFRfU1RSCSJjb250ZXh0PSIKICNkZWZpbmUgRlNDT05URVhUX1NUUgkiZnNjb250ZXh0PSIKICNkZWZpbmUgUk9PVENPTlRFWFRfU1RSCSJyb290Y29udGV4dD0iCiAjZGVmaW5lIERFRkNPTlRFWFRfU1RSCSJkZWZjb250ZXh0PSIKKyNkZWZpbmUgTEFCRUxTVVBQX1NUUiAic2VjbGFiZWwiCiAKIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHI7CiAKQEAgLTgwLDcgKzg4LDYgQEAKICNkZWZpbmUgU0VMX1ZFQ19NQVggMzIKIHN0cnVjdCBhdl9kZWNpc2lvbiB7CiAJdTMyIGFsbG93ZWQ7Ci0JdTMyIGRlY2lkZWQ7CiAJdTMyIGF1ZGl0YWxsb3c7CiAJdTMyIGF1ZGl0ZGVueTsKIAl1MzIgc2Vxbm87CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKaW5kZXggNGVkN2JhYi4uYzY4NzVmZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJeyBBVURJVF9VU0VSLAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFTEFZICAgIH0sCiAJeyBBVURJVF9TSUdOQUxfSU5GTywJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgICAgIH0sCiAJeyBBVURJVF9UVFlfR0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgfSwKLQl7IEFVRElUX1RUWV9TRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICB9LAorCXsgQVVESVRfVFRZX1NFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVAl9LAogfTsKIAogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCAwMWVjNmQyLi5kM2M4Yjk4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCiAJbGVuZ3RoID0gc2NucHJpbnRmKGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULAogCQkJICAiJXggJXggJXggJXggJXUiLAotCQkJICBhdmQuYWxsb3dlZCwgYXZkLmRlY2lkZWQsCisJCQkgIGF2ZC5hbGxvd2VkLCAweGZmZmZmZmZmLAogCQkJICBhdmQuYXVkaXRhbGxvdywgYXZkLmF1ZGl0ZGVueSwKIAkJCSAgYXZkLnNlcW5vKTsKIG91dDI6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggYzY1ZTRmZS4uZGVlZWM2YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtNDA3LDcgKzQwNyw2IEBACiAJICogSW5pdGlhbGl6ZSB0aGUgYWNjZXNzIHZlY3RvcnMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLgogCSAqLwogCWF2ZC0+YWxsb3dlZCA9IDA7Ci0JYXZkLT5kZWNpZGVkID0gMHhmZmZmZmZmZjsKIAlhdmQtPmF1ZGl0YWxsb3cgPSAwOwogCWF2ZC0+YXVkaXRkZW55ID0gMHhmZmZmZmZmZjsKIAlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwpAQCAtNzQzLDcgKzc0Miw2IEBACiAKIAlpZiAoIXNzX2luaXRpYWxpemVkKSB7CiAJCWF2ZC0+YWxsb3dlZCA9IDB4ZmZmZmZmZmY7Ci0JCWF2ZC0+ZGVjaWRlZCA9IDB4ZmZmZmZmZmY7CiAJCWF2ZC0+YXVkaXRhbGxvdyA9IDA7CiAJCWF2ZC0+YXVkaXRkZW55ID0gMHhmZmZmZmZmZjsKIAkJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKaW5kZXggMmUwYjgzZS4uY2ZhMTljYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKQEAgLTE2Miw4ICsxNjIsOCBAQAogCiAvKioKICAqIHNta19jdXJhY2MgLSBkZXRlcm1pbmUgaWYgY3VycmVudCBoYXMgYSBzcGVjaWZpYyBhY2Nlc3MgdG8gYW4gb2JqZWN0Ci0gKiBAb2JqZWN0X2xhYmVsOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCdzIFNtYWNrIGxhYmVsCi0gKiBAcmVxdWVzdDogdGhlIGFjY2VzcyByZXF1ZXN0ZWQsIGluICJNQVkiIGZvcm1hdAorICogQG9ial9sYWJlbDogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QncyBTbWFjayBsYWJlbAorICogQG1vZGU6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkLCBpbiAiTUFZIiBmb3JtYXQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgY3VycmVudCBzdWJqZWN0IGxhYmVsL29iamVjdCBsYWJlbCBwYWlyCiAgKiBpbiB0aGUgYWNjZXNzIHJ1bGUgbGlzdCBhbmQgcmV0dXJucyAwIGlmIHRoZSBhY2Nlc3MgaXMgcGVybWl0dGVkLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBlN2RlZDEzLi44NGI2MmI1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtOTEsNiArOTEsNyBAQAogLyoqCiAgKiBzbWFja19wdHJhY2VfbWF5X2FjY2VzcyAtIFNtYWNrIGFwcHJvdmFsIG9uIFBUUkFDRV9BVFRBQ0gKICAqIEBjdHA6IGNoaWxkIHRhc2sgcG9pbnRlcgorICogQG1vZGU6IHB0cmFjZSBhdHRhY2htZW50IG1vZGUKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIE9LLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICoKQEAgLTIwMyw5ICsyMDQsOCBAQAogCiAvKioKICAqIHNtYWNrX3NiX2NvcHlfZGF0YSAtIGNvcHkgbW91bnQgb3B0aW9ucyBkYXRhIGZvciBwcm9jZXNzaW5nCi0gKiBAdHlwZTogZmlsZSBzeXN0ZW0gdHlwZQogICogQG9yaWc6IHdoZXJlIHRvIHN0YXJ0Ci0gKiBAc21hY2tvcHRzCisgKiBAc21hY2tvcHRzOiBtb3VudCBvcHRpb25zIHN0cmluZwogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gZXJyb3IuCiAgKgpAQCAtMzMxLDcgKzMzMSw3IEBACiAvKioKICAqIHNtYWNrX3NiX21vdW50IC0gU21hY2sgY2hlY2sgZm9yIG1vdW50aW5nCiAgKiBAZGV2X25hbWU6IHVudXNlZAotICogQG5kOiBtb3VudCBwb2ludAorICogQHBhdGg6IG1vdW50IHBvaW50CiAgKiBAdHlwZTogdW51c2VkCiAgKiBAZmxhZ3M6IHVudXNlZAogICogQGRhdGE6IHVudXNlZApAQCAtMzcwLDcgKzM3MCw3IEBACiAKIC8qKgogICogc21hY2tfaW5vZGVfYWxsb2Nfc2VjdXJpdHkgLSBhbGxvY2F0ZSBhbiBpbm9kZSBibG9iCi0gKiBAaW5vZGUgLSB0aGUgaW5vZGUgaW4gbmVlZCBvZiBhIGJsb2IKKyAqIEBpbm9kZTogdGhlIGlub2RlIGluIG5lZWQgb2YgYSBibG9iCiAgKgogICogUmV0dXJucyAwIGlmIGl0IGdldHMgYSBibG9iLCAtRU5PTUVNIG90aGVyd2lzZQogICovCkBAIC0zODQsNyArMzg0LDcgQEAKIAogLyoqCiAgKiBzbWFja19pbm9kZV9mcmVlX3NlY3VyaXR5IC0gZnJlZSBhbiBpbm9kZSBibG9iCi0gKiBAaW5vZGUgLSB0aGUgaW5vZGUgd2l0aCBhIGJsb2IKKyAqIEBpbm9kZTogdGhlIGlub2RlIHdpdGggYSBibG9iCiAgKgogICogQ2xlYXJzIHRoZSBibG9iIHBvaW50ZXIgaW4gaW5vZGUKICAqLwpAQCAtNTM4LDcgKzUzOCw2IEBACiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uCiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWQKLSAqIEBuZDogdW51c2VkCiAgKgogICogVGhpcyBpcyB0aGUgaW1wb3J0YW50IFNtYWNrIGhvb2suCiAgKgpAQCAtNzAxLDggKzcwMCw3IEBACiAgKiBAaW5vZGU6IHRoZSBvYmplY3QKICAqIEBuYW1lOiBhdHRyaWJ1dGUgbmFtZQogICogQGJ1ZmZlcjogd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQKLSAqIEBzaXplOiBzaXplIG9mIHRoZSBidWZmZXIKLSAqIEBlcnI6IHVudXNlZAorICogQGFsbG9jOiB1bnVzZWQKICAqCiAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgb3IgYW4gZXJyb3IgY29kZQogICovCkBAIC04NjQsNyArODYyLDcgQEAKIC8qKgogICogc21hY2tfZmlsZV9sb2NrIC0gU21hY2sgY2hlY2sgb24gZmlsZSBsb2NraW5nCiAgKiBAZmlsZTogdGhlIG9iamVjdAotICogQGNtZCB1bnVzZWQKKyAqIEBjbWQ6IHVudXNlZAogICoKICAqIFJldHVybnMgMCBpZiBjdXJyZW50IGhhcyB3cml0ZSBhY2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KQEAgLTEwMDMsOCArMTAwMSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBjb21taXQgbmV3IGNyZWRlbnRpYWxzCisvKioKKyAqIHNtYWNrX2NyZWRfY29tbWl0IC0gY29tbWl0IG5ldyBjcmVkZW50aWFscwogICogQG5ldzogdGhlIG5ldyBjcmVkZW50aWFscwogICogQG9sZDogdGhlIG9yaWdpbmFsIGNyZWRlbnRpYWxzCiAgKi8KQEAgLTEwMTQsOCArMTAxMiw4IEBACiAKIC8qKgogICogc21hY2tfa2VybmVsX2FjdF9hcyAtIFNldCB0aGUgc3ViamVjdGl2ZSBjb250ZXh0IGluIGEgc2V0IG9mIGNyZWRlbnRpYWxzCi0gKiBAbmV3IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkLgotICogQHNlY2lkIHNwZWNpZmllcyB0aGUgc2VjdXJpdHkgSUQgdG8gYmUgc2V0CisgKiBAbmV3OiBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZC4KKyAqIEBzZWNpZDogc3BlY2lmaWVzIHRoZSBzZWN1cml0eSBJRCB0byBiZSBzZXQKICAqCiAgKiBTZXQgdGhlIHNlY3VyaXR5IGRhdGEgZm9yIGEga2VybmVsIHNlcnZpY2UuCiAgKi8KQEAgLTEwMzIsOCArMTAzMCw4IEBACiAKIC8qKgogICogc21hY2tfa2VybmVsX2NyZWF0ZV9maWxlc19hcyAtIFNldCB0aGUgZmlsZSBjcmVhdGlvbiBsYWJlbCBpbiBhIHNldCBvZiBjcmVkcwotICogQG5ldyBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZAotICogQGlub2RlIHBvaW50cyB0byB0aGUgaW5vZGUgdG8gdXNlIGFzIGEgcmVmZXJlbmNlCisgKiBAbmV3OiBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZAorICogQGlub2RlOiBwb2ludHMgdG8gdGhlIGlub2RlIHRvIHVzZSBhcyBhIHJlZmVyZW5jZQogICoKICAqIFNldCB0aGUgZmlsZSBjcmVhdGlvbiBjb250ZXh0IGluIGEgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIHRoZSBzYW1lCiAgKiBhcyB0aGUgb2JqZWN0aXZlIGNvbnRleHQgb2YgdGhlIHNwZWNpZmllZCBpbm9kZQpAQCAtMTI0Miw3ICsxMjQwLDcgQEAKIC8qKgogICogc21hY2tfdGFza190b19pbm9kZSAtIGNvcHkgdGFzayBzbWFjayBpbnRvIHRoZSBpbm9kZSBibG9iCiAgKiBAcDogdGFzayB0byBjb3B5IGZyb20KLSAqIGlub2RlOiBpbm9kZSB0byBjb3B5IHRvCisgKiBAaW5vZGU6IGlub2RlIHRvIGNvcHkgdG8KICAqCiAgKiBTZXRzIHRoZSBzbWFjayBwb2ludGVyIGluIHRoZSBpbm9kZSBzZWN1cml0eSBibG9iCiAgKi8KQEAgLTEyNjAsNyArMTI1OCw3IEBACiAgKiBzbWFja19za19hbGxvY19zZWN1cml0eSAtIEFsbG9jYXRlIGEgc29ja2V0IGJsb2IKICAqIEBzazogdGhlIHNvY2tldAogICogQGZhbWlseTogdW51c2VkCi0gKiBAcHJpb3JpdHk6IG1lbW9yeSBhbGxvY2F0aW9uIHByaW9yaXR5CisgKiBAZ2ZwX2ZsYWdzOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICoKICAqIEFzc2lnbiBTbWFjayBwb2ludGVycyB0byBjdXJyZW50CiAgKgpAQCAtMTk3NCw3ICsxOTcyLDcgQEAKIAogLyoqCiAgKiBzbWFja19pcGNfZ2V0c2VjaWQgLSBFeHRyYWN0IHNtYWNrIHNlY3VyaXR5IGlkCi0gKiBAaXBjcDogdGhlIG9iamVjdCBwZXJtaXNzaW9ucworICogQGlwcDogdGhlIG9iamVjdCBwZXJtaXNzaW9ucwogICogQHNlY2lkOiB3aGVyZSByZXN1bHQgd2lsbCBiZSBzYXZlZAogICovCiBzdGF0aWMgdm9pZCBzbWFja19pcGNfZ2V0c2VjaWQoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwcCwgdTMyICpzZWNpZCkKQEAgLTIyNTEsNyArMjI0OSw3IEBACiAvKioKICAqIHNtYWNrX3NvY2tldF9zZW5kbXNnIC0gU21hY2sgY2hlY2sgYmFzZWQgb24gZGVzdGluYXRpb24gaG9zdAogICogQHNvY2s6IHRoZSBzb2NrZXQKLSAqIEBtc2doZHI6IHRoZSBtZXNzYWdlCisgKiBAbXNnOiB0aGUgbWVzc2FnZQogICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlCiAgKgogICogUmV0dXJuIDAgaWYgdGhlIGN1cnJlbnQgc3ViamVjdCBjYW4gd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uCkBAIC0yMjkyLDggKzIyOTAsNyBAQAogCiAKIC8qKgotICogc21hY2tfZnJvbV9zZWNhdHRyIC0gQ29udmVydCBhIG5ldGxhYmVsIGF0dHIubWxzLmx2bC9hdHRyLm1scy5jYXQKLSAqIAlwYWlyIHRvIHNtYWNrCisgKiBzbWFja19mcm9tX3NlY2F0dHIgLSBDb252ZXJ0IGEgbmV0bGFiZWwgYXR0ci5tbHMubHZsL2F0dHIubWxzLmNhdCBwYWlyIHRvIHNtYWNrCiAgKiBAc2FwOiBuZXRsYWJlbCBzZWNhdHRyCiAgKiBAc2lwOiB3aGVyZSB0byBwdXQgdGhlIHJlc3VsdAogICoKQEAgLTI0MTQsNyArMjQxMSw3IEBACiAgKiBAc29jazogdGhlIHNvY2tldAogICogQG9wdHZhbDogdXNlcidzIGRlc3RpbmF0aW9uCiAgKiBAb3B0bGVuOiBzaXplIHRoZXJlb2YKLSAqIEBsZW46IG1heCB0aGVyZW9lCisgKiBAbGVuOiBtYXggdGhlcmVvZgogICoKICAqIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCkBAIC0yNzQ5LDcgKzI3NDYsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0FVRElUICovCiAKLS8qCisvKioKICAqIHNtYWNrX3NlY2lkX3RvX3NlY2N0eCAtIHJldHVybiB0aGUgc21hY2sgbGFiZWwgZm9yIGEgc2VjaWQKICAqIEBzZWNpZDogaW5jb21pbmcgaW50ZWdlcgogICogQHNlY2RhdGE6IGRlc3RpbmF0aW9uCkBAIC0yNzY2LDcgKzI3NjMsNyBAQAogCXJldHVybiAwOwogfQogCi0vKgorLyoqCiAgKiBzbWFja19zZWNjdHhfdG9fc2VjaWQgLSByZXR1cm4gdGhlIHNlY2lkIGZvciBhIHNtYWNrIGxhYmVsCiAgKiBAc2VjZGF0YTogc21hY2sgbGFiZWwKICAqIEBzZWNsZW46IGhvdyBsb25nIHJlc3VsdCBpcwpAQCAtMjc4MCwxMSArMjc3NywxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgorLyoqCiAgKiBzbWFja19yZWxlYXNlX3NlY2N0eCAtIGRvbid0IGRvIGFueXRoaW5nLgotICogQGtleV9yZWY6IHVudXNlZAotICogQGNvbnRleHQ6IHVudXNlZAotICogQHBlcm06IHVudXNlZAorICogQHNlY2RhdGE6IHVudXNlZAorICogQHNlY2xlbjogdW51c2VkCiAgKgogICogRXhpc3RzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGdldHMgZG9uZSwgYW5kIHByb3Blcmx5CiAgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwppbmRleCA1MWYwZWZjLi5hMWI1N2U0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfbG9hZCAtIHdyaXRlKCkgZm9yIC9zbWFjay9sb2FkCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydCAtIG11c3QgYmUgMApAQCAtNDAyLDYgKzQwMiw3IEBACiAKIC8qKgogICogc21rX3VubGJsX2FtYmllbnQgLSBpbml0aWFsaXplIHRoZSB1bmxhYmVsZWQgZG9tYWluCisgKiBAb2xkYW1iaWVudDogcHJldmlvdXMgZG9tYWluIHN0cmluZwogICovCiBzdGF0aWMgdm9pZCBzbWtfdW5sYmxfYW1iaWVudChjaGFyICpvbGRhbWJpZW50KQogewpAQCAtNTEzLDcgKzUxNCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2NpcHNvIC0gd3JpdGUoKSBmb3IgL3NtYWNrL2NpcHNvCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtNzMzLDcgKzczNCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX25ldGxibGFkZHIgLSB3cml0ZSgpIGZvciAvc21hY2svbmV0bGFiZWwKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC04ODQsNyArODg1LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfZG9pIC0gd3JpdGUoKSBmb3IgL3NtYWNrL2RvaQotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTk0OSw3ICs5NTAsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9kaXJlY3QgLSB3cml0ZSgpIGZvciAvc21hY2svZGlyZWN0Ci0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtMTAyNCw3ICsxMDI1LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfYW1iaWVudCAtIHdyaXRlKCkgZm9yIC9zbWFjay9hbWJpZW50Ci0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtMTA5OSw3ICsxMTAwLDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfb25seWNhcCAtIHdyaXRlKCkgZm9yIC9zbWFjay9vbmx5Y2FwCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcgYi9zZWN1cml0eS90b21veW8vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzODU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorY29uZmlnIFNFQ1VSSVRZX1RPTU9ZTworCWJvb2wgIlRPTU9ZTyBMaW51eCBTdXBwb3J0IgorCWRlcGVuZHMgb24gU0VDVVJJVFkKKwlzZWxlY3QgU0VDVVJJVFlGUworCXNlbGVjdCBTRUNVUklUWV9QQVRICisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIFRPTU9ZTyBMaW51eCwgcGF0aG5hbWUtYmFzZWQgYWNjZXNzIGNvbnRyb2wuCisJICBSZXF1aXJlZCB1c2Vyc3BhY2UgdG9vbHMgYW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gbWF5IGJlCisJICBmb3VuZCBhdCA8aHR0cDovL3RvbW95by5zb3VyY2Vmb3JnZS5qcC8+LgorCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZSBiL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGNjZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15ID0gY29tbW9uLm8gcmVhbHBhdGgubyB0b21veW8ubyBkb21haW4ubyBmaWxlLm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uYyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNlYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCkBAIC0wLDAgKzEsMjIwNiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9jb21tb24uYworICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSAicmVhbHBhdGguaCIKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKworLyogSGFzIGxvYWRpbmcgcG9saWN5IGRvbmU/ICovCitib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOworCisvKiBTdHJpbmcgdGFibGUgZm9yIGZ1bmN0aW9uYWxpdHkgdGhhdCB0YWtlcyA0IG1vZGVzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19tb2RlXzRbNF0gPSB7CisJImRpc2FibGVkIiwgImxlYXJuaW5nIiwgInBlcm1pc3NpdmUiLCAiZW5mb3JjaW5nIgorfTsKKy8qIFN0cmluZyB0YWJsZSBmb3IgZnVuY3Rpb25hbGl0eSB0aGF0IHRha2VzIDIgbW9kZXMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX21vZGVfMls0XSA9IHsKKwkiZGlzYWJsZWQiLCAiZW5hYmxlZCIsICJlbmFibGVkIiwgImVuYWJsZWQiCit9OworCisvKiBUYWJsZSBmb3IgcHJvZmlsZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmtleXdvcmQ7CisJdW5zaWduZWQgaW50IGN1cnJlbnRfdmFsdWU7CisJY29uc3QgdW5zaWduZWQgaW50IG1heF92YWx1ZTsKK30gdG9tb3lvX2NvbnRyb2xfYXJyYXlbVE9NT1lPX01BWF9DT05UUk9MX0lOREVYXSA9IHsKKwlbVE9NT1lPX01BQ19GT1JfRklMRV0gICAgID0geyAiTUFDX0ZPUl9GSUxFIiwgICAgICAgIDAsICAgICAgIDMgfSwKKwlbVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlldID0geyAiTUFYX0FDQ0VQVF9FTlRSWSIsIDIwNDgsIElOVF9NQVggfSwKKwlbVE9NT1lPX1ZFUkJPU0VdICAgICAgICAgID0geyAiVE9NT1lPX1ZFUkJPU0UiLCAgICAgIDEsICAgICAgIDEgfSwKK307CisKKy8qIFByb2ZpbGUgdGFibGUuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgYXMgbmVlZGVkLiAqLworc3RhdGljIHN0cnVjdCB0b21veW9fcHJvZmlsZSB7CisJdW5zaWduZWQgaW50IHZhbHVlW1RPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWF07CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmNvbW1lbnQ7Cit9ICp0b21veW9fcHJvZmlsZV9wdHJbVE9NT1lPX01BWF9QUk9GSUxFU107CisKKy8qIFBlcm1pdCBwb2xpY3kgbWFuYWdlbWVudCBieSBub24tcm9vdCB1c2VyPyAqLworc3RhdGljIGJvb2wgdG9tb3lvX21hbmFnZV9ieV9ub25fcm9vdDsKKworLyogVXRpbGl0eSBmdW5jdGlvbnMuICovCisKKy8qIE9wZW4gb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX29wZW5fY29udHJvbChjb25zdCB1OCB0eXBlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisvKiBDbG9zZSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2Nsb3NlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUpOworLyogUmVhZCBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgICAgIGNvbnN0IGludCBidWZmZXJfbGVuKTsKKy8qIFdyaXRlIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCWNvbnN0IGludCBidWZmZXJfbGVuKTsKKworLyoqCisgKiB0b21veW9faXNfYnl0ZV9yYW5nZSAtIENoZWNrIHdoZXRoZXIgdGhlIHN0cmluZyBpc2EgXG9vbyBzdHlsZSBvY3RhbCB2YWx1ZS4KKyAqCisgKiBAc3RyOiBQb2ludGVyIHRvIHRoZSBzdHJpbmcuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBzdHIgaXMgYSBcb29vIHN0eWxlIG9jdGFsIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVE9NT1lPIHVzZXMgXG9vbyBzdHlsZSByZXByZXNlbnRhdGlvbiBmb3IgMHgwMSAtIDB4MjAgYW5kIDB4N0YgLSAweEZGLgorICogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGF0IFxvb28gaXMgaW4gdmFsaWQgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfYnl0ZV9yYW5nZShjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuICpzdHIgPj0gJzAnICYmICpzdHIrKyA8PSAnMycgJiYKKwkJKnN0ciA+PSAnMCcgJiYgKnN0cisrIDw9ICc3JyAmJgorCQkqc3RyID49ICcwJyAmJiAqc3RyIDw9ICc3JzsKK30KKworLyoqCisgKiB0b21veW9faXNfYWxwaGFiZXRfY2hhciAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhbiBhbHBoYWJldC4KKyAqCisgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYW4gYWxwaGFiZXQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfYWxwaGFiZXRfY2hhcihjb25zdCBjaGFyIGMpCit7CisJcmV0dXJuIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKTsKK30KKworLyoqCisgKiB0b21veW9fbWFrZV9ieXRlIC0gTWFrZSBieXRlIHZhbHVlIGZyb20gdGhyZWUgb2N0YWwgY2hhcmFjdGVycy4KKyAqCisgKiBAYzE6IFRoZSBmaXJzdCBjaGFyYWN0ZXIuCisgKiBAYzI6IFRoZSBzZWNvbmQgY2hhcmFjdGVyLgorICogQGMzOiBUaGUgdGhpcmQgY2hhcmFjdGVyLgorICoKKyAqIFJldHVybnMgYnl0ZSB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSB1OCB0b21veW9fbWFrZV9ieXRlKGNvbnN0IHU4IGMxLCBjb25zdCB1OCBjMiwgY29uc3QgdTggYzMpCit7CisJcmV0dXJuICgoYzEgLSAnMCcpIDw8IDYpICsgKChjMiAtICcwJykgPDwgMykgKyAoYzMgLSAnMCcpOworfQorCisvKioKKyAqIHRvbW95b19zdHJfc3RhcnRzIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiBrZXl3b3JkLgorICoKKyAqIEBzcmM6ICBQb2ludGVyIHRvIHBvaW50ZXIgdG8gdGhlIHN0cmluZy4KKyAqIEBmaW5kOiBQb2ludGVyIHRvIHRoZSBrZXl3b3JkLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAc3JjIHN0YXJ0cyB3aXRoIEBmaW5kLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIEBzcmMgaXMgdXBkYXRlZCB0byBwb2ludCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBAZmluZAorICogaWYgQHNyYyBzdGFydHMgd2l0aCBAZmluZC4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3N0cl9zdGFydHMoY2hhciAqKnNyYywgY29uc3QgY2hhciAqZmluZCkKK3sKKwljb25zdCBpbnQgbGVuID0gc3RybGVuKGZpbmQpOworCWNoYXIgKnRtcCA9ICpzcmM7CisKKwlpZiAoc3RybmNtcCh0bXAsIGZpbmQsIGxlbikpCisJCXJldHVybiBmYWxzZTsKKwl0bXAgKz0gbGVuOworCSpzcmMgPSB0bXA7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX25vcm1hbGl6ZV9saW5lIC0gRm9ybWF0IHN0cmluZy4KKyAqCisgKiBAYnVmZmVyOiBUaGUgbGluZSB0byBub3JtYWxpemUuCisgKgorICogTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYXJlIHJlbW92ZWQuCisgKiBNdWx0aXBsZSB3aGl0ZXNwYWNlcyBhcmUgcGFja2VkIGludG8gc2luZ2xlIHNwYWNlLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgdG9tb3lvX25vcm1hbGl6ZV9saW5lKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBjaGFyICpzcCA9IGJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpkcCA9IGJ1ZmZlcjsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKworCXdoaWxlICh0b21veW9faXNfaW52YWxpZCgqc3ApKQorCQlzcCsrOworCXdoaWxlICgqc3ApIHsKKwkJaWYgKCFmaXJzdCkKKwkJCSpkcCsrID0gJyAnOworCQlmaXJzdCA9IGZhbHNlOworCQl3aGlsZSAodG9tb3lvX2lzX3ZhbGlkKCpzcCkpCisJCQkqZHArKyA9ICpzcCsrOworCQl3aGlsZSAodG9tb3lvX2lzX2ludmFsaWQoKnNwKSkKKwkJCXNwKys7CisJfQorCSpkcCA9ICdcMCc7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2NvcnJlY3RfcGF0aCAtIFZhbGlkYXRlIGEgcGF0aG5hbWUuCisgKiBAZmlsZW5hbWU6ICAgICBUaGUgcGF0aG5hbWUgdG8gY2hlY2suCisgKiBAc3RhcnRfdHlwZTogICBTaG91bGQgdGhlIHBhdGhuYW1lIHN0YXJ0IHdpdGggJy8nPworICogICAgICAgICAgICAgICAgMSA9IG11c3QgLyAtMSA9IG11c3Qgbm90IC8gMCA9IGRvbid0IGNhcmUKKyAqIEBwYXR0ZXJuX3R5cGU6IENhbiB0aGUgcGF0aG5hbWUgY29udGFpbiBhIHdpbGRjYXJkPworICogICAgICAgICAgICAgICAgMSA9IG11c3QgLyAtMSA9IG11c3Qgbm90IC8gMCA9IGRvbid0IGNhcmUKKyAqIEBlbmRfdHlwZTogICAgIFNob3VsZCB0aGUgcGF0aG5hbWUgZW5kIHdpdGggJy8nPworICogICAgICAgICAgICAgICAgMSA9IG11c3QgLyAtMSA9IG11c3Qgbm90IC8gMCA9IGRvbid0IGNhcmUKKyAqIEBmdW5jdGlvbjogICAgIFRoZSBuYW1lIG9mIGZ1bmN0aW9uIGNhbGxpbmcgbWUuCisgKgorICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgorICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9faXNfY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzOCBzdGFydF90eXBlLAorCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUsCisJCQkgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJYm9vbCBjb250YWluc19wYXR0ZXJuID0gZmFsc2U7CisJdW5zaWduZWQgY2hhciBjOworCXVuc2lnbmVkIGNoYXIgZDsKKwl1bnNpZ25lZCBjaGFyIGU7CisJY29uc3QgY2hhciAqb3JpZ2luYWxfZmlsZW5hbWUgPSBmaWxlbmFtZTsKKworCWlmICghZmlsZW5hbWUpCisJCWdvdG8gb3V0OworCWMgPSAqZmlsZW5hbWU7CisJaWYgKHN0YXJ0X3R5cGUgPT0gMSkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggJy8nICovCisJCWlmIChjICE9ICcvJykKKwkJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoc3RhcnRfdHlwZSA9PSAtMSkgeyAvKiBNdXN0IG5vdCBzdGFydCB3aXRoICcvJyAqLworCQlpZiAoYyA9PSAnLycpCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKGMpCisJCWMgPSAqKGZpbGVuYW1lICsgc3RybGVuKGZpbGVuYW1lKSAtIDEpOworCWlmIChlbmRfdHlwZSA9PSAxKSB7IC8qIE11c3QgZW5kIHdpdGggJy8nICovCisJCWlmIChjICE9ICcvJykKKwkJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoZW5kX3R5cGUgPT0gLTEpIHsgLyogTXVzdCBub3QgZW5kIHdpdGggJy8nICovCisJCWlmIChjID09ICcvJykKKwkJCWdvdG8gb3V0OworCX0KKwl3aGlsZSAoKGMgPSAqZmlsZW5hbWUrKykgIT0gJ1wwJykgeworCQlpZiAoYyA9PSAnXFwnKSB7CisJCQlzd2l0Y2ggKChjID0gKmZpbGVuYW1lKyspKSB7CisJCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQkJY29udGludWU7CisJCQljYXNlICckJzogICAvKiAiXCQiICovCisJCQljYXNlICcrJzogICAvKiAiXCsiICovCisJCQljYXNlICc/JzogICAvKiAiXD8iICovCisJCQljYXNlICcqJzogICAvKiAiXCoiICovCisJCQljYXNlICdAJzogICAvKiAiXEAiICovCisJCQljYXNlICd4JzogICAvKiAiXHgiICovCisJCQljYXNlICdYJzogICAvKiAiXFgiICovCisJCQljYXNlICdhJzogICAvKiAiXGEiICovCisJCQljYXNlICdBJzogICAvKiAiXEEiICovCisJCQljYXNlICctJzogICAvKiAiXC0iICovCisJCQkJaWYgKHBhdHRlcm5fdHlwZSA9PSAtMSkKKwkJCQkJYnJlYWs7IC8qIE11c3Qgbm90IGNvbnRhaW4gcGF0dGVybiAqLworCQkJCWNvbnRhaW5zX3BhdHRlcm4gPSB0cnVlOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCQljYXNlICcxJzoKKwkJCWNhc2UgJzInOgorCQkJY2FzZSAnMyc6CisJCQkJZCA9ICpmaWxlbmFtZSsrOworCQkJCWlmIChkIDwgJzAnIHx8IGQgPiAnNycpCisJCQkJCWJyZWFrOworCQkJCWUgPSAqZmlsZW5hbWUrKzsKKwkJCQlpZiAoZSA8ICcwJyB8fCBlID4gJzcnKQorCQkJCQlicmVhazsKKwkJCQljID0gdG9tb3lvX21ha2VfYnl0ZShjLCBkLCBlKTsKKwkJCQlpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpCisJCQkJCWNvbnRpbnVlOyAvKiBwYXR0ZXJuIGlzIG5vdCBcMDAwICovCisJCQl9CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmICh0b21veW9faXNfaW52YWxpZChjKSkgeworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaWYgKHBhdHRlcm5fdHlwZSA9PSAxKSB7IC8qIE11c3QgY29udGFpbiBwYXR0ZXJuICovCisJCWlmICghY29udGFpbnNfcGF0dGVybikKKwkJCWdvdG8gb3V0OworCX0KKwlyZXR1cm4gdHJ1ZTsKKyBvdXQ6CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIHBhdGhuYW1lICclcydcbiIsIGZ1bmN0aW9uLAorCSAgICAgICBvcmlnaW5hbF9maWxlbmFtZSk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLgorICogQGRvbWFpbm5hbWU6ICAgVGhlIGRvbWFpbm5hbWUgdG8gY2hlY2suCisgKiBAZnVuY3Rpb246ICAgICBUaGUgbmFtZSBvZiBmdW5jdGlvbiBjYWxsaW5nIG1lLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZG9tYWlubmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9faXNfY29ycmVjdF9kb21haW4oY29uc3QgdW5zaWduZWQgY2hhciAqZG9tYWlubmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBjaGFyIGQ7CisJdW5zaWduZWQgY2hhciBlOworCWNvbnN0IGNoYXIgKm9yZ19kb21haW5uYW1lID0gZG9tYWlubmFtZTsKKworCWlmICghZG9tYWlubmFtZSB8fCBzdHJuY21wKGRvbWFpbm5hbWUsIFRPTU9ZT19ST09UX05BTUUsCisJCQkJICAgVE9NT1lPX1JPT1RfTkFNRV9MRU4pKQorCQlnb3RvIG91dDsKKwlkb21haW5uYW1lICs9IFRPTU9ZT19ST09UX05BTUVfTEVOOworCWlmICghKmRvbWFpbm5hbWUpCisJCXJldHVybiB0cnVlOworCWRvIHsKKwkJaWYgKCpkb21haW5uYW1lKysgIT0gJyAnKQorCQkJZ290byBvdXQ7CisJCWlmICgqZG9tYWlubmFtZSsrICE9ICcvJykKKwkJCWdvdG8gb3V0OworCQl3aGlsZSAoKGMgPSAqZG9tYWlubmFtZSkgIT0gJ1wwJyAmJiBjICE9ICcgJykgeworCQkJZG9tYWlubmFtZSsrOworCQkJaWYgKGMgPT0gJ1xcJykgeworCQkJCWMgPSAqZG9tYWlubmFtZSsrOworCQkJCXN3aXRjaCAoKGMpKSB7CisJCQkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLworCQkJCQljb250aW51ZTsKKwkJCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJCQljYXNlICcxJzoKKwkJCQljYXNlICcyJzoKKwkJCQljYXNlICczJzoKKwkJCQkJZCA9ICpkb21haW5uYW1lKys7CisJCQkJCWlmIChkIDwgJzAnIHx8IGQgPiAnNycpCisJCQkJCQlicmVhazsKKwkJCQkJZSA9ICpkb21haW5uYW1lKys7CisJCQkJCWlmIChlIDwgJzAnIHx8IGUgPiAnNycpCisJCQkJCQlicmVhazsKKwkJCQkJYyA9IHRvbW95b19tYWtlX2J5dGUoYywgZCwgZSk7CisJCQkJCWlmICh0b21veW9faXNfaW52YWxpZChjKSkKKwkJCQkJCS8qIHBhdHRlcm4gaXMgbm90IFwwMDAgKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlnb3RvIG91dDsKKwkJCX0gZWxzZSBpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpIHsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKCpkb21haW5uYW1lKTsKKwlyZXR1cm4gdHJ1ZTsKKyBvdXQ6CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIGRvbWFpbm5hbWUgJyVzJ1xuIiwgZnVuY3Rpb24sCisJICAgICAgIG9yZ19kb21haW5uYW1lKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2RvbWFpbl9kZWYgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB0b2tlbiBjYW4gYmUgYSBkb21haW5uYW1lLgorICoKKyAqIEBidWZmZXI6IFRoZSB0b2tlbiB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGJ1ZmZlciBwb3NzaWJseSBiZSBhIGRvbWFpbm5hbWUsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9faXNfZG9tYWluX2RlZihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJcmV0dXJuICFzdHJuY21wKGJ1ZmZlciwgVE9NT1lPX1JPT1RfTkFNRSwgVE9NT1lPX1JPT1RfTkFNRV9MRU4pOworfQorCisvKioKKyAqIHRvbW95b19maW5kX2RvbWFpbiAtIEZpbmQgYSBkb21haW4gYnkgdGhlIGdpdmVuIG5hbWUuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBkb21haW5uYW1lIHRvIGZpbmQuCisgKgorICogQ2FsbGVyIG11c3QgY2FsbCBkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsgb3IKKyAqIGRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsgLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKworCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCAmJgorCQkgICAgIXRvbW95b19wYXRoY21wKCZuYW1lLCBkb21haW4tPmRvbWFpbm5hbWUpKQorCQkJcmV0dXJuIGRvbWFpbjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3BhdGhfZGVwdGggLSBFdmFsdWF0ZSB0aGUgbnVtYmVyIG9mICcvJyBpbiBhIHN0cmluZy4KKyAqCisgKiBAcGF0aG5hbWU6IFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUuCisgKgorICogUmV0dXJucyBwYXRoIGRlcHRoIG9mIHRoZSBzdHJpbmcuCisgKgorICogSSBzY29yZSAyIGZvciBlYWNoIG9mIHRoZSAnLycgaW4gdGhlIEBwYXRobmFtZQorICogYW5kIHNjb3JlIDEgaWYgdGhlIEBwYXRobmFtZSBlbmRzIHdpdGggJy8nLgorICovCitzdGF0aWMgaW50IHRvbW95b19wYXRoX2RlcHRoKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCWludCBpID0gMDsKKworCWlmIChwYXRobmFtZSkgeworCQljb25zdCBjaGFyICplcCA9IHBhdGhuYW1lICsgc3RybGVuKHBhdGhuYW1lKTsKKwkJaWYgKHBhdGhuYW1lIDwgZXAtLSkgeworCQkJaWYgKCplcCAhPSAnLycpCisJCQkJaSsrOworCQkJd2hpbGUgKHBhdGhuYW1lIDw9IGVwKQorCQkJCWlmICgqZXAtLSA9PSAnLycpCisJCQkJCWkgKz0gMjsKKwkJfQorCX0KKwlyZXR1cm4gaTsKK30KKworLyoqCisgKiB0b21veW9fY29uc3RfcGFydF9sZW5ndGggLSBFdmFsdWF0ZSB0aGUgaW5pdGlhbCBsZW5ndGggd2l0aG91dCBhIHBhdHRlcm4gaW4gYSB0b2tlbi4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUuCisgKgorICogUmV0dXJucyB0aGUgaW5pdGlhbCBsZW5ndGggd2l0aG91dCBhIHBhdHRlcm4gaW4gQGZpbGVuYW1lLgorICovCitzdGF0aWMgaW50IHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyIGM7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKGMgPSAqZmlsZW5hbWUrKykgIT0gJ1wwJykgeworCQlpZiAoYyAhPSAnXFwnKSB7CisJCQlsZW4rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWMgPSAqZmlsZW5hbWUrKzsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KKwkJCWxlbiArPSAyOworCQkJY29udGludWU7CisJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLworCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQkJYyA9ICpmaWxlbmFtZSsrOworCQkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCQlicmVhazsKKwkJCWMgPSAqZmlsZW5hbWUrKzsKKwkJCWlmIChjIDwgJzAnIHx8IGMgPiAnNycpCisJCQkJYnJlYWs7CisJCQlsZW4gKz0gNDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIHRvbW95b19maWxsX3BhdGhfaW5mbyAtIEZpbGwgaW4gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBtZW1iZXJzLgorICoKKyAqIEBwdHI6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiB0byBmaWxsIGluLgorICoKKyAqIFRoZSBjYWxsZXIgc2V0cyAic3RydWN0IHRvbW95b19wYXRoX2luZm8iLT5uYW1lLgorICovCit2b2lkIHRvbW95b19maWxsX3BhdGhfaW5mbyhzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHRyKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBwdHItPm5hbWU7CisJY29uc3QgaW50IGxlbiA9IHN0cmxlbihuYW1lKTsKKworCXB0ci0+dG90YWxfbGVuID0gbGVuOworCXB0ci0+Y29uc3RfbGVuID0gdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoKG5hbWUpOworCXB0ci0+aXNfZGlyID0gbGVuICYmIChuYW1lW2xlbiAtIDFdID09ICcvJyk7CisJcHRyLT5pc19wYXR0ZXJuZWQgPSAocHRyLT5jb25zdF9sZW4gPCBsZW4pOworCXB0ci0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUsIGxlbik7CisJcHRyLT5kZXB0aCA9IHRvbW95b19wYXRoX2RlcHRoKG5hbWUpOworfQorCisvKioKKyAqIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIgLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgJy8nIGNoYXJhY3RlcgorICogYW5kICJcLSIgcGF0dGVybi4KKyAqCisgKiBAZmlsZW5hbWU6ICAgICBUaGUgc3RhcnQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQGZpbGVuYW1lX2VuZDogVGhlIGVuZCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAcGF0dGVybjogICAgICBUaGUgc3RhcnQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICogQHBhdHRlcm5fZW5kOiAgVGhlIGVuZCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBtYXRjaGVzIEBwYXR0ZXJuLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9lbmQsCisJCQkJCSAgICBjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0dGVybl9lbmQpCit7CisJd2hpbGUgKGZpbGVuYW1lIDwgZmlsZW5hbWVfZW5kICYmIHBhdHRlcm4gPCBwYXR0ZXJuX2VuZCkgeworCQljaGFyIGM7CisJCWlmICgqcGF0dGVybiAhPSAnXFwnKSB7CisJCQlpZiAoKmZpbGVuYW1lKysgIT0gKnBhdHRlcm4rKykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCQljID0gKmZpbGVuYW1lOworCQlwYXR0ZXJuKys7CisJCXN3aXRjaCAoKnBhdHRlcm4pIHsKKwkJCWludCBpOworCQkJaW50IGo7CisJCWNhc2UgJz8nOgorCQkJaWYgKGMgPT0gJy8nKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmIChjID09ICdcXCcpIHsKKwkJCQlpZiAoZmlsZW5hbWVbMV0gPT0gJ1xcJykKKwkJCQkJZmlsZW5hbWUrKzsKKwkJCQllbHNlIGlmICh0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIDEpKQorCQkJCQlmaWxlbmFtZSArPSAzOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1xcJzoKKwkJCWlmIChjICE9ICdcXCcpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJaWYgKCorK2ZpbGVuYW1lICE9ICdcXCcpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJysnOgorCQkJaWYgKCFpc2RpZ2l0KGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCWlmICghaXN4ZGlnaXQoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJ2EnOgorCQkJaWYgKCF0b21veW9faXNfYWxwaGFiZXRfY2hhcihjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnMCc6CisJCWNhc2UgJzEnOgorCQljYXNlICcyJzoKKwkJY2FzZSAnMyc6CisJCQlpZiAoYyA9PSAnXFwnICYmIHRvbW95b19pc19ieXRlX3JhbmdlKGZpbGVuYW1lICsgMSkKKwkJCSAgICAmJiBzdHJuY21wKGZpbGVuYW1lICsgMSwgcGF0dGVybiwgMykgPT0gMCkgeworCQkJCWZpbGVuYW1lICs9IDM7CisJCQkJcGF0dGVybiArPSAyOworCQkJCWJyZWFrOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZC4gKi8KKwkJY2FzZSAnKic6CisJCWNhc2UgJ0AnOgorCQkJZm9yIChpID0gMDsgaSA8PSBmaWxlbmFtZV9lbmQgLSBmaWxlbmFtZTsgaSsrKSB7CisJCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoCisJCQkJCQkgICAgZmlsZW5hbWUgKyBpLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgICAgcGF0dGVybiArIDEsIHBhdHRlcm5fZW5kKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJYyA9IGZpbGVuYW1lW2ldOworCQkJCWlmIChjID09ICcuJyAmJiAqcGF0dGVybiA9PSAnQCcpCisJCQkJCWJyZWFrOworCQkJCWlmIChjICE9ICdcXCcpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChmaWxlbmFtZVtpICsgMV0gPT0gJ1xcJykKKwkJCQkJaSsrOworCQkJCWVsc2UgaWYgKHRvbW95b19pc19ieXRlX3JhbmdlKGZpbGVuYW1lICsgaSArIDEpKQorCQkJCQlpICs9IDM7CisJCQkJZWxzZQorCQkJCQlicmVhazsgLyogQmFkIHBhdHRlcm4uICovCisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLworCQlkZWZhdWx0OgorCQkJaiA9IDA7CisJCQljID0gKnBhdHRlcm47CisJCQlpZiAoYyA9PSAnJCcpIHsKKwkJCQl3aGlsZSAoaXNkaWdpdChmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnWCcpIHsKKwkJCQl3aGlsZSAoaXN4ZGlnaXQoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ0EnKSB7CisJCQkJd2hpbGUgKHRvbW95b19pc19hbHBoYWJldF9jaGFyKGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfQorCQkJZm9yIChpID0gMTsgaSA8PSBqOyBpKyspIHsKKwkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMigKKwkJCQkJCSAgICBmaWxlbmFtZSArIGksIGZpbGVuYW1lX2VuZCwKKwkJCQkJCSAgICBwYXR0ZXJuICsgMSwgcGF0dGVybl9lbmQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQgb3IgYmFkIHBhdHRlcm4uICovCisJCX0KKwkJZmlsZW5hbWUrKzsKKwkJcGF0dGVybisrOworCX0KKwl3aGlsZSAoKnBhdHRlcm4gPT0gJ1xcJyAmJgorCSAgICAgICAoKihwYXR0ZXJuICsgMSkgPT0gJyonIHx8ICoocGF0dGVybiArIDEpID09ICdAJykpCisJCXBhdHRlcm4gKz0gMjsKKwlyZXR1cm4gZmlsZW5hbWUgPT0gZmlsZW5hbWVfZW5kICYmIHBhdHRlcm4gPT0gcGF0dGVybl9lbmQ7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuIC0gUGF0dGVybiBtYXRjaGluZyB3aXRob3V0IHdpdGhvdXQgJy8nIGNoYXJhY3Rlci4KKyAqCisgKiBAZmlsZW5hbWU6ICAgICBUaGUgc3RhcnQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQGZpbGVuYW1lX2VuZDogVGhlIGVuZCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAcGF0dGVybjogICAgICBUaGUgc3RhcnQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICogQHBhdHRlcm5fZW5kOiAgVGhlIGVuZCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBtYXRjaGVzIEBwYXR0ZXJuLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybihjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWVfZW5kLAorCQkJCQkgICBjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgICBjb25zdCBjaGFyICpwYXR0ZXJuX2VuZCkKK3sKKwljb25zdCBjaGFyICpwYXR0ZXJuX3N0YXJ0ID0gcGF0dGVybjsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKwlib29sIHJlc3VsdDsKKworCXdoaWxlIChwYXR0ZXJuIDwgcGF0dGVybl9lbmQgLSAxKSB7CisJCS8qIFNwbGl0IGF0ICJcLSIgcGF0dGVybi4gKi8KKwkJaWYgKCpwYXR0ZXJuKysgIT0gJ1xcJyB8fCAqcGF0dGVybisrICE9ICctJykKKwkJCWNvbnRpbnVlOworCQlyZXN1bHQgPSB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGZpbGVuYW1lLAorCQkJCQkJCSBmaWxlbmFtZV9lbmQsCisJCQkJCQkJIHBhdHRlcm5fc3RhcnQsCisJCQkJCQkJIHBhdHRlcm4gLSAyKTsKKwkJaWYgKGZpcnN0KQorCQkJcmVzdWx0ID0gIXJlc3VsdDsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiBmYWxzZTsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJcGF0dGVybl9zdGFydCA9IHBhdHRlcm47CisJfQorCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoZmlsZW5hbWUsIGZpbGVuYW1lX2VuZCwKKwkJCQkJCSBwYXR0ZXJuX3N0YXJ0LCBwYXR0ZXJuX2VuZCk7CisJcmV0dXJuIGZpcnN0ID8gcmVzdWx0IDogIXJlc3VsdDsKK30KKworLyoqCisgKiB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4gLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLgorICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGF0dGVybjogIFRoZSBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIG1hdGNoZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisgKiAgIFxcICAgICBcIGl0c2VsZi4KKyAqICAgXG9vbyAgIE9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGEgYnl0ZS4KKyAqICAgXCogICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycuCisgKiAgIFxAICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDAgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nIG9yICcuJy4KKyAqICAgXD8gICAgIDEgYnl0ZSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycuCisgKiAgIFwkICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgZGVjaW1hbCBkaWdpdC4KKyAqICAgXCsgICAgIDEgZGVjaW1hbCBkaWdpdC4KKyAqICAgXFggICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMSBoZXhhZGVjaW1hbCBkaWdpdC4KKyAqICAgXHggICAgIDEgaGV4YWRlY2ltYWwgZGlnaXQuCisgKiAgIFxBICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgYWxwaGFiZXQgY2hhcmFjdGVyLgorICogICBcYSAgICAgMSBhbHBoYWJldCBjaGFyYWN0ZXIuCisgKiAgIFwtICAgICBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KKyAqLworYm9vbCB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybikKK3sKKwkvKgorCSAgaWYgKCFmaWxlbmFtZSB8fCAhcGF0dGVybikKKwkgIHJldHVybiBmYWxzZTsKKwkqLworCWNvbnN0IGNoYXIgKmYgPSBmaWxlbmFtZS0+bmFtZTsKKwljb25zdCBjaGFyICpwID0gcGF0dGVybi0+bmFtZTsKKwljb25zdCBpbnQgbGVuID0gcGF0dGVybi0+Y29uc3RfbGVuOworCisJLyogSWYgQHBhdHRlcm4gZG9lc24ndCBjb250YWluIHBhdHRlcm4sIEkgY2FuIHVzZSBzdHJjbXAoKS4gKi8KKwlpZiAoIXBhdHRlcm4tPmlzX3BhdHRlcm5lZCkKKwkJcmV0dXJuICF0b21veW9fcGF0aGNtcChmaWxlbmFtZSwgcGF0dGVybik7CisJLyogRG9udCBjb21wYXJlIGlmIHRoZSBudW1iZXIgb2YgJy8nIGRpZmZlcnMuICovCisJaWYgKGZpbGVuYW1lLT5kZXB0aCAhPSBwYXR0ZXJuLT5kZXB0aCkKKwkJcmV0dXJuIGZhbHNlOworCS8qIENvbXBhcmUgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgcGF0dGVybnMuICovCisJaWYgKHN0cm5jbXAoZiwgcCwgbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCWYgKz0gbGVuOworCXAgKz0gbGVuOworCS8qIE1haW4gbG9vcC4gQ29tcGFyZSBlYWNoIGRpcmVjdG9yeSBjb21wb25lbnQuICovCisJd2hpbGUgKCpmICYmICpwKSB7CisJCWNvbnN0IGNoYXIgKmZfZGVsaW1pdGVyID0gc3RyY2hyKGYsICcvJyk7CisJCWNvbnN0IGNoYXIgKnBfZGVsaW1pdGVyID0gc3RyY2hyKHAsICcvJyk7CisJCWlmICghZl9kZWxpbWl0ZXIpCisJCQlmX2RlbGltaXRlciA9IGYgKyBzdHJsZW4oZik7CisJCWlmICghcF9kZWxpbWl0ZXIpCisJCQlwX2RlbGltaXRlciA9IHAgKyBzdHJsZW4ocCk7CisJCWlmICghdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuKGYsIGZfZGVsaW1pdGVyLAorCQkJCQkJICAgIHAsIHBfZGVsaW1pdGVyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZiA9IGZfZGVsaW1pdGVyOworCQlpZiAoKmYpCisJCQlmKys7CisJCXAgPSBwX2RlbGltaXRlcjsKKwkJaWYgKCpwKQorCQkJcCsrOworCX0KKwkvKiBJZ25vcmUgdHJhaWxpbmcgIlwqIiBhbmQgIlxAIiBpbiBAcGF0dGVybi4gKi8KKwl3aGlsZSAoKnAgPT0gJ1xcJyAmJgorCSAgICAgICAoKihwICsgMSkgPT0gJyonIHx8ICoocCArIDEpID09ICdAJykpCisJCXAgKz0gMjsKKwlyZXR1cm4gISpmICYmICEqcDsKK30KKworLyoqCisgKiB0b21veW9faW9fcHJpbnRmIC0gVHJhbnNhY3Rpb25hbCBwcmludGYoKSB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiIHN0cnVjdHVyZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQGZtdDogIFRoZSBwcmludGYoKSdzIGZvcm1hdCBzdHJpbmcsIGZvbGxvd2VkIGJ5IHBhcmFtZXRlcnMuCisgKgorICogUmV0dXJucyB0cnVlIGlmIG91dHB1dCB3YXMgd3JpdHRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBzbnByaW50ZigpIHdpbGwgdHJ1bmNhdGUsIGJ1dCB0b21veW9faW9fcHJpbnRmKCkgd29uJ3QuCisgKi8KK2Jvb2wgdG9tb3lvX2lvX3ByaW50ZihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCBsZW47CisJaW50IHBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7CisJaW50IHNpemUgPSBoZWFkLT5yZWFkYnVmX3NpemUgLSBwb3M7CisKKwlpZiAoc2l6ZSA8PSAwKQorCQlyZXR1cm4gZmFsc2U7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlsZW4gPSB2c25wcmludGYoaGVhZC0+cmVhZF9idWYgKyBwb3MsIHNpemUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChwb3MgKyBsZW4gPj0gaGVhZC0+cmVhZGJ1Zl9zaXplKQorCQlyZXR1cm4gZmFsc2U7CisJaGVhZC0+cmVhZF9hdmFpbCArPSBsZW47CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9leGUgLSBHZXQgdG9tb3lvX3JlYWxwYXRoKCkgb2YgY3VycmVudCBwcm9jZXNzLgorICoKKyAqIFJldHVybnMgdGhlIHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2VzcyBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoaXMgZnVuY3Rpb24gZGlkbid0IHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2dldF9leGUodm9pZCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWNvbnN0IGNoYXIgKmNwID0gTlVMTDsKKworCWlmICghbW0pCisJCXJldHVybiBOVUxMOworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKSAmJiB2bWEtPnZtX2ZpbGUpIHsKKwkJCWNwID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCgmdm1hLT52bV9maWxlLT5mX3BhdGgpOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gY3A7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9tc2cgLSBHZXQgd2FybmluZyBtZXNzYWdlLgorICoKKyAqIEBpc19lbmZvcmNlOiBJcyBpdCBlbmZvcmNpbmcgbW9kZT8KKyAqCisgKiBSZXR1cm5zICJFUlJPUiIgb3IgIldBUk5JTkciLgorICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X21zZyhjb25zdCBib29sIGlzX2VuZm9yY2UpCit7CisJaWYgKGlzX2VuZm9yY2UpCisJCXJldHVybiAiRVJST1IiOworCWVsc2UKKwkJcmV0dXJuICJXQVJOSU5HIjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZmxhZ3MgLSBDaGVjayBtb2RlIGZvciBzcGVjaWZpZWQgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpbmRleDogIFRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIG1vZGUuCisgKgorICogVE9NT1lPIGNoZWNrcyBvbmx5IHByb2Nlc3MgY29udGV4dC4KKyAqIFRoaXMgY29kZSBkaXNhYmxlcyBUT01PWU8ncyBlbmZvcmNlbWVudCBpbiBjYXNlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbQorICogaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3Vuc2lnbmVkIGludCB0b21veW9fY2hlY2tfZmxhZ3MoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCWNvbnN0IHU4IGluZGV4KQoreworCWNvbnN0IHU4IHByb2ZpbGUgPSBkb21haW4tPnByb2ZpbGU7CisKKwlpZiAoV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSkpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fcG9saWN5X2xvYWRlZCAmJiBpbmRleCA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWAorI2lmIFRPTU9ZT19NQVhfUFJPRklMRVMgIT0gMjU2CisJCSYmIHByb2ZpbGUgPCBUT01PWU9fTUFYX1BST0ZJTEVTCisjZW5kaWYKKwkJJiYgdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdID8KKwkJdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdLT52YWx1ZVtpbmRleF0gOiAwOworfQorCisvKioKKyAqIHRvbW95b192ZXJib3NlX21vZGUgLSBDaGVjayB3aGV0aGVyIFRPTU9ZTyBpcyB2ZXJib3NlIG1vZGUuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGRvbWFpbiBwb2xpY3kgdmlvbGF0aW9uIHdhcm5pbmcgc2hvdWxkIGJlIHByaW50ZWQgdG8KKyAqIGNvbnNvbGUuCisgKi8KK2Jvb2wgdG9tb3lvX3ZlcmJvc2VfbW9kZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pCit7CisJcmV0dXJuIHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19WRVJCT1NFKSAhPSAwOworfQorCisvKioKKyAqIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2sgLSBDaGVjayBmb3IgZG9tYWluJ3MgcXVvdGEuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBkb21haW4gaXMgbm90IGV4Y2VlZGVkIHF1b3RhLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluKQoreworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCisJaWYgKCFkb21haW4pCisJCXJldHVybiB0cnVlOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQljb250aW51ZTsKKwkJc3dpdGNoICh0b21veW9fYWNsX3R5cGUyKHB0cikpIHsKKwkJCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsMTsKKwkJCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsMjsKKwkJCXUxNiBwZXJtOworCQljYXNlIFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTDoKKwkJCWFjbDEgPSBjb250YWluZXJfb2YocHRyLAorCQkJCSAgICBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJCSAgICBoZWFkKTsKKwkJCXBlcm0gPSBhY2wxLT5wZXJtOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYKKwkJCSAgICAoKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0wpIHwKKwkJCSAgICAgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMKSkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfVU5MSU5LX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtESVJfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9STURJUl9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LRklGT19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LU09DS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LQkxPQ0tfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0NIQVJfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1NZTUxJTktfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKKwkJCWFjbDIgPSBjb250YWluZXJfb2YocHRyLAorCQkJCSAgICBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJCSAgICBoZWFkKTsKKwkJCXBlcm0gPSBhY2wyLT5wZXJtOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9MSU5LX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoY291bnQgPCB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSkpCisJCXJldHVybiB0cnVlOworCWlmICghZG9tYWluLT5xdW90YV93YXJuZWQpIHsKKwkJZG9tYWluLT5xdW90YV93YXJuZWQgPSB0cnVlOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tV0FSTklORzogIgorCQkgICAgICAgIkRvbWFpbiAnJXMnIGhhcyBzbyBtYW55IEFDTHMgdG8gaG9sZC4gIgorCQkgICAgICAgIlN0b3BwZWQgbGVhcm5pbmcgbW9kZS5cbiIsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUgLSBDcmVhdGUgYSBuZXcgcHJvZmlsZS4KKyAqCisgKiBAcHJvZmlsZTogUHJvZmlsZSBudW1iZXIgdG8gY3JlYXRlLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19wcm9maWxlIiBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCB0b21veW9fcHJvZmlsZSAqdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19wcm9maWxlKGNvbnN0IHVuc2lnbmVkCisJCQkJCQkJCWludCBwcm9maWxlKQoreworCXN0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CisJc3RydWN0IHRvbW95b19wcm9maWxlICpwdHIgPSBOVUxMOworCWludCBpOworCisJaWYgKHByb2ZpbGUgPj0gVE9NT1lPX01BWF9QUk9GSUxFUykKKwkJcmV0dXJuIE5VTEw7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCW11dGV4X2xvY2soJmxvY2spOworCXB0ciA9IHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXTsKKwlpZiAocHRyKQorCQlnb3RvIG9rOworCXB0ciA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqcHRyKSk7CisJaWYgKCFwdHIpCisJCWdvdG8gb2s7CisJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWDsgaSsrKQorCQlwdHItPnZhbHVlW2ldID0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0uY3VycmVudF92YWx1ZTsKKwltYigpOyAvKiBBdm9pZCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uLiAqLworCXRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSA9IHB0cjsKKyBvazoKKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0cjsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcHJvZmlsZSAtIFdyaXRlIHRvIHByb2ZpbGUgdGFibGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWNoYXIgKmNwOworCXN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHJvZmlsZTsKKwl1bnNpZ25lZCBsb25nIG51bTsKKworCWNwID0gc3RyY2hyKGRhdGEsICctJyk7CisJaWYgKGNwKQorCQkqY3AgPSAnXDAnOworCWlmIChzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJm51bSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjcCkKKwkJZGF0YSA9IGNwICsgMTsKKwlwcm9maWxlID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19wcm9maWxlKG51bSk7CisJaWYgKCFwcm9maWxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljcCA9IHN0cmNocihkYXRhLCAnPScpOworCWlmICghY3ApCisJCXJldHVybiAtRUlOVkFMOworCSpjcCA9ICdcMCc7CisJaWYgKCFzdHJjbXAoZGF0YSwgIkNPTU1FTlQiKSkgeworCQlwcm9maWxlLT5jb21tZW50ID0gdG9tb3lvX3NhdmVfbmFtZShjcCArIDEpOworCQlyZXR1cm4gMDsKKwl9CisJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWDsgaSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ua2V5d29yZCkpCisJCQljb250aW51ZTsKKwkJaWYgKHNzY2FuZihjcCArIDEsICIldSIsICZ2YWx1ZSkgIT0gMSkgeworCQkJaW50IGo7CisJCQljb25zdCBjaGFyICoqbW9kZXM7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgVE9NT1lPX1ZFUkJPU0U6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV8yOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQltb2RlcyA9IHRvbW95b19tb2RlXzQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQkJaWYgKHN0cmNtcChjcCArIDEsIG1vZGVzW2pdKSkKKwkJCQkJY29udGludWU7CisJCQkJdmFsdWUgPSBqOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGogPT0gNCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIGlmICh2YWx1ZSA+IHRvbW95b19jb250cm9sX2FycmF5W2ldLm1heF92YWx1ZSkgeworCQkJdmFsdWUgPSB0b21veW9fY29udHJvbF9hcnJheVtpXS5tYXhfdmFsdWU7CisJCX0KKwkJcHJvZmlsZS0+dmFsdWVbaV0gPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3Byb2ZpbGUgLSBSZWFkIGZyb20gcHJvZmlsZSB0YWJsZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0YXRpYyBjb25zdCBpbnQgdG90YWwgPSBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVggKyAxOworCWludCBzdGVwOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlmb3IgKHN0ZXAgPSBoZWFkLT5yZWFkX3N0ZXA7IHN0ZXAgPCBUT01PWU9fTUFYX1BST0ZJTEVTICogdG90YWw7CisJICAgICBzdGVwKyspIHsKKwkJY29uc3QgdTggaW5kZXggPSBzdGVwIC8gdG90YWw7CisJCXU4IHR5cGUgPSBzdGVwICUgdG90YWw7CisJCWNvbnN0IHN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHJvZmlsZQorCQkJPSB0b21veW9fcHJvZmlsZV9wdHJbaW5kZXhdOworCQloZWFkLT5yZWFkX3N0ZXAgPSBzdGVwOworCQlpZiAoIXByb2ZpbGUpCisJCQljb250aW51ZTsKKwkJaWYgKCF0eXBlKSB7IC8qIFByaW50IHByb2ZpbGUnIGNvbW1lbnQgdGFnLiAqLworCQkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIldS1DT01NRU5UPSVzXG4iLAorCQkJCQkgICAgICBpbmRleCwgcHJvZmlsZS0+Y29tbWVudCA/CisJCQkJCSAgICAgIHByb2ZpbGUtPmNvbW1lbnQtPm5hbWUgOiAiIikpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQl0eXBlLS07CisJCWlmICh0eXBlIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYKSB7CisJCQljb25zdCB1bnNpZ25lZCBpbnQgdmFsdWUgPSBwcm9maWxlLT52YWx1ZVt0eXBlXTsKKwkJCWNvbnN0IGNoYXIgKiptb2RlcyA9IE5VTEw7CisJCQljb25zdCBjaGFyICprZXl3b3JkCisJCQkJPSB0b21veW9fY29udHJvbF9hcnJheVt0eXBlXS5rZXl3b3JkOworCQkJc3dpdGNoICh0b21veW9fY29udHJvbF9hcnJheVt0eXBlXS5tYXhfdmFsdWUpIHsKKwkJCWNhc2UgMzoKKwkJCQltb2RlcyA9IHRvbW95b19tb2RlXzQ7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV8yOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKG1vZGVzKSB7CisJCQkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIldS0lcz0lc1xuIiwgaW5kZXgsCisJCQkJCQkgICAgICBrZXl3b3JkLCBtb2Rlc1t2YWx1ZV0pKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIldS0lcz0ldVxuIiwgaW5kZXgsCisJCQkJCQkgICAgICBrZXl3b3JkLCB2YWx1ZSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmIChzdGVwID09IFRPTU9ZT19NQVhfUFJPRklMRVMgKiB0b3RhbCkKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCXJldHVybiAwOworfQorCisvKiBTdHJ1Y3R1cmUgZm9yIHBvbGljeSBtYW5hZ2VyLiAqLworc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCS8qIEEgcGF0aCB0byBwcm9ncmFtIG9yIGEgZG9tYWlubmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbWFuYWdlcjsKKwlib29sIGlzX2RvbWFpbjsgIC8qIFRydWUgaWYgbWFuYWdlciBpcyBhIGRvbWFpbm5hbWUuICovCisJYm9vbCBpc19kZWxldGVkOyAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgZGVsZXRlZC4gKi8KK307CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeSAtIEFkZCBhIG1hbmFnZXIgZW50cnkuCisgKgorICogQG1hbmFnZXI6ICAgVGhlIHBhdGggdG8gbWFuYWdlciBvciB0aGUgZG9tYWlubmFtbWUuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkoY29uc3QgY2hhciAqbWFuYWdlciwKKwkJCQkgICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfbWFuYWdlcjsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWJvb2wgaXNfZG9tYWluID0gZmFsc2U7CisKKwlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYobWFuYWdlcikpIHsKKwkJaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4obWFuYWdlciwgX19mdW5jX18pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlzX2RvbWFpbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKG1hbmFnZXIsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNhdmVkX21hbmFnZXIgPSB0b21veW9fc2F2ZV9uYW1lKG1hbmFnZXIpOworCWlmICghc2F2ZWRfbWFuYWdlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+bWFuYWdlciAhPSBzYXZlZF9tYW5hZ2VyKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPm1hbmFnZXIgPSBzYXZlZF9tYW5hZ2VyOworCW5ld19lbnRyeS0+aXNfZG9tYWluID0gaXNfZG9tYWluOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbWFuYWdlcl9wb2xpY3kgLSBXcml0ZSBtYW5hZ2VyIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJYm9vbCBpc19kZWxldGUgPSB0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVMRVRFKTsKKworCWlmICghc3RyY21wKGRhdGEsICJtYW5hZ2VfYnlfbm9uX3Jvb3QiKSkgeworCQl0b21veW9fbWFuYWdlX2J5X25vbl9yb290ID0gIWlzX2RlbGV0ZTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeSAtIFJlYWQgbWFuYWdlciBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfbWFuYWdlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlpZiAoaGVhZC0+cmVhZF9lb2YpCisJCXJldHVybiAwOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5LAorCQkJCSBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiVzXG4iLCBwdHItPm1hbmFnZXItPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwloZWFkLT5yZWFkX2VvZiA9IGRvbmU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyIC0gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBwcm9jZXNzIGlzIGEgcG9saWN5IG1hbmFnZXIuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcGVybWl0dGVkIHRvIG1vZGlmeSBwb2xpY3kKKyAqIHZpYSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKHZvaWQpCit7CisJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCWNvbnN0IGNoYXIgKmV4ZTsKKwljb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lID0gdG9tb3lvX2RvbWFpbigpLT5kb21haW5uYW1lOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXJldHVybiB0cnVlOworCWlmICghdG9tb3lvX21hbmFnZV9ieV9ub25fcm9vdCAmJiAodGFzay0+Y3JlZC0+dWlkIHx8IHRhc2stPmNyZWQtPmV1aWQpKQorCQlyZXR1cm4gZmFsc2U7CisJZG93bl9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJCWlmICghcHRyLT5pc19kZWxldGVkICYmIHB0ci0+aXNfZG9tYWluCisJCSAgICAmJiAhdG9tb3lvX3BhdGhjbXAoZG9tYWlubmFtZSwgcHRyLT5tYW5hZ2VyKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJaWYgKGZvdW5kKQorCQlyZXR1cm4gdHJ1ZTsKKwlleGUgPSB0b21veW9fZ2V0X2V4ZSgpOworCWlmICghZXhlKQorCQlyZXR1cm4gZmFsc2U7CisJZG93bl9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJCWlmICghcHRyLT5pc19kZWxldGVkICYmICFwdHItPmlzX2RvbWFpbgorCQkgICAgJiYgIXN0cmNtcChleGUsIHB0ci0+bWFuYWdlci0+bmFtZSkpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWlmICghZm91bmQpIHsgLyogUmVkdWNlIGVycm9yIG1lc3NhZ2VzLiAqLworCQlzdGF0aWMgcGlkX3QgbGFzdF9waWQ7CisJCWNvbnN0IHBpZF90IHBpZCA9IGN1cnJlbnQtPnBpZDsKKwkJaWYgKGxhc3RfcGlkICE9IHBpZCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgKCAlcyApIGlzIG5vdCBwZXJtaXR0ZWQgdG8gIgorCQkJICAgICAgICJ1cGRhdGUgcG9saWNpZXMuXG4iLCBkb21haW5uYW1lLT5uYW1lLCBleGUpOworCQkJbGFzdF9waWQgPSBwaWQ7CisJCX0KKwl9CisJdG9tb3lvX2ZyZWUoZXhlKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX3NlbGVjdF9vbmUgLSBQYXJzZSBzZWxlY3QgY29tbWFuZC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQGRhdGE6IFN0cmluZyB0byBwYXJzZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfc2VsZWN0X29uZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCQkgY29uc3QgY2hhciAqZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgcGlkOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisKKwlpZiAoc3NjYW5mKGRhdGEsICJwaWQ9JXUiLCAmcGlkKSA9PSAxKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOworCQlpZiAocCkKKwkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJfSBlbHNlIGlmICghc3RybmNtcChkYXRhLCAiZG9tYWluPSIsIDcpKSB7CisJCWlmICh0b21veW9faXNfZG9tYWluX2RlZihkYXRhICsgNykpIHsKKwkJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQkJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGRhdGEgKyA3KTsKKwkJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7CisJaGVhZC0+d3JpdGVfdmFyMSA9IGRvbWFpbjsKKwkvKiBBY2Nlc3NpbmcgcmVhZF9idWYgaXMgc2FmZSBiZWNhdXNlIGhlYWQtPmlvX3NlbSBpcyBoZWxkLiAqLworCWlmICghaGVhZC0+cmVhZF9idWYpCisJCXJldHVybiB0cnVlOyAvKiBEbyBub3RoaW5nIGlmIG9wZW4oT19XUk9OTFkpLiAqLworCWhlYWQtPnJlYWRfYXZhaWwgPSAwOworCXRvbW95b19pb19wcmludGYoaGVhZCwgIiMgc2VsZWN0ICVzXG4iLCBkYXRhKTsKKwloZWFkLT5yZWFkX3NpbmdsZV9kb21haW4gPSB0cnVlOworCWhlYWQtPnJlYWRfZW9mID0gIWRvbWFpbjsKKwlpZiAoZG9tYWluKSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmQ7CisJCWhlYWQtPnJlYWRfdmFyMSA9IE5VTEw7CisJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGQsICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChkID09IGRvbWFpbikKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMSA9ICZkLT5saXN0OworCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJaGVhZC0+cmVhZF9iaXQgPSAwOworCQloZWFkLT5yZWFkX3N0ZXAgPSAwOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkKQorCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiIyBUaGlzIGlzIGEgZGVsZXRlZCBkb21haW4uXG4iKTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3kgLSBXcml0ZSBkb21haW4gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGhlYWQtPndyaXRlX3ZhcjE7CisJYm9vbCBpc19kZWxldGUgPSBmYWxzZTsKKwlib29sIGlzX3NlbGVjdCA9IGZhbHNlOworCWJvb2wgaXNfdW5kZWxldGUgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgcHJvZmlsZTsKKworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVMRVRFKSkKKwkJaXNfZGVsZXRlID0gdHJ1ZTsKKwllbHNlIGlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfU0VMRUNUKSkKKwkJaXNfc2VsZWN0ID0gdHJ1ZTsKKwllbHNlIGlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfVU5ERUxFVEUpKQorCQlpc191bmRlbGV0ZSA9IHRydWU7CisJaWYgKGlzX3NlbGVjdCAmJiB0b21veW9faXNfc2VsZWN0X29uZShoZWFkLCBkYXRhKSkKKwkJcmV0dXJuIDA7CisJLyogRG9uJ3QgYWxsb3cgdXBkYXRpbmcgcG9saWNpZXMgYnkgbm9uIG1hbmFnZXIgcHJvZ3JhbXMuICovCisJaWYgKCF0b21veW9faXNfcG9saWN5X21hbmFnZXIoKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYoZGF0YSkpIHsKKwkJZG9tYWluID0gTlVMTDsKKwkJaWYgKGlzX2RlbGV0ZSkKKwkJCXRvbW95b19kZWxldGVfZG9tYWluKGRhdGEpOworCQllbHNlIGlmIChpc19zZWxlY3QpIHsKKwkJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQkJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGRhdGEpOworCQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQl9IGVsc2UgaWYgKGlzX3VuZGVsZXRlKQorCQkJZG9tYWluID0gdG9tb3lvX3VuZGVsZXRlX2RvbWFpbihkYXRhKTsKKwkJZWxzZQorCQkJZG9tYWluID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oZGF0YSwgMCk7CisJCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CisJCXJldHVybiAwOworCX0KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3NjYW5mKGRhdGEsIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICIldSIsICZwcm9maWxlKSA9PSAxCisJICAgICYmIHByb2ZpbGUgPCBUT01PWU9fTUFYX1BST0ZJTEVTKSB7CisJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gfHwgIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQkJZG9tYWluLT5wcm9maWxlID0gKHU4KSBwcm9maWxlOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoZGF0YSwgVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKSkgeworCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKGRvbWFpbiwgaXNfZGVsZXRlLAorCQkJICAgICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koZGF0YSwgZG9tYWluLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2wgLSBQcmludCBhIHNpbmdsZSBwYXRoIEFDTCBlbnRyeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQHB0cjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3ByaW50X3NpbmdsZV9wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCQkJIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqCisJCQkJCSBwdHIpCit7CisJaW50IHBvczsKKwl1OCBiaXQ7CisJY29uc3QgY2hhciAqYXRtYXJrID0gIiI7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3QgdTE2IHBlcm0gPSBwdHItPnBlcm07CisKKwlmaWxlbmFtZSA9IHB0ci0+ZmlsZW5hbWUtPm5hbWU7CisJZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT047CisJICAgICBiaXQrKykgeworCQljb25zdCBjaGFyICptc2c7CisJCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKKwkJCWNvbnRpbnVlOworCQkvKiBQcmludCAicmVhZC93cml0ZSIgaW5zdGVhZCBvZiAicmVhZCIgYW5kICJ3cml0ZSIuICovCisJCWlmICgoYml0ID09IFRPTU9ZT19UWVBFX1JFQURfQUNMIHx8CisJCSAgICAgYml0ID09IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCkKKwkJICAgICYmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChiaXQpOworCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICVzJXNcbiIsIG1zZywKKwkJCQkgICAgICBhdG1hcmssIGZpbGVuYW1lKSkKKwkJCWdvdG8gb3V0OworCX0KKwloZWFkLT5yZWFkX2JpdCA9IDA7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCWhlYWQtPnJlYWRfYml0ID0gYml0OworCWhlYWQtPnJlYWRfYXZhaWwgPSBwb3M7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2wgLSBQcmludCBhIGRvdWJsZSBwYXRoIEFDTCBlbnRyeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQHB0cjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3ByaW50X2RvdWJsZV9wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqCisJCQkJCSBwdHIpCit7CisJaW50IHBvczsKKwljb25zdCBjaGFyICphdG1hcmsxID0gIiI7CisJY29uc3QgY2hhciAqYXRtYXJrMiA9ICIiOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lMTsKKwljb25zdCBjaGFyICpmaWxlbmFtZTI7CisJY29uc3QgdTggcGVybSA9IHB0ci0+cGVybTsKKwl1OCBiaXQ7CisKKwlmaWxlbmFtZTEgPSBwdHItPmZpbGVuYW1lMS0+bmFtZTsKKwlmaWxlbmFtZTIgPSBwdHItPmZpbGVuYW1lMi0+bmFtZTsKKwlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTjsKKwkgICAgIGJpdCsrKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwkJaWYgKCEocGVybSAmICgxIDw8IGJpdCkpKQorCQkJY29udGludWU7CisJCW1zZyA9IHRvbW95b19kcDJrZXl3b3JkKGJpdCk7CisJCXBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMgJXMlcyAlcyVzXG4iLCBtc2csCisJCQkJICAgICAgYXRtYXJrMSwgZmlsZW5hbWUxLCBhdG1hcmsyLCBmaWxlbmFtZTIpKQorCQkJZ290byBvdXQ7CisJfQorCWhlYWQtPnJlYWRfYml0ID0gMDsKKwlyZXR1cm4gdHJ1ZTsKKyBvdXQ6CisJaGVhZC0+cmVhZF9iaXQgPSBiaXQ7CisJaGVhZC0+cmVhZF9hdmFpbCA9IHBvczsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX3ByaW50X2VudHJ5IC0gUHJpbnQgYW4gQUNMIGVudHJ5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAcHRyOiAgUG9pbnRlciB0byBhbiBBQ0wgZW50cnkuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3ByaW50X2VudHJ5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJICAgICAgIHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwljb25zdCB1OCBhY2xfdHlwZSA9IHRvbW95b19hY2xfdHlwZTIocHRyKTsKKworCWlmIChhY2xfdHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKKwkJcmV0dXJuIHRydWU7CisJaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkgeworCQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbAorCQkJPSBjb250YWluZXJfb2YocHRyLAorCQkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgICAgIGhlYWQpOworCQlyZXR1cm4gdG9tb3lvX3ByaW50X3NpbmdsZV9wYXRoX2FjbChoZWFkLCBhY2wpOworCX0KKwlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsCisJCQk9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgICAgIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICAgICAgaGVhZCk7CisJCXJldHVybiB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsKGhlYWQsIGFjbCk7CisJfQorCUJVRygpOyAvKiBUaGlzIG11c3Qgbm90IGhhcHBlbi4gKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX3BvbGljeSAtIFJlYWQgZG9tYWluIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9kb21haW5fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmRwb3M7CisJc3RydWN0IGxpc3RfaGVhZCAqYXBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDApCisJCWhlYWQtPnJlYWRfc3RlcCA9IDE7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUoZHBvcywgaGVhZC0+cmVhZF92YXIxLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwkJY29uc3QgY2hhciAqcXVvdGFfZXhjZWVkZWQgPSAiIjsKKwkJY29uc3QgY2hhciAqdHJhbnNpdGlvbl9mYWlsZWQgPSAiIjsKKwkJY29uc3QgY2hhciAqaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkID0gIiI7CisJCWRvbWFpbiA9IGxpc3RfZW50cnkoZHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5mbywgbGlzdCk7CisJCWlmIChoZWFkLT5yZWFkX3N0ZXAgIT0gMSkKKwkJCWdvdG8gYWNsX2xvb3A7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgJiYgIWhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbikKKwkJCWNvbnRpbnVlOworCQkvKiBQcmludCBkb21haW5uYW1lIGFuZCBmbGFncy4gKi8KKwkJaWYgKGRvbWFpbi0+cXVvdGFfd2FybmVkKQorCQkJcXVvdGFfZXhjZWVkZWQgPSAicXVvdGFfZXhjZWVkZWRcbiI7CisJCWlmIChkb21haW4tPmZsYWdzICYgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCkKKwkJCXRyYW5zaXRpb25fZmFpbGVkID0gInRyYW5zaXRpb25fZmFpbGVkXG4iOworCQlpZiAoZG9tYWluLT5mbGFncyAmCisJCSAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkKKwkJCWlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZAorCQkJCT0gVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICJcbiI7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLAorCQkJCSAgICAgICIlc1xuIiBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAiJXVcbiIKKwkJCQkgICAgICAiJXMlcyVzXG4iLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUsCisJCQkJICAgICAgZG9tYWluLT5wcm9maWxlLCBxdW90YV9leGNlZWRlZCwKKwkJCQkgICAgICB0cmFuc2l0aW9uX2ZhaWxlZCwKKwkJCQkgICAgICBpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQloZWFkLT5yZWFkX3N0ZXAgPSAyOworYWNsX2xvb3A6CisJCWlmIChoZWFkLT5yZWFkX3N0ZXAgPT0gMykKKwkJCWdvdG8gdGFpbF9tYXJrOworCQkvKiBQcmludCBBQ0wgZW50cmllcyBpbiB0aGUgZG9tYWluLiAqLworCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9jb29raWUoYXBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJCSAgICAgICZkb21haW4tPmFjbF9pbmZvX2xpc3QpIHsKKwkJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cgorCQkJCT0gbGlzdF9lbnRyeShhcG9zLCBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvLAorCQkJCQkgICAgICBsaXN0KTsKKwkJCWlmICghdG9tb3lvX3ByaW50X2VudHJ5KGhlYWQsIHB0cikpIHsKKwkJCQlkb25lID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCQlpZiAoIWRvbmUpCisJCQlicmVhazsKKwkJaGVhZC0+cmVhZF9zdGVwID0gMzsKK3RhaWxfbWFyazoKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJcbiIpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQloZWFkLT5yZWFkX3N0ZXAgPSAxOworCQlpZiAoaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluKQorCQkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwloZWFkLT5yZWFkX2VvZiA9IGRvbmU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2RvbWFpbl9wcm9maWxlIC0gQXNzaWduIHByb2ZpbGUgZm9yIHNwZWNpZmllZCBkb21haW4uCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRvaW5nCisgKgorICogICAgICggZWNobyAic2VsZWN0ICIgJGRvbWFpbm5hbWU7IGVjaG8gInVzZV9wcm9maWxlICIgJHByb2ZpbGUgKSB8CisgKiAgICAgL3Vzci9saWIvY2NzL2xvYWRwb2xpY3kgLWQKKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfZG9tYWluX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwljaGFyICpjcCA9IHN0cmNocihkYXRhLCAnICcpOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwl1bnNpZ25lZCBsb25nIHByb2ZpbGU7CisKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3AgPSAnXDAnOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihjcCArIDEpOworCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZwcm9maWxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRvbWFpbiAmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUworCSAgICAmJiAodG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdIHx8ICF0b21veW9fcG9saWN5X2xvYWRlZCkpCisJCWRvbWFpbi0+cHJvZmlsZSA9ICh1OCkgcHJvZmlsZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5fcHJvZmlsZSAtIFJlYWQgb25seSBkb21haW5uYW1lIGFuZCBwcm9maWxlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyBsaXN0IG9mIHByb2ZpbGUgbnVtYmVyIGFuZCBkb21haW5uYW1lIHBhaXJzLgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBkb2luZworICoKKyAqICAgICBncmVwIC1BIDEgJ148a2VybmVsPicgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kgfAorICogICAgIGF3ayAnIHsgaWYgKCBkb21haW5uYW1lID09ICIiICkgeyBpZiAoICQxID09ICI8a2VybmVsPiIgKQorICogICAgIGRvbWFpbm5hbWUgPSAkMDsgfSBlbHNlIGlmICggJDEgPT0gInVzZV9wcm9maWxlIiApIHsKKyAqICAgICBwcmludCAkMiAiICIgZG9tYWlubmFtZTsgZG9tYWlubmFtZSA9ICIiOyB9IH0gOyAnCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlpZiAoaGVhZC0+cmVhZF9lb2YpCisJCXJldHVybiAwOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIxLCAmdG9tb3lvX2RvbWFpbl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwkJZG9tYWluID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8sIGxpc3QpOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUgJXNcbiIsIGRvbWFpbi0+cHJvZmlsZSwKKwkJCQkgICAgICBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9waWQ6IFNwZWNpZnkgUElEIHRvIG9idGFpbiBkb21haW5uYW1lLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9waWQoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJdW5zaWduZWQgbG9uZyBwaWQ7CisJLyogTm8gZXJyb3IgY2hlY2suICovCisJc3RyaWN0X3N0cnRvdWwoaGVhZC0+d3JpdGVfYnVmLCAxMCwgJnBpZCk7CisJaGVhZC0+cmVhZF9zdGVwID0gKGludCkgcGlkOworCWhlYWQtPnJlYWRfZW9mID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfcGlkIC0gR2V0IGRvbWFpbm5hbWUgb2YgdGhlIHNwZWNpZmllZCBQSUQuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRoZSBkb21haW5uYW1lIHdoaWNoIHRoZSBzcGVjaWZpZWQgUElEIGlzIGluIG9uIHN1Y2Nlc3MsCisgKiBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLgorICogVGhlIFBJRCBpcyBzcGVjaWZpZWQgYnkgdG9tb3lvX3dyaXRlX3BpZCgpIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG9idGFpbgorICogdXNpbmcgcmVhZCgpL3dyaXRlKCkgaW50ZXJmYWNlIHJhdGhlciB0aGFuIHN5c2N0bCgpIGludGVyZmFjZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9waWQoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKGhlYWQtPnJlYWRfYXZhaWwgPT0gMCAmJiAhaGVhZC0+cmVhZF9lb2YpIHsKKwkJY29uc3QgaW50IHBpZCA9IGhlYWQtPnJlYWRfc3RlcDsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJCWlmIChwKQorCQkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KKwkJaWYgKGRvbWFpbikKKwkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiVkICV1ICVzIiwgcGlkLCBkb21haW4tPnByb2ZpbGUsCisJCQkJCSBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5IC0gV3JpdGUgZXhjZXB0aW9uIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwlib29sIGlzX2RlbGV0ZSA9IHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERUxFVEUpOworCisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koZGF0YSwgZmFsc2UsCisJCQkJCQkJIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9OT19LRUVQX0RPTUFJTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koZGF0YSwgdHJ1ZSwgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0lOSVRJQUxJWkVfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGRhdGEsIGZhbHNlLAorCQkJCQkJCSAgICAgIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9OT19JTklUSUFMSVpFX0RPTUFJTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShkYXRhLCB0cnVlLAorCQkJCQkJCSAgICAgIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9BTElBUykpCisJCXJldHVybiB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTllfUkVXUklURSkpCisJCXJldHVybiB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5IC0gUmVhZCBleGNlcHRpb24gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yZWFkX2VvZikgeworCQlzd2l0Y2ggKGhlYWQtPnJlYWRfc3RlcCkgeworCQljYXNlIDA6CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMTsKKwkJY2FzZSAxOgorCQkJaWYgKCF0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSAyOworCQljYXNlIDI6CisJCQlpZiAoIXRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSAzOworCQljYXNlIDM6CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNDsKKwkJY2FzZSA0OgorCQkJaWYgKCF0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDU7CisJCWNhc2UgNToKKwkJCWlmICghdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDY7CisJCWNhc2UgNjoKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA3OworCQljYXNlIDc6CisJCQlpZiAoIXRvbW95b19yZWFkX2ZpbGVfcGF0dGVybihoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA4OworCQljYXNlIDg6CisJCQlpZiAoIXRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDk7CisJCWNhc2UgOToKKwkJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHBhdGggdG8gcG9saWN5IGxvYWRlciAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19sb2FkZXIgPSAiL3NiaW4vdG9tb3lvLWluaXQiOworCisvKioKKyAqIHRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cyAtIENoZWNrIHdoZXRoZXIgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiAvc2Jpbi90b21veW8taW5pdCBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3BvbGljeV9sb2FkZXJfZXhpc3RzKHZvaWQpCit7CisJLyoKKwkgKiBEb24ndCBhY3RpdmF0ZSBNQUMgaWYgdGhlIHBvbGljeSBsb2FkZXIgZG9lc24ndCBleGlzdC4KKwkgKiBJZiB0aGUgaW5pdHJkIGluY2x1ZGVzIC9zYmluL2luaXQgYnV0IHJlYWwtcm9vdC1kZXYgaGFzIG5vdAorCSAqIG1vdW50ZWQgb24gLyB5ZXQsIGFjdGl2YXRpbmcgTUFDIHdpbGwgYmxvY2sgdGhlIHN5c3RlbSBzaW5jZQorCSAqIHBvbGljaWVzIGFyZSBub3QgbG9hZGVkIHlldC4KKwkgKiBUaHVzLCBsZXQgZG9fZXhlY3ZlKCkgY2FsbCB0aGlzIGZ1bmN0aW9uIGV2ZXJ5dGltZS4KKwkgKi8KKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCisJaWYgKHBhdGhfbG9va3VwKHRvbW95b19sb2FkZXIsIExPT0tVUF9GT0xMT1csICZuZCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm90IGFjdGl2YXRpbmcgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIG5vdyAiCisJCSAgICAgICAic2luY2UgJXMgZG9lc24ndCBleGlzdC5cbiIsIHRvbW95b19sb2FkZXIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fbG9hZF9wb2xpY3kgLSBSdW4gZXh0ZXJuYWwgcG9saWN5IGxvYWRlciB0byBsb2FkIHBvbGljeS4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBwcm9ncmFtIGFib3V0IHRvIHN0YXJ0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgQGZpbGVuYW1lIGlzIC9zYmluL2luaXQgLCBhbmQgaWYgc28KKyAqIGludm9rZSAvc2Jpbi90b21veW8taW5pdCBhbmQgd2FpdCBmb3IgdGhlIHRlcm1pbmF0aW9uIG9mIC9zYmluL3RvbW95by1pbml0CisgKiBhbmQgdGhlbiBjb250aW51ZXMgaW52b2NhdGlvbiBvZiAvc2Jpbi9pbml0LgorICogL3NiaW4vdG9tb3lvLWluaXQgcmVhZHMgcG9saWN5IGZpbGVzIGluIC9ldGMvdG9tb3lvLyBkaXJlY3RvcnkgYW5kCisgKiB3cml0ZXMgdG8gL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2VzLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwordm9pZCB0b21veW9fbG9hZF9wb2xpY3koY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciAqYXJndlsyXTsKKwljaGFyICplbnZwWzNdOworCisJaWYgKHRvbW95b19wb2xpY3lfbG9hZGVkKQorCQlyZXR1cm47CisJLyoKKwkgKiBDaGVjayBmaWxlbmFtZSBpcyAvc2Jpbi9pbml0IG9yIC9zYmluL3RvbW95by1zdGFydC4KKwkgKiAvc2Jpbi90b21veW8tc3RhcnQgaXMgYSBkdW1teSBmaWxlbmFtZSBpbiBjYXNlIHdoZXJlIC9zYmluL2luaXQgY2FuJ3QKKwkgKiBiZSBwYXNzZWQuCisJICogWW91IGNhbiBjcmVhdGUgL3NiaW4vdG9tb3lvLXN0YXJ0IGJ5CisJICogImxuIC1zIC9iaW4vdHJ1ZSAvc2Jpbi90b21veW8tc3RhcnQiLgorCSAqLworCWlmIChzdHJjbXAoZmlsZW5hbWUsICIvc2Jpbi9pbml0IikgJiYKKwkgICAgc3RyY21wKGZpbGVuYW1lLCAiL3NiaW4vdG9tb3lvLXN0YXJ0IikpCisJCXJldHVybjsKKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cygpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICJDYWxsaW5nICVzIHRvIGxvYWQgcG9saWN5LiBQbGVhc2Ugd2FpdC5cbiIsCisJICAgICAgIHRvbW95b19sb2FkZXIpOworCWFyZ3ZbMF0gPSAoY2hhciAqKSB0b21veW9fbG9hZGVyOworCWFyZ3ZbMV0gPSBOVUxMOworCWVudnBbMF0gPSAiSE9NRT0vIjsKKwllbnZwWzFdID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iOworCWVudnBbMl0gPSBOVUxMOworCWNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndlswXSwgYXJndiwgZW52cCwgMSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJUT01PWU86IDIuMi4wLXByZSAgIDIwMDkvMDIvMDFcbiIpOworCXByaW50ayhLRVJOX0lORk8gIk1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBhY3RpdmF0ZWQuXG4iKTsKKwl0b21veW9fcG9saWN5X2xvYWRlZCA9IHRydWU7CisJeyAvKiBDaGVjayBhbGwgcHJvZmlsZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGRvbWFpbnMgYXJlIGRlZmluZWQuICovCisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCQljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOworCQkJaWYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSkKKwkJCQljb250aW51ZTsKKwkJCXBhbmljKCJQcm9maWxlICV1ICh1c2VkIGJ5ICclcycpIG5vdCBkZWZpbmVkLlxuIiwKKwkJCSAgICAgIHByb2ZpbGUsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCX0KK30KKworLyoqCisgKiB0b21veW9fcmVhZF92ZXJzaW9uOiBHZXQgdmVyc2lvbi4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF92ZXJzaW9uKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiMi4yLjAtcHJlIik7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfc2VsZl9kb21haW4gLSBHZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGRvbWFpbm5hbWUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHByb2Nlc3MncyBkb21haW5uYW1lLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3NlbGZfZG9tYWluKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJLyoKKwkJICogdG9tb3lvX2RvbWFpbigpLT5kb21haW5uYW1lICE9IE5VTEwKKwkJICogYmVjYXVzZSBldmVyeSBwcm9jZXNzIGJlbG9uZ3MgdG8gYSBkb21haW4gYW5kCisJCSAqIHRoZSBkb21haW4ncyBuYW1lIGNhbm5vdCBiZSBOVUxMLgorCQkgKi8KKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXMiLCB0b21veW9fZG9tYWluKCktPmRvbWFpbm5hbWUtPm5hbWUpOworCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19vcGVuX2NvbnRyb2wgLSBvcGVuKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEB0eXBlOiBUeXBlIG9mIGludGVyZmFjZS4KKyAqIEBmaWxlOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogQXNzb2NpYXRlcyBwb2xpY3kgaGFuZGxlciBhbmQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuX2NvbnRyb2woY29uc3QgdTggdHlwZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSB0b21veW9fYWxsb2Moc2l6ZW9mKCpoZWFkKSk7CisKKwlpZiAoIWhlYWQpCisJCXJldHVybiAtRU5PTUVNOworCW11dGV4X2luaXQoJmhlYWQtPmlvX3NlbSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUT01PWU9fRE9NQUlOUE9MSUNZOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZG9tYWluX3BvbGljeSAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9kb21haW5fcG9saWN5OworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfZG9tYWluX3BvbGljeTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fRVhDRVBUSU9OUE9MSUNZOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZXhjZXB0aW9uX3BvbGljeSAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5OworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fU0VMRkRPTUFJTjoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3NlbGZfZG9tYWluICovCisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9zZWxmX2RvbWFpbjsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fRE9NQUlOX1NUQVRVUzoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLy5kb21haW5fc3RhdHVzICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX2RvbWFpbl9wcm9maWxlOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGU7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1BST0NFU1NfU1RBVFVTOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vLnByb2Nlc3Nfc3RhdHVzICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX3BpZDsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX3BpZDsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVkVSU0lPTjoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3ZlcnNpb24gKi8KKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX3ZlcnNpb247CisJCWhlYWQtPnJlYWRidWZfc2l6ZSA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fTUVNSU5GTzoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21lbWluZm8gKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXI7CisJCWhlYWQtPnJlYWRidWZfc2l6ZSA9IDUxMjsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fUFJPRklMRToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3Byb2ZpbGUgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfcHJvZmlsZTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX3Byb2ZpbGU7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX01BTkFHRVI6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9tYW5hZ2VyICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5OworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfbWFuYWdlcl9wb2xpY3k7CisJCWJyZWFrOworCX0KKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkgeworCQkvKgorCQkgKiBObyBuZWVkIHRvIGFsbG9jYXRlIHJlYWRfYnVmIHNpbmNlIGl0IGlzIG5vdCBvcGVuZWQKKwkJICogZm9yIHJlYWRpbmcuCisJCSAqLworCQloZWFkLT5yZWFkID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAoIWhlYWQtPnJlYWRidWZfc2l6ZSkKKwkJCWhlYWQtPnJlYWRidWZfc2l6ZSA9IDQwOTYgKiAyOworCQloZWFkLT5yZWFkX2J1ZiA9IHRvbW95b19hbGxvYyhoZWFkLT5yZWFkYnVmX3NpemUpOworCQlpZiAoIWhlYWQtPnJlYWRfYnVmKSB7CisJCQl0b21veW9fZnJlZShoZWFkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkgeworCQkvKgorCQkgKiBObyBuZWVkIHRvIGFsbG9jYXRlIHdyaXRlX2J1ZiBzaW5jZSBpdCBpcyBub3Qgb3BlbmVkCisJCSAqIGZvciB3cml0aW5nLgorCQkgKi8KKwkJaGVhZC0+d3JpdGUgPSBOVUxMOworCX0gZWxzZSBpZiAoaGVhZC0+d3JpdGUpIHsKKwkJaGVhZC0+d3JpdGVidWZfc2l6ZSA9IDQwOTYgKiAyOworCQloZWFkLT53cml0ZV9idWYgPSB0b21veW9fYWxsb2MoaGVhZC0+d3JpdGVidWZfc2l6ZSk7CisJCWlmICghaGVhZC0+d3JpdGVfYnVmKSB7CisJCQl0b21veW9fZnJlZShoZWFkLT5yZWFkX2J1Zik7CisJCQl0b21veW9fZnJlZShoZWFkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGhlYWQ7CisJLyoKKwkgKiBDYWxsIHRoZSBoYW5kbGVyIG5vdyBpZiB0aGUgZmlsZSBpcworCSAqIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9zZWxmX2RvbWFpbgorCSAqIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHVzZQorCSAqIGNhdCA8IC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9zZWxmX2RvbWFpbiIKKwkgKiB0byBrbm93IHRoZSBjdXJyZW50IHByb2Nlc3MncyBkb21haW5uYW1lLgorCSAqLworCWlmICh0eXBlID09IFRPTU9ZT19TRUxGRE9NQUlOKQorCQl0b21veW9fcmVhZF9jb250cm9sKGZpbGUsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2NvbnRyb2wgLSByZWFkKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmZmVyOiAgICAgUG9pbmVyIHRvIGJ1ZmZlciB0byB3cml0ZSB0by4KKyAqIEBidWZmZXJfbGVuOiBTaXplIG9mIEBidWZmZXIuCisgKgorICogUmV0dXJucyBieXRlcyByZWFkIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgICAgIGNvbnN0IGludCBidWZmZXJfbGVuKQoreworCWludCBsZW4gPSAwOworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmNwOworCisJaWYgKCFoZWFkLT5yZWFkKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoZWFkLT5pb19zZW0pKQorCQlyZXR1cm4gLUVJTlRSOworCS8qIENhbGwgdGhlIHBvbGljeSBoYW5kbGVyLiAqLworCWxlbiA9IGhlYWQtPnJlYWQoaGVhZCk7CisJaWYgKGxlbiA8IDApCisJCWdvdG8gb3V0OworCS8qIFdyaXRlIHRvIGJ1ZmZlci4gKi8KKwlsZW4gPSBoZWFkLT5yZWFkX2F2YWlsOworCWlmIChsZW4gPiBidWZmZXJfbGVuKQorCQlsZW4gPSBidWZmZXJfbGVuOworCWlmICghbGVuKQorCQlnb3RvIG91dDsKKwkvKiBoZWFkLT5yZWFkX2J1ZiBjaGFuZ2VzIGJ5IHNvbWUgZnVuY3Rpb25zLiAqLworCWNwID0gaGVhZC0+cmVhZF9idWY7CisJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGNwLCBsZW4pKSB7CisJCWxlbiA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKwloZWFkLT5yZWFkX2F2YWlsIC09IGxlbjsKKwltZW1tb3ZlKGNwLCBjcCArIGxlbiwgaGVhZC0+cmVhZF9hdmFpbCk7Cisgb3V0OgorCW11dGV4X3VubG9jaygmaGVhZC0+aW9fc2VtKTsKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9jb250cm9sIC0gd3JpdGUoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWZmZXI6ICAgICBQb2ludGVyIHRvIGJ1ZmZlciB0byByZWFkIGZyb20uCisgKiBAYnVmZmVyX2xlbjogU2l6ZSBvZiBAYnVmZmVyLgorICoKKyAqIFJldHVybnMgQGJ1ZmZlcl9sZW4gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCWNvbnN0IGludCBidWZmZXJfbGVuKQoreworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnJvciA9IGJ1ZmZlcl9sZW47CisJaW50IGF2YWlsX2xlbiA9IGJ1ZmZlcl9sZW47CisJY2hhciAqY3AwID0gaGVhZC0+d3JpdGVfYnVmOworCisJaWYgKCFoZWFkLT53cml0ZSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgYnVmZmVyX2xlbikpCisJCXJldHVybiAtRUZBVUxUOworCS8qIERvbid0IGFsbG93IHVwZGF0aW5nIHBvbGljaWVzIGJ5IG5vbiBtYW5hZ2VyIHByb2dyYW1zLiAqLworCWlmIChoZWFkLT53cml0ZSAhPSB0b21veW9fd3JpdGVfcGlkICYmCisJICAgIGhlYWQtPndyaXRlICE9IHRvbW95b193cml0ZV9kb21haW5fcG9saWN5ICYmCisJICAgICF0b21veW9faXNfcG9saWN5X21hbmFnZXIoKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoZWFkLT5pb19zZW0pKQorCQlyZXR1cm4gLUVJTlRSOworCS8qIFJlYWQgYSBsaW5lIGFuZCBkaXNwYXRjaCBpdCB0byB0aGUgcG9saWN5IGhhbmRsZXIuICovCisJd2hpbGUgKGF2YWlsX2xlbiA+IDApIHsKKwkJY2hhciBjOworCQlpZiAoaGVhZC0+d3JpdGVfYXZhaWwgPj0gaGVhZC0+d3JpdGVidWZfc2l6ZSAtIDEpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGdldF91c2VyKGMsIGJ1ZmZlcikpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCWJ1ZmZlcisrOworCQlhdmFpbF9sZW4tLTsKKwkJY3AwW2hlYWQtPndyaXRlX2F2YWlsKytdID0gYzsKKwkJaWYgKGMgIT0gJ1xuJykKKwkJCWNvbnRpbnVlOworCQljcDBbaGVhZC0+d3JpdGVfYXZhaWwgLSAxXSA9ICdcMCc7CisJCWhlYWQtPndyaXRlX2F2YWlsID0gMDsKKwkJdG9tb3lvX25vcm1hbGl6ZV9saW5lKGNwMCk7CisJCWhlYWQtPndyaXRlKGhlYWQpOworCX0KKwltdXRleF91bmxvY2soJmhlYWQtPmlvX3NlbSk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jbG9zZV9jb250cm9sIC0gY2xvc2UoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZWxlYXNlcyBtZW1vcnkgYW5kIHJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIFJlbGVhc2UgbWVtb3J5IHVzZWQgZm9yIHBvbGljeSBJL08uICovCisJdG9tb3lvX2ZyZWUoaGVhZC0+cmVhZF9idWYpOworCWhlYWQtPnJlYWRfYnVmID0gTlVMTDsKKwl0b21veW9fZnJlZShoZWFkLT53cml0ZV9idWYpOworCWhlYWQtPndyaXRlX2J1ZiA9IE5VTEw7CisJdG9tb3lvX2ZyZWUoaGVhZCk7CisJaGVhZCA9IE5VTEw7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBBQ0wgZW50cnkuCisgKgorICogQGFjbF90eXBlOiAgVHlwZSBvZiBBQ0wgZW50cnkuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBBQ0wgZW50cnkgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3ZvaWQgKnRvbW95b19hbGxvY19hY2xfZWxlbWVudChjb25zdCB1OCBhY2xfdHlwZSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKworCXN3aXRjaCAoYWNsX3R5cGUpIHsKKwljYXNlIFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCk7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCXB0ciA9IHRvbW95b19hbGxvY19lbGVtZW50KGxlbik7CisJaWYgKCFwdHIpCisJCXJldHVybiBOVUxMOworCXB0ci0+dHlwZSA9IGFjbF90eXBlOworCXJldHVybiBwdHI7Cit9CisKKy8qKgorICogdG9tb3lvX29wZW4gLSBvcGVuKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBpbm9kZTogUG9pbnRlciB0byAic3RydWN0IGlub2RlIi4KKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY29uc3QgaW50IGtleSA9ICgodTggKikgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKQorCQktICgodTggKikgTlVMTCk7CisJcmV0dXJuIHRvbW95b19vcGVuX2NvbnRyb2woa2V5LCBmaWxlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVsZWFzZSAtIGNsb3NlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBpbm9kZTogUG9pbnRlciB0byAic3RydWN0IGlub2RlIi4KKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRvbW95b19jbG9zZV9jb250cm9sKGZpbGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkIC0gcmVhZCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWY6ICAgUG9pbnRlciB0byBidWZmZXIuCisgKiBAY291bnQ6IFNpemUgb2YgQGJ1Zi4KKyAqIEBwcG9zOiAgVW51c2VkLgorICoKKyAqIFJldHVybnMgYnl0ZXMgcmVhZCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHRvbW95b19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHRvbW95b19yZWFkX2NvbnRyb2woZmlsZSwgYnVmLCBjb3VudCk7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlIC0gd3JpdGUoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmOiAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIEBidWYuCisgKiBAcHBvczogIFVudXNlZC4KKyAqCisgKiBSZXR1cm5zIEBjb3VudCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHRvbW95b193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2NvbnRyb2woZmlsZSwgYnVmLCBjb3VudCk7Cit9CisKKy8qIE9wZXJhdGlvbnMgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdG9tb3lvX29wZXJhdGlvbnMgPSB7CisJLm9wZW4gICAgPSB0b21veW9fb3BlbiwKKwkucmVsZWFzZSA9IHRvbW95b19yZWxlYXNlLAorCS5yZWFkICAgID0gdG9tb3lvX3JlYWQsCisJLndyaXRlICAgPSB0b21veW9fd3JpdGUsCit9OworCisvKioKKyAqIHRvbW95b19jcmVhdGVfZW50cnkgLSBDcmVhdGUgaW50ZXJmYWNlIGZpbGVzIHVuZGVyIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gZGlyZWN0b3J5LgorICoKKyAqIEBuYW1lOiAgIFRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UgZmlsZS4KKyAqIEBtb2RlOiAgIFRoZSBwZXJtaXNzaW9uIG9mIHRoZSBpbnRlcmZhY2UgZmlsZS4KKyAqIEBwYXJlbnQ6IFRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICogQGtleTogICAgVHlwZSBvZiBpbnRlcmZhY2UuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdG9tb3lvX2NyZWF0ZV9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBtb2RlX3QgbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCB1OCBrZXkpCit7CisJc2VjdXJpdHlmc19jcmVhdGVfZmlsZShuYW1lLCBtb2RlLCBwYXJlbnQsICgodTggKikgTlVMTCkgKyBrZXksCisJCQkgICAgICAgJnRvbW95b19vcGVyYXRpb25zKTsKK30KKworLyoqCisgKiB0b21veW9faW5pdGVyZmFjZV9pbml0IC0gSW5pdGlhbGl6ZSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRvbW95b19pbml0ZXJmYWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICp0b21veW9fZGlyOworCisJLyogRG9uJ3QgY3JlYXRlIHNlY3VyaXR5ZnMgZW50cmllcyB1bmxlc3MgcmVnaXN0ZXJlZC4gKi8KKwlpZiAoY3VycmVudF9jcmVkKCktPnNlY3VyaXR5ICE9ICZ0b21veW9fa2VybmVsX2RvbWFpbikKKwkJcmV0dXJuIDA7CisKKwl0b21veW9fZGlyID0gc2VjdXJpdHlmc19jcmVhdGVfZGlyKCJ0b21veW8iLCBOVUxMKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJkb21haW5fcG9saWN5IiwgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fRE9NQUlOUE9MSUNZKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJleGNlcHRpb25fcG9saWN5IiwgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fRVhDRVBUSU9OUE9MSUNZKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJzZWxmX2RvbWFpbiIsICAgICAgMDQwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fU0VMRkRPTUFJTik7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiLmRvbWFpbl9zdGF0dXMiLCAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0RPTUFJTl9TVEFUVVMpOworCXRvbW95b19jcmVhdGVfZW50cnkoIi5wcm9jZXNzX3N0YXR1cyIsICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19QUk9DRVNTX1NUQVRVUyk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgibWVtaW5mbyIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX01FTUlORk8pOworCXRvbW95b19jcmVhdGVfZW50cnkoInByb2ZpbGUiLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19QUk9GSUxFKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJtYW5hZ2VyIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fTUFOQUdFUik7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgidmVyc2lvbiIsICAgICAgICAgIDA0MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1ZFUlNJT04pOworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbCh0b21veW9faW5pdGVyZmFjZV9pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uaCBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGNiN2NjCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCisgKgorICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2lmbmRlZiBfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9ICisjZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gKKworI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgZGVudHJ5Oworc3RydWN0IHZmc21vdW50OworCisvKiBUZW1wb3JhcnkgYnVmZmVyIGZvciBob2xkaW5nIHBhdGhuYW1lcy4gKi8KK3N0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgeworCWNoYXIgYnVmZmVyWzQwOTZdOworfTsKKworLyogU3RydWN0dXJlIGZvciBob2xkaW5nIGEgdG9rZW4uICovCitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgaGFzaDsgICAgICAgICAgLyogPSBmdWxsX25hbWVfaGFzaChuYW1lLCBzdHJsZW4obmFtZSkpICovCisJdTE2IHRvdGFsX2xlbjsgICAgIC8qID0gc3RybGVuKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAqLworCXUxNiBjb25zdF9sZW47ICAgICAvKiA9IHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aChuYW1lKSAgICAgKi8KKwlib29sIGlzX2RpcjsgICAgICAgLyogPSB0b21veW9fc3RyZW5kc3dpdGgobmFtZSwgIi8iKSAgICAgICovCisJYm9vbCBpc19wYXR0ZXJuZWQ7IC8qID0gdG9tb3lvX3BhdGhfY29udGFpbnNfcGF0dGVybihuYW1lKSAqLworCXUxNiBkZXB0aDsgICAgICAgICAvKiA9IHRvbW95b19wYXRoX2RlcHRoKG5hbWUpICAgICAgICAgICAgKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXggbGVuZ3RoIG9mIGEgdG9rZW4uCisgKgorICogQSB0b2tlbiBjb25zaXN0cyBvZiBvbmx5IEFTQ0lJIHByaW50YWJsZSBjaGFyYWN0ZXJzLgorICogTm9uIHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIGEgdG9rZW4gaXMgcmVwcmVzZW50ZWQgaW4gXG9vbyBzdHlsZQorICogb2N0YWwgc3RyaW5nLiBUaHVzLCBcIGl0c2VsZiBpcyByZXByZXNlbnRlZCBhcyBcXC4KKyAqLworI2RlZmluZSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiA0MDAwCisKKy8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyByZXF1ZXN0ZWQgcGF0aG5hbWUuICovCitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgeworCS8qIEtlZXAgImhlYWQiIGZpcnN0LCBmb3IgdGhpcyBwb2ludGVyIGlzIHBhc3NlZCB0byB0b21veW9fZnJlZSgpLiAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGhlYWQ7CisJY2hhciBiYXJpaWVyMVsxNl07IC8qIFNhZmVndWFyZCBmb3Igb3ZlcnJ1bi4gKi8KKwljaGFyIGJvZHlbVE9NT1lPX01BWF9QQVRITkFNRV9MRU5dOworCWNoYXIgYmFycmllcjJbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCit9OworCisvKgorICogQ29tbW9uIGhlYWRlciBmb3IgaG9sZGluZyBBQ0wgZW50cmllcy4KKyAqCisgKiBQYWNraW5nICJzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIiBhbGxvd3MKKyAqICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1MTYiIGFuZAorICogInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIgdG8gZW1iZWQgInU4IgorICogd2l0aG91dCBlbmxhcmdpbmcgdGhlaXIgc3RydWN0dXJlIHNpemUuCisgKi8KK3N0cnVjdCB0b21veW9fYWNsX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKgorCSAqIFR5cGUgb2YgdGhpcyBBQ0wgZW50cnkuCisJICoKKwkgKiBNU0IgaXMgaXNfZGVsZXRlZCBmbGFnLgorCSAqLworCXU4IHR5cGU7Cit9IF9fcGFja2VkOworCisvKiBUaGlzIEFDTCBlbnRyeSBpcyBkZWxldGVkLiAgICAgICAgICAgKi8KKyNkZWZpbmUgVE9NT1lPX0FDTF9ERUxFVEVEICAgICAgICAweDgwCisKKy8qIFN0cnVjdHVyZSBmb3IgZG9tYWluIGluZm9ybWF0aW9uLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgYWNsX2luZm9fbGlzdDsKKwkvKiBOYW1lIG9mIHRoaXMgZG9tYWluLiBOZXZlciBOVUxMLiAgICAgICAgICAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOworCXU4IHByb2ZpbGU7ICAgICAgICAvKiBQcm9maWxlIG51bWJlciB0byB1c2UuICovCisJdTggaXNfZGVsZXRlZDsgICAgIC8qIERlbGV0ZSBmbGFnLgorCQkJICAgICAgMCA9IGFjdGl2ZS4KKwkJCSAgICAgIDEgPSBkZWxldGVkIGJ1dCB1bmRlbGV0YWJsZS4KKwkJCSAgICAgIDI1NSA9IGRlbGV0ZWQgYW5kIG5vIGxvbmdlciB1bmRlbGV0YWJsZS4gKi8KKwlib29sIHF1b3RhX3dhcm5lZDsgLyogUXVvdGEgd2Fybm5pbmcgZmxhZy4gICAqLworCS8qIERPTUFJTl9GTEFHU18qLiBVc2UgdG9tb3lvX3NldF9kb21haW5fZmxhZygpIHRvIG1vZGlmeS4gKi8KKwl1OCBmbGFnczsKK307CisKKy8qIFByb2ZpbGUgbnVtYmVyIGlzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUuICovCisjZGVmaW5lIFRPTU9ZT19NQVhfUFJPRklMRVMgMjU2CisKKy8qIElnbm9yZSAiYWxsb3dfcmVhZCIgZGlyZWN0aXZlIGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCisjZGVmaW5lIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEIDEKKy8qCisgKiBUaGlzIGRvbWFpbiB3YXMgdW5hYmxlIHRvIGNyZWF0ZSBhIG5ldyBkb21haW4gYXQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oKQorICogYmVjYXVzZSB0aGUgbmFtZSBvZiB0aGUgZG9tYWluIHRvIGJlIGNyZWF0ZWQgd2FzIHRvbyBsb25nIG9yCisgKiBpdCBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LgorICogTW9yZSB0aGFuIG9uZSBwcm9jZXNzIGNvbnRpbnVlZCBleGVjdmUoKSB3aXRob3V0IGRvbWFpbiB0cmFuc2l0aW9uLgorICovCisjZGVmaW5lIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQgICAgICAgIDIKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgImFsbG93X3JlYWQvd3JpdGUiLCAiYWxsb3dfZXhlY3V0ZSIsICJhbGxvd19yZWFkIiwKKyAqICJhbGxvd193cml0ZSIsICJhbGxvd19jcmVhdGUiLCAiYWxsb3dfdW5saW5rIiwgImFsbG93X21rZGlyIiwgImFsbG93X3JtZGlyIiwKKyAqICJhbGxvd19ta2ZpZm8iLCAiYWxsb3dfbWtzb2NrIiwgImFsbG93X21rYmxvY2siLCAiYWxsb3dfbWtjaGFyIiwKKyAqICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiBhbmQgImFsbG93X3Jld3JpdGUiIGRpcmVjdGl2ZS4KKyAqLworc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIHsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIGhlYWQ7IC8qIHR5cGUgPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wgKi8KKwl1MTYgcGVybTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWU7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZW5hbWUiIGFuZCAiYWxsb3dfbGluayIgZGlyZWN0aXZlLiAqLworc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIHsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIGhlYWQ7IC8qIHR5cGUgPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wgKi8KKwl1OCBwZXJtOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTE7CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMjsKK307CisKKy8qIEtleXdvcmRzIGZvciBBQ0xzLiAqLworI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTElBUyAgICAgICAgICAgICAgICAgICAgICJhbGlhcyAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQgICAgICAgICAgICAgICAgImFsbG93X3JlYWQgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9ERUxFVEUgICAgICAgICAgICAgICAgICAgICJkZWxldGUgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUgICAgICAgICAgICAgICJkZW55X3Jld3JpdGUgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4gICAgICAgICAgICAgICJmaWxlX3BhdHRlcm4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTiAgICAgICAgICJpbml0aWFsaXplX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0tFRVBfRE9NQUlOICAgICAgICAgICAgICAgImtlZXBfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fSU5JVElBTElaRV9ET01BSU4gICAgICAibm9faW5pdGlhbGl6ZV9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9OT19LRUVQX0RPTUFJTiAgICAgICAgICAgICJub19rZWVwX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgInNlbGVjdCAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1VOREVMRVRFICAgICAgICAgICAgICAgICAgInVuZGVsZXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgICAgICAgICAgICAgICAidXNlX3Byb2ZpbGUgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgICJpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQiCisvKiBBIGRvbWFpbiBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIDxrZXJuZWw+LiAqLworI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICI8a2VybmVsPiIKKyNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRV9MRU4gICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKFRPTU9ZT19ST09UX05BTUUpIC0gMSkKKworLyogSW5kZXggbnVtYmVycyBmb3IgQWNjZXNzIENvbnRyb2xzLiAqLworI2RlZmluZSBUT01PWU9fTUFDX0ZPUl9GSUxFICAgICAgICAgICAgICAgICAgMCAgLyogZG9tYWluX3BvbGljeS5jb25mICovCisjZGVmaW5lIFRPTU9ZT19NQVhfQUNDRVBUX0VOVFJZICAgICAgICAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19WRVJCT1NFICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCAgICAgICAgICAgICAzCisKKy8qIFN0cnVjdHVyZSBmb3IgcmVhZGluZy93cml0aW5nIHBvbGljeSB2aWEgc2VjdXJpdHlmcyBpbnRlcmZhY2VzLiAqLworc3RydWN0IHRvbW95b19pb19idWZmZXIgeworCWludCAoKnJlYWQpIChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqKTsKKwlpbnQgKCp3cml0ZSkgKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICopOworCS8qIEV4Y2x1c2l2ZSBsb2NrIGZvciB0aGlzIHN0cnVjdHVyZS4gICAqLworCXN0cnVjdCBtdXRleCBpb19zZW07CisJLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSByZWFkaW5nIGZyb20uICovCisJc3RydWN0IGxpc3RfaGVhZCAqcmVhZF92YXIxOworCS8qIEV4dHJhIHZhcmlhYmxlcyBmb3IgcmVhZGluZy4gICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMjsKKwkvKiBUaGUgcG9zaXRpb24gY3VycmVudGx5IHdyaXRpbmcgdG8uICAgKi8KKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp3cml0ZV92YXIxOworCS8qIFRoZSBzdGVwIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAqLworCWludCByZWFkX3N0ZXA7CisJLyogQnVmZmVyIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAgICovCisJY2hhciAqcmVhZF9idWY7CisJLyogRU9GIGZsYWcgZm9yIHJlYWRpbmcuICAgICAgICAgICAgICAgICovCisJYm9vbCByZWFkX2VvZjsKKwkvKiBSZWFkIGRvbWFpbiBBQ0wgb2Ygc3BlY2lmaWVkIFBJRD8gICAgKi8KKwlib29sIHJlYWRfc2luZ2xlX2RvbWFpbjsKKwkvKiBFeHRyYSB2YXJpYWJsZSBmb3IgcmVhZGluZy4gICAgICAgICAgKi8KKwl1OCByZWFkX2JpdDsKKwkvKiBCeXRlcyBhdmFpbGFibGUgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KKwlpbnQgcmVhZF9hdmFpbDsKKwkvKiBTaXplIG9mIHJlYWQgYnVmZmVyLiAgICAgICAgICAgICAgICAgKi8KKwlpbnQgcmVhZGJ1Zl9zaXplOworCS8qIEJ1ZmZlciBmb3Igd3JpdGluZy4gICAgICAgICAgICAgICAgICAqLworCWNoYXIgKndyaXRlX2J1ZjsKKwkvKiBCeXRlcyBhdmFpbGFibGUgZm9yIHdyaXRpbmcuICAgICAgICAgKi8KKwlpbnQgd3JpdGVfYXZhaWw7CisJLyogU2l6ZSBvZiB3cml0ZSBidWZmZXIuICAgICAgICAgICAgICAgICovCisJaW50IHdyaXRlYnVmX3NpemU7Cit9OworCisvKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW4gaGFzIHRvbyBtYW55IEFDTCBlbnRyaWVzIHRvIGhvbGQuICovCitib29sIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbik7CisvKiBUcmFuc2FjdGlvbmFsIHNwcmludGYoKSBmb3IgcG9saWN5IGR1bXAuICovCitib29sIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworLyogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWlubmFtZSBpcyBjb3JyZWN0LiAqLworYm9vbCB0b21veW9faXNfY29ycmVjdF9kb21haW4oY29uc3QgdW5zaWduZWQgY2hhciAqZG9tYWlubmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGlzIGNvcnJlY3QuICovCitib29sIHRvbW95b19pc19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHM4IHN0YXJ0X3R5cGUsCisJCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSwKKwkJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbik7CisvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBjYW4gYmUgYSBkb21haW5uYW1lLiAqLworYm9vbCB0b21veW9faXNfZG9tYWluX2RlZihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOworLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4gKi8KK2Jvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4pOworLyogUmVhZCAiYWxpYXMiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX2FsaWFzX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKgorICogUmVhZCAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5CisgKiBpbiBleGNlcHRpb24gcG9saWN5LgorICovCitib29sIHRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImZpbGVfcGF0dGVybiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImFsbG93X3JlYWQiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJkZW55X3Jld3JpdGUiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFdyaXRlIGRvbWFpbiBwb2xpY3kgdmlvbGF0aW9uIHdhcm5pbmcgbWVzc2FnZSB0byBjb25zb2xlPyAqLworYm9vbCB0b21veW9fdmVyYm9zZV9tb2RlKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbik7CisvKiBDb252ZXJ0IGRvdWJsZSBwYXRoIG9wZXJhdGlvbiB0byBvcGVyYXRpb24gbmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19kcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbik7CisvKiBHZXQgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBnaXZlbiBkb21haW5uYW1lLiAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9sYXN0X25hbWUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKTsKKy8qIEdldCB3YXJuaW5nIG1lc3NhZ2UuICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X21zZyhjb25zdCBib29sIGlzX2VuZm9yY2UpOworLyogQ29udmVydCBzaW5nbGUgcGF0aCBvcGVyYXRpb24gdG8gb3BlcmF0aW9uIG5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fc3Aya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOworLyogRGVsZXRlIGEgZG9tYWluLiAqLworaW50IHRvbW95b19kZWxldGVfZG9tYWluKGNoYXIgKmRhdGEpOworLyogQ3JlYXRlICJhbGlhcyIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qCisgKiBDcmVhdGUgImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeQorICogaW4gZXhjZXB0aW9uIHBvbGljeS4KKyAqLworaW50IHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKgorICogQ3JlYXRlICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLCAiYWxsb3dfcmVhZCIsICJhbGxvd193cml0ZSIsCisgKiAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsICJhbGxvd19ybWRpciIsCisgKiAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwgImFsbG93X21rY2hhciIsCisgKiAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIsICJhbGxvd19yZXdyaXRlIiwgImFsbG93X3JlbmFtZSIgYW5kCisgKiAiYWxsb3dfbGluayIgZW50cnkgaW4gZG9tYWluIHBvbGljeS4KKyAqLworaW50IHRvbW95b193cml0ZV9maWxlX3BvbGljeShjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIENyZWF0ZSAiYWxsb3dfcmVhZCIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIENyZWF0ZSAiZGVueV9yZXdyaXRlIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImZpbGVfcGF0dGVybiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogRmluZCBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy8qIEZpbmQgb3IgY3JlYXRlIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oY29uc3QgY2hhciAqCisJCQkJCQkJICAgIGRvbWFpbm5hbWUsCisJCQkJCQkJICAgIGNvbnN0IHU4IHByb2ZpbGUpOworLyogVW5kZWxldGUgYSBkb21haW4uICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fdW5kZWxldGVfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLyogQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuICovCit1bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQljb25zdCB1OCBpbmRleCk7CisvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHN0cnVjdHVyZXMuICovCit2b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpOworLyogRmlsbCBpbiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG1lbWJlcnMuICovCit2b2lkIHRvbW95b19maWxsX3BhdGhfaW5mbyhzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHRyKTsKKy8qIFJ1biBwb2xpY3kgbG9hZGVyIHdoZW4gL3NiaW4vaW5pdCBzdGFydHMuICovCit2b2lkIHRvbW95b19sb2FkX3BvbGljeShjb25zdCBjaGFyICpmaWxlbmFtZSk7CisvKiBDaGFuZ2UgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLT5mbGFncy4gKi8KK3ZvaWQgdG9tb3lvX3NldF9kb21haW5fZmxhZyhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IGZsYWdzKTsKKworLyogc3RyY21wKCkgZm9yICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgc3RydWN0dXJlLiAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19wYXRoY21wKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphLAorCQkJCSAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmIpCit7CisJcmV0dXJuIGEtPmhhc2ggIT0gYi0+aGFzaCB8fCBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7Cit9CisKKy8qIEdldCB0eXBlIG9mIGFuIEFDTCBlbnRyeS4gKi8KK3N0YXRpYyBpbmxpbmUgdTggdG9tb3lvX2FjbF90eXBlMShzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCit7CisJcmV0dXJuIHB0ci0+dHlwZSAmIH5UT01PWU9fQUNMX0RFTEVURUQ7Cit9CisKKy8qIEdldCB0eXBlIG9mIGFuIEFDTCBlbnRyeS4gKi8KK3N0YXRpYyBpbmxpbmUgdTggdG9tb3lvX2FjbF90eXBlMihzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCit7CisJcmV0dXJuIHB0ci0+dHlwZTsKK30KKworLyoqCisgKiB0b21veW9faXNfdmFsaWQgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBjaGFyLgorICoKKyAqIEBjOiBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYyBpcyBhIHZhbGlkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX3ZhbGlkKGNvbnN0IHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gYyA+ICcgJyAmJiBjIDwgMTI3OworfQorCisvKioKKyAqIHRvbW95b19pc19pbnZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGFuIGludmFsaWQgY2hhci4KKyAqCisgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19pbnZhbGlkKGNvbnN0IHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gYyAmJiAoYyA8PSAnICcgfHwgYyA+PSAxMjcpOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9saXN0OworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgdG9tb3lvX2RvbWFpbl9saXN0X2xvY2s7CisKKy8qIExvY2sgZm9yIGRvbWFpbi0+YWNsX2luZm9fbGlzdC4gKi8KK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrOworCisvKiBIYXMgL3NiaW4vaW5pdCBzdGFydGVkPyAqLworZXh0ZXJuIGJvb2wgdG9tb3lvX3BvbGljeV9sb2FkZWQ7CisKKy8qIFRoZSBrZXJuZWwncyBkb21haW4uICovCitleHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2Nvb2tpZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3Qgd2l0aCBjb29raWUuCisgKiBAcG9zOiAgICAgICAgdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQGNvb2tpZTogICAgIHRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBjb29raWUuCisgKiBAaGVhZDogICAgICAgdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqCisgKiBTYW1lIHdpdGggbGlzdF9mb3JfZWFjaCgpIGV4Y2VwdCB0aGF0IHRoaXMgcHJpbWl0aXZlIHVzZXMgQGNvb2tpZQorICogc28gdGhhdCB3ZSBjYW4gY29udGludWUgaXRlcmF0aW9uLgorICogQGNvb2tpZSBtdXN0IGJlIE5VTEwgd2hlbiBpdGVyYXRpb24gc3RhcnRzLCBhbmQgQGNvb2tpZSB3aWxsIGJlY29tZQorICogTlVMTCB3aGVuIGl0ZXJhdGlvbiBmaW5pc2hlcy4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGNvb2tpZSwgaGVhZCkgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKCh7IGlmICghY29va2llKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgIGNvb2tpZSA9IGhlYWQ7IH0pLCAgICAgICAgICAgICAgIFwKKwkgICAgIHBvcyA9IChjb29raWUpLT5uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgIHByZWZldGNoKHBvcy0+bmV4dCksIHBvcyAhPSAoaGVhZCkgfHwgKChjb29raWUpID0gTlVMTCk7IFwKKwkgICAgIChjb29raWUpID0gcG9zLCBwb3MgPSBwb3MtPm5leHQpCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9IKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2E3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vZG9tYWluLmMKQEAgLTAsMCArMSw4NzggQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vZG9tYWluLmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKworLyogVmFyaWFibGVzIGRlZmluaXRpb25zLiovCisKKy8qIFRoZSBpbml0aWFsIGRvbWFpbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuICovCitMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9saXN0KTsKK0RFQ0xBUkVfUldTRU0odG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCisvKiBTdHJ1Y3R1cmUgZm9yICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7ICAgIC8qIFRoaXMgbWF5IGJlIE5VTEwgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsKKwlib29sIGlzX2RlbGV0ZWQ7CisJYm9vbCBpc19ub3Q7ICAgICAgIC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyAibm9faW5pdGlhbGl6ZV9kb21haW4iLiAgKi8KKwkvKiBUcnVlIGlmIHRoZSBkb21haW5uYW1lIGlzIHRvbW95b19nZXRfbGFzdF9uYW1lKCkuICovCisJYm9vbCBpc19sYXN0X25hbWU7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtOyAgICAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCisJYm9vbCBpc19kZWxldGVkOworCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2tlZXBfZG9tYWluIi4gICAgICAgICovCisJLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLworCWJvb2wgaXNfbGFzdF9uYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAiYWxpYXMiIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm9yaWdpbmFsX25hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmFsaWFzZWRfbmFtZTsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKioKKyAqIHRvbW95b19zZXRfZG9tYWluX2ZsYWcgLSBTZXQgb3IgY2xlYXIgZG9tYWluJ3MgYXR0cmlidXRlIGZsYWdzLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICogQGZsYWdzOiAgICAgRmxhZ3MgdG8gc2V0IG9yIGNsZWFyLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwordm9pZCB0b21veW9fc2V0X2RvbWFpbl9mbGFnKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCBib29sIGlzX2RlbGV0ZSwgY29uc3QgdTggZmxhZ3MpCit7CisJLyogV2UgbmVlZCB0byBzZXJpYWxpemUgYmVjYXVzZSB0aGlzIGlzIGJpdGZpZWxkIG9wZXJhdGlvbi4gKi8KKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCXNwaW5fbG9jaygmbG9jayk7CisJaWYgKCFpc19kZWxldGUpCisJCWRvbWFpbi0+ZmxhZ3MgfD0gZmxhZ3M7CisJZWxzZQorCQlkb21haW4tPmZsYWdzICY9IH5mbGFnczsKKwlzcGluX3VubG9jaygmbG9jayk7CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworfQorCisvKioKKyAqIHRvbW95b19nZXRfbGFzdF9uYW1lIC0gR2V0IGxhc3QgY29tcG9uZW50IG9mIGEgZG9tYWlubmFtZS4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgZG9tYWlubmFtZS4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9sYXN0X25hbWUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQoreworCWNvbnN0IGNoYXIgKmNwMCA9IGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZTsKKwljb25zdCBjaGFyICpjcDEgPSBzdHJyY2hyKGNwMCwgJyAnKTsKKworCWlmIChjcDEpCisJCXJldHVybiBjcDEgKyAxOworCXJldHVybiBjcDA7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLiBNYXkgYmUgTlVMTC4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLgorICogQGlzX25vdDogICAgIFRydWUgaWYgaXQgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeS4KKyAqIEBpc19kZWxldGU6ICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkJCQkJICBjb25zdCBjaGFyICpwcm9ncmFtLAorCQkJCQkJICBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wcm9ncmFtOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWJvb2wgaXNfbGFzdF9uYW1lID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOyAvKiBObyBwYXR0ZXJucyBhbGxvd2VkLiAqLworCWlmIChkb21haW5uYW1lKSB7CisJCWlmICghdG9tb3lvX2lzX2RvbWFpbl9kZWYoZG9tYWlubmFtZSkgJiYKKwkJICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCQlpc19sYXN0X25hbWUgPSB0cnVlOworCQllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwkJaWYgKCFzYXZlZF9kb21haW5uYW1lKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNhdmVkX3Byb2dyYW0gPSB0b21veW9fc2F2ZV9uYW1lKHByb2dyYW0pOworCWlmICghc2F2ZWRfcHJvZ3JhbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19ub3QgIT0gaXNfbm90IHx8CisJCSAgICBwdHItPmRvbWFpbm5hbWUgIT0gc2F2ZWRfZG9tYWlubmFtZSB8fAorCQkgICAgcHRyLT5wcm9ncmFtICE9IHNhdmVkX3Byb2dyYW0pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJbmV3X2VudHJ5LT5wcm9ncmFtID0gc2F2ZWRfcHJvZ3JhbTsKKwluZXdfZW50cnktPmlzX25vdCA9IGlzX25vdDsKKwluZXdfZW50cnktPmlzX2xhc3RfbmFtZSA9IGlzX2xhc3RfbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCkgeworCQljb25zdCBjaGFyICpubzsKKwkJY29uc3QgY2hhciAqZnJvbSA9ICIiOworCQljb25zdCBjaGFyICpkb21haW4gPSAiIjsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5LAorCQkJCSAgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJbm8gPSBwdHItPmlzX25vdCA/ICJub18iIDogIiI7CisJCWlmIChwdHItPmRvbWFpbm5hbWUpIHsKKwkJCWZyb20gPSAiIGZyb20gIjsKKwkJCWRvbWFpbiA9IHB0ci0+ZG9tYWlubmFtZS0+bmFtZTsKKwkJfQorCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwKKwkJCQkgICAgICAiJXMiIFRPTU9ZT19LRVlXT1JEX0lOSVRJQUxJWkVfRE9NQUlOCisJCQkJICAgICAgIiVzJXMlc1xuIiwgbm8sIHB0ci0+cHJvZ3JhbS0+bmFtZSwgZnJvbSwKKwkJCQkgICAgICBkb21haW4pKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX25vdDogICAgVHJ1ZSBpZiBpdCBpcyAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqY3AgPSBzdHJzdHIoZGF0YSwgIiBmcm9tICIpOworCisJaWYgKGNwKSB7CisJCSpjcCA9ICdcMCc7CisJCXJldHVybiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShjcCArIDYsIGRhdGEsCisJCQkJCQkJICAgICAgaXNfbm90LAorCQkJCQkJCSAgICAgIGlzX2RlbGV0ZSk7CisJfQorCXJldHVybiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCBkYXRhLCBpc19ub3QsCisJCQkJCQkgICAgICBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwcm9ncmFtIGNhdXNlcyBkb21haW5uYW1lIHJlaW5pdGlhbGl6YXRpb24uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLgorICogQGxhc3RfbmFtZTogIFRoZSBsYXN0IGNvbXBvbmVudCBvZiBAZG9tYWlubmFtZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZXhlY3V0aW5nIEBwcm9ncmFtIHJlaW5pdGlhbGl6ZXMgZG9tYWluIHRyYW5zaXRpb24sCisgKiBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkgZG9tYWlubmFtZSwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtLAorCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkgbGFzdF9uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJYm9vbCBmbGFnID0gZmFsc2U7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT5kb21haW5uYW1lKSB7CisJCQlpZiAoIXB0ci0+aXNfbGFzdF9uYW1lKSB7CisJCQkJaWYgKHB0ci0+ZG9tYWlubmFtZSAhPSBkb21haW5uYW1lKQorCQkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHRvbW95b19wYXRoY21wKHB0ci0+ZG9tYWlubmFtZSwgbGFzdF9uYW1lKSkKKwkJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKHRvbW95b19wYXRoY21wKHB0ci0+cHJvZ3JhbSwgcHJvZ3JhbSkpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+aXNfbm90KSB7CisJCQlmbGFnID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlmbGFnID0gdHJ1ZTsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCXJldHVybiBmbGFnOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2RvbWFpbl9rZWVwZXJfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uIE1heSBiZSBOVUxMLgorICogQGlzX25vdDogICAgIFRydWUgaWYgaXQgaXMgIm5vX2tlZXBfZG9tYWluIiBlbnRyeS4KKyAqIEBpc19kZWxldGU6ICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvbWFpbl9rZWVwZXJfZW50cnkoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwcm9ncmFtLAorCQkJCQkgICAgIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wcm9ncmFtID0gTlVMTDsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCWludCBlcnJvciA9IC1FTk9NRU07CisJYm9vbCBpc19sYXN0X25hbWUgPSBmYWxzZTsKKworCWlmICghdG9tb3lvX2lzX2RvbWFpbl9kZWYoZG9tYWlubmFtZSkgJiYKKwkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJaXNfbGFzdF9uYW1lID0gdHJ1ZTsKKwllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHByb2dyYW0pIHsKKwkJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNhdmVkX3Byb2dyYW0gPSB0b21veW9fc2F2ZV9uYW1lKHByb2dyYW0pOworCQlpZiAoIXNhdmVkX3Byb2dyYW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJaWYgKCFzYXZlZF9kb21haW5uYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfbm90ICE9IGlzX25vdCB8fAorCQkgICAgcHRyLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUgfHwKKwkJICAgIHB0ci0+cHJvZ3JhbSAhPSBzYXZlZF9wcm9ncmFtKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCW5ld19lbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07CisJbmV3X2VudHJ5LT5pc19ub3QgPSBpc19ub3Q7CisJbmV3X2VudHJ5LT5pc19sYXN0X25hbWUgPSBpc19sYXN0X25hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2tlZXBfZG9tYWluIiBlbnRyeS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqY3AgPSBzdHJzdHIoZGF0YSwgIiBmcm9tICIpOworCisJaWYgKGNwKSB7CisJCSpjcCA9ICdcMCc7CisJCXJldHVybiB0b21veW9fdXBkYXRlX2RvbWFpbl9rZWVwZXJfZW50cnkoY3AgKyA2LCBkYXRhLCBpc19ub3QsCisJCQkJCQkJIGlzX2RlbGV0ZSk7CisJfQorCXJldHVybiB0b21veW9fdXBkYXRlX2RvbWFpbl9rZWVwZXJfZW50cnkoZGF0YSwgTlVMTCwgaXNfbm90LCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJCWNvbnN0IGNoYXIgKm5vOworCQljb25zdCBjaGFyICpmcm9tID0gIiI7CisJCWNvbnN0IGNoYXIgKnByb2dyYW0gPSAiIjsKKworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlubyA9IHB0ci0+aXNfbm90ID8gIm5vXyIgOiAiIjsKKwkJaWYgKHB0ci0+cHJvZ3JhbSkgeworCQkJZnJvbSA9ICIgZnJvbSAiOworCQkJcHJvZ3JhbSA9IHB0ci0+cHJvZ3JhbS0+bmFtZTsKKwkJfQorCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwKKwkJCQkgICAgICAiJXMiIFRPTU9ZT19LRVlXT1JEX0tFRVBfRE9NQUlOCisJCQkJICAgICAgIiVzJXMlc1xuIiwgbm8sIHByb2dyYW0sIGZyb20sCisJCQkJICAgICAgcHRyLT5kb21haW5uYW1lLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiB0b21veW9faXNfZG9tYWluX2tlZXBlciAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHByb2dyYW0gY2F1c2VzIGRvbWFpbiB0cmFuc2l0aW9uIHN1cHByZXNzaW9uLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBsYXN0X25hbWU6ICBUaGUgbGFzdCBjb21wb25lbnQgb2YgQGRvbWFpbm5hbWUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGV4ZWN1dGluZyBAcHJvZ3JhbSBzdXByZXNzZXMgZG9tYWluIHRyYW5zaXRpb24sCisgKiBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19kb21haW5fa2VlcGVyKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmxhc3RfbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKKwlib29sIGZsYWcgPSBmYWxzZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXB0ci0+aXNfbGFzdF9uYW1lKSB7CisJCQlpZiAocHRyLT5kb21haW5uYW1lICE9IGRvbWFpbm5hbWUpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5kb21haW5uYW1lLCBsYXN0X25hbWUpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwdHItPnByb2dyYW0gJiYgdG9tb3lvX3BhdGhjbXAocHRyLT5wcm9ncmFtLCBwcm9ncmFtKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT5pc19ub3QpIHsKKwkJCWZsYWcgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWZsYWcgPSB0cnVlOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCXJldHVybiBmbGFnOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fYWxpYXNfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IiBsaXN0LgorICoKKyAqIEBvcmlnaW5hbF9uYW1lOiBUaGUgb3JpZ2luYWwgcHJvZ3JhbSdzIHJlYWwgbmFtZS4KKyAqIEBhbGlhc2VkX25hbWU6ICBUaGUgc3ltYm9saWMgcHJvZ3JhbSdzIHN5bWJvbGljIGxpbmsncyBuYW1lLgorICogQGlzX2RlbGV0ZTogICAgIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkoY29uc3QgY2hhciAqb3JpZ2luYWxfbmFtZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmFsaWFzZWRfbmFtZSwKKwkJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX29yaWdpbmFsX25hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2FsaWFzZWRfbmFtZTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKG9yaWdpbmFsX25hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pIHx8CisJICAgICF0b21veW9faXNfY29ycmVjdF9wYXRoKGFsaWFzZWRfbmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOyAvKiBObyBwYXR0ZXJucyBhbGxvd2VkLiAqLworCXNhdmVkX29yaWdpbmFsX25hbWUgPSB0b21veW9fc2F2ZV9uYW1lKG9yaWdpbmFsX25hbWUpOworCXNhdmVkX2FsaWFzZWRfbmFtZSA9IHRvbW95b19zYXZlX25hbWUoYWxpYXNlZF9uYW1lKTsKKwlpZiAoIXNhdmVkX29yaWdpbmFsX25hbWUgfHwgIXNhdmVkX2FsaWFzZWRfbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+b3JpZ2luYWxfbmFtZSAhPSBzYXZlZF9vcmlnaW5hbF9uYW1lIHx8CisJCSAgICBwdHItPmFsaWFzZWRfbmFtZSAhPSBzYXZlZF9hbGlhc2VkX25hbWUpCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+b3JpZ2luYWxfbmFtZSA9IHNhdmVkX29yaWdpbmFsX25hbWU7CisJbmV3X2VudHJ5LT5hbGlhc2VkX25hbWUgPSBzYXZlZF9hbGlhc2VkX25hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2FsaWFzX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2FsaWFzX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2FsaWFzX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fYWxpYXNfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CisKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fYWxpYXNfZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9BTElBUyAiJXMgJXNcbiIsCisJCQkJICAgICAgcHRyLT5vcmlnaW5hbF9uYW1lLT5uYW1lLAorCQkJCSAgICAgIHB0ci0+YWxpYXNlZF9uYW1lLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpjcCA9IHN0cmNocihkYXRhLCAnICcpOworCisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNwKysgPSAnXDAnOworCXJldHVybiB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5KGRhdGEsIGNwLCBpc19kZWxldGUpOworfQorCisvKiBEb21haW4gY3JlYXRlL2RlbGV0ZS91bmRlbGV0ZSBoYW5kbGVyLiAqLworCisvKiAjZGVmaW5lIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUgKi8KKworLyoqCisgKiB0b21veW9fZGVsZXRlX2RvbWFpbiAtIERlbGV0ZSBhIGRvbWFpbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworaW50IHRvbW95b19kZWxldGVfZG9tYWluKGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJcHJpbnRrKEtFUk5fREVCVUcgInRvbW95b19kZWxldGVfZG9tYWluICVzXG4iLCBkb21haW5uYW1lKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX3BhdGhjbXAoZG9tYWluLT5kb21haW5uYW1lLCAmbmFtZSkpCisJCQljb250aW51ZTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkxpc3Q6ICVwICV1XG4iLCBkb21haW4sIGRvbWFpbi0+aXNfZGVsZXRlZCk7CisJfQorI2VuZGlmCisJLyogSXMgdGhlcmUgYW4gYWN0aXZlIGRvbWFpbj8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4yOworCQkvKiBOZXZlciBkZWxldGUgdG9tb3lvX2tlcm5lbF9kb21haW4gKi8KKwkJaWYgKGRvbWFpbiA9PSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCQljb250aW51ZTsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCB8fAorCQkgICAgdG9tb3lvX3BhdGhjbXAoZG9tYWluLT5kb21haW5uYW1lLCAmbmFtZSkpCisJCQljb250aW51ZTsKKwkJLyogTWFyayBhbHJlYWR5IGRlbGV0ZWQgZG9tYWlucyBhcyBub24gdW5kZWxldGFibGUuICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluMiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJaWYgKCFkb21haW4yLT5pc19kZWxldGVkIHx8CisJCQkgICAgdG9tb3lvX3BhdGhjbXAoZG9tYWluMi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJCWNvbnRpbnVlOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJCWlmIChkb21haW4yLT5pc19kZWxldGVkICE9IDI1NSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiTWFya2VkICVwIGFzIG5vbiB1bmRlbGV0YWJsZVxuIiwKKwkJCQkgICAgICAgZG9tYWluMik7CisjZW5kaWYKKwkJCWRvbWFpbjItPmlzX2RlbGV0ZWQgPSAyNTU7CisJCX0KKwkJLyogRGVsZXRlIGFuZCBtYXJrIGFjdGl2ZSBkb21haW4gYXMgdW5kZWxldGFibGUuICovCisJCWRvbWFpbi0+aXNfZGVsZXRlZCA9IDE7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQlwcmludGsoS0VSTl9ERUJVRyAiTWFya2VkICVwIGFzIHVuZGVsZXRhYmxlXG4iLCBkb21haW4pOworI2VuZGlmCisJCWJyZWFrOworCX0KKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3VuZGVsZXRlX2RvbWFpbiAtIFVuZGVsZXRlIGEgZG9tYWluLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3VuZGVsZXRlX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpjYW5kaWRhdGVfZG9tYWluID0gTlVMTDsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCXByaW50ayhLRVJOX0RFQlVHICJ0b21veW9fdW5kZWxldGVfZG9tYWluICVzXG4iLCBkb21haW5uYW1lKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX3BhdGhjbXAoZG9tYWluLT5kb21haW5uYW1lLCAmbmFtZSkpCisJCQljb250aW51ZTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkxpc3Q6ICVwICV1XG4iLCBkb21haW4sIGRvbWFpbi0+aXNfZGVsZXRlZCk7CisJfQorI2VuZGlmCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKCZuYW1lLCBkb21haW4tPmRvbWFpbm5hbWUpKQorCQkJY29udGludWU7CisJCWlmICghZG9tYWluLT5pc19kZWxldGVkKSB7CisJCQkvKiBUaGlzIGRvbWFpbiBpcyBhY3RpdmUuIEkgY2FuJ3QgdW5kZWxldGUuICovCisJCQljYW5kaWRhdGVfZG9tYWluID0gTlVMTDsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXAgaXMgYWN0aXZlLiBJIGNhbid0IHVuZGVsZXRlLlxuIiwKKwkJCSAgICAgICBkb21haW4pOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQkvKiBJcyB0aGlzIGRvbWFpbiB1bmRlbGV0YWJsZT8gKi8KKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCA9PSAxKQorCQkJY2FuZGlkYXRlX2RvbWFpbiA9IGRvbWFpbjsKKwl9CisJaWYgKGNhbmRpZGF0ZV9kb21haW4pIHsKKwkJY2FuZGlkYXRlX2RvbWFpbi0+aXNfZGVsZXRlZCA9IDA7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXAgd2FzIHVuZGVsZXRlZC5cbiIsIGNhbmRpZGF0ZV9kb21haW4pOworI2VuZGlmCisJfQorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gY2FuZGlkYXRlX2RvbWFpbjsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbiAtIENyZWF0ZSBhIGRvbWFpbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2ZpbGU6ICAgIFByb2ZpbGUgbnVtYmVyIHRvIGFzc2lnbiBpZiB0aGUgZG9tYWluIHdhcyBuZXdseSBjcmVhdGVkLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGNvbnN0IGNoYXIgKgorCQkJCQkJCSAgICBkb21haW5uYW1lLAorCQkJCQkJCSAgICBjb25zdCB1OCBwcm9maWxlKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWU7CisKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkb21haW5uYW1lKTsKKwlpZiAoZG9tYWluKQorCQlnb3RvIG91dDsKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCWdvdG8gb3V0OworCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJZ290byBvdXQ7CisJLyogQ2FuIEkgcmV1c2UgbWVtb3J5IG9mIGRlbGV0ZWQgZG9tYWluPyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCQlib29sIGZsYWc7CisJCWlmICghZG9tYWluLT5pc19kZWxldGVkIHx8CisJCSAgICBkb21haW4tPmRvbWFpbm5hbWUgIT0gc2F2ZWRfZG9tYWlubmFtZSkKKwkJCWNvbnRpbnVlOworCQlmbGFnID0gZmFsc2U7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKKwkJCWlmICh0b21veW9fcmVhbF9kb21haW4ocCkgIT0gZG9tYWluKQorCQkJCWNvbnRpbnVlOworCQkJZmxhZyA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KKwkJaWYgKGZsYWcpCisJCQljb250aW51ZTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCXByaW50ayhLRVJOX0RFQlVHICJSZXVzaW5nICVwICVzXG4iLCBkb21haW4sCisJCSAgICAgICBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworI2VuZGlmCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCQlwdHItPnR5cGUgfD0gVE9NT1lPX0FDTF9ERUxFVEVEOworCQl9CisJCXRvbW95b19zZXRfZG9tYWluX2ZsYWcoZG9tYWluLCB0cnVlLCBkb21haW4tPmZsYWdzKTsKKwkJZG9tYWluLT5wcm9maWxlID0gcHJvZmlsZTsKKwkJZG9tYWluLT5xdW90YV93YXJuZWQgPSBmYWxzZTsKKwkJbWIoKTsgLyogQXZvaWQgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbi4gKi8KKwkJZG9tYWluLT5pc19kZWxldGVkID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vIG1lbW9yeSByZXVzYWJsZS4gQ3JlYXRlIHVzaW5nIG5ldyBtZW1vcnkuICovCisJZG9tYWluID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpkb21haW4pKTsKKwlpZiAoZG9tYWluKSB7CisJCUlOSVRfTElTVF9IRUFEKCZkb21haW4tPmFjbF9pbmZvX2xpc3QpOworCQlkb21haW4tPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCQlkb21haW4tPnByb2ZpbGUgPSBwcm9maWxlOworCQlsaXN0X2FkZF90YWlsKCZkb21haW4tPmxpc3QsICZ0b21veW9fZG9tYWluX2xpc3QpOworCX0KKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBkb21haW47Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4gLSBGaW5kIGEgZG9tYWluLgorICoKKyAqIEBicHJtOiAgICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IGxpbnV4X2JpbnBybSIuCisgKiBAbmV4dF9kb21haW46ICAgIFBvaW50ZXIgdG8gcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19maW5kX25leHRfZG9tYWluKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkgICAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqKm5leHRfZG9tYWluKQoreworCS8qCisJICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHNpemUgb2YgYnVmZmVyIHJldHVybmVkIGJ5CisJICogdG9tb3lvX3JlYWxwYXRoKCkgPSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTi4KKwkgKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyICp0bXAgPSB0b21veW9fYWxsb2Moc2l6ZW9mKCp0bXApKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpvbGRfZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisJY29uc3QgY2hhciAqb2xkX2RvbWFpbl9uYW1lID0gb2xkX2RvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZTsKKwljb25zdCBjaGFyICpvcmlnaW5hbF9uYW1lID0gYnBybS0+ZmlsZW5hbWU7CisJY2hhciAqbmV3X2RvbWFpbl9uYW1lID0gTlVMTDsKKwljaGFyICpyZWFsX3Byb2dyYW1fbmFtZSA9IE5VTEw7CisJY2hhciAqc3ltbGlua19wcm9ncmFtX25hbWUgPSBOVUxMOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3Mob2xkX2RvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gcjsgLyogcmVhbCBuYW1lICovCisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gczsgLyogc3ltbGluayBuYW1lICovCisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbDsgLyogbGFzdCBuYW1lICovCisJc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisKKwlpZiAoIXRtcCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCS8qCisJCSAqIEJ1aWx0LWluIGluaXRpYWxpemVycy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwb2xpY2llcyBhcmUKKwkJICogbm90IGxvYWRlZCB1bnRpbCBzdGFydGluZyAvc2Jpbi9pbml0LgorCQkgKi8KKwkJdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgIi9zYmluL2hvdHBsdWciLAorCQkJCQkJICAgICAgIGZhbHNlLCBmYWxzZSk7CisJCXRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsICIvc2Jpbi9tb2Rwcm9iZSIsCisJCQkJCQkgICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJaW5pdGlhbGl6ZWQgPSB0cnVlOworCX0KKworCS8qIEdldCB0b21veW9fcmVhbHBhdGggb2YgcHJvZ3JhbS4gKi8KKwlyZXR2YWwgPSAtRU5PRU5UOworCS8qIEkgaG9wZSB0b21veW9fcmVhbHBhdGgoKSB3b24ndCBmYWlsIHdpdGggLUVOT01FTS4gKi8KKwlyZWFsX3Byb2dyYW1fbmFtZSA9IHRvbW95b19yZWFscGF0aChvcmlnaW5hbF9uYW1lKTsKKwlpZiAoIXJlYWxfcHJvZ3JhbV9uYW1lKQorCQlnb3RvIG91dDsKKwkvKiBHZXQgdG9tb3lvX3JlYWxwYXRoIG9mIHN5bWJvbGljIGxpbmsuICovCisJc3ltbGlua19wcm9ncmFtX25hbWUgPSB0b21veW9fcmVhbHBhdGhfbm9mb2xsb3cob3JpZ2luYWxfbmFtZSk7CisJaWYgKCFzeW1saW5rX3Byb2dyYW1fbmFtZSkKKwkJZ290byBvdXQ7CisKKwlyLm5hbWUgPSByZWFsX3Byb2dyYW1fbmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnIpOworCXMubmFtZSA9IHN5bWxpbmtfcHJvZ3JhbV9uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmcyk7CisJbC5uYW1lID0gdG9tb3lvX2dldF9sYXN0X25hbWUob2xkX2RvbWFpbik7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZsKTsKKworCS8qIENoZWNrICdhbGlhcycgZGlyZWN0aXZlLiAqLworCWlmICh0b21veW9fcGF0aGNtcCgmciwgJnMpKSB7CisJCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKKwkJLyogSXMgdGhpcyBwcm9ncmFtIGFsbG93ZWQgdG8gYmUgY2FsbGVkIHZpYSBzeW1ib2xpYyBsaW5rcz8gKi8KKwkJZG93bl9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgeworCQkJaWYgKHB0ci0+aXNfZGVsZXRlZCB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKCZyLCBwdHItPm9yaWdpbmFsX25hbWUpIHx8CisJCQkgICAgdG9tb3lvX3BhdGhjbXAoJnMsIHB0ci0+YWxpYXNlZF9uYW1lKSkKKwkJCQljb250aW51ZTsKKwkJCW1lbXNldChyZWFsX3Byb2dyYW1fbmFtZSwgMCwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pOworCQkJc3RybmNweShyZWFsX3Byb2dyYW1fbmFtZSwgcHRyLT5hbGlhc2VkX25hbWUtPm5hbWUsCisJCQkJVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKTsKKwkJCXRvbW95b19maWxsX3BhdGhfaW5mbygmcik7CisJCQlicmVhazsKKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwl9CisKKwkvKiBDaGVjayBleGVjdXRlIHBlcm1pc3Npb24uICovCisJcmV0dmFsID0gdG9tb3lvX2NoZWNrX2V4ZWNfcGVybShvbGRfZG9tYWluLCAmciwgdG1wKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBvdXQ7CisKKwluZXdfZG9tYWluX25hbWUgPSB0bXAtPmJ1ZmZlcjsKKwlpZiAodG9tb3lvX2lzX2RvbWFpbl9pbml0aWFsaXplcihvbGRfZG9tYWluLT5kb21haW5uYW1lLCAmciwgJmwpKSB7CisJCS8qIFRyYW5zaXQgdG8gdGhlIGNoaWxkIG9mIHRvbW95b19rZXJuZWxfZG9tYWluIGRvbWFpbi4gKi8KKwkJc25wcmludGYobmV3X2RvbWFpbl9uYW1lLCBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiArIDEsCisJCQkgVE9NT1lPX1JPT1RfTkFNRSAiICIgIiVzIiwgcmVhbF9wcm9ncmFtX25hbWUpOworCX0gZWxzZSBpZiAob2xkX2RvbWFpbiA9PSAmdG9tb3lvX2tlcm5lbF9kb21haW4gJiYKKwkJICAgIXRvbW95b19wb2xpY3lfbG9hZGVkKSB7CisJCS8qCisJCSAqIE5lZWRuJ3QgdG8gdHJhbnNpdCBmcm9tIGtlcm5lbCBkb21haW4gYmVmb3JlIHN0YXJ0aW5nCisJCSAqIC9zYmluL2luaXQuIEJ1dCB0cmFuc2l0IGZyb20ga2VybmVsIGRvbWFpbiBpZiBleGVjdXRpbmcKKwkJICogaW5pdGlhbGl6ZXJzIGJlY2F1c2UgdGhleSBtaWdodCBzdGFydCBiZWZvcmUgL3NiaW4vaW5pdC4KKwkJICovCisJCWRvbWFpbiA9IG9sZF9kb21haW47CisJfSBlbHNlIGlmICh0b21veW9faXNfZG9tYWluX2tlZXBlcihvbGRfZG9tYWluLT5kb21haW5uYW1lLCAmciwgJmwpKSB7CisJCS8qIEtlZXAgY3VycmVudCBkb21haW4uICovCisJCWRvbWFpbiA9IG9sZF9kb21haW47CisJfSBlbHNlIHsKKwkJLyogTm9ybWFsIGRvbWFpbiB0cmFuc2l0aW9uLiAqLworCQlzbnByaW50ZihuZXdfZG9tYWluX25hbWUsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOICsgMSwKKwkJCSAiJXMgJXMiLCBvbGRfZG9tYWluX25hbWUsIHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwl9CisJaWYgKGRvbWFpbiB8fCBzdHJsZW4obmV3X2RvbWFpbl9uYW1lKSA+PSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikKKwkJZ290byBkb25lOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihuZXdfZG9tYWluX25hbWUpOworCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlpZiAoZG9tYWluKQorCQlnb3RvIGRvbmU7CisJaWYgKGlzX2VuZm9yY2UpCisJCWdvdG8gZG9uZTsKKwlkb21haW4gPSB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihuZXdfZG9tYWluX25hbWUsCisJCQkJCQkgIG9sZF9kb21haW4tPnByb2ZpbGUpOworIGRvbmU6CisJaWYgKGRvbWFpbikKKwkJZ290byBvdXQ7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLUVSUk9SOiBEb21haW4gJyVzJyBub3QgZGVmaW5lZC5cbiIsCisJICAgICAgIG5ld19kb21haW5fbmFtZSk7CisJaWYgKGlzX2VuZm9yY2UpCisJCXJldHZhbCA9IC1FUEVSTTsKKwllbHNlCisJCXRvbW95b19zZXRfZG9tYWluX2ZsYWcob2xkX2RvbWFpbiwgZmFsc2UsCisJCQkJICAgICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQpOworIG91dDoKKwl0b21veW9fZnJlZShyZWFsX3Byb2dyYW1fbmFtZSk7CisJdG9tb3lvX2ZyZWUoc3ltbGlua19wcm9ncmFtX25hbWUpOworCSpuZXh0X2RvbWFpbiA9IGRvbWFpbiA/IGRvbWFpbiA6IG9sZF9kb21haW47CisJdG9tb3lvX2ZyZWUodG1wKTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmNTBjMQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKQEAgLTAsMCArMSwxMjQxIEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYworICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBEb21haW4tQmFzZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCisKKy8qIFN0cnVjdHVyZSBmb3IgImFsbG93X3JlYWQiIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWU7CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyogU3RydWN0dXJlIGZvciAiZmlsZV9wYXR0ZXJuIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm47CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyogU3RydWN0dXJlIGZvciAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm47CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyogS2V5d29yZCBhcnJheSBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9ucy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fc3Bfa2V5d29yZFtUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTl0gPSB7CisJW1RPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMXSA9ICJyZWFkL3dyaXRlIiwKKwlbVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0xdICAgID0gImV4ZWN1dGUiLAorCVtUT01PWU9fVFlQRV9SRUFEX0FDTF0gICAgICAgPSAicmVhZCIsCisJW1RPTU9ZT19UWVBFX1dSSVRFX0FDTF0gICAgICA9ICJ3cml0ZSIsCisJW1RPTU9ZT19UWVBFX0NSRUFURV9BQ0xdICAgICA9ICJjcmVhdGUiLAorCVtUT01PWU9fVFlQRV9VTkxJTktfQUNMXSAgICAgPSAidW5saW5rIiwKKwlbVE9NT1lPX1RZUEVfTUtESVJfQUNMXSAgICAgID0gIm1rZGlyIiwKKwlbVE9NT1lPX1RZUEVfUk1ESVJfQUNMXSAgICAgID0gInJtZGlyIiwKKwlbVE9NT1lPX1RZUEVfTUtGSUZPX0FDTF0gICAgID0gIm1rZmlmbyIsCisJW1RPTU9ZT19UWVBFX01LU09DS19BQ0xdICAgICA9ICJta3NvY2siLAorCVtUT01PWU9fVFlQRV9NS0JMT0NLX0FDTF0gICAgPSAibWtibG9jayIsCisJW1RPTU9ZT19UWVBFX01LQ0hBUl9BQ0xdICAgICA9ICJta2NoYXIiLAorCVtUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0xdICAgPSAidHJ1bmNhdGUiLAorCVtUT01PWU9fVFlQRV9TWU1MSU5LX0FDTF0gICAgPSAic3ltbGluayIsCisJW1RPTU9ZT19UWVBFX1JFV1JJVEVfQUNMXSAgICA9ICJyZXdyaXRlIiwKK307CisKKy8qIEtleXdvcmQgYXJyYXkgZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbnMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2RwX2tleXdvcmRbVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9MSU5LX0FDTF0gICAgPSAibGluayIsCisJW1RPTU9ZT19UWVBFX1JFTkFNRV9BQ0xdICA9ICJyZW5hbWUiLAorfTsKKworLyoqCisgKiB0b21veW9fc3Aya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19zcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKK3sKKwlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OKQorCQk/IHRvbW95b19zcF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19kcDJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX2RwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKQoreworCXJldHVybiAob3BlcmF0aW9uIDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT04pCisJCT8gdG9tb3lvX2RwX2tleXdvcmRbb3BlcmF0aW9uXSA6IE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3N0cmVuZHN3aXRoIC0gQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gZW5kcyB3aXRoIHRoZSBnaXZlbiB0b2tlbi4KKyAqCisgKiBAbmFtZTogVGhlIHRva2VuIHRvIGNoZWNrLgorICogQHRhaWw6IFRoZSB0b2tlbiB0byBmaW5kLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAbmFtZSBlbmRzIHdpdGggQHRhaWwsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX3N0cmVuZHN3aXRoKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnRhaWwpCit7CisJaW50IGxlbjsKKworCWlmICghbmFtZSB8fCAhdGFpbCkKKwkJcmV0dXJuIGZhbHNlOworCWxlbiA9IHN0cmxlbihuYW1lKSAtIHN0cmxlbih0YWlsKTsKKwlyZXR1cm4gbGVuID49IDAgJiYgIXN0cmNtcChuYW1lICsgbGVuLCB0YWlsKTsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X3BhdGggLSBHZXQgcmVhbHBhdGguCisgKgorICogQHBhdGg6IFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fZ2V0X3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSAqYnVmID0gdG9tb3lvX2FsbG9jKHNpemVvZigqYnVmKSk7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisJLyogUmVzZXJ2ZSBvbmUgYnl0ZSBmb3IgYXBwZW5kaW5nICIvIi4gKi8KKwllcnJvciA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHBhdGgsIGJ1Zi0+Ym9keSwKKwkJCQkJICAgc2l6ZW9mKGJ1Zi0+Ym9keSkgLSAyKTsKKwlpZiAoIWVycm9yKSB7CisJCWJ1Zi0+aGVhZC5uYW1lID0gYnVmLT5ib2R5OworCQl0b21veW9fZmlsbF9wYXRoX2luZm8oJmJ1Zi0+aGVhZCk7CisJCXJldHVybiAmYnVmLT5oZWFkOworCX0KKwl0b21veW9fZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorCisvKiBMb2NrIGZvciBkb21haW4tPmFjbF9pbmZvX2xpc3QuICovCitERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZTEsCisJCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZTIsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpOworc3RhdGljIGludCB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHVuY29uZGl0aW9uYWxseSBwZXJtaXR0ZWQgdG8gb3BlbigpIGZvciByZWFkaW5nLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJCSBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWU7CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMSwgMCwgLTEsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfZmlsZW5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lKTsKKwlpZiAoIXNhdmVkX2ZpbGVuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5maWxlbmFtZSAhPSBzYXZlZF9maWxlbmFtZSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5maWxlbmFtZSA9IHNhdmVkX2ZpbGVuYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZSAtIENoZWNrIGlmIHRoZSBmaWxlIGlzIHVuY29uZGl0aW9ubmFseSBwZXJtaXR0ZWQgdG8gYmUgb3BlbigpZWQgZm9yIHJlYWRpbmcuCisgKgorICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIGFueSBkb21haW4gY2FuIG9wZW4gQGZpbGVuYW1lIGZvciByZWFkaW5nLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJICAgICBmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJZG93bl9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LCBsaXN0KSB7CisJCWlmICghcHRyLT5pc19kZWxldGVkICYmCisJCSAgICB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+ZmlsZW5hbWUpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXJldHVybiB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLAorCQkJCSBzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnksCisJCQkJIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICIlc1xuIiwKKwkJCQkgICAgICBwdHItPmZpbGVuYW1lLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX3BhdHRlcm5fbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZmlsZV9wYXR0ZXJuX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiIGxpc3QuCisgKgorICogQHBhdHRlcm46ICAgUGF0aG5hbWUgcGF0dGVybi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZmlsZV9wYXR0ZXJuX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcGF0dGVybjsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHBhdHRlcm4sIDAsIDEsIDAsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfcGF0dGVybiA9IHRvbW95b19zYXZlX25hbWUocGF0dGVybik7CisJaWYgKCFzYXZlZF9wYXR0ZXJuKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNhdmVkX3BhdHRlcm4gIT0gcHRyLT5wYXR0ZXJuKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPnBhdHRlcm4gPSBzYXZlZF9wYXR0ZXJuOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19wYXR0ZXJuX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9maWxlX3BhdHRlcm4gLSBHZXQgcGF0dGVybmVkIHBhdGhuYW1lLgorICoKKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGZpbmQgcGF0dGVybmVkIHBhdGhuYW1lLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBwYXRobmFtZSBwYXR0ZXJuIGlmIG1hdGNoZWQsIEBmaWxlbmFtZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCit0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4gPSBOVUxMOworCisJZG93bl9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPnBhdHRlcm4pKQorCQkJY29udGludWU7CisJCXBhdHRlcm4gPSBwdHItPnBhdHRlcm47CisJCWlmICh0b21veW9fc3RyZW5kc3dpdGgocGF0dGVybi0+bmFtZSwgIi9cXCoiKSkgeworCQkJLyogRG8gbm90aGluZy4gVHJ5IHRvIGZpbmQgdGhlIGJldHRlciBtYXRjaC4gKi8KKwkJfSBlbHNlIHsKKwkJCS8qIFRoaXMgd291bGQgYmUgdGhlIGJldHRlciBtYXRjaC4gVXNlIHRoaXMuICovCisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWlmIChwYXR0ZXJuKQorCQlmaWxlbmFtZSA9IHBhdHRlcm47CisJcmV0dXJuIGZpbGVuYW1lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJcmV0dXJuIHRvbW95b191cGRhdGVfZmlsZV9wYXR0ZXJuX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuIC0gUmVhZCAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fcGF0dGVybl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICIlc1xuIiwKKwkJCQkgICAgICBwdHItPnBhdHRlcm4tPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19ub19yZXdyaXRlX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX25vX3Jld3JpdGVfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAcGF0dGVybjogICBQYXRobmFtZSBwYXR0ZXJuIHRoYXQgYXJlIG5vdCByZXdyaXRhYmxlIGJ5IGRlZmF1bHQuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX25vX3Jld3JpdGVfZW50cnkoY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgKm5ld19lbnRyeSwgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcGF0dGVybjsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHBhdHRlcm4sIDAsIDAsIDAsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfcGF0dGVybiA9IHRvbW95b19zYXZlX25hbWUocGF0dGVybik7CisJaWYgKCFzYXZlZF9wYXR0ZXJuKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+cGF0dGVybiAhPSBzYXZlZF9wYXR0ZXJuKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPnBhdHRlcm4gPSBzYXZlZF9wYXR0ZXJuOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZSAtIENoZWNrIGlmIHRoZSBnaXZlbiBwYXRobmFtZSBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHJld3JpdGVkLgorICoKKyAqIEBmaWxlbmFtZTogRmlsZW5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBmaWxlbmFtZSBpcyBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIgZGlyZWN0aXZlLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgKnB0cjsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlkb3duX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+cGF0dGVybikpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSB0cnVlOworCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0RFTllfUkVXUklURSAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5wYXR0ZXJuLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiB0b21veW9fdXBkYXRlX2ZpbGVfYWNsIC0gVXBkYXRlIGZpbGUncyByZWFkL3dyaXRlL2V4ZWN1dGUgQUNMLgorICoKKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lLgorICogQHBlcm06ICAgICAgUGVybWlzc2lvbiAoYmV0d2VlbiAxIHRvIDcpLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGlzIGxlZ2FjeSBzdXBwb3J0IGludGVyZmFjZSBmb3Igb2xkZXIgcG9saWN5IHN5bnRheC4KKyAqIEN1cnJlbnQgcG9saWN5IHN5bnRheCB1c2VzICJhbGxvd19yZWFkL3dyaXRlIiBpbnN0ZWFkIG9mICI2IiwKKyAqICJhbGxvd19yZWFkIiBpbnN0ZWFkIG9mICI0IiwgImFsbG93X3dyaXRlIiBpbnN0ZWFkIG9mICIyIiwKKyAqICJhbGxvd19leGVjdXRlIiBpbnN0ZWFkIG9mICIxIi4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2ZpbGVfYWNsKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1OCBwZXJtLAorCQkJCSAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKKwkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWlmIChwZXJtID4gNyB8fCAhcGVybSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgcGVybWlzc2lvbiAnJWQgJXMnXG4iLAorCQkgICAgICAgX19mdW5jX18sIHBlcm0sIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChmaWxlbmFtZVswXSAhPSAnQCcgJiYgdG9tb3lvX3N0cmVuZHN3aXRoKGZpbGVuYW1lLCAiLyIpKQorCQkvKgorCQkgKiBPbmx5ICdhbGxvd19ta2RpcicgYW5kICdhbGxvd19ybWRpcicgYXJlIHZhbGlkIGZvcgorCQkgKiBkaXJlY3RvcnkgcGVybWlzc2lvbnMuCisJCSAqLworCQlyZXR1cm4gMDsKKwlpZiAocGVybSAmIDQpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1JFQURfQUNMLCBmaWxlbmFtZSwKKwkJCQkJICAgICAgZG9tYWluLCBpc19kZWxldGUpOworCWlmIChwZXJtICYgMikKKwkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfV1JJVEVfQUNMLCBmaWxlbmFtZSwKKwkJCQkJICAgICAgZG9tYWluLCBpc19kZWxldGUpOworCWlmIChwZXJtICYgMSkKKwkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wsCisJCQkJCSAgICAgIGZpbGVuYW1lLCBkb21haW4sIGlzX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICAgICAgICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBwZXJtOiAgICAgICAgICAgIFBlcm1pc3Npb24uCisgKiBAbWF5X3VzZV9wYXR0ZXJuOiBUcnVlIGlmIHBhdHRlcm5lZCBBQ0wgaXMgcGVybWl0dGVkLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgZG9tYWluLAorCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkgZmlsZW5hbWUsCisJCQkJCSBjb25zdCB1MTYgcGVybSwKKwkJCQkJIGNvbnN0IGJvb2wgbWF5X3VzZV9wYXR0ZXJuKQoreworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwlpbnQgZXJyb3IgPSAtRVBFUk07CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoIShhY2wtPnBlcm0gJiBwZXJtKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWF5X3VzZV9wYXR0ZXJuIHx8ICFhY2wtPmZpbGVuYW1lLT5pc19wYXR0ZXJuZWQpIHsKKwkJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLAorCQkJCQkJCSBhY2wtPmZpbGVuYW1lKSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZpbGVfYWNsIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igb3BlbmluZyBmaWxlcy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQG9wZXJhdGlvbjogTW9kZSAoInJlYWQiIG9yICJ3cml0ZSIgb3IgInJlYWQvd3JpdGUiIG9yICJleGVjdXRlIikuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUEVSTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX2ZpbGVfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSBjb25zdCB1OCBvcGVyYXRpb24pCit7CisJdTE2IHBlcm0gPSAwOworCisJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKKwkJcmV0dXJuIDA7CisJaWYgKG9wZXJhdGlvbiA9PSA2KQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTDsKKwllbHNlIGlmIChvcGVyYXRpb24gPT0gNCkKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDIpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTDsKKwllbHNlIGlmIChvcGVyYXRpb24gPT0gMSkKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0w7CisJZWxzZQorCQlCVUcoKTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoZG9tYWluLCBmaWxlbmFtZSwgcGVybSwKKwkJCQkJICAgICBvcGVyYXRpb24gIT0gMSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBvcGVuaW5nIGZpbGVzLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIgb3IgImV4ZWN1dGUiKS4KKyAqIEBvcGVyYXRpb246IE9wZXJhdGlvbiBuYW1lIHBhc3NlZCB1c2VkIGZvciB2ZXJib3NlIG1vZGUuCisgKiBAbW9kZTogICAgICBBY2Nlc3MgY29udHJvbCBtb2RlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJICAgY29uc3QgdTggcGVybSwgY29uc3QgY2hhciAqb3BlcmF0aW9uLAorCQkJCSAgIGNvbnN0IHU4IG1vZGUpCit7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJY29uc3QgY2hhciAqbXNnID0gIjx1bmtub3duPiI7CisJaW50IGVycm9yID0gMDsKKworCWlmICghZmlsZW5hbWUpCisJCXJldHVybiAwOworCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfYWNsKGRvbWFpbiwgZmlsZW5hbWUsIHBlcm0pOworCWlmIChlcnJvciAmJiBwZXJtID09IDQgJiYKKwkgICAgKGRvbWFpbi0+ZmxhZ3MgJiBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkgPT0gMAorCSAgICAmJiB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShmaWxlbmFtZSkpCisJCWVycm9yID0gMDsKKwlpZiAocGVybSA9PSA2KQorCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCk7CisJZWxzZSBpZiAocGVybSA9PSA0KQorCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChUT01PWU9fVFlQRV9SRUFEX0FDTCk7CisJZWxzZSBpZiAocGVybSA9PSAyKQorCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChUT01PWU9fVFlQRV9XUklURV9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gMSkKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wpOworCWVsc2UKKwkJQlVHKCk7CisJaWYgKCFlcnJvcikKKwkJcmV0dXJuIDA7CisJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzKCVzKSAlcycgZGVuaWVkICIKKwkJICAgICAgICJmb3IgJXNcbiIsIHRvbW95b19nZXRfbXNnKGlzX2VuZm9yY2UpLCBtc2csIG9wZXJhdGlvbiwKKwkJICAgICAgIGZpbGVuYW1lLT5uYW1lLCB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKKwlpZiAoaXNfZW5mb3JjZSkKKwkJcmV0dXJuIGVycm9yOworCWlmIChtb2RlID09IDEgJiYgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhkb21haW4pKSB7CisJCS8qIERvbid0IHVzZSBwYXR0ZXJucyBmb3IgZXhlY3V0ZSBwZXJtaXNzaW9uLiAqLworCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybmVkX2ZpbGUgPSAocGVybSAhPSAxKSA/CisJCQl0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihmaWxlbmFtZSkgOiBmaWxlbmFtZTsKKwkJdG9tb3lvX3VwZGF0ZV9maWxlX2FjbChwYXR0ZXJuZWRfZmlsZS0+bmFtZSwgcGVybSwKKwkJCQkgICAgICAgZG9tYWluLCBmYWxzZSk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9maWxlX3BvbGljeSAtIFVwZGF0ZSBmaWxlIHJlbGF0ZWQgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqZmlsZW5hbWUgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKwljaGFyICpmaWxlbmFtZTI7CisJdW5zaWduZWQgaW50IHBlcm07CisJdTggdHlwZTsKKworCWlmICghZmlsZW5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCSpmaWxlbmFtZSsrID0gJ1wwJzsKKwlpZiAoc3NjYW5mKGRhdGEsICIldSIsICZwZXJtKSA9PSAxKQorCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9maWxlX2FjbChmaWxlbmFtZSwgKHU4KSBwZXJtLCBkb21haW4sCisJCQkJCSAgICAgIGlzX2RlbGV0ZSk7CisJaWYgKHN0cm5jbXAoZGF0YSwgImFsbG93XyIsIDYpKQorCQlnb3RvIG91dDsKKwlkYXRhICs9IDY7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fc3Bfa2V5d29yZFt0eXBlXSkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKHR5cGUsIGZpbGVuYW1lLAorCQkJCQkJICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJfQorCWZpbGVuYW1lMiA9IHN0cmNocihmaWxlbmFtZSwgJyAnKTsKKwlpZiAoIWZpbGVuYW1lMikKKwkJZ290byBvdXQ7CisJKmZpbGVuYW1lMisrID0gJ1wwJzsKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT047IHR5cGUrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19kcF9rZXl3b3JkW3R5cGVdKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2wodHlwZSwgZmlsZW5hbWUsIGZpbGVuYW1lMiwKKwkJCQkJCSAgICAgZG9tYWluLCBpc19kZWxldGUpOworCX0KKyBvdXQ6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCIgbGlzdC4KKyAqCisgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdGF0aWMgY29uc3QgdTE2IHJ3X21hc2sgPQorCQkoMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTCkgfCAoMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0wpOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1MTYgcGVybSA9IDEgPDwgdHlwZTsKKworCWlmICghZG9tYWluKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDAsIDAsIDAsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfZmlsZW5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lKTsKKwlpZiAoIXNhdmVkX2ZpbGVuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmIChpc19kZWxldGUpCisJCWdvdG8gZGVsZXRlOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUxKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJLyogU3BlY2lhbCBjYXNlLiBDbGVhciBhbGwgYml0cyBpZiBtYXJrZWQgYXMgZGVsZXRlZC4gKi8KKwkJaWYgKHB0ci0+dHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKKwkJCWFjbC0+cGVybSA9IDA7CisJCWFjbC0+cGVybSB8PSBwZXJtOworCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spID09IHJ3X21hc2spCisJCQlhY2wtPnBlcm0gfD0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTDsKKwkJZWxzZSBpZiAoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKQorCQkJYWNsLT5wZXJtIHw9IHJ3X21hc2s7CisJCXB0ci0+dHlwZSAmPSB+VE9NT1lPX0FDTF9ERUxFVEVEOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBOb3QgZm91bmQuIEFwcGVuZCBpdCB0byB0aGUgdGFpbC4gKi8KKwlhY2wgPSB0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKTsKKwlpZiAoIWFjbCkKKwkJZ290byBvdXQ7CisJYWNsLT5wZXJtID0gcGVybTsKKwlpZiAocGVybSA9PSAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpCisJCWFjbC0+cGVybSB8PSByd19tYXNrOworCWFjbC0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZhY2wtPmhlYWQubGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJZXJyb3IgPSAwOworCWdvdG8gb3V0OworIGRlbGV0ZToKKwllcnJvciA9IC1FTk9FTlQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoYWNsLT5maWxlbmFtZSAhPSBzYXZlZF9maWxlbmFtZSkKKwkJCWNvbnRpbnVlOworCQlhY2wtPnBlcm0gJj0gfnBlcm07CisJCWlmICgoYWNsLT5wZXJtICYgcndfbWFzaykgIT0gcndfbWFzaykKKwkJCWFjbC0+cGVybSAmPSB+KDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpOworCQllbHNlIGlmICghKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkpCisJCQlhY2wtPnBlcm0gJj0gfnJ3X21hc2s7CisJCWlmICghYWNsLT5wZXJtKQorCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2wgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIgbGlzdC4KKyAqCisgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTE6IEZpcnN0IGZpbGVuYW1lLgorICogQGZpbGVuYW1lMjogU2Vjb25kIGZpbGVuYW1lLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZTEsCisJCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZTIsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lMTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWUyOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWNvbnN0IHU4IHBlcm0gPSAxIDw8IHR5cGU7CisKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lMSwgMCwgMCwgMCwgX19mdW5jX18pIHx8CisJICAgICF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lMiwgMCwgMCwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9maWxlbmFtZTEgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lMSk7CisJc2F2ZWRfZmlsZW5hbWUyID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZTIpOworCWlmICghc2F2ZWRfZmlsZW5hbWUxIHx8ICFzYXZlZF9maWxlbmFtZTIpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJaWYgKGlzX2RlbGV0ZSkKKwkJZ290byBkZWxldGU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTEocHRyKSAhPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoYWNsLT5maWxlbmFtZTEgIT0gc2F2ZWRfZmlsZW5hbWUxIHx8CisJCSAgICBhY2wtPmZpbGVuYW1lMiAhPSBzYXZlZF9maWxlbmFtZTIpCisJCQljb250aW51ZTsKKwkJLyogU3BlY2lhbCBjYXNlLiBDbGVhciBhbGwgYml0cyBpZiBtYXJrZWQgYXMgZGVsZXRlZC4gKi8KKwkJaWYgKHB0ci0+dHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKKwkJCWFjbC0+cGVybSA9IDA7CisJCWFjbC0+cGVybSB8PSBwZXJtOworCQlwdHItPnR5cGUgJj0gflRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJLyogTm90IGZvdW5kLiBBcHBlbmQgaXQgdG8gdGhlIHRhaWwuICovCisJYWNsID0gdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCk7CisJaWYgKCFhY2wpCisJCWdvdG8gb3V0OworCWFjbC0+cGVybSA9IHBlcm07CisJYWNsLT5maWxlbmFtZTEgPSBzYXZlZF9maWxlbmFtZTE7CisJYWNsLT5maWxlbmFtZTIgPSBzYXZlZF9maWxlbmFtZTI7CisJbGlzdF9hZGRfdGFpbCgmYWNsLT5oZWFkLmxpc3QsICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOworCWVycm9yID0gMDsKKwlnb3RvIG91dDsKKyBkZWxldGU6CisJZXJyb3IgPSAtRU5PRU5UOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUxICE9IHNhdmVkX2ZpbGVuYW1lMSB8fAorCQkgICAgYWNsLT5maWxlbmFtZTIgIT0gc2F2ZWRfZmlsZW5hbWUyKQorCQkJY29udGludWU7CisJCWFjbC0+cGVybSAmPSB+cGVybTsKKwkJaWYgKCFhY2wtPnBlcm0pCisJCQlwdHItPnR5cGUgfD0gVE9NT1lPX0FDTF9ERUxFVEVEOworCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAdHlwZTogICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lOiBGaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCQljb25zdCB1OCB0eXBlLAorCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCit7CisJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIDEgPDwgdHlwZSwgMSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lMTogRmlyc3QgZmlsZW5hbWUgdG8gY2hlY2suCisgKiBAZmlsZW5hbWUyOiBTZWNvbmQgZmlsZW5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUEVSTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJCWNvbnN0IHU4IHR5cGUsCisJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJZmlsZW5hbWUxLAorCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCWZpbGVuYW1lMikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJY29uc3QgdTggcGVybSA9IDEgPDwgdHlwZTsKKwlpbnQgZXJyb3IgPSAtRVBFUk07CisKKwlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoIShhY2wtPnBlcm0gJiBwZXJtKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZTEsIGFjbC0+ZmlsZW5hbWUxKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZTIsIGFjbC0+ZmlsZW5hbWUyKSkKKwkJCWNvbnRpbnVlOworCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAbW9kZTogICAgICBBY2Nlc3MgY29udHJvbCBtb2RlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkJY29uc3QgZG9tYWluLCB1OCBvcGVyYXRpb24sCisJCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCQlmaWxlbmFtZSwgY29uc3QgdTggbW9kZSkKK3sKKwljb25zdCBjaGFyICptc2c7CisJaW50IGVycm9yOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKyBuZXh0OgorCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgZmlsZW5hbWUpOworCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKG9wZXJhdGlvbik7CisJaWYgKCFlcnJvcikKKwkJZ290byBvazsKKwlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMgJXMnIGRlbmllZCBmb3IgJXNcbiIsCisJCSAgICAgICB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwgbXNnLCBmaWxlbmFtZS0+bmFtZSwKKwkJICAgICAgIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOworCWlmIChtb2RlID09IDEgJiYgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhkb21haW4pKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihmaWxlbmFtZSktPm5hbWU7CisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKG9wZXJhdGlvbiwgbmFtZSwgZG9tYWluLCBmYWxzZSk7CisJfQorCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworIG9rOgorCS8qCisJICogU2luY2UgImFsbG93X3RydW5jYXRlIiBkb2Vzbid0IGltcGx5ICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uLAorCSAqIHdlIG5lZWQgdG8gY2hlY2sgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24gaWYgdGhlIGZpbGVuYW1lIGlzCisJICogc3BlY2lmaWVkIGJ5ICJkZW55X3Jld3JpdGUiIGtleXdvcmQuCisJICovCisJaWYgKCFlcnJvciAmJiBvcGVyYXRpb24gPT0gVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMICYmCisJICAgIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoZmlsZW5hbWUpKSB7CisJCW9wZXJhdGlvbiA9IFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMOworCQlnb3RvIG5leHQ7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZmlsZV9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc3lzY3RsKCkncyAicmVhZCIgYW5kICJ3cml0ZSIuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBwZXJtOiAgICAgIE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIikuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX2ZpbGVfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgdTggcGVybSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisJbmFtZS5uYW1lID0gZmlsZW5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoZG9tYWluLCAmbmFtZSwgcGVybSwgInN5c2N0bCIsIG1vZGUpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19leGVjX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAiZXhlY3V0ZSIuCisgKgorICogQGRvbWFpbjogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogQ2hlY2sgcGVybWlzc2lvbiBmb3IgImV4ZWN1dGUiLgorICogQHRtcDogICAgICBCdWZmZXIgZm9yIHRlbXBvcmFyeSB1c2UuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZldmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX2V4ZWNfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkgICBzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyICp0bXApCit7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoZG9tYWluLCBmaWxlbmFtZSwgMSwgImRvX2V4ZWN2ZSIsIG1vZGUpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmVhZCIgYW5kICJ3cml0ZSIuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAcGF0aDogICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAZmxhZzogICBGbGFncyBmb3Igb3BlbigpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGludCBmbGFnKQoreworCWNvbnN0IHU4IGFjY19tb2RlID0gQUNDX01PREUoZmxhZyk7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKworCWlmICghbW9kZSB8fCAhcGF0aC0+bW50KQorCQlyZXR1cm4gMDsKKwlpZiAoYWNjX21vZGUgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKKwkJLyoKKwkJICogSSBkb24ndCBjaGVjayBkaXJlY3RvcmllcyBoZXJlIGJlY2F1c2UgbWtkaXIoKSBhbmQgcm1kaXIoKQorCQkgKiBkb24ndCBjYWxsIG1lLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJYnVmID0gdG9tb3lvX2dldF9wYXRoKHBhdGgpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKwllcnJvciA9IDA7CisJLyoKKwkgKiBJZiB0aGUgZmlsZW5hbWUgaXMgc3BlY2lmaWVkIGJ5ICJkZW55X3Jld3JpdGUiIGtleXdvcmQsCisJICogd2UgbmVlZCB0byBjaGVjayAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiB3aGVuIHRoZSBmaWxlbmFtZSBpcyBub3QKKwkgKiBvcGVuZWQgZm9yIGFwcGVuZCBtb2RlIG9yIHRoZSBmaWxlbmFtZSBpcyB0cnVuY2F0ZWQgYXQgb3BlbiB0aW1lLgorCSAqLworCWlmICgoYWNjX21vZGUgJiBNQVlfV1JJVEUpICYmCisJICAgICgoZmxhZyAmIE9fVFJVTkMpIHx8ICEoZmxhZyAmIE9fQVBQRU5EKSkgJiYKKwkgICAgKHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoYnVmKSkpIHsKKwkJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLAorCQkJCQkJICAgICBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCwKKwkJCQkJCQkgICAgIGJ1ZiwgbW9kZSk7CisJfQorCWlmICghZXJyb3IpCisJCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoZG9tYWluLCBidWYsIGFjY19tb2RlLCAib3BlbiIsCisJCQkJCQltb2RlKTsKKwlpZiAoIWVycm9yICYmIChmbGFnICYgT19UUlVOQykpCisJCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKKwkJCQkJCSAgICAgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMLAorCQkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAiY3JlYXRlIiwgInVubGluayIsICJta2RpciIsICJybWRpciIsICJta2ZpZm8iLCAibWtzb2NrIiwgIm1rYmxvY2siLCAibWtjaGFyIiwgInRydW5jYXRlIiBhbmQgInN5bWxpbmsiLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAcGF0aDogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja18xcGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoKQoreworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisKKwlpZiAoIW1vZGUgfHwgIXBhdGgtPm1udCkKKwkJcmV0dXJuIDA7CisJYnVmID0gdG9tb3lvX2dldF9wYXRoKHBhdGgpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKwlzd2l0Y2ggKG9wZXJhdGlvbikgeworCWNhc2UgVE9NT1lPX1RZUEVfTUtESVJfQUNMOgorCWNhc2UgVE9NT1lPX1RZUEVfUk1ESVJfQUNMOgorCQlpZiAoIWJ1Zi0+aXNfZGlyKSB7CisJCQkvKgorCQkJICogdG9tb3lvX2dldF9wYXRoKCkgcmVzZXJ2ZXMgc3BhY2UgZm9yIGFwcGVuZGluZyAiLy4iCisJCQkgKi8KKwkJCXN0cmNhdCgoY2hhciAqKSBidWYtPm5hbWUsICIvIik7CisJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oYnVmKTsKKwkJfQorCX0KKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sIG9wZXJhdGlvbiwgYnVmLAorCQkJCQkJICAgICBtb2RlKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbiAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZXdyaXRlIi4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxwOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCisJaWYgKCFtb2RlIHx8ICFmaWxwLT5mX3BhdGgubW50KQorCQlyZXR1cm4gMDsKKwlidWYgPSB0b21veW9fZ2V0X3BhdGgoJmZpbHAtPmZfcGF0aCk7CisJaWYgKCFidWYpCisJCWdvdG8gb3V0OworCWlmICghdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShidWYpKSB7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKKwkJCQkJCSAgICAgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wsCisJCQkJCQkgICAgIGJ1ZiwgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja18ycGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJlbmFtZSIgYW5kICJsaW5rIi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQHBhdGgxOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqIEBwYXRoMjogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja18ycGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aDEsCisJCQkgICAgc3RydWN0IHBhdGggKnBhdGgyKQoreworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjEsICpidWYyOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwljb25zdCBjaGFyICptc2c7CisKKwlpZiAoIW1vZGUgfHwgIXBhdGgxLT5tbnQgfHwgIXBhdGgyLT5tbnQpCisJCXJldHVybiAwOworCWJ1ZjEgPSB0b21veW9fZ2V0X3BhdGgocGF0aDEpOworCWJ1ZjIgPSB0b21veW9fZ2V0X3BhdGgocGF0aDIpOworCWlmICghYnVmMSB8fCAhYnVmMikKKwkJZ290byBvdXQ7CisJeworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBwYXRoMS0+ZGVudHJ5OworCQlpZiAoZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CisJCQkvKgorCQkJICogdG9tb3lvX2dldF9wYXRoKCkgcmVzZXJ2ZXMgc3BhY2UgZm9yIGFwcGVuZGluZyAiLy4iCisJCQkgKi8KKwkJCWlmICghYnVmMS0+aXNfZGlyKSB7CisJCQkJc3RyY2F0KChjaGFyICopIGJ1ZjEtPm5hbWUsICIvIik7CisJCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1ZjEpOworCQkJfQorCQkJaWYgKCFidWYyLT5pc19kaXIpIHsKKwkJCQlzdHJjYXQoKGNoYXIgKikgYnVmMi0+bmFtZSwgIi8iKTsKKwkJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oYnVmMik7CisJCQl9CisJCX0KKwl9CisJZXJyb3IgPSB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYxLCBidWYyKTsKKwltc2cgPSB0b21veW9fZHAya2V5d29yZChvcGVyYXRpb24pOworCWlmICghZXJyb3IpCisJCWdvdG8gb3V0OworCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyAlcyAlcycgIgorCQkgICAgICAgImRlbmllZCBmb3IgJXNcbiIsIHRvbW95b19nZXRfbXNnKGlzX2VuZm9yY2UpLAorCQkgICAgICAgbXNnLCBidWYxLT5uYW1lLCBidWYyLT5uYW1lLAorCQkgICAgICAgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CisJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKKwkJY29uc3QgY2hhciAqbmFtZTEgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihidWYxKS0+bmFtZTsKKwkJY29uc3QgY2hhciAqbmFtZTIgPSB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybihidWYyKS0+bmFtZTsKKwkJdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2wob3BlcmF0aW9uLCBuYW1lMSwgbmFtZTIsIGRvbWFpbiwKKwkJCQkJICAgICAgZmFsc2UpOworCX0KKyBvdXQ6CisJdG9tb3lvX2ZyZWUoYnVmMSk7CisJdG9tb3lvX2ZyZWUoYnVmMik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDdmMTZiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vcmVhbHBhdGguYworICoKKyAqIEdldCB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZXMuIFRoZSBiYXNpcyBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKworLyoqCisgKiB0b21veW9fZW5jb2RlOiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLgorICoKKyAqIEBidWZmZXI6ICBCdWZmZXIgZm9yIEFTQ0lJIHN0cmluZy4KKyAqIEBidWZsZW46ICBTaXplIG9mIEBidWZmZXIuCisgKiBAc3RyOiAgICAgQmluYXJ5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fZW5jb2RlKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKQoreworCXdoaWxlICgxKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgYyA9ICoodW5zaWduZWQgY2hhciAqKSBzdHIrKzsKKworCQlpZiAodG9tb3lvX2lzX3ZhbGlkKGMpKSB7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIrKyA9IChjaGFyKSBjOworCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQljb250aW51ZTsKKwkJCWlmICgtLWJ1ZmxlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJKmJ1ZmZlcisrID0gKGNoYXIpIGM7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWMpIHsKKwkJCWlmICgtLWJ1ZmxlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJKmJ1ZmZlciA9ICdcMCc7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlidWZsZW4gLT0gNDsKKwkJaWYgKGJ1ZmxlbiA8PSAwKQorCQkJYnJlYWs7CisJCSpidWZmZXIrKyA9ICdcXCc7CisJCSpidWZmZXIrKyA9IChjID4+IDYpICsgJzAnOworCQkqYnVmZmVyKysgPSAoKGMgPj4gMykgJiA3KSArICcwJzsKKwkJKmJ1ZmZlcisrID0gKGMgJiA3KSArICcwJzsKKwl9CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIgLSBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBkZW50cnkgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCisgKgorICogQHBhdGg6ICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAbmV3bmFtZTogICAgIFBvaW50ZXIgdG8gYnVmZmVyIHRvIHJldHVybiB2YWx1ZSBpbi4KKyAqIEBuZXduYW1lX2xlbjogU2l6ZSBvZiBAbmV3bmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIElmIGRlbnRyeSBpcyBhIGRpcmVjdG9yeSwgdHJhaWxpbmcgJy8nIGlzIGFwcGVuZGVkLgorICogQ2hhcmFjdGVycyBvdXQgb2YgMHgyMCA8IGMgPCAweDdGIHJhbmdlIGFyZSBjb252ZXJ0ZWQgdG8KKyAqIFxvb28gc3R5bGUgb2N0YWwgc3RyaW5nLgorICogQ2hhcmFjdGVyIFwgaXMgY29udmVydGVkIHRvIFxcIHN0cmluZy4KKyAqLworaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAorCQkJICAgICAgIGludCBuZXduYW1lX2xlbikKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgtPmRlbnRyeTsKKwljaGFyICpzcDsKKworCWlmICghZGVudHJ5IHx8ICFwYXRoLT5tbnQgfHwgIW5ld25hbWUgfHwgbmV3bmFtZV9sZW4gPD0gMjA0OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfZG5hbWUpIHsKKwkJLyogRm9yICJzb2NrZXQ6W1wkXSIgYW5kICJwaXBlOltcJF0iLiAqLworCQlzdGF0aWMgY29uc3QgaW50IG9mZnNldCA9IDE1MzY7CisJCXNwID0gZGVudHJ5LT5kX29wLT5kX2RuYW1lKGRlbnRyeSwgbmV3bmFtZSArIG9mZnNldCwKKwkJCQkJICAgbmV3bmFtZV9sZW4gLSBvZmZzZXQpOworCX0gZWxzZSB7CisJCS8qIFRha2VuIGZyb20gZF9uYW1lc3BhY2VfcGF0aCgpLiAqLworCQlzdHJ1Y3QgcGF0aCByb290OworCQlzdHJ1Y3QgcGF0aCBuc19yb290ID0geyB9OworCQlzdHJ1Y3QgcGF0aCB0bXA7CisKKwkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXJvb3QgPSBjdXJyZW50LT5mcy0+cm9vdDsKKwkJcGF0aF9nZXQoJnJvb3QpOworCQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOworCQlpZiAocm9vdC5tbnQgJiYgcm9vdC5tbnQtPm1udF9ucykKKwkJCW5zX3Jvb3QubW50ID0gbW50Z2V0KHJvb3QubW50LT5tbnRfbnMtPnJvb3QpOworCQlpZiAobnNfcm9vdC5tbnQpCisJCQluc19yb290LmRlbnRyeSA9IGRnZXQobnNfcm9vdC5tbnQtPm1udF9yb290KTsKKwkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOworCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkJdG1wID0gbnNfcm9vdDsKKwkJc3AgPSBfX2RfcGF0aChwYXRoLCAmdG1wLCBuZXduYW1lLCBuZXduYW1lX2xlbik7CisJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXBhdGhfcHV0KCZyb290KTsKKwkJcGF0aF9wdXQoJm5zX3Jvb3QpOworCX0KKwlpZiAoSVNfRVJSKHNwKSkKKwkJZXJyb3IgPSBQVFJfRVJSKHNwKTsKKwllbHNlCisJCWVycm9yID0gdG9tb3lvX2VuY29kZShuZXduYW1lLCBzcCAtIG5ld25hbWUsIHNwKTsKKwkvKiBBcHBlbmQgdHJhaWxpbmcgJy8nIGlmIGRlbnRyeSBpcyBhIGRpcmVjdG9yeS4gKi8KKwlpZiAoIWVycm9yICYmIGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKQorCSAgICAmJiAqbmV3bmFtZSkgeworCQlzcCA9IG5ld25hbWUgKyBzdHJsZW4obmV3bmFtZSk7CisJCWlmICgqKHNwIC0gMSkgIT0gJy8nKSB7CisJCQlpZiAoc3AgPCBuZXduYW1lICsgbmV3bmFtZV9sZW4gLSA0KSB7CisJCQkJKnNwKysgPSAnLyc7CisJCQkJKnNwID0gJ1wwJzsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJfQorCQl9CisJfQorCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidG9tb3lvX3JlYWxwYXRoOiBQYXRobmFtZSB0b28gbG9uZy5cbiIpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoIC0gUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCisgKgorICogQHBhdGg6IFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqCisgKiBSZXR1cm5zIHRoZSByZWFscGF0aCBvZiB0aGUgZ2l2ZW4gQHBhdGggb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIHVzZSB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogaWYgdGhlc2UgZnVuY3Rpb25zIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwljaGFyICpidWYgPSB0b21veW9fYWxsb2Moc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpKTsKKworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcikKKwkJICAgICA8PSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiAtIDEpOworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAodG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIocGF0aCwgYnVmLAorCQkJCSAgICAgICBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiAtIDEpID09IDApCisJCXJldHVybiBidWY7CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGggLSBHZXQgcmVhbHBhdGggb2YgYSBwYXRobmFtZS4KKyAqCisgKiBAcGF0aG5hbWU6IFRoZSBwYXRobmFtZSB0byBzb2x2ZS4KKyAqCisgKiBSZXR1cm5zIHRoZSByZWFscGF0aCBvZiBAcGF0aG5hbWUgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aChjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCisJaWYgKHBhdGhuYW1lICYmIHBhdGhfbG9va3VwKHBhdGhuYW1lLCBMT09LVVBfRk9MTE9XLCAmbmQpID09IDApIHsKKwkJY2hhciAqYnVmID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCgmbmQucGF0aCk7CisJCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93IC0gR2V0IHJlYWxwYXRoIG9mIGEgcGF0aG5hbWUuCisgKgorICogQHBhdGhuYW1lOiBUaGUgcGF0aG5hbWUgdG8gc29sdmUuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgQHBhdGhuYW1lIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRobmFtZSAmJiBwYXRoX2xvb2t1cChwYXRobmFtZSwgMCwgJm5kKSA9PSAwKSB7CisJCWNoYXIgKmJ1ZiA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJm5kLnBhdGgpOworCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCXJldHVybiBidWY7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciBub24tc3RyaW5nIGRhdGEuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50czsKKy8qIFF1b3RhIGZvciBob2xkaW5nIG5vbi1zdHJpbmcgZGF0YS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50czsKKworLyoqCisgKiB0b21veW9fYWxsb2NfZWxlbWVudCAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIHN0cnVjdHVyZXMuCisgKgorICogQHNpemU6IFNpemUgaW4gYnl0ZXMuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogTWVtb3J5IGhhcyB0byBiZSB6ZXJvZWQuCisgKiBUaGUgUkFNIGlzIGNodW5rZWQsIHNvIE5FVkVSIHRyeSB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBwb2ludGVyLgorICovCit2b2lkICp0b21veW9fYWxsb2NfZWxlbWVudChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdGF0aWMgY2hhciAqYnVmOworCXN0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CisJc3RhdGljIHVuc2lnbmVkIGludCBidWZfdXNlZF9sZW4gPSBQQVRIX01BWDsKKwljaGFyICpwdHIgPSBOVUxMOworCS8qQXNzdW1lcyBzaXplb2Yodm9pZCAqKSA+PSBzaXplb2YobG9uZykgaXMgdHJ1ZS4gKi8KKwljb25zdCB1bnNpZ25lZCBpbnQgd29yZF9hbGlnbmVkX3NpemUKKwkJPSByb3VuZHVwKHNpemUsIG1heChzaXplb2Yodm9pZCAqKSwgc2l6ZW9mKGxvbmcpKSk7CisJaWYgKHdvcmRfYWxpZ25lZF9zaXplID4gUEFUSF9NQVgpCisJCXJldHVybiBOVUxMOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlpZiAoYnVmX3VzZWRfbGVuICsgd29yZF9hbGlnbmVkX3NpemUgPiBQQVRIX01BWCkgeworCQlpZiAoIXRvbW95b19xdW90YV9mb3JfZWxlbWVudHMgfHwKKwkJICAgIHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50cworCQkgICAgKyBQQVRIX01BWCA8PSB0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKQorCQkJcHRyID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHRyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogT3V0IG9mIG1lbW9yeSAiCisJCQkgICAgICAgImZvciB0b21veW9fYWxsb2NfZWxlbWVudCgpLlxuIik7CisJCQlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQkJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCX0gZWxzZSB7CisJCQlidWYgPSBwdHI7CisJCQl0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHMgKz0gUEFUSF9NQVg7CisJCQlidWZfdXNlZF9sZW4gPSB3b3JkX2FsaWduZWRfc2l6ZTsKKwkJCXB0ciA9IGJ1ZjsKKwkJfQorCX0gZWxzZSBpZiAod29yZF9hbGlnbmVkX3NpemUpIHsKKwkJaW50IGk7CisJCXB0ciA9IGJ1ZiArIGJ1Zl91c2VkX2xlbjsKKwkJYnVmX3VzZWRfbGVuICs9IHdvcmRfYWxpZ25lZF9zaXplOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZF9hbGlnbmVkX3NpemU7IGkrKykgeworCQkJaWYgKCFwdHJbaV0pCisJCQkJY29udGludWU7CisJCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IFJlc2VydmVkIG1lbW9yeSB3YXMgdGFpbnRlZCEgIgorCQkJICAgICAgICJUaGUgc3lzdGVtIG1pZ2h0IGdvIHdyb25nLlxuIik7CisJCQlwdHJbaV0gPSAnXDAnOworCQl9CisJfQorCW11dGV4X3VubG9jaygmbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gcHRyOworfQorCisvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciBzdHJpbmcgZGF0YSBpbiBieXRlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lOworLyogUXVvdGEgZm9yIGhvbGRpbmcgc3RyaW5nIGRhdGEgaW4gYnl0ZXMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWU7CisKKy8qCisgKiBUT01PWU8gdXNlcyB0aGlzIGhhc2ggb25seSB3aGVuIGFwcGVuZGluZyBhIHN0cmluZyBpbnRvIHRoZSBzdHJpbmcKKyAqIHRhYmxlLiBGcmVxdWVuY3kgb2YgYXBwZW5kaW5nIHN0cmluZ3MgaXMgdmVyeSBsb3cuIFNvIHdlIGRvbid0IG5lZWQKKyAqIGxhcmdlIChlLmcuIDY0aykgaGFzaCBzaXplLiAyNTYgd2lsbCBiZSBzdWZmaWNpZW50LgorICovCisjZGVmaW5lIFRPTU9ZT19NQVhfSEFTSCAyNTYKKworLyogU3RydWN0dXJlIGZvciBzdHJpbmcgZGF0YS4gKi8KK3N0cnVjdCB0b21veW9fbmFtZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGVudHJ5OworfTsKKworLyogU3RydWN0dXJlIGZvciBhdmFpbGFibGUgbWVtb3J5IHJlZ2lvbi4gKi8KK3N0cnVjdCB0b21veW9fZnJlZV9tZW1vcnlfYmxvY2tfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgKnB0cjsgICAgICAgICAgICAgLyogUG9pbnRlciB0byBhIGZyZWUgYXJlYS4gKi8KKwlpbnQgbGVuOyAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgYXJlYS4gICAgICovCit9OworCisvKgorICogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkiLgorICoKKyAqIFRoaXMgbGlzdCBpcyB1cGRhdGVkIG9ubHkgaW5zaWRlIHRvbW95b19zYXZlX25hbWUoKSwgdGh1cworICogbm8gZ2xvYmFsIG11dGV4IGV4aXN0cy4KKyAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25hbWVfbGlzdFtUT01PWU9fTUFYX0hBU0hdOworCisvKioKKyAqIHRvbW95b19zYXZlX25hbWUgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBzdHJpbmcgZGF0YS4KKyAqCisgKiBAbmFtZTogVGhlIHN0cmluZyB0byBzdG9yZSBpbnRvIHRoZSBwZXJtZXJuZW50IG1lbW9yeS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgUkFNIGlzIHNoYXJlZCwgc28gTkVWRVIgdHJ5IHRvIG1vZGlmeSBvciBrZnJlZSgpIHRoZSByZXR1cm5lZCBuYW1lLgorICovCitjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBMSVNUX0hFQUQoZm1iX2xpc3QpOworCXN0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CisJc3RydWN0IHRvbW95b19uYW1lX2VudHJ5ICpwdHI7CisJdW5zaWduZWQgaW50IGhhc2g7CisJLyogZm1iIGNvbnRhaW5zIGF2YWlsYWJsZSBzaXplIGluIGJ5dGVzLgorCSAgIGZtYiBpcyByZW1vdmVkIGZyb20gdGhlIGZtYl9saXN0IHdoZW4gZm1iLT5sZW4gYmVjb21lcyAwLiAqLworCXN0cnVjdCB0b21veW9fZnJlZV9tZW1vcnlfYmxvY2tfbGlzdCAqZm1iOworCWludCBsZW47CisJY2hhciAqY3A7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJaWYgKGxlbiA+IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBOYW1lIHRvbyBsb25nICIKKwkJICAgICAgICJmb3IgdG9tb3lvX3NhdmVfbmFtZSgpLlxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwloYXNoID0gZnVsbF9uYW1lX2hhc2goKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmFtZSwgbGVuIC0gMSk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25hbWVfbGlzdFtoYXNoICUgVE9NT1lPX01BWF9IQVNIXSwKKwkJCSAgICAgbGlzdCkgeworCQlpZiAoaGFzaCA9PSBwdHItPmVudHJ5Lmhhc2ggJiYgIXN0cmNtcChuYW1lLCBwdHItPmVudHJ5Lm5hbWUpKQorCQkJZ290byBvdXQ7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZm1iLCAmZm1iX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGxlbiA8PSBmbWItPmxlbikKKwkJCWdvdG8gcmVhZHk7CisJfQorCWlmICghdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSB8fAorCSAgICB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWUgKyBQQVRIX01BWAorCSAgICA8PSB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKQorCQljcCA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJY3AgPSBOVUxMOworCWZtYiA9IGt6YWxsb2Moc2l6ZW9mKCpmbWIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNwIHx8ICFmbWIpIHsKKwkJa2ZyZWUoY3ApOworCQlrZnJlZShmbWIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogT3V0IG9mIG1lbW9yeSAiCisJCSAgICAgICAiZm9yIHRvbW95b19zYXZlX25hbWUoKS5cbiIpOworCQlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQkJcGFuaWMoIk1BQyBJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJcHRyID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCXRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZSArPSBQQVRIX01BWDsKKwlsaXN0X2FkZCgmZm1iLT5saXN0LCAmZm1iX2xpc3QpOworCWZtYi0+cHRyID0gY3A7CisJZm1iLT5sZW4gPSBQQVRIX01BWDsKKyByZWFkeToKKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKnB0cikpOworCWlmICghcHRyKQorCQlnb3RvIG91dDsKKwlwdHItPmVudHJ5Lm5hbWUgPSBmbWItPnB0cjsKKwltZW1tb3ZlKGZtYi0+cHRyLCBuYW1lLCBsZW4pOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmcHRyLT5lbnRyeSk7CisJZm1iLT5wdHIgKz0gbGVuOworCWZtYi0+bGVuIC09IGxlbjsKKwlsaXN0X2FkZF90YWlsKCZwdHItPmxpc3QsICZ0b21veW9fbmFtZV9saXN0W2hhc2ggJSBUT01PWU9fTUFYX0hBU0hdKTsKKwlpZiAoZm1iLT5sZW4gPT0gMCkgeworCQlsaXN0X2RlbCgmZm1iLT5saXN0KTsKKwkJa2ZyZWUoZm1iKTsKKwl9Cisgb3V0OgorCW11dGV4X3VubG9jaygmbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gcHRyID8gJnB0ci0+ZW50cnkgOiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9pbml0IC0gSW5pdGlhbGl6ZSByZWFscGF0aCByZWxhdGVkIGNvZGUuCisgKi8KK3ZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlCVUlMRF9CVUdfT04oVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gPiBQQVRIX01BWCk7CisJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfSEFTSDsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX25hbWVfbGlzdFtpXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19rZXJuZWxfZG9tYWluLmFjbF9pbmZvX2xpc3QpOworCXRvbW95b19rZXJuZWxfZG9tYWluLmRvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKFRPTU9ZT19ST09UX05BTUUpOworCWxpc3RfYWRkX3RhaWwoJnRvbW95b19rZXJuZWxfZG9tYWluLmxpc3QsICZ0b21veW9fZG9tYWluX2xpc3QpOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWlmICh0b21veW9fZmluZF9kb21haW4oVE9NT1lPX1JPT1RfTkFNRSkgIT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQlwYW5pYygiQ2FuJ3QgcmVnaXN0ZXIgdG9tb3lvX2tlcm5lbF9kb21haW4iKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7Cit9CisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRlbXBvcmFyeSBwdXJwb3NlLiAqLworc3RhdGljIGF0b21pY190IHRvbW95b19keW5hbWljX21lbW9yeV9zaXplOworCisvKioKKyAqIHRvbW95b19hbGxvYyAtIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGVtcG9yYXJ5IHB1cnBvc2UuCisgKgorICogQHNpemU6IFNpemUgaW4gYnl0ZXMuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3ZvaWQgKnRvbW95b19hbGxvYyhjb25zdCBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpwID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocCkKKwkJYXRvbWljX2FkZChrc2l6ZShwKSwgJnRvbW95b19keW5hbWljX21lbW9yeV9zaXplKTsKKwlyZXR1cm4gcDsKK30KKworLyoqCisgKiB0b21veW9fZnJlZSAtIFJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBieSB0b21veW9fYWxsb2MoKS4KKyAqCisgKiBAcDogUG9pbnRlciByZXR1cm5lZCBieSB0b21veW9fYWxsb2MoKS4gTWF5IGJlIE5VTEwuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19mcmVlKGNvbnN0IHZvaWQgKnApCit7CisJaWYgKHApIHsKKwkJYXRvbWljX3N1Yihrc2l6ZShwKSwgJnRvbW95b19keW5hbWljX21lbW9yeV9zaXplKTsKKwkJa2ZyZWUocCk7CisJfQorfQorCisvKioKKyAqIHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyIC0gQ2hlY2sgZm9yIG1lbW9yeSB1c2FnZSBpbiBieXRlcy4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgbWVtb3J5IHVzYWdlLgorICovCitpbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yZWFkX2VvZikgeworCQljb25zdCB1bnNpZ25lZCBpbnQgc2hhcmVkCisJCQk9IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZTsKKwkJY29uc3QgdW5zaWduZWQgaW50IHByaXZhdGUKKwkJCT0gdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzOworCQljb25zdCB1bnNpZ25lZCBpbnQgZHluYW1pYworCQkJPSBhdG9taWNfcmVhZCgmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOworCQljaGFyIGJ1ZmZlcls2NF07CisKKwkJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAodG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSkKKwkJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLAorCQkJCSAiICAgKFF1b3RhOiAlMTB1KSIsCisJCQkJIHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpOworCQllbHNlCisJCQlidWZmZXJbMF0gPSAnXDAnOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJTaGFyZWQ6ICAlMTB1JXNcbiIsIHNoYXJlZCwgYnVmZmVyKTsKKwkJaWYgKHRvbW95b19xdW90YV9mb3JfZWxlbWVudHMpCisJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCQkgIiAgIChRdW90YTogJTEwdSkiLAorCQkJCSB0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKTsKKwkJZWxzZQorCQkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiUHJpdmF0ZTogJTEwdSVzXG4iLCBwcml2YXRlLCBidWZmZXIpOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJEeW5hbWljOiAlMTB1XG4iLCBkeW5hbWljKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiVG90YWw6ICAgJTEwdVxuIiwKKwkJCQkgc2hhcmVkICsgcHJpdmF0ZSArIGR5bmFtaWMpOworCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEgLSBTZXQgbWVtb3J5IHF1b3RhLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitpbnQgdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCXVuc2lnbmVkIGludCBzaXplOworCisJaWYgKHNzY2FuZihkYXRhLCAiU2hhcmVkOiAldSIsICZzaXplKSA9PSAxKQorCQl0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lID0gc2l6ZTsKKwllbHNlIGlmIChzc2NhbmYoZGF0YSwgIlByaXZhdGU6ICV1IiwgJnNpemUpID09IDEpCisJCXRvbW95b19xdW90YV9mb3JfZWxlbWVudHMgPSBzaXplOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmggYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5ZmM5YwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vcmVhbHBhdGguaAorICoKKyAqIEdldCB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZXMuIFRoZSBiYXNpcyBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2lmbmRlZiBfU0VDVVJJVFlfVE9NT1lPX1JFQUxQQVRIX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9ICisKK3N0cnVjdCBwYXRoOworc3RydWN0IHRvbW95b19wYXRoX2luZm87CitzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlcjsKKworLyogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4gKi8KK2ludCB0b21veW9fZW5jb2RlKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKTsKKworLyogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuICovCitpbnQgdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIoc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKm5ld25hbWUsCisJCQkgICAgICAgaW50IG5ld25hbWVfbGVuKTsKKworLyoKKyAqIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICogVGhlc2UgZnVuY3Rpb25zIHVzZSB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogaWYgdGhlc2UgZnVuY3Rpb25zIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKy8qCisgKiBTYW1lIHdpdGggdG9tb3lvX3JlYWxwYXRoKCkgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGZpbmFsIHN5bWxpbmsuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyhjb25zdCBjaGFyICpwYXRobmFtZSk7CisvKiBTYW1lIHdpdGggdG9tb3lvX3JlYWxwYXRoKCkgZXhjZXB0IHRoYXQgdGhlIHBhdGhuYW1lIGlzIGFscmVhZHkgc29sdmVkLiAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCk7CisKKy8qCisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEFDTCBlbnRyeS4KKyAqIFRoZSBSQU0gaXMgY2h1bmtlZCwgc28gTkVWRVIgdHJ5IHRvIGtmcmVlKCkgdGhlIHJldHVybmVkIHBvaW50ZXIuCisgKi8KK3ZvaWQgKnRvbW95b19hbGxvY19lbGVtZW50KGNvbnN0IHVuc2lnbmVkIGludCBzaXplKTsKKworLyoKKyAqIEtlZXAgdGhlIGdpdmVuIG5hbWUgb24gdGhlIFJBTS4KKyAqIFRoZSBSQU0gaXMgc2hhcmVkLCBzbyBORVZFUiB0cnkgdG8gbW9kaWZ5IG9yIGtmcmVlKCkgdGhlIHJldHVybmVkIG5hbWUuCisgKi8KK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fc2F2ZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSB1c2UgKGUuZy4gcGVybWlzc2lvbiBjaGVja3MpLiAqLwordm9pZCAqdG9tb3lvX2FsbG9jKGNvbnN0IHNpemVfdCBzaXplKTsKKworLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRvbW95b19hbGxvYygpLiAqLwordm9pZCB0b21veW9fZnJlZShjb25zdCB2b2lkICpwKTsKKworLyogQ2hlY2sgZm9yIG1lbW9yeSB1c2FnZS4gKi8KK2ludCB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlcihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisKKy8qIFNldCBtZW1vcnkgcXVvdGEuICovCitpbnQgdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisKKy8qIEluaXRpYWxpemUgcmVhbHBhdGggcmVsYXRlZCBjb2RlLiAqLwordm9pZCBfX2luaXQgdG9tb3lvX3JlYWxwYXRoX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX1JFQUxQQVRIX0gpICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmMgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlZWFlMQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uYwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by90b21veW8uYworICoKKyAqIExTTSBob29rcyBmb3IgVE9NT1lPIExpbnV4LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKworc3RhdGljIGludCB0b21veW9fY3JlZF9wcmVwYXJlKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCisJCQkgICAgICAgZ2ZwX3QgZ2ZwKQoreworCS8qCisJICogU2luY2UgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiIgaXMgYSBzaGFyYWJsZSBwb2ludGVyLAorCSAqIHdlIGRvbid0IG5lZWQgdG8gZHVwbGljYXRlLgorCSAqLworCW5ldy0+c2VjdXJpdHkgPSBvbGQtPnNlY3VyaXR5OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19icHJtX3NldF9jcmVkcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCS8qCisJICogRG8gb25seSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgb2YgYW4gZXhlY3ZlCisJICogb3BlcmF0aW9uLgorCSAqLworCWlmIChicHJtLT5jcmVkX3ByZXBhcmVkKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIExvYWQgcG9saWN5IGlmIC9zYmluL3RvbW95by1pbml0IGV4aXN0cyBhbmQgL3NiaW4vaW5pdCBpcyByZXF1ZXN0ZWQKKwkgKiBmb3IgdGhlIGZpcnN0IHRpbWUuCisJICovCisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJdG9tb3lvX2xvYWRfcG9saWN5KGJwcm0tPmZpbGVuYW1lKTsKKwkvKgorCSAqIFRlbGwgdG9tb3lvX2Jwcm1fY2hlY2tfc2VjdXJpdHkoKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIG9mIGFuCisJICogZXhlY3ZlIG9wZXJhdGlvbi4KKwkgKi8KKwlicHJtLT5jcmVkLT5zZWN1cml0eSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2Jwcm1fY2hlY2tfc2VjdXJpdHkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBicHJtLT5jcmVkLT5zZWN1cml0eTsKKworCS8qCisJICogRXhlY3V0ZSBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBwYXRobmFtZSBwYXNzZWQgdG8gZG9fZXhlY3ZlKCkKKwkgKiB1c2luZyBjdXJyZW50IGRvbWFpbi4KKwkgKi8KKwlpZiAoIWRvbWFpbikgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpuZXh0X2RvbWFpbiA9IE5VTEw7CisJCWludCByZXR2YWwgPSB0b21veW9fZmluZF9uZXh0X2RvbWFpbihicHJtLCAmbmV4dF9kb21haW4pOworCisJCWlmICghcmV0dmFsKQorCQkJYnBybS0+Y3JlZC0+c2VjdXJpdHkgPSBuZXh0X2RvbWFpbjsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJLyoKKwkgKiBSZWFkIHBlcm1pc3Npb24gaXMgY2hlY2tlZCBhZ2FpbnN0IGludGVycHJldGVycyB1c2luZyBuZXh0IGRvbWFpbi4KKwkgKiAnMScgaXMgdGhlIHJlc3VsdCBvZiBvcGVuX3RvX25hbWVpX2ZsYWdzKE9fUkRPTkxZKS4KKwkgKi8KKwlyZXR1cm4gdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihkb21haW4sICZicHJtLT5maWxlLT5mX3BhdGgsIDEpOworfQorCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCitzdGF0aWMgaW50IHRvbW95b19wcmVwZW5kKGNoYXIgKipidWZmZXIsIGludCAqYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4oc3RyKTsKKworCWlmICgqYnVmbGVuIDwgbmFtZWxlbikKKwkJcmV0dXJuIC1FTk9NRU07CisJKmJ1ZmxlbiAtPSBuYW1lbGVuOworCSpidWZmZXIgLT0gbmFtZWxlbjsKKwltZW1jcHkoKmJ1ZmZlciwgc3RyLCBuYW1lbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fc3lzY3RsX3BhdGggLSByZXR1cm4gdGhlIHJlYWxwYXRoIG9mIGEgY3RsX3RhYmxlLgorICogQHRhYmxlOiBwb2ludGVyIHRvICJzdHJ1Y3QgY3RsX3RhYmxlIi4KKyAqCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBAdGFibGUgb24gc3VjY2Vzcy4KKyAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogaWYgdGhpcyBmdW5jdGlvbiBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBjaGFyICp0b21veW9fc3lzY3RsX3BhdGgoc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJaW50IGJ1ZmxlbiA9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOOworCWNoYXIgKmJ1ZiA9IHRvbW95b19hbGxvYyhidWZsZW4pOworCWNoYXIgKmVuZCA9IGJ1ZiArIGJ1ZmxlbjsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCisJKi0tZW5kID0gJ1wwJzsKKwlidWZsZW4tLTsKKwl3aGlsZSAodGFibGUpIHsKKwkJY2hhciBudW1bMzJdOworCQljb25zdCBjaGFyICpzcCA9IHRhYmxlLT5wcm9jbmFtZTsKKworCQlpZiAoIXNwKSB7CisJCQltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7CisJCQlzbnByaW50ZihudW0sIHNpemVvZihudW0pIC0gMSwgIj0lZD0iLCB0YWJsZS0+Y3RsX25hbWUpOworCQkJc3AgPSBudW07CisJCX0KKwkJaWYgKHRvbW95b19wcmVwZW5kKCZlbmQsICZidWZsZW4sIHNwKSB8fAorCQkgICAgdG9tb3lvX3ByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIi8iKSkKKwkJCWdvdG8gb3V0OworCQl0YWJsZSA9IHRhYmxlLT5wYXJlbnQ7CisJfQorCWlmICh0b21veW9fcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCAiL3Byb2Mvc3lzIikpCisJCWdvdG8gb3V0OworCWVycm9yID0gdG9tb3lvX2VuY29kZShidWYsIGVuZCAtIGJ1ZiwgZW5kKTsKKyBvdXQ6CisJaWYgKCFlcnJvcikKKwkJcmV0dXJuIGJ1ZjsKKwl0b21veW9fZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRvbW95b19zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBvcCkKK3sKKwlpbnQgZXJyb3I7CisJY2hhciAqbmFtZTsKKworCW9wICY9IE1BWV9SRUFEIHwgTUFZX1dSSVRFOworCWlmICghb3ApCisJCXJldHVybiAwOworCW5hbWUgPSB0b21veW9fc3lzY3RsX3BhdGgodGFibGUpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9wZXJtKHRvbW95b19kb21haW4oKSwgbmFtZSwgb3ApOworCXRvbW95b19mcmVlKG5hbWUpOworCXJldHVybiBlcnJvcjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBsb2ZmX3QgbGVuZ3RoLAorCQkJCXVuc2lnbmVkIGludCB0aW1lX2F0dHJzKQoreworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCwKKwkJCQkgICAgICAgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfdW5saW5rKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfVU5MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX21rZGlyKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgaW50IG1vZGUpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX01LRElSX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3JtZGlyKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfUk1ESVJfQUNMLAorCQkJCSAgICAgICAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfc3ltbGluayhzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgICAgY29uc3QgY2hhciAqb2xkX25hbWUpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1NZTUxJTktfQUNMLAorCQkJCSAgICAgICAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbWtub2Qoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJaW50IHR5cGUgPSBUT01PWU9fVFlQRV9DUkVBVEVfQUNMOworCisJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGQ0hSOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtDSEFSX0FDTDsKKwkJYnJlYWs7CisJY2FzZSBTX0lGQkxLOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0w7CisJCWJyZWFrOworCWNhc2UgU19JRklGTzoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LRklGT19BQ0w7CisJCWJyZWFrOworCWNhc2UgU19JRlNPQ0s6CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS1NPQ0tfQUNMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgdHlwZSwgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IHBhdGggKm5ld19kaXIsCisJCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoMSA9IHsgbmV3X2Rpci0+bW50LCBvbGRfZGVudHJ5IH07CisJc3RydWN0IHBhdGggcGF0aDIgPSB7IG5ld19kaXItPm1udCwgbmV3X2RlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMnBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX0xJTktfQUNMLAorCQkJCSAgICAgICAmcGF0aDEsICZwYXRoMik7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfcmVuYW1lKHN0cnVjdCBwYXRoICpvbGRfcGFyZW50LAorCQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCSAgICAgIHN0cnVjdCBwYXRoICpuZXdfcGFyZW50LAorCQkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoMSA9IHsgb2xkX3BhcmVudC0+bW50LCBvbGRfZGVudHJ5IH07CisJc3RydWN0IHBhdGggcGF0aDIgPSB7IG5ld19wYXJlbnQtPm1udCwgbmV3X2RlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMnBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wsCisJCQkJICAgICAgICZwYXRoMSwgJnBhdGgyKTsKK30KKworc3RhdGljIGludCB0b21veW9fZmlsZV9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaWYgKGNtZCA9PSBGX1NFVEZMICYmICgoYXJnIF4gZmlsZS0+Zl9mbGFncykgJiBPX0FQUEVORCkpCisJCXJldHVybiB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHRvbW95b19kb21haW4oKSwgZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKK3sKKwlpbnQgZmxhZ3MgPSBmLT5mX2ZsYWdzOworCisJaWYgKChmbGFncyArIDEpICYgT19BQ0NNT0RFKQorCQlmbGFncysrOworCWZsYWdzIHw9IGYtPmZfZmxhZ3MgJiAoT19BUFBFTkQgfCBPX1RSVU5DKTsKKwkvKiBEb24ndCBjaGVjayByZWFkIHBlcm1pc3Npb24gaGVyZSBpZiBjYWxsZWQgZnJvbSBkb19leGVjdmUoKS4gKi8KKwlpZiAoY3VycmVudC0+aW5fZXhlY3ZlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbih0b21veW9fZG9tYWluKCksICZmLT5mX3BhdGgsIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHRvbW95b19zZWN1cml0eV9vcHMgPSB7CisJLm5hbWUgICAgICAgICAgICAgICAgPSAidG9tb3lvIiwKKwkuY3JlZF9wcmVwYXJlICAgICAgICA9IHRvbW95b19jcmVkX3ByZXBhcmUsCisJLmJwcm1fc2V0X2NyZWRzICAgICAgPSB0b21veW9fYnBybV9zZXRfY3JlZHMsCisJLmJwcm1fY2hlY2tfc2VjdXJpdHkgPSB0b21veW9fYnBybV9jaGVja19zZWN1cml0eSwKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJLnN5c2N0bCAgICAgICAgICAgICAgPSB0b21veW9fc3lzY3RsLAorI2VuZGlmCisJLmZpbGVfZmNudGwgICAgICAgICAgPSB0b21veW9fZmlsZV9mY250bCwKKwkuZGVudHJ5X29wZW4gICAgICAgICA9IHRvbW95b19kZW50cnlfb3BlbiwKKwkucGF0aF90cnVuY2F0ZSAgICAgICA9IHRvbW95b19wYXRoX3RydW5jYXRlLAorCS5wYXRoX3VubGluayAgICAgICAgID0gdG9tb3lvX3BhdGhfdW5saW5rLAorCS5wYXRoX21rZGlyICAgICAgICAgID0gdG9tb3lvX3BhdGhfbWtkaXIsCisJLnBhdGhfcm1kaXIgICAgICAgICAgPSB0b21veW9fcGF0aF9ybWRpciwKKwkucGF0aF9zeW1saW5rICAgICAgICA9IHRvbW95b19wYXRoX3N5bWxpbmssCisJLnBhdGhfbWtub2QgICAgICAgICAgPSB0b21veW9fcGF0aF9ta25vZCwKKwkucGF0aF9saW5rICAgICAgICAgICA9IHRvbW95b19wYXRoX2xpbmssCisJLnBhdGhfcmVuYW1lICAgICAgICAgPSB0b21veW9fcGF0aF9yZW5hbWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0b21veW9faW5pdCh2b2lkKQoreworCXN0cnVjdCBjcmVkICpjcmVkID0gKHN0cnVjdCBjcmVkICopIGN1cnJlbnRfY3JlZCgpOworCisJaWYgKCFzZWN1cml0eV9tb2R1bGVfZW5hYmxlKCZ0b21veW9fc2VjdXJpdHlfb3BzKSkKKwkJcmV0dXJuIDA7CisJLyogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIHNlY3VyaXR5IGZyYW1ld29yayAqLworCWlmIChyZWdpc3Rlcl9zZWN1cml0eSgmdG9tb3lvX3NlY3VyaXR5X29wcykpCisJCXBhbmljKCJGYWlsdXJlIHJlZ2lzdGVyaW5nIFRPTU9ZTyBMaW51eCIpOworCXByaW50ayhLRVJOX0lORk8gIlRPTU9ZTyBMaW51eCBpbml0aWFsaXplZFxuIik7CisJY3JlZC0+c2VjdXJpdHkgPSAmdG9tb3lvX2tlcm5lbF9kb21haW47CisJdG9tb3lvX3JlYWxwYXRoX2luaXQoKTsKKwlyZXR1cm4gMDsKK30KKworc2VjdXJpdHlfaW5pdGNhbGwodG9tb3lvX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYzhmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vdG9tb3lvLmgKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19ICisKK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvOworc3RydWN0IHBhdGg7CitzdHJ1Y3QgaW5vZGU7CitzdHJ1Y3QgbGludXhfYmlucHJtOworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyOworCitpbnQgdG9tb3lvX2NoZWNrX2ZpbGVfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgdTggcGVybSk7CitpbnQgdG9tb3lvX2NoZWNrX2V4ZWNfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkgICBzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyICpidWYpOworaW50IHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3QgaW50IGZsYWcpOworaW50IHRvbW95b19jaGVja18xcGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoKTsKK2ludCB0b21veW9fY2hlY2tfMnBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aDEsCisJCQkgICAgc3RydWN0IHBhdGggKnBhdGgyKTsKK2ludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHApOworaW50IHRvbW95b19maW5kX25leHRfZG9tYWluKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkgICAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqKm5leHRfZG9tYWluKTsKKworLyogSW5kZXggbnVtYmVycyBmb3IgQWNjZXNzIENvbnRyb2xzLiAqLworCisjZGVmaW5lIFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wgICAgICAgICAgICAgICAgIDEKKworLyogSW5kZXggbnVtYmVycyBmb3IgRmlsZSBDb250cm9scy4gKi8KKworLyoKKyAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgc3BlY2lhbC4gVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBhdXRvbWF0aWNhbGx5IHNldAorICogaWYgYm90aCBUWVBFX1JFQURfQUNMIGFuZCBUWVBFX1dSSVRFX0FDTCBhcmUgc2V0LiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kCisgKiBUWVBFX1dSSVRFX0FDTCBhcmUgYXV0b21hdGljYWxseSBzZXQgaWYgVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzZXQuCisgKiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBlaXRoZXIgVFlQRV9SRUFEX0FDTCBvcgorICogVFlQRV9XUklURV9BQ0wgaXMgY2xlYXJlZC4gQm90aCBUWVBFX1JFQURfQUNMIGFuZCBUWVBFX1dSSVRFX0FDTCBhcmUKKyAqIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGNsZWFyZWQuCisgKi8KKworI2RlZmluZSBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCAgICAwCisjZGVmaW5lIFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMICAgICAgIDEKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVBRF9BQ0wgICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fVFlQRV9XUklURV9BQ0wgICAgICAgICAzCisjZGVmaW5lIFRPTU9ZT19UWVBFX0NSRUFURV9BQ0wgICAgICAgIDQKKyNkZWZpbmUgVE9NT1lPX1RZUEVfVU5MSU5LX0FDTCAgICAgICAgNQorI2RlZmluZSBUT01PWU9fVFlQRV9NS0RJUl9BQ0wgICAgICAgICA2CisjZGVmaW5lIFRPTU9ZT19UWVBFX1JNRElSX0FDTCAgICAgICAgIDcKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtGSUZPX0FDTCAgICAgICAgOAorI2RlZmluZSBUT01PWU9fVFlQRV9NS1NPQ0tfQUNMICAgICAgICA5CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LQkxPQ0tfQUNMICAgICAgMTAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtDSEFSX0FDTCAgICAgICAxMQorI2RlZmluZSBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wgICAgIDEyCisjZGVmaW5lIFRPTU9ZT19UWVBFX1NZTUxJTktfQUNMICAgICAgMTMKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wgICAgICAxNAorI2RlZmluZSBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTiAxNQorCisjZGVmaW5lIFRPTU9ZT19UWVBFX0xJTktfQUNMICAgICAgICAgMAorI2RlZmluZSBUT01PWU9fVFlQRV9SRU5BTUVfQUNMICAgICAgIDEKKyNkZWZpbmUgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT04gMgorCisjZGVmaW5lIFRPTU9ZT19ET01BSU5QT0xJQ1kgICAgICAgICAgMAorI2RlZmluZSBUT01PWU9fRVhDRVBUSU9OUE9MSUNZICAgICAgIDEKKyNkZWZpbmUgVE9NT1lPX0RPTUFJTl9TVEFUVVMgICAgICAgICAyCisjZGVmaW5lIFRPTU9ZT19QUk9DRVNTX1NUQVRVUyAgICAgICAgMworI2RlZmluZSBUT01PWU9fTUVNSU5GTyAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVE9NT1lPX1NFTEZET01BSU4gICAgICAgICAgICA1CisjZGVmaW5lIFRPTU9ZT19WRVJTSU9OICAgICAgICAgICAgICAgNgorI2RlZmluZSBUT01PWU9fUFJPRklMRSAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVE9NT1lPX01BTkFHRVIgICAgICAgICAgICAgICA4CisKK2V4dGVybiBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19kb21haW4odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9jcmVkKCktPnNlY3VyaXR5OworfQorCisvKiBDYWxsZXIgaG9sZHMgdGFza2xpc3RfbG9jayBzcGlubG9jay4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3JlYWxfZG9tYWluKHN0cnVjdCB0YXNrX3N0cnVjdAorCQkJCQkJCSAgICAqdGFzaykKK3sKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGdldF90YXNrX2NyZWQodGFzayk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gY3JlZC0+c2VjdXJpdHk7CisKKwlwdXRfY3JlZChjcmVkKTsKKwlyZXR1cm4gZG9tYWluOworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KK30KKworI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gpICovCmRpZmYgLS1naXQgYS9zb3VuZC9LY29uZmlnIGIvc291bmQvS2NvbmZpZwppbmRleCAyMDBhY2ExLi4xZWNlYjg1IDEwMDY0NAotLS0gYS9zb3VuZC9LY29uZmlnCisrKyBiL3NvdW5kL0tjb25maWcKQEAgLTYwLDYgKzYwLDggQEAKIAogc291cmNlICJzb3VuZC9hcm0vS2NvbmZpZyIKIAorc291cmNlICJzb3VuZC9hdG1lbC9LY29uZmlnIgorCiBzb3VyY2UgInNvdW5kL3NwaS9LY29uZmlnIgogCiBzb3VyY2UgInNvdW5kL21pcHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL3NvdW5kL01ha2VmaWxlIGIvc291bmQvTWFrZWZpbGUKaW5kZXggYzc2ZDcwNy4uZWM0NjdkZSAxMDA2NDQKLS0tIGEvc291bmQvTWFrZWZpbGUKKysrIGIvc291bmQvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiBvYmotJChDT05GSUdfU09VTkRfUFJJTUUpICs9IG9zcy8KIG9iai0kKENPTkZJR19ETUFTT1VORCkgKz0gb3NzLwogb2JqLSQoQ09ORklHX1NORCkgKz0gY29yZS8gaTJjLyBkcml2ZXJzLyBpc2EvIHBjaS8gcHBjLyBhcm0vIHNoLyBzeW50aC8gdXNiLyBcCi0Jc3BhcmMvIHNwaS8gcGFyaXNjLyBwY21jaWEvIG1pcHMvIHNvYy8KKwlzcGFyYy8gc3BpLyBwYXJpc2MvIHBjbWNpYS8gbWlwcy8gc29jLyBhdG1lbC8KIG9iai0kKENPTkZJR19TTkRfQU9BKSArPSBhb2EvCiAKICMgVGhpcyBvbmUgbXVzdCBiZSBjb21waWxhYmxlIGV2ZW4gaWYgc291bmQgaXMgY29uZmlndXJlZCBvdXQKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9hb2EtZ3Bpby5oIGIvc291bmQvYW9hL2FvYS1ncGlvLmgKaW5kZXggZWU2NGY1ZC4uNjA2NWIwMyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2FvYS1ncGlvLmgKKysrIGIvc291bmQvYW9hL2FvYS1ncGlvLmgKQEAgLTM0LDEwICszNCwxMiBAQAogCXZvaWQgKCpzZXRfaGVhZHBob25lKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKIAl2b2lkICgqc2V0X3NwZWFrZXJzKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKIAl2b2lkICgqc2V0X2xpbmVvdXQpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOworCXZvaWQgKCpzZXRfbWFzdGVyKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKIAogCWludCAoKmdldF9oZWFkcGhvbmUpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KTsKIAlpbnQgKCpnZXRfc3BlYWtlcnMpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KTsKIAlpbnQgKCpnZXRfbGluZW91dCkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOworCWludCAoKmdldF9tYXN0ZXIpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KTsKIAogCXZvaWQgKCpzZXRfaHdfcmVzZXQpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29yZS9hbHNhLmMgYi9zb3VuZC9hb2EvY29yZS9hbHNhLmMKaW5kZXggNjE3ODUwNC4uMGZhMzg1NSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvcmUvYWxzYS5jCisrKyBiL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYwpAQCAtMjMsOSArMjMsMTAgQEAKIAkJLyogY2Fubm90IGJlIEVFWElTVCBkdWUgdG8gdXNhZ2UgaW4gYW9hX2ZhYnJpY19yZWdpc3RlciAqLwogCQlyZXR1cm4gLUVCVVNZOwogCi0JYWxzYV9jYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBuYW1lLCBtb2QsIHNpemVvZihzdHJ1Y3QgYW9hX2NhcmQpKTsKLQlpZiAoIWFsc2FfY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBuYW1lLCBtb2QsIHNpemVvZihzdHJ1Y3QgYW9hX2NhcmQpLAorCQkJICAgICAgJmFsc2FfY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJYW9hX2NhcmQgPSBhbHNhX2NhcmQtPnByaXZhdGVfZGF0YTsKIAlhb2FfY2FyZC0+YWxzYV9jYXJkID0gYWxzYV9jYXJkOwogCWFsc2FfY2FyZC0+ZGV2ID0gZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMgYi9zb3VuZC9hb2EvY29yZS9ncGlvLWZlYXR1cmUuYwppbmRleCBjOTNhZDVkLi5kZThlMDNhIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29yZS9ncGlvLWZlYXR1cmUuYworKysgYi9zb3VuZC9hb2EvY29yZS9ncGlvLWZlYXR1cmUuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgIi4uL2FvYS5oIgogCi0vKiBUT0RPOiB0aGVzZSBhcmUgMjAgZ2xvYmFsIHZhcmlhYmxlcworLyogVE9ETzogdGhlc2UgYXJlIGxvdHMgb2YgZ2xvYmFsIHZhcmlhYmxlcwogICogdGhhdCBhcmVuJ3QgdXNlZCBvbiBtb3N0IG1hY2hpbmVzLi4uCiAgKiBNb3ZlIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAogICogc3RydWN0dXJlIGFuZCB1c2UgdGhhdC4KQEAgLTIzLDYgKzIzLDcgQEAKIC8qIHRoZXNlIGFyZSB0aGUgR1BJTyBudW1iZXJzIChyZWdpc3RlciBhZGRyZXNzZXMgYXMgb2Zmc2V0cyBpbnRvCiAgKiB0aGUgR1BJTyBzcGFjZSkgKi8KIHN0YXRpYyBpbnQgaGVhZHBob25lX211dGVfZ3BpbzsKK3N0YXRpYyBpbnQgbWFzdGVyX211dGVfZ3BpbzsKIHN0YXRpYyBpbnQgYW1wX211dGVfZ3BpbzsKIHN0YXRpYyBpbnQgbGluZW91dF9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGh3X3Jlc2V0X2dwaW87CkBAIC0zMiw2ICszMyw3IEBACiAKIC8qIHNlZSB0aGUgU1dJVENIX0dQSU8gbWFjcm8gKi8KIHN0YXRpYyBpbnQgaGVhZHBob25lX211dGVfZ3Bpb19hY3RpdmVzdGF0ZTsKK3N0YXRpYyBpbnQgbWFzdGVyX211dGVfZ3Bpb19hY3RpdmVzdGF0ZTsKIHN0YXRpYyBpbnQgYW1wX211dGVfZ3Bpb19hY3RpdmVzdGF0ZTsKIHN0YXRpYyBpbnQgbGluZW91dF9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGh3X3Jlc2V0X2dwaW9fYWN0aXZlc3RhdGU7CkBAIC0xNTYsNiArMTU4LDcgQEAKIEZUUl9HUElPKGhlYWRwaG9uZSwgMCk7CiBGVFJfR1BJTyhhbXAsIDEpOwogRlRSX0dQSU8obGluZW91dCwgMik7CitGVFJfR1BJTyhtYXN0ZXIsIDMpOwogCiBzdGF0aWMgdm9pZCBmdHJfZ3Bpb19zZXRfaHdfcmVzZXQoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbikKIHsKQEAgLTE3Miw2ICsxNzUsOCBAQAogCQkJICBod19yZXNldF9ncGlvLCB2KTsKIH0KIAorc3RhdGljIHN0cnVjdCBncGlvX21ldGhvZHMgbWV0aG9kczsKKwogc3RhdGljIHZvaWQgZnRyX2dwaW9fYWxsX2FtcHNfb2ZmKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KQogewogCWludCBzYXZlZDsKQEAgLTE4MSw2ICsxODYsOCBAQAogCWZ0cl9ncGlvX3NldF9oZWFkcGhvbmUocnQsIDApOwogCWZ0cl9ncGlvX3NldF9hbXAocnQsIDApOwogCWZ0cl9ncGlvX3NldF9saW5lb3V0KHJ0LCAwKTsKKwlpZiAobWV0aG9kcy5zZXRfbWFzdGVyKQorCQlmdHJfZ3Bpb19zZXRfbWFzdGVyKHJ0LCAwKTsKIAlydC0+aW1wbGVtZW50YXRpb25fcHJpdmF0ZSA9IHNhdmVkOwogfQogCkBAIC0xOTMsNiArMjAwLDggQEAKIAlmdHJfZ3Bpb19zZXRfaGVhZHBob25lKHJ0LCAocz4+MCkmMSk7CiAJZnRyX2dwaW9fc2V0X2FtcChydCwgKHM+PjEpJjEpOwogCWZ0cl9ncGlvX3NldF9saW5lb3V0KHJ0LCAocz4+MikmMSk7CisJaWYgKG1ldGhvZHMuc2V0X21hc3RlcikKKwkJZnRyX2dwaW9fc2V0X21hc3RlcihydCwgKHM+PjMpJjEpOwogfQogCiBzdGF0aWMgdm9pZCBmdHJfaGFuZGxlX25vdGlmeShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yMzEsNiArMjQwLDEyIEBACiAJZ2V0X2dwaW8oImh3LXJlc2V0IiwgImF1ZGlvLWh3LXJlc2V0IiwKIAkJICZod19yZXNldF9ncGlvLAogCQkgJmh3X3Jlc2V0X2dwaW9fYWN0aXZlc3RhdGUpOworCWlmIChnZXRfZ3BpbygibWFzdGVyLW11dGUiLCBOVUxMLAorCQkgICAgICZtYXN0ZXJfbXV0ZV9ncGlvLAorCQkgICAgICZtYXN0ZXJfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlKSkgeworCQltZXRob2RzLnNldF9tYXN0ZXIgPSBmdHJfZ3Bpb19zZXRfbWFzdGVyOworCQltZXRob2RzLmdldF9tYXN0ZXIgPSBmdHJfZ3Bpb19nZXRfbWFzdGVyOworCX0KIAogCWhlYWRwaG9uZV9kZXRlY3Rfbm9kZSA9IGdldF9ncGlvKCJoZWFkcGhvbmUtZGV0ZWN0IiwgTlVMTCwKIAkJCQkJICZoZWFkcGhvbmVfZGV0ZWN0X2dwaW8sCmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCmluZGV4IGFkNjBmNWQuLmZiZjVjOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCisrKyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCkBAIC0xLDE2ICsxLDE0IEBACiAvKgotICogQXBwbGUgT25ib2FyZCBBdWRpbyBkcml2ZXIgLS0gbGF5b3V0IGZhYnJpYworICogQXBwbGUgT25ib2FyZCBBdWRpbyBkcml2ZXIgLS0gbGF5b3V0L21hY2hpbmUgaWQgZmFicmljCiAgKgotICogQ29weXJpZ2h0IDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqCiAgKiBHUEwgdjIsIGNhbiBiZSBmb3VuZCBpbiBDT1BZSU5HLgogICoKICAqCi0gKiBUaGlzIGZhYnJpYyBtb2R1bGUgbG9va3MgZm9yIHNvdW5kIGNvZGVjcwotICogYmFzZWQgb24gdGhlIGxheW91dC1pZCBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUuCi0gKgorICogVGhpcyBmYWJyaWMgbW9kdWxlIGxvb2tzIGZvciBzb3VuZCBjb2RlY3MgYmFzZWQgb24gdGhlCisgKiBsYXlvdXQtaWQgb3IgZGV2aWNlLWlkIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZS4KICAqLwotCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02Myw3ICs2MSw3IEBACiAjZGVmaW5lIExBWU9VVF9GTEFHX0NPTUJPX0xJTkVPVVRfU1BESUYJKDE8PDApCiAKIHN0cnVjdCBsYXlvdXQgewotCXVuc2lnbmVkIGludCBsYXlvdXRfaWQ7CisJdW5zaWduZWQgaW50IGxheW91dF9pZCwgZGV2aWNlX2lkOwogCXN0cnVjdCBjb2RlY19jb25uZWN0X2luZm8gY29kZWNzW01BWF9DT0RFQ1NfUEVSX0JVU107CiAJaW50IGZsYWdzOwogCkBAIC0xMTEsNiArMTA5LDEwIEBACiBNT0RVTEVfQUxJQVMoInNvdW5kLWxheW91dC05OCIpOwogTU9EVUxFX0FMSUFTKCJzb3VuZC1sYXlvdXQtMTAwIik7CiAKK01PRFVMRV9BTElBUygiYW9hLWRldmljZS1pZC0xNCIpOworTU9EVUxFX0FMSUFTKCJhb2EtZGV2aWNlLWlkLTIyIik7CitNT0RVTEVfQUxJQVMoImFvYS1kZXZpY2UtaWQtMzUiKTsKKwogLyogb255eCB3aXRoIGFsbCBidXQgbWljcm9waG9uZSBjb25uZWN0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgY29kZWNfY29ubmVjdGlvbiBvbnl4X2Nvbm5lY3Rpb25zX25vbWljW10gPSB7CiAJewpAQCAtNTE4LDYgKzUyMCwyNyBAQAogCQkuY29ubmVjdGlvbnMgPSBvbnl4X2Nvbm5lY3Rpb25zX25vaGVhZHBob25lcywKIAkgIH0sCiAJfSwKKwkvKiBQb3dlck1hYzMsNCAqLworCXsgLmRldmljZV9pZCA9IDE0LAorCSAgLmNvZGVjc1swXSA9IHsKKwkJLm5hbWUgPSAidGFzIiwKKwkJLmNvbm5lY3Rpb25zID0gdGFzX2Nvbm5lY3Rpb25zX25vbGluZSwKKwkgIH0sCisJfSwKKwkvKiBQb3dlck1hYzMsNiAqLworCXsgLmRldmljZV9pZCA9IDIyLAorCSAgLmNvZGVjc1swXSA9IHsKKwkJLm5hbWUgPSAidGFzIiwKKwkJLmNvbm5lY3Rpb25zID0gdGFzX2Nvbm5lY3Rpb25zX2FsbCwKKwkgIH0sCisJfSwKKwkvKiBQb3dlckJvb2s1LDIgKi8KKwl7IC5kZXZpY2VfaWQgPSAzNSwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19hbGwsCisJICB9LAorCX0sCiAJe30KIH07CiAKQEAgLTUyNiw3ICs1NDksNyBAQAogCXN0cnVjdCBsYXlvdXQgKmw7CiAKIAlsID0gbGF5b3V0czsKLQl3aGlsZSAobC0+bGF5b3V0X2lkKSB7CisJd2hpbGUgKGwtPmNvZGVjc1swXS5uYW1lKSB7CiAJCWlmIChsLT5sYXlvdXRfaWQgPT0gaWQpCiAJCQlyZXR1cm4gbDsKIAkJbCsrOwpAQCAtNTM0LDYgKzU1NywxOSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGxheW91dCAqZmluZF9sYXlvdXRfYnlfZGV2aWNlKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbGF5b3V0ICpsOworCisJbCA9IGxheW91dHM7CisJd2hpbGUgKGwtPmNvZGVjc1swXS5uYW1lKSB7CisJCWlmIChsLT5kZXZpY2VfaWQgPT0gaWQpCisJCQlyZXR1cm4gbDsKKwkJbCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgdXNlX2xheW91dChzdHJ1Y3QgbGF5b3V0ICpsKQogewogCWludCBpOwpAQCAtNTY0LDYgKzYwMCw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAqaGVhZHBob25lX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqbGluZW91dF9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNwZWFrZXJfY3RybDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXJfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpoZWFkcGhvbmVfZGV0ZWN0ZWRfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpsaW5lb3V0X2RldGVjdGVkX2N0cmw7CiAKQEAgLTYxNSw2ICs2NTIsNyBAQAogQU1QX0NPTlRST0woaGVhZHBob25lLCAiSGVhZHBob25lIFN3aXRjaCIpOwogQU1QX0NPTlRST0woc3BlYWtlcnMsICJTcGVha2VycyBTd2l0Y2giKTsKIEFNUF9DT05UUk9MKGxpbmVvdXQsICJMaW5lLU91dCBTd2l0Y2giKTsKK0FNUF9DT05UUk9MKG1hc3RlciwgIk1hc3RlciBTd2l0Y2giKTsKIAogc3RhdGljIGludCBkZXRlY3RfY2hvaWNlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCkBAIC04NTUsNiArODkzLDExIEBACiAgCWxpbmVvdXQgPSBjb2RlYy0+Z3Bpby0+bWV0aG9kcy0+Z2V0X2RldGVjdChjb2RlYy0+Z3BpbywKIAkJCQkJCSAgIEFPQV9OT1RJRllfTElORV9PVVQpOwogCisJaWYgKGNvZGVjLT5ncGlvLT5tZXRob2RzLT5zZXRfbWFzdGVyKSB7CisJCWN0bCA9IHNuZF9jdGxfbmV3MSgmbWFzdGVyX2N0bCwgY29kZWMtPmdwaW8pOworCQlsZGV2LT5tYXN0ZXJfY3RybCA9IGN0bDsKKwkJYW9hX3NuZF9jdGxfYWRkKGN0bCk7CisJfQogCXdoaWxlIChjYy0+Y29ubmVjdGVkKSB7CiAJCWlmIChjYy0+Y29ubmVjdGVkICYgQ0NfU1BFQUtFUlMpIHsKIAkJCWlmIChoZWFkcGhvbmVzIDw9IDAgJiYgbGluZW91dCA8PSAwKQpAQCAtOTM4LDggKzk4MSw4IEBACiBzdGF0aWMgaW50IGFvYV9mYWJyaWNfbGF5b3V0X3Byb2JlKHN0cnVjdCBzb3VuZGJ1c19kZXYgKnNkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpzb3VuZCA9IE5VTEw7Ci0JY29uc3QgdW5zaWduZWQgaW50ICpsYXlvdXRfaWQ7Ci0Jc3RydWN0IGxheW91dCAqbGF5b3V0OworCWNvbnN0IHVuc2lnbmVkIGludCAqaWQ7CisJc3RydWN0IGxheW91dCAqbGF5b3V0ID0gTlVMTDsKIAlzdHJ1Y3QgbGF5b3V0X2RldiAqbGRldiA9IE5VTEw7CiAJaW50IGVycjsKIApAQCAtOTUyLDE1ICs5OTUsMTggQEAKIAkJaWYgKHNvdW5kLT50eXBlICYmIHN0cmNhc2VjbXAoc291bmQtPnR5cGUsICJzb3VuZGNoaXAiKSA9PSAwKQogCQkJYnJlYWs7CiAJfQotCWlmICghc291bmQpIHJldHVybiAtRU5PREVWOworCWlmICghc291bmQpCisJCXJldHVybiAtRU5PREVWOwogCi0JbGF5b3V0X2lkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7Ci0JaWYgKCFsYXlvdXRfaWQpCi0JCWdvdG8gb3V0bm9kZXY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAic25kLWFvYS1mYWJyaWMtbGF5b3V0OiBmb3VuZCBidXMgd2l0aCBsYXlvdXQgJWRcbiIsCi0JICAgICAgICpsYXlvdXRfaWQpOworCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7CisJaWYgKGlkKSB7CisJCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2lkKCppZCk7CisJfSBlbHNlIHsKKwkJaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJaWYgKGlkKQorCQkJbGF5b3V0ID0gZmluZF9sYXlvdXRfYnlfZGV2aWNlKCppZCk7CisJfQogCi0JbGF5b3V0ID0gZmluZF9sYXlvdXRfYnlfaWQoKmxheW91dF9pZCk7CiAJaWYgKCFsYXlvdXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6IHVua25vd24gbGF5b3V0XG4iKTsKIAkJZ290byBvdXRub2RldjsKQEAgLTk3Niw2ICsxMDIyLDcgQEAKIAlsZGV2LT5sYXlvdXQgPSBsYXlvdXQ7CiAJbGRldi0+Z3Bpby5ub2RlID0gc291bmQtPnBhcmVudDsKIAlzd2l0Y2ggKGxheW91dC0+bGF5b3V0X2lkKSB7CisJY2FzZSAwOiAgLyogYW55dGhpbmcgd2l0aCBkZXZpY2VfaWQsIG5vdCBsYXlvdXRfaWQgKi8KIAljYXNlIDQxOiAvKiB0aGF0IHVua25vd24gbWFjaGluZSBubyBvbmUgc2VlbXMgdG8gaGF2ZSAqLwogCWNhc2UgNTE6IC8qIFBvd2VyQm9vazUsNCAqLwogCWNhc2UgNTg6IC8qIE1hYyBNaW5pICovCmRpZmYgLS1naXQgYS9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCmluZGV4IGJlNDY4ZWRmLi40MThjODRjIDEwMDY0NAotLS0gYS9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYworKysgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpMnNidXMgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqCiAgKiBHUEwgdjIsIGNhbiBiZSBmb3VuZCBpbiBDT1BZSU5HLgogICovCkBAIC0xODYsMTMgKzE4NiwyNSBAQAogCQl9CiAJfQogCWlmIChpID09IDEpIHsKLQkJY29uc3QgdTMyICpsYXlvdXRfaWQgPQotCQkJb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7Ci0JCWlmIChsYXlvdXRfaWQpIHsKLQkJCWxheW91dCA9ICpsYXlvdXRfaWQ7CisJCWNvbnN0IHUzMiAqaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKKworCQlpZiAoaWQpIHsKKwkJCWxheW91dCA9ICppZDsKIAkJCXNucHJpbnRmKGRldi0+c291bmQubW9kYWxpYXMsIDMyLAogCQkJCSAic291bmQtbGF5b3V0LSVkIiwgbGF5b3V0KTsKIAkJCW9rID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQkvKgorCQkJICogV2UgcHJvYmFibHkgY2Fubm90IGhhbmRsZSBhbGwgZGV2aWNlLWlkIG1hY2hpbmVzLAorCQkJICogc28gcmVzdHJpY3QgdG8gdGhvc2Ugd2UgZG8gaGFuZGxlIGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChpZCAmJiAoKmlkID09IDIyIHx8ICppZCA9PSAxNCB8fCAqaWQgPT0gMzUpKSB7CisJCQkJc25wcmludGYoZGV2LT5zb3VuZC5tb2RhbGlhcywgMzIsCisJCQkJCSAiYW9hLWRldmljZS1pZC0lZCIsICppZCk7CisJCQkJb2sgPSAxOworCQkJCWxheW91dCA9IC0xOworCQkJfQogCQl9CiAJfQogCS8qIGZvciB0aGUgdGltZSBiZWluZywgdW50aWwgd2UgY2FuIGhhbmRsZSBub24tbGF5b3V0LWlkCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vS2NvbmZpZyBiL3NvdW5kL2FybS9LY29uZmlnCmluZGV4IGY4ZTZkZTQ4Li44ODU2ODNhIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vS2NvbmZpZworKysgYi9zb3VuZC9hcm0vS2NvbmZpZwpAQCAtMTEsMTcgKzExLDYgQEAKIAogaWYgU05EX0FSTQogCi1jb25maWcgU05EX1NBMTFYWF9VREExMzQxCi0JdHJpc3RhdGUgIlNBMTF4eCBVREExMzQxVFMgZHJpdmVyIChpUGFxIEgzNjAwKSIKLQlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwICYmIEwzCi0Jc2VsZWN0IFNORF9QQ00KLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQ29tcGFxIGlQYXEgSDN4MDAgaGFuZGhlbGQgY29tcHV0ZXIKLQkgIGFuZCB3YW50IHRvIHVzZSBpdHMgUGhpbGlwcyBVREEgMTM0MSBhdWRpbyBjaGlwLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtc2ExMXh4LXVkYTEzNDEuCi0KIGNvbmZpZyBTTkRfQVJNQUFDSQogCXRyaXN0YXRlICJBUk0gUHJpbWVDZWxsIFBMMDQxIEFDIExpbmsgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vTWFrZWZpbGUgYi9zb3VuZC9hcm0vTWFrZWZpbGUKaW5kZXggMjA1NGRlMS4uNWE1NDllZCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL01ha2VmaWxlCisrKyBiL3NvdW5kL2FybS9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIEFMU0EKICMKIAotb2JqLSQoQ09ORklHX1NORF9TQTExWFhfVURBMTM0MSkgKz0gc25kLXNhMTF4eC11ZGExMzQxLm8gCi1zbmQtc2ExMXh4LXVkYTEzNDEtb2JqcwkJOj0gc2ExMXh4LXVkYTEzNDEubwotCiBvYmotJChDT05GSUdfU05EX0FSTUFBQ0kpCSs9IHNuZC1hYWNpLm8KIHNuZC1hYWNpLW9ianMJCQk6PSBhYWNpLm8gZGV2ZG1hLm8KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggNzcyOTAxZS4uN2ZiZDY4ZiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05OTUsMTAgKzk5NSwxMSBAQAogewogCXN0cnVjdCBhYWNpICphYWNpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IGFhY2lfZnJlZV9jYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDM1YWZkMGMuLjJlNjM1NWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTMxLDYgKzMxLDcgQEAKIHN0YXRpYyB2b2xhdGlsZSBsb25nIGdzcl9iaXRzOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdjb25mX2NsazsKK3N0YXRpYyBpbnQgcmVzZXRfZ3BpbzsKIAogLyoKICAqIEJld2FyZSBQWEEyN3ggYnVnczoKQEAgLTQyLDYgKzQzLDQ1IEBACiAgKiAxIGppZmZ5IHRpbWVvdXQgaWYgaW50ZXJydXB0IG5ldmVyIGNvbWVzKS4KICAqLwogCitlbnVtIHsKKwlSRVNFVEdQSU9fRk9SQ0VfSElHSCwKKwlSRVNFVEdQSU9fRk9SQ0VfTE9XLAorCVJFU0VUR1BJT19OT1JNQUxfQUxURlVOQworfTsKKworLyoqCisgKiBzZXRfcmVzZXRncGlvX21vZGUgLSBjb21wdXRlcyBhbmQgc2V0cyB0aGUgQUM5N19SRVNFVCBncGlvIG1vZGUgb24gUFhBCisgKiBAbW9kZTogY2hvc2VuIGFjdGlvbgorICoKKyAqIEFzIHRoZSBQWEEyN3ggQ1BVcyBzdWZmZXIgZnJvbSBhIEFDOTcgYnVnLCBhIG1hbnVhbCBjb250cm9sIG9mIHRoZSByZXNldCBsaW5lCisgKiBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHByb3BlciB3b3JrIG9mIEFDOTcgcmVzZXQgbGluZS4gIFRoaXMgZnVuY3Rpb24KKyAqIGNvbXB1dGVzIHRoZSBjb3JyZWN0IGdwaW9fbW9kZSBmb3IgZnVydGhlciB1c2UgYnkgcmVzZXQgZnVuY3Rpb25zLCBhbmQKKyAqIGFwcGxpZWQgdGhlIGNoYW5nZSB0aHJvdWdoIHB4YV9ncGlvX21vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9yZXNldGdwaW9fbW9kZShpbnQgcmVzZXRncGlvX2FjdGlvbikKK3sKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAocmVzZXRfZ3BpbykKKwkJc3dpdGNoIChyZXNldGdwaW9fYWN0aW9uKSB7CisJCWNhc2UgUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DOgorCQkJaWYgKHJlc2V0X2dwaW8gPT0gMTEzKQorCQkJCW1vZGUgPSAxMTMgfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1c7CisJCQlpZiAocmVzZXRfZ3BpbyA9PSA5NSkKKwkJCQltb2RlID0gOTUgfCBHUElPX0FMVF9GTl8xX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9MT1c6CisJCQltb2RlID0gcmVzZXRfZ3BpbyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0xPVzsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9ISUdIOgorCQkJbW9kZSA9IHJlc2V0X2dwaW8gfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIOworCQkJYnJlYWs7CisJCX07CisKKwlpZiAobW9kZSkKKwkJcHhhX2dwaW9fbW9kZShtb2RlKTsKK30KKwogdW5zaWduZWQgc2hvcnQgcHhhMnh4X2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKQEAgLTEzNywxMCArMTc3LDEwIEBACiAKIAkvKiB3YXJtIHJlc2V0IGJyb2tlbiBvbiBCdWx2ZXJkZSwKIAkgICBzbyBtYW51YWxseSBrZWVwIEFDOTcgcmVzZXQgaGlnaCAqLwotCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19GT1JDRV9ISUdIKTsKIAl1ZGVsYXkoMTApOwogCUdDUiB8PSBHQ1JfV0FSTV9SU1Q7Ci0JcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJdWRlbGF5KDUwMCk7CiB9CiAKQEAgLTMwOCw4ICszNDgsOCBAQAogCQlweGFfZ3Bpb19tb2RlKEdQSU8yOV9TREFUQV9JTl9BQzk3X01EKTsKIAl9CiAJaWYgKGNwdV9pc19weGEyN3goKSkgewotCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwkJLyogVXNlIEdQSU8gMTEzIG9yIDk1IGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KKwkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJfQogCWNsa19lbmFibGUoYWM5N19jbGspOwogCXJldHVybiAwOwpAQCAtMzIwLDYgKzM2MCwyNyBAQAogaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19od19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBkYXRhKSB7CisJCXN3aXRjaCAocGRhdGEtPnJlc2V0X2dwaW8pIHsKKwkJY2FzZSA5NToKKwkJY2FzZSAxMTM6CisJCQlyZXNldF9ncGlvID0gcGRhdGEtPnJlc2V0X2dwaW87CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkludmFsaWQgcmVzZXQgR1BJTyAlZFxuIiwKKwkJCQlwZGF0YS0+cmVzZXRfZ3Bpbyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY3B1X2lzX3B4YTI3eCgpKQorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwl9CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwpAQCAtMzMwLDcgKzM5MSw3IEBACiAKIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7CiAJCS8qIFVzZSBHUElPIDExMyBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCi0JCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCQlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKIAkJYWM5N2NvbmZfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJBQzk3Q09ORkNMSyIpOwogCQlpZiAoSVNfRVJSKGFjOTdjb25mX2NsaykpIHsKIAkJCXJldCA9IFBUUl9FUlIoYWM5N2NvbmZfY2xrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggODVjZjU5MS4uN2VkMTAwYyAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTE3MywxMCArMTczLDkgQEAKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5N190ZW1wbGF0ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gLUVOT01FTTsKLQljYXJkID0gc25kX2NhcmRfbmV3KFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAotCQkJICAgIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAKIAljYXJkLT5kZXYgPSAmZGV2LT5kZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYyBiL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGNkNTFkLi4wMDAwMDAwCi0tLSBhL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTgzICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciBQaGlsaXBzIFVEQTEzNDFUUyBvbiBDb21wYXEgaVBBUSBIMzYwMCBzb3VuZGNhcmQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKiAKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyAgIFRvbWFzIEthc3BhcmVrICBpbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiBoMzYwMC11ZGExMzQxLmMgZnJvbSBPU1MKLSAqIDIwMDItMDMtMjAgICBUb21hcyBLYXNwYXJlayAgcGxheWJhY2sgb3ZlciBBTFNBIGlzIHdvcmtpbmcKLSAqIDIwMDItMDMtMjggICBUb21hcyBLYXNwYXJlayAgcGxheWJhY2sgb3ZlciBPU1MgZW11bGF0aW9uIGlzIHdvcmtpbmcKLSAqIDIwMDItMDMtMjkgICBUb21hcyBLYXNwYXJlayAgYmFzaWMgY2FwdHVyZSBpcyB3b3JraW5nIChuYXRpdmUgQUxTQSkKLSAqIDIwMDItMDMtMjkgICBUb21hcyBLYXNwYXJlayAgY2FwdHVyZSBpcyB3b3JraW5nIChPU1MgZW11bGF0aW9uKQotICogMjAwMi0wNC0wNCAgIFRvbWFzIEthc3BhcmVrICBiZXR0ZXIgcmF0ZXMgaGFuZGxpbmcgKGFsbG93IG5vbi1zdGFuZGFyZCByYXRlcykKLSAqIDIwMDMtMDItMTQgICBCcmlhbiBBdmVyeSAgICAgZml4ZWQgZnVsbCBkdXBsZXggbW9kZSwgb3RoZXIgdXBkYXRlcwotICogMjAwMy0wMi0yMCAgIFRvbWFzIEthc3BhcmVrICBtZXJnZWQgdXBkYXRlcyBieSBCcmlhbiAoZXhjZXB0IEhBTCkKLSAqIDIwMDMtMDQtMTkgICBKYXJvc2xhdiBLeXNlbGEgcmVjb2RlZCBETUEgc3R1ZmYgdG8gZm9sbG93IDIuNC4xOHJtazMtaGgyNCBrZXJuZWwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2luZyBzdXNwZW5kIGFuZCByZXN1bWUKLSAqIDIwMDMtMDQtMjggICBUb21hcyBLYXNwYXJlayAgdXBkYXRlZCB3b3JrIGJ5IEphcm9zbGF2IHRvIGNvbXBpbGUgaXQgdW5kZXIgMi41LnggYWdhaW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkIEhBTCBsYXllciAocGF0Y2hlcyBmcm9tIEJyaWFuKQotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogVG8gdW5kZXJzdGFuZCB3aGF0IEFsc2EgRHJpdmVycyBzaG91bGQgYmUgZG9pbmcgbG9vayBhdCAiV3JpdGluZyBhbiBBbHNhIERyaXZlciIgYnkgVGFrYXNoaSBJd2FpCi0qIGF2YWlsYWJsZSBpbiB0aGUgQWxzYSBkb2Mgc2VjdGlvbiBvbiB0aGUgd2Vic2l0ZQkJCi0qIAotKiBBIGZldyBub3RlcyB0byBtYWtlIHRoaW5ncyBjbGVhcmVyLiBUaGUgVURBMTM0MSBpcyBob29rZWQgdXAgdG8gU2VyaWFsIHBvcnQgNCBvbiB0aGUgU0ExMTAwLgotKiBXZSBhcmUgdXNpbmcgIFNTUCBtb2RlIHRvIHRhbGsgdG8gdGhlIFVEQTEzNDEuIFRoZSBVREExMzQxIGJpdCAmIHdvcmRzZWxlY3QgY2xvY2tzIGFyZSBnZW5lcmF0ZWQKLSogYnkgdGhpcyBVQVJULiBVbmZvcnR1bmF0ZWx5LCB0aGUgY2xvY2sgb25seSBydW5zIGlmIHRoZSB0cmFuc21pdCBidWZmZXIgaGFzIHNvbWV0aGluZyBpbiBpdC4KLSogU28sIGlmIHdlIGFyZSBqdXN0IHJlY29yZGluZywgd2UgZmVlZCB0aGUgdHJhbnNtaXQgRE1BIHN0cmVhbSBhIGJ1bmNoIG9mIDB4MDAwMCBzbyB0aGF0IHRoZQotKiB0cmFuc21pdCBidWZmZXIgaXMgZnVsbCBhbmQgdGhlIGNsb2NrIGtlZXBzIGdvaW5nLiBUaGUgemVyb2VzIGNvbWUgZnJvbSBGTFVTSF9CQVNFX1BIWVMgd2hpY2gKLSogaXMgYSBtZW0gbG9jIHRoYXQgYWx3YXlzIGRlY29kZXMgdG8gMCdzIHcvIG5vIG9mZiBjaGlwIGFjY2Vzcy4KLSoKLSogU29tZSBhbHNhIHRlcm1pbm9sb2d5OgotKglmcmFtZSA9PiBudW1fY2hhbm5lbHMgKiBzYW1wbGVfc2l6ZSAgZS5nIHN0ZXJlbyAxNiBiaXQgaXMgMiAqIDE2ID0gMzIgYnl0ZXMKLSoJcGVyaW9kID0+IHRoZSBsZWFzdCBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBlLmcuIHdlIGhhdmUgYSAxMDI0IGJ5dGUKLSogICAgICAgICAgICAgYnVmZmVyIGFuZCA0IHBlcmlvZHMgaW4gdGhlIHJ1bnRpbWUgc3RydWN0dXJlIHRoaXMgbWVhbnMgd2UnbGwgZ2V0IGFuIGludCBldmVyeSAyNTYKLSogICAgICAgICAgICAgYnl0ZXMgb3IgNCB0aW1lcyBwZXIgYnVmZmVyLgotKiAgICAgICAgICAgICBBIG51bWJlciBvZiB0aGUgc2l6ZXMgYXJlIGluIGZyYW1lcyByYXRoZXIgdGhhbiBieXRlcywgdXNlIGZyYW1lc190b19ieXRlcyBhbmQKLSogICAgICAgICAgICAgYnl0ZXNfdG9fZnJhbWVzIHRvIGNvbnZlcnQuICBUaGUgZWFzaWVzdCB3YXkgdG8gdGVsbCB0aGUgdW5pdHMgaXMgdG8gbG9vayBhdCB0aGUKLSogICAgICAgICAgICAgdHlwZSBpLmUuIHJ1bnRpbWUtPiBidWZmZXJfc2l6ZSBpcyBpbiBmcmFtZXMgYW5kIGl0cyB0eXBlIGlzIHNuZF9wY21fdWZyYW1lc190Ci0qICAgICAgICAgICAgIAotKglOb3RlcyBhYm91dCB0aGUgcG9pbnRlciBmeG46Ci0qCVRoZSBwb2ludGVyIGZ4biBuZWVkcyB0byByZXR1cm4gdGhlIG9mZnNldCBpbnRvIHRoZSBkbWEgYnVmZmVyIGluIGZyYW1lcy4KLSoJSW50ZXJydXB0cyBtdXN0IGJlIGJsb2NrZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGRtYV9nZXRfcG9zIGZ4biB0byBhdm9pZCByYWNlIHdpdGggaW50ZXJydXB0cy4KLSoKLSoJTm90ZXMgYWJvdXQgcGF1c2UvcmVzdW1lCi0qCUltcGxlbWVudGluZyB0aGlzIHdvdWxkIGJlIGNvbXBsaWNhdGVkIHNvIGl0J3Mgc2tpcHBlZC4gIFRoZSBwcm9ibGVtIGNhc2UgaXM6Ci0qCUEgZnVsbCBkdXBsZXggY29ubmVjdGlvbiBpcyBnb2luZywgdGhlbiBwbGF5IGlzIHBhdXNlZC4gQXQgdGhpcyBwb2ludCB5b3UgbmVlZCB0byBzdGFydCB4bWl0dGluZwotKgkwJ3MgdG8ga2VlcCB0aGUgcmVjb3JkIGFjdGl2ZSB3aGljaCBtZWFucyB5b3UgY2FudCBqdXN0IGZyZWV6ZSB0aGUgZG1hIGFuZCByZXN1bWUgaXQgbGF0ZXIgeW91J2QKLSoJbmVlZCB0bwlzYXZlIG9mZiB0aGUgZG1hIGluZm8sIGFuZCByZXN0b3JlIGl0IHByb3Blcmx5IG9uIGEgcmVzdW1lLiAgWWVhY2ghCi0qCi0qCU5vdGVzIGFib3V0IHRyYW5zZmVyIG1ldGhvZHM6Ci0qCVRoZSBhc3luYyB3cml0ZSBjYWxscyBmYWlsLiAgSSBwcm9iYWJseSBuZWVkIHRvIGltcGxlbWVudCBzb21ldGhpbmcgZWxzZSB0byBzdXBwb3J0IHRoZW0/Ci0qIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaWZkZWYgQ09ORklHX1BNCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaDM2MDAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9sMy9sMy5oPgotCi0jdW5kZWYgREVCVUdfTU9ERQotI3VuZGVmIERFQlVHX0ZVTkNUSU9OX05BTUVTCi0jaW5jbHVkZSA8c291bmQvdWRhMTM0MS5oPgotCi0vKgotICogRklYTUU6IElzIHRoaXMgZW5vdWdoIGFzIGF1dG9kZXRlY3Rpb24gb2YgMi40Llgtcm1rWS1oaFoga2VybmVscz8KLSAqIFdlIHVzZSBETUEgc3R1ZmYgZnJvbSAyLjQuMTgtcm1rMy1oaDI0IGhlcmUgdG8gYmUgYWJsZSB0byBjb21waWxlIHRoaXMKLSAqIG1vZHVsZSBmb3IgRmFtaWxpYXIgMC42LjEKLSAqLwotCi0vKiB7e3sgVHlwZSBkZWZpbml0aW9ucyAqLwotCi1NT0RVTEVfQVVUSE9SKCJUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQTExMDAvU0ExMTExICsgVURBMTM0MVRTIGRyaXZlciBmb3IgQUxTQSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VURBMTM0MSxpUEFRIEgzNjAwIFVEQTEzNDFUU319Iik7Ci0KLXN0YXRpYyBjaGFyICppZDsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotCi1tb2R1bGVfcGFyYW0oaWQsIGNoYXJwLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIFNBMTEwMC9TQTExMTEgKyBVREExMzQxVFMgc291bmRjYXJkLiIpOwotCi1zdHJ1Y3QgYXVkaW9fc3RyZWFtIHsKLQljaGFyICppZDsJCS8qIGlkZW50aWZpY2F0aW9uIHN0cmluZyAqLwotCWludCBzdHJlYW1faWQ7CQkvKiBudW1lcmljIGlkZW50aWZpY2F0aW9uICovCQotCWRtYV9kZXZpY2VfdCBkbWFfZGV2OwkvKiBkZXZpY2UgaWRlbnRpZmllciBmb3IgRE1BICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCWRtYWNoX3QgZG1hY2g7CQkvKiBkbWEgY2hhbm5lbCBpZGVudGlmaWNhdGlvbiAqLwotI2Vsc2UKLQlkbWFfcmVnc190ICpkbWFfcmVnczsJLyogcG9pbnRzIHRvIG91ciBETUEgcmVnaXN0ZXJzICovCi0jZW5kaWYKLQl1bnNpZ25lZCBpbnQgYWN0aXZlOjE7CS8qIHdlIGFyZSB1c2luZyB0aGlzIHN0cmVhbSBmb3IgdHJhbnNmZXIgbm93ICovCi0JaW50IHBlcmlvZDsJCS8qIGN1cnJlbnQgdHJhbnNmZXIgcGVyaW9kICovCi0JaW50IHBlcmlvZHM7CQkvKiBjdXJyZW50IGNvdW50IG9mIHBlcmlvZHMgcmVnaXN0ZXJkIGluIHRoZSBETUEgZW5naW5lICovCi0JaW50IHR4X3NwaW47CQkvKiBhcmUgd2UgcmVjb2RpbmcgLSBmbGFnIHVzZWQgdG8gZG8gRE1BIHRyYW5zLiBmb3Igc3luYyAqLwotCXVuc2lnbmVkIGludCBvbGRfb2Zmc2V0OwotCXNwaW5sb2NrX3QgZG1hX2xvY2s7CS8qIGZvciBsb2NraW5nIGluIERNQSBvcGVyYXRpb25zIChzZWUgZG1hLXNhMTEwMC5jIGluIHRoZSBrZXJuZWwpICovCi0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdHJlYW07Ci19OwotCi1zdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxOwotCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JbG9uZyBzYW1wbGVyYXRlOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gc1syXTsJLyogcGxheWJhY2sgJiBjYXB0dXJlICovCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPSB7Ci0JODAwMCwgIDEwNjY2LCAxMDk4NSwgMTQ2NDcsCi0JMTYwMDAsIDIxOTcwLCAyMjA1MCwgMjQwMDAsCi0JMjk0MDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGh3X2NvbnN0cmFpbnRzX3JhdGVzID0gewotCS5jb3VudAk9IEFSUkFZX1NJWkUocmF0ZXMpLAotCS5saXN0CT0gcmF0ZXMsCi0JLm1hc2sJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQotLyogfX19ICovCi0KLS8qIHt7eyBDbG9jayBhbmQgc2FtcGxlIHJhdGUgc3R1ZmYgKi8KLQotLyoKLSAqIFN0b3AtZ2FwIHNvbHV0aW9uIHVudGlsIHJlc3Qgb2YgaGgub3JnIEhBTCBzdHVmZiBpcyBtZXJnZWQuCi0gKi8KLSNkZWZpbmUgR1BJT19IMzYwMF9DTEtfU0VUMAkJR1BJT19HUElPICgxMikKLSNkZWZpbmUgR1BJT19IMzYwMF9DTEtfU0VUMQkJR1BJT19HUElPICgxMykKLQotI2lmZGVmIENPTkZJR19TQTExMDBfSDNYWFgKLSNkZWZpbmUJY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKHgpCWNscl9oMzYwMF9lZ3Bpbyh4KQotI2RlZmluZSBzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oeCkJc2V0X2gzNjAwX2VncGlvKHgpCi0jZWxzZQotI2Vycm9yIFRoaXMgZHJpdmVyIGNvdWxkIHNlcnZlIEgzeDAwIGhhbmRoZWxkcyBvbmx5IQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX3NldF9hdWRpb19jbG9jayhsb25nIHZhbCkKLXsKLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMjQwMDA6IGNhc2UgMzIwMDA6IGNhc2UgNDgwMDA6CS8qIDAwOiAxMi4yODggTUh6ICovCi0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQwIHwgR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDIyMDUwOiBjYXNlIDI5NDAwOiBjYXNlIDQ0MTAwOgkvKiAwMTogMTEuMjg5NiBNSHogKi8KLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDA7Ci0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgODAwMDogY2FzZSAxMDY2NjogY2FzZSAxNjAwMDoJLyogMTA6IDQuMDk2IE1IeiAqLwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMDsKLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAxMDk4NTogY2FzZSAxNDY0NzogY2FzZSAyMTk3MDoJLyogMTE6IDUuNjI0NSBNSHogKi8KLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDAgfCBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEsIGxvbmcgcmF0ZSkKLXsKLQlpbnQgY2xrX2RpdiA9IDA7Ci0JaW50IGNsaz0wOwotCi0JLyogV2UgZG9uJ3Qgd2FudCB0byBtZXNzIHdpdGggY2xvY2tzIHdoZW4gZnJhbWVzIGFyZSBpbiBmbGlnaHQgKi8KLQlTZXI0U1NDUjAgJj0gflNTQ1IwX1NTRTsKLQkvKiB3YWl0IGZvciBhbnkgZnJhbWUgdG8gY29tcGxldGUgKi8KLQl1ZGVsYXkoMTI1KTsKLQotCS8qCi0JICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNsb2NrIHNvdXJjZXM6Ci0JICogNC4wOTYgTUh6LCA1LjYyNDUgTUh6LCAxMS4yODk2IE1IeiwgMTIuMjg4IE1IegotCSAqIFRob3NlIGNhbiBiZSBkaXZpZGVkIGVpdGhlciBieSAyNTYsIDM4NCBvciA1MTIuCi0JICogVGhpcyBtYWtlcyB1cCAxMiBjb21iaW5hdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgc2FtcGxlcmF0ZXMuLi4KLQkgKi8KLQlpZiAocmF0ZSA+PSA0ODAwMCkKLQkJcmF0ZSA9IDQ4MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gNDQxMDApCi0JCXJhdGUgPSA0NDEwMDsKLQllbHNlIGlmIChyYXRlID49IDMyMDAwKQotCQlyYXRlID0gMzIwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyOTQwMCkKLQkJcmF0ZSA9IDI5NDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjQwMDApCi0JCXJhdGUgPSAyNDAwMDsKLQllbHNlIGlmIChyYXRlID49IDIyMDUwKQotCQlyYXRlID0gMjIwNTA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyMTk3MCkKLQkJcmF0ZSA9IDIxOTcwOwotCWVsc2UgaWYgKHJhdGUgPj0gMTYwMDApCi0JCXJhdGUgPSAxNjAwMDsKLQllbHNlIGlmIChyYXRlID49IDE0NjQ3KQotCQlyYXRlID0gMTQ2NDc7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxMDk4NSkKLQkJcmF0ZSA9IDEwOTg1OwotCWVsc2UgaWYgKHJhdGUgPj0gMTA2NjYpCi0JCXJhdGUgPSAxMDY2NjsKLQllbHNlCi0JCXJhdGUgPSA4MDAwOwotCi0JLyogU2V0IHRoZSBleHRlcm5hbCBjbG9jayBnZW5lcmF0b3IgKi8KLQkKLQlzYTExeHhfdWRhMTM0MV9zZXRfYXVkaW9fY2xvY2socmF0ZSk7Ci0KLQkvKiBTZWxlY3QgdGhlIGNsb2NrIGRpdmlzb3IgKi8KLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxMDk4NToKLQljYXNlIDIyMDUwOgotCWNhc2UgMjQwMDA6Ci0JCWNsayA9IEY1MTI7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoMTYpOwotCQlicmVhazsKLQljYXNlIDE2MDAwOgotCWNhc2UgMjE5NzA6Ci0JY2FzZSA0NDEwMDoKLQljYXNlIDQ4MDAwOgotCQljbGsgPSBGMjU2OwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDgpOwotCQlicmVhazsKLQljYXNlIDEwNjY2OgotCWNhc2UgMTQ2NDc6Ci0JY2FzZSAyOTQwMDoKLQljYXNlIDMyMDAwOgotCQljbGsgPSBGMzg0OwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDEyKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogRk1UIHNldHRpbmcgc2hvdWxkIGJlIG1vdmVkIGF3YXkgd2hlbiBvdGhlciBGTVRzIGFyZSBhZGRlZCAoRklYTUUpICovCi0JbDNfY29tbWFuZChzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSwgQ01EX0ZPUk1BVCwgKHZvaWQgKilMU0IxNik7Ci0JCi0JbDNfY29tbWFuZChzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSwgQ01EX0ZTLCAodm9pZCAqKWNsayk7ICAgICAgICAKLQlTZXI0U1NDUjAgPSAoU2VyNFNTQ1IwICYgfjB4ZmYwMCkgKyBjbGtfZGl2ICsgU1NDUjBfU1NFOwotCXNhMTF4eF91ZGExMzQxLT5zYW1wbGVyYXRlID0gcmF0ZTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBIVyBpbml0IGFuZCBzaHV0ZG93biAqLwotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFNldHVwIERNQSBzdHVmZiAqLwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmlkID0gIlVEQTEzNDEgb3V0IjsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5zdHJlYW1faWQgPSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9kZXYgPSBETUFfU2VyNFNTUFdyOwotCi0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5pZCA9ICJVREExMzQxIGluIjsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN0cmVhbV9pZCA9IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRTsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9kZXYgPSBETUFfU2VyNFNTUFJkOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVURBMTM0MSBpbnRlcm5hbCBzdGF0ZSAqLwotICAgICAgIAotCS8qIFNldHVwIHRoZSB1YXJ0cyAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlHQUZSIHw9IChHUElPX1NTUF9DTEspOwotCUdQRFIgJj0gfihHUElPX1NTUF9DTEspOwotCVNlcjRTU0NSMCA9IDA7Ci0JU2VyNFNTQ1IwID0gU1NDUjBfRGF0YVNpemUoMTYpICsgU1NDUjBfVEkgKyBTU0NSMF9TZXJDbGtEaXYoOCk7Ci0JU2VyNFNTQ1IxID0gU1NDUjFfU0Nsa0lhY3RMICsgU1NDUjFfU0NsazFQICsgU1NDUjFfRXh0Q2xrOwotCVNlcjRTU0NSMCB8PSBTU0NSMF9TU0U7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogRW5hYmxlIHRoZSBhdWRpbyBwb3dlciAqLwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19BVURJT19PTik7Ci0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotIAotCS8qIFdhaXQgZm9yIHRoZSBVREExMzQxIHRvIHdha2UgdXAgKi8KLQltZGVsYXkoMSk7IC8vRklYTUUgLSB3YXMgcmVtb3ZlZCBieSBQZXJleCAtIFdoeT8KLQotCS8qIEluaXRpYWxpemUgdGhlIFVEQTEzNDEgaW50ZXJuYWwgc3RhdGUgKi8KLQlsM19vcGVuKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxKTsKLQkKLQkvKiBleHRlcm5hbCBjbG9jayBjb25maWd1cmF0aW9uIChhZnRlciBsM19vcGVuIC0gcmVncyBtdXN0IGJlIGluaXRpYWxpemVkICovCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoc2ExMXh4X3VkYTEzNDEsIHNhMTF4eF91ZGExMzQxLT5zYW1wbGVyYXRlKTsKLQotCS8qIFdhaXQgZm9yIHRoZSBVREExMzQxIHRvIHdha2UgdXAgKi8KLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCW1kZWxheSgxKTsJCi0KLQkvKiBtYWtlIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscyB1bnN3YXBwZWQgKGZsaXAgdGhlIFdTIGxhdGNoKSAqLwotCVNlcjRTU0RSID0gMDsKLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLX0KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfYXVkaW9fc2h1dGRvd24oc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSkKLXsKLQkvKiBtdXRlIG9uICovCi0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotCQotCS8qIGRpc2FibGUgdGhlIGF1ZGlvIHBvd2VyIGFuZCBhbGwgc2lnbmFscyBsZWFkaW5nIHRvIHRoZSBhdWRpbyBjaGlwICovCi0JbDNfY2xvc2Uoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEpOwotCVNlcjRTU0NSMCA9IDA7Ci0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQotCS8qIHBvd2VyIG9mZiBhbmQgbXV0ZSBvZmYgKi8KLQkvKiBGSVhNRSAtIGlzIG11dGluZyBvZmYgbmVjZXNhcnk/Pz8gKi8KLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0FVRElPX09OKTsKLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgRE1BIHN0YWZmICovCi0KLS8qCi0gKiB0aGVzZSBhcmUgdGhlIGFkZHJlc3MgYW5kIHNpemVzIHVzZWQgdG8gZmlsbCB0aGUgeG1pdCBidWZmZXIKLSAqIHNvIHdlIGNhbiBnZXQgYSBjbG9jayBpbiByZWNvcmQgb25seSBtb2RlCi0gKi8KLSNkZWZpbmUgRk9SQ0VfQ0xPQ0tfQUREUgkJKGRtYV9hZGRyX3QpRkxVU0hfQkFTRV9QSFlTCi0jZGVmaW5lIEZPUkNFX0NMT0NLX1NJWkUJCTQwOTYgLy8gd2FzIDIwNDgKLQotLy8gRklYTUUgV2h5IHRoaXMgdmFsdWUgZXhhY3RseSAtIHdyb3RlIGNvbW1lbnQKLSNkZWZpbmUgRE1BX0JVRl9TSVpFCTgxNzYJLyogPD0gTUFYX0RNQV9TSVpFIGZyb20gYXNtL2FyY2gtc2ExMTAwL2RtYS5oICovCi0KLSNpZmRlZiBISF9WRVJTSU9OCi0KLXN0YXRpYyBpbnQgYXVkaW9fZG1hX3JlcXVlc3Qoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICosIGludCkpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNhMTEwMF9yZXF1ZXN0X2RtYSgmcy0+ZG1hY2gsIHMtPmlkLCBzLT5kbWFfZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIGF1ZGlvIGRtYSAweCV4XG4iLCBzLT5kbWFfZGV2KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0Jc2ExMTAwX2RtYV9zZXRfY2FsbGJhY2socy0+ZG1hY2gsIGNhbGxiYWNrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF1ZGlvX2RtYV9mcmVlKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc2ExMTAwX2ZyZWVfZG1hKHMtPmRtYWNoKTsKLQlzLT5kbWFjaCA9IC0xOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW50IGF1ZGlvX2RtYV9yZXF1ZXN0KHN0cnVjdCBhdWRpb19zdHJlYW0gKnMsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2ExMTAwX3JlcXVlc3RfZG1hKHMtPmRtYV9kZXYsIHMtPmlkLCBjYWxsYmFjaywgcywgJnMtPmRtYV9yZWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBhdWRpbyBkbWEgMHgleFxuIiwgcy0+ZG1hX2Rldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2ZyZWUoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzYTExMDBfZnJlZV9kbWEocy0+ZG1hX3JlZ3MpOwotCXMtPmRtYV9yZWdzID0gMDsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB1X2ludCBhdWRpb19nZXRfZG1hX3BvcyhzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcy0+c3RyZWFtOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWRtYV9hZGRyX3QgYWRkcjsKLQkKLQkvLyB0aGlzIG11c3QgYmUgY2FsbGVkIHcvIGludGVycnVwdHMgbG9ja2VkIG91dCBzZWUgZG1hLXNhMTEwMC5jIGluIHRoZSBrZXJuZWwKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLSNpZmRlZiBISF9WRVJTSU9OCQotCXNhMTEwMF9kbWFfZ2V0X2N1cnJlbnQocy0+ZG1hY2gsIE5VTEwsICZhZGRyKTsKLSNlbHNlCi0JYWRkciA9IHNhMTEwMF9nZXRfZG1hX3BvcygocyktPmRtYV9yZWdzKTsKLSNlbmRpZgotCW9mZnNldCA9IGFkZHIgLSBydW50aW1lLT5kbWFfYWRkcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotCQotCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLG9mZnNldCk7Ci0JaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJb2Zmc2V0ID0gMDsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLS8qCi0gKiB0aGlzIHN0b3BzIHRoZSBkbWEgYW5kIGNsZWFycyB0aGUgZG1hIHB0cnMKLSAqLwotc3RhdGljIHZvaWQgYXVkaW9fc3RvcF9kbWEoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7CQotCXMtPmFjdGl2ZSA9IDA7Ci0Jcy0+cGVyaW9kID0gMDsKLQkvKiB0aGlzIHN0b3BzIHRoZSBkbWEgY2hhbm5lbCBhbmQgY2xlYXJzIHRoZSBidWZmZXIgcHRycyAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCXNhMTEwMF9jbGVhcl9kbWEocy0+ZG1hX3JlZ3MpOwkKLSNlbmRpZgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1ZGlvX3Byb2Nlc3NfZG1hKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzLT5zdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CQkKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQ7Ci0gICAgICAgICAgICAgICAgCi0JLyogd2UgYXJlIHJlcXVlc3RlZCB0byBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiBETUEgdHJhbnNmZXIgKi8KLQlpZiAocy0+dHhfc3BpbikgewotCQlpZiAoc25kX0JVR19PTihzLT5zdHJlYW1faWQgIT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykpCi0JCQlyZXR1cm47Ci0JCS8qIGZpbGwgdGhlIHhtaXQgZG1hIGJ1ZmZlcnMgYW5kIHJldHVybiAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQkJc2ExMTAwX2RtYV9zZXRfc3BpbihzLT5kbWFjaCwgRk9SQ0VfQ0xPQ0tfQUREUiwgRk9SQ0VfQ0xPQ0tfU0laRSk7Ci0jZWxzZQotCQl3aGlsZSAoMSkgewotCQkJcmV0ID0gc2ExMTAwX3N0YXJ0X2RtYShzLT5kbWFfcmVncywgRk9SQ0VfQ0xPQ0tfQUREUiwgRk9SQ0VfQ0xPQ0tfU0laRSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybjsgICAKLQkJfQotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBtdXN0IGJlIHNldCBoZXJlIC0gb25seSB2YWxpZCBmb3IgcnVubmluZyBzdHJlYW1zLCBub3QgZm9yIGZvcmNlZF9jbG9jayBkbWEgZmlsbHMgICovCi0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl3aGlsZSAocy0+YWN0aXZlICYmIHMtPnBlcmlvZHMgPCBydW50aW1lLT5wZXJpb2RzKSB7Ci0JCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJaWYgKHMtPm9sZF9vZmZzZXQpIHsKLQkJCS8qIGEgbGl0dGxlIHRyaWNrLCB3ZSBuZWVkIHJlc3VtZSBmcm9tIG9sZCBwb3NpdGlvbiAqLwotCQkJb2Zmc2V0ID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHMtPm9sZF9vZmZzZXQgLSAxKTsKLQkJCXMtPm9sZF9vZmZzZXQgPSAwOwotCQkJcy0+cGVyaW9kcyA9IDA7Ci0JCQlzLT5wZXJpb2QgPSBvZmZzZXQgLyBkbWFfc2l6ZTsKLQkJCW9mZnNldCAlPSBkbWFfc2l6ZTsKLQkJCWRtYV9zaXplID0gZG1hX3NpemUgLSBvZmZzZXQ7Ci0JCQlpZiAoIWRtYV9zaXplKQotCQkJCWNvbnRpbnVlOwkJLyogc3BlY2lhbCBjYXNlICovCi0JCX0gZWxzZSB7Ci0JCQlvZmZzZXQgPSBkbWFfc2l6ZSAqIHMtPnBlcmlvZDsKLQkJCXNuZF9CVUdfT04oZG1hX3NpemUgPiBETUFfQlVGX1NJWkUpOwotCQl9Ci0jaWZkZWYgSEhfVkVSU0lPTgotCQlyZXQgPSBzYTExMDBfZG1hX3F1ZXVlX2J1ZmZlcihzLT5kbWFjaCwgcywgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGRtYV9zaXplKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybjsgLy9GSVhNRQotI2Vsc2UKLQkJcmV0ID0gc2ExMTAwX3N0YXJ0X2RtYSgocyktPmRtYV9yZWdzLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgZG1hX3NpemUpOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImF1ZGlvX3Byb2Nlc3NfZG1hOiBjYW5ub3QgcXVldWUgRE1BIGJ1ZmZlciAoJWkpXG4iLCByZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQotCQlzLT5wZXJpb2QrKzsKLQkJcy0+cGVyaW9kICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0JCXMtPnBlcmlvZHMrKzsKLQl9Ci19Ci0KLSNpZmRlZiBISF9WRVJTSU9OCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfY2FsbGJhY2sodm9pZCAqZGF0YSwgaW50IHNpemUpCi0jZWxzZQotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2NhbGxiYWNrKHZvaWQgKmRhdGEpCi0jZW5kaWYKLXsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gZGF0YTsKLSAgICAgICAgCi0JLyogCi0JICogSWYgd2UgYXJlIGdldHRpbmcgYSBjYWxsYmFjayBmb3IgYW4gYWN0aXZlIHN0cmVhbSB0aGVuIHdlIGluZm9ybQotCSAqIHRoZSBQQ00gbWlkZGxlIGxheWVyIHdlJ3ZlIGZpbmlzaGVkIGEgcGVyaW9kCi0JICovCi0gCWlmIChzLT5hY3RpdmUpCi0JCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocy0+c3RyZWFtKTsKLQotCXNwaW5fbG9jaygmcy0+ZG1hX2xvY2spOwotCWlmICghcy0+dHhfc3BpbiAmJiBzLT5wZXJpb2RzID4gMCkKLQkJcy0+cGVyaW9kcy0tOwotCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCXNwaW5fdW5sb2NrKCZzLT5kbWFfbG9jayk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgUENNIHNldHRpbmcgKi8KLQotLyoge3t7IHRyaWdnZXIgJiB0aW1lciAqLwotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlpbnQgc3RyZWFtX2lkID0gc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW07Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9ICZjaGlwLT5zW3N0cmVhbV9pZF07Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqczEgPSAmY2hpcC0+c1tzdHJlYW1faWQgXiAxXTsKLQlpbnQgZXJyID0gMDsKLQotCS8qIG5vdGUgbG9jYWwgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBkaXNhYmxlZCBpbiB0aGUgbWlkbGV2ZWwgY29kZSAqLwotCXNwaW5fbG9jaygmcy0+ZG1hX2xvY2spOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJLyogbm93IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgcmVjb3JkIG9ubHkgc3RyZWFtIGhhcyBhIGNsb2NrICovCi0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQkvKiB3ZSBuZWVkIHRvIGZvcmNlIGZpbGwgdGhlIHhtaXQgRE1BIHdpdGggemVyb3MgKi8KLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotCQkvKiB0aGlzIGNhc2UgaXMgd2hlbiB5b3Ugd2VyZSByZWNvcmRpbmcgdGhlbiB5b3UgdHVybiBvbiBhCi0JCSAqIHBsYXliYWNrIHN0cmVhbSBzbyB3ZSBzdG9wIChhbHNvIGNsZWFycyBpdCkgdGhlIGRtYSBmaXJzdCwKLQkJICogY2xlYXIgdGhlIHN5bmMgZmxhZyBhbmQgdGhlbiB3ZSBsZXQgaXQgdHVybmVkIG9uCi0JCSAqLwkJCi0JCWVsc2UgewotIAkJCXMtPnR4X3NwaW4gPSAwOwotIAkJfQotCi0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc3RhcnR1cCAqLwotCQlzLT5hY3RpdmUgPSAxOwotCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHNodXRkb3duICovCi0JCWF1ZGlvX3N0b3BfZG1hKHMpOwotCQkKLQkJLyoKLQkJICogbm93IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgcmVjb3JkIG9ubHkgc3RyZWFtIGhhcyBhIGNsb2NrCi0JCSAqIHNvIGlmIHdlJ3JlIHN0b3BwaW5nIGEgcGxheWJhY2sgd2l0aCBhbiBhY3RpdmUgY2FwdHVyZQotCQkgKiB3ZSBuZWVkIHRvIHR1cm4gdGhlIDAgZmlsbCBkbWEgb24gZm9yIHRoZSB4bWl0IHNpZGUKLQkJICovCi0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJiBzMS0+YWN0aXZlKSB7Ci0JCQkvKiB3ZSBuZWVkIHRvIGZvcmNlIGZpbGwgdGhlIHhtaXQgRE1BIHdpdGggemVyb3MgKi8KLQkJCXMtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCX0KLQkJLyoKLQkJICogd2Uga2lsbGVkIGEgY2FwdHVyZSBvbmx5IHN0cmVhbSwgc28gd2Ugc2hvdWxkIGFsc28ga2lsbAotCQkgKiB0aGUgemVybyBmaWxsIHRyYW5zbWl0Ci0JCSAqLwotCQllbHNlIHsKLQkJCWlmIChzMS0+dHhfc3BpbikgewotCQkJCXMxLT50eF9zcGluID0gMDsKLQkJCQlhdWRpb19zdG9wX2RtYShzMSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQkJcy0+YWN0aXZlID0gMDsKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9zdG9wKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQotCQlzLT5vbGRfb2Zmc2V0ID0gYXVkaW9fZ2V0X2RtYV9wb3MocykgKyAxOwotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkKLQkJcy0+cGVyaW9kcyA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCQlzLT5hY3RpdmUgPSAxOwotCQlzLT50eF9zcGluID0gMDsKLQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3N0b3Aocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgotCQlzLT5hY3RpdmUgPSAwOwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJCWlmIChzMS0+YWN0aXZlKSB7Ci0JCQkJcy0+dHhfc3BpbiA9IDE7Ci0JCQkJcy0+b2xkX29mZnNldCA9IGF1ZGlvX2dldF9kbWFfcG9zKHMpICsgMTsKLSNpZmRlZiBISF9WRVJTSU9OCQkJCQotCQkJCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0JCQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCQkKLQkJCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzMS0+dHhfc3BpbikgewotCQkJCXMxLT50eF9zcGluID0gMDsKLSNpZmRlZiBISF9WRVJTSU9OCQkJCQotCQkJCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMxLT5kbWFjaCk7Ci0jZWxzZQotCQkJCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQkJCi0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlzLT5hY3RpdmUgPSAxOwotCQlpZiAocy0+b2xkX29mZnNldCkgewotCQkJcy0+dHhfc3BpbiA9IDA7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9yZXN1bWUocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJnMtPmRtYV9sb2NrKTsJCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gJmNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dOwotICAgICAgICAKLQkvKiBzZXQgcmVxdWVzdGVkIHNhbXBsZXJhdGUgKi8KLQlzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShjaGlwLCBydW50aW1lLT5yYXRlKTsKLQotCS8qIHNldCByZXF1ZXN0ZCBmb3JtYXQgd2hlbiBhdmFpbGFibGUgKi8KLQkvKiBzZXQgRk1UIGhlcmUgISEhIEZJWE1FICovCi0KLQlzLT5wZXJpb2QgPSAwOwotCXMtPnBlcmlvZHMgPSAwOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlyZXR1cm4gYXVkaW9fZ2V0X2RtYV9wb3MoJmNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dKTsKLX0KLQotLyogfX19ICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZSA9Ci17Ci0JLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSksCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV9LTk9UKSwKLQkucmF0ZV9taW4JCT0gODAwMCwKLQkucmF0ZV9tYXgJCT0gNDgwMDAsCi0JLmNoYW5uZWxzX21pbgkJPSAyLAotCS5jaGFubmVsc19tYXgJCT0gMiwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDY0KjEwMjQsCi0JLnBlcmlvZF9ieXRlc19taW4JPSA2NCwKLQkucGVyaW9kX2J5dGVzX21heAk9IERNQV9CVUZfU0laRSwKLQkucGVyaW9kc19taW4JCT0gMiwKLQkucGVyaW9kc19tYXgJCT0gMjU1LAotCS5maWZvX3NpemUJCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2sgPQotewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAotCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFX0tOT1QpLAotCS5yYXRlX21pbgkJPSA4MDAwLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkuY2hhbm5lbHNfbWluCQk9IDIsCi0JLmNoYW5uZWxzX21heAkJPSAyLAotCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQqMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gRE1BX0JVRl9TSVpFLAotCS5wZXJpb2RzX21pbgkJPSAyLAotCS5wZXJpb2RzX21heAkJPSAyNTUsCi0JLmZpZm9fc2l6ZQkJPSAwLAotfTsKLQotc3RhdGljIGludCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCWludCBzdHJlYW1faWQgPSBzdWJzdHJlYW0tPnBzdHItPnN0cmVhbTsKLQlpbnQgZXJyOwotCi0JY2hpcC0+c1tzdHJlYW1faWRdLnN0cmVhbSA9IHN1YnN0cmVhbTsKLQotCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcnVudGltZS0+aHcgPSBzbmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2s7Ci0JZWxzZQotCQlydW50aW1lLT5odyA9IHNuZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlOwotCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmh3X2NvbnN0cmFpbnRzX3JhdGVzKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQljaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXS5zdHJlYW0gPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0vKiB7e3sgSFcgcGFyYW1zICYgZnJlZSAqLwotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQotewotICAgICAgICAKLQlyZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotfQotCi0vKiB9fX0gKi8KLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4JCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4sCi0JLmNsb3NlCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZSwKLQkuaW9jdGwJCQk9IHNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMsCi0JLmh3X2ZyZWUJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlLAotCS5wcmVwYXJlCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlLAotCS50cmlnZ2VyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyLAotCS5wb2ludGVyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlX29wcyA9IHsKLQkub3BlbgkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbiwKLQkuY2xvc2UJCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlLAotCS5pb2N0bAkJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcywKLQkuaHdfZnJlZQkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUsCi0JLnByZXBhcmUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUsCi0JLnRyaWdnZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIsCi0JLnBvaW50ZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wY20oc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSwgaW50IGRldmljZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCWludCBlcnI7Ci0KLQlpZiAoKGVyciA9IHNuZF9wY21fbmV3KHNhMTF4eF91ZGExMzQxLT5jYXJkLCAiVURBMTM0MSBQQ00iLCBkZXZpY2UsIDEsIDEsICZwY20pKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQkvKgotCSAqIHRoaXMgc2V0cyB1cCBvdXIgaW5pdGlhbCBidWZmZXJzIGFuZCBzZXRzIHRoZSBkbWFfdHlwZSB0byBpc2EuCi0JICogaXNhIHdvcmtzIGJ1dCBJJ20gbm90IHN1cmUgd2h5IChvciBpZikgaXQncyB0aGUgcmlnaHQgY2hvaWNlCi0JICogdGhpcyBtYXkgYmUgdG9vIGxhcmdlLCB0cnlpbmcgaXQgZm9yIG5vdwotCSAqLwotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsIAotCQkJCQkgICAgICBzbmRfZG1hX2lzYV9kYXRhKCksCi0JCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOwotCi0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrX29wcyk7Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZV9vcHMpOwotCXBjbS0+cHJpdmF0ZV9kYXRhID0gc2ExMXh4X3VkYTEzNDE7Ci0JcGNtLT5pbmZvX2ZsYWdzID0gMDsKLQlzdHJjcHkocGNtLT5uYW1lLCAiVURBMTM0MSBQQ00iKTsKLQotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoc2ExMXh4X3VkYTEzNDEpOwotCi0JLyogc2V0dXAgRE1BIGNvbnRyb2xsZXIgKi8KLQlhdWRpb19kbWFfcmVxdWVzdCgmc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10sIGF1ZGlvX2RtYV9jYWxsYmFjayk7Ci0JYXVkaW9fZG1hX3JlcXVlc3QoJnNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0sIGF1ZGlvX2RtYV9jYWxsYmFjayk7Ci0KLQlzYTExeHhfdWRhMTM0MS0+cGNtID0gcGNtOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgbW9kdWxlIGluaXQgJiBleGl0ICovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIsCi0JCQkJICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cik7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKLSNpZmRlZiBISF9WRVJTSU9OCi0Jc2ExMTAwX2RtYV9zbGVlcChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYWNoKTsKLQlzYTExMDBfZG1hX3NsZWVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFjaCk7Ci0jZWxzZQotCS8vRklYTUUKLSNlbmRpZgotCWwzX2NvbW1hbmQoY2hpcC0+dWRhMTM0MSwgQ01EX1NVU1BFTkQsIE5VTEwpOwotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX3NodXRkb3duKGNoaXApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKTsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KGNoaXApOwotCWwzX2NvbW1hbmQoY2hpcC0+dWRhMTM0MSwgQ01EX1JFU1VNRSwgTlVMTCk7Ci0jaWZkZWYgSEhfVkVSU0lPTgkKLQlzYTExMDBfZG1hX3dha2V1cChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYWNoKTsKLQlzYTExMDBfZG1hX3dha2V1cChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hY2gpOwotI2Vsc2UKLQkvL0ZJWE1FCi0jZW5kaWYKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09NRklHX1BNICovCi0KLXZvaWQgc25kX3NhMTF4eF91ZGExMzQxX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCWF1ZGlvX2RtYV9mcmVlKCZjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdKTsKLQlhdWRpb19kbWFfZnJlZSgmY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc2ExMXh4X3VkYTEzNDFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcDsKLQotCS8qIHJlZ2lzdGVyIHRoZSBzb3VuZGNhcmQgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnNbMF0uZG1hX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5zWzFdLmRtYV9sb2NrKTsKLQotCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYTExeHhfdWRhMTM0MV9mcmVlOwotCWNoaXAtPmNhcmQgPSBjYXJkOwotCWNoaXAtPnNhbXBsZXJhdGUgPSBBVURJT19SQVRFX0RFRkFVTFQ7Ci0KLQkvLyBtaXhlcgotCWlmICgoZXJyID0gc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoY2FyZCwgJmNoaXAtPnVkYTEzNDEpKSkKLQkJZ290byBub2RldjsKLQotCS8vIFBDTQotCWlmICgoZXJyID0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGNtKGNoaXAsIDApKSA8IDApCi0JCWdvdG8gbm9kZXY7Ci0gICAgICAgIAotCXN0cmNweShjYXJkLT5kcml2ZXIsICJVREExMzQxIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkgzNjAwIFVEQTEzNDFUUyIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJDb21wYXEgaVBBUSBIMzYwMCB3aXRoIFBoaWxpcHMgVURBMTM0MVRTIik7Ci0gICAgICAgIAotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldnB0ci0+ZGV2KTsKLQotCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpID09IDApIHsKLQkJcHJpbnRrKCBLRVJOX0lORk8gImlQQVEgYXVkaW8gc3VwcG9ydCBpbml0aWFsaXplZFxuIiApOwotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0gICAgICAgIAotIG5vZGV2OgotCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgc2ExMXh4X3VkYTEzNDFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgU0ExMVhYX1VEQTEzNDFfRFJJVkVSCSJzYTExeHhfdWRhMTM0MSIKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMXh4X3VkYTEzNDFfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzYTExeHhfdWRhMTM0MV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNhMTF4eF91ZGExMzQxX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfc2ExMXh4X3VkYTEzNDFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9yZXN1bWUsCi0jZW5kaWYKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBTQTExWFhfVURBMTM0MV9EUklWRVIsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNhMTF4eF91ZGExMzQxX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFtYWNoaW5lX2lzX2gzeHh4KCkpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTQTExWFhfVURBMTM0MV9EUklWRVIsIC0xLCBOVUxMLCAwKTsKLQlpZiAoIUlTX0VSUihkZXZpY2UpKSB7Ci0JCWlmIChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKQotCQkJcmV0dXJuIDA7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JfSBlbHNlCi0JCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2ExMXh4X3VkYTEzNDFfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNhMTF4eF91ZGExMzQxX2luaXQpOwotbW9kdWxlX2V4aXQoc2ExMXh4X3VkYTEzNDFfZXhpdCk7Ci0KLS8qIH19fSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9LY29uZmlnIGIvc291bmQvYXRtZWwvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIyOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACittZW51ICJBdG1lbCBkZXZpY2VzIChBVlIzMiBhbmQgQVQ5MSkiCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKKworY29uZmlnIFNORF9BVE1FTF9BQkRBQworCXRyaXN0YXRlICJBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykgZHJpdmVyIgorCXNlbGVjdCBTTkRfUENNCisJZGVwZW5kcyBvbiBEV19ETUFDICYmIEFWUjMyCisJaGVscAorCSAgQUxTQSBzb3VuZCBkcml2ZXIgZm9yIHRoZSBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykuCisKK2NvbmZpZyBTTkRfQVRNRUxfQUM5N0MKKwl0cmlzdGF0ZSAiQXRtZWwgQUM5NyBDb250cm9sbGVyIChBQzk3QykgZHJpdmVyIgorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJZGVwZW5kcyBvbiBEV19ETUFDICYmIEFWUjMyCisJaGVscAorCSAgQUxTQSBzb3VuZCBkcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3IGNvbnRyb2xsZXIuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL01ha2VmaWxlIGIvc291bmQvYXRtZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5ZGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorc25kLWF0bWVsLWFiZGFjLW9ianMJCTo9IGFiZGFjLm8KK3NuZC1hdG1lbC1hYzk3Yy1vYmpzCQk6PSBhYzk3Yy5vCisKK29iai0kKENPTkZJR19TTkRfQVRNRUxfQUJEQUMpCSs9IHNuZC1hdG1lbC1hYmRhYy5vCitvYmotJChDT05GSUdfU05EX0FUTUVMX0FDOTdDKQkrPSBzbmQtYXRtZWwtYWM5N2MubwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWJkYWMuYyBiL3NvdW5kL2F0bWVsL2FiZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiM2M3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FiZGFjLmMKQEAgLTAsMCArMSw2MDIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBvbi1jaGlwIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWJkYWMuaD4KKworLyogREFDIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgREFDX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQUNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIERBQ19JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgREFDX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBEQUNfSU5UX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIERBQ19JTlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgREFDX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxYworCisvKiBCaXRmaWVsZHMgaW4gQ1RSTCAqLworI2RlZmluZSBEQUNfU1dBUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgREFDX1NXQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREFDX0VOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIERBQ19FTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJpdGZpZWxkcyBpbiBJTlRfTUFTSy9JTlRfRU4vSU5UX0RJUy9JTlRfU1RBVFVTL0lOVF9DTFIgKi8KKyNkZWZpbmUgREFDX1VOREVSUlVOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERBQ19VTkRFUlJVTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERBQ19UWF9SRUFEWV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBEQUNfVFhfUkVBRFlfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCaXQgbWFuaXB1bGF0aW9uIG1hY3JvcyAqLworI2RlZmluZSBEQUNfQklUKG5hbWUpCQkJCQlcCisJKDEgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkKKyNkZWZpbmUgREFDX0JGKG5hbWUsIHZhbHVlKQkJCQlcCisJKCgodmFsdWUpICYgKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpKQlcCisJIDw8IERBQ18jI25hbWUjI19PRkZTRVQpCisjZGVmaW5lIERBQ19CRkVYVChuYW1lLCB2YWx1ZSkJCQkJXAorCSgoKHZhbHVlKSA+PiBEQUNfIyNuYW1lIyNfT0ZGU0VUKQkJXAorCSAmICgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKSkKKyNkZWZpbmUgREFDX0JGSU5TKG5hbWUsIHZhbHVlLCBvbGQpCQkJXAorCSgoKG9sZCkgJiB+KCgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKQlcCisJCSAgICA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKSkJCVwKKwkgfCBEQUNfQkYobmFtZSwgdmFsdWUpKQorCisvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCisjZGVmaW5lIGRhY19yZWFkbChwb3J0LCByZWcpCQkJCVwKKwlfX3Jhd19yZWFkbCgocG9ydCktPnJlZ3MgKyBEQUNfIyNyZWcpCisjZGVmaW5lIGRhY193cml0ZWwocG9ydCwgcmVnLCB2YWx1ZSkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIERBQ18jI3JlZykKKworLyoKKyAqIEFCREFDIHN1cHBvcnRzIGEgbWF4aW11bSBvZiA2IGRpZmZlcmVudCByYXRlcyBmcm9tIGEgZ2VuZXJpYyBjbG9jay4gVGhlCisgKiBnZW5lcmljIGNsb2NrIGhhcyBhIHBvd2VyIG9mIHR3byBkaXZpZGVyLCB3aGljaCBnaXZlcyA2IHN0ZXBzIGZyb20gMTkyIGtIegorICogdG8gNTExMiBIei4KKyAqLworI2RlZmluZSBNQVhfTlVNX1JBVEVTCTYKKy8qIEFMU0Egc2VlbXMgdG8gdXNlIHJhdGVzIGJldHdlZW4gMTkyMDAwIEh6IGFuZCA1MTEyIEh6LiAqLworI2RlZmluZSBSQVRFX01BWAkxOTIwMDAKKyNkZWZpbmUgUkFURV9NSU4JNTExMgorCitlbnVtIHsKKwlETUFfUkVBRFkgPSAwLAorfTsKKworc3RydWN0IGF0bWVsX2FiZGFjX2RtYSB7CisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJKmNkZXNjOworfTsKKworc3RydWN0IGF0bWVsX2FiZGFjIHsKKwlzdHJ1Y3QgY2xrCQkJCSpwY2xrOworCXN0cnVjdCBjbGsJCQkJKnNhbXBsZV9jbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJCSpwZGV2OworCXN0cnVjdCBhdG1lbF9hYmRhY19kbWEJCQlkbWE7CisKKwlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QJY29uc3RyYWludHNfcmF0ZXM7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCQkqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfY2FyZAkJCQkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbQkJCQkqcGNtOworCisJdm9pZCBfX2lvbWVtCQkJCSpyZWdzOworCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7CisJdW5zaWduZWQgaW50CQkJCXJhdGVzW01BWF9OVU1fUkFURVNdOworCXVuc2lnbmVkIGludAkJCQlyYXRlc19udW07CisJaW50CQkJCQlpcnE7Cit9OworCisjZGVmaW5lIGdldF9kYWMoY2FyZCkgKChzdHJ1Y3QgYXRtZWxfYWJkYWMgKikoY2FyZCktPnByaXZhdGVfZGF0YSkKKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIERNQSBkcml2ZXIuICovCitzdGF0aWMgdm9pZCBhdG1lbF9hYmRhY19kbWFfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoZGFjLT5zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3ByZXBhcmVfZG1hKHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjLAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuID0gZGFjLT5kbWEuY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJCSpjZGVzYzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nCQkJYnVmZmVyX2xlbiwgcGVyaW9kX2xlbjsKKworCS8qCisJICogV2UgZG9uJ3QgZG8gRE1BIG9uICJjb21wbGV4IiB0cmFuc2ZlcnMsIGkuZS4gd2l0aAorCSAqIG5vbi1oYWxmd29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4KKwkgKi8KKwlpZiAocnVudGltZS0+ZG1hX2FkZHIgJiAxIHx8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICYgMSkgeworCQlkZXZfZGJnKCZkYWMtPnBkZXYtPmRldiwgInRvbyBjb21wbGV4IHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmZmVyX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk7CisJcGVyaW9kX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwljZGVzYyA9IGR3X2RtYV9jeWNsaWNfcHJlcChjaGFuLCBydW50aW1lLT5kbWFfYWRkciwgYnVmZmVyX2xlbiwKKwkJCXBlcmlvZF9sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChJU19FUlIoY2Rlc2MpKSB7CisJCWRldl9kYmcoJmRhYy0+cGRldi0+ZGV2LCAiY291bGQgbm90IHByZXBhcmUgY3ljbGljIERNQVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXNjKTsKKwl9CisKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWJkYWNfZG1hX3BlcmlvZF9kb25lOworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2tfcGFyYW0gPSBkYWM7CisKKwlkYWMtPmRtYS5jZGVzYyA9IGNkZXNjOworCisJc2V0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYXRtZWxfYWJkYWNfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUkVTVU1FCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1BBVVNFKSwKKwkuZm9ybWF0cwkJPSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUpLAorCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFX0tOT1QpLAorCS5yYXRlX21pbgkJPSBSQVRFX01JTiwKKwkucmF0ZV9tYXgJCT0gUkFURV9NQVgsCisJLmNoYW5uZWxzX21pbgkJPSAyLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogNDA5NiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSA0MDk2LAorCS5wZXJpb2RzX21pbgkJPSA0LAorCS5wZXJpb2RzX21heAkJPSA2NCwKK307CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRhYy0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWF0bWVsX2FiZGFjX2h3LnJhdGVfbWF4ID0gZGFjLT5yYXRlc1tkYWMtPnJhdGVzX251bSAtIDFdOworCWF0bWVsX2FiZGFjX2h3LnJhdGVfbWluID0gZGFjLT5yYXRlc1swXTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3ID0gYXRtZWxfYWJkYWNfaHc7CisKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZkYWMtPmNvbnN0cmFpbnRzX3JhdGVzKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlkYWMtPnN1YnN0cmVhbSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoZGFjLT5kbWEuY2hhbik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGRhYy0+ZG1hLmNoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY2xrX3NldF9yYXRlKGRhYy0+c2FtcGxlX2NsaywgMjU2ICogc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKCF0ZXN0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWJkYWNfcHJlcGFyZV9kbWEoZGFjLCBzdWJzdHJlYW0sIERNQV9UT19ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWwgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQljbGtfZW5hYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoZGFjLT5kbWEuY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJZGFjX3dyaXRlbChkYWMsIENUUkwsIERBQ19CSVQoRU4pKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGRhYy0+ZG1hLmNoYW4pOworCQlkYWNfd3JpdGVsKGRhYywgREFUQSwgMCk7CisJCWRhY193cml0ZWwoZGFjLCBDVFJMLCAwKTsKKwkJY2xrX2Rpc2FibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWJkYWNfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMJKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9zcmNfYWRkcihkYWMtPmRtYS5jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIGlycXJldHVybl90IGFiZGFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBkZXZfaWQ7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGRhY19yZWFkbChkYWMsIElOVF9TVEFUVVMpOworCWlmIChzdGF0dXMgJiBEQUNfQklUKFVOREVSUlVOKSkgeworCQlkZXZfZXJyKCZkYWMtPnBkZXYtPmRldiwgInVuZGVycnVuIGRldGVjdGVkXG4iKTsKKwkJZGFjX3dyaXRlbChkYWMsIElOVF9DTFIsIERBQ19CSVQoVU5ERVJSVU4pKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZkYWMtPnBkZXYtPmRldiwgInNwdXJpb3VzIGludGVycnVwdCAoc3RhdHVzPTB4JXgpXG4iLAorCQkJc3RhdHVzKTsKKwkJZGFjX3dyaXRlbChkYWMsIElOVF9DTFIsIHN0YXR1cyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FiZGFjX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYmRhY19vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYmRhY19jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FiZGFjX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FiZGFjX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYmRhY19wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWJkYWNfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FiZGFjX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYmRhY19wY21fbmV3KHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjKQoreworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGh3ID0gYXRtZWxfYWJkYWNfaHc7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9uZXcoZGFjLT5jYXJkLCBkYWMtPmNhcmQtPnNob3J0bmFtZSwKKwkJCWRhYy0+cGRldi0+aWQsIDEsIDAsICZwY20pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlzdHJjcHkocGNtLT5uYW1lLCBkYWMtPmNhcmQtPnNob3J0bmFtZSk7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBkYWM7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlkYWMtPnBjbSA9IHBjbTsKKworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZhdG1lbF9hYmRhY19vcHMpOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCSZkYWMtPnBkZXYtPmRldiwgaHcucGVyaW9kc19taW4gKiBody5wZXJpb2RfYnl0ZXNfbWluLAorCQkJaHcuYnVmZmVyX2J5dGVzX21heCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKKworCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGVzKHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjKQoreworCWxvbmcgbmV3X3JhdGUgPSBSQVRFX01BWDsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwlpbnQgaW5kZXggPSAwOworCisJLyogd2Ugc3RhcnQgYXQgMTkyIGtIeiBhbmQgd29yayBvdXIgd2F5IGRvd24gdG8gNTExMiBIeiAqLworCXdoaWxlIChuZXdfcmF0ZSA+PSBSQVRFX01JTiAmJiBpbmRleCA8IChNQVhfTlVNX1JBVEVTICsgMSkpIHsKKwkJbmV3X3JhdGUgPSBjbGtfcm91bmRfcmF0ZShkYWMtPnNhbXBsZV9jbGssIDI1NiAqIG5ld19yYXRlKTsKKwkJaWYgKG5ld19yYXRlIDwgMCkKKwkJCWJyZWFrOworCQkvKiBtYWtlIHN1cmUgd2UgYXJlIGJlbG93IHRoZSBBQkRBQyBjbG9jayAqLworCQlpZiAobmV3X3JhdGUgPD0gY2xrX2dldF9yYXRlKGRhYy0+cGNsaykpIHsKKwkJCWRhYy0+cmF0ZXNbaW5kZXhdID0gbmV3X3JhdGUgLyAyNTY7CisJCQlpbmRleCsrOworCQl9CisJCS8qIGRpdmlkZSBieSAyNTYgYW5kIHRoZW4gYnkgdHdvIHRvIGdldCBuZXh0IHJhdGUgKi8KKwkJbmV3X3JhdGUgLz0gMjU2ICogMjsKKwl9CisKKwlpZiAoaW5kZXgpIHsKKwkJaW50IGk7CisKKwkJLyogcmV2ZXJzZSBhcnJheSwgc21hbGxlc3QgZ28gZmlyc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IChpbmRleCAvIDIpOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCB0bXAgPSBkYWMtPnJhdGVzW2luZGV4IC0gMSAtIGldOworCQkJZGFjLT5yYXRlc1tpbmRleCAtIDEgLSBpXSA9IGRhYy0+cmF0ZXNbaV07CisJCQlkYWMtPnJhdGVzW2ldID0gdG1wOworCQl9CisKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5jb3VudCA9IGluZGV4OworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLmxpc3QgPSBkYWMtPnJhdGVzOworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLm1hc2sgPSAwOworCQlkYWMtPnJhdGVzX251bSA9IGluZGV4OworCisJCXJldHZhbCA9IDA7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWJkYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOworCXN0cnVjdCBhdG1lbF9hYmRhYwkqZGFjOworCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3M7CisJc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhCSpwZGF0YTsKKwlzdHJ1Y3QgY2xrCQkqcGNsazsKKwlzdHJ1Y3QgY2xrCQkqc2FtcGxlX2NsazsKKwlpbnQJCQlyZXR2YWw7CisJaW50CQkJaXJxOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IElSUSBudW1iZXJcbiIpOworCQlyZXR1cm4gaXJxOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGVyaXBoZXJhbCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCX0KKwlzYW1wbGVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2FtcGxlX2NsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gc2FtcGxlIGNsb2NrXG4iKTsKKwkJcmV0dmFsID0gUFRSX0VSUihwY2xrKTsKKwkJZ290byBvdXRfcHV0X3BjbGs7CisJfQorCWNsa19lbmFibGUocGNsayk7CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQlUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYmRhYyksICZjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc291bmQgY2FyZCBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9wdXRfc2FtcGxlX2NsazsKKwl9CisKKwlkYWMgPSBnZXRfZGFjKGNhcmQpOworCisJZGFjLT5pcnEgPSBpcnE7CisJZGFjLT5jYXJkID0gY2FyZDsKKwlkYWMtPnBjbGsgPSBwY2xrOworCWRhYy0+c2FtcGxlX2NsayA9IHNhbXBsZV9jbGs7CisJZGFjLT5wZGV2ID0gcGRldjsKKworCXJldHZhbCA9IHNldF9zYW1wbGVfcmF0ZXMoZGFjKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHN1cHBvcnRlZCByYXRlc1xuIik7CisJCWdvdG8gb3V0X2ZyZWVfY2FyZDsKKwl9CisKKwlkYWMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCWlmICghZGFjLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZW1hcCByZWdpc3RlciBtZW1vcnlcbiIpOworCQlnb3RvIG91dF9mcmVlX2NhcmQ7CisJfQorCisJLyogbWFrZSBzdXJlIHRoZSBEQUMgaXMgc2lsZW50IGFuZCBkaXNhYmxlZCAqLworCWRhY193cml0ZWwoZGFjLCBEQVRBLCAwKTsKKwlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgMCk7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGFiZGFjX2ludGVycnVwdCwgMCwgImFiZGFjIiwgZGFjKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZXF1ZXN0IGlycVxuIik7CisJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKworCWlmIChwZGF0YS0+ZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT5kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT50eF9yZWcgPSByZWdzLT5zdGFydCArIERBQ19EQVRBOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQlkYWMtPmRtYS5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisJfQorCWlmICghcGRhdGEtPmR3cy5kbWFfZGV2IHx8ICFkYWMtPmRtYS5jaGFuKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5zZXRfY2FyZF9kZXY7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkF0bWVsIEFCREFDIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF0bWVsIEFCREFDIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMiKTsKKworCXJldHZhbCA9IGF0bWVsX2FiZGFjX3BjbV9uZXcoZGFjKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBBQkRBQyBwY20gZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9kbWE7CisJfQorCisJcmV0dmFsID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfZG1hOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIEFCREFDIGF0IDB4JXAgdXNpbmcgJXNcbiIsCisJCQlkYWMtPnJlZ3MsIGRhYy0+ZG1hLmNoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisKKwlyZXR1cm4gcmV0dmFsOworCitvdXRfcmVsZWFzZV9kbWE6CisJZG1hX3JlbGVhc2VfY2hhbm5lbChkYWMtPmRtYS5jaGFuKTsKKwlkYWMtPmRtYS5jaGFuID0gTlVMTDsKK291dF91bnNldF9jYXJkX2RldjoKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCWZyZWVfaXJxKGlycSwgZGFjKTsKK291dF91bm1hcF9yZWdzOgorCWlvdW5tYXAoZGFjLT5yZWdzKTsKK291dF9mcmVlX2NhcmQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK291dF9wdXRfc2FtcGxlX2NsazoKKwljbGtfcHV0KHNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKHBjbGspOworb3V0X3B1dF9wY2xrOgorCWNsa19wdXQocGNsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1lbF9hYmRhY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlkd19kbWFfY3ljbGljX3N0b3AoZGFjLT5kbWEuY2hhbik7CisJY2xrX2Rpc2FibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShkYWMtPnBjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljbGtfZW5hYmxlKGRhYy0+cGNsayk7CisJY2xrX2VuYWJsZShkYWMtPnNhbXBsZV9jbGspOworCWlmICh0ZXN0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChkYWMtPmRtYS5jaGFuKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXRtZWxfYWJkYWNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0bWVsX2FiZGFjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgYXRtZWxfYWJkYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBnZXRfZGFjKGNhcmQpOworCisJY2xrX3B1dChkYWMtPnNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKGRhYy0+cGNsayk7CisJY2xrX3B1dChkYWMtPnBjbGspOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChkYWMtPmRtYS5jaGFuKTsKKwlkYWMtPmRtYS5jaGFuID0gTlVMTDsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCWlvdW5tYXAoZGFjLT5yZWdzKTsKKwlmcmVlX2lycShkYWMtPmlycSwgZGFjKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfYWJkYWNfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXRtZWxfYWJkYWNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXRtZWxfYWJkYWMiLAorCX0sCisJLnN1c3BlbmQJPSBhdG1lbF9hYmRhY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRtZWxfYWJkYWNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfYWJkYWNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2FiZGFjX2RyaXZlciwKKwkJCWF0bWVsX2FiZGFjX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGF0bWVsX2FiZGFjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfYWJkYWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1lbF9hYmRhY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYXRtZWxfYWJkYWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMtQ2hyaXN0aWFuIEVndHZlZHQgPGhhbnMtY2hyaXN0aWFuLmVndHZlZHRAYXRtZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWM5N2MuYyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3MmUwMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKQEAgLTAsMCArMSw5MzIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CisjaW5jbHVkZSA8c291bmQvbWVtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworI2luY2x1ZGUgImFjOTdjLmgiCisKK2VudW0geworCURNQV9UWF9SRUFEWSA9IDAsCisJRE1BX1JYX1JFQURZLAorCURNQV9UWF9DSEFOX1BSRVNFTlQsCisJRE1BX1JYX0NIQU5fUFJFU0VOVCwKK307CisKKy8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gb3BlbmVkIHZhcmlhYmxlICovCitzdGF0aWMgREVGSU5FX01VVEVYKG9wZW5lZF9tdXRleCk7CisKK3N0cnVjdCBhdG1lbF9hYzk3Y19kbWEgeworCXN0cnVjdCBkbWFfY2hhbgkJCSpyeF9jaGFuOworCXN0cnVjdCBkbWFfY2hhbgkJCSp0eF9jaGFuOworfTsKKworc3RydWN0IGF0bWVsX2FjOTdjIHsKKwlzdHJ1Y3QgY2xrCQkJKnBjbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CisJc3RydWN0IGF0bWVsX2FjOTdjX2RtYQkJZG1hOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpwbGF5YmFja19zdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpjYXB0dXJlX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbQkJCSpwY207CisJc3RydWN0IHNuZF9hYzk3CQkJKmFjOTc7CisJc3RydWN0IHNuZF9hYzk3X2J1cwkJKmFjOTdfYnVzOworCisJdTY0CQkJCWN1cl9mb3JtYXQ7CisJdW5zaWduZWQgaW50CQkJY3VyX3JhdGU7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gb3BlbmVkIHZhcmlhYmxlICovCisJc3BpbmxvY2tfdAkJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJaW50CQkJCW9wZW5lZDsKKwlpbnQJCQkJcmVzZXRfcGluOworfTsKKworI2RlZmluZSBnZXRfY2hpcChjYXJkKSAoKHN0cnVjdCBhdG1lbF9hYzk3YyAqKShjYXJkKS0+cHJpdmF0ZV9kYXRhKQorCisjZGVmaW5lIGFjOTdjX3dyaXRlbChjaGlwLCByZWcsIHZhbCkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAoY2hpcCktPnJlZ3MgKyBBQzk3Q18jI3JlZykKKyNkZWZpbmUgYWM5N2NfcmVhZGwoY2hpcCwgcmVnKQkJCQlcCisJX19yYXdfcmVhZGwoKGNoaXApLT5yZWdzICsgQUM5N0NfIyNyZWcpCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBETUEgZHJpdmVyLiAqLworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfZG1hX3BsYXliYWNrX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19kbWFfY2FwdHVyZV9wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCwKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJCSpjZGVzYzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nCQkJYnVmZmVyX2xlbiwgcGVyaW9kX2xlbjsKKworCS8qCisJICogV2UgZG9uJ3QgZG8gRE1BIG9uICJjb21wbGV4IiB0cmFuc2ZlcnMsIGkuZS4gd2l0aAorCSAqIG5vbi1oYWxmd29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4KKwkgKi8KKwlpZiAocnVudGltZS0+ZG1hX2FkZHIgJiAxIHx8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICYgMSkgeworCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJ0b28gY29tcGxleCB0cmFuc2ZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJY2hhbiA9IGNoaXAtPmRtYS50eF9jaGFuOworCWVsc2UKKwkJY2hhbiA9IGNoaXAtPmRtYS5yeF9jaGFuOworCisJYnVmZmVyX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk7CisJcGVyaW9kX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwljZGVzYyA9IGR3X2RtYV9jeWNsaWNfcHJlcChjaGFuLCBydW50aW1lLT5kbWFfYWRkciwgYnVmZmVyX2xlbiwKKwkJCXBlcmlvZF9sZW4sIGRpcmVjdGlvbik7CisJaWYgKElTX0VSUihjZGVzYykpIHsKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHByZXBhcmUgY3ljbGljIERNQVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXNjKTsKKwl9CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FjOTdjX2RtYV9wbGF5YmFja19wZXJpb2RfZG9uZTsKKwkJc2V0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FjOTdjX2RtYV9jYXB0dXJlX3BlcmlvZF9kb25lOworCQlzZXRfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrX3BhcmFtID0gY2hpcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYXRtZWxfYWM5N2NfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRQorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMJCT0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFCisJCQkJICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSwKKwkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTKSwKKwkucmF0ZV9taW4JCT0gNDAwMCwKKwkucmF0ZV9tYXgJCT0gNDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogNDA5NiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSA0MDk2LAorCS5wZXJpb2RzX21pbgkJPSA0LAorCS5wZXJpb2RzX21heAkJPSA2NCwKK307CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkKys7CisJcnVudGltZS0+aHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpZiAoY2hpcC0+Y3VyX3JhdGUpIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5jdXJfcmF0ZTsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBjaGlwLT5jdXJfcmF0ZTsKKwl9CisJaWYgKGNoaXAtPmN1cl9mb3JtYXQpCisJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoMVVMTCA8PCBjaGlwLT5jdXJfZm9ybWF0KTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkKys7CisJcnVudGltZS0+aHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpZiAoY2hpcC0+Y3VyX3JhdGUpIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5jdXJfcmF0ZTsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBjaGlwLT5jdXJfcmF0ZTsKKwl9CisJaWYgKGNoaXAtPmN1cl9mb3JtYXQpCisJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoMVVMTCA8PCBjaGlwLT5jdXJfZm9ybWF0KTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQtLTsKKwlpZiAoIWNoaXAtPm9wZW5lZCkgeworCQljaGlwLT5jdXJfcmF0ZSA9IDA7CisJCWNoaXAtPmN1cl9mb3JtYXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZC0tOworCWlmICghY2hpcC0+b3BlbmVkKSB7CisJCWNoaXAtPmN1cl9yYXRlID0gMDsKKwkJY2hpcC0+Y3VyX2Zvcm1hdCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEudHhfY2hhbik7CisKKwkvKiBTZXQgcmVzdHJpY3Rpb25zIHRvIHBhcmFtcy4gKi8KKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmN1cl9yYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsKKwljaGlwLT5jdXJfZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCisJLyogU2V0IHJlc3RyaWN0aW9ucyB0byBwYXJhbXMuICovCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jdXJfcmF0ZSA9IHBhcmFtc19yYXRlKGh3X3BhcmFtcyk7CisJY2hpcC0+Y3VyX2Zvcm1hdCA9IHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnR4X2NoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZyB3b3JkID0gMDsKKwlpbnQgcmV0dmFsOworCisJLyogYXNzaWduIGNoYW5uZWxzIHRvIEFDOTdDIGNoYW5uZWwgQSAqLworCXN3aXRjaCAocnVudGltZS0+Y2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSkKKwkJCXwgQUM5N0NfQ0hfQVNTSUdOKFBDTV9SSUdIVCwgQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE86IHN1cHBvcnQgbW9yZSB0aGFuIHR3byBjaGFubmVscyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWFjOTdjX3dyaXRlbChjaGlwLCBPQ0EsIHdvcmQpOworCisJLyogY29uZmlndXJlIHNhbXBsZSBmb3JtYXQgYW5kIHNpemUgKi8KKwl3b3JkID0gQUM5N0NfQ01SX0RNQUVOIHwgQUM5N0NfQ01SX1NJWkVfMTY7CisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdvcmQgfD0gQUM5N0NfQ01SX0NFTV9MSVRUTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXdvcmQgJj0gfihBQzk3Q19DTVJfQ0VNX0xJVFRMRSk7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCB3b3JkKTsKKworCS8qIHNldCB2YXJpYWJsZSByYXRlIGlmIG5lZWRlZCAqLworCWlmIChydW50aW1lLT5yYXRlICE9IDQ4MDAwKSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgfD0gQUM5N0NfTVJfVlJBOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0gZWxzZSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgJj0gfihBQzk3Q19NUl9WUkEpOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0KKworCXJldHZhbCA9IHNuZF9hYzk3X3NldF9yYXRlKGNoaXAtPmFjOTcsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLAorCQkJcnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHNldCByYXRlICVkIEh6XG4iLAorCQkJCXJ1bnRpbWUtPnJhdGUpOworCisJaWYgKCF0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKGNoaXAsIHN1YnN0cmVhbSwKKwkJCQlETUFfVE9fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcgd29yZCA9IDA7CisJaW50IHJldHZhbDsKKworCS8qIGFzc2lnbiBjaGFubmVscyB0byBBQzk3QyBjaGFubmVsIEEgKi8KKwlzd2l0Y2ggKHJ1bnRpbWUtPmNoYW5uZWxzKSB7CisJY2FzZSAxOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpCisJCQl8IEFDOTdDX0NIX0FTU0lHTihQQ01fUklHSFQsIEEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBzdXBwb3J0IG1vcmUgdGhhbiB0d28gY2hhbm5lbHMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlhYzk3Y193cml0ZWwoY2hpcCwgSUNBLCB3b3JkKTsKKworCS8qIGNvbmZpZ3VyZSBzYW1wbGUgZm9ybWF0IGFuZCBzaXplICovCisJd29yZCA9IEFDOTdDX0NNUl9ETUFFTiB8IEFDOTdDX0NNUl9TSVpFXzE2OworCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3b3JkIHw9IEFDOTdDX0NNUl9DRU1fTElUVExFOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQl3b3JkICY9IH4oQUM5N0NfQ01SX0NFTV9MSVRUTEUpOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgd29yZCk7CisKKwkvKiBzZXQgdmFyaWFibGUgcmF0ZSBpZiBuZWVkZWQgKi8KKwlpZiAocnVudGltZS0+cmF0ZSAhPSA0ODAwMCkgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkIHw9IEFDOTdDX01SX1ZSQTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9IGVsc2UgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkICY9IH4oQUM5N0NfTVJfVlJBKTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfYWM5N19zZXRfcmF0ZShjaGlwLT5hYzk3LCBBQzk3X1BDTV9MUl9BRENfUkFURSwKKwkJCXJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgcmF0ZSAlZCBIelxuIiwKKwkJCQlydW50aW1lLT5yYXRlKTsKKworCWlmICghdGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShjaGlwLCBzdWJzdHJlYW0sCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2F0bWVsX2FjOTdjX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgY2FtcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNhbXIgPSBhYzk3Y19yZWFkbChjaGlwLCBDQU1SKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEudHhfY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJY2FtciB8PSBBQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS50eF9jaGFuKTsKKwkJaWYgKGNoaXAtPm9wZW5lZCA8PSAxKQorCQkJY2FtciAmPSB+QUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCBjYW1yKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CithdG1lbF9hYzk3Y19jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgY2FtcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNhbXIgPSBhYzk3Y19yZWFkbChjaGlwLCBDQU1SKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEucnhfY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJY2FtciB8PSBBQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwkJaWYgKGNoaXAtPm9wZW5lZCA8PSAxKQorCQkJY2FtciAmPSB+QUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCBjYW1yKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FjOTdjX3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjCSpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X3NyY19hZGRyKGNoaXAtPmRtYS50eF9jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWM5N2NfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YwkqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9kc3RfYWRkcihjaGlwLT5kbWEucnhfY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FjOTdfcGxheWJhY2tfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYzk3Y19wbGF5YmFja190cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfcG9pbnRlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWM5N19jYXB0dXJlX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FjOTdjX3BjbV9uZXcoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCXN0cnVjdCBzbmRfcGNtCQkqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlCWh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaW50CQkJY2FwdHVyZSwgcGxheWJhY2ssIHJldHZhbDsKKworCWNhcHR1cmUgPSB0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCXBsYXliYWNrID0gdGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSwKKwkJCWNoaXAtPnBkZXYtPmlkLCBwbGF5YmFjaywgY2FwdHVyZSwgJnBjbSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChjYXB0dXJlKQorCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkJJmF0bWVsX2FjOTdfY2FwdHVyZV9vcHMpOworCWlmIChwbGF5YmFjaykKKwkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKwkJCQkmYXRtZWxfYWM5N19wbGF5YmFja19vcHMpOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCSZjaGlwLT5wZGV2LT5kZXYsIGh3LnBlcmlvZHNfbWluICogaHcucGVyaW9kX2J5dGVzX21pbiwKKwkJCWh3LmJ1ZmZlcl9ieXRlc19tYXgpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCBjaGlwLT5jYXJkLT5zaG9ydG5hbWUpOworCWNoaXAtPnBjbSA9IHBjbTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX21peGVyX25ldyhzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIHRlbXBsYXRlOworCW1lbXNldCgmdGVtcGxhdGUsIDAsIHNpemVvZih0ZW1wbGF0ZSkpOworCXRlbXBsYXRlLnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcmV0dXJuIHNuZF9hYzk3X21peGVyKGNoaXAtPmFjOTdfYnVzLCAmdGVtcGxhdGUsICZjaGlwLT5hYzk3KTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2Nfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChhYzk3KTsKKwl1bnNpZ25lZCBsb25nIHdvcmQ7CisJaW50IHRpbWVvdXQgPSA0MDsKKworCXdvcmQgPSAocmVnICYgMHg3ZikgPDwgMTYgfCB2YWw7CisKKwlkbyB7CisJCWlmIChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9UWFJEWSkgeworCQkJYWM5N2Nfd3JpdGVsKGNoaXAsIENPVEhSLCB3b3JkKTsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvZGVjIHdyaXRlIHRpbWVvdXRcbiIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYXRtZWxfYWM5N2NfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCXVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChhYzk3KTsKKwl1bnNpZ25lZCBsb25nIHdvcmQ7CisJaW50IHRpbWVvdXQgPSA0MDsKKwlpbnQgd3JpdGUgPSAxMDsKKworCXdvcmQgPSAoMHg4MCB8IChyZWcgJiAweDdmKSkgPDwgMTY7CisKKwlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1JYUkRZKSAhPSAwKQorCQlhYzk3Y19yZWFkbChjaGlwLCBDT1JIUik7CisKK3JldHJ5X3dyaXRlOgorCXRpbWVvdXQgPSA0MDsKKworCWRvIHsKKwkJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9UWFJEWSkgIT0gMCkgeworCQkJYWM5N2Nfd3JpdGVsKGNoaXAsIENPVEhSLCB3b3JkKTsKKwkJCWdvdG8gcmVhZF9yZWc7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCEtLXdyaXRlKQorCQlnb3RvIHRpbWVkX291dDsKKwlnb3RvIHJldHJ5X3dyaXRlOworCityZWFkX3JlZzoKKwlkbyB7CisJCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfUlhSRFkpICE9IDApIHsKKwkJCXVuc2lnbmVkIHNob3J0IHZhbCA9IGFjOTdjX3JlYWRsKGNoaXAsIENPUkhSKTsKKwkJCXJldHVybiB2YWw7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCEtLXdyaXRlKQorCQlnb3RvIHRpbWVkX291dDsKKwlnb3RvIHJldHJ5X3dyaXRlOworCit0aW1lZF9vdXQ6CisJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY29kZWMgcmVhZCB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gMHhmZmZmOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKKworCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfcmVzZXQoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgQUM5N0NfTVJfV1JTVCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKSB7CisJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPnJlc2V0X3BpbiwgMCk7CisJCS8qIEFDOTcgdjIuMiBzcGVjaWZpY2F0aW9ucyBzYXlzIG1pbmltdW0gMSB1cy4gKi8KKwkJdWRlbGF5KDEwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+cmVzZXRfcGluLCAxKTsKKwl9CisKKwl1ZGVsYXkoMSk7CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCBBQzk3Q19NUl9FTkEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYzk3Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZAkJCSpjYXJkOworCXN0cnVjdCBhdG1lbF9hYzk3YwkJKmNoaXA7CisJc3RydWN0IHJlc291cmNlCQkJKnJlZ3M7CisJc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEJKnBkYXRhOworCXN0cnVjdCBjbGsJCQkqcGNsazsKKwlzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMJb3BzID0geworCQkud3JpdGUJPSBhdG1lbF9hYzk3Y193cml0ZSwKKwkJLnJlYWQJPSBhdG1lbF9hYzk3Y19yZWFkLAorCX07CisJaW50CQkJCXJldHZhbDsKKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGVyaXBoZXJhbCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCX0KKwljbGtfZW5hYmxlKHBjbGspOworCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYXRtZWxfYWM5N2MpLCAmY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHNvdW5kIGNhcmQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfc25kX2NhcmRfbmV3OworCX0KKworCWNoaXAgPSBnZXRfY2hpcChjYXJkKTsKKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBdG1lbCBBQzk3QyIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBdG1lbCBBQzk3QyIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJBdG1lbCBBQzk3IGNvbnRyb2xsZXIiKTsKKworCWNoaXAtPmNhcmQgPSBjYXJkOworCWNoaXAtPnBjbGsgPSBwY2xrOworCWNoaXAtPnBkZXYgPSBwZGV2OworCWNoaXAtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCisJaWYgKCFjaGlwLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZW1hcCByZWdpc3RlciBtZW1vcnlcbiIpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5yZXNldF9waW4pKSB7CisJCWlmIChncGlvX3JlcXVlc3QocGRhdGEtPnJlc2V0X3BpbiwgInJlc2V0X3BpbiIpKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXNldCBwaW4gbm90IGF2YWlsYWJsZVxuIik7CisJCQljaGlwLT5yZXNldF9waW4gPSAtRU5PREVWOworCQl9IGVsc2UgeworCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9waW4sIDEpOworCQkJY2hpcC0+cmVzZXRfcGluID0gcGRhdGEtPnJlc2V0X3BpbjsKKwkJfQorCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisKKwlyZXR2YWwgPSBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgY2hpcCwgJmNoaXAtPmFjOTdfYnVzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBvbiBhYzk3IGJ1c1xuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCWF0bWVsX2FjOTdjX3Jlc2V0KGNoaXApOworCisJcmV0dmFsID0gYXRtZWxfYWM5N2NfbWl4ZXJfbmV3KGNoaXApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGFjOTcgbWl4ZXJcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlpZiAocGRhdGEtPnJ4X2R3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+cnhfZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+cnhfcmVnID0gcmVncy0+c3RhcnQgKyBBQzk3Q19DQVJIUiArIDI7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWNoaXAtPmRtYS5yeF9jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisKKwkJZGV2X2luZm8oJmNoaXAtPnBkZXYtPmRldiwgInVzaW5nICVzIGZvciBETUEgUlhcbiIsCisJCQkJCWNoaXAtPmRtYS5yeF9jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCQlzZXRfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJfQorCisJaWYgKHBkYXRhLT50eF9kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPnR4X2R3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnR4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgQUM5N0NfQ0FUSFIgKyAyOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQljaGlwLT5kbWEudHhfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCisJCWRldl9pbmZvKCZjaGlwLT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIFRYXG4iLAorCQkJCQljaGlwLT5kbWEudHhfY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKwkJc2V0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWlmICghdGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSAmJgorCQkJIXRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJcmV0dmFsID0gYXRtZWxfYWM5N2NfcGNtX25ldyhjaGlwKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBhYzk3IHBjbSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJcmV0dmFsID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIEFDOTcgY29udHJvbGxlciBhdCAweCVwXG4iLAorCQkJY2hpcC0+cmVncyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RtYToKKwlpZiAodGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsZWFyX2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNoaXAtPmRtYS5yeF9jaGFuID0gTlVMTDsKKwljaGlwLT5kbWEudHhfY2hhbiA9IE5VTEw7CitlcnJfYWM5N19idXM6CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpCisJCWdwaW9fZnJlZShjaGlwLT5yZXNldF9waW4pOworCisJaW91bm1hcChjaGlwLT5yZWdzKTsKK2Vycl9pb3JlbWFwOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitlcnJfc25kX2NhcmRfbmV3OgorCWNsa19kaXNhYmxlKHBjbGspOworCWNsa19wdXQocGNsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1lbF9hYzk3Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsa19kaXNhYmxlKGNoaXAtPnBjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJY2xrX2VuYWJsZShjaGlwLT5wY2xrKTsKKwlpZiAodGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS50eF9jaGFuKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXRtZWxfYWM5N2Nfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0bWVsX2FjOTdjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgYXRtZWxfYWM5N2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoY2FyZCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKQorCQlncGlvX2ZyZWUoY2hpcC0+cmVzZXRfcGluKTsKKworCWNsa19kaXNhYmxlKGNoaXAtPnBjbGspOworCWNsa19wdXQoY2hpcC0+cGNsayk7CisJaW91bm1hcChjaGlwLT5yZWdzKTsKKworCWlmICh0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xlYXJfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBOVUxMOworCWNoaXAtPmRtYS50eF9jaGFuID0gTlVMTDsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2FjOTdjX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0bWVsX2FjOTdjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0bWVsX2FjOTdjIiwKKwl9LAorCS5zdXNwZW5kCT0gYXRtZWxfYWM5N2Nfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0bWVsX2FjOTdjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0bWVsX2FjOTdjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdG1lbF9hYzk3Y19kcml2ZXIsCisJCQlhdG1lbF9hYzk3Y19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChhdG1lbF9hYzk3Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0bWVsX2FjOTdjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtZWxfYWM5N2NfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGF0bWVsX2FjOTdjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQXRtZWwgQUM5NyBjb250cm9sbGVyIik7CitNT0RVTEVfQVVUSE9SKCJIYW5zLUNocmlzdGlhbiBFZ3R2ZWR0IDxoYW5zLWNocmlzdGlhbi5lZ3R2ZWR0QGF0bWVsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmggYi9zb3VuZC9hdG1lbC9hYzk3Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2JkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYzk3Yy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19TT1VORF9BVE1FTF9BQzk3Q19ICisjZGVmaW5lIF9fU09VTkRfQVRNRUxfQUM5N0NfSAorCisjZGVmaW5lIEFDOTdDX01SCQkweDA4CisjZGVmaW5lIEFDOTdDX0lDQQkJMHgxMAorI2RlZmluZSBBQzk3Q19PQ0EJCTB4MTQKKyNkZWZpbmUgQUM5N0NfQ0FSSFIJCTB4MjAKKyNkZWZpbmUgQUM5N0NfQ0FUSFIJCTB4MjQKKyNkZWZpbmUgQUM5N0NfQ0FTUgkJMHgyOAorI2RlZmluZSBBQzk3Q19DQU1SCQkweDJjCisjZGVmaW5lIEFDOTdDX0NCUkhSCQkweDMwCisjZGVmaW5lIEFDOTdDX0NCVEhSCQkweDM0CisjZGVmaW5lIEFDOTdDX0NCU1IJCTB4MzgKKyNkZWZpbmUgQUM5N0NfQ0JNUgkJMHgzYworI2RlZmluZSBBQzk3Q19DT1JIUgkJMHg0MAorI2RlZmluZSBBQzk3Q19DT1RIUgkJMHg0NAorI2RlZmluZSBBQzk3Q19DT1NSCQkweDQ4CisjZGVmaW5lIEFDOTdDX0NPTVIJCTB4NGMKKyNkZWZpbmUgQUM5N0NfU1IJCTB4NTAKKyNkZWZpbmUgQUM5N0NfSUVSCQkweDU0CisjZGVmaW5lIEFDOTdDX0lEUgkJMHg1OAorI2RlZmluZSBBQzk3Q19JTVIJCTB4NWMKKyNkZWZpbmUgQUM5N0NfVkVSU0lPTgkJMHhmYworCisjZGVmaW5lIEFDOTdDX0NBVFBSCQlQRENfVFBSCisjZGVmaW5lIEFDOTdDX0NBVENSCQlQRENfVENSCisjZGVmaW5lIEFDOTdDX0NBVE5QUgkJUERDX1ROUFIKKyNkZWZpbmUgQUM5N0NfQ0FUTkNSCQlQRENfVE5DUgorI2RlZmluZSBBQzk3Q19DQVJQUgkJUERDX1JQUgorI2RlZmluZSBBQzk3Q19DQVJDUgkJUERDX1JDUgorI2RlZmluZSBBQzk3Q19DQVJOUFIJCVBEQ19STlBSCisjZGVmaW5lIEFDOTdDX0NBUk5DUgkJUERDX1JOQ1IKKyNkZWZpbmUgQUM5N0NfUFRDUgkJUERDX1BUQ1IKKworI2RlZmluZSBBQzk3Q19NUl9FTkEJCSgxIDw8IDApCisjZGVmaW5lIEFDOTdDX01SX1dSU1QJCSgxIDw8IDEpCisjZGVmaW5lIEFDOTdDX01SX1ZSQQkJKDEgPDwgMikKKworI2RlZmluZSBBQzk3Q19DU1JfVFhSRFkJCSgxIDw8IDApCisjZGVmaW5lIEFDOTdDX0NTUl9VTlJVTgkJKDEgPDwgMikKKyNkZWZpbmUgQUM5N0NfQ1NSX1JYUkRZCQkoMSA8PCA0KQorI2RlZmluZSBBQzk3Q19DU1JfRU5EVFgJCSgxIDw8IDEwKQorI2RlZmluZSBBQzk3Q19DU1JfRU5EUlgJCSgxIDw8IDE0KQorCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzIwCSgwIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xOAkoMSA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTYJKDIgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzEwCSgzIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VNX0xJVFRMRQkoMSA8PCAxOCkKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTV9CSUcJKDAgPDwgMTgpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU5BCQkoMSA8PCAyMSkKKyNkZWZpbmUgQUM5N0NfQ01SX0RNQUVOCQkoMSA8PCAyMikKKworI2RlZmluZSBBQzk3Q19TUl9DQUVWVAkJKDEgPDwgMykKKworI2RlZmluZSBBQzk3Q19DSF9BU1NJR04oc2xvdCwgY2hhbm5lbCkJCQkJCVwKKwkoQUM5N0NfQ0hBTk5FTF8jI2NoYW5uZWwgPDwgKDMgKiAoQUM5N19TTE9UXyMjc2xvdCAtIDMpKSkKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9OT05FCTB4MAorI2RlZmluZSBBQzk3Q19DSEFOTkVMX0EJCTB4MQorI2RlZmluZSBBQzk3Q19DSEFOTkVMX0IJCTB4MgorCisjZW5kaWYgLyogX19TT1VORF9BVE1FTF9BQzk3Q19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDYzNmIzYjUuLjRiMjBmYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC0xMzczLDEyICsxMzczLDkgQEAKIHN0YXRpYyBpbnQgc25kX2N0bF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICpjdGw7Ci0JaW50IGVycjsKKwogCWN0bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmN0bC0+ZmFzeW5jKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjdGwtPmZhc3luYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2h3ZGVwLmMgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKaW5kZXggMTk1Y2FmYy4uYTcwZWU3ZiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9od2RlcC5jCisrKyBiL3NvdW5kL2NvcmUvaHdkZXAuYwpAQCAtOTksOSArOTksNiBAQAogCWlmIChodyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghaHctPm9wcy5vcGVuKQotCQlyZXR1cm4gLUVOWElPOwotCiAJaWYgKCF0cnlfbW9kdWxlX2dldChody0+Y2FyZC0+bW9kdWxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTExMyw2ICsxMTAsMTAgQEAKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWJyZWFrOwogCQl9CisJCWlmICghaHctPm9wcy5vcGVuKSB7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KIAkJZXJyID0gaHctPm9wcy5vcGVuKGh3LCBmaWxlKTsKIAkJaWYgKGVyciA+PSAwKQogCQkJYnJlYWs7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBzbmRfaHdkZXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0JaW50IGVyciA9IC1FTlhJTzsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpodyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbW9kdWxlICptb2QgPSBody0+Y2FyZC0+bW9kdWxlOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IDBkNTUyMGMuLmZkNTZhZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC0xMjEsMzEgKzEyMSw0NCBAQAogI2VuZGlmCiAKIC8qKgotICogIHNuZF9jYXJkX25ldyAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKKyAqICBzbmRfY2FyZF9jcmVhdGUgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBzb3VuZGNhcmQgc3RydWN0dXJlCiAgKiAgQGlkeDogY2FyZCBpbmRleCAoYWRkcmVzcykgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0KICAqICBAeGlkOiBjYXJkIGlkZW50aWZpY2F0aW9uIChBU0NJSSBzdHJpbmcpCiAgKiAgQG1vZHVsZTogdG9wIGxldmVsIG1vZHVsZSBmb3IgbG9ja2luZwogICogIEBleHRyYV9zaXplOiBhbGxvY2F0ZSB0aGlzIGV4dHJhIHNpemUgYWZ0ZXIgdGhlIG1haW4gc291bmRjYXJkIHN0cnVjdHVyZQorICogIEBjYXJkX3JldDogdGhlIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGNyZWF0ZWQgY2FyZCBpbnN0YW5jZQogICoKICAqICBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUuCiAgKgotICogIFJldHVybnMga21hbGxvY2F0ZWQgc25kX2NhcmQgc3RydWN0dXJlLiBDcmVhdGVzIHRoZSBBTFNBIGNvbnRyb2wgaW50ZXJmYWNlCi0gKiAgKHdoaWNoIGlzIGJsb2NrZWQgdW50aWwgc25kX2NhcmRfcmVnaXN0ZXIgZnVuY3Rpb24gaXMgY2FsbGVkKS4KKyAqICBUaGUgZnVuY3Rpb24gYWxsb2NhdGVzIHNuZF9jYXJkIGluc3RhbmNlIHZpYSBremFsbG9jIHdpdGggdGhlIGdpdmVuCisgKiAgc3BhY2UgZm9yIHRoZSBkcml2ZXIgdG8gdXNlIGZyZWVseS4gIFRoZSBhbGxvY2F0ZWQgc3RydWN0IGlzIHN0b3JlZAorICogIGluIHRoZSBnaXZlbiBjYXJkX3JldCBwb2ludGVyLgorICoKKyAqICBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0cnVjdCBzbmRfY2FyZCAqc25kX2NhcmRfbmV3KGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCwKLQkJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKQoraW50IHNuZF9jYXJkX2NyZWF0ZShpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplLAorCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZF9yZXQpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnIsIGlkeDI7CiAKKwlpZiAoc25kX0JVR19PTighY2FyZF9yZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY2FyZF9yZXQgPSBOVUxMOworCiAJaWYgKGV4dHJhX3NpemUgPCAwKQogCQlleHRyYV9zaXplID0gMDsKIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpICsgZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoeGlkKSB7Ci0JCWlmICghc25kX2luZm9fY2hlY2tfcmVzZXJ2ZWRfd29yZHMoeGlkKSkKKwkJaWYgKCFzbmRfaW5mb19jaGVja19yZXNlcnZlZF93b3Jkcyh4aWQpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgImdpdmVuIGlkIHN0cmluZyAnJXMnIGlzIHJlc2VydmVkLlxuIiwgeGlkKTsKKwkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gX19lcnJvcjsKKwkJfQogCQlzdHJsY3B5KGNhcmQtPmlkLCB4aWQsIHNpemVvZihjYXJkLT5pZCkpOwogCX0KIAllcnIgPSAwOwpAQCAtMTk1LDYgKzIwOCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNvbnRyb2xzKTsKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y3RsX2ZpbGVzKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+ZmlsZXNfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmZpbGVzX2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPnNodXRkb3duX3NsZWVwKTsKICNpZmRlZiBDT05GSUdfUE0KIAltdXRleF9pbml0KCZjYXJkLT5wb3dlcl9sb2NrKTsKQEAgLTIwMiwyNiArMjE2LDI4IEBACiAjZW5kaWYKIAkvKiB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gdGhlIHVzZXIgc3BhY2UgdW50aWwgKi8KIAkvKiBzbmRfY2FyZHNfYml0bWFzayBhbmQgc25kX2NhcmRzIGFyZSBzZXQgd2l0aCBzbmRfY2FyZF9yZWdpc3RlciAqLwotCWlmICgoZXJyID0gc25kX2N0bF9jcmVhdGUoY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRkKCJ1bmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbCBtaW5vcnNcbiIpOworCWVyciA9IHNuZF9jdGxfY3JlYXRlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBjb250cm9sIG1pbm9yc1xuIik7CiAJCWdvdG8gX19lcnJvcjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfaW5mb19jYXJkX2NyZWF0ZShjYXJkKSkgPCAwKSB7Ci0JCXNuZF9wcmludGQoInVuYWJsZSB0byBjcmVhdGUgY2FyZCBpbmZvXG4iKTsKKwllcnIgPSBzbmRfaW5mb19jYXJkX2NyZWF0ZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gY3JlYXRlIGNhcmQgaW5mb1xuIik7CiAJCWdvdG8gX19lcnJvcl9jdGw7CiAJfQogCWlmIChleHRyYV9zaXplID4gMCkKIAkJY2FyZC0+cHJpdmF0ZV9kYXRhID0gKGNoYXIgKiljYXJkICsgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZCk7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRfcmV0ID0gY2FyZDsKKwlyZXR1cm4gMDsKIAogICAgICAgX19lcnJvcl9jdGw6CiAJc25kX2RldmljZV9mcmVlX2FsbChjYXJkLCBTTkRSVl9ERVZfQ01EX1BSRSk7CiAgICAgICBfX2Vycm9yOgogCWtmcmVlKGNhcmQpOwotICAgICAgCXJldHVybiBOVUxMOworICAJcmV0dXJuIGVycjsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9uZXcpOworRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9jcmVhdGUpOwogCiAvKiByZXR1cm4gbm9uLXplcm8gaWYgYSBjYXJkIGlzIGFscmVhZHkgbG9ja2VkICovCiBpbnQgc25kX2NhcmRfbG9ja2VkKGludCBjYXJkKQpAQCAtMjU5LDYgKzI3NSw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfZGYsICZzaHV0ZG93bl9maWxlcywgc2h1dGRvd25fbGlzdCkgewogCQlpZiAoX2RmLT5maWxlID09IGZpbGUpIHsKIAkJCWRmID0gX2RmOworCQkJbGlzdF9kZWxfaW5pdCgmZGYtPnNodXRkb3duX2xpc3QpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zNDcsOCArMzY0LDcgQEAKIAkvKiBwaGFzZSAyOiByZXBsYWNlIGZpbGUtPmZfb3Agd2l0aCBzcGVjaWFsIGR1bW15IG9wZXJhdGlvbnMgKi8KIAkKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCW1maWxlID0gY2FyZC0+ZmlsZXM7Ci0Jd2hpbGUgKG1maWxlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtZmlsZSwgJmNhcmQtPmZpbGVzX2xpc3QsIGxpc3QpIHsKIAkJZmlsZSA9IG1maWxlLT5maWxlOwogCiAJCS8qIGl0J3MgY3JpdGljYWwgcGFydCwgdXNlIGVuZGxlc3MgbG9vcCAqLwpAQCAtMzYxLDggKzM3Nyw2IEBACiAKIAkJbWZpbGUtPmZpbGUtPmZfb3AgPSAmc25kX3NodXRkb3duX2Zfb3BzOwogCQlmb3BzX2dldChtZmlsZS0+ZmlsZS0+Zl9vcCk7Ci0JCQotCQltZmlsZSA9IG1maWxlLT5uZXh0OwogCX0KIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CQogCkBAIC00NDIsNyArNDU2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JaWYgKGNhcmQtPmZpbGVzID09IE5VTEwpCisJaWYgKGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKQogCQlmcmVlX25vdyA9IDE7CiAJZWxzZQogCQljYXJkLT5mcmVlX29uX2xhc3RfY2xvc2UgPSAxOwpAQCAtNDYyLDcgKzQ3Niw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiB3YWl0LCB1bnRpbCBhbGwgZGV2aWNlcyBhcmUgcmVhZHkgZm9yIHRoZSBmcmVlIG9wZXJhdGlvbiAqLwotCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGNhcmQtPmZpbGVzID09IE5VTEwpOworCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKTsKIAlzbmRfY2FyZF9kb19mcmVlKGNhcmQpOwogCXJldHVybiAwOwogfQpAQCAtODA5LDE1ICs4MjMsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWZpbGUtPmZpbGUgPSBmaWxlOwogCW1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCA9IE5VTEw7Ci0JbWZpbGUtPm5leHQgPSBOVUxMOwogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJaWYgKGNhcmQtPnNodXRkb3duKSB7CiAJCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAkJa2ZyZWUobWZpbGUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWZpbGUtPm5leHQgPSBjYXJkLT5maWxlczsKLQljYXJkLT5maWxlcyA9IG1maWxlOworCWxpc3RfYWRkKCZtZmlsZS0+bGlzdCwgJmNhcmQtPmZpbGVzX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgzOSwyOSArODUxLDIwIEBACiAgKi8KIGludCBzbmRfY2FyZF9maWxlX3JlbW92ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICptZmlsZSwgKnBmaWxlID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbWZpbGUsICpmb3VuZCA9IE5VTEw7CiAJaW50IGxhc3RfY2xvc2UgPSAwOwogCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQltZmlsZSA9IGNhcmQtPmZpbGVzOwotCXdoaWxlIChtZmlsZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobWZpbGUsICZjYXJkLT5maWxlc19saXN0LCBsaXN0KSB7CiAJCWlmIChtZmlsZS0+ZmlsZSA9PSBmaWxlKSB7Ci0JCQlpZiAocGZpbGUpCi0JCQkJcGZpbGUtPm5leHQgPSBtZmlsZS0+bmV4dDsKLQkJCWVsc2UKLQkJCQljYXJkLT5maWxlcyA9IG1maWxlLT5uZXh0OworCQkJbGlzdF9kZWwoJm1maWxlLT5saXN0KTsKKwkJCWlmIChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApCisJCQkJZm9wc19wdXQobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKTsKKwkJCWZvdW5kID0gbWZpbGU7CiAJCQlicmVhazsKIAkJfQotCQlwZmlsZSA9IG1maWxlOwotCQltZmlsZSA9IG1maWxlLT5uZXh0OwogCX0KLQlpZiAobWZpbGUgJiYgbWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKSB7Ci0JCWZvcHNfcHV0KG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCk7Ci0JCXNwaW5fbG9jaygmc2h1dGRvd25fbG9jayk7Ci0JCWxpc3RfZGVsKCZtZmlsZS0+c2h1dGRvd25fbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZzaHV0ZG93bl9sb2NrKTsKLQl9Ci0JaWYgKGNhcmQtPmZpbGVzID09IE5VTEwpCisJaWYgKGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKQogCQlsYXN0X2Nsb3NlID0gMTsKIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJaWYgKGxhc3RfY2xvc2UpIHsKQEAgLTg2OSwxMSArODcyLDExIEBACiAJCWlmIChjYXJkLT5mcmVlX29uX2xhc3RfY2xvc2UpCiAJCQlzbmRfY2FyZF9kb19mcmVlKGNhcmQpOwogCX0KLQlpZiAoIW1maWxlKSB7CisJaWYgKCFmb3VuZCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBTFNBIGNhcmQgZmlsZSByZW1vdmUgcHJvYmxlbSAoJXApXG4iLCBmaWxlKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWtmcmVlKG1maWxlKTsKKwlrZnJlZShmb3VuZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvamFjay5jIGIvc291bmQvY29yZS9qYWNrLmMKaW5kZXggMDc3YTg1Mi4uYzgyNTRjNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9qYWNrLmMKKysrIGIvc291bmQvY29yZS9qYWNrLmMKQEAgLTIzLDYgKzIzLDE0IEBACiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAorc3RhdGljIGludCBqYWNrX3R5cGVzW10gPSB7CisJU1dfSEVBRFBIT05FX0lOU0VSVCwKKwlTV19NSUNST1BIT05FX0lOU0VSVCwKKwlTV19MSU5FT1VUX0lOU0VSVCwKKwlTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCwKKwlTV19WSURFT09VVF9JTlNFUlQsCit9OworCiBzdGF0aWMgaW50IHNuZF9qYWNrX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9qYWNrICpqYWNrID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKQEAgLTc5LDYgKzg3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7CiAJaW50IGVycjsKKwlpbnQgaTsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0gc25kX2phY2tfZGV2X2ZyZWUsCiAJCS5kZXZfcmVnaXN0ZXIgPSBzbmRfamFja19kZXZfcmVnaXN0ZXIsCkBAIC0xMDAsMTggKzEwOSwxMCBAQAogCiAJamFjay0+dHlwZSA9IHR5cGU7CiAKLQlpZiAodHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0hFQURQSE9ORV9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTElORU9VVCkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0xJTkVPVVRfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX01JQ1JPUEhPTkUpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19NSUNST1BIT05FX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGphY2tfdHlwZXMpOyBpKyspCisJCWlmICh0eXBlICYgKDEgPDwgaSkpCisJCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAorCQkJCQkgICAgIGphY2tfdHlwZXNbaV0pOwogCiAJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0pBQ0ssIGphY2ssICZvcHMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTU0LDIxICsxNTUsMTcgQEAKICAqLwogdm9pZCBzbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLCBpbnQgc3RhdHVzKQogeworCWludCBpOworCiAJaWYgKCFqYWNrKQogCQlyZXR1cm47CiAKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0hFQURQSE9ORV9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0hFQURQSE9ORSk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19MSU5FT1VUKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfTElORU9VVF9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0xJTkVPVVQpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTUlDUk9QSE9ORSkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX01JQ1JPUEhPTkVfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19NSUNST1BIT05FKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX01FQ0hBTklDQUwpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTUVDSEFOSUNBTCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoamFja190eXBlcyk7IGkrKykgeworCQlpbnQgdGVzdGJpdCA9IDEgPDwgaTsKKwkJaWYgKGphY2stPnR5cGUgJiB0ZXN0Yml0KQorCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIGphY2tfdHlwZXNbaV0sCisJCQkJCSAgICBzdGF0dXMgJiB0ZXN0Yml0KTsKKwl9CiAKIAlpbnB1dF9zeW5jKGphY2stPmlucHV0X2Rldik7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21pc2MuYyBiL3NvdW5kL2NvcmUvbWlzYy5jCmluZGV4IDM4NTI0ZjYuLmE5NzEwZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvbWlzYy5jCkBAIC05NSwxMiArOTUsMTQgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCWZvciAocSA9IGxpc3Q7IHEtPnN1YnZlbmRvcjsgcSsrKQotCQlpZiAocS0+c3VidmVuZG9yID09IHBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgotCQkgICAgKCFxLT5zdWJkZXZpY2UgfHwgcS0+c3ViZGV2aWNlID09IHBjaS0+c3Vic3lzdGVtX2RldmljZSkpCisJZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKKwkJaWYgKHEtPnN1YnZlbmRvciAhPSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKKwkJICAgIChwY2ktPnN1YnN5c3RlbV9kZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQogCQkJcmV0dXJuIHE7CisJfQogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKHNuZF9wY2lfcXVpcmtfbG9va3VwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwppbmRleCA0NjkwYjhiLi5lNTcwNjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwpAQCAtNjkyLDYgKzY5Miw5IEBACiAJCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZTFfdm9sKGZtaXhlciwgcHNsb3QsIHNsb3QtPm51bWlkW1NORFJWX01JWEVSX09TU19JVEVNX1BWT0xVTUVdLCBsZWZ0LCByaWdodCk7CiAJCWlmIChzbG90LT5wcmVzZW50ICYgU05EUlZfTUlYRVJfT1NTX1BSRVNFTlRfQ1ZPTFVNRSkKIAkJCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZTFfdm9sKGZtaXhlciwgcHNsb3QsIHNsb3QtPm51bWlkW1NORFJWX01JWEVSX09TU19JVEVNX0NWT0xVTUVdLCBsZWZ0LCByaWdodCk7CisJfSBlbHNlIGlmIChzbG90LT5wcmVzZW50ICYgU05EUlZfTUlYRVJfT1NTX1BSRVNFTlRfQ1ZPTFVNRSkgeworCQlzbmRfbWl4ZXJfb3NzX3B1dF92b2x1bWUxX3ZvbChmbWl4ZXIsIHBzbG90LAorCQkJc2xvdC0+bnVtaWRbU05EUlZfTUlYRVJfT1NTX0lURU1fQ1ZPTFVNRV0sIGxlZnQsIHJpZ2h0KTsKIAl9IGVsc2UgaWYgKHNsb3QtPnByZXNlbnQgJiBTTkRSVl9NSVhFUl9PU1NfUFJFU0VOVF9HVk9MVU1FKSB7CiAJCXNuZF9taXhlcl9vc3NfcHV0X3ZvbHVtZTFfdm9sKGZtaXhlciwgcHNsb3QsIHNsb3QtPm51bWlkW1NORFJWX01JWEVSX09TU19JVEVNX0dWT0xVTUVdLCBsZWZ0LCByaWdodCk7CiAJfSBlbHNlIGlmIChzbG90LT5wcmVzZW50ICYgU05EUlZfTUlYRVJfT1NTX1BSRVNFTlRfR0xPQkFMKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggMGExNzk4ZS4uZGRhMDAwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtMTE2MCw5ICsxMTYwLDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogd3JpdGU6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGU6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRlOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTE5Niw5ICsxMTk4LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZDogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQ6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMjQyLDkgKzEyNDYsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTI3OCw5ICsxMjg0LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZHY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZHY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWR2OiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWR2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RSQUlOLCBOVUxMKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTUzMyw3ICsxNTQxLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJzeW5jMTogc2l6ZSA9ICVsaVxuIiwgc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInN5bmMxOiBzaXplID0gJWxpXG4iLCBzaXplKTsKICNlbmRpZgogCXdoaWxlICgxKSB7CiAJCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIsIHNpemUsIDEpOwpAQCAtMTU5MCw3ICsxNTk4LDcgQEAKIAkJbXV0ZXhfbG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKIAkJaWYgKHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKLQkJCXByaW50aygic3luYzogYnVmZmVyX3VzZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IGJ1ZmZlcl91c2VkXG4iKTsKICNlbmRpZgogCQkJc2l6ZSA9ICg4ICogKHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMgLSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpICsgNykgLyB3aWR0aDsKIAkJCXNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKGZvcm1hdCwKQEAgLTE2MDMsNyArMTYxMSw3IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAocnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPiAwKSB7CiAjaWZkZWYgT1NTX0RFQlVHCi0JCQlwcmludGsoInN5bmM6IHBlcmlvZF9wdHJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IHBlcmlvZF9wdHJcbiIpOwogI2VuZGlmCiAJCQlzaXplID0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyAtIHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyOwogCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UoZm9ybWF0LApAQCAtMTg5NSw3ICsxOTAzLDkgQEAKIAogc3RhdGljIGludCBzbmRfcGNtX29zc19ub25ibG9jayhzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk1Miw3ICsxOTYyLDcgQEAKIAlpbnQgZXJyLCBjbWQ7CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHRyaWdnZXIgPSAweCV4XG4iLCB0cmlnZ2VyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogdHJpZ2dlciA9IDB4JXhcbiIsIHRyaWdnZXIpOwogI2VuZGlmCiAJCiAJcHN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKQEAgLTIxNzAsNyArMjE4MCw5IEBACiAJfQogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBzcGFjZTogYnl0ZXMgPSAlaSwgZnJhZ21lbnRzID0gJWksIGZyYWdzdG90YWwgPSAlaSwgZnJhZ3NpemUgPSAlaVxuIiwgaW5mby5ieXRlcywgaW5mby5mcmFnbWVudHMsIGluZm8uZnJhZ3N0b3RhbCwgaW5mby5mcmFnc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHNwYWNlOiBieXRlcyA9ICVpLCBmcmFnbWVudHMgPSAlaSwgIgorCSAgICAgICAiZnJhZ3N0b3RhbCA9ICVpLCBmcmFnc2l6ZSA9ICVpXG4iLAorCSAgICAgICBpbmZvLmJ5dGVzLCBpbmZvLmZyYWdtZW50cywgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKICNlbmRpZgogCWlmIChjb3B5X3RvX3VzZXIoX2luZm8sICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0NzMsNyArMjQ4NSw3IEBACiAJaWYgKCgoY21kID4+IDgpICYgMHhmZikgIT0gJ1AnKQogCQlyZXR1cm4gLUVJTlZBTDsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IGlvY3RsID0gMHgleFxuIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogaW9jdGwgPSAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CkBAIC0yNjI3LDcgKzI2MzksOCBAQAogI2Vsc2UKIAl7CiAJCXNzaXplX3QgcmVzID0gc25kX3BjbV9vc3NfcmVhZDEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKLQkJcHJpbnRrKCJwY21fb3NzOiByZWFkICVsaSBieXRlcyAocmV0dXJuZWQgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkICVsaSBieXRlcyAiCisJCSAgICAgICAiKHJldHVybmVkICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMjY0Niw3ICsyNjU5LDggQEAKIAlzdWJzdHJlYW0tPmZfZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlyZXN1bHQgPSBzbmRfcGNtX29zc193cml0ZTEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwKKwkgICAgICAgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjcyMCw3ICsyNzM0LDcgQEAKIAlpbnQgZXJyOwogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIGJlZ2luXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBiZWdpblxuIik7CiAjZW5kaWYKIAlwY21fb3NzX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3dpdGNoICgoYXJlYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpIHsKQEAgLTI3NzAsNyArMjc4NCw4IEBACiAJcnVudGltZS0+c2lsZW5jZV90aHJlc2hvbGQgPSAwOwogCXJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA9IDA7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIG9rLCBieXRlcyA9IDB4JXhcbiIsIHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBvaywgYnl0ZXMgPSAweCV4XG4iLAorCSAgICAgICBydW50aW1lLT5vc3MubW1hcF9ieXRlcyk7CiAjZW5kaWYKIAkvKiBJbiBtbWFwIG1vZGUgd2UgbmV2ZXIgc3RvcCAqLwogCXJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkID0gcnVudGltZS0+Ym91bmRhcnk7CkBAIC0yODcyLDcgKzI4ODcsNyBAQAogCQkJc2V0dXAgPSBrbWFsbG9jKHNpemVvZigqc2V0dXApLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghIHNldHVwKSB7CiAJCQkJYnVmZmVyLT5lcnJvciA9IC1FTk9NRU07Ci0JCQkJbXV0ZXhfbG9jaygmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwkJCQltdXRleF91bmxvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaWYgKHBzdHItPm9zcy5zZXR1cF9saXN0ID09IE5VTEwpCkBAIC0yODg2LDcgKzI5MDEsNyBAQAogCQkJaWYgKCEgdGVtcGxhdGUudGFza19uYW1lKSB7CiAJCQkJa2ZyZWUoc2V0dXApOwogCQkJCWJ1ZmZlci0+ZXJyb3IgPSAtRU5PTUVNOwotCQkJCW11dGV4X2xvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCmluZGV4IGNhMmY0YzMuLmI5YWZhYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAorKysgYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKQEAgLTE3Niw5ICsxNzYsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBQTFVHSU5fREVCVUcKLSNkZWZpbmUgcGRwcmludGYoIGZtdCwgYXJncy4uLiApIHByaW50ayggInBsdWdpbjogIiBmbXQsICMjYXJncykKKyNkZWZpbmUgcGRwcmludGYoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAicGx1Z2luOiAiIGZtdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgcGRwcmludGYoIGZtdCwgYXJncy4uLiApIAorI2RlZmluZSBwZHByaW50ZihmbXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9fUENNX1BMVUdJTl9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCAxOTJhNDMzLi4xNDU5MzFhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTY2Nyw3ICs2NjcsNiBAQAogCQlzcGluX2xvY2tfaW5pdCgmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLmxvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLnN1YnN0cmVhbXMpOwogCQlsaXN0X2FkZF90YWlsKCZzdWJzdHJlYW0tPmxpbmtfbGlzdCwgJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5zdWJzdHJlYW1zKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnN1YnN0cmVhbS0+dGltZXJfbG9jayk7CiAJCWF0b21pY19zZXQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCwgMCk7CiAJCXByZXYgPSBzdWJzdHJlYW07CiAJfQpAQCAtNjkyLDcgKzY5MSw3IEBACiAgKgogICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKK2ludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZGV2aWNlLAogCQlpbnQgcGxheWJhY2tfY291bnQsIGludCBjYXB0dXJlX2NvdW50LAogCSAgICAgICAgc3RydWN0IHNuZF9wY20gKiogcnBjbSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggOTIxNjkxMC4uZmJiMmUzOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTEyNSwyMyArMTI1LDMyIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSkJKChzdWJzdHJlYW0pLT5wc3RyLT54cnVuX2RlYnVnKQorI2Vsc2UKKyNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pCTAKKyNlbmRpZgorCisjZGVmaW5lIGR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pIGRvIHsJXAorCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pID4gMSkJXAorCQkJZHVtcF9zdGFjaygpOwkJXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyB2b2lkIHhydW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSkgewogCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgIlhSVU46IHBjbUMlZEQlZCVjXG4iLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmNhcmQtPm51bWJlciwKIAkJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsCiAJCQkgICBzdWJzdHJlYW0tPnN0cmVhbSA/ICdjJyA6ICdwJyk7Ci0JCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJZHVtcF9zdGFjaygpOworCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsKIAl9Ci0jZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKIHsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CiAKQEAgLTE1MCwxNyArMTU5LDIxIEBACiAJcG9zID0gc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKTsKIAlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikKIAkJcmV0dXJuIHBvczsgLyogWFJVTiAqLwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAocG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgICJCVUc6IHN0cmVhbSA9ICVpLCBwb3MgPSAweCVseCwgYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogc3RyZWFtID0gJWksIHBvcyA9IDB4JWx4LCAiCisJCQkJICAgImJ1ZmZlciBzaXplID0gMHglbHgsIHBlcmlvZCBzaXplID0gMHglbHhcbiIsCisJCQkJICAgc3Vic3RyZWFtLT5zdHJlYW0sIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCQkJICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQl9CisJCXBvcyA9IDA7CiAJfQotI2VuZGlmCiAJcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKIAlyZXR1cm4gcG9zOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQogewogCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogCkBAIC0xODIsMTEgKzE5NSwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorI2RlZmluZSBod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCBmbXQsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkpIHsJCQkJXAorCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgewkJCVwKKwkJCQlzbmRfcHJpbnRkKCJQQ006ICIgZm10LCAjI2FyZ3MpOwlcCisJCQl9CQkJCQkJXAorCQkJZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSk7CQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9pbnRlcnJ1cHQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgbmV3X2h3X3B0ciwgaHdfcHRyX2ludGVycnVwdDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0LCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwogCiAJcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOwpAQCAtMTk0LDM2ICsyMTcsNTMgQEAKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQlpZiAocnVudGltZS0+cGVyaW9kX3NpemUgPT0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCWdvdG8gX19uZXh0X2J1ZjsKLQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwogCWh3X3B0cl9pbnRlcnJ1cHQgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsgcnVudGltZS0+cGVyaW9kX3NpemU7Ci0KLQlkZWx0YSA9IGh3X3B0cl9pbnRlcnJ1cHQgLSBuZXdfaHdfcHRyOwotCWlmIChkZWx0YSA+IDApIHsKLQkJaWYgKChzbmRfcGNtX3VmcmFtZXNfdClkZWx0YSA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMikgewotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMSAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKLQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzFdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwotCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJCQlkdW1wX3N0YWNrKCk7Ci0JCQl9Ci0jZW5kaWYKLQkJCXJldHVybiAwOwotCQl9Ci0JICAgICAgX19uZXh0X2J1ZjoKLQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChydW50aW1lLT5od19wdHJfYmFzZSA9PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gMDsKLQkJbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7CisJaWYgKGh3X3B0cl9pbnRlcnJ1cHQgPj0gcnVudGltZS0+Ym91bmRhcnkpIHsKKwkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKKwkJaWYgKGh3X2Jhc2UgPCBydW50aW1lLT5ib3VuZGFyeSAvIDIpCisJCQkvKiBod19iYXNlIHdhcyBhbHJlYWR5IGxhcHBlZDsgcmVjYWxjIGRlbHRhICovCisJCQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwogCX0KLQorCWlmIChkZWx0YSA8IDApIHsKKwkJZGVsdGEgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChkZWx0YSA8IDApIHsKKwkJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIAorCQkJCSAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAiCisJCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgaW50cl9wdHI9JWxkKVxuIiwKKwkJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylwb3MsCisJCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKKwkJCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KKwkJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyID0gaHdfcHRyX2ludGVycnVwdDsKKwkJCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KKwkJCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJZGVsdGEgPSAwOworCQl9IGVsc2UgeworCQkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJCWh3X2Jhc2UgPSAwOworCQkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJCX0KKwl9CisJaWYgKGRlbHRhID4gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKKwkJCSAgICAgIkxvc3QgaW50ZXJydXB0cz8gIgorCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAorCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpZGVsdGEsCisJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOworCQkvKiByZWJhc2UgaHdfcHRyX2ludGVycnVwdCAqLworCQlod19wdHJfaW50ZXJydXB0ID0KKwkJCW5ld19od19wdHIgLSBuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemU7CisJfQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCiAJICAgIHJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA+IDApCiAJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIG5ld19od19wdHIpOwogCisJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSBod19iYXNlOwogCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gbmV3X2h3X3B0cjsKLQlydW50aW1lLT5od19wdHJfaW50ZXJydXB0ID0gbmV3X2h3X3B0ciAtIG5ld19od19wdHIgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwlydW50aW1lLT5od19wdHJfaW50ZXJydXB0ID0gaHdfcHRyX2ludGVycnVwdDsKIAogCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOwogfQpAQCAtMjMzLDcgKzI3Myw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0ciwgbmV3X2h3X3B0cjsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwogCiAJb2xkX2h3X3B0ciA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOwpAQCAtMjQyLDI5ICsyODIsMzggQEAKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwogCi0JZGVsdGEgPSBvbGRfaHdfcHRyIC0gbmV3X2h3X3B0cjsKLQlpZiAoZGVsdGEgPiAwKSB7Ci0JCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JCQlpZiAocnVudGltZS0+cGVyaW9kcyA+IDIgJiYgc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7Ci0JCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsyXSAoc3RyZWFtID0gJWksIGRlbHRhOiAtJWxkLCBtYXggaml0dGVyID0gJWxkKTogd3JvbmcgaW50ZXJydXB0IGFja25vd2xlZGdlP1xuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKSBkZWx0YSwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKTsKLQkJCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCQkJZHVtcF9zdGFjaygpOwotCQkJfQotI2VuZGlmCisJZGVsdGEgPSBuZXdfaHdfcHRyIC0gb2xkX2h3X3B0cjsKKwlpZiAoZGVsdGEgPCAwKSB7CisJCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoZGVsdGEgPCAwKSB7CisJCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKKwkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdICIKKwkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBvbGRfcHRyPSVsZClcbiIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpb2xkX2h3X3B0cik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlydW50aW1lLT5od19wdHJfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKHJ1bnRpbWUtPmh3X3B0cl9iYXNlID09IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSAwOwotCQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJaHdfYmFzZSA9IDA7CisJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCX0KKwlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSAmJiBydW50aW1lLT5wZXJpb2RzID4gMSkgeworCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAorCQkJICAgICAiaHdfcHRyIHNraXBwaW5nISAiCisJCQkgICAgICIocG9zPSVsZCwgZGVsdGE9JWxkLCBwZXJpb2Q9JWxkKVxuIiwKKwkJCSAgICAgKGxvbmcpcG9zLCAobG9uZylkZWx0YSwKKwkJCSAgICAgKGxvbmcpcnVudGltZS0+cGVyaW9kX3NpemUpOworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7CiAKKwlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwogCiAJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IGE3ODllZmMuLmExNTFmYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJaWYgKCEocGFyYW1zLT5ybWFzayAmICgxIDw8IGspKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CiAJCXByaW50aygiJTA0eCUwNHglMDR4JTA0eCAtPiAiLCBtLT5iaXRzWzNdLCBtLT5iaXRzWzJdLCBtLT5iaXRzWzFdLCBtLT5iaXRzWzBdKTsKICNlbmRpZgogCQljaGFuZ2VkID0gc25kX21hc2tfcmVmaW5lKG0sIGNvbnN0cnNfbWFzayhjb25zdHJzLCBrKSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJaWYgKCEocGFyYW1zLT5ybWFzayAmICgxIDw8IGspKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CiAJCWlmIChpLT5lbXB0eSkKIAkJCXByaW50aygiZW1wdHkiKTsKIAkJZWxzZQpAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQlpZiAoIWRvaXQpCiAJCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJCXByaW50aygiUnVsZSAlZCBbJXBdOiAiLCBrLCByLT5mdW5jKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJSdWxlICVkIFslcF06ICIsIGssIHItPmZ1bmMpOwogCQkJaWYgKHItPnZhciA+PSAwKSB7CiAJCQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNbci0+dmFyXSk7CiAJCQkJaWYgKGh3X2lzX21hc2soci0+dmFyKSkgewpAQCAtMzI0Niw5ICszMjQ2LDcgQEAKIAllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnJ1bnRpbWUtPmZhc3luYyk7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jIGIvc291bmQvY29yZS9wY21fdGltZXIuYwppbmRleCAyYzg5YzA0Li5jYTgwNjhiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKQEAgLTg1LDI1ICs4NSwxOSBAQAogCiBzdGF0aWMgaW50IHNuZF9wY21fdGltZXJfc3RhcnQoc3RydWN0IHNuZF90aW1lciAqIHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCiAJc3Vic3RyZWFtID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlzdWJzdHJlYW0tPnRpbWVyX3J1bm5pbmcgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fdGltZXJfc3RvcChzdHJ1Y3Qgc25kX3RpbWVyICogdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkKIAlzdWJzdHJlYW0gPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXN1YnN0cmVhbS0+dGltZXJfcnVubmluZyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jIGIvc291bmQvY29yZS9yYXdtaWRpLmMKaW5kZXggMDAyNzc3Yi4uNDczMjQ3YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9yYXdtaWRpLmMKKysrIGIvc291bmQvY29yZS9yYXdtaWRpLmMKQEAgLTIyNCwxNTYgKzIyNCwxNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogbG9vayBmb3IgYW4gYXZhaWxhYmxlIHN1YnN0cmVhbSBmb3IgdGhlIGdpdmVuIHN0cmVhbSBkaXJlY3Rpb247CisgKiBpZiBhIHNwZWNpZmljIHN1YmRldmljZSBpcyBnaXZlbiwgdHJ5IHRvIGFzc2lnbiBpdAorICovCitzdGF0aWMgaW50IGFzc2lnbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwgaW50IHN1YmRldmljZSwKKwkJCSAgICBpbnQgc3RyZWFtLCBpbnQgbW9kZSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICoqc3ViX3JldCkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9yYXdtaWRpX3N0ciAqcyA9ICZybWlkaS0+c3RyZWFtc1tzdHJlYW1dOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5mb19mbGFnc1syXSA9IHsKKwkJW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0gPSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVULAorCQlbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdID0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVULAorCX07CisKKwlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIGluZm9fZmxhZ3Nbc3RyZWFtXSkpCisJCXJldHVybiAtRU5YSU87CisJaWYgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA+PSBzLT5zdWJzdHJlYW1fY291bnQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChzLT5zdWJzdHJlYW1fb3BlbmVkID49IHMtPnN1YnN0cmVhbV9jb3VudCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwgJnMtPnN1YnN0cmVhbXMsIGxpc3QpIHsKKwkJaWYgKHN1YnN0cmVhbS0+b3BlbmVkKSB7CisJCQlpZiAoc3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUIHx8CisJCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN1YmRldmljZSA8IDAgfHwgc3ViZGV2aWNlID09IHN1YnN0cmVhbS0+bnVtYmVyKSB7CisJCQkqc3ViX3JldCA9IHN1YnN0cmVhbTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUFHQUlOOworfQorCisvKiBvcGVuIGFuZCBkbyByZWYtY291bnRpbmcgZm9yIHRoZSBnaXZlbiBzdWJzdHJlYW0gKi8KK3N0YXRpYyBpbnQgb3Blbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBpbnQgbW9kZSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKKwlpZiAoc3Vic3RyZWFtLT51c2VfY291bnQrKyA9PSAwKQorCQlzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nID0gMTsKKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCisJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgaW50IGNsZWFudXApOworCitzdGF0aWMgaW50IHJhd21pZGlfb3Blbl9wcml2KHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksIGludCBzdWJkZXZpY2UsIGludCBtb2RlLAorCQkJICAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc2lucHV0ID0gTlVMTCwgKnNvdXRwdXQgPSBOVUxMOworCWludCBlcnI7CisKKwlyZmlsZS0+aW5wdXQgPSByZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgeworCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCisJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorCQkJCSAgICAgICBtb2RlLCAmc2lucHV0KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgeworCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCisJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKKwkJCQkgICAgICAgbW9kZSwgJnNvdXRwdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisKKwlpZiAoc2lucHV0KSB7CisJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIG1vZGUpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisJaWYgKHNvdXRwdXQpIHsKKwkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNvdXRwdXQsIG1vZGUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKHNpbnB1dCkKKwkJCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgMCk7CisJCQlnb3RvIF9fZXJyb3I7CisJCX0KKwl9CisKKwlyZmlsZS0+cm1pZGkgPSBybWlkaTsKKwlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7CisJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7CisJcmV0dXJuIDA7CisKKyAgICAgIF9fZXJyb3I6CisJaWYgKHNpbnB1dCAmJiBzaW5wdXQtPnJ1bnRpbWUpCisJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOworCWlmIChzb3V0cHV0ICYmIHNvdXRwdXQtPnJ1bnRpbWUpCisJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCiBpbnQgc25kX3Jhd21pZGlfa2VybmVsX29wZW4oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLCBpbnQgc3ViZGV2aWNlLAogCQkJICAgIGludCBtb2RlLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqIHJmaWxlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDEsICpsaXN0MjsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzaW5wdXQgPSBOVUxMLCAqc291dHB1dCA9IE5VTEw7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3J1bnRpbWUgKmlucHV0ID0gTlVMTCwgKm91dHB1dCA9IE5VTEw7CiAJaW50IGVycjsKIAotCWlmIChyZmlsZSkKLQkJcmZpbGUtPmlucHV0ID0gcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcm1pZGkgPSBzbmRfcmF3bWlkaV9zZWFyY2goY2FyZCwgZGV2aWNlKTsKLQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAocm1pZGkgPT0gTlVMTCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIF9fZXJyb3IxOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghdHJ5X21vZHVsZV9nZXQocm1pZGktPmNhcmQtPm1vZHVsZSkpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBfX2Vycm9yMTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCXJldHVybiAtRU5YSU87CiAJfQotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCkpIHsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAoc3ViZGV2aWNlID49IDAgJiYgKHVuc2lnbmVkIGludClzdWJkZXZpY2UgPj0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAocm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQgPj0KLQkJICAgIHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCkpIHsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAoc3ViZGV2aWNlID49IDAgJiYgKHVuc2lnbmVkIGludClzdWJkZXZpY2UgPj0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZCA+PQotCQkgICAgcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQl9Ci0JbGlzdDEgPSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtcy5uZXh0OwotCXdoaWxlICgxKSB7Ci0JCWlmIChsaXN0MSA9PSAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbXMpIHsKLQkJCXNpbnB1dCA9IE5VTEw7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQkJCWVyciA9IC1FQUdBSU47Ci0JCQkJZ290byBfX2Vycm9yOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJc2lucHV0ID0gbGlzdF9lbnRyeShsaXN0MSwgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7Ci0JCWlmICgobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgJiYgc2lucHV0LT5vcGVuZWQpCi0JCQlnb3RvIF9fbmV4dGk7Ci0JCWlmIChzdWJkZXZpY2UgPCAwIHx8IChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPT0gc2lucHV0LT5udW1iZXIpKQotCQkJYnJlYWs7Ci0JICAgICAgX19uZXh0aToKLQkJbGlzdDEgPSBsaXN0MS0+bmV4dDsKLQl9Ci0JbGlzdDIgPSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMubmV4dDsKLQl3aGlsZSAoMSkgewotCQlpZiAobGlzdDIgPT0gJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcykgewotCQkJc291dHB1dCA9IE5VTEw7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gX19lcnJvcjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCXNvdXRwdXQgPSBsaXN0X2VudHJ5KGxpc3QyLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtLCBsaXN0KTsKLQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpIHsKLQkJCQlpZiAoc291dHB1dC0+b3BlbmVkICYmICFzb3V0cHV0LT5hcHBlbmQpCi0JCQkJCWdvdG8gX19uZXh0bzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHNvdXRwdXQtPm9wZW5lZCkKLQkJCQkJZ290byBfX25leHRvOwotCQkJfQotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPCAwIHx8IChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPT0gc291dHB1dC0+bnVtYmVyKSkKLQkJCWJyZWFrOwotCSAgICAgIF9fbmV4dG86Ci0JCWxpc3QyID0gbGlzdDItPm5leHQ7Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCWlmICgoZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc2lucHV0KSkgPCAwKQotCQkJZ290byBfX2Vycm9yOwotCQlpbnB1dCA9IHNpbnB1dC0+cnVudGltZTsKLQkJaWYgKChlcnIgPSBzaW5wdXQtPm9wcy0+b3BlbihzaW5wdXQpKSA8IDApCi0JCQlnb3RvIF9fZXJyb3I7Ci0JCXNpbnB1dC0+b3BlbmVkID0gMTsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQrKzsKLQl9IGVsc2UgewotCQlzaW5wdXQgPSBOVUxMOwotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJaWYgKHNvdXRwdXQtPm9wZW5lZCkKLQkJCWdvdG8gX19za2lwX291dHB1dDsKLQkJaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzb3V0cHV0KSkgPCAwKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkKLQkJCQlzaW5wdXQtPm9wcy0+Y2xvc2Uoc2lucHV0KTsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlvdXRwdXQgPSBzb3V0cHV0LT5ydW50aW1lOwotCQlpZiAoKGVyciA9IHNvdXRwdXQtPm9wcy0+b3Blbihzb3V0cHV0KSkgPCAwKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkKLQkJCQlzaW5wdXQtPm9wcy0+Y2xvc2Uoc2lucHV0KTsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCSAgICAgIF9fc2tpcF9vdXRwdXQ6Ci0JCXNvdXRwdXQtPm9wZW5lZCA9IDE7Ci0JCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKLQkJCXNvdXRwdXQtPmFwcGVuZCA9IDE7Ci0JICAgICAgCWlmIChzb3V0cHV0LT51c2VfY291bnQrKyA9PSAwKQotCQkJc291dHB1dC0+YWN0aXZlX3NlbnNpbmcgPSAxOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQrKzsKLQl9IGVsc2UgewotCQlzb3V0cHV0ID0gTlVMTDsKLQl9Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKHJmaWxlKSB7Ci0JCXJmaWxlLT5ybWlkaSA9IHJtaWRpOwotCQlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7Ci0JCXJmaWxlLT5vdXRwdXQgPSBzb3V0cHV0OwotCX0KLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAotICAgICAgX19lcnJvcjoKLQlpZiAoaW5wdXQgIT0gTlVMTCkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7Ci0JaWYgKG91dHB1dCAhPSBOVUxMKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7Ci0JbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLSAgICAgIF9fZXJyb3IxOgorCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwllcnIgPSByYXdtaWRpX29wZW5fcHJpdihybWlkaSwgc3ViZGV2aWNlLCBtb2RlLCByZmlsZSk7CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJaWYgKGVyciA8IDApCisJCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzg1LDEwICszNzIsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCBmZmxhZ3M7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyYXdtaWRpX2ZpbGU7CisJc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJhd21pZGlfZmlsZSA9IE5VTEw7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7CiAJc3RydWN0IHNuZF9jdGxfZmlsZSAqa2N0bDsKIAorCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgCisJCXJldHVybiAtRUlOVkFMOwkJLyogaW52YWxpZCBjb21iaW5hdGlvbiAqLworCiAJaWYgKG1haiA9PSBzbmRfbWFqb3IpIHsKIAkJcm1pZGkgPSBzbmRfbG9va3VwX21pbm9yX2RhdGEoaW1pbm9yKGlub2RlKSwKIAkJCQkJICAgICAgU05EUlZfREVWSUNFX1RZUEVfUkFXTUlESSk7CkBAIC00MDIsMjQgKzM5MiwyNSBAQAogCiAJaWYgKHJtaWRpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgCi0JCXJldHVybiAtRUlOVkFMOwkJLyogaW52YWxpZCBjb21iaW5hdGlvbiAqLworCisJaWYgKCF0cnlfbW9kdWxlX2dldChybWlkaS0+Y2FyZC0+bW9kdWxlKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAljYXJkID0gcm1pZGktPmNhcmQ7CiAJZXJyID0gc25kX2NhcmRfZmlsZV9hZGQoY2FyZCwgZmlsZSk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIF9fZXJyb3JfY2FyZDsKIAlmZmxhZ3MgPSBzbmRfcmF3bWlkaV9maWxlX2ZsYWdzKGZpbGUpOwogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSB8fCBtYWogPT0gU09VTkRfTUFKT1IpIC8qIE9TUyBlbXVsPyAqLwogCQlmZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORDsKLQlmZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0s7CiAJcmF3bWlkaV9maWxlID0ga21hbGxvYyhzaXplb2YoKnJhd21pZGlfZmlsZSksIEdGUF9LRVJORUwpOwogCWlmIChyYXdtaWRpX2ZpbGUgPT0gTlVMTCkgewotCQlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gX19lcnJvcjsKIAl9CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCXN1YmRldmljZSA9IC0xOwogCQlyZWFkX2xvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOwpAQCAtNDMxLDggKzQyMiw3IEBACiAJCQl9CiAJCX0KIAkJcmVhZF91bmxvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOwotCQllcnIgPSBzbmRfcmF3bWlkaV9rZXJuZWxfb3BlbihybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSwKLQkJCQkJICAgICAgc3ViZGV2aWNlLCBmZmxhZ3MsIHJhd21pZGlfZmlsZSk7CisJCWVyciA9IHJhd21pZGlfb3Blbl9wcml2KHJtaWRpLCBzdWJkZXZpY2UsIGZmbGFncywgcmF3bWlkaV9maWxlKTsKIAkJaWYgKGVyciA+PSAwKQogCQkJYnJlYWs7CiAJCWlmIChlcnIgPT0gLUVBR0FJTikgewpAQCAtNDUxLDY3ICs0NDEsODkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUocmF3bWlkaV9maWxlKTsKKwkJZ290byBfX2Vycm9yOworCX0KICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKIAlpZiAocmF3bWlkaV9maWxlLT5pbnB1dCAmJiByYXdtaWRpX2ZpbGUtPmlucHV0LT5ydW50aW1lKQogCQlyYXdtaWRpX2ZpbGUtPmlucHV0LT5ydW50aW1lLT5vc3MgPSAobWFqID09IFNPVU5EX01BSk9SKTsKIAlpZiAocmF3bWlkaV9maWxlLT5vdXRwdXQgJiYgcmF3bWlkaV9maWxlLT5vdXRwdXQtPnJ1bnRpbWUpCiAJCXJhd21pZGlfZmlsZS0+b3V0cHV0LT5ydW50aW1lLT5vc3MgPSAobWFqID09IFNPVU5EX01BSk9SKTsKICNlbmRpZgotCXJlbW92ZV93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JaWYgKGVyciA+PSAwKSB7Ci0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJhd21pZGlfZmlsZTsKLQl9IGVsc2UgewotCQlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKLQkJa2ZyZWUocmF3bWlkaV9maWxlKTsKLQl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmF3bWlkaV9maWxlOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCXJldHVybiAwOworCisgX19lcnJvcjoKKwlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKKyBfX2Vycm9yX2NhcmQ6CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKiByZmlsZSkKK3N0YXRpYyB2b2lkIGNsb3NlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBpbnQgY2xlYW51cCkKIHsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfcnVudGltZSAqcnVudGltZTsKKwlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZC0tOworCWlmICgtLXN1YnN0cmVhbS0+dXNlX2NvdW50KQorCQlyZXR1cm47CiAKLQlpZiAoc25kX0JVR19PTighcmZpbGUpKQotCQlyZXR1cm4gLUVOWElPOwotCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAocmZpbGUtPmlucHV0ICE9IE5VTEwpIHsKLQkJc3Vic3RyZWFtID0gcmZpbGUtPmlucHV0OwotCQlyZmlsZS0+aW5wdXQgPSBOVUxMOwotCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCQlzbmRfcmF3bWlkaV9pbnB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7Ci0JCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQlpZiAocnVudGltZS0+cHJpdmF0ZV9mcmVlICE9IE5VTEwpCi0JCQlydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQtLTsKLQl9Ci0JaWYgKHJmaWxlLT5vdXRwdXQgIT0gTlVMTCkgewotCQlzdWJzdHJlYW0gPSByZmlsZS0+b3V0cHV0OwotCQlyZmlsZS0+b3V0cHV0ID0gTlVMTDsKLQkJaWYgKC0tc3Vic3RyZWFtLT51c2VfY291bnQgPT0gMCkgewotCQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAoY2xlYW51cCkgeworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQpCisJCQlzbmRfcmF3bWlkaV9pbnB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7CisJCWVsc2UgewogCQkJaWYgKHN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcpIHsKIAkJCQl1bnNpZ25lZCBjaGFyIGJ1ZiA9IDB4ZmU7Ci0JCQkJLyogc2VuZGluZyBzaW5nbGUgYWN0aXZlIHNlbnNpbmcgbWVzc2FnZSB0byBzaHV0IHRoZSBkZXZpY2UgdXAgKi8KKwkJCQkvKiBzZW5kaW5nIHNpbmdsZSBhY3RpdmUgc2Vuc2luZyBtZXNzYWdlCisJCQkJICogdG8gc2h1dCB0aGUgZGV2aWNlIHVwCisJCQkJICovCiAJCQkJc25kX3Jhd21pZGlfa2VybmVsX3dyaXRlKHN1YnN0cmVhbSwgJmJ1ZiwgMSk7CiAJCQl9CiAJCQlpZiAoc25kX3Jhd21pZGlfZHJhaW5fb3V0cHV0KHN1YnN0cmVhbSkgPT0gLUVSRVNUQVJUU1lTKQogCQkJCXNuZF9yYXdtaWRpX291dHB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7Ci0JCQlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKLQkJCWlmIChydW50aW1lLT5wcml2YXRlX2ZyZWUgIT0gTlVMTCkKLQkJCQlydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOwotCQkJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOwotCQkJc3Vic3RyZWFtLT5hcHBlbmQgPSAwOwogCQl9Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZC0tOwogCX0KKwlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2ZyZWUpCisJCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7CisJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7CisJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOworCXN1YnN0cmVhbS0+YXBwZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgcmF3bWlkaV9yZWxlYXNlX3ByaXYoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlybWlkaSA9IHJmaWxlLT5ybWlkaTsKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJaWYgKHJmaWxlLT5pbnB1dCkgeworCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHJmaWxlLT5pbnB1dCwgMSk7CisJCXJmaWxlLT5pbnB1dCA9IE5VTEw7CisJfQorCWlmIChyZmlsZS0+b3V0cHV0KSB7CisJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgcmZpbGUtPm91dHB1dCwgMSk7CisJCXJmaWxlLT5vdXRwdXQgPSBOVUxMOworCX0KKwlyZmlsZS0+cm1pZGkgPSBOVUxMOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCXdha2VfdXAoJnJtaWRpLT5vcGVuX3dhaXQpOworfQorCisvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCitpbnQgc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlpZiAoc25kX0JVR19PTighcmZpbGUpKQorCQlyZXR1cm4gLUVOWElPOworCQorCXJtaWRpID0gcmZpbGUtPnJtaWRpOworCXJhd21pZGlfcmVsZWFzZV9wcml2KHJmaWxlKTsKIAltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiAwOwogfQpAQCAtNTIwLDE1ICs1MzIsMTQgQEAKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGU7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlpbnQgZXJyOwogCiAJcmZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2UocmZpbGUpOwogCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCXdha2VfdXAoJnJtaWRpLT5vcGVuX3dhaXQpOworCXJhd21pZGlfcmVsZWFzZV9wcml2KHJmaWxlKTsKIAlrZnJlZShyZmlsZSk7CiAJc25kX2NhcmRfZmlsZV9yZW1vdmUocm1pZGktPmNhcmQsIGZpbGUpOwotCXJldHVybiBlcnI7CisJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfcmF3bWlkaV9pbmZvKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKaW5kZXggYmY4ZDJiNC4uYzAxNTRhOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKKysrIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKQEAgLTE4MSw3ICsxODEsNyBAQAogLyogZm9yIGRlYnVnICovCiAjaWZkZWYgU05EUlZfU0VRX09TU19ERUJVRwogZXh0ZXJuIGludCBzZXFfb3NzX2RlYnVnOwotI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJZG8geyBpZiAoc2VxX29zc19kZWJ1ZyA+IDApIHNuZF9wcmludGsgeDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCWRvIHsgaWYgKHNlcV9vc3NfZGVidWcgPiAwKSBzbmRfcHJpbnRkIHg7IH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJLyoqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCmluZGV4IDAxMDFhOGIuLjI5ODk2YWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCkBAIC0zMjEsNyArMzIxLDggQEAKIAkJCWZyZWVwcmV2ID0gY2VsbDsKIAkJfSBlbHNlIHsKICNpZiAwCi0JCQlwcmludGsoInR5cGUgPSAlaSwgc291cmNlID0gJWksIGRlc3QgPSAlaSwgY2xpZW50ID0gJWlcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAidHlwZSA9ICVpLCBzb3VyY2UgPSAlaSwgZGVzdCA9ICVpLCAiCisJCQkgICAgICAgImNsaWVudCA9ICVpXG4iLAogCQkJCWNlbGwtPmV2ZW50LnR5cGUsCiAJCQkJY2VsbC0+ZXZlbnQuc291cmNlLmNsaWVudCwKIAkJCQljZWxsLT5ldmVudC5kZXN0LmNsaWVudCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2didWYuYyBiL3NvdW5kL2NvcmUvc2didWYuYwppbmRleCBkNDU2NGVkLi40ZTdlYzJiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NnYnVmLmMKKysrIGIvc291bmQvY29yZS9zZ2J1Zi5jCkBAIC0zOCw2ICszOCwxMCBAQAogCWlmICghIHNnYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChkbWFiLT5hcmVhKQorCQl2dW5tYXAoZG1hYi0+YXJlYSk7CisJZG1hYi0+YXJlYSA9IE5VTEw7CisKIAl0bXBiLmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOwogCXRtcGIuZGV2LmRldiA9IHNnYnVmLT5kZXY7CiAJZm9yIChpID0gMDsgaSA8IHNnYnVmLT5wYWdlczsgaSsrKSB7CkBAIC00OCw5ICs1Miw2IEBACiAJCXRtcGIuYnl0ZXMgPSAoc2didWYtPnRhYmxlW2ldLmFkZHIgJiB+UEFHRV9NQVNLKSA8PCBQQUdFX1NISUZUOwogCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJnRtcGIpOwogCX0KLQlpZiAoZG1hYi0+YXJlYSkKLQkJdnVubWFwKGRtYWItPmFyZWEpOwotCWRtYWItPmFyZWEgPSBOVUxMOwogCiAJa2ZyZWUoc2didWYtPnRhYmxlKTsKIAlrZnJlZShzZ2J1Zi0+cGFnZV90YWJsZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggNzk2NTMyMC4uM2YwMDUwZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMTgyNSwxMyArMTgyNSw5IEBACiBzdGF0aWMgaW50IHNuZF90aW1lcl91c2VyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzbmRfdGltZXJfdXNlciAqdHU7Ci0JaW50IGVycjsKIAogCXR1ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdHUtPmZhc3luYyk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnR1LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzbmRfdGltZXJfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS92bWFzdGVyLmMgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwppbmRleCA0Y2M1N2Y5Li4yNTc2MjRiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYworKysgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwpAQCAtNTAsMTggKzUwLDM4IEBACiAJc3RydWN0IGxpbmtfbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IGxpbmtfY3RsX2luZm8gaW5mbzsKIAlpbnQgdmFsc1syXTsJCS8qIGN1cnJlbnQgdmFsdWVzICovCisJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgc2xhdmU7IC8qIHRoZSBjb3B5IG9mIG9yaWdpbmFsIGNvbnRyb2wgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBpbnQgc2xhdmVfdXBkYXRlKHN0cnVjdCBsaW5rX3NsYXZlICpzbGF2ZSkKK3sKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOworCWludCBlcnIsIGNoOworCisJdWN0bCA9IGttYWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1Y3RsKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1Y3RsLT5pZCA9IHNsYXZlLT5zbGF2ZS5pZDsKKwllcnIgPSBzbGF2ZS0+c2xhdmUuZ2V0KCZzbGF2ZS0+c2xhdmUsIHVjdGwpOworCWZvciAoY2ggPSAwOyBjaCA8IHNsYXZlLT5pbmZvLmNvdW50OyBjaCsrKQorCQlzbGF2ZS0+dmFsc1tjaF0gPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKKwlrZnJlZSh1Y3RsKTsKKwlyZXR1cm4gMDsKK30KKwogLyogZ2V0IHRoZSBzbGF2ZSBjdGwgaW5mbyBhbmQgc2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZXMgKi8KIHN0YXRpYyBpbnQgc2xhdmVfaW5pdChzdHJ1Y3QgbGlua19zbGF2ZSAqc2xhdmUpCiB7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbzsKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsOwotCWludCBlcnIsIGNoOworCWludCBlcnI7CiAKLQlpZiAoc2xhdmUtPmluZm8uY291bnQpCi0JCXJldHVybiAwOyAvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJaWYgKHNsYXZlLT5pbmZvLmNvdW50KSB7CisJCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwkJaWYgKHNsYXZlLT5mbGFncyAmIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUpCisJCQlyZXR1cm4gc2xhdmVfdXBkYXRlKHNsYXZlKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJdWluZm8gPSBrbWFsbG9jKHNpemVvZigqdWluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVpbmZvKQpAQCAtODUsMTUgKzEwNSw3IEBACiAJc2xhdmUtPmluZm8ubWF4X3ZhbCA9IHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heDsKIAlrZnJlZSh1aW5mbyk7CiAKLQl1Y3RsID0ga21hbGxvYyhzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVjdGwpCi0JCXJldHVybiAtRU5PTUVNOwotCXVjdGwtPmlkID0gc2xhdmUtPnNsYXZlLmlkOwotCWVyciA9IHNsYXZlLT5zbGF2ZS5nZXQoJnNsYXZlLT5zbGF2ZSwgdWN0bCk7Ci0JZm9yIChjaCA9IDA7IGNoIDwgc2xhdmUtPmluZm8uY291bnQ7IGNoKyspCi0JCXNsYXZlLT52YWxzW2NoXSA9IHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbY2hdOwotCWtmcmVlKHVjdGwpOwotCXJldHVybiAwOworCXJldHVybiBzbGF2ZV91cGRhdGUoc2xhdmUpOwogfQogCiAvKiBpbml0aWFsaXplIG1hc3RlciB2b2x1bWUgKi8KQEAgLTIyOSw3ICsyNDEsOCBAQAogICogLSBsb2dhcml0aG1pYyB2b2x1bWUgY29udHJvbCAoZEIgbGV2ZWwpLCBubyBsaW5lYXIgdm9sdW1lCiAgKiAtIG1hc3RlciBjYW4gb25seSBhdHRlbnVhdGUgdGhlIHZvbHVtZSwgbm8gZ2FpbgogICovCi1pbnQgc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK2ludCBfc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbGlua19tYXN0ZXIgKm1hc3Rlcl9saW5rID0gc25kX2tjb250cm9sX2NoaXAobWFzdGVyKTsKIAlzdHJ1Y3QgbGlua19zbGF2ZSAqc3JlYzsKQEAgLTI0MSw2ICsyNTQsNyBAQAogCXNyZWMtPnNsYXZlID0gKnNsYXZlOwogCW1lbWNweShzcmVjLT5zbGF2ZS52ZCwgc2xhdmUtPnZkLCBzbGF2ZS0+Y291bnQgKiBzaXplb2YoKnNsYXZlLT52ZCkpOwogCXNyZWMtPm1hc3RlciA9IG1hc3Rlcl9saW5rOworCXNyZWMtPmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBvdmVycmlkZSBjYWxsYmFja3MgKi8KIAlzbGF2ZS0+aW5mbyA9IHNsYXZlX2luZm87CkBAIC0yNTQsOCArMjY4LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZzcmVjLT5saXN0LCAmbWFzdGVyX2xpbmstPnNsYXZlcyk7CiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2N0bF9hZGRfc2xhdmUpOworRVhQT1JUX1NZTUJPTChfc25kX2N0bF9hZGRfc2xhdmUpOwogCiAvKgogICogY3RsIGNhbGxiYWNrcyBmb3IgbWFzdGVyIGNvbnRyb2xzCkBAIC0zMjcsOCArMzQwLDIwIEBACiB9CiAKIAotLyoKLSAqIENyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorLyoqCisgKiBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sCisgKiBAbmFtZTogbmFtZSBzdHJpbmcgb2YgdGhlIGNvbnRyb2wgZWxlbWVudCB0byBjcmVhdGUKKyAqIEB0bHY6IG9wdGlvbmFsIFRMViBpbnQgYXJyYXkgZm9yIGRCIGluZm9ybWF0aW9uCisgKgorICogQ3JlYXRlcyBhIHZpcnR1YWwgbWF0c3RlciBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUgc3RyaW5nLgorICogUmV0dXJucyB0aGUgY3JlYXRlZCBjb250cm9sIGVsZW1lbnQsIG9yIE5VTEwgZm9yIGVycm9ycyAoRU5PTUVNKS4KKyAqCisgKiBBZnRlciBjcmVhdGluZyBhIHZtYXN0ZXIgZWxlbWVudCwgeW91IGNhbiBhZGQgdGhlIHNsYXZlIGNvbnRyb2xzCisgKiB2aWEgc25kX2N0bF9hZGRfc2xhdmUoKSBvciBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCgpLgorICoKKyAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBAdGx2IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIFRMViBpbmZvcm1hdGlvbgorICogZm9yIGRCIHNjYWxlIG9mIHRoZSBtYXN0ZXIgY29udHJvbC4gIEl0IHNob3VsZCBiZSBhIHNpbmdsZSBlbGVtZW50CisgKiB3aXRoICNTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSB0eXBlLCBhbmQgc2hvdWxkIGJlIHRoZSBtYXggMGRCLgogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdikKQEAgLTM2Nyw1ICszOTIsNCBAQAogCiAJcmV0dXJuIGtjdGw7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvS2NvbmZpZyBiL3NvdW5kL2RyaXZlcnMvS2NvbmZpZwppbmRleCAwYmNmMTQ2Li44NDcxNGE2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL0tjb25maWcKKysrIGIvc291bmQvZHJpdmVycy9LY29uZmlnCkBAIC0zMyw3ICszMyw3IEBACiAKIGNvbmZpZyBTTkRfUENTUAogCXRyaXN0YXRlICJQQy1TcGVha2VyIHN1cHBvcnQgKFJFQUQgSEVMUCEpIgotCWRlcGVuZHMgb24gUENTUEtSX1BMQVRGT1JNICYmIFg4Nl9QQyAmJiBISUdIX1JFU19USU1FUlMKKwlkZXBlbmRzIG9uIFBDU1BLUl9QTEFURk9STSAmJiBYODYgJiYgSElHSF9SRVNfVElNRVJTCiAJZGVwZW5kcyBvbiBJTlBVVAogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNORF9QQ00KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA3M2JlN2UxLi41NDIzOWQyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC01ODgsMTAgKzU4OCwxMCBAQAogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlkdW1teSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlkdW1teS0+Y2FyZCA9IGNhcmQ7CiAJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfUENNX0RFVklDRVMgJiYgaWR4IDwgcGNtX2RldnNbZGV2XTsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMgYi9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCmluZGV4IDc3ODM4NDMuLjE5NTBmZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKKysrIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwpAQCAtMTI3OSw5ICsxMjc5LDkgQEAKIAlpZiAoIWVuYWJsZVtkZXZdKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9tbDQwM19hYzk3Y3JfY3JlYXRlKGNhcmQsIHBmZGV2LCAmbWw0MDNfYWM5N2NyKTsKIAlpZiAoZXJyIDwgMCkgewogCQlQREVCVUcoSU5JVF9GQUlMVVJFLCAicHJvYmUoKTogY3JlYXRlIGZhaWxlZCFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCA1Yjk5NmYzLi4xNDlkMDVhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtNzMsOSArNzMsOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ0aGUgdWFydF9lbnRlciBvcHRpb24gaXMgb2Jzb2xldGU7IHJlbW92ZSBpdFxuIik7CiAKIAkqcmNhcmQgPSBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJNUFUtNDAxIFVBUlQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBjYXJkLT5kcml2ZXIpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4LCAiLCBjYXJkLT5zaG9ydG5hbWUsIHBvcnRbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210cGF2LmMgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKaW5kZXggNDhiNjRlNi4uMmY4ZjI5NSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHBhdi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwpAQCAtMzAzLDggKzMwMywxMCBAQAogCiAJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIDB4ZjUpOwogCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCBwb3J0cC0+aHdwb3J0KTsKLQkJLy9zbmRfcHJpbnRrKCJuZXcgb3V0cG9ydDogMHgleFxuIiwgKHVuc2lnbmVkIGludCkgcG9ydHAtPmh3cG9ydCk7Ci0KKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJuZXcgb3V0cG9ydDogMHgleFxuIiwKKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBvcnRwLT5od3BvcnQpOworCQkqLwogCQlpZiAoIShvdXRieXRlICYgMHg4MCkgJiYgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKQogCQkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgcG9ydHAtPnJ1bm5pbmdfc3RhdHVzKTsKIAl9CkBAIC01NDAsNyArNTQyLDcgQEAKIAogCXU4IHNieXQgPSBzbmRfbXRwYXZfZ2V0cmVnKG1jcmQsIFNSRUcpOwogCi0JLy9wcmludGsoInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgInNuZF9tdHBhdl9yZWFkX2J5dGVzKCkgc2J5dDogMHgleFxuIiwgc2J5dCk7ICovCiAKIAlpZiAoIShzYnl0ICYgU0lHU19CWVRFKSkKIAkJcmV0dXJuOwpAQCAtNTg1LDEyICs1ODcsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tdHBhdl9nZXRfSVNBKHN0cnVjdCBtdHBhdiAqIG1jYXJkKQogewogCWlmICgobWNhcmQtPnJlc19wb3J0ID0gcmVxdWVzdF9yZWdpb24ocG9ydCwgMywgIk1vdHVNVFBBViBNSURJIikpID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbWNhcmQtPnBvcnQgPSBwb3J0OwogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9tdHBhdl9pcnFoLCBJUlFGX0RJU0FCTEVELCAiTU9UVSBNVFBBViIsIG1jYXJkKSkgewotCQlzbmRfcHJpbnRrKCJNVFZBUCBJUlEgJWQgYnVzeVxuIiwgaXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVRWQVAgSVJRICVkIGJ1c3lcbiIsIGlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW1jYXJkLT5pcnEgPSBpcnE7CkBAIC02OTYsOSArNjk4LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBtdHBhdiAqbXRwX2NhcmQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqbXRwX2NhcmQpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCptdHBfY2FyZCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCW10cF9jYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZtdHBfY2FyZC0+c3BpbmxvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHM2NC5jIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCmluZGV4IDg3YmExZGQuLjkyODQ4MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYworKysgYi9zb3VuZC9kcml2ZXJzL210czY0LmMKQEAgLTk1NywxMCArOTU3LDEwIEBACiAJaWYgKChlcnIgPSBzbmRfbXRzNjRfcHJvYmVfcG9ydChwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGQoIkNhbm5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkVTSSAiIENBUkRfTkFNRSk7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogCQlnb3RvIF9fZXJyOwogCX0KIAotCXNuZF9wcmludGsoIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0lORk8gIkVTSSBNaWRpdGVybWluYWwgNDE0MCBvbiAweCVseFxuIiwgcC0+YmFzZSk7CiAJcmV0dXJuIDA7CiAKIF9fZXJyOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwppbmRleCA3ODA1ODIzLi42ZTMxZTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJb3BsMyA9IGh3LT5wcml2YXRlX2RhdGE7CiAJc3RhdHVzID0gaW5iKG9wbDMtPmxfcG9ydCk7CiAjaWYgMAotCXNuZF9wcmludGsoIkFkTGliIElSUSBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQWRMaWIgSVJRIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAjZW5kaWYKIAlpZiAoIShzdGF0dXMgJiAweDgwKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCmluZGV4IDE2ZmVhZmEuLjZlN2QwOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCWludCBpOwogCWNoYXIgKnN0ciA9ICJ4LjI0IjsKIAotCXByaW50aygidGltZSAlLjVpOiAlcyBbJS4yaV06ICIsIG9wbDMtPnVzZV90aW1lLCBzLCB2b2ljZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInRpbWUgJS41aTogJXMgWyUuMmldOiAiLCBvcGwzLT51c2VfdGltZSwgcywgdm9pY2UpOwogCWZvciAoaSA9IDA7IGkgPCBvcGwzLT5tYXhfdm9pY2VzOyBpKyspCiAJCXByaW50aygiJWMiLCAqKHN0ciArIG9wbDMtPnZvaWNlc1tpXS5zdGF0ZSArIDEpKTsKIAlwcmludGsoIlxuIik7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRU5EOyBpKyspIHsKIAkJaWYgKGJlc3RbaV0udm9pY2UgPj0gMCkgewogI2lmZGVmIERFQlVHX0FMTE9DCi0JCQlwcmludGsoIiVzICVpb3AgYWxsb2NhdGlvbiBvbiB2b2ljZSAlaVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlaW9wIGFsbG9jYXRpb24gb24gdm9pY2UgJWlcbiIsCiAJCQkgICAgICAgYWxsb2NfdHlwZVtpXSwgaW5zdHJfNG9wID8gNCA6IDIsCiAJCQkgICAgICAgYmVzdFtpXS52b2ljZSk7CiAjZW5kaWYKQEAgLTMxNyw3ICszMTcsNyBAQAogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIk5vdGUgb24sIGNoICVpLCBpbnN0ICVpLCBub3RlICVpLCB2ZWwgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9uLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaSwgdmVsICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSwgdmVsKTsKICNlbmRpZgogCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkJcmV0dXJuOwogCX0KICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gT1BMJWkgaW5zdHJ1bWVudDogJXNcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBPUEwlaSBpbnN0cnVtZW50OiAlc1xuIiwKIAkJICAgaW5zdHJfNG9wID8gMyA6IDIsIHBhdGNoLT5uYW1lKTsKICNlbmRpZgogCS8qIGluIFNZTlRIIG1vZGUsIGFwcGxpY2F0aW9uIHRha2VzIGNhcmUgb2Ygdm9pY2VzICovCkBAIC00MzEsNyArNDMxLDcgQEAKIAl9CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gc2V0dGluZyBPUEwzIGNvbm5lY3Rpb246IDB4JXhcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBzZXR0aW5nIE9QTDMgY29ubmVjdGlvbjogMHgleFxuIiwKIAkJICAgb3BsMy0+Y29ubmVjdGlvbl9yZWcpOwogI2VuZGlmCiAJLyoKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCS8qIFByb2dyYW0gdGhlIEZNIHZvaWNlIGNoYXJhY3RlcmlzdGljcyAqLwogCWZvciAoaSA9IDA7IGkgPCAoaW5zdHJfNG9wID8gNCA6IDIpOyBpKyspIHsKICNpZmRlZiBERUJVR19NSURJCi0JCXNuZF9wcmludGsoIiAgLS0+IHByb2dyYW1taW5nIG9wZXJhdG9yICVpXG4iLCBpKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBwcm9ncmFtbWluZyBvcGVyYXRvciAlaVxuIiwgaSk7CiAjZW5kaWYKIAkJb3Bfb2Zmc2V0ID0gc25kX29wbDNfcmVnbWFwW3ZvaWNlX29mZnNldF1baV07CiAKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWJsb2NrbnVtIHw9IE9QTDNfS0VZT05fQklUOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IHRyaWdnZXIgdm9pY2UgJWlcbiIsIHZvaWNlKTsKICNlbmRpZgogCS8qIFNldCBPUEwzIEtFWU9OX0JMT0NLIHJlZ2lzdGVyIG9mIHJlcXVlc3RlZCB2b2ljZSAqLyAKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJcHJnID0gZXh0cmFfcHJnIC0gMTsKIAkJfQogI2lmZGVmIERFQlVHX01JREkKLQkJc25kX3ByaW50aygiICoqKiBhbGxvY2F0aW5nIGV4dHJhIHByb2dyYW1cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAqKiogYWxsb2NhdGluZyBleHRyYSBwcm9ncmFtXG4iKTsKICNlbmRpZgogCQlnb3RvIF9fZXh0cmFfcHJnOwogCX0KQEAgLTYzMyw3ICs2MzMsNyBAQAogCiAJLyoga2lsbCB2b2ljZSAqLwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiBraWxsIHZvaWNlICVpXG4iLCB2b2ljZSk7CiAjZW5kaWYKIAlvcGwzX3JlZyA9IHJlZ19zaWRlIHwgKE9QTDNfUkVHX0tFWU9OX0JMT0NLICsgdm9pY2Vfb2Zmc2V0KTsKIAkvKiBjbGVhciBLZXkgT04gYml0ICovCkBAIC02NzAsNyArNjcwLDcgQEAKIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOb3RlIG9mZiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtLCBub3RlKTsKICNlbmRpZgogCkBAIC03MDksNyArNzA5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJLZXkgcHJlc3N1cmUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIktleSBwcmVzc3VyZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTcyMyw3ICs3MjMsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIlRlcm1pbmF0ZSBub3RlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJUZXJtaW5hdGUgbm90ZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIkNvbnRyb2xsZXIsIFRZUEUgPSAlaSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQ29udHJvbGxlciwgVFlQRSA9ICVpLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIHR5cGUsIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogCkBAIC04NDksNyArODQ5LDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJOUlBOLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogfQpAQCAtODY0LDYgKzg2NCw2IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiU1lTRVhcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiU1lTRVhcbiIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCmluZGV4IDlhMjI3MWQuLmE1NGIxZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jCkBAIC0yMjAsMTQgKzIyMCwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3VudCA8IChpbnQpc2l6ZW9mKHNiaSkpIHsKLQkJc25kX3ByaW50aygiRk0gRXJyb3I6IFBhdGNoIHJlY29yZCB0b28gc2hvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogUGF0Y2ggcmVjb3JkIHRvbyBzaG9ydFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoJnNiaSwgYnVmLCBzaXplb2Yoc2JpKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHNiaS5jaGFubmVsIDwgMCB8fCBzYmkuY2hhbm5lbCA+PSBTQkZNX01BWElOU1RSKSB7Ci0JCXNuZF9wcmludGsoIkZNIEVycm9yOiBJbnZhbGlkIGluc3RydW1lbnQgbnVtYmVyICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGTSBFcnJvcjogSW52YWxpZCBpbnN0cnVtZW50IG51bWJlciAlZFxuIiwKIAkJCSAgIHNiaS5jaGFubmVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjU0LDcgKzI1NCw5IEBACiAJb3BsMyA9IGFyZy0+cHJpdmF0ZV9kYXRhOwogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgU05EQ1RMX0ZNX0xPQURfSU5TVFI6Ci0JCQlzbmRfcHJpbnRrKCJPUEwzOiBPYnNvbGV0ZSBpb2N0bChTTkRDVExfRk1fTE9BRF9JTlNUUikgdXNlZC4gRml4IHRoZSBwcm9ncmFtLlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJPUEwzOiAiCisJCQkJICAgIk9ic29sZXRlIGlvY3RsKFNORENUTF9GTV9MT0FEX0lOU1RSKSB1c2VkLiAiCisJCQkJICAgIkZpeCB0aGUgcHJvZ3JhbS5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY2FzZSBTTkRDVExfU1lOVEhfTUVNQVZMOgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKaW5kZXggOTYyYmI5Yy4uNmQ1N2I2NCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJ1bmtub3duIElPQ1RMOiAweCV4XG4iLCBjbWQpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidW5rbm93biBJT0NUTDogMHgleFxuIiwgY21kKTsKICNlbmRpZgogCX0KIAlyZXR1cm4gLUVOT1RUWTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCmluZGV4IGE0MDQ5ZWIuLmI2MGNlZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYwpAQCAtNTcsNyArNTcsNyBAQAogCWVsc2UKIAkJbWluX2RpdiA9IE1BWF9ESVY7CiAjaWYgUENTUF9ERUJVRwotCXByaW50aygiUENTUDogbHBqPSVsaSwgbWluX2Rpdj0laSwgcmVzPSVsaVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiUENTUDogbHBqPSVsaSwgbWluX2Rpdj0laSwgcmVzPSVsaVxuIiwKIAkgICAgICAgbG9vcHNfcGVyX2ppZmZ5LCBtaW5fZGl2LCB0cC50dl9uc2VjKTsKICNlbmRpZgogCkBAIC05OCw5ICs5OCw5IEBACiAJaHJ0aW1lcl9pbml0KCZwY3NwX2NoaXAudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJcGNzcF9jaGlwLnRpbWVyLmZ1bmN0aW9uID0gcGNzcF9kb190aW1lcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX3Bjc3BfY3JlYXRlKGNhcmQpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCmluZGV4IGIxYzA0N2UuLjYwMTU4ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCkBAIC03NDYsMTAgKzc0NiwxMCBAQAogCWlmICgoZXJyID0gc25kX3BvcnRtYW5fcHJvYmVfcG9ydChwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGQoIkNhbm5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgQ0FSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKaW5kZXggZDhhYWI5ZC4uYjJiNmQ1MCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKKysrIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKQEAgLTI0MSw3ICsyNDEsOCBAQAogCQkJc25kX3Jhd21pZGlfcmVjZWl2ZSh1YXJ0LT5taWRpX2lucHV0W3N1YnN0cmVhbV0sICZjLCAxKTsKIAogCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfT0UpCi0JCQlzbmRfcHJpbnRrKCIlczogT3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICIlczogT3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCiAJCQkgICAgICAgdWFydC0+cm1pZGktPm5hbWUsIHVhcnQtPmJhc2UpOwogCX0KIApAQCAtNjM2LDcgKzYzNyw4IEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIXNuZF91YXJ0MTY1NTBfd3JpdGVfYnVmZmVyKHVhcnQsIG1pZGlfYnl0ZSkpIHsKLQkJCXNuZF9wcmludGsoIiVzOiBCdWZmZXIgb3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICIlczogQnVmZmVyIG92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAogCQkJCSAgIHVhcnQtPnJtaWRpLT5uYW1lLCB1YXJ0LT5iYXNlKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC04MTUsNyArODE3LDggQEAKIAlpZiAoaXJxID49IDAgJiYgaXJxICE9IFNORFJWX0FVVE9fSVJRKSB7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF91YXJ0MTY1NTBfaW50ZXJydXB0LAogCQkJCUlSUUZfRElTQUJMRUQsICJTZXJpYWwgTUlESSIsIHVhcnQpKSB7Ci0JCQlzbmRfcHJpbnRrKCJpcnEgJWQgYnVzeS4gVXNpbmcgUG9sbGluZy5cbiIsIGlycSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJpcnEgJWQgYnVzeS4gVXNpbmcgUG9sbGluZy5cbiIsIGlycSk7CiAJCX0gZWxzZSB7CiAJCQl1YXJ0LT5pcnEgPSBpcnE7CiAJCX0KQEAgLTkxOSwyNiArOTIyLDI5IEBACiAJY2FzZSBTTkRSVl9TRVJJQUxfR0VORVJJQzoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiQWRhcHRvciB0eXBlIGlzIG91dCBvZiByYW5nZSAwLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJBZGFwdG9yIHR5cGUgaXMgb3V0IG9mIHJhbmdlIDAtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfQURBUFRPUiwgYWRhcHRvcltkZXZdKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKG91dHNbZGV2XSA8IDEgfHwgb3V0c1tkZXZdID4gU05EUlZfU0VSSUFMX01BWF9PVVRTKSB7Ci0JCXNuZF9wcmludGsoIkNvdW50IG9mIG91dHB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkNvdW50IG9mIG91dHB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfT1VUUywgb3V0c1tkZXZdKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGluc1tkZXZdIDwgMSB8fCBpbnNbZGV2XSA+IFNORFJWX1NFUklBTF9NQVhfSU5TKSB7Ci0JCXNuZF9wcmludGsoIkNvdW50IG9mIGlucHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ291bnQgb2YgaW5wdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCiAJCQkgICBTTkRSVl9TRVJJQUxfTUFYX0lOUywgaW5zW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljYXJkICA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyICA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNlcmlhbCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTZXJpYWwgTUlESSAoVUFSVDE2NTUwQSkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jIGIvc291bmQvZHJpdmVycy92aXJtaWRpLmMKaW5kZXggZjc5ZTM2MS4uMGU2MzFjMyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMKKysrIGIvc291bmQvZHJpdmVycy92aXJtaWRpLmMKQEAgLTkwLDE1ICs5MCwxNyBAQAogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXZtaWRpID0gKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXZtaWRpLT5jYXJkID0gY2FyZDsKIAogCWlmIChtaWRpX2RldnNbZGV2XSA+IE1BWF9NSURJX0RFVklDRVMpIHsKLQkJc25kX3ByaW50aygidG9vIG11Y2ggbWlkaSBkZXZpY2VzIGZvciB2aXJtaWRpICVkOiBmb3JjZSB0byB1c2UgJWRcbiIsIGRldiwgTUFYX01JRElfREVWSUNFUyk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAidG9vIG11Y2ggbWlkaSBkZXZpY2VzIGZvciB2aXJtaWRpICVkOiAiCisJCQkgICAiZm9yY2UgdG8gdXNlICVkXG4iLCBkZXYsIE1BWF9NSURJX0RFVklDRVMpOwogCQltaWRpX2RldnNbZGV2XSA9IE1BWF9NSURJX0RFVklDRVM7CiAJfQogCWZvciAoaWR4ID0gMDsgaWR4IDwgbWlkaV9kZXZzW2Rldl07IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jCmluZGV4IDE0ZTMzNTQuLjE5YzZlMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jCkBAIC02ODgsNyArNjg4LDggQEAKIAkJaW1hZ2UgPSBkc3AtPmRhdGEgKyBpOwogCQkvKiBXYWl0IERTUCByZWFkeSBmb3IgYSBuZXcgcmVhZCAqLwogCQlpZiAoKGVyciA9IHZ4X3dhaXRfaXNyX2JpdChjaGlwLCBJU1JfVFhfRU1QVFkpKSA8IDApIHsKLQkJCXByaW50aygiZHNwIGxvYWRpbmcgZXJyb3IgYXQgcG9zaXRpb24gJWRcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImRzcCBsb2FkaW5nIGVycm9yIGF0IHBvc2l0aW9uICVkXG4iLCBpKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJY3B0ciA9IGltYWdlOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jIGIvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCmluZGV4IDhkNjM2MmUuLjQ2ZGY4ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKQEAgLTExOSwxNiArMTE5LDYgQEAKIAogI2Vsc2UgLyogb2xkIHN0eWxlIGZpcm13YXJlIGxvYWRpbmcgKi8KIAotc3RhdGljIGludCB2eF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2eF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2eF9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJICAgICAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTI0Myw4ICsyMzMsNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfVlg7CiAJaHctPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0JaHctPm9wcy5vcGVuID0gdnhfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSB2eF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHZ4X2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHZ4X2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF91ZXIuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMKaW5kZXggMGUxYmE5Yi4uYjA1NjBmZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF91ZXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgKiByZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgVUVSLCBvciAwIGlmIG5vdCBzeW5jLAogICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1zdGF0aWMgaW50IHZ4X3JlYWRfdWVyX3N0YXR1cyhzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgaW50ICptb2RlKQorc3RhdGljIGludCB2eF9yZWFkX3Vlcl9zdGF0dXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIHVuc2lnbmVkIGludCAqbW9kZSkKIHsKIAlpbnQgdmFsLCBmcmVxOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvTWFrZWZpbGUgYi9zb3VuZC9pMmMvTWFrZWZpbGUKaW5kZXggMzc5NzA2NjYuLjM2ODc5YmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9NYWtlZmlsZQorKysgYi9zb3VuZC9pMmMvTWFrZWZpbGUKQEAgLTcsOCArNyw2IEBACiBzbmQtY3M4NDI3LW9ianMgOj0gY3M4NDI3Lm8KIHNuZC10ZWE2MzMwdC1vYmpzIDo9IHRlYTYzMzB0Lm8KIAotb2JqLSQoQ09ORklHX0wzKSArPSBsMy8KLQogb2JqLSQoQ09ORklHX1NORCkgKz0gb3RoZXIvCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9sMy9NYWtlZmlsZSBiL3NvdW5kL2kyYy9sMy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0NTViOC4uMDAwMDAwMAotLS0gYS9zb3VuZC9pMmMvbDMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIEFMU0EKLSMKLQotc25kLXVkYTEzNDEtb2JqcyA6PSB1ZGExMzQxLm8KLQotIyBNb2R1bGUgRGVwZW5kZW5jeQotb2JqLSQoQ09ORklHX1NORF9TQTExWFhfVURBMTM0MSkgKz0gc25kLXVkYTEzNDEubwpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL2wzL3VkYTEzNDEuYyBiL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NDBlYjQuLjAwMDAwMDAKLS0tIGEvc291bmQvaTJjL2wzL3VkYTEzNDEuYworKysgL2Rldi9udWxsCkBAIC0xLDkzNSArMCwwIEBACi0vKgotICogUGhpbGlwcyBVREExMzQxIG1peGVyIGRldmljZSBkcml2ZXIKLSAqIENvcHlyaWdodCAoYykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgotICoKLSAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDAgTGVybm91dCAmIEhhdXNwaWUgU3BlZWNoIFByb2R1Y3RzLCBOLlYuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKgotICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTAzLTEzICAgVG9tYXMgS2FzcGFyZWsgIGluaXRpYWwgcmVsZWFzZSAtIGJhc2VkIG9uIHVkYTEzNDEuYyBmcm9tIE9TUwotICogMjAwMi0wMy0yOCAgIFRvbWFzIEthc3BhcmVrICBiYXNpYyBtaXhlciBpcyB3b3JraW5nICh2b2x1bWUsIGJhc3MsIHRyZWJsZSkKLSAqIDIwMDItMDMtMzAgICBUb21hcyBLYXNwYXJlayAgcHJvYyBmaWxlc3lzdGVtIHN1cHBvcnQsIGNvbXBsZXRlIG1peGVyIGFuZCBEU1AKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3VwcG9ydAotICogMjAwMi0wNC0xMglUb21hcyBLYXNwYXJlawlwcm9jIGludGVyZmFjZSB1cGRhdGUsIGNvZGUgY2xlYW51cAotICogMjAwMi0wNS0xMiAgIFRvbWFzIEthc3BhcmVrICBhbm90aGVyIGNvZGUgY2xlYW51cAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2wzL2wzLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC91ZGExMzQxLmg+Ci0KLS8qIHt7eyBIVyByZWdzIGRlZmluaXRpb24gKi8KLQotI2RlZmluZSBTVEFUMCAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFNUQVQxCQkJMHg4MAotI2RlZmluZSBTVEFUX01BU0sgICAgICAgICAgICAgICAweDgwCi0KLSNkZWZpbmUgREFUQTBfMAkJCTB4MDAKLSNkZWZpbmUgREFUQTBfMQkJCTB4NDAKLSNkZWZpbmUgREFUQTBfMgkJCTB4ODAKLSNkZWZpbmUgREFUQV9NQVNLICAgICAgICAgICAgICAgMHhjMAotCi0jZGVmaW5lIElTX0RBVEEwKHgpICAgICAoKHgpID49IGRhdGEwXzAgJiYgKHgpIDw9IGRhdGEwXzIpCi0jZGVmaW5lIElTX0RBVEExKHgpICAgICAoKHgpID09IGRhdGExKQotI2RlZmluZSBJU19TVEFUVVMoeCkgICAgKCh4KSA9PSBzdGF0MCB8fCAoeCkgPT0gc3RhdDEpCi0jZGVmaW5lIElTX0VYVEVORCh4KSAgICgoeCkgPj0gZXh0MCAmJiAoeCkgPD0gZXh0NikKLQotLyogfX19ICovCi0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnBlYWtfbmFtZXNbXSA9IHsKLQkiYmVmb3JlIiwKLQkiYWZ0ZXIiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZpbHRlcl9uYW1lc1tdID0gewotCSJmbGF0IiwKLQkibWluIiwKLQkibWluIiwKLQkibWF4IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICptaXhlcl9uYW1lc1tdID0gewotCSJkb3VibGUgZGlmZmVyZW50aWFsIiwKLQkiaW5wdXQgY2hhbm5lbCAxIChsaW5lIGluKSIsCi0JImlucHV0IGNoYW5uZWwgMiAobWljcm9waG9uZSkiLAotCSJkaWdpdGFsIG1peGVyIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZWVtcF9uYW1lc1tdID0gewotCSJub25lIiwKLQkiMzIga0h6IiwKLQkiNDQuMSBrSHoiLAotCSI0OCBrSHoiLCAgICAgICAgCi19OwotCi1lbnVtIHVkYTEzNDFfcmVnc19uYW1lcyB7Ci0Jc3RhdDAsCi0Jc3RhdDEsCi0JZGF0YTBfMCwKLQlkYXRhMF8xLAotCWRhdGEwXzIsCi0JZGF0YTEsCi0JZXh0MCwKLQlleHQxLAotCWV4dDIsCi0JZW1wdHksCi0JZXh0NCwKLQlleHQ1LAotCWV4dDYsCi0JdWRhMTM0MV9yZWdfbGFzdCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICp1ZGExMzQxX3JlZ19uYW1lc1tdID0gewotCSJzdGF0IDAgIiwKLQkic3RhdCAxICIsCi0JImRhdGEgMDAiLAotCSJkYXRhIDAxIiwKLQkiZGF0YSAwMiIsCi0JImRhdGEgMSAiLAotCSJleHQgMCIsCi0JImV4dCAxIiwKLQkiZXh0IDIiLAotCSJlbXB0eSIsCi0JImV4dCA0IiwKLQkiZXh0IDUiLAotCSJleHQgNiIsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IHVkYTEzNDFfZW51bV9pdGVtc1tdID0gewotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JMiwgLy9wZWFrIC0gYmVmb3JlL2FmdGVyCi0JNCwgLy9kZWVtcCAtIG5vbmUvMzIvNDQuMS80OAotCTAsCi0JNCwgLy9maWx0ZXIgLSBmbGF0L21pbi9taW4vbWF4Ci0JMCwgMCwgMCwKLQk0LCAvL21peGVyIC0gZGlmZmVyL2xpbmUvbWljL21peGVyCi0JMCwgMCwgMCwgMCwgMCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoqIHVkYTEzNDFfZW51bV9uYW1lc1tdID0gewotCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0JcGVha19uYW1lcywgLy9wZWFrIC0gYmVmb3JlL2FmdGVyCi0JZGVlbXBfbmFtZXMsIC8vZGVlbXAgLSBub25lLzMyLzQ0LjEvNDgKLQlOVUxMLAotCWZpbHRlcl9uYW1lcywgLy9maWx0ZXIgLSBmbGF0L21pbi9taW4vbWF4Ci0JTlVMTCwgTlVMTCwgTlVMTCwKLQltaXhlcl9uYW1lcywgLy9taXhlciAtIGRpZmZlci9saW5lL21pYy9taXhlcgotCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi19OwotCi10eXBlZGVmIGludCB1ZGExMzQxX2NmZ1tDTURfTEFTVF07Ci0KLXN0cnVjdCB1ZGExMzQxIHsKLQlpbnQgKCp3cml0ZSkgKHN0cnVjdCBsM19jbGllbnQgKnVkYTEzNDEsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKTsKLQlpbnQgKCpyZWFkKSAoc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MSwgdW5zaWduZWQgc2hvcnQgcmVnKTsgICAgICAgIAotCXVuc2lnbmVkIGNoYXIgcmVnc1t1ZGExMzQxX3JlZ19sYXN0XTsKLQlpbnQgYWN0aXZlOwotCXNwaW5sb2NrX3QgcmVnX2xvY2s7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXVkYTEzNDFfY2ZnIGNmZzsKLSNpZmRlZiBDT05GSUdfUE0KLQl1bnNpZ25lZCBjaGFyIHN1c3BlbmRfcmVnc1t1ZGExMzQxX3JlZ19sYXN0XTsKLQl1ZGExMzQxX2NmZyBzdXNwZW5kX2NmZzsKLSNlbmRpZgotfTsKLQotLyogdHJhbnNmZXIgOGJpdCBpbnRlZ2VyIGludG8gc3RyaW5nIHdpdGggYmluYXJ5IHJlcHJlc2VudGF0aW9uICovCi1zdGF0aWMgdm9pZCBpbnQyc3RyX2JpbjgodWludDhfdCB2YWwsIGNoYXIgKmJ1ZikKLXsKLQljb25zdCBpbnQgc2l6ZSA9IHNpemVvZih2YWwpICogODsKLQlpbnQgaTsKLQotCWZvciAoaT0gMDsgaSA8IHNpemU7IGkrKyl7Ci0JCSooYnVmKyspID0gKHZhbCA+PiAoc2l6ZSAtIDEpKSA/ICcxJyA6ICcwJzsKLQkJdmFsIDw8PSAxOwotCX0KLQkqYnVmID0gJ1wwJzsgLy9lbmQgdGhlIHN0cmluZyB3aXRoIHplcm8KLX0KLQotLyoge3t7IEhXIG1hbmlwdWxhdGlvbiByb3V0aW5lcyAqLwotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NvZGVjX3dyaXRlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsyXSA9IHsgMHhjMCwgMHhlMCB9OyAvLyBmb3IgRVhUIGFkZHJlc3NpbmcKLQlpbnQgZXJyID0gMDsKLQotCXVkYS0+cmVnc1tyZWddID0gdmFsOwotCi0JaWYgKHVkYS0+YWN0aXZlKSB7Ci0JCWlmIChJU19EQVRBMChyZWcpKSB7Ci0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEEwLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOwotCQl9IGVsc2UgaWYgKElTX0RBVEExKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTEsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfU1RBVFVTKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfU1RBVFVTLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOwotCQl9IGVsc2UgaWYgKElTX0VYVEVORChyZWcpKSB7Ci0JCQlidWZbMF0gfD0gKHJlZyAtIGV4dDApICYgMHg3OyAgIC8vRVhUIGFkZHJlc3MKLQkJCWJ1ZlsxXSB8PSB2YWw7ICAgICAgICAgICAgICAgICAgLy9FWFQgZGF0YQotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilidWYsIDIpOwotCQl9Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiVURBMTM0MSBjb2RlYyBub3QgYWN0aXZlIVxuIik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZykKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gbDNfcmVhZChjbG50LCByZWcsICZ2YWwsIDEpOwotCWlmIChlcnIgPT0gMSkKLQkJLy8gdXNlIGp1c3QgNmJpdHMgLSB0aGUgcmVzdCBpcyBhZGRyZXNzIG9mIHRoZSByZWcKLQkJcmV0dXJuIHZhbCAmIDYzOwotCXJldHVybiBlcnIgPCAwID8gZXJyIDogLUVJTzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc25kX3VkYTEzNDFfdmFsaWRfcmVnKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZykKLXsKLQlyZXR1cm4gcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcsCi0JCQkJICAgdW5zaWduZWQgc2hvcnQgbWFzaywgdW5zaWduZWQgc2hvcnQgc2hpZnQsCi0JCQkJICAgdW5zaWduZWQgc2hvcnQgdmFsdWUsIGludCBmbHVzaCkKLXsKLQlpbnQgY2hhbmdlOwotCXVuc2lnbmVkIHNob3J0IG9sZCwgbmV3OwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAidXBkYXRlX2JpdHM6IHJlZzogJXMgbWFzazogJWQgc2hpZnQ6ICVkIHZhbDogJWRcbiIsCi0JICAgICAgIHVkYTEzNDFfcmVnX25hbWVzW3JlZ10sIG1hc2ssIHNoaWZ0LCB2YWx1ZSk7Ci0jZW5kaWYKLSAgICAgICAgCi0JaWYgKCFzbmRfdWRhMTM0MV92YWxpZF9yZWcoY2xudCwgcmVnKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3Bpbl9sb2NrKCZ1ZGEtPnJlZ19sb2NrKTsKLQlvbGQgPSB1ZGEtPnJlZ3NbcmVnXTsKLQluZXcgPSAob2xkICYgfihtYXNrIDw8IHNoaWZ0KSkgfCAodmFsdWUgPDwgc2hpZnQpOwotCWNoYW5nZSA9IG9sZCAhPSBuZXc7Ci0JaWYgKGNoYW5nZSkgewotCQlpZiAoZmx1c2gpIHVkYS0+d3JpdGUoY2xudCwgcmVnLCBuZXcpOwotCQl1ZGEtPnJlZ3NbcmVnXSA9IG5ldzsKLQl9Ci0Jc3Bpbl91bmxvY2soJnVkYS0+cmVnX2xvY2spOwotCXJldHVybiBjaGFuZ2U7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY2ZnX3dyaXRlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHdoYXQsCi0JCQkJIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBpbnQgZmx1c2gpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCByZXQgPSAwOwotI2lmZGVmIENPTkZJR19QTQotCWludCByZWc7Ci0jZW5kaWYKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnX3dyaXRlIHdoYXQ6ICVkIHZhbHVlOiAlZFxuIiwgd2hhdCwgdmFsdWUpOwotI2VuZGlmCi0KLQl1ZGEtPmNmZ1t3aGF0XSA9IHZhbHVlOwotICAgICAgICAKLQlzd2l0Y2god2hhdCkgewotCWNhc2UgQ01EX1JFU0VUOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCAyLCAxLCBmbHVzaCk7CS8vIE1VVEUKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDEsIDYsIDEsIGZsdXNoKTsJLy8gUkVTRVQKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDEsIDYsIDAsIGZsdXNoKTsJLy8gUkVTVE9SRQotCQl1ZGEtPmNmZ1tDTURfUkVTRVRdPTA7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0ZTOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMywgNCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRk9STUFUOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgNywgMSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfT0dBSU46Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCA2LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9JR0FJTjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDUsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0RBQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FEQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDEsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1ZPTFVNRToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMCwgNjMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0JBU1M6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzEsIDE1LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9UUkVCQkxFOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8xLCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9QRUFLOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCA1LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9ERUVNUDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMywgMywgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTVVURToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMSwgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRklMVEVSOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9DSDE6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDAsIDMxLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9DSDI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDEsIDMxLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NSUM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDIsIDcsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01JWEVSOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQyLCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0M6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDQsIDEsIDQsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0lHOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ0LCAzLCAwLCB2YWx1ZSAmIDB4MywgZmx1c2gpOwotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ1LCAzMSwgMCwgdmFsdWUgPj4gMiwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0NfVElNRToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NiwgNywgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQUdDX0xFVkVMOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ2LCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLSNpZmRlZiBDT05GSUdfUE0JCQotCWNhc2UgQ01EX1NVU1BFTkQ6Ci0JCWZvciAocmVnID0gc3RhdDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZysrKQotCQkJdWRhLT5zdXNwZW5kX3JlZ3NbcmVnXSA9IHVkYS0+cmVnc1tyZWddOwotCQlmb3IgKHJlZyA9IDA7IHJlZyA8IENNRF9MQVNUOyByZWcrKykKLQkJCXVkYS0+c3VzcGVuZF9jZmdbcmVnXSA9IHVkYS0+Y2ZnW3JlZ107Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1JFU1VNRToKLQkJZm9yIChyZWcgPSBzdGF0MDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnKyspCi0JCQlzbmRfdWRhMTM0MV9jb2RlY193cml0ZShjbG50LCByZWcsIHVkYS0+c3VzcGVuZF9yZWdzW3JlZ10pOwotCQlmb3IgKHJlZyA9IDA7IHJlZyA8IENNRF9MQVNUOyByZWcrKykKLQkJCXVkYS0+Y2ZnW3JlZ10gPSB1ZGEtPnN1c3BlbmRfY2ZnW3JlZ107Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotICAgICAgICAgICAgICAgIAotCWlmICghdWRhLT5hY3RpdmUpCi0JCXByaW50ayhLRVJOX0VSUiAiVURBMTM0MSBjb2RlYyBub3QgYWN0aXZlIVxuIik7ICAgICAgICAgICAgICAgIAotCXJldHVybiByZXQ7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgUHJvYyBpbnRlcmZhY2UgKi8KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCi1zdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X25hbWVzW10gPSB7Ci0JIkkyUy1idXMiLAotCSJMU0IgMTZiaXRzIiwKLQkiTFNCIDE4Yml0cyIsCi0JIkxTQiAyMGJpdHMiLAotCSJNU0IiLAotCSJpbiBMU0IgMTZiaXRzL291dCBNU0IiLAotCSJpbiBMU0IgMThiaXRzL291dCBNU0IiLAotCSJpbiBMU0IgMjBiaXRzL291dCBNU0IiLCAgICAgICAgCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZnNfbmFtZXNbXSA9IHsKLQkiNTEyKmZzIiwKLQkiMzg0KmZzIiwKLQkiMjU2KmZzIiwKLQkiVW51c2VkIC0gYmFkIHZhbHVlISIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogYmFzc192YWx1ZXNbXVsxNl0gPSB7Ci0JeyIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLAotCSAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICJ1bmRlZmluZWQiLCB9LCAvL2ZsYXQKLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIxOCBkQiIsCi0JICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1pbgotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwKLQkgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWluCi0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMjAgZEIiLAotCSAiMjIgZEIiLCAiMjQgZEIiLCAiMjQgZEIiLCAiMjQgZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtYXgKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICptaWNfc2Vuc192YWx1ZVtdID0gewotCSItMyBkQiIsICIwIGRCIiwgIjMgZEIiLCAiOSBkQiIsICIxNSBkQiIsICIyMSBkQiIsICIyNyBkQiIsICJub3QgdXNlZCIsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgQUdDX2F0aW1lW10gPSB7Ci0JMTEsIDE2LCAxMSwgMTYsIDIxLCAxMSwgMTYsIDIxLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFHQ19kdGltZVtdID0gewotCTEwMCwgMTAwLCAyMDAsIDIwMCwgMjAwLCA0MDAsIDQwMCwgNDAwLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKkFHQ19sZXZlbFtdID0gewotCSItOS4wIiwgIi0xMS41IiwgIi0xNS4wIiwgIi0xNy41IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICppZ19zbWFsbF92YWx1ZVtdID0gewotCSItMy4wIiwgIi0yLjUiLCAiLTIuMCIsICItMS41IiwgIi0xLjAiLCAiLTAuNSIsCi19OwotCi0vKgotICogdGhpcyB3YXMgY29tcHV0ZWQgYXMgcGVha192YWx1ZVtpXSA9IHBvdygoNjMtaSkqMS40MiwxLjAxMykKLSAqCi0gKiBVREExMzQxIGRhdGFzaGVldCBvbiBwYWdlIDIxOiBQZWFrIHZhbHVlIChkQikgPSAoUGVhayBsZXZlbCAtIDYzLjUpKjUqbG9nMgotICogVGhlcmUgaXMgYW4gdGFibGUgd2l0aCB0aGVzZSB2YWx1ZXMgW2xldmVsXT12YWx1ZTogWzNdPS05MC4zMSwgWzddPS04NC4yOQotICogWzYxXT0tMi43OCwgWzYyXSA9IC0xLjQ4LCBbNjNdID0gMC4wCi0gKiBJIHRyaWVkIHRvIGNvbXB1dGUgaXQsIGJ1dCB1c2luZyBidXQgZXZlbiB1c2luZyBsb2dhcml0aG0gd2l0aCBiYXNlIGVpdGhlciAxMCBvciAyCi0gKiBpIHdhcyduIGFibGUgdG8gZ2V0IHZhbHVlcyBpbiB0aGUgdGFibGUgZnJvbSB0aGUgZm9ybXVsYS4gU28gSSBjb25zdHJ1Y3RlZCBhbm90aGVyCi0gKiBmb3JtdWxhIChzZWUgYWJvdmUpIHRvIGludGVycG9sYXRlIHRoZSB2YWx1ZXMgYXMgZ29vZCBhcyBwb3NzaWJsZS4gSWYgdGhlcmUgaXMgc29tZQotICogbWlzdGFrZSwgcGxlYXNlIGNvbnRhY3QgbWUgb24gdG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6LiBUaGFua3MuCi0gKiBVREExMzQxVFMgZGF0YXNoZWV0IGlzIGF2YWlsYWJsZSBhdDoKLSAqICAgaHR0cDovL3d3dy11czkuc2VtaWNvbmR1Y3RvcnMuY29tL2Fjcm9iYXQvZGF0YXNoZWV0cy9VREExMzQxVFNfMy5wZGYgCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICpwZWFrX3ZhbHVlW10gPSB7Ci0JIi1JTkYgZEIiLCAiTi5BLiIsICJOLkEiLCAiOTAuMzEgZEIiLCAiTi5BLiIsICJOLkEuIiwgIk4uQS4iLCAiLTg0LjI5IGRCIiwKLQkiLTgyLjY1IGRCIiwgIi04MS4xMyBkQiIsICItNzkuNjEgZEIiLCAiLTc4LjA5IGRCIiwgIi03Ni41NyBkQiIsICItNzUuMDUgZEIiLCAiLTczLjUzIGRCIiwKLQkiLTcyLjAxIGRCIiwgIi03MC40OSBkQiIsICItNjguOTcgZEIiLCAiLTY3LjQ1IGRCIiwgIi02NS45MyBkQiIsICItNjQuNDEgZEIiLCAiLTYyLjkwIGRCIiwKLQkiLTYxLjM4IGRCIiwgIi01OS44NiBkQiIsICItNTguMzUgZEIiLCAiLTU2LjgzIGRCIiwgIi01NS4zMiBkQiIsICItNTMuODAgZEIiLCAiLTUyLjI5IGRCIiwKLQkiLTUwLjc4IGRCIiwgIi00OS4yNiBkQiIsICItNDcuNzUgZEIiLCAiLTQ2LjI0IGRCIiwgIi00NC43MyBkQiIsICItNDMuMjIgZEIiLCAiLTQxLjcxIGRCIiwKLQkiLTQwLjIwIGRCIiwgIi0zOC42OSBkQiIsICItMzcuMTkgZEIiLCAiLTM1LjY4IGRCIiwgIi0zNC4xNyBkQiIsICItMzIuNjcgZEIiLCAiLTMxLjE3IGRCIiwKLQkiLTI5LjY2IGRCIiwgIi0yOC4xNiBkQiIsICItMjYuNjYgZEIiLCAiLTI1LjE2IGRCIiwgIi0yMy42NiBkQiIsICItMjIuMTYgZEIiLCAiLTIwLjY3IGRCIiwKLQkiLTE5LjE3IGRCIiwgIi0xNy42OCBkQiIsICItMTYuMTkgZEIiLCAiLTE0LjcwIGRCIiwgIi0xMy4yMSBkQiIsICItMTEuNzIgZEIiLCAiLTEwLjI0IGRCIiwKLQkiLTguNzYgZEIiLCAiLTcuMjggZEIiLCAiLTUuODEgZEIiLCAiLTQuMzQgZEIiLCAiLTIuODggZEIiLCAiLTEuNDMgZEIiLCAiMC4wMCBkQiIsCi19OwotCi1zdGF0aWMgdm9pZCBzbmRfdWRhMTM0MV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwgCi0JCQkJICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCBwZWFrOwotCi0JcGVhayA9IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoY2xudCwgVURBMTM0MV9EQVRBMSk7Ci0JaWYgKHBlYWsgPCAwKQotCQlwZWFrID0gMDsKLQkKLQlzbmRfaXByaW50ZihidWZmZXIsICIlc1xuXG4iLCB1ZGEtPmNhcmQtPmxvbmduYW1lKTsKLQotCS8vIGZvciBpbmZvcm1hdGlvbiBhYm91dCBjb21wdXRlZCB2YWx1ZXMgc2VlIFVEQTEzNDFUUyBkYXRhc2hlZXQgcGFnZXMgMTUgLSAyMQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRBQyBwb3dlciAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0RBQ10gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQyBwb3dlciAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0FEQ10gPyAib24iIDogIm9mZiIpOwotIAlzbmRfaXByaW50ZihidWZmZXIsICJDbG9jayBmcmVxdWVuY3kgICAgIDogJXNcbiIsIGZzX25hbWVzW3VkYS0+Y2ZnW0NNRF9GU11dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEYXRhIGZvcm1hdCAgICAgICAgIDogJXNcblxuIiwgZm9ybWF0X25hbWVzW3VkYS0+Y2ZnW0NNRF9GT1JNQVRdXSk7Ci0KLQlzbmRfaXByaW50ZihidWZmZXIsICJGaWx0ZXIgbW9kZSAgICAgICAgIDogJXNcbiIsIGZpbHRlcl9uYW1lc1t1ZGEtPmNmZ1tDTURfRklMVEVSXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIG1vZGUgICAgICAgICAgOiAlc1xuIiwgbWl4ZXJfbmFtZXNbdWRhLT5jZmdbQ01EX01JWEVSXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRlLWVtcGhhc2lzICAgICAgICAgOiAlc1xuIiwgZGVlbXBfbmFtZXNbdWRhLT5jZmdbQ01EX0RFRU1QXV0pOwkKLQlzbmRfaXByaW50ZihidWZmZXIsICJQZWFrIGRldGVjdGlvbiBwb3MuIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9QRUFLXSA/ICJhZnRlciIgOiAiYmVmb3JlIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiUGVhayB2YWx1ZSAgICAgICAgICA6ICVzXG5cbiIsIHBlYWtfdmFsdWVbcGVha10pOwkJCi0JCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiQXV0b21hdGljIEdhaW4gQ3RybCA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfQUdDXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIGF0dGFjayB0aW1lICAgICA6ICVkIG1zXG4iLCBBR0NfYXRpbWVbdWRhLT5jZmdbQ01EX0FHQ19USU1FXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBkZWNheSB0aW1lICAgICAgOiAlZCBtc1xuIiwgQUdDX2R0aW1lW3VkYS0+Y2ZnW0NNRF9BR0NfVElNRV1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0Mgb3V0cHV0IGxldmVsICAgIDogJXMgZEJcblxuIiwgQUdDX2xldmVsW3VkYS0+Y2ZnW0NNRF9BR0NfTEVWRUxdXSk7Ci0KLQlzbmRfaXByaW50ZihidWZmZXIsICJNdXRlICAgICAgICAgICAgICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9NVVRFXSA/ICJvbiIgOiAib2ZmIik7Ci0KLQlpZiAodWRhLT5jZmdbQ01EX1ZPTFVNRV0gPT0gMCkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6IDAgZEJcbiIpOwotCWVsc2UgaWYgKHVkYS0+Y2ZnW0NNRF9WT0xVTUVdIDwgNjIpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZvbHVtZSAgICAgICAgICAgICAgOiAlZCBkQlxuIiwgLTEqdWRhLT5jZmdbQ01EX1ZPTFVNRV0gKzEpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6IC1JTkYgZEJcbiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkJhc3MgICAgICAgICAgICAgICAgOiAlc1xuIiwgYmFzc192YWx1ZXNbdWRhLT5jZmdbQ01EX0ZJTFRFUl1dW3VkYS0+Y2ZnW0NNRF9CQVNTXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRyZWJibGUgICAgICAgICAgICAgOiAlZCBkQlxuIiwgdWRhLT5jZmdbQ01EX0ZJTFRFUl0gPyAyKnVkYS0+Y2ZnW0NNRF9UUkVCQkxFXSA6IDApOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IEdhaW4gKDZkQikgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0lHQUlOXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiT3V0cHV0IEdhaW4gKDZkQikgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfT0dBSU5dID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJNaWMgc2Vuc2l0aXZpdHkgICAgIDogJXNcbiIsIG1pY19zZW5zX3ZhbHVlW3VkYS0+Y2ZnW0NNRF9NSUNdXSk7Ci0KLQkKLQlpZih1ZGEtPmNmZ1tDTURfQ0gxXSA8IDMxKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMTogLSVkLiVjIGRCXG4iLAotCQkJICAgICgodWRhLT5jZmdbQ01EX0NIMV0gPj4gMSkgKiAzKSArICh1ZGEtPmNmZ1tDTURfQ0gxXSAmIDEpLAotCQkJICAgIHVkYS0+Y2ZnW0NNRF9DSDFdICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMTogLUlORiBkQlxuIik7Ci0JaWYodWRhLT5jZmdbQ01EX0NIMl0gPCAzMSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDI6IC0lZC4lYyBkQlxuIiwKLQkJCSAgICAoKHVkYS0+Y2ZnW0NNRF9DSDJdID4+IDEpICogMykgKyAodWRhLT5jZmdbQ01EX0NIMl0gJiAxKSwKLQkJCSAgICB1ZGEtPmNmZ1tDTURfQ0gyXSAmIDEgPyAnNScgOiAnMCcpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDI6IC1JTkYgZEJcbiIpOwotCi0JaWYodWRhLT5jZmdbQ01EX0lHXSA+IDUpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IEFtcC4gR2FpbiBjaCAyOiAlZC4lYyBkQlxuIiwKLQkJCSAgICAodWRhLT5jZmdbQ01EX0lHXSA+PiAxKSAtMywgdWRhLT5jZmdbQ01EX0lHXSAmIDEgPyAnNScgOiAnMCcpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgQW1wLiBHYWluIGNoIDI6ICVzIGRCXG4iLCAgaWdfc21hbGxfdmFsdWVbdWRhLT5jZmdbQ01EX0lHXV0pOwotfQotCi1zdGF0aWMgdm9pZCBzbmRfdWRhMTM0MV9wcm9jX3JlZ3NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LCAKLQkJCQkgICAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsJCQotCWludCByZWc7Ci0JY2hhciBidWZbMTJdOwotCi0JZm9yIChyZWcgPSAwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcgKyspIHsKLQkJaWYgKHJlZyA9PSBlbXB0eSkKLQkJCWNvbnRpbnVlOwotCQlpbnQyc3RyX2JpbjgodWRhLT5yZWdzW3JlZ10sIGJ1Zik7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzID0gJXNcbiIsIHVkYTEzNDFfcmVnX25hbWVzW3JlZ10sIGJ1Zik7Ci0JfQotCi0JaW50MnN0cl9iaW44KHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoY2xudCwgVURBMTM0MV9EQVRBMSksIGJ1Zik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiREFUQTEgPSAlc1xuIiwgYnVmKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX3VkYTEzNDFfcHJvY19pbml0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwotCi0JaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2FyZCwgInVkYTEzNDEiLCAmZW50cnkpKQotCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNsbnQsIHNuZF91ZGExMzQxX3Byb2NfcmVhZCk7Ci0JaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2FyZCwgInVkYTEzNDEtcmVncyIsICZlbnRyeSkpCi0JCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2xudCwgc25kX3VkYTEzNDFfcHJvY19yZWdzX3JlYWQpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IE1peGVyIGNvbnRyb2xzIHNldHRpbmcgKi8KLQotLyoge3t7IFVEQTEzNDEgc2luZ2xlIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIFVEQTEzNDFfU0lOR0xFKHhuYW1lLCB3aGVyZSwgcmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fc2luZ2xlLCBcCi0gIC5nZXQgPSBzbmRfdWRhMTM0MV9nZXRfc2luZ2xlLCAucHV0ID0gc25kX3VkYTEzNDFfcHV0X3NpbmdsZSwgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZyA8PCA1KSB8IChzaGlmdCA8PCA5KSB8IChtYXNrIDw8IDEyKSB8IChpbnZlcnQgPDwgMTgpIFwKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvX3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCi0JdWluZm8tPnR5cGUgPSBtYXNrID09IDEgPyBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gOiBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfZ2V0X3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE4KSAmIDE7Ci0gICAgICAgIAotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdWRhLT5jZmdbd2hlcmVdOwotCWlmIChpbnZlcnQpCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWFzayAtIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfcHV0X3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgNzsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE4KSAmIDE7Ci0JdW5zaWduZWQgc2hvcnQgdmFsOwotCi0JdmFsID0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgbWFzayk7Ci0JaWYgKGludmVydCkKLQkJdmFsID0gbWFzayAtIHZhbDsKLQotCXVkYS0+Y2ZnW3doZXJlXSA9IHZhbDsKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnLCBtYXNrLCBzaGlmdCwgdmFsLCBGTFVTSCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgVURBMTM0MSBlbnVtIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIFVEQTEzNDFfRU5VTSh4bmFtZSwgd2hlcmUsIHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZm8gPSBzbmRfdWRhMTM0MV9pbmZvX2VudW0sIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF9lbnVtLCAucHV0ID0gc25kX3VkYTEzNDFfcHV0X2VudW0sIFwKLSAgLnByaXZhdGVfdmFsdWUgPSB3aGVyZSB8IChyZWcgPDwgNSkgfCAoc2hpZnQgPDwgOSkgfCAobWFzayA8PCAxMikgfCAoaW52ZXJ0IDw8IDE4KSBcCi19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfaW5mb19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7Ci0JY29uc3QgY2hhciAqKnRleHRzOwotCQotCS8vIHRoaXMgcmVnaXN0ZXIgd2UgZG9uJ3QgaGFuZGxlIHRoaXMgd2F5Ci0JaWYgKCF1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdOwotCi0JaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSkKLQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0gLSAxOwotCi0JdGV4dHMgPSB1ZGExMzQxX2VudW1fbmFtZXNbd2hlcmVdOwotCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfZ2V0X2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotICAgICAgICAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gdWRhLT5jZmdbd2hlcmVdOwkKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZyA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA1KSAmIDE1OwotCWludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA5KSAmIDc7Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0KLQl1ZGEtPmNmZ1t3aGVyZV0gPSAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSAmIG1hc2spOwotCQotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWcsIG1hc2ssIHNoaWZ0LCB1ZGEtPmNmZ1t3aGVyZV0sIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBVREExMzQxIDJyZWdzIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIFVEQTEzNDFfMlJFR1MoeG5hbWUsIHdoZXJlLCByZWdfMSwgcmVnXzIsIHNoaWZ0XzEsIHNoaWZ0XzIsIG1hc2tfMSwgbWFza18yLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwgLmluZm8gPSBzbmRfdWRhMTM0MV9pbmZvXzJyZWdzLCBcCi0gIC5nZXQgPSBzbmRfdWRhMTM0MV9nZXRfMnJlZ3MsIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfMnJlZ3MsIFwKLSAgLnByaXZhdGVfdmFsdWUgPSB3aGVyZSB8IChyZWdfMSA8PCA1KSB8IChyZWdfMiA8PCA5KSB8IChzaGlmdF8xIDw8IDEzKSB8IChzaGlmdF8yIDw8IDE2KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAobWFza18xIDw8IDE5KSB8IChtYXNrXzIgPDwgMjUpIHwgKGludmVydCA8PCAzMSkgXAotfQotCi0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfaW5mb18ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOwotCWludCBtYXNrOwotICAgICAgICAKLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQl1aW5mby0+dHlwZSA9IG1hc2sgPT0gMSA/IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiA6IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gbWFzazsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfMnJlZ3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOyAgICAgICAgCi0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAzMSkgJiAxOwotCWludCBtYXNrOwotCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0KLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHVkYS0+Y2ZnW3doZXJlXTsKLQlpZiAoaW52ZXJ0KQotCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG1hc2sgLSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfMnJlZ3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOyAgICAgICAgCi0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWdfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA1KSAmIDE1OwotCWludCByZWdfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA5KSAmIDE1OyAgICAgICAgCi0JaW50IHNoaWZ0XzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTMpICYgNzsKLQlpbnQgc2hpZnRfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiA3OwotCWludCBtYXNrXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgNjM7Ci0JaW50IG1hc2tfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNSkgJiA2MzsgICAgICAgIAotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMzEpICYgMTsKLQlpbnQgbWFzazsKLQl1bnNpZ25lZCBzaG9ydCB2YWwxLCB2YWwyLCB2YWw7Ci0KLQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLSAgICAgICAgIAotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCi0JdmFsMSA9IHZhbCAmIG1hc2tfMTsKLQl2YWwyID0gKHZhbCAvIChtYXNrXzEgKyAxKSkgJiBtYXNrXzI7ICAgICAgICAKLQotCWlmIChpbnZlcnQpIHsKLQkJdmFsMSA9IG1hc2tfMSAtIHZhbDE7Ci0JCXZhbDIgPSBtYXNrXzIgLSB2YWwyOwotCX0KLQotCXVkYS0+Y2ZnW3doZXJlXSA9IGludmVydCA/IG1hc2sgLSB2YWwgOiB2YWw7Ci0gICAgICAgIAotCS8vRklYTUUgLSByZXR1cm4gdmFsdWUKLQlzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWdfMSwgbWFza18xLCBzaGlmdF8xLCB2YWwxLCBGTFVTSCk7Ci0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZ18yLCBtYXNrXzIsIHNoaWZ0XzIsIHZhbDIsIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0gIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF91ZGExMzQxX2NvbnRyb2xzW10gPSB7Ci0JVURBMTM0MV9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBDTURfTVVURSwgZGF0YTBfMiwgMiwgMSwgMSksCi0JVURBMTM0MV9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBDTURfVk9MVU1FLCBkYXRhMF8wLCAwLCA2MywgMSksCi0KLQlVREExMzQxX1NJTkdMRSgiQmFzcyBQbGF5YmFjayBWb2x1bWUiLCBDTURfQkFTUywgZGF0YTBfMSwgMiwgMTUsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJUcmVibGUgUGxheWJhY2sgVm9sdW1lIiwgQ01EX1RSRUJCTEUsIGRhdGEwXzEsIDAsIDMsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIklucHV0IEdhaW4gU3dpdGNoIiwgQ01EX0lHQUlOLCBzdGF0MSwgNSwgMSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIk91dHB1dCBHYWluIFN3aXRjaCIsIENNRF9PR0FJTiwgc3RhdDEsIDYsIDEsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIk1peGVyIEdhaW4gQ2hhbm5lbCAxIFZvbHVtZSIsIENNRF9DSDEsIGV4dDAsIDAsIDMxLCAxKSwKLQlVREExMzQxX1NJTkdMRSgiTWl4ZXIgR2FpbiBDaGFubmVsIDIgVm9sdW1lIiwgQ01EX0NIMiwgZXh0MSwgMCwgMzEsIDEpLAotCi0JVURBMTM0MV9TSU5HTEUoIk1pYyBTZW5zaXRpdml0eSBWb2x1bWUiLCBDTURfTUlDLCBleHQyLCAyLCA3LCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJBR0MgT3V0cHV0IExldmVsIiwgQ01EX0FHQ19MRVZFTCwgZXh0NiwgMCwgMywgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBUaW1lIENvbnN0YW50IiwgQ01EX0FHQ19USU1FLCBleHQ2LCAyLCA3LCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQUdDIFRpbWUgQ29uc3RhbnQgU3dpdGNoIiwgQ01EX0FHQywgZXh0NCwgNCwgMSwgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiREFDIFBvd2VyIiwgQ01EX0RBQywgc3RhdDEsIDAsIDEsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBREMgUG93ZXIiLCBDTURfQURDLCBzdGF0MSwgMSwgMSwgMCksCi0KLQlVREExMzQxX0VOVU0oIlBlYWsgZGV0ZWN0aW9uIiwgQ01EX1BFQUssIGRhdGEwXzIsIDUsIDEsIDApLAotCVVEQTEzNDFfRU5VTSgiRGUtZW1waGFzaXMiLCBDTURfREVFTVAsIGRhdGEwXzIsIDMsIDMsIDApLAotCVVEQTEzNDFfRU5VTSgiTWl4ZXIgbW9kZSIsIENNRF9NSVhFUiwgZXh0MiwgMCwgMywgMCksCi0JVURBMTM0MV9FTlVNKCJGaWx0ZXIgbW9kZSIsIENNRF9GSUxURVIsIGRhdGEwXzIsIDAsIDMsIDApLAotCi0JVURBMTM0MV8yUkVHUygiR2FpbiBJbnB1dCBBbXBsaWZpZXIgR2FpbiAoY2hhbm5lbCAyKSIsIENNRF9JRywgZXh0NCwgZXh0NSwgMCwgMCwgMywgMzEsIDApLAotfTsKLQotc3RhdGljIHZvaWQgdWRhMTM0MV9mcmVlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0JbDNfZGV0YWNoX2NsaWVudChjbG50KTsgLy8gY2FsbHMga2ZyZWUgZm9yIGRyaXZlcl9kYXRhIChzdHJ1Y3QgdWRhMTM0MSkKLQlrZnJlZShjbG50KTsKLX0KLQotc3RhdGljIGludCB1ZGExMzQxX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7Ci0JdWRhMTM0MV9mcmVlKGNsbnQpOwotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqKmNsbnRwKQotewotCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewotCQkuZGV2X2ZyZWUgPSAgICAgdWRhMTM0MV9kZXZfZnJlZSwKLQl9OwotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQ7Ci0JaW50IGlkeCwgZXJyOwotCi0JaWYgKHNuZF9CVUdfT04oIWNhcmQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsbnQgPSBremFsbG9jKHNpemVvZigqY2xudCksIEdGUF9LRVJORUwpOwotCWlmIChjbG50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotICAgICAgICAgCi0JaWYgKChlcnIgPSBsM19hdHRhY2hfY2xpZW50KGNsbnQsICJsMy1iaXQtc2ExMTAwLWdwaW8iLCBVREExMzQxX0FMU0FfTkFNRSkpKSB7Ci0JCWtmcmVlKGNsbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfdWRhMTM0MV9jb250cm9scyk7IGlkeCsrKSB7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfdWRhMTM0MV9jb250cm9sc1tpZHhdLCBjbG50KSkpIDwgMCkgewotCQkJdWRhMTM0MV9mcmVlKGNsbnQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0NPREVDLCBjbG50LCAmb3BzKSkgPCAwKSB7Ci0JCXVkYTEzNDFfZnJlZShjbG50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkqY2xudHAgPSBjbG50OwotCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJVREExMzQxVFMgTWl4ZXIiKTsKLQkoKHN0cnVjdCB1ZGExMzQxICopY2xudC0+ZHJpdmVyX2RhdGEpLT5jYXJkID0gY2FyZDsKLSAgICAgICAgCi0Jc25kX3VkYTEzNDFfcHJvY19pbml0KGNhcmQsIGNsbnQpOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBMMyBvcGVyYXRpb25zICovCi0KLXN0YXRpYyBpbnQgdWRhMTM0MV9hdHRhY2goc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhOwotCi0JdWRhID0ga3phbGxvYyhzaXplb2YoKnVkYSksIDAsIEdGUF9LRVJORUwpOwotCWlmICghdWRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIGluaXQgZml4ZWQgcGFydHMgb2YgbXkgY29weSBvZiByZWdpc3RlcnMgKi8KLQl1ZGEtPnJlZ3Nbc3RhdDBdICAgPSBTVEFUMDsKLQl1ZGEtPnJlZ3Nbc3RhdDFdICAgPSBTVEFUMTsKLQotCXVkYS0+cmVnc1tkYXRhMF8wXSA9IERBVEEwXzA7Ci0JdWRhLT5yZWdzW2RhdGEwXzFdID0gREFUQTBfMTsKLQl1ZGEtPnJlZ3NbZGF0YTBfMl0gPSBEQVRBMF8yOwotCi0JdWRhLT53cml0ZSA9IHNuZF91ZGExMzQxX2NvZGVjX3dyaXRlOwotCXVkYS0+cmVhZCA9IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQ7Ci0gIAotCXNwaW5fbG9ja19pbml0KCZ1ZGEtPnJlZ19sb2NrKTsKLSAgICAgICAgCi0JY2xudC0+ZHJpdmVyX2RhdGEgPSB1ZGE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVkYTEzNDFfZGV0YWNoKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Ja2ZyZWUoY2xudC0+ZHJpdmVyX2RhdGEpOwotfQotCi1zdGF0aWMgaW50Ci11ZGExMzQxX2NvbW1hbmQoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChjbWQgIT0gQ01EX1JFQURfUkVHKQotCQlyZXR1cm4gc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIGNtZCwgKGludCkgYXJnLCBGTFVTSCk7Ci0KLQlyZXR1cm4gc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCAoaW50KSBhcmcpOwotfQotCi1zdGF0aWMgaW50IHVkYTEzNDFfb3BlbihzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQotCXVkYS0+YWN0aXZlID0gMTsKLQotCS8qIGluaXQgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9SRVNFVCwgMCwgUkVHU19PTkxZKTsKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0ZTLCBGMjU2LCBGTFVTSCk7ICAgICAgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0ZPUk1BVCwgTFNCMTYsIEZMVVNIKTsgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX09HQUlOLCBPTiwgRkxVU0gpOyAgICAgIC8vIGRlZmF1bHQgb2ZmIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9JR0FJTiwgT04sIEZMVVNIKTsgICAgICAvLyBkZWZhdWx0IG9mZiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfREFDLCBPTiwgRkxVU0gpOwkvLyA/Pz8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQURDLCBPTiwgRkxVU0gpOwkvLyA/Pz8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfVk9MVU1FLCAyMCwgRkxVU0gpOyAgICAgLy8gZGVmYXVsdCAwZEIgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0JBU1MsIDAsIFJFR1NfT05MWSk7ICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1RSRUJCTEUsIDAsIFJFR1NfT05MWSk7IC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1BFQUssIEFGVEVSLCBSRUdTX09OTFkpOy8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0RFRU1QLCBOT05FLCBSRUdTX09OTFkpOy8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQkvL2F0IHRoaXMgbW9tZW50IHNob3VsZCBiZSBRTVVURUQgYnkgaDM2MDBfYXVkaW9faW5pdAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTVVURSwgT0ZGLCBSRUdTX09OTFkpOyAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRklMVEVSLCBNQVgsIEZMVVNIKTsgICAgLy8gZGVmYXVsIGZsYXQgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0NIMSwgMzEsIEZMVVNIKTsgICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0NIMiwgNCwgRkxVU0gpOyAgICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01JQywgNCwgRkxVU0gpOyAgICAgICAgIC8vIGRlZmF1bHQgMGRCIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NSVhFUiwgTUlYRVIsIEZMVVNIKTsgICAvLyBkZWZhdWx0IGRvdWIuZGlmLm1vZGUgICAgICAgICAgCi0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BR0MsIE9GRiwgRkxVU0gpOyAgICAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9JRywgMCwgRkxVU0gpOyAgICAgICAgICAvLyB1bmtub3duIHN0YXRlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BR0NfVElNRSwgMCwgRkxVU0gpOyAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BR0NfTEVWRUwsIDAsIEZMVVNIKTsgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdWRhMTM0MV9jbG9zZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQotCXVkYS0+YWN0aXZlID0gMDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBNb2R1bGUgYW5kIEwzIGluaXRpYWxpemF0aW9uICovCi0KLXN0YXRpYyBzdHJ1Y3QgbDNfb3BzIHVkYTEzNDFfb3BzID0gewotCS5vcGVuID0JCXVkYTEzNDFfb3BlbiwKLQkuY29tbWFuZCA9CXVkYTEzNDFfY29tbWFuZCwKLQkuY2xvc2UgPQl1ZGExMzQxX2Nsb3NlLAotfTsKLQotc3RhdGljIHN0cnVjdCBsM19kcml2ZXIgdWRhMTM0MV9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJVURBMTM0MV9BTFNBX05BTUUsCi0JLmF0dGFjaF9jbGllbnQgPSB1ZGExMzQxX2F0dGFjaCwKLQkuZGV0YWNoX2NsaWVudCA9IHVkYTEzNDFfZGV0YWNoLAotCS5vcHMgPQkJJnVkYTEzNDFfb3BzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdWRhMTM0MV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGwzX2FkZF9kcml2ZXIoJnVkYTEzNDFfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHVkYTEzNDFfZXhpdCh2b2lkKQotewotCWwzX2RlbF9kcml2ZXIoJnVkYTEzNDFfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodWRhMTM0MV9pbml0KTsKLW1vZHVsZV9leGl0KHVkYTEzNDFfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgVURBMTM0MSBDT0RFQyBkcml2ZXIgZm9yIEFMU0EiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1VEQTEzNDEsVURBMTM0MVRTfX0iKTsKLQotRVhQT1JUX1NZTUJPTChzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyk7Ci0KLS8qIH19fSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IGNlMGFhMDQuLmM1YzlhOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9LY29uZmlnCisrKyBiL3NvdW5kL2lzYS9LY29uZmlnCkBAIC01Niw4ICs1Niw4IEBACiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQUQxODQ4IChBbmFsb2cgRGV2aWNlcykgb3IKIAkgIENTNDI0OCAoQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycykgY2hpcHMuCiAJICAKLQkgIEZvciBuZXdlciBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYywgdXNlIHRoZSBDUzQyMzEsIENTNDIzMiBvcgotCSAgQ1M0MjM2KyBkcml2ZXJzLgorCSAgRm9yIG5ld2VyIGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljLCB1c2UgdGhlIENTNDIzMSBvciBDUzQyMzIrCisJICBkcml2ZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWQxODQ4LgpAQCAtOTQsNiArOTQsOCBAQAogCXRyaXN0YXRlICJDLU1lZGlhIENNSTgzMzAiCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJc2VsZWN0IFNORF9TQjE2X0RTUAorCXNlbGVjdCBTTkRfT1BMM19MSUIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlCiAJICBDLU1lZGlhIENNSTgzMzAgY2hpcC4KQEAgLTExMiwyNiArMTE0LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjMxLgogCi1jb25maWcgU05EX0NTNDIzMgotCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzIgZHJpdmVyIgotCXNlbGVjdCBTTkRfT1BMM19MSUIKLQlzZWxlY3QgU05EX01QVTQwMV9VQVJUCi0Jc2VsZWN0IFNORF9XU1NfTElCCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzMiBjaGlwcyBmcm9tIENpcnJ1cwotCSAgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjMyLgotCiBjb25maWcgU05EX0NTNDIzNgotCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzYrIGRyaXZlciIKKwl0cmlzdGF0ZSAiR2VuZXJpYyBDaXJydXMgTG9naWMgQ1M0MjMyL0NTNDIzNisgZHJpdmVyIgogCXNlbGVjdCBTTkRfT1BMM19MSUIKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJaGVscAotCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDUzQyMzUsQ1M0MjM2LENTNDIzN0IsQ1M0MjM4QiwKLQkgIENTNDIzOSBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMuCisJICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzMixDUzQyMzUsQ1M0MjM2LENTNDIzN0IsCisJICBDUzQyMzhCLENTNDIzOSBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYyAtIENyeXN0YWwKKwkgIFNlbWljb25kdWN0b3JzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjM2LgpAQCAtMzc3LDE0ICszNjgsMTcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zZ2FsYXh5LgogCiBjb25maWcgU05EX1NTQ0FQRQotCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgUG5QIGRyaXZlciIKKwl0cmlzdGF0ZSAiRW5zb25pcSBTb3VuZFNjYXBlIGRyaXZlciIKIAlzZWxlY3QgU05EX0hXREVQCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfV1NTX0xJQgogCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFbnNvbmlxIFNvdW5kU2NhcGUgUG5QCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRW5zb25pcSBTb3VuZFNjYXBlIAogCSAgc291bmRjYXJkcy4KIAorCSAgVGhlIFBDTSBhdWRpbyBpcyBzdXBwb3J0ZWQgb24gU291bmRTY2FwZSBDbGFzc2ljLCBFbGl0ZSwgUG5QCisJICBhbmQgVklWTyBjYXJkcy4gVGhlIE1JREkgc3VwcG9ydCBpcyB2ZXJ5IGV4cGVyaW1lbnRhbC4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNzY2FwZS4KIApAQCAtNDExLDUgKzQwNSwzNiBAQAogCSAgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgZmlybXdhcmUgZmlsZXMgZnJvbSB0aGUKIAkgIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KIAorY29uZmlnIFNORF9NU05EX1BJTk5BQ0xFCisJdHJpc3RhdGUgIlR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFBpbm5hY2xlL0ZpamkgZHJpdmVyIgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFBpbm5hY2xlLworCSAgRmlqaSBzb3VuZGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbXNuZC1waW5uYWNsZS4KKworY29uZmlnIFNORF9NU05EX0NMQVNTSUMKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgQ2xhc3NpYywgVGFoaXRpLCBNb250ZXJleSIKKwlkZXBlbmRzIG9uIFg4NiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5IE0gaGVyZSBpZiB5b3UgaGF2ZSBhIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSBvcgorCSAgTW9udGVyZXkgKG5vdCBmb3IgdGhlIFBpbm5hY2xlIG9yIEZpamkpLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTXVsdGlTb3VuZD4gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbgorCSAgYWJvdXQgdGhpcyBkcml2ZXIuICBOb3RlIHRoYXQgaXQgaGFzIGJlZW4gZGlzY29udGludWVkLCBidXQgdGhlCisJICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL3d3dy50dXJ0bGViZWFjaC5jb20vc2l0ZS9rYl9mdHAvNzkwLmFzcD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1tc25kLWNsYXNzaWMuCisKIGVuZGlmCSMgU05EX0lTQQogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvTWFrZWZpbGUgYi9zb3VuZC9pc2EvTWFrZWZpbGUKaW5kZXggNjNhZjEzZC4uYjkwNmI5YSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9NYWtlZmlsZQpAQCAtMjYsNSArMjYsNSBAQAogb2JqLSQoQ09ORklHX1NORF9TR0FMQVhZKSArPSBzbmQtc2dhbGF4eS5vCiBvYmotJChDT05GSUdfU05EX1NTQ0FQRSkgKz0gc25kLXNzY2FwZS5vCiAKLW9iai0kKENPTkZJR19TTkQpICs9IGFkMTgxNmEvIGFkMTg0OC8gY3M0MjN4LyBlczE2ODgvIGd1cy8gb3B0aTl4eC8gXAorb2JqLSQoQ09ORklHX1NORCkgKz0gYWQxODE2YS8gYWQxODQ4LyBjczQyM3gvIGVzMTY4OC8gZ3VzLyBtc25kLyBvcHRpOXh4LyBcCiAJCSAgICAgc2IvIHdhdmVmcm9udC8gd3NzLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCmluZGV4IDc3NTI0MjQuLmJiY2JmOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKQEAgLTE1NiwxMCArMTU2LDEyIEBACiAJc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEgKmFjYXJkOwogCXN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEpLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2FkMTgxNmFfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewpAQCAtMTk0LDYgKzE5NiwxMiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJZXJyb3IgPSBzbmRfYWQxODE2YV90aW1lcihjaGlwLCAwLCAmdGltZXIpOworCWlmIChlcnJvciA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwogCWlmIChtcHVfcG9ydFtkZXZdID4gMCkgewogCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLCBtcHVfaXJxW2Rldl0sIElSUUZfRElTQUJMRUQsCkBAIC0yMDcsMTEgKzIxNSw4IEBACiAJCQkJICAgIE9QTDNfSFdfQVVUTywgMCwgJm9wbDMpIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseC5cbiIsIGZtX3BvcnRbZGV2XSwgZm1fcG9ydFtkZXZdICsgMik7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIDEsIDIpKSA8IDApIHsKLQkJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJCXJldHVybiBlcnJvcjsKLQkJCX0KLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkgeworCQkJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CisJCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYwppbmRleCAzYmZjYTdjLi4wNWFlZjhiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCisrKyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJaWYgKGluYihBRDE4MTZBX1JFRyhBRDE4MTZBX0NISVBfU1RBVFVTKSkgJiBBRDE4MTZBX1JFQURZKQogCQkJcmV0dXJuIDA7CiAKLQlzbmRfcHJpbnRrKCJjaGlwIGJ1c3kuXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiY2hpcCBidXN5LlxuIik7CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiaW52YWxpZCB0cmlnZ2VyIG1vZGUgMHgleC5cbiIsIHdoYXQpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiaW52YWxpZCB0cmlnZ2VyIG1vZGUgMHgleC5cbiIsIHdoYXQpOwogCQllcnJvciA9IC1FSU5WQUw7CiAJfQogCkBAIC0zNzcsNyArMzc3LDYgQEAKIAkuZmlmb19zaXplID0JCTAsCiB9OwogCi0jaWYgMCAvKiBub3QgdXNlZCBub3cgKi8KIHN0YXRpYyBpbnQgc25kX2FkMTgxNmFfdGltZXJfY2xvc2Uoc3RydWN0IHNuZF90aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwpAQCAtNDQyLDggKzQ0MSw2IEBACiAJLnN0YXJ0ID0Jc25kX2FkMTgxNmFfdGltZXJfc3RhcnQsCiAJLnN0b3AgPQkJc25kX2FkMTgxNmFfdGltZXJfc3RvcCwKIH07Ci0jZW5kaWYgLyogbm90IHVzZWQgbm93ICovCi0KIAogc3RhdGljIGludCBzbmRfYWQxODE2YV9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtNTY4LDcgKzU2NSw3IEBACiAJY2FzZSBBRDE4MTZBX0hXX0FEMTgxNToJcmV0dXJuICJBRDE4MTUiOwogCWNhc2UgQUQxODE2QV9IV19BRDE4TUFYMTA6IHJldHVybiAiQUQxOG1heDEwIjsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJVbmtub3duIGNoaXAgdmVyc2lvbiAlZDolZC5cbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIGNoaXAgdmVyc2lvbiAlZDolZC5cbiIsCiAJCQljaGlwLT52ZXJzaW9uLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXJldHVybiAiQUQxODE2QSAtIHVua25vd24iOwogCX0KQEAgLTY4Nyw3ICs2ODQsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMCAvKiBub3QgdXNlZCBub3cgKi8KIGludCBfX2RldmluaXQgc25kX2FkMTgxNmFfdGltZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKQogewogCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOwpAQCAtNzA5LDcgKzcwNSw2IEBACiAJCSpydGltZXIgPSB0aW1lcjsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBub3QgdXNlZCBub3cgKi8KIAogLyoKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwppbmRleCAyMjNhNmMwLi40YmVlYjZmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKQEAgLTkxLDkgKzkxLDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCAtMSwgaXJxW25dLCBkbWExW25dLCAtMSwKIAkJCXRoaW5rcGFkW25dID8gV1NTX0hXX1RISU5LUEFEIDogV1NTX0hXX0RFVEVDVCwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZGxpYi5jIGIvc291bmQvaXNhL2FkbGliLmMKaW5kZXggMzc0YjcxNy4uNzQ2NWFlMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkbGliLmMKKysrIGIvc291bmQvaXNhL2FkbGliLmMKQEAgLTUzLDEwICs1MywxMCBAQAogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgeworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGNyZWF0ZSBjYXJkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnJvcjsKIAl9CiAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSByZXF1ZXN0X3JlZ2lvbihwb3J0W25dLCA0LCBDUkRfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWxzMTAwLmMgYi9zb3VuZC9pc2EvYWxzMTAwLmMKaW5kZXggZjFjZTMwZi4uNWZkNTJlNCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FsczEwMC5jCisrKyBiL3NvdW5kL2lzYS9hbHMxMDAuYwpAQCAtMTYzLDkgKzE2MywxMCBAQAogCXN0cnVjdCBzbmRfY2FyZF9hbHMxMDAgKmFjYXJkOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hbHMxMDApKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hbHMxMDApLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2FsczEwMF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYXp0MjMyMC5jIGIvc291bmQvaXNhL2F6dDIzMjAuYwppbmRleCAzZTc0ZDFhLi5mN2FhNjM3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYXp0MjMyMC5jCisrKyBiL3NvdW5kL2lzYS9henQyMzIwLmMKQEAgLTE4NCw5ICsxODQsMTAgQEAKIAlzdHJ1Y3Qgc25kX3dzcyAqY2hpcDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjApLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2F6dDIzMjBfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NtaTgzMzAuYyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKaW5kZXggZTQ5YWVjNy4uZGU4MzYwOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NtaTgzMzAuYworKysgYi9zb3VuZC9pc2EvY21pODMzMC5jCkBAIC0zMSwxMSArMzEsMTEgQEAKICAqICBUbyBxdWlja2x5IGxvYWQgdGhlIG1vZHVsZSwKICAqCiAgKiAgbW9kcHJvYmUgLWEgc25kLWNtaTgzMzAgc2Jwb3J0PTB4MjIwIHNiaXJxPTUgc2JkbWE4PTEKLSAqICAgIHNiZG1hMTY9NSB3c3Nwb3J0PTB4NTMwIHdzc2lycT0xMSB3c3NkbWE9MAorICogICAgc2JkbWExNj01IHdzc3BvcnQ9MHg1MzAgd3NzaXJxPTExIHdzc2RtYT0wIGZtcG9ydD0weDM4OAogICoKICAqICBUaGlzIGNhcmQgaGFzIHR3byBtaXhlcnMgYW5kIHR3byBQQ00gZGV2aWNlcy4gIEkndmUgY2hlZXNlZCBpdCBzdWNoCiAgKiAgdGhhdCByZWNvcmRpbmcgYW5kIHBsYXliYWNrIGNhbiBiZSBkb25lIHRocm91Z2ggdGhlIHNhbWUgZGV2aWNlLgotICogIFRoZSBkcml2ZXIgIm1hZ2ljYWxseSIgcm91dGVzIHRoZSBjYXB0dXJpbmcgdG8gdGhlIEFEMTg0OCBjb2RlYywKKyAqICBUaGUgZHJpdmVyICJtYWdpY2FsbHkiIHJvdXRlcyB0aGUgY2FwdHVyaW5nIHRvIHRoZSBDTUk4MzMwIGNvZGVjLAogICogIGFuZCBwbGF5YmFjayB0byB0aGUgU0IxNiBjb2RlYy4gIFRoaXMgYWxsb3dzIGZvciBmdWxsLWR1cGxleCBtb2RlCiAgKiAgdG8gc29tZSBleHRlbnQuCiAgKiAgVGhlIHV0aWxpdGllcyBpbiBhbHNhLXV0aWxzIGFyZSBhd2FyZSBvZiBib3RoIGRldmljZXMsIHNvIHBhc3NpbmcKQEAgLTUxLDYgKzUxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CiAjaW5jbHVkZSA8c291bmQvc2IuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKQEAgLTc5LDYgKzgxLDkgQEAKIHN0YXRpYyBsb25nIHdzc3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwogc3RhdGljIGludCB3c3NpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CiBzdGF0aWMgaW50IHdzc2RtYVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0RNQTsKK3N0YXRpYyBsb25nIGZtcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgbG9uZyBtcHVwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgbXB1aXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIENNSTgzMzAgc291bmRjYXJkLiIpOwpAQCAtMTA3LDYgKzExMiwxMiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHdzc2RtYSwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod3NzZG1hLCAiRE1BIGZvciBDTUk4MzMwIFdTUyBkcml2ZXIuIik7CiAKK21vZHVsZV9wYXJhbV9hcnJheShmbXBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXBvcnQsICJGTSBwb3J0ICMgZm9yIENNSTgzMzAgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdXBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVwb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yIENNSTgzMzAgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdWlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1aXJxLCAiSVJRICMgZm9yIENNSTgzMzAgTVBVLTQwMSBwb3J0LiIpOwogI2lmZGVmIENPTkZJR19QTlAKIHN0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOwpAQCAtMTQ5LDYgKzE2MCw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCXN0cnVjdCBwbnBfZGV2ICpjYXA7CiAJc3RydWN0IHBucF9kZXYgKnBsYXk7CisJc3RydWN0IHBucF9kZXYgKm1wdTsKICNlbmRpZgogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3dzcyAqd3NzOwpAQCAtMTY1LDcgKzE3Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfY21pODMzMF9wbnBpZHNbXSA9IHsKLQl7IC5pZCA9ICJDTUkwMDAxIiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0gfSB9LAorCXsgLmlkID0gIkNNSTAwMDEiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9IH0sCiAJeyAuaWQgPSAiIiB9CiB9OwogCkBAIC0yMTksOCArMjMxLDEwIEBACiAJCUNNSTgzMzBfUk1VWDNELCA1LCAxLCAxKSwKIFdTU19TSU5HTEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMCwKIAkJQ01JODMzMF9PVVRQVVRWT0wsIDMsIDMsIDApLAotV1NTX1NJTkdMRSgiRk0gUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJQ01JODMzMF9SRUNNVVgsIDMsIDEsIDEpLAorV1NTX0RPVUJMRSgiRk0gUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVCwgQ1M0MjMxX0FVWDJfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRSgiRk0gUGxheWJhY2sgVm9sdW1lIiwgMCwKKwkJQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVCwgQ1M0MjMxX0FVWDJfUklHSFRfSU5QVVQsIDAsIDAsIDMxLCAxKSwKIFdTU19TSU5HTEUoU05EUlZfQ1RMX05BTUVfSUVDOTU4KCJJbnB1dCAiLCBDQVBUVVJFLCBTV0lUQ0gpLCAwLAogCQlDTUk4MzMwX1JNVVgzRCwgNywgMSwgMSksCiBXU1NfU0lOR0xFKFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiSW5wdXQgIiwgUExBWUJBQ0ssIFNXSVRDSCksIDAsCkBAIC0zMjMsMTYgKzMzNywyMSBAQAogCWlmIChhY2FyZC0+cGxheSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCisJYWNhcmQtPm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIGlkLT5kZXZzWzJdLmlkLCBOVUxMKTsKKwlpZiAoYWNhcmQtPnBsYXkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKwogCXBkZXYgPSBhY2FyZC0+Y2FwOwogCiAJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwL0MzRCAoQUQxODQ4KSBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwL0MzRCBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAl3c3Nwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKIAl3c3NkbWFbZGV2XSA9IHBucF9kbWEocGRldiwgMCk7CiAJd3NzaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOworCWZtcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMSk7CiAKIAkvKiBhbGxvY2F0ZSBTQjE2IHJlc291cmNlcyAqLwogCXBkZXYgPSBhY2FyZC0+cGxheTsKQEAgLTM0Nyw2ICszNjYsMTcgQEAKIAlzYmRtYTE2W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwogCXNiaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCisJLyogYWxsb2NhdGUgTVBVLTQwMSByZXNvdXJjZXMgKi8KKwlwZGV2ID0gYWNhcmQtPm1wdTsKKworCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkNNSTgzMzAvQzNEIChNUFUtNDAxKSBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwltcHVwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKKwltcHVpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTQ2NywyNiArNDk3LDI5IEBACiAKICNkZWZpbmUgUEZYCSJjbWk4MzMwOiAiCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jbWk4MzMwX2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NtaTgzMzAgKmFjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NtaTgzMzApKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiY291bGQgbm90IGdldCBhIG5ldyBjYXJkXG4iKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFjYXJkLT5jYXJkID0gY2FyZDsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY21pODMzMF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCiB7CiAJc3RydWN0IHNuZF9jbWk4MzMwICphY2FyZDsKIAlpbnQgaSwgZXJyOworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWVyciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHdzc3BvcnRbZGV2XSArIDQsIC0xLApAQCAtNDk0LDExICs1MjcsMTEgQEAKIAkJCSAgICAgd3NzZG1hW2Rldl0sIC0xLAogCQkJICAgICBXU1NfSFdfREVURUNULCAwLCAmYWNhcmQtPndzcyk7CiAJaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihBRDE4NDgpIGRldmljZSBidXN5Pz9cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKENNSTgzMzApIGRldmljZSBidXN5Pz9cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoYWNhcmQtPndzcy0+aGFyZHdhcmUgIT0gV1NTX0hXX0NNSTgzMzApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihBRDE4NDgpIG5vdCBmb3VuZCBkdXJpbmcgcHJvYmVcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKENNSTgzMzApIG5vdCBmb3VuZCBkdXJpbmcgcHJvYmVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTUzMCw2ICs1NjMsMjcgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQorCWlmIChmbXBvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLAorCQkJCSAgICBmbXBvcnRbZGV2XSwgZm1wb3J0W2Rldl0gKyAyLAorCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkJICAgIm5vIE9QTCBkZXZpY2UgYXQgMHglbHgtMHglbHggP1xuIiwKKwkJCQkgICBmbXBvcnRbZGV2XSwgZm1wb3J0W2Rldl0gKyAyKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAobXB1cG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAorCQkJCQltcHVwb3J0W2Rldl0sIDAsIG1wdWlycVtkZXZdLAorCQkJCQlJUlFGX0RJU0FCTEVELCBOVUxMKSA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseC5cbiIsCisJCQkJbXB1cG9ydFtkZXZdKTsKKwl9CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQ01JODMzMC9DM0QiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQy1NZWRpYSBDTUk4MzMwL0MzRCIpOwpAQCAtNTY0LDkgKzYxOCw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX2NtaTgzMzBfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC02MjgsOSArNjgyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAkJCSAgICAgICAKLQljYXJkID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAlpZiAoKHJlcyA9IHNuZF9jbWk4MzMwX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiUG5QIGRldGVjdGlvbiBmYWlsZWRcbiIpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZSBiL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKaW5kZXggNTg3MGNhMi4uNmQzOTdlOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCkBAIC0zLDEzICszLDExIEBACiAjIENvcHlyaWdodCAoYykgMjAwMSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PgogIwogCi1zbmQtY3M0MjM2LWxpYi1vYmpzIDo9IGNzNDIzNl9saWIubwogc25kLWNzNDIzMS1vYmpzIDo9IGNzNDIzMS5vCi1zbmQtY3M0MjMyLW9ianMgOj0gY3M0MjMyLm8KLXNuZC1jczQyMzYtb2JqcyA6PSBjczQyMzYubworc25kLWNzNDIzNi1vYmpzIDo9IGNzNDIzNi5vIGNzNDIzNl9saWIubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX0NTNDIzMSkgKz0gc25kLWNzNDIzMS5vCi1vYmotJChDT05GSUdfU05EX0NTNDIzMikgKz0gc25kLWNzNDIzMi5vCi1vYmotJChDT05GSUdfU05EX0NTNDIzNikgKz0gc25kLWNzNDIzNi5vIHNuZC1jczQyMzYtbGliLm8KK29iai0kKENPTkZJR19TTkRfQ1M0MjM2KSArPSBzbmQtY3M0MjM2Lm8KKwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCBmMDE5ZDQ0Li5jYjkxNTNlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTk1LDkgKzk1LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCAtMSwgaXJxW25dLCBkbWExW25dLCBkbWEyW25dLAogCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYWQyZTYuLjAwMDAwMDAKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2RlZmluZSBDUzQyMzIKLSNpbmNsdWRlICJjczQyMzYuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCmluZGV4IDAxOWM5NDAuLmEwNzZhNmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwpAQCAtMzMsMTcgKzMzLDE0IEBACiAKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0jaWZkZWYgQ1M0MjMyCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyMzIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzMi05Iik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tUdXJ0bGUgQmVhY2gsVEJTLTIwMDB9LCIKIAkJIntUdXJ0bGUgQmVhY2gsVHJvcGV6IFBsdXN9LCIKIAkJIntTSUMgQ3J5c3RhbFdhdmUgMzJ9LCIKIAkJIntIZXdsZXR0IFBhY2thcmQsT21uaWJvb2sgNTUwMH0sIgogCQkie1RlcnJhVGVjLE1hZXN0cm8gMzIvOTZ9LCIKLQkJIntQaGlsaXBzLFBDQTcwUFN9fSIpOwotI2Vsc2UKLU1PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzNS05Iik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNX0sIgorCQkie1BoaWxpcHMsUENBNzBQU319LCIKKwkJInt7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzV9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNn0sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM3fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzh9LCIKQEAgLTcwLDE1ICs2NywxMSBAQAogCQkie1R5cGhvb24gU291bmRzeXN0ZW0sQ1M0MjM2Qn0sIgogCQkie1R1cnRsZSBCZWFjaCxNYWxpYnV9LCIKIAkJIntVbmtub3duLERpZ2l0YWwgUEMgNTAwMCBPbmJvYXJkfX0iKTsKLSNlbmRpZgogCi0jaWZkZWYgQ1M0MjMyCi0jZGVmaW5lIElERU5UICJDUzQyMzIiCi0jZGVmaW5lIERFVl9OQU1FICJjczQyMzIiCi0jZWxzZQotI2RlZmluZSBJREVOVCAiQ1M0MjM2KyIKLSNkZWZpbmUgREVWX05BTUUgImNzNDIzNiIKLSNlbmRpZgorTU9EVUxFX0FMSUFTKCJzbmRfY3M0MjMyIik7CisKKyNkZWZpbmUgSURFTlQgIkNTNDIzMisiCisjZGVmaW5lIERFVl9OQU1FICJjczQyMzIrIgogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCkBAIC0xMjgsOSArMTIxLDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiBzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogc3RhdGljIGludCBwbnBjX3JlZ2lzdGVyZWQ7Ci0jaWZkZWYgQ1M0MjMyCiBzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOwotI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCiBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2IHsKQEAgLTE0NSwxMSArMTM2LDEwIEBACiAKICNpZmRlZiBDT05GSUdfUE5QCiAKLSNpZmRlZiBDUzQyMzIKIC8qCiAgKiBQTlAgQklPUwogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc25kX2NzNDIzMl9wbnBiaW9zaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBiaW9zaWRzW10gPSB7CiAJeyAuaWQgPSAiQ1NDMDEwMCIgfSwKIAl7IC5pZCA9ICJDU0MwMDAwIiB9LAogCS8qIEd1aWxsZW1vdCBUdXJ0bGViZWFjaCBzb21ldGhpbmcgYXBwZWFycyB0byBiZSBjczQyMzIgY29tcGF0aWJsZQpAQCAtMTU3LDEwICsxNDcsOCBAQAogCXsgLmlkID0gIkdJTTAxMDAiIH0sCiAJeyAuaWQgPSAiIiB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHNuZF9jczQyMzJfcG5wYmlvc2lkcyk7Ci0jZW5kaWYgLyogQ1M0MjMyICovCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX2NzNDIzeF9wbnBiaW9zaWRzKTsKIAotI2lmZGVmIENTNDIzMgogI2RlZmluZSBDUzQyM1hfSVNBUE5QX0RSSVZFUgkiY3M0MjMyX2lzYXBucCIKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5waWRzW10gPSB7CiAJLyogUGhpbGlwcyBQQ0E3MFBTICovCkBAIC0xNzksMTIgKzE2Nyw2IEBACiAJeyAuaWQgPSAiQ1NDZjAzMiIsIC5kZXZzID0geyB7ICJDU0MwMDAwIiB9LCB7ICJDU0MwMDEwIiB9LCB7ICJDU0MwMDAzIiB9IH0gfSwKIAkvKiBOZXRmaW5pdHkgMzAwMCBvbi1ib2FyZCBzb3VuZGNhcmQgKi8KIAl7IC5pZCA9ICJDU0NlODI1IiwgLmRldnMgPSB7IHsgIkNTQzAxMDAiIH0sIHsgIkNTQzAxMTAiIH0sIHsgIkNTQzAxMGYiIH0gfSB9LAotCS8qIC0tLSAqLwotCXsgLmlkID0gIiIgfQkvKiBlbmQgKi8KLX07Ci0jZWxzZSAvKiBDUzQyMzYgKi8KLSNkZWZpbmUgQ1M0MjNYX0lTQVBOUF9EUklWRVIJImNzNDIzNl9pc2FwbnAiCi1zdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGlkc1tdID0gewogCS8qIEludGVsIE1hcmxpbiBTcGlrZSBNb3RoZXJib2FyZCAtIENTNDIzNSAqLwogCXsgLmlkID0gIkNTQzAyMjUiLCAuZGV2cyA9IHsgeyAiQ1NDMDAwMCIgfSwgeyAiQ1NDMDAxMCIgfSwgeyAiQ1NDMDAwMyIgfSB9IH0sCiAJLyogSW50ZWwgTWFybGluIFNwaWtlIE1vdGhlcmJvYXJkICgjMikgLSBDUzQyMzUgKi8KQEAgLTI2Niw3ICsyNDgsNiBAQAogCS8qIC0tLSAqLwogCXsgLmlkID0gIiIgfQkvKiBlbmQgKi8KIH07Ci0jZW5kaWYKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2NzNDIzeF9wbnBpZHMpOwogCkBAIC0zMjMsMTcgKzMwNCwxOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ1M0MjMyCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyMzJfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkLAotCQkJCQkgc3RydWN0IHBucF9kZXYgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyM3hfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkLAorCQkJCQkgc3RydWN0IHBucF9kZXYgKnBkZXYsCisJCQkJCSBzdHJ1Y3QgcG5wX2RldiAqY2RldikKIHsKIAlhY2FyZC0+d3NzID0gcGRldjsKIAlpZiAoc25kX2NzNDIzeF9wbnBfaW5pdF93c3MoZGV2LCBhY2FyZC0+d3NzKSA8IDApCiAJCXJldHVybiAtRUJVU1k7Ci0JY3BvcnRbZGV2XSA9IC0xOworCWlmIChjZGV2KQorCQljcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQoY2RldiwgMCk7CisJZWxzZQorCQljcG9ydFtkZXZdID0gLTE7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfY3M0MjN4X3BucGMoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCiAJCQkJCSAgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCkBAIC0zODIsMTYgKzM2NSwxOCBAQAogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoYWNhcmQtPnJlc19zYl9wb3J0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NzNDIzeF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfY3M0MjN4X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX2NzNDIzNl9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNDA5LDQwICszOTQsMzkgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotI2lmZGVmIENTNDIzMgogCWVyciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKIAkJCSAgICAgaXJxW2Rldl0sCiAJCQkgICAgIGRtYTFbZGV2XSwgZG1hMltkZXZdLAotCQkJICAgICBXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CisJCQkgICAgIFdTU19IV19ERVRFQ1QzLCAwLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOworCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzZCX01BU0spIHsKKwkJc25kX3dzc19mcmVlKGNoaXApOworCQllcnIgPSBzbmRfY3M0MjM2X2NyZWF0ZShjYXJkLAorCQkJCQlwb3J0W2Rldl0sIGNwb3J0W2Rldl0sCisJCQkJCWlycVtkZXZdLCBkbWExW2Rldl0sIGRtYTJbZGV2XSwKKwkJCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWFjYXJkLT5jaGlwID0gY2hpcDsKIAotCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsICZwY20pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3M0MjM2X3BjbShjaGlwLCAwLCAmcGNtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc25kX3dzc19taXhlcihjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2NzNDIzNl9taXhlcihjaGlwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWFjYXJkLT5jaGlwID0gY2hpcDsKKwkJZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAotI2Vsc2UgLyogQ1M0MjM2ICovCi0JZXJyID0gc25kX2NzNDIzNl9jcmVhdGUoY2FyZCwKLQkJCQlwb3J0W2Rldl0sIGNwb3J0W2Rldl0sCi0JCQkJaXJxW2Rldl0sIGRtYTFbZGV2XSwgZG1hMltkZXZdLAotCQkJCVdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlhY2FyZC0+Y2hpcCA9IGNoaXA7Ci0KLQllcnIgPSBzbmRfY3M0MjM2X3BjbShjaGlwLCAwLCAmcGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHNuZF9jczQyMzZfbWl4ZXIoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0jZW5kaWYKKwkJZXJyID0gc25kX3dzc19taXhlcihjaGlwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBwY20tPm5hbWUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSk7CiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsCkBAIC01MTIsOSArNDk2LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX2NzNDIzeF9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTU3NywxMyArNTYxLDE0IEBACiAKIAogI2lmZGVmIENPTkZJR19QTlAKLSNpZmRlZiBDUzQyMzIKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyMzJfcG5wYmlvc19kZXRlY3Qoc3RydWN0IHBucF9kZXYgKnBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjN4X3BucGJpb3NfZGV0ZWN0KHN0cnVjdCBwbnBfZGV2ICpwZGV2LAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBpbnQgZGV2OwogCWludCBlcnI7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBwbnBfZGV2ICpjZGV2OworCWNoYXIgY2lkW1BOUF9JRF9MRU5dOwogCiAJaWYgKHBucF9kZXZpY2VfaXNfaXNhcG5wKHBkZXYpKQogCQlyZXR1cm4gLUVOT0VOVDsJLyogd2UgaGF2ZSBhbm90aGVyIHByb2NlZHVyZSAtIGNhcmQgKi8KQEAgLTU5NCwxMCArNTc5LDE5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmICgoZXJyID0gc25kX2NhcmRfY3M0MjMyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgeworCS8qIHByZXBhcmUgc2Vjb25kIGlkICovCisJc3RyY3B5KGNpZCwgcGRldi0+aWRbMF0uaWQpOworCWNpZFs1XSA9ICcxJzsKKwljZGV2ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICYocGRldi0+cHJvdG9jb2wtPmRldmljZXMpLCBwcm90b2NvbF9saXN0KSB7CisJCWlmICghc3RyY21wKGNkZXYtPmlkWzBdLmlkLCBjaWQpKQorCQkJYnJlYWs7CisJfQorCWVyciA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX2NhcmRfY3M0MjN4X3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldiwgY2Rldik7CisJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQblAgQklPUyBkZXRlY3Rpb24gZmFpbGVkIGZvciAiIElERU5UICJcbiIpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNjEyLDM1ICs2MDYsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9jczQyMzJfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqIHBkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2NzNDIzeF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQogewogCXNuZF9jYXJkX2ZyZWUocG5wX2dldF9kcnZkYXRhKHBkZXYpKTsKIAlwbnBfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc25kX2NzNDIzMl9wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbmRfY3M0MjN4X3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJcmV0dXJuIHNuZF9jczQyM3hfc3VzcGVuZChwbnBfZ2V0X2RydmRhdGEocGRldikpOwogfQogCi1zdGF0aWMgaW50IHNuZF9jczQyMzJfcG5wX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqcGRldikKK3N0YXRpYyBpbnQgc25kX2NzNDIzeF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQogewogCXJldHVybiBzbmRfY3M0MjN4X3Jlc3VtZShwbnBfZ2V0X2RydmRhdGEocGRldikpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjczQyMzJfcG5wX2RyaXZlciA9IHsKLQkubmFtZSA9ICJjczQyMzItcG5wYmlvcyIsCi0JLmlkX3RhYmxlID0gc25kX2NzNDIzMl9wbnBiaW9zaWRzLAotCS5wcm9iZSA9IHNuZF9jczQyMzJfcG5wYmlvc19kZXRlY3QsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jczQyMzJfcG5wX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgY3M0MjN4X3BucF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiY3M0MjN4LXBucGJpb3MiLAorCS5pZF90YWJsZSA9IHNuZF9jczQyM3hfcG5wYmlvc2lkcywKKwkucHJvYmUgPSBzbmRfY3M0MjN4X3BucGJpb3NfZGV0ZWN0LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjN4X3BucF9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gc25kX2NzNDIzMl9wbnBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9jczQyMzJfcG5wX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IHNuZF9jczQyM3hfcG5wX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzbmRfY3M0MjN4X3BucF9yZXN1bWUsCiAjZW5kaWYKIH07Ci0jZW5kaWYgLyogQ1M0MjMyICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcG5wY19kZXRlY3Qoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQpAQCAtNjU2LDkgKzY0OSw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAJaWYgKChyZXMgPSBzbmRfY2FyZF9jczQyM3hfcG5wYyhkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImlzYXBucCBkZXRlY3Rpb24gZmFpbGVkIGFuZCBwcm9iaW5nIGZvciAiIElERU5UCiAJCSAgICAgICAiIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwpAQCAtNzE0LDE4ICs3MDcsMTQgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJaWYgKCFlcnIpCiAJCWlzYV9yZWdpc3RlcmVkID0gMTsKLSNpZmRlZiBDUzQyMzIKLQllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjczQyMzJfcG5wX2RyaXZlcik7CisJZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X3BucF9kcml2ZXIpOwogCWlmICghZXJyKQogCQlwbnBfcmVnaXN0ZXJlZCA9IDE7Ci0jZW5kaWYKIAllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmNzNDIzeF9wbnBjX2RyaXZlcik7CiAJaWYgKCFlcnIpCiAJCXBucGNfcmVnaXN0ZXJlZCA9IDE7Ci0jaWZkZWYgQ1M0MjMyCiAJaWYgKHBucF9yZWdpc3RlcmVkKQogCQllcnIgPSAwOwotI2VuZGlmCiAJaWYgKGlzYV9yZWdpc3RlcmVkKQogCQllcnIgPSAwOwogI2VuZGlmCkBAIC03MzcsMTAgKzcyNiw4IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCWlmIChwbnBjX3JlZ2lzdGVyZWQpCiAJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjczQyM3hfcG5wY19kcml2ZXIpOwotI2lmZGVmIENTNDIzMgogCWlmIChwbnBfcmVnaXN0ZXJlZCkKLQkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyMzJfcG5wX2RyaXZlcik7Ci0jZW5kaWYKKwkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfcG5wX2RyaXZlcik7CiAJaWYgKGlzYV9yZWdpc3RlcmVkKQogI2VuZGlmCiAJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X2lzYV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYwppbmRleCA2YTg1ZmRjLi4zODgzNWYzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYwpAQCAtODgsMTAgKzg4LDYgQEAKICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogCi1NT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBDUzQyMzUvNDIzNkIvNDIzN0IvNDIzOEIvNDIzOSBjaGlwcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCiAvKgogICoKICAqLwpAQCAtMjg2LDcgKzI4Miw4IEBACiAJaWYgKGhhcmR3YXJlID09IFdTU19IV19ERVRFQ1QpCiAJCWhhcmR3YXJlID0gV1NTX0hXX0RFVEVDVDM7CiAJaWYgKGNwb3J0IDwgMHgxMDApIHsKLQkJc25kX3ByaW50aygicGxlYXNlLCBzcGVjaWZ5IGNvbnRyb2wgcG9ydCBmb3IgQ1M0MjM2KyBjaGlwc1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBsZWFzZSwgc3BlY2lmeSBjb250cm9sIHBvcnQgIgorCQkJICAgImZvciBDUzQyMzYrIGNoaXBzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWVyciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnQsIGNwb3J0LApAQCAtMjk1LDcgKzI5Miw4IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoIShjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzZCX01BU0spKSB7Ci0JICAgICAgICBzbmRfcHJpbnRrKCJDUzQyMzYrOiBNT0RFMyBhbmQgZXh0ZW5kZWQgcmVnaXN0ZXJzIG5vdCBhdmFpbGFibGUsIGhhcmR3YXJlPTB4JXhcbiIsY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzYrOiBNT0RFMyBhbmQgZXh0ZW5kZWQgcmVnaXN0ZXJzICIKKwkJCSAgICJub3QgYXZhaWxhYmxlLCBoYXJkd2FyZT0weCV4XG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjaGlwKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMzAzLDE2ICszMDEsMTkgQEAKIAl7CiAJCWludCBpZHg7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgODsgaWR4KyspCi0JCQlzbmRfcHJpbnRrKCJDRCVpID0gMHgleFxuIiwgaWR4LCBpbmIoY2hpcC0+Y3BvcnQgKyBpZHgpKTsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQ0QlaSA9IDB4JXhcbiIsCisJCQkJICAgaWR4LCBpbmIoY2hpcC0+Y3BvcnQgKyBpZHgpKTsKIAkJZm9yIChpZHggPSAwOyBpZHggPCA5OyBpZHgrKykKLQkJCXNuZF9wcmludGsoIkMlaSA9IDB4JXhcbiIsIGlkeCwgc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIGlkeCkpOworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJDJWkgPSAweCV4XG4iLAorCQkJCSAgIGlkeCwgc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIGlkeCkpOwogCX0KICNlbmRpZgogCXZlcjEgPSBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgMSk7CiAJdmVyMiA9IHNuZF9jczQyMzZfZXh0X2luKGNoaXAsIENTNDIzNl9WRVJTSU9OKTsKIAlzbmRfcHJpbnRkZCgiQ1M0MjM2OiBbMHglbHhdIEMxICh2ZXJzaW9uKSA9IDB4JXgsIGV4dCA9IDB4JXhcbiIsIGNwb3J0LCB2ZXIxLCB2ZXIyKTsKIAlpZiAodmVyMSAhPSB2ZXIyKSB7Ci0JCXNuZF9wcmludGsoIkNTNDIzNisgY2hpcCBkZXRlY3RlZCwgYnV0IGNvbnRyb2wgcG9ydCAweCVseCBpcyBub3QgdmFsaWRcbiIsIGNwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ1M0MjM2KyBjaGlwIGRldGVjdGVkLCBidXQgIgorCQkJICAgImNvbnRyb2wgcG9ydCAweCVseCBpcyBub3QgdmFsaWRcbiIsIGNwb3J0KTsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNoaXApOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC04ODMsNyArODg0LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSAmIDB4MDIgPyAxIDogMDsKICNpZiAwCi0JcHJpbnRrKCJnZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCBDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJnZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCAiCisJICAgICAgICJDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAogCQkJc25kX3dzc19pbihjaGlwLCBDUzQyMzFfQUxUX0ZFQVRVUkVfMSksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgMyksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgNCksCkBAIC05MjAsNyArOTIyLDggQEAKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiAKICNpZiAwCi0JcHJpbnRrKCJzZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCBDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJzZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCAiCisJICAgICAgICJDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAogCQkJc25kX3dzc19pbihjaGlwLCBDUzQyMzFfQUxUX0ZFQVRVUkVfMSksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgMyksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgNCksCkBAIC0xMDE1LDIzICsxMDE4LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9jcmVhdGUpOwotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X3BjbSk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfbWl4ZXIpOwotCi0vKgotICogIElOSVQgcGFydAotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY3M0MjM2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY3M0MjM2X2V4aXQodm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoYWxzYV9jczQyMzZfaW5pdCkKLW1vZHVsZV9leGl0KGFsc2FfY3M0MjM2X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZHQwMTl4LmMgYi9zb3VuZC9pc2EvZHQwMTl4LmMKaW5kZXggYTAyNDJjMy4uODBmNWIxYSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2R0MDE5eC5jCisrKyBiL3NvdW5kL2lzYS9kdDAxOXguYwpAQCAtMTUwLDkgKzE1MCwxMCBAQAogCXN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9kdDAxOXgpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9kdDAxOXgpLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNhcmQtPmNhcmQtPmRldik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwppbmRleCBiNDYzNzcxLi40NDJiMDgxIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KIHN0YXRpYyBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiAweDIyMCwweDI0MCwweDI2MCAqLworc3RhdGljIGxvbmcgZm1fcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFVzdWFsbHkgMHgzODggKi8KIHN0YXRpYyBsb25nIG1wdV9wb3J0W1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gLTF9Owogc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIDUsNyw5LDEwICovCiBzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIDUsNyw5LDEwICovCkBAIC02NSw2ICs2Niw4IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmbV9wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1fcG9ydCwgIkZNIHBvcnQgIyBmb3IgRVMxNjg4IGRyaXZlci4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CkBAIC0xMjIsOSArMTI1LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBzbmRfZXMxNjg4X2xlZ2FjeV9jcmVhdGUoY2FyZCwgZGV2LCBuLCAmY2hpcCk7CiAJaWYgKGVycm9yIDwgMCkKQEAgLTE0MywxMyArMTQ2LDE5IEBACiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsIHBjbS0+bmFtZSwKIAkJY2hpcC0+cG9ydCwgY2hpcC0+aXJxLCBjaGlwLT5kbWE4KTsKIAotCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwgY2hpcC0+cG9ydCwgY2hpcC0+cG9ydCArIDIsCi0JCQlPUEwzX0hXX09QTDMsIDAsICZvcGwzKSA8IDApCi0JCWRldl93YXJuKGRldiwgIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBjaGlwLT5wb3J0KTsKLQllbHNlIHsKLQkJZXJyb3IgPQlzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKKwlpZiAoZm1fcG9ydFtuXSA9PSBTTkRSVl9BVVRPX1BPUlQpCisJCWZtX3BvcnRbbl0gPSBwb3J0W25dOwkvKiBzaGFyZSB0aGUgc2FtZSBwb3J0ICovCisKKwlpZiAoZm1fcG9ydFtuXSA+IDApIHsKKwkJaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBmbV9wb3J0W25dLCBmbV9wb3J0W25dICsgMiwKKwkJCQlPUEwzX0hXX09QTDMsIDAsICZvcGwzKSA8IDApCisJCQlkZXZfd2FybihkZXYsCisJCQkJICJvcGwzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZm1fcG9ydFtuXSk7CisJCWVsc2UgeworCQkJZXJyb3IgPQlzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CisJCQlpZiAoZXJyb3IgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJaWYgKG1wdV9pcnFbbl0gPj0gMCAmJiBtcHVfaXJxW25dICE9IFNORFJWX0FVVE9fSVJRICYmCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCmluZGV4IDRmYmI1MDguLjRjNmUxNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCkBAIC00NSw3ICs0NSw3IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLQlwcmludGsoInNuZF9lczE2ODhfZHNwX2NvbW1hbmQ6IHRpbWVvdXQgKDB4JXgpXG4iLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJzbmRfZXMxNjg4X2RzcF9jb21tYW5kOiB0aW1lb3V0ICgweCV4KVxuIiwgdmFsKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtMTY3LDEzICsxNjcsMTYgQEAKIAlodyA9IEVTMTY4OF9IV19BVVRPOwogCXN3aXRjaCAoY2hpcC0+dmVyc2lvbiAmIDB4ZmZmMCkgewogCWNhc2UgMHg0ODgwOgotCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogQXVkaW9Ecml2ZSBFUzQ4OCBkZXRlY3RlZCwgYnV0IGRyaXZlciBpcyBpbiBhbm90aGVyIHBsYWNlXG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IEF1ZGlvRHJpdmUgRVM0ODggZGV0ZWN0ZWQsICIKKwkJCSAgICJidXQgZHJpdmVyIGlzIGluIGFub3RoZXIgcGxhY2VcbiIsIGNoaXAtPnBvcnQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAljYXNlIDB4Njg4MDoKIAkJaHcgPSAoY2hpcC0+dmVyc2lvbiAmIDB4MGYpID49IDggPyBFUzE2ODhfSFdfMTY4OCA6IEVTMTY4OF9IV182ODg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiB1bmtub3duIEF1ZGlvRHJpdmUgY2hpcCB3aXRoIHZlcnNpb24gMHgleCAoSmF6ejE2IHNvdW5kY2FyZD8pXG4iLCBjaGlwLT5wb3J0LCBjaGlwLT52ZXJzaW9uKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IHVua25vd24gQXVkaW9Ecml2ZSBjaGlwICIKKwkJCSAgICJ3aXRoIHZlcnNpb24gMHgleCAoSmF6ejE2IHNvdW5kY2FyZD8pXG4iLAorCQkJICAgY2hpcC0+cG9ydCwgY2hpcC0+dmVyc2lvbik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjIzLDcgKzIyNiw3IEBACiAJCX0KIAl9CiAjaWYgMAotCXNuZF9wcmludGsoIm1wdSBjZmcgPSAweCV4XG4iLCBjZmcpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibXB1IGNmZyA9IDB4JXhcbiIsIGNmZyk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfZXMxNjg4X21peGVyX3dyaXRlKGNoaXAsIDB4NDAsIGNmZyk7CkBAIC0yMzcsNyArMjQwLDkgQEAKIAkJY2ZnID0gMHhmMDsJLyogZW5hYmxlIG9ubHkgRE1BIGNvdW50ZXIgaW50ZXJydXB0ICovCiAJCWlycV9iaXRzID0gaXJxc1tjaGlwLT5pcnEgJiAweDBmXTsKIAkJaWYgKGlycV9iaXRzIDwgMCkgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IGJhZCBJUlEgJWQgZm9yIEVTMTY4OCBjaGlwISFcbiIsIGNoaXAtPnBvcnQsIGNoaXAtPmlycSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogYmFkIElSUSAlZCAiCisJCQkJICAgImZvciBFUzE2ODggY2hpcCEhXG4iLAorCQkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPmlycSk7CiAjaWYgMAogCQkJaXJxX2JpdHMgPSAwOwogCQkJY2ZnID0gMHgxMDsKQEAgLTI1MCw3ICsyNTUsOCBAQAogCQljZmcgPSAweGYwOwkvKiBleHRlbmRlZCBtb2RlIERNQSBlbmFibGUgKi8KIAkJZG1hID0gY2hpcC0+ZG1hODsKIAkJaWYgKGRtYSA+IDMgfHwgZG1hID09IDIpIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBiYWQgRE1BIGNoYW5uZWwgJWQgZm9yIEVTMTY4OCBjaGlwISFcbiIsIGNoaXAtPnBvcnQsIGRtYSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogYmFkIERNQSBjaGFubmVsICVkICIKKwkJCQkgICAiZm9yIEVTMTY4OCBjaGlwISFcbiIsIGNoaXAtPnBvcnQsIGRtYSk7CiAjaWYgMAogCQkJZG1hX2JpdHMgPSAwOwogCQkJY2ZnID0gMHgwMDsJLyogZGlzYWJsZSBhbGwgRE1BICovCkBAIC0zNDEsOCArMzQ3LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CS8qIHNvbWV0aGluZyBpcyB3cm9uZyAqLwogCX0KICNpZiAwCi0JcHJpbnRrKCJ0cmlnZ2VyOiB2YWwgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHZhbCwgdmFsdWUpOwotCXByaW50aygidHJpZ2dlcjogcG9pbnRlciA9IDB4JXhcbiIsIHNuZF9kbWFfcG9pbnRlcihjaGlwLT5kbWE4LCBjaGlwLT5kbWFfc2l6ZSkpOworCXByaW50ayhLRVJOX0RFQlVHICJ0cmlnZ2VyOiB2YWwgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHZhbCwgdmFsdWUpOworCXByaW50ayhLRVJOX0RFQlVHICJ0cmlnZ2VyOiBwb2ludGVyID0gMHgleFxuIiwKKwkgICAgICAgc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmRtYV9zaXplKSk7CiAjZW5kaWYKIAlzbmRfZXMxNjg4X3dyaXRlKGNoaXAsIDB4YjgsICh2YWwgJiAweGYwKSB8IHZhbHVlKTsKIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTh4eC5jIGIvc291bmQvaXNhL2VzMTh4eC5jCmluZGV4IDkwNDk4ZTQuLjhjZmJmZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE4eHguYworKysgYi9zb3VuZC9pc2EvZXMxOHh4LmMKQEAgLTIxMjUsMTAgKzIxMjUsMTAgQEAKICNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfZXMxOHh4X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9lczE4eHhfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7Ci0JcmV0dXJuIHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9hdWRpb2RyaXZlKSk7CisJcmV0dXJuIHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNuZF9hdWRpb2RyaXZlKSwgY2FyZHApOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYXVkaW9kcml2ZV9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC0yMTk3LDkgKzIxOTcsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAlpZiAoKGVyciA9IHNuZF9hdWRpb2RyaXZlX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtMjMwMyw5ICsyMzAzLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9hdWRpb2RyaXZlX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtMjM2Miw5ICsyMzYyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmICgocmVzID0gc25kX2F1ZGlvZHJpdmVfcG5wYyhkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYwppbmRleCBmNDVmNjExLi4zNmMyN2M4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYwpAQCAtNDUsNyArNDUsOCBAQAogCXVuc2lnbmVkIGNoYXIgZG1hX2NtZDsKIAl1bnNpZ25lZCBpbnQgYWRkcmVzc19oaWdoOwogCi0JLy8gc25kX3ByaW50aygiZG1hX3RyYW5zZmVyOiBhZGRyPTB4JXgsIGJ1Zj0weCVseCwgY291bnQ9MHgleFxuIiwgYWRkciwgKGxvbmcpIGJ1ZiwgY291bnQpOworCXNuZF9wcmludGRkKCJkbWFfdHJhbnNmZXI6IGFkZHI9MHgleCwgYnVmPTB4JWx4LCBjb3VudD0weCV4XG4iLAorCQkgICAgYWRkciwgYnVmX2FkZHIsIGNvdW50KTsKIAogCWlmIChndXMtPmdmMS5kbWExID4gMykgewogCQlpZiAoZ3VzLT5nZjEuZW5oX21vZGUpIHsKQEAgLTc3LDcgKzc4LDggQEAKIAlzbmRfZ2YxX2RtYV9hY2soZ3VzKTsKIAlzbmRfZG1hX3Byb2dyYW0oZ3VzLT5nZjEuZG1hMSwgYnVmX2FkZHIsIGNvdW50LCBkbWFfY21kICYgU05EUlZfR0YxX0RNQV9SRUFEID8gRE1BX01PREVfUkVBRCA6IERNQV9NT0RFX1dSSVRFKTsKICNpZiAwCi0Jc25kX3ByaW50aygiYWRkcmVzcyA9IDB4JXgsIGNvdW50ID0gMHgleCwgZG1hX2NtZCA9IDB4JXhcbiIsIGFkZHJlc3MgPDwgMSwgY291bnQsIGRtYV9jbWQpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiYWRkcmVzcyA9IDB4JXgsIGNvdW50ID0gMHgleCwgZG1hX2NtZCA9IDB4JXhcbiIsCisJCSAgIGFkZHJlc3MgPDwgMSwgY291bnQsIGRtYV9jbWQpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAoZ3VzLT5nZjEuZW5oX21vZGUpIHsKQEAgLTE0Miw3ICsxNDQsOSBAQAogCXNuZF9nZjFfZG1hX3Byb2dyYW0oZ3VzLCBibG9jay0+YWRkciwgYmxvY2stPmJ1Zl9hZGRyLCBibG9jay0+Y291bnQsICh1bnNpZ25lZCBzaG9ydCkgYmxvY2stPmNtZCk7CiAJa2ZyZWUoYmxvY2spOwogI2lmIDAKLQlwcmludGsoInByb2dyYW0gZG1hIChJUlEpIC0gYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsIGFkZHIsIChsb25nKSBidWZmZXIsIGNvdW50LCBjbWQpOworCXNuZF9wcmludGQoS0VSTl9ERUJVRyAicHJvZ3JhbSBkbWEgKElSUSkgLSAiCisJCSAgICJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwKKwkJICAgYmxvY2stPmFkZHIsIGJsb2NrLT5idWZfYWRkciwgYmxvY2stPmNvdW50LCBibG9jay0+Y21kKTsKICNlbmRpZgogfQogCkBAIC0yMDMsMTMgKzIwNywxNiBAQAogCX0KIAkqYmxvY2sgPSAqX19ibG9jazsKIAlibG9jay0+bmV4dCA9IE5VTEw7Ci0jaWYgMAotCXByaW50aygiYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsIGJsb2NrLT5hZGRyLCAobG9uZykgYmxvY2stPmJ1ZmZlciwgYmxvY2stPmNvdW50LCBibG9jay0+Y21kKTsKLSNlbmRpZgotI2lmIDAKLQlwcmludGsoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0ID0gMHglbHhcbiIsIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0KTsKLQlwcmludGsoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbSA9IDB4JWx4XG4iLCAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY20pOwotI2VuZGlmCisKKwlzbmRfcHJpbnRkZCgiYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsCisJCSAgICBibG9jay0+YWRkciwgKGxvbmcpIGJsb2NrLT5idWZmZXIsIGJsb2NrLT5jb3VudCwKKwkJICAgIGJsb2NrLT5jbWQpOworCisJc25kX3ByaW50ZGQoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0ID0gMHglbHhcbiIsCisJCSAgICAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCk7CisJc25kX3ByaW50ZGQoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbSA9IDB4JWx4XG4iLAorCQkgICAgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPmRtYV9sb2NrLCBmbGFncyk7CiAJaWYgKHN5bnRoKSB7CiAJCWlmIChndXMtPmdmMS5kbWFfZGF0YV9zeW50aF9sYXN0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jCmluZGV4IDA0MTg5NGQuLjIwNTVhZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jCkBAIC00MSw3ICs0MSw3IEBACiAJaWYgKHN0YXR1cyA9PSAwKQogCQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIAloYW5kbGVkID0gMTsKLQkvLyBzbmRfcHJpbnRrKCJJUlE6IHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJJUlE6IHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7ICovCiAJaWYgKHN0YXR1cyAmIDB4MDIpIHsKIAkJU1RBVF9BREQoZ3VzLT5nZjEuaW50ZXJydXB0X3N0YXRfbWlkaV9pbik7CiAJCWlmIChndXMtPmdmMS5pbnRlcnJ1cHRfaGFuZGxlcl9taWRpX2luKQpAQCAtNjUsNyArNjUsOSBAQAogCQkJCWNvbnRpbnVlOwkvKiBtdWx0aSByZXF1ZXN0ICovCiAJCQlhbHJlYWR5IHw9IF9jdXJyZW50XzsJLyogbWFyayByZXF1ZXN0ICovCiAjaWYgMAotCQkJcHJpbnRrKCJ2b2ljZSA9ICVpLCB2b2ljZV9zdGF0dXMgPSAweCV4LCB2b2ljZV92ZXJpZnkgPSAlaVxuIiwgdm9pY2UsIHZvaWNlX3N0YXR1cywgaW5iKEdVU1AoZ3VzLCBHRjFQQUdFKSkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInZvaWNlID0gJWksIHZvaWNlX3N0YXR1cyA9IDB4JXgsICIKKwkJCSAgICAgICAidm9pY2VfdmVyaWZ5ID0gJWlcbiIsCisJCQkgICAgICAgdm9pY2UsIHZvaWNlX3N0YXR1cywgaW5iKEdVU1AoZ3VzLCBHRjFQQUdFKSkpOwogI2VuZGlmCiAJCQlwdm9pY2UgPSAmZ3VzLT5nZjEudm9pY2VzW3ZvaWNlXTsgCiAJCQlpZiAocHZvaWNlLT51c2UpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jIGIvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKaW5kZXggMzg1MTBhZS4uZWRiMTFlZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKQEAgLTgyLDcgKzgyLDEwIEBACiAKIAljb3VudCArPSBvZmZzZXQgJiAzMTsKIAlvZmZzZXQgJj0gfjMxOwotCS8vIHNuZF9wcmludGsoImJsb2NrIGNoYW5nZSAtIG9mZnNldCA9IDB4JXgsIGNvdW50ID0gMHgleFxuIiwgb2Zmc2V0LCBjb3VudCk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImJsb2NrIGNoYW5nZSAtIG9mZnNldCA9IDB4JXgsIGNvdW50ID0gMHgleFxuIiwKKwkJICAgb2Zmc2V0LCBjb3VudCk7CisJKi8KIAltZW1zZXQoJmJsb2NrLCAwLCBzaXplb2YoYmxvY2spKTsKIAlibG9jay5jbWQgPSBTTkRSVl9HRjFfRE1BX0lSUTsKIAlpZiAoc25kX3BjbV9mb3JtYXRfdW5zaWduZWQocnVudGltZS0+Zm9ybWF0KSkKQEAgLTEzNSw3ICsxMzgsMTEgQEAKIAkJY3VyciA9IGJlZ2luICsgKHBjbXAtPmJwb3MgKiBwY21wLT5ibG9ja19zaXplKSAvIHJ1bnRpbWUtPmNoYW5uZWxzOwogCQllbmQgPSBjdXJyICsgKHBjbXAtPmJsb2NrX3NpemUgLyBydW50aW1lLT5jaGFubmVscyk7CiAJCWVuZCAtPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpID09IDE2ID8gMiA6IDE7Ci0JCS8vIHNuZF9wcmludGsoImluaXQ6IGN1cnI9MHgleCwgYmVnaW49MHgleCwgZW5kPTB4JXgsIGN0cmw9MHgleCwgcmFtcD0weCV4LCByYXRlPTB4JXhcbiIsIGN1cnIsIGJlZ2luLCBlbmQsIHZvaWNlX2N0cmwsIHJhbXBfY3RybCwgcmF0ZSk7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogY3Vycj0weCV4LCBiZWdpbj0weCV4LCBlbmQ9MHgleCwgIgorCQkJICAgImN0cmw9MHgleCwgcmFtcD0weCV4LCByYXRlPTB4JXhcbiIsCisJCQkgICBjdXJyLCBiZWdpbiwgZW5kLCB2b2ljZV9jdHJsLCByYW1wX2N0cmwsIHJhdGUpOworCQkqLwogCQlwYW4gPSBydW50aW1lLT5jaGFubmVscyA9PSAyID8gKCF2b2ljZSA/IDEgOiAxNCkgOiA4OwogCQl2b2wgPSAhdm9pY2UgPyBndXMtPmdmMS5wY21fdm9sdW1lX2xldmVsX2xlZnQgOiBndXMtPmdmMS5wY21fdm9sdW1lX2xldmVsX3JpZ2h0OwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtMjA1LDkgKzIxMiwxMSBAQAogCXJhbXBfY3RybCA9IChzbmRfZ2YxX3JlYWQ4KGd1cywgU05EUlZfR0YxX1ZCX1ZPTFVNRV9DT05UUk9MKSAmIH4weGE0KSB8IDB4MDM7CiAjaWYgMAogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcHZvaWNlLT5udW1iZXIpOwotCXByaW50aygicG9zaXRpb24gPSAweCV4XG4iLCAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicG9zaXRpb24gPSAweCV4XG4iLAorCSAgICAgICAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKIAlzbmRfZ2YxX3NlbGVjdF92b2ljZShndXMsIHBjbXAtPnB2b2ljZXNbMV0tPm51bWJlcik7Ci0JcHJpbnRrKCJwb3NpdGlvbiA9IDB4JXhcbiIsIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwb3NpdGlvbiA9IDB4JXhcbiIsCisJICAgICAgIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOwogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcHZvaWNlLT5udW1iZXIpOwogI2VuZGlmCiAJcGNtcC0+YnBvcysrOwpAQCAtMjk5LDcgKzMwOCwxMSBAQAogCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8vIHByaW50aygicG9rZSBibG9jazsgYnVmID0gMHgleCwgcG9zID0gJWksIGNvdW50ID0gJWksIHBvcnQgPSAweCV4XG4iLCAoaW50KWJ1ZiwgcG9zLCBjb3VudCwgZ3VzLT5nZjEucG9ydCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAicG9rZSBibG9jazsgYnVmID0gMHgleCwgcG9zID0gJWksIGNvdW50ID0gJWksIHBvcnQgPSAweCV4XG4iLAorCSAgICAgICAoaW50KWJ1ZiwgcG9zLCBjb3VudCwgZ3VzLT5nZjEucG9ydCk7CisJKi8KIAl3aGlsZSAoY291bnQgPiAwKSB7CiAJCWxlbiA9IGNvdW50OwogCQlpZiAobGVuID4gNTEyKQkJLyogbGltaXQsIHRvIGFsbG93IElSUSAqLwpAQCAtNjgwLDcgKzY5Myw4IEBACiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX2dmMV9wY21fcGxheWJhY2tfZnJlZTsKIAogI2lmIDAKLQlwcmludGsoInBsYXliYWNrLmJ1ZmZlciA9IDB4JWx4LCBnZjEucGNtX2J1ZmZlciA9IDB4JWx4XG4iLCAobG9uZykgcGNtLT5wbGF5YmFjay5idWZmZXIsIChsb25nKSBndXMtPmdmMS5wY21fYnVmZmVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGxheWJhY2suYnVmZmVyID0gMHglbHgsIGdmMS5wY21fYnVmZmVyID0gMHglbHhcbiIsCisJICAgICAgIChsb25nKSBwY20tPnBsYXliYWNrLmJ1ZmZlciwgKGxvbmcpIGd1cy0+Z2YxLnBjbV9idWZmZXIpOwogI2VuZGlmCiAJaWYgKChlcnIgPSBzbmRfZ2YxX2RtYV9pbml0KGd1cykpIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYwppbmRleCBmMGFmM2Y3Li4yMWNjNDJlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCkBAIC0xMjksOCArMTI5LDE0IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd1cy0+dWFydF9jbWRfbG9jaywgZmxhZ3MpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJyZWFkIGluaXQgLSBlbmFibGUgPSAlaSwgY21kID0gMHgleCwgc3RhdCA9IDB4JXhcbiIsIGd1cy0+dWFydF9lbmFibGUsIGd1cy0+Z2YxLnVhcnRfY21kLCBzbmRfZ2YxX3VhcnRfc3RhdChndXMpKTsKLQlzbmRfcHJpbnRrKCJbMHgleF0gcmVnIChjdHJsL3N0YXR1cykgPSAweCV4LCByZWcgKGRhdGEpID0gMHgleCAocGFnZSA9IDB4JXgpXG4iLCBndXMtPmdmMS5wb3J0ICsgMHgxMDAsIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDApLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAxKSwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMikpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicmVhZCBpbml0IC0gZW5hYmxlID0gJWksIGNtZCA9IDB4JXgsIHN0YXQgPSAweCV4XG4iLAorCQkgICBndXMtPnVhcnRfZW5hYmxlLCBndXMtPmdmMS51YXJ0X2NtZCwgc25kX2dmMV91YXJ0X3N0YXQoZ3VzKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJbMHgleF0gcmVnIChjdHJsL3N0YXR1cykgPSAweCV4LCByZWcgKGRhdGEpID0gMHgleCAiCisJCSAgICIocGFnZSA9IDB4JXgpXG4iLAorCQkgICBndXMtPmdmMS5wb3J0ICsgMHgxMDAsIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDApLAorCQkgICBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAxKSwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMikpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCmluZGV4IDQyNjUzMmEuLjA4NmI4ZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXM7CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAocGNtX2NoYW5uZWxzW25dIDwgMikKIAkJcGNtX2NoYW5uZWxzW25dID0gMjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKaW5kZXggN2FkNGMzYi4uMTgwYThkZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKQEAgLTI0MSw5ICsyNDEsOSBAQAogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWlmIChtcHVfcG9ydFtuXSA9PSBTTkRSVl9BVVRPX1BPUlQpCiAJCW1wdV9wb3J0W25dID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCmluZGV4IGY5NGMxOTcuLmYyNmVhYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwpAQCAtMjE0LDEwICsyMTQsMTAgQEAKIAlzdHJ1Y3Qgc25kX3dzcyAqd3NzOwogCXN0cnVjdCBzbmRfZ3VzbWF4ICptYXhjYXJkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9ndXNtYXgpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9ndXNtYXgpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2d1c21heF9mcmVlOwogCW1heGNhcmQgPSAoc3RydWN0IHNuZF9ndXNtYXggKiljYXJkLT5wcml2YXRlX2RhdGE7CiAJbWF4Y2FyZC0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwppbmRleCA1ZmFlY2ZiLi41MzRhNmVjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGJ1cy0+cHJpdmF0ZV92YWx1ZTsKIAogI2lmIDAKLQlwcmludGsoImkyY19zZXRsaW5lcyAtIDB4JWx4IDwtICVpLCVpXG4iLCBwb3J0LCBjdHJsLCBkYXRhKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3NldGxpbmVzIC0gMHglbHggPC0gJWksJWlcbiIsIHBvcnQsIGN0cmwsIGRhdGEpOwogI2VuZGlmCiAJb3V0YigoZGF0YSA8PCAxKSB8IGN0cmwsIHBvcnQpOwogCXVkZWxheSgxMCk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAogCXJlcyA9IGluYihwb3J0KSAmIDE7CiAjaWYgMAotCXByaW50aygiaTJjX2dldGNsb2NrbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfZ2V0Y2xvY2tsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCXVkZWxheSgxMCk7CiAJcmVzID0gKGluYihwb3J0KSAmIDIpID4+IDE7CiAjaWYgMAotCXByaW50aygiaTJjX2dldGRhdGFsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19nZXRkYXRhbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOwogI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KQEAgLTM0Miw3ICszNDIsOCBAQAogCQkJc25kX2dmMV9wb2tlKGd1cywgbG9jYWwsIGQpOwogCQkJc25kX2dmMV9wb2tlKGd1cywgbG9jYWwgKyAxLCBkICsgMSk7CiAjaWYgMAotCQkJcHJpbnRrKCJkID0gMHgleCwgbG9jYWwgPSAweCV4LCBsb2NhbCArIDEgPSAweCV4LCBpZHggPDwgMjIgPSAweCV4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgImQgPSAweCV4LCBsb2NhbCA9IDB4JXgsICIKKwkJCSAgICAgICAibG9jYWwgKyAxID0gMHgleCwgaWR4IDw8IDIyID0gMHgleFxuIiwKIAkJCSAgICAgICBkLAogCQkJICAgICAgIHNuZF9nZjFfcGVlayhndXMsIGxvY2FsKSwKIAkJCSAgICAgICBzbmRfZ2YxX3BlZWsoZ3VzLCBsb2NhbCArIDEpLApAQCAtMzU2LDcgKzM1Nyw4IEBACiAJCX0KIAl9CiAjaWYgMAotCXByaW50aygic2l6ZXM6ICVpICVpICVpICVpXG4iLCBzaXplc1swXSwgc2l6ZXNbMV0sIHNpemVzWzJdLCBzaXplc1szXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInNpemVzOiAlaSAlaSAlaSAlaVxuIiwKKwkgICAgICAgc2l6ZXNbMF0sIHNpemVzWzFdLCBzaXplc1syXSwgc2l6ZXNbM10pOwogI2VuZGlmCiB9CiAKQEAgLTQxMCwxMiArNDEyLDEyIEBACiAJCWxtY3QgPSAocHNpemVzWzNdIDw8IDI0KSB8IChwc2l6ZXNbMl0gPDwgMTYpIHwKIAkJICAgIChwc2l6ZXNbMV0gPDwgOCkgfCBwc2l6ZXNbMF07CiAjaWYgMAotCQlwcmludGsoImxtY3QgPSAweCUwOHhcbiIsIGxtY3QpOworCQlwcmludGsoS0VSTl9ERUJVRyAibG1jdCA9IDB4JTA4eFxuIiwgbG1jdCk7CiAjZW5kaWYKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG1jKTsgaSsrKQogCQkJaWYgKGxtY3QgPT0gbG1jW2ldKSB7CiAjaWYgMAotCQkJCXByaW50aygiZm91bmQgISEhICVpXG4iLCBpKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiZm91bmQgISEhICVpXG4iLCBpKTsKICNlbmRpZgogCQkJCXNuZF9nZjFfd3JpdGUxNihndXMsIFNORFJWX0dGMV9HV19NRU1PUllfQ09ORklHLCAoc25kX2dmMV9sb29rMTYoZ3VzLCBTTkRSVl9HRjFfR1dfTUVNT1JZX0NPTkZJRykgJiAweGZmZjApIHwgaSk7CiAJCQkJc25kX2ludGVyd2F2ZV9iYW5rX3NpemVzKGd1cywgcHNpemVzKTsKQEAgLTYyNiwyMCArNjI4LDIyIEBACiAJCWZyZWVfaXJxKGl3Y2FyZC0+aXJxLCAodm9pZCAqKWl3Y2FyZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9pbnRlcndhdmVfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2ludGVyd2F2ZV9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9pbnRlcndhdmUgKml3Y2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9pbnRlcndhdmUpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9pbnRlcndhdmUpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaXdjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWl3Y2FyZC0+Y2FyZCA9IGNhcmQ7CiAJaXdjYXJkLT5pcnEgPSAtMTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfaW50ZXJ3YXZlX2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2ludGVyd2F2ZV9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC03NzgsOSArNzgyLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAlpZiAoKGVyciA9IHNuZF9pbnRlcndhdmVfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CkBAIC04NzYsOSArODgwLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAkJCQkKLQljYXJkID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoKHJlcyA9IHNuZF9pbnRlcndhdmVfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9NYWtlZmlsZSBiL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzFjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKworc25kLW1zbmQtbGliLW9ianMgOj0gbXNuZC5vIG1zbmRfbWlkaS5vIG1zbmRfcGlubmFjbGVfbWl4ZXIubworc25kLW1zbmQtcGlubmFjbGUtb2JqcyA6PSBtc25kX3Bpbm5hY2xlLm8KK3NuZC1tc25kLWNsYXNzaWMtb2JqcyA6PSBtc25kX2NsYXNzaWMubworCisjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CitvYmotJChDT05GSUdfU05EX01TTkRfUElOTkFDTEUpICs9IHNuZC1tc25kLXBpbm5hY2xlLm8gc25kLW1zbmQtbGliLm8KK29iai0kKENPTkZJR19TTkRfTVNORF9DTEFTU0lDKSArPSBzbmQtbXNuZC1jbGFzc2ljLm8gc25kLW1zbmQtbGliLm8KKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZC5jIGIvc291bmQvaXNhL21zbmQvbXNuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjQ1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmMKQEAgLTAsMCArMSw3MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAyMDAyLzA2LzMwIEthcnN0ZW4gV2llc2U6CisgKglyZW1vdmVkIGtlcm5lbC12ZXJzaW9uIGRlcGVuZGVuY2llcy4KKyAqCXJpcHBlZCBmcm9tIGxpbnV4IGtlcm5lbCAyLjQuMTggKE9TUyBJbXBsZW1lbnRhdGlvbikgYnkgbWUuCisgKglJbiB0aGUgT1NTIFZlcnNpb24sIHRoaXMgZmlsZSBpcyBjb21waWxlZCB0byBhIHNlcGFyYXRlIE1PRFVMRSwKKyAqCXRoYXQgaXMgdXNlZCBieSB0aGUgcGlubmFjbGUgYW5kIHRoZSBjbGFzc2ljIGRyaXZlci4KKyAqCXNpbmNlIHRoZXJlIGlzIG5vIGNsYXNzaWMgZHJpdmVyIGZvciBhbHNhIHlldCAoaSBkb250IGhhdmUgYSBjbGFzc2ljCisgKgkmIHdyaXRpbmcgb25lIGJsaW5kZm9sZCBpcyBkaWZmaWN1bHQpIHRoaXMgZmlsZSdzIG9iamVjdCBpcyBzdGF0aWNhbGx5CisgKglsaW5rZWQgaW50byB0aGUgcGlubmFjbGUtZHJpdmVyLW1vZHVsZSBmb3Igbm93Lglsb29rIGZvciB0aGUgc3RyaW5nCisgKgkJInVuY29tbWVudCB0aGlzIHRvIG1ha2UgdGhpcyBhIG1vZHVsZSBhZ2FpbiIKKyAqCXRvIGRvIGd1ZXNzIHdoYXQuCisgKgorICogdGhlIGZvbGxvd2luZyBpcyBhIGNvcHkgb2YgdGhlIDIuNC4xOCBPU1MgRlJFRSBmaWxlLWhlYWRpbmcgY29tbWVudDoKKyAqCisgKiBtc25kLmMgLSBEcml2ZXIgQmFzZQorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgIm1zbmQuaCIKKworI2RlZmluZSBMT0dOQU1FCQkJIm1zbmQiCisKKwordm9pZCBzbmRfbXNuZF9pbml0X3F1ZXVlKHZvaWQgKmJhc2UsIGludCBzdGFydCwgaW50IHNpemUpCit7CisJd3JpdGV3KFBDVE9EU1BfQkFTRUQoc3RhcnQpLCBiYXNlICsgSlFTX3dTdGFydCk7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKHNpemUpIC0gMSwgYmFzZSArIEpRU193U2l6ZSk7CisJd3JpdGV3KDAsIGJhc2UgKyBKUVNfd0hlYWQpOworCXdyaXRldygwLCBiYXNlICsgSlFTX3dUYWlsKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfaW5pdF9xdWV1ZSk7CisKK3N0YXRpYyBpbnQgc25kX21zbmRfd2FpdF9UWERFKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGludCBpbyA9IGRldi0+aW87CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApCisJCWlmIChpbmIoaW8gKyBIUF9JU1IpICYgSFBJU1JfVFhERSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfd2FpdF9IQzAoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAodGltZW91dC0tID4gMCkKKwkJaWYgKCEoaW5iKGlvICsgSFBfQ1ZSKSAmIEhQQ1ZSX0hDKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK2ludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWQoc3RydWN0IHNuZF9tc25kICpkZXYsIHU4IGNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChzbmRfbXNuZF93YWl0X0hDMChkZXYpID09IDApIHsKKwkJb3V0YihjbWQsIGRldi0+aW8gKyBIUF9DVlIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IFNlbmQgRFNQIGNvbW1hbmQgdGltZW91dFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfc2VuZF9kc3BfY21kKTsKKworaW50IHNuZF9tc25kX3NlbmRfd29yZChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgdW5zaWduZWQgY2hhciBoaWdoLAorCQkgICB1bnNpZ25lZCBjaGFyIG1pZCwgdW5zaWduZWQgY2hhciBsb3cpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKworCWlmIChzbmRfbXNuZF93YWl0X1RYREUoZGV2KSA9PSAwKSB7CisJCW91dGIoaGlnaCwgaW8gKyBIUF9UWEgpOworCQlvdXRiKG1pZCwgaW8gKyBIUF9UWE0pOworCQlvdXRiKGxvdywgaW8gKyBIUF9UWEwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogU2VuZCBob3N0IHdvcmQgdGltZW91dFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfc2VuZF93b3JkKTsKKworaW50IHNuZF9tc25kX3VwbG9hZF9ob3N0KHN0cnVjdCBzbmRfbXNuZCAqZGV2LCBjb25zdCB1OCAqYmluLCBpbnQgbGVuKQoreworCWludCBpOworCisJaWYgKGxlbiAlIDMgIT0gMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSAgICI6IFVwbG9hZCBob3N0IGRhdGEgbm90IG11bHRpcGxlIG9mIDMhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAzKQorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgYmluW2ldLCBiaW5baSArIDFdLCBiaW5baSArIDJdKSkKKwkJCXJldHVybiAtRUlPOworCisJaW5iKGRldi0+aW8gKyBIUF9SWEwpOworCWluYihkZXYtPmlvICsgSFBfQ1ZSKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF91cGxvYWRfaG9zdCk7CisKK2ludCBzbmRfbXNuZF9lbmFibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2LT5pcnFfcmVmKyspCisJCXJldHVybiAwOworCisJc25kX3ByaW50ZGQoTE9HTkFNRSAiOiBFbmFibGluZyBJUlFcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChzbmRfbXNuZF93YWl0X1RYREUoZGV2KSA9PSAwKSB7CisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpIHwgSFBJQ1JfVFJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlvdXRiKGRldi0+aXJxaWQsIGRldi0+aW8gKyBIUF9JUlFNKTsKKworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSAmIH5IUElDUl9UUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgfCBIUElDUl9SUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCXNuZF9tc25kX2luaXRfcXVldWUoZGV2LT5EU1BRLCBkZXYtPmRzcHFfZGF0YV9idWZmLAorCQkJCSAgICBkZXYtPmRzcHFfYnVmZl9zaXplKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBFbmFibGUgSVJRIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZW5hYmxlX2lycSk7CisKK2ludCBzbmRfbXNuZF9kaXNhYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKC0tZGV2LT5pcnFfcmVmID4gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5pcnFfcmVmIDwgMCkKKwkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBJUlEgcmVmIGNvdW50IGlzICVkXG4iLAorCQkJICAgZGV2LT5pcnFfcmVmKTsKKworCXNuZF9wcmludGRkKExPR05BTUUgIjogRGlzYWJsaW5nIElSUVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgJiB+SFBJQ1JfUlJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlvdXRiKEhQSVJRX05PTkUsIGRldi0+aW8gKyBIUF9JUlFNKTsKKwkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IERpc2FibGUgSVJRIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZGlzYWJsZV9pcnEpOworCitzdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3BsYXlfZGVsYXlfamlmZmllcyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGxvbmcgc2l6ZSkKK3sKKwlsb25nIHRtcCA9IChzaXplICogSFogKiBjaGlwLT5wbGF5X3NhbXBsZV9zaXplKSAvIDg7CisJcmV0dXJuIHRtcCAvIChjaGlwLT5wbGF5X3NhbXBsZV9yYXRlICogY2hpcC0+cGxheV9jaGFubmVscyk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX2RzcF93cml0ZV9mbHVzaChzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJaWYgKCEoY2hpcC0+bW9kZSAmIEZNT0RFX1dSSVRFKSB8fCAhdGVzdF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR1cm47CisJc2V0X2JpdChGX1dSSVRFRkxVU0gsICZjaGlwLT5mbGFncyk7CisvKglpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoCisJCSZjaGlwLT53cml0ZWZsdXNoLAorCQlnZXRfcGxheV9kZWxheV9qaWZmaWVzKCZjaGlwLCBjaGlwLT5EQVBGLmxlbikpOyovCisJY2xlYXJfYml0KEZfV1JJVEVGTFVTSCwgJmNoaXAtPmZsYWdzKTsKKwlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCisJCQlnZXRfcGxheV9kZWxheV9qaWZmaWVzKGNoaXAsIGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzKSk7CisJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKK30KKwordm9pZCBzbmRfbXNuZF9kc3BfaGFsdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICgoZmlsZSA/IGZpbGUtPmZfbW9kZSA6IGNoaXAtPm1vZGUpICYgRk1PREVfUkVBRCkgeworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RPUCk7CisJCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCQlpZiAoZmlsZSkgeworCQkJc25kX3ByaW50ZChLRVJOX0lORk8gTE9HTkFNRQorCQkJCSAgICI6IFN0b3BwaW5nIHJlYWQgZm9yICVwXG4iLCBmaWxlKTsKKwkJCWNoaXAtPm1vZGUgJj0gfkZNT0RFX1JFQUQ7CisJCX0KKwkJY2xlYXJfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwl9CisJaWYgKChmaWxlID8gZmlsZS0+Zl9tb2RlIDogY2hpcC0+bW9kZSkgJiBGTU9ERV9XUklURSkgeworCQlpZiAodGVzdF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpKSB7CisJCQlzbmRfbXNuZF9kc3Bfd3JpdGVfZmx1c2goY2hpcCk7CisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUT1ApOworCQl9CisJCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCQlpZiAoZmlsZSkgeworCQkJc25kX3ByaW50ZChLRVJOX0lORk8KKwkJCQkgICBMT0dOQU1FICI6IFN0b3BwaW5nIHdyaXRlIGZvciAlcFxuIiwgZmlsZSk7CisJCQljaGlwLT5tb2RlICY9IH5GTU9ERV9XUklURTsKKwkJfQorCQljbGVhcl9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2RzcF9oYWx0KTsKKworCitpbnQgc25kX21zbmRfREFSUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBiYW5rKQoreworCWludCAvKnNpemUsIG4sKi8gdGltZW91dCA9IDM7CisJdTE2IHdUbXA7CisJLyogdm9pZCAqREFRRDsgKi8KKworCS8qIEluY3JlbWVudCB0aGUgdGFpbCBhbmQgY2hlY2sgZm9yIHF1ZXVlIHdyYXAgKi8KKwl3VG1wID0gcmVhZHcoY2hpcC0+REFSUSArIEpRU193VGFpbCkgKyBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisJaWYgKHdUbXAgPiByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dTaXplKSkKKwkJd1RtcCA9IDA7CisJd2hpbGUgKHdUbXAgPT0gcmVhZHcoY2hpcC0+REFSUSArIEpRU193SGVhZCkgJiYgdGltZW91dC0tKQorCQl1ZGVsYXkoMSk7CisKKwlpZiAoY2hpcC0+Y2FwdHVyZVBlcmlvZHMgPT0gMikgeworCQl2b2lkICpwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGICsKKwkJCSAgICAgYmFuayAqIERBUURTX19zaXplICsgREFRRFNfd1N0YXJ0OworCQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQgPSAweDMwMDAgKyBjaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXM7CisKKwkJaWYgKHJlYWR3KHBEQVEpICE9IFBDVE9EU1BfQkFTRUQoMHgzMDAwKSkKKwkJCW9mZnNldCA9IDB4MzAwMDsKKwkJd3JpdGV3KFBDVE9EU1BfQkFTRUQob2Zmc2V0KSwgcERBUSk7CisJfQorCisJd3JpdGV3KHdUbXAsIGNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpOworCisjaWYgMAorCS8qIEdldCBvdXIgZGlnaXRhbCBhdWRpbyBxdWV1ZSBzdHJ1Y3QgKi8KKwlEQVFEID0gYmFuayAqIERBUURTX19zaXplICsgY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGOworCisJLyogR2V0IGxlbmd0aCBvZiBkYXRhICovCisJc2l6ZSA9IHJlYWR3KERBUUQgKyBEQVFEU193U2l6ZSk7CisKKwkvKiBSZWFkIGRhdGEgZnJvbSB0aGUgaGVhZCAodW5wcm90ZWN0ZWQgYmFuayAxIGFjY2VzcyBva2F5CisJICAgc2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCBpbnNpZGUgYW4gaW50ZXJydXB0KSAqLworCW91dGIoSFBCTEtTRUxfMSwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwluID0gbXNuZF9maWZvX3dyaXRlKCZjaGlwLT5EQVJGLAorCQkJICAgIChjaGFyICopKGNoaXAtPmJhc2UgKyBiYW5rICogREFSX0JVRkZfU0laRSksCisJCQkgICAgc2l6ZSwgMCk7CisJaWYgKG4gPD0gMCkgeworCQlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJCXJldHVybiBuOworCX0KKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisjZW5kaWYKKworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9EQVJRKTsKKworaW50IHNuZF9tc25kX0RBUFEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpCit7CisJdTE2CURBUFFfdGFpbDsKKwlpbnQJcHJvdGVjdCA9IHN0YXJ0LCBuYmFua3MgPSAwOworCXZvaWQJKkRBUUQ7CisJc3RhdGljIGludCBwbGF5X2JhbmtzX3N1Ym1pdHRlZDsKKwkvKiB1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7IG5vdCBuZWNlc3NhcnkgKi8KKworCURBUFFfdGFpbCA9IHJlYWR3KGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCXdoaWxlIChEQVBRX3RhaWwgIT0gcmVhZHcoY2hpcC0+REFQUSArIEpRU193SGVhZCkgfHwgc3RhcnQpIHsKKwkJaW50IGJhbmtfbnVtID0gREFQUV90YWlsIC8gUENUT0RTUF9PRkZTRVQoREFRRFNfX3NpemUpOworCisJCWlmIChzdGFydCkgeworCQkJc3RhcnQgPSAwOworCQkJcGxheV9iYW5rc19zdWJtaXR0ZWQgPSAwOworCQl9CisKKwkJLyogR2V0IG91ciBkaWdpdGFsIGF1ZGlvIHF1ZXVlIHN0cnVjdCAqLworCQlEQVFEID0gYmFua19udW0gKiBEQVFEU19fc2l6ZSArIGNoaXAtPm1hcHBlZGJhc2UgKworCQkJREFQUV9EQVRBX0JVRkY7CisKKwkJLyogV3JpdGUgc2l6ZSBvZiB0aGlzIGJhbmsgKi8KKwkJd3JpdGV3KGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzLCBEQVFEICsgREFRRFNfd1NpemUpOworCQlpZiAocGxheV9iYW5rc19zdWJtaXR0ZWQgPCAzKQorCQkJKytwbGF5X2JhbmtzX3N1Ym1pdHRlZDsKKwkJZWxzZSBpZiAoY2hpcC0+cGxheVBlcmlvZHMgPT0gMikgeworCQkJdW5zaWduZWQgc2hvcnQgb2Zmc2V0ID0gY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXM7CisKKwkJCWlmIChyZWFkdyhEQVFEICsgREFRRFNfd1N0YXJ0KSAhPSBQQ1RPRFNQX0JBU0VEKDB4MCkpCisJCQkJb2Zmc2V0ID0gMDsKKworCQkJd3JpdGV3KFBDVE9EU1BfQkFTRUQob2Zmc2V0KSwgREFRRCArIERBUURTX3dTdGFydCk7CisJCX0KKwkJKytuYmFua3M7CisKKwkJLyogVGhlbiBhZHZhbmNlIHRoZSB0YWlsICovCisJCS8qCisJCWlmIChwcm90ZWN0KQorCQkJc25kX3ByaW50ZChLRVJOX0lORk8gIkIgJVggJWxYXG4iLAorCQkJCSAgIGJhbmtfbnVtLCB4dGltZS50dl91c2VjKTsKKwkJKi8KKworCQlEQVBRX3RhaWwgPSAoKytiYW5rX251bSAlIDMpICogUENUT0RTUF9PRkZTRVQoREFRRFNfX3NpemUpOworCQl3cml0ZXcoREFQUV90YWlsLCBjaGlwLT5EQVBRICsgSlFTX3dUYWlsKTsKKwkJLyogVGVsbCB0aGUgRFNQIHRvIHBsYXkgdGhlIGJhbmsgKi8KKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUExBWV9TVEFSVCk7CisJCWlmIChwcm90ZWN0KQorCQkJaWYgKDIgPT0gYmFua19udW0pCisJCQkJYnJlYWs7CisJfQorCS8qCisJaWYgKHByb3RlY3QpCisJCXNuZF9wcmludGQoS0VSTl9JTkZPICIlbFhcbiIsIHh0aW1lLnR2X3VzZWMpOworCSovCisJLyogc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOyBub3QgbmVjZXNzYXJ5ICovCisJcmV0dXJuIG5iYW5rczsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfREFQUSk7CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX3BsYXlfcmVzZXRfcXVldWUoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwY21fcGVyaW9kcywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGNtX2NvdW50KQoreworCWludAluOworCXZvaWQJKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFQUV9EQVRBX0JVRkY7CisKKwljaGlwLT5sYXN0X3BsYXliYW5rID0gLTE7CisJY2hpcC0+cGxheUxpbWl0ID0gcGNtX2NvdW50ICogKHBjbV9wZXJpb2RzIC0gMSk7CisJY2hpcC0+cGxheVBlcmlvZHMgPSBwY21fcGVyaW9kczsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFQUSArIEpRU193SGVhZCk7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCisJY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMgPSBwY21fY291bnQ7CisKKwlmb3IgKG4gPSAwOyBuIDwgcGNtX3BlcmlvZHM7ICsrbiwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoUENUT0RTUF9CQVNFRCgodTMyKShwY21fY291bnQgKiBuKSksCisJCQlwREFRICsgREFRRFNfd1N0YXJ0KTsKKwkJd3JpdGV3KDAsIHBEQVEgKyBEQVFEU193U2l6ZSk7CisJCXdyaXRldygxLCBwREFRICsgREFRRFNfd0Zvcm1hdCk7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+cGxheV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCQl3cml0ZXcoSElNVF9QTEFZX0RPTkUgKiAweDEwMCArIG4sIHBEQVEgKyBEQVFEU193SW50TXNnKTsKKwkJd3JpdGV3KG4sIHBEQVEgKyBEQVFEU193RmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfY2FwdHVyZV9yZXNldF9xdWV1ZShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkJCSB1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMsCisJCQkJCSB1bnNpZ25lZCBpbnQgcGNtX2NvdW50KQoreworCWludAkJbjsKKwl2b2lkCQkqcERBUTsKKwkvKiB1bnNpZ25lZCBsb25nCWZsYWdzOyAqLworCisJLyogc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EQVJRLCBEQVJRX0RBVEFfQlVGRiwgREFSUV9CVUZGX1NJWkUpOyAqLworCisJY2hpcC0+bGFzdF9yZWNiYW5rID0gMjsKKwljaGlwLT5jYXB0dXJlTGltaXQgPSBwY21fY291bnQgKiAocGNtX3BlcmlvZHMgLSAxKTsKKwljaGlwLT5jYXB0dXJlUGVyaW9kcyA9IHBjbV9wZXJpb2RzOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVJRICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoY2hpcC0+bGFzdF9yZWNiYW5rICogREFRRFNfX3NpemUpLAorCQljaGlwLT5EQVJRICsgSlFTX3dUYWlsKTsKKworI2lmIDAgLyogQ3JpdGljYWwgc2VjdGlvbjogYmFuayAxIGFjY2Vzcy4gdGhpcyBpcyBob3cgdGhlIE9TUyBkcml2ZXIgZG9lcyBpdDoqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCBEQVJfQlVGRl9TSVpFICogMyk7CisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKyNlbmRpZgorCisJY2hpcC0+Y2FwdHVyZVBlcmlvZEJ5dGVzID0gcGNtX2NvdW50OworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKCkgJWlcbiIsIHBjbV9jb3VudCk7CisKKwlwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGOworCisJZm9yIChuID0gMDsgbiA8IHBjbV9wZXJpb2RzOyArK24sIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJdTMyIHRtcCA9IHBjbV9jb3VudCAqIG47CisKKwkJd3JpdGV3KFBDVE9EU1BfQkFTRUQodG1wICsgMHgzMDAwKSwgcERBUSArIERBUURTX3dTdGFydCk7CisJCXdyaXRldyhwY21fY291bnQsIHBEQVEgKyBEQVFEU193U2l6ZSk7CisJCXdyaXRldygxLCBwREFRICsgREFRRFNfd0Zvcm1hdCk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCQl3cml0ZXcoSElNVF9SRUNPUkRfRE9ORSAqIDB4MTAwICsgbiwgcERBUSArIERBUURTX3dJbnRNc2cpOworCQl3cml0ZXcobiwgcERBUSArIERBUURTX3dGbGFncyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX21zbmRfcGxheWJhY2sgPSB7CisJLmluZm8gPQkJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPQkJODAwMCwKKwkucmF0ZV9tYXggPQkJNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9CQkxLAorCS5jaGFubmVsc19tYXggPQkJMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9CTB4MzAwMCwKKwkucGVyaW9kX2J5dGVzX21pbiA9CTB4NDAsCisJLnBlcmlvZF9ieXRlc19tYXggPQkweDE4MDAsCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTMsCisJLmZpZm9fc2l6ZSA9CQkwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9tc25kX2NhcHR1cmUgPSB7CisJLmluZm8gPQkJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPQkJODAwMCwKKwkucmF0ZV9tYXggPQkJNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9CQkxLAorCS5jaGFubmVsc19tYXggPQkJMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9CTB4MzAwMCwKKwkucGVyaW9kX2J5dGVzX21pbiA9CTB4NDAsCisJLnBlcmlvZF9ieXRlc19tYXggPQkweDE4MDAsCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTMsCisJLmZpZm9fc2l6ZSA9CQkwLAorfTsKKworCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzZXRfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9lbmFibGVfaXJxKGNoaXApOworCisJcnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5tYXBwZWRiYXNlOworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IDB4MzAwMDsKKworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlydW50aW1lLT5odyA9IHNuZF9tc25kX3BsYXliYWNrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCWNsZWFyX2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQJaTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdm9pZAkqcERBUSA9CWNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX0RBVEFfQlVGRjsKKworCWNoaXAtPnBsYXlfc2FtcGxlX3NpemUgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWNoaXAtPnBsYXlfY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwljaGlwLT5wbGF5X3NhbXBsZV9yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2ksIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJfQorCS8qIGRvbnQgZG8gdGhpcyBoZXJlOgorCSAqIHNuZF9tc25kX2NhbGlicmF0ZV9hZGMoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSk7CisJICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX2NvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzID0gcGNtX3NpemUgLyBwY21fY291bnQ7CisKKwlzbmRfbXNuZF9wbGF5X3Jlc2V0X3F1ZXVlKGNoaXAsIHBjbV9wZXJpb2RzLCBwY21fY291bnQpOworCWNoaXAtPnBsYXlETUFQb3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQJcmVzdWx0ID0gMDsKKworCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpIHsKKwkJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoU1RBUlQpXG4iKTsKKwkJY2hpcC0+YmFua3NQbGF5ZWQgPSAwOworCQlzZXRfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfREFQUShjaGlwLCAxKTsKKwl9IGVsc2UgaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QKSB7CisJCXNuZF9wcmludGRkKCJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKFNUb3ApXG4iKTsKKwkJLyogaW50ZXJydXB0IGRpYWdub3N0aWMsIGNvbW1lbnQgdGhpcyBvdXQgbGF0ZXIgKi8KKwkJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUExBWV9TVE9QKTsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKD8/Pz8/KVxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCisJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoKSBFTkRFXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9tc25kX3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIGNoaXAtPnBsYXlETUFQb3MpOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX21zbmRfcGxheWJhY2tfb3BzID0geworCS5vcGVuID0JCXNuZF9tc25kX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0Jc25kX21zbmRfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CXNuZF9tc25kX3BsYXliYWNrX2h3X3BhcmFtcywKKwkucHJlcGFyZSA9CXNuZF9tc25kX3BsYXliYWNrX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX21zbmRfcGxheWJhY2tfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc2V0X2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJc25kX21zbmRfZW5hYmxlX2lycShjaGlwKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPm1hcHBlZGJhc2UgKyAweDMwMDA7CisJcnVudGltZS0+ZG1hX2J5dGVzID0gMHgzMDAwOworCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgcnVudGltZS0+ZG1hX2J5dGVzKTsKKwljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlydW50aW1lLT5odyA9IHNuZF9tc25kX2NhcHR1cmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwljbGVhcl9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9jb3VudCA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fcGVyaW9kcyA9IHBjbV9zaXplIC8gcGNtX2NvdW50OworCisJc25kX21zbmRfY2FwdHVyZV9yZXNldF9xdWV1ZShjaGlwLCBwY21fcGVyaW9kcywgcGNtX2NvdW50KTsKKwljaGlwLT5jYXB0dXJlRE1BUG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgeworCQljaGlwLT5sYXN0X3JlY2JhbmsgPSAtMTsKKwkJc2V0X2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCWlmIChzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RBUlQpID09IDApCisJCQlyZXR1cm4gMDsKKworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCX0gZWxzZSBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApIHsKKwkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUkVDT1JEX1NUT1ApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfbXNuZF9jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGNoaXAtPmNhcHR1cmVETUFQb3MpOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludAkJaTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdm9pZAkJKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwljaGlwLT5jYXB0dXJlX2NoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9tc25kX2NhcHR1cmVfb3BzID0geworCS5vcGVuID0JCXNuZF9tc25kX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZF9jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlzbmRfbXNuZF9jYXB0dXJlX2h3X3BhcmFtcywKKwkucHJlcGFyZSA9CXNuZF9tc25kX2NhcHR1cmVfcHJlcGFyZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9tc25kX2NhcHR1cmVfcG9pbnRlciwKK307CisKKworaW50IHNuZF9tc25kX3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsCisJCQlzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfcGNtCSpwY207CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJNU05EUElOTkFDTEUiLCBkZXZpY2UsIDEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9tc25kX3BsYXliYWNrX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX21zbmRfY2FwdHVyZV9vcHMpOworCisJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCXN0cmNweShwY20tPm5hbWUsICJIdXJyaWNhbmUiKTsKKworCisJaWYgKHJwY20pCisJCSpycGNtID0gcGNtOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9wY20pOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbW1vbiByb3V0aW5lcyBmb3IgVHVydGxlIEJlYWNoIE11bHRpc291bmQgZHJpdmVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kLmggYi9zb3VuZC9pc2EvbXNuZC9tc25kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3M2UyNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmQuaApAQCAtMCwwICsxLDMwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmQuaAorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIFNvbWUgcGFydHMgb2YgdGhpcyBoZWFkZXIgZmlsZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgVHVydGxlIEJlYWNoCisgKiBNdWx0aVNvdW5kIERyaXZlciBEZXZlbG9wbWVudCBLaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVHVydGxlIEJlYWNoIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNORF9ICisjZGVmaW5lIF9fTVNORF9ICisKKyNkZWZpbmUgREVGU0FNUExFUkFURQkJNDQxMDAKKyNkZWZpbmUgREVGU0FNUExFU0laRQkJU05EUlZfUENNX0ZPUk1BVF9TMTYKKyNkZWZpbmUgREVGQ0hBTk5FTFMJCTEKKworI2RlZmluZSBTUkFNX0JBTktfU0laRQkJMHg4MDAwCisjZGVmaW5lIFNSQU1fQ05UTF9TVEFSVAkJMHg3RjAwCisjZGVmaW5lIFNNQV9TVFJVQ1RfU1RBUlQJMHg3RjQwCisKKyNkZWZpbmUgRFNQX0JBU0VfQUREUgkJMHg0MDAwCisjZGVmaW5lIERTUF9CQU5LX0JBU0UJCTB4NDAwMAorCisjZGVmaW5lIEFHTkQJCQkweDAxCisjZGVmaW5lIFNJR05BTAkJCTB4MDIKKworI2RlZmluZSBFWFRfRFNQX0JJVF9EQ0FMCTB4MDAwMQorI2RlZmluZSBFWFRfRFNQX0JJVF9NSURJX0NPTgkweDAwMDIKKworI2RlZmluZSBCVUZGU0laRQkJMHg4MDAwCisjZGVmaW5lIEhPU1RRX1NJWkUJCTB4NDAKKworI2RlZmluZSBEQVBfQlVGRl9TSVpFCQkweDI0MDAKKworI2RlZmluZSBEQVBRX1NUUlVDVF9TSVpFCTB4MTAKKyNkZWZpbmUgREFSUV9TVFJVQ1RfU0laRQkweDEwCisjZGVmaW5lIERBUFFfQlVGRl9TSVpFCQkoMyAqIDB4MTApCisjZGVmaW5lIERBUlFfQlVGRl9TSVpFCQkoMyAqIDB4MTApCisjZGVmaW5lIE1PRFFfQlVGRl9TSVpFCQkweDQwMAorCisjZGVmaW5lIERBUFFfREFUQV9CVUZGCQkweDZDMDAKKyNkZWZpbmUgREFSUV9EQVRBX0JVRkYJCTB4NkMzMAorI2RlZmluZSBNT0RRX0RBVEFfQlVGRgkJMHg2QzYwCisjZGVmaW5lIE1JRFFfREFUQV9CVUZGCQkweDcwNjAKKworI2RlZmluZSBEQVBRX09GRlNFVAkJU1JBTV9DTlRMX1NUQVJUCisjZGVmaW5lIERBUlFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgwOCkKKyNkZWZpbmUgTU9EUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDEwKQorI2RlZmluZSBNSURRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MTgpCisjZGVmaW5lIERTUFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgyMCkKKworI2RlZmluZQlIUF9JQ1IJCQkweDAwCisjZGVmaW5lCUhQX0NWUgkJCTB4MDEKKyNkZWZpbmUJSFBfSVNSCQkJMHgwMgorI2RlZmluZQlIUF9JVlIJCQkweDAzCisjZGVmaW5lIEhQX05VCQkJMHgwNAorI2RlZmluZSBIUF9JTkZPCQkJMHgwNAorI2RlZmluZQlIUF9UWEgJCQkweDA1CisjZGVmaW5lCUhQX1JYSAkJCTB4MDUKKyNkZWZpbmUJSFBfVFhNCQkJMHgwNgorI2RlZmluZQlIUF9SWE0JCQkweDA2CisjZGVmaW5lCUhQX1RYTAkJCTB4MDcKKyNkZWZpbmUJSFBfUlhMCQkJMHgwNworCisjZGVmaW5lIEhQX0lDUl9ERUYJCTB4MDAKKyNkZWZpbmUgSFBfQ1ZSX0RFRgkJMHgxMgorI2RlZmluZSBIUF9JU1JfREVGCQkweDA2CisjZGVmaW5lIEhQX0lWUl9ERUYJCTB4MGYKKyNkZWZpbmUgSFBfTlVfREVGCQkweDAwCisKKyNkZWZpbmUJSFBfSVJRTQkJCTB4MDkKKworI2RlZmluZQlIUFJfQkxSQwkJMHgwOAorI2RlZmluZQlIUFJfU1BSMQkJMHgwOQorI2RlZmluZQlIUFJfU1BSMgkJMHgwQQorI2RlZmluZQlIUFJfVENMMAkJMHgwQgorI2RlZmluZQlIUFJfVENMMQkJMHgwQworI2RlZmluZQlIUFJfVENMMgkJMHgwRAorI2RlZmluZQlIUFJfVENMMwkJMHgwRQorI2RlZmluZQlIUFJfVENMNAkJMHgwRgorCisjZGVmaW5lCUhQSUNSX0lOSVQJCTB4ODAKKyNkZWZpbmUgSFBJQ1JfSE0xCQkweDQwCisjZGVmaW5lIEhQSUNSX0hNMAkJMHgyMAorI2RlZmluZSBIUElDUl9IRjEJCTB4MTAKKyNkZWZpbmUgSFBJQ1JfSEYwCQkweDA4CisjZGVmaW5lCUhQSUNSX1RSRVEJCTB4MDIKKyNkZWZpbmUJSFBJQ1JfUlJFUQkJMHgwMQorCisjZGVmaW5lIEhQQ1ZSX0hDCQkweDgwCisKKyNkZWZpbmUJSFBJU1JfSFJFUQkJMHg4MAorI2RlZmluZSBIUElTUl9ETUEJCTB4NDAKKyNkZWZpbmUgSFBJU1JfSEYzCQkweDEwCisjZGVmaW5lIEhQSVNSX0hGMgkJMHgwOAorI2RlZmluZQlIUElTUl9UUkRZCQkweDA0CisjZGVmaW5lCUhQSVNSX1RYREUJCTB4MDIKKyNkZWZpbmUJSFBJU1JfUlhERgkJMHgwMQorCisjZGVmaW5lCUhQSU9fMjkwCQkwCisjZGVmaW5lCUhQSU9fMjYwCQkxCisjZGVmaW5lCUhQSU9fMjUwCQkyCisjZGVmaW5lCUhQSU9fMjQwCQkzCisjZGVmaW5lCUhQSU9fMjMwCQk0CisjZGVmaW5lCUhQSU9fMjIwCQk1CisjZGVmaW5lCUhQSU9fMjEwCQk2CisjZGVmaW5lCUhQSU9fM0UwCQk3CisKKyNkZWZpbmUJSFBNRU1fTk9ORQkJMAorI2RlZmluZQlIUE1FTV9CMDAwCQkxCisjZGVmaW5lCUhQTUVNX0M4MDAJCTIKKyNkZWZpbmUJSFBNRU1fRDAwMAkJMworI2RlZmluZQlIUE1FTV9ENDAwCQk0CisjZGVmaW5lCUhQTUVNX0Q4MDAJCTUKKyNkZWZpbmUJSFBNRU1fRTAwMAkJNgorI2RlZmluZQlIUE1FTV9FODAwCQk3CisKKyNkZWZpbmUJSFBJUlFfTk9ORQkJMAorI2RlZmluZSBIUElSUV81CQkJMQorI2RlZmluZSBIUElSUV83CQkJMgorI2RlZmluZSBIUElSUV85CQkJMworI2RlZmluZSBIUElSUV8xMAkJNAorI2RlZmluZSBIUElSUV8xMQkJNQorI2RlZmluZSBIUElSUV8xMgkJNgorI2RlZmluZSBIUElSUV8xNQkJNworCisjZGVmaW5lCUhJTVRfUExBWV9ET05FCQkweDAwCisjZGVmaW5lCUhJTVRfUkVDT1JEX0RPTkUJMHgwMQorI2RlZmluZQlISU1UX01JRElfRU9TCQkweDAyCisjZGVmaW5lCUhJTVRfTUlESV9PVVQJCTB4MDMKKworI2RlZmluZQlISU1UX01JRElfSU5fVUNIQVIJMHgwRQorI2RlZmluZQlISU1UX0RTUAkJMHgwRgorCisjZGVmaW5lCUhERVhfQkFTRQkgICAgICAgCTB4OTIKKyNkZWZpbmUJSERFWF9QTEFZX1NUQVJUCQkoMCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9QTEFZX1NUT1AJCSgxICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfUEFVU0UJCSgyICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfUkVTVU1FCSgzICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1JFQ09SRF9TVEFSVAkoNCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9SRUNPUkRfU1RPUAkoNSArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX0lOX1NUQVJUIAkoNiArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX0lOX1NUT1AJKDcgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9PVVRfU1RBUlQJKDggKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9PVVRfU1RPUAkoOSArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9BVVhfUkVRCQkoMTAgKyBIREVYX0JBU0UpCisKKyNkZWZpbmUJSERFWEFSX0NMRUFSX1BFQUtTCTEKKyNkZWZpbmUJSERFWEFSX0lOX1NFVF9QT1RTCTIKKyNkZWZpbmUJSERFWEFSX0FVWF9TRVRfUE9UUwkzCisjZGVmaW5lCUhERVhBUl9DQUxfQV9UT19ECTQKKyNkZWZpbmUJSERFWEFSX1JEX0VYVF9EU1BfQklUUwk1CisKKy8qIFBpbm5hY2xlIG9ubHkgSERFWEFSIGRlZnMgKi8KKyNkZWZpbmUJSERFWEFSX1NFVF9BTkFfSU4JMAorI2RlZmluZQlIREVYQVJfU0VUX1NZTlRIX0lOCTQKKyNkZWZpbmUJSERFWEFSX1JFQURfREFUX0lOCTUKKyNkZWZpbmUJSERFWEFSX01JQ19TRVRfUE9UUwk2CisjZGVmaW5lCUhERVhBUl9TRVRfREFUX0lOCTcKKworI2RlZmluZSBIREVYQVJfU0VUX1NZTlRIXzQ4CTgKKyNkZWZpbmUgSERFWEFSX1NFVF9TWU5USF80NAk5CisKKyNkZWZpbmUgSElXT1JEKGwpCQkoKHUxNikoKCgodTMyKShsKSkgPj4gMTYpICYgMHhGRkZGKSkKKyNkZWZpbmUgTE9XT1JEKGwpCQkoKHUxNikodTMyKShsKSkKKyNkZWZpbmUgSElCWVRFKHcpCQkoKHU4KSgoKHUxNikodykgPj4gOCkgJiAweEZGKSkKKyNkZWZpbmUgTE9CWVRFKHcpCQkoKHU4KSh3KSkKKyNkZWZpbmUgTUFLRUxPTkcobG93LCBoaSkJKChsb25nKSgoKHUxNikobG93KSl8KCgodTMyKSgodTE2KShoaSkpKTw8MTYpKSkKKyNkZWZpbmUgTUFLRVdPUkQobG93LCBoaSkJKCh1MTYpKCgodTgpKGxvdykpfCgoKHUxNikoKHU4KShoaSkpKTw8OCkpKQorCisjZGVmaW5lIFBDVE9EU1BfT0ZGU0VUKHcpCSh1MTYpKCh3KS8yKQorI2RlZmluZSBQQ1RPRFNQX0JBU0VEKHcpCSh1MTYpKCgodykvMikgKyBEU1BfQkFTRV9BRERSKQorI2RlZmluZSBEU1BUT1BDX0JBU0VEKHcpCSgoKHcpIC0gRFNQX0JBU0VfQUREUikgKiAyKQorCisjaWZkZWYgU0xPV0lPCisjICB1bmRlZiBvdXRiCisjICB1bmRlZiBpbmIKKyMgIGRlZmluZSBvdXRiCQkJb3V0Yl9wCisjICBkZWZpbmUgaW5iCQkJaW5iX3AKKyNlbmRpZgorCisvKiBKb2JRdWV1ZVN0cnVjdCAqLworI2RlZmluZSBKUVNfd1N0YXJ0CQkweDAwCisjZGVmaW5lIEpRU193U2l6ZQkJMHgwMgorI2RlZmluZSBKUVNfd0hlYWQJCTB4MDQKKyNkZWZpbmUgSlFTX3dUYWlsCQkweDA2CisjZGVmaW5lIEpRU19fc2l6ZQkJMHgwOAorCisvKiBEQVF1ZXVlRGF0YVN0cnVjdCAqLworI2RlZmluZSBEQVFEU193U3RhcnQJCTB4MDAKKyNkZWZpbmUgREFRRFNfd1NpemUJCTB4MDIKKyNkZWZpbmUgREFRRFNfd0Zvcm1hdAkJMHgwNAorI2RlZmluZSBEQVFEU193U2FtcGxlU2l6ZQkweDA2CisjZGVmaW5lIERBUURTX3dDaGFubmVscwkJMHgwOAorI2RlZmluZSBEQVFEU193U2FtcGxlUmF0ZQkweDBBCisjZGVmaW5lIERBUURTX3dJbnRNc2cJCTB4MEMKKyNkZWZpbmUgREFRRFNfd0ZsYWdzCQkweDBFCisjZGVmaW5lIERBUURTX19zaXplCQkweDEwCisKKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworc3RydWN0IHNuZF9tc25kIHsKKwl2b2lkIF9faW9tZW0JCSptYXBwZWRiYXNlOworCWludAkJCXBsYXlfcGVyaW9kX2J5dGVzOworCWludAkJCXBsYXlMaW1pdDsKKwlpbnQJCQlwbGF5UGVyaW9kczsKKwlpbnQgCQkJcGxheURNQVBvczsKKwlpbnQJCQliYW5rc1BsYXllZDsKKwlpbnQgCQkJY2FwdHVyZURNQVBvczsKKwlpbnQJCQljYXB0dXJlUGVyaW9kQnl0ZXM7CisJaW50CQkJY2FwdHVyZUxpbWl0OworCWludAkJCWNhcHR1cmVQZXJpb2RzOworCXN0cnVjdCBzbmRfY2FyZAkJKmNhcmQ7CisJdm9pZAkJCSptc25kbWlkaV9tcHU7CisJc3RydWN0IHNuZF9yYXdtaWRpCSpybWlkaTsKKworCS8qIEhhcmR3YXJlIHJlc291cmNlcyAqLworCWxvbmcgaW87CisJaW50IG1lbWlkLCBpcnFpZDsKKwlpbnQgaXJxLCBpcnFfcmVmOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCS8qIE1vdG9yb2xhIDU2ayBEU1AgU01BICovCisJdm9pZCBfX2lvbWVtCSpTTUE7CisJdm9pZCBfX2lvbWVtCSpEQVBROworCXZvaWQgX19pb21lbQkqREFSUTsKKwl2b2lkIF9faW9tZW0JKk1PRFE7CisJdm9pZCBfX2lvbWVtCSpNSURROworCXZvaWQgX19pb21lbQkqRFNQUTsKKwlpbnQgZHNwcV9kYXRhX2J1ZmYsIGRzcHFfYnVmZl9zaXplOworCisJLyogU3RhdGUgdmFyaWFibGVzICovCisJZW51bSB7IG1zbmRDbGFzc2ljLCBtc25kUGlubmFjbGUgfSB0eXBlOworCW1vZGVfdCBtb2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZGVmaW5lIEZfUkVTRVRUSU5HCQkJMAorI2RlZmluZSBGX0hBVkVESUdJVEFMCQkJMQorI2RlZmluZSBGX0FVRElPX1dSSVRFX0lOVVNFCQkyCisjZGVmaW5lIEZfV1JJVElORwkJCTMKKyNkZWZpbmUgRl9XUklURUJMT0NLCQkJNAorI2RlZmluZSBGX1dSSVRFRkxVU0gJCQk1CisjZGVmaW5lIEZfQVVESU9fUkVBRF9JTlVTRQkJNgorI2RlZmluZSBGX1JFQURJTkcJCQk3CisjZGVmaW5lIEZfUkVBREJMT0NLCQkJOAorI2RlZmluZSBGX0VYVF9NSURJX0lOVVNFCQk5CisjZGVmaW5lIEZfSERSX01JRElfSU5VU0UJCTEwCisjZGVmaW5lIEZfRElTQUJMRV9XUklURV9OREVMQVkJCTExCisJc3BpbmxvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKKwlpbnQgbnJlc2V0czsKKwl1bnNpZ25lZCByZWNzcmM7CisjZGVmaW5lIExFVkVMX0VOVFJJRVMgMzIKKwlpbnQgbGVmdF9sZXZlbHNbTEVWRUxfRU5UUklFU107CisJaW50IHJpZ2h0X2xldmVsc1tMRVZFTF9FTlRSSUVTXTsKKwlpbnQgY2FsaWJyYXRlX3NpZ25hbDsKKwlpbnQgcGxheV9zYW1wbGVfc2l6ZSwgcGxheV9zYW1wbGVfcmF0ZSwgcGxheV9jaGFubmVsczsKKwlpbnQgcGxheV9uZGVsYXk7CisJaW50IGNhcHR1cmVfc2FtcGxlX3NpemUsIGNhcHR1cmVfc2FtcGxlX3JhdGUsIGNhcHR1cmVfY2hhbm5lbHM7CisJaW50IGNhcHR1cmVfbmRlbGF5OworCXU4IGJDdXJyZW50TWlkaVBhdGNoOworCisJaW50IGxhc3RfcGxheWJhbmssIGxhc3RfcmVjYmFuazsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfc3Vic3RyZWFtOworCit9OworCit2b2lkIHNuZF9tc25kX2luaXRfcXVldWUodm9pZCAqYmFzZSwgaW50IHN0YXJ0LCBpbnQgc2l6ZSk7CisKK2ludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWQoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1OCBjbWQpOworaW50IHNuZF9tc25kX3NlbmRfd29yZChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkgICB1bnNpZ25lZCBjaGFyIGhpZ2gsCisJCQkgICB1bnNpZ25lZCBjaGFyIG1pZCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgbG93KTsKK2ludCBzbmRfbXNuZF91cGxvYWRfaG9zdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkgICAgIGNvbnN0IHU4ICpiaW4sIGludCBsZW4pOworaW50IHNuZF9tc25kX2VuYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK2ludCBzbmRfbXNuZF9kaXNhYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOwordm9pZCBzbmRfbXNuZF9kc3BfaGFsdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHN0cnVjdCBmaWxlICpmaWxlKTsKK2ludCBzbmRfbXNuZF9EQVBRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KTsKK2ludCBzbmRfbXNuZF9EQVJRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KTsKK2ludCBzbmRfbXNuZF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOworCitpbnQgc25kX21zbmRtaWRpX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpOwordm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCh2b2lkICptcHUpOworCit2b2lkIHNuZF9tc25kbWl4X3NldHVwKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7CitpbnQgX19kZXZpbml0IHNuZF9tc25kbWl4X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOworaW50IHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCByZWNzcmMpOworI2VuZGlmIC8qIF9fTVNORF9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjNhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuYwpAQCAtMCwwICsxLDMgQEAKKy8qIFRoZSB3b3JrIGlzIGluIG1zbmRfcGlubmFjbGUuYywganVzdCBkZWZpbmUgTVNORF9DTEFTU0lDIGJlZm9yZSBpdC4gKi8KKyNkZWZpbmUgTVNORF9DTEFTU0lDCisjaW5jbHVkZSAibXNuZF9waW5uYWNsZS5jIgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmggYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMThkNWZhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kX2NsYXNzaWMuaAorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIFNvbWUgcGFydHMgb2YgdGhpcyBoZWFkZXIgZmlsZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgVHVydGxlIEJlYWNoCisgKiBNdWx0aVNvdW5kIERyaXZlciBEZXZlbG9wbWVudCBLaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVHVydGxlIEJlYWNoIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNORF9DTEFTU0lDX0gKKyNkZWZpbmUgX19NU05EX0NMQVNTSUNfSAorCisjZGVmaW5lIERTUF9OVU1JTwkJCQkweDEwCisKKyNkZWZpbmUJSFBfTUVNTQkJCQkJMHgwOAorCisjZGVmaW5lCUhQX0JJVE0JCQkJCTB4MEUKKyNkZWZpbmUJSFBfV0FJVAkJCQkJMHgwRAorI2RlZmluZQlIUF9EU1BSCQkJCQkweDBBCisjZGVmaW5lCUhQX1BST1IJCQkJCTB4MEIKKyNkZWZpbmUJSFBfQkxLUwkJCQkJMHgwQworCisjZGVmaW5lCUhQUFJPUkVTRVRfT0ZGCQkJCTAKKyNkZWZpbmUgSFBQUk9SRVNFVF9PTgkJCQkxCisKKyNkZWZpbmUgSFBEU1BSRVNFVF9PRkYJCQkJMAorI2RlZmluZSBIUERTUFJFU0VUX09OCQkJCTEKKworI2RlZmluZSBIUEJMS1NFTF8wCQkJCTAKKyNkZWZpbmUgSFBCTEtTRUxfMQkJCQkxCisKKyNkZWZpbmUgSFBXQUlUU1RBVEVfMAkJCQkwCisjZGVmaW5lIEhQV0FJVFNUQVRFXzEJCQkJMQorCisjZGVmaW5lIEhQQklUTU9ERV8xNgkJCQkwCisjZGVmaW5lIEhQQklUTU9ERV84CQkJCTEKKworI2RlZmluZQlISURTUF9JTlRfUExBWV9VTkRFUgkJCTB4MDAKKyNkZWZpbmUJSElEU1BfSU5UX1JFQ09SRF9PVkVSCQkJMHgwMQorI2RlZmluZQlISURTUF9JTlBVVF9DTElQUElORwkJCTB4MDIKKyNkZWZpbmUJSElEU1BfTUlESV9JTl9PVkVSCQkJMHgxMAorI2RlZmluZQlISURTUF9NSURJX09WRVJSVU5fRVJSICAweDEzCisKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVRfRE9ORQkJCTB4MDI4QQorI2RlZmluZSBUSU1FX1BST19TWVNFWAkJCQkweDAwNDAKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVQJCQkJMHgwMDMyCisKKyNkZWZpbmUgREFSX0JVRkZfU0laRQkJCQkweDIwMDAKKworI2RlZmluZSBNSURRX0JVRkZfU0laRQkJCQkweDIwMAorI2RlZmluZSBEU1BRX0JVRkZfU0laRQkJCQkweDQwCisKKyNkZWZpbmUgRFNQUV9EQVRBX0JVRkYJCQkJMHg3MjYwCisKKyNkZWZpbmUgTU9QX1NZTlRICQkJCTB4MTAKKyNkZWZpbmUgTU9QX0VYVE9VVAkJCQkweDMyCisjZGVmaW5lIE1PUF9FWFRUSFJVCQkJCTB4MDIKKyNkZWZpbmUgTU9QX09VVE1BU0sJCQkJMHgwMQorCisjZGVmaW5lIE1JUF9FWFRJTgkJCQkweDAxCisjZGVmaW5lIE1JUF9TWU5USAkJCQkweDAwCisjZGVmaW5lIE1JUF9JTk1BU0sJCQkJMHgzMgorCisvKiBDbGFzc2ljIFNNQSBDb21tb24gRGF0YSAqLworI2RlZmluZSBTTUFfd0N1cnJQbGF5Qnl0ZXMJCQkweDAwMDAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkQnl0ZXMJCQkweDAwMDIKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbExlZnQJCQkweDAwMDQKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbFJpZ2h0CQkJMHgwMDA2CisjZGVmaW5lIFNNQV93Q3VyckluVm9sTGVmdAkJCTB4MDAwOAorI2RlZmluZSBTTUFfd0N1cnJJblZvbFJpZ2h0CQkJMHgwMDBhCisjZGVmaW5lIFNNQV93VXNlcl8zCQkJCTB4MDAwYworI2RlZmluZSBTTUFfd1VzZXJfNAkJCQkweDAwMGUKKyNkZWZpbmUgU01BX2R3VXNlcl81CQkJCTB4MDAxMAorI2RlZmluZSBTTUFfZHdVc2VyXzYJCQkJMHgwMDE0CisjZGVmaW5lIFNNQV93VXNlcl83CQkJCTB4MDAxOAorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0EJCQkJMHgwMDFhCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQgkJCQkweDAwMWMKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9DCQkJCTB4MDAxZQorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0QJCQkJMHgwMDIwCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRQkJCQkweDAwMjIKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9GCQkJCTB4MDAyNAorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0cJCQkJMHgwMDI2CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfSAkJCQkweDAwMjgKKyNkZWZpbmUgU01BX3dDdXJyRFNQU3RhdHVzRmxhZ3MJCQkweDAwMmEKKyNkZWZpbmUgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzCQkweDAwMmMKKyNkZWZpbmUgU01BX3dDdXJySW5wdXRUYWdCaXRzCQkJMHgwMDJlCisjZGVmaW5lIFNNQV93Q3VyckxlZnRQZWFrCQkJMHgwMDMwCisjZGVmaW5lIFNNQV93Q3VyclJpZ2h0UGVhawkJCTB4MDAzMgorI2RlZmluZSBTTUFfd0V4dERTUGJpdHMJCQkJMHgwMDM0CisjZGVmaW5lIFNNQV9iRXh0SG9zdGJpdHMJCQkweDAwMzYKKyNkZWZpbmUgU01BX2JCb2FyZExldmVsCQkJCTB4MDAzNworI2RlZmluZSBTTUFfYkluUG90UG9zUmlnaHQJCQkweDAwMzgKKyNkZWZpbmUgU01BX2JJblBvdFBvc0xlZnQJCQkweDAwMzkKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NSaWdodAkJCTB4MDAzYQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc0xlZnQJCQkweDAwM2IKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbExlZnQJCQkweDAwM2MKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbFJpZ2h0CQkJMHgwMDNlCisjZGVmaW5lIFNNQV9iVXNlcl8xMgkJCQkweDAwNDAKKyNkZWZpbmUgU01BX2JVc2VyXzEzCQkJCTB4MDA0MQorI2RlZmluZSBTTUFfd1VzZXJfMTQJCQkJMHgwMDQyCisjZGVmaW5lIFNNQV93VXNlcl8xNQkJCQkweDAwNDQKKyNkZWZpbmUgU01BX3dDYWxGcmVxQXRvRAkJCTB4MDA0NgorI2RlZmluZSBTTUFfd1VzZXJfMTYJCQkJMHgwMDQ4CisjZGVmaW5lIFNNQV93VXNlcl8xNwkJCQkweDAwNGEKKyNkZWZpbmUgU01BX19zaXplCQkJCTB4MDA0YworCisjZGVmaW5lIElOSVRDT0RFRklMRQkJInR1cnRsZWJlYWNoL21zbmRpbml0LmJpbiIKKyNkZWZpbmUgUEVSTUNPREVGSUxFCQkidHVydGxlYmVhY2gvbXNuZHBlcm0uYmluIgorI2RlZmluZSBMT05HTkFNRQkJIk11bHRpU291bmQgKENsYXNzaWMvTW9udGVyZXkvVGFoaXRpKSIKKworI2VuZGlmIC8qIF9fTVNORF9DTEFTU0lDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5YWE0YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgYnkgS3J6eXN6dG9mIEhlbHQKKyAqICBSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBNUFUtNDAxIGluIFVBUlQgbW9kZQorICoKKyAqICBNUFUtNDAxIHN1cHBvcnRzIFVBUlQgbW9kZSB3aGljaCBpcyBub3QgY2FwYWJsZSBnZW5lcmF0ZSB0cmFuc21pdAorICogIGludGVycnVwdHMgdGh1cyBvdXRwdXQgaXMgZG9uZSB2aWEgcG9sbGluZy4gQWxzbywgaWYgaXJxIDwgMCwgdGhlbgorICogIGlucHV0IGlzIGRvbmUgYWxzbyB2aWEgcG9sbGluZy4gRG8gbm90IGV4cGVjdCBnb29kIHBlcmZvcm1hbmNlLgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgorCisjaW5jbHVkZSAibXNuZC5oIgorCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX0lOUFVUCQkwCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX09VVFBVVAkJMQorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSCTIKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfT1VUUFVUX1RSSUdHRVIJMworCitzdHJ1Y3Qgc25kX21zbmRtaWRpIHsKKwlzdHJ1Y3Qgc25kX21zbmQgKmRldjsKKworCXVuc2lnbmVkIGxvbmcgbW9kZTsJCS8qIE1TTkRNSURJX01PREVfWFhYWCAqLworCisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtX2lucHV0OworCisJc3BpbmxvY2tfdCBpbnB1dF9sb2NrOworfTsKKworLyoKKyAqIGlucHV0L291dHB1dCBvcGVuL2Nsb3NlIC0gcHJvdGVjdGVkIGJ5IG9wZW5fbXV0ZXggaW4gcmF3bWlkaS5jCisgKi8KK3N0YXRpYyBpbnQgc25kX21zbmRtaWRpX2lucHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCXNuZF9wcmludGRkKCJzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbigpXG4iKTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCW1wdS0+c3Vic3RyZWFtX2lucHV0ID0gc3Vic3RyZWFtOworCisJc25kX21zbmRfZW5hYmxlX2lycShtcHUtPmRldik7CisKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5kZXYsIEhERVhfTUlESV9JTl9TVEFSVCk7CisJc2V0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaWRpX2lucHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+ZGV2LCBIREVYX01JRElfSU5fU1RPUCk7CisJY2xlYXJfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKKwltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IE5VTEw7CisJc25kX21zbmRfZGlzYWJsZV9pcnEobXB1LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfZHJvcChzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUpCit7CisJdTE2IHRhaWw7CisKKwl0YWlsID0gcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1RhaWwpOworCXdyaXRldyh0YWlsLCBtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCk7Cit9CisKKy8qCisgKiB0cmlnZ2VyIGlucHV0CisgKi8KK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJaW50IHVwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJc25kX3ByaW50ZGQoInNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyKCwgJWkpXG4iLCB1cCk7CisKKwltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCWlmICh1cCkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwKKwkJCQkgICAgICAmbXB1LT5tb2RlKSkKKwkJCXNuZF9tc25kbWlkaV9pbnB1dF9kcm9wKG1wdSk7CisJfSBlbHNlIHsKKwkJY2xlYXJfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIsICZtcHUtPm1vZGUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwlpZiAodXApCisJCXNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKG1wdSk7Cit9CisKK3ZvaWQgc25kX21zbmRtaWRpX2lucHV0X3JlYWQodm9pZCAqbXB1dikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSA9IG1wdXY7CisJdm9pZCAqcHdNSURRRGF0YSA9IG1wdS0+ZGV2LT5tYXBwZWRiYXNlICsgTUlEUV9EQVRBX0JVRkY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dUYWlsKSAhPQorCSAgICAgICByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkpIHsKKwkJdTE2IHdUbXAsIHZhbDsKKwkJdmFsID0gcmVhZHcocHdNSURRRGF0YSArIDIgKiByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkpOworCisJCQlpZiAodGVzdF9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwKKwkJCQkgICAgICZtcHUtPm1vZGUpKQorCQkJCXNuZF9yYXdtaWRpX3JlY2VpdmUobXB1LT5zdWJzdHJlYW1faW5wdXQsCisJCQkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKKworCQl3VG1wID0gcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpICsgMTsKKwkJaWYgKHdUbXAgPiByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193U2l6ZSkpCisJCQl3cml0ZXcoMCwgIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKKwkJZWxzZQorCQkJd3JpdGV3KHdUbXAsICBtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIHNuZF9tc25kbWlkaV9pbnB1dCA9IHsKKwkub3BlbiA9CQlzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZG1pZGlfaW5wdXRfY2xvc2UsCisJLnRyaWdnZXIgPQlzbmRfbXNuZG1pZGlfaW5wdXRfdHJpZ2dlciwKK307CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9mcmVlKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGkpCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1ID0gcm1pZGktPnByaXZhdGVfZGF0YTsKKwlrZnJlZShtcHUpOworfQorCitpbnQgc25kX21zbmRtaWRpX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2FyZCwgIk1TTkQtTUlESSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwltcHUgPSBrY2FsbG9jKDEsIHNpemVvZigqbXB1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1wdSA9PSBOVUxMKSB7CisJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBybWlkaSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltcHUtPmRldiA9IGNoaXA7CisJY2hpcC0+bXNuZG1pZGlfbXB1ID0gbXB1OworCXJtaWRpLT5wcml2YXRlX2RhdGEgPSBtcHU7CisJcm1pZGktPnByaXZhdGVfZnJlZSA9IHNuZF9tc25kbWlkaV9mcmVlOworCXNwaW5fbG9ja19pbml0KCZtcHUtPmlucHV0X2xvY2spOworCXN0cmNweShybWlkaS0+bmFtZSwgIk1TTkQgTUlESSIpOworCXNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorCQkJICAgICZzbmRfbXNuZG1pZGlfaW5wdXQpOworCXJtaWRpLT5pbmZvX2ZsYWdzIHw9IFNORFJWX1JBV01JRElfSU5GT19JTlBVVDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI2YWJkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCkBAIC0wLDAgKzEsMTIzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIExpbnV4IG11bHRpc291bmQgcGlubmFjbGUvZmlqaSBkcml2ZXIgZm9yIEFMU0EuCisgKgorICogMjAwMi8wNi8zMCBLYXJzdGVuIFdpZXNlOgorICoJZm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCB0byBidWlsZCBhIHBpbm5hY2xlIC8gZmlqaSBkcml2ZXIuCisgKgl0aGUgT1NTIHBhcmVudCBvZiB0aGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gYWxzbyBzdXBwb3J0CisgKgl0aGUgbXVsdGlzb3VuZCBjbGFzc2ljIHZpYSB0aGUgZmlsZSBtc25kX2NsYXNzaWMuYy4KKyAqCXRvIG1ha2UgaXQgZWFzaWVyIGZvciBzb21lIGJyYXZlIGhlYXJ0IHRvIGltcGxlbXQgY2xhc3NpYworICoJc3VwcG9ydCBpbiBhbHNhLCBpIGxlZnQgYWxsIHRoZSBNU05EX0NMQVNTSUMgdG9rZW5zIGluIHRoaXMgZmlsZS4KKyAqCWJ1dCBmb3Igbm93IHRoaXMgdW50ZXN0ZWQgJiB1bmRvbmUuCisgKgorICoKKyAqIHJpcHBlZCBmcm9tIGxpbnV4IGtlcm5lbCAyLjQuMTggYnkgS2Fyc3RlbiBXaWVzZS4KKyAqCisgKiB0aGUgZm9sbG93aW5nIGlzIGEgY29weSBvZiB0aGUgMi40LjE4IE9TUyBGUkVFIGZpbGUtaGVhZGluZyBjb21tZW50OgorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICogbXNuZF9waW5uYWNsZS5jIC8gbXNuZF9jbGFzc2ljLmMKKyAqCisgKiAtLSBJZiBNU05EX0NMQVNTSUMgaXMgZGVmaW5lZDoKKyAqCisgKiAgICAgLT4gZHJpdmVyIGZvciBUdXJ0bGUgQmVhY2ggQ2xhc3NpYy9Nb250ZXJleS9UYWhpdGkKKyAqCisgKiAtLSBFbHNlCisgKgorICogICAgIC0+IGRyaXZlciBmb3IgVHVydGxlIEJlYWNoIFBpbm5hY2xlL0ZpamkKKyAqCisgKiAxMi0zLTIwMDAgIE1vZGlmaWVkIElPIHBvcnQgdmFsaWRhdGlvbiAgU3RldmUgU3ljYW1vcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworIyBpZm5kZWYgX19hbHBoYV9fCisjICBkZWZpbmUgU0xPV0lPCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlICJtc25kLmgiCisjaWZkZWYgTVNORF9DTEFTU0lDCisjICBpbmNsdWRlICJtc25kX2NsYXNzaWMuaCIKKyMgIGRlZmluZSBMT0dOQU1FCQkJIm1zbmRfY2xhc3NpYyIKKyNlbHNlCisjICBpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmgiCisjICBkZWZpbmUgTE9HTkFNRQkJCSJzbmRfbXNuZF9waW5uYWNsZSIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc2V0X2RlZmF1bHRfYXVkaW9fcGFyYW1ldGVycyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSA9IERFRlNBTVBMRVNJWkU7CisJY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSA9IERFRlNBTVBMRVJBVEU7CisJY2hpcC0+cGxheV9jaGFubmVscyA9IERFRkNIQU5ORUxTOworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUgPSBERUZTQU1QTEVTSVpFOworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUgPSBERUZTQU1QTEVSQVRFOworCWNoaXAtPmNhcHR1cmVfY2hhbm5lbHMgPSBERUZDSEFOTkVMUzsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfZXZhbF9kc3BfbXNnKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTE2IHdNZXNzYWdlKQoreworCXN3aXRjaCAoSElCWVRFKHdNZXNzYWdlKSkgeworCWNhc2UgSElNVF9QTEFZX0RPTkU6IHsKKwkJaWYgKGNoaXAtPmJhbmtzUGxheWVkIDwgMykKKwkJCXNuZF9wcmludGRkKCIlMDhYOiBISU1UX1BMQVlfRE9ORTogJWlcbiIsCisJCQkJKHVuc2lnbmVkKWppZmZpZXMsIExPQllURSh3TWVzc2FnZSkpOworCisJCWlmIChjaGlwLT5sYXN0X3BsYXliYW5rID09IExPQllURSh3TWVzc2FnZSkpIHsKKwkJCXNuZF9wcmludGRkKCJjaGlwLmxhc3RfcGxheWJhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKVxuIik7CisJCQlicmVhazsKKwkJfQorCQljaGlwLT5iYW5rc1BsYXllZCsrOworCisJCWlmICh0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpCisJCQlzbmRfbXNuZF9EQVBRKGNoaXAsIDApOworCisJCWNoaXAtPmxhc3RfcGxheWJhbmsgPSBMT0JZVEUod01lc3NhZ2UpOworCQljaGlwLT5wbGF5RE1BUG9zICs9IGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzOworCQlpZiAoY2hpcC0+cGxheURNQVBvcyA+IGNoaXAtPnBsYXlMaW1pdCkKKwkJCWNoaXAtPnBsYXlETUFQb3MgPSAwOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgSElNVF9SRUNPUkRfRE9ORToKKwkJaWYgKGNoaXAtPmxhc3RfcmVjYmFuayA9PSBMT0JZVEUod01lc3NhZ2UpKQorCQkJYnJlYWs7CisJCWNoaXAtPmxhc3RfcmVjYmFuayA9IExPQllURSh3TWVzc2FnZSk7CisJCWNoaXAtPmNhcHR1cmVETUFQb3MgKz0gY2hpcC0+Y2FwdHVyZVBlcmlvZEJ5dGVzOworCQlpZiAoY2hpcC0+Y2FwdHVyZURNQVBvcyA+IChjaGlwLT5jYXB0dXJlTGltaXQpKQorCQkJY2hpcC0+Y2FwdHVyZURNQVBvcyA9IDA7CisKKwkJaWYgKHRlc3RfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKSkKKwkJCXNuZF9tc25kX0RBUlEoY2hpcCwgY2hpcC0+bGFzdF9yZWNiYW5rKTsKKworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwkJYnJlYWs7CisKKwljYXNlIEhJTVRfRFNQOgorCQlzd2l0Y2ggKExPQllURSh3TWVzc2FnZSkpIHsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJCWNhc2UgSElEU1BfUExBWV9VTkRFUjoKKyNlbmRpZgorCQljYXNlIEhJRFNQX0lOVF9QTEFZX1VOREVSOgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBQbGF5IHVuZGVyZmxvdyAlaVxuIiwKKwkJCQljaGlwLT5iYW5rc1BsYXllZCk7CisJCQlpZiAoY2hpcC0+YmFua3NQbGF5ZWQgPiAyKQorCQkJCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIEhJRFNQX0lOVF9SRUNPUkRfT1ZFUjoKKwkJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogUmVjb3JkIG92ZXJmbG93XG4iKTsKKwkJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRQorCQkJCSAgICI6IERTUCBtZXNzYWdlICVkIDB4JTAyeFxuIiwKKwkJCQkgICBMT0JZVEUod01lc3NhZ2UpLCBMT0JZVEUod01lc3NhZ2UpKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBISU1UX01JRElfSU5fVUNIQVI6CisJCWlmIChjaGlwLT5tc25kbWlkaV9tcHUpCisJCQlzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZChjaGlwLT5tc25kbWlkaV9tcHUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogSElNVCBtZXNzYWdlICVkIDB4JTAyeFxuIiwKKwkJCSAgIEhJQllURSh3TWVzc2FnZSksIEhJQllURSh3TWVzc2FnZSkpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXNuZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGRldl9pZDsKKwl2b2lkICpwd0RTUFFEYXRhID0gY2hpcC0+bWFwcGVkYmFzZSArIERTUFFfREFUQV9CVUZGOworCisJLyogU2VuZCBhY2sgdG8gRFNQICovCisJLyogaW5iKGNoaXAtPmlvICsgSFBfUlhMKTsgKi8KKworCS8qIEV2YWx1YXRlIHF1ZXVlZCBEU1AgbWVzc2FnZXMgKi8KKwl3aGlsZSAocmVhZHcoY2hpcC0+RFNQUSArIEpRU193VGFpbCkgIT0gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkpIHsKKwkJdTE2IHdUbXA7CisKKwkJc25kX21zbmRfZXZhbF9kc3BfbXNnKGNoaXAsCisJCQlyZWFkdyhwd0RTUFFEYXRhICsgMiAqIHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpKSk7CisKKwkJd1RtcCA9IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpICsgMTsKKwkJaWYgKHdUbXAgPiByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dTaXplKSkKKwkJCXdyaXRldygwLCBjaGlwLT5EU1BRICsgSlFTX3dIZWFkKTsKKwkJZWxzZQorCQkJd3JpdGV3KHdUbXAsIGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpOworCX0KKwkvKiBTZW5kIGFjayB0byBEU1AgKi8KKwlpbmIoY2hpcC0+aW8gKyBIUF9SWEwpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kX3Jlc2V0X2RzcChsb25nIGlvLCB1bnNpZ25lZCBjaGFyICppbmZvKQoreworCWludCB0aW1lb3V0ID0gMTAwOworCisJb3V0YihIUERTUFJFU0VUX09OLCBpbyArIEhQX0RTUFIpOworCW1zbGVlcCgxKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGluZm8pCisJCSppbmZvID0gaW5iKGlvICsgSFBfSU5GTyk7CisjZW5kaWYKKwlvdXRiKEhQRFNQUkVTRVRfT0ZGLCBpbyArIEhQX0RTUFIpOworCW1zbGVlcCgxKTsKKwl3aGlsZSAodGltZW91dC0tID4gMCkgeworCQlpZiAoaW5iKGlvICsgSFBfQ1ZSKSA9PSBIUF9DVlJfREVGKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgxKTsKKwl9CisJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENhbm5vdCByZXNldCBEU1BcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgY2hhciBpbmZvOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwljaGFyICp4diwgKnJldiA9IE5VTEw7CisJY2hhciAqcGluID0gIlRCIFBpbm5hY2xlIiwgKmZpamkgPSAiVEIgRmlqaSI7CisJY2hhciAqcGluZmlqaSA9ICJUQiBQaW5uYWNsZS9GaWppIjsKKyNlbmRpZgorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPLCAicHJvYmluZyIpKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzbmRfbXNuZF9yZXNldF9kc3AoY2hpcC0+aW8sICZpbmZvKSA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJDbGFzc2ljL1RhaGl0aS9Nb250ZXJleSIpOworCXN0cmNweShjYXJkLT5sb25nbmFtZSwgIlR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIik7CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6ICVzLCAiCisJICAgICAgICJJL08gMHglbHgtMHglbHgsIElSUSAlZCwgbWVtb3J5IG1hcHBlZCB0byAweCVsWC0weCVsWFxuIiwKKwkgICAgICAgY2FyZC0+c2hvcnRuYW1lLAorCSAgICAgICBjaGlwLT5pbywgY2hpcC0+aW8gKyBEU1BfTlVNSU8gLSAxLAorCSAgICAgICBjaGlwLT5pcnEsCisJICAgICAgIGNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyAweDdmZmYpOworI2Vsc2UKKwlzd2l0Y2ggKGluZm8gPj4gNCkgeworCWNhc2UgMHhmOgorCQl4diA9ICI8PSAxLjE1IjsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCXh2ID0gIjEuMTgvMS4yIjsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCXh2ID0gIjEuMyI7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQl4diA9ICIxLjQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl4diA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvICYgMHg3KSB7CisJY2FzZSAweDA6CisJCXJldiA9ICJJIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCXJldiA9ICJGIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCXJldiA9ICJHIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXJldiA9ICJIIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCXJldiA9ICJFIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQlyZXYgPSAiQyI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJcmV2ID0gIkQiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCXJldiA9ICJBLUIgKEZpamkpIG9yIEEtRSAoUGlubmFjbGUpIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluZmlqaSk7CisJCWJyZWFrOworCX0KKwlzdHJjcHkoY2FyZC0+bG9uZ25hbWUsICJUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCBQaW5uYWNsZSIpOworCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiAlcyByZXZpc2lvbiAlcywgWGlsaW54IHZlcnNpb24gJXMsICIKKwkgICAgICAgIkkvTyAweCVseC0weCVseCwgSVJRICVkLCBtZW1vcnkgbWFwcGVkIHRvIDB4JWxYLTB4JWxYXG4iLAorCSAgICAgICBjYXJkLT5zaG9ydG5hbWUsCisJICAgICAgIHJldiwgeHYsCisJICAgICAgIGNoaXAtPmlvLCBjaGlwLT5pbyArIERTUF9OVU1JTyAtIDEsCisJICAgICAgIGNoaXAtPmlycSwKKwkgICAgICAgY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIDB4N2ZmZik7CisjZW5kaWYKKworCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2luaXRfc21hKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlzdGF0aWMgaW50IGluaXR0ZWQ7CisJdTE2IG1hc3RWb2xMZWZ0LCBtYXN0Vm9sUmlnaHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCW91dGIoY2hpcC0+bWVtaWQsIGNoaXAtPmlvICsgSFBfTUVNTSk7CisjZW5kaWYKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJLyogTW90b3JvbGEgNTZrIHNoYXJlZCBtZW1vcnkgYmFzZSAqLworCWNoaXAtPlNNQSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBTTUFfU1RSVUNUX1NUQVJUOworCisJaWYgKGluaXR0ZWQpIHsKKwkJbWFzdFZvbExlZnQgPSByZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJCW1hc3RWb2xSaWdodCA9IHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCk7CisJfSBlbHNlCisJCW1hc3RWb2xMZWZ0ID0gbWFzdFZvbFJpZ2h0ID0gMDsKKwltZW1zZXRfaW8oY2hpcC0+bWFwcGVkYmFzZSwgMCwgMHg4MDAwKTsKKworCS8qIENyaXRpY2FsIHNlY3Rpb246IGJhbmsgMSBhY2Nlc3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoSFBCTEtTRUxfMSwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwltZW1zZXRfaW8oY2hpcC0+bWFwcGVkYmFzZSwgMCwgMHg4MDAwKTsKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJLyogRGlnaXRhbCBhdWRpbyBwbGF5IHF1ZXVlICovCisJY2hpcC0+REFQUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUFEsIERBUFFfREFUQV9CVUZGLCBEQVBRX0JVRkZfU0laRSk7CisKKwkvKiBEaWdpdGFsIGF1ZGlvIHJlY29yZCBxdWV1ZSAqLworCWNoaXAtPkRBUlEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EQVJRLCBEQVJRX0RBVEFfQlVGRiwgREFSUV9CVUZGX1NJWkUpOworCisJLyogTUlESSBvdXQgcXVldWUgKi8KKwljaGlwLT5NT0RRID0gY2hpcC0+bWFwcGVkYmFzZSArIE1PRFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+TU9EUSwgTU9EUV9EQVRBX0JVRkYsIE1PRFFfQlVGRl9TSVpFKTsKKworCS8qIE1JREkgaW4gcXVldWUgKi8KKwljaGlwLT5NSURRID0gY2hpcC0+bWFwcGVkYmFzZSArIE1JRFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+TUlEUSwgTUlEUV9EQVRBX0JVRkYsIE1JRFFfQlVGRl9TSVpFKTsKKworCS8qIERTUCAtPiBob3N0IG1lc3NhZ2UgcXVldWUgKi8KKwljaGlwLT5EU1BRID0gY2hpcC0+bWFwcGVkYmFzZSArIERTUFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+RFNQUSwgRFNQUV9EQVRBX0JVRkYsIERTUFFfQlVGRl9TSVpFKTsKKworCS8qIFNldHVwIHNvbWUgRFNQIHZhbHVlcyAqLworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwl3cml0ZXcoMSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheUZvcm1hdCk7CisJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlTYW1wbGVTaXplKTsKKwl3cml0ZXcoY2hpcC0+cGxheV9jaGFubmVscywgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheUNoYW5uZWxzKTsKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheVNhbXBsZVJhdGUpOworI2VuZGlmCisJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIGNoaXAtPlNNQSArIFNNQV93Q2FsRnJlcUF0b0QpOworCXdyaXRldyhtYXN0Vm9sTGVmdCwgY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpOworCXdyaXRldyhtYXN0Vm9sUmlnaHQsIGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCXdyaXRlbCgweDAwMDEwMDAwLCBjaGlwLT5TTUEgKyBTTUFfZHdDdXJyUGxheVBpdGNoKTsKKwl3cml0ZWwoMHgwMDAwMDAwMSwgY2hpcC0+U01BICsgU01BX2R3Q3VyclBsYXlSYXRlKTsKKyNlbmRpZgorCXdyaXRldygweDMwMywgY2hpcC0+U01BICsgU01BX3dDdXJySW5wdXRUYWdCaXRzKTsKKworCWluaXR0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB1cGxvYWRfZHNwX2NvZGUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmluaXRfZncgPSBOVUxMLCAqcGVybV9mdyA9IE5VTEw7CisJaW50IGVycjsKKworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmluaXRfZncsIElOSVRDT0RFRklMRSwgY2FyZC0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBFcnJvciBsb2FkaW5nICIgSU5JVENPREVGSUxFKTsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcGVybV9mdywgUEVSTUNPREVGSUxFLCBjYXJkLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEVycm9yIGxvYWRpbmcgIiBQRVJNQ09ERUZJTEUpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJbWVtY3B5X3RvaW8oY2hpcC0+bWFwcGVkYmFzZSwgcGVybV9mdy0+ZGF0YSwgcGVybV9mdy0+c2l6ZSk7CisJaWYgKHNuZF9tc25kX3VwbG9hZF9ob3N0KGNoaXAsIGluaXRfZnctPmRhdGEsIGluaXRfZnctPnNpemUpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogRXJyb3IgdXBsb2FkaW5nIHRvIERTUFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IERTUCBmaXJtd2FyZSB1cGxvYWRlZFxuIik7CisJZXJyID0gMDsKKworY2xlYW51cDoKKwlyZWxlYXNlX2Zpcm13YXJlKHBlcm1fZncpOworY2xlYW51cDE6CisJcmVsZWFzZV9maXJtd2FyZShpbml0X2Z3KTsKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCitzdGF0aWMgdm9pZCByZXNldF9wcm90ZXVzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlvdXRiKEhQUFJPUkVTRVRfT04sIGNoaXAtPmlvICsgSFBfUFJPUik7CisJbXNsZWVwKFRJTUVfUFJPX1JFU0VUKTsKKwlvdXRiKEhQUFJPUkVTRVRfT0ZGLCBjaGlwLT5pbyArIEhQX1BST1IpOworCW1zbGVlcChUSU1FX1BST19SRVNFVF9ET05FKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNuZF9tc25kX2luaXRpYWxpemUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyLCB0aW1lb3V0OworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJb3V0YihIUFdBSVRTVEFURV8wLCBjaGlwLT5pbyArIEhQX1dBSVQpOworCW91dGIoSFBCSVRNT0RFXzE2LCBjaGlwLT5pbyArIEhQX0JJVE0pOworCisJcmVzZXRfcHJvdGV1cyhjaGlwKTsKKyNlbmRpZgorCWVyciA9IHNuZF9tc25kX2luaXRfc21hKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBDYW5ub3QgaW5pdGlhbGl6ZSBTTUFcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9tc25kX3Jlc2V0X2RzcChjaGlwLT5pbywgTlVMTCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB1cGxvYWRfZHNwX2NvZGUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IENhbm5vdCB1cGxvYWQgRFNQIGNvZGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXRpbWVvdXQgPSAyMDA7CisKKwl3aGlsZSAocmVhZHcoY2hpcC0+bWFwcGVkYmFzZSkpIHsKKwkJbXNsZWVwKDEpOworCQlpZiAoIXRpbWVvdXQtLSkgeworCQkJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IERTUCByZXNldCB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJc25kX21zbmRtaXhfc2V0dXAoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgcnY7CisKKwlpZiAodGVzdF9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncykgfHwgKytjaGlwLT5ucmVzZXRzID4gMTApCisJCXJldHVybiAwOworCisJc2V0X2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9kc3BfaGFsdChjaGlwLCBOVUxMKTsJLyogVW5jb25kaXRpb25hbGx5IGhhbHQgKi8KKworCXJ2ID0gc25kX21zbmRfaW5pdGlhbGl6ZShjYXJkKTsKKwlpZiAocnYpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBEU1AgcmVzZXQgZmFpbGVkXG4iKTsKKwlzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoY2hpcCwgMCk7CisJY2xlYXJfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9jaGlwX2ZyZWUoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfc2VuZF9kc3BfY21kX2NoayhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHU4IGNtZCkKK3sKKwlpZiAoc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIGNtZCkgPT0gMCkKKwkJcmV0dXJuIDA7CisJc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoY2hpcC0+Y2FyZCk7CisJcmV0dXJuIHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBjbWQpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTE2IHNyYXRlKQoreworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKCVpKVxuIiwgc3JhdGUpOworCXdyaXRldyhzcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDYWxGcmVxQXRvRCk7CisJaWYgKGNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPT0gMCkKKwkJd3JpdGV3KHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncykKKwkJICAgICAgIHwgMHgwMDAxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpOworCWVsc2UKKwkJd3JpdGV3KHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncykKKwkJICAgICAgICYgfjB4MDAwMSwgY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKTsKKwlpZiAoc25kX21zbmRfc2VuZF93b3JkKGNoaXAsIDAsIDAsIEhERVhBUl9DQUxfQV9UT19EKSA9PSAwICYmCisJICAgIHNuZF9tc25kX3NlbmRfZHNwX2NtZF9jaGsoY2hpcCwgSERFWF9BVVhfUkVRKSA9PSAwKSB7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDMzMykpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IEFEQyBjYWxpYnJhdGlvbiBmYWlsZWRcbiIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogQUxTQSBjYWxsYmFjayBmdW5jdGlvbiwgY2FsbGVkIHdoZW4gYXR0ZW1wdGluZyB0byBvcGVuIHRoZSBNSURJIGRldmljZS4KKyAqLworc3RhdGljIGludCBzbmRfbXNuZF9tcHU0MDFfb3BlbihzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1KQoreworCXNuZF9tc25kX2VuYWJsZV9pcnEobXB1LT5wcml2YXRlX2RhdGEpOworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPnByaXZhdGVfZGF0YSwgSERFWF9NSURJX0lOX1NUQVJUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfbXB1NDAxX2Nsb3NlKHN0cnVjdCBzbmRfbXB1NDAxICptcHUpCit7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+cHJpdmF0ZV9kYXRhLCBIREVYX01JRElfSU5fU1RPUCk7CisJc25kX21zbmRfZGlzYWJsZV9pcnEobXB1LT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgbG9uZyBtcHVfaW9bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBtcHVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9hdHRhY2goc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0geworCQkuZGV2X2ZyZWUgPSAgICAgIHNuZF9tc25kX2Rldl9mcmVlLAorCQl9OworCisJZXJyID0gcmVxdWVzdF9pcnEoY2hpcC0+aXJxLCBzbmRfbXNuZF9pbnRlcnJ1cHQsIDAsIGNhcmQtPnNob3J0bmFtZSwKKwkJCSAgY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ291bGRuJ3QgZ3JhYiBJUlEgJWRcbiIsIGNoaXAtPmlycSk7CisJCXJldHVybiBlcnI7CisJfQorCXJlcXVlc3RfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8sIGNhcmQtPnNob3J0bmFtZSk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSwgY2FyZC0+c2hvcnRuYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogdW5hYmxlIHRvIGdyYWIgbWVtb3J5IHJlZ2lvbiAweCVseC0weCVseFxuIiwKKwkJCWNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyBCVUZGU0laRSAtIDEpOworCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+bWFwcGVkYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShjaGlwLT5iYXNlLCAweDgwMDApOworCWlmICghY2hpcC0+bWFwcGVkYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogdW5hYmxlIHRvIG1hcCBtZW1vcnkgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIEJVRkZTSVpFIC0gMSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWVyciA9IHNuZF9tc25kX2RzcF9mdWxsX3Jlc2V0KGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKworCS8qIFJlZ2lzdGVyIGRldmljZSAqLworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJZXJyID0gc25kX21zbmRfcGNtKGNhcmQsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IGVycm9yIGNyZWF0aW5nIG5ldyBQQ00gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisJZXJyID0gc25kX21zbmRtaXhfbmV3KGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IGVycm9yIGNyZWF0aW5nIG5ldyBNaXhlciBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKworCWlmIChtcHVfaW9bMF0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXN0cnVjdCBzbmRfbXB1NDAxICptcHU7CisKKwkJZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAorCQkJCQkgIG1wdV9pb1swXSwKKwkJCQkJICBNUFU0MDFfTU9ERV9JTlBVVCB8CisJCQkJCSAgTVBVNDAxX01PREVfT1VUUFVULAorCQkJCQkgIG1wdV9pcnFbMF0sIElSUUZfRElTQUJMRUQsCisJCQkJCSAgJmNoaXAtPnJtaWRpKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkJIjogZXJyb3IgY3JlYXRpbmcgbmV3IE1pZGkgZGV2aWNlXG4iKTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCQl9CisJCW1wdSA9IGNoaXAtPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwkJbXB1LT5vcGVuX2lucHV0ID0gc25kX21zbmRfbXB1NDAxX29wZW47CisJCW1wdS0+Y2xvc2VfaW5wdXQgPSBzbmRfbXNuZF9tcHU0MDFfY2xvc2U7CisJCW1wdS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwl9CisKKwlkaXNhYmxlX2lycShjaGlwLT5pcnEpOworCXNuZF9tc25kX2NhbGlicmF0ZV9hZGMoY2hpcCwgY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSk7CisJc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKGNoaXAsIDApOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNlX3JlZ2lvbjoKKwlpZiAoY2hpcC0+bWFwcGVkYmFzZSkKKwkJaW91bm1hcChjaGlwLT5tYXBwZWRiYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUpOworCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX21zbmRfdW5sb2FkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlpb3VubWFwKGNoaXAtPm1hcHBlZGJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSk7CisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworfQorCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCisvKiBQaW5uYWNsZS9GaWppIExvZ2ljYWwgRGV2aWNlIENvbmZpZ3VyYXRpb24gKi8KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnKGludCBjZmcsIGludCByZWcsIGludCB2YWx1ZSkKK3sKKwlvdXRiKHJlZywgY2ZnKTsKKwlvdXRiKHZhbHVlLCBjZmcgKyAxKTsKKwlpZiAodmFsdWUgIT0gaW5iKGNmZyArIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IHNuZF9tc25kX3dyaXRlX2NmZzogSS9PIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaW8wKGludCBjZmcsIGludCBudW0sIHUxNiBpbykKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFSEksIEhJQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzBfQkFTRUxPLCBMT0JZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pbzEoaW50IGNmZywgaW50IG51bSwgdTE2IGlvKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VISSwgSElCWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMV9CQVNFTE8sIExPQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lycShpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaXJxKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSVJRX05VTUJFUiwgTE9CWVRFKGlycSkpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JUlFfVFlQRSwgSVJRVFlQRV9FREdFKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19tZW0oaW50IGNmZywgaW50IG51bSwgaW50IG1lbSkKK3sKKwl1MTYgd21lbTsKKworCW1lbSA+Pj0gODsKKwl3bWVtID0gKHUxNikobWVtICYgMHhmZmYpOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQkFTRUhJLCBISUJZVEUod21lbSkpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFTE8sIExPQllURSh3bWVtKSkpCisJCXJldHVybiAtRUlPOworCWlmICh3bWVtICYmIHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQ09OVFJPTCwKKwkJCQkgICAgICAgTUVNVFlQRV9ISUFERFIgfCBNRU1UWVBFXzE2QklUKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2FjdGl2YXRlX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSkKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0FDVElWQVRFLCBMRF9BQ1RJVkFURSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8wLAorCQkJCQkJdTE2IGlvMSwgdTE2IGlycSwgaW50IG1lbSkKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaW8wKGNmZywgbnVtLCBpbzApKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lvMShjZmcsIG51bSwgaW8xKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pcnEoY2ZnLCBudW0sIGlycSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfbWVtKGNmZywgbnVtLCBtZW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfYWN0aXZhdGVfbG9naWNhbChjZmcsIG51bSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9waW5uYWNsZV9jZmdfcmVzZXQoaW50IGNmZykKK3sKKwlpbnQgaTsKKworCS8qIFJlc2V0IGRldmljZXMgaWYgdG9sZCB0byAqLworCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBSZXNldHRpbmcgYWxsIGRldmljZXNcbiIpOworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmcsIGksIDAsIDAsIDAsIDApKQorCQkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgbXNuZF9waW5uYWNsZSBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIG1zbmRfcGlubmFjbGUgc291bmRjYXJkLiIpOworCitzdGF0aWMgbG9uZyBpb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKK3N0YXRpYyBsb25nIG1lbVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisKK3N0YXRpYyBsb25nIGNmZ1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisvKiBFeHRyYSBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gKERlZmF1bHQ6IERpc2FibGUpICovCitzdGF0aWMgbG9uZyBpZGVfaW8wW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBsb25nIGlkZV9pbzFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpZGVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworCitzdGF0aWMgbG9uZyBqb3lzdGlja19pb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisvKiBJZiB3ZSBoYXZlIHRoZSBkaWdpdGFsIGRhdWdoZXJib2FyZC4uLiAqLworc3RhdGljIGludCBkaWdpdGFsW1NORFJWX0NBUkRTXTsKKworLyogRXh0cmEgUGVyaXBoZXJhbCBDb25maWd1cmF0aW9uICovCitzdGF0aWMgaW50IHJlc2V0W1NORFJWX0NBUkRTXTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHdyaXRlX25kZWxheVtTTkRSVl9DQVJEU10gPSB7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gMSB9OworCitzdGF0aWMgaW50IGNhbGlicmF0ZV9zaWduYWw7CisKKyNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IGlzYXBucFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXNhcG5wLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXNhcG5wLCAiSVNBIFBuUCBkZXRlY3Rpb24gZm9yIHNwZWNpZmllZCBzb3VuZGNhcmQuIik7CisjZGVmaW5lIGhhc19pc2FwbnAoeCkgaXNhcG5wW3hdCisjZWxzZQorI2RlZmluZSBoYXNfaXNhcG5wKHgpIDAKKyNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIFdpZXNlIDxhbm5hYmVsbGVzZ2FyZGVuQHlhaG9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUdXJ0bGUgQmVhY2ggIiBMT05HTkFNRSAiIExpbnV4IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKElOSVRDT0RFRklMRSk7CitNT0RVTEVfRklSTVdBUkUoUEVSTUNPREVGSUxFKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGlvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJTyBwb3J0ICMiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobWVtLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheSh3cml0ZV9uZGVsYXksIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2FsaWJyYXRlX3NpZ25hbCwgaW50LCBTX0lSVUdPKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCittb2R1bGVfcGFyYW1fYXJyYXkoZGlnaXRhbCwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShjZmcsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KHJlc2V0LCBpbnQsIDAsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pbywgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZGVfaW8wLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZGVfaW8xLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZGVfaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGpveXN0aWNrX2lvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKKyNlbmRpZgorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaW9baV0gPT0gU05EUlZfQVVUT19QT1JUKQorCQlyZXR1cm4gMDsKKworCWlmIChpcnFbaV0gPT0gU05EUlZfQVVUT19QT1JUIHx8IG1lbVtpXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IGlvLCBpcnEgYW5kIG1lbSBtdXN0IGJlIHNldFxuIik7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWlmICghKGlvW2ldID09IDB4MjkwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNjAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI1MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjQwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMzAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIyMCB8fAorCSAgICAgIGlvW2ldID09IDB4MjEwIHx8CisJICAgICAgaW9baV0gPT0gMHgzZTApKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFwiaW9cIiAtIERTUCBJL08gYmFzZSBtdXN0IGJlIHNldCAiCisJCQkiIHRvIDB4MjEwLCAweDIyMCwgMHgyMzAsIDB4MjQwLCAweDI1MCwgMHgyNjAsIDB4MjkwLCAiCisJCQkib3IgMHgzRTBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZWxzZQorCWlmIChpb1tpXSA8IDB4MTAwIHx8IGlvW2ldID4gMHgzZTAgfHwgKGlvW2ldICUgMHgxMCkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogXCJpb1wiIC0gRFNQIEkvTyBiYXNlIG11c3Qgd2l0aGluIHRoZSByYW5nZSAweDEwMCAiCisJCQkidG8gMHgzRTAgYW5kIG11c3QgYmUgZXZlbmx5IGRpdmlzaWJsZSBieSAweDEwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJaWYgKCEoaXJxW2ldID09IDUgfHwKKwkgICAgICBpcnFbaV0gPT0gNyB8fAorCSAgICAgIGlycVtpXSA9PSA5IHx8CisJICAgICAgaXJxW2ldID09IDEwIHx8CisJICAgICAgaXJxW2ldID09IDExIHx8CisJICAgICAgaXJxW2ldID09IDEyKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogXCJpcnFcIiAtIG11c3QgYmUgc2V0IHRvIDUsIDcsIDksIDEwLCAxMSBvciAxMlxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKG1lbVtpXSA9PSAweGIwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4YzgwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhkMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGQ4MDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZTAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhlODAwMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogXCJtZW1cIiAtIG11c3QgYmUgc2V0IHRvICIKKwkJICAgICAgICIweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLCAweGUwMDAwIG9yICIKKwkJICAgICAgICIweGU4MDAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChjZmdbaV0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBBc3N1bWluZyBQblAgbW9kZVxuIik7CisJfSBlbHNlIGlmIChjZmdbaV0gIT0gMHgyNTAgJiYgY2ZnW2ldICE9IDB4MjYwICYmIGNmZ1tpXSAhPSAweDI3MCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJCSI6IENvbmZpZyBwb3J0IG11c3QgYmUgMHgyNTAsIDB4MjYwIG9yIDB4MjcwICIKKwkJCSIob3IgdW5zcGVjaWZpZWQgZm9yIFBuUCBtb2RlKVxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXA7CisKKwlpZiAoaGFzX2lzYXBucChpZHgpIHx8IGNmZ1tpZHhdID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogQXNzdW1pbmcgUG5QIG1vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9tc25kKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKKwljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPmNhcmQgPSBjYXJkOworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJc3dpdGNoIChpcnFbaWR4XSkgeworCWNhc2UgNToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV81OyBicmVhazsKKwljYXNlIDc6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfNzsgYnJlYWs7CisJY2FzZSA5OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzk7IGJyZWFrOworCWNhc2UgMTA6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfMTA7IGJyZWFrOworCWNhc2UgMTE6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfMTE7IGJyZWFrOworCWNhc2UgMTI6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfMTI7IGJyZWFrOworCX0KKworCXN3aXRjaCAobWVtW2lkeF0pIHsKKwljYXNlIDB4YjAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fQjAwMDsgYnJlYWs7CisJY2FzZSAweGM4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0M4MDA7IGJyZWFrOworCWNhc2UgMHhkMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9EMDAwOyBicmVhazsKKwljYXNlIDB4ZDgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRDgwMDsgYnJlYWs7CisJY2FzZSAweGUwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0UwMDA7IGJyZWFrOworCWNhc2UgMHhlODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9FODAwOyBicmVhazsKKwl9CisjZWxzZQorCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBOb24tUG5QIG1vZGU6IGNvbmZpZ3VyaW5nIGF0IHBvcnQgMHglbHhcbiIsCisJCQljZmdbaWR4XSk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGNmZ1tpZHhdLCAyLCAiUGlubmFjbGUvRmlqaSBDb25maWciKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDb25maWcgcG9ydCAweCVseCBjb25mbGljdFxuIiwKKwkJCSAgIGNmZ1tpZHhdKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChyZXNldFtpZHhdKQorCQlpZiAoc25kX21zbmRfcGlubmFjbGVfY2ZnX3Jlc2V0KGNmZ1tpZHhdKSkgeworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gY2ZnX2Vycm9yOworCQl9CisKKwkvKiBEU1AgKi8KKwllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMCwKKwkJCQkJIGlvW2lkeF0sIDAsCisJCQkJCSBpcnFbaWR4XSwgbWVtW2lkeF0pOworCisJaWYgKGVycikKKwkJZ290byBjZmdfZXJyb3I7CisKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBQaW5uYWNsZSBzcGVjaWZpYyAqLworCisJLyogTVBVICovCisJaWYgKG1wdV9pb1tpZHhdICE9IFNORFJWX0FVVE9fUE9SVAorCSAgICAmJiBtcHVfaXJxW2lkeF0gIT0gU05EUlZfQVVUT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCSAgICAgICAiOiBDb25maWd1cmluZyBNUFUgdG8gSS9PIDB4JWx4IElSUSAlZFxuIiwKKwkJICAgICAgIG1wdV9pb1tpZHhdLCBtcHVfaXJxW2lkeF0pOworCQllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMSwKKwkJCQkJCSBtcHVfaW9baWR4XSwgMCwKKwkJCQkJCSBtcHVfaXJxW2lkeF0sIDApOworCisJCWlmIChlcnIpCisJCQlnb3RvIGNmZ19lcnJvcjsKKwl9CisKKwkvKiBJREUgKi8KKwlpZiAoaWRlX2lvMFtpZHhdICE9IFNORFJWX0FVVE9fUE9SVAorCSAgICAmJiBpZGVfaW8xW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIGlkZV9pcnFbaWR4XSAhPSBTTkRSVl9BVVRPX0lSUSkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIElERSB0byBJL08gMHglbHgsIDB4JWx4IElSUSAlZFxuIiwKKwkJICAgICAgIGlkZV9pbzBbaWR4XSwgaWRlX2lvMVtpZHhdLCBpZGVfaXJxW2lkeF0pOworCQllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMiwKKwkJCQkJCSBpZGVfaW8wW2lkeF0sIGlkZV9pbzFbaWR4XSwKKwkJCQkJCSBpZGVfaXJxW2lkeF0sIDApOworCisJCWlmIChlcnIpCisJCQlnb3RvIGNmZ19lcnJvcjsKKwl9CisKKwkvKiBKb3lzdGljayAqLworCWlmIChqb3lzdGlja19pb1tpZHhdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIGpveXN0aWNrIHRvIEkvTyAweCVseFxuIiwKKwkJICAgICAgIGpveXN0aWNrX2lvW2lkeF0pOworCQllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMywKKwkJCQkJCSBqb3lzdGlja19pb1tpZHhdLCAwLAorCQkJCQkJIDAsIDApOworCisJCWlmIChlcnIpCisJCQlnb3RvIGNmZ19lcnJvcjsKKwl9CisJcmVsZWFzZV9yZWdpb24oY2ZnW2lkeF0sIDIpOworCisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKGNoaXApOworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWNoaXAtPnR5cGUgPSBtc25kQ2xhc3NpYzsKKyNlbHNlCisJY2hpcC0+dHlwZSA9IG1zbmRQaW5uYWNsZTsKKyNlbmRpZgorCWNoaXAtPmlvID0gaW9baWR4XTsKKwljaGlwLT5pcnEgPSBpcnFbaWR4XTsKKwljaGlwLT5iYXNlID0gbWVtW2lkeF07CisKKwljaGlwLT5jYWxpYnJhdGVfc2lnbmFsID0gY2FsaWJyYXRlX3NpZ25hbCA/IDEgOiAwOworCWNoaXAtPnJlY3NyYyA9IDA7CisJY2hpcC0+ZHNwcV9kYXRhX2J1ZmYgPSBEU1BRX0RBVEFfQlVGRjsKKwljaGlwLT5kc3BxX2J1ZmZfc2l6ZSA9IERTUFFfQlVGRl9TSVpFOworCWlmICh3cml0ZV9uZGVsYXlbaWR4XSkKKwkJY2xlYXJfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisJZWxzZQorCQlzZXRfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChkaWdpdGFsW2lkeF0pCisJCXNldF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwllcnIgPSBzbmRfbXNuZF9wcm9iZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBQcm9iZSBmYWlsZWRcbiIpOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9tc25kX2F0dGFjaChjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBBdHRhY2ggZmFpbGVkXG4iKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJcmV0dXJuIDA7CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCitjZmdfZXJyb3I6CisJcmVsZWFzZV9yZWdpb24oY2ZnW2lkeF0sIDIpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfbXNuZF9pc2FfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc25kX21zbmRfdW5sb2FkKGRldl9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIERFVl9OQU1FICJtc25kLXBpbm5hY2xlIgorCitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc25kX21zbmRfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfbXNuZF9pc2FfbWF0Y2gsCisJLnByb2JlCQk9IHNuZF9tc25kX2lzYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9tc25kX2lzYV9yZW1vdmUpLAorCS8qIEZJWE1FOiBzdXNwZW5kLCByZXN1bWUgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBERVZfTkFNRQorCX0sCit9OworCisjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCisJCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCit7CisJc3RhdGljIGludCBpZHg7CisJc3RydWN0IHBucF9kZXYgKnBucF9kZXY7CisJc3RydWN0IHBucF9kZXYgKm1wdV9kZXY7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcDsKKwlpbnQgcmV0OworCisJZm9yICggOyBpZHggPCBTTkRSVl9DQVJEUzsgaWR4KyspIHsKKwkJaWYgKGhhc19pc2FwbnAoaWR4KSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaWR4ID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIHJvb20gZm9yIGFub3RoZXIgc291bmQgY2FyZCAuLi4KKwkgKi8KKwlwbnBfZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UocGNhcmQsIHBpZC0+ZGV2c1swXS5pZCwgTlVMTCk7CisJaWYgKCFwbnBfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1wdV9kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShwY2FyZCwgcGlkLT5kZXZzWzFdLmlkLCBOVUxMKTsKKwlpZiAoIW1wdV9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFwbnBfaXNfYWN0aXZlKHBucF9kZXYpICYmIHBucF9hY3RpdmF0ZV9kZXYocG5wX2RldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zbmRfcGlubmFjbGU6IGRldmljZSBpcyBpbmFjdGl2ZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKCFwbnBfaXNfYWN0aXZlKG1wdV9kZXYpICYmIHBucF9hY3RpdmF0ZV9kZXYobXB1X2RldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zbmRfcGlubmFjbGU6IE1QVSBkZXZpY2UgaXMgaW5hY3RpdmVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qCisJICogQ3JlYXRlIGEgbmV3IEFMU0Egc291bmQgY2FyZCBlbnRyeSwgaW4gYW50aWNpcGF0aW9uCisJICogb2YgZGV0ZWN0aW5nIG91ciBoYXJkd2FyZSAuLi4KKwkgKi8KKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9tc25kKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwljaGlwLT5jYXJkID0gY2FyZDsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKKworCS8qCisJICogUmVhZCB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIG9mZiB0aGUgSVNBIFBuUCBidXMgLi4uCisJICovCisJaW9baWR4XSA9IHBucF9wb3J0X3N0YXJ0KHBucF9kZXYsIDApOworCWlycVtpZHhdID0gcG5wX2lycShwbnBfZGV2LCAwKTsKKwltZW1baWR4XSA9IHBucF9tZW1fc3RhcnQocG5wX2RldiwgMCk7CisJbXB1X2lvW2lkeF0gPSBwbnBfcG9ydF9zdGFydChtcHVfZGV2LCAwKTsKKwltcHVfaXJxW2lkeF0gPSBwbnBfaXJxKG1wdV9kZXYsIDApOworCisJc2V0X2RlZmF1bHRfYXVkaW9fcGFyYW1ldGVycyhjaGlwKTsKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwljaGlwLT50eXBlID0gbXNuZENsYXNzaWM7CisjZWxzZQorCWNoaXAtPnR5cGUgPSBtc25kUGlubmFjbGU7CisjZW5kaWYKKwljaGlwLT5pbyA9IGlvW2lkeF07CisJY2hpcC0+aXJxID0gaXJxW2lkeF07CisJY2hpcC0+YmFzZSA9IG1lbVtpZHhdOworCisJY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9IGNhbGlicmF0ZV9zaWduYWwgPyAxIDogMDsKKwljaGlwLT5yZWNzcmMgPSAwOworCWNoaXAtPmRzcHFfZGF0YV9idWZmID0gRFNQUV9EQVRBX0JVRkY7CisJY2hpcC0+ZHNwcV9idWZmX3NpemUgPSBEU1BRX0JVRkZfU0laRTsKKwlpZiAod3JpdGVfbmRlbGF5W2lkeF0pCisJCWNsZWFyX2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworCWVsc2UKKwkJc2V0X2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoZGlnaXRhbFtpZHhdKQorCQlzZXRfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncyk7CisjZW5kaWYKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisJcmV0ID0gc25kX21zbmRfcHJvYmUoY2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogUHJvYmUgZmFpbGVkXG4iKTsKKwkJZ290byBfcmVsZWFzZV9jYXJkOworCX0KKworCXJldCA9IHNuZF9tc25kX2F0dGFjaChjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBBdHRhY2ggZmFpbGVkXG4iKTsKKwkJZ290byBfcmVsZWFzZV9jYXJkOworCX0KKworCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBjYXJkKTsKKwkrK2lkeDsKKwlyZXR1cm4gMDsKKworX3JlbGVhc2VfY2FyZDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXNuZF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCkKK3sKKwlzbmRfbXNuZF91bmxvYWQocG5wX2dldF9jYXJkX2RydmRhdGEocGNhcmQpKTsKKwlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CitzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOworCitzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBtc25kX3BucGlkc1tdID0geworCS8qIFBpbm5hY2xlIFBuUCAqLworCXsgLmlkID0gIkJWSjA0NDAiLCAuZGV2cyA9IHsgeyAiVEJTMDAwMCIgfSwgeyAiVEJTMDAwMSIgfSB9IH0sCisJeyAuaWQgPSAiIiB9CS8qIGVuZCAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgbXNuZF9wbnBpZHMpOworCitzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RyaXZlciBtc25kX3BucGNfZHJpdmVyID0geworCS5mbGFncyA9IFBOUF9EUklWRVJfUkVTX0RPX05PVF9DSEFOR0UsCisJLm5hbWUgPSAibXNuZF9waW5uYWNsZSIsCisJLmlkX3RhYmxlID0gbXNuZF9wbnBpZHMsCisJLnByb2JlID0gc25kX21zbmRfcG5wX2RldGVjdCwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX21zbmRfcG5wX3JlbW92ZSksCit9OworI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKworc3RhdGljIGludCBfX2luaXQgc25kX21zbmRfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfbXNuZF9kcml2ZXIsIFNORFJWX0NBUkRTKTsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKCFlcnIpCisJCWlzYV9yZWdpc3RlcmVkID0gMTsKKworCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmbXNuZF9wbnBjX2RyaXZlcik7CisJaWYgKCFlcnIpCisJCXBucF9yZWdpc3RlcmVkID0gMTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKwkJZXJyID0gMDsKKyNlbmRpZgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbmRfbXNuZF9leGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChwbnBfcmVnaXN0ZXJlZCkKKwkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm1zbmRfcG5wY19kcml2ZXIpOworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKyNlbmRpZgorCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9tc25kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNuZF9tc25kX2luaXQpOworbW9kdWxlX2V4aXQoc25kX21zbmRfZXhpdCk7CisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuaCBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODMxOGQxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZF9waW5uYWNsZS5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX1BJTk5BQ0xFX0gKKyNkZWZpbmUgX19NU05EX1BJTk5BQ0xFX0gKKworI2RlZmluZSBEU1BfTlVNSU8JCQkJMHgwOAorCisjZGVmaW5lIElSRUdfTE9HREVWSUNFCQkJCTB4MDcKKyNkZWZpbmUgSVJFR19BQ1RJVkFURQkJCQkweDMwCisjZGVmaW5lIExEX0FDVElWQVRFCQkJCTB4MDEKKyNkZWZpbmUgTERfRElTQUNUSVZBVEUJCQkJMHgwMAorI2RlZmluZSBJUkVHX0VFQ09OVFJPTAkJCQkweDNGCisjZGVmaW5lIElSRUdfTUVNQkFTRUhJCQkJCTB4NDAKKyNkZWZpbmUgSVJFR19NRU1CQVNFTE8JCQkJMHg0MQorI2RlZmluZSBJUkVHX01FTUNPTlRST0wJCQkJMHg0MgorI2RlZmluZSBJUkVHX01FTVJBTkdFSEkJCQkJMHg0MworI2RlZmluZSBJUkVHX01FTVJBTkdFTE8JCQkJMHg0NAorI2RlZmluZSBNRU1UWVBFXzhCSVQJCQkJMHgwMAorI2RlZmluZSBNRU1UWVBFXzE2QklUCQkJCTB4MDIKKyNkZWZpbmUgTUVNVFlQRV9SQU5HRQkJCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfSElBRERSCQkJCTB4MDEKKyNkZWZpbmUgSVJFR19JTzBfQkFTRUhJCQkJCTB4NjAKKyNkZWZpbmUgSVJFR19JTzBfQkFTRUxPCQkJCTB4NjEKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUhJCQkJCTB4NjIKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUxPCQkJCTB4NjMKKyNkZWZpbmUgSVJFR19JUlFfTlVNQkVSCQkJCTB4NzAKKyNkZWZpbmUgSVJFR19JUlFfVFlQRQkJCQkweDcxCisjZGVmaW5lIElSUVRZUEVfSElHSAkJCQkweDAyCisjZGVmaW5lIElSUVRZUEVfTE9XCQkJCTB4MDAKKyNkZWZpbmUgSVJRVFlQRV9MRVZFTAkJCQkweDAxCisjZGVmaW5lIElSUVRZUEVfRURHRQkJCQkweDAwCisKKyNkZWZpbmUJSFBfRFNQUgkJCQkJMHgwNAorI2RlZmluZQlIUF9CTEtTCQkJCQkweDA0CisKKyNkZWZpbmUgSFBEU1BSRVNFVF9PRkYJCQkJMgorI2RlZmluZSBIUERTUFJFU0VUX09OCQkJCTAKKworI2RlZmluZSBIUEJMS1NFTF8wCQkJCTIKKyNkZWZpbmUgSFBCTEtTRUxfMQkJCQkzCisKKyNkZWZpbmUJSElNVF9EQVRfT0ZGCQkJCTB4MDMKKworI2RlZmluZQlISURTUF9QTEFZX1VOREVSCQkJMHgwMAorI2RlZmluZQlISURTUF9JTlRfUExBWV9VTkRFUgkJCTB4MDEKKyNkZWZpbmUJSElEU1BfU1NJX1RYX1VOREVSICAJCQkweDAyCisjZGVmaW5lIEhJRFNQX1JFQ1FfT1ZFUkZMT1cJCQkweDA4CisjZGVmaW5lIEhJRFNQX0lOVF9SRUNPUkRfT1ZFUgkJCTB4MDkKKyNkZWZpbmUgSElEU1BfU1NJX1JYX09WRVJGTE9XCQkJMHgwYQorCisjZGVmaW5lCUhJRFNQX01JRElfSU5fT1ZFUgkJCTB4MTAKKworI2RlZmluZQlISURTUF9NSURJX0ZSQU1FX0VSUgkJCTB4MTEKKyNkZWZpbmUJSElEU1BfTUlESV9QQVJJVFlfRVJSCQkJMHgxMgorI2RlZmluZQlISURTUF9NSURJX09WRVJSVU5fRVJSCQkJMHgxMworCisjZGVmaW5lIEhJRFNQX0lOUFVUX0NMSVBQSU5HCQkJMHgyMAorI2RlZmluZQlISURTUF9NSVhfQ0xJUFBJTkcJCQkweDMwCisjZGVmaW5lIEhJRFNQX0RBVF9JTl9PRkYJCQkweDIxCisKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVRfRE9ORQkJCTB4MDI4QQorI2RlZmluZSBUSU1FX1BST19TWVNFWAkJCQkweDAwMUUKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVQJCQkJMHgwMDMyCisKKyNkZWZpbmUgREFSX0JVRkZfU0laRQkJCQkweDEwMDAKKworI2RlZmluZSBNSURRX0JVRkZfU0laRQkJCQkweDgwMAorI2RlZmluZSBEU1BRX0JVRkZfU0laRQkJCQkweDVBMAorCisjZGVmaW5lIERTUFFfREFUQV9CVUZGCQkJCTB4Nzg2MAorCisjZGVmaW5lIE1PUF9XQVZFSERSCQkJCTAKKyNkZWZpbmUgTU9QX0VYVE9VVAkJCQkxCisjZGVmaW5lIE1PUF9IV0lOSVQJCQkJMHhmZQorI2RlZmluZSBNT1BfTk9ORQkJCQkweGZmCisjZGVmaW5lIE1PUF9NQVgJCQkJCTEKKworI2RlZmluZSBNSVBfRVhUSU4JCQkJMAorI2RlZmluZSBNSVBfV0FWRUhEUgkJCQkxCisjZGVmaW5lIE1JUF9IV0lOSVQJCQkJMHhmZQorI2RlZmluZSBNSVBfTUFYCQkJCQkxCisKKy8qIFBpbm5hY2xlL0ZpamkgU01BIENvbW1vbiBEYXRhICovCisjZGVmaW5lIFNNQV93Q3VyclBsYXlCeXRlcwkJCTB4MDAwMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRCeXRlcwkJCTB4MDAwMgorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sTGVmdAkJCTB4MDAwNAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sUmlnaHQJCQkweDAwMDYKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xMZWZ0CQkJMHgwMDA4CisjZGVmaW5lIFNNQV93Q3VyckluVm9sUmlnaHQJCQkweDAwMGEKKyNkZWZpbmUgU01BX3dDdXJyTUhkclZvbExlZnQJCQkweDAwMGMKKyNkZWZpbmUgU01BX3dDdXJyTUhkclZvbFJpZ2h0CQkJMHgwMDBlCisjZGVmaW5lIFNNQV9kd0N1cnJQbGF5UGl0Y2gJCQkweDAwMTAKKyNkZWZpbmUgU01BX2R3Q3VyclBsYXlSYXRlCQkJMHgwMDE0CisjZGVmaW5lIFNNQV93Q3Vyck1JRElJT1BhdGNoCQkJMHgwMDE4CisjZGVmaW5lIFNNQV93Q3VyclBsYXlGb3JtYXQJCQkweDAwMWEKKyNkZWZpbmUgU01BX3dDdXJyUGxheVNhbXBsZVNpemUJCQkweDAwMWMKKyNkZWZpbmUgU01BX3dDdXJyUGxheUNoYW5uZWxzCQkJMHgwMDFlCisjZGVmaW5lIFNNQV93Q3VyclBsYXlTYW1wbGVSYXRlCQkJMHgwMDIwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEZvcm1hdAkJCTB4MDAyMgorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRTYW1wbGVTaXplCQkweDAwMjQKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkQ2hhbm5lbHMJCQkweDAwMjYKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkU2FtcGxlUmF0ZQkJMHgwMDI4CisjZGVmaW5lIFNNQV93Q3VyckRTUFN0YXR1c0ZsYWdzCQkJMHgwMDJhCisjZGVmaW5lIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncwkJMHgwMDJjCisjZGVmaW5lIFNNQV93Q3VycklucHV0VGFnQml0cwkJCTB4MDAyZQorI2RlZmluZSBTTUFfd0N1cnJMZWZ0UGVhawkJCTB4MDAzMAorI2RlZmluZSBTTUFfd0N1cnJSaWdodFBlYWsJCQkweDAwMzIKKyNkZWZpbmUgU01BX2JNaWNQb3RQb3NMZWZ0CQkJMHgwMDM0CisjZGVmaW5lIFNNQV9iTWljUG90UG9zUmlnaHQJCQkweDAwMzUKKyNkZWZpbmUgU01BX2JNaWNQb3RNYXhMZWZ0CQkJMHgwMDM2CisjZGVmaW5lIFNNQV9iTWljUG90TWF4UmlnaHQJCQkweDAwMzcKKyNkZWZpbmUgU01BX2JJblBvdFBvc0xlZnQJCQkweDAwMzgKKyNkZWZpbmUgU01BX2JJblBvdFBvc1JpZ2h0CQkJMHgwMDM5CisjZGVmaW5lIFNNQV9iQXV4UG90UG9zTGVmdAkJCTB4MDAzYQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc1JpZ2h0CQkJMHgwMDNiCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhMZWZ0CQkJMHgwMDNjCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhSaWdodAkJCTB4MDAzZAorI2RlZmluZSBTTUFfYkF1eFBvdE1heExlZnQJCQkweDAwM2UKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhSaWdodAkJCTB4MDAzZgorI2RlZmluZSBTTUFfYkluUG90TWF4TWV0aG9kCQkJMHgwMDQwCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4TWV0aG9kCQkJMHgwMDQxCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xMZWZ0CQkJMHgwMDQyCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xSaWdodAkJCTB4MDA0NAorI2RlZmluZSBTTUFfd0NhbEZyZXFBdG9ECQkJMHgwMDQ2CisjZGVmaW5lIFNNQV93Q3VyckF1eFZvbExlZnQJCQkweDAwNDgKKyNkZWZpbmUgU01BX3dDdXJyQXV4Vm9sUmlnaHQJCQkweDAwNGEKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFWb2xMZWZ0CQkJMHgwMDRjCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxVm9sUmlnaHQJCQkweDAwNGUKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJWb2xMZWZ0CQkJMHgwMDUwCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyVm9sUmlnaHQJCQkweDAwNTIKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNWb2xMZWZ0CQkJMHgwMDU0CisjZGVmaW5lIFNNQV93Q3VyclBsYXkzVm9sUmlnaHQJCQkweDAwNTYKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRWb2xMZWZ0CQkJMHgwMDU4CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0Vm9sUmlnaHQJCQkweDAwNWEKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFQZWFrTGVmdAkJCTB4MDA1YworI2RlZmluZSBTTUFfd0N1cnJQbGF5MVBlYWtSaWdodAkJCTB4MDA1ZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlBlYWtMZWZ0CQkJMHgwMDYwCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyUGVha1JpZ2h0CQkJMHgwMDYyCisjZGVmaW5lIFNNQV93Q3VyclBsYXkzUGVha0xlZnQJCQkweDAwNjQKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNQZWFrUmlnaHQJCQkweDAwNjYKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRQZWFrTGVmdAkJCTB4MDA2OAorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFBlYWtSaWdodAkJCTB4MDA2YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5UGVha0xlZnQJCQkweDAwNmMKKyNkZWZpbmUgU01BX3dDdXJyUGxheVBlYWtSaWdodAkJCTB4MDA2ZQorI2RlZmluZSBTTUFfd0N1cnJEQVRTUgkJCQkweDAwNzAKKyNkZWZpbmUgU01BX3dDdXJyREFUUlhDSE5MCQkJMHgwMDcyCisjZGVmaW5lIFNNQV93Q3VyckRBVFRYQ0hOTAkJCTB4MDA3NAorI2RlZmluZSBTTUFfd0N1cnJEQVRSWFJhdGUJCQkweDAwNzYKKyNkZWZpbmUgU01BX2R3RFNQUGxheUNvdW50CQkJMHgwMDc4CisjZGVmaW5lIFNNQV9fc2l6ZQkJCQkweDAwN2MKKworI2RlZmluZSBJTklUQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9wbmRzcGluaS5iaW4iCisjZGVmaW5lIFBFUk1DT0RFRklMRQkJInR1cnRsZWJlYWNoL3BuZHNwZXJtLmJpbiIKKyNkZWZpbmUgTE9OR05BTUUJCSJNdWx0aVNvdW5kIChQaW5uYWNsZS9GaWppKSIKKworI2VuZGlmIC8qIF9fTVNORF9QSU5OQUNMRV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlX21peGVyLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlX21peGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MDU4YQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYwpAQCAtMCwwICsxLDM0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJICBtc25kX3Bpbm5hY2xlX21peGVyLmMgIC0gIGRlc2NyaXB0aW9uCisJCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBiZWdpbgkJOiBGcmUgSnVuIDcgMjAwMgorICAgIGNvcHlyaWdodCAJCTogKEMpIDIwMDIgYnkga2Fyc3RlbiB3aWVzZQorICAgIGVtYWlsCQk6IGFubmFiZWxsZXNnYXJkZW5AeWFob28uZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCSAgICAgIAkJICAgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgkJCQkgICAqCisgKgkJCQkJCQkJCSAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlICJtc25kLmgiCisjaW5jbHVkZSAibXNuZF9waW5uYWNsZS5oIgorCisKKyNkZWZpbmUgTVNORF9NSVhFUl9WT0xVTUUJMAorI2RlZmluZSBNU05EX01JWEVSX1BDTQkJMQorI2RlZmluZSBNU05EX01JWEVSX0FVWAkJMgkvKiBJbnB1dCBzb3VyY2UgMSAgKGF1eDEpICovCisjZGVmaW5lIE1TTkRfTUlYRVJfSU1JWAkJMwkvKiAgUmVjb3JkaW5nIG1vbml0b3IgICovCisjZGVmaW5lIE1TTkRfTUlYRVJfU1lOVEgJNAorI2RlZmluZSBNU05EX01JWEVSX1NQRUFLRVIJNQorI2RlZmluZSBNU05EX01JWEVSX0xJTkUJCTYKKyNkZWZpbmUgTVNORF9NSVhFUl9NSUMJCTcKKyNkZWZpbmUgTVNORF9NSVhFUl9SRUNMRVYJMTEJLyogUmVjb3JkaW5nIGxldmVsICovCisjZGVmaW5lIE1TTkRfTUlYRVJfSUdBSU4JMTIJLyogSW5wdXQgZ2FpbiAqLworI2RlZmluZSBNU05EX01JWEVSX09HQUlOCTEzCS8qIE91dHB1dCBnYWluICovCisjZGVmaW5lIE1TTkRfTUlYRVJfRElHSVRBTAkxNwkvKiBEaWdpdGFsIChpbnB1dCkgMSAqLworCisvKglEZXZpY2UgbWFzayBiaXRzCSovCisKKyNkZWZpbmUgTVNORF9NQVNLX1ZPTFVNRQkoMSA8PCBNU05EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgTVNORF9NQVNLX1NZTlRICQkoMSA8PCBNU05EX01JWEVSX1NZTlRIKQorI2RlZmluZSBNU05EX01BU0tfUENNCQkoMSA8PCBNU05EX01JWEVSX1BDTSkKKyNkZWZpbmUgTVNORF9NQVNLX1NQRUFLRVIJKDEgPDwgTVNORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBNU05EX01BU0tfTElORQkJKDEgPDwgTVNORF9NSVhFUl9MSU5FKQorI2RlZmluZSBNU05EX01BU0tfTUlDCQkoMSA8PCBNU05EX01JWEVSX01JQykKKyNkZWZpbmUgTVNORF9NQVNLX0lNSVgJCSgxIDw8IE1TTkRfTUlYRVJfSU1JWCkKKyNkZWZpbmUgTVNORF9NQVNLX1JFQ0xFVgkoMSA8PCBNU05EX01JWEVSX1JFQ0xFVikKKyNkZWZpbmUgTVNORF9NQVNLX0lHQUlOCQkoMSA8PCBNU05EX01JWEVSX0lHQUlOKQorI2RlZmluZSBNU05EX01BU0tfT0dBSU4JCSgxIDw8IE1TTkRfTUlYRVJfT0dBSU4pCisjZGVmaW5lIE1TTkRfTUFTS19BVVgJCSgxIDw8IE1TTkRfTUlYRVJfQVVYKQorI2RlZmluZSBNU05EX01BU0tfRElHSVRBTAkoMSA8PCBNU05EX01JWEVSX0RJR0lUQUwpCisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfaW5mb19tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbM10gPSB7CisJCSJBbmFsb2ciLCAiTUFTUyIsICJTUERJRiIsCisJfTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgaXRlbXMgPSB0ZXN0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpID8gMyA6IDI7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gaXRlbXM7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gaXRlbXMpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSBpdGVtcyAtIDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCXRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9nZXRfbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwkvKiBNU05EX01BU0tfSU1JWCBpcyB0aGUgZGVmYXVsdCAqLworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOworCisJaWYgKGNoaXAtPnJlY3NyYyAmIE1TTkRfTUFTS19TWU5USCkgeworCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwl9IGVsc2UgaWYgKChjaGlwLT5yZWNzcmMgJiBNU05EX01BU0tfRElHSVRBTCkgJiYKKwkJIHRlc3RfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncykpIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDI7CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9zZXRfbXV4KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBuZXdyZWNzcmM7CisJaW50IGNoYW5nZTsKKwl1bnNpZ25lZCBjaGFyIG1zbmRieXRlOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJCW5ld3JlY3NyYyA9IE1TTkRfTUFTS19JTUlYOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfQU5BX0lOOworCQlicmVhazsKKwljYXNlIDE6CisJCW5ld3JlY3NyYyA9IE1TTkRfTUFTS19TWU5USDsKKwkJbXNuZGJ5dGUgPSBIREVYQVJfU0VUX1NZTlRIX0lOOworCQlicmVhazsKKwljYXNlIDI6CisJCW5ld3JlY3NyYyA9IE1TTkRfTUFTS19ESUdJVEFMOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfREFUX0lOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2hhbmdlICA9IG5ld3JlY3NyYyAhPSBjaGlwLT5yZWNzcmM7CisJaWYgKGNoYW5nZSkgeworCQljaGFuZ2UgPSAwOworCQlpZiAoIXNuZF9tc25kX3NlbmRfd29yZChjaGlwLCAwLCAwLCBtc25kYnl0ZSkpCisJCQlpZiAoIXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX0FVWF9SRVEpKSB7CisJCQkJY2hpcC0+cmVjc3JjID0gbmV3cmVjc3JjOworCQkJCWNoYW5nZSA9IDE7CisJCQl9CisJfQorCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfcHV0X211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKm1zbmQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJcmV0dXJuIHNuZF9tc25kbWl4X3NldF9tdXgobXNuZCwgdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSk7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbXNuZC0+bGVmdF9sZXZlbHNbYWRkcl0gKiAxMDA7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gLz0gMHhGRkZGOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gbXNuZC0+cmlnaHRfbGV2ZWxzW2FkZHJdICogMTAwOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIC89IDB4RkZGRjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdXBkYXRlX3ZvbG0oYSwgYikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZXcoKGRldi0+bGVmdF9sZXZlbHNbYV0gPj4gMSkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpIC8gMHhmZmZmLAlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI2IjI0xlZnQpOwkJCVwKKwkJd3JpdGV3KChkZXYtPnJpZ2h0X2xldmVsc1thXSA+PiAxKSAgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNiIyNSaWdodCk7CQkJXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIHVwZGF0ZV9wb3RtKGQsIHMsIGFyKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRlYigoZGV2LT5sZWZ0X2xldmVsc1tkXSA+PiA4KSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCkgLyAweGZmZmYsIFwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjTGVmdCk7CQkJXAorCQl3cml0ZWIoKGRldi0+cmlnaHRfbGV2ZWxzW2RdID4+IDgpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCkgLyAweGZmZmYsIFwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjUmlnaHQpOwkJCVwKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIGFyKSA9PSAwKQkJXAorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsJXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIHVwZGF0ZV9wb3QoZCwgcywgYXIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGViKGRldi0+bGVmdF9sZXZlbHNbZF0gPj4gOCwJCQlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI0xlZnQpOwkJCVwKKwkJd3JpdGViKGRldi0+cmlnaHRfbGV2ZWxzW2RdID4+IDgsCQkJXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNSaWdodCk7CQkJXAorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgYXIpID09IDApCQlcCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOwlcCisJfSB3aGlsZSAoMCk7CisKKworc3RhdGljIGludCBzbmRfbXNuZG1peF9zZXQoc3RydWN0IHNuZF9tc25kICpkZXYsIGludCBkLCBpbnQgbGVmdCwgaW50IHJpZ2h0KQoreworCWludCBiTGVmdCwgYlJpZ2h0OworCWludCB3TGVmdCwgd1JpZ2h0OworCWludCB1cGRhdGVtYXN0ZXIgPSAwOworCisJaWYgKGQgPj0gTEVWRUxfRU5UUklFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliTGVmdCA9IGxlZnQgKiAweGZmIC8gMTAwOworCXdMZWZ0ID0gbGVmdCAqIDB4ZmZmZiAvIDEwMDsKKworCWJSaWdodCA9IHJpZ2h0ICogMHhmZiAvIDEwMDsKKwl3UmlnaHQgPSByaWdodCAqIDB4ZmZmZiAvIDEwMDsKKworCWRldi0+bGVmdF9sZXZlbHNbZF0gPSB3TGVmdDsKKwlkZXYtPnJpZ2h0X2xldmVsc1tkXSA9IHdSaWdodDsKKworCXN3aXRjaCAoZCkgeworCQkvKiBtYXN0ZXIgdm9sdW1lIHVuc2NhbGVkIGNvbnRyb2xzICovCisJY2FzZSBNU05EX01JWEVSX0xJTkU6CQkJLyogbGluZSBwb3QgY29udHJvbCAqLworCQkvKiBzY2FsZWQgYnkgSU1JWCBpbiBkaWdpdGFsIG1peCAqLworCQl3cml0ZWIoYkxlZnQsIGRldi0+U01BICsgU01BX2JJblBvdFBvc0xlZnQpOworCQl3cml0ZWIoYlJpZ2h0LCBkZXYtPlNNQSArIFNNQV9iSW5Qb3RQb3NSaWdodCk7CisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBIREVYQVJfSU5fU0VUX1BPVFMpID09IDApCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOworCQlicmVhazsKKwljYXNlIE1TTkRfTUlYRVJfTUlDOgkJCS8qIG1pYyBwb3QgY29udHJvbCAqLworCQlpZiAoZGV2LT50eXBlID09IG1zbmRDbGFzc2ljKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIHNjYWxlZCBieSBJTUlYIGluIGRpZ2l0YWwgbWl4ICovCisJCXdyaXRlYihiTGVmdCwgZGV2LT5TTUEgKyBTTUFfYk1pY1BvdFBvc0xlZnQpOworCQl3cml0ZWIoYlJpZ2h0LCBkZXYtPlNNQSArIFNNQV9iTWljUG90UG9zUmlnaHQpOworCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgSERFWEFSX01JQ19TRVRfUE9UUykgPT0gMCkKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CisJCWJyZWFrOworCWNhc2UgTVNORF9NSVhFUl9WT0xVTUU6CQkvKiBtYXN0ZXIgdm9sdW1lICovCisJCXdyaXRldyh3TGVmdCwgZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJCXdyaXRldyh3UmlnaHQsIGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIE1TTkRfTUlYRVJfQVVYOgkJCS8qIGF1eCBwb3QgY29udHJvbCAqLworCQkvKiBzY2FsZWQgYnkgbWFzdGVyIHZvbHVtZSAqLworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQkvKiBkaWdpdGFsIGNvbnRyb2xzICovCisJY2FzZSBNU05EX01JWEVSX1NZTlRIOgkJCS8qIHN5bnRoIHZvbCAoZHNwIG1peCkgKi8KKwljYXNlIE1TTkRfTUlYRVJfUENNOgkJCS8qIHBjbSB2b2wgKGRzcCBtaXgpICovCisJY2FzZSBNU05EX01JWEVSX0lNSVg6CQkJLyogaW5wdXQgbW9uaXRvciAoZHNwIG1peCkgKi8KKwkJLyogc2NhbGVkIGJ5IG1hc3RlciB2b2x1bWUgKi8KKwkJdXBkYXRlbWFzdGVyID0gMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXBkYXRlbWFzdGVyKSB7CisJCS8qIHVwZGF0ZSBtYXN0ZXIgdm9sdW1lIHNjYWxlZCBjb250cm9scyAqLworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX1BDTSwgd0N1cnJQbGF5Vm9sKTsKKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9JTUlYLCB3Q3VyckluVm9sKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kUGlubmFjbGUpCisJCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX1NZTlRILCB3Q3Vyck1IZHJWb2wpOworCQl1cGRhdGVfcG90bShNU05EX01JWEVSX0FVWCwgYkF1eFBvdFBvcywgSERFWEFSX0FVWF9TRVRfUE9UUyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlLCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJaW50IGxlZnQsIHJpZ2h0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsZWZ0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJSAxMDE7CisJcmlnaHQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAlIDEwMTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCWNoYW5nZSA9IG1zbmQtPmxlZnRfbGV2ZWxzW2FkZHJdICE9IGxlZnQKKwkJfHwgbXNuZC0+cmlnaHRfbGV2ZWxzW2FkZHJdICE9IHJpZ2h0OworCXNuZF9tc25kbWl4X3NldChtc25kLCBhZGRyLCBsZWZ0LCByaWdodCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKworI2RlZmluZSBEVU1NWV9WT0xVTUUoeG5hbWUsIHhpbmRleCwgYWRkcikgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGluZGV4LCBcCisgIC5pbmZvID0gc25kX21zbmRtaXhfdm9sdW1lX2luZm8sIFwKKyAgLmdldCA9IHNuZF9tc25kbWl4X3ZvbHVtZV9nZXQsIC5wdXQgPSBzbmRfbXNuZG1peF92b2x1bWVfcHV0LCBcCisgIC5wcml2YXRlX3ZhbHVlID0gYWRkciB9CisKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9tc25kX2NvbnRyb2xzW10gPSB7CitEVU1NWV9WT0xVTUUoIk1hc3RlciBWb2x1bWUiLCAwLCBNU05EX01JWEVSX1ZPTFVNRSksCitEVU1NWV9WT0xVTUUoIlBDTSBWb2x1bWUiLCAwLCBNU05EX01JWEVSX1BDTSksCitEVU1NWV9WT0xVTUUoIkF1eCBWb2x1bWUiLCAwLCBNU05EX01JWEVSX0FVWCksCitEVU1NWV9WT0xVTUUoIkxpbmUgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9MSU5FKSwKK0RVTU1ZX1ZPTFVNRSgiTWljIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfTUlDKSwKK0RVTU1ZX1ZPTFVNRSgiTW9uaXRvciIsCTAsIE1TTkRfTUlYRVJfSU1JWCksCit7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCS5pbmZvID0gc25kX21zbmRtaXhfaW5mb19tdXgsCisJLmdldCA9IHNuZF9tc25kbWl4X2dldF9tdXgsCisJLnB1dCA9IHNuZF9tc25kbWl4X3B1dF9tdXgsCit9Cit9OworCisKK2ludCBfX2RldmluaXQgc25kX21zbmRtaXhfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgZXJyOworCisJaWYgKHNuZF9CVUdfT04oIWNoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bWl4ZXJfbG9jayk7CisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIk1TTkQgUGlubmFjbGUgTWl4ZXIiKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfbXNuZF9jb250cm9scyk7IGlkeCsrKQorCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCSAgc25kX2N0bF9uZXcxKHNuZF9tc25kX2NvbnRyb2xzICsgaWR4LCBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1peF9uZXcpOworCit2b2lkIHNuZF9tc25kbWl4X3NldHVwKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVwZGF0ZV9wb3QoTVNORF9NSVhFUl9MSU5FLCBiSW5Qb3RQb3MsIEhERVhBUl9JTl9TRVRfUE9UUyk7CisJdXBkYXRlX3BvdG0oTVNORF9NSVhFUl9BVVgsIGJBdXhQb3RQb3MsIEhERVhBUl9BVVhfU0VUX1BPVFMpOworCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfUENNLCB3Q3VyclBsYXlWb2wpOworCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfSU1JWCwgd0N1cnJJblZvbCk7CisJaWYgKGRldi0+dHlwZSA9PSBtc25kUGlubmFjbGUpIHsKKwkJdXBkYXRlX3BvdChNU05EX01JWEVSX01JQywgYk1pY1BvdFBvcywgSERFWEFSX01JQ19TRVRfUE9UUyk7CisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfU1lOVEgsIHdDdXJyTUhkclZvbCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1peF9zZXR1cCk7CisKK2ludCBzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoc3RydWN0IHNuZF9tc25kICpkZXYsIGludCByZWNzcmMpCit7CisJZGV2LT5yZWNzcmMgPSAtMTsKKwlyZXR1cm4gc25kX21zbmRtaXhfc2V0X211eChkZXYsIHJlY3NyYyk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCA1OGM5NzJiLi5lZjk1Mjc5ZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC0xNzksMTIgKzE3OSwxMyBAQAogCXVuc2lnbmVkIGNoYXIgcmVzdWx0OwogI2lmIDAKIAlvdXRiKDB4MWQsIHBvcnQpOwkvKiBwYXNzd29yZCAqLwotCXByaW50aygicmVhZCBbMHglbHhdID0gMHgleFxuIiwgcG9ydCwgaW5iKHBvcnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicmVhZCBbMHglbHhdID0gMHgleFxuIiwgcG9ydCwgaW5iKHBvcnQpKTsKICNlbmRpZgogCW91dGIocmVnLCBjaGlwLT5wb3J0KTsJLyogcmVnaXN0ZXIgKi8KIAlyZXN1bHQgPSBpbmIoY2hpcC0+cG9ydCArIDEpOwogI2lmIDAKLQlwcmludGsoInJlYWQgWzB4JWx4XSA9IDB4JXggWzB4JXhdXG4iLCBwb3J0LCByZXN1bHQsIGluYihwb3J0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInJlYWQgWzB4JWx4XSA9IDB4JXggWzB4JXhdXG4iLAorCSAgICAgICBwb3J0LCByZXN1bHQsIGluYihwb3J0KSk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjMzLDcgKzIzNCwxMCBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgZ3JhYiBwb3J0IDB4JWx4XG4iLCBwb3J0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLy8gc25kX3ByaW50aygiUkVHIDBBID0gMHgleFxuIiwgc25kX29wbDNzYTJfcmVhZChjaGlwLCAweDBhKSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIlJFRyAwQSA9IDB4JXhcbiIsCisJCSAgIHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgMHgwYSkpOworCSovCiAJY2hpcC0+dmVyc2lvbiA9IDA7CiAJdG1wID0gc25kX29wbDNzYTJfcmVhZChjaGlwLCBPUEwzU0EyX01JU0MpOwogCWlmICh0bXAgPT0gMHhmZikgewpAQCAtNTUwLDIxICs1NTQsMjcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc25kX29wbDNzYTJfc3VzcGVuZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc25kX29wbDNzYTIgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaWYgKGNhcmQpIHsKKwkJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotCWNoaXAtPndzcy0+c3VzcGVuZChjaGlwLT53c3MpOwotCS8qIHBvd2VyIGRvd24gKi8KLQlzbmRfb3BsM3NhMl93cml0ZShjaGlwLCBPUEwzU0EyX1BNX0NUUkwsIE9QTDNTQTJfUE1fRDMpOworCQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7CisJCWNoaXAtPndzcy0+c3VzcGVuZChjaGlwLT53c3MpOworCQkvKiBwb3dlciBkb3duICovCisJCXNuZF9vcGwzc2EyX3dyaXRlKGNoaXAsIE9QTDNTQTJfUE1fQ1RSTCwgT1BMM1NBMl9QTV9EMyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX29wbDNzYTJfcmVzdW1lKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIHsKLQlzdHJ1Y3Qgc25kX29wbDNzYTIgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwOwogCWludCBpOwogCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gMDsKKworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJLyogcG93ZXIgdXAgKi8KIAlzbmRfb3BsM3NhMl93cml0ZShjaGlwLCBPUEwzU0EyX1BNX0NUUkwsIE9QTDNTQTJfUE1fRDApOwogCkBAIC02MTMsMjUgKzYyMywyOCBAQAogewogCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjYXJkKTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX29wbDNzYTJfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX29wbDNzYTJfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfb3BsM3NhMiAqY2hpcDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX29wbDNzYTIpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIk9QTDNTQTIiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiWWFtYWhhIE9QTDMtU0EyIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIllhbWFoYSBPUEwzLVNBIik7CiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCWNoaXAtPmlycSA9IC0xOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9vcGwzc2EyX2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wbDNzYTJfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNzIzLDkgKzczNiw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzg5LDkgKzgwMiw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtODcwLDkgKzg4Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKaW5kZXggNDQwNzU1Yy4uMDJlMzBkNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwpAQCAtMTIyOCw5ICsxMjI4LDEwIEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCi0JaWYgKCEoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBzbmRfbWlybykpKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9taXJvKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX21pcm9fZnJlZTsKIAltaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggMTk3MDZiMC4uNWNkNTU1MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0yNTIsNyArMjUyLDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBoYXJkd2FyZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI5NCw3ICsyOTQsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC0zMzYsNyArMzM2LDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzMCw3ICs0MzAsOCBAQAogCQl3c3NfYmFzZV9iaXRzID0gMHgwMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLCBjaGlwLT53c3NfYmFzZSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT53c3NfYmFzZSk7CiAJCWdvdG8gX19za2lwX2Jhc2U7CiAJfQogCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIHdzc19iYXNlX2JpdHMgPDwgNCwgMHgzMCk7CkBAIC00NTUsNyArNDU2LDcgQEAKIAkJaXJxX2JpdHMgPSAweDA0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgaXJxICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5pcnEpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGlycSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+aXJxKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIApAQCAtNDcwLDEzICs0NzEsMTQgQEAKIAkJZG1hX2JpdHMgPSAweDAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+ZG1hMSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPmRtYTEpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlpZiAoY2hpcC0+ZG1hMSA9PSBjaGlwLT5kbWEyKSB7Ci0JCXNuZF9wcmludGsoImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC00ODUsNyArNDg3LDggQEAKIAljYXNlIDE6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBkbWEyICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5kbWEyKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBkbWEyICMgJWQgbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+ZG1hMik7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAJZG1hX2JpdHMgfD0gMHgwNDsKQEAgLTUxNiw3ICs1MTksOCBAQAogCQkJbXB1X3BvcnRfYml0cyA9IDB4MDA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNuZF9wcmludGsoIk1QVS00MDEgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJNUFUtNDAxIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLAogCQkJCWNoaXAtPm1wdV9wb3J0KTsKIAkJCWdvdG8gX19za2lwX21wdTsKIAkJfQpAQCAtNTM1LDcgKzUzOSw3IEBACiAJCQltcHVfaXJxX2JpdHMgPSAweDAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzbmRfcHJpbnRrKCJNUFUtNDAxIGlycSAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJNUFUtNDAxIGlycSAjICVkIG5vdCB2YWxpZFxuIiwKIAkJCQljaGlwLT5tcHVfaXJxKTsKIAkJCWdvdG8gX19za2lwX21wdTsKIAkJfQpAQCAtNzI2LDcgKzczMCw3IEBACiAJaWYgKGNoaXAtPndzc19iYXNlID09IFNORFJWX0FVVE9fUE9SVCkgewogCQljaGlwLT53c3NfYmFzZSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChwb3NzaWJsZV9wb3J0cywgNCk7CiAJCWlmIChjaGlwLT53c3NfYmFzZSA8IDApIHsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgV1NTIHBvcnRcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KQEAgLTgxNSwxNCArODE5LDggQEAKIAkJCQkgICBjaGlwLT5mbV9wb3J0LCBjaGlwLT5mbV9wb3J0ICsgNCAtIDEpOwogCQl9CiAJCWlmIChvcGwzKSB7Ci0jaWZkZWYgQ1M0MjMxCi0JCQljb25zdCBpbnQgdDFkZXYgPSAxOwotI2Vsc2UKLQkJCWNvbnN0IGludCB0MWRldiA9IDA7Ci0jZW5kaWYKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgdDFkZXYsIHQxZGV2KzEpKSA8IDApCi0JCQkJcmV0dXJuIGVycm9yOwotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmc3ludGgpKSA8IDApCisJCQllcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmc3ludGgpOworCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CkBAIC04MzAsMTUgKzgyOCwxOCBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX29wdGk5eHhfY2FyZF9uZXcodm9pZCkKK3N0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfb3B0aTl4eF9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9vcHRpOXh4X2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCkBAIC04OTcsMTUgKzg5OCwxNSBAQAogI2lmIGRlZmluZWQoQ1M0MjMxKSB8fCBkZWZpbmVkKE9QVGk5M1gpCiAJaWYgKGRtYTIgPT0gU05EUlZfQVVUT19ETUEpIHsKIAkJaWYgKChkbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYTJzW2RtYTEgJSA0XSkpIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTJcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KICNlbmRpZgogCi0JY2FyZCA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX29wdGk5eHhfZGV0ZWN0KGNhcmQsIGNhcmQtPnByaXZhdGVfZGF0YSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtOTUwLDkgKzk1MSw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKCEgaXNhcG5wKQogCQlyZXR1cm4gLUVOT0RFVjsKLQljYXJkID0gc25kX29wdGk5eHhfY2FyZF9uZXcoKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWh3ID0gc25kX2NhcmRfb3B0aTl4eF9wbnAoY2hpcCwgcGNhcmQsIHBpZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvZXM5NjguYyBiL3NvdW5kL2lzYS9zYi9lczk2OC5jCmluZGV4IGM4YzhlMjEuLmNhZmMzYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9lczk2OC5jCisrKyBiL3NvdW5kL2lzYS9zYi9lczk2OC5jCkBAIC0xMDgsOSArMTA4LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfY2FyZF9lczk2OCAqYWNhcmQ7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZXM5NjgpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9lczk2OCksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2VzOTY4X3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2LmMgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCmluZGV4IDJjMjAxZjcuLjUxOWMzNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjE2LmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTYuYwpAQCAtMzI0LDE0ICszMjQsMTggQEAKICNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfc2IxNl9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9zYjE2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYjE2X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNDg5LDkgKzQ5Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCS8qIG5vbi1QblAgRk0gcG9ydCBhZGRyZXNzIGlzIGhhcmR3aXJlZCB3aXRoIGJhc2UgcG9ydCBhZGRyZXNzICovCkBAIC02MTAsOSArNjE0LDkgQEAKIAlmb3IgKCA7IGRldiA8IFNORFJWX0NBUkRTOyBkZXYrKykgewogCQlpZiAoIWVuYWJsZVtkZXZdIHx8ICFpc2FwbnBbZGV2XSkKIAkJCWNvbnRpbnVlOwotCQljYXJkID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2KTsKLQkJaWYgKCEgY2FyZCkKLQkJCXJldHVybiAtRU5PTUVNOworCQlyZXMgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOwogCQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAkJaWYgKChyZXMgPSBzbmRfY2FyZF9zYjE2X3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCB8fAogCQkgICAgKHJlcyA9IHNuZF9zYjE2X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiOC5jIGIvc291bmQvaXNhL3NiL3NiOC5jCmluZGV4IGVhMDY4NzcuLjNjZDU3ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjguYworKysgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKQEAgLTEwMywxMCArMTAzLDEwIEBACiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NiOCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2I4X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jIGIvc291bmQvaXNhL3NiL3NiX21peGVyLmMKaW5kZXggNDA2YTQzMS4uNDc1MjIwYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMKKysrIGIvc291bmQvaXNhL3NiL3NiX21peGVyLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9kdDAxOXhfaW5wdXRfc3dfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbNV0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRleHRzWzVdID0gewogCQkiQ0QiLCAiTWljIiwgIkxpbmUiLCAiU3ludGgiLCAiTWFzdGVyIgogCX07CiAKQEAgLTI2OSwxMiArMjY5LDczIEBACiB9CiAKIC8qCisgKiBBTFM0MDAwIG1vbm8gcmVjb3JkaW5nIGNvbnRyb2wgc3dpdGNoCisgKi8KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbM10gPSB7CisJCSJMIGNoYW4gb25seSIsICJSIGNoYW4gb25seSIsICJMIGNoLzIgKyBSIGNoLzIiCisJfTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMikKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NiICpzYiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgb3ZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPSBzbmRfc2JtaXhlcl9yZWFkKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID4+PSA2OworCWlmIChvdmFsID4gMikKKwkJb3ZhbCA9IDI7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gb3ZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NiICpzYiA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjaGFuZ2U7CisJdW5zaWduZWQgY2hhciBudmFsLCBvdmFsOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID0gc25kX3NibWl4ZXJfcmVhZChzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwpOworCisJbnZhbCA9IChvdmFsICYgfigzIDw8IDYpKQorCSAgICAgfCAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA8PCA2KTsKKwljaGFuZ2UgPSBudmFsICE9IG92YWw7CisJaWYgKGNoYW5nZSkKKwkJc25kX3NibWl4ZXJfd3JpdGUoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCBudmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKy8qCiAgKiBTQlBSTyBpbnB1dCBtdWx0aXBsZXhlcgogICovCiAKIHN0YXRpYyBpbnQgc25kX3NiOG1peGVyX2luZm9fbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbM10gPSB7CiAJCSJNaWMiLCAiQ0QiLCAiTGluZSIKIAl9OwogCkBAIC00NDIsNiArNTAzLDEyIEBACiAJCQkuZ2V0ID0gc25kX2R0MDE5eF9pbnB1dF9zd19nZXQsCiAJCQkucHV0ID0gc25kX2R0MDE5eF9pbnB1dF9zd19wdXQsCiAJCX0sCisJCVtTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLXSA9IHsKKwkJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkJLmluZm8gPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2luZm8sCisJCQkuZ2V0ID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9nZXQsCisJCQkucHV0ID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9wdXQsCisJCX0sCiAJfTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CiAJaW50IGVycjsKQEAgLTYzNiw2ICs3MDMsOCBAQAogCX07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2R0MDE5eF9jb250cm9sc1tdID0geworCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKKwkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLwogCSZzbmRfZHQwMTl4X2N0bF9tYXN0ZXJfcGxheV92b2wsCiAJJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCwKIAkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wsCkBAIC02NjYsMTggKzczNSwyMSBAQAogLyoKICAqIEFMUzQwMDAgc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotLyogRklYTUU6IFNCX0FMUzQwMDBfTU9OT19JT19DVFJMIG5lZWRzIG91dHB1dCBzZWxlY3QgY3RybCEgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoID0KIAlTQl9TSU5HTEUoIk1hc3RlciBNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA1LCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9Ci0JU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBDYXB0dXJlIFJvdXRlIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDYsIDB4MDMpOwotLyogRklYTUU6IG1vbm8gcGxheWJhY2sgc3dpdGNoIGFsc28gYXZhaWxhYmxlIG9uIERUMDE5WD8gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUgPSB7CisJCS5uYW1lID0gIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLAorCQkudHlwZSA9IFNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKKwl9Owogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QgPQogCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfbG9vcGJhY2sgPQotCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2FuYWxvZ19sb29wYmFjayA9CisJU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgNywgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2sgPQorCVNCX1NJTkdMRSgiRGlnaXRhbCBMb29wYmFjayBTd2l0Y2giLAorCQkgIFNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04sIDcsIDB4MDEpOwogLyogRklYTUU6IGZ1bmN0aW9uYWxpdHkgb2YgM0QgY29udHJvbHMgbWlnaHQgYmUgc3dhcHBlZCwgSSBkaWRuJ3QgZmluZAogICogYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gaWRlbnRpZnkgd2hhdCBpcyBzdXBwb3NlZCB0byBiZSB3aGF0ICovCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2ggPQpAQCAtNjk0LDYgKzc2Niw5IEBACiAJU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gV2lkZSIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgMCwgMHgwZik7CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2ggPQogCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2ggPQorCVNCX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIDhrSHogLyAyMGtIeiBMUEYgU3dpdGNoIiwKKwkJICBTQl9BTFM0MDAwX0ZNREFDLCA1LCAweDAxKTsKICNpZmRlZiBOT1RfQVZBSUxBQkxFCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX2ZtZGFjID0KIAlTQl9TSU5HTEUoIkZNREFDIFN3aXRjaCAoT3B0aW9uID8pIiwgU0JfQUxTNDAwMF9GTURBQywgMCwgMHgwMSk7CkBAIC03MDIsMzUgKzc3NywzNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2FsczQwMDBfY29udHJvbHNbXSA9IHsKLQkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfc3ludGhfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAotCSZzbmRfc2IxNl9jdGxfYXV0b19taWNfZ2FpbiwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwKLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfY3RsX21peGVyX2xvb3BiYWNrLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwKKwkJCQkJCS8qIEFMUzQwMDBhLlBERiByZWdzIHBhZ2UgKi8KKwkmc25kX3NiMTZfY3RsX21hc3Rlcl9wbGF5X3ZvbCwJCS8qIE1YMzAvMzEgMTIgKi8KKwkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCQkvKiBNWDMyLzMzIDEyICovCisJJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwJCS8qIE1YMzQvMzUgMTIvMTMgKi8KKwkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCQkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwJCS8qIE1YM0MgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAkJLyogTVgzNi8zNyAxMyAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwJCS8qIE1YMzgvMzkgMTMgKi8KKwkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAkvKiBNWDNELzNFIDE0ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCwJLyogTVg0RCAgICAxNiAqLworCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAkJLyogTVgzQSAgICAxMyAqLworCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCQkvKiBNWDNCICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwJCS8qIE1YM0YvNDAgMTUgKi8KKwkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAkJCS8qIE1YNDEvNDIgMTUgKi8KKwkmc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCwgLyogTVg0QyAxNiAqLworCSZzbmRfYWxzNGtfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUsIC8qIE1YNEIgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCwJLyogTVg0QyAgICAxNiAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrLCAvKiBNWDREICAgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9kaWdpdGFsX2xvb3BiYWNrLCAvKiBDUjMgICAgMjEgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2gsCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcmF0aW8sCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZnJlcSwJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9kZWxheSwJCSAvKiBNWDUxICAgMTggKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2gsCS8qIE1YNTEgICAgMTggKi8KKwkmc25kX2FsczQwMDBfY3RsXzNkYl9mcmVxX2NvbnRyb2xfc3dpdGNoLAkvKiBNWDRGICAgIDE3ICovCiAjaWZkZWYgTk9UX0FWQUlMQUJMRQogCSZzbmRfYWxzNDAwMF9jdGxfZm1kYWMsCiAJJnNuZF9hbHM0MDAwX2N0bF9xc291bmQsCkBAIC05MDUsMTMgKzk4MiwxNCBAQAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgYWxzNDAwMF9zYXZlZF9yZWdzW10gPSB7CisJLyogcGxlYXNlIHZlcmlmeSBpbiBkc2hlZXQgd2hldGhlciByZWdzIHRvIGJlIGFkZGVkCisJICAgYXJlIGFjdHVhbGx5IHJlYWwgSC9XIG9yIGp1c3QgZHVtbXkgKi8KIAlTQl9EU1A0X01BU1RFUl9ERVYsIFNCX0RTUDRfTUFTVEVSX0RFViArIDEsCiAJU0JfRFNQNF9PVVRQVVRfU1csCiAJU0JfRFNQNF9QQ01fREVWLCBTQl9EU1A0X1BDTV9ERVYgKyAxLAogCVNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwKIAlTQl9EU1A0X1NZTlRIX0RFViwgU0JfRFNQNF9TWU5USF9ERVYgKyAxLAogCVNCX0RTUDRfQ0RfREVWLCBTQl9EU1A0X0NEX0RFViArIDEsCi0JU0JfRFNQNF9NSUNfQUdDLAogCVNCX0RTUDRfTUlDX0RFViwKIAlTQl9EU1A0X1NQRUFLRVJfREVWLAogCVNCX0RTUDRfSUdBSU5fREVWLCBTQl9EU1A0X0lHQUlOX0RFViArIDEsCkBAIC05MTksOCArOTk3LDEwIEBACiAJU0JfRFQwMTlYX09VVFBVVF9TVzIsCiAJU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsCiAJU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwKKwlTQl9BTFM0MDAwX0ZNREFDLAogCVNCX0FMUzQwMDBfM0RfU05EX0ZYLAogCVNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwKKwlTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLAogfTsKIAogc3RhdGljIHZvaWQgc2F2ZV9taXhlcihzdHJ1Y3Qgc25kX3NiICpjaGlwLCB1bnNpZ25lZCBjaGFyICpyZWdzLCBpbnQgbnVtX3JlZ3MpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2M2MDAwLmMgYi9zb3VuZC9pc2Evc2M2MDAwLmMKaW5kZXggY2EzNTkyNC4uNzgyMDEwNiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NjNjAwMC5jCisrKyBiL3NvdW5kL2lzYS9zYzYwMDAuYwpAQCAtNDg5LDkgKzQ4OSw5IEBACiAJY2hhciBfX2lvbWVtICp2bXNzX3BvcnQ7CiAKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewogCQl4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpOwpAQCAtNTc2LDEwICs1NzYsNiBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gT1BMIGRldmljZSBhdCAweCV4LTB4JXggP1xuIiwKIAkJCSAgIDB4Mzg4LCAweDM4OCArIDIpOwogCX0gZWxzZSB7Ci0JCWVyciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCAwLCAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl91bm1hcDI7Ci0KIAkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX3VubWFwMjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IDJjNzUwM2IuLjZmZTI3YjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMjQzLDkgKzI0Myw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfd3NzICpjaGlwOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAl4aXJxID0gaXJxW2Rldl07CiAJaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zc2NhcGUuYyBiL3NvdW5kL2lzYS9zc2NhcGUuYwppbmRleCA0OGExNmQ4Li42NjE4NzEyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc3NjYXBlLmMKKysrIGIvc291bmQvaXNhL3NzY2FwZS5jCkBAIC04OSw5ICs4OSw2IEBACiAjZW5kaWYKIAogCi0jZGVmaW5lIE1QVTQwMV9JTyhpKSAgICAgKChpKSArIDApCi0jZGVmaW5lIE1JRElfREFUQV9JTyhpKSAgKChpKSArIDApCi0jZGVmaW5lIE1JRElfQ1RSTF9JTyhpKSAgKChpKSArIDEpCiAjZGVmaW5lIEhPU1RfQ1RSTF9JTyhpKSAgKChpKSArIDIpCiAjZGVmaW5lIEhPU1RfREFUQV9JTyhpKSAgKChpKSArIDMpCiAjZGVmaW5lIE9ESUVfQUREUl9JTyhpKSAgKChpKSArIDQpCkBAIC0xMjksOSArMTI2LDYgQEAKICNkZWZpbmUgRE1BXzhCSVQgIDB4ODAKIAogCi0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9NU0IgICAgMHgxNgotI2RlZmluZSBBRDE4NDVfRlJFUV9TRUxfTFNCICAgIDB4MTcKLQogZW51bSBjYXJkX3R5cGUgewogCVNTQ0FQRSwKIAlTU0NBUEVfUE5QLApAQCAtMTQxLDggKzEzNSw2IEBACiBzdHJ1Y3Qgc291bmRzY2FwZSB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGlvX2Jhc2U7Ci0JdW5zaWduZWQgd3NzX2Jhc2U7Ci0JaW50IGNvZGVjX3R5cGU7CiAJaW50IGljX3R5cGU7CiAJZW51bSBjYXJkX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKQEAgLTMzMCw3ICszMjIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfbXB1NDAxKGNvbnN0IHN0cnVjdCBzbmRfbXB1NDAxICogbXB1KQogewotCXJldHVybiAoKGluYihNSURJX0NUUkxfSU8obXB1LT5wb3J0KSkgJiAweGMwKSA9PSAweDgwKTsKKwlyZXR1cm4gKChpbmIoTVBVNDAxQyhtcHUpKSAmIDB4YzApID09IDB4ODApOwogfQogCiAvKgpAQCAtMzM4LDcgKzMzMCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXNlX21wdTQwMShjb25zdCBzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSkKIHsKLQlvdXRiKDAsIE1JRElfREFUQV9JTyhtcHUtPnBvcnQpKTsKKwlvdXRiKDAsIE1QVTQwMUQobXB1KSk7CiB9CiAKIC8qCkBAIC0zOTYsMjAgKzM4OCwyMCBAQAogICovCiBzdGF0aWMgaW50IG9icF9zdGFydHVwX2FjayhzdHJ1Y3Qgc291bmRzY2FwZSAqcywgdW5zaWduZWQgdGltZW91dCkKIHsKLQl3aGlsZSAodGltZW91dCAhPSAwKSB7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHg7CiAKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJeCA9IGluYihIT1NUX0RBVEFfSU8ocy0+aW9fYmFzZSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWlmICgoeCAmIDB4ZmUpID09IDB4ZmUpCiAJCQlyZXR1cm4gMTsKIAotCQktLXRpbWVvdXQ7Ci0JfSAvKiB3aGlsZSAqLworCQltc2xlZXAoMTApOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMywyMCArNDE1LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgaG9zdF9zdGFydHVwX2FjayhzdHJ1Y3Qgc291bmRzY2FwZSAqcywgdW5zaWduZWQgdGltZW91dCkKIHsKLQl3aGlsZSAodGltZW91dCAhPSAwKSB7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHg7CiAKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJeCA9IGluYihIT1NUX0RBVEFfSU8ocy0+aW9fYmFzZSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWlmICh4ID09IDB4ZmUpCiAJCQlyZXR1cm4gMTsKIAotCQktLXRpbWVvdXQ7Ci0JfSAvKiB3aGlsZSAqLworCQltc2xlZXAoMTApOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMiwxMCArNTI0LDEwIEBACiAJICogZ2l2ZSBpdCA1IHNlY29uZHMgKG1heCkgLi4uCiAJICovCiAJcmV0ID0gMDsKLQlpZiAoIW9icF9zdGFydHVwX2FjayhzLCA1KSkgeworCWlmICghb2JwX3N0YXJ0dXBfYWNrKHMsIDUwMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gcmVzcG9uc2UgZnJvbSBvbi1ib2FyZCBwcm9jZXNzb3IgYWZ0ZXIgdXBsb2FkXG4iKTsKIAkJcmV0ID0gLUVBR0FJTjsKLQl9IGVsc2UgaWYgKCFob3N0X3N0YXJ0dXBfYWNrKHMsIDUpKSB7CisJfSBlbHNlIGlmICghaG9zdF9zdGFydHVwX2FjayhzLCA1MDAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IFNvdW5kU2NhcGUgZmFpbGVkIHRvIGluaXRpYWxpc2VcbiIpOwogCQlyZXQgPSAtRUFHQUlOOwogCX0KQEAgLTczMiwxMyArNzI0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlzZXRfaG9zdF9tb2RlX3Vuc2FmZShzLT5pb19iYXNlKTsKLQotCWlmIChob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9HRVRfTUlESV9WT0wsIDEwMCkpIHsKLQkJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhvc3RfcmVhZF9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCAxMDApOwotCX0KLQotCXNldF9taWRpX21vZGVfdW5zYWZlKHMtPmlvX2Jhc2UpOworCXVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzLT5taWRpX3ZvbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzMsNiArNzU5LDcgQEAKIAljaGFuZ2UgPSAoaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfU0VUX01JRElfVk9MLCAxMDApCiAJICAgICAgICAgICYmIGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgKCh1bnNpZ25lZCBjaGFyKSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLiB2YWx1ZVswXSkgJiAxMjcsIDEwMCkKIAkgICAgICAgICAgJiYgaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfWFhYX01JRElfVk9MLCAxMDApKTsKKwlzLT5taWRpX3ZvbCA9ICh1bnNpZ25lZCBjaGFyKSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTI3OwogICAgICAgX19za2lwX2NoYW5nZToKIAogCS8qCkBAIC04MTUsMTIgKzgwMiwxMSBAQAogICogUGVyZm9ybSBjZXJ0YWluIGFyY2FuZSBwb3J0LWNoZWNrcyB0byBzZWUgd2hldGhlciB0aGVyZQogICogaXMgYSBTb3VuZFNjYXBlIGJvYXJkIGx1cmtpbmcgYmVoaW5kIHRoZSBnaXZlbiBwb3J0cy4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgZGV0ZWN0X3NzY2FwZShzdHJ1Y3Qgc291bmRzY2FwZSAqcykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRldGVjdF9zc2NhcGUoc3RydWN0IHNvdW5kc2NhcGUgKnMsIGxvbmcgd3NzX2lvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgZDsKIAlpbnQgcmV0dmFsID0gMDsKLQlpbnQgY29kZWMgPSBzLT53c3NfYmFzZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAKQEAgLTgzNiwxMyArODIyLDExIEBACiAJaWYgKChkICYgMHg4MCkgIT0gMCkKIAkJZ290byBfZG9uZTsKIAotCWlmIChkID09IDApIHsKLQkJcy0+Y29kZWNfdHlwZSA9IDE7CisJaWYgKGQgPT0gMCkKIAkJcy0+aWNfdHlwZSA9IElDX09ESUU7Ci0JfSBlbHNlIGlmICgoZCAmIDB4NjApICE9IDApIHsKLQkJcy0+Y29kZWNfdHlwZSA9IDI7CisJZWxzZSBpZiAoKGQgJiAweDYwKSAhPSAwKQogCQlzLT5pY190eXBlID0gSUNfT1BVUzsKLQl9IGVsc2UKKwllbHNlCiAJCWdvdG8gX2RvbmU7CiAKIAlvdXRiKDB4ZmEsIE9ESUVfQUREUl9JTyhzLT5pb19iYXNlKSk7CkBAIC04NjIsMTAgKzg0NiwxMCBAQAogCXNzY2FwZV93cml0ZV91bnNhZmUocy0+aW9fYmFzZSwgR0FfSE1DVExfUkVHLCBkIHwgMHhjMCk7CiAKIAlpZiAocy0+dHlwZSA9PSBTU0NBUEVfVklWTykKLQkJY29kZWMgKz0gNDsKKwkJd3NzX2lvICs9IDQ7CiAJLyogd2FpdCBmb3IgV1NTIGNvZGVjICovCiAJZm9yIChkID0gMDsgZCA8IDUwMDsgZCsrKSB7Ci0JCWlmICgoaW5iKGNvZGVjKSAmIDB4ODApID09IDApCisJCWlmICgoaW5iKHdzc19pbykgJiAweDgwKSA9PSAwKQogCQkJYnJlYWs7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJbXNsZWVwKDEpOwpAQCAtOTU1LDgyICs5MzksNiBAQAogCiAKIC8qCi0gKiBPdmVycmlkZSBmb3IgdGhlIENTNDIzMSBwbGF5YmFjayBmb3JtYXQgZnVuY3Rpb24uCi0gKiBUaGUgQUQxODQ1IGhhcyBtdWNoIHNpbXBsZXIgZm9ybWF0IGFuZCByYXRlIHNlbGVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgYWQxODQ1X3BsYXliYWNrX2Zvcm1hdChzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwKLQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgICB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyoKLQkgKiBUaGUgQUQxODQ1IGNhbid0IGhhbmRsZSBzYW1wbGUgZnJlcXVlbmNpZXMKLQkgKiBvdXRzaWRlIG9mIDQga0haIHRvIDUwIGtIWgotCSAqLwotCWlmIChyYXRlID4gNTAwMDApCi0JCXJhdGUgPSA1MDAwMDsKLQllbHNlIGlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KLQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKLQkgKiB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KLQkgKiByZWdpc3RlciBpcyBzZXQuCi0JICogCi0JICogTk9URTogV2Ugc2VlbSB0byBuZWVkIHRvIHdyaXRlIHRvIHRoZSBNU0IgYmVmb3JlIHRoZSBMU0IKLQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KLQkgKi8KLQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUExBWUJLX0ZPUk1BVCwgKGZvcm1hdCAmIDB4ZjApKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTVNCLCAodW5zaWduZWQgY2hhcikgKHJhdGUgPj4gOCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9MU0IsICh1bnNpZ25lZCBjaGFyKSByYXRlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBPdmVycmlkZSBmb3IgdGhlIENTNDIzMSBjYXB0dXJlIGZvcm1hdCBmdW5jdGlvbi4gCi0gKiBUaGUgQUQxODQ1IGhhcyBtdWNoIHNpbXBsZXIgZm9ybWF0IGFuZCByYXRlIHNlbGVjdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgYWQxODQ1X2NhcHR1cmVfZm9ybWF0KHN0cnVjdCBzbmRfd3NzICpjaGlwLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyoKLQkgKiBUaGUgQUQxODQ1IGNhbid0IGhhbmRsZSBzYW1wbGUgZnJlcXVlbmNpZXMgCi0JICogb3V0c2lkZSBvZiA0IGtIWiB0byA1MCBrSFoKLQkgKi8KLQlpZiAocmF0ZSA+IDUwMDAwKQotCQlyYXRlID0gNTAwMDA7Ci0JZWxzZSBpZiAocmF0ZSA8IDQwMDApCi0JCXJhdGUgPSA0MDAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBwbGF5YmFjayBzdHJlYW0uCi0JICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCi0JICogdGhlIENBUFRVUkVfRU5BQkxFIGJpdCBvZiB0aGUgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24KLQkgKiByZWdpc3RlciBpcyBzZXQuCi0JICoKLQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgotCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgotCSAqLwotCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoZm9ybWF0ICYgMHhmMCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9NU0IsICh1bnNpZ25lZCBjaGFyKSAocmF0ZSA+PiA4KSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX0xTQiwgKHVuc2lnbmVkIGNoYXIpIHJhdGUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKICAqIENyZWF0ZSBhbiBBRDE4NDUgUENNIHN1YmRldmljZSBvbiB0aGUgU291bmRTY2FwZS4gVGhlIEFEMTg0NQogICogaXMgdmVyeSBtdWNoIGxpa2UgYSBDUzQyMzEsIHdpdGggYSBmZXcgZXh0cmEgYml0cy4gV2Ugd2lsbAogICogdHJ5IHRvIHN1cHBvcnQgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZXh0cmEgYml0cyBieSBvdmVycmlkaW5nCkBAIC0xMDU1LDExICs5NjMsNiBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCi0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9FTkFCTEUgIDB4MDgKLQotI2RlZmluZSBBRDE4NDVfUFdSX0RPV05fQ1RSTCAgIDB4MWIKLSNkZWZpbmUgQUQxODQ1X0NSWVNfQ0xPQ0tfU0VMICAweDFkCi0KIC8qCiAgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgUExBWUJBQ0tfRU5BQkxFIGJpdCBpcyBzZXQKICAqIGJ5IHRoZSBsb3dsZXZlbCBkcml2ZXIgLi4uCkBAIC0xMDc0LDcgKzk3Nyw2IEBACiAgKi8KIAogCQlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7Ci0JCQlpbnQgdmFsOwogCQkJLyoKIAkJCSAqIFRoZSBpbnB1dCBjbG9jayBmcmVxdWVuY3kgb24gdGhlIFNvdW5kU2NhcGUgbXVzdAogCQkJICogYmUgMTQuMzE4MTggTUh6LCBiZWNhdXNlIHdlIG11c3Qgc2V0IHRoaXMgcmVnaXN0ZXIKQEAgLTEwODIsMjIgKzk4NCwxMCBAQAogCQkJICovCiAJCQlzbmRfd3NzX21jZV91cChjaGlwKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0NSWVNfQ0xPQ0tfU0VMLCAweDIwKTsKKwkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9DTE9DSywgMHgyMCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAotCQkJLyoKLQkJCSAqIE1vcmUgY3VzdG9tIGNvbmZpZ3VyYXRpb246Ci0JCQkgKiBhKSBzZWxlY3QgIm1vZGUgMiIgYW5kIHByb3ZpZGUgYSBjdXJyZW50IGRyaXZlIG9mIDhtQQotCQkJICogYikgZW5hYmxlIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKGZvciBjYXB0dXJlL3BsYXliYWNrKQotCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9NSVNDX0lORk8sCi0JCQkJICAgIENTNDIzMV9NT0RFMiB8IDB4MTApOwotCQkJdmFsID0gc25kX3dzc19pbihjaGlwLCBBRDE4NDVfUFdSX0RPV05fQ1RSTCk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfUFdSX0RPV05fQ1RSTCwKLQkJCQkgICAgdmFsIHwgQUQxODQ1X0ZSRVFfU0VMX0VOQUJMRSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7CkBAIC0xMTEzLDExICsxMDAzLDEzIEBACiAJCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKIAkJCWdvdG8gX2Vycm9yOwogCQl9Ci0JCWVyciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCwgTlVMTCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHRpbWVyIGRldmljZSAiCi0JCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKLQkJCWdvdG8gX2Vycm9yOworCQlpZiAoY2hpcC0+aGFyZHdhcmUgIT0gV1NTX0hXX0FEMTg0OCkgeworCQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyB0aW1lciBkZXZpY2UgIgorCQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOworCQkJCWdvdG8gX2Vycm9yOworCQkJfQogCQl9CiAKIAkJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewpAQCAtMTEyOCw4ICsxMDIwLDYgQEAKIAkJCQkJCSAgICAiTUlESSBtaXhlciBjb250cm9sXG4iKTsKIAkJCQlnb3RvIF9lcnJvcjsKIAkJCX0KLQkJCWNoaXAtPnNldF9wbGF5YmFja19mb3JtYXQgPSBhZDE4NDVfcGxheWJhY2tfZm9ybWF0OwotCQkJY2hpcC0+c2V0X2NhcHR1cmVfZm9ybWF0ID0gYWQxODQ1X2NhcHR1cmVfZm9ybWF0OwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNvdW5kU2NhcGUiKTsKQEAgLTExNTcsNyArMTA0Nyw2IEBACiAJdW5zaWduZWQgZG1hX2NmZzsKIAl1bnNpZ25lZCBpcnFfY2ZnOwogCXVuc2lnbmVkIG1wdV9pcnFfY2ZnOwotCXVuc2lnbmVkIHhwb3J0OwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOwogCXN0cnVjdCByZXNvdXJjZSAqd3NzX3JlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE3NywxNSArMTA2NiwxNSBAQAogCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogSW52YWxpZCBJUlEgJWRcbiIsIG1wdV9pcnFbZGV2XSk7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCXhwb3J0ID0gcG9ydFtkZXZdOwogCiAJLyoKIAkgKiBHcmFiIElPIHBvcnRzIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHByb2JlIHNvIHRoYXQgd2UKIAkgKiBjYW4gZGV0ZWN0IGFuZCBjb250cm9sIHRoaXMgaGFyZHdhcmUgLi4uCiAJICovCi0JaW9fcmVzID0gcmVxdWVzdF9yZWdpb24oeHBvcnQsIDgsICJTb3VuZFNjYXBlIik7CisJaW9fcmVzID0gcmVxdWVzdF9yZWdpb24ocG9ydFtkZXZdLCA4LCAiU291bmRTY2FwZSIpOwogCWlmICghaW9fcmVzKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogY2FuJ3QgZ3JhYiBwb3J0IDB4JXhcbiIsIHhwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgInNzY2FwZTogY2FuJ3QgZ3JhYiBwb3J0IDB4JWx4XG4iLCBwb3J0W2Rldl0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAl3c3NfcmVzID0gTlVMTDsKQEAgLTEyMTIsMTAgKzExMDEsOSBAQAogCXNwaW5fbG9ja19pbml0KCZzc2NhcGUtPmZ3bG9jayk7CiAJc3NjYXBlLT5pb19yZXMgPSBpb19yZXM7CiAJc3NjYXBlLT53c3NfcmVzID0gd3NzX3JlczsKLQlzc2NhcGUtPmlvX2Jhc2UgPSB4cG9ydDsKLQlzc2NhcGUtPndzc19iYXNlID0gd3NzX3BvcnRbZGV2XTsKKwlzc2NhcGUtPmlvX2Jhc2UgPSBwb3J0W2Rldl07CiAKLQlpZiAoIWRldGVjdF9zc2NhcGUoc3NjYXBlKSkgeworCWlmICghZGV0ZWN0X3NzY2FwZShzc2NhcGUsIHdzc19wb3J0W2Rldl0pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBoYXJkd2FyZSBub3QgZGV0ZWN0ZWQgYXQgMHgleFxuIiwgc3NjYXBlLT5pb19iYXNlKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBfcmVsZWFzZV9kbWE7CkBAIC0xMjg4LDEyICsxMTc2LDExIEBACiAJfQogI2RlZmluZSBNSURJX0RFVk5VTSAgMAogCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKLQkJZXJyID0gY3JlYXRlX21wdTQwMShjYXJkLCBNSURJX0RFVk5VTSwKLQkJCQkgICAgTVBVNDAxX0lPKHhwb3J0KSwgbXB1X2lycVtkZXZdKTsKKwkJZXJyID0gY3JlYXRlX21wdTQwMShjYXJkLCBNSURJX0RFVk5VTSwgcG9ydFtkZXZdLCBtcHVfaXJxW2Rldl0pOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IEZhaWxlZCB0byBjcmVhdGUgIgotCQkJCQkiTVBVLTQwMSBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCQkJTVBVNDAxX0lPKHhwb3J0KSk7CisJCQkJCSJNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwKKwkJCQkJcG9ydFtkZXZdKTsKIAkJCWdvdG8gX3JlbGVhc2VfZG1hOwogCQl9CiAKQEAgLTEzNTcsMTAgKzEyNDQsMTAgQEAKIAlzdHJ1Y3Qgc291bmRzY2FwZSAqc3NjYXBlOwogCWludCByZXQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJc3NjYXBlID0gZ2V0X2NhcmRfc291bmRzY2FwZShjYXJkKTsKIAlzc2NhcGUtPnR5cGUgPSBTU0NBUEU7CkBAIC0xNDYyLDEwICsxMzQ5LDEwIEBACiAJICogQ3JlYXRlIGEgbmV3IEFMU0Egc291bmQgY2FyZCBlbnRyeSwgaW4gYW50aWNpcGF0aW9uCiAJICogb2YgZGV0ZWN0aW5nIG91ciBoYXJkd2FyZSAuLi4KIAkgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJc3NjYXBlID0gZ2V0X2NhcmRfc291bmRzY2FwZShjYXJkKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKaW5kZXggNGMwOTViYy4uYTM0YWU3YiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCkBAIC0zMzgsMTUgKzMzOCwxNiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX3dhdmVmcm9udF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzbmRfd2F2ZWZyb250X2NhcmRfdCAqYWNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcgKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgICBzaXplb2Yoc25kX3dhdmVmcm9udF9jYXJkX3QpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc25kX3dhdmVmcm9udF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlhY2FyZC0+d2F2ZWZyb250LmlycSA9IC0xOwpAQCAtMzU3LDcgKzM1OCw4IEBACiAJYWNhcmQtPndhdmVmcm9udC5jYXJkID0gY2FyZDsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfd2F2ZWZyb250X2ZyZWU7CiAKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTUxLDExICs1NTMsMTEgQEAKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCXNuZF9wcmludGsoInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IENTNDIzMiBwb3J0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChpY3MyMTE1X3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBJQ1MyMTE1IHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IElDUzIxMTUgcG9ydFxuIik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTU2Nyw5ICs1NjksOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfd2F2ZWZyb250X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNjE2LDkgKzYxOCw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoc25kX3dhdmVmcm9udF9wbnAgKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSA8IDApIHsKIAkJaWYgKGNzNDIzMl9wY21fcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKaW5kZXggNGM0MTA4Mi4uYmViMzEyYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCkBAIC02MzMsNyArNjMzLDcgQEAKIAkJd2J1ZlsxXSA9IGkgPj4gNzsKIAogCQlpZiAoc25kX3dhdmVmcm9udF9jbWQgKGRldiwgV0ZDX0lERU5USUZZX1NBTVBMRV9UWVBFLCByYnVmLCB3YnVmKSkgewotCQkJc25kX3ByaW50aygiY2Fubm90IGlkZW50aWZ5IHNhbXBsZSAiCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiY2Fubm90IGlkZW50aWZ5IHNhbXBsZSAiCiAJCQkJICAgInR5cGUgb2Ygc2xvdCAlZFxuIiwgaSk7CiAJCQlkZXYtPnNhbXBsZV9zdGF0dXNbaV0gPSBXRl9TVF9FTVBUWTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMgYi9zb3VuZC9pc2Evd3NzL3dzc19saWIuYwppbmRleCAzZDZjNWYyLi41ZDJiYTFiNzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0xODEsMjUgKzE4MSw2IEBACiAJCXVkZWxheSgxMDApOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfd3NzX291dG0oc3RydWN0IHNuZF93c3MgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBjaGFyIHRtcCA9IChjaGlwLT5pbWFnZVtyZWddICYgbWFzaykgfCB2YWx1ZTsKLQotCXNuZF93c3Nfd2FpdChjaGlwKTsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0JaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXRtOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKLSNlbmRpZgotCWNoaXAtPmltYWdlW3JlZ10gPSB0bXA7Ci0JaWYgKCFjaGlwLT5jYWxpYnJhdGVfbXV0ZSkgewotCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwotCQl3bWIoKTsKLQkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB0bXApOwotCQltYigpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgc25kX3dzc19kb3V0KHN0cnVjdCBzbmRfd3NzICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewpAQCAtMjE5LDcgKzIwMCw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAib3V0OiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICIKKwkJCSAgICItIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CiAjZW5kaWYKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdmFsdWUpOwpAQCAtMjM1LDcgKzIxNyw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleFxuIiwgcmVnKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbjogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAiCisJCQkgICAiLSByZWcgPSAweCV4XG4iLCByZWcpOwogI2VuZGlmCiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKIAltYigpOwpAQCAtMjUyLDcgKzIzNSw3IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB2YWwpOwogCWNoaXAtPmVpbWFnZVtDUzQyMzZfUkVHKHJlZyldID0gdmFsOwogI2lmIDAKLQlwcmludGsoImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CiAjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9leHRfb3V0KTsKQEAgLTI2OCw3ICsyNTEsOCBAQAogCXsKIAkJdW5zaWduZWQgY2hhciByZXM7CiAJCXJlcyA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUcpKTsKLQkJcHJpbnRrKCJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLAorCQkgICAgICAgcmVnLCByZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMzk0LDEzICszNzgsMTYgQEAKIAlzbmRfd3NzX3dhaXQoY2hpcCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAljaGlwLT5tY2VfYml0IHw9IENTNDIzMV9NQ0U7CiAJdGltZW91dCA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJtY2VfdXAgWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfdXAgWzB4JWx4XTogIgorCQkJICAgInNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQpOwogCWlmICghKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSkKIAkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLAogCQkJIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKQEAgLTQxOSw3ICs0MDYsOSBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XSAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLCAobG9uZylDUzQyMzFQKFJFR1NFTCkpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1jZV9kb3duIFsweCVseF0gLSAiCisJCQkgICAiYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsCisJCQkgICAobG9uZylDUzQyMzFQKFJFR1NFTCkpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJY2hpcC0+bWNlX2JpdCAmPSB+Q1M0MjMxX01DRTsKQEAgLTQyNyw3ICs0MTYsOSBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfZG93biBbMHglbHhdOiAiCisJCQkgICAic2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLAorCQkJICAgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fCAhKGNoaXAtPmhhcmR3YXJlICYgaHdfbWFzaykpCiAJCXJldHVybjsKIApAQCAtNTY1LDcgKzU1Niw3IEBACiAJaWYgKGNoYW5uZWxzID4gMSkKIAkJcmZvcm1hdCB8PSBDUzQyMzFfU1RFUkVPOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJnZXRfZm9ybWF0OiAweCV4IChtb2RlPTB4JXgpXG4iLCBmb3JtYXQsIG1vZGUpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKICNlbmRpZgogCXJldHVybiByZm9ybWF0OwogfQpAQCAtNTg3LDcgKzU3OCwxNSBAQAogCQkJICAgICBjaGlwLT5pbWFnZVtDUzQyMzFfUklHSFRfSU5QVVRdKTsKIAkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MT09QQkFDSywKIAkJCSAgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX0xPT1BCQUNLXSk7CisJfSBlbHNlIHsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MRUZUX0lOUFVULAorCQkJICAgICAwKTsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9SSUdIVF9JTlBVVCwKKwkJCSAgICAgMCk7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTE9PUEJBQ0ssCisJCQkgICAgIDB4ZmQpOwogCX0KKwogCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfQVVYMV9MRUZUX0lOUFVULAogCQkgICAgIG11dGUgfCBjaGlwLT5pbWFnZVtDUzQyMzFfQVVYMV9MRUZUX0lOUFVUXSk7CiAJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULApAQCAtNjMwLDcgKzYyOSw2IEBACiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bWNlX211dGV4KTsKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQ1M0MjMxQSB8fAogCSAgICAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNjQ2LDYgKzY0NCwyNCBAQAogCQkJZnVsbF9jYWxpYiA9IDA7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpIHsKKwkJdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwkJLyoKKwkJICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAocGRmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC02NjMsNyArNjc5LDYgQEAKIAkJCXVkZWxheSgxMDApOwkvKiB0aGlzIHNlZW1zIHRvIGhlbHAgKi8KIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTY3NSw3ICs2OTAsNiBAQAogCWludCBmdWxsX2NhbGliID0gMTsKIAogCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0NTNDIzMUEgfHwKIAkgICAgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTY5MCw2ICs3MDQsMjQgQEAKIAkJCWZ1bGxfY2FsaWIgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KSB7CisJCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJCS8qCisJCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBjYXB0dXJlIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoY2RmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC03MTQsNyArNzQ2LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTc3MSwxMCArODAyLDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICgxKVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMSlcbiIpOwogI2VuZGlmCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC03ODksMTggKzgyMSwyMCBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMilcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDIpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH5DUzQyMzFfQVVUT0NBTElCOworCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9JRkFDRV9DVFJMLCBjaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0pOwogCXNuZF93c3Nfb3V0KGNoaXAsCiAJCSAgICBDUzQyMzFfQUxUX0ZFQVRVUkVfMSwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgzKSAtIGFmZWkgPSAweCV4XG4iLAogCQkgICBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0pOwogI2VuZGlmCiAKQEAgLTgxNyw3ICs4NTEsNyBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoNClcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDQpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC04MjcsOSArODYxLDEwIEBACiAJCQkgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX1JFQ19GT1JNQVRdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CisJc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg1KVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoNSlcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTg4NSw4ICs5MjAsNiBAQAogCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm47CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7Ci0KIAkvKiBkaXNhYmxlIElSUSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSkKQEAgLTkxOSw4ICs5NTIsNiBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoU1RBVFVTKSwgMCk7CS8qIGNsZWFyIElSUSAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwotCiAJY2hpcC0+bW9kZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIH0KQEAgLTExMTMsNyArMTE0NCw3IEBACiAJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKQogCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFNUQVRVUyksIDApOwogCWVsc2UKLQkJc25kX3dzc19vdXRtKGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCBzdGF0dXMsIDApOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgc3RhdHVzKTsKIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEyNzgsNyArMTMwOSw4IEBACiAJCX0gZWxzZSBpZiAocmV2ID09IDB4MDMpIHsKIAkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzNkI7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXhcbiIsIHJldik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgInVua25vd24gQ1MgY2hpcCB3aXRoIHZlcnNpb24gMHgleFxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwkJLyogdW5rbm93biBDUzQyMzEgY2hpcD8gKi8KIAkJfQogCX0KQEAgLTEzMTQsNiArMTM0NiwxMCBAQAogCQljaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMl0gPQogCQkJY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0lOVEVSV0FWRSA/IDB4YzIgOiAweDAxOwogCX0KKwkvKiBlbmFibGUgZmluZSBncmFpbmVkIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkKKwkJY2hpcC0+aW1hZ2VbQUQxODQ1X1BXUl9ET1dOXSA9IDg7CisKIAlwdHIgPSAodW5zaWduZWQgY2hhciAqKSAmY2hpcC0+aW1hZ2U7CiAJcmVnbnVtID0gKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSA/IDE2IDogMzI7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKQEAgLTEzNDIsNyArMTM3OCwxMCBAQAogCQkJCWNhc2UgNjoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzUgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzUgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MGIpIHsJLyogQ1M0MjM2L0IgKi8KIAkJCQlzd2l0Y2ggKGlkID4+IDUpIHsKQEAgLTEzNTMsNyArMTM5MiwxMCBAQAogCQkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzZCOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzNiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzNiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOCkgewkvKiBDUzQyMzdCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM3QjsKQEAgLTEzNjQsNyArMTQwNiwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzdCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM3QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOSkgewkvKiBDUzQyMzhCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM4QjsKQEAgLTEzNzQsNyArMTQxOSwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzhCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM4QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgxZSkgewkvKiBDUzQyMzkgKi8KIAkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzk7CkBAIC0xMzg0LDEwICsxNDMyLDE1IEBACiAJCQkJY2FzZSA2OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzOSBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzOSBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwICIKKwkJCQkJICAgIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE2MTgsNyArMTY3MSw4IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJkb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gIgorCQkJICAgIi0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fAogCSAgICAhKGNoaXAtPmhhcmR3YXJlICYgKFdTU19IV19DUzQyMzFfTUFTSyB8IFdTU19IV19DUzQyMzJfTUFTSykpKSB7CiAJCXJldHVybjsKQEAgLTE2MjgsNyArMTY4Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKQoraW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKIHsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19jcG9ydCk7CkBAIC0xNjUxLDYgKzE3MDUsNyBAQAogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChzbmRfd3NzX2ZyZWUpOwogCiBzdGF0aWMgaW50IHNuZF93c3NfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTE4MjAsNyArMTg3NSw4IEBACiAjaWYgMAogCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykgewogCQlpZiAoY2hpcC0+cmVzX2Nwb3J0ID09IE5VTEwpCi0JCQlzbmRfcHJpbnRrKCJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSBub3QgYWNjZXNzaWJsZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSAiCisJCQkJICAgIm5vdCBhY2Nlc3NpYmxlXG4iKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggMTg4MWNlYy4uM2U3NjNkNiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9hdTF4MDAuYworKysgYi9zb3VuZC9taXBzL2F1MXgwMC5jCkBAIC02MzYsOSArNjM2LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYXUxMDAwICphdTEwMDA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCAiQUM5NyIsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoLTEsICJBQzk3IiwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYXUxMDAwX2ZyZWU7CiAJYXUxMDAwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpAQCAtNjc4LDcgKzY3OSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpbnRrKCBLRVJOX0lORk8gIkFMU0EgQUM5NzogRHJpdmVyIEluaXRpYWxpemVkXG4iICk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQUxTQSBBQzk3OiBEcml2ZXIgSW5pdGlhbGl6ZWRcbiIpOwogCWF1MTAwMF9jYXJkID0gY2FyZDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggZGI0OTViZS4uYzUyNjkxYyAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTg3OCw5ICs4NzgsOSBAQAogCXN0cnVjdCBzbmRfaGFsMiAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaGFsMl9jcmVhdGUoY2FyZCwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IDRjNjM1MDQuLjY2ZjNiNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC05MzYsOSArOTM2LDkgQEAKIAlzdHJ1Y3Qgc25kX3NnaW8yYXVkaW8gKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9zZ2lvMmF1ZGlvX2NyZWF0ZShjYXJkLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCA3Y2Y5OTEzLi5kMTJiZDk4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAl3aGlsZSAodGltZW91dCA+IDAgJiYgKGFkX3JlYWQoZGV2YywgMTEpICYgMHgyMCkpCiAJCXRpbWVvdXQtLTsKIAlpZiAoYWRfcmVhZChkZXZjLCAxMSkgJiAweDIwKQotCQlpZiAoIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1KSB8fCAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpKQorCQlpZiAoKGRldmMtPm1vZGVsICE9IE1EXzE4NDUpICYmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZDE4NDg6IEF1dG8gY2FsaWJyYXRpb24gdGltZWQgb3V0KDMpLlxuIik7CiB9CiAKQEAgLTIxMDcsNyArMjEwNyw3IEBACiAJc3dpdGNoIChjbWQpCiAJewogCQljYXNlIEFEMTg0OF9TRVRfWFRBTDoJLyogQ2hhbmdlIGNsb2NrIGZyZXF1ZW5jeSBvZiBBRDE4NDUgKG9ubHkgKSAqLwotCQkJaWYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDUgfHwgZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpCisJCQlpZiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSAmJiBkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZjLT5sb2NrLGZsYWdzKTsKIAkJCWFkX2VudGVyX01DRShkZXZjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKaW5kZXggODFlMWY0NC4uNDE5MWFjYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKQEAgLTE2MjcsNyArMTYyNyw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdWRpby5jIGIvc291bmQvb3NzL2F1ZGlvLmMKaW5kZXggODliZDI3YS4uYjY5YzA1YiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL2F1ZGlvLmMKQEAgLTQzMyw3ICs0MzMsOSBAQAogCQkJcmV0dXJuIGRtYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKIAkJCiAJCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hYnVmLmMgYi9zb3VuZC9vc3MvZG1hYnVmLmMKaW5kZXggMWU5MGQ3Ni4uMWJmY2Y3ZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYWJ1Zi5jCisrKyBiL3NvdW5kL29zcy9kbWFidWYuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlETUFidWZfbGF1bmNoX291dHB1dChkZXYsIGRtYXApOwogCQlhZGV2LT5kbWFwX291dC0+ZmxhZ3MgfD0gRE1BX1NZTkNJTkc7CiAJCWFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9IDA7Ci0JCXdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgbisrIDw9IGFkZXYtPmRtYXBfb3V0LT5uYnVmcyAmJiAKKwkJd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiBuKysgPCBhZGV2LT5kbWFwX291dC0+bmJ1ZnMgJiYKIAkJICAgICAgIGFkZXYtPmRtYXBfb3V0LT5xbGVuICYmIGFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9PSAwKSB7CiAJCQlsb25nIHQgPSBkbWFidWZfdGltZW91dChkbWFwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXAtPmxvY2ssZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwppbmRleCAzODkzMWYyLi4xZjQ3NzQxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwpAQCAtMTUyNCw3ICsxNTI0LDcgQEAKIAkuc3BlZWQJPSA4MDAwCiB9IDsKIAotc3RhdGljIE1BQ0hJTkUgbWFjaFRUID0geworc3RhdGljIF9faW5pdGRhdGEgTUFDSElORSBtYWNoVFQgPSB7CiAJLm5hbWUJCT0gIkF0YXJpIiwKIAkubmFtZTIJCT0gIlRUIiwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCS5jYXBhYmlsaXRpZXMJPSAgRFNQX0NBUF9CQVRDSAkvKiBBcyBwZXIgU05EQ1RMX0RTUF9HRVRDQVBTICovCiB9OwogCi1zdGF0aWMgTUFDSElORSBtYWNoRmFsY29uID0geworc3RhdGljIF9faW5pdGRhdGEgTUFDSElORSBtYWNoRmFsY29uID0gewogCS5uYW1lCQk9ICJBdGFyaSIsCiAJLm5hbWUyCQk9ICJGQUxDT04iLAogCS5kbWFfYWxsb2MJPSBBdGFBbGxvYywKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wYXMyX2NhcmQuYyBiL3NvdW5kL29zcy9wYXMyX2NhcmQuYwppbmRleCAyNWYzYTIyLi43ZjM3N2VjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKKysrIGIvc291bmQvb3NzL3BhczJfY2FyZC5jCkBAIC0xNTYsOSArMTU2LDcgQEAKIAkJCQkJCSAqIDB4ODAKIAkJCQkJCSAqLyAsIDB4Qjg4KTsKIAotCXBhc193cml0ZSgweDgwCi0JCSAgfCBqb3lzdGljaz8weDQwOjAKLQkJICAsMHhGMzg4KTsKKwlwYXNfd3JpdGUoMHg4MCB8IChqb3lzdGljayA/IDB4NDAgOiAwKSwgMHhGMzg4KTsKIAogCWlmIChwYXNfaXJxIDwgMCB8fCBwYXNfaXJxID4gMTUpCiAJewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IDE2ZWQwNjkuLjE2NTE3YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTQ1NywxMCArNDU3LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3ZvbHVtZV9tb25vKHVuc2lnbmVkIF9fdXNlciAqcCwgaW50ICphbGVmdCkKK3N0YXRpYyBpbnQgc2V0X3ZvbHVtZV9tb25vKHVuc2lnbmVkIF9fdXNlciAqcCwgdW5zaWduZWQgaW50ICphbGVmdCkKIHsKLQlpbnQgbGVmdDsKLQl1bnNpZ25lZCB2b2x1bWU7CisJdW5zaWduZWQgaW50IGxlZnQsIHZvbHVtZTsKIAlpZiAoZ2V0X3VzZXIodm9sdW1lLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJCkBAIC00NzEsMTAgKzQ3MCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF92b2x1bWVfc3RlcmVvKHVuc2lnbmVkIF9fdXNlciAqcCwgaW50ICphbGVmdCwgaW50ICphcmlnaHQpCitzdGF0aWMgaW50IHNldF92b2x1bWVfc3RlcmVvKHVuc2lnbmVkIF9fdXNlciAqcCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICphbGVmdCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICphcmlnaHQpCiB7Ci0JaW50IGxlZnQsIHJpZ2h0OwotCXVuc2lnbmVkIHZvbHVtZTsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgcmlnaHQsIHZvbHVtZTsKIAlpZiAoZ2V0X3VzZXIodm9sdW1lLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zZXF1ZW5jZXIuYyBiL3NvdW5kL29zcy9zZXF1ZW5jZXIuYwppbmRleCA1YzIxNWY3Li5jNzk4NzQ2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKKysrIGIvc291bmQvb3NzL3NlcXVlbmNlci5jCkBAIC0yMTIsNyArMjEyLDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGV2ZW50X3JlY1tFVl9TWl0sIGV2X2NvZGU7CiAJaW50IHAgPSAwLCBjLCBldl9zaXplOwotCWludCBlcnI7CiAJaW50IG1vZGUgPSB0cmFuc2xhdGVfbW9kZShmaWxlKTsKIAogCWRldiA9IGRldiA+PiA0OwpAQCAtMjg1LDcgKzI4NCw3IEBACiAJCXsKIAkJCWlmICghbWlkaV9vcGVuZWRbZXZlbnRfcmVjWzJdXSkKIAkJCXsKLQkJCQlpbnQgbW9kZTsKKwkJCQlpbnQgZXJyLCBtb2RlOwogCQkJCWludCBkZXYgPSBldmVudF9yZWNbMl07CiAKIAkJCQlpZiAoZGV2ID49IG1heF9taWRpZGV2IHx8IG1pZGlfZGV2c1tkZXZdPT1OVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IGU1ZDQyMzkuLjc4Y2ZiNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTEzNSw3ICsxMzUsOSBAQAogCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9VOCwgKGludCAqKWFyZyk7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IDQxNTYyZWMuLjFlZGFiN2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtMjIwMCw3ICsyMjAwLDkgQEAKIAkJCQkgICAgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Z3c25kLmMgYi9zb3VuZC9vc3MvdndzbmQuYwppbmRleCA3OGI4YWNjLi4xODdmNzI3IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdndzbmQuYworKysgYi9zb3VuZC9vc3MvdndzbmQuYwpAQCAtMjY3Myw3ICsyNjczLDkgQEAKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoJLyogX1NJTyAgKCdQJywxNCkgKi8KIAkJREJHWCgiU05EQ1RMX0RTUF9OT05CTE9DS1xuIik7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CQkvKiBfU0lPICAoJ1AnLCAwKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggNDFmODcwZi4uNjA1NWZkNiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC05NzUsOSArOTc1LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9oYXJtb255ICpoOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2hhcm1vbnlfY3JlYXRlKGNhcmQsIHBhZGV2LCAmaCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDgyYjliZGQuLmNhMjVlNjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC00MDAsNiArNDAwLDI2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvZGoKIAorY29uZmlnIFNORF9JTkRJR09JT1gKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgSW5kaWdvIElPeCIKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBJbmRpZ28gSU94LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvaW94CisKK2NvbmZpZyBTTkRfSU5ESUdPREpYCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBESngiCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gSW5kaWdvIERKeC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2RqeAorCiBjb25maWcgU05EX0VNVTEwSzEKIAl0cmlzdGF0ZSAiRW11MTBrMSAoU0IgTGl2ZSEsIEF1ZGlneSwgRS1tdSBBUFMpIgogCXNlbGVjdCBGV19MT0FERVIKQEAgLTc0NCw3ICs3NjQsOCBAQAogCXNlbGVjdCBTTkRfT1hZR0VOX0xJQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIgYW5kIEQyWC4KKwkgIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgYW5kCisJICBFc3NlbmNlIFNUWC4KIAkgIFN1cHBvcnQgZm9yIHRoZSBIREFWMS4zIChEZWx1eGUpIGlzIHZlcnkgZXhwZXJpbWVudGFsLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggZTJiODQzYi4uOTdlZTEyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiB7IDB4NDM1MjU5NzAsIDB4ZmZmZmZmZjgsICJDUzQyMDIiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg0MzU4NTQyMSwgMHhmZmZmZmZmZiwgIkhTRDExMjQ2IiwJCU5VTEwsCQlOVUxMIH0sCS8vIFNtYXJ0TUMgSUkKIHsgMHg0MzU4NTQyOCwgMHhmZmZmZmZmOCwgIkN4MjA0NjgiLAkJcGF0Y2hfY29uZXhhbnQsCU5VTEwgfSwgLy8gU21hcnRBTUMgZml4bWU6IHRoZSBtYXNrIG1pZ2h0IGJlIGRpZmZlcmVudAoreyAweDQzNTg1NDMwLCAweGZmZmZmZmZmLCAiQ3gyMDQ2OC0zMSIsCQlwYXRjaF9jb25leGFudCwgTlVMTCB9LAogeyAweDQzNTg1NDMxLCAweGZmZmZmZmZmLCAiQ3gyMDU1MSIsICAgICAgICAgICBwYXRjaF9jeDIwNTUxLCAgTlVMTCB9LAogeyAweDQ0NTQzMDMxLCAweGZmZmZmZmYwLCAiRFQwMzk4IiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDU0ZDQzMjgsIDB4ZmZmZmZmZmYsICJFTTI4MDI4IiwJCU5VTEwsCQlOVUxMIH0sICAvLyBzYW1lIGFzIFRSMjgwMjg/CkBAIC0zODMsNyArMzg0LDcgQEAKIAogRVhQT1JUX1NZTUJPTChzbmRfYWM5N191cGRhdGVfYml0cyk7CiAKLS8qIG5vIGxvY2sgdmVyc2lvbiAtIHNlZSBzbmRfYWM5N191cGRhdF9iaXRzKCkgKi8KKy8qIG5vIGxvY2sgdmVyc2lvbiAtIHNlZSBzbmRfYWM5N191cGRhdGVfYml0cygpICovCiBpbnQgc25kX2FjOTdfdXBkYXRlX2JpdHNfbm9sb2NrKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbHVlKQogewpAQCAtMTY0Myw3ICsxNjQ0LDEwIEBACiB7CiAJaW50IGVyciwgaWR4OwogCi0JLy9wcmludGsoIkFDOTdfR1BJT19DRkcgPSAleFxuIixzbmRfYWM5N19yZWFkKGFjOTcsQUM5N19HUElPX0NGRykpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIkFDOTdfR1BJT19DRkcgPSAleFxuIiwKKwkgICAgICAgc25kX2FjOTdfcmVhZChhYzk3LEFDOTdfR1BJT19DRkcpKTsKKwkqLwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19DRkcsIDB4ZmZmZiAmIH4oQUM5N19HUElPX0xJTkUxX09IKSk7CiAJc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19HUElPX1BPTEFSSVRZLCAweGZmZmYgJiB+KEFDOTdfR1BJT19MSU5FMV9PSCkpOwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19TVElDS1ksIDB4ZmZmZik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCmluZGV4IDA2MGVhNTkuLjczYjE3ZDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCkBAIC0xMjUsNiArMTI1LDggQEAKICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiUENJIFN1YnN5cyBEZXZpY2U6IDB4JTA0eFxuXG4iLAogICAgICAgICAgICAgICAgICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAorCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZsYWdzOiAleFxuIiwgYWM5Ny0+ZmxhZ3MpOworCiAJaWYgKChhYzk3LT5leHRfaWQgJiBBQzk3X0VJX1JFVl9NQVNLKSA+PSBBQzk3X0VJX1JFVl8yMykgewogCQl2YWwgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfSU5UX1BBR0lORyk7CiAJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfSU5UX1BBR0lORywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBhN2YzOGU2Li5kMWYyNDJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC05OTUsMTAgKzk5NSwxMCBAQAogCX0KIAogCS8qICgyKSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAJLyogWFhYIFJFVklTSVQ6IHdlIGNhbiBwcm9iYWJseSBhbGxvY2F0ZSBjaGlwIGluIHRoaXMgY2FsbCAqLwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFEMTg4OSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBbmFsb2cgRGV2aWNlcyBBRDE4ODkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYyBiL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYwppbmRleCAwZjgxOWRkLi5mZDEzNWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCkBAIC01MSw3ICs1MSw4IEBACiAJaW50IGlkeDsKIAkKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDB4MTk7IGlkeCsrKQotCQlwcmludGsoImFrNDUzMSAweCV4OiAweCV4XG4iLCBpZHgsIGFrNDUzMS0+cmVnc1tpZHhdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFrNDUzMSAweCV4OiAweCV4XG4iLAorCQkgICAgICAgaWR4LCBhazQ1MzEtPnJlZ3NbaWR4XSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDFhMGZkNjUuLjRlZGYyNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTIxNDIsNyArMjE0Miw3IEBACiB7CiAJaW50IGVycjsKIAotCXNuZF9hbGlfcHJpbnRrKCJyZXNvdWNlcyBhbGxvY2F0aW9uIC4uLlxuIik7CisJc25kX2FsaV9wcmludGsoInJlc291cmNlcyBhbGxvY2F0aW9uIC4uLlxuIik7CiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhjb2RlYy0+cGNpLCAiQUxJIDU0NTEiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWNvZGVjLT5pcnEgPSBjb2RlYy0+cGNpLT5pcnE7Ci0Jc25kX2FsaV9wcmludGsoInJlc291Y2VzIGFsbG9jYXRlZC5cbiIpOworCXNuZF9hbGlfcHJpbnRrKCJyZXNvdXJjZXMgYWxsb2NhdGVkLlxuIik7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW50IHNuZF9hbGlfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKQEAgLTIzMDcsOSArMjMwNyw5IEBACiAKIAlzbmRfYWxpX3ByaW50aygicHJvYmUgLi4uXG4iKTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2FsaV9jcmVhdGUoY2FyZCwgcGNpLCBwY21fY2hhbm5lbHMsIHNwZGlmLCAmY29kZWMpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczMwMC5jIGIvc291bmQvcGNpL2FsczMwMC5jCmluZGV4IDhkZjY4MjQuLjAwOWI0YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHMzMDAuYworKysgYi9zb3VuZC9wY2kvYWxzMzAwLmMKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgREVCVUdfUExBWV9SRUMJMAogCiAjaWYgREVCVUdfQ0FMTFMKLSNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpIHByaW50ayhLRVJOX0VSUiAiLS0+ICVzXG4iLCBfX2Z1bmNfXykKICNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKSBwcmludGsoS0VSTl9FUlIgIjwtLSAlc1xuIiwgX19mdW5jX18pCiAjZWxzZQpAQCAtODEyLDEwICs4MTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNoaXBfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IGJhNTcwMDUuLjU0MmEwYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtODg5LDEyICs4ODksMTMgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpLCBQQ0lfQ09NTUFORCwgd29yZCB8IFBDSV9DT01NQU5EX0lPKTsKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIAotCQkJICAgIHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8pOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIAorCQkJICAgICAgc2l6ZW9mKCphY2FyZCkgLyogcHJpdmF0ZV9kYXRhOiBhY2FyZCAqLywKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaSk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAyMjZmZTgyLi45Y2U4NTQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xNjQ1LDkgKzE2NDUsOSBAQAogCXN0cnVjdCBhdGlpeHAgKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsIHNwZGlmX2FjbGluayA/ICJBVElJWFAiIDogIkFUSUlYUC1TUERNQSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBVEkgSVhQIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggMGU2ZTVjYy4uYzMxMzZjYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMTI4OCw5ICsxMjg4LDkgQEAKIAlzdHJ1Y3QgYXRpaXhwX21vZGVtICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQVRJSVhQLU1PREVNIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkFUSSBJWFAgTW9kZW0iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCmluZGV4IGEzNmQ0ZDEuLjllYzEyMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwpAQCAtMjUwLDkgKzI1MCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAkvLyAoMikKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8vICgzKQogCWlmICgoZXJyID0gc25kX3ZvcnRleF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwppbmRleCA2NDk4NDllLi5mNGFhOGZmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKQEAgLTQ2Miw5ICs0NjIsMTAgQEAKIC8qIFJlc2V0IFNpbmdsZSBBM0Qgc291cmNlLiAqLwogc3RhdGljIHZvaWQgYTNkc3JjX1plcm9TdGF0ZShhM2RzcmNfdCAqIGEpCiB7Ci0KLQkvL3ByaW50aygidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsIGEtPnNsaWNlLCBhLT5zb3VyY2UpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBaZXJvU3RhdGUgc2xpY2U6ICVkLCBzb3VyY2UgJWRcbiIsCisJICAgICAgIGEtPnNsaWNlLCBhLT5zb3VyY2UpOworCSovCiAJYTNkc3JjX1NldEF0bW9zU3RhdGUoYSwgMCwgMCwgMCwgMCk7CiAJYTNkc3JjX1NldEhydGZTdGF0ZShhLCBBM2RIcmlyWmVyb3MsIEEzZEhyaXJaZXJvcyk7CiAJYTNkc3JjX1NldEl0ZERsaW5lKGEsIEEzZEl0ZERsaW5lWmVyb3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCmluZGV4IGIwNzBlNTcuLjM5MDZmNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKQEAgLTExMzUsNyArMTEzNSwxMCBAQAogCQkJc25kX3BjbV9zZ2J1Zl9nZXRfYWRkcihkbWEtPnN1YnN0cmVhbSwgMCkpOwogCQlicmVhazsKIAl9Ci0JLy9wcmludGsoInZvcnRleDogY2ZnMCA9IDB4JXhcbnZvcnRleDogY2ZnMT0weCV4XG4iLCBkbWEtPmNmZzAsIGRtYS0+Y2ZnMSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBjZmcwID0gMHgleFxudm9ydGV4OiBjZmcxPTB4JXhcbiIsCisJICAgICAgIGRtYS0+Y2ZnMCwgZG1hLT5jZmcxKTsKKwkqLwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzAgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzApOwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBWT1JURVhfQURCRE1BX0JVRkNGRzEgKyAoYWRiZG1hIDw8IDMpLCBkbWEtPmNmZzEpOwogCkBAIC0xOTU5LDcgKzE5NjIsNyBAQAogCQkJCQkgIEFEQl9DT0RFQ09VVCgwICsgNCkpOwogCQl2b3J0ZXhfY29ubmVjdGlvbl9taXhfYWRiKHZvcnRleCwgZW4sIDB4MTEsIG1peGVyc1szXSwKIAkJCQkJICBBREJfQ09ERUNPVVQoMSArIDQpKTsKLQkJLy9wcmludGsoIlNEQUMgZGV0ZWN0ZWQgIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJTREFDIGRldGVjdGVkICIpOyAqLwogCX0KICNlbHNlCiAJLy8gVXNlIHBsYWluIGRpcmVjdCBvdXRwdXQgdG8gY29kZWMuCkBAIC0yMDEzLDcgKzIwMTYsMTEgQEAKIAkJCQkJcmVzbWFwW3Jlc3R5cGVdIHw9ICgxIDw8IGkpOwogCQkJCWVsc2UKIAkJCQkJdm9ydGV4LT5kbWFfYWRiW2ldLnJlc291cmNlc1tyZXN0eXBlXSB8PSAoMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwgcmVzdHlwZSwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIG91dCAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjAyNCw3ICsyMDMxLDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBxdHk7IGkrKykgewogCQkJaWYgKHJlc21hcFtyZXN0eXBlXSAmICgxIDw8IGkpKSB7CiAJCQkJcmVzbWFwW3Jlc3R5cGVdICY9IH4oMSA8PCBpKTsKLQkJCQkvL3ByaW50aygidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIGluICVkXG4iLHJlc3R5cGUsIGkpOworCQkJCS8qCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBpbiAlZFxuIiwKKwkJCQkgICAgICAgcmVzdHlwZSwgaSk7CisJCQkJKi8KIAkJCQlyZXR1cm4gaTsKIAkJCX0KIAkJfQpAQCAtMjc4OSw3ICsyODAwLDcgQEAKIHsKIAlpbnQgYSwgdGhpc18xOTQ7CiAKLQlpZiAoKGJpdHMgIT0gOCkgfHwgKGJpdHMgIT0gMTYpKQorCWlmICgoYml0cyAhPSA4KSAmJiAoYml0cyAhPSAxNikpCiAJCXJldHVybiAtMTsKIAogCXN3aXRjaCAoZW5jb2QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCmluZGV4IDk3OGI4NTYuLjI4MDVlMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYwpAQCAtMjEzLDM4ICsyMTMsNTkgQEAKIAlzd2l0Y2ggKHJlZykgewogCQkvKiBWb2ljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCiAJY2FzZSAwOgkJLyogcnVubmluZyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1JVTih3dCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUlVOKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUlVOKHd0KSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJLyogcGFyYW0gMCAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwwKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMjoJCS8qIHBhcmFtIDEgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDEpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMSksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDEpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDM6CQkvKiBwYXJhbSAyICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwyKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDIpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAyKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSA0OgkJLyogcGFyYW0gMyAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMyksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwzKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMyksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgNjoJCS8qIG11dGUgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9NVVRFKHd0KSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfTVVURSh3dCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMHhiOgogCQl7CQkvKiBkZWxheSAqLwotCQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJCSAgICAgICBXVF9ERUxBWSh3dCwwKSwgKGludCl2YWwpOworCQkJKi8KIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMyksIHZhbCk7CiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDIpLCB2YWwpOwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAxKSwgdmFsKTsKQEAgLTI3Miw3ICsyOTMsOSBAQAogCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAJfQotCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgZWN4LCAoaW50KXZhbCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIGVjeCwgKGludCl2YWwpOworCSovCiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIGVjeCwgdmFsKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwppbmRleCBjN2M1NGU3Li44ZWVhMjlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKKysrIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCkBAIC0zNjgsOSArMzY4LDkgQEAKIAl9CiAKIAkvKiAoMikgQ3JlYXRlIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qICgzKSBDcmVhdGUgbWFpbiBjb21wb25lbnQgKi8KIAllcnIgPSBzbmRfYXcyX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDMzMzAwN2MuLmU5ZTliNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMjExLDI1ICsyMTEsMjUgQEAKICNlbmRpZgogCiAjaWYgREVCVUdfTUlYRVIKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX1BMQVlfUkVDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19NSVNDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19HQU1FCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2dhbWUoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCkBAIC0yMjE2LDkgKzIyMTYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBWkYzMzI4Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF6dGVjaCBBWkYzMzI4IChQQ0kxNjgpIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDFhYTFjMDQuLmEyOTkzNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04ODgsOSArODg4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9idDg3eF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMGU2MjIwNS4uZGY3NTc1NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMjU1LDYgKzI1NSwxNCBAQAogCSAgIC5ncGlvX3R5cGUgPSAyLAogCSAgIC5pMmNfYWRjID0gMSwKIAkgICAuc3BpX2RhYyA9IDEgfSAsCisJLyogR2lnYS1ieXRlIEdBLUcxOTc1WCBtb2JvCisJICogTm92ZWxsIGJuYyMzOTU4MDcKKwkgKi8KKwkvKiBGSVhNRTogdGhlIEdQSU8gYW5kIEkyQyBzZXR0aW5nIGFyZW4ndCB0ZXN0ZWQgd2VsbCAqLworCXsgLnNlcmlhbCA9IDB4MTQ1OGEwMDYsCisJICAubmFtZSA9ICJHaWdhLWJ5dGUgR0EtRzE5NzVYIiwKKwkgIC5ncGlvX3R5cGUgPSAxLAorCSAgLmkyY19hZGMgPSAxIH0sCiAJIC8qIFNodXR0bGUgWFBDIFNEMzFQIHdoaWNoIGhhcyBhbiBvbmJvYXJkIENyZWF0aXZlIExhYnMKIAkgICogU291bmQgQmxhc3RlciBMaXZlISAyNC1iaXQgRUFYCiAJICAqIGhpZ2gtZGVmaW5pdGlvbiA3LjEgYXVkaW8gcHJvY2Vzc29yIi4KQEAgLTQwNCw3ICs0MTIsOSBAQAogCX0KIAogCXRtcCA9IHJlZyA8PCAyNSB8IHZhbHVlIDw8IDE2OwotCS8vIHNuZF9wcmludGsoIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQy13cml0ZTpyZWc9MHgleCwgdmFsdWU9MHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJKi8KIAkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgSTJDIGNoYW5uZWwgY29udHJvbHMuICovCiAJLyogc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBJMkNfRDAsIDAsIHRtcCk7ICovCiAKQEAgLTQyMiw3ICs0MzIsNyBAQAogCQkvKiBXYWl0IHRpbGwgdGhlIHRyYW5zYWN0aW9uIGVuZHMgKi8KIAkJd2hpbGUgKDEpIHsKIAkJCXN0YXR1cyA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoZW11LCBJMkNfQSwgMCk7Ci0gICAgICAgICAgICAgICAgCS8vc25kX3ByaW50aygiSTJDOnN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOworCQkJLypzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQzpzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsqLwogCQkJdGltZW91dCsrOwogCQkJaWYgKChzdGF0dXMgJiBJMkNfQV9BRENfU1RBUlQpID09IDApCiAJCQkJYnJlYWs7CkBAIC01MjEsNyArNTMxLDEwIEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2UgPSAxOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJKi8KICAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfY2EwMTA2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKIAljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNjE0LDcgKzYyNywxMCBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlID0gMTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkvKgorICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkqLwogICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9jYTAxMDZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwogICAgICAgICBjaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQpAQCAtNzA1LDkgKzcyMSwyMCBAQAogCXUzMiByZWc3MTsKIAlpbnQgaTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCS8qIFJhdGUgY2FuIGJlIHNldCBwZXIgY2hhbm5lbC4gKi8KIAkvKiByZWc0MCBjb250cm9sIGhvc3QgdG8gZmlmbyAqLwogCS8qIHJlZzcxIGNvbnRyb2xzIERBQyByYXRlLiAqLwpAQCAtNzk5LDkgKzgyNiwyMCBAQAogCXUzMiByZWc3MV9zZXQgPSAwOwogCXUzMiByZWc3MTsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCAiCisJCSAgICJjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LAorCQkgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLAorCQkgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworICAgICAgICBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAkvKiByZWc3MSBjb250cm9scyBBREMgcmF0ZS4gKi8KIAlzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtODQ2LDcgKzg4NCwxNCBAQAogCX0KIAogCi0gICAgICAgIC8vcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJICAgICAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwKKwkgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwkqLwogCXNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgMHgxMywgY2hhbm5lbCwgMCk7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0RNQV9BRERSLCBjaGFubmVsLCBydW50aW1lLT5kbWFfYWRkcik7CiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCBDQVBUVVJFX0JVRkZFUl9TSVpFLCBjaGFubmVsLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpPDwxNik7IC8vIGJ1ZmZlciBzaXplIGluIGJ5dGVzCkBAIC04ODgsMTMgKzkzMywxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IGVwY20tPmNoYW5uZWxfaWQ7Ci0JCS8qIHNuZF9wcmludGsoImNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7ICovCisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxIDw8IGNoYW5uZWwpOwogCQlleHRlbmRlZCB8PSAoMHgxMCA8PCBjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLyogc25kX3ByaW50aygiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgZXh0ZW5kZWQ9MHgleFxuIixiYXNpYywgZXh0ZW5kZWQpOyAqLwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtOTcyLDggKzEwMTcsMTMgQEAKIAlwdHI9cHRyMjsKICAgICAgICAgaWYgKHB0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTk5NSw4ICsxMDQ1LDEzIEBACiAJcHRyPXB0cjI7CiAgICAgICAgIGlmIChwdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC0xMTgxLDggKzEyMzYsMTIgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAgICAgICAgIHN0YXQ3NiA9IHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgRVhURU5ERURfSU5ULCAwKTsKLQkvL3NuZF9wcmludGsoImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsIHN0YXR1cywgc3RhdDc2KTsKLQkvL3NuZF9wcmludGsoInB0cj0weCUwOHhcbiIsc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBQTEFZQkFDS19QT0lOVEVSLCAwKSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHgsIHN0YXQ3Nj0weCUwOHhcbiIsCisJCSAgIHN0YXR1cywgc3RhdDc2KTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInB0cj0weCUwOHhcbiIsCisJCSAgIHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgUExBWUJBQ0tfUE9JTlRFUiwgMCkpOworCSovCiAgICAgICAgIG1hc2sgPSAweDExOyAvKiAweDEgZm9yIG9uZSBoYWxmLCAweDEwIGZvciB0aGUgb3RoZXIgaGFsZiBwZXJpb2QuICovCiAJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXBjaGFubmVsID0gJihjaGlwLT5wbGF5YmFja19jaGFubmVsc1tpXSk7CkBAIC0xNDcwLDcgKzE1MjksNyBAQAogCQlpbnQgc2l6ZSwgbjsKIAogCQlzaXplID0gQVJSQVlfU0laRShpMmNfYWRjX2luaXQpOwotCQkvKiBzbmRfcHJpbnRrKCJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJJMkM6YXJyYXkgc2l6ZT0weCV4XG4iLCBzaXplKTsgKi8KIAkJZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykKIAkJCXNuZF9jYTAxMDZfaTJjX3dyaXRlKGNoaXAsIGkyY19hZGNfaW5pdFtuXVswXSwKIAkJCQkJICAgICBpMmNfYWRjX2luaXRbbl1bMV0pOwpAQCAtMTcwNyw5ICsxNzY2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfY2EwMTA2X2NyZWF0ZShkZXYsIGNhcmQsIHBjaSwgJmNoaXApOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDFhNzRjYTYuLmM3ODk5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTMyNzIsOSArMzI3Miw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCQogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczODoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCAxOTJlNzg0Li5mNjI4NmY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC04MzQsNyArODM0LDExIEBACiAJc3RydWN0IGNzNDI4MV9kbWEgKmRtYSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3M0MjgxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCi0JLy8gcHJpbnRrKCJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBqaWZmaWVzKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJEQ0MgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIGppZmZpZXMgPSAlbGlcbiIsCisJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQyksIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICBqaWZmaWVzKTsKKwkqLwogCXJldHVybiBydW50aW1lLT5idWZmZXJfc2l6ZSAtCiAJICAgICAgIHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBkbWEtPnJlZ0RDQykgLSAxOwogfQpAQCAtMTkyNSw5ICsxOTI5LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczQyODFfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXAsIGR1YWxfY29kZWNbZGV2XSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKaW5kZXggZTg3NmIzMi4uYzliM2UzZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCkBAIC04OCw5ICs4OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2NzNDZ4eF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgZXh0ZXJuYWxfYW1wW2Rldl0sIHRoaW5rcGFkW2Rldl0sCiAJCQkJICAgICAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCA4YWIwN2FhLi4xYmU5NmVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICogIEFDU0RBID0gU3RhdHVzIERhdGEgUmVnaXN0ZXIgPSA0NzRoCiAJICovCiAjaWYgMAotCXByaW50aygiZSkgcmVnID0gMHgleCwgdmFsID0gMHgleCwgQkEwX0FDQ0FEID0gMHgleFxuIiwgcmVnLAorCXByaW50ayhLRVJOX0RFQlVHICJlKSByZWcgPSAweCV4LCB2YWwgPSAweCV4LCBCQTBfQUNDQUQgPSAweCV4XG4iLCByZWcsCiAJCQlzbmRfY3M0Nnh4X3BlZWtCQTAoY2hpcCwgQkEwX0FDU0RBKSwKIAkJCXNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfQUNDQUQpKTsKICNlbmRpZgpAQCAtNDI4LDggKzQyOCw4IEBACiAJfQogICAKIAlpZihzdGF0dXMgJiBTRVJCU1RfV0JTWSkgewotCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yIEZJRk8gY29tbWFuZCB0byBjb21wbGV0ZVxuIik7Ci0KKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsdXJlIHdhaXRpbmcgZm9yICIKKwkJCSAgICJGSUZPIGNvbW1hbmQgdG8gY29tcGxldGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKaW5kZXggMDE4YTdkZS4uNGViNTVhYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmgKQEAgLTYyLDcgKzYyLDExIEBACiAJdW5zaWduZWQgaW50IGJhbmsgPSByZWcgPj4gMTY7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IHJlZyAmIDB4ZmZmZjsKIAotCS8qaWYgKGJhbmsgPT0gMCkgcHJpbnRrKCJzbmRfY3M0Nnh4X3Bva2U6ICUwNFggLSAlMDhYXG4iLHJlZyA+PiAyLHZhbCk7ICovCisJLyoKKwlpZiAoYmFuayA9PSAwKQorCQlwcmludGsoS0VSTl9ERUJVRyAic25kX2NzNDZ4eF9wb2tlOiAlMDRYIC0gJTA4WFxuIiwKKwkJICAgICAgIHJlZyA+PiAyLHZhbCk7CisJKi8KIAl3cml0ZWwodmFsLCBjaGlwLT5yZWdpb24uaWR4W2JhbmsrMV0ucmVtYXBfYWRkciArIG9mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCA2ZGVhNWI1Li5kYzQ2NDMyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC0yNTgsMTAgKzI1OCwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2NzNTUzMF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggODI2ZTZkZS4uYzg5ZWQxZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M1NTM1YXVkaW9faW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsICJDUzU1MzUgQXVkaW8iLCBjczU1MzVhdSkpIHsKLQkJc25kX3ByaW50aygidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gc25kZmFpbDsKIAl9CkBAIC0zNTMsOSArMzUzLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9jczU1MzVhdWRpb19jcmVhdGUoY2FyZCwgcGNpLCAmY3M1NTM1YXUpKSA8IDApCiAJCWdvdG8gcHJvYmVmYWlsX291dDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCmluZGV4IDdiNTc2YWUuLjEzNjFkZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQpAQCAtMTUsNiArMTUsOCBAQAogc25kLWluZGlnby1vYmpzIDo9IGluZGlnby5vCiBzbmQtaW5kaWdvaW8tb2JqcyA6PSBpbmRpZ29pby5vCiBzbmQtaW5kaWdvZGotb2JqcyA6PSBpbmRpZ29kai5vCitzbmQtaW5kaWdvaW94LW9ianMgOj0gaW5kaWdvaW94Lm8KK3NuZC1pbmRpZ29kangtb2JqcyA6PSBpbmRpZ29kangubwogCiBvYmotJChDT05GSUdfU05EX0RBUkxBMjApICs9IHNuZC1kYXJsYTIwLm8KIG9iai0kKENPTkZJR19TTkRfR0lOQTIwKSArPSBzbmQtZ2luYTIwLm8KQEAgLTI4LDMgKzMwLDUgQEAKIG9iai0kKENPTkZJR19TTkRfSU5ESUdPKSArPSBzbmQtaW5kaWdvLm8KIG9iai0kKENPTkZJR19TTkRfSU5ESUdPSU8pICs9IHNuZC1pbmRpZ29pby5vCiBvYmotJChDT05GSUdfU05EX0lORElHT0RKKSArPSBzbmQtaW5kaWdvZGoubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09JT1gpICs9IHNuZC1pbmRpZ29pb3gubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09ESlgpICs9IHNuZC1pbmRpZ29kangubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwppbmRleCA0MTdlMjVhLi41Nzk2N2U1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYwpAQCAtNTYsNyArNTYsNyBAQAogCX0KIAogCWNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKKwkJY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCA4ZGJjNWM0Li5kYTIwNjVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTk1MCw2ICs5NTAsOCBAQAogCUNvbnRyb2wgaW50ZXJmYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorCiAvKioqKioqKioqKioqKioqKioqKiBQQ00gb3V0cHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKQEAgLTEwMDEsMTggKzEwMDMsNiBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotLyogT24gVm1peGVyIGNhcmRzIHRoaXMgb25lIGNvbnRyb2xzIHRoZSBsaW5lLW91dCB2b2x1bWUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19saW5lX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSAiTGluZSBQbGF5YmFjayBWb2x1bWUiLAotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAotCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKLQkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAotCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCi0JLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKLX07Ci0jZWxzZQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTAyMiw2ICsxMDEyLDcgQEAKIAkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAogCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCiB9OworCiAjZW5kaWYKIAogCkBAIC0xOTk3LDkgKzE5ODgsOSBAQAogCiAJREVfSU5JVCgoIkVjaG9hdWRpbyBkcml2ZXIgc3RhcnRpbmcuLi5cbiIpKTsKIAlpID0gMDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIApAQCAtMjAzNyw4ICsyMDI4LDYgQEAKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKIAlzbmRfZWNob192bWl4ZXIuY291bnQgPSBudW1fcGlwZXNfb3V0KGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7Ci0JaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4sIGNoaXApKSkgPCAwKQotCQlnb3RvIGN0bF9lcnJvcjsKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fdm1peGVyLCBjaGlwKSkpIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKaW5kZXggMWM4OGUwNS4uZjk0OTBhZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCkBAIC0xODksNiArMTg5LDkgQEAKICNkZWZpbmUgSU5ESUdPCQkJMHgwMDkwCiAjZGVmaW5lIElORElHT19JTwkJMHgwMGEwCiAjZGVmaW5lIElORElHT19ESgkJMHgwMGIwCisjZGVmaW5lIERDOAkJCTB4MDBjMAorI2RlZmluZSBJTkRJR09fSU9YCQkweDAwZDAKKyNkZWZpbmUgSU5ESUdPX0RKWAkJMHgwMGUwCiAjZGVmaW5lIEVDSE8zRwkJCTB4MDEwMAogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCmluZGV4IGMzNzM2YmIuLmUzMmE3NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYwpAQCAtNDAsOCArNDAsNyBAQAogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKIAkJcmV0dXJuIC1FSU87CiAKLQljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKKwljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0gY3B1X3RvX2xlMzIoRTNHX0FTSUNfTk9UX0xPQURFRCk7CiAJY2hpcC0+YXNpY19sb2FkZWQgPSBGQUxTRTsKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1RFU1RfQVNJQyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCmluZGV4IGJlMGUxODEuLjRkZjUxZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCkBAIC05MjYsMTEgKzkyNiwxMSBAQAogCiAJLyogSW5pdCB0aGUgY29tbSBwYWdlICovCiAJY2hpcC0+Y29tbV9wYWdlLT5jb21tX3NpemUgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CisJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX01JRElfT1VUX0ZJRk9fU0laRSk7Ci0JY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNDQxMDApOworCQljcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIoNDQxMDApOwogCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CiAKIAkvKiBTZXQgbGluZSBsZXZlbHMgc28gd2UgZG9uJ3QgYmxhc3QgYW55IGlucHV0cyBvbiBzdGFydHVwICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCmluZGV4IGUzNTJmM2EuLmNiN2Q3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCkBAIC01NzYsOCArNTc2LDEzIEBACiAjZGVmaW5lIEUzR19BU0lDX05PVF9MT0FERUQJCTB4ZmZmZgogI2RlZmluZSBFM0dfQk9YX1RZUEVfTUFTSwkJMHhmMAogCi0jZGVmaW5lIEVYVF8zR0JPWF9OQwkJCTB4MDEKLSNkZWZpbmUgRVhUXzNHQk9YX05PVF9TRVQJCTB4MDIKKy8qIEluZGlnbyBleHByZXNzIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisjZGVmaW5lIElORElHT19FWFBSRVNTXzMyMDAwCQkweDAyCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ0MTAwCQkweDAxCisjZGVmaW5lIElORElHT19FWFBSRVNTXzQ4MDAwCQkweDAwCisjZGVmaW5lIElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRAkweDEwCisjZGVmaW5lIElORElHT19FWFBSRVNTX1FVQURfU1BFRUQJMHgwNAorI2RlZmluZSBJTkRJR09fRVhQUkVTU19DTE9DS19NQVNLCTB4MTcKIAogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwppbmRleCBkYjZjOTUyLi4zZjFlNzQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwpAQCAtMjA4LDEwICsyMDgsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwppbmRleCBmMDVlMzlmLi4wYjJjZDljIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwpAQCAtNjMsMTggKzYzLDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogYWxsIHZjaGFubmVscyBhcmUgcm91dGVkCi0JdG8gdGhlIHN0ZXJlbyBvdXRwdXQgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYjYyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNsb2NrLCBjb250cm9sX3JlZywgb2xkX2NvbnRyb2xfcmVnOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCW9sZF9jb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CisJY29udHJvbF9yZWcgPSBvbGRfY29udHJvbF9yZWcgJiB+SU5ESUdPX0VYUFJFU1NfQ0xPQ0tfTUFTSzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMzIwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDA7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgNjQwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfMzIwMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ0MTAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180ODAwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnRyb2xfcmVnIHw9IGNsb2NrOworCWlmIChjb250cm9sX3JlZyAhPSBvbGRfY29udHJvbF9yZWcpIHsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfQ0xPQ0tTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHJvdXRlcyB0aGUgc291bmQgZnJvbSBhIHZpcnR1YWwgY2hhbm5lbCB0byBhIHJlYWwgb3V0cHV0ICovCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKQoreworCWludCBpbmRleDsKKworCWlmIChzbmRfQlVHX09OKHBpcGUgPj0gbnVtX3BpcGVzX291dChjaGlwKSB8fAorCQkgICAgICAgb3V0cHV0ID49IG51bV9idXNzZXNfb3V0KGNoaXApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+dm1peGVyX2dhaW5bb3V0cHV0XVtwaXBlXSA9IGdhaW47CisJaW5kZXggPSBvdXRwdXQgKiBudW1fcGlwZXNfb3V0KGNoaXApICsgcGlwZTsKKwljaGlwLT5jb21tX3BhZ2UtPnZtaXhlcltpbmRleF0gPSBnYWluOworCisJREVfQUNUKCgic2V0X3ZtaXhlcl9nYWluOiBwaXBlICVkLCBvdXQgJWQgPSAlZFxuIiwgcGlwZSwgb3V0cHV0LCBnYWluKSk7CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVhZCBhbmQgdXBkYXRlIHZpcnR1YWwgbWl4ZXIgbGV2ZWxzIGluIGNvbW0gcGFnZS4gKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX1ZNSVhFUl9HQUlOKTsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKK30KKworCisKKy8qIFRoZSBJbmRpZ29JTyBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKaW5kZXggOTA3MzBhNS4uMDgzOTI5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGFuZAotCXZjaGFubmVscyA0LTcgYXJlIHJvdXRlZCB0byByZWFsIGNoYW5uZWxzIDAtNCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MmVmNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0RKWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gREp4IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTgJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTgKKworLyogQnVzIGluZGV4ZXMgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX09VVAkwCS8qIDQgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJNAkvKiAwICovCisjZGVmaW5lIEJYX0FOQUxPR19JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQk0CisKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2RqeF9kc3AuZnciKTsKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0lORElHT19ESlhfRFNQCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBFMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESngqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gNCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2RqeF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTFmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwKKwkJCSAgIHUxNiBwaXBlLCBpbnQgZ2Fpbik7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBJbmRpZ28gREp4XG4iKSk7CisJaWYgKHNuZF9CVUdfT04oKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgIT0gSU5ESUdPX0RKWCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKWF9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwllcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKaW5kZXggYTdlMDllYy4uMDYwNGM4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKLQl0byB0aGUgc3RlcmVvIG91dHB1dCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViZWUyNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0lPWAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gSU94IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTEwCS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQkxMAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAkyCS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTIJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9pbmRpZ29faW94X2RzcC5mdyIpOworCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0lPWF9EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEQwLCAwLCAwLCAwfSwJLyogSW5kaWdvIElPeCAqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2lveF9kc3AuYyIKKyNpbmNsdWRlICJpbmRpZ29fZXhwcmVzc19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1NzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LAorCQkJICAgdTE2IHBpcGUsIGludCBnYWluKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBJT3hcbiIpKTsKKwlpZiAoc25kX0JVR19PTigoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSAhPSBJTkRJR09fSU9YKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKaW5kZXggZWRlNzVjNi4uODM3NTBlOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwpAQCAtMjg0LDEwICsyODQsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwppbmRleCAyMjczODY2Li41NTE0MDUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwpAQCAtNjksMTggKzY5LDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGdvIHRvIGFuYWxvZwotCW91dHB1dHMgYW5kIHZjaGFubmVscyA0LTcgZ28gdG8gUy9QRElGIG91dHB1dHMgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMiwxMCArMjEwLDEwIEBACiAJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOwogCWlmIChwcm9mKQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CiAJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKaW5kZXggNzdiZjJhOC4uYTk1M2QxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCWlmIChlbmFibGUpIHsKIAkJY2hpcC0+bXRjX3N0YXRlID0gTUlESV9JTl9TVEFURV9OT1JNQUw7CiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKIAl9IGVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CiAKIAljbGVhcl9oYW5kc2hha2UoY2hpcCk7CiAJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCmluZGV4IDgzNTRjMWEuLmM3ZjNiOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKQEAgLTExNCw5ICsxMTQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAobWF4X2J1ZmZlcl9zaXplW2Rldl0gPCAzMikKIAkJbWF4X2J1ZmZlcl9zaXplW2Rldl0gPSAzMjsKIAllbHNlIGlmIChtYXhfYnVmZmVyX3NpemVbZGV2XSA+IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKaW5kZXggMGU2NDlkYy4uN2VmOTQ5ZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKQEAgLTEwMyw3ICsxMDMsMTAgQEAKIAkJCWludCBjaDsKIAkJCXZwID0gJmVtdS0+dm9pY2VzW2Jlc3RbaV0udm9pY2VdOwogCQkJaWYgKChjaCA9IHZwLT5jaCkgPCAwKSB7Ci0JCQkJLy9wcmludGsoInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInN5bnRoX2dldF92b2ljZTogY2ggPCAwICglZCkgPz8iLCBpKTsKKwkJCQkqLwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJdnAtPmVtdS0+bnVtX3ZvaWNlcy0tOwpAQCAtMzM1LDcgKzMzOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWVtZW0tPm1hcF9sb2NrZWQrKzsKIAlpZiAoc25kX2VtdTEwazFfbWVtYmxrX21hcChodywgZW1lbSkgPCAwKSB7Ci0JCS8vIHByaW50aygiZW11OiBjYW5ub3QgbWFwIVxuIik7CisJCS8qIHByaW50ayhLRVJOX0VSUiAiZW11OiBjYW5ub3QgbWFwIVxuIik7ICovCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltYXBwZWRfb2Zmc2V0ID0gc25kX2VtdTEwazFfbWVtYmxrX29mZnNldChlbWVtKSA+PiAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCAxMDFhMWMxLi5mMThiZDYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtNzExLDggKzcxMSw3IEBACiBzdGF0aWMgaW50IGVtdTEwMTBfZmlybXdhcmVfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNuZF9lbXUxMGsxICplbXUgPSBkYXRhOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAogCWZvciAoOzspIHsKQEAgLTc1OCw3ICs3NTcsOCBAQAogCQkJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IEF1ZGlvIERvY2sgRmlybXdhcmUgbG9hZGVkXG4iKTsKIAkJCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9ET0NLX01BSk9SX1JFViwgJnRtcCk7CiAJCQlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfRE9DS19NSU5PUl9SRVYsICZ0bXAyKTsKLQkJCXNuZF9wcmludGsoIkF1ZGlvIERvY2sgdmVyOiVkLiVkXG4iLCB0bXAsIHRtcDIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkF1ZGlvIERvY2sgdmVyOiAldS4ldVxuIiwKKwkJCQkgICB0bXAsIHRtcDIpOwogCQkJLyogU3luYyBjbG9ja2luZyBiZXR3ZWVuIDEwMTAgYW5kIERvY2sgKi8KIAkJCS8qIEFsbG93IERMTCB0byBzZXR0bGUgKi8KIAkJCW1zbGVlcCgxMCk7CkBAIC04MDQsOCArODA0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2VtdTEwazFfZW11MTAxMF9pbml0KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11KQogewogCXVuc2lnbmVkIGludCBpOwotCWludCB0bXAsIHRtcDI7Ci0JaW50IHJlZzsKKwl1MzIgdG1wLCB0bXAyLCByZWc7CiAJaW50IGVycjsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAKQEAgLTg4Nyw3ICs4ODYsNyBAQAogCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIEZpcm13YXJlIGxvYWRlZFxuIik7CiAJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0hBTkFfTUFKT1JfUkVWLCAmdG1wKTsKIAlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfSEFOQV9NSU5PUl9SRVYsICZ0bXAyKTsKLQlzbmRfcHJpbnRrKCJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICVkLiVkXG4iLCB0bXAsIHRtcDIpOworCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBIYW5hIHZlcnNpb246ICV1LiV1XG4iLCB0bXAsIHRtcDIpOwogCS8qIEVuYWJsZSA0OFZvbHQgcG93ZXIgdG8gQXVkaW8gRG9jayAqLwogCXNuZF9lbXUxMDEwX2ZwZ2Ffd3JpdGUoZW11LCBFTVVfSEFOQV9ET0NLX1BXUiwgRU1VX0hBTkFfRE9DS19QV1JfT04pOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwppbmRleCA1ZmY0ZGJiLi4zMTU0MmFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKQEAgLTE1NDQsOSArMTU0NCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfZW11MTBrMXhfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCmluZGV4IDdkYmEwOGYuLjE5MWUxY2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAKIAkvKiBBX1BVVF9TVEVSRU9fT1VUUFVUKEFfRVhUT1VUX0ZST05UX0wsIEFfRVhUT1VUX0ZST05UX1IsIHBsYXliYWNrICsgU05EX0VNVTEwSzFfUExBWUJBQ0tfQ0hBTk5FTFMpOyAqLwogCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5lbXVfbW9kZWwpIHsKIAkJLyogRU1VMTAxMCBPdXRwdXRzIGZyb20gUENNIEZyb250LCBSZWFyLCBDZW50ZXIsIExGRSwgU2lkZSAqLwotCQlzbmRfcHJpbnRrKCJFTVUgb3V0cHV0cyBvblxuIik7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUgb3V0cHV0cyBvblxuIik7CiAJCWZvciAoeiA9IDA7IHogPCA4OyB6KyspIHsKIAkJCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5jYTAxMDhfY2hpcCkgewogCQkJCUFfT1AoaWNvZGUsICZwdHIsIGlBQ0MzLCBBM19FTVUzMk9VVCh6KSwgQV9HUFIocGxheWJhY2sgKyBTTkRfRU1VMTBLMV9QTEFZQkFDS19DSEFOTkVMUyArIHopLCBBX0NfMDAwMDAwMDAsIEFfQ18wMDAwMDAwMCk7CkBAIC0xNTY3LDcgKzE1NjcsNyBAQAogCiAJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmVtdV9tb2RlbCkgewogCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+Y2EwMTA4X2NoaXApIHsKLQkJCXNuZF9wcmludGsoIkVNVTIgaW5wdXRzIG9uXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUyIGlucHV0cyBvblxuIik7CiAJCQlmb3IgKHogPSAwOyB6IDwgMHgxMDsgeisrKSB7CiAJCQkJc25kX2VtdTEwazFfYXVkaWd5X2RzcF9jb252ZXJ0XzMyX3RvXzJ4MTYoIGljb2RlLCAmcHRyLCB0bXAsIAogCQkJCQkJCQkJYml0X3NoaWZ0ZXIxNiwKQEAgLTE1NzUsMTAgKzE1NzUsMTMgQEAKIAkJCQkJCQkJCUFfRlhCVVMyKHoqMikgKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXNuZF9wcmludGsoIkVNVSBpbnB1dHMgb25cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVSBpbnB1dHMgb25cbiIpOwogCQkJLyogQ2FwdHVyZSAxNiAob3JpZ2luYWxseSA4KSBjaGFubmVscyBvZiBTMzJfTEUgc291bmQgKi8KIAotCQkJLyogcHJpbnRrKCJlbXVmeC5jOiBncHI9MHgleCwgdG1wPTB4JXhcbiIsZ3ByLCB0bXApOyAqLworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJlbXVmeC5jOiBncHI9MHgleCwgdG1wPTB4JXhcbiIsCisJCQkgICAgICAgZ3ByLCB0bXApOworCQkJKi8KIAkJCS8qIEZvciB0aGUgRU1VMTAxMDogSG93IHRvIGdldCAzMmJpdCB2YWx1ZXMgZnJvbSB0aGUgRFNQLiBIaWdoIDE2Yml0cyBpbnRvIEwsIGxvdyAxNmJpdHMgaW50byBSLiAqLwogCQkJLyogQV9QMTZWSU4oMCkgaXMgZGVsYXllZCBieSBvbmUgc2FtcGxlLAogCQkJICogc28gYWxsIG90aGVyIEFfUDE2VklOIGNoYW5uZWxzIHdpbGwgbmVlZCB0byBhbHNvIGJlIGRlbGF5ZWQKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMKaW5kZXggY2Y5Mjc2ZGQuLjc4ZjYyZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCkBAIC00NCw3ICs0NCw3IEBACiAJaWYgKGVwY20tPnN1YnN0cmVhbSA9PSBOVUxMKQogCQlyZXR1cm47CiAjaWYgMAotCXByaW50aygiSVJROiBwb3NpdGlvbiA9IDB4JXgsIHBlcmlvZCA9IDB4JXgsIHNpemUgPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJJUlE6IHBvc2l0aW9uID0gMHgleCwgcGVyaW9kID0gMHgleCwgc2l6ZSA9IDB4JXhcbiIsCiAJCQllcGNtLT5zdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LT5wb2ludGVyKGVtdSwgZXBjbS0+c3Vic3RyZWFtKSwKIAkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhlcGNtLT5zdWJzdHJlYW0pLAogCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKGVwY20tPnN1YnN0cmVhbSkpOwpAQCAtMTQ2LDcgKzE0NiwxMSBAQAogCQkJCQkgICAgICAxLAogCQkJCQkgICAgICAmZXBjbS0+ZXh0cmEpOwogCQlpZiAoZXJyIDwgMCkgewotCQkJLyogcHJpbnRrKCJwY21fY2hhbm5lbF9hbGxvYzogZmFpbGVkIGV4dHJhOiB2b2ljZXM9JWQsIGZyYW1lPSVkXG4iLCB2b2ljZXMsIGZyYW1lKTsgKi8KKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX2NoYW5uZWxfYWxsb2M6ICIKKwkJCSAgICAgICAiZmFpbGVkIGV4dHJhOiB2b2ljZXM9JWQsIGZyYW1lPSVkXG4iLAorCQkJICAgICAgIHZvaWNlcywgZnJhbWUpOworCQkJKi8KIAkJCWZvciAoaSA9IDA7IGkgPCB2b2ljZXM7IGkrKykgewogCQkJCXNuZF9lbXUxMGsxX3ZvaWNlX2ZyZWUoZXBjbS0+ZW11LCBlcGNtLT52b2ljZXNbaV0pOwogCQkJCWVwY20tPnZvaWNlc1tpXSA9IE5VTEw7CkBAIC03MzcsNyArNzQxLDEwIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX3BjbV9taXhlciAqbWl4OwogCWludCByZXN1bHQgPSAwOwogCi0JLyogcHJpbnRrKCJ0cmlnZ2VyIC0gZW11MTBrMSA9IDB4JXgsIGNtZCA9ICVpLCBwb2ludGVyID0gJWlcbiIsIChpbnQpZW11LCBjbWQsIHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSkpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXIgLSBlbXUxMGsxID0gMHgleCwgY21kID0gJWksIHBvaW50ZXIgPSAlaVxuIiwKKwkgICAgICAgKGludCllbXUsIGNtZCwgc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKSkKKwkqLwogCXNwaW5fbG9jaygmZW11LT5yZWdfbG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtNzg2LDcgKzc5MywxMCBAQAogCQkvKiBobW0gdGhpcyBzaG91bGQgY2F1c2UgZnVsbCBhbmQgaGFsZiBmdWxsIGludGVycnVwdCB0byBiZSByYWlzZWQ/ICovCiAJCW91dGwoZXBjbS0+Y2FwdHVyZV9pcHIsIGVtdS0+cG9ydCArIElQUik7CiAJCXNuZF9lbXUxMGsxX2ludHJfZW5hYmxlKGVtdSwgZXBjbS0+Y2FwdHVyZV9pbnRlKTsKLQkJLyogcHJpbnRrKCJhZGNjciA9IDB4JXgsIGFkY2JzID0gMHgleFxuIiwgZXBjbS0+YWRjY3IsIGVwY20tPmFkY2JzKTsgKi8KKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFkY2NyID0gMHgleCwgYWRjYnMgPSAweCV4XG4iLAorCQkgICAgICAgZXBjbS0+YWRjY3IsIGVwY20tPmFkY2JzKTsKKwkJKi8KIAkJc3dpdGNoIChlcGNtLT50eXBlKSB7CiAJCWNhc2UgQ0FQVFVSRV9BQzk3QURDOgogCQkJc25kX2VtdTEwazFfcHRyX3dyaXRlKGVtdSwgQURDQ1IsIDAsIGVwY20tPmNhcHR1cmVfY3JfdmFsKTsKQEAgLTg1Nyw3ICs4NjcsMTEgQEAKIAkJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAl9CiAjZW5kaWYKLQkvKiBwcmludGsoInB0ciA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4XG4iLCBwdHIsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAicHRyID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXhcbiIsCisJICAgICAgIHB0ciwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTE1NDYsNyArMTU2MCwxMSBAQAogCQkJCQkJICAgdW5zaWduZWQgaW50IGNvdW50LAogCQkJCQkJICAgdW5zaWduZWQgaW50IHRyYW1fc2hpZnQpCiB7Ci0JLyogcHJpbnRrKCJ0cmFtX3Bva2UxOiBkc3RfbGVmdCA9IDB4JXAsIGRzdF9yaWdodCA9IDB4JXAsIHNyYyA9IDB4JXAsIGNvdW50ID0gMHgleFxuIiwgZHN0X2xlZnQsIGRzdF9yaWdodCwgc3JjLCBjb3VudCk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidHJhbV9wb2tlMTogZHN0X2xlZnQgPSAweCVwLCBkc3RfcmlnaHQgPSAweCVwLCAiCisJICAgICAgICJzcmMgPSAweCVwLCBjb3VudCA9IDB4JXhcbiIsCisJICAgICAgIGRzdF9sZWZ0LCBkc3RfcmlnaHQsIHNyYywgY291bnQpOworCSovCiAJaWYgKCh0cmFtX3NoaWZ0ICYgMSkgPT0gMCkgewogCQl3aGlsZSAoY291bnQtLSkgewogCQkJKmRzdF9sZWZ0LS0gPSAqc3JjKys7CkBAIC0xNjIzLDcgKzE2NDEsMTIgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3BjbSAqcGNtID0gJmVtdS0+Zng4MDEwLnBjbVtzdWJzdHJlYW0tPm51bWJlcl07CiAJdW5zaWduZWQgaW50IGk7CiAJCi0JLyogcHJpbnRrKCJwcmVwYXJlOiBldHJhbV9wYWdlcyA9IDB4JXAsIGRtYV9hcmVhID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4ICgweCV4KVxuIiwgZW11LT5meDgwMTAuZXRyYW1fcGFnZXMsIHJ1bnRpbWUtPmRtYV9hcmVhLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+YnVmZmVyX3NpemUgPDwgMik7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZTogZXRyYW1fcGFnZXMgPSAweCVwLCBkbWFfYXJlYSA9IDB4JXgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCAoMHgleClcbiIsCisJICAgICAgIGVtdS0+Zng4MDEwLmV0cmFtX3BhZ2VzLCBydW50aW1lLT5kbWFfYXJlYSwKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIDw8IDIpOworCSovCiAJbWVtc2V0KCZwY20tPnBjbV9yZWMsIDAsIHNpemVvZihwY20tPnBjbV9yZWMpKTsKIAlwY20tPnBjbV9yZWMuaHdfYnVmZmVyX3NpemUgPSBwY20tPmJ1ZmZlcl9zaXplICogMjsgLyogYnl0ZSBzaXplICovCiAJcGNtLT5wY21fcmVjLnN3X2J1ZmZlcl9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9pby5jIGIvc291bmQvcGNpL2VtdTEwazEvaW8uYwppbmRleCBiNWE4MDJiLi40YmZjMzFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9pby5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKQEAgLTIyNiw3ICsyMjYsOSBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAodGltZW91dCA+IDEwMDApIHsKLSAgICAgICAgICAgICAgICAJCXNuZF9wcmludGsoImVtdTEwazE6STJDOnRpbWVvdXQgc3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiZW11MTBrMTpJMkM6dGltZW91dCBzdGF0dXM9MHgleFxuIiwKKwkJCQkJICAgc3RhdHVzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCmluZGV4IDc0OWEyMWIuLmU2MTdhY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9wY20gKmVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAgIAogCWlmIChlcGNtKSB7Ci0gICAgICAgIAkvL3NuZF9wcmludGsoImVwY20gZnJlZTogJXBcbiIsIGVwY20pOworICAgICAgICAJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGZyZWU6ICVwXG4iLCBlcGNtKTsgKi8KIAkJa2ZyZWUoZXBjbSk7CiAJfQogfQpAQCAtMTgzLDE0ICsxODMsMTYgQEAKIAlpbnQgZXJyOwogCiAJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CisgICAgICAgIC8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7ICovCiAKIAlpZiAoZXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcGNtLT5lbXUgPSBlbXU7CiAJZXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotICAgICAgICAvL3NuZF9wcmludGsoImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLCBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKLSAgCisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLAorCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKKwkqLwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGVwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtOwogICAKQEAgLTIwMCwxMCArMjAyLDE1IEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKICAgICAgICAgY2hhbm5lbC0+dXNlPTE7Ci0JLy9zbmRfcHJpbnRrKCJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLCBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOwotICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKLSAgICAgICAgY2hhbm5lbC0+ZXBjbT1lcGNtOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsCisJCSAgIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisjZW5kaWYgLyogZGVidWcgKi8KKwkvKiBjaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7ICovCisJY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCkBAIC0yMjQsMTQgKzIzMSwxNiBAQAogCWludCBlcnI7CiAKIAllcGNtID0ga3phbGxvYyhzaXplb2YoKmVwY20pLCBHRlBfS0VSTkVMKTsKLQkvL3NuZF9wcmludGsoImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7ICovCiAKIAlpZiAoZXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcGNtLT5lbXUgPSBlbXU7CiAJZXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCS8vc25kX3ByaW50aygiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOwotCisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLAorCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKKwkqLwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGVwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtOwogICAKQEAgLTI0MSwxMCArMjUwLDE1IEBACiAJY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogCWNoYW5uZWwtPnVzZT0xOwotCS8vc25kX3ByaW50aygicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKLQkvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOwotCS8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwotCWNoYW5uZWwtPmVwY209ZXBjbTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLAorCQkgICBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOworCXByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworI2VuZGlmIC8qIGRlYnVnICovCisJLyogY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OyAqLworCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTMzNCw5ICszNDgsMTkgQEAKIAlpbnQgaTsKIAl1MzIgdG1wOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPnAxNnZfYnVmZmVyLmFkZHIsIGVtdS0+cDE2dl9idWZmZXIuYXJlYSwgZW11LT5wMTZ2X2J1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgIgorCQkgICAiZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCQkgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIsCisJCSAgIHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIiwKKwkJICAgZW11LT5wMTZ2X2J1ZmZlci5hZGRyLCBlbXUtPnAxNnZfYnVmZmVyLmFyZWEsCisJCSAgIGVtdS0+cDE2dl9idWZmZXIuYnl0ZXMpOworI2VuZGlmIC8qIGRlYnVnICovCiAJdG1wID0gc25kX2VtdTEwazFfcHRyX3JlYWQoZW11LCBBX1NQRElGX1NBTVBMRVJBVEUsIGNoYW5uZWwpOwogICAgICAgICBzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtMzc5LDcgKzQwMywxNSBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGNoYW5uZWwgPSBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlIC0gZW11LT5wMTZ2X2RldmljZV9vZmZzZXQ7CiAJdTMyIHRtcDsKLQkvL3ByaW50aygicHJlcGFyZSBjYXB0dXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmUgY2FwdHVyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgIgorCSAgICAgICAiZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCSAgICAgICAiZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCSAgICAgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCSAgICAgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJKi8KIAl0bXAgPSBzbmRfZW11MTBrMV9wdHJfcmVhZChlbXUsIEFfU1BESUZfU0FNUExFUkFURSwgY2hhbm5lbCk7CiAgICAgICAgIHN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC00NTksMTMgKzQ5MSwxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UtZW11LT5wMTZ2X2RldmljZV9vZmZzZXQ7Ci0JCS8vc25kX3ByaW50aygicDE2diBjaGFubmVsPSVkXG4iLGNoYW5uZWwpOworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgInAxNnYgY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxPDxjaGFubmVsKTsKIAkJaW50ZSB8PSAoSU5URTJfUExBWUJBQ0tfQ0hfMF9MT09QPDxjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLy9zbmRfcHJpbnRrKCJiYXNpYz0weCV4LCBpbnRlPTB4JXhcbiIsYmFzaWMsIGludGUpOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgaW50ZT0weCV4XG4iLCBiYXNpYywgaW50ZSk7ICovCiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC01NTgsOCArNTkwLDEzIEBACiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnVmZmVyIGNhcHR1cmUgbGltaXRlZCFcbiIpOwogCX0KLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC01OTIsNyArNjI5LDEwIEBACiAJLy8gcmVsZWFzZSB0aGUgZGF0YQogCWlmIChjaGlwLT5wMTZ2X2J1ZmZlci5hcmVhKSB7CiAJCXNuZF9kbWFfZnJlZV9wYWdlcygmY2hpcC0+cDE2dl9idWZmZXIpOwotCQkvL3NuZF9wcmludGsoInBlcmlvZCBsYWJsZXMgZnJlZTogJXBcbiIsICZjaGlwLT5wMTZ2X2J1ZmZlcik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicGVyaW9kIGxhYmxlcyBmcmVlOiAlcFxuIiwKKwkJCSAgICZjaGlwLT5wMTZ2X2J1ZmZlcik7CisJCSovCiAJfQogCXJldHVybiAwOwogfQpAQCAtNjA0LDcgKzY0NCw3IEBACiAJaW50IGVycjsKICAgICAgICAgaW50IGNhcHR1cmU9MTsKICAgCi0JLy9zbmRfcHJpbnRrKCJzbmRfcDE2dl9wY20gY2FsbGVkLiBkZXZpY2U9JWRcbiIsIGRldmljZSk7CisJLyogc25kX3ByaW50aygiS0VSTl9ERUJVRyBzbmRfcDE2dl9wY20gY2FsbGVkLiBkZXZpY2U9JWRcbiIsIGRldmljZSk7ICovCiAJZW11LT5wMTZ2X2RldmljZV9vZmZzZXQgPSBkZXZpY2U7CiAJaWYgKHJwY20pCiAJCSpycGNtID0gTlVMTDsKQEAgLTYzMSw3ICs2NzEsMTAgQEAKIAkJCQkJCQkgc25kX2RtYV9wY2lfZGF0YShlbXUtPnBjaSksIAogCQkJCQkJCSAoKDY1NTM2IC0gNjQpICogOCksICgoNjU1MzYgLSA2NCkgKiA4KSkpIDwgMCkgCiAJCQlyZXR1cm4gZXJyOwotCQkvL3NuZF9wcmludGsoInByZWFsbG9jYXRlIHBsYXliYWNrIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJwcmVhbGxvY2F0ZSBwbGF5YmFjayBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJKi8KIAl9CiAKIAlmb3IgKHN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbTsgCkBAIC02NDIsNyArNjg1LDEwIEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzYgLSA2NCwgNjU1MzYgLSA2NCkpIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCS8vc25kX3ByaW50aygicHJlYWxsb2NhdGUgY2FwdHVyZSBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAicHJlYWxsb2NhdGUgY2FwdHVyZSBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJKi8KIAl9CiAgIAogCWlmIChycGNtKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKaW5kZXggZDczMDBhMS4uMjBiOGRhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCkBAIC01Myw3ICs1MywxMCBAQAogCSpydm9pY2UgPSBOVUxMOwogCWZpcnN0X3ZvaWNlID0gbGFzdF92b2ljZSA9IDA7CiAJZm9yIChpID0gZW11LT5uZXh0X2ZyZWVfdm9pY2UsIGogPSAwOyBqIDwgTlVNX0cgOyBpICs9IG51bWJlciwgaiArPSBudW1iZXIpIHsKLQkJLy8gcHJpbnRrKCJpICVkIGogJWQgbmV4dCBmcmVlICVkIVxuIiwgaSwgaiwgZW11LT5uZXh0X2ZyZWVfdm9pY2UpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiaSAlZCBqICVkIG5leHQgZnJlZSAlZCFcbiIsCisJCSAgICAgICBpLCBqLCBlbXUtPm5leHRfZnJlZV92b2ljZSk7CisJCSovCiAJCWkgJT0gTlVNX0c7CiAKIAkJLyogc3RlcmVvIHZvaWNlcyBtdXN0IGJlIGV2ZW4vb2RkICovCkBAIC03MSw3ICs3NCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKCFza2lwKSB7Ci0JCQkvLyBwcmludGsoImFsbG9jYXRlZCB2b2ljZSAlZFxuIiwgaSk7CisJCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiYWxsb2NhdGVkIHZvaWNlICVkXG4iLCBpKTsgKi8KIAkJCWZpcnN0X3ZvaWNlID0gaTsKIAkJCWxhc3Rfdm9pY2UgPSAoaSArIG51bWJlcikgJSBOVU1fRzsKIAkJCWVtdS0+bmV4dF9mcmVlX3ZvaWNlID0gbGFzdF92b2ljZTsKQEAgLTg0LDcgKzg3LDEwIEBACiAJCiAJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCXZvaWNlID0gJmVtdS0+dm9pY2VzWyhmaXJzdF92b2ljZSArIGkpICUgTlVNX0ddOwotCQkvLyBwcmludGsoInZvaWNlIGFsbG9jIC0gJWksICVpIG9mICVpXG4iLCB2b2ljZS0+bnVtYmVyLCBpZHgtZmlyc3Rfdm9pY2UrMSwgbnVtYmVyKTsKKwkJLyoKKwkJcHJpbnRrKGtFUk5fREVCVUcgInZvaWNlIGFsbG9jIC0gJWksICVpIG9mICVpXG4iLAorCQkgICAgICAgdm9pY2UtPm51bWJlciwgaWR4LWZpcnN0X3ZvaWNlKzEsIG51bWJlcik7CisJCSovCiAJCXZvaWNlLT51c2UgPSAxOwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBFTVUxMEsxX1BDTToKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IDliZjk1MzYuLjE4ZjRkMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtNTg0LDcgKzU4NCw4IEBACiAJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBIWiAvIDEwOwogCiAjaWYgMAotCXByaW50aygiQ09ERUMgV1JJVEU6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXggKDB4JXgpLCBjcmVnID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiQ09ERUMgV1JJVEU6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXggKDB4JXgpLCBjcmVnID0gMHgleFxuIiwKIAkgICAgICAgcmVnLCB2YWwsIEVTXzEzNzBfQ09ERUNfV1JJVEUocmVnLCB2YWwpLCBFU19SRUcoZW5zb25pcSwgMTM3MF9DT0RFQykpOwogI2VuZGlmCiAJZG8gewpAQCAtMjQwOSw5ICsyNDEwLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9lbnNvbmlxX2NyZWF0ZShjYXJkLCBwY2ksICZlbnNvbmlxKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggNGNkOWExZmEuLmRkNjNiMTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTE2NzMsMTggKzE2NzMsMjIgQEAKIAogCXN0YXR1cyA9IGluYihTTElPX1JFRyhjaGlwLCBJUlFDT05UUk9MKSk7CiAjaWYgMAotCXByaW50aygiRXMxOTM4ZGVidWcgLSBpbnRlcnJ1cHQgc3RhdHVzOiA9MHgleFxuIiwgc3RhdHVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiRXMxOTM4ZGVidWcgLSBpbnRlcnJ1cHQgc3RhdHVzOiA9MHgleFxuIiwgc3RhdHVzKTsKICNlbmRpZgogCQogCS8qIEFVRElPIDEgKi8KIAlpZiAoc3RhdHVzICYgMHgxMCkgewogI2lmIDAKLSAgICAgICAgICAgICAgICBwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIGludGVycnVwdFxuIik7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgY291bnQ6ICV1XG4iLAorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgaW50ZXJydXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBjb3VudDogJXVcbiIsCiAJCSAgICAgICBpbncoU0xETV9SRUcoY2hpcCwgRE1BQ09VTlQpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgYmFzZTogJXVcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgYmFzZTogJXVcbiIsCiAJCSAgICAgICBpbmwoU0xETV9SRUcoY2hpcCwgRE1BQUREUikpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBzdGF0dXM6IDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgc3RhdHVzOiAweCV4XG4iLAogCQkgICAgICAgaW5sKFNMRE1fUkVHKGNoaXAsIERNQVNUQVRVUykpKTsKICNlbmRpZgogCQkvKiBjbGVhciBpcnEgKi8KQEAgLTE2OTksMTAgKzE3MDMsMTMgQEAKIAkvKiBBVURJTyAyICovCiAJaWYgKHN0YXR1cyAmIDB4MjApIHsKICNpZiAwCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBpbnRlcnJ1cHRcbiIpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGNvdW50OiAldVxuIiwKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIGludGVycnVwdFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgY291bnQ6ICV1XG4iLAogCQkgICAgICAgaW53KFNMSU9fUkVHKGNoaXAsIEFVRElPMkRNQUNPVU5UKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGJhc2U6ICV1XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGJhc2U6ICV1XG4iLAogCQkgICAgICAgaW5sKFNMSU9fUkVHKGNoaXAsIEFVRElPMkRNQUFERFIpKSk7CiAKICNlbmRpZgpAQCAtMTc5OSw5ICsxODA2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZm9yIChpZHggPSAwOyBpZHggPCA1OyBpZHgrKykgewogCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgaWR4KSA9PSAwIHx8CiAJCSAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwY2ksIGlkeCkgJiBJT1JFU09VUkNFX0lPKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IGU5YzM3OTQuLmRjOTdlODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTI2NDUsOSArMjY0NSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAgICAgICAgICAgICAgICAgCiAJaWYgKHRvdGFsX2J1ZnNpemVbZGV2XSA8IDEyOCkKIAkJdG90YWxfYnVmc2l6ZVtkZXZdID0gMTI4OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCBjMTI5ZjllLi42MGNkYjllIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTQ2OCw5ICsxNDY4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfZm04MDFfY3JlYXRlKGNhcmQsIHBjaSwgdGVhNTc1eF90dW5lcltkZXZdLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCmluZGV4IDk2MGZkNzkuLjRkZTViYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKQEAgLTEzOCw2ICsxMzgsNyBAQAogCiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJlZXAtPmRldik7CiAJCWtmcmVlKGJlZXApOworCQljb2RlYy0+YmVlcCA9IE5VTEw7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCmluZGV4IGI5Njc5ZjAuLjUxYmY2YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKQEAgLTM5LDcgKzM5LDcgQEAKIGludCBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG5pZCk7CiB2b2lkIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKICNlbHNlCi0jZGVmaW5lIHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKC4uLikKKyNkZWZpbmUgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoLi4uKQkJMAogI2RlZmluZSBzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZSguLi4pCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggZDAzZjk5Mi4uYTRlNWU1OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC02NDcsOSArNjQ3LDkgQEAKIAogCXRvdGFsX25vZGVzID0gc25kX2hkYV9nZXRfc3ViX25vZGVzKGNvZGVjLCBBQ19OT0RFX1JPT1QsICZuaWQpOwogCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9ub2RlczsgaSsrLCBuaWQrKykgewotCQl1bnNpZ25lZCBpbnQgZnVuYzsKLQkJZnVuYyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfRlVOQ1RJT05fVFlQRSk7Ci0JCXN3aXRjaCAoZnVuYyAmIDB4ZmYpIHsKKwkJY29kZWMtPmZ1bmN0aW9uX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCisJCQkJCQlBQ19QQVJfRlVOQ1RJT05fVFlQRSkgJiAweGZmOworCQlzd2l0Y2ggKGNvZGVjLT5mdW5jdGlvbl9pZCkgewogCQljYXNlIEFDX0dSUF9BVURJT19GVU5DVElPTjoKIAkJCWNvZGVjLT5hZmcgPSBuaWQ7CiAJCQlicmVhazsKQEAgLTY4MiwxMSArNjgyLDE0MCBAQAogCXJldHVybiAwOwogfQogCisvKiByZWFkIGFsbCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgc2F2ZSBjb2RlYy0+aW5pdF9waW5zICovCitzdGF0aWMgaW50IHJlYWRfcGluX2RlZmF1bHRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWhkYV9uaWRfdCBuaWQgPSBjb2RlYy0+c3RhcnRfbmlkOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKwkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOworCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSAod2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+CisJCQkJQUNfV0NBUF9UWVBFX1NISUZUOworCQlpZiAod2lkX3R5cGUgIT0gQUNfV0lEX1BJTikKKwkJCWNvbnRpbnVlOworCQlwaW4gPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aW5pdF9waW5zKTsKKwkJaWYgKCFwaW4pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcGluLT5uaWQgPSBuaWQ7CisJCXBpbi0+Y2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGxvb2sgdXAgdGhlIGdpdmVuIHBpbiBjb25maWcgbGlzdCBhbmQgcmV0dXJuIHRoZSBpdGVtIG1hdGNoaW5nIHdpdGggTklEICovCitzdGF0aWMgc3RydWN0IGhkYV9waW5jZmcgKmxvb2tfdXBfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgc3RydWN0IHNuZF9hcnJheSAqYXJyYXksCisJCQkJCSBoZGFfbmlkX3QgbmlkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+dXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbShhcnJheSwgaSk7CisJCWlmIChwaW4tPm5pZCA9PSBuaWQpCisJCQlyZXR1cm4gcGluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogd3JpdGUgYSBjb25maWcgdmFsdWUgZm9yIHRoZSBnaXZlbiBOSUQgKi8KK3N0YXRpYyB2b2lkIHNldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY2ZnKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wICsgaSwKKwkJCQkgICAgY2ZnICYgMHhmZik7CisJCWNmZyA+Pj0gODsKKwl9Cit9CisKKy8qIHNldCB0aGUgY3VycmVudCBwaW4gY29uZmlnIHZhbHVlIGZvciB0aGUgZ2l2ZW4gTklELgorICogdGhlIHZhbHVlIGlzIGNhY2hlZCwgYW5kIHJlYWQgdmlhIHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZygpCisgKi8KK2ludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisJdW5zaWduZWQgaW50IG9sZGNmZzsKKworCW9sZGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgbGlzdCwgbmlkKTsKKwlpZiAoIXBpbikgeworCQlwaW4gPSBzbmRfYXJyYXlfbmV3KGxpc3QpOworCQlpZiAoIXBpbikKKwkJCXJldHVybiAtRU5PTUVNOworCQlwaW4tPm5pZCA9IG5pZDsKKwl9CisJcGluLT5jZmcgPSBjZmc7CisKKwkvKiBjaGFuZ2Ugb25seSB3aGVuIG5lZWRlZDsgZS5nLiBpZiB0aGUgcGluY2ZnIGlzIGFscmVhZHkgcHJlc2VudAorCSAqIGluIHVzZXJfcGluc1tdLCBkb24ndCB3cml0ZSBpdAorCSAqLworCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlpZiAob2xkY2ZnICE9IGNmZykKKwkJc2V0X3BpbmNmZyhjb2RlYywgbmlkLCBjZmcpOworCXJldHVybiAwOworfQorCitpbnQgc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXJldHVybiBzbmRfaGRhX2FkZF9waW5jZmcoY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIG5pZCwgY2ZnKTsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyk7CisKKy8qIGdldCB0aGUgY3VycmVudCBwaW4gY29uZmlnIHZhbHVlIG9mIHRoZSBnaXZlbiBwaW4gTklEICovCit1bnNpZ25lZCBpbnQgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAorCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisjZW5kaWYKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+aW5pdF9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyk7CisKKy8qIHJlc3RvcmUgYWxsIGN1cnJlbnQgcGluIGNvbmZpZ3MgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfcGluY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfcGlucy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF9waW5zLCBpKTsKKwkJc2V0X3BpbmNmZyhjb2RlYywgcGluLT5uaWQsCisJCQkgICBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbi0+bmlkKSk7CisJfQorfQogCiBzdGF0aWMgdm9pZCBpbml0X2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUpOwogc3RhdGljIHZvaWQgZnJlZV9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlKTsKIAorLyogcmVzdG9yZSB0aGUgaW5pdGlhbCBwaW4gY2ZncyBhbmQgcmVsZWFzZSBhbGwgcGluY2ZnIGxpc3RzICovCitzdGF0aWMgdm9pZCByZXN0b3JlX2luaXRfcGluY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwkvKiBmaXJzdCBmcmVlIGRyaXZlcl9waW5zIGFuZCB1c2VyX3BpbnMsIHRoZW4gY2FsbCByZXN0b3JlX3BpbmNmZworCSAqIHNvIHRoYXQgb25seSB0aGUgdmFsdWVzIGluIGluaXRfcGlucyBhcmUgcmVzdG9yZWQKKwkgKi8KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmRyaXZlcl9waW5zKTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAorCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+dXNlcl9waW5zKTsKKyNlbmRpZgorCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5pbml0X3BpbnMpOworfQorCiAvKgogICogY29kZWMgZGVzdHJ1Y3RvcgogICovCkBAIC02OTQsNiArODIzLDcgQEAKIHsKIAlpZiAoIWNvZGVjKQogCQlyZXR1cm47CisJcmVzdG9yZV9pbml0X3BpbmNmZ3MoY29kZWMpOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAljYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+cG93ZXJfd29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKGNvZGVjLT5idXMtPndvcmtxKTsKQEAgLTcxMiw2ICs4NDIsOSBAQAogCWtmcmVlKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgaGRhX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGZnLAorCQkJCXVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSk7CisKIC8qKgogICogc25kX2hkYV9jb2RlY19uZXcgLSBjcmVhdGUgYSBIREEgY29kZWMKICAqIEBidXM6IHRoZSBidXMgdG8gYXNzaWduCkBAIC03NTEsNiArODg0LDggQEAKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmFtcF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfY2FjaGVfaGVhZCkpOwogCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bWl4ZXJzLCBzaXplb2Yoc3RydWN0IHNuZF9rY29udHJvbCAqKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aW5pdF9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5kcml2ZXJfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOwogCWlmIChjb2RlYy0+YnVzLT5tb2RlbG5hbWUpIHsKIAkJY29kZWMtPm1vZGVsbmFtZSA9IGtzdHJkdXAoY29kZWMtPmJ1cy0+bW9kZWxuYW1lLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjb2RlYy0+bW9kZWxuYW1lKSB7CkBAIC03ODcsMTUgKzkyMiwxOCBAQAogCXNldHVwX2ZnX25vZGVzKGNvZGVjKTsKIAlpZiAoIWNvZGVjLT5hZmcgJiYgIWNvZGVjLT5tZmcpIHsKIAkJc25kX3ByaW50ZGQoImhkYV9jb2RlYzogbm8gQUZHIG9yIE1GRyBub2RlIGZvdW5kXG4iKTsKLQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JaWYgKHJlYWRfd2lkZ2V0X2NhcHMoY29kZWMsIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZykgPCAwKSB7CisJZXJyID0gcmVhZF93aWRnZXRfY2Fwcyhjb2RlYywgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBtYWxsb2NcbiIpOwotCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKIAl9CisJZXJyID0gcmVhZF9waW5fZGVmYXVsdHMoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOwogCiAJaWYgKCFjb2RlYy0+c3Vic3lzdGVtX2lkKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmc7CkBAIC04MDYsMTIgKzk0NCwxNSBAQAogCWlmIChidXMtPm1vZGVsbmFtZSkKIAkJY29kZWMtPm1vZGVsbmFtZSA9IGtzdHJkdXAoYnVzLT5tb2RlbG5hbWUsIEdGUF9LRVJORUwpOwogCisJLyogcG93ZXItdXAgYWxsIGJlZm9yZSBpbml0aWFsaXphdGlvbiAqLworCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCisJCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAorCQkJICAgIEFDX1BXUlNUX0QwKTsKKwogCWlmIChkb19pbml0KSB7CiAJCWVyciA9IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvcjsKIAl9CiAJc25kX2hkYV9jb2RlY19wcm9jX25ldyhjb2RlYyk7CiAKQEAgLTgyNCw2ICs5NjUsMTAgQEAKIAlpZiAoY29kZWNwKQogCQkqY29kZWNwID0gY29kZWM7CiAJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX25ldyk7CiAKQEAgLTkwNyw2ICsxMDUyLDcgQEAKIAogLyogRklYTUU6IG1vcmUgYmV0dGVyIGhhc2gga2V5PyAqLwogI2RlZmluZSBIREFfSEFTSF9LRVkobmlkLGRpcixpZHgpICh1MzIpKChuaWQpICsgKChpZHgpIDw8IDE2KSArICgoZGlyKSA8PCAyNCkpCisjZGVmaW5lIEhEQV9IQVNIX1BJTkNBUF9LRVkobmlkKSAodTMyKSgobmlkKSArICgweDAyIDw8IDI0KSkKICNkZWZpbmUgSU5GT19BTVBfQ0FQUwkoMTw8MCkKICNkZWZpbmUgSU5GT19BTVBfVk9MKGNoKQkoMSA8PCAoMSArIChjaCkpKQogCkBAIC05OTcsNiArMTE0MywyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyk7CiAKK3UzMiBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfYW1wX2luZm8gKmluZm87CisKKwlpbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9QSU5DQVBfS0VZKG5pZCkpOworCWlmICghaW5mbykKKwkJcmV0dXJuIDA7CisJaWYgKCFpbmZvLT5oZWFkLnZhbCkgeworCQlpbmZvLT5hbXBfY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCWluZm8tPmhlYWQudmFsIHw9IElORk9fQU1QX0NBUFM7CisJfQorCXJldHVybiBpbmZvLT5hbXBfY2FwczsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMpOworCiAvKgogICogcmVhZCB0aGUgY3VycmVudCB2b2x1bWUgdG8gaW5mbwogICogaWYgdGhlIGNhY2hlIGV4aXN0cywgcmVhZCB0aGUgY2FjaGUgdmFsdWUuCkBAIC0xMTIwLDYgKzEyODEsNyBAQAogCXUxNiBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CiAJdTggY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCXUzMiBjYXBzOwogCiAJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIGRpcik7CkBAIC0xMTMxLDYgKzEyOTMsOCBAQAogCQkgICAgICAga2NvbnRyb2wtPmlkLm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKG9mcyA8IGNhcHMpCisJCWNhcHMgLT0gb2ZzOwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwogCXVpbmZvLT5jb3VudCA9IGNocyA9PSAzID8gMiA6IDE7CiAJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKQEAgLTExMzksNiArMTMwMywzMiBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8pOwogCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFkX2FtcF92YWx1ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkgICAgICAgaW50IGNoLCBpbnQgZGlyLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgb2ZzKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdmFsID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCBjaCwgZGlyLCBpZHgpOworCXZhbCAmPSBIREFfQU1QX1ZPTE1BU0s7CisJaWYgKHZhbCA+PSBvZnMpCisJCXZhbCAtPSBvZnM7CisJZWxzZQorCQl2YWwgPSAwOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1cGRhdGVfYW1wX3ZhbHVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkgaW50IGNoLCBpbnQgZGlyLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgb2ZzLAorCQkgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpZiAodmFsID4gMCkKKwkJdmFsICs9IG9mczsKKwlyZXR1cm4gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIGNoLCBkaXIsIGlkeCwKKwkJCQkJSERBX0FNUF9WT0xNQVNLLCB2YWwpOworfQorCiBpbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0xMTQ3LDE0ICsxMzM3LDEzIEBACiAJaW50IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CiAJaW50IGlkeCA9IGdldF9hbXBfaW5kZXgoa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwogCiAJaWYgKGNocyAmIDEpCi0JCSp2YWxwKysgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4KQotCQkJJiBIREFfQU1QX1ZPTE1BU0s7CisJCSp2YWxwKysgPSByZWFkX2FtcF92YWx1ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwgb2ZzKTsKIAlpZiAoY2hzICYgMikKLQkJKnZhbHAgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4KQotCQkJJiBIREFfQU1QX1ZPTE1BU0s7CisJCSp2YWxwID0gcmVhZF9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsIG9mcyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0KTsKQEAgLTExNjcsMTggKzEzNTYsMTcgQEAKIAlpbnQgY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKIAlpbnQgaWR4ID0gZ2V0X2FtcF9pbmRleChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CiAJaW50IGNoYW5nZSA9IDA7CiAKIAlzbmRfaGRhX3Bvd2VyX3VwKGNvZGVjKTsKIAlpZiAoY2hzICYgMSkgewotCQljaGFuZ2UgPSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsCi0JCQkJCQkgIDB4N2YsICp2YWxwKTsKKwkJY2hhbmdlID0gdXBkYXRlX2FtcF92YWx1ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwgb2ZzLCAqdmFscCk7CiAJCXZhbHArKzsKIAl9CiAJaWYgKGNocyAmIDIpCi0JCWNoYW5nZSB8PSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsCi0JCQkJCQkgICAweDdmLCAqdmFscCk7CisJCWNoYW5nZSB8PSB1cGRhdGVfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LCBvZnMsICp2YWxwKTsKIAlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOwogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0xMTkwLDYgKzEzNzgsNyBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWhkYV9uaWRfdCBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCXUzMiBjYXBzLCB2YWwxLCB2YWwyOwogCiAJaWYgKHNpemUgPCA0ICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCkBAIC0xMTk4LDYgKzEzODcsNyBAQAogCXZhbDIgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQ7CiAJdmFsMiA9ICh2YWwyICsgMSkgKiAyNTsKIAl2YWwxID0gLSgoY2FwcyAmIEFDX0FNUENBUF9PRkZTRVQpID4+IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpOworCXZhbDEgKz0gb2ZzOwogCXZhbDEgPSAoKGludCl2YWwxKSAqICgoaW50KXZhbDIpOwogCWlmIChwdXRfdXNlcihTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSwgX3RsdikpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTI2OCw3ICsxNDU4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY3RsX2FkZCk7CiAKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRwogLyogQ2xlYXIgYWxsIGNvbnRyb2xzIGFzc2lnbmVkIHRvIHRoZSBnaXZlbiBjb2RlYyAqLwogdm9pZCBzbmRfaGRhX2N0bHNfY2xlYXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMjc5LDkgKzE0NjgsNTIgQEAKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm1peGVycyk7CiB9CiAKLXZvaWQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKKy8qIHBzZXVkbyBkZXZpY2UgbG9ja2luZworICogdG9nZ2xlIGNhcmQtPnNodXRkb3duIHRvIGFsbG93L2Rpc2FsbG93IHRoZSBkZXZpY2UgYWNjZXNzIChhcyBhIGhhY2spCisgKi8KK3N0YXRpYyBpbnQgaGRhX2xvY2tfZGV2aWNlcyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7Ci0JaW50IGk7CisJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwlpZiAoY2FyZC0+c2h1dGRvd24pIHsKKwkJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2FyZC0+c2h1dGRvd24gPSAxOworCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRhX3VubG9ja19kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCWNhcmQtPnNodXRkb3duID0gMDsKKwlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Cit9CisKK2ludCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNvZGVjLT5idXMtPmNhcmQ7CisJaW50IGksIHBjbTsKKworCWlmIChoZGFfbG9ja19kZXZpY2VzKGNhcmQpIDwgMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKiBjaGVjayB3aGV0aGVyIHRoZSBjb2RlYyBpc24ndCB1c2VkIGJ5IGFueSBtaXhlciBvciBQQ00gc3RyZWFtcyAqLworCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+Y3RsX2ZpbGVzKSkgeworCQloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWZvciAocGNtID0gMDsgcGNtIDwgY29kZWMtPm51bV9wY21zOyBwY20rKykgeworCQlzdHJ1Y3QgaGRhX3BjbSAqY3BjbSA9ICZjb2RlYy0+cGNtX2luZm9bcGNtXTsKKwkJaWYgKCFjcGNtLT5wY20pCisJCQljb250aW51ZTsKKwkJaWYgKGNwY20tPnBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW1fb3BlbmVkIHx8CisJCSAgICBjcGNtLT5wY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtX29wZW5lZCkgeworCQkJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCS8qIE9LLCBsZXQgaXQgZnJlZSAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvZGVjLT5wb3dlcl93b3JrKTsKQEAgLTEyOTEsOCArMTUyMyw3IEBACiAJLyogcmVsYXNlIFBDTXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9wY21zOyBpKyspIHsKIAkJaWYgKGNvZGVjLT5wY21faW5mb1tpXS5wY20pIHsKLQkJCXNuZF9kZXZpY2VfZnJlZShjb2RlYy0+YnVzLT5jYXJkLAotCQkJCQljb2RlYy0+cGNtX2luZm9baV0ucGNtKTsKKwkJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjb2RlYy0+cGNtX2luZm9baV0ucGNtKTsKIAkJCWNsZWFyX2JpdChjb2RlYy0+cGNtX2luZm9baV0uZGV2aWNlLAogCQkJCSAgY29kZWMtPmJ1cy0+cGNtX2Rldl9iaXRzKTsKIAkJfQpAQCAtMTMwNSwxMyArMTUzNiwyMiBAQAogCWZyZWVfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmFtcF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfY2FjaGVfaGVhZCkpOworCS8qIGZyZWUgb25seSBkcml2ZXJfcGlucyBzbyB0aGF0IGluaXRfcGlucyArIHVzZXJfcGlucyBhcmUgcmVzdG9yZWQgKi8KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmRyaXZlcl9waW5zKTsKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOwogCWNvZGVjLT5udW1fcGNtcyA9IDA7CiAJY29kZWMtPnBjbV9pbmZvID0gTlVMTDsKIAljb2RlYy0+cHJlc2V0ID0gTlVMTDsKKwltZW1zZXQoJmNvZGVjLT5wYXRjaF9vcHMsIDAsIHNpemVvZihjb2RlYy0+cGF0Y2hfb3BzKSk7CisJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gTlVMTDsKKwljb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ID0gMDsKIAltb2R1bGVfcHV0KGNvZGVjLT5vd25lcik7CiAJY29kZWMtPm93bmVyID0gTlVMTDsKKworCS8qIGFsbG93IGRldmljZSBhY2Nlc3MgYWdhaW4gKi8KKwloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NORF9IREFfUkVDT05GSUcgKi8KIAogLyogY3JlYXRlIGEgdmlydHVhbCBtYXN0ZXIgY29udHJvbCBhbmQgYWRkIHNsYXZlcyAqLwogaW50IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNoYXIgKm5hbWUsCkBAIC0xMzM2LDE1ICsxNTc2LDIwIEBACiAJCiAJZm9yIChzID0gc2xhdmVzOyAqczsgcysrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNjdGw7Ci0KLQkJc2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICpzKTsKLQkJaWYgKCFzY3RsKSB7Ci0JCQlzbmRfcHJpbnRkZCgiQ2Fubm90IGZpbmQgc2xhdmUgJXMsIHNraXBwZWRcbiIsICpzKTsKLQkJCWNvbnRpbnVlOworCQlpbnQgaSA9IDA7CisJCWZvciAoOzspIHsKKwkJCXNjdGwgPSBfc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgKnMsIGkpOworCQkJaWYgKCFzY3RsKSB7CisJCQkJaWYgKCFpKQorCQkJCQlzbmRfcHJpbnRkZCgiQ2Fubm90IGZpbmQgc2xhdmUgJXMsICIKKwkJCQkJCSAgICAic2tpcHBlZFxuIiwgKnMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUoa2N0bCwgc2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJaSsrOwogCQl9Ci0JCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKGtjdGwsIHNjdGwpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTk1NSw2ICsyMjAwLDggQEAKIAl9CiAJZm9yIChkaWdfbWl4ID0gZGlnX2luX2N0bHM7IGRpZ19taXgtPm5hbWU7IGRpZ19taXgrKykgewogCQlrY3RsID0gc25kX2N0bF9uZXcxKGRpZ19taXgsIGNvZGVjKTsKKwkJaWYgKCFrY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBuaWQ7CiAJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMjA3NCw4ICsyMzIxLDcgQEAKIAkJCQkgKiBkb24ndCBwb3dlciBkb3duIHRoZSB3aWRnZXQgaWYgaXQgY29udHJvbHMKIAkJCQkgKiBlYXBkIGFuZCBFQVBEX0JUTEVOQUJMRSBpcyBzZXQuCiAJCQkJICovCi0JCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkJICAgIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQkJCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfRUFQRCkgewogCQkJCQlpbnQgZWFwZCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywKIAkJCQkJCW5pZCwgMCwKQEAgLTIxNDQsNiArMjM5MCw3IEBACiAJaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKIAkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCiAJCQkgICAgQUNfUFdSU1RfRDApOworCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7IC8qIHJlc3RvcmUgYWxsIGN1cnJlbnQgcGluIGNvbmZpZ3MgKi8KIAloZGFfZXhlY19pbml0X3ZlcmJzKGNvZGVjKTsKIAlpZiAoY29kZWMtPnBhdGNoX29wcy5yZXN1bWUpCiAJCWNvZGVjLT5wYXRjaF9vcHMucmVzdW1lKGNvZGVjKTsKQEAgLTIxNzEsOCArMjQxOCwxNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgewogCQlpbnQgZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYnVpbGQgY29udHJvbHMiCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGRhX2NvZGVjOiBjYW5ub3QgcmV2ZXJ0IGNvZGVjXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE4MSwxOSArMjQzNiwxMiBAQAogaW50IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJaW50IGVyciA9IDA7Ci0JLyogZmFrZSBhcyBpZiBhbHJlYWR5IHBvd2VyZWQtb24gKi8KLQloZGFfa2VlcF9wb3dlcl9vbihjb2RlYyk7Ci0JLyogdGhlbiBmaXJlIHVwICovCi0JaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKLQkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCi0JCQkgICAgQUNfUFdSU1RfRDApOwogCWhkYV9leGVjX2luaXRfdmVyYnMoY29kZWMpOwogCS8qIGNvbnRpbnVlIHRvIGluaXRpYWxpemUuLi4gKi8KIAlpZiAoY29kZWMtPnBhdGNoX29wcy5pbml0KQogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCWlmICghZXJyICYmIGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMpCiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMoY29kZWMpOwotCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CkBAIC0yMzA2LDEyICsyNTU0LDExIEBACiBzdGF0aWMgaW50IHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQl1MzIgKnJhdGVzcCwgdTY0ICpmb3JtYXRzcCwgdW5zaWduZWQgaW50ICpicHNwKQogewotCWludCBpOwotCXVuc2lnbmVkIGludCB2YWwsIHN0cmVhbXM7CisJdW5zaWduZWQgaW50IGksIHZhbCwgd2NhcHM7CiAKIAl2YWwgPSAwOwotCWlmIChuaWQgIT0gY29kZWMtPmFmZyAmJgotCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkpIHsKKwl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKKwlpZiAobmlkICE9IGNvZGVjLT5hZmcgJiYgKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkpIHsKIAkJdmFsID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QQ00pOwogCQlpZiAodmFsID09IC0xKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yMzI1LDE1ICsyNTcyLDIwIEBACiAJCQlpZiAodmFsICYgKDEgPDwgaSkpCiAJCQkJcmF0ZXMgfD0gcmF0ZV9iaXRzW2ldLmFsc2FfYml0czsKIAkJfQorCQlpZiAocmF0ZXMgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiByYXRlcyA9PSAwICIKKwkJCQkgICAiKG5pZD0weCV4LCB2YWw9MHgleCwgb3ZyZD0laSlcbiIsCisJCQkJCW5pZCwgdmFsLAorCQkJCQkod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSA/IDEgOiAwKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJCSpyYXRlc3AgPSByYXRlczsKIAl9CiAKIAlpZiAoZm9ybWF0c3AgfHwgYnBzcCkgewogCQl1NjQgZm9ybWF0cyA9IDA7Ci0JCXVuc2lnbmVkIGludCBicHM7Ci0JCXVuc2lnbmVkIGludCB3Y2FwczsKKwkJdW5zaWduZWQgaW50IHN0cmVhbXMsIGJwczsKIAotCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKIAkJc3RyZWFtcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfU1RSRUFNKTsKIAkJaWYgKHN0cmVhbXMgPT0gLTEpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTIzODYsNiArMjYzOCwxNSBAQAogCQkJZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX1U4OwogCQkJYnBzID0gODsKIAkJfQorCQlpZiAoZm9ybWF0cyA9PSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGZvcm1hdHMgPT0gMCAiCisJCQkJICAgIihuaWQ9MHgleCwgdmFsPTB4JXgsIG92cmQ9JWksICIKKwkJCQkgICAic3RyZWFtcz0weCV4KVxuIiwKKwkJCQkJbmlkLCB2YWwsCisJCQkJCSh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpID8gMSA6IDAsCisJCQkJCXN0cmVhbXMpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAkJaWYgKGZvcm1hdHNwKQogCQkJKmZvcm1hdHNwID0gZm9ybWF0czsKIAkJaWYgKGJwc3ApCkBAIC0yNTAxLDEyICsyNzYyLDE2IEBACiBzdGF0aWMgaW50IHNldF9wY21fZGVmYXVsdF92YWx1ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8pCiB7CisJaW50IGVycjsKKwogCS8qIHF1ZXJ5IHN1cHBvcnQgUENNIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIE5JRCAqLwogCWlmIChpbmZvLT5uaWQgJiYgKCFpbmZvLT5yYXRlcyB8fCAhaW5mby0+Zm9ybWF0cykpIHsKLQkJc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCisJCWVyciA9IHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShjb2RlYywgaW5mby0+bmlkLAogCQkJCWluZm8tPnJhdGVzID8gTlVMTCA6ICZpbmZvLT5yYXRlcywKIAkJCQlpbmZvLT5mb3JtYXRzID8gTlVMTCA6ICZpbmZvLT5mb3JtYXRzLAogCQkJCWluZm8tPm1heGJwcyA/IE5VTEwgOiAmaW5mby0+bWF4YnBzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoaW5mby0+b3BzLm9wZW4gPT0gTlVMTCkKIAkJaW5mby0+b3BzLm9wZW4gPSBoZGFfcGNtX2RlZmF1bHRfb3Blbl9jbG9zZTsKQEAgLTI1NDksMTMgKzI4MTQsMTAgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXVkaW9faWR4KTsgaSsrKSB7CiAJCQlkZXYgPSBhdWRpb19pZHhbaV07CiAJCQlpZiAoIXRlc3RfYml0KGRldiwgYnVzLT5wY21fZGV2X2JpdHMpKQotCQkJCWJyZWFrOworCQkJCWdvdG8gb2s7CiAJCX0KLQkJaWYgKGkgPj0gQVJSQVlfU0laRShhdWRpb19pZHgpKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgYXVkaW8gZGV2aWNlc1xuIik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQlicmVhazsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55IGF1ZGlvIGRldmljZXNcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKIAljYXNlIEhEQV9QQ01fVFlQRV9TUERJRjoKIAljYXNlIEhEQV9QQ01fVFlQRV9IRE1JOgogCWNhc2UgSERBX1BDTV9UWVBFX01PREVNOgpAQCAtMjU3MCw2ICsyODMyLDcgQEAKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgUENNIHR5cGUgJWRcbiIsIHR5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Cisgb2s6CiAJc2V0X2JpdChkZXYsIGJ1cy0+cGNtX2Rldl9iaXRzKTsKIAlyZXR1cm4gZGV2OwogfQpAQCAtMjYwNiwyNCArMjg2OSwzNiBAQAogCQlpZiAoIWNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcykKIAkJCXJldHVybiAwOwogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX3BjbXMoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIFBDTXMiCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGRhX2NvZGVjOiBjYW5ub3QgcmV2ZXJ0IGNvZGVjXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CiAJfQogCWZvciAocGNtID0gMDsgcGNtIDwgY29kZWMtPm51bV9wY21zOyBwY20rKykgewogCQlzdHJ1Y3QgaGRhX3BjbSAqY3BjbSA9ICZjb2RlYy0+cGNtX2luZm9bcGNtXTsKIAkJaW50IGRldjsKIAogCQlpZiAoIWNwY20tPnN0cmVhbVswXS5zdWJzdHJlYW1zICYmICFjcGNtLT5zdHJlYW1bMV0uc3Vic3RyZWFtcykKLQkJCXJldHVybiAwOyAvKiBubyBzdWJzdHJlYW1zIGFzc2lnbmVkICovCisJCQljb250aW51ZTsgLyogbm8gc3Vic3RyZWFtcyBhc3NpZ25lZCAqLwogCiAJCWlmICghY3BjbS0+cGNtKSB7CiAJCQlkZXYgPSBnZXRfZW1wdHlfcGNtX2RldmljZShjb2RlYy0+YnVzLCBjcGNtLT5wY21fdHlwZSk7CiAJCQlpZiAoZGV2IDwgMCkKLQkJCQlyZXR1cm4gMDsKKwkJCQljb250aW51ZTsgLyogbm8gZmF0YWwgZXJyb3IgKi8KIAkJCWNwY20tPmRldmljZSA9IGRldjsKIAkJCWVyciA9IHNuZF9oZGFfYXR0YWNoX3BjbShjb2RlYywgY3BjbSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGF0dGFjaCAiCisJCQkJICAgICAgICJQQ00gc3RyZWFtICVkIGZvciBjb2RlYyAjJWRcbiIsCisJCQkJICAgICAgIGRldiwgY29kZWMtPmFkZHIpOworCQkJCWNvbnRpbnVlOyAvKiBubyBmYXRhbCBlcnJvciAqLworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMzMyNCw4ICszNTk5LDcgQEAKIAkJaWYgKGlnbm9yZV9uaWRzICYmIGlzX2luX25pZF9saXN0KG5pZCwgaWdub3JlX25pZHMpKQogCQkJY29udGludWU7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIAkJbG9jID0gZ2V0X2RlZmNmZ19sb2NhdGlvbihkZWZfY29uZik7CkBAIC0zNDAxLDEwICszNjc1LDIyIEBACiAJCQljZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQVVYXSA9IG5pZDsKIAkJCWJyZWFrOwogCQljYXNlIEFDX0pBQ0tfU1BESUZfT1VUOgotCQkJY2ZnLT5kaWdfb3V0X3BpbiA9IG5pZDsKKwkJY2FzZSBBQ19KQUNLX0RJR19PVEhFUl9PVVQ6CisJCQlpZiAoY2ZnLT5kaWdfb3V0cyA+PSBBUlJBWV9TSVpFKGNmZy0+ZGlnX291dF9waW5zKSkKKwkJCQljb250aW51ZTsKKwkJCWNmZy0+ZGlnX291dF9waW5zW2NmZy0+ZGlnX291dHNdID0gbmlkOworCQkJY2ZnLT5kaWdfb3V0X3R5cGVbY2ZnLT5kaWdfb3V0c10gPQorCQkJCShsb2MgPT0gQUNfSkFDS19MT0NfSERNSSkgPworCQkJCUhEQV9QQ01fVFlQRV9IRE1JIDogSERBX1BDTV9UWVBFX1NQRElGOworCQkJY2ZnLT5kaWdfb3V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfSkFDS19TUERJRl9JTjoKKwkJY2FzZSBBQ19KQUNLX0RJR19PVEhFUl9JTjoKIAkJCWNmZy0+ZGlnX2luX3BpbiA9IG5pZDsKKwkJCWlmIChsb2MgPT0gQUNfSkFDS19MT0NfSERNSSkKKwkJCQljZmctPmRpZ19pbl90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CisJCQllbHNlCisJCQkJY2ZnLT5kaWdfaW5fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzUxMCw2ICszNzk2LDkgQEAKIAkJICAgY2ZnLT5ocF9waW5zWzFdLCBjZmctPmhwX3BpbnNbMl0sCiAJCSAgIGNmZy0+aHBfcGluc1szXSwgY2ZnLT5ocF9waW5zWzRdKTsKIAlzbmRfcHJpbnRkKCIgICBtb25vOiBtb25vX291dD0weCV4XG4iLCBjZmctPm1vbm9fb3V0X3Bpbik7CisJaWYgKGNmZy0+ZGlnX291dHMpCisJCXNuZF9wcmludGQoIiAgIGRpZy1vdXQ9MHgleC8weCV4XG4iLAorCQkJICAgY2ZnLT5kaWdfb3V0X3BpbnNbMF0sIGNmZy0+ZGlnX291dF9waW5zWzFdKTsKIAlzbmRfcHJpbnRkKCIgICBpbnB1dHM6IG1pYz0weCV4LCBmbWljPTB4JXgsIGxpbmU9MHgleCwgZmxpbmU9MHgleCwiCiAJCSAgICIgY2Q9MHgleCwgYXV4PTB4JXhcbiIsCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdLApAQCAtMzUxOCw2ICszODA3LDggQEAKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX0xJTkVdLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQ0RdLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQVVYXSk7CisJaWYgKGNmZy0+ZGlnX2luX3BpbikKKwkJc25kX3ByaW50ZCgiICAgZGlnLWluPTB4JXhcbiIsIGNmZy0+ZGlnX2luX3Bpbik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDA5YTMzMmEuLjJmZGVjZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtNzM5LDYgKzczOSw3IEBACiAJaGRhX25pZF90IG1mZzsJLyogTUZHIG5vZGUgaWQgKi8KIAogCS8qIGlkcyAqLworCXUzMiBmdW5jdGlvbl9pZDsKIAl1MzIgdmVuZG9yX2lkOwogCXUzMiBzdWJzeXN0ZW1faWQ7CiAJdTMyIHJldmlzaW9uX2lkOwpAQCAtNzc4LDExICs3NzksMTQgQEAKIAl1bnNpZ25lZCBzaG9ydCBzcGRpZl9jdGxzOwkvKiBTUERJRiBjb250cm9sIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3BkaWZfaW5fZW5hYmxlOwkvKiBTUERJRiBpbnB1dCBlbmFibGU/ICovCiAJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsgLyogb3B0aW9uYWwgZGlnaXRhbCBvdXQgc2xhdmUgd2lkZ2V0cyAqLworCXN0cnVjdCBzbmRfYXJyYXkgaW5pdF9waW5zOwkvKiBpbml0aWFsIChCSU9TKSBwaW4gY29uZmlndXJhdGlvbnMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IGRyaXZlcl9waW5zOwkvKiBwaW4gY29uZmlncyBzZXQgYnkgY29kZWMgcGFyc2VyICovCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwOwkvKiBhc3NpZ25lZCBod2RlcCBkZXZpY2UgKi8KIAlzdHJ1Y3Qgc25kX2FycmF5IGluaXRfdmVyYnM7CS8qIGFkZGl0aW9uYWwgaW5pdCB2ZXJicyAqLwogCXN0cnVjdCBzbmRfYXJyYXkgaGludHM7CQkvKiBhZGRpdGlvbmFsIGhpbnRzICovCisJc3RydWN0IHNuZF9hcnJheSB1c2VyX3BpbnM7CS8qIGRlZmF1bHQgcGluIGNvbmZpZ3MgdG8gb3ZlcnJpZGUgKi8KICNlbmRpZgogCiAJLyogbWlzYyBmbGFncyAqLwpAQCAtNzkwLDYgKzc5NCw5IEBACiAJCQkJCSAgICAgKiBzdGF0dXMgY2hhbmdlCiAJCQkJCSAgICAgKiAoZS5nLiBSZWFsdGVrIGNvZGVjcykKIAkJCQkJICAgICAqLworCXVuc2lnbmVkIGludCBwaW5fYW1wX3dvcmthcm91bmQ6MTsgLyogcGluIG91dC1hbXAgdGFrZXMgaW5kZXgKKwkJCQkJICAgICogKGUuZy4gQ29uZXhhbnQgY29kZWNzKQorCQkJCQkgICAgKi8KICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJdW5zaWduZWQgaW50IHBvd2VyX29uIDoxOwkvKiBjdXJyZW50IChnbG9iYWwpIHBvd2VyLXN0YXRlICovCiAJdW5zaWduZWQgaW50IHBvd2VyX3RyYW5zaXRpb24gOjE7IC8qIHBvd2VyLXN0YXRlIGluIHRyYW5zaXRpb24gKi8KQEAgLTg1NSw2ICs4NjIsMTggQEAKICNkZWZpbmUgc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlCiAjZW5kaWYKIAorLyogdGhlIHN0cnVjdCBmb3IgY29kZWMtPnBpbl9jb25maWdzICovCitzdHJ1Y3QgaGRhX3BpbmNmZyB7CisJaGRhX25pZF90IG5pZDsKKwl1bnNpZ25lZCBpbnQgY2ZnOworfTsKKwordW5zaWduZWQgaW50IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CitpbnQgc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY2ZnKTsKK2ludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKTsgLyogZm9yIGh3ZGVwICovCisKIC8qCiAgKiBNaXhlcgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKaW5kZXggNjU3NDVlOS4uMWQ1Nzk3YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwpAQCAtMTQ0LDkgKzE0NCw5IEBACiAJbm9kZS0+dHlwZSA9IChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCiAJaWYgKG5vZGUtPnR5cGUgPT0gQUNfV0lEX1BJTikgewotCQlub2RlLT5waW5fY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbm9kZS0+bmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCW5vZGUtPnBpbl9jYXBzID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbm9kZS0+bmlkKTsKIAkJbm9kZS0+cGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbm9kZS0+bmlkLCAwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOwotCQlub2RlLT5kZWZfY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBub2RlLT5uaWQsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJbm9kZS0+ZGVmX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbm9kZS0+bmlkKTsKIAl9CiAKIAlpZiAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX09VVF9BTVApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCmluZGV4IDRhZTUxZGMuLjFjNTc1MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwpAQCAtMzAsNiArMzAsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9oZGFfaHdkZXAuaD4KICNpbmNsdWRlIDxzb3VuZC9taW5vcnMuaD4KIAorLyogaGludCBzdHJpbmcgcGFpciAqLworc3RydWN0IGhkYV9oaW50IHsKKwljb25zdCBjaGFyICprZXk7CisJY29uc3QgY2hhciAqdmFsOwkvKiBjb250YWluZWQgaW4gdGhlIHNhbWUgYWxsb2MgYXMga2V5ICovCit9OworCiAvKgogICogd3JpdGUvcmVhZCBhbiBvdXQtb2YtYm91bmQgdmVyYgogICovCkBAIC05OSwxNiArMTA1LDE3IEBACiAKIHN0YXRpYyB2b2lkIGNsZWFyX2h3ZGVwX2VsZW1lbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWNoYXIgKipoZWFkOwogCWludCBpOwogCiAJLyogY2xlYXIgaW5pdCB2ZXJicyAqLwogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aW5pdF92ZXJicyk7CiAJLyogY2xlYXIgaGludHMgKi8KLQloZWFkID0gY29kZWMtPmhpbnRzLmxpc3Q7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyssIGhlYWQrKykKLQkJa2ZyZWUoKmhlYWQpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfaGludCAqaGludCA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aGludHMsIGkpOworCQlrZnJlZShoaW50LT5rZXkpOyAvKiB3ZSBkb24ndCBuZWVkIHRvIGZyZWUgaGludC0+dmFsICovCisJfQogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aGludHMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+dXNlcl9waW5zKTsKIH0KIAogc3RhdGljIHZvaWQgaHdkZXBfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCkKQEAgLTE0MCw3ICsxNDcsOCBAQAogI2VuZGlmCiAKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmluaXRfdmVyYnMsIHNpemVvZihzdHJ1Y3QgaGRhX3ZlcmIpLCAzMik7Ci0Jc25kX2FycmF5X2luaXQoJmNvZGVjLT5oaW50cywgc2l6ZW9mKGNoYXIgKiksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmhpbnRzLCBzaXplb2Yoc3RydWN0IGhkYV9oaW50KSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+dXNlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1Myw3ICsxNjEsMTMgQEAKIAogc3RhdGljIGludCBjbGVhcl9jb2RlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiVGhlIGNvZGVjIGlzIGJlaW5nIHVzZWQsIGNhbid0IGZyZWUuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJY2xlYXJfaHdkZXBfZWxlbWVudHMoY29kZWMpOwogCXJldHVybiAwOwogfQpAQCAtMTYyLDIwICsxNzYsMjkgQEAKIHsKIAlpbnQgZXJyOwogCisJc25kX2hkYV9wb3dlcl91cChjb2RlYyk7CiAJc25kX3ByaW50ayhLRVJOX0lORk8gImhkYS1jb2RlYzogcmVjb25maWd1cmluZ1xuIik7Ci0Jc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIlRoZSBjb2RlYyBpcyBiZWluZyB1c2VkLCBjYW4ndCByZWNvbmZpZ3VyZS5cbiIpOworCQlnb3RvIGVycm9yOworCX0KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyb3I7CiAJLyogcmVidWlsZCBQQ01zICovCiAJZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9wY21zKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJvcjsKIAkvKiByZWJ1aWxkIG1peGVycyAqLwogCWVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiBzbmRfY2FyZF9yZWdpc3Rlcihjb2RlYy0+YnVzLT5jYXJkKTsKKwkJZ290byBlcnJvcjsKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3Rlcihjb2RlYy0+YnVzLT5jYXJkKTsKKyBlcnJvcjoKKwlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0yNzEsNiArMjk0LDIyIEBACiBDT0RFQ19BQ1RJT05fU1RPUkUocmVjb25maWcpOwogQ09ERUNfQUNUSU9OX1NUT1JFKGNsZWFyKTsKIAorc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5pbml0X3ZlcmJzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3ZlcmIgKnYgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmluaXRfdmVyYnMsIGkpOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkJIjB4JTAyeCAweCUwM3ggMHglMDR4XG4iLAorCQkJCXYtPm5pZCwgdi0+dmVyYiwgdi0+cGFyYW0pOworCX0KKwlyZXR1cm4gbGVuOworfQorCiBzdGF0aWMgc3NpemVfdCBpbml0X3ZlcmJzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTI5MywyNiArMzMyLDE1NyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaGludHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiJXMgPSAlc1xuIiwgaGludC0+a2V5LCBoaW50LT52YWwpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IGhkYV9oaW50ICpnZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWlmICghc3RyY21wKGhpbnQtPmtleSwga2V5KSkKKwkJCXJldHVybiBoaW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsX3NwYWNlcyhjaGFyICpzdHIpCit7CisJY2hhciAqcDsKKwlpZiAoISpzdHIpCisJCXJldHVybjsKKwlwID0gc3RyICsgc3RybGVuKHN0cikgLSAxOworCWZvciAoOyBpc3NwYWNlKCpwKTsgcC0tKSB7CisJCSpwID0gMDsKKwkJaWYgKHAgPT0gc3RyKQorCQkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBNQVhfSElOVFMJMTAyNAorCiBzdGF0aWMgc3NpemVfdCBoaW50c19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKnA7Ci0JY2hhciAqKmhpbnQ7CisJY2hhciAqa2V5LCAqdmFsOworCXN0cnVjdCBoZGFfaGludCAqaGludDsKIAotCWlmICghKmJ1ZiB8fCBpc3NwYWNlKCpidWYpIHx8ICpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1xuJykKKwl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKKwkJYnVmKys7CisJaWYgKCEqYnVmIHx8ICpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1xuJykKIAkJcmV0dXJuIGNvdW50OwotCXAgPSBrc3RybmR1cF9ub2VvbChidWYsIDEwMjQpOwotCWlmICghcCkKKwlpZiAoKmJ1ZiA9PSAnPScpCisJCXJldHVybiAtRUlOVkFMOworCWtleSA9IGtzdHJuZHVwX25vZW9sKGJ1ZiwgMTAyNCk7CisJaWYgKCFrZXkpCiAJCXJldHVybiAtRU5PTUVNOwotCWhpbnQgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aGludHMpOworCS8qIGV4dHJhY3Qga2V5IGFuZCB2YWwgKi8KKwl2YWwgPSBzdHJjaHIoa2V5LCAnPScpOworCWlmICghdmFsKSB7CisJCWtmcmVlKGtleSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkqdmFsKysgPSAwOworCXdoaWxlIChpc3NwYWNlKCp2YWwpKQorCQl2YWwrKzsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKGtleSk7CisJcmVtb3ZlX3RyYWlsX3NwYWNlcyh2YWwpOworCWhpbnQgPSBnZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAoaGludCkgeworCQkvKiByZXBsYWNlICovCisJCWtmcmVlKGhpbnQtPmtleSk7CisJCWhpbnQtPmtleSA9IGtleTsKKwkJaGludC0+dmFsID0gdmFsOworCQlyZXR1cm4gY291bnQ7CisJfQorCS8qIGFsbG9jYXRlIGEgbmV3IGhpbnQgZW50cnkgKi8KKwlpZiAoY29kZWMtPmhpbnRzLnVzZWQgPj0gTUFYX0hJTlRTKQorCQloaW50ID0gTlVMTDsKKwllbHNlCisJCWhpbnQgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aGludHMpOwogCWlmICghaGludCkgewotCQlrZnJlZShwKTsKKwkJa2ZyZWUoa2V5KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCSpoaW50ID0gcDsKKwloaW50LT5rZXkgPSBrZXk7CisJaGludC0+dmFsID0gdmFsOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+dXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbShsaXN0LCBpKTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHglMDJ4IDB4JTA4eFxuIiwKKwkJCSAgICAgICBwaW4tPm5pZCwgcGluLT5jZmcpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBpbml0X3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+aW5pdF9waW5zLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCB1c2VyX3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBkcml2ZXJfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIGJ1Zik7Cit9CisKKyNkZWZpbmUgTUFYX1BJTl9DT05GSUdTCQkzMgorCitzdGF0aWMgc3NpemVfdCB1c2VyX3Bpbl9jb25maWdzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgbmlkLCBjZmc7CisJaW50IGVycjsKKworCWlmIChzc2NhbmYoYnVmLCAiJWkgJWkiLCAmbmlkLCAmY2ZnKSAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXJyID0gc25kX2hkYV9hZGRfcGluY2ZnKGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgbmlkLCBjZmcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzMxLDggKzUwMSwxMSBAQAogCUNPREVDX0FUVFJfUk8obWZnKSwKIAlDT0RFQ19BVFRSX1JXKG5hbWUpLAogCUNPREVDX0FUVFJfUlcobW9kZWxuYW1lKSwKLQlDT0RFQ19BVFRSX1dPKGluaXRfdmVyYnMpLAotCUNPREVDX0FUVFJfV08oaGludHMpLAorCUNPREVDX0FUVFJfUlcoaW5pdF92ZXJicyksCisJQ09ERUNfQVRUUl9SVyhoaW50cyksCisJQ09ERUNfQVRUUl9STyhpbml0X3Bpbl9jb25maWdzKSwKKwlDT0RFQ19BVFRSX1JXKHVzZXJfcGluX2NvbmZpZ3MpLAorCUNPREVDX0FUVFJfUk8oZHJpdmVyX3Bpbl9jb25maWdzKSwKIAlDT0RFQ19BVFRSX1dPKHJlY29uZmlnKSwKIAlDT0RFQ19BVFRSX1dPKGNsZWFyKSwKIH07CkBAIC0zNTEsNCArNTI0LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBMb29rIGZvciBoaW50IHN0cmluZworICovCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gZ2V0X2hpbnQoY29kZWMsIGtleSk7CisJcmV0dXJuIGhpbnQgPyBoaW50LT52YWwgOiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfaGludCk7CisKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAoIXAgfHwgISpwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlzd2l0Y2ggKHRvdXBwZXIoKnApKSB7CisJY2FzZSAnVCc6IC8qIHRydWUgKi8KKwljYXNlICdZJzogLyogeWVzICovCisJY2FzZSAnMSc6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZ2V0X2Jvb2xfaGludCk7CisKICNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggNWU5MDllMC4uMzA4MjllZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0zODEsNiArMzgxLDcgQEAKIAogCS8qIEhEIGNvZGVjICovCiAJdW5zaWduZWQgc2hvcnQgY29kZWNfbWFzazsKKwlpbnQgIGNvZGVjX3Byb2JlX21hc2s7IC8qIGNvcGllZCBmcm9tIHByb2JlX21hc2sgb3B0aW9uICovCiAJc3RydWN0IGhkYV9idXMgKmJ1czsKIAogCS8qIENPUkIvUklSQiAqLwpAQCAtODU4LDEzICs4NTksMTggQEAKIAkJICAgICAgU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKTsKIH0KIAotLyogc3RvcCBhIHN0cmVhbSAqLwotc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9zdG9wKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQorLyogc3RvcCBETUEgKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fY2xlYXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCiB7Ci0JLyogc3RvcCBETUEgKi8KIAlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgJgogCQkgICAgICB+KFNEX0NUTF9ETUFfU1RBUlQgfCBTRF9JTlRfTUFTSykpOwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfU1RTLCBTRF9JTlRfTUFTSyk7IC8qIHRvIGJlIHN1cmUgKi8KK30KKworLyogc3RvcCBhIHN0cmVhbSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9zdG9wKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQoreworCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CiAJLyogZGlzYWJsZSBTSUUgKi8KIAlhenhfd3JpdGViKGNoaXAsIElOVENUTCwKIAkJICAgYXp4X3JlYWRiKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKQEAgLTEwNzUsOCArMTA4MSw3IEBACiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7CiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAKLQlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKLQlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSBwZXJpb2RfYnl0ZXM7CisJcGVyaW9kX2J5dGVzID0gYXp4X2Rldi0+cGVyaW9kX2J5dGVzOwogCXBlcmlvZHMgPSBhenhfZGV2LT5idWZzaXplIC8gcGVyaW9kX2J5dGVzOwogCiAJLyogcHJvZ3JhbSB0aGUgaW5pdGlhbCBCREwgZW50cmllcyAqLwpAQCAtMTEyMywyNCArMTEyOCwxNyBAQAogIGVycm9yOgogCXNuZF9wcmludGsoS0VSTl9FUlIgIlRvbyBtYW55IEJETCBlbnRyaWVzOiBidWZmZXI9JWQsIHBlcmlvZD0lZFxuIiwKIAkJICAgYXp4X2Rldi0+YnVmc2l6ZSwgcGVyaW9kX2J5dGVzKTsKLQkvKiByZXNldCAqLwotCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwotCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKgotICogc2V0IHVwIHRoZSBTRCBmb3Igc3RyZWFtaW5nCi0gKi8KLXN0YXRpYyBpbnQgYXp4X3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCisvKiByZXNldCBzdHJlYW0gKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fcmVzZXQoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCiB7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAJaW50IHRpbWVvdXQ7CiAKLQkvKiBtYWtlIHN1cmUgdGhlIHJ1biBiaXQgaXMgemVybyBmb3IgU0QgKi8KLQlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgJgotCQkgICAgICB+U0RfQ1RMX0RNQV9TVEFSVCk7Ci0JLyogcmVzZXQgc3RyZWFtICovCisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKKwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSB8CiAJCSAgICAgIFNEX0NUTF9TVFJFQU1fUkVTRVQpOwogCXVkZWxheSgzKTsKQEAgLTExNTcsNyArMTE1NSwxNSBAQAogCXdoaWxlICgoKHZhbCA9IGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpKSAmIFNEX0NUTF9TVFJFQU1fUkVTRVQpICYmCiAJICAgICAgIC0tdGltZW91dCkKIAkJOworfQogCisvKgorICogc2V0IHVwIHRoZSBTRCBmb3Igc3RyZWFtaW5nCisgKi8KK3N0YXRpYyBpbnQgYXp4X3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCit7CisJLyogbWFrZSBzdXJlIHRoZSBydW4gYml0IGlzIHplcm8gZm9yIFNEICovCisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBwcm9ncmFtIHRoZSBzdHJlYW1fdGFnICovCiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9DVEwsCiAJCSAgICAgIChhenhfc2RfcmVhZGwoYXp4X2RldiwgU0RfQ1RMKSAmIH5TRF9DVExfU1RSRUFNX1RBR19NQVNLKXwKQEAgLTEyMjgsNyArMTIzNCw2IEBACiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhenhfY29kZWNfY3JlYXRlKHN0cnVjdCBhenggKmNoaXAsIGNvbnN0IGNoYXIgKm1vZGVsLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjb2RlY19wcm9iZV9tYXNrLAogCQkJCSAgICAgIGludCBub19pbml0KQogewogCXN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIGJ1c190ZW1wOwpAQCAtMTI2MSw3ICsxMjY2LDcgQEAKIAogCS8qIEZpcnN0IHRyeSB0byBwcm9iZSBhbGwgZ2l2ZW4gY29kZWMgc2xvdHMgKi8KIAlmb3IgKGMgPSAwOyBjIDwgbWF4X3Nsb3RzOyBjKyspIHsKLQkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY29kZWNfcHJvYmVfbWFzaykgeworCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjaGlwLT5jb2RlY19wcm9iZV9tYXNrKSB7CiAJCQlpZiAocHJvYmVfY29kZWMoY2hpcCwgYykgPCAwKSB7CiAJCQkJLyogU29tZSBCSU9TZW4gZ2l2ZSB5b3Ugd3JvbmcgY29kZWMgYWRkcmVzc2VzCiAJCQkJICogdGhhdCBkb24ndCBleGlzdApAQCAtMTI4NSw3ICsxMjkwLDcgQEAKIAogCS8qIFRoZW4gY3JlYXRlIGNvZGVjIGluc3RhbmNlcyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewotCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjb2RlY19wcm9iZV9tYXNrKSB7CisJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwogCQkJZXJyID0gc25kX2hkYV9jb2RlY19uZXcoY2hpcC0+YnVzLCBjLCAhbm9faW5pdCwgJmNvZGVjKTsKIAkJCWlmIChlcnIgPCAwKQpAQCAtMTQwMyw2ICsxNDA4LDggQEAKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhenhfZGV2OwogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOworCisJYXp4X3N0cmVhbV9yZXNldChjaGlwLCBhenhfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQyOSw2ICsxNDM2LDExIEBACiBzdGF0aWMgaW50IGF6eF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKKwlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CisKKwlhenhfZGV2LT5idWZzaXplID0gMDsKKwlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSAwOworCWF6eF9kZXYtPmZvcm1hdF92YWwgPSAwOwogCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAogCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQpAQCAtMTQ0Myw2ICsxNDU1LDkgQEAKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0NUTCwgMCk7CisJYXp4X2Rldi0+YnVmc2l6ZSA9IDA7CisJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gMDsKKwlhenhfZGV2LT5mb3JtYXRfdmFsID0gMDsKIAogCWhpbmZvLT5vcHMuY2xlYW51cChoaW5mbywgYXBjbS0+Y29kZWMsIHN1YnN0cmVhbSk7CiAKQEAgLTE0NTYsMjMgKzE0NzEsMzcgQEAKIAlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CiAJc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbyA9IGFwY20tPmhpbmZvW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBidWZzaXplLCBwZXJpb2RfYnl0ZXMsIGZvcm1hdF92YWw7CisJaW50IGVycjsKIAotCWF6eF9kZXYtPmJ1ZnNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKLQlhenhfZGV2LT5mb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKLQkJCQkJCQkgcnVudGltZS0+Y2hhbm5lbHMsCi0JCQkJCQkJIHJ1bnRpbWUtPmZvcm1hdCwKLQkJCQkJCQkgaGluZm8tPm1heGJwcyk7Ci0JaWYgKCFhenhfZGV2LT5mb3JtYXRfdmFsKSB7CisJZm9ybWF0X3ZhbCA9IHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KHJ1bnRpbWUtPnJhdGUsCisJCQkJCQlydW50aW1lLT5jaGFubmVscywKKwkJCQkJCXJ1bnRpbWUtPmZvcm1hdCwKKwkJCQkJCWhpbmZvLT5tYXhicHMpOworCWlmICghZm9ybWF0X3ZhbCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWAogCQkJICAgImludmFsaWQgZm9ybWF0X3ZhbCwgcmF0ZT0lZCwgY2g9JWQsIGZvcm1hdD0lZFxuIiwKIAkJCSAgIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5mb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlidWZzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisKIAlzbmRfcHJpbnRkZCgiYXp4X3BjbV9wcmVwYXJlOiBidWZzaXplPTB4JXgsIGZvcm1hdD0weCV4XG4iLAotCQkgICAgYXp4X2Rldi0+YnVmc2l6ZSwgYXp4X2Rldi0+Zm9ybWF0X3ZhbCk7Ci0JaWYgKGF6eF9zZXR1cF9wZXJpb2RzKGNoaXAsIHN1YnN0cmVhbSwgYXp4X2RldikgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJICAgIGJ1ZnNpemUsIGZvcm1hdF92YWwpOworCisJaWYgKGJ1ZnNpemUgIT0gYXp4X2Rldi0+YnVmc2l6ZSB8fAorCSAgICBwZXJpb2RfYnl0ZXMgIT0gYXp4X2Rldi0+cGVyaW9kX2J5dGVzIHx8CisJICAgIGZvcm1hdF92YWwgIT0gYXp4X2Rldi0+Zm9ybWF0X3ZhbCkgeworCQlhenhfZGV2LT5idWZzaXplID0gYnVmc2l6ZTsKKwkJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gcGVyaW9kX2J5dGVzOworCQlhenhfZGV2LT5mb3JtYXRfdmFsID0gZm9ybWF0X3ZhbDsKKwkJZXJyID0gYXp4X3NldHVwX3BlcmlvZHMoY2hpcCwgc3Vic3RyZWFtLCBhenhfZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWF6eF9zZXR1cF9jb250cm9sbGVyKGNoaXAsIGF6eF9kZXYpOwogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlhenhfZGV2LT5maWZvX3NpemUgPSBhenhfc2RfcmVhZHcoYXp4X2RldiwgU0RfRklGT1NJWkUpICsgMTsKQEAgLTIwNTksMjYgKzIwODgsMzEgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCS8qIENoZWNrIFZJQSBIRCBBdWRpbyBDb250cm9sbGVyIGV4aXN0ICovCi0JaWYgKGNoaXAtPnBjaS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfVklBICYmCi0JICAgIGNoaXAtPnBjaS0+ZGV2aWNlID09IFZJQV9IREFDX0RFVklDRV9JRCkgeworCXN3aXRjaCAoZml4KSB7CisJY2FzZSBQT1NfRklYX0xQSUI6CisJY2FzZSBQT1NfRklYX1BPU0JVRjoKKwkJcmV0dXJuIGZpeDsKKwl9CisKKwkvKiBDaGVjayBWSUEvQVRJIEhEIEF1ZGlvIENvbnRyb2xsZXIgZXhpc3QgKi8KKwlzd2l0Y2ggKGNoaXAtPmRyaXZlcl90eXBlKSB7CisJY2FzZSBBWlhfRFJJVkVSX1ZJQToKKwljYXNlIEFaWF9EUklWRVJfQVRJOgogCQljaGlwLT52aWFfZG1hcG9zX3BhdGNoID0gMTsKIAkJLyogVXNlIGxpbmsgcG9zaXRpb24gZGlyZWN0bHksIGF2b2lkIGFueSB0cmFuc2ZlciBwcm9ibGVtLiAqLwogCQlyZXR1cm4gUE9TX0ZJWF9MUElCOwogCX0KIAljaGlwLT52aWFfZG1hcG9zX3BhdGNoID0gMDsKIAotCWlmIChmaXggPT0gUE9TX0ZJWF9BVVRPKSB7Ci0JCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHBvc2l0aW9uX2ZpeF9saXN0KTsKLQkJaWYgKHEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgImhkYV9pbnRlbDogcG9zaXRpb25fZml4IHNldCB0byAlZCAiCi0JCQkJICAgICJmb3IgZGV2aWNlICUwNHg6JTA0eFxuIiwKLQkJCQkgICAgcS0+dmFsdWUsIHEtPnN1YnZlbmRvciwgcS0+c3ViZGV2aWNlKTsKLQkJCXJldHVybiBxLT52YWx1ZTsKLQkJfQorCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHBvc2l0aW9uX2ZpeF9saXN0KTsKKwlpZiAocSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiaGRhX2ludGVsOiBwb3NpdGlvbl9maXggc2V0IHRvICVkICIKKwkJICAgICAgICJmb3IgZGV2aWNlICUwNHg6JTA0eFxuIiwKKwkJICAgICAgIHEtPnZhbHVlLCBxLT5zdWJ2ZW5kb3IsIHEtPnN1YmRldmljZSk7CisJCXJldHVybiBxLT52YWx1ZTsKIAl9Ci0JcmV0dXJuIGZpeDsKKwlyZXR1cm4gUE9TX0ZJWF9BVVRPOwogfQogCiAvKgpAQCAtMjA5NSwyNSArMjEyOSwzNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDIwYWMsICJEZWxsIFN0dWRpbyBEZXNrdG9wIiwgMHgwMSksCiAJLyogaW5jbHVkaW5nIGJvZ3VzIEFMQzI2OCBpbiBzbG90IzIgdGhhdCBjb25mbGljdHMgd2l0aCBBTEM4ODggKi8KIAlTTkRfUENJX1FVSVJLKDB4MTdjMCwgMHg0MDg1LCAiTWVkaW9uIE1EOTY2MzAiLCAweDAxKSwKLQkvKiBjb25mbGljdCBvZiBBTEMyNjggaW4gc2xvdCMzIChkaWdpdGFsIEkvTyk7IGEgdGVtcG9yYXJ5IGZpeCAqLwotCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDAsICJUb3NoaWJhIGxhcHRvcCIsIDB4MDMpLAorCS8qIGZvcmNlZCBjb2RlYyBzbG90cyAqLworCVNORF9QQ0lfUVVJUksoMHgxMDQ2LCAweDEyNjIsICJBU1VTIFc1RiIsIDB4MTAzKSwKIAl7fQogfTsKIAorI2RlZmluZSBBWlhfRk9SQ0VfQ09ERUNfTUFTSwkweDEwMAorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgY2hlY2tfcHJvYmVfbWFzayhzdHJ1Y3QgYXp4ICpjaGlwLCBpbnQgZGV2KQogewogCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOwogCi0JaWYgKHByb2JlX21hc2tbZGV2XSA9PSAtMSkgeworCWNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPSBwcm9iZV9tYXNrW2Rldl07CisJaWYgKGNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPT0gLTEpIHsKIAkJcSA9IHNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgcHJvYmVfbWFza19saXN0KTsKIAkJaWYgKHEpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaGRhX2ludGVsOiBwcm9iZV9tYXNrIHNldCB0byAweCV4ICIKIAkJCSAgICAgICAiZm9yIGRldmljZSAlMDR4OiUwNHhcbiIsCiAJCQkgICAgICAgcS0+dmFsdWUsIHEtPnN1YnZlbmRvciwgcS0+c3ViZGV2aWNlKTsKLQkJCXByb2JlX21hc2tbZGV2XSA9IHEtPnZhbHVlOworCQkJY2hpcC0+Y29kZWNfcHJvYmVfbWFzayA9IHEtPnZhbHVlOwogCQl9CiAJfQorCisJLyogY2hlY2sgZm9yY2VkIG9wdGlvbiAqLworCWlmIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrICE9IC0xICYmCisJICAgIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrICYgQVpYX0ZPUkNFX0NPREVDX01BU0spKSB7CisJCWNoaXAtPmNvZGVjX21hc2sgPSBjaGlwLT5jb2RlY19wcm9iZV9tYXNrICYgMHhmZjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2ludGVsOiBjb2RlY19tYXNrIGZvcmNlZCB0byAweCV4XG4iLAorCQkgICAgICAgY2hpcC0+Y29kZWNfbWFzayk7CisJfQogfQogCiAKQEAgLTIyMTAsOSArMjI1NSwxNyBAQAogCWdjYXAgPSBhenhfcmVhZHcoY2hpcCwgR0NBUCk7CiAJc25kX3ByaW50ZGQoImNoaXBzZXQgZ2xvYmFsIGNhcGFiaWxpdGllcyA9IDB4JXhcbiIsIGdjYXApOwogCisJLyogQVRJIGNoaXBzIHNlZW1zIGJ1Z2d5IGFib3V0IDY0Yml0IERNQSBhZGRyZXNzZXMgKi8KKwlpZiAoY2hpcC0+ZHJpdmVyX3R5cGUgPT0gQVpYX0RSSVZFUl9BVEkpCisJCWdjYXAgJj0gfjB4MDE7CisKIAkvKiBhbGxvdyA2NGJpdCBETUEgYWRkcmVzcyBpZiBzdXBwb3J0ZWQgYnkgSC9XICovCiAJaWYgKChnY2FwICYgMHgwMSkgJiYgIXBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfNjRCSVRfTUFTSykpCiAJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV82NEJJVF9NQVNLKTsKKwllbHNlIHsKKwkJcGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8zMkJJVF9NQVNLKTsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzMyQklUX01BU0spOworCX0KIAogCS8qIHJlYWQgbnVtYmVyIG9mIHN0cmVhbXMgZnJvbSBHQ0FQIHJlZ2lzdGVyIGluc3RlYWQgb2YgdXNpbmcKIAkgKiBoYXJkY29kZWQgdmFsdWUKQEAgLTIzMzQsMTAgKzIzODcsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkVycm9yIGNyZWF0aW5nIGNhcmQhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gYXp4X2NyZWF0ZShjYXJkLCBwY2ksIGRldiwgcGNpX2lkLT5kcml2ZXJfZGF0YSwgJmNoaXApOwpAQCAtMjM0Niw4ICsyMzk5LDcgQEAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCiAJLyogY3JlYXRlIGNvZGVjIGluc3RhbmNlcyAqLwotCWVyciA9IGF6eF9jb2RlY19jcmVhdGUoY2hpcCwgbW9kZWxbZGV2XSwgcHJvYmVfbWFza1tkZXZdLAotCQkJICAgICAgIHByb2JlX29ubHlbZGV2XSk7CisJZXJyID0gYXp4X2NvZGVjX2NyZWF0ZShjaGlwLCBtb2RlbFtkZXZdLCBwcm9iZV9vbmx5W2Rldl0pOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogCkBAIC0yNDQ0LDEwICsyNDk2LDEwIEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCS8qIFRlcmFkaWNpICovCiAJeyBQQ0lfREVWSUNFKDB4NjU0OSwgMHgxMjAwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9URVJBIH0sCiAJLyogQU1EIEdlbmVyaWMsIFBDSSBjbGFzcyBjb2RlIGFuZCBWZW5kb3IgSUQgZm9yIEhEIEF1ZGlvICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCA0NGYxODljLi44MzM0OTAxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTI2LDggKzI2LDEwIEBACiAvKgogICogZm9yIG1peGVyIGNvbnRyb2xzCiAgKi8KKyNkZWZpbmUgSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLGNocyxpZHgsZGlyLG9mcykJCVwKKwkoKG5pZCkgfCAoKGNocyk8PDE2KSB8ICgoZGlyKTw8MTgpIHwgKChpZHgpPDwxOSkgfCAoKG9mcyk8PDIzKSkKICNkZWZpbmUgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsY2hzLGlkeCxkaXIpIFwKLQkoKG5pZCkgfCAoKGNocyk8PDE2KSB8ICgoZGlyKTw8MTgpIHwgKChpZHgpPDwxOSkpCisJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIGlkeCwgZGlyLCAwKQogLyogbW9ubyB2b2x1bWUgd2l0aCBpbmRleCAoaW5kZXg9MCwxLC4uLikgKGNoYW5uZWw9MSwyKSAqLwogI2RlZmluZSBIREFfQ09ERUNfVk9MVU1FX01PTk9fSURYKHhuYW1lLCB4Y2lkeCwgbmlkLCBjaGFubmVsLCB4aW5kZXgsIGRpcmVjdGlvbikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhjaWR4LCAgXApAQCAtOTYsNyArOTgsNyBAQAogCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc25kX2hkYV9hZGRfdm1hc3RlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY2hhciAqbmFtZSwKIAkJCXVuc2lnbmVkIGludCAqdGx2LCBjb25zdCBjaGFyICoqc2xhdmVzKTsKLXZvaWQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CitpbnQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiBpbnQgc25kX2hkYV9jb2RlY19jb25maWd1cmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCiAvKiBhbXAgdmFsdWUgYml0cyAqLwpAQCAtMTM0LDcgKzEzNiw3IEBACiAKIHN0cnVjdCBoZGFfYmluZF9jdGxzIHsKIAlzdHJ1Y3QgaGRhX2N0bF9vcHMgKm9wczsKLQlsb25nIHZhbHVlc1tdOworCXVuc2lnbmVkIGxvbmcgdmFsdWVzW107CiB9OwogCiBpbnQgc25kX2hkYV9taXhlcl9iaW5kX2N0bHNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIyNyw2ICsyMjksNyBAQAogCWhkYV9uaWRfdCBocF9uaWQ7CS8qIG9wdGlvbmFsIERBQyBmb3IgSFAsIDAgd2hlbiBub3QgZXhpc3RzICovCiAJaGRhX25pZF90IGV4dHJhX291dF9uaWRbM107CS8qIG9wdGlvbmFsIERBQ3MsIDAgd2hlbiBub3QgZXhpc3RzICovCiAJaGRhX25pZF90IGRpZ19vdXRfbmlkOwkvKiBkaWdpdGFsIG91dCBhdWRpbyB3aWRnZXQgKi8KKwloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOwogCWludCBtYXhfY2hhbm5lbHM7CS8qIGN1cnJlbnRseSBzdXBwb3J0ZWQgYW5hbG9nIGNoYW5uZWxzICovCiAJaW50IGRpZ19vdXRfdXNlZDsJLyogY3VycmVudCB1c2FnZSBvZiBkaWdpdGFsIG91dCAoSERBX0RJR19YWFgpICovCiAJaW50IG5vX3NoYXJlX3N0cmVhbTsJLyogZG9uJ3Qgc2hhcmUgYSBzdHJlYW0gd2l0aCBtdWx0aXBsZSBwaW5zICovCkBAIC0zNTQsOSArMzU3LDEyIEBACiAJaW50IGxpbmVfb3V0X3R5cGU7CS8qIEFVVE9fUElOX1hYWF9PVVQgKi8KIAloZGFfbmlkX3QgaHBfcGluc1tBVVRPX0NGR19NQVhfT1VUU107CiAJaGRhX25pZF90IGlucHV0X3BpbnNbQVVUT19QSU5fTEFTVF07Ci0JaGRhX25pZF90IGRpZ19vdXRfcGluOworCWludCBkaWdfb3V0czsKKwloZGFfbmlkX3QgZGlnX291dF9waW5zWzJdOwogCWhkYV9uaWRfdCBkaWdfaW5fcGluOwogCWhkYV9uaWRfdCBtb25vX291dF9waW47CisJaW50IGRpZ19vdXRfdHlwZVsyXTsgLyogSERBX1BDTV9UWVBFX1hYWCAqLworCWludCBkaWdfaW5fdHlwZTsgLyogSERBX1BDTV9UWVBFX1hYWCAqLwogfTsKIAogI2RlZmluZSBnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKSBcCkBAIC00MDUsNiArNDExLDcgQEAKIHUzMiBxdWVyeV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdGlvbik7CiBpbnQgc25kX2hkYV9vdmVycmlkZV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpciwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjYXBzKTsKK3UzMiBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIAogaW50IHNuZF9oZGFfY3RsX2FkZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCk7CiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CkBAIC00MjcsNiArNDM0LDIzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTkRfSERBX1JFQ09ORklHCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpOworaW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gLUVOT0VOVDsKK30KKyNlbmRpZgorCiAvKgogICogcG93ZXItbWFuYWdlbWVudAogICovCkBAIC00NTgsNiArNDgyLDcgQEAKICNkZWZpbmUgZ2V0X2FtcF9jaGFubmVscyhrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4MykKICNkZWZpbmUgZ2V0X2FtcF9kaXJlY3Rpb24oa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAweDEpCiAjZGVmaW5lIGdldF9hbXBfaW5kZXgoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiAweGYpCisjZGVmaW5lIGdldF9hbXBfb2Zmc2V0KGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMjMpICYgMHgzZikKIAogLyoKICAqIENFQSBTaG9ydCBBdWRpbyBEZXNjcmlwdG9yIGRhdGEKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwppbmRleCAxNDRiODUyLi45M2Q3NDk5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCkBAIC0zOTksOCArMzk5LDEwIEBACiB7CiAJaW50IGMsIGN1cnIgPSAtMTsKIAotCWlmIChjb25uX2xlbiA+IDEgJiYgd2lkX3R5cGUgIT0gQUNfV0lEX0FVRF9NSVggJiYKLQkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1ZPTF9LTkIpCisJaWYgKGNvbm5fbGVuID4gMSAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfQVVEX01JWCAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfVk9MX0tOQiAmJgorCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfUE9XRVIpCiAJCWN1cnIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKIAkJCQkJICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiICBDb25uZWN0aW9uOiAlZFxuIiwgY29ubl9sZW4pOwpAQCAtNDY3LDggKzQ2OSw5IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiQ29kZWM6ICVzXG4iLAogCQkgICAgY29kZWMtPm5hbWUgPyBjb2RlYy0+bmFtZSA6ICJOb3QgU2V0Iik7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiQWRkcmVzczogJWRcbiIsIGNvZGVjLT5hZGRyKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJWZW5kb3IgSWQ6IDB4JXhcbiIsIGNvZGVjLT52ZW5kb3JfaWQpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN1YnN5c3RlbSBJZDogMHgleFxuIiwgY29kZWMtPnN1YnN5c3RlbV9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiRnVuY3Rpb24gSWQ6IDB4JXhcbiIsIGNvZGVjLT5mdW5jdGlvbl9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiVmVuZG9yIElkOiAweCUwOHhcbiIsIGNvZGVjLT52ZW5kb3JfaWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN1YnN5c3RlbSBJZDogMHglMDh4XG4iLCBjb2RlYy0+c3Vic3lzdGVtX2lkKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJSZXZpc2lvbiBJZDogMHgleFxuIiwgY29kZWMtPnJldmlzaW9uX2lkKTsKIAogCWlmIChjb2RlYy0+bWZnKQpAQCAtNTU0LDggKzU1NywxNCBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtT3V0IGNhcHM6ICIpOwogCQkJcHJpbnRfYW1wX2NhcHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQW1wLU91dCB2YWxzOiAiKTsKLQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKLQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywgMSk7CisJCQlpZiAod2lkX3R5cGUgPT0gQUNfV0lEX1BJTiAmJgorCQkJICAgIGNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQpCisJCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAorCQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywKKwkJCQkJICAgICAgIGNvbm5fbGVuKTsKKwkJCWVsc2UKKwkJCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCisJCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLCAxKTsKIAkJfQogCiAJCXN3aXRjaCAod2lkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IGU0ODYxMjMuLjViYjQ4ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMjcsMTEgKzI3LDEyIEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKIHN0cnVjdCBhZDE5OHhfc3BlYyB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKLQorCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTCB0ZXJtaW5hdGlvbiEKIAkJCQkJCSAqLwpAQCAtMTU0LDYgKzE1NSwxNiBAQAogCiBzdGF0aWMgdm9pZCBhZDE5OHhfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKKy8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZF9iZWVwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAwLCAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSBcCisJKChzcGVjKS0+YmVlcF9hbXAgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgaWR4LCBkaXIpKSAvKiBtb25vICovCisKIHN0YXRpYyBpbnQgYWQxOTh4X2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMTgxLDYgKzE5MiwyMSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBjcmVhdGUgYmVlcCBjb250cm9scyBpZiBuZWVkZWQgKi8KKwlpZiAoc3BlYy0+YmVlcF9hbXApIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJCWZvciAoa25ldyA9IGFkX2JlZXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOworCQkJaWYgKCFrY3RsKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KIAlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKIAkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOwpAQCAtNDA2LDcgKzQzMiw4IEBACiAJCXJldHVybjsKIAogCWFkMTk4eF9mcmVlX2tjdGxzKGNvZGVjKTsKLQlrZnJlZShjb2RlYy0+c3BlYyk7CisJa2ZyZWUoc3BlYyk7CisJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgYWQxOTh4X3BhdGNoX29wcyA9IHsKQEAgLTU0NSw4ICs1NzIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTYxMCw4ICs2MzUsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAorCS8qIAogCSAgIEhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAkgICBIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgwOSw4ICs4MzMsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCXsKQEAgLTEwMDIsMTAgKzEwMjQsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNDAsICJUb3NoaWJhIiwgQUQxOTg2QV9MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YjAzYywgIlNhbXN1bmcgUjU1IiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMWUsICJGU0MgVjIwNjAiLCBBRDE5ODZBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyMywgIlNhbXN1bmcgWDYwIiwgQUQxOTg2QV9TQU1TVU5HKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI0LCAiU2Ftc3VuZyBSNjUiLCBBRDE5ODZBX1NBTVNVTkcpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjYsICJTYW1zdW5nIFgxMSIsIEFEMTk4NkFfU0FNU1VORyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNywgIlNhbXN1bmcgUTEiLCBBRDE5ODZBX1VMVFJBKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNDRkLCAweGZmMDAsIDB4YzAwMCwgIlNhbXN1bmciLCBBRDE5ODZBX1NBTVNVTkcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGM1MDQsICJTYW1zdW5nIFEzNSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDExLCAiTGVub3ZvIE01NSIsIEFEMTk4NkFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDE3LCAiTGVub3ZvIEE2MCIsIEFEMTk4NkFfM1NUQUNLKSwKQEAgLTEwMjcsMTUgKzEwNDcsMTQgQEAKIAogc3RhdGljIGludCBpc19qYWNrX2F2YWlsYWJsZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCXVuc2lnbmVkIGludCBjb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZikgIT0gQUNfSkFDS19QT1JUX05PTkU7CiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg2YShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTA0Myw2ICsxMDYyLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxOSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxOCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA2OwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODZhX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4NmFfZGFjX25pZHM7CkBAIC0xMjIyLDggKzEyNDgsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEyOTQsNiArMTMxOCw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4MyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGVycjsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMzAxLDYgKzEzMjYsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4M19kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODNfZGFjX25pZHM7CkBAIC0xMzcwLDggKzE0MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE0MTYsOCArMTQ0Niw4IEBACiAJezB4MWUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCiAJezB4MWYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCiAJLyogTWljIGJvb3N0OiAwZEIgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFJlY29yZCBzZWxlY3RvcjogRnJvbnQgbWljICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LApAQCAtMTY4MiwxMCArMTcxMiwxMCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1OTcsICJMZW5vdm8gWjYwIiwgQUQxOTgxX1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNWI3LCAiTGVub3ZvIFo2MG0iLCBBRDE5ODFfVEhJTktQQUQpLAogCS8qIEFsbCBIUCBtb2RlbHMgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMCwgIkhQIG54IiwgQUQxOTgxX0hQKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwM2MsICJIUCBueCIsIEFEMTk4MV9IUCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgVTIwNSIsIEFEMTk4MV9UT1NISUJBKSwKIAkvKiBMZW5vdm8gVGhpbmtwYWQgVDYwL1g2MC9aNnh4ICovCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDAsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODFfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4MV9USElOS1BBRCksCiAJLyogSFAgbng2MzIwIChyZXZlcnNlZCBTU0lELCBIL1cgYnVnKSAqLwogCVNORF9QQ0lfUVVJUksoMHgzMGIwLCAweDEwM2MsICJIUCBueDYzMjAiLCBBRDE5ODFfSFApLAogCXt9CkBAIC0xNjk0LDcgKzE3MjQsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTE3MDIsNiArMTczMiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGQsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTgxX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4MV9kYWNfbmlkczsKQEAgLTE5ODgsOSArMjAyNSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIwMzQsOSArMjA2OCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIwNjYsOSArMjA5Nyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgxLCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjI5NywxMCArMjMyNSw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCXsgfQogfTsKQEAgLTI0MDgsMTAgKzI0MzIsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogQW5hbG9nIE1peCBvdXRwdXQgYW1wICovCiAJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIHwgMHgxZn0sIC8qIDBkQiAqLwogCXsgfQpAQCAtMjQ4MywxMCArMjUwMyw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDFmfSwgLyogMGRCICovCiAJeyB9CkBAIC0yODkwLDcgKzI5MDYsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUQxOTg4X1NQRElGX09VVDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUQxOTg4X1NQRElGX0lOOwpAQCAtMjk0MCw3ICsyOTU2LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0yOTYwLDcgKzI5NzYsNyBAQAogCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBRDE5ODhfQVVUTykgewogCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KLQkJaW50IGVyciA9IGFkMTk4OF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CisJCWVyciA9IGFkMTk4OF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhZDE5OHhfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMjk3MCw2ICsyOTg2LDEzIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQUQxOTg4XzZTVEFDSzoKIAljYXNlIEFEMTk4OF82U1RBQ0tfRElHOgpAQCAtMzEyNiwxMiArMzE0OSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRGlnaXRhbCBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTMyMDQsMTAgKzMyMjEsMTAgQEAKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJLyogUG9ydC1CIChmcm9udCBtaWMpIHBpbiAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUMgKHJlYXIgbWljKSBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogQW5hbG9nIG1peGVyOyBtdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCkBAIC0zMjQwLDcgKzMyNTcsNyBAQAogCSJDRCBQbGF5YmFjayBWb2x1bWUiLAogCSJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwKIAkiRG9ja2luZyBNaWMgUGxheWJhY2sgVm9sdW1lIgotCSJCZWVwIFBsYXliYWNrIFZvbHVtZSIsCisJLyogIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgKi8KIAkiSUVDOTU4IFBsYXliYWNrIFZvbHVtZSIsCiAJTlVMTAogfTsKQEAgLTMyNDgsNiArMzI2NSw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4NChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGVycjsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zMjU1LDYgKzMyNzMsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTg4NF9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODRfZGFjX25pZHM7CkBAIC0zMzIxLDggKzMzNDYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9ja2luZyBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zMzU4LDcgKzMzODEsNyBAQAogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIGRvY2tpbmcgbWljIGJvb3N0ICovCi0JezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJLyogQW5hbG9nIG1peGVyIC0gZG9ja2luZyBtaWM7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCiAJLyogZW5hYmxlIEVBUEQgYml0ICovCkBAIC0zMzc5LDEwICszNDAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lLUluIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQkqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtSW4gQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM0NjgsNyArMzQ4Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODRfY2ZnX3RibFtdID0gewogCS8qIExlbm92byBUaGlua3BhZCBUNjEvWDYxICovCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDAsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODRfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4NF9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIxNCwgIkRlbGwgVDM0MDAiLCBBRDE5ODRfREVMTF9ERVNLVE9QKSwKIAl7fQogfTsKQEAgLTM1NjEsOCArMzU4MCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM2MjIsMTAgKzM2MzksMTAgQEAKIAl7MHgxMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBQb3J0LUIgKGZyb250IG1pYykgcGluICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtQyAocmVhciBsaW5lLWluKSBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUUgKHJlYXIgbWljKSBwaW4gKi8KIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKQEAgLTM2OTUsOCArMzcxMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRvY2sgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNzI0LDggKzM3MzksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzgzNiw4ICszODQ5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zOTExLDkgKzM5MjIsOSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMzAsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDM3LCAiSFAgMjIzMHMiLCBBRDE4ODRBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzA1NiwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZTYsICJIUCA2NzMwYiIsIEFEMTg4NEFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGU3LCAiSFAgRWxpdGVCb29rIDg1MzBwIiwgQUQxODg0QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MTQsICJIUCA2NzMwcyIsIEFEMTg4NEFfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzA3MCwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHgzMGUwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzNjAwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwYWMsICJUaGlua3BhZCBYMzAwIiwgQUQxODg0QV9USElOS1BBRCksCiAJe30KIH07CkBAIC0zOTIxLDcgKzM5MzIsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODRhKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zOTI5LDYgKzM5NDAsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTg4NGFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODg0YV9kYWNfbmlkczsKQEAgLTM5NjYsNiArMzk4NCwxNCBAQAogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBhZDE4ODRhX2hwX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhZDE4ODRhX2hwX2luaXQ7CisJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQorCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKKwkJICovCisJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MjAsIEhEQV9JTlBVVCwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCQkgICgweDA1IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkJICAoMSA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOwogCQlicmVhazsKIAljYXNlIEFEMTg4NEFfVEhJTktQQUQ6CiAJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NGFfdGhpbmtwYWRfbWl4ZXJzOwpAQCAtNDA4Myw4ICs0MTA5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDA5Nyw4ICs0MTIxLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRGlnaXRhbCBNaWMgQm9vc3QiLCAweDFmLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTQyNTcsNyArNDI3OSw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtNDI2NSw2ICs0Mjg3LDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA2OwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMzsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4Ml9kYWNfbmlkczsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCmluZGV4IGYzZWJlODMuLmM5MjEyNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwpAQCAtNjgwLDEzICs2ODAsMTMgQEAKIAkJc3RydWN0IGF1dG9fcGluX2NmZyBjZmc7CiAKIAkJLyogY29sbGVjdCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JCXBvcnRfZSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwZiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQlwb3J0X2YgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJcG9ydF9lID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDBmKTsKKwkJcG9ydF9mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEwKTsKIAkJc3BlYy0+ZnJvbnRfcGFuZWwgPSAxOwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZSkgPT0gQUNfSkFDS19QT1JUX05PTkUgfHwKIAkJICAgIGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2YpID09IEFDX0pBQ0tfUE9SVF9OT05FKSB7Ci0JCQlwb3J0X2cgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJCXBvcnRfaCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJcG9ydF9nID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDFmKTsKKwkJCXBvcnRfaCA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgyMCk7CiAJCQlzcGVjLT5jaGFubmVsX21vZGVzID0gY21pOTg4MF9jaGFubmVsX21vZGVzOwogCQkJLyogbm8gZnJvbnQgcGFuZWwgKi8KIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9nKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSB8fApAQCAtNzAzLDggKzcwMyw4IEBACiAJCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBjbWk5ODgwX2NoYW5uZWxfbW9kZXNbMF0uY2hhbm5lbHM7CiAJCX0gZWxzZSB7CiAJCQlzcGVjLT5pbnB1dF9tdXggPSAmY21pOTg4MF9iYXNpY19tdXg7Ci0JCQlwb3J0X3NwZGlmaSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQkJcG9ydF9zcGRpZm8gPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTIsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJCXBvcnRfc3BkaWZpID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEzKTsKKwkJCXBvcnRfc3BkaWZvID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEyKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9zcGRpZm8pICE9IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQ01JX0RJR19PVVRfTklEOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X3NwZGlmaSkgIT0gQUNfSkFDS19QT1JUX05PTkUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggMDE3N2VmOC4uMWYyYWQ3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNTgsNiArNTgsNyBAQAogCiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKKwloZGFfbmlkX3Qgdm1hc3Rlcl9uaWQ7CiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTApAQCAtNzIsNiArNzMsNyBAQAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CiAJdW5zaWduZWQgaW50IGhwX3ByZXNlbnQ7CisJdW5zaWduZWQgaW50IG5vX2F1dG9fbWljOwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAKIAkvKiBjYXB0dXJlICovCkBAIC00NjEsNiArNDYzLDI5IEBACiAJa2ZyZWUoY29kZWMtPnNwZWMpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0X2NhcHR1cmVfbWl4ZXJzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKKwl9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2xhdmVfdm9sc1tdID0geworCSJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbGF2ZV9zd3NbXSA9IHsKKwkiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCisJIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKKwlOVUxMCit9OworCiBzdGF0aWMgaW50IGNvbmV4YW50X2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00ODgsNiArNTEzLDMyIEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CisKKwkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KKwlpZiAoc3BlYy0+dm1hc3Rlcl9uaWQgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKKwkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOworCQlzbmRfaGRhX3NldF92bWFzdGVyX3Rsdihjb2RlYywgc3BlYy0+dm1hc3Rlcl9uaWQsCisJCQkJCUhEQV9PVVRQVVQsIHZtYXN0ZXJfdGx2KTsKKwkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkJCQkgIHZtYXN0ZXJfdGx2LCBzbGF2ZV92b2xzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoc3BlYy0+dm1hc3Rlcl9uaWQgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIE5VTEwsIHNsYXZlX3N3cyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoc3BlYy0+aW5wdXRfbXV4KSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBjeHRfY2FwdHVyZV9taXhlcnMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxOSwxMyArNzcwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKQEAgLTc1OSwxMyArODAzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc19ocDUzMFtdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC0xMDAyLDE1ICsxMDM5LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ1X2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGIyLCAiSFAgRFYgU2VyaWVzIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjEyMCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjcsICJIUCBEVjYwMDBaIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiYiwgIkhQIERWODAwMCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2QsICJIUCBEViBTZXJpZXMiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY5NTMzRUciLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGQ1LCAiSFAgNTMwIiwgQ1hUNTA0NV9MQVBUT1BfSFA1MzApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZDksICJIUCBTcGFydGFuIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDMwMDAsICJIUCBEViBTZXJpZXMiLAorCQkJICAgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgUDEwNSIsIENYVDUwNDVfTEFQVE9QX01JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwNzUzLCAiQmVucSBSNTVFIiwgQ1hUNTA0NV9CRU5RKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMGFkLCAiRnVqaXRzdSBTaTE1MjAiLCBDWFQ1MDQ1X0xBUFRPUF9NSUNTRU5TRSksCkBAIC0xMDIwLDggKzEwNTEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDFlNDAsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgyZjA1LCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MmYwNiwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMDYsICJQYWNrYXJkIEJlbGwiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTA3LCAiUGFja2FyZCBCZWxsIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTYzMSwgMHhmZjAwLCAweGMxMDAsICJQYWNrYXJkIEJlbGwiLAorCQkJICAgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4MjExMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCXt9CiB9OwpAQCAtMTAzNSw2ICsxMDY2LDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNDVfZGFjX25pZHMpOwpAQCAtMTEzNCw3ICsxMTY2LDcgQEAKIC8qIENvbmV4YW50IDUwNDcgc3BlY2lmaWMgKi8KICNkZWZpbmUgQ1hUNTA0N19TUERJRl9PVVQJMHgxMQogCi1zdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMl0gPSB7IDB4MTAsIDB4MWMgfTsKK3N0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19kYWNfbmlkc1sxXSA9IHsgMHgxMCB9OyAvKiAweDFjICovCiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfYWRjX25pZHNbMV0gPSB7IDB4MTIgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19jYXBzcmNfbmlkc1sxXSA9IHsgMHgxYSB9OwogCkBAIC0xMTQyLDIwICsxMTc0LDYgQEAKIAl7IDIsIE5VTEwgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAxLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgyIH0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfaHBfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDEsCi0JLml0ZW1zID0gewotCQl7ICJFeHRNaWMiLCAweDIgfSwKLQl9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKQEAgLTExNzksNyArMTE5NywxMSBAQAogCSAqIHRoZSBoZWFkcGhvbmUgamFjawogCSAqLwogCWJpdHMgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gMCA6IEhEQV9BTVBfTVVURTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCisJLyogTk9URTogQ29uZXhhdCBjb2RlYyBuZWVkcyB0aGUgaW5kZXggZm9yICpPVVRQVVQqIGFtcCBvZgorCSAqIHBpbiB3aWRnZXRzIHVubGlrZSBvdGhlciBjb2RlY3MuICBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8KKwkgKiBzZXQgaW5kZXggMHgwMSBmb3IgdGhlIHZvbHVtZSBmcm9tIHRoZSBtaXhlciBhbXAgMHgxOS4KKwkgKi8KKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDB4MDEsCiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CiAJYml0cyA9IHNwZWMtPmN1cl9lYXBkID8gMCA6IEhEQV9BTVBfTVVURTsKIAlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTMsIEhEQV9PVVRQVVQsIDAsCkBAIC0xMTg3LDE2ICsxMjA5LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MTMgKEhlYWRwaG9uZXMpIGFuZCAweDFkIChTcGVha2VycykgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBjeHQ1MDQ3X2JpbmRfbWFzdGVyX3ZvbCA9IHsKLQkub3BzID0gJnNuZF9oZGFfYmluZF92b2wsCi0JLnZhbHVlcyA9IHsKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDEzLCAzLCAwLCBIREFfT1VUUFVUKSwKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFkLCAzLCAwLCBIREFfT1VUUFVUKSwKLQkJMAotCX0sCi19OwotCiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA0N19ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEyMDcsMjcgKzEyMTksOCBAQAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CiAKIAliaXRzID0gKHNwZWMtPmhwX3ByZXNlbnQgfHwgIXNwZWMtPmN1cl9lYXBkKSA/IEhEQV9BTVBfTVVURSA6IDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCS8qIE11dGUvVW5tdXRlIFBDTSAyIGZvciBnb29kIG1lYXN1cmUgLSBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFjLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCi0vKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwotc3RhdGljIHZvaWQgY3h0NTA0N19ocDJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQl1bnNpZ25lZCBpbnQgYml0czsKLQotCXNwZWMtPmhwX3ByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTMsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQotCWJpdHMgPSBzcGVjLT5ocF9wcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0JLyogTXV0ZS9Vbm11dGUgUENNIDIgZm9yIGdvb2QgbWVhc3VyZSAtIHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWMsIEhEQV9PVVRQVVQsIDAsCisJLyogU2VlIHRoZSBub3RlIGluIGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCAqLworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMHgwMSwKIAkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKIH0KIApAQCAtMTI2OCw5MCArMTI2MSwzNSBAQAogCX0KIH0KIAotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAtIG5vbi1FQVBEIHN5c3RlbXMgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNDdfaHAyX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlyZXMgPj49IDI2OwotCXN3aXRjaCAocmVzKSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA0N19ocDJfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA0N19ocF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19taXhlcnNbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEdhaW4gVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEdhaW4gU3dpdGNoIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2Jhc2VfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNLTIgVm9sdW1lIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTS0yIFN3aXRjaCIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwMCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKKwkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAorCX0sCisKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfc3BrX21peGVyc1tdID0geworCS8qIFNlZSB0aGUgbm90ZSBpbiBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MDEsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmY3h0NTA0N19iaW5kX21hc3Rlcl92b2wpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKLQl9LAotCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksMHgwMixIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfb25seV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAotCX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTM2Miw4ICsxMzAwLDggQEAKIAl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU58QUNfUElOQ1RMX1ZSRUZfNTAgfSwKIAkvKiBIUCwgU3BlYWtlciAgKi8KIAl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwKLQl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sIC8qIG1peGVyKDB4MTkpICovCisJezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaXhlcigweDE5KSAqLwogCS8qIFJlY29yZCBzZWxlY3RvcjogTWljICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDN9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLApAQCAtMTM4MywzMCArMTMyMSw3IEBACiAKIC8qIGNvbmZpZ3VyYXRpb24gZm9yIFRvc2hpYmEgTGFwdG9wcyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJic1tdID0gewotCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwIH0sIC8qIGRlZmF1bHQgb24gKi8KLQkvKiBwaW4gc2Vuc2luZyBvbiBIUCBhbmQgTWljIGphY2tzICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAotCS8qIFNwZWFrZXIgcm91dGluZyAqLwotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAotCXt9Ci19OwotCi0vKiBjb25maWd1cmF0aW9uIGZvciBIUCBMYXB0b3BzICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfaHBfaW5pdF92ZXJic1tdID0gewotCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGphY2sgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKLQkvKiAweDEzIGlzIGFjdHVhbGx5IHNoYXJlZCBieSBib3RoIEhQIGFuZCBzcGVha2VyOwotCSAqIHNldHRpbmcgdGhlIGNvbm5lY3Rpb24gdG8gMCAoPTB4MTkpIG1ha2VzIHRoZSBtYXN0ZXIgdm9sdW1lIGNvbnRyb2wKLQkgKiB3b3JraW5nIG15c3RlcmlvdXNsbHkuLi4KLQkgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBFeHQgTWljICovCi0JezB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDN9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAotCS8qIFNwZWFrZXIgcm91dGluZyAqLwotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwfSwgLyogZGVmYXVsdCBvZmYgKi8KIAl7fQogfTsKIApAQCAtMTU3MSwxMSArMTQ4Niw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA0N19jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhMCwgIkhQIERWMTAwMCIsIENYVDUwNDdfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAgRFY1MjAwVC9EVjgwMDBUIiwgQ1hUNTA0N19MQVBUT1BfSFApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjIsICJIUCBEVjIwMDBUL0RWMzAwMFQiLCBDWFQ1MDQ3X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjAwMFoiLCBDWFQ1MDQ3X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjcwMCIsIENYVDUwNDdfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzAwMCwgIkhQIERWIFNlcmllcyIsCisJCQkgICBDWFQ1MDQ3X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgUDEwMCIsIENYVDUwNDdfTEFQVE9QX0VBUEQpLAogCXt9CiB9OwpAQCAtMTU4OSw2ICsxNTAyLDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNDdfZGFjX25pZHMpOwpAQCAtMTU5Nyw5ICsxNTExLDggQEAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA0N19hZGNfbmlkczsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGN4dDUwNDdfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfY2FwdHVyZV9zb3VyY2U7CiAJc3BlYy0+bnVtX21peGVycyA9IDE7Ci0Jc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19taXhlcnM7CisJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19iYXNlX21peGVyczsKIAlzcGVjLT5udW1faW5pdF92ZXJicyA9IDE7CiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNDdfaW5pdF92ZXJiczsKIAlzcGVjLT5zcGRpZl9yb3V0ZSA9IDA7CkBAIC0xNjEzLDIxICsxNTI2LDIyIEBACiAJCQkJCQkgIGN4dDUwNDdfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNDdfTEFQVE9QOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQ7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX3Nwa19taXhlcnM7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKIAljYXNlIENYVDUwNDdfTEFQVE9QX0hQOgotCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N19ocF9jYXB0dXJlX3NvdXJjZTsKLQkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOwotCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gY3h0NTA0N19ocF9pbml0X3ZlcmJzOwotCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X2hwX21peGVyczsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfb25seV9taXhlcnM7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDQ3X2hwX2luaXQ7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA0N19MQVBUT1BfRUFQRDoKIAkJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfdG9zaGliYV9jYXB0dXJlX3NvdXJjZTsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfc3BrX21peGVyczsKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOwogCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gY3h0NTA0N190b3NoaWJhX2luaXRfdmVyYnM7Ci0JCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfdG9zaGliYV9taXhlcnM7CiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCkBAIC0xNjM4LDYgKzE1NTIsNyBAQAogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKICNlbmRpZgkKIAl9CisJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDEzOwogCXJldHVybiAwOwogfQogCkBAIC0xNjczLDggKzE1ODgsMTEgQEAKIC8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLwogc3RhdGljIHZvaWQgY3h0NTA1MV9wb3J0Yl9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKKwlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE3LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCiAJCUFDX1BJTlNFTlNFX1BSRVNFTkNFOwpAQCAtMTY5MCw2ICsxNjA4LDggQEAKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAloZGFfbmlkX3QgbmV3X2FkYzsKIAorCWlmIChzcGVjLT5ub19hdXRvX21pYykKKwkJcmV0dXJuOwogCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTgsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYKIAkJQUNfUElOU0VOU0VfUFJFU0VOQ0U7CkBAIC0xNzc2LDYgKzE2OTYsMjIgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKKwkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAorCX0sCisKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMgKi8KIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LApAQCAtMTgwNiw2ICsxNzQyLDY2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJLyogU1BLICAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogSFAsIEFtcCAgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogREFDMSAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwkvKiBFQVBEICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9sZW5vdm9feDIwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEb2NraW5nIEhQICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFJlY29yZCBzZWxlY3RvcjogSW50IG1pYyAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg0NH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NDR9LAorCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJLyogRUFQRCAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRDX0VWRU5UfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKwogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDUxX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xODIzLDE4ICsxODE5LDI0IEBACiBlbnVtIHsKIAlDWFQ1MDUxX0xBUFRPUCwJIC8qIExhcHRvcHMgdy8gRUFQRCBzdXBwb3J0ICovCiAJQ1hUNTA1MV9IUCwJLyogbm8gZG9ja2luZyAqLworCUNYVDUwNTFfSFBfRFY2NzM2LAkvKiBIUCB3aXRob3V0IG1pYyBzd2l0Y2ggKi8KKwlDWFQ1MDUxX0xFTk9WT19YMjAwLAkvKiBMZW5vdm8gWDIwMCBsYXB0b3AgKi8KIAlDWFQ1MDUxX01PREVMUwogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmN4dDUwNTFfbW9kZWxzW0NYVDUwNTFfTU9ERUxTXSA9IHsKIAlbQ1hUNTA1MV9MQVBUT1BdCT0gImxhcHRvcCIsCiAJW0NYVDUwNTFfSFBdCQk9ICJocCIsCisJW0NYVDUwNTFfSFBfRFY2NzM2XQk9ICJocC1kdjY3MzYiLAorCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA1MV9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjczNiIsIENYVDUwNTFfSFBfRFY2NzM2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHgwMTAxLCAiQ29uZXhhbnQgUmVmZXJlbmNlIGJvYXJkIiwKIAkJICAgICAgQ1hUNTA1MV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxNGYxLCAweDUwNTEsICJIUCBTcGFydGFuIDEuMSIsIENYVDUwNTFfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwZjIsICJMZW5vdm8gWDIwMCIsIENYVDUwNTFfTEVOT1ZPX1gyMDApLAogCXt9CiB9OwogCkBAIC0xODQ3LDYgKzE4NDksNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDUxX2luaXQ7CkBAIC0xODY3LDE3ICsxODcwLDIyIEBACiAJc3BlYy0+Y3VyX2FkYyA9IDA7CiAJc3BlYy0+Y3VyX2FkY19pZHggPSAwOwogCisJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CisKIAlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA1MV9NT0RFTFMsCiAJCQkJCQkgIGN4dDUwNTFfbW9kZWxzLAogCQkJCQkJICBjeHQ1MDUxX2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDUxX0hQOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKIAkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9ocF9taXhlcnM7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBDWFQ1MDUxX0xBUFRPUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CisJY2FzZSBDWFQ1MDUxX0hQX0RWNjczNjoKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfaHBfZHY2NzM2X2luaXRfdmVyYnM7CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyczsKKwkJc3BlYy0+bm9fYXV0b19taWMgPSAxOworCQlicmVhazsKKwljYXNlIENYVDUwNTFfTEVOT1ZPX1gyMDA6CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnM7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA2YzI2YWZjLi44MjA5Nzc5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKKyNpbmNsdWRlICJoZGFfYmVlcC5oIgogCiAjZGVmaW5lIEFMQzg4MF9GUk9OVF9FVkVOVAkJMHgwMQogI2RlZmluZSBBTEM4ODBfRENWT0xfRVZFTlQJCTB4MDIKQEAgLTc3LDYgKzc4LDcgQEAKIAlBTEMyNjBfQUNFUiwKIAlBTEMyNjBfV0lMTCwKIAlBTEMyNjBfUkVQTEFDRVJfNjcyViwKKwlBTEMyNjBfRkFWT1JJVDEwMCwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJQUxDMjYwX1RFU1QsCiAjZW5kaWYKQEAgLTEwMyw2ICsxMDUsNyBAQAogCUFMQzI2Ml9ORUMsCiAJQUxDMjYyX1RPU0hJQkFfUzA2LAogCUFMQzI2Ml9UT1NISUJBX1JYMSwKKwlBTEMyNjJfVFlBTiwKIAlBTEMyNjJfQVVUTywKIAlBTEMyNjJfTU9ERUxfTEFTVCAvKiBsYXN0IHRhZyAqLwogfTsKQEAgLTIzOCw2ICsyNDEsMTMgQEAKIAlBTEM4ODNfTU9ERUxfTEFTVCwKIH07CiAKKy8qIHN0eWxlcyBvZiBjYXB0dXJlIHNlbGVjdGlvbiAqLworZW51bSB7CisJQ0FQVF9NVVggPSAwLAkvKiBvbmx5IG11eCBiYXNlZCAqLworCUNBUFRfTUlYLAkvKiBvbmx5IG1peGVyIGJhc2VkICovCisJQ0FQVF8xTVVYX01JWCwJLyogZmlyc3QgbXV4IGFuZCBvdGhlciBtaXhlcnMgKi8KK307CisKIC8qIGZvciBHUElPIFBvbGwgKi8KICNkZWZpbmUgR1BJT19NQVNLCTB4MDMKIApAQCAtMjQ2LDYgKzI1Niw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsJLyogbWl4ZXIgYXJyYXlzICovCiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLworCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCkBAIC0yNjksMTMgKzI4MCwxNSBAQAogCQkJCQkgKiBkaWdfb3V0X25pZCBhbmQgaHBfbmlkIGFyZSBvcHRpb25hbAogCQkJCQkgKi8KIAloZGFfbmlkX3QgYWx0X2RhY19uaWQ7CisJaGRhX25pZF90IHNsYXZlX2RpZ19vdXRzWzNdOwkvKiBvcHRpb25hbCAtIGZvciBhdXRvLXBhcnNpbmcgKi8KKwlpbnQgZGlnX291dF90eXBlOwogCiAJLyogY2FwdHVyZSAqLwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7CiAJaGRhX25pZF90ICphZGNfbmlkczsKIAloZGFfbmlkX3QgKmNhcHNyY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwkJLyogZGlnaXRhbC1pbiBOSUQ7IG9wdGlvbmFsICovCi0JdW5zaWduZWQgY2hhciBpc19taXhfY2FwdHVyZTsJLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKG5vbi1tdXgpICovCisJaW50IGNhcHR1cmVfc3R5bGU7CQkvKiBjYXB0dXJlIHN0eWxlIChDQVBUXyopICovCiAKIAkvKiBjYXB0dXJlIHNvdXJjZSAqLwogCXVuc2lnbmVkIGludCBudW1fbXV4X2RlZnM7CkBAIC0yOTMsNyArMzA2LDcgQEAKIAkvKiBkeW5hbWljIGNvbnRyb2xzLCBpbml0X3ZlcmJzIGFuZCBpbnB1dF9tdXggKi8KIAlzdHJ1Y3QgYXV0b19waW5fY2ZnIGF1dG9jZmc7CiAJc3RydWN0IHNuZF9hcnJheSBrY3RsczsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4WzNdOwogCWhkYV9uaWRfdCBwcml2YXRlX2RhY19uaWRzW0FVVE9fQ0ZHX01BWF9PVVRTXTsKIAogCS8qIGhvb2tzICovCkBAIC0zMDUsNiArMzE4LDkgQEAKIAl1bnNpZ25lZCBpbnQgamFja19wcmVzZW50OiAxOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfc3c6IDE7CiAKKwkvKiBvdGhlciBmbGFncyAqLworCXVuc2lnbmVkIGludCBub19hbmFsb2cgOjE7IC8qIGRpZ2l0YWwgSS9PIG9ubHkgKi8KKwogCS8qIGZvciB2aXJ0dWFsIG1hc3RlciAqLwogCWhkYV9uaWRfdCB2bWFzdGVyX25pZDsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCkBAIC0zMTQsMTMgKzMzMCw2IEBACiAJLyogZm9yIFBMTCBmaXggKi8KIAloZGFfbmlkX3QgcGxsX25pZDsKIAl1bnNpZ25lZCBpbnQgcGxsX2NvZWZfaWR4LCBwbGxfY29lZl9iaXQ7Ci0KLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotI2RlZmluZSBBTENfTUFYX1BJTlMJMTYKLQl1bnNpZ25lZCBpbnQgbnVtX3BpbnM7Ci0JaGRhX25pZF90IHBpbl9uaWRzW0FMQ19NQVhfUElOU107Ci0JdW5zaWduZWQgaW50IHBpbl9jZmdzW0FMQ19NQVhfUElOU107Ci0jZW5kaWYKIH07CiAKIC8qCkBAIC0zMzYsNiArMzQ1LDcgQEAKIAloZGFfbmlkX3QgKmRhY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfb3V0X25pZDsJCS8qIG9wdGlvbmFsICovCiAJaGRhX25pZF90IGhwX25pZDsJCS8qIG9wdGlvbmFsICovCisJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJaGRhX25pZF90ICpjYXBzcmNfbmlkczsKQEAgLTM5Miw3ICs0MDIsOCBAQAogCW11eF9pZHggPSBhZGNfaWR4ID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBhZGNfaWR4OwogCWltdXggPSAmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdOwogCi0JaWYgKHNwZWMtPmlzX21peF9jYXB0dXJlKSB7CisJaWYgKHNwZWMtPmNhcHR1cmVfc3R5bGUgJiYKKwkgICAgIShzcGVjLT5jYXB0dXJlX3N0eWxlID09IENBUFRfMU1VWF9NSVggJiYgIWFkY19pZHgpKSB7CiAJCS8qIE1hdHJpeC1taXhlciBzdHlsZSAoZS5nLiBBTEM4ODIpICovCiAJCXVuc2lnbmVkIGludCAqY3VyX3ZhbCA9ICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdOwogCQl1bnNpZ25lZCBpbnQgaSwgaWR4OwpAQCAtNzUwLDYgKzc2MSwyNCBAQAogI2VuZGlmICAgLyogQ09ORklHX1NORF9ERUJVRyAqLwogCiAvKgorICogc2V0IHVwIHRoZSBpbnB1dCBwaW4gY29uZmlnIChkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGF1dG8tcGluIHR5cGUpCisgKi8KK3N0YXRpYyB2b2lkIGFsY19zZXRfaW5wdXRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICAgaW50IGF1dG9fcGluX3R5cGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IFBJTl9JTjsKKworCWlmIChhdXRvX3Bpbl90eXBlIDw9IEFVVE9fUElOX0ZST05UX01JQykgeworCQl1bnNpZ25lZCBpbnQgcGluY2FwOworCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCQlwaW5jYXAgPSAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUYpID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUOworCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfODApCisJCQl2YWwgPSBQSU5fVlJFRjgwOworCX0KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgdmFsKTsKK30KKworLyoKICAqLwogc3RhdGljIHZvaWQgYWRkX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peCkKIHsKQEAgLTgxMCw2ICs4MzksNyBAQAogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gcHJlc2V0LT5udW1fZGFjczsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHByZXNldC0+ZGFjX25pZHM7CiAJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBwcmVzZXQtPmRpZ19vdXRfbmlkOworCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gcHJlc2V0LT5zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBwcmVzZXQtPmhwX25pZDsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IHByZXNldC0+bnVtX211eF9kZWZzOwpAQCAtOTIxLDcgKzk1MSw3IEBACiAJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7CiB9CiAjZWxzZQotI2RlZmluZSBhbGNfbWljX2F1dG9tdXRlKGNvZGVjKSAvKiBOT1AgKi8KKyNkZWZpbmUgYWxjX21pY19hdXRvbXV0ZShjb2RlYykgZG8ge30gd2hpbGUoMCkgLyogTk9QICovCiAjZW5kaWYgLyogZGlzYWJsZWQgKi8KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwpAQCAtOTUyLDcgKzk4Miw3IEBACiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMCk7CiAJdG1wID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX0dFVF9QUk9DX0NPRUYsIDApOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDcpOwotCWlmICgodG1wICYgMHhmMCkgPT0gMikKKwlpZiAoKHRtcCAmIDB4ZjApID09IDB4MjApCiAJCS8qIGFsYzg4OFMtVkMgKi8KIAkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLAogCQkJCSAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHg4MzApOwpAQCAtOTkxLDggKzEwMjEsNyBAQAogCW5pZCA9IDB4MWQ7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI2MCkKIAkJbmlkID0gMHgxNzsKLQlhc3MgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWFzcyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpZiAoIShhc3MgJiAxKSAmJiAhKGFzcyAmIDB4MTAwMDAwKSkKIAkJcmV0dXJuOwogCWlmICgoYXNzID4+IDMwKSAhPSAxKQkvKiBubyBwaHlzaWNhbCBjb25uZWN0aW9uICovCkBAIC0xMTY2LDE2ICsxMTk1LDggQEAKIAkJcmV0dXJuOwogCiAJY2ZnID0gcGluZml4W3F1aXJrLT52YWx1ZV07Ci0JZm9yICg7IGNmZy0+bmlkOyBjZmcrKykgewotCQlpbnQgaTsKLQkJdTMyIHZhbCA9IGNmZy0+dmFsOwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPm5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCArIGksCi0JCQkJICAgIHZhbCAmIDB4ZmYpOwotCQkJdmFsID4+PSA4OwotCQl9Ci0JfQorCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKIH0KIAogLyoKQEAgLTEzNzUsOCArMTM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0ODMsOCArMTUwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MCwgSERBX09VVFBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTE1NzgsOCArMTU5NSw3IEBACiAJCQkJICAgICBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KTsKIH0KIAotI2RlZmluZSBERUZJTkVfQ0FQTUlYKG51bSkgXAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyICMjIG51bVtdID0geyBcCisjZGVmaW5lIF9ERUZJTkVfQ0FQTUlYKG51bSkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogCQkubmFtZSA9ICJDYXB0dXJlIFN3aXRjaCIsIFwKQEAgLTE2MDAsNyArMTYxNiw5IEBACiAJCS5nZXQgPSBhbGNfY2FwX3ZvbF9nZXQsIFwKIAkJLnB1dCA9IGFsY19jYXBfdm9sX3B1dCwgXAogCQkudGx2ID0geyAuYyA9IGFsY19jYXBfdm9sX3RsdiB9LCBcCi0JfSwgXAorCX0KKworI2RlZmluZSBfREVGSU5FX0NBUFNSQyhudW0pIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLyBcCkBAIC0xNjA5LDE1ICsxNjI3LDI4IEBACiAJCS5pbmZvID0gYWxjX211eF9lbnVtX2luZm8sIFwKIAkJLmdldCA9IGFsY19tdXhfZW51bV9nZXQsIFwKIAkJLnB1dCA9IGFsY19tdXhfZW51bV9wdXQsIFwKLQl9LCBcCi0JeyB9IC8qIGVuZCAqLyBcCisJfQorCisjZGVmaW5lIERFRklORV9DQVBNSVgobnVtKSBcCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXIgIyMgbnVtW10gPSB7IFwKKwlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkgICAgICBcCisJX0RFRklORV9DQVBTUkMobnVtKSwJCQkJICAgICAgXAorCXsgfSAvKiBlbmQgKi8JCQkJCSAgICAgIFwKK30KKworI2RlZmluZSBERUZJTkVfQ0FQTUlYX05PU1JDKG51bSkgXAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyX25vc3JjICMjIG51bVtdID0geyBcCisJX0RFRklORV9DQVBNSVgobnVtKSwJCQkJCSAgICBcCisJeyB9IC8qIGVuZCAqLwkJCQkJCSAgICBcCiB9CiAKIC8qIHVwIHRvIHRocmVlIEFEQ3MgKi8KIERFRklORV9DQVBNSVgoMSk7CiBERUZJTkVfQ0FQTUlYKDIpOwogREVGSU5FX0NBUE1JWCgzKTsKLQorREVGSU5FX0NBUE1JWF9OT1NSQygxKTsKK0RFRklORV9DQVBNSVhfTk9TUkMoMik7CitERUZJTkVfQ0FQTUlYX05PU1JDKDMpOwogCiAvKgogICogQUxDODgwIDUtc3RhY2sgbW9kZWwKQEAgLTE3MDYsOCArMTczNyw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMTg4NCwxMyArMTkxMyw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotLyogYWRkaXRpb25hbCBtaXhlcnMgdG8gYWxjODgwX2FzdXNfbWl4ZXIgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfcGNiZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogLyogVENMIFM3MDAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfdGNsX3M3MDBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTkyMyw4ICsxOTQ1LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC0xOTk5LDYgKzIwMTksMTMgQEAKIAogc3RhdGljIHZvaWQgYWxjX2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCisvKiBhZGRpdGlvbmFsIGJlZXAgbWl4ZXJzOyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXJlIG92ZXJ3cml0dGVuIGF0IGJ1aWxkICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2JlZXBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgaW50IGFsY19idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTIwMjAsMTEgKzIwNDcsMTMgQEAKIAkJCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfc2hhcmVfc3coY29kZWMsCi0JCQkJCQkgICAgJnNwZWMtPm11bHRpb3V0KTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlzcGVjLT5tdWx0aW91dC5zaGFyZV9zcGRpZiA9IDE7CisJCWlmICghc3BlYy0+bm9fYW5hbG9nKSB7CisJCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9zaGFyZV9zdyhjb2RlYywKKwkJCQkJCQkgICAgJnNwZWMtPm11bHRpb3V0KTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlzcGVjLT5tdWx0aW91dC5zaGFyZV9zcGRpZiA9IDE7CisJCX0KIAl9CiAJaWYgKHNwZWMtPmRpZ19pbl9uaWQpIHsKIAkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfaW5fY3Rscyhjb2RlYywgc3BlYy0+ZGlnX2luX25pZCk7CkBAIC0yMDMyLDggKzIwNjEsMjQgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogY3JlYXRlIGJlZXAgY29udHJvbHMgaWYgbmVlZGVkICovCisJaWYgKHNwZWMtPmJlZXBfYW1wKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCQlmb3IgKGtuZXcgPSBhbGNfYmVlcF9taXhlcjsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CisJCQlpZiAoIWtjdGwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gc3BlYy0+YmVlcF9hbXA7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLwotCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPnZtYXN0ZXJfbmlkLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CkBAIC0yMDQyLDcgKzIwODcsOCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQotCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJCQkJICBOVUxMLCBhbGNfc2xhdmVfc3dzKTsKIAkJaWYgKGVyciA8IDApCkBAIC0yOTUxLDYgKzI5OTcsMTQgQEAKIAkJCQkJICAgICBzdHJlYW1fdGFnLCBmb3JtYXQsIHN1YnN0cmVhbSk7CiB9CiAKK3N0YXRpYyBpbnQgYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCQkgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbGVhbnVwKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOworfQorCiBzdGF0aWMgaW50IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMzAzNCw3ICszMDg4LDggQEAKIAkub3BzID0gewogCQkub3BlbiA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX29wZW4sCiAJCS5jbG9zZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAotCQkucHJlcGFyZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUKKwkJLnByZXBhcmUgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlLAorCQkuY2xlYW51cCA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2NsZWFudXAKIAl9LAogfTsKIApAQCAtMzA2MSw2ICszMTE2LDkgQEAKIAljb2RlYy0+bnVtX3BjbXMgPSAxOwogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKKwlpZiAoc3BlYy0+bm9fYW5hbG9nKQorCQlnb3RvIHNraXBfYW5hbG9nOworCiAJaW5mby0+bmFtZSA9IHNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZzsKIAlpZiAoc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjaykgewogCQlpZiAoc25kX0JVR19PTighc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMpKQpAQCAtMzA4NCwxMiArMzE0MiwxNyBAQAogCQl9CiAJfQogCisgc2tpcF9hbmFsb2c6CiAJLyogU1BESUYgZm9yIHN0cmVhbSBpbmRleCAjMSAqLwogCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCB8fCBzcGVjLT5kaWdfaW5fbmlkKSB7CiAJCWNvZGVjLT5udW1fcGNtcyA9IDI7CisJICAgICAgICBjb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0czsKIAkJaW5mbyA9IHNwZWMtPnBjbV9yZWMgKyAxOwogCQlpbmZvLT5uYW1lID0gc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbDsKLQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CisJCWlmIChzcGVjLT5kaWdfb3V0X3R5cGUpCisJCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmRpZ19vdXRfdHlwZTsKKwkJZWxzZQorCQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CiAJCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCAmJgogCQkgICAgc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2spIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICooc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2spOwpAQCAtMzEwNCw2ICszMTY3LDkgQEAKIAkJY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCA9IDE7CiAJfQogCisJaWYgKHNwZWMtPm5vX2FuYWxvZykKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB0aGUgdXNlIG9mIG1vcmUgdGhhbiBvbmUgQURDIGlzIHJlcXVlc3RlZCBmb3IgdGhlIGN1cnJlbnQKIAkgKiBtb2RlbCwgY29uZmlndXJlIGEgc2Vjb25kIGFuYWxvZyBjYXB0dXJlLW9ubHkgUENNLgogCSAqLwpAQCAtMzE2Miw2NSArMzIyOCwxNyBAQAogCiAJYWxjX2ZyZWVfa2N0bHMoY29kZWMpOwogCWtmcmVlKHNwZWMpOwotCWNvZGVjLT5zcGVjID0gTlVMTDsgLyogdG8gYmUgc3VyZSAqLworCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCi1zdGF0aWMgdm9pZCBzdG9yZV9waW5fY29uZmlncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkLCBlbmRfbmlkOwotCi0JZW5kX25pZCA9IGNvZGVjLT5zdGFydF9uaWQgKyBjb2RlYy0+bnVtX25vZGVzOwotCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwotCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPQotCQkJKHdpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7Ci0JCWlmICh3aWRfdHlwZSAhPSBBQ19XSURfUElOKQotCQkJY29udGludWU7Ci0JCWlmIChzcGVjLT5udW1fcGlucyA+PSBBUlJBWV9TSVpFKHNwZWMtPnBpbl9uaWRzKSkKLQkJCWJyZWFrOwotCQlzcGVjLT5waW5fbmlkc1tzcGVjLT5udW1fcGluc10gPSBuaWQ7Ci0JCXNwZWMtPnBpbl9jZmdzW3NwZWMtPm51bV9waW5zXSA9Ci0JCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQlzcGVjLT5udW1fcGlucysrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzdW1lX3Bpbl9jb25maWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IHBpbl9uaWQgPSBzcGVjLT5waW5fbmlkc1tpXTsKLQkJdW5zaWduZWQgaW50IHBpbl9jb25maWcgPSBzcGVjLT5waW5fY2Znc1tpXTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCwKLQkJCQkgICAgcGluX2NvbmZpZyAmIDB4MDAwMDAwZmYpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLAotCQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDAwMGZmMDApID4+IDgpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18yLAotCQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDBmZjAwMDApID4+IDE2KTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywKLQkJCQkgICAgcGluX2NvbmZpZyA+PiAyNCk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JcmVzdW1lX3Bpbl9jb25maWdzKGNvZGVjKTsKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpCiAjZW5kaWYKIAogLyoKQEAgLTM1NTksNyArMzU3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODE4MSwgIkFTVVMgUDRHUEwiLCBBTEM4ODBfQVNVU19ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxOTYsICJBU1VTIFA1R0QxIiwgQUxDODgwXzZTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFiNCwgIkFTVVMiLCBBTEM4ODBfNlNUKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMCwgIkFTVVMiLCBBTEM4ODBfQVNVUyksIC8qIGRlZmF1bHQgQVNVUyAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA0MywgIkFTVVMiLCBBTEM4ODBfQVNVUyksIC8qIGRlZmF1bHQgQVNVUyAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxYTAsICJTb255IiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFkNiwgIlNvbnkiLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgzMDMyLCAiR2F0ZXdheSIsIEFMQzg4MF81U1QpLApAQCAtMzYwMiw3ICszNjIwLDggQEAKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAwLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAxLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhlNDAyLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF81U1RfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMCwgIkludGVsIG1vYm8iLCBBTEM4ODBfM1NUKSwgLyogZGVmYXVsdCBJbnRlbCAqLworCS8qIGRlZmF1bHQgSW50ZWwgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDgwODYsICJJbnRlbCBtb2JvIiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweGEwYTAsIDB4MDU2MCwgIkFPcGVuIGk5MTVHTW0tSEZTIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHhlODAzLCAweDEwMTksIE5VTEwsIEFMQzg4MF82U1RfRElHKSwKIAl7fQpAQCAtMzc4Miw3ICszODAxLDcgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfY2FwdHVyZV9zb3VyY2UsCiAJfSwKIAlbQUxDODgwX1VOSVdJTExfRElHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIsIGFsYzg4MF9wY2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF9hc3VzX2RhY19uaWRzKSwKQEAgLTM4MjAsOCArMzgzOSw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGM4ODBfdW5pd2lsbF9wNTNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgwX0ZVSklUU1VdID0gewotCQkubWl4ZXJzID0geyBhbGM4ODBfZnVqaXRzdV9taXhlciwKLQkJCSAgICBhbGM4ODBfcGNiZWVwX21peGVyLCB9LAorCQkubWl4ZXJzID0geyBhbGM4ODBfZnVqaXRzdV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF91bml3aWxsX3A1M19pbml0X3ZlcmJzLAogCSAgICAgICAJCQlhbGM4ODBfYmVlcF9pbml0X3ZlcmJzIH0sCkBAIC00MTE0LDcgKzQxMzIsNyBAQAogc3RhdGljIGludCBhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtNDIwMiwxMSArNDIyMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgwX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDODgwX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgwX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtNDIyMSw3ICs0MjM3LDcgQEAKIHN0YXRpYyBpbnQgYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzg4MF9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCkBAIC00MjUyLDggKzQyNjgsMjMgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOworCS8qIGNoZWNrIG11bHRpcGxlIFNQRElGLW91dCAoZm9yIHJlY2VudCBjb2RlY3MpICovCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcuZGlnX291dHM7IGkrKykgeworCQloZGFfbmlkX3QgZGlnX25pZDsKKwkJZXJyID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCisJCQkJCSAgICAgIHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW5zW2ldLAorCQkJCQkgICAgICAmZGlnX25pZCwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJY29udGludWU7CisJCWlmICghaSkKKwkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKKwkJZWxzZSB7CisJCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKKwkJCWlmIChpID09IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKKwkJCQlicmVhazsKKwkJfQorCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDODgwX0RJR0lOX05JRDsKIApAQCAtNDI2Myw5ICs0Mjk0LDggQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQyODAsMjEgKzQzMTAsMzMgQEAKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2NhcHR1cmVfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjKQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1syXVszXSA9IHsKKwkJeyBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzEsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMyLAorCQkgIGFsY19jYXB0dXJlX21peGVyX25vc3JjMyB9LAorCQl7IGFsY19jYXB0dXJlX21peGVyMSwKKwkJICBhbGNfY2FwdHVyZV9taXhlcjIsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXIzIH0sCisJfTsKKwlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMCAmJiBzcGVjLT5udW1fYWRjX25pZHMgPD0gMykgeworCQlpbnQgbXV4OworCQlpZiAoc3BlYy0+aW5wdXRfbXV4ICYmIHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID4gMSkKKwkJCW11eCA9IDE7CisJCWVsc2UKKwkJCW11eCA9IDA7CisJCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbbXV4XVtzcGVjLT5udW1fYWRjX25pZHMgLSAxXTsKKwl9Cit9CisKKyNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIFwKKwkoKHNwZWMpLT5iZWVwX2FtcCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCBpZHgsIGRpcikpCisKIC8qCiAgKiBPSywgaGVyZSB3ZSBoYXZlIGZpbmFsbHkgdGhlIHBhdGNoIGZvciBBTEM4ODAKICAqLwogCi1zdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMpCi17Ci0Jc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBzWzNdID0gewotCQlhbGNfY2FwdHVyZV9taXhlcjEsCi0JCWFsY19jYXB0dXJlX21peGVyMiwKLQkJYWxjX2NhcHR1cmVfbWl4ZXIzLAotCX07Ci0JaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDAgJiYgc3BlYy0+bnVtX2FkY19uaWRzIDw9IDMpCi0JCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbc3BlYy0+bnVtX2FkY19uaWRzIC0gMV07Ci19Ci0KIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODgwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKQEAgLTQzMzAsNiArNDM3MiwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgwX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTQzNTYsNiArNDQwNCw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTQ0NjMsNiArNDUxMiwyNiBAQAogCQl9LAogCX0sCiB9OworCisvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFMgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXNbMl0gPSB7CisJeworCQkubnVtX2l0ZW1zID0gMiwKKwkJLml0ZW1zID0geworCQkJeyAiTGluZS9NaWMiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCX0sCisJfSwKKwl7CisJCS5udW1faXRlbXMgPSAzLAorCQkuaXRlbXMgPSB7CisJCQl7ICJMaW5lL01pYyIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIk1peGVyIiwgMHg1IH0sCisJCX0sCisJfSwKK307CisKIC8qCiAgKiBUaGlzIGlzIGp1c3QgcGxhY2UtaG9sZGVyLCBzbyB0aGVyZSdzIHNvbWV0aGluZyBmb3IgYWxjX2J1aWxkX3BjbXMgdG8gbG9vawogICogYXQgd2hlbiBpdCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscy4gQUxDMjYwIGhhcyBubyBtaXhlcgpAQCAtNDUwNSwxMiArNDU3NCw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9wY19iZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogLyogdXBkYXRlIEhQLCBsaW5lIGFuZCBtb25vIG91dCBwaW5zIGFjY29yZGluZyB0byB0aGUgbWFzdGVyIHN3aXRjaCAqLwogc3RhdGljIHZvaWQgYWxjMjYwX2hwX21hc3Rlcl91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgIGhkYV9uaWRfdCBocCwgaGRhX25pZF90IGxpbmUsCkBAIC00NzAyLDggKzQ3NjUsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYy9MaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljL0xpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiTWljL0xpbmUgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDksIDIsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtNDc0OCw4ICs0ODA5LDE4IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFM6IG9uZSBvdXRwdXQgYW5kIG9uZSBpbnB1dCAoMHgxMikgamFjaworICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2Zhdm9yaXQxMDBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMiwgSERBX0lOUFVUKSwKKwlBTENfUElOX01PREUoIk91dHB1dCBKYWNrIE1vZGUiLCAweDBmLCBBTENfUElOX0RJUl9JTk9VVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZS9NaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lL01pYyBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJMaW5lL01pYyBKYWNrIE1vZGUiLCAweDEyLCBBTENfUElOX0RJUl9JTiksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDc2Nyw4ICs0ODM4LDYgQEAKIAlBTENfUElOX01PREUoIkxpbmUgSmFjayBNb2RlIiwgMHgxNCwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNTEyNiw2ICs1MTk1LDg5IEBACiAJeyB9CiB9OwogCisvKiBJbml0aWFsaXNhdGlvbiBzZXF1ZW5jZSBmb3IgTWF4ZGF0YSBGYXZvcml0IDEwMFhTCisgKiAoYWRhcHRlZCBmcm9tIEFjZXIgaW5pdCB2ZXJicykuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2Zhdm9yaXQxMDBfaW5pdF92ZXJic1tdID0geworCS8qIEdQSU8gMCBlbmFibGVzIHRoZSBvdXRwdXQgamFjay4KKwkgKiBUdXJuIHRoaXMgb24gYW5kIHJlbHkgb24gdGhlIHN0YW5kYXJkIG11dGUKKwkgKiBtZXRob2RzIHdoZW5ldmVyIHRoZSB1c2VyIHdhbnRzIHRvIHR1cm4gdGhlc2Ugb3V0cHV0cyBvZmYuCisJICovCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAxfSwKKwkvKiBMaW5lL01pYyBpbnB1dCBqYWNrIGlzIGNvbm5lY3RlZCB0byBNaWMxIHBpbiAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTB9LAorCS8qIEVuc3VyZSBhbGwgb3RoZXIgdW51c2VkIHBpbnMgYXJlIGRpc2FibGVkIGFuZCBtdXRlZC4gKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogRGlzYWJsZSBkaWdpdGFsIChTUERJRikgcGlucyAqLworCXsweDAzLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisJezB4MDYsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKworCS8qIEVuc3VyZSBNaWMxIGFuZCBMaW5lMSBwaW4gd2lkZ2V0cyB0YWtlIGlucHV0IGZyb20gdGhlIE9VVDEgc3VtCisJICogYnVzIHdoZW4gYWN0aW5nIGFzIG91dHB1dHMuCisJICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCisJLyogU3RhcnQgd2l0aCBvdXRwdXQgc3VtIHdpZGdldHMgbXV0ZWQgYW5kIHRoZWlyIG91dHB1dCBnYWlucyBhdCBtaW4gKi8KKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIFVubXV0ZSBMaW5lLW91dCBwaW4gd2lkZ2V0IGFtcCBsZWZ0IGFuZCByaWdodAorCSAqIChubyBlcXVpdiBtaXhlciBjdHJsKQorCSAqLworCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogVW5tdXRlIE1pYzEgYW5kIExpbmUxIHBpbiB3aWRnZXQgaW5wdXQgYnVmZmVycyBzaW5jZSB0aGV5IHN0YXJ0IGFzCisJICogaW5wdXRzLiBJZiB0aGUgcGluIG1vZGUgaXMgY2hhbmdlZCBieSB0aGUgdXNlciB0aGUgcGluIG1vZGUgY29udHJvbAorCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGVuYWJsaW5nIHRoZSBwaW4ncyBpbnB1dC9vdXRwdXQgYnVmZmVycyBhcyBuZWVkZWQuCisJICogVGhlcmVmb3JlIHRoZXJlJ3Mgbm8gbmVlZCB0byBlbmFibGUgdGhlIGlucHV0IGJ1ZmZlciBhdCB0aGlzCisJICogc3RhZ2UuCisJICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyogTXV0ZSBjYXB0dXJlIGFtcCBsZWZ0IGFuZCByaWdodCAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogU2V0IEFEQyBjb25uZWN0aW9uIHNlbGVjdCB0byBtYXRjaCBkZWZhdWx0IG1peGVyIHNldHRpbmcgLSBtaWMKKwkgKiAob24gbWljMSBwaW4pCisJICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIERvIHNpbWlsYXIgd2l0aCB0aGUgc2Vjb25kIEFEQzogbXV0ZSBjYXB0dXJlIGlucHV0IGFtcCBhbmQKKwkgKiBzZXQgQURDIGNvbm5lY3Rpb24gdG8gbWljIHRvIG1hdGNoIEFMU0EncyBkZWZhdWx0IHN0YXRlLgorCSAqLworCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIE11dGUgYWxsIGlucHV0cyB0byBtaXhlciB3aWRnZXQgKGV2ZW4gdW5jb25uZWN0ZWQgb25lcykgKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBtaWMxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sIC8qIG1pYzIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwgLyogbGluZTEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwgLyogbGluZTIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwgLyogQ0QgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDUpfSwgLyogQmVlcC1nZW4gcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDYpfSwgLyogTGluZS1vdXQgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDcpfSwgLyogSFAtcGluIHBpbiAqLworCisJeyB9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF93aWxsX3ZlcmJzW10gPSB7CiAJezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNTI3Miw4ICs1NDI0LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTElORTIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxJTkUtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxJTkUtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSFAtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4NywgSERBX0lOUFVUKSwKQEAgLTU0NzEsNyArNTYyMSw3IEBACiBzdGF0aWMgaW50IGFsYzI2MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC01NTQ2LDExICs1Njk2LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChuaWQgPj0gMHgxMikgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzI2MF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzI2MF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTU2MjMsNyArNTc3MSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYwX0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKQEAgLTU2MzEsOSArNTc3OSw4IEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjMjYwX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC01NjcwLDYgKzU4MTcsNyBAQAogCVtBTEMyNjBfQUNFUl0JCT0gImFjZXIiLAogCVtBTEMyNjBfV0lMTF0JCT0gIndpbGwiLAogCVtBTEMyNjBfUkVQTEFDRVJfNjcyVl0JPSAicmVwbGFjZXIiLAorCVtBTEMyNjBfRkFWT1JJVDEwMF0JPSAiZmF2b3JpdDEwMCIsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCVtBTEMyNjBfVEVTVF0JCT0gInRlc3QiLAogI2VuZGlmCkBAIC01Njc5LDYgKzU4MjcsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2MF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA3YiwgIkFjZXIgQzIweCIsIEFMQzI2MF9BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDhmLCAiQWNlciIsIEFMQzI2MF9BQ0VSKSwKKwlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHg0NTQwLCAiRmF2b3JpdCAxMDBYUyIsIEFMQzI2MF9GQVZPUklUMTAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODA4LCAiSFAgZDU3MDAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwYSwgIkhQIGQ1NzUwIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTAsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKQEAgLTU3MDEsOCArNTg1MCw3IEBACiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2MF9wcmVzZXRzW10gPSB7CiAJW0FMQzI2MF9CQVNJQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF9iYXNlX291dHB1dF9taXhlciwKLQkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIsCi0JCQkgICAgYWxjMjYwX3BjX2JlZXBfbWl4ZXIgfSwKKwkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYwX2RhY19uaWRzLApAQCAtNTc4MSw2ICs1OTI5LDE4IEBACiAJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMsCiAJfSwKKwlbQUxDMjYwX0ZBVk9SSVQxMDBdID0geworCQkubWl4ZXJzID0geyBhbGMyNjBfZmF2b3JpdDEwMF9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2Zhdm9yaXQxMDBfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2MF9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzI2MF9kYWNfbmlkcywKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2R1YWxfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGMyNjBfZHVhbF9hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2MF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjBfbW9kZXMsCisJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlcyksCisJCS5pbnB1dF9tdXggPSBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXMsCisJfSwKIAlbQUxDMjYwX1dJTExdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjBfd2lsbF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2luaXRfdmVyYnMsIGFsYzI2MF93aWxsX3ZlcmJzIH0sCkBAIC01ODU3LDYgKzYwMTcsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2MF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC01ODgyLDYgKzYwNDgsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDA3LCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDA4OwogCkBAIC02MDUzLDggKzYyMjAsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MDgxLDggKzYyNDYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MTM0LDggKzYyOTcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02MjQ0LDggKzY0MDUsMTAgQEAKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJLyogRklYTUU6IHRoaXMgbG9va3Mgc3VzcGljaW91cy4uLgogCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCSovCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjg3NywxOSArNzA0MCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCXVuc2lnbmVkIGludCB2cmVmOwogCQlpZiAoIW5pZCkKIAkJCWNvbnRpbnVlOwotCQl2cmVmID0gUElOX0lOOwotCQlpZiAoMSAvKmkgPD0gQVVUT19QSU5fRlJPTlRfTUlDKi8pIHsKLQkJCXVuc2lnbmVkIGludCBwaW5jYXA7Ci0JCQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOwotCQkJaWYgKChwaW5jYXAgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQpICYKLQkJCSAgICBBQ19QSU5DQVBfVlJFRl84MCkKLQkJCQl2cmVmID0gUElOX1ZSRUY4MDsKLQkJfQotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgdnJlZik7CisJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIEFVVE9fUElOX0ZST05UX01JQyAvKmkqLyk7CiAJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLApAQCAtNjkwMCwxOCArNzA1MywyMSBAQAogc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSBzcGVjLT5pbnB1dF9tdXg7CiAJaW50IGM7CiAKIAlmb3IgKGMgPSAwOyBjIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBjKyspIHsKIAkJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX05VTV9JTlBVVFNdOwogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHNbY107CisJCXVuc2lnbmVkIGludCBtdXhfaWR4OworCQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eDsKIAkJaW50IGNvbm5zLCBtdXRlLCBpZHgsIGl0ZW07CiAKIAkJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCiAJCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOwogCQlpZiAoY29ubnMgPCAwKQogCQkJY29udGludWU7CisJCW11eF9pZHggPSBjID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBjOworCQlpbXV4ID0gJnNwZWMtPmlucHV0X211eFttdXhfaWR4XTsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBjb25uczsgaWR4KyspIHsKIAkJCS8qIGlmIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgdGhlIHNlbGVjdGVkIG9uZSwKIAkJCSAqIHVubXV0ZSBpdCBhcyBkZWZhdWx0IC0gb3RoZXJ3aXNlIG11dGUgaXQKQEAgLTY5MjQsOCArNzA4MCwyMCBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBtdXRlKTsKKwkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgYSBzZWxlY3RvciBvciBtaXhlcgorCQkJICogd2UgY291bGQgY2hlY2sgZm9yIHRoZSB3aWRnZXQgdHlwZSBpbnN0ZWFkLCBidXQKKwkJCSAqIGp1c3QgY2hlY2sgZm9yIEFtcC1JbiBwcmVzZW5jZSAoaW4gY2FzZSBvZiBtaXhlcgorCQkJICogd2l0aG91dCBhbXAtaW4gdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nLCB0aGlzCisJCQkgKiBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgdXNlZCBvciBjYXBzcmMgbmlkIGlzIHdyb25nKQorCQkJICovCisJCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJCQkgICAgbXV0ZSk7CisJCQllbHNlIGlmIChtdXRlICE9IEFNUF9JTl9NVVRFKGlkeCkpCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkJICAgIGlkeCk7CiAJCX0KIAl9CiB9CkBAIC03MDU0LDYgKzcyMjIsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC03MDc0LDcgKzcyNDgsNyBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKQEAgLTcwOTEsNiArNzI2NSw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTcxNDIsMTAgKzczMTcsMTQgQEAKIAkweDA5LCAweDA4CiB9OwogCisjZGVmaW5lIGFsYzg4OV9hZGNfbmlkcwkJYWxjODgwX2FkY19uaWRzCisKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzWzJdID0geyAweDIzLCAweDIyIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzX3JldlsyXSA9IHsgMHgyMiwgMHgyMyB9OwogCisjZGVmaW5lIGFsYzg4OV9jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHMKKwogLyogaW5wdXQgTVVYICovCiAvKiBGSVhNRTogc2hvdWxkIGJlIGEgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCkBAIC03MzYzLDggKzc1NDIsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDI3LDggKzc2MDQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDUyLDggKzc2MjcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NDc4LDggKzc2NTEsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03NTAzLDggKzc2NzQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTEyLDM2ICs4MDgxLDgzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7Ci0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLwotCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KLQl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF82c3RfZGVsbF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKIAl7IH0KIH07CiAKK3N0YXRpYyB2b2lkIGFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQsIGJpdHM7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTYsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7CisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiAyY2ggbW9kZQorICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfMmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCi0JeyB9CisJeyB9IC8qIGVuZCAqLwogfTsKIAorLyoKKyAqIDRjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF80Y2hfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF82Y2hfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IH0KKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbMl0gPSB7CitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg4XzNzdF9ocF9tb2Rlc1szXSA9IHsKIAl7IDIsIGFsYzg4OF8zc3RfaHBfMmNoX2luaXQgfSwKKwl7IDQsIGFsYzg4OF8zc3RfaHBfNGNoX2luaXQgfSwKIAl7IDYsIGFsYzg4OF8zc3RfaHBfNmNoX2luaXQgfSwKIH07CiAKQEAgLTgyMDIsNyArODQxOCw3IEBACiB7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIEFMQzg4MF9IUF9FVkVOVDoKLQkJcHJpbnRrKCJocF9ldmVudFxuIik7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJocF9ldmVudFxuIik7ICovCiAJCWFsYzg4OF82c3RfZGVsbF9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCX0KQEAgLTg0NjEsNiArODY3Nyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4NjY2OCwgIkVDUyIsIEFMQzg4M18zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA2YywgIkFjZXIgQXNwaXJlIDk4MTAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOTAsICJBY2VyIEFzcGlyZSIsIEFMQzg4M19BQ0VSX0FTUElSRSksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEwYSwgIkFjZXIgRmVycmFyaSA1MDAwIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTEwLCAiQWNlciBBc3BpcmUiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMTIsICJBY2VyIEFzcGlyZSA5MzAzIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTIxLCAiQWNlciBBc3BpcmUgNTkyMEciLCBBTEM4ODNfQUNFUl9BU1BJUkUpLApAQCAtODQ2OCwxNyArODY4NSwyMSBAQAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxM2YsICJBY2VyIEFzcGlyZSA1OTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1NywgIkFjZXIgWDMyMDAiLCBBTEM4ODNfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1OCwgIkFjZXIgQVgxNzAwLVUzNzAwQSIsIEFMQzg4M19BVVRPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTVlLCAiQWNlciBBc3BpcmUgNjkzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNjYsICJBY2VyIEFzcGlyZSA2NTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCi0JU05EX1BDSV9RVUlSSygweDEwMjUsIDAsICJBY2VyIGxhcHRvcCIsIEFMQzg4M19BQ0VSKSwgLyogZGVmYXVsdCBBY2VyICovCisJLyogZGVmYXVsdCBBY2VyICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDI1LCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIwZCwgIkRlbGwgSW5zcGlyb24gNTMwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTNkLCAiSFAgUGF2aWxsaW9uIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTY2LCAiSFAgQWNhY2lhIiwgQUxDODg4XzNTVF9IUCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE3MiwgIkhQIEVkdWMuYXIiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODczLCAiQXN1cyBNOTBWIiwgQUxDODg4X0FTVVNfTTkwViksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI0OSwgIkFzdXMgTTJBLVZNIEhETUkiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyODQsICJBc3VzIFozN0UiLCBBTEM4ODNfNlNUX0RJRyksCkBAIC04NTE4LDcgKzg3MzksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwODMsICJBYml0IElQMzUtUFJPIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjEsICJDbGV2byBsYXB0b3AgTTcyMFIiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCiAJU05EX1BDSV9RVUlSSygweDE1NTgsIDB4MDcyMiwgIkNsZXZvIGxhcHRvcCBNNzIwU1IiLCBBTEM4ODNfQ0xFVk9fTTcyMCksCi0JU05EX1BDSV9RVUlSSygweDE1NTgsIDAsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTU1OCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE1ZDksIDB4ODc4MCwgIlN1cGVybWljcm8gUERTQkEiLCBBTEM4ODNfM1NUXzZjaCksCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIk1lZGlvbiBsYXB0b3AiLCBBTEM4ODNfTUVESU9OKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTA3LCAiRlNDIEFNSUxPIFhpMjU1MCIsCkBAIC04NTQzLDYgKzg3NjQsMTAgQEAKIAl7fQogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBhbGMxMjAwX3NsYXZlX2RpZ19vdXRzW10gPSB7CisJQUxDODgzX0RJR09VVF9OSUQsIDAsCit9OworCiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4M19wcmVzZXRzW10gPSB7CiAJW0FMQzg4M18zU1RfMmNoX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfMmNoX21peGVyIH0sCkBAIC04Nzc4LDYgKzkwMDMsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg4XzNzdF9ocF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODhfM3N0X2hwX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfNlNUX0RFTExdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtODg4Myw2ICs5MTEwLDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEMxMjAwX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLnNsYXZlX2RpZ19vdXRzID0gYWxjMTIwMF9zbGF2ZV9kaWdfb3V0cywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLApAQCAtODk1MCwxMSArOTE3OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgzX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKLQkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODgzX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtODk2OSw2ICs5MTk1LDggQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyID0gYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaTsKIAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtODk4Miw2ICs5MjEwLDI2IEBACiAJLyogaGFjayAtIG92ZXJyaWRlIHRoZSBpbml0IHZlcmJzICovCiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzg4M19hdXRvX2luaXRfdmVyYnM7CiAKKwkvKiBzZXR1cCBpbnB1dF9tdXggZm9yIEFMQzg4OSAqLworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA4ODkpIHsKKwkJLyogZGlnaXRhbC1taWMgaW5wdXQgcGluIGlzIGV4Y2x1ZGVkIGluIGFsYzg4MF9hdXRvX2NyZWF0ZS4uKCkKKwkJICogYmVjYXVzZSBpdCdzIHVuZGVyIDB4MTgKKwkJICovCisJCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CisJCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSA9PSAweDEyKSB7CisJCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CisJCQlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKQorCQkJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9pbXV4W2ldLAorCQkJCSAgICAgICAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdLAorCQkJCSAgICAgICBzaXplb2Yoc3BlYy0+cHJpdmF0ZV9pbXV4WzBdKSk7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBETWljIjsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDBiOworCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCQlzcGVjLT5udW1fbXV4X2RlZnMgPSAzOworCQkJc3BlYy0+aW5wdXRfbXV4ID0gc3BlYy0+cHJpdmF0ZV9pbXV4OworCQl9CisJfQorCiAJcmV0dXJuIDE7IC8qIGNvbmZpZyBmb3VuZCAqLwogfQogCkBAIC05MDMzLDYgKzkyODEsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4M19BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4M19wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC05MDQ1LDE0ICs5Mjk5LDM2IEBACiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg4IEFuYWxvZyI7CiAJCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OCBEaWdpdGFsIjsKIAkJfQorCQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgeworCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOworCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7CisJCX0KKwkJaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKKwkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOworCQlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJCWJyZWFrOwogCWNhc2UgMHgxMGVjMDg4OToKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OSBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OSBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODg5X2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODg5X2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4OV9jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfMU1VWF9NSVg7IC8qIDFtdXgvTm1peC1zdHlsZQorCQkJCQkJCWNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4MyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4MyBEaWdpdGFsIjsKKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCQlicmVhazsKIAl9CiAKQEAgLTkwNjMsMTUgKzkzMzksOSBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4M19wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4M19wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0JaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKLQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOwotCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKLQl9Ci0JaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKLQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtOTEyNCw4ICs5Mzk0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MTQ2LDggKzk0MTQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLwogCS8qSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MEQsIDB4MCwgSERBX09VVFBVVCksKi8KIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtOTI1Niw4ICs5NTIyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQVVYIElOIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkFVWCBJTiBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkyODYsOCArOTU1MCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTk0MzUsNiArOTY5Nyw2NyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdHlhbl9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfdHlhbl92ZXJic1tdID0geworCS8qIEhlYWRwaG9uZSBhdXRvbXV0ZSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBQMTEgQVVYX0lOLCB3aGl0ZSA0LXBpbiBjb25uZWN0b3IgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLCAweGUxfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwgMHg5M30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsIDB4MTl9LAorCisJe30KK307CisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBtdXRlOworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgPSAocHJlc2VudCAmIDB4ODAwMDAwMDApICE9IDA7CisJaWYgKHByZXNlbnQpIHsKKwkJLyogbXV0ZSBsaW5lIG91dHB1dCBvbiBBVFggcGFuZWwgKi8KKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAorCQkJCQkgSERBX0FNUF9NVVRFLCBIREFfQU1QX01VVEUpOworCX0gZWxzZSB7CisJCS8qIHVubXV0ZSBsaW5lIG91dHB1dCBpZiBuZWNlc3NhcnkgKi8KKwkJbXV0ZSA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIDB4MWIsIDAsIEhEQV9PVVRQVVQsIDApOworCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjMjYyX3R5YW5fdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJaWYgKChyZXMgPj4gMjYpICE9IEFMQzg4MF9IUF9FVkVOVCkKKwkJcmV0dXJuOworCWFsYzI2Ml90eWFuX2F1dG9tdXRlKGNvZGVjKTsKK30KKwogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9taXhlcgkJYWxjODgyX2NhcHR1cmVfbWl4ZXIKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfYWx0X21peGVyCWFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcgogCkBAIC05OTAxLDggKzEwMjI0LDYgQEAKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTA0NzQsOCArMTA3OTUsMTQgQEAKIAkJCQkJICAgYWxjMjYyX2lnbm9yZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKSB7CisJCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzIHx8IHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJCXNwZWMtPm5vX2FuYWxvZyA9IDE7CisJCQlnb3RvIGRpZ19vbmx5OworCQl9CiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLworCX0KIAllcnIgPSBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTA0ODUsOCArMTA4MTIsMTEgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorIGRpZ19vbmx5OgorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQ7CisJCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOworCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDMjYyX0RJR0lOX05JRDsKIApAQCAtMTA0OTUsMTMgKzEwODI1LDEyIEBACiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjJfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwNTQzLDIxICsxMDg3MiwxOSBAQAogCVtBTEMyNjJfVUxUUkFdCQk9ICJ1bHRyYSIsCiAJW0FMQzI2Ml9MRU5PVk9fMzAwMF0JPSAibGVub3ZvLTMwMDAiLAogCVtBTEMyNjJfTkVDXQkJPSAibmVjIiwKKwlbQUxDMjYyX1RZQU5dCQk9ICJ0eWFuIiwKIAlbQUxDMjYyX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjJfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDAyLCAweDQzN2IsICJIaXBwbyIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwMzMsIDB4ODg5NSwgIk5FQyBWZXJzYSBTOTEwMCIsIEFMQzI2Ml9ORUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEyZmUsICJIUCB4dzk0MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMmZmLCAiSFAgeHc0NTUwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwNiwgIkhQIHh3ODYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDcsICJIUCB4dzY2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA4LCAiSFAgeHc0NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwOSwgIkhQIHh3NCowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMGEsICJIUCB4dzYqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzBiLCAiSFAgeHc4KjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTcwYiwgIkhQIHh3KiIsIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxMjAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxMzAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgxNzAwLCAiSFAgeHcgc2VyaWVzIiwKKwkJCSAgIEFMQzI2Ml9IUF9CUEMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDAsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0wpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDEsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0YpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDIsICJIUCBENzAwMCIsIEFMQzI2Ml9IUF9CUENfRDcwMDBfV0wpLApAQCAtMTA1NzUsMTcgKzEwOTAyLDE3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4MWYwMCwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MjAzLCAiU29ueSBVWC05MCIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwZiwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDBlLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTUsICJTb255IDB4OTAxNSIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAzMywgIlNvbnkgVkFJTyBWR04tU1IxOVhOIiwKLQkJICAgICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE2LCAiU29ueSBWQUlPIiwgQUxDMjYyX0FVVE8pLCAvKiBkaWctb25seSAqLworCVNORF9QQ0lfUVVJUktfTUFTSygweDEwNGQsIDB4ZmYwMCwgMHg5MDAwLCAiU29ueSBWQUlPIiwKKwkJCSAgIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgZHluYWJvb2sgU1MgUlgxIiwKIAkJICAgICAgQUxDMjYyX1RPU0hJQkFfUlgxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjdiLCAiVG9zaGliYSBTMDYiLCBBTEMyNjJfVE9TSElCQV9TMDYpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDEzOTcsICJGdWppdHN1IiwgQUxDMjYyX0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0MmQsICJGdWppdHN1IExpZmVib29rIEU4NDEwIiwgQUxDMjYyX0ZVSklUU1UpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMzIsICJTYW1zdW5nIFExIFVsdHJhIiwgQUxDMjYyX1VMVFJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDM5LCAiU2Ftc3VuZyBRMVUgRUwiLCBBTEMyNjJfVUxUUkEpLAorCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDI5MTUsICJUeWFuIFRodW5kZXIgbjY2NTBXIiwgQUxDMjYyX1RZQU4pLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE0NGQsIDB4ZmYwMCwgMHhjMDMyLCAiU2Ftc3VuZyBRMSIsCisJCQkgICBBTEMyNjJfVUxUUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGM1MTAsICJTYW1zdW5nIFE0NSIsIEFMQzI2Ml9ISVBQTyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzg0ZSwgIkxlbm92byAzMDAwIHk0MTAiLCBBTEMyNjJfTEVOT1ZPXzMwMDApLAogCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1NjAsICJCZW5xIEVEOCIsIEFMQzI2Ml9CRU5RX0VEOCksCkBAIC0xMDgwMiw2ICsxMTEyOSwxOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9fYXV0b211dGUsCiAJfSwKKwlbQUxDMjYyX1RZQU5dID0geworCQkubWl4ZXJzID0geyBhbGMyNjJfdHlhbl9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYyX2luaXRfdmVyYnMsIGFsYzI2Ml90eWFuX3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAyLAorCQkuZGlnX291dF9uaWQgPSBBTEMyNjJfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfdHlhbl91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzI2Ml90eWFuX2F1dG9tdXRlLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzI2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTEwODU0LDYgKzExMTk0LDE0IEBACiAJCX0KIAl9CiAKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZykgeworCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xMDg2NSw3ICsxMTIxMyw3IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwpAQCAtMTA4ODIsOCArMTEyMzAsMTAgQEAKIAkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjYyX2NhcHNyY19uaWRzOwogCQl9CiAJfQotCWlmICghc3BlYy0+Y2FwX21peGVyKQorCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCWlmICghc3BlYy0+bm9fYW5hbG9nKQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtMTEyNjMsMTkgKzExNjEzLDEzIEBACiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF9iYXNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBVbm11dGUgREFDMC0xIGFuZCBzZXQgdm9sID0gMCAqLwogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAogCS8qCiAJICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MGMgLSAweDBlKQogCSAqLwogCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKICAgICAgICAgezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMjk0LDkgKzExNjM4LDcgQEAKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCS8qIHNldCBQQ0JFRVAgdm9sID0gMCwgbXV0ZSBjb25uZWN0aW9ucyAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMzE4LDEwICsxMTY2MCw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogc2V0IG91dHB1dCBEQUMgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKQEAgLTExMzI5LDE2ICsxMTY2OSwxMiBAQAogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjB9LAogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjB9LAogCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCiAJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAkvKiBzZXQgUENCRUVQIHZvbCA9IDAsIG11dGUgY29ubmVjdGlvbnMgKi8KIAl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTUzNyw3ICsxMTg3Myw3IEBACiBzdGF0aWMgaW50IGFsYzI2OF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgaWR4MTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTExNjMxLDkgKzExOTY3LDE0IEBACiAJCQkJCSAgIGFsYzI2OF9pZ25vcmUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykgeworCQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cyB8fCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisJCQlzcGVjLT5ub19hbmFsb2cgPSAxOworCQkJZ290byBkaWdfb25seTsKKwkJfQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KLQorCX0KIAllcnIgPSBhbGMyNjhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTE2NDMsMjUgKzExOTg0LDI2IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCisgZGlnX29ubHk6CiAJLyogZGlnaXRhbCBvbmx5IHN1cHBvcnQgb3V0cHV0ICovCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpIHsKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjhfRElHT1VUX05JRDsKLQorCQlzcGVjLT5kaWdfb3V0X3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwl9CiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSAhPSAweDFkKQorCWlmICghc3BlYy0+bm9fYW5hbG9nICYmIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdICE9IDB4MWQpCiAJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfYmVlcF9taXhlcik7CiAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjhfdm9sdW1lX2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTExNzIzLDcgKzEyMDY1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjhfcHJlc2V0c1tdID0gewogCVtBTEMyNjdfUVVBTlRBX0lMMV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyLCBhbGMyNjhfYmVlcF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY3X3F1YW50YV9pbDFfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtMTE4MDUsNyArMTIxNDcsOCBAQAogCX0sCiAJW0FMQzI2OF9BQ0VSX0FTUElSRV9PTkVdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9hc3BpcmVfb25lX21peGVyLAotCQkJCWFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAorCQkJICAgIGFsYzI2OF9iZWVwX21peGVyLAorCQkJICAgIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY4X2FjZXJfYXNwaXJlX29uZV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC0xMTg3NCw3ICsxMjIxNyw3IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwogCWludCBib2FyZF9jb25maWc7Ci0JaW50IGVycjsKKwlpbnQgaSwgaGFzX2JlZXAsIGVycjsKIAogCXNwZWMgPSBrY2FsbG9jKDEsIHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMTkyMywxNSArMTIyNjYsMzAgQEAKIAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OF9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAotCWlmICghcXVlcnlfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCkpCi0JCS8qIG92ZXJyaWRlIHRoZSBhbXAgY2FwcyBmb3IgYmVlcCBnZW5lcmF0b3IgKi8KLQkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVULAorCWhhc19iZWVwID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CisJCWlmIChzcGVjLT5taXhlcnNbaV0gPT0gYWxjMjY4X2JlZXBfbWl4ZXIpIHsKKwkJCWhhc19iZWVwID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGhhc19iZWVwKSB7CisJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoIXF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQpKQorCQkJLyogb3ZlcnJpZGUgdGhlIGFtcCBjYXBzIGZvciBiZWVwIGdlbmVyYXRvciAqLworCQkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVULAogCQkJCQkgICgweDBjIDw8IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpIHwKIAkJCQkJICAoMHgwYyA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CiAJCQkJCSAgKDB4MDcgPDwgQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVCkgfAogCQkJCQkgICgwIDw8IEFDX0FNUENBUF9NVVRFX1NISUZUKSk7CisJfQogCi0JaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiAhc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwogCQlpbnQgaTsKQEAgLTEyMDEyLDggKzEyMzcwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTIwNDAsOCArMTIzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTIwNjUsOCArMTI0MTksNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRvY2sgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QiLCAweDFiLCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTIxMDMsMTMgKzEyNDU1LDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBiZWVwIGNvbnRyb2wgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9xdWFudGFfZmwxX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTI1MDksNyArMTI4NTQsNyBAQAogCSAqLwogCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8CiAJICAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdID09IDB4MTIpIHsKLQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSAiSW50IE1pYyI7CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSAweDA1OwogCQlpbXV4LT5udW1faXRlbXMrKzsKQEAgLTEyNTI3LDEzICsxMjg3MiwzNCBAQAogI2RlZmluZSBhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2sJYWxjODgwX3BjbV9kaWdpdGFsX3BsYXliYWNrCiAjZGVmaW5lIGFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlCWFsYzg4MF9wY21fZGlnaXRhbF9jYXB0dXJlCiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCwgLyogZml4ZWQgcmF0ZSAqLworCS8qIE5JRCBpcyBzZXQgaW4gYWxjX2J1aWxkX3BjbXMgKi8KKwkub3BzID0geworCQkub3BlbiA9IGFsYzg4MF9wbGF5YmFja19wY21fb3BlbiwKKwkJLnByZXBhcmUgPSBhbGM4ODBfcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gYWxjODgwX3BsYXliYWNrX3BjbV9jbGVhbnVwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwLCAvKiBmaXhlZCByYXRlICovCisJLyogTklEIGlzIHNldCBpbiBhbGNfYnVpbGRfcGNtcyAqLworfTsKKwogLyoKICAqIEJJT1MgYXV0byBjb25maWd1cmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgYWxjMjY5X3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzI2OV9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCkBAIC0xMjU1MCwyMiArMTI5MTYsMTUgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2OV9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAotCS8qIGNyZWF0ZSBhIGJlZXAgbWl4ZXIgY29udHJvbCBpZiB0aGUgcGluIDB4MWQgaXNuJ3QgYXNzaWduZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnMpOyBpKyspCi0JCWlmIChzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV0gPT0gMHgxZCkKLQkJCWJyZWFrOwotCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zKSkKLQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OV9iZWVwX21peGVyKTsKLQogCWFkZF92ZXJiKHNwZWMsIGFsYzI2OV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KIAlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjlfY2Fwc3JjX25pZHNbMF0sCiAJCQkJICAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKQEAgLTEyNTc1LDEwICsxMjkzNCw5IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIXNwZWMtPmNhcF9taXhlcikKKwlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTI2NzUsNyArMTMwMzMsNyBAQAogCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2RtaWNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0ZVSklUU1VdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciwgYWxjMjY5X2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY5X2Z1aml0c3VfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLAogCQkJCWFsYzI2OV9lZWVwY19kbWljX2luaXRfdmVyYnMgfSwKQEAgLTEyNzQwLDEzICsxMzA5OCwyNiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjY5X3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKIAlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMjY5IEFuYWxvZyI7Ci0Jc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2FuYWxvZ19wbGF5YmFjazsKLQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9hbmFsb2dfY2FwdHVyZTsKLQorCWlmIChjb2RlYy0+c3Vic3lzdGVtX2lkID09IDB4MTdhYTNiZjgpIHsKKwkJLyogRHVlIHRvIGEgaGFyZHdhcmUgcHJvYmxlbSBvbiBMZW5vdm8gSWRlYWRwYWQsIHdlIG5lZWQgdG8KKwkJICogZml4IHRoZSBzYW1wbGUgcmF0ZSBvZiBhbmFsb2cgSS9PIHRvIDQ0LjFrSHoKKwkJICovCisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrOworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5XzQ0a19wY21fYW5hbG9nX2NhcHR1cmU7CisJfSBlbHNlIHsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV9wY21fYW5hbG9nX2NhcHR1cmU7CisJfQogCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDMjY5IERpZ2l0YWwiOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlOwpAQCAtMTI3NTYsNiArMTMxMjcsNyBAQAogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X0FVVE8pCkBAIC0xMzAwNiw4ICsxMzM3OCw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX2FzdXNfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9CiB9OwogCkBAIC0xMzQ4MSw3ICsxMzg1MSw3IEBACiBzdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHgsIGlkeDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC0xMzU2OCwxMiArMTM5MzgsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQlpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MTEpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQl9CisJCWlmIChuaWQgPj0gMHgwYyAmJiBuaWQgPD0gMHgxMSkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOwogCX0KIH0KIApAQCAtMTM2MDksNyArMTM5NzUsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKQEAgLTEzNjE4LDEzICsxMzk4NCwxMiBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg2MV9hdXRvX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzg2MV9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MV9hZGNfbmlkcyk7CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEzODMzLDYgKzE0MTk4LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgyMyk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTEzODQ0LDYgKzE0MjE1LDggQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4NjFfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4NjFfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAorCXNldF9iZWVwX2FtcChzcGVjLCAweDIzLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMzsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwpAQCAtMTQwMDAsOSArMTQzNzMsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0MDI2LDkgKzE0Mzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDA2Nyw4ICsxNDQzNCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0Mzc5LDkgKzE0NzQ0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjAzLCAiVG9zaGliYSBQMjA1IiwgQUxDODYxVkRfTEVOT1ZPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBMMzAtMTQ5IiwgQUxDODYxVkRfREFMTEFTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBkLCAiQmlvc3RhciBORjYxUyBTRSIsIEFMQzg2MVZEXzZTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwNjYsICJMZW5vdm8iLCBBTEM4NjFWRF9MRU5PVk8pLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4MDIsICJMZW5vdm8gMzAwMCBDMjAwIiwgQUxDODYxVkRfTEVOT1ZPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODRlLCAiTGVub3ZvIDMwMDAgTjIwMCIsIEFMQzg2MVZEX0xFTk9WTyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQUxDODYxVkRfTEVOT1ZPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgwODYyLCAiQVNSb2NrIEs4TkY2Ry1WU1RBIiwgQUxDODYxVkRfNlNUX0RJRyksCiAJe30KIH07CkBAIC0xNDU0MywxMSArMTQ5MDYsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg2MXZkX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkJCVBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEM4NjFWRF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg2MVZEX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQlBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJQU1QX09VVF9NVVRFKTsKQEAgLTE0NzEzLDcgKzE1MDc0LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg2MVZEX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKQEAgLTE0NzIyLDEzICsxNTA4MywxMiBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg2MXZkX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0Nzc5LDYgKzE1MTM5LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgyMyk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxVkRfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4NjF2ZF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xNDgwMSw5ICsxNTE2NywxMCBAQAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxdmRfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjF2ZF9hZGNfbmlkcyk7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4NjF2ZF9jYXBzcmNfbmlkczsKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CiAKQEAgLTE0OTkyLDggKzE1MzU5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE1MDE1LDggKzE1MzgwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE1OTkyLDU2ICsxNjM1NSw1NSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwMTksIDB4OTA4NywgIkVDUyIsIEFMQzY2Ml9FQ1MpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwOTIsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgyMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgzMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg0MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg2NCwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3NiwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUxVkEiLCBBTEM2NjNfQVNVU19NNTFWQSksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTBWciIsIEFMQzY2M19BU1VTX01PREUxKSwqLworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTMsICJBU1VTIE01MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTQsICJBU1VTIFg1NSIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MzMsICJBU1VTIEY4MFEiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk1MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk2MywgIkFTVVMgWDcxQyIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgRzUwViIsIEFMQzY2M19BU1VTX0c1MFYpLAorCS8qU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWIzLCAiQVNVUyBGN1oiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjkwLCAiQVNVUyBQNUdDLU1YIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmExLCAiQVNVUyBFZWVwYyIsIEFMQzY2Ml9BU1VTX0VFRVBDX1A3MDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyZDEsICJBU1VTIEVlZXBjIEVQMjAiLCBBTEM2NjJfQVNVU19FRUVQQ19FUDIwKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MFZyIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YjMsICJBU1VTIEY3WiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODQzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc2LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODY0LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzgzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzUzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTMzLCAiQVNVUyBGODBRIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTMsICJBU1VTIE01MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk2MywgIkFTVVMgWDcxQyIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlmMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgyMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgzMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCisJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwZDQ3LCAiRm94Y29ubiA0NUNNWC80NUdNWC80NUNNWC1LIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg5MDg3LCAiRUNTIiwgQUxDNjYyX0VDUyksCi0JU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1NjUsIDB4ODIwZiwgIkJpb3N0YXIgVEE3ODBHIE0yKyIsIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxZSwgIkxlbm92byIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MzY2MiwgIkFTUk9DSyBLMTBONzhGdWxsSEQtaFNMSSBSMy4wIiwKIAkJCQkJQUxDNjYyXzNTVF82Y2hfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAwLCAiQVNVUyBIMTMtMjAwMCIsIEFMQzY2M19BU1VTX0gxMyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMSwgIkFTVVMgSDEzLTIwMDEiLCBBTEM2NjNfQVNVU19IMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDIsICJBU1VTIEgxMy0yMDAyIiwgQUxDNjYzX0FTVVNfSDEzKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxODU0LCAweGYwMDAsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMHgiLAorCQkJICAgQUxDNjYzX0FTVVNfSDEzKSwKIAl7fQogfTsKIApAQCAtMTYzNjEsNyArMTY3MjMsNyBAQAogCiAJaWYgKGFsYzg4MF9pc19maXhlZF9waW4ocGluKSkgewogCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKLSAgICAgICAgICAgICAgICAvKiBwcmludGsoIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KIAkJLyogc3BlY2lmeSB0aGUgREFDIGFzIHRoZSBleHRyYSBvdXRwdXQgKi8KIAkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCiAJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7CkBAIC0xNjM5MSwyNiArMTY3NTMsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc3JjIHdpZGdldCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3Qgb2YgdGhlIG5pZC4KKyAqIHJldHVybiAtMSBpZiBub3QgZm91bmQKKyAqLworc3RhdGljIGludCBhbGM2NjJfaW5wdXRfcGluX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCQloZGFfbmlkX3Qgc3JjKQoreworCWhkYV9uaWRfdCBjb25uX2xpc3RbSERBX01BWF9DT05ORUNUSU9OU107CisJaW50IGksIGNvbm5zOworCisJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCisJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CisJaWYgKGNvbm5zIDwgMCkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBjb25uczsgaSsrKQorCQlpZiAoY29ubl9saXN0W2ldID09IHNyYykKKwkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhbGM2NjJfaXNfaW5wdXRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCXJldHVybiAocGluY2FwICYgQUNfUElOQ0FQX0lOKSAhPSAwOworfQorCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChhbGM4ODBfaXNfaW5wdXRfcGluKGNmZy0+aW5wdXRfcGluc1tpXSkpIHsKLQkJCWlkeCA9IGFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sCi0JCQkJCSAgICAgICBpZHgsIDB4MGIpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPQotCQkJCWF1dG9fcGluX2NmZ19sYWJlbHNbaV07Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0KLQkJCQlhbGM4ODBfaW5wdXRfcGluX2lkeChjZmctPmlucHV0X3BpbnNbaV0pOwotCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBjZmctPmlucHV0X3BpbnNbaV0pKSB7CisJCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgwYiwKKwkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKKwkJCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAorCQkJCQkJICAgICAgIGlkeCwgMHgwYik7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgyMiwKKwkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KKwkJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKKwkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4OworCQkJCWltdXgtPm51bV9pdGVtcysrOworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTY0NjAsNyArMTY4NTQsNiBAQAogCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CiB9CiAKLSNkZWZpbmUgYWxjNjYyX2lzX2lucHV0X3BpbihuaWQpCWFsYzg4MF9pc19pbnB1dF9waW4obmlkKQogI2RlZmluZSBBTEM2NjJfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xNjQ3MCwxMiArMTY4NjMsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgICBQSU5fVlJFRjgwIDogUElOX0lOKSk7Ci0JCQlpZiAobmlkICE9IEFMQzY2Ml9QSU5fQ0RfTklEKQorCQlpZiAoYWxjNjYyX2lzX2lucHV0X3Bpbihjb2RlYywgbmlkKSkgeworCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzY2Ml9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTE2NTEzLDIwICsxNjkwNCwyMCBAQAogCQkJCQkgICAiSGVhZHBob25lIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCiAJCWFkZF9taXhlcihzcGVjLCBzcGVjLT5rY3Rscy5saXN0KTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2F1dG9faW5pdF92ZXJicyk7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MykKQEAgLTE2NTM2LDcgKzE2OTI3LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTY1ODgsNiArMTY5NzgsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzY2Ml9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzY2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xNjYxMSwxMCArMTcwMDcsMTQgQEAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzY2Ml9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzY2Ml9hZGNfbmlkcyk7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM2NjJfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYyKQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKKwllbHNlCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA0LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNjA5NDM0NC4uYjVlMTA4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtNDMsNiArNDMsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ19BVVRPLAogCVNUQUNfUkVGLAogCVNUQUNfOTIwMF9PUU8sCiAJU1RBQ185MjAwX0RFTExfRDIxLApAQCAtNjIsMTQgKzYzLDE3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyMDVfQVVUTywKIAlTVEFDXzkyMDVfUkVGLAogCVNUQUNfOTIwNV9ERUxMX000MiwKIAlTVEFDXzkyMDVfREVMTF9NNDMsCiAJU1RBQ185MjA1X0RFTExfTTQ0LAorCVNUQUNfOTIwNV9FQVBELAogCVNUQUNfOTIwNV9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDczWFhfQVVUTywKIAlTVEFDXzkySEQ3M1hYX05PX0pELCAvKiBubyBqYWNrLWRldGVjdGlvbiAqLwogCVNUQUNfOTJIRDczWFhfUkVGLAogCVNUQUNfREVMTF9NNl9BTUlDLApAQCAtODAsMjIgKzg0LDI3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ4M1hYWF9BVVRPLAogCVNUQUNfOTJIRDgzWFhYX1JFRiwKIAlTVEFDXzkySEQ4M1hYWF9QV1JfUkVGLAorCVNUQUNfREVMTF9TMTQsCiAJU1RBQ185MkhEODNYWFhfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ3MUJYWF9BVVRPLAogCVNUQUNfOTJIRDcxQlhYX1JFRiwKIAlTVEFDX0RFTExfTTRfMSwKIAlTVEFDX0RFTExfTTRfMiwKIAlTVEFDX0RFTExfTTRfMywKIAlTVEFDX0hQX000LAogCVNUQUNfSFBfRFY1LAorCVNUQUNfSFBfSERYLAogCVNUQUNfOTJIRDcxQlhYX01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MjV4X0FVVE8sCiAJU1RBQ185MjV4X1JFRiwKIAlTVEFDX00xLAogCVNUQUNfTTFfMiwKQEAgLTEwOCw2ICsxMTcsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjJYX0FVVE8sCiAJU1RBQ19EOTQ1X1JFRiwKIAlTVEFDX0Q5NDVHVFAzLAogCVNUQUNfRDk0NUdUUDUsCkBAIC0xMzUsNiArMTQ1LDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTI3WF9BVVRPLAogCVNUQUNfRDk2NV9SRUZfTk9fSkQsIC8qIG5vIGphY2stZGV0ZWN0aW9uICovCiAJU1RBQ19EOTY1X1JFRiwKIAlTVEFDX0Q5NjVfM1NULApAQCAtMTQ0LDYgKzE1NSwxMiBAQAogCVNUQUNfOTI3WF9NT0RFTFMKIH07CiAKK2VudW0geworCVNUQUNfOTg3Ml9BVVRPLAorCVNUQUNfOTg3Ml9WQUlPLAorCVNUQUNfOTg3Ml9NT0RFTFMKK307CisKIHN0cnVjdCBzaWdtYXRlbF9ldmVudCB7CiAJaGRhX25pZF90IG5pZDsKIAl1bnNpZ25lZCBjaGFyIHR5cGU7CkBAIC0xNjcsNiArMTg0LDcgQEAKIAl1bnNpZ25lZCBpbnQgYWx0X3N3aXRjaDogMTsKIAl1bnNpZ25lZCBpbnQgaHBfZGV0ZWN0OiAxOwogCXVuc2lnbmVkIGludCBzcGRpZl9tdXRlOiAxOworCXVuc2lnbmVkIGludCBjaGVja192b2x1bWVfb2Zmc2V0OjE7CiAKIAkvKiBncGlvIGxpbmVzICovCiAJdW5zaWduZWQgaW50IGVhcGRfbWFzazsKQEAgLTE3OSw2ICsxOTcsNyBAQAogCXVuc2lnbmVkIGludCBzdHJlYW1fZGVsYXk7CiAKIAkvKiBhbmFsb2cgbG9vcGJhY2sgKi8KKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqYWxvb3BiYWNrX2N0bDsKIAl1bnNpZ25lZCBjaGFyIGFsb29wYmFja19tYXNrOwogCXVuc2lnbmVkIGNoYXIgYWxvb3BiYWNrX3NoaWZ0OwogCkBAIC0yMDMsNiArMjIyLDggQEAKIAloZGFfbmlkX3QgaHBfZGFjc1s1XTsKIAloZGFfbmlkX3Qgc3BlYWtlcl9kYWNzWzVdOwogCisJaW50IHZvbHVtZV9vZmZzZXQ7CisKIAkvKiBjYXB0dXJlICovCiAJaGRhX25pZF90ICphZGNfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY3M7CkBAIC0yMjQsNyArMjQ1LDYgQEAKIAkvKiBwaW4gd2lkZ2V0cyAqLwogCWhkYV9uaWRfdCAqcGluX25pZHM7CiAJdW5zaWduZWQgaW50IG51bV9waW5zOwotCXVuc2lnbmVkIGludCAqcGluX2NvbmZpZ3M7CiAKIAkvKiBjb2RlYyBzcGVjaWZpYyBzdHVmZiAqLwogCXN0cnVjdCBoZGFfdmVyYiAqaW5pdDsKQEAgLTQwMCw2ICs0MjAsMTAgQEAKICAgICAgICAgMHgxMiwgMHgxMywKIH07CiAKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfc2xhdmVfZGlnX291dHNbMl0gPSB7CisJMHgxZiwgMCwKK307CisKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfYWRjX25pZHNbM10gPSB7CiAgICAgICAgIDB4MDcsIDB4MDgsIDB4MDkKIH07CkBAIC00NzIsMTUgKzQ5NiwyMSBAQAogCTB4MTQsIDB4MjIsIDB4MjMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9waW5fbmlkc1sxNF0gPSB7CitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfcGluX25pZHNbMTBdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsCi0JMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLQkweDFkLCAweDFlLCAweDFmLCAweDIwCisJMHgwZiwgMHgxMCwgMHgxMSwgMHgxZiwgMHgyMCwKIH07Ci1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNbMTFdID0geworCisjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCisJMHgxZiwgMHgyMCwgMHgyNworfTsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAogCTB4MGYsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCi0JMHgxZiwKKwkweDFmLCAweDIwLCAweDI3CiB9OwogCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X3Bpbl9uaWRzWzE0XSA9IHsKQEAgLTg0Miw5ICs4NzIsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDgzeHh4X2NvcmVfaW5pdFtdID0gewotCXsgMHhhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQl7IDB4YiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JeyAweGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4YiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAogCiAJLyogcG93ZXIgc3RhdGUgY29udHJvbHMgYW1wcyAqLwogCXsgMHgwMSwgQUNfVkVSQl9TRVRfRUFQRCwgMSA8PCAyfSwKQEAgLTg1NCwyNiArODg0LDI1IEBACiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCwgMHgwZiAqLwotCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXt9CiB9OwogCi0jZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMgorI2RlZmluZSBIRF9ESVNBQkxFX1BPUlRGIDEKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0W10gPSB7CiAJLyogc3RhcnQgb2YgY29uZmlnICMxICovCiAKIAkvKiBjb25uZWN0IHBvcnQgMGYgdG8gYXVkaW8gbWl4ZXIgKi8KIAl7IDB4MGYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDJ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZSAweDBmICovCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBzdGFydCBvZiBjb25maWcgIzIgKi8KIAogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBhLCAweGQgKi8KKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXRbXSA9IHsKKwkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGYsIDB4YSwgMHgwZCAqLworCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXt9CkBAIC05NTQsMTYgKzk4Myw2IEBACiAJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgaWR4LCBkaXIpIFwKIAl9CiAKLSNkZWZpbmUgU1RBQ19JTlBVVF9TT1VSQ0UoY250KSBcCi0JeyBcCi0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCi0JCS5uYW1lID0gIklucHV0IFNvdXJjZSIsIFwKLQkJLmNvdW50ID0gY250LCBcCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywgXAotCQkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LCBcCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsIFwKLQl9Ci0KICNkZWZpbmUgU1RBQ19BTkFMT0dfTE9PUEJBQ0sodmVyYl9yZWFkLCB2ZXJiX3dyaXRlLCBjbnQpIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKQEAgLTk3OCw3ICs5OTcsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4YiwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweGIsIDAsIEhEQV9PVVRQVVQpLAotCVNUQUNfSU5QVVRfU09VUkNFKDEpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYSwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtMTAwMyw4ICsxMDIxLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJEQUMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRBQyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKIAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgMyksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTAxNCw5ICsxMDMwLDIyIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbWl4ZXJbXSA9IHsKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDMpLAorCXt9Cit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNCksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfMTBjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNSksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwNDEsOCArMTA3MCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzEwY2hfbWl4ZXJbXSA9IHsKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDUpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwOTQsOSArMTEyMSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExMjIsMTAgKzExNDYsMTEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMiksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMikKK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExMzcsMTYgKzExNjIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI1eF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDAsIEhEQV9PVVRQVVQpLAotCVNUQUNfSU5QVVRfU09VUkNFKDEpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNCwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjA1X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRTAsIDB4N0UwLCAxKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExNTUsOSArMTE3NiwxMyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwNV9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkUwLCAweDdFMCwgMSksCisJe30KK307CisKIC8qIFRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlcXVlbmNlICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMnhfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAKQEAgLTExNjgsOSArMTE5Myw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5Mjd4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMyksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRUIsIDB4N0VCLCAxKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTExODIsNiArMTIwNCwxMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkVCLCAweDdFQiwgMSksCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2RtdXhfbWl4ZXIgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiRGlnaXRhbCBJbnB1dCBTb3VyY2UiLApAQCAtMTIwNywxMCArMTIzNCw3IEBACiAJIkxGRSBQbGF5YmFjayBWb2x1bWUiLAogCSJTaWRlIFBsYXliYWNrIFZvbHVtZSIsCiAJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAotCSJIZWFkcGhvbmUyIFBsYXliYWNrIFZvbHVtZSIsCiAJIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkiRXh0ZXJuYWwgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAotCSJTcGVha2VyMiBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwKIH07CiAKQEAgLTEyMjEsMTAgKzEyNDUsNyBAQAogCSJMRkUgUGxheWJhY2sgU3dpdGNoIiwKIAkiU2lkZSBQbGF5YmFjayBTd2l0Y2giLAogCSJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKLQkiSGVhZHBob25lMiBQbGF5YmFjayBTd2l0Y2giLAogCSJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgU3dpdGNoIiwKIAkiSUVDOTU4IFBsYXliYWNrIFN3aXRjaCIsCiAJTlVMTAogfTsKQEAgLTEyOTQsNiArMTMxNSw4IEBACiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKIAkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLAogCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CisJCS8qIGNvcnJlY3Qgdm9sdW1lIG9mZnNldCAqLworCQl2bWFzdGVyX3RsdlsyXSArPSB2bWFzdGVyX3RsdlszXSAqIHNwZWMtPnZvbHVtZV9vZmZzZXQ7CiAJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKIAkJCQkJICB2bWFzdGVyX3Rsdiwgc2xhdmVfdm9scyk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTMwNiw2ICsxMzI5LDEzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChzcGVjLT5hbG9vcGJhY2tfY3RsICYmCisJICAgIHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImxvb3BiYWNrIikgPT0gMSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgc3BlYy0+YWxvb3BiYWNrX2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlzdGFjOTJ4eF9mcmVlX2tjdGxzKGNvZGVjKTsgLyogbm8gbG9uZ2VyIG5lZWRlZCAqLwogCiAJLyogY3JlYXRlIGphY2sgaW5wdXQgZWxlbWVudHMgKi8KQEAgLTE0OTAsNiArMTUyMCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMDBfbW9kZWxzW1NUQUNfOTIwMF9NT0RFTFNdID0geworCVtTVEFDX0FVVE9dID0gImF1dG8iLAogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjAwX09RT10gPSAib3FvIiwKIAlbU1RBQ185MjAwX0RFTExfRDIxXSA9ICJkZWxsLWQyMSIsCkBAIC0xNTExLDYgKzE1NDIsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKIAkvKiBEZWxsIGxhcHRvcHMgaGF2ZSBCSU9TIHByb2JsZW0gKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWE4LAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjAwX0RFTExfRDIxKSwKQEAgLTE2MzMsNiArMTY2Niw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyNXhfbW9kZWxzW1NUQUNfOTI1eF9NT0RFTFNdID0geworCVtTVEFDXzkyNXhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfUkVGXSA9ICJyZWYiLAogCVtTVEFDX00xXSA9ICJtMSIsCiAJW1NUQUNfTTFfMl0gPSAibTEtMiIsCkBAIC0xNjYwLDYgKzE2OTQsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjV4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSygweDgzODQsIDB4NzYzMiwgIlN0YWM5MjAyIFJlZmVyZW5jZSBCb2FyZCIsIFNUQUNfUkVGKSwKIAogCS8qIERlZmF1bHQgdGFibGUgZm9yIHVua25vd24gSUQgKi8KQEAgLTE2OTEsNiArMTcyNiw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyaGQ3M3h4X21vZGVsc1tTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDczWFhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTJIRDczWFhfTk9fSkRdID0gIm5vLWpkIiwKIAlbU1RBQ185MkhENzNYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNl9BTUlDXSA9ICJkZWxsLW02LWFtaWMiLApAQCAtMTcwMyw2ICsxNzM5LDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJCQkiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzNYWF9SRUYpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyNTQsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1MzUiLCBTVEFDX0RFTExfTTZfRE1JQyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDI1NSwKQEAgLTE3MjYsNTIgKzE3NjQsNjggQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxNF0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMjIxMTAxMCwgMHgwMmExOTAyMCwgMHgwMjE3MDEzMCwKIAkweDAxMDE0MDUwLCAweDAxODE5MDQwLCAweDAxMDE0MDIwLCAweDkwYTMwMTRlLAotCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCiAJMHgwMTQ1MTE2MCwgMHg5ODU2MDE3MCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9zMTRfcGluX2NvbmZpZ3NbMTBdID0geworCTB4MDIyMTQwMzAsIDB4MDIyMTEwMTAsIDB4MDJhMTkwMjAsIDB4MDEwMTQwNTAsCisJMHg0MGYwMDBmMCwgMHgwMTgxOTA0MCwgMHg0MGYwMDBmMCwgMHg5MGE2MDE2MCwKKwkweDQwZjAwMGYwLCAweDQwZjAwMGYwLAorfTsKKwogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ4M3h4eF9icmRfdGJsW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDgzWFhYX1JFRl0gPSByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAorCVtTVEFDX0RFTExfUzE0XSA9IGRlbGxfczE0X3Bpbl9jb25maWdzLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkODN4eHhfbW9kZWxzW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDgzWFhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ4M1hYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gIm1pYy1yZWYiLAorCVtTVEFDX0RFTExfUzE0XSA9ICJkZWxsLXMxNCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyaGQ4M3h4eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ4M1hYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDgzWFhYX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiYSwKKwkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfREVMTF9TMTQpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDIyMTQwMzAsIDB4MDJhMTkwNDAsIDB4MDFhMTkwMjAsIDB4MDEwMTQwMTAsCiAJMHgwMTgxMzAyZSwgMHgwMTAxNDAxMCwgMHgwMTAxOTAyMCwgMHg5MGEwMDBmMCwKLQkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLAorCTB4OTBhMDAwZjAsIDB4MDE0NTIwNTAsIDB4MDE0NTIwNTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg0MGYwMDBmMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDkwYTAwMGYwLAotCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsCisJMHg0MGYwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4MjNhMTkwMmUsIDB4MjMwMTQyNTAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwKKwkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4OTBhNzAzMzAsIDB4OTAxNzAxMTAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKLQkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLAorCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CkBAIC0xNzgxLDM1ICsxODM1LDM4IEBACiAJW1NUQUNfREVMTF9NNF8zXQk9IGRlbGxfbTRfM19waW5fY29uZmlncywKIAlbU1RBQ19IUF9NNF0JCT0gTlVMTCwKIAlbU1RBQ19IUF9EVjVdCQk9IE5VTEwsCisJW1NUQUNfSFBfSERYXSAgICAgICAgICAgPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkNzFieHhfbW9kZWxzW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CisJW1NUQUNfOTJIRDcxQlhYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ3MUJYWF9SRUZdID0gInJlZiIsCiAJW1NUQUNfREVMTF9NNF8xXSA9ICJkZWxsLW00LTEiLAogCVtTVEFDX0RFTExfTTRfMl0gPSAiZGVsbC1tNC0yIiwKIAlbU1RBQ19ERUxMX000XzNdID0gImRlbGwtbTQtMyIsCiAJW1NUQUNfSFBfTTRdID0gImhwLW00IiwKIAlbU1RBQ19IUF9EVjVdID0gImhwLWR2NSIsCisJW1NUQUNfSFBfSERYXSA9ICJocC1oZHgiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkNzFieHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmMiwKLQkJICAgICAgIkhQIGR2NSIsIFNUQUNfSFBfTTQpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY0LAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGY3LAotCQkgICAgICAiSFAgZHY0IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGZjLAotCQkgICAgICAiSFAgZHY3IiwgU1RBQ19IUF9NNCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDAsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MDMsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwODAsCisJCSAgICAgICJIUCIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwZjAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDM2MDAsCisJCSAgICAgICJIUCBkdjQtNyIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxMCwKKwkJICAgICAgIkhQIEhEWCIsIFNUQUNfSFBfSERYKSwgIC8qIEhEWDE4ICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MWEsCi0JCQkJInVua25vd24gSFAiLCBTVEFDX0hQX000KSwKKwkJICAgICAgIkhQIG1pbmkgMTAwMCIsIFNUQUNfSFBfTTQpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjFiLAorCQkgICAgICAiSFAgSERYIiwgU1RBQ19IUF9IRFgpLCAgLyogSERYMTYgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjMzLAogCQkJCSJ1bmtub3duIERlbGwiLCBTVEFDX0RFTExfTTRfMSksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIzNCwKQEAgLTE5NjEsNiArMjAxOCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMnhfbW9kZWxzW1NUQUNfOTIyWF9NT0RFTFNdID0geworCVtTVEFDXzkyMlhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfRDk0NV9SRUZdCT0gInJlZiIsCiAJW1NUQUNfRDk0NUdUUDVdCT0gIjVzdGFjayIsCiAJW1NUQUNfRDk0NUdUUDNdCT0gIjNzdGFjayIsCkBAIC0xOTg4LDYgKzIwNDYsOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogSW50ZWwgOTQ1RyBiYXNlZCBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAxMDEsCiAJCSAgICAgICJJbnRlbCBEOTQ1RyIsIFNUQUNfRDk0NUdUUDMpLApAQCAtMjA0MSw2ICsyMTAxLDkgQEAKIAkJICAgICAgIkludGVsIEQ5NDVQIiwgU1RBQ19EOTQ1R1RQMyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA3MDcsCiAJCSAgICAgICJJbnRlbCBEOTQ1UCIsIFNUQUNfRDk0NUdUUDUpLAorCS8qIG90aGVyIGludGVsICovCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAyMDQsCisJCSAgICAgICJJbnRlbCBEOTQ1IiwgU1RBQ19EOTQ1X1JFRiksCiAJLyogb3RoZXIgc3lzdGVtcyAgKi8KIAkvKiBBcHBsZSBJbnRlbCBNYWMgKE1hYyBNaW5pLCBNYWNCb29rLCBNYWNCb29rIFByby4uLikgKi8KIAlTTkRfUENJX1FVSVJLKDB4ODM4NCwgMHg3NjgwLApAQCAtMjA2NSwzMSArMjEyOCw3IEBACiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFkNywKIAkJICAgICAgIkRlbGwgWFBTIE0xMjEwIiwgU1RBQ185MjJYX0RFTExfTTgyKSwKIAkvKiBFQ1MvUEMgQ2hpcHMgYm9hcmRzICovCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjE0NCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYwOCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjYzMywKLQkJICAgICAgIkVDUy9QQyBjaGlwcyBQMTdHLzEzMzMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTEsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTIsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTMsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTQsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTUsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTYsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTcsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTgsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MTksCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI4MjAsCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAxOSwgMHhmMDAwLCAweDIwMDAsCiAJCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0yMTMyLDYgKzIxNzEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5Mjd4X21vZGVsc1tTVEFDXzkyN1hfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjdYX0FVVE9dCT0gImF1dG8iLAogCVtTVEFDX0Q5NjVfUkVGX05PX0pEXQk9ICJyZWYtbm8tamQiLAogCVtTVEFDX0Q5NjVfUkVGXQkJPSAicmVmIiwKIAlbU1RBQ19EOTY1XzNTVF0JCT0gIjNzdGFjayIsCkBAIC0yMTQ0LDI2ICsyMTg0LDE2IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKIAkgLyogSW50ZWwgOTQ2IGJhc2VkIHN5c3RlbXMgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2QwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4YTMwMSwgIkludGVsIEQ5NDYiLCBTVEFDX0Q5NjVfM1NUKSwKIAkvKiA5NjUgYmFzZWQgMyBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIxMTAsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDksICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDgsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDcsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDYsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIwMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMTAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDIwMDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAogCS8qIERlbGwgMyBzdGFjayBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAxZjcsICJEZWxsIFhQUyBNMTczMCIsIFNUQUNfREVMTF8zU1QpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMWRkLCAiRGVsbCBEaW1lbnNpb24gRTUyMCIsIFNUQUNfREVMTF8zU1QpLApAQCAtMjE3OSwxNSArMjIwOSwxMCBAQAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMmZmLCAiRGVsbCAgICAgIiwgU1RBQ19ERUxMX0JJT1MpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMjA5LCAiRGVsbCBYUFMgMTMzMCIsIFNUQUNfREVMTF9CSU9TKSwKIAkvKiA5NjUgYmFzZWQgNSBzdGFjayBzeXN0ZW1zICovCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIzMDUsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDEsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDIsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDMsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI1MDQsICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMzAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTIyNDAsMTkgKzIyNjUsMjUgQEAKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9IGRlbGxfOTIwNV9tNDJfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSBkZWxsXzkyMDVfbTQzX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gZGVsbF85MjA1X200NF9waW5fY29uZmlncywKKwlbU1RBQ185MjA1X0VBUERdID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTIwNV9tb2RlbHNbU1RBQ185MjA1X01PREVMU10gPSB7CisJW1NUQUNfOTIwNV9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MjA1X1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MjA1X0RFTExfTTQyXSA9ICJkZWxsLW00MiIsCiAJW1NUQUNfOTIwNV9ERUxMX000M10gPSAiZGVsbC1tNDMiLAogCVtTVEFDXzkyMDVfREVMTF9NNDRdID0gImRlbGwtbTQ0IiwKKwlbU1RBQ185MjA1X0VBUERdID0gImVhcGQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjA1X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLAorCS8qIERlbGwgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYxLAogCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWYyLApAQCAtMjI4MywxMDEgKzIzMTQsMjQgQEAKIAkJICAgICAgIkRlbGwgSW5zcGlyb24iLCBTVEFDXzkyMDVfREVMTF9NNDQpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjgsCiAJCSAgICAgICJEZWxsIFZvc3RybyAxNTAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKKwkvKiBHYXRld2F5ICovCisJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2NSwgIkdhdGV3YXkgVDE2MTYiLCBTVEFDXzkyMDVfRUFQRCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIGludCBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkKLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7Ci0Jc3BlYy0+cGluX2NvbmZpZ3MgPSBrY2FsbG9jKHNwZWMtPm51bV9waW5zLCBzaXplb2YoKnNwZWMtPnBpbl9jb25maWdzKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGVjLT5waW5fY29uZmlncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaGRhX25pZF90IG5pZCA9IHNwZWMtPnBpbl9uaWRzW2ldOwotCQl1bnNpZ25lZCBpbnQgcGluX2NmZzsKLQkJCi0JCXBpbl9jZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgCi0JCQlBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMHgwMCk7CQotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogcGluIG5pZCAlMi4yeCBiaW9zIHBpbiBjb25maWcgJTguOHhcbiIsCi0JCQkJCW5pZCwgcGluX2NmZyk7Ci0JCXNwZWMtPnBpbl9jb25maWdzW2ldID0gcGluX2NmZzsKLQl9Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICBoZGFfbmlkX3QgcGluX25pZCwgdW5zaWduZWQgaW50IHBpbl9jb25maWcpCi17Ci0JaW50IGk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wLAotCQkJICAgIHBpbl9jb25maWcgJiAweDAwMDAwMGZmKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwMDBmZjAwKSA+PiA4KTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsCi0JCQkgICAgKHBpbl9jb25maWcgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJICAgIHBpbl9jb25maWcgPj4gMjQpOwotCWkgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkgICAgICAgMHgwMCk7CQotCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBwaW4gbmlkICUyLjJ4IHBpbiBjb25maWcgJTguOHhcbiIsCi0JCSAgICBwaW5fbmlkLCBpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpwaW5jZmdzKQogewogCWludCBpOwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLSAJaWYgKCFzcGVjLT5waW5fY29uZmlncykKLSAJCXJldHVybjsKKwlpZiAoIXBpbmNmZ3MpCisJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQotCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaV0sCi0JCQkJCXNwZWMtPnBpbl9jb25maWdzW2ldKTsKLX0KLQotc3RhdGljIGludCBzdGFjX3NhdmVfcGluX2NmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCAqcGlucykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JaWYgKCFwaW5zKQotCQlyZXR1cm4gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKLQlzcGVjLT5waW5fY29uZmlncyA9IGttZW1kdXAocGlucywKLQkJCQkgICAgc3BlYy0+bnVtX3BpbnMgKiBzaXplb2YoKnBpbnMpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwZWMtPnBpbl9jb25maWdzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWNfY2hhbmdlX3Bpbl9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkJICAgdW5zaWduZWQgaW50IGNmZykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaWYgKHNwZWMtPnBpbl9uaWRzW2ldID09IG5pZCkgewotCQkJc3BlYy0+cGluX2NvbmZpZ3NbaV0gPSBjZmc7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgbmlkLCBjZmcpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJCWlmIChzcGVjLT5waW5fbmlkc1tpXSAmJiBwaW5jZmdzW2ldKQorCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpXSwKKwkJCQkJCSBwaW5jZmdzW2ldKTsKIH0KIAogLyoKQEAgLTI1NjcsNyArMjUyMSw3IEBACiAJCWNvZGVjLT5udW1fcGNtcysrOwogCQlpbmZvKys7CiAJCWluZm8tPm5hbWUgPSAiU1RBQzkyeHggRGlnaXRhbCI7Ci0JCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOworCQlpbmZvLT5wY21fdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOwogCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpIHsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHN0YWM5Mnh4X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLm5pZCA9IHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkOwpAQCAtMjU4Myw4ICsyNTM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTJ4eF9nZXRfdnJlZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKLQl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkgQUNfUEFSX1BJTl9DQVApOworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCXBpbmNhcCA9IChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRikgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQ7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGXzEwMCkKIAkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzEwMDsKQEAgLTI3NTksMjIgKzI3MTIsMzcgQEAKIH07CiAKIC8qIGFkZCBkeW5hbWljIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9jb250cm9sX3RlbXAoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCi0JCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCi0JCQkJICAgICBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKgorc3RhY19jb250cm9sX25ldyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKKwkJIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKIAlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKIAlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOwogCWlmICgha25ldykKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCSprbmV3ID0gKmt0ZW1wOwotCWtuZXctPmluZGV4ID0gaWR4OwogCWtuZXctPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwotCWlmICgha25ldy0+bmFtZSkKKwlpZiAoIWtuZXctPm5hbWUpIHsKKwkJLyogcm9vbGJhY2sgKi8KKwkJbWVtc2V0KGtuZXcsIDAsIHNpemVvZigqa25ldykpOworCQlzcGVjLT5rY3Rscy5hbGxvY2VkLS07CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4ga25ldzsKK30KKworc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY29udHJvbF90ZW1wKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAorCQkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAorCQkJCSAgICAgaW50IGlkeCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3ID0gc3RhY19jb250cm9sX25ldyhzcGVjLCBrdGVtcCwgbmFtZSk7CisJaWYgKCFrbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKKwlrbmV3LT5pbmRleCA9IGlkeDsKIAlrbmV3LT5wcml2YXRlX3ZhbHVlID0gdmFsOwogCXJldHVybiAwOwogfQpAQCAtMjc5Niw2ICsyNzY0LDI5IEBACiAJcmV0dXJuIHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCB0eXBlLCAwLCBuYW1lLCB2YWwpOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19pbnB1dF9zcmNfdGVtcCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKKwkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAorCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCit9OworCitzdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCisJaWYgKCFzcGVjLT5udW1fYWRjcyB8fCBpbXV4LT5udW1faXRlbXMgPD0gMSkKKwkJcmV0dXJuIDA7IC8qIG5vIG5lZWQgZm9yIGlucHV0IHNvdXJjZSBjb250cm9sICovCisJa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaW5wdXRfc3JjX3RlbXAsCisJCQkJc3RhY19pbnB1dF9zcmNfdGVtcC5uYW1lKTsKKwlpZiAoIWtuZXcpCisJCXJldHVybiAtRU5PTUVNOworCWtuZXctPmNvdW50ID0gc3BlYy0+bnVtX2FkY3M7CisJcmV0dXJuIDA7Cit9CisKIC8qIGNoZWNrIHdoZXRoZXIgdGhlIGxpbmUtaW5wdXQgY2FuIGJlIHVzZWQgYXMgbGluZS1vdXQgKi8KIHN0YXRpYyBoZGFfbmlkX3QgY2hlY2tfbGluZV9vdXRfc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjgwNyw3ICsyNzk4LDcgQEAKIAlpZiAoY2ZnLT5saW5lX291dF90eXBlICE9IEFVVE9fUElOX0xJTkVfT1VUKQogCQlyZXR1cm4gMDsKIAluaWQgPSBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTElORV07Ci0JcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfT1VUKQogCQlyZXR1cm4gbmlkOwogCXJldHVybiAwOwpAQCAtMjgyNiwxMiArMjgxNywxMSBAQAogCW1pY19waW4gPSBBVVRPX1BJTl9NSUM7CiAJZm9yICg7OykgewogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW21pY19waW5dOwotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkvKiBzb21lIGxhcHRvcHMgaGF2ZSBhbiBpbnRlcm5hbCBhbmFsb2cgbWljcm9waG9uZQogCQkgKiB3aGljaCBjYW4ndCBiZSB1c2VkIGFzIGEgb3V0cHV0ICovCiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkgewotCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX09VVCkKIAkJCQlyZXR1cm4gbmlkOwogCQl9CkBAIC0yODc5LDggKzI4NjksNyBAQAogCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKIAkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CiAJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKLQkJd2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvbm5bal0sCi0JCQkJCSAgIEFDX1BBUl9BVURJT19XSURHRVRfQ0FQKTsKKwkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNvbm5bal0pOwogCQl3dHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCQkvKiB3ZSBjaGVjayBvbmx5IGFuYWxvZyBvdXRwdXRzICovCiAJCWlmICh3dHlwZSAhPSBBQ19XSURfQVVEX09VVCB8fCAod2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQpAQCAtMjg5NSw2ICsyODg0LDE2IEBACiAJCQlyZXR1cm4gY29ubltqXTsKIAkJfQogCX0KKwkvKiBpZiBhbGwgREFDcyBhcmUgYWxyZWFkeSBhc3NpZ25lZCwgY29ubmVjdCB0byB0aGUgcHJpbWFyeSBEQUMgKi8KKwlpZiAoY29ubl9sZW4gPiAxKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7CisJCQlpZiAoY29ubltqXSA9PSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSkgeworCQkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGopOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yOTM1LDYgKzI5MzQsMjYgQEAKIAkJYWRkX3NwZWNfZGFjcyhzcGVjLCBkYWMpOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKKwkJaWYgKGRhYykgeworCQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCisJCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOworCQkJZWxzZQorCQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKKwkJfQorCQlzcGVjLT5ocF9kYWNzW2ldID0gZGFjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7CisJCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zW2ldOworCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7CisJCWlmIChkYWMpCisJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7CisJCXNwZWMtPnNwZWFrZXJfZGFjc1tpXSA9IGRhYzsKKwl9CisKIAkvKiBhZGQgbGluZS1pbiBhcyBvdXRwdXQgKi8KIAluaWQgPSBjaGVja19saW5lX291dF9zd2l0Y2goY29kZWMpOwogCWlmIChuaWQpIHsKQEAgLTI5NjIsMjYgKzI5ODEsNiBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7Ci0JCW5pZCA9IGNmZy0+aHBfcGluc1tpXTsKLQkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOwotCQlpZiAoZGFjKSB7Ci0JCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKLQkJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBkYWM7Ci0JCQllbHNlCi0JCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOwotCQl9Ci0JCXNwZWMtPmhwX2RhY3NbaV0gPSBkYWM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbaV07Ci0JCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKLQkJaWYgKGRhYykKLQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKLQkJc3BlYy0+c3BlYWtlcl9kYWNzW2ldID0gZGFjOwotCX0KLQogCXNuZF9wcmludGQoInN0YWM5Mnh4OiBkYWNfbmlkcz0lZCAoMHgleC8weCV4LzB4JXgvMHgleC8weCV4KVxuIiwKIAkJICAgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MsCiAJCSAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdLApAQCAtMjk5NCwyNCArMjk5Myw0NyBAQAogfQogCiAvKiBjcmVhdGUgdm9sdW1lIGNvbnRyb2wvc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcHJlZnggdHlwZSAqLwotc3RhdGljIGludCBjcmVhdGVfY29udHJvbHMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwgaGRhX25pZF90IG5pZCwgaW50IGNocykKK3N0YXRpYyBpbnQgY3JlYXRlX2NvbnRyb2xzX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICAgIGludCBpZHgsIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCiB7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAljaGFyIG5hbWVbMzJdOwogCWludCBlcnI7CiAKKwlpZiAoIXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQpIHsKKwkJdW5zaWduZWQgaW50IGNhcHMsIHN0ZXAsIG51bXMsIGRiX3NjYWxlOworCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CisJCXN0ZXAgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+CisJCQlBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOworCQlzdGVwID0gKHN0ZXAgKyAxKSAqIDI1OyAvKiBpbiAuMDFkQiB1bml0ICovCisJCW51bXMgPSAoY2FwcyAmIEFDX0FNUENBUF9OVU1fU1RFUFMpID4+CisJCQlBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUOworCQlkYl9zY2FsZSA9IG51bXMgKiBzdGVwOworCQkvKiBpZiBkQiBzY2FsZSBpcyBvdmVyIC02NGRCLCBhbmQgZmluZXIgZW5vdWdoLAorCQkgKiBsZXQncyByZWR1Y2UgaXQgdG8gaGFsZgorCQkgKi8KKwkJaWYgKGRiX3NjYWxlID4gNjQwMCAmJiBudW1zID49IDB4MWYpCisJCQlzcGVjLT52b2x1bWVfb2Zmc2V0ID0gbnVtcyAvIDI7CisJCXNwZWMtPmNoZWNrX3ZvbHVtZV9vZmZzZXQgPSAxOworCX0KKwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywgU1RBQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7CisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIGlkeCwgbmFtZSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQsCisJCQkJCXNwZWMtPnZvbHVtZV9vZmZzZXQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgaWR4LCBuYW1lLAogCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBjcmVhdGVfY29udHJvbHMoY29kZWMsIHBmeCwgbmlkLCBjaHMpIFwKKwljcmVhdGVfY29udHJvbHNfaWR4KGNvZGVjLCBwZngsIDAsIG5pZCwgY2hzKQorCiBzdGF0aWMgaW50IGFkZF9zcGVjX2RhY3Moc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCiB7CiAJaWYgKHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID4gNCkgewpAQCAtMzAzNyw0MCArMzA1OSwzMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGlzX3VuaXF1ZV9kYWMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dHMgIT0gMSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHNwZWMtPm11bHRpb3V0LmhwX25pZCA9PSBuaWQpCi0JCXJldHVybiAwOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWQpOyBpKyspCi0JCWlmIChzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkW2ldID09IG5pZCkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKKy8qIENyZWF0ZSBvdXRwdXQgY29udHJvbHMKKyAqIFRoZSBtaXhlciBlbGVtZW50cyBhcmUgbmFtZWQgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiB0eXBlIChBVVRPX1BJTl9YWFhfT1VUKQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9vdXRzLAorCQkJCSBjb25zdCBoZGFfbmlkX3QgKnBpbnMsCisJCQkJIGNvbnN0IGhkYV9uaWRfdCAqZGFjX25pZHMsCisJCQkJIGludCB0eXBlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkID0gMDsKKwloZGFfbmlkX3QgbmlkOwogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgaW50IHdpZF9jYXBzOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzICYmIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOyBpKyspIHsKLQkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07Ci0JCWlmIChpID09IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX291dHMgJiYgaSA8IEFSUkFZX1NJWkUoY2huYW1lKTsgaSsrKSB7CisJCW5pZCA9IGRhY19uaWRzW2ldOworCQlpZiAoIW5pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAodHlwZSAhPSBBVVRPX1BJTl9IUF9PVVQgJiYgaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkNlbnRlciIsIG5pZCwgMSk7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbmlkLCAyKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIG5pZCwgMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC0zMDg2LDIzICszMTAwLDQ3IEBACiAJCQl9CiAKIAkJfSBlbHNlIHsKLQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjaG5hbWVbaV07Ci0JCQkvKiBpZiBpdCdzIGEgc2luZ2xlIERBQywgYXNzaWduIGEgYmV0dGVyIG5hbWUgKi8KLQkJCWlmICghaSAmJiBpc191bmlxdWVfZGFjKHNwZWMsIG5pZCkpIHsKLQkJCQlzd2l0Y2ggKGNmZy0+bGluZV9vdXRfdHlwZSkgewotCQkJCWNhc2UgQVVUT19QSU5fSFBfT1VUOgotCQkJCQluYW1lID0gIkhlYWRwaG9uZSI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6Ci0JCQkJCW5hbWUgPSAiU3BlYWtlciI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlpbnQgaWR4OworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIEFVVE9fUElOX0hQX09VVDoKKwkJCQluYW1lID0gIkhlYWRwaG9uZSI7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVVUT19QSU5fU1BFQUtFUl9PVVQ6CisJCQkJbmFtZSA9ICJTcGVha2VyIjsKKwkJCQlpZHggPSBpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQluYW1lID0gY2huYW1lW2ldOworCQkJCWlkeCA9IDA7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgbmFtZSwgbmlkLCAzKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9sc19pZHgoY29kZWMsIG5hbWUsIGlkeCwgbmlkLCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CisJCQlpZiAodHlwZSA9PSBBVVRPX1BJTl9IUF9PVVQgJiYgIXNwZWMtPmhwX2RldGVjdCkgeworCQkJCXdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW5zW2ldKTsKKwkJCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKKwkJCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKKwkJCX0KIAkJfQogCX0KKwlyZXR1cm4gMDsKK30KKworLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KK3N0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgZXJyOworCisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zLAorCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkcywKKwkJCQkgICAgY2ZnLT5saW5lX291dF90eXBlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjZmctPmhwX291dHMgPiAxICYmIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9MSU5FX09VVCkgewogCQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLApAQCAtMzEzNyw0MCArMzE3NSwxOCBAQAogCQkJCQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkOwotCWludCBpLCBlcnIsIG51bXM7CisJaW50IGVycjsKIAotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQlzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0gewotCQkJIkhlYWRwaG9uZSIsICJIZWFkcGhvbmUyIiwgIkhlYWRwaG9uZTMiLAotCQl9OwotCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNmZy0+aHBfcGluc1tpXSk7Ci0JCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQotCQkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5ocF9kYWNzW2ldOwotCQlpZiAoIW5pZCkKLQkJCWNvbnRpbnVlOwotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgcGZ4c1tudW1zKytdLCBuaWQsIDMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCW51bXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7Ci0JCQkiU3BlYWtlciIsICJFeHRlcm5hbCBTcGVha2VyIiwgIlNwZWFrZXIyIiwKLQkJfTsKLQkJaWYgKG51bXMgPj0gQVJSQVlfU0laRShwZnhzKSkKLQkJCWNvbnRpbnVlOwotCQluaWQgPSBzcGVjLT5zcGVha2VyX2RhY3NbaV07Ci0JCWlmICghbmlkKQotCQkJY29udGludWU7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCBwZnhzW251bXMrK10sIG5pZCwgMyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPmhwX291dHMsIGNmZy0+aHBfcGlucywKKwkJCQkgICAgc3BlYy0+aHBfZGFjcywgQVVUT19QSU5fSFBfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5zcGVha2VyX291dHMsIGNmZy0+c3BlYWtlcl9waW5zLAorCQkJCSAgICBzcGVjLT5zcGVha2VyX2RhY3MsIEFVVE9fUElOX1NQRUFLRVJfT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzc5LDExICszMzk1LDcgQEAKIAkJdW5zaWduZWQgaW50IHdjYXBzOwogCQl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsCi0JCQkJCSAgICAgIHNwZWMtPmRtaWNfbmlkc1tpXSwKLQkJCQkJICAgICAgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCSAgICAgIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIApAQCAtMzUwNyw2ICszNTE5LDcgQEAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBkaWdfb3V0LCBoZGFfbmlkX3QgZGlnX2luKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGhwX3N3YXAgPSAwOwogCWludCBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsCkBAIC0zNTE2LDcgKzM1MjksNiBAQAogCWlmICghIHNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBwaW4gY29uZmlnICovCiAKLSNpZiAwIC8qIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLwogCS8qIElmIHdlIGhhdmUgbm8gcmVhbCBsaW5lLW91dCBwaW4gYW5kIG11bHRpcGxlIGhwLW91dHMsIEhQcyBzaG91bGQKIAkgKiBiZSBzZXQgdXAgYXMgbXVsdGktY2hhbm5lbCBvdXRwdXRzLgogCSAqLwpAQCAtMzUzNSw4ICszNTQ3LDggQEAKIAkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSBzcGVjLT5hdXRvY2ZnLmhwX291dHM7CiAJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKIAkJc3BlYy0+YXV0b2NmZy5ocF9vdXRzID0gMDsKKwkJaHBfc3dhcCA9IDE7CiAJfQotI2VuZGlmIC8qIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLwogCWlmIChzcGVjLT5hdXRvY2ZnLm1vbm9fb3V0X3BpbikgewogCQlpbnQgZGlyID0gZ2V0X3djYXBzKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLm1vbm9fb3V0X3BpbikgJgogCQkJKEFDX1dDQVBfT1VUX0FNUCB8IEFDX1dDQVBfSU5fQU1QKTsKQEAgLTM2MjksMTIgKzM2NDEsMTkgQEAKICNlbmRpZgogCiAJZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfaHBfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwotCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOworCS8qIEFsbCBvdXRwdXQgcGFyc2luZyBkb25lLCBub3cgcmVzdG9yZSB0aGUgc3dhcHBlZCBocCBwaW5zICovCisJaWYgKGhwX3N3YXApIHsKKwkJbWVtY3B5KHNwZWMtPmF1dG9jZmcuaHBfcGlucywgc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zLAorCQkgICAgICAgc2l6ZW9mKHNwZWMtPmF1dG9jZmcuaHBfcGlucykpOworCQlzcGVjLT5hdXRvY2ZnLmhwX291dHMgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0czsKKwkJc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlID0gQVVUT19QSU5fSFBfT1VUOworCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyA9IDA7CisJfQogCisJZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzY2MywxMSArMzY4MiwxNSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwllcnIgPSBzdGFjOTJ4eF9hZGRfaW5wdXRfc291cmNlKHNwZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCWlmIChzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPiAyKQogCQlzcGVjLT5zdXJyX3N3aXRjaCA9IDE7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfb3V0OwogCWlmIChkaWdfaW4gJiYgc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gZGlnX2luOwpAQCAtMzczMCw5ICszNzUzLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzICYmIGxmZV9waW4gPT0gMHgwOyBpKyspIHsKIAkJCWhkYV9uaWRfdCBwaW4gPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CiAJCQl1bnNpZ25lZCBpbnQgZGVmY2ZnOwotCQkJZGVmY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW4sIDAsCi0JCQkJCQkgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsCi0JCQkJCQkgMHgwMCk7CisJCQlkZWZjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbik7CiAJCQlpZiAoZ2V0X2RlZmNmZ19kZXZpY2UoZGVmY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIpIHsKIAkJCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbik7CiAJCQkJd2NhcHMgJj0gKEFDX1dDQVBfU1RFUkVPIHwgQUNfV0NBUF9PVVRfQU1QKTsKQEAgLTM3NDUsNyArMzc2Niw3IEBACiAJfQogCiAJaWYgKGxmZV9waW4pIHsKLQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsICJMRkUiLCBsZmVfcGluLCAxKTsKKwkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCAiTEZFIiwgbGZlX3BpbiwgMSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNzc2LDcgKzM3OTcsMTEgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJZXJyID0gc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzcGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDB4MDU7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IDB4MDQ7CkBAIC0zODMyLDggKzM4NTcsNyBAQAogI2lmZGVmIENPTkZJR19TTkRfSkFDSwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IHNpZ21hdGVsX2phY2sgKmphY2s7Ci0JaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCi0JCQkwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCWludCBjb25uZWN0aXZpdHkgPSBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpOwogCWNoYXIgbmFtZVszMl07CiAKQEAgLTM5NDgsNiArMzk3MiwzNiBAQAogc3RhdGljIHZvaWQgc3RhY190b2dnbGVfcG93ZXJfbWFwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCSAgaW50IGVuYWJsZSk7CiAKKy8qIG92ZXJyaWRlIHNvbWUgaGludHMgZnJvbSB0aGUgaHdkZXAgZW50cnkgKi8KK3N0YXRpYyB2b2lkIHN0YWNfc3RvcmVfaGludHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwljb25zdCBjaGFyICpwOworCWludCB2YWw7CisKKwl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJocF9kZXRlY3QiKTsKKwlpZiAodmFsID49IDApCisJCXNwZWMtPmhwX2RldGVjdCA9IHZhbDsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fbWFzayIpOworCWlmIChwKSB7CisJCXNwZWMtPmdwaW9fbWFzayA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApOworCQlzcGVjLT5lYXBkX21hc2sgPSBzcGVjLT5ncGlvX2RpciA9IHNwZWMtPmdwaW9fZGF0YSA9CisJCQlzcGVjLT5ncGlvX21hc2s7CisJfQorCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19kaXIiKTsKKwlpZiAocCkKKwkJc3BlYy0+Z3Bpb19kaXIgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGF0YSIpOworCWlmIChwKQorCQlzcGVjLT5ncGlvX2RhdGEgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImVhcGRfbWFzayIpOworCWlmIChwKQorCQlzcGVjLT5lYXBkX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKSAmIHNwZWMtPmdwaW9fbWFzazsKKwl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJlYXBkX3N3aXRjaCIpOworCWlmICh2YWwgPj0gMCkKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSB2YWw7Cit9CisKIHN0YXRpYyBpbnQgc3RhYzkyeHhfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMzk2NCw2ICs0MDE4LDkgQEAKIAkJCQlzcGVjLT5hZGNfbmlkc1tpXSwgMCwKIAkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwogCisJLyogb3ZlcnJpZGUgc29tZSBoaW50cyAqLworCXN0YWNfc3RvcmVfaGludHMoY29kZWMpOworCiAJLyogc2V0IHVwIEdQSU8gKi8KIAlncGlvID0gc3BlYy0+Z3Bpb19kYXRhOwogCS8qIHR1cm4gb24gRUFQRCBzdGF0aWNhbGx5IHdoZW4gc3BlYy0+ZWFwZF9zd2l0Y2ggaXNuJ3Qgc2V0LgpAQCAtNDAxMyw4ICs0MDcwLDcgQEAKIAkJCQkJCQkJIHBpbmN0bCk7CiAJCQkJfQogCQkJfQotCQkJY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQljb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChjb25mKSAhPSBBQ19KQUNLX1BPUlRfRklYRUQpIHsKIAkJCQllbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLAogCQkJCQkJICBTVEFDX0lOU0VSVF9FVkVOVCk7CkBAIC00MDI2LDggKzQwODIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fZG1pY3M7IGkrKykKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBzcGVjLT5kbWljX25pZHNbaV0sCiAJCQkJCUFDX1BJTkNUTF9JTl9FTik7Ci0JaWYgKGNmZy0+ZGlnX291dF9waW4pCi0JCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfb3V0X3BpbiwKKwlpZiAoY2ZnLT5kaWdfb3V0X3BpbnNbMF0pCisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfb3V0X3BpbnNbMF0sCiAJCQkJCSBBQ19QSU5DVExfT1VUX0VOKTsKIAlpZiAoY2ZnLT5kaWdfaW5fcGluKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX2luX3BpbiwKQEAgLTQwNTUsOCArNDExMSw3IEBACiAJCQlzdGFjX3RvZ2dsZV9wb3dlcl9tYXAoY29kZWMsIG5pZCwgMSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCQlkZWZfY29uZiA9IGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZik7CiAJCS8qIHNraXAgYW55IHBvcnRzIHRoYXQgZG9uJ3QgaGF2ZSBqYWNrcyBzaW5jZSBwcmVzZW5jZQogIAkJICogZGV0ZWN0aW9uIGlzIHVzZWxlc3MgKi8KQEAgLTQxMTAsNyArNDE2NSw2IEBACiAJaWYgKCEgc3BlYykKIAkJcmV0dXJuOwogCi0Ja2ZyZWUoc3BlYy0+cGluX2NvbmZpZ3MpOwogCXN0YWM5Mnh4X2ZyZWVfamFja3MoY29kZWMpOwogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5ldmVudHMpOwogCkBAIC00MTIxLDcgKzQxNzUsOSBAQAogc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQl1bnNpZ25lZCBpbnQgZmxhZykKIHsKLQl1bnNpZ25lZCBpbnQgcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAorCXVuc2lnbmVkIGludCBvbGRfY3RsLCBwaW5fY3RsOworCisJcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAogCQkJMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwKTsKIAogCWlmIChwaW5fY3RsICYgQUNfUElOQ1RMX0lOX0VOKSB7CkBAIC00MTM1LDE0ICs0MTkxLDE3IEBACiAJCQlyZXR1cm47CiAJfQogCisJb2xkX2N0bCA9IHBpbl9jdGw7CiAJLyogaWYgc2V0dGluZyBwaW4gZGlyZWN0aW9uIGJpdHMsIGNsZWFyIHRoZSBjdXJyZW50CiAJICAgZGlyZWN0aW9uIGJpdHMgZmlyc3QgKi8KIAlpZiAoZmxhZyAmIChBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKSkKIAkJcGluX2N0bCAmPSB+KEFDX1BJTkNUTF9JTl9FTiB8IEFDX1BJTkNUTF9PVVRfRU4pOwogCQotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCXBpbl9jdGwgfCBmbGFnKTsKKwlwaW5fY3RsIHw9IGZsYWc7CisJaWYgKG9sZF9jdGwgIT0gcGluX2N0bCkKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICBwaW5fY3RsKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhYzkyeHhfcmVzZXRfcGluY3RsKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLApAQCAtNDE1MCw5ICs0MjA5LDEwIEBACiB7CiAJdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAotCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJcGluX2N0bCAmIH5mbGFnKTsKKwlpZiAocGluX2N0bCAmIGZsYWcpCisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgcGluX2N0bCAmIH5mbGFnKTsKIH0KIAogc3RhdGljIGludCBnZXRfcGluX3ByZXNlbmNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQpAQCAtNDQxNSw3ICs0NDc1LDYgQEAKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0Jc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjKTsKIAlzdGFjOTJ4eF9pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKQEAgLTQ0MjYsNiArNDQ4NSwzNyBAQAogCXJldHVybiAwOwogfQogCisKKy8qCisgKiB1c2luZyBwb3dlciBjaGVjayBmb3IgY29udHJvbGxpbmcgbXV0ZSBsZWQgb2YgSFAgSERYIG5vdGVib29rcworICogY2hlY2sgZm9yIG11dGUgc3RhdGUgb25seSBvbiBTcGVha2VycyAobmlkID0gMHgxMCkKKyAqCisgKiBGb3IgdGhpcyBmZWF0dXJlIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgaXMgbmVlZGVkLCBvdGhlcndpc2UKKyAqIHRoZSBMRUQgaXMgTk9UIHdvcmtpbmcgcHJvcGVybHkgIQorICovCisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IHN0YWM5Mnh4X2hwX2hkeF9jaGVja19wb3dlcl9zdGF0dXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChuaWQgPT0gMHgxMCkgeworCQlpZiAoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBIREFfT1VUUFVULCAwKSAmCisJCSAgICBIREFfQU1QX01VVEUpCisJCQlzcGVjLT5ncGlvX2RhdGEgJj0gfjB4MDg7ICAvKiBvcmFuZ2UgKi8KKwkJZWxzZQorCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IDB4MDg7ICAgLyogd2hpdGUgKi8KKworCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCisJCQkgICAgICBzcGVjLT5ncGlvX2RpciwKKwkJCSAgICAgIHNwZWMtPmdwaW9fZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdGFjOTJ4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQ0NjQsMTYgKzQ1NTQsMTEgQEAKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjAwX01PREVMUywKIAkJCQkJCQlzdGFjOTIwMF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyMDBfY2ZnX3RibCk7Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjAwLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCQkgc3RhYzkyMDBfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsKQEAgLTQ1NDEsMTcgKzQ2MjYsMTIgQEAKIAkJCQkJCQlzdGFjOTI1eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyNXhfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjV4LCIKIAkJCQkgICAgICAidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjV4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CkBAIC00NjI5LDE3ICs0NzA5LDEyIEBACiAJCQkJCQkJc3RhYzkyaGQ3M3h4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDczeHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhENzNYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDczeHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweDBhLAogCQkJY29ubiwgU1RBQzkySEQ3M19EQUNfQ09VTlQgKyAyKSAtIDE7CkBAIC00NjUzLDE0ICs0NzI4LDE4IEBACiAJY2FzZSAweDM6IC8qIDYgQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF82Y2hfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDczeHhfNmNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2s7CiAJCWJyZWFrOwogCWNhc2UgMHg0OiAvKiA4IENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfOGNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzhjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfOGNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NTogLyogMTAgQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF8xMGNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzEwY2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzEwY2hfbG9vcGJhY2s7CisJCWJyZWFrOwogCX0KIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCkBAIC00Njk5LDE4ICs0Nzc4LDE4IEBACiAJCQlzcGVjLT5pbml0ID0gZGVsbF9tNl9jb3JlX2luaXQ7CiAJCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJCWNhc2UgU1RBQ19ERUxMX002X0FNSUM6IC8qIEFuYWxvZyBNaWNzICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMDsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIFNUQUNfREVMTF9NNl9ETUlDOiAvKiBEaWdpdGFsIE1pY3MgKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAxOwogCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAyOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RBQ19ERUxMX002X0JPVEg6IC8qIEJvdGggKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMTsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMjsKIAkJCWJyZWFrOwpAQCAtNDc3Myw2ICs0ODUyLDcgQEAKIAloZGFfbmlkX3QgY29ubltTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDFdOwogCWludCBlcnI7CiAJaW50IG51bV9kYWNzOworCWhkYV9uaWRfdCBuaWQ7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQ3OTEsMTUgKzQ4NzEsNiBAQAogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3B3cl9uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCi0KLQkvKiBzZXQgcG9ydCAweGUgdG8gc2VsZWN0IHRoZSBsYXN0IERBQwotCSAqLwotCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIDB4MGUsCi0JCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOwotCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhlLCAwLAotCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgbnVtX2RhY3MpOwotCiAJc3BlYy0+aW5pdCA9IHN0YWM5MmhkODN4eHhfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ4M3h4eF9taXhlcjsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9waW5fbmlkcyk7CkBAIC00ODE0LDE3ICs0ODg1LDEyIEBACiAJCQkJCQkJc3RhYzkyaGQ4M3h4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ4M3h4eF9jZmdfdGJsKTsKIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKIAkJCSIgU1RBQzkySEQ4M1hYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDgzeHh4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDExMWQ3NjA0OgpAQCAtNDg1MSw2ICs0OTE3LDIzIEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIFNUQUNfREVMTF9TMTQ6CisJCW5pZCA9IDB4ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmlkID0gMHhlOworCQlicmVhazsKKwl9CisKKwludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsCisJCQkJY29ubiwgU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxKSAtIDE7CisKKwkvKiBzZXQgcG9ydCBYIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKKwkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgbnVtX2RhY3MpOworCiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAogCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gc3RhYzkyaGRfcHJvY19ob29rOwpAQCAtNDg1OCw3ICs0OTQxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXggPSB7CitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJBbmFsb2cgSW5wdXRzIiwgMHgwMCB9LAorCQl7ICJEaWdpdGFsIE1pYyAxIiwgMHgwMiB9LAorCQl7ICJEaWdpdGFsIE1pYyAyIiwgMHgwMyB9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKQEAgLTQ4NjgsMTAgKzQ5NjAsNjcgQEAKIAl9CiB9OwogCisvKiBnZXQgdGhlIHBpbiBjb25uZWN0aW9uIChmaXhlZCwgbm9uZSwgZXRjKSAqLworc3RhdGljIHVuc2lnbmVkIGludCBzdGFjX2dldF9kZWZjZmdfY29ubmVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGlkeCkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBjZmc7CisKKwljZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHNwZWMtPnBpbl9uaWRzW2lkeF0pOworCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QoY2ZnKTsKK30KKworc3RhdGljIGludCBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIGhkYV9uaWRfdCAqbmlkcywgaW50IG51bV9uaWRzKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGlkeCwgbnVtOworCXVuc2lnbmVkIGludCBkZWZfY29uZjsKKworCWZvciAobnVtID0gMDsgbnVtIDwgbnVtX25pZHM7IG51bSsrKSB7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgc3BlYy0+bnVtX3BpbnM7IGlkeCsrKQorCQkJaWYgKHNwZWMtPnBpbl9uaWRzW2lkeF0gPT0gbmlkc1tudW1dKQorCQkJCWJyZWFrOworCQlpZiAoaWR4ID49IHNwZWMtPm51bV9waW5zKQorCQkJYnJlYWs7CisJCWRlZl9jb25mID0gc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3QoY29kZWMsIGlkeCk7CisJCWlmIChkZWZfY29uZiA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3NtdXhlcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICBoZGFfbmlkX3QgZGlnMHBpbikKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNwZWMtPm51bV9waW5zOyBpZHgrKykKKwkJaWYgKHNwZWMtPnBpbl9uaWRzW2lkeF0gPT0gZGlnMHBpbikKKwkJCWJyZWFrOworCWlmICgoaWR4ICsgMikgPj0gc3BlYy0+bnVtX3BpbnMpCisJCXJldHVybiAwOworCisJLyogZGlnMXBpbiBjYXNlICovCisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHggKyAxKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDI7CisKKwkvKiBkaWcwcGluICsgZGlnMnBpbiBjYXNlICovCisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHggKyAyKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDI7CisJaWYgKHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHgpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkNzFieHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CisJc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKIAlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgbmRtaWNfbmlkcyA9IDA7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQ4NzksMjcgKzUwMjgsMzIgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwotCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzKTsKKwlzcGVjLT5udW1fcGlucyA9IFNUQUM5MkhENzFCWFhfTlVNX1BJTlM7CisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDExMWQ3NmI2OgorCWNhc2UgMHgxMTFkNzZiNzoKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0OworCQlicmVhazsKKwljYXNlIDB4MTExZDc2MDM6CisJY2FzZSAweDExMWQ3NjA4OgorCQkvKiBPbiA5MkhENzVCeCAweDI3IGlzbid0IGEgcGluIG5pZCAqLworCQlzcGVjLT5udW1fcGlucy0tOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydDsKKwl9CiAJc3BlYy0+bnVtX3B3cnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfcHdyX25pZHMpOwotCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkczsKLQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXgsCi0JCQlzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4KSk7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsCiAJCQkJCQkJU1RBQ185MkhENzFCWFhfTU9ERUxTLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhENzFCWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPiBTVEFDXzkySEQ3MUJYWF9SRUYpIHsKIAkJLyogR1BJTzAgPSBFQVBEICovCkBAIC00OTA4LDE2ICs1MDYyLDM0IEBACiAJCXNwZWMtPmdwaW9fZGF0YSA9IDB4MDE7CiAJfQogCisJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHM7CisJc3BlYy0+ZG11eF9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHM7CisKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2YjY6IC8qIDQgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNzoKKwkJdW5tdXRlX2luaXQrKzsKKwkJLyogZmFsbHRocnUgKi8KIAljYXNlIDB4MTExZDc2YjQ6IC8qIDYgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNToKKwkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIpKTsKIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOworCQlpZiAoc3BlYy0+bnVtX2RtaWNzKSB7CisJCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CisJCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwODogLyogNSBQb3J0IHdpdGggQW5hbG9nIE1peGVyICovCisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOworCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcy0tOwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfSFBfTTQ6CiAJCQkvKiBFbmFibGUgVlJFRiBwb3dlciBzYXZpbmcgb24gR1BJTzEgZGV0ZWN0ICovCkBAIC00OTQ0LDcgKzUxMTYsMTUgQEAKIAogCQkvKiBkaXNhYmxlIFZTVyAqLwogCQlzcGVjLT5pbml0ID0gJnN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtIRF9ESVNBQkxFX1BPUlRGXTsKLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHhmLCAweDQwZjAwMGYwKTsKKwkJdW5tdXRlX2luaXQrKzsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBmLCAweDQwZjAwMGYwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDE5LCAweDQwZjAwMGYzKTsKKwkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHNbU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxXSA9IDA7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxKTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAyOwogCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDM6IC8qIDYgUG9ydCB3aXRoIEFuYWxvZyBNaXhlciAqLwogCQlpZiAoKGNvZGVjLT5yZXZpc2lvbl9pZCAmIDB4ZikgPT0gMSkKQEAgLTQ5NTQsMTIgKzUxMzQsMjMgQEAKIAkJc3BlYy0+bnVtX3B3cnMgPSAwOwogCQkvKiBmYWxsdGhydSAqLwogCWRlZmF1bHQ6CisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCisJCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOwogCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CisJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKKwkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOworCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCW5kbWljX25pZHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDE7CiAJfQogCisJaWYgKGdldF93Y2Fwcyhjb2RlYywgMHhhKSAmIEFDX1dDQVBfSU5fQU1QKQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlX2NhY2hlKGNvZGVjLCB1bm11dGVfaW5pdCk7CisKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3MWJ4eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NTA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIApAQCAtNDk2NywxOCArNTE1OCwxNyBAQAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyNjsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfbXV4X25pZHM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTJoZDcxYnh4X2FkY19uaWRzOwotCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOwotCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOwogCXNwZWMtPnNtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfc211eF9uaWRzOwogCXNwZWMtPnB3cl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9wd3JfbmlkczsKIAogCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9tdXhfbmlkcyk7CiAJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfYWRjX25pZHMpOworCXNwZWMtPm51bV9zbXV4ZXMgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoY29kZWMsIDB4MWUpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAljYXNlIFNUQUNfSFBfTTQ6CiAJCS8qIGVuYWJsZSBpbnRlcm5hbCBtaWNyb3Bob25lICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGUsIDB4MDE4MTMwNDApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGUsIDB4MDE4MTMwNDApOwogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIDB4MGUsCiAJCQlBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfVlJFRl84MCk7CiAJCS8qIGZhbGx0aHJ1ICovCkBAIC00OTkzLDE5ICs1MTgzLDM2IEBACiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAwOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3BlYy0+bnVtX2RtaWNzID0gU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1M7Ci0JCXNwZWMtPm51bV9zbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfc211eF9uaWRzKTsKLQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCWNhc2UgU1RBQ19IUF9EVjU6CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZCwgMHg5MDE3MDAxMCk7CisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgMHgwZCwgQUNfUElOQ1RMX09VVF9FTik7CisJCWJyZWFrOworCWNhc2UgU1RBQ19IUF9IRFg6CisJCXNwZWMtPm51bV9kbWljcyA9IDE7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOworCQlzcGVjLT5udW1fc211eGVzID0gMTsKKwkJLyoKKwkJICogRm9yIGNvbnRyb2xsaW5nIE1VVEUgTEVEIG9uIEhQIEhEWDE2L0hEWDE4IG5vdGVib29rcywKKwkJICogdGhlIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgaXMgbmVlZGVkIHRvIGJlIHNldC4KKwkJICovCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCQkvKiBvcmFuZ2Uvd2hpdGUgbXV0ZSBsZWQgb24gR1BJTzMsIG9yYW5nZT0wLCB3aGl0ZT0xICovCisJCXNwZWMtPmdwaW9fbWFzayB8PSAweDA4OworCQlzcGVjLT5ncGlvX2RpciAgfD0gMHgwODsKKwkJc3BlYy0+Z3Bpb19kYXRhIHw9IDB4MDg7ICAvKiBzZXQgdG8gd2hpdGUgKi8KKworCQkvKiByZWdpc3RlciBjaGVja19wb3dlcl9zdGF0dXMgY2FsbGJhY2suICovCisJCWNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzID0KKwkJICAgIHN0YWM5Mnh4X2hwX2hkeF9jaGVja19wb3dlcl9zdGF0dXM7CisjZW5kaWYJCisJCWJyZWFrOwogCX07CiAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCWlmIChzcGVjLT5kaW5wdXRfbXV4KQotCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyArPQotCQkJc3BlYy0+bnVtX2RtaWNzIC0KLQkJCQkoQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxKTsKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0gc3BlYy0+bnVtX2RtaWNzIC0gbmRtaWNfbmlkczsKIAotCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDIxLCAweDIzKTsKKwllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMCk7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhkYV9jb2RlYzogTm8gYXV0by1jb25maWcgaXMgIgpAQCAtNTA4MCwxNyArNTI4NywxMiBAQAogCX0KIAogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIyeCwgIgogCQkJInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyMnhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjJ4X2FkY19uaWRzOwogCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyMnhfbXV4X25pZHM7CkBAIC01MTQxLDI0ICs1MzQzLDE5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTI3eF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTI3eF9waW5fbmlkczsKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjdYX01PREVMUywKIAkJCQkJCQlzdGFjOTI3eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyN3hfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDAgfHwgIXN0YWM5Mjd4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSkgewotCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKLQkJCQkgICAgIlNUQUM5Mjd4LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQorCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCisJCQkgICAgIlNUQUM5Mjd4LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTI3eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMzsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5Mjd4X2FkY19uaWRzOwpAQCAtNTE4NywxNSArNTM4NCwxNSBAQAogCQljYXNlIDB4MTAyODAyMDk6CiAJCWNhc2UgMHgxMDI4MDIyZToKIAkJCS8qIGNvcnJlY3QgdGhlIGRldmljZSBmaWVsZCB0byBTUERJRiBvdXQgKi8KLQkJCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MjEsIDB4MDE0NDIwNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDIxLCAweDAxNDQyMDcwKTsKIAkJCWJyZWFrOwogCQl9OwogCQkvKiBjb25maWd1cmUgdGhlIGFuYWxvZyBtaWNyb3Bob25lIG9uIHNvbWUgbGFwdG9wcyAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBjLCAweDkwYTc5MTMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBjLCAweDkwYTc5MTMwKTsKIAkJLyogY29ycmVjdCB0aGUgZnJvbnQgb3V0cHV0IGphY2sgYXMgYSBocCBvdXQgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZiwgMHgwMjI3MDExZik7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgMHgwMjI3MDExZik7CiAJCS8qIGNvcnJlY3QgdGhlIGZyb250IGlucHV0IGphY2sgYXMgYSBtaWMgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZSwgMHgwMmE3OTEzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZSwgMHgwMmE3OTEzMCk7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBTVEFDX0RFTExfM1NUOgogCQkvKiBHUElPMiBIaWdoID0gRW5hYmxlIEVBUEQgKi8KQEAgLTUyMjIsNiArNTQxOSw3IEBACiAJfQogCiAJc3BlYy0+bnVtX3B3cnMgPSAwOworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTI3eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NDA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIAlzcGVjLT5lYXBkX3N3aXRjaCA9IDE7CkBAIC01MjgwLDE2ICs1NDc4LDExIEBACiAJCQkJCQkJc3RhYzkyMDVfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjA1X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwNSwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjA1X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDIzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyMDVfYWRjX25pZHM7CkBAIC01MzA2LDE3ICs1NDk5LDIwIEBACiAKIAlzcGVjLT5pbml0ID0gc3RhYzkyMDVfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyMDVfbWl4ZXI7CisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MjA1X2xvb3BiYWNrOwogCiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7Ci0Jc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOworCS8qIFR1cm4gb24vb2ZmIEVBUEQgcGVyIEhQIHBsdWdnaW5nICovCisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyAhPSBTVEFDXzkyMDVfRUFQRCkKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CiAJCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpewogCWNhc2UgU1RBQ185MjA1X0RFTExfTTQzOgogCQkvKiBFbmFibGUgU1BESUYgaW4vb3V0ICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MWYsIDB4MDE0NDEwMzApOwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDIwLCAweDFjNDEwMDMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDFmLCAweDAxNDQxMDMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDIwLCAweDFjNDEwMDMwKTsKIAogCQkvKiBFbmFibGUgdW5zb2wgcmVzcG9uc2UgZm9yIEdQSU80L0RvY2sgSFAgY29ubmVjdGlvbiAqLwogCQllcnIgPSBzdGFjX2FkZF9ldmVudChzcGVjLCBjb2RlYy0+YWZnLCBTVEFDX1ZSRUZfRVZFTlQsIDB4MDEpOwpAQCAtNTM3MywyMjMgKzU1NjksODcgQEAKICAqIFNUQUM5ODcyIGhhY2sKICAqLwogCi0vKiBzdGF0aWMgY29uZmlnIGZvciBTb255IFZBSU8gRkU1NTBHIGFuZCBTb255IFZBSU8gQVIgKi8KLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19kYWNzW10gPSB7IDB4MiB9OwotI2RlZmluZSBWQUlPX0hQX0RBQwkweDUKLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19hZGNzW10gPSB7IDB4OCAvKiwweDYqLyB9Owotc3RhdGljIGhkYV9uaWRfdCB2YWlvX211eF9uaWRzW10gPSB7IDB4MTUgfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHZhaW9fbXV4ID0gewotCS5udW1faXRlbXMgPSAzLAotCS5pdGVtcyA9IHsKLQkJLyogeyAiSFAiLCAweDAgfSwgKi8KLQkJeyAiTWljIEphY2siLCAweDEgfSwKLQkJeyAiSW50ZXJuYWwgTWljIiwgMHgyIH0sCi0JCXsgIlBDTSIsIDB4MyB9LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19pbml0W10gPSB7Ci0JezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLwotCXsweDBhLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgU1RBQ19IUF9FVkVOVH0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCAvKiBTcGVha2VyIDwtIDB4NSAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAoPC0gMHgyKSAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LCAvKiBDRCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTg3Ml9jb3JlX2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1pYy1zZWw6IDBhLDBkLDE0LDAyICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIEhQICovCi0JezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIFNwZWFrZXIgKi8KLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+IDB4NiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIE1pYy1pbiAtPiAweDkgKi8KIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2YWlvX2FyX2luaXRbXSA9IHsKLQl7MHgwYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwgLyogSFAgPC0gMHgyICovCi0JezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCAvKiBTcGVha2VyIDwtIDB4NSAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAoPC0gMHgyKSAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LCAvKiBDRCAqLwotLyoJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LCovIC8qIE9wdGljYWwgT3V0ICovCi0JezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LCAvKiBNaWM/ICovCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaWMtc2VsOiAwYSwwZCwxNCwwMiAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBIUCAqLwotCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBTcGVha2VyICovCi0vKgl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwqLyAvKiBPcHRpY2FsIE91dCAqLwotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIGNhcHR1cmUgc3cvdm9sIC0+IDB4OCAqLwotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwgLyogQ0QtaW4gLT4gMHg2ICovCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwgLyogTWljLWluIC0+IDB4OSAqLwotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmFpb19taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDA3LCAwLCBIREFfSU5QVVQpLCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5ODcyX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuY291bnQgPSAxLAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCi0JfSwKLQl7fQorCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2YWlvX2FyX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJDRCBDYXB0dXJlIFZvbHVtZSIsIDB4MDcsIDAsIEhEQV9JTlBVVCksICovCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JLypIREFfQ09ERUNfTVVURSgiT3B0aWNhbCBPdXQgU3dpdGNoIiwgMHgxMCwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiT3B0aWNhbCBPdXQgVm9sdW1lIiwgMHgxMCwgMCwgSERBX09VVFBVVCksKi8KLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5jb3VudCA9IDEsCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwKLQl9LAotCXt9CitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX3Bpbl9uaWRzW10gPSB7CisJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKwkweDExLCAweDEzLCAweDE0LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIHN0YWM5ODcyX3BhdGNoX29wcyA9IHsKLQkuYnVpbGRfY29udHJvbHMgPSBzdGFjOTJ4eF9idWlsZF9jb250cm9scywKLQkuYnVpbGRfcGNtcyA9IHN0YWM5Mnh4X2J1aWxkX3BjbXMsCi0JLmluaXQgPSBzdGFjOTJ4eF9pbml0LAotCS5mcmVlID0gc3RhYzkyeHhfZnJlZSwKLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCi0jZW5kaWYKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfYWRjX25pZHNbXSA9IHsKKwkweDggLyosMHg2Ki8KIH07CiAKLXN0YXRpYyBpbnQgc3RhYzk4NzJfdmFpb19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBzdGFjOTJ4eF9pbml0KGNvZGVjKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudChjb2RlYywgU1RBQ19IUF9FVkVOVCA8PCAyNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5ODcyX3ZhaW9faHBfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmIChnZXRfcGluX3ByZXNlbmNlKGNvZGVjLCAweDBhKSkgewotCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIDB4MGYsIEFDX1BJTkNUTF9PVVRfRU4pOwotCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCAweDBhLCBBQ19QSU5DVExfT1VUX0VOKTsKLQl9IGVsc2UgewotCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIDB4MGEsIEFDX1BJTkNUTF9PVVRfRU4pOwotCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCAweDBmLCBBQ19QSU5DVExfT1VUX0VOKTsKLQl9Ci19IAotCi1zdGF0aWMgdm9pZCBzdGFjOTg3Ml92YWlvX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBTVEFDX0hQX0VWRU5UOgotCQlzdGFjOTg3Ml92YWlvX2hwX2RldGVjdChjb2RlYywgcmVzKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgc3RhYzk4NzJfdmFpb19wYXRjaF9vcHMgPSB7Ci0JLmJ1aWxkX2NvbnRyb2xzID0gc3RhYzkyeHhfYnVpbGRfY29udHJvbHMsCi0JLmJ1aWxkX3BjbXMgPSBzdGFjOTJ4eF9idWlsZF9wY21zLAotCS5pbml0ID0gc3RhYzk4NzJfdmFpb19pbml0LAotCS5mcmVlID0gc3RhYzkyeHhfZnJlZSwKLQkudW5zb2xfZXZlbnQgPSBzdGFjOTg3Ml92YWlvX3Vuc29sX2V2ZW50LAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCi0jZW5kaWYKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfbXV4X25pZHNbXSA9IHsKKwkweDE1CiB9OwogCi1lbnVtIHsgLyogRkUgYW5kIFNaIHNlcmllcy4gaWQ9MHg4Mzg0NzY2MSBhbmQgc3Vic3lzPTB4MTA0RDA3MDAgb3IgMTA0RDEwMDAuICovCi0gICAgICAgQ1hEOTg3MlJEX1ZBSU8sCi0gICAgICAgLyogVW5rbm93bi4gaWQ9MHg4Mzg0NzY2MiBhbmQgc3Vic3lzPTB4MTA0RDEyMDAgb3IgMTA0RDEwMDAuICovCi0gICAgICAgU1RBQzk4NzJBS19WQUlPLCAKLSAgICAgICAvKiBVbmtub3duLiBpZD0weDgzODQ3NjYxIGFuZCBzdWJzeXM9MHgxMDREMTIwMC4gKi8KLSAgICAgICBTVEFDOTg3MktfVkFJTywKLSAgICAgICAvKiBBUiBTZXJpZXMuIGlkPTB4ODM4NDc2NjQgYW5kIHN1YnN5cz0xMDREMTMwMCAqLwotICAgICAgIENYRDk4NzJBS0RfVkFJTywKLSAgICAgICBTVEFDXzk4NzJfTU9ERUxTLAorc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzWzldID0geworCTB4MDMyMTEwMjAsIDB4NDExMTExZjAsIDB4NDExMTExZjAsIDB4MDNhMTUwMzAsCisJMHg0MTExMTFmMCwgMHg5MDE3MDExMCwgMHg0MTExMTFmMCwgMHg0MTExMTFmMCwKKwkweDkwYTcwMTNlCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzk4NzJfbW9kZWxzW1NUQUNfOTg3Ml9NT0RFTFNdID0gewotCVtDWEQ5ODcyUkRfVkFJT10JPSAidmFpbyIsCi0JW0NYRDk4NzJBS0RfVkFJT10JPSAidmFpby1hciIsCisJW1NUQUNfOTg3Ml9BVVRPXSA9ICJhdXRvIiwKKwlbU1RBQ185ODcyX1ZBSU9dID0gInZhaW8iLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzk4NzJfYnJkX3RibFtTVEFDXzk4NzJfTU9ERUxTXSA9IHsKKwlbU1RBQ185ODcyX1ZBSU9dID0gc3RhYzk4NzJfdmFpb19waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTg3Ml9jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlNiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlZiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFmZCwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwNSwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCi0Je30KKwl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5ODcyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVycjsKIAotCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzk4NzJfTU9ERUxTLAotCQkJCQkJICBzdGFjOTg3Ml9tb2RlbHMsCi0JCQkJCQkgIHN0YWM5ODcyX2NmZ190YmwpOwotCWlmIChib2FyZF9jb25maWcgPCAwKQotCQkvKiB1bmtub3duIGNvbmZpZywgbGV0IGdlbmVyaWMtcGFyc2VyIGRvIGl0cyBqb2IuLi4gKi8KLQkJcmV0dXJuIHNuZF9oZGFfcGFyc2VfZ2VuZXJpY19jb2RlYyhjb2RlYyk7Ci0JCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCiAJY29kZWMtPnNwZWMgPSBzcGVjOwotCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7Ci0JY2FzZSBDWEQ5ODcyUkRfVkFJTzoKLQljYXNlIFNUQUM5ODcyQUtfVkFJTzoKLQljYXNlIFNUQUM5ODcyS19WQUlPOgotCQlzcGVjLT5taXhlciA9IHZhaW9fbWl4ZXI7Ci0JCXNwZWMtPmluaXQgPSB2YWlvX2luaXQ7Ci0JCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7Ci0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRSh2YWlvX2RhY3MpOwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHZhaW9fZGFjczsKLQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gVkFJT19IUF9EQUM7Ci0JCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRSh2YWlvX2FkY3MpOwotCQlzcGVjLT5hZGNfbmlkcyA9IHZhaW9fYWRjczsKLQkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5pbnB1dF9tdXggPSAmdmFpb19tdXg7Ci0JCXNwZWMtPm11eF9uaWRzID0gdmFpb19tdXhfbmlkczsKLQkJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5ODcyX3ZhaW9fcGF0Y2hfb3BzOwotCQlicmVhazsKLQkKLQljYXNlIENYRDk4NzJBS0RfVkFJTzoKLQkJc3BlYy0+bWl4ZXIgPSB2YWlvX2FyX21peGVyOwotCQlzcGVjLT5pbml0ID0gdmFpb19hcl9pbml0OwotCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUodmFpb19kYWNzKTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSB2YWlvX2RhY3M7Ci0JCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IFZBSU9fSFBfREFDOwotCQlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUodmFpb19hZGNzKTsKLQkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5hZGNfbmlkcyA9IHZhaW9fYWRjczsKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJnZhaW9fbXV4OwotCQlzcGVjLT5tdXhfbmlkcyA9IHZhaW9fbXV4X25pZHM7Ci0JCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTg3Ml9wYXRjaF9vcHM7Ci0JCWJyZWFrOwotCX0KIAorCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzk4NzJfTU9ERUxTLAorCQkJCQkJCXN0YWM5ODcyX21vZGVscywKKwkJCQkJCQlzdGFjOTg3Ml9jZmdfdGJsKTsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5ODcyLCAiCisJCQkgICAgInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOworCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAorCQkJCQkgc3RhYzk4NzJfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKKworCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTg3Ml9waW5fbmlkcyk7CisJc3BlYy0+cGluX25pZHMgPSBzdGFjOTg3Ml9waW5fbmlkczsKKwlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOworCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTg3Ml9hZGNfbmlkcyk7CisJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTg3Ml9hZGNfbmlkczsKKwlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5ODcyX211eF9uaWRzKTsKKwlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5ODcyX211eF9uaWRzOworCXNwZWMtPm1peGVyID0gc3RhYzk4NzJfbWl4ZXI7CisJc3BlYy0+aW5pdCA9IHN0YWM5ODcyX2NvcmVfaW5pdDsKKworCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDEwLCAweDEyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYzc2MTM5NC4uYjI1YTVjYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC0xMzA4LDE2ICsxMzA4LDEzIEBACiAJdW5zaWduZWQgaW50IGRlZl9jb25mOwogCXVuc2lnbmVkIGNoYXIgc2VxYXNzb2M7CiAKLQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlzZXFhc3NvYyA9ICh1bnNpZ25lZCBjaGFyKSBnZXRfZGVmY2ZnX2Fzc29jaWF0aW9uKGRlZl9jb25mKTsKIAlzZXFhc3NvYyA9IChzZXFhc3NvYyA8PCA0KSB8IGdldF9kZWZjZmdfc2VxdWVuY2UoZGVmX2NvbmYpOwogCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKSB7CiAJCWlmIChzZXFhc3NvYyA9PSAweGZmKSB7CiAJCQlkZWZfY29uZiA9IGRlZl9jb25mICYgKH4oQUNfSkFDS19QT1JUX0JPVEggPDwgMzApKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsCi0JCQkJCSAgICBkZWZfY29uZiA+PiAyNCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIG5pZCwgZGVmX2NvbmYpOwogCQl9CiAJfQogCkBAIC0xMzU0LDcgKzEzNTEsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4X0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOF9ESUdJTl9OSUQ7CkBAIC0xODI3LDcgKzE4MjQsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA5X0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOV9ESUdJTl9OSUQ7CkBAIC0yMzcxLDcgKzIzNjgsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4Ql9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDhCX0RJR0lOX05JRDsKQEAgLTI4MzYsNyArMjgzMyw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDhTX0RJR09VVF9OSUQ7CiAKIAlzcGVjLT5leHRyYV9kaWdfb3V0X25pZCA9IDB4MTU7CkBAIC0zMTU1LDcgKzMxNTIsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzAyX0RJR09VVF9OSUQ7CiAKIAlzcGVjLT5leHRyYV9kaWdfb3V0X25pZCA9IDB4MUI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggNThkN2NkYS4uM2RkNjNmMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJCQl1MTYgcGJrc3RhdHVzOwogCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCQlwYmtzdGF0dXMgPSBpbncoSUNFRFMoaWNlLCBJTlRTVEFUKSk7Ci0JCQkvKiBwcmludGsoInBia3N0YXR1cyA9IDB4JXhcbiIsIHBia3N0YXR1cyk7ICovCisJCQkvKiBwcmludGsoS0VSTl9ERUJVRyAicGJrc3RhdHVzID0gMHgleFxuIiwgcGJrc3RhdHVzKTsgKi8KIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNjsgaWR4KyspIHsKIAkJCQlpZiAoKHBia3N0YXR1cyAmICgzIDw8IChpZHggKiAyKSkpID09IDApCiAJCQkJCWNvbnRpbnVlOwpAQCAtMjY0OCw5ICsyNjQ4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSUNFMTcxMiIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJQ0Vuc2VtYmxlIElDRTE3MTIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBiYjhkOGM3Li4xMjg1MTBlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtMjQxLDYgKzI0MSw4IEBACiAJCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdTggZmxhZywgaW50IGVuYWJsZSk7CisKIHN0YXRpYyB2b2lkIHZ0MTcyNF9taWRpX3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnM7CkBAIC0yNTQsNiArMjU2LDExIEBACiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQogCQkJb3V0YihidWZmZXJbaV0sIElDRVJFRzE3MjQoaWNlLCBNUFVfREFUQSkpOwogCX0KKwkvKiBtYXNrIGlycSB3aGVuIGFsbCBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisJICogZW5hYmxlZCBhZ2FpbiBpbiBvdXRwdXRfdHJpZ2dlciB3aGVuIHRoZSBuZXcgZGF0YSBjb21lcyBpbi4KKwkgKi8KKwllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwKKwkJCSFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eShzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZ0MTcyNF9taWRpX3JlYWQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCkBAIC0yNzIsMzEgKzI3OSwzNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdnQxNzI0X2VuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICAgdTggZmxhZywgaW50IGVuYWJsZSkKKy8qIGNhbGwgd2l0aCBpY2UtPnJlZ19sb2NrICovCitzdGF0aWMgdm9pZCBlbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHU4IGZsYWcsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7Ci0JdTggbWFzazsKLQotCXNwaW5fbG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwotCW1hc2sgPSBpbmIoSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKKwl1OCBtYXNrID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CiAJaWYgKGVuYWJsZSkKIAkJbWFzayAmPSB+ZmxhZzsKIAllbHNlCiAJCW1hc2sgfD0gZmxhZzsKIAlvdXRiKG1hc2ssIElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZ0MTcyNF9lbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgIHU4IGZsYWcsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKKwllbmFibGVfbWlkaV9pcnEoaWNlLCBmbGFnLCBlbmFibGUpOwogCXNwaW5fdW5sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdnQxNzI0X21pZGlfb3V0cHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqcykKIHsKLQl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2dDE3MjRfbWlkaV9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqcykKIHsKLQl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzExLDYgKzMyMSw3IEBACiAJCXZ0MTcyNF9taWRpX3dyaXRlKGljZSk7CiAJfSBlbHNlIHsKIAkJaWNlLT5taWRpX291dHB1dCA9IDA7CisJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwogfQpAQCAtMzIwLDYgKzMzMSw3IEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAorCXZ0MTcyNF9lbmFibGVfbWlkaV9pcnEocywgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCS8qIDMyIGJ5dGVzIHNob3VsZCBiZSB0cmFuc21pdHRlZCBpbiBsZXNzIHRoYW4gYWJvdXQgMTIgbXMgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUpOwogCWRvIHsKQEAgLTM4OSwyNCArNDAxLDI0IEBACiAJCXN0YXR1cyAmPSBzdGF0dXNfbWFzazsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJYnJlYWs7CisJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWlmICgrK3RpbWVvdXQgPiAxMCkgewogCQkJc3RhdHVzID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFTVEFUKSk7CiAJCQlwcmludGsoS0VSTl9FUlIgImljZTE3MjQ6IFRvbyBsb25nIGlycSBsb29wLCAiCiAJCQkgICAgICAgInN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAJCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfVFgpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgImljZTE3MjQ6IERpc2FibGluZyBNUFVfVFhcbiIpOwotCQkJCW91dGIoaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSkgfAotCQkJCSAgICAgVlQxNzI0X0lSUV9NUFVfVFgsCi0JCQkJICAgICBJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOworCQkJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkJCX0KKwkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJCWJyZWFrOwogCQl9CiAJCWhhbmRsZWQgPSAxOwogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfVFgpIHsKLQkJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlpZiAoaWNlLT5taWRpX291dHB1dCkKIAkJCQl2dDE3MjRfbWlkaV93cml0ZShpY2UpOwotCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOworCQkJZWxzZQorCQkJCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkJCS8qIER1ZSB0byBteXN0ZXJpY2FsIHJlYXNvbnMsIE1QVV9UWCBpcyBhbHdheXMKIAkJCSAqIGdlbmVyYXRlZCAoYW5kIGNhbid0IGJlIGNsZWFyZWQpIHdoZW4gYSBQQ00KIAkJCSAqIHBsYXliYWNrIGlzIGdvaW5nLiAgU28gbGV0J3MgaWdub3JlIGF0IHRoZQpAQCAtNDE1LDE1ICs0MjcsMTQgQEAKIAkJCXN0YXR1c19tYXNrICY9IH5WVDE3MjRfSVJRX01QVV9UWDsKIAkJfQogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NUFVfUlgpIHsKLQkJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlpZiAoaWNlLT5taWRpX2lucHV0KQogCQkJCXZ0MTcyNF9taWRpX3JlYWQoaWNlKTsKIAkJCWVsc2UKIAkJCQl2dDE3MjRfbWlkaV9jbGVhcl9yeChpY2UpOwotCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOwogCQl9CiAJCS8qIGFjayBNUFUgaXJxICovCiAJCW91dGIoc3RhdHVzLCBJQ0VSRUcxNzI0KGljZSwgSVJRU1RBVCkpOworCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWlmIChzdGF0dXMgJiBWVDE3MjRfSVJRX01UUENNKSB7CiAJCQkvKgogCQkJICogTXVsdGktdHJhY2sgUENNCkBAIC03NDUsNyArNzU2LDE0IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwogCi0JLyogcHJpbnRrKCJwcm8gcHJlcGFyZTogY2ggPSAlZCwgYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JXgsIHBlcmlvZCA9IDB4JXhcbiIsIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMsICh1bnNpZ25lZCBpbnQpc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksIHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcm8gcHJlcGFyZTogY2ggPSAlZCwgYWRkciA9IDB4JXgsICIKKwkgICAgICAgImJ1ZmZlciA9IDB4JXgsIHBlcmlvZCA9IDB4JXhcbiIsCisJICAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMsCisJICAgICAgICh1bnNpZ25lZCBpbnQpc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwKKwkgICAgICAgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJICAgICAgIHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsKKwkqLwogCXJldHVybiAwOwogfQogCkBAIC0yMTIyLDcgKzIxNDAsOSBAQAogCXdhaXRfaTJjX2J1c3koaWNlKTsKIAl2YWwgPSBpbmIoSUNFUkVHMTcyNChpY2UsIEkyQ19EQVRBKSk7CiAJbXV0ZXhfdW5sb2NrKCZpY2UtPmkyY19tdXRleCk7Ci0JLyogcHJpbnRrKCJpMmNfcmVhZDogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIHZhbCk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3JlYWQ6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCB2YWwpOworCSovCiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMjEzMSw3ICsyMTUxLDkgQEAKIHsKIAltdXRleF9sb2NrKCZpY2UtPmkyY19tdXRleCk7CiAJd2FpdF9pMmNfYnVzeShpY2UpOwotCS8qIHByaW50aygiaTJjX3dyaXRlOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgZGF0YSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3dyaXRlOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgZGF0YSk7CisJKi8KIAlvdXRiKGFkZHIsIElDRVJFRzE3MjQoaWNlLCBJMkNfQllURV9BRERSKSk7CiAJb3V0YihkYXRhLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0RBVEEpKTsKIAlvdXRiKGRldiB8IFZUMTcyNF9JMkNfV1JJVEUsIElDRVJFRzE3MjQoaWNlLCBJMkNfREVWX0FERFIpKTsKQEAgLTI0NTYsOSArMjQ3OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDRTE3MjQiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSUNFbnNlbWJsZSBJQ0UxNzI0Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKaW5kZXggYzUxNjU5Yi4uZmQ5NDhiZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYwpAQCAtMzQ1LDggKzM0NSw5IEBACiAJCQluZXdfZ3BpbyA9ICBvbGRfZ3BpbyAmCiAJCQkJfigodW5zaWduZWQgaW50KSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CiAJfQotCS8qIHByaW50aygiSlVMSSAtIG11dGUvdW5tdXRlOiBjb250cm9sX3ZhbHVlOiAweCV4LCBvbGRfZ3BpbzogMHgleCwgXAotCQluZXdfZ3BpbyAweCV4XG4iLAorCS8qIHByaW50ayhLRVJOX0RFQlVHCisJCSJKVUxJIC0gbXV0ZS91bm11dGU6IGNvbnRyb2xfdmFsdWU6IDB4JXgsIG9sZF9ncGlvOiAweCV4LCAiCisJCSJuZXdfZ3BpbyAweCV4XG4iLAogCQkodW5zaWduZWQgaW50KXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdLCBvbGRfZ3BpbywKIAkJbmV3X2dwaW8pOyAqLwogCWlmIChvbGRfZ3BpbyAhPSBuZXdfZ3BpbykgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCmluZGV4IDQ4ZDM2NzkuLjJhOGU1Y2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKQEAgLTEzMyw4ICsxMzMsMTAgQEAKIAkJaWR4ICA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpICsgU1RBQzk0NlhfTEZfVk9MVU1FOwogCS8qIGR1ZSB0byBwb3NzaWJsZSBjb25mbGljdHMgd2l0aCBzdGFjOTQ2MF9zZXRfcmF0ZV92YWwsIG11dGV4aW5nICovCiAJbXV0ZXhfbG9jaygmc3BlYy0+bXV0ZV9tdXRleCk7Ci0JLypwcmludGsoIk11dGUgcHV0OiByZWcgMHglMDJ4LCBjdHJsIHZhbHVlOiAweCUwMnhcbiIsIGlkeCwKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOyovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiTXV0ZSBwdXQ6IHJlZyAweCUwMngsIGN0cmwgdmFsdWU6IDB4JTAyeFxuIiwgaWR4LAorCSAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJKi8KIAljaGFuZ2UgPSBzdGFjOTQ2MF9kYWNfbXV0ZShpY2UsIGlkeCwgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogCW11dGV4X3VubG9jaygmc3BlYy0+bXV0ZV9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTE4NSw3ICsxODcsMTAgQEAKIAljaGFuZ2UgPSAob3ZvbCAhPSBudm9sKTsKIAlpZiAoY2hhbmdlKSB7CiAJCW92b2wgPSAgKDB4N2YgLSBudm9sKSB8ICh0bXAgJiAweDgwKTsKLQkJLypwcmludGsoIkRBQyBWb2x1bWU6IHJlZyAweCUwMng6IDB4JTAyeFxuIiwgaWR4LCBvdm9sKTsqLworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiREFDIFZvbHVtZTogcmVnIDB4JTAyeDogMHglMDJ4XG4iLAorCQkgICAgICAgaWR4LCBvdm9sKTsKKwkJKi8KIAkJc3RhYzk0NjBfcHV0KGljZSwgaWR4LCAoMHg3ZiAtIG52b2wpIHwgKHRtcCAmIDB4ODApKTsKIAl9CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTM0NCw3ICszNDksNyBAQAogCWZvciAoaWR4ID0gMDsgaWR4IDwgNyA7ICsraWR4KQogCQljaGFuZ2VkW2lkeF0gPSBzdGFjOTQ2MF9kYWNfbXV0ZShpY2UsCiAJCQkJU1RBQzk0NlhfTUFTVEVSX1ZPTFVNRSArIGlkeCwgMCk7Ci0JLypwcmludGsoIlJhdGUgY2hhbmdlOiAlZCwgbmV3IE1DOiAweCUwMnhcbiIsIHJhdGUsIG5ldyk7Ki8KKwkvKnByaW50ayhLRVJOX0RFQlVHICJSYXRlIGNoYW5nZTogJWQsIG5ldyBNQzogMHglMDJ4XG4iLCByYXRlLCBuZXcpOyovCiAJc3RhYzk0NjBfcHV0KGljZSwgU1RBQzk0NlhfTUFTVEVSX0NMT0NLSU5HLCBuZXcpOwogCXVkZWxheSgxMCk7CiAJLyogdW5tdXRpbmcgLSBvbmx5IG9yaWdpbmFsbHkgdW5tdXRlZCBkYWNzIC0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggZTkwMGNkYy4uNTc2NDg4MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTY4OSw3ICs2ODksNyBAQAogCQkJYmRiYXJbaWR4ICsgMV0gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwIHwgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KIAkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZSA+PiBpY2hkZXYtPnBvc19zaGlmdCk7CiAjaWYgMAotCQkJcHJpbnRrKCJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKIAkJCSAgICAgICBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOwogI2VuZGlmCiAJCX0KQEAgLTcwMSw4ICs3MDEsMTAgQEAKIAlpY2hkZXYtPmx2aV9mcmFnID0gSUNIX1JFR19MVklfTUFTSyAlIGljaGRldi0+ZnJhZ3M7CiAJaWNoZGV2LT5wb3NpdGlvbiA9IDA7CiAjaWYgMAotCXByaW50aygibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAotCQkJaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwgaWNoZGV2LT5mcmFnc2l6ZTEpOworCXByaW50ayhLRVJOX0RFQlVHICJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsICIKKwkgICAgICAgInBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCisJICAgICAgIGljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsCisJICAgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNlbmRpZgogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KIAlpcHV0Ynl0ZShjaGlwLCBwb3J0ICsgaWNoZGV2LT5yb2ZmX3NyLCBJQ0hfRklGT0UgfCBJQ0hfQkNJUyB8IElDSF9MVkJDSSk7CkBAIC03NjgsNyArNzcwLDggQEAKIAkJaWNoZGV2LT5sdmlfZnJhZyAlPSBpY2hkZXYtPmZyYWdzOwogCQlpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMl0gPSBjcHVfdG9fbGUzMihpY2hkZXYtPnBoeXNidWYgKyBpY2hkZXYtPmx2aV9mcmFnICogaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2lmIDAKLQlwcmludGsoIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksICIKKwkgICAgICAgImFsbCA9IDB4JXgsIDB4JXhcbiIsCiAJICAgICAgIGljaGRldi0+bHZpICogMiwgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDJdLAogCSAgICAgICBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMiArIDFdLCBpbmIoSUNIX1JFR19PRkZfUElWICsgcG9ydCksCiAJICAgICAgIGlubChwb3J0ICsgNCksIGluYihwb3J0ICsgSUNIX1JFR19PRkZfQ1IpKTsKQEAgLTIyODcsMjMgKzIyOTAsMjMgQEAKIAlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEFMSV9JTlRFUlJVUFRTUiksIDB4MDAwMDAwMDApOwogfQogCi1zdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9pbml0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgaW50IHByb2JpbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKLQl1bnNpZ25lZCBpbnQgY250LCBzdGF0dXMsIG5zdGF0dXM7Ci0JCi0JLyogcHV0IGxvZ2ljIHRvIHJpZ2h0IHN0YXRlICovCi0JLyogZmlyc3QgY2xlYXIgc3RhdHVzIGJpdHMgKi8KLQlzdGF0dXMgPSBJQ0hfUkNTIHwgSUNIX01DSU5UIHwgSUNIX1BPSU5UIHwgSUNIX1BJSU5UOwotCWlmIChjaGlwLT5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfTkZPUkNFKQotCQlzdGF0dXMgfD0gSUNIX05WU1BJTlQ7Ci0JY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpOwotCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpLCBjbnQgJiBzdGF0dXMpOworI2lmZGVmIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgaWNoX2NoaXBfcmVzZXRfbW9kZVtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1MWYsICJUaGlua3BhZCBSMzIiLCAxKSwKKwl7IH0gLyogZW5kICovCit9OwogCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OwogCS8qIEFDTGluayBvbiwgMiBjaGFubmVscyAqLworCisJaWYgKHNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgaWNoX2NoaXBfcmVzZXRfbW9kZSkpCisJCXJldHVybiAtRUlPOworCiAJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpOwogCWNudCAmPSB+KElDSF9BQ0xJTksgfCBJQ0hfUENNXzI0Nl9NQVNLKTsKLSNpZmRlZiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRQorCiAJLyogZG8gY29sZCByZXNldCAtIHRoZSBmdWxsIGFjOTcgcG93ZXJkb3duIG1heSBsZWF2ZSB0aGUgY29udHJvbGxlcgogCSAqIGluIGEgd2FybSBzdGF0ZSBidXQgYWN0dWFsbHkgaXQgY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIGNvZGVjLgogCSAqLwpAQCAtMjMxMiwyMiArMjMxNSw1OCBAQAogCXVkZWxheSgxMCk7CiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCksIGNudCB8IElDSF9BQzk3Q09MRCk7CiAJbXNsZWVwKDEpOworCXJldHVybiAwOworfQorI2RlZmluZSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkgXAorCSghc25kX3BjaV9xdWlya19sb29rdXAoY2hpcC0+cGNpLCBpY2hfY2hpcF9yZXNldF9tb2RlKSkKICNlbHNlCisjZGVmaW5lIHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KGNoaXApCTAKKyNkZWZpbmUgc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX2ludGVsOHgwX2ljaF9jaGlwX3Jlc2V0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lOworCXVuc2lnbmVkIGludCBjbnQ7CisJLyogQUNMaW5rIG9uLCAyIGNoYW5uZWxzICovCisJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpOworCWNudCAmPSB+KElDSF9BQ0xJTksgfCBJQ0hfUENNXzI0Nl9NQVNLKTsKIAkvKiBmaW5pc2ggY29sZCBvciBkbyB3YXJtIHJlc2V0ICovCiAJY250IHw9IChjbnQgJiBJQ0hfQUM5N0NPTEQpID09IDAgPyBJQ0hfQUM5N0NPTEQgOiBJQ0hfQUM5N1dBUk07CiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCksIGNudCk7CiAJZW5kX3RpbWUgPSAoamlmZmllcyArIChIWiAvIDQpKSArIDE7CiAJZG8gewogCQlpZiAoKGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKSAmIElDSF9BQzk3V0FSTSkgPT0gMCkKLQkJCWdvdG8gX19vazsKKwkJCXJldHVybiAwOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiQUMnOTcgd2FybSByZXNldCBzdGlsbCBpbiBwcm9ncmVzcz8gWzB4JXhdXG4iLAogCQkgICBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSkpOwogCXJldHVybiAtRUlPOworfQogCi0gICAgICBfX29rOgotI2VuZGlmCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9pbml0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgaW50IHByb2JpbmcpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBuc3RhdHVzOworCXVuc2lnbmVkIGludCBjbnQ7CisJaW50IGVycjsKKworCS8qIHB1dCBsb2dpYyB0byByaWdodCBzdGF0ZSAqLworCS8qIGZpcnN0IGNsZWFyIHN0YXR1cyBiaXRzICovCisJc3RhdHVzID0gSUNIX1JDUyB8IElDSF9NQ0lOVCB8IElDSF9QT0lOVCB8IElDSF9QSUlOVDsKKwlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX05GT1JDRSkKKwkJc3RhdHVzIHw9IElDSF9OVlNQSU5UOworCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKTsKKwlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSwgY250ICYgc3RhdHVzKTsKKworCWlmIChzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkpCisJCWVyciA9IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jb2xkX3Jlc2V0KGNoaXApOworCWVsc2UKKwkJZXJyID0gc25kX2ludGVsOHgwX2ljaF9jaGlwX3Jlc2V0KGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKHByb2JpbmcpIHsKIAkJLyogd2FpdCBmb3IgYW55IGNvZGVjIHJlYWR5IHN0YXR1cy4KIAkJICogT25jZSBpdCBiZWNvbWVzIHJlYWR5IGl0IHNob3VsZCByZW1haW4gcmVhZHkKQEAgLTMwNTgsOSArMzA5Nyw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2hvcnRuYW1lX3RhYmxlICpuYW1lOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKHNwZGlmX2FjbGluayA8IDApCiAJCXNwZGlmX2FjbGluayA9IGNoZWNrX2RlZmF1bHRfc3BkaWZfYWNsaW5rKHBjaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggOTM0NDllNC4uNmVjMGZjNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtNDExLDcgKzQxMSwxMCBAQAogCQkJYmRiYXJbaWR4ICsgMF0gPSBjcHVfdG9fbGUzMihpY2hkZXYtPnBoeXNidWYgKyAoKChpZHggPj4gMSkgKiBpY2hkZXYtPmZyYWdzaXplKSAlIGljaGRldi0+c2l6ZSkpOwogCQkJYmRiYXJbaWR4ICsgMV0gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwIHwgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KIAkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZSA+PiBjaGlwLT5wY21fcG9zX3NoaWZ0KTsKLQkJCS8vIHByaW50aygiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLAorCQkJICAgICAgIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CisJCQkqLwogCQl9CiAJCWljaGRldi0+ZnJhZ3MgPSBpY2hkZXYtPnNpemUgLyBpY2hkZXYtPmZyYWdzaXplOwogCX0KQEAgLTQyMSw4ICs0MjQsMTAgQEAKIAlpY2hkZXYtPmx2aV9mcmFnID0gSUNIX1JFR19MVklfTUFTSyAlIGljaGRldi0+ZnJhZ3M7CiAJaWNoZGV2LT5wb3NpdGlvbiA9IDA7CiAjaWYgMAotCXByaW50aygibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAotCQkJaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwgaWNoZGV2LT5mcmFnc2l6ZTEpOworCXByaW50ayhLRVJOX0RFQlVHICJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsICIKKwkgICAgICAgInBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCisJICAgICAgIGljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsCisJICAgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNlbmRpZgogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KIAlpcHV0Ynl0ZShjaGlwLCBwb3J0ICsgaWNoZGV2LT5yb2ZmX3NyLCBJQ0hfRklGT0UgfCBJQ0hfQkNJUyB8IElDSF9MVkJDSSk7CkBAIC00NjUsNyArNDcwLDggQEAKIAkJCQkJCQkgICAgIGljaGRldi0+bHZpX2ZyYWcgKgogCQkJCQkJCSAgICAgaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2lmIDAKLQkJcHJpbnRrKCJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgIgorCQkgICAgICAgInByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCiAJCSAgICAgICBpY2hkZXYtPmx2aSAqIDIsIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyXSwKIAkJICAgICAgIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyICsgMV0sIGluYihJQ0hfUkVHX09GRl9QSVYgKyBwb3J0KSwKIAkJICAgICAgIGlubChwb3J0ICsgNCksIGluYihwb3J0ICsgSUNIX1JFR19PRkZfQ1IpKTsKQEAgLTEyNjksOSArMTI3NSw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2hvcnRuYW1lX3RhYmxlICpuYW1lOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDSC1NT0RFTSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJbnRlbCBJQ0giKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKaW5kZXggNWY4MDA2Yi4uOGI3OTk2OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKKysrIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKQEAgLTI0NDMsOSArMjQ0Myw5IEBACiAJCWRldisrOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0gICAgICAgIGlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAgICAgICAgIGlmICgoZXJyID0gc25kX2tvcmcxMjEyX2NyZWF0ZShjYXJkLCBwY2ksICZrb3JnMTIxMikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA1OWJiYWY4Li43MDE0MTU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMjY5MSw5ICsyNjkxLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggZjIzYTczNS4uYzFlYjg0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC02MDcsNiArNjA3LDcgQEAKIAkvKiBzZXQgdGhlIGZvcm1hdCB0byB0aGUgYm9hcmQgKi8KIAllcnIgPSBtaXhhcnRfc2V0X2Zvcm1hdChzdHJlYW0sIGZvcm1hdCk7CiAJaWYoZXJyIDwgMCkgeworCQltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTM2NSwxMiArMTM2NiwxMiBAQAogCQllbHNlCiAJCQlpZHggPSBpbmRleFtkZXZdICsgaTsKIAkJc25wcmludGYodG1waWQsIHNpemVvZih0bXBpZCksICIlcy0lZCIsIGlkW2Rldl0gPyBpZFtkZXZdIDogIk1JWEFSVCIsIGkpOwotCQljYXJkID0gc25kX2NhcmRfbmV3KGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwKTsKKwkJZXJyID0gc25kX2NhcmRfY3JlYXRlKGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQkJaWYgKCEgY2FyZCkgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHRoZSBjYXJkICVkXG4iLCBpKTsKIAkJCXNuZF9taXhhcnRfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgQ0FSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCmluZGV4IDM3ODJiNTIuLjRjZjRjZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYwpAQCAtMzQ1LDggKzM0NSw4IEBACiAJc3RhdHVzX2RhdWdodCA9IHJlYWRsX2JlKCBNSVhBUlRfTUVNKCBtZ3IsTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQgKSk7CiAKIAkvKiBtb3RoZXJib2FyZCB4aWxpbnggc3RhdHVzIDUgd2lsbCBzYXkgdGhhdCB0aGUgYm9hcmQgaXMgcGVyZm9ybWluZyBhIHJlc2V0ICovCi0JaWYoIHN0YXR1c194aWxpbnggPT0gNSApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgIm1pWGFydCBpcyByZXNldHRpbmcgIVxuIik7CisJaWYgKHN0YXR1c194aWxpbnggPT0gNSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtaVhhcnQgaXMgcmVzZXR0aW5nICFcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluIGxhdGVyICovCiAJfQogCkBAIC0zNTQsMTMgKzM1NCwxNCBAQAogCWNhc2UgTUlYQVJUX01PVEhFUkJPQVJEX1hMWF9JTkRFWDoKIAogCQkvKiB4aWxpbnggYWxyZWFkeSBsb2FkZWQgPyAqLyAKLQkJaWYoIHN0YXR1c194aWxpbnggPT0gNCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fREVCVUcgInhpbGlueCBpcyBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKKwkJaWYgKHN0YXR1c194aWxpbnggPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJ4aWxpbnggaXMgYWxyZWFkeSBsb2FkZWQgIVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKiB0aGUgc3RhdHVzIHNob3VsZCBiZSAwID09ICJpZGxlIiAqLwotCQlpZiggc3RhdHVzX3hpbGlueCAhPSAwICkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgInhpbGlueCBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c194aWxpbngpOworCQlpZiAoc3RhdHVzX3hpbGlueCAhPSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgIHN0YXR1c194aWxpbngpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKQEAgLTM4OSwyMSArMzkwLDIzIEBACiAKIAljYXNlIE1JWEFSVF9NT1RIRVJCT0FSRF9FTEZfSU5ERVg6CiAKLQkJaWYoIHN0YXR1c19lbGYgPT0gNCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fREVCVUcgImVsZiBmaWxlIGFscmVhZHkgbG9hZGVkICFcbiIpOworCQlpZiAoc3RhdHVzX2VsZiA9PSA0KSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVsZiBmaWxlIGFscmVhZHkgbG9hZGVkICFcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQkvKiB0aGUgc3RhdHVzIHNob3VsZCBiZSAwID09ICJpZGxlIiAqLwotCQlpZiggc3RhdHVzX2VsZiAhPSAwICkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVsZiBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c19lbGYpOworCQlpZiAoc3RhdHVzX2VsZiAhPSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlbGYgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgIHN0YXR1c19lbGYpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKIAkJLyogd2FpdCBmb3IgeGlsaW54IHN0YXR1cyA9PSA0ICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfTVhMWF9TVEFUVVNfT0ZGU0VULCAxLCA0LCA1MDApOyAvKiA1c2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IHdhcyBub3QgbG9hZGVkIG9yIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInhpbGlueCB3YXMgbm90IGxvYWRlZCBvciAiCisJCQkJICAgImNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDI0LDcgKzQyNyw3IEBACiAJCS8qIHdhaXQgZm9yIGVsZiBzdGF0dXMgPT0gNCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0VMRl9TVEFUVVNfT0ZGU0VULCAxLCA0LCAzMDApOyAvKiAzc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZWxmIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVsZiBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQzNywxNSArNDQwLDE2IEBACiAJZGVmYXVsdDoKIAogCQkvKiBlbGYgYW5kIHhpbGlueCBzaG91bGQgYmUgbG9hZGVkICovCi0JCWlmKCAoc3RhdHVzX2VsZiAhPSA0KSB8fCAoc3RhdHVzX3hpbGlueCAhPSA0KSApIHsKLQkJCXByaW50ayggS0VSTl9FUlIgInhpbGlueCBvciBlbGYgbm90IHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOworCQlpZiAoc3RhdHVzX2VsZiAhPSA0IHx8IHN0YXR1c194aWxpbnggIT0gNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggb3IgZWxmIG5vdCAiCisJCQkgICAgICAgInN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKIAkJLyogd2FpdCBmb3IgZGF1Z2h0ZXIgZGV0ZWN0aW9uICE9IDAgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EQlJEX1BSRVNFTkNFX09GRlNFVCwgMCwgMCwgMzApOyAvKiAzMDBtc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZXJyb3Igc3RhcnRpbmcgZWxmIGZpbGVcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3Igc3RhcnRpbmcgZWxmIGZpbGVcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00NjAsOCArNDY0LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCS8qIGRhdWdodGVyIHNob3VsZCBiZSBpZGxlICovCi0JCWlmKCBzdGF0dXNfZGF1Z2h0ICE9IDAgKSB7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c19kYXVnaHQpOworCQlpZiAoc3RhdHVzX2RhdWdodCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImRhdWdodGVyIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCSAgICAgICBzdGF0dXNfZGF1Z2h0KTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogIApAQCAtNDgwLDcgKzQ4NSw3IEBACiAJCS8qIHdhaXQgZm9yIHN0YXR1cyA9PSAyICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VULCAxLCAyLCAzMCk7IC8qIDMwMG1zZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBsb2FkIGVycm9yXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGxvYWQgZXJyb3JcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC01MDIsNyArNTA3LDggQEAKICAgICAgICAgLyogd2FpdCBmb3IgZGF1Z2h0ZXIgc3RhdHVzID09IDMgKi8KICAgICAgICAgZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQsIDEsIDMsIDMwMCk7IC8qIDNzZWMgKi8KICAgICAgICAgaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGNvdWxkIG5vdCBiZSBpbml0aWFsaXNlZFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJkYXVnaHRlciBib2FyZCBjb3VsZCBub3QgYmUgaW5pdGlhbGlzZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTEyLDcgKzUxOCw3IEBACiAJLyogZmlyc3QgY29tbXVuaWNhdGlvbiB3aXRoIGVtYmVkZGVkICovCiAJZXJyID0gbWl4YXJ0X2ZpcnN0X2luaXQobWdyKTsKICAgICAgICAgaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgIm1pWGFydCBjb3VsZCBub3QgYmUgc2V0IHVwXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibWlYYXJ0IGNvdWxkIG5vdCBiZSBzZXQgdXBcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTgxLDE2ICs1ODcsNiBAQAogLyogbWlYYXJ0IGh3ZGVwIGludGVyZmFjZSBpZCBzdHJpbmcgKi8KICNkZWZpbmUgU05EX01JWEFSVF9IV0RFUF9JRCAgICAgICAibWlYYXJ0IExvYWRlciIKIAotc3RhdGljIGludCBtaXhhcnRfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1peGFydF9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJCSAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTY0Myw4ICs2MzksNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfTUlYQVJUOwogCWh3LT5wcml2YXRlX2RhdGEgPSBtZ3I7Ci0JaHctPm9wcy5vcGVuID0gbWl4YXJ0X2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gbWl4YXJ0X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gbWl4YXJ0X2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IG1peGFydF9od2RlcF9kc3BfbG9hZDsKIAlody0+ZXhjbHVzaXZlID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggNTBjOWY4YS4uNTIyYTA0MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTE2NjgsOSArMTY2OCw5IEBACiAJCX0KIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU86CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwppbmRleCAxYWI4MzNmLi44NGVmMTMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoaWZpZXJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTApIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzExKSB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhpZmllcl9pZHMpOwpAQCAtMTUxLDcgKzE1Miw2IEBACiAJLnNob3J0bmFtZSA9ICJDLU1lZGlhIENNSTg3ODciLAogCS5sb25nbmFtZSA9ICJDLU1lZGlhIE94eWdlbiBIRCBBdWRpbyIsCiAJLmNoaXAgPSAiQ01JODc4OCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmluaXQgPSBoaWZpZXJfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSBoaWZpZXJfY29udHJvbF9maWx0ZXIsCiAJLmNsZWFudXAgPSBoaWZpZXJfY2xlYW51cCwKQEAgLTE3Myw2ICsxNzMsMTMgQEAKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF9oaWZpZXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJY2hpcC0+bW9kZWwgPSBtb2RlbF9oaWZpZXI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhpZmllcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKQEAgLTE4NSw3ICsxOTIsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCAmbW9kZWxfaGlmaWVyLCAwKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgaGlmaWVyX2lkcywgZ2V0X2hpZmllcl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKaW5kZXggZGU5OTljNi4uNzJkYjRjMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEMtTWVkaWEgQ01JODc4OCBkcml2ZXIgZm9yIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduIGFuZCBmb3IgdGhlIFgtTWVyaWRpYW4KKyAqIEMtTWVkaWEgQ01JODc4OCBkcml2ZXIgZm9yIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduIGFuZCBzaW1pbGFyIG1vZGVscwogICoKICAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiAgKgpAQCAtMjYsNiArMjYsNyBAQAogICoKICAqIEdQSU8gMCAtPiBERlMwIG9mIEFLNTM4NQogICogR1BJTyAxIC0+IERGUzEgb2YgQUs1Mzg1CisgKiBHUElPIDggLT4gZW5hYmxlIGhlYWRwaG9uZSBhbXBsaWZpZXIgb24gSFQtT21lZ2EgbW9kZWxzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02MSw3ICs2Miw4IEBACiBlbnVtIHsKIAlNT0RFTF9DTUVESUFfUkVGLAkvKiBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiAqLwogCU1PREVMX01FUklESUFOLAkJLyogQXV6ZW5UZWNoIFgtTWVyaWRpYW4gKi8KLQlNT0RFTF9IQUxPLAkJLyogSFQtT21lZ2EgQ2xhcm8gaGFsbyAqLworCU1PREVMX0NMQVJPLAkJLyogSFQtT21lZ2EgQ2xhcm8gKi8KKwlNT0RFTF9DTEFST19IQUxPLAkvKiBIVC1PbWVnYSBDbGFybyBoYWxvICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3h5Z2VuX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC03NCw4ICs3Niw4IEBACiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTQ3YSwgMHhhMDE3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDFhNTgsIDB4MDkxMCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg0MTVhLCAweDU0MzEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9NRVJJRElBTiB9LAotCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc2MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKLQl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9IQUxPIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzYxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ0xBUk8gfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFST19IQUxPIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG94eWdlbl9pZHMpOwpAQCAtODYsNiArODgsOCBAQAogI2RlZmluZSBHUElPX0FLNTM4NV9ERlNfRE9VQkxFCTB4MDAwMQogI2RlZmluZSBHUElPX0FLNTM4NV9ERlNfUVVBRAkweDAwMDIKIAorI2RlZmluZSBHUElPX0NMQVJPX0hQCQkweDAxMDAKKwogc3RydWN0IGdlbmVyaWNfZGF0YSB7CiAJdTggYWs0Mzk2X2N0bDI7CiAJdTE2IHNhdmVkX3dtODc4NV9yZWdpc3RlcnNbMl07CkBAIC0xOTYsMTAgKzIwMCw0NiBAQAogCWFrNTM4NV9pbml0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCBjbGFyb19lbmFibGVfaHAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwltc2xlZXAoMzAwKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLCBHUElPX0NMQVJPX0hQKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0NMQVJPX0hQKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9pbml0KGNoaXApOworCXdtODc4NV9pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9faGFsb19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X2luaXQoY2hpcCk7CisJYWs1Mzg1X2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fZGlzYWJsZV9ocChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19DTEFST19IUCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwljbGFyb19kaXNhYmxlX2hwKGNoaXApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJY2xhcm9fZGlzYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgZ2VuZXJpY19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CkBAIC0yMTEsNiArMjUxLDEyIEBACiAJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCBjbGFyb19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBzZXRfYWs0Mzk2X3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC0yOTMsMzAgKzMzOSwxMCBAQAogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGFrNDM5Nl9kYl9zY2FsZSwgVExWX0RCX0dBSU5fTVVURSwgMCk7CiAKLXN0YXRpYyBpbnQgZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQotewotCWlmIChkcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTikgewotCQljaGlwLT5tb2RlbC5pbml0ID0gbWVyaWRpYW5faW5pdDsKLQkJY2hpcC0+bW9kZWwucmVzdW1lID0gbWVyaWRpYW5fcmVzdW1lOwotCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOwotCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAotCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRiB8Ci0JCQkJCSAgICBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8Ci0JCQkJCSAgICBDQVBUVVJFXzFfRlJPTV9TUERJRjsKLQl9Ci0JaWYgKGRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOIHx8IGRyaXZlcl9kYXRhID09IE1PREVMX0hBTE8pIHsKLQkJY2hpcC0+bW9kZWwubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREk7Ci0JCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gTUlESV9PVVRQVVQgfCBNSURJX0lOUFVUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfZ2VuZXJpYyA9IHsKIAkuc2hvcnRuYW1lID0gIkMtTWVkaWEgQ01JODc4OCIsCiAJLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlvIiwKIAkuY2hpcCA9ICJDTUk4Nzg4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSBnZW5lcmljX3Byb2JlLAogCS5pbml0ID0gZ2VuZXJpY19pbml0LAogCS5jbGVhbnVwID0gZ2VuZXJpY19jbGVhbnVwLAogCS5yZXN1bWUgPSBnZW5lcmljX3Jlc3VtZSwKQEAgLTM0MSw2ICszNjcsNDIgQEAKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF9veHlnZW5fbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJY2hpcC0+bW9kZWwgPSBtb2RlbF9nZW5lcmljOworCXN3aXRjaCAoaWQtPmRyaXZlcl9kYXRhKSB7CisJY2FzZSBNT0RFTF9NRVJJRElBTjoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IG1lcmlkaWFuX2luaXQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IG1lcmlkaWFuX3Jlc3VtZTsKKwkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCQkJICAgIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJCQkgICAgQ0FQVFVSRV8wX0ZST01fSTJTXzIgfAorCQkJCQkgICAgQ0FQVFVSRV8xX0ZST01fU1BESUY7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfQ0xBUk86CisJCWNoaXAtPm1vZGVsLmluaXQgPSBjbGFyb19pbml0OworCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKKwkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9DTEFST19IQUxPOgorCQljaGlwLT5tb2RlbC5pbml0ID0gY2xhcm9faGFsb19pbml0OworCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKKwkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKKwkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJYnJlYWs7CisJfQorCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4gfHwKKwkgICAgaWQtPmRyaXZlcl9kYXRhID09IE1PREVMX0NMQVJPX0hBTE8pIHsKKwkJY2hpcC0+bW9kZWwubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREk7CisJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gTUlESV9PVVRQVVQgfCBNSURJX0lOUFVUOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19veHlnZW5fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewpAQCAtMzUzLDggKzQxNSw4IEBACiAJCSsrZGV2OwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sCi0JCQkgICAgICAgJm1vZGVsX2dlbmVyaWMsIHBjaV9pZC0+ZHJpdmVyX2RhdGEpOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBveHlnZW5faWRzLCBnZXRfb3h5Z2VuX21vZGVsKTsKIAlpZiAoZXJyID49IDApCiAJCSsrZGV2OwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAppbmRleCAxOTEwN2M2Li5iZDYxNWRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKQEAgLTE4LDYgKzE4LDggQEAKIAogI2RlZmluZSBPWFlHRU5fSU9fU0laRQkweDEwMAogCisjZGVmaW5lIE9YWUdFTl9FRVBST01fSUQJMHg0MzRkCS8qICJDTSIgKi8KKwogLyogbW9kZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiBvdXRwdXRzL2lucHV0cyAqLwogI2RlZmluZSBQTEFZQkFDS18wX1RPX0kyUwkweDAwMDEKICAgICAgLyogUExBWUJBQ0tfMF9UT19BQzk3XzAJCW5vdCBpbXBsZW1lbnRlZCAqLwpAQCAtNDksNyArNTEsMTMgQEAKIAkuc3VidmVuZG9yID0gc3YsIFwKIAkuc3ViZGV2aWNlID0gc2QKIAorI2RlZmluZSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBICgodW5zaWduZWQgbG9uZyktMSkKKyNkZWZpbmUgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIFwKKwlPWFlHRU5fUENJX1NVQklEKFBDSV9WRU5ET1JfSURfQ01FRElBLCAweDg3ODgpLCBcCisJLmRyaXZlcl9kYXRhID0gQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQQorCiBzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBwY2lfZGV2aWNlX2lkOwogc3RydWN0IHNuZF9jYXJkOwogc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtOwogc3RydWN0IHNuZF9wY21faGFyZHdhcmU7CkBAIC02Miw4ICs3MCw2IEBACiAJY29uc3QgY2hhciAqc2hvcnRuYW1lOwogCWNvbnN0IGNoYXIgKmxvbmduYW1lOwogCWNvbnN0IGNoYXIgKmNoaXA7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JaW50ICgqcHJvYmUpKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpOwogCXZvaWQgKCppbml0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAlpbnQgKCpjb250cm9sX2ZpbHRlcikoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKTsKIAlpbnQgKCptaXhlcl9pbml0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKQEAgLTgzLDYgKzg5LDcgQEAKIAl2b2lkICgqYWM5N19zd2l0Y2gpKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IG11dGUpOwogCWNvbnN0IHVuc2lnbmVkIGludCAqZGFjX3RsdjsKKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfZGF0YTsKIAlzaXplX3QgbW9kZWxfZGF0YV9zaXplOwogCXVuc2lnbmVkIGludCBkZXZpY2VfY29uZmlnOwogCXU4IGRhY19jaGFubmVsczsKQEAgLTEzNCw4ICsxNDEsMTIgQEAKIC8qIG94eWdlbl9saWIuYyAqLwogCiBpbnQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkgICAgIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpOworCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCisJCSAgICAgaW50ICgqZ2V0X21vZGVsKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZAorCQkJCSAgICAgKQorCQkgICAgKTsKIHZvaWQgb3h5Z2VuX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSk7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgb3h5Z2VuX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CkBAIC0xODAsNiArMTkxLDkgQEAKIHZvaWQgb3h5Z2VuX3Jlc2V0X3VhcnQoc3RydWN0IG94eWdlbiAqY2hpcCk7CiB2b2lkIG94eWdlbl93cml0ZV91YXJ0KHN0cnVjdCBveHlnZW4gKmNoaXAsIHU4IGRhdGEpOwogCit1MTYgb3h5Z2VuX3JlYWRfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCk7Cit2b2lkIG94eWdlbl93cml0ZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdmFsdWUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgb3h5Z2VuX3NldF9iaXRzOChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCmluZGV4IDMxMjZjNGIuLmMxZWI5MjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwpAQCAtMjU0LDMgKzI1NCwzNCBAQAogCV93cml0ZV91YXJ0KGNoaXAsIDAsIGRhdGEpOwogfQogRVhQT1JUX1NZTUJPTChveHlnZW5fd3JpdGVfdWFydCk7CisKK3UxNiBveHlnZW5fcmVhZF9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJb3h5Z2VuX3dyaXRlOChjaGlwLCBPWFlHRU5fRUVQUk9NX0NPTlRST0wsCisJCSAgICAgIGluZGV4IHwgT1hZR0VOX0VFUFJPTV9ESVJfUkVBRCk7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMDsgKyt0aW1lb3V0KSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKCEob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9FRVBST01fU1RBVFVTKQorCQkgICAgICAmIE9YWUdFTl9FRVBST01fQlVTWSkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0VFUFJPTV9EQVRBKTsKK30KKwordm9pZCBveHlnZW5fd3JpdGVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHZhbHVlKQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0VFUFJPTV9EQVRBLCB2YWx1ZSk7CisJb3h5Z2VuX3dyaXRlOChjaGlwLCBPWFlHRU5fRUVQUk9NX0NPTlRST0wsCisJCSAgICAgIGluZGV4IHwgT1hZR0VOX0VFUFJPTV9ESVJfV1JJVEUpOworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDsgKyt0aW1lb3V0KSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCEob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9FRVBST01fU1RBVFVTKQorCQkgICAgICAmIE9YWUdFTl9FRVBST01fQlVTWSkpCisJCQlyZXR1cm47CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgIkVFUFJPTSB3cml0ZSB0aW1lb3V0XG4iKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKaW5kZXggODRmNDgxZC4uMzEyMjUxZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKQEAgLTM0LDYgKzM0LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQy1NZWRpYSBDTUk4Nzg4IGhlbHBlciBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiAKKyNkZWZpbmUgRFJJVkVSICJveHlnZW4iCiAKIHN0YXRpYyBpbmxpbmUgaW50IG94eWdlbl91YXJ0X2lucHV0X3JlYWR5KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CkBAIC0yNDMsNiArMjQ0LDYyIEBACiAjZGVmaW5lIG94eWdlbl9wcm9jX2luaXQoY2hpcCkKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKgorb3h5Z2VuX3NlYXJjaF9wY2lfaWQoc3RydWN0IG94eWdlbiAqY2hpcCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWRzW10pCit7CisJdTE2IHN1YmRldmljZTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBFRVBST00gcGlucyBhcmUgYXZhaWxhYmxlLCBpLmUuLCBub3QgdXNlZCBmb3IgU1BJLgorCSAqIChUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgd2UgaW5pdGlhbGl6ZSBvciB1c2UgU1BJLikKKwkgKi8KKwlveHlnZW5fY2xlYXJfYml0czgoY2hpcCwgT1hZR0VOX0ZVTkNUSU9OLAorCQkJICAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81KTsKKwkvKgorCSAqIFJlYWQgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQgZGlyZWN0bHkgZnJvbSB0aGUgRUVQUk9NLCBiZWNhdXNlIHRoZQorCSAqIGNoaXAgZGlkbid0IGlmIHRoZSBmaXJzdCBFRVBST00gd29yZCB3YXMgb3ZlcndyaXR0ZW4uCisJICovCisJc3ViZGV2aWNlID0gb3h5Z2VuX3JlYWRfZWVwcm9tKGNoaXAsIDIpOworCS8qCisJICogV2UgdXNlIG9ubHkgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQgZm9yIHNlYXJjaGluZyBiZWNhdXNlIGl0IGlzCisJICogdW5pcXVlIGV2ZW4gd2l0aG91dCB0aGUgc3Vic3lzdGVtIHZlbmRvciBJRCwgd2hpY2ggbWF5IGhhdmUgYmVlbgorCSAqIG92ZXJ3cml0dGVuIGluIHRoZSBFRVBST00uCisJICovCisJZm9yICg7IGlkcy0+dmVuZG9yOyArK2lkcykKKwkJaWYgKGlkcy0+c3ViZGV2aWNlID09IHN1YmRldmljZSAmJgorCQkgICAgaWRzLT5kcml2ZXJfZGF0YSAhPSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBKQorCQkJcmV0dXJuIGlkczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgb3h5Z2VuX3Jlc3RvcmVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaWYgKG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAwKSAhPSBPWFlHRU5fRUVQUk9NX0lEKSB7CisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgb25seSB3aGVuIGEga25vd24gY2FyZCBtb2RlbCBoYXMKKwkJICogYmVlbiBkZXRlY3RlZCwgaS5lLiwgd2Uga25vdyB0aGVyZSBpcyBhIHZhbGlkIHN1YnN5c3RlbQorCQkgKiBwcm9kdWN0IElEIGF0IGluZGV4IDIgaW4gdGhlIEVFUFJPTS4gIFRoZXJlZm9yZSwgd2UgaGF2ZQorCQkgKiBiZWVuIGFibGUgdG8gZGVkdWNlIHRoZSBjb3JyZWN0IHN1YnN5c3RlbSB2ZW5kb3IgSUQsIGFuZAorCQkgKiB0aGlzIGlzIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBFRVBST00KKwkJICogY29udGVudHMuCisJCSAqLworCQlveHlnZW5fd3JpdGVfZWVwcm9tKGNoaXAsIDEsIGlkLT5zdWJ2ZW5kb3IpOworCQlveHlnZW5fd3JpdGVfZWVwcm9tKGNoaXAsIDAsIE9YWUdFTl9FRVBST01fSUQpOworCisJCW94eWdlbl9zZXRfYml0czgoY2hpcCwgT1hZR0VOX01JU0MsCisJCQkJIE9YWUdFTl9NSVNDX1dSSVRFX1BDSV9TVUJJRCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAorCQkJCSAgICAgIGlkLT5zdWJ2ZW5kb3IpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfU1VCU1lTVEVNX0lELAorCQkJCSAgICAgIGlkLT5zdWJkZXZpY2UpOworCQlveHlnZW5fY2xlYXJfYml0czgoY2hpcCwgT1hZR0VOX01JU0MsCisJCQkJICAgT1hZR0VOX01JU0NfV1JJVEVfUENJX1NVQklEKTsKKworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRUVQUk9NIElEIHJlc3RvcmVkXG4iKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG94eWdlbl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00NDYsMzAgKzUwMywzMyBAQAogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJY2hpcC0+bW9kZWwuY2xlYW51cChjaGlwKTsKKwlrZnJlZShjaGlwLT5tb2RlbF9kYXRhKTsKIAltdXRleF9kZXN0cm95KCZjaGlwLT5tdXRleCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwogfQogCiBpbnQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkgICAgIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCisJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywKKwkJICAgICBpbnQgKCpnZXRfbW9kZWwpKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkCisJCQkJICAgICApCisJCSAgICApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBveHlnZW4gKmNoaXA7CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIG1vZGVsLT5vd25lciwKLQkJCSAgICBzaXplb2YgKmNoaXAgKyBtb2RlbC0+bW9kZWxfZGF0YV9zaXplKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIG93bmVyLCBzaXplb2YoKmNoaXApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5pcnEgPSAtMTsKLQljaGlwLT5tb2RlbCA9ICptb2RlbDsKLQljaGlwLT5tb2RlbF9kYXRhID0gY2hpcCArIDE7CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKIAltdXRleF9pbml0KCZjaGlwLT5tdXRleCk7CiAJSU5JVF9XT1JLKCZjaGlwLT5zcGRpZl9pbnB1dF9iaXRzX3dvcmssCkBAIC00ODEsNyArNTQxLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfY2FyZDsKIAotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCBtb2RlbC0+Y2hpcCk7CisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIERSSVZFUik7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHJlc2VydmUgUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX3BjaV9lbmFibGU7CkBAIC00OTUsMjAgKzU1NSwzNCBAQAogCX0KIAljaGlwLT5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKKwlwY2lfaWQgPSBveHlnZW5fc2VhcmNoX3BjaV9pZChjaGlwLCBpZHMpOworCWlmICghcGNpX2lkKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCX0KKwlveHlnZW5fcmVzdG9yZV9lZXByb20oY2hpcCwgcGNpX2lkKTsKKwllcnIgPSBnZXRfbW9kZWwoY2hpcCwgcGNpX2lkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisKKwlpZiAoY2hpcC0+bW9kZWwubW9kZWxfZGF0YV9zaXplKSB7CisJCWNoaXAtPm1vZGVsX2RhdGEgPSBremFsbG9jKGNoaXAtPm1vZGVsLm1vZGVsX2RhdGFfc2l6ZSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpcC0+bW9kZWxfZGF0YSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCQl9CisJfQorCiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gb3h5Z2VuX2NhcmRfZnJlZTsKIAotCWlmIChjaGlwLT5tb2RlbC5wcm9iZSkgewotCQllcnIgPSBjaGlwLT5tb2RlbC5wcm9iZShjaGlwLCBkcml2ZXJfZGF0YSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJfY2FyZDsKLQl9CiAJb3h5Z2VuX2luaXQoY2hpcCk7CiAJY2hpcC0+bW9kZWwuaW5pdChjaGlwKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBveHlnZW5faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgY2hpcC0+bW9kZWwuY2hpcCwgY2hpcCk7CisJCQkgIERSSVZFUiwgY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaW50ZXJydXB0ICVkXG4iLCBwY2ktPmlycSk7CiAJCWdvdG8gZXJyX2NhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKaW5kZXggNmM4NzBjMS4uYmM1Y2UxMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwpAQCAtMTEyLDYgKzExMiwzNCBAQAogICogQ1M0MzYyQTogQUQwIDwtIDAKICAqLwogCisvKgorICogWG9uYXIgRXNzZW5jZSBTVFgKKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ01JODc4ODoKKyAqCisgKiBJwrJDIDwtPiBQQ00xNzkyQQorICoKKyAqIEdQSSAwIDwtIGV4dGVybmFsIHBvd2VyIHByZXNlbnQKKyAqCisgKiBHUElPIDAgLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICogR1BJTyAxIC0+IHJvdXRlIEhQIHRvIGZyb250IHBhbmVsICgwKSBvciByZWFyIGphY2sgKDEpCisgKiBHUElPIDIgLT4gTTAgb2YgQ1M1MzgxCisgKiBHUElPIDMgLT4gTTEgb2YgQ1M1MzgxCisgKiBHUElPIDcgLT4gcm91dGUgb3V0cHV0IHRvIHNwZWFrZXIgamFja3MgKDApIG9yIEhQICgxKQorICogR1BJTyA4IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbGluZS1pbiAoMCkgb3IgbWljLWluICgxKQorICoKKyAqIFBDTTE3OTJBOgorICoKKyAqIEFEMCA8LSAwCisgKgorICogSDYgZGF1Z2h0ZXJib2FyZAorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEdQSU8gNCA8LSAwCisgKiBHUElPIDUgPC0gMAorICovCisKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0xNTIsNiArMTgwLDcgQEAKIAlNT0RFTF9EWCwKIAlNT0RFTF9IREFWLAkvKiB3aXRob3V0IGRhdWdodGVyYm9hcmQgKi8KIAlNT0RFTF9IREFWX0g2LAkvKiB3aXRoIEg2IGRhdWdodGVyYm9hcmQgKi8KKwlNT0RFTF9TVFgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeG9uYXJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKQEAgLTE2MCw2ICsxODksOCBAQAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0QyWCB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODMxNCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0hEQVYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9EMSB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1YyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX1NUWCB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHhvbmFyX2lkcyk7CkBAIC0xODMsMTIgKzIxNCwxNCBAQAogI2RlZmluZSBHUElPX0hEQVZfREJfSDYJCTB4MDAwMAogI2RlZmluZSBHUElPX0hEQVZfREJfWFgJCTB4MDAyMAogCisjZGVmaW5lIEdQSU9fU1RfSFBfUkVBUgkJMHgwMDAyCisjZGVmaW5lIEdQSU9fU1RfSFAJCTB4MDA4MAorCiAjZGVmaW5lIEkyQ19ERVZJQ0VfUENNMTc5NihpKQkoMHg5OCArICgoaSkgPDwgMSkpCS8qIDEwMDExLCBBRHg9aSwgL1c9MCAqLwogI2RlZmluZSBJMkNfREVWSUNFX0NTNDM5OAkweDllCS8qIDEwMDExLCBBRDE9MSwgQUQwPTEsIC9XPTAgKi8KICNkZWZpbmUgSTJDX0RFVklDRV9DUzQzNjJBCTB4MzAJLyogMDAxMTAwLCBBRDA9MCwgL1c9MCAqLwogCiBzdHJ1Y3QgeG9uYXJfZGF0YSB7Ci0JdW5zaWduZWQgaW50IG1vZGVsOwogCXVuc2lnbmVkIGludCBhbnRpX3BvcF9kZWxheTsKIAl1bnNpZ25lZCBpbnQgZGFjczsKIAl1MTYgb3V0cHV0X2VuYWJsZV9iaXQ7CkBAIC0zMzQsMTUgKzM2Nyw5IEBACiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwogCiAJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAzMDA7CisJZGF0YS0+ZGFjcyA9IDQ7CiAJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0QyX09VVFBVVF9FTkFCTEU7CiAJZGF0YS0+cGNtMTc5Nl9vdmVyc2FtcGxpbmcgPSBQQ00xNzk2X09TXzY0OwotCWlmIChkYXRhLT5tb2RlbCA9PSBNT0RFTF9EMlgpIHsKLQkJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElPX0RBVEE7Ci0JCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0s7Ci0JCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElPX0QyWF9FWFRfUE9XRVI7Ci0JCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKLQkJCQkgICAgR1BJT19EMlhfRVhUX1BPV0VSKTsKLQl9CiAKIAlwY20xNzk2X2luaXQoY2hpcCk7CiAKQEAgLTM1NSw2ICszODIsMTggQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX2QyeF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElPX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJT19JTlRFUlJVUFRfTUFTSzsKKwlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJT19EMlhfRVhUX1BPV0VSOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EMlhfRVhUX1BPV0VSKTsKKworCXhvbmFyX2QyX2luaXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jczQzNjJhX3ZvbHVtZXMoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl1OCBtdXRlOwpAQCAtNDIyLDExICs0NjEsNiBAQAogCWRhdGEtPmNzNDM5OF9mbSA9IENTNDM5OF9GTV9TSU5HTEUgfCBDUzQzOThfREVNX05PTkUgfCBDUzQzOThfRElGX0xKVVNUOwogCWRhdGEtPmNzNDM2MmFfZm0gPSBDUzQzNjJBX0ZNX1NJTkdMRSB8CiAJCUNTNDM2MkFfQVRBUElfQl9SIHwgQ1M0MzYyQV9BVEFQSV9BX0w7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0RYKSB7Ci0JCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7Ci0JCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7Ci0JfQogCiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCiAJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfApAQCAtNDQ3LDYgKzQ4MSwxNyBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzNjEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfZHhfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOworCisJeG9uYXJfZDFfaW5pdChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwpAQCAtNDU4LDYgKzUwMyw3IEBACiAJCSAgICAgICBPWFlHRU5fMldJUkVfU1BFRURfRkFTVCk7CiAKIAlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDEwMDsKKwlkYXRhLT5kYWNzID0gY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID09IE1PREVMX0hEQVZfSDYgPyA0IDogMTsKIAlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRFhfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSV9EQVRBOwogCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKQEAgLTQ4NCw2ICs1MzAsMzYgQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0eF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCisJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfAorCQkgICAgICAgT1hZR0VOXzJXSVJFX0lOVEVSUlVQVF9NQVNLIHwKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKKworCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMTAwOworCWRhdGEtPmRhY3MgPSAxOworCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EWF9PVVRQVVRfRU5BQkxFOworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOworCWRhdGEtPnBjbTE3OTZfb3ZlcnNhbXBsaW5nID0gUENNMTc5Nl9PU182NDsKKworCXBjbTE3OTZfaW5pdChjaGlwKTsKKworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCisJCQkgIEdQSU9fRFhfSU5QVVRfUk9VVEUgfCBHUElPX1NUX0hQX1JFQVIgfCBHUElPX1NUX0hQKTsKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkgICAgR1BJT19EWF9JTlBVVF9ST1VURSB8IEdQSU9fU1RfSFBfUkVBUiB8IEdQSU9fU1RfSFApOworCisJeG9uYXJfY29tbW9uX2luaXQoY2hpcCk7CisKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiUENNMTc5MkEiKTsKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2Rpc2FibGVfb3V0cHV0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwpAQCAtNTExLDYgKzU4NywxMSBAQAogCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZGlzYWJsZV9vdXRwdXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2QyX3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl4b25hcl9kMl9jbGVhbnVwKGNoaXApOwpAQCAtNTI3LDYgKzYwOCwxMSBAQAogCW1zbGVlcCgyKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3Rfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX3N0X2NsZWFudXAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2QyX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXBjbTE3OTZfaW5pdChjaGlwKTsKQEAgLTU1NCw2ICs2NDAsMTIgQEAKIAl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlwY20xNzk2X2luaXQoY2hpcCk7CisJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9wY21faGFyZHdhcmVfZmlsdGVyKHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqaGFyZHdhcmUpCiB7CkBAIC03MzMsNiArODI1LDcyIEBACiAJLnByaXZhdGVfdmFsdWUgPSBHUElPX0RYX0ZST05UX1BBTkVMLAogfTsKIAorc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiU3BlYWtlcnMiLCAiSGVhZHBob25lcyIsICJGUCBIZWFkcGhvbmVzIgorCX07CisKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwl1MTYgZ3BpbzsKKworCWdwaW8gPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCWlmICghKGdwaW8gJiBHUElPX1NUX0hQKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoZ3BpbyAmIEdQSU9fU1RfSFBfUkVBUikKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7CisJZWxzZQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTE2IGdwaW9fb2xkLCBncGlvOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWdwaW9fb2xkID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlncGlvID0gZ3Bpb19vbGQ7CisJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJY2FzZSAwOgorCQlncGlvICY9IH4oR1BJT19TVF9IUCB8IEdQSU9fU1RfSFBfUkVBUik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZ3BpbyB8PSBHUElPX1NUX0hQIHwgR1BJT19TVF9IUF9SRUFSOworCQlicmVhazsKKwljYXNlIDI6CisJCWdwaW8gPSAoZ3BpbyB8IEdQSU9fU1RfSFApICYgfkdQSU9fU1RfSFBfUkVBUjsKKwkJYnJlYWs7CisJfQorCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIGdwaW8pOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBncGlvICE9IGdwaW9fb2xkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3Rfb3V0cHV0X3N3aXRjaCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJBbmFsb2cgT3V0cHV0IiwKKwkuaW5mbyA9IHN0X291dHB1dF9zd2l0Y2hfaW5mbywKKwkuZ2V0ID0gc3Rfb3V0cHV0X3N3aXRjaF9nZXQsCisJLnB1dCA9IHN0X291dHB1dF9zd2l0Y2hfcHV0LAorfTsKKwogc3RhdGljIHZvaWQgeG9uYXJfbGluZV9taWNfYWM5N19zd2l0Y2goc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IG11dGUpCiB7CkBAIC03NDUsOCArOTAzLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20xNzk2X2RiX3NjYWxlLCAtMTIwMDAsIDUwLCAwKTsKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQzNjJhX2RiX3NjYWxlLCAtMTI3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGNtMTc5Nl9kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQzNjJhX2RiX3NjYWxlLCAtNjAwMCwgMTAwLCAwKTsKIAogc3RhdGljIGludCB4b25hcl9kMl9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCiB7CkBAIC03NjMsNiArOTIxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgeG9uYXJfc3RfY29udHJvbF9maWx0ZXIoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKQoreworCWlmICghc3RybmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIkNEIENhcHR1cmUgIiwgMTEpKQorCQlyZXR1cm4gMTsgLyogbm8gQ0QgaW5wdXQgKi8KKwlpZiAoIXN0cmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIlN0ZXJlbyBVcG1peGluZyIpKQorCQlyZXR1cm4gMTsgLyogc3RlcmVvIG9ubHkgLSB3ZSBkb24ndCBuZWVkIHVwbWl4aW5nICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgeG9uYXJfZDJfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJmFsdF9zd2l0Y2gsIGNoaXApKTsKQEAgLTc3Myw1MSArOTQwLDE0IEBACiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmZnJvbnRfcGFuZWxfc3dpdGNoLCBjaGlwKSk7CiB9CiAKLXN0YXRpYyBpbnQgeG9uYXJfbW9kZWxfcHJvYmUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKK3N0YXRpYyBpbnQgeG9uYXJfc3RfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0gewotCQlbTU9ERUxfRDFdCT0gIlhvbmFyIEQxIiwKLQkJW01PREVMX0RYXQk9ICJYb25hciBEWCIsCi0JCVtNT0RFTF9EMl0JPSAiWG9uYXIgRDIiLAotCQlbTU9ERUxfRDJYXQk9ICJYb25hciBEMlgiLAotCQlbTU9ERUxfSERBVl0JPSAiWG9uYXIgSERBVjEuMyIsCi0JCVtNT0RFTF9IREFWX0g2XQk9ICJYb25hciBIREFWMS4zK0g2IiwKLQl9OwotCXN0YXRpYyBjb25zdCB1OCBkYWNzW10gPSB7Ci0JCVtNT0RFTF9EMV0JPSAyLAotCQlbTU9ERUxfRFhdCT0gMiwKLQkJW01PREVMX0QyXQk9IDQsCi0JCVtNT0RFTF9EMlhdCT0gNCwKLQkJW01PREVMX0hEQVZdCT0gMSwKLQkJW01PREVMX0hEQVZfSDZdCT0gNCwKLQl9OwotCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCWRhdGEtPm1vZGVsID0gZHJpdmVyX2RhdGE7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0hEQVYpIHsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7Ci0JCXN3aXRjaCAob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmCi0JCQlHUElPX0hEQVZfREJfTUFTSykgewotCQljYXNlIEdQSU9fSERBVl9EQl9INjoKLQkJCWRhdGEtPm1vZGVsID0gTU9ERUxfSERBVl9INjsKLQkJCWJyZWFrOwotCQljYXNlIEdQSU9fSERBVl9EQl9YWDoKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gZGF1Z2h0ZXJib2FyZFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQotCWRhdGEtPmRhY3MgPSBkYWNzW2RhdGEtPm1vZGVsXTsKLQljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1tkYXRhLT5tb2RlbF07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc3Rfb3V0cHV0X3N3aXRjaCwgY2hpcCkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QyX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDJfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMl9taXhlcl9pbml0LApAQCAtODM3LDggKzk2Nyw4IEBACiAJCQkgTUlESV9PVVRQVVQgfAogCQkJIE1JRElfSU5QVVQsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMHgwZiwKLQkuZGFjX3ZvbHVtZV9tYXggPSAweGZmLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAogCS5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fU1BJIHwKIAkJCSAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81LApAQCAtODQ5LDggKzk3OSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMSA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAxMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QxX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDFfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMV9taXhlcl9pbml0LApAQCAtODY4LDcgKzk5Niw3IEBACiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMCwKKwkuZGFjX3ZvbHVtZV9taW4gPSAxMjcgLSA2MCwKIAkuZGFjX3ZvbHVtZV9tYXggPSAxMjcsCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULApAQCAtODc4LDggKzEwMDYsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfaGRhdiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2hkYXZfaW5pdCwKIAkuY2xlYW51cCA9IHhvbmFyX2hkYXZfY2xlYW51cCwKIAkuc3VzcGVuZCA9IHhvbmFyX2hkYXZfc3VzcGVuZCwKQEAgLTg5NywxNiArMTAyMyw0MyBAQAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAogCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAogCS5kYWNfY2hhbm5lbHMgPSA4LAotCS5kYWNfdm9sdW1lX21pbiA9IDB4MGYsCi0JLmRhY192b2x1bWVfbWF4ID0gMHhmZiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREksCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgeG9uYXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKLQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX3N0ID0geworCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfc3R4X2luaXQsCisJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfc3RfY29udHJvbF9maWx0ZXIsCisJLm1peGVyX2luaXQgPSB4b25hcl9zdF9taXhlcl9pbml0LAorCS5jbGVhbnVwID0geG9uYXJfc3RfY2xlYW51cCwKKwkuc3VzcGVuZCA9IHhvbmFyX3N0X3N1c3BlbmQsCisJLnJlc3VtZSA9IHhvbmFyX3N0X3Jlc3VtZSwKKwkuc2V0X2RhY19wYXJhbXMgPSBzZXRfcGNtMTc5Nl9wYXJhbXMsCisJLnNldF9hZGNfcGFyYW1zID0gc2V0X2NzNTN4MV9wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3BjbTE3OTZfdm9sdW1lLAorCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfcGNtMTc5Nl9tdXRlLAorCS5hYzk3X3N3aXRjaCA9IHhvbmFyX2xpbmVfbWljX2FjOTdfc3dpdGNoLAorCS5kYWNfdGx2ID0gcGNtMTc5Nl9kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl9kYXRhKSwKKwkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKKwkuZGFjX2NoYW5uZWxzID0gMiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKKwkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfeG9uYXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqY29uc3QgbW9kZWxzW10gPSB7CiAJCVtNT0RFTF9EMV0JPSAmbW9kZWxfeG9uYXJfZDEsCkBAIC05MTQsNyArMTA2Nyw1NyBAQAogCQlbTU9ERUxfRDJdCT0gJm1vZGVsX3hvbmFyX2QyLAogCQlbTU9ERUxfRDJYXQk9ICZtb2RlbF94b25hcl9kMiwKIAkJW01PREVMX0hEQVZdCT0gJm1vZGVsX3hvbmFyX2hkYXYsCisJCVtNT0RFTF9TVFhdCT0gJm1vZGVsX3hvbmFyX3N0LAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7CisJCVtNT0RFTF9EMV0JPSAiWG9uYXIgRDEiLAorCQlbTU9ERUxfRFhdCT0gIlhvbmFyIERYIiwKKwkJW01PREVMX0QyXQk9ICJYb25hciBEMiIsCisJCVtNT0RFTF9EMlhdCT0gIlhvbmFyIEQyWCIsCisJCVtNT0RFTF9IREFWXQk9ICJYb25hciBIREFWMS4zIiwKKwkJW01PREVMX0hEQVZfSDZdCT0gIlhvbmFyIEhEQVYxLjMrSDYiLAorCQlbTU9ERUxfU1RYXQk9ICJYb25hciBFc3NlbmNlIFNUWCIsCisJfTsKKwl1bnNpZ25lZCBpbnQgbW9kZWwgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAobW9kZWwgPj0gQVJSQVlfU0laRShtb2RlbHMpIHx8ICFtb2RlbHNbbW9kZWxdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljaGlwLT5tb2RlbCA9ICptb2RlbHNbbW9kZWxdOworCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgTU9ERUxfRDJYOgorCQljaGlwLT5tb2RlbC5pbml0ID0geG9uYXJfZDJ4X2luaXQ7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfRFg6CisJCWNoaXAtPm1vZGVsLmluaXQgPSB4b25hcl9keF9pbml0OworCQlicmVhazsKKwljYXNlIE1PREVMX0hEQVY6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlzd2l0Y2ggKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJgorCQkJR1BJT19IREFWX0RCX01BU0spIHsKKwkJY2FzZSBHUElPX0hEQVZfREJfSDY6CisJCQltb2RlbCA9IE1PREVMX0hEQVZfSDY7CisJCQlicmVhazsKKwkJY2FzZSBHUElPX0hEQVZfREJfWFg6CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGRhdWdodGVyYm9hcmRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9TVFg6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlicmVhazsKKwl9CisKKwljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1ttb2RlbF07CisJY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID0gbW9kZWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHhvbmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIApAQCAtOTI0LDEwICsxMTI3LDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlCVUdfT04ocGNpX2lkLT5kcml2ZXJfZGF0YSA+PSBBUlJBWV9TSVpFKG1vZGVscykpOwotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgIG1vZGVsc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwKLQkJCSAgICAgICBwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgeG9uYXJfaWRzLCBnZXRfeG9uYXJfbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggMjdjZjJjMi4uODBlMDY0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTEzMzQsNiArMTMzNCw0MCBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHBjeGhyX3Byb2NfZ3Bpb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGN4aHJfbWdyICptZ3IgPSBjaGlwLT5tZ3I7CisJLyogY29tbWFuZHMgYXZhaWxhYmxlIHdoZW4gZW1iZWRkZWQgRFNQIGlzIHJ1bm5pbmcgKi8KKwlpZiAobWdyLT5kc3BfbG9hZGVkICYgKDEgPDwgUENYSFJfRklSTVdBUkVfRFNQX01BSU5fSU5ERVgpKSB7CisJCS8qIGdwaW8gcG9ydHMgb24gc3RlcmVvIGJvYXJkcyBvbmx5IGF2YWlsYWJsZSAqLworCQlpbnQgdmFsdWUgPSAwOworCQlocjIyMl9yZWFkX2dwaW8obWdyLCAxLCAmdmFsdWUpOwkvKiBHUEkgKi8KKwkJc25kX2lwcmludGYoYnVmZmVyLCAiR1BJOiAweCV4XG4iLCB2YWx1ZSk7CisJCWhyMjIyX3JlYWRfZ3BpbyhtZ3IsIDAsICZ2YWx1ZSk7CS8qIEdQMCAqLworCQlzbmRfaXByaW50ZihidWZmZXIsICJHUE86IDB4JXhcbiIsIHZhbHVlKTsKKwl9IGVsc2UKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibm8gZmlybXdhcmUgbG9hZGVkXG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorc3RhdGljIHZvaWQgcGN4aHJfcHJvY19ncG9fd3JpdGUoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IGNoaXAtPm1ncjsKKwljaGFyIGxpbmVbNjRdOworCWludCB2YWx1ZTsKKwkvKiBjb21tYW5kcyBhdmFpbGFibGUgd2hlbiBlbWJlZGRlZCBEU1AgaXMgcnVubmluZyAqLworCWlmICghKG1nci0+ZHNwX2xvYWRlZCAmICgxIDw8IFBDWEhSX0ZJUk1XQVJFX0RTUF9NQUlOX0lOREVYKSkpCisJCXJldHVybjsKKwl3aGlsZSAoIXNuZF9pbmZvX2dldF9saW5lKGJ1ZmZlciwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgeworCQlpZiAoc3NjYW5mKGxpbmUsICJHUE86IDB4JXgiLCAmdmFsdWUpICE9IDEpCisJCQljb250aW51ZTsKKwkJaHIyMjJfd3JpdGVfZ3BvKG1nciwgdmFsdWUpOwkvKiBHUDAgKi8KKwl9Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY3hocl9wcm9jX2luaXQoc3RydWN0IHNuZF9wY3hociAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwpAQCAtMTM0Miw2ICsxMzc2LDEzIEBACiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19pbmZvKTsKIAlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAic3luYyIsICZlbnRyeSkpCiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19zeW5jKTsKKwkvKiBncGlvIGF2YWlsYWJsZSBvbiBzdGVyZW8gc291bmQgY2FyZHMgb25seSAqLworCWlmIChjaGlwLT5tZ3ItPmlzX2hyX3N0ZXJlbyAmJgorCSAgICAhc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImdwaW8iLCAmZW50cnkpKSB7CisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19ncGlvX3JlYWQpOworCQllbnRyeS0+Yy50ZXh0LndyaXRlID0gcGN4aHJfcHJvY19ncG9fd3JpdGU7CisJCWVudHJ5LT5tb2RlIHw9IFNfSVdVU1I7CisJfQogfQogLyogZW5kIG9mIHByb2MgaW50ZXJmYWNlICovCiAKQEAgLTE1MTAsMTIgKzE1NTEsMTIgQEAKIAogCQlzbnByaW50Zih0bXBpZCwgc2l6ZW9mKHRtcGlkKSwgIiVzLSVkIiwKIAkJCSBpZFtkZXZdID8gaWRbZGV2XSA6IGNhcmRfbmFtZSwgaSk7Ci0JCWNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDApOworCQllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCQlpZiAoISBjYXJkKSB7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgYWxsb2NhdGUgdGhlIGNhcmQgJWRcbiIsIGkpOwogCQkJcGN4aHJfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmggYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAppbmRleCA2OWQ4N2RlLi5iZGE3NzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAKLSNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT04JCTB4MDAwOTA1CS8qIDAuOS41ICovCi0jZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OX1NUUklORwkiMC45LjUiCQkvKiAwLjkuNSAqLworI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTgkJMHgwMDA5MDYJLyogMC45LjYgKi8KKyNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIwLjkuNiIJCS8qIDAuOS42ICovCiAKIAogI2RlZmluZSBQQ1hIUl9NQVhfQ0FSRFMJCTYKQEAgLTEyNCw2ICsxMjQsNyBAQAogCiAJdW5zaWduZWQgY2hhciB4bHhfY2ZnOwkJLyogY29weSBvZiBQQ1hIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAJdW5zaWduZWQgY2hhciB4bHhfc2VsbWljOwkvKiBjb3B5IG9mIFBDWEhSX1hMWF9TRUxNSUMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGRzcF9yZXNldDsJLyogY29weSBvZiBQQ1hIUl9EU1BfUkVTRVQgcmVnaXN0ZXIgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKaW5kZXggYmJiZDY2ZC4uYmUwMTczNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgRGlnaWdyYW0gcGN4aHIgY29tcGF0aWJsZSBzb3VuZGNhcmRzCiAgKgotICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbnMgbWVzc2FnZSBoYW5kbGluZworICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbmQgbWVzc2FnZSBoYW5kbGluZwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBieSBEaWdpZ3JhbSA8YWxzYUBkaWdpZ3JhbS5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwppbmRleCA1OTI3NDNhLi4xN2NiMTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwpAQCAtNDcxLDE2ICs0NzEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBjeGhyX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjeGhyX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBpbnQgcGN4aHJfc2V0dXBfZmlybXdhcmUoc3RydWN0IHBjeGhyX21nciAqbWdyKQogewogCWludCBlcnI7CkBAIC00OTUsOCArNDg1LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1BDWEhSOwogCWh3LT5wcml2YXRlX2RhdGEgPSBtZ3I7Ci0JaHctPm9wcy5vcGVuID0gcGN4aHJfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBwY3hocl9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHBjeGhyX2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHBjeGhyX2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYwppbmRleCBmZjAxOTEyLi4xY2I4MmMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYwpAQCAtNTMsNiArNTMsOCBAQAogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfRFNQCTB4MDEKICNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX01VVEUJMHgwMgogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfQ09ERUMJMHgwOAorI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVAk1CisjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSwkweDYwCiAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBDWEhSX0NGR19TWU5DRFNQX01BU0sJCTB4ODAKQEAgLTgxLDYgKzgzLDggQEAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfU1RBVFVTIHJlZ2lzdGVyIC0gUkVBRCAqLwogI2RlZmluZSBQQ1hIUl9TVEFUX1NSQ19MT0NLCQkweDAxCiAjZGVmaW5lIFBDWEhSX1NUQVRfTEVWRUxfSU4JCTB4MDIKKyNkZWZpbmUgUENYSFJfU1RBVF9HUElfT0ZGU0VUCQkyCisjZGVmaW5lIFBDWEhSX1NUQVRfR1BJX01BU0sJCTB4MEMKICNkZWZpbmUgUENYSFJfU1RBVF9NSUNfQ0FQUwkJMHgxMAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9TVEFUVVMgcmVnaXN0ZXIgLSBXUklURSAqLwogI2RlZmluZSBQQ1hIUl9TVEFUX0ZSRVFfU1lOQ19NQVNLCTB4MDEKQEAgLTI5MSwxMCArMjk1LDExIEBACiAJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsCiAJCSAgICBQQ1hIUl9EU1BfUkVTRVRfRFNQKTsKIAltc2xlZXAoNSk7Ci0JUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsCi0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfRFNQICB8Ci0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfTVVURSB8Ci0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfQ09ERUMpOworCW1nci0+ZHNwX3Jlc2V0ID0gUENYSFJfRFNQX1JFU0VUX0RTUCAgfAorCQkJIFBDWEhSX0RTUF9SRVNFVF9NVVRFIHwKKwkJCSBQQ1hIUl9EU1BfUkVTRVRfQ09ERUM7CisJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsIG1nci0+ZHNwX3Jlc2V0KTsKKwkvKiBocjIyMl93cml0ZV9ncG8obWdyLCAwKTsgZG9lcyB0aGUgc2FtZSAqLwogCW1zbGVlcCg1KTsKIAogCS8qIGNvbmZpZyBBS00gKi8KQEAgLTQ5Niw2ICs1MDEsMzMgQEAKIH0KIAogCitpbnQgaHIyMjJfcmVhZF9ncGlvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IGlzX2dwaSwgaW50ICp2YWx1ZSkKK3sKKwlpZiAoaXNfZ3BpKSB7CisJCXVuc2lnbmVkIGNoYXIgcmVnID0gUENYSFJfSU5QQihtZ3IsIFBDWEhSX1hMWF9TVEFUVVMpOworCQkqdmFsdWUgPSAoaW50KShyZWcgJiBQQ1hIUl9TVEFUX0dQSV9NQVNLKSA+PgorCQkJICAgICAgUENYSFJfU1RBVF9HUElfT0ZGU0VUOworCX0gZWxzZSB7CisJCSp2YWx1ZSA9IChpbnQpKG1nci0+ZHNwX3Jlc2V0ICYgUENYSFJfRFNQX1JFU0VUX0dQT19NQVNLKSA+PgorCQkJIFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUOworCX0KKwlyZXR1cm4gMDsKK30KKworCitpbnQgaHIyMjJfd3JpdGVfZ3BvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgcmVnID0gbWdyLT5kc3BfcmVzZXQgJiB+UENYSFJfRFNQX1JFU0VUX0dQT19NQVNLOworCisJcmVnIHw9ICh1bnNpZ25lZCBjaGFyKSh2YWx1ZSA8PCBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVCkgJgorCSAgICAgICBQQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0s7CisKKwlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwgcmVnKTsKKwltZ3ItPmRzcF9yZXNldCA9IHJlZzsKKwlyZXR1cm4gMDsKK30KKworCiBpbnQgaHIyMjJfdXBkYXRlX2FuYWxvZ19hdWRpb19sZXZlbChzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwLAogCQkJCSAgICBpbnQgaXNfY2FwdHVyZSwgaW50IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCmluZGV4IDZiMzE4YjIuLjVhMzdhMDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCkBAIC0zMiw2ICszMiw5IEBACiAJCQkgICAgIGVudW0gcGN4aHJfY2xvY2tfdHlwZSBjbG9ja190eXBlLAogCQkJICAgICBpbnQgKnNhbXBsZV9yYXRlKTsKIAoraW50IGhyMjIyX3JlYWRfZ3BpbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCBpc19ncGksIGludCAqdmFsdWUpOworaW50IGhyMjIyX3dyaXRlX2dwbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCB2YWx1ZSk7CisKICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19MRVZFTF9NSU4JCTAJLyogLTI1LjUgZEIgKi8KICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19aRVJPX0xFVkVMCQk1MQkvKiAwLjAgZEIgKi8KICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19MRVZFTF9NQVgJCTk5CS8qICsyNC4wIGRCICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCmluZGV4IDI0MzZlMzcuLmZlYzA0OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCkBAIC03ODksMTEgKzc4OSwxNSBAQAogCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKIAkJbXV0ZXhfbG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAJCW1nci0+dXNlX2Nsb2NrX3R5cGUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwotCQlpZiAobWdyLT51c2VfY2xvY2tfdHlwZSkKKwkJcmF0ZSA9IDA7CisJCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IFBDWEhSX0NMT0NLX1RZUEVfSU5URVJOQUwpIHsKIAkJCXBjeGhyX2dldF9leHRlcm5hbF9jbG9jayhtZ3IsIG1nci0+dXNlX2Nsb2NrX3R5cGUsCiAJCQkJCQkgJnJhdGUpOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyYXRlID0gbWdyLT5zYW1wbGVfcmF0ZTsKKwkJCWlmICghcmF0ZSkKKwkJCQlyYXRlID0gNDgwMDA7CisJCX0KIAkJaWYgKHJhdGUpIHsKIAkJCXBjeGhyX3NldF9jbG9jayhtZ3IsIHJhdGUpOwogCQkJaWYgKG1nci0+c2FtcGxlX3JhdGUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggM2NhYWNmYi4uNmYxMDM0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtMjEwMiw5ICsyMTAyLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfcmlwdGlkZV9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTMyLmMgYi9zb3VuZC9wY2kvcm1lMzIuYwppbmRleCBlN2VmM2ExLi5kN2I5NjZlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lMzIuYworKysgYi9zb3VuZC9wY2kvcm1lMzIuYwpAQCAtMTk0MSw5ICsxOTQxLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBybWUzMikpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtZTMyKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWUzMl9jYXJkX2ZyZWU7CiAJcm1lMzIgPSAoc3RydWN0IHJtZTMyICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAlybWUzMi0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDNmZGQ0ODguLjU1ZmIxYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yMzQ4LDkgKzIzNDgsMTAgQEAKIAkJZGV2Kys7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgcm1lOTYpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBybWU5NiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lOTZfY2FyZF9mcmVlOwogCXJtZTk2ID0gKHN0cnVjdCBybWU5NiAqKWNhcmQtPnByaXZhdGVfZGF0YTsJCiAJcm1lOTYtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IDQ0ZDBjMTUuLjMxNGU3MzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAvKiB0aGUgbWV0ZXJzIGFyZSByZWd1bGFyIGkvby1tYXBwZWQgcmVnaXN0ZXJzLCBidXQgb2Zmc2V0CiAgICBjb25zaWRlcmFibHkgZnJvbSB0aGUgcmVzdC4gdGhlIHBlYWsgcmVnaXN0ZXJzIGFyZSByZXNldAotICAgd2hlbiByZWFkOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNCBiaXRzIGFyZSBmdWxsLXNjYWxlIGNvdW50ZXJzOyAKKyAgIHdoZW4gcmVhZDsgdGhlIGxlYXN0LXNpZ25pZmljYW50IDQgYml0cyBhcmUgZnVsbC1zY2FsZSBjb3VudGVyczsKICAgIHRoZSBhY3R1YWwgcGVhayB2YWx1ZSBpcyBpbiB0aGUgbW9zdC1zaWduaWZpY2FudCAyNCBiaXRzLgogKi8KIApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAyNiozIHZhbHVlcyBhcmUgcmVhZCBpbiBzcyBtb2RlCiAgICAxNCozIGluIGRzIG1vZGUsIHdpdGggbm8gZ2FwIGJldHdlZW4gdmFsdWVzCiAqLwotI2RlZmluZSBIRFNQXzk2NTJfcGVha0Jhc2UJNzE2NAkKKyNkZWZpbmUgSERTUF85NjUyX3BlYWtCYXNlCTcxNjQKICNkZWZpbmUgSERTUF85NjUyX3Jtc0Jhc2UJNDA5NgogCiAvKiBjLmYuIHRoZSBoZHNwXzk2MzJfbWV0ZXJzX3Qgc3RydWN0ICovCkBAIC0xNzMsMTIgKzE3MywxMiBAQAogI2RlZmluZSBIRFNQX1NQRElGRW1waGFzaXMgICAgICAgICgxPDwxMCkgLyogMD1ub25lLCAxPW9uICovCiAjZGVmaW5lIEhEU1BfU1BESUZOb25BdWRpbyAgICAgICAgKDE8PDExKSAvKiAwPW9mZiwgMT1vbiAqLwogI2RlZmluZSBIRFNQX1NQRElGT3B0aWNhbE91dCAgICAgICgxPDwxMikgLyogMT11c2UgMXN0IEFEQVQgY29ubmVjdG9yIGZvciBTUERJRiwgMD1kbyBub3QgKi8KLSNkZWZpbmUgSERTUF9TeW5jUmVmMiAgICAgICAgICAgICAoMTw8MTMpIAotI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QwICAgICgxPDwxNCkgCi0jZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDEgICAgKDE8PDE1KSAKLSNkZWZpbmUgSERTUF9TeW5jUmVmMCAgICAgICAgICAgICAoMTw8MTYpIAorI2RlZmluZSBIRFNQX1N5bmNSZWYyICAgICAgICAgICAgICgxPDwxMykKKyNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MCAgICAoMTw8MTQpCisjZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDEgICAgKDE8PDE1KQorI2RlZmluZSBIRFNQX1N5bmNSZWYwICAgICAgICAgICAgICgxPDwxNikKICNkZWZpbmUgSERTUF9TeW5jUmVmMSAgICAgICAgICAgICAoMTw8MTcpCi0jZGVmaW5lIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQgKDE8PDE4KSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8gCisjZGVmaW5lIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQgKDE8PDE4KSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8KICNkZWZpbmUgSERTUF9YTFJCcmVha291dENhYmxlICAgICAoMTw8MjApIC8qIEZvciBIOTYzMiBjYXJkcyAqLwogI2RlZmluZSBIRFNQX01pZGkwSW50ZXJydXB0RW5hYmxlICgxPDwyMikKICNkZWZpbmUgSERTUF9NaWRpMUludGVycnVwdEVuYWJsZSAoMTw8MjMpCkBAIC0zMTQsNyArMzE0LDcgQEAKICNkZWZpbmUgSERTUF9UaW1lY29kZVN5bmMgICAgICAgKDE8PDI3KQogI2RlZmluZSBIRFNQX0FFQk8gICAgICAgICAgCSgxPDwyOCkgLyogSDk2MzIgc3BlY2lmaWMgQW5hbG9nIEV4dGVuc2lvbiBCb2FyZHMgKi8KICNkZWZpbmUgSERTUF9BRUJJCQkoMTw8MjkpIC8qIDAgPSBwcmVzZW50LCAxID0gYWJzZW50ICovCi0jZGVmaW5lIEhEU1BfbWlkaTBJUlFQZW5kaW5nICAgICgxPDwzMCkgCisjZGVmaW5lIEhEU1BfbWlkaTBJUlFQZW5kaW5nICAgICgxPDwzMCkKICNkZWZpbmUgSERTUF9taWRpMUlSUVBlbmRpbmcgICAgKDE8PDMxKQogCiAjZGVmaW5lIEhEU1Bfc3BkaWZGcmVxdWVuY3lNYXNrICAgIChIRFNQX3NwZGlmRnJlcXVlbmN5MHxIRFNQX3NwZGlmRnJlcXVlbmN5MXxIRFNQX3NwZGlmRnJlcXVlbmN5MikKQEAgLTM5MSw3ICszOTEsNyBAQAogI2RlZmluZSBIRFNQX0NIQU5ORUxfQlVGRkVSX0JZVEVTICAgICg0KkhEU1BfQ0hBTk5FTF9CVUZGRVJfU0FNUExFUykKIAogLyogdGhlIHNpemUgb2YgdGhlIGFyZWEgd2UgbmVlZCB0byBhbGxvY2F0ZSBmb3IgRE1BIHRyYW5zZmVycy4gdGhlCi0gICBzaXplIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBjaGFubmVscyAtIHRoZSAKKyAgIHNpemUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIC0gdGhlCiAgICBNdWx0aWZhY2Ugc3RpbGwgdXNlcyB0aGUgc2FtZSBtZW1vcnkgYXJlYS4KIAogICAgTm90ZSB0aGF0IHdlIGFsbG9jYXRlIDEgbW9yZSBjaGFubmVsIHRoYW4gaXMgYXBwYXJlbnRseSBuZWVkZWQKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfaW5fY2hhbm5lbHM7CSAgICAgLyogcXVhZCBzcGVlZCBtb2RlIGZvciBIOTYzMiAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBkc19pbl9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgc3NfaW5fY2hhbm5lbHM7CSAgICAvKiBkaWZmZXJlbnQgZm9yIG11bHRpZmFjZS9kaWdpZmFjZSAqLwotCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfb3V0X2NoYW5uZWxzOwkgICAgCisJdW5zaWduZWQgY2hhcgkgICAgICBxc19vdXRfY2hhbm5lbHM7CiAJdW5zaWduZWQgY2hhciAgICAgICAgIGRzX291dF9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgc3Nfb3V0X2NoYW5uZWxzOwogCkBAIC01MDIsOSArNTAyLDkgQEAKIAogc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfbWZfc3NbSERTUF9NQVhfQ0hBTk5FTFNdID0geyAvKiBNdWx0aWZhY2UgKi8KIAkvKiBBbmFsb2cgKi8KLQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAogCS8qIEFEQVQgMiAqLwotCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgCisJMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLAogCS8qIFNQRElGICovCiAJMjQsIDI1LAogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQpAQCAtNTI1LDExICs1MjUsMTEgQEAKIAkvKiBTUERJRiAqLwogCTgsIDksCiAJLyogQW5hbG9nICovCi0JMTAsIDExLCAKKwkxMCwgMTEsCiAJLyogQU80Uy0xOTIgYW5kIEFJNFMtMTkyIGV4dGVuc2lvbiBib2FyZHMgKi8KIAkxMiwgMTMsIDE0LCAxNSwKIAkvKiBvdGhlcnMgZG9uJ3QgZXhpc3QgKi8KLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAktMSwgLTEKIH07CiAKQEAgLTUzOSw3ICs1MzksNyBAQAogCS8qIFNQRElGICovCiAJOCwgOSwKIAkvKiBBbmFsb2cgKi8KLQkxMCwgMTEsIAorCTEwLCAxMSwKIAkvKiBBTzRTLTE5MiBhbmQgQUk0Uy0xOTIgZXh0ZW5zaW9uIGJvYXJkcyAqLwogCTEyLCAxMywgMTQsIDE1LAogCS8qIG90aGVycyBkb24ndCBleGlzdCAqLwpAQCAtNTg3LDcgKzU4Nyw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BfaWRzW10gPSB7CiAJewogCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9YSUxJTlgsCi0JCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwgCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwKIAkJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAogCX0sIC8qIFJNRSBIYW1tZXJmYWxsLURTUCAqLwpAQCAtNjUzLDcgKzY1Myw2IEBACiAKIHN0YXRpYyBpbnQgaGRzcF9jaGVja19mb3JfaW9ib3ggKHN0cnVjdCBoZHNwICpoZHNwKQogewotCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDA7CiAJaWYgKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0NvbmZpZ0Vycm9yKSB7CiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogbm8gRGlnaWZhY2Ugb3IgTXVsdGlmYWNlIGNvbm5lY3RlZCFcbiIpOwpAQCAtNjYxLDcgKzY2MCwyOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgaGRzcF93YWl0X2Zvcl9pb2JveChzdHJ1Y3QgaGRzcCAqaGRzcCwgdW5zaWduZWQgaW50IGxvb3BzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSAhPSBsb29wczsgKytpKSB7CisJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0NvbmZpZ0Vycm9yKQorCQkJbXNsZWVwKGRlbGF5KTsKKwkJZWxzZSB7CisJCQlzbmRfcHJpbnRkKCJIYW1tZXJmYWxsLURTUDogaW9ib3ggZm91bmQgYWZ0ZXIgJXVtcyFcbiIsCisJCQkJICAgaSAqIGRlbGF5KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc25kX3ByaW50aygiSGFtbWVyZmFsbC1EU1A6IG5vIERpZ2lmYWNlIG9yIE11bHRpZmFjZSBjb25uZWN0ZWQhXG4iKTsKKwloZHNwLT5zdGF0ZSAmPSB+SERTUF9GaXJtd2FyZUxvYWRlZDsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoc3RydWN0IGhkc3AgKmhkc3ApIHsKQEAgLTY3MCwxOSArNjkxLDE5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfRGxsRXJyb3IpICE9IDApIHsKLQkJCisKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBsb2FkaW5nIGZpcm13YXJlXG4iKTsKIAogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBIRFNQX1NfUFJPR1JBTSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfZmlmb0RhdGEsIDApOwotCQkKKwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfTE9OR19XQUlUKSkgewogCQkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRvd25sb2FkIHByZXBhcmF0aW9uXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCQorCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19MT0FEKTsKLQkJCisKIAkJZm9yIChpID0gMDsgaSA8IDI0NDEzOyArK2kpIHsKIAkJCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9maWZvRGF0YSwgaGRzcC0+ZmlybXdhcmVfY2FjaGVbaV0pOwogCQkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAxMjcsIEhEU1BfTE9OR19XQUlUKSkgewpAQCAtNjkyLDcgKzcxMyw3IEBACiAJCX0KIAogCQlzc2xlZXAoMyk7Ci0JCQorCiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9MT05HX1dBSVQpKSB7CiAJCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IHRpbWVvdXQgYXQgZW5kIG9mIGZpcm13YXJlIGxvYWRpbmdcbiIpOwogCQkgICAgCXJldHVybiAtRUlPOwpAQCAtNzA1LDE1ICs3MjYsMTUgQEAKICNlbmRpZgogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBoZHNwLT5jb250cm9sMl9yZWdpc3Rlcik7CiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogZmluaXNoZWQgZmlybXdhcmUgbG9hZGluZ1xuIik7Ci0JCQorCiAJfQogCWlmIChoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkgewogCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IGZpcm13YXJlIGxvYWRlZCBmcm9tIGNhY2hlLCByZXN0b3JpbmcgZGVmYXVsdHNcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGRzcC0+bG9jaywgZmxhZ3MpOwogCQlzbmRfaGRzcF9zZXRfZGVmYXVsdHMoaGRzcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsgCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JCisKIAloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwogCiAJcmV0dXJuIDA7CkBAIC03MjIsNyArNzQzLDcgQEAKIHN0YXRpYyBpbnQgaGRzcF9nZXRfaW9ib3hfdmVyc2lvbiAoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaWYgKChoZHNwX3JlYWQgKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9EbGxFcnJvcikgIT0gMCkgewotCQorCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfUFJPR1JBTSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfZmlmb0RhdGEsIDApOwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfU0hPUlRfV0FJVCkgPCAwKQpAQCAtNzM4LDcgKzc1OSw3IEBACiAJCQloZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9TSE9SVF9XQUlUKTsKIAkJfSBlbHNlIHsKIAkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKLQkJfSAKKwkJfQogCX0gZWxzZSB7CiAJCS8qIGZpcm13YXJlIHdhcyBhbHJlYWR5IGxvYWRlZCwgZ2V0IGlvYm94IHR5cGUgKi8KIAkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQpAQCAtNzg2LDEzICs4MDcsMTMgQEAKIAogCiBzdGF0aWMgaW50IGhkc3BfZmlmb193YWl0KHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgY291bnQsIGludCB0aW1lb3V0KQoteyAgICAKK3sKIAlpbnQgaTsKIAogCS8qIHRoZSBmaWZvU3RhdHVzIHJlZ2lzdGVycyByZXBvcnRzIG9uIGhvdyBtYW55IHdvcmRzCiAJICAgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY29tbWFuZCBGSUZPLgogCSovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CiAKIAkJaWYgKChpbnQpKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9maWZvU3RhdHVzKSAmIDB4ZmYpIDw9IGNvdW50KQpAQCAtODI0LDExICs4NDUsMTEgQEAKIAogCWlmIChhZGRyID49IEhEU1BfTUFUUklYX01JWEVSX1NJWkUpCiAJCXJldHVybiAtMTsKLQkKKwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAogCQkvKiBmcm9tIG1hcnRpbiBiam9ybnNlbjoKLQkJICAgCisKIAkJICAgIllvdSBjYW4gb25seSB3cml0ZSBkd29yZHMgdG8gdGhlCiAJCSAgIG1peGVyIG1lbW9yeSB3aGljaCBjb250YWluIHR3bwogCQkgICBtaXhlciB2YWx1ZXMgaW4gdGhlIGxvdyBhbmQgaGlnaApAQCAtODQ3LDcgKzg2OCw3IEBACiAKIAkJaGRzcC0+bWl4ZXJfbWF0cml4W2FkZHJdID0gZGF0YTsKIAotCQkKKwogCQkvKiBgYWRkcicgYWRkcmVzc2VzIGEgMTYtYml0IHdpZGUgYWRkcmVzcywgYnV0CiAJCSAgIHRoZSBhZGRyZXNzIHNwYWNlIGFjY2Vzc2VkIHZpYSBoZHNwX3dyaXRlCiAJCSAgIHVzZXMgYnl0ZSBvZmZzZXRzLiBwdXQgYW5vdGhlciB3YXksIGFkZHIKQEAgLTg1NiwxNyArODc3LDE3IEBACiAJCSAgIHRvIGFjY2VzcyAwIHRvIDI3MDMgLi4uCiAJCSovCiAJCWFkID0gYWRkci8yOwotCQotCQloZHNwX3dyaXRlIChoZHNwLCA0MDk2ICsgKGFkKjQpLCAKLQkJCSAgICAoaGRzcC0+bWl4ZXJfbWF0cml4WyhhZGRyJjB4N2ZlKSsxXSA8PCAxNikgKyAKKworCQloZHNwX3dyaXRlIChoZHNwLCA0MDk2ICsgKGFkKjQpLAorCQkJICAgIChoZHNwLT5taXhlcl9tYXRyaXhbKGFkZHImMHg3ZmUpKzFdIDw8IDE2KSArCiAJCQkgICAgaGRzcC0+bWl4ZXJfbWF0cml4W2FkZHImMHg3ZmVdKTsKLQkJCisKIAkJcmV0dXJuIDA7CiAKIAl9IGVsc2UgewogCiAJCWFkID0gKGFkZHIgPDwgMTYpICsgZGF0YTsKLQkJCisKIAkJaWYgKGhkc3BfZmlmb193YWl0KGhkc3AsIDEyNywgSERTUF9MT05HX1dBSVQpKQogCQkJcmV0dXJuIC0xOwogCkBAIC05MDIsNyArOTIzLDcgQEAKIAogCWlmIChzdGF0dXMgJiBIRFNQX1NQRElGRXJyb3JGbGFnKQogCQlyZXR1cm4gMDsKLQkKKwogCXN3aXRjaCAocmF0ZV9iaXRzKSB7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MzJLSHo6IHJldHVybiAzMjAwMDsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k0NF8xS0h6OiByZXR1cm4gNDQxMDA7CkBAIC05MTAsMTMgKzkzMSwxMyBAQAogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTY0S0h6OiByZXR1cm4gNjQwMDA7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5ODhfMktIejogcmV0dXJuIDg4MjAwOwogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTk2S0h6OiByZXR1cm4gOTYwMDA7Ci0JY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTI4S0h6OiAKKwljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxMjhLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTI4MDAwOwogCQlicmVhazsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxNzZfNEtIejogCisJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTc2XzRLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTc2NDAwOwogCQlicmVhazsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxOTJLSHo6IAorCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE5MktIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxOTIwMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDI3LDcgKzEwNDgsNyBAQAogewogCXU2NCBuOwogCXUzMiByOwotCQorCiAJaWYgKHJhdGUgPj0gMTEyMDAwKQogCQlyYXRlIC89IDQ7CiAJZWxzZSBpZiAocmF0ZSA+PSA1NjAwMCkKQEAgLTEwNTMsMzUgKzEwNzQsMzUgQEAKIAkgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCAoZS5nLiBkdXJpbmcgbW9kdWxlCiAJICAgaW5pdGlhbGl6YXRpb24pLgogCSovCi0JCi0JaWYgKCEoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQ2xvY2tNb2RlTWFzdGVyKSkgewkKKworCWlmICghKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0Nsb2NrTW9kZU1hc3RlcikpIHsKIAkJaWYgKGNhbGxlZF9pbnRlcm5hbGx5KSB7CiAJCQkvKiByZXF1ZXN0IGZyb20gY3RsIG9yIGNhcmQgaW5pdGlhbGl6YXRpb24gKi8KIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBkZXZpY2UgaXMgbm90IHJ1bm5pbmcgYXMgYSBjbG9jayBtYXN0ZXI6IGNhbm5vdCBzZXQgc2FtcGxlIHJhdGUuXG4iKTsKIAkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsJCQorCQl9IGVsc2UgewogCQkJLyogaHdfcGFyYW0gcmVxdWVzdCB3aGlsZSBpbiBBdXRvU3luYyBtb2RlICovCiAJCQlpbnQgZXh0ZXJuYWxfZnJlcSA9IGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCk7CiAJCQlpbnQgc3BkaWZfZnJlcSA9IGhkc3Bfc3BkaWZfc2FtcGxlX3JhdGUoaGRzcCk7Ci0JCQorCiAJCQlpZiAoKHNwZGlmX2ZyZXEgPT0gZXh0ZXJuYWxfZnJlcSoyKSAmJiAoaGRzcF9hdXRvc3luY19yZWYoaGRzcCkgPj0gSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxKSkKIAkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IERldGVjdGVkIEFEQVQgaW4gZG91YmxlIHNwZWVkIG1vZGVcbiIpOwogCQkJZWxzZSBpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMiAmJiAoc3BkaWZfZnJlcSA9PSBleHRlcm5hbF9mcmVxKjQpICYmIChoZHNwX2F1dG9zeW5jX3JlZihoZHNwKSA+PSBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDEpKQotCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBxdWFkIHNwZWVkIG1vZGVcbiIpOwkJCQorCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBxdWFkIHNwZWVkIG1vZGVcbiIpOwogCQkJZWxzZSBpZiAocmF0ZSAhPSBleHRlcm5hbF9mcmVxKSB7CiAJCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBObyBBdXRvU3luYyBzb3VyY2UgZm9yIHJlcXVlc3RlZCByYXRlXG4iKTsKIAkJCQlyZXR1cm4gLTE7Ci0JCQl9CQkKLQkJfQkKKwkJCX0KKwkJfQogCX0KIAogCWN1cnJlbnRfcmF0ZSA9IGhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZTsKIAogCS8qIENoYW5naW5nIGZyb20gYSAic2luZ2xlIHNwZWVkIiB0byBhICJkb3VibGUgc3BlZWQiIHJhdGUgaXMKIAkgICBub3QgYWxsb3dlZCBpZiBhbnkgc3Vic3RyZWFtcyBhcmUgb3Blbi4gVGhpcyBpcyBiZWNhdXNlCi0JICAgc3VjaCBhIGNoYW5nZSBjYXVzZXMgYSBzaGlmdCBpbiB0aGUgbG9jYXRpb24gb2YgCisJICAgc3VjaCBhIGNoYW5nZSBjYXVzZXMgYSBzaGlmdCBpbiB0aGUgbG9jYXRpb24gb2YKIAkgICB0aGUgRE1BIGJ1ZmZlcnMgYW5kIGEgcmVkdWN0aW9uIGluIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlCi0JICAgYnVmZmVycy4gCisJICAgYnVmZmVycy4KIAogCSAgIE5vdGUgdGhhdCBhIHNpbWlsYXIgYnV0IGVzc2VudGlhbGx5IGluc29sdWJsZSBwcm9ibGVtCiAJICAgZXhpc3RzIGZvciBleHRlcm5hbGx5LWRyaXZlbiByYXRlIGNoYW5nZXMuIEFsbCB3ZSBjYW4gZG8KQEAgLTEwODksNyArMTExMCw3IEBACiAKIAlpZiAocmF0ZSA+IDk2MDAwICYmIGhkc3AtPmlvX3R5cGUgIT0gSDk2MzIpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCiAJc3dpdGNoIChyYXRlKSB7CiAJY2FzZSAzMjAwMDoKIAkJaWYgKGN1cnJlbnRfcmF0ZSA+IDQ4MDAwKQpAQCAtMTE3OSw3ICsxMjAwLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCQorCiAJaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlID0gcmF0ZTsKIAogCXJldHVybiAwOwpAQCAtMTI0NSwxNiArMTI2NiwxNiBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzEyOF07CiAKIAkvKiBPdXRwdXQgaXMgbm90IGludGVycnVwdCBkcml2ZW4gKi8KLQkJCisKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhtaWRpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGhtaWRpLT5vdXRwdXQpIHsKIAkJaWYgKCFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eSAoaG1pZGktPm91dHB1dCkpIHsKIAkJCWlmICgobl9wZW5kaW5nID0gc25kX2hkc3BfbWlkaV9vdXRwdXRfcG9zc2libGUgKGhtaWRpLT5oZHNwLCBobWlkaS0+aWQpKSA+IDApIHsKIAkJCQlpZiAobl9wZW5kaW5nID4gKGludClzaXplb2YgKGJ1ZikpCiAJCQkJCW5fcGVuZGluZyA9IHNpemVvZiAoYnVmKTsKLQkJCQkKKwogCQkJCWlmICgodG9fd3JpdGUgPSBzbmRfcmF3bWlkaV90cmFuc21pdCAoaG1pZGktPm91dHB1dCwgYnVmLCBuX3BlbmRpbmcpKSA+IDApIHsKLQkJCQkJZm9yIChpID0gMDsgaSA8IHRvX3dyaXRlOyArK2kpIAorCQkJCQlmb3IgKGkgPSAwOyBpIDwgdG9fd3JpdGU7ICsraSkKIAkJCQkJCXNuZF9oZHNwX21pZGlfd3JpdGVfYnl0ZSAoaG1pZGktPmhkc3AsIGhtaWRpLT5pZCwgYnVmW2ldKTsKIAkJCQl9CiAJCQl9CkBAIC0xMzI1LDE0ICsxMzQ2LDE0IEBACiB7CiAJc3RydWN0IGhkc3BfbWlkaSAqaG1pZGkgPSAoc3RydWN0IGhkc3BfbWlkaSAqKSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlzbmRfaGRzcF9taWRpX291dHB1dF93cml0ZShobWlkaSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogCiAJLyogdGhpcyBkb2VzIG5vdCBidW1wIGhtaWRpLT5pc3RpbWVyLCBiZWNhdXNlIHRoZQogCSAgIGtlcm5lbCBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdGhlIHRpbWVyIHdoZW4gaXQKIAkgICBleHBpcmVkLCBhbmQgd2UgYXJlIG5vdyBhZGRpbmcgaXQgYmFjaywgdGh1cwotCSAgIGxlYXZpbmcgaXN0aW1lciB3aGVyZXZlciBpdCB3YXMgc2V0IGJlZm9yZS4gIAorCSAgIGxlYXZpbmcgaXN0aW1lciB3aGVyZXZlciBpdCB3YXMgc2V0IGJlZm9yZS4KIAkqLwogCiAJaWYgKGhtaWRpLT5pc3RpbWVyKSB7CkBAIC0xNTAxLDcgKzE1MjIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jb250cm9sX3NwZGlmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzbmRfaGRzcF9jb252ZXJ0X3RvX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCwgaGRzcC0+Y3JlZ19zcGRpZik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTExLDcgKzE1MzIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdTMyIHZhbDsKLQkKKwogCXZhbCA9IHNuZF9oZHNwX2NvbnZlcnRfZnJvbV9hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgpOwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCWNoYW5nZSA9IHZhbCAhPSBoZHNwLT5jcmVnX3NwZGlmOwpAQCAtMTUzMCw3ICsxNTUxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfY29udHJvbF9zcGRpZl9zdHJlYW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNuZF9oZHNwX2NvbnZlcnRfdG9fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4LCBoZHNwLT5jcmVnX3NwZGlmX3N0cmVhbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTQwLDcgKzE1NjEsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdTMyIHZhbDsKLQkKKwogCXZhbCA9IHNuZF9oZHNwX2NvbnZlcnRfZnJvbV9hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgpOwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCWNoYW5nZSA9IHZhbCAhPSBoZHNwLT5jcmVnX3NwZGlmX3N0cmVhbTsKQEAgLTE2MDIsNyArMTYyMyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9pbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9zcGRpZl9pbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MTIsNyArMTYzMyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJSAoKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpID8gNCA6IDMpOwpAQCAtMTY0OSw3ICsxNjcwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX291dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfb3V0KGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTY1OSw3ICsxNjgwLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTY5Myw3ICsxNzE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX3Byb2Zlc3Npb25hbChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfcHJvZmVzc2lvbmFsKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTcwMyw3ICsxNzI0LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTczNyw3ICsxNzU4LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX2VtcGhhc2lzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9lbXBoYXNpcyhoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NDcsNyArMTc2OCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE3ODEsNyArMTgwMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9ub25hdWRpbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfbm9uYXVkaW8oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzkxLDcgKzE4MTIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xODI4LDcgKzE4NDksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3dpdGNoIChoZHNwX3NwZGlmX3NhbXBsZV9yYXRlKGhkc3ApKSB7CiAJY2FzZSAzMjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CkBAIC0xODU4LDcgKzE4NzksNyBAQAogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gOTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CQkKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTg4Miw3ICsxOTAzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3N5c3RlbV9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlOwogCXJldHVybiAwOwogfQpAQCAtMTg5OSw3ICsxOTIwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hdXRvc3luY19zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLCAiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLCAiTm9uZSIsICIxMjgwMDAiLCAiMTc2NDAwIiwgIjE5MjAwMCJ9OwkKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLCAiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLCAiTm9uZSIsICIxMjgwMDAiLCAiMTc2NDAwIiwgIjE5MjAwMCJ9OwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgPyAxMCA6IDcgOwpAQCAtMTkxMiw3ICsxOTMzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2F1dG9zeW5jX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXN3aXRjaCAoaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKSkgewogCWNhc2UgMzIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwpAQCAtMTk0MCw5ICsxOTYxLDkgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOTIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA5OwotCQlicmVhazsJCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwkJCisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE5NjgsNyArMTk4OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik1hc3RlciIsICJTbGF2ZSIgfTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOwpAQCAtMTk4MSw3ICsyMDAyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3N5c3RlbV9jbG9ja19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3N5c3RlbV9jbG9ja19tb2RlKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjAxOCw3ICsyMDM5LDcgQEAKIAkJY2FzZSAxOTIwMDA6CiAJCQlyZXR1cm4gOTsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAzOwkKKwkJCXJldHVybiAzOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIDA7CkBAIC0yMDMyLDcgKzIwNTMsNyBAQAogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfQVVUT1NZTkM6CiAJCWlmIChoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApICE9IDApIHsKIAkJICAgIGlmICghaGRzcF9zZXRfcmF0ZShoZHNwLCBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApLCAxKSkgewotCQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9DbG9ja01vZGVNYXN0ZXI7CQkKKwkJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BfQ2xvY2tNb2RlTWFzdGVyOwogCQkJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CiAJCQlyZXR1cm4gMDsKIAkJICAgIH0KQEAgLTIwNDMsNyArMjA2NCw3IEBACiAJCWJyZWFrOwogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfNDRfMUtIWjoKIAkJcmF0ZSA9IDQ0MTAwOwotCQlicmVhazsJICAgIAorCQlicmVhazsKIAljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzQ4S0haOgogCQlyYXRlID0gNDgwMDA7CiAJCWJyZWFrOwpAQCAtMjA3OCwxMyArMjA5OSwxMyBAQAogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJBdXRvU3luYyIsICJJbnRlcm5hbCAzMi4wIGtIeiIsICJJbnRlcm5hbCA0NC4xIGtIeiIsICJJbnRlcm5hbCA0OC4wIGtIeiIsICJJbnRlcm5hbCA2NC4wIGtIeiIsICJJbnRlcm5hbCA4OC4yIGtIeiIsICJJbnRlcm5hbCA5Ni4wIGtIeiIsICJJbnRlcm5hbCAxMjgga0h6IiwgIkludGVybmFsIDE3Ni40IGtIeiIsICJJbnRlcm5hbCAxOTIuMCBLSHoiIH07CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKQogCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDEwOwogCWVsc2UKLQkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwkKKwkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CkBAIC0yMDk0LDcgKzIxMTUsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfY2xvY2tfc291cmNlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2Nsb2NrX3NvdXJjZShoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMDQsNyArMjEyNSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMTMwLDcgKzIxNTEsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfY2xvY2tfc291cmNlX2xvY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT5jbG9ja19zb3VyY2VfbG9ja2VkOwogCXJldHVybiAwOwogfQpAQCAtMjE2NSw3ICsyMTg2LDcgQEAKIAljYXNlIEhEU1BfREFHYWluTWludXMxMGRCVjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDE7CQorCQlyZXR1cm4gMTsKIAl9CiB9CiAKQEAgLTIxODAsOCArMjIwMSw4IEBACiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5QbHVzNGRCdTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluTWludXMxMGRCVjsJCQotCQlicmVhazsJICAgIAorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluTWludXMxMGRCVjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMTkzLDcgKzIyMTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2RhX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IkhpIEdhaW4iLCAiKzQgZEJ1IiwgIi0xMCBkYlYifTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjIwNiw3ICsyMjI3LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2RhX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfZGFfZ2FpbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTYsNyArMjIzNyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMjUwLDcgKzIyNzEsNyBAQAogCWNhc2UgSERTUF9BREdhaW5Mb3dHYWluOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsJCisJCXJldHVybiAxOwogCX0KIH0KIApAQCAtMjI2MiwxMSArMjI4MywxMSBAQAogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluTWludXMxMGRCVjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluUGx1czRkQnU7CQkKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2FpblBsdXM0ZEJ1OwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5Mb3dHYWluOwkJCi0JCWJyZWFrOwkgICAgCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5Mb3dHYWluOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIyNzgsNyArMjI5OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYWRfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiLTEwIGRCViIsICIrNCBkQnUiLCAiTG8gR2FpbiJ9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yMjkxLDcgKzIzMTIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWRfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hZF9nYWluKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjMwMSw3ICsyMzIyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIzMzUsNyArMjM1Niw3IEBACiAJY2FzZSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CQorCQlyZXR1cm4gMDsKIAl9CiB9CiAKQEAgLTIzNDcsMTEgKzIzNjgsMTEgQEAKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2FpbjBkQjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXM2ZEI7CQkKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzNmRCOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czEyZEI7CQkKLQkJYnJlYWs7CSAgICAKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMzYzLDcgKzIzODQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3Bob25lX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IjAgZEIiLCAiLTYgZEIiLCAiLTEyIGRCIn07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTIzNzYsNyArMjM5Nyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9waG9uZV9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3Bob25lX2dhaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzg2LDcgKzI0MDcsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjQzMiw3ICsyNDUzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3hscl9icmVha291dF9jYWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQyLDcgKzI0NjMsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNDg4LDcgKzI1MDksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWViKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2FlYihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OTgsNyArMjUxOSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI1NzYsNyArMjU5Nyw3IEBACiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IldvcmQiLCAiSUVDOTU4IiwgIkFEQVQxIiwgIkFEQVQgU3luYyIsICJBREFUMiIsICJBREFUMyIgfTsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAKQEAgLTI1OTUsNyArMjYxNiw3IEBACiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMDsKIAkJYnJlYWs7CiAJfQotCQkKKwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CkBAIC0yNjA1LDcgKzI2MjYsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcHJlZl9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9wcmVmX3N5bmNfcmVmKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjYxNSw3ICsyNjM2LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlLCBtYXg7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMjY2NCw3ICsyNjg1LDcgQEAKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9TUERJRjoKIAkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9TUERJRjsKIAljYXNlIEhEU1BfU2VsU3luY1JlZk1hc2s6Ci0JCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORTsJCisJCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORTsKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9BREFUMToKIAkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMTsKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9BREFUMjoKQEAgLTI2ODAsNyArMjcwMSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYXV0b3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJXb3JkIiwgIkFEQVQgU3luYyIsICJJRUM5NTgiLCAiTm9uZSIsICJBREFUMSIsICJBREFUMiIsICJBREFUMyIgfTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwpAQCAtMjY5Myw3ICsyNzE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2F1dG9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hdXRvc3luY19yZWYoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzI3LDcgKzI3NDgsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfbGluZV9vdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX2xpbmVfb3V0KGhkc3ApOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yNzM5LDcgKzI3NjAsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNzczLDcgKzI3OTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcHJlY2lzZV9wb2ludGVyKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+cHJlY2lzZV9wdHI7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI3ODUsNyArMjgwNiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI4MTksNyArMjg0MCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF91c2VfbWlkaV90YXNrbGV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+dXNlX21pZGlfdGFza2xldDsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjgzMSw3ICsyODUyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjg3MywxMiArMjg5NCwxMiBAQAogCiAJc291cmNlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJZGVzdGluYXRpb24gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKLQkKKwogCWlmIChzb3VyY2UgPj0gaGRzcC0+bWF4X2NoYW5uZWxzKQogCQlhZGRyID0gaGRzcF9wbGF5YmFja190b19vdXRwdXRfa2V5KGhkc3Asc291cmNlLWhkc3AtPm1heF9jaGFubmVscyxkZXN0aW5hdGlvbik7CiAJZWxzZQogCQlhZGRyID0gaGRzcF9pbnB1dF90b19vdXRwdXRfa2V5KGhkc3Asc291cmNlLCBkZXN0aW5hdGlvbik7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9IGhkc3BfcmVhZF9nYWluIChoZHNwLCBhZGRyKTsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjkyNiw3ICsyOTQ3LDcgQEAKIAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik5vIExvY2siLCAiTG9jayIsICJTeW5jIiB9OwkKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTm8gTG9jayIsICJMb2NrIiwgIlN5bmMiIH07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yOTcxLDcgKzI5OTIsNyBAQAogCWludCBzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZFcnJvckZsYWcpCiAJCXJldHVybiAwOwotCWVsc2UgewkKKwllbHNlIHsKIAkJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZTeW5jKQogCQkJcmV0dXJuIDI7CiAJCWVsc2UKQEAgLTMwMDcsNyArMzAyOCw3IEBACiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7Ci19CQorfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZGF0c3luY19zeW5jX2NoZWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTMwMjUsMTcgKzMwNDYsMTcgQEAKIH0KIAogc3RhdGljIGludCBoZHNwX2FkYXRfc3luY19jaGVjayhzdHJ1Y3QgaGRzcCAqaGRzcCwgaW50IGlkeCkKLXsJCit7CiAJaW50IHN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKLQkKKwogCWlmIChzdGF0dXMgJiAoSERTUF9Mb2NrMD4+aWR4KSkgewogCQlpZiAoc3RhdHVzICYgKEhEU1BfU3luYzA+PmlkeCkpCiAJCQlyZXR1cm4gMjsKIAkJZWxzZQotCQkJcmV0dXJuIDE7CQkKKwkJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKLX0gCit9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FkYXRfc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0zMDUzLDcgKzMwNzQsNyBAQAogCQlicmVhazsKIAljYXNlIE11bHRpZmFjZToKIAljYXNlIEg5NjMyOgotCQlpZiAob2Zmc2V0ID49IDEpIAorCQlpZiAob2Zmc2V0ID49IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxMTUsNyArMzEzNiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9kZHNfb2Zmc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2Rkc19vZmZzZXQoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTI1LDcgKzMxNDYsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMzE3MCw3ICszMTkxLDcgQEAKIAkuZ2V0ID0JCXNuZF9oZHNwX2NvbnRyb2xfc3BkaWZfbWFza19nZXQsCiAJLnByaXZhdGVfdmFsdWUgPSBJRUM5NThfQUVTMF9OT05BVURJTyB8CiAgIAkJCSBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUwgfAotCQkJIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJUywJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVMsCiB9LAogewogCS5hY2Nlc3MgPQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKQEAgLTMxODgsNyArMzIwOSw3IEBACiBIRFNQX1NQRElGX1BST0ZFU1NJT05BTCgiSUVDOTU4IFByb2Zlc3Npb25hbCBCaXQiLCAwKSwKIEhEU1BfU1BESUZfRU1QSEFTSVMoIklFQzk1OCBFbXBoYXNpcyBCaXQiLCAwKSwKIEhEU1BfU1BESUZfTk9OX0FVRElPKCJJRUM5NTggTm9uLWF1ZGlvIEJpdCIsIDApLAotLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovIAorLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovCiBIRFNQX0NMT0NLX1NPVVJDRSgiU2FtcGxlIENsb2NrIFNvdXJjZSIsIDApLAogewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMzI0MCw3ICszMjYxLDcgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCQorCiAJLyogREEsIEFEIGFuZCBQaG9uZSBnYWluIGFuZCBYTFIgYnJlYWtvdXQgY2FibGUgY29udHJvbHMgZm9yIEg5NjMyIGNhcmRzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9oZHNwXzk2MzJfY29udHJvbHMpOyBpZHgrKykgewpAQCAtMzI1OSw3ICszMjgwLDcgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIC9wcm9jIGludGVyZmFjZSAKKyAgIC9wcm9jIGludGVyZmFjZQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCkBAIC0zMjk4LDcgKzMzMTksNyBAQAogCQkJfQogCQl9CiAJfQotCQorCiAJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCXN0YXR1czIgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpOwogCkBAIC0zMzYyLDE3ICszMzgzLDE3IEBACiAJCWJyZWFrOwogCQljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzE5MktIWjoKIAkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDE5MiBrSHoiOwotCQlicmVhazsJCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWNsb2NrX3NvdXJjZSA9ICJFcnJvciI7CQkKKwkJY2xvY2tfc291cmNlID0gIkVycm9yIjsKIAl9CiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlNhbXBsZSBDbG9jayBTb3VyY2U6ICVzXG4iLCBjbG9ja19zb3VyY2UpOwotCQkJCisKIAlpZiAoaGRzcF9zeXN0ZW1fY2xvY2tfbW9kZShoZHNwKSkKIAkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiU2xhdmUiOwogCWVsc2UKIAkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiTWFzdGVyIjsKLQkKKwogCXN3aXRjaCAoaGRzcF9wcmVmX3N5bmNfcmVmIChoZHNwKSkgewogCWNhc2UgSERTUF9TWU5DX0ZST01fV09SRDoKIAkJcHJlZl9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKQEAgLTMzOTcsNyArMzQxOCw3IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiUHJlZmVycmVkIFN5bmMgUmVmZXJlbmNlOiAlc1xuIiwgcHJlZl9zeW5jX3JlZik7Ci0JCisKIAlzd2l0Y2ggKGhkc3BfYXV0b3N5bmNfcmVmIChoZHNwKSkgewogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX1dPUkQ6CiAJCWF1dG9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKQEAgLTM0MTAsNyArMzQzMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX05PTkU6CiAJCWF1dG9zeW5jX3JlZiA9ICJOb25lIjsKLQkJYnJlYWs7CQorCQlicmVhazsKIAljYXNlIEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMToKIAkJYXV0b3N5bmNfcmVmID0gIkFEQVQxIjsKIAkJYnJlYWs7CkBAIC0zNDI1LDE0ICszNDQ2LDE0IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiQXV0b1N5bmMgUmVmZXJlbmNlOiAlc1xuIiwgYXV0b3N5bmNfcmVmKTsKLQkKKwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJBdXRvU3luYyBGcmVxdWVuY3k6ICVkXG4iLCBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApKTsKLQkKKwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgTW9kZTogJXNcbiIsIHN5c3RlbV9jbG9ja19tb2RlKTsKIAogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5OiAlZFxuIiwgaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlKTsKIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU3lzdGVtIENsb2NrIExvY2tlZDogJXNcbiIsIGhkc3AtPmNsb2NrX3NvdXJjZV9sb2NrZWQgPyAiWWVzIiA6ICJObyIpOwotCQkKKwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAKIAlzd2l0Y2ggKGhkc3Bfc3BkaWZfaW4oaGRzcCkpIHsKQEAgLTM0NTIsNyArMzQ3Myw3IEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBpbnB1dDogPz8/XG4iKTsKIAkJYnJlYWs7CiAJfQotCQorCiAJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1NQRElGT3B0aWNhbE91dCkKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IG91dHB1dDogQ29heGlhbCAmIEFEQVQxXG4iKTsKIAllbHNlCkBAIC0zNTEwLDEzICszNTMxLDEzIEBACiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJTUERJRjogTm8gTG9ja1xuIik7CiAJZWxzZQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU1BESUY6ICVzXG4iLCB4ID8gIlN5bmMiIDogIkxvY2siKTsKLQkKKwogCXggPSBzdGF0dXMyICYgSERTUF93Y19zeW5jOwogCWlmIChzdGF0dXMyICYgSERTUF93Y19sb2NrKQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiV29yZCBDbG9jazogJXNcbiIsIHggPyAiU3luYyIgOiAiTG9jayIpOwogCWVsc2UKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIldvcmQgQ2xvY2s6IE5vIExvY2tcbiIpOwotCQorCiAJeCA9IHN0YXR1cyAmIEhEU1BfVGltZWNvZGVTeW5jOwogCWlmIChzdGF0dXMgJiBIRFNQX1RpbWVjb2RlTG9jaykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQURBVCBTeW5jOiAlc1xuIiwgeCA/ICJTeW5jIiA6ICJMb2NrIik7CkBAIC0zNTI0LDExICszNTQ1LDExIEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQVQgU3luYzogTm8gTG9ja1xuIik7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwotCQorCiAJLyogSW5mb3JtYXRpb25zIGFib3V0IEg5NjMyIHNwZWNpZmljIGNvbnRyb2xzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJY2hhciAqdG1wOwotCQorCiAJCXN3aXRjaCAoaGRzcF9hZF9nYWluKGhkc3ApKSB7CiAJCWNhc2UgMDoKIAkJCXRtcCA9ICItMTAgZEJWIjsKQEAgLTM1NTQsNyArMzU3NSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlzbmRfaXByaW50ZihidWZmZXIsICJEQSBHYWluIDogJXNcbiIsIHRtcCk7Ci0JCQorCiAJCXN3aXRjaCAoaGRzcF9waG9uZV9nYWluKGhkc3ApKSB7CiAJCWNhc2UgMDoKIAkJCXRtcCA9ICIwIGRCIjsKQEAgLTM1NjgsOCArMzU4OSw4IEBACiAJCX0KIAkJc25kX2lwcmludGYoYnVmZmVyLCAiUGhvbmVzIEdhaW4gOiAlc1xuIiwgdG1wKTsKIAotCQlzbmRfaXByaW50ZihidWZmZXIsICJYTFIgQnJlYWtvdXQgQ2FibGUgOiAlc1xuIiwgaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCkgPyAieWVzIiA6ICJubyIpOwkKLQkJCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlhMUiBCcmVha291dCBDYWJsZSA6ICVzXG4iLCBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKSA/ICJ5ZXMiIDogIm5vIik7CisKIAkJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0FuYWxvZ0V4dGVuc2lvbkJvYXJkKQogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiQUVCIDogb24gKEFEQVQxIGludGVybmFsKVxuIik7CiAJCWVsc2UKQEAgLTM2MzIsMTggKzM2NTMsMTggQEAKIAogCS8qIHNldCBkZWZhdWx0czoKIAotCSAgIFNQRElGIElucHV0IHZpYSBDb2F4IAorCSAgIFNQRElGIElucHV0IHZpYSBDb2F4CiAJICAgTWFzdGVyIGNsb2NrIG1vZGUKIAkgICBtYXhpbXVtIGxhdGVuY3kgKDcgPT4gMl43ID0gODE5MiBzYW1wbGVzLCA2NEtieXRlIGJ1ZmZlciwKIAkgICAgICAgICAgICAgICAgICAgIHdoaWNoIGltcGxpZXMgMiA0MDk2IHNhbXBsZSwgMzJLYnl0ZSBwZXJpb2RzKS4KLSAgICAgICAgICAgRW5hYmxlIGxpbmUgb3V0LgkJCSAgICAKKyAgICAgICAgICAgRW5hYmxlIGxpbmUgb3V0LgogCSAqLwogCi0JaGRzcC0+Y29udHJvbF9yZWdpc3RlciA9IEhEU1BfQ2xvY2tNb2RlTWFzdGVyIHwgCi0JCSAgICAgICAgICAgICAgICAgSERTUF9TUERJRklucHV0Q29heGlhbCB8IAotCQkgICAgICAgICAgICAgICAgIGhkc3BfZW5jb2RlX2xhdGVuY3koNykgfCAKKwloZHNwLT5jb250cm9sX3JlZ2lzdGVyID0gSERTUF9DbG9ja01vZGVNYXN0ZXIgfAorCQkgICAgICAgICAgICAgICAgIEhEU1BfU1BESUZJbnB1dENvYXhpYWwgfAorCQkgICAgICAgICAgICAgICAgIGhkc3BfZW5jb2RlX2xhdGVuY3koNykgfAogCQkgICAgICAgICAgICAgICAgIEhEU1BfTGluZU91dDsKLQkKKwogCiAJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CiAKQEAgLTM2NjEsNyArMzY4Miw3IEBACiAJaGRzcF9jb21wdXRlX3BlcmlvZF9zaXplKGhkc3ApOwogCiAJLyogc2lsZW5jZSBldmVyeXRoaW5nICovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgSERTUF9NQVRSSVhfTUlYRVJfU0laRTsgKytpKQogCQloZHNwLT5taXhlcl9tYXRyaXhbaV0gPSBNSU5VU19JTkZJTklUWV9HQUlOOwogCkBAIC0zNjY5LDcgKzM2OTAsNyBAQAogCQlpZiAoaGRzcF93cml0ZV9nYWluIChoZHNwLCBpLCBNSU5VU19JTkZJTklUWV9HQUlOKSkKIAkJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCS8qIEg5NjMyIHNwZWNpZmljIGRlZmF1bHRzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSAoSERTUF9EQUdhaW5QbHVzNGRCdSB8IEhEU1BfQURHYWluUGx1czRkQnUgfCBIRFNQX1Bob25lR2FpbjBkQik7CkBAIC0zNjg3LDEyICszNzA4LDEyIEBACiBzdGF0aWMgdm9pZCBoZHNwX21pZGlfdGFza2xldCh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWFyZzsKLQkKKwogCWlmIChoZHNwLT5taWRpWzBdLnBlbmRpbmcpCiAJCXNuZF9oZHNwX21pZGlfaW5wdXRfcmVhZCAoJmhkc3AtPm1pZGlbMF0pOwogCWlmIChoZHNwLT5taWRpWzFdLnBlbmRpbmcpCiAJCXNuZF9oZHNwX21pZGlfaW5wdXRfcmVhZCAoJmhkc3AtPm1pZGlbMV0pOwotfSAKK30KIAogc3RhdGljIGlycXJldHVybl90IHNuZF9oZHNwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0zNzA0LDcgKzM3MjUsNyBAQAogCXVuc2lnbmVkIGludCBtaWRpMHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgbWlkaTFzdGF0dXM7CiAJaW50IHNjaGVkdWxlID0gMDsKLQkKKwogCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAogCWF1ZGlvID0gc3RhdHVzICYgSERTUF9hdWRpb0lSUVBlbmRpbmc7CkBAIC0zNzE4LDE1ICszNzM5LDE4IEBACiAKIAltaWRpMHN0YXR1cyA9IGhkc3BfcmVhZCAoaGRzcCwgSERTUF9taWRpU3RhdHVzSW4wKSAmIDB4ZmY7CiAJbWlkaTFzdGF0dXMgPSBoZHNwX3JlYWQgKGhkc3AsIEhEU1BfbWlkaVN0YXR1c0luMSkgJiAweGZmOwotCQorCisJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKIAlpZiAoYXVkaW8pIHsKIAkJaWYgKGhkc3AtPmNhcHR1cmVfc3Vic3RyZWFtKQogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChoZHNwLT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0pOwotCQkKKwogCQlpZiAoaGRzcC0+cGxheWJhY2tfc3Vic3RyZWFtKQogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChoZHNwLT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtKTsKIAl9Ci0JCisKIAlpZiAobWlkaTAgJiYgbWlkaTBzdGF0dXMpIHsKIAkJaWYgKGhkc3AtPnVzZV9taWRpX3Rhc2tsZXQpIHsKIAkJCS8qIHdlIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnB1dCB1bnRpbCBwcm9jZXNzaW5nIGlzIGRvbmUgKi8KQEAgLTM3NjksMTAgKzM3OTMsMTAgQEAKIAogICAgICAgICBpZiAoc25kX0JVR19PTihjaGFubmVsIDwgMCB8fCBjaGFubmVsID49IGhkc3AtPm1heF9jaGFubmVscykpCiAJCXJldHVybiBOVUxMOwotICAgICAgICAKKwogCWlmICgobWFwcGVkX2NoYW5uZWwgPSBoZHNwLT5jaGFubmVsX21hcFtjaGFubmVsXSkgPCAwKQogCQlyZXR1cm4gTlVMTDsKLQkKKwogCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQogCQlyZXR1cm4gaGRzcC0+Y2FwdHVyZV9idWZmZXIgKyAobWFwcGVkX2NoYW5uZWwgKiBIRFNQX0NIQU5ORUxfQlVGRkVSX0JZVEVTKTsKIAllbHNlCkBAIC0zOTY1LDcgKzM5ODksNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqb3RoZXI7CiAJaW50IHJ1bm5pbmc7Ci0JCisKIAlpZiAoaGRzcF9jaGVja19mb3JfaW9ib3ggKGhkc3ApKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNDA1OSwxMCArNDA4MywxMCBAQAogCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogI2VuZGlmCiAJLnJhdGVzID0JCShTTkRSVl9QQ01fUkFURV8zMjAwMCB8Ci0JCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgCisJCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKIAkJCQkgU05EUlZfUENNX1JBVEVfOTYwMDApLAogCS5yYXRlX21pbiA9CQkzMjAwMCwKIAkucmF0ZV9tYXggPQkJOTYwMDAsCkBAIC00MDg4LDEwICs0MTEyLDEwIEBACiAJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAjZW5kaWYKIAkucmF0ZXMgPQkJKFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKLQkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfCAKKwkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfAogCQkJCSBTTkRSVl9QQ01fUkFURV85NjAwMCksCiAJLnJhdGVfbWluID0JCTMyMDAwLAogCS5yYXRlX21heCA9CQk5NjAwMCwKQEAgLTQxNzAsNyArNDE5NCw3IEBACiAJCQkubWF4ID0gaGRzcC0+cXNfaW5fY2hhbm5lbHMsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07Ci0JCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsJCisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKIAl9IGVsc2UgaWYgKHItPm1pbiA+IDQ4MDAwICYmIHItPm1heCA8PSA5NjAwMCkgewogCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CiAJCQkubWluID0gaGRzcC0+ZHNfaW5fY2hhbm5lbHMsCkBAIC00MjAxLDcgKzQyMjUsNyBAQAogCQkJLm1heCA9IGhkc3AtPnFzX291dF9jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKLQkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwkKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwogCX0gZWxzZSBpZiAoci0+bWluID4gNDgwMDAgJiYgci0+bWF4IDw9IDk2MDAwKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMsCkBAIC00MzE4LDggKzQzNDIsOCBAQAogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiA9IGhkc3AtPnFzX291dF9jaGFubmVsczsKIAkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzOwotCX0JCi0JCisJfQorCiAJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCiAJCQkgICAgIHNuZF9oZHNwX2h3X3J1bGVfb3V0X2NoYW5uZWxzLCBoZHNwLAogCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKQEAgLTQ0MTMsMTMgKzQ0MzcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwX2h3ZGVwX2R1bW15X29wKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiB3ZSBoYXZlIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBidXQgdGhlIGNhbGwgaXMgcmVxdWlyZWQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCiAvKiBoZWxwZXIgZnVuY3Rpb25zIGZvciBjb3B5aW5nIG1ldGVyIHZhbHVlcyAqLwogc3RhdGljIGlubGluZSBpbnQgY29weV91MzJfbGUodm9pZCBfX3VzZXIgKmRlc3QsIHZvaWQgX19pb21lbSAqc3JjKQogewpAQCAtNDUzNiw3ICs0NTUzLDcgQEAKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX3BsYXliYWNrUm1zTGV2ZWwgKyBpICogOCArIDQsCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9wbGF5YmFja1Jtc0xldmVsICsgaSAqIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3U2NF9sZSgmcGVha19ybXMtPmlucHV0X3Jtc1tpXSwgCisJCWlmIChjb3B5X3U2NF9sZSgmcGVha19ybXMtPmlucHV0X3Jtc1tpXSwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX2lucHV0Um1zTGV2ZWwgKyBpICogOCArIDQsCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9pbnB1dFJtc0xldmVsICsgaSAqIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NTQ2LDcgKzQ1NjMsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2h3ZGVwX2lvY3RsKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGhkc3AgKmhkc3AgPSAoc3RydWN0IGhkc3AgKilody0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWh3LT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVycjsKIApAQCAtNDU4MCw3ICs0NTk3LDcgQEAKIAkJc3RydWN0IGhkc3BfY29uZmlnX2luZm8gaW5mbzsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJaW50IGk7Ci0JCQorCiAJCWVyciA9IGhkc3BfY2hlY2tfZm9yX2lvYm94KGhkc3ApOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC00NjE0LDcgKzQ2MzEsNyBAQAogCQkJaW5mby5hZF9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9hZF9nYWluKGhkc3ApOwogCQkJaW5mby5waG9uZV9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9waG9uZV9nYWluKGhkc3ApOwogCQkJaW5mby54bHJfYnJlYWtvdXRfY2FibGUgPSAodW5zaWduZWQgY2hhciloZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKTsKLQkJCisKIAkJfQogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMiB8fCBoZHNwLT5pb190eXBlID09IEg5NjUyKQogCQkJaW5mby5hbmFsb2dfZXh0ZW5zaW9uX2JvYXJkID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9hZWIoaGRzcCk7CkBAIC00NjI1LDcgKzQ2NDIsNyBAQAogCX0KIAljYXNlIFNORFJWX0hEU1BfSU9DVExfR0VUXzk2MzJfQUVCOiB7CiAJCXN0cnVjdCBoZHNwXzk2MzJfYWViIGg5NjMyX2FlYjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgIT0gSDk2MzIpIHJldHVybiAtRUlOVkFMOwogCQloOTYzMl9hZWIuYWViaSA9IGhkc3AtPnNzX2luX2NoYW5uZWxzIC0gSDk2MzJfU1NfQ0hBTk5FTFM7CiAJCWg5NjMyX2FlYi5hZWJvID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzIC0gSDk2MzJfU1NfQ0hBTk5FTFM7CkBAIC00NjM2LDcgKzQ2NTMsNyBAQAogCWNhc2UgU05EUlZfSERTUF9JT0NUTF9HRVRfVkVSU0lPTjogewogCQlzdHJ1Y3QgaGRzcF92ZXJzaW9uIGhkc3BfdmVyc2lvbjsKIAkJaW50IGVycjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgewogCQkJaWYgKChlcnIgPSBoZHNwX2dldF9pb2JveF92ZXJzaW9uKGhkc3ApKSA8IDApCkBAIC00NjUyLDcgKzQ2NjksNyBAQAogCQlzdHJ1Y3QgaGRzcF9maXJtd2FyZSBfX3VzZXIgKmZpcm13YXJlOwogCQl1MzIgX191c2VyICpmaXJtd2FyZV9kYXRhOwogCQlpbnQgZXJyOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gLUVJTlZBTDsKIAkJLyogU05EUlZfSERTUF9JT0NUTF9HRVRfVkVSU0lPTiBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKi8KIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSByZXR1cm4gLUVJTlZBTDsKQEAgLTQ2NjUsMjUgKzQ2ODIsMjUgQEAKIAogCQlpZiAoZ2V0X3VzZXIoZmlybXdhcmVfZGF0YSwgJmZpcm13YXJlLT5maXJtd2FyZV9kYXRhKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQkKKwogCQlpZiAoaGRzcF9jaGVja19mb3JfaW9ib3ggKGhkc3ApKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGhkc3AtPmZpcm13YXJlX2NhY2hlLCBmaXJtd2FyZV9kYXRhLCBzaXplb2YoaGRzcC0+ZmlybXdhcmVfY2FjaGUpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQorCiAJCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVDYWNoZWQ7CiAKIAkJaWYgKChlcnIgPSBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkpIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCQorCiAJCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkgewogCQkJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJCi0JCQlzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKGhkc3ApOwkJCisKKwkJCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CiAJCQlzbmRfaGRzcF9pbml0aWFsaXplX21pZGlfZmx1c2goaGRzcCk7Ci0JICAgIAorCiAJCQlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9hbHNhX2RldmljZXMoaGRzcC0+Y2FyZCwgaGRzcCkpIDwgMCkgewogCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlcnJvciBjcmVhdGluZyBhbHNhIGRldmljZXNcbiIpOwogCQkJCXJldHVybiBlcnI7CkBAIC00NzMwLDE4ICs0NzQ3LDE2IEBACiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHc7CiAJaW50IGVycjsKLQkKKwogCWlmICgoZXJyID0gc25kX2h3ZGVwX25ldyhjYXJkLCAiSERTUCBod2RlcCIsIDAsICZodykpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkJCisKIAloZHNwLT5od2RlcCA9IGh3OwogCWh3LT5wcml2YXRlX2RhdGEgPSBoZHNwOwogCXN0cmNweShody0+bmFtZSwgIkhEU1AgaHdkZXAgaW50ZXJmYWNlIik7CiAKLQlody0+b3BzLm9wZW4gPSBzbmRfaGRzcF9od2RlcF9kdW1teV9vcDsKIAlody0+b3BzLmlvY3RsID0gc25kX2hkc3BfaHdkZXBfaW9jdGw7Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2hkc3BfaHdkZXBfZHVtbXlfb3A7Ci0JCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NzQsMjQgKzQ3ODksMjQgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZW5hYmxlX2lvIChzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpbnQgaTsKLQkKKwogCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgMTAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZW5hYmxlX2lvIGZpZm9fd2FpdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgaGRzcC0+bWF4X2NoYW5uZWxzOyArK2kpIHsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9pbnB1dEVuYWJsZSArICg0ICogaSksIDEpOwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX291dHB1dEVuYWJsZSArICg0ICogaSksIDEpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKHN0cnVjdCBoZHNwICpoZHNwKQogewogCWludCBzdGF0dXMsIGFlYmlfY2hhbm5lbHMsIGFlYm9fY2hhbm5lbHM7Ci0JCisKIAlzd2l0Y2ggKGhkc3AtPmlvX3R5cGUpIHsKIAljYXNlIERpZ2lmYWNlOgogCQloZHNwLT5jYXJkX25hbWUgPSAiUk1FIEhhbW1lcmZhbGwgRFNQICsgRGlnaWZhY2UiOwpAQCAtNDgwNCw3ICs0ODE5LDcgQEAKIAkJaGRzcC0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgPSBIOTY1Ml9TU19DSEFOTkVMUzsKIAkJaGRzcC0+ZHNfaW5fY2hhbm5lbHMgPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMgPSBIOTY1Ml9EU19DSEFOTkVMUzsKIAkJYnJlYWs7Ci0JCisKIAljYXNlIEg5NjMyOgogCQlzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJCS8qIEhEU1BfQUVCeCBiaXRzIGFyZSBsb3cgd2hlbiBBRUIgYXJlIGNvbm5lY3RlZCAqLwpAQCAtNDgyNCw3ICs0ODM5LDcgQEAKIAkJaGRzcC0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgPSBNVUxUSUZBQ0VfU1NfQ0hBTk5FTFM7CiAJCWhkc3AtPmRzX2luX2NoYW5uZWxzID0gaGRzcC0+ZHNfb3V0X2NoYW5uZWxzID0gTVVMVElGQUNFX0RTX0NIQU5ORUxTOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogIAkJLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCiAJCWJyZWFrOwpAQCAtNDg0MCwxMiArNDg1NSwxMiBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jcmVhdGVfYWxzYV9kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaW50IGVycjsKLQkKKwogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX3BjbShjYXJkLCBoZHNwKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBjcmVhdGluZyBwY20gaW50ZXJmYWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JCisKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX21pZGkoY2FyZCwgaGRzcCwgMCkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3IgY3JlYXRpbmcgZmlyc3QgbWlkaSBpbnRlcmZhY2VcbiIpOwpAQCAtNDg3NiwxOSArNDg5MSwxOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3Igc2V0dGluZyBkZWZhdWx0IHZhbHVlc1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQotCQorCiAJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKSB7CiAJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIYW1tZXJmYWxsIERTUCIpOwotCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwgCisJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLAogCQkJaGRzcC0+cG9ydCwgaGRzcC0+aXJxKTsKLQkgICAgCisKIAkJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZXJyb3IgcmVnaXN0ZXJpbmcgY2FyZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWhkc3AtPnN0YXRlIHw9IEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg5OSw3ICs0OTE0LDcgQEAKIAljb25zdCBjaGFyICpmd2ZpbGU7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgZXJyOwotCQkKKwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCiAJCXJldHVybiAwOwogCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgewpAQCAtNDkwOCw3ICs0OTIzLDcgQEAKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKIAkJCXJldHVybiAwOwogCX0KLQkKKwogCS8qIGNhdXRpb246IG1heCBsZW5ndGggb2YgZmlybXdhcmUgZmlsZW5hbWUgaXMgMzAhICovCiAJc3dpdGNoIChoZHNwLT5pb190eXBlKSB7CiAJY2FzZSBNdWx0aWZhY2U6CkBAIC00OTQyLDEyICs0OTU3LDEyIEBACiAJbWVtY3B5KGhkc3AtPmZpcm13YXJlX2NhY2hlLCBmdy0+ZGF0YSwgc2l6ZW9mKGhkc3AtPmZpcm13YXJlX2NhY2hlKSk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCisKIAloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlQ2FjaGVkOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkJCisKIAlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKIAkJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC00OTk0LDE0ICs1MDA5LDE0IEBACiAJaGRzcC0+bWF4X2NoYW5uZWxzID0gMjY7CiAKIAloZHNwLT5jYXJkID0gY2FyZDsKLQkKKwogCXNwaW5fbG9ja19pbml0KCZoZHNwLT5sb2NrKTsKIAogCXRhc2tsZXRfaW5pdCgmaGRzcC0+bWlkaV90YXNrbGV0LCBoZHNwX21pZGlfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpaGRzcCk7Ci0JCisKIAlwY2lfcmVhZF9jb25maWdfd29yZChoZHNwLT5wY2ksIFBDSV9DTEFTU19SRVZJU0lPTiwgJmhkc3AtPmZpcm13YXJlX3Jldik7CiAJaGRzcC0+ZmlybXdhcmVfcmV2ICY9IDB4ZmY7Ci0JCisKIAkvKiBGcm9tIE1hcnRpbiBCam9lcm5zZW4gOgogCSAgICAiSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGNhcmQncyBsYXRlbmN5IHRpbWVyIHJlZ2lzdGVyIGluCiAJICAgIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBzZXQgdG8gYSB2YWx1ZSBtdWNoIGxhcmdlcgpAQCAtNTAxMCw3ICs1MDI1LDcgQEAKIAkgICAgdG8gaXRzIG1heGltdW0gMjU1IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc29tZSBjb21wdXRlcnMuIgogCSovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhkc3AtPnBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIDB4RkYpOwotCQorCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkgtRFNQIik7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlhpbGlueCBGUEdBIik7CiAKQEAgLTUwMjQsNyArNTAzOSw3IEBACiAJfSBlbHNlIHsKIAkJaGRzcC0+Y2FyZF9uYW1lID0gIlJNRSBIRFNQIDk2MzIiOwogCQloZHNwLT5tYXhfY2hhbm5lbHMgPSAxNjsKLQkJaXNfOTYzMiA9IDE7CQorCQlpc185NjMyID0gMTsKIAl9CiAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKQEAgLTUwNTMsMTIgKzUwNjgsMTIgQEAKIAogCWlmICgoZXJyID0gc25kX2hkc3BfaW5pdGlhbGl6ZV9tZW1vcnkoaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKLQlpZiAoIWlzXzk2NTIgJiYgIWlzXzk2MzIpIHsKLQkJLyogd2Ugd2FpdCAyIHNlY29uZHMgdG8gbGV0IGZyZXNobHkgaW5zZXJ0ZWQgY2FyZGJ1cyBjYXJkcyBkbyB0aGVpciBoYXJkd2FyZSBpbml0ICovCi0JCXNzbGVlcCgyKTsKIAotCQllcnIgPSBoZHNwX2NoZWNrX2Zvcl9pb2JveChoZHNwKTsKKwlpZiAoIWlzXzk2NTIgJiYgIWlzXzk2MzIpIHsKKwkJLyogd2Ugd2FpdCBhIG1heGltdW0gb2YgMTAgc2Vjb25kcyB0byBsZXQgZnJlc2hseQorCQkgKiBpbnNlcnRlZCBjYXJkYnVzIGNhcmRzIGRvIHRoZWlyIGhhcmR3YXJlIGluaXQgKi8KKwkJZXJyID0gaGRzcF93YWl0X2Zvcl9pb2JveChoZHNwLCAxMDAwLCAxMCk7CisKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC01MDgwLDM1ICs1MDk1LDM1IEBACiAJCQkJcmV0dXJuIGVycjsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgewotCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBGaXJtd2FyZSBhbHJlYWR5IHByZXNlbnQsIGluaXRpYWxpemluZyBjYXJkLlxuIik7CSAgICAKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRmlybXdhcmUgYWxyZWFkeSBwcmVzZW50LCBpbml0aWFsaXppbmcgY2FyZC5cbiIpOwogCQkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQogCQkJCWhkc3AtPmlvX3R5cGUgPSBNdWx0aWZhY2U7Ci0JCQllbHNlIAorCQkJZWxzZQogCQkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKIAkJfQogCX0KLQkKKwogCWlmICgoZXJyID0gc25kX2hkc3BfZW5hYmxlX2lvKGhkc3ApKSAhPSAwKQogCQlyZXR1cm4gZXJyOwotCQorCiAJaWYgKGlzXzk2NTIpCiAJICAgICAgICBoZHNwLT5pb190eXBlID0gSDk2NTI7Ci0JCisKIAlpZiAoaXNfOTYzMikKIAkJaGRzcC0+aW9fdHlwZSA9IEg5NjMyOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfaHdkZXAoY2FyZCwgaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKKwogCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CiAJc25kX2hkc3BfaW5pdGlhbGl6ZV9taWRpX2ZsdXNoKGhkc3ApOwogCi0JaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsJCisJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX2Fsc2FfZGV2aWNlcyhjYXJkLCBoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2ZyZWUoc3RydWN0IGhkc3AgKmhkc3ApCkBAIC01MTI0LDEzICs1MTM5LDEzIEBACiAJCWZyZWVfaXJxKGhkc3AtPmlycSwgKHZvaWQgKiloZHNwKTsKIAogCXNuZF9oZHNwX2ZyZWVfYnVmZmVycyhoZHNwKTsKLQkKKwogCWlmIChoZHNwLT5pb2Jhc2UpCiAJCWlvdW5tYXAoaGRzcC0+aW9iYXNlKTsKIAogCWlmIChoZHNwLT5wb3J0KQogCQlwY2lfcmVsZWFzZV9yZWdpb25zKGhkc3AtPnBjaSk7Ci0JCQorCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGhkc3AtPnBjaSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTU4LDggKzUxNzMsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JaWYgKCEoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwKSkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGhkc3ApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAloZHNwID0gKHN0cnVjdCBoZHNwICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfaGRzcF9jYXJkX2ZyZWU7CkBAIC01MTczLDcgKzUxOTAsNyBAQAogCX0KIAogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIYW1tZXJmYWxsIERTUCIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLCAKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwKIAkJaGRzcC0+cG9ydCwgaGRzcC0+aXJxKTsKIAogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggNzEyMzFjZi4uYmFjMmRjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC00MTAwLDEzICs0MTAwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3Aoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiB3ZSBoYXZlIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBidXQgdGhlIGNhbGwgaXMgcmVxdWlyZWQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9od2RlcF9pb2N0bChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTQyMTMsOSArNDIwNiw3IEBACiAJaHctPnByaXZhdGVfZGF0YSA9IGhkc3BtOwogCXN0cmNweShody0+bmFtZSwgIkhEU1BNIGh3ZGVwIGludGVyZmFjZSIpOwogCi0JaHctPm9wcy5vcGVuID0gc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfaGRzcG1faHdkZXBfaW9jdGw7Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTAzLDEwICs0NDk0LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWhkc3BtID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9oZHNwbV9jYXJkX2ZyZWU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKaW5kZXggMjU3MDkwNy4uYmM1MzlhYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwpAQCAtMjU5NCwxMSArMjU5NCwxMSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3JtZTk2NTIpKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9ybWU5NjUyKSwgJmNhcmQpOwogCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXJtZTk2NTIgPSAoc3RydWN0IHNuZF9ybWU5NjUyICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lOTY1Ml9jYXJkX2ZyZWU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCBkZjIwMDdlLi5iYWY2ZDhlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTEzODcsOSArMTM4Nyw4IEBACiAJaWYgKCFlbmFibGUpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCi0JcmMgPSAtRU5PTUVNOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCpzaXMpKTsKLQlpZiAoIWNhcmQpCisJcmMgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCpzaXMpLCAmY2FyZCk7CisJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU2lTNzAxOSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NvbmljdmliZXMuYyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKaW5kZXggY2Q0MDhiOC4uZDk4OTIxNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3NvbmljdmliZXMuYworKysgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCkBAIC0yNzMsNyArMjczLDggQEAKIAlvdXRsKGNvdW50LCBzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX0NPVU5UMCk7CiAJb3V0YigweDE4LCBzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX01PREUpOwogI2lmIDAKLQlwcmludGsoInByb2dyYW0gZG1hYTogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwgYWRkciwgaW5sKHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicHJvZ3JhbSBkbWFhOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLAorCSAgICAgICBhZGRyLCBpbmwoc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9BRERSMCkpOwogI2VuZGlmCiB9CiAKQEAgLTI4OCw3ICsyODksOCBAQAogCW91dGwoY291bnQsIHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfQ09VTlQwKTsKIAlvdXRiKDB4MTQsIHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfTU9ERSk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWFjOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLCBhZGRyLCBpbmwoc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9BRERSMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwcm9ncmFtIGRtYWM6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsCisJICAgICAgIGFkZHIsIGlubChzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CiAjZW5kaWYKIH0KIApAQCAtMzU1LDcxICszNTcsMTA0IEBACiAjaWYgMAogc3RhdGljIHZvaWQgc25kX3NvbmljdmliZXNfZGVidWcoc3RydWN0IHNvbmljdmliZXMgKiBzb25pYykKIHsKLQlwcmludGsoIlNWIFJFR1M6ICAgICAgICAgIElOREVYID0gMHglMDJ4ICAiLCBpbmIoU1ZfUkVHKHNvbmljLCBJTkRFWCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiU1YgUkVHUzogICAgICAgICAgSU5ERVggPSAweCUwMnggICIsIGluYihTVl9SRUcoc29uaWMsIElOREVYKSkpOwogCXByaW50aygiICAgICAgICAgICAgICAgICBTVEFUVVMgPSAweCUwMnhcbiIsIGluYihTVl9SRUcoc29uaWMsIFNUQVRVUykpKTsKLQlwcmludGsoIiAgMHgwMDogbGVmdCBpbnB1dCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDA6IGxlZnQgaW5wdXQgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDApKTsKIAlwcmludGsoIiAgMHgyMDogc3ludGggcmF0ZSBsb3cgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMCkpOwotCXByaW50aygiICAweDAxOiByaWdodCBpbnB1dCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAxKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMTogcmlnaHQgaW5wdXQgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMSkpOwogCXByaW50aygiICAweDIxOiBzeW50aCByYXRlIGhpZ2ggPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIxKSk7Ci0JcHJpbnRrKCIgIDB4MDI6IGxlZnQgQVVYMSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAyOiBsZWZ0IEFVWDEgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAyKSk7CiAJcHJpbnRrKCIgIDB4MjI6IEFEQyBjbG9jayAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjIpKTsKLQlwcmludGsoIiAgMHgwMzogcmlnaHQgQVVYMSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDM6IHJpZ2h0IEFVWDEgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDMpKTsKIAlwcmludGsoIiAgMHgyMzogQURDIGFsdCByYXRlICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMykpOwotCXByaW50aygiICAweDA0OiBsZWZ0IENEICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNDogbGVmdCBDRCAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNCkpOwogCXByaW50aygiICAweDI0OiBBREMgcGxsIE0gICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI0KSk7Ci0JcHJpbnRrKCIgIDB4MDU6IHJpZ2h0IENEICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA1OiByaWdodCBDRCAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA1KSk7CiAJcHJpbnRrKCIgIDB4MjU6IEFEQyBwbGwgTiAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjUpKTsKLQlwcmludGsoIiAgMHgwNjogbGVmdCBsaW5lICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDY6IGxlZnQgbGluZSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDYpKTsKIAlwcmludGsoIiAgMHgyNjogU3ludGggcGxsIE0gICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNikpOwotCXByaW50aygiICAweDA3OiByaWdodCBsaW5lICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA3KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNzogcmlnaHQgbGluZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNykpOwogCXByaW50aygiICAweDI3OiBTeW50aCBwbGwgTiAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI3KSk7Ci0JcHJpbnRrKCIgIDB4MDg6IE1JQyAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDgpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA4OiBNSUMgICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA4KSk7CiAJcHJpbnRrKCIgIDB4Mjg6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjgpKTsKLQlwcmludGsoIiAgMHgwOTogR2FtZSBwb3J0ICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDk6IEdhbWUgcG9ydCAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDkpKTsKIAlwcmludGsoIiAgMHgyOTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyOSkpOwotCXByaW50aygiICAweDBhOiBsZWZ0IHN5bnRoICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBhKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwYTogbGVmdCBzeW50aCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYSkpOwogCXByaW50aygiICAweDJhOiBNUFU0MDEgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJhKSk7Ci0JcHJpbnRrKCIgIDB4MGI6IHJpZ2h0IHN5bnRoICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBiOiByaWdodCBzeW50aCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBiKSk7CiAJcHJpbnRrKCIgIDB4MmI6IGRyaXZlIGN0cmwgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmIpKTsKLQlwcmludGsoIiAgMHgwYzogbGVmdCBBVVgyICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGM6IGxlZnQgQVVYMiAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGMpKTsKIAlwcmludGsoIiAgMHgyYzogU1JTIHNwYWNlICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyYykpOwotCXByaW50aygiICAweDBkOiByaWdodCBBVVgyICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBkKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwZDogcmlnaHQgQVVYMiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZCkpOwogCXByaW50aygiICAweDJkOiBTUlMgY2VudGVyICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJkKSk7Ci0JcHJpbnRrKCIgIDB4MGU6IGxlZnQgYW5hbG9nICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBlOiBsZWZ0IGFuYWxvZyAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBlKSk7CiAJcHJpbnRrKCIgIDB4MmU6IHdhdmUgc291cmNlICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmUpKTsKLQlwcmludGsoIiAgMHgwZjogcmlnaHQgYW5hbG9nICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGY6IHJpZ2h0IGFuYWxvZyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGYpKTsKIAlwcmludGsoIiAgMHgyZjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyZikpOwotCXByaW50aygiICAweDEwOiBsZWZ0IFBDTSAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMDogbGVmdCBQQ00gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMCkpOwogCXByaW50aygiICAweDMwOiBhbmFsb2cgcG93ZXIgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMwKSk7Ci0JcHJpbnRrKCIgIDB4MTE6IHJpZ2h0IFBDTSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDExOiByaWdodCBQQ00gICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDExKSk7CiAJcHJpbnRrKCIgIDB4MzE6IGFuYWxvZyBwb3dlciAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzEpKTsKLQlwcmludGsoIiAgMHgxMjogRE1BIGRhdGEgZm9ybWF0ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTI6IERNQSBkYXRhIGZvcm1hdCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTIpKTsKIAlwcmludGsoIiAgMHgzMjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMikpOwotCXByaW50aygiICAweDEzOiBQL0MgZW5hYmxlICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEzKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMzogUC9DIGVuYWJsZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMykpOwogCXByaW50aygiICAweDMzOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMzKSk7Ci0JcHJpbnRrKCIgIDB4MTQ6IFUvRCBidXR0b24gICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE0OiBVL0QgYnV0dG9uICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE0KSk7CiAJcHJpbnRrKCIgIDB4MzQ6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzQpKTsKLQlwcmludGsoIiAgMHgxNTogcmV2aXNpb24gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTU6IHJldmlzaW9uICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTUpKTsKIAlwcmludGsoIiAgMHgzNTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNSkpOwotCXByaW50aygiICAweDE2OiBBREMgb3V0cHV0IGN0cmwgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNjogQURDIG91dHB1dCBjdHJsID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNikpOwogCXByaW50aygiICAweDM2OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM2KSk7Ci0JcHJpbnRrKCIgIDB4MTc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTcpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE3OiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE3KSk7CiAJcHJpbnRrKCIgIDB4Mzc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzcpKTsKLQlwcmludGsoIiAgMHgxODogRE1BIEEgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTg6IERNQSBBIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTgpKTsKIAlwcmludGsoIiAgMHgzODogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzOCkpOwotCXByaW50aygiICAweDE5OiBETUEgQSBsb3dlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE5KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxOTogRE1BIEEgbG93ZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOSkpOwogCXByaW50aygiICAweDM5OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM5KSk7Ci0JcHJpbnRrKCIgIDB4MWE6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFhOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFhKSk7CiAJcHJpbnRrKCIgIDB4M2E6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2EpKTsKLQlwcmludGsoIiAgMHgxYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWI6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWIpKTsKIAlwcmludGsoIiAgMHgzYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzYikpOwotCXByaW50aygiICAweDFjOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFjKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxYzogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYykpOwogCXByaW50aygiICAweDNjOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNjKSk7Ci0JcHJpbnRrKCIgIDB4MWQ6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFkOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFkKSk7CiAJcHJpbnRrKCIgIDB4M2Q6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2QpKTsKLQlwcmludGsoIiAgMHgxZTogUENNIHJhdGUgbG93ICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWU6IFBDTSByYXRlIGxvdyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWUpKTsKIAlwcmludGsoIiAgMHgzZTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzZSkpOwotCXByaW50aygiICAweDFmOiBQQ00gcmF0ZSBoaWdoICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFmKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxZjogUENNIHJhdGUgaGlnaCAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZikpOwogCXByaW50aygiICAweDNmOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNmKSk7CiB9CiAKQEAgLTQ3Niw4ICs1MTEsOCBAQAogCSpyZXNfbSA9IG07CiAJKnJlc19uID0gbjsKICNpZiAwCi0JcHJpbnRrKCJtZXRyaWMgPSAlaSwgeG0gPSAlaSwgeG4gPSAlaVxuIiwgbWV0cmljLCB4bSwgeG4pOwotCXByaW50aygicGxsOiBtID0gMHgleCwgciA9IDB4JXgsIG4gPSAweCV4XG4iLCByZWcsIG0sIHIsIG4pOworCXByaW50ayhLRVJOX0RFQlVHICJtZXRyaWMgPSAlaSwgeG0gPSAlaSwgeG4gPSAlaVxuIiwgbWV0cmljLCB4bSwgeG4pOworCXByaW50ayhLRVJOX0RFQlVHICJwbGw6IG0gPSAweCV4LCByID0gMHgleCwgbiA9IDB4JXhcbiIsIHJlZywgbSwgciwgbik7CiAjZW5kaWYKIH0KIApAQCAtMTQyMyw5ICsxNDU4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgNTsgaWR4KyspIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIGlkeCkgPT0gMCB8fAogCQkgICAgIShwY2lfcmVzb3VyY2VfZmxhZ3MocGNpLCBpZHgpICYgSU9SRVNPVVJDRV9JTykpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCBkOTRiMTZmLi4yMWNlZjk3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC04OSw5ICs4OSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfdHJpZGVudF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgIHBjbV9jaGFubmVsc1tkZXZdLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwppbmRleCBjNjEyYjQzLi5hOWRhOWMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwpAQCAtNjgsNDAgKzY4LDQwIEBACiB7CiAJdW5zaWduZWQgaW50IHZhbCwgdG1wOwogCi0JcHJpbnRrKCJUcmlkZW50IHZvaWNlICVpOlxuIiwgdm9pY2UpOworCXByaW50ayhLRVJOX0RFQlVHICJUcmlkZW50IHZvaWNlICVpOlxuIiwgdm9pY2UpOwogCW91dGIodm9pY2UsIFRSSURfUkVHKHRyaWRlbnQsIFQ0RF9MRk9fR0NfQ0lSKSk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0xCQSkpOwotCXByaW50aygiTEJBOiAweCV4XG4iLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJMQkE6IDB4JXhcbiIsIHZhbCk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQykpOwotCXByaW50aygiR1ZTZWw6ICVpXG4iLCB2YWwgPj4gMzEpOwotCXByaW50aygiUGFuOiAweCV4XG4iLCAodmFsID4+IDI0KSAmIDB4N2YpOwotCXByaW50aygiVm9sOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4ZmYpOwotCXByaW50aygiQ1RSTDogMHgleFxuIiwgKHZhbCA+PiAxMikgJiAweDBmKTsKLQlwcmludGsoIkVDOiAweCV4XG4iLCB2YWwgJiAweDBmZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJHVlNlbDogJWlcbiIsIHZhbCA+PiAzMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBhbjogMHgleFxuIiwgKHZhbCA+PiAyNCkgJiAweDdmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVm9sOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4ZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJDVFJMOiAweCV4XG4iLCAodmFsID4+IDEyKSAmIDB4MGYpOworCXByaW50ayhLRVJOX0RFQlVHICJFQzogMHgleFxuIiwgdmFsICYgMHgwZmZmKTsKIAlpZiAodHJpZGVudC0+ZGV2aWNlICE9IFRSSURFTlRfREVWSUNFX0lEX05YKSB7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9EWF9DU09fQUxQSEFfRk1TKSk7Ci0JCXByaW50aygiQ1NPOiAweCV4XG4iLCB2YWwgPj4gMTYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ1NPOiAweCV4XG4iLCB2YWwgPj4gMTYpOwogCQlwcmludGsoIkFscGhhOiAweCV4XG4iLCAodmFsID4+IDQpICYgMHgwZmZmKTsKLQkJcHJpbnRrKCJGTVM6IDB4JXhcbiIsIHZhbCAmIDB4MGYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRk1TOiAweCV4XG4iLCB2YWwgJiAweDBmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0RYX0VTT19ERUxUQSkpOwotCQlwcmludGsoIkVTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKLQkJcHJpbnRrKCJEZWx0YTogMHgleFxuIiwgdmFsICYgMHhmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkVTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRlbHRhOiAweCV4XG4iLCB2YWwgJiAweGZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfRFhfRk1DX1JWT0xfQ1ZPTCkpOwogCX0gZWxzZSB7CQkvLyBUUklERU5UX0RFVklDRV9JRF9OWAogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfREVMVEFfQ1NPKSk7CiAJCXRtcCA9ICh2YWwgPj4gMjQpICYgMHhmZjsKLQkJcHJpbnRrKCJDU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ1NPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0RFTFRBX0VTTykpOwogCQl0bXAgfD0gKHZhbCA+PiAxNikgJiAweGZmMDA7Ci0JCXByaW50aygiRGVsdGE6IDB4JXhcbiIsIHRtcCk7Ci0JCXByaW50aygiRVNPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRlbHRhOiAweCV4XG4iLCB0bXApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRVNPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0FMUEhBX0ZNU19GTUNfUlZPTF9DVk9MKSk7Ci0JCXByaW50aygiQWxwaGE6IDB4JXhcbiIsIHZhbCA+PiAyMCk7Ci0JCXByaW50aygiRk1TOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4MGYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQWxwaGE6IDB4JXhcbiIsIHZhbCA+PiAyMCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJGTVM6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHgwZik7CiAJfQotCXByaW50aygiRk1DOiAweCV4XG4iLCAodmFsID4+IDE0KSAmIDMpOwotCXByaW50aygiUlZvbDogMHgleFxuIiwgKHZhbCA+PiA3KSAmIDB4N2YpOwotCXByaW50aygiQ1ZvbDogMHgleFxuIiwgdmFsICYgMHg3Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkZNQzogMHgleFxuIiwgKHZhbCA+PiAxNCkgJiAzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUlZvbDogMHgleFxuIiwgKHZhbCA+PiA3KSAmIDB4N2YpOworCXByaW50ayhLRVJOX0RFQlVHICJDVm9sOiAweCV4XG4iLCB2YWwgJiAweDdmKTsKIH0KICNlbmRpZgogCkBAIC00OTYsMTIgKzQ5NiwxNyBAQAogCW91dGwocmVnc1s0XSwgVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpOwogCiAjaWYgMAotCXByaW50aygid3JpdHRlbiAlaSBjaGFubmVsOlxuIiwgdm9pY2UtPm51bWJlcik7Ci0JcHJpbnRrKCIgIHJlZ3NbMF0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDApKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbMV0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMV0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDQpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbMl0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMl0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDgpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbM10gPSAweCV4LzB4JXhcbiIsIHJlZ3NbM10sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDEyKSkpOwotCXByaW50aygiICByZWdzWzRdID0gMHgleC8weCV4XG4iLCByZWdzWzRdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAid3JpdHRlbiAlaSBjaGFubmVsOlxuIiwgdm9pY2UtPm51bWJlcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1swXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1swXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzFdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzFdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyA0KSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbMl0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbMl0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDgpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1szXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1szXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTIpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1s0XSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1s0XSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTYpKSk7CiAjZW5kaWYKIH0KIApAQCAtNTgzLDcgKzU4OCw3IEBACiAJCW91dGIodm9pY2UtPlZvbCA+PiAyLCBUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMgKyAyKSk7CiAJCWJyZWFrOwogCWNhc2UgVFJJREVOVF9ERVZJQ0VfSURfU0k3MDE4OgotCQkvLyBwcmludGsoInZvaWNlLT5Wb2wgPSAweCV4XG4iLCB2b2ljZS0+Vm9sKTsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgInZvaWNlLT5Wb2wgPSAweCV4XG4iLCB2b2ljZS0+Vm9sKTsgKi8KIAkJb3V0dygodm9pY2UtPkNUUkwgPDwgMTIpIHwgdm9pY2UtPlZvbCwKIAkJICAgICBUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMpKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCAxYWFmZTk1Li44MDliMjMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTQ2Niw3ICs0NjYsMTAgQEAKIAkJCQkJZmxhZyA9IFZJQV9UQkxfQklUX0ZMQUc7IC8qIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJfSBlbHNlCiAJCQkJZmxhZyA9IDA7IC8qIHBlcmlvZCBjb250aW51ZXMgdG8gdGhlIG5leHQgKi8KLQkJCS8vIHByaW50aygidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkIChyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgIgorCQkJICAgICAgICIocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCSovCiAJCQkoKHUzMiAqKWRldi0+dGFibGUuYXJlYSlbKGlkeDw8MSkgKyAxXSA9IGNwdV90b19sZTMyKHIgfCBmbGFnKTsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0ub2Zmc2V0ID0gb2ZzOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5zaXplID0gcjsKQEAgLTIzNjAsMTQgKzIzNjMsMTQgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwOTk2LCAiRVNDIE1vYm8iLCBWSUFfRFhTXzQ4SyksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4MGE4MSwgIkVDUyBLN1ZUQTMgdjguMCIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwYTg1LCAiRUNTIEw3Vk1NMiIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMCwgIkVTQyBLOCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMTksICJFU0MgSzgiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4YWEwMSwgIkVTQyBLOFQ4OTAtQSIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDMzLCAiQWNlciBJbnNwaXJlIDEzNTNMTSIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDQ2LCAiQWNlciBBc3BpcmUgMTUyNCBXTE1pIiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAwLCAiQVNVUyBBNy9BOCIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA3MSwgMCwgIkRpdmVyc2UgTm90ZWJvb2siLCBWSUFfRFhTX05PX1ZSQSksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDQzLCAiQVNVUyBBNy9BOCIsIFZJQV9EWFNfTk9fVlJBKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNzEsICJEaXZlcnNlIE5vdGVib29rIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDExOGUsICJGU0MgTGFwdG9wIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxMTA2LCAwLCAiQVNSb2NrIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTEwNiwgIkFTUm9jayIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhhMjMxLCAiU2h1dHRsZSBBSzMxdjIiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YTIzMiwgIlNodXR0bGUiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YzE2MCwgIlNodXR0bGUgU2s0MUciLCBWSUFfRFhTX1NSQyksCkBAIC0yMzc1LDcgKzIzNzgsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDM4MDAsICJNU0kgS1QyNjYiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzEyMCwgIk1TSSBLVDRWIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDcxNDIsICJNU0kgSzhNTS1WIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAwLCAiTVNJIE1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNDYyLCAiTVNJIE1vYm8iLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTQwMSwgIkFCSVQgS0Q3KC1SQUlEKSIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDExLCAiQUJJVCBWQS0yMCIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDEzLCAiQUJJVCBLVjggUHJvIiwgVklBX0RYU19FTkFCTEUpLApAQCAtMjM4OSwxMSArMjM5MiwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwMzIsICJtNjgweCBtYWNoaW5lcyIsIFZJQV9EWFNfNDhLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhlMDA0LCAiUEIgRWFzeU5vdGUgMzE3NCIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTY5NSwgMHgzMDA1LCAiRVBvWCBFUC04SzlBIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxNjk1LCAwLCAiRVBvWCBtb2JvIiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxNmYzLCAwLCAiSmV0d2F5IEs4IiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAwLCAiRlNDIExhcHRvcCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE2OTUsICJFUG9YIG1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNmYzLCAiSmV0d2F5IEs4IiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTczNCwgIkZTQyBMYXB0b3AiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MzA1OSwgIkFTUm9jayBLN1ZNMiIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMCwgIkFTUm9jayBtb2JvIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTg0OSwgIkFTUm9jayBtb2JvIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxOTE5LCAweDIwMGEsICJTb2x0ZWsgU0wtSzgiLCAgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHg0MDA1LCAweDQ3MTAsICJNU0kgSzdUMjY2IiwgVklBX0RYU19TUkMpLAogCXsgfSAvKiB0ZXJtaW5hdG9yICovCkBAIC0yNDMzLDkgKzI0MzYsOSBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCXN3aXRjaCAoY2FyZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA1YmQ3OWQyLi4wZDU0ZTM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTMyOCw3ICszMjgsMTAgQEAKIAkJCQkJZmxhZyA9IFZJQV9UQkxfQklUX0ZMQUc7IC8qIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJfSBlbHNlCiAJCQkJZmxhZyA9IDA7IC8qIHBlcmlvZCBjb250aW51ZXMgdG8gdGhlIG5leHQgKi8KLQkJCS8vIHByaW50aygidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkIChyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgIgorCQkJICAgICAgICIocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCSovCiAJCQkoKHUzMiAqKWRldi0+dGFibGUuYXJlYSlbKGlkeDw8MSkgKyAxXSA9IGNwdV90b19sZTMyKHIgfCBmbGFnKTsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0ub2Zmc2V0ID0gb2ZzOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5zaXplID0gcjsKQEAgLTExNjcsOSArMTE3MCw5IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmRfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAJc3dpdGNoIChjYXJkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggYWNjMzUyZi4uZmM5MTM2YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTIwNCw5ICsyMDQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAoKGludClwY2lfaWQtPmRyaXZlcl9kYXRhKSB7CiAJY2FzZSBWWF9QQ0lfVlgyMjJfT0xEOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCmluZGV4IDdlODdmMzkuLmMwZWZlNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKQEAgLTEwNyw3ICsxMDcsOSBAQAogc3RhdGljIHZvaWQgdngyX291dGIoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCW91dGIodmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7Ci0JLy9wcmludGsoIm91dGI6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJvdXRiOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJKi8KIH0KIAogLyoqCkBAIC0xMjYsNyArMTI4LDkgQEAKICAqLwogc3RhdGljIHZvaWQgdngyX291dGwoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCB2YWwpCiB7Ci0JLy8gcHJpbnRrKCJvdXRsOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAib3V0bDogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCSovCiAJb3V0bCh2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKaW5kZXggMjYzMWE1NS4uNGFmNjY2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCkBAIC0xODcsOSArMTg3LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaV9pZC0+ZGV2aWNlKSB7CiAJY2FzZSAweDAwMDQ6IHN0ciA9ICJZTUY3MjQiOyAgbW9kZWwgPSAiRFMtMSI7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IDkwZDBkNjIuLjJmMDkyNTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTMxOCw3ICszMTgsMTIgQEAKIAkJeXBjbS0+cGVyaW9kX3BvcyArPSBkZWx0YTsKIAkJeXBjbS0+bGFzdF9wb3MgPSBwb3M7CiAJCWlmICh5cGNtLT5wZXJpb2RfcG9zID49IHlwY20tPnBlcmlvZF9zaXplKSB7Ci0JCQkvLyBwcmludGsoImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwgY2hpcC0+YWN0aXZlX2JhbmssIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLAorCQkJICAgICAgIGNoaXAtPmFjdGl2ZV9iYW5rLAorCQkJICAgICAgIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkqLwogCQkJeXBjbS0+cGVyaW9kX3BvcyAlPSB5cGNtLT5wZXJpb2Rfc2l6ZTsKIAkJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHlwY20tPnN1YnN0cmVhbSk7CkBAIC0zNjYsNyArMzcxLDEyIEBACiAJCXlwY20tPmxhc3RfcG9zID0gcG9zOwogCQlpZiAoeXBjbS0+cGVyaW9kX3BvcyA+PSB5cGNtLT5wZXJpb2Rfc2l6ZSkgewogCQkJeXBjbS0+cGVyaW9kX3BvcyAlPSB5cGNtLT5wZXJpb2Rfc2l6ZTsKLQkJCS8vIHByaW50aygiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLCBjaGlwLT5hY3RpdmVfYmFuaywgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsCisJCQkgICAgICAgY2hpcC0+YWN0aXZlX2JhbmssCisJCQkgICAgICAgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCSovCiAJCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCQkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCA4MTlhYWFhLi43ZGVhNzRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTkxLDcgKzkxLDcgQEAKICAqLwogc3RhdGljIGludCBzbmRfcGRhY2ZfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CkBAIC0xMTIsMjAgKzExMiwyMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsgLyogZGlzYWJsZWQgZXhwbGljaXRseSAqLwogCiAJLyogb2ssIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInBkYWNmOiBjYW5ub3QgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXBkYWNmID0gc25kX3BkYWNmX2NyZWF0ZShjYXJkKTsKLQlpZiAoISBwZGFjZikKLQkJcmV0dXJuIC1FSU87CisJaWYgKCFwZGFjZikgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQlpZiAoc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBwZGFjZiwgJm9wcykgPCAwKSB7CisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBwZGFjZiwgJm9wcyk7CisJaWYgKGVyciA8IDApIHsKIAkJa2ZyZWUocGRhY2YpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYwppbmRleCBkZmE0MGIwLi41ZDJhZmEwIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCkBAIC04MiwxNCArODIsMjEgQEAKICNpZiAwCiB2b2lkIHBkYWNmX2R1bXAoc3RydWN0IHNuZF9wZGFjZiAqY2hpcCkKIHsKLQlwcmludGsoIlBEQVVESU9DRiBEVU1QICgweCVseCk6XG4iLCBjaGlwLT5wb3J0KTsKLQlwcmludGsoIldQRCAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCkpOwotCXByaW50aygiUkRQICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfUkRQKSk7Ci0JcHJpbnRrKCJUQ1IgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19UQ1IpKTsKLQlwcmludGsoIlNDUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1NDUikpOwotCXByaW50aygiSVNSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSVNSKSk7Ci0JcHJpbnRrKCJJRVIgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JRVIpKTsKLQlwcmludGsoIkFLX0lGUiAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0FLX0lGUikpOworCXByaW50ayhLRVJOX0RFQlVHICJQREFVRElPQ0YgRFVNUCAoMHglbHgpOlxuIiwgY2hpcC0+cG9ydCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIldQRCAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCkpOworCXByaW50ayhLRVJOX0RFQlVHICJSRFAgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19SRFApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVENSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfVENSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlNDUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1NDUikpOworCXByaW50ayhLRVJOX0RFQlVHICJJU1IgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JU1IpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSUVSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSUVSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkFLX0lGUiAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0FLX0lGUikpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2lycS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKaW5kZXggZWE5MDNjOC4uZGNkMzIyMCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCiAJcmRwID0gaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1JEUCk7CiAJd2RwID0gaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCk7Ci0JLy8gcHJpbnRrKCJUQVNLTEVUOiByZHAgPSAleCwgd2RwID0gJXhcbiIsIHJkcCwgd2RwKTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiVEFTS0xFVDogcmRwID0gJXgsIHdkcCA9ICV4XG4iLCByZHAsIHdkcCk7ICovCiAJc2l6ZSA9IHdkcCAtIHJkcDsKIAlpZiAoc2l6ZSA8IDApCiAJCXNpemUgKz0gMHgxMDAwMDsKQEAgLTMyMSw1ICszMjEsNSBAQAogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkvLyBwcmludGsoIlRBU0tMRVQ6IGVuZFxuIik7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgIlRBU0tMRVQ6IGVuZFxuIik7ICovCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDcwNjYwMmEuLjc0NDVjYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC0xMzAsMjMgKzEzMCwyNiBAQAogLyoKICAqIGNyZWF0ZSB2eHBvY2tldCBpbnN0YW5jZQogICovCi1zdGF0aWMgc3RydWN0IHNuZF92eHBvY2tldCAqc25kX3Z4cG9ja2V0X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBpYmwsCi0JCQkJCSAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCitzdGF0aWMgaW50IHNuZF92eHBvY2tldF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgaWJsLAorCQkJICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLAorCQkJICAgIHN0cnVjdCBzbmRfdnhwb2NrZXQgKipjaGlwX3JldCkKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcDsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHA7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CiAJCS5kZXZfZnJlZSA9CXNuZF92eHBvY2tldF9kZXZfZnJlZSwKIAl9OworCWludCBlcnI7CiAKIAljaGlwID0gc25kX3Z4X2NyZWF0ZShjYXJkLCAmdnhwb2NrZXRfaHcsICZzbmRfdnhwb2NrZXRfb3BzLAogCQkJICAgICBzaXplb2Yoc3RydWN0IHNuZF92eHBvY2tldCkgLSBzaXplb2Yoc3RydWN0IHZ4X2NvcmUpKTsKLQlpZiAoISBjaGlwKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcykgPCAwKSB7CisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkgewogCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQogCWNoaXAtPmlibC5zaXplID0gaWJsOwogCkBAIC0xNjksNyArMTcyLDggQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotCXJldHVybiB2eHA7CisJKmNoaXBfcmV0ID0gdnhwOworCXJldHVybiAwOwogfQogCiAKQEAgLTI5Miw3ICsyOTYsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHA7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAogCS8qIGZpbmQgYW4gZW1wdHkgc2xvdCBmcm9tIHRoZSBjYXJkIGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewpAQCAtMzA3LDE2ICszMTEsMTYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7IC8qIGRpc2FibGVkIGV4cGxpY2l0bHkgKi8KIAogCS8qIG9rLCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ2eHBvY2tldDogY2Fubm90IGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQl2eHAgPSBzbmRfdnhwb2NrZXRfbmV3KGNhcmQsIGlibFtpXSwgcF9kZXYpOwotCWlmICghIHZ4cCkgeworCWVyciA9IHNuZF92eHBvY2tldF9uZXcoY2FyZCwgaWJsW2ldLCBwX2RldiwgJnZ4cCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCWNhcmQtPnByaXZhdGVfZGF0YSA9IHZ4cDsKIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL0tjb25maWcgYi9zb3VuZC9wcGMvS2NvbmZpZwppbmRleCA3NzdkZTJiLi5iZDIzMzhhIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMTMsNiArMTMsNyBAQAogCXRyaXN0YXRlICJQb3dlck1hYyAoQVdBQ1MsIERBQ0EsIEJ1cmd1bmR5LCBUdW1ibGVyLCBLZXl3ZXN0KSIKIAlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVCAmJiBQUENfUE1BQwogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9WTUFTVEVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIHNvdW5kIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2F3YWNzLmMgYi9zb3VuZC9wcGMvYXdhY3MuYwppbmRleCA3YmQzM2U2Li44MGRmOWIxIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvYXdhY3MuYworKysgYi9zb3VuZC9wcGMvYXdhY3MuYwpAQCAtNjA4LDkgKzYwOCwxMiBAQAogCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTElORSwgMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19sb1tdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfVk9MVU1FKCJMaW5lIG91dCBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKLQlBV0FDU19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCA1LCA2LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hY1tdIF9faW5pdGRhdGEgPSB7CisJQVdBQ1NfVk9MVU1FKCJQbGF5LXRocm91Z2ggUGxheWJhY2sgVm9sdW1lIiwgNSwgNiwgMSksCiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCiB9OwogCkBAIC02MjcsNiArNjMwLDEwIEBACiAJQVdBQ1NfU1dJVENIKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX01JQywgMCksCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM1NTAwW10gX19pbml0ZGF0YSA9IHsKKwlBV0FDU19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hY1tdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMiwgNiwgMSksCiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCkBAIC02NDUsMTIgKzY1MiwxOSBAQAogCUFXQUNTX1NXSVRDSCgiTWljIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0xJTkUsIDApLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDBbXSBfX2luaXRkYXRhID0geworCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfQ0QsIDApLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zdyBfX2luaXRkYXRhID0KIEFXQUNTX1NXSVRDSCgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfaW1hYyBfX2luaXRkYXRhID0KIEFXQUNTX1NXSVRDSCgiTGluZSBvdXQgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19wbWFjNTUwMCBfX2luaXRkYXRhID0KK0FXQUNTX1NXSVRDSCgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taWNfYm9vc3RbXSBfX2luaXRkYXRhID0gewogCUFXQUNTX1NXSVRDSCgiTWljIEJvb3N0IENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfR0FJTkxJTkUsIDApLAogfTsKQEAgLTc2NiwxMiArNzgwLDE2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLSNkZWZpbmUgSVNfUE03NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsNzUwMCIpKQorI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAorCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKKwkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKKyNkZWZpbmUgSVNfUE01NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQogI2RlZmluZSBJU19CRUlHRSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCiAjZGVmaW5lIElTX0lNQUMxIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCiAjZGVmaW5lIElTX0lNQUMyIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAogCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCiAjZGVmaW5lIElTX0c0QUdQIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCisjZGVmaW5lIElTX0xPTUJBUkQgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAKIHN0YXRpYyBpbnQgaW1hYzEsIGltYWMyOwogCkBAIC04NTgsMTAgKzg3NiwxNCBAQAogc25kX3BtYWNfYXdhY3NfaW5pdChzdHJ1Y3Qgc25kX3BtYWMgKmNoaXApCiB7CiAJaW50IHBtNzUwMCA9IElTX1BNNzUwMDsKKwlpbnQgcG01NTAwID0gSVNfUE01NTAwOwogCWludCBiZWlnZSA9IElTX0JFSUdFOwogCWludCBnNGFncCA9IElTX0c0QUdQOworCWludCBsb21iYXJkID0gSVNfTE9NQkFSRDsKIAlpbnQgaW1hYzsKIAlpbnQgZXJyLCB2b2w7CisJc3RydWN0IHNuZF9rY29udHJvbCAqdm1hc3Rlcl9zdywgKnZtYXN0ZXJfdm9sOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlcl92b2wsICpzcGVha2VyX3ZvbDsKIAogCWltYWMxID0gSVNfSU1BQzE7CiAJaW1hYzIgPSBJU19JTUFDMjsKQEAgLTkxNSw3ICs5MzcsNyBAQAogCQkvKiBzZXQgaGVhZHBob25lLWphY2sgZGV0ZWN0aW9uIGJpdCAqLwogCQlzd2l0Y2ggKGNoaXAtPm1vZGVsKSB7CiAJCWNhc2UgUE1BQ19BV0FDUzoKLQkJCWNoaXAtPmhwX3N0YXRfbWFzayA9IHBtNzUwMCA/IE1BU0tfSERQQ09OTgorCQkJY2hpcC0+aHBfc3RhdF9tYXNrID0gcG03NTAwIHx8IHBtNTUwMCA/IE1BU0tfSERQQ09OTgogCQkJCTogTUFTS19MT0NPTk47CiAJCQlicmVhazsKIAkJY2FzZSBQTUFDX1NDUkVBTUVSOgpAQCAtOTU0LDcgKzk3Niw3IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKGJlaWdlIHx8IGc0YWdwKQogCQk7Ci0JZWxzZSBpZiAoY2hpcC0+bW9kZWwgPT0gUE1BQ19TQ1JFQU1FUikKKwllbHNlIGlmIChjaGlwLT5tb2RlbCA9PSBQTUFDX1NDUkVBTUVSIHx8IHBtNTUwMCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzMiksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzMik7CiAJZWxzZSBpZiAoIXBtNzUwMCkKQEAgLTk2MiwxOSArOTg0LDM1IEBACiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJaWYgKHBtNTUwMCkgeworCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKKwkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDApLAorCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCWlmIChwbTc1MDApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM3NTAwKSwKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzc1MDApOworCWVsc2UgaWYgKHBtNTUwMCkKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJICAgIChtYXN0ZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNTUwMCwKKwkJCQkJCWNoaXApKSk7CiAJZWxzZSBpZiAoYmVpZ2UpCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2JlaWdlKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfYmVpZ2UpOwotCWVsc2UgaWYgKGltYWMpCisJZWxzZSBpZiAoaW1hYyB8fCBsb21iYXJkKSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCSAgICAobWFzdGVyX3ZvbCA9IHNuZF9jdGxfbmV3MShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfbG8sCisJCQkJCQljaGlwKSkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWMpLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjKTsKLQllbHNlIGlmIChnNGFncCkKKwl9IGVsc2UgaWYgKGc0YWdwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19nNGFncCksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2c0YWdwKTsKQEAgLTk4NCw4ICsxMDIyLDEwIEBACiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoKHBtNzUwMCB8fCBpbWFjIHx8IGc0YWdwKQorCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoKHBtNzUwMCB8fCBpbWFjIHx8IGc0YWdwIHx8IGxvbWJhcmQpCiAJCQk/ICZzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfaW1hYworCQkJOiBwbTU1MDAKKwkJCT8gJnNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19wbWFjNTUwMAogCQkJOiAmc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3LCBjaGlwKTsKIAllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMTcsOCArMTA1Nyw5IEBACiAjZW5kaWYgLyogUE1BQ19BTVBfQVZBSUwgKi8KIAl7CiAJCS8qIHJvdXRlIEEgPSBoZWFkcGhvbmUsIHJvdXRlIEMgPSBzcGVha2VyICovCi0JCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLCBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sKSwKLQkJCQkJc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wpOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkgICAgKHNwZWFrZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sLAorCQkJCQkJY2hpcCkpKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQljaGlwLT5zcGVha2VyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MShpbWFjMQpAQCAtMTAzMSw2ICsxMDcyLDMzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChwbTU1MDAgfHwgaW1hYyB8fCBsb21iYXJkKSB7CisJCXZtYXN0ZXJfc3cgPSBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoCisJCQkiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICh1bnNpZ25lZCBpbnQgKikgTlVMTCk7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKHZtYXN0ZXJfc3csCisJCQkJCQkgY2hpcC0+bWFzdGVyX3N3X2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQodm1hc3Rlcl9zdywKKwkJCQkJCSAgY2hpcC0+c3BlYWtlcl9zd19jdGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHZtYXN0ZXJfc3cpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCXZtYXN0ZXJfdm9sID0gc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKAorCQkJIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAodW5zaWduZWQgaW50ICopIE5VTEwpOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZSh2bWFzdGVyX3ZvbCwgbWFzdGVyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUodm1hc3Rlcl92b2wsIHNwZWFrZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCB2bWFzdGVyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYmVpZ2UgfHwgZzRhZ3ApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCUFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWljX2Jvb3N0X2JlaWdlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggZjg2MGQzOS4uNDVhNzYyOSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlpbnQgdGltZW91dCA9IDUwOwogCXdoaWxlICgoaW5fbGUzMigmY2hpcC0+YXdhY3MtPmNvZGVjX2N0cmwpICYgTUFTS19ORVdFQ01EKSAmJiB0aW1lb3V0LS0pCiAJCXVkZWxheSgxKTsKLQlpZiAoISB0aW1lb3V0KQorCWlmICh0aW1lb3V0IDwgMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgImJ1cmd1bmR5X2J1c3lfd2FpdDogdGltZW91dFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9kYWNhLmMgYi9zb3VuZC9wcGMvZGFjYS5jCmluZGV4IDhhNWIyOTAuLmY4ZDQ3OGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9kYWNhLmMKKysrIGIvc291bmQvcHBjL2RhY2EuYwpAQCAtODIsNyArODIsNyBAQAogCWRhdGFbMV0gfD0gbWl4LT5kZWVtcGhhc2lzID8gMHg0MCA6IDA7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgREFDQV9SRUdfQVZPTCwKIAkJCQkgICAgICAgMiwgZGF0YSkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmMgYi9zb3VuZC9wcGMvcG1hYy5jCmluZGV4IGFmNzZlZTguLjliNGU5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmMKKysrIGIvc291bmQvcHBjL3BtYWMuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJcmVjLT5ydW5uaW5nID0gMDsKLQkJLypwcmludGsoInN0b3BwZWQhIVxuIik7Ki8KKwkJLypwcmludGsoS0VSTl9ERUJVRyAic3RvcHBlZCEhXG4iKTsqLwogCQlzbmRfcG1hY19kbWFfc3RvcChyZWMpOwogCQlmb3IgKGkgPSAwLCBjcCA9IHJlYy0+Y21kLmNtZHM7IGkgPCByZWMtPm5wZXJpb2RzOyBpKyssIGNwKyspCiAJCQlvdXRfbGUxNigmY3AtPmNvbW1hbmQsIERCRE1BX1NUT1ApOwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJfQogI2VuZGlmCiAJY291bnQgKz0gcmVjLT5jdXJfcGVyaW9kICogcmVjLT5wZXJpb2Rfc2l6ZTsKLQkvKnByaW50aygicG9pbnRlcj0lZFxuIiwgY291bnQpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAicG9pbnRlcj0lZFxuIiwgY291bnQpOyovCiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzLT5ydW50aW1lLCBjb3VudCk7CiB9CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQAogCQkJaWYgKCEgKHN0YXQgJiBBQ1RJVkUpKQogCQkJCWJyZWFrOwogCi0JCQkvKnByaW50aygidXBkYXRlIGZyYWcgJWRcbiIsIHJlYy0+Y3VyX3BlcmlvZCk7Ki8KKwkJCS8qcHJpbnRrKEtFUk5fREVCVUcgInVwZGF0ZSBmcmFnICVkXG4iLCByZWMtPmN1cl9wZXJpb2QpOyovCiAJCQlzdF9sZTE2KCZjcC0+eGZlcl9zdGF0dXMsIDApOwogCQkJc3RfbGUxNigmY3AtPnJlcV9jb3VudCwgcmVjLT5wZXJpb2Rfc2l6ZSk7CiAJCQkvKnN0X2xlMTYoJmNwLT5yZXNfY291bnQsIDApOyovCkBAIC04MDYsNyArODA2LDcgQEAKIAlzdHJ1Y3Qgc25kX3BtYWMgKmNoaXAgPSBkZXZpZDsKIAlpbnQgY3RybCA9IGluX2xlMzIoJmNoaXAtPmF3YWNzLT5jb250cm9sKTsKIAotCS8qcHJpbnRrKCJwbWFjOiBjb250cm9sIGludGVycnVwdC4uIDB4JXhcbiIsIGN0cmwpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAicG1hYzogY29udHJvbCBpbnRlcnJ1cHQuLiAweCV4XG4iLCBjdHJsKTsqLwogCWlmIChjdHJsICYgTUFTS19QT1JUQ0hHKSB7CiAJCS8qIGRvIHNvbWV0aGluZyB3aGVuIGhlYWRwaG9uZSBpcyBwbHVnZ2VkL3VucGx1Z2dlZD8gKi8KIAkJaWYgKGNoaXAtPnVwZGF0ZV9hdXRvbXV0ZSkKQEAgLTEwMzMsNyArMTAzMyw4IEBACiAJfQogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgInR1bWJsZXIiKSkgewogCQljaGlwLT5tb2RlbCA9IFBNQUNfVFVNQkxFUjsKLQkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIik7CisJCWNoaXAtPmNhbl9jYXB0dXJlID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpCisJCQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKTsKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3Bvd2VybWFjLmMgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwppbmRleCBjOTM2MjI1Li41YTkyOTA2IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG93ZXJtYWMuYworKysgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwpAQCAtNTgsOSArNTgsOSBAQAogCWNoYXIgKm5hbWVfZXh0OwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9wbWFjX25ldyhjYXJkLCAmY2hpcCkpIDwgMCkKIAkJZ290byBfX2Vycm9yOwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCQlnb3RvIF9fZXJyb3I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoInVuc3VwcG9ydGVkIGhhcmR3YXJlICVkXG4iLCBjaGlwLT5tb2RlbCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuc3VwcG9ydGVkIGhhcmR3YXJlICVkXG4iLCBjaGlwLT5tb2RlbCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gX19lcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCBmZjMyMTExLi5mMzYxYzI2IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTk2OSwxMSArOTY5LDkgQEAKIAl9CiAKIAkvKiBjcmVhdGUgY2FyZCBpbnN0YW5jZSAqLwotCXRoZV9jYXJkLmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCF0aGVfY2FyZC5jYXJkKSB7Ci0JCXJldCA9IC1FTlhJTzsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJnRoZV9jYXJkLmNhcmQpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFuX2lycTsKLQl9CiAKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+ZHJpdmVyLCAiUFMzIik7CiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPnNob3J0bmFtZSwgIlBTMyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggM2ViMjIzMy4uNDAyMjJmYyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC00MSw3ICs0MSw3IEBACiAjdW5kZWYgREVCVUcKIAogI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCisjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKICNlbHNlCiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19WT0wsIDYsCiAJCQkJCSAgIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19EUkMsCiAJCQkJCSAgIDIsIHZhbCkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBEUkNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zODYsNyArMzg2LDcgQEAKIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX0RSQywKIAkJCQkJICAgNiwgdmFsKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBEUkNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTUwNiw3ICs1MDYsOCBAQAogCQlibG9ja1tpXSA9ICh2b2wgPj4gKChpbmZvLT5ieXRlcyAtIGkgLSAxKSAqIDgpKSAmIDB4ZmY7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIGluZm8tPnJlZywKIAkJCQkJICAgaW5mby0+Ynl0ZXMsIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBtb25vIHZvbHVtZSAlZFxuIiwgaW5mby0+aW5kZXgpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLAorCQkJICAgaW5mby0+aW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC02NDMsNyArNjQ0LDcgQEAKIAl9CiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIHJlZywKIAkJCQkJICAgOSwgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCByZWcpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCByZWcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zaC9LY29uZmlnIGIvc291bmQvc2gvS2NvbmZpZwppbmRleCBjZmMxNDM5Li5hZWQwZjkwIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9LY29uZmlnCisrKyBiL3NvdW5kL3NoL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAl0cmlzdGF0ZSAiRHJlYW1jYXN0IFlhbWFoYSBBSUNBIHNvdW5kIgogCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUCiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgRzJfRE1BCiAJaGVscAogCSAgQUxTQSBTb3VuZCBkcml2ZXIgZm9yIHRoZSBTRUdBIERyZWFtY2FzdCBjb25zb2xlLgogCmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggN2M5MjBmMy4uZjU1MTIzMyAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtNjA5LDExICs2MDksMTEgQEAKIAlkcmVhbWNhc3RjYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FpY2EpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWRyZWFtY2FzdGNhcmQpKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkcmVhbWNhc3RjYXJkLT5jYXJkID0KLQkgICAgc25kX2NhcmRfbmV3KGluZGV4LCBTTkRfQUlDQV9EUklWRVIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAodW5saWtlbHkoIWRyZWFtY2FzdGNhcmQtPmNhcmQpKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBTTkRfQUlDQV9EUklWRVIsIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmRyZWFtY2FzdGNhcmQtPmNhcmQpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogCQlrZnJlZShkcmVhbWNhc3RjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShkcmVhbWNhc3RjYXJkLT5jYXJkLT5kcml2ZXIsICJzbmRfYWljYSIpOwogCXN0cmNweShkcmVhbWNhc3RjYXJkLT5jYXJkLT5zaG9ydG5hbWUsIFNORF9BSUNBX0RSSVZFUik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvS2NvbmZpZyBiL3NvdW5kL3NvYy9LY29uZmlnCmluZGV4IGVmMDI1YzYuLjNkMmJiNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXRyaXN0YXRlICJBTFNBIGZvciBTb0MgYXVkaW8gc3VwcG9ydCIKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBBQzk3X0JVUyBpZiBTTkRfU09DX0FDOTdfQlVTCisJc2VsZWN0IFNORF9KQUNLIGlmIElOUFVUPXkgfHwgSU5QVVQ9U05ECiAJLS0taGVscC0tLQogCiAJICBJZiB5b3Ugd2FudCBBU29DIHN1cHBvcnQsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSBhbmQgYWxzbyB0byB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9NYWtlZmlsZQppbmRleCA4NmE5YjFmLi4wMjM3ODc5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotc25kLXNvYy1jb3JlLW9ianMgOj0gc29jLWNvcmUubyBzb2MtZGFwbS5vCitzbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8gc29jLWphY2subwogCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gc25kLXNvYy1jb3JlLm8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBjb2RlY3MvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKaW5kZXggM2RjZGM0ZS4uOWVmNmI5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KTsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX3BjbV9vcHMgPSB7CiAJLm9wZW4JCT0gYXRtZWxfcGNtX29wZW4sCiAJLmNsb3NlCQk9IGF0bWVsX3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCBmZjAwNTRiLi5lNTg4ZTYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKQEAgLTY5Nyw2ICs2OTcsMTUgQEAKICNkZWZpbmUgQVRNRUxfU1NDX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzggICAgIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfFwKIAkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYXRtZWxfc3NjX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBhdG1lbF9zc2Nfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBhdG1lbF9zc2Nfc2h1dGRvd24sCisJLnByZXBhcmUJPSBhdG1lbF9zc2NfcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfc3NjX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2RpdiwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdG1lbF9zc2NfZGFpW05VTV9TU0NfREVWSUNFU10gPSB7CiAJewkubmFtZSA9ICJhdG1lbC1zc2MwIiwKIAkJLmlkID0gMCwKQEAgLTcxMiwxMyArNzIxLDcgQEAKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gQVRNRUxfU1NDX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBBVE1FTF9TU0NfRk9STUFUUyx9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdG1lbF9zc2Nfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IGF0bWVsX3NzY19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXRtZWxfc3NjX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXRtZWxfc3NjX2h3X3BhcmFtcywKLQkJCS5zZXRfZm10ID0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsfSwKKwkJLm9wcyA9ICZhdG1lbF9zc2NfZGFpX29wcywKIAkJLnByaXZhdGVfZGF0YSA9ICZzc2NfaW5mb1swXSwKIAl9LAogI2lmIE5VTV9TU0NfREVWSUNFUyA9PSAzCkBAIC03MzYsMTMgKzczOSw3IEBACiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IEFUTUVMX1NTQ19SQVRFUywKIAkJCS5mb3JtYXRzID0gQVRNRUxfU1NDX0ZPUk1BVFMsfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gYXRtZWxfc3NjX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdG1lbF9zc2Nfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0bWVsX3NzY19wcmVwYXJlLAotCQkJLmh3X3BhcmFtcyA9IGF0bWVsX3NzY19od19wYXJhbXMsCi0JCQkuc2V0X2ZtdCA9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LH0sCisJCS5vcHMgPSAmYXRtZWxfc3NjX2RhaV9vcHMsCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMV0sCiAJfSwKIAl7CS5uYW1lID0gImF0bWVsLXNzYzIiLApAQCAtNzU5LDEzICs3NTYsNyBAQAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBBVE1FTF9TU0NfUkFURVMsCiAJCQkuZm9ybWF0cyA9IEFUTUVMX1NTQ19GT1JNQVRTLH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0bWVsX3NzY19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXRtZWxfc3NjX3NodXRkb3duLAotCQkJLnByZXBhcmUgPSBhdG1lbF9zc2NfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAotCQkJLnNldF9mbXQgPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X2Nsa2RpdiA9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAorCQkub3BzID0gJmF0bWVsX3NzY19kYWlfb3BzLAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzJdLAogCX0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKaW5kZXggNDNkZDhjZS4uNzA2NTc1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKQEAgLTE2NCw0MSArMTY0LDQxIEBACiAJICovCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CiAJY2FzZSA0ODAwMDoKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzE7Ci0JCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwotCQlicmVhazsKLQotCWNhc2UgNDQxMDA6Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKLQkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8xOwotCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKLQkJYnJlYWs7Ci0KLQljYXNlIDIyMDUwOgotCQlwbGxfb3V0ID0gMTEyODk2MDA7CisJCXBsbF9vdXQgPSAyNDU3NjAwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8yOwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDE2MDAwOgotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMzsKKwljYXNlIDQ0MTAwOgorCQlwbGxfb3V0ID0gMjI1NzkyMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCi0JY2FzZSAxMTAyNToKLQkJcGxsX291dCA9IDExMjg5NjAwOworCWNhc2UgMjIwNTA6CisJCXBsbF9vdXQgPSAyMjU3OTIwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl80OwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDgwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKKwljYXNlIDE2MDAwOgorCQlwbGxfb3V0ID0gMjQ1NzYwMDA7CiAJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfNjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCisJY2FzZSAxMTAyNToKKwkJcGxsX291dCA9IDIyNTc5MjAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzg7CisJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OworCQlicmVhazsKKworCWNhc2UgODAwMDoKKwkJcGxsX291dCA9IDI0NTc2MDAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzEyOworCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcl93YXJuaW5nKCJwbGF5cGFxX3dtODUxMDogVW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGUgJWRcbiIsCiAJCQkgICBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKaW5kZXggNmVhMDRiZS4uMTczYTIzOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSA8bGludXgvYXRtZWwtc3NjLmg+CiAKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKQEAgLTUyLDYgKzU0LDkgQEAKICNpbmNsdWRlICJhdG1lbC1wY20uaCIKICNpbmNsdWRlICJhdG1lbF9zc2NfZGFpLmgiCiAKKyNkZWZpbmUgTUNMS19SQVRFIDEyMDAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICptY2xrOwogCiBzdGF0aWMgaW50IGF0OTFzYW05ZzIwZWtfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTU5LDExICs2NCwxMiBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JLyogY29kZWMgc3lzdGVtIGNsb2NrIGlzIHN1cHBsaWVkIGJ5IFBDSzAsIHNldCB0byAxMk1IeiAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3MzFfU1lTQ0xLLAotCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCisJCU1DTEtfUkFURSwgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApIHsKKwkJY2xrX2Rpc2FibGUobWNsayk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODksNiArMTk1LDMxIEBACiAJLnNodXRkb3duID0gYXQ5MXNhbTlnMjBla19zaHV0ZG93biwKIH07CiAKK3N0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdGF0aWMgaW50IG1jbGtfb247CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJaWYgKCFtY2xrX29uKQorCQkJcmV0ID0gY2xrX2VuYWJsZShtY2xrKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJbWNsa19vbiA9IDE7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChtY2xrX29uKQorCQkJY2xrX2Rpc2FibGUobWNsayk7CisJCW1jbGtfb24gPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYXQ5MXNhbTlnMjBla19kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fTUlDKCJJbnQgTWljIiwgTlVMTCksCkBAIC0yNDMsMjEgKzI3NCw0OCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19hdDkxc2FtOWcyMGVrID0gewotCS5uYW1lID0gIldNODczMSIsCisJLm5hbWUgPSAiQVQ5MVNBTUcyMC1FSyIsCiAJLnBsYXRmb3JtID0gJmF0bWVsX3NvY19wbGF0Zm9ybSwKIAkuZGFpX2xpbmsgPSAmYXQ5MXNhbTlnMjBla19kYWksCiAJLm51bV9saW5rcyA9IDEsCisJLnNldF9iaWFzX2xldmVsID0gYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgYXQ5MXNhbTlnMjBla193bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OworLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF0OTFzYW05ZzIwZWtfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19hdDkxc2FtOWcyMGVrLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCi0JLmNvZGVjX2RhdGEgPSAmYXQ5MXNhbTlnMjBla193bTg3MzFfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlOwpAQCAtMjY2LDIzICszMjQsNTYgQEAKIHsKIAlzdHJ1Y3QgYXRtZWxfc3NjX2luZm8gKnNzY19wID0gYXQ5MXNhbTlnMjBla19kYWkuY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzc2NfZGV2aWNlICpzc2MgPSBOVUxMOworCXN0cnVjdCBjbGsgKnBsbGI7CiAJaW50IHJldDsKIAorCWlmICghbWFjaGluZV9pc19hdDkxc2FtOWcyMGVrKCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBDb2RlYyBNQ0xLIGlzIHN1cHBsaWVkIGJ5IFBDSzAgLSBzZXQgaXQgdXAuCisJICovCisJbWNsayA9IGNsa19nZXQoTlVMTCwgInBjazAiKTsKKwlpZiAoSVNfRVJSKG1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIGdldCBNQ0xLXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtY2xrKTsKKwkJZ290byBlcnI7CisJfQorCisJcGxsYiA9IGNsa19nZXQoTlVMTCwgInBsbGIiKTsKKwlpZiAoSVNfRVJSKG1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIGdldCBQTExCXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtY2xrKTsKKwkJZ290byBlcnJfbWNsazsKKwl9CisJcmV0ID0gY2xrX3NldF9wYXJlbnQobWNsaywgcGxsYik7CisJY2xrX3B1dChwbGxiKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gc2V0IE1DTEsgcGFyZW50XG4iKTsKKwkJZ290byBlcnJfbWNsazsKKwl9CisKKwljbGtfc2V0X3JhdGUobWNsaywgTUNMS19SQVRFKTsKKwogCS8qCiAJICogUmVxdWVzdCBTU0MgZGV2aWNlCiAJICovCiAJc3NjID0gc3NjX3JlcXVlc3QoMCk7CiAJaWYgKElTX0VSUihzc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIHJlcXVlc3QgU1NDIDBcbiIpOwogCQlyZXQgPSBQVFJfRVJSKHNzYyk7CiAJCXNzYyA9IE5VTEw7CiAJCWdvdG8gZXJyX3NzYzsKIAl9CiAJc3NjX3AtPnNzYyA9IHNzYzsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyX3NzYzsKKwogCWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJInBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAl9CiAKQEAgLTI5MiwxNCArMzgzLDE5IEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGF0OTFzYW05ZzIwZWtfc25kX2RldmljZSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSJwbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogCiBlcnJfc3NjOgorCXNzY19mcmVlKHNzYyk7CisJc3NjX3AtPnNzYyA9IE5VTEw7CitlcnJfbWNsazoKKwljbGtfcHV0KG1jbGspOworCW1jbGsgPSBOVUxMOworZXJyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNyw2ICs0MTMsOCBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAlhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UgPSBOVUxMOworCWNsa19wdXQobWNsayk7CisJbWNsayA9IE5VTEw7CiB9CiAKIG1vZHVsZV9pbml0KGF0OTFzYW05ZzIwZWtfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYyBiL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCmluZGV4IGJjOGQ2NTQuLjMwNDkwYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGF1MXhwc2NfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXUxeHBzY19wY21fb3BzID0gewogCS5vcGVuCQk9IGF1MXhwc2NfcGNtX29wZW4sCiAJLmNsb3NlCQk9IGF1MXhwc2NfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCmluZGV4IGYwZTMwYWUuLjQ3OWQ3YmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYwpAQCAtMzQyLDYgKzM0MiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdTF4cHNjX2FjOTdfZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IGF1MXhwc2NfYWM5N190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBhdTF4cHNjX2FjOTdfaHdfcGFyYW1zLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF1MXhwc2NfYWM5N19kYWkgPSB7CiAJLm5hbWUJCQk9ICJhdTF4cHNjX2FjOTciLAogCS5hYzk3X2NvbnRyb2wJCT0gMSwKQEAgLTM2MSwxMCArMzY2LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBhdTF4cHNjX2FjOTdfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IGF1MXhwc2NfYWM5N19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmF1MXhwc2NfYWM5N19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF1MXhwc2NfYWM5N19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKaW5kZXggZjkxNmRlNC4uYmI1ODkzMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwpAQCAtMzY3LDYgKzM2NywxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdTF4cHNjX2kyc19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gYXUxeHBzY19pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gYXUxeHBzY19pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYXUxeHBzY19pMnNfc2V0X2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdTF4cHNjX2kyc19kYWkgPSB7CiAJLm5hbWUJCQk9ICJhdTF4cHNjX2kycyIsCiAJLnByb2JlCQkJPSBhdTF4cHNjX2kyc19wcm9iZSwKQEAgLTM4NSwxMSArMzkxLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAkvKiAyIHdpdGhvdXQgZXh0ZXJuYWwgaGVscCAqLwogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBhdTF4cHNjX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gYXUxeHBzY19pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdAk9IGF1MXhwc2NfaTJzX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmF1MXhwc2NfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTChhdTF4cHNjX2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCmluZGV4IDgwNjdjZmEuLjhjZmVkMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2FjOTdfb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fYWM5N19vcHMgPSB7CiAJLm9wZW4JCT0gYmY1eHhfcGNtX29wZW4sCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBiZjV4eF9wY21faHdfcGFyYW1zLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKaW5kZXggM2JlMmJlNi4uOGE5MzVmMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCkBAIC0zMSw3MiArMzEsNDYgQEAKICNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgogI2luY2x1ZGUgImJmNXh4LWFjOTcuaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzAge1BfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBcCi0JCVBfU1BPUlQwX1JGUywgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMSB7UF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFwKLQkJUF9TUE9SVDFfUkZTLCBQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8yIHtQX1NQT1JUMl9URlMsIFBfU1BPUlQyX0RUUFJJLCBQX1NQT1JUMl9UU0NMSywgXAotCQlQX1NQT1JUMl9SRlMsIFBfU1BPUlQyX0RSUFJJLCBQX1NQT1JUMl9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzMge1BfU1BPUlQzX1RGUywgUF9TUE9SVDNfRFRQUkksIFBfU1BPUlQzX1RTQ0xLLCBcCi0JCVBfU1BPUlQzX1JGUywgUF9TUE9SVDNfRFJQUkksIFBfU1BPUlQzX1JTQ0xLLCAwfQotI2Vsc2UKLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8wIHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywgXAotCQkgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMSB7UF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsIFwKLQkJIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0KLSNlbmRpZgotCiBzdGF0aWMgaW50ICpjbWRfY291bnQ7CiBzdGF0aWMgaW50IHNwb3J0X251bSA9IENPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNOwogCisjZGVmaW5lIFNQT1JUX1JFUSh4KSBcCisJW3hdID0ge1BfU1BPUlQjI3gjI19URlMsIFBfU1BPUlQjI3gjI19EVFBSSSwgUF9TUE9SVCMjeCMjX1RTQ0xLLCBcCisJICAgICAgIFBfU1BPUlQjI3gjI19SRlMsIFBfU1BPUlQjI3gjI19EUlBSSSwgUF9TUE9SVCMjeCMjX1JTQ0xLLCAwfQogc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsKLQkJUElOX1JFUV9TUE9SVF8wLAotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMQotCQlQSU5fUkVRX1NQT1JUXzEsCisjaWZkZWYgU1BPUlQwX1RDUjEKKwlTUE9SVF9SRVEoMCksCiAjZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzIKLQkJUElOX1JFUV9TUE9SVF8yLAorI2lmZGVmIFNQT1JUMV9UQ1IxCisJU1BPUlRfUkVRKDEpLAogI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8zCi0JCVBJTl9SRVFfU1BPUlRfMywKKyNpZmRlZiBTUE9SVDJfVENSMQorCVNQT1JUX1JFUSgyKSwKICNlbmRpZgotCX07CisjaWZkZWYgU1BPUlQzX1RDUjEKKwlTUE9SVF9SRVEoMyksCisjZW5kaWYKK307CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BvcnRfcGFyYW0gc3BvcnRfcGFyYW1zWzRdID0gewotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQwX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDBfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMF9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMF9UQ1IxLAotCX0sCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8xCi0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDFfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMV9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQxX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQxX1RDUjEsCi0JfSwKLSNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMgotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQyX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDJfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMl9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMl9UQ1IxLAotCX0sCi0jZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzMKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUM19SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQzX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDNfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDNfVENSMSwKKyNkZWZpbmUgU1BPUlRfUEFSQU1TKHgpIFwKKwlbeF0gPSB7IFwKKwkJLmRtYV9yeF9jaGFuID0gQ0hfU1BPUlQjI3gjI19SWCwgXAorCQkuZG1hX3R4X2NoYW4gPSBDSF9TUE9SVCMjeCMjX1RYLCBcCisJCS5lcnJfaXJxICAgICA9IElSUV9TUE9SVCMjeCMjX0VSUk9SLCBcCisJCS5yZWdzICAgICAgICA9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVCMjeCMjX1RDUjEsIFwKIAl9CitzdGF0aWMgc3RydWN0IHNwb3J0X3BhcmFtIHNwb3J0X3BhcmFtc1s0XSA9IHsKKyNpZmRlZiBTUE9SVDBfVENSMQorCVNQT1JUX1BBUkFNUygwKSwKKyNlbmRpZgorI2lmZGVmIFNQT1JUMV9UQ1IxCisJU1BPUlRfUEFSQU1TKDEpLAorI2VuZGlmCisjaWZkZWYgU1BPUlQyX1RDUjEKKwlTUE9SVF9QQVJBTVMoMiksCisjZW5kaWYKKyNpZmRlZiBTUE9SVDNfVENSMQorCVNQT1JUX1BBUkFNUygzKSwKICNlbmRpZgogfTsKIApAQCAtMzMyLDExICszMDYsMTEgQEAKIAlpZiAoY21kX2NvdW50ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSwgInNvYy1hdWRpbyIpKSB7CisJaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHNwb3J0X3JlcVtzcG9ydF9udW1dLCAic29jLWF1ZGlvIikpIHsKIAkJcHJfZXJyKCJSZXF1ZXN0aW5nIFBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CiAJCXJldCA9ICAtRUZBVUxUOwogCQlnb3RvIHBlcmlwaGVyYWxfZXJyOwotCQl9CisJfQogCiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAkvKiBSZXF1ZXN0IFBCMyBhcyByZXNldCBwaW4gKi8KQEAgLTM4Myw5ICszNTcsOSBAQAogc3BvcnRfZXJyOgogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJZ3Bpb19mcmVlKENPTkZJR19TTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0pOwotI2VuZGlmCiBncGlvX2VycjoKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworI2VuZGlmCisJcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0pOwogcGVyaXBoZXJhbF9lcnI6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNtZF9jb3VudCk7CiAJY21kX2NvdW50ID0gTlVMTDsKQEAgLTM5OCw3ICszNzIsNyBAQAogewogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbWRfY291bnQpOwogCWNtZF9jb3VudCA9IE5VTEw7Ci0JcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSk7CiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAlncGlvX2ZyZWUoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCmluZGV4IDdmMmE1ZTEuLmVkZmJkYzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJU1NZTkMoKTsKIAogCS8qIFdoZW4gVFVWRiBpcyBzZXQsIHRoZSBkYXRhIGlzIGFscmVhZHkgc2VuZCBvdXQgKi8KLQl3aGlsZSAoIShzdGF0dXMgJiBUVVZGKSAmJiBjb3VudCsrIDwgMTAwMDApIHsKKwl3aGlsZSAoIShzdGF0dXMgJiBUVVZGKSAmJiArK2NvdW50IDwgMTAwMDApIHsKIAkJdWRlbGF5KDEpOwogCQlzdGF0dXMgPSBiZmluX3JlYWRfU1BPUlRfU1RBVCgpOwogCQlTU1lOQygpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJU1NZTkMoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlpZiAoY291bnQgPT0gMTAwMDApIHsKKwlpZiAoY291bnQgPj0gMTAwMDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhZDczMzExOiBmYWlsZWQgdG8gY29uZmlndXJlIGNvZGVjXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDUzZDI5MGIuLjEzMThjNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJcmV0dXJuIDAgOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2kyc19vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9pMnNfb3BzID0gewogCS5vcGVuCQk9IGJmNXh4X3BjbV9vcGVuLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zCT0gYmY1eHhfcGNtX2h3X3BhcmFtcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwppbmRleCBkMWQ5NWQyLi45NjQ4MjQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCkBAIC0yODcsNiArMjg3LDEzIEBACiAjZGVmaW5lIEJGNVhYX0kyU19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGJmNXh4X2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gYmY1eHhfaTJzX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYmY1eHhfaTJzX3NodXRkb3duLAorCS5od19wYXJhbXMJPSBiZjV4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYmY1eHhfaTJzX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGJmNXh4X2kyc19kYWkgPSB7CiAJLm5hbWUgPSAiYmY1eHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtMzA0LDEyICszMTEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQkY1WFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IEJGNVhYX0kyU19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgICA9IGJmNXh4X2kyc19zdGFydHVwLAotCQkuc2h1dGRvd24gID0gYmY1eHhfaTJzX3NodXRkb3duLAotCQkuaHdfcGFyYW1zID0gYmY1eHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBiZjV4eF9pMnNfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJmJmNXh4X2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGJmNXh4X2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCmluZGV4IDNiOTllNDguLmI3OTUzYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBmcmFnY291bnQ7ICsraSkgewotCQlkZXNjW2ldLm5leHRfZGVzY19hZGRyICA9ICh1bnNpZ25lZCBsb25nKSYoZGVzY1tpICsgMV0pOworCQlkZXNjW2ldLm5leHRfZGVzY19hZGRyICA9ICYoZGVzY1tpICsgMV0pOwogCQlkZXNjW2ldLnN0YXJ0X2FkZHIgPSAodW5zaWduZWQgbG9uZylidWYgKyBpKmZyYWdzaXplOwogCQlkZXNjW2ldLmNmZyA9IGNmZzsKIAkJZGVzY1tpXS54X2NvdW50ID0geF9jb3VudDsKQEAgLTE0MywxMiArMTQzLDEyIEBACiAJfQogCiAJLyogbWFrZSBjaXJjdWxhciAqLwotCWRlc2NbZnJhZ2NvdW50LTFdLm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYzsKKwlkZXNjW2ZyYWdjb3VudC0xXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAKLQlwcl9kZWJ1Zygic2V0dXAgZGVzYzogZGVzYzA9JXAsIG5leHQwPSVseCwgZGVzYzE9JXAsIgotCQkibmV4dDE9JWx4XG54X2NvdW50PSV4LHlfY291bnQ9JXgsYWRkcj0weCVseCxjZnM9MHgleFxuIiwKLQkJJihkZXNjWzBdKSwgZGVzY1swXS5uZXh0X2Rlc2NfYWRkciwKLQkJJihkZXNjWzFdKSwgZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciwKKwlwcl9kZWJ1Zygic2V0dXAgZGVzYzogZGVzYzA9JXAsIG5leHQwPSVwLCBkZXNjMT0lcCwiCisJCSJuZXh0MT0lcFxueF9jb3VudD0leCx5X2NvdW50PSV4LGFkZHI9MHglbHgsY2ZzPTB4JXhcbiIsCisJCWRlc2MsIGRlc2NbMF0ubmV4dF9kZXNjX2FkZHIsCisJCWRlc2MrMSwgZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciwKIAkJZGVzY1swXS54X2NvdW50LCBkZXNjWzBdLnlfY291bnQsCiAJCWRlc2NbMF0uc3RhcnRfYWRkciwgZGVzY1swXS5jZmcpOwogfQpAQCAtMTg0LDIyICsxODQsMjAgQEAKIAlCVUdfT04oc3BvcnQtPmN1cnJfcnhfZGVzYyA9PSBzcG9ydC0+ZHVtbXlfcnhfZGVzYyk7CiAKIAkvKiBNYXliZSB0aGUgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgcmluZyBpcyBkYW1hZ2VkICovCi0Jc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV9yeF9kZXNjKzEpOworCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjICsgMTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKWdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pOworCWRlc2MgPSBnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKTsKIAkvKiBDb3B5IHRoZSBkZXNjcmlwdG9yIHdoaWNoIHdpbGwgYmUgZGFtYWdlZCB0byBiYWNrdXAgKi8KIAl0ZW1wX2Rlc2MgPSAqZGVzYzsKIAlkZXNjLT54X2NvdW50ID0gMHhhOwogCWRlc2MtPnlfY291bnQgPSAwOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkvKiBXYWl0aW5nIGZvciBkdW1teSBidWZmZXIgZGVzY3JpcHRvciBpcyBhbHJlYWR5IGhvb2tlZCovCiAJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKSAtCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0KLQkJCSh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9yeF9kZXNjKQotCQk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpCisJCWNvbnRpbnVlOwogCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAkvKiBSZXN0b3JlIHRoZSBkYW1hZ2VkIGRlc2NyaXB0b3IgKi8KIAkqZGVzYyA9IHRlbXBfZGVzYzsKQEAgLTIxMCwxNCArMjA4LDEyIEBACiBzdGF0aWMgaW5saW5lIGludCBzcG9ydF9yeF9kbWFfc3RhcnQoc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQsIGludCBkdW1teSkKIHsKIAlpZiAoZHVtbXkpIHsKLQkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJCSh1bnNpZ25lZCBsb25nKSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKKwkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAl9IGVsc2UKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kbWFfcnhfZGVzYzsKIAotCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV9yeF9jaGFuLCBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmN1cnJfcnhfZGVzYykpOworCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV9yeF9jaGFuLCBzcG9ydC0+Y3Vycl9yeF9kZXNjKTsKIAlzZXRfZG1hX3hfY291bnQoc3BvcnQtPmRtYV9yeF9jaGFuLCAwKTsKIAlzZXRfZG1hX3hfbW9kaWZ5KHNwb3J0LT5kbWFfcnhfY2hhbiwgMCk7CiAJc2V0X2RtYV9jb25maWcoc3BvcnQtPmRtYV9yeF9jaGFuLCAoRE1BRkxPV19MQVJHRSB8IE5EU0laRV85IHwgXApAQCAtMjMxLDE0ICsyMjcsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNwb3J0X3R4X2RtYV9zdGFydChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCwgaW50IGR1bW15KQogewogCWlmIChkdW1teSkgewotCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNwb3J0LT5kdW1teV90eF9kZXNjOworCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAkJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCX0gZWxzZQogCQlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCi0Jc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3R4X2NoYW4sIFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+Y3Vycl90eF9kZXNjKSk7CisJc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3R4X2NoYW4sIHNwb3J0LT5jdXJyX3R4X2Rlc2MpOwogCXNldF9kbWFfeF9jb3VudChzcG9ydC0+ZG1hX3R4X2NoYW4sIDApOwogCXNldF9kbWFfeF9tb2RpZnkoc3BvcnQtPmRtYV90eF9jaGFuLCAwKTsKIAlzZXRfZG1hX2NvbmZpZyhzcG9ydC0+ZG1hX3R4X2NoYW4sCkBAIC0yNjEsMTEgKzI1NSw5IEBACiAJCUJVR19PTihzcG9ydC0+Y3Vycl9yeF9kZXNjICE9IHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3J4X2Rlc2MpCi0JCQk7Ci0JCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kbWFfcnhfZGVzYyk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpCisJCQljb250aW51ZTsKKwkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmRtYV9yeF9kZXNjOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZG1hX3J4X2Rlc2M7CiAJfSBlbHNlIHsKQEAgLTMxMCwyMyArMzAyLDIxIEBACiAJQlVHX09OKHNwb3J0LT5kdW1teV90eF9kZXNjID09IE5VTEwpOwogCUJVR19PTihzcG9ydC0+Y3Vycl90eF9kZXNjID09IHNwb3J0LT5kdW1teV90eF9kZXNjKTsKIAotCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfdHhfZGVzYysxKTsKKwlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYyArIDE7CiAKIAkvKiBTaG9ydGVuIHRoZSB0aW1lIG9uIGxhc3Qgbm9ybWFsIGRlc2NyaXB0b3IgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKilnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKTsKKwlkZXNjID0gZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbik7CiAJLyogU3RvcmUgdGhlIGRlc2NyaXB0b3Igd2hpY2ggd2lsbCBiZSBkYW1hZ2VkICovCiAJdGVtcF9kZXNjID0gKmRlc2M7CiAJZGVzYy0+eF9jb3VudCA9IDB4YTsKIAlkZXNjLT55X2NvdW50ID0gMDsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfdHhfZGVzYyk7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJLyogV2FpdGluZyBmb3IgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBob29rZWQqLwogCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbikgLSBcCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gXAotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3R4X2Rlc2MpCi0JCTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYykKKwkJY29udGludWU7CiAJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCS8qIFJlc3RvcmUgdGhlIGRhbWFnZWQgZGVzY3JpcHRvciAqLwogCSpkZXNjID0gdGVtcF9kZXNjOwpAQCAtMzQ3LDExICszMzcsOSBAQAogCQkvKiBIb29rIHRoZSBub3JtYWwgYnVmZmVyIGRlc2NyaXB0b3IgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3R4X2Rlc2MpCi0JCQk7Ci0JCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kbWFfdHhfZGVzYyk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3R4X2Rlc2MpCisJCQljb250aW51ZTsKKwkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAJfSBlbHNlIHsKQEAgLTUzNiwxOSArNTI0LDE3IEBACiAJdW5zaWduZWQgY29uZmlnOwogCiAJcHJfZGVidWcoIiVzIGVudGVyZWRcbiIsIF9fZnVuY19fKTsKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKSBsMV9kYXRhX3NyYW1fYWxsb2MoMiAqIHNpemVvZigqZGVzYykpOwotI2Vsc2UKLQl7CisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCWRlc2MgPSBsMV9kYXRhX3NyYW1femFsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKKwllbHNlIHsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQlkZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIDIgKiBzaXplb2YoKmRlc2MpLCAmYWRkciwgMCk7CisJCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJfQotI2VuZGlmCiAJaWYgKGRlc2MgPT0gTlVMTCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGR1bW15IHJ4IGRlc2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAlzcG9ydC0+ZHVtbXlfcnhfZGVzYyA9IGRlc2M7CiAJZGVzYy0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9idWY7CiAJY29uZmlnID0gRE1BRkxPV19MQVJHRSB8IE5EU0laRV85IHwgY29tcHV0ZV93ZHNpemUoc3BvcnQtPndkc2l6ZSkKQEAgLTU1OSw4ICs1NDUsOCBAQAogCWRlc2MtPnlfY291bnQgPSAwOwogCWRlc2MtPnlfbW9kaWZ5ID0gMDsKIAltZW1jcHkoZGVzYysxLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShkZXNjKzEpOwotCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gZGVzYyArIDE7CisJZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3MSwxOSArNTU3LDE3IEBACiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJlZFxuIiwgX19mdW5jX18pOwogCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKikgbDFfZGF0YV9zcmFtX2FsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKLSNlbHNlCi0JeworCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlkZXNjID0gbDFfZGF0YV9zcmFtX3phbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7CisJZWxzZSB7CiAJCWRtYV9hZGRyX3QgYWRkcjsKIAkJZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCAyICogc2l6ZW9mKCpkZXNjKSwgJmFkZHIsIDApOworCQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCX0KLSNlbmRpZgogCWlmICghZGVzYykgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGR1bW15IHR4IGRlc2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAlzcG9ydC0+ZHVtbXlfdHhfZGVzYyA9IGRlc2M7CiAJZGVzYy0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9idWYgKyBcCiAJCXNwb3J0LT5kdW1teV9jb3VudDsKQEAgLTU5NSw4ICs1NzksOCBAQAogCWRlc2MtPnlfY291bnQgPSAwOwogCWRlc2MtPnlfbW9kaWZ5ID0gMDsKIAltZW1jcHkoZGVzYysxLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShkZXNjKzEpOwotCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gZGVzYyArIDE7CisJZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3MiwxNyArODU2LDE1IEBACiAJc3BvcnQtPndkc2l6ZSA9IHdkc2l6ZTsKIAlzcG9ydC0+ZHVtbXlfY291bnQgPSBkdW1teV9jb3VudDsKIAotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCXNwb3J0LT5kdW1teV9idWYgPSBsMV9kYXRhX3NyYW1fYWxsb2MoZHVtbXlfY291bnQgKiAyKTsKLSNlbHNlCi0Jc3BvcnQtPmR1bW15X2J1ZiA9IGttYWxsb2MoZHVtbXlfY291bnQgKiAyLCBHRlBfS0VSTkVMKTsKLSNlbmRpZgorCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlzcG9ydC0+ZHVtbXlfYnVmID0gbDFfZGF0YV9zcmFtX3phbGxvYyhkdW1teV9jb3VudCAqIDIpOworCWVsc2UKKwkJc3BvcnQtPmR1bW15X2J1ZiA9IGt6YWxsb2MoZHVtbXlfY291bnQgKiAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BvcnQtPmR1bW15X2J1ZiA9PSBOVUxMKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGR1bW15IGJ1ZmZlclxuIik7CiAJCWdvdG8gX19lcnJvcjsKIAl9CiAKLQltZW1zZXQoc3BvcnQtPmR1bW15X2J1ZiwgMCwgZHVtbXlfY291bnQgKiAyKTsKIAlyZXQgPSBzcG9ydF9jb25maWdfcnhfZHVtbXkoc3BvcnQpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gY29uZmlnIHJ4IGR1bW15IHJpbmdcbiIpOwpAQCAtOTM5LDYgKzkyMSw3IEBACiAJCXNwb3J0ID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woc3BvcnRfZG9uZSk7CisKIC8qCiAqIEl0IGlzIG9ubHkgdXNlZCB0byBzZW5kIHNldmVyYWwgYnl0ZXMgd2hlbiBkbWEgaXMgbm90IGVuYWJsZWQKICAqIHNwb3J0IGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCBidXQgbm90IGVuYWJsZWQuCkBAIC0xMDI5LDQgKzEwMTIsMyBAQAogTU9EVUxFX0FVVEhPUigiUm95IEh1YW5nIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNQT1JUIGRyaXZlciBmb3IgQURJIEJsYWNrZmluIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCBkMGUwZDY5Li5iNmM3ZjdhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0xMCw5ICsxMCwxMSBAQAogCiBjb25maWcgU05EX1NPQ19BTExfQ09ERUNTCiAJdHJpc3RhdGUgIkJ1aWxkIGFsbCBBU29DIENPREVDIGRyaXZlcnMiCisJc2VsZWN0IFNORF9TT0NfTDMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDIGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BRDE5ODAgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FENzMzMTEgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfQUs0MTA0IGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19BSzQ1MzUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1BDTTMwMDgKQEAgLTI0LDYgKzI2LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCiAJc2VsZWN0IFNORF9TT0NfVURBMTM4MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTgzNTAgaWYgTUZEX1dNODM1MAorCXNlbGVjdCBTTkRfU09DX1dNODQwMCBpZiBNRkRfV004NDAwCiAJc2VsZWN0IFNORF9TT0NfV004NTEwIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg1ODAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004NzI4IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKQEAgLTM0LDYgKzM3LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTcxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX1dNOTcxMiBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEzIGlmIFNORF9TT0NfQUM5N19CVVMKICAgICAgICAgaGVscApAQCAtNTgsNiArNjIsOSBAQAogY29uZmlnIFNORF9TT0NfQUQ3MzMxMQogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0FLNDEwNAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0FLNDUzNQogCXRyaXN0YXRlCiAKQEAgLTY1LDEyICs3Miw2IEBACiBjb25maWcgU05EX1NPQ19DUzQyNzAKIAl0cmlzdGF0ZQogCi0jIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMgSGFyZHdhcmUgTXV0ZSBTdXBwb3J0Ci0jIFNlbGVjdCBpZiB5b3UgaGF2ZSBleHRlcm5hbCBtdXRpbmcgY2lyY3VpdHJ5IGF0dGFjaGVkIHRvIHlvdXIgQ1M0MjcwLgotY29uZmlnIFNORF9TT0NfQ1M0MjcwX0hXTVVURQotCWJvb2wKLQlkZXBlbmRzIG9uIFNORF9TT0NfQ1M0MjcwCi0KICMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYyBWRCA9IDMuM1YgRXJyYXRhCiAjIFNlbGVjdCBpZiB5b3UgYXJlIGFmZmVjdGVkIGJ5IHRoZSBlcnJhdGEgd2hlcmUgdGhlIHBhcnQgd2lsbCBub3QgZnVuY3Rpb24KICMgaWYgTUNMSyBkaXZpZGUtYnktMS41IGlzIHNlbGVjdGVkIGFuZCBWRCBpcyBzZXQgdG8gMy4zVi4gIFRoZSBkcml2ZXIgd2lsbApAQCAtOTAsNyArOTEsNiBAQAogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMyMwogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjYKIAl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIgaWYgU05EX1NPQ19PRl9TSU1QTEUKQEAgLTk4LDE1ICs5OCwxMiBAQAogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMzWAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVFdMNDAzMAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKIAogY29uZmlnIFNORF9TT0NfVURBMTM0WAogICAgICAgIHRyaXN0YXRlCi0gICAgICAgc2VsZWN0IFNORF9TT0NfTDMKIAogY29uZmlnIFNORF9TT0NfVURBMTM4MAogICAgICAgICB0cmlzdGF0ZQpAQCAtMTE0LDYgKzExMSw5IEBACiBjb25maWcgU05EX1NPQ19XTTgzNTAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg0MDAKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg1MTAKIAl0cmlzdGF0ZQogCkBAIC0xNDQsNiArMTQ0LDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk5MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNOTcwNQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNOTcxMgogCXRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IGM0ZGRjOWEuLjAzMGQyNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIHNuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubwogc25kLXNvYy1hZDE5ODAtb2JqcyA6PSBhZDE5ODAubwogc25kLXNvYy1hZDczMzExLW9ianMgOj0gYWQ3MzMxMS5vCitzbmQtc29jLWFrNDEwNC1vYmpzIDo9IGFrNDEwNC5vCiBzbmQtc29jLWFrNDUzNS1vYmpzIDo9IGFrNDUzNS5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwpAQCAtMTMsNiArMTQsNyBAQAogc25kLXNvYy11ZGExMzR4LW9ianMgOj0gdWRhMTM0eC5vCiBzbmQtc29jLXVkYTEzODAtb2JqcyA6PSB1ZGExMzgwLm8KIHNuZC1zb2Mtd204MzUwLW9ianMgOj0gd204MzUwLm8KK3NuZC1zb2Mtd204NDAwLW9ianMgOj0gd204NDAwLm8KIHNuZC1zb2Mtd204NTEwLW9ianMgOj0gd204NTEwLm8KIHNuZC1zb2Mtd204NTgwLW9ianMgOj0gd204NTgwLm8KIHNuZC1zb2Mtd204NzI4LW9ianMgOj0gd204NzI4Lm8KQEAgLTIzLDEyICsyNSwxNCBAQAogc25kLXNvYy13bTg5MDMtb2JqcyA6PSB3bTg5MDMubwogc25kLXNvYy13bTg5NzEtb2JqcyA6PSB3bTg5NzEubwogc25kLXNvYy13bTg5OTAtb2JqcyA6PSB3bTg5OTAubworc25kLXNvYy13bTk3MDUtb2JqcyA6PSB3bTk3MDUubwogc25kLXNvYy13bTk3MTItb2JqcyA6PSB3bTk3MTIubwogc25kLXNvYy13bTk3MTMtb2JqcyA6PSB3bTk3MTMubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDKQkrPSBzbmQtc29jLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUQxOTgwKQkrPSBzbmQtc29jLWFkMTk4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDczMzExKSArPSBzbmQtc29jLWFkNzMzMTEubworb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0MTA0KQkrPSBzbmQtc29jLWFrNDEwNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ1MzUpCSs9IHNuZC1zb2MtYWs0NTM1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MCkJKz0gc25kLXNvYy1jczQyNzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTDMpCSs9IHNuZC1zb2MtbDMubwpAQCAtNDEsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM0WCkJKz0gc25kLXNvYy11ZGExMzR4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1VEQTEzODApCSs9IHNuZC1zb2MtdWRhMTM4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTgzNTApCSs9IHNuZC1zb2Mtd204MzUwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODQwMCkJKz0gc25kLXNvYy13bTg0MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NTEwKQkrPSBzbmQtc29jLXdtODUxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg1ODApCSs9IHNuZC1zb2Mtd204NTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODcyOCkJKz0gc25kLXNvYy13bTg3MjgubwpAQCAtNTEsNSArNTYsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAzKQkrPSBzbmQtc29jLXdtODkwMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzEpCSs9IHNuZC1zb2Mtd204OTcxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5MCkJKz0gc25kLXNvYy13bTg5OTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkxKQkrPSBzbmQtc29jLXdtODk5MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MDUpCSs9IHNuZC1zb2Mtd205NzA1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcxMikJKz0gc25kLXNvYy13bTk3MTIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEzKQkrPSBzbmQtc29jLXdtOTcxMy5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCmluZGV4IGZiNTNlNjUuLmIwZDRhZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCkBAIC0zMCw3ICszMCw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpbnQgcmVnID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spID8KIAkJICBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSA6IEFDOTdfUENNX0xSX0FEQ19SQVRFOwpAQCAtNDEsNiArNDEsMTAgQEAKIAkJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8XAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWM5N19kYWlfb3BzID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFjOTdfZGFpID0gewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCiAJLmFjOTdfY29udHJvbCA9IDEsCkBAIC01Niw4ICs2MCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBTVERfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19wcmVwYXJlLH0sCisJLm9wcyA9ICZhYzk3X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWM5N19kYWkpOwogCkBAIC04NCwxMCArODcsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkFDOTcgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBBQzk3X1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NkZXYtPmNvZGVjKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmICghc29jZGV2LT5jYXJkLT5jb2RlYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPm5hbWUgPSAiQUM5NyI7CkBAIC0xMjMsMjMgKzEyNiwyMSBAQAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKIGVycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjLT5yZWdfY2FjaGUpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWM5N19zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoIWNvZGVjKQogCQlyZXR1cm4gMDsKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYy0+cmVnX2NhY2hlKTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ5LDcgKzE1MCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXNuZF9hYzk3X3N1c3BlbmQoc29jZGV2LT5jb2RlYy0+YWM5Nyk7CisJc25kX2FjOTdfc3VzcGVuZChzb2NkZXYtPmNhcmQtPmNvZGVjLT5hYzk3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4LDcgKzE1OSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXNuZF9hYzk3X3Jlc3VtZShzb2NkZXYtPmNvZGVjLT5hYzk3KTsKKwlzbmRfYWM5N19yZXN1bWUoc29jZGV2LT5jYXJkLT5jb2RlYy0+YWM5Nyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCmluZGV4IDczZmRiYjQuLmRkYjNiMDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYwpAQCAtOTMsMjAgKzkzLDYgQEAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCBTd2l0Y2giLCBBQzk3X01JQywgNiwgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWQxOTgwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkMTk4MF9zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwgc25kX3NvY19jbmV3KAotCQkJCSZhZDE5ODBfc25kX2FjOTdfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgcmVnKQogewpAQCAtMTIzLDcgKzEwOSw3IEBACiAJZGVmYXVsdDoKIAkJcmVnID0gcmVnID4+IDE7CiAKLQkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRShhZDE5ODBfcmVnKSkpCisJCWlmIChyZWcgPj0gQVJSQVlfU0laRShhZDE5ODBfcmVnKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtMTM3LDcgKzEyMyw3IEBACiAKIAlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDwgKEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpKQorCWlmIChyZWcgPCBBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKQogCQljYWNoZVtyZWddID0gdmFsOwogCiAJcmV0dXJuIDA7CkBAIC0yMDAsMTAgKzE4NiwxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQUQxOTgwIFNvQyBBdWRpbyBDb2RlY1xuIik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5yZWdfY2FjaGUgPQpAQCAtMjY5LDcgKzI1NSw4IEBACiAJZXh0X3N0YXR1cyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCBleHRfc3RhdHVzJn4weDM4MDApOwogCi0JYWQxOTgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFkMTk4MF9zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFkMTk4MF9zbmRfYWM5N19jb250cm9scykpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhZDE5ODA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKQEAgLTI4OCwxNSArMjc1LDE1IEBACiAJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAKIGNhY2hlX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkMTk4MF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCmluZGV4IGIwOTI4OWEuLmU2MWRhYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCkBAIC01Myw3ICs1Myw3IEBACiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29kZWMtPmRhaSA9ICZhZDczMzExX2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIApAQCAtNzUsMTUgKzc1LDE1IEBACiByZWdpc3Rlcl9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhZDczMzExX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKaW5kZXggNTA3Y2UwYy4uNTY5NTczZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKQEAgLTcwLDcgKzcwLDcgQEAKICNkZWZpbmUgUkVHRF9JR1MoeCkJCSh4ICYgMHg3KQogI2RlZmluZSBSRUdEX1JNT0QJCSgxIDw8IDMpCiAjZGVmaW5lIFJFR0RfT0dTKHgpCQkoKHggJiAweDcpIDw8IDQpCi0jZGVmaW5lIFJFR0RfTVVURQkJKHggPDwgNykKKyNkZWZpbmUgUkVHRF9NVVRFCQkoMSA8PCA3KQogCiAvKiBDb250cm9sIHJlZ2lzdGVyIEUgKi8KICNkZWZpbmUgQ1RSTF9SRUdfRQkoNCA8PCA4KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0N2JjNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBBSzQxMDQgQUxTQSBTb0MgKEFTb0MpIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisKKyNpbmNsdWRlICJhazQxMDQuaCIKKworLyogQUs0MTA0IHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQUs0MTA0X1JFR19DT05UUk9MMQkJMHgwMAorI2RlZmluZSBBSzQxMDRfUkVHX1JFU0VSVkVECQkweDAxCisjZGVmaW5lIEFLNDEwNF9SRUdfQ09OVFJPTDIJCTB4MDIKKyNkZWZpbmUgQUs0MTA0X1JFR19UWAkJCTB4MDMKKyNkZWZpbmUgQUs0MTA0X1JFR19DSE5fU1RBVFVTKHgpCSgoeCkgKyAweDA0KQorI2RlZmluZSBBSzQxMDRfTlVNX1JFR1MJCQkxMAorCisjZGVmaW5lIEFLNDEwNF9SRUdfTUFTSwkJCTB4MWYKKyNkZWZpbmUgQUs0MTA0X1JFQUQJCQkweGMwCisjZGVmaW5lIEFLNDEwNF9XUklURQkJCTB4ZTAKKyNkZWZpbmUgQUs0MTA0X1JFU0VSVkVEX1ZBTAkJMHg1YgorCisvKiBCaXQgbWFza3MgZm9yIEFLNDEwNCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX1JTVE4JCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9QVwkJKDEgPDwgMSkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX0RJRjAJCSgxIDw8IDIpCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9ESUYxCQkoMSA8PCAzKQorCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMl9TRUwwCQkoMSA8PCAwKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDJfU0VMMQkJKDEgPDwgMSkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wyX01PREUJCSgxIDw8IDIpCisKKyNkZWZpbmUgQUs0MTA0X1RYX1RYRQkJCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9UWF9WCQkJKDEgPDwgMSkKKworI2RlZmluZSBEUlZfTkFNRSAiYWs0MTA0IgorCitzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXU4IHJlZ19jYWNoZVtBSzQxMDRfTlVNX1JFR1NdOworfTsKKworc3RhdGljIGludCBhazQxMDRfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplOyBpKyspIHsKKwkJaW50IHJldCA9IHNwaV93OHI4KHNwaSwgaSB8IEFLNDEwNF9SRUFEKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGZhaWx1cmVcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJlZ19jYWNoZVtpXSA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhazQxMDRfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmVnX2NhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3NwaV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgJj0gQUs0MTA0X1JFR19NQVNLOworCXJlZyB8PSBBSzQxMDRfV1JJVEU7CisKKwkvKiBvbmx5IHdyaXRlIHRvIHRoZSBoYXJkd2FyZSBpZiB2YWx1ZSBoYXMgY2hhbmdlZCAqLworCWlmIChjYWNoZVtyZWddICE9IHZhbHVlKSB7CisJCXU4IHRtcFsyXSA9IHsgcmVnLCB2YWx1ZSB9OworCQlpZiAoc3BpX3dyaXRlKHNwaSwgdG1wLCBzaXplb2YodG1wKSkpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IHZhbCA9IDA7CisKKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsICY9IH4oQUs0MTA0X0NPTlRST0wxX0RJRjAgfCBBSzQxMDRfQ09OVFJPTDFfRElGMSk7CisKKwkvKiBzZXQgREFJIGZvcm1hdCAqLworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX0RJRjA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX0RJRjAgfCBBSzQxMDRfQ09OVFJPTDFfRElGMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaW52YWxpZCBkYWkgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhpcyBkZXZpY2UgY2FuIG9ubHkgYmUgc2xhdmUgKi8KKwlpZiAoKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgdmFsID0gMDsKKworCS8qIHNldCB0aGUgSUVDOTU4IGJpdHM6IGNvbnN1bWVyIG1vZGUsIG5vIGNvcHlyaWdodCBiaXQgKi8KKwl2YWwgfD0gSUVDOTU4X0FFUzBfQ09OX05PVF9DT1BZUklHSFQ7CisJYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DSE5fU1RBVFVTKDApLCB2YWwpOworCisJdmFsID0gMDsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgNDQxMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfMzIwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVuc3VwcG9ydGVkIHNhbXBsaW5nIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DSE5fU1RBVFVTKDMpLCB2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhazQxMDFfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gYWs0MTA0X2h3X3BhcmFtcywKKwkuc2V0X2ZtdCA9IGFrNDEwNF9zZXRfZGFpX2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBhazQxMDRfZGFpID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkgU05EUlZfUENNX1JBVEVfMzIwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgIHwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQorCX0sCisJLm9wcyA9ICZhazQxMDFfZGFpX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqYWs0MTA0X2NvZGVjOworCitzdGF0aWMgaW50IGFrNDEwNF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IGFrNDEwNF9wcml2YXRlICphazQxMDQ7CisJaW50IHJldCwgdmFsOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKwlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWs0MTA0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFrNDEwNF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhazQxMDQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgY29kZWNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYyA9ICZhazQxMDQtPmNvZGVjOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OworCWNvZGVjLT5uYW1lID0gRFJWX05BTUU7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZhazQxMDRfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWs0MTA0OworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisJY29kZWMtPnJlZ19jYWNoZSA9IGFrNDEwNC0+cmVnX2NhY2hlOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFLNDEwNF9OVU1fUkVHUzsKKworCS8qIHJlYWQgYWxsIHJlZ3MgYW5kIGZpbGwgdGhlIGNhY2hlICovCisJcmV0ID0gYWs0MTA0X2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHJlYWQgdGhlICdyZXNlcnZlZCcgcmVnaXN0ZXIgLSBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldCwgaXQKKwkgKiBzaG91bGQgY29udGFpbiAweDViLiBOb3QgYSBnb29kIHdheSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mCisJICogdGhlIGRldmljZSwgYnV0IHRoZXJlIGlzIG5vIGhhcmR3YXJlIElEIHJlZ2lzdGVyLiAqLworCWlmIChhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfUkVTRVJWRUQpICE9CisJCQkJCSBBSzQxMDRfUkVTRVJWRURfVkFMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwkvKiBzZXQgcG93ZXItdXAgYW5kIG5vbi1yZXNldCBiaXRzICovCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxKTsKKwl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX1BXIHwgQUs0MTA0X0NPTlRST0wxX1JTVE47CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCisJLyogZW5hYmxlIHRyYW5zbWl0dGVyICovCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX1RYKTsKKwl2YWwgfD0gQUs0MTA0X1RYX1RYRTsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX1RYLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisKKwlhazQxMDRfY29kZWMgPSBjb2RlYzsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmYWs0MTA0X2RhaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgREFJXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGFrNDEwNCk7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiU1BJIGRldmljZSBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX2ZyZWVfY29kZWM6CisJa2ZyZWUoYWs0MTA0KTsKKwlhazQxMDRfZGFpLmRldiA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWs0MTA0X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0LCB2YWw7CisJc3RydWN0IGFrNDEwNF9wcml2YXRlICphazQxMDQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZSgmYWs0MTA0LT5jb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwkvKiBjbGVhciBwb3dlci11cCBhbmQgbm9uLXJlc2V0IGJpdHMgKi8KKwl2YWwgJj0gfihBSzQxMDRfQ09OVFJPTDFfUFcgfCBBSzQxMDRfQ09OVFJPTDFfUlNUTik7CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZSgmYWs0MTA0LT5jb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWFrNDEwNF9jb2RlYyA9IE5VTEw7CisJa2ZyZWUoYWs0MTA0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGFrNDEwNF9jb2RlYzsKKwlpbnQgcmV0OworCisJLyogQ29ubmVjdCB0aGUgY29kZWMgdG8gdGhlIHNvY2Rldi4gIHNuZF9zb2NfbmV3X3BjbXMoKSBuZWVkcyB0aGlzLiAqLworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKKworCS8qIFJlZ2lzdGVyIFBDTXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHNvY2RldiAqLworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJcmV0dXJuIDA7Cit9OworCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9hazQxMDQgPSB7CisJLnByb2JlID0gCWFrNDEwNF9wcm9iZSwKKwkucmVtb3ZlID0gCWFrNDEwNF9yZW1vdmUKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2aWNlX2FrNDEwNCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhazQxMDRfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgICA9IERSVl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgID0gYWs0MTA0X3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWs0MTA0X3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWs0MTA0X2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCJBc2FoaSBLYXNlaSBBSzQxMDQgQUxTQSBTb0MgQ29kZWMgRHJpdmVyXG4iKTsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWs0MTA0X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWs0MTA0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWs0MTA0X2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFrNDEwNF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFrNDEwNF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXNhaGkgS2FzZWkgQUs0MTA0IEFMU0EgU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg4ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FLNDEwNF9ICisjZGVmaW5lIF9BSzQxMDRfSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGFrNDEwNF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZpY2VfYWs0MTA0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCmluZGV4IDgxMzAwZDhkLi4xZjYzZDM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKQEAgLTE1NSwyMSArMTU1LDYgQEAKIAlTT0NfU0lOR0xFKCJNaWMgU2lkZXRvbmUgVm9sdW1lIiwgQUs0NTM1X1ZPTCwgNCwgNywgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWs0NTM1X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFrNDUzNV9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJmFrNDUzNV9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogTW9ubyAxIE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0NTM1X21vbm8xX21peGVyX2NvbnRyb2xzW10gPSB7CiAJU09DX0RBUE1fU0lOR0xFKCJNaWMgU2lkZXRvbmUgU3dpdGNoIiwgQUs0NTM1X1NJRzEsIDQsIDEsIDApLApAQCAtMzQ0LDcgKzMyOSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhazQ1MzVfcHJpdiAqYWs0NTM1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBtb2RlMiA9IGFrNDUzNV9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0NTM1X01PREUyKSAmIH4oMHgzIDw8IDUpOwogCWludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKSwgZnMgPSAyNTY7CkBAIC00MzYsNiArNDIxLDEzIEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfFwKIAkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWs0NTM1X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFrNDUzNV9od19wYXJhbXMsCisJLnNldF9mbXQJPSBhazQ1MzVfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZQk9IGFrNDUzNV9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWs0NTM1X3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFrNDUzNV9kYWkgPSB7CiAJLm5hbWUgPSAiQUs0NTM1IiwKIAkucGxheWJhY2sgPSB7CkBAIC00NTAsMTkgKzQ0MiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQUs0NTM1X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFrNDUzNV9od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gYWs0NTM1X3NldF9kYWlfZm10LAotCQkuZGlnaXRhbF9tdXRlID0gYWs0NTM1X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWs0NTM1X3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZhazQ1MzVfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhazQ1MzVfZGFpKTsKIAogc3RhdGljIGludCBhazQ1MzVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNDcxLDcgKzQ1OCw3IEBACiBzdGF0aWMgaW50IGFrNDUzNV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlhazQ1MzVfc3luYyhjb2RlYyk7CiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKQEAgLTQ4NCw3ICs0NzEsNyBAQAogICovCiBzdGF0aWMgaW50IGFrNDUzNV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIkFLNDUzNSI7CkBAIC01MTAsNyArNDk3LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCWFrNDUzNV9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhazQ1MzVfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWs0NTM1X3NuZF9jb250cm9scykpOwogCWFrNDUzNV9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNTM3LDcgKzUyNSw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gYWs0NTM1X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTYzNiw3ICs2MjQsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBhazQ1MzU7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtNjYzLDcgKzY1MSw3IEBACiBzdGF0aWMgaW50IGFrNDUzNV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKaW5kZXggZjFhYTBjMy4uN2ZhMDlhMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCkBAIC0zLDI3ICszLDIyIEBACiAgKgogICogQXV0aG9yOiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcworICogcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyCisgKiBleHByZXNzIG9yIGltcGxpZWQuCiAgKgogICogVGhpcyBpcyBhbiBBU29DIGRldmljZSBkcml2ZXIgZm9yIHRoZSBDaXJydXMgTG9naWMgQ1M0MjcwIGNvZGVjLgogICoKICAqIEN1cnJlbnQgZmVhdHVyZXMvbGltaXRhdGlvbnM6CiAgKgotICogMSkgU29mdHdhcmUgbW9kZSBpcyBzdXBwb3J0ZWQuICBTdGFuZC1hbG9uZSBtb2RlIGlzIGF1dG9tYXRpY2FsbHkKLSAqICAgIHNlbGVjdGVkIGlmIEkyQyBpcyBkaXNhYmxlZCBvciBpZiBhIENTNDI3MCBpcyBub3QgZm91bmQgb24gdGhlIEkyQwotICogICAgYnVzLiAgSG93ZXZlciwgc3RhbmQtYWxvbmUgbW9kZSBpcyBvbmx5IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBiZWNhdXNlCi0gKiAgICB0aGVyZSBpcyBubyBtZWNoYW5pc20geWV0IGZvciB0aGlzIGRyaXZlciBhbmQgdGhlIG1hY2hpbmUgZHJpdmVyIHRvCi0gKiAgICBjb21tdW5pY2F0ZSB0aGUgdmFsdWVzIG9mIHRoZSBNMCwgTTEsIE1DTEsxLCBhbmQgTUNMSzIgcGlucy4KLSAqIDIpIE9ubHkgSTJDIGlzIHN1cHBvcnRlZCwgbm90IFNQSQotICogMykgT25seSBNYXN0ZXIgbW9kZSBpcyBzdXBwb3J0ZWQsIG5vdCBTbGF2ZS4KLSAqIDQpIFRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiBtdXN0IGNhbGwKLSAqICAgIGNzNDI3MF9zZXRfZGFpX3N5c2NsaygpIHdpdGggdGhlIHZhbHVlIG9mIE1DTEsuCi0gKiA1KSBPbmx5IEkyUyBhbmQgbGVmdC1qdXN0aWZpZWQgbW9kZXMgYXJlIHN1cHBvcnRlZAotICogNikgUG93ZXIgbWFuYWdlbWVudCBpcyBub3Qgc3VwcG9ydGVkCi0gKiA3KSBUaGUgb25seSBzdXBwb3J0ZWQgY29udHJvbCBpcyB2b2x1bWUgYW5kIGhhcmR3YXJlIG11dGUgKGlmIGVuYWJsZWQpCisgKiAtIFNvZnR3YXJlIG1vZGUgaXMgc3VwcG9ydGVkLiAgU3RhbmQtYWxvbmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLgorICogLSBPbmx5IEkyQyBpcyBzdXBwb3J0ZWQsIG5vdCBTUEkKKyAqIC0gU3VwcG9ydCBmb3IgbWFzdGVyIGFuZCBzbGF2ZSBtb2RlCisgKiAtIFRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiBtdXN0IGNhbGwKKyAqICAgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgd2l0aCB0aGUgdmFsdWUgb2YgTUNMSy4KKyAqIC0gT25seSBJMlMgYW5kIGxlZnQtanVzdGlmaWVkIG1vZGVzIGFyZSBzdXBwb3J0ZWQKKyAqIC0gUG93ZXIgbWFuYWdlbWVudCBpcyBub3Qgc3VwcG9ydGVkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzUsMTggKzMwLDYgQEAKIAogI2luY2x1ZGUgImNzNDI3MC5oIgogCi0vKiBJZiBJMkMgaXMgZGVmaW5lZCwgdGhlbiB3ZSBzdXBwb3J0IHNvZnR3YXJlIG1vZGUuICBIb3dldmVyLCBpZiB3ZSdyZQotICAgbm90IGNvbXBpbGVkIGFzIG1vZHVsZSBidXQgSTJDIGlzLCB0aGVuIHdlIGNhbid0IHVzZSBJMkMgY2FsbHMuICovCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotI2RlZmluZSBVU0VfSTJDCi0jZW5kaWYKLQotLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgQ1M0MjcwICovCi1zdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgewotCXVuc2lnbmVkIGludCBtY2xrOyAvKiBJbnB1dCBmcmVxdWVuY3kgb2YgdGhlIE1DTEsgcGluICovCi0JdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCi19OwotCiAvKgogICogVGhlIGNvZGVjIGlzbid0IHJlYWxseSBiaWctZW5kaWFuIG9yIGxpdHRsZS1lbmRpYW4sIHNpbmNlIHRoZSBJMlMKICAqIGludGVyZmFjZSByZXF1aXJlcyBkYXRhIHRvIGJlIHNlbnQgc2VyaWFsbHkgd2l0aCB0aGUgTVNiaXQgZmlyc3QuCkBAIC02MCw4ICs0Myw2IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF8zQkUgfCBcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSAgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9CRSkKIAotI2lmZGVmIFVTRV9JMkMKLQogLyogQ1M0MjcwIHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8KICNkZWZpbmUgQ1M0MjcwX0NISVBJRAkweDAxCS8qIENoaXAgSUQgKi8KICNkZWZpbmUgQ1M0MjcwX1BXUkNUTAkweDAyCS8qIFBvd2VyIENvbnRyb2wgKi8KQEAgLTEyMSw4ICsxMDIsMjIgQEAKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0EJMHgwMQogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQgkweDAyCiAKLS8qCi0gKiBDbG9jayBSYXRpbyBTZWxlY3Rpb24gZm9yIE1hc3RlciBNb2RlIHdpdGggSTJDIGVuYWJsZWQKKy8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIENTNDI3MCAqLworc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1OCByZWdfY2FjaGVbQ1M0MjcwX05VTVJFR1NdOworCXVuc2lnbmVkIGludCBtY2xrOyAvKiBJbnB1dCBmcmVxdWVuY3kgb2YgdGhlIE1DTEsgcGluICovCisJdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCisJdW5zaWduZWQgaW50IHNsYXZlX21vZGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBjczQyNzBfbW9kZV9yYXRpb3MgLSBjbG9jayByYXRpbyB0YWJsZXMKKyAqIEByYXRpbzogdGhlIHJhdGlvIG9mIE1DTEsgdG8gdGhlIHNhbXBsZSByYXRlCisgKiBAc3BlZWRfbW9kZTogdGhlIFNwZWVkIE1vZGUgYml0cyB0byBzZXQgaW4gdGhlIE1vZGUgQ29udHJvbCByZWdpc3RlciBmb3IKKyAqICAgICAgICAgICAgICB0aGlzIHJhdGlvCisgKiBAbWNsazogdGhlIFJhdGlvIFNlbGVjdCBiaXRzIHRvIHNldCBpbiB0aGUgTW9kZSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGlzCisgKiAgICAgICAgcmF0aW8KICAqCiAgKiBUaGUgZGF0YSBmb3IgdGhpcyBjaGFydCBpcyB0YWtlbiBmcm9tIFRhYmxlIDUgb2YgdGhlIENTNDI3MCByZWZlcmVuY2UKICAqIG1hbnVhbC4KQEAgLTEzMSwzMSArMTI2LDMwIEBACiAgKiBJdCBpcyBhbHNvIHVzZWQgYnkgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgdG8gdGVsbCBBTFNBIHdoaWNoIHNhbXBsaW5nCiAgKiByYXRlcyB0aGUgQ1M0MjcwIGN1cnJlbnRseSBzdXBwb3J0cy4KICAqCi0gKiBFYWNoIGVsZW1lbnQgaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byB0aGUgcmF0aW9zIGluIG1jbGtfcmF0aW9zW10uCi0gKiBUaGVzZSB0d28gYXJyYXlzIG5lZWQgdG8gYmUgaW4gc3luYy4KLSAqCi0gKiAnc3BlZWRfbW9kZScgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd3JpdHRlbiB0byB0aGUKKyAqIEBzcGVlZF9tb2RlIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdyaXR0ZW4gdG8gdGhlCiAgKiBNT0RFIGJpdHMgb2YgdGhlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgogICoKLSAqICdtY2xrJyBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3aXJ0ZW4gdG8gdGhlIE1DTEsgYml0cyBvZgorICogQG1jbGsgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd2lydGVuIHRvIHRoZSBNQ0xLIGJpdHMgb2YKICAqIHRoZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIuCiAgKgogICogSW4gc2l0dWF0aW9ucyB3aGVyZSBhIHNpbmdsZSByYXRpbyBpcyByZXByZXNlbnRlZCBieSBtdWx0aXBsZSBzcGVlZAogICogbW9kZXMsIHdlIGZhdm9yIHRoZSBzbG93ZXN0IHNwZWVkLiAgRS5nLCBmb3IgYSByYXRpbyBvZiAxMjgsIHdlIHBpY2sKICAqIGRvdWJsZS1zcGVlZCBpbnN0ZWFkIG9mIHF1YWQtc3BlZWQuICBIb3dldmVyLCB0aGUgQ1M0MjcwIGVycmF0YSBzdGF0ZXMKLSAqIHRoYXQgRGl2aWRlLUJ5LTEuNSBjYW4gY2F1c2UgZmFpbHVyZXMsIHNvIHdlIGF2b2lkIHRoYXQgbW9kZSB3aGVyZQorICogdGhhdCBkaXZpZGUtQnktMS41IGNhbiBjYXVzZSBmYWlsdXJlcywgc28gd2UgYXZvaWQgdGhhdCBtb2RlIHdoZXJlCiAgKiBwb3NzaWJsZS4KICAqCi0gKiBFUlJBVEE6IFRoZXJlIGlzIGFuIGVycmF0YSBmb3IgdGhlIENTNDI3MCB3aGVyZSBkaXZpZGUtYnktMS41IGRvZXMgbm90Ci0gKiB3b3JrIGlmIFZEID0gMy4zVi4gIElmIHRoaXMgZWZmZWN0cyB5b3UsIHNlbGVjdCB0aGUKKyAqIEVycmF0YTogVGhlcmUgaXMgYW4gZXJyYXRhIGZvciB0aGUgQ1M0MjcwIHdoZXJlIGRpdmlkZS1ieS0xLjUgZG9lcyBub3QKKyAqIHdvcmsgaWYgVmQgaXMgMy4zVi4gIElmIHRoaXMgZWZmZWN0cyB5b3UsIHNlbGVjdCB0aGUKICAqIENPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQSBLY29uZmlnIG9wdGlvbiwgYW5kIHRoZSBkcml2ZXIgd2lsbAogICogbmV2ZXIgc2VsZWN0IGFueSBzYW1wbGUgcmF0ZXMgdGhhdCByZXF1aXJlIGRpdmlkZS1ieS0xLjUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyB7CiAJdW5zaWduZWQgaW50IHJhdGlvOwogCXU4IHNwZWVkX21vZGU7CiAJdTggbWNsazsKLX0gY3M0MjcwX21vZGVfcmF0aW9zW10gPSB7Cit9OworCitzdGF0aWMgc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyBjczQyNzBfbW9kZV9yYXRpb3NbXSA9IHsKIAl7NjQsIENTNDI3MF9NT0RFXzRYLCBDUzQyNzBfTU9ERV9ESVYxfSwKICNpZm5kZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBCiAJezk2LCBDUzQyNzBfTU9ERV80WCwgQ1M0MjcwX01PREVfRElWMTV9LApAQCAtMTcyLDM0ICsxNjYsMjcgQEAKIC8qIFRoZSBudW1iZXIgb2YgTUNMSy9MUkNLIHJhdGlvcyBzdXBwb3J0ZWQgYnkgdGhlIENTNDI3MCAqLwogI2RlZmluZSBOVU1fTUNMS19SQVRJT1MJCUFSUkFZX1NJWkUoY3M0MjcwX21vZGVfcmF0aW9zKQogCi0vKgotICogRGV0ZXJtaW5lIHRoZSBDUzQyNzAgc2FtcGxlcyByYXRlcy4KKy8qKgorICogY3M0MjcwX3NldF9kYWlfc3lzY2xrIC0gZGV0ZXJtaW5lIHRoZSBDUzQyNzAgc2FtcGxlcyByYXRlcy4KKyAqIEBjb2RlY19kYWk6IHRoZSBjb2RlYyBEQUkKKyAqIEBjbGtfaWQ6IHRoZSBjbG9jayBJRCAoaWdub3JlZCkKKyAqIEBmcmVxOiB0aGUgTUNMSyBpbnB1dCBmcmVxdWVuY3kKKyAqIEBkaXI6IHRoZSBjbG9jayBkaXJlY3Rpb24gKGlnbm9yZWQpCiAgKgotICogJ2ZyZXEnIGlzIHRoZSBpbnB1dCBmcmVxdWVuY3kgdG8gTUNMSy4gIFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlbGwgdGhlIGNvZGVjIGRyaXZlciB3aGF0IHRoZSBpbnB1dCBNQ0xLCisgKiBmcmVxdWVuY3kgaXMuCiAgKgogICogVGhlIHZhbHVlIG9mIE1DTEsgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIHJhdGVzIGFyZSBzdXBwb3J0ZWQKICAqIGJ5IHRoZSBDUzQyNzAuICBUaGUgcmF0aW8gb2YgTUNMSyAvIEZzIG11c3QgYmUgZXF1YWwgdG8gb25lIG9mIG5pbmUKLSAqIHN1cHBvcnQgdmFsdWVzOiA2NCwgOTYsIDEyOCwgMTkyLCAyNTYsIDM4NCwgNTEyLCA3NjgsIGFuZCAxMDI0LgorICogc3VwcG9ydGVkIHZhbHVlcyAtIDY0LCA5NiwgMTI4LCAxOTIsIDI1NiwgMzg0LCA1MTIsIDc2OCwgYW5kIDEwMjQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBuaW5lIHJhdGlvcyBhbmQgZGV0ZXJtaW5lcyB3aGljaCBvbmVzIG1hdGNoCiAgKiBhIHN0YW5kYXJkIHNhbXBsZSByYXRlLiAgSWYgdGhlcmUncyBhIG1hdGNoLCB0aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBsaXN0Ci0gKiBvZiBzdXBwb3J0IHNhbXBsZSByYXRlcy4KKyAqIG9mIHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24sCiAgKiBvdGhlcndpc2UgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaW4KICAqIHRpbWUgZm9yIEFMU0EuCi0gKgotICogTm90ZSB0aGF0IGluIHN0YW5kLWFsb25lIG1vZGUsIHRoZSBzYW1wbGUgcmF0ZSBpcyBkZXRlcm1pbmVkIGJ5IGlucHV0Ci0gKiBwaW5zIE0wLCBNMSwgTURJVjEsIGFuZCBNRElWMi4gIEFsc28gaW4gc3RhbmQtYWxvbmUgbW9kZSwgZGl2aWRlLWJ5LTMKLSAqIGlzIG5vdCBhIHByb2dyYW1tYWJsZSBvcHRpb24uICBIb3dldmVyLCBkaXZpZGUtYnktMyBpcyBub3QgYW4gYXZhaWxhYmxlCi0gKiBvcHRpb24gaW4gc3RhbmQtYWxvbmUgbW9kZS4gIFRoaXMgY2FzZXMgdHdvIHByb2JsZW1zOiBhIHJhdGlvIG9mIDc2OCBpcwotICogbm90IGF2YWlsYWJsZSAoaXQgcmVxdWlyZXMgZGl2aWRlLWJ5LTMpIGFuZCBCKSByYXRpb3MgMTkyIGFuZCAzODQgY2FuCi0gKiBvbmx5IGJlIHNlbGVjdGVkIHdpdGggZGl2aWRlLWJ5LTEuNSwgYnV0IHRoZXJlIGlzIGFuIGVycmF0ZSB0aGF0IG1ha2UKLSAqIHRoaXMgc2VsZWN0aW9uIGRpZmZpY3VsdC4KLSAqCi0gKiBJbiBhZGRpdGlvbiwgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG1hY2hpbmUKLSAqIGRyaXZlciB3aGF0IHRoZSBpbnB1dCBzZXR0aW5ncyBjYW4gYmUuICBUaGlzIHdvdWxkIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQKLSAqIGZvciBzdGFuZC1hbG9uZSBtb2RlIHRvIHdvcmsuCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKQEAgLTIyNSw3ICsyMTIsNyBAQAogCXJhdGVzICY9IH5TTkRSVl9QQ01fUkFURV9LTk9UOwogCiAJaWYgKCFyYXRlcykgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc2FtcGxlIHJhdGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MCw4ICsyMjcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENvbmZpZ3VyZSB0aGUgY29kZWMgZm9yIHRoZSBzZWxlY3RlZCBhdWRpbyBmb3JtYXQKKy8qKgorICogY3M0MjcwX3NldF9kYWlfZm10IC0gY29uZmlndXJlIHRoZSBjb2RlYyBmb3IgdGhlIHNlbGVjdGVkIGF1ZGlvIGZvcm1hdAorICogQGNvZGVjX2RhaTogdGhlIGNvZGVjIERBSQorICogQGZvcm1hdDogYSBTTkRfU09DX0RBSUZNVF94IHZhbHVlIGluZGljYXRpbmcgdGhlIGRhdGEgZm9ybWF0CiAgKgogICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGJpdG1hc2sgb2YgU05EX1NPQ19EQUlGTVRfeCBiaXRzIGFuZCBwcm9ncmFtcyB0aGUKICAqIGNvZGVjIGFjY29yZGluZ2x5LgpAQCAtMjU4LDMyICsyNDcsNDMgQEAKIAlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKKwkvKiBzZXQgREFJIGZvcm1hdCAqLwogCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKIAljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKIAkJY3M0MjcwLT5tb2RlID0gZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0s7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBpbnZhbGlkIERBSSBmb3JtYXRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpbnZhbGlkIGRhaSBmb3JtYXRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY3M0MjcwLT5zbGF2ZV9tb2RlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQljczQyNzAtPnNsYXZlX21vZGUgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBhbGwgb3RoZXIgbW9kZXMgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqLwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBBIGxpc3Qgb2YgYWRkcmVzc2VzIG9uIHdoaWNoIHRoaXMgQ1M0MjcwIGNvdWxkIHVzZS4gIEkyQyBhZGRyZXNzZXMgYXJlCi0gKiA3IGJpdHMuICBGb3IgdGhlIENTNDI3MCwgdGhlIHVwcGVyIGZvdXIgYml0cyBhcmUgYWx3YXlzIDEwMDEsIGFuZCB0aGUKLSAqIGxvd2VyIHRocmVlIGJpdHMgYXJlIGRldGVybWluZWQgdmlhIHRoZSBBRDIsIEFEMSwgYW5kIEFEMCBwaW5zCi0gKiAocmVzcGVjdGl2ZWx5KS4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweDQ4LCAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCBJMkNfQ0xJRU5UX0VORAotfTsKLUkyQ19DTElFTlRfSU5TTU9EOwotCi0vKgotICogUHJlLWZpbGwgdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKy8qKgorICogY3M0MjcwX2ZpbGxfY2FjaGUgLSBwcmUtZmlsbCB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKgorICogVGhpcyBmdW5jdGlvbiBmaWxscyBpbiB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlIGJ5IHJlYWRpbmcgdGhlIHJlZ2lzdGVyCisgKiB2YWx1ZXMgZnJvbSB0aGUgaGFyZHdhcmUuCisgKgorICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KKyAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKKyAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbS4KICAqCiAgKiBXZSB1c2UgdGhlIGF1dG8taW5jcmVtZW50IGZlYXR1cmUgb2YgdGhlIENTNDI3MCB0byByZWFkIGFsbCByZWdpc3RlcnMgaW4KICAqIG9uZSBzaG90LgpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCUNTNDI3MF9GSVJTVFJFRyB8IDB4ODAsIENTNDI3MF9OVU1SRUdTLCBjYWNoZSk7CiAKIAlpZiAobGVuZ3RoICE9IENTNDI3MF9OVU1SRUdTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgcmVhZCBmYWlsdXJlLCBhZGRyPTB4JXhcbiIsCisJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyByZWFkIGZhaWx1cmUsIGFkZHI9MHgleFxuIiwKIAkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zMDYsMTIgKzMwNiwxNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUmVhZCBmcm9tIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisvKioKKyAqIGNzNDI3MF9yZWFkX3JlZ19jYWNoZSAtIHJlYWQgZnJvbSB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVnaXN0ZXIuICBJdCByZWFkcyBvbmx5IGZyb20KKyAqIHRoZSByZWdpc3RlciBjYWNoZSwgbm90IHRoZSBoYXJkd2FyZSBpdHNlbGYuCiAgKgogICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KICAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKLSAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcm5jeSBwcm9ibGVtLgorICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVyZW5jeSBwcm9ibGVtLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJdW5zaWduZWQgaW50IHJlZykKQEAgLTMyNCw4ICszMjksMTEgQEAKIAlyZXR1cm4gY2FjaGVbcmVnIC0gQ1M0MjcwX0ZJUlNUUkVHXTsKIH0KIAotLyoKLSAqIFdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KKy8qKgorICogY3M0MjcwX2kyY193cml0ZSAtIHdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KKyAqIEBjb2RlYzogdGhlIGNvZGVjIGZvciB0aGlzIENTNDI3MAorICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHdyaXRlCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGdpdmVuIENTNDI3MCByZWdpc3RlciwgYW5kCiAgKiBhbHNvIHVwZGF0ZXMgdGhlIHJlZ2lzdGVyIGNhY2hlLgpAQCAtMzQ2LDcgKzM1NCw3IEBACiAJaWYgKGNhY2hlW3JlZyAtIENTNDI3MF9GSVJTVFJFR10gIT0gdmFsdWUpIHsKIAkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMzU3LDExICszNjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFByb2dyYW0gdGhlIENTNDI3MCB3aXRoIHRoZSBnaXZlbiBoYXJkd2FyZSBwYXJhbWV0ZXJzLgorLyoqCisgKiBjczQyNzBfaHdfcGFyYW1zIC0gcHJvZ3JhbSB0aGUgQ1M0MjcwIHdpdGggdGhlIGdpdmVuIGhhcmR3YXJlIHBhcmFtZXRlcnMuCisgKiBAc3Vic3RyZWFtOiB0aGUgYXVkaW8gc3RyZWFtCisgKiBAcGFyYW1zOiB0aGUgaGFyZHdhcmUgcGFyYW1ldGVycyB0byBzZXQKKyAqIEBkYWk6IHRoZSBTT0MgREFJIChpZ25vcmVkKQogICoKLSAqIFRoZSAub3BzIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBwcm92aWRlIGJvYXJkLXNwZWNpZmljIGRhdGEsIGxpa2UKLSAqIGlucHV0IGZyZXF1ZW5jaWVzLCB0byB0aGlzIGRyaXZlci4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhhdCBpbmZvcm1hdGlvbiwKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIGhhcmR3YXJlIHdpdGggdGhlIHZhbHVlcyBwcm92aWRlZC4KKyAqIFNwZWNpZmljYWxseSwgdGhlIHNhbXBsZSByYXRlIGFuZCB0aGUgZGF0YSBmb3JtYXQuCisgKgorICogVGhlIC5vcHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHByb3ZpZGUgYm9hcmQtc3BlY2lmaWMgZGF0YSwgbGlrZSBpbnB1dAorICogZnJlcXVlbmNpZXMsIHRvIHRoaXMgZHJpdmVyLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGF0IGluZm9ybWF0aW9uLAogICogY29tYmluZXMgaXQgd2l0aCB0aGUgaGFyZHdhcmUgcGFyYW1ldGVycyBwcm92aWRlZCwgYW5kIHByb2dyYW1zIHRoZQogICogaGFyZHdhcmUgYWNjb3JkaW5nbHkuCiAgKi8KQEAgLTM3MSw3ICszODUsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTM5MSwzMyArNDA1LDI4IEBACiAKIAlpZiAoaSA9PSBOVU1fTUNMS19SQVRJT1MpIHsKIAkJLyogV2UgZGlkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgcmF0aW8gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIHJhdGlvXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgbWF0Y2hpbmcgcmF0aW9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBGcmVlemUgYW5kIHBvd2VyLWRvd24gdGhlIGNvZGVjICovCi0KLQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCBDUzQyNzBfUFdSQ1RMX0ZSRUVaRSB8Ci0JCQkgICAgQ1M0MjcwX1BXUkNUTF9QRE5fQURDIHwgQ1M0MjcwX1BXUkNUTF9QRE5fREFDIHwKLQkJCSAgICBDUzQyNzBfUFdSQ1RMX1BETik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFByb2dyYW0gdGhlIG1vZGUgY29udHJvbCByZWdpc3RlciAqLworCS8qIFNldCB0aGUgc2FtcGxlIHJhdGUgKi8KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX01PREUpOwogCXJlZyAmPSB+KENTNDI3MF9NT0RFX1NQRUVEX01BU0sgfCBDUzQyNzBfTU9ERV9ESVZfTUFTSyk7Ci0JcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5zcGVlZF9tb2RlIHwgY3M0MjcwX21vZGVfcmF0aW9zW2ldLm1jbGs7CisJcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5tY2xrOworCisJaWYgKGNzNDI3MC0+c2xhdmVfbW9kZSkKKwkJcmVnIHw9IENTNDI3MF9NT0RFX1NMQVZFOworCWVsc2UKKwkJcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5zcGVlZF9tb2RlOwogCiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX01PREUsIHJlZyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBQcm9ncmFtIHRoZSBmb3JtYXQgcmVnaXN0ZXIgKi8KKwkvKiBTZXQgdGhlIERBSSBmb3JtYXQgKi8KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX0ZPUk1BVCk7CiAJcmVnICY9IH4oQ1M0MjcwX0ZPUk1BVF9EQUNfTUFTSyB8IENTNDI3MF9GT1JNQVRfQURDX01BU0spOwpAQCAtNDMwLDU1ICs0MzksMjMgQEAKIAkJcmVnIHw9IENTNDI3MF9GT1JNQVRfREFDX0xKIHwgQ1M0MjcwX0ZPUk1BVF9BRENfTEo7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiB1bmtub3duIGZvcm1hdFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVua25vd24gZGFpIGZvcm1hdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9GT1JNQVQsIHJlZyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIERpc2FibGUgYXV0by1tdXRlLiAgVGhpcyBmZWF0dXJlIGFwcGVhcnMgdG8gYmUgYnVnZ3ksIGJlY2F1c2UgaW4KLQkgICBzb21lIHNpdHVhdGlvbnMsIGF1dG8tbXV0ZSB3aWxsIG5vdCBkZWFjdGl2YXRlIHdoZW4gaXQgc2hvdWxkLiAqLwotCi0JcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTVVURSk7Ci0JcmVnICY9IH5DUzQyNzBfTVVURV9BVVRPOwotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWcpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBEaXNhYmxlIGF1dG9tYXRpYyB2b2x1bWUgY29udHJvbC4gIEl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQKLQkgKiBpdCBjYXVzZXMgdm9sdW1lIGNoYW5nZSBjb21tYW5kcyB0byBiZSBkZWxheWVkLCBzb21ldGltZXMgdW50aWwKLQkgKiBhZnRlciBwbGF5YmFjayBoYXMgc3RhcnRlZC4KLQkgKi8KLQotCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX1RSQU5TKTsKLQlyZWcgJj0gfihDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPKTsKLQlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfVFJBTlMsIHJlZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBUaGF3IGFuZCBwb3dlci11cCB0aGUgY29kZWMgKi8KLQotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9IV01VVEUKLQotLyoKLSAqIFNldCB0aGUgQ1M0MjcwIGV4dGVybmFsIG11dGUKKy8qKgorICogY3M0MjcwX211dGUgLSBlbmFibGUvZGlzYWJsZSB0aGUgQ1M0MjcwIGV4dGVybmFsIG11dGUKKyAqIEBkYWk6IHRoZSBTT0MgREFJCisgKiBAbXV0ZTogMCA9IGRpc2FibGUgbXV0ZSwgMSA9IGVuYWJsZSBtdXRlCiAgKgogICogVGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSBtdXRlIGJpdHMgaW4gdGhlIE1VVEUgcmVnaXN0ZXIuICBUaGUgQ1M0MjcwJ3MKICAqIG11dGUgY2FwYWJpbGl0eSBpcyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbXV0aW5nIGNpcmN1aXRyeSwgc28gaWYgdGhlCkBAIC00OTMsMTUwICs0NzAsNDcgQEAKIAlyZWc2ID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTVVURSk7CiAKIAlpZiAobXV0ZSkKLQkJcmVnNiB8PSBDUzQyNzBfTVVURV9BRENfQSB8IENTNDI3MF9NVVRFX0FEQ19CIHwKLQkJCUNTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0I7CisJCXJlZzYgfD0gQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQjsKIAllbHNlCi0JCXJlZzYgJj0gfihDUzQyNzBfTVVURV9BRENfQSB8IENTNDI3MF9NVVRFX0FEQ19CIHwKLQkJCSAgQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQik7CisJCXJlZzYgJj0gfihDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19CKTsKIAogCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfTVVURSwgcmVnNik7CiB9CiAKLSNlbmRpZgotCi1zdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKiwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKik7Ci0KIC8qIEEgbGlzdCBvZiBub24tREFQTSBjb250cm9scyB0aGF0IHRoZSBDUzQyNzAgc3VwcG9ydHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQyNzBfc25kX2NvbnRyb2xzW10gPSB7CiAJU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkJQ1M0MjcwX1ZPTEEsIENTNDI3MF9WT0xCLCAwLCAweEZGLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0gewotCXsiY3M0MjcwIiwgMH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3M0MjcwX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzNDI3MF9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIkNTNDI3MCBJMkMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5pZF90YWJsZSA9IGNzNDI3MF9pZCwKLQkucHJvYmUgPSBjczQyNzBfaTJjX3Byb2JlLAorCQlDUzQyNzBfVk9MQSwgQ1M0MjcwX1ZPTEIsIDAsIDB4RkYsIDEpLAorCVNPQ19TSU5HTEUoIkRpZ2l0YWwgU2lkZXRvbmUgU3dpdGNoIiwgQ1M0MjcwX0ZPUk1BVCwgNSwgMSwgMCksCisJU09DX1NJTkdMRSgiU29mdCBSYW1wIFN3aXRjaCIsIENTNDI3MF9UUkFOUywgNiwgMSwgMCksCisJU09DX1NJTkdMRSgiWmVybyBDcm9zcyBTd2l0Y2giLCBDUzQyNzBfVFJBTlMsIDUsIDEsIDApLAorCVNPQ19TSU5HTEUoIlBvcGd1YXJkIFN3aXRjaCIsIENTNDI3MF9NT0RFLCAwLCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJBdXRvLU11dGUgU3dpdGNoIiwgQ1M0MjcwX01VVEUsIDUsIDEsIDApLAorCVNPQ19ET1VCTEUoIk1hc3RlciBDYXB0dXJlIFN3aXRjaCIsIENTNDI3MF9NVVRFLCAzLCA0LCAxLCAwKQogfTsKIAogLyoKLSAqIEdsb2JhbCB2YXJpYWJsZSB0byBzdG9yZSBzb2NkZXYgZm9yIGkyYyBwcm9iZSBmdW5jdGlvbi4KKyAqIGNzNDI3MF9jb2RlYyAtIGdsb2JhbCB2YXJpYWJsZSB0byBzdG9yZSBjb2RlYyBmb3IgdGhlIEFTb0MgcHJvYmUgZnVuY3Rpb24KICAqCiAgKiBJZiBzdHJ1Y3QgaTJjX2RyaXZlciBoYWQgYSBwcml2YXRlX2RhdGEgZmllbGQsIHdlIHdvdWxkbid0IG5lZWQgdG8gdXNlCi0gKiBjczQyNzBfc29jZGVjLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gcGFzcyB0aGUgc29jZGV2IHN0cnVjdHVyZSB0bwotICogY3M0MjcwX2kyY19wcm9iZSgpLgotICoKLSAqIFRoZSByZWFsIHNvbHV0aW9uIHRvIGNzNDI3MF9zb2NkZXYgaXMgdG8gY3JlYXRlIGEgbWVjaGFuaXNtCi0gKiB0aGF0IG1hcHMgSTJDIGFkZHJlc3NlcyB0byBzbmRfc29jX2RldmljZSBzdHJ1Y3R1cmVzLiAgUGVyaGFwcyB0aGUKLSAqIGNyZWF0aW9uIG9mIHRoZSBzbmRfc29jX2RldmljZSBvYmplY3Qgc2hvdWxkIGJlIG1vdmVkIG91dCBvZgotICogY3M0MjcwX3Byb2JlKCkgYW5kIGludG8gY3M0MjcwX2kyY19wcm9iZSgpLCBidXQgdGhhdCB3b3VsZCBtYWtlIHRoaXMKLSAqIGRyaXZlciBkZXBlbmRlbnQgb24gSTJDLiAgVGhlIENTNDI3MCBzdXBwb3J0cyAic3RhbmQtYWxvbmUiIG1vZGUsIHdoZXJlYnkKLSAqIHRoZSBjaGlwIGlzICpub3QqIGNvbm5lY3RlZCB0byB0aGUgSTJDIGJ1cywgYnV0IGlzIGluc3RlYWQgY29uZmlndXJlZCB2aWEKLSAqIGlucHV0IHBpbnMuCisgKiBjczQyNzBfY29kZWMuICBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBwYXNzIHRoZSBjb2RlYyBzdHJ1Y3R1cmUgZnJvbQorICogY3M0MjcwX2kyY19wcm9iZSgpIHRvIGNzNDI3MF9wcm9iZSgpLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gZ29vZAorICogd2F5IHRvIHN5bmNocm9uaXplIHRoZXNlIHR3byBmdW5jdGlvbnMuICBjczQyNzBfaTJjX3Byb2JlKCkgY2FuIGJlIGNhbGxlZAorICogbXVsdGlwbGUgdGltZXMgYmVmb3JlIGNzNDI3MF9wcm9iZSgpIGlzIGNhbGxlZCBldmVuIG9uY2UuICBTbyBmb3Igbm93LCB3ZQorICogYWxzbyBvbmx5IGFsbG93IGNzNDI3MF9pMmNfcHJvYmUoKSB0byBiZSBydW4gb25jZS4gIFRoYXQgbWVhbnMgdGhhdCB3ZSBkbworICogbm90IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjczQyNzAgZGV2aWNlIGluIHRoZSBzeXN0ZW0sIGF0IGxlYXN0IGZvciBub3cuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmNzNDI3MF9zb2NkZXY7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNzNDI3MF9jb2RlYzsKIAotLyoKLSAqIEluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2Ugb2YgdGhlIENTNDI3MAotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB3aGVuZXZlciB0aGUgSTJDIHN1YnN5c3RlbSBmaW5kcyBhIGRldmljZQotICogYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MuCi0gKgotICogTm90ZTogc25kX3NvY19uZXdfcGNtcygpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQsCi0gKiBiZWNhdXNlIG9mIHNuZF9jdGxfYWRkKCkuCi0gKi8KLXN0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCwKLQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjczQyNzBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBQcm9iaW5nIGFsbCBwb3NzaWJsZSBhZGRyZXNzZXMgaGFzIG9uZSBkcmF3YmFjazogaWYgdGhlcmUgYXJlCi0JICAgbXVsdGlwbGUgQ1M0MjcwcyBvbiB0aGUgYnVzLCB0aGVuIHlvdSBjYW5ub3Qgc3BlY2lmeSB3aGljaAotCSAgIHNvY2RldiBpcyBtYXRjaGVkIHdpdGggd2hpY2ggQ1M0MjcwLiAgRm9yIG5vdywgd2UganVzdCByZWplY3QKLQkgICB0aGlzIEkyQyBkZXZpY2UgaWYgdGhlIHNvY2RldiBhbHJlYWR5IGhhcyBvbmUgYXR0YWNoZWQuICovCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogTm90ZTogY29kZWNfZGFpLT5jb2RlYyBpcyBOVUxMIGhlcmUgKi8KLQotCWNvZGVjLT5yZWdfY2FjaGUgPSBremFsbG9jKENTNDI3MF9OVU1SRUdTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBhbGxvY2F0ZSByZWdpc3RlciBjYWNoZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIENTNDI3MCAqLwotCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyY19jbGllbnQsIENTNDI3MF9DSElQSUQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gcmVhZCBJMkNcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBUaGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgY2hpcCBJRCBzaG91bGQgYmUgMTEwMC4gKi8KLQlpZiAoKHJldCAmIDB4RjApICE9IDB4QzApIHsKLQkJLyogVGhlIGRldmljZSBhdCB0aGlzIGFkZHJlc3MgaXMgbm90IGEgQ1M0MjcwIGNvZGVjICovCi0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBmb3VuZCBkZXZpY2UgYXQgSTJDIGFkZHJlc3MgJVhcbiIsCi0JCWkyY19jbGllbnQtPmFkZHIpOwotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogaGFyZHdhcmUgcmV2aXNpb24gJVhcbiIsIHJldCAmIDB4Rik7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjX2NsaWVudDsKLQljb2RlYy0+cmVhZCA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSBjczQyNzBfaTJjX3dyaXRlOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IENTNDI3MF9OVU1SRUdTOwotCi0JLyogVGhlIEkyQyBpbnRlcmZhY2UgaXMgc2V0IHVwLCBzbyBwcmUtZmlsbCBvdXIgcmVnaXN0ZXIgY2FjaGUgKi8KLQotCXJldCA9IGNzNDI3MF9maWxsX2NhY2hlKGNvZGVjKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIEFkZCB0aGUgbm9uLURBUE0gY29udHJvbHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNzNDI3MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwgPQotCQlzbmRfc29jX2NuZXcoJmNzNDI3MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKTsKLQotCQlyZXQgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwga2N0cmwpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JfQotCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyY19jbGllbnQsIGNvZGVjKTsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gTlVMTDsKLQotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IDA7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogVVNFX0kyQyovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBjczQyNzBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gY3M0MjcwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IGNzNDI3MF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IGNzNDI3MF9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gY3M0MjcwX211dGUsCit9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgY3M0MjcwX2RhaSA9IHsKLQkubmFtZSA9ICJDUzQyNzAiLAorCS5uYW1lID0gImNzNDI3MCIsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMSwKQEAgLTY1MSwxMTggKzUyNSwyNTEgQEAKIAkJLnJhdGVzID0gMCwKIAkJLmZvcm1hdHMgPSBDUzQyNzBfRk9STUFUUywKIAl9LAorCS5vcHMgPSAmY3M0MjcwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoY3M0MjcwX2RhaSk7CiAKLS8qCi0gKiBBU29DIHByb2JlIGZ1bmN0aW9uCisvKioKKyAqIGNzNDI3MF9wcm9iZSAtIEFTb0MgcHJvYmUgZnVuY3Rpb24KKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBtYWNoaW5lIGRyaXZlciBjYWxscwotICogcGxhdGZvcm1fZGV2aWNlX2FkZCgpLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBBU29DIGhhcyBhbGwgdGhlIHBpZWNlcyBpdCBuZWVkcyB0bworICogaW5zdGFudGlhdGUgYSBzb3VuZCBkcml2ZXIuCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOworCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJDUzQyNzAgQUxTQSBTb0MgQ29kZWNcbiIpOwotCi0JLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgc25kX3NvY19jb2RlYyBzdHJ1Y3R1cmUKLQkgICBhbmQgb3VyIHByaXZhdGUgZGF0YSB0b2dldGhlci4gKi8KLQljb2RlYyA9IGt6YWxsb2MoQUxJR04oc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgNCkgKwotCQkJc2l6ZW9mKHN0cnVjdCBjczQyNzBfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghY29kZWMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IENvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlYyBzdHJ1Y3R1cmVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwotCi0JY29kZWMtPm5hbWUgPSAiQ1M0MjcwIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+ZGFpID0gJmNzNDI3MF9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBjb2RlYyArCi0JCUFMSUdOKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIDQpOwotCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCS8qIENvbm5lY3QgdGhlIGNvZGVjIHRvIHRoZSBzb2NkZXYuICBzbmRfc29jX25ld19wY21zKCkgbmVlZHMgdGhpcy4gKi8KKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAkvKiBSZWdpc3RlciBQQ01zICovCi0KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gY3JlYXRlIFBDTXNcbiIpOwotCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCXJldHVybiByZXQ7CiAJfQogCi0jaWZkZWYgVVNFX0kyQwotCWNzNDI3MF9zb2NkZXYgPSBzb2NkZXY7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byBhdHRhY2ggZHJpdmVyIik7CisJLyogQWRkIHRoZSBub24tREFQTSBjb250cm9scyAqLworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBjczQyNzBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoY3M0MjcwX3NuZF9jb250cm9scykpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBhZGQgY29udHJvbHNcbiIpOwogCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKLQkvKiBEaWQgd2UgZmluZCBhIENTNDI3MCBvbiB0aGUgSTJDIGJ1cz8gKi8KLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkgewotCQkvKiBJbml0aWFsaXplIGNvZGVjIG9wcyAqLwotCQljczQyNzBfZGFpLm9wcy5od19wYXJhbXMgPSBjczQyNzBfaHdfcGFyYW1zOwotCQljczQyNzBfZGFpLm9wcy5zZXRfc3lzY2xrID0gY3M0MjcwX3NldF9kYWlfc3lzY2xrOwotCQljczQyNzBfZGFpLm9wcy5zZXRfZm10ID0gY3M0MjcwX3NldF9kYWlfZm10OwotI2lmZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9IV01VVEUKLQkJY3M0MjcwX2RhaS5vcHMuZGlnaXRhbF9tdXRlID0gY3M0MjcwX211dGU7Ci0jZW5kaWYKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBubyBJMkMgZGV2aWNlIGZvdW5kLCAiCi0JCQkidXNpbmcgc3RhbmQtYWxvbmUgbW9kZVxuIik7Ci0jZWxzZQotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogSTJDIGRpc2FibGVkLCB1c2luZyBzdGFuZC1hbG9uZSBtb2RlXG4iKTsKLSNlbmRpZgotCisJLyogQW5kIGZpbmFsbHksIHJlZ2lzdGVyIHRoZSBzb2NkZXYgKi8KIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7Ci0JCWdvdG8gZXJyb3JfZGVsX2RyaXZlcjsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZGVsX2RyaXZlcjoKLSNpZmRlZiBVU0VfSTJDCi0JaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKLQogZXJyb3JfZnJlZV9wY21zOgotI2VuZGlmCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAotZXJyb3JfZnJlZV9jb2RlYzoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKLQogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogY3M0MjcwX3JlbW92ZSAtIEFTb0MgcmVtb3ZlIGZ1bmN0aW9uCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY291bnRlcnBhcnQgdG8gY3M0MjcwX3Byb2JlKCkuCisgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCi0jaWZkZWYgVVNFX0kyQwotCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7Ci0jZW5kaWYKKwlyZXR1cm4gMDsKK307CiAKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKy8qKgorICogY3M0MjcwX2kyY19wcm9iZSAtIGluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2Ugb2YgdGhlIENTNDI3MAorICogQGkyY19jbGllbnQ6IHRoZSBJMkMgY2xpZW50IG9iamVjdAorICogQGlkOiB0aGUgSTJDIGRldmljZSBJRCAoaWdub3JlZCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgSTJDIHN1YnN5c3RlbSBmaW5kcyBhIGRldmljZSB0aGF0CisgKiBtYXRjaGVzIHRoZSBkZXZpY2UgSUQgZ2l2ZW4gdmlhIGEgcHJpb3IgY2FsbCB0byBpMmNfYWRkX2RyaXZlcigpLgorICovCitzdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQsCisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCByZXQ7CisKKwkvKiBGb3Igbm93LCB3ZSBvbmx5IHN1cHBvcnQgb25lIGNzNDI3MCBkZXZpY2UgaW4gdGhlIHN5c3RlbS4gIFNlZSB0aGUKKwkgKiBjb21tZW50IGZvciBjczQyNzBfY29kZWMuCisJICovCisJaWYgKGNzNDI3MF9jb2RlYykgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJpZ25vcmluZyBDUzQyNzAgYXQgYWRkciAlWFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJvbmx5IG9uZSBwZXIgYm9hcmQgYWxsb3dlZFxuIik7CisJCS8qIFNob3VsZCB3ZSByZXR1cm4gc29tZXRoaW5nIG90aGVyIHRoYW4gRU5PREVWIGhlcmU/ICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBDUzQyNzAgKi8KKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShpMmNfY2xpZW50LCBDUzQyNzBfQ0hJUElEKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBpMmMgYXQgYWRkciAlWFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBUaGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgY2hpcCBJRCBzaG91bGQgYmUgMTEwMC4gKi8KKwlpZiAoKHJldCAmIDB4RjApICE9IDB4QzApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZGV2aWNlIGF0IGFkZHIgJVggaXMgbm90IGEgQ1M0MjcwXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9pbmZvKCZpMmNfY2xpZW50LT5kZXYsICJmb3VuZCBkZXZpY2UgYXQgaTJjIGFkZHJlc3MgJVhcbiIsCisJCWkyY19jbGllbnQtPmFkZHIpOworCWRldl9pbmZvKCZpMmNfY2xpZW50LT5kZXYsICJoYXJkd2FyZSByZXZpc2lvbiAlWFxuIiwgcmV0ICYgMHhGKTsKKworCS8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHNuZF9zb2NfY29kZWMgc3RydWN0dXJlCisJICAgYW5kIG91ciBwcml2YXRlIGRhdGEgdG9nZXRoZXIuICovCisJY3M0MjcwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNzNDI3MF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjczQyNzApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGNvZGVjXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNvZGVjID0gJmNzNDI3MC0+Y29kZWM7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPmRldiA9ICZpMmNfY2xpZW50LT5kZXY7CisJY29kZWMtPm5hbWUgPSAiQ1M0MjcwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmNzNDI3MF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBjczQyNzA7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyY19jbGllbnQ7CisJY29kZWMtPnJlYWQgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gY3M0MjcwX2kyY193cml0ZTsKKwljb2RlYy0+cmVnX2NhY2hlID0gY3M0MjcwLT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQ1M0MjcwX05VTVJFR1M7CisKKwkvKiBUaGUgSTJDIGludGVyZmFjZSBpcyBzZXQgdXAsIHNvIHByZS1maWxsIG91ciByZWdpc3RlciBjYWNoZSAqLworCisJcmV0ID0gY3M0MjcwX2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCS8qIERpc2FibGUgYXV0by1tdXRlLiAgVGhpcyBmZWF0dXJlIGFwcGVhcnMgdG8gYmUgYnVnZ3kuICBJbiBzb21lCisJICogc2l0dWF0aW9ucywgYXV0by1tdXRlIHdpbGwgbm90IGRlYWN0aXZhdGUgd2hlbiBpdCBzaG91bGQsIHNvIHdlIHdhbnQKKwkgKiB0aGlzIGZlYXR1cmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEFuIGFwcGxpY2F0aW9uIChlLmcuIGFsc2FjdGwpIGNhbgorCSAqIHJlLWVuYWJsZWQgaXQgYnkgdXNpbmcgdGhlIGNvbnRyb2xzLgorCSAqLworCisJcmVnID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBDUzQyNzBfTVVURSk7CisJcmVnICY9IH5DUzQyNzBfTVVURV9BVVRPOworCXJldCA9IGNzNDI3MF9pMmNfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERpc2FibGUgYXV0b21hdGljIHZvbHVtZSBjb250cm9sLiAgVGhlIGhhcmR3YXJlIGVuYWJsZXMsIGFuZCBpdAorCSAqIGNhdXNlcyB2b2x1bWUgY2hhbmdlIGNvbW1hbmRzIHRvIGJlIGRlbGF5ZWQsIHNvbWV0aW1lcyB1bnRpbCBhZnRlcgorCSAqIHBsYXliYWNrIGhhcyBzdGFydGVkLiAgQW4gYXBwbGljYXRpb24gKGUuZy4gYWxzYWN0bCkgY2FuCisJICogcmUtZW5hYmxlZCBpdCBieSB1c2luZyB0aGUgY29udHJvbHMuCisJICovCisKKwlyZWcgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIENTNDI3MF9UUkFOUyk7CisJcmVnICY9IH4oQ1M0MjcwX1RSQU5TX1NPRlQgfCBDUzQyNzBfVFJBTlNfWkVSTyk7CisJcmV0ID0gY3M0MjcwX2kyY193cml0ZShjb2RlYywgQ1M0MjcwX1RSQU5TLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIERBSS4gTm9ybWFsbHksIHdlJ2QgcHJlZmVyIHRvIGhhdmUgYSBrbWFsbG9jJ2QgREFJCisJICogc3RydWN0dXJlIGZvciBlYWNoIENTNDI3MCBkZXZpY2UsIGJ1dCB0aGUgbWFjaGluZSBkcml2ZXIgbmVlZHMgdG8KKwkgKiBoYXZlIGEgcG9pbnRlciB0byB0aGUgREFJIHN0cnVjdHVyZSwgc28gZm9yIG5vdyBpdCBtdXN0IGJlIGEgZ2xvYmFsCisJICogdmFyaWFibGUuCisJICovCisJY3M0MjcwX2RhaS5kZXYgPSAmaTJjX2NsaWVudC0+ZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIERBSS4gIElmIGFsbCB0aGUgb3RoZXIgQVNvQyBkcml2ZXIgaGF2ZSBhbHJlYWR5CisJICogcmVnaXN0ZXJlZCwgdGhlbiB0aGlzIHdpbGwgY2FsbCBvdXIgcHJvYmUgZnVuY3Rpb24sIHNvCisJICogY3M0MjcwX2NvZGVjIG5lZWRzIHRvIGJlIHJlYWR5LgorCSAqLworCWNzNDI3MF9jb2RlYyA9IGNvZGVjOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZjczQyNzBfZGFpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgREFJZVxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCwgY3M0MjcwKTsKKworCXJldHVybiAwOworCitlcnJvcl9mcmVlX2NvZGVjOgorCWtmcmVlKGNzNDI3MCk7CisJY3M0MjcwX2NvZGVjID0gTlVMTDsKKwljczQyNzBfZGFpLmRldiA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNzNDI3MF9pMmNfcmVtb3ZlIC0gcmVtb3ZlIGFuIEkyQyBkZXZpY2UKKyAqIEBpMmNfY2xpZW50OiB0aGUgSTJDIGNsaWVudCBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byBjczQyNzBfaTJjX3Byb2JlKCkuCisgKi8KK3N0YXRpYyBpbnQgY3M0MjcwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQpCit7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCk7CisKKwlrZnJlZShjczQyNzApOworCWNzNDI3MF9jb2RlYyA9IE5VTEw7CisJY3M0MjcwX2RhaS5kZXYgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBjczQyNzBfaWQgLSBJMkMgZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKyAqLworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0geworCXsiY3M0MjcwIiwgMH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3M0MjcwX2lkKTsKKworLyoKKyAqIGNzNDI3MF9pMmNfZHJpdmVyIC0gSTJDIGRldmljZSBpZGVudGlmaWNhdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIHRlbGxzIHRoZSBJMkMgc3Vic3lzdGVtIGhvdyB0byBpZGVudGlmeSBhbmQgc3VwcG9ydCBhCisgKiBnaXZlbiBJMkMgZGV2aWNlIHR5cGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjczQyNzBfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJjczQyNzAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZSA9IGNzNDI3MF9pZCwKKwkucHJvYmUgPSBjczQyNzBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBjczQyNzBfaTJjX3JlbW92ZSwKK307CisKKy8qCiAgKiBBU29DIGNvZGVjIGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiBBc3NpZ24gdGhpcyB2YXJpYWJsZSB0byB0aGUgY29kZWNfZGV2IGZpZWxkIG9mIHRoZSBtYWNoaW5lIGRyaXZlcidzCkBAIC03NzYsMTMgKzc4MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjczQyNzBfaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmY3M0MjcwX2RhaSk7CisJcHJfaW5mbygiQ2lycnVzIExvZ2ljIENTNDI3MCBBTFNBIFNvQyBDb2RlYyBEcml2ZXJcbiIpOworCisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChjczQyNzBfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjczQyNzBfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmNzNDI3MF9kYWkpOworCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChjczQyNzBfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKaW5kZXggOWEzZTY3ZS4uNWNkYTllNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKQEAgLTY3LDExICs2NywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENNMzAwOCBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFBDTTMwMDhfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNvY2Rldi0+Y29kZWMpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NkZXYtPmNhcmQtPmNvZGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5uYW1lID0gIlBDTTMwMDgiOwpAQCAtMTM5LDcgKzEzOSw3IEBACiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHN0YXRpYyBpbnQgcGNtMzAwOF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHBjbTMwMDhfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAKIAlpZiAoIWNvZGVjKQpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIAlwY20zMDA4X2dwaW9fZnJlZShzZXR1cCk7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCBjYWMzNzM2Li44N2Y2MDZjNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKQEAgLTE1MSwyMSArMTUxLDYgQEAKIFNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHNzbTI2MDJfZW51bVsxXSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgc3NtMjYwMl9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzc20yNjAyX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmc3NtMjYwMl9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogT3V0cHV0IE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3NtMjYwMl9vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKIFNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgU1NNMjYwMl9BUEFOQSwgMywgMSwgMCksCkBAIC0yOTEsNyArMjc2LDcgQEAKIAl1MTYgc3JhdGU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXUxNiBpZmFjZSA9IHNzbTI2MDJfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFNTTTI2MDJfSUZBQ0UpICYgMHhmZmYzOwpAQCAtMzM2LDcgKzMyMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKm1hc3Rlcl9ydW50aW1lOwpAQCAtMzczLDcgKzM1OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCS8qIHNldCBhY3RpdmUgKi8KIAlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0FDVElWRSwgQUNUSVZFX0FDVElWQVRFX0NPREVDKTsKIApAQCAtMzg1LDcgKzM3MCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCS8qIGRlYWN0aXZhdGUgKi8KIAlpZiAoIWNvZGVjLT5hY3RpdmUpCkBAIC01MjEsNiArNTA2LDE2IEBACiAjZGVmaW5lIFNTTTI2MDJfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc3NtMjYwMl9kYWlfb3BzID0geworCS5zdGFydHVwCT0gc3NtMjYwMl9zdGFydHVwLAorCS5wcmVwYXJlCT0gc3NtMjYwMl9wY21fcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gc3NtMjYwMl9od19wYXJhbXMsCisJLnNodXRkb3duCT0gc3NtMjYwMl9zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlCT0gc3NtMjYwMl9tdXRlLAorCS5zZXRfc3lzY2xrCT0gc3NtMjYwMl9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHNzbTI2MDJfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgc3NtMjYwMl9kYWkgPSB7CiAJLm5hbWUgPSAiU1NNMjYwMiIsCiAJLnBsYXliYWNrID0gewpAQCAtNTM1LDIyICs1MzAsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFNTTTI2MDJfUkFURVMsCiAJCS5mb3JtYXRzID0gU1NNMjYwMl9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBzc20yNjAyX3N0YXJ0dXAsCi0JCS5wcmVwYXJlID0gc3NtMjYwMl9wY21fcHJlcGFyZSwKLQkJLmh3X3BhcmFtcyA9IHNzbTI2MDJfaHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSBzc20yNjAyX3NodXRkb3duLAotCQkuZGlnaXRhbF9tdXRlID0gc3NtMjYwMl9tdXRlLAotCQkuc2V0X3N5c2NsayA9IHNzbTI2MDJfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gc3NtMjYwMl9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZzc20yNjAyX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc3NtMjYwMl9kYWkpOwogCiBzdGF0aWMgaW50IHNzbTI2MDJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzc20yNjAyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTU1OSw3ICs1NDYsNyBAQAogc3RhdGljIGludCBzc20yNjAyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC01ODEsNyArNTY4LDcgQEAKICAqLwogc3RhdGljIGludCBzc20yNjAyX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWcsIHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJTU00yNjAyIjsKQEAgLTYyMiw3ICs2MDksOCBAQAogCQkJQVBBTkFfRU5BQkxFX01JQ19CT09TVCk7CiAJc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9QV1IsIDApOwogCi0Jc3NtMjYwMl9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBzc20yNjAyX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHNzbTI2MDJfc25kX2NvbnRyb2xzKSk7CiAJc3NtMjYwMl9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjUzLDcgKzY0MSw3IEBACiAJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHNzbTI2MDJfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNzQ3LDcgKzczNSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHNzbTI2MDI7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtNzY4LDcgKzc1Niw3IEBACiBzdGF0aWMgaW50IHNzbTI2MDJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJc3NtMjYwMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKaW5kZXggY2ZkZWEwMC4uYzNmNGFmYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwpAQCAtMTgzLDI0ICsxODMsNiBAQAogCVNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHRsdjMyMGFpYzIzX2RlZW1waCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgdGx2MzIwYWljMjNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJnRsdjMyMGFpYzIzX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotfQotCiAvKiBQR0EgTWl4ZXIgY29udHJvbHMgZm9yIExpbmUgYW5kIE1pYyBzd2l0Y2ggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0bHYzMjBhaWMyM19vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKIAlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFRMVjMyMEFJQzIzX0FOTEcsIDMsIDEsIDApLApAQCAtNDIzLDcgKzQwNSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBpZmFjZV9yZWc7CiAJaW50IHJldDsKIAlzdHJ1Y3QgYWljMjMgKmFpYzIzID0gY29udGFpbmVyX29mKGNvZGVjLCBzdHJ1Y3QgYWljMjMsIGNvZGVjKTsKQEAgLTQ3MSw3ICs0NTMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHNldCBhY3RpdmUgKi8KIAl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDAwMDEpOwpAQCAtNDg0LDcgKzQ2Niw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMyMyAqYWljMjMgPSBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBhaWMyMywgY29kZWMpOwogCiAJLyogZGVhY3RpdmF0ZSAqLwpAQCAtNTk4LDYgKzU4MCwxNSBAQAogI2RlZmluZSBBSUMyM19GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKIAkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdGx2MzIwYWljMjNfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IHRsdjMyMGFpYzIzX3BjbV9wcmVwYXJlLAorCS5od19wYXJhbXMJPSB0bHYzMjBhaWMyM19od19wYXJhbXMsCisJLnNodXRkb3duCT0gdGx2MzIwYWljMjNfc2h1dGRvd24sCisJLmRpZ2l0YWxfbXV0ZQk9IHRsdjMyMGFpYzIzX211dGUsCisJLnNldF9mbXQJPSB0bHYzMjBhaWMyM19zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHRsdjMyMGFpYzIzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHRsdjMyMGFpYzIzX2RhaSA9IHsKIAkubmFtZSA9ICJ0bHYzMjBhaWMyMyIsCiAJLnBsYXliYWNrID0gewpAQCAtNjEyLDE0ICs2MDMsNyBAQAogCQkgICAgLmNoYW5uZWxzX21heCA9IDIsCiAJCSAgICAucmF0ZXMgPSBBSUMyM19SQVRFUywKIAkJICAgIC5mb3JtYXRzID0gQUlDMjNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gdGx2MzIwYWljMjNfcGNtX3ByZXBhcmUsCi0JCS5od19wYXJhbXMgPSB0bHYzMjBhaWMyM19od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHRsdjMyMGFpYzIzX3NodXRkb3duLAotCQkuZGlnaXRhbF9tdXRlID0gdGx2MzIwYWljMjNfbXV0ZSwKLQkJLnNldF9mbXQgPSB0bHYzMjBhaWMyM19zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSB0bHYzMjBhaWMyM19zZXRfZGFpX3N5c2NsaywKLQl9CisJLm9wcyA9ICZ0bHYzMjBhaWMyM19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHRsdjMyMGFpYzIzX2RhaSk7CiAKQEAgLTYyNyw3ICs2MTEsNyBAQAogCQkJICAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MCk7CiAJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNjM4LDcgKzYyMiw3IEBACiBzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpOwogCXUxNiByZWc7CiAKQEAgLTY2MCw3ICs2NDQsNyBAQAogICovCiBzdGF0aWMgaW50IHRsdjMyMGFpYzIzX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCXUxNiByZWc7CiAKQEAgLTcxOCw3ICs3MDIsOCBAQAogCiAJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgxKTsKIAotCXRsdjMyMGFpYzIzX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3NuZF9jb250cm9scykpOwogCXRsdjMyMGFpYzIzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC03NDYsNyArNzMxLDcgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gdGx2MzIwYWljMjNfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShpMmMtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC04MDQsNyArNzg5LDcgQEAKIAlpZiAoYWljMjMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMgPSAmYWljMjMtPmNvZGVjOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTgyMyw3ICs4MDgsNyBAQAogc3RhdGljIGludCB0bHYzMjBhaWMyM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljMjMgKmFpYzIzID0gY29udGFpbmVyX29mKGNvZGVjLCBzdHJ1Y3QgYWljMjMsIGNvZGVjKTsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jCmluZGV4IDI5ZjJmMWEuLjMzODdkOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljMjYgKmFpYzI2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgZnNyZWYsIGRpdmlzb3IsIHdsZW4sIHB2YWwsIGp2YWwsIGR2YWwsIHF2YWw7CiAJdTE2IHJlZzsKQEAgLTI3MCw2ICsyNzAsMTMgQEAKICNkZWZpbmUgQUlDMjZfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TOCAgICAgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9CRSB8XAogCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0X0JFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFpYzI2X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFpYzI2X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gYWljMjZfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IGFpYzI2X3NldF9zeXNjbGssCisJLnNldF9mbXQJPSBhaWMyNl9zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFpYzI2X2RhaSA9IHsKIAkubmFtZSA9ICJ0bHYzMjBhaWMyNiIsCiAJLnBsYXliYWNrID0gewpAQCAtMjg2LDEyICsyOTMsNyBAQAogCQkucmF0ZXMgPSBBSUMyNl9SQVRFUywKIAkJLmZvcm1hdHMgPSBBSUMyNl9GT1JNQVRTLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFpYzI2X2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IGFpYzI2X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWljMjZfc2V0X3N5c2NsaywKLQkJLnNldF9mbXQgPSBhaWMyNl9zZXRfZm10LAotCX0sCisJLm9wcyA9ICZhaWMyNl9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFpYzI2X2RhaSk7CiAKQEAgLTMyMiw5ICszMjQsOCBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sOwogCXN0cnVjdCBhaWMyNiAqYWljMjY7Ci0JaW50IGksIHJldCwgZXJyOworCWludCByZXQsIGVycjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJQcm9iaW5nIEFJQzI2IFNvQyBDT0RFQyBkcml2ZXJcbiIpOwogCWRldl9kYmcoJnBkZXYtPmRldiwgInNvY2Rldj0lcFxuIiwgc29jZGV2KTsKQEAgLTMzOCw3ICszMzksNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY29kZWMgPSAmYWljMjYtPmNvZGVjOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWdpc3RlcmluZyBQQ01zLCBkZXY9JXAsIHNvY2Rldi0+ZGV2PSVwXG4iLAogCQkmcGRldi0+ZGV2LCBzb2NkZXYtPmRldik7CkBAIC0zNTEsMTEgKzM1Miw5IEBACiAKIAkvKiByZWdpc3RlciBjb250cm9scyAqLwogCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIGNvbnRyb2xzXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWMyNl9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJa2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJmFpYzI2X3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpOwotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwga2NvbnRyb2wpOwotCQlXQVJOX09OKGVyciA8IDApOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWljMjZfc25kX2NvbnRyb2xzLAorCQkJQVJSQVlfU0laRShhaWMyNl9zbmRfY29udHJvbHMpKTsKKwlXQVJOX09OKGVyciA8IDApOwogCiAJLyogQ09ERUMgaXMgc2V0dXAsIHdlIGNhbiByZWdpc3RlciB0aGUgY2FyZCBub3cgKi8KIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWdpc3RlcmluZyBjYXJkXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwppbmRleCBhZWEwY2I3Li5hYjA5OWY0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJ0bHYzMjBhaWMzeC5oIgogCkBAIC0yNTAsNTYgKzI1MSw4NiBAQAogCVNPQ19FTlVNX0RPVUJMRShBSUMzWF9DT0RFQ19ERklMVF9DVFJMLCA2LCA0LCA0LCBhaWMzeF9hZGNfaHBmKSwKIH07CiAKKy8qCisgKiBEQUMgZGlnaXRhbCB2b2x1bWVzLiBGcm9tIC02My41IHRvIDAgZEIgaW4gMC41IGRCIHN0ZXBzCisgKi8KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfdGx2LCAtNjM1MCwgNTAsIDApOworLyogQURDIFBHQSBnYWluIHZvbHVtZXMuIEZyb20gMCB0byA1OS41IGRCIGluIDAuNSBkQiBzdGVwcyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGFkY190bHYsIDAsIDUwLCAwKTsKKy8qCisgKiBPdXRwdXQgc3RhZ2Ugdm9sdW1lcy4gRnJvbSAtNzguMyB0byAwIGRCLiBNdXRlZCBiZWxvdyAtNzguMyBkQi4KKyAqIFN0ZXAgc2l6ZSBpcyBhcHByb3hpbWF0ZWx5IDAuNSBkQiBvdmVyIG1vc3Qgb2YgdGhlIHNjYWxlIGJ1dCBpbmNyZWFzaW5nCisgKiBuZWFyIHRoZSB2ZXJ5IGxvdyBsZXZlbHMuCisgKiBEZWZpbmUgZEIgc2NhbGUgc28gdGhhdCBpdCBpcyBtb3N0bHkgY29ycmVjdCBmb3IgcmFuZ2UgYWJvdXQgLTU1IHRvIDAgZEIKKyAqIGJ1dCBoYXZpbmcgaW5jcmVhc2luZyBkQiBkaWZmZXJlbmNlIGJlbG93IHRoYXQgKGFuZCB3aGVyZSBpdCBkb2Vzbid0IGNvdW50CisgKiBzbyBtdWNoKS4gVGhpcyBzZXR0aW5nIHNob3dzIC01MCBkQiAoYWN0dWFsIGlzIC01MC4zIGRCKSBmb3IgcmVnaXN0ZXIKKyAqIHZhbHVlIDEwMCBhbmQgLTU4LjUgZEIgKGFjdHVhbCBpcyAtNzguMyBkQikgZm9yIHJlZ2lzdGVyIHZhbHVlIDExNy4KKyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dHB1dF9zdGFnZV90bHYsIC01OTAwLCA1MCwgMSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWMzeF9zbmRfY29udHJvbHNbXSA9IHsKIAkvKiBPdXRwdXQgKi8KLQlTT0NfRE9VQkxFX1IoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBMREFDX1ZPTCwgUkRBQ19WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExEQUNfVk9MLCBSREFDX1ZPTCwgMCwgMHg3ZiwgMSwgZGFjX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIkxpbmUgREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfTExPUE1fVk9MLAotCQkgICAgIERBQ1IxXzJfUkxPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfTExPUE1fVk9MLCBEQUNSMV8yX1JMT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEUoIkxpbmVMIFBsYXliYWNrIFN3aXRjaCIsIExMT1BNX0NUUkwsIDMsIDB4MDEsIDApLAogCVNPQ19TSU5HTEUoIkxpbmVSIFBsYXliYWNrIFN3aXRjaCIsIFJMT1BNX0NUUkwsIDMsIDB4MDEsIDApLAotCVNPQ19ET1VCTEVfUigiTGluZUwgREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfTExPUE1fVk9MLAotCQkgICAgIERBQ1IxXzJfTExPUE1fVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJMaW5lTCBMZWZ0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0xMT1BNX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJMaW5lUiBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQVJfMl9STE9QTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJMaW5lTCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfTExPUE1fVk9MLAotCQkgICAgIExJTkUyUl8yX0xMT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJMaW5lUiBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfUkxPUE1fVk9MLAotCQkgICAgIExJTkUyUl8yX1JMT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZUwgREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9MTE9QTV9WT0wsIERBQ1IxXzJfTExPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkxpbmVMIExlZnQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0xMT1BNX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTGluZVIgUmlnaHQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBUl8yX1JMT1BNX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lTCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9MTE9QTV9WT0wsIExJTkUyUl8yX0xMT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmVSIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX1JMT1BNX1ZPTCwgTElORTJSXzJfUkxPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1IoIk1vbm8gREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfTU9OT0xPUE1fVk9MLAotCQkgICAgIERBQ1IxXzJfTU9OT0xPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJNb25vIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfTU9OT0xPUE1fVk9MLCBEQUNSMV8yX01PTk9MT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEUoIk1vbm8gREFDIFBsYXliYWNrIFN3aXRjaCIsIE1PTk9MT1BNX0NUUkwsIDMsIDB4MDEsIDApLAotCVNPQ19ET1VCTEVfUigiTW9ubyBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9NT05PTE9QTV9WT0wsCi0JCSAgICAgUEdBUl8yX01PTk9MT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJNb25vIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9NT05PTE9QTV9WT0wsCi0JCSAgICAgTElORTJSXzJfTU9OT0xPUE1fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJNb25vIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBQR0FMXzJfTU9OT0xPUE1fVk9MLCBQR0FSXzJfTU9OT0xPUE1fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiTW9ubyBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9NT05PTE9QTV9WT0wsIExJTkUyUl8yX01PTk9MT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX0RPVUJMRV9SKCJIUCBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9IUExPVVRfVk9MLAotCQkgICAgIERBQ1IxXzJfSFBST1VUX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiSFAgREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9IUExPVVRfVk9MLCBEQUNSMV8yX0hQUk9VVF9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfRE9VQkxFX1IoIkhQIERBQyBQbGF5YmFjayBTd2l0Y2giLCBIUExPVVRfQ1RSTCwgSFBST1VUX0NUUkwsIDMsCiAJCSAgICAgMHgwMSwgMCksCi0JU09DX0RPVUJMRV9SKCJIUCBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQVJfMl9IUExPVVRfVk9MLAotCQkgICAgIFBHQVJfMl9IUFJPVVRfVk9MLCAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJIUEwgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBMT1VUX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfU0lOR0xFKCJIUFIgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfSFBST1VUX1ZPTCwKLQkJICAgICAwLCAweDdmLCAxKSwKLQlTT0NfRE9VQkxFX1IoIkhQIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBMSU5FMkxfMl9IUExPVVRfVk9MLAotCQkgICAgIExJTkUyUl8yX0hQUk9VVF9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBQR0FSXzJfSFBMT1VUX1ZPTCwgUEdBUl8yX0hQUk9VVF9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiSFBMIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9IUExPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJIUFIgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQUk9VVF9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiSFAgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfSFBMT1VUX1ZPTCwgTElORTJSXzJfSFBST1VUX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX0RPVUJMRV9SKCJIUENPTSBEQUMgUGxheWJhY2sgVm9sdW1lIiwgREFDTDFfMl9IUExDT01fVk9MLAotCQkgICAgIERBQ1IxXzJfSFBSQ09NX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiSFBDT00gREFDIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgREFDTDFfMl9IUExDT01fVk9MLCBEQUNSMV8yX0hQUkNPTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfRE9VQkxFX1IoIkhQQ09NIERBQyBQbGF5YmFjayBTd2l0Y2giLCBIUExDT01fQ1RSTCwgSFBSQ09NX0NUUkwsIDMsCiAJCSAgICAgMHgwMSwgMCksCi0JU09DX1NJTkdMRSgiSFBMQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0hQTENPTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX1NJTkdMRSgiSFBSQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0hQUkNPTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJIUENPTSBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfSFBMQ09NX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9IUFJDT01fVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfU0lOR0xFX1RMVigiSFBMQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9IUExDT01fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJIUFJDT00gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkgICAgICAgUEdBTF8yX0hQUkNPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiSFBDT00gTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfSFBMQ09NX1ZPTCwgTElORTJSXzJfSFBSQ09NX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCiAJLyoKIAkgKiBOb3RlOiBlbmFibGUgQXV0b21hdGljIGlucHV0IEdhaW4gQ29udHJvbGxlciB3aXRoIGNhcmUuIEl0IGNhbgpAQCAtMzA4LDI4ICszMzksMTMgQEAKIAlTT0NfRE9VQkxFX1IoIkFHQyBTd2l0Y2giLCBMQUdDX0NUUkxfQSwgUkFHQ19DVFJMX0EsIDcsIDB4MDEsIDApLAogCiAJLyogSW5wdXQgKi8KLQlTT0NfRE9VQkxFX1IoIlBHQSBDYXB0dXJlIFZvbHVtZSIsIExBRENfVk9MLCBSQURDX1ZPTCwgMCwgMHg3ZiwgMCksCisJU09DX0RPVUJMRV9SX1RMVigiUEdBIENhcHR1cmUgVm9sdW1lIiwgTEFEQ19WT0wsIFJBRENfVk9MLAorCQkJIDAsIDExOSwgMCwgYWRjX3RsdiksCiAJU09DX0RPVUJMRV9SKCJQR0EgQ2FwdHVyZSBTd2l0Y2giLCBMQURDX1ZPTCwgUkFEQ19WT0wsIDcsIDB4MDEsIDEpLAogCiAJU09DX0VOVU0oIkFEQyBIUEYgQ3V0LW9mZiIsIGFpYzN4X2VudW1bQURDX0hQRl9FTlVNXSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWljM3hfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljM3hfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZhaWMzeF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIExlZnQgREFDIE11eCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X2xlZnRfZGFjX211eF9jb250cm9scyA9CiBTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIGFpYzN4X2VudW1bTERBQ19FTlVNXSk7CkBAIC03NDYsNyArNzYyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzN4X3ByaXYgKmFpYzN4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgY29kZWNfY2xrID0gMCwgYnlwYXNzX3BsbCA9IDAsIGZzcmVmLCBsYXN0X2NsayA9IDA7CiAJdTggZGF0YSwgciwgcCwgcGxsX3EsIHBsbF9wID0gMSwgcGxsX3IgPSAxLCBwbGxfaiA9IDE7CkBAIC0xMDcyLDYgKzEwODgsMTMgQEAKICNkZWZpbmUgQUlDM1hfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBcCiAJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFpYzN4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFpYzN4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gYWljM3hfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IGFpYzN4X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gYWljM3hfc2V0X2RhaV9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWljM3hfZGFpID0gewogCS5uYW1lID0gInRsdjMyMGFpYzN4IiwKIAkucGxheWJhY2sgPSB7CkBAIC0xMDg2LDE5ICsxMTA5LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBBSUMzWF9SQVRFUywKIAkJLmZvcm1hdHMgPSBBSUMzWF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFpYzN4X2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IGFpYzN4X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWljM3hfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gYWljM3hfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmYWljM3hfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhaWMzeF9kYWkpOwogCiBzdGF0aWMgaW50IGFpYzN4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJYWljM3hfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0xMTA4LDcgKzExMjYsNyBAQAogc3RhdGljIGludCBhaWMzeF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xMTMxLDcgKzExNDksNyBAQAogICovCiBzdGF0aWMgaW50IGFpYzN4X2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMzeF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKIAlpbnQgcmVnLCByZXQgPSAwOwogCkBAIC0xMjI3LDcgKzEyNDUsOCBAQAogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9HUElPMV9SRUcsIChzZXR1cC0+Z3Bpb19mdW5jWzBdICYgMHhmKSA8PCA0KTsKIAlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfR1BJTzJfUkVHLCAoc2V0dXAtPmdwaW9fZnVuY1sxXSAmIDB4ZikgPDwgNCk7CiAKLQlhaWMzeF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhaWMzeF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhaWMzeF9zbmRfY29udHJvbHMpKTsKIAlhaWMzeF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTI2MSw3ICsxMjgwLDcgQEAKIAkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGFpYzN4X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTEzNjYsNyArMTM4NSw3IEBACiAJfQogCiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFpYzN4OwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTEzOTIsNyArMTQxMSw3IEBACiBzdGF0aWMgaW50IGFpYzN4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogcG93ZXIgZG93biBjaGlwICovCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCmluZGV4IGVhMzcwYTQuLjk3NzM4ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCkBAIC00Miw3ICs0Miw3IEBACiAgKi8KIHN0YXRpYyBjb25zdCB1OCB0d2w0MDMwX3JlZ1tUV0w0MDMwX0NBQ0hFUkVHTlVNXSA9IHsKIAkweDAwLCAvKiB0aGlzIHJlZ2lzdGVyIG5vdCB1c2VkCQkqLwotCTB4OTMsIC8qIFJFR19DT0RFQ19NT0RFCQkoMHgxKQkqLworCTB4OTEsIC8qIFJFR19DT0RFQ19NT0RFCQkoMHgxKQkqLwogCTB4YzMsIC8qIFJFR19PUFRJT04JCSgweDIpCSovCiAJMHgwMCwgLyogUkVHX1VOS05PV04JCSgweDMpCSovCiAJMHgwMCwgLyogUkVHX01JQ0JJQVNfQ1RMCSgweDQpCSovCkBAIC0xMTcsNiArMTE3LDEzIEBACiAJMHgwMCwgLyogUkVHX01JU0NfU0VUXzIJCSgweDQ5KQkqLwogfTsKIAorLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgdHdsNDAzMF9wcml2IHsKKwl1bnNpZ25lZCBpbnQgYnlwYXNzX3N0YXRlOworCXVuc2lnbmVkIGludCBjb2RlY19wb3dlcmVkOworCXVuc2lnbmVkIGludCBjb2RlY19tdXRlZDsKK307CisKIC8qCiAgKiByZWFkIHR3bDQwMzAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtMTI1LDYgKzEzMiw5IEBACiB7CiAJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAorCWlmIChyZWcgPj0gVFdMNDAzMF9DQUNIRVJFR05VTSkKKwkJcmV0dXJuIC1FSU87CisKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtMTUxLDI2ICsxNjEsMjIgQEAKIAlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsIHZhbHVlLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCB0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIHR3bDQwMzBfY29kZWNfZW5hYmxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGVuYWJsZSkKIHsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBtb2RlOwogCi0JbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsCi0JCW1vZGUgJiB+VFdMNDAzMF9DT0RFQ1BEWik7Ci0KLQkvKiBSRVZJU0lUOiB0aGlzIGRlbGF5IGlzIHByZXNlbnQgaW4gVEkgc2FtcGxlIGRyaXZlcnMgKi8KLQkvKiBidXQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gVFJNIHJlcXVpcmVtZW50IGZvciBpdCAgICAgKi8KLQl1ZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3NldF9jb2RlY3BkeihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JdTggbW9kZTsKKwlpZiAoZW5hYmxlID09IHR3bDQwMzAtPmNvZGVjX3Bvd2VyZWQpCisJCXJldHVybjsKIAogCW1vZGUgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLAotCQltb2RlIHwgVFdMNDAzMF9DT0RFQ1BEWik7CisJaWYgKGVuYWJsZSkKKwkJbW9kZSB8PSBUV0w0MDMwX0NPREVDUERaOworCWVsc2UKKwkJbW9kZSAmPSB+VFdMNDAzMF9DT0RFQ1BEWjsKKworCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsIG1vZGUpOworCXR3bDQwMzAtPmNvZGVjX3Bvd2VyZWQgPSBlbmFibGU7CiAKIAkvKiBSRVZJU0lUOiB0aGlzIGRlbGF5IGlzIHByZXNlbnQgaW4gVEkgc2FtcGxlIGRyaXZlcnMgKi8KIAkvKiBidXQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gVFJNIHJlcXVpcmVtZW50IGZvciBpdCAgICAgKi8KQEAgLTE4Miw3ICsxODgsNyBAQAogCWludCBpOwogCiAJLyogY2xlYXIgQ09ERUNQRFogcHJpb3IgdG8gc2V0dGluZyByZWdpc3RlciBkZWZhdWx0cyAqLwotCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAogCS8qIHNldCBhbGwgYXVkaW8gc2VjdGlvbiByZWdpc3RlcnMgdG8gcmVhc29uYWJsZSBkZWZhdWx0cyAqLwogCWZvciAoaSA9IFRXTDQwMzBfUkVHX09QVElPTjsgaSA8PSBUV0w0MDMwX1JFR19NSVNDX1NFVF8yOyBpKyspCkBAIC0xOTAsNiArMTk2LDEyMiBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIHR3bDQwMzBfY29kZWNfbXV0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBtdXRlKQoreworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXU4IHJlZ192YWw7CisKKwlpZiAobXV0ZSA9PSB0d2w0MDMwLT5jb2RlY19tdXRlZCkKKwkJcmV0dXJuOworCisJaWYgKG11dGUpIHsKKwkJLyogQnlwYXNzIHRoZSByZWdfY2FjaGUgYW5kIG11dGUgdGhlIHZvbHVtZXMKKwkJICogSGVhZHNldCBtdXRlIGlzIGRvbmUgaW4gaXQncyBvd24gZXZlbnQgaGFuZGxlcgorCQkgKiBUaGluZ3MgdG8gbXV0ZTogIEVhcnBpZWNlLCBQcmVEcml2TC9SLCBDYXJraXRML1IKKwkJICovCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19FQVJfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfRUFSX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19FQVJfQ1RMKTsKKworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRExfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFRExfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX1BSRURMX0NUTCk7CisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVEUl9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFRExfQ1RMKTsKKworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRUNLTF9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCk7CisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS1JfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFQ0tMX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVDS1JfQ1RMKTsKKworCQkvKiBEaXNhYmxlIFBMTCAqLworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwpOworCQlyZWdfdmFsICY9IH5UV0w0MDMwX0FQTExfRU47CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMLCByZWdfdmFsKTsKKwl9IGVsc2UgeworCQkvKiBSZXN0b3JlIHRoZSB2b2x1bWVzCisJCSAqIEhlYWRzZXQgbXV0ZSBpcyBkb25lIGluIGl0J3Mgb3duIGV2ZW50IGhhbmRsZXIKKwkJICogVGhpbmdzIHRvIHJlc3RvcmU6ICBFYXJwaWVjZSwgUHJlRHJpdkwvUiwgQ2Fya2l0TC9SCisJCSAqLworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19FQVJfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfRUFSX0NUTCkpOworCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURMX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURMX0NUTCkpOworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwpKTsKKworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS0xfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCkpOworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVDS1JfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCkpOworCisJCS8qIEVuYWJsZSBQTEwgKi8KKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMKTsKKwkJcmVnX3ZhbCB8PSBUV0w0MDMwX0FQTExfRU47CisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMLCByZWdfdmFsKTsKKwl9CisKKwl0d2w0MDMwLT5jb2RlY19tdXRlZCA9IG11dGU7Cit9CisKK3N0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfdXAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXU4IGFuYW1pY2wsIHJlZ21pc2MxLCBieXRlOworCWludCBpID0gMDsKKworCWlmICh0d2w0MDMwLT5jb2RlY19wb3dlcmVkKQorCQlyZXR1cm47CisKKwkvKiBzZXQgQ09ERUNQRFogdG8gdHVybiBvbiBjb2RlYyAqLworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKKworCS8qIGluaXRpYXRlIG9mZnNldCBjYW5jZWxsYXRpb24gKi8KKwlhbmFtaWNsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCk7CisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwKKwkJYW5hbWljbCB8IFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpOworCisJLyogd2FpdCBmb3Igb2Zmc2V0IGNhbmNlbGxhdGlvbiB0byBjb21wbGV0ZSAqLworCWRvIHsKKwkJLyogdGhpcyB0YWtlcyBhIGxpdHRsZSB3aGlsZSwgc28gZG9uJ3Qgc2xhbSBpMmMgKi8KKwkJdWRlbGF5KDIwMDApOworCQl0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKKwkJCQkgICAgVFdMNDAzMF9SRUdfQU5BTUlDTCk7CisJfSB3aGlsZSAoKGkrKyA8IDEwMCkgJiYKKwkJICgoYnl0ZSAmIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpID09CisJCSAgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkpOworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJlZ19jYWNoZSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIEhXICovCisJdHdsNDAzMF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wsIGJ5dGUpOworCisJLyogYW50aS1wb3Agd2hlbiBjaGFuZ2luZyBhbmFsb2cgZ2FpbiAqLworCXJlZ21pc2MxID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSk7CisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSwKKwkJcmVnbWlzYzEgfCBUV0w0MDMwX1NNT09USF9BTkFWT0xfRU4pOworCisJLyogdG9nZ2xlIENPREVDUERaIGFzIHBlciBUUk0gKi8KKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworfQorCisvKgorICogVW5jb25kaXRpb25hbCBwb3dlciBkb3duCisgKi8KK3N0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfZG93bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJLyogcG93ZXIgZG93biAqLworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKK30KKwogLyogRWFycGllY2UgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0d2w0MDMwX2VhcnBpZWNlX3RleHRzW10gPQogCQl7Ik9mZiIsICJEQUNMMSIsICJEQUNMMiIsICJEQUNSMSJ9OwpAQCAtMzY2LDYgKzQ4OCw0MSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9taWNwYXRodHgyX2NvbnRyb2wgPQogU09DX0RBUE1fRU5VTSgiUm91dGUiLCB0d2w0MDMwX21pY3BhdGh0eDJfZW51bSk7CiAKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvUjEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc3IxX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYUjFfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBBbmFsb2cgYnlwYXNzIGZvciBBdWRpb0wxICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3NsMV9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDQwMzBfUkVHX0FSWEwxX0FQR0FfQ1RMLCAyLCAxLCAwKTsKKworLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9SMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzcjJfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhSMl9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvTDIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc2wyX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYTDJfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBEaWdpdGFsIGJ5cGFzcyBnYWluLCAwIG11dGVzIHRoZSBieXBhc3MgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMiksCisJMCwgMywgVExWX0RCX1NDQUxFX0lURU0oLTI0MDAsIDAsIDEpLAorCTQsIDcsIFRMVl9EQl9TQ0FMRV9JVEVNKC0xODAwLCA2MDAsIDApLAorfTsKKworLyogRGlnaXRhbCBieXBhc3MgbGVmdCAoVFgxTCAtPiBSWDJMKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9kYnlwYXNzbF9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEVfVExWKCJWb2x1bWUiLAorCQkJVFdMNDAzMF9SRUdfQVRYMkFSWFBHQSwgMywgNywgMCwKKwkJCXR3bDQwMzBfZGFwbV9kYnlwYXNzX3Rsdik7CisKKy8qIERpZ2l0YWwgYnlwYXNzIHJpZ2h0IChUWDFSIC0+IFJYMlIpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2RieXBhc3NyX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRV9UTFYoIlZvbHVtZSIsCisJCQlUV0w0MDMwX1JFR19BVFgyQVJYUEdBLCAwLCA3LCAwLAorCQkJdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2KTsKKwogc3RhdGljIGludCBtaWNwYXRoX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CkBAIC00MjAsNiArNTc3LDc5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaGVhZHNldGxfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJdW5zaWduZWQgY2hhciBoc19nYWluLCBoc19wb3A7CisKKwkvKiBTYXZlIHRoZSBjdXJyZW50IHZvbHVtZSAqLworCWhzX2dhaW4gPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19HQUlOX1NFVCk7CisJaHNfcG9wID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkvKiBEbyB0aGUgYW50aS1wb3AvYmlhcyByYW1wIGVuYWJsZSBhY2NvcmRpbmcgdG8gdGhlIFRSTSAqLworCQloc19wb3AgfD0gVFdMNDAzMF9WTUlEX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJLyogSXMgdGhpcyBuZWVkZWQ/IENhbiB3ZSBqdXN0IHVzZSB3aGF0ZXZlciBnYWluIGhlcmU/ICovCisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VULAorCQkJCShoc19nYWluICYgKH4weDBmKSkgfCAweDBhKTsKKwkJaHNfcG9wIHw9IFRXTDQwMzBfUkFNUF9FTjsKKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisKKwkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdm9sdW1lICovCisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VULCBoc19nYWluKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCS8qIERvIHRoZSBhbnRpLXBvcC9iaWFzIHJhbXAgZGlzYWJsZSBhY2NvcmRpbmcgdG8gdGhlIFRSTSAqLworCQloc19wb3AgJj0gflRXTDQwMzBfUkFNUF9FTjsKKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisJCS8qIEJ5cGFzcyB0aGUgcmVnX2NhY2hlIHRvIG11dGUgdGhlIGhlYWRzZXQgKi8KKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCWhzX2dhaW4gJiAofjB4MGYpLAorCQkJCQlUV0w0MDMwX1JFR19IU19HQUlOX1NFVCk7CisJCWhzX3BvcCAmPSB+VFdMNDAzMF9WTUlEX0VOOworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ5cGFzc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm0gPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopdy0+a2NvbnRyb2xzLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSB3LT5jb2RlYy0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgcmVnOworCisJcmVnID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgbS0+cmVnKTsKKworCWlmIChtLT5yZWcgPD0gVFdMNDAzMF9SRUdfQVJYUjJfQVBHQV9DVEwpIHsKKwkJLyogQW5hbG9nIGJ5cGFzcyAqLworCQlpZiAocmVnICYgKDEgPDwgbS0+c2hpZnQpKQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlIHw9CisJCQkJKDEgPDwgKG0tPnJlZyAtIFRXTDQwMzBfUkVHX0FSWEwxX0FQR0FfQ1RMKSk7CisJCWVsc2UKKwkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSAmPQorCQkJCX4oMSA8PCAobS0+cmVnIC0gVFdMNDAzMF9SRUdfQVJYTDFfQVBHQV9DVEwpKTsKKwl9IGVsc2UgeworCQkvKiBEaWdpdGFsIGJ5cGFzcyAqLworCQlpZiAocmVnICYgKDB4NyA8PCBtLT5zaGlmdCkpCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgfD0gKDEgPDwgKG0tPnNoaWZ0ID8gNSA6IDQpKTsKKwkJZWxzZQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlICY9IH4oMSA8PCAobS0+c2hpZnQgPyA1IDogNCkpOworCX0KKworCWlmICh3LT5jb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgeworCQlpZiAodHdsNDAzMC0+YnlwYXNzX3N0YXRlKQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKHctPmNvZGVjLCAwKTsKKwkJZWxzZQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKHctPmNvZGVjLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTb21lIG9mIHRoZSBnYWluIGNvbnRyb2xzIGluIFRXTCAobW9zdGx5IHRob3NlIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGgKICAqIHRoZSBvdXRwdXRzKSBhcmUgaW1wbGVtZW50ZWQgaW4gYW4gaW50ZXJlc3Rpbmcgd2F5OgpAQCAtNjE0LDYgKzg0NCwxNyBAQAogICovCiBzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wdXRfZ2Fpbl90bHYsIDAsIDYwMCwgMCk7CiAKK3N0YXRpYyBjb25zdCBjaGFyICp0d2w0MDMwX3JhbXBkZWxheV90ZXh0c1tdID0geworCSIyNy8yMC8xNCBtcyIsICI1NS80MC8yNyBtcyIsICIxMDkvODEvNTUgbXMiLCAiMjE4LzE2MS8xMDkgbXMiLAorCSI0MzcvMzIzLzIxOCBtcyIsICI4NzQvNjQ1LzQzNyBtcyIsICIxNzQ4LzEyOTEvODc0IG1zIiwKKwkiMzQ5NS8yNTgxLzE3NDggbXMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHR3bDQwMzBfcmFtcGRlbGF5X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgMiwKKwkJCUFSUkFZX1NJWkUodHdsNDAzMF9yYW1wZGVsYXlfdGV4dHMpLAorCQkJdHdsNDAzMF9yYW1wZGVsYXlfdGV4dHMpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9zbmRfY29udHJvbHNbXSA9IHsKIAkvKiBDb21tb24gcGxheWJhY2sgZ2FpbiBjb250cm9scyAqLwogCVNPQ19ET1VCTEVfUl9UTFYoIkRBQzEgRGlnaXRhbCBGaW5lIFBsYXliYWNrIFZvbHVtZSIsCkBAIC02NjgsMjQgKzkwOSwxMCBAQAogCiAJU09DX0RPVUJMRV9UTFYoIkFuYWxvZyBDYXB0dXJlIFZvbHVtZSIsIFRXTDQwMzBfUkVHX0FOQU1JQ19HQUlOLAogCQkwLCAzLCA1LCAwLCBpbnB1dF9nYWluX3RsdiksCisKKwlTT0NfRU5VTSgiSFMgcmFtcCBkZWxheSIsIHR3bDQwMzBfcmFtcGRlbGF5X2VudW0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHR3bDQwMzBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHdsNDAzMF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJnR3bDQwMzBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdHdsNDAzMF9kYXBtX3dpZGdldHNbXSA9IHsKIAkvKiBMZWZ0IGNoYW5uZWwgaW5wdXRzICovCiAJU05EX1NPQ19EQVBNX0lOUFVUKCJNQUlOTUlDIiksCkBAIC03MTQsMTMgKzk0MSwxMyBAQAogCiAJLyogREFDcyAqLwogCVNORF9TT0NfREFQTV9EQUMoIkRBQyBSaWdodDEiLCAiUmlnaHQgRnJvbnQgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAwLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIExlZnQxIiwgIkxlZnQgRnJvbnQgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAxLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX0RBQygiREFDIFJpZ2h0MiIsICJSaWdodCBSZWFyIFBsYXliYWNrIiwKLQkJCVRXTDQwMzBfUkVHX0FWREFDX0NUTCwgMiwgMCksCisJCQlTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9EQUMoIkRBQyBMZWZ0MiIsICJMZWZ0IFJlYXIgUGxheWJhY2siLAotCQkJVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLCAzLCAwKSwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCksCiAKIAkvKiBBbmFsb2cgUEdBcyAqLwogCVNORF9TT0NfREFQTV9QR0EoIkFSWFIxX0FQR0EiLCBUV0w0MDMwX1JFR19BUlhSMV9BUEdBX0NUTCwKQEAgLTczMiw2ICs5NTksMzcgQEAKIAlTTkRfU09DX0RBUE1fUEdBKCJBUlhMMl9BUEdBIiwgVFdMNDAzMF9SRUdfQVJYTDJfQVBHQV9DVEwsCiAJCQkwLCAwLCBOVUxMLCAwKSwKIAorCS8qIEFuYWxvZyBieXBhc3NlcyAqLworCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiUmlnaHQxIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc3IxX2NvbnRyb2wsIGJ5cGFzc19ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2FieXBhc3NsMV9jb250cm9sLAorCQkJYnlwYXNzX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiUmlnaHQyIEFuYWxvZyBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fYWJ5cGFzc3IyX2NvbnRyb2wsCisJCQlieXBhc3NfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJMZWZ0MiBBbmFsb2cgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2FieXBhc3NsMl9jb250cm9sLAorCQkJYnlwYXNzX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCisJLyogRGlnaXRhbCBieXBhc3NlcyAqLworCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiTGVmdCBEaWdpdGFsIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9kYnlwYXNzbF9jb250cm9sLCBieXBhc3NfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiUmlnaHQgRGlnaXRhbCBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fZGJ5cGFzc3JfY29udHJvbCwgYnlwYXNzX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkxLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIFRXTDQwMzBfUkVHX0FWREFDX0NUTCwKKwkJCTIsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMywgMCwgTlVMTCwgMCksCisKIAkvKiBPdXRwdXQgTVVYIGNvbnRyb2xzICovCiAJLyogRWFycGllY2UgKi8KIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJFYXJwaWVjZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCkBAIC03NDIsOCArMTAwMCw5IEBACiAJU05EX1NPQ19EQVBNX1ZBTFVFX01VWCgiUHJlZHJpdmVSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJJnR3bDQwMzBfZGFwbV9wcmVkcml2ZXJfY29udHJvbCksCiAJLyogSGVhZHNldEwvUiAqLwotCVNORF9TT0NfREFQTV9NVVgoIkhlYWRzZXRMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKLQkJJnR3bDQwMzBfZGFwbV9oc29sX2NvbnRyb2wpLAorCVNORF9TT0NfREFQTV9NVVhfRSgiSGVhZHNldEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmdHdsNDAzMF9kYXBtX2hzb2xfY29udHJvbCwgaGVhZHNldGxfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCVNORF9TT0NfREFQTV9NVVgoIkhlYWRzZXRSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJJnR3bDQwMzBfZGFwbV9oc29yX2NvbnRyb2wpLAogCS8qIENhcmtpdEwvUiAqLwpAQCAtNzgyLDE2ICsxMDQxLDE2IEBACiAJCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUR8CiAJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCiAKLQkvKiBBbmFsb2cgaW5wdXQgbXV4ZXMgd2l0aCBwb3dlciBzd2l0Y2ggZm9yIHRoZSBwaHlzaWNhbCBBRENML1IgKi8KKwkvKiBBbmFsb2cgaW5wdXQgbXV4ZXMgd2l0aCBzd2l0Y2ggZm9yIHRoZSBjYXB0dXJlIGFtcGxpZmllcnMgKi8KIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIiwKLQkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAzLCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ2xtaWNfY29udHJvbCksCisJCVRXTDQwMzBfUkVHX0FOQU1JQ0wsIDQsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9nbG1pY19jb250cm9sKSwKIAlTTkRfU09DX0RBUE1fVkFMVUVfTVVYKCJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSIsCi0JCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMSwgMCwgJnR3bDQwMzBfZGFwbV9hbmFsb2dybWljX2NvbnRyb2wpLAorCQlUV0w0MDMwX1JFR19BTkFNSUNSLCA0LCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ3JtaWNfY29udHJvbCksCiAKLQlTTkRfU09DX0RBUE1fUEdBKCJBbmFsb2cgTGVmdCBBbXBsaWZpZXIiLAotCQlUV0w0MDMwX1JFR19BTkFNSUNMLCA0LCAwLCBOVUxMLCAwKSwKLQlTTkRfU09DX0RBUE1fUEdBKCJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIiwKLQkJVFdMNDAzMF9SRUdfQU5BTUlDUiwgNCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQURDIFBoeXNpY2FsIExlZnQiLAorCQlUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkFEQyBQaHlzaWNhbCBSaWdodCIsCisJCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMSwgMCwgTlVMTCwgMCksCiAKIAlTTkRfU09DX0RBUE1fUEdBKCJEaWdpbWljMCBFbmFibGUiLAogCQlUV0w0MDMwX1JFR19BRENNSUNTRUwsIDEsIDAsIE5VTEwsIDApLApAQCAtODAxLDEzICsxMDYwLDE5IEBACiAJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1pYyBCaWFzIDEiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgMCwgMCksCiAJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1pYyBCaWFzIDIiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgMSwgMCksCiAJU05EX1NPQ19EQVBNX01JQ0JJQVMoIkhlYWRzZXQgTWljIEJpYXMiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgMiwgMCksCisKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7Ci0JeyJBUlhMMV9BUEdBIiwgTlVMTCwgIkRBQyBMZWZ0MSJ9LAotCXsiQVJYUjFfQVBHQSIsIE5VTEwsICJEQUMgUmlnaHQxIn0sCi0JeyJBUlhMMl9BUEdBIiwgTlVMTCwgIkRBQyBMZWZ0MiJ9LAotCXsiQVJYUjJfQVBHQSIsIE5VTEwsICJEQUMgUmlnaHQyIn0sCisJeyJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIExlZnQxIn0sCisJeyJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiREFDIFJpZ2h0MSJ9LAorCXsiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRBQyBMZWZ0MiJ9LAorCXsiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRBQyBSaWdodDIifSwKKworCXsiQVJYTDFfQVBHQSIsIE5VTEwsICJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIifSwKKwl7IkFSWFIxX0FQR0EiLCBOVUxMLCAiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIn0sCisJeyJBUlhMMl9BUEdBIiwgTlVMTCwgIkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciJ9LAorCXsiQVJYUjJfQVBHQSIsIE5VTEwsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKIAogCS8qIEludGVybmFsIHBsYXliYWNrIHJvdXRpbmdzICovCiAJLyogRWFycGllY2UgKi8KQEAgLTg2NSwyMyArMTEzMCwyMyBAQAogCXsiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUiLCAiU3ViIG1pYyIsICJTVUJNSUMifSwKIAl7IkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwgIkFVWFIiLCAiQVVYUiJ9LAogCi0JeyJBbmFsb2cgTGVmdCBBbXBsaWZpZXIiLCBOVUxMLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAotCXsiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciIsIE5VTEwsICJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiQURDIFBoeXNpY2FsIExlZnQiLCBOVUxMLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiQURDIFBoeXNpY2FsIFJpZ2h0IiwgTlVMTCwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCiAKIAl7IkRpZ2ltaWMwIEVuYWJsZSIsIE5VTEwsICJESUdJTUlDMCJ9LAogCXsiRGlnaW1pYzEgRW5hYmxlIiwgTlVMTCwgIkRJR0lNSUMxIn0sCiAKIAkvKiBUWDEgTGVmdCBjYXB0dXJlIHBhdGggKi8KLQl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBbmFsb2cgTGVmdCBBbXBsaWZpZXIifSwKKwl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBREMgUGh5c2ljYWwgTGVmdCJ9LAogCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzAiLCAiRGlnaW1pYzAgRW5hYmxlIn0sCiAJLyogVFgxIFJpZ2h0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBSaWdodCBBbXBsaWZpZXIifSwKKwl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBREMgUGh5c2ljYWwgUmlnaHQifSwKIAl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkRpZ2ltaWMwIiwgIkRpZ2ltaWMwIEVuYWJsZSJ9LAogCS8qIFRYMiBMZWZ0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBMZWZ0IEFtcGxpZmllciJ9LAorCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBMZWZ0In0sCiAJeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMSIsICJEaWdpbWljMSBFbmFibGUifSwKIAkvKiBUWDIgUmlnaHQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDIgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciJ9LAorCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBSaWdodCJ9LAogCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzEiLCAiRGlnaW1pYzEgRW5hYmxlIn0sCiAKIAl7IkFEQyBWaXJ0dWFsIExlZnQxIiwgTlVMTCwgIlRYMSBDYXB0dXJlIFJvdXRlIn0sCkBAIC04ODksNiArMTE1NCwyNCBAQAogCXsiQURDIFZpcnR1YWwgTGVmdDIiLCBOVUxMLCAiVFgyIENhcHR1cmUgUm91dGUifSwKIAl7IkFEQyBWaXJ0dWFsIFJpZ2h0MiIsIE5VTEwsICJUWDIgQ2FwdHVyZSBSb3V0ZSJ9LAogCisJLyogQW5hbG9nIGJ5cGFzcyByb3V0ZXMgKi8KKwl7IlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCisJeyJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKKwl7IlJpZ2h0MiBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCisJeyJMZWZ0MiBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKKworCXsiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0MSBBbmFsb2cgTG9vcGJhY2sifSwKKwl7IkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJSaWdodDIgQW5hbG9nIExvb3BiYWNrIn0sCisJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiTGVmdDIgQW5hbG9nIExvb3BiYWNrIn0sCisKKwkvKiBEaWdpdGFsIGJ5cGFzcyByb3V0ZXMgKi8KKwl7IlJpZ2h0IERpZ2l0YWwgTG9vcGJhY2siLCAiVm9sdW1lIiwgIlRYMSBDYXB0dXJlIFJvdXRlIn0sCisJeyJMZWZ0IERpZ2l0YWwgTG9vcGJhY2siLCAiVm9sdW1lIiwgIlRYMSBDYXB0dXJlIFJvdXRlIn0sCisKKwl7IkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJSaWdodCBEaWdpdGFsIExvb3BiYWNrIn0sCisJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiTGVmdCBEaWdpdGFsIExvb3BiYWNrIn0sCisKIH07CiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCkBAIC05MDIsODIgKzExODUsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl91cChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JdTggYW5hbWljbCwgcmVnbWlzYzEsIGJ5dGUsIHBvcG47Ci0JaW50IGkgPSAwOwotCi0JLyogc2V0IENPREVDUERaIHRvIHR1cm4gb24gY29kZWMgKi8KLQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7Ci0KLQkvKiBpbml0aWF0ZSBvZmZzZXQgY2FuY2VsbGF0aW9uICovCi0JYW5hbWljbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wsCi0JCWFuYW1pY2wgfCBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKTsKLQotCi0JLyogd2FpdCBmb3Igb2Zmc2V0IGNhbmNlbGxhdGlvbiB0byBjb21wbGV0ZSAqLwotCWRvIHsKLQkJLyogdGhpcyB0YWtlcyBhIGxpdHRsZSB3aGlsZSwgc28gZG9uJ3Qgc2xhbSBpMmMgKi8KLQkJdWRlbGF5KDIwMDApOwotCQl0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKLQkJCQkgICAgVFdMNDAzMF9SRUdfQU5BTUlDTCk7Ci0JfSB3aGlsZSAoKGkrKyA8IDEwMCkgJiYKLQkJICgoYnl0ZSAmIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpID09Ci0JCSAgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkpOwotCi0JLyogYW50aS1wb3Agd2hlbiBjaGFuZ2luZyBhbmFsb2cgZ2FpbiAqLwotCXJlZ21pc2MxID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfTUlTQ19TRVRfMSwKLQkJcmVnbWlzYzEgfCBUV0w0MDMwX1NNT09USF9BTkFWT0xfRU4pOwotCi0JLyogdG9nZ2xlIENPREVDUERaIGFzIHBlciBUUk0gKi8KLQl0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KGNvZGVjKTsKLQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7Ci0KLQkvKiBwcm9ncmFtIGFudGktcG9wIHdpdGggYmlhcyByYW1wIGRlbGF5ICovCi0JcG9wbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VUKTsKLQlwb3BuICY9IFRXTDQwMzBfUkFNUF9ERUxBWTsKLQlwb3BuIHw9CVRXTDQwMzBfUkFNUF9ERUxBWV82NDVNUzsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0JcG9wbiB8PQlUV0w0MDMwX1ZNSURfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCi0JLyogZW5hYmxlIGFudGktcG9wIHJhbXAgKi8KLQlwb3BuIHw9IFRXTDQwMzBfUkFNUF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfZG93bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JdTggcG9wbjsKLQotCS8qIGRpc2FibGUgYW50aS1wb3AgcmFtcCAqLwotCXBvcG4gPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7Ci0JcG9wbiAmPSB+VFdMNDAzMF9SQU1QX0VOOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLQotCS8qIGRpc2FibGUgYmlhcyBvdXQgKi8KLQlwb3BuICY9IH5UV0w0MDMwX1ZNSURfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCi0JLyogcG93ZXIgZG93biAqLwotCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOwotfQotCiBzdGF0aWMgaW50IHR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCXR3bDQwMzBfcG93ZXJfdXAoY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQkvKiBUT0RPOiBkZXZlbG9wIGEgdHdsNDAzMF9wcmVwYXJlIGZ1bmN0aW9uICovCisJCXR3bDQwMzBfcG93ZXJfdXAoY29kZWMpOworCQlpZiAodHdsNDAzMC0+YnlwYXNzX3N0YXRlKQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAwKTsKKwkJZWxzZQorCQkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJLyogVE9ETzogZGV2ZWxvcCBhIHR3bDQwMzBfc3RhbmRieSBmdW5jdGlvbiAqLwotCQl0d2w0MDMwX3Bvd2VyX2Rvd24oY29kZWMpOworCQl0d2w0MDMwX3Bvd2VyX3VwKGNvZGVjKTsKKwkJaWYgKHR3bDQwMzAtPmJ5cGFzc19zdGF0ZSkKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMCk7CisJCWVsc2UKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJdHdsNDAzMF9wb3dlcl9kb3duKGNvZGVjKTsKQEAgLTk5NCwxMCArMTIyMyw5IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXU4IG1vZGUsIG9sZF9tb2RlLCBmb3JtYXQsIG9sZF9mb3JtYXQ7CiAKLQogCS8qIGJpdCByYXRlICovCiAJb2xkX21vZGUgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLAogCQkJVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSkgJiB+VFdMNDAzMF9DT0RFQ1BEWjsKQEAgLTEwMzksOCArMTI2Nyw5IEBACiAKIAlpZiAobW9kZSAhPSBvbGRfbW9kZSkgewogCQkvKiBjaGFuZ2UgcmF0ZSBhbmQgc2V0IENPREVDUERaICovCisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwgbW9kZSk7Ci0JCXR3bDQwMzBfc2V0X2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwogCX0KIAogCS8qIHNhbXBsZSBzaXplICovCkBAIC0xMDYzLDEzICsxMjkyLDEzIEBACiAJaWYgKGZvcm1hdCAhPSBvbGRfZm9ybWF0KSB7CiAKIAkJLyogY2xlYXIgQ09ERUNQRFogYmVmb3JlIGNoYW5naW5nIGZvcm1hdCAoY29kZWMgcmVxdWlyZW1lbnQpICovCi0JCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAKIAkJLyogY2hhbmdlIGZvcm1hdCAqLwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwgZm9ybWF0KTsKIAogCQkvKiBzZXQgQ09ERUNQRFogYWZ0ZXJ3YXJkcyAqLwotCQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTM5LDEzICsxMzY4LDEzIEBACiAJaWYgKGZvcm1hdCAhPSBvbGRfZm9ybWF0KSB7CiAKIAkJLyogY2xlYXIgQ09ERUNQRFogYmVmb3JlIGNoYW5naW5nIGZvcm1hdCAoY29kZWMgcmVxdWlyZW1lbnQpICovCi0JCXR3bDQwMzBfY2xlYXJfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAKIAkJLyogY2hhbmdlIGZvcm1hdCAqLwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwgZm9ybWF0KTsKIAogCQkvKiBzZXQgQ09ERUNQRFogYWZ0ZXJ3YXJkcyAqLwotCQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExNTQsNiArMTM4MywxMiBAQAogI2RlZmluZSBUV0w0MDMwX1JBVEVTCSAoU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCkKICNkZWZpbmUgVFdMNDAzMF9GT1JNQVRTCSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdHdsNDAzMF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB0d2w0MDMwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHR3bDQwMzBfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB0d2w0MDMwX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHR3bDQwMzBfZGFpID0gewogCS5uYW1lID0gInR3bDQwMzAiLAogCS5wbGF5YmFjayA9IHsKQEAgLTExNjgsMTggKzE0MDMsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFRXTDQwMzBfUkFURVMsCiAJCS5mb3JtYXRzID0gVFdMNDAzMF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHR3bDQwMzBfaHdfcGFyYW1zLAotCQkuc2V0X3N5c2NsayA9IHR3bDQwMzBfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gdHdsNDAzMF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ0d2w0MDMwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodHdsNDAzMF9kYWkpOwogCiBzdGF0aWMgaW50IHR3bDQwMzBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMTE4OSw3ICsxNDIwLDcgQEAKIHN0YXRpYyBpbnQgdHdsNDAzMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKQEAgLTEyMDMsNyArMTQzNCw3IEBACiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gIlRXTDQwMzAgQXVkaW8gQ29kZWMgaW5pdCBcbiIpOwpAQCAtMTIzMyw3ICsxNDY0LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKLQl0d2w0MDMwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHR3bDQwMzBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodHdsNDAzMF9zbmRfY29udHJvbHMpKTsKIAl0d2w0MDMwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CkBAIC0xMjU4LDEyICsxNDkwLDIwIEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMDsKIAogCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJdHdsNDAzMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0d2w0MDMwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHdsNDAzMCA9PSBOVUxMKSB7CisJCWtmcmVlKGNvZGVjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHR3bDQwMzA7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC0xMjc3LDExICsxNTE3LDEzIEBACiBzdGF0aWMgaW50IHR3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUV0w0MDMwIEF1ZGlvIENvZGVjIHJlbW92ZVxuIik7CisJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwogCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmggYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAppbmRleCA0NDJlNWE4Li4zM2RiYjE0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaApAQCAtMTcwLDYgKzE3MCw5IEBACiAjZGVmaW5lIFRXTDQwMzBfQ0xLMjU2RlNfRU4JCTB4MDIKICNkZWZpbmUgVFdMNDAzMF9BSUZfRU4JCQkweDAxCiAKKy8qIEVBUl9DVEwgKDB4MjEpICovCisjZGVmaW5lIFRXTDQwMzBfRUFSX0dBSU4JCTB4MzAKKwogLyogSFNfR0FJTl9TRVQgKDB4MjMpIEZpZWxkcyAqLwogCiAjZGVmaW5lIFRXTDQwMzBfSFNSX0dBSU4JCTB4MEMKQEAgLTE5OCw2ICsyMDEsMTggQEAKICNkZWZpbmUgVFdMNDAzMF9SQU1QX0RFTEFZXzI1ODFNUwkweDFDCiAjZGVmaW5lIFRXTDQwMzBfUkFNUF9FTgkJCTB4MDIKIAorLyogUFJFRExfQ1RMICgweDI1KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRURMX0dBSU4JCTB4MzAKKworLyogUFJFRFJfQ1RMICgweDI2KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRURSX0dBSU4JCTB4MzAKKworLyogUFJFQ0tMX0NUTCAoMHgyNykgKi8KKyNkZWZpbmUgVFdMNDAzMF9QUkVDS0xfR0FJTgkJMHgzMAorCisvKiBQUkVDS1JfQ1RMICgweDI4KSAqLworI2RlZmluZSBUV0w0MDMwX1BSRUNLUl9HQUlOCQkweDMwCisKIC8qIEhGTF9DVEwgKDB4MjksIDB4MkEpIEZpZWxkcyAqLwogI2RlZmluZSBUV0w0MDMwX0hGX0NUTF9IQl9FTgkJMHgwNAogI2RlZmluZSBUV0w0MDMwX0hGX0NUTF9MT09QX0VOCQkweDA4CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCmluZGV4IGEyYzUwNjQuLmRkZWZiOGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCkBAIC0xNzMsNyArMTczLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHVkYTEzNHhfcHJpdiAqdWRhMTM0eCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqbWFzdGVyX3J1bnRpbWU7CiAKQEAgLTIwNiw3ICsyMDYsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdWRhMTM0eF9wcml2ICp1ZGExMzR4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAogCWlmICh1ZGExMzR4LT5tYXN0ZXJfc3Vic3RyZWFtID09IHN1YnN0cmVhbSkKQEAgLTIyMSw3ICsyMjEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdWRhMTM0eF9wcml2ICp1ZGExMzR4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBod19wYXJhbXM7CiAKQEAgLTQzMSwzOCArNDMxLDE0IEBACiBTT0NfU0lOR0xFKCJEQyBGaWx0ZXIgRW5hYmxlIFN3aXRjaCIsIFVEQTEzNFhfU1RBVFVTMCwgMCwgMSwgMCksCiB9OwogCi1zdGF0aWMgaW50IHVkYTEzNHhfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpLCBuOwotCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjdHJsczsKLQlzdHJ1Y3QgdWRhMTM0eF9wbGF0Zm9ybV9kYXRhICpwZCA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQlzd2l0Y2ggKHBkLT5tb2RlbCkgewotCWNhc2UgVURBMTM0WF9VREExMzQwOgotCWNhc2UgVURBMTM0WF9VREExMzQ0OgotCQluID0gQVJSQVlfU0laRSh1ZGExMzQwX3NuZF9jb250cm9scyk7Ci0JCWN0cmxzID0gdWRhMTM0MF9zbmRfY29udHJvbHM7Ci0JCWJyZWFrOwotCWNhc2UgVURBMTM0WF9VREExMzQxOgotCQluID0gQVJSQVlfU0laRSh1ZGExMzQxX3NuZF9jb250cm9scyk7Ci0JCWN0cmxzID0gdWRhMTM0MV9zbmRfY29udHJvbHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgdW5rb3duIGNvZGVjIHR5cGU6ICVkIiwKLQkJICAgICAgIF9fZnVuY19fLCBwZC0+bW9kZWwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZjdHJsc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHVkYTEzNHhfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHVkYTEzNHhfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSB1ZGExMzR4X3NodXRkb3duLAorCS5od19wYXJhbXMJPSB1ZGExMzR4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gdWRhMTM0eF9tdXRlLAorCS5zZXRfc3lzY2xrCT0gdWRhMTM0eF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHVkYTEzNHhfc2V0X2RhaV9mbXQsCit9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdWRhMTM0eF9kYWkgPSB7CiAJLm5hbWUgPSAiVURBMTM0WCIsCkBAIC00ODMsMTQgKzQ1OSw3IEBACiAJCS5mb3JtYXRzID0gVURBMTM0WF9GT1JNQVRTLAogCX0sCiAJLyogcGNtIG9wZXJhdGlvbnMgKi8KLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHVkYTEzNHhfc3RhcnR1cCwKLQkJLnNodXRkb3duID0gdWRhMTM0eF9zaHV0ZG93biwKLQkJLmh3X3BhcmFtcyA9IHVkYTEzNHhfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gdWRhMTM0eF9tdXRlLAotCQkuc2V0X3N5c2NsayA9IHVkYTEzNHhfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gdWRhMTM0eF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ1ZGExMzR4X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTCh1ZGExMzR4X2RhaSk7CiAKQEAgLTUyNSwxMSArNDk0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIHJldDsKIAotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVkYTEzNHhfcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICh1ZGExMzR4ID09IE5VTEwpCkBAIC01NzIsNyArNTQxLDIyIEBACiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQlyZXQgPSB1ZGExMzR4X2FkZF9jb250cm9scyhjb2RlYyk7CisJc3dpdGNoIChwZC0+bW9kZWwpIHsKKwljYXNlIFVEQTEzNFhfVURBMTM0MDoKKwljYXNlIFVEQTEzNFhfVURBMTM0NDoKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzNDBfc25kX2NvbnRyb2xzLAorCQkJCQlBUlJBWV9TSVpFKHVkYTEzNDBfc25kX2NvbnRyb2xzKSk7CisJYnJlYWs7CisJY2FzZSBVREExMzRYX1VEQTEzNDE6CisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB1ZGExMzQxX3NuZF9jb250cm9scywKKwkJCQkJQVJSQVlfU0laRSh1ZGExMzQxX3NuZF9jb250cm9scykpOworCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXMgdW5rb3duIGNvZGVjIHR5cGU6ICVkIiwKKwkJCV9fZnVuY19fLCBwZC0+bW9kZWwpOworCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVURBMTM0WDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNvbnRyb2xzXG4iKTsKIAkJZ290byBwY21fZXJyOwpAQCAtNjAyLDcgKzU4Niw3IEBACiBzdGF0aWMgaW50IHVkYTEzNHhfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNjIyLDcgKzYwNiw3IEBACiAJCQkJCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CkBAIC02MzIsNyArNjE2LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM0eF9zb2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7CiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09OKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKaW5kZXggZTZiZjA4NC4uNWIyMTU5NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC0zNSw3ICszNiw4IEBACiAKICNpbmNsdWRlICJ1ZGExMzgwLmgiCiAKLSNkZWZpbmUgVURBMTM4MF9WRVJTSU9OICIwLjYiCitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHVkYTEzODBfd29yazsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqdWRhMTM4MF9jb2RlYzsKIAogLyoKICAqIHVkYTEzODAgcmVnaXN0ZXIgY2FjaGUKQEAgLTUyLDYgKzU0LDggQEAKIAkweDAwMDAsIDB4ODAwMCwgMHgwMDAyLCAweDAwMDAsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1ZGExMzgwX2NhY2hlX2RpcnR5OworCiAvKgogICogcmVhZCB1ZGExMzgwIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTczLDggKzc3LDExIEBACiAJdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCiAJaWYgKHJlZyA+PSBVREExMzgwX0NBQ0hFUkVHTlVNKQogCQlyZXR1cm47CisJaWYgKChyZWcgPj0gMHgxMCkgJiYgKGNhY2hlW3JlZ10gIT0gdmFsdWUpKQorCQlzZXRfYml0KHJlZyAtIDB4MTAsICZ1ZGExMzgwX2NhY2hlX2RpcnR5KTsKIAljYWNoZVtyZWddID0gdmFsdWU7CiB9CiAKQEAgLTExMyw2ICsxMjAsOCBAQAogCQkJCQkoZGF0YVswXTw8OCkgfCBkYXRhWzFdKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJCWlmIChyZWcgPj0gMHgxMCkKKwkJCWNsZWFyX2JpdChyZWcgLSAweDEwLCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSk7CiAJCXJldHVybiAwOwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTzsKQEAgLTEyMCw2ICsxMjksMjAgQEAKIAogI2RlZmluZSB1ZGExMzgwX3Jlc2V0KGMpCXVkYTEzODBfd3JpdGUoYywgVURBMTM4MF9SRVNFVCwgMCkKIAorc3RhdGljIHZvaWQgdWRhMTM4MF9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgYml0LCByZWc7CisKKwlmb3JfZWFjaF9iaXQoYml0LCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSwgVURBMTM4MF9DQUNIRVJFR05VTSAtIDB4MTApIHsKKwkJcmVnID0gMHgxMCArIGJpdDsKKwkJcHJfZGVidWcoInVkYTEzODA6IGZsdXNoIHJlZyAleCB2YWwgJXg6XG4iLCByZWcsCisJCQkJdWRhMTM4MF9yZWFkX3JlZ19jYWNoZSh1ZGExMzgwX2NvZGVjLCByZWcpKTsKKwkJdWRhMTM4MF93cml0ZSh1ZGExMzgwX2NvZGVjLCByZWcsCisJCQkJdWRhMTM4MF9yZWFkX3JlZ19jYWNoZSh1ZGExMzgwX2NvZGVjLCByZWcpKTsKKwkJY2xlYXJfYml0KGJpdCwgJnVkYTEzODBfY2FjaGVfZGlydHkpOworCX0KK30KKwogLyogZGVjbGFyYXRpb25zIG9mIEFMU0EgcmVnX2VsZW1fUkVBTCBjb250cm9scyAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnVkYTEzODBfZGVlbXBbXSA9IHsKIAkiTm9uZSIsCkBAIC0yNTQsNyArMjc3LDYgQEAKIAlTT0NfU0lOR0xFKCJEQUMgUG9sYXJpdHkgaW52ZXJ0aW5nIFN3aXRjaCIsIFVEQTEzODBfTUlYRVIsIDE1LCAxLCAwKSwJLyogREFfUE9MX0lOViAqLwogCVNPQ19FTlVNKCJOb2lzZSBTaGFwZXIiLCB1ZGExMzgwX3NlbF9uc19lbnVtKSwJCQkJLyogU0VMX05TICovCiAJU09DX0VOVU0oIkRpZ2l0YWwgTWl4ZXIgU2lnbmFsIENvbnRyb2wiLCB1ZGExMzgwX21peF9lbnVtKSwJCS8qIE1JWF9QT1MsIE1JWCAqLwotCVNPQ19TSU5HTEUoIlNpbGVuY2UgU3dpdGNoIiwgVURBMTM4MF9NSVhFUiwgNywgMSwgMCksCQkJLyogU0lMRU5DRSwgZm9yY2UgREFDIG91dHB1dCB0byBzaWxlbmNlICovCiAJU09DX1NJTkdMRSgiU2lsZW5jZSBEZXRlY3RvciBTd2l0Y2giLCBVREExMzgwX01JWEVSLCA2LCAxLCAwKSwJCS8qIFNERVRfT04gKi8KIAlTT0NfRU5VTSgiU2lsZW5jZSBEZXRlY3RvciBTZXR0aW5nIiwgdWRhMTM4MF9zZGV0X2VudW0pLAkJLyogU0RfVkFMVUUgKi8KIAlTT0NfRU5VTSgiT3ZlcnNhbXBsaW5nIElucHV0IiwgdWRhMTM4MF9vc19lbnVtKSwJCQkvKiBPUyAqLwpAQCAtMjcxLDIxICsyOTMsNiBAQAogCVNPQ19TSU5HTEUoIkFHQyBTd2l0Y2giLCBVREExMzgwX0FHQywgMCwgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgdWRhMTM4MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1ZGExMzgwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmdWRhMTM4MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogSW5wdXQgbXV4ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdWRhMTM4MF9pbnB1dF9tdXhfY29udHJvbCA9CiAJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB1ZGExMzgwX2lucHV0X3NlbF9lbnVtKTsKQEAgLTM3MSw3ICszNzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCitzdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXRfYm90aChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwpAQCAtMzgxLDE2ICszODgsNzUgQEAKIAlpZmFjZSA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfSUZBQ0UpOwogCWlmYWNlICY9IH4oUjAxX1NGT1JJX01BU0sgfCBSMDFfU0lNIHwgUjAxX1NGT1JPX01BU0spOwogCi0JLyogRklYTUU6IGhvdyB0byBzZWxlY3QgSTJTIGZvciBEQVRBTyBhbmQgTVNCIGZvciBEQVRBSSBjb3JyZWN0bHk/ICovCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCQlpZmFjZSB8PSBSMDFfU0ZPUklfSTJTIHwgUjAxX1NGT1JPX0kyUzsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9MU0I6Ci0JCWlmYWNlIHw9IFIwMV9TRk9SSV9MU0IxNiB8IFIwMV9TRk9ST19JMlM7CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9MU0IxNiB8IFIwMV9TRk9ST19MU0IxNjsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6Ci0JCWlmYWNlIHw9IFIwMV9TRk9SSV9NU0IgfCBSMDFfU0ZPUk9fSTJTOworCQlpZmFjZSB8PSBSMDFfU0ZPUklfTVNCIHwgUjAxX1NGT1JPX01TQjsKKwl9CisKKwkvKiBEQVRBSSBpcyBzbGF2ZSBvbmx5LCBzbyBpbiBzaW5nbGUtbGluayBtb2RlLCB0aGlzIGhhcyB0byBiZSBzbGF2ZSAqLworCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9JRkFDRSwgaWZhY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRhMTM4MF9zZXRfZGFpX2ZtdF9wbGF5YmFjayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCBpZmFjZTsKKworCS8qIHNldCB1cCBEQUkgYmFzZWQgdXBvbiBmbXQgKi8KKwlpZmFjZSA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfSUZBQ0UpOworCWlmYWNlICY9IH5SMDFfU0ZPUklfTUFTSzsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9MU0IxNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9NU0I7CisJfQorCisJLyogREFUQUkgaXMgc2xhdmUgb25seSwgc28gdGhpcyBoYXMgdG8gYmUgc2xhdmUgKi8KKwlpZiAoKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfSUZBQ0UsIGlmYWNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXRfY2FwdHVyZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCBpZmFjZTsKKworCS8qIHNldCB1cCBEQUkgYmFzZWQgdXBvbiBmbXQgKi8KKwlpZmFjZSA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfSUZBQ0UpOworCWlmYWNlICY9IH4oUjAxX1NJTSB8IFIwMV9TRk9ST19NQVNLKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gUjAxX1NGT1JPX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9ST19MU0IxNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6CisJCWlmYWNlIHw9IFIwMV9TRk9ST19NU0I7CiAJfQogCiAJaWYgKChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgPT0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSkKQEAgLTQwMSw0MSArNDY3LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBGbHVzaCByZWcgY2FjaGUKLSAqIFdlIGNhbiBvbmx5IHdyaXRlIHRoZSBpbnRlcnBvbGF0b3IgYW5kIGRlY2ltYXRvciByZWdpc3RlcnMKLSAqIHdoZW4gdGhlIERBSSBpcyBiZWluZyBjbG9ja2VkIGJ5IHRoZSBDUFUgREFJLiBJdCdzIHVwIHRvIHRoZQotICogbWFjaGluZSBhbmQgY3B1IERBSSBkcml2ZXIgdG8gZG8gdGhpcyBiZWZvcmUgd2UgYXJlIGNhbGxlZC4KLSAqLwotc3RhdGljIGludCB1ZGExMzgwX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorc3RhdGljIGludCB1ZGExMzgwX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJlZywgcmVnX3N0YXJ0LCByZWdfZW5kLCBjbGs7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgbWl4ZXIgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSKTsKIAotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCXJlZ19zdGFydCA9IFVEQTEzODBfTVZPTDsKLQkJcmVnX2VuZCA9IFVEQTEzODBfTUlYRVI7Ci0JfSBlbHNlIHsKLQkJcmVnX3N0YXJ0ID0gVURBMTM4MF9ERUM7Ci0JCXJlZ19lbmQgPSBVREExMzgwX0FHQzsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQl1ZGExMzgwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9NSVhFUiwKKwkJCQkJbWl4ZXIgJiB+UjE0X1NJTEVOQ0UpOworCQlzY2hlZHVsZV93b3JrKCZ1ZGExMzgwX3dvcmspOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQl1ZGExMzgwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9NSVhFUiwKKwkJCQkJbWl4ZXIgfCBSMTRfU0lMRU5DRSk7CisJCXNjaGVkdWxlX3dvcmsoJnVkYTEzODBfd29yayk7CisJCWJyZWFrOwogCX0KLQotCS8qIEZJWE1FIGRpc2FibGUgREFDX0NMSyAqLwotCWNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrICYgflIwMF9EQUNfQ0xLKTsKLQotCWZvciAocmVnID0gcmVnX3N0YXJ0OyByZWcgPD0gcmVnX2VuZDsgcmVnKyspIHsKLQkJcHJfZGVidWcoInVkYTEzODA6IGZsdXNoIHJlZyAleCB2YWwgJXg6IiwgcmVnLAotCQkJCXVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZykpOwotCQl1ZGExMzgwX3dyaXRlKGNvZGVjLCByZWcsIHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZykpOwotCX0KLQotCS8qIEZJWE1FIGVuYWJsZSBEQUNfQ0xLICovCi0JdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIGNsayB8IFIwMF9EQUNfQ0xLKTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NDUsNyArNDk4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKIAogCS8qIHNldCBXU1BMTCBwb3dlciBhbmQgZGl2aWRlciBpZiBydW5uaW5nIGZyb20gdGhpcyBjbG9jayAqLwpAQCAtNDg0LDcgKzUzNyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBjbGsgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0NMSyk7CiAKIAkvKiBzaHV0IGRvd24gV1NQTEwgcG93ZXIgaWYgcnVubmluZyBmcm9tIHRoaXMgY2xvY2sgKi8KQEAgLTUwMSwyNCArNTU0LDYgQEAKIAl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrKTsKIH0KIAotc3RhdGljIGludCB1ZGExMzgwX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7Ci0JdTE2IG11dGVfcmVnID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9ERUVNUCkgJiB+UjEzX01UTTsKLQotCS8qIEZJWE1FOiBtdXRlKGNvZGVjLDApIGlzIGNhbGxlZCB3aGVuIHRoZSBtYWdpY2lhbiBjbG9jayBpcyBhbHJlYWR5Ci0JICogc2V0IHRvIFdTUExMLCBidXQgZm9yIHNvbWUgdW5rbm93biByZWFzb24gd3JpdGluZyB0byBpbnRlcnBvbGF0b3IKLQkgKiByZWdpc3RlcnMgd29ya3Mgb25seSB3aGVuIGNsb2NrZWQgYnkgU1lTQ0xLICovCi0JdTE2IGNsayA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfQ0xLKTsKLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgflIwMF9EQUNfQ0xLICYgY2xrKTsKLQlpZiAobXV0ZSkKLQkJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9ERUVNUCwgbXV0ZV9yZWcgfCBSMTNfTVRNKTsKLQllbHNlCi0JCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfREVFTVAsIG11dGVfcmVnKTsKLQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0NMSywgY2xrKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB1ZGExMzgwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKQEAgLTU0NCw2ICs1NzksMjcgQEAKIAkJICAgICAgIFNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfFwKIAkJICAgICAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHVkYTEzODBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHVkYTEzODBfcGNtX3NodXRkb3duLAorCS50cmlnZ2VyCT0gdWRhMTM4MF90cmlnZ2VyLAorCS5zZXRfZm10CT0gdWRhMTM4MF9zZXRfZGFpX2ZtdF9ib3RoLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM4MF9kYWlfb3BzX3BsYXliYWNrID0geworCS5od19wYXJhbXMJPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gdWRhMTM4MF9wY21fc2h1dGRvd24sCisJLnRyaWdnZXIJPSB1ZGExMzgwX3RyaWdnZXIsCisJLnNldF9mbXQJPSB1ZGExMzgwX3NldF9kYWlfZm10X3BsYXliYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdWRhMTM4MF9kYWlfb3BzX2NhcHR1cmUgPSB7CisJLmh3X3BhcmFtcwk9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHVkYTEzODBfdHJpZ2dlciwKKwkuc2V0X2ZtdAk9IHVkYTEzODBfc2V0X2RhaV9mbXRfY2FwdHVyZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB1ZGExMzgwX2RhaVtdID0gewogewogCS5uYW1lID0gIlVEQTEzODAiLApAQCAtNTU5LDEzICs2MTUsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gVURBMTM4MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHVkYTEzODBfcGNtX3NodXRkb3duLAotCQkucHJlcGFyZSA9IHVkYTEzODBfcGNtX3ByZXBhcmUsCi0JCS5kaWdpdGFsX211dGUgPSB1ZGExMzgwX211dGUsCi0JCS5zZXRfZm10ID0gdWRhMTM4MF9zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmdWRhMTM4MF9kYWlfb3BzLAogfSwKIHsgLyogcGxheWJhY2sgb25seSAtIGR1YWwgaW50ZXJmYWNlICovCiAJLm5hbWUgPSAiVURBMTM4MCIsCkBAIC01NzYsMTMgKzYyNiw3IEBACiAJCS5yYXRlcyA9IFVEQTEzODBfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKLQkJLnByZXBhcmUgPSB1ZGExMzgwX3BjbV9wcmVwYXJlLAotCQkuZGlnaXRhbF9tdXRlID0gdWRhMTM4MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHVkYTEzODBfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJnVkYTEzODBfZGFpX29wc19wbGF5YmFjaywKIH0sCiB7IC8qIGNhcHR1cmUgb25seSAtIGR1YWwgaW50ZXJmYWNlKi8KIAkubmFtZSA9ICJVREExMzgwIiwKQEAgLTU5MywxMiArNjM3LDcgQEAKIAkJLnJhdGVzID0gVURBMTM4MF9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCi0JCS5zaHV0ZG93biA9IHVkYTEzODBfcGNtX3NodXRkb3duLAotCQkucHJlcGFyZSA9IHVkYTEzODBfcGNtX3ByZXBhcmUsCi0JCS5zZXRfZm10ID0gdWRhMTM4MF9zZXRfZGFpX2ZtdCwKLQl9LAorCS5vcHMgPSAmdWRhMTM4MF9kYWlfb3BzX2NhcHR1cmUsCiB9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHVkYTEzODBfZGFpKTsKQEAgLTYwNiw3ICs2NDUsNyBAQAogc3RhdGljIGludCB1ZGExMzgwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC02MTUsNyArNjU0LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM4MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNjM3LDcgKzY3Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdWRhMTM4MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LCBpbnQgZGFjX2NsaykKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJVREExMzgwIjsKQEAgLTY1NSw2ICs2OTQsOSBAQAogCWNvZGVjLT5yZWdfY2FjaGVfc3RlcCA9IDE7CiAJdWRhMTM4MF9yZXNldChjb2RlYyk7CiAKKwl1ZGExMzgwX2NvZGVjID0gY29kZWM7CisJSU5JVF9XT1JLKCZ1ZGExMzgwX3dvcmssIHVkYTEzODBfZmx1c2hfd29yayk7CisKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjc1LDcgKzcxNyw4IEBACiAJfQogCiAJLyogdWRhMTM4MCBpbml0ICovCi0JdWRhMTM4MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB1ZGExMzgwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHVkYTEzODBfc25kX2NvbnRyb2xzKSk7CiAJdWRhMTM4MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNzAyLDcgKzc0NSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB1ZGExMzgwX3NvY2RldjsKIAlzdHJ1Y3QgdWRhMTM4MF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTc4NiwxNCArODI5LDEyIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQ7CiAKLQlwcl9pbmZvKCJVREExMzgwIEF1ZGlvIENvZGVjICVzIiwgVURBMTM4MF9WRVJTSU9OKTsKLQogCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwogCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC04MTcsNyArODU4LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCmluZGV4IDM1ZDk5NzUuLjNiMWQwOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwpAQCAtNTEsMTAgKzUxLDE3IEBACiAJdTE2IG11dGU7CiB9OwogCitzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSB7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlpbnQgcmVwb3J0OworfTsKKwogc3RydWN0IHdtODM1MF9kYXRhIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKIAlzdHJ1Y3Qgd204MzUwX291dHB1dCBvdXQxOwogCXN0cnVjdCB3bTgzNTBfb3V0cHV0IG91dDI7CisJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgaHBsOworCXN0cnVjdCB3bTgzNTBfamFja19kYXRhIGhwcjsKIAlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHN1cHBseV9uYW1lcyldOwogfTsKIApAQCAtNzc1LDIxICs3ODIsNiBAQAogCXsiQmVlcCIsIE5VTEwsICJJTjNSIFBHQSJ9LAogfTsKIAotc3RhdGljIGludCB3bTgzNTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204MzUwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204MzUwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB3bTgzNTBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWludCByZXQ7CkBAIC0xMzA5LDcgKzEzMDEsNyBAQAogc3RhdGljIGludCB3bTgzNTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTgzNTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtMTMxOCw3ICsxMzEwLDcgQEAKIHN0YXRpYyBpbnQgd204MzUwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204MzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKQEAgLTEzMjgsNiArMTMyMCw5NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB3bTgzNTBfaHBfamFja19oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPSBkYXRhOworCXUxNiByZWc7CisJaW50IHJlcG9ydDsKKwlpbnQgbWFzazsKKwlzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSAqamFjayA9IE5VTEw7CisKKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0w6CisJCWphY2sgPSAmcHJpdi0+aHBsOworCQltYXNrID0gV004MzUwX0pBQ0tfTF9MVkw7CisJCWJyZWFrOworCisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjoKKwkJamFjayA9ICZwcml2LT5ocHI7CisJCW1hc2sgPSBXTTgzNTBfSkFDS19SX0xWTDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlpZiAoIWphY2stPmphY2spIHsKKwkJZGV2X3dhcm4od204MzUwLT5kZXYsICJKYWNrIGludGVycnVwdCBjYWxsZWQgd2l0aCBubyBqYWNrXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIERlYm91bmNlICovCisJbXNsZWVwKDIwMCk7CisKKwlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSkFDS19QSU5fU1RBVFVTKTsKKwlpZiAocmVnICYgbWFzaykKKwkJcmVwb3J0ID0gamFjay0+cmVwb3J0OworCWVsc2UKKwkJcmVwb3J0ID0gMDsKKworCXNuZF9zb2NfamFja19yZXBvcnQoamFjay0+amFjaywgcmVwb3J0LCBqYWNrLT5yZXBvcnQpOworfQorCisvKioKKyAqIHdtODM1MF9ocF9qYWNrX2RldGVjdCAtIEVuYWJsZSBoZWFkcGhvbmUgamFjayBkZXRlY3Rpb24uCisgKgorICogQGNvZGVjOiAgV004MzUwIGNvZGVjCisgKiBAd2hpY2g6ICBsZWZ0IG9yIHJpZ2h0IGphY2sgZGV0ZWN0IHNpZ25hbAorICogQGphY2s6ICAgamFjayB0byByZXBvcnQgZGV0ZWN0aW9uIGV2ZW50cyBvbgorICogQHJlcG9ydDogdmFsdWUgdG8gcmVwb3J0CisgKgorICogRW5hYmxlcyB0aGUgaGVhZHBob25lIGphY2sgZGV0ZWN0aW9uIG9mIHRoZSBXTTgzNTAuCisgKi8KK2ludCB3bTgzNTBfaHBfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBlbnVtIHdtODM1MF9qYWNrIHdoaWNoLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KQoreworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKwlpbnQgaXJxOworCWludCBlbmE7CisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJY2FzZSBXTTgzNTBfSkRMOgorCQlwcml2LT5ocGwuamFjayA9IGphY2s7CisJCXByaXYtPmhwbC5yZXBvcnQgPSByZXBvcnQ7CisJCWlycSA9IFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MOworCQllbmEgPSBXTTgzNTBfSkRMX0VOQTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODM1MF9KRFI6CisJCXByaXYtPmhwci5qYWNrID0gamFjazsKKwkJcHJpdi0+aHByLnJlcG9ydCA9IHJlcG9ydDsKKwkJaXJxID0gV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1I7CisJCWVuYSA9IFdNODM1MF9KRFJfRU5BOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzQsIFdNODM1MF9UT0NMS19FTkEpOworCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9KQUNLX0RFVEVDVCwgZW5hKTsKKworCS8qIFN5bmMgc3RhdHVzICovCisJd204MzUwX2hwX2phY2tfaGFuZGxlcih3bTgzNTAsIGlycSwgcHJpdik7CisKKwl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIGlycSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9ocF9qYWNrX2RldGVjdCk7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204MzUwX2NvZGVjOwogCiBzdGF0aWMgaW50IHdtODM1MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTM0Miw4ICsxNDIzLDggQEAKIAogCUJVR19PTighd204MzUwX2NvZGVjKTsKIAotCXNvY2Rldi0+Y29kZWMgPSB3bTgzNTBfY29kZWM7Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTgzNTBfY29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXdtODM1MCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKQEAgLTEzODEsMTMgKzE0NjIsMjEgQEAKIAl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfUk9VVDJfVk9MVU1FLAogCQkJV004MzUwX09VVDJfVlUgfCBXTTgzNTBfT1VUMlJfTVVURSk7CiAKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCwKKwkJCSAgICB3bTgzNTBfaHBfamFja19oYW5kbGVyLCBwcml2KTsKKwl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IsCisJCQkgICAgd204MzUwX2hwX2phY2tfaGFuZGxlciwgcHJpdik7CisKIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0Jd204MzUwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODM1MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTgzNTBfc25kX2NvbnRyb2xzKSk7CiAJd204MzUwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXdtODM1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwpAQCAtMTQwOSwxMCArMTQ5OCwyMyBAQAogc3RhdGljIGludCB3bTgzNTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQ7CiAKKwl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9KQUNLX0RFVEVDVCwKKwkJCSAgV004MzUwX0pETF9FTkEgfCBXTTgzNTBfSkRSX0VOQSk7CisJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF80LCBXTTgzNTBfVE9DTEtfRU5BKTsKKworCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKworCXByaXYtPmhwbC5qYWNrID0gTlVMTDsKKwlwcml2LT5ocHIuamFjayA9IE5VTEw7CisKIAkvKiBjYW5jZWwgYW55IHdvcmsgd2FpdGluZyB0byBiZSBxdWV1ZWQuICovCiAJcmV0ID0gY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CiAKQEAgLTE0MzYsNiArMTUzOCwxNiBAQAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204MzUwX2RhaV9vcHMgPSB7CisJIC5od19wYXJhbXMJPSB3bTgzNTBfcGNtX2h3X3BhcmFtcywKKwkgLmRpZ2l0YWxfbXV0ZQk9IHdtODM1MF9tdXRlLAorCSAudHJpZ2dlcgk9IHdtODM1MF9wY21fdHJpZ2dlciwKKwkgLnNldF9mbXQJPSB3bTgzNTBfc2V0X2RhaV9mbXQsCisJIC5zZXRfc3lzY2xrCT0gd204MzUwX3NldF9kYWlfc3lzY2xrLAorCSAuc2V0X3BsbAk9IHdtODM1MF9zZXRfZmxsLAorCSAuc2V0X2Nsa2Rpdgk9IHdtODM1MF9zZXRfY2xrZGl2LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODM1MF9kYWkgPSB7CiAJLm5hbWUgPSAiV004MzUwIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xNDUyLDE1ICsxNTY0LDcgQEAKIAkJIC5yYXRlcyA9IFdNODM1MF9SQVRFUywKIAkJIC5mb3JtYXRzID0gV004MzUwX0ZPUk1BVFMsCiAJIH0sCi0JLm9wcyA9IHsKLQkJIC5od19wYXJhbXMgPSB3bTgzNTBfcGNtX2h3X3BhcmFtcywKLQkJIC5kaWdpdGFsX211dGUgPSB3bTgzNTBfbXV0ZSwKLQkJIC50cmlnZ2VyID0gd204MzUwX3BjbV90cmlnZ2VyLAotCQkgLnNldF9mbXQgPSB3bTgzNTBfc2V0X2RhaV9mbXQsCi0JCSAuc2V0X3N5c2NsayA9IHdtODM1MF9zZXRfZGFpX3N5c2NsaywKLQkJIC5zZXRfcGxsID0gd204MzUwX3NldF9mbGwsCi0JCSAuc2V0X2Nsa2RpdiA9IHdtODM1MF9zZXRfY2xrZGl2LAotCSB9LAorCS5vcHMgPSAmd204MzUwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2RhaSk7CiAKQEAgLTE0NzIsNyArMTU3Niw3IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTgzNTApOwogCi1zdGF0aWMgaW50IHdtODM1MF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204MzUwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODM1MF9kYXRhICpwcml2OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmgKaW5kZXggY2MyODg3YS4uZDExYmQ5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oCkBAIC0xNyw0ICsxNywxMiBAQAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTgzNTBfZGFpOwogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODM1MDsKIAorZW51bSB3bTgzNTBfamFjayB7CisJV004MzUwX0pETCA9IDEsCisJV004MzUwX0pEUiA9IDIsCit9OworCitpbnQgd204MzUwX2hwX2phY2tfZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgZW51bSB3bTgzNTBfamFjayB3aGljaCwKKwkJCSAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHJlcG9ydCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwZWZhNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKQEAgLTAsMCArMSwxNTgyIEBACisvKgorICogd204NDAwLmMgIC0tICBXTTg0MDAgQUxTQSBTb2MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1hdWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg0MDAtcHJpdmF0ZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ3bTg0MDAuaCIKKworLyogRmFrZSByZWdpc3RlciBmb3IgaW50ZXJuYWwgc3RhdGUgKi8KKyNkZWZpbmUgV004NDAwX0lOVERSSVZCSVRTICAgICAgKFdNODQwMF9SRUdJU1RFUl9DT1VOVCArIDEpCisjZGVmaW5lIFdNODQwMF9JTk1JWExfUFdSCQkJMAorI2RlZmluZSBXTTg0MDBfQUlOTE1VWF9QV1IJCQkxCisjZGVmaW5lIFdNODQwMF9JTk1JWFJfUFdSCQkJMgorI2RlZmluZSBXTTg0MDBfQUlOUk1VWF9QV1IJCQkzCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBwb3dlcltdID0geworCXsKKwkJLnN1cHBseSA9ICJJMlMxVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJJMlMyVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJEQ1ZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiQVZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiRkxMVkREIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJIUFZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiU1BLVkREIiwKKwl9LAorfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204NDAwX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXN0cnVjdCB3bTg0MDAgKndtODQwMDsKKwl1MTYgZmFrZV9yZWdpc3RlcjsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworCXVuc2lnbmVkIGludCBwY21jbGs7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJaW50IGZsbF9pbiwgZmxsX291dDsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODQwMF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocmVnID09IFdNODQwMF9JTlREUklWQklUUykKKwkJcmV0dXJuIHdtODQwMC0+ZmFrZV9yZWdpc3RlcjsKKwllbHNlCisJCXJldHVybiB3bTg0MDBfcmVnX3JlYWQod204NDAwLT53bTg0MDAsIHJlZyk7Cit9CisKKy8qCisgKiB3cml0ZSB0byB0aGUgd204NDAwIHJlZ2lzdGVyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHJlZyA9PSBXTTg0MDBfSU5URFJJVkJJVFMpIHsKKwkJd204NDAwLT5mYWtlX3JlZ2lzdGVyID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMC0+d204NDAwLCByZWcsIDB4ZmZmZiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg0MDBfY29kZWNfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUod204NDAwLT53bTg0MDApOworfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKHJlY19taXhfdGx2LCAtMTUwMCwgNjAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihpbl9wZ2FfdGx2LCAtMTY1MCwgMzAwMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X21peF90bHYsIC0yMTAwLCAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfcGdhX3RsdiwgLTczMDAsIDYwMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X29taXhfdGx2LCAtNjAwLCAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfZGFjX3RsdiwgLTcxNjMsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGluX2FkY190bHYsIC03MTYzLCAxNzYzKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihvdXRfc2lkZXRvbmVfdGx2LCAtMzYwMCwgMCk7CisKK3N0YXRpYyBpbnQgd204NDAwX291dHBnYV9wdXRfdm9sc3dfdnUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworICAgICAgICBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgcmVnID0gbWMtPnJlZzsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgdTE2IHZhbDsKKworICAgICAgICByZXQgPSBzbmRfc29jX3B1dF92b2xzdyhrY29udHJvbCwgdWNvbnRyb2wpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIC8qIG5vdyBoaXQgdGhlIHZvbHVtZSB1cGRhdGUgYml0cyAoYWx3YXlzIGJpdCA4KSAqLworICAgICAgICB2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgcmVnKTsKKyAgICAgICAgcmV0dXJuIHdtODQwMF93cml0ZShjb2RlYywgcmVnLCB2YWwgfCAweDAxMDApOworfQorCisjZGVmaW5lIFdNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXgsIGludmVydCwgdGx2X2FycmF5KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHxcCisJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsXAorCS50bHYucCA9ICh0bHZfYXJyYXkpLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIFwKKwkuZ2V0ID0gc25kX3NvY19nZXRfdm9sc3csIC5wdXQgPSB3bTg0MDBfb3V0cGdhX3B1dF92b2xzd192dSwgXAorCS5wcml2YXRlX3ZhbHVlID0gU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgfQorCisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfZGlnaXRhbF9zaWRldG9uZVtdID0KKwl7Ik5vbmUiLCAiTGVmdCBBREMiLCAiUmlnaHQgQURDIiwgIlJlc2VydmVkIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX2xlZnRfZGlnaXRhbF9zaWRldG9uZV9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJCVdNODQwMF9BRENfVE9fREFDTF9TSElGVCwgMiwgd204NDAwX2RpZ2l0YWxfc2lkZXRvbmUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9yaWdodF9kaWdpdGFsX3NpZGV0b25lX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwkJV004NDAwX0FEQ19UT19EQUNSX1NISUZULCAyLCB3bTg0MDBfZGlnaXRhbF9zaWRldG9uZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfYWRjbW9kZVtdID0KKwl7IkhpLWZpIG1vZGUiLCAiVm9pY2UgbW9kZSAxIiwgIlZvaWNlIG1vZGUgMiIsICJWb2ljZSBtb2RlIDMifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfcmlnaHRfYWRjbW9kZV9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShXTTg0MDBfQURDX0NUUkwsIFdNODQwMF9BRENfSFBGX0NVVF9TSElGVCwgMywgd204NDAwX2FkY21vZGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX3NuZF9jb250cm9sc1tdID0geworLyogSU5NSVhMICovCitTT0NfU0lOR0xFKCJMSU4xMiBQR0EgQm9vc3QiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDEyTU5CU1RfU0hJRlQsCisJICAgMSwgMCksCitTT0NfU0lOR0xFKCJMSU4zNCBQR0EgQm9vc3QiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDM0TU5CU1RfU0hJRlQsCisJICAgMSwgMCksCisvKiBJTk1JWFIgKi8KK1NPQ19TSU5HTEUoIlJJTjEyIFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9SMTJNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKK1NPQ19TSU5HTEUoIlJJTjM0IFBHQSBCb29zdCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9SMzRNTkJTVF9TSElGVCwKKwkgICAxLCAwKSwKKworLyogTE9NSVggKi8KK1NPQ19TSU5HTEVfVExWKCJMT01JWCBMSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSMywKKwlXTTg0MDBfTExJM0xPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSMywKKwlXTTg0MDBfTFIxMkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSMywKKwlXTTg0MDBfTEwxMkxPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTE9NSVggUklOMyBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjUsCisJV004NDAwX0xSSTNMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIEFJTlJNVVggQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI1LAorCVdNODQwMF9MUkJMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIEFJTkxNVVggQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI1LAorCVdNODQwMF9MUkJMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorCisvKiBST01JWCAqLworU09DX1NJTkdMRV9UTFYoIlJPTUlYIFJJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI0LAorCVdNODQwMF9SUkkzUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI0LAorCVdNODQwMF9STDEyUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBSSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI0LAorCVdNODQwMF9SUjEyUk9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJST01JWCBMSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNiwKKwlXTTg0MDBfUkxJM1JPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggQUlOTE1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjYsCisJV004NDAwX1JMQlJPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggQUlOUk1VWCBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjYsCisJV004NDAwX1JSQlJPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCisKKy8qIExPVVQgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMT1VUIFZvbHVtZSIsIFdNODQwMF9MRUZUX09VVFBVVF9WT0xVTUUsCisJV004NDAwX0xPVVRWT0xfU0hJRlQsIFdNODQwMF9MT1VUVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIkxPVVQgWkMiLCBXTTg0MDBfTEVGVF9PVVRQVVRfVk9MVU1FLCBXTTg0MDBfTE9aQ19TSElGVCwgMSwgMCksCisKKy8qIFJPVVQgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJST1VUIFZvbHVtZSIsIFdNODQwMF9SSUdIVF9PVVRQVVRfVk9MVU1FLAorCVdNODQwMF9ST1VUVk9MX1NISUZULCBXTTg0MDBfUk9VVFZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCitTT0NfU0lOR0xFKCJST1VUIFpDIiwgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUsIFdNODQwMF9ST1pDX1NISUZULCAxLCAwKSwKKworLyogTE9QR0EgKi8KK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMT1BHQSBWb2x1bWUiLCBXTTg0MDBfTEVGVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfTE9QR0FWT0xfU0hJRlQsIFdNODQwMF9MT1BHQVZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCitTT0NfU0lOR0xFKCJMT1BHQSBaQyBTd2l0Y2giLCBXTTg0MDBfTEVGVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfTE9QR0FaQ19TSElGVCwgMSwgMCksCisKKy8qIFJPUEdBICovCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUk9QR0EgVm9sdW1lIiwgV004NDAwX1JJR0hUX09QR0FfVk9MVU1FLAorCVdNODQwMF9ST1BHQVZPTF9TSElGVCwgV004NDAwX1JPUEdBVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIlJPUEdBIFpDIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfUk9QR0FaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxPTiBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9MT05NVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIkxPUCBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9MT1BNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIkxPUCBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfTE9BVFROX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIlJPTiBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9ST05NVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIlJPUCBNdXRlIFN3aXRjaCIsIFdNODQwMF9MSU5FX09VVFBVVFNfVk9MVU1FLAorCVdNODQwMF9ST1BNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIlJPUCBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfUk9BVFROX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiT1VUMyBNdXRlIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQzTVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJPVVQzIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfVk9MVU1FLAorCVdNODQwMF9PVVQzQVRUTl9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIk9VVDQgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfT1VUM180X1ZPTFVNRSwKKwlXTTg0MDBfT1VUNE1VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiT1VUNCBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfT1VUM180X1ZPTFVNRSwKKwlXTTg0MDBfT1VUNEFUVE5fU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJTcGVha2VyIE1vZGUgU3dpdGNoIiwgV004NDAwX0NMQVNTRDEsCisJV004NDAwX0NETU9ERV9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlNwZWFrZXIgT3V0cHV0IEF0dGVudWF0aW9uIFZvbHVtZSIsIFdNODQwMF9TUEVBS0VSX1ZPTFVNRSwKKwlXTTg0MDBfU1BLQVRUTl9TSElGVCwgV004NDAwX1NQS0FUVE5fTUFTSywgMCksCitTT0NfU0lOR0xFKCJTcGVha2VyIERDIEJvb3N0IFZvbHVtZSIsIFdNODQwMF9DTEFTU0QzLAorCVdNODQwMF9EQ0dBSU5fU0hJRlQsIDYsIDApLAorU09DX1NJTkdMRSgiU3BlYWtlciBBQyBCb29zdCBWb2x1bWUiLCBXTTg0MDBfQ0xBU1NEMywKKwlXTTg0MDBfQUNHQUlOX1NISUZULCA2LCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxlZnQgREFDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUsIFdNODQwMF9EQUNMX1ZPTF9TSElGVCwKKwkxMjcsIDAsIG91dF9kYWNfdGx2KSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJpZ2h0IERBQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004NDAwX0RBQ1JfVk9MX1NISUZULAorCTEyNywgMCwgb3V0X2RhY190bHYpLAorCitTT0NfRU5VTSgiTGVmdCBEaWdpdGFsIFNpZGV0b25lIiwgd204NDAwX2xlZnRfZGlnaXRhbF9zaWRldG9uZV9lbnVtKSwKK1NPQ19FTlVNKCJSaWdodCBEaWdpdGFsIFNpZGV0b25lIiwgd204NDAwX3JpZ2h0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSksCisKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IERpZ2l0YWwgU2lkZXRvbmUgVm9sdW1lIiwgV004NDAwX0RJR0lUQUxfU0lERV9UT05FLAorCVdNODQwMF9BRENMX0RBQ19TVk9MX1NISUZULCAxNSwgMCwgb3V0X3NpZGV0b25lX3RsdiksCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgRGlnaXRhbCBTaWRldG9uZSBWb2x1bWUiLCBXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJV004NDAwX0FEQ1JfREFDX1NWT0xfU0hJRlQsIDE1LCAwLCBvdXRfc2lkZXRvbmVfdGx2KSwKKworU09DX1NJTkdMRSgiQURDIERpZ2l0YWwgSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg0MDBfQURDX0NUUkwsCisJV004NDAwX0FEQ19IUEZfRU5BX1NISUZULCAxLCAwKSwKKworU09DX0VOVU0oIkFEQyBIUEYgTW9kZSIsIHdtODQwMF9yaWdodF9hZGNtb2RlX2VudW0pLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTGVmdCBBREMgRGlnaXRhbCBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0FEQ19ESUdJVEFMX1ZPTFVNRSwKKwlXTTg0MDBfQURDTF9WT0xfU0hJRlQsCisJV004NDAwX0FEQ0xfVk9MX01BU0ssCisJMCwKKwlpbl9hZGNfdGx2KSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJpZ2h0IEFEQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0FEQ19ESUdJVEFMX1ZPTFVNRSwKKwlXTTg0MDBfQURDUl9WT0xfU0hJRlQsCisJV004NDAwX0FEQ1JfVk9MX01BU0ssCisJMCwKKwlpbl9hZGNfdGx2KSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxJTjEyIFZvbHVtZSIsCisJV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9MSU4xMlZPTF9TSElGVCwKKwlXTTg0MDBfTElOMTJWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJMSU4xMiBaQyBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX0xJMTJaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxJTjEyIE11dGUgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9MSTEyTVVURV9TSElGVCwgMSwgMCksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMSU4zNCBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfTElOMzRWT0xfU0hJRlQsCisJV004NDAwX0xJTjM0Vk9MX01BU0ssCisJMCwKKwlpbl9wZ2FfdGx2KSwKKworU09DX1NJTkdMRSgiTElOMzQgWkMgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9MSTM0WkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJMSU4zNCBNdXRlIFN3aXRjaCIsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfTEkzNE1VVEVfU0hJRlQsIDEsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUklOMTIgVm9sdW1lIiwKKwlXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9SSU4xMlZPTF9TSElGVCwKKwlXTTg0MDBfUklOMTJWT0xfTUFTSywKKwkwLAorCWluX3BnYV90bHYpLAorCitTT0NfU0lOR0xFKCJSSU4xMiBaQyBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9SSTEyWkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJSSU4xMiBNdXRlIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJV004NDAwX1JJMTJNVVRFX1NISUZULCAxLCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJJTjM0IFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfUklOMzRWT0xfU0hJRlQsCisJV004NDAwX1JJTjM0Vk9MX01BU0ssCisJMCwKKwlpbl9wZ2FfdGx2KSwKKworU09DX1NJTkdMRSgiUklOMzQgWkMgU3dpdGNoIiwgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfUkkzNFpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiUklOMzQgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCVdNODQwMF9SSTM0TVVURV9TSElGVCwgMSwgMCksCisKK307CisKKy8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLworc3RhdGljIGludCB3bTg0MDBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODQwMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg0MDBfc25kX2NvbnRyb2xzKSk7Cit9CisKKy8qCisgKiBfREFQTV8gQ29udHJvbHMKKyAqLworCitzdGF0aWMgaW50IGlubWl4ZXJfZXZlbnQgKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJdTE2IHJlZywgZmFrZXBvd2VyOworCisJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIpOworCWZha2Vwb3dlciA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfSU5URFJJVkJJVFMpOworCisJaWYgKGZha2Vwb3dlciAmICgoMSA8PCBXTTg0MDBfSU5NSVhMX1BXUikgfAorCQkoMSA8PCBXTTg0MDBfQUlOTE1VWF9QV1IpKSkgeworCQlyZWcgfD0gV004NDAwX0FJTkxfRU5BOworCX0gZWxzZSB7CisJCXJlZyAmPSB+V004NDAwX0FJTkxfRU5BOworCX0KKworCWlmIChmYWtlcG93ZXIgJiAoKDEgPDwgV004NDAwX0lOTUlYUl9QV1IpIHwKKwkJKDEgPDwgV004NDAwX0FJTlJNVVhfUFdSKSkpIHsKKwkJcmVnIHw9IFdNODQwMF9BSU5SX0VOQTsKKwl9IGVsc2UgeworCQlyZWcgJj0gfldNODQwMF9BSU5MX0VOQTsKKwl9CisJd204NDAwX3dyaXRlKHctPmNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3V0bWl4ZXJfZXZlbnQgKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdTMyIHJlZ19zaGlmdCA9IG1jLT5zaGlmdDsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgcmVnOworCisJc3dpdGNoIChyZWdfc2hpZnQpIHsKKwljYXNlIFdNODQwMF9TUEVBS0VSX01JWEVSIHwgKFdNODQwMF9MRFNQSyA8PCA4KSA6CisJCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfT1VUUFVUX01JWEVSMSk7CisJCWlmIChyZWcgJiBXTTg0MDBfTERMTykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDEgTERMTyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfU1BFQUtFUl9NSVhFUiB8IChXTTg0MDBfUkRTUEsgPDwgOCk6CisJCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfT1VUUFVUX01JWEVSMik7CisJCWlmIChyZWcgJiBXTTg0MDBfUkRSTykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDIgUkRSTyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfT1VUUFVUX01JWEVSMSB8IChXTTg0MDBfTERMTyA8PCA4KToKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9TUEVBS0VSX01JWEVSKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9MRFNQSykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBMRFNQSyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfT1VUUFVUX01JWEVSMiB8IChXTTg0MDBfUkRSTyA8PCA4KToKKwkJcmVnID0gd204NDAwX3JlYWQody0+Y29kZWMsIFdNODQwMF9TUEVBS0VSX01JWEVSKTsKKwkJaWYgKHJlZyAmIFdNODQwMF9SRFNQSykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBSRFNQSyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogSU5NSVggZEIgdmFsdWVzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGluX21peF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLDcsIFRMVl9EQl9MSU5FQVJfSVRFTSgtMTIwMCwgNjAwKSwKK307CisKKy8qIExlZnQgSW4gUEdBIENvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxJTjEgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNTjFfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMSU4yIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9MTVAyX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9saW4zNF9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTElOMyBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1OM19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxJTjQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNUDRfU0hJRlQsIDEsIDApLAorfTsKKworLyogUmlnaHQgSW4gUEdBIENvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJJTjEgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNTjFfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSSU4yIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9STVAyX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yaW4zNF9wZ2FfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUklOMyBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1OM19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJJTjQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNUDRfU0hJRlQsIDEsIDApLAorfTsKKworLyogSU5NSVhMICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1faW5taXhsX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEVfVExWKCJSZWNvcmQgTGVmdCBWb2x1bWUiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLAorCVdNODQwMF9MREJWT0xfU0hJRlQsIFdNODQwMF9MREJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEVfVExWKCJMSU4yIFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjUsIFdNODQwMF9MSTJCVk9MX1NISUZULAorCTcsIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFKCJMSU5QR0ExMiBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDEyTU5CX1NISUZULAorCQkxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTElOUEdBMzQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wzNE1OQl9TSElGVCwKKwkJMSwgMCksCit9OworCisvKiBJTk1JWFIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9pbm1peHJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJlY29yZCBSaWdodCBWb2x1bWUiLCBXTTg0MDBfSU5QVVRfTUlYRVI0LAorCVdNODQwMF9SREJWT0xfU0hJRlQsIFdNODQwMF9SREJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCitTT0NfREFQTV9TSU5HTEVfVExWKCJSSU4yIFZvbHVtZSIsIFdNODQwMF9JTlBVVF9NSVhFUjYsIFdNODQwMF9SSTJCVk9MX1NISUZULAorCTcsIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFKCJSSU5QR0ExMiBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDEyTU5CX1NISUZULAorCTEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSSU5QR0EzNCBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfTDM0TU5CX1NISUZULAorCTEsIDApLAorfTsKKworLyogQUlOTE1VWCAqLworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9haW5sbXV4W10gPQorCXsiSU5NSVhMIE1peCIsICJSWFZPSUNFIE1peCIsICJESUZGSU5MIE1peCJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9haW5sbXV4X2VudW0gPQorU09DX0VOVU1fU0lOR0xFKCBXTTg0MDBfSU5QVVRfTUlYRVIxLCBXTTg0MDBfQUlOTE1PREVfU0hJRlQsCisJQVJSQVlfU0laRSh3bTg0MDBfYWlubG11eCksIHdtODQwMF9haW5sbXV4KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2FpbmxtdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg0MDBfYWlubG11eF9lbnVtKTsKKworLyogRElGRklOTCAqLworCisvKiBBSU5STVVYICovCitzdGF0aWMgY29uc3QgY2hhciAqd204NDAwX2FpbnJtdXhbXSA9CisJeyJJTk1JWFIgTWl4IiwgIlJYVk9JQ0UgTWl4IiwgIkRJRkZJTlIgTWl4In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX2FpbnJtdXhfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoIFdNODQwMF9JTlBVVF9NSVhFUjEsIFdNODQwMF9BSU5STU9ERV9TSElGVCwKKwlBUlJBWV9TSVpFKHdtODQwMF9haW5ybXV4KSwgd204NDAwX2FpbnJtdXgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fYWlucm11eF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODQwMF9haW5ybXV4X2VudW0pOworCisvKiBSWFZPSUNFICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcnh2b2ljZV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFX1RMVigiTElONC9SWE4iLCBXTTg0MDBfSU5QVVRfTUlYRVI1LCBXTTg0MDBfTFI0QlZPTF9TSElGVCwKKwkJCVdNODQwMF9MUjRCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFX1RMVigiUklONC9SWFAiLCBXTTg0MDBfSU5QVVRfTUlYRVI2LCBXTTg0MDBfUkw0QlZPTF9TSElGVCwKKwkJCVdNODQwMF9STDRCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorfTsKKworLyogTE9NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9sb21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMT01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MUkJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTExCTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTFJJM0xPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xMSTNMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xSMTJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xMMTJMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExlZnQgREFDIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MRExPX1NISUZULCAxLCAwKSwKK307CisKKy8qIFJPTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcm9taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9STEJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JSQlJPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JMSTNST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9SUkkzUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9STDEyUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9SUjEyUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBSaWdodCBEQUMgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjIsCisJV004NDAwX1JEUk9fU0hJRlQsIDEsIDApLAorfTsKKworLyogTE9OTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbG9ubWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xMT1BHQUxPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MUk9QR0FMT05fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT05NSVggSW52ZXJ0ZWQgTE9QIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTE9QTE9OX1NISUZULCAxLCAwKSwKK307CisKKy8qIExPUE1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xvcG1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMT1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xSMTJMT1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT1BNSVggTGVmdCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTEwxMkxPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xMT1BHQUxPUF9TSElGVCwgMSwgMCksCit9OworCisvKiBST05NSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9yb25taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JST1BHQVJPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JMT1BHQVJPTl9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTk1JWCBJbnZlcnRlZCBST1AgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9ST1BST05fU0hJRlQsIDEsIDApLAorfTsKKworLyogUk9QTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcm9wbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9STDEyUk9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9SUjEyUk9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjIsCisJV004NDAwX1JST1BHQVJPUF9TSElGVCwgMSwgMCksCit9OworCisvKiBPVVQzTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fb3V0M21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJPVVQzTUlYIExJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9MSTRPM19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk9VVDNNSVggTGVmdCBPdXQgUEdBIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfTUlYRVIsCisJV004NDAwX0xQR0FPM19TSElGVCwgMSwgMCksCit9OworCisvKiBPVVQ0TUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fb3V0NG1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJPVVQ0TUlYIFJpZ2h0IE91dCBQR0EgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfUlBHQU80X1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT1VUNE1JWCBSSU40L1JYUCBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfUkk0TzRfU0hJRlQsIDEsIDApLAorfTsKKworLyogU1BLTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fc3BrbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMSU4yIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfTEkyU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MQjJTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xPUEdBU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExlZnQgREFDIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MRFNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSaWdodCBEQUMgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JEU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfUk9QR0FTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUkFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JMMTJST1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUklOMiBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JJMlNQS19TSElGVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NDAwX2RhcG1fd2lkZ2V0c1tdID0geworLyogSW5wdXQgU2lkZSAqLworLyogSW5wdXQgTGluZXMgKi8KK1NORF9TT0NfREFQTV9JTlBVVCgiTElOMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4yIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTjMiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElONC9SWE4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklOMyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU40L1JYUCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4xIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSW50ZXJuYWwgQURDIFNvdXJjZSIpLAorCisvKiBEQUNzICovCitTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IENhcHR1cmUiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCVdNODQwMF9BRENMX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgQ2FwdHVyZSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJV004NDAwX0FEQ1JfRU5BX1NISUZULCAwKSwKKworLyogSW5wdXQgUEdBcyAqLworU05EX1NPQ19EQVBNX01JWEVSKCJMSU4xMiBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfTElOMTJfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xpbjEyX3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJMSU4zNCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfTElOMzRfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbGluMzRfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xpbjM0X3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJSSU4xMiBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfUklOMTJfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JpbjEyX3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJSSU4zNCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkgICBXTTg0MDBfUklOMzRfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JpbjM0X3BnYV9jb250cm9scykpLAorCisvKiBJTk1JWEwgKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJJTk1JWEwiLCBXTTg0MDBfSU5URFJJVkJJVFMsIFdNODQwMF9JTk1JWExfUFdSLCAwLAorCSZ3bTg0MDBfZGFwbV9pbm1peGxfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9pbm1peGxfY29udHJvbHMpLAorCWlubWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKy8qIEFJTkxNVVggKi8KK1NORF9TT0NfREFQTV9NVVhfRSgiQUlMTk1VWCIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0FJTkxNVVhfUFdSLCAwLAorCSZ3bTg0MDBfZGFwbV9haW5sbXV4X2NvbnRyb2xzLCBpbm1peGVyX2V2ZW50LAorCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKy8qIElOTUlYUiAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIklOTUlYUiIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0lOTUlYUl9QV1IsIDAsCisJJndtODQwMF9kYXBtX2lubWl4cl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2lubWl4cl9jb250cm9scyksCisJaW5taXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogQUlOUk1VWCAqLworU05EX1NPQ19EQVBNX01VWF9FKCJBSVJOTVVYIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfQUlOUk1VWF9QV1IsIDAsCisJJndtODQwMF9kYXBtX2FpbnJtdXhfY29udHJvbHMsIGlubWl4ZXJfZXZlbnQsCisJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworLyogT3V0cHV0IFNpZGUgKi8KKy8qIERBQ3MgKi8KK1NORF9TT0NfREFQTV9EQUMoIkxlZnQgREFDIiwgIkxlZnQgUGxheWJhY2siLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCVdNODQwMF9EQUNMX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fREFDKCJSaWdodCBEQUMiLCAiUmlnaHQgUGxheWJhY2siLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCVdNODQwMF9EQUNSX0VOQV9TSElGVCwgMCksCisKKy8qIExPTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiTE9NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCQkgICAgIFdNODQwMF9MT01JWF9FTkFfU0hJRlQsCisJCSAgICAgMCwgJndtODQwMF9kYXBtX2xvbWl4X2NvbnRyb2xzWzBdLAorCQkgICAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbG9taXhfY29udHJvbHMpLAorCQkgICAgIG91dG1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1JFRyksCisKKy8qIExPTk1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJMT05NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfTE9OX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX2xvbm1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9sb25taXhfY29udHJvbHMpKSwKKworLyogTE9QTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxPUE1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9MT1BfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fbG9wbWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xvcG1peF9jb250cm9scykpLAorCisvKiBPVVQzTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDNNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfT1VUM19FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9vdXQzbWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX291dDNtaXhfY29udHJvbHMpKSwKKworLyogU1BLTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiU1BLTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX1NQS19FTkFfU0hJRlQsCisJCSAgICAgMCwgJndtODQwMF9kYXBtX3Nwa21peF9jb250cm9sc1swXSwKKwkJICAgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3Nwa21peF9jb250cm9scyksIG91dG1peGVyX2V2ZW50LAorCQkgICAgIFNORF9TT0NfREFQTV9QUkVfUkVHKSwKKworLyogT1VUNE1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJPVVQ0TUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX09VVDRfRU5BX1NISUZULAorCTAsICZ3bTg0MDBfZGFwbV9vdXQ0bWl4X2NvbnRyb2xzWzBdLAorCUFSUkFZX1NJWkUod204NDAwX2RhcG1fb3V0NG1peF9jb250cm9scykpLAorCisvKiBST1BNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiUk9QTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX1JPUF9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yb3BtaXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcm9wbWl4X2NvbnRyb2xzKSksCisKKy8qIFJPTk1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJST05NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfUk9OX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX3Jvbm1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yb25taXhfY29udHJvbHMpKSwKKworLyogUk9NSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJST01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCSAgICAgV004NDAwX1JPTUlYX0VOQV9TSElGVCwKKwkJICAgICAwLCAmd204NDAwX2RhcG1fcm9taXhfY29udHJvbHNbMF0sCisJCSAgICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yb21peF9jb250cm9scyksCisJCSAgICAgb3V0bWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUkVHKSwKKworLyogTE9VVCBQR0EgKi8KK1NORF9TT0NfREFQTV9QR0EoIkxPVVQgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX0xPVVRfRU5BX1NISUZULAorCQkgMCwgTlVMTCwgMCksCisKKy8qIFJPVVQgUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJST1VUIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9ST1VUX0VOQV9TSElGVCwKKwkJIDAsIE5VTEwsIDApLAorCisvKiBMT1BHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiTE9QR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfTE9QR0FfRU5BX1NISUZULCAwLAorCU5VTEwsIDApLAorCisvKiBST1BHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiUk9QR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfUk9QR0FfRU5BX1NISUZULCAwLAorCU5VTEwsIDApLAorCisvKiBNSUNCSUFTICovCitTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQklBUyIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJV004NDAwX01JQzFCSUFTX0VOQV9TSElGVCwgMCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPTiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTE9QIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQzIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtOIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtQIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQ0IiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1AiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPTiIpLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJJbnRlcm5hbCBEQUMgU2luayIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogTWFrZSBEQUNzIHR1cm4gb24gd2hlbiBwbGF5aW5nIGV2ZW4gaWYgbm90IG1peGVkIGludG8gYW55IG91dHB1dHMgKi8KKwl7IkludGVybmFsIERBQyBTaW5rIiwgTlVMTCwgIkxlZnQgREFDIn0sCisJeyJJbnRlcm5hbCBEQUMgU2luayIsIE5VTEwsICJSaWdodCBEQUMifSwKKworCS8qIE1ha2UgQURDcyB0dXJuIG9uIHdoZW4gcmVjb3JkaW5nCisJICogZXZlbiBpZiBub3QgbWl4ZWQgZnJvbSBhbnkgaW5wdXRzICovCisJeyJMZWZ0IEFEQyIsIE5VTEwsICJJbnRlcm5hbCBBREMgU291cmNlIn0sCisJeyJSaWdodCBBREMiLCBOVUxMLCAiSW50ZXJuYWwgQURDIFNvdXJjZSJ9LAorCisJLyogSW5wdXQgU2lkZSAqLworCS8qIExJTjEyIFBHQSAqLworCXsiTElOMTIgUEdBIiwgIkxJTjEgU3dpdGNoIiwgIkxJTjEifSwKKwl7IkxJTjEyIFBHQSIsICJMSU4yIFN3aXRjaCIsICJMSU4yIn0sCisJLyogTElOMzQgUEdBICovCisJeyJMSU4zNCBQR0EiLCAiTElOMyBTd2l0Y2giLCAiTElOMyJ9LAorCXsiTElOMzQgUEdBIiwgIkxJTjQgU3dpdGNoIiwgIkxJTjQvUlhOIn0sCisJLyogSU5NSVhMICovCisJeyJJTk1JWEwiLCAiUmVjb3JkIExlZnQgVm9sdW1lIiwgIkxPTUlYIn0sCisJeyJJTk1JWEwiLCAiTElOMiBWb2x1bWUiLCAiTElOMiJ9LAorCXsiSU5NSVhMIiwgIkxJTlBHQTEyIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IklOTUlYTCIsICJMSU5QR0EzNCBTd2l0Y2giLCAiTElOMzQgUEdBIn0sCisJLyogQUlMTk1VWCAqLworCXsiQUlMTk1VWCIsICJJTk1JWEwgTWl4IiwgIklOTUlYTCJ9LAorCXsiQUlMTk1VWCIsICJESUZGSU5MIE1peCIsICJMSU4xMiBQR0EifSwKKwl7IkFJTE5NVVgiLCAiRElGRklOTCBNaXgiLCAiTElOMzQgUEdBIn0sCisJeyJBSUxOTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIkxJTjQvUlhOIn0sCisJeyJBSUxOTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIlJJTjQvUlhQIn0sCisJLyogQURDICovCisJeyJMZWZ0IEFEQyIsIE5VTEwsICJBSUxOTVVYIn0sCisKKwkvKiBSSU4xMiBQR0EgKi8KKwl7IlJJTjEyIFBHQSIsICJSSU4xIFN3aXRjaCIsICJSSU4xIn0sCisJeyJSSU4xMiBQR0EiLCAiUklOMiBTd2l0Y2giLCAiUklOMiJ9LAorCS8qIFJJTjM0IFBHQSAqLworCXsiUklOMzQgUEdBIiwgIlJJTjMgU3dpdGNoIiwgIlJJTjMifSwKKwl7IlJJTjM0IFBHQSIsICJSSU40IFN3aXRjaCIsICJSSU40L1JYUCJ9LAorCS8qIElOTUlYTCAqLworCXsiSU5NSVhSIiwgIlJlY29yZCBSaWdodCBWb2x1bWUiLCAiUk9NSVgifSwKKwl7IklOTUlYUiIsICJSSU4yIFZvbHVtZSIsICJSSU4yIn0sCisJeyJJTk1JWFIiLCAiUklOUEdBMTIgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiSU5NSVhSIiwgIlJJTlBHQTM0IFN3aXRjaCIsICJSSU4zNCBQR0EifSwKKwkvKiBBSVJOTVVYICovCisJeyJBSVJOTVVYIiwgIklOTUlYUiBNaXgiLCAiSU5NSVhSIn0sCisJeyJBSVJOTVVYIiwgIkRJRkZJTlIgTWl4IiwgIlJJTjEyIFBHQSJ9LAorCXsiQUlSTk1VWCIsICJESUZGSU5SIE1peCIsICJSSU4zNCBQR0EifSwKKwl7IkFJUk5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiTElONC9SWE4ifSwKKwl7IkFJUk5NVVgiLCAiUlhWT0lDRSBNaXgiLCAiUklONC9SWFAifSwKKwkvKiBBREMgKi8KKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJBSVJOTVVYIn0sCisKKwkvKiBMT01JWCAqLworCXsiTE9NSVgiLCAiTE9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgIlJJTjMifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExJTjMgQnlwYXNzIFN3aXRjaCIsICJMSU4zIn0sCisJeyJMT01JWCIsICJMT01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IkxPTUlYIiwgIkxPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiTE9NSVgiLCAiTE9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlSTk1VWCJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSUxOTVVYIn0sCisJeyJMT01JWCIsICJMT01JWCBMZWZ0IERBQyBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKworCS8qIFJPTUlYICovCisJeyJST01JWCIsICJST01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCAiUklOMyJ9LAorCXsiUk9NSVgiLCAiUk9NSVggTElOMyBCeXBhc3MgU3dpdGNoIiwgIkxJTjMifSwKKwl7IlJPTUlYIiwgIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiUk9NSVgiLCAiUk9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJST01JWCIsICJST01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSVJOTVVYIn0sCisJeyJST01JWCIsICJST01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTE5NVVgifSwKKwl7IlJPTUlYIiwgIlJPTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisKKwkvKiBTUEtNSVggKi8KKwl7IlNQS01JWCIsICJTUEtNSVggTElOMiBCeXBhc3MgU3dpdGNoIiwgIkxJTjIifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUklOMiBCeXBhc3MgU3dpdGNoIiwgIlJJTjIifSwKKwl7IlNQS01JWCIsICJTUEtNSVggTEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTE5NVVgifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUkFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJUk5NVVgifSwKKwl7IlNQS01JWCIsICJTUEtNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7IlNQS01JWCIsICJTUEtNSVggUmlnaHQgREFDIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKwl7IlNQS01JWCIsICJTUEtNSVggTGVmdCBEQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCisJLyogTE9OTUlYICovCisJeyJMT05NSVgiLCAiTE9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCXsiTE9OTUlYIiwgIkxPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJMT05NSVgiLCAiTE9OTUlYIEludmVydGVkIExPUCBTd2l0Y2giLCAiTE9QTUlYIn0sCisKKwkvKiBMT1BNSVggKi8KKwl7IkxPUE1JWCIsICJMT1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJMT1BNSVgiLCAiTE9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJMT1BNSVgiLCAiTE9QTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCisJLyogT1VUM01JWCAqLworCXsiT1VUM01JWCIsICJPVVQzTUlYIExJTjQvUlhQIEJ5cGFzcyBTd2l0Y2giLCAiTElONC9SWE4ifSwKKwl7Ik9VVDNNSVgiLCAiT1VUM01JWCBMZWZ0IE91dCBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisKKwkvKiBPVVQ0TUlYICovCisJeyJPVVQ0TUlYIiwgIk9VVDRNSVggUmlnaHQgT3V0IFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7Ik9VVDRNSVgiLCAiT1VUNE1JWCBSSU40L1JYUCBCeXBhc3MgU3dpdGNoIiwgIlJJTjQvUlhQIn0sCisKKwkvKiBST05NSVggKi8KKwl7IlJPTk1JWCIsICJST05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiUk9OTUlYIiwgIlJPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IlJPTk1JWCIsICJST05NSVggSW52ZXJ0ZWQgUk9QIFN3aXRjaCIsICJST1BNSVgifSwKKworCS8qIFJPUE1JWCAqLworCXsiUk9QTUlYIiwgIlJPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiUk9QTUlYIiwgIlJPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IlJPUE1JWCIsICJST1BNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCisJLyogT3V0IE1peGVyIFBHQXMgKi8KKwl7IkxPUEdBIiwgTlVMTCwgIkxPTUlYIn0sCisJeyJST1BHQSIsIE5VTEwsICJST01JWCJ9LAorCisJeyJMT1VUIFBHQSIsIE5VTEwsICJMT01JWCJ9LAorCXsiUk9VVCBQR0EiLCBOVUxMLCAiUk9NSVgifSwKKworCS8qIE91dHB1dCBQaW5zICovCisJeyJMT04iLCBOVUxMLCAiTE9OTUlYIn0sCisJeyJMT1AiLCBOVUxMLCAiTE9QTUlYIn0sCisJeyJPVVQzIiwgTlVMTCwgIk9VVDNNSVgifSwKKwl7IkxPVVQiLCBOVUxMLCAiTE9VVCBQR0EifSwKKwl7IlNQS04iLCBOVUxMLCAiU1BLTUlYIn0sCisJeyJST1VUIiwgTlVMTCwgIlJPVVQgUEdBIn0sCisJeyJPVVQ0IiwgTlVMTCwgIk9VVDRNSVgifSwKKwl7IlJPUCIsIE5VTEwsICJST1BNSVgifSwKKwl7IlJPTiIsIE5VTEwsICJST05NSVgifSwKK307CisKK3N0YXRpYyBpbnQgd204NDAwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg0MDBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsb2NrIGFmdGVyIEZMTCBhbmQgZGl2aWRlcnMKKyAqLworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJd204NDAwLT5zeXNjbGsgPSBmcmVxOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZmxsX2ZhY3RvcnMgeworCXUxNiBuOworCXUxNiBrOworCXUxNiBvdXRkaXY7CisJdTE2IGZyYXRpbzsKKwl1MTYgZnJlcV9yZWY7Cit9OworCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAxNikgKiAxMCkKKworc3RhdGljIGludCBmbGxfZmFjdG9ycyhzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCwgc3RydWN0IGZsbF9mYWN0b3JzICpmYWN0b3JzLAorCQkgICAgICAgdW5zaWduZWQgaW50IEZyZWYsIHVuc2lnbmVkIGludCBGb3V0KQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTm1vZCwgdGFyZ2V0OworCisJZmFjdG9ycy0+b3V0ZGl2ID0gMjsKKwl3aGlsZSAoRm91dCAqIGZhY3RvcnMtPm91dGRpdiA8ICA5MDAwMDAwMCB8fAorCSAgICAgICBGb3V0ICogZmFjdG9ycy0+b3V0ZGl2ID4gMTAwMDAwMDAwKSB7CisJCWZhY3RvcnMtPm91dGRpdiAqPSAyOworCQlpZiAoZmFjdG9ycy0+b3V0ZGl2ID4gMzIpIHsKKwkJCWRldl9lcnIod204NDAwLT53bTg0MDAtPmRldiwKKwkJCQkiVW5zdXBwb3J0ZWQgRkxMIG91dHB1dCBmcmVxdWVuY3kgJWRIelxuIiwKKwkJCQlGb3V0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRhcmdldCA9IEZvdXQgKiBmYWN0b3JzLT5vdXRkaXY7CisJZmFjdG9ycy0+b3V0ZGl2ID0gZmFjdG9ycy0+b3V0ZGl2ID4+IDI7CisKKwlpZiAoRnJlZiA8IDQ4MDAwKQorCQlmYWN0b3JzLT5mcmVxX3JlZiA9IDE7CisJZWxzZQorCQlmYWN0b3JzLT5mcmVxX3JlZiA9IDA7CisKKwlpZiAoRnJlZiA8IDEwMDAwMDApCisJCWZhY3RvcnMtPmZyYXRpbyA9IDk7CisJZWxzZQorCQlmYWN0b3JzLT5mcmF0aW8gPSAwOworCisJLyogRW5zdXJlIHdlIGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQgKi8KKwlkbyB7CisJCWlmIChGcmVmIDwgMTAwMDAwMCkKKwkJCWZhY3RvcnMtPmZyYXRpby0tOworCQllbHNlCisJCQlmYWN0b3JzLT5mcmF0aW8rKzsKKworCQlpZiAoZmFjdG9ycy0+ZnJhdGlvIDwgMSB8fCBmYWN0b3JzLT5mcmF0aW8gPiA4KSB7CisJCQlkZXZfZXJyKHdtODQwMC0+d204NDAwLT5kZXYsCisJCQkJIlVuYWJsZSB0byBjYWxjdWxhdGUgRlJBVElPXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZmFjdG9ycy0+biA9IHRhcmdldCAvIChGcmVmICogZmFjdG9ycy0+ZnJhdGlvKTsKKwkJTm1vZCA9IHRhcmdldCAlIChGcmVmICogZmFjdG9ycy0+ZnJhdGlvKTsKKwl9IHdoaWxlIChObW9kID09IDApOworCisJLyogQ2FsY3VsYXRlIGZyYWN0aW9uYWwgcGFydCAtIHNjYWxlIHVwIHNvIHdlIGNhbiByb3VuZC4gKi8KKwlLcGFydCA9IEZJWEVEX0ZMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCAoRnJlZiAqIGZhY3RvcnMtPmZyYXRpbykpOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCWlmICgoSyAlIDEwKSA+PSA1KQorCQlLICs9IDU7CisKKwkvKiBNb3ZlIGRvd24gdG8gcHJvcGVyIHJhbmdlIG5vdyByb3VuZGluZyBpcyBkb25lICovCisJZmFjdG9ycy0+ayA9IEsgLyAxMDsKKworCWRldl9kYmcod204NDAwLT53bTg0MDAtPmRldiwKKwkJIkZMTDogRnJlZj0lZCBGb3V0PSVkIE49JXggSz0leCwgRlJBVElPPSV4IE9VVERJVj0leFxuIiwKKwkJRnJlZiwgRm91dCwKKwkJZmFjdG9ycy0+biwgZmFjdG9ycy0+aywgZmFjdG9ycy0+ZnJhdGlvLCBmYWN0b3JzLT5vdXRkaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3NldF9kYWlfcGxsKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgcGxsX2lkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmxsX2ZhY3RvcnMgZmFjdG9yczsKKwlpbnQgcmV0OworCXUxNiByZWc7CisKKwlpZiAoZnJlcV9pbiA9PSB3bTg0MDAtPmZsbF9pbiAmJiBmcmVxX291dCA9PSB3bTg0MDAtPmZsbF9vdXQpCisJCXJldHVybiAwOworCisJaWYgKGZyZXFfb3V0ICE9IDApIHsKKwkJcmV0ID0gZmxsX2ZhY3RvcnMod204NDAwLCAmZmFjdG9ycywgZnJlcV9pbiwgZnJlcV9vdXQpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXdtODQwMC0+ZmxsX291dCA9IGZyZXFfb3V0OworCXdtODQwMC0+ZmxsX2luID0gZnJlcV9pbjsKKworCS8qIFdlICptdXN0KiBkaXNhYmxlIHRoZSBGTEwgYmVmb3JlIGFueSBjaGFuZ2VzICovCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzIpOworCXJlZyAmPSB+V004NDAwX0ZMTF9FTkE7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLCByZWcpOworCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8xKTsKKwlyZWcgJj0gfldNODQwMF9GTExfT1NDX0VOQTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8xLCByZWcpOworCisJaWYgKGZyZXFfb3V0ID09IDApCisJCXJldHVybiAwOworCisJcmVnICY9IH4oV004NDAwX0ZMTF9SRUZfRlJFUSB8IFdNODQwMF9GTExfRlJBVElPX01BU0spOworCXJlZyB8PSBXTTg0MDBfRkxMX0ZSQUMgfCBmYWN0b3JzLmZyYXRpbzsKKwlyZWcgfD0gZmFjdG9ycy5mcmVxX3JlZiA8PCBXTTg0MDBfRkxMX1JFRl9GUkVRX1NISUZUOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEsIHJlZyk7CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8yLCBmYWN0b3JzLmspOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzMsIGZhY3RvcnMubik7CisKKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzQpOworCXJlZyAmPSBXTTg0MDBfRkxMX09VVERJVl9NQVNLOworCXJlZyB8PSBmYWN0b3JzLm91dGRpdjsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF80LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXRzIEFEQyBhbmQgVm9pY2UgREFDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg0MDBfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgYXVkaW8xLCBhdWRpbzM7CisKKwlhdWRpbzEgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xKTsKKwlhdWRpbzMgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8zKTsKKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYXVkaW8zICY9IH5XTTg0MDBfQUlGX01TVFIxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWF1ZGlvMyB8PSBXTTg0MDBfQUlGX01TVFIxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhdWRpbzEgJj0gfldNODQwMF9BSUZfRk1UX01BU0s7CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfSTJTOworCQlhdWRpbzEgJj0gfldNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9SSUdIVEo7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfTEVGVEo7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9EU1A7CisJCWF1ZGlvMSAmPSB+V004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX0ZNVF9EU1AgfCBXTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEsIGF1ZGlvMSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzMsIGF1ZGlvMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IHJlZzsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBXTTg0MDBfTUNMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMikgJgorCQkJfldNODQwMF9NQ0xLX0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODQwMF9EQUNDTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzIpICYKKwkJCX5XTTg0MDBfREFDX0NMS0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODQwMF9BRENDTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzIpICYKKwkJCX5XTTg0MDBfQURDX0NMS0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODQwMF9CQ0xLX0RJVjoKKwkJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9DTE9DS0lOR18xKSAmCisJCQl+V004NDAwX0JDTEtfRElWX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0NMT0NLSU5HXzEsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFBDTSBEQUkgYml0IHNpemUgYW5kIHNhbXBsZSByYXRlLgorICovCitzdGF0aWMgaW50IHdtODQwMF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwl1MTYgYXVkaW8xID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMSk7CisKKwlhdWRpbzEgJj0gfldNODQwMF9BSUZfV0xfTUFTSzsKKwkvKiBiaXQgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX1dMXzIwQklUUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfV0xfMjRCSVRTOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9XTF8zMkJJVFM7CisJCWJyZWFrOworCX0KKworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xLCBhdWRpbzEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiB2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0RBQ19DVFJMKSAmIH5XTTg0MDBfREFDX01VVEU7CisKKwlpZiAobXV0ZSkKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwsIHZhbCB8IFdNODQwMF9EQUNfTVVURSk7CisJZWxzZQorCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCwgdmFsKTsKKworCXJldHVybiAwOworfQorCisvKiBUT0RPOiBzZXQgYmlhcyBmb3IgYmVzdCBwZXJmb3JtYW5jZSBhdCBzdGFuZGJ5ICovCitzdGF0aWMgaW50IHdtODQwMF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgdmFsOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRD0yKjUwayAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSkgJgorCQkJfldNODQwMF9WTUlEX01PREVfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDIpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShwb3dlciksCisJCQkJCQkgICAgJnBvd2VyWzBdKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIod204NDAwLT53bTg0MDAtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yczogJWRcbiIsCisJCQkJCXJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICAgV004NDAwX0NPREVDX0VOQSB8IFdNODQwMF9TWVNDTEtfRU5BKTsKKworCQkJLyogRW5hYmxlIFBPQkNUUkwsIFNPRlRfU1QsIFZNSURUT0cgYW5kIEJVRkRDT1BFTiAqLworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJCSAgICAgV004NDAwX0JVRkRDT1BFTiB8IFdNODQwMF9QT0JDVFJMKTsKKworCQkJbXNsZWVwKDUwKTsKKworCQkJLyogRW5hYmxlIFZSRUYgJiBWTUlEIGF0IDJ4NTBrICovCisJCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSk7CisJCQl2YWwgfD0gMHgyIHwgV004NDAwX1ZSRUZfRU5BOworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCQkvKiBFbmFibGUgQlVGSU9FTiAqLworCQkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJCSAgICAgV004NDAwX0JVRkRDT1BFTiB8IFdNODQwMF9QT0JDVFJMIHwKKwkJCQkgICAgIFdNODQwMF9CVUZJT0VOKTsKKworCQkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfQlVGSU9FTik7CisJCX0KKworCQkvKiBWTUlEPTIqMzAwayAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSkgJgorCQkJfldNODQwMF9WTUlEX01PREVfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDQpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogRW5hYmxlIFBPQkNUUkwgYW5kIFNPRlRfU1QgKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJV004NDAwX1BPQkNUUkwgfCBXTTg0MDBfQlVGSU9FTik7CisKKwkJLyogRW5hYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX1NPRlRTVCB8CisJCQlXTTg0MDBfQlVGRENPUEVOIHwgV004NDAwX1BPQkNUUkwgfAorCQkJV004NDAwX0JVRklPRU4pOworCisJCS8qIG11dGUgREFDICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwpOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCwgdmFsIHwgV004NDAwX0RBQ19NVVRFKTsKKworCQkvKiBFbmFibGUgYW55IGRpc2FibGVkIG91dHB1dHMgKi8KKwkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCQl2YWwgfD0gV004NDAwX1NQS19FTkEgfCBXTTg0MDBfT1VUM19FTkEgfAorCQkJV004NDAwX09VVDRfRU5BIHwgV004NDAwX0xPVVRfRU5BIHwKKwkJCVdNODQwMF9ST1VUX0VOQTsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCS8qIERpc2FibGUgVk1JRCAqLworCQl2YWwgJj0gfldNODQwMF9WTUlEX01PREVfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCW1zbGVlcCgzMDApOworCisJCS8qIEVuYWJsZSBhbGwgb3V0cHV0IGRpc2NoYXJnZSBiaXRzICovCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AxLCBXTTg0MDBfRElTX0xMSU5FIHwKKwkJCVdNODQwMF9ESVNfUkxJTkUgfCBXTTg0MDBfRElTX09VVDMgfAorCQkJV004NDAwX0RJU19PVVQ0IHwgV004NDAwX0RJU19MT1VUIHwKKwkJCVdNODQwMF9ESVNfUk9VVCk7CisKKwkJLyogRGlzYWJsZSBWUkVGICovCisJCXZhbCAmPSB+V004NDAwX1ZSRUZfRU5BOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHZhbCk7CisKKwkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIDB4MCk7CisKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHBvd2VyKSwKKwkJCQkJICAgICAmcG93ZXJbMF0pOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJyZWFrOworCX0KKworCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004NDAwX1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg0MDBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NDAwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHdtODQwMF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IHdtODQwMF9tdXRlLAorCS5zZXRfZm10ID0gd204NDAwX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2ID0gd204NDAwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfc3lzY2xrID0gd204NDAwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfcGxsID0gd204NDAwX3NldF9kYWlfcGxsLAorfTsKKworLyoKKyAqIFRoZSBXTTg0MDAgc3VwcG9ydHMgMiBkaWZmZXJlbnQgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSBEQUkKKyAqIGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIDEuIEFEQy9EQUMgb24gUHJpbWFyeSBJbnRlcmZhY2UKKyAqIDIuIEFEQyBvbiBQcmltYXJ5IEludGVyZmFjZS9EQUMgb24gc2Vjb25kYXJ5CisgKi8KK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg0MDBfZGFpID0geworLyogQURDL0RBQyBvbiBwcmltYXJ5ICovCisJLm5hbWUgPSAiV004NDAwIEFEQy9EQUMgUHJpbWFyeSIsCisJLmlkID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NDAwX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODQwMF9GT1JNQVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg0MDBfUkFURVMsCisJCS5mb3JtYXRzID0gV004NDAwX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJndtODQwMF9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODQwMF9kYWkpOworCitzdGF0aWMgaW50IHdtODQwMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NDAwX2NvZGVjOworCitzdGF0aWMgaW50IHdtODQwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAoIXdtODQwMF9jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ3bTg0MDAgbm90IHlldCBkaXNjb3ZlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNvZGVjID0gd204NDAwX2NvZGVjOworCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXdtODQwMF9hZGRfY29udHJvbHMoY29kZWMpOworCXdtODQwMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBjYXJkX2VycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg0MDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg0MDAgPSB7CisJLnByb2JlID0Jd204NDAwX3Byb2JlLAorCS5yZW1vdmUgPQl3bTg0MDBfcmVtb3ZlLAorCS5zdXNwZW5kID0Jd204NDAwX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODQwMF9yZXN1bWUsCit9OworCitzdGF0aWMgdm9pZCB3bTg0MDBfcHJvYmVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd204NDAwX3ByaXYsCisJCQkJCQl3b3JrKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmcHJpdi0+Y29kZWM7CisJaW50IHJldDsKKworCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLworCXdtODQwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogV2UncmUgZG9uZSwgdGVsbCB0aGUgc3Vic3lzdGVtLiAqLworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHByaXYtPndtODQwMC0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg0MDBfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihwcml2LT53bTg0MDAtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwl3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworfQorCitzdGF0aWMgaW50IHdtODQwMF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICpwcml2OworCWludCByZXQ7CisJdTE2IHJlZzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODQwMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZwcml2LT5jb2RlYzsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisJcHJpdi0+d204NDAwID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQocHJpdi0+d204NDAwLT5kZXYsCisJCQkJIEFSUkFZX1NJWkUocG93ZXIpLCAmcG93ZXJbMF0pOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcmVndWxhdG9yczogJWRcbiIsIHJldCk7CisJICAgICAgICBnb3RvIGVycjsKKwl9CisKKwljb2RlYy0+ZGV2ID0gJmRldi0+ZGV2OworCXdtODQwMF9kYWkuZGV2ID0gJmRldi0+ZGV2OworCisJY29kZWMtPm5hbWUgPSAiV004NDAwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODQwMF9yZWFkOworCWNvZGVjLT53cml0ZSA9IHdtODQwMF93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NDAwX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204NDAwX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004NDAwX1JFR0lTVEVSX0NPVU5UOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrLCB3bTg0MDBfcHJvYmVfZGVmZXJyZWQpOworCisJd204NDAwX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIHJlZyB8IFdNODQwMF9DT0RFQ19FTkEpOworCisJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZSBiaXRzICovCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCSAgICAgcmVnICYgV004NDAwX0lQVlUpOworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCSAgICAgcmVnICYgV004NDAwX0lQVlUpOworCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfTEVGVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9SSUdIVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKKworCXdtODQwMF9jb2RlYyA9IGNvZGVjOworCisJaWYgKCFzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9yZWd1bGF0b3I7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZWd1bGF0b3I6CisJd204NDAwX2NvZGVjID0gTlVMTDsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUocG93ZXIpLCBwb3dlcik7CitlcnI6CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgd204NDAwX2NvZGVjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICpwcml2ID0gd204NDAwX2NvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2IHJlZzsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODQwMF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyh3bTg0MDBfY29kZWMpOworCisJcmVnID0gd204NDAwX3JlYWQod204NDAwX2NvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwl3bTg0MDBfd3JpdGUod204NDAwX2NvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkgICAgIHJlZyAmICh+V004NDAwX0NPREVDX0VOQSkpOworCisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHBvd2VyKSwgcG93ZXIpOworCWtmcmVlKHByaXYpOworCisJd204NDAwX2NvZGVjID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg0MDBfY29kZWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODQwMC1jb2RlYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gd204NDAwX2NvZGVjX3Byb2JlLAorCS5yZW1vdmUJPSBfX2V4aXRfcCh3bTg0MDBfY29kZWNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODQwMF9jb2RlY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204NDAwX2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTg0MDBfY29kZWNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg0MDBfY29kZWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg0MDBfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODQwMF9jb2RlY19leGl0KTsKKworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg0MDApOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004NDAwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTg0MDAtY29kZWMiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YzU5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiB3bTg0MDAuaCAgLS0gIGF1ZGlvIGRyaXZlciBmb3IgV004NDAwCisgKgorICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX1dNODQwMF9DT0RFQ19ICisjZGVmaW5lIF9XTTg0MDBfQ09ERUNfSAorCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJViAwCisjZGVmaW5lIFdNODQwMF9EQUNDTEtfRElWIDEKKyNkZWZpbmUgV004NDAwX0FEQ0NMS19ESVYgMgorI2RlZmluZSBXTTg0MDBfQkNMS19ESVYgMworCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJVl8xIDB4NDAwCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJVl8yIDB4ODAwCisKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMSAgICAweDAwCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzFfNSAgMHgwNAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8yICAgIDB4MDgKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMyAgICAweDBjCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzQgICAgMHgxMAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl81XzUgIDB4MTQKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfNiAgICAweDE4CisKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMSAgICAweDAwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzFfNSAgMHgyMAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8yICAgIDB4NDAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMyAgICAweDYwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzQgICAgMHg4MAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl81XzUgIDB4YTAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfNiAgICAweGMwCisKKworI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMSAgICAgICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMV81ICAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMiAgICAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMyAgICAgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNCAgICAgICAgICAgICAgICAgICAgICAgKDB4NCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNV81ICAgICAgICAgICAgICAgICAgICAgKDB4NSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNiAgICAgICAgICAgICAgICAgICAgICAgKDB4NiA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfOCAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMTEgICAgICAgICAgICAgICAgICAgICAgKDB4OCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMTIgICAgICAgICAgICAgICAgICAgICAgKDB4OSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMTYgICAgICAgICAgICAgICAgICAgICAgKDB4QSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMjIgICAgICAgICAgICAgICAgICAgICAgKDB4QiA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMjQgICAgICAgICAgICAgICAgICAgICAgKDB4QyA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfMzIgICAgICAgICAgICAgICAgICAgICAgKDB4RCA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNDQgICAgICAgICAgICAgICAgICAgICAgKDB4RSA8PCAxKQorI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfNDggICAgICAgICAgICAgICAgICAgICAgKDB4RiA8PCAxKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODQwMF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NDAwOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCmluZGV4IDQwZjgyMzhkLi42YTRjZWEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKQEAgLTE3MSwyMiArMTcxLDYgQEAKIFNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgV004NTEwX01PTk9NSVgsIDYsIDEsIDEpLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODUxMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1MTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204NTEwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsCi0JCQkJCU5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBTcGVha2VyIE91dHB1dCBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODUxMF9zcGVha2VyX21peGVyX2NvbnRyb2xzW10gPSB7CiBTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODUxMF9TUEtNSVgsIDEsIDEsIDApLApAQCAtMzUyLDcgKzMzNiw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjgsIGZyZXFfaW4pOworCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjQsIGZyZXFfaW4pOwogCiAJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMTiwgKHBsbF9kaXYucHJlX2RpdiA8PCA0KSB8IHBsbF9kaXYubik7CiAJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMSzEsIHBsbF9kaXYuayA+PiAxOCk7CkBAIC0zODMsNyArMzY3LDcgQEAKIAkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfR1BJTywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg1MTBfTUNMS0RJVjoKLQkJcmVnID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQ0xPQ0spICYgMHgxZjsKKwkJcmVnID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQ0xPQ0spICYgMHgxMWY7CiAJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0NMT0NLLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODUxMF9BRENDTEs6CkBAIC00NjgsNyArNDUyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGlmYWNlID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfSUZBQ0UpICYgMHgxOWY7CiAJdTE2IGFkbiA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0FERCkgJiAweDFmMTsKIApAQCAtNTcwLDYgKzU1NCwxNCBAQAogI2RlZmluZSBXTTg1MTBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg1MTBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204NTEwX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODUxMF9tdXRlLAorCS5zZXRfZm10CT0gd204NTEwX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NTEwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NTEwX3NldF9kYWlfcGxsLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODUxMF9kYWkgPSB7CiAJLm5hbWUgPSAiV004NTEwIEhpRmkiLAogCS5wbGF5YmFjayA9IHsKQEAgLTU4NCwyMCArNTc2LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg1MTBfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NTEwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NTEwX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg1MTBfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg1MTBfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NTEwX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODUxMF9zZXRfZGFpX3BsbCwKLQl9LAorCS5vcHMgPSAmd204NTEwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NTEwX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204NTEwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTYwNiw3ICs1OTIsNyBAQAogc3RhdGljIGludCB3bTg1MTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTYyOCw3ICs2MTQsNyBAQAogICovCiBzdGF0aWMgaW50IHdtODUxMF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODUxMCI7CkBAIC02NTYsNyArNjQyLDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CiAJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0Jd204NTEwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODUxMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg1MTBfc25kX2NvbnRyb2xzKSk7CiAJd204NTEwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02ODUsNyArNjcyLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg1MTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNzY2LDcgKzc1Myw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg1MTBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg1MTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKQEAgLTgzMiw3ICs4MTksNyBAQAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTg2Miw3ICs4NDksNyBAQAogc3RhdGljIGludCB3bTg1MTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCmluZGV4IGQwMDRlNTguLjQ0MmVhNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB3bTg1ODAuYyAgLS0gIFdNODU4MCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0zNSwxOSArMzUsNiBAQAogCiAjaW5jbHVkZSAid204NTgwLmgiCiAKLSNkZWZpbmUgV004NTgwX1ZFUlNJT04gIjAuMSIKLQotc3RydWN0IHBsbF9zdGF0ZSB7Ci0JdW5zaWduZWQgaW50IGluOwotCXVuc2lnbmVkIGludCBvdXQ7Ci19OwotCi0vKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KLXN0cnVjdCB3bTg1ODBfcHJpdiB7Ci0Jc3RydWN0IHBsbF9zdGF0ZSBhOwotCXN0cnVjdCBwbGxfc3RhdGUgYjsKLX07Ci0KIC8qIFdNODU4MCByZWdpc3RlciBzcGFjZSAqLwogI2RlZmluZSBXTTg1ODBfUExMQTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBXTTg1ODBfUExMQTIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQpAQCAtMTAyLDYgKzg5LDggQEAKICNkZWZpbmUgV004NTgwX1JFQURCQUNLICAgICAgICAgICAgICAgICAgICAgIDB4MzQKICNkZWZpbmUgV004NTgwX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUKIAorI2RlZmluZSBXTTg1ODBfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgMHgzNQorCiAvKiBQTExCNCAocmVnaXN0ZXIgN2gpICovCiAjZGVmaW5lIFdNODU4MF9QTExCNF9NQ0xLT1VUU1JDX01BU0sgICAweDYwCiAjZGVmaW5lIFdNODU4MF9QTExCNF9NQ0xLT1VUU1JDX1BMTEEgICAweDIwCkBAIC0xOTMsNiArMTgyLDIwIEBACiAJMHgwMDAwLCAweDAwMDAgLypSNTMqLwogfTsKIAorc3RydWN0IHBsbF9zdGF0ZSB7CisJdW5zaWduZWQgaW50IGluOworCXVuc2lnbmVkIGludCBvdXQ7Cit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg1ODBfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg1ODBfTUFYX1JFR0lTVEVSICsgMV07CisJc3RydWN0IHBsbF9zdGF0ZSBhOworCXN0cnVjdCBwbGxfc3RhdGUgYjsKK307CisKKwogLyoKICAqIHJlYWQgd204NTgwIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTIwMCw3ICsyMDMsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NTgwX3JlZykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTIyMyw3ICsyMjYsNyBAQAogewogCXU4IGRhdGFbMl07CiAKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKIAogCS8qIFJlZ2lzdGVycyBhcmUgOSBiaXRzIHdpZGUgKi8KIAl2YWx1ZSAmPSAweDFmZjsKQEAgLTMzMCwyMCArMzMzLDYgQEAKIFNPQ19TSU5HTEUoIkFEQyBIaWdoLVBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODU4MF9BRENfQ09OVFJPTDEsIDQsIDEsIDApLAogfTsKIAotLyogQWRkIG5vbi1EQVBNIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODU4MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1ODBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg1ODBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg1ODBfZGFwbV93aWRnZXRzW10gPSB7CiBTTkRfU09DX0RBUE1fREFDKCJEQUMxIiwgIlBsYXliYWNrIiwgV004NTgwX1BXUkROMSwgMiwgMSksCiBTTkRfU09DX0RBUE1fREFDKCJEQUMyIiwgIlBsYXliYWNrIiwgV004NTgwX1BXUkROMSwgMywgMSksCkBAIC01NTMsNyArNTQyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHBhaWZiID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QQUlGMyArIGRhaS0+aWQpOwogCiAJcGFpZmIgJj0gfldNODU4MF9BSUZfTEVOR1RIX01BU0s7CkBAIC03NzEsOCArNzYwLDIyIEBACiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJLyogUG93ZXIgdXAgYW5kIGdldCBpbmRpdmlkdWFsIGNvbnRyb2wgb2YgdGhlIERBQ3MgKi8KKwkJCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4xKTsKKwkJCXJlZyAmPSB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpOworCQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCByZWcpOworCisJCQkvKiBNYWtlIFZNSUQgaGlnaCBpbXBlZGVuY2UgKi8KKwkJCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCAgV004NTgwX0FEQ19DT05UUk9MMSk7CisJCQlyZWcgJj0gfjB4MTAwOworCQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfQURDX0NPTlRST0wxLCByZWcpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSk7CiAJCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgcmVnIHwgV004NTgwX1BXUkROMV9QV0ROKTsKQEAgLTc4NSw2ICs3ODgsMjEgQEAKICNkZWZpbmUgV004NTgwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg1ODBfZGFpX29wc19wbGF5YmFjayA9IHsKKwkuaHdfcGFyYW1zCT0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg1ODBfc2V0X2RhaV9wbGwsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODU4MF9kaWdpdGFsX211dGUsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg1ODBfZGFpX29wc19jYXB0dXJlID0geworCS5od19wYXJhbXMJPSB3bTg1ODBfcGFpZl9od19wYXJhbXMsCisJLnNldF9mbXQJPSB3bTg1ODBfc2V0X3BhaWZfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODU4MF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODU4MF9zZXRfZGFpX3BsbCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg1ODBfZGFpW10gPSB7CiAJewogCQkubmFtZSA9ICJXTTg1ODAgUEFJRlJYIiwKQEAgLTc5NiwxMyArODE0LDcgQEAKIAkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAogCQkJLmZvcm1hdHMgPSBXTTg1ODBfRk9STUFUUywKIAkJfSwKLQkJLm9wcyA9IHsKLQkJCSAuaHdfcGFyYW1zID0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAotCQkJIC5zZXRfZm10ID0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCi0JCQkgLnNldF9jbGtkaXYgPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCi0JCQkgLnNldF9wbGwgPSB3bTg1ODBfc2V0X2RhaV9wbGwsCi0JCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODU4MF9kaWdpdGFsX211dGUsCi0JCSB9LAorCQkub3BzID0gJndtODU4MF9kYWlfb3BzX3BsYXliYWNrLAogCX0sCiAJewogCQkubmFtZSA9ICJXTTg1ODAgUEFJRlRYIiwKQEAgLTgxNCwxMDkgKzgyNiwxNjggQEAKIAkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAogCQkJLmZvcm1hdHMgPSBXTTg1ODBfRk9STUFUUywKIAkJfSwKLQkJLm9wcyA9IHsKLQkJCSAuaHdfcGFyYW1zID0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAotCQkJIC5zZXRfZm10ID0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCi0JCQkgLnNldF9jbGtkaXYgPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCi0JCQkgLnNldF9wbGwgPSB3bTg1ODBfc2V0X2RhaV9wbGwsCi0JCSB9LAorCQkub3BzID0gJndtODU4MF9kYWlfb3BzX2NhcHR1cmUsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg1ODBfZGFpKTsKIAotLyoKLSAqIGluaXRpYWxpc2UgdGhlIFdNODU4MCBkcml2ZXIKLSAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCi0gKi8KLXN0YXRpYyBpbnQgd204NTgwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODU4MF9jb2RlYzsKKworc3RhdGljIGludCB3bTg1ODBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiV004NTgwIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODU4MF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg1ODBfd3JpdGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NTgwX3NldF9iaWFzX2xldmVsOwotCWNvZGVjLT5kYWkgPSB3bTg1ODBfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh3bTg1ODBfZGFpKTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODU4MF9yZWcpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtODU4MF9yZWcsIHNpemVvZih3bTg1ODBfcmVnKSwKLQkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAod204NTgwX2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0JaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBHZXQgdGhlIGNvZGVjIGludG8gYSBrbm93biBzdGF0ZSAqLwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1JFU0VULCAwKTsKLQotCS8qIFBvd2VyIHVwIGFuZCBnZXQgaW5kaXZpZHVhbCBjb250cm9sIG9mIHRoZSBEQUNzICovCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSkgJgotCQkgICAgIH4oV004NTgwX1BXUkROMV9QV0ROIHwgV004NTgwX1BXUkROMV9BTExEQUNQRCkpOwotCi0JLyogTWFrZSBWTUlEIGhpZ2ggaW1wZWRlbmNlICovCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfQURDX0NPTlRST0wxLAotCQkgICAgIHdtODU4MF9yZWFkKGNvZGVjLCAgV004NTgwX0FEQ19DT05UUk9MMSkgJiB+MHgxMDApOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg1ODBfY29kZWM7CisJY29kZWMgPSB3bTg1ODBfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCi0JcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwKLQkJCSAgICAgICBTTkRSVl9ERUZBVUxUX1NUUjEpOworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg1ODA6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQl3bTg1ODBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NTgwX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg1ODBfc25kX2NvbnRyb2xzKSk7CiAJd204NTgwX2FkZF93aWRnZXRzKGNvZGVjKTsKLQogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg1ODA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGNhcmRfZXJyOwogCX0KKwogCXJldHVybiByZXQ7CiAKIGNhcmRfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogSWYgdGhlIGkyYyBsYXllciB3ZXJlbid0IHNvIGJyb2tlbiwgd2UgY291bGQgcGFzcyB0aGlzIGtpbmQgb2YgZGF0YQotICAgYXJvdW5kICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp3bTg1ODBfc29jZGV2OworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODU4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODU4MCA9IHsKKwkucHJvYmUgPSAJd204NTgwX3Byb2JlLAorCS5yZW1vdmUgPSAJd204NTgwX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODU4MCk7CisKK3N0YXRpYyBpbnQgd204NTgwX3JlZ2lzdGVyKHN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwKQoreworCWludCByZXQsIGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODU4MC0+Y29kZWM7CisKKwlpZiAod204NTgwX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004NTgwIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODU4MDsKKwljb2RlYy0+bmFtZSA9ICJXTTg1ODAiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NTgwX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODU4MF93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NTgwX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSB3bTg1ODBfZGFpOworCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh3bTg1ODBfZGFpKTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODU4MC0+cmVnX2NhY2hlKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODU4MC0+cmVnX2NhY2hlOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODU4MF9yZWcsIHNpemVvZih3bTg1ODBfcmVnKSk7CisKKwkvKiBHZXQgdGhlIGNvZGVjIGludG8gYSBrbm93biBzdGF0ZSAqLworCXJldCA9IHdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1JFU0VULCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlc2V0IGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTgwX2RhaSk7IGkrKykKKwkJd204NTgwX2RhaVtpXS5kZXYgPSBjb2RlYy0+ZGV2OworCisJd204NTgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwl3bTg1ODBfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUod204NTgwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg1ODBfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCkKK3sKKwl3bTg1ODBfc2V0X2JpYXNfbGV2ZWwoJndtODU4MC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204NTgwLT5jb2RlYyk7CisJa2ZyZWUod204NTgwKTsKKwl3bTg1ODBfY29kZWMgPSBOVUxMOworfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCi0vKgotICogV004NTgwIDIgd2lyZSBhZGRyZXNzIGlzIGRldGVybWluZWQgYnkgR1BJTzUKLSAqIHN0YXRlIGR1cmluZyBwb3dlcnVwLgotICogICAgbG93ICA9IDB4MWEKLSAqICAgIGhpZ2ggPSAweDFiCi0gKi8KLQogc3RhdGljIGludCB3bTg1ODBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NTgwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7CisJc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOworCXdtODU4MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg1ODBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg1ODAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg1ODAtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODU4MCk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAotCXJldCA9IHdtODU4MF9pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJmkyYy0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NTgwXG4iKTsKLQlyZXR1cm4gcmV0OworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NTgwX3JlZ2lzdGVyKHdtODU4MCk7CiB9CiAKIHN0YXRpYyBpbnQgd204NTgwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODU4MF91bnJlZ2lzdGVyKHdtODU4MCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyOCwxMjkgKzk5OSwzNSBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NTgwX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiV004NTgwIEkyQyBDb2RlYyIsCisJCS5uYW1lID0gIndtODU4MCIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gICAgd204NTgwX2kyY19wcm9iZSwKIAkucmVtb3ZlID0gICB3bTg1ODBfaTJjX3JlbW92ZSwKIAkuaWRfdGFibGUgPSB3bTg1ODBfaTJjX2lkLAogfTsKLQotc3RhdGljIGludCB3bTg1ODBfYWRkX2kyY19kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgY29uc3Qgc3RydWN0IHdtODU4MF9zZXR1cF9kYXRhICpzZXR1cCkKLXsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IHNldHVwLT5pMmNfYWRkcmVzczsKLQlzdHJsY3B5KGluZm8udHlwZSwgIndtODU4MCIsIEkyQ19OQU1FX1NJWkUpOwotCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihzZXR1cC0+aTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKLQkJCXNldHVwLT5pMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19CiAjZW5kaWYKIAotc3RhdGljIGludCB3bTg1ODBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB3bTg1ODBfc2V0dXBfZGF0YSAqc2V0dXA7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwOwotCWludCByZXQgPSAwOwotCi0JcHJfaW5mbygiV004NTgwIEF1ZGlvIENvZGVjICVzXG4iLCBXTTg1ODBfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd204NTgwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODU4MF9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdtODU4MCA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODU4MDsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKLQl3bTg1ODBfc29jZGV2ID0gc29jZGV2OwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB3bTg1ODBfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwotCX0KLSNlbHNlCi0JCS8qIEFkZCBvdGhlciBpbnRlcmZhY2VzIGhlcmUgKi8KLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHBvd2VyIGRvd24gY2hpcCAqLwotc3RhdGljIGludCB3bTg1ODBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXdtODU4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0Jc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7Ci0JaTJjX2RlbF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg1ODAgPSB7Ci0JLnByb2JlID0gCXdtODU4MF9wcm9iZSwKLQkucmVtb3ZlID0gCXdtODU4MF9yZW1vdmUsCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg1ODApOwotCiBzdGF0aWMgaW50IF9faW5pdCB3bTg1ODBfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisJaW50IHJldDsKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBXTTg1ODAgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHdtODU4MF9tb2Rpbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHdtODU4MF9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7CisjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHdtODU4MF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmgKaW5kZXggMDllNDQyMi4uMGRmYjVkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5oCkBAIC0yOCwxMSArMjgsNiBAQAogI2RlZmluZSBXTTg1ODBfQ0xLU1JDX09TQyAgNAogI2RlZmluZSBXTTg1ODBfQ0xLU1JDX05PTkUgNQogCi1zdHJ1Y3Qgd204NTgwX3NldHVwX2RhdGEgewotCWludCBpMmNfYnVzOwotCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOwotfTsKLQogI2RlZmluZSBXTTg1ODBfREFJX1BBSUZSWCAwCiAjZGVmaW5lIFdNODU4MF9EQUlfUEFJRlRYIDEKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MjguYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKaW5kZXggODBiMTE5OC4uZTdmZjIxMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MjguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODcyOF9yZWdfZGVmYXVsdHMpKTsKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQAogCXUxNiByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODcyOF9yZWdfZGVmYXVsdHMpKTsKIAljYWNoZVtyZWddID0gdmFsdWU7CiB9CiAKQEAgLTkyLDIxICs5Miw2IEBACiBTT0NfU0lOR0xFKCJEZWVtcGhhc2lzIiwgV004NzI4X0RBQ0NUTCwgMSwgMSwgMCksCiB9OwogCi1zdGF0aWMgaW50IHdtODcyOF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3Mjhfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg3Mjhfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKgogICogREFQTSBjb250cm9scy4KICAqLwpAQCAtMTUyLDcgKzEzNyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBkYWMgPSB3bTg3MjhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODcyOF9EQUNDVEwpOwogCiAJZGFjICY9IH4weDE4OwpAQCAtMjU5LDYgKzI0NCwxMiBAQAogI2RlZmluZSBXTTg3MjhfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzI4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODcyOF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODcyOF9tdXRlLAorCS5zZXRfZm10CT0gd204NzI4X3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODcyOF9kYWkgPSB7CiAJLm5hbWUgPSAiV004NzI4IiwKIAkucGxheWJhY2sgPSB7CkBAIC0yNjgsMTggKzI1OSwxNCBAQAogCQkucmF0ZXMgPSBXTTg3MjhfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzI4X0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkgLmh3X3BhcmFtcyA9IHdtODcyOF9od19wYXJhbXMsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204NzI4X211dGUsCi0JCSAuc2V0X2ZtdCA9IHdtODcyOF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ3bTg3MjhfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg3MjhfZGFpKTsKIAogc3RhdGljIGludCB3bTg3Mjhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3Mjhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0yODksNyArMjc2LDcgQEAKIHN0YXRpYyBpbnQgd204NzI4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKIApAQCAtMzAyLDcgKzI4OSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204NzI4X2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004NzI4IjsKQEAgLTMzMCw3ICszMTcsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0Jd204NzI4X2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODcyOF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3Mjhfc25kX2NvbnRyb2xzKSk7CiAJd204NzI4X2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0zNjMsNyArMzUxLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3Mjhfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNDQ0LDcgKzQzMiw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3Mjhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3Mjhfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKQEAgLTUwOCw3ICs0OTYsNyBAQAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTU0MSw3ICs1MjksNyBAQAogc3RhdGljIGludCB3bTg3MjhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCmluZGV4IGM0NDRiOWYuLmUwNDNlM2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwpAQCAtMjksMTUgKzI5LDIwIEBACiAKICNpbmNsdWRlICJ3bTg3MzEuaCIKIAotI2RlZmluZSBXTTg3MzFfVkVSU0lPTiAiMC4xMyIKLQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg3MzFfY29kZWM7CiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzE7CiAKIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IHdtODczMV9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODczMV9DQUNIRVJFR05VTV07CiAJdW5zaWduZWQgaW50IHN5c2NsazsKIH07CiAKKyNpZmRlZiBDT05GSUdfU1BJX01BU1RFUgorc3RhdGljIGludCB3bTg3MzFfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pOworI2VuZGlmCisKIC8qCiAgKiB3bTg3MzEgcmVnaXN0ZXIgY2FjaGUKICAqIFdlIGNhbid0IHJlYWQgdGhlIFdNODczMSByZWdpc3RlciBzcGFjZSB3aGVuIHdlIGFyZQpAQCAtMTI5LDIyICsxMzQsNiBAQAogU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgd204NzMxX2VudW1bMV0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODczMV9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg3MzFfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg3MzFfb3V0cHV0X21peGVyX2NvbnRyb2xzW10gPSB7CiBTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODczMV9BUEFOQSwgMywgMSwgMCksCkBAIC0yNjksNyArMjU4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBpZmFjZSA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0lGQUNFKSAmIDB4ZmZmMzsKIAlpbnQgaSA9IGdldF9jb2VmZih3bTg3MzEtPnN5c2NsaywgcGFyYW1zX3JhdGUocGFyYW1zKSk7CkBAIC0yOTksNyArMjg4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBzZXQgYWN0aXZlICovCiAJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQUNUSVZFLCAweDAwMDEpOwpAQCAtMzEyLDcgKzMwMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogZGVhY3RpdmF0ZSAqLwogCWlmICghY29kZWMtPmFjdGl2ZSkgewpAQCAtNDE0LDIxICs0MDMsMTkgQEAKIHN0YXRpYyBpbnQgd204NzMxX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0JdTE2IHJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1BXUikgJiAweGZmN2Y7CisJdTE2IHJlZzsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJLyogdnJlZi9taWQsIG9zYyBvbiwgZGFjIHVubXV0ZSAqLwotCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9QV1IsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCS8qIGV2ZXJ5dGhpbmcgb2ZmIGV4Y2VwdCB2cmVmL3ZtaWQsICovCisJCS8qIENsZWFyIFBXUk9GRiwgZ2F0ZSBDTEtPVVQsIGV2ZXJ5dGhpbmcgZWxzZSBhcy1pcyAqLworCQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9QV1IpICYgMHhmZjdmOwogCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9QV1IsIHJlZyB8IDB4MDA0MCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJLyogZXZlcnl0aGluZyBvZmYsIGRhYyBtdXRlLCBpbmFjdGl2ZSAqLwogCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CiAJCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1BXUiwgMHhmZmZmKTsKIAkJYnJlYWs7CkBAIC00NDYsNiArNDMzLDE1IEBACiAjZGVmaW5lIFdNODczMV9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3MzFfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IHdtODczMV9wY21fcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gd204NzMxX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB3bTg3MzFfc2h1dGRvd24sCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODczMV9tdXRlLAorCS5zZXRfc3lzY2xrCT0gd204NzMxX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gd204NzMxX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODczMV9kYWkgPSB7CiAJLm5hbWUgPSAiV004NzMxIiwKIAkucGxheWJhY2sgPSB7CkBAIC00NjAsMjEgKzQ1NiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzMxX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODczMV9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSB3bTg3MzFfcGNtX3ByZXBhcmUsCi0JCS5od19wYXJhbXMgPSB3bTg3MzFfaHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB3bTg3MzFfc2h1dGRvd24sCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3MzFfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSB3bTg3MzFfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gd204NzMxX3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJndtODczMV9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODczMV9kYWkpOwogCiBzdGF0aWMgaW50IHdtODczMV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwKTsKIAl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNDg0LDcgKzQ3Myw3IEBACiBzdGF0aWMgaW50IHdtODczMV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNTAwLDU0ICs0ODksMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGluaXRpYWxpc2UgdGhlIFdNODczMSBkcml2ZXIKLSAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCi0gKi8KLXN0YXRpYyBpbnQgd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgaW50IHdtODczMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJlZywgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKIAotCWNvZGVjLT5uYW1lID0gIldNODczMSI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NzMxX3dyaXRlOwotCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODczMV9zZXRfYmlhc19sZXZlbDsKLQljb2RlYy0+ZGFpID0gJndtODczMV9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzMxX3JlZyk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NzMxX3JlZywgc2l6ZW9mKHdtODczMV9yZWcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAod204NzMxX2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0Jd204NzMxX3Jlc2V0KGNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NzMxX2NvZGVjOworCWNvZGVjID0gd204NzMxX2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg3MzE6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQkvKiBwb3dlciBvbiBkZXZpY2UgKi8KLQl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKLQotCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MT1VUMVYpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xPVVQxViwgcmVnICYgfjB4MDEwMCk7Ci0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUk9VVDFWKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9ST1VUMVYsIHJlZyAmIH4weDAxMDApOwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xJTlZPTCk7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTElOVk9MLCByZWcgJiB+MHgwMTAwKTsKLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9SSU5WT0wpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JJTlZPTCwgcmVnICYgfjB4MDEwMCk7Ci0KLQl3bTg3MzFfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg3MzFfc25kX2NvbnRyb2xzKSk7CiAJd204NzMxX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NzMxOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBjYXJkX2VycjsKIAl9CiAKQEAgLTU1NywxMzMgKzUyNSwxMDkgQEAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKndtODczMV9zb2NkZXY7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0KLS8qCi0gKiBXTTg3MzEgMiB3aXJlIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSBHUElPNQotICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCi0gKiAgICBsb3cgID0gMHgxYQotICogICAgaGlnaCA9IDB4MWIKLSAqLwotCi1zdGF0aWMgaW50IHdtODczMV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204NzMxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzMxX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKIAotCXJldCA9IHdtODczMV9pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzMxXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd204NzMxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODczMV9pMmNfaWRbXSA9IHsKLQl7ICJ3bTg3MzEiLCAwIH0sCi0JeyB9CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzEgPSB7CisJLnByb2JlID0gCXdtODczMV9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODczMV9yZW1vdmUsCisJLnN1c3BlbmQgPSAJd204NzMxX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODczMV9yZXN1bWUsCiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODczMV9pMmNfaWQpOworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg3MzEpOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzMxX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiV004NzMxIEkyQyBDb2RlYyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gICAgd204NzMxX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gICB3bTg3MzFfaTJjX3JlbW92ZSwKLQkuaWRfdGFibGUgPSB3bTg3MzFfaTJjX2lkLAotfTsKLQotc3RhdGljIGludCB3bTg3MzFfYWRkX2kyY19kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgY29uc3Qgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhICpzZXR1cCkKK3N0YXRpYyBpbnQgd204NzMxX3JlZ2lzdGVyKHN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxKQogewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODczMS0+Y29kZWM7CisJdTE2IHJlZzsKIAotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZHJpdmVyXG4iKTsKKwlpZiAod204NzMxX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004NzMxIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODczMTsKKwljb2RlYy0+bmFtZSA9ICJXTTg3MzEiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NzMxX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODczMV93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzMxX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204NzMxX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004NzMxX0NBQ0hFUkVHTlVNOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204NzMxLT5yZWdfY2FjaGU7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204NzMxX3JlZywgc2l6ZW9mKHdtODczMV9yZWcpKTsKKworCXJldCA9IHdtODczMV9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBzZXR1cC0+aTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKwl3bTg3MzFfZGFpLmRldiA9IGNvZGVjLT5kZXY7CiAKLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHNldHVwLT5pMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLAotCQkJc2V0dXAtPmkyY19idXMpOwotCQlnb3RvIGVycl9kcml2ZXI7CisJd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBMYXRjaCB0aGUgdXBkYXRlIGJpdHMgKi8KKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MT1VUMVYpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xPVVQxViwgcmVnICYgfjB4MDEwMCk7CisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUk9VVDFWKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9ST1VUMVYsIHJlZyAmIH4weDAxMDApOworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xJTlZPTCk7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTElOVk9MLCByZWcgJiB+MHgwMTAwKTsKKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9SSU5WT0wpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JJTlZPTCwgcmVnICYgfjB4MDEwMCk7CisKKwkvKiBEaXNhYmxlIGJ5cGFzcyBwYXRoIGJ5IGRlZmF1bHQgKi8KKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9BUEFOQSk7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQVBBTkEsIHJlZyAmIH4weDQpOworCisJd204NzMxX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7Ci0JcmV0dXJuIC1FTk9ERVY7CiB9Ci0jZW5kaWYKKworc3RhdGljIHZvaWQgd204NzMxX3VucmVnaXN0ZXIoc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEpCit7CisJd204NzMxX3NldF9iaWFzX2xldmVsKCZ3bTg3MzEtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODczMS0+Y29kZWMpOworCWtmcmVlKHdtODczMSk7CisJd204NzMxX2NvZGVjID0gTlVMTDsKK30KIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3MzFfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3MzFfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKLQotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7Ci0KLQlyZXQgPSB3bTg3MzFfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODczMVxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3MzFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzMxX3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAid204NzMxIiwKLQkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCQk9IHdtODczMV9zcGlfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3MzFfc3BpX3JlbW92ZSksCi19OwotCiBzdGF0aWMgaW50IHdtODczMV9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CkBAIC03MDcsMTAxICs2NTEsMTIxIEBACiAKIAlyZXR1cm4gbGVuOwogfQotI2VuZGlmIC8qIENPTkZJR19TUElfTUFTVEVSICovCiAKLXN0YXRpYyBpbnQgd204NzMxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3MzFfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgKnNldHVwOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMTsKLQlpbnQgcmV0ID0gMDsKLQotCXByX2luZm8oIldNODczMSBBdWRpbyBDb2RlYyAlcyIsIFdNODczMV9WRVJTSU9OKTsKLQotCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwotCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CiAKIAl3bTg3MzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzMxX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAod204NzMxID09IE5VTEwpIHsKLQkJa2ZyZWUoY29kZWMpOworCWlmICh3bTg3MzEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODczMTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwljb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzMxX3NwaV93cml0ZTsKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OwogCi0Jd204NzMxX3NvY2RldiA9IHNvY2RldjsKLQlyZXQgPSAtRU5PREVWOworCXNwaS0+ZGV2LmRyaXZlcl9kYXRhID0gd204NzMxOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB3bTg3MzFfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0JaWYgKHNldHVwLT5zcGkpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzMxX3NwaV93cml0ZTsKLQkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOwotCQlpZiAocmV0ICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBzcGkgZHJpdmVyIik7Ci0JfQotI2VuZGlmCi0KLQlpZiAocmV0ICE9IDApIHsKLQkJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0JCWtmcmVlKGNvZGVjKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gd204NzMxX3JlZ2lzdGVyKHdtODczMSk7CiB9CiAKLS8qIHBvd2VyIGRvd24gY2hpcCAqLwotc3RhdGljIGludCB3bTg3MzFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3MzFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IHNwaS0+ZGV2LmRyaXZlcl9kYXRhOwogCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0KLQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWkyY191bnJlZ2lzdGVyX2RldmljZShjb2RlYy0+Y29udHJvbF9kYXRhKTsKLQlpMmNfZGVsX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKKwl3bTg3MzFfdW5yZWdpc3Rlcih3bTg3MzEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMSA9IHsKLQkucHJvYmUgPSAJd204NzMxX3Byb2JlLAotCS5yZW1vdmUgPSAJd204NzMxX3JlbW92ZSwKLQkuc3VzcGVuZCA9IAl3bTg3MzFfc3VzcGVuZCwKLQkucmVzdW1lID0Jd204NzMxX3Jlc3VtZSwKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3MzFfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ3bTg3MzEiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gd204NzMxX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODczMV9zcGlfcmVtb3ZlKSwKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODczMSk7CisjZW5kaWYgLyogQ09ORklHX1NQSV9NQVNURVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODczMV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzE7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204NzMxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODczMV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODczMSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODczMS0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204NzMxKTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg3MzFfcmVnaXN0ZXIod204NzMxKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204NzMxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODczMV91bnJlZ2lzdGVyKHdtODczMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3MzFfaTJjX2lkW10gPSB7CisJeyAid204NzMxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3MzFfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODczMV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODczMSBJMkMgQ29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODczMV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204NzMxX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODczMV9pMmNfaWQsCit9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IHdtODczMV9tb2Rpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg3MzEgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg3MzEgU1BJIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQod204NzMxX21vZGluaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd204NzMxX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3MzFfc3BpX2RyaXZlcik7CisjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHdtODczMV9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmgKaW5kZXggOTUxOTBlOS4uY2Q3YjgwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5oCkBAIC0zNCwxMiArMzQsNiBAQAogI2RlZmluZSBXTTg3MzFfU1lTQ0xLCTAKICNkZWZpbmUgV004NzMxX0RBSQkJMAogCi1zdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgewotCWludCAgICAgICAgICAgIHNwaTsKLQlpbnQgICAgICAgICAgICBpMmNfYnVzOwotCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOwotfTsKLQogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3MzFfZGFpOwogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKaW5kZXggNTk5N2ZhNi4uYjY0NTA5YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCkBAIC0yMzEsMjEgKzIzMSw2IEBACiAKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg3NTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODc1MF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogREFQTSBDb250cm9scwogICovCkBAIC02MTksNyArNjA0LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODc1MF9wcml2ICp3bTg3NTAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBpZmFjZSA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX0lGQUNFKSAmIDB4MWYzOwogCXUxNiBzcmF0ZSA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX1NSQVRFKSAmIDB4MWMwOwpAQCAtNjk0LDYgKzY3OSwxMyBAQAogI2RlZmluZSBXTTg3NTBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1MF9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTBfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1MF9zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1MF9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3NTBfZGFpID0gewogCS5uYW1lID0gIldNODc1MCIsCiAJLnBsYXliYWNrID0gewpAQCAtNzA4LDEyICs3MDAsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1MF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1MF9wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUwX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUwX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHdtODc1MF9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzUwX2RhaSk7CiAKQEAgLTcyNyw3ICs3MTQsNyBAQAogc3RhdGljIGludCB3bTg3NTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3NTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNzM2LDcgKzcyMyw3IEBACiBzdGF0aWMgaW50IHdtODc1MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNzY5LDcgKzc1Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWcsIHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg3NTAiOwpAQCAtODE2LDcgKzgwMyw4IEBACiAJcmVnID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfUklOVk9MKTsKIAl3bTg3NTBfd3JpdGUoY29kZWMsIFdNODc1MF9SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CiAKLQl3bTg3NTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODc1MF9zbmRfY29udHJvbHMpKTsKIAl3bTg3NTBfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTg1MCw3ICs4MzgsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC05MzEsNyArOTE5LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtODc1MF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwpAQCAtMTAwMyw3ICs5OTEsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3NTA7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtMTA1Nyw3ICsxMDQ1LDcgQEAKIHN0YXRpYyBpbnQgd204NzUwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODc1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCA3NzYyMGFiLi5hNmU4ZjNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTUxLDggKzUxLDYgQEAKIAogI2luY2x1ZGUgIndtODc1My5oIgogCi0jZGVmaW5lIFdNODc1M19WRVJTSU9OICIwLjE2IgotCiBzdGF0aWMgaW50IGNhcHNfY2hhcmdlID0gMjAwMDsKIG1vZHVsZV9wYXJhbShjYXBzX2NoYXJnZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2Fwc19jaGFyZ2UsICJXTTg3NTMgY2FwIGNoYXJnZSB0aW1lIChtc2VjcykiKTsKQEAgLTYwLDEyICs1OCw2IEBACiBzdGF0aWMgdm9pZCB3bTg3NTNfc2V0X2RhaV9tb2RlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgbW9kZSk7CiAKLS8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwotc3RydWN0IHdtODc1M19wcml2IHsKLQl1bnNpZ25lZCBpbnQgc3lzY2xrOwotCXVuc2lnbmVkIGludCBwY21jbGs7Ci19OwotCiAvKgogICogd204NzUzIHJlZ2lzdGVyIGNhY2hlCiAgKiBXZSBjYW4ndCByZWFkIHRoZSBXTTg3NTMgcmVnaXN0ZXIgc3BhY2Ugd2hlbiB3ZQpAQCAtOTAsNiArODIsMTQgQEAKIAkweDAwMDAsIDB4MDAwMAogfTsKIAorLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204NzUzX3ByaXYgeworCXVuc2lnbmVkIGludCBzeXNjbGs7CisJdW5zaWduZWQgaW50IHBjbWNsazsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW0FSUkFZX1NJWkUod204NzUzX3JlZyldOworfTsKKwogLyoKICAqIHJlYWQgd204NzUzIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTk3LDcgKzk3LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPCAxIHx8IHJlZyA+IChBUlJBWV9TSVpFKHdtODc1M19yZWcpICsgMSkpCisJaWYgKHJlZyA8IDEgfHwgcmVnID49IChBUlJBWV9TSVpFKHdtODc1M19yZWcpICsgMSkpCiAJCXJldHVybiAtMTsKIAlyZXR1cm4gY2FjaGVbcmVnIC0gMV07CiB9CkBAIC0xMDksNyArMTA5LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA8IDEgfHwgcmVnID4gMHgzZikKKwlpZiAocmVnIDwgMSB8fCByZWcgPj0gKEFSUkFZX1NJWkUod204NzUzX3JlZykgKyAxKSkKIAkJcmV0dXJuOwogCWNhY2hlW3JlZyAtIDFdID0gdmFsdWU7CiB9CkBAIC0zMzksMjEgKzMzOSw2IEBACiBTT0NfRU5VTSgiUk9VVDIgUGhhc2UiLCB3bTg3NTNfZW51bVsyOF0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODc1M19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204NzUzX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBfREFQTV8gQ29udHJvbHMKICAqLwpAQCAtOTI3LDcgKzkxMiw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgdm9pY2UgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19QQ00pICYgMHgwMWYzOwogCXUxNiBzcmF0ZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1NSQVRFMSkgJiAweDAxN2Y7CkBAIC0xMTYxLDcgKzExNDYsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IHNyYXRlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfU1JBVEUxKSAmIDB4MDFjMDsKIAl1MTYgaGlmaSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0hJRkkpICYgMHgwMWYzOwpAQCAtMTMxNiw2ICsxMzAxLDUxIEBACiAgKiAzLiBWb2ljZSBkaXNhYmxlZCAtIEhJRkkgb3ZlciBISUZJCiAgKiA0LiBWb2ljZSBkaXNhYmxlZCAtIEhJRkkgb3ZlciBISUZJLCB1c2VzIHZvaWNlIERBSSBMUkMgZm9yIGNhcHR1cmUKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlMSA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUxaF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUxID0geworCS5od19wYXJhbXMJPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTIgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTMJPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlNAk9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpIHdtODc1M19hbGxfZGFpW10gPSB7CiAvKiBEQUkgSGlGaSBtb2RlIDEgKi8KIHsJLm5hbWUgPSAiV004NzUzIEhpRmkiLApAQCAtMTMzMiwxNCArMTM2Miw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFN9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlMWhfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZTEsCiB9LAogLyogREFJIFZvaWNlIG1vZGUgMSAqLwogewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLApAQCAtMTM1NiwxNCArMTM3OSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlMSwKIH0sCiAvKiBEQUkgSGlGaSBtb2RlIDIgLSBkdW1teSAqLwogewkubmFtZSA9ICJXTTg3NTMgSGlGaSIsCkBAIC0xMzg0LDE0ICsxNDAwLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTIsCiB9LAogLyogREFJIEhpRmkgbW9kZSAzICovCiB7CS5uYW1lID0gIldNODc1MyBIaUZpIiwKQEAgLTE0MDgsMTQgKzE0MTcsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19pMnNfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZTMsCiB9LAogLyogREFJIFZvaWNlIG1vZGUgMyAtIGR1bW15ICovCiB7CS5uYW1lID0gIldNODc1MyBWb2ljZSIsCkBAIC0xNDM2LDE0ICsxNDM4LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGU0LAogfSwKIC8qIERBSSBWb2ljZSBtb2RlIDQgLSBkdW1teSAqLwogewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLApAQCAtMTQ2NiwzMCArMTQ2MSwzNSBAQAogCWlmIChtb2RlIDwgNCkgewogCQlpbnQgcGxheWJhY2tfYWN0aXZlLCBjYXB0dXJlX2FjdGl2ZSwgY29kZWNfYWN0aXZlLCBwb3Bfd2FpdDsKIAkJdm9pZCAqcHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAkJcGxheWJhY2tfYWN0aXZlID0gd204NzUzX2RhaVswXS5wbGF5YmFjay5hY3RpdmU7CiAJCWNhcHR1cmVfYWN0aXZlID0gd204NzUzX2RhaVswXS5jYXB0dXJlLmFjdGl2ZTsKIAkJY29kZWNfYWN0aXZlID0gd204NzUzX2RhaVswXS5hY3RpdmU7CiAJCXByaXZhdGVfZGF0YSA9IHdtODc1M19kYWlbMF0ucHJpdmF0ZV9kYXRhOwogCQlwb3Bfd2FpdCA9IHdtODc1M19kYWlbMF0ucG9wX3dhaXQ7CisJCWxpc3QgPSB3bTg3NTNfZGFpWzBdLmxpc3Q7CiAJCXdtODc1M19kYWlbMF0gPSB3bTg3NTNfYWxsX2RhaVttb2RlIDw8IDFdOwogCQl3bTg3NTNfZGFpWzBdLnBsYXliYWNrLmFjdGl2ZSA9IHBsYXliYWNrX2FjdGl2ZTsKIAkJd204NzUzX2RhaVswXS5jYXB0dXJlLmFjdGl2ZSA9IGNhcHR1cmVfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzBdLmFjdGl2ZSA9IGNvZGVjX2FjdGl2ZTsKIAkJd204NzUzX2RhaVswXS5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJCXdtODc1M19kYWlbMF0ucG9wX3dhaXQgPSBwb3Bfd2FpdDsKKwkJd204NzUzX2RhaVswXS5saXN0ID0gbGlzdDsKIAogCQlwbGF5YmFja19hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLnBsYXliYWNrLmFjdGl2ZTsKIAkJY2FwdHVyZV9hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLmNhcHR1cmUuYWN0aXZlOwogCQljb2RlY19hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLmFjdGl2ZTsKIAkJcHJpdmF0ZV9kYXRhID0gd204NzUzX2RhaVsxXS5wcml2YXRlX2RhdGE7CiAJCXBvcF93YWl0ID0gd204NzUzX2RhaVsxXS5wb3Bfd2FpdDsKKwkJbGlzdCA9IHdtODc1M19kYWlbMV0ubGlzdDsKIAkJd204NzUzX2RhaVsxXSA9IHdtODc1M19hbGxfZGFpWyhtb2RlIDw8IDEpICsgMV07CiAJCXdtODc1M19kYWlbMV0ucGxheWJhY2suYWN0aXZlID0gcGxheWJhY2tfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzFdLmNhcHR1cmUuYWN0aXZlID0gY2FwdHVyZV9hY3RpdmU7CiAJCXdtODc1M19kYWlbMV0uYWN0aXZlID0gY29kZWNfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzFdLnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKIAkJd204NzUzX2RhaVsxXS5wb3Bfd2FpdCA9IHBvcF93YWl0OworCQl3bTg3NTNfZGFpWzFdLmxpc3QgPSBsaXN0OwogCX0KIAl3bTg3NTNfZGFpWzBdLmNvZGVjID0gY29kZWM7CiAJd204NzUzX2RhaVsxXS5jb2RlYyA9IGNvZGVjOwpAQCAtMTUwNSw3ICsxNTA1LDcgQEAKIHN0YXRpYyBpbnQgd204NzUzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwogCWlmICghY29kZWMtPmNhcmQpCkBAIC0xNTE4LDcgKzE1MTgsNyBAQAogc3RhdGljIGludCB3bTg3NTNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTE1MzEsNiArMTUzMSwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19yZWcpOyBpKyspIHsKIAkJaWYgKGkgKyAxID09IFdNODc1M19SRVNFVCkKIAkJCWNvbnRpbnVlOworCisJCS8qIE5vIHBvaW50IGluIHdyaXRpbmcgaGFyZHdhcmUgZGVmYXVsdCB2YWx1ZXMgYmFjayAqLworCQlpZiAoY2FjaGVbaV0gPT0gd204NzUzX3JlZ1tpXSkKKwkJCWNvbnRpbnVlOworCiAJCWRhdGFbMF0gPSAoKGkgKyAxKSA8PCAxKSB8ICgoY2FjaGVbaV0gPj4gOCkgJiAweDAwMDEpOwogCQlkYXRhWzFdID0gY2FjaGVbaV0gJiAweDAwZmY7CiAJCWNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKQEAgLTE1NDksMzIgKzE1NTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGluaXRpYWxpc2UgdGhlIFdNODc1MyBkcml2ZXIKLSAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCi0gKi8KLXN0YXRpYyBpbnQgd204NzUzX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODc1M19jb2RlYzsKKworc3RhdGljIGludCB3bTg3NTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZWcsIHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CiAKLQljb2RlYy0+bmFtZSA9ICJXTTg3NTMiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204NzUzX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODc1M193cml0ZTsKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg3NTNfc2V0X2JpYXNfbGV2ZWw7Ci0JY29kZWMtPmRhaSA9IHdtODc1M19kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAyOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzUzX3JlZyk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NzUzX3JlZywgc2l6ZW9mKHdtODc1M19yZWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdtODc1M19jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJXTTg3NTMgY29kZWMgbm90IHlldCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODc1M19jb2RlYzsKKwljb2RlYyA9IHdtODc1M19jb2RlYzsKIAogCXdtODc1M19zZXRfZGFpX21vZGUoY29kZWMsIDApOwogCi0Jd204NzUzX3Jlc2V0KGNvZGVjKTsKLQogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNTgyLDM1ICsxNTc5LDggQEAKIAkJZ290byBwY21fZXJyOwogCX0KIAotCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLwotCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1BSRVBBUkUpOwotCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX1NUQU5EQlk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAotCQltc2Vjc190b19qaWZmaWVzKGNhcHNfY2hhcmdlKSk7Ci0KLQkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCi0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTERBQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTERBQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SREFDKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SREFDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xBREMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xBREMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkFEQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkFEQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMVYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMVYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMlYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMlYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MSU5WT0wpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xJTlZPTCwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SSU5WT0wpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKLQotCXdtODc1M19hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTNfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODc1M19zbmRfY29udHJvbHMpKTsKIAl3bTg3NTNfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE2MTgsMjE1ICsxNTg4LDEzIEBACiAJCWdvdG8gY2FyZF9lcnI7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCiBwY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIElmIHRoZSBpMmMgbGF5ZXIgd2VyZW4ndCBzbyBicm9rZW4sIHdlIGNvdWxkIHBhc3MgdGhpcyBraW5kIG9mIGRhdGEKLSAgIGFyb3VuZCAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqd204NzUzX3NvY2RldjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQotLyoKLSAqIFdNODc1MyAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEdQSU81Ci0gKiBzdGF0ZSBkdXJpbmcgcG93ZXJ1cC4KLSAqICAgIGxvdyAgPSAweDFhCi0gKiAgICBoaWdoID0gMHgxYgotICovCi0KLXN0YXRpYyBpbnQgd204NzUzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1M19zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7Ci0KLQlyZXQgPSB3bTg3NTNfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODc1M1xuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdtODc1M19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3NTNfaTJjX2lkW10gPSB7Ci0JeyAid204NzUzIiwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3NTNfaTJjX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODc1M19pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIldNODc1MyBJMkMgQ29kZWMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9ICAgIHdtODc1M19pMmNfcHJvYmUsCi0JLnJlbW92ZSA9ICAgd204NzUzX2kyY19yZW1vdmUsCi0JLmlkX3RhYmxlID0gd204NzUzX2kyY19pZCwKLX07Ci0KLXN0YXRpYyBpbnQgd204NzUzX2FkZF9pMmNfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSAqc2V0dXApCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBzZXR1cC0+aTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJ3bTg3NTMiLCBJMkNfTkFNRV9TSVpFKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoc2V0dXAtPmkyY19idXMpOwotCWlmICghYWRhcHRlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgJWRcbiIsCi0JCQlzZXR1cC0+aTJjX2J1cyk7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotc3RhdGljIGludCBfX2RldmluaXQgd204NzUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzUzX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwotCi0JcmV0ID0gd204NzUzX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTNcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgd204NzUzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODc1M19zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIndtODc1MyIsCi0JCS5idXMJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSB3bTg3NTNfc3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzUzX3NwaV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCB3bTg3NTNfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1syXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOwotCi0JdC50eF9idWYgPSAmbXNnWzBdOwotCXQubGVuID0gbGVuOwotCi0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlzcGlfc3luYyhzcGksICZtKTsKLQotCXJldHVybiBsZW47Ci19Ci0jZW5kaWYKLQotCi1zdGF0aWMgaW50IHdtODc1M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHdtODc1M19zZXR1cF9kYXRhICpzZXR1cDsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0Jc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTM7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcl9pbmZvKCJXTTg3NTMgQXVkaW8gQ29kZWMgJXMiLCBXTTg3NTNfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd204NzUzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc1M19wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdtODc1MyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODc1MzsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKLQl3bTg3NTNfc29jZGV2ID0gc29jZGV2OwotCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGVsYXllZF93b3JrLCB3bTg3NTNfd29yayk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7Ci0JCXJldCA9IHdtODc1M19hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlpZiAoc2V0dXAtPnNwaSkgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3NTNfc3BpX3dyaXRlOwotCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChyZXQgIT0gMCkgewotCQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQkJa2ZyZWUoY29kZWMpOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODUzLDIyICsxNjIxLDkgQEAKIHN0YXRpYyBpbnQgd204NzUzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCXJ1bl9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmspOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOwotI2VuZGlmCi0Ja2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0Ja2ZyZWUoY29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODgxLDE1ICsxNjM2LDI0MCBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzUzKTsKIAorc3RhdGljIGludCB3bTg3NTNfcmVnaXN0ZXIoc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204NzUzLT5jb2RlYzsKKwl1MTYgcmVnOworCisJaWYgKHdtODc1M19jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJNdWx0aXBsZSBXTTg3NTMgZGV2aWNlcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5uYW1lID0gIldNODc1MyI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gd204NzUzX3dyaXRlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX1NUQU5EQlk7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzUzX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSB3bTg3NTNfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMjsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODc1My0+cmVnX2NhY2hlKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODc1My0+cmVnX2NhY2hlOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3NTM7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204NzUzX3JlZywgc2l6ZW9mKGNvZGVjLT5yZWdfY2FjaGUpKTsKKwlJTklUX0RFTEFZRURfV09SSygmY29kZWMtPmRlbGF5ZWRfd29yaywgd204NzUzX3dvcmspOworCisJcmV0ID0gd204NzUzX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgKi8KKwl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmssCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKGNhcHNfY2hhcmdlKSk7CisKKwkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTERBQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTERBQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SREFDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SREFDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xBREMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xBREMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkFEQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkFEQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMVYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQxViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMVYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMlYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQyViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMlYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MSU5WT0wpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SSU5WT0wpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKworCXdtODc1M19jb2RlYyA9IGNvZGVjOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX2RhaSk7IGkrKykKKwkJd204NzUzX2RhaVtpXS5kZXYgPSBjb2RlYy0+ZGV2OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmd204NzUzX2RhaVswXSwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUlzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlydW5fZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODc1Myk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204NzUzX3VucmVnaXN0ZXIoc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMpCit7CisJd204NzUzX3NldF9iaWFzX2xldmVsKCZ3bTg3NTMtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlydW5fZGVsYXllZF93b3JrKCZ3bTg3NTMtPmNvZGVjLmRlbGF5ZWRfd29yayk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJndtODc1M19kYWlbMF0sIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204NzUzLT5jb2RlYyk7CisJa2ZyZWUod204NzUzKTsKKwl3bTg3NTNfY29kZWMgPSBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCitzdGF0aWMgaW50IHdtODc1M19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzOworCisJd204NzUzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc1M19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODc1MyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworICAgICAgICBjb2RlYyA9ICZ3bTg3NTMtPmNvZGVjOworICAgICAgICBjb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisgICAgICAgIGNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisgICAgICAgIGkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODc1Myk7CisKKyAgICAgICAgY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg3NTNfcmVnaXN0ZXIod204NzUzKTsKK30KKworc3RhdGljIGludCB3bTg3NTNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworICAgICAgICBzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworICAgICAgICB3bTg3NTNfdW5yZWdpc3Rlcih3bTg3NTMpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc1M19pMmNfaWRbXSA9IHsKKwl7ICJ3bTg3NTMiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODc1M19pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzUzX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204NzUzIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg3NTNfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIHdtODc1M19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHdtODc1M19pMmNfaWQsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCB3bTg3NTNfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzBdOworCW1zZ1sxXSA9IGRhdGFbMV07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODc1M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTM7CisKKwl3bTg3NTMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzUzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NzUzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204NzUzLT5jb2RlYzsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODc1M19zcGlfd3JpdGU7CisJY29kZWMtPmRldiA9ICZzcGktPmRldjsKKworCXNwaS0+ZGV2LmRyaXZlcl9kYXRhID0gd204NzUzOworCisJcmV0dXJuIHdtODc1M19yZWdpc3Rlcih3bTg3NTMpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3NTNfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc3BpLT5kZXYuZHJpdmVyX2RhdGE7CisJd204NzUzX3VucmVnaXN0ZXIod204NzUzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODc1M19zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIndtODc1MyIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTg3NTNfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzUzX3NwaV9yZW1vdmUpLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCB3bTg3NTNfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204NzUzX2RhaSwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKSk7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODc1MyBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzUzIFNQSSBkcml2ZXI6ICVkXG4iLCByZXQpOworI2VuZGlmCisJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdCh3bTg3NTNfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3bTg3NTNfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODc1M19kYWksIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKKyNlbmRpZgogfQogbW9kdWxlX2V4aXQod204NzUzX2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaAppbmRleCBmNTU3MDRjLi41N2IyYmEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKQEAgLTc3LDEyICs3Nyw2IEBACiAjZGVmaW5lIFdNODc1M19CSUFTQ1RMCQkweDNkCiAjZGVmaW5lIFdNODc1M19BRENUTDIJCTB4M2YKIAotc3RydWN0IHdtODc1M19zZXR1cF9kYXRhIHsKLQlpbnQgc3BpOwotCWludCBpMmNfYnVzOwotCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOwotfTsKLQogI2RlZmluZSBXTTg3NTNfUExMMQkJCTAKICNkZWZpbmUgV004NzUzX1BMTDIJCQkxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCmluZGV4IDY3NjdkZTEuLjQ2YzVlYTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwpAQCAtNTE3LDIyICs1MTcsNiBAQAogCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204OTAwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwMF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODkwMF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDBfZGFwbV9sb3V0cHV0Ml9jb250cm9sID0KIFNPQ19EQVBNX1NJTkdMRSgiTElORU9VVDJMIFN3aXRjaCIsIFdNODkwMF9SRUdfUE9XRVIzLCA2LCAxLCAwKTsKIApAQCAtNzM2LDcgKzcyMCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAKIAlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzEpICYgfjB4NjA7CkBAIC0xMTA0LDYgKzEwODgsMTQgQEAKIAkoU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgfCBcCiAJIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5MDBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTAwX2h3X3BhcmFtcywKKwkuc2V0X2Nsa2Rpdgk9IHdtODkwMF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODkwMF9zZXRfZGFpX3BsbCwKKwkuc2V0X2ZtdAk9IHdtODkwMF9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gd204OTAwX2RpZ2l0YWxfbXV0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDBfZGFpID0gewogCS5uYW1lID0gIldNODkwMCBIaUZpIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xMTIwLDEzICsxMTEyLDcgQEAKIAkJLnJhdGVzID0gV004OTAwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODkwMF9QQ01fRk9STUFUUywKIAkgfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204OTAwX2h3X3BhcmFtcywKLQkJIC5zZXRfY2xrZGl2ID0gd204OTAwX3NldF9kYWlfY2xrZGl2LAotCQkgLnNldF9wbGwgPSB3bTg5MDBfc2V0X2RhaV9wbGwsCi0JCSAuc2V0X2ZtdCA9IHdtODkwMF9zZXRfZGFpX2ZtdCwKLQkJIC5kaWdpdGFsX211dGUgPSB3bTg5MDBfZGlnaXRhbF9tdXRlLAotCSB9LAorCS5vcHMgPSAmd204OTAwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTAwX2RhaSk7CiAKQEAgLTEyMjYsNyArMTIxMiw3IEBACiBzdGF0aWMgaW50IHdtODkwMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAwX3ByaXYgKndtODkwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGZsbF9vdXQgPSB3bTg5MDAtPmZsbF9vdXQ7CiAJaW50IGZsbF9pbiAgPSB3bTg5MDAtPmZsbF9pbjsKQEAgLTEyNTAsNyArMTIzNiw3IEBACiBzdGF0aWMgaW50IHdtODkwMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAwX3ByaXYgKndtODkwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2ICpjYWNoZTsKIAlpbnQgaSwgcmV0OwpAQCAtMTI4OCw4ICsxMjc0LDggQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5MDBfY29kZWM7CiAKLXN0YXRpYyBpbnQgd204OTAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODkwMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHdtODkwMF9wcml2ICp3bTg5MDA7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwpAQCAtMTM4OCw3ICsxMzc0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHdtODkwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5MDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODkwMF9kYWkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyh3bTg5MDBfY29kZWMpOwpAQCAtMTQxNCw3ICsxNDAwLDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSB3bTg5MDBfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSB3bTg5MDBfaTJjX3JlbW92ZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod204OTAwX2kyY19yZW1vdmUpLAogCS5pZF90YWJsZSA9IHdtODkwMF9pMmNfaWQsCiB9OwogCkBAIC0xNDMwLDcgKzE0MTYsNyBAQAogCX0KIAogCWNvZGVjID0gd204OTAwX2NvZGVjOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAkvKiBSZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKQEAgLTE0MzksNyArMTQyNSw4IEBACiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQl3bTg5MDBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTAwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODkwMF9zbmRfY29udHJvbHMpKTsKIAl3bTg5MDBfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCmluZGV4IGJkZTc0NTQuLjhjZjU3MWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwpAQCAtNzQ0LDIxICs3NDQsNiBAQAogCQkgMCwgNjMsIDAsIG91dF90bHYpLAogfTsKIAotc3RhdGljIGludCB3bTg5MDNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTAzX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204OTAzX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbnB1dF9tb2RlX211eCA9CiAJU09DX0RBUE1fRU5VTSgiTGVmdCBJbnB1dCBNb2RlIE11eCIsIGxpbnB1dF9tb2RlX2VudW0pOwogCkBAIC0xMjc2LDcgKzEyNjEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqbWFzdGVyX3J1bnRpbWU7CkBAIC0xMzE4LDcgKzEzMDMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKQEAgLTEzMzgsNyArMTMyMyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlpbnQgZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwpAQCAtMTUxMiw2ICsxNDk3LDE1IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5MDNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHdtODkwM19zdGFydHVwLAorCS5zaHV0ZG93bgk9IHdtODkwM19zaHV0ZG93biwKKwkuaHdfcGFyYW1zCT0gd204OTAzX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTAzX2RpZ2l0YWxfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODkwM19zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHdtODkwM19zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDNfZGFpID0gewogCS5uYW1lID0gIldNODkwMyIsCiAJLnBsYXliYWNrID0gewpAQCAtMTUyOCwyMSArMTUyMiwxNCBAQAogCQkgLnJhdGVzID0gV004OTAzX0NBUFRVUkVfUkFURVMsCiAJCSAuZm9ybWF0cyA9IFdNODkwM19GT1JNQVRTLAogCSB9LAotCS5vcHMgPSB7Ci0JCSAuc3RhcnR1cCA9IHdtODkwM19zdGFydHVwLAotCQkgLnNodXRkb3duID0gd204OTAzX3NodXRkb3duLAotCQkgLmh3X3BhcmFtcyA9IHdtODkwM19od19wYXJhbXMsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204OTAzX2RpZ2l0YWxfbXV0ZSwKLQkJIC5zZXRfZm10ID0gd204OTAzX3NldF9kYWlfZm10LAotCQkgLnNldF9zeXNjbGsgPSB3bTg5MDNfc2V0X2RhaV9zeXNjbGsKLQl9CisJLm9wcyA9ICZ3bTg5MDNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg5MDNfZGFpKTsKIAogc3RhdGljIGludCB3bTg5MDNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg5MDNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0xNTUyLDcgKzE1MzksNyBAQAogc3RhdGljIGludCB3bTg5MDNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IGk7CiAJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtMTU3Nyw4ICsxNTY0LDggQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5MDNfY29kZWM7CiAKLXN0YXRpYyBpbnQgd204OTAzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODkwM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwpAQCAtMTY4NCw3ICsxNjcxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHdtODkwM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5MDNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0xNzE0LDcgKzE3MDEsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSAgICA9IHdtODkwM19pMmNfcHJvYmUsCi0JLnJlbW92ZSAgID0gd204OTAzX2kyY19yZW1vdmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod204OTAzX2kyY19yZW1vdmUpLAogCS5pZF90YWJsZSA9IHdtODkwM19pMmNfaWQsCiB9OwogCkBAIC0xNzI4LDcgKzE3MTUsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlzb2NkZXYtPmNvZGVjID0gd204OTAzX2NvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5MDNfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKQEAgLTE3MzcsOCArMTcyNCw5IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXdtODkwM19hZGRfY29udHJvbHMoc29jZGV2LT5jb2RlYyk7Ci0Jd204OTAzX2FkZF93aWRnZXRzKHNvY2Rldi0+Y29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKHNvY2Rldi0+Y2FyZC0+Y29kZWMsIHdtODkwM19zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5MDNfc25kX2NvbnRyb2xzKSk7CisJd204OTAzX2FkZF93aWRnZXRzKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTc1OSw3ICsxNzQ3LDcgQEAKIHN0YXRpYyBpbnQgd204OTAzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODkwM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYwppbmRleCA4OGVhZDdmLi4wMzJkY2EyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKQEAgLTE5NSwyMSArMTk1LDYgQEAKIAlTT0NfRE9VQkxFX1IoIk1pYyBCb29zdCIsIFdNODk3MV9MQURDSU4sIFdNODk3MV9SQURDSU4sIDQsIDMsIDApLAogfTsKIAotLyogYWRkIG5vbi1EQVBNIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODk3MV9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NzFfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204OTcxX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogREFQTSBDb250cm9scwogICovCkBAIC01NDYsNyArNTMxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODk3MV9wcml2ICp3bTg5NzEgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBpZmFjZSA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX0lGQUNFKSAmIDB4MWYzOwogCXUxNiBzcmF0ZSA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1NSQVRFKSAmIDB4MWMwOwpAQCAtNjE5LDYgKzYwNCwxMyBAQAogI2RlZmluZSBXTTg5NzFfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTcxX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODk3MV9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5NzFfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODk3MV9zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHdtODk3MV9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5NzFfZGFpID0gewogCS5uYW1lID0gIldNODk3MSIsCiAJLnBsYXliYWNrID0gewpAQCAtNjMzLDEyICs2MjUsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004OTcxX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODk3MV9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODk3MV9wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204OTcxX211dGUsCi0JCS5zZXRfZm10ID0gd204OTcxX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHdtODk3MV9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204OTcxX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTcxX2RhaSk7CiAKQEAgLTY1Miw3ICs2MzksNyBAQAogc3RhdGljIGludCB3bTg5NzFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg5NzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNjYxLDcgKzY0OCw3IEBACiBzdGF0aWMgaW50IHdtODk3MV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNjkyLDcgKzY3OSw3IEBACiAKIHN0YXRpYyBpbnQgd204OTcxX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWcsIHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg5NzEiOwpAQCAtNzQ1LDcgKzczMiw4IEBACiAJcmVnID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfUklOVk9MKTsKIAl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CiAKLQl3bTg5NzFfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTcxX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODk3MV9zbmRfY29udHJvbHMpKTsKIAl3bTg5NzFfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTc3Miw3ICs3NjAsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODk3MV9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC04NzMsNyArODYxLDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTcxOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTkwOCw3ICs4OTYsNyBAQAogc3RhdGljIGludCB3bTg5NzFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204OTcxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCmluZGV4IGE1NzMxZmEuLmM1MThjM2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gKEFSUkFZX1NJWkUod204OTkwX3JlZykpIC0gMSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODk5MF9yZWcpKTsKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtMTI4LDcgKzEyOCw3IEBACiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKIAkvKiBSZXNldCByZWdpc3RlciBhbmQgcmVzZXJ2ZWQgcmVnaXN0ZXJzIGFyZSB1bmNhY2hlZCAqLwotCWlmIChyZWcgPT0gMCB8fCByZWcgPiBBUlJBWV9TSVpFKHdtODk5MF9yZWcpIC0gMSkKKwlpZiAocmVnID09IDAgfHwgcmVnID49IEFSUkFZX1NJWkUod204OTkwX3JlZykpCiAJCXJldHVybjsKIAogCWNhY2hlW3JlZ10gPSB2YWx1ZTsKQEAgLTQxOCwyMSArNDE4LDYgQEAKIAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODk5MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204OTkwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsCi0JCQkJCU5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIF9EQVBNXyBDb250cm9scwogICovCkBAIC0xMTc4LDcgKzExNjMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgYXVkaW8xID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzEpOwogCiAJYXVkaW8xICY9IH5XTTg5OTBfQUlGX1dMX01BU0s7CkBAIC0xMzQ3LDYgKzEzMzIsMTUgQEAKICAqIDEuIEFEQy9EQUMgb24gUHJpbWFyeSBJbnRlcmZhY2UKICAqIDIuIEFEQyBvbiBQcmltYXJ5IEludGVyZmFjZS9EQUMgb24gc2Vjb25kYXJ5CiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk5MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg5OTBfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5OTBfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODk5MF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODk5MF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODk5MF9zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODk5MF9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5OTBfZGFpID0gewogLyogQURDL0RBQyBvbiBwcmltYXJ5ICovCiAJLm5hbWUgPSAiV004OTkwIEFEQy9EQUMgUHJpbWFyeSIsCkBAIC0xMzYzLDIxICsxMzU3LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg5OTBfUkFURVMsCiAJCS5mb3JtYXRzID0gV004OTkwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204OTkwX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODk5MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODk5MF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg5OTBfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204OTkwX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODk5MF9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204OTkwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTkwX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204OTkwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwogCWlmICghY29kZWMtPmNhcmQpCkBAIC0xMzkwLDcgKzEzNzcsNyBAQAogc3RhdGljIGludCB3bTg5OTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTE0MTgsNyArMTQwNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204OTkwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE0NjEsNyArMTQ0OCw4IEBACiAJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfTEVGVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKIAl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9SSUdIVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKIAotCXdtODk5MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204OTkwX3NuZF9jb250cm9scykpOwogCXdtODk5MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTQ5NSw3ICsxNDgzLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg5OTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtMTU5NCw3ICsxNTgyLDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTkwOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTE2MjAsNyArMTYwOCw3IEBACiBzdGF0aWMgaW50IHdtODk5MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg5OTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2NTgxNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKQEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiB3bTk3MDUuYyAgLS0gIEFMU0EgU29jIFdNOTcwNSBjb2RlYyBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IDIwMDggSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBWZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgIndtOTcwNS5oIgorCisvKgorICogV005NzA1IHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBjb25zdCB1MTYgd205NzA1X3JlZ1tdID0geworCTB4NjE1MCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgLyogMHgwICAqLworCTB4MDAwMCwgMHg4MDAwLCAweDgwMDgsIDB4ODAwOCwgLyogMHg4ICAqLworCTB4ODgwOCwgMHg4ODA4LCAweDg4MDgsIDB4ODgwOCwgLyogMHgxMCAqLworCTB4ODgwOCwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwgLyogMHgxOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwZiwgLyogMHgyMCAqLworCTB4MDYwNSwgMHgwMDAwLCAweGJiODAsIDB4MDAwMCwgLyogMHgyOCAqLworCTB4MDAwMCwgMHhiYjgwLCAweDAwMDAsIDB4MDAwMCwgLyogMHgzMCAqLworCTB4MDAwMCwgMHgyMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHgzOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg0MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg0OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg1MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg1OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg2MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg2OCAqLworCTB4MDAwMCwgMHgwODA4LCAweDAwMDAsIDB4MDAwNiwgLyogMHg3MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDU3NGQsIDB4NGMwNSwgLyogMHg3OCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9zbmRfYWM5N19jb250cm9sc1tdID0geworCVNPQ19ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUiwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUiwgMTUsIDEsIDEpLAorCVNPQ19ET1VCTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0hFQURQSE9ORSwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0hFQURQSE9ORSwgMTUsIDEsIDEpLAorCVNPQ19ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDTSwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X1BDTSwgMTUsIDEsIDEpLAorCVNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfTU9OTywgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgMTUsIDEsIDEpLAorCVNPQ19TSU5HTEUoIlBDQmVlcCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDX0JFRVAsIDEsIDE1LCAxKSwKKwlTT0NfU0lOR0xFKCJQaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BIT05FLCAwLCAzMSwgMSksCisJU09DX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0xJTkUsIDgsIDAsIDMxLCAxKSwKKwlTT0NfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0NELCA4LCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUlDLCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiTWljIDIwZEIgQm9vc3QgU3dpdGNoIiwgQUM5N19NSUMsIDYsIDEsIDApLAorCVNPQ19ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwgQUM5N19SRUNfR0FJTiwgOCwgMCwgMTUsIDApLAorCVNPQ19TSU5HTEUoIkNhcHR1cmUgU3dpdGNoIiwgQUM5N19SRUNfR0FJTiwgMTUsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndtOTcwNV9taWNbXSA9IHsiTWljIDEiLCAiTWljIDIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTk3MDVfcmVjX3NlbFtdID0geyJNaWMiLCAiQ0QiLCAiTkMiLCAiTkMiLAorCSJMaW5lIiwgIlN0ZXJlbyBNaXgiLCAiTW9ubyBNaXgiLCAiUGhvbmUifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTk3MDVfZW51bV9taWMgPQorCVNPQ19FTlVNX1NJTkdMRShBQzk3X0dFTkVSQUxfUFVSUE9TRSwgOCwgMiwgd205NzA1X21pYyk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtOTcwNV9lbnVtX3JlY19sID0KKwlTT0NfRU5VTV9TSU5HTEUoQUM5N19SRUNfU0VMLCA4LCA4LCB3bTk3MDVfcmVjX3NlbCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtOTcwNV9lbnVtX3JlY19yID0KKwlTT0NfRU5VTV9TSU5HTEUoQUM5N19SRUNfU0VMLCAwLCA4LCB3bTk3MDVfcmVjX3NlbCk7CisKKy8qIEhlYWRwaG9uZSBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9ocF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiUENCZWVwIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfUENfQkVFUCwgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19DRCwgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUlDLCAxNSwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJQaG9uZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X1BIT05FLCAxNSwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTElORSwgMTUsIDEsIDEpLAorfTsKKworLyogTWljIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9taWNfc3JjX2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtOTcwNV9lbnVtX21pYyk7CisKKy8qIENhcHR1cmUgc291cmNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X2NhcHR1cmVfc2VsZWN0bF9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTk3MDVfZW51bV9yZWNfbCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X2NhcHR1cmVfc2VsZWN0cl9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTk3MDVfZW51bV9yZWNfcik7CisKKy8qIERBUE0gd2lkZ2V0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtOTcwNV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fTVVYKCJNaWMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X21pY19zcmNfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9NVVgoIkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ3bTk3MDVfY2FwdHVyZV9zZWxlY3RsX2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBDYXB0dXJlIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9jYXB0dXJlX3NlbGVjdHJfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9EQUMoIkxlZnQgREFDIiwgIkxlZnQgSGlGaSBQbGF5YmFjayIsCisJCVNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiUmlnaHQgREFDIiwgIlJpZ2h0IEhpRmkgUGxheWJhY2siLAorCQlTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwoIkhQIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X2hwX21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKHdtOTcwNV9ocF9taXhlcl9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTW9ubyBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiTGVmdCBBREMiLCAiTGVmdCBIaUZpIENhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9BREMoIlJpZ2h0IEFEQyIsICJSaWdodCBIaUZpIENhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkhlYWRwaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlNwZWFrZXIgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJMaW5lIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTGluZSBvdXQgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNb25vIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUGhvbmUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNaWMgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJQQ0JFRVAgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJDRCBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkFEQyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUUiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OT09VVCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUEhPTkUiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTkwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTlIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkNESU5MIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJDRElOUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUENCRUVQIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyIiksCit9OworCisvKiBBdWRpbyBtYXAKKyAqIFdNOTcwNSBoYXMgbm8gc3dpdGNoZXMgdG8gZGlzYWJsZSB0aGUgcm91dGUgZnJvbSB0aGUgaW5wdXRzIHRvIHRoZSBIUCBtaXhlcgorICogc28gaW4gb3JkZXIgdG8gcHJldmVudCBhY3RpdmUgaW5wdXRzIGZyb20gZm9yY2luZyB0aGUgYXVkaW8gb3V0cHV0cyB0byBiZQorICogY29uc3RhbnRseSBlbmFibGVkLCB3ZSB1c2UgdGhlIG11dGVzIG9uIHRob3NlIGlucHV0cyB0byBzaW11bGF0ZSBzdWNoCisgKiBjb250cm9scy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogSFAgbWl4ZXIgKi8KKwl7IkhQIE1peGVyIiwgIlBDQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAiUENCRUVQIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiQ0QgUGxheWJhY2sgU3dpdGNoIiwgIkNEIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiTWljIFBsYXliYWNrIFN3aXRjaCIsICJNaWMgUEdBIn0sCisJeyJIUCBNaXhlciIsICJQaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAiUGhvbmUgUEdBIn0sCisJeyJIUCBNaXhlciIsICJMaW5lIFBsYXliYWNrIFN3aXRjaCIsICJMaW5lIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCBOVUxMLCAiTGVmdCBEQUMifSwKKwl7IkhQIE1peGVyIiwgTlVMTCwgIlJpZ2h0IERBQyJ9LAorCisJLyogbW9ubyBtaXhlciAqLworCXsiTW9ubyBNaXhlciIsIE5VTEwsICJIUCBNaXhlciJ9LAorCisJLyogb3V0cHV0cyAqLworCXsiSGVhZHBob25lIFBHQSIsIE5VTEwsICJIUCBNaXhlciJ9LAorCXsiSFBPVVRMIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EifSwKKwl7IkhQT1VUUiIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIn0sCisJeyJMaW5lIG91dCBQR0EiLCBOVUxMLCAiSFAgTWl4ZXIifSwKKwl7IkxPVVQiLCBOVUxMLCAiTGluZSBvdXQgUEdBIn0sCisJeyJST1VUIiwgTlVMTCwgIkxpbmUgb3V0IFBHQSJ9LAorCXsiTW9ubyBQR0EiLCBOVUxMLCAiTW9ubyBNaXhlciJ9LAorCXsiTU9OT09VVCIsIE5VTEwsICJNb25vIFBHQSJ9LAorCisJLyogaW5wdXRzICovCisJeyJDRCBQR0EiLCBOVUxMLCAiQ0RJTkwifSwKKwl7IkNEIFBHQSIsIE5VTEwsICJDRElOUiJ9LAorCXsiTGluZSBQR0EiLCBOVUxMLCAiTElORUlOTCJ9LAorCXsiTGluZSBQR0EiLCBOVUxMLCAiTElORUlOUiJ9LAorCXsiUGhvbmUgUEdBIiwgTlVMTCwgIlBIT05FIn0sCisJeyJNaWMgU291cmNlIiwgIk1pYyAxIiwgIk1JQzEifSwKKwl7Ik1pYyBTb3VyY2UiLCAiTWljIDIiLCAiTUlDMiJ9LAorCXsiTWljIFBHQSIsIE5VTEwsICJNaWMgU291cmNlIn0sCisJeyJQQ0JFRVAgUEdBIiwgTlVMTCwgIlBDQkVFUCJ9LAorCisJLyogTGVmdCBjYXB0dXJlIHNlbGVjdG9yICovCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIk1pYyIsICJNaWMgU291cmNlIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIkNEIiwgIkNESU5MIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIkxpbmUiLCAiTElORUlOTCJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJTdGVyZW8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIk1vbm8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIlBob25lIiwgIlBIT05FIn0sCisKKwkvKiBSaWdodCBjYXB0dXJlIHNvdXJjZSAqLworCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiTWljIiwgIk1pYyBTb3VyY2UifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIkNEIiwgIkNESU5SIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJMaW5lIiwgIkxJTkVJTlIifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIlN0ZXJlbyBNaXgiLCAiSFAgTWl4ZXIifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIk1vbm8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJQaG9uZSIsICJQSE9ORSJ9LAorCisJeyJBREMgUEdBIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBTb3VyY2UifSwKKwl7IkFEQyBQR0EiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBTb3VyY2UifSwKKworCS8qIEFEQydzICovCisJeyJMZWZ0IEFEQyIsICBOVUxMLCAiQURDIFBHQSJ9LAorCXsiUmlnaHQgQURDIiwgTlVMTCwgIkFEQyBQR0EifSwKK307CisKK3N0YXRpYyBpbnQgd205NzA1X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTk3MDVfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKHdtOTcwNV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogV2UgdXNlIGEgcmVnaXN0ZXIgY2FjaGUgdG8gZW5oYW5jZSByZWFkIHBlcmZvcm1hbmNlLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFDOTdfUkVTRVQ6CisJY2FzZSBBQzk3X1ZFTkRPUl9JRDE6CisJY2FzZSBBQzk3X1ZFTkRPUl9JRDI6CisJCXJldHVybiBzb2NfYWM5N19vcHMucmVhZChjb2RlYy0+YWM5NywgcmVnKTsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWcgPj4gMTsKKworCQlpZiAocmVnID49IChBUlJBWV9TSVpFKHdtOTcwNV9yZWcpKSkKKwkJCXJldHVybiAtRUlPOworCisJCXJldHVybiBjYWNoZVtyZWddOworCX0KK30KKworc3RhdGljIGludCBhYzk3X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CisJcmVnID0gcmVnID4+IDE7CisJaWYgKHJlZyA8IChBUlJBWV9TSVpFKHdtOTcwNV9yZWcpKSkKKwkJY2FjaGVbcmVnXSA9IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjOTdfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgcmVnOworCXUxNiB2cmE7CisKKwl2cmEgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKKwlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgdnJhIHwgMHgxKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZWcgPSBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURTsKKwllbHNlCisJCXJlZyA9IEFDOTdfUENNX0xSX0FEQ19SQVRFOworCisJcmV0dXJuIGFjOTdfd3JpdGUoY29kZWMsIHJlZywgcnVudGltZS0+cmF0ZSk7Cit9CisKKyNkZWZpbmUgV005NzA1X0FDOTdfUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBcCisJCQlTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAorCQkJU05EUlZfUENNX1JBVEVfNDgwMDApCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcwNV9kYWlfb3BzID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHdtOTcwNV9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5hYzk3X2NvbnRyb2wgPSAxLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV005NzA1X0FDOTdfUkFURVMsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJIaUZpIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNOTcwNV9BQzk3X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLm9wcyA9ICZ3bTk3MDVfZGFpX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQXV4IFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDEsCisJCQkucmF0ZXMgPSBXTTk3MDVfQUM5N19SQVRFUywKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJfQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtOTcwNV9kYWkpOworCitzdGF0aWMgaW50IHdtOTcwNV9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaWYgKHNvY19hYzk3X29wcy5yZXNldCkgeworCQlzb2NfYWM5N19vcHMucmVzZXQoY29kZWMtPmFjOTcpOworCQlpZiAoYWM5N19yZWFkKGNvZGVjLCAwKSA9PSB3bTk3MDVfcmVnWzBdKQorCQkJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KKwl9CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCB3bTk3MDVfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJXTTk3MDUgU29DIEF1ZGlvIENvZGVjXG4iKTsKKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisKKwljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTk3MDVfcmVnLCBzaXplb2Yod205NzA1X3JlZyksIEdGUF9LRVJORUwpOworCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjYWNoZV9lcnI7CisJfQorCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IHNpemVvZih3bTk3MDVfcmVnKTsKKwljb2RlYy0+cmVnX2NhY2hlX3N0ZXAgPSAyOworCisJY29kZWMtPm5hbWUgPSAiV005NzA1IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gd205NzA1X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod205NzA1X2RhaSk7CisJY29kZWMtPndyaXRlID0gYWM5N193cml0ZTsKKwljb2RlYy0+cmVhZCA9IGFjOTdfcmVhZDsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCXJldCA9IHNuZF9zb2NfbmV3X2FjOTdfY29kZWMoY29kZWMsICZzb2NfYWM5N19vcHMsIDApOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid205NzA1OiBmYWlsZWQgdG8gcmVnaXN0ZXIgQUM5NyBjb2RlY1xuIik7CisJCWdvdG8gY29kZWNfZXJyOworCX0KKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBjbV9lcnI7CisKKwlyZXQgPSB3bTk3MDVfcmVzZXQoY29kZWMpOworCWlmIChyZXQpCisJCWdvdG8gcmVzZXRfZXJyOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTcwNV9zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtOTcwNV9zbmRfYWM5N19jb250cm9scykpOworCXdtOTcwNV9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid205NzA1OiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworcmVzZXRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CitwY21fZXJyOgorCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKGNvZGVjKTsKK2NvZGVjX2VycjoKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKK2NhY2hlX2VycjoKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtOTcwNV9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJaWYgKGNvZGVjID09IE5VTEwpCisJCXJldHVybiAwOworCisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKGNvZGVjKTsKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlrZnJlZShjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtOTcwNSA9IHsKKwkucHJvYmUgPSAJd205NzA1X3NvY19wcm9iZSwKKwkucmVtb3ZlID0gCXdtOTcwNV9zb2NfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd205NzA1KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNOTcwNSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODBmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiB3bTk3MDUuaCAgLS0gIFdNOTcwNSBTb2MgQXVkaW8gZHJpdmVyCisgKi8KKworI2lmbmRlZiBfV005NzA1X0gKKyNkZWZpbmUgX1dNOTcwNV9ICisKKyNkZWZpbmUgV005NzA1X0RBSV9BQzk3X0hJRkkJMAorI2RlZmluZSBXTTk3MDVfREFJX0FDOTdfQVVYCTEKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTk3MDVfZGFpWzJdOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtOTcwNTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCBhZjgzZDYyLi43NjVjZjFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTE1NCwyMSArMTU0LDYgQEAKIFNPQ19TSU5HTEUoIk1pYyAyMGRCIEJvb3N0IFN3aXRjaCIsIEFDOTdfTUlDLCA3LCAxLCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTk3MTJfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod205NzEyX3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTk3MTJfc25kX2FjOTdfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIGZha2UgbGVmdCBhbmQgcmlnaHQgSFAgbWl4ZXJzIGJlY2F1c2UKICAqIHRoZSBjb2RlYyBvbmx5IGhhcyBhIHNpbmdsZSBjb250cm9sIHRoYXQgaXMgc2hhcmVkIGJ5IGJvdGggY2hhbm5lbHMuCiAgKiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBhdWRpbyBwYXRoLgpAQCAtNDY3LDcgKzQ1Miw3IEBACiAJZWxzZSB7CiAJCXJlZyA9IHJlZyA+PiAxOwogCi0JCWlmIChyZWcgPiAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCisJCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJcmV0dXJuIGNhY2hlW3JlZ107CkBAIC00ODEsNyArNDY2LDcgQEAKIAogCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwotCWlmIChyZWcgPD0gKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQorCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CiAKIAlyZXR1cm4gMDsKQEAgLTQ5Myw3ICs0NzgsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWc7CiAJdTE2IHZyYTsKIApAQCAtNTE0LDcgKzQ5OSw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHZyYSwgeHNsZTsKIAogCXZyYSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwpAQCAtNTMyLDYgKzUxNywxNCBAQAogCQlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHxcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTJfZGFpX29wc19oaWZpID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEyX2RhaV9vcHNfYXV4ID0geworCS5wcmVwYXJlCT0gYWM5N19hdXhfcHJlcGFyZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTk3MTJfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKQEAgLTU0OCw4ICs1NDEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV005NzEyX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfcHJlcGFyZSx9LAorCS5vcHMgPSAmd205NzEyX2RhaV9vcHNfaGlmaSwKIH0sCiB7CiAJLm5hbWUgPSAiQUM5NyBBdXgiLApAQCAtNTU5LDggKzU1MSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBXTTk3MTJfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19hdXhfcHJlcGFyZSx9LAorCS5vcHMgPSAmd205NzEyX2RhaV9vcHNfYXV4LAogfQogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcxMl9kYWkpOwpAQCAtNjA3LDcgKzU5OCw3IEBACiAJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd205NzEyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTYxNiw3ICs2MDcsNyBAQAogc3RhdGljIGludCB3bTk3MTJfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpLCByZXQ7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKQEAgLTY1MiwxMCArNjQzLDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJXTTk3MTEvV005NzEyIFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgV005NzEyX1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNvY2Rldi0+Y29kZWMgPT0gTlVMTCkKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtOTcxMl9yZWcsIHNpemVvZih3bTk3MTJfcmVnKSwgR0ZQX0tFUk5FTCk7CkBAIC02OTgsNyArNjkwLDggQEAKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X1ZJREVPLCBhYzk3X3JlYWQoY29kZWMsIEFDOTdfVklERU8pIHwgMHgzMDAwKTsKIAogCXdtOTcxMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwotCXdtOTcxMl9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTk3MTJfc25kX2FjOTdfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTk3MTJfc25kX2FjOTdfY29udHJvbHMpKTsKIAl3bTk3MTJfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTcxOCwxNSArNzExLDE1IEBACiAJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAKIGNhY2hlX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHdtOTcxMl9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwppbmRleCBmM2NhOGFhLi41MjNiYWQwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogc3RydWN0IHdtOTcxM19wcml2IHsKIAl1MzIgcGxsX2luOyAvKiBQTEwgaW5wdXQgZnJlcXVlbmN5ICovCi0JdTMyIHBsbF9vdXQ7IC8qIFBMTCBvdXRwdXQgZnJlcXVlbmN5ICovCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFjOTdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCkBAIC0xOTAsMjEgKzE4OSw2IEBACiBTT0NfU0lOR0xFKCIzRCBEZXB0aCIsIEFDOTdfUkVDX0dBSU5fTUlDLCAwLCAxNSwgMSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd205NzEzX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtOTcxM19zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtOTcxM19zbmRfYWM5N19jb250cm9sc1tpXSwKLQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBmYWtlIGxlZnQgYW5kIHJpZ2h0IEhQIG1peGVycyBiZWNhdXNlCiAgKiB0aGUgY29kZWMgb25seSBoYXMgYSBzaW5nbGUgY29udHJvbCB0aGF0IGlzIHNoYXJlZCBieSBib3RoIGNoYW5uZWxzLgogICogVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgYXVkaW8gcGF0aCB1c2luZyB0aGUgY3VycmVudApAQCAtNjM2LDcgKzYyMCw3IEBACiAJZWxzZSB7CiAJCXJlZyA9IHJlZyA+PiAxOwogCi0JCWlmIChyZWcgPiAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCisJCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJcmV0dXJuIGNhY2hlW3JlZ107CkBAIC02NTAsNyArNjM0LDcgQEAKIAlpZiAocmVnIDwgMHg3YykKIAkJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CiAJcmVnID0gcmVnID4+IDE7Ci0JaWYgKHJlZyA8PSAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCisJaWYgKHJlZyA8IChBUlJBWV9TSVpFKHdtOTcxM19yZWcpKSkKIAkJY2FjaGVbcmVnXSA9IHZhbDsKIAogCXJldHVybiAwOwpAQCAtNzM4LDEzICs3MjIsMTMgQEAKIAlzdHJ1Y3QgX3BsbF9kaXYgcGxsX2RpdjsKIAogCS8qIHR1cm4gUExMIG9mZiA/ICovCi0JaWYgKGZyZXFfaW4gPT0gMCB8fCBmcmVxX291dCA9PSAwKSB7CisJaWYgKGZyZXFfaW4gPT0gMCkgewogCQkvKiBkaXNhYmxlIFBMTCBwb3dlciBhbmQgc2VsZWN0IGV4dCBzb3VyY2UgKi8KIAkJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSk7CiAJCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByZWcgfCAweDAwODApOwogCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKTsKIAkJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyB8IDB4MDIwMCk7Ci0JCXdtOTcxMy0+cGxsX291dCA9IDA7CisJCXdtOTcxMy0+cGxsX2luID0gMDsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03ODgsNyArNzcyLDYgQEAKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgcmVnICYgMHhmZGZmKTsKIAlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKTsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmVnICYgMHhmZjdmKTsKLQl3bTk3MTMtPnBsbF9vdXQgPSBmcmVxX291dDsKIAl3bTk3MTMtPnBsbF9pbiA9IGZyZXFfaW47CiAKIAkvKiB3YWl0IDEwbXMgQUM5NyBsaW5rIGZyYW1lcyBmb3IgdGhlIGxpbmsgdG8gc3RhYmlsaXNlICovCkBAIC05NTcsMTMgKzk0MCwxNCBAQAogCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBzdGF0dXM7CisJdTE2IHN0YXR1cywgcmF0ZTsKIAogCS8qIEdyYWNlZnVsbHkgc2h1dCBkb3duIHRoZSB2b2ljZSBpbnRlcmZhY2UuICovCiAJc3RhdHVzID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUykgfCAweDEwMDA7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIDB4MDI4MCk7CisJcmF0ZSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpICYgMHhGMEZGOworCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByYXRlIHwgMHgwMjAwKTsKIAlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxKSk7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIDB4MEY4MCk7CisJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJhdGUgfCAweDBGMDApOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCBzdGF0dXMpOwogfQogCkBAIC0xMDIxLDYgKzEwMDUsMjcgQEAKIAkoU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgfCBcCiAJIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTNfZGFpX29wc19oaWZpID0geworCS5wcmVwYXJlCT0gYWM5N19oaWZpX3ByZXBhcmUsCisJLnNldF9jbGtkaXYJPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTk3MTNfc2V0X2RhaV9wbGwsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTNfZGFpX29wc19hdXggPSB7CisJLnByZXBhcmUJPSBhYzk3X2F1eF9wcmVwYXJlLAorCS5zZXRfY2xrZGl2CT0gd205NzEzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd205NzEzX3NldF9kYWlfcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEzX2RhaV9vcHNfdm9pY2UgPSB7CisJLmh3X3BhcmFtcwk9IHdtOTcxM19wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHdtOTcxM192b2ljZXNodXRkb3duLAorCS5zZXRfY2xrZGl2CT0gd205NzEzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd205NzEzX3NldF9kYWlfcGxsLAorCS5zZXRfZm10CT0gd205NzEzX3NldF9kYWlfZm10LAorCS5zZXRfdHJpc3RhdGUJPSB3bTk3MTNfc2V0X2RhaV90cmlzdGF0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTk3MTNfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKQEAgLTEwMzcsMTAgKzEwNDIsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV005NzEzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X2hpZmlfcHJlcGFyZSwKLQkJLnNldF9jbGtkaXYgPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd205NzEzX3NldF9kYWlfcGxsLH0sCisJLm9wcyA9ICZ3bTk3MTNfZGFpX29wc19oaWZpLAogCX0sCiAJewogCS5uYW1lID0gIkFDOTcgQXV4IiwKQEAgLTEwNTAsMTAgKzEwNTIsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gV005NzEzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X2F1eF9wcmVwYXJlLAotCQkuc2V0X2Nsa2RpdiA9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTk3MTNfc2V0X2RhaV9wbGwsfSwKKwkub3BzID0gJndtOTcxM19kYWlfb3BzX2F1eCwKIAl9LAogCXsKIAkubmFtZSA9ICJXTTk3MTMgVm9pY2UiLApAQCAtMTA2OSwxNCArMTA2OCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTk3MTNfUENNX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNOTcxM19QQ01fRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTk3MTNfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gd205NzEzX3ZvaWNlc2h1dGRvd24sCi0JCS5zZXRfY2xrZGl2ID0gd205NzEzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtOTcxM19zZXRfZGFpX3BsbCwKLQkJLnNldF9mbXQgPSB3bTk3MTNfc2V0X2RhaV9mbXQsCi0JCS5zZXRfdHJpc3RhdGUgPSB3bTk3MTNfc2V0X2RhaV90cmlzdGF0ZSwKLQl9LAorCS5vcHMgPSAmd205NzEzX2RhaV9vcHNfdm9pY2UsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MTNfZGFpKTsKQEAgLTExMzIsNyArMTEyNCw3IEBACiAJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAKIAkvKiBEaXNhYmxlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRvdWNocGFuZWwgLSB0aGF0IHdpbGwgYmUgaGFuZGxlZApAQCAtMTE1MCw3ICsxMTQyLDcgQEAKIHN0YXRpYyBpbnQgd205NzEzX3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd205NzEzX3ByaXYgKndtOTcxMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGksIHJldDsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTExNjQsOCArMTE1Niw4IEBACiAJd205NzEzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBkbyB3ZSBuZWVkIHRvIHJlLXN0YXJ0IHRoZSBQTEwgPyAqLwotCWlmICh3bTk3MTMtPnBsbF9vdXQpCi0JCXdtOTcxM19zZXRfcGxsKGNvZGVjLCAwLCB3bTk3MTMtPnBsbF9pbiwgd205NzEzLT5wbGxfb3V0KTsKKwlpZiAod205NzEzLT5wbGxfaW4pCisJCXdtOTcxM19zZXRfcGxsKGNvZGVjLCAwLCB3bTk3MTMtPnBsbF9pbiwgMCk7CiAKIAkvKiBvbmx5IHN5bmNocm9uaXNlIHRoZSBjb2RlYyBpZiB3YXJtIHJlc2V0IGZhaWxlZCAqLwogCWlmIChyZXQgPT0gMCkgewpAQCAtMTE5MSwxMCArMTE4MywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiV005NzEzL1dNOTcxNCBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFdNOTcxM19WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTk3MTNfcmVnLCBzaXplb2Yod205NzEzX3JlZyksIEdGUF9LRVJORUwpOwpAQCAtMTI0NSw3ICsxMjM4LDggQEAKIAlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfQ0QpICYgMHg3ZmZmOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfQ0QsIHJlZyk7CiAKLQl3bTk3MTNfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205NzEzX3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod205NzEzX3NuZF9hYzk3X2NvbnRyb2xzKSk7CiAJd205NzEzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKQpAQCAtMTI2NSwxNSArMTI1OSwxNSBAQAogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCiBjYWNoZV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bTk3MTNfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZyBiL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKaW5kZXggYjUwMjc0MS4uYmQ3MzkyYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCkBAIC0yMCw3ICsyMCw3IEBACiAKIGNvbmZpZyBTTkRfREFWSU5DSV9TT0NfU0ZGU0RSCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBTRkZTRFIiCi0JZGVwZW5kcyBvbiBTTkRfREFWSU5DSV9TT0MgJiYgTUFDSF9EQVZJTkNJX1NGRlNEUgorCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DICYmIE1BQ0hfU0ZGU0RSCiAJc2VsZWN0IFNORF9EQVZJTkNJX1NPQ19JMlMKIAlzZWxlY3QgU05EX1NPQ19QQ00zMDA4CiAJc2VsZWN0IFNGRlNEUl9GUEdBCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCA1NDg1MWYzLi45YjkwYjM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTE4Niw3ICsxODYsOCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZXZtX3NuZF9kZXZpY2UsICZldm1fc25kX2RldmRhdGEpOwogCWV2bV9zbmRfZGV2ZGF0YS5kZXYgPSAmZXZtX3NuZF9kZXZpY2UtPmRldjsKLQlldm1fc25kX2RldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmZXZtX3NuZF9kYXRhOworCXBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShldm1fc25kX2RldmljZSwgJmV2bV9zbmRfZGF0YSwKKwkJCQkgc2l6ZW9mKGV2bV9zbmRfZGF0YSkpOwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMoZXZtX3NuZF9kZXZpY2UsIGV2bV9zbmRfcmVzb3VyY2VzLAogCQkJCQkgICAgQVJSQVlfU0laRShldm1fc25kX3Jlc291cmNlcykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKaW5kZXggMGZlZTc3OS4uZmZkYjk0MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCkBAIC00OTksNiArNDk5LDEzIEBACiAKICNkZWZpbmUgREFWSU5DSV9JMlNfUkFURVMJU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBkYXZpbmNpX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKKwkudHJpZ2dlcgk9IGRhdmluY2lfaTJzX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IGRhdmluY2lfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGRhdmluY2lfaTJzX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGRhdmluY2lfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJkYXZpbmNpLWkycyIsCiAJLmlkID0gMCwKQEAgLTUxNCwxMiArNTIxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IERBVklOQ0lfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBkYXZpbmNpX2kyc19zdGFydHVwLAotCQkudHJpZ2dlciA9IGRhdmluY2lfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMgPSBkYXZpbmNpX2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gZGF2aW5jaV9pMnNfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJmRhdmluY2lfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoZGF2aW5jaV9pMnNfZGFpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggMzY2MDQ5ZC4uN2FmM2I1YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC0yODYsNyArMjg2LDcgQEAKIAkJCQkgICAgIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBkYXZpbmNpX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGRhdmluY2lfcGNtX29wcyA9IHsKIAkub3BlbiA9IAlkYXZpbmNpX3BjbV9vcGVuLAogCS5jbG9zZSA9IAlkYXZpbmNpX3BjbV9jbG9zZSwKIAkuaW9jdGwgPSAJc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYwppbmRleCA0OTM1ZDFiLi40MGVjY2ZlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMKQEAgLTI1LDcgKzI1LDkgQEAKIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2lmZGVmIENPTkZJR19TRkZTRFJfRlBHQQogI2luY2x1ZGUgPGFzbS9wbGF0LXNmZnNkci9zZmZzZHItZnBnYS5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxtYWNoL21jYnNwLmg+CiAjaW5jbHVkZSA8bWFjaC9lZG1hLmg+CkBAIC0zNCwzMSArMzYsNDUgQEAKICNpbmNsdWRlICJkYXZpbmNpLXBjbS5oIgogI2luY2x1ZGUgImRhdmluY2ktaTJzLmgiCiAKKy8qCisgKiBDTEtYIGFuZCBDTEtSIGFyZSB0aGUgaW5wdXRzIGZvciB0aGUgU2FtcGxlIFJhdGUgR2VuZXJhdG9yLgorICogRlNYIGFuZCBGU1IgYXJlIG91dHB1dHMsIGRyaXZlbiBieSB0aGUgc2FtcGxlIFJhdGUgR2VuZXJhdG9yLgorICovCisjZGVmaW5lIEFVRElPX0ZPUk1BVCAoU05EX1NPQ19EQUlGTVRfRFNQX0IgfAlcCisJCSAgICAgIFNORF9TT0NfREFJRk1UX0NCTV9DRlMgfAlcCisJCSAgICAgIFNORF9TT0NfREFJRk1UX0lCX05GKQorCiBzdGF0aWMgaW50IHNmZnNkcl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCWludCBmczsKIAlpbnQgcmV0ID0gMDsKIAotCS8qIFNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb246Ci0JICogQ0xLWCBhbmQgQ0xLUiBhcmUgdGhlIGlucHV0cyBmb3IgdGhlIFNhbXBsZSBSYXRlIEdlbmVyYXRvci4KLQkgKiBGU1ggYW5kIEZTUiBhcmUgb3V0cHV0cywgZHJpdmVuIGJ5IHRoZSBzYW1wbGUgUmF0ZSBHZW5lcmF0b3IuICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLAotCQkJCSAgU05EX1NPQ19EQUlGTVRfUklHSFRfSiB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTIHwKLQkJCQkgIFNORF9TT0NfREFJRk1UX0lCX05GKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIEZzcmVmIGNhbiBiZSAzMjAwMCwgNDQxMDAgb3IgNDgwMDAuICovCiAJZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCisjaWZuZGVmIENPTkZJR19TRkZTRFJfRlBHQQorCS8qIFdpdGhvdXQgdGhlIEZQR0EgbW9kdWxlLCB0aGUgRnMgaXMgZml4ZWQgYXQgNDQxMDAgSHogKi8KKwlpZiAoZnMgIT0gNDQxMDApIHsKKwkJcHJfZGVidWcoIndhcm5pbmc6IG9ubHkgNDQuMSBrSHogaXMgc3VwcG9ydGVkIHdpdGhvdXQgU0ZGU0RSIEZQR0EgbW9kdWxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmCisKKwkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBBVURJT19GT1JNQVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJcHJfZGVidWcoInNmZnNkcl9od19wYXJhbXM6IHJhdGUgPSAlZCBIelxuIiwgZnMpOwogCisjaWZuZGVmIENPTkZJR19TRkZTRFJfRlBHQQorCXJldHVybiAwOworI2Vsc2UKIAlyZXR1cm4gc2Zmc2RyX2ZwZ2Ffc2V0X2NvZGVjX2ZzKGZzKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNmZnNkcl9vcHMgPSB7CkBAIC0xMjcsNyArMTQzLDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNmZnNkcl9zbmRfZGV2aWNlLCAmc2Zmc2RyX3NuZF9kZXZkYXRhKTsKIAlzZmZzZHJfc25kX2RldmRhdGEuZGV2ID0gJnNmZnNkcl9zbmRfZGV2aWNlLT5kZXY7Ci0Jc2Zmc2RyX3NuZF9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJnNmZnNkcl9zbmRfZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoc2Zmc2RyX3NuZF9kZXZpY2UsICZzZmZzZHJfc25kX2RhdGEsCisJCQkJIHNpemVvZihzZmZzZHJfc25kX2RhdGEpKTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHNmZnNkcl9zbmRfZGV2aWNlLAogCQkJCQkgICAgc2Zmc2RyX3NuZF9yZXNvdXJjZXMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL0tjb25maWcgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcKaW5kZXggOTVjMTJiMi4uOWZjOTA4MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9mc2wvS2NvbmZpZwpAQCAtMSwxNyArMSwxOCBAQAogY29uZmlnIFNORF9TT0NfT0ZfU0lNUExFCiAJdHJpc3RhdGUKIAorIyBBU29DIHBsYXRmb3JtIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODYxMCBTT0MuICBUaGlzIGNvbXBpbGVzIGRyaXZlcnMKKyMgZm9yIHRoZSBTU0kgYW5kIHRoZSBFbG8gRE1BIGNvbnRyb2xsZXIuICBZb3Ugd2lsbCBzdGlsbCBuZWVkIHRvIHNlbGVjdAorIyBhIHBsYXRmb3JtIGRyaXZlciBhbmQgYSBjb2RlYyBkcml2ZXIuCiBjb25maWcgU05EX1NPQ19NUEM4NjEwCi0JYm9vbCAiQUxTQSBTb0Mgc3VwcG9ydCBmb3IgdGhlIE1QQzg2MTAgU09DIgotCWRlcGVuZHMgb24gTVBDODYxMF9IUENECi0JZGVmYXVsdCB5IGlmIE1QQzg2MTAKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvIHRoZSBTU0kKLSAgICAgICAgICBkZXZpY2Ugb24gYW4gTVBDODYxMC4KKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTVBDODYxMAogCiBjb25maWcgU05EX1NPQ19NUEM4NjEwX0hQQ0QKLQlib29sICJBTFNBIFNvQyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzg2MTAgSFBDRCBib2FyZCIKLQlkZXBlbmRzIG9uIFNORF9TT0NfTVBDODYxMAorCXRyaXN0YXRlICJBTFNBIFNvQyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzg2MTAgSFBDRCBib2FyZCIKKwkjIEkyQyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBDUzQyNzAgZHJpdmVyCisJZGVwZW5kcyBvbiBNUEM4NjEwX0hQQ0QgJiYgSTJDCisJc2VsZWN0IFNORF9TT0NfTVBDODYxMAogCXNlbGVjdCBTTkRfU09DX0NTNDI3MAogCXNlbGVjdCBTTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQQogCWRlZmF1bHQgeSBpZiBNUEM4NjEwX0hQQ0QKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUgYi9zb3VuZC9zb2MvZnNsL01ha2VmaWxlCmluZGV4IDAzNWRhNGEuLmY4NTEzNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2ZzbC9NYWtlZmlsZQpAQCAtMiwxMCArMiwxMyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfT0ZfU0lNUExFKSArPSBzb2Mtb2Ytc2ltcGxlLm8KIAogIyBNUEM4NjEwIEhQQ0QgTWFjaGluZSBTdXBwb3J0Ci1vYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwX0hQQ0QpICs9IG1wYzg2MTBfaHBjZC5vCitzbmQtc29jLW1wYzg2MTAtaHBjZC1vYmpzIDo9IG1wYzg2MTBfaHBjZC5vCitvYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwX0hQQ0QpICs9IHNuZC1zb2MtbXBjODYxMC1ocGNkLm8KIAogIyBNUEM4NjEwIFBsYXRmb3JtIFN1cHBvcnQKLW9iai0kKENPTkZJR19TTkRfU09DX01QQzg2MTApICs9IGZzbF9zc2kubyBmc2xfZG1hLm8KK3NuZC1zb2MtZnNsLXNzaS1vYmpzIDo9IGZzbF9zc2kubworc25kLXNvYy1mc2wtZG1hLW9ianMgOj0gZnNsX2RtYS5vCitvYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwKSArPSBzbmQtc29jLWZzbC1zc2kubyBzbmQtc29jLWZzbC1kbWEubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19NUEM1MjAwX0kyUykgKz0gbXBjNTIwMF9wc2NfaTJzLm8KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYwppbmRleCA2NDk5M2VkLi5iM2ViODU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYwpAQCAtMTQyLDcgKzE0Miw4IEBACiAJLmluZm8gICAJCT0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgIFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWCwKKwkJCQkgIFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWCB8CisJCQkJICBTTkRSVl9QQ01fSU5GT19QQVVTRSwKIAkuZm9ybWF0cwkJPSBGU0xETUFfUENNX0ZPUk1BVFMsCiAJLnJhdGVzICAJCT0gRlNMRE1BX1BDTV9SQVRFUywKIAkucmF0ZV9taW4gICAgICAgCT0gNTUxMiwKQEAgLTQ2NCwxMSArNDY1LDcgQEAKIAkJc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9MSU5LUzsgaSsrKSB7Ci0JCXN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvciAqbGluayA9ICZkbWFfcHJpdmF0ZS0+bGlua1tpXTsKLQotCQlsaW5rLT5zb3VyY2VfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7Ci0JCWxpbmstPmRlc3RfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7Ci0JCWxpbmstPm5leHQgPSBjcHVfdG9fYmU2NCh0ZW1wX2xpbmspOworCQlkbWFfcHJpdmF0ZS0+bGlua1tpXS5uZXh0ID0gY3B1X3RvX2JlNjQodGVtcF9saW5rKTsKIAogCQl0ZW1wX2xpbmsgKz0gc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvcik7CiAJfQpAQCAtNTI1LDc5ICs1MjIsOSBAQAogICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIGhhcmR3YXJlIHBhcmFtZXRlcnMgYWJvdXQgdGhlIG9wZW5lZCBzdHJlYW0gYW5kCiAgKiBwcm9ncmFtcyB0aGUgRE1BIGNvbnRyb2xsZXIgYWNjb3JkaW5nbHkuCiAgKgotICogTm90ZSB0aGF0IGR1ZSB0byBhIHF1aXJrIG9mIHRoZSBTU0kncyBTVFggcmVnaXN0ZXIsIHRoZSB0YXJnZXQgYWRkcmVzcwotICogZm9yIHRoZSBETUEgb3BlcmF0aW9ucyBkZXBlbmRzIG9uIHRoZSBzYW1wbGUgc2l6ZS4gIFNvIHdlIGRvbid0IHByb2dyYW0KLSAqIHRoZSBkZXN0X2FkZHIgKGZvciBwbGF5YmFjayAtLSBzb3VyY2VfYWRkciBmb3IgY2FwdHVyZSkgZmllbGRzIGluIHRoZQotICogbGluayBkZXNjcmlwdG9ycyBoZXJlLiAgV2UgZG8gdGhhdCBpbiBmc2xfZG1hX3ByZXBhcmUoKQotICovCi1zdGF0aWMgaW50IGZzbF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IGZzbF9kbWFfcHJpdmF0ZSAqZG1hX3ByaXZhdGUgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlkbWFfYWRkcl90IHRlbXBfYWRkcjsgICAvKiBQb2ludGVyIHRvIG5leHQgcGVyaW9kICovCi0KLQl1bnNpZ25lZCBpbnQgaTsKLQotCS8qIEdldCBhbGwgdGhlIHBhcmFtZXRlcnMgd2UgbmVlZCAqLwotCXNpemVfdCBidWZmZXJfc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKLQlzaXplX3QgcGVyaW9kX3NpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7Ci0KLQkvKiBJbml0aWFsaXplIG91ciBETUEgdHJhY2tpbmcgdmFyaWFibGVzICovCi0JZG1hX3ByaXZhdGUtPnBlcmlvZF9zaXplID0gcGVyaW9kX3NpemU7Ci0JZG1hX3ByaXZhdGUtPm51bV9wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKLQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsgYnVmZmVyX3NpemU7Ci0JZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgKwotCQkoTlVNX0RNQV9MSU5LUyAqIHBlcmlvZF9zaXplKTsKLQlpZiAoZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA+PSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQpCi0JCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzOwotCi0JLyoKLQkgKiBUaGUgYWN0dWFsIGFkZHJlc3MgaW4gU1RYMCAoZGVzdGluYXRpb24gZm9yIHBsYXliYWNrLCBzb3VyY2UgZm9yCi0JICogY2FwdHVyZSkgaXMgYmFzZWQgb24gdGhlIHNhbXBsZSBzaXplLCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgc2FtcGxlCi0JICogc2l6ZSBpbiB0aGlzIGZ1bmN0aW9uLCBzbyB3ZSdsbCBoYXZlIHRvIGFkanVzdCB0aGF0IGxhdGVyLiAgU2VlCi0JICogY29tbWVudHMgaW4gZnNsX2RtYV9wcmVwYXJlKCkuCi0JICoKLQkgKiBUaGUgRE1BIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBhIGNhY2hlLCBzbyB0aGUgQ1BVIGRvZXMgbm90Ci0JICogbmVlZCB0byB0ZWxsIGl0IHRvIGZsdXNoIGl0cyBjYWNoZS4gIEhvd2V2ZXIsIHRoZSBETUEKLQkgKiBjb250cm9sbGVyIGRvZXMgbmVlZCB0byB0ZWxsIHRoZSBDUFUgdG8gZmx1c2ggaXRzIGNhY2hlLgotCSAqIFRoYXQncyB3aGF0IHRoZSBTTk9PUCBiaXQgZG9lcy4KLQkgKgotCSAqIEFsc28sIGV2ZW4gdGhvdWdoIHRoZSBETUEgY29udHJvbGxlciBzdXBwb3J0cyAzNi1iaXQgYWRkcmVzc2luZywgZm9yCi0JICogc2ltcGxpY2l0eSB3ZSBjdXJyZW50bHkgc3VwcG9ydCBvbmx5IDMyLWJpdCBhZGRyZXNzZXMgZm9yIHRoZSBhdWRpbwotCSAqIGJ1ZmZlciBpdHNlbGYuCi0JICovCi0JdGVtcF9hZGRyID0gc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmFkZHI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9MSU5LUzsgaSsrKSB7Ci0JCXN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvciAqbGluayA9ICZkbWFfcHJpdmF0ZS0+bGlua1tpXTsKLQotCQlsaW5rLT5jb3VudCA9IGNwdV90b19iZTMyKHBlcmlvZF9zaXplKTsKLQotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCWxpbmstPnNvdXJjZV9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKLQkJZWxzZQotCQkJbGluay0+ZGVzdF9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKLQotCQl0ZW1wX2FkZHIgKz0gcGVyaW9kX3NpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZnNsX2RtYV9wcmVwYXJlIC0gcHJlcGFyZSB0aGUgRE1BIHJlZ2lzdGVycyBmb3IgcGxheWJhY2suCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHNwZWNpZmljcyBvZiB0aGUgYXVkaW8gZGF0YSBhcmUga25vd24sCi0gKiBpLmUuIHNuZF9wY21fcnVudGltZSBpcyBpbml0aWFsaXplZC4KLSAqCi0gKiBJbiB0aGlzIGZ1bmN0aW9uLCB3ZSBmaW5pc2ggcHJvZ3JhbW1pbmcgdGhlIHJlZ2lzdGVycyBvZiB0aGUgRE1BCi0gKiBjb250cm9sbGVyIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgc2FtcGxlIHNpemUuCi0gKgotICogT25lIG9mIHRoZSBkcmF3YmFja3Mgd2l0aCBiaWctZW5kaWFuIGlzIHRoYXQgd2hlbiBjb3B5aW5nIGludGVnZXJzIG9mCi0gKiBkaWZmZXJlbnQgc2l6ZXMgdG8gYSBmaXhlZC1zaXplZCByZWdpc3RlciwgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlCi0gKiBpbnRlZ2VyIG11c3QgYmUgY29waWVkIGlzIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZWdlci4KKyAqIE9uZSBkcmF3YmFjayBvZiBiaWctZW5kaWFuIGlzIHRoYXQgd2hlbiBjb3B5aW5nIGludGVnZXJzIG9mIGRpZmZlcmVudAorICogc2l6ZXMgdG8gYSBmaXhlZC1zaXplZCByZWdpc3RlciwgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIGludGVnZXIgbXVzdCBiZQorICogY29waWVkIGlzIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZWdlci4KICAqCiAgKiBGb3IgZXhhbXBsZSwgaWYgUCBpcyB0aGUgYWRkcmVzcyBvZiBhIDMyLWJpdCByZWdpc3RlciwgYW5kIFggaXMgYSAzMi1iaXQKICAqIGludGVnZXIsIHRoZW4gWCBzaG91bGQgYmUgY29waWVkIHRvIGFkZHJlc3MgUC4gIEhvd2V2ZXIsIGlmIFggaXMgYSAxNi1iaXQKQEAgLTYxMywyMiArNTQwLDU4IEBACiAgKiBhbmQgOCBieXRlcyBhdCBhIHRpbWUpLiAgU28gd2UgZG8gbm90IHN1cHBvcnQgcGFja2VkIDI0LWJpdCBzYW1wbGVzLgogICogMjQtYml0IGRhdGEgbXVzdCBiZSBwYWRkZWQgdG8gMzIgYml0cy4KICAqLwotc3RhdGljIGludCBmc2xfZG1hX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IGZzbF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IGZzbF9kbWFfcHJpdmF0ZSAqZG1hX3ByaXZhdGUgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNjc3JfZG1hX2NoYW5uZWwgX19pb21lbSAqZG1hX2NoYW5uZWwgPSBkbWFfcHJpdmF0ZS0+ZG1hX2NoYW5uZWw7Ci0JdTMyIG1yOwotCXVuc2lnbmVkIGludCBpOwotCWRtYV9hZGRyX3Qgc3NpX3N4eF9waHlzOwkvKiBCdXMgYWRkcmVzcyBvZiBTU0kgU1RYIHJlZ2lzdGVyICovCi0JdW5zaWduZWQgaW50IGZyYW1lX3NpemU7CS8qIE51bWJlciBvZiBieXRlcyBwZXIgZnJhbWUgKi8KIAotCXNzaV9zeHhfcGh5cyA9IGRtYV9wcml2YXRlLT5zc2lfc3h4X3BoeXM7CisJLyogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSAqLworCXVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZSA9CisJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKSk7CisKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIGZyYW1lICovCisJdW5zaWduZWQgaW50IGZyYW1lX3NpemUgPSAyICogKHNhbXBsZV9zaXplIC8gOCk7CisKKwkvKiBCdXMgYWRkcmVzcyBvZiBTU0kgU1RYIHJlZ2lzdGVyICovCisJZG1hX2FkZHJfdCBzc2lfc3h4X3BoeXMgPSBkbWFfcHJpdmF0ZS0+c3NpX3N4eF9waHlzOworCisJLyogU2l6ZSBvZiB0aGUgRE1BIGJ1ZmZlciwgaW4gYnl0ZXMgKi8KKwlzaXplX3QgYnVmZmVyX3NpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIHBlcmlvZCAqLworCXNpemVfdCBwZXJpb2Rfc2l6ZSA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKKworCS8qIFBvaW50ZXIgdG8gbmV4dCBwZXJpb2QgKi8KKwlkbWFfYWRkcl90IHRlbXBfYWRkciA9IHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hZGRyOworCisJLyogUG9pbnRlciB0byBETUEgY29udHJvbGxlciAqLworCXN0cnVjdCBjY3NyX2RtYV9jaGFubmVsIF9faW9tZW0gKmRtYV9jaGFubmVsID0gZG1hX3ByaXZhdGUtPmRtYV9jaGFubmVsOworCisJdTMyIG1yOyAvKiBETUEgTW9kZSBSZWdpc3RlciAqLworCisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBJbml0aWFsaXplIG91ciBETUEgdHJhY2tpbmcgdmFyaWFibGVzICovCisJZG1hX3ByaXZhdGUtPnBlcmlvZF9zaXplID0gcGVyaW9kX3NpemU7CisJZG1hX3ByaXZhdGUtPm51bV9wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKKwlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsgYnVmZmVyX3NpemU7CisJZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgKworCQkoTlVNX0RNQV9MSU5LUyAqIHBlcmlvZF9zaXplKTsKKworCWlmIChkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID49IGRtYV9wcml2YXRlLT5kbWFfYnVmX2VuZCkKKwkJLyogVGhpcyBoYXBwZW5zIGlmIHRoZSBudW1iZXIgb2YgcGVyaW9kcyA9PSBOVU1fRE1BX0xJTktTICovCisJCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzOwogCiAJbXIgPSBpbl9iZTMyKCZkbWFfY2hhbm5lbC0+bXIpICYgfihDQ1NSX0RNQV9NUl9CV0NfTUFTSyB8CiAJCSAgQ0NTUl9ETUFfTVJfU0FIVFNfTUFTSyB8IENDU1JfRE1BX01SX0RBSFRTX01BU0spOwogCi0Jc3dpdGNoIChydW50aW1lLT5zYW1wbGVfYml0cykgeworCS8qIER1ZSB0byBhIHF1aXJrIG9mIHRoZSBTU0kncyBTVFggcmVnaXN0ZXIsIHRoZSB0YXJnZXQgYWRkcmVzcworCSAqIGZvciB0aGUgRE1BIG9wZXJhdGlvbnMgZGVwZW5kcyBvbiB0aGUgc2FtcGxlIHNpemUuICBTbyB3ZSBjYWxjdWxhdGUKKwkgKiB0aGF0IG9mZnNldCBoZXJlLiAgV2hpbGUgd2UncmUgYXQgaXQsIGFsc28gdGVsbCB0aGUgRE1BIGNvbnRyb2xsZXIKKwkgKiBob3cgbXVjaCBkYXRhIHRvIHRyYW5zZmVyIHBlciBzYW1wbGUuCisJICovCisJc3dpdGNoIChzYW1wbGVfc2l6ZSkgewogCWNhc2UgODoKIAkJbXIgfD0gQ0NTUl9ETUFfTVJfREFIVFNfMSB8IENDU1JfRE1BX01SX1NBSFRTXzE7CiAJCXNzaV9zeHhfcGh5cyArPSAzOwpAQCAtNjQxLDEyICs2MDQsMTIgQEAKIAkJbXIgfD0gQ0NTUl9ETUFfTVJfREFIVFNfNCB8IENDU1JfRE1BX01SX1NBSFRTXzQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwogCQlkZXZfZXJyKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsCi0JCQkidW5zdXBwb3J0ZWQgc2FtcGxlIHNpemUgJXVcbiIsIHJ1bnRpbWUtPnNhbXBsZV9iaXRzKTsKKwkJCSJ1bnN1cHBvcnRlZCBzYW1wbGUgc2l6ZSAldVxuIiwgc2FtcGxlX3NpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmcmFtZV9zaXplID0gcnVudGltZS0+ZnJhbWVfYml0cyAvIDg7CiAJLyoKIAkgKiBCV0Mgc2hvdWxkIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIHRoZSBmcmFtZSBzaXplLiAgQldDIGRldGVybWluZXMKIAkgKiBob3cgbWFueSBieXRlcyBhcmUgc2VudC9yZWNlaXZlZCBiZWZvcmUgdGhlIERNQSBjb250cm9sbGVyIGNoZWNrcyB0aGUKQEAgLTY1NSw3ICs2MTgsNiBAQAogCSAqIGNhcHR1cmUsIHRoZSByZWNlaXZlIEZJRk8gaXMgdHJpZ2dlcmVkIHdoZW4gaXQgY29udGFpbnMgb25lIGZyYW1lLCBzbwogCSAqIHdlIHdhbnQgdG8gcmVjZWl2ZSBvbmUgZnJhbWUgYXQgYSB0aW1lLgogCSAqLwotCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCW1yIHw9IENDU1JfRE1BX01SX0JXQygyICogZnJhbWVfc2l6ZSk7CiAJZWxzZQpAQCAtNjYzLDE2ICs2MjUsNDggQEAKIAogCW91dF9iZTMyKCZkbWFfY2hhbm5lbC0+bXIsIG1yKTsKIAotCS8qCi0JICogUHJvZ3JhbSB0aGUgYWRkcmVzcyBvZiB0aGUgRE1BIHRyYW5zZmVyIHRvL2Zyb20gdGhlIFNTSS4KLQkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9MSU5LUzsgaSsrKSB7CiAJCXN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvciAqbGluayA9ICZkbWFfcHJpdmF0ZS0+bGlua1tpXTsKIAotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJbGluay0+Y291bnQgPSBjcHVfdG9fYmUzMihwZXJpb2Rfc2l6ZSk7CisKKwkJLyogRXZlbiB0aG91Z2ggdGhlIERNQSBjb250cm9sbGVyIHN1cHBvcnRzIDM2LWJpdCBhZGRyZXNzaW5nLAorCQkgKiBmb3Igc2ltcGxpY2l0eSB3ZSBhbGxvdyBvbmx5IDMyLWJpdCBhZGRyZXNzZXMgZm9yIHRoZSBhdWRpbworCQkgKiBidWZmZXIgaXRzZWxmLiAgVGhpcyB3YXMgZW5mb3JjZWQgaW4gZnNsX2RtYV9uZXcoKSB3aXRoIHRoZQorCQkgKiBETUEgbWFzay4KKwkJICoKKwkJICogVGhlIHNub29wIGJpdCB0ZWxscyB0aGUgRE1BIGNvbnRyb2xsZXIgd2hldGhlciBpdCBzaG91bGQgdGVsbAorCQkgKiB0aGUgRUNNIHRvIHNub29wIGR1cmluZyBhIHJlYWQgb3Igd3JpdGUgdG8gYW4gYWRkcmVzcy4gRm9yCisJCSAqIGF1ZGlvLCB3ZSB1c2UgRE1BIHRvIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBtZW1vcnkgYW5kIGFuIEkvTworCQkgKiBkZXZpY2UgKHRoZSBTU0kncyBTVFgwIG9yIFNSWDAgcmVnaXN0ZXIpLiBTbm9vcGluZyBpcyBvbmx5CisJCSAqIG5lZWRlZCBpZiB0aGVyZSBpcyBhIGNhY2hlLCBzbyB3ZSBuZWVkIHRvIHNub29wIG1lbW9yeQorCQkgKiBhZGRyZXNzZXMgb25seS4gIEZvciBwbGF5YmFjaywgdGhhdCBtZWFucyB3ZSBzbm9vcCB0aGUgc291cmNlCisJCSAqIGJ1dCBub3QgdGhlIGRlc3RpbmF0aW9uLiAgRm9yIGNhcHR1cmUsIHdlIHNub29wIHRoZQorCQkgKiBkZXN0aW5hdGlvbiBidXQgbm90IHRoZSBzb3VyY2UuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBmYWlsaW5nIHRvIHNub29wIHByb3Blcmx5IGlzIHVubGlrZWx5IHRvIGNhdXNlCisJCSAqIGNhY2hlIGluY29oZXJlbmN5IGlmIHRoZSBwZXJpb2Qgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUKKwkJICogc2l6ZSBvZiBMMSBjYWNoZS4gIFRoaXMgaXMgYmVjYXVzZSBmaWxsaW5nIGluIG9uZSBwZXJpb2Qgd2lsbAorCQkgKiBmbHVzaCBvdXQgdGhlIGRhdGEgZm9yIHRoZSBwcmV2aW91cyBwZXJpb2QuICBTbyBpZiB5b3UKKwkJICogaW5jcmVhc2VkIHBlcmlvZF9ieXRlc19taW4gdG8gYSBsYXJnZSBlbm91Z2ggc2l6ZSwgeW91IG1pZ2h0CisJCSAqIGdldCBtb3JlIHBlcmZvcm1hbmNlIGJ5IG5vdCBzbm9vcGluZywgYW5kIHlvdSdsbCBzdGlsbCBiZQorCQkgKiBva2F5LgorCQkgKi8KKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCWxpbmstPnNvdXJjZV9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKKwkJCWxpbmstPnNvdXJjZV9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX1NOT09QKTsKKwogCQkJbGluay0+ZGVzdF9hZGRyID0gY3B1X3RvX2JlMzIoc3NpX3N4eF9waHlzKTsKLQkJZWxzZQorCQkJbGluay0+ZGVzdF9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX05PU05PT1ApOworCQl9IGVsc2UgewogCQkJbGluay0+c291cmNlX2FkZHIgPSBjcHVfdG9fYmUzMihzc2lfc3h4X3BoeXMpOworCQkJbGluay0+c291cmNlX2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfTk9TTk9PUCk7CisKKwkJCWxpbmstPmRlc3RfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7CisJCQlsaW5rLT5kZXN0X2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOworCQl9CisKKwkJdGVtcF9hZGRyICs9IHBlcmlvZF9zaXplOwogCX0KIAogCXJldHVybiAwOwpAQCAtODA4LDcgKzgwMiw2IEBACiAJLmlvY3RsICAJPSBzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zICAgICAgPSBmc2xfZG1hX2h3X3BhcmFtcywKIAkuaHdfZnJlZQk9IGZzbF9kbWFfaHdfZnJlZSwKLQkucHJlcGFyZQk9IGZzbF9kbWFfcHJlcGFyZSwKIAkucG9pbnRlcgk9IGZzbF9kbWFfcG9pbnRlciwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKaW5kZXggYzZkNmViNy4uMTY5YmNhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlcgogICogQHBsYXliYWNrOiB0aGUgbnVtYmVyIG9mIHBsYXliYWNrIHN0cmVhbXMgb3BlbmVkCiAgKiBAY2FwdHVyZTogdGhlIG51bWJlciBvZiBjYXB0dXJlIHN0cmVhbXMgb3BlbmVkCisgKiBAYXN5bmNocm9ub3VzOiAwPXN5bmNocm9ub3VzIG1vZGUsIDE9YXN5bmNocm9ub3VzIG1vZGUKICAqIEBjcHVfZGFpOiB0aGUgQ1BVIERBSSBmb3IgdGhpcyBkZXZpY2UKICAqIEBkZXZfYXR0cjogdGhlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0dXJlCiAgKiBAc3RhdHM6IFNTSSBzdGF0aXN0aWNzCkBAIC04Niw2ICs4Nyw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXVuc2lnbmVkIGludCBwbGF5YmFjazsKIAl1bnNpZ25lZCBpbnQgY2FwdHVyZTsKKwlpbnQgYXN5bmNocm9ub3VzOwogCXN0cnVjdCBzbmRfc29jX2RhaSBjcHVfZGFpOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyOwogCkBAIC0zMDEsOSArMzAzLDEwIEBACiAJCSAqCiAJCSAqIEZJWE1FOiBMaXR0bGUtZW5kaWFuIHNhbXBsZXMgcmVxdWlyZSBhIGRpZmZlcmVudCBzaGlmdCBkaXIKIAkJICovCi0JCWNscnNldGJpdHNfYmUzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9JMlNfTU9ERV9NQVNLLAotCQkJQ0NTUl9TU0lfU0NSX1RGUl9DTEtfRElTIHwKLQkJCUNDU1JfU1NJX1NDUl9JMlNfTU9ERV9TTEFWRSB8IENDU1JfU1NJX1NDUl9TWU4pOworCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c2NyLAorCQkJQ0NTUl9TU0lfU0NSX0kyU19NT0RFX01BU0sgfCBDQ1NSX1NTSV9TQ1JfU1lOLAorCQkJQ0NTUl9TU0lfU0NSX1RGUl9DTEtfRElTIHwgQ0NTUl9TU0lfU0NSX0kyU19NT0RFX1NMQVZFCisJCQl8IChzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzID8gMCA6IENDU1JfU1NJX1NDUl9TWU4pKTsKIAogCQlvdXRfYmUzMigmc3NpLT5zdGNyLAogCQkJIENDU1JfU1NJX1NUQ1JfVFhCSVQwIHwgQ0NTUl9TU0lfU1RDUl9URkVOMCB8CkBAIC0zODIsMTAgKzM4NSwxNSBAQAogCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCiAJCQlmaXJzdF9ydW50aW1lLT5yYXRlLCBmaXJzdF9ydW50aW1lLT5yYXRlKTsKIAotCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKLQkJCVNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUywKLQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzLAotCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMpOworCQkvKiBJZiB3ZSdyZSBpbiBzeW5jaHJvbm91cyBtb2RlLCB0aGVuIHdlIG5lZWQgdG8gY29uc3RyYWluCisJCSAqIHRoZSBzYW1wbGUgc2l6ZSBhcyB3ZWxsLiAgV2UgZG9uJ3Qgc3VwcG9ydCBpbmRlcGVuZGVudCBzYW1wbGUKKwkJICogcmF0ZXMgaW4gYXN5bmNocm9ub3VzIG1vZGUuCisJCSAqLworCQlpZiAoIXNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMpCisJCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMsCisJCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMsCisJCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMpOwogCiAJCXNzaV9wcml2YXRlLT5zZWNvbmRfc3RyZWFtID0gc3Vic3RyZWFtOwogCX0KQEAgLTQwMCw3ICs0MDgsNyBAQAogfQogCiAvKioKLSAqIGZzbF9zc2lfcHJlcGFyZTogcHJlcGFyZSB0aGUgU1NJLgorICogZnNsX3NzaV9od19wYXJhbXMgLSBwcm9ncmFtIHRoZSBzYW1wbGUgc2l6ZQogICoKICAqIE1vc3Qgb2YgdGhlIFNTSSByZWdpc3RlcnMgaGF2ZSBiZWVuIHByb2dyYW1tZWQgaW4gdGhlIHN0YXJ0dXAgZnVuY3Rpb24sCiAgKiBidXQgdGhlIHdvcmQgbGVuZ3RoIG11c3QgYmUgcHJvZ3JhbW1lZCBoZXJlLiAgVW5mb3J0dW5hdGVseSwgcHJvZ3JhbW1pbmcKQEAgLTQxMiwyMyArNDIwLDI3IEBACiAgKiBOb3RlOiBUaGUgU3hDQ1IuREMgYW5kIFN4Q0NSLlBNIGJpdHMgYXJlIG9ubHkgdXNlZCBpZiB0aGUgU1NJIGlzIHRoZQogICogY2xvY2sgbWFzdGVyLgogICovCi1zdGF0aWMgaW50IGZzbF9zc2lfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorc3RhdGljIGludCBmc2xfc3NpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQogewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmc2xfc3NpX3ByaXZhdGUgKnNzaV9wcml2YXRlID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQotCXN0cnVjdCBjY3NyX3NzaSBfX2lvbWVtICpzc2kgPSBzc2lfcHJpdmF0ZS0+c3NpOworCXN0cnVjdCBmc2xfc3NpX3ByaXZhdGUgKnNzaV9wcml2YXRlID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHN1YnN0cmVhbSA9PSBzc2lfcHJpdmF0ZS0+Zmlyc3Rfc3RyZWFtKSB7Ci0JCXUzMiB3bDsKKwkJc3RydWN0IGNjc3Jfc3NpIF9faW9tZW0gKnNzaSA9IHNzaV9wcml2YXRlLT5zc2k7CisJCXVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZSA9CisJCQlzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpOworCQl1MzIgd2wgPSBDQ1NSX1NTSV9TeENDUl9XTChzYW1wbGVfc2l6ZSk7CiAKIAkJLyogVGhlIFNTSSBzaG91bGQgYWx3YXlzIGJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnRzIChTU0lFTj0wKSAqLwotCQl3bCA9IENDU1JfU1NJX1N4Q0NSX1dMKHNuZF9wY21fZm9ybWF0X3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCkpOwogCiAJCS8qIEluIHN5bmNocm9ub3VzIG1vZGUsIHRoZSBTU0kgdXNlcyBTVENDUiBmb3IgY2FwdHVyZSAqLwotCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c3RjY3IsIENDU1JfU1NJX1N4Q0NSX1dMX01BU0ssIHdsKTsKKwkJaWYgKChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB8fAorCQkgICAgIXNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMpCisJCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c3RjY3IsCisJCQkJCUNDU1JfU1NJX1N4Q0NSX1dMX01BU0ssIHdsKTsKKwkJZWxzZQorCQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnNyY2NyLAorCQkJCQlDQ1NSX1NTSV9TeENDUl9XTF9NQVNLLCB3bCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NTIsMjggKzQ2NCwzMyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfU1NJRU4pOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKIAkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJCWNscmJpdHMzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9TU0lFTik7CiAJCQlzZXRiaXRzMzIoJnNzaS0+c2NyLAogCQkJCUNDU1JfU1NJX1NDUl9TU0lFTiB8IENDU1JfU1NJX1NDUl9URSk7CiAJCX0gZWxzZSB7Ci0JCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfU1NJRU4pOworCQkJbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwOworCiAJCQlzZXRiaXRzMzIoJnNzaS0+c2NyLAogCQkJCUNDU1JfU1NJX1NDUl9TU0lFTiB8IENDU1JfU1NJX1NDUl9SRSk7CiAKLQkJCS8qCi0JCQkgKiBJIHRoaW5rIHdlIG5lZWQgdGhpcyBkZWxheSB0byBhbGxvdyB0aW1lIGZvciB0aGUgU1NJCi0JCQkgKiB0byBwdXQgZGF0YSBpbnRvIGl0cyBGSUZPLiAgV2l0aG91dCBpdCwgQUxTQSBzdGFydHMKLQkJCSAqIHRvIGNvbXBsYWluIGFib3V0IG92ZXJydW5zLgorCQkJLyogV2FpdCB1bnRpbCB0aGUgU1NJIGhhcyBmaWxsZWQgaXRzIEZJRk8uIFdpdGhvdXQgdGhpcworCQkJICogZGVsYXksIEFMU0EgY29tcGxhaW5zIGFib3V0IG92ZXJydW5zLiAgV2hlbiB0aGUgRklGTworCQkJICogaXMgZnVsbCwgdGhlIERNQSBjb250cm9sbGVyIGluaXRpYXRlcyBpdHMgZmlyc3QKKwkJCSAqIHRyYW5zZmVyLiAgVW50aWwgdGhlbiwgaG93ZXZlciwgdGhlIERNQSdzIERBUgorCQkJICogcmVnaXN0ZXIgaXMgemVybywgd2hpY2ggdHJhbnNsYXRlcyB0byBhbgorCQkJICogb3V0LW9mLWJvdW5kcyBwb2ludGVyLiAgVGhpcyBtYWtlcyBBTFNBIHRoaW5rIGFuCisJCQkgKiBvdmVycnVuIGhhcyBvY2N1cnJlZC4KIAkJCSAqLwotCQkJbWRlbGF5KDEpOworCQkJd2hpbGUgKCEoaW5fYmUzMigmc3NpLT5zaXNyKSAmIENDU1JfU1NJX1NJU1JfUkZGMCkgJiYKKwkJCSAgICAgICAoamlmZmllcyA8IHRpbWVvdXQpKTsKKwkJCWlmICghKGluX2JlMzIoJnNzaS0+c2lzcikgJiBDQ1NSX1NTSV9TSVNSX1JGRjApKQorCQkJCXJldHVybiAtRUlPOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CiAJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1RFKTsKQEAgLTU2Myw2ICs1ODAsMTUgQEAKIC8qKgogICogZnNsX3NzaV9kYWlfdGVtcGxhdGU6IHRlbXBsYXRlIENQVSBEQUkgZm9yIHRoZSBTU0kKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZnNsX3NzaV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gZnNsX3NzaV9zdGFydHVwLAorCS5od19wYXJhbXMJPSBmc2xfc3NpX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSBmc2xfc3NpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gZnNsX3NzaV90cmlnZ2VyLAorCS5zZXRfc3lzY2xrCT0gZnNsX3NzaV9zZXRfc3lzY2xrLAorCS5zZXRfZm10CT0gZnNsX3NzaV9zZXRfZm10LAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBmc2xfc3NpX2RhaV90ZW1wbGF0ZSA9IHsKIAkucGxheWJhY2sgPSB7CiAJCS8qIFRoZSBTU0kgZG9lcyBub3Qgc3VwcG9ydCBtb25hdXJhbCBhdWRpby4gKi8KQEAgLTU3NywxNCArNjAzLDcgQEAKIAkJLnJhdGVzID0gRlNMU1NJX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBGU0xTU0lfSTJTX0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IGZzbF9zc2lfc3RhcnR1cCwKLQkJLnByZXBhcmUgPSBmc2xfc3NpX3ByZXBhcmUsCi0JCS5zaHV0ZG93biA9IGZzbF9zc2lfc2h1dGRvd24sCi0JCS50cmlnZ2VyID0gZnNsX3NzaV90cmlnZ2VyLAotCQkuc2V0X3N5c2NsayA9IGZzbF9zc2lfc2V0X3N5c2NsaywKLQkJLnNldF9mbXQgPSBmc2xfc3NpX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmZzbF9zc2lfZGFpX29wcywKIH07CiAKIC8qKgpAQCAtNjU0LDYgKzY3Myw3IEBACiAJc3NpX3ByaXZhdGUtPnNzaV9waHlzID0gc3NpX2luZm8tPnNzaV9waHlzOwogCXNzaV9wcml2YXRlLT5pcnEgPSBzc2lfaW5mby0+aXJxOwogCXNzaV9wcml2YXRlLT5kZXYgPSBzc2lfaW5mby0+ZGV2OworCXNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMgPSBzc2lfaW5mby0+YXN5bmNocm9ub3VzOwogCiAJc3NpX3ByaXZhdGUtPmRldi0+ZHJpdmVyX2RhdGEgPSBmc2xfc3NpX2RhaTsKIApAQCAtNzA0LDYgKzcyNCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnNsX3NzaV9kZXN0cm95X2RhaSk7CiAKK3N0YXRpYyBpbnQgX19pbml0IGZzbF9zc2lfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkZyZWVzY2FsZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIChTU0kpIEFTb0MgRHJpdmVyXG4iKTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZnNsX3NzaV9pbml0KTsKKwogTU9EVUxFX0FVVEhPUigiVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIFN5bmNocm9ub3VzIFNlcmlhbCBJbnRlcmZhY2UgKFNTSSkgQVNvQyBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmgKaW5kZXggODNiNDRkNy4uZWFkZTAxZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmgKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogICogc3NpX3BoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFNTSSByZWdpc3RlcnMKICAqIGlycTogSVJRIG9mIHRoaXMgU1NJCiAgKiBkZXY6IHN0cnVjdCBkZXZpY2UsIHVzZWQgdG8gY3JlYXRlIHRoZSBzeXNmcyBzdGF0aXN0aWNzIGZpbGUKKyAqIGFzeW5jaHJvbm91czogMD1zeW5jaHJvbm91cyBtb2RlLCAxPWFzeW5jaHJvbm91cyBtb2RlCiAqLwogc3RydWN0IGZzbF9zc2lfaW5mbyB7CiAJdW5zaWduZWQgaW50IGlkOwpAQCAtMjE1LDYgKzIxNiw3IEBACiAJZG1hX2FkZHJfdCBzc2lfcGh5czsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgYXN5bmNocm9ub3VzOwogfTsKIAogc3RydWN0IHNuZF9zb2NfZGFpICpmc2xfc3NpX2NyZWF0ZV9kYWkoc3RydWN0IGZzbF9zc2lfaW5mbyAqc3NpX2luZm8pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYyBiL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMKaW5kZXggOWViMWNlMS4uM2FhNzI5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jCkBAIC00NjgsNiArNDY4LDE2IEBACiAvKioKICAqIHBzY19pMnNfZGFpX3RlbXBsYXRlOiB0ZW1wbGF0ZSBDUFUgRGlnaXRhbCBBdWRpbyBJbnRlcmZhY2UKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHNjX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gcHNjX2kyc19zdGFydHVwLAorCS5od19wYXJhbXMJPSBwc2NfaTJzX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHBzY19pMnNfaHdfZnJlZSwKKwkuc2h1dGRvd24JPSBwc2NfaTJzX3NodXRkb3duLAorCS50cmlnZ2VyCT0gcHNjX2kyc190cmlnZ2VyLAorCS5zZXRfc3lzY2xrCT0gcHNjX2kyc19zZXRfc3lzY2xrLAorCS5zZXRfZm10CT0gcHNjX2kyc19zZXRfZm10LAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBwc2NfaTJzX2RhaV90ZW1wbGF0ZSA9IHsKIAkucGxheWJhY2sgPSB7CiAJCS5jaGFubmVsc19taW4gPSAyLApAQCAtNDgxLDE1ICs0OTEsNyBAQAogCQkucmF0ZXMgPSBQU0NfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFBTQ19JMlNfRk9STUFUUywKIAl9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gcHNjX2kyc19zdGFydHVwLAotCQkuaHdfcGFyYW1zID0gcHNjX2kyc19od19wYXJhbXMsCi0JCS5od19mcmVlID0gcHNjX2kyc19od19mcmVlLAotCQkuc2h1dGRvd24gPSBwc2NfaTJzX3NodXRkb3duLAotCQkudHJpZ2dlciA9IHBzY19pMnNfdHJpZ2dlciwKLQkJLnNldF9zeXNjbGsgPSBwc2NfaTJzX3NldF9zeXNjbGssCi0JCS5zZXRfZm10ID0gcHNjX2kyc19zZXRfZm10LAotCX0sCisJLm9wcyA9ICZwc2NfaTJzX2RhaV9vcHMsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCmluZGV4IGFjZjM5YTYuLmVmNjdkMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwpAQCAtMzUzLDYgKzM1MywxMSBAQAogCX0KIAlzc2lfaW5mby5pcnEgPSBtYWNoaW5lX2RhdGEtPnNzaV9pcnE7CiAKKwkvKiBEbyB3ZSB3YW50IHRvIHVzZSBhc3luY2hyb25vdXMgbW9kZT8gKi8KKwlzc2lfaW5mby5hc3luY2hyb25vdXMgPQorCQlvZl9maW5kX3Byb3BlcnR5KG5wLCAiZnNsLHNzaS1hc3luY2hyb25vdXMiLCBOVUxMKSA/IDEgOiAwOworCWlmIChzc2lfaW5mby5hc3luY2hyb25vdXMpCisJCWRldl9pbmZvKCZvZmRldi0+ZGV2LCAidXNpbmcgYXN5bmNocm9ub3VzIG1vZGVcbiIpOwogCiAJLyogTWFwIHRoZSBnbG9iYWwgdXRpbGl0aWVzIHJlZ2lzdGVycy4gKi8KIAlndXRzX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxtcGM4NjEwLWd1dHMiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IDRmN2YwNDAuLjY3NTczMmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIAogY29uZmlnIFNORF9PTUFQX1NPQ19OODEwCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBOb2tpYSBOODEwIgotCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfTk9LSUFfTjgxMAorCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfTk9LSUFfTjgxMCAmJiBJMkMKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IE9NQVBfTVVYCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKQEAgLTE3LDcgKzE3LDcgQEAKIAogY29uZmlnIFNORF9PTUFQX1NPQ19PU0s1OTEyCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBvbWFwIG9zazU5MTIiCi0JZGVwZW5kcyBvbiBTTkRfT01BUF9TT0MgJiYgTUFDSF9PTUFQX09TSworCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfT01BUF9PU0sgJiYgSTJDCiAJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzIzCiAJaGVscApAQCAtNTUsMyArNTUsMTMgQEAKIAlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgT01BUDMgUGFuZG9yYS4KKworY29uZmlnIFNORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE9NQVAzIEJlYWdsZSIKKwlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRSAmJiBTTkRfT01BUF9TT0MgJiYgTUFDSF9PTUFQM19CRUFHTEUKKwlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCisJc2VsZWN0IFNORF9TT0NfVFdMNDAzMAorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIEJlYWdsZWJvYXJkLgorCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlIGIvc291bmQvc29jL29tYXAvTWFrZWZpbGUKaW5kZXggNzZmZWRkOS4uMGM5ZTRhYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL29tYXAvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDcgQEAKIHNuZC1zb2Mtb21hcDJldm0tb2JqcyA6PSBvbWFwMmV2bS5vCiBzbmQtc29jLXNkcDM0MzAtb2JqcyA6PSBzZHAzNDMwLm8KIHNuZC1zb2Mtb21hcDNwYW5kb3JhLW9ianMgOj0gb21hcDNwYW5kb3JhLm8KK3NuZC1zb2Mtb21hcDNiZWFnbGUtb2JqcyA6PSBvbWFwM2JlYWdsZS5vCiAKIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfTjgxMCkgKz0gc25kLXNvYy1uODEwLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT1NLNTkxMikgKz0gc25kLXNvYy1vc2s1OTEyLm8KQEAgLTE5LDMgKzIwLDQgQEAKIG9iai0kKENPTkZJR19NQUNIX09NQVAyRVZNKSArPSBzbmQtc29jLW9tYXAyZXZtLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMCkgKz0gc25kLXNvYy1zZHAzNDMwLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfUEFORE9SQSkgKz0gc25kLXNvYy1vbWFwM3BhbmRvcmEubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUpICs9IHNuZC1zb2Mtb21hcDNiZWFnbGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbjgxMC5jIGIvc291bmQvc29jL29tYXAvbjgxMC5jCmluZGV4IDI1NTkzZmUuLmE2ZDExNzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL244MTAuYworKysgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKQEAgLTQwLDYgKzQwLDEzIEBACiAjZGVmaW5lIE44MTBfSEVBRFNFVF9BTVBfR1BJTwkxMAogI2RlZmluZSBOODEwX1NQRUFLRVJfQU1QX0dQSU8JMTAxCiAKK2VudW0geworCU44MTBfSkFDS19ESVNBQkxFRCwKKwlOODEwX0pBQ0tfSFAsCisJTjgxMF9KQUNLX0hTLAorCU44MTBfSkFDS19NSUMsCit9OworCiBzdGF0aWMgc3RydWN0IGNsayAqc3lzX2Nsa291dDI7CiBzdGF0aWMgc3RydWN0IGNsayAqc3lzX2Nsa291dDJfc3JjOwogc3RhdGljIHN0cnVjdCBjbGsgKmZ1bmM5Nm1fY2xrOwpAQCAtNTAsMTUgKzU3LDMyIEBACiAKIHN0YXRpYyB2b2lkIG44MTBfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCWludCBocCA9IDAsIGxpbmUxbCA9IDA7CisKKwlzd2l0Y2ggKG44MTBfamFja19mdW5jKSB7CisJY2FzZSBOODEwX0pBQ0tfSFM6CisJCWxpbmUxbCA9IDE7CisJY2FzZSBOODEwX0pBQ0tfSFA6CisJCWhwID0gMTsKKwkJYnJlYWs7CisJY2FzZSBOODEwX0pBQ0tfTUlDOgorCQlsaW5lMWwgPSAxOworCQlicmVhazsKKwl9CisKIAlpZiAobjgxMF9zcGtfZnVuYykKIAkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CiAJZWxzZQogCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CiAKLQlpZiAobjgxMF9qYWNrX2Z1bmMpCisJaWYgKGhwKQogCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7CiAJZWxzZQogCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOworCWlmIChsaW5lMWwpCisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTElORTFMIik7CisJZWxzZQorCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMSU5FMUwiKTsKIAogCWlmIChuODEwX2RtaWNfZnVuYykKIAkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJETWljIik7CkBAIC03Miw3ICs5Niw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwKIAkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgMiwgMik7CkBAIC0yMjksNyArMjUzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzcGtfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIk9uIn07Ci1zdGF0aWMgY29uc3QgY2hhciAqamFja19mdW5jdGlvbltdID0geyJPZmYiLCAiSGVhZHBob25lIn07CitzdGF0aWMgY29uc3QgY2hhciAqamFja19mdW5jdGlvbltdID0geyJPZmYiLCAiSGVhZHBob25lIiwgIkhlYWRzZXQiLCAiTWljIn07CiBzdGF0aWMgY29uc3QgY2hhciAqaW5wdXRfZnVuY3Rpb25bXSA9IHsiQURDIiwgIkRpZ2l0YWwgTWljIn07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG44MTBfZW51bVtdID0gewogCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShzcGtfZnVuY3Rpb24pLCBzcGtfZnVuY3Rpb24pLApAQCAtMjQ4LDIwICsyNzIsMjMgQEAKIAogc3RhdGljIGludCBuODEwX2FpYzMzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCS8qIE5vdCBjb25uZWN0ZWQgKi8KIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT19MT1VUIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQTENPTSIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUFJDT00iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDM0wiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDM1IiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTFSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUyTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMlIiKTsKIAogCS8qIEFkZCBOODEwIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljMzNfbjgxMF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmYWljMzNfbjgxMF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWljMzNfbjgxMF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFpYzMzX244MTBfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBOODEwIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhaWMzM19kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggMDVkZDVhYi4uZDY4ODJiZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNDYxLDYgKzQ2MSwxNiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG9tYXBfbWNic3BfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IG9tYXBfbWNic3BfZGFpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gb21hcF9tY2JzcF9kYWlfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBvbWFwX21jYnNwX2RhaV90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBvbWFwX21jYnNwX2RhaV9od19wYXJhbXMsCisJLnNldF9mbXQJPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IG9tYXBfbWNic3BfZGFpX3NldF9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsaywKK307CisKICNkZWZpbmUgT01BUF9NQ0JTUF9EQUlfQlVJTERFUihsaW5rX2lkKQkJCQlcCiB7CQkJCQkJCQlcCiAJLm5hbWUgPSAib21hcC1tY2JzcC1kYWktIiNsaW5rX2lkLAkJCVwKQEAgLTQ3NywxNSArNDg3LDcgQEAKIAkJLnJhdGVzID0gT01BUF9NQ0JTUF9SQVRFUywJCQlcCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCQlcCiAJfSwJCQkJCQkJXAotCS5vcHMgPSB7CQkJCQkJXAotCQkuc3RhcnR1cCA9IG9tYXBfbWNic3BfZGFpX3N0YXJ0dXAsCQlcCi0JCS5zaHV0ZG93biA9IG9tYXBfbWNic3BfZGFpX3NodXRkb3duLAkJXAotCQkudHJpZ2dlciA9IG9tYXBfbWNic3BfZGFpX3RyaWdnZXIsCQlcCi0JCS5od19wYXJhbXMgPSBvbWFwX21jYnNwX2RhaV9od19wYXJhbXMsCQlcCi0JCS5zZXRfZm10ID0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9mbXQsCQlcCi0JCS5zZXRfY2xrZGl2ID0gb21hcF9tY2JzcF9kYWlfc2V0X2Nsa2RpdiwJXAotCQkuc2V0X3N5c2NsayA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfc3lzY2xrLAlcCi0JfSwJCQkJCQkJXAorCS5vcHMgPSAmb21hcF9tY2JzcF9kYWlfb3BzLAkJCQlcCiAJLnByaXZhdGVfZGF0YSA9ICZtY2JzcF9kYXRhWyhsaW5rX2lkKV0uYnVzX2lkLAkJXAogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCBkZDNiYjI5Li44ZTE0MzFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQkJCSAgICAgcnVudGltZS0+ZG1hX2J5dGVzKTsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIG9tYXBfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgb21hcF9wY21fb3BzID0gewogCS5vcGVuCQk9IG9tYXBfcGNtX29wZW4sCiAJLmNsb3NlCQk9IG9tYXBfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jIGIvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKaW5kZXggZmNjMmY1ZC4uZmUyODJkNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsKSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoaW50ZXJuYWwpIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX01JQygiTWljIChleHRlcm5hbCkiLCBOVUxMKSwKIAlTTkRfU09DX0RBUE1fTElORSgiTGluZSBJbiIsIE5VTEwpLAogfTsKQEAgLTE1NSwxNiArMTU1LDMzIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBvbWFwM3BhbmRvcmFfaW5fbWFwW10gPSB7Ci0JeyJJTkwiLCBOVUxMLCAiTGluZSBJbiJ9LAotCXsiSU5SIiwgTlVMTCwgIkxpbmUgSW4ifSwKLQl7IklOTCIsIE5VTEwsICJNaWMgKEludGVybmFsKSJ9LAotCXsiSU5SIiwgTlVMTCwgIk1pYyAoZXh0ZXJuYWwpIn0sCisJeyJBVVhMIiwgTlVMTCwgIkxpbmUgSW4ifSwKKwl7IkFVWFIiLCBOVUxMLCAiTGluZSBJbiJ9LAorCisJeyJNQUlOTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDEifSwKKwl7Ik1pYyBCaWFzIDEiLCBOVUxMLCAiTWljIChpbnRlcm5hbCkifSwKKworCXsiU1VCTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDIifSwKKwl7Ik1pYyBCaWFzIDIiLCBOVUxMLCAiTWljIChleHRlcm5hbCkifSwKIH07CiAKIHN0YXRpYyBpbnQgb21hcDNwYW5kb3JhX291dF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgcmV0OwogCisJLyogQWxsIFRXTDQwMzAgb3V0cHV0IHBpbnMgYXJlIGZsb2F0aW5nICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT0wiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNPUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGUiIpOworCiAJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0cykpOwogCWlmIChyZXQgPCAwKQpAQCAtMTgwLDE4ICsxOTcsMTEgQEAKIHsKIAlpbnQgcmV0OwogCi0JLyogQWxsIFRXTDQwMzAgb3V0cHV0IHBpbnMgYXJlIGZsb2F0aW5nICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT0wiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNPUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGUiIpLAorCS8qIE5vdCBjb21ubmVjdGVkICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTTUlDIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVE1JQyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMSIpOwogCiAJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX2luX2RhcG1fd2lkZ2V0cywKIAkJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHMpKTsKQEAgLTI1MSwxMCArMjYxLDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFtYWNoaW5lX2lzX29tYXAzX3BhbmRvcmEoKSkgewotCQlwcl9kZWJ1ZyhQUkVGSVggIk5vdCBPTUFQMyBQYW5kb3JhXG4iKTsKKwlpZiAoIW1hY2hpbmVfaXNfb21hcDNfcGFuZG9yYSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisKIAlwcl9pbmZvKCJPTUFQMyBQYW5kb3JhIFNvQyBpbml0XG4iKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChPTUFQM19QQU5ET1JBX0RBQ19QT1dFUl9HUElPLCAiZGFjX3Bvd2VyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKaW5kZXggY2Q0MWE5NC4uYTk1MmE0ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYwpAQCAtMTg2LDEzICsxODYsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoY2xrX2dldF91c2Vjb3VudCh0bHYzMjBhaWMyM19tY2xrKSA+IDApIHsKLQkJLyogTUNMSyBpcyBhbHJlYWR5IGluIHVzZSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTUNMSyBpbiB1c2UgYXQgJWQgSHouIFdlIGNoYW5nZSBpdCB0byAlZCBIelxuIiwKLQkJICAgICAgICh1aW50KSBjbGtfZ2V0X3JhdGUodGx2MzIwYWljMjNfbWNsayksIENPREVDX0NMT0NLKTsKLQl9Ci0KIAkvKgogCSAqIENvbmZpZ3VyZSAxMiBNSHogb3V0cHV0IG9uIE1DTEsuCiAJICovCkBAIC0yMDUsOSArMTk4LDggQEAKIAkJfQogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIk1DTEsgPSAlZCBbJWRdLCB1c2Vjb3VudCA9ICVkXG4iLAotCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSywKLQkgICAgICAgY2xrX2dldF91c2Vjb3VudCh0bHYzMjBhaWMyM19tY2xrKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTUNMSyA9ICVkIFslZF1cbiIsCisJICAgICAgICh1aW50KSBjbGtfZ2V0X3JhdGUodGx2MzIwYWljMjNfbWNsayksIENPREVDX0NMT0NLKTsKIAogCXJldHVybiAwOwogZXJyMToKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwppbmRleCBlMjI2ZmE3Li4xMGYxYzg2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM4LDYgKzM5LDggQEAKICNpbmNsdWRlICJvbWFwLXBjbS5oIgogI2luY2x1ZGUgIi4uL2NvZGVjcy90d2w0MDMwLmgiCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2Nfc2RwMzQzMDsKKwogc3RhdGljIGludCBzZHAzNDMwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTgxLDEyICs4NCwxMjEgQEAKIAkuaHdfcGFyYW1zID0gc2RwMzQzMF9od19wYXJhbXMsCiB9OwogCisvKiBIZWFkc2V0IGphY2sgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrIGhzX2phY2s7CisKKy8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gREFQTSBwaW5zICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gaHNfamFja19waW5zW10gPSB7CisJeworCQkucGluID0gIkhlYWRzZXQgTWljIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAorCX0sCisJeworCQkucGluID0gIkhlYWRzZXQgU3RlcmVvcGhvbmUiLAorCQkubWFzayA9IFNORF9KQUNLX0hFQURQSE9ORSwKKwl9LAorfTsKKworLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiBncGlvcyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyBoc19qYWNrX2dwaW9zW10gPSB7CisJeworCQkuZ3BpbyA9IChPTUFQX01BWF9HUElPX0xJTkVTICsgMiksCisJCS5uYW1lID0gImhzZGV0LWdwaW8iLAorCQkucmVwb3J0ID0gU05EX0pBQ0tfSEVBRFNFVCwKKwkJLmRlYm91bmNlX3RpbWUgPSAyMDAsCisJfSwKK307CisKKy8qIFNEUDM0MzAgbWFjaGluZSBEQVBNICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9NSUMoIkV4dCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJFeHQgU3BrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIEV4dGVybmFsIE1pY3M6IE1BSU5NSUMsIFNVQk1JQyB3aXRoIGJpYXMqLworCXsiTUFJTk1JQyIsIE5VTEwsICJNaWMgQmlhcyAxIn0sCisJeyJTVUJNSUMiLCBOVUxMLCAiTWljIEJpYXMgMiJ9LAorCXsiTWljIEJpYXMgMSIsIE5VTEwsICJFeHQgTWljIn0sCisJeyJNaWMgQmlhcyAyIiwgTlVMTCwgIkV4dCBNaWMifSwKKworCS8qIEV4dGVybmFsIFNwZWFrZXJzOiBIRkwsIEhGUiAqLworCXsiRXh0IFNwayIsIE5VTEwsICJIRkwifSwKKwl7IkV4dCBTcGsiLCBOVUxMLCAiSEZSIn0sCisKKwkvKiBIZWFkc2V0IE1pYzogSFNNSUMgd2l0aCBiaWFzICovCisJeyJIU01JQyIsIE5VTEwsICJIZWFkc2V0IE1pYyBCaWFzIn0sCisJeyJIZWFkc2V0IE1pYyBCaWFzIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisKKwkvKiBIZWFkc2V0IFN0ZXJlb3Bob25lIChIZWFkcGhvbmUpOiBIU09MLCBIU09SICovCisJeyJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCwgIkhTT0wifSwKKwl7IkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMLCAiSFNPUiJ9LAorfTsKKworc3RhdGljIGludCBzZHAzNDMwX3R3bDQwMzBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IHJldDsKKworCS8qIEFkZCBTRFAzNDMwIHNwZWNpZmljIHdpZGdldHMgKi8KKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzLAorCQkJCUFSUkFZX1NJWkUoc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTZXQgdXAgU0RQMzQzMCBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwkvKiBTRFAzNDMwIGNvbm5lY3RlZCBwaW5zICovCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgTWljIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IFN0ZXJlb3Bob25lIik7CisKKwkvKiBUV0w0MDMwIG5vdCBjb25uZWN0ZWQgcGlucyAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJBVVhMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkFVWFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTUlDIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMwIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMxIik7CisKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkVBUlBJRUNFIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRVIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gKi8KKwlyZXQgPSBzbmRfc29jX2phY2tfbmV3KCZzbmRfc29jX3NkcDM0MzAsICJIZWFkc2V0IEphY2siLAorCQkJCVNORF9KQUNLX0hFQURTRVQsICZoc19qYWNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19qYWNrX2FkZF9waW5zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfcGlucyksCisJCQkJaHNfamFja19waW5zKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19qYWNrX2FkZF9ncGlvcygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX2dwaW9zKSwKKwkJCQloc19qYWNrX2dwaW9zKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIERpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNkcDM0MzBfZGFpID0gewogCS5uYW1lID0gIlRXTDQwMzAiLAogCS5zdHJlYW1fbmFtZSA9ICJUV0w0MDMwIiwKIAkuY3B1X2RhaSA9ICZvbWFwX21jYnNwX2RhaVswXSwKIAkuY29kZWNfZGFpID0gJnR3bDQwMzBfZGFpLAorCS5pbml0ID0gc2RwMzQzMF90d2w0MDMwX2luaXQsCiAJLm9wcyA9ICZzZHAzNDMwX29wcywKIH07CiAKQEAgLTE0Miw2ICsyNTQsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2RwMzQzMF9zb2NfZXhpdCh2b2lkKQogeworCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfZ3Bpb3MpLAorCQkJCWhzX2phY2tfZ3Bpb3MpOworCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2RwMzQzMF9zbmRfZGV2aWNlKTsKIH0KIG1vZHVsZV9leGl0KHNkcDM0MzBfc29jX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9LY29uZmlnIGIvc291bmQvc29jL3B4YS9LY29uZmlnCmluZGV4IGY4MmUxMDYuLjU5OThhYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKQEAgLTYxLDYgKzYxLDI0IEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFNoYXJwCiAJICBaYXVydXMgU0wtQzYwMDB4IG1vZGVscyAoVG9zYSkuCiAKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19FNzQwCisJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIGU3NDAiCisJZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0U3NDAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUKKwlzZWxlY3QgU05EX1BYQTJYWF9TT0NfQUM5NworCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCisJICB0b3NoaWJhIGU3NDAgUERBCisKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19FNzUwCisJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIGU3NTAiCisJZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0U3NTAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUKKwlzZWxlY3QgU05EX1BYQTJYWF9TT0NfQUM5NworCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCisJICB0b3NoaWJhIGU3NTAgUERBCisKIGNvbmZpZyBTTkRfUFhBMlhYX1NPQ19FODAwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIGU4MDAiCiAJZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0U4MDAKQEAgLTk3LDMgKzExNSwxMiBAQAogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCiAJICBNYXJ2ZWxsIFp5bG9uaXRlIHJlZmVyZW5jZSBwbGF0Zm9ybS4KKworY29uZmlnIFNORF9QWEEyWFhfU09DX01JT0E3MDEKKyAgICAgICAgdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBNSU8gQTcwMSIKKyAgICAgICAgZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX01JT0E3MDEKKyAgICAgICAgc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKKyAgICAgICAgc2VsZWN0IFNORF9TT0NfV005NzEzCisgICAgICAgIGhlbHAKKyAgICAgICAgICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorICAgICAgICAgIE1JTyBBNzAxLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9NYWtlZmlsZSBiL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKaW5kZXggMDhhOWYyNy4uOGVkODgxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCkBAIC0xMywxNyArMTMsMjMgQEAKIHNuZC1zb2MtY29yZ2ktb2JqcyA6PSBjb3JnaS5vCiBzbmQtc29jLXBvb2RsZS1vYmpzIDo9IHBvb2RsZS5vCiBzbmQtc29jLXRvc2Etb2JqcyA6PSB0b3NhLm8KK3NuZC1zb2MtZTc0MC1vYmpzIDo9IGU3NDBfd205NzA1Lm8KK3NuZC1zb2MtZTc1MC1vYmpzIDo9IGU3NTBfd205NzA1Lm8KIHNuZC1zb2MtZTgwMC1vYmpzIDo9IGU4MDBfd205NzEyLm8KIHNuZC1zb2Mtc3BpdHotb2JqcyA6PSBzcGl0ei5vCiBzbmQtc29jLWVtLXgyNzAtb2JqcyA6PSBlbS14MjcwLm8KIHNuZC1zb2MtcGFsbTI3eC1vYmpzIDo9IHBhbG0yN3gubwogc25kLXNvYy16eWxvbml0ZS1vYmpzIDo9IHp5bG9uaXRlLm8KK3NuZC1zb2MtbWlvYTcwMS1vYmpzIDo9IG1pb2E3MDFfd205NzEzLm8KIAogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0NPUkdJKSArPSBzbmQtc29jLWNvcmdpLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19QT09ETEUpICs9IHNuZC1zb2MtcG9vZGxlLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19UT1NBKSArPSBzbmQtc29jLXRvc2Eubworb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0U3NDApICs9IHNuZC1zb2MtZTc0MC5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRTc1MCkgKz0gc25kLXNvYy1lNzUwLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FODAwKSArPSBzbmQtc29jLWU4MDAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1NQSVRaKSArPSBzbmQtc29jLXNwaXR6Lm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FTV9YMjcwKSArPSBzbmQtc29jLWVtLXgyNzAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1BBTE0yN1gpICs9IHNuZC1zb2MtcGFsbTI3eC5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfTUlPQTcwMSkgKz0gc25kLXNvYy1taW9hNzAxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1pZTE9OSVRFKSArPSBzbmQtc29jLXp5bG9uaXRlLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwppbmRleCAxYmEyNWE1Li4wMjI2M2U1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKKysrIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTEwMCw3ICsxMDEsNyBAQAogc3RhdGljIGludCBjb3JnaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJY29yZ2lfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjc1LDE4ICsyNzYsMTYgQEAKICAqLwogc3RhdGljIGludCBjb3JnaV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX2NvcmdpX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3MzFfY29yZ2lfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9jb3JnaV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODczMV9jb3JnaV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfZGFwbV93aWRnZXRzLApAQCAtMzE3LDE5ICszMTYsNDQgQEAKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKLS8qIGNvcmdpIGF1ZGlvIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBjb3JnaV93bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OwotCiAvKiBjb3JnaSBhdWRpbyBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgY29yZ2lfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19jb3JnaSwKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJmNvcmdpX3dtODczMV9zZXR1cCwKIH07CiAKKy8qCisgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KKyAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKKyAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCisgKi8KK3N0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJaW5mby5hZGRyID0gMHgxYjsKKwlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCisJYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKCFjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvcmdpX3NuZF9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNvcmdpX2luaXQodm9pZCkKQEAgLTM0MCw2ICszNjQsMTAgQEAKIAkgICAgICBtYWNoaW5lX2lzX2h1c2t5KCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAljb3JnaV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFjb3JnaV9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2QyZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogZTc0MC13bTk3MDUuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTc0MAorICoKKyAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBPTkxZLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MDUuaCIKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKworCisjZGVmaW5lIEU3NDBfQVVESU9fT1VUIDEKKyNkZWZpbmUgRTc0MF9BVURJT19JTiAgMgorCitzdGF0aWMgaW50IGU3NDBfYXVkaW9fcG93ZXI7CisKK3N0YXRpYyB2b2lkIGU3NDBfc3luY19hdWRpb19wb3dlcihpbnQgc3RhdHVzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAhc3RhdHVzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfQU1QX09OLCAoc3RhdHVzICYgRTc0MF9BVURJT19PVVQpID8gMSA6IDApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9NSUNfT04sIChzdGF0dXMgJiBFNzQwX0FVRElPX0lOKSA/IDEgOiAwKTsKK30KKworc3RhdGljIGludCBlNzQwX21pY19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZTc0MF9hdWRpb19wb3dlciB8PSBFNzQwX0FVRElPX0lOOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQllNzQwX2F1ZGlvX3Bvd2VyICY9IH5FNzQwX0FVRElPX0lOOworCisJZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGU3NDBfYXVkaW9fcG93ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZTc0MF9vdXRwdXRfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWU3NDBfYXVkaW9fcG93ZXIgfD0gRTc0MF9BVURJT19PVVQ7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWU3NDBfYXVkaW9fcG93ZXIgJj0gfkU3NDBfQVVESU9fT1VUOworCisJZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGU3NDBfYXVkaW9fcG93ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlNzQwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIk91dHB1dCBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzQwX291dHB1dF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJNaWMgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc0MF9taWNfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJPdXRwdXQgQW1wIiwgTlVMTCwgIkxPVVQifSwKKwl7Ik91dHB1dCBBbXAiLCBOVUxMLCAiUk9VVCJ9LAorCXsiT3V0cHV0IEFtcCIsIE5VTEwsICJNT05PT1VUIn0sCisKKwl7IlNwZWFrZXIiLCBOVUxMLCAiT3V0cHV0IEFtcCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiT3V0cHV0IEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyBBbXAifSwKKwl7Ik1pYyBBbXAiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKK307CisKK3N0YXRpYyBpbnQgZTc0MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUE9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQQ0JFRVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDMiIpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTc0MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTc0MF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NDBfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTc0MF9hYzk3X2luaXQsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0FVWF0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU3NDAgPSB7CisJLm5hbWUgPSAiVG9zaGliYSBlNzQwIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBlNzQwX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShlNzQwX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGU3NDBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmZTc0MCwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzA1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmU3NDBfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZTc0MF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19lNzQwKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9NSUNfT04sICAiTWljIGFtcCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzQwX0FNUF9PTiwgIk91dHB1dCBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfbWljX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAiQXVkaW8gcG93ZXIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfb3BfYW1wX2dwaW87CisKKwkvKiBEaXNhYmxlIGF1ZGlvICovCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9NSUNfT04sIDApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9BTVBfT04sIDApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCisJZTc0MF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFlNzQwX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShlNzQwX3NuZF9kZXZpY2UsICZlNzQwX3NuZF9kZXZkYXRhKTsKKwllNzQwX3NuZF9kZXZkYXRhLmRldiA9ICZlNzQwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU3NDBfc25kX2RldmljZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKy8qIEZhaWwgZ3JhY2VmdWxseSAqLworCXBsYXRmb3JtX2RldmljZV9wdXQoZTc0MF9zbmRfZGV2aWNlKTsKK2ZyZWVfYXB3cl9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfV005NzA1X25BVkREMik7CitmcmVlX29wX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfQU1QX09OKTsKK2ZyZWVfbWljX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfTUlDX09OKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlNzQwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihlNzQwX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChlNzQwX2luaXQpOworbW9kdWxlX2V4aXQoZTc0MF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU3NDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNlY2NjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogZTc1MC13bTk3MDUuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTc1MAorICoKKyAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBPTkxZLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MDUuaCIKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKworc3RhdGljIGludCBlNzUwX3Nwa19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU3NTBfaHBfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX0hQX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlNzUwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzUwX2hwX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIlNwZWFrZXIgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc1MF9zcGtfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgQW1wIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSGVhZHBob25lIEFtcCIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXAifSwKKworCXsiU3BlYWtlciBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTcGVha2VyIEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwpIn0sCit9OworCitzdGF0aWMgaW50IGU3NTBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJST1VUIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQQ0JFRVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDMiIpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTc1MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTc1MF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NTBfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTc1MF9hYzk3X2luaXQsCisJCS8qIHVzZSBvcHMgdG8gY2hlY2sgc3RhcnR1cCBzdGF0ZSAqLworCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19BVVhdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlNzUwID0geworCS5uYW1lID0gIlRvc2hpYmEgZTc1MCIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gZTc1MF9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZTc1MF9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBlNzUwX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmU3NTAsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcwNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzUwX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGU3NTBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfZTc1MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NTBfSFBfQU1QX09GRiwgICJIZWFkcGhvbmUgYW1wIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NTBfU1BLX0FNUF9PRkYsICJTcGVha2VyIGFtcCIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9ocF9hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NTBfSFBfQU1QX09GRiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NTBfU1BLX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwllNzUwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWU3NTBfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGU3NTBfc25kX2RldmljZSwgJmU3NTBfc25kX2RldmRhdGEpOworCWU3NTBfc25kX2RldmRhdGEuZGV2ID0gJmU3NTBfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZTc1MF9zbmRfZGV2aWNlKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworLyogRmFpbCBncmFjZWZ1bGx5ICovCisJcGxhdGZvcm1fZGV2aWNlX3B1dChlNzUwX3NuZF9kZXZpY2UpOworZnJlZV9zcGtfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRik7CitmcmVlX2hwX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NTBfSFBfQU1QX09GRik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZTc1MF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTc1MF9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGKTsKKwlncGlvX2ZyZWUoR1BJT19FNzUwX0hQX0FNUF9PRkYpOworfQorCittb2R1bGVfaW5pdChlNzUwX2luaXQpOworbW9kdWxlX2V4aXQoZTc1MF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU3NTAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYyBiL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYwppbmRleCAyZTMzODZkLi5iYzAxOWNkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKKysrIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIGU4MDAtd205NzEyLmMgIC0tICBTb0MgYXVkaW8gZm9yIGU4MDAKICAqCi0gKiBCYXNlZCBvbiB0b3NhLmMKLSAqCiAgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMyw3ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTIxLDIzICsxOSw4NSBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU4MDA7CitzdGF0aWMgaW50IGU4MDBfc3BrX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfU1BLX0FNUF9PTiwgMSk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9TUEtfQU1QX09OLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU4MDBfaHBfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX0hQX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlODAwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsMSkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsMikiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTgwMF9ocF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJTcGVha2VyIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU4MDBfc3BrX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRMIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXAifSwKKworCXsiU3BlYWtlciBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTcGVha2VyIEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwxKSJ9LAorCXsiTUlDMiIsIE5VTEwsICJNaWMgKEludGVybmFsMikifSwKK307CisKK3N0YXRpYyBpbnQgZTgwMF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU4MDBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU4MDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZTgwMF9kYWlbXSA9IHsKLXsKLQkubmFtZSA9ICJBQzk3IEF1eCIsCi0JLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCi0JLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19BVVhdLAotfSwKKwl7CisJCS5uYW1lID0gIkFDOTciLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19ISUZJXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19ISUZJXSwKKwkJLmluaXQgPSBlODAwX2FjOTdfaW5pdCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfQVVYXSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTgwMCA9IHsKQEAgLTYxLDYgKzEyMSwyMiBAQAogCWlmICghbWFjaGluZV9pc19lODAwKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAgIkhlYWRwaG9uZSBhbXAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTgwMF9TUEtfQU1QX09OLCAiU3BlYWtlciBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaHBfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FODAwX0hQX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FODAwX1NQS19BTVBfT04sIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKIAllODAwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWU4MDBfc25kX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02OSw4ICsxNDUsMTUgQEAKIAllODAwX3NuZF9kZXZkYXRhLmRldiA9ICZlODAwX3NuZF9kZXZpY2UtPmRldjsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU4MDBfc25kX2RldmljZSk7CiAKLQlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU4MDBfc25kX2RldmljZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisvKiBGYWlsIGdyYWNlZnVsbHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU4MDBfc25kX2RldmljZSk7CitmcmVlX3Nwa19hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FODAwX1NQS19BTVBfT04pOworZnJlZV9ocF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FODAwX0hQX0FNUF9PRkYpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc4LDYgKzE2MSw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZTgwMF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTgwMF9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1BJT19FODAwX1NQS19BTVBfT04pOworCWdwaW9fZnJlZShHUElPX0U4MDBfSFBfQU1QX09GRik7CiB9CiAKIG1vZHVsZV9pbml0KGU4MDBfaW5pdCk7CkBAIC04Niw0ICsxNzEsNCBAQAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU4MDAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVkYThiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogSGFuZGxlcyB0aGUgTWl0YWMgbWlvYTcwMSBTb0Mgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJvYmVydCBKYXJ6bWlrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFRoaXMgaXMgYSBsaXR0bGUgc2NoZW1hIG9mIHRoZSBzb3VuZCBpbnRlcmNvbm5lY3Rpb25zIDoKKyAqCisgKiAgICBTYWdlbSBYMjAwICAgICAgICAgICAgICAgICBXb2xmc29uIFdNOTcxMworICogICAgKy0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICBSZWFyIFNwZWFrZXIKKyAqICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAvLSsKKyAqICAgIHwgICAgICAgICstLS0+LS0tLS0+LS0tK01PTk9JTiAgICAgICAgIFNQS0wrLS0tPi0tLS0rLSsgIHwKKyAqICAgIHwgIEdTTSAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8IHwgIHwKKyAqICAgIHwgICAgICAgICstLS0+LS0tLS0+LS0tK1BDQkVFUCAgICAgICAgIFNQS1IrLS0tPi0tLS0rLSsgIHwKKyAqICAgIHwgIENISVAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBcLSsKKyAqICAgIHwgICAgICAgICstLS08LS0tLS08LS0tK01PTk8gICAgICAgICAgICAgICB8CisgKiAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgIEZyb250IFNwZWFrZXIKKyAqICAgICstLS0tLS0tLSsgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAvLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBIUEwrLS0tPi0tLS0rLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8IHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIE9VVDMrLS0tPi0tLS0rLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBcLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgRnJvbnQgTWljcm8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgTUlDMSstLS0tLTwtLStvKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgLS0tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEzLmgiCisKKyNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkJKHgpLCBBUlJBWV9TSVpFKHgpCisKKyNkZWZpbmUgQUM5N19HUElPX1BVTEwJCTB4NTgKKworLyogVXNlIEdQSU84IGZvciByZWFyIHNwZWFrZXIgYW1wbGlmaWVyICovCitzdGF0aWMgaW50IHJlYXJfYW1wX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQoreworCXVuc2lnbmVkIHNob3J0IHJlZzsKKworCWlmIChwb3dlcikgeworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgfCAweDAxMDApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19QVUxMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX1BVTEwsIHJlZyB8ICgxPDwxNSkpOworCX0gZWxzZSB7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19DRkcsIHJlZyAmIH4weDAxMDApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19QVUxMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX1BVTEwsIHJlZyAmIH4oMTw8MTUpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFyX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAorCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5jb2RlYzsKKworCXJldHVybiByZWFyX2FtcF9wb3dlcihjb2RlYywgU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSk7Cit9CisKKy8qIG1pb2E3MDEgbWFjaGluZSBkYXBtIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtaW9hNzAxX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TUEsoIkZyb250IFNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJSZWFyIFNwZWFrZXIiLCByZWFyX2FtcF9ldmVudCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJHU00gTGluZSBPdXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiR1NNIExpbmUgSW4iLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkZyb250IE1pYyIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogQ2FsbCBNaWMgKi8KKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIkZyb250IE1pYyJ9LAorCXsiTUlDMSIsIE5VTEwsICJNaWMgQmlhcyJ9LAorCisJLyogSGVhZHNldCBNaWMgKi8KKwl7IkxJTkVMIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisJeyJMSU5FUiIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCisJLyogR1NNIE1vZHVsZSAqLworCXsiTU9OT0lOIiwgTlVMTCwgIkdTTSBMaW5lIE91dCJ9LAorCXsiUENCRUVQIiwgTlVMTCwgIkdTTSBMaW5lIE91dCJ9LAorCXsiR1NNIExpbmUgSW4iLCBOVUxMLCAiTU9OTyJ9LAorCisJLyogaGVhZHBob25lIGNvbm5lY3RlZCB0byBIUEwsIEhQUiAqLworCXsiSGVhZHNldCIsIE5VTEwsICJIUEwifSwKKwl7IkhlYWRzZXQiLCBOVUxMLCAiSFBSIn0sCisKKwkvKiBmcm9udCBzcGVha2VyIGNvbm5lY3RlZCB0byBIUEwsIE9VVDMgKi8KKwl7IkZyb250IFNwZWFrZXIiLCBOVUxMLCAiSFBMIn0sCisJeyJGcm9udCBTcGVha2VyIiwgTlVMTCwgIk9VVDMifSwKKworCS8qIHJlYXIgc3BlYWtlciBjb25uZWN0ZWQgdG8gU1BLTCwgU1BLUiAqLworCXsiUmVhciBTcGVha2VyIiwgTlVMTCwgIlNQS0wifSwKKwl7IlJlYXIgU3BlYWtlciIsIE5VTEwsICJTUEtSIn0sCit9OworCitzdGF0aWMgaW50IG1pb2E3MDFfd205NzEzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIHNob3J0IHJlZzsKKworCS8qIEFkZCBtaW9hNzAxIHNwZWNpZmljIHdpZGdldHMgKi8KKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBBUlJBWV9BTkRfU0laRShtaW9hNzAxX2RhcG1fd2lkZ2V0cykpOworCisJLyogU2V0IHVwIG1pb2E3MDEgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXBuZWN0cyAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBBUlJBWV9BTkRfU0laRShhdWRpb19tYXApKTsKKworCS8qIFByZXBhcmUgR1BJTzggZm9yIHJlYXIgc3BlYWtlciBhbXBsaWZpZXIgKi8KKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgfCAweDAxMDApOworCisJLyogUHJlcGFyZSBNSUMgaW5wdXQgKi8KKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUM5N18zRF9DT05UUk9MKTsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFDOTdfM0RfQ09OVFJPTCwgcmVnIHwgMHhjMDAwKTsKKworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRnJvbnQgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiUmVhciBTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJGcm9udCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBtaW9hNzAxX29wczsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG1pb2E3MDFfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gbWlvYTcwMV93bTk3MTNfaW5pdCwKKwkJLm9wcyA9ICZtaW9hNzAxX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfQVVYXSwKKwkJLm9wcyA9ICZtaW9hNzAxX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbWlvYTcwMSA9IHsKKwkubmFtZSA9ICJNaW9BNzAxIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBtaW9hNzAxX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShtaW9hNzAxX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG1pb2E3MDFfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmbWlvYTcwMSwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzEzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1pb2E3MDFfc25kX2RldmljZTsKKworc3RhdGljIGludCBtaW9hNzAxX3dtOTcxM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfbWlvYTcwMSgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl93YXJuKCZwZGV2LT5kZXYsICJCZSB3YXJuZWQgdGhhdCBpbmNvcnJlY3QgbWl4ZXJzL211eGVzIHNldHVwIHdpbGwiCisJCSAibGVhZCB0byBvdmVyaGVhdGluZyBhbmQgcG9zc2libGUgZGVzdHJ1Y3Rpb24gb2YgeW91ciBkZXZpY2UuIgorCQkgIkRvIG5vdCB1c2Ugd2l0aG91dCBhIGdvb2Qga25vd2xlZGdlIG9mIG1pbydzIGJvYXJkIGRlc2lnbiFcbiIpOworCisJbWlvYTcwMV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFtaW9hNzAxX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEobWlvYTcwMV9zbmRfZGV2aWNlLCAmbWlvYTcwMV9zbmRfZGV2ZGF0YSk7CisJbWlvYTcwMV9zbmRfZGV2ZGF0YS5kZXYgPSAmbWlvYTcwMV9zbmRfZGV2aWNlLT5kZXY7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG1pb2E3MDFfc25kX2RldmljZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcGxhdGZvcm1fZGV2aWNlX3B1dChtaW9hNzAxX3NuZF9kZXZpY2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1pb2E3MDFfd205NzEzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1pb2E3MDFfc25kX2RldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1pb2E3MDFfd205NzEzX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWlvYTcwMV93bTk3MTNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtaW9hNzAxX3dtOTcxM19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAibWlvYTcwMS13bTk3MTMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1pb2E3MDFfYXNvY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWlvYTcwMV93bTk3MTNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1pb2E3MDFfYXNvY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1pb2E3MDFfd205NzEzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1pb2E3MDFfYXNvY19pbml0KTsKK21vZHVsZV9leGl0KG1pb2E3MDFfYXNvY19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJSb2JlcnQgSmFyem1payAocmphcnptaWtAZnJlZS5mcikiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgV005NzEzIE1JTyBBNzAxIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCmluZGV4IDRhOWNmMzAuLjQ4YTczZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgaW50IHBhbG0yN3hfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXBhbG0yN3hfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMTQ2LDE5ICsxNDYsMTYgQEAKIAogc3RhdGljIGludCBwYWxtMjd4X2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT09VVCIpOwogCiAJLyogYWRkIHBhbG0yN3ggc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYWxtMjd4X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmcGFsbTI3eF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHBhbG0yN3hfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShwYWxtMjd4X2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBhZGQgcGFsbTI3eCBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgcGFsbTI3eF9kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCA2ZTk4MjcxLi5lZjdjNmM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtNzcsNyArNzgsNyBAQAogc3RhdGljIGludCBwb29kbGVfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXBvb2RsZV9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNDAsMTkgKzI0MSwxNyBAQAogICovCiBzdGF0aWMgaW50IHBvb2RsZV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTUlDSU4iKTsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfcG9vZGxlX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3MzFfcG9vZGxlX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfcG9vZGxlX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzMxX3Bvb2RsZV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHBvb2RsZSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzMxX2RhcG1fd2lkZ2V0cywKQEAgLTI4MywxNyArMjgyLDQyIEBACiAJLm51bV9saW5rcyA9IDEsCiB9OwogCi0vKiBwb29kbGUgYXVkaW8gcHJpdmF0ZSBkYXRhICovCi1zdGF0aWMgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIHBvb2RsZV93bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OworLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQogCiAvKiBwb29kbGUgYXVkaW8gc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIHBvb2RsZV9zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX3Bvb2RsZSwKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJnBvb2RsZV93bTg3MzFfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG9vZGxlX3NuZF9kZXZpY2U7CkBAIC0zMDUsNiArMzI5LDEwIEBACiAJaWYgKCFtYWNoaW5lX2lzX3Bvb2RsZSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAlsb2NvbW9fZ3Bpb19zZXRfZGlyKCZwb29kbGVfbG9jb21vX2RldmljZS5kZXYsCiAJCVBPT0RMRV9MT0NPTU9fR1BJT19BTVBfT04sIDApOwogCS8qIHNob3VsZCB3ZSBtdXRlIEhQIGF0IHN0YXJ0dXAgLSBidXJuaW5nIHBvd2VyID8qLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCA3M2NiNmI0Li5iMGJmNDA5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtMSw0ICsxLDMgQEAKLSNkZWZpbmUgREVCVUcKIC8qCiAgKiBweGEtc3NwLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgogICoKQEAgLTIxLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTIyMSw5ICsyMjIsOSBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKLQkJcmV0ID0gc3NwX2luaXQoJnByaXYtPmRldiwgY3B1X2RhaS0+aWQgKyAxLCBTU1BfTk9fSVJRKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlwcml2LT5kZXYucG9ydCA9IGNwdV9kYWktPmlkICsgMTsKKwkJcHJpdi0+ZGV2LmlycSA9IE5PX0lSUTsKKwkJY2xrX2VuYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOwogCQlzc3BfZGlzYWJsZSgmcHJpdi0+ZGV2KTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIzOCw3ICsyMzksNyBAQAogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKIAkJc3NwX2Rpc2FibGUoJnByaXYtPmRldik7Ci0JCXNzcF9leGl0KCZwcml2LT5kZXYpOworCQljbGtfZGlzYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOwogCX0KIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBACiAJaW50IHZhbDsKIAogCXUzMiBzc2NyMCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmCi0JCX4oU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FEQyk7CisJCX4oU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FDUyk7CiAKIAlkZXZfZGJnKCZzc3AtPnBkZXYtPmRldiwKIAkJInB4YV9zc3Bfc2V0X2RhaV9zeXNjbGsgaWQ6ICVkLCBjbGtfaWQgJWQsIGZyZXEgJWRcbiIsCkBAIC0zMjYsNyArMzI3LDcgQEAKIAljYXNlIFBYQV9TU1BfQ0xLX0FVRElPOgogCQlwcml2LT5zeXNjbGsgPSAwOwogCQlzc3Bfc2V0X3NjcigmcHJpdi0+ZGV2LCAxKTsKLQkJc3NjcjAgfD0gU1NDUjBfQURDOworCQlzc2NyMCB8PSBTU0NSMF9BQ1M7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTIwLDkgKzUyMSwyMCBAQAogCXUzMiBzc2NyMTsKIAl1MzIgc3Nwc3A7CiAKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBhdCBhbGwgKi8KKwlpZiAocHJpdi0+ZGFpX2ZtdCA9PSBmbXQpCisJCXJldHVybiAwOworCisJLyogd2UgY2FuIG9ubHkgY2hhbmdlIHRoZSBzZXR0aW5ncyBpZiB0aGUgcG9ydCBpcyBub3QgaW4gdXNlICovCisJaWYgKHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmIFNTQ1IwX1NTRSkgeworCQlkZXZfZXJyKCZzc3AtPnBkZXYtPmRldiwKKwkJCSJjYW4ndCBjaGFuZ2UgaGFyZHdhcmUgZGFpIGZvcm1hdDogc3RyZWFtIGlzIGluIHVzZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiByZXNldCBwb3J0IHNldHRpbmdzICovCiAJc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJgotCQkoU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FEQyk7CisJCShTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQUNTKTsKIAlzc2NyMSA9IFNTQ1IxX1J4VHJlc2goOCkgfCBTU0NSMV9UeFRyZXNoKDcpOwogCXNzcHNwID0gMDsKIApAQCAtNTQ1LDE4ICs1NTcsMTggQEAKIAogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJc3NjcjAgfD0gU1NDUjBfTU9EIHwgU1NDUjBfUFNQOworCQlzc2NyMCB8PSBTU0NSMF9QU1A7CiAJCXNzY3IxIHw9IFNTQ1IxX1JXT1QgfCBTU0NSMV9UUkFJTDsKIAorCQkvKiBTZWUgaHdfcGFyYW1zKCkgKi8KIAkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewogCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQkJc3Nwc3AgfD0gU1NQU1BfRlNSVDsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TRlJNUCB8IFNTUFNQX0ZTUlQ7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKLQkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOworCQkJc3Nwc3AgfD0gU1NQU1BfU0NNT0RFKDMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MiwzNCArNjU0LDY1IEBACiAJCQlzc2NyMCB8PSBTU0NSMF9GUENLRTsKICNlbmRpZgogCQlzc2NyMCB8PSBTU0NSMF9EYXRhU2l6ZSgxNik7Ci0JCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA+IDEpCi0JCQlzc2NyMCB8PSBTU0NSMF9FRFNTOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgogCQlzc2NyMCB8PSAoU1NDUjBfRURTUyB8IFNTQ1IwX0RhdGFTaXplKDgpKTsKLQkJLyogd2UgbXVzdCBiZSBpbiBuZXR3b3JrIG1vZGUgKDIgc2xvdHMpIGZvciAyNCBiaXQgc3RlcmVvICovCiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CiAJCXNzY3IwIHw9IChTU0NSMF9FRFNTIHwgU1NDUjBfRGF0YVNpemUoMTYpKTsKLQkJLyogd2UgbXVzdCBiZSBpbiBuZXR3b3JrIG1vZGUgKDIgc2xvdHMpIGZvciAzMiBiaXQgc3RlcmVvICovCiAJCWJyZWFrOwogCX0KIAlzc3Bfd3JpdGVfcmVnKHNzcCwgU1NDUjAsIHNzY3IwKTsKIAogCXN3aXRjaCAocHJpdi0+ZGFpX2ZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCS8qIENsZWFyZWQgd2hlbiB0aGUgREFJIGZvcm1hdCBpcyBzZXQgKi8KLQkJc3Nwc3AgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU1BTUCkgfCBTU1BTUF9TRlJNV0RUSCh3aWR0aCk7CisJICAgICAgIHNzcHNwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NQU1ApOworCisJCWlmICgoKHNzY3IwICYgU1NDUjBfU0NSKSA9PSBTU0NSMF9TZXJDbGtEaXYoNCkpICYmCisJCSAgICAgKHdpZHRoID09IDE2KSkgeworCQkJLyogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgYml0Y2xrIGlzIDY0ZnMKKwkJCSogYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggMiozMiBiaXRzIG9mIGF1ZGlvCisJCQkqIHNhbXBsZXMuCisJCQkqCisJCQkqIFRoZSBTU1AgdmFsdWVzIHVzZWQgZm9yIHRoYXQgYXJlIGFsbCBmb3VuZCBvdXQgYnkKKwkJCSogdHJ5aW5nIGFuZCBmYWlsaW5nIGEgbG90OyBzb21lIG9mIHRoZSByZWdpc3RlcnMKKwkJCSogbmVlZGVkIGZvciB0aGF0IG1vZGUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTN4eC4KKwkJCSovCisKKyNpZmRlZiBDT05GSUdfUFhBM3h4CisJCQlpZiAoIWNwdV9pc19weGEzeHgoKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVdEVEgod2lkdGggKiAyKTsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1ETFkod2lkdGggKiA0KTsKKwkJCXNzcHNwIHw9IFNTUFNQX0VETVlTVE9QKDMpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RPUCgzKTsKKwkJCXNzcHNwIHw9IFNTUFNQX0RNWVNUUlQoMSk7CisjZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmcmFtZSB3aWR0aCBpcyB0aGUgd2lkdGggdGhlIExSQ0xLIGlzCisJCQkgKiBhc3NlcnRlZCBmb3I7IHRoZSBkZWxheSBpcyBleHByZXNzZWQgaW4KKwkJCSAqIGhhbGYgY3ljbGUgdW5pdHMuICBXZSBuZWVkIHRoZSBleHRyYSBjeWNsZQorCQkJICogYmVjYXVzZSB0aGUgZGF0YSBzdGFydHMgY2xvY2tpbmcgb3V0IG9uZSBCQ0xLCisJCQkgKiBhZnRlciBMUkNMSyBjaGFuZ2VzIHBvbGFyaXR5LgorCQkJICovCisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNV0RUSCh3aWR0aCArIDEpOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTURMWSgod2lkdGggKyAxKSAqIDIpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RSVCgxKTsKKwkJfQorCiAJCXNzcF93cml0ZV9yZWcoc3NwLCBTU1BTUCwgc3Nwc3ApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKLQkvKiBXZSBhbHdheXMgdXNlIGEgbmV0d29yayBtb2RlIHNvIHdlIGFsd2F5cyByZXF1aXJlIFRETSBzbG90cworCS8qIFdoZW4gd2UgdXNlIGEgbmV0d29yayBtb2RlLCB3ZSBhbHdheXMgcmVxdWlyZSBURE0gc2xvdHMKIAkgKiAtIGNvbXBsYWluIGxvdWRseSBhbmQgZmFpbCBpZiB0aGV5J3ZlIG5vdCBiZWVuIHNldCB1cCB5ZXQuCiAJICovCi0JaWYgKCEoc3NwX3JlYWRfcmVnKHNzcCwgU1NUU0EpICYgMHhmKSkgeworCWlmICgoc3NjcjAgJiBTU0NSMF9NT0QpICYmICEoc3NwX3JlYWRfcmVnKHNzcCwgU1NUU0EpICYgMHhmKSkgewogCQlkZXZfZXJyKCZzc3AtPnBkZXYtPmRldiwgIk5vIFRETSB0aW1lc2xvdCBjb25maWd1cmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzUxLDcgKzc5NCw3IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPmRldi5zc3AgPSBzc3BfcmVxdWVzdChkYWktPmlkLCAiU29DIGF1ZGlvIik7CisJcHJpdi0+ZGV2LnNzcCA9IHNzcF9yZXF1ZXN0KGRhaS0+aWQgKyAxLCAiU29DIGF1ZGlvIik7CiAJaWYgKHByaXYtPmRldi5zc3AgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9wcml2OwpAQCAtNzgyLDYgKzgyNSwxOSBAQAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwJXAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfc3NwX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBweGFfc3NwX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gcHhhX3NzcF9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHB4YV9zc3BfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gcHhhX3NzcF9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfY2xrZGl2CT0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCisJLnNldF9mbXQJPSBweGFfc3NwX3NldF9kYWlfZm10LAorCS5zZXRfdGRtX3Nsb3QJPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCisJLnNldF90cmlzdGF0ZQk9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBweGFfc3NwX2RhaVtdID0gewogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDEiLApAQCAtODAyLDE4ICs4NTgsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiAJewkubmFtZSA9ICJweGEyeHgtc3NwMiIsCiAJCS5pZCA9IDEsCkBAIC04MzMsMTggKzg3OCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIAl7CiAJCS5uYW1lID0gInB4YTJ4eC1zc3AzIiwKQEAgLTg2NSwxOCArODk5LDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDQiLApAQCAtODk3LDE4ICs5MjAsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwocHhhX3NzcF9kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCmluZGV4IDgxMmMyYjQuLjAxYzIxYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKQEAgLTEwNiwxMyArMTA2LDEzIEBACiBzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXJldHVybiBweGEyeHhfYWM5N19od19wcm9iZShwZGV2KTsKKwlyZXR1cm4gcHhhMnh4X2FjOTdfaHdfcHJvYmUodG9fcGxhdGZvcm1fZGV2aWNlKGRhaS0+ZGV2KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHB4YTJ4eF9hYzk3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXB4YTJ4eF9hYzk3X2h3X3JlbW92ZShwZGV2KTsKKwlweGEyeHhfYWM5N19od19yZW1vdmUodG9fcGxhdGZvcm1fZGV2aWNlKGRhaS0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtMTY0LDYgKzE2NCwxOCBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfYWM5N19oaWZpX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9hYzk3X2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9hYzk3X2F1eF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBweGEyeHhfYWM5N19od19hdXhfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2FjOTdfbWljX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9hYzk3X2h3X21pY19wYXJhbXMsCit9OworCiAvKgogICogVGhlcmUgaXMgb25seSAxIHBoeXNpY2FsIEFDOTcgaW50ZXJmYWNlIGZvciBweGEyeHgsIGJ1dCBpdAogICogaGFzIGV4dHJhIGZpZm8ncyB0aGF0IGNhbiBiZSB1c2VkIGZvciBhdXggREFDcyBhbmQgQURDcy4KQEAgLTE4OSw4ICsyMDEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gUFhBMlhYX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2FjOTdfaHdfcGFyYW1zLH0sCisJLm9wcyA9ICZweGFfYWM5N19oaWZpX2RhaV9vcHMsCiB9LAogewogCS5uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCkBAIC0yMDgsOCArMjE5LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFBYQTJYWF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9hYzk3X2h3X2F1eF9wYXJhbXMsfSwKKwkub3BzID0gJnB4YV9hYzk3X2F1eF9kYWlfb3BzLAogfSwKIHsKIAkubmFtZSA9ICJweGEyeHgtYWM5Ny1taWMiLApAQCAtMjIxLDIzICsyMzEsNTIgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFBYQTJYWF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9hYzk3X2h3X21pY19wYXJhbXMsfSwKKwkub3BzID0gJnB4YV9hYzk3X21pY19kYWlfb3BzLAogfSwKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHB4YV9hYzk3X2RhaSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfYWM5N19vcHMpOwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSk7IGkrKykKKwkJcHhhX2FjOTdfZGFpW2ldLmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBQdW50IG1vc3Qgb2YgdGhlIGluaXQgdG8gdGhlIFNvQyBwcm9iZTsgd2UgbWF5IG5lZWQgdGhlIG1hY2hpbmUKKwkgKiBkcml2ZXIgdG8gZG8gaW50ZXJlc3RpbmcgdGhpbmdzIHdpdGggdGhlIGNsb2NraW5nIHRvIGdldCB1cyB1cAorCSAqIGFuZCBydW5uaW5nLgorCSAqLworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBweGEyeHhfYWM5N19kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcHhhMnh4X2FjOTdfZGV2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2FjOTdfZGV2X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB4YV9hYzk3X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfYWM5N19kcml2ZXIpOwogfQogbW9kdWxlX2luaXQocHhhX2FjOTdfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGFfYWM5N19leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfYWM5N19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQocHhhX2FjOTdfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKaW5kZXggNTE3OTkxZi4uZTZjMjQ0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKQEAgLTI1LDIwICsyNSwxMSBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1pMnMuaCIKIAotc3RydWN0IHB4YTJ4eF9ncGlvIHsKLQl1MzIgc3lzOwotCXUzMglyeDsKLQl1MzIgdHg7Ci0JdTMyIGNsazsKLQl1MzIgZnJtOwotfTsKLQogLyoKICAqIEkyUyBDb250cm9sbGVyIFJlZ2lzdGVyIGFuZCBCaXQgRGVmaW5pdGlvbnMKICAqLwpAQCAtMTA2LDIxICs5Nyw2IEBACiAJCQkJICBEQ01EX0JVUlNUMzIgfCBEQ01EX1dJRFRINCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X2dwaW8gZ3Bpb19idXNbXSA9IHsKLQl7IC8qIEkyUyBTb0MgU2xhdmUgKi8KLQkJLnJ4ID0gR1BJTzI5X1NEQVRBX0lOX0kyU19NRCwKLQkJLnR4ID0gR1BJTzMwX1NEQVRBX09VVF9JMlNfTUQsCi0JCS5jbGsgPSBHUElPMjhfQklUQ0xLX0lOX0kyU19NRCwKLQkJLmZybSA9IEdQSU8zMV9TWU5DX0kyU19NRCwKLQl9LAotCXsgLyogSTJTIFNvQyBNYXN0ZXIgKi8KLQkJLnJ4ID0gR1BJTzI5X1NEQVRBX0lOX0kyU19NRCwKLQkJLnR4ID0gR1BJTzMwX1NEQVRBX09VVF9JMlNfTUQsCi0JCS5jbGsgPSBHUElPMjhfQklUQ0xLX09VVF9JMlNfTUQsCi0JCS5mcm0gPSBHUElPMzFfU1lOQ19JMlNfTUQsCi0JfSwKLX07Ci0KIHN0YXRpYyBpbnQgcHhhMnh4X2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CkBAIC0xODEsOSArMTU3LDYgQEAKIAlpZiAoY2xrX2lkICE9IFBYQTJYWF9JMlNfU1lTQ0xLKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChweGFfaTJzLm1hc3RlciAmJiBkaXIgPT0gU05EX1NPQ19DTE9DS19PVVQpCi0JCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLnN5cyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0LDEwICsxNjcsNiBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLnJ4KTsKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS50eCk7Ci0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0uZnJtKTsKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5jbGspOwogCUJVR19PTihJU19FUlIoY2xrX2kycykpOwogCWNsa19lbmFibGUoY2xrX2kycyk7CiAJcHhhX2kyc193YWl0KCk7CkBAIC0zMzUsNiArMzA0LDE1IEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAkJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gcHhhMnh4X2kyc19zdGFydHVwLAorCS5zaHV0ZG93bgk9IHB4YTJ4eF9pMnNfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBweGEyeHhfaTJzX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gcHhhMnh4X2kyc19zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHB4YTJ4eF9pMnNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgcHhhX2kyc19kYWkgPSB7CiAJLm5hbWUgPSAicHhhMnh4LWkycyIsCiAJLmlkID0gMCwKQEAgLTM1MCwxNCArMzI4LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFBYQTJYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHB4YTJ4eF9pMnNfc3RhcnR1cCwKLQkJLnNodXRkb3duID0gcHhhMnh4X2kyc19zaHV0ZG93biwKLQkJLnRyaWdnZXIgPSBweGEyeHhfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMgPSBweGEyeHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBweGEyeHhfaTJzX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHB4YTJ4eF9pMnNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJnB4YV9pMnNfZGFpX29wcywKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHB4YV9pMnNfZGFpKTsKQEAgLTM5OCwxMSArMzY5LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2kyc19pbml0KHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19weGEyN3goKSkKLQkJZ3Bpb19idXNbMV0uc3lzID0gR1BJTzExM19JMlNfU1lTQ0xLX01EOwotCWVsc2UKLQkJZ3Bpb19idXNbMV0uc3lzID0gR1BJTzMyX1NZU0NMS19JMlNfTUQ7Ci0KIAljbGtfaTJzID0gRVJSX1BUUigtRU5PRU5UKTsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfaTJzX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggYTNiOWU2Yi4uNmNhOWY1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtMTA5LDcgKzEwOSw3IEBACiBzdGF0aWMgaW50IHNwaXR6X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlzcGl0el9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNzgsNyArMjc4LDcgQEAKICAqLwogc3RhdGljIGludCBzcGl0el93bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJLyogTkMgY29kZWMgcGlucyAqLwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQxIik7CkBAIC0yOTAsMTIgKzI5MCwxMCBAQAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PMSIpOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUwX3NwaXR6X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3NTBfc3BpdHpfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1MF9zcGl0el9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODc1MF9zcGl0el9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90b3NhLmMgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwppbmRleCBjNzcxOTRmLi5mYzc4MTM3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYworKysgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGludCB0b3NhX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAl0b3NhX2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTE4OCwxOCArMTg4LDE2IEBACiAKIHN0YXRpYyBpbnQgdG9zYV9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKIAogCS8qIGFkZCB0b3NhIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG9zYV9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJnRvc2FfY29udHJvbHNbaV0sY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdG9zYV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHRvc2FfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIGFkZCB0b3NhIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB0b3NhX2RhcG1fd2lkZ2V0cywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwppbmRleCBmOGU5ZWNkLi45YTM4NmI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKKysrIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yNiw2ICsyNywxNyBAQAogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCiAjaW5jbHVkZSAicHhhLXNzcC5oIgogCisvKgorICogVGhlcmUgaXMgYSBwaHlzaWNhbCBzd2l0Y2ggU1cxNSBvbiB0aGUgYm9hcmQgd2hpY2ggY2hhbmdlcyB0aGUgTUNMSworICogZm9yIHRoZSBXTTk3MTMgYmV0d2VlbiB0aGUgc3RhbmRhcmQgQUM5NyBtYXN0ZXIgY2xvY2sgYW5kIHRoZQorICogb3V0cHV0IG9mIHRoZSBDTEtfUE9VVCBzaWduYWwgZnJvbSB0aGUgUFhBLgorICovCitzdGF0aWMgaW50IGNsa19wb3V0OworbW9kdWxlX3BhcmFtKGNsa19wb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjbGtfcG91dCwgIlVzZSBDTEtfUE9VVCBhcyBXTTk3MTMgTUNMSyAoU1cxNSBvbiBib2FyZCkuIik7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpwb3V0OworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCB6eWxvbml0ZTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHp5bG9uaXRlX2RhcG1fd2lkZ2V0c1tdID0gewpAQCAtNjEsMTAgKzczLDggQEAKIAogc3RhdGljIGludCB6eWxvbml0ZV93bTk3MTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JLyogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCB1c2Ugb2YgdGhlIEFDOTcgY2xvY2sgaGVyZS4gIElmCi0JICogQ0xLX1BPVVQgaXMgc2VsZWN0ZWQgYnkgU1cxNSB0aGVuIHRoZSBjbG9jayBBUEkgd2lsbCBuZWVkCi0JICogdG8gYmUgdXNlZCB0byByZXF1ZXN0IGFuZCBlbmFibGUgaXQgaGVyZS4KLQkgKi8KKwlpZiAoY2xrX3BvdXQpCisJCXNuZF9zb2NfZGFpX3NldF9wbGwoJmNvZGVjLT5kYWlbMF0sIDAsIGNsa19nZXRfcmF0ZShwb3V0KSwgMCk7CiAKIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB6eWxvbml0ZV9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHp5bG9uaXRlX2RhcG1fd2lkZ2V0cykpOwpAQCAtODYsMjcgKzk2LDUxIEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCXVuc2lnbmVkIGludCBwbGxfb3V0ID0gMDsKLQl1bnNpZ25lZCBpbnQgYWNkcyA9IDA7CiAJdW5zaWduZWQgaW50IHdtOTcxM19kaXYgPSAwOwogCWludCByZXQgPSAwOworCWludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlpbnQgd2lkdGggPSBzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOwogCi0Jc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJLyogT25seSBzdXBwb3J0IHJhdGlvcyB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBuZWF0bHkgZnJvbSB0aGUgQUM5NworCSAqIGJhc2VkIG1hc3RlciBjbG9jayAtIGluIHBhcnRpY3VsYXIsIHRoaXMgZXhjbHVkZXMgNDQuMWtIei4KKwkgKiBJbiBtb3N0IGFwcGxpY2F0aW9ucyB0aGUgdm9pY2UgREFDIHdpbGwgYmUgdXNlZCBmb3IgdGVsZXBob255CisJICogZGF0YSBzbyBtdWx0aXBsZXMgb2YgOGtIeiB3aWxsIGJlIHRoZSBjb21tb24gY2FzZS4KKwkgKi8KKwlzd2l0Y2ggKHJhdGUpIHsKIAljYXNlIDgwMDA6CiAJCXdtOTcxM19kaXYgPSAxMjsKLQkJcGxsX291dCA9IDIwNDgwMDA7CiAJCWJyZWFrOwogCWNhc2UgMTYwMDA6CiAJCXdtOTcxM19kaXYgPSA2OwotCQlwbGxfb3V0ID0gNDA5NjAwMDsKIAkJYnJlYWs7CiAJY2FzZSA0ODAwMDoKLQlkZWZhdWx0OgogCQl3bTk3MTNfZGl2ID0gMjsKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQlhY2RzID0gMTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogRG9uJ3Qgc3VwcG9ydCBPU1MgZW11bGF0aW9uICovCisJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIEFkZCAxIHRvIHRoZSB3aWR0aCBmb3IgdGhlIGxlYWRpbmcgY2xvY2sgY3ljbGUgKi8KKwlwbGxfb3V0ID0gcmF0ZSAqICh3aWR0aCArIDEpICogODsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfQVVESU8sIDAsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjcHVfZGFpLCAwLCAwLCBwbGxfb3V0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjbGtfcG91dCkKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNOTcxM19QQ01DTEtfUExMX0RJViwKKwkJCQkJICAgICBXTTk3MTNfUENNRElWKHdtOTcxM19kaXYpKTsKKwllbHNlCisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY29kZWNfZGFpLCBXTTk3MTNfUENNQ0xLX0RJViwKKwkJCQkJICAgICBXTTk3MTNfUENNRElWKHdtOTcxM19kaXYpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAogCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwogCWlmIChyZXQgPCAwKQpAQCAtMTE3LDMyICsxNTEsNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KGNwdV9kYWksCi0JCQkJICAgICAgIHBhcmFtc19jaGFubmVscyhwYXJhbXMpLAotCQkJCSAgICAgICBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNwdV9kYWksIDAsIDAsIHBsbF9vdXQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBQWEFfU1NQX0FVRElPX0RJVl9BQ0RTLCBhY2RzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfQVVESU8sIDAsIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogTm90ZSB0aGF0IGlmIHRoZSBQTEwgaXMgaW4gdXNlIHRoZSBXTTk3MTNfUENNQ0xLX1BMTF9ESVYgbmVlZHMKLQkgKiB0byBiZSBzZXQgaW5zdGVhZC4KLQkgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV005NzEzX1BDTUNMS19ESVYsCi0JCQkJICAgICBXTTk3MTNfUENNRElWKHdtOTcxM19kaXYpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNzMsOCArMTgxLDcyIEBACiB9LAogfTsKIAorc3RhdGljIGludCB6eWxvbml0ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoY2xrX3BvdXQpIHsKKwkJcG91dCA9IGNsa19nZXQoTlVMTCwgIkNMS19QT1VUIik7CisJCWlmIChJU19FUlIocG91dCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBvYnRhaW4gQ0xLX1BPVVQ6ICVsZFxuIiwKKwkJCQlQVFJfRVJSKHBvdXQpKTsKKwkJCXJldHVybiBQVFJfRVJSKHBvdXQpOworCQl9CisKKwkJcmV0ID0gY2xrX2VuYWJsZShwb3V0KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIENMS19QT1VUOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJY2xrX3B1dChwb3V0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJNQ0xLIGVuYWJsZWQgYXQgJWx1SHpcbiIsCisJCQljbGtfZ2V0X3JhdGUocG91dCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp5bG9uaXRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChjbGtfcG91dCkgeworCQljbGtfZGlzYWJsZShwb3V0KTsKKwkJY2xrX3B1dChwb3V0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eWxvbml0ZV9zdXNwZW5kX3Bvc3Qoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlmIChjbGtfcG91dCkKKwkJY2xrX2Rpc2FibGUocG91dCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eWxvbml0ZV9yZXN1bWVfcHJlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY2xrX3BvdXQpIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShwb3V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJsZSBDTEtfUE9VVDogJWRcbiIsCisJCQkJcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCB6eWxvbml0ZSA9IHsKIAkubmFtZSA9ICJaeWxvbml0ZSIsCisJLnByb2JlID0gJnp5bG9uaXRlX3Byb2JlLAorCS5yZW1vdmUgPSAmenlsb25pdGVfcmVtb3ZlLAorCS5zdXNwZW5kX3Bvc3QgPSAmenlsb25pdGVfc3VzcGVuZF9wb3N0LAorCS5yZXN1bWVfcHJlID0gJnp5bG9uaXRlX3Jlc3VtZV9wcmUsCiAJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCiAJLmRhaV9saW5rID0genlsb25pdGVfZGFpLAogCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKHp5bG9uaXRlX2RhaSksCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwppbmRleCBmY2QwM2FjLi4yZjNhMjFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKQEAgLTEsMTkgKzEsMzEgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0MKLQl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciB0aGUgU2Ftc3VuZyBTM0MyNFhYIGNoaXBzIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgdGhlIFNhbXN1bmcgUzNDWFhYWCBjaGlwcyIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzY0WFgKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KLQkgIHRoZSBTM0MyNFhYIEFDOTcsIEkyUyBvciBTU1AgaW50ZXJmYWNlLiBZb3Ugd2lsbCBhbHNvIG5lZWQKLQkgIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgorCSAgdGhlIFMzQzI0WFggYW5kIFMzQzY0WFggQUM5NywgSTJTIG9yIFNTUCBpbnRlcmZhY2UuIFlvdSB3aWxsCisJICBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCiAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfSTJTCiAJdHJpc3RhdGUKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKworY29uZmlnIFNORF9TM0NfSTJTVjJfU09DCisJdHJpc3RhdGUKIAogY29uZmlnIFNORF9TM0MyNDEyX1NPQ19JMlMKIAl0cmlzdGF0ZQorCXNlbGVjdCBTTkRfUzNDX0kyU1YyX1NPQworCXNlbGVjdCBTM0MyNDEwX0RNQQorCitjb25maWcgU05EX1MzQzY0WFhfU09DX0kyUworCXRyaXN0YXRlCisJc2VsZWN0IFNORF9TM0NfSTJTVjJfU09DCisJc2VsZWN0IFMzQzY0WFhfRE1BCiAKIGNvbmZpZyBTTkRfUzNDMjQ0M19TT0NfQUM5NwogCXRyaXN0YXRlCisJc2VsZWN0IFMzQzI0MTBfRE1BCiAJc2VsZWN0IEFDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUM5N19CVVMKIAkKQEAgLTI2LDYgKzM4LDE0IEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQwCiAJICB3aXRoIHRoZSBXTTg3NTMuCiAKK2NvbmZpZyBTTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTAKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBKaXZlIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfSklWRQorCXNlbGVjdCBTTkRfU09DX1dNODc1MAorCXNlbGVjdCBTTkRfUzNDMjQxMl9TT0NfSTJTCisJaGVscAorCSAgU2F0IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgSml2ZS4KKwogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19TTURLMjQ0M19XTTk3MTAKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgU01ESzI0NDMgLSBXTTk3MTAiCiAJZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9TTURLMjQ0MwpAQCAtNDgsNCArNjgsNSBAQAogCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgVURBMTM0WCB3aXJlZCB0byBhIFMzQzI0WFgiCiAgICAgICAgCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DCiAgICAgICAgCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfTDMKICAgICAgICAJc2VsZWN0IFNORF9TT0NfVURBMTM0WApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQppbmRleCA5NmIzZjNmLi4wN2E5M2EyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpAQCAtMiwxOSArMiwyNSBAQAogc25kLXNvYy1zM2MyNHh4LW9ianMgOj0gczNjMjR4eC1wY20ubwogc25kLXNvYy1zM2MyNHh4LWkycy1vYmpzIDo9IHMzYzI0eHgtaTJzLm8KIHNuZC1zb2MtczNjMjQxMi1pMnMtb2JqcyA6PSBzM2MyNDEyLWkycy5vCitzbmQtc29jLXMzYzY0eHgtaTJzLW9ianMgOj0gczNjNjR4eC1pMnMubwogc25kLXNvYy1zM2MyNDQzLWFjOTctb2JqcyA6PSBzM2MyNDQzLWFjOTcubworc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCiAKIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0MpICs9IHNuZC1zb2MtczNjMjR4eC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0kyUykgKz0gc25kLXNvYy1zM2MyNHh4LWkycy5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0NDNfU09DX0FDOTcpICs9IHNuZC1zb2MtczNjMjQ0My1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjQxMl9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0MTItaTJzLm8KK29iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzY0eHgtaTJzLm8KK29iai0kKENPTkZJR19TTkRfUzNDX0kyU1YyX1NPQykgKz0gc25kLXNvYy1zM2MtaTJzLXYyLm8KIAogIyBTM0MyNFhYIE1hY2hpbmUgU3VwcG9ydAorc25kLXNvYy1qaXZlLXdtODc1MC1vYmpzIDo9IGppdmVfd204NzUwLm8KIHNuZC1zb2MtbmVvMTk3My13bTg3NTMtb2JqcyA6PSBuZW8xOTczX3dtODc1My5vCiBzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC1vYmpzIDo9IHNtZGsyNDQzX3dtOTcxMC5vCiBzbmQtc29jLWxuMjQ0MHNiYy1hbGM2NTAtb2JqcyA6PSBsbjI0NDBzYmNfYWxjNjUwLm8KIHNuZC1zb2MtczNjMjR4eC11ZGExMzR4LW9ianMgOj0gczNjMjR4eF91ZGExMzR4Lm8KIAorb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19KSVZFX1dNODc1MCkgKz0gc25kLXNvYy1qaXZlLXdtODc1MC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX05FTzE5NzNfV004NzUzKSArPSBzbmQtc29jLW5lbzE5NzMtd204NzUzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwKSArPSBzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0xOMjQ0MFNCQ19BTEM2NTApICs9IHNuZC1zb2MtbG4yNDQwc2JjLWFsYzY1MC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jIGIvc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjA2Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYwpAQCAtMCwwICsxLDIwMSBAQAorLyogc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYworICoKKyAqIENvcHlyaWdodCAyMDA3LDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogQmFzZWQgb24gc291bmQvc29jL3B4YS9zcGl0ei5jCisgKglDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoJQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgorI2luY2x1ZGUgInMzYzI0MTItaTJzLmgiCisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzUwLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsgIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkxPVVQxIiB9LAorCXsgIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlJPVVQxIiB9LAorCXsgIkludGVybmFsIFNwZWFrZXIiLCBOVUxMLCAiTE9VVDIiIH0sCisJeyAiSW50ZXJuYWwgU3BlYWtlciIsIE5VTEwsICJST1VUMiIgfSwKKwl7ICJMSU5QVVQxIiwgTlVMTCwgIkxpbmUgSW5wdXQiIH0sCisJeyAiUklOUFVUMSIsIE5VTEwsICJMaW5lIElucHV0IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc1MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiSW50ZXJuYWwgU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJMaW5lIEluIiwgTlVMTCksCit9OworCitzdGF0aWMgaW50IGppdmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXN0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjIGRpdjsKKwl1bnNpZ25lZCBpbnQgY2xrID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgODAwMDoKKwljYXNlIDE2MDAwOgorCWNhc2UgNDgwMDA6CisJY2FzZSA5NjAwMDoKKwkJY2xrID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJY2FzZSAyMjA1MDoKKwljYXNlIDQ0MTAwOgorCQljbGsgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJfQorCisJczNjX2kyc3YyX2NhbGNfcmF0ZSgmZGl2LCBOVUxMLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAorCQkJICAgIHMzYzI0MTJfZ2V0X2lpc2NsaygpKTsKKworCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayBmb3IgREFDIGFuZCBBREMgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzUwX1NZU0NMSywgY2xrLAorCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0MTJfRElWX1JDTEssIGRpdi5mc19kaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0MyNDEyX0RJVl9QUkVTQ0FMRVIsCisJCQkJICAgICBkaXYuY2xrX2RpdiAtIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgaml2ZV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGppdmVfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCBqaXZlX3dtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgZXJyOworCisJLyogVGhlc2UgZW5kcG9pbnRzIGFyZSBub3QgYmVpbmcgdXNlZC4gKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOUFVUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQyIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk8iKTsKKworCS8qIEFkZCBqaXZlIHNwZWNpZmljIHdpZGdldHMgKi8KKwllcnIgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKHdtODc1MF9kYXBtX3dpZGdldHMpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhZGQgd2lkZ2V0cyAoJWQpXG4iLAorCQkgICAgICAgX19mdW5jX18sIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGppdmVfZGFpID0geworCS5uYW1lCQk9ICJ3bTg3NTAiLAorCS5zdHJlYW1fbmFtZQk9ICJXTTg3NTAiLAorCS5jcHVfZGFpCT0gJnMzYzI0MTJfaTJzX2RhaSwKKwkuY29kZWNfZGFpCT0gJndtODc1MF9kYWksCisJLmluaXQJCT0gaml2ZV93bTg3NTBfaW5pdCwKKwkub3BzCQk9ICZqaXZlX29wcywKK307CisKKy8qIGppdmUgYXVkaW8gbWFjaGluZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19tYWNoaW5lIHNuZF9zb2NfbWFjaGluZV9qaXZlID0geworCS5uYW1lCQk9ICJKaXZlIiwKKwkuZGFpX2xpbmsJPSAmaml2ZV9kYWksCisJLm51bV9saW5rcwk9IDEsCit9OworCisvKiBqaXZlIGF1ZGlvIHByaXZhdGUgZGF0YSAqLworc3RhdGljIHN0cnVjdCB3bTg3NTBfc2V0dXBfZGF0YSBqaXZlX3dtODc1MF9zZXR1cCA9IHsKK307CisKKy8qIGppdmUgYXVkaW8gc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGppdmVfc25kX2RldmRhdGEgPSB7CisJLm1hY2hpbmUJPSAmc25kX3NvY19tYWNoaW5lX2ppdmUsCisJLnBsYXRmb3JtCT0gJnMzYzI0eHhfc29jX3BsYXRmb3JtLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTg3NTBfc3BpLAorCS5jb2RlY19kYXRhCT0gJmppdmVfd204NzUwX3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmppdmVfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaml2ZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19qaXZlKCkpCisJCXJldHVybiAwOworCisJcHJpbnRrKCJKSVZFIFdNODc1MCBBdWRpbyBzdXBwb3J0XG4iKTsKKworCWppdmVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghaml2ZV9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGppdmVfc25kX2RldmljZSwgJmppdmVfc25kX2RldmRhdGEpOworCWppdmVfc25kX2RldmRhdGEuZGV2ID0gJmppdmVfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoaml2ZV9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQoaml2ZV9zbmRfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqaXZlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihqaXZlX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChqaXZlX2luaXQpOworbW9kdWxlX2V4aXQoaml2ZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBKaXZlIEF1ZGlvIHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jCmluZGV4IDQ1YmIxMmUuLjI4OWZhZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYwpAQCAtMjksMjUgKzI5LDE3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzUzLmgiCiAjaW5jbHVkZSAibG00ODU3LmgiCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCi0vKiBEZWJ1Z2dpbmcgc3R1ZmYgKi8KLSNkZWZpbmUgUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTNfREVCVUcgMAotI2lmIFMzQzI0WFhfU09DX05FTzE5NzNfV004NzUzX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAiczNjMjR4eC1zb2MtbmVvMTk3My13bTg3NTM6ICIgeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmCi0KIC8qIGRlZmluZSB0aGUgc2NlbmFyaW9zICovCiAjZGVmaW5lIE5FT19BVURJT19PRkYJCQkwCiAjZGVmaW5lIE5FT19HU01fQ0FMTF9BVURJT19IQU5EU0VUCTEKQEAgLTcyLDcgKzY0LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGlpc19jbGtyYXRlOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc19jbGtyYXRlID0gczNjMjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSgpOwogCkBAIC0xNTgsNyArMTUwLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGRpc2FibGUgdGhlIFBMTCAqLwogCXJldHVybiBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004NzUzX1BMTDEsIDAsIDApOwpAQCAtMTgxLDcgKzE3Myw3IEBACiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBpaXNfY2xrcmF0ZTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNfY2xrcmF0ZSA9IHMzYzI0eHhfaTJzX2dldF9jbG9ja3JhdGUoKTsKIApAQCAtMjI0LDcgKzIxNiw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KIAlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwyLCAwLCAwKTsKQEAgLTI0Niw3ICsyMzgsNyBAQAogCiBzdGF0aWMgaW50IHNldF9zY2VuYXJpb19lbmRwb2ludHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgc2NlbmFyaW8pCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAobmVvMTk3M19zY2VuYXJpbykgewogCWNhc2UgTkVPX0FVRElPX09GRjoKQEAgLTMzMCw3ICszMjIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAobmVvMTk3M19zY2VuYXJpbyA9PSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKIAkJcmV0dXJuIDA7CkBAIC0zNDQsNyArMzM2LDcgQEAKIAogc3RhdGljIHZvaWQgbG00ODU3X3dyaXRlX3JlZ3Modm9pZCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGkyY19tYXN0ZXJfc2VuZChpMmMsIGxtNDg1N19yZWdzLCA0KSAhPSA0KQogCQlwcmludGsoS0VSTl9FUlIgImxtNDg1NzogaTJjIHdyaXRlIGZhaWxlZFxuIik7CkBAIC0zNTcsNyArMzQ5LDcgQEAKIAlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweDBGOwogCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4RkY7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAobG00ODU3X3JlZ3NbcmVnXSA+PiBzaGlmdCkgJiBtYXNrOwogCXJldHVybiAwOwpAQCAtMzg1LDcgKzM3Nyw3IEBACiB7CiAJdTggdmFsdWUgPSBsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJiAweDBGOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICh2YWx1ZSkKIAkJdmFsdWUgLT0gNTsKQEAgLTM5OSw3ICszOTEsNyBAQAogewogCXU4IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHZhbHVlKQogCQl2YWx1ZSArPSA1OwpAQCAtNTA2LDkgKzQ5OCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgbmVvMTk3M193bTg3NTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHNldCB1cCBOQyBjb2RlYyBwaW5zICovCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxPVVQyIik7CkBAIC01MjYsMTMgKzUxOCwxMCBAQAogCXNldF9zY2VuYXJpb19lbmRwb2ludHMoY29kZWMsIE5FT19BVURJT19PRkYpOwogCiAJLyogYWRkIG5lbzE5NzMgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfbmVvMTk3M19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODc1M19uZW8xOTczX2NvbnRyb2xzW2ldLAotCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1M19uZW8xOTczX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoODc1M19uZW8xOTczX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBzZXQgdXAgbmVvMTk3MyBzcGVjaWZpYyBhdWRpbyByb3V0ZXMgKi8KIAllcnIgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgZGFwbV9yb3V0ZXMsCkBAIC01ODUsMjEgKzU3NCwxNSBAQAogCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKG5lbzE5NzNfZGFpKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgbmVvMTk3M193bTg3NTNfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWEsCi19OwotCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG5lbzE5NzNfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmbmVvMTk3MywKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzUzLAotCS5jb2RlY19kYXRhID0gJm5lbzE5NzNfd204NzUzX3NldHVwLAogfTsKIAogc3RhdGljIGludCBsbTQ4NTdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpMmMgPSBjbGllbnQ7CiAKQEAgLTYwOSw3ICs1OTIsNyBAQAogCiBzdGF0aWMgaW50IGxtNDg1N19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWkyYyA9IE5VTEw7CiAKQEAgLTYyMCw3ICs2MDMsNyBAQAogCiBzdGF0aWMgaW50IGxtNDg1N19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJZGV2X2RiZygmZGV2LT5kZXYsICJsbTQ4NTdfc3VzcGVuZFxuIik7CiAJbG00ODU3X3N0YXRlID0gbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdICYgMHhmOwpAQCAtNjMzLDcgKzYxNiw3IEBACiAKIHN0YXRpYyBpbnQgbG00ODU3X3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2KQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAobG00ODU3X3N0YXRlKSB7CiAJCWxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSB8PSAobG00ODU3X3N0YXRlICYgMHgwZik7CkBAIC02NDQsNyArNjI3LDcgQEAKIAogc3RhdGljIHZvaWQgbG00ODU3X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWRldl9kYmcoJmRldi0+ZGV2LCAibG00ODU3X3NodXRkb3duXG4iKTsKIAlsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJj0gMHhmMDsKQEAgLTY3NSw3ICs2NTgsNyBAQAogewogCWludCByZXQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFtYWNoaW5lX2lzX25lbzE5NzNfZ3RhMDEoKSkgewogCQlwcmludGsoS0VSTl9JTkZPCkBAIC03MDYsNyArNjg5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG5lbzE5NzNfZXhpdCh2b2lkKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpMmNfZGVsX2RyaXZlcigmbG00ODU3X2kyY19kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfc25kX2RldmljZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1YTRjOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuYwpAQCAtMCwwICsxLDYzOCBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWkyYy12Mi5jCisgKgorICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBJMlMgY29yZSBmb3IgbmV3ZXIgU2Ftc3VuZyBTb0NzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoJR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbQorICoJbGludXhAd29sZnNvbm1pY3JvLmNvbQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwNywgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtczNjMjQxMi1paXMuaD4KKworI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisjaW5jbHVkZSAiczNjLWkycy12Mi5oIgorCisjZGVmaW5lIFMzQzI0MTJfSTJTX0RFQlVHX0NPTiAwCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlyZXR1cm4gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworfQorCisjZGVmaW5lIGJpdF9zZXQodiwgYikgKCgodikgJiAoYikpID8gMSA6IDApCisKKyNpZiBTM0MyNDEyX0kyU19ERUJVR19DT04KK3N0YXRpYyB2b2lkIGRiZ19zaG93Y29uKGNvbnN0IGNoYXIgKmZuLCB1MzIgY29uKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlczogTFJJPSVkLCBUWEZFTVBUPSVkLCBSWEZFTVBUPSVkLCBUWEZGVUxMPSVkLCBSWEZGVUxMPSVkXG4iLCBmbiwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0VNUFRZKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRklGT19FTVBUWSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRlVMTCksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRlVMTCkpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQQVVTRTogVFhETUE9JWQsIFJYRE1BPSVkLCBUWENIPSVkLCBSWENIPSVkXG4iLAorCSAgICAgICBmbiwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0UpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRSkpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQUNUSVZFOiBUWERNQT0lZCwgUlhETUE9JWQsIElJUz0lZFxuIiwgZm4sCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX3Nob3djb24oY29uc3QgY2hhciAqZm4sIHUzMiBjb24pCit7Cit9CisjZW5kaWYKKworCisvKiBUdXJuIG9uIG9yIG9mZiB0aGUgdHJhbnNtaXNzaW9uIHBhdGguICovCit2b2lkIHMzYzI0MTJfc25kX3R4Y3RybChzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywgaW50IG9uKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKKwl1MzIgZmljLCBjb24sIG1vZDsKKworCXByX2RlYnVnKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7CisKKwlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCXByX2RlYnVnKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOworCisJaWYgKG9uKSB7CisJCWNvbiB8PSBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUgfCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0U7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCQkvKiBkbyBub3RoaW5nLCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihpMnMtPmRldiwgIlRYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOworCQl9CisKKwkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwl9IGVsc2UgeworCQkvKiBOb3RlLCB3ZSBkbyBub3QgaGF2ZSBhbnkgaW5kaWNhdGlvbiB0aGF0IHRoZSBGSUZPIHByb2JsZW1zCisJCSAqIHRoYSB0aGUgUzNDMjQxMC8yNDQwIGhhZCBhcHBseSBoZXJlLCBzbyB3ZSBzaG91bGQgYmUgYWJsZQorCQkgKiB0byBkaXNhYmxlIHRoZSBETUEgYW5kIFRYIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBGSUZPUy4KKwkJICovCisKKwkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRTsKKwkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRTsKKworCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgeworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoaTJzLT5kZXYsICJUWERJUzogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7CisJCX0KKworCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOworCX0KKworCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJZGJnX3Nob3djb24oX19mdW5jX18sIGNvbik7CisJcHJfZGVidWcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX3NuZF90eGN0cmwpOworCit2b2lkIHMzYzI0MTJfc25kX3J4Y3RybChzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywgaW50IG9uKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKKwl1MzIgZmljLCBjb24sIG1vZDsKKworCXByX2RlYnVnKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7CisKKwlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCXByX2RlYnVnKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOworCisJaWYgKG9uKSB7CisJCWNvbiB8PSBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUgfCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0U7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6CisJCQkvKiBkbyBub3RoaW5nLCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihpMnMtPmRldiwgIlJYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOworCQl9CisKKwkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwl9IGVsc2UgeworCQkvKiBTZWUgdHhjdHJsIG5vdGVzIG9uIEZJRk9zLiAqLworCisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFOworCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFOworCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0U7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKKwkJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGkycy0+ZGV2LCAiUlhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7CisJCX0KKworCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOworCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCX0KKworCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJcHJfZGVidWcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX3NuZF9yeGN0cmwpOworCisvKgorICogV2FpdCBmb3IgdGhlIExSIHNpZ25hbCB0byBhbGxvdyBzeW5jaHJvbmlzYXRpb24gdG8gdGhlIEwvUiBjbG9jaworICogZnJvbSB0aGUgY29kZWMuIE1heSBvbmx5IGJlIG5lZWRlZCBmb3Igc2xhdmUgbW9kZS4KKyAqLworc3RhdGljIGludCBzM2MyNDEyX3NuZF9scnN5bmMoc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMpCit7CisJdTMyIGlpc2NvbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisKKwl3aGlsZSAoMSkgeworCQlpaXNjb24gPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCWlmIChpaXNjb24gJiBTM0MyNDEyX0lJU0NPTl9MUklOREVYKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVvdXQgPCBqaWZmaWVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFMzQzI0MTIgSTJTIERBSSBmb3JtYXQKKyAqLworc3RhdGljIGludCBzM2MyNDEyX2kyc19zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgaWlzbW9kOworCisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKworCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHI6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEzKQorI2RlZmluZSBJSVNNT0RfTUFTVEVSX01BU0sgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0sKKyNkZWZpbmUgSUlTTU9EX1NMQVZFIFMzQzI0MTJfSUlTTU9EX1NMQVZFCisjZGVmaW5lIElJU01PRF9NQVNURVIgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfUzNDNjRYWCkKKy8qIEZyb20gUmV2MS4xIGRhdGFzaGVldCwgd2UgaGF2ZSB0d28gbWFzdGVyIGFuZCB0d28gc2xhdmUgbW9kZXM6CisgKiBJTVNbMTE6MTBdOgorICoJMDAgPSBtYXN0ZXIgbW9kZSwgZmVkIGZyb20gUENMSworICoJMDEgPSBtYXN0ZXIgbW9kZSwgZmVkIGZyb20gQ0xLQVVESU8KKyAqCTEwID0gc2xhdmUgbW9kZSwgdXNpbmcgUENMSworICoJMTEgPSBzbGF2ZSBtb2RlLCB1c2luZyBJMlNDTEsKKyAqLworI2RlZmluZSBJSVNNT0RfTUFTVEVSX01BU0sgKDEgPDwgMTEpCisjZGVmaW5lIElJU01PRF9TTEFWRSAoMSA8PCAxMSkKKyNkZWZpbmUgSUlTTU9EX01BU1RFUiAoMHgwKQorI2VuZGlmCisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlpMnMtPm1hc3RlciA9IDA7CisJCWlpc21vZCAmPSB+SUlTTU9EX01BU1RFUl9NQVNLOworCQlpaXNtb2QgfD0gSUlTTU9EX1NMQVZFOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWkycy0+bWFzdGVyID0gMTsKKwkJaWlzbW9kICY9IH5JSVNNT0RfTUFTVEVSX01BU0s7CisJCWlpc21vZCB8PSBJSVNNT0RfTUFTVEVSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygidW5rbndvbiBtYXN0ZXIvc2xhdmUgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9TREZfTUFTSzsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfTVNCOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9MU0I7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX0lJUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIlVua25vd24gZGF0YSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDEyX2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKnNvY2RhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaSA9IHJ0ZC0+ZGFpOworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWktPmNwdV9kYWkpOworCXUzMiBpaXNtb2Q7CisKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSBpMnMtPmRtYV9wbGF5YmFjazsKKwllbHNlCisJCWRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSBpMnMtPmRtYV9jYXB0dXJlOworCisJLyogV29ya2luZyBjb3BpZXMgb2YgcmVnaXN0ZXIgKi8KKwlpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoIiVzOiByOiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgorCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfOEJJVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF84QklUOworCQlicmVhazsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoIiVzOiB3OiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDEyX2kyc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8ocnRkLT5kYWktPmNwdV9kYWkpOworCWludCBjYXB0dXJlID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJdW5zaWduZWQgbG9uZyBpcnFzOworCWludCByZXQgPSAwOworCisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJLyogT24gc3RhcnQsIGVuc3VyZSB0aGF0IHRoZSBGSUZPcyBhcmUgY2xlYXJlZCBhbmQgcmVzZXQuICovCisKKwkJd3JpdGVsKGNhcHR1cmUgPyBTM0MyNDEyX0lJU0ZJQ19SWEZMVVNIIDogUzNDMjQxMl9JSVNGSUNfVFhGTFVTSCwKKwkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKworCQkvKiBjbGVhciBhZ2FpbiwganVzdCBpbiBjYXNlICovCisJCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaWYgKCFpMnMtPm1hc3RlcikgeworCQkJcmV0ID0gczNjMjQxMl9zbmRfbHJzeW5jKGkycyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXhpdF9lcnI7CisJCX0KKworCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKKworCQlpZiAoY2FwdHVyZSkKKwkJCXMzYzI0MTJfc25kX3J4Y3RybChpMnMsIDEpOworCQllbHNlCisJCQlzM2MyNDEyX3NuZF90eGN0cmwoaTJzLCAxKTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFzKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJbG9jYWxfaXJxX3NhdmUoaXJxcyk7CisKKwkJaWYgKGNhcHR1cmUpCisJCQlzM2MyNDEyX3NuZF9yeGN0cmwoaTJzLCAwKTsKKwkJZWxzZQorCQkJczNjMjQxMl9zbmRfdHhjdHJsKGkycywgMCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworZXhpdF9lcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCBTM0MyNDEyIENsb2NrIGRpdmlkZXJzCisgKi8KK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJICBpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgcmVnOworCisJcHJfZGVidWcoIiVzKCVwLCAlZCwgJWQpXG4iLCBfX2Z1bmNfXywgY3B1X2RhaSwgZGl2X2lkLCBkaXYpOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIFMzQ19JMlNWMl9ESVZfQkNMSzoKKwkJcmVnID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQlyZWcgJj0gflMzQzI0MTJfSUlTTU9EX0JDTEtfTUFTSzsKKwkJd3JpdGVsKHJlZyB8IGRpdiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJCXByX2RlYnVnKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOworCQlicmVhazsKKworCWNhc2UgUzNDX0kyU1YyX0RJVl9SQ0xLOgorCQlpZiAoZGl2ID4gMykgeworCQkJLyogY29udmVydCB2YWx1ZSB0byBiaXQgZmllbGQgKi8KKworCQkJc3dpdGNoIChkaXYpIHsKKwkJCWNhc2UgMjU2OgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzg0OgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfMzg0RlM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNTEyOgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfNTEyRlM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNzY4OgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfNzY4RlM7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKworCQlyZWcgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXJlZyAmPSB+UzNDMjQxMl9JSVNNT0RfUkNMS19NQVNLOworCQl3cml0ZWwocmVnIHwgZGl2LCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXByX2RlYnVnKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOworCQlicmVhazsKKworCWNhc2UgUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVI6CisJCWlmIChkaXYgPj0gMCkgeworCQkJd3JpdGVsKChkaXYgPDwgOCkgfCBTM0MyNDEyX0lJU1BTUl9QU1JFTiwKKwkJCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisJCX0gZWxzZSB7CisJCQl3cml0ZWwoMHgwLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisJCX0KKwkJcHJfZGVidWcoIiVzOiBQU1I9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGRlZmF1bHQgdGFibGUgb2YgYWxsIGF2YWlhbGFibGUgcm9vdCBmcyBkaXZpc29ycyAqLworc3RhdGljIHVuc2lnbmVkIGludCBpaXNfZnNfdGFiW10gPSB7IDI1NiwgNTEyLCAzODQsIDc2OCB9OworCitpbnQgczNjMjQxMl9paXNfY2FsY19yYXRlKHN0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjICppbmZvLAorCQkJICB1bnNpZ25lZCBpbnQgKmZzdGFiLAorCQkJICB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IGZzY2xrOworCXVuc2lnbmVkIGludCBhY3R1YWw7CisJdW5zaWduZWQgaW50IGZzOworCXVuc2lnbmVkIGludCBmc2RpdjsKKwlzaWduZWQgaW50IGRldmlhdGlvbiA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfZnMgPSAwOworCXVuc2lnbmVkIGludCBiZXN0X2RpdiA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfcmF0ZSA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfZGV2aWF0aW9uID0gSU5UX01BWDsKKworCWlmIChmc3RhYiA9PSBOVUxMKQorCQlmc3RhYiA9IGlpc19mc190YWI7CisKKwlmb3IgKGZzID0gMDsgZnMgPCBBUlJBWV9TSVpFKGlpc19mc190YWIpOyBmcysrKSB7CisJCWZzZGl2ID0gaWlzX2ZzX3RhYltmc107CisKKwkJZnNjbGsgPSBjbGtyYXRlIC8gZnNkaXY7CisJCWRpdiA9IGZzY2xrIC8gcmF0ZTsKKworCQlpZiAoKGZzY2xrICUgcmF0ZSkgPiAocmF0ZSAvIDIpKQorCQkJZGl2Kys7CisKKwkJaWYgKGRpdiA8PSAxKQorCQkJY29udGludWU7CisKKwkJYWN0dWFsID0gY2xrcmF0ZSAvIChmc2RpdiAqIGRpdik7CisJCWRldmlhdGlvbiA9IGFjdHVhbCAtIHJhdGU7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVkZnM6IGRpdiAlZCA9PiByZXN1bHQgJWQsIGRldmlhdGlvbiAlZFxuIiwKKwkJICAgICAgIGZzZGl2LCBkaXYsIGFjdHVhbCwgZGV2aWF0aW9uKTsKKworCQlkZXZpYXRpb24gPSBhYnMoZGV2aWF0aW9uKTsKKworCQlpZiAoZGV2aWF0aW9uIDwgYmVzdF9kZXZpYXRpb24pIHsKKwkJCWJlc3RfZnMgPSBmc2RpdjsKKwkJCWJlc3RfZGl2ID0gZGl2OworCQkJYmVzdF9yYXRlID0gYWN0dWFsOworCQkJYmVzdF9kZXZpYXRpb24gPSBkZXZpYXRpb247CisJCX0KKworCQlpZiAoZGV2aWF0aW9uID09IDApCisJCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiYmVzdDogZnM9JWQsIGRpdj0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgYmVzdF9mcywgYmVzdF9kaXYsIGJlc3RfcmF0ZSk7CisKKwlpbmZvLT5mc19kaXYgPSBiZXN0X2ZzOworCWluZm8tPmNsa19kaXYgPSBiZXN0X2RpdjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQxMl9paXNfY2FsY19yYXRlKTsKKworaW50IHMzY19pMnN2Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCSAgICBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywKKwkJICAgIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCisJaTJzLT5kZXYgPSBkZXY7CisKKwkvKiByZWNvcmQgb3VyIGkycyBzdHJ1Y3R1cmUgZm9yIGxhdGVyIHVzZSBpbiB0aGUgY2FsbGJhY2tzICovCisJZGFpLT5wcml2YXRlX2RhdGEgPSBpMnM7CisKKwlpMnMtPnJlZ3MgPSBpb3JlbWFwKGJhc2UsIDB4MTAwKTsKKwlpZiAoaTJzLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWkycy0+aWlzX3BjbGsgPSBjbGtfZ2V0KGRldiwgImlpcyIpOworCWlmIChpMnMtPmlpc19wY2xrID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7CisJCWlvdW5tYXAoaTJzLT5yZWdzKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJY2xrX2VuYWJsZShpMnMtPmlpc19wY2xrKTsKKworCXMzYzI0MTJfc25kX3R4Y3RybChpMnMsIDApOworCXMzYzI0MTJfc25kX3J4Y3RybChpMnMsIDApOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19pMnN2Ml9wcm9iZSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oZGFpKTsKKwl1MzIgaWlzbW9kOworCisJaWYgKGRhaS0+YWN0aXZlKSB7CisJCWkycy0+c3VzcGVuZF9paXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCWkycy0+c3VzcGVuZF9paXNjb24gPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCWkycy0+c3VzcGVuZF9paXNwc3IgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisKKwkJLyogc29tZSBiYXNpYyBzdXNwZW5kIGNoZWNrcyAqLworCisJCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKQorCQkJcHJfd2FybmluZygiJXM6IFJYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKKworCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFKQorCQkJcHJfd2FybmluZygiJXM6IFRYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKKworCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkKKwkJCXByX3dhcm5pbmcoIiVzOiBJSVMgYWN0aXZlXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWkpOworCisJcHJfaW5mbygiZGFpX2FjdGl2ZSAlZCwgSUlTTU9EICUwOHgsIElJU0NPTiAlMDh4XG4iLAorCQlkYWktPmFjdGl2ZSwgaTJzLT5zdXNwZW5kX2lpc21vZCwgaTJzLT5zdXNwZW5kX2lpc2Nvbik7CisKKwlpZiAoZGFpLT5hY3RpdmUpIHsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNjb24sIGkycy0+cmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNtb2QsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNwc3IsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKKworCQl3cml0ZWwoUzNDMjQxMl9JSVNGSUNfUlhGTFVTSCB8IFMzQzI0MTJfSUlTRklDX1RYRkxVU0gsCisJCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisKKwkJbmRlbGF5KDI1MCk7CisJCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzI0MTJfaTJzX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNDEyX2kyc19yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitpbnQgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlkYWktPm9wcy50cmlnZ2VyID0gczNjMjQxMl9pMnNfdHJpZ2dlcjsKKwlkYWktPm9wcy5od19wYXJhbXMgPSBzM2MyNDEyX2kyc19od19wYXJhbXM7CisJZGFpLT5vcHMuc2V0X2ZtdCA9IHMzYzI0MTJfaTJzX3NldF9mbXQ7CisJZGFpLT5vcHMuc2V0X2Nsa2RpdiA9IHMzYzI0MTJfaTJzX3NldF9jbGtkaXY7CisKKwlkYWktPnN1c3BlbmQgPSBzM2MyNDEyX2kyc19zdXNwZW5kOworCWRhaS0+cmVzdW1lID0gczNjMjQxMl9pMnNfcmVzdW1lOworCisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKGRhaSk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njg1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmgKQEAgLTAsMCArMSw5MCBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oCisgKgorICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBTM0NfSTJTVjIgSTJTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqLworCisvKiBUaGlzIGNvZGUgaXMgdGhlIGNvcmUgc3VwcG9ydCBmb3IgdGhlIEkyUyBibG9jayBmb3VuZCBpbiBhIG51bWJlciBvZgorICogU2Ftc3VuZyBTb0MgZGV2aWNlcyB3aGljaCBpcyB1bm9mZmljaWFsbHkgbmFtZWQgSTJTLVYyLiBDdXJyZW50bHkgdGhlCisgKiBTM0MyNDEyIGFuZCB0aGUgUzNDNjRYWCBzZXJpZXMgdXNlIHRoaXMgYmxvY2sgdG8gcHJvdmlkZSAxIG9yIDIgSTJTCisgKiBjaGFubmVscyB2aWEgY29uZmlndXJhYmxlIEdQSU8uCisgKi8KKworI2lmbmRlZiBfX1NORF9TT0NfUzNDMjRYWF9TM0NfSTJTVjJfSTJTX0gKKyNkZWZpbmUgX19TTkRfU09DX1MzQzI0WFhfUzNDX0kyU1YyX0kyU19IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDX0kyU1YyX0RJVl9CQ0xLCSgxKQorI2RlZmluZSBTM0NfSTJTVjJfRElWX1JDTEsJKDIpCisjZGVmaW5lIFMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCSgzKQorCisvKioKKyAqIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAtIFMzQyBJMlMtVjIgaW5mb3JtYXRpb24KKyAqIEBkZXY6IFRoZSBwYXJlbnQgZGV2aWNlIHBhc3NlZCB0byB1c2UgZnJvbSB0aGUgcHJvYmUuCisgKiBAcmVnczogVGhlIHBvaW50ZXIgdG8gdGhlIGRldmljZSByZWdpc3RlIGJsb2NrLgorICogQG1hc3RlcjogVHJ1ZSBpZiB0aGUgSTJTIGNvcmUgaXMgdGhlIEkyUyBiaXQgY2xvY2sgbWFzdGVyLgorICogQGRtYV9wbGF5YmFjazogRE1BIGluZm9ybWF0aW9uIGZvciBwbGF5YmFjayBjaGFubmVsLgorICogQGRtYV9jYXB0dXJlOiBETUEgaW5mb3JtYXRpb24gZm9yIGNhcHR1cmUgY2hhbm5lbC4KKyAqIEBzdXNwZW5kX2lpc21vZDogUE0gc2F2ZSBmb3IgdGhlIElJU01PRCByZWdpc3Rlci4KKyAqIEBzdXNwZW5kX2lpc2NvbjogUE0gc2F2ZSBmb3IgdGhlIElJU0NPTiByZWdpc3Rlci4KKyAqIEBzdXNwZW5kX2lpc3BzcjogUE0gc2F2ZSBmb3IgdGhlIElJU1BTUiByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGlzIHRoZSBwcml2YXRlIGNvZGVjIHN0YXRlIGZvciB0aGUgaGFyZHdhcmUgYXNzb2NpYXRlZCB3aXRoIGFuCisgKiBJMlMgY2hhbm5lbCBzdWNoIGFzIHRoZSByZWdpc3RlciBtYXBwaW5ncyBhbmQgY2xvY2sgc291cmNlcy4KKyAqLworc3RydWN0IHMzY19pMnN2Ml9pbmZvIHsKKwlzdHJ1Y3QgZGV2aWNlCSpkZXY7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCisJc3RydWN0IGNsawkqaWlzX3BjbGs7CisJc3RydWN0IGNsawkqaWlzX2NjbGs7CisJc3RydWN0IGNsawkqaWlzX2NsazsKKworCXVuc2lnbmVkIGNoYXIJIG1hc3RlcjsKKworCXN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zCSpkbWFfcGxheWJhY2s7CisJc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMJKmRtYV9jYXB0dXJlOworCisJdTMyCQkgc3VzcGVuZF9paXNtb2Q7CisJdTMyCQkgc3VzcGVuZF9paXNjb247CisJdTMyCQkgc3VzcGVuZF9paXNwc3I7Cit9OworCitzdHJ1Y3QgczNjX2kyc3YyX3JhdGVfY2FsYyB7CisJdW5zaWduZWQgaW50CWNsa19kaXY7CS8qIGZvciBwcmVzY2FsZXIgKi8KKwl1bnNpZ25lZCBpbnQJZnNfZGl2OwkJLyogZm9yIHJvb3QgZnJhbWUgY2xvY2sgKi8KK307CisKK2V4dGVybiBpbnQgczNjX2kyc3YyX2lpc19jYWxjX3JhdGUoc3RydWN0IHMzY19pMnN2Ml9yYXRlX2NhbGMgKmluZm8sCisJCQkJICAgdW5zaWduZWQgaW50ICpmc3RhYiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKTsKKworLyoqCisgKiBzM2NfaTJzdjJfcHJvYmUgLSBwcm9iZSBmb3IgaTJzIGRldmljZSBoZWxwZXIKKyAqIEBwZGV2OiBUaGUgcGxhdGZvcm0gZGV2aWNlIHN1cHBsaWVkIHRvIHRoZSBvcmlnaW5hbCBwcm9iZS4KKyAqIEBkYWk6IFRoZSBBU29DIERBSSBzdHJ1Y3R1cmUgc3VwcGxpZWQgdG8gdGhlIG9yaWdpbmFsIHByb2JlLgorICogQGkyczogT3VyIGxvY2FsIGkycyBzdHJ1Y3R1cmUgdG8gZmlsbCBpbi4KKyAqIEBiYXNlOiBUaGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgcmVnaXN0ZXJzLgorICovCitleHRlcm4gaW50IHMzY19pMnN2Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkgICBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZSk7CisKKy8qKgorICogczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSAtIHJlZ2lzdGVyIGRhaSB3aXRoIHNvYyBjb3JlCisgKiBAZGFpOiBUaGUgc25kX3NvY19kYWkgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCisgKgorICogRmlsbCBpbiBhbnkgbWlzc2luZyBmaWVsZHMgYW5kIHRoZW4gcmVnaXN0ZXIgdGhlIGdpdmVuIGRhaSB3aXRoIHRoZQorICogc29jIGNvcmUuCisgKi8KK2V4dGVybiBpbnQgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSk7CisKKyNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0NfSTJTVjJfSTJTX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCmluZGV4IGYzZmMwYWIuLjFjYTNjZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTMwLDI2ICszMSwxNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNDEyLWkycy5oIgogCiAjZGVmaW5lIFMzQzI0MTJfSTJTX0RFQlVHIDAKLSNkZWZpbmUgUzNDMjQxMl9JMlNfREVCVUdfQ09OIDAKLQotI2lmIFMzQzI0MTJfSTJTX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9JTkZPIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0MTJfZG1hX2NsaWVudF9vdXQgPSB7CiAJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIG91dCIKQEAgLTczLDQzMSArNjQsNyBAQAogCS5kbWFfc2l6ZQk9IDQsCiB9OwogCi1zdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyB7Ci0Jc3RydWN0IGRldmljZQkqZGV2OwotCXZvaWQgX19pb21lbQkqcmVnczsKLQlzdHJ1Y3QgY2xrCSppaXNfY2xrOwotCXN0cnVjdCBjbGsJKmlpc19wY2xrOwotCXN0cnVjdCBjbGsJKmlpc19jY2xrOwotCi0JdTMyCQkgc3VzcGVuZF9paXNtb2Q7Ci0JdTMyCQkgc3VzcGVuZF9paXNjb247Ci0JdTMyCQkgc3VzcGVuZF9paXNwc3I7Ci19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gczNjMjQxMl9pMnM7Ci0KLSNkZWZpbmUgYml0X3NldCh2LCBiKSAoKCh2KSAmIChiKSkgPyAxIDogMCkKLQotI2lmIFMzQzI0MTJfSTJTX0RFQlVHX0NPTgotc3RhdGljIHZvaWQgZGJnX3Nob3djb24oY29uc3QgY2hhciAqZm4sIHUzMiBjb24pCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMUkk9JWQsIFRYRkVNUFQ9JWQsIFJYRkVNUFQ9JWQsIFRYRkZVTEw9JWQsIFJYRkZVTEw9JWRcbiIsIGZuLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fTFJJTkRFWCksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRU1QVFkpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0VNUFRZKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRklGT19GVUxMKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRklGT19GVUxMKSk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBBVVNFOiBUWERNQT0lZCwgUlhETUE9JWQsIFRYQ0g9JWQsIFJYQ0g9JWRcbiIsCi0JICAgICAgIGZuLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0UpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0UpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBQ1RJVkU6IFRYRE1BPSVkLCBSWERNQT0lZCwgSUlTPSVkXG4iLCBmbiwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYmdfc2hvd2Nvbihjb25zdCBjaGFyICpmbiwgdTMyIGNvbikKLXsKLX0KLSNlbmRpZgotCi0vKiBUdXJuIG9uIG9yIG9mZiB0aGUgdHJhbnNtaXNzaW9uIHBhdGguICovCi1zdGF0aWMgdm9pZCBzM2MyNDEyX3NuZF90eGN0cmwoaW50IG9uKQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gaTJzLT5yZWdzOwotCXUzMiBmaWMsIGNvbiwgbW9kOwotCi0JREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7Ci0KLQlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCURCRygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKLQotCWlmIChvbikgewotCQljb24gfD0gUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFIHwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFOwotCi0JCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgotCQkJLyogZG8gbm90aGluZywgd2UgYXJlIGluIHRoZSByaWdodCBtb2RlICovCi0JCQlicmVhazsKLQotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoaTJzLT5kZXYsICJUWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKLQkJfQotCi0JCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JfSBlbHNlIHsKLQkJLyogTm90ZSwgd2UgZG8gbm90IGhhdmUgYW55IGluZGljYXRpb24gdGhhdCB0aGUgRklGTyBwcm9ibGVtcwotCQkgKiB0aGEgdGhlIFMzQzI0MTAvMjQ0MCBoYWQgYXBwbHkgaGVyZSwgc28gd2Ugc2hvdWxkIGJlIGFibGUKLQkJICogdG8gZGlzYWJsZSB0aGUgRE1BIGFuZCBUWCB3aXRob3V0IHJlc2V0dGluZyB0aGUgRklGT1MuCi0JCSAqLwotCi0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0U7Ci0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkU7Ci0KLQkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGkycy0+ZGV2LCAiVFhESVM6IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOwotCQl9Ci0KLQkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQl9Ci0KLQlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCWRiZ19zaG93Y29uKF9fZnVuY19fLCBjb24pOwotCURCRygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQxMl9zbmRfcnhjdHJsKGludCBvbikKLXsKLQlzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyAqaTJzID0gJnMzYzI0MTJfaTJzOwotCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKLQl1MzIgZmljLCBjb24sIG1vZDsKLQotCURCRygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgb24pOwotCi0JZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQljb24gPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCW1vZCA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQlEQkcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Ci0KLQlpZiAob24pIHsKLQkJY29uIHw9IFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSB8IFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0U7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRTsKLQotCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgewotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKLQkJCS8qIGRvIG5vdGhpbmcsIHdlIGFyZSBpbiB0aGUgcmlnaHQgbW9kZSAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGkycy0+ZGV2LCAiUlhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7Ci0JCX0KLQotCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCX0gZWxzZSB7Ci0JCS8qIFNlZSB0eGN0cmwgbm90ZXMgb24gRklGT3MuICovCi0KLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkU7Ci0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0U7Ci0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRTsKLQotCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgewotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgotCQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOwotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQlicmVhazsKLQotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoaTJzLT5kZXYsICJSWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKLQkJfQotCi0JCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JfQotCi0JZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQlEQkcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Ci19Ci0KLQotLyoKLSAqIFdhaXQgZm9yIHRoZSBMUiBzaWduYWwgdG8gYWxsb3cgc3luY2hyb25pc2F0aW9uIHRvIHRoZSBML1IgY2xvY2sKLSAqIGZyb20gdGhlIGNvZGVjLiBNYXkgb25seSBiZSBuZWVkZWQgZm9yIHNsYXZlIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMl9zbmRfbHJzeW5jKHZvaWQpCi17Ci0JdTMyIGlpc2NvbjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKLQotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0Jd2hpbGUgKDEpIHsKLQkJaWlzY29uID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQkJaWYgKGlpc2NvbiAmIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgpCi0JCQlicmVhazsKLQotCQlpZiAodGltZW91dCA8IGppZmZpZXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDaGVjayB3aGV0aGVyIENQVSBpcyB0aGUgbWFzdGVyIG9yIHNsYXZlCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHMzYzI0MTJfc25kX2lzX2Nsa21hc3Rlcih2b2lkKQotewotCXUzMiBpaXNtb2QgPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpaXNtb2QgJj0gUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7Ci0JcmV0dXJuICEoaWlzbW9kID09IFMzQzI0MTJfSUlTTU9EX1NMQVZFKTsKLX0KLQotLyoKLSAqIFNldCBTM0MyNDEyIEkyUyBEQUkgZm9ybWF0Ci0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGZtdCkKLXsKLQl1MzIgaWlzbW9kOwotCi0KLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgcjogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7Ci0KLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgotCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0xBVkU7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKLQkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSzsKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01BU1RFUl9JTlRFUk5BTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREJHKCJ1bmtud29uIG1hc3Rlci9zbGF2ZSBmb3JtYXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX1NERl9NQVNLOwotCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9NU0I7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX0xTQjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfSUlTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkcoIlVua25vd24gZGF0YSBmb3JtYXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl3cml0ZWwoaWlzbW9kLCBzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHc6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQl1MzIgaWlzbW9kOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0MTJfaTJzX3BjbV9zdGVyZW9fb3V0OwotCWVsc2UKLQkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0MTJfaTJzX3BjbV9zdGVyZW9faW47Ci0KLQkvKiBXb3JraW5nIGNvcGllcyBvZiByZWdpc3RlciAqLwotCWlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JREJHKCIlczogcjogSUlTTU9EOiAleFxuIiwgX19mdW5jX18sIGlpc21vZCk7Ci0KLQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EXzhCSVQ7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6Ci0JCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfOEJJVDsKLQkJYnJlYWs7Ci0JfQotCi0Jd3JpdGVsKGlpc21vZCwgczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQlEQkcoIiVzOiB3OiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEyX2kyc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCWludCBjYXB0dXJlID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7Ci0JdW5zaWduZWQgbG9uZyBpcnFzOwotCWludCByZXQgPSAwOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCS8qIE9uIHN0YXJ0LCBlbnN1cmUgdGhhdCB0aGUgRklGT3MgYXJlIGNsZWFyZWQgYW5kIHJlc2V0LiAqLwotCi0JCXdyaXRlbChjYXB0dXJlID8gUzNDMjQxMl9JSVNGSUNfUlhGTFVTSCA6IFMzQzI0MTJfSUlTRklDX1RYRkxVU0gsCi0JCSAgICAgICBzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCi0JCS8qIGNsZWFyIGFnYWluLCBqdXN0IGluIGNhc2UgKi8KLQkJd3JpdGVsKDB4MCwgczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJaWYgKCFzM2MyNDEyX3NuZF9pc19jbGttYXN0ZXIoKSkgewotCQkJcmV0ID0gczNjMjQxMl9zbmRfbHJzeW5jKCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXhpdF9lcnI7Ci0JCX0KLQotCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKLQotCQlpZiAoY2FwdHVyZSkKLQkJCXMzYzI0MTJfc25kX3J4Y3RybCgxKTsKLQkJZWxzZQotCQkJczNjMjQxMl9zbmRfdHhjdHJsKDEpOwotCi0JCWxvY2FsX2lycV9yZXN0b3JlKGlycXMpOwotCQlicmVhazsKLQotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKLQotCQlpZiAoY2FwdHVyZSkKLQkJCXMzYzI0MTJfc25kX3J4Y3RybCgwKTsKLQkJZWxzZQotCQkJczNjMjQxMl9zbmRfdHhjdHJsKDApOwotCi0JCWxvY2FsX2lycV9yZXN0b3JlKGlycXMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLWV4aXRfZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLS8qIGRlZmF1bHQgdGFibGUgb2YgYWxsIGF2YWlhbGFibGUgcm9vdCBmcyBkaXZpc29ycyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzM2MyNDEyX2lpc19mc1tdID0geyAyNTYsIDUxMiwgMzg0LCA3NjgsIDAgfTsKLQotaW50IHMzYzI0MTJfaWlzX2NhbGNfcmF0ZShzdHJ1Y3QgczNjMjQxMl9yYXRlX2NhbGMgKmluZm8sCi0JCQkgIHVuc2lnbmVkIGludCAqZnN0YWIsCi0JCQkgIHVuc2lnbmVkIGludCByYXRlLCBzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7Ci0JdW5zaWduZWQgaW50IGRpdjsKLQl1bnNpZ25lZCBpbnQgZnNjbGs7Ci0JdW5zaWduZWQgaW50IGFjdHVhbDsKLQl1bnNpZ25lZCBpbnQgZnM7Ci0JdW5zaWduZWQgaW50IGZzZGl2OwotCXNpZ25lZCBpbnQgZGV2aWF0aW9uID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9mcyA9IDA7Ci0JdW5zaWduZWQgaW50IGJlc3RfZGl2ID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9yYXRlID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9kZXZpYXRpb24gPSBJTlRfTUFYOwotCi0KLQlpZiAoZnN0YWIgPT0gTlVMTCkKLQkJZnN0YWIgPSBzM2MyNDEyX2lpc19mczsKLQotCWZvciAoZnMgPSAwOzsgZnMrKykgewotCQlmc2RpdiA9IHMzYzI0MTJfaWlzX2ZzW2ZzXTsKLQotCQlpZiAoZnNkaXYgPT0gMCkKLQkJCWJyZWFrOwotCi0JCWZzY2xrID0gY2xrcmF0ZSAvIGZzZGl2OwotCQlkaXYgPSBmc2NsayAvIHJhdGU7Ci0KLQkJaWYgKChmc2NsayAlIHJhdGUpID4gKHJhdGUgLyAyKSkKLQkJCWRpdisrOwotCi0JCWlmIChkaXYgPD0gMSkKLQkJCWNvbnRpbnVlOwotCi0JCWFjdHVhbCA9IGNsa3JhdGUgLyAoZnNkaXYgKiBkaXYpOwotCQlkZXZpYXRpb24gPSBhY3R1YWwgLSByYXRlOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlZGZzOiBkaXYgJWQgPT4gcmVzdWx0ICVkLCBkZXZpYXRpb24gJWRcbiIsCi0JCSAgICAgICBmc2RpdiwgZGl2LCBhY3R1YWwsIGRldmlhdGlvbik7Ci0KLQkJZGV2aWF0aW9uID0gYWJzKGRldmlhdGlvbik7Ci0KLQkJaWYgKGRldmlhdGlvbiA8IGJlc3RfZGV2aWF0aW9uKSB7Ci0JCQliZXN0X2ZzID0gZnNkaXY7Ci0JCQliZXN0X2RpdiA9IGRpdjsKLQkJCWJlc3RfcmF0ZSA9IGFjdHVhbDsKLQkJCWJlc3RfZGV2aWF0aW9uID0gZGV2aWF0aW9uOwotCQl9Ci0KLQkJaWYgKGRldmlhdGlvbiA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgImJlc3Q6IGZzPSVkLCBkaXY9JWQsIHJhdGU9JWRcbiIsCi0JICAgICAgIGJlc3RfZnMsIGJlc3RfZGl2LCBiZXN0X3JhdGUpOwotCi0JaW5mby0+ZnNfZGl2ID0gYmVzdF9mczsKLQlpbmZvLT5jbGtfZGl2ID0gYmVzdF9kaXY7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfaWlzX2NhbGNfcmF0ZSk7CitzdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzI0MTJfaTJzOwogCiAvKgogICogU2V0IFMzQzI0MTIgQ2xvY2sgc291cmNlCkBAIC01MDcsMTUgKzc0LDE3IEBACiB7CiAJdTMyIGlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CiAKLQlEQkcoIiVzKCVwLCAlZCwgJXUsICVkKVxuIiwgX19mdW5jX18sIGNwdV9kYWksIGNsa19pZCwKKwlwcl9kZWJ1ZygiJXMoJXAsICVkLCAldSwgJWQpXG4iLCBfX2Z1bmNfXywgY3B1X2RhaSwgY2xrX2lkLAogCSAgICBmcmVxLCBkaXIpOwogCiAJc3dpdGNoIChjbGtfaWQpIHsKIAljYXNlIFMzQzI0MTJfQ0xLU1JDX1BDTEs6CisJCXMzYzI0MTJfaTJzLm1hc3RlciA9IDE7CiAJCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7CiAJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUw7CiAJCWJyZWFrOwogCWNhc2UgUzNDMjQxMl9DTEtTUkNfSTJTQ0xLOgorCQlzM2MyNDEyX2kycy5tYXN0ZXIgPSAwOwogCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwogCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0VYVEVSTkFMOwogCQlicmVhazsKQEAgLTUyNyw3NCArOTYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogU2V0IFMzQzI0MTIgQ2xvY2sgZGl2aWRlcnMKLSAqLwotc3RhdGljIGludCBzM2MyNDEyX2kyc19zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKLQkJCQkgIGludCBkaXZfaWQsIGludCBkaXYpCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQl1MzIgcmVnOwotCi0JREJHKCIlcyglcCwgJWQsICVkKVxuIiwgX19mdW5jX18sIGNwdV9kYWksIGRpdl9pZCwgZGl2KTsKLQotCXN3aXRjaCAoZGl2X2lkKSB7Ci0JY2FzZSBTM0MyNDEyX0RJVl9CQ0xLOgotCQlyZWcgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCXJlZyAmPSB+UzNDMjQxMl9JSVNNT0RfQkNMS19NQVNLOwotCQl3cml0ZWwocmVnIHwgZGl2LCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQkJREJHKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQxMl9ESVZfUkNMSzoKLQkJaWYgKGRpdiA+IDMpIHsKLQkJCS8qIGNvbnZlcnQgdmFsdWUgdG8gYml0IGZpZWxkICovCi0KLQkJCXN3aXRjaCAoZGl2KSB7Ci0JCQljYXNlIDI1NjoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzI1NkZTOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM4NDoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzM4NEZTOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDUxMjoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzUxMkZTOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDc2ODoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzc2OEZTOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0KLQkJcmVnID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJcmVnICY9IH5TM0MyNDEyX0lJU01PRF9SQ0xLX01BU0s7Ci0JCXdyaXRlbChyZWcgfCBkaXYsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJREJHKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQxMl9ESVZfUFJFU0NBTEVSOgotCQlpZiAoZGl2ID49IDApIHsKLQkJCXdyaXRlbCgoZGl2IDw8IDgpIHwgUzNDMjQxMl9JSVNQU1JfUFNSRU4sCi0JCQkgICAgICAgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCQl9IGVsc2UgewotCQkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCQl9Ci0JCURCRygiJXM6IFBTUj0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KIAogc3RydWN0IGNsayAqczNjMjQxMl9nZXRfaWlzY2xrKHZvaWQpCiB7CkBAIC02MDYsMzQgKzEwNywzMCBAQAogc3RhdGljIGludCBzM2MyNDEyX2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlpbnQgcmV0OwogCi0JczNjMjQxMl9pMnMuZGV2ID0gJnBkZXYtPmRldjsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCi0JczNjMjQxMl9pMnMucmVncyA9IGlvcmVtYXAoUzNDMjQxMF9QQV9JSVMsIDB4MTAwKTsKLQlpZiAoczNjMjQxMl9pMnMucmVncyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOworCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksICZzM2MyNDEyX2kycywgUzNDMjQxMF9QQV9JSVMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlzM2MyNDEyX2kycy5paXNfcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImlpcyIpOwotCWlmIChzM2MyNDEyX2kycy5paXNfcGNsayA9PSBOVUxMKSB7Ci0JCURCRygiZmFpbGVkIHRvIGdldCBpaXNfY2xvY2tcbiIpOwotCQlpb3VubWFwKHMzYzI0MTJfaTJzLnJlZ3MpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJczNjMjQxMl9pMnMuZG1hX2NhcHR1cmUgPSAmczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19pbjsKKwlzM2MyNDEyX2kycy5kbWFfcGxheWJhY2sgPSAmczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19vdXQ7CiAKIAlzM2MyNDEyX2kycy5paXNfY2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImkyc2NsayIpOwogCWlmIChzM2MyNDEyX2kycy5paXNfY2NsayA9PSBOVUxMKSB7Ci0JCURCRygiZmFpbGVkIHRvIGdldCBpMnNjbGsgY2xvY2tcbiIpOworCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBpMnNjbGsgY2xvY2tcbiIpOwogCQlpb3VubWFwKHMzYzI0MTJfaTJzLnJlZ3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljbGtfc2V0X3BhcmVudChzM2MyNDEyX2kycy5paXNfY2NsaywgY2xrX2dldChOVUxMLCAibXBsbCIpKTsKKwkvKiBTZXQgTVBMTCBhcyB0aGUgc291cmNlIGZvciBJSVMgQ0xLICovCiAKLQljbGtfZW5hYmxlKHMzYzI0MTJfaTJzLmlpc19wY2xrKTsKKwljbGtfc2V0X3BhcmVudChzM2MyNDEyX2kycy5paXNfY2NsaywgY2xrX2dldChOVUxMLCAibXBsbCIpKTsKIAljbGtfZW5hYmxlKHMzYzI0MTJfaTJzLmlpc19jY2xrKTsKIAotCXMzYzI0MTJfaTJzLmlpc19jbGsgPSBzM2MyNDEyX2kycy5paXNfcGNsazsKKwlzM2MyNDEyX2kycy5paXNfY2NsayA9IHMzYzI0MTJfaTJzLmlpc19wY2xrOwogCiAJLyogQ29uZmlndXJlIHRoZSBJMlMgcGlucyBpbiBjb3JyZWN0IG1vZGUgKi8KIAlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMCwgUzNDMjQxMF9HUEUwX0kyU0xSQ0spOwpAQCAtNjQyLDc4ICsxMzksMjIgQEAKIAlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMywgUzNDMjQxMF9HUEUzX0kyU1NESSk7CiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTQsIFMzQzI0MTBfR1BFNF9JMlNTRE8pOwogCi0JczNjMjQxMl9zbmRfdHhjdHJsKDApOwotCXMzYzI0MTJfc25kX3J4Y3RybCgwKTsKLQogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQl1MzIgaWlzbW9kOwotCi0JaWYgKGRhaS0+YWN0aXZlKSB7Ci0JCWkycy0+c3VzcGVuZF9paXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCWkycy0+c3VzcGVuZF9paXNjb24gPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCWkycy0+c3VzcGVuZF9paXNwc3IgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7Ci0KLQkJLyogc29tZSBiYXNpYyBzdXNwZW5kIGNoZWNrcyAqLwotCi0JCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKQotCQkJcHJfd2FybmluZygiJXM6IFJYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKLQotCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFKQotCQkJcHJfd2FybmluZygiJXM6IFRYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKLQotCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkKLQkJCXByX3dhcm5pbmcoIiVzOiBJSVMgYWN0aXZlXG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0KLQlwcl9pbmZvKCJkYWlfYWN0aXZlICVkLCBJSVNNT0QgJTA4eCwgSUlTQ09OICUwOHhcbiIsCi0JCWRhaS0+YWN0aXZlLCBpMnMtPnN1c3BlbmRfaWlzbW9kLCBpMnMtPnN1c3BlbmRfaWlzY29uKTsKLQotCWlmIChkYWktPmFjdGl2ZSkgewotCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc2NvbiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc3BzciwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCi0JCXdyaXRlbChTM0MyNDEyX0lJU0ZJQ19SWEZMVVNIIHwgUzNDMjQxMl9JSVNGSUNfVFhGTFVTSCwKLQkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCQluZGVsYXkoMjUwKTsKLQkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotI2RlZmluZSBzM2MyNDEyX2kyc19zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjQxMl9pMnNfcmVzdW1lICBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KICNkZWZpbmUgUzNDMjQxMl9JMlNfUkFURVMgXAogCShTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFwKIAlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNDEyX2kyc19kYWlfb3BzID0geworCS5zZXRfc3lzY2xrCT0gczNjMjQxMl9pMnNfc2V0X3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDEyX2kyc19kYWkgPSB7Ci0JLm5hbWUJPSAiczNjMjQxMi1pMnMiLAotCS5pZAk9IDAsCi0JLnByb2JlCT0gczNjMjQxMl9pMnNfcHJvYmUsCi0JLnN1c3BlbmQgPSBzM2MyNDEyX2kyc19zdXNwZW5kLAotCS5yZXN1bWUgPSBzM2MyNDEyX2kyc19yZXN1bWUsCisJLm5hbWUJCT0gInMzYzI0MTItaTJzIiwKKwkuaWQJCT0gMCwKKwkucHJvYmUJCT0gczNjMjQxMl9pMnNfcHJvYmUsCiAJLnBsYXliYWNrID0gewogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCkBAIC03MjYsMTkgKzE2NywxMyBAQAogCQkucmF0ZXMJCT0gUzNDMjQxMl9JMlNfUkFURVMsCiAJCS5mb3JtYXRzCT0gU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBzM2MyNDEyX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gczNjMjQxMl9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdAk9IHMzYzI0MTJfaTJzX3NldF9mbXQsCi0JCS5zZXRfY2xrZGl2CT0gczNjMjQxMl9pMnNfc2V0X2Nsa2RpdiwKLQkJLnNldF9zeXNjbGsJPSBzM2MyNDEyX2kyc19zZXRfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZzM2MyNDEyX2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfaTJzX2RhaSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTJfaTJzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJnMzYzI0MTJfaTJzX2RhaSk7CisJcmV0dXJuICBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKCZzM2MyNDEyX2kyc19kYWkpOwogfQogbW9kdWxlX2luaXQoczNjMjQxMl9pMnNfaW5pdCk7CiAKQEAgLTc0OCw3ICsxODMsNiBAQAogfQogbW9kdWxlX2V4aXQoczNjMjQxMl9pMnNfZXhpdCk7CiAKLQogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MyNDEyIEkyUyBTb0MgSW50ZXJmYWNlIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaAppbmRleCBhYWMwOGEyLi45Mjg0OGU1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmgKQEAgLTE1LDkgKzE1LDExIEBACiAjaWZuZGVmIF9fU05EX1NPQ19TM0MyNFhYX1MzQzI0MTJfSTJTX0gKICNkZWZpbmUgX19TTkRfU09DX1MzQzI0WFhfUzNDMjQxMl9JMlNfSCBfX0ZJTEVfXwogCi0jZGVmaW5lIFMzQzI0MTJfRElWX0JDTEsJKDEpCi0jZGVmaW5lIFMzQzI0MTJfRElWX1JDTEsJKDIpCi0jZGVmaW5lIFMzQzI0MTJfRElWX1BSRVNDQUxFUgkoMykKKyNpbmNsdWRlICJzM2MtaTJzLXYyLmgiCisKKyNkZWZpbmUgUzNDMjQxMl9ESVZfQkNMSwlTM0NfSTJTVjJfRElWX0JDTEsKKyNkZWZpbmUgUzNDMjQxMl9ESVZfUkNMSwlTM0NfSTJTVjJfRElWX1JDTEsKKyNkZWZpbmUgUzNDMjQxMl9ESVZfUFJFU0NBTEVSCVMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCiAKICNkZWZpbmUgUzNDMjQxMl9DTEtTUkNfUENMSwkoMCkKICNkZWZpbmUgUzNDMjQxMl9DTEtTUkNfSTJTQ0xLCSgxKQpAQCAtMjYsMTMgKzI4LDQgQEAKIAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDEyX2kyc19kYWk7CiAKLXN0cnVjdCBzM2MyNDEyX3JhdGVfY2FsYyB7Ci0JdW5zaWduZWQgaW50CWNsa19kaXY7CS8qIGZvciBwcmVzY2FsZXIgKi8KLQl1bnNpZ25lZCBpbnQJZnNfZGl2OwkJLyogZm9yIHJvb3QgZnJhbWUgY2xvY2sgKi8KLX07Ci0KLWV4dGVybiBpbnQgczNjMjQxMl9paXNfY2FsY19yYXRlKHN0cnVjdCBzM2MyNDEyX3JhdGVfY2FsYyAqaW5mbywKLQkJCQkgdW5zaWduZWQgaW50ICpmc3RhYiwKLQkJCQkgdW5zaWduZWQgaW50IHJhdGUsIHN0cnVjdCBjbGsgKmNsayk7Ci0KICNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0MyNDEyX0kyU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCmluZGV4IDU4MjJkMmQuLjM2OThmNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8cGxhdC9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKQEAgLTM1NSw2ICszNTUsMTYgQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFwKIAkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCisJLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfdHJpZ2dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0NDNfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCisJLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQ0M19hYzk3X2RhaVtdID0gewogewogCS5uYW1lID0gInMzYzI0NDMtYWM5NyIsCkBAIC0zNzQsOSArMzg0LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBzM2MyNDQzX2FjOTdfaHdfcGFyYW1zLAotCQkudHJpZ2dlciA9IHMzYzI0NDNfYWM5N190cmlnZ2VyfSwKKwkub3BzID0gJnMzYzI0NDNfYWM5N19kYWlfb3BzLAogfSwKIHsKIAkubmFtZSA9ICJweGEyeHgtYWM5Ny1taWMiLApAQCAtMzg4LDkgKzM5Niw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBzM2MyNDQzX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCi0JCS50cmlnZ2VyID0gczNjMjQ0M19hYzk3X21pY190cmlnZ2VyLH0sCisJLm9wcyA9ICZzM2MyNDQzX2FjOTdfbWljX2RhaV9vcHMsCiB9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0NDNfYWM5N19kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKaW5kZXggNmY0ZDQzOS4uY2MwNjY5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCkBAIC00LDcgKzQsNyBAQAogICogKGMpIDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIEdyYWVtZSBHcmVnb3J5IGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQogICoKLSAqIChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCkBAIC0zMCwyMiArMzAsMTUgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKIAotI2RlZmluZSBTM0MyNFhYX0kyU19ERUJVRyAwCi0jaWYgUzNDMjRYWF9JMlNfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICJzM2MyNHh4LWkyczogIiB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjMjR4eF9kbWFfY2xpZW50X291dCA9IHsKIAkubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCiB9OwpAQCAtODQsMTMgKzc3LDEzIEBACiAJdTMyIGlpc2NvbjsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc2Zjb24gPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNGQ09OKTsKIAlpaXNjb24gID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKIAlpaXNtb2QgID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAotCURCRygicjogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisJcHJfZGVidWcoInI6IElJU0NPTjogJXggSUlTTU9EOiAleCBJSVNGQ09OOiAleFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOwogCiAJaWYgKG9uKSB7CiAJCWlpc2Zjb24gfD0gUzNDMjQxMF9JSVNGQ09OX1RYRE1BIHwgUzNDMjQxMF9JSVNGQ09OX1RYRU5BQkxFOwpAQCAtMTIwLDcgKzExMyw3IEBACiAJCXdyaXRlbChpaXNtb2QsICBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCX0KIAotCURCRygidzogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisJcHJfZGVidWcoInc6IElJU0NPTjogJXggSUlTTU9EOiAleCBJSVNGQ09OOiAleFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOwogfQogCiBzdGF0aWMgdm9pZCBzM2MyNHh4X3NuZF9yeGN0cmwoaW50IG9uKQpAQCAtMTI5LDEzICsxMjIsMTMgQEAKIAl1MzIgaWlzY29uOwogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzZmNvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0ZDT04pOwogCWlpc2NvbiAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwogCWlpc21vZCAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCi0JREJHKCJyOiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygicjogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiAKIAlpZiAob24pIHsKIAkJaWlzZmNvbiB8PSBTM0MyNDEwX0lJU0ZDT05fUlhETUEgfCBTM0MyNDEwX0lJU0ZDT05fUlhFTkFCTEU7CkBAIC0xNjUsNyArMTU4LDcgQEAKIAkJd3JpdGVsKGlpc21vZCwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAJfQogCi0JREJHKCJ3OiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygidzogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiB9CiAKIC8qCkBAIC0xNzcsNyArMTcwLDcgQEAKIAl1MzIgaWlzY29uOwogCWludCB0aW1lb3V0ID0gNTA7IC8qIDVtcyAqLwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXdoaWxlICgxKSB7CiAJCWlpc2NvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CkBAIC0xOTcsNyArMTkwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgczNjMjR4eF9zbmRfaXNfY2xrbWFzdGVyKHZvaWQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAocmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKSAmIFMzQzI0MTBfSUlTTU9EX1NMQVZFKSA/IDA6MTsKIH0KQEAgLTIxMCwxMCArMjAzLDEwIEBACiB7CiAJdTMyIGlpc21vZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHI6IElJU01PRDogJWx4IFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHI6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOwogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKQEAgLTIzOCw3ICsyMzEsNyBAQAogCX0KIAogCXdyaXRlbChpaXNtb2QsIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgdzogSUlTTU9EOiAlbHggXG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgdzogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0OSw3ICsyNDIsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjR4eF9pMnNfcGNtX3N0ZXJlb19vdXQ7CkBAIC0yNTgsNyArMjUxLDcgQEAKIAogCS8qIFdvcmtpbmcgY29waWVzIG9mIHJlZ2lzdGVyICovCiAJaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICVseFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHI6IElJU01PRDogJXhcbiIsIGlpc21vZCk7CiAKIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKQEAgLTI3Niw3ICsyNjksNyBAQAogCX0KIAogCXdyaXRlbChpaXNtb2QsIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgdzogSUlTTU9EOiAlbHhcbiIsIGlpc21vZCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4XG4iLCBpaXNtb2QpOwogCXJldHVybiAwOwogfQogCkBAIC0yODUsNyArMjc4LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC0zMjcsNyArMzIwLDcgQEAKIHsKIAl1MzIgaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNtb2QgJj0gflMzQzI0NDBfSUlTTU9EX01QTEw7CiAKQEAgLTM1Myw3ICszNDYsNyBAQAogewogCXUzMiByZWc7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3dpdGNoIChkaXZfaWQpIHsKIAljYXNlIFMzQzI0WFhfRElWX0JDTEs6CkBAIC0zODksNyArMzgyLDcgQEAKIHN0YXRpYyBpbnQgczNjMjR4eF9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXMzYzI0eHhfaTJzLnJlZ3MgPSBpb3JlbWFwKFMzQzI0MTBfUEFfSUlTLCAweDEwMCk7CiAJaWYgKHMzYzI0eHhfaTJzLnJlZ3MgPT0gTlVMTCkKQEAgLTM5Nyw3ICszOTAsNyBAQAogCiAJczNjMjR4eF9pMnMuaWlzX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImlpcyIpOwogCWlmIChzM2MyNHh4X2kycy5paXNfY2xrID09IE5VTEwpIHsKLQkJREJHKCJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBpaXNfY2xvY2tcbiIpOwogCQlpb3VubWFwKHMzYzI0eHhfaTJzLnJlZ3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00MjEsNyArNDE0LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgczNjMjR4eF9pMnNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXMzYzI0eHhfaTJzLmlpc2NvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CiAJczNjMjR4eF9pMnMuaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKQEAgLTQzNSw3ICs0MjgsNyBAQAogCiBzdGF0aWMgaW50IHMzYzI0eHhfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAljbGtfZW5hYmxlKHMzYzI0eHhfaTJzLmlpc19jbGspOwogCiAJd3JpdGVsKHMzYzI0eHhfaTJzLmlpc2NvbiwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKQEAgLTQ1Niw2ICs0NDksMTQgQEAKIAlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNHh4X2kyc19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gczNjMjR4eF9pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gczNjMjR4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gczNjMjR4eF9pMnNfc2V0X2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHMzYzI0eHhfaTJzX3NldF9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSBzM2MyNHh4X2kyc19zZXRfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0eHhfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJzM2MyNHh4LWkycyIsCiAJLmlkID0gMCwKQEAgLTQ3MiwxMyArNDczLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFMzQzI0WFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS50cmlnZ2VyID0gczNjMjR4eF9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcyA9IHMzYzI0eHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBzM2MyNHh4X2kyc19zZXRfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHMzYzI0eHhfaTJzX3NldF9jbGtkaXYsCi0JCS5zZXRfc3lzY2xrID0gczNjMjR4eF9pMnNfc2V0X3N5c2NsaywKLQl9LAorCS5vcHMgPSAmczNjMjR4eF9pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzM2MyNHh4X2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwppbmRleCA3YzY0ZDMxLi5hOWQ2OGZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCiAgKgotICogKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKQEAgLTI5LDE3ICsyOSwxMCBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKIAotI2RlZmluZSBTM0MyNFhYX1BDTV9ERUJVRyAwCi0jaWYgUzNDMjRYWF9QQ01fREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICJzM2MyNHh4LXBjbTogIiB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHMzYzI0eHhfcGNtX2hhcmR3YXJlID0gewogCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKQEAgLTg0LDE2ICs3NywxNiBAQAogCWRtYV9hZGRyX3QgcG9zID0gcHJ0ZC0+ZG1hX3BvczsKIAlpbnQgcmV0OwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXdoaWxlIChwcnRkLT5kbWFfbG9hZGVkIDwgcHJ0ZC0+ZG1hX2xpbWl0KSB7CiAJCXVuc2lnbmVkIGxvbmcgbGVuID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKIAotCQlEQkcoImRtYV9sb2FkZWQ6ICVkXG4iLCBwcnRkLT5kbWFfbG9hZGVkKTsKKwkJcHJfZGVidWcoImRtYV9sb2FkZWQ6ICVkXG4iLCBwcnRkLT5kbWFfbG9hZGVkKTsKIAogCQlpZiAoKHBvcyArIGxlbikgPiBwcnRkLT5kbWFfZW5kKSB7CiAJCQlsZW4gID0gcHJ0ZC0+ZG1hX2VuZCAtIHBvczsKLQkJCURCRyhLRVJOX0RFQlVHICIlczogY29ycmVjdGVkIGRtYSBsZW4gJWxkXG4iLAorCQkJcHJfZGVidWcoS0VSTl9ERUJVRyAiJXM6IGNvcnJlY3RlZCBkbWEgbGVuICVsZFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgbGVuKTsKIAkJfQogCkBAIC0xMTksNyArMTEyLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IGRldl9pZDsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHJlc3VsdCA9PSBTM0MyNDEwX1JFU19BQk9SVCB8fCByZXN1bHQgPT0gUzNDMjQxMF9SRVNfRVJSKQogCQlyZXR1cm47CkBAIC0xNDgsNyArMTQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHRvdGJ5dGVzID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOwogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHJldHVybiBpZiB0aGlzIGlzIGEgYnVmZmVybGVzcyB0cmFuc2ZlciBlLmcuCiAJICogY29kZWMgPC0tPiBCVCBjb2RlYyBvciBHU00gbW9kZW0gLS0gbGcgRklYTUUgKi8KQEAgLTE2MSwxNCArMTU0LDE0IEBACiAJCS8qIHByZXBhcmUgRE1BICovCiAJCXBydGQtPnBhcmFtcyA9IGRtYTsKIAotCQlEQkcoInBhcmFtcyAlcCwgY2xpZW50ICVwLCBjaGFubmVsICVkXG4iLCBwcnRkLT5wYXJhbXMsCisJCXByX2RlYnVnKCJwYXJhbXMgJXAsIGNsaWVudCAlcCwgY2hhbm5lbCAlZFxuIiwgcHJ0ZC0+cGFyYW1zLAogCQkJcHJ0ZC0+cGFyYW1zLT5jbGllbnQsIHBydGQtPnBhcmFtcy0+Y2hhbm5lbCk7CiAKIAkJcmV0ID0gczNjMjQxMF9kbWFfcmVxdWVzdChwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCiAJCQkJCSAgcHJ0ZC0+cGFyYW1zLT5jbGllbnQsIE5VTEwpOwogCiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlEQkcoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgZG1hIGNoYW5uZWxcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGRtYSBjaGFubmVsXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xOTYsNyArMTg5LDcgQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBUT0RPIC0gZG8gd2UgbmVlZCB0byBlbnN1cmUgRE1BIGZsdXNoZWQgKi8KIAlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sIE5VTEwpOwpAQCAtMjE0LDcgKzIwNyw3IEBACiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMjU5LDcgKzI1Miw3IEBACiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKIApAQCAtMjk3LDcgKzI5MCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXM7CiAJZG1hX2FkZHJfdCBzcmMsIGRzdDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2soJnBydGQtPmxvY2spOwogCXMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwgJnNyYywgJmRzdCk7CkBAIC0zMDksNyArMzAyLDcgQEAKIAogCXNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKIAotCURCRygiUG9pbnRlciAleCAleFxuIiwgc3JjLCBkc3QpOworCXByX2RlYnVnKCJQb2ludGVyICV4ICV4XG4iLCBzcmMsIGRzdCk7CiAKIAkvKiB3ZSBzZWVtIHRvIGJlIGdldHRpbmcgdGhlIG9kZCBlcnJvciBmcm9tIHRoZSBwY20gbGlicmFyeSBkdWUKIAkgKiB0byBvdXQtb2YtYm91bmRzIHBvaW50ZXJzLiB0aGlzIGlzIG1heWJlIGR1ZSB0byB0aGUgZG1hIGVuZ2luZQpAQCAtMzMwLDcgKzMyMyw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzM2MyNHh4X3BjbV9oYXJkd2FyZSk7CiAKQEAgLTM0OSwxMCArMzQyLDEwIEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFwcnRkKQotCQlEQkcoInMzYzI0eHhfcGNtX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CisJCXByX2RlYnVnKCJzM2MyNHh4X3BjbV9jbG9zZSBjYWxsZWQgd2l0aCBwcnRkID09IE5VTExcbiIpOwogCiAJa2ZyZWUocHJ0ZCk7CiAKQEAgLTM2NCw3ICszNTcsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZShzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LCB2bWEsCiAJCQkJICAgICBydW50aW1lLT5kbWFfYXJlYSwKQEAgLTM5MCw3ICszODMsNyBAQAogCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKIAlzaXplX3Qgc2l6ZSA9IHMzYzI0eHhfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKIAlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKQEAgLTQwOSw3ICs0MDIsNyBAQAogCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmOwogCWludCBzdHJlYW07CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgewogCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CkBAIC00MzMsNyArNDI2LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCiAJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmczNjMjR4eF9wY21fZG1hbWFzazsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggYTBhNGQxODMuLjhlNzlhNDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8c291bmQvczNjMjR4eF91ZGExMzR4Lmg+CiAjaW5jbHVkZSA8c291bmQvdWRhMTM0eC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYzVkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0wLDAgKzEsMjIyIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZC5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1iYW5rLWUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKKyNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfaW4gPSB7CisJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9fb3V0WzJdID0geworCVswXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMwX09VVCwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X291dCwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNUWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKKwlbMV0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9PVVQsCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTVFhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pblsyXSA9IHsKKwlbMF0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9JTiwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1JYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorCVsxXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMxX0lOLAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW4sCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzY0eHhfaTJzWzJdOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqdG9faW5mbyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJcmV0dXJuIGNwdV9kYWktPnByaXZhdGVfZGF0YTsKK30KKworc3RhdGljIGludCBzM2M2NHh4X2kyc19zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFMzQzY0WFhfQ0xLU1JDX1BDTEs6CisJCWlpc21vZCAmPSB+UzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzY0WFhfQ0xLU1JDX01VWDoKKwkJaWlzbW9kIHw9IFMzQzY0WFhfSUlTTU9EX0lNU19TWVNNVVg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKGlpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJcmV0dXJuIDA7Cit9CisKKwordW5zaWduZWQgbG9uZyBzM2M2NHh4X2kyc19nZXRfY2xvY2tyYXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWkpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShpMnMtPmlpc19jY2xrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2dldF9jbG9ja3JhdGUpOworCitzdGF0aWMgaW50IHMzYzY0eHhfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnM7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHByb2JpbmcgZGFpICVkXG4iLCBfX2Z1bmNfXywgcGRldi0+aWQpOworCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+IEFSUkFZX1NJWkUoczNjNjR4eF9pMnMpKSB7CisJCWRldl9lcnIoZGV2LCAiaWQgJWQgb3V0IG9mIHJhbmdlXG4iLCBwZGV2LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkycyA9ICZzM2M2NHh4X2kyc1twZGV2LT5pZF07CisKKwlyZXQgPSBzM2NfaTJzdjJfcHJvYmUocGRldiwgZGFpLCBpMnMsCisJCQkgICAgICBwZGV2LT5pZCA/IFMzQzY0WFhfUEFfSUlTMSA6IFMzQzY0WFhfUEFfSUlTMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWkycy0+ZG1hX2NhcHR1cmUgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF07CisJaTJzLT5kbWFfcGxheWJhY2sgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOworCisJaTJzLT5paXNfY2NsayA9IGNsa19nZXQoZGV2LCAiYXVkaW8tYnVzIik7CisJaWYgKElTX0VSUihpMnMtPmlpc19jY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzIik7CisJCWlvdW5tYXAoaTJzLT5yZWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogY29uZmlndXJlIEdQSU8gZm9yIGkycyBwb3J0ICovCisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDApLCBTM0M2NFhYX0dQRDBfSTJTMF9DTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMSksIFMzQzY0WFhfR1BEMV9JMlMwX0NEQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDIpLCBTM0M2NFhYX0dQRDJfSTJTMF9MUkNMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgzKSwgUzNDNjRYWF9HUEQzX0kyUzBfREkpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoNCksIFMzQzY0WFhfR1BENF9JMlMwX0QwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMCksIFMzQzY0WFhfR1BFMF9JMlMxX0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgxKSwgUzNDNjRYWF9HUEUxX0kyUzFfQ0RDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMiksIFMzQzY0WFhfR1BFMl9JMlMxX0xSQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDMpLCBTM0M2NFhYX0dQRTNfSTJTMV9ESSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSg0KSwgUzNDNjRYWF9HUEU0X0kyUzFfRDApOworCX0KKworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgUzNDNjRYWF9JMlNfUkFURVMgXAorCShTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFwKKwlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQorCisjZGVmaW5lIFMzQzY0WFhfSTJTX0ZNVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzY0eHhfaTJzX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSBzM2M2NHh4X2kyc19zZXRfc3lzY2xrLAkKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWkgPSB7CisJLm5hbWUJCT0gInMzYzY0eHgtaTJzIiwKKwkuaWQJCT0gMCwKKwkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKKwkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4JPSAyLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCisJfSwKKwkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZGFpKTsKKworc3RhdGljIGludCBfX2luaXQgczNjNjR4eF9pMnNfaW5pdCh2b2lkKQoreworCXJldHVybiAgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSgmczNjNjR4eF9pMnNfZGFpKTsKK30KK21vZHVsZV9pbml0KHMzYzY0eHhfaTJzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjNjR4eF9pMnNfZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJnMzYzY0eHhfaTJzX2RhaSk7Cit9Cittb2R1bGVfZXhpdChzM2M2NHh4X2kyc19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0M2NFhYIEkyUyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZmZTNjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaApAQCAtMCwwICsxLDMxIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSAorI2RlZmluZSBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19IIF9fRklMRV9fCisKKyNpbmNsdWRlICJzM2MtaTJzLXYyLmgiCisKKyNkZWZpbmUgUzNDNjRYWF9ESVZfQkNMSwlTM0NfSTJTVjJfRElWX0JDTEsKKyNkZWZpbmUgUzNDNjRYWF9ESVZfUkNMSwlTM0NfSTJTVjJfRElWX1JDTEsKKyNkZWZpbmUgUzNDNjRYWF9ESVZfUFJFU0NBTEVSCVMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCisKKyNkZWZpbmUgUzNDNjRYWF9DTEtTUkNfUENMSwkoMCkKKyNkZWZpbmUgUzNDNjRYWF9DTEtTUkNfTVVYCSgxKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpOworCisjZW5kaWYgLyogX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2hhYy5jIGIvc291bmQvc29jL3NoL2hhYy5jCmluZGV4IGVhYjMxODMuLjQxZGI3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9oYWMuYworKysgYi9zb3VuZC9zb2Mvc2gvaGFjLmMKQEAgLTI2Nyw2ICsyNjcsMTAgQEAKICNkZWZpbmUgQUM5N19GTVRTCVwKIAlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBoYWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzaDRfaGFjX2RhaVtdID0gewogewogCS5uYW1lCQkJPSAiSEFDMCIsCkBAIC0yODQsOSArMjg4LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmhhY19kYWlfb3BzLAogfSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwCiB7CkBAIC0zMDUsOSArMzA3LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmhhY19kYWlfb3BzLAogCiB9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc3NpLmMgYi9zb3VuZC9zb2Mvc2gvc3NpLmMKaW5kZXggZDFlNTM5MC4uNTZmYTA4NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9zc2kuYwpAQCAtMzM2LDYgKzMzNiwxNiBAQAogCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1UyNF8zTEUgfAlcCiAJIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFICB8IFNORFJWX1BDTV9GTVRCSVRfVTMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzc2lfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHNzaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gc3NpX3NldF9zeXNjbGssCisJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKKwkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHNoNF9zc2lfZGFpW10gPSB7CiB7CiAJLm5hbWUJCQk9ICJTU0kwIiwKQEAgLTM1MiwxNSArMzYyLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKLQkJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAotCQkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKLQkJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKLQkJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmc3NpX2RhaV9vcHMsCiB9LAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAKIHsKQEAgLTM3OCwxNSArMzgwLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKLQkJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAotCQkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKLQkJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKLQkJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmc3NpX2RhaV9vcHMsCiB9LAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCBlYzNmOGJiLi42ZTcxMGY3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTMzLDggKzEzMyw4IEBACiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIAogCS8qIHN0YXJ0dXAgdGhlIGF1ZGlvIHN1YnN5c3RlbSAqLwotCWlmIChjcHVfZGFpLT5vcHMuc3RhcnR1cCkgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMuc3RhcnR1cChzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnN0YXJ0dXApIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5zdGFydHVwKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IG9wZW4gaW50ZXJmYWNlICVzXG4iLAogCQkJCWNwdV9kYWktPm5hbWUpOwpAQCAtMTUwLDggKzE1MCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuc3RhcnR1cCkgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5zdGFydHVwKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnN0YXJ0dXApIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnN0YXJ0dXAoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBvcGVuIGNvZGVjICVzXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSk7CkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJY3B1X2RhaS0+Y2FwdHVyZS5hY3RpdmUgPSBjb2RlY19kYWktPmNhcHR1cmUuYWN0aXZlID0gMTsKIAljcHVfZGFpLT5hY3RpdmUgPSBjb2RlY19kYWktPmFjdGl2ZSA9IDE7CiAJY3B1X2RhaS0+cnVudGltZSA9IHJ1bnRpbWU7Ci0Jc29jZGV2LT5jb2RlYy0+YWN0aXZlKys7CisJY2FyZC0+Y29kZWMtPmFjdGl2ZSsrOwogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtMjQ3LDggKzI0Nyw4IEBACiAJCXBsYXRmb3JtLT5wY21fb3BzLT5jbG9zZShzdWJzdHJlYW0pOwogCiBwbGF0Zm9ybV9lcnI6Ci0JaWYgKGNwdV9kYWktPm9wcy5zaHV0ZG93bikKLQkJY3B1X2RhaS0+b3BzLnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+c2h1dGRvd24pCisJCWNwdV9kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKIG91dDoKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY2FyZCwKIAkJCQkJCSBkZWxheWVkX3dvcmsud29yayk7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjYXJkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgaTsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIApAQCAtMzQwLDExICszNDAsMTEgQEAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJc25kX3NvY19kYWlfZGlnaXRhbF9tdXRlKGNvZGVjX2RhaSwgMSk7CiAKLQlpZiAoY3B1X2RhaS0+b3BzLnNodXRkb3duKQotCQljcHVfZGFpLT5vcHMuc2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY3B1X2RhaS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOwogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnNodXRkb3duKQotCQljb2RlY19kYWktPm9wcy5zaHV0ZG93bihzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5zaHV0ZG93bikKIAkJbWFjaGluZS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0pOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKQEAgLTQwOCwxNiArNDA4LDE2IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMucHJlcGFyZSkgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5wcmVwYXJlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnByZXBhcmUpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnByZXBhcmUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjb2RlYyBEQUkgcHJlcGFyZSBlcnJvclxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWlmIChjcHVfZGFpLT5vcHMucHJlcGFyZSkgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMucHJlcGFyZShzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnByZXBhcmUpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5wcmVwYXJlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNwdSBEQUkgcHJlcGFyZSBlcnJvclxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTQ5NCw4ICs0OTQsOCBAQAogCQl9CiAJfQogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLmh3X3BhcmFtcykgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19wYXJhbXMpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3Qgc2V0IGNvZGVjICVzIGh3IHBhcmFtc1xuIiwKIAkJCQljb2RlY19kYWktPm5hbWUpOwpAQCAtNTAzLDggKzUwMyw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X3BhcmFtcykgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMuaHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19wYXJhbXMpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNwdV9kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBpbnRlcmZhY2UgJXMgaHcgcGFyYW1zIGZhaWxlZFxuIiwKIAkJCQljcHVfZGFpLT5uYW1lKTsKQEAgLTUyNiwxMiArNTI2LDEyIEBACiAJcmV0dXJuIHJldDsKIAogcGxhdGZvcm1fZXJyOgotCWlmIChjcHVfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY3B1X2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19mcmVlKQorCQljcHVfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAogaW50ZXJmYWNlX2VycjoKLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY29kZWNfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19mcmVlKQorCQljb2RlY19kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKIGNvZGVjX2VycjoKIAlpZiAobWFjaGluZS0+b3BzICYmIG1hY2hpbmUtPm9wcy0+aHdfZnJlZSkKQEAgLTU1Myw3ICs1NTMsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IG1hY2hpbmUtPmNwdV9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBtYWNoaW5lLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCW11dGV4X2xvY2soJnBjbV9tdXRleCk7CiAKQEAgLTU3MCwxMSArNTcwLDExIEBACiAJCXBsYXRmb3JtLT5wY21fb3BzLT5od19mcmVlKHN1YnN0cmVhbSk7CiAKIAkvKiBub3cgZnJlZSBodyBwYXJhbXMgZm9yIHRoZSBEQUkncyAgKi8KLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY29kZWNfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19mcmVlKQorCQljb2RlY19kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X2ZyZWUpCi0JCWNwdV9kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+aHdfZnJlZSkKKwkJY3B1X2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIDA7CkBAIC01OTEsOCArNTkxLDggQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnRyaWdnZXIpIHsKLQkJcmV0ID0gY29kZWNfZGFpLT5vcHMudHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnRyaWdnZXIpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC02MDMsOCArNjAzLDggQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGNwdV9kYWktPm9wcy50cmlnZ2VyKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT50cmlnZ2VyKSB7CisJCXJldCA9IGNwdV9kYWktPm9wcy0+dHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC02MjksNyArNjI5LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSAqY29kZWNfZGV2ID0gc29jZGV2LT5jb2RlY19kZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAogCS8qIER1ZSB0byB0aGUgcmVzdW1lIGJlaW5nIHNjaGVkdWxlZCBpbnRvIGEgd29ya3F1ZXVlIHdlIGNvdWxkCkBAIC02NDUsOCArNjQ1LDggQEAKIAkvKiBtdXRlIGFueSBhY3RpdmUgREFDJ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWk7Ci0JCWlmIChkYWktPm9wcy5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCQlkYWktPm9wcy5kaWdpdGFsX211dGUoZGFpLCAxKTsKKwkJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCisJCQlkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgMSk7CiAJfQogCiAJLyogc3VzcGVuZCBhbGwgcGNtcyAqLwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjYXJkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXYgPSBzb2NkZXYtPmNvZGVjX2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2Uoc29jZGV2LT5kZXYpOwogCWludCBpOwogCkBAIC03NDEsOCArNzQxLDggQEAKIAkvKiB1bm11dGUgYW55IGFjdGl2ZSBEQUNzICovCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpOwotCQlpZiAoZGFpLT5vcHMuZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQotCQkJZGFpLT5vcHMuZGlnaXRhbF9tdXRlKGRhaSwgMCk7CisJCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQorCQkJZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIDApOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewpAQCAtOTgyLDggKzk4Miw4IEBACiBzdGF0aWMgaW50IHNvY19uZXdfcGNtKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LAogCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluaywgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBkYWlfbGluay0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGRhaV9saW5rLT5jcHVfZGFpOwpAQCAtOTk4LDcgKzk5OCw3IEBACiAKIAlydGQtPmRhaSA9IGRhaV9saW5rOwogCXJ0ZC0+c29jZGV2ID0gc29jZGV2OwotCWNvZGVjX2RhaS0+Y29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjX2RhaS0+Y29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIGNsaWVudCBhbmQgaW50ZXJmYWNlIGh3IGNhcGFiaWxpdGllcyAqLwogCXNwcmludGYobmV3X25hbWUsICIlcyAlcy0lZCIsIGRhaV9saW5rLT5zdHJlYW1fbmFtZSwgY29kZWNfZGFpLT5uYW1lLApAQCAtMTA0OCw5ICsxMDQ4LDggQEAKIH0KIAogLyogY29kZWMgcmVnaXN0ZXIgZHVtcCAqLwotc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqYnVmKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRldmRhdGEtPmNvZGVjOwogCWludCBpLCBzdGVwID0gMSwgY291bnQgPSAwOwogCiAJaWYgKCFjb2RlYy0+cmVnX2NhY2hlX3NpemUpCkBAIC0xMDkwLDcgKzEwODksNyBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLCBidWYpOworCXJldHVybiBzb2NfY29kZWNfcmVnX3Nob3coZGV2ZGF0YS0+Y2FyZC0+Y29kZWMsIGJ1Zik7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb2RlY19yZWcsIDA0NDQsIGNvZGVjX3JlZ19zaG93LCBOVUxMKTsKQEAgLTExMDcsMTIgKzExMDYsMTAgQEAKIHsKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRldmljZSAqY2FyZF9kZXYgPSBjb2RlYy0+Y2FyZC0+ZGV2OwotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSA9IGNhcmRfZGV2LT5kcml2ZXJfZGF0YTsKIAljaGFyICpidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLCBidWYpOworCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhjb2RlYywgYnVmKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOwogCWtmcmVlKGJ1Zik7CkBAIC0xMzA5LDE5ICsxMzA2LDE5IEBACiAgKi8KIGludCBzbmRfc29jX25ld19wY21zKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwotCWludCByZXQgPSAwLCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOworCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiAJLyogcmVnaXN0ZXIgYSBzb3VuZCBjYXJkICovCi0JY29kZWMtPmNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB4aWQsIGNvZGVjLT5vd25lciwgMCk7Ci0JaWYgKCFjb2RlYy0+Y2FyZCkgeworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHhpZCwgY29kZWMtPm93bmVyLCAwLCAmY29kZWMtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3QgY3JlYXRlIHNvdW5kIGNhcmQgZm9yIGNvZGVjICVzXG4iLAogCQkJY29kZWMtPm5hbWUpOwogCQltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWNvZGVjLT5jYXJkLT5kZXYgPSBzb2NkZXYtPmRldjsKQEAgLTEzNTUsOCArMTM1Miw4IEBACiAgKi8KIGludCBzbmRfc29jX2luaXRfY2FyZChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDAsIGksIGFjOTcgPSAwLCBlcnIgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CkBAIC0xNDA3LDcgKzE0MDQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGNvZGVjIHN5c2ZzIGZpbGVzXG4iKTsKIAotCXNvY19pbml0X2NvZGVjX2RlYnVnZnMoc29jZGV2LT5jb2RlYyk7CisJc29jX2luaXRfY29kZWNfZGVidWdmcyhjb2RlYyk7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiBvdXQ6CkBAIC0xNDI0LDE4ICsxNDIxLDE5IEBACiAgKi8KIHZvaWQgc25kX3NvY19mcmVlX3BjbXMoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJaW50IGk7CiAjZW5kaWYKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7Ci0Jc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhzb2NkZXYtPmNvZGVjKTsKKwlzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKICNpZmRlZiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX2RhaTsgaSsrKSB7CiAJCWNvZGVjX2RhaSA9ICZjb2RlYy0+ZGFpW2ldOwotCQlpZiAoY29kZWNfZGFpLT5hYzk3X2NvbnRyb2wgJiYgY29kZWMtPmFjOTcpIHsKKwkJaWYgKGNvZGVjX2RhaS0+YWM5N19jb250cm9sICYmIGNvZGVjLT5hYzk3ICYmCisJCSAgICBzdHJjbXAoY29kZWMtPm5hbWUsICJBQzk3IikgIT0gMCkgewogCQkJc29jX2FjOTdfZGV2X3VucmVnaXN0ZXIoY29kZWMpOwogCQkJZ290byBmcmVlX2NhcmQ7CiAJCX0KQEAgLTE0OTgsNiArMTQ5NiwzNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jbmV3KTsKIAogLyoqCisgKiBzbmRfc29jX2FkZF9jb250cm9scyAtIGFkZCBhbiBhcnJheSBvZiBjb250cm9scyB0byBhIGNvZGVjLgorICogQ29udmllbmllbmNlIGZ1bmN0aW9uIHRvIGFkZCBhIGxpc3Qgb2YgY29udHJvbHMuIE1hbnkgY29kZWNzIHdlcmUKKyAqIGR1cGxpY2F0aW5nIHRoaXMgY29kZS4KKyAqCisgKiBAY29kZWM6IGNvZGVjIHRvIGFkZCBjb250cm9scyB0bworICogQGNvbnRyb2xzOiBhcnJheSBvZiBjb250cm9scyB0byBhZGQKKyAqIEBudW1fY29udHJvbHM6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKKyAqCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgZWxzZSBlcnJvci4KKyAqLworaW50IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbHMsIGludCBudW1fY29udHJvbHMpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7CisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY29udHJvbHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbCA9ICZjb250cm9sc1tpXTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX3NvY19jbmV3KGNvbnRyb2wsIGNvZGVjLCBOVUxMKSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlczogRmFpbGVkIHRvIGFkZCAlc1xuIiwKKwkJCQljb2RlYy0+bmFtZSwgY29udHJvbC0+bmFtZSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2FkZF9jb250cm9scyk7CisKKy8qKgogICogc25kX3NvY19pbmZvX2VudW1fZG91YmxlIC0gZW51bWVyYXRlZCBkb3VibGUgbWl4ZXIgaW5mbyBjYWxsYmFjawogICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCiAgKiBAdWluZm86IGNvbnRyb2wgZWxlbWVudCBpbmZvcm1hdGlvbgpAQCAtMjAyMyw4ICsyMDUyLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAogCXVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQogewotCWlmIChkYWktPm9wcy5zZXRfc3lzY2xrKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3N5c2NsayhkYWksIGNsa19pZCwgZnJlcSwgZGlyKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3N5c2NsayhkYWksIGNsa19pZCwgZnJlcSwgZGlyKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA0Myw4ICsyMDcyLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCWludCBkaXZfaWQsIGludCBkaXYpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9jbGtkaXYpCi0JCXJldHVybiBkYWktPm9wcy5zZXRfY2xrZGl2KGRhaSwgZGl2X2lkLCBkaXYpOworCWlmIChkYWktPm9wcy0+c2V0X2Nsa2RpdikKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfY2xrZGl2KGRhaSwgZGl2X2lkLCBkaXYpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDYyLDggKzIwOTEsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJaW50IHBsbF9pZCwgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3BsbCkKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9wbGwoZGFpLCBwbGxfaWQsIGZyZXFfaW4sIGZyZXFfb3V0KTsKKwlpZiAoZGFpLT5vcHMtPnNldF9wbGwpCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3BsbChkYWksIHBsbF9pZCwgZnJlcV9pbiwgZnJlcV9vdXQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDc4LDggKzIxMDcsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X2ZtdCkKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9mbXQoZGFpLCBmbXQpOworCWlmIChkYWktPm9wcy0+c2V0X2ZtdCkKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfZm10KGRhaSwgZm10KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA5Nyw4ICsyMTI2LDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cykKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3N5c2NsaykKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF90ZG1fc2xvdChkYWksIG1hc2ssIHNsb3RzKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3RkbV9zbG90KGRhaSwgbWFzaywgc2xvdHMpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTEzLDggKzIxNDIsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X3RyaXN0YXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgdHJpc3RhdGUpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9zeXNjbGspCi0JCXJldHVybiBkYWktPm9wcy5zZXRfdHJpc3RhdGUoZGFpLCB0cmlzdGF0ZSk7CisJaWYgKGRhaS0+b3BzLT5zZXRfc3lzY2xrKQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF90cmlzdGF0ZShkYWksIHRyaXN0YXRlKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjEyOSw4ICsyMTU4LDggQEAKICAqLwogaW50IHNuZF9zb2NfZGFpX2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCiB7Ci0JaWYgKGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZSkKLQkJcmV0dXJuIGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZShkYWksIG11dGUpOworCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKQorCQlyZXR1cm4gZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIG11dGUpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTgzLDYgKzIyMTIsOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Cit9OworCiAvKioKICAqIHNuZF9zb2NfcmVnaXN0ZXJfZGFpIC0gUmVnaXN0ZXIgYSBEQUkgd2l0aCB0aGUgQVNvQyBjb3JlCiAgKgpAQCAtMjE5Nyw2ICsyMjI5LDkgQEAKIAlpZiAoIWRhaS0+ZGV2KQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBkZXZpY2UgZm9yIERBSSAlc1xuIiwgZGFpLT5uYW1lKTsKIAorCWlmICghZGFpLT5vcHMpCisJCWRhaS0+b3BzID0gJm51bGxfZGFpX29wczsKKwogCUlOSVRfTElTVF9IRUFEKCZkYWktPmxpc3QpOwogCiAJbXV0ZXhfbG9jaygmY2xpZW50X211dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggYTJmMWRhOC4uNzM1OTAzYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTU0LDE0ICs1NCwxNSBAQAogc3RhdGljIGludCBkYXBtX3VwX3NlcVtdID0gewogCXNuZF9zb2NfZGFwbV9wcmUsIHNuZF9zb2NfZGFwbV9taWNiaWFzLCBzbmRfc29jX2RhcG1fbWljLAogCXNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsIHNuZF9zb2NfZGFwbV9kYWMsCi0Jc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fcGdhLCBzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsCi0Jc25kX3NvY19kYXBtX3Nwaywgc25kX3NvY19kYXBtX3Bvc3QKKwlzbmRfc29jX2RhcG1fbWl4ZXIsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9wZ2EsCisJc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLCBzbmRfc29jX2RhcG1fcG9zdAogfTsKKwogc3RhdGljIGludCBkYXBtX2Rvd25fc2VxW10gPSB7CiAJc25kX3NvY19kYXBtX3ByZSwgc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLAotCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlciwgc25kX3NvY19kYXBtX2RhYywgc25kX3NvY19kYXBtX21pYywKLQlzbmRfc29jX2RhcG1fbWljYmlhcywgc25kX3NvY19kYXBtX211eCwgc25kX3NvY19kYXBtX3ZhbHVlX211eCwKLQlzbmRfc29jX2RhcG1fcG9zdAorCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9taXhlciwKKwlzbmRfc29jX2RhcG1fZGFjLCBzbmRfc29jX2RhcG1fbWljLCBzbmRfc29jX2RhcG1fbWljYmlhcywKKwlzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LCBzbmRfc29jX2RhcG1fcG9zdAogfTsKIAogc3RhdGljIGludCBkYXBtX3N0YXR1cyA9IDE7CkBAIC0xMDEsNyArMTAyLDggQEAKIHsKIAlzd2l0Y2ggKHctPmlkKSB7CiAJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgotCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOiB7CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOiB7CiAJCWludCB2YWw7CiAJCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPSAoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopCiAJCQl3LT5rY29udHJvbHNbaV0ucHJpdmF0ZV92YWx1ZTsKQEAgLTMyMywxNSArMzI1LDMyIEBACiAJCQlpZiAocGF0aC0+bmFtZSAhPSAoY2hhciopdy0+a2NvbnRyb2xzW2ldLm5hbWUpCiAJCQkJY29udGludWU7CiAKLQkJCS8qIGFkZCBkYXBtIGNvbnRyb2wgd2l0aCBsb25nIG5hbWUgKi8KLQkJCW5hbWVfbGVuID0gMiArIHN0cmxlbih3LT5uYW1lKQotCQkJCSsgc3RybGVuKHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCS8qIGFkZCBkYXBtIGNvbnRyb2wgd2l0aCBsb25nIG5hbWUuCisJCQkgKiBmb3IgZGFwbV9taXhlciB0aGlzIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQorCQkJICogbWl4ZXIgYW5kIGtjb250cm9sIG5hbWUuCisJCQkgKiBmb3IgZGFwbV9taXhlcl9uYW1lZF9jdGwgdGhpcyBpcyBzaW1wbHkgdGhlCisJCQkgKiBrY29udHJvbCBuYW1lLgorCQkJICovCisJCQluYW1lX2xlbiA9IHN0cmxlbih3LT5rY29udHJvbHNbaV0ubmFtZSkgKyAxOworCQkJaWYgKHctPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwpCisJCQkJbmFtZV9sZW4gKz0gMSArIHN0cmxlbih3LT5uYW1lKTsKKwogCQkJcGF0aC0+bG9uZ19uYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0tFUk5FTCk7CisKIAkJCWlmIChwYXRoLT5sb25nX25hbWUgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAotCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzICVzIiwKLQkJCQkgdy0+bmFtZSwgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJc3dpdGNoICh3LT5pZCkgeworCQkJZGVmYXVsdDoKKwkJCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLAorCQkJCQkgdy0+bmFtZSwgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJCWJyZWFrOworCQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgorCQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyIsCisJCQkJCSB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCXBhdGgtPmxvbmdfbmFtZVtuYW1lX2xlbiAtIDFdID0gJ1wwJzsKIAogCQkJcGF0aC0+a2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJnctPmtjb250cm9sc1tpXSwgdywKQEAgLTUwMyw2ICs1MjIsMTM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkYXBtX3JlZ19ldmVudCk7CiAKIC8qCisgKiBTY2FuIGEgc2luZ2xlIERBUE0gd2lkZ2V0IGZvciBhIGNvbXBsZXRlIGF1ZGlvIHBhdGggYW5kIHVwZGF0ZSB0aGUKKyAqIHBvd2VyIHN0YXR1cyBhcHByb3ByaWF0ZWx5LgorICovCitzdGF0aWMgaW50IGRhcG1fcG93ZXJfd2lkZ2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGV2ZW50LAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3sKKwlpbnQgaW4sIG91dCwgcG93ZXJfY2hhbmdlLCBwb3dlciwgcmV0OworCisJLyogdm1pZCAtIG5vIGFjdGlvbiAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fdm1pZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBhY3RpdmUgQURDICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9hZGMgJiYgdy0+YWN0aXZlKSB7CisJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOworCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCQl3LT5wb3dlciA9IChpbiAhPSAwKSA/IDEgOiAwOworCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBhY3RpdmUgREFDICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgdy0+YWN0aXZlKSB7CisJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CisJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJCXctPnBvd2VyID0gKG91dCAhPSAwKSA/IDEgOiAwOworCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBwcmUgYW5kIHBvc3QgZXZlbnQgd2lkZ2V0cyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcHJlKSB7CisJCWlmICghdy0+ZXZlbnQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcG9zdCkgeworCQlpZiAoIXctPmV2ZW50KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWxsIG90aGVyIHdpZGdldHMgKi8KKwlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKKwlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CisJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwlwb3dlciA9IChvdXQgIT0gMCAmJiBpbiAhPSAwKSA/IDEgOiAwOworCXBvd2VyX2NoYW5nZSA9ICh3LT5wb3dlciA9PSBwb3dlcikgPyAwIDogMTsKKwl3LT5wb3dlciA9IHBvd2VyOworCisJaWYgKCFwb3dlcl9jaGFuZ2UpCisJCXJldHVybiAwOworCisJLyogY2FsbCBhbnkgcG93ZXIgY2hhbmdlIGV2ZW50IGhhbmRsZXJzICovCisJaWYgKHctPmV2ZW50KQorCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAorCQkJIHctPnBvd2VyID8gIm9uIiA6ICJvZmYiLAorCQkJIHctPm5hbWUsIHctPmV2ZW50X2ZsYWdzKTsKKworCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLworCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcG93ZXIgZG93biBwcmUgZXZlbnQgKi8KKwlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBMb3dlciBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgIXBvd2VyKQorCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOworCisJZGFwbV91cGRhdGVfYml0cyh3KTsKKworCS8qIFJhaXNlIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiBwb3dlcikKKwkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKKworCS8qIHBvd2VyIHVwIHBvc3QgZXZlbnQgKi8KKwlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwb3dlciBkb3duIHBvc3QgZXZlbnQgKi8KKwlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgogICogU2NhbiBlYWNoIGRhcG0gd2lkZ2V0IGZvciBjb21wbGV0ZSBhdWRpbyBwYXRoLgogICogQSBjb21wbGV0ZSBwYXRoIGlzIGEgcm91dGUgdGhhdCBoYXMgdmFsaWQgZW5kcG9pbnRzIGkuZS46LQogICoKQEAgLTUxNCw3ICs2NjQsNyBAQAogc3RhdGljIGludCBkYXBtX3Bvd2VyX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7Ci0JaW50IGluLCBvdXQsIGksIGMgPSAxLCAqc2VxID0gTlVMTCwgcmV0ID0gMCwgcG93ZXJfY2hhbmdlLCBwb3dlcjsKKwlpbnQgaSwgYyA9IDEsICpzZXEgPSBOVUxMLCByZXQgPSAwOwogCiAJLyogZG8gd2UgaGF2ZSBhIHNlcXVlbmNlZCBzdHJlYW0gZXZlbnQgKi8KIAlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgewpAQCAtNTI1LDEzNSArNjc1LDIwIEBACiAJCXNlcSA9IGRhcG1fZG93bl9zZXE7CiAJfQogCi0JZm9yKGkgPSAwOyBpIDwgYzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CiAKIAkJCS8qIGlzIHdpZGdldCBpbiBzdHJlYW0gb3JkZXIgKi8KIAkJCWlmIChzZXEgJiYgc2VxW2ldICYmIHctPmlkICE9IHNlcVtpXSkKIAkJCQljb250aW51ZTsKIAotCQkJLyogdm1pZCAtIG5vIGFjdGlvbiAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV92bWlkKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBhY3RpdmUgQURDICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2FkYyAmJiB3LT5hY3RpdmUpIHsKLQkJCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXctPnBvd2VyID0gKGluICE9IDApID8gMSA6IDA7Ci0JCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogYWN0aXZlIERBQyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgdy0+YWN0aXZlKSB7Ci0JCQkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXctPnBvd2VyID0gKG91dCAhPSAwKSA/IDEgOiAwOwotCQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIHByZSBhbmQgcG9zdCBldmVudCB3aWRnZXRzICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ByZSkgewotCQkJCWlmICghdy0+ZXZlbnQpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3Bvc3QpIHsKLQkJCQlpZiAoIXctPmV2ZW50KQotCQkJCQljb250aW51ZTsKLQotCQkJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIGFsbCBvdGhlciB3aWRnZXRzICovCi0JCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCXBvd2VyID0gKG91dCAhPSAwICYmIGluICE9IDApID8gMSA6IDA7Ci0JCQlwb3dlcl9jaGFuZ2UgPSAody0+cG93ZXIgPT0gcG93ZXIpID8gMDogMTsKLQkJCXctPnBvd2VyID0gcG93ZXI7Ci0KLQkJCWlmICghcG93ZXJfY2hhbmdlKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBjYWxsIGFueSBwb3dlciBjaGFuZ2UgZXZlbnQgaGFuZGxlcnMgKi8KLQkJCWlmICh3LT5ldmVudCkKLQkJCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAotCQkJCQkgdy0+cG93ZXIgPyAib24iIDogIm9mZiIsCi0JCQkJCSB3LT5uYW1lLCB3LT5ldmVudF9mbGFncyk7Ci0KLQkJCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLwotCQkJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBwb3dlciBkb3duIHByZSBldmVudCAqLwotCQkJaWYgKCFwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogTG93ZXIgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgIXBvd2VyKQotCQkJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7Ci0KLQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0KLQkJCS8qIFJhaXNlIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmIHBvd2VyKQotCQkJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7Ci0KLQkJCS8qIHBvd2VyIHVwIHBvc3QgZXZlbnQgKi8KLQkJCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogcG93ZXIgZG93biBwb3N0IGV2ZW50ICovCi0JCQlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9CisJCQlyZXQgPSBkYXBtX3Bvd2VyX3dpZGdldChjb2RlYywgZXZlbnQsIHcpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAjaWZkZWYgREVCVUcKQEAgLTY4Nyw2ICs3MjIsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWlmICh3LT5uYW1lKSB7CiAJCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CiAJCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKQEAgLTc2MCw2ICs3OTYsNyBAQAogCWludCBmb3VuZCA9IDA7CiAKIAlpZiAod2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXIgJiYKKwkgICAgd2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsICYmCiAJICAgIHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX3N3aXRjaCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTc5NSw3ICs4MzIsNyBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAJaW50IGNvdW50ID0gMDsKIAljaGFyICpzdGF0ZSA9ICJub3Qgc2V0IjsKQEAgLTgxMyw2ICs4NTAsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWlmICh3LT5uYW1lKQogCQkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlczogJXNcbiIsCiAJCQkJCXctPm5hbWUsIHctPnBvd2VyID8gIk9uIjoiT2ZmIik7CkBAIC04NzYsNyArOTE0LDcgQEAKIH0KIAogc3RhdGljIGludCBzbmRfc29jX2RhcG1fc2V0X3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JY2hhciAqcGluLCBpbnQgc3RhdHVzKQorCQkJCWNvbnN0IGNoYXIgKnBpbiwgaW50IHN0YXR1cykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIApAQCAtOTkxLDYgKzEwMjksNyBAQAogCQlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQlyZXQgPSBkYXBtX2Nvbm5lY3RfbWl4ZXIoY29kZWMsIHdzb3VyY2UsIHdzaW5rLCBwYXRoLCBjb250cm9sKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZ290byBlcnI7CkBAIC0xMDY4LDYgKzExMDcsNyBAQAogCQlzd2l0Y2gody0+aWQpIHsKIAkJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJZGFwbV9uZXdfbWl4ZXIoY29kZWMsIHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX211eDoKQEAgLTEzOTYsNiArMTQzNiw3NiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZSk7CiAKIC8qKgorICogc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCAtIEluZm8gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVpbmZvOiBjb250cm9sIGVsZW1lbnQgaW5mb3JtYXRpb24KKyAqCisgKiBDYWxsYmFjayB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGEgcGluIHN3aXRjaCBjb250cm9sLgorICovCitpbnQgc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCk7CisKKy8qKgorICogc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoIC0gR2V0IGluZm9ybWF0aW9uIGZvciBhIHBpbiBzd2l0Y2gKKyAqCisgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKKyAqIEB1Y29udHJvbDogVmFsdWUKKyAqLworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJY29uc3QgY2hhciAqcGluID0gKGNvbnN0IGNoYXIgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCXNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgcGluKTsKKworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKTsKKworLyoqCisgKiBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2ggLSBTZXQgaW5mb3JtYXRpb24gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVjb250cm9sOiBWYWx1ZQorICovCitpbnQgc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb25zdCBjaGFyICpwaW4gPSAoY29uc3QgY2hhciAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsIHBpbik7CisJZWxzZQorCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbik7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCk7CisKKy8qKgogICogc25kX3NvY19kYXBtX25ld19jb250cm9sIC0gY3JlYXRlIG5ldyBkYXBtIGNvbnRyb2wKICAqIEBjb2RlYzogYXVkaW8gY29kZWMKICAqIEB3aWRnZXQ6IHdpZGdldCB0ZW1wbGF0ZQpAQCAtMTUyNyw4ICsxNjM3LDggQEAKIGludCBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsCiAJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZC0+c2V0X2JpYXNfbGV2ZWwpCkBAIC0xNTQ5LDcgKzE2NTksNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMSk7CiB9CkBAIC0xNTY0LDcgKzE2NzQsNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAwKTsKIH0KQEAgLTE1ODQsNyArMTY5NCw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMCk7CiB9CkBAIC0xNTk5LDcgKzE3MDksNyBAQAogICoKICAqIFJldHVybnMgMSBmb3IgY29ubmVjdGVkIG90aGVyd2lzZSAwLgogICovCi1pbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIApAQCAtMTYyMCw3ICsxNzMwLDcgQEAKICAqLwogdm9pZCBzbmRfc29jX2RhcG1fZnJlZShzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzbmRfc29jX2RhcG1fc3lzX3JlbW92ZShzb2NkZXYtPmRldik7CiAJZGFwbV9mcmVlX3dpZGdldHMoY29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1qYWNrLmMgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODM0NmZiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NvYy1qYWNrLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBzb2MtamFjay5jICAtLSAgQUxTQSBTb0MgamFjayBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8qKgorICogc25kX3NvY19qYWNrX25ldyAtIENyZWF0ZSBhIG5ldyBqYWNrCisgKiBAY2FyZDogIEFTb0MgY2FyZAorICogQGlkOiAgICBhbiBpZGVudGlmeWluZyBzdHJpbmcgZm9yIHRoaXMgamFjaworICogQHR5cGU6ICBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGNhbiBiZSBkZXRlY3RlZCBieQorICogICAgICAgICB0aGlzIGphY2sKKyAqIEBqYWNrOiAgc3RydWN0dXJlIHRvIHVzZSBmb3IgdGhlIGphY2sKKyAqCisgKiBDcmVhdGVzIGEgbmV3IGphY2sgb2JqZWN0LgorICoKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIE9uIHN1Y2Nlc3MgamFjayB3aWxsIGJlIGluaXRpYWxpc2VkLgorICovCitpbnQgc25kX3NvY19qYWNrX25ldyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IHR5cGUsCisJCSAgICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaykKK3sKKwlqYWNrLT5jYXJkID0gY2FyZDsKKwlJTklUX0xJU1RfSEVBRCgmamFjay0+cGlucyk7CisKKwlyZXR1cm4gc25kX2phY2tfbmV3KGNhcmQtPmNvZGVjLT5jYXJkLCBpZCwgdHlwZSwgJmphY2stPmphY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX25ldyk7CisKKy8qKgorICogc25kX3NvY19qYWNrX3JlcG9ydCAtIFJlcG9ydCB0aGUgY3VycmVudCBzdGF0dXMgZm9yIGEgamFjaworICoKKyAqIEBqYWNrOiAgIHRoZSBqYWNrCisgKiBAc3RhdHVzOiBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGFyZSBjdXJyZW50bHkgZGV0ZWN0ZWQuCisgKiBAbWFzazogICBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGJlaW5nIHJlcG9ydGVkLgorICoKKyAqIElmIGNvbmZpZ3VyZWQgdXNpbmcgc25kX3NvY19qYWNrX2FkZF9waW5zKCkgdGhlbiB0aGUgYXNzb2NpYXRlZAorICogREFQTSBwaW5zIHdpbGwgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhcHByb3ByaWF0ZSBhbmQgREFQTQorICogc3luY2hyb25pc2VkLgorICoKKyAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gdXNlcyBtdXRleGVzIGFuZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gYQorICogY29udGV4dCB3aGljaCBjYW4gc2xlZXAgKHN1Y2ggYXMgYSB3b3JrcXVldWUpLgorICovCit2b2lkIHNuZF9zb2NfamFja19yZXBvcnQoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHN0YXR1cywgaW50IG1hc2spCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gamFjay0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfamFja19waW4gKnBpbjsKKwlpbnQgZW5hYmxlOworCWludCBvbGRzdGF0dXM7CisKKwlpZiAoIWphY2spIHsKKwkJV0FSTl9PTl9PTkNFKCFqYWNrKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwlvbGRzdGF0dXMgPSBqYWNrLT5zdGF0dXM7CisKKwlqYWNrLT5zdGF0dXMgJj0gfm1hc2s7CisJamFjay0+c3RhdHVzIHw9IHN0YXR1czsKKworCS8qIFRoZSBEQVBNIHN5bmMgaXMgZXhwZW5zaXZlIGVub3VnaCB0byBiZSB3b3J0aCBza2lwcGluZyAqLworCWlmIChqYWNrLT5zdGF0dXMgPT0gb2xkc3RhdHVzKQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmamFjay0+cGlucywgbGlzdCkgeworCQllbmFibGUgPSBwaW4tPm1hc2sgJiBzdGF0dXM7CisKKwkJaWYgKHBpbi0+aW52ZXJ0KQorCQkJZW5hYmxlID0gIWVuYWJsZTsKKworCQlpZiAoZW5hYmxlKQorCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsIHBpbi0+cGluKTsKKwkJZWxzZQorCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCBwaW4tPnBpbik7CisJfQorCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJc25kX2phY2tfcmVwb3J0KGphY2stPmphY2ssIHN0YXR1cyk7CisKK291dDoKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfcmVwb3J0KTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfYWRkX3BpbnMgLSBBc3NvY2lhdGUgREFQTSBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogTnVtYmVyIG9mIHBpbnMKKyAqIEBwaW5zOiAgQXJyYXkgb2YgcGlucworICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHRoZSBEQVBNIHBpbnMgc3BlY2lmaWVkIGluIHRoZQorICogcGlucyBhcnJheSB3aWxsIGhhdmUgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY3VycmVudAorICogc3RhdGUgb2YgdGhlIGphY2sgd2hlbmV2ZXIgdGhlIGphY2sgc3RhdHVzIGlzIHVwZGF0ZWQuCisgKi8KK2ludCBzbmRfc29jX2phY2tfYWRkX3BpbnMoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGlucykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghcGluc1tpXS5waW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTm8gbmFtZSBmb3IgcGluICVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICghcGluc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIG1hc2sgZm9yIHBpbiAlZCAoJXMpXG4iLCBpLAorCQkJICAgICAgIHBpbnNbaV0ucGluKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBpbnNbaV0ubGlzdCk7CisJCWxpc3RfYWRkKCYocGluc1tpXS5saXN0KSwgJmphY2stPnBpbnMpOworCX0KKworCS8qIFVwZGF0ZSB0byByZWZsZWN0IHRoZSBsYXN0IHJlcG9ydGVkIHN0YXR1czsgY2FubmVkIGphY2sKKwkgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpa2VseSB0byBzZXQgdGhlaXIgc3RhdGUgYmVmb3JlIHRoZQorCSAqIGNhcmQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGFzc29jaWF0ZSBwaW5zLgorCSAqLworCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19hZGRfcGlucyk7CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorLyogZ3BpbyBkZXRlY3QgKi8KK3N0YXRpYyB2b2lkIHNuZF9zb2NfamFja19ncGlvX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW8pCit7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjayA9IGdwaW8tPmphY2s7CisJaW50IGVuYWJsZTsKKwlpbnQgcmVwb3J0OworCisJaWYgKGdwaW8tPmRlYm91bmNlX3RpbWUgPiAwKQorCQltZGVsYXkoZ3Bpby0+ZGVib3VuY2VfdGltZSk7CisKKwllbmFibGUgPSBncGlvX2dldF92YWx1ZShncGlvLT5ncGlvKTsKKwlpZiAoZ3Bpby0+aW52ZXJ0KQorCQllbmFibGUgPSAhZW5hYmxlOworCisJaWYgKGVuYWJsZSkKKwkJcmVwb3J0ID0gZ3Bpby0+cmVwb3J0OworCWVsc2UKKwkJcmVwb3J0ID0gMDsKKworCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgcmVwb3J0LCBncGlvLT5yZXBvcnQpOworfQorCisvKiBpcnEgaGFuZGxlciBmb3IgZ3BpbyBwaW4gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW8gPSBkYXRhOworCisJc2NoZWR1bGVfd29yaygmZ3Bpby0+d29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIGdwaW8gd29yayAqLworc3RhdGljIHZvaWQgZ3Bpb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW87CisKKwlncGlvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2phY2tfZ3Bpbywgd29yayk7CisJc25kX3NvY19qYWNrX2dwaW9fZGV0ZWN0KGdwaW8pOworfQorCisvKioKKyAqIHNuZF9zb2NfamFja19hZGRfZ3Bpb3MgLSBBc3NvY2lhdGUgR1BJTyBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBpbnMKKyAqIEBncGlvczogYXJyYXkgb2YgZ3BpbyBwaW5zCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlcXVlc3QgZ3Bpbywgc2V0IGRhdGEgZGlyZWN0aW9uIGFuZCByZXF1ZXN0IGlycQorICogZm9yIGVhY2ggZ3BpbyBpbiB0aGUgYXJyYXkuCisgKi8KK2ludCBzbmRfc29jX2phY2tfYWRkX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpCit7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghZ3Bpb19pc192YWxpZChncGlvc1tpXS5ncGlvKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGdwaW8gJWRcbiIsCisJCQkJZ3Bpb3NbaV0uZ3Bpbyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmRvOworCQl9CisJCWlmICghZ3Bpb3NbaV0ubmFtZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJObyBuYW1lIGZvciBncGlvICVkXG4iLAorCQkJCWdwaW9zW2ldLmdwaW8pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gdW5kbzsKKwkJfQorCisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvc1tpXS5ncGlvLCBncGlvc1tpXS5uYW1lKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5kbzsKKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvc1tpXS5ncGlvKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9zW2ldLmdwaW8pLAorCQkJCWdwaW9faGFuZGxlciwKKwkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJamFjay0+Y2FyZC0+ZGV2LT5kcml2ZXItPm5hbWUsCisJCQkJJmdwaW9zW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCUlOSVRfV09SSygmZ3Bpb3NbaV0ud29yaywgZ3Bpb193b3JrKTsKKwkJZ3Bpb3NbaV0uamFjayA9IGphY2s7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlncGlvX2ZyZWUoZ3Bpb3NbaV0uZ3Bpbyk7Cit1bmRvOgorCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKGphY2ssIGksIGdwaW9zKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfYWRkX2dwaW9zKTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyAtIFJlbGVhc2UgR1BJTyBwaW5zJyByZXNvdXJjZXMgb2YgYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBpbnMKKyAqIEBncGlvczogYXJyYXkgb2YgZ3BpbyBwaW5zCisgKgorICogUmVsZWFzZSBncGlvIGFuZCBpcnEgcmVzb3VyY2VzIGZvciBncGlvIHBpbnMgYXNzb2NpYXRlZCB3aXRoIGFuIEFTb0MgamFjay4KKyAqLwordm9pZCBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksICZncGlvc1tpXSk7CisJCWdwaW9fZnJlZShncGlvc1tpXS5ncGlvKTsKKwkJZ3Bpb3NbaV0uamFjayA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MpOworI2VuZGlmCS8qIENPTkZJR19HUElPTElCICovCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKaW5kZXggZjg3OTMzZS4uNTc0YWY1NiAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvYW1kNzkzMC5jCisrKyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwpAQCAtOTU0LDcgKzk1NCw4IEBACiAJYW1kLT5yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCAwLAogCQkJICAgICAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVswXSksICJhbWQ3OTMwIik7CiAJaWYgKCFhbWQtPnJlZ3MpIHsKLQkJc25kX3ByaW50aygiYW1kNzkzMC0lZDogVW5hYmxlIHRvIG1hcCBjaGlwIHJlZ2lzdGVycy5cbiIsIGRldik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC05NjIsNyArOTYzLDcgQEAKIAogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9hbWQ3OTMwX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgImFtZDc5MzAiLCBhbWQpKSB7Ci0JCXNuZF9wcmludGsoImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYW1kNzkzMC0lZDogVW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLAogCQkJICAgZGV2LCBpcnEpOwogCQlzbmRfYW1kNzkzMF9mcmVlKGFtZCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xMDE4LDkgKzEwMTksMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZfbnVtXSwgaWRbZGV2X251bV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2X251bV0sIGlkW2Rldl9udW1dLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTUQ3OTMwIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBBTUQ3OTMwIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IDQxYzM4NzUuLjdkOTNmYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC0xNTYzLDYgKzE1NjMsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcDsKKwlpbnQgZXJyOwogCiAJKnJjYXJkID0gTlVMTDsKIApAQCAtMTU3NCwxMCArMTU3NSwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NzNDIzMSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NzNDIzMSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDUzQyMzEiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIENTNDIzMSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvZGJyaS5jIGIvc291bmQvc3BhcmMvZGJyaS5jCmluZGV4IDIzZWQ2ZjAuLmFmOTVmZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2RicmkuYworKysgYi9zb3VuZC9zcGFyYy9kYnJpLmMKQEAgLTI2MTIsMTAgKzI2MTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9kYnJpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZGJyaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJEQlJJIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBEQlJJIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGkvYXQ3M2MyMTMuYyBiL3NvdW5kL3NwaS9hdDczYzIxMy5jCmluZGV4IDA5ODAyZTguLjRjN2IwNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwaS9hdDczYzIxMy5jCisrKyBiL3NvdW5kL3NwaS9hdDczYzIxMy5jCkBAIC05NjUsMTIgKzk2NSwxMSBAQAogCQlyZXR1cm4gUFRSX0VSUihib2FyZC0+ZGFjX2Nsayk7CiAJfQogCi0JcmV0dmFsID0gLUVOT01FTTsKLQogCS8qIEFsbG9jYXRlICJjYXJkIiB1c2luZyBzb21lIHVudXNlZCBpZGVudGlmaWVycy4gKi8KIAlzbnByaW50ZihpZCwgc2l6ZW9mIGlkLCAiYXQ3M2MyMTNfJWQiLCBib2FyZC0+c3NjX2lkKTsKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX2F0NzNjMjEzKSk7Ci0JaWYgKCFjYXJkKQorCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgaWQsIFRISVNfTU9EVUxFLAorCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9hdDczYzIxMyksICZjYXJkKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CiAKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwppbmRleCAwYTUzOTE0Li5mZjBiMmE4IDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwpAQCAtMjQsMjUgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImVtdXhfdm9pY2UuaCIKIAotLyoKLSAqIG9wZW4gdGhlIGh3ZGVwIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1zbmRfZW11eF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogY2xvc2UgdGhlIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1zbmRfZW11eF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogCiAjZGVmaW5lIFRNUF9DTElFTlRfSUQJMHgxMDAxCiAKQEAgLTE0Niw4ICsxMjcsNiBAQAogCWVtdS0+aHdkZXAgPSBodzsKIAlzdHJjcHkoaHctPm5hbWUsIFNORFJWX0VNVVhfSFdERVBfTkFNRSk7CiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfRU1VWF9XQVZFVEFCTEU7Ci0JaHctPm9wcy5vcGVuID0gc25kX2VtdXhfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfZW11eF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfZW11eF9od2RlcF9pb2N0bDsKIAlody0+ZXhjbHVzaXZlID0gMTsKIAlody0+cHJpdmF0ZV9kYXRhID0gZW11OwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCmluZGV4IDVjNDdiNmMuLjg3ZTQyMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXAgPSBzbmRfZW11eF9jcmVhdGVfcG9ydChlbXUsIHRtcG5hbWUsIDMyLAogCQkJCSAxLCAmY2FsbGJhY2spOwogCWlmIChwID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiY2FuJ3QgY3JlYXRlIHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CiAJCXNuZF9lbXV4X2RlY19jb3VudChlbXUpOwogCQltdXRleF91bmxvY2soJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYwppbmRleCAzMzVhYTJjLi5jYTVmN2VmIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCkBAIC03NCwxNSArNzQsMTUgQEAKIAllbXUtPmNsaWVudCA9IHNuZF9zZXFfY3JlYXRlX2tlcm5lbF9jbGllbnQoY2FyZCwgaW5kZXgsCiAJCQkJCQkgICAiJXMgV2F2ZVRhYmxlIiwgZW11LT5uYW1lKTsKIAlpZiAoZW11LT5jbGllbnQgPCAwKSB7Ci0JCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBjbGllbnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgY2xpZW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGVtdS0+bnVtX3BvcnRzIDwgMCkgewotCQlzbmRfcHJpbnRrKCJzZXFwb3J0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInNlcXBvcnRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cbiIpOwogCQllbXUtPm51bV9wb3J0cyA9IDE7CiAJfSBlbHNlIGlmIChlbXUtPm51bV9wb3J0cyA+PSBTTkRSVl9FTVVYX01BWF9QT1JUUykgewotCQlzbmRfcHJpbnRrKCJ0b28gbWFueSBwb3J0cy4iCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ0b28gbWFueSBwb3J0cy4iCiAJCQkgICAibGltaXRlZCBtYXguIHBvcnRzICVkXG4iLCBTTkRSVl9FTVVYX01BWF9QT1JUUyk7CiAJCWVtdS0+bnVtX3BvcnRzID0gU05EUlZfRU1VWF9NQVhfUE9SVFM7CiAJfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCXAgPSBzbmRfZW11eF9jcmVhdGVfcG9ydChlbXUsIHRtcG5hbWUsIE1JRElfQ0hBTk5FTFMsCiAJCQkJCSAwLCAmcGluZm8pOwogCQlpZiAocCA9PSBOVUxMKSB7Ci0JCQlzbmRfcHJpbnRrKCJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCkBAIC0xNDcsMTIgKzE0NywxMiBAQAogCiAJLyogQWxsb2NhdGUgc3RydWN0dXJlcyBmb3IgdGhpcyBjaGFubmVsICovCiAJaWYgKChwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJubyBtZW1vcnlcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcC0+Y2hzZXQuY2hhbm5lbHMgPSBrY2FsbG9jKG1heF9jaGFubmVscywgc2l6ZW9mKHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHAtPmNoc2V0LmNoYW5uZWxzID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygibm8gbWVtb3J5XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5XG4iKTsKIAkJa2ZyZWUocCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTM3NiwxMiArMzc2LDEyIEBACiAJCQlnb3RvIF9fZXJyb3I7CiAJCX0KIAkJZW11LT52bWlkaVtpXSA9IHJtaWRpOwotCQkvL3NuZF9wcmludGsoInZpcm1pZGkgJWQgb2tcbiIsIGkpOworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgInZpcm1pZGkgJWQgb2tcbiIsIGkpOyAqLwogCX0KIAlyZXR1cm4gMDsKIAogX19lcnJvcjoKLQkvL3NuZF9wcmludGsoImVycm9yIGluaXQuLlxuIik7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcnJvciBpbml0Li5cbiIpOyAqLwogCXNuZF9lbXV4X2RlbGV0ZV92aXJtaWRpKGVtdSk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCmluZGV4IDJjYzZmNmYuLjNlOTIxYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCkBAIC05NTYsNyArOTU2LDggQEAKIAlpZiAoZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID09IFNORFJWX0VNVVhfU1RfT0ZGKQogCQllbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPSBTTkRSVl9FTVVYX1NUX0xPQ0tFRDsKIAllbHNlCi0JCXNuZF9wcmludGsoImludmFsaWQgdm9pY2UgZm9yIGxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgImludmFsaWQgdm9pY2UgZm9yIGxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAogCQkJICAgdm9pY2UsIGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW11LT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CkBAIC05NzMsNyArOTc0LDggQEAKIAlpZiAoZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID09IFNORFJWX0VNVVhfU1RfTE9DS0VEKQogCQllbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPSBTTkRSVl9FTVVYX1NUX09GRjsKIAllbHNlCi0JCXNuZF9wcmludGsoImludmFsaWQgdm9pY2UgZm9yIHVubG9jayAlZCAoc3RhdGUgPSAleClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiaW52YWxpZCB2b2ljZSBmb3IgdW5sb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKIAkJCSAgIHZvaWNlLCBlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVtdS0+dm9pY2VfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYyBiL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKaW5kZXggMzZkNTNiZC4uNjNjOGY0NSAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpbnQgIHJjOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHBhdGNoKSkgewotCQlzbmRfcHJpbnRrKCJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXRjaCwgZGF0YSwgc2l6ZW9mKHBhdGNoKSkpCkBAIC0xNDMsMTUgKzE0MywxNiBAQAogCWRhdGEgKz0gc2l6ZW9mKHBhdGNoKTsKIAogCWlmIChwYXRjaC5rZXkgIT0gU05EUlZfT1NTX1NPVU5ERk9OVF9QQVRDSCkgewotCQlzbmRfcHJpbnRrKCInVGhlIHdyb25nIGtpbmQgb2YgcGF0Y2gnICV4XG4iLCBwYXRjaC5rZXkpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJUaGUgd3Jvbmcga2luZCBvZiBwYXRjaCAleFxuIiwgcGF0Y2gua2V5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3VudCA8IHBhdGNoLmxlbikgewotCQlzbmRfcHJpbnRrKCJQYXRjaCB0b28gc2hvcnQgJWxkLCBuZWVkICVkXG4iLCBjb3VudCwgcGF0Y2gubGVuKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiUGF0Y2ggdG9vIHNob3J0ICVsZCwgbmVlZCAlZFxuIiwKKwkJCSAgIGNvdW50LCBwYXRjaC5sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHBhdGNoLmxlbiA8IDApIHsKLQkJc25kX3ByaW50aygicG9vciBsZW5ndGggJWRcbiIsIHBhdGNoLmxlbik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBvb3IgbGVuZ3RoICVkXG4iLCBwYXRjaC5sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5NSw3ICsxOTYsOCBAQAogCWNhc2UgU05EUlZfU0ZOVF9SRU1PVkVfSU5GTzoKIAkJLyogcGF0Y2ggbXVzdCBiZSBvcGVuZWQgKi8KIAkJaWYgKCFzZmxpc3QtPmN1cnJzZikgewotCQkJc25kX3ByaW50aygic291bmRmb250OiByZW1vdmVfaW5mbzogcGF0Y2ggbm90IG9wZW5lZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzb3VuZGZvbnQ6IHJlbW92ZV9pbmZvOiAiCisJCQkJICAgInBhdGNoIG5vdCBvcGVuZWRcbiIpOwogCQkJcmMgPSAtRUlOVkFMOwogCQl9IGVsc2UgewogCQkJaW50IGJhbmssIGluc3RyOwpAQCAtNTMxLDcgKzUzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKGhkcikpIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgZXJyb3I6IGludmFsaWQgcGF0Y2ggem9uZSBsZW5ndGhcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBlcnJvcjogaW52YWxpZCBwYXRjaCB6b25lIGxlbmd0aFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIqKSZoZHIsIGRhdGEsIHNpemVvZihoZHIpKSkKQEAgLTU0MSwxMiArNTQzLDE0IEBACiAJY291bnQgLT0gc2l6ZW9mKGhkcik7CiAKIAlpZiAoaGRyLm52b2ljZXMgPD0gMCB8fCBoZHIubnZvaWNlcyA+PSAxMDApIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgZXJyb3I6IElsbGVnYWwgdm9pY2UgbnVtYmVyICVkXG4iLCBoZHIubnZvaWNlcyk7CisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IGVycm9yOiBJbGxlZ2FsIHZvaWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIGhkci5udm9pY2VzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBzb3VuZGZvbnRfdm9pY2VfaW5mbykgKiBoZHIubnZvaWNlcykgewotCQlwcmludGsoIlNvdW5kZm9udCBFcnJvcjogcGF0Y2ggbGVuZ3RoKCVsZCkgaXMgc21hbGxlciB0aGFuIG52b2ljZXMoJWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBFcnJvcjogIgorCQkgICAgICAgInBhdGNoIGxlbmd0aCglbGQpIGlzIHNtYWxsZXIgdGhhbiBudm9pY2VzKCVkKVxuIiwKIAkJICAgICAgIGNvdW50LCBoZHIubnZvaWNlcyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTk1Miw3ICs5NTYsNyBAQAogCWludCByYzsKIAogCWlmIChjb3VudCA8IChsb25nKXNpemVvZihwYXRjaCkpIHsKLQkJc25kX3ByaW50aygicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigmcGF0Y2gsIGRhdGEsIHNpemVvZihwYXRjaCkpKQpAQCAtMTAzNCw3ICsxMDM4LDggQEAKIAkvKiBwYW5uaW5nIHBvc2l0aW9uOyAtMTI4IC0gMTI3ID0+IDAtMTI3ICovCiAJem9uZS0+di5wYW4gPSAocGF0Y2gucGFubmluZyArIDEyOCkgLyAyOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJndXM6IGJhc2VmcnE9JWQgKG9mcz0lZCkgcm9vdD0lZCx0dW5lPSVkLCByYW5nZTolZC0lZFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgImd1czogYmFzZWZycT0lZCAob2ZzPSVkKSByb290PSVkLHR1bmU9JWQsIHJhbmdlOiVkLSVkXG4iLAogCQkgICAoaW50KXBhdGNoLmJhc2VfZnJlcSwgem9uZS0+di5yYXRlX29mZnNldCwKIAkJICAgem9uZS0+di5yb290LCB6b25lLT52LnR1bmUsIHpvbmUtPnYubG93LCB6b25lLT52LmhpZ2gpOwogI2VuZGlmCkBAIC0xMDY4LDcgKzEwNzMsOCBAQAogCQl6b25lLT52LnBhcm0udm9scmVsZWFzZSA9IDB4ODAwMCB8IHNuZF9zZl9jYWxjX3Bhcm1fZGVjYXkocmVsZWFzZSk7CiAJCXpvbmUtPnYuYXR0ZW51YXRpb24gPSBjYWxjX2d1c19hdHRlbnVhdGlvbihwYXRjaC5lbnZfb2Zmc2V0WzBdKTsKICNpZiAwCi0JCXNuZF9wcmludGsoImd1czogYXRraGxkPSV4LCBkY3lzdXM9JXgsIHZvbHJlbD0leCwgYXR0PSVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJndXM6IGF0a2hsZD0leCwgZGN5c3VzPSV4LCB2b2xyZWw9JXgsIGF0dD0lZFxuIiwKIAkJCSAgIHpvbmUtPnYucGFybS52b2xhdGtobGQsCiAJCQkgICB6b25lLT52LnBhcm0udm9sZGN5c3VzLAogCQkJICAgem9uZS0+di5wYXJtLnZvbHJlbGVhc2UsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvS2NvbmZpZyBiL3NvdW5kL3VzYi9LY29uZmlnCmluZGV4IDRmMGVhYzkuLjUyM2FlYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9LY29uZmlnCisrKyBiL3NvdW5kL3VzYi9LY29uZmlnCkBAIC00OCw3ICs0OCwxMCBAQAogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBLb3JlIENvbnRyb2xsZXIKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgS29yZSBDb250cm9sbGVyIDIKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gS29udHJvbCAxCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIDQgREoKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gOCBESgorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBHdWl0YXIgUmlnIFNlc3Npb24gSS9PCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEd1aXRhciBSaWcgbW9iaWxlCiAKIAkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICAgd2lsbCBiZSBjYWxsZWQgc25kLXVzYi1jYWlhcS4KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKaW5kZXggYjNhNjAzMy4uMDhkNTFlMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogCWRldi0+b3V0cHV0X3BhbmljID0gMDsKIAlkZXYtPmZpcnN0X3BhY2tldCA9IDE7CiAJZGV2LT5zdHJlYW1pbmcgPSAxOworCWRldi0+d2FybmVkID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBOX1VSQlM7IGkrKykgewogCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmRhdGFfdXJic19pbltpXSwgR0ZQX0FUT01JQyk7CkBAIC0zNzYsNiArMzc3LDkgQEAKIAogCQlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IGRldi0+bl9zdHJlYW1zOyBzdHJlYW0rKywgaSsrKSB7CiAJCQlzdWIgPSBkZXYtPnN1Yl9jYXB0dXJlW3N0cmVhbV07CisJCQlpZiAoZGV2LT5pbnB1dF9wYW5pYykKKwkJCQl1c2JfYnVmW2ldID0gMDsKKwogCQkJaWYgKHN1YikgewogCQkJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3ViLT5ydW50aW1lOwogCQkJCWNoYXIgKmF1ZGlvX2J1ZiA9IHJ0LT5kbWFfYXJlYTsKQEAgLTM5Nyw2ICs0MDEsOSBAQAogCWlmICghZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybjsKIAorCWlmIChpc28tPmFjdHVhbF9sZW5ndGggPCBkZXYtPmJwcCkKKwkJcmV0dXJuOworCiAJc3dpdGNoIChkZXYtPnNwZWMuZGF0YV9hbGlnbm1lbnQpIHsKIAljYXNlIDA6CiAJCXJlYWRfaW5fdXJiX21vZGUwKGRldiwgdXJiLCBpc28pOwpAQCAtNDA2LDEwICs0MTMsMTEgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpIHsKKwlpZiAoKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpICYmICFkZXYtPndhcm5lZCkgewogCQlkZWJ1Zygic3RyZWFtaW5nIGVycm9yIGRldGVjdGVkICVzICVzXG4iLCAKIAkJCQlkZXYtPmlucHV0X3BhbmljID8gIihpbnB1dCkiIDogIiIsCiAJCQkJZGV2LT5vdXRwdXRfcGFuaWMgPyAiKG91dHB1dCkiIDogIiIpOworCQlkZXYtPndhcm5lZCA9IDE7CiAJfQogfQogCkBAIC02MzgsOSArNjQ2LDEwIEBACiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BSzEpOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfUklHS09OVFJPTDMpOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfU0VTU0lPTklPKToKLQkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84ODIwMDsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0dVSVRBUlJJR01PQklMRSk6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfMTkyMDAwOwotCQlicmVhazsKKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESik6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODgyMDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMKaW5kZXggY2NkNzYzZC4uZTkyYzJiYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jCkBAIC0zOSwxMiArMzksMTIgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCWludCBpc19pbnR2YWwgPSBwb3MgJiBDTlRfSU5UVkFMOworCXVuc2lnbmVkIGludCBpZCA9IGRldi0+Y2hpcC51c2JfaWQ7CiAKIAl1aW5mby0+Y291bnQgPSAxOwogCXBvcyAmPSB+Q05UX0lOVFZBTDsKIAotCWlmIChkZXYtPmNoaXAudXNiX2lkID09Ci0JCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKQorCWlmIChpZCA9PSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESikKIAkJJiYgKHBvcyA9PSAwKSkgewogCQkvKiBjdXJyZW50IGlucHV0IG1vZGUgb2YgQThESiAqLwogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKQEAgLTUzLDYgKzUzLDE1IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmIChpZCA9PSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESikKKwkJJiYgKHBvcyA9PSAwKSkgeworCQkvKiBjdXJyZW50IGlucHV0IG1vZGUgb2YgQTRESiAqLworCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGlzX2ludHZhbCkgewogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAkJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKQEAgLTczLDYgKzgyLDE0IEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAorCWlmIChkZXYtPmNoaXAudXNiX2lkID09CisJCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKSkgeworCQkvKiBBNERKIGhhcyBvbmx5IG9uZSBjb250cm9sICovCisJCS8qIGRvIG5vdCBleHBvc2UgaGFyZHdhcmUgaW5wdXQgbW9kZSAwICovCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGV2LT5jb250cm9sX3N0YXRlWzBdIC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHBvcyAmIENOVF9JTlRWQUwpCiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdCiAJCQk9IGRldi0+Y29udHJvbF9zdGF0ZVtwb3MgJiB+Q05UX0lOVFZBTF07CkBAIC05MCwxMCArMTA3LDIwIEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAorCWlmIChkZXYtPmNoaXAudXNiX2lkID09CisJCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKSkgeworCQkvKiBBNERKIGhhcyBvbmx5IG9uZSBjb250cm9sICovCisJCS8qIGRvIG5vdCBleHBvc2UgaGFyZHdhcmUgaW5wdXQgbW9kZSAwICovCisJCWRldi0+Y29udHJvbF9zdGF0ZVswXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICsgMTsKKwkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLAorCQkJCWRldi0+Y29udHJvbF9zdGF0ZSwgc2l6ZW9mKGRldi0+Y29udHJvbF9zdGF0ZSkpOworCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAocG9zICYgQ05UX0lOVFZBTCkgewogCQlkZXYtPmNvbnRyb2xfc3RhdGVbcG9zICYgfkNOVF9JTlRWQUxdCiAJCQk9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfRElNTV9MRURTLAorCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfV1JJVEVfSU8sCiAJCQkJZGV2LT5jb250cm9sX3N0YXRlLCBzaXplb2YoZGV2LT5jb250cm9sX3N0YXRlKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQpAQCAtMjQzLDEwICsyNzAsMTMgQEAKIAl7ICJHTkQgbGlmdCBmb3IgVEMgVmlueWwgbW9kZSIsIAkyNCArIDAgCQl9LAogCXsgIkdORCBsaWZ0IGZvciBUQyBDRC9MaW5lIG1vZGUiLCAJMjQgKyAxIAkJfSwKIAl7ICJHTkQgbGlmdCBmb3IgcGhvbm8gbW9kZSIsIAkJMjQgKyAyIAkJfSwKLQl7ICJHTkQgbGlmdCBmb3IgVEMgVmlueWwgbW9kZSIsIAkyNCArIDMgCQl9LAogCXsgIlNvZnR3YXJlIGxvY2siLCAJCQk0MCAJCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2FpYXFfY29udHJvbGxlciBhNGRqX2NvbnRyb2xsZXJbXSA9IHsKKwl7ICJDdXJyZW50IGlucHV0IG1vZGUiLAkwIHwgQ05UX0lOVFZBTCAJfQorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRkX2NvbnRyb2xzKHN0cnVjdCBjYWlhcV9jb250cm9sbGVyICpjLCBpbnQgbnVtLAogCQkJCSAgc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKIHsKQEAgLTI5NSw2ICszMjUsMTAgQEAKIAkJcmV0ID0gYWRkX2NvbnRyb2xzKGE4ZGpfY29udHJvbGxlciwKIAkJCUFSUkFZX1NJWkUoYThkal9jb250cm9sbGVyKSwgZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CisJCXJldCA9IGFkZF9jb250cm9scyhhNGRqX2NvbnRyb2xsZXIsCisJCQlBUlJBWV9TSVpFKGE0ZGpfY29udHJvbGxlciksIGRldik7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKaW5kZXggNDFjMzZiMC4uY2Y1NzNhOSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYwpAQCAtNDIsMTUgKzQyLDE3IEBACiAjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4xMCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjEzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wzfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEtvcmUgQ29udHJvbGxlcn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBLb3JlIENvbnRyb2xsZXIgMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyBLb250cm9sIDF9LCIKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgQXVkaW8gNCBESn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA4IERKfSwiCi0JCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFNlc3Npb24gSS9PfX0iKTsKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgU2Vzc2lvbiBJL099LCIKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgR3VpdGFyUmlnIG1vYmlsZX0iKTsKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsgLyogSW5kZXggMC1tYXggKi8KIHN0YXRpYyBjaGFyKiBpZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsgLyogSWQgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMTE2LDYgKzExOCwxNiBAQAogCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKIAkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfU0VTU0lPTklPCiAJfSwKKwl7CisJCS5tYXRjaF9mbGFncyA9ICBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX0dVSVRBUlJJR01PQklMRQorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MgPSAgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJCS5pZFZlbmRvciA9ICAgICBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLAorCQkuaWRQcm9kdWN0ID0gICAgVVNCX1BJRF9BVURJTzRESgorCX0sCiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKQEAgLTIzOSw2ICsyNTEsOCBAQAogCQkKIAlpZiAoZGV2LT5hdWRpb19wYXJtX2Fuc3dlciAhPSAxKSAKIAkJZGVidWcoInVuYWJsZSB0byBzZXQgdGhlIGRldmljZSdzIGF1ZGlvIHBhcmFtc1xuIik7CisJZWxzZQorCQlkZXYtPmJwcCA9IGJwcDsKIAogCXJldHVybiBkZXYtPmF1ZGlvX3Bhcm1fYW5zd2VyID09IDEgPyAwIDogLUVJTlZBTDsKIH0KQEAgLTMwMCw2ICszMTQsMTIgQEAKIAkJfQogCiAJCWJyZWFrOworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopOgorCQkvKiBBdWRpbyA0IERKIC0gZGVmYXVsdCBpbnB1dCBtb2RlIHRvIHBob25vICovCisJCWRldi0+Y29udHJvbF9zdGF0ZVswXSA9IDI7CisJCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywKKwkJCWRldi0+Y29udHJvbF9zdGF0ZSwgMSk7CisJCWJyZWFrOwogCX0KIAkKIAlpZiAoZGV2LT5zcGVjLm51bV9hbmFsb2dfYXVkaW9fb3V0ICsKQEAgLTMzNiw5ICszNTYsMTAgQEAKIAkJbG9nKCJVbmFibGUgdG8gc2V0IHVwIGNvbnRyb2wgc3lzdGVtIChyZXQ9JWQpXG4iLCByZXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkKiBjcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSogdXNiX2RldikKK3N0YXRpYyBpbnQgY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UqIHVzYl9kZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludCBkZXZudW07CisJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldjsKIApAQCAtMzQ3LDEyICszNjgsMTIgQEAKIAkJCWJyZWFrOwogCiAJaWYgKGRldm51bSA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldikpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCAKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWRldiA9IGNhaWFxZGV2KGNhcmQpOwogCWRldi0+Y2hpcC5kZXYgPSB1c2JfZGV2OwpAQCAtMzYyLDcgKzM4Myw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c3BpbmxvY2spOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnVzYl9kZXYtPmRldik7CiAKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X2NhcmQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKQEAgLTQ0MSwxMCArNDYzLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCQotCWNhcmQgPSBjcmVhdGVfY2FyZChkZXZpY2UpOworCXJldCA9IGNyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOwogCQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJCQkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOwogCXJldCA9IGluaXRfY2FyZChjYWlhcWRldihjYXJkKSk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmggYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKaW5kZXggYWI1NmU3My4uNGNjZTFhZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaApAQCAtMTAsOCArMTAsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9LT1JFQ09OVFJPTExFUgkweDQ3MTEKICNkZWZpbmUgVVNCX1BJRF9LT1JFQ09OVFJPTExFUjIJMHg0NzEyCiAjZGVmaW5lIFVTQl9QSURfQUsxCQkweDA4MTUKKyNkZWZpbmUgVVNCX1BJRF9BVURJTzRESgkweDA4MzkKICNkZWZpbmUgVVNCX1BJRF9BVURJTzhESgkweDE5NzgKICNkZWZpbmUgVVNCX1BJRF9TRVNTSU9OSU8JMHgxOTE1CisjZGVmaW5lIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFCTB4MGQ4ZAogCiAjZGVmaW5lIEVQMV9CVUZTSVpFIDY0CiAjZGVmaW5lIENBSUFRX1VTQl9TVFJfTEVOIDB4ZmYKQEAgLTg3LDkgKzg5LDkgQEAKIAlpbnQgYXVkaW9fb3V0X2J1Zl9wb3NbTUFYX1NUUkVBTVNdOwogCWludCBwZXJpb2RfaW5fY291bnRbTUFYX1NUUkVBTVNdOwogCWludCBwZXJpb2Rfb3V0X2NvdW50W01BWF9TVFJFQU1TXTsKLQlpbnQgaW5wdXRfcGFuaWMsIG91dHB1dF9wYW5pYzsKKwlpbnQgaW5wdXRfcGFuaWMsIG91dHB1dF9wYW5pYywgd2FybmVkOwogCWNoYXIgKmF1ZGlvX2luX2J1ZiwgKmF1ZGlvX291dF9idWY7Ci0JdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzOworCXVuc2lnbmVkIGludCBzYW1wbGVyYXRlcywgYnBwOwogCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfcGxheWJhY2tbTUFYX1NUUkVBTVNdOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViX2NhcHR1cmVbTUFYX1NUUkVBTVNdOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCAxOWUzNzQ1Li5jMmRiMGY5IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lIE1BWF9QQUNLU19IUwkoTUFYX1BBQ0tTICogOCkJLyogaW4gaGlnaCBzcGVlZCBtb2RlICovCiAjZGVmaW5lIE1BWF9VUkJTCTgKICNkZWZpbmUgU1lOQ19VUkJTCTQJLyogYWx3YXlzIGZvdXIgdXJicyBmb3Igc3luYyAqLwotI2RlZmluZSBNSU5fUEFDS1NfVVJCCTEJLyogbWluaW11bSAxIHBhY2tldCBwZXIgdXJiICovCisjZGVmaW5lIE1BWF9RVUVVRQkyNAkvKiB0cnkgbm90IHRvIGV4Y2VlZCB0aGlzIHF1ZXVlIGxlbmd0aCwgaW4gbXMgKi8KIAogc3RydWN0IGF1ZGlvZm9ybWF0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC01MjUsNyArNTI1LDcgQEAKIC8qCiAgKiBQcmVwYXJlIHVyYiBmb3Igc3RyZWFtaW5nIGJlZm9yZSBwbGF5YmFjayBzdGFydHMgb3Igd2hlbiBwYXVzZWQuCiAgKgotICogV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSwgc28gd2Ugc2VuZCBhIGZyYW1lIG9mIHNpbGVuY2UuCisgKiBXZSBkb24ndCBoYXZlIGFueSBkYXRhLCBzbyB3ZSBzZW5kIHNpbGVuY2UuCiAgKi8KIHN0YXRpYyBpbnQgcHJlcGFyZV9ub2RhdGFfcGxheWJhY2tfdXJiKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywKIAkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSwKQEAgLTUzNywxMyArNTM3LDEzIEBACiAKIAlvZmZzID0gMDsKIAl1cmItPmRldiA9IGN0eC0+c3Vicy0+ZGV2OwotCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBzdWJzLT5wYWNrc19wZXJfbXM7Ci0JZm9yIChpID0gMDsgaSA8IHN1YnMtPnBhY2tzX3Blcl9tczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+cGFja2V0czsgKytpKSB7CiAJCWNvdW50cyA9IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdWJzKTsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzICogc3RyaWRlOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IGNvdW50cyAqIHN0cmlkZTsKIAkJb2ZmcyArPSBjb3VudHM7CiAJfQorCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBjdHgtPnBhY2tldHM7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb2ZmcyAqIHN0cmlkZTsKIAltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJICAgICAgIHN1YnMtPmN1cl9hdWRpb2ZtdC0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfVTggPyAweDgwIDogMCwKQEAgLTEwMzQsOSArMTAzNCw5IEBACiBzdGF0aWMgaW50IGluaXRfc3Vic3RyZWFtX3VyYnMoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLCB1bnNpZ25lZCBpbnQgcGVyaW9kX2J5dGVzLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByYXRlLCB1bnNpZ25lZCBpbnQgZnJhbWVfYml0cykKIHsKLQl1bnNpZ25lZCBpbnQgbWF4c2l6ZSwgbiwgaTsKKwl1bnNpZ25lZCBpbnQgbWF4c2l6ZSwgaTsKIAlpbnQgaXNfcGxheWJhY2sgPSBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQl1bnNpZ25lZCBpbnQgbnBhY2tzW01BWF9VUkJTXSwgdXJiX3BhY2tzLCB0b3RhbF9wYWNrcywgcGFja3NfcGVyX21zOworCXVuc2lnbmVkIGludCB1cmJfcGFja3MsIHRvdGFsX3BhY2tzLCBwYWNrc19wZXJfbXM7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSBpbiAxNi4xNiBmb3JtYXQgKi8KIAlpZiAoc25kX3VzYl9nZXRfc3BlZWQoc3Vicy0+ZGV2KSA9PSBVU0JfU1BFRURfRlVMTCkKQEAgLTEwNzAsOCArMTA3MCw3IEBACiAJc3Vicy0+cGFja3NfcGVyX21zID0gcGFja3NfcGVyX21zOwogCiAJaWYgKGlzX3BsYXliYWNrKSB7Ci0JCXVyYl9wYWNrcyA9IG5ycGFja3M7Ci0JCXVyYl9wYWNrcyA9IG1heCh1cmJfcGFja3MsICh1bnNpZ25lZCBpbnQpTUlOX1BBQ0tTX1VSQik7CisJCXVyYl9wYWNrcyA9IG1heChucnBhY2tzLCAxKTsKIAkJdXJiX3BhY2tzID0gbWluKHVyYl9wYWNrcywgKHVuc2lnbmVkIGludClNQVhfUEFDS1MpOwogCX0gZWxzZQogCQl1cmJfcGFja3MgPSAxOwpAQCAtMTA3OSw3ICsxMDc4LDcgQEAKIAogCS8qIGRlY2lkZSBob3cgbWFueSBwYWNrZXRzIHRvIGJlIHVzZWQgKi8KIAlpZiAoaXNfcGxheWJhY2spIHsKLQkJdW5zaWduZWQgaW50IG1pbnNpemU7CisJCXVuc2lnbmVkIGludCBtaW5zaXplLCBtYXhwYWNrczsKIAkJLyogZGV0ZXJtaW5lIGhvdyBzbWFsbCBhIHBhY2tldCBjYW4gYmUgKi8KIAkJbWluc2l6ZSA9IChzdWJzLT5mcmVxbiA+PiAoMTYgLSBzdWJzLT5kYXRhaW50ZXJ2YWwpKQogCQkJICAqIChmcmFtZV9iaXRzID4+IDMpOwpAQCAtMTA5Miw4ICsxMDkxLDEzIEBACiAJCXRvdGFsX3BhY2tzID0gKHRvdGFsX3BhY2tzICsgcGFja3NfcGVyX21zIC0gMSkKIAkJCQkmIH4ocGFja3NfcGVyX21zIC0gMSk7CiAJCS8qIHdlIG5lZWQgYXQgbGVhc3QgdHdvIFVSQnMgZm9yIHF1ZXVlaW5nICovCi0JCWlmICh0b3RhbF9wYWNrcyA8IDIgKiBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zKQotCQkJdG90YWxfcGFja3MgPSAyICogTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tczsKKwkJaWYgKHRvdGFsX3BhY2tzIDwgMiAqIHBhY2tzX3Blcl9tcykgeworCQkJdG90YWxfcGFja3MgPSAyICogcGFja3NfcGVyX21zOworCQl9IGVsc2UgeworCQkJLyogYW5kIHdlIGRvbid0IHdhbnQgdG9vIGxvbmcgYSBxdWV1ZSBlaXRoZXIgKi8KKwkJCW1heHBhY2tzID0gbWF4KE1BWF9RVUVVRSAqIHBhY2tzX3Blcl9tcywgdXJiX3BhY2tzICogMik7CisJCQl0b3RhbF9wYWNrcyA9IG1pbih0b3RhbF9wYWNrcywgbWF4cGFja3MpOworCQl9CiAJfSBlbHNlIHsKIAkJdG90YWxfcGFja3MgPSBNQVhfVVJCUyAqIHVyYl9wYWNrczsKIAl9CkBAIC0xMTAyLDMxICsxMTA2LDExIEBACiAJCS8qIHRvbyBtdWNoLi4uICovCiAJCXN1YnMtPm51cmJzID0gTUFYX1VSQlM7CiAJCXRvdGFsX3BhY2tzID0gTUFYX1VSQlMgKiB1cmJfcGFja3M7Ci0JfQotCW4gPSB0b3RhbF9wYWNrczsKLQlmb3IgKGkgPSAwOyBpIDwgc3Vicy0+bnVyYnM7IGkrKykgewotCQlucGFja3NbaV0gPSBuID4gdXJiX3BhY2tzID8gdXJiX3BhY2tzIDogbjsKLQkJbiAtPSB1cmJfcGFja3M7Ci0JfQotCWlmIChzdWJzLT5udXJicyA8PSAxKSB7CisJfSBlbHNlIGlmIChzdWJzLT5udXJicyA8IDIpIHsKIAkJLyogdG9vIGxpdHRsZSAtIHdlIG5lZWQgYXQgbGVhc3QgdHdvIHBhY2tldHMKIAkJICogdG8gZW5zdXJlIGNvbnRpZ3VvdXMgcGxheWJhY2svY2FwdHVyZQogCQkgKi8KIAkJc3Vicy0+bnVyYnMgPSAyOwotCQlucGFja3NbMF0gPSAodG90YWxfcGFja3MgKyAxKSAvIDI7Ci0JCW5wYWNrc1sxXSA9IHRvdGFsX3BhY2tzIC0gbnBhY2tzWzBdOwotCX0gZWxzZSBpZiAobnBhY2tzW3N1YnMtPm51cmJzLTFdIDwgTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tcykgewotCQkvKiB0aGUgbGFzdCBwYWNrZXQgaXMgdG9vIHNtYWxsLi4gKi8KLQkJaWYgKHN1YnMtPm51cmJzID4gMikgewotCQkJLyogbWVyZ2UgdG8gdGhlIGZpcnN0IG9uZSAqLwotCQkJbnBhY2tzWzBdICs9IG5wYWNrc1tzdWJzLT5udXJicyAtIDFdOwotCQkJc3Vicy0+bnVyYnMtLTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRpdmlkZSB0byB0d28gKi8KLQkJCXN1YnMtPm51cmJzID0gMjsKLQkJCW5wYWNrc1swXSA9ICh0b3RhbF9wYWNrcyArIDEpIC8gMjsKLQkJCW5wYWNrc1sxXSA9IHRvdGFsX3BhY2tzIC0gbnBhY2tzWzBdOwotCQl9CiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGF0YSB1cmJzICovCkBAIC0xMTM0LDcgKzExMTgsOCBAQAogCQlzdHJ1Y3Qgc25kX3VyYl9jdHggKnUgPSAmc3Vicy0+ZGF0YXVyYltpXTsKIAkJdS0+aW5kZXggPSBpOwogCQl1LT5zdWJzID0gc3ViczsKLQkJdS0+cGFja2V0cyA9IG5wYWNrc1tpXTsKKwkJdS0+cGFja2V0cyA9IChpICsgMSkgKiB0b3RhbF9wYWNrcyAvIHN1YnMtPm51cmJzCisJCQktIGkgKiB0b3RhbF9wYWNrcyAvIHN1YnMtPm51cmJzOwogCQl1LT5idWZmZXJfc2l6ZSA9IG1heHNpemUgKiB1LT5wYWNrZXRzOwogCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVVNCX0ZPUk1BVF9UWVBFX0lJKQogCQkJdS0+cGFja2V0cysrOyAvKiBmb3IgdHJhbnNmZXIgZGVsaW1pdGVyICovCkBAIC0xMjkyLDE0ICsxMjc3LDE0IEBACiAJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKIAkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwIDB4JXhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgcmF0ZSwgZXApOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLAogCQkJCQkgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKIAkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JWQ6JWQ6IGNhbm5vdCBnZXQgZnJlcSBhdCBlcCAweCV4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBjYW5ub3QgZ2V0IGZyZXEgYXQgZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBlcCk7CiAJCQlyZXR1cm4gMDsgLyogc29tZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQgcmVhZGluZyAqLwogCQl9CkBAIC0xNDMxLDkgKzE0MTYsMTEgQEAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBmbXQ7CiAKICNpZiAwCi0JcHJpbnRrKCJzZXR0aW5nIGRvbmU6IGZvcm1hdCA9ICVkLCByYXRlID0gJWQuLiVkLCBjaGFubmVscyA9ICVkXG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJzZXR0aW5nIGRvbmU6IGZvcm1hdCA9ICVkLCByYXRlID0gJWQuLiVkLCBjaGFubmVscyA9ICVkXG4iLAogCSAgICAgICBmbXQtPmZvcm1hdCwgZm10LT5yYXRlX21pbiwgZm10LT5yYXRlX21heCwgZm10LT5jaGFubmVscyk7Ci0JcHJpbnRrKCIgIGRhdGFwaXBlID0gMHglMHgsIHN5bmNwaXBlID0gMHglMHhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgZGF0YXBpcGUgPSAweCUweCwgc3luY3BpcGUgPSAweCUweFxuIiwKIAkgICAgICAgc3Vicy0+ZGF0YXBpcGUsIHN1YnMtPnN5bmNwaXBlKTsKICNlbmRpZgogCkBAIC0xNDY4LDcgKzE0NTUsNyBAQAogCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcyk7CiAJZm10ID0gZmluZF9mb3JtYXQoc3VicywgZm9ybWF0LCByYXRlLCBjaGFubmVscyk7CiAJaWYgKCFmbXQpIHsKLQkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJjYW5ub3Qgc2V0IGZvcm1hdDogZm9ybWF0ID0gMHgleCwgcmF0ZSA9ICVkLCBjaGFubmVscyA9ICVkXG4iLAorCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAlI3gsIHJhdGUgPSAlZCwgY2hhbm5lbHMgPSAlZFxuIiwKIAkJCSAgIGZvcm1hdCwgcmF0ZSwgY2hhbm5lbHMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNzk1LDcgKzE3ODIsNyBAQAogCQkJaWYgKHJhdGVzW2YtPmZvcm1hdF0gJiYgcmF0ZXNbZi0+Zm9ybWF0XSAhPSBmLT5yYXRlcykKIAkJCQlnb3RvIF9fb3V0OwogCQl9Ci0JCWNoYW5uZWxzW2YtPmZvcm1hdF0gfD0gKDEgPDwgZi0+Y2hhbm5lbHMpOworCQljaGFubmVsc1tmLT5mb3JtYXRdIHw9IDEgPDwgKGYtPmNoYW5uZWxzIC0gMSk7CiAJCXJhdGVzW2YtPmZvcm1hdF0gfD0gZi0+cmF0ZXM7CiAJCS8qIG5lZWRzIGtub3Q/ICovCiAJCWlmIChmLT5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCkBAIC0xODIyLDcgKzE4MDksNyBAQAogCQkJY29udGludWU7CiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCQlpZiAoZi0+cmF0ZXMgJiAoMSA8PCBpKSkKLQkJCQljaGFubmVsc1tpXSB8PSAoMSA8PCBmLT5jaGFubmVscyk7CisJCQkJY2hhbm5lbHNbaV0gfD0gMSA8PCAoZi0+Y2hhbm5lbHMgLSAxKTsKIAkJfQogCX0KIAljbWFzdGVyID0gMDsKQEAgLTE5MTksNyArMTkwNiw3IEBACiAJICogaW4gdGhlIGN1cnJlbnQgY29kZSBhc3N1bWUgdGhlIDFtcyBwZXJpb2QuCiAJICovCiAJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUsCi0JCQkJICAgICAxMDAwICogTUlOX1BBQ0tTX1VSQiwKKwkJCQkgICAgIDEwMDAsCiAJCQkJICAgICAvKihucnBhY2tzICogTUFYX1VSQlMpICogMTAwMCovIFVJTlRfTUFYKTsKIAogCWVyciA9IGNoZWNrX2h3X3BhcmFtc19jb252ZW50aW9uKHN1YnMpOwpAQCAtMjE2MCw3ICsyMTQ3LDcgQEAKIAkJZnAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBhdWRpb2Zvcm1hdCwgbGlzdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgSW50ZXJmYWNlICVkXG4iLCBmcC0+aWZhY2UpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQWx0c2V0ICVkXG4iLCBmcC0+YWx0c2V0dGluZyk7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6IDB4JXhcbiIsIGZwLT5mb3JtYXQpOworCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRm9ybWF0OiAlI3hcbiIsIGZwLT5mb3JtYXQpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQ2hhbm5lbHM6ICVkXG4iLCBmcC0+Y2hhbm5lbHMpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLApAQCAtMjE4MCw3ICsyMTY3LDcgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJCX0KIAkJLy8gc25kX2lwcmludGYoYnVmZmVyLCAiICAgIE1heCBQYWNrZXQgU2l6ZSA9ICVkXG4iLCBmcC0+bWF4cGFja3NpemUpOwotCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgRVAgQXR0cmlidXRlID0gMHgleFxuIiwgZnAtPmF0dHJpYnV0ZXMpOworCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgRVAgQXR0cmlidXRlID0gJSN4XG4iLCBmcC0+YXR0cmlidXRlcyk7CiAJfQogfQogCkBAIC0yNjIxLDcgKzI2MDgsNyBAQAogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bmtub3duIGZvcm1hdCB0YWcgMHgleCBpcyBkZXRlY3RlZC4gIHByb2Nlc3NlZCBhcyBNUEVHLlxuIiwKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVkOiV1OiVkIDogdW5rbm93biBmb3JtYXQgdGFnICUjeCBpcyBkZXRlY3RlZC4gIHByb2Nlc3NlZCBhcyBNUEVHLlxuIiwKIAkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLCBmb3JtYXQpOwogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKQEAgLTI4MTksNyArMjgwNiw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQ6IGFkZCBhdWRpbyBlbmRwb2ludCAweCV4XG4iLCBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vLCBmcC0+ZW5kcG9pbnQpOworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiV1OiVkOiBhZGQgYXVkaW8gZW5kcG9pbnQgJSN4XG4iLCBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vLCBmcC0+ZW5kcG9pbnQpOwogCQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZShmcC0+cmF0ZV90YWJsZSk7CkBAIC0zNDY2LDEwICszNDUzLDEwIEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBjcmVhdGUgY2FyZCBpbnN0YW5jZSAlZFxuIiwgaWR4KTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNzY2LDcgKzM3NTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfdXNiX2F1ZGlvX2luaXQodm9pZCkKIHsKLQlpZiAobnJwYWNrcyA8IE1JTl9QQUNLU19VUkIgfHwgbnJwYWNrcyA+IE1BWF9QQUNLUykgeworCWlmIChucnBhY2tzIDwgMSB8fCBucnBhY2tzID4gTUFYX1BBQ0tTKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgbnJwYWNrcyB2YWx1ZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IDAwMzk3YzguLmVjYjU4ZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC02Niw2ICs2Niw3IEBACiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwMDApLCAwLCAxLCAyLCAxLCAgMTgsIDB4MDAxMyB9LCAvKiBFeHRpZ3kgICAgICAgKi8KIAl7IFVTQl9JRCgweDA0MWUsIDB4MzAyMCksIDIsIDEsIDYsIDYsICAxOCwgMHgwMDEzIH0sIC8qIEF1ZGlneSAyIE5YICAqLwogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogTGl2ZSEgMjQtYml0ICovCisJeyBVU0JfSUQoMHgwNDFlLCAweDMwNDgpLCAyLCAyLCA2LCA2LCAgMiwgIDB4NmU5MSB9LCAvKiBUb3NoaWJhIFNCMDUwMCAqLwogfTsKIAogc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgewpAQCAtNzgsNyArNzksNiBAQAogCiAJLyogU291bmQgQmxhc3RlciByZW1vdGUgY29udHJvbCBzdHVmZiAqLwogCWNvbnN0IHN0cnVjdCByY19jb25maWcgKnJjX2NmZzsKLQl1bnNpZ25lZCBsb25nIHJjX2h3ZGVwX29wZW47CiAJdTMyIHJjX2NvZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmNfd2FpdHE7CiAJc3RydWN0IHVyYiAqcmNfdXJiOwpAQCAtMTEwLDYgKzExMCw4IEBACiAJY29uc3Qgc3RydWN0IHVzYm1peF9zZWxlY3Rvcl9tYXAgKnNlbGVjdG9yX21hcDsKIH07CiAKKyNkZWZpbmUgTUFYX0NIQU5ORUxTCTEwCS8qIG1heCBsb2dpY2FsIGNoYW5uZWxzICovCisKIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvIHsKIAlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKm5leHRfaWRfZWxlbTsgLyogbGlzdCBvZiBjb250cm9scyB3aXRoIHNhbWUgaWQgKi8KQEAgLTEyMCw2ICsxMjIsOCBAQAogCWludCBjaGFubmVsczsKIAlpbnQgdmFsX3R5cGU7CiAJaW50IG1pbiwgbWF4LCByZXM7CisJaW50IGNhY2hlZDsKKwlpbnQgY2FjaGVfdmFsW01BWF9DSEFOTkVMU107CiAJdTggaW5pdGlhbGl6ZWQ7CiB9OwogCkBAIC0xODEsOCArMTg1LDYgQEAKIAlVU0JfUFJPQ19EQ1JfUkVMRUFTRSA9IDYsCiB9OwogCi0jZGVmaW5lIE1BWF9DSEFOTkVMUwkxMAkvKiBtYXggbG9naWNhbCBjaGFubmVscyAqLwotCiAKIC8qCiAgKiBtYW51YWwgbWFwcGluZyBvZiBtaXhlciBuYW1lcwpAQCAtMjE5LDcgKzIyMSwxMCBAQAogCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKIAkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiAhIHAtPm5hbWUgJiYKIAkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCS8vIHByaW50aygiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLCB1bml0aWQsIGNvbnRyb2wpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJpZ25vcmVkIGNvbnRyb2wgJWQ6JWRcbiIsCisJCQkgICAgICAgdW5pdGlkLCBjb250cm9sKTsKKwkJCSovCiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTM3NiwxMSArMzgxLDM1IEBACiB9CiAKIC8qIGNoYW5uZWwgPSAwOiBtYXN0ZXIsIDEgPSBmaXJzdCBjaGFubmVsICovCi1zdGF0aWMgaW5saW5lIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBnZXRfY3VyX21peF9yYXcoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsCisJCQkJICBpbnQgY2hhbm5lbCwgaW50ICp2YWx1ZSkKIHsKIAlyZXR1cm4gZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKIH0KIAorc3RhdGljIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKKwkJCSAgICAgaW50IGNoYW5uZWwsIGludCBpbmRleCwgaW50ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKGN2YWwtPmNhY2hlZCAmICgxIDw8IGNoYW5uZWwpKSB7CisJCSp2YWx1ZSA9IGN2YWwtPmNhY2hlX3ZhbFtpbmRleF07CisJCXJldHVybiAwOworCX0KKwllcnIgPSBnZXRfY3VyX21peF9yYXcoY3ZhbCwgY2hhbm5lbCwgdmFsdWUpOworCWlmIChlcnIgPCAwKSB7CisJCWlmICghY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yICIKKwkJCQkgICAiY29udHJvbCAlZCBjaCAlZDogZXJyID0gJWRcbiIsCisJCQkJICAgY3ZhbC0+Y29udHJvbCwgY2hhbm5lbCwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY3ZhbC0+Y2FjaGVkIHw9IDEgPDwgY2hhbm5lbDsKKwljdmFsLT5jYWNoZV92YWxbaW5kZXhdID0gKnZhbHVlOworCXJldHVybiAwOworfQorCisKIC8qCiAgKiBzZXQgYSBtaXhlciB2YWx1ZQogICovCkBAIC00MTIsOSArNDQxLDE3IEBACiAJcmV0dXJuIHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwgaW50IHZhbHVlKQorc3RhdGljIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsCisJCQkgICAgIGludCBpbmRleCwgaW50IHZhbHVlKQogewotCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOworCWludCBlcnI7CisJZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsCisJCQkgICAgdmFsdWUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWN2YWwtPmNhY2hlZCB8PSAxIDw8IGNoYW5uZWw7CisJY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XSA9IHZhbHVlOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNzE4LDcgKzc1NSw3IEBACiAJCWlmIChjdmFsLT5taW4gKyBjdmFsLT5yZXMgPCBjdmFsLT5tYXgpIHsKIAkJCWludCBsYXN0X3ZhbGlkX3JlcyA9IGN2YWwtPnJlczsKIAkJCWludCBzYXZlZCwgdGVzdCwgY2hlY2s7Ci0JCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZzYXZlZCk7CisJCQlnZXRfY3VyX21peF9yYXcoY3ZhbCwgbWluY2huLCAmc2F2ZWQpOwogCQkJZm9yICg7OykgewogCQkJCXRlc3QgPSBzYXZlZDsKIAkJCQlpZiAodGVzdCA8IGN2YWwtPm1heCkKQEAgLTcyNiw4ICs3NjMsOCBAQAogCQkJCWVsc2UKIAkJCQkJdGVzdCAtPSBjdmFsLT5yZXM7CiAJCQkJaWYgKHRlc3QgPCBjdmFsLT5taW4gfHwgdGVzdCA+IGN2YWwtPm1heCB8fAotCQkJCSAgICBzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHRlc3QpIHx8Ci0JCQkJICAgIGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgJmNoZWNrKSkgeworCQkJCSAgICBzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIDAsIHRlc3QpIHx8CisJCQkJICAgIGdldF9jdXJfbWl4X3JhdyhjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKIAkJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTczNSw3ICs3NzIsNyBAQAogCQkJCQlicmVhazsKIAkJCQljdmFsLT5yZXMgKj0gMjsKIAkJCX0KLQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgc2F2ZWQpOworCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAwLCBzYXZlZCk7CiAJCX0KIAogCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CkBAIC03NzUsMzUgKzgxMiwyNSBAQAogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKIAlpbnQgYywgY250LCB2YWwsIGVycjsKIAorCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwogCWlmIChjdmFsLT5jbWFzaykgewogCQljbnQgPSAwOwogCQlmb3IgKGMgPSAwOyBjIDwgTUFYX0NIQU5ORUxTOyBjKyspIHsKLQkJCWlmIChjdmFsLT5jbWFzayAmICgxIDw8IGMpKSB7Ci0JCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZ2YWwpOwotCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikgewotCQkJCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47Ci0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJfQotCQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgY2ggJWQ6IGVyciA9ICVkXG4iLCBjdmFsLT5jb250cm9sLCBjICsgMSwgZXJyKTsKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0JCQkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7Ci0JCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XSA9IHZhbDsKLQkJCQljbnQrKzsKLQkJCX0KKwkJCWlmICghKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgJnZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOworCQkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7CisJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdID0gdmFsOworCQkJY250Kys7CiAJCX0KKwkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJLyogbWFzdGVyIGNoYW5uZWwgKi8KLQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgJnZhbCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpIHsKLQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgY29udHJvbCAlZCBtYXN0ZXIgY2g6IGVyciA9ICVkXG4iLCBjdmFsLT5jb250cm9sLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCAmdmFsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOwogCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWw7CiAJfQpAQCAtODIwLDM0ICs4NDcsMjggQEAKIAlpZiAoY3ZhbC0+Y21hc2spIHsKIAkJY250ID0gMDsKIAkJZm9yIChjID0gMDsgYyA8IE1BWF9DSEFOTkVMUzsgYysrKSB7Ci0JCQlpZiAoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkgewotCQkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmb3ZhbCk7Ci0JCQkJaWYgKGVyciA8IDApIHsKLQkJCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCQkJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF07Ci0JCQkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOwotCQkJCWlmIChvdmFsICE9IHZhbCkgewotCQkJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgdmFsKTsKLQkJCQkJY2hhbmdlZCA9IDE7Ci0JCQkJfQotCQkJCWdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmdmFsKTsKLQkJCQljbnQrKzsKKwkJCWlmICghKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgJm92YWwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKKwkJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF07CisJCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7CisJCQlpZiAob3ZhbCAhPSB2YWwpIHsKKwkJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCB2YWwpOworCQkJCWNoYW5nZWQgPSAxOwogCQkJfQorCQkJY250Kys7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBtYXN0ZXIgY2hhbm5lbCAqLwotCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAmb3ZhbCk7Ci0JCWlmIChlcnIgPCAwICYmIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQotCQkJcmV0dXJuIDA7CisJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsICZvdmFsKTsKIAkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKIAkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKIAkJaWYgKHZhbCAhPSBvdmFsKSB7Ci0JCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCB2YWwpOworCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgdmFsKTsKIAkJCWNoYW5nZWQgPSAxOwogCQl9CiAJfQpAQCAtMTcwNiw3ICsxNzI3LDggQEAKIAkJYnJlYWs7CiAJLyogbGl2ZTI0ZXh0OiA0ID0gbGluZS1pbiBqYWNrICovCiAJY2FzZSAzOgkvKiBocC1vdXQgamFjayAobWF5IGFjdHVhdGUgTXV0ZSkgKi8KLQkJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwkJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKQogCQkJc25kX3VzYl9taXhlcl9ub3RpZnlfaWQobWl4ZXIsIG1peGVyLT5yY19jZmctPm11dGVfbWl4ZXJfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTc5NywyNCArMTgxOSw2IEBACiAJd2FrZV91cCgmbWl4ZXItPnJjX3dhaXRxKTsKIH0KIAotc3RhdGljIGludCBzbmRfdXNiX3NicmNfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gaHctPnByaXZhdGVfZGF0YTsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZtaXhlci0+cmNfaHdkZXBfb3BlbikpCi0JCXJldHVybiAtRUJVU1k7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VzYl9zYnJjX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IGh3LT5wcml2YXRlX2RhdGE7Ci0KLQljbGVhcl9iaXQoMCwgJm1peGVyLT5yY19od2RlcF9vcGVuKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgbG9uZyBzbmRfdXNiX3NicmNfaHdkZXBfcmVhZChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewpAQCAtMTg2Nyw5ICsxODcxLDggQEAKIAlod2RlcC0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9TQl9SQzsKIAlod2RlcC0+cHJpdmF0ZV9kYXRhID0gbWl4ZXI7CiAJaHdkZXAtPm9wcy5yZWFkID0gc25kX3VzYl9zYnJjX2h3ZGVwX3JlYWQ7Ci0JaHdkZXAtPm9wcy5vcGVuID0gc25kX3VzYl9zYnJjX2h3ZGVwX29wZW47Ci0JaHdkZXAtPm9wcy5yZWxlYXNlID0gc25kX3VzYl9zYnJjX2h3ZGVwX3JlbGVhc2U7CiAJaHdkZXAtPm9wcy5wb2xsID0gc25kX3VzYl9zYnJjX2h3ZGVwX3BvbGw7CisJaHdkZXAtPmV4Y2x1c2l2ZSA9IDE7CiAKIAltaXhlci0+cmNfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1peGVyLT5yY191cmIpCkBAIC0xOTU2LDggKzE5NTksOSBAQAogCWludCBpLCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzbmRfYXVkaWd5Mm54X2NvbnRyb2xzKTsgKytpKSB7Ci0JCWlmIChpID4gMSAmJiAgLyogTGl2ZTI0ZXh0IGhhcyAyIExFRHMgb25seSAqLwotCQkJbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCQlpZiAoaSA+IDEgJiYgLyogTGl2ZTI0ZXh0IGhhcyAyIExFRHMgb25seSAqLworCQkJKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkJIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkpCiAJCQlicmVhazsgCiAJCWVyciA9IHNuZF9jdGxfYWRkKG1peGVyLT5jaGlwLT5jYXJkLAogCQkJCSAgc25kX2N0bF9uZXcxKCZzbmRfYXVkaWd5Mm54X2NvbnRyb2xzW2ldLCBtaXhlcikpOwpAQCAtMTk5NCw3ICsxOTk4LDggQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICIlcyBqYWNrc1xuXG4iLCBtaXhlci0+Y2hpcC0+Y2FyZC0+c2hvcnRuYW1lKTsKIAlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApKQogCQlqYWNrcyA9IGphY2tzX2F1ZGlneTJueDsKLQllbHNlIGlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJZWxzZSBpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpCiAJCWphY2tzID0gamFja3NfbGl2ZTI0ZXh0OwogCWVsc2UKIAkJcmV0dXJuOwpAQCAtMjA0NCw3ICsyMDQ5LDggQEAKIAkJZ290byBfZXJyb3I7CiAKIAlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApIHx8Ci0JICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkgeworCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSB7CiAJCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CiAKIAkJaWYgKChlcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcikpIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCmluZGV4IGQ3NTViZTAuLjNlNWQ2NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwpAQCAtMjYxLDYgKzI2MSwyMiBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIHNjcmF0Y2hfbGl2ZV9tYXBbXSA9IHsKKwkvKiAxOiBJVCBMaW5lIDEgKFVTQiBzdHJlYW1pbmcpICovCisJLyogMjogT1QgTGluZSAxIChTcGVha2VyKSAqLworCS8qIDM6IElUIExpbmUgMSAoTGluZSBjb25uZWN0b3IpICovCisJeyA0LCAiTGluZSAxIEluIiB9LCAvKiBGVSAqLworCS8qIDU6IE9UIExpbmUgMSAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiA2OiBJVCBMaW5lIDIgKFVTQiBzdHJlYW1pbmcpICovCisJLyogNzogT1QgTGluZSAyIChTcGVha2VyKSAqLworCS8qIDg6IElUIExpbmUgMiAoTGluZSBjb25uZWN0b3IpICovCisJeyA5LCAiTGluZSAyIEluIiB9LCAvKiBGVSAqLworCS8qIDEwOiBPVCBMaW5lIDIgKFVTQiBzdHJlYW1pbmcpICovCisJLyogMTE6IElUIE1pYyAoTGluZSBjb25uZWN0b3IpICovCisJLyogMTI6IE9UIE1pYyAoVVNCIHN0cmVhbWluZykgKi8KKwl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCit9OworCiAvKgogICogQ29udHJvbCBtYXAgZW50cmllcwogICovCkBAIC0yODUsNiArMzAxLDExIEBACiAJCS5tYXAgPSBsaXZlMjRleHRfbWFwLAogCX0sCiAJeworCQkuaWQgPSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpLAorCQkubWFwID0gYXVkaWd5Mm54X21hcCwKKwkJLnNlbGVjdG9yX21hcCA9IGF1ZGlneTJueF9zZWxlY3RvcnMsCisJfSwKKwl7CiAJCS8qIEhlcmN1bGVzIERKIENvbnNvbGUgKFdpbmRvd3MgRWRpdGlvbikgKi8KIAkJLmlkID0gVVNCX0lEKDB4MDZmOCwgMHhiMDAwKSwKIAkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLApAQCAtMzExLDYgKzMzMiwxMSBAQAogCQkuaWQgPSBVU0JfSUQoMHgwY2NkLCAweDAwMjgpLAogCQkubWFwID0gYXVyZW9uXzUxXzJfbWFwLAogCX0sCisJeworCQkuaWQgPSBVU0JfSUQoMHgxM2U1LCAweDAwMDEpLAorCQkubWFwID0gc2NyYXRjaF9saXZlX21hcCwKKwkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLAorCX0sCiAJeyAwIH0gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IDVkOGVmMDkuLjY0N2VmNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JxdWlya3MuaAorKysgYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKQEAgLTM5LDYgKzM5LDE2IEBACiAJLmlkUHJvZHVjdCA9IHByb2QsIFwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDCiAKKy8qIENyZWF0aXZlL1Rvc2hpYmEgTXVsdGltZWRpYSBDZW50ZXIgU0ItMDUwMCAqLworeworCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwNDgpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiVG9zaGliYSIsCisJCS5wcm9kdWN0X25hbWUgPSAiU0ItMDUwMCIsCisJCS5pZm51bSA9IFFVSVJLX05PX0lOVEVSRkFDRQorCX0KK30sCisKIC8qIENyZWF0aXZlL0UtTXUgZGV2aWNlcyAqLwogewogCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwMTApLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCmluZGV4IDczZTU5ZjQuLjk4Mjc2YWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKQEAgLTQ3OCwxOSArNDc4LDIxIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnVzeDJ5X2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVzeDJ5X2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCiAJZm9yIChkZXYgPSAwOyBkZXYgPCBTTkRSVl9DQVJEUzsgKytkZXYpCiAJCWlmIChlbmFibGVbZGV2XSAmJiAhc25kX3VzMTIybF9jYXJkX3VzZWRbZGV2XSkKIAkJCWJyZWFrOwogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCB1czEyMmwpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzMTIybCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfdXMxMjJsX2NhcmRfdXNlZFtVUzEyMkwoY2FyZCktPmNoaXAuaW5kZXggPSBkZXZdID0gMTsKIAogCVVTMTIyTChjYXJkKS0+Y2hpcC5kZXYgPSBkZXZpY2U7CkBAIC01MDksNDYgKzUxMSw1NyBAQAogCQlVUzEyMkwoY2FyZCktPmNoaXAuZGV2LT5kZXZudW0KIAkJKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKnVzMTIybF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkKQorc3RhdGljIGludCB1czEyMmxfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQsCisJCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gdXN4MnlfY3JlYXRlX2NhcmQoZGV2aWNlKTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gdXN4MnlfY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKLQlpZiAoIXVzMTIybF9jcmVhdGVfY2FyZChjYXJkKSB8fAotCSAgICBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSA8IDApIHsKKwlpZiAoIXVzMTIybF9jcmVhdGVfY2FyZChjYXJkKSkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAl1c2JfZ2V0X2RldihkZXZpY2UpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3VzMTIybF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHIiVwOiVpXG4iLAogCQkgICAgaW50ZiwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMSkKIAkJcmV0dXJuIDA7CiAKLQljYXJkID0gdXMxMjJsX3VzYl9wcm9iZSh1c2JfZ2V0X2ludGYoaW50ZiksIGlkKTsKLQotCWlmIChjYXJkKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7Ci0JCXJldHVybiAwOworCWVyciA9IHVzMTIybF91c2JfcHJvYmUodXNiX2dldF9pbnRmKGludGYpLCBpZCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXVzYl9wdXRfaW50ZihpbnRmKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQl1c2JfcHV0X2ludGYoaW50Zik7Ci0JcmV0dXJuIC1FSU87CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3VzMTIybF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKaW5kZXggMTU1OGE1Yy4uNGFmODc0MCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCkBAIC0zMCw5ICszMCw2IEBACiAjaW5jbHVkZSAidXNidXN4MnkuaCIKICNpbmNsdWRlICJ1c1gyWWh3ZGVwLmgiCiAKLWludCB1c1gyWV9od2RlcF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7Ci0KLQogc3RhdGljIGludCBzbmRfdXM0MjhjdGxzX3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSwKIAkJCQkgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewpAQCAtMTA2LDE2ICsxMDMsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC0yNjcsOCArMjU0LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1VTWDJZOwogCWh3LT5wcml2YXRlX2RhdGEgPSB1c1gyWShjYXJkKTsKLQlody0+b3BzLm9wZW4gPSBzbmRfdXNYMllfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfdXNYMllfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSBzbmRfdXNYMllfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gc25kX3VzWDJZX2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5vcHMubW1hcCA9IHNuZF91czQyOGN0bHNfbW1hcDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCmluZGV4IDcwYjk2MzUuLjI0MzkzZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJCXMtPmlkbGVfaW5zaXplIC09IG1heF9kaWZmIC0gbWF4X2RpZmZfMDsKIAkJcy0+aWRsZV9pbnNpemUgKz0gdXJiX3NpemUgLSBzLT5wZXJpb2Rfc2l6ZTsKIAkJaWYgKHMtPmlkbGVfaW5zaXplIDwgMCkgewotCQkJc25kX3ByaW50aygiJWkgJWkgJWlcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWkgJWkgJWlcbiIsCiAJCQkJICAgcy0+aWRsZV9pbnNpemUsIHVyYl9zaXplLCBzLT5wZXJpb2Rfc2l6ZSk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAocy0+aWRsZV9pbnNpemUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwppbmRleCAxMTYzOWJkLi41Y2UwZGEyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwpAQCAtMjI3LDkgKzIyNyw5IEBACiAJCiAJaWYgKHVzWDJZLT5VUzA0KSB7CiAJCWlmICgwID09IHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQpCi0JCQlkbworCQkJZG8gewogCQkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVzWDJZLT5VUzA0LT51cmJbdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCsrXSwgR0ZQX0FUT01JQyk7Ci0JCQl3aGlsZSAoIWVyciAmJiB1c1gyWS0+VVMwNC0+c3VibWl0dGVkIDwgdXNYMlktPlVTMDQtPmxlbik7CisJCQl9IHdoaWxlICghZXJyICYmIHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQgPCB1c1gyWS0+VVMwNC0+bGVuKTsKIAl9IGVsc2UKIAkJaWYgKHVzNDI4Y3RscyAmJiB1czQyOGN0bHMtPnA0b3V0TGFzdCA+PSAwICYmIHVzNDI4Y3Rscy0+cDRvdXRMYXN0IDwgTl91czQyOF9wNG91dF9CVUZTKSB7CiAJCQlpZiAodXM0MjhjdGxzLT5wNG91dExhc3QgIT0gdXM0MjhjdGxzLT5wNG91dFNlbnQpIHsKQEAgLTMzMywxOCArMzMzLDIxIEBACiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnVzWDJZX2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVzWDJZX2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqCWNhcmQ7CisJaW50IGVycjsKKwogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7ICsrZGV2KQogCQlpZiAoZW5hYmxlW2Rldl0gJiYgIXNuZF91c1gyWV9jYXJkX3VzZWRbZGV2XSkKIAkJCWJyZWFrOwogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgdXNYMllkZXYpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzWDJZZGV2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF91c1gyWV9jYXJkX3VzZWRbdXNYMlkoY2FyZCktPmNoaXAuaW5kZXggPSBkZXZdID0gMTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfdXNYMllfY2FyZF9wcml2YXRlX2ZyZWU7CiAJdXNYMlkoY2FyZCktPmNoaXAuZGV2ID0gZGV2aWNlOwpAQCAtMzYyLDI2ICszNjUsMzYgQEAKIAkJdXNYMlkoY2FyZCktPmNoaXAuZGV2LT5idXMtPmJ1c251bSwgdXNYMlkoY2FyZCktPmNoaXAuZGV2LT5kZXZudW0KIAkJKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgdm9pZCAqdXNYMllfdXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkKQorc3RhdGljIGludCB1c1gyWV91c2JfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCwKKwkJCSAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqCWNhcmQ7CisKKwkqY2FyZHAgPSBOVUxMOwogCWlmIChsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IDB4MTYwNCB8fAogCSAgICAobGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTMTIyICYmCiAJICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVMyMjQgJiYKLQkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzQyOCkgfHwKLQkgICAgIShjYXJkID0gdXNYMllfY3JlYXRlX2NhcmQoZGV2aWNlKSkpCi0JCXJldHVybiBOVUxMOworCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTNDI4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSB1c1gyWV9jcmVhdGVfY2FyZChkZXZpY2UsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHVzWDJZX2h3ZGVwX25ldyhjYXJkLCBkZXZpY2UpKSA8IDAgIHx8CiAJICAgIChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzg5LDEzICs0MDIsMTQgQEAKICAqLwogc3RhdGljIGludCBzbmRfdXNYMllfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQl2b2lkICpjaGlwOwotCWNoaXAgPSB1c1gyWV91c2JfcHJvYmUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgaW50ZiwgaWQpOwotCWlmIChjaGlwKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2hpcCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gLUVJTzsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKworCWVyciA9IHVzWDJZX3VzYl9wcm9iZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmLCBpZCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWRldl9zZXRfZHJ2ZGF0YSgmaW50Zi0+ZGV2LCBjYXJkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3VzWDJZX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaAppbmRleCBjMzM4MmZkLi45YzRmYjg0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKQEAgLTE4LDMgKzE4LDUgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBjYXB0dXJlZF9pc29fZnJhbWVzOwogCWludCBjYXB0dXJlX2lzb19zdGFydDsKIH07CisKK2ludCB1c1gyWV9od2RlcF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CmRpZmYgLS1naXQgYS91c3IvS2NvbmZpZyBiL3Vzci9LY29uZmlnCmluZGV4IDg2Y2VjYjUuLjQzYTNhMGYgMTAwNjQ0Ci0tLSBhL3Vzci9LY29uZmlnCisrKyBiL3Vzci9LY29uZmlnCkBAIC00NCwzICs0NCw5MiBAQAogCSAgb3duZWQgYnkgZ3JvdXAgcm9vdCBpbiB0aGUgaW5pdGlhbCByYW1kaXNrIGltYWdlLgogCiAJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBsZWF2ZSBpdCBzZXQgdG8gIjAiLgorCitjb25maWcgUkRfR1pJUAorCWJvb2wgIkluaXRpYWwgcmFtZGlzayBjb21wcmVzc2VkIHVzaW5nIGd6aXAiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRD15CisJc2VsZWN0IERFQ09NUFJFU1NfR1pJUAorCWhlbHAKKwkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGd6aXAgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIuCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgUkRfQlpJUDIKKwlib29sICJJbml0aWFsIHJhbWRpc2sgY29tcHJlc3NlZCB1c2luZyBiemlwMiIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJEPXkKKwlzZWxlY3QgREVDT01QUkVTU19CWklQMgorCWhlbHAKKwkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGJ6aXAyIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgUkRfTFpNQQorCWJvb2wgIkluaXRpYWwgcmFtZGlzayBjb21wcmVzc2VkIHVzaW5nIGx6bWEiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRD15CisJc2VsZWN0IERFQ09NUFJFU1NfTFpNQQorCWhlbHAKKwkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIGx6bWEgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2Nob2ljZQorCXByb21wdCAiQnVpbHQtaW4gaW5pdHJhbWZzIGNvbXByZXNzaW9uIG1vZGUiCisJaGVscAorCSAgVGhpcyBzZXR0aW5nIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiB0aGUgSU5JVFJBTUZTX1NPVVJDRSBpcworCSAgc2V0LiBJdCBkZWNpZGVzIGJ5IHdoaWNoIGFsZ29yaXRobSB0aGUgSU5JVFJBTUZTX1NPVVJDRSB3aWxsCisJICBiZSBjb21wcmVzc2VkLgorCSAgU2V2ZXJhbCBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRpZmZlcgorCSAgaW4gZWZmaWNpZW5jeSwgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQuCisJICBDb21wcmVzc2lvbiBzcGVlZCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gYnVpbGRpbmcgYSBrZXJuZWwuCisJICBEZWNvbXByZXNzaW9uIHNwZWVkIGlzIHJlbGV2YW50IGF0IGVhY2ggYm9vdC4KKworCSAgSWYgeW91IGhhdmUgYW55IHByb2JsZW1zIHdpdGggYnppcDIgb3IgbHptYSBjb21wcmVzc2VkCisJICBpbml0cmFtZnMsIG1haWwgbWUgKEFsYWluIEtuYWZmKSA8YWxhaW5Aa25hZmYubHU+LgorCisJICBIaWdoIGNvbXByZXNzaW9uIG9wdGlvbnMgYXJlIG1vc3RseSB1c2VmdWwgZm9yIHVzZXJzIHdobworCSAgYXJlIGxvdyBvbiBkaXNrIHNwYWNlIChlbWJlZGRlZCBzeXN0ZW1zKSwgYnV0IGZvciB3aG9tIHJhbQorCSAgc2l6ZSBtYXR0ZXJzIGxlc3MuCisKKwkgIElmIGluIGRvdWJ0LCBzZWxlY3QgJ2d6aXAnCisKK2NvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORQorCWJvb2wgIk5vbmUiCisJaGVscAorCSAgRG8gbm90IGNvbXByZXNzIHRoZSBidWlsdC1pbiBpbml0cmFtZnMgYXQgYWxsLiBUaGlzIG1heQorCSAgc291bmQgd2FzdGVmdWwgaW4gc3BhY2UsIGJ1dCwgeW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IHRoZQorCSAgYnVpbHQtaW4gaW5pdHJhbWZzIHdpbGwgYmUgY29tcHJlc3NlZCBhdCBhIGxhdGVyIHN0YWdlCisJICBhbnl3YXlzIGFsb25nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgb24gdGhvc2UKKwkgIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IHRoaXMuCisJICBIb3dldmVyLCBub3QgY29tcHJlc3NpbmcgdGhlIGluaXRyYW1mcyBtYXkgbGVhZCB0byBzbGlnaHRseQorCSAgaGlnaGVyIG1lbW9yeSBjb25zdW1wdGlvbiBkdXJpbmcgYSBzaG9ydCB0aW1lIGF0IGJvb3QsIHdoaWxlCisJICBib3RoIHRoZSBjcGlvIGltYWdlIGFuZCB0aGUgdW5wYWNrZWQgZmlsZXN5c3RlbSBpbWFnZSB3aWxsCisJICBiZSBwcmVzZW50IGluIG1lbW9yeSBzaW11bHRhbmVvdXNseQorCitjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVAKKwlib29sICJHemlwIgorCWRlcGVuZHMgb24gUkRfR1pJUAorCWhlbHAKKwkgIFRoZSBvbGQgYW5kIHRyaWVkIGd6aXAgY29tcHJlc3Npb24uIEl0cyBjb21wcmVzc2lvbiByYXRpbyBpcworCSAgdGhlIHBvb3Jlc3QgYW1vbmcgdGhlIDMgY2hvaWNlczsgaG93ZXZlciBpdHMgc3BlZWQgKGJvdGgKKwkgIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uKSBpcyB0aGUgZmFzdGVzdC4KKworY29uZmlnIElOSVRSQU1GU19DT01QUkVTU0lPTl9CWklQMgorCWJvb2wgIkJ6aXAyIgorCWRlcGVuZHMgb24gUkRfQlpJUDIKKwloZWxwCisJICBJdHMgY29tcHJlc3Npb24gcmF0aW8gYW5kIHNwZWVkIGlzIGludGVybWVkaWF0ZS4KKwkgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgc2xvd2VzdCBhbW9uZyB0aGUgdGhyZWUuICBUaGUgaW5pdHJhbWZzCisJICBzaXplIGlzIGFib3V0IDEwJSBzbWFsbGVyIHdpdGggYnppcDIsIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KKwkgIEJ6aXAyIHVzZXMgYSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5LiBGb3IgbW9kZXJuIGtlcm5lbHMgeW91CisJICB3aWxsIG5lZWQgYXQgbGVhc3QgOE1CIFJBTSBvciBtb3JlIGZvciBib290aW5nLgorCitjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEKKwlib29sICJMWk1BIgorCWRlcGVuZHMgb24gUkRfTFpNQQorCWhlbHAKKwkgIFRoZSBtb3N0IHJlY2VudCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCisJICBJdHMgcmF0aW8gaXMgYmVzdCwgZGVjb21wcmVzc2lvbiBzcGVlZCBpcyBiZXR3ZWVuIHRoZSBvdGhlcgorCSAgdHdvLiBDb21wcmVzc2lvbiBpcyBzbG93ZXN0LglUaGUgaW5pdHJhbWZzIHNpemUgaXMgYWJvdXQgMzMlCisJICBzbWFsbGVyIHdpdGggTFpNQSBpbiBjb21wYXJpc29uIHRvIGd6aXAuCisKK2VuZGNob2ljZQpkaWZmIC0tZ2l0IGEvdXNyL01ha2VmaWxlIGIvdXNyL01ha2VmaWxlCmluZGV4IDIwMWYyN2YuLmI4NDg5NGIgMTAwNjQ0Ci0tLSBhL3Vzci9NYWtlZmlsZQorKysgYi91c3IvTWFrZWZpbGUKQEAgLTYsMTMgKzYsMjUgQEAKIFBIT05ZICs9IGtsaWJjZGlycwogCiAKLSMgR2VuZXJhdGUgYnVpbHRpbi5vIGJhc2VkIG9uIGluaXRyYW1mc19kYXRhLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0lOSVRSRCkgOj0gaW5pdHJhbWZzX2RhdGEubworIyBObyBjb21wcmVzc2lvbgorc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FKSAgID0KIAotIyBpbml0cmFtZnNfZGF0YS5vIGNvbnRhaW5zIHRoZSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IGltYWdlLgorIyBHemlwLCBidXQgbm8gYnppcDIKK3N1ZmZpeF8kKENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUCkgICA9IC5negorCisjIEJ6aXAyCitzdWZmaXhfJChDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyKSAgPSAuYnoyCisKKyMgTHptYQorc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BKSAgID0gLmx6bWEKKworIyBHZW5lcmF0ZSBidWlsdGluLm8gYmFzZWQgb24gaW5pdHJhbWZzX2RhdGEubworb2JqLSQoQ09ORklHX0JMS19ERVZfSU5JVFJEKSA6PSBpbml0cmFtZnNfZGF0YSQoc3VmZml4X3kpLm8KKworIyBpbml0cmFtZnNfZGF0YS5vIGNvbnRhaW5zIHRoZSBjb21wcmVzc2VkIGluaXRyYW1mc19kYXRhLmNwaW8gaW1hZ2UuCiAjIFRoZSBpbWFnZSBpcyBpbmNsdWRlZCB1c2luZyAuaW5jYmluLCBhIGRlcGVuZGVuY3kgd2hpY2ggaXMgbm90CiAjIHRyYWNrZWQgYXV0b21hdGljYWxseS4KLSQob2JqKS9pbml0cmFtZnNfZGF0YS5vOiAkKG9iaikvaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBGT1JDRQorJChvYmopL2luaXRyYW1mc19kYXRhJChzdWZmaXhfeSkubzogJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8kKHN1ZmZpeF95KSBGT1JDRQogCiAjIyMjIwogIyBHZW5lcmF0ZSB0aGUgaW5pdHJhbWZzIGNwaW8gYXJjaGl2ZQpAQCAtMjUsMjggKzM3LDI4IEBACiAgICAgICAgICQoaWYgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEKSwgLXUgJChDT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEKSkgXAogICAgICAgICAkKGlmICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCksIC1nICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCkpCiAKLSMgLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFsbCBmaWxlcyBpbmNsdWRlZAorIyAuaW5pdHJhbWZzX2RhdGEuY3Bpby5kIGlzIHVzZWQgdG8gaWRlbnRpZnkgYWxsIGZpbGVzIGluY2x1ZGVkCiAjIGluIGluaXRyYW1mcyBhbmQgdG8gZGV0ZWN0IGlmIGFueSBmaWxlcyBhcmUgYWRkZWQvcmVtb3ZlZC4KICMgUmVtb3ZlZCBmaWxlcyBhcmUgaWRlbnRpZmllZCBieSBkaXJlY3RvcnkgdGltZXN0YW1wIGJlaW5nIHVwZGF0ZWQKICMgVGhlIGRlcGVuZGVuY3kgbGlzdCBpcyBnZW5lcmF0ZWQgYnkgZ2VuX2luaXRyYW1mcy5zaCAtbAotaWZuZXEgKCQod2lsZGNhcmQgJChvYmopLy5pbml0cmFtZnNfZGF0YS5jcGlvLmd6LmQpLCkKLQlpbmNsdWRlICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kCitpZm5lcSAoJCh3aWxkY2FyZCAkKG9iaikvLmluaXRyYW1mc19kYXRhLmNwaW8uZCksKQorCWluY2x1ZGUgJChvYmopLy5pbml0cmFtZnNfZGF0YS5jcGlvLmQKIGVuZGlmCiAKIHF1aWV0X2NtZF9pbml0ZnMgPSBHRU4gICAgICRACiAgICAgICBjbWRfaW5pdGZzID0gJChpbml0cmFtZnMpIC1vICRAICQocmFtZnMtYXJncykgJChyYW1mcy1pbnB1dCkKIAotdGFyZ2V0cyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6Cit0YXJnZXRzIDo9IGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaW5pdHJhbWZzX2RhdGEuY3Bpby5iejIgaW5pdHJhbWZzX2RhdGEuY3Bpby5sem1hIGluaXRyYW1mc19kYXRhLmNwaW8KICMgZG8gbm90IHRyeSB0byB1cGRhdGUgZmlsZXMgaW5jbHVkZWQgaW4gaW5pdHJhbWZzCiAkKGRlcHNfaW5pdHJhbWZzKTogOwogCiAkKGRlcHNfaW5pdHJhbWZzKToga2xpYmNkaXJzCi0jIFdlIHJlYnVpbGQgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpZjoKLSMgMSkgQW55IGluY2x1ZGVkIGZpbGUgaXMgbmV3ZXIgdGhlbiBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CisjIFdlIHJlYnVpbGQgaW5pdHJhbWZzX2RhdGEuY3BpbyBpZjoKKyMgMSkgQW55IGluY2x1ZGVkIGZpbGUgaXMgbmV3ZXIgdGhlbiBpbml0cmFtZnNfZGF0YS5jcGlvCiAjIDIpIFRoZXJlIGFyZSBjaGFuZ2VzIGluIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZCAoYWRkZWQgb3IgZGVsZXRlZCkKLSMgMykgSWYgZ2VuX2luaXRfY3BpbyBhcmUgbmV3ZXIgdGhhbiBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CisjIDMpIElmIGdlbl9pbml0X2NwaW8gYXJlIG5ld2VyIHRoYW4gaW5pdHJhbWZzX2RhdGEuY3BpbwogIyA0KSBhcmd1bWVudHMgdG8gZ2VuX2luaXRyYW1mcy5zaCBjaGFuZ2VzCi0kKG9iaikvaW5pdHJhbWZzX2RhdGEuY3Bpby5nejogJChvYmopL2dlbl9pbml0X2NwaW8gJChkZXBzX2luaXRyYW1mcykga2xpYmNkaXJzCi0JJChRKSQoaW5pdHJhbWZzKSAtbCAkKHJhbWZzLWlucHV0KSA+ICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kCiskKG9iaikvaW5pdHJhbWZzX2RhdGEuY3BpbyQoc3VmZml4X3kpOiAkKG9iaikvZ2VuX2luaXRfY3BpbyAkKGRlcHNfaW5pdHJhbWZzKSBrbGliY2RpcnMKKwkkKFEpJChpbml0cmFtZnMpIC1sICQocmFtZnMtaW5wdXQpID4gJChvYmopLy5pbml0cmFtZnNfZGF0YS5jcGlvLmQKIAkkKGNhbGwgaWZfY2hhbmdlZCxpbml0ZnMpCiAKZGlmZiAtLWdpdCBhL3Vzci9pbml0cmFtZnNfZGF0YS5TIGIvdXNyL2luaXRyYW1mc19kYXRhLlMKaW5kZXggYzJlMWFkNC4uN2M2OTczZCAxMDA2NDQKLS0tIGEvdXNyL2luaXRyYW1mc19kYXRhLlMKKysrIGIvdXNyL2luaXRyYW1mc19kYXRhLlMKQEAgLTI2LDUgKzI2LDUgQEAKICovCiAKIC5zZWN0aW9uIC5pbml0LnJhbWZzLCJhIgotLmluY2JpbiAidXNyL2luaXRyYW1mc19kYXRhLmNwaW8uZ3oiCisuaW5jYmluICJ1c3IvaW5pdHJhbWZzX2RhdGEuY3BpbyIKIApkaWZmIC0tZ2l0IGEvdXNyL2luaXRyYW1mc19kYXRhLmJ6Mi5TIGIvdXNyL2luaXRyYW1mc19kYXRhLmJ6Mi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTRkMDkKLS0tIC9kZXYvbnVsbAorKysgYi91c3IvaW5pdHJhbWZzX2RhdGEuYnoyLlMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAgaW5pdHJhbWZzX2RhdGEgaW5jbHVkZXMgdGhlIGNvbXByZXNzZWQgYmluYXJ5IHRoYXQgaXMgdGhlCisgIGZpbGVzeXN0ZW0gdXNlZCBmb3IgZWFybHkgdXNlciBzcGFjZS4KKyAgTm90ZTogT2xkZXIgdmVyc2lvbnMgb2YgImFzIiAocHJpb3IgdG8gYmludXRpbHMgMi4xMS45MC4wLjIzCisgIHJlbGVhc2VkIG9uIDIwMDEtMDctMTQpIGRpdCBub3Qgc3VwcG9ydCAuaW5jYmluLgorICBJZiB5b3UgYXJlIGZvcmNlZCB0byB1c2Ugb2xkZXIgYmludXRpbHMgdGhhbiB0aGF0IHRoZW4gdGhlCisgIGZvbGxvd2luZyB0cmljayBjYW4gYmUgYXBwbGllZCB0byBjcmVhdGUgdGhlIHJlc3VsdGluZyBiaW5hcnk6CisKKworICBsZCAtbSBlbGZfaTM4NiAgLS1mb3JtYXQgYmluYXJ5IC0tb2Zvcm1hdCBlbGYzMi1pMzg2IC1yIFwKKyAgLVQgaW5pdHJhbWZzX2RhdGEuc2NyIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogLW8gaW5pdHJhbWZzX2RhdGEubworICAgbGQgLW0gZWxmX2kzODYgIC1yIC1vIGJ1aWx0LWluLm8gaW5pdHJhbWZzX2RhdGEubworCisgIGluaXRyYW1mc19kYXRhLnNjciBsb29rcyBsaWtlIHRoaXM6CitTRUNUSU9OUworeworICAgICAgIC5pbml0LnJhbWZzIDogeyAqKC5kYXRhKSB9Cit9CisKKyAgVGhlIGFib3ZlIGV4YW1wbGUgaXMgZm9yIGkzODYgLSB0aGUgcGFyYW1ldGVycyB2YXJ5IGZyb20gYXJjaGl0ZWN0dXJlcy4KKyAgRXZlbnR1YWxseSBsb29rIHVwIExERkxBR1NfQkxPQiBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZQorICBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgdG8gc2VlIHRoZSBmbGFncyB1c2VkIGJlZm9yZSAuaW5jYmluIHdhcyBpbnRyb2R1Y2VkLgorCisgIFVzaW5nIC5pbmNiaW4gaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciBsZCB0aGF0IHRoZSBjb3JyZWN0IGZsYWdzIGFyZSBzZXQKKyAgaW4gdGhlIEVMRiBoZWFkZXIsIGFzIHJlcXVpcmVkIGJ5IGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy4KKyovCisKKy5zZWN0aW9uIC5pbml0LnJhbWZzLCJhIgorLmluY2JpbiAidXNyL2luaXRyYW1mc19kYXRhLmNwaW8uYnoyIgpkaWZmIC0tZ2l0IGEvdXNyL2luaXRyYW1mc19kYXRhLmd6LlMgYi91c3IvaW5pdHJhbWZzX2RhdGEuZ3ouUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTBjOGRkCi0tLSAvZGV2L251bGwKKysrIGIvdXNyL2luaXRyYW1mc19kYXRhLmd6LlMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAgaW5pdHJhbWZzX2RhdGEgaW5jbHVkZXMgdGhlIGNvbXByZXNzZWQgYmluYXJ5IHRoYXQgaXMgdGhlCisgIGZpbGVzeXN0ZW0gdXNlZCBmb3IgZWFybHkgdXNlciBzcGFjZS4KKyAgTm90ZTogT2xkZXIgdmVyc2lvbnMgb2YgImFzIiAocHJpb3IgdG8gYmludXRpbHMgMi4xMS45MC4wLjIzCisgIHJlbGVhc2VkIG9uIDIwMDEtMDctMTQpIGRpdCBub3Qgc3VwcG9ydCAuaW5jYmluLgorICBJZiB5b3UgYXJlIGZvcmNlZCB0byB1c2Ugb2xkZXIgYmludXRpbHMgdGhhbiB0aGF0IHRoZW4gdGhlCisgIGZvbGxvd2luZyB0cmljayBjYW4gYmUgYXBwbGllZCB0byBjcmVhdGUgdGhlIHJlc3VsdGluZyBiaW5hcnk6CisKKworICBsZCAtbSBlbGZfaTM4NiAgLS1mb3JtYXQgYmluYXJ5IC0tb2Zvcm1hdCBlbGYzMi1pMzg2IC1yIFwKKyAgLVQgaW5pdHJhbWZzX2RhdGEuc2NyIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogLW8gaW5pdHJhbWZzX2RhdGEubworICAgbGQgLW0gZWxmX2kzODYgIC1yIC1vIGJ1aWx0LWluLm8gaW5pdHJhbWZzX2RhdGEubworCisgIGluaXRyYW1mc19kYXRhLnNjciBsb29rcyBsaWtlIHRoaXM6CitTRUNUSU9OUworeworICAgICAgIC5pbml0LnJhbWZzIDogeyAqKC5kYXRhKSB9Cit9CisKKyAgVGhlIGFib3ZlIGV4YW1wbGUgaXMgZm9yIGkzODYgLSB0aGUgcGFyYW1ldGVycyB2YXJ5IGZyb20gYXJjaGl0ZWN0dXJlcy4KKyAgRXZlbnR1YWxseSBsb29rIHVwIExERkxBR1NfQkxPQiBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZQorICBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgdG8gc2VlIHRoZSBmbGFncyB1c2VkIGJlZm9yZSAuaW5jYmluIHdhcyBpbnRyb2R1Y2VkLgorCisgIFVzaW5nIC5pbmNiaW4gaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciBsZCB0aGF0IHRoZSBjb3JyZWN0IGZsYWdzIGFyZSBzZXQKKyAgaW4gdGhlIEVMRiBoZWFkZXIsIGFzIHJlcXVpcmVkIGJ5IGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy4KKyovCisKKy5zZWN0aW9uIC5pbml0LnJhbWZzLCJhIgorLmluY2JpbiAidXNyL2luaXRyYW1mc19kYXRhLmNwaW8uZ3oiCmRpZmYgLS1naXQgYS91c3IvaW5pdHJhbWZzX2RhdGEubHptYS5TIGIvdXNyL2luaXRyYW1mc19kYXRhLmx6bWEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTE0NjllCi0tLSAvZGV2L251bGwKKysrIGIvdXNyL2luaXRyYW1mc19kYXRhLmx6bWEuUwpAQCAtMCwwICsxLDI5IEBACisvKgorICBpbml0cmFtZnNfZGF0YSBpbmNsdWRlcyB0aGUgY29tcHJlc3NlZCBiaW5hcnkgdGhhdCBpcyB0aGUKKyAgZmlsZXN5c3RlbSB1c2VkIGZvciBlYXJseSB1c2VyIHNwYWNlLgorICBOb3RlOiBPbGRlciB2ZXJzaW9ucyBvZiAiYXMiIChwcmlvciB0byBiaW51dGlscyAyLjExLjkwLjAuMjMKKyAgcmVsZWFzZWQgb24gMjAwMS0wNy0xNCkgZGl0IG5vdCBzdXBwb3J0IC5pbmNiaW4uCisgIElmIHlvdSBhcmUgZm9yY2VkIHRvIHVzZSBvbGRlciBiaW51dGlscyB0aGFuIHRoYXQgdGhlbiB0aGUKKyAgZm9sbG93aW5nIHRyaWNrIGNhbiBiZSBhcHBsaWVkIHRvIGNyZWF0ZSB0aGUgcmVzdWx0aW5nIGJpbmFyeToKKworCisgIGxkIC1tIGVsZl9pMzg2ICAtLWZvcm1hdCBiaW5hcnkgLS1vZm9ybWF0IGVsZjMyLWkzODYgLXIgXAorICAtVCBpbml0cmFtZnNfZGF0YS5zY3IgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiAtbyBpbml0cmFtZnNfZGF0YS5vCisgICBsZCAtbSBlbGZfaTM4NiAgLXIgLW8gYnVpbHQtaW4ubyBpbml0cmFtZnNfZGF0YS5vCisKKyAgaW5pdHJhbWZzX2RhdGEuc2NyIGxvb2tzIGxpa2UgdGhpczoKK1NFQ1RJT05TCit7CisgICAgICAgLmluaXQucmFtZnMgOiB7ICooLmRhdGEpIH0KK30KKworICBUaGUgYWJvdmUgZXhhbXBsZSBpcyBmb3IgaTM4NiAtIHRoZSBwYXJhbWV0ZXJzIHZhcnkgZnJvbSBhcmNoaXRlY3R1cmVzLgorICBFdmVudHVhbGx5IGxvb2sgdXAgTERGTEFHU19CTE9CIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlCisgIGFyY2gvJChBUkNIKS9NYWtlZmlsZSB0byBzZWUgdGhlIGZsYWdzIHVzZWQgYmVmb3JlIC5pbmNiaW4gd2FzIGludHJvZHVjZWQuCisKKyAgVXNpbmcgLmluY2JpbiBoYXMgdGhlIGFkdmFudGFnZSBvdmVyIGxkIHRoYXQgdGhlIGNvcnJlY3QgZmxhZ3MgYXJlIHNldAorICBpbiB0aGUgRUxGIGhlYWRlciwgYXMgcmVxdWlyZWQgYnkgY2VydGFpbiBhcmNoaXRlY3R1cmVzLgorKi8KKworLnNlY3Rpb24gLmluaXQucmFtZnMsImEiCisuaW5jYmluICJ1c3IvaW5pdHJhbWZzX2RhdGEuY3Bpby5sem1hIgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCAyM2I4MWNmLi5jM2I5OWRlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtODMsMjQgKzgzLDI4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlkeCkKK3N0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlkeCkKIHsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgKnBlbnQ7CisJaW50IGluamVjdGVkID0gLTE7CiAKIAlwZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbaWR4XTsKIAogCWlmICghcGVudC0+ZmllbGRzLm1hc2spIHsKLQkJaW50IGluamVjdGVkID0gaW9hcGljX2RlbGl2ZXIoaW9hcGljLCBpZHgpOworCQlpbmplY3RlZCA9IGlvYXBpY19kZWxpdmVyKGlvYXBpYywgaWR4KTsKIAkJaWYgKGluamVjdGVkICYmIHBlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpCiAJCQlwZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDE7CiAJfQogCWlmICghcGVudC0+ZmllbGRzLnRyaWdfbW9kZSkKIAkJaW9hcGljLT5pcnIgJj0gfigxIDw8IGlkeCk7CisKKwlyZXR1cm4gaW5qZWN0ZWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKQogewogCXVuc2lnbmVkIGluZGV4OworCWJvb2wgbWFza19iZWZvcmUsIG1hc2tfYWZ0ZXI7CiAKIAlzd2l0Y2ggKGlvYXBpYy0+aW9yZWdzZWwpIHsKIAljYXNlIElPQVBJQ19SRUdfVkVSU0lPTjoKQEAgLTEyMCw2ICsxMjQsNyBAQAogCQlpb2FwaWNfZGVidWcoImNoYW5nZSByZWRpciBpbmRleCAleCB2YWwgJXhcbiIsIGluZGV4LCB2YWwpOwogCQlpZiAoaW5kZXggPj0gSU9BUElDX05VTV9QSU5TKQogCQkJcmV0dXJuOworCQltYXNrX2JlZm9yZSA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOwogCQlpZiAoaW9hcGljLT5pb3JlZ3NlbCAmIDEpIHsKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgJj0gMHhmZmZmZmZmZjsKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgfD0gKHU2NCkgdmFsIDw8IDMyOwpAQCAtMTI4LDYgKzEzMyw5IEBACiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzIHw9ICh1MzIpIHZhbDsKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKIAkJfQorCQltYXNrX2FmdGVyID0gaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLm1hc2s7CisJCWlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKQorCQkJa3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoaW9hcGljLT5rdm0sIGluZGV4LCBtYXNrX2FmdGVyKTsKIAkJaWYgKGlvYXBpYy0+aXJyICYgKDEgPDwgaW5kZXgpKQogCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpbmRleCk7CiAJCWJyZWFrOwpAQCAtMjAyLDcgKzIxMCw3IEBACiAJdTggdHJpZ19tb2RlID0gaW9hcGljLT5yZWRpcnRibFtpcnFdLmZpZWxkcy50cmlnX21vZGU7CiAJdTMyIGRlbGl2ZXJfYml0bWFzazsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0JaW50IHZjcHVfaWQsIHIgPSAwOworCWludCB2Y3B1X2lkLCByID0gLTE7CiAKIAlpb2FwaWNfZGVidWcoImRlc3Q9JXggZGVzdF9tb2RlPSV4IGRlbGl2ZXJ5X21vZGU9JXggIgogCQkgICAgICJ2ZWN0b3I9JXggdHJpZ19tb2RlPSV4XG4iLApAQCAtMjQyLDcgKzI1MCw5IEBACiAJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwogCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKIAkJCWlmICh2Y3B1KSB7Ci0JCQkJciA9IGlvYXBpY19pbmpfaXJxKGlvYXBpYywgdmNwdSwgdmVjdG9yLAorCQkJCWlmIChyIDwgMCkKKwkJCQkJciA9IDA7CisJCQkJciArPSBpb2FwaWNfaW5qX2lycShpb2FwaWMsIHZjcHUsIHZlY3RvciwKIAkJCQkJICAgICAgIHRyaWdfbW9kZSwgZGVsaXZlcnlfbW9kZSk7CiAJCQl9CiAJCX0KQEAgLTI1Myw4ICsyNjMsMTAgQEAKIAkJCQljb250aW51ZTsKIAkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CiAJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOwotCQkJaWYgKHZjcHUpCisJCQlpZiAodmNwdSkgewogCQkJCWlvYXBpY19pbmpfbm1pKHZjcHUpOworCQkJCXIgPSAxOworCQkJfQogCQkJZWxzZQogCQkJCWlvYXBpY19kZWJ1ZygiTk1JIHRvIHZjcHUgJWQgZmFpbGVkXG4iLAogCQkJCQkJdmNwdS0+dmNwdV9pZCk7CkBAIC0yNjgsMTEgKzI4MCwxMiBAQAogCXJldHVybiByOwogfQogCi12b2lkIGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCkKIHsKIAl1MzIgb2xkX2lyciA9IGlvYXBpYy0+aXJyOwogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5IGVudHJ5OworCWludCByZXQgPSAxOwogCiAJaWYgKGlycSA+PSAwICYmIGlycSA8IElPQVBJQ19OVU1fUElOUykgewogCQllbnRyeSA9IGlvYXBpYy0+cmVkaXJ0YmxbaXJxXTsKQEAgLTI4MywyNSArMjk2LDI2IEBACiAJCQlpb2FwaWMtPmlyciB8PSBtYXNrOwogCQkJaWYgKCghZW50cnkuZmllbGRzLnRyaWdfbW9kZSAmJiBvbGRfaXJyICE9IGlvYXBpYy0+aXJyKQogCQkJICAgIHx8ICFlbnRyeS5maWVsZHMucmVtb3RlX2lycikKLQkJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSk7CisJCQkJcmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEpOwogCQl9CiAJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBnc2ksCitzdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgcGluLAogCQkJCSAgICBpbnQgdHJpZ2dlcl9tb2RlKQogewogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSAqZW50OwogCi0JZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbZ3NpXTsKKwllbnQgPSAmaW9hcGljLT5yZWRpcnRibFtwaW5dOwogCi0Ja3ZtX25vdGlmeV9hY2tlZF9pcnEoaW9hcGljLT5rdm0sIGdzaSk7CisJa3ZtX25vdGlmeV9hY2tlZF9pcnEoaW9hcGljLT5rdm0sIEtWTV9JUlFDSElQX0lPQVBJQywgcGluKTsKIAogCWlmICh0cmlnZ2VyX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpIHsKIAkJQVNTRVJUKGVudC0+ZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRyk7CiAJCWVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAwOwotCQlpZiAoIWVudC0+ZmllbGRzLm1hc2sgJiYgKGlvYXBpYy0+aXJyICYgKDEgPDwgZ3NpKSkpCi0JCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGdzaSk7CisJCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBwaW4pKSkKKwkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgcGluKTsKIAl9CiB9CiAKQEAgLTQyNiwzICs0NDAsNCBAQAogCWt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPm1taW9fYnVzLCAmaW9hcGljLT5kZXYpOwogCXJldHVybiAwOwogfQorCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuaCBiL3ZpcnQva3ZtL2lvYXBpYy5oCmluZGV4IDQ5Yzk1ODEuLmEzNGJkNWUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5oCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5oCkBAIC04Myw3ICs4Myw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFwKTsKIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSk7CiBpbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSk7Ci12b2lkIGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOworaW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpOwogdTMyIGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTggZGVzdCwKIAkJCQl1OCBkZXN0X21vZGUpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaXJxX2NvbW0uYyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKaW5kZXggYWE1ZDFlNS4uODY0YWM1NCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaXJxX2NvbW0uYworKysgYi92aXJ0L2t2bS9pcnFfY29tbS5jCkBAIC0yMCwzNSArMjAsMTMyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CisKICNpbmNsdWRlICJpcnEuaCIKIAogI2luY2x1ZGUgImlvYXBpYy5oIgogCi0vKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQgKi8KLXZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKQorc3RhdGljIGludCBrdm1fc2V0X3BpY19pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCQkgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKIHsKLQl1bnNpZ25lZCBsb25nICppcnFfc3RhdGUgPSAodW5zaWduZWQgbG9uZyAqKSZrdm0tPmFyY2guaXJxX3N0YXRlc1tpcnFdOworI2lmZGVmIENPTkZJR19YODYKKwlyZXR1cm4ga3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIGUtPmlycWNoaXAucGluLCBsZXZlbCk7CisjZWxzZQorCXJldHVybiAtMTsKKyNlbmRpZgorfQogCi0JLyogTG9naWNhbCBPUiBmb3IgbGV2ZWwgdHJpZyBpbnRlcnJ1cHQgKi8KLQlpZiAobGV2ZWwpCi0JCXNldF9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKLQllbHNlCi0JCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOworc3RhdGljIGludCBrdm1fc2V0X2lvYXBpY19pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCQkgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKK3sKKwlyZXR1cm4ga3ZtX2lvYXBpY19zZXRfaXJxKGt2bS0+YXJjaC52aW9hcGljLCBlLT5pcnFjaGlwLnBpbiwgbGV2ZWwpOworfQorCitzdGF0aWMgaW50IGt2bV9zZXRfbXNpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkgICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCit7CisJaW50IHZjcHVfaWQsIHIgPSAtMTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGlvYXBpY19pcnFjaGlwKGt2bSk7CisJaW50IGRlc3RfaWQgPSAoZS0+bXNpLmFkZHJlc3NfbG8gJiBNU0lfQUREUl9ERVNUX0lEX01BU0spCisJCQk+PiBNU0lfQUREUl9ERVNUX0lEX1NISUZUOworCWludCB2ZWN0b3IgPSAoZS0+bXNpLmRhdGEgJiBNU0lfREFUQV9WRUNUT1JfTUFTSykKKwkJCT4+IE1TSV9EQVRBX1ZFQ1RPUl9TSElGVDsKKwlpbnQgZGVzdF9tb2RlID0gdGVzdF9iaXQoTVNJX0FERFJfREVTVF9NT0RFX1NISUZULAorCQkJCSh1bnNpZ25lZCBsb25nICopJmUtPm1zaS5hZGRyZXNzX2xvKTsKKwlpbnQgdHJpZ19tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfVFJJR0dFUl9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuZGF0YSk7CisJaW50IGRlbGl2ZXJ5X21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZULAorCQkJCSh1bnNpZ25lZCBsb25nICopJmUtPm1zaS5kYXRhKTsKKwl1MzIgZGVsaXZlcl9iaXRtYXNrOworCisJQlVHX09OKCFpb2FwaWMpOworCisJZGVsaXZlcl9iaXRtYXNrID0ga3ZtX2lvYXBpY19nZXRfZGVsaXZlcnlfYml0bWFzayhpb2FwaWMsCisJCQkJZGVzdF9pZCwgZGVzdF9tb2RlKTsKKwkvKiBJT0FQSUMgZGVsaXZlcnkgbW9kZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBNU0kgaGVyZSAqLworCXN3aXRjaCAoZGVsaXZlcnlfbW9kZSkgeworCWNhc2UgSU9BUElDX0xPV0VTVF9QUklPUklUWToKKwkJdmNwdSA9IGt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShpb2FwaWMtPmt2bSwgdmVjdG9yLAorCQkJCWRlbGl2ZXJfYml0bWFzayk7CisJCWlmICh2Y3B1ICE9IE5VTEwpCisJCQlyID0ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gImt2bTogbnVsbCBsb3dlc3QgcHJpb3JpdHkgdmNwdSFcbiIpOworCQlicmVhazsKKwljYXNlIElPQVBJQ19GSVhFRDoKKwkJZm9yICh2Y3B1X2lkID0gMDsgZGVsaXZlcl9iaXRtYXNrICE9IDA7IHZjcHVfaWQrKykgeworCQkJaWYgKCEoZGVsaXZlcl9iaXRtYXNrICYgKDEgPDwgdmNwdV9pZCkpKQorCQkJCWNvbnRpbnVlOworCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKKwkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07CisJCQlpZiAodmNwdSkgeworCQkJCWlmIChyIDwgMCkKKwkJCQkJciA9IDA7CisJCQkJciArPSBrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrdm0tPmxvY2sgbXV0ZXggaGVsZAorICogUmV0dXJuIHZhbHVlOgorICogIDwgMCAgIEludGVycnVwdCB3YXMgaWdub3JlZCAobWFza2VkIG9yIG5vdCBkZWxpdmVyZWQgZm9yIG90aGVyIHJlYXNvbnMpCisgKiAgPSAwICAgSW50ZXJydXB0IHdhcyBjb2FsZXNjZWQgKHByZXZpb3VzIGlycSBpcyBzdGlsbCBwZW5kaW5nKQorICogID4gMCAgIE51bWJlciBvZiBDUFVzIGludGVycnVwdCB3YXMgZGVsaXZlcmVkIHRvCisgKi8KK2ludCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmU7CisJdW5zaWduZWQgbG9uZyAqaXJxX3N0YXRlLCBzaWdfbGV2ZWw7CisJaW50IHJldCA9IC0xOworCisJaWYgKGlycSA8IEtWTV9JT0FQSUNfTlVNX1BJTlMpIHsKKwkJaXJxX3N0YXRlID0gKHVuc2lnbmVkIGxvbmcgKikma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaXJxXTsKKworCQkvKiBMb2dpY2FsIE9SIGZvciBsZXZlbCB0cmlnIGludGVycnVwdCAqLworCQlpZiAobGV2ZWwpCisJCQlzZXRfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOworCQlzaWdfbGV2ZWwgPSAhISgqaXJxX3N0YXRlKTsKKwl9IGVsc2UgLyogRGVhbCB3aXRoIE1TSS9NU0ktWCAqLworCQlzaWdfbGV2ZWwgPSAxOwogCiAJLyogTm90IHBvc3NpYmxlIHRvIGRldGVjdCBpZiB0aGUgZ3Vlc3QgdXNlcyB0aGUgUElDIG9yIHRoZQogCSAqIElPQVBJQy4gIFNvIHNldCB0aGUgYml0IGluIGJvdGguIFRoZSBndWVzdCB3aWxsIGlnbm9yZQogCSAqIHdyaXRlcyB0byB0aGUgdW51c2VkIG9uZS4KIAkgKi8KLQlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIGlycSwgISEoKmlycV9zdGF0ZSkpOwotI2lmZGVmIENPTkZJR19YODYKLQlrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgaXJxLCAhISgqaXJxX3N0YXRlKSk7Ci0jZW5kaWYKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZrdm0tPmlycV9yb3V0aW5nLCBsaW5rKQorCQlpZiAoZS0+Z3NpID09IGlycSkgeworCQkJaW50IHIgPSBlLT5zZXQoZSwga3ZtLCBzaWdfbGV2ZWwpOworCQkJaWYgKHIgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSByICsgKChyZXQgPCAwKSA/IDAgOiByZXQpOworCQl9CisJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGdzaSkKK3ZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4pCiB7CisJc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmU7CiAJc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXVuc2lnbmVkIGdzaSA9IHBpbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmt2bS0+aXJxX3JvdXRpbmcsIGxpbmspCisJCWlmIChlLT5pcnFjaGlwLmlycWNoaXAgPT0gaXJxY2hpcCAmJgorCQkgICAgZS0+aXJxY2hpcC5waW4gPT0gcGluKSB7CisJCQlnc2kgPSBlLT5nc2k7CisJCQlicmVhazsKKwkJfQogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoa2lhbiwgbiwgJmt2bS0+YXJjaC5pcnFfYWNrX25vdGlmaWVyX2xpc3QsIGxpbmspCiAJCWlmIChraWFuLT5nc2kgPT0gZ3NpKQpAQCAtOTksMyArMTk2LDE3NyBAQAogCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2ldKTsKIAljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgJmt2bS0+YXJjaC5pcnFfc291cmNlc19iaXRtYXApOwogfQorCit2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pCit7CisJa2ltbi0+aXJxID0gaXJxOworCWhsaXN0X2FkZF9oZWFkKCZraW1uLT5saW5rLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QpOworfQorCit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKQoreworCWhsaXN0X2RlbCgma2ltbi0+bGluayk7Cit9CisKK3ZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBib29sIG1hc2spCit7CisJc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpbW4sIG4sICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCwgbGluaykKKwkJaWYgKGtpbW4tPmlycSA9PSBpcnEpCisJCQlraW1uLT5mdW5jKGtpbW4sIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBfX2t2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBsaXN0X2hlYWQgKmlycV9yb3V0aW5nKQoreworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuLCBpcnFfcm91dGluZywgbGluaykKKwkJa2ZyZWUoZSk7Cit9CisKK3ZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKQoreworCV9fa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoJmt2bS0+aXJxX3JvdXRpbmcpOworfQorCitzdGF0aWMgaW50IHNldHVwX3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUpCit7CisJaW50IHIgPSAtRUlOVkFMOworCWludCBkZWx0YTsKKworCWUtPmdzaSA9IHVlLT5nc2k7CisJc3dpdGNoICh1ZS0+dHlwZSkgeworCWNhc2UgS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVA6CisJCWRlbHRhID0gMDsKKwkJc3dpdGNoICh1ZS0+dS5pcnFjaGlwLmlycWNoaXApIHsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9QSUNfTUFTVEVSOgorCQkJZS0+c2V0ID0ga3ZtX3NldF9waWNfaXJxOworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX0lSUUNISVBfUElDX1NMQVZFOgorCQkJZS0+c2V0ID0ga3ZtX3NldF9waWNfaXJxOworCQkJZGVsdGEgPSA4OworCQkJYnJlYWs7CisJCWNhc2UgS1ZNX0lSUUNISVBfSU9BUElDOgorCQkJCWUtPnNldCA9IGt2bV9zZXRfaW9hcGljX2lycTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBvdXQ7CisJCX0KKwkJZS0+aXJxY2hpcC5pcnFjaGlwID0gdWUtPnUuaXJxY2hpcC5pcnFjaGlwOworCQllLT5pcnFjaGlwLnBpbiA9IHVlLT51LmlycWNoaXAucGluICsgZGVsdGE7CisJCWJyZWFrOworCWNhc2UgS1ZNX0lSUV9ST1VUSU5HX01TSToKKwkJZS0+c2V0ID0ga3ZtX3NldF9tc2k7CisJCWUtPm1zaS5hZGRyZXNzX2xvID0gdWUtPnUubXNpLmFkZHJlc3NfbG87CisJCWUtPm1zaS5hZGRyZXNzX2hpID0gdWUtPnUubXNpLmFkZHJlc3NfaGk7CisJCWUtPm1zaS5kYXRhID0gdWUtPnUubXNpLmRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gb3V0OworCX0KKwlyID0gMDsKK291dDoKKwlyZXR1cm4gcjsKK30KKworCitpbnQga3ZtX3NldF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0sCisJCQljb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSwKKwkJCXVuc2lnbmVkIG5yLAorCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGxpc3RfaGVhZCBpcnFfbGlzdCA9IExJU1RfSEVBRF9JTklUKGlycV9saXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRtcCA9IExJU1RfSEVBRF9JTklUKHRtcCk7CisJc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUgPSBOVUxMOworCXVuc2lnbmVkIGk7CisJaW50IHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7ICsraSkgeworCQlyID0gLUVJTlZBTDsKKwkJaWYgKHVlLT5nc2kgPj0gS1ZNX01BWF9JUlFfUk9VVEVTKQorCQkJZ290byBvdXQ7CisJCWlmICh1ZS0+ZmxhZ3MpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FTk9NRU07CisJCWUgPSBremFsbG9jKHNpemVvZigqZSksIEdGUF9LRVJORUwpOworCQlpZiAoIWUpCisJCQlnb3RvIG91dDsKKwkJciA9IHNldHVwX3JvdXRpbmdfZW50cnkoZSwgdWUpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQkrK3VlOworCQlsaXN0X2FkZCgmZS0+bGluaywgJmlycV9saXN0KTsKKwkJZSA9IE5VTEw7CisJfQorCisJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwlsaXN0X3NwbGljZSgma3ZtLT5pcnFfcm91dGluZywgJnRtcCk7CisJSU5JVF9MSVNUX0hFQUQoJmt2bS0+aXJxX3JvdXRpbmcpOworCWxpc3Rfc3BsaWNlKCZpcnFfbGlzdCwgJmt2bS0+aXJxX3JvdXRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZpcnFfbGlzdCk7CisJbGlzdF9zcGxpY2UoJnRtcCwgJmlycV9saXN0KTsKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisKKwlyID0gMDsKKworb3V0OgorCWtmcmVlKGUpOworCV9fa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoJmlycV9saXN0KTsKKwlyZXR1cm4gcjsKK30KKworI2RlZmluZSBJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpIFwKKwl7IC5nc2kgPSBpcnEsIC50eXBlID0gS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAsCVwKKwkgIC51LmlycWNoaXAuaXJxY2hpcCA9IEtWTV9JUlFDSElQX0lPQVBJQywgLnUuaXJxY2hpcC5waW4gPSAoaXJxKSB9CisjZGVmaW5lIFJPVVRJTkdfRU5UUlkxKGlycSkgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKQorCisjaWZkZWYgQ09ORklHX1g4NgorIyAgZGVmaW5lIFBJQ19ST1VUSU5HX0VOVFJZKGlycSkgXAorCXsgLmdzaSA9IGlycSwgLnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCwJXAorCSAgLnUuaXJxY2hpcC5pcnFjaGlwID0gU0VMRUNUX1BJQyhpcnEpLCAudS5pcnFjaGlwLnBpbiA9IChpcnEpICUgOCB9CisjICBkZWZpbmUgUk9VVElOR19FTlRSWTIoaXJxKSBcCisJSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSwgUElDX1JPVVRJTkdfRU5UUlkoaXJxKQorI2Vsc2UKKyMgIGRlZmluZSBST1VUSU5HX0VOVFJZMihpcnEpIFwKKwlJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZGVmYXVsdF9yb3V0aW5nW10gPSB7CisJUk9VVElOR19FTlRSWTIoMCksIFJPVVRJTkdfRU5UUlkyKDEpLAorCVJPVVRJTkdfRU5UUlkyKDIpLCBST1VUSU5HX0VOVFJZMigzKSwKKwlST1VUSU5HX0VOVFJZMig0KSwgUk9VVElOR19FTlRSWTIoNSksCisJUk9VVElOR19FTlRSWTIoNiksIFJPVVRJTkdfRU5UUlkyKDcpLAorCVJPVVRJTkdfRU5UUlkyKDgpLCBST1VUSU5HX0VOVFJZMig5KSwKKwlST1VUSU5HX0VOVFJZMigxMCksIFJPVVRJTkdfRU5UUlkyKDExKSwKKwlST1VUSU5HX0VOVFJZMigxMiksIFJPVVRJTkdfRU5UUlkyKDEzKSwKKwlST1VUSU5HX0VOVFJZMigxNCksIFJPVVRJTkdfRU5UUlkyKDE1KSwKKwlST1VUSU5HX0VOVFJZMSgxNiksIFJPVVRJTkdfRU5UUlkxKDE3KSwKKwlST1VUSU5HX0VOVFJZMSgxOCksIFJPVVRJTkdfRU5UUlkxKDE5KSwKKwlST1VUSU5HX0VOVFJZMSgyMCksIFJPVVRJTkdfRU5UUlkxKDIxKSwKKwlST1VUSU5HX0VOVFJZMSgyMiksIFJPVVRJTkdfRU5UUlkxKDIzKSwKKyNpZmRlZiBDT05GSUdfSUE2NAorCVJPVVRJTkdfRU5UUlkxKDI0KSwgUk9VVElOR19FTlRSWTEoMjUpLAorCVJPVVRJTkdfRU5UUlkxKDI2KSwgUk9VVElOR19FTlRSWTEoMjcpLAorCVJPVVRJTkdfRU5UUlkxKDI4KSwgUk9VVElOR19FTlRSWTEoMjkpLAorCVJPVVRJTkdfRU5UUlkxKDMwKSwgUk9VVElOR19FTlRSWTEoMzEpLAorCVJPVVRJTkdfRU5UUlkxKDMyKSwgUk9VVElOR19FTlRSWTEoMzMpLAorCVJPVVRJTkdfRU5UUlkxKDM0KSwgUk9VVElOR19FTlRSWTEoMzUpLAorCVJPVVRJTkdfRU5UUlkxKDM2KSwgUk9VVElOR19FTlRSWTEoMzcpLAorCVJPVVRJTkdfRU5UUlkxKDM4KSwgUk9VVElOR19FTlRSWTEoMzkpLAorCVJPVVRJTkdfRU5UUlkxKDQwKSwgUk9VVElOR19FTlRSWTEoNDEpLAorCVJPVVRJTkdfRU5UUlkxKDQyKSwgUk9VVElOR19FTlRSWTEoNDMpLAorCVJPVVRJTkdfRU5UUlkxKDQ0KSwgUk9VVElOR19FTlRSWTEoNDUpLAorCVJPVVRJTkdfRU5UUlkxKDQ2KSwgUk9VVElOR19FTlRSWTEoNDcpLAorI2VuZGlmCit9OworCitpbnQga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKQoreworCXJldHVybiBrdm1fc2V0X2lycV9yb3V0aW5nKGt2bSwgZGVmYXVsdF9yb3V0aW5nLAorCQkJCSAgIEFSUkFZX1NJWkUoZGVmYXVsdF9yb3V0aW5nKSwgMCk7Cit9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAyOWE2NjdjLi42MDU2OTdlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ3LDEwICs0Nyw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0jaWZkZWYgQ09ORklHX1g4NgotI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KLSNlbmRpZgotCiAjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCiAjaW5jbHVkZSAiY29hbGVzY2VkX21taW8uaCIKICNlbmRpZgpAQCAtODUsNTcgKzgxLDYgQEAKIHN0YXRpYyBib29sIGt2bV9yZWJvb3Rpbmc7CiAKICNpZmRlZiBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UCi0KLSNpZmRlZiBDT05GSUdfWDg2Ci1zdGF0aWMgdm9pZCBhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZGV2KQotewotCWludCB2Y3B1X2lkOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gaW9hcGljX2lycWNoaXAoZGV2LT5rdm0pOwotCWludCBkZXN0X2lkID0gKGRldi0+Z3Vlc3RfbXNpLmFkZHJlc3NfbG8gJiBNU0lfQUREUl9ERVNUX0lEX01BU0spCi0JCQk+PiBNU0lfQUREUl9ERVNUX0lEX1NISUZUOwotCWludCB2ZWN0b3IgPSAoZGV2LT5ndWVzdF9tc2kuZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKQotCQkJPj4gTVNJX0RBVEFfVkVDVE9SX1NISUZUOwotCWludCBkZXN0X21vZGUgPSB0ZXN0X2JpdChNU0lfQUREUl9ERVNUX01PREVfU0hJRlQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGV2LT5ndWVzdF9tc2kuYWRkcmVzc19sbyk7Ci0JaW50IHRyaWdfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGV2LT5ndWVzdF9tc2kuZGF0YSk7Ci0JaW50IGRlbGl2ZXJ5X21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmRhdGEpOwotCXUzMiBkZWxpdmVyX2JpdG1hc2s7Ci0KLQlCVUdfT04oIWlvYXBpYyk7Ci0KLQlkZWxpdmVyX2JpdG1hc2sgPSBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKGlvYXBpYywKLQkJCQlkZXN0X2lkLCBkZXN0X21vZGUpOwotCS8qIElPQVBJQyBkZWxpdmVyeSBtb2RlIHZhbHVlIGlzIHRoZSBzYW1lIGFzIE1TSSBoZXJlICovCi0Jc3dpdGNoIChkZWxpdmVyeV9tb2RlKSB7Ci0JY2FzZSBJT0FQSUNfTE9XRVNUX1BSSU9SSVRZOgotCQl2Y3B1ID0ga3ZtX2dldF9sb3dlc3RfcHJpb192Y3B1KGlvYXBpYy0+a3ZtLCB2ZWN0b3IsCi0JCQkJZGVsaXZlcl9iaXRtYXNrKTsKLQkJaWYgKHZjcHUgIT0gTlVMTCkKLQkJCWt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPICJrdm06IG51bGwgbG93ZXN0IHByaW9yaXR5IHZjcHUhXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBJT0FQSUNfRklYRUQ6Ci0JCWZvciAodmNwdV9pZCA9IDA7IGRlbGl2ZXJfYml0bWFzayAhPSAwOyB2Y3B1X2lkKyspIHsKLQkJCWlmICghKGRlbGl2ZXJfYml0bWFzayAmICgxIDw8IHZjcHVfaWQpKSkKLQkJCQljb250aW51ZTsKLQkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7Ci0JCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOwotCQkJaWYgKHZjcHUpCi0JCQkJa3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiB1bnN1cHBvcnRlZCBNU0kgZGVsaXZlcnkgbW9kZVxuIik7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIGFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICpkZXYpIHt9Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqa3ZtX2ZpbmRfYXNzaWduZWRfZGV2KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCQkJCQkgICAgICBpbnQgYXNzaWduZWRfZGV2X2lkKQogewpAQCAtMTYyLDEzICsxMDcsMTAgQEAKIAkgKiBmaW5lci1ncmFpbmVkIGxvY2ssIHVwZGF0ZSB0aGlzCiAJICovCiAJbXV0ZXhfbG9jaygmYXNzaWduZWRfZGV2LT5rdm0tPmxvY2spOwotCWlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfSU5UWCkKLQkJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sCi0JCQkgICAgYXNzaWduZWRfZGV2LT5pcnFfc291cmNlX2lkLAotCQkJICAgIGFzc2lnbmVkX2Rldi0+Z3Vlc3RfaXJxLCAxKTsKLQllbHNlIGlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmCi0JCQkJS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kpIHsKLQkJYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChhc3NpZ25lZF9kZXYpOworCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLCBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCisJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7CisKKwlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkgewogCQllbmFibGVfaXJxKGFzc2lnbmVkX2Rldi0+aG9zdF9pcnEpOwogCQlhc3NpZ25lZF9kZXYtPmhvc3RfaXJxX2Rpc2FibGVkID0gZmFsc2U7CiAJfQpAQCAtMzMxLDE4ICsyNzMsMjQgQEAKIHsKIAlpbnQgcjsKIAorCWFkZXYtPmd1ZXN0X2lycSA9IGFpcnEtPmd1ZXN0X2lycTsKIAlpZiAoYWlycS0+ZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSSkgewogCQkvKiB4ODYgZG9uJ3QgY2FyZSB1cHBlciBhZGRyZXNzIG9mIGd1ZXN0IG1zaSBtZXNzYWdlIGFkZHIgKi8KIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlIHw9IEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJOwogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJj0gfktWTV9BU1NJR05FRF9ERVZfR1VFU1RfSU5UWDsKLQkJYWRldi0+Z3Vlc3RfbXNpLmFkZHJlc3NfbG8gPSBhaXJxLT5ndWVzdF9tc2kuYWRkcl9sbzsKLQkJYWRldi0+Z3Vlc3RfbXNpLmRhdGEgPSBhaXJxLT5ndWVzdF9tc2kuZGF0YTsKIAkJYWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IC0xOwogCX0gZWxzZSBpZiAobXNpMmludHgpIHsKIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlIHw9IEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfSU5UWDsKIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICY9IH5LVk1fQVNTSUdORURfREVWX0dVRVNUX01TSTsKLQkJYWRldi0+Z3Vlc3RfaXJxID0gYWlycS0+Z3Vlc3RfaXJxOwogCQlhZGV2LT5hY2tfbm90aWZpZXIuZ3NpID0gYWlycS0+Z3Vlc3RfaXJxOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEd1ZXN0IHJlcXVpcmUgdG8gZGlzYWJsZSBkZXZpY2UgTVNJLCB3ZSBkaXNhYmxlIE1TSSBhbmQKKwkJICogcmUtZW5hYmxlIElOVHggYnkgZGVmYXVsdCBhZ2Fpbi4gTm90aWNlIGl0J3Mgb25seSBmb3IKKwkJICogbm9uLW1zaTJpbnR4LgorCQkgKi8KKwkJYXNzaWduZWRfZGV2aWNlX3VwZGF0ZV9pbnR4KGt2bSwgYWRldiwgYWlycSk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0hPU1RfTVNJKQpAQCAtMzc5LDYgKzMyNyw3IEBACiB7CiAJaW50IHIgPSAwOwogCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqbWF0Y2g7CisJdTMyIGN1cnJlbnRfZmxhZ3MgPSAwLCBjaGFuZ2VkX2ZsYWdzOwogCiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKIApAQCAtNDE2LDggKzM2NSwxMyBAQAogCQl9CiAJfQogCi0JaWYgKCghbXNpMmludHggJiYKLQkgICAgIChhc3NpZ25lZF9pcnEtPmZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kpKSB8fAorCWlmICgobWF0Y2gtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfSE9TVF9NU0kpICYmCisJCSAobWF0Y2gtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSkKKwkJY3VycmVudF9mbGFncyB8PSBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSTsKKworCWNoYW5nZWRfZmxhZ3MgPSBhc3NpZ25lZF9pcnEtPmZsYWdzIF4gY3VycmVudF9mbGFnczsKKworCWlmICgoY2hhbmdlZF9mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9NU0lfQUNUSU9OKSB8fAogCSAgICAobXNpMmludHggJiYgbWF0Y2gtPmRldi0+bXNpX2VuYWJsZWQpKSB7CiAjaWZkZWYgQ09ORklHX1g4NgogCQlyID0gYXNzaWduZWRfZGV2aWNlX3VwZGF0ZV9tc2koa3ZtLCBtYXRjaCwgYXNzaWduZWRfaXJxKTsKQEAgLTU2Myw3ICs1MTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoYXNzaWduZWRfZGV2LT5mbGFncyAmIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVSkKKwlpZiAobWF0Y2gtPmZsYWdzICYgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VKQogCQlrdm1fZGVhc3NpZ25fZGV2aWNlKGt2bSwgbWF0Y2gpOwogCiAJa3ZtX2ZyZWVfYXNzaWduZWRfZGV2aWNlKGt2bSwgbWF0Y2gpOwpAQCAtNTgxLDggKzUzNSwxMCBAQAogCiBpbmxpbmUgaW50IGt2bV9pc19tbWlvX3BmbihwZm5fdCBwZm4pCiB7Ci0JaWYgKHBmbl92YWxpZChwZm4pKQotCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOworCWlmIChwZm5fdmFsaWQocGZuKSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGNvbXBvdW5kX2hlYWQocGZuX3RvX3BhZ2UocGZuKSk7CisJCXJldHVybiBQYWdlUmVzZXJ2ZWQocGFnZSk7CisJfQogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC04MjgsNiArNzg0LDEwIEBACiAKIAlpZiAoSVNfRVJSKGt2bSkpCiAJCWdvdG8gb3V0OworI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJSU5JVF9MSVNUX0hFQUQoJmt2bS0+aXJxX3JvdXRpbmcpOworCUlOSVRfSExJU1RfSEVBRCgma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QpOworI2VuZGlmCiAKICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CkBAIC05MDksNiArODY5LDcgQEAKIAlzcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2RlbCgma3ZtLT52bV9saXN0KTsKIAlzcGluX3VubG9jaygma3ZtX2xvY2spOworCWt2bV9mcmVlX2lycV9yb3V0aW5nKGt2bSk7CiAJa3ZtX2lvX2J1c19kZXN0cm95KCZrdm0tPnBpb19idXMpOwogCWt2bV9pb19idXNfZGVzdHJveSgma3ZtLT5tbWlvX2J1cyk7CiAjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCkBAIC0xNzU1LDEzICsxNzE2LDEzIEBACiAJCXIgPSAwOwogCQlicmVhazsKIAl9Ci0JY2FzZSBLVk1fREVCVUdfR1VFU1Q6IHsKLQkJc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCBkYmc7CisJY2FzZSBLVk1fU0VUX0dVRVNUX0RFQlVHOiB7CisJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgZGJnOwogCiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmRiZywgYXJncCwgc2l6ZW9mIGRiZykpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3QodmNwdSwgJmRiZyk7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1Zyh2Y3B1LCAmZGJnKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xOTI5LDYgKzE4OTAsMzYgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCisjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORworCWNhc2UgS1ZNX1NFVF9HU0lfUk9VVElORzogeworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHJvdXRpbmc7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmcgX191c2VyICp1cm91dGluZzsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqZW50cmllczsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyb3V0aW5nLCBhcmdwLCBzaXplb2Yocm91dGluZykpKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRUlOVkFMOworCQlpZiAocm91dGluZy5uciA+PSBLVk1fTUFYX0lSUV9ST1VURVMpCisJCQlnb3RvIG91dDsKKwkJaWYgKHJvdXRpbmcuZmxhZ3MpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FTk9NRU07CisJCWVudHJpZXMgPSB2bWFsbG9jKHJvdXRpbmcubnIgKiBzaXplb2YoKmVudHJpZXMpKTsKKwkJaWYgKCFlbnRyaWVzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRUZBVUxUOworCQl1cm91dGluZyA9IGFyZ3A7CisJCWlmIChjb3B5X2Zyb21fdXNlcihlbnRyaWVzLCB1cm91dGluZy0+ZW50cmllcywKKwkJCQkgICByb3V0aW5nLm5yICogc2l6ZW9mKCplbnRyaWVzKSkpCisJCQlnb3RvIG91dF9mcmVlX2lycV9yb3V0aW5nOworCQlyID0ga3ZtX3NldF9pcnFfcm91dGluZyhrdm0sIGVudHJpZXMsIHJvdXRpbmcubnIsCisJCQkJCXJvdXRpbmcuZmxhZ3MpOworCW91dF9mcmVlX2lycV9yb3V0aW5nOgorCQl2ZnJlZShlbnRyaWVzKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJZGVmYXVsdDoKIAkJciA9IGt2bV9hcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwogCX0KQEAgLTE5OTUsNiArMTk4NiwxMCBAQAogCWNhc2UgS1ZNX0NBUF9VU0VSX01FTU9SWToKIAljYXNlIEtWTV9DQVBfREVTVFJPWV9NRU1PUllfUkVHSU9OX1dPUktTOgogCQlyZXR1cm4gMTsKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCWNhc2UgS1ZNX0NBUF9JUlFfUk9VVElORzoKKwkJcmV0dXJuIEtWTV9NQVhfSVJRX1JPVVRFUzsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0K